From f3c5869c65d4c1e770a9650769d839847ec47327 Mon Sep 17 00:00:00 2001 From: Uh Sado Date: Sat, 2 Nov 2019 04:55:02 +0000 Subject: [PATCH] merged go-ethereum v1.9.6 --- .dockerignore | 4 - .github/CODEOWNERS | 20 +- .github/ISSUE_TEMPLATE.md | 2 +- .gitignore | 1 + .travis.yml | 113 +- AUTHORS | 247 +- Dockerfile | 6 +- Dockerfile.alltools | 6 +- Makefile | 12 +- README.md | 361 +- SECURITY.md | 120 + accounts/abi/abi.go | 77 +- accounts/abi/abi_test.go | 360 +- accounts/abi/argument.go | 40 +- accounts/abi/bind/auth.go | 34 + accounts/abi/bind/backends/simulated.go | 60 +- accounts/abi/bind/backends/simulated_test.go | 83 + accounts/abi/bind/base.go | 20 +- accounts/abi/bind/base_test.go | 287 +- accounts/abi/bind/bind.go | 406 +- accounts/abi/bind/bind_test.go | 950 +- accounts/abi/bind/template.go | 278 +- accounts/abi/bind/topics.go | 56 +- accounts/abi/bind/topics_test.go | 103 + accounts/abi/bind/util_test.go | 4 +- accounts/abi/event.go | 38 +- accounts/abi/event_test.go | 4 +- accounts/abi/method.go | 27 +- accounts/abi/method_test.go | 75 +- accounts/abi/pack_test.go | 14 +- accounts/abi/reflect.go | 10 +- accounts/abi/type.go | 10 +- accounts/abi/type_test.go | 8 +- accounts/abi/unpack.go | 2 +- accounts/abi/unpack_test.go | 31 +- accounts/accounts.go | 79 +- .../error.go => accounts/accounts_test.go | 29 +- accounts/errors.go | 2 +- accounts/external/backend.go | 231 + accounts/hd.go | 25 +- accounts/keystore/keystore.go | 8 +- accounts/keystore/keystore_test.go | 6 +- accounts/keystore/passphrase.go | 5 +- accounts/keystore/plain_test.go | 2 +- accounts/keystore/testdata/keystore/README | 2 +- accounts/keystore/wallet.go | 45 +- accounts/keystore/watch.go | 2 +- accounts/keystore/watch_fallback.go | 2 +- accounts/manager.go | 32 +- accounts/scwallet/README.md | 102 + accounts/scwallet/apdu.go | 87 + accounts/scwallet/hub.go | 302 + accounts/scwallet/securechannel.go | 346 + accounts/scwallet/wallet.go | 1082 + .../binaryserializer.go => accounts/sort.go | 35 +- accounts/url_test.go | 2 +- accounts/usbwallet/hub.go | 61 +- .../usbwallet/internal/trezor/messages.pb.go | 3081 - .../usbwallet/internal/trezor/messages.proto | 905 - accounts/usbwallet/internal/trezor/trezor.go | 46 - .../usbwallet/internal/trezor/types.pb.go | 1333 - .../usbwallet/internal/trezor/types.proto | 278 - accounts/usbwallet/ledger.go | 3 +- accounts/usbwallet/offline.go | 18 +- accounts/usbwallet/trezor.go | 81 +- .../usbwallet/trezor/messages-common.pb.go | 811 + .../usbwallet/trezor/messages-common.proto | 147 + .../usbwallet/trezor/messages-ethereum.pb.go | 698 + .../usbwallet/trezor/messages-ethereum.proto | 131 + .../trezor/messages-management.pb.go | 1621 + .../trezor/messages-management.proto | 289 + accounts/usbwallet/trezor/messages.pb.go | 889 + accounts/usbwallet/trezor/messages.proto | 264 + accounts/usbwallet/trezor/trezor.go | 70 + accounts/usbwallet/wallet.go | 177 +- appveyor.yml | 4 +- build/ci-notes.md | 6 +- build/ci.go | 65 +- build/deb/ethereum-swarm/deb.changelog | 5 - build/deb/ethereum-swarm/deb.control | 19 - build/deb/ethereum-swarm/deb.copyright | 14 - build/deb/ethereum-swarm/deb.docs | 1 - build/deb/ethereum-swarm/deb.install | 1 - build/deb/ethereum-swarm/deb.rules | 13 - build/deb/ethereum/deb.control | 6 +- build/deb/ethereum/deb.rules | 5 +- build/travis_keepalive.sh | 46 + build/update-license.go | 46 +- cmd/abigen/main.go | 255 +- cmd/bootnode/main.go | 17 +- cmd/checkpoint-admin/common.go | 120 + cmd/checkpoint-admin/exec.go | 311 + cmd/checkpoint-admin/main.go | 117 + cmd/checkpoint-admin/status.go | 61 + cmd/clef/4byte.json | 1 - cmd/clef/README.md | 367 +- cmd/clef/datatypes.md | 224 + cmd/clef/docs/clef_architecture_pt1.png | Bin 0 -> 69221 bytes cmd/clef/docs/clef_architecture_pt2.png | Bin 0 -> 81521 bytes cmd/clef/docs/clef_architecture_pt3.png | Bin 0 -> 101351 bytes cmd/clef/docs/clef_architecture_pt4.png | Bin 0 -> 117597 bytes cmd/clef/extapi_changelog.md | 44 +- cmd/clef/intapi_changelog.md | 119 +- cmd/clef/main.go | 623 +- cmd/clef/pythonsigner.py | 6 +- cmd/clef/rules.md | 176 +- cmd/clef/tests/testsigner.js | 89 + cmd/clef/tutorial.md | 390 +- cmd/devp2p/discv4cmd.go | 194 + cmd/devp2p/dns_cloudflare.go | 163 + cmd/devp2p/dnscmd.go | 358 + cmd/devp2p/enrcmd.go | 198 + cmd/devp2p/main.go | 96 + cmd/devp2p/nodeset.go | 87 + cmd/ethkey/README.md | 12 +- ...{changepassphrase.go => changepassword.go} | 30 +- cmd/ethkey/main.go | 5 +- cmd/ethkey/message_test.go | 6 +- cmd/ethkey/utils.go | 12 +- cmd/evm/internal/compiler/compiler.go | 2 +- cmd/evm/main.go | 9 +- cmd/evm/runner.go | 59 +- cmd/evm/staterunner.go | 2 +- cmd/faucet/faucet.go | 60 +- cmd/faucet/faucet.html | 5 +- cmd/faucet/website.go | 65 +- cmd/geth/accountcmd.go | 44 +- cmd/geth/accountcmd_test.go | 60 +- cmd/geth/bugcmd.go | 113 - cmd/geth/chaincmd.go | 193 +- cmd/geth/config.go | 11 +- cmd/geth/consolecmd.go | 5 +- cmd/geth/consolecmd_test.go | 16 +- cmd/geth/dao_test.go | 3 +- cmd/geth/governancedeploy.go | 5 +- cmd/geth/main.go | 211 +- cmd/geth/misccmd.go | 3 + cmd/geth/monitorcmd.go | 351 - cmd/geth/retesteth.go | 899 + cmd/geth/retesteth_copypaste.go | 148 + cmd/geth/run_test.go | 28 + cmd/geth/usage.go | 53 +- cmd/internal/browser/browser.go | 46 - cmd/puppeth/genesis_test.go | 5 +- cmd/puppeth/module_explorer.go | 174 +- cmd/puppeth/wizard_dashboard.go | 2 +- cmd/puppeth/wizard_explorer.go | 55 +- cmd/puppeth/wizard_faucet.go | 2 +- cmd/puppeth/wizard_genesis.go | 17 +- cmd/puppeth/wizard_network.go | 2 +- cmd/puppeth/wizard_node.go | 2 +- cmd/swarm/access.go | 297 - cmd/swarm/access_test.go | 614 - cmd/swarm/bootnodes.go | 24 - cmd/swarm/config.go | 447 - cmd/swarm/config_test.go | 575 - cmd/swarm/db.go | 147 - cmd/swarm/download.go | 112 - cmd/swarm/export_test.go | 119 - cmd/swarm/feeds.go | 238 - cmd/swarm/feeds_test.go | 196 - cmd/swarm/flags.go | 184 - cmd/swarm/fs.go | 162 - cmd/swarm/fs_test.go | 260 - cmd/swarm/hash.go | 58 - cmd/swarm/list.go | 70 - cmd/swarm/main.go | 469 - cmd/swarm/manifest.go | 353 - cmd/swarm/manifest_test.go | 597 - cmd/swarm/mimegen/generator.go | 124 - cmd/swarm/mimegen/mime.types | 1828 - cmd/swarm/run_test.go | 480 - cmd/swarm/swarm-smoke/feed_upload_and_sync.go | 291 - cmd/swarm/swarm-smoke/main.go | 190 - cmd/swarm/swarm-smoke/upload_and_sync.go | 194 - cmd/swarm/upload.go | 188 - cmd/swarm/upload_test.go | 356 - cmd/utils/cmd.go | 6 +- cmd/utils/customflags.go | 82 +- cmd/utils/flags.go | 496 +- cmd/wnode/main.go | 8 +- common/bitutil/bitutil_test.go | 10 +- common/bytes.go | 21 +- common/compiler/helpers.go | 65 + common/compiler/solidity.go | 64 +- common/compiler/solidity_test.go | 7 +- common/compiler/test.v.py | 3 + common/compiler/test_bad.v.py | 3 + common/compiler/vyper.go | 144 + common/compiler/vyper_test.go | 71 + common/fdlimit/fdlimit_darwin.go | 71 + common/fdlimit/fdlimit_freebsd.go | 2 +- common/fdlimit/fdlimit_unix.go | 2 +- common/fdlimit/fdlimit_windows.go | 1 + common/hexutil/json.go | 55 + common/math/big.go | 7 + common/mclock/mclock.go | 19 +- common/mclock/simclock.go | 57 +- common/mclock/simclock_test.go | 115 + common/prque/lazyqueue.go | 182 + common/prque/lazyqueue_test.go | 119 + common/prque/prque.go | 25 +- common/prque/sstack.go | 18 +- common/size.go | 24 +- common/size_test.go | 4 +- common/types.go | 35 +- common/types_test.go | 4 +- consensus/clique/clique.go | 123 +- consensus/clique/clique_test.go | 113 + consensus/clique/snapshot.go | 16 +- consensus/clique/snapshot_test.go | 10 +- consensus/consensus.go | 11 +- consensus/ethash/algorithm_test.go | 2 +- consensus/ethash/consensus.go | 36 +- consensus/ethash/consensus_test.go | 2 +- consensus/ethash/sealer.go | 4 +- consensus/ethash/sealer_test.go | 16 + console/bridge.go | 102 +- console/console.go | 32 +- console/console_test.go | 11 +- console/prompter.go | 2 +- containers/docker/develop-alpine/Dockerfile | 14 - containers/docker/develop-ubuntu/Dockerfile | 17 - containers/docker/master-alpine/Dockerfile | 14 - containers/docker/master-ubuntu/Dockerfile | 17 - contracts/checkpointoracle/contract/oracle.go | 415 + .../checkpointoracle/contract/oracle.sol | 174 + contracts/checkpointoracle/oracle.go | 90 + contracts/checkpointoracle/oracle_test.go | 336 + contracts/chequebook/api.go | 68 - contracts/chequebook/cheque.go | 641 - contracts/chequebook/cheque_test.go | 487 - contracts/chequebook/contract/chequebook.go | 367 - contracts/chequebook/contract/chequebook.sol | 47 - contracts/chequebook/contract/code.go | 5 - contracts/chequebook/contract/mortal.sol | 10 - contracts/chequebook/contract/owned.sol | 15 - contracts/chequebook/gencode.go | 70 - contracts/ens/README.md | 20 - contracts/ens/contract/AbstractENS.sol | 23 - contracts/ens/contract/ENS.sol | 94 - contracts/ens/contract/FIFSRegistrar.sol | 39 - contracts/ens/contract/PublicResolver.sol | 212 - contracts/ens/contract/ens.go | 879 - contracts/ens/contract/fifsregistrar.go | 195 - contracts/ens/contract/publicresolver.go | 1321 - contracts/ens/ens.go | 195 - contracts/ens/ens_test.go | 94 - core/asm/lex_test.go | 2 +- core/asm/lexer.go | 2 +- core/bench_test.go | 14 +- core/block_validator.go | 2 +- core/block_validator_test.go | 8 +- core/blockchain.go | 1113 +- core/blockchain_insert.go | 55 +- core/blockchain_test.go | 1048 +- core/chain_indexer.go | 30 +- core/chain_indexer_test.go | 5 +- core/chain_makers.go | 38 +- core/chain_makers_test.go | 4 +- core/dao_test.go | 16 +- core/error.go | 3 + core/evm.go | 2 +- core/forkid/forkid.go | 236 + core/forkid/forkid_test.go | 211 + core/genesis.go | 42 +- core/genesis_test.go | 2 +- core/headerchain.go | 111 +- core/helper_test.go | 3 +- core/mkalloc.go | 3 +- core/rawdb/accessors_chain.go | 286 +- core/rawdb/accessors_chain_test.go | 85 +- core/rawdb/accessors_indexes.go | 92 +- core/rawdb/accessors_indexes_test.go | 102 +- core/rawdb/accessors_metadata.go | 13 +- core/rawdb/database.go | 398 + core/rawdb/freezer.go | 393 + core/rawdb/freezer_reinit.go | 127 + core/rawdb/freezer_table.go | 637 + core/rawdb/freezer_table_test.go | 624 + core/rawdb/schema.go | 42 +- core/rawdb/table.go | 204 + core/state/database.go | 111 +- core/state/dump.go | 127 +- core/state/iterator_test.go | 5 +- core/state/managed_state.go | 143 - core/state/managed_state_test.go | 123 - core/state/state_object.go | 330 +- core/state/state_object_test.go | 70 + core/state/state_test.go | 26 +- core/state/statedb.go | 274 +- core/state/statedb_test.go | 324 +- core/state/sync.go | 5 +- core/state/sync_test.go | 26 +- core/state_prefetcher.go | 85 + core/state_processor.go | 15 +- core/state_transition.go | 15 +- core/tx_list.go | 4 +- core/tx_noncer.go | 79 + core/tx_pool.go | 1059 +- core/tx_pool_test.go | 290 +- core/types.go | 19 +- core/types/block.go | 46 +- core/types/block_test.go | 23 +- core/types/gen_header_json.go | 8 +- core/types/gen_log_json.go | 2 + core/types/gen_receipt_json.go | 19 + core/types/gen_tx_json.go | 2 + core/types/log.go | 47 +- core/types/receipt.go | 162 +- core/types/receipt_test.go | 283 + core/types/transaction.go | 4 +- core/types/transaction_signing.go | 6 +- core/types/transaction_test.go | 17 +- core/vm/common.go | 30 +- core/vm/contract.go | 2 +- core/vm/contracts.go | 189 +- core/vm/contracts_test.go | 97 +- core/vm/eips.go | 92 + core/vm/evm.go | 40 +- core/vm/gas.go | 18 +- core/vm/gas_table.go | 422 +- core/vm/gas_table_test.go | 93 +- core/vm/instructions.go | 41 +- core/vm/instructions_test.go | 225 +- core/vm/interface.go | 2 +- core/vm/interpreter.go | 125 +- core/vm/jump_table.go | 1441 +- core/vm/logger.go | 4 +- core/vm/logger_json.go | 14 +- core/vm/memory_table.go | 114 +- core/vm/opcodes.go | 18 +- core/vm/runtime/runtime.go | 6 +- core/vm/runtime/runtime_test.go | 6 +- core/vm/stack_table.go | 32 +- core/vm/testdata/testcases_add.json | 1 + core/vm/testdata/testcases_and.json | 1 + core/vm/testdata/testcases_byte.json | 1 + core/vm/testdata/testcases_div.json | 1 + core/vm/testdata/testcases_eq.json | 1 + core/vm/testdata/testcases_exp.json | 1 + core/vm/testdata/testcases_gt.json | 1 + core/vm/testdata/testcases_lt.json | 1 + core/vm/testdata/testcases_mod.json | 1 + core/vm/testdata/testcases_mul.json | 1 + core/vm/testdata/testcases_or.json | 1 + core/vm/testdata/testcases_sar.json | 1 + core/vm/testdata/testcases_sdiv.json | 1 + core/vm/testdata/testcases_sgt.json | 1 + core/vm/testdata/testcases_shl.json | 1 + core/vm/testdata/testcases_shr.json | 1 + core/vm/testdata/testcases_signext.json | 1 + core/vm/testdata/testcases_slt.json | 1 + core/vm/testdata/testcases_smod.json | 1 + core/vm/testdata/testcases_sub.json | 1 + core/vm/testdata/testcases_xor.json | 1 + crypto/blake2b/blake2b.go | 319 + crypto/blake2b/blake2bAVX2_amd64.go | 37 + crypto/blake2b/blake2bAVX2_amd64.s | 717 + crypto/blake2b/blake2b_amd64.go | 24 + crypto/blake2b/blake2b_amd64.s | 253 + crypto/blake2b/blake2b_f_fuzz.go | 57 + crypto/blake2b/blake2b_f_test.go | 59 + crypto/blake2b/blake2b_generic.go | 180 + crypto/blake2b/blake2b_ref.go | 11 + crypto/blake2b/blake2b_test.go | 871 + crypto/blake2b/blake2x.go | 177 + crypto/blake2b/register.go | 32 + crypto/bn256/cloudflare/bn256.go | 9 + crypto/bn256/cloudflare/constants.go | 5 +- crypto/bn256/cloudflare/gfp6.go | 2 +- crypto/bn256/cloudflare/main_test.go | 2 +- crypto/bn256/cloudflare/mul_arm64.h | 32 +- crypto/bn256/google/main_test.go | 2 +- crypto/crypto.go | 9 + crypto/ecies/ecies_test.go | 135 +- .../libsecp256k1/src/asm/field_10x26_arm.s | 2 +- crypto/signature_cgo.go | 18 +- crypto/signature_nocgo.go | 4 +- dashboard/assets.go | 76733 ++++---- dashboard/assets/.eslintignore | 3 + dashboard/assets/.eslintrc | 107 +- dashboard/assets/.flowconfig | 2 + dashboard/assets/common.jsx | 33 +- dashboard/assets/components/ChartRow.jsx | 4 +- dashboard/assets/components/CustomTooltip.jsx | 19 +- dashboard/assets/components/Dashboard.jsx | 32 +- dashboard/assets/components/Footer.jsx | 78 +- dashboard/assets/components/Header.jsx | 18 +- dashboard/assets/components/Logs.jsx | 17 +- dashboard/assets/components/Main.jsx | 38 +- dashboard/assets/components/Network.jsx | 529 + dashboard/assets/components/SideBar.jsx | 20 +- dashboard/assets/fa-only-woff-loader.js | 12 +- dashboard/assets/index.html | 2 +- dashboard/assets/index.jsx | 7 +- dashboard/assets/package.json | 97 +- dashboard/assets/types/content.jsx | 46 +- ...ack.config.js => webpack.config.common.js} | 70 +- dashboard/assets/webpack.config.dev.js | 35 + .../assets/webpack.config.prod.js | 42 +- dashboard/assets/yarn.lock | 7970 +- dashboard/dashboard.go | 217 +- dashboard/geoip.go | 98 + dashboard/log.go | 18 +- dashboard/message.go | 13 +- dashboard/peers.go | 552 + dashboard/system.go | 146 + docs/audits/2017-04-25_Geth-audit_Truesec.pdf | Bin 0 -> 124427 bytes docs/audits/2018-09-14_Clef-audit_NCC.pdf | Bin 0 -> 755237 bytes eth/api.go | 88 +- eth/api_backend.go | 116 +- eth/api_test.go | 161 +- eth/api_tracer.go | 50 +- eth/backend.go | 125 +- eth/bloombits.go | 2 +- eth/config.go | 90 +- eth/downloader/downloader.go | 261 +- eth/downloader/downloader_test.go | 131 +- eth/downloader/events.go | 6 +- eth/downloader/fakepeer.go | 2 +- eth/downloader/statesync.go | 27 +- eth/downloader/testchain_test.go | 6 +- eth/enr_entry.go | 61 + eth/fetcher/fetcher.go | 10 +- eth/fetcher/fetcher_test.go | 6 +- eth/filters/bench_test.go | 59 +- eth/filters/filter_system_test.go | 18 +- eth/filters/filter_test.go | 10 +- eth/gen_config.go | 139 +- eth/handler.go | 236 +- eth/handler_test.go | 197 +- eth/helper_test.go | 10 +- eth/peer.go | 12 +- eth/protocol.go | 21 +- eth/protocol_test.go | 2 +- eth/sync.go | 23 +- eth/tracers/internal/tracers/evmdis_tracer.js | 2 +- ...l_tracer_inner_create_oog_outer_throw.json | 2 +- eth/tracers/testdata/call_tracer_throw.json | 2 +- eth/tracers/tracer.go | 2 +- eth/tracers/tracers_test.go | 12 +- ethclient/ethclient.go | 23 +- ethclient/ethclient_test.go | 185 + ethdb/.gitignore | 12 - ethdb/{interface.go => batch.go} | 50 +- ethdb/database.go | 466 +- ethdb/database_js.go | 68 - ethdb/database_test.go | 214 - ethdb/dbtest/testsuite.go | 315 + ethdb/iterator.go | 66 + ethdb/leveldb/leveldb.go | 490 + .../leveldb_test.go} | 25 +- ethdb/memory_database.go | 143 - ethdb/memorydb/memorydb.go | 344 + .../memorydb/memorydb_test.go | 20 +- ethdb/{ => rocksdb}/norocksdb.go | 0 .../rocksdb.go} | 79 +- ethdb/table.go | 51 - ethdb/table_batch.go | 51 - ethstats/ethstats.go | 38 +- graphql/graphiql.go | 120 + graphql/graphql.go | 1055 + .../fuse_root.go => graphql/graphql_test.go | 23 +- graphql/schema.go | 320 + graphql/service.go | 103 + interfaces.go | 6 +- internal/build/azure.go | 20 +- internal/build/env.go | 60 +- internal/build/util.go | 43 +- internal/ethapi/api.go | 551 +- internal/ethapi/backend.go | 31 +- internal/jsre/deps/web3.js | 12 +- internal/jsre/jsre.go | 4 +- .../testlog/testlog.go | 43 +- internal/web3ext/web3ext.go | 129 +- les/api.go | 80 + les/api_backend.go | 102 +- les/api_test.go | 516 + les/balance.go | 381 + les/benchmark.go | 354 + les/bloombits.go | 3 +- les/checkpointoracle.go | 155 + les/{backend.go => client.go} | 158 +- les/client_handler.go | 403 + les/clientpool.go | 609 + les/clientpool_test.go | 180 + les/commons.go | 114 +- les/costtracker.go | 516 + les/distributor.go | 76 +- les/distributor_test.go | 6 +- les/enr_entry.go | 32 + les/execqueue.go | 9 +- les/fetcher.go | 370 +- les/flowcontrol/control.go | 424 +- les/flowcontrol/logger.go | 65 + les/flowcontrol/manager.go | 536 +- les/flowcontrol/manager_test.go | 125 + les/freeclient.go | 278 - les/freeclient_test.go | 139 - les/handler.go | 1250 - les/handler_test.go | 392 +- les/helper_test.go | 445 - les/metrics.go | 135 +- les/odr.go | 15 +- les/odr_requests.go | 223 +- les/odr_test.go | 102 +- les/peer.go | 518 +- les/peer_test.go | 302 + les/protocol.go | 57 +- les/randselect.go | 1 - les/request_test.go | 38 +- les/retrieve.go | 72 +- les/server.go | 473 +- les/server_handler.go | 950 + les/serverpool.go | 159 +- les/servingqueue.go | 378 + les/sync.go | 187 +- les/sync_test.go | 232 + les/test_helper.go | 558 + les/txrelay.go | 43 +- les/ulc.go | 54 + les/ulc_test.go | 143 + light/lightchain.go | 345 +- light/lightchain_test.go | 14 +- light/nodeset.go | 20 +- light/odr.go | 41 +- light/odr_test.go | 18 +- light/odr_util.go | 68 +- light/postprocess.go | 42 +- light/trie.go | 4 +- light/trie_test.go | 6 +- light/txpool.go | 89 +- light/txpool_test.go | 8 +- log/format.go | 13 +- .../mock/mem/mem_test.go => metrics/cpu.go | 30 +- .../query_test.go => metrics/cpu_syscall.go | 29 +- .../cpu_windows.go | 14 +- metrics/exp/exp.go | 2 + metrics/gauge.go | 38 + metrics/influxdb/influxdb.go | 1 + metrics/metrics.go | 84 +- metrics/opentsdb.go | 2 +- metrics/prometheus/collector.go | 115 + metrics/prometheus/prometheus.go | 68 + miner/miner.go | 18 +- miner/stress_clique.go | 12 +- miner/stress_ethash.go | 12 +- miner/tx_prefetch.go | 4 +- miner/unconfirmed.go | 2 +- miner/worker.go | 83 +- miner/worker_test.go | 23 +- mobile/bind.go | 40 +- mobile/common.go | 11 + mobile/context.go | 2 +- mobile/geth.go | 7 + mobile/interface.go | 180 +- mobile/interface_test.go | 90 + mobile/primitives.go | 62 + mobile/shhclient.go | 2 +- mobile/types.go | 16 +- node/api.go | 155 +- node/config.go | 107 +- node/config_test.go | 18 +- node/defaults.go | 64 +- node/node.go | 71 +- node/node_example_test.go | 2 + node/node_test.go | 24 + node/service.go | 36 +- node/service_test.go | 5 +- p2p/dial.go | 109 +- p2p/dial_test.go | 160 +- p2p/discover/common.go | 57 + p2p/discover/node.go | 3 +- p2p/discover/table.go | 272 +- p2p/discover/table_test.go | 322 +- p2p/discover/table_util_test.go | 87 +- p2p/discover/{udp.go => v4_udp.go} | 626 +- p2p/discover/v4_udp_lookup_test.go | 220 + p2p/discover/{udp_test.go => v4_udp_test.go} | 245 +- p2p/discv5/metrics.go | 16 + p2p/discv5/node_test.go | 2 +- p2p/discv5/sim_test.go | 2 +- p2p/dnsdisc/client.go | 260 + p2p/dnsdisc/client_test.go | 306 + .../protocol_none.go => p2p/dnsdisc/doc.go | 9 +- p2p/dnsdisc/error.go | 63 + p2p/dnsdisc/sync.go | 277 + p2p/dnsdisc/tree.go | 384 + p2p/dnsdisc/tree_test.go | 144 + p2p/enode/localnode.go | 120 +- p2p/enode/localnode_test.go | 46 + p2p/enode/node.go | 67 +- p2p/enode/node_test.go | 87 +- p2p/enode/nodedb.go | 8 +- p2p/enode/nodedb_test.go | 4 +- p2p/enode/urlv4.go | 24 +- p2p/enode/urlv4_test.go | 191 +- p2p/enr/enr.go | 12 +- p2p/enr/enr_test.go | 26 +- p2p/enr/entries.go | 76 +- p2p/message.go | 44 +- p2p/metrics.go | 18 +- p2p/netutil/addrutil.go | 33 + p2p/peer.go | 42 +- p2p/peer_test.go | 4 +- p2p/protocol.go | 2 - p2p/protocols/accounting.go | 182 - p2p/protocols/accounting_api.go | 94 - p2p/protocols/accounting_simulation_test.go | 320 - p2p/protocols/accounting_test.go | 223 - p2p/protocols/protocol.go | 439 - p2p/protocols/protocol_test.go | 590 - p2p/protocols/reporter.go | 147 - p2p/protocols/reporter_test.go | 83 - p2p/rlpx.go | 21 +- p2p/rlpx_test.go | 3 +- p2p/server.go | 238 +- p2p/server_test.go | 170 +- p2p/simulations/adapters/exec.go | 22 +- p2p/simulations/adapters/inproc.go | 18 +- p2p/simulations/adapters/inproc_test.go | 2 +- p2p/simulations/adapters/types.go | 51 +- p2p/simulations/http_test.go | 9 +- p2p/simulations/network.go | 10 +- p2p/simulations/network_test.go | 4 +- p2p/simulations/pipes/pipes.go | 2 +- p2p/simulations/test.go | 16 + p2p/testing/peerpool.go | 4 +- p2p/testing/protocolsession.go | 2 +- p2p/testing/protocoltester.go | 41 +- p2p/util.go | 82 + p2p/util_test.go | 54 + params/bootnodes.go | 15 +- params/config.go | 192 +- params/gas_table.go | 93 - params/network_params.go | 21 +- params/protocol_params.go | 100 +- params/version.go | 7 +- rlp/decode.go | 201 +- rlp/decode_test.go | 127 +- rlp/doc.go | 121 +- rlp/encode.go | 147 +- rlp/encode_test.go | 76 +- rlp/encoder_example_test.go | 12 +- rlp/typecache.go | 129 +- rpc/client.go | 555 +- rpc/client_test.go | 150 +- .../norace_test.go => rpc/constants_unix.go | 21 +- .../constants_unix_nocgo.go | 12 +- rpc/doc.go | 82 +- rpc/errors.go | 39 +- rpc/gzip.go | 66 + rpc/handler.go | 397 + rpc/http.go | 81 +- rpc/inproc.go | 4 +- rpc/ipc.go | 16 +- rpc/ipc_js.go | 2 +- rpc/ipc_unix.go | 16 +- rpc/json.go | 476 +- rpc/json_test.go | 178 - rpc/server.go | 443 +- rpc/server_test.go | 208 +- rpc/service.go | 285 + rpc/stdio.go | 38 +- rpc/subscription.go | 338 +- rpc/subscription_test.go | 319 +- rpc/testdata/invalid-badid.js | 7 + rpc/testdata/invalid-batch.js | 14 + rpc/testdata/invalid-idonly.js | 7 + rpc/testdata/invalid-nonobj.js | 4 + rpc/testdata/invalid-syntax.json | 5 + rpc/testdata/reqresp-batch.js | 8 + rpc/testdata/reqresp-echo.js | 16 + rpc/testdata/reqresp-namedparam.js | 5 + rpc/testdata/reqresp-noargsrets.js | 4 + rpc/testdata/reqresp-nomethod.js | 4 + rpc/testdata/reqresp-noparam.js | 4 + rpc/testdata/reqresp-paramsnull.js | 4 + rpc/testdata/revcall.js | 6 + rpc/testdata/revcall2.js | 7 + rpc/testdata/subscription.js | 12 + rpc/testservice_test.go | 180 + rpc/types.go | 175 +- rpc/types_test.go | 58 + rpc/utils.go | 226 - rpc/websocket.go | 201 +- rpc/websocket_test.go | 253 +- signer/core/abihelper.go | 255 - signer/core/api.go | 406 +- signer/core/api_test.go | 280 +- signer/core/auditlog.go | 65 +- signer/core/cliui.go | 89 +- signer/core/signed_data.go | 1002 + .../core/signed_data_internal_test.go | 44 +- signer/core/signed_data_test.go | 408 + signer/core/stdioui.go | 73 +- signer/core/testdata/README.md | 5 + signer/core/testdata/arrays-1.json | 60 + signer/core/testdata/custom_arraytype.json | 54 + signer/core/testdata/eip712.json | 76 + .../testdata/expfail_arraytype_overload.json | 67 + .../core/testdata/expfail_datamismatch_1.json | 64 + signer/core/testdata/expfail_extradata-1.json | 76 + signer/core/testdata/expfail_extradata-2.json | 77 + .../testdata/expfail_malformeddomainkeys.json | 64 + .../testdata/expfail_nonexistant_type.json | 64 + .../core/testdata/expfail_toolargeuint.json | 38 + .../core/testdata/expfail_toolargeuint2.json | 38 + .../testdata/expfail_unconvertiblefloat.json | 38 + .../testdata/expfail_unconvertiblefloat2.json | 38 + .../2850f6ccf2d7f5f846dfb73119b60e09e712783f | 38 + .../36fb987a774011dc675e1b5246ac5c1d44d84d92 | 60 + .../37ec7b55c7ba014cced204c5f9989d2d0eb9ff6d | 38 + .../582fa92154b784daa1faa293b695fa388fe34bf1 | 1 + .../ab57cb2b2b5ce614efe13a47bc73814580f2cce8 | 54 + .../e4303e23ca34fbbc43164a232b2caa7a3af2bf8d | 64 + .../f658340af009dd4a35abe645a00a7b732bc30921 | 1 + signer/core/types.go | 50 +- signer/core/uiapi.go | 200 + signer/core/validation.go | 153 +- signer/core/validation_test.go | 136 +- signer/fourbyte/4byte.go | 147088 +++++++++++++++ signer/fourbyte/4byte.json | 146843 ++++++++++++++ signer/fourbyte/abi.go | 164 + .../abi_test.go} | 115 +- signer/fourbyte/fourbyte.go | 144 + signer/fourbyte/fourbyte_test.go | 91 + signer/fourbyte/validation.go | 117 + signer/fourbyte/validation_test.go | 137 + signer/rules/rules.go | 87 +- signer/rules/rules_test.go | 155 +- signer/storage/aes_gcm_storage.go | 45 +- signer/storage/aes_gcm_storage_test.go | 28 +- signer/storage/storage.go | 65 +- swarm/AUTHORS | 35 - swarm/OWNERS | 25 - swarm/README.md | 243 +- swarm/api/act.go | 538 - swarm/api/api.go | 1017 - swarm/api/api_test.go | 502 - swarm/api/client/client.go | 797 - swarm/api/client/client_test.go | 589 - swarm/api/config.go | 143 - swarm/api/config_test.go | 59 - swarm/api/encrypt.go | 78 - swarm/api/filesystem.go | 292 - swarm/api/filesystem_test.go | 199 - swarm/api/gen_mime.go | 1201 - swarm/api/http/middleware.go | 113 - swarm/api/http/response.go | 132 - swarm/api/http/response_test.go | 170 - swarm/api/http/roundtripper.go | 66 - swarm/api/http/roundtripper_test.go | 69 - swarm/api/http/sctx.go | 34 - swarm/api/http/server.go | 887 - swarm/api/http/server_test.go | 1313 - swarm/api/http/templates.go | 306 - swarm/api/http/test_server.go | 97 - swarm/api/inspector.go | 58 - swarm/api/manifest.go | 585 - swarm/api/manifest_test.go | 175 - swarm/api/storage.go | 85 - swarm/api/storage_test.go | 56 - swarm/api/testdata/test0/img/logo.png | Bin 4119 -> 0 bytes swarm/api/testdata/test0/index.css | 9 - swarm/api/testdata/test0/index.html | 10 - swarm/api/uri.go | 144 - swarm/api/uri_test.go | 175 - swarm/bmt/bmt.go | 690 - swarm/bmt/bmt_r.go | 84 - swarm/bmt/bmt_test.go | 583 - swarm/chunk/chunk.go | 5 - swarm/dev/.dockerignore | 2 - swarm/dev/.gitignore | 2 - swarm/dev/Dockerfile | 42 - swarm/dev/Makefile | 14 - swarm/dev/README.md | 20 - swarm/dev/bashrc | 21 - swarm/dev/run.sh | 90 - swarm/dev/scripts/boot-cluster.sh | 288 - swarm/dev/scripts/random-uploads.sh | 96 - swarm/dev/scripts/stop-cluster.sh | 98 - swarm/dev/scripts/util.sh | 53 - swarm/docker/Dockerfile | 32 - swarm/docker/run-smoke.sh | 7 - swarm/docker/run.sh | 26 - swarm/fuse/fuse_dir.go | 161 - swarm/fuse/fuse_file.go | 146 - swarm/fuse/swarmfs.go | 65 - swarm/fuse/swarmfs_test.go | 1671 - swarm/fuse/swarmfs_unix.go | 285 - swarm/fuse/swarmfs_util.go | 121 - swarm/log/log.go | 48 - swarm/metrics/flags.go | 108 - swarm/network/README.md | 152 - swarm/network/bitvector/bitvector.go | 62 - swarm/network/bitvector/bitvector_test.go | 104 - swarm/network/discovery.go | 203 - swarm/network/discovery_test.go | 57 - swarm/network/fetcher.go | 323 - swarm/network/fetcher_test.go | 476 - swarm/network/hive.go | 244 - swarm/network/hive_test.go | 155 - swarm/network/kademlia.go | 870 - swarm/network/kademlia_test.go | 562 - swarm/network/networkid_test.go | 263 - swarm/network/priorityqueue/priorityqueue.go | 109 - .../priorityqueue/priorityqueue_test.go | 97 - swarm/network/protocol.go | 389 - swarm/network/protocol_test.go | 253 - swarm/network/simulation/bucket.go | 79 - swarm/network/simulation/bucket_test.go | 155 - swarm/network/simulation/events.go | 217 - swarm/network/simulation/events_test.go | 107 - swarm/network/simulation/example_test.go | 141 - swarm/network/simulation/http.go | 68 - swarm/network/simulation/http_test.go | 110 - swarm/network/simulation/kademlia.go | 97 - swarm/network/simulation/kademlia_test.go | 68 - swarm/network/simulation/node.go | 309 - swarm/network/simulation/node_test.go | 444 - swarm/network/simulation/service.go | 65 - swarm/network/simulation/service_test.go | 46 - swarm/network/simulation/simulation.go | 215 - swarm/network/simulation/simulation_test.go | 203 - .../simulations/discovery/discovery.go | 17 - .../simulations/discovery/discovery_test.go | 527 - .../simulations/discovery/snapshot.json | 1 - swarm/network/simulations/overlay.go | 144 - swarm/network/simulations/overlay_test.go | 195 - swarm/network/stream/common_test.go | 373 - swarm/network/stream/delivery.go | 282 - swarm/network/stream/delivery_test.go | 734 - swarm/network/stream/intervals/intervals.go | 206 - .../stream/intervals/intervals_test.go | 395 - swarm/network/stream/intervals/store_test.go | 77 - swarm/network/stream/intervals_test.go | 362 - swarm/network/stream/lightnode_test.go | 214 - swarm/network/stream/messages.go | 405 - swarm/network/stream/peer.go | 430 - .../network/stream/snapshot_retrieval_test.go | 311 - swarm/network/stream/snapshot_sync_test.go | 344 - swarm/network/stream/stream.go | 967 - swarm/network/stream/streamer_test.go | 1357 - swarm/network/stream/syncer.go | 222 - swarm/network/stream/syncer_test.go | 359 - .../network/stream/testing/snapshot_128.json | 1 - swarm/network/stream/testing/snapshot_16.json | 1 - .../network/stream/testing/snapshot_256.json | 1 - swarm/network/stream/testing/snapshot_32.json | 1 - swarm/network/stream/testing/snapshot_4.json | 1 - swarm/network/stream/testing/snapshot_64.json | 1 - .../visualized_snapshot_sync_sim_test.go | 353 - swarm/network_test.go | 502 - swarm/pot/address.go | 210 - swarm/pot/doc.go | 83 - swarm/pot/pot.go | 787 - swarm/pot/pot_test.go | 741 - swarm/pss/ARCHITECTURE.md | 144 - swarm/pss/README.md | 318 - swarm/pss/api.go | 195 - swarm/pss/client/client.go | 352 - swarm/pss/client/client_test.go | 303 - swarm/pss/client/doc.go | 96 - swarm/pss/doc.go | 61 - swarm/pss/forwarding_test.go | 357 - swarm/pss/handshake.go | 566 - swarm/pss/handshake_test.go | 267 - swarm/pss/keystore.go | 281 - swarm/pss/notify/notify.go | 394 - swarm/pss/notify/notify_test.go | 257 - swarm/pss/ping.go | 97 - swarm/pss/protocol.go | 283 - swarm/pss/protocol_test.go | 164 - swarm/pss/pss.go | 840 - swarm/pss/pss_test.go | 2108 - .../testdata/addpsstodiscoverytestsnapshot.pl | 28 - .../testdata/addpsstodiscoverytestsnapshot.sh | 3 - swarm/pss/testdata/snapshot_128.json | 1 - swarm/pss/testdata/snapshot_16.json | 1 - swarm/pss/testdata/snapshot_2.json | 1 - swarm/pss/testdata/snapshot_256.json | 1 - swarm/pss/testdata/snapshot_3.json | 1 - swarm/pss/testdata/snapshot_32.json | 1 - swarm/pss/testdata/snapshot_4.json | 1 - swarm/pss/testdata/snapshot_64.json | 1 - swarm/pss/testdata/snapshot_8.json | 1 - swarm/pss/types.go | 217 - swarm/pss/writeup.md | 125 - swarm/sctx/sctx.go | 20 - swarm/services/swap/swap.go | 301 - swarm/services/swap/swap/swap.go | 252 - swarm/services/swap/swap/swap_test.go | 194 - swarm/shed/db.go | 329 - swarm/shed/db_test.go | 110 - swarm/shed/example_store_test.go | 332 - swarm/shed/field_string.go | 66 - swarm/shed/field_string_test.go | 110 - swarm/shed/field_struct.go | 71 - swarm/shed/field_struct_test.go | 127 - swarm/shed/field_uint64.go | 146 - swarm/shed/field_uint64_test.go | 300 - swarm/shed/index.go | 306 - swarm/shed/index_test.go | 781 - swarm/shed/schema.go | 134 - swarm/shed/schema_test.go | 126 - swarm/spancontext/spancontext.go | 49 - swarm/state/dbstore.go | 111 - swarm/state/dbstore_test.go | 125 - swarm/storage/chunker.go | 613 - swarm/storage/chunker_test.go | 467 - swarm/storage/common_test.go | 288 - swarm/storage/database.go | 82 - swarm/storage/encryption/encryption.go | 152 - swarm/storage/encryption/encryption_test.go | 151 - swarm/storage/feed/binaryserializer_test.go | 98 - swarm/storage/feed/cacheentry.go | 48 - swarm/storage/feed/doc.go | 43 - swarm/storage/feed/error.go | 73 - swarm/storage/feed/feed.go | 125 - swarm/storage/feed/feed_test.go | 36 - swarm/storage/feed/handler.go | 291 - swarm/storage/feed/handler_test.go | 506 - swarm/storage/feed/id.go | 123 - swarm/storage/feed/id_test.go | 28 - swarm/storage/feed/lookup/epoch.go | 91 - swarm/storage/feed/lookup/epoch_test.go | 57 - swarm/storage/feed/lookup/lookup.go | 180 - swarm/storage/feed/lookup/lookup_test.go | 414 - swarm/storage/feed/query.go | 78 - swarm/storage/feed/request.go | 286 - swarm/storage/feed/request_test.go | 312 - swarm/storage/feed/sign.go | 75 - swarm/storage/feed/testutil.go | 71 - swarm/storage/feed/timestampprovider.go | 62 - swarm/storage/feed/topic.go | 105 - swarm/storage/feed/topic_test.go | 50 - swarm/storage/feed/update.go | 134 - swarm/storage/feed/update_test.go | 50 - swarm/storage/filestore.go | 146 - swarm/storage/filestore_test.go | 207 - swarm/storage/hasherstore.go | 263 - swarm/storage/hasherstore_test.go | 124 - swarm/storage/ldbstore.go | 1077 - swarm/storage/ldbstore_test.go | 778 - swarm/storage/localstore.go | 251 - swarm/storage/localstore/doc.go | 56 - swarm/storage/localstore/gc.go | 302 - swarm/storage/localstore/gc_test.go | 358 - swarm/storage/localstore/index_test.go | 227 - swarm/storage/localstore/localstore.go | 431 - swarm/storage/localstore/localstore_test.go | 520 - swarm/storage/localstore/mode_get.go | 154 - swarm/storage/localstore/mode_get_test.go | 237 - swarm/storage/localstore/mode_put.go | 160 - swarm/storage/localstore/mode_put_test.go | 300 - swarm/storage/localstore/mode_set.go | 205 - swarm/storage/localstore/mode_set_test.go | 128 - .../localstore/retrieval_index_test.go | 150 - swarm/storage/localstore/subscription_pull.go | 193 - .../localstore/subscription_pull_test.go | 478 - swarm/storage/localstore/subscription_push.go | 145 - .../localstore/subscription_push_test.go | 200 - swarm/storage/localstore_test.go | 244 - swarm/storage/memstore.go | 92 - swarm/storage/memstore_test.go | 158 - swarm/storage/mock/db/db.go | 243 - swarm/storage/mock/db/db_test.go | 75 - swarm/storage/mock/mem/mem.go | 191 - swarm/storage/mock/mock.go | 111 - swarm/storage/mock/rpc/rpc.go | 90 - swarm/storage/mock/rpc/rpc_test.go | 41 - swarm/storage/mock/test/test.go | 244 - swarm/storage/netstore.go | 322 - swarm/storage/netstore_test.go | 692 - swarm/storage/pyramid.go | 694 - swarm/storage/schema.go | 17 - swarm/storage/swarmhasher.go | 41 - swarm/storage/types.go | 330 - swarm/storage/types_test.go | 186 - swarm/swap/swap.go | 98 - swarm/swap/swap_test.go | 184 - swarm/swarm.go | 554 - swarm/swarm_test.go | 375 - swarm/testutil/file.go | 65 - swarm/tracing/tracing.go | 102 - swarm/version/version.go | 67 - tests/block_test.go | 36 +- tests/block_test_util.go | 12 +- tests/difficulty_test_util.go | 10 +- tests/gen_btheader.go | 10 +- tests/gen_difficultytest.go | 18 +- tests/gen_tttransaction.go | 95 - tests/init.go | 33 + tests/init_test.go | 13 + tests/solidity/bytecode.js | 6 + tests/solidity/contracts/Migrations.sol | 23 + tests/solidity/contracts/OpCodes.sol | 322 + .../migrations/1_initial_migration.js | 5 + .../migrations/2_opCodes_migration.js | 5 + tests/solidity/test/opCodes.js | 34 + tests/solidity/truffle-config.js | 108 + tests/state_test.go | 52 +- tests/state_test_util.go | 66 +- tests/transaction_test.go | 38 +- tests/transaction_test_util.go | 160 +- tests/vm_test_util.go | 4 +- trie/database.go | 236 +- .../dbstore_test.go => trie/database_test.go | 29 +- trie/hasher.go | 25 +- trie/iterator.go | 6 +- trie/iterator_test.go | 17 +- trie/node.go | 38 +- trie/node_test.go | 58 - trie/proof.go | 15 +- trie/proof_test.go | 31 +- trie/secure_trie.go | 11 +- trie/secure_trie_test.go | 9 +- trie/sync.go | 47 +- trie/sync_bloom.go | 207 + trie/sync_test.go | 46 +- trie/trie.go | 47 +- trie/trie_test.go | 92 +- vendor/bazil.org/fuse/LICENSE | 93 - vendor/bazil.org/fuse/README.md | 23 - vendor/bazil.org/fuse/buffer.go | 35 - vendor/bazil.org/fuse/debug.go | 21 - vendor/bazil.org/fuse/error_darwin.go | 17 - vendor/bazil.org/fuse/error_freebsd.go | 15 - vendor/bazil.org/fuse/error_linux.go | 17 - vendor/bazil.org/fuse/error_std.go | 31 - vendor/bazil.org/fuse/fs/serve.go | 1568 - vendor/bazil.org/fuse/fs/tree.go | 99 - vendor/bazil.org/fuse/fuse.go | 2303 - vendor/bazil.org/fuse/fuse.iml | 9 - vendor/bazil.org/fuse/fuse_darwin.go | 9 - vendor/bazil.org/fuse/fuse_freebsd.go | 6 - vendor/bazil.org/fuse/fuse_kernel.go | 774 - vendor/bazil.org/fuse/fuse_kernel_darwin.go | 88 - vendor/bazil.org/fuse/fuse_kernel_freebsd.go | 62 - vendor/bazil.org/fuse/fuse_kernel_linux.go | 70 - vendor/bazil.org/fuse/fuse_kernel_std.go | 1 - vendor/bazil.org/fuse/fuse_linux.go | 7 - vendor/bazil.org/fuse/fuseutil/fuseutil.go | 20 - vendor/bazil.org/fuse/mount.go | 38 - vendor/bazil.org/fuse/mount_darwin.go | 208 - vendor/bazil.org/fuse/mount_freebsd.go | 111 - vendor/bazil.org/fuse/mount_linux.go | 150 - vendor/bazil.org/fuse/options.go | 310 - vendor/bazil.org/fuse/options_darwin.go | 35 - vendor/bazil.org/fuse/options_freebsd.go | 28 - vendor/bazil.org/fuse/options_linux.go | 25 - vendor/bazil.org/fuse/protocol.go | 75 - vendor/bazil.org/fuse/unmount.go | 6 - vendor/bazil.org/fuse/unmount_linux.go | 21 - vendor/bazil.org/fuse/unmount_std.go | 17 - .../Azure/azure-pipeline-go/pipeline/core.go | 31 +- .../azure-pipeline-go/pipeline/defaultlog.go | 14 + .../pipeline/defaultlog_syslog.go | 4 +- .../pipeline/defaultlog_windows.go | 6 +- .../Azure/azure-pipeline-go/pipeline/error.go | 88 +- .../azure-pipeline-go/pipeline/version.go | 2 +- .../2018-03-28/azblob/version.go | 3 - .../2018-03-28/azblob/zc_retry_reader.go | 122 - .../azblob/access_conditions.go | 12 +- .../{2018-03-28 => }/azblob/atomicmorph.go | 30 +- .../azure-storage-blob-go/azblob/blob.json | 8009 + .../{2018-03-28 => }/azblob/highlevel.go | 166 +- .../{2018-03-28 => }/azblob/parsing_urls.go | 62 +- .../{2018-03-28 => }/azblob/sas_service.go | 86 +- .../azblob/service_codes_blob.go | 0 .../azblob/storage_account_credential.go | 8 + .../azblob/url_append_blob.go | 44 +- .../{2018-03-28 => }/azblob/url_blob.go | 42 +- .../{2018-03-28 => }/azblob/url_block_blob.go | 29 +- .../{2018-03-28 => }/azblob/url_container.go | 35 +- .../{2018-03-28 => }/azblob/url_page_blob.go | 101 +- .../{2018-03-28 => }/azblob/url_service.go | 25 +- .../azblob/user_delegation_credential.go | 38 + .../azure-storage-blob-go/azblob/version.go | 3 + .../azblob/zc_credential_anonymous.go | 0 .../azblob/zc_credential_shared_key.go | 40 +- .../azblob/zc_credential_token.go | 33 +- .../{2018-03-28 => }/azblob/zc_mmf_unix.go | 4 +- .../{2018-03-28 => }/azblob/zc_mmf_windows.go | 2 +- .../{2018-03-28 => }/azblob/zc_pipeline.go | 14 +- .../azblob/zc_policy_request_log.go | 38 +- .../azblob/zc_policy_retry.go | 156 +- .../azblob/zc_policy_telemetry.go | 0 .../azblob/zc_policy_unique_request_id.go | 0 .../azblob/zc_retry_reader.go | 178 + .../{2018-03-28 => }/azblob/zc_sas_account.go | 14 +- .../azblob/zc_sas_query_params.go | 137 +- .../azblob/zc_service_codes_common.go | 0 .../azblob/zc_storage_error.go | 7 +- .../azblob/zc_util_validate.go | 39 +- .../{2018-03-28 => }/azblob/zc_uuid.go | 5 +- .../{2018-03-28 => }/azblob/zt_doc.go | 0 .../azblob/zz_generated_append_blob.go | 173 +- .../azblob/zz_generated_blob.go | 410 +- .../azblob/zz_generated_block_blob.go | 98 +- .../azblob/zz_generated_client.go | 2 +- .../azblob/zz_generated_container.go | 83 +- .../azblob/zz_generated_models.go | 1101 +- .../azblob/zz_generated_page_blob.go | 302 +- .../azblob/zz_generated_responder_policy.go | 2 +- .../azblob/zz_generated_response_error.go | 0 .../azblob/zz_generated_service.go | 129 +- .../azblob/zz_generated_validation.go | 0 .../azblob/zz_generated_version.go | 2 +- .../azblob/zz_response_helpers.go | 2 +- vendor/github.com/apilayer/freegeoip/AUTHORS | 11 + .../apilayer/freegeoip/CONTRIBUTORS | 22 + .../github.com/apilayer/freegeoip/Dockerfile | 25 + .../github.com/apilayer/freegeoip/HISTORY.md | 55 + vendor/github.com/apilayer/freegeoip/LICENSE | 27 + vendor/github.com/apilayer/freegeoip/Procfile | 1 + .../github.com/apilayer/freegeoip/README.md | 259 + vendor/github.com/apilayer/freegeoip/app.json | 7 + vendor/github.com/apilayer/freegeoip/db.go | 453 + vendor/github.com/apilayer/freegeoip/doc.go | 14 + .../apilayer/freegeoip/freegeo-warning.png | Bin 0 -> 14752 bytes .../cloudflare-go/CODE_OF_CONDUCT.md | 77 + .../cloudflare/cloudflare-go/LICENSE | 26 + .../cloudflare/cloudflare-go/README.md | 107 + .../cloudflare-go/access_application.go | 180 + .../cloudflare-go/access_identity_provider.go | 331 + .../cloudflare-go/access_organization.go | 101 + .../cloudflare/cloudflare-go/access_policy.go | 221 + .../cloudflare-go/access_service_tokens.go | 167 + .../cloudflare-go/account_members.go | 186 + .../cloudflare/cloudflare-go/account_roles.go | 80 + .../cloudflare/cloudflare-go/accounts.go | 114 + .../cloudflare/cloudflare-go/argo.go | 120 + .../cloudflare/cloudflare-go/auditlogs.go | 143 + .../cloudflare/cloudflare-go/cloudflare.go | 435 + .../cloudflare-go/custom_hostname.go | 161 + .../cloudflare/cloudflare-go/custom_pages.go | 176 + .../cloudflare/cloudflare-go/dns.go | 174 + .../cloudflare/cloudflare-go/duration.go | 40 + .../cloudflare/cloudflare-go/errors.go | 50 + .../cloudflare/cloudflare-go/filter.go | 241 + .../cloudflare/cloudflare-go/firewall.go | 280 + .../cloudflare-go/firewall_rules.go | 196 + .../cloudflare/cloudflare-go/go.mod | 13 + .../cloudflare/cloudflare-go/go.sum | 26 + .../cloudflare/cloudflare-go/ips.go | 44 + .../cloudflare/cloudflare-go/keyless.go | 52 + .../cloudflare-go/load_balancing.go | 387 + .../cloudflare/cloudflare-go/lockdown.go | 151 + .../cloudflare/cloudflare-go/logpush.go | 224 + .../cloudflare/cloudflare-go/options.go | 101 + .../cloudflare/cloudflare-go/origin_ca.go | 169 + .../cloudflare/cloudflare-go/page_rules.go | 235 + .../cloudflare/cloudflare-go/railgun.go | 297 + .../cloudflare/cloudflare-go/rate_limiting.go | 210 + .../cloudflare/cloudflare-go/registrar.go | 175 + .../cloudflare/cloudflare-go/renovate.json | 5 + .../cloudflare/cloudflare-go/spectrum.go | 158 + .../cloudflare/cloudflare-go/ssl.go | 157 + .../cloudflare/cloudflare-go/universal_ssl.go | 88 + .../cloudflare/cloudflare-go/user.go | 113 + .../cloudflare/cloudflare-go/user_agent.go | 149 + .../cloudflare/cloudflare-go/virtualdns.go | 192 + .../cloudflare/cloudflare-go/waf.go | 300 + .../cloudflare/cloudflare-go/workers.go | 314 + .../cloudflare/cloudflare-go/workers_kv.go | 192 + .../cloudflare/cloudflare-go/zone.go | 740 + .../codahale/hdrhistogram/README.md | 15 - .../github.com/codahale/hdrhistogram/hdr.go | 564 - .../codahale/hdrhistogram/window.go | 45 - vendor/github.com/dgrijalva/jwt-go/LICENSE | 8 - .../dgrijalva/jwt-go/MIGRATION_GUIDE.md | 97 - vendor/github.com/dgrijalva/jwt-go/README.md | 85 - .../dgrijalva/jwt-go/VERSION_HISTORY.md | 105 - vendor/github.com/dgrijalva/jwt-go/claims.go | 134 - vendor/github.com/dgrijalva/jwt-go/doc.go | 4 - vendor/github.com/dgrijalva/jwt-go/ecdsa.go | 147 - .../dgrijalva/jwt-go/ecdsa_utils.go | 67 - vendor/github.com/dgrijalva/jwt-go/errors.go | 59 - vendor/github.com/dgrijalva/jwt-go/hmac.go | 94 - .../github.com/dgrijalva/jwt-go/map_claims.go | 94 - vendor/github.com/dgrijalva/jwt-go/none.go | 52 - vendor/github.com/dgrijalva/jwt-go/parser.go | 131 - vendor/github.com/dgrijalva/jwt-go/rsa.go | 100 - vendor/github.com/dgrijalva/jwt-go/rsa_pss.go | 126 - .../github.com/dgrijalva/jwt-go/rsa_utils.go | 69 - .../dgrijalva/jwt-go/signing_method.go | 35 - vendor/github.com/dgrijalva/jwt-go/token.go | 108 - .../github.com/gballet/go-libpcsclite/LICENSE | 29 + .../gballet/go-libpcsclite/README.md | 73 + .../github.com/gballet/go-libpcsclite/doc.go | 95 + .../gballet/go-libpcsclite/doc_bsd.go | 35 + .../gballet/go-libpcsclite/doc_darwin.go | 35 + .../gballet/go-libpcsclite/doc_linux.go | 35 + .../gballet/go-libpcsclite/doc_windows.go | 35 + .../gballet/go-libpcsclite/error.go | 246 + .../github.com/gballet/go-libpcsclite/go.mod | 1 + .../github.com/gballet/go-libpcsclite/msg.go | 82 + .../gballet/go-libpcsclite/winscard.go | 402 + vendor/github.com/gizak/termui/README.md | 151 - vendor/github.com/gizak/termui/barchart.go | 149 - vendor/github.com/gizak/termui/block.go | 240 - .../github.com/gizak/termui/block_common.go | 20 - .../github.com/gizak/termui/block_windows.go | 14 - vendor/github.com/gizak/termui/buffer.go | 106 - vendor/github.com/gizak/termui/canvas.go | 72 - vendor/github.com/gizak/termui/config.py | 54 - vendor/github.com/gizak/termui/doc.go | 29 - vendor/github.com/gizak/termui/events.go | 324 - vendor/github.com/gizak/termui/gauge.go | 109 - vendor/github.com/gizak/termui/glide.lock | 30 - vendor/github.com/gizak/termui/glide.yaml | 9 - vendor/github.com/gizak/termui/grid.go | 279 - vendor/github.com/gizak/termui/helper.go | 222 - vendor/github.com/gizak/termui/linechart.go | 331 - .../gizak/termui/linechart_others.go | 11 - .../gizak/termui/linechart_windows.go | 11 - vendor/github.com/gizak/termui/list.go | 89 - vendor/github.com/gizak/termui/mbarchart.go | 242 - vendor/github.com/gizak/termui/mkdocs.yml | 28 - vendor/github.com/gizak/termui/par.go | 73 - vendor/github.com/gizak/termui/pos.go | 78 - vendor/github.com/gizak/termui/render.go | 164 - vendor/github.com/gizak/termui/sparkline.go | 167 - vendor/github.com/gizak/termui/table.go | 185 - vendor/github.com/gizak/termui/textbuilder.go | 278 - vendor/github.com/gizak/termui/theme.go | 140 - vendor/github.com/gizak/termui/widget.go | 94 - .../github.com/golang/protobuf/proto/Makefile | 43 - .../github.com/golang/protobuf/proto/clone.go | 46 +- .../golang/protobuf/proto/decode.go | 669 +- .../golang/protobuf/proto/deprecated.go | 63 + .../golang/protobuf/proto/discard.go | 350 + .../golang/protobuf/proto/encode.go | 1209 +- .../github.com/golang/protobuf/proto/equal.go | 33 +- .../golang/protobuf/proto/extensions.go | 282 +- .../github.com/golang/protobuf/proto/lib.go | 166 +- .../golang/protobuf/proto/message_set.go | 138 +- .../golang/protobuf/proto/pointer_reflect.go | 598 +- .../golang/protobuf/proto/pointer_unsafe.go | 377 +- .../golang/protobuf/proto/properties.go | 476 +- .../golang/protobuf/proto/table_marshal.go | 2776 + .../golang/protobuf/proto/table_merge.go | 654 + .../golang/protobuf/proto/table_unmarshal.go | 2053 + .../github.com/golang/protobuf/proto/text.go | 65 +- .../golang/protobuf/proto/text_parser.go | 83 +- .../protoc-gen-go/descriptor/Makefile | 36 - .../protoc-gen-go/descriptor/descriptor.pb.go | 1445 +- .../protoc-gen-go/descriptor/descriptor.proto | 883 + vendor/github.com/gorilla/websocket/AUTHORS | 9 + vendor/github.com/gorilla/websocket/LICENSE | 22 + vendor/github.com/gorilla/websocket/README.md | 64 + vendor/github.com/gorilla/websocket/client.go | 395 + .../gorilla/websocket/client_clone.go | 16 + .../gorilla/websocket/client_clone_legacy.go | 38 + .../gorilla/websocket/compression.go | 148 + vendor/github.com/gorilla/websocket/conn.go | 1163 + .../gorilla/websocket/conn_write.go | 15 + .../gorilla/websocket/conn_write_legacy.go | 18 + vendor/github.com/gorilla/websocket/doc.go | 227 + vendor/github.com/gorilla/websocket/go.mod | 1 + vendor/github.com/gorilla/websocket/go.sum | 2 + vendor/github.com/gorilla/websocket/join.go | 42 + vendor/github.com/gorilla/websocket/json.go | 60 + vendor/github.com/gorilla/websocket/mask.go | 54 + .../github.com/gorilla/websocket/mask_safe.go | 15 + .../github.com/gorilla/websocket/prepared.go | 102 + vendor/github.com/gorilla/websocket/proxy.go | 77 + vendor/github.com/gorilla/websocket/server.go | 363 + vendor/github.com/gorilla/websocket/trace.go | 19 + .../github.com/gorilla/websocket/trace_17.go | 12 + vendor/github.com/gorilla/websocket/util.go | 283 + .../gorilla/websocket/x_net_proxy.go | 473 + .../graph-gophers/graphql-go/Gopkg.lock | 25 + .../graph-gophers/graphql-go/Gopkg.toml | 10 + .../graph-gophers/graphql-go/LICENSE | 24 + .../graph-gophers/graphql-go/README.md | 100 + .../graph-gophers/graphql-go/errors/errors.go | 41 + .../graph-gophers/graphql-go/graphql.go | 205 + .../github.com/graph-gophers/graphql-go/id.go | 30 + .../graphql-go/internal/common/directive.go | 32 + .../graphql-go/internal/common/lexer.go | 161 + .../graphql-go/internal/common/literals.go | 206 + .../graphql-go/internal/common/types.go | 80 + .../graphql-go/internal/common/values.go | 78 + .../graphql-go/internal/exec/exec.go | 305 + .../graphql-go/internal/exec/packer/packer.go | 371 + .../internal/exec/resolvable/meta.go | 58 + .../internal/exec/resolvable/resolvable.go | 331 + .../internal/exec/selected/selected.go | 238 + .../graphql-go/internal/query/query.go | 234 + .../graphql-go/internal/schema/meta.go | 190 + .../graphql-go/internal/schema/schema.go | 570 + .../internal/validation/suggestion.go | 71 + .../internal/validation/validation.go | 909 + .../graph-gophers/graphql-go/introspection.go | 117 + .../graphql-go/introspection/introspection.go | 313 + .../graph-gophers/graphql-go/log/log.go | 23 + .../graph-gophers/graphql-go/relay/relay.go | 70 + .../graph-gophers/graphql-go/time.go | 51 + .../graph-gophers/graphql-go/trace/trace.go | 80 + .../graphql-go/trace/validation_trace.go | 17 + vendor/github.com/howeyc/fsnotify/AUTHORS | 28 + .../github.com/howeyc/fsnotify/CHANGELOG.md | 160 + .../howeyc/fsnotify/CONTRIBUTING.md | 7 + vendor/github.com/howeyc/fsnotify/LICENSE | 28 + vendor/github.com/howeyc/fsnotify/README.md | 93 + vendor/github.com/howeyc/fsnotify/fsnotify.go | 111 + .../howeyc/fsnotify/fsnotify_bsd.go | 496 + .../howeyc/fsnotify/fsnotify_linux.go | 304 + .../howeyc/fsnotify/fsnotify_open_bsd.go | 11 + .../howeyc/fsnotify/fsnotify_open_darwin.go | 11 + .../howeyc/fsnotify/fsnotify_windows.go | 598 + .../influxdata/influxdb/client/v2/client.go | 635 - .../influxdata/influxdb/client/v2/udp.go | 112 - vendor/github.com/karalabe/hid/LICENSE.md | 8 - vendor/github.com/karalabe/hid/README.md | 53 - vendor/github.com/karalabe/hid/hid.go | 37 - .../github.com/karalabe/hid/hid_disabled.go | 51 - .../hid/libusb/libusb/os/poll_windows.c | 728 - .../hid/libusb/libusb/os/threads_posix.h | 55 - .../hid/libusb/libusb/os/threads_windows.c | 259 - .../hid/libusb/libusb/os/windows_nt_common.h | 63 - .../hid/libusb/libusb/os/windows_winusb.c | 4290 - .../karalabe/hid/libusb/libusb/version_nano.h | 1 - vendor/github.com/karalabe/usb/AUTHORS | 7 + .../github.com/karalabe/usb/Dockerfile.alpine | 6 + .../github.com/karalabe/usb/Dockerfile.ubuntu | 4 + vendor/github.com/karalabe/usb/LICENSE | 165 + vendor/github.com/karalabe/usb/README.md | 47 + .../karalabe/{hid => usb}/appveyor.yml | 9 +- vendor/github.com/karalabe/usb/demo.go | 76 + vendor/github.com/karalabe/usb/go.mod | 3 + .../github.com/karalabe/usb/hid_disabled.go | 42 + .../karalabe/{hid => usb}/hid_enabled.go | 99 +- .../karalabe/{hid => usb}/hidapi/AUTHORS.txt | 0 .../{hid => usb}/hidapi/LICENSE-bsd.txt | 0 .../{hid => usb}/hidapi/LICENSE-gpl3.txt | 0 .../{hid => usb}/hidapi/LICENSE-orig.txt | 0 .../karalabe/{hid => usb}/hidapi/LICENSE.txt | 0 .../karalabe/{hid => usb}/hidapi/README.txt | 0 .../{hid => usb}/hidapi/hidapi/hidapi.h | 3 +- .../karalabe/{hid => usb}/hidapi/libusb/hid.c | 0 .../karalabe/{hid => usb}/hidapi/mac/hid.c | 0 .../{hid => usb}/hidapi/windows/hid.c | 38 +- vendor/github.com/karalabe/usb/libs.go | 74 + .../karalabe/{hid => usb}/libusb/AUTHORS | 34 +- .../karalabe/{hid => usb}/libusb/COPYING | 0 .../{hid => usb}/libusb/libusb/config.h | 0 .../{hid => usb}/libusb/libusb/core.c | 346 +- .../{hid => usb}/libusb/libusb/descriptor.c | 21 +- .../{hid => usb}/libusb/libusb/hotplug.c | 123 +- .../{hid => usb}/libusb/libusb/hotplug.h | 59 +- .../karalabe/{hid => usb}/libusb/libusb/io.c | 73 +- .../{hid => usb}/libusb/libusb/libusb.h | 95 +- .../{hid => usb}/libusb/libusb/libusbi.h | 162 +- .../libusb/libusb/os/darwin_usb.c | 102 +- .../libusb/libusb/os/darwin_usb.h | 61 +- .../libusb/libusb/os/haiku_pollfs.cpp | 0 .../{hid => usb}/libusb/libusb/os/haiku_usb.h | 0 .../libusb/libusb/os/haiku_usb_backend.cpp | 0 .../libusb/libusb/os/haiku_usb_raw.cpp | 7 +- .../libusb/libusb/os/haiku_usb_raw.h | 0 .../libusb/libusb/os/linux_netlink.c | 65 +- .../libusb/libusb/os/linux_udev.c | 34 +- .../libusb/libusb/os/linux_usbfs.c | 262 +- .../libusb/libusb/os/linux_usbfs.h | 3 +- .../libusb/libusb/os/netbsd_usb.c | 6 +- .../libusb/libusb/os/openbsd_usb.c | 6 +- .../libusb/libusb/os/poll_posix.c | 41 +- .../libusb/libusb/os/poll_posix.h | 0 .../usb/libusb/libusb/os/poll_windows.c | 364 + .../libusb/libusb/os/poll_windows.h | 52 +- .../{hid => usb}/libusb/libusb/os/sunos_usb.c | 567 +- .../{hid => usb}/libusb/libusb/os/sunos_usb.h | 6 + .../libusb/libusb/os/threads_posix.c | 11 +- .../usb/libusb/libusb/os/threads_posix.h | 102 + .../usb/libusb/libusb/os/threads_windows.c | 126 + .../libusb/libusb/os/threads_windows.h | 93 +- .../{hid => usb}/libusb/libusb/os/wince_usb.c | 67 +- .../{hid => usb}/libusb/libusb/os/wince_usb.h | 0 .../libusb/libusb/os/windows_common.h | 36 +- .../libusb/libusb/os/windows_nt_common.c | 629 +- .../usb/libusb/libusb/os/windows_nt_common.h | 110 + .../libusb/os/windows_nt_shared_types.h | 138 + .../libusb/libusb/os/windows_usbdk.c | 417 +- .../libusb/libusb/os/windows_usbdk.h | 49 +- .../usb/libusb/libusb/os/windows_winusb.c | 3009 + .../libusb/libusb/os/windows_winusb.h | 593 +- .../{hid => usb}/libusb/libusb/strerror.c | 0 .../{hid => usb}/libusb/libusb/sync.c | 0 .../{hid => usb}/libusb/libusb/version.h | 2 +- .../karalabe/usb/libusb/libusb/version_nano.h | 1 + .../github.com/karalabe/usb/raw_disabled.go | 42 + vendor/github.com/karalabe/usb/raw_enabled.go | 253 + vendor/github.com/karalabe/usb/raw_errors.go | 74 + vendor/github.com/karalabe/usb/usb.go | 68 + .../github.com/karalabe/usb/usb_disabled.go | 51 + vendor/github.com/karalabe/usb/usb_enabled.go | 98 + .../github.com/karalabe/{hid => usb}/wchar.go | 4 +- .../github.com/maruel/panicparse/.travis.yml | 15 - vendor/github.com/maruel/panicparse/LICENSE | 201 - vendor/github.com/maruel/panicparse/README.md | 123 - .../maruel/panicparse/stack/source.go | 291 - .../maruel/panicparse/stack/stack.go | 832 - .../github.com/maruel/panicparse/stack/ui.go | 139 - .../github.com/maruel/panicparse/vendor.yml | 17 - .../mattn/go-colorable/colorable_appengine.go | 29 + .../mattn/go-ieproxy/GetProxyFunc.go | 11 + .../hdrhistogram => mattn/go-ieproxy}/LICENSE | 14 +- vendor/github.com/mattn/go-ieproxy/README.md | 49 + vendor/github.com/mattn/go-ieproxy/ieproxy.go | 51 + .../mattn/go-ieproxy/ieproxy_unix.go | 10 + .../mattn/go-ieproxy/ieproxy_windows.go | 164 + .../mattn/go-ieproxy/kernel32_data_windows.go | 15 + .../github.com/mattn/go-ieproxy/pac_unix.go | 7 + .../mattn/go-ieproxy/pac_windows.go | 72 + .../mattn/go-ieproxy/proxyMiddleman_unix.go | 13 + .../go-ieproxy/proxyMiddleman_windows.go | 51 + vendor/github.com/mattn/go-ieproxy/utils.go | 23 + .../mattn/go-ieproxy/winhttp_data_windows.go | 50 + .../mitchellh/go-wordwrap/LICENSE.md | 21 - .../mitchellh/go-wordwrap/README.md | 39 - .../mitchellh/go-wordwrap/wordwrap.go | 73 - vendor/github.com/nsf/termbox-go/AUTHORS | 4 - vendor/github.com/nsf/termbox-go/LICENSE | 19 - vendor/github.com/nsf/termbox-go/README.md | 31 - vendor/github.com/nsf/termbox-go/api.go | 457 - .../github.com/nsf/termbox-go/api_common.go | 187 - .../github.com/nsf/termbox-go/api_windows.go | 239 - .../nsf/termbox-go/collect_terminfo.py | 110 - vendor/github.com/nsf/termbox-go/syscalls.go | 39 - .../nsf/termbox-go/syscalls_darwin.go | 41 - .../nsf/termbox-go/syscalls_darwin_amd64.go | 40 - .../nsf/termbox-go/syscalls_dragonfly.go | 39 - .../nsf/termbox-go/syscalls_freebsd.go | 39 - .../nsf/termbox-go/syscalls_linux.go | 33 - .../nsf/termbox-go/syscalls_netbsd.go | 39 - .../nsf/termbox-go/syscalls_openbsd.go | 39 - .../nsf/termbox-go/syscalls_windows.go | 61 - vendor/github.com/nsf/termbox-go/termbox.go | 511 - .../nsf/termbox-go/termbox_common.go | 59 - .../nsf/termbox-go/termbox_windows.go | 856 - vendor/github.com/nsf/termbox-go/terminfo.go | 221 - .../nsf/termbox-go/terminfo_builtin.go | 64 - .../tablewriter/{LICENCE.md => LICENSE.md} | 2 +- .../olekukonko/tablewriter/README.md | 123 +- .../olekukonko/tablewriter/table.go | 440 +- .../tablewriter/table_with_color.go | 134 + .../olekukonko/tablewriter/test.csv | 4 - .../olekukonko/tablewriter/test_info.csv | 4 - .../github.com/olekukonko/tablewriter/util.go | 31 +- .../github.com/olekukonko/tablewriter/wrap.go | 16 +- .../opentracing/opentracing-go/CHANGELOG.md | 2 +- .../opentracing/opentracing-go/Makefile | 18 +- .../opentracing/opentracing-go/README.md | 4 +- .../opentracing-go/globaltracer.go | 18 +- .../opentracing/opentracing-go/propagation.go | 2 +- .../oschwald/maxminddb-golang/LICENSE | 15 + .../oschwald/maxminddb-golang/README.md | 38 + .../oschwald/maxminddb-golang/appveyor.yml | 19 + .../oschwald/maxminddb-golang/decoder.go | 721 + .../oschwald/maxminddb-golang/errors.go | 42 + .../oschwald/maxminddb-golang/mmap_unix.go | 15 + .../oschwald/maxminddb-golang/mmap_windows.go | 85 + .../oschwald/maxminddb-golang/reader.go | 259 + .../maxminddb-golang/reader_appengine.go | 28 + .../oschwald/maxminddb-golang/reader_other.go | 63 + .../oschwald/maxminddb-golang/traverse.go | 108 + .../oschwald/maxminddb-golang/verifier.go | 185 + .../github.com/peterh/liner/fallbackinput.go | 2 + vendor/github.com/peterh/liner/go.mod | 3 + vendor/github.com/peterh/liner/go.sum | 2 + vendor/github.com/peterh/liner/input.go | 7 +- .../github.com/peterh/liner/input_windows.go | 35 +- vendor/github.com/peterh/liner/line.go | 48 +- vendor/github.com/peterh/liner/output.go | 3 - .../github.com/peterh/liner/output_windows.go | 4 - vendor/github.com/peterh/liner/width.go | 31 +- .../github.com/prometheus/prometheus/NOTICE | 87 - .../prometheus/{prometheus => tsdb}/LICENSE | 0 .../prometheus/tsdb/fileutil/dir_unix.go | 22 + .../prometheus/tsdb/fileutil/dir_windows.go | 46 + .../prometheus/tsdb/fileutil/fileutil.go | 149 + .../util/flock => tsdb/fileutil}/flock.go | 15 +- .../flock => tsdb/fileutil}/flock_plan9.go | 2 +- .../flock => tsdb/fileutil}/flock_solaris.go | 2 +- .../flock => tsdb/fileutil}/flock_unix.go | 2 +- .../flock => tsdb/fileutil}/flock_windows.go | 2 +- .../prometheus/tsdb/fileutil/mmap.go | 61 + .../tsdb/fileutil/mmap_386.go} | 10 +- .../tsdb/fileutil/mmap_amd64.go} | 13 +- .../tsdb/fileutil/mmap_unix.go} | 26 +- .../prometheus/tsdb/fileutil/mmap_windows.go | 46 + .../prometheus/tsdb/fileutil/preallocate.go | 54 + .../tsdb/fileutil/preallocate_darwin.go | 41 + .../tsdb/fileutil/preallocate_linux.go | 47 + .../tsdb/fileutil/preallocate_other.go} | 21 +- .../tsdb/fileutil/sync.go} | 25 +- .../prometheus/tsdb/fileutil/sync_darwin.go | 40 + .../prometheus/tsdb/fileutil/sync_linux.go | 34 + .../status-im/keycard-go/LICENSE.md | 356 + .../keycard-go/derivationpath/decoder.go | 214 + .../keycard-go/derivationpath/encoder.go | 36 + .../steakknife/bloomfilter/MIT-LICENSE.txt | 8 + .../steakknife/bloomfilter/README.md | 123 + .../steakknife/bloomfilter/binarymarshaler.go | 87 + .../bloomfilter/binaryunmarshaler.go | 111 + .../steakknife/bloomfilter/bloomfilter.go | 123 + .../steakknife/bloomfilter/conformance.go | 29 + .../steakknife/bloomfilter/debug.go | 37 + .../steakknife/bloomfilter/errors.go | 34 + .../steakknife/bloomfilter/fileio.go | 105 + .../github.com/steakknife/bloomfilter/gob.go | 23 + .../steakknife/bloomfilter/iscompatible.go | 41 + .../github.com/steakknife/bloomfilter/new.go | 134 + .../steakknife/bloomfilter/optimal.go | 28 + .../steakknife/bloomfilter/statistics.go | 43 + .../steakknife/bloomfilter/textmarshaler.go | 49 + .../steakknife/bloomfilter/textunmarshaler.go | 150 + .../steakknife/hamming/MIT-LICENSE.txt | 8 + .../github.com/steakknife/hamming/README.md | 82 + vendor/github.com/steakknife/hamming/doc.go | 35 + .../github.com/steakknife/hamming/hamming.go | 70 + .../steakknife/hamming/popcnt_amd64.go | 65 + .../steakknife/hamming/popcnt_amd64.s | 64 + .../github.com/steakknife/hamming/popcount.go | 134 + .../steakknife/hamming/popcount_slices.go | 123 + .../hamming/popcount_slices_amd64.go | 72 + .../hamming/popcount_slices_amd64.s | 370 + .../steakknife/hamming/slices_of_hamming.go | 144 + .../syndtr/goleveldb/leveldb/batch.go | 5 + .../github.com/syndtr/goleveldb/leveldb/db.go | 50 +- .../syndtr/goleveldb/leveldb/db_compaction.go | 13 +- .../syndtr/goleveldb/leveldb/db_iter.go | 43 +- .../syndtr/goleveldb/leveldb/db_snapshot.go | 4 + .../goleveldb/leveldb/db_transaction.go | 20 +- .../syndtr/goleveldb/leveldb/filter/bloom.go | 2 +- .../syndtr/goleveldb/leveldb/memdb/memdb.go | 4 + .../syndtr/goleveldb/leveldb/opt/options.go | 21 +- .../syndtr/goleveldb/leveldb/session.go | 55 +- .../goleveldb/leveldb/session_compaction.go | 38 +- .../syndtr/goleveldb/leveldb/session_util.go | 240 +- .../syndtr/goleveldb/leveldb/table.go | 91 +- .../syndtr/goleveldb/leveldb/table/reader.go | 4 + .../syndtr/goleveldb/leveldb/version.go | 81 +- .../tyler-smith/go-bip39/Gopkg.lock | 15 + .../tyler-smith/go-bip39/Gopkg.toml | 26 + .../termui => tyler-smith/go-bip39}/LICENSE | 3 +- .../github.com/tyler-smith/go-bip39/Makefile | 11 + .../github.com/tyler-smith/go-bip39/README.md | 45 + .../github.com/tyler-smith/go-bip39/bip39.go | 377 + .../go-bip39/wordlists/chinese_simplified.go | 2071 + .../go-bip39/wordlists/chinese_traditional.go | 2071 + .../tyler-smith/go-bip39/wordlists/english.go | 2071 + .../tyler-smith/go-bip39/wordlists/french.go | 2071 + .../tyler-smith/go-bip39/wordlists/italian.go | 2071 + .../go-bip39/wordlists/japanese.go | 2071 + .../tyler-smith/go-bip39/wordlists/korean.go | 2071 + .../tyler-smith/go-bip39/wordlists/spanish.go | 2071 + .../uber/jaeger-client-go/CHANGELOG.md | 186 - .../uber/jaeger-client-go/CONTRIBUTING.md | 170 - vendor/github.com/uber/jaeger-client-go/DCO | 37 - .../uber/jaeger-client-go/Gopkg.lock | 164 - .../uber/jaeger-client-go/Gopkg.toml | 27 - .../github.com/uber/jaeger-client-go/LICENSE | 201 - .../github.com/uber/jaeger-client-go/Makefile | 117 - .../uber/jaeger-client-go/README.md | 260 - .../uber/jaeger-client-go/RELEASE.md | 11 - .../uber/jaeger-client-go/baggage_setter.go | 77 - .../uber/jaeger-client-go/config/config.go | 373 - .../jaeger-client-go/config/config_env.go | 205 - .../uber/jaeger-client-go/config/options.go | 148 - .../uber/jaeger-client-go/constants.go | 88 - .../uber/jaeger-client-go/context.go | 258 - .../uber/jaeger-client-go/contrib_observer.go | 56 - .../uber/jaeger-client-go/glide.lock | 89 - .../uber/jaeger-client-go/glide.yaml | 22 - .../uber/jaeger-client-go/header.go | 64 - .../internal/baggage/remote/options.go | 101 - .../baggage/remote/restriction_manager.go | 157 - .../internal/baggage/restriction_manager.go | 71 - .../jaeger-client-go/internal/spanlog/json.go | 81 - .../internal/throttler/remote/options.go | 99 - .../internal/throttler/remote/throttler.go | 216 - .../internal/throttler/throttler.go | 32 - .../uber/jaeger-client-go/interop.go | 55 - .../uber/jaeger-client-go/jaeger_tag.go | 84 - .../jaeger-client-go/jaeger_thrift_span.go | 179 - .../uber/jaeger-client-go/log/logger.go | 90 - .../uber/jaeger-client-go/logger.go | 53 - .../uber/jaeger-client-go/metrics.go | 107 - .../uber/jaeger-client-go/observer.go | 88 - .../uber/jaeger-client-go/process.go | 29 - .../uber/jaeger-client-go/propagation.go | 300 - .../uber/jaeger-client-go/reporter.go | 289 - .../uber/jaeger-client-go/reporter_options.go | 69 - .../jaeger-client-go/rpcmetrics/README.md | 5 - .../jaeger-client-go/rpcmetrics/endpoints.go | 63 - .../jaeger-client-go/rpcmetrics/metrics.go | 124 - .../jaeger-client-go/rpcmetrics/normalizer.go | 101 - .../jaeger-client-go/rpcmetrics/observer.go | 171 - .../uber/jaeger-client-go/sampler.go | 556 - .../uber/jaeger-client-go/sampler_options.go | 81 - .../github.com/uber/jaeger-client-go/span.go | 249 - .../thrift-gen/agent/agent.go | 411 - .../thrift-gen/agent/constants.go | 23 - .../thrift-gen/agent/ttypes.go | 21 - .../baggage/baggagerestrictionmanager.go | 435 - .../thrift-gen/baggage/constants.go | 18 - .../thrift-gen/baggage/ttypes.go | 154 - .../thrift-gen/jaeger/agent.go | 242 - .../thrift-gen/jaeger/constants.go | 18 - .../thrift-gen/jaeger/ttypes.go | 1838 - .../thrift-gen/sampling/constants.go | 18 - .../thrift-gen/sampling/samplingmanager.go | 410 - .../thrift-gen/sampling/ttypes.go | 873 - .../thrift-gen/zipkincore/constants.go | 32 - .../thrift-gen/zipkincore/ttypes.go | 1247 - .../thrift-gen/zipkincore/zipkincollector.go | 446 - .../uber/jaeger-client-go/thrift/README.md | 7 - .../thrift/application_exception.go | 142 - .../thrift/binary_protocol.go | 514 - .../thrift/compact_protocol.go | 815 - .../uber/jaeger-client-go/thrift/exception.go | 44 - .../jaeger-client-go/thrift/memory_buffer.go | 79 - .../jaeger-client-go/thrift/messagetype.go | 31 - .../uber/jaeger-client-go/thrift/numeric.go | 164 - .../uber/jaeger-client-go/thrift/processor.go | 30 - .../uber/jaeger-client-go/thrift/protocol.go | 175 - .../thrift/protocol_exception.go | 78 - .../thrift/protocol_factory.go | 25 - .../jaeger-client-go/thrift/rich_transport.go | 69 - .../jaeger-client-go/thrift/serializer.go | 75 - .../thrift/simple_json_protocol.go | 1337 - .../uber/jaeger-client-go/thrift/transport.go | 68 - .../thrift/transport_exception.go | 90 - .../thrift/transport_factory.go | 39 - .../uber/jaeger-client-go/thrift/type.go | 69 - .../uber/jaeger-client-go/tracer.go | 431 - .../uber/jaeger-client-go/tracer_options.go | 159 - .../uber/jaeger-client-go/transport.go | 38 - .../uber/jaeger-client-go/transport_udp.go | 131 - .../uber/jaeger-client-go/utils/http_json.go | 54 - .../uber/jaeger-client-go/utils/localip.go | 84 - .../uber/jaeger-client-go/utils/rand.go | 46 - .../jaeger-client-go/utils/rate_limiter.go | 77 - .../uber/jaeger-client-go/utils/udp_client.go | 98 - .../uber/jaeger-client-go/utils/utils.go | 87 - .../uber/jaeger-client-go/zipkin.go | 76 - .../jaeger-client-go/zipkin_thrift_span.go | 322 - vendor/github.com/uber/jaeger-lib/LICENSE | 201 - .../uber/jaeger-lib/metrics/factory.go | 35 - .../uber/jaeger-lib/metrics/local.go | 337 - .../uber/jaeger-lib/metrics/metrics.go | 85 - .../uber/jaeger-lib/metrics/stopwatch.go | 43 - .../uber/jaeger-lib/metrics/timer.go | 33 - vendor/github.com/wsddn/go-ecdh/LICENSE | 24 + vendor/github.com/wsddn/go-ecdh/Readme.md | 19 + vendor/github.com/wsddn/go-ecdh/curve25519.go | 62 + vendor/github.com/wsddn/go-ecdh/ecdh.go | 14 + vendor/github.com/wsddn/go-ecdh/elliptic.go | 87 + vendor/golang.org/x/net/.gitattributes | 10 - vendor/golang.org/x/net/.gitignore | 2 - vendor/golang.org/x/net/AUTHORS | 3 - vendor/golang.org/x/net/CONTRIBUTING.md | 31 - vendor/golang.org/x/net/CONTRIBUTORS | 3 - vendor/golang.org/x/net/README | 3 - vendor/golang.org/x/net/codereview.cfg | 1 - vendor/golang.org/x/net/context/context.go | 104 +- vendor/golang.org/x/net/context/go19.go | 20 + vendor/golang.org/x/net/context/pre_go19.go | 109 + vendor/golang.org/x/net/html/atom/gen.go | 648 - vendor/golang.org/x/net/html/atom/table.go | 1474 +- vendor/golang.org/x/net/html/const.go | 16 +- vendor/golang.org/x/net/html/doc.go | 8 +- vendor/golang.org/x/net/html/entity.go | 4154 +- vendor/golang.org/x/net/html/foreign.go | 6 +- vendor/golang.org/x/net/html/node.go | 33 +- vendor/golang.org/x/net/html/parse.go | 430 +- vendor/golang.org/x/net/html/token.go | 4 +- .../golang.org/x/net/http/httpproxy/proxy.go | 370 + .../x/net/idna/{idna.go => idna10.0.0.go} | 8 +- vendor/golang.org/x/net/idna/idna9.0.0.go | 682 + .../x/net/idna/{tables.go => tables10.0.0.go} | 6 +- vendor/golang.org/x/net/idna/tables11.0.0.go | 4653 + vendor/golang.org/x/net/idna/tables9.0.0.go | 4486 + .../golang.org/x/net/websocket/websocket.go | 3 + .../golang.org/x/sys/windows/registry/key.go | 198 + .../x/sys/windows/registry/mksyscall.go | 9 + .../x/sys/windows/registry/syscall.go | 32 + .../x/sys/windows/registry/value.go | 387 + .../sys/windows/registry/zsyscall_windows.go | 120 + vendor/golang.org/x/text/.gitattributes | 10 - vendor/golang.org/x/text/.gitignore | 3 - vendor/golang.org/x/text/AUTHORS | 3 - vendor/golang.org/x/text/CONTRIBUTING.md | 31 - vendor/golang.org/x/text/CONTRIBUTORS | 3 - vendor/golang.org/x/text/README | 23 - vendor/golang.org/x/text/codereview.cfg | 1 - .../x/text/encoding/charmap/charmap.go | 84 +- .../x/text/encoding/charmap/maketables.go | 556 - .../x/text/encoding/charmap/tables.go | 190 +- vendor/golang.org/x/text/encoding/encoding.go | 2 +- .../x/text/encoding/htmlindex/gen.go | 170 - .../x/text/encoding/htmlindex/htmlindex.go | 2 +- .../x/text/encoding/htmlindex/tables.go | 7 +- .../text/encoding/internal/identifier/gen.go | 137 - .../internal/identifier/identifier.go | 2 +- .../text/encoding/internal/identifier/mib.go | 12 +- .../x/text/encoding/japanese/eucjp.go | 72 +- .../x/text/encoding/japanese/iso2022jp.go | 59 +- .../x/text/encoding/japanese/maketables.go | 161 - .../x/text/encoding/japanese/shiftjis.go | 34 +- .../x/text/encoding/korean/euckr.go | 39 +- .../x/text/encoding/korean/maketables.go | 143 - .../x/text/encoding/simplifiedchinese/gbk.go | 60 +- .../encoding/simplifiedchinese/hzgb2312.go | 49 +- .../encoding/simplifiedchinese/maketables.go | 161 - .../text/encoding/traditionalchinese/big5.go | 25 +- .../encoding/traditionalchinese/maketables.go | 140 - .../x/text/encoding/unicode/unicode.go | 2 +- .../x/text/internal/language/common.go | 16 + .../x/text/internal/language/compact.go | 29 + .../text/internal/language/compact/compact.go | 61 + .../internal/language/compact/language.go | 260 + .../text/internal/language/compact/parents.go | 120 + .../text/internal/language/compact/tables.go | 1015 + .../x/text/internal/language/compact/tags.go | 91 + .../x/text/internal/language/compose.go | 167 + .../x/text/internal/language/coverage.go | 28 + .../x/text/internal/language/language.go | 596 + .../x/text/{ => internal}/language/lookup.go | 120 +- .../x/text/internal/language/match.go | 226 + .../x/text/internal/language/parse.go | 594 + .../x/text/internal/language/tables.go | 3431 + .../x/text/internal/language/tags.go | 48 + vendor/golang.org/x/text/language/Makefile | 16 - vendor/golang.org/x/text/language/common.go | 16 - vendor/golang.org/x/text/language/coverage.go | 34 +- vendor/golang.org/x/text/language/doc.go | 102 + .../golang.org/x/text/language/gen_common.go | 20 - .../golang.org/x/text/language/gen_index.go | 162 - vendor/golang.org/x/text/language/index.go | 767 - vendor/golang.org/x/text/language/language.go | 802 +- .../golang.org/x/text/language/maketables.go | 1648 - vendor/golang.org/x/text/language/match.go | 724 +- vendor/golang.org/x/text/language/parse.go | 737 +- vendor/golang.org/x/text/language/tables.go | 3771 +- vendor/golang.org/x/text/language/tags.go | 160 +- .../golang.org/x/text/transform/transform.go | 4 +- vendor/golang.org/x/text/unicode/bidi/bidi.go | 2 +- .../golang.org/x/text/unicode/bidi/bracket.go | 4 +- vendor/golang.org/x/text/unicode/bidi/core.go | 2 +- .../x/text/unicode/bidi/tables10.0.0.go | 2 +- .../x/text/unicode/bidi/tables11.0.0.go | 1887 + .../x/text/unicode/norm/composition.go | 8 +- .../x/text/unicode/norm/forminfo.go | 19 + vendor/golang.org/x/text/unicode/norm/iter.go | 3 +- .../x/text/unicode/norm/maketables.go | 986 + .../x/text/unicode/norm/normalize.go | 4 +- .../x/text/unicode/norm/readwriter.go | 4 +- .../x/text/unicode/norm/tables10.0.0.go | 1890 +- .../x/text/unicode/norm/tables9.0.0.go | 1890 +- .../x/text/unicode/norm/transform.go | 10 +- .../golang.org/x/text/unicode/norm/triegen.go | 117 + vendor/golang.org/x/{tools => time}/LICENSE | 0 vendor/golang.org/x/{tools => time}/PATENTS | 0 vendor/golang.org/x/time/rate/rate.go | 374 + vendor/golang.org/x/tools/.gitattributes | 10 - vendor/golang.org/x/tools/.gitignore | 2 - vendor/golang.org/x/tools/AUTHORS | 3 - vendor/golang.org/x/tools/CONTRIBUTING.md | 31 - vendor/golang.org/x/tools/CONTRIBUTORS | 3 - vendor/golang.org/x/tools/README | 10 - vendor/golang.org/x/tools/codereview.cfg | 1 - .../x/tools/go/ast/astutil/enclosing.go | 627 - .../x/tools/go/ast/astutil/imports.go | 450 - .../golang.org/x/tools/go/ast/astutil/util.go | 14 - vendor/gopkg.in/olebedev/go-duktape.v3/api.go | 50 +- .../gopkg.in/olebedev/go-duktape.v3/conts.go | 148 +- .../olebedev/go-duktape.v3/duk_alloc_pool.h | 8 + .../olebedev/go-duktape.v3/duk_config.h | 134 +- .../olebedev/go-duktape.v3/duk_console.c | 40 +- .../olebedev/go-duktape.v3/duk_console.h | 19 +- .../olebedev/go-duktape.v3/duk_logging.h | 10 +- .../go-duktape.v3/duk_minimal_printf.h | 8 + .../go-duktape.v3/duk_module_duktape.c | 4 +- .../go-duktape.v3/duk_module_duktape.h | 8 + .../olebedev/go-duktape.v3/duk_module_node.h | 8 + .../olebedev/go-duktape.v3/duk_print_alert.h | 8 + .../olebedev/go-duktape.v3/duk_v1_compat.h | 8 + .../gopkg.in/olebedev/go-duktape.v3/duktape.c | 6031 +- .../olebedev/go-duktape.v3/duktape.go | 2 +- .../gopkg.in/olebedev/go-duktape.v3/duktape.h | 144 +- vendor/vendor.json | 388 +- whisper/mailserver/server_test.go | 2 +- whisper/whisperv5/api.go | 561 - whisper/whisperv5/benchmarks_test.go | 206 - whisper/whisperv5/config.go | 27 - whisper/whisperv5/doc.go | 87 - whisper/whisperv5/envelope.go | 246 - whisper/whisperv5/filter.go | 243 - whisper/whisperv5/filter_test.go | 848 - whisper/whisperv5/gen_criteria_json.go | 64 - whisper/whisperv5/gen_message_json.go | 82 - whisper/whisperv5/gen_newmessage_json.go | 88 - whisper/whisperv5/message.go | 352 - whisper/whisperv5/message_test.go | 415 - whisper/whisperv5/peer.go | 174 - whisper/whisperv5/peer_test.go | 297 - whisper/whisperv5/topic.go | 55 - whisper/whisperv5/topic_test.go | 134 - whisper/whisperv5/whisper.go | 855 - whisper/whisperv5/whisper_test.go | 858 - whisper/whisperv6/api.go | 4 +- whisper/whisperv6/doc.go | 14 +- whisper/whisperv6/envelope.go | 41 +- whisper/whisperv6/envelope_test.go | 27 + whisper/whisperv6/peer.go | 2 +- whisper/whisperv6/whisper_test.go | 2 +- 1823 files changed, 500217 insertions(+), 217549 deletions(-) create mode 100644 SECURITY.md create mode 100644 accounts/abi/bind/backends/simulated_test.go create mode 100644 accounts/abi/bind/topics_test.go rename swarm/storage/error.go => accounts/accounts_test.go (67%) create mode 100644 accounts/external/backend.go create mode 100644 accounts/scwallet/README.md create mode 100644 accounts/scwallet/apdu.go create mode 100644 accounts/scwallet/hub.go create mode 100644 accounts/scwallet/securechannel.go create mode 100644 accounts/scwallet/wallet.go rename swarm/storage/feed/binaryserializer.go => accounts/sort.go (54%) delete mode 100644 accounts/usbwallet/internal/trezor/messages.pb.go delete mode 100644 accounts/usbwallet/internal/trezor/messages.proto delete mode 100644 accounts/usbwallet/internal/trezor/trezor.go delete mode 100644 accounts/usbwallet/internal/trezor/types.pb.go delete mode 100644 accounts/usbwallet/internal/trezor/types.proto create mode 100644 accounts/usbwallet/trezor/messages-common.pb.go create mode 100644 accounts/usbwallet/trezor/messages-common.proto create mode 100644 accounts/usbwallet/trezor/messages-ethereum.pb.go create mode 100644 accounts/usbwallet/trezor/messages-ethereum.proto create mode 100644 accounts/usbwallet/trezor/messages-management.pb.go create mode 100644 accounts/usbwallet/trezor/messages-management.proto create mode 100644 accounts/usbwallet/trezor/messages.pb.go create mode 100644 accounts/usbwallet/trezor/messages.proto create mode 100644 accounts/usbwallet/trezor/trezor.go delete mode 100644 build/deb/ethereum-swarm/deb.changelog delete mode 100644 build/deb/ethereum-swarm/deb.control delete mode 100644 build/deb/ethereum-swarm/deb.copyright delete mode 100644 build/deb/ethereum-swarm/deb.docs delete mode 100644 build/deb/ethereum-swarm/deb.install delete mode 100644 build/deb/ethereum-swarm/deb.rules create mode 100755 build/travis_keepalive.sh create mode 100644 cmd/checkpoint-admin/common.go create mode 100644 cmd/checkpoint-admin/exec.go create mode 100644 cmd/checkpoint-admin/main.go create mode 100644 cmd/checkpoint-admin/status.go delete mode 100644 cmd/clef/4byte.json create mode 100644 cmd/clef/datatypes.md create mode 100644 cmd/clef/docs/clef_architecture_pt1.png create mode 100644 cmd/clef/docs/clef_architecture_pt2.png create mode 100644 cmd/clef/docs/clef_architecture_pt3.png create mode 100644 cmd/clef/docs/clef_architecture_pt4.png create mode 100644 cmd/clef/tests/testsigner.js create mode 100644 cmd/devp2p/discv4cmd.go create mode 100644 cmd/devp2p/dns_cloudflare.go create mode 100644 cmd/devp2p/dnscmd.go create mode 100644 cmd/devp2p/enrcmd.go create mode 100644 cmd/devp2p/main.go create mode 100644 cmd/devp2p/nodeset.go rename cmd/ethkey/{changepassphrase.go => changepassword.go} (59%) delete mode 100644 cmd/geth/bugcmd.go delete mode 100644 cmd/geth/monitorcmd.go create mode 100644 cmd/geth/retesteth.go create mode 100644 cmd/geth/retesteth_copypaste.go delete mode 100644 cmd/internal/browser/browser.go delete mode 100644 cmd/swarm/access.go delete mode 100644 cmd/swarm/access_test.go delete mode 100644 cmd/swarm/bootnodes.go delete mode 100644 cmd/swarm/config.go delete mode 100644 cmd/swarm/config_test.go delete mode 100644 cmd/swarm/db.go delete mode 100644 cmd/swarm/download.go delete mode 100644 cmd/swarm/export_test.go delete mode 100644 cmd/swarm/feeds.go delete mode 100644 cmd/swarm/feeds_test.go delete mode 100644 cmd/swarm/flags.go delete mode 100644 cmd/swarm/fs.go delete mode 100644 cmd/swarm/fs_test.go delete mode 100644 cmd/swarm/hash.go delete mode 100644 cmd/swarm/list.go delete mode 100644 cmd/swarm/main.go delete mode 100644 cmd/swarm/manifest.go delete mode 100644 cmd/swarm/manifest_test.go delete mode 100644 cmd/swarm/mimegen/generator.go delete mode 100644 cmd/swarm/mimegen/mime.types delete mode 100644 cmd/swarm/run_test.go delete mode 100644 cmd/swarm/swarm-smoke/feed_upload_and_sync.go delete mode 100644 cmd/swarm/swarm-smoke/main.go delete mode 100644 cmd/swarm/swarm-smoke/upload_and_sync.go delete mode 100644 cmd/swarm/upload.go delete mode 100644 cmd/swarm/upload_test.go create mode 100644 common/compiler/helpers.go create mode 100644 common/compiler/test.v.py create mode 100644 common/compiler/test_bad.v.py create mode 100644 common/compiler/vyper.go create mode 100644 common/compiler/vyper_test.go create mode 100644 common/fdlimit/fdlimit_darwin.go create mode 100644 common/mclock/simclock_test.go create mode 100644 common/prque/lazyqueue.go create mode 100644 common/prque/lazyqueue_test.go create mode 100644 consensus/clique/clique_test.go delete mode 100644 containers/docker/develop-alpine/Dockerfile delete mode 100644 containers/docker/develop-ubuntu/Dockerfile delete mode 100644 containers/docker/master-alpine/Dockerfile delete mode 100644 containers/docker/master-ubuntu/Dockerfile create mode 100644 contracts/checkpointoracle/contract/oracle.go create mode 100644 contracts/checkpointoracle/contract/oracle.sol create mode 100644 contracts/checkpointoracle/oracle.go create mode 100644 contracts/checkpointoracle/oracle_test.go delete mode 100644 contracts/chequebook/api.go delete mode 100644 contracts/chequebook/cheque.go delete mode 100644 contracts/chequebook/cheque_test.go delete mode 100644 contracts/chequebook/contract/chequebook.go delete mode 100644 contracts/chequebook/contract/chequebook.sol delete mode 100644 contracts/chequebook/contract/code.go delete mode 100644 contracts/chequebook/contract/mortal.sol delete mode 100644 contracts/chequebook/contract/owned.sol delete mode 100644 contracts/chequebook/gencode.go delete mode 100644 contracts/ens/README.md delete mode 100644 contracts/ens/contract/AbstractENS.sol delete mode 100644 contracts/ens/contract/ENS.sol delete mode 100644 contracts/ens/contract/FIFSRegistrar.sol delete mode 100644 contracts/ens/contract/PublicResolver.sol delete mode 100644 contracts/ens/contract/ens.go delete mode 100644 contracts/ens/contract/fifsregistrar.go delete mode 100644 contracts/ens/contract/publicresolver.go delete mode 100644 contracts/ens/ens.go delete mode 100644 contracts/ens/ens_test.go create mode 100644 core/forkid/forkid.go create mode 100644 core/forkid/forkid_test.go create mode 100644 core/rawdb/database.go create mode 100644 core/rawdb/freezer.go create mode 100644 core/rawdb/freezer_reinit.go create mode 100644 core/rawdb/freezer_table.go create mode 100644 core/rawdb/freezer_table_test.go create mode 100644 core/rawdb/table.go delete mode 100644 core/state/managed_state.go delete mode 100644 core/state/managed_state_test.go create mode 100644 core/state/state_object_test.go create mode 100644 core/state_prefetcher.go create mode 100644 core/tx_noncer.go create mode 100644 core/types/receipt_test.go create mode 100644 core/vm/eips.go create mode 100644 core/vm/testdata/testcases_add.json create mode 100644 core/vm/testdata/testcases_and.json create mode 100644 core/vm/testdata/testcases_byte.json create mode 100644 core/vm/testdata/testcases_div.json create mode 100644 core/vm/testdata/testcases_eq.json create mode 100644 core/vm/testdata/testcases_exp.json create mode 100644 core/vm/testdata/testcases_gt.json create mode 100644 core/vm/testdata/testcases_lt.json create mode 100644 core/vm/testdata/testcases_mod.json create mode 100644 core/vm/testdata/testcases_mul.json create mode 100644 core/vm/testdata/testcases_or.json create mode 100644 core/vm/testdata/testcases_sar.json create mode 100644 core/vm/testdata/testcases_sdiv.json create mode 100644 core/vm/testdata/testcases_sgt.json create mode 100644 core/vm/testdata/testcases_shl.json create mode 100644 core/vm/testdata/testcases_shr.json create mode 100644 core/vm/testdata/testcases_signext.json create mode 100644 core/vm/testdata/testcases_slt.json create mode 100644 core/vm/testdata/testcases_smod.json create mode 100644 core/vm/testdata/testcases_sub.json create mode 100644 core/vm/testdata/testcases_xor.json create mode 100644 crypto/blake2b/blake2b.go create mode 100644 crypto/blake2b/blake2bAVX2_amd64.go create mode 100644 crypto/blake2b/blake2bAVX2_amd64.s create mode 100644 crypto/blake2b/blake2b_amd64.go create mode 100644 crypto/blake2b/blake2b_amd64.s create mode 100644 crypto/blake2b/blake2b_f_fuzz.go create mode 100644 crypto/blake2b/blake2b_f_test.go create mode 100644 crypto/blake2b/blake2b_generic.go create mode 100644 crypto/blake2b/blake2b_ref.go create mode 100644 crypto/blake2b/blake2b_test.go create mode 100644 crypto/blake2b/blake2x.go create mode 100644 crypto/blake2b/register.go create mode 100644 dashboard/assets/.eslintignore create mode 100644 dashboard/assets/components/Network.jsx rename dashboard/assets/{webpack.config.js => webpack.config.common.js} (58%) create mode 100644 dashboard/assets/webpack.config.dev.js rename core/rawdb/interfaces.go => dashboard/assets/webpack.config.prod.js (53%) create mode 100644 dashboard/geoip.go create mode 100644 dashboard/peers.go create mode 100644 dashboard/system.go create mode 100644 docs/audits/2017-04-25_Geth-audit_Truesec.pdf create mode 100644 docs/audits/2018-09-14_Clef-audit_NCC.pdf create mode 100644 eth/enr_entry.go delete mode 100644 ethdb/.gitignore rename ethdb/{interface.go => batch.go} (53%) delete mode 100644 ethdb/database_js.go delete mode 100644 ethdb/database_test.go create mode 100644 ethdb/dbtest/testsuite.go create mode 100644 ethdb/iterator.go create mode 100644 ethdb/leveldb/leveldb.go rename ethdb/{database_js_test.go => leveldb/leveldb_test.go} (62%) delete mode 100644 ethdb/memory_database.go create mode 100644 ethdb/memorydb/memorydb.go rename swarm/network/common.go => ethdb/memorydb/memorydb_test.go (74%) rename ethdb/{ => rocksdb}/norocksdb.go (100%) rename ethdb/{rocksdb_database.go => rocksdb/rocksdb.go} (64%) delete mode 100644 ethdb/table.go delete mode 100644 ethdb/table_batch.go create mode 100644 graphql/graphiql.go create mode 100644 graphql/graphql.go rename swarm/fuse/fuse_root.go => graphql/graphql_test.go (72%) create mode 100644 graphql/schema.go create mode 100644 graphql/service.go rename swarm/fuse/swarmfs_fallback.go => internal/testlog/testlog.go (53%) create mode 100644 les/api.go create mode 100644 les/api_test.go create mode 100644 les/balance.go create mode 100644 les/benchmark.go create mode 100644 les/checkpointoracle.go rename les/{backend.go => client.go} (70%) create mode 100644 les/client_handler.go create mode 100644 les/clientpool.go create mode 100644 les/clientpool_test.go create mode 100644 les/costtracker.go create mode 100644 les/enr_entry.go create mode 100644 les/flowcontrol/logger.go create mode 100644 les/flowcontrol/manager_test.go delete mode 100644 les/freeclient.go delete mode 100644 les/freeclient_test.go delete mode 100644 les/handler.go delete mode 100644 les/helper_test.go create mode 100644 les/peer_test.go create mode 100644 les/server_handler.go create mode 100644 les/servingqueue.go create mode 100644 les/sync_test.go create mode 100644 les/test_helper.go create mode 100644 les/ulc.go create mode 100644 les/ulc_test.go rename swarm/storage/mock/mem/mem_test.go => metrics/cpu.go (57%) rename swarm/storage/feed/query_test.go => metrics/cpu_syscall.go (63%) rename swarm/pss/handshake_none.go => metrics/cpu_windows.go (82%) create mode 100644 metrics/prometheus/collector.go create mode 100644 metrics/prometheus/prometheus.go create mode 100644 mobile/interface_test.go create mode 100644 p2p/discover/common.go rename p2p/discover/{udp.go => v4_udp.go} (52%) create mode 100644 p2p/discover/v4_udp_lookup_test.go rename p2p/discover/{udp_test.go => v4_udp_test.go} (71%) create mode 100644 p2p/dnsdisc/client.go create mode 100644 p2p/dnsdisc/client_test.go rename swarm/pss/protocol_none.go => p2p/dnsdisc/doc.go (90%) create mode 100644 p2p/dnsdisc/error.go create mode 100644 p2p/dnsdisc/sync.go create mode 100644 p2p/dnsdisc/tree.go create mode 100644 p2p/dnsdisc/tree_test.go create mode 100644 p2p/netutil/addrutil.go delete mode 100644 p2p/protocols/accounting.go delete mode 100644 p2p/protocols/accounting_api.go delete mode 100644 p2p/protocols/accounting_simulation_test.go delete mode 100644 p2p/protocols/accounting_test.go delete mode 100644 p2p/protocols/protocol.go delete mode 100644 p2p/protocols/protocol_test.go delete mode 100644 p2p/protocols/reporter.go delete mode 100644 p2p/protocols/reporter_test.go create mode 100644 p2p/util.go create mode 100644 p2p/util_test.go delete mode 100644 params/gas_table.go rename swarm/network/stream/norace_test.go => rpc/constants_unix.go (75%) rename swarm/network/stream/race_test.go => rpc/constants_unix_nocgo.go (82%) create mode 100644 rpc/gzip.go create mode 100644 rpc/handler.go delete mode 100644 rpc/json_test.go create mode 100644 rpc/service.go create mode 100644 rpc/testdata/invalid-badid.js create mode 100644 rpc/testdata/invalid-batch.js create mode 100644 rpc/testdata/invalid-idonly.js create mode 100644 rpc/testdata/invalid-nonobj.js create mode 100644 rpc/testdata/invalid-syntax.json create mode 100644 rpc/testdata/reqresp-batch.js create mode 100644 rpc/testdata/reqresp-echo.js create mode 100644 rpc/testdata/reqresp-namedparam.js create mode 100644 rpc/testdata/reqresp-noargsrets.js create mode 100644 rpc/testdata/reqresp-nomethod.js create mode 100644 rpc/testdata/reqresp-noparam.js create mode 100644 rpc/testdata/reqresp-paramsnull.js create mode 100644 rpc/testdata/revcall.js create mode 100644 rpc/testdata/revcall2.js create mode 100644 rpc/testdata/subscription.js create mode 100644 rpc/testservice_test.go delete mode 100644 rpc/utils.go delete mode 100644 signer/core/abihelper.go create mode 100644 signer/core/signed_data.go rename rpc/utils_test.go => signer/core/signed_data_internal_test.go (52%) create mode 100644 signer/core/signed_data_test.go create mode 100644 signer/core/testdata/README.md create mode 100644 signer/core/testdata/arrays-1.json create mode 100644 signer/core/testdata/custom_arraytype.json create mode 100644 signer/core/testdata/eip712.json create mode 100644 signer/core/testdata/expfail_arraytype_overload.json create mode 100644 signer/core/testdata/expfail_datamismatch_1.json create mode 100644 signer/core/testdata/expfail_extradata-1.json create mode 100644 signer/core/testdata/expfail_extradata-2.json create mode 100644 signer/core/testdata/expfail_malformeddomainkeys.json create mode 100644 signer/core/testdata/expfail_nonexistant_type.json create mode 100644 signer/core/testdata/expfail_toolargeuint.json create mode 100644 signer/core/testdata/expfail_toolargeuint2.json create mode 100644 signer/core/testdata/expfail_unconvertiblefloat.json create mode 100644 signer/core/testdata/expfail_unconvertiblefloat2.json create mode 100644 signer/core/testdata/fuzzing/2850f6ccf2d7f5f846dfb73119b60e09e712783f create mode 100644 signer/core/testdata/fuzzing/36fb987a774011dc675e1b5246ac5c1d44d84d92 create mode 100644 signer/core/testdata/fuzzing/37ec7b55c7ba014cced204c5f9989d2d0eb9ff6d create mode 100644 signer/core/testdata/fuzzing/582fa92154b784daa1faa293b695fa388fe34bf1 create mode 100644 signer/core/testdata/fuzzing/ab57cb2b2b5ce614efe13a47bc73814580f2cce8 create mode 100644 signer/core/testdata/fuzzing/e4303e23ca34fbbc43164a232b2caa7a3af2bf8d create mode 100644 signer/core/testdata/fuzzing/f658340af009dd4a35abe645a00a7b732bc30921 create mode 100644 signer/core/uiapi.go create mode 100644 signer/fourbyte/4byte.go create mode 100644 signer/fourbyte/4byte.json create mode 100644 signer/fourbyte/abi.go rename signer/{core/abihelper_test.go => fourbyte/abi_test.go} (77%) create mode 100644 signer/fourbyte/fourbyte.go create mode 100644 signer/fourbyte/fourbyte_test.go create mode 100644 signer/fourbyte/validation.go create mode 100644 signer/fourbyte/validation_test.go delete mode 100644 swarm/AUTHORS delete mode 100644 swarm/OWNERS delete mode 100644 swarm/api/act.go delete mode 100644 swarm/api/api.go delete mode 100644 swarm/api/api_test.go delete mode 100644 swarm/api/client/client.go delete mode 100644 swarm/api/client/client_test.go delete mode 100644 swarm/api/config.go delete mode 100644 swarm/api/config_test.go delete mode 100644 swarm/api/encrypt.go delete mode 100644 swarm/api/filesystem.go delete mode 100644 swarm/api/filesystem_test.go delete mode 100644 swarm/api/gen_mime.go delete mode 100644 swarm/api/http/middleware.go delete mode 100644 swarm/api/http/response.go delete mode 100644 swarm/api/http/response_test.go delete mode 100644 swarm/api/http/roundtripper.go delete mode 100644 swarm/api/http/roundtripper_test.go delete mode 100644 swarm/api/http/sctx.go delete mode 100644 swarm/api/http/server.go delete mode 100644 swarm/api/http/server_test.go delete mode 100644 swarm/api/http/templates.go delete mode 100644 swarm/api/http/test_server.go delete mode 100644 swarm/api/inspector.go delete mode 100644 swarm/api/manifest.go delete mode 100644 swarm/api/manifest_test.go delete mode 100644 swarm/api/storage.go delete mode 100644 swarm/api/storage_test.go delete mode 100644 swarm/api/testdata/test0/img/logo.png delete mode 100644 swarm/api/testdata/test0/index.css delete mode 100644 swarm/api/testdata/test0/index.html delete mode 100644 swarm/api/uri.go delete mode 100644 swarm/api/uri_test.go delete mode 100644 swarm/bmt/bmt.go delete mode 100644 swarm/bmt/bmt_r.go delete mode 100644 swarm/bmt/bmt_test.go delete mode 100644 swarm/chunk/chunk.go delete mode 100644 swarm/dev/.dockerignore delete mode 100644 swarm/dev/.gitignore delete mode 100644 swarm/dev/Dockerfile delete mode 100644 swarm/dev/Makefile delete mode 100644 swarm/dev/README.md delete mode 100644 swarm/dev/bashrc delete mode 100755 swarm/dev/run.sh delete mode 100755 swarm/dev/scripts/boot-cluster.sh delete mode 100755 swarm/dev/scripts/random-uploads.sh delete mode 100755 swarm/dev/scripts/stop-cluster.sh delete mode 100644 swarm/dev/scripts/util.sh delete mode 100644 swarm/docker/Dockerfile delete mode 100755 swarm/docker/run-smoke.sh delete mode 100755 swarm/docker/run.sh delete mode 100644 swarm/fuse/fuse_dir.go delete mode 100644 swarm/fuse/fuse_file.go delete mode 100644 swarm/fuse/swarmfs.go delete mode 100644 swarm/fuse/swarmfs_test.go delete mode 100644 swarm/fuse/swarmfs_unix.go delete mode 100644 swarm/fuse/swarmfs_util.go delete mode 100644 swarm/log/log.go delete mode 100644 swarm/metrics/flags.go delete mode 100644 swarm/network/README.md delete mode 100644 swarm/network/bitvector/bitvector.go delete mode 100644 swarm/network/bitvector/bitvector_test.go delete mode 100644 swarm/network/discovery.go delete mode 100644 swarm/network/discovery_test.go delete mode 100644 swarm/network/fetcher.go delete mode 100644 swarm/network/fetcher_test.go delete mode 100644 swarm/network/hive.go delete mode 100644 swarm/network/hive_test.go delete mode 100644 swarm/network/kademlia.go delete mode 100644 swarm/network/kademlia_test.go delete mode 100644 swarm/network/networkid_test.go delete mode 100644 swarm/network/priorityqueue/priorityqueue.go delete mode 100644 swarm/network/priorityqueue/priorityqueue_test.go delete mode 100644 swarm/network/protocol.go delete mode 100644 swarm/network/protocol_test.go delete mode 100644 swarm/network/simulation/bucket.go delete mode 100644 swarm/network/simulation/bucket_test.go delete mode 100644 swarm/network/simulation/events.go delete mode 100644 swarm/network/simulation/events_test.go delete mode 100644 swarm/network/simulation/example_test.go delete mode 100644 swarm/network/simulation/http.go delete mode 100644 swarm/network/simulation/http_test.go delete mode 100644 swarm/network/simulation/kademlia.go delete mode 100644 swarm/network/simulation/kademlia_test.go delete mode 100644 swarm/network/simulation/node.go delete mode 100644 swarm/network/simulation/node_test.go delete mode 100644 swarm/network/simulation/service.go delete mode 100644 swarm/network/simulation/service_test.go delete mode 100644 swarm/network/simulation/simulation.go delete mode 100644 swarm/network/simulation/simulation_test.go delete mode 100644 swarm/network/simulations/discovery/discovery.go delete mode 100644 swarm/network/simulations/discovery/discovery_test.go delete mode 100755 swarm/network/simulations/discovery/snapshot.json delete mode 100644 swarm/network/simulations/overlay.go delete mode 100644 swarm/network/simulations/overlay_test.go delete mode 100644 swarm/network/stream/common_test.go delete mode 100644 swarm/network/stream/delivery.go delete mode 100644 swarm/network/stream/delivery_test.go delete mode 100644 swarm/network/stream/intervals/intervals.go delete mode 100644 swarm/network/stream/intervals/intervals_test.go delete mode 100644 swarm/network/stream/intervals/store_test.go delete mode 100644 swarm/network/stream/intervals_test.go delete mode 100644 swarm/network/stream/lightnode_test.go delete mode 100644 swarm/network/stream/messages.go delete mode 100644 swarm/network/stream/peer.go delete mode 100644 swarm/network/stream/snapshot_retrieval_test.go delete mode 100644 swarm/network/stream/snapshot_sync_test.go delete mode 100644 swarm/network/stream/stream.go delete mode 100644 swarm/network/stream/streamer_test.go delete mode 100644 swarm/network/stream/syncer.go delete mode 100644 swarm/network/stream/syncer_test.go delete mode 100644 swarm/network/stream/testing/snapshot_128.json delete mode 100644 swarm/network/stream/testing/snapshot_16.json delete mode 100644 swarm/network/stream/testing/snapshot_256.json delete mode 100644 swarm/network/stream/testing/snapshot_32.json delete mode 100644 swarm/network/stream/testing/snapshot_4.json delete mode 100644 swarm/network/stream/testing/snapshot_64.json delete mode 100644 swarm/network/stream/visualized_snapshot_sync_sim_test.go delete mode 100644 swarm/network_test.go delete mode 100644 swarm/pot/address.go delete mode 100644 swarm/pot/doc.go delete mode 100644 swarm/pot/pot.go delete mode 100644 swarm/pot/pot_test.go delete mode 100644 swarm/pss/ARCHITECTURE.md delete mode 100644 swarm/pss/README.md delete mode 100644 swarm/pss/api.go delete mode 100644 swarm/pss/client/client.go delete mode 100644 swarm/pss/client/client_test.go delete mode 100644 swarm/pss/client/doc.go delete mode 100644 swarm/pss/doc.go delete mode 100644 swarm/pss/forwarding_test.go delete mode 100644 swarm/pss/handshake.go delete mode 100644 swarm/pss/handshake_test.go delete mode 100644 swarm/pss/keystore.go delete mode 100644 swarm/pss/notify/notify.go delete mode 100644 swarm/pss/notify/notify_test.go delete mode 100644 swarm/pss/ping.go delete mode 100644 swarm/pss/protocol.go delete mode 100644 swarm/pss/protocol_test.go delete mode 100644 swarm/pss/pss.go delete mode 100644 swarm/pss/pss_test.go delete mode 100644 swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl delete mode 100644 swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh delete mode 100644 swarm/pss/testdata/snapshot_128.json delete mode 100644 swarm/pss/testdata/snapshot_16.json delete mode 100644 swarm/pss/testdata/snapshot_2.json delete mode 100644 swarm/pss/testdata/snapshot_256.json delete mode 100644 swarm/pss/testdata/snapshot_3.json delete mode 100644 swarm/pss/testdata/snapshot_32.json delete mode 100644 swarm/pss/testdata/snapshot_4.json delete mode 100644 swarm/pss/testdata/snapshot_64.json delete mode 100644 swarm/pss/testdata/snapshot_8.json delete mode 100644 swarm/pss/types.go delete mode 100644 swarm/pss/writeup.md delete mode 100644 swarm/sctx/sctx.go delete mode 100644 swarm/services/swap/swap.go delete mode 100644 swarm/services/swap/swap/swap.go delete mode 100644 swarm/services/swap/swap/swap_test.go delete mode 100644 swarm/shed/db.go delete mode 100644 swarm/shed/db_test.go delete mode 100644 swarm/shed/example_store_test.go delete mode 100644 swarm/shed/field_string.go delete mode 100644 swarm/shed/field_string_test.go delete mode 100644 swarm/shed/field_struct.go delete mode 100644 swarm/shed/field_struct_test.go delete mode 100644 swarm/shed/field_uint64.go delete mode 100644 swarm/shed/field_uint64_test.go delete mode 100644 swarm/shed/index.go delete mode 100644 swarm/shed/index_test.go delete mode 100644 swarm/shed/schema.go delete mode 100644 swarm/shed/schema_test.go delete mode 100644 swarm/spancontext/spancontext.go delete mode 100644 swarm/state/dbstore.go delete mode 100644 swarm/state/dbstore_test.go delete mode 100644 swarm/storage/chunker.go delete mode 100644 swarm/storage/chunker_test.go delete mode 100644 swarm/storage/common_test.go delete mode 100644 swarm/storage/database.go delete mode 100644 swarm/storage/encryption/encryption.go delete mode 100644 swarm/storage/encryption/encryption_test.go delete mode 100644 swarm/storage/feed/binaryserializer_test.go delete mode 100644 swarm/storage/feed/cacheentry.go delete mode 100644 swarm/storage/feed/doc.go delete mode 100644 swarm/storage/feed/error.go delete mode 100644 swarm/storage/feed/feed.go delete mode 100644 swarm/storage/feed/feed_test.go delete mode 100644 swarm/storage/feed/handler.go delete mode 100644 swarm/storage/feed/handler_test.go delete mode 100644 swarm/storage/feed/id.go delete mode 100644 swarm/storage/feed/id_test.go delete mode 100644 swarm/storage/feed/lookup/epoch.go delete mode 100644 swarm/storage/feed/lookup/epoch_test.go delete mode 100644 swarm/storage/feed/lookup/lookup.go delete mode 100644 swarm/storage/feed/lookup/lookup_test.go delete mode 100644 swarm/storage/feed/query.go delete mode 100644 swarm/storage/feed/request.go delete mode 100644 swarm/storage/feed/request_test.go delete mode 100644 swarm/storage/feed/sign.go delete mode 100644 swarm/storage/feed/testutil.go delete mode 100644 swarm/storage/feed/timestampprovider.go delete mode 100644 swarm/storage/feed/topic.go delete mode 100644 swarm/storage/feed/topic_test.go delete mode 100644 swarm/storage/feed/update.go delete mode 100644 swarm/storage/feed/update_test.go delete mode 100644 swarm/storage/filestore.go delete mode 100644 swarm/storage/filestore_test.go delete mode 100644 swarm/storage/hasherstore.go delete mode 100644 swarm/storage/hasherstore_test.go delete mode 100644 swarm/storage/ldbstore.go delete mode 100644 swarm/storage/ldbstore_test.go delete mode 100644 swarm/storage/localstore.go delete mode 100644 swarm/storage/localstore/doc.go delete mode 100644 swarm/storage/localstore/gc.go delete mode 100644 swarm/storage/localstore/gc_test.go delete mode 100644 swarm/storage/localstore/index_test.go delete mode 100644 swarm/storage/localstore/localstore.go delete mode 100644 swarm/storage/localstore/localstore_test.go delete mode 100644 swarm/storage/localstore/mode_get.go delete mode 100644 swarm/storage/localstore/mode_get_test.go delete mode 100644 swarm/storage/localstore/mode_put.go delete mode 100644 swarm/storage/localstore/mode_put_test.go delete mode 100644 swarm/storage/localstore/mode_set.go delete mode 100644 swarm/storage/localstore/mode_set_test.go delete mode 100644 swarm/storage/localstore/retrieval_index_test.go delete mode 100644 swarm/storage/localstore/subscription_pull.go delete mode 100644 swarm/storage/localstore/subscription_pull_test.go delete mode 100644 swarm/storage/localstore/subscription_push.go delete mode 100644 swarm/storage/localstore/subscription_push_test.go delete mode 100644 swarm/storage/localstore_test.go delete mode 100644 swarm/storage/memstore.go delete mode 100644 swarm/storage/memstore_test.go delete mode 100644 swarm/storage/mock/db/db.go delete mode 100644 swarm/storage/mock/db/db_test.go delete mode 100644 swarm/storage/mock/mem/mem.go delete mode 100644 swarm/storage/mock/mock.go delete mode 100644 swarm/storage/mock/rpc/rpc.go delete mode 100644 swarm/storage/mock/rpc/rpc_test.go delete mode 100644 swarm/storage/mock/test/test.go delete mode 100644 swarm/storage/netstore.go delete mode 100644 swarm/storage/netstore_test.go delete mode 100644 swarm/storage/pyramid.go delete mode 100644 swarm/storage/schema.go delete mode 100644 swarm/storage/swarmhasher.go delete mode 100644 swarm/storage/types.go delete mode 100644 swarm/storage/types_test.go delete mode 100644 swarm/swap/swap.go delete mode 100644 swarm/swap/swap_test.go delete mode 100644 swarm/swarm.go delete mode 100644 swarm/swarm_test.go delete mode 100644 swarm/testutil/file.go delete mode 100644 swarm/tracing/tracing.go delete mode 100644 swarm/version/version.go delete mode 100644 tests/gen_tttransaction.go create mode 100644 tests/solidity/bytecode.js create mode 100644 tests/solidity/contracts/Migrations.sol create mode 100644 tests/solidity/contracts/OpCodes.sol create mode 100644 tests/solidity/migrations/1_initial_migration.js create mode 100644 tests/solidity/migrations/2_opCodes_migration.js create mode 100644 tests/solidity/test/opCodes.js create mode 100644 tests/solidity/truffle-config.js rename swarm/network/stream/intervals/dbstore_test.go => trie/database_test.go (63%) delete mode 100644 trie/node_test.go create mode 100644 trie/sync_bloom.go delete mode 100644 vendor/bazil.org/fuse/LICENSE delete mode 100644 vendor/bazil.org/fuse/README.md delete mode 100644 vendor/bazil.org/fuse/buffer.go delete mode 100644 vendor/bazil.org/fuse/debug.go delete mode 100644 vendor/bazil.org/fuse/error_darwin.go delete mode 100644 vendor/bazil.org/fuse/error_freebsd.go delete mode 100644 vendor/bazil.org/fuse/error_linux.go delete mode 100644 vendor/bazil.org/fuse/error_std.go delete mode 100644 vendor/bazil.org/fuse/fs/serve.go delete mode 100644 vendor/bazil.org/fuse/fs/tree.go delete mode 100644 vendor/bazil.org/fuse/fuse.go delete mode 100644 vendor/bazil.org/fuse/fuse.iml delete mode 100644 vendor/bazil.org/fuse/fuse_darwin.go delete mode 100644 vendor/bazil.org/fuse/fuse_freebsd.go delete mode 100644 vendor/bazil.org/fuse/fuse_kernel.go delete mode 100644 vendor/bazil.org/fuse/fuse_kernel_darwin.go delete mode 100644 vendor/bazil.org/fuse/fuse_kernel_freebsd.go delete mode 100644 vendor/bazil.org/fuse/fuse_kernel_linux.go delete mode 100644 vendor/bazil.org/fuse/fuse_kernel_std.go delete mode 100644 vendor/bazil.org/fuse/fuse_linux.go delete mode 100644 vendor/bazil.org/fuse/fuseutil/fuseutil.go delete mode 100644 vendor/bazil.org/fuse/mount.go delete mode 100644 vendor/bazil.org/fuse/mount_darwin.go delete mode 100644 vendor/bazil.org/fuse/mount_freebsd.go delete mode 100644 vendor/bazil.org/fuse/mount_linux.go delete mode 100644 vendor/bazil.org/fuse/options.go delete mode 100644 vendor/bazil.org/fuse/options_darwin.go delete mode 100644 vendor/bazil.org/fuse/options_freebsd.go delete mode 100644 vendor/bazil.org/fuse/options_linux.go delete mode 100644 vendor/bazil.org/fuse/protocol.go delete mode 100644 vendor/bazil.org/fuse/unmount.go delete mode 100644 vendor/bazil.org/fuse/unmount_linux.go delete mode 100644 vendor/bazil.org/fuse/unmount_std.go create mode 100644 vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go delete mode 100644 vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go delete mode 100644 vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/access_conditions.go (83%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/atomicmorph.go (75%) create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/blob.json rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/highlevel.go (78%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/parsing_urls.go (53%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/sas_service.go (65%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/service_codes_blob.go (100%) create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_append_blob.go (65%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_blob.go (90%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_block_blob.go (84%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_container.go (90%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_page_blob.go (74%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/url_service.go (84%) create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_credential_anonymous.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_credential_shared_key.go (86%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_credential_token.go (76%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_mmf_unix.go (75%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_mmf_windows.go (90%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_pipeline.go (82%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_policy_request_log.go (80%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_policy_retry.go (69%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_policy_telemetry.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_policy_unique_request_id.go (100%) create mode 100644 vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_sas_account.go (94%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_sas_query_params.go (60%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_service_codes_common.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_storage_error.go (95%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_util_validate.go (60%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zc_uuid.go (96%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zt_doc.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_append_blob.go (55%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_blob.go (75%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_block_blob.go (84%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_client.go (96%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_container.go (94%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_models.go (81%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_page_blob.go (68%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_responder_policy.go (96%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_response_error.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_service.go (76%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_validation.go (100%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_generated_version.go (88%) rename vendor/github.com/Azure/azure-storage-blob-go/{2018-03-28 => }/azblob/zz_response_helpers.go (98%) create mode 100644 vendor/github.com/apilayer/freegeoip/AUTHORS create mode 100644 vendor/github.com/apilayer/freegeoip/CONTRIBUTORS create mode 100644 vendor/github.com/apilayer/freegeoip/Dockerfile create mode 100644 vendor/github.com/apilayer/freegeoip/HISTORY.md create mode 100644 vendor/github.com/apilayer/freegeoip/LICENSE create mode 100644 vendor/github.com/apilayer/freegeoip/Procfile create mode 100644 vendor/github.com/apilayer/freegeoip/README.md create mode 100644 vendor/github.com/apilayer/freegeoip/app.json create mode 100644 vendor/github.com/apilayer/freegeoip/db.go create mode 100644 vendor/github.com/apilayer/freegeoip/doc.go create mode 100644 vendor/github.com/apilayer/freegeoip/freegeo-warning.png create mode 100644 vendor/github.com/cloudflare/cloudflare-go/CODE_OF_CONDUCT.md create mode 100644 vendor/github.com/cloudflare/cloudflare-go/LICENSE create mode 100644 vendor/github.com/cloudflare/cloudflare-go/README.md create mode 100644 vendor/github.com/cloudflare/cloudflare-go/access_application.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/access_identity_provider.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/access_organization.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/access_policy.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/access_service_tokens.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/account_members.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/account_roles.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/accounts.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/argo.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/auditlogs.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/cloudflare.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/custom_hostname.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/custom_pages.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/dns.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/duration.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/errors.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/filter.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/firewall.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/firewall_rules.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/go.mod create mode 100644 vendor/github.com/cloudflare/cloudflare-go/go.sum create mode 100644 vendor/github.com/cloudflare/cloudflare-go/ips.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/keyless.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/load_balancing.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/lockdown.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/logpush.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/options.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/origin_ca.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/page_rules.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/railgun.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/rate_limiting.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/registrar.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/renovate.json create mode 100644 vendor/github.com/cloudflare/cloudflare-go/spectrum.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/ssl.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/universal_ssl.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/user.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/user_agent.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/virtualdns.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/waf.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/workers.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/workers_kv.go create mode 100644 vendor/github.com/cloudflare/cloudflare-go/zone.go delete mode 100644 vendor/github.com/codahale/hdrhistogram/README.md delete mode 100644 vendor/github.com/codahale/hdrhistogram/hdr.go delete mode 100644 vendor/github.com/codahale/hdrhistogram/window.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/LICENSE delete mode 100644 vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/README.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md delete mode 100644 vendor/github.com/dgrijalva/jwt-go/claims.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/doc.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/errors.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/hmac.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/map_claims.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/none.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/parser.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa_pss.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa_utils.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/signing_method.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/token.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/LICENSE create mode 100644 vendor/github.com/gballet/go-libpcsclite/README.md create mode 100644 vendor/github.com/gballet/go-libpcsclite/doc.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/doc_bsd.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/doc_darwin.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/doc_linux.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/doc_windows.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/error.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/go.mod create mode 100644 vendor/github.com/gballet/go-libpcsclite/msg.go create mode 100644 vendor/github.com/gballet/go-libpcsclite/winscard.go delete mode 100644 vendor/github.com/gizak/termui/README.md delete mode 100644 vendor/github.com/gizak/termui/barchart.go delete mode 100644 vendor/github.com/gizak/termui/block.go delete mode 100644 vendor/github.com/gizak/termui/block_common.go delete mode 100644 vendor/github.com/gizak/termui/block_windows.go delete mode 100644 vendor/github.com/gizak/termui/buffer.go delete mode 100644 vendor/github.com/gizak/termui/canvas.go delete mode 100644 vendor/github.com/gizak/termui/config.py delete mode 100644 vendor/github.com/gizak/termui/doc.go delete mode 100644 vendor/github.com/gizak/termui/events.go delete mode 100644 vendor/github.com/gizak/termui/gauge.go delete mode 100644 vendor/github.com/gizak/termui/glide.lock delete mode 100644 vendor/github.com/gizak/termui/glide.yaml delete mode 100644 vendor/github.com/gizak/termui/grid.go delete mode 100644 vendor/github.com/gizak/termui/helper.go delete mode 100644 vendor/github.com/gizak/termui/linechart.go delete mode 100644 vendor/github.com/gizak/termui/linechart_others.go delete mode 100644 vendor/github.com/gizak/termui/linechart_windows.go delete mode 100644 vendor/github.com/gizak/termui/list.go delete mode 100644 vendor/github.com/gizak/termui/mbarchart.go delete mode 100644 vendor/github.com/gizak/termui/mkdocs.yml delete mode 100644 vendor/github.com/gizak/termui/par.go delete mode 100644 vendor/github.com/gizak/termui/pos.go delete mode 100644 vendor/github.com/gizak/termui/render.go delete mode 100644 vendor/github.com/gizak/termui/sparkline.go delete mode 100644 vendor/github.com/gizak/termui/table.go delete mode 100644 vendor/github.com/gizak/termui/textbuilder.go delete mode 100644 vendor/github.com/gizak/termui/theme.go delete mode 100644 vendor/github.com/gizak/termui/widget.go delete mode 100644 vendor/github.com/golang/protobuf/proto/Makefile create mode 100644 vendor/github.com/golang/protobuf/proto/deprecated.go create mode 100644 vendor/github.com/golang/protobuf/proto/discard.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_marshal.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_merge.go create mode 100644 vendor/github.com/golang/protobuf/proto/table_unmarshal.go delete mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto create mode 100644 vendor/github.com/gorilla/websocket/AUTHORS create mode 100644 vendor/github.com/gorilla/websocket/LICENSE create mode 100644 vendor/github.com/gorilla/websocket/README.md create mode 100644 vendor/github.com/gorilla/websocket/client.go create mode 100644 vendor/github.com/gorilla/websocket/client_clone.go create mode 100644 vendor/github.com/gorilla/websocket/client_clone_legacy.go create mode 100644 vendor/github.com/gorilla/websocket/compression.go create mode 100644 vendor/github.com/gorilla/websocket/conn.go create mode 100644 vendor/github.com/gorilla/websocket/conn_write.go create mode 100644 vendor/github.com/gorilla/websocket/conn_write_legacy.go create mode 100644 vendor/github.com/gorilla/websocket/doc.go create mode 100644 vendor/github.com/gorilla/websocket/go.mod create mode 100644 vendor/github.com/gorilla/websocket/go.sum create mode 100644 vendor/github.com/gorilla/websocket/join.go create mode 100644 vendor/github.com/gorilla/websocket/json.go create mode 100644 vendor/github.com/gorilla/websocket/mask.go create mode 100644 vendor/github.com/gorilla/websocket/mask_safe.go create mode 100644 vendor/github.com/gorilla/websocket/prepared.go create mode 100644 vendor/github.com/gorilla/websocket/proxy.go create mode 100644 vendor/github.com/gorilla/websocket/server.go create mode 100644 vendor/github.com/gorilla/websocket/trace.go create mode 100644 vendor/github.com/gorilla/websocket/trace_17.go create mode 100644 vendor/github.com/gorilla/websocket/util.go create mode 100644 vendor/github.com/gorilla/websocket/x_net_proxy.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/Gopkg.lock create mode 100644 vendor/github.com/graph-gophers/graphql-go/Gopkg.toml create mode 100644 vendor/github.com/graph-gophers/graphql-go/LICENSE create mode 100644 vendor/github.com/graph-gophers/graphql-go/README.md create mode 100644 vendor/github.com/graph-gophers/graphql-go/errors/errors.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/graphql.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/id.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/common/types.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/common/values.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/query/query.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/introspection.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/log/log.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/relay/relay.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/time.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/trace/trace.go create mode 100644 vendor/github.com/graph-gophers/graphql-go/trace/validation_trace.go create mode 100644 vendor/github.com/howeyc/fsnotify/AUTHORS create mode 100644 vendor/github.com/howeyc/fsnotify/CHANGELOG.md create mode 100644 vendor/github.com/howeyc/fsnotify/CONTRIBUTING.md create mode 100644 vendor/github.com/howeyc/fsnotify/LICENSE create mode 100644 vendor/github.com/howeyc/fsnotify/README.md create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify.go create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify_bsd.go create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify_linux.go create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify_open_bsd.go create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify_open_darwin.go create mode 100644 vendor/github.com/howeyc/fsnotify/fsnotify_windows.go delete mode 100644 vendor/github.com/influxdata/influxdb/client/v2/client.go delete mode 100644 vendor/github.com/influxdata/influxdb/client/v2/udp.go delete mode 100644 vendor/github.com/karalabe/hid/LICENSE.md delete mode 100644 vendor/github.com/karalabe/hid/README.md delete mode 100644 vendor/github.com/karalabe/hid/hid.go delete mode 100644 vendor/github.com/karalabe/hid/hid_disabled.go delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.c delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.h delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.c delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.h delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.c delete mode 100644 vendor/github.com/karalabe/hid/libusb/libusb/version_nano.h create mode 100644 vendor/github.com/karalabe/usb/AUTHORS create mode 100644 vendor/github.com/karalabe/usb/Dockerfile.alpine create mode 100644 vendor/github.com/karalabe/usb/Dockerfile.ubuntu create mode 100644 vendor/github.com/karalabe/usb/LICENSE create mode 100644 vendor/github.com/karalabe/usb/README.md rename vendor/github.com/karalabe/{hid => usb}/appveyor.yml (75%) create mode 100644 vendor/github.com/karalabe/usb/demo.go create mode 100644 vendor/github.com/karalabe/usb/go.mod create mode 100644 vendor/github.com/karalabe/usb/hid_disabled.go rename vendor/github.com/karalabe/{hid => usb}/hid_enabled.go (61%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/AUTHORS.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/LICENSE-bsd.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/LICENSE-gpl3.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/LICENSE-orig.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/LICENSE.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/README.txt (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/hidapi/hidapi.h (99%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/libusb/hid.c (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/mac/hid.c (100%) rename vendor/github.com/karalabe/{hid => usb}/hidapi/windows/hid.c (99%) mode change 100755 => 100644 create mode 100644 vendor/github.com/karalabe/usb/libs.go rename vendor/github.com/karalabe/{hid => usb}/libusb/AUTHORS (76%) rename vendor/github.com/karalabe/{hid => usb}/libusb/COPYING (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/config.h (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/core.c (91%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/descriptor.c (98%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/hotplug.c (76%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/hotplug.h (65%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/io.c (98%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/libusb.h (96%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/libusbi.h (94%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/darwin_usb.c (96%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/darwin_usb.h (60%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/haiku_pollfs.cpp (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/haiku_usb.h (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/haiku_usb_backend.cpp (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/haiku_usb_raw.cpp (98%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/haiku_usb_raw.h (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/linux_netlink.c (89%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/linux_udev.c (90%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/linux_usbfs.c (93%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/linux_usbfs.h (99%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/netbsd_usb.c (98%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/openbsd_usb.c (99%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/poll_posix.c (56%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/poll_posix.h (100%) create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.c rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/poll_windows.h (70%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/sunos_usb.c (71%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/sunos_usb.h (96%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/threads_posix.c (92%) create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.h create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.c rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/threads_windows.h (53%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/wince_usb.c (94%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/wince_usb.h (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/windows_common.h (82%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/windows_nt_common.c (52%) create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.h create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_shared_types.h rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/windows_usbdk.c (70%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/windows_usbdk.h (64%) create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.c rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/os/windows_winusb.h (54%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/strerror.c (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/sync.c (100%) rename vendor/github.com/karalabe/{hid => usb}/libusb/libusb/version.h (94%) create mode 100644 vendor/github.com/karalabe/usb/libusb/libusb/version_nano.h create mode 100644 vendor/github.com/karalabe/usb/raw_disabled.go create mode 100644 vendor/github.com/karalabe/usb/raw_enabled.go create mode 100644 vendor/github.com/karalabe/usb/raw_errors.go create mode 100644 vendor/github.com/karalabe/usb/usb.go create mode 100644 vendor/github.com/karalabe/usb/usb_disabled.go create mode 100644 vendor/github.com/karalabe/usb/usb_enabled.go rename vendor/github.com/karalabe/{hid => usb}/wchar.go (98%) delete mode 100644 vendor/github.com/maruel/panicparse/.travis.yml delete mode 100644 vendor/github.com/maruel/panicparse/LICENSE delete mode 100644 vendor/github.com/maruel/panicparse/README.md delete mode 100644 vendor/github.com/maruel/panicparse/stack/source.go delete mode 100644 vendor/github.com/maruel/panicparse/stack/stack.go delete mode 100644 vendor/github.com/maruel/panicparse/stack/ui.go delete mode 100644 vendor/github.com/maruel/panicparse/vendor.yml create mode 100644 vendor/github.com/mattn/go-colorable/colorable_appengine.go create mode 100644 vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go rename vendor/github.com/{codahale/hdrhistogram => mattn/go-ieproxy}/LICENSE (83%) create mode 100644 vendor/github.com/mattn/go-ieproxy/README.md create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy.go create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/pac_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/pac_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go create mode 100644 vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go create mode 100644 vendor/github.com/mattn/go-ieproxy/utils.go create mode 100644 vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/LICENSE.md delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/README.md delete mode 100644 vendor/github.com/mitchellh/go-wordwrap/wordwrap.go delete mode 100644 vendor/github.com/nsf/termbox-go/AUTHORS delete mode 100644 vendor/github.com/nsf/termbox-go/LICENSE delete mode 100644 vendor/github.com/nsf/termbox-go/README.md delete mode 100644 vendor/github.com/nsf/termbox-go/api.go delete mode 100644 vendor/github.com/nsf/termbox-go/api_common.go delete mode 100644 vendor/github.com/nsf/termbox-go/api_windows.go delete mode 100755 vendor/github.com/nsf/termbox-go/collect_terminfo.py delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_darwin.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_darwin_amd64.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_dragonfly.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_freebsd.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_linux.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_netbsd.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_openbsd.go delete mode 100644 vendor/github.com/nsf/termbox-go/syscalls_windows.go delete mode 100644 vendor/github.com/nsf/termbox-go/termbox.go delete mode 100644 vendor/github.com/nsf/termbox-go/termbox_common.go delete mode 100644 vendor/github.com/nsf/termbox-go/termbox_windows.go delete mode 100644 vendor/github.com/nsf/termbox-go/terminfo.go delete mode 100644 vendor/github.com/nsf/termbox-go/terminfo_builtin.go rename vendor/github.com/olekukonko/tablewriter/{LICENCE.md => LICENSE.md} (98%) create mode 100644 vendor/github.com/olekukonko/tablewriter/table_with_color.go delete mode 100644 vendor/github.com/olekukonko/tablewriter/test.csv delete mode 100644 vendor/github.com/olekukonko/tablewriter/test_info.csv create mode 100644 vendor/github.com/oschwald/maxminddb-golang/LICENSE create mode 100644 vendor/github.com/oschwald/maxminddb-golang/README.md create mode 100644 vendor/github.com/oschwald/maxminddb-golang/appveyor.yml create mode 100644 vendor/github.com/oschwald/maxminddb-golang/decoder.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/errors.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/reader.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/reader_other.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/traverse.go create mode 100644 vendor/github.com/oschwald/maxminddb-golang/verifier.go create mode 100644 vendor/github.com/peterh/liner/go.mod create mode 100644 vendor/github.com/peterh/liner/go.sum delete mode 100644 vendor/github.com/prometheus/prometheus/NOTICE rename vendor/github.com/prometheus/{prometheus => tsdb}/LICENSE (100%) create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/dir_unix.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/dir_windows.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/fileutil.go rename vendor/github.com/prometheus/{prometheus/util/flock => tsdb/fileutil}/flock.go (68%) rename vendor/github.com/prometheus/{prometheus/util/flock => tsdb/fileutil}/flock_plan9.go (98%) rename vendor/github.com/prometheus/{prometheus/util/flock => tsdb/fileutil}/flock_solaris.go (98%) rename vendor/github.com/prometheus/{prometheus/util/flock => tsdb/fileutil}/flock_unix.go (98%) rename vendor/github.com/prometheus/{prometheus/util/flock => tsdb/fileutil}/flock_windows.go (98%) create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/mmap.go rename vendor/github.com/{uber/jaeger-client-go/rpcmetrics/doc.go => prometheus/tsdb/fileutil/mmap_386.go} (78%) rename vendor/github.com/{uber/jaeger-client-go/reference.go => prometheus/tsdb/fileutil/mmap_amd64.go} (66%) rename vendor/github.com/{uber/jaeger-lib/metrics/counter.go => prometheus/tsdb/fileutil/mmap_unix.go} (61%) create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/mmap_windows.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/preallocate.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/preallocate_darwin.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/preallocate_linux.go rename vendor/github.com/{uber/jaeger-lib/metrics/gauge.go => prometheus/tsdb/fileutil/preallocate_other.go} (56%) rename vendor/github.com/{uber/jaeger-client-go/doc.go => prometheus/tsdb/fileutil/sync.go} (54%) create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/sync_darwin.go create mode 100644 vendor/github.com/prometheus/tsdb/fileutil/sync_linux.go create mode 100644 vendor/github.com/status-im/keycard-go/LICENSE.md create mode 100644 vendor/github.com/status-im/keycard-go/derivationpath/decoder.go create mode 100644 vendor/github.com/status-im/keycard-go/derivationpath/encoder.go create mode 100644 vendor/github.com/steakknife/bloomfilter/MIT-LICENSE.txt create mode 100644 vendor/github.com/steakknife/bloomfilter/README.md create mode 100644 vendor/github.com/steakknife/bloomfilter/binarymarshaler.go create mode 100644 vendor/github.com/steakknife/bloomfilter/binaryunmarshaler.go create mode 100644 vendor/github.com/steakknife/bloomfilter/bloomfilter.go create mode 100644 vendor/github.com/steakknife/bloomfilter/conformance.go create mode 100644 vendor/github.com/steakknife/bloomfilter/debug.go create mode 100644 vendor/github.com/steakknife/bloomfilter/errors.go create mode 100644 vendor/github.com/steakknife/bloomfilter/fileio.go create mode 100644 vendor/github.com/steakknife/bloomfilter/gob.go create mode 100644 vendor/github.com/steakknife/bloomfilter/iscompatible.go create mode 100644 vendor/github.com/steakknife/bloomfilter/new.go create mode 100644 vendor/github.com/steakknife/bloomfilter/optimal.go create mode 100644 vendor/github.com/steakknife/bloomfilter/statistics.go create mode 100644 vendor/github.com/steakknife/bloomfilter/textmarshaler.go create mode 100644 vendor/github.com/steakknife/bloomfilter/textunmarshaler.go create mode 100644 vendor/github.com/steakknife/hamming/MIT-LICENSE.txt create mode 100644 vendor/github.com/steakknife/hamming/README.md create mode 100644 vendor/github.com/steakknife/hamming/doc.go create mode 100644 vendor/github.com/steakknife/hamming/hamming.go create mode 100644 vendor/github.com/steakknife/hamming/popcnt_amd64.go create mode 100644 vendor/github.com/steakknife/hamming/popcnt_amd64.s create mode 100644 vendor/github.com/steakknife/hamming/popcount.go create mode 100644 vendor/github.com/steakknife/hamming/popcount_slices.go create mode 100644 vendor/github.com/steakknife/hamming/popcount_slices_amd64.go create mode 100644 vendor/github.com/steakknife/hamming/popcount_slices_amd64.s create mode 100644 vendor/github.com/steakknife/hamming/slices_of_hamming.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/Gopkg.lock create mode 100644 vendor/github.com/tyler-smith/go-bip39/Gopkg.toml rename vendor/github.com/{gizak/termui => tyler-smith/go-bip39}/LICENSE (95%) create mode 100644 vendor/github.com/tyler-smith/go-bip39/Makefile create mode 100644 vendor/github.com/tyler-smith/go-bip39/README.md create mode 100644 vendor/github.com/tyler-smith/go-bip39/bip39.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_simplified.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_traditional.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/english.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/french.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/italian.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/japanese.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/korean.go create mode 100644 vendor/github.com/tyler-smith/go-bip39/wordlists/spanish.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/CHANGELOG.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/CONTRIBUTING.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/DCO delete mode 100644 vendor/github.com/uber/jaeger-client-go/Gopkg.lock delete mode 100644 vendor/github.com/uber/jaeger-client-go/Gopkg.toml delete mode 100644 vendor/github.com/uber/jaeger-client-go/LICENSE delete mode 100644 vendor/github.com/uber/jaeger-client-go/Makefile delete mode 100644 vendor/github.com/uber/jaeger-client-go/README.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/RELEASE.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/baggage_setter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/config.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/config_env.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/config/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/context.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/contrib_observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/glide.lock delete mode 100644 vendor/github.com/uber/jaeger-client-go/glide.yaml delete mode 100644 vendor/github.com/uber/jaeger-client-go/header.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/restriction_manager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/baggage/restriction_manager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/spanlog/json.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/throttler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/internal/throttler/throttler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/interop.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/jaeger_tag.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/jaeger_thrift_span.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/log/logger.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/logger.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/process.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/propagation.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/reporter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/reporter_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/README.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/endpoints.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/normalizer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/rpcmetrics/observer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/sampler.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/sampler_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/span.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/agent.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/baggagerestrictionmanager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/agent.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/samplingmanager.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/constants.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/ttypes.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/zipkincollector.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/README.md delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/numeric.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/processor.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/serializer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/thrift/type.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/tracer.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/tracer_options.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/transport.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/transport_udp.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/http_json.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/localip.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/rand.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/rate_limiter.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/udp_client.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/utils/utils.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/zipkin.go delete mode 100644 vendor/github.com/uber/jaeger-client-go/zipkin_thrift_span.go delete mode 100644 vendor/github.com/uber/jaeger-lib/LICENSE delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/factory.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/local.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/metrics.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go delete mode 100644 vendor/github.com/uber/jaeger-lib/metrics/timer.go create mode 100644 vendor/github.com/wsddn/go-ecdh/LICENSE create mode 100644 vendor/github.com/wsddn/go-ecdh/Readme.md create mode 100644 vendor/github.com/wsddn/go-ecdh/curve25519.go create mode 100644 vendor/github.com/wsddn/go-ecdh/ecdh.go create mode 100644 vendor/github.com/wsddn/go-ecdh/elliptic.go delete mode 100644 vendor/golang.org/x/net/.gitattributes delete mode 100644 vendor/golang.org/x/net/.gitignore delete mode 100644 vendor/golang.org/x/net/AUTHORS delete mode 100644 vendor/golang.org/x/net/CONTRIBUTING.md delete mode 100644 vendor/golang.org/x/net/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/net/README delete mode 100644 vendor/golang.org/x/net/codereview.cfg create mode 100644 vendor/golang.org/x/net/context/go19.go create mode 100644 vendor/golang.org/x/net/context/pre_go19.go delete mode 100644 vendor/golang.org/x/net/html/atom/gen.go create mode 100644 vendor/golang.org/x/net/http/httpproxy/proxy.go rename vendor/golang.org/x/net/idna/{idna.go => idna10.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/idna9.0.0.go rename vendor/golang.org/x/net/idna/{tables.go => tables10.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/tables11.0.0.go create mode 100644 vendor/golang.org/x/net/idna/tables9.0.0.go create mode 100644 vendor/golang.org/x/sys/windows/registry/key.go create mode 100644 vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/value.go create mode 100644 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go delete mode 100644 vendor/golang.org/x/text/.gitattributes delete mode 100644 vendor/golang.org/x/text/.gitignore delete mode 100644 vendor/golang.org/x/text/AUTHORS delete mode 100644 vendor/golang.org/x/text/CONTRIBUTING.md delete mode 100644 vendor/golang.org/x/text/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/text/README delete mode 100644 vendor/golang.org/x/text/codereview.cfg delete mode 100644 vendor/golang.org/x/text/encoding/charmap/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/htmlindex/gen.go delete mode 100644 vendor/golang.org/x/text/encoding/internal/identifier/gen.go delete mode 100644 vendor/golang.org/x/text/encoding/japanese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/korean/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go delete mode 100644 vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go create mode 100644 vendor/golang.org/x/text/internal/language/common.go create mode 100644 vendor/golang.org/x/text/internal/language/compact.go create mode 100644 vendor/golang.org/x/text/internal/language/compact/compact.go create mode 100644 vendor/golang.org/x/text/internal/language/compact/language.go create mode 100644 vendor/golang.org/x/text/internal/language/compact/parents.go create mode 100644 vendor/golang.org/x/text/internal/language/compact/tables.go create mode 100644 vendor/golang.org/x/text/internal/language/compact/tags.go create mode 100644 vendor/golang.org/x/text/internal/language/compose.go create mode 100644 vendor/golang.org/x/text/internal/language/coverage.go create mode 100644 vendor/golang.org/x/text/internal/language/language.go rename vendor/golang.org/x/text/{ => internal}/language/lookup.go (80%) create mode 100644 vendor/golang.org/x/text/internal/language/match.go create mode 100644 vendor/golang.org/x/text/internal/language/parse.go create mode 100644 vendor/golang.org/x/text/internal/language/tables.go create mode 100644 vendor/golang.org/x/text/internal/language/tags.go delete mode 100644 vendor/golang.org/x/text/language/Makefile delete mode 100644 vendor/golang.org/x/text/language/common.go create mode 100644 vendor/golang.org/x/text/language/doc.go delete mode 100644 vendor/golang.org/x/text/language/gen_common.go delete mode 100644 vendor/golang.org/x/text/language/gen_index.go delete mode 100644 vendor/golang.org/x/text/language/index.go delete mode 100644 vendor/golang.org/x/text/language/maketables.go create mode 100644 vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go create mode 100644 vendor/golang.org/x/text/unicode/norm/maketables.go create mode 100644 vendor/golang.org/x/text/unicode/norm/triegen.go rename vendor/golang.org/x/{tools => time}/LICENSE (100%) rename vendor/golang.org/x/{tools => time}/PATENTS (100%) create mode 100644 vendor/golang.org/x/time/rate/rate.go delete mode 100644 vendor/golang.org/x/tools/.gitattributes delete mode 100644 vendor/golang.org/x/tools/.gitignore delete mode 100644 vendor/golang.org/x/tools/AUTHORS delete mode 100644 vendor/golang.org/x/tools/CONTRIBUTING.md delete mode 100644 vendor/golang.org/x/tools/CONTRIBUTORS delete mode 100644 vendor/golang.org/x/tools/README delete mode 100644 vendor/golang.org/x/tools/codereview.cfg delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/enclosing.go delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/imports.go delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/util.go delete mode 100644 whisper/whisperv5/api.go delete mode 100644 whisper/whisperv5/benchmarks_test.go delete mode 100644 whisper/whisperv5/config.go delete mode 100644 whisper/whisperv5/doc.go delete mode 100644 whisper/whisperv5/envelope.go delete mode 100644 whisper/whisperv5/filter.go delete mode 100644 whisper/whisperv5/filter_test.go delete mode 100644 whisper/whisperv5/gen_criteria_json.go delete mode 100644 whisper/whisperv5/gen_message_json.go delete mode 100644 whisper/whisperv5/gen_newmessage_json.go delete mode 100644 whisper/whisperv5/message.go delete mode 100644 whisper/whisperv5/message_test.go delete mode 100644 whisper/whisperv5/peer.go delete mode 100644 whisper/whisperv5/peer_test.go delete mode 100644 whisper/whisperv5/topic.go delete mode 100644 whisper/whisperv5/topic_test.go delete mode 100644 whisper/whisperv5/whisper.go delete mode 100644 whisper/whisperv5/whisper_test.go diff --git a/.dockerignore b/.dockerignore index d280741c6062..0c013d18b13f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,3 @@ -**/.git -.git -!.git/HEAD -!.git/refs/heads **/*_test.go build/_workspace diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c03fa06c72d9..6286617d054b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,12 +2,22 @@ # Each line is a file pattern followed by one or more owners. accounts/usbwallet @karalabe +accounts/scwallet @gballet accounts/abi @gballet +cmd/clef @holiman +cmd/puppeth @karalabe consensus @karalabe -core/ @karalabe @holiman -eth/ @karalabe -les/ @zsfelfoldi -light/ @zsfelfoldi -mobile/ @karalabe +core/ @karalabe @holiman @rjl493456442 +dashboard/ @kurkomisi +eth/ @karalabe @holiman @rjl493456442 +graphql/ @gballet +les/ @zsfelfoldi @rjl493456442 +light/ @zsfelfoldi @rjl493456442 +mobile/ @karalabe @ligi p2p/ @fjl @zsfelfoldi +rpc/ @fjl @holiman +p2p/simulations @zelig @nonsense @janos @justelad +p2p/protocols @zelig @nonsense @janos @justelad +p2p/testing @zelig @nonsense @janos @justelad +signer/ @holiman whisper/ @gballet @gluk256 diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 7d80659b0d2e..4e638166ff71 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,6 +1,6 @@ Hi there, -please note that this is an issue tracker reserved for bug reports and feature requests. +Please note that this is an issue tracker reserved for bug reports and feature requests. For general questions please use the gitter channel or the Ethereum stack exchange at https://ethereum.stackexchange.com. diff --git a/.gitignore b/.gitignore index b991148becff..80c5e94cff19 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ profile.cov /dashboard/assets/node_modules /dashboard/assets/stats.json /dashboard/assets/bundle.js +/dashboard/assets/bundle.js.map /dashboard/assets/package-lock.json **/yarn-error.log diff --git a/.travis.yml b/.travis.yml index a079d9eb8f3f..996ec4fdcb9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,48 @@ language: go go_import_path: github.com/ethereum/go-ethereum sudo: false -matrix: +jobs: include: - - os: linux - dist: trusty - sudo: required - go: 1.10.x + # This builder only tests code linters on latest version of Go + - stage: lint + os: linux + dist: xenial + go: 1.12.x + env: + - lint + git: + submodules: false # avoid cloning ethereum/tests script: - - sudo modprobe fuse - - sudo chmod 666 /dev/fuse - - sudo chown root:$USER /etc/fuse.conf - - go run build/ci.go install - - go run build/ci.go test -coverage $TEST_PACKAGES + - go run build/ci.go lint - # These are the latest Go versions. - - os: linux - dist: trusty - sudo: required + - stage: build + os: linux + dist: xenial go: 1.11.x script: - - sudo modprobe fuse - - sudo chmod 666 /dev/fuse - - sudo chown root:$USER /etc/fuse.conf - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES - - os: osx - go: 1.11.x + - stage: build + os: linux + dist: xenial + go: 1.12.x + script: + - go run build/ci.go install + - go run build/ci.go test -coverage $TEST_PACKAGES + + # These are the latest Go versions. + - stage: build + os: linux + dist: xenial + go: 1.13.x + script: + - go run build/ci.go install + - go run build/ci.go test -coverage $TEST_PACKAGES + + - stage: build + os: osx + go: 1.13.x script: - echo "Increase the maximum number of open file descriptors on macOS" - NOFILE=20480 @@ -41,22 +56,12 @@ matrix: - go run build/ci.go install - go run build/ci.go test -coverage $TEST_PACKAGES - # This builder only tests code linters on latest version of Go - - os: linux - dist: trusty - go: 1.11.x - env: - - lint - git: - submodules: false # avoid cloning ethereum/tests - script: - - go run build/ci.go lint - # This builder does the Ubuntu PPA upload - - if: type = push + - stage: build + if: type = push os: linux - dist: trusty - go: 1.11.x + dist: xenial + go: 1.13.x env: - ubuntu-ppa git: @@ -75,11 +80,12 @@ matrix: - go run build/ci.go debsrc -upload ethereum/ethereum -sftp-user geth-ci -signer "Go Ethereum Linux Builder " # This builder does the Linux Azure uploads - - if: type = push + - stage: build + if: type = push os: linux - dist: trusty + dist: xenial sudo: required - go: 1.11.x + go: 1.13.x env: - azure-linux git: @@ -109,12 +115,13 @@ matrix: - go run build/ci.go archive -arch arm64 -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds # This builder does the Linux Azure MIPS xgo uploads - - if: type = push + - stage: build + if: type = push os: linux - dist: trusty + dist: xenial services: - docker - go: 1.11.x + go: 1.13.x env: - azure-linux-mips git: @@ -137,9 +144,10 @@ matrix: - go run build/ci.go archive -arch mips64le -type tar -signer LINUX_SIGNING_KEY -upload gethstore/builds # This builder does the Android Maven and Azure uploads - - if: type = push + - stage: build + if: type = push os: linux - dist: trusty + dist: xenial addons: apt: packages: @@ -159,25 +167,25 @@ matrix: git: submodules: false # avoid cloning ethereum/tests before_install: - - curl https://storage.googleapis.com/golang/go1.11.5.linux-amd64.tar.gz | tar -xz + - curl https://dl.google.com/go/go1.13.linux-amd64.tar.gz | tar -xz - export PATH=`pwd`/go/bin:$PATH - export GOROOT=`pwd`/go - export GOPATH=$HOME/go script: # Build the Android archive and upload it to Maven Central and Azure - - curl https://dl.google.com/android/repository/android-ndk-r17b-linux-x86_64.zip -o android-ndk-r17b.zip - - unzip -q android-ndk-r17b.zip && rm android-ndk-r17b.zip - - mv android-ndk-r17b $HOME - - export ANDROID_NDK=$HOME/android-ndk-r17b + - curl https://dl.google.com/android/repository/android-ndk-r19b-linux-x86_64.zip -o android-ndk-r19b.zip + - unzip -q android-ndk-r19b.zip && rm android-ndk-r19b.zip + - mv android-ndk-r19b $ANDROID_HOME/ndk-bundle - mkdir -p $GOPATH/src/github.com/ethereum - - ln -s `pwd` $GOPATH/src/github.com/ethereum + - ln -s `pwd` $GOPATH/src/github.com/ethereum/go-ethereum - go run build/ci.go aar -signer ANDROID_SIGNING_KEY -deploy https://oss.sonatype.org -upload gethstore/builds # This builder does the OSX Azure, iOS CocoaPods and iOS Azure uploads - - if: type = push + - stage: build + if: type = push os: osx - go: 1.11.x + go: 1.13.x env: - azure-osx - azure-ios @@ -204,10 +212,11 @@ matrix: - go run build/ci.go xcode -signer IOS_SIGNING_KEY -deploy trunk -upload gethstore/builds # This builder does the Azure archive purges to avoid accumulating junk - - if: type = cron + - stage: build + if: type = cron os: linux - dist: trusty - go: 1.11.x + dist: xenial + go: 1.13.x env: - azure-purge git: diff --git a/AUTHORS b/AUTHORS index 609dc48c726b..526ea35c2f83 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,5 +1,11 @@ # This is the official list of go-ethereum authors for copyright purposes. +a e r t h +Abel Nieto +Abel Nieto +Adam Babik +Aditya +Adrià Cidre Afri Schoedon <5chdn@users.noreply.github.com> Agustin Armellini Fischer Airead @@ -10,165 +16,354 @@ Alex Leverington Alex Wu Alexandre Van de Sande Ali Hajimirza +am2rican5 +Andrea Franz +Andrey Petrov +Andrey Petrov +ANOTHEL +Antoine Rondelet Anton Evangelatov +Antonio Salazar Cardozo Arba Sasmoyo Armani Ferrante Armin Braun Aron Fischer +atsushi-ishibashi +ayeowch +b00ris +bailantaotao +baizhenxuan +Balint Gabor Bas van Kervel Benjamin Brent +benma Benoit Verkindt +bloonfield Bo Bo Ye Bob Glickstein +Brent Brian Schroeder +Bruno Škvorc +C. Brown +Caesar Chad Casey Detrio +CDsigma +changhong Chase Wright +Chen Quan +chenyufeng +Christian Muehlhaeuser Christoph Jentzsch +cong +Corey Lin <514971757@qq.com> +cpusoft +Crispin Flowerday +croath +cui <523516579@qq.com> +Dan Kinsley Daniel A. Nagy Daniel Sloof Darrel Herbst Dave Appleton +Dave McGregor +David Huie +Derek Gottfrid Diego Siqueira +Diep Pham +dipingxian2 <39109351+dipingxian2@users.noreply.github.com> +dm4 +Dmitrij Koniajev Dmitry Shulyak +Domino Valdano +Domino Valdano +Dragan Milic +dragonvslinux <35779158+dragononcrypto@users.noreply.github.com> Egon Elbre +Elad +Eli Elias Naur Elliot Shepherd +Emil +emile Enrique Fynn +Enrique Fynn +EOS Classic +Erichin Ernesto del Toro Ethan Buchman +ethersphere Eugene Valeyev Evangelos Pappas +Evgeny Evgeny Danilenko <6655321@bk.ru> +evgk Fabian Vogelsteller Fabio Barone Fabio Berger FaceHo Felix Lange +Ferenc Szabo +ferhat elmas Fiisio +Frank Szendzielarz <33515470+FrankSzendzielarz@users.noreply.github.com> Frank Wang +Franklin Furkan KAMACI +GagziW Gary Rong George Ornbo Gregg Dourgarian +Guilherme Salgado Guillaume Ballet Guillaume Nicolas +GuiltyMorishita +Gus Gustav Simonsson +Gísli Kristjánsson +Ha ĐANG +HackyMiner +hadv Hao Bryan Cheng +HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com> Henning Diedrich +holisticode +Hongbin Mao +Hsien-Tang Kao +Husam Ibrahim <39692071+HusamIbrahim@users.noreply.github.com> +hydai +Hyung-Kyu Hqueue Choi +Ian Macalinao +Ian Norden Isidoro Ghezzi +Iskander (Alex) Sharipov Ivan Daniluk +Ivo Georgiev Jae Kwon Jamie Pitts +Janos Guljas Janoš Guljaš Jason Carver +Javier Peletier +Javier Peletier +Javier Sagredo +Jay Jay Guo +Jaynti Kanani +Jeff Prestes Jeff R. Allen +Jeffery Robert Walsh Jeffrey Wilcke Jens Agerberg +Jeremy McNevin +Jeremy Schlatter +Jerzy Lasyk Jia Chenhui Jim McDonald +jkcomment Joel Burget +John C. Vernaleo +Johns Beharry +Jonas Jonathan Brown +JoranHonig +Jordan Krage Joseph Chow +jtakalai +JU HYEONG PARK Justin Clark-Casey Justin Drake +jwasinger +ken10100147 Kenji Siu +Kenso Trabing +Kenso Trabing +Kevin +kevin.xu +kiel barry +kimmylin <30611210+kimmylin@users.noreply.github.com> +Kitten King <53072918+kittenking@users.noreply.github.com> +knarfeh Kobi Gurkan Konrad Feldmeier +Kris Shinn Kurkó Mihály +Kushagra Sharma +Kwuaint <34888408+kwuaint@users.noreply.github.com> Kyuntae Ethan Kim +ledgerwatch Lefteris Karapetsas Leif Jurvetson Leo Shklovskii +LeoLiao Lewis Marshall +lhendre +Liang Ma +Liang Ma +Liang ZOU +libotony +ligi Lio李欧 +Lorenzo Manacorda Louis Holbrook Luca Zeug Magicking +manlio Maran Hidskes Marek Kotewicz +Marius van der Wijden Mark +Mark Rushakoff +mark.lin +Martin Alex Philip Dawson Martin Holst Swende +Martin Klepsch +Mats Julian Olsen +Matt K <1036969+mkrump@users.noreply.github.com> Matthew Di Ferrante +Matthew Halpern +Matthew Halpern Matthew Wampler-Doty +Max Sistemich Maximilian Meister Micah Zoltu Michael Ruminer Miguel Mota Miya Chen +Mohanson +mr_franklin +Mymskmkt <1847234666@qq.com> +Nalin Bhardwaj Nchinda Nchinda +necaremus +needkane <604476380@qq.com> +Nguyen Kien Trung +Nguyen Sy Thanh Son Nick Dodson Nick Johnson Nicolas Guillaume +Nilesh Trivedi +Nimrod Gutman +njupt-moon <1015041018@njupt.edu.cn> +nkbai +nobody Noman +Oleg Kovalov Oli Bye +Osuke +Paul Berg Paul Litvak Paulo L F Casaretto Paweł Bylica +Pedro Pombeiro +Peter Broadhurst Peter Pratscher Petr Mikusek +Philip Schlump +Pierre Neter +PilkyuJung +protolambda Péter Szilágyi -RJ Catalano +qd-ethan <31876119+qdgogogo@users.noreply.github.com> +Raghav Sood +Ralph Caraveo +Ralph Caraveo III Ramesh Nair +reinerRubin +rhaps107 Ricardo Catalinas Jiménez Ricardo Domingos Richard Hart +RJ Catalano Rob +Rob Mulholand Robert Zaremba +Roc Yu +Runchao Han Russ Cox +Ryan Schneider Rémy Roy S. Matthew English +salanfe +Samuel Marks +Sarlor +Sasuke1964 +Saulius Grigaitis +Sean +Sheldon <11510383@mail.sustc.edu.cn> +Sheldon <374662347@qq.com> Shintaro Kaneko +Shuai Qi +Shunsuke Watanabe +silence +Simon Jentzsch +slumber1122 +Smilenator Sorin Neacsu Stein Dekker +Steve Gattuso +Steve Ruckdashel Steve Waldman Steven Roose +stompesi +stormpang +sunxiaojun2014 +tamirms Taylor Gerring +TColl <38299499+TColl@users.noreply.github.com> +terasum Thomas Bocek +thomasmodeneis +thumb8432 Ti Zhou Tosh Camille +tsarpaul +tzapu +ult-bobonovski Valentin Wüstholz +Vedhavyas Singareddi Victor Farazdagi Victor Tran +Vie Viktor Trón Ville Sundell +vim88 Vincent G +Vincent Serpoul Vitalik Buterin +Vitaly Bogdanov Vitaly V Vivek Anand +Vlad +Vlad Bokov Vlad Gluhovsky +weimumu <934657014@qq.com> +Wenbiao Zheng +William Setzer +williambannas +Wuxiang +xiekeyang +xincaosu +yahtoo +YaoZengzeng +YH-Zhou Yohann Léon Yoichi Hirai Yondon Fu +YOSHIDA Masanori +yoza +Yusup Zach +zah Zahoor Mohamed +Zak Cole +zer0to0ne <36526113+zer0to0ne@users.noreply.github.com> +Zhenguo Niu Zoe Nolan Zsolt Felföldi -am2rican5 -ayeowch -b00ris -bailantaotao -baizhenxuan -bloonfield -changhong -evgk -ferhat elmas -holisticode -jtakalai -ken10100147 -ligi -mark.lin -necaremus -njupt-moon <1015041018@njupt.edu.cn> -nkbai -rhaps107 -slumber1122 -sunxiaojun2014 -terasum -tsarpaul -xiekeyang -yoza +Łukasz Kurowski ΞTHΞЯSPHΞЯΞ <{viktor.tron,nagydani,zsfelfoldi}@gmail.com> Максим Чусовлянов -Ralph Caraveo +大彬 +贺鹏飞 +유용환 <33824408+eric-yoo@users.noreply.github.com> diff --git a/Dockerfile b/Dockerfile index e87dd35d3215..114e7620581e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.13-alpine as builder -RUN apk add --no-cache make gcc musl-dev linux-headers +RUN apk add --no-cache make gcc musl-dev linux-headers git ADD . /go-ethereum RUN cd /go-ethereum && make geth @@ -12,5 +12,5 @@ FROM alpine:latest RUN apk add --no-cache ca-certificates COPY --from=builder /go-ethereum/build/bin/geth /usr/local/bin/ -EXPOSE 8545 8546 30303 30303/udp +EXPOSE 8545 8546 8547 30303 30303/udp ENTRYPOINT ["geth"] diff --git a/Dockerfile.alltools b/Dockerfile.alltools index e984a1b092bf..2f661ba01c6f 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -1,7 +1,7 @@ # Build Geth in a stock Go builder container -FROM golang:1.11-alpine as builder +FROM golang:1.13-alpine as builder -RUN apk add --no-cache make gcc musl-dev linux-headers +RUN apk add --no-cache make gcc musl-dev linux-headers git ADD . /go-ethereum RUN cd /go-ethereum && make all @@ -12,4 +12,4 @@ FROM alpine:latest RUN apk add --no-cache ca-certificates COPY --from=builder /go-ethereum/build/bin/* /usr/local/bin/ -EXPOSE 8545 8546 30303 30303/udp +EXPOSE 8545 8546 8547 30303 30303/udp diff --git a/Makefile b/Makefile index f405a112f408..26a1b9bc0185 100644 --- a/Makefile +++ b/Makefile @@ -2,14 +2,14 @@ # with Go source code. If you know what GOPATH is then you probably # don't need to bother with make. -.PHONY: geth android ios geth-cross swarm evm all test clean vendor +.PHONY: geth android ios geth-cross evm all test clean vendor .PHONY: geth-linux geth-linux-386 geth-linux-amd64 geth-linux-mips64 geth-linux-mips64le .PHONY: geth-linux-arm geth-linux-arm-5 geth-linux-arm-6 geth-linux-arm-7 geth-linux-arm64 .PHONY: geth-darwin geth-darwin-386 geth-darwin-amd64 .PHONY: geth-windows geth-windows-386 geth-windows-amd64 .PHONY: gmet-linux -GOBIN = $(shell pwd)/build/bin +GOBIN = ./build/bin GO ?= latest # USE_ROCKSDB @@ -65,11 +65,6 @@ geth: dbbench: $(ROCKSDB_ENV) build/env.sh go run build/ci.go install $(ROCKSDB_TAG) ./cmd/dbbench -swarm: - build/env.sh go run build/ci.go install ./cmd/swarm - @echo "Done building." - @echo "Run \"$(GOBIN)/swarm\" to launch swarm." - all: build/env.sh go run build/ci.go install @@ -111,9 +106,6 @@ devtools: @type "solc" 2> /dev/null || echo 'Please install solc' @type "protoc" 2> /dev/null || echo 'Please install protoc' -swarm-devtools: - env GOBIN= go install ./cmd/swarm/mimegen - # Cross Compilation Targets (xgo) geth-cross: geth-linux geth-darwin geth-windows geth-android geth-ios diff --git a/README.md b/README.md index d533fad8c0c9..3d698d452011 100644 --- a/README.md +++ b/README.md @@ -170,7 +170,7 @@ After getting enodes of mining nodes, run gmet as follows. ## Go Ethereum -Official golang implementation of the Ethereum protocol. +Official Golang implementation of the Ethereum protocol. [![API Reference]( https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667 @@ -179,303 +179,340 @@ https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/6874 [![Travis](https://travis-ci.org/ethereum/go-ethereum.svg?branch=master)](https://travis-ci.org/ethereum/go-ethereum) [![Discord](https://img.shields.io/badge/discord-join%20chat-blue.svg)](https://discord.gg/nthXNEv) -Automated builds are available for stable releases and the unstable master branch. -Binary archives are published at https://geth.ethereum.org/downloads/. +Automated builds are available for stable releases and the unstable master branch. Binary +archives are published at https://geth.ethereum.org/downloads/. ## Building the source -For prerequisites and detailed build instructions please read the -[Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) -on the wiki. +For prerequisites and detailed build instructions please read the [Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) on the wiki. -Building geth requires both a Go (version 1.9 or later) and a C compiler. -You can install them using your favourite package manager. -Once the dependencies are installed, run +Building `geth` requires both a Go (version 1.10 or later) and a C compiler. You can install +them using your favourite package manager. Once the dependencies are installed, run - make geth +```shell +make geth +``` or, to build the full suite of utilities: - make all +```shell +make all +``` ## Executables -The go-ethereum project comes with several wrappers/executables found in the `cmd` directory. +The go-ethereum project comes with several wrappers/executables found in the `cmd` +directory. -| Command | Description | -|:----------:|-------------| -| **`geth`** | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options) for command line options. | -| `abigen` | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. | -| `bootnode` | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks. | -| `evm` | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug`). | -| `gethrpctest` | Developer utility tool to support our [ethereum/rpc-test](https://github.com/ethereum/rpc-tests) test suite which validates baseline conformity to the [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) specs. Please see the [test suite's readme](https://github.com/ethereum/rpc-tests/blob/master/README.md) for details. | -| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | -| `swarm` | Swarm daemon and tools. This is the entrypoint for the Swarm network. `swarm --help` for command line options and subcommands. See [Swarm README](https://github.com/ethereum/go-ethereum/tree/master/swarm) for more information. | -| `puppeth` | a CLI wizard that aids in creating a new Ethereum network. | +| Command | Description | +| :-----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`geth`** | Our main Ethereum CLI client. It is the entry point into the Ethereum network (main-, test- or private net), capable of running as a full node (default), archive node (retaining all historical state) or a light node (retrieving data live). It can be used by other processes as a gateway into the Ethereum network via JSON RPC endpoints exposed on top of HTTP, WebSocket and/or IPC transports. `geth --help` and the [CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options) for command line options. | +| `abigen` | Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages. It operates on plain [Ethereum contract ABIs](https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI) with expanded functionality if the contract bytecode is also available. However, it also accepts Solidity source files, making development much more streamlined. Please see our [Native DApps](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) wiki page for details. | +| `bootnode` | Stripped down version of our Ethereum client implementation that only takes part in the network node discovery protocol, but does not run any of the higher level application protocols. It can be used as a lightweight bootstrap node to aid in finding peers in private networks. | +| `evm` | Developer utility version of the EVM (Ethereum Virtual Machine) that is capable of running bytecode snippets within a configurable environment and execution mode. Its purpose is to allow isolated, fine-grained debugging of EVM opcodes (e.g. `evm --code 60ff60ff --debug`). | +| `gethrpctest` | Developer utility tool to support our [ethereum/rpc-test](https://github.com/ethereum/rpc-tests) test suite which validates baseline conformity to the [Ethereum JSON RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC) specs. Please see the [test suite's readme](https://github.com/ethereum/rpc-tests/blob/master/README.md) for details. | +| `rlpdump` | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`). | +| `puppeth` | a CLI wizard that aids in creating a new Ethereum network. | -## Running geth +## Running `geth` Going through all the possible command line flags is out of scope here (please consult our -[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)), but we've -enumerated a few common parameter combos to get you up to speed quickly on how you can run your -own Geth instance. +[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)), +but we've enumerated a few common parameter combos to get you up to speed quickly +on how you can run your own `geth` instance. ### Full node on the main Ethereum network -By far the most common scenario is people wanting to simply interact with the Ethereum network: -create accounts; transfer funds; deploy and interact with contracts. For this particular use-case -the user doesn't care about years-old historical data, so we can fast-sync quickly to the current -state of the network. To do so: +By far the most common scenario is people wanting to simply interact with the Ethereum +network: create accounts; transfer funds; deploy and interact with contracts. For this +particular use-case the user doesn't care about years-old historical data, so we can +fast-sync quickly to the current state of the network. To do so: -``` +```shell $ geth console ``` This command will: - - * Start geth in fast sync mode (default, can be changed with the `--syncmode` flag), causing it to - download more data in exchange for avoiding processing the entire history of the Ethereum network, - which is very CPU intensive. - * Start up Geth's built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console), + * Start `geth` in fast sync mode (default, can be changed with the `--syncmode` flag), + causing it to download more data in exchange for avoiding processing the entire history + of the Ethereum network, which is very CPU intensive. + * Start up `geth`'s built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console), (via the trailing `console` subcommand) through which you can invoke all official [`web3` methods](https://github.com/ethereum/wiki/wiki/JavaScript-API) - as well as Geth's own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs). - This tool is optional and if you leave it out you can always attach to an already running Geth instance - with `geth attach`. + as well as `geth`'s own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs). + This tool is optional and if you leave it out you can always attach to an already running + `geth` instance with `geth attach`. -### Full node on the Ethereum test network +### A Full node on the Ethereum test network -Transitioning towards developers, if you'd like to play around with creating Ethereum contracts, you -almost certainly would like to do that without any real money involved until you get the hang of the -entire system. In other words, instead of attaching to the main network, you want to join the **test** -network with your node, which is fully equivalent to the main network, but with play-Ether only. +Transitioning towards developers, if you'd like to play around with creating Ethereum +contracts, you almost certainly would like to do that without any real money involved until +you get the hang of the entire system. In other words, instead of attaching to the main +network, you want to join the **test** network with your node, which is fully equivalent to +the main network, but with play-Ether only. -``` +```shell $ geth --testnet console ``` -The `console` subcommand have the exact same meaning as above and they are equally useful on the -testnet too. Please see above for their explanations if you've skipped to here. +The `console` subcommand has the exact same meaning as above and they are equally +useful on the testnet too. Please see above for their explanations if you've skipped here. + +Specifying the `--testnet` flag, however, will reconfigure your `geth` instance a bit: -Specifying the `--testnet` flag however will reconfigure your Geth instance a bit: + * Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth` + will nest itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on + Linux). Note, on OSX and Linux this also means that attaching to a running testnet node + requires the use of a custom endpoint since `geth attach` will try to attach to a + production node endpoint by default. E.g. + `geth attach /testnet/geth.ipc`. Windows users are not affected by + this. + * Instead of connecting the main Ethereum network, the client will connect to the test + network, which uses different P2P bootnodes, different network IDs and genesis states. - * Instead of using the default data directory (`~/.ethereum` on Linux for example), Geth will nest - itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on Linux). Note, on OSX - and Linux this also means that attaching to a running testnet node requires the use of a custom - endpoint since `geth attach` will try to attach to a production node endpoint by default. E.g. - `geth attach /testnet/geth.ipc`. Windows users are not affected by this. - * Instead of connecting the main Ethereum network, the client will connect to the test network, - which uses different P2P bootnodes, different network IDs and genesis states. - -*Note: Although there are some internal protective measures to prevent transactions from crossing -over between the main network and test network, you should make sure to always use separate accounts -for play-money and real-money. Unless you manually move accounts, Geth will by default correctly -separate the two networks and will not make any accounts available between them.* +*Note: Although there are some internal protective measures to prevent transactions from +crossing over between the main network and test network, you should make sure to always +use separate accounts for play-money and real-money. Unless you manually move +accounts, `geth` will by default correctly separate the two networks and will not make any +accounts available between them.* ### Full node on the Rinkeby test network -The above test network is a cross client one based on the ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty / security. Go Ethereum also supports connecting to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) (operated by members of the community). This network is lighter, more secure, but is only supported by go-ethereum. +The above test network is a cross-client one based on the ethash proof-of-work consensus +algorithm. As such, it has certain extra overhead and is more susceptible to reorganization +attacks due to the network's low difficulty/security. Go Ethereum also supports connecting +to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) +(operated by members of the community). This network is lighter, more secure, but is only +supported by go-ethereum. -``` +```shell $ geth --rinkeby console ``` ### Configuration -As an alternative to passing the numerous flags to the `geth` binary, you can also pass a configuration file via: +As an alternative to passing the numerous flags to the `geth` binary, you can also pass a +configuration file via: -``` +```shell $ geth --config /path/to/your_config.toml ``` -To get an idea how the file should look like you can use the `dumpconfig` subcommand to export your existing configuration: +To get an idea how the file should look like you can use the `dumpconfig` subcommand to +export your existing configuration: -``` +```shell $ geth --your-favourite-flags dumpconfig ``` -*Note: This works only with geth v1.6.0 and above.* +*Note: This works only with `geth` v1.6.0 and above.* #### Docker quick start -One of the quickest ways to get Ethereum up and running on your machine is by using Docker: +One of the quickest ways to get Ethereum up and running on your machine is by using +Docker: -``` +```shell docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \ -p 8545:8545 -p 30303:30303 \ ethereum/client-go ``` -This will start geth in fast-sync mode with a DB memory allowance of 1GB just as the above command does. It will also create a persistent volume in your home directory for saving your blockchain as well as map the default ports. There is also an `alpine` tag available for a slim version of the image. +This will start `geth` in fast-sync mode with a DB memory allowance of 1GB just as the +above command does. It will also create a persistent volume in your home directory for +saving your blockchain as well as map the default ports. There is also an `alpine` tag +available for a slim version of the image. -Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not accessible from the outside. +Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers +and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not +accessible from the outside. -### Programatically interfacing Geth nodes +### Programmatically interfacing `geth` nodes -As a developer, sooner rather than later you'll want to start interacting with Geth and the Ethereum -network via your own programs and not manually through the console. To aid this, Geth has built-in -support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC) and -[Geth specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)). These can be -exposed via HTTP, WebSockets and IPC (unix sockets on unix based platforms, and named pipes on Windows). +As a developer, sooner rather than later you'll want to start interacting with `geth` and the +Ethereum network via your own programs and not manually through the console. To aid +this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC) +and [`geth` specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)). +These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based +platforms, and named pipes on Windows). -The IPC interface is enabled by default and exposes all the APIs supported by Geth, whereas the HTTP -and WS interfaces need to manually be enabled and only expose a subset of APIs due to security reasons. -These can be turned on/off and configured as you'd expect. +The IPC interface is enabled by default and exposes all the APIs supported by `geth`, +whereas the HTTP and WS interfaces need to manually be enabled and only expose a +subset of APIs due to security reasons. These can be turned on/off and configured as +you'd expect. HTTP based JSON-RPC API options: * `--rpc` Enable the HTTP-RPC server - * `--rpcaddr` HTTP-RPC server listening interface (default: "localhost") - * `--rpcport` HTTP-RPC server listening port (default: 8545) - * `--rpcapi` API's offered over the HTTP-RPC interface (default: "eth,net,web3") + * `--rpcaddr` HTTP-RPC server listening interface (default: `localhost`) + * `--rpcport` HTTP-RPC server listening port (default: `8545`) + * `--rpcapi` API's offered over the HTTP-RPC interface (default: `eth,net,web3`) * `--rpccorsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced) * `--ws` Enable the WS-RPC server - * `--wsaddr` WS-RPC server listening interface (default: "localhost") - * `--wsport` WS-RPC server listening port (default: 8546) - * `--wsapi` API's offered over the WS-RPC interface (default: "eth,net,web3") + * `--wsaddr` WS-RPC server listening interface (default: `localhost`) + * `--wsport` WS-RPC server listening port (default: `8546`) + * `--wsapi` API's offered over the WS-RPC interface (default: `eth,net,web3`) * `--wsorigins` Origins from which to accept websockets requests * `--ipcdisable` Disable the IPC-RPC server - * `--ipcapi` API's offered over the IPC-RPC interface (default: "admin,debug,eth,miner,net,personal,shh,txpool,web3") + * `--ipcapi` API's offered over the IPC-RPC interface (default: `admin,debug,eth,miner,net,personal,shh,txpool,web3`) * `--ipcpath` Filename for IPC socket/pipe within the datadir (explicit paths escape it) -You'll need to use your own programming environments' capabilities (libraries, tools, etc) to connect -via HTTP, WS or IPC to a Geth node configured with the above flags and you'll need to speak [JSON-RPC](https://www.jsonrpc.org/specification) -on all transports. You can reuse the same connection for multiple requests! +You'll need to use your own programming environments' capabilities (libraries, tools, etc) to +connect via HTTP, WS or IPC to a `geth` node configured with the above flags and you'll +need to speak [JSON-RPC](https://www.jsonrpc.org/specification) on all transports. You +can reuse the same connection for multiple requests! -**Note: Please understand the security implications of opening up an HTTP/WS based transport before -doing so! Hackers on the internet are actively trying to subvert Ethereum nodes with exposed APIs! -Further, all browser tabs can access locally running webservers, so malicious webpages could try to -subvert locally available APIs!** +**Note: Please understand the security implications of opening up an HTTP/WS based +transport before doing so! Hackers on the internet are actively trying to subvert +Ethereum nodes with exposed APIs! Further, all browser tabs can access locally +running web servers, so malicious web pages could try to subvert locally available +APIs!** ### Operating a private network -Maintaining your own private network is more involved as a lot of configurations taken for granted in -the official networks need to be manually set up. +Maintaining your own private network is more involved as a lot of configurations taken for +granted in the official networks need to be manually set up. #### Defining the private genesis state -First, you'll need to create the genesis state of your networks, which all nodes need to be aware of -and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`): +First, you'll need to create the genesis state of your networks, which all nodes need to be +aware of and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`): ```json { "config": { - "chainId": 0, - "homesteadBlock": 0, - "eip155Block": 0, - "eip158Block": 0 - }, - "alloc" : {}, - "coinbase" : "0x0000000000000000000000000000000000000000", - "difficulty" : "0x20000", - "extraData" : "", - "gasLimit" : "0x2fefd8", - "nonce" : "0x0000000000000042", - "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", - "timestamp" : "0x00" + "chainId": , + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0 + }, + "alloc": {}, + "coinbase": "0x0000000000000000000000000000000000000000", + "difficulty": "0x20000", + "extraData": "", + "gasLimit": "0x2fefd8", + "nonce": "0x0000000000000042", + "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "timestamp": "0x00" } ``` -The above fields should be fine for most purposes, although we'd recommend changing the `nonce` to -some random value so you prevent unknown remote nodes from being able to connect to you. If you'd -like to pre-fund some accounts for easier testing, you can populate the `alloc` field with account -configs: +The above fields should be fine for most purposes, although we'd recommend changing +the `nonce` to some random value so you prevent unknown remote nodes from being able +to connect to you. If you'd like to pre-fund some accounts for easier testing, create +the accounts and populate the `alloc` field with their addresses. ```json "alloc": { - "0x0000000000000000000000000000000000000001": {"balance": "111111111"}, - "0x0000000000000000000000000000000000000002": {"balance": "222222222"} + "0x0000000000000000000000000000000000000001": { + "balance": "111111111" + }, + "0x0000000000000000000000000000000000000002": { + "balance": "222222222" + } } ``` -With the genesis state defined in the above JSON file, you'll need to initialize **every** Geth node -with it prior to starting it up to ensure all blockchain parameters are correctly set: +With the genesis state defined in the above JSON file, you'll need to initialize **every** +`geth` node with it prior to starting it up to ensure all blockchain parameters are correctly +set: -``` +```shell $ geth init path/to/genesis.json ``` #### Creating the rendezvous point -With all nodes that you want to run initialized to the desired genesis state, you'll need to start a -bootstrap node that others can use to find each other in your network and/or over the internet. The -clean way is to configure and run a dedicated bootnode: +With all nodes that you want to run initialized to the desired genesis state, you'll need to +start a bootstrap node that others can use to find each other in your network and/or over +the internet. The clean way is to configure and run a dedicated bootnode: -``` +```shell $ bootnode --genkey=boot.key $ bootnode --nodekey=boot.key ``` With the bootnode online, it will display an [`enode` URL](https://github.com/ethereum/wiki/wiki/enode-url-format) -that other nodes can use to connect to it and exchange peer information. Make sure to replace the -displayed IP address information (most probably `[::]`) with your externally accessible IP to get the -actual `enode` URL. +that other nodes can use to connect to it and exchange peer information. Make sure to +replace the displayed IP address information (most probably `[::]`) with your externally +accessible IP to get the actual `enode` URL. -*Note: You could also use a full fledged Geth node as a bootnode, but it's the less recommended way.* +*Note: You could also use a full-fledged `geth` node as a bootnode, but it's the less +recommended way.* #### Starting up your member nodes -With the bootnode operational and externally reachable (you can try `telnet ` to ensure -it's indeed reachable), start every subsequent Geth node pointed to the bootnode for peer discovery -via the `--bootnodes` flag. It will probably also be desirable to keep the data directory of your -private network separated, so do also specify a custom `--datadir` flag. +With the bootnode operational and externally reachable (you can try +`telnet ` to ensure it's indeed reachable), start every subsequent `geth` +node pointed to the bootnode for peer discovery via the `--bootnodes` flag. It will +probably also be desirable to keep the data directory of your private network separated, so +do also specify a custom `--datadir` flag. -``` +```shell $ geth --datadir=path/to/custom/data/folder --bootnodes= ``` -*Note: Since your network will be completely cut off from the main and test networks, you'll also -need to configure a miner to process transactions and create new blocks for you.* +*Note: Since your network will be completely cut off from the main and test networks, you'll +also need to configure a miner to process transactions and create new blocks for you.* #### Running a private miner -Mining on the public Ethereum network is a complex task as it's only feasible using GPUs, requiring -an OpenCL or CUDA enabled `ethminer` instance. For information on such a setup, please consult the -[EtherMining subreddit](https://www.reddit.com/r/EtherMining/) and the [Genoil miner](https://github.com/Genoil/cpp-ethereum) -repository. +Mining on the public Ethereum network is a complex task as it's only feasible using GPUs, +requiring an OpenCL or CUDA enabled `ethminer` instance. For information on such a +setup, please consult the [EtherMining subreddit](https://www.reddit.com/r/EtherMining/) +and the [Genoil miner](https://github.com/Genoil/cpp-ethereum) repository. -In a private network setting however, a single CPU miner instance is more than enough for practical -purposes as it can produce a stable stream of blocks at the correct intervals without needing heavy -resources (consider running on a single thread, no need for multiple ones either). To start a Geth -instance for mining, run it with all your usual flags, extended by: +In a private network setting, however a single CPU miner instance is more than enough for +practical purposes as it can produce a stable stream of blocks at the correct intervals +without needing heavy resources (consider running on a single thread, no need for multiple +ones either). To start a `geth` instance for mining, run it with all your usual flags, extended +by: -``` +```shell $ geth --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000 ``` -Which will start mining blocks and transactions on a single CPU thread, crediting all proceedings to -the account specified by `--etherbase`. You can further tune the mining by changing the default gas -limit blocks converge to (`--targetgaslimit`) and the price transactions are accepted at (`--gasprice`). +Which will start mining blocks and transactions on a single CPU thread, crediting all +proceedings to the account specified by `--etherbase`. You can further tune the mining +by changing the default gas limit blocks converge to (`--targetgaslimit`) and the price +transactions are accepted at (`--gasprice`). ## Contribution -Thank you for considering to help out with the source code! We welcome contributions from -anyone on the internet, and are grateful for even the smallest of fixes! +Thank you for considering to help out with the source code! We welcome contributions +from anyone on the internet, and are grateful for even the smallest of fixes! If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request -for the maintainers to review and merge into the main code base. If you wish to submit more -complex changes though, please check up with the core devs first on [our gitter channel](https://gitter.im/ethereum/go-ethereum) -to ensure those changes are in line with the general philosophy of the project and/or get some -early feedback which can make both your efforts much lighter as well as our review and merge -procedures quick and simple. +for the maintainers to review and merge into the main code base. If you wish to submit +more complex changes though, please check up with the core devs first on [our gitter channel](https://gitter.im/ethereum/go-ethereum) +to ensure those changes are in line with the general philosophy of the project and/or get +some early feedback which can make both your efforts much lighter as well as our review +and merge procedures quick and simple. Please make sure your contributions adhere to our coding guidelines: - * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). - * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) guidelines. + * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) + guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). + * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) + guidelines. * Pull requests need to be based on and opened against the `master` branch. * Commit messages should be prefixed with the package(s) they modify. * E.g. "eth, rpc: make trace configs optional" Please see the [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide) -for more details on configuring your environment, managing project dependencies and testing procedures. +for more details on configuring your environment, managing project dependencies, and +testing procedures. ## License The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the -[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), also -included in our repository in the `COPYING.LESSER` file. +[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), +also included in our repository in the `COPYING.LESSER` file. The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the -[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also included -in our repository in the `COPYING` file. +[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also +included in our repository in the `COPYING` file. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000000..bc54ede42fac --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,120 @@ +# Security Policy + +## Supported Versions + +Please see Releases. We recommend to use the most recent released version. + +## Audit reports + +Audit reports are published in the `docs` folder: https://github.com/ethereum/go-ethereum/tree/master/docs/audits + + +| Scope | Date | Report Link | +| ------- | ------- | ----------- | +| `geth` | 20170425 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2017-04-25_Geth-audit_Truesec.pdf) | +| `clef` | 20180914 | [pdf](https://github.com/ethereum/go-ethereum/blob/master/docs/audits/2018-09-14_Clef-audit_NCC.pdf) | + + + +## Reporting a Vulnerability + +**Please do not file a public ticket** mentioning the vulnerability. + +To find out how to disclose a vulnerability in Ethereum visit [https://bounty.ethereum.org](https://bounty.ethereum.org) or email bounty@ethereum.org. + +The following key may be used to communicate sensitive information to developers. + +Fingerprint: `AE96 ED96 9E47 9B00 84F3 E17F E88D 3334 FA5F 6A0A` + + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQINBFgl3tgBEAC8A1tUBkD9YV+eLrOmtgy+/JS/H9RoZvkg3K1WZ8IYfj6iIRaY +neAk3Bp182GUPVz/zhKr2g0tMXIScDR3EnaDsY+Qg+JqQl8NOG+Cikr1nnkG2on9 +L8c8yiqry1ZTCmYMqCa2acTFqnyuXJ482aZNtB4QG2BpzfhW4k8YThpegk/EoRUi +m+y7buJDtoNf7YILlhDQXN8qlHB02DWOVUihph9tUIFsPK6BvTr9SIr/eG6j6k0b +fUo9pexOn7LS4SojoJmsm/5dp6AoKlac48cZU5zwR9AYcq/nvkrfmf2WkObg/xRd +EvKZzn05jRopmAIwmoC3CiLmqCHPmT5a29vEob/yPFE335k+ujjZCPOu7OwjzDk7 +M0zMSfnNfDq8bXh16nn+ueBxJ0NzgD1oC6c2PhM+XRQCXChoyI8vbfp4dGvCvYqv +QAE1bWjqnumZ/7vUPgZN6gDfiAzG2mUxC2SeFBhacgzDvtQls+uuvm+FnQOUgg2H +h8x2zgoZ7kqV29wjaUPFREuew7e+Th5BxielnzOfVycVXeSuvvIn6cd3g/s8mX1c +2kLSXJR7+KdWDrIrR5Az0kwAqFZt6B6QTlDrPswu3mxsm5TzMbny0PsbL/HBM+GZ +EZCjMXxB8bqV2eSaktjnSlUNX1VXxyOxXA+ZG2jwpr51egi57riVRXokrQARAQAB +tDlFdGhlcmV1bSBGb3VuZGF0aW9uIFNlY3VyaXR5IFRlYW0gPHNlY3VyaXR5QGV0 +aGVyZXVtLm9yZz6JAj4EEwECACgCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheA +BQJaCWH6BQkFo2BYAAoJEOiNMzT6X2oK+DEP/3H6dxkm0hvHZKoHLVuuxcu3EHYo +k5sd3MMWPrZSN8qzZnY7ayEDMxnarWOizc+2jfOxfJlzX/g8lR1/fsHdWPFPhPoV +Qk8ygrHn1H8U8+rpw/U03BqmqHpYCDzJ+CIis9UWROniqXw1nuqu/FtWOsdWxNKh +jUo6k/0EsaXsxRPzgJv7fEUcVcQ7as/C3x9sy3muc2gvgA4/BKoGPb1/U0GuA8lV +fDIDshAggmnSUAg+TuYSAAdoFQ1sKwFMPigcLJF2eyKuK3iUyixJrec/c4LSf3wA +cGghbeuqI8INP0Y2zvXDQN2cByxsFAuoZG+m0cyKGaDH2MVUvOKKYqn/03qvrf15 +AWAsW0l0yQwOTCo3FbsNzemClm5Bj/xH0E4XuwXwChcMCMOWJrFoxyvCEI+keoQc +c08/a8/MtS7vBAABXwOziSmm6CNqmzpWrh/fDrjlJlba9U3MxzvqU3IFlTdMratv +6V+SgX+L25lCzW4NxxUavoB8fAlvo8lxpHKo24FP+RcLQ8XqkU3RiUsgRjQRFOqQ +TaJcsp8mimmiYyf24mNu6b48pi+a5c/eQR9w59emeEUZqsJU+nqv8BWIIp7o4Agh +NYnKjkhPlY5e1fLVfAHIADZFynWwRPkPMJSrBiP5EtcOFxQGHGjRxU/KjXkvE0hV +xYb1PB8pWMTu/beeiQI+BBMBAgAoBQJYJd7YAhsDBQkB4TOABgsJCAcDAgYVCAIJ +CgsEFgIDAQIeAQIXgAAKCRDojTM0+l9qCplDD/9IZ2i+m1cnqQKtiyHbyFGx32oL +fzqPylX2bOG5DPsSTorSUdJMGVfT04oVxXc4S/2DVnNvi7RAbSiLapCWSplgtBOj +j1xlblOoXxT3m7s1XHGCX5tENxI9fVSSPVKJn+fQaWpPB2MhBA+1lUI6GJ+11T7K +J8LrP/fiw1/nOb7rW61HW44Gtyox23sA/d1+DsFVaF8hxJlNj5coPKr8xWzQ8pQl +juzdjHDukjevuw4rRmRq9vozvj9keEU9XJ5dldyEVXFmdDk7KT0p0Rla9nxYhzf/ +r/Bv8Bzy0HCWRb2D31BjXXGG05oVnYmNGxGFxYja4MwgrMmne3ilEVjfUJsapsqi +w41BAyQgIdfREulYN7ahsF5PrjVAqBd9IGtE8ULelF2SQxEBQBngEkP0ahP6tRAL +i7/CBjPKOyKijtqVny7qrGOnU2ygcA88/WDibexDhrjz0Gx8WmErU7rIWZiZ5u4Y +vJYVRo0+6rBCXRPeSJfiP5h1p17Anr2l42boAYslfcrzquB8MHtrNcyn650OLtHG +nbxgIdniKrpuzGN6Opw+O2id2JhD1/1p4SOemwAmthplr1MIyOHNP3q93rEj2J7h +5zPS/AJuKkMDFUpslPNLQjCOwPXtdzL7/kUZGBSyez1T3TaW1uY6l9XaJJRaSn+v +1zPgfp4GJ3lPs4AlAbQ0RXRoZXJldW0gRm91bmRhdGlvbiBCdWcgQm91bnR5IDxi +b3VudHlAZXRoZXJldW0ub3JnPokCPgQTAQIAKAIbAwYLCQgHAwIGFQgCCQoLBBYC +AwECHgECF4AFAloJYfoFCQWjYFgACgkQ6I0zNPpfagoENg/+LnSaVeMxiGVtcjWl +b7Xd73yrEy4uxiESS1AalW9mMf7oZzfI05f7QIQlaLAkNac74vZDJbPKjtb7tpMO +RFhRZMCveq6CPKU6pd1SI8IUVUKwpEe6AJP3lHdVP57dquieFE2HlYKm6uHbCGWU +0cjyTA+uu2KbgCHGmofsPY/xOcZLGEHTHqa5w60JJAQm+BSDKnw8wTyrxGvA3EK/ +ePSvOZMYa+iw6vYuZeBIMbdiXR/A2keBi3GuvqB8tDMj7P22TrH5mVDm3zNqGYD6 +amDPeiWp4cztY3aZyLcgYotqXPpDceZzDn+HopBPzAb/llCdE7bVswKRhphVMw4b +bhL0R/TQY7Sf6TK2LKSBrjv0DWOSijikE71SJcBnJvHU7EpKrQQ0lMGclm3ynyji +Nf0YTPXQt4I+fwTmOew2GFeK3UytNWbWI7oXX7Nm4bj9bhf3IJ0kmZb/Gs73+xII +e7Rz52Mby436tWyQIQiF9ITYNGvNf53TwBBZMn0pKPiTyr3Ur7FHEotkEOFNh1// +4zQY10XxuBdLrYGyZ4V8xHJM+oKre8Eg2R9qHXVbjvErHE+7CvgnV7YUip0criPr +BlKRvuoJaSliH2JFhSjWVrkPmFGrWN0BAx10yIqMnEplfKeHf4P9Elek3oInS8WP +G1zJG6s/t5+hQK0X37+TB+6rd3GJAj4EEwECACgFAlgl4TsCGwMFCQHhM4AGCwkI +BwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOiNMzT6X2oKzf8P/iIKd77WHTbp4pMN +8h52HyZJtDJmjA1DPZrbGl1TesW/Z9uTd12txlgqZnbG2GfN9+LSP6EOPzR6v2xC +OVhR+RdWhZDJJuQCVS7lJIqQrZgmeTZG0TyQPZdLjVFBOrrhVwYX+HXbu429IzHr +URf5InyR1QgqOXyElDYS6e28HFqvaoA0DWTWDDqOLPVl+U5fuceIE2XXdv3AGLeP +Yf8J5MPobjPiZtBqI6S6iENY2Yn35qLX+axeC/iYSCHVtFuCCIdb/QYR1ZZV8Ps/ +aI9DwC7LU+YfPw7iqCIoqxSeA3o1PORkdSigEg3jtfRv5UqVo9a0oBb9jdoADsat +F/gW0E7mto3XGOiaR0eB9SSdsM3x7Bz4A0HIGNaxpZo1RWqlO91leP4c13Px7ISv +5OGXfLg+M8qb+qxbGd1HpitGi9s1y1aVfEj1kOtZ0tN8eu+Upg5WKwPNBDX3ar7J +9NCULgVSL+E79FG+zXw62gxiQrLfKzm4wU/9L5wVkwQnm29hLJ0tokrSBZFnc/1l +7OC+GM63tYicKkY4rqmoWUeYx7IwFH9mtDtvR1RxO85RbQhZizwpZpdpRkH0DqZu +ZJRmRa5r7rPqmfa7d+VIFhz2Xs8pJMLVqxTsLKcLglmjw7aOrYG0SWeH7YraXWGD +N3SlvSBiVwcK7QUKzLLvpadLwxfsuQINBFgl3tgBEACbgq6HTN5gEBi0lkD/MafI +nmNi+59U5gRGYqk46WlfRjhHudXjDpgD0lolGb4hYontkMaKRlCg2Rvgjvk3Zve0 +PKWjKw7gr8YBa9fMFY8BhAXI32OdyI9rFhxEZFfWAfwKVmT19BdeAQRFvcfd+8w8 +f1XVc+zddULMJFBTr+xKDlIRWwTkdLPQeWbjo0eHl/g4tuLiLrTxVbnj26bf+2+1 +DbM/w5VavzPrkviHqvKe/QP/gay4QDViWvFgLb90idfAHIdsPgflp0VDS5rVHFL6 +D73rSRdIRo3I8c8mYoNjSR4XDuvgOkAKW9LR3pvouFHHjp6Fr0GesRbrbb2EG66i +PsR99MQ7FqIL9VMHPm2mtR+XvbnKkH2rYyEqaMbSdk29jGapkAWle4sIhSKk749A +4tGkHl08KZ2N9o6GrfUehP/V2eJLaph2DioFL1HxRryrKy80QQKLMJRekxigq8gr +eW8xB4zuf9Mkuou+RHNmo8PebHjFstLigiD6/zP2e+4tUmrT0/JTGOShoGMl8Rt0 +VRxdPImKun+4LOXbfOxArOSkY6i35+gsgkkSy1gTJE0BY3S9auT6+YrglY/TWPQ9 +IJxWVOKlT+3WIp5wJu2bBKQ420VLqDYzkoWytel/bM1ACUtipMiIVeUs2uFiRjpz +A1Wy0QHKPTdSuGlJPRrfcQARAQABiQIlBBgBAgAPAhsMBQJaCWIIBQkFo2BYAAoJ +EOiNMzT6X2oKgSwQAKKs7BGF8TyZeIEO2EUK7R2bdQDCdSGZY06tqLFg3IHMGxDM +b/7FVoa2AEsFgv6xpoebxBB5zkhUk7lslgxvKiSLYjxfNjTBltfiFJ+eQnf+OTs8 +KeR51lLa66rvIH2qUzkNDCCTF45H4wIDpV05AXhBjKYkrDCrtey1rQyFp5fxI+0I +Q1UKKXvzZK4GdxhxDbOUSd38MYy93nqcmclGSGK/gF8XiyuVjeifDCM6+T1NQTX0 +K9lneidcqtBDvlggJTLJtQPO33o5EHzXSiud+dKth1uUhZOFEaYRZoye1YE3yB0T +NOOE8fXlvu8iuIAMBSDL9ep6sEIaXYwoD60I2gHdWD0lkP0DOjGQpi4ouXM3Edsd +5MTi0MDRNTij431kn8T/D0LCgmoUmYYMBgbwFhXr67axPZlKjrqR0z3F/Elv0ZPP +cVg1tNznsALYQ9Ovl6b5M3cJ5GapbbvNWC7yEE1qScl9HiMxjt/H6aPastH63/7w +cN0TslW+zRBy05VNJvpWGStQXcngsSUeJtI1Gd992YNjUJq4/Lih6Z1TlwcFVap+ +cTcDptoUvXYGg/9mRNNPZwErSfIJ0Ibnx9wPVuRN6NiCLOt2mtKp2F1pM6AOQPpZ +85vEh6I8i6OaO0w/Z0UHBwvpY6jDUliaROsWUQsqz78Z34CVj4cy6vPW2EF4 +=r6KK +-----END PGP PUBLIC KEY BLOCK----- +``` diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go index 08d5db979861..7831a5ed334a 100644 --- a/accounts/abi/abi.go +++ b/accounts/abi/abi.go @@ -21,6 +21,8 @@ import ( "encoding/json" "fmt" "io" + + "github.com/ethereum/go-ethereum/common" ) // The ABI holds information about a contract's context and available @@ -68,23 +70,43 @@ func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error) { return nil, err } // Pack up the method ID too if not a constructor and return - return append(method.Id(), arguments...), nil + return append(method.ID(), arguments...), nil } // Unpack output in v according to the abi specification -func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error) { - if len(output) == 0 { +func (abi ABI) Unpack(v interface{}, name string, data []byte) (err error) { + if len(data) == 0 { return fmt.Errorf("abi: unmarshalling empty output") } // since there can't be naming collisions with contracts and events, // we need to decide whether we're calling a method or an event if method, ok := abi.Methods[name]; ok { - if len(output)%32 != 0 { - return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(output), output) + if len(data)%32 != 0 { + return fmt.Errorf("abi: improperly formatted output: %s - Bytes: [%+v]", string(data), data) } - return method.Outputs.Unpack(v, output) - } else if event, ok := abi.Events[name]; ok { - return event.Inputs.Unpack(v, output) + return method.Outputs.Unpack(v, data) + } + if event, ok := abi.Events[name]; ok { + return event.Inputs.Unpack(v, data) + } + return fmt.Errorf("abi: could not locate named method or event") +} + +// UnpackIntoMap unpacks a log into the provided map[string]interface{} +func (abi ABI) UnpackIntoMap(v map[string]interface{}, name string, data []byte) (err error) { + if len(data) == 0 { + return fmt.Errorf("abi: unmarshalling empty output") + } + // since there can't be naming collisions with contracts and events, + // we need to decide whether we're calling a method or an event + if method, ok := abi.Methods[name]; ok { + if len(data)%32 != 0 { + return fmt.Errorf("abi: improperly formatted output") + } + return method.Outputs.UnpackIntoMap(v, data) + } + if event, ok := abi.Events[name]; ok { + return event.Inputs.UnpackIntoMap(v, data) } return fmt.Errorf("abi: could not locate named method or event") } @@ -99,11 +121,9 @@ func (abi *ABI) UnmarshalJSON(data []byte) error { Inputs []Argument Outputs []Argument } - if err := json.Unmarshal(data, &fields); err != nil { return err } - abi.Methods = make(map[string]Method) abi.Events = make(map[string]Event) for _, field := range fields { @@ -114,15 +134,29 @@ func (abi *ABI) UnmarshalJSON(data []byte) error { } // empty defaults to function according to the abi spec case "function", "": - abi.Methods[field.Name] = Method{ - Name: field.Name, + name := field.Name + _, ok := abi.Methods[name] + for idx := 0; ok; idx++ { + name = fmt.Sprintf("%s%d", field.Name, idx) + _, ok = abi.Methods[name] + } + abi.Methods[name] = Method{ + Name: name, + RawName: field.Name, Const: field.Constant, Inputs: field.Inputs, Outputs: field.Outputs, } case "event": - abi.Events[field.Name] = Event{ - Name: field.Name, + name := field.Name + _, ok := abi.Events[name] + for idx := 0; ok; idx++ { + name = fmt.Sprintf("%s%d", field.Name, idx) + _, ok = abi.Events[name] + } + abi.Events[name] = Event{ + Name: name, + RawName: field.Name, Anonymous: field.Anonymous, Inputs: field.Inputs, } @@ -136,12 +170,23 @@ func (abi *ABI) UnmarshalJSON(data []byte) error { // returns nil if none found func (abi *ABI) MethodById(sigdata []byte) (*Method, error) { if len(sigdata) < 4 { - return nil, fmt.Errorf("data too short (% bytes) for abi method lookup", len(sigdata)) + return nil, fmt.Errorf("data too short (%d bytes) for abi method lookup", len(sigdata)) } for _, method := range abi.Methods { - if bytes.Equal(method.Id(), sigdata[:4]) { + if bytes.Equal(method.ID(), sigdata[:4]) { return &method, nil } } return nil, fmt.Errorf("no method with id: %#x", sigdata[:4]) } + +// EventByID looks an event up by its topic hash in the +// ABI and returns nil if none found. +func (abi *ABI) EventByID(topic common.Hash) (*Event, error) { + for _, event := range abi.Events { + if bytes.Equal(event.ID().Bytes(), topic.Bytes()) { + return &event, nil + } + } + return nil, fmt.Errorf("no event with id: %#x", topic.Hex()) +} diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go index b9444f9f0d94..7a795e0524f4 100644 --- a/accounts/abi/abi_test.go +++ b/accounts/abi/abi_test.go @@ -20,7 +20,6 @@ import ( "bytes" "encoding/hex" "fmt" - "log" "math/big" "reflect" "strings" @@ -62,10 +61,10 @@ func TestReader(t *testing.T) { exp := ABI{ Methods: map[string]Method{ "balance": { - "balance", true, nil, nil, + "balance", "balance", true, nil, nil, }, "send": { - "send", false, []Argument{ + "send", "send", false, []Argument{ {"amount", Uint256, false}, }, nil, }, @@ -102,8 +101,7 @@ func TestReader(t *testing.T) { func TestTestNumbers(t *testing.T) { abi, err := JSON(strings.NewReader(jsondata2)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } if _, err := abi.Pack("balance"); err != nil { @@ -140,8 +138,7 @@ func TestTestNumbers(t *testing.T) { func TestTestString(t *testing.T) { abi, err := JSON(strings.NewReader(jsondata2)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } if _, err := abi.Pack("string", "hello world"); err != nil { @@ -152,8 +149,7 @@ func TestTestString(t *testing.T) { func TestTestBool(t *testing.T) { abi, err := JSON(strings.NewReader(jsondata2)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } if _, err := abi.Pack("bool", true); err != nil { @@ -164,15 +160,12 @@ func TestTestBool(t *testing.T) { func TestTestSlice(t *testing.T) { abi, err := JSON(strings.NewReader(jsondata2)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } - slice := make([]uint64, 2) if _, err := abi.Pack("uint64[2]", slice); err != nil { t.Error(err) } - if _, err := abi.Pack("uint64[]", slice); err != nil { t.Error(err) } @@ -180,19 +173,19 @@ func TestTestSlice(t *testing.T) { func TestMethodSignature(t *testing.T) { String, _ := NewType("string", nil) - m := Method{"foo", false, []Argument{{"bar", String, false}, {"baz", String, false}}, nil} + m := Method{"foo", "foo", false, []Argument{{"bar", String, false}, {"baz", String, false}}, nil} exp := "foo(string,string)" if m.Sig() != exp { t.Error("signature mismatch", exp, "!=", m.Sig()) } idexp := crypto.Keccak256([]byte(exp))[:4] - if !bytes.Equal(m.Id(), idexp) { - t.Errorf("expected ids to match %x != %x", m.Id(), idexp) + if !bytes.Equal(m.ID(), idexp) { + t.Errorf("expected ids to match %x != %x", m.ID(), idexp) } uintt, _ := NewType("uint256", nil) - m = Method{"foo", false, []Argument{{"bar", uintt, false}}, nil} + m = Method{"foo", "foo", false, []Argument{{"bar", uintt, false}}, nil} exp = "foo(uint256)" if m.Sig() != exp { t.Error("signature mismatch", exp, "!=", m.Sig()) @@ -211,18 +204,40 @@ func TestMethodSignature(t *testing.T) { {Name: "y", Type: "int256"}, }}, }) - m = Method{"foo", false, []Argument{{"s", s, false}, {"bar", String, false}}, nil} + m = Method{"foo", "foo", false, []Argument{{"s", s, false}, {"bar", String, false}}, nil} exp = "foo((int256,int256[],(int256,int256)[],(int256,int256)[2]),string)" if m.Sig() != exp { t.Error("signature mismatch", exp, "!=", m.Sig()) } } +func TestOverloadedMethodSignature(t *testing.T) { + json := `[{"constant":true,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]` + abi, err := JSON(strings.NewReader(json)) + if err != nil { + t.Fatal(err) + } + check := func(name string, expect string, method bool) { + if method { + if abi.Methods[name].Sig() != expect { + t.Fatalf("The signature of overloaded method mismatch, want %s, have %s", expect, abi.Methods[name].Sig()) + } + } else { + if abi.Events[name].Sig() != expect { + t.Fatalf("The signature of overloaded event mismatch, want %s, have %s", expect, abi.Events[name].Sig()) + } + } + } + check("foo", "foo(uint256,uint256)", true) + check("foo0", "foo(uint256)", true) + check("bar", "bar(uint256)", false) + check("bar0", "bar(uint256,uint256)", false) +} + func TestMultiPack(t *testing.T) { abi, err := JSON(strings.NewReader(jsondata2)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } sig := crypto.Keccak256([]byte("bar(uint32,uint16)"))[:4] @@ -232,10 +247,8 @@ func TestMultiPack(t *testing.T) { packed, err := abi.Pack("bar", uint32(10), uint16(11)) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } - if !bytes.Equal(packed, sig) { t.Errorf("expected %x got %x", sig, packed) } @@ -246,11 +259,11 @@ func ExampleJSON() { abi, err := JSON(strings.NewReader(definition)) if err != nil { - log.Fatalln(err) + panic(err) } out, err := abi.Pack("isBar", common.HexToAddress("01")) if err != nil { - log.Fatalln(err) + panic(err) } fmt.Printf("%x\n", out) @@ -694,6 +707,189 @@ func TestUnpackEvent(t *testing.T) { } } +func TestUnpackEventIntoMap(t *testing.T) { + const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` + abi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + + const hexdata = `000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158` + data, err := hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + + receivedMap := map[string]interface{}{} + expectedReceivedMap := map[string]interface{}{ + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := abi.UnpackIntoMap(receivedMap, "received", data); err != nil { + t.Error(err) + } + if len(receivedMap) != 3 { + t.Error("unpacked `received` map expected to have length 3") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked `received` map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked `received` map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked `received` map does not match expected map") + } + + receivedAddrMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(receivedAddrMap, "receivedAddr", data); err != nil { + t.Error(err) + } + if len(receivedAddrMap) != 1 { + t.Error("unpacked `receivedAddr` map expected to have length 1") + } + if receivedAddrMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked `receivedAddr` map does not match expected map") + } +} + +func TestUnpackMethodIntoMap(t *testing.T) { + const abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` + abi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + const hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000015800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000158` + data, err := hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 != 0 { + t.Errorf("len(data) is %d, want a multiple of 32", len(data)) + } + + // Tests a method with no outputs + receiveMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(receiveMap, "receive", data); err != nil { + t.Error(err) + } + if len(receiveMap) > 0 { + t.Error("unpacked `receive` map expected to have length 0") + } + + // Tests a method with only outputs + sendMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(sendMap, "send", data); err != nil { + t.Error(err) + } + if len(sendMap) != 1 { + t.Error("unpacked `send` map expected to have length 1") + } + if sendMap["amount"].(*big.Int).Cmp(big.NewInt(1)) != 0 { + t.Error("unpacked `send` map expected `amount` value of 1") + } + + // Tests a method with outputs and inputs + getMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(getMap, "get", data); err != nil { + t.Error(err) + } + if len(getMap) != 1 { + t.Error("unpacked `get` map expected to have length 1") + } + expectedBytes := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 88, 0} + if !bytes.Equal(getMap["hash"].([]byte), expectedBytes) { + t.Errorf("unpacked `get` map expected `hash` value of %v", expectedBytes) + } +} + +func TestUnpackIntoMapNamingConflict(t *testing.T) { + // Two methods have the same name + var abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"get","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"send","outputs":[{"name":"amount","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"get","outputs":[{"name":"hash","type":"bytes"}],"payable":true,"stateMutability":"payable","type":"function"}]` + abi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + var hexdata = `00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158` + data, err := hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + getMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(getMap, "get", data); err == nil { + t.Error("naming conflict between two methods; error expected") + } + + // Two events have the same name + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"receive","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"received","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + hexdata = `000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158` + data, err = hex.DecodeString(hexdata) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + receivedMap := map[string]interface{}{} + if err = abi.UnpackIntoMap(receivedMap, "received", data); err != nil { + t.Error("naming conflict between two events; no error expected") + } + + // Method and event have the same name + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + if err = abi.UnpackIntoMap(receivedMap, "received", data); err == nil { + t.Error("naming conflict between an event and a method; error expected") + } + + // Conflict is case sensitive + abiJSON = `[{"constant":false,"inputs":[{"name":"memo","type":"bytes"}],"name":"received","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"}],"name":"receivedAddr","type":"event"}]` + abi, err = JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if len(data)%32 == 0 { + t.Errorf("len(data) is %d, want a non-multiple of 32", len(data)) + } + expectedReceivedMap := map[string]interface{}{ + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err = abi.UnpackIntoMap(receivedMap, "Received", data); err != nil { + t.Error(err) + } + if len(receivedMap) != 3 { + t.Error("unpacked `received` map expected to have length 3") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked `received` map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked `received` map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked `received` map does not match expected map") + } +} + func TestABI_MethodById(t *testing.T) { const abiJSON = `[ {"type":"function","name":"receive","constant":false,"inputs":[{"name":"memo","type":"bytes"}],"outputs":[],"payable":true,"stateMutability":"payable"}, @@ -725,13 +921,13 @@ func TestABI_MethodById(t *testing.T) { } for name, m := range abi.Methods { a := fmt.Sprintf("%v", m) - m2, err := abi.MethodById(m.Id()) + m2, err := abi.MethodById(m.ID()) if err != nil { t.Fatalf("Failed to look up ABI method: %v", err) } b := fmt.Sprintf("%v", m2) if a != b { - t.Errorf("Method %v (id %v) not 'findable' by id in ABI", name, common.ToHex(m.Id())) + t.Errorf("Method %v (id %v) not 'findable' by id in ABI", name, common.ToHex(m.ID())) } } // Also test empty @@ -745,3 +941,113 @@ func TestABI_MethodById(t *testing.T) { t.Errorf("Expected error, nil is short to decode data") } } + +func TestABI_EventById(t *testing.T) { + tests := []struct { + name string + json string + event string + }{ + { + name: "", + json: `[ + {"type":"event","name":"received","anonymous":false,"inputs":[ + {"indexed":false,"name":"sender","type":"address"}, + {"indexed":false,"name":"amount","type":"uint256"}, + {"indexed":false,"name":"memo","type":"bytes"} + ] + }]`, + event: "received(address,uint256,bytes)", + }, { + name: "", + json: `[ + { "constant": true, "inputs": [], "name": "name", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "constant": false, "inputs": [ { "name": "_spender", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "approve", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, + { "constant": true, "inputs": [], "name": "totalSupply", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "constant": false, "inputs": [ { "name": "_from", "type": "address" }, { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, + { "constant": true, "inputs": [], "name": "decimals", "outputs": [ { "name": "", "type": "uint8" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "constant": true, "inputs": [ { "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "name": "balance", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "constant": true, "inputs": [], "name": "symbol", "outputs": [ { "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "constant": false, "inputs": [ { "name": "_to", "type": "address" }, { "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "name": "", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, + { "constant": true, "inputs": [ { "name": "_owner", "type": "address" }, { "name": "_spender", "type": "address" } ], "name": "allowance", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, + { "payable": true, "stateMutability": "payable", "type": "fallback" }, + { "anonymous": false, "inputs": [ { "indexed": true, "name": "owner", "type": "address" }, { "indexed": true, "name": "spender", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, + { "anonymous": false, "inputs": [ { "indexed": true, "name": "from", "type": "address" }, { "indexed": true, "name": "to", "type": "address" }, { "indexed": false, "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" } + ]`, + event: "Transfer(address,address,uint256)", + }, + } + + for testnum, test := range tests { + abi, err := JSON(strings.NewReader(test.json)) + if err != nil { + t.Error(err) + } + + topic := test.event + topicID := crypto.Keccak256Hash([]byte(topic)) + + event, err := abi.EventByID(topicID) + if err != nil { + t.Fatalf("Failed to look up ABI method: %v, test #%d", err, testnum) + } + if event == nil { + t.Errorf("We should find a event for topic %s, test #%d", topicID.Hex(), testnum) + } + + if event.ID() != topicID { + t.Errorf("Event id %s does not match topic %s, test #%d", event.ID().Hex(), topicID.Hex(), testnum) + } + + unknowntopicID := crypto.Keccak256Hash([]byte("unknownEvent")) + unknownEvent, err := abi.EventByID(unknowntopicID) + if err == nil { + t.Errorf("EventByID should return an error if a topic is not found, test #%d", testnum) + } + if unknownEvent != nil { + t.Errorf("We should not find any event for topic %s, test #%d", unknowntopicID.Hex(), testnum) + } + } +} + +func TestDuplicateMethodNames(t *testing.T) { + abiJSON := `[{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"},{"name":"customFallback","type":"string"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]` + contractAbi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if _, ok := contractAbi.Methods["transfer"]; !ok { + t.Fatalf("Could not find original method") + } + if _, ok := contractAbi.Methods["transfer0"]; !ok { + t.Fatalf("Could not find duplicate method") + } + if _, ok := contractAbi.Methods["transfer1"]; !ok { + t.Fatalf("Could not find duplicate method") + } + if _, ok := contractAbi.Methods["transfer2"]; ok { + t.Fatalf("Should not have found extra method") + } +} + +// TestDoubleDuplicateMethodNames checks that if transfer0 already exists, there won't be a name +// conflict and that the second transfer method will be renamed transfer1. +func TestDoubleDuplicateMethodNames(t *testing.T) { + abiJSON := `[{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer0","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"},{"name":"customFallback","type":"string"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]` + contractAbi, err := JSON(strings.NewReader(abiJSON)) + if err != nil { + t.Fatal(err) + } + if _, ok := contractAbi.Methods["transfer"]; !ok { + t.Fatalf("Could not find original method") + } + if _, ok := contractAbi.Methods["transfer0"]; !ok { + t.Fatalf("Could not find duplicate method") + } + if _, ok := contractAbi.Methods["transfer1"]; !ok { + t.Fatalf("Could not find duplicate method") + } + if _, ok := contractAbi.Methods["transfer2"]; ok { + t.Fatalf("Should not have found extra method") + } +} diff --git a/accounts/abi/argument.go b/accounts/abi/argument.go index d0a6b035c66a..4dae586535fd 100644 --- a/accounts/abi/argument.go +++ b/accounts/abi/argument.go @@ -102,6 +102,16 @@ func (arguments Arguments) Unpack(v interface{}, data []byte) error { return arguments.unpackAtomic(v, marshalledValues[0]) } +// UnpackIntoMap performs the operation hexdata -> mapping of argument name to argument value +func (arguments Arguments) UnpackIntoMap(v map[string]interface{}, data []byte) error { + marshalledValues, err := arguments.UnpackValues(data) + if err != nil { + return err + } + + return arguments.unpackIntoMap(v, marshalledValues) +} + // unpack sets the unmarshalled value to go format. // Note the dst here must be settable. func unpack(t *Type, dst interface{}, src interface{}) error { @@ -109,11 +119,22 @@ func unpack(t *Type, dst interface{}, src interface{}) error { dstVal = reflect.ValueOf(dst).Elem() srcVal = reflect.ValueOf(src) ) - - if t.T != TupleTy && !((t.T == SliceTy || t.T == ArrayTy) && t.Elem.T == TupleTy) { + tuple, typ := false, t + for { + if typ.T == SliceTy || typ.T == ArrayTy { + typ = typ.Elem + continue + } + tuple = typ.T == TupleTy + break + } + if !tuple { return set(dstVal, srcVal) } + // Dereferences interface or pointer wrapper + dstVal = indirectInterfaceOrPtr(dstVal) + switch t.T { case TupleTy: if dstVal.Kind() != reflect.Struct { @@ -160,6 +181,19 @@ func unpack(t *Type, dst interface{}, src interface{}) error { return nil } +// unpackIntoMap unpacks marshalledValues into the provided map[string]interface{} +func (arguments Arguments) unpackIntoMap(v map[string]interface{}, marshalledValues []interface{}) error { + // Make sure map is not nil + if v == nil { + return fmt.Errorf("abi: cannot unpack into a nil map") + } + + for i, arg := range arguments.NonIndexed() { + v[arg.Name] = marshalledValues[i] + } + return nil +} + // unpackAtomic unpacks ( hexdata -> go ) a single value func (arguments Arguments) unpackAtomic(v interface{}, marshalledValues interface{}) error { if arguments.LengthNonIndexed() == 0 { @@ -168,7 +202,7 @@ func (arguments Arguments) unpackAtomic(v interface{}, marshalledValues interfac argument := arguments.NonIndexed()[0] elem := reflect.ValueOf(v).Elem() - if elem.Kind() == reflect.Struct { + if elem.Kind() == reflect.Struct && argument.Type.T != TupleTy { fieldmap, err := mapArgNamesToStructFields([]string{argument.Name}, elem) if err != nil { return err diff --git a/accounts/abi/bind/auth.go b/accounts/abi/bind/auth.go index e6bb0c3b5286..e51f0bd8ead5 100644 --- a/accounts/abi/bind/auth.go +++ b/accounts/abi/bind/auth.go @@ -22,6 +22,8 @@ import ( "io" "io/ioutil" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/external" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" @@ -42,6 +44,24 @@ func NewTransactor(keyin io.Reader, passphrase string) (*TransactOpts, error) { return NewKeyedTransactor(key.PrivateKey), nil } +// NewKeyStoreTransactor is a utility method to easily create a transaction signer from +// an decrypted key from a keystore +func NewKeyStoreTransactor(keystore *keystore.KeyStore, account accounts.Account) (*TransactOpts, error) { + return &TransactOpts{ + From: account.Address, + Signer: func(signer types.Signer, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + if address != account.Address { + return nil, errors.New("not authorized to sign this account") + } + signature, err := keystore.SignHash(account, signer.Hash(tx).Bytes()) + if err != nil { + return nil, err + } + return tx.WithSignature(signer, signature) + }, + }, nil +} + // NewKeyedTransactor is a utility method to easily create a transaction signer // from a single private key. func NewKeyedTransactor(key *ecdsa.PrivateKey) *TransactOpts { @@ -60,3 +80,17 @@ func NewKeyedTransactor(key *ecdsa.PrivateKey) *TransactOpts { }, } } + +// NewClefTransactor is a utility method to easily create a transaction signer +// with a clef backend. +func NewClefTransactor(clef *external.ExternalSigner, account accounts.Account) *TransactOpts { + return &TransactOpts{ + From: account.Address, + Signer: func(signer types.Signer, address common.Address, transaction *types.Transaction) (*types.Transaction, error) { + if address != account.Address { + return nil, errors.New("not authorized to sign this account") + } + return clef.SignTx(account, transaction, nil) // Clef enforces its own chain id + }, + } +} diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index 6f46fc1495ab..d1279b2ffaaa 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -45,8 +45,10 @@ import ( // This nil assignment ensures compile time that SimulatedBackend implements bind.ContractBackend. var _ bind.ContractBackend = (*SimulatedBackend)(nil) -var errBlockNumberUnsupported = errors.New("SimulatedBackend cannot access blocks other than the latest block") -var errGasEstimationFailed = errors.New("gas required exceeds allowance or always failing transaction") +var ( + errBlockNumberUnsupported = errors.New("simulatedBackend cannot access blocks other than the latest block") + errGasEstimationFailed = errors.New("gas required exceeds allowance or always failing transaction") +) // SimulatedBackend implements bind.ContractBackend, simulating a blockchain in // the background. Its main purpose is to allow easily testing contract bindings. @@ -63,10 +65,9 @@ type SimulatedBackend struct { config *params.ChainConfig } -// NewSimulatedBackend creates a new binding backend using a simulated blockchain -// for testing purposes. -func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend { - database := ethdb.NewMemDatabase() +// NewSimulatedBackendWithDatabase creates a new binding backend based on the given database +// and uses a simulated blockchain for testing purposes. +func NewSimulatedBackendWithDatabase(database ethdb.Database, alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend { genesis := core.Genesis{Config: params.AllEthashProtocolChanges, GasLimit: gasLimit, Alloc: alloc} genesis.MustCommit(database) blockchain, _ := core.NewBlockChain(database, nil, genesis.Config, ethash.NewFaker(), vm.Config{}, nil) @@ -81,6 +82,18 @@ func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBac return backend } +// NewSimulatedBackend creates a new binding backend using a simulated blockchain +// for testing purposes. +func NewSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64) *SimulatedBackend { + return NewSimulatedBackendWithDatabase(rawdb.NewMemoryDatabase(), alloc, gasLimit) +} + +// Close terminates the underlying blockchain's update loop. +func (b *SimulatedBackend) Close() error { + b.blockchain.Stop() + return nil +} + // Commit imports all the pending transactions as a single block and starts a // fresh new state. func (b *SimulatedBackend) Commit() { @@ -160,10 +173,29 @@ func (b *SimulatedBackend) StorageAt(ctx context.Context, contract common.Addres // TransactionReceipt returns the receipt of a transaction. func (b *SimulatedBackend) TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) { - receipt, _, _, _ := rawdb.ReadReceipt(b.database, txHash) + receipt, _, _, _ := rawdb.ReadReceipt(b.database, txHash, b.config) return receipt, nil } +// TransactionByHash checks the pool of pending transactions in addition to the +// blockchain. The isPending return value indicates whether the transaction has been +// mined yet. Note that the transaction may not be part of the canonical chain even if +// it's not pending. +func (b *SimulatedBackend) TransactionByHash(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error) { + b.mu.Lock() + defer b.mu.Unlock() + + tx := b.pendingBlock.Transaction(txHash) + if tx != nil { + return tx, true, nil + } + tx, _, _, _ = rawdb.ReadTransaction(b.database, txHash) + if tx != nil { + return tx, false, nil + } + return nil, false, ethereum.NotFound +} + // PendingCodeAt returns the code associated with an account in the pending state. func (b *SimulatedBackend) PendingCodeAt(ctx context.Context, contract common.Address) ([]byte, error) { b.mu.Lock() @@ -288,7 +320,8 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallM vmenv := vm.NewEVM(evmContext, statedb, b.config, vm.Config{}) gaspool := new(core.GasPool).AddGas(math.MaxUint64) - return core.NewStateTransition(vmenv, msg, gaspool).TransitionDb() + ret, usedGas, _, failed, err := core.NewStateTransition(vmenv, msg, gaspool).TransitionDb() + return ret, usedGas, failed, err } // SendTransaction updates the pending block to include the given transaction. @@ -297,7 +330,7 @@ func (b *SimulatedBackend) SendTransaction(ctx context.Context, tx *types.Transa b.mu.Lock() defer b.mu.Unlock() - sender, err := types.Sender(types.HomesteadSigner{}, tx) + sender, err := types.Sender(types.NewEIP155Signer(b.config.ChainID), tx) if err != nil { panic(fmt.Errorf("invalid transaction: %v", err)) } @@ -405,6 +438,11 @@ func (b *SimulatedBackend) AdjustTime(adjustment time.Duration) error { return nil } +// Blockchain returns the underlying blockchain. +func (b *SimulatedBackend) Blockchain() *core.BlockChain { + return b.blockchain +} + // callmsg implements core.Message to allow passing it as a transaction simulator. type callmsg struct { ethereum.CallMsg @@ -445,7 +483,7 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ if number == nil { return nil, nil } - return rawdb.ReadReceipts(fb.db, hash, *number), nil + return rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config()), nil } func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error) { @@ -453,7 +491,7 @@ func (fb *filterBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*ty if number == nil { return nil, nil } - receipts := rawdb.ReadReceipts(fb.db, hash, *number) + receipts := rawdb.ReadReceipts(fb.db, hash, *number, fb.bc.Config()) if receipts == nil { return nil, nil } diff --git a/accounts/abi/bind/backends/simulated_test.go b/accounts/abi/bind/backends/simulated_test.go new file mode 100644 index 000000000000..7e0a68c08349 --- /dev/null +++ b/accounts/abi/bind/backends/simulated_test.go @@ -0,0 +1,83 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package backends_test + +import ( + "context" + "math/big" + "testing" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" +) + +func TestSimulatedBackend(t *testing.T) { + var gasLimit uint64 = 8000029 + key, _ := crypto.GenerateKey() // nolint: gosec + auth := bind.NewKeyedTransactor(key) + genAlloc := make(core.GenesisAlloc) + genAlloc[auth.From] = core.GenesisAccount{Balance: big.NewInt(9223372036854775807)} + + sim := backends.NewSimulatedBackend(genAlloc, gasLimit) + defer sim.Close() + + // should return an error if the tx is not found + txHash := common.HexToHash("2") + _, isPending, err := sim.TransactionByHash(context.Background(), txHash) + + if isPending { + t.Fatal("transaction should not be pending") + } + if err != ethereum.NotFound { + t.Fatalf("err should be `ethereum.NotFound` but received %v", err) + } + + // generate a transaction and confirm you can retrieve it + code := `6060604052600a8060106000396000f360606040526008565b00` + var gas uint64 = 3000000 + tx := types.NewContractCreation(0, big.NewInt(0), gas, big.NewInt(1), common.FromHex(code)) + tx, _ = types.SignTx(tx, types.HomesteadSigner{}, key) + + err = sim.SendTransaction(context.Background(), tx) + if err != nil { + t.Fatal("error sending transaction") + } + + txHash = tx.Hash() + _, isPending, err = sim.TransactionByHash(context.Background(), txHash) + if err != nil { + t.Fatalf("error getting transaction with hash: %v", txHash.String()) + } + if !isPending { + t.Fatal("transaction should have pending status") + } + + sim.Commit() + tx, isPending, err = sim.TransactionByHash(context.Background(), txHash) + if err != nil { + t.Fatalf("error getting transaction with hash: %v", txHash.String()) + } + if isPending { + t.Fatal("transaction should not have pending status") + } + +} diff --git a/accounts/abi/bind/base.go b/accounts/abi/bind/base.go index c37bdf11d53a..f74a0af21173 100644 --- a/accounts/abi/bind/base.go +++ b/accounts/abi/bind/base.go @@ -252,7 +252,7 @@ func (c *BoundContract) FilterLogs(opts *FilterOpts, name string, query ...[]int opts = new(FilterOpts) } // Append the event selector to the query parameters and construct the topic set - query = append([][]interface{}{{c.abi.Events[name].Id()}}, query...) + query = append([][]interface{}{{c.abi.Events[name].ID()}}, query...) topics, err := makeTopics(query...) if err != nil { @@ -301,7 +301,7 @@ func (c *BoundContract) WatchLogs(opts *WatchOpts, name string, query ...[]inter opts = new(WatchOpts) } // Append the event selector to the query parameters and construct the topic set - query = append([][]interface{}{{c.abi.Events[name].Id()}}, query...) + query = append([][]interface{}{{c.abi.Events[name].ID()}}, query...) topics, err := makeTopics(query...) if err != nil { @@ -340,6 +340,22 @@ func (c *BoundContract) UnpackLog(out interface{}, event string, log types.Log) return parseTopics(out, indexed, log.Topics[1:]) } +// UnpackLogIntoMap unpacks a retrieved log into the provided map. +func (c *BoundContract) UnpackLogIntoMap(out map[string]interface{}, event string, log types.Log) error { + if len(log.Data) > 0 { + if err := c.abi.UnpackIntoMap(out, event, log.Data); err != nil { + return err + } + } + var indexed abi.Arguments + for _, arg := range c.abi.Events[event].Inputs { + if arg.Indexed { + indexed = append(indexed, arg) + } + } + return parseTopicsIntoMap(out, indexed, log.Topics[1:]) +} + // ensureContext is a helper method to ensure a context is not nil, even if the // user specified it as such. func ensureContext(ctx context.Context) context.Context { diff --git a/accounts/abi/bind/base_test.go b/accounts/abi/bind/base_test.go index 8adff8b59b5f..3ae685e00f0a 100644 --- a/accounts/abi/bind/base_test.go +++ b/accounts/abi/bind/base_test.go @@ -1,14 +1,36 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package bind_test import ( + "bytes" "context" "math/big" + "strings" "testing" - ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" ) type mockCaller struct { @@ -25,7 +47,6 @@ func (mc *mockCaller) CallContract(ctx context.Context, call ethereum.CallMsg, b mc.callContractBlockNumber = blockNumber return nil, nil } - func TestPassingBlockNumber(t *testing.T) { mc := &mockCaller{} @@ -62,3 +83,265 @@ func TestPassingBlockNumber(t *testing.T) { t.Fatalf("CodeAt() was passed a block number when it should not have been") } } + +const hexData = "0x000000000000000000000000376c47978271565f56deb45495afa69e59c16ab200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000158" + +func TestUnpackIndexedStringTyLogIntoMap(t *testing.T) { + hash := crypto.Keccak256Hash([]byte("testName")) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"name","type":"string"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "name": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["name"] != expectedReceivedMap["name"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedSliceTyLogIntoMap(t *testing.T) { + sliceBytes, err := rlp.EncodeToBytes([]string{"name1", "name2", "name3", "name4"}) + if err != nil { + t.Fatal(err) + } + hash := crypto.Keccak256Hash(sliceBytes) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"names","type":"string[]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "names": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["names"] != expectedReceivedMap["names"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedArrayTyLogIntoMap(t *testing.T) { + arrBytes, err := rlp.EncodeToBytes([2]common.Address{common.HexToAddress("0x0"), common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2")}) + if err != nil { + t.Fatal(err) + } + hash := crypto.Keccak256Hash(arrBytes) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x0"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x0"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"addresses","type":"address[2]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "addresses": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["addresses"] != expectedReceivedMap["addresses"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedFuncTyLogIntoMap(t *testing.T) { + mockAddress := common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2") + addrBytes := mockAddress.Bytes() + hash := crypto.Keccak256Hash([]byte("mockFunction(address,uint)")) + functionSelector := hash[:4] + functionTyBytes := append(addrBytes, functionSelector...) + var functionTy [24]byte + copy(functionTy[:], functionTyBytes[0:24]) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"), + common.BytesToHash(functionTyBytes), + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"function","type":"function"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "function": functionTy, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["function"] != expectedReceivedMap["function"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} + +func TestUnpackIndexedBytesTyLogIntoMap(t *testing.T) { + byts := []byte{1, 2, 3, 4, 5} + hash := crypto.Keccak256Hash(byts) + mockLog := types.Log{ + Address: common.HexToAddress("0x0"), + Topics: []common.Hash{ + common.HexToHash("0x99b5620489b6ef926d4518936cfec15d305452712b88bd59da2d9c10fb0953e8"), + hash, + }, + Data: hexutil.MustDecode(hexData), + BlockNumber: uint64(26), + TxHash: common.HexToHash("0x5c698f13940a2153440c6d19660878bc90219d9298fdcf37365aa8d88d40fc42"), + TxIndex: 111, + BlockHash: common.BytesToHash([]byte{1, 2, 3, 4, 5}), + Index: 7, + Removed: false, + } + + abiString := `[{"anonymous":false,"inputs":[{"indexed":true,"name":"content","type":"bytes"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"memo","type":"bytes"}],"name":"received","type":"event"}]` + parsedAbi, _ := abi.JSON(strings.NewReader(abiString)) + bc := bind.NewBoundContract(common.HexToAddress("0x0"), parsedAbi, nil, nil, nil) + + receivedMap := make(map[string]interface{}) + expectedReceivedMap := map[string]interface{}{ + "content": hash, + "sender": common.HexToAddress("0x376c47978271565f56DEB45495afa69E59c16Ab2"), + "amount": big.NewInt(1), + "memo": []byte{88}, + } + if err := bc.UnpackLogIntoMap(receivedMap, "received", mockLog); err != nil { + t.Error(err) + } + + if len(receivedMap) != 4 { + t.Fatal("unpacked map expected to have length 4") + } + if receivedMap["content"] != expectedReceivedMap["content"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["sender"] != expectedReceivedMap["sender"] { + t.Error("unpacked map does not match expected map") + } + if receivedMap["amount"].(*big.Int).Cmp(expectedReceivedMap["amount"].(*big.Int)) != 0 { + t.Error("unpacked map does not match expected map") + } + if !bytes.Equal(receivedMap["memo"].([]byte), expectedReceivedMap["memo"].([]byte)) { + t.Error("unpacked map does not match expected map") + } +} diff --git a/accounts/abi/bind/bind.go b/accounts/abi/bind/bind.go index 5ee30d0249a2..dc51e2a7ec07 100644 --- a/accounts/abi/bind/bind.go +++ b/accounts/abi/bind/bind.go @@ -22,6 +22,7 @@ package bind import ( "bytes" + "errors" "fmt" "go/format" "regexp" @@ -30,6 +31,7 @@ import ( "unicode" "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/log" ) // Lang is a target programming language selector to generate bindings for. @@ -45,10 +47,13 @@ const ( // to be used as is in client code, but rather as an intermediate struct which // enforces compile time type safety and naming convention opposed to having to // manually maintain hard coded strings that break on runtime. -func Bind(types []string, abis []string, bytecodes []string, pkg string, lang Lang) (string, error) { +func Bind(types []string, abis []string, bytecodes []string, fsigs []map[string]string, pkg string, lang Lang, libs map[string]string) (string, error) { // Process each individual contract requested binding contracts := make(map[string]*tmplContract) + // Map used to flag each encountered library as such + isLib := make(map[string]struct{}) + for i := 0; i < len(types); i++ { // Parse the actual ABI to generate the binding for evmABI, err := abi.JSON(strings.NewReader(abis[i])) @@ -63,11 +68,12 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La return r }, abis[i]) - // Extract the call and transact methods; events; and sort them alphabetically + // Extract the call and transact methods; events, struct definitions; and sort them alphabetically var ( calls = make(map[string]*tmplMethod) transacts = make(map[string]*tmplMethod) events = make(map[string]*tmplEvent) + structs = make(map[string]*tmplStruct) ) for _, original := range evmABI.Methods { // Normalize the method for capital cases and non-anonymous inputs/outputs @@ -80,6 +86,9 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La if input.Name == "" { normalized.Inputs[j].Name = fmt.Sprintf("arg%d", j) } + if _, exist := structs[input.Type.String()]; input.Type.T == abi.TupleTy && !exist { + bindStructType[lang](input.Type, structs) + } } normalized.Outputs = make([]abi.Argument, len(original.Outputs)) copy(normalized.Outputs, original.Outputs) @@ -87,6 +96,9 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La if output.Name != "" { normalized.Outputs[j].Name = capitalise(output.Name) } + if _, exist := structs[output.Type.String()]; output.Type.T == abi.TupleTy && !exist { + bindStructType[lang](output.Type, structs) + } } // Append the methods to the call or transact lists if original.Const { @@ -112,25 +124,61 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La if input.Name == "" { normalized.Inputs[j].Name = fmt.Sprintf("arg%d", j) } + if _, exist := structs[input.Type.String()]; input.Type.T == abi.TupleTy && !exist { + bindStructType[lang](input.Type, structs) + } } } // Append the event to the accumulator list events[original.Name] = &tmplEvent{Original: original, Normalized: normalized} } + + // There is no easy way to pass arbitrary java objects to the Go side. + if len(structs) > 0 && lang == LangJava { + return "", errors.New("java binding for tuple arguments is not supported yet") + } + contracts[types[i]] = &tmplContract{ Type: capitalise(types[i]), InputABI: strings.Replace(strippedABI, "\"", "\\\"", -1), - InputBin: strings.TrimSpace(bytecodes[i]), + InputBin: strings.TrimPrefix(strings.TrimSpace(bytecodes[i]), "0x"), Constructor: evmABI.Constructor, Calls: calls, Transacts: transacts, Events: events, + Libraries: make(map[string]string), + Structs: structs, + } + // Function 4-byte signatures are stored in the same sequence + // as types, if available. + if len(fsigs) > i { + contracts[types[i]].FuncSigs = fsigs[i] + } + // Parse library references. + for pattern, name := range libs { + matched, err := regexp.Match("__\\$"+pattern+"\\$__", []byte(contracts[types[i]].InputBin)) + if err != nil { + log.Error("Could not search for pattern", "pattern", pattern, "contract", contracts[types[i]], "err", err) + } + if matched { + contracts[types[i]].Libraries[pattern] = name + // keep track that this type is a library + if _, ok := isLib[name]; !ok { + isLib[name] = struct{}{} + } + } } } + // Check if that type has already been identified as a library + for i := 0; i < len(types); i++ { + _, ok := isLib[types[i]] + contracts[types[i]].Library = ok + } // Generate the contract template data content and render it data := &tmplData{ Package: pkg, Contracts: contracts, + Libraries: libs, } buffer := new(bytes.Buffer) @@ -138,6 +186,8 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La "bindtype": bindType[lang], "bindtopictype": bindTopicType[lang], "namedtype": namedType[lang], + "formatmethod": formatMethod, + "formatevent": formatEvent, "capitalise": capitalise, "decapitalise": decapitalise, } @@ -159,129 +209,67 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La // bindType is a set of type binders that convert Solidity types to some supported // programming language types. -var bindType = map[Lang]func(kind abi.Type) string{ +var bindType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) string{ LangGo: bindTypeGo, LangJava: bindTypeJava, } -// Helper function for the binding generators. -// It reads the unmatched characters after the inner type-match, -// (since the inner type is a prefix of the total type declaration), -// looks for valid arrays (possibly a dynamic one) wrapping the inner type, -// and returns the sizes of these arrays. -// -// Returned array sizes are in the same order as solidity signatures; inner array size first. -// Array sizes may also be "", indicating a dynamic array. -func wrapArray(stringKind string, innerLen int, innerMapping string) (string, []string) { - remainder := stringKind[innerLen:] - //find all the sizes - matches := regexp.MustCompile(`\[(\d*)\]`).FindAllStringSubmatch(remainder, -1) - parts := make([]string, 0, len(matches)) - for _, match := range matches { - //get group 1 from the regex match - parts = append(parts, match[1]) - } - return innerMapping, parts -} - -// Translates the array sizes to a Go-lang declaration of a (nested) array of the inner type. -// Simply returns the inner type if arraySizes is empty. -func arrayBindingGo(inner string, arraySizes []string) string { - out := "" - //prepend all array sizes, from outer (end arraySizes) to inner (start arraySizes) - for i := len(arraySizes) - 1; i >= 0; i-- { - out += "[" + arraySizes[i] + "]" - } - out += inner - return out -} - -// bindTypeGo converts a Solidity type to a Go one. Since there is no clear mapping -// from all Solidity types to Go ones (e.g. uint17), those that cannot be exactly -// mapped will use an upscaled type (e.g. *big.Int). -func bindTypeGo(kind abi.Type) string { - stringKind := kind.String() - innerLen, innerMapping := bindUnnestedTypeGo(stringKind) - return arrayBindingGo(wrapArray(stringKind, innerLen, innerMapping)) -} - -// The inner function of bindTypeGo, this finds the inner type of stringKind. -// (Or just the type itself if it is not an array or slice) -// The length of the matched part is returned, with the translated type. -func bindUnnestedTypeGo(stringKind string) (int, string) { - - switch { - case strings.HasPrefix(stringKind, "address"): - return len("address"), "common.Address" - - case strings.HasPrefix(stringKind, "bytes"): - parts := regexp.MustCompile(`bytes([0-9]*)`).FindStringSubmatch(stringKind) - return len(parts[0]), fmt.Sprintf("[%s]byte", parts[1]) - - case strings.HasPrefix(stringKind, "int") || strings.HasPrefix(stringKind, "uint"): - parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(stringKind) +// bindBasicTypeGo converts basic solidity types(except array, slice and tuple) to Go one. +func bindBasicTypeGo(kind abi.Type) string { + switch kind.T { + case abi.AddressTy: + return "common.Address" + case abi.IntTy, abi.UintTy: + parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(kind.String()) switch parts[2] { case "8", "16", "32", "64": - return len(parts[0]), fmt.Sprintf("%sint%s", parts[1], parts[2]) + return fmt.Sprintf("%sint%s", parts[1], parts[2]) } - return len(parts[0]), "*big.Int" - - case strings.HasPrefix(stringKind, "bool"): - return len("bool"), "bool" - - case strings.HasPrefix(stringKind, "string"): - return len("string"), "string" - + return "*big.Int" + case abi.FixedBytesTy: + return fmt.Sprintf("[%d]byte", kind.Size) + case abi.BytesTy: + return "[]byte" + case abi.FunctionTy: + return "[24]byte" default: - return len(stringKind), stringKind + // string, bool types + return kind.String() } } -// Translates the array sizes to a Java declaration of a (nested) array of the inner type. -// Simply returns the inner type if arraySizes is empty. -func arrayBindingJava(inner string, arraySizes []string) string { - // Java array type declarations do not include the length. - return inner + strings.Repeat("[]", len(arraySizes)) -} - -// bindTypeJava converts a Solidity type to a Java one. Since there is no clear mapping -// from all Solidity types to Java ones (e.g. uint17), those that cannot be exactly +// bindTypeGo converts solidity types to Go ones. Since there is no clear mapping +// from all Solidity types to Go ones (e.g. uint17), those that cannot be exactly // mapped will use an upscaled type (e.g. BigDecimal). -func bindTypeJava(kind abi.Type) string { - stringKind := kind.String() - innerLen, innerMapping := bindUnnestedTypeJava(stringKind) - return arrayBindingJava(wrapArray(stringKind, innerLen, innerMapping)) +func bindTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { + switch kind.T { + case abi.TupleTy: + return structs[kind.String()].Name + case abi.ArrayTy: + return fmt.Sprintf("[%d]", kind.Size) + bindTypeGo(*kind.Elem, structs) + case abi.SliceTy: + return "[]" + bindTypeGo(*kind.Elem, structs) + default: + return bindBasicTypeGo(kind) + } } -// The inner function of bindTypeJava, this finds the inner type of stringKind. -// (Or just the type itself if it is not an array or slice) -// The length of the matched part is returned, with the translated type. -func bindUnnestedTypeJava(stringKind string) (int, string) { - - switch { - case strings.HasPrefix(stringKind, "address"): - parts := regexp.MustCompile(`address(\[[0-9]*\])?`).FindStringSubmatch(stringKind) - if len(parts) != 2 { - return len(stringKind), stringKind - } - if parts[1] == "" { - return len("address"), "Address" - } - return len(parts[0]), "Addresses" - - case strings.HasPrefix(stringKind, "bytes"): - parts := regexp.MustCompile(`bytes([0-9]*)`).FindStringSubmatch(stringKind) - if len(parts) != 2 { - return len(stringKind), stringKind - } - return len(parts[0]), "byte[]" - - case strings.HasPrefix(stringKind, "int") || strings.HasPrefix(stringKind, "uint"): - //Note that uint and int (without digits) are also matched, +// bindBasicTypeJava converts basic solidity types(except array, slice and tuple) to Java one. +func bindBasicTypeJava(kind abi.Type) string { + switch kind.T { + case abi.AddressTy: + return "Address" + case abi.IntTy, abi.UintTy: + // Note that uint and int (without digits) are also matched, // these are size 256, and will translate to BigInt (the default). - parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(stringKind) + parts := regexp.MustCompile(`(u)?int([0-9]*)`).FindStringSubmatch(kind.String()) if len(parts) != 3 { - return len(stringKind), stringKind + return kind.String() + } + // All unsigned integers should be translated to BigInt since gomobile doesn't + // support them. + if parts[1] == "u" { + return "BigInt" } namedSize := map[string]string{ @@ -291,50 +279,146 @@ func bindUnnestedTypeJava(stringKind string) (int, string) { "64": "long", }[parts[2]] - //default to BigInt + // default to BigInt if namedSize == "" { namedSize = "BigInt" } - return len(parts[0]), namedSize - - case strings.HasPrefix(stringKind, "bool"): - return len("bool"), "boolean" + return namedSize + case abi.FixedBytesTy, abi.BytesTy: + return "byte[]" + case abi.BoolTy: + return "boolean" + case abi.StringTy: + return "String" + case abi.FunctionTy: + return "byte[24]" + default: + return kind.String() + } +} - case strings.HasPrefix(stringKind, "string"): - return len("string"), "String" +// pluralizeJavaType explicitly converts multidimensional types to predefined +// type in go side. +func pluralizeJavaType(typ string) string { + switch typ { + case "boolean": + return "Bools" + case "String": + return "Strings" + case "Address": + return "Addresses" + case "byte[]": + return "Binaries" + case "BigInt": + return "BigInts" + } + return typ + "[]" +} +// bindTypeJava converts a Solidity type to a Java one. Since there is no clear mapping +// from all Solidity types to Java ones (e.g. uint17), those that cannot be exactly +// mapped will use an upscaled type (e.g. BigDecimal). +func bindTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { + switch kind.T { + case abi.TupleTy: + return structs[kind.String()].Name + case abi.ArrayTy, abi.SliceTy: + return pluralizeJavaType(bindTypeJava(*kind.Elem, structs)) default: - return len(stringKind), stringKind + return bindBasicTypeJava(kind) } } // bindTopicType is a set of type binders that convert Solidity types to some // supported programming language topic types. -var bindTopicType = map[Lang]func(kind abi.Type) string{ +var bindTopicType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) string{ LangGo: bindTopicTypeGo, LangJava: bindTopicTypeJava, } -// bindTypeGo converts a Solidity topic type to a Go one. It is almost the same +// bindTopicTypeGo converts a Solidity topic type to a Go one. It is almost the same // funcionality as for simple types, but dynamic types get converted to hashes. -func bindTopicTypeGo(kind abi.Type) string { - bound := bindTypeGo(kind) +func bindTopicTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { + bound := bindTypeGo(kind, structs) if bound == "string" || bound == "[]byte" { bound = "common.Hash" } return bound } -// bindTypeGo converts a Solidity topic type to a Java one. It is almost the same +// bindTopicTypeJava converts a Solidity topic type to a Java one. It is almost the same // funcionality as for simple types, but dynamic types get converted to hashes. -func bindTopicTypeJava(kind abi.Type) string { - bound := bindTypeJava(kind) - if bound == "String" || bound == "Bytes" { +func bindTopicTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { + bound := bindTypeJava(kind, structs) + if bound == "String" || bound == "byte[]" { bound = "Hash" } return bound } +// bindStructType is a set of type binders that convert Solidity tuple types to some supported +// programming language struct definition. +var bindStructType = map[Lang]func(kind abi.Type, structs map[string]*tmplStruct) string{ + LangGo: bindStructTypeGo, + LangJava: bindStructTypeJava, +} + +// bindStructTypeGo converts a Solidity tuple type to a Go one and records the mapping +// in the given map. +// Notably, this function will resolve and record nested struct recursively. +func bindStructTypeGo(kind abi.Type, structs map[string]*tmplStruct) string { + switch kind.T { + case abi.TupleTy: + if s, exist := structs[kind.String()]; exist { + return s.Name + } + var fields []*tmplField + for i, elem := range kind.TupleElems { + field := bindStructTypeGo(*elem, structs) + fields = append(fields, &tmplField{Type: field, Name: capitalise(kind.TupleRawNames[i]), SolKind: *elem}) + } + name := fmt.Sprintf("Struct%d", len(structs)) + structs[kind.String()] = &tmplStruct{ + Name: name, + Fields: fields, + } + return name + case abi.ArrayTy: + return fmt.Sprintf("[%d]", kind.Size) + bindStructTypeGo(*kind.Elem, structs) + case abi.SliceTy: + return "[]" + bindStructTypeGo(*kind.Elem, structs) + default: + return bindBasicTypeGo(kind) + } +} + +// bindStructTypeJava converts a Solidity tuple type to a Java one and records the mapping +// in the given map. +// Notably, this function will resolve and record nested struct recursively. +func bindStructTypeJava(kind abi.Type, structs map[string]*tmplStruct) string { + switch kind.T { + case abi.TupleTy: + if s, exist := structs[kind.String()]; exist { + return s.Name + } + var fields []*tmplField + for i, elem := range kind.TupleElems { + field := bindStructTypeJava(*elem, structs) + fields = append(fields, &tmplField{Type: field, Name: decapitalise(kind.TupleRawNames[i]), SolKind: *elem}) + } + name := fmt.Sprintf("Class%d", len(structs)) + structs[kind.String()] = &tmplStruct{ + Name: name, + Fields: fields, + } + return name + case abi.ArrayTy, abi.SliceTy: + return pluralizeJavaType(bindStructTypeJava(*kind.Elem, structs)) + default: + return bindBasicTypeJava(kind) + } +} + // namedType is a set of functions that transform language specific types to // named versions that my be used inside method names. var namedType = map[Lang]func(string, abi.Type) string{ @@ -348,18 +432,8 @@ func namedTypeJava(javaKind string, solKind abi.Type) string { switch javaKind { case "byte[]": return "Binary" - case "byte[][]": - return "Binaries" - case "string": - return "String" - case "string[]": - return "Strings" case "boolean": return "Bool" - case "boolean[]": - return "Bools" - case "BigInt[]": - return "BigInts" default: parts := regexp.MustCompile(`(u)?int([0-9]*)(\[[0-9]*\])?`).FindStringSubmatch(solKind.String()) if len(parts) != 4 { @@ -422,3 +496,63 @@ func structured(args abi.Arguments) bool { } return true } + +// resolveArgName converts a raw argument representation into a user friendly format. +func resolveArgName(arg abi.Argument, structs map[string]*tmplStruct) string { + var ( + prefix string + embedded string + typ = &arg.Type + ) +loop: + for { + switch typ.T { + case abi.SliceTy: + prefix += "[]" + case abi.ArrayTy: + prefix += fmt.Sprintf("[%d]", typ.Size) + default: + embedded = typ.String() + break loop + } + typ = typ.Elem + } + if s, exist := structs[embedded]; exist { + return prefix + s.Name + } else { + return arg.Type.String() + } +} + +// formatMethod transforms raw method representation into a user friendly one. +func formatMethod(method abi.Method, structs map[string]*tmplStruct) string { + inputs := make([]string, len(method.Inputs)) + for i, input := range method.Inputs { + inputs[i] = fmt.Sprintf("%v %v", resolveArgName(input, structs), input.Name) + } + outputs := make([]string, len(method.Outputs)) + for i, output := range method.Outputs { + outputs[i] = resolveArgName(output, structs) + if len(output.Name) > 0 { + outputs[i] += fmt.Sprintf(" %v", output.Name) + } + } + constant := "" + if method.Const { + constant = "constant " + } + return fmt.Sprintf("function %v(%v) %sreturns(%v)", method.RawName, strings.Join(inputs, ", "), constant, strings.Join(outputs, ", ")) +} + +// formatEvent transforms raw event representation into a user friendly one. +func formatEvent(event abi.Event, structs map[string]*tmplStruct) string { + inputs := make([]string, len(event.Inputs)) + for i, input := range event.Inputs { + if input.Indexed { + inputs[i] = fmt.Sprintf("%v indexed %v", resolveArgName(input, structs), input.Name) + } else { + inputs[i] = fmt.Sprintf("%v %v", resolveArgName(input, structs), input.Name) + } + } + return fmt.Sprintf("event %v(%v)", event.RawName, strings.Join(inputs, ", ")) +} diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go index 46e0b38d0027..7dca3547c967 100644 --- a/accounts/abi/bind/bind_test.go +++ b/accounts/abi/bind/bind_test.go @@ -32,17 +32,20 @@ import ( var bindTests = []struct { name string contract string - bytecode string - abi string + bytecode []string + abi []string imports string tester string + fsigs []map[string]string + libs map[string]string + types []string }{ // Test that the binding is available in combined and separate forms too { `Empty`, `contract NilContract {}`, - `606060405260068060106000396000f3606060405200`, - `[]`, + []string{`606060405260068060106000396000f3606060405200`}, + []string{`[]`}, `"github.com/ethereum/go-ethereum/common"`, ` if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil { @@ -55,48 +58,60 @@ var bindTests = []struct { t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil) } `, + nil, + nil, + nil, }, // Test that all the official sample contracts bind correctly { `Token`, `https://ethereum.org/token`, - `60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`, - `[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`, + []string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`}, + []string{`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`}, `"github.com/ethereum/go-ethereum/common"`, ` if b, err := NewToken(common.Address{}, nil); b == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) } `, + nil, + nil, + nil, }, { `Crowdsale`, `https://ethereum.org/crowdsale`, - `606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`, - `[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`, + []string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`}, + []string{`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`}, `"github.com/ethereum/go-ethereum/common"`, ` if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) } `, + nil, + nil, + nil, }, { `DAO`, `https://ethereum.org/dao`, - `606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`, - `[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`, + []string{`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`}, + []string{`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`}, `"github.com/ethereum/go-ethereum/common"`, ` if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil { t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil) } `, + nil, + nil, + nil, }, // Test that named and anonymous inputs are handled correctly { - `InputChecker`, ``, ``, - ` + `InputChecker`, ``, []string{``}, + []string{` [ {"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]}, {"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]}, @@ -105,7 +120,7 @@ var bindTests = []struct { {"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]}, {"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]} ] - `, + `}, ` "fmt" @@ -125,11 +140,14 @@ var bindTests = []struct { fmt.Println(err) }`, + nil, + nil, + nil, }, // Test that named and anonymous outputs are handled correctly { - `OutputChecker`, ``, ``, - ` + `OutputChecker`, ``, []string{``}, + []string{` [ {"type":"function","name":"noOutput","constant":true,"inputs":[],"outputs":[]}, {"type":"function","name":"namedOutput","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"}]}, @@ -139,7 +157,7 @@ var bindTests = []struct { {"type":"function","name":"anonOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"","type":"string"}]}, {"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]} ] - `, + `}, ` "fmt" @@ -161,11 +179,14 @@ var bindTests = []struct { fmt.Println(str1, str2, res.Str1, res.Str2, err) }`, + nil, + nil, + nil, }, // Tests that named, anonymous and indexed events are handled correctly { - `EventChecker`, ``, ``, - ` + `EventChecker`, ``, []string{``}, + []string{` [ {"type":"event","name":"empty","inputs":[]}, {"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]}, @@ -173,7 +194,7 @@ var bindTests = []struct { {"type":"event","name":"anonymous","anonymous":true,"inputs":[]}, {"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]} ] - `, + `}, ` "fmt" "math/big" @@ -226,6 +247,9 @@ var bindTests = []struct { if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok { t.Errorf("binding has disallowed method (FilterAnonymous)") }`, + nil, + nil, + nil, }, // Test that contract interactions (deploy, transact and call) generate working code { @@ -244,8 +268,8 @@ var bindTests = []struct { } } `, - `6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`, - `[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`, + []string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`}, + []string{`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`}, ` "math/big" @@ -258,7 +282,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy an interaction tester contract and call a transaction on it _, _, interactor, err := DeployInteractor(auth, sim, "Deploy string") @@ -282,6 +308,9 @@ var bindTests = []struct { t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str) } `, + nil, + nil, + nil, }, // Tests that plain values can be properly returned and deserialized { @@ -293,8 +322,8 @@ var bindTests = []struct { } } `, - `606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`, - `[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`, + []string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, + []string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`}, ` "math/big" @@ -307,7 +336,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a tuple tester contract and execute a structured call on it _, _, getter, err := DeployGetter(auth, sim) @@ -322,6 +353,9 @@ var bindTests = []struct { t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1) } `, + nil, + nil, + nil, }, // Tests that tuples can be properly returned and deserialized { @@ -333,8 +367,8 @@ var bindTests = []struct { } } `, - `606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`, - `[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`, + []string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`}, + []string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`}, ` "math/big" @@ -347,7 +381,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a tuple tester contract and execute a structured call on it _, _, tupler, err := DeployTupler(auth, sim) @@ -362,6 +398,9 @@ var bindTests = []struct { t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1) } `, + nil, + nil, + nil, }, // Tests that arrays/slices can be properly returned and deserialized. // Only addresses are tested, remainder just compiled to keep the test small. @@ -383,8 +422,8 @@ var bindTests = []struct { } } `, - `606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`, - `[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`, + []string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`}, + []string{`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`}, ` "math/big" "reflect" @@ -399,7 +438,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a slice tester contract and execute a n array call on it _, _, slicer, err := DeploySlicer(auth, sim) @@ -414,6 +455,9 @@ var bindTests = []struct { t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}}) } `, + nil, + nil, + nil, }, // Tests that anonymous default methods can be correctly invoked { @@ -427,8 +471,8 @@ var bindTests = []struct { } } `, - `6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`, - `[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`, + []string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`}, + []string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`}, ` "math/big" @@ -441,7 +485,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a default method invoker contract and execute its default method _, _, defaulter, err := DeployDefaulter(auth, sim) @@ -459,6 +505,9 @@ var bindTests = []struct { t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From) } `, + nil, + nil, + nil, }, // Tests that non-existent contracts are reported as such (though only simulator test) { @@ -470,16 +519,19 @@ var bindTests = []struct { } } `, - `6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`, - `[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`, + []string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`}, + []string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, ` "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" `, ` // Create a simulator and wrap a non-deployed contract - sim := backends.NewSimulatedBackend(nil, uint64(10000000000)) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{}, uint64(10000000000)) + defer sim.Close() nonexistent, err := NewNonExistent(common.Address{}, sim) if err != nil { @@ -492,6 +544,9 @@ var bindTests = []struct { t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode) } `, + nil, + nil, + nil, }, // Tests that gas estimation works for contracts with weird gas mechanics too. { @@ -509,8 +564,8 @@ var bindTests = []struct { } } `, - `606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`, - `[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`, + []string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`}, + []string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`}, ` "math/big" @@ -523,7 +578,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a funky gas pattern contract _, _, limiter, err := DeployFunkyGasPattern(auth, sim) @@ -542,6 +599,9 @@ var bindTests = []struct { t.Fatalf("Field mismatch: have %v, want %v", field, "automatic") } `, + nil, + nil, + nil, }, // Test that constant functions can be called from an (optional) specified address { @@ -552,8 +612,8 @@ var bindTests = []struct { return msg.sender; } } - `, `6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`, - `[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`, + `, []string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`}, + []string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`}, ` "math/big" @@ -567,7 +627,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a sender tester contract and execute a structured call on it _, _, callfrom, err := DeployCallFrom(auth, sim) @@ -590,6 +652,9 @@ var bindTests = []struct { } } `, + nil, + nil, + nil, }, // Tests that methods and returns with underscores inside work correctly. { @@ -621,8 +686,8 @@ var bindTests = []struct { return 0; } } - `, `6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`, - `[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`, + `, []string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`}, + []string{`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`}, ` "fmt" "math/big" @@ -636,7 +701,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy a underscorer tester contract and execute a structured call on it _, _, underscorer, err := DeployUnderscorer(auth, sim) @@ -664,13 +731,16 @@ var bindTests = []struct { fmt.Println(a, b, err) `, + nil, + nil, + nil, }, // Tests that logs can be successfully filtered and decoded. { `Eventer`, ` contract Eventer { - event SimpleEvent ( + event SimpleEvent ( address indexed Addr, bytes32 indexed Id, bool indexed Flag, @@ -698,10 +768,18 @@ var bindTests = []struct { function raiseDynamicEvent(string str, bytes blob) { DynamicEvent(str, blob, str, blob); } + + event FixedBytesEvent ( + bytes24 indexed IndexedBytes, + bytes24 NonIndexedBytes + ); + function raiseFixedBytesEvent(bytes24 blob) { + FixedBytesEvent(blob, blob); + } } `, - `6060604052341561000f57600080fd5b61042c8061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063528300ff1461005c578063630c31e2146100fc578063c7d116dd14610156575b600080fd5b341561006757600080fd5b6100fa600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610194565b005b341561010757600080fd5b610154600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080351515906020019091908035906020019091905050610367565b005b341561016157600080fd5b610192600480803590602001909190803560010b90602001909190803563ffffffff169060200190919050506103c3565b005b806040518082805190602001908083835b6020831015156101ca57805182526020820191506020810190506020830392506101a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826040518082805190602001908083835b60208310151561022d5780518252602082019150602081019050602083039250610208565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561032757808201518184015260208101905061030c565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b81151583600019168573ffffffffffffffffffffffffffffffffffffffff167f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8846040518082815260200191505060405180910390a450505050565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820d1f8a8bbddbc5bb29f285891d6ae1eef8420c52afdc05e1573f6114d8e1714710029`, - `[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"}]`, + []string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`}, + []string{`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`}, ` "math/big" "time" @@ -716,7 +794,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() // Deploy an eventer contract _, _, eventer, err := DeployEventer(auth, sim) @@ -812,6 +892,33 @@ var bindTests = []struct { if err = dit.Error(); err != nil { t.Fatalf("dynamic event iteration failed: %v", err) } + // Test raising and filtering for events with fixed bytes components + var fblob [24]byte + copy(fblob[:], []byte("Fixed Bytes")) + + if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil { + t.Fatalf("failed to raise fixed bytes event: %v", err) + } + sim.Commit() + + fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob}) + if err != nil { + t.Fatalf("failed to filter for fixed bytes events: %v", err) + } + defer fit.Close() + + if !fit.Next() { + t.Fatalf("fixed bytes log not found: %v", fit.Error()) + } + if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob { + t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob) + } + if fit.Next() { + t.Errorf("unexpected fixed bytes event found: %+v", fit.Event) + } + if err = fit.Error(); err != nil { + t.Fatalf("fixed bytes event iteration failed: %v", err) + } // Test subscribing to an event and raising it afterwards ch := make(chan *EventerSimpleEvent, 16) sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil) @@ -845,6 +952,9 @@ var bindTests = []struct { case <-time.After(250 * time.Millisecond): } `, + nil, + nil, + nil, }, { `DeeplyNestedArray`, @@ -859,8 +969,8 @@ var bindTests = []struct { } } `, - `6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`, - `[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`, + []string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`}, + []string{`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`}, ` "math/big" @@ -873,7 +983,9 @@ var bindTests = []struct { // Generate a new random account and a funded simulator key, _ := crypto.GenerateKey() auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() //deploy the test contract _, _, testContract, err := DeployDeeplyNestedArray(auth, sim) @@ -920,12 +1032,353 @@ var bindTests = []struct { t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err) } `, + nil, + nil, + nil, + }, + { + `CallbackParam`, + ` + contract FunctionPointerTest { + function test(function(uint256) external callback) external { + callback(1); + } + } + `, + []string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`}, + []string{`[ + { + "constant": false, + "inputs": [ + { + "name": "callback", + "type": "function" + } + ], + "name": "test", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ]`}, ` + "strings" + `, + ` + if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 { + t.Fatalf("") + } + `, + []map[string]string{ + { + "test(function)": "d7a5aba2", + }, + }, + nil, + nil, + }, { + `Tuple`, + ` + pragma solidity >=0.4.19 <0.6.0; + pragma experimental ABIEncoderV2; + + contract Tuple { + struct S { uint a; uint[] b; T[] c; } + struct T { uint x; uint y; } + event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e); + + function func1(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public pure returns (S memory, T[2][] memory, T[][2] memory, S[] memory, uint[] memory) { + return (a, b, c, d, e); + } + function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public { + emit TupleEvent(a, b, c, d, e); + } + } + + `, + []string{`608060405234801561001057600080fd5b50610eb2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063443c79b41461003b578063d0062cdd1461006f575b600080fd5b61005560048036036100509190810190610624565b61008b565b604051610066959493929190610b28565b60405180910390f35b61008960048036036100849190810190610624565b6100bc565b005b610093610102565b606061009d610123565b6060808989898989945094509450945094509550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd0085858585856040516100f3959493929190610b28565b60405180910390a15050505050565b60405180606001604052806000815260200160608152602001606081525090565b60405180604001604052806002905b60608152602001906001900390816101325790505090565b600082601f83011261015b57600080fd5b813561016e61016982610bcb565b610b9e565b9150818183526020840193506020810190508385608084028201111561019357600080fd5b60005b838110156101c357816101a988826102a6565b845260208401935060808301925050600181019050610196565b5050505092915050565b600082601f8301126101de57600080fd5b60026101f16101ec82610bf3565b610b9e565b9150818360005b83811015610228578135860161020e888261031a565b8452602084019350602083019250506001810190506101f8565b5050505092915050565b600082601f83011261024357600080fd5b813561025661025182610c15565b610b9e565b9150818183526020840193506020810190508360005b8381101561029c578135860161028288826104a3565b84526020840193506020830192505060018101905061026c565b5050505092915050565b600082601f8301126102b757600080fd5b60026102ca6102c582610c3d565b610b9e565b915081838560408402820111156102e057600080fd5b60005b8381101561031057816102f688826105c3565b8452602084019350604083019250506001810190506102e3565b5050505092915050565b600082601f83011261032b57600080fd5b813561033e61033982610c5f565b610b9e565b9150818183526020840193506020810190508385604084028201111561036357600080fd5b60005b83811015610393578161037988826105c3565b845260208401935060408301925050600181019050610366565b5050505092915050565b600082601f8301126103ae57600080fd5b81356103c16103bc82610c87565b610b9e565b915081818352602084019350602081019050838560208402820111156103e657600080fd5b60005b8381101561041657816103fc888261060f565b8452602084019350602083019250506001810190506103e9565b5050505092915050565b600082601f83011261043157600080fd5b813561044461043f82610caf565b610b9e565b9150818183526020840193506020810190508385602084028201111561046957600080fd5b60005b83811015610499578161047f888261060f565b84526020840193506020830192505060018101905061046c565b5050505092915050565b6000606082840312156104b557600080fd5b6104bf6060610b9e565b905060006104cf8482850161060f565b600083015250602082013567ffffffffffffffff8111156104ef57600080fd5b6104fb8482850161039d565b602083015250604082013567ffffffffffffffff81111561051b57600080fd5b6105278482850161031a565b60408301525092915050565b60006060828403121561054557600080fd5b61054f6060610b9e565b9050600061055f8482850161060f565b600083015250602082013567ffffffffffffffff81111561057f57600080fd5b61058b8482850161039d565b602083015250604082013567ffffffffffffffff8111156105ab57600080fd5b6105b78482850161031a565b60408301525092915050565b6000604082840312156105d557600080fd5b6105df6040610b9e565b905060006105ef8482850161060f565b60008301525060206106038482850161060f565b60208301525092915050565b60008135905061061e81610e58565b92915050565b600080600080600060a0868803121561063c57600080fd5b600086013567ffffffffffffffff81111561065657600080fd5b61066288828901610533565b955050602086013567ffffffffffffffff81111561067f57600080fd5b61068b8882890161014a565b945050604086013567ffffffffffffffff8111156106a857600080fd5b6106b4888289016101cd565b935050606086013567ffffffffffffffff8111156106d157600080fd5b6106dd88828901610232565b925050608086013567ffffffffffffffff8111156106fa57600080fd5b61070688828901610420565b9150509295509295909350565b600061071f83836108cb565b60808301905092915050565b60006107378383610922565b905092915050565b600061074b8383610a93565b905092915050565b600061075f8383610aea565b60408301905092915050565b60006107778383610b19565b60208301905092915050565b600061078e82610d3b565b6107988185610de3565b93506107a383610cd7565b8060005b838110156107d45781516107bb8882610713565b97506107c683610d88565b9250506001810190506107a7565b5085935050505092915050565b60006107ec82610d46565b6107f68185610df4565b93508360208202850161080885610ce7565b8060005b858110156108445784840389528151610825858261072b565b945061083083610d95565b925060208a0199505060018101905061080c565b50829750879550505050505092915050565b600061086182610d51565b61086b8185610dff565b93508360208202850161087d85610cf1565b8060005b858110156108b9578484038952815161089a858261073f565b94506108a583610da2565b925060208a01995050600181019050610881565b50829750879550505050505092915050565b6108d481610d5c565b6108de8184610e10565b92506108e982610d01565b8060005b8381101561091a5781516109018782610753565b965061090c83610daf565b9250506001810190506108ed565b505050505050565b600061092d82610d67565b6109378185610e1b565b935061094283610d0b565b8060005b8381101561097357815161095a8882610753565b975061096583610dbc565b925050600181019050610946565b5085935050505092915050565b600061098b82610d7d565b6109958185610e3d565b93506109a083610d2b565b8060005b838110156109d15781516109b8888261076b565b97506109c383610dd6565b9250506001810190506109a4565b5085935050505092915050565b60006109e982610d72565b6109f38185610e2c565b93506109fe83610d1b565b8060005b83811015610a2f578151610a16888261076b565b9750610a2183610dc9565b925050600181019050610a02565b5085935050505092915050565b6000606083016000830151610a546000860182610b19565b5060208301518482036020860152610a6c82826109de565b91505060408301518482036040860152610a868282610922565b9150508091505092915050565b6000606083016000830151610aab6000860182610b19565b5060208301518482036020860152610ac382826109de565b91505060408301518482036040860152610add8282610922565b9150508091505092915050565b604082016000820151610b006000850182610b19565b506020820151610b136020850182610b19565b50505050565b610b2281610e4e565b82525050565b600060a0820190508181036000830152610b428188610a3c565b90508181036020830152610b568187610783565b90508181036040830152610b6a81866107e1565b90508181036060830152610b7e8185610856565b90508181036080830152610b928184610980565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610bc157600080fd5b8060405250919050565b600067ffffffffffffffff821115610be257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c0a57600080fd5b602082029050919050565b600067ffffffffffffffff821115610c2c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c5457600080fd5b602082029050919050565b600067ffffffffffffffff821115610c7657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610c9e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610cc657600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000819050919050565b610e6181610e4e565b8114610e6c57600080fd5b5056fea365627a7a72305820405a6336d8c302cee779de6788527018e5a2393892328fbf12b96065df2de00a6c6578706572696d656e74616cf564736f6c634300050a0040`}, + []string{` + [{"constant":true,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"d","type":"tuple[]"},{"name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"","type":"tuple[]"},{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"name":"d","type":"tuple[]"},{"name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"indexed":false,"name":"a","type":"tuple"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"indexed":false,"name":"b","type":"tuple[2][]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"indexed":false,"name":"c","type":"tuple[][2]"},{"components":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256[]"},{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"c","type":"tuple[]"}],"indexed":false,"name":"d","type":"tuple[]"},{"indexed":false,"name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"}] + `}, + ` + "math/big" + "reflect" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" + `, + + ` + key, _ := crypto.GenerateKey() + auth := bind.NewKeyedTransactor(key) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() + + _, _, contract, err := DeployTuple(auth, sim) + if err != nil { + t.Fatalf("deploy contract failed %v", err) + } + sim.Commit() + + check := func(a, b interface{}, errMsg string) { + if !reflect.DeepEqual(a, b) { + t.Fatal(errMsg) + } + } + + a := Struct1{ + A: big.NewInt(1), + B: []*big.Int{big.NewInt(2), big.NewInt(3)}, + C: []Struct0{ + { + X: big.NewInt(4), + Y: big.NewInt(5), + }, + { + X: big.NewInt(6), + Y: big.NewInt(7), + }, + }, + } + + b := [][2]Struct0{ + { + { + X: big.NewInt(8), + Y: big.NewInt(9), + }, + { + X: big.NewInt(10), + Y: big.NewInt(11), + }, + }, + } + + c := [2][]Struct0{ + { + { + X: big.NewInt(12), + Y: big.NewInt(13), + }, + { + X: big.NewInt(14), + Y: big.NewInt(15), + }, + }, + { + { + X: big.NewInt(16), + Y: big.NewInt(17), + }, + }, + } + + d := []Struct1{a} + + e := []*big.Int{big.NewInt(18), big.NewInt(19)} + ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e) + if err != nil { + t.Fatalf("invoke contract failed, err %v", err) + } + check(ret1, a, "ret1 mismatch") + check(ret2, b, "ret2 mismatch") + check(ret3, c, "ret3 mismatch") + check(ret4, d, "ret4 mismatch") + check(ret5, e, "ret5 mismatch") + + _, err = contract.Func2(auth, a, b, c, d, e) + if err != nil { + t.Fatalf("invoke contract failed, err %v", err) + } + sim.Commit() + + iter, err := contract.FilterTupleEvent(nil) + if err != nil { + t.Fatalf("failed to create event filter, err %v", err) + } + defer iter.Close() + + iter.Next() + check(iter.Event.A, a, "field1 mismatch") + check(iter.Event.B, b, "field2 mismatch") + check(iter.Event.C, c, "field3 mismatch") + check(iter.Event.D, d, "field4 mismatch") + check(iter.Event.E, e, "field5 mismatch") + `, + nil, + nil, + nil, + }, + { + `UseLibrary`, + ` + library Math { + function add(uint a, uint b) public view returns(uint) { + return a + b; + } + } + + contract UseLibrary { + function add (uint c, uint d) public view returns(uint) { + return Math.add(c,d); + } + } + `, + []string{ + // Bytecode for the UseLibrary contract + `608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`, + // Bytecode for the Math contract + `60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`, + }, + []string{ + `[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, + `[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`, + }, + ` + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" + `, + ` + // Generate a new random account and a funded simulator + key, _ := crypto.GenerateKey() + auth := bind.NewKeyedTransactor(key) + + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() + + //deploy the test contract + _, _, testContract, err := DeployUseLibrary(auth, sim) + if err != nil { + t.Fatalf("Failed to deploy test contract: %v", err) + } + + // Finish deploy. + sim.Commit() + + // Check that the library contract has been deployed + // by calling the contract's add function. + res, err := testContract.Add(&bind.CallOpts{ + From: auth.From, + Pending: false, + }, big.NewInt(1), big.NewInt(2)) + if err != nil { + t.Fatalf("Failed to call linked contract: %v", err) + } + if res.Cmp(big.NewInt(3)) != 0 { + t.Fatalf("Add did not return the correct result: %d != %d", res, 3) + } + `, + nil, + map[string]string{ + "b98c933f0a6ececcd167bd4f9d3299b1a0": "Math", + }, + []string{"UseLibrary", "Math"}, + }, { + "Overload", + ` + pragma solidity ^0.5.10; + + contract overload { + mapping(address => uint256) balances; + + event bar(uint256 i); + event bar(uint256 i, uint256 j); + + function foo(uint256 i) public { + emit bar(i); + } + function foo(uint256 i, uint256 j) public { + emit bar(i, j); + } + } + `, + []string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`}, + []string{`[{"constant":false,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]`}, + ` + "math/big" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" + `, + ` + // Initialize test accounts + key, _ := crypto.GenerateKey() + auth := bind.NewKeyedTransactor(key) + sim := backends.NewSimulatedBackend(core.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}}, 10000000) + defer sim.Close() + + // deploy the test contract + _, _, contract, err := DeployOverload(auth, sim) + if err != nil { + t.Fatalf("Failed to deploy contract: %v", err) + } + // Finish deploy. + sim.Commit() + + resCh, stopCh := make(chan uint64), make(chan struct{}) + + go func() { + barSink := make(chan *OverloadBar) + sub, _ := contract.WatchBar(nil, barSink) + defer sub.Unsubscribe() + + bar0Sink := make(chan *OverloadBar0) + sub0, _ := contract.WatchBar0(nil, bar0Sink) + defer sub0.Unsubscribe() + + for { + select { + case ev := <-barSink: + resCh <- ev.I.Uint64() + case ev := <-bar0Sink: + resCh <- ev.I.Uint64() + ev.J.Uint64() + case <-stopCh: + return + } + } + }() + contract.Foo(auth, big.NewInt(1), big.NewInt(2)) + sim.Commit() + select { + case n := <-resCh: + if n != 3 { + t.Fatalf("Invalid bar0 event") + } + case <-time.NewTimer(100 * time.Millisecond).C: + t.Fatalf("Wait bar0 event timeout") + } + + contract.Foo0(auth, big.NewInt(1)) + sim.Commit() + select { + case n := <-resCh: + if n != 1 { + t.Fatalf("Invalid bar event") + } + case <-time.NewTimer(100 * time.Millisecond).C: + t.Fatalf("Wait bar event timeout") + } + close(stopCh) + `, + nil, + nil, + nil, }, } // Tests that packages generated by the binder can be successfully compiled and // the requested tester run against it. -func TestBindings(t *testing.T) { +func TestGolangBindings(t *testing.T) { // Skip the test if no Go command can be found gocmd := runtime.GOROOT() + "/bin/go" if !common.FileExist(gocmd) { @@ -944,8 +1397,14 @@ func TestBindings(t *testing.T) { } // Generate the test suite for all the contracts for i, tt := range bindTests { + var types []string + if tt.types != nil { + types = tt.types + } else { + types = []string{tt.name} + } // Generate the binding and create a Go source file in the workspace - bind, err := Bind([]string{tt.name}, []string{tt.abi}, []string{tt.bytecode}, "bindtest", LangGo) + bind, err := Bind(types, tt.abi, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs) if err != nil { t.Fatalf("test %d: failed to generate binding: %v", i, err) } @@ -976,3 +1435,404 @@ func TestBindings(t *testing.T) { t.Fatalf("failed to run binding test: %v\n%s", err, out) } } + +// Tests that java binding generated by the binder is exactly matched. +func TestJavaBindings(t *testing.T) { + var cases = []struct { + name string + contract string + abi string + bytecode string + expected string + }{ + { + "test", + ` + pragma experimental ABIEncoderV2; + pragma solidity ^0.5.2; + + contract test { + function setAddress(address a) public returns(address){} + function setAddressList(address[] memory a_l) public returns(address[] memory){} + function setAddressArray(address[2] memory a_a) public returns(address[2] memory){} + + function setUint8(uint8 u8) public returns(uint8){} + function setUint16(uint16 u16) public returns(uint16){} + function setUint32(uint32 u32) public returns(uint32){} + function setUint64(uint64 u64) public returns(uint64){} + function setUint256(uint256 u256) public returns(uint256){} + function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){} + function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){} + + function setInt8(int8 i8) public returns(int8){} + function setInt16(int16 i16) public returns(int16){} + function setInt32(int32 i32) public returns(int32){} + function setInt64(int64 i64) public returns(int64){} + function setInt256(int256 i256) public returns(int256){} + function setInt256List(int256[] memory i256_l) public returns(int256[] memory){} + function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){} + + function setBytes1(bytes1 b1) public returns(bytes1) {} + function setBytes32(bytes32 b32) public returns(bytes32) {} + function setBytes(bytes memory bs) public returns(bytes memory) {} + function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {} + function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {} + + function setString(string memory s) public returns(string memory) {} + function setStringList(string[] memory s_l) public returns(string[] memory) {} + function setStringArray(string[2] memory s_a) public returns(string[2] memory) {} + + function setBool(bool b) public returns(bool) {} + function setBoolList(bool[] memory b_l) public returns(bool[] memory) {} + function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {} + }`, + `[{"constant":false,"inputs":[{"name":"u16","type":"uint16"}],"name":"setUint16","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_a","type":"bool[2]"}],"name":"setBoolArray","outputs":[{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_a","type":"address[2]"}],"name":"setAddressArray","outputs":[{"name":"","type":"address[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_l","type":"bytes[]"}],"name":"setBytesList","outputs":[{"name":"","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u8","type":"uint8"}],"name":"setUint8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u32","type":"uint32"}],"name":"setUint32","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b","type":"bool"}],"name":"setBool","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_l","type":"int256[]"}],"name":"setInt256List","outputs":[{"name":"","type":"int256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_a","type":"uint256[2]"}],"name":"setUint256Array","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_l","type":"bool[]"}],"name":"setBoolList","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_a","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"name":"","type":"bytes[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_l","type":"address[]"}],"name":"setAddressList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_a","type":"int256[2]"}],"name":"setInt256Array","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_a","type":"string[2]"}],"name":"setStringArray","outputs":[{"name":"","type":"string[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s","type":"string"}],"name":"setString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u64","type":"uint64"}],"name":"setUint64","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i16","type":"int16"}],"name":"setInt16","outputs":[{"name":"","type":"int16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i8","type":"int8"}],"name":"setInt8","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_l","type":"uint256[]"}],"name":"setUint256List","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256","type":"int256"}],"name":"setInt256","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i32","type":"int32"}],"name":"setInt32","outputs":[{"name":"","type":"int32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b32","type":"bytes32"}],"name":"setBytes32","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_l","type":"string[]"}],"name":"setStringList","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256","type":"uint256"}],"name":"setUint256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs","type":"bytes"}],"name":"setBytes","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"}],"name":"setAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i64","type":"int64"}],"name":"setInt64","outputs":[{"name":"","type":"int64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b1","type":"bytes1"}],"name":"setBytes1","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]`, + `608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`, + ` +// This file is an automatically generated Java binding. Do not modify as any +// change will likely be lost upon the next re-generation! + +package bindtest; + +import org.ethereum.geth.*; +import java.util.*; + + + +public class Test { + // ABI is the input ABI used to generate the binding from. + public final static String ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"u16\",\"type\":\"uint16\"}],\"name\":\"setUint16\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_a\",\"type\":\"bool[2]\"}],\"name\":\"setBoolArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_a\",\"type\":\"address[2]\"}],\"name\":\"setAddressArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_l\",\"type\":\"bytes[]\"}],\"name\":\"setBytesList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u8\",\"type\":\"uint8\"}],\"name\":\"setUint8\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u32\",\"type\":\"uint32\"}],\"name\":\"setUint32\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_l\",\"type\":\"int256[]\"}],\"name\":\"setInt256List\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_a\",\"type\":\"uint256[2]\"}],\"name\":\"setUint256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_l\",\"type\":\"bool[]\"}],\"name\":\"setBoolList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_a\",\"type\":\"bytes[2]\"}],\"name\":\"setBytesArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_l\",\"type\":\"address[]\"}],\"name\":\"setAddressList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_a\",\"type\":\"int256[2]\"}],\"name\":\"setInt256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_a\",\"type\":\"string[2]\"}],\"name\":\"setStringArray\",\"outputs\":[{\"name\":\"\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"setString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u64\",\"type\":\"uint64\"}],\"name\":\"setUint64\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i16\",\"type\":\"int16\"}],\"name\":\"setInt16\",\"outputs\":[{\"name\":\"\",\"type\":\"int16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i8\",\"type\":\"int8\"}],\"name\":\"setInt8\",\"outputs\":[{\"name\":\"\",\"type\":\"int8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_l\",\"type\":\"uint256[]\"}],\"name\":\"setUint256List\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256\",\"type\":\"int256\"}],\"name\":\"setInt256\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i32\",\"type\":\"int32\"}],\"name\":\"setInt32\",\"outputs\":[{\"name\":\"\",\"type\":\"int32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b32\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_l\",\"type\":\"string[]\"}],\"name\":\"setStringList\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256\",\"type\":\"uint256\"}],\"name\":\"setUint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs\",\"type\":\"bytes\"}],\"name\":\"setBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i64\",\"type\":\"int64\"}],\"name\":\"setInt64\",\"outputs\":[{\"name\":\"\",\"type\":\"int64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b1\",\"type\":\"bytes1\"}],\"name\":\"setBytes1\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes1\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"; + + + // BYTECODE is the compiled bytecode used for deploying new contracts. + public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037"; + + // deploy deploys a new Ethereum contract, binding an instance of Test to it. + public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception { + Interfaces args = Geth.newInterfaces(0); + String bytecode = BYTECODE; + + + return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args)); + } + + // Internal constructor used by contract deployment. + private Test(BoundContract deployment) { + this.Address = deployment.getAddress(); + this.Deployer = deployment.getDeployer(); + this.Contract = deployment; + } + + + // Ethereum address where this contract is located at. + public final Address Address; + + // Ethereum transaction in which this contract was deployed (if known!). + public final Transaction Deployer; + + // Contract instance bound to a blockchain address. + private final BoundContract Contract; + + // Creates a new instance of Test, bound to a specific deployed contract. + public Test(Address address, EthereumClient client) throws Exception { + this(Geth.bindContract(address, ABI, client)); + } + + + + + // setAddress is a paid mutator transaction binding the contract method 0xe30081a0. + // + // Solidity: function setAddress(address a) returns(address) + public Transaction setAddress(TransactOpts opts, Address a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0); + + return this.Contract.transact(opts, "setAddress" , args); + } + + // setAddressArray is a paid mutator transaction binding the contract method 0x151f5471. + // + // Solidity: function setAddressArray(address[2] a_a) returns(address[2]) + public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setAddressArray" , args); + } + + // setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e. + // + // Solidity: function setAddressList(address[] a_l) returns(address[]) + public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setAddressList" , args); + } + + // setBool is a paid mutator transaction binding the contract method 0x1e26fd33. + // + // Solidity: function setBool(bool b) returns(bool) + public Transaction setBool(TransactOpts opts, boolean b) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0); + + return this.Contract.transact(opts, "setBool" , args); + } + + // setBoolArray is a paid mutator transaction binding the contract method 0x118a9718. + // + // Solidity: function setBoolArray(bool[2] b_a) returns(bool[2]) + public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setBoolArray" , args); + } + + // setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da. + // + // Solidity: function setBoolList(bool[] b_l) returns(bool[]) + public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setBoolList" , args); + } + + // setBytes is a paid mutator transaction binding the contract method 0xda359dc8. + // + // Solidity: function setBytes(bytes bs) returns(bytes) + public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0); + + return this.Contract.transact(opts, "setBytes" , args); + } + + // setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3. + // + // Solidity: function setBytes1(bytes1 b1) returns(bytes1) + public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0); + + return this.Contract.transact(opts, "setBytes1" , args); + } + + // setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73. + // + // Solidity: function setBytes32(bytes32 b32) returns(bytes32) + public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0); + + return this.Contract.transact(opts, "setBytes32" , args); + } + + // setBytesArray is a paid mutator transaction binding the contract method 0x5119655d. + // + // Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2]) + public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setBytesArray" , args); + } + + // setBytesList is a paid mutator transaction binding the contract method 0x16c105e2. + // + // Solidity: function setBytesList(bytes[] bs_l) returns(bytes[]) + public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setBytesList" , args); + } + + // setInt16 is a paid mutator transaction binding the contract method 0x86114cea. + // + // Solidity: function setInt16(int16 i16) returns(int16) + public Transaction setInt16(TransactOpts opts, short i16) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt16" , args); + } + + // setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e. + // + // Solidity: function setInt256(int256 i256) returns(int256) + public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt256" , args); + } + + // setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc. + // + // Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2]) + public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt256Array" , args); + } + + // setInt256List is a paid mutator transaction binding the contract method 0x22722302. + // + // Solidity: function setInt256List(int256[] i256_l) returns(int256[]) + public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt256List" , args); + } + + // setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31. + // + // Solidity: function setInt32(int32 i32) returns(int32) + public Transaction setInt32(TransactOpts opts, int i32) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt32" , args); + } + + // setInt64 is a paid mutator transaction binding the contract method 0xe673eb32. + // + // Solidity: function setInt64(int64 i64) returns(int64) + public Transaction setInt64(TransactOpts opts, long i64) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt64" , args); + } + + // setInt8 is a paid mutator transaction binding the contract method 0x9a19a953. + // + // Solidity: function setInt8(int8 i8) returns(int8) + public Transaction setInt8(TransactOpts opts, byte i8) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0); + + return this.Contract.transact(opts, "setInt8" , args); + } + + // setString is a paid mutator transaction binding the contract method 0x7fcaf666. + // + // Solidity: function setString(string s) returns(string) + public Transaction setString(TransactOpts opts, String s) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0); + + return this.Contract.transact(opts, "setString" , args); + } + + // setStringArray is a paid mutator transaction binding the contract method 0x7173b695. + // + // Solidity: function setStringArray(string[2] s_a) returns(string[2]) + public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setStringArray" , args); + } + + // setStringList is a paid mutator transaction binding the contract method 0xc5777961. + // + // Solidity: function setStringList(string[] s_l) returns(string[]) + public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setStringList" , args); + } + + // setUint16 is a paid mutator transaction binding the contract method 0x0477988a. + // + // Solidity: function setUint16(uint16 u16) returns(uint16) + public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint16" , args); + } + + // setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5. + // + // Solidity: function setUint256(uint256 u256) returns(uint256) + public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint256" , args); + } + + // setUint256Array is a paid mutator transaction binding the contract method 0x2766a755. + // + // Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2]) + public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint256Array" , args); + } + + // setUint256List is a paid mutator transaction binding the contract method 0xa0709e19. + // + // Solidity: function setUint256List(uint256[] u256_l) returns(uint256[]) + public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint256List" , args); + } + + // setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2. + // + // Solidity: function setUint32(uint32 u32) returns(uint32) + public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint32" , args); + } + + // setUint64 is a paid mutator transaction binding the contract method 0x822cba69. + // + // Solidity: function setUint64(uint64 u64) returns(uint64) + public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint64" , args); + } + + // setUint8 is a paid mutator transaction binding the contract method 0x1774e646. + // + // Solidity: function setUint8(uint8 u8) returns(uint8) + public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception { + Interfaces args = Geth.newInterfaces(1); + Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0); + + return this.Contract.transact(opts, "setUint8" , args); + } + +} + +`, + }, + } + for i, c := range cases { + binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, nil, "bindtest", LangJava, nil) + if err != nil { + t.Fatalf("test %d: failed to generate binding: %v", i, err) + } + if binding != c.expected { + t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected) + } + } +} diff --git a/accounts/abi/bind/template.go b/accounts/abi/bind/template.go index 02d0258e0cbb..4ec65474b050 100644 --- a/accounts/abi/bind/template.go +++ b/accounts/abi/bind/template.go @@ -22,6 +22,7 @@ import "github.com/ethereum/go-ethereum/accounts/abi" type tmplData struct { Package string // Name of the package to place the generated file in Contracts map[string]*tmplContract // List of contracts to generate into this file + Libraries map[string]string // Map the bytecode's link pattern to the library name } // tmplContract contains the data needed to generate an individual contract binding. @@ -29,10 +30,14 @@ type tmplContract struct { Type string // Type name of the main contract binding InputABI string // JSON ABI used as the input to generate the binding from InputBin string // Optional EVM bytecode used to denetare deploy code from + FuncSigs map[string]string // Optional map: string signature -> 4-byte signature Constructor abi.Method // Contract constructor for deploy parametrization Calls map[string]*tmplMethod // Contract calls that only read state data Transacts map[string]*tmplMethod // Contract calls that write state data Events map[string]*tmplEvent // Contract events accessors + Libraries map[string]string // Same as tmplData, but filtered to only keep what the contract needs + Structs map[string]*tmplStruct // Contract struct type definitions + Library bool } // tmplMethod is a wrapper around an abi.Method that contains a few preprocessed @@ -49,6 +54,21 @@ type tmplEvent struct { Normalized abi.Event // Normalized version of the parsed fields } +// tmplField is a wrapper around a struct field with binding language +// struct type definition and relative filed name. +type tmplField struct { + Type string // Field type representation depends on target binding language + Name string // Field name converted from the raw user-defined field name + SolKind abi.Type // Raw abi type information +} + +// tmplStruct is a wrapper around an abi.tuple contains a auto-generated +// struct name. +type tmplStruct struct { + Name string // Auto-generated struct name(We can't obtain the raw struct name through abi) + Fields []*tmplField // Struct fields definition depends on the binding language. +} + // tmplSource is language to template mapping containing all the supported // programming languages the package can generate to. var tmplSource = map[Lang]string{ @@ -89,19 +109,32 @@ var ( ) {{range $contract := .Contracts}} + {{$structs := $contract.Structs}} // {{.Type}}ABI is the input ABI used to generate the binding from. const {{.Type}}ABI = "{{.InputABI}}" + {{if $contract.FuncSigs}} + // {{.Type}}FuncSigs maps the 4-byte function signature to its string representation. + var {{.Type}}FuncSigs = map[string]string{ + {{range $strsig, $binsig := .FuncSigs}}"{{$binsig}}": "{{$strsig}}", + {{end}} + } + {{end}} + {{if .InputBin}} // {{.Type}}Bin is the compiled bytecode used for deploying new contracts. - const {{.Type}}Bin = ` + "`" + `{{.InputBin}}` + "`" + ` + var {{.Type}}Bin = "0x{{.InputBin}}" // Deploy{{.Type}} deploys a new Ethereum contract, binding an instance of {{.Type}} to it. - func Deploy{{.Type}}(auth *bind.TransactOpts, backend bind.ContractBackend {{range .Constructor.Inputs}}, {{.Name}} {{bindtype .Type}}{{end}}) (common.Address, *types.Transaction, *{{.Type}}, error) { + func Deploy{{.Type}}(auth *bind.TransactOpts, backend bind.ContractBackend {{range .Constructor.Inputs}}, {{.Name}} {{bindtype .Type $structs}}{{end}}) (common.Address, *types.Transaction, *{{.Type}}, error) { parsed, err := abi.JSON(strings.NewReader({{.Type}}ABI)) if err != nil { return common.Address{}, nil, nil, err } + {{range $pattern, $name := .Libraries}} + {{decapitalise $name}}Addr, _, _, _ := Deploy{{capitalise $name}}(auth, backend) + {{$contract.Type}}Bin = strings.Replace({{$contract.Type}}Bin, "__${{$pattern}}$__", {{decapitalise $name}}Addr.String()[2:], -1) + {{end}} address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex({{.Type}}Bin), backend {{range .Constructor.Inputs}}, {{.Name}}{{end}}) if err != nil { return common.Address{}, nil, nil, err @@ -114,7 +147,7 @@ var ( type {{.Type}} struct { {{.Type}}Caller // Read-only binding to the contract {{.Type}}Transactor // Write-only binding to the contract - {{.Type}}Filterer // Log filterer for contract events + {{.Type}}Filterer // Log filterer for contract events } // {{.Type}}Caller is an auto generated read-only Go binding around an Ethereum contract. @@ -252,16 +285,24 @@ var ( return _{{$contract.Type}}.Contract.contract.Transact(opts, method, params...) } + {{range .Structs}} + // {{.Name}} is an auto generated low-level Go binding around an user-defined struct. + type {{.Name}} struct { + {{range $field := .Fields}} + {{$field.Name}} {{$field.Type}}{{end}} + } + {{end}} + {{range .Calls}} - // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Caller) {{.Normalized.Name}}(opts *bind.CallOpts {{range .Normalized.Inputs}}, {{.Name}} {{bindtype .Type}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type}};{{end}} },{{else}}{{range .Normalized.Outputs}}{{bindtype .Type}},{{end}}{{end}} error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Caller) {{.Normalized.Name}}(opts *bind.CallOpts {{range .Normalized.Inputs}}, {{.Name}} {{bindtype .Type $structs}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type $structs}};{{end}} },{{else}}{{range .Normalized.Outputs}}{{bindtype .Type $structs}},{{end}}{{end}} error) { {{if .Structured}}ret := new(struct{ - {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type}} + {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type $structs}} {{end}} }){{else}}var ( - {{range $i, $_ := .Normalized.Outputs}}ret{{$i}} = new({{bindtype .Type}}) + {{range $i, $_ := .Normalized.Outputs}}ret{{$i}} = new({{bindtype .Type $structs}}) {{end}} ){{end}} out := {{if .Structured}}ret{{else}}{{if eq (len .Normalized.Outputs) 1}}ret0{{else}}&[]interface{}{ @@ -272,40 +313,40 @@ var ( return {{if .Structured}}*ret,{{else}}{{range $i, $_ := .Normalized.Outputs}}*ret{{$i}},{{end}}{{end}} err } - // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Session) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type}};{{end}} }, {{else}} {{range .Normalized.Outputs}}{{bindtype .Type}},{{end}} {{end}} error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Session) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type $structs}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type $structs}};{{end}} }, {{else}} {{range .Normalized.Outputs}}{{bindtype .Type $structs}},{{end}} {{end}} error) { return _{{$contract.Type}}.Contract.{{.Normalized.Name}}(&_{{$contract.Type}}.CallOpts {{range .Normalized.Inputs}}, {{.Name}}{{end}}) } - // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}CallerSession) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type}};{{end}} }, {{else}} {{range .Normalized.Outputs}}{{bindtype .Type}},{{end}} {{end}} error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}CallerSession) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type $structs}} {{end}}) ({{if .Structured}}struct{ {{range .Normalized.Outputs}}{{.Name}} {{bindtype .Type $structs}};{{end}} }, {{else}} {{range .Normalized.Outputs}}{{bindtype .Type $structs}},{{end}} {{end}} error) { return _{{$contract.Type}}.Contract.{{.Normalized.Name}}(&_{{$contract.Type}}.CallOpts {{range .Normalized.Inputs}}, {{.Name}}{{end}}) } {{end}} {{range .Transacts}} - // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Transactor) {{.Normalized.Name}}(opts *bind.TransactOpts {{range .Normalized.Inputs}}, {{.Name}} {{bindtype .Type}} {{end}}) (*types.Transaction, error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Transactor) {{.Normalized.Name}}(opts *bind.TransactOpts {{range .Normalized.Inputs}}, {{.Name}} {{bindtype .Type $structs}} {{end}}) (*types.Transaction, error) { return _{{$contract.Type}}.contract.Transact(opts, "{{.Original.Name}}" {{range .Normalized.Inputs}}, {{.Name}}{{end}}) } - // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Session) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type}} {{end}}) (*types.Transaction, error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Session) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type $structs}} {{end}}) (*types.Transaction, error) { return _{{$contract.Type}}.Contract.{{.Normalized.Name}}(&_{{$contract.Type}}.TransactOpts {{range $i, $_ := .Normalized.Inputs}}, {{.Name}}{{end}}) } - // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.Id}}. + // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}TransactorSession) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type}} {{end}}) (*types.Transaction, error) { + // Solidity: {{formatmethod .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}TransactorSession) {{.Normalized.Name}}({{range $i, $_ := .Normalized.Inputs}}{{if ne $i 0}},{{end}} {{.Name}} {{bindtype .Type $structs}} {{end}}) (*types.Transaction, error) { return _{{$contract.Type}}.Contract.{{.Normalized.Name}}(&_{{$contract.Type}}.TransactOpts {{range $i, $_ := .Normalized.Inputs}}, {{.Name}}{{end}}) } {{end}} @@ -377,14 +418,14 @@ var ( // {{$contract.Type}}{{.Normalized.Name}} represents a {{.Normalized.Name}} event raised by the {{$contract.Type}} contract. type {{$contract.Type}}{{.Normalized.Name}} struct { {{range .Normalized.Inputs}} - {{capitalise .Name}} {{if .Indexed}}{{bindtopictype .Type}}{{else}}{{bindtype .Type}}{{end}}; {{end}} + {{capitalise .Name}} {{if .Indexed}}{{bindtopictype .Type $structs}}{{else}}{{bindtype .Type $structs}}{{end}}; {{end}} Raw types.Log // Blockchain specific contextual infos } - // Filter{{.Normalized.Name}} is a free log retrieval operation binding the contract event 0x{{printf "%x" .Original.Id}}. + // Filter{{.Normalized.Name}} is a free log retrieval operation binding the contract event 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Filterer) Filter{{.Normalized.Name}}(opts *bind.FilterOpts{{range .Normalized.Inputs}}{{if .Indexed}}, {{.Name}} []{{bindtype .Type}}{{end}}{{end}}) (*{{$contract.Type}}{{.Normalized.Name}}Iterator, error) { + // Solidity: {{formatevent .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Filterer) Filter{{.Normalized.Name}}(opts *bind.FilterOpts{{range .Normalized.Inputs}}{{if .Indexed}}, {{.Name}} []{{bindtype .Type $structs}}{{end}}{{end}}) (*{{$contract.Type}}{{.Normalized.Name}}Iterator, error) { {{range .Normalized.Inputs}} {{if .Indexed}}var {{.Name}}Rule []interface{} for _, {{.Name}}Item := range {{.Name}} { @@ -398,10 +439,10 @@ var ( return &{{$contract.Type}}{{.Normalized.Name}}Iterator{contract: _{{$contract.Type}}.contract, event: "{{.Original.Name}}", logs: logs, sub: sub}, nil } - // Watch{{.Normalized.Name}} is a free log subscription operation binding the contract event 0x{{printf "%x" .Original.Id}}. + // Watch{{.Normalized.Name}} is a free log subscription operation binding the contract event 0x{{printf "%x" .Original.ID}}. // - // Solidity: {{.Original.String}} - func (_{{$contract.Type}} *{{$contract.Type}}Filterer) Watch{{.Normalized.Name}}(opts *bind.WatchOpts, sink chan<- *{{$contract.Type}}{{.Normalized.Name}}{{range .Normalized.Inputs}}{{if .Indexed}}, {{.Name}} []{{bindtype .Type}}{{end}}{{end}}) (event.Subscription, error) { + // Solidity: {{formatevent .Original $structs}} + func (_{{$contract.Type}} *{{$contract.Type}}Filterer) Watch{{.Normalized.Name}}(opts *bind.WatchOpts, sink chan<- *{{$contract.Type}}{{.Normalized.Name}}{{range .Normalized.Inputs}}{{if .Indexed}}, {{.Name}} []{{bindtype .Type $structs}}{{end}}{{end}}) (event.Subscription, error) { {{range .Normalized.Inputs}} {{if .Indexed}}var {{.Name}}Rule []interface{} for _, {{.Name}}Item := range {{.Name}} { @@ -439,6 +480,18 @@ var ( } }), nil } + + // Parse{{.Normalized.Name}} is a log parse operation binding the contract event 0x{{printf "%x" .Original.ID}}. + // + // Solidity: {{.Original.String}} + func (_{{$contract.Type}} *{{$contract.Type}}Filterer) Parse{{.Normalized.Name}}(log types.Log) (*{{$contract.Type}}{{.Normalized.Name}}, error) { + event := new({{$contract.Type}}{{.Normalized.Name}}) + if err := _{{$contract.Type}}.contract.UnpackLog(event, "{{.Original.Name}}", log); err != nil { + return nil, err + } + return event, nil + } + {{end}} {{end}} ` @@ -452,95 +505,112 @@ const tmplSourceJava = ` package {{.Package}}; import org.ethereum.geth.*; -import org.ethereum.geth.internal.*; +import java.util.*; {{range $contract := .Contracts}} - public class {{.Type}} { - // ABI is the input ABI used to generate the binding from. - public final static String ABI = "{{.InputABI}}"; - - {{if .InputBin}} - // BYTECODE is the compiled bytecode used for deploying new contracts. - public final static byte[] BYTECODE = "{{.InputBin}}".getBytes(); - - // deploy deploys a new Ethereum contract, binding an instance of {{.Type}} to it. - public static {{.Type}} deploy(TransactOpts auth, EthereumClient client{{range .Constructor.Inputs}}, {{bindtype .Type}} {{.Name}}{{end}}) throws Exception { - Interfaces args = Geth.newInterfaces({{(len .Constructor.Inputs)}}); - {{range $index, $element := .Constructor.Inputs}} - args.set({{$index}}, Geth.newInterface()); args.get({{$index}}).set{{namedtype (bindtype .Type) .Type}}({{.Name}}); - {{end}} - return new {{.Type}}(Geth.deployContract(auth, ABI, BYTECODE, client, args)); - } - - // Internal constructor used by contract deployment. - private {{.Type}}(BoundContract deployment) { - this.Address = deployment.getAddress(); - this.Deployer = deployment.getDeployer(); - this.Contract = deployment; - } +{{$structs := $contract.Structs}} +{{if not .Library}}public {{end}}class {{.Type}} { + // ABI is the input ABI used to generate the binding from. + public final static String ABI = "{{.InputABI}}"; + {{if $contract.FuncSigs}} + // {{.Type}}FuncSigs maps the 4-byte function signature to its string representation. + public final static Map {{.Type}}FuncSigs; + static { + Hashtable temp = new Hashtable(); + {{range $strsig, $binsig := .FuncSigs}}temp.put("{{$binsig}}", "{{$strsig}}"); + {{end}} + {{.Type}}FuncSigs = Collections.unmodifiableMap(temp); + } + {{end}} + {{if .InputBin}} + // BYTECODE is the compiled bytecode used for deploying new contracts. + public final static String BYTECODE = "0x{{.InputBin}}"; + + // deploy deploys a new Ethereum contract, binding an instance of {{.Type}} to it. + public static {{.Type}} deploy(TransactOpts auth, EthereumClient client{{range .Constructor.Inputs}}, {{bindtype .Type $structs}} {{.Name}}{{end}}) throws Exception { + Interfaces args = Geth.newInterfaces({{(len .Constructor.Inputs)}}); + String bytecode = BYTECODE; + {{if .Libraries}} + + // "link" contract to dependent libraries by deploying them first. + {{range $pattern, $name := .Libraries}} + {{capitalise $name}} {{decapitalise $name}}Inst = {{capitalise $name}}.deploy(auth, client); + bytecode = bytecode.replace("__${{$pattern}}$__", {{decapitalise $name}}Inst.Address.getHex().substring(2)); + {{end}} + {{end}} + {{range $index, $element := .Constructor.Inputs}}Interface arg{{$index}} = Geth.newInterface();arg{{$index}}.set{{namedtype (bindtype .Type $structs) .Type}}({{.Name}});args.set({{$index}},arg{{$index}}); {{end}} + return new {{.Type}}(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args)); + } - // Ethereum address where this contract is located at. - public final Address Address; + // Internal constructor used by contract deployment. + private {{.Type}}(BoundContract deployment) { + this.Address = deployment.getAddress(); + this.Deployer = deployment.getDeployer(); + this.Contract = deployment; + } + {{end}} - // Ethereum transaction in which this contract was deployed (if known!). - public final Transaction Deployer; + // Ethereum address where this contract is located at. + public final Address Address; - // Contract instance bound to a blockchain address. - private final BoundContract Contract; + // Ethereum transaction in which this contract was deployed (if known!). + public final Transaction Deployer; - // Creates a new instance of {{.Type}}, bound to a specific deployed contract. - public {{.Type}}(Address address, EthereumClient client) throws Exception { - this(Geth.bindContract(address, ABI, client)); - } + // Contract instance bound to a blockchain address. + private final BoundContract Contract; - {{range .Calls}} - {{if gt (len .Normalized.Outputs) 1}} - // {{capitalise .Normalized.Name}}Results is the output of a call to {{.Normalized.Name}}. - public class {{capitalise .Normalized.Name}}Results { - {{range $index, $item := .Normalized.Outputs}}public {{bindtype .Type}} {{if ne .Name ""}}{{.Name}}{{else}}Return{{$index}}{{end}}; - {{end}} - } - {{end}} + // Creates a new instance of {{.Type}}, bound to a specific deployed contract. + public {{.Type}}(Address address, EthereumClient client) throws Exception { + this(Geth.bindContract(address, ABI, client)); + } - // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.Id}}. - // - // Solidity: {{.Original.String}} - public {{if gt (len .Normalized.Outputs) 1}}{{capitalise .Normalized.Name}}Results{{else}}{{range .Normalized.Outputs}}{{bindtype .Type}}{{end}}{{end}} {{.Normalized.Name}}(CallOpts opts{{range .Normalized.Inputs}}, {{bindtype .Type}} {{.Name}}{{end}}) throws Exception { - Interfaces args = Geth.newInterfaces({{(len .Normalized.Inputs)}}); - {{range $index, $item := .Normalized.Inputs}}args.set({{$index}}, Geth.newInterface()); args.get({{$index}}).set{{namedtype (bindtype .Type) .Type}}({{.Name}}); - {{end}} + {{range .Calls}} + {{if gt (len .Normalized.Outputs) 1}} + // {{capitalise .Normalized.Name}}Results is the output of a call to {{.Normalized.Name}}. + public class {{capitalise .Normalized.Name}}Results { + {{range $index, $item := .Normalized.Outputs}}public {{bindtype .Type $structs}} {{if ne .Name ""}}{{.Name}}{{else}}Return{{$index}}{{end}}; + {{end}} + } + {{end}} - Interfaces results = Geth.newInterfaces({{(len .Normalized.Outputs)}}); - {{range $index, $item := .Normalized.Outputs}}Interface result{{$index}} = Geth.newInterface(); result{{$index}}.setDefault{{namedtype (bindtype .Type) .Type}}(); results.set({{$index}}, result{{$index}}); - {{end}} + // {{.Normalized.Name}} is a free data retrieval call binding the contract method 0x{{printf "%x" .Original.ID}}. + // + // Solidity: {{.Original.String}} + public {{if gt (len .Normalized.Outputs) 1}}{{capitalise .Normalized.Name}}Results{{else}}{{range .Normalized.Outputs}}{{bindtype .Type $structs}}{{end}}{{end}} {{.Normalized.Name}}(CallOpts opts{{range .Normalized.Inputs}}, {{bindtype .Type $structs}} {{.Name}}{{end}}) throws Exception { + Interfaces args = Geth.newInterfaces({{(len .Normalized.Inputs)}}); + {{range $index, $item := .Normalized.Inputs}}Interface arg{{$index}} = Geth.newInterface();arg{{$index}}.set{{namedtype (bindtype .Type $structs) .Type}}({{.Name}});args.set({{$index}},arg{{$index}}); + {{end}} - if (opts == null) { - opts = Geth.newCallOpts(); - } - this.Contract.call(opts, results, "{{.Original.Name}}", args); - {{if gt (len .Normalized.Outputs) 1}} - {{capitalise .Normalized.Name}}Results result = new {{capitalise .Normalized.Name}}Results(); - {{range $index, $item := .Normalized.Outputs}}result.{{if ne .Name ""}}{{.Name}}{{else}}Return{{$index}}{{end}} = results.get({{$index}}).get{{namedtype (bindtype .Type) .Type}}(); - {{end}} - return result; - {{else}}{{range .Normalized.Outputs}}return results.get(0).get{{namedtype (bindtype .Type) .Type}}();{{end}} - {{end}} - } + Interfaces results = Geth.newInterfaces({{(len .Normalized.Outputs)}}); + {{range $index, $item := .Normalized.Outputs}}Interface result{{$index}} = Geth.newInterface(); result{{$index}}.setDefault{{namedtype (bindtype .Type $structs) .Type}}(); results.set({{$index}}, result{{$index}}); {{end}} - {{range .Transacts}} - // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.Id}}. - // - // Solidity: {{.Original.String}} - public Transaction {{.Normalized.Name}}(TransactOpts opts{{range .Normalized.Inputs}}, {{bindtype .Type}} {{.Name}}{{end}}) throws Exception { - Interfaces args = Geth.newInterfaces({{(len .Normalized.Inputs)}}); - {{range $index, $item := .Normalized.Inputs}}args.set({{$index}}, Geth.newInterface()); args.get({{$index}}).set{{namedtype (bindtype .Type) .Type}}({{.Name}}); - {{end}} + if (opts == null) { + opts = Geth.newCallOpts(); + } + this.Contract.call(opts, results, "{{.Original.Name}}", args); + {{if gt (len .Normalized.Outputs) 1}} + {{capitalise .Normalized.Name}}Results result = new {{capitalise .Normalized.Name}}Results(); + {{range $index, $item := .Normalized.Outputs}}result.{{if ne .Name ""}}{{.Name}}{{else}}Return{{$index}}{{end}} = results.get({{$index}}).get{{namedtype (bindtype .Type $structs) .Type}}(); + {{end}} + return result; + {{else}}{{range .Normalized.Outputs}}return results.get(0).get{{namedtype (bindtype .Type $structs) .Type}}();{{end}} + {{end}} + } + {{end}} - return this.Contract.transact(opts, "{{.Original.Name}}" , args); - } + {{range .Transacts}} + // {{.Normalized.Name}} is a paid mutator transaction binding the contract method 0x{{printf "%x" .Original.ID}}. + // + // Solidity: {{.Original.String}} + public Transaction {{.Normalized.Name}}(TransactOpts opts{{range .Normalized.Inputs}}, {{bindtype .Type $structs}} {{.Name}}{{end}}) throws Exception { + Interfaces args = Geth.newInterfaces({{(len .Normalized.Inputs)}}); + {{range $index, $item := .Normalized.Inputs}}Interface arg{{$index}} = Geth.newInterface();arg{{$index}}.set{{namedtype (bindtype .Type $structs) .Type}}({{.Name}});args.set({{$index}},arg{{$index}}); {{end}} + return this.Contract.transact(opts, "{{.Original.Name}}" , args); } + {{end}} +} {{end}} ` diff --git a/accounts/abi/bind/topics.go b/accounts/abi/bind/topics.go index 600dfcda9739..c7657b4a41a2 100644 --- a/accounts/abi/bind/topics.go +++ b/accounts/abi/bind/topics.go @@ -17,6 +17,7 @@ package bind import ( + "encoding/binary" "errors" "fmt" "math/big" @@ -83,8 +84,10 @@ func makeTopics(query ...[]interface{}) ([][]common.Hash, error) { val := reflect.ValueOf(rule) switch { + + // static byte array case val.Kind() == reflect.Array && reflect.TypeOf(rule).Elem().Kind() == reflect.Uint8: - reflect.Copy(reflect.ValueOf(topic[common.HashLength-val.Len():]), val) + reflect.Copy(reflect.ValueOf(topic[:val.Len()]), val) default: return nil, fmt.Errorf("unsupported indexed type: %T", rule) @@ -175,8 +178,10 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er default: // Ran out of custom types, try the crazies switch { + + // static byte array case arg.Type.T == abi.FixedBytesTy: - reflect.Copy(field, reflect.ValueOf(topics[0][common.HashLength-arg.Type.Size:])) + reflect.Copy(field, reflect.ValueOf(topics[0][:arg.Type.Size])) default: return fmt.Errorf("unsupported indexed type: %v", arg.Type) @@ -187,3 +192,50 @@ func parseTopics(out interface{}, fields abi.Arguments, topics []common.Hash) er } return nil } + +// parseTopicsIntoMap converts the indexed topic field-value pairs into map key-value pairs +func parseTopicsIntoMap(out map[string]interface{}, fields abi.Arguments, topics []common.Hash) error { + // Sanity check that the fields and topics match up + if len(fields) != len(topics) { + return errors.New("topic/field count mismatch") + } + // Iterate over all the fields and reconstruct them from topics + for _, arg := range fields { + if !arg.Indexed { + return errors.New("non-indexed field in topic reconstruction") + } + + switch arg.Type.T { + case abi.BoolTy: + out[arg.Name] = topics[0][common.HashLength-1] == 1 + case abi.IntTy, abi.UintTy: + num := new(big.Int).SetBytes(topics[0][:]) + out[arg.Name] = num + case abi.AddressTy: + var addr common.Address + copy(addr[:], topics[0][common.HashLength-common.AddressLength:]) + out[arg.Name] = addr + case abi.HashTy: + out[arg.Name] = topics[0] + case abi.FixedBytesTy: + out[arg.Name] = topics[0][:] + case abi.StringTy, abi.BytesTy, abi.SliceTy, abi.ArrayTy: + // Array types (including strings and bytes) have their keccak256 hashes stored in the topic- not a hash + // whose bytes can be decoded to the actual value- so the best we can do is retrieve that hash + out[arg.Name] = topics[0] + case abi.FunctionTy: + if garbage := binary.BigEndian.Uint64(topics[0][0:8]); garbage != 0 { + return fmt.Errorf("bind: got improperly encoded function type, got %v", topics[0].Bytes()) + } + var tmp [24]byte + copy(tmp[:], topics[0][8:32]) + out[arg.Name] = tmp + default: // Not handling tuples + return fmt.Errorf("unsupported indexed type: %v", arg.Type) + } + + topics = topics[1:] + } + + return nil +} diff --git a/accounts/abi/bind/topics_test.go b/accounts/abi/bind/topics_test.go new file mode 100644 index 000000000000..ac865e5b4de8 --- /dev/null +++ b/accounts/abi/bind/topics_test.go @@ -0,0 +1,103 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bind + +import ( + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" +) + +func TestMakeTopics(t *testing.T) { + type args struct { + query [][]interface{} + } + tests := []struct { + name string + args args + want [][]common.Hash + wantErr bool + }{ + { + "support fixed byte types, right padded to 32 bytes", + args{[][]interface{}{{[5]byte{1, 2, 3, 4, 5}}}}, + [][]common.Hash{{common.Hash{1, 2, 3, 4, 5}}}, + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := makeTopics(tt.args.query...) + if (err != nil) != tt.wantErr { + t.Errorf("makeTopics() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("makeTopics() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestParseTopics(t *testing.T) { + type bytesStruct struct { + StaticBytes [5]byte + } + bytesType, _ := abi.NewType("bytes5", nil) + type args struct { + createObj func() interface{} + resultObj func() interface{} + fields abi.Arguments + topics []common.Hash + } + tests := []struct { + name string + args args + wantErr bool + }{ + { + name: "support fixed byte types, right padded to 32 bytes", + args: args{ + createObj: func() interface{} { return &bytesStruct{} }, + resultObj: func() interface{} { return &bytesStruct{StaticBytes: [5]byte{1, 2, 3, 4, 5}} }, + fields: abi.Arguments{abi.Argument{ + Name: "staticBytes", + Type: bytesType, + Indexed: true, + }}, + topics: []common.Hash{ + {1, 2, 3, 4, 5}, + }, + }, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + createObj := tt.args.createObj() + if err := parseTopics(createObj, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { + t.Errorf("parseTopics() error = %v, wantErr %v", err, tt.wantErr) + } + resultObj := tt.args.resultObj() + if !reflect.DeepEqual(createObj, resultObj) { + t.Errorf("parseTopics() = %v, want %v", createObj, resultObj) + } + }) + } +} diff --git a/accounts/abi/bind/util_test.go b/accounts/abi/bind/util_test.go index 8f4092971f2f..e0141f46e06f 100644 --- a/accounts/abi/bind/util_test.go +++ b/accounts/abi/bind/util_test.go @@ -56,8 +56,10 @@ func TestWaitDeployed(t *testing.T) { backend := backends.NewSimulatedBackend( core.GenesisAlloc{ crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(10000000000)}, - }, 10000000, + }, + 10000000, ) + defer backend.Close() // Create the transaction. tx := types.NewContractCreation(0, big.NewInt(0), test.gas, big.NewInt(1), common.FromHex(test.code)) diff --git a/accounts/abi/event.go b/accounts/abi/event.go index 9392c1990c3e..f1474813afe4 100644 --- a/accounts/abi/event.go +++ b/accounts/abi/event.go @@ -28,7 +28,18 @@ import ( // holds type information (inputs) about the yielded output. Anonymous events // don't get the signature canonical representation as the first LOG topic. type Event struct { - Name string + // Name is the event name used for internal representation. It's derived from + // the raw name and a suffix will be added in the case of a event overload. + // + // e.g. + // There are two events have same name: + // * foo(int,int) + // * foo(uint,uint) + // The event name of the first one wll be resolved as foo while the second one + // will be resolved as foo0. + Name string + // RawName is the raw event name parsed from ABI. + RawName string Anonymous bool Inputs Arguments } @@ -41,17 +52,26 @@ func (e Event) String() string { inputs[i] = fmt.Sprintf("%v indexed %v", input.Type, input.Name) } } - return fmt.Sprintf("event %v(%v)", e.Name, strings.Join(inputs, ", ")) + return fmt.Sprintf("event %v(%v)", e.RawName, strings.Join(inputs, ", ")) } -// Id returns the canonical representation of the event's signature used by the -// abi definition to identify event names and types. -func (e Event) Id() common.Hash { +// Sig returns the event string signature according to the ABI spec. +// +// Example +// +// event foo(uint32 a, int b) = "foo(uint32,int256)" +// +// Please note that "int" is substitute for its canonical representation "int256" +func (e Event) Sig() string { types := make([]string, len(e.Inputs)) - i := 0 - for _, input := range e.Inputs { + for i, input := range e.Inputs { types[i] = input.Type.String() - i++ } - return common.BytesToHash(crypto.Keccak256([]byte(fmt.Sprintf("%v(%v)", e.Name, strings.Join(types, ","))))) + return fmt.Sprintf("%v(%v)", e.RawName, strings.Join(types, ",")) +} + +// ID returns the canonical representation of the event's signature used by the +// abi definition to identify event names and types. +func (e Event) ID() common.Hash { + return common.BytesToHash(crypto.Keccak256([]byte(e.Sig()))) } diff --git a/accounts/abi/event_test.go b/accounts/abi/event_test.go index e735cceb8884..792e26762e89 100644 --- a/accounts/abi/event_test.go +++ b/accounts/abi/event_test.go @@ -104,8 +104,8 @@ func TestEventId(t *testing.T) { } for name, event := range abi.Events { - if event.Id() != test.expectations[name] { - t.Errorf("expected id to be %x, got %x", test.expectations[name], event.Id()) + if event.ID() != test.expectations[name] { + t.Errorf("expected id to be %x, got %x", test.expectations[name], event.ID()) } } } diff --git a/accounts/abi/method.go b/accounts/abi/method.go index 2d8d3d658992..7da2e18fc61a 100644 --- a/accounts/abi/method.go +++ b/accounts/abi/method.go @@ -27,12 +27,23 @@ import ( // If the method is `Const` no transaction needs to be created for this // particular Method call. It can easily be simulated using a local VM. // For example a `Balance()` method only needs to retrieve something -// from the storage and therefor requires no Tx to be send to the +// from the storage and therefore requires no Tx to be send to the // network. A method such as `Transact` does require a Tx and thus will -// be flagged `true`. +// be flagged `false`. // Input specifies the required input parameters for this gives method. type Method struct { - Name string + // Name is the method name used for internal representation. It's derived from + // the raw name and a suffix will be added in the case of a function overload. + // + // e.g. + // There are two functions have same name: + // * foo(int,int) + // * foo(uint,uint) + // The method name of the first one will be resolved as foo while the second one + // will be resolved as foo0. + Name string + // RawName is the raw method name parsed from ABI. + RawName string Const bool Inputs Arguments Outputs Arguments @@ -42,7 +53,7 @@ type Method struct { // // Example // -// function foo(uint32 a, int b) = "foo(uint32,int256)" +// function foo(uint32 a, int b) = "foo(uint32,int256)" // // Please note that "int" is substitute for its canonical representation "int256" func (method Method) Sig() string { @@ -50,7 +61,7 @@ func (method Method) Sig() string { for i, input := range method.Inputs { types[i] = input.Type.String() } - return fmt.Sprintf("%v(%v)", method.Name, strings.Join(types, ",")) + return fmt.Sprintf("%v(%v)", method.RawName, strings.Join(types, ",")) } func (method Method) String() string { @@ -69,9 +80,11 @@ func (method Method) String() string { if method.Const { constant = "constant " } - return fmt.Sprintf("function %v(%v) %sreturns(%v)", method.Name, strings.Join(inputs, ", "), constant, strings.Join(outputs, ", ")) + return fmt.Sprintf("function %v(%v) %sreturns(%v)", method.RawName, strings.Join(inputs, ", "), constant, strings.Join(outputs, ", ")) } -func (method Method) Id() []byte { +// ID returns the canonical representation of the method's signature used by the +// abi definition to identify method names and types. +func (method Method) ID() []byte { return crypto.Keccak256([]byte(method.Sig()))[:4] } diff --git a/accounts/abi/method_test.go b/accounts/abi/method_test.go index a98f1cd31f7d..3ffdb702b35b 100644 --- a/accounts/abi/method_test.go +++ b/accounts/abi/method_test.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -23,9 +23,13 @@ import ( const methoddata = ` [ - { "type" : "function", "name" : "balance", "constant" : true }, - { "type" : "function", "name" : "send", "constant" : false, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] }, - { "type" : "function", "name" : "transfer", "constant" : false, "inputs" : [ { "name" : "from", "type" : "address" }, { "name" : "to", "type" : "address" }, { "name" : "value", "type" : "uint256" } ], "outputs" : [ { "name" : "success", "type" : "bool" } ] } + {"type": "function", "name": "balance", "constant": true }, + {"type": "function", "name": "send", "constant": false, "inputs": [{ "name": "amount", "type": "uint256" }]}, + {"type": "function", "name": "transfer", "constant": false, "inputs": [{"name": "from", "type": "address"}, {"name": "to", "type": "address"}, {"name": "value", "type": "uint256"}], "outputs": [{"name": "success", "type": "bool"}]}, + {"constant":false,"inputs":[{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"a","type":"tuple"}],"name":"tuple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}, + {"constant":false,"inputs":[{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"a","type":"tuple[]"}],"name":"tupleSlice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}, + {"constant":false,"inputs":[{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"a","type":"tuple[5]"}],"name":"tupleArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}, + {"constant":false,"inputs":[{"components":[{"name":"x","type":"uint256"},{"name":"y","type":"uint256"}],"name":"a","type":"tuple[5][]"}],"name":"complexTuple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"} ]` func TestMethodString(t *testing.T) { @@ -45,6 +49,22 @@ func TestMethodString(t *testing.T) { method: "transfer", expectation: "function transfer(address from, address to, uint256 value) returns(bool success)", }, + { + method: "tuple", + expectation: "function tuple((uint256,uint256) a) returns()", + }, + { + method: "tupleArray", + expectation: "function tupleArray((uint256,uint256)[5] a) returns()", + }, + { + method: "tupleSlice", + expectation: "function tupleSlice((uint256,uint256)[] a) returns()", + }, + { + method: "complexTuple", + expectation: "function complexTuple((uint256,uint256)[5][] a) returns()", + }, } abi, err := JSON(strings.NewReader(methoddata)) @@ -59,3 +79,50 @@ func TestMethodString(t *testing.T) { } } } + +func TestMethodSig(t *testing.T) { + var cases = []struct { + method string + expect string + }{ + { + method: "balance", + expect: "balance()", + }, + { + method: "send", + expect: "send(uint256)", + }, + { + method: "transfer", + expect: "transfer(address,address,uint256)", + }, + { + method: "tuple", + expect: "tuple((uint256,uint256))", + }, + { + method: "tupleArray", + expect: "tupleArray((uint256,uint256)[5])", + }, + { + method: "tupleSlice", + expect: "tupleSlice((uint256,uint256)[])", + }, + { + method: "complexTuple", + expect: "complexTuple((uint256,uint256)[5][])", + }, + } + abi, err := JSON(strings.NewReader(methoddata)) + if err != nil { + t.Fatal(err) + } + + for _, test := range cases { + got := abi.Methods[test.method].Sig() + if got != test.expect { + t.Errorf("expected string to be %s, got %s", test.expect, got) + } + } +} diff --git a/accounts/abi/pack_test.go b/accounts/abi/pack_test.go index 10cd3a396274..f43e3905684c 100644 --- a/accounts/abi/pack_test.go +++ b/accounts/abi/pack_test.go @@ -634,7 +634,7 @@ func TestMethodPack(t *testing.T) { t.Fatal(err) } - sig := abi.Methods["slice"].Id() + sig := abi.Methods["slice"].ID() sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...) @@ -648,7 +648,7 @@ func TestMethodPack(t *testing.T) { } var addrA, addrB = common.Address{1}, common.Address{2} - sig = abi.Methods["sliceAddress"].Id() + sig = abi.Methods["sliceAddress"].ID() sig = append(sig, common.LeftPadBytes([]byte{32}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...) sig = append(sig, common.LeftPadBytes(addrA[:], 32)...) @@ -663,7 +663,7 @@ func TestMethodPack(t *testing.T) { } var addrC, addrD = common.Address{3}, common.Address{4} - sig = abi.Methods["sliceMultiAddress"].Id() + sig = abi.Methods["sliceMultiAddress"].ID() sig = append(sig, common.LeftPadBytes([]byte{64}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{160}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...) @@ -681,7 +681,7 @@ func TestMethodPack(t *testing.T) { t.Errorf("expected %x got %x", sig, packed) } - sig = abi.Methods["slice256"].Id() + sig = abi.Methods["slice256"].ID() sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...) @@ -695,7 +695,7 @@ func TestMethodPack(t *testing.T) { } a := [2][2]*big.Int{{big.NewInt(1), big.NewInt(1)}, {big.NewInt(2), big.NewInt(0)}} - sig = abi.Methods["nestedArray"].Id() + sig = abi.Methods["nestedArray"].ID() sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...) @@ -712,7 +712,7 @@ func TestMethodPack(t *testing.T) { t.Errorf("expected %x got %x", sig, packed) } - sig = abi.Methods["nestedArray2"].Id() + sig = abi.Methods["nestedArray2"].ID() sig = append(sig, common.LeftPadBytes([]byte{0x20}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{0x40}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{0x80}, 32)...) @@ -728,7 +728,7 @@ func TestMethodPack(t *testing.T) { t.Errorf("expected %x got %x", sig, packed) } - sig = abi.Methods["nestedSlice"].Id() + sig = abi.Methods["nestedSlice"].ID() sig = append(sig, common.LeftPadBytes([]byte{0x20}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{0x02}, 32)...) sig = append(sig, common.LeftPadBytes([]byte{0x40}, 32)...) diff --git a/accounts/abi/reflect.go b/accounts/abi/reflect.go index 1b0bb0049625..73ca8fa2bd7d 100644 --- a/accounts/abi/reflect.go +++ b/accounts/abi/reflect.go @@ -31,6 +31,14 @@ func indirect(v reflect.Value) reflect.Value { return v } +// indirectInterfaceOrPtr recursively dereferences the value until value is not interface. +func indirectInterfaceOrPtr(v reflect.Value) reflect.Value { + if (v.Kind() == reflect.Interface || v.Kind() == reflect.Ptr) && v.Elem().IsValid() { + return indirect(v.Elem()) + } + return v +} + // reflectIntKind returns the reflect using the given size and // unsignedness. func reflectIntKindAndType(unsigned bool, size int) (reflect.Kind, reflect.Type) { @@ -74,7 +82,7 @@ func mustArrayToByteSlice(value reflect.Value) reflect.Value { func set(dst, src reflect.Value) error { dstType, srcType := dst.Type(), src.Type() switch { - case dstType.Kind() == reflect.Interface: + case dstType.Kind() == reflect.Interface && dst.Elem().IsValid(): return set(dst.Elem(), src) case dstType.Kind() == reflect.Ptr && dstType.Elem() != derefbigT: return set(dst.Elem(), src) diff --git a/accounts/abi/type.go b/accounts/abi/type.go index 26151dbd3e7e..597d314392e5 100644 --- a/accounts/abi/type.go +++ b/accounts/abi/type.go @@ -68,7 +68,6 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { if strings.Count(t, "[") != strings.Count(t, "]") { return Type{}, fmt.Errorf("invalid arg type in abi") } - typ.stringKind = t // if there are brackets, get ready to go into slice/array mode and @@ -92,9 +91,7 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { typ.Kind = reflect.Slice typ.Elem = &embeddedType typ.Type = reflect.SliceOf(embeddedType.Type) - if embeddedType.T == TupleTy { - typ.stringKind = embeddedType.stringKind + sliced - } + typ.stringKind = embeddedType.stringKind + sliced } else if len(intz) == 1 { // is a array typ.T = ArrayTy @@ -105,9 +102,7 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { return Type{}, fmt.Errorf("abi: error parsing variable size: %v", err) } typ.Type = reflect.ArrayOf(typ.Size, embeddedType.Type) - if embeddedType.T == TupleTy { - typ.stringKind = embeddedType.stringKind + sliced - } + typ.stringKind = embeddedType.stringKind + sliced } else { return Type{}, fmt.Errorf("invalid formatting of array type") } @@ -188,6 +183,7 @@ func NewType(t string, components []ArgumentMarshaling) (typ Type, err error) { fields = append(fields, reflect.StructField{ Name: ToCamelCase(c.Name), // reflect.StructOf will panic for any exported field. Type: cType.Type, + Tag: reflect.StructTag("json:\"" + c.Name + "\""), }) elems = append(elems, &cType) names = append(names, c.Name) diff --git a/accounts/abi/type_test.go b/accounts/abi/type_test.go index 7ef47330dc52..5023456aec1b 100644 --- a/accounts/abi/type_test.go +++ b/accounts/abi/type_test.go @@ -95,8 +95,14 @@ func TestTypeRegexp(t *testing.T) { // {"fixed[2]", nil, Type{}}, // {"fixed128x128[]", nil, Type{}}, // {"fixed128x128[2]", nil, Type{}}, - {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct{ A int64 }{}), stringKind: "(int64)", + {"tuple", []ArgumentMarshaling{{Name: "a", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct { + A int64 `json:"a"` + }{}), stringKind: "(int64)", TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"a"}}}, + {"tuple with long name", []ArgumentMarshaling{{Name: "aTypicalParamName", Type: "int64"}}, Type{Kind: reflect.Struct, T: TupleTy, Type: reflect.TypeOf(struct { + ATypicalParamName int64 `json:"aTypicalParamName"` + }{}), stringKind: "(int64)", + TupleElems: []*Type{{Kind: reflect.Int64, T: IntTy, Type: reflect.TypeOf(int64(0)), Size: 64, stringKind: "int64"}}, TupleRawNames: []string{"aTypicalParamName"}}}, } for _, tt := range tests { diff --git a/accounts/abi/unpack.go b/accounts/abi/unpack.go index 8406b09c801d..b2e61d06c416 100644 --- a/accounts/abi/unpack.go +++ b/accounts/abi/unpack.go @@ -269,7 +269,7 @@ func lengthPrefixPointsTo(index int, output []byte) (start int, length int, err totalSize.Add(totalSize, bigOffsetEnd) totalSize.Add(totalSize, lengthBig) if totalSize.BitLen() > 63 { - return 0, 0, fmt.Errorf("abi length larger than int64: %v", totalSize) + return 0, 0, fmt.Errorf("abi: length larger than int64: %v", totalSize) } if totalSize.Cmp(outputLength) > 0 { diff --git a/accounts/abi/unpack_test.go b/accounts/abi/unpack_test.go index ff88be3d3084..c85b86d8c004 100644 --- a/accounts/abi/unpack_test.go +++ b/accounts/abi/unpack_test.go @@ -512,6 +512,11 @@ func TestMethodMultiReturn(t *testing.T) { Int *big.Int } + newInterfaceSlice := func(len int) interface{} { + slice := make([]interface{}, len) + return &slice + } + abi, data, expected := methodMultiReturn(require.New(t)) bigint := new(big.Int) var testCases = []struct { @@ -539,6 +544,16 @@ func TestMethodMultiReturn(t *testing.T) { &[2]interface{}{&expected.Int, &expected.String}, "", "Can unpack into an array", + }, { + &[2]interface{}{}, + &[2]interface{}{expected.Int, expected.String}, + "", + "Can unpack into interface array", + }, { + newInterfaceSlice(2), + &[]interface{}{expected.Int, expected.String}, + "", + "Can unpack into interface slice", }, { &[]interface{}{new(int), new(int)}, &[]interface{}{&expected.Int, &expected.String}, @@ -950,25 +965,21 @@ func TestUnpackTuple(t *testing.T) { buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001")) // ret[a] = 1 buff.Write(common.Hex2Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")) // ret[b] = -1 + // If the result is single tuple, use struct as return value container directly. v := struct { - Ret struct { - A *big.Int - B *big.Int - } - }{Ret: struct { A *big.Int B *big.Int - }{new(big.Int), new(big.Int)}} + }{new(big.Int), new(big.Int)} err = abi.Unpack(&v, "tuple", buff.Bytes()) if err != nil { t.Error(err) } else { - if v.Ret.A.Cmp(big.NewInt(1)) != 0 { - t.Errorf("unexpected value unpacked: want %x, got %x", 1, v.Ret.A) + if v.A.Cmp(big.NewInt(1)) != 0 { + t.Errorf("unexpected value unpacked: want %x, got %x", 1, v.A) } - if v.Ret.B.Cmp(big.NewInt(-1)) != 0 { - t.Errorf("unexpected value unpacked: want %x, got %x", v.Ret.B, -1) + if v.B.Cmp(big.NewInt(-1)) != 0 { + t.Errorf("unexpected value unpacked: want %x, got %x", v.B, -1) } } diff --git a/accounts/accounts.go b/accounts/accounts.go index cb1eae281587..bf5190ad98f7 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -18,12 +18,14 @@ package accounts import ( + "fmt" "math/big" ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" + "golang.org/x/crypto/sha3" ) // Account represents an Ethereum account located at a specific location defined @@ -33,6 +35,13 @@ type Account struct { URL URL `json:"url"` // Optional resource locator within a backend } +const ( + MimetypeDataWithValidator = "data/validator" + MimetypeTypedData = "data/typed" + MimetypeClique = "application/x-clique-header" + MimetypeTextPlain = "text/plain" +) + // Wallet represents a software or hardware wallet that might contain one or more // accounts (derived from the same seed). type Wallet interface { @@ -83,12 +92,34 @@ type Wallet interface { // opposed to decending into a child path to allow discovering accounts starting // from non zero components. // + // Some hardware wallets switched derivation paths through their evolution, so + // this method supports providing multiple bases to discover old user accounts + // too. Only the last base will be used to derive the next empty account. + // // You can disable automatic account discovery by calling SelfDerive with a nil // chain state reader. - SelfDerive(base DerivationPath, chain ethereum.ChainStateReader) + SelfDerive(bases []DerivationPath, chain ethereum.ChainStateReader) - // SignHash requests the wallet to sign the given hash. + // SignData requests the wallet to sign the hash of the given data + // It looks up the account specified either solely via its address contained within, + // or optionally with the aid of any location metadata from the embedded URL field. // + // If the wallet requires additional authentication to sign the request (e.g. + // a password to decrypt the account, or a PIN code o verify the transaction), + // an AuthNeededError instance will be returned, containing infos for the user + // about which fields or actions are needed. The user may retry by providing + // the needed details via SignDataWithPassphrase, or by other means (e.g. unlock + // the account in a keystore). + SignData(account Account, mimeType string, data []byte) ([]byte, error) + + // SignDataWithPassphrase is identical to SignData, but also takes a password + // NOTE: there's an chance that an erroneous call might mistake the two strings, and + // supply password in the mimetype field, or vice versa. Thus, an implementation + // should never echo the mimetype or return the mimetype in the error-response + SignDataWithPassphrase(account Account, passphrase, mimeType string, data []byte) ([]byte, error) + + // SignText requests the wallet to sign the hash of a given piece of data, prefixed + // by the Ethereum prefix scheme // It looks up the account specified either solely via its address contained within, // or optionally with the aid of any location metadata from the embedded URL field. // @@ -98,7 +129,10 @@ type Wallet interface { // about which fields or actions are needed. The user may retry by providing // the needed details via SignHashWithPassphrase, or by other means (e.g. unlock // the account in a keystore). - SignHash(account Account, hash []byte) ([]byte, error) + SignText(account Account, text []byte) ([]byte, error) + + // SignTextWithPassphrase is identical to Signtext, but also takes a password + SignTextWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) // SignTx requests the wallet to sign the given transaction. // @@ -113,18 +147,7 @@ type Wallet interface { // the account in a keystore). SignTx(account Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) - // SignHashWithPassphrase requests the wallet to sign the given hash with the - // given passphrase as extra authentication information. - // - // It looks up the account specified either solely via its address contained within, - // or optionally with the aid of any location metadata from the embedded URL field. - SignHashWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) - - // SignTxWithPassphrase requests the wallet to sign the given transaction, with the - // given passphrase as extra authentication information. - // - // It looks up the account specified either solely via its address contained within, - // or optionally with the aid of any location metadata from the embedded URL field. + // SignTxWithPassphrase is identical to SignTx, but also takes a password SignTxWithPassphrase(account Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) } @@ -148,6 +171,32 @@ type Backend interface { Subscribe(sink chan<- WalletEvent) event.Subscription } +// TextHash is a helper function that calculates a hash for the given message that can be +// safely used to calculate a signature from. +// +// The hash is calulcated as +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// This gives context to the signed message and prevents signing of transactions. +func TextHash(data []byte) []byte { + hash, _ := TextAndHash(data) + return hash +} + +// TextAndHash is a helper function that calculates a hash for the given message that can be +// safely used to calculate a signature from. +// +// The hash is calulcated as +// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). +// +// This gives context to the signed message and prevents signing of transactions. +func TextAndHash(data []byte) ([]byte, string) { + msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), string(data)) + hasher := sha3.NewLegacyKeccak256() + hasher.Write([]byte(msg)) + return hasher.Sum(nil), msg +} + // WalletEventType represents the different event types that can be fired by // the wallet subscription subsystem. type WalletEventType int diff --git a/swarm/storage/error.go b/accounts/accounts_test.go similarity index 67% rename from swarm/storage/error.go rename to accounts/accounts_test.go index a9d0616fada6..e8274f9f0408 100644 --- a/swarm/storage/error.go +++ b/accounts/accounts_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 The go-ethereum Authors +// Copyright 2015 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,24 +14,19 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package storage +package accounts import ( - "errors" -) + "bytes" + "testing" -const ( - ErrInit = iota - ErrNotFound - ErrUnauthorized - ErrInvalidValue - ErrDataOverflow - ErrNothingToReturn - ErrInvalidSignature - ErrNotSynced + "github.com/ethereum/go-ethereum/common/hexutil" ) -var ( - ErrChunkNotFound = errors.New("chunk not found") - ErrChunkInvalid = errors.New("invalid chunk") -) +func TestTextHash(t *testing.T) { + hash := TextHash([]byte("Hello Joe")) + want := hexutil.MustDecode("0xa080337ae51c4e064c189e113edd0ba391df9206e2f49db658bb32cf2911730b") + if !bytes.Equal(hash, want) { + t.Fatalf("wrong hash: %x", hash) + } +} diff --git a/accounts/errors.go b/accounts/errors.go index 40b21ed179c0..2fed35f9d074 100644 --- a/accounts/errors.go +++ b/accounts/errors.go @@ -35,7 +35,7 @@ var ErrNotSupported = errors.New("not supported") // ErrInvalidPassphrase is returned when a decryption operation receives a bad // passphrase. -var ErrInvalidPassphrase = errors.New("invalid passphrase") +var ErrInvalidPassphrase = errors.New("invalid password") // ErrWalletAlreadyOpen is returned if a wallet is attempted to be opened the // second time. diff --git a/accounts/external/backend.go b/accounts/external/backend.go new file mode 100644 index 000000000000..6089ca984446 --- /dev/null +++ b/accounts/external/backend.go @@ -0,0 +1,231 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package external + +import ( + "fmt" + "math/big" + "sync" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/signer/core" +) + +type ExternalBackend struct { + signers []accounts.Wallet +} + +func (eb *ExternalBackend) Wallets() []accounts.Wallet { + return eb.signers +} + +func NewExternalBackend(endpoint string) (*ExternalBackend, error) { + signer, err := NewExternalSigner(endpoint) + if err != nil { + return nil, err + } + return &ExternalBackend{ + signers: []accounts.Wallet{signer}, + }, nil +} + +func (eb *ExternalBackend) Subscribe(sink chan<- accounts.WalletEvent) event.Subscription { + return event.NewSubscription(func(quit <-chan struct{}) error { + <-quit + return nil + }) +} + +// ExternalSigner provides an API to interact with an external signer (clef) +// It proxies request to the external signer while forwarding relevant +// request headers +type ExternalSigner struct { + client *rpc.Client + endpoint string + status string + cacheMu sync.RWMutex + cache []accounts.Account +} + +func NewExternalSigner(endpoint string) (*ExternalSigner, error) { + client, err := rpc.Dial(endpoint) + if err != nil { + return nil, err + } + extsigner := &ExternalSigner{ + client: client, + endpoint: endpoint, + } + // Check if reachable + version, err := extsigner.pingVersion() + if err != nil { + return nil, err + } + extsigner.status = fmt.Sprintf("ok [version=%v]", version) + return extsigner, nil +} + +func (api *ExternalSigner) URL() accounts.URL { + return accounts.URL{ + Scheme: "extapi", + Path: api.endpoint, + } +} + +func (api *ExternalSigner) Status() (string, error) { + return api.status, nil +} + +func (api *ExternalSigner) Open(passphrase string) error { + return fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) Close() error { + return fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) Accounts() []accounts.Account { + var accnts []accounts.Account + res, err := api.listAccounts() + if err != nil { + log.Error("account listing failed", "error", err) + return accnts + } + for _, addr := range res { + accnts = append(accnts, accounts.Account{ + URL: accounts.URL{ + Scheme: "extapi", + Path: api.endpoint, + }, + Address: addr, + }) + } + api.cacheMu.Lock() + api.cache = accnts + api.cacheMu.Unlock() + return accnts +} + +func (api *ExternalSigner) Contains(account accounts.Account) bool { + api.cacheMu.RLock() + defer api.cacheMu.RUnlock() + for _, a := range api.cache { + if a.Address == account.Address && (account.URL == (accounts.URL{}) || account.URL == api.URL()) { + return true + } + } + return false +} + +func (api *ExternalSigner) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) { + return accounts.Account{}, fmt.Errorf("operation not supported on external signers") +} + +func (api *ExternalSigner) SelfDerive(bases []accounts.DerivationPath, chain ethereum.ChainStateReader) { + log.Error("operation SelfDerive not supported on external signers") +} + +func (api *ExternalSigner) signHash(account accounts.Account, hash []byte) ([]byte, error) { + return []byte{}, fmt.Errorf("operation not supported on external signers") +} + +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (api *ExternalSigner) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + var res hexutil.Bytes + var signAddress = common.NewMixedcaseAddress(account.Address) + if err := api.client.Call(&res, "account_signData", + mimeType, + &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined + hexutil.Encode(data)); err != nil { + return nil, err + } + // If V is on 27/28-form, convert to to 0/1 for Clique + if mimeType == accounts.MimetypeClique && (res[64] == 27 || res[64] == 28) { + res[64] -= 27 // Transform V from 27/28 to 0/1 for Clique use + } + return res, nil +} + +func (api *ExternalSigner) SignText(account accounts.Account, text []byte) ([]byte, error) { + var res hexutil.Bytes + var signAddress = common.NewMixedcaseAddress(account.Address) + if err := api.client.Call(&res, "account_signData", + accounts.MimetypeTextPlain, + &signAddress, // Need to use the pointer here, because of how MarshalJSON is defined + hexutil.Encode(text)); err != nil { + return nil, err + } + return res, nil +} + +func (api *ExternalSigner) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + res := ethapi.SignTransactionResult{} + data := hexutil.Bytes(tx.Data()) + var to *common.MixedcaseAddress + if tx.To() != nil { + t := common.NewMixedcaseAddress(*tx.To()) + to = &t + } + args := &core.SendTxArgs{ + Data: &data, + Nonce: hexutil.Uint64(tx.Nonce()), + Value: hexutil.Big(*tx.Value()), + Gas: hexutil.Uint64(tx.Gas()), + GasPrice: hexutil.Big(*tx.GasPrice()), + To: to, + From: common.NewMixedcaseAddress(account.Address), + } + if err := api.client.Call(&res, "account_signTransaction", args); err != nil { + return nil, err + } + return res.Tx, nil +} + +func (api *ExternalSigner) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + return []byte{}, fmt.Errorf("password-operations not supported on external signers") +} + +func (api *ExternalSigner) SignTxWithPassphrase(account accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + return nil, fmt.Errorf("password-operations not supported on external signers") +} +func (api *ExternalSigner) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + return nil, fmt.Errorf("password-operations not supported on external signers") +} + +func (api *ExternalSigner) listAccounts() ([]common.Address, error) { + var res []common.Address + if err := api.client.Call(&res, "account_list"); err != nil { + return nil, err + } + return res, nil +} + +func (api *ExternalSigner) pingVersion() (string, error) { + var v string + if err := api.client.Call(&v, "account_version"); err != nil { + return "", err + } + return v, nil +} diff --git a/accounts/hd.go b/accounts/hd.go index 6ed6318078d6..75c47611061c 100644 --- a/accounts/hd.go +++ b/accounts/hd.go @@ -17,6 +17,7 @@ package accounts import ( + "encoding/json" "errors" "fmt" "math" @@ -34,10 +35,10 @@ var DefaultRootDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, // at m/44'/60'/0'/0/1, etc. var DefaultBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0, 0} -// DefaultLedgerBaseDerivationPath is the base path from which custom derivation endpoints -// are incremented. As such, the first account will be at m/44'/60'/0'/0, the second -// at m/44'/60'/0'/1, etc. -var DefaultLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0} +// LegacyLedgerBaseDerivationPath is the legacy base path from which custom derivation +// endpoints are incremented. As such, the first account will be at m/44'/60'/0'/0, the +// second at m/44'/60'/0'/1, etc. +var LegacyLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0} // DerivationPath represents the computer friendly version of a hierarchical // deterministic wallet account derivaion path. @@ -133,3 +134,19 @@ func (path DerivationPath) String() string { } return result } + +// MarshalJSON turns a derivation path into its json-serialized string +func (path DerivationPath) MarshalJSON() ([]byte, error) { + return json.Marshal(path.String()) +} + +// UnmarshalJSON a json-serialized string back into a derivation path +func (path *DerivationPath) UnmarshalJSON(b []byte) error { + var dp string + var err error + if err = json.Unmarshal(b, &dp); err != nil { + return err + } + *path, err = ParseDerivationPath(dp) + return err +} diff --git a/accounts/keystore/keystore.go b/accounts/keystore/keystore.go index 2918047ccd4b..5b55175b1f3e 100644 --- a/accounts/keystore/keystore.go +++ b/accounts/keystore/keystore.go @@ -43,7 +43,7 @@ import ( var ( ErrLocked = accounts.NewAuthNeededError("password or unlock") ErrNoMatch = errors.New("no key for given address or file") - ErrDecrypt = errors.New("could not decrypt key with given passphrase") + ErrDecrypt = errors.New("could not decrypt key with given password") ) // KeyStoreType is the reflect type of a keystore backend. @@ -137,8 +137,10 @@ func (ks *KeyStore) refreshWallets() { accs := ks.cache.accounts() // Transform the current list of wallets into the new one - wallets := make([]accounts.Wallet, 0, len(accs)) - events := []accounts.WalletEvent{} + var ( + wallets = make([]accounts.Wallet, 0, len(accs)) + events []accounts.WalletEvent + ) for _, account := range accs { // Drop wallets while they were in front of the next account diff --git a/accounts/keystore/keystore_test.go b/accounts/keystore/keystore_test.go index 6fb0a7808870..a691c5062706 100644 --- a/accounts/keystore/keystore_test.go +++ b/accounts/keystore/keystore_test.go @@ -379,9 +379,9 @@ func tmpKeyStore(t *testing.T, encrypted bool) (string, *KeyStore) { if err != nil { t.Fatal(err) } - new := NewPlaintextKeyStore + newKs := NewPlaintextKeyStore if encrypted { - new = func(kd string) *KeyStore { return NewKeyStore(kd, veryLightScryptN, veryLightScryptP) } + newKs = func(kd string) *KeyStore { return NewKeyStore(kd, veryLightScryptN, veryLightScryptP) } } - return d, new(d) + return d, newKs(d) } diff --git a/accounts/keystore/passphrase.go b/accounts/keystore/passphrase.go index a0b6cf5385d2..1ced41e9975b 100644 --- a/accounts/keystore/passphrase.go +++ b/accounts/keystore/passphrase.go @@ -38,6 +38,7 @@ import ( "os" "path/filepath" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" @@ -97,9 +98,9 @@ func (ks keyStorePassphrase) GetKey(addr common.Address, filename, auth string) } // StoreKey generates a key, encrypts with 'auth' and stores in the given directory -func StoreKey(dir, auth string, scryptN, scryptP int) (common.Address, error) { +func StoreKey(dir, auth string, scryptN, scryptP int) (accounts.Account, error) { _, a, err := storeNewKey(&keyStorePassphrase{dir, scryptN, scryptP, false}, rand.Reader, auth) - return a.Address, err + return a, err } func (ks keyStorePassphrase) StoreKey(filename string, key *Key, auth string) error { diff --git a/accounts/keystore/plain_test.go b/accounts/keystore/plain_test.go index 32852a0add31..b831925838a4 100644 --- a/accounts/keystore/plain_test.go +++ b/accounts/keystore/plain_test.go @@ -96,7 +96,7 @@ func TestKeyStorePassphraseDecryptionFail(t *testing.T) { t.Fatal(err) } if _, err = ks.GetKey(k1.Address, account.URL.Path, "bar"); err != ErrDecrypt { - t.Fatalf("wrong error for invalid passphrase\ngot %q\nwant %q", err, ErrDecrypt) + t.Fatalf("wrong error for invalid password\ngot %q\nwant %q", err, ErrDecrypt) } } diff --git a/accounts/keystore/testdata/keystore/README b/accounts/keystore/testdata/keystore/README index a5a86f964d2c..6af9ac3f1ba0 100644 --- a/accounts/keystore/testdata/keystore/README +++ b/accounts/keystore/testdata/keystore/README @@ -1,5 +1,5 @@ This directory contains accounts for testing. -The passphrase that unlocks them is "foobar". +The password that unlocks them is "foobar". The "good" key files which are supposed to be loadable are: diff --git a/accounts/keystore/wallet.go b/accounts/keystore/wallet.go index 2f774cc941fa..498067d49730 100644 --- a/accounts/keystore/wallet.go +++ b/accounts/keystore/wallet.go @@ -22,6 +22,7 @@ import ( ethereum "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" ) // keystoreWallet implements the accounts.Wallet interface for the original @@ -76,13 +77,14 @@ func (w *keystoreWallet) Derive(path accounts.DerivationPath, pin bool) (account // SelfDerive implements accounts.Wallet, but is a noop for plain wallets since // there is no notion of hierarchical account derivation for plain keystore accounts. -func (w *keystoreWallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) {} +func (w *keystoreWallet) SelfDerive(bases []accounts.DerivationPath, chain ethereum.ChainStateReader) { +} -// SignHash implements accounts.Wallet, attempting to sign the given hash with +// signHash attempts to sign the given hash with // the given account. If the wallet does not wrap this particular account, an // error is returned to avoid account leakage (even though in theory we may be // able to sign via our shared keystore backend). -func (w *keystoreWallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { +func (w *keystoreWallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { // Make sure the requested account is contained within if !w.Contains(account) { return nil, accounts.ErrUnknownAccount @@ -91,28 +93,47 @@ func (w *keystoreWallet) SignHash(account accounts.Account, hash []byte) ([]byte return w.keystore.SignHash(account, hash) } -// SignTx implements accounts.Wallet, attempting to sign the given transaction -// with the given account. If the wallet does not wrap this particular account, -// an error is returned to avoid account leakage (even though in theory we may -// be able to sign via our shared keystore backend). -func (w *keystoreWallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *keystoreWallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + return w.signHash(account, crypto.Keccak256(data)) +} + +// SignDataWithPassphrase signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *keystoreWallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { // Make sure the requested account is contained within if !w.Contains(account) { return nil, accounts.ErrUnknownAccount } // Account seems valid, request the keystore to sign - return w.keystore.SignTx(account, tx, chainID) + return w.keystore.SignHashWithPassphrase(account, passphrase, crypto.Keccak256(data)) } -// SignHashWithPassphrase implements accounts.Wallet, attempting to sign the +func (w *keystoreWallet) SignText(account accounts.Account, text []byte) ([]byte, error) { + return w.signHash(account, accounts.TextHash(text)) +} + +// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the // given hash with the given account using passphrase as extra authentication. -func (w *keystoreWallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { +func (w *keystoreWallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + // Make sure the requested account is contained within + if !w.Contains(account) { + return nil, accounts.ErrUnknownAccount + } + // Account seems valid, request the keystore to sign + return w.keystore.SignHashWithPassphrase(account, passphrase, accounts.TextHash(text)) +} + +// SignTx implements accounts.Wallet, attempting to sign the given transaction +// with the given account. If the wallet does not wrap this particular account, +// an error is returned to avoid account leakage (even though in theory we may +// be able to sign via our shared keystore backend). +func (w *keystoreWallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { // Make sure the requested account is contained within if !w.Contains(account) { return nil, accounts.ErrUnknownAccount } // Account seems valid, request the keystore to sign - return w.keystore.SignHashWithPassphrase(account, passphrase, hash) + return w.keystore.SignTx(account, tx, chainID) } // SignTxWithPassphrase implements accounts.Wallet, attempting to sign the given diff --git a/accounts/keystore/watch.go b/accounts/keystore/watch.go index bbcfb99257ad..d6ef53327d43 100644 --- a/accounts/keystore/watch.go +++ b/accounts/keystore/watch.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build darwin,!ios freebsd linux,!arm64 netbsd solaris +// +build darwin,!ios,cgo freebsd linux,!arm64 netbsd solaris package keystore diff --git a/accounts/keystore/watch_fallback.go b/accounts/keystore/watch_fallback.go index 7c5e9cb2e214..de0e87f8a5a7 100644 --- a/accounts/keystore/watch_fallback.go +++ b/accounts/keystore/watch_fallback.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build ios linux,arm64 windows !darwin,!freebsd,!linux,!netbsd,!solaris +// +build darwin,!cgo ios linux,arm64 windows !darwin,!freebsd,!linux,!netbsd,!solaris // This is the fallback implementation of directory watching. // It is used on unsupported platforms. diff --git a/accounts/manager.go b/accounts/manager.go index 96ca298fc5df..731d12ea30a9 100644 --- a/accounts/manager.go +++ b/accounts/manager.go @@ -21,12 +21,22 @@ import ( "sort" "sync" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/event" ) +// Config contains the settings of the global account manager. +// +// TODO(rjl493456442, karalabe, holiman): Get rid of this when account management +// is removed in favor of Clef. +type Config struct { + InsecureUnlockAllowed bool // Whether account unlocking in insecure environment is allowed +} + // Manager is an overarching account manager that can communicate with various // backends for signing transactions. type Manager struct { + config *Config // Global account manager configurations backends map[reflect.Type][]Backend // Index of backends currently registered updaters []event.Subscription // Wallet update subscriptions for all backends updates chan WalletEvent // Subscription sink for backend wallet changes @@ -40,7 +50,7 @@ type Manager struct { // NewManager creates a generic account manager to sign transaction via various // supported backends. -func NewManager(backends ...Backend) *Manager { +func NewManager(config *Config, backends ...Backend) *Manager { // Retrieve the initial list of wallets from the backends and sort by URL var wallets []Wallet for _, backend := range backends { @@ -55,6 +65,7 @@ func NewManager(backends ...Backend) *Manager { } // Assemble the account manager and return am := &Manager{ + config: config, backends: make(map[reflect.Type][]Backend), updaters: subs, updates: updates, @@ -77,6 +88,11 @@ func (am *Manager) Close() error { return <-errc } +// Config returns the configuration of account manager. +func (am *Manager) Config() *Config { + return am.config +} + // update is the wallet event loop listening for notifications from the backends // and updating the cache of wallets. func (am *Manager) update() { @@ -147,6 +163,20 @@ func (am *Manager) Wallet(url string) (Wallet, error) { return nil, ErrUnknownWallet } +// Accounts returns all account addresses of all wallets within the account manager +func (am *Manager) Accounts() []common.Address { + am.lock.RLock() + defer am.lock.RUnlock() + + addresses := make([]common.Address, 0) // return [] instead of nil if empty + for _, wallet := range am.wallets { + for _, account := range wallet.Accounts() { + addresses = append(addresses, account.Address) + } + } + return addresses +} + // Find attempts to locate the wallet corresponding to a specific account. Since // accounts can be dynamically added to and removed from wallets, this method has // a linear runtime in the number of wallets. diff --git a/accounts/scwallet/README.md b/accounts/scwallet/README.md new file mode 100644 index 000000000000..cfca916b3ae8 --- /dev/null +++ b/accounts/scwallet/README.md @@ -0,0 +1,102 @@ +# Using the smartcard wallet + +## Requirements + + * A USB smartcard reader + * A keycard that supports the status app + * PCSCD version 4.3 running on your system **Only version 4.3 is currently supported** + +## Preparing the smartcard + + **WARNING: FOILLOWING THESE INSTRUCTIONS WILL DESTROY THE MASTER KEY ON YOUR CARD. ONLY PROCEED IF NO FUNDS ARE ASSOCIATED WITH THESE ACCOUNTS** + + You can use status' [keycard-cli](https://github.com/status-im/keycard-cli) and you should get _at least_ version 2.1.1 of their [smartcard application](https://github.com/status-im/status-keycard/releases/download/2.2.1/keycard_v2.2.1.cap) + + You also need to make sure that the PCSC daemon is running on your system. + + Then, you can install the application to the card by typing: + + ``` + keycard install -a keycard_v2.2.1.cap && keycard init + ``` + + At the end of this process, you will be provided with a PIN, a PUK and a pairing password. Write them down, you'll need them shortly. + + Start `geth` with the `console` command. You will notice the following warning: + + ``` + WARN [04-09|16:58:38.898] Failed to open wallet url=keycard://044def09 err="smartcard: pairing password needed" + ``` + + Write down the URL (`keycard://044def09` in this example). Then ask `geth` to open the wallet: + + ``` + > personal.openWallet("keycard://044def09") + Please enter the pairing password: + ``` + + Enter the pairing password that you have received during card initialization. Same with the PIN that you will subsequently be + asked for. + + If everything goes well, you should see your new account when typing `personal` on the console: + + ``` + > personal + WARN [04-09|17:02:07.330] Smartcard wallet account derivation failed url=keycard://044def09 err="Unexpected response status Cla=0x80, Ins=0xd1, Sw=0x6985" + { + listAccounts: [], + listWallets: [{ + status: "Empty, waiting for initialization", + url: "keycard://044def09" + }], + ... + } + ``` + + So the communication with the card is working, but there is no key associated with this wallet. Let's create it: + + ``` + > personal.initializeWallet("keycard://044def09") + "tilt ... impact" + ``` + + You should get a list of words, this is your seed so write them down. Your wallet should now be initialized: + + ``` + > personal.listWallets + [{ + accounts: [{ + address: "0x678b7cd55c61917defb23546a41803c5bfefbc7a", + url: "keycard://044d/m/44'/60'/0'/0/0" + }], + status: "Online", + url: "keycard://044def09" + }] + ``` + + You're all set! + +## Usage + + 1. Start `geth` with the `console` command + 2. Check the card's URL by checking `personal.listWallets`: + +``` + listWallets: [{ + status: "Online, can derive public keys", + url: "keycard://a4d73015" + }] +``` + + 3. Open the wallet, you will be prompted for your pairing password, then PIN: + +``` +personal.openWallet("keycard://a4d73015") +``` + + 4. Check that creation was successful by typing e.g. `personal`. Then use it like a regular wallet. + +## Known issues + + * Starting geth with a valid card seems to make firefox crash. + * PCSC version 4.4 should work, but is currently untested diff --git a/accounts/scwallet/apdu.go b/accounts/scwallet/apdu.go new file mode 100644 index 000000000000..bd3660604e1f --- /dev/null +++ b/accounts/scwallet/apdu.go @@ -0,0 +1,87 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package scwallet + +import ( + "bytes" + "encoding/binary" + "fmt" +) + +// commandAPDU represents an application data unit sent to a smartcard. +type commandAPDU struct { + Cla, Ins, P1, P2 uint8 // Class, Instruction, Parameter 1, Parameter 2 + Data []byte // Command data + Le uint8 // Command data length +} + +// serialize serializes a command APDU. +func (ca commandAPDU) serialize() ([]byte, error) { + buf := new(bytes.Buffer) + + if err := binary.Write(buf, binary.BigEndian, ca.Cla); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.BigEndian, ca.Ins); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.BigEndian, ca.P1); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.BigEndian, ca.P2); err != nil { + return nil, err + } + if len(ca.Data) > 0 { + if err := binary.Write(buf, binary.BigEndian, uint8(len(ca.Data))); err != nil { + return nil, err + } + if err := binary.Write(buf, binary.BigEndian, ca.Data); err != nil { + return nil, err + } + } + if err := binary.Write(buf, binary.BigEndian, ca.Le); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// responseAPDU represents an application data unit received from a smart card. +type responseAPDU struct { + Data []byte // response data + Sw1, Sw2 uint8 // status words 1 and 2 +} + +// deserialize deserializes a response APDU. +func (ra *responseAPDU) deserialize(data []byte) error { + if len(data) < 2 { + return fmt.Errorf("can not deserialize data: payload too short (%d < 2)", len(data)) + } + + ra.Data = make([]byte, len(data)-2) + + buf := bytes.NewReader(data) + if err := binary.Read(buf, binary.BigEndian, &ra.Data); err != nil { + return err + } + if err := binary.Read(buf, binary.BigEndian, &ra.Sw1); err != nil { + return err + } + if err := binary.Read(buf, binary.BigEndian, &ra.Sw2); err != nil { + return err + } + return nil +} diff --git a/accounts/scwallet/hub.go b/accounts/scwallet/hub.go new file mode 100644 index 000000000000..5f939c658627 --- /dev/null +++ b/accounts/scwallet/hub.go @@ -0,0 +1,302 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// This package implements support for smartcard-based hardware wallets such as +// the one written by Status: https://github.com/status-im/hardware-wallet +// +// This implementation of smartcard wallets have a different interaction process +// to other types of hardware wallet. The process works like this: +// +// 1. (First use with a given client) Establish a pairing between hardware +// wallet and client. This requires a secret value called a 'pairing password'. +// You can pair with an unpaired wallet with `personal.openWallet(URI, pairing password)`. +// 2. (First use only) Initialize the wallet, which generates a keypair, stores +// it on the wallet, and returns it so the user can back it up. You can +// initialize a wallet with `personal.initializeWallet(URI)`. +// 3. Connect to the wallet using the pairing information established in step 1. +// You can connect to a paired wallet with `personal.openWallet(URI, PIN)`. +// 4. Interact with the wallet as normal. + +package scwallet + +import ( + "encoding/json" + "io/ioutil" + "os" + "path/filepath" + "sort" + "sync" + "time" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/log" + pcsc "github.com/gballet/go-libpcsclite" +) + +// Scheme is the URI prefix for smartcard wallets. +const Scheme = "keycard" + +// refreshCycle is the maximum time between wallet refreshes (if USB hotplug +// notifications don't work). +const refreshCycle = time.Second + +// refreshThrottling is the minimum time between wallet refreshes to avoid thrashing. +const refreshThrottling = 500 * time.Millisecond + +// smartcardPairing contains information about a smart card we have paired with +// or might pair with the hub. +type smartcardPairing struct { + PublicKey []byte `json:"publicKey"` + PairingIndex uint8 `json:"pairingIndex"` + PairingKey []byte `json:"pairingKey"` + Accounts map[common.Address]accounts.DerivationPath `json:"accounts"` +} + +// Hub is a accounts.Backend that can find and handle generic PC/SC hardware wallets. +type Hub struct { + scheme string // Protocol scheme prefixing account and wallet URLs. + + context *pcsc.Client + datadir string + pairings map[string]smartcardPairing + + refreshed time.Time // Time instance when the list of wallets was last refreshed + wallets map[string]*Wallet // Mapping from reader names to wallet instances + updateFeed event.Feed // Event feed to notify wallet additions/removals + updateScope event.SubscriptionScope // Subscription scope tracking current live listeners + updating bool // Whether the event notification loop is running + + quit chan chan error + + stateLock sync.RWMutex // Protects the internals of the hub from racey access +} + +func (hub *Hub) readPairings() error { + hub.pairings = make(map[string]smartcardPairing) + pairingFile, err := os.Open(filepath.Join(hub.datadir, "smartcards.json")) + if err != nil { + if os.IsNotExist(err) { + return nil + } + return err + } + + pairingData, err := ioutil.ReadAll(pairingFile) + if err != nil { + return err + } + var pairings []smartcardPairing + if err := json.Unmarshal(pairingData, &pairings); err != nil { + return err + } + + for _, pairing := range pairings { + hub.pairings[string(pairing.PublicKey)] = pairing + } + return nil +} + +func (hub *Hub) writePairings() error { + pairingFile, err := os.OpenFile(filepath.Join(hub.datadir, "smartcards.json"), os.O_RDWR|os.O_CREATE, 0755) + if err != nil { + return err + } + defer pairingFile.Close() + + pairings := make([]smartcardPairing, 0, len(hub.pairings)) + for _, pairing := range hub.pairings { + pairings = append(pairings, pairing) + } + + pairingData, err := json.Marshal(pairings) + if err != nil { + return err + } + + if _, err := pairingFile.Write(pairingData); err != nil { + return err + } + + return nil +} + +func (hub *Hub) pairing(wallet *Wallet) *smartcardPairing { + if pairing, ok := hub.pairings[string(wallet.PublicKey)]; ok { + return &pairing + } + return nil +} + +func (hub *Hub) setPairing(wallet *Wallet, pairing *smartcardPairing) error { + if pairing == nil { + delete(hub.pairings, string(wallet.PublicKey)) + } else { + hub.pairings[string(wallet.PublicKey)] = *pairing + } + return hub.writePairings() +} + +// NewHub creates a new hardware wallet manager for smartcards. +func NewHub(daemonPath string, scheme string, datadir string) (*Hub, error) { + context, err := pcsc.EstablishContext(daemonPath, pcsc.ScopeSystem) + if err != nil { + return nil, err + } + hub := &Hub{ + scheme: scheme, + context: context, + datadir: datadir, + wallets: make(map[string]*Wallet), + quit: make(chan chan error), + } + if err := hub.readPairings(); err != nil { + return nil, err + } + hub.refreshWallets() + return hub, nil +} + +// Wallets implements accounts.Backend, returning all the currently tracked smart +// cards that appear to be hardware wallets. +func (hub *Hub) Wallets() []accounts.Wallet { + // Make sure the list of wallets is up to date + hub.refreshWallets() + + hub.stateLock.RLock() + defer hub.stateLock.RUnlock() + + cpy := make([]accounts.Wallet, 0, len(hub.wallets)) + for _, wallet := range hub.wallets { + cpy = append(cpy, wallet) + } + sort.Sort(accounts.WalletsByURL(cpy)) + return cpy +} + +// refreshWallets scans the devices attached to the machine and updates the +// list of wallets based on the found devices. +func (hub *Hub) refreshWallets() { + // Don't scan the USB like crazy it the user fetches wallets in a loop + hub.stateLock.RLock() + elapsed := time.Since(hub.refreshed) + hub.stateLock.RUnlock() + + if elapsed < refreshThrottling { + return + } + // Retrieve all the smart card reader to check for cards + readers, err := hub.context.ListReaders() + if err != nil { + // This is a perverted hack, the scard library returns an error if no card + // readers are present instead of simply returning an empty list. We don't + // want to fill the user's log with errors, so filter those out. + if err.Error() != "scard: Cannot find a smart card reader." { + log.Error("Failed to enumerate smart card readers", "err", err) + return + } + } + // Transform the current list of wallets into the new one + hub.stateLock.Lock() + + events := []accounts.WalletEvent{} + seen := make(map[string]struct{}) + + for _, reader := range readers { + // Mark the reader as present + seen[reader] = struct{}{} + + // If we alreay know about this card, skip to the next reader, otherwise clean up + if wallet, ok := hub.wallets[reader]; ok { + if err := wallet.ping(); err == nil { + continue + } + wallet.Close() + events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletDropped}) + delete(hub.wallets, reader) + } + // New card detected, try to connect to it + card, err := hub.context.Connect(reader, pcsc.ShareShared, pcsc.ProtocolAny) + if err != nil { + log.Debug("Failed to open smart card", "reader", reader, "err", err) + continue + } + wallet := NewWallet(hub, card) + if err = wallet.connect(); err != nil { + log.Debug("Failed to connect to smart card", "reader", reader, "err", err) + card.Disconnect(pcsc.LeaveCard) + continue + } + // Card connected, start tracking in amongs the wallets + hub.wallets[reader] = wallet + events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletArrived}) + } + // Remove any wallets no longer present + for reader, wallet := range hub.wallets { + if _, ok := seen[reader]; !ok { + wallet.Close() + events = append(events, accounts.WalletEvent{Wallet: wallet, Kind: accounts.WalletDropped}) + delete(hub.wallets, reader) + } + } + hub.refreshed = time.Now() + hub.stateLock.Unlock() + + for _, event := range events { + hub.updateFeed.Send(event) + } +} + +// Subscribe implements accounts.Backend, creating an async subscription to +// receive notifications on the addition or removal of smart card wallets. +func (hub *Hub) Subscribe(sink chan<- accounts.WalletEvent) event.Subscription { + // We need the mutex to reliably start/stop the update loop + hub.stateLock.Lock() + defer hub.stateLock.Unlock() + + // Subscribe the caller and track the subscriber count + sub := hub.updateScope.Track(hub.updateFeed.Subscribe(sink)) + + // Subscribers require an active notification loop, start it + if !hub.updating { + hub.updating = true + go hub.updater() + } + return sub +} + +// updater is responsible for maintaining an up-to-date list of wallets managed +// by the smart card hub, and for firing wallet addition/removal events. +func (hub *Hub) updater() { + for { + // TODO: Wait for a USB hotplug event (not supported yet) or a refresh timeout + // <-hub.changes + time.Sleep(refreshCycle) + + // Run the wallet refresher + hub.refreshWallets() + + // If all our subscribers left, stop the updater + hub.stateLock.Lock() + if hub.updateScope.Count() == 0 { + hub.updating = false + hub.stateLock.Unlock() + return + } + hub.stateLock.Unlock() + } +} diff --git a/accounts/scwallet/securechannel.go b/accounts/scwallet/securechannel.go new file mode 100644 index 000000000000..fad876a019c0 --- /dev/null +++ b/accounts/scwallet/securechannel.go @@ -0,0 +1,346 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package scwallet + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha256" + "crypto/sha512" + "fmt" + + "github.com/ethereum/go-ethereum/crypto" + pcsc "github.com/gballet/go-libpcsclite" + "github.com/wsddn/go-ecdh" + "golang.org/x/crypto/pbkdf2" + "golang.org/x/text/unicode/norm" +) + +const ( + maxPayloadSize = 223 + pairP1FirstStep = 0 + pairP1LastStep = 1 + + scSecretLength = 32 + scBlockSize = 16 + + insOpenSecureChannel = 0x10 + insMutuallyAuthenticate = 0x11 + insPair = 0x12 + insUnpair = 0x13 + + pairingSalt = "Keycard Pairing Password Salt" +) + +// SecureChannelSession enables secure communication with a hardware wallet. +type SecureChannelSession struct { + card *pcsc.Card // A handle to the smartcard for communication + secret []byte // A shared secret generated from our ECDSA keys + publicKey []byte // Our own ephemeral public key + PairingKey []byte // A permanent shared secret for a pairing, if present + sessionEncKey []byte // The current session encryption key + sessionMacKey []byte // The current session MAC key + iv []byte // The current IV + PairingIndex uint8 // The pairing index +} + +// NewSecureChannelSession creates a new secure channel for the given card and public key. +func NewSecureChannelSession(card *pcsc.Card, keyData []byte) (*SecureChannelSession, error) { + // Generate an ECDSA keypair for ourselves + gen := ecdh.NewEllipticECDH(crypto.S256()) + private, public, err := gen.GenerateKey(rand.Reader) + if err != nil { + return nil, err + } + + cardPublic, ok := gen.Unmarshal(keyData) + if !ok { + return nil, fmt.Errorf("Could not unmarshal public key from card") + } + + secret, err := gen.GenerateSharedSecret(private, cardPublic) + if err != nil { + return nil, err + } + + return &SecureChannelSession{ + card: card, + secret: secret, + publicKey: gen.Marshal(public), + }, nil +} + +// Pair establishes a new pairing with the smartcard. +func (s *SecureChannelSession) Pair(pairingPassword []byte) error { + secretHash := pbkdf2.Key(norm.NFKD.Bytes(pairingPassword), norm.NFKD.Bytes([]byte(pairingSalt)), 50000, 32, sha256.New) + + challenge := make([]byte, 32) + if _, err := rand.Read(challenge); err != nil { + return err + } + + response, err := s.pair(pairP1FirstStep, challenge) + if err != nil { + return err + } + + md := sha256.New() + md.Write(secretHash[:]) + md.Write(challenge) + + expectedCryptogram := md.Sum(nil) + cardCryptogram := response.Data[:32] + cardChallenge := response.Data[32:64] + + if !bytes.Equal(expectedCryptogram, cardCryptogram) { + return fmt.Errorf("Invalid card cryptogram %v != %v", expectedCryptogram, cardCryptogram) + } + + md.Reset() + md.Write(secretHash[:]) + md.Write(cardChallenge) + response, err = s.pair(pairP1LastStep, md.Sum(nil)) + if err != nil { + return err + } + + md.Reset() + md.Write(secretHash[:]) + md.Write(response.Data[1:]) + s.PairingKey = md.Sum(nil) + s.PairingIndex = response.Data[0] + + return nil +} + +// Unpair disestablishes an existing pairing. +func (s *SecureChannelSession) Unpair() error { + if s.PairingKey == nil { + return fmt.Errorf("Cannot unpair: not paired") + } + + _, err := s.transmitEncrypted(claSCWallet, insUnpair, s.PairingIndex, 0, []byte{}) + if err != nil { + return err + } + s.PairingKey = nil + // Close channel + s.iv = nil + return nil +} + +// Open initializes the secure channel. +func (s *SecureChannelSession) Open() error { + if s.iv != nil { + return fmt.Errorf("Session already opened") + } + + response, err := s.open() + if err != nil { + return err + } + + // Generate the encryption/mac key by hashing our shared secret, + // pairing key, and the first bytes returned from the Open APDU. + md := sha512.New() + md.Write(s.secret) + md.Write(s.PairingKey) + md.Write(response.Data[:scSecretLength]) + keyData := md.Sum(nil) + s.sessionEncKey = keyData[:scSecretLength] + s.sessionMacKey = keyData[scSecretLength : scSecretLength*2] + + // The IV is the last bytes returned from the Open APDU. + s.iv = response.Data[scSecretLength:] + + return s.mutuallyAuthenticate() +} + +// mutuallyAuthenticate is an internal method to authenticate both ends of the +// connection. +func (s *SecureChannelSession) mutuallyAuthenticate() error { + data := make([]byte, scSecretLength) + if _, err := rand.Read(data); err != nil { + return err + } + + response, err := s.transmitEncrypted(claSCWallet, insMutuallyAuthenticate, 0, 0, data) + if err != nil { + return err + } + if response.Sw1 != 0x90 || response.Sw2 != 0x00 { + return fmt.Errorf("Got unexpected response from MUTUALLY_AUTHENTICATE: 0x%x%x", response.Sw1, response.Sw2) + } + + if len(response.Data) != scSecretLength { + return fmt.Errorf("Response from MUTUALLY_AUTHENTICATE was %d bytes, expected %d", len(response.Data), scSecretLength) + } + + return nil +} + +// open is an internal method that sends an open APDU. +func (s *SecureChannelSession) open() (*responseAPDU, error) { + return transmit(s.card, &commandAPDU{ + Cla: claSCWallet, + Ins: insOpenSecureChannel, + P1: s.PairingIndex, + P2: 0, + Data: s.publicKey, + Le: 0, + }) +} + +// pair is an internal method that sends a pair APDU. +func (s *SecureChannelSession) pair(p1 uint8, data []byte) (*responseAPDU, error) { + return transmit(s.card, &commandAPDU{ + Cla: claSCWallet, + Ins: insPair, + P1: p1, + P2: 0, + Data: data, + Le: 0, + }) +} + +// transmitEncrypted sends an encrypted message, and decrypts and returns the response. +func (s *SecureChannelSession) transmitEncrypted(cla, ins, p1, p2 byte, data []byte) (*responseAPDU, error) { + if s.iv == nil { + return nil, fmt.Errorf("Channel not open") + } + + data, err := s.encryptAPDU(data) + if err != nil { + return nil, err + } + meta := [16]byte{cla, ins, p1, p2, byte(len(data) + scBlockSize)} + if err = s.updateIV(meta[:], data); err != nil { + return nil, err + } + + fulldata := make([]byte, len(s.iv)+len(data)) + copy(fulldata, s.iv) + copy(fulldata[len(s.iv):], data) + + response, err := transmit(s.card, &commandAPDU{ + Cla: cla, + Ins: ins, + P1: p1, + P2: p2, + Data: fulldata, + }) + if err != nil { + return nil, err + } + + rmeta := [16]byte{byte(len(response.Data))} + rmac := response.Data[:len(s.iv)] + rdata := response.Data[len(s.iv):] + plainData, err := s.decryptAPDU(rdata) + if err != nil { + return nil, err + } + + if err = s.updateIV(rmeta[:], rdata); err != nil { + return nil, err + } + if !bytes.Equal(s.iv, rmac) { + return nil, fmt.Errorf("Invalid MAC in response") + } + + rapdu := &responseAPDU{} + rapdu.deserialize(plainData) + + if rapdu.Sw1 != sw1Ok { + return nil, fmt.Errorf("Unexpected response status Cla=0x%x, Ins=0x%x, Sw=0x%x%x", cla, ins, rapdu.Sw1, rapdu.Sw2) + } + + return rapdu, nil +} + +// encryptAPDU is an internal method that serializes and encrypts an APDU. +func (s *SecureChannelSession) encryptAPDU(data []byte) ([]byte, error) { + if len(data) > maxPayloadSize { + return nil, fmt.Errorf("Payload of %d bytes exceeds maximum of %d", len(data), maxPayloadSize) + } + data = pad(data, 0x80) + + ret := make([]byte, len(data)) + + a, err := aes.NewCipher(s.sessionEncKey) + if err != nil { + return nil, err + } + crypter := cipher.NewCBCEncrypter(a, s.iv) + crypter.CryptBlocks(ret, data) + return ret, nil +} + +// pad applies message padding to a 16 byte boundary. +func pad(data []byte, terminator byte) []byte { + padded := make([]byte, (len(data)/16+1)*16) + copy(padded, data) + padded[len(data)] = terminator + return padded +} + +// decryptAPDU is an internal method that decrypts and deserializes an APDU. +func (s *SecureChannelSession) decryptAPDU(data []byte) ([]byte, error) { + a, err := aes.NewCipher(s.sessionEncKey) + if err != nil { + return nil, err + } + + ret := make([]byte, len(data)) + + crypter := cipher.NewCBCDecrypter(a, s.iv) + crypter.CryptBlocks(ret, data) + return unpad(ret, 0x80) +} + +// unpad strips padding from a message. +func unpad(data []byte, terminator byte) ([]byte, error) { + for i := 1; i <= 16; i++ { + switch data[len(data)-i] { + case 0: + continue + case terminator: + return data[:len(data)-i], nil + default: + return nil, fmt.Errorf("Expected end of padding, got %d", data[len(data)-i]) + } + } + return nil, fmt.Errorf("Expected end of padding, got 0") +} + +// updateIV is an internal method that updates the initialization vector after +// each message exchanged. +func (s *SecureChannelSession) updateIV(meta, data []byte) error { + data = pad(data, 0) + a, err := aes.NewCipher(s.sessionMacKey) + if err != nil { + return err + } + crypter := cipher.NewCBCEncrypter(a, make([]byte, 16)) + crypter.CryptBlocks(meta, meta) + crypter.CryptBlocks(data, data) + // The first 16 bytes of the last block is the MAC + s.iv = data[len(data)-32 : len(data)-16] + return nil +} diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go new file mode 100644 index 000000000000..57b597706254 --- /dev/null +++ b/accounts/scwallet/wallet.go @@ -0,0 +1,1082 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package scwallet + +import ( + "bytes" + "context" + "crypto/hmac" + "crypto/sha256" + "crypto/sha512" + "encoding/asn1" + "encoding/binary" + "errors" + "fmt" + "math/big" + "regexp" + "sort" + "strings" + "sync" + "time" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + pcsc "github.com/gballet/go-libpcsclite" + "github.com/status-im/keycard-go/derivationpath" +) + +// ErrPairingPasswordNeeded is returned if opening the smart card requires pairing with a pairing +// password. In this case, the calling application should request user input to enter +// the pairing password and send it back. +var ErrPairingPasswordNeeded = errors.New("smartcard: pairing password needed") + +// ErrPINNeeded is returned if opening the smart card requires a PIN code. In +// this case, the calling application should request user input to enter the PIN +// and send it back. +var ErrPINNeeded = errors.New("smartcard: pin needed") + +// ErrPINUnblockNeeded is returned if opening the smart card requires a PIN code, +// but all PIN attempts have already been exhausted. In this case the calling +// application should request user input for the PUK and a new PIN code to set +// fo the card. +var ErrPINUnblockNeeded = errors.New("smartcard: pin unblock needed") + +// ErrAlreadyOpen is returned if the smart card is attempted to be opened, but +// there is already a paired and unlocked session. +var ErrAlreadyOpen = errors.New("smartcard: already open") + +// ErrPubkeyMismatch is returned if the public key recovered from a signature +// does not match the one expected by the user. +var ErrPubkeyMismatch = errors.New("smartcard: recovered public key mismatch") + +var ( + appletAID = []byte{0xA0, 0x00, 0x00, 0x08, 0x04, 0x00, 0x01, 0x01, 0x01} + // DerivationSignatureHash is used to derive the public key from the signature of this hash + DerivationSignatureHash = sha256.Sum256(common.Hash{}.Bytes()) +) + +// List of APDU command-related constants +const ( + claISO7816 = 0 + claSCWallet = 0x80 + + insSelect = 0xA4 + insGetResponse = 0xC0 + sw1GetResponse = 0x61 + sw1Ok = 0x90 + + insVerifyPin = 0x20 + insUnblockPin = 0x22 + insExportKey = 0xC2 + insSign = 0xC0 + insLoadKey = 0xD0 + insDeriveKey = 0xD1 + insStatus = 0xF2 +) + +// List of ADPU command parameters +const ( + P1DeriveKeyFromMaster = uint8(0x00) + P1DeriveKeyFromParent = uint8(0x01) + P1DeriveKeyFromCurrent = uint8(0x10) + statusP1WalletStatus = uint8(0x00) + statusP1Path = uint8(0x01) + signP1PrecomputedHash = uint8(0x01) + signP2OnlyBlock = uint8(0x81) + exportP1Any = uint8(0x00) + exportP2Pubkey = uint8(0x01) +) + +// Minimum time to wait between self derivation attempts, even it the user is +// requesting accounts like crazy. +const selfDeriveThrottling = time.Second + +// Wallet represents a smartcard wallet instance. +type Wallet struct { + Hub *Hub // A handle to the Hub that instantiated this wallet. + PublicKey []byte // The wallet's public key (used for communication and identification, not signing!) + + lock sync.Mutex // Lock that gates access to struct fields and communication with the card + card *pcsc.Card // A handle to the smartcard interface for the wallet. + session *Session // The secure communication session with the card + log log.Logger // Contextual logger to tag the base with its id + + deriveNextPaths []accounts.DerivationPath // Next derivation paths for account auto-discovery (multiple bases supported) + deriveNextAddrs []common.Address // Next derived account addresses for auto-discovery (multiple bases supported) + deriveChain ethereum.ChainStateReader // Blockchain state reader to discover used account with + deriveReq chan chan struct{} // Channel to request a self-derivation on + deriveQuit chan chan error // Channel to terminate the self-deriver with +} + +// NewWallet constructs and returns a new Wallet instance. +func NewWallet(hub *Hub, card *pcsc.Card) *Wallet { + wallet := &Wallet{ + Hub: hub, + card: card, + } + return wallet +} + +// transmit sends an APDU to the smartcard and receives and decodes the response. +// It automatically handles requests by the card to fetch the return data separately, +// and returns an error if the response status code is not success. +func transmit(card *pcsc.Card, command *commandAPDU) (*responseAPDU, error) { + data, err := command.serialize() + if err != nil { + return nil, err + } + + responseData, _, err := card.Transmit(data) + if err != nil { + return nil, err + } + + response := new(responseAPDU) + if err = response.deserialize(responseData); err != nil { + return nil, err + } + + // Are we being asked to fetch the response separately? + if response.Sw1 == sw1GetResponse && (command.Cla != claISO7816 || command.Ins != insGetResponse) { + return transmit(card, &commandAPDU{ + Cla: claISO7816, + Ins: insGetResponse, + P1: 0, + P2: 0, + Data: nil, + Le: response.Sw2, + }) + } + + if response.Sw1 != sw1Ok { + return nil, fmt.Errorf("Unexpected insecure response status Cla=0x%x, Ins=0x%x, Sw=0x%x%x", command.Cla, command.Ins, response.Sw1, response.Sw2) + } + + return response, nil +} + +// applicationInfo encodes information about the smartcard application - its +// instance UID and public key. +type applicationInfo struct { + InstanceUID []byte `asn1:"tag:15"` + PublicKey []byte `asn1:"tag:0"` +} + +// connect connects to the wallet application and establishes a secure channel with it. +// must be called before any other interaction with the wallet. +func (w *Wallet) connect() error { + w.lock.Lock() + defer w.lock.Unlock() + + appinfo, err := w.doselect() + if err != nil { + return err + } + + channel, err := NewSecureChannelSession(w.card, appinfo.PublicKey) + if err != nil { + return err + } + + w.PublicKey = appinfo.PublicKey + w.log = log.New("url", w.URL()) + w.session = &Session{ + Wallet: w, + Channel: channel, + } + return nil +} + +// doselect is an internal (unlocked) function to send a SELECT APDU to the card. +func (w *Wallet) doselect() (*applicationInfo, error) { + response, err := transmit(w.card, &commandAPDU{ + Cla: claISO7816, + Ins: insSelect, + P1: 4, + P2: 0, + Data: appletAID, + }) + if err != nil { + return nil, err + } + + appinfo := new(applicationInfo) + if _, err := asn1.UnmarshalWithParams(response.Data, appinfo, "tag:4"); err != nil { + return nil, err + } + return appinfo, nil +} + +// ping checks the card's status and returns an error if unsuccessful. +func (w *Wallet) ping() error { + w.lock.Lock() + defer w.lock.Unlock() + + // We can't ping if not paired + if !w.session.paired() { + return nil + } + if _, err := w.session.walletStatus(); err != nil { + return err + } + return nil +} + +// release releases any resources held by an open wallet instance. +func (w *Wallet) release() error { + if w.session != nil { + return w.session.release() + } + return nil +} + +// pair is an internal (unlocked) function for establishing a new pairing +// with the wallet. +func (w *Wallet) pair(puk []byte) error { + if w.session.paired() { + return fmt.Errorf("Wallet already paired") + } + pairing, err := w.session.pair(puk) + if err != nil { + return err + } + if err = w.Hub.setPairing(w, &pairing); err != nil { + return err + } + return w.session.authenticate(pairing) +} + +// Unpair deletes an existing wallet pairing. +func (w *Wallet) Unpair(pin []byte) error { + w.lock.Lock() + defer w.lock.Unlock() + + if !w.session.paired() { + return fmt.Errorf("wallet %x not paired", w.PublicKey) + } + if err := w.session.verifyPin(pin); err != nil { + return fmt.Errorf("failed to verify pin: %s", err) + } + if err := w.session.unpair(); err != nil { + return fmt.Errorf("failed to unpair: %s", err) + } + if err := w.Hub.setPairing(w, nil); err != nil { + return err + } + return nil +} + +// URL retrieves the canonical path under which this wallet is reachable. It is +// user by upper layers to define a sorting order over all wallets from multiple +// backends. +func (w *Wallet) URL() accounts.URL { + return accounts.URL{ + Scheme: w.Hub.scheme, + Path: fmt.Sprintf("%x", w.PublicKey[1:5]), // Byte #0 isn't unique; 1:5 covers << 64K cards, bump to 1:9 for << 4M + } +} + +// Status returns a textual status to aid the user in the current state of the +// wallet. It also returns an error indicating any failure the wallet might have +// encountered. +func (w *Wallet) Status() (string, error) { + w.lock.Lock() + defer w.lock.Unlock() + + // If the card is not paired, we can only wait + if !w.session.paired() { + return "Unpaired, waiting for pairing password", nil + } + // Yay, we have an encrypted session, retrieve the actual status + status, err := w.session.walletStatus() + if err != nil { + return fmt.Sprintf("Failed: %v", err), err + } + switch { + case !w.session.verified && status.PinRetryCount == 0 && status.PukRetryCount == 0: + return fmt.Sprintf("Bricked, waiting for full wipe"), nil + case !w.session.verified && status.PinRetryCount == 0: + return fmt.Sprintf("Blocked, waiting for PUK (%d attempts left) and new PIN", status.PukRetryCount), nil + case !w.session.verified: + return fmt.Sprintf("Locked, waiting for PIN (%d attempts left)", status.PinRetryCount), nil + case !status.Initialized: + return fmt.Sprintf("Empty, waiting for initialization"), nil + default: + return fmt.Sprintf("Online"), nil + } +} + +// Open initializes access to a wallet instance. It is not meant to unlock or +// decrypt account keys, rather simply to establish a connection to hardware +// wallets and/or to access derivation seeds. +// +// The passphrase parameter may or may not be used by the implementation of a +// particular wallet instance. The reason there is no passwordless open method +// is to strive towards a uniform wallet handling, oblivious to the different +// backend providers. +// +// Please note, if you open a wallet, you must close it to release any allocated +// resources (especially important when working with hardware wallets). +func (w *Wallet) Open(passphrase string) error { + w.lock.Lock() + defer w.lock.Unlock() + + // If the session is already open, bail out + if w.session.verified { + return ErrAlreadyOpen + } + // If the smart card is not yet paired, attempt to do so either from a previous + // pairing key or form the supplied PUK code. + if !w.session.paired() { + // If a previous pairing exists, only ever try to use that + if pairing := w.Hub.pairing(w); pairing != nil { + if err := w.session.authenticate(*pairing); err != nil { + return fmt.Errorf("failed to authenticate card %x: %s", w.PublicKey[:4], err) + } + // Pairing still ok, fall through to PIN checks + } else { + // If no passphrase was supplied, request the PUK from the user + if passphrase == "" { + return ErrPairingPasswordNeeded + } + // Attempt to pair the smart card with the user supplied PUK + if err := w.pair([]byte(passphrase)); err != nil { + return err + } + // Pairing succeeded, fall through to PIN checks. This will of course fail, + // but we can't return ErrPINNeeded directly here becase we don't know whether + // a PIN check or a PIN reset is needed. + passphrase = "" + } + } + // The smart card was successfully paired, retrieve its status to check whether + // PIN verification or unblocking is needed. + status, err := w.session.walletStatus() + if err != nil { + return err + } + // Request the appropriate next authentication data, or use the one supplied + switch { + case passphrase == "" && status.PinRetryCount > 0: + return ErrPINNeeded + case passphrase == "": + return ErrPINUnblockNeeded + case status.PinRetryCount > 0: + if !regexp.MustCompile(`^[0-9]{6,}$`).MatchString(passphrase) { + w.log.Error("PIN needs to be at least 6 digits") + return ErrPINNeeded + } + if err := w.session.verifyPin([]byte(passphrase)); err != nil { + return err + } + default: + if !regexp.MustCompile(`^[0-9]{12,}$`).MatchString(passphrase) { + w.log.Error("PUK needs to be at least 12 digits") + return ErrPINUnblockNeeded + } + if err := w.session.unblockPin([]byte(passphrase)); err != nil { + return err + } + } + // Smart card paired and unlocked, initialize and register + w.deriveReq = make(chan chan struct{}) + w.deriveQuit = make(chan chan error) + + go w.selfDerive() + + // Notify anyone listening for wallet events that a new device is accessible + go w.Hub.updateFeed.Send(accounts.WalletEvent{Wallet: w, Kind: accounts.WalletOpened}) + + return nil +} + +// Close stops and closes the wallet, freeing any resources. +func (w *Wallet) Close() error { + // Ensure the wallet was opened + w.lock.Lock() + dQuit := w.deriveQuit + w.lock.Unlock() + + // Terminate the self-derivations + var derr error + if dQuit != nil { + errc := make(chan error) + dQuit <- errc + derr = <-errc // Save for later, we *must* close the USB + } + // Terminate the device connection + w.lock.Lock() + defer w.lock.Unlock() + + w.deriveQuit = nil + w.deriveReq = nil + + if err := w.release(); err != nil { + return err + } + return derr +} + +// selfDerive is an account derivation loop that upon request attempts to find +// new non-zero accounts. +func (w *Wallet) selfDerive() { + w.log.Debug("Smart card wallet self-derivation started") + defer w.log.Debug("Smart card wallet self-derivation stopped") + + // Execute self-derivations until termination or error + var ( + reqc chan struct{} + errc chan error + err error + ) + for errc == nil && err == nil { + // Wait until either derivation or termination is requested + select { + case errc = <-w.deriveQuit: + // Termination requested + continue + case reqc = <-w.deriveReq: + // Account discovery requested + } + // Derivation needs a chain and device access, skip if either unavailable + w.lock.Lock() + if w.session == nil || w.deriveChain == nil { + w.lock.Unlock() + reqc <- struct{}{} + continue + } + pairing := w.Hub.pairing(w) + + // Device lock obtained, derive the next batch of accounts + var ( + paths []accounts.DerivationPath + nextAcc accounts.Account + + nextPaths = append([]accounts.DerivationPath{}, w.deriveNextPaths...) + nextAddrs = append([]common.Address{}, w.deriveNextAddrs...) + + context = context.Background() + ) + for i := 0; i < len(nextAddrs); i++ { + for empty := false; !empty; { + // Retrieve the next derived Ethereum account + if nextAddrs[i] == (common.Address{}) { + if nextAcc, err = w.session.derive(nextPaths[i]); err != nil { + w.log.Warn("Smartcard wallet account derivation failed", "err", err) + break + } + nextAddrs[i] = nextAcc.Address + } + // Check the account's status against the current chain state + var ( + balance *big.Int + nonce uint64 + ) + balance, err = w.deriveChain.BalanceAt(context, nextAddrs[i], nil) + if err != nil { + w.log.Warn("Smartcard wallet balance retrieval failed", "err", err) + break + } + nonce, err = w.deriveChain.NonceAt(context, nextAddrs[i], nil) + if err != nil { + w.log.Warn("Smartcard wallet nonce retrieval failed", "err", err) + break + } + // If the next account is empty, stop self-derivation, but add for the last base path + if balance.Sign() == 0 && nonce == 0 { + empty = true + if i < len(nextAddrs)-1 { + break + } + } + // We've just self-derived a new account, start tracking it locally + path := make(accounts.DerivationPath, len(nextPaths[i])) + copy(path[:], nextPaths[i][:]) + paths = append(paths, path) + + // Display a log message to the user for new (or previously empty accounts) + if _, known := pairing.Accounts[nextAddrs[i]]; !known || !empty || nextAddrs[i] != w.deriveNextAddrs[i] { + w.log.Info("Smartcard wallet discovered new account", "address", nextAddrs[i], "path", path, "balance", balance, "nonce", nonce) + } + pairing.Accounts[nextAddrs[i]] = path + + // Fetch the next potential account + if !empty { + nextAddrs[i] = common.Address{} + nextPaths[i][len(nextPaths[i])-1]++ + } + } + } + // If there are new accounts, write them out + if len(paths) > 0 { + err = w.Hub.setPairing(w, pairing) + } + // Shift the self-derivation forward + w.deriveNextAddrs = nextAddrs + w.deriveNextPaths = nextPaths + + // Self derivation complete, release device lock + w.lock.Unlock() + + // Notify the user of termination and loop after a bit of time (to avoid trashing) + reqc <- struct{}{} + if err == nil { + select { + case errc = <-w.deriveQuit: + // Termination requested, abort + case <-time.After(selfDeriveThrottling): + // Waited enough, willing to self-derive again + } + } + } + // In case of error, wait for termination + if err != nil { + w.log.Debug("Smartcard wallet self-derivation failed", "err", err) + errc = <-w.deriveQuit + } + errc <- err +} + +// Accounts retrieves the list of signing accounts the wallet is currently aware +// of. For hierarchical deterministic wallets, the list will not be exhaustive, +// rather only contain the accounts explicitly pinned during account derivation. +func (w *Wallet) Accounts() []accounts.Account { + // Attempt self-derivation if it's running + reqc := make(chan struct{}, 1) + select { + case w.deriveReq <- reqc: + // Self-derivation request accepted, wait for it + <-reqc + default: + // Self-derivation offline, throttled or busy, skip + } + + w.lock.Lock() + defer w.lock.Unlock() + + if pairing := w.Hub.pairing(w); pairing != nil { + ret := make([]accounts.Account, 0, len(pairing.Accounts)) + for address, path := range pairing.Accounts { + ret = append(ret, w.makeAccount(address, path)) + } + sort.Sort(accounts.AccountsByURL(ret)) + return ret + } + return nil +} + +func (w *Wallet) makeAccount(address common.Address, path accounts.DerivationPath) accounts.Account { + return accounts.Account{ + Address: address, + URL: accounts.URL{ + Scheme: w.Hub.scheme, + Path: fmt.Sprintf("%x/%s", w.PublicKey[1:3], path.String()), + }, + } +} + +// Contains returns whether an account is part of this particular wallet or not. +func (w *Wallet) Contains(account accounts.Account) bool { + if pairing := w.Hub.pairing(w); pairing != nil { + _, ok := pairing.Accounts[account.Address] + return ok + } + return false +} + +// Initialize installs a keypair generated from the provided key into the wallet. +func (w *Wallet) Initialize(seed []byte) error { + go w.selfDerive() + // DO NOT lock at this stage, as the initialize + // function relies on Status() + return w.session.initialize(seed) +} + +// Derive attempts to explicitly derive a hierarchical deterministic account at +// the specified derivation path. If requested, the derived account will be added +// to the wallet's tracked account list. +func (w *Wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Account, error) { + w.lock.Lock() + defer w.lock.Unlock() + + account, err := w.session.derive(path) + if err != nil { + return accounts.Account{}, err + } + + if pin { + pairing := w.Hub.pairing(w) + pairing.Accounts[account.Address] = path + if err := w.Hub.setPairing(w, pairing); err != nil { + return accounts.Account{}, err + } + } + + return account, nil +} + +// SelfDerive sets a base account derivation path from which the wallet attempts +// to discover non zero accounts and automatically add them to list of tracked +// accounts. +// +// Note, self derivaton will increment the last component of the specified path +// opposed to decending into a child path to allow discovering accounts starting +// from non zero components. +// +// Some hardware wallets switched derivation paths through their evolution, so +// this method supports providing multiple bases to discover old user accounts +// too. Only the last base will be used to derive the next empty account. +// +// You can disable automatic account discovery by calling SelfDerive with a nil +// chain state reader. +func (w *Wallet) SelfDerive(bases []accounts.DerivationPath, chain ethereum.ChainStateReader) { + w.lock.Lock() + defer w.lock.Unlock() + + w.deriveNextPaths = make([]accounts.DerivationPath, len(bases)) + for i, base := range bases { + w.deriveNextPaths[i] = make(accounts.DerivationPath, len(base)) + copy(w.deriveNextPaths[i][:], base[:]) + } + w.deriveNextAddrs = make([]common.Address, len(bases)) + w.deriveChain = chain +} + +// SignData requests the wallet to sign the hash of the given data. +// +// It looks up the account specified either solely via its address contained within, +// or optionally with the aid of any location metadata from the embedded URL field. +// +// If the wallet requires additional authentication to sign the request (e.g. +// a password to decrypt the account, or a PIN code o verify the transaction), +// an AuthNeededError instance will be returned, containing infos for the user +// about which fields or actions are needed. The user may retry by providing +// the needed details via SignDataWithPassphrase, or by other means (e.g. unlock +// the account in a keystore). +func (w *Wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + return w.signHash(account, crypto.Keccak256(data)) +} + +func (w *Wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { + w.lock.Lock() + defer w.lock.Unlock() + + path, err := w.findAccountPath(account) + if err != nil { + return nil, err + } + + return w.session.sign(path, hash) +} + +// SignTx requests the wallet to sign the given transaction. +// +// It looks up the account specified either solely via its address contained within, +// or optionally with the aid of any location metadata from the embedded URL field. +// +// If the wallet requires additional authentication to sign the request (e.g. +// a password to decrypt the account, or a PIN code o verify the transaction), +// an AuthNeededError instance will be returned, containing infos for the user +// about which fields or actions are needed. The user may retry by providing +// the needed details via SignTxWithPassphrase, or by other means (e.g. unlock +// the account in a keystore). +func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + signer := types.NewEIP155Signer(chainID) + hash := signer.Hash(tx) + sig, err := w.signHash(account, hash[:]) + if err != nil { + return nil, err + } + return tx.WithSignature(signer, sig) +} + +// SignDataWithPassphrase requests the wallet to sign the given hash with the +// given passphrase as extra authentication information. +// +// It looks up the account specified either solely via its address contained within, +// or optionally with the aid of any location metadata from the embedded URL field. +func (w *Wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(data)) +} + +func (w *Wallet) signHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { + if !w.session.verified { + if err := w.Open(passphrase); err != nil { + return nil, err + } + } + + return w.signHash(account, hash) +} + +// SignText requests the wallet to sign the hash of a given piece of data, prefixed +// by the Ethereum prefix scheme +// It looks up the account specified either solely via its address contained within, +// or optionally with the aid of any location metadata from the embedded URL field. +// +// If the wallet requires additional authentication to sign the request (e.g. +// a password to decrypt the account, or a PIN code o verify the transaction), +// an AuthNeededError instance will be returned, containing infos for the user +// about which fields or actions are needed. The user may retry by providing +// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock +// the account in a keystore). +func (w *Wallet) SignText(account accounts.Account, text []byte) ([]byte, error) { + return w.signHash(account, accounts.TextHash(text)) +} + +// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the +// given hash with the given account using passphrase as extra authentication +func (w *Wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(accounts.TextHash(text))) +} + +// SignTxWithPassphrase requests the wallet to sign the given transaction, with the +// given passphrase as extra authentication information. +// +// It looks up the account specified either solely via its address contained within, +// or optionally with the aid of any location metadata from the embedded URL field. +func (w *Wallet) SignTxWithPassphrase(account accounts.Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) { + if !w.session.verified { + if err := w.Open(passphrase); err != nil { + return nil, err + } + } + return w.SignTx(account, tx, chainID) +} + +// findAccountPath returns the derivation path for the provided account. +// It first checks for the address in the list of pinned accounts, and if it is +// not found, attempts to parse the derivation path from the account's URL. +func (w *Wallet) findAccountPath(account accounts.Account) (accounts.DerivationPath, error) { + pairing := w.Hub.pairing(w) + if path, ok := pairing.Accounts[account.Address]; ok { + return path, nil + } + + // Look for the path in the URL + if account.URL.Scheme != w.Hub.scheme { + return nil, fmt.Errorf("Scheme %s does not match wallet scheme %s", account.URL.Scheme, w.Hub.scheme) + } + + parts := strings.SplitN(account.URL.Path, "/", 2) + if len(parts) != 2 { + return nil, fmt.Errorf("Invalid URL format: %s", account.URL) + } + + if parts[0] != fmt.Sprintf("%x", w.PublicKey[1:3]) { + return nil, fmt.Errorf("URL %s is not for this wallet", account.URL) + } + + return accounts.ParseDerivationPath(parts[1]) +} + +// Session represents a secured communication session with the wallet. +type Session struct { + Wallet *Wallet // A handle to the wallet that opened the session + Channel *SecureChannelSession // A secure channel for encrypted messages + verified bool // Whether the pin has been verified in this session. +} + +// pair establishes a new pairing over this channel, using the provided secret. +func (s *Session) pair(secret []byte) (smartcardPairing, error) { + err := s.Channel.Pair(secret) + if err != nil { + return smartcardPairing{}, err + } + + return smartcardPairing{ + PublicKey: s.Wallet.PublicKey, + PairingIndex: s.Channel.PairingIndex, + PairingKey: s.Channel.PairingKey, + Accounts: make(map[common.Address]accounts.DerivationPath), + }, nil +} + +// unpair deletes an existing pairing. +func (s *Session) unpair() error { + if !s.verified { + return fmt.Errorf("Unpair requires that the PIN be verified") + } + return s.Channel.Unpair() +} + +// verifyPin unlocks a wallet with the provided pin. +func (s *Session) verifyPin(pin []byte) error { + if _, err := s.Channel.transmitEncrypted(claSCWallet, insVerifyPin, 0, 0, pin); err != nil { + return err + } + s.verified = true + return nil +} + +// unblockPin unblocks a wallet with the provided puk and resets the pin to the +// new one specified. +func (s *Session) unblockPin(pukpin []byte) error { + if _, err := s.Channel.transmitEncrypted(claSCWallet, insUnblockPin, 0, 0, pukpin); err != nil { + return err + } + s.verified = true + return nil +} + +// release releases resources associated with the channel. +func (s *Session) release() error { + return s.Wallet.card.Disconnect(pcsc.LeaveCard) +} + +// paired returns true if a valid pairing exists. +func (s *Session) paired() bool { + return s.Channel.PairingKey != nil +} + +// authenticate uses an existing pairing to establish a secure channel. +func (s *Session) authenticate(pairing smartcardPairing) error { + if !bytes.Equal(s.Wallet.PublicKey, pairing.PublicKey) { + return fmt.Errorf("Cannot pair using another wallet's pairing; %x != %x", s.Wallet.PublicKey, pairing.PublicKey) + } + s.Channel.PairingKey = pairing.PairingKey + s.Channel.PairingIndex = pairing.PairingIndex + return s.Channel.Open() +} + +// walletStatus describes a smartcard wallet's status information. +type walletStatus struct { + PinRetryCount int // Number of remaining PIN retries + PukRetryCount int // Number of remaining PUK retries + Initialized bool // Whether the card has been initialized with a private key +} + +// walletStatus fetches the wallet's status from the card. +func (s *Session) walletStatus() (*walletStatus, error) { + response, err := s.Channel.transmitEncrypted(claSCWallet, insStatus, statusP1WalletStatus, 0, nil) + if err != nil { + return nil, err + } + + status := new(walletStatus) + if _, err := asn1.UnmarshalWithParams(response.Data, status, "tag:3"); err != nil { + return nil, err + } + return status, nil +} + +// derivationPath fetches the wallet's current derivation path from the card. +func (s *Session) derivationPath() (accounts.DerivationPath, error) { + response, err := s.Channel.transmitEncrypted(claSCWallet, insStatus, statusP1Path, 0, nil) + if err != nil { + return nil, err + } + buf := bytes.NewReader(response.Data) + path := make(accounts.DerivationPath, len(response.Data)/4) + return path, binary.Read(buf, binary.BigEndian, &path) +} + +// initializeData contains data needed to initialize the smartcard wallet. +type initializeData struct { + PublicKey []byte `asn1:"tag:0"` + PrivateKey []byte `asn1:"tag:1"` + ChainCode []byte `asn1:"tag:2"` +} + +// initialize initializes the card with new key data. +func (s *Session) initialize(seed []byte) error { + // Check that the wallet isn't currently initialized, + // otherwise the key would be overwritten. + status, err := s.Wallet.Status() + if err != nil { + return err + } + if status == "Online" { + return fmt.Errorf("card is already initialized, cowardly refusing to proceed") + } + + s.Wallet.lock.Lock() + defer s.Wallet.lock.Unlock() + + // HMAC the seed to produce the private key and chain code + mac := hmac.New(sha512.New, []byte("Bitcoin seed")) + mac.Write(seed) + seed = mac.Sum(nil) + + key, err := crypto.ToECDSA(seed[:32]) + if err != nil { + return err + } + + id := initializeData{} + id.PublicKey = crypto.FromECDSAPub(&key.PublicKey) + id.PrivateKey = seed[:32] + id.ChainCode = seed[32:] + data, err := asn1.Marshal(id) + if err != nil { + return err + } + + // Nasty hack to force the top-level struct tag to be context-specific + data[0] = 0xA1 + + _, err = s.Channel.transmitEncrypted(claSCWallet, insLoadKey, 0x02, 0, data) + return err +} + +// derive derives a new HD key path on the card. +func (s *Session) derive(path accounts.DerivationPath) (accounts.Account, error) { + startingPoint, path, err := derivationpath.Decode(path.String()) + if err != nil { + return accounts.Account{}, err + } + + var p1 uint8 + switch startingPoint { + case derivationpath.StartingPointMaster: + p1 = P1DeriveKeyFromMaster + case derivationpath.StartingPointParent: + p1 = P1DeriveKeyFromParent + case derivationpath.StartingPointCurrent: + p1 = P1DeriveKeyFromCurrent + default: + return accounts.Account{}, fmt.Errorf("invalid startingPoint %d", startingPoint) + } + + data := new(bytes.Buffer) + for _, segment := range path { + if err := binary.Write(data, binary.BigEndian, segment); err != nil { + return accounts.Account{}, err + } + } + + _, err = s.Channel.transmitEncrypted(claSCWallet, insDeriveKey, p1, 0, data.Bytes()) + if err != nil { + return accounts.Account{}, err + } + + response, err := s.Channel.transmitEncrypted(claSCWallet, insSign, 0, 0, DerivationSignatureHash[:]) + if err != nil { + return accounts.Account{}, err + } + + sigdata := new(signatureData) + if _, err := asn1.UnmarshalWithParams(response.Data, sigdata, "tag:0"); err != nil { + return accounts.Account{}, err + } + rbytes, sbytes := sigdata.Signature.R.Bytes(), sigdata.Signature.S.Bytes() + sig := make([]byte, 65) + copy(sig[32-len(rbytes):32], rbytes) + copy(sig[64-len(sbytes):64], sbytes) + + if err := confirmPublicKey(sig, sigdata.PublicKey); err != nil { + return accounts.Account{}, err + } + pub, err := crypto.UnmarshalPubkey(sigdata.PublicKey) + if err != nil { + return accounts.Account{}, err + } + return s.Wallet.makeAccount(crypto.PubkeyToAddress(*pub), path), nil +} + +// keyExport contains information on an exported keypair. +type keyExport struct { + PublicKey []byte `asn1:"tag:0"` + PrivateKey []byte `asn1:"tag:1,optional"` +} + +// publicKey returns the public key for the current derivation path. +func (s *Session) publicKey() ([]byte, error) { + response, err := s.Channel.transmitEncrypted(claSCWallet, insExportKey, exportP1Any, exportP2Pubkey, nil) + if err != nil { + return nil, err + } + keys := new(keyExport) + if _, err := asn1.UnmarshalWithParams(response.Data, keys, "tag:1"); err != nil { + return nil, err + } + return keys.PublicKey, nil +} + +// signatureData contains information on a signature - the signature itself and +// the corresponding public key. +type signatureData struct { + PublicKey []byte `asn1:"tag:0"` + Signature struct { + R *big.Int + S *big.Int + } +} + +// sign asks the card to sign a message, and returns a valid signature after +// recovering the v value. +func (s *Session) sign(path accounts.DerivationPath, hash []byte) ([]byte, error) { + startTime := time.Now() + _, err := s.derive(path) + if err != nil { + return nil, err + } + deriveTime := time.Now() + + response, err := s.Channel.transmitEncrypted(claSCWallet, insSign, signP1PrecomputedHash, signP2OnlyBlock, hash) + if err != nil { + return nil, err + } + sigdata := new(signatureData) + if _, err := asn1.UnmarshalWithParams(response.Data, sigdata, "tag:0"); err != nil { + return nil, err + } + // Serialize the signature + rbytes, sbytes := sigdata.Signature.R.Bytes(), sigdata.Signature.S.Bytes() + sig := make([]byte, 65) + copy(sig[32-len(rbytes):32], rbytes) + copy(sig[64-len(sbytes):64], sbytes) + + // Recover the V value. + sig, err = makeRecoverableSignature(hash, sig, sigdata.PublicKey) + if err != nil { + return nil, err + } + log.Debug("Signed using smartcard", "deriveTime", deriveTime.Sub(startTime), "signingTime", time.Since(deriveTime)) + + return sig, nil +} + +// confirmPublicKey confirms that the given signature belongs to the specified key. +func confirmPublicKey(sig, pubkey []byte) error { + _, err := makeRecoverableSignature(DerivationSignatureHash[:], sig, pubkey) + return err +} + +// makeRecoverableSignature uses a signature and an expected public key to +// recover the v value and produce a recoverable signature. +func makeRecoverableSignature(hash, sig, expectedPubkey []byte) ([]byte, error) { + var libraryError error + for v := 0; v < 2; v++ { + sig[64] = byte(v) + if pubkey, err := crypto.Ecrecover(hash, sig); err == nil { + if bytes.Equal(pubkey, expectedPubkey) { + return sig, nil + } + } else { + libraryError = err + } + } + if libraryError != nil { + return nil, libraryError + } + return nil, ErrPubkeyMismatch +} diff --git a/swarm/storage/feed/binaryserializer.go b/accounts/sort.go similarity index 54% rename from swarm/storage/feed/binaryserializer.go rename to accounts/sort.go index 4e4f67a094cb..f46762114af4 100644 --- a/swarm/storage/feed/binaryserializer.go +++ b/accounts/sort.go @@ -14,31 +14,18 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package feed +package accounts -import "github.com/ethereum/go-ethereum/common/hexutil" +// AccountsByURL implements sort.Interface for []Account based on the URL field. +type AccountsByURL []Account -type binarySerializer interface { - binaryPut(serializedData []byte) error - binaryLength() int - binaryGet(serializedData []byte) error -} +func (a AccountsByURL) Len() int { return len(a) } +func (a AccountsByURL) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a AccountsByURL) Less(i, j int) bool { return a[i].URL.Cmp(a[j].URL) < 0 } -// Values interface represents a string key-value store -// useful for building query strings -type Values interface { - Get(key string) string - Set(key, value string) -} +// WalletsByURL implements sort.Interface for []Wallet based on the URL field. +type WalletsByURL []Wallet -type valueSerializer interface { - FromValues(values Values) error - AppendValues(values Values) -} - -// Hex serializes the structure and converts it to a hex string -func Hex(bin binarySerializer) string { - b := make([]byte, bin.binaryLength()) - bin.binaryPut(b) - return hexutil.Encode(b) -} +func (w WalletsByURL) Len() int { return len(w) } +func (w WalletsByURL) Swap(i, j int) { w[i], w[j] = w[j], w[i] } +func (w WalletsByURL) Less(i, j int) bool { return w[i].URL().Cmp(w[j].URL()) < 0 } diff --git a/accounts/url_test.go b/accounts/url_test.go index 802772871947..bd6f35fa2a0e 100644 --- a/accounts/url_test.go +++ b/accounts/url_test.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go index 640320bc9143..23be98a08483 100644 --- a/accounts/usbwallet/hub.go +++ b/accounts/usbwallet/hub.go @@ -20,12 +20,13 @@ import ( "errors" "runtime" "sync" + "sync/atomic" "time" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" - "github.com/karalabe/hid" + "github.com/karalabe/usb" ) // LedgerScheme is the protocol scheme prefixing account and wallet URLs. @@ -64,21 +65,41 @@ type Hub struct { // TODO(karalabe): remove if hotplug lands on Windows commsPend int // Number of operations blocking enumeration commsLock sync.Mutex // Lock protecting the pending counter and enumeration + enumFails uint32 // Number of times enumeration has failed } // NewLedgerHub creates a new hardware wallet manager for Ledger devices. func NewLedgerHub() (*Hub, error) { - return newHub(LedgerScheme, 0x2c97, []uint16{0x0000 /* Ledger Blue */, 0x0001 /* Ledger Nano S */}, 0xffa0, 0, newLedgerDriver) + return newHub(LedgerScheme, 0x2c97, []uint16{ + // Original product IDs + 0x0000, /* Ledger Blue */ + 0x0001, /* Ledger Nano S */ + 0x0004, /* Ledger Nano X */ + + // Upcoming product IDs: https://www.ledger.com/2019/05/17/windows-10-update-sunsetting-u2f-tunnel-transport-for-ledger-devices/ + 0x0015, /* HID + U2F + WebUSB Ledger Blue */ + 0x1015, /* HID + U2F + WebUSB Ledger Nano S */ + 0x4015, /* HID + U2F + WebUSB Ledger Nano X */ + 0x0011, /* HID + WebUSB Ledger Blue */ + 0x1011, /* HID + WebUSB Ledger Nano S */ + 0x4011, /* HID + WebUSB Ledger Nano X */ + }, 0xffa0, 0, newLedgerDriver) } -// NewTrezorHub creates a new hardware wallet manager for Trezor devices. -func NewTrezorHub() (*Hub, error) { - return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor 1 */}, 0xff00, 0, newTrezorDriver) +// NewTrezorHubWithHID creates a new hardware wallet manager for Trezor devices. +func NewTrezorHubWithHID() (*Hub, error) { + return newHub(TrezorScheme, 0x534c, []uint16{0x0001 /* Trezor HID */}, 0xff00, 0, newTrezorDriver) +} + +// NewTrezorHubWithWebUSB creates a new hardware wallet manager for Trezor devices with +// firmware version > 1.8.0 +func NewTrezorHubWithWebUSB() (*Hub, error) { + return newHub(TrezorScheme, 0x1209, []uint16{0x53c1 /* Trezor WebUSB */}, 0xffff /* No usage id on webusb, don't match unset (0) */, 0, newTrezorDriver) } // newHub creates a new hardware wallet manager for generic USB devices. func newHub(scheme string, vendorID uint16, productIDs []uint16, usageID uint16, endpointID int, makeDriver func(log.Logger) driver) (*Hub, error) { - if !hid.Supported() { + if !usb.Supported() { return nil, errors.New("unsupported platform") } hub := &Hub{ @@ -119,8 +140,12 @@ func (hub *Hub) refreshWallets() { if elapsed < refreshThrottling { return } + // If USB enumeration is continually failing, don't keep trying indefinitely + if atomic.LoadUint32(&hub.enumFails) > 2 { + return + } // Retrieve the current list of USB wallet devices - var devices []hid.DeviceInfo + var devices []usb.DeviceInfo if runtime.GOOS == "linux" { // hidapi on Linux opens the device during enumeration to retrieve some infos, @@ -135,8 +160,22 @@ func (hub *Hub) refreshWallets() { return } } - for _, info := range hid.Enumerate(hub.vendorID, 0) { + infos, err := usb.Enumerate(hub.vendorID, 0) + if err != nil { + failcount := atomic.AddUint32(&hub.enumFails, 1) + if runtime.GOOS == "linux" { + // See rationale before the enumeration why this is needed and only on Linux. + hub.commsLock.Unlock() + } + log.Error("Failed to enumerate USB devices", "hub", hub.scheme, + "vendor", hub.vendorID, "failcount", failcount, "err", err) + return + } + atomic.StoreUint32(&hub.enumFails, 0) + + for _, info := range infos { for _, id := range hub.productIDs { + // Windows and Macos use UsageID matching, Linux uses Interface matching if info.ProductID == id && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) { devices = append(devices, info) break @@ -150,8 +189,10 @@ func (hub *Hub) refreshWallets() { // Transform the current list of wallets into the new one hub.stateLock.Lock() - wallets := make([]accounts.Wallet, 0, len(devices)) - events := []accounts.WalletEvent{} + var ( + wallets = make([]accounts.Wallet, 0, len(devices)) + events []accounts.WalletEvent + ) for _, device := range devices { url := accounts.URL{Scheme: hub.scheme, Path: device.Path} diff --git a/accounts/usbwallet/internal/trezor/messages.pb.go b/accounts/usbwallet/internal/trezor/messages.pb.go deleted file mode 100644 index 15bb6fb73bc7..000000000000 --- a/accounts/usbwallet/internal/trezor/messages.pb.go +++ /dev/null @@ -1,3081 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: messages.proto - -package trezor - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// * -// Mapping between Trezor wire identifier (uint) and a protobuf message -type MessageType int32 - -const ( - MessageType_MessageType_Initialize MessageType = 0 - MessageType_MessageType_Ping MessageType = 1 - MessageType_MessageType_Success MessageType = 2 - MessageType_MessageType_Failure MessageType = 3 - MessageType_MessageType_ChangePin MessageType = 4 - MessageType_MessageType_WipeDevice MessageType = 5 - MessageType_MessageType_FirmwareErase MessageType = 6 - MessageType_MessageType_FirmwareUpload MessageType = 7 - MessageType_MessageType_FirmwareRequest MessageType = 8 - MessageType_MessageType_GetEntropy MessageType = 9 - MessageType_MessageType_Entropy MessageType = 10 - MessageType_MessageType_GetPublicKey MessageType = 11 - MessageType_MessageType_PublicKey MessageType = 12 - MessageType_MessageType_LoadDevice MessageType = 13 - MessageType_MessageType_ResetDevice MessageType = 14 - MessageType_MessageType_SignTx MessageType = 15 - MessageType_MessageType_SimpleSignTx MessageType = 16 - MessageType_MessageType_Features MessageType = 17 - MessageType_MessageType_PinMatrixRequest MessageType = 18 - MessageType_MessageType_PinMatrixAck MessageType = 19 - MessageType_MessageType_Cancel MessageType = 20 - MessageType_MessageType_TxRequest MessageType = 21 - MessageType_MessageType_TxAck MessageType = 22 - MessageType_MessageType_CipherKeyValue MessageType = 23 - MessageType_MessageType_ClearSession MessageType = 24 - MessageType_MessageType_ApplySettings MessageType = 25 - MessageType_MessageType_ButtonRequest MessageType = 26 - MessageType_MessageType_ButtonAck MessageType = 27 - MessageType_MessageType_ApplyFlags MessageType = 28 - MessageType_MessageType_GetAddress MessageType = 29 - MessageType_MessageType_Address MessageType = 30 - MessageType_MessageType_SelfTest MessageType = 32 - MessageType_MessageType_BackupDevice MessageType = 34 - MessageType_MessageType_EntropyRequest MessageType = 35 - MessageType_MessageType_EntropyAck MessageType = 36 - MessageType_MessageType_SignMessage MessageType = 38 - MessageType_MessageType_VerifyMessage MessageType = 39 - MessageType_MessageType_MessageSignature MessageType = 40 - MessageType_MessageType_PassphraseRequest MessageType = 41 - MessageType_MessageType_PassphraseAck MessageType = 42 - MessageType_MessageType_EstimateTxSize MessageType = 43 - MessageType_MessageType_TxSize MessageType = 44 - MessageType_MessageType_RecoveryDevice MessageType = 45 - MessageType_MessageType_WordRequest MessageType = 46 - MessageType_MessageType_WordAck MessageType = 47 - MessageType_MessageType_CipheredKeyValue MessageType = 48 - MessageType_MessageType_EncryptMessage MessageType = 49 - MessageType_MessageType_EncryptedMessage MessageType = 50 - MessageType_MessageType_DecryptMessage MessageType = 51 - MessageType_MessageType_DecryptedMessage MessageType = 52 - MessageType_MessageType_SignIdentity MessageType = 53 - MessageType_MessageType_SignedIdentity MessageType = 54 - MessageType_MessageType_GetFeatures MessageType = 55 - MessageType_MessageType_EthereumGetAddress MessageType = 56 - MessageType_MessageType_EthereumAddress MessageType = 57 - MessageType_MessageType_EthereumSignTx MessageType = 58 - MessageType_MessageType_EthereumTxRequest MessageType = 59 - MessageType_MessageType_EthereumTxAck MessageType = 60 - MessageType_MessageType_GetECDHSessionKey MessageType = 61 - MessageType_MessageType_ECDHSessionKey MessageType = 62 - MessageType_MessageType_SetU2FCounter MessageType = 63 - MessageType_MessageType_EthereumSignMessage MessageType = 64 - MessageType_MessageType_EthereumVerifyMessage MessageType = 65 - MessageType_MessageType_EthereumMessageSignature MessageType = 66 - MessageType_MessageType_DebugLinkDecision MessageType = 100 - MessageType_MessageType_DebugLinkGetState MessageType = 101 - MessageType_MessageType_DebugLinkState MessageType = 102 - MessageType_MessageType_DebugLinkStop MessageType = 103 - MessageType_MessageType_DebugLinkLog MessageType = 104 - MessageType_MessageType_DebugLinkMemoryRead MessageType = 110 - MessageType_MessageType_DebugLinkMemory MessageType = 111 - MessageType_MessageType_DebugLinkMemoryWrite MessageType = 112 - MessageType_MessageType_DebugLinkFlashErase MessageType = 113 -) - -var MessageType_name = map[int32]string{ - 0: "MessageType_Initialize", - 1: "MessageType_Ping", - 2: "MessageType_Success", - 3: "MessageType_Failure", - 4: "MessageType_ChangePin", - 5: "MessageType_WipeDevice", - 6: "MessageType_FirmwareErase", - 7: "MessageType_FirmwareUpload", - 8: "MessageType_FirmwareRequest", - 9: "MessageType_GetEntropy", - 10: "MessageType_Entropy", - 11: "MessageType_GetPublicKey", - 12: "MessageType_PublicKey", - 13: "MessageType_LoadDevice", - 14: "MessageType_ResetDevice", - 15: "MessageType_SignTx", - 16: "MessageType_SimpleSignTx", - 17: "MessageType_Features", - 18: "MessageType_PinMatrixRequest", - 19: "MessageType_PinMatrixAck", - 20: "MessageType_Cancel", - 21: "MessageType_TxRequest", - 22: "MessageType_TxAck", - 23: "MessageType_CipherKeyValue", - 24: "MessageType_ClearSession", - 25: "MessageType_ApplySettings", - 26: "MessageType_ButtonRequest", - 27: "MessageType_ButtonAck", - 28: "MessageType_ApplyFlags", - 29: "MessageType_GetAddress", - 30: "MessageType_Address", - 32: "MessageType_SelfTest", - 34: "MessageType_BackupDevice", - 35: "MessageType_EntropyRequest", - 36: "MessageType_EntropyAck", - 38: "MessageType_SignMessage", - 39: "MessageType_VerifyMessage", - 40: "MessageType_MessageSignature", - 41: "MessageType_PassphraseRequest", - 42: "MessageType_PassphraseAck", - 43: "MessageType_EstimateTxSize", - 44: "MessageType_TxSize", - 45: "MessageType_RecoveryDevice", - 46: "MessageType_WordRequest", - 47: "MessageType_WordAck", - 48: "MessageType_CipheredKeyValue", - 49: "MessageType_EncryptMessage", - 50: "MessageType_EncryptedMessage", - 51: "MessageType_DecryptMessage", - 52: "MessageType_DecryptedMessage", - 53: "MessageType_SignIdentity", - 54: "MessageType_SignedIdentity", - 55: "MessageType_GetFeatures", - 56: "MessageType_EthereumGetAddress", - 57: "MessageType_EthereumAddress", - 58: "MessageType_EthereumSignTx", - 59: "MessageType_EthereumTxRequest", - 60: "MessageType_EthereumTxAck", - 61: "MessageType_GetECDHSessionKey", - 62: "MessageType_ECDHSessionKey", - 63: "MessageType_SetU2FCounter", - 64: "MessageType_EthereumSignMessage", - 65: "MessageType_EthereumVerifyMessage", - 66: "MessageType_EthereumMessageSignature", - 100: "MessageType_DebugLinkDecision", - 101: "MessageType_DebugLinkGetState", - 102: "MessageType_DebugLinkState", - 103: "MessageType_DebugLinkStop", - 104: "MessageType_DebugLinkLog", - 110: "MessageType_DebugLinkMemoryRead", - 111: "MessageType_DebugLinkMemory", - 112: "MessageType_DebugLinkMemoryWrite", - 113: "MessageType_DebugLinkFlashErase", -} -var MessageType_value = map[string]int32{ - "MessageType_Initialize": 0, - "MessageType_Ping": 1, - "MessageType_Success": 2, - "MessageType_Failure": 3, - "MessageType_ChangePin": 4, - "MessageType_WipeDevice": 5, - "MessageType_FirmwareErase": 6, - "MessageType_FirmwareUpload": 7, - "MessageType_FirmwareRequest": 8, - "MessageType_GetEntropy": 9, - "MessageType_Entropy": 10, - "MessageType_GetPublicKey": 11, - "MessageType_PublicKey": 12, - "MessageType_LoadDevice": 13, - "MessageType_ResetDevice": 14, - "MessageType_SignTx": 15, - "MessageType_SimpleSignTx": 16, - "MessageType_Features": 17, - "MessageType_PinMatrixRequest": 18, - "MessageType_PinMatrixAck": 19, - "MessageType_Cancel": 20, - "MessageType_TxRequest": 21, - "MessageType_TxAck": 22, - "MessageType_CipherKeyValue": 23, - "MessageType_ClearSession": 24, - "MessageType_ApplySettings": 25, - "MessageType_ButtonRequest": 26, - "MessageType_ButtonAck": 27, - "MessageType_ApplyFlags": 28, - "MessageType_GetAddress": 29, - "MessageType_Address": 30, - "MessageType_SelfTest": 32, - "MessageType_BackupDevice": 34, - "MessageType_EntropyRequest": 35, - "MessageType_EntropyAck": 36, - "MessageType_SignMessage": 38, - "MessageType_VerifyMessage": 39, - "MessageType_MessageSignature": 40, - "MessageType_PassphraseRequest": 41, - "MessageType_PassphraseAck": 42, - "MessageType_EstimateTxSize": 43, - "MessageType_TxSize": 44, - "MessageType_RecoveryDevice": 45, - "MessageType_WordRequest": 46, - "MessageType_WordAck": 47, - "MessageType_CipheredKeyValue": 48, - "MessageType_EncryptMessage": 49, - "MessageType_EncryptedMessage": 50, - "MessageType_DecryptMessage": 51, - "MessageType_DecryptedMessage": 52, - "MessageType_SignIdentity": 53, - "MessageType_SignedIdentity": 54, - "MessageType_GetFeatures": 55, - "MessageType_EthereumGetAddress": 56, - "MessageType_EthereumAddress": 57, - "MessageType_EthereumSignTx": 58, - "MessageType_EthereumTxRequest": 59, - "MessageType_EthereumTxAck": 60, - "MessageType_GetECDHSessionKey": 61, - "MessageType_ECDHSessionKey": 62, - "MessageType_SetU2FCounter": 63, - "MessageType_EthereumSignMessage": 64, - "MessageType_EthereumVerifyMessage": 65, - "MessageType_EthereumMessageSignature": 66, - "MessageType_DebugLinkDecision": 100, - "MessageType_DebugLinkGetState": 101, - "MessageType_DebugLinkState": 102, - "MessageType_DebugLinkStop": 103, - "MessageType_DebugLinkLog": 104, - "MessageType_DebugLinkMemoryRead": 110, - "MessageType_DebugLinkMemory": 111, - "MessageType_DebugLinkMemoryWrite": 112, - "MessageType_DebugLinkFlashErase": 113, -} - -func (x MessageType) Enum() *MessageType { - p := new(MessageType) - *p = x - return p -} -func (x MessageType) String() string { - return proto.EnumName(MessageType_name, int32(x)) -} -func (x *MessageType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(MessageType_value, data, "MessageType") - if err != nil { - return err - } - *x = MessageType(value) - return nil -} -func (MessageType) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } - -// * -// Request: Reset device to default state and ask for device details -// @next Features -type Initialize struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *Initialize) Reset() { *m = Initialize{} } -func (m *Initialize) String() string { return proto.CompactTextString(m) } -func (*Initialize) ProtoMessage() {} -func (*Initialize) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } - -// * -// Request: Ask for device details (no device reset) -// @next Features -type GetFeatures struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *GetFeatures) Reset() { *m = GetFeatures{} } -func (m *GetFeatures) String() string { return proto.CompactTextString(m) } -func (*GetFeatures) ProtoMessage() {} -func (*GetFeatures) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } - -// * -// Response: Reports various information about the device -// @prev Initialize -// @prev GetFeatures -type Features struct { - Vendor *string `protobuf:"bytes,1,opt,name=vendor" json:"vendor,omitempty"` - MajorVersion *uint32 `protobuf:"varint,2,opt,name=major_version,json=majorVersion" json:"major_version,omitempty"` - MinorVersion *uint32 `protobuf:"varint,3,opt,name=minor_version,json=minorVersion" json:"minor_version,omitempty"` - PatchVersion *uint32 `protobuf:"varint,4,opt,name=patch_version,json=patchVersion" json:"patch_version,omitempty"` - BootloaderMode *bool `protobuf:"varint,5,opt,name=bootloader_mode,json=bootloaderMode" json:"bootloader_mode,omitempty"` - DeviceId *string `protobuf:"bytes,6,opt,name=device_id,json=deviceId" json:"device_id,omitempty"` - PinProtection *bool `protobuf:"varint,7,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` - PassphraseProtection *bool `protobuf:"varint,8,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - Language *string `protobuf:"bytes,9,opt,name=language" json:"language,omitempty"` - Label *string `protobuf:"bytes,10,opt,name=label" json:"label,omitempty"` - Coins []*CoinType `protobuf:"bytes,11,rep,name=coins" json:"coins,omitempty"` - Initialized *bool `protobuf:"varint,12,opt,name=initialized" json:"initialized,omitempty"` - Revision []byte `protobuf:"bytes,13,opt,name=revision" json:"revision,omitempty"` - BootloaderHash []byte `protobuf:"bytes,14,opt,name=bootloader_hash,json=bootloaderHash" json:"bootloader_hash,omitempty"` - Imported *bool `protobuf:"varint,15,opt,name=imported" json:"imported,omitempty"` - PinCached *bool `protobuf:"varint,16,opt,name=pin_cached,json=pinCached" json:"pin_cached,omitempty"` - PassphraseCached *bool `protobuf:"varint,17,opt,name=passphrase_cached,json=passphraseCached" json:"passphrase_cached,omitempty"` - FirmwarePresent *bool `protobuf:"varint,18,opt,name=firmware_present,json=firmwarePresent" json:"firmware_present,omitempty"` - NeedsBackup *bool `protobuf:"varint,19,opt,name=needs_backup,json=needsBackup" json:"needs_backup,omitempty"` - Flags *uint32 `protobuf:"varint,20,opt,name=flags" json:"flags,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Features) Reset() { *m = Features{} } -func (m *Features) String() string { return proto.CompactTextString(m) } -func (*Features) ProtoMessage() {} -func (*Features) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } - -func (m *Features) GetVendor() string { - if m != nil && m.Vendor != nil { - return *m.Vendor - } - return "" -} - -func (m *Features) GetMajorVersion() uint32 { - if m != nil && m.MajorVersion != nil { - return *m.MajorVersion - } - return 0 -} - -func (m *Features) GetMinorVersion() uint32 { - if m != nil && m.MinorVersion != nil { - return *m.MinorVersion - } - return 0 -} - -func (m *Features) GetPatchVersion() uint32 { - if m != nil && m.PatchVersion != nil { - return *m.PatchVersion - } - return 0 -} - -func (m *Features) GetBootloaderMode() bool { - if m != nil && m.BootloaderMode != nil { - return *m.BootloaderMode - } - return false -} - -func (m *Features) GetDeviceId() string { - if m != nil && m.DeviceId != nil { - return *m.DeviceId - } - return "" -} - -func (m *Features) GetPinProtection() bool { - if m != nil && m.PinProtection != nil { - return *m.PinProtection - } - return false -} - -func (m *Features) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -func (m *Features) GetLanguage() string { - if m != nil && m.Language != nil { - return *m.Language - } - return "" -} - -func (m *Features) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *Features) GetCoins() []*CoinType { - if m != nil { - return m.Coins - } - return nil -} - -func (m *Features) GetInitialized() bool { - if m != nil && m.Initialized != nil { - return *m.Initialized - } - return false -} - -func (m *Features) GetRevision() []byte { - if m != nil { - return m.Revision - } - return nil -} - -func (m *Features) GetBootloaderHash() []byte { - if m != nil { - return m.BootloaderHash - } - return nil -} - -func (m *Features) GetImported() bool { - if m != nil && m.Imported != nil { - return *m.Imported - } - return false -} - -func (m *Features) GetPinCached() bool { - if m != nil && m.PinCached != nil { - return *m.PinCached - } - return false -} - -func (m *Features) GetPassphraseCached() bool { - if m != nil && m.PassphraseCached != nil { - return *m.PassphraseCached - } - return false -} - -func (m *Features) GetFirmwarePresent() bool { - if m != nil && m.FirmwarePresent != nil { - return *m.FirmwarePresent - } - return false -} - -func (m *Features) GetNeedsBackup() bool { - if m != nil && m.NeedsBackup != nil { - return *m.NeedsBackup - } - return false -} - -func (m *Features) GetFlags() uint32 { - if m != nil && m.Flags != nil { - return *m.Flags - } - return 0 -} - -// * -// Request: clear session (removes cached PIN, passphrase, etc). -// @next Success -type ClearSession struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *ClearSession) Reset() { *m = ClearSession{} } -func (m *ClearSession) String() string { return proto.CompactTextString(m) } -func (*ClearSession) ProtoMessage() {} -func (*ClearSession) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } - -// * -// Request: change language and/or label of the device -// @next Success -// @next Failure -// @next ButtonRequest -// @next PinMatrixRequest -type ApplySettings struct { - Language *string `protobuf:"bytes,1,opt,name=language" json:"language,omitempty"` - Label *string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"` - UsePassphrase *bool `protobuf:"varint,3,opt,name=use_passphrase,json=usePassphrase" json:"use_passphrase,omitempty"` - Homescreen []byte `protobuf:"bytes,4,opt,name=homescreen" json:"homescreen,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ApplySettings) Reset() { *m = ApplySettings{} } -func (m *ApplySettings) String() string { return proto.CompactTextString(m) } -func (*ApplySettings) ProtoMessage() {} -func (*ApplySettings) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } - -func (m *ApplySettings) GetLanguage() string { - if m != nil && m.Language != nil { - return *m.Language - } - return "" -} - -func (m *ApplySettings) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *ApplySettings) GetUsePassphrase() bool { - if m != nil && m.UsePassphrase != nil { - return *m.UsePassphrase - } - return false -} - -func (m *ApplySettings) GetHomescreen() []byte { - if m != nil { - return m.Homescreen - } - return nil -} - -// * -// Request: set flags of the device -// @next Success -// @next Failure -type ApplyFlags struct { - Flags *uint32 `protobuf:"varint,1,opt,name=flags" json:"flags,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ApplyFlags) Reset() { *m = ApplyFlags{} } -func (m *ApplyFlags) String() string { return proto.CompactTextString(m) } -func (*ApplyFlags) ProtoMessage() {} -func (*ApplyFlags) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } - -func (m *ApplyFlags) GetFlags() uint32 { - if m != nil && m.Flags != nil { - return *m.Flags - } - return 0 -} - -// * -// Request: Starts workflow for setting/changing/removing the PIN -// @next ButtonRequest -// @next PinMatrixRequest -type ChangePin struct { - Remove *bool `protobuf:"varint,1,opt,name=remove" json:"remove,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ChangePin) Reset() { *m = ChangePin{} } -func (m *ChangePin) String() string { return proto.CompactTextString(m) } -func (*ChangePin) ProtoMessage() {} -func (*ChangePin) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } - -func (m *ChangePin) GetRemove() bool { - if m != nil && m.Remove != nil { - return *m.Remove - } - return false -} - -// * -// Request: Test if the device is alive, device sends back the message in Success response -// @next Success -type Ping struct { - Message *string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - ButtonProtection *bool `protobuf:"varint,2,opt,name=button_protection,json=buttonProtection" json:"button_protection,omitempty"` - PinProtection *bool `protobuf:"varint,3,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` - PassphraseProtection *bool `protobuf:"varint,4,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Ping) Reset() { *m = Ping{} } -func (m *Ping) String() string { return proto.CompactTextString(m) } -func (*Ping) ProtoMessage() {} -func (*Ping) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } - -func (m *Ping) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message - } - return "" -} - -func (m *Ping) GetButtonProtection() bool { - if m != nil && m.ButtonProtection != nil { - return *m.ButtonProtection - } - return false -} - -func (m *Ping) GetPinProtection() bool { - if m != nil && m.PinProtection != nil { - return *m.PinProtection - } - return false -} - -func (m *Ping) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -// * -// Response: Success of the previous request -type Success struct { - Message *string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Success) Reset() { *m = Success{} } -func (m *Success) String() string { return proto.CompactTextString(m) } -func (*Success) ProtoMessage() {} -func (*Success) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } - -func (m *Success) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message - } - return "" -} - -// * -// Response: Failure of the previous request -type Failure struct { - Code *FailureType `protobuf:"varint,1,opt,name=code,enum=FailureType" json:"code,omitempty"` - Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Failure) Reset() { *m = Failure{} } -func (m *Failure) String() string { return proto.CompactTextString(m) } -func (*Failure) ProtoMessage() {} -func (*Failure) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{9} } - -func (m *Failure) GetCode() FailureType { - if m != nil && m.Code != nil { - return *m.Code - } - return FailureType_Failure_UnexpectedMessage -} - -func (m *Failure) GetMessage() string { - if m != nil && m.Message != nil { - return *m.Message - } - return "" -} - -// * -// Response: Device is waiting for HW button press. -// @next ButtonAck -// @next Cancel -type ButtonRequest struct { - Code *ButtonRequestType `protobuf:"varint,1,opt,name=code,enum=ButtonRequestType" json:"code,omitempty"` - Data *string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ButtonRequest) Reset() { *m = ButtonRequest{} } -func (m *ButtonRequest) String() string { return proto.CompactTextString(m) } -func (*ButtonRequest) ProtoMessage() {} -func (*ButtonRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{10} } - -func (m *ButtonRequest) GetCode() ButtonRequestType { - if m != nil && m.Code != nil { - return *m.Code - } - return ButtonRequestType_ButtonRequest_Other -} - -func (m *ButtonRequest) GetData() string { - if m != nil && m.Data != nil { - return *m.Data - } - return "" -} - -// * -// Request: Computer agrees to wait for HW button press -// @prev ButtonRequest -type ButtonAck struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *ButtonAck) Reset() { *m = ButtonAck{} } -func (m *ButtonAck) String() string { return proto.CompactTextString(m) } -func (*ButtonAck) ProtoMessage() {} -func (*ButtonAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{11} } - -// * -// Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme -// @next PinMatrixAck -// @next Cancel -type PinMatrixRequest struct { - Type *PinMatrixRequestType `protobuf:"varint,1,opt,name=type,enum=PinMatrixRequestType" json:"type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PinMatrixRequest) Reset() { *m = PinMatrixRequest{} } -func (m *PinMatrixRequest) String() string { return proto.CompactTextString(m) } -func (*PinMatrixRequest) ProtoMessage() {} -func (*PinMatrixRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{12} } - -func (m *PinMatrixRequest) GetType() PinMatrixRequestType { - if m != nil && m.Type != nil { - return *m.Type - } - return PinMatrixRequestType_PinMatrixRequestType_Current -} - -// * -// Request: Computer responds with encoded PIN -// @prev PinMatrixRequest -type PinMatrixAck struct { - Pin *string `protobuf:"bytes,1,req,name=pin" json:"pin,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PinMatrixAck) Reset() { *m = PinMatrixAck{} } -func (m *PinMatrixAck) String() string { return proto.CompactTextString(m) } -func (*PinMatrixAck) ProtoMessage() {} -func (*PinMatrixAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{13} } - -func (m *PinMatrixAck) GetPin() string { - if m != nil && m.Pin != nil { - return *m.Pin - } - return "" -} - -// * -// Request: Abort last operation that required user interaction -// @prev ButtonRequest -// @prev PinMatrixRequest -// @prev PassphraseRequest -type Cancel struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *Cancel) Reset() { *m = Cancel{} } -func (m *Cancel) String() string { return proto.CompactTextString(m) } -func (*Cancel) ProtoMessage() {} -func (*Cancel) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{14} } - -// * -// Response: Device awaits encryption passphrase -// @next PassphraseAck -// @next Cancel -type PassphraseRequest struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *PassphraseRequest) Reset() { *m = PassphraseRequest{} } -func (m *PassphraseRequest) String() string { return proto.CompactTextString(m) } -func (*PassphraseRequest) ProtoMessage() {} -func (*PassphraseRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{15} } - -// * -// Request: Send passphrase back -// @prev PassphraseRequest -type PassphraseAck struct { - Passphrase *string `protobuf:"bytes,1,req,name=passphrase" json:"passphrase,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PassphraseAck) Reset() { *m = PassphraseAck{} } -func (m *PassphraseAck) String() string { return proto.CompactTextString(m) } -func (*PassphraseAck) ProtoMessage() {} -func (*PassphraseAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{16} } - -func (m *PassphraseAck) GetPassphrase() string { - if m != nil && m.Passphrase != nil { - return *m.Passphrase - } - return "" -} - -// * -// Request: Request a sample of random data generated by hardware RNG. May be used for testing. -// @next ButtonRequest -// @next Entropy -// @next Failure -type GetEntropy struct { - Size *uint32 `protobuf:"varint,1,req,name=size" json:"size,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GetEntropy) Reset() { *m = GetEntropy{} } -func (m *GetEntropy) String() string { return proto.CompactTextString(m) } -func (*GetEntropy) ProtoMessage() {} -func (*GetEntropy) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{17} } - -func (m *GetEntropy) GetSize() uint32 { - if m != nil && m.Size != nil { - return *m.Size - } - return 0 -} - -// * -// Response: Reply with random data generated by internal RNG -// @prev GetEntropy -type Entropy struct { - Entropy []byte `protobuf:"bytes,1,req,name=entropy" json:"entropy,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Entropy) Reset() { *m = Entropy{} } -func (m *Entropy) String() string { return proto.CompactTextString(m) } -func (*Entropy) ProtoMessage() {} -func (*Entropy) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{18} } - -func (m *Entropy) GetEntropy() []byte { - if m != nil { - return m.Entropy - } - return nil -} - -// * -// Request: Ask device for public key corresponding to address_n path -// @next PassphraseRequest -// @next PublicKey -// @next Failure -type GetPublicKey struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - EcdsaCurveName *string `protobuf:"bytes,2,opt,name=ecdsa_curve_name,json=ecdsaCurveName" json:"ecdsa_curve_name,omitempty"` - ShowDisplay *bool `protobuf:"varint,3,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` - CoinName *string `protobuf:"bytes,4,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GetPublicKey) Reset() { *m = GetPublicKey{} } -func (m *GetPublicKey) String() string { return proto.CompactTextString(m) } -func (*GetPublicKey) ProtoMessage() {} -func (*GetPublicKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{19} } - -const Default_GetPublicKey_CoinName string = "Bitcoin" - -func (m *GetPublicKey) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *GetPublicKey) GetEcdsaCurveName() string { - if m != nil && m.EcdsaCurveName != nil { - return *m.EcdsaCurveName - } - return "" -} - -func (m *GetPublicKey) GetShowDisplay() bool { - if m != nil && m.ShowDisplay != nil { - return *m.ShowDisplay - } - return false -} - -func (m *GetPublicKey) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_GetPublicKey_CoinName -} - -// * -// Response: Contains public key derived from device private seed -// @prev GetPublicKey -type PublicKey struct { - Node *HDNodeType `protobuf:"bytes,1,req,name=node" json:"node,omitempty"` - Xpub *string `protobuf:"bytes,2,opt,name=xpub" json:"xpub,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *PublicKey) Reset() { *m = PublicKey{} } -func (m *PublicKey) String() string { return proto.CompactTextString(m) } -func (*PublicKey) ProtoMessage() {} -func (*PublicKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{20} } - -func (m *PublicKey) GetNode() *HDNodeType { - if m != nil { - return m.Node - } - return nil -} - -func (m *PublicKey) GetXpub() string { - if m != nil && m.Xpub != nil { - return *m.Xpub - } - return "" -} - -// * -// Request: Ask device for address corresponding to address_n path -// @next PassphraseRequest -// @next Address -// @next Failure -type GetAddress struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - CoinName *string `protobuf:"bytes,2,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - ShowDisplay *bool `protobuf:"varint,3,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` - Multisig *MultisigRedeemScriptType `protobuf:"bytes,4,opt,name=multisig" json:"multisig,omitempty"` - ScriptType *InputScriptType `protobuf:"varint,5,opt,name=script_type,json=scriptType,enum=InputScriptType,def=0" json:"script_type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GetAddress) Reset() { *m = GetAddress{} } -func (m *GetAddress) String() string { return proto.CompactTextString(m) } -func (*GetAddress) ProtoMessage() {} -func (*GetAddress) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{21} } - -const Default_GetAddress_CoinName string = "Bitcoin" -const Default_GetAddress_ScriptType InputScriptType = InputScriptType_SPENDADDRESS - -func (m *GetAddress) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *GetAddress) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_GetAddress_CoinName -} - -func (m *GetAddress) GetShowDisplay() bool { - if m != nil && m.ShowDisplay != nil { - return *m.ShowDisplay - } - return false -} - -func (m *GetAddress) GetMultisig() *MultisigRedeemScriptType { - if m != nil { - return m.Multisig - } - return nil -} - -func (m *GetAddress) GetScriptType() InputScriptType { - if m != nil && m.ScriptType != nil { - return *m.ScriptType - } - return Default_GetAddress_ScriptType -} - -// * -// Request: Ask device for Ethereum address corresponding to address_n path -// @next PassphraseRequest -// @next EthereumAddress -// @next Failure -type EthereumGetAddress struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - ShowDisplay *bool `protobuf:"varint,2,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumGetAddress) Reset() { *m = EthereumGetAddress{} } -func (m *EthereumGetAddress) String() string { return proto.CompactTextString(m) } -func (*EthereumGetAddress) ProtoMessage() {} -func (*EthereumGetAddress) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{22} } - -func (m *EthereumGetAddress) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *EthereumGetAddress) GetShowDisplay() bool { - if m != nil && m.ShowDisplay != nil { - return *m.ShowDisplay - } - return false -} - -// * -// Response: Contains address derived from device private seed -// @prev GetAddress -type Address struct { - Address *string `protobuf:"bytes,1,req,name=address" json:"address,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Address) Reset() { *m = Address{} } -func (m *Address) String() string { return proto.CompactTextString(m) } -func (*Address) ProtoMessage() {} -func (*Address) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{23} } - -func (m *Address) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -// * -// Response: Contains an Ethereum address derived from device private seed -// @prev EthereumGetAddress -type EthereumAddress struct { - Address []byte `protobuf:"bytes,1,req,name=address" json:"address,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumAddress) Reset() { *m = EthereumAddress{} } -func (m *EthereumAddress) String() string { return proto.CompactTextString(m) } -func (*EthereumAddress) ProtoMessage() {} -func (*EthereumAddress) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{24} } - -func (m *EthereumAddress) GetAddress() []byte { - if m != nil { - return m.Address - } - return nil -} - -// * -// Request: Request device to wipe all sensitive data and settings -// @next ButtonRequest -type WipeDevice struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *WipeDevice) Reset() { *m = WipeDevice{} } -func (m *WipeDevice) String() string { return proto.CompactTextString(m) } -func (*WipeDevice) ProtoMessage() {} -func (*WipeDevice) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{25} } - -// * -// Request: Load seed and related internal settings from the computer -// @next ButtonRequest -// @next Success -// @next Failure -type LoadDevice struct { - Mnemonic *string `protobuf:"bytes,1,opt,name=mnemonic" json:"mnemonic,omitempty"` - Node *HDNodeType `protobuf:"bytes,2,opt,name=node" json:"node,omitempty"` - Pin *string `protobuf:"bytes,3,opt,name=pin" json:"pin,omitempty"` - PassphraseProtection *bool `protobuf:"varint,4,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - Language *string `protobuf:"bytes,5,opt,name=language,def=english" json:"language,omitempty"` - Label *string `protobuf:"bytes,6,opt,name=label" json:"label,omitempty"` - SkipChecksum *bool `protobuf:"varint,7,opt,name=skip_checksum,json=skipChecksum" json:"skip_checksum,omitempty"` - U2FCounter *uint32 `protobuf:"varint,8,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *LoadDevice) Reset() { *m = LoadDevice{} } -func (m *LoadDevice) String() string { return proto.CompactTextString(m) } -func (*LoadDevice) ProtoMessage() {} -func (*LoadDevice) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{26} } - -const Default_LoadDevice_Language string = "english" - -func (m *LoadDevice) GetMnemonic() string { - if m != nil && m.Mnemonic != nil { - return *m.Mnemonic - } - return "" -} - -func (m *LoadDevice) GetNode() *HDNodeType { - if m != nil { - return m.Node - } - return nil -} - -func (m *LoadDevice) GetPin() string { - if m != nil && m.Pin != nil { - return *m.Pin - } - return "" -} - -func (m *LoadDevice) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -func (m *LoadDevice) GetLanguage() string { - if m != nil && m.Language != nil { - return *m.Language - } - return Default_LoadDevice_Language -} - -func (m *LoadDevice) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *LoadDevice) GetSkipChecksum() bool { - if m != nil && m.SkipChecksum != nil { - return *m.SkipChecksum - } - return false -} - -func (m *LoadDevice) GetU2FCounter() uint32 { - if m != nil && m.U2FCounter != nil { - return *m.U2FCounter - } - return 0 -} - -// * -// Request: Ask device to do initialization involving user interaction -// @next EntropyRequest -// @next Failure -type ResetDevice struct { - DisplayRandom *bool `protobuf:"varint,1,opt,name=display_random,json=displayRandom" json:"display_random,omitempty"` - Strength *uint32 `protobuf:"varint,2,opt,name=strength,def=256" json:"strength,omitempty"` - PassphraseProtection *bool `protobuf:"varint,3,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - PinProtection *bool `protobuf:"varint,4,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` - Language *string `protobuf:"bytes,5,opt,name=language,def=english" json:"language,omitempty"` - Label *string `protobuf:"bytes,6,opt,name=label" json:"label,omitempty"` - U2FCounter *uint32 `protobuf:"varint,7,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` - SkipBackup *bool `protobuf:"varint,8,opt,name=skip_backup,json=skipBackup" json:"skip_backup,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ResetDevice) Reset() { *m = ResetDevice{} } -func (m *ResetDevice) String() string { return proto.CompactTextString(m) } -func (*ResetDevice) ProtoMessage() {} -func (*ResetDevice) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{27} } - -const Default_ResetDevice_Strength uint32 = 256 -const Default_ResetDevice_Language string = "english" - -func (m *ResetDevice) GetDisplayRandom() bool { - if m != nil && m.DisplayRandom != nil { - return *m.DisplayRandom - } - return false -} - -func (m *ResetDevice) GetStrength() uint32 { - if m != nil && m.Strength != nil { - return *m.Strength - } - return Default_ResetDevice_Strength -} - -func (m *ResetDevice) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -func (m *ResetDevice) GetPinProtection() bool { - if m != nil && m.PinProtection != nil { - return *m.PinProtection - } - return false -} - -func (m *ResetDevice) GetLanguage() string { - if m != nil && m.Language != nil { - return *m.Language - } - return Default_ResetDevice_Language -} - -func (m *ResetDevice) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *ResetDevice) GetU2FCounter() uint32 { - if m != nil && m.U2FCounter != nil { - return *m.U2FCounter - } - return 0 -} - -func (m *ResetDevice) GetSkipBackup() bool { - if m != nil && m.SkipBackup != nil { - return *m.SkipBackup - } - return false -} - -// * -// Request: Perform backup of the device seed if not backed up using ResetDevice -// @next ButtonRequest -type BackupDevice struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *BackupDevice) Reset() { *m = BackupDevice{} } -func (m *BackupDevice) String() string { return proto.CompactTextString(m) } -func (*BackupDevice) ProtoMessage() {} -func (*BackupDevice) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{28} } - -// * -// Response: Ask for additional entropy from host computer -// @prev ResetDevice -// @next EntropyAck -type EntropyRequest struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *EntropyRequest) Reset() { *m = EntropyRequest{} } -func (m *EntropyRequest) String() string { return proto.CompactTextString(m) } -func (*EntropyRequest) ProtoMessage() {} -func (*EntropyRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{29} } - -// * -// Request: Provide additional entropy for seed generation function -// @prev EntropyRequest -// @next ButtonRequest -type EntropyAck struct { - Entropy []byte `protobuf:"bytes,1,opt,name=entropy" json:"entropy,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EntropyAck) Reset() { *m = EntropyAck{} } -func (m *EntropyAck) String() string { return proto.CompactTextString(m) } -func (*EntropyAck) ProtoMessage() {} -func (*EntropyAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{30} } - -func (m *EntropyAck) GetEntropy() []byte { - if m != nil { - return m.Entropy - } - return nil -} - -// * -// Request: Start recovery workflow asking user for specific words of mnemonic -// Used to recovery device safely even on untrusted computer. -// @next WordRequest -type RecoveryDevice struct { - WordCount *uint32 `protobuf:"varint,1,opt,name=word_count,json=wordCount" json:"word_count,omitempty"` - PassphraseProtection *bool `protobuf:"varint,2,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - PinProtection *bool `protobuf:"varint,3,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` - Language *string `protobuf:"bytes,4,opt,name=language,def=english" json:"language,omitempty"` - Label *string `protobuf:"bytes,5,opt,name=label" json:"label,omitempty"` - EnforceWordlist *bool `protobuf:"varint,6,opt,name=enforce_wordlist,json=enforceWordlist" json:"enforce_wordlist,omitempty"` - // 7 reserved for unused recovery method - Type *uint32 `protobuf:"varint,8,opt,name=type" json:"type,omitempty"` - U2FCounter *uint32 `protobuf:"varint,9,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` - DryRun *bool `protobuf:"varint,10,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *RecoveryDevice) Reset() { *m = RecoveryDevice{} } -func (m *RecoveryDevice) String() string { return proto.CompactTextString(m) } -func (*RecoveryDevice) ProtoMessage() {} -func (*RecoveryDevice) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{31} } - -const Default_RecoveryDevice_Language string = "english" - -func (m *RecoveryDevice) GetWordCount() uint32 { - if m != nil && m.WordCount != nil { - return *m.WordCount - } - return 0 -} - -func (m *RecoveryDevice) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -func (m *RecoveryDevice) GetPinProtection() bool { - if m != nil && m.PinProtection != nil { - return *m.PinProtection - } - return false -} - -func (m *RecoveryDevice) GetLanguage() string { - if m != nil && m.Language != nil { - return *m.Language - } - return Default_RecoveryDevice_Language -} - -func (m *RecoveryDevice) GetLabel() string { - if m != nil && m.Label != nil { - return *m.Label - } - return "" -} - -func (m *RecoveryDevice) GetEnforceWordlist() bool { - if m != nil && m.EnforceWordlist != nil { - return *m.EnforceWordlist - } - return false -} - -func (m *RecoveryDevice) GetType() uint32 { - if m != nil && m.Type != nil { - return *m.Type - } - return 0 -} - -func (m *RecoveryDevice) GetU2FCounter() uint32 { - if m != nil && m.U2FCounter != nil { - return *m.U2FCounter - } - return 0 -} - -func (m *RecoveryDevice) GetDryRun() bool { - if m != nil && m.DryRun != nil { - return *m.DryRun - } - return false -} - -// * -// Response: Device is waiting for user to enter word of the mnemonic -// Its position is shown only on device's internal display. -// @prev RecoveryDevice -// @prev WordAck -type WordRequest struct { - Type *WordRequestType `protobuf:"varint,1,opt,name=type,enum=WordRequestType" json:"type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *WordRequest) Reset() { *m = WordRequest{} } -func (m *WordRequest) String() string { return proto.CompactTextString(m) } -func (*WordRequest) ProtoMessage() {} -func (*WordRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{32} } - -func (m *WordRequest) GetType() WordRequestType { - if m != nil && m.Type != nil { - return *m.Type - } - return WordRequestType_WordRequestType_Plain -} - -// * -// Request: Computer replies with word from the mnemonic -// @prev WordRequest -// @next WordRequest -// @next Success -// @next Failure -type WordAck struct { - Word *string `protobuf:"bytes,1,req,name=word" json:"word,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *WordAck) Reset() { *m = WordAck{} } -func (m *WordAck) String() string { return proto.CompactTextString(m) } -func (*WordAck) ProtoMessage() {} -func (*WordAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{33} } - -func (m *WordAck) GetWord() string { - if m != nil && m.Word != nil { - return *m.Word - } - return "" -} - -// * -// Request: Ask device to sign message -// @next MessageSignature -// @next Failure -type SignMessage struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Message []byte `protobuf:"bytes,2,req,name=message" json:"message,omitempty"` - CoinName *string `protobuf:"bytes,3,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - ScriptType *InputScriptType `protobuf:"varint,4,opt,name=script_type,json=scriptType,enum=InputScriptType,def=0" json:"script_type,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SignMessage) Reset() { *m = SignMessage{} } -func (m *SignMessage) String() string { return proto.CompactTextString(m) } -func (*SignMessage) ProtoMessage() {} -func (*SignMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{34} } - -const Default_SignMessage_CoinName string = "Bitcoin" -const Default_SignMessage_ScriptType InputScriptType = InputScriptType_SPENDADDRESS - -func (m *SignMessage) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *SignMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *SignMessage) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_SignMessage_CoinName -} - -func (m *SignMessage) GetScriptType() InputScriptType { - if m != nil && m.ScriptType != nil { - return *m.ScriptType - } - return Default_SignMessage_ScriptType -} - -// * -// Request: Ask device to verify message -// @next Success -// @next Failure -type VerifyMessage struct { - Address *string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - Message []byte `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - CoinName *string `protobuf:"bytes,4,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *VerifyMessage) Reset() { *m = VerifyMessage{} } -func (m *VerifyMessage) String() string { return proto.CompactTextString(m) } -func (*VerifyMessage) ProtoMessage() {} -func (*VerifyMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{35} } - -const Default_VerifyMessage_CoinName string = "Bitcoin" - -func (m *VerifyMessage) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -func (m *VerifyMessage) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -func (m *VerifyMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *VerifyMessage) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_VerifyMessage_CoinName -} - -// * -// Response: Signed message -// @prev SignMessage -type MessageSignature struct { - Address *string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MessageSignature) Reset() { *m = MessageSignature{} } -func (m *MessageSignature) String() string { return proto.CompactTextString(m) } -func (*MessageSignature) ProtoMessage() {} -func (*MessageSignature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{36} } - -func (m *MessageSignature) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -func (m *MessageSignature) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -// * -// Request: Ask device to encrypt message -// @next EncryptedMessage -// @next Failure -type EncryptMessage struct { - Pubkey []byte `protobuf:"bytes,1,opt,name=pubkey" json:"pubkey,omitempty"` - Message []byte `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - DisplayOnly *bool `protobuf:"varint,3,opt,name=display_only,json=displayOnly" json:"display_only,omitempty"` - AddressN []uint32 `protobuf:"varint,4,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - CoinName *string `protobuf:"bytes,5,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EncryptMessage) Reset() { *m = EncryptMessage{} } -func (m *EncryptMessage) String() string { return proto.CompactTextString(m) } -func (*EncryptMessage) ProtoMessage() {} -func (*EncryptMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{37} } - -const Default_EncryptMessage_CoinName string = "Bitcoin" - -func (m *EncryptMessage) GetPubkey() []byte { - if m != nil { - return m.Pubkey - } - return nil -} - -func (m *EncryptMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *EncryptMessage) GetDisplayOnly() bool { - if m != nil && m.DisplayOnly != nil { - return *m.DisplayOnly - } - return false -} - -func (m *EncryptMessage) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *EncryptMessage) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_EncryptMessage_CoinName -} - -// * -// Response: Encrypted message -// @prev EncryptMessage -type EncryptedMessage struct { - Nonce []byte `protobuf:"bytes,1,opt,name=nonce" json:"nonce,omitempty"` - Message []byte `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - Hmac []byte `protobuf:"bytes,3,opt,name=hmac" json:"hmac,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EncryptedMessage) Reset() { *m = EncryptedMessage{} } -func (m *EncryptedMessage) String() string { return proto.CompactTextString(m) } -func (*EncryptedMessage) ProtoMessage() {} -func (*EncryptedMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{38} } - -func (m *EncryptedMessage) GetNonce() []byte { - if m != nil { - return m.Nonce - } - return nil -} - -func (m *EncryptedMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *EncryptedMessage) GetHmac() []byte { - if m != nil { - return m.Hmac - } - return nil -} - -// * -// Request: Ask device to decrypt message -// @next Success -// @next Failure -type DecryptMessage struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Nonce []byte `protobuf:"bytes,2,opt,name=nonce" json:"nonce,omitempty"` - Message []byte `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - Hmac []byte `protobuf:"bytes,4,opt,name=hmac" json:"hmac,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DecryptMessage) Reset() { *m = DecryptMessage{} } -func (m *DecryptMessage) String() string { return proto.CompactTextString(m) } -func (*DecryptMessage) ProtoMessage() {} -func (*DecryptMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{39} } - -func (m *DecryptMessage) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *DecryptMessage) GetNonce() []byte { - if m != nil { - return m.Nonce - } - return nil -} - -func (m *DecryptMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *DecryptMessage) GetHmac() []byte { - if m != nil { - return m.Hmac - } - return nil -} - -// * -// Response: Decrypted message -// @prev DecryptedMessage -type DecryptedMessage struct { - Message []byte `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - Address *string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DecryptedMessage) Reset() { *m = DecryptedMessage{} } -func (m *DecryptedMessage) String() string { return proto.CompactTextString(m) } -func (*DecryptedMessage) ProtoMessage() {} -func (*DecryptedMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{40} } - -func (m *DecryptedMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -func (m *DecryptedMessage) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -// * -// Request: Ask device to encrypt or decrypt value of given key -// @next CipheredKeyValue -// @next Failure -type CipherKeyValue struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Key *string `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"` - Value []byte `protobuf:"bytes,3,opt,name=value" json:"value,omitempty"` - Encrypt *bool `protobuf:"varint,4,opt,name=encrypt" json:"encrypt,omitempty"` - AskOnEncrypt *bool `protobuf:"varint,5,opt,name=ask_on_encrypt,json=askOnEncrypt" json:"ask_on_encrypt,omitempty"` - AskOnDecrypt *bool `protobuf:"varint,6,opt,name=ask_on_decrypt,json=askOnDecrypt" json:"ask_on_decrypt,omitempty"` - Iv []byte `protobuf:"bytes,7,opt,name=iv" json:"iv,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *CipherKeyValue) Reset() { *m = CipherKeyValue{} } -func (m *CipherKeyValue) String() string { return proto.CompactTextString(m) } -func (*CipherKeyValue) ProtoMessage() {} -func (*CipherKeyValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{41} } - -func (m *CipherKeyValue) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *CipherKeyValue) GetKey() string { - if m != nil && m.Key != nil { - return *m.Key - } - return "" -} - -func (m *CipherKeyValue) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *CipherKeyValue) GetEncrypt() bool { - if m != nil && m.Encrypt != nil { - return *m.Encrypt - } - return false -} - -func (m *CipherKeyValue) GetAskOnEncrypt() bool { - if m != nil && m.AskOnEncrypt != nil { - return *m.AskOnEncrypt - } - return false -} - -func (m *CipherKeyValue) GetAskOnDecrypt() bool { - if m != nil && m.AskOnDecrypt != nil { - return *m.AskOnDecrypt - } - return false -} - -func (m *CipherKeyValue) GetIv() []byte { - if m != nil { - return m.Iv - } - return nil -} - -// * -// Response: Return ciphered/deciphered value -// @prev CipherKeyValue -type CipheredKeyValue struct { - Value []byte `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *CipheredKeyValue) Reset() { *m = CipheredKeyValue{} } -func (m *CipheredKeyValue) String() string { return proto.CompactTextString(m) } -func (*CipheredKeyValue) ProtoMessage() {} -func (*CipheredKeyValue) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{42} } - -func (m *CipheredKeyValue) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -// * -// Request: Estimated size of the transaction -// This behaves exactly like SignTx, which means that it can ask using TxRequest -// This call is non-blocking (except possible PassphraseRequest to unlock the seed) -// @next TxSize -// @next Failure -type EstimateTxSize struct { - OutputsCount *uint32 `protobuf:"varint,1,req,name=outputs_count,json=outputsCount" json:"outputs_count,omitempty"` - InputsCount *uint32 `protobuf:"varint,2,req,name=inputs_count,json=inputsCount" json:"inputs_count,omitempty"` - CoinName *string `protobuf:"bytes,3,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EstimateTxSize) Reset() { *m = EstimateTxSize{} } -func (m *EstimateTxSize) String() string { return proto.CompactTextString(m) } -func (*EstimateTxSize) ProtoMessage() {} -func (*EstimateTxSize) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{43} } - -const Default_EstimateTxSize_CoinName string = "Bitcoin" - -func (m *EstimateTxSize) GetOutputsCount() uint32 { - if m != nil && m.OutputsCount != nil { - return *m.OutputsCount - } - return 0 -} - -func (m *EstimateTxSize) GetInputsCount() uint32 { - if m != nil && m.InputsCount != nil { - return *m.InputsCount - } - return 0 -} - -func (m *EstimateTxSize) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_EstimateTxSize_CoinName -} - -// * -// Response: Estimated size of the transaction -// @prev EstimateTxSize -type TxSize struct { - TxSize *uint32 `protobuf:"varint,1,opt,name=tx_size,json=txSize" json:"tx_size,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxSize) Reset() { *m = TxSize{} } -func (m *TxSize) String() string { return proto.CompactTextString(m) } -func (*TxSize) ProtoMessage() {} -func (*TxSize) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{44} } - -func (m *TxSize) GetTxSize() uint32 { - if m != nil && m.TxSize != nil { - return *m.TxSize - } - return 0 -} - -// * -// Request: Ask device to sign transaction -// @next PassphraseRequest -// @next PinMatrixRequest -// @next TxRequest -// @next Failure -type SignTx struct { - OutputsCount *uint32 `protobuf:"varint,1,req,name=outputs_count,json=outputsCount" json:"outputs_count,omitempty"` - InputsCount *uint32 `protobuf:"varint,2,req,name=inputs_count,json=inputsCount" json:"inputs_count,omitempty"` - CoinName *string `protobuf:"bytes,3,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - Version *uint32 `protobuf:"varint,4,opt,name=version,def=1" json:"version,omitempty"` - LockTime *uint32 `protobuf:"varint,5,opt,name=lock_time,json=lockTime,def=0" json:"lock_time,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SignTx) Reset() { *m = SignTx{} } -func (m *SignTx) String() string { return proto.CompactTextString(m) } -func (*SignTx) ProtoMessage() {} -func (*SignTx) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{45} } - -const Default_SignTx_CoinName string = "Bitcoin" -const Default_SignTx_Version uint32 = 1 -const Default_SignTx_LockTime uint32 = 0 - -func (m *SignTx) GetOutputsCount() uint32 { - if m != nil && m.OutputsCount != nil { - return *m.OutputsCount - } - return 0 -} - -func (m *SignTx) GetInputsCount() uint32 { - if m != nil && m.InputsCount != nil { - return *m.InputsCount - } - return 0 -} - -func (m *SignTx) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_SignTx_CoinName -} - -func (m *SignTx) GetVersion() uint32 { - if m != nil && m.Version != nil { - return *m.Version - } - return Default_SignTx_Version -} - -func (m *SignTx) GetLockTime() uint32 { - if m != nil && m.LockTime != nil { - return *m.LockTime - } - return Default_SignTx_LockTime -} - -// * -// Request: Simplified transaction signing -// This method doesn't support streaming, so there are hardware limits in number of inputs and outputs. -// In case of success, the result is returned using TxRequest message. -// @next PassphraseRequest -// @next PinMatrixRequest -// @next TxRequest -// @next Failure -type SimpleSignTx struct { - Inputs []*TxInputType `protobuf:"bytes,1,rep,name=inputs" json:"inputs,omitempty"` - Outputs []*TxOutputType `protobuf:"bytes,2,rep,name=outputs" json:"outputs,omitempty"` - Transactions []*TransactionType `protobuf:"bytes,3,rep,name=transactions" json:"transactions,omitempty"` - CoinName *string `protobuf:"bytes,4,opt,name=coin_name,json=coinName,def=Bitcoin" json:"coin_name,omitempty"` - Version *uint32 `protobuf:"varint,5,opt,name=version,def=1" json:"version,omitempty"` - LockTime *uint32 `protobuf:"varint,6,opt,name=lock_time,json=lockTime,def=0" json:"lock_time,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SimpleSignTx) Reset() { *m = SimpleSignTx{} } -func (m *SimpleSignTx) String() string { return proto.CompactTextString(m) } -func (*SimpleSignTx) ProtoMessage() {} -func (*SimpleSignTx) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{46} } - -const Default_SimpleSignTx_CoinName string = "Bitcoin" -const Default_SimpleSignTx_Version uint32 = 1 -const Default_SimpleSignTx_LockTime uint32 = 0 - -func (m *SimpleSignTx) GetInputs() []*TxInputType { - if m != nil { - return m.Inputs - } - return nil -} - -func (m *SimpleSignTx) GetOutputs() []*TxOutputType { - if m != nil { - return m.Outputs - } - return nil -} - -func (m *SimpleSignTx) GetTransactions() []*TransactionType { - if m != nil { - return m.Transactions - } - return nil -} - -func (m *SimpleSignTx) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return Default_SimpleSignTx_CoinName -} - -func (m *SimpleSignTx) GetVersion() uint32 { - if m != nil && m.Version != nil { - return *m.Version - } - return Default_SimpleSignTx_Version -} - -func (m *SimpleSignTx) GetLockTime() uint32 { - if m != nil && m.LockTime != nil { - return *m.LockTime - } - return Default_SimpleSignTx_LockTime -} - -// * -// Response: Device asks for information for signing transaction or returns the last result -// If request_index is set, device awaits TxAck message (with fields filled in according to request_type) -// If signature_index is set, 'signature' contains signed input of signature_index's input -// @prev SignTx -// @prev SimpleSignTx -// @prev TxAck -type TxRequest struct { - RequestType *RequestType `protobuf:"varint,1,opt,name=request_type,json=requestType,enum=RequestType" json:"request_type,omitempty"` - Details *TxRequestDetailsType `protobuf:"bytes,2,opt,name=details" json:"details,omitempty"` - Serialized *TxRequestSerializedType `protobuf:"bytes,3,opt,name=serialized" json:"serialized,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxRequest) Reset() { *m = TxRequest{} } -func (m *TxRequest) String() string { return proto.CompactTextString(m) } -func (*TxRequest) ProtoMessage() {} -func (*TxRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{47} } - -func (m *TxRequest) GetRequestType() RequestType { - if m != nil && m.RequestType != nil { - return *m.RequestType - } - return RequestType_TXINPUT -} - -func (m *TxRequest) GetDetails() *TxRequestDetailsType { - if m != nil { - return m.Details - } - return nil -} - -func (m *TxRequest) GetSerialized() *TxRequestSerializedType { - if m != nil { - return m.Serialized - } - return nil -} - -// * -// Request: Reported transaction data -// @prev TxRequest -// @next TxRequest -type TxAck struct { - Tx *TransactionType `protobuf:"bytes,1,opt,name=tx" json:"tx,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxAck) Reset() { *m = TxAck{} } -func (m *TxAck) String() string { return proto.CompactTextString(m) } -func (*TxAck) ProtoMessage() {} -func (*TxAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{48} } - -func (m *TxAck) GetTx() *TransactionType { - if m != nil { - return m.Tx - } - return nil -} - -// * -// Request: Ask device to sign transaction -// All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing. -// Note: the first at most 1024 bytes of data MUST be transmitted as part of this message. -// @next PassphraseRequest -// @next PinMatrixRequest -// @next EthereumTxRequest -// @next Failure -type EthereumSignTx struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Nonce []byte `protobuf:"bytes,2,opt,name=nonce" json:"nonce,omitempty"` - GasPrice []byte `protobuf:"bytes,3,opt,name=gas_price,json=gasPrice" json:"gas_price,omitempty"` - GasLimit []byte `protobuf:"bytes,4,opt,name=gas_limit,json=gasLimit" json:"gas_limit,omitempty"` - To []byte `protobuf:"bytes,5,opt,name=to" json:"to,omitempty"` - Value []byte `protobuf:"bytes,6,opt,name=value" json:"value,omitempty"` - DataInitialChunk []byte `protobuf:"bytes,7,opt,name=data_initial_chunk,json=dataInitialChunk" json:"data_initial_chunk,omitempty"` - DataLength *uint32 `protobuf:"varint,8,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` - ChainId *uint32 `protobuf:"varint,9,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumSignTx) Reset() { *m = EthereumSignTx{} } -func (m *EthereumSignTx) String() string { return proto.CompactTextString(m) } -func (*EthereumSignTx) ProtoMessage() {} -func (*EthereumSignTx) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{49} } - -func (m *EthereumSignTx) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *EthereumSignTx) GetNonce() []byte { - if m != nil { - return m.Nonce - } - return nil -} - -func (m *EthereumSignTx) GetGasPrice() []byte { - if m != nil { - return m.GasPrice - } - return nil -} - -func (m *EthereumSignTx) GetGasLimit() []byte { - if m != nil { - return m.GasLimit - } - return nil -} - -func (m *EthereumSignTx) GetTo() []byte { - if m != nil { - return m.To - } - return nil -} - -func (m *EthereumSignTx) GetValue() []byte { - if m != nil { - return m.Value - } - return nil -} - -func (m *EthereumSignTx) GetDataInitialChunk() []byte { - if m != nil { - return m.DataInitialChunk - } - return nil -} - -func (m *EthereumSignTx) GetDataLength() uint32 { - if m != nil && m.DataLength != nil { - return *m.DataLength - } - return 0 -} - -func (m *EthereumSignTx) GetChainId() uint32 { - if m != nil && m.ChainId != nil { - return *m.ChainId - } - return 0 -} - -// * -// Response: Device asks for more data from transaction payload, or returns the signature. -// If data_length is set, device awaits that many more bytes of payload. -// Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present. -// @prev EthereumSignTx -// @next EthereumTxAck -type EthereumTxRequest struct { - DataLength *uint32 `protobuf:"varint,1,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` - SignatureV *uint32 `protobuf:"varint,2,opt,name=signature_v,json=signatureV" json:"signature_v,omitempty"` - SignatureR []byte `protobuf:"bytes,3,opt,name=signature_r,json=signatureR" json:"signature_r,omitempty"` - SignatureS []byte `protobuf:"bytes,4,opt,name=signature_s,json=signatureS" json:"signature_s,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumTxRequest) Reset() { *m = EthereumTxRequest{} } -func (m *EthereumTxRequest) String() string { return proto.CompactTextString(m) } -func (*EthereumTxRequest) ProtoMessage() {} -func (*EthereumTxRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{50} } - -func (m *EthereumTxRequest) GetDataLength() uint32 { - if m != nil && m.DataLength != nil { - return *m.DataLength - } - return 0 -} - -func (m *EthereumTxRequest) GetSignatureV() uint32 { - if m != nil && m.SignatureV != nil { - return *m.SignatureV - } - return 0 -} - -func (m *EthereumTxRequest) GetSignatureR() []byte { - if m != nil { - return m.SignatureR - } - return nil -} - -func (m *EthereumTxRequest) GetSignatureS() []byte { - if m != nil { - return m.SignatureS - } - return nil -} - -// * -// Request: Transaction payload data. -// @prev EthereumTxRequest -// @next EthereumTxRequest -type EthereumTxAck struct { - DataChunk []byte `protobuf:"bytes,1,opt,name=data_chunk,json=dataChunk" json:"data_chunk,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumTxAck) Reset() { *m = EthereumTxAck{} } -func (m *EthereumTxAck) String() string { return proto.CompactTextString(m) } -func (*EthereumTxAck) ProtoMessage() {} -func (*EthereumTxAck) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{51} } - -func (m *EthereumTxAck) GetDataChunk() []byte { - if m != nil { - return m.DataChunk - } - return nil -} - -// * -// Request: Ask device to sign message -// @next EthereumMessageSignature -// @next Failure -type EthereumSignMessage struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Message []byte `protobuf:"bytes,2,req,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumSignMessage) Reset() { *m = EthereumSignMessage{} } -func (m *EthereumSignMessage) String() string { return proto.CompactTextString(m) } -func (*EthereumSignMessage) ProtoMessage() {} -func (*EthereumSignMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{52} } - -func (m *EthereumSignMessage) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *EthereumSignMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -// * -// Request: Ask device to verify message -// @next Success -// @next Failure -type EthereumVerifyMessage struct { - Address []byte `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - Message []byte `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumVerifyMessage) Reset() { *m = EthereumVerifyMessage{} } -func (m *EthereumVerifyMessage) String() string { return proto.CompactTextString(m) } -func (*EthereumVerifyMessage) ProtoMessage() {} -func (*EthereumVerifyMessage) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{53} } - -func (m *EthereumVerifyMessage) GetAddress() []byte { - if m != nil { - return m.Address - } - return nil -} - -func (m *EthereumVerifyMessage) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -func (m *EthereumVerifyMessage) GetMessage() []byte { - if m != nil { - return m.Message - } - return nil -} - -// * -// Response: Signed message -// @prev EthereumSignMessage -type EthereumMessageSignature struct { - Address []byte `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *EthereumMessageSignature) Reset() { *m = EthereumMessageSignature{} } -func (m *EthereumMessageSignature) String() string { return proto.CompactTextString(m) } -func (*EthereumMessageSignature) ProtoMessage() {} -func (*EthereumMessageSignature) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{54} } - -func (m *EthereumMessageSignature) GetAddress() []byte { - if m != nil { - return m.Address - } - return nil -} - -func (m *EthereumMessageSignature) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -// * -// Request: Ask device to sign identity -// @next SignedIdentity -// @next Failure -type SignIdentity struct { - Identity *IdentityType `protobuf:"bytes,1,opt,name=identity" json:"identity,omitempty"` - ChallengeHidden []byte `protobuf:"bytes,2,opt,name=challenge_hidden,json=challengeHidden" json:"challenge_hidden,omitempty"` - ChallengeVisual *string `protobuf:"bytes,3,opt,name=challenge_visual,json=challengeVisual" json:"challenge_visual,omitempty"` - EcdsaCurveName *string `protobuf:"bytes,4,opt,name=ecdsa_curve_name,json=ecdsaCurveName" json:"ecdsa_curve_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SignIdentity) Reset() { *m = SignIdentity{} } -func (m *SignIdentity) String() string { return proto.CompactTextString(m) } -func (*SignIdentity) ProtoMessage() {} -func (*SignIdentity) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{55} } - -func (m *SignIdentity) GetIdentity() *IdentityType { - if m != nil { - return m.Identity - } - return nil -} - -func (m *SignIdentity) GetChallengeHidden() []byte { - if m != nil { - return m.ChallengeHidden - } - return nil -} - -func (m *SignIdentity) GetChallengeVisual() string { - if m != nil && m.ChallengeVisual != nil { - return *m.ChallengeVisual - } - return "" -} - -func (m *SignIdentity) GetEcdsaCurveName() string { - if m != nil && m.EcdsaCurveName != nil { - return *m.EcdsaCurveName - } - return "" -} - -// * -// Response: Device provides signed identity -// @prev SignIdentity -type SignedIdentity struct { - Address *string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - PublicKey []byte `protobuf:"bytes,2,opt,name=public_key,json=publicKey" json:"public_key,omitempty"` - Signature []byte `protobuf:"bytes,3,opt,name=signature" json:"signature,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SignedIdentity) Reset() { *m = SignedIdentity{} } -func (m *SignedIdentity) String() string { return proto.CompactTextString(m) } -func (*SignedIdentity) ProtoMessage() {} -func (*SignedIdentity) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{56} } - -func (m *SignedIdentity) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -func (m *SignedIdentity) GetPublicKey() []byte { - if m != nil { - return m.PublicKey - } - return nil -} - -func (m *SignedIdentity) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -// * -// Request: Ask device to generate ECDH session key -// @next ECDHSessionKey -// @next Failure -type GetECDHSessionKey struct { - Identity *IdentityType `protobuf:"bytes,1,opt,name=identity" json:"identity,omitempty"` - PeerPublicKey []byte `protobuf:"bytes,2,opt,name=peer_public_key,json=peerPublicKey" json:"peer_public_key,omitempty"` - EcdsaCurveName *string `protobuf:"bytes,3,opt,name=ecdsa_curve_name,json=ecdsaCurveName" json:"ecdsa_curve_name,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *GetECDHSessionKey) Reset() { *m = GetECDHSessionKey{} } -func (m *GetECDHSessionKey) String() string { return proto.CompactTextString(m) } -func (*GetECDHSessionKey) ProtoMessage() {} -func (*GetECDHSessionKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{57} } - -func (m *GetECDHSessionKey) GetIdentity() *IdentityType { - if m != nil { - return m.Identity - } - return nil -} - -func (m *GetECDHSessionKey) GetPeerPublicKey() []byte { - if m != nil { - return m.PeerPublicKey - } - return nil -} - -func (m *GetECDHSessionKey) GetEcdsaCurveName() string { - if m != nil && m.EcdsaCurveName != nil { - return *m.EcdsaCurveName - } - return "" -} - -// * -// Response: Device provides ECDH session key -// @prev GetECDHSessionKey -type ECDHSessionKey struct { - SessionKey []byte `protobuf:"bytes,1,opt,name=session_key,json=sessionKey" json:"session_key,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *ECDHSessionKey) Reset() { *m = ECDHSessionKey{} } -func (m *ECDHSessionKey) String() string { return proto.CompactTextString(m) } -func (*ECDHSessionKey) ProtoMessage() {} -func (*ECDHSessionKey) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{58} } - -func (m *ECDHSessionKey) GetSessionKey() []byte { - if m != nil { - return m.SessionKey - } - return nil -} - -// * -// Request: Set U2F counter -// @next Success -type SetU2FCounter struct { - U2FCounter *uint32 `protobuf:"varint,1,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SetU2FCounter) Reset() { *m = SetU2FCounter{} } -func (m *SetU2FCounter) String() string { return proto.CompactTextString(m) } -func (*SetU2FCounter) ProtoMessage() {} -func (*SetU2FCounter) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{59} } - -func (m *SetU2FCounter) GetU2FCounter() uint32 { - if m != nil && m.U2FCounter != nil { - return *m.U2FCounter - } - return 0 -} - -// * -// Request: Ask device to erase its firmware (so it can be replaced via FirmwareUpload) -// @next Success -// @next FirmwareRequest -// @next Failure -type FirmwareErase struct { - Length *uint32 `protobuf:"varint,1,opt,name=length" json:"length,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *FirmwareErase) Reset() { *m = FirmwareErase{} } -func (m *FirmwareErase) String() string { return proto.CompactTextString(m) } -func (*FirmwareErase) ProtoMessage() {} -func (*FirmwareErase) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{60} } - -func (m *FirmwareErase) GetLength() uint32 { - if m != nil && m.Length != nil { - return *m.Length - } - return 0 -} - -// * -// Response: Ask for firmware chunk -// @next FirmwareUpload -type FirmwareRequest struct { - Offset *uint32 `protobuf:"varint,1,opt,name=offset" json:"offset,omitempty"` - Length *uint32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *FirmwareRequest) Reset() { *m = FirmwareRequest{} } -func (m *FirmwareRequest) String() string { return proto.CompactTextString(m) } -func (*FirmwareRequest) ProtoMessage() {} -func (*FirmwareRequest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{61} } - -func (m *FirmwareRequest) GetOffset() uint32 { - if m != nil && m.Offset != nil { - return *m.Offset - } - return 0 -} - -func (m *FirmwareRequest) GetLength() uint32 { - if m != nil && m.Length != nil { - return *m.Length - } - return 0 -} - -// * -// Request: Send firmware in binary form to the device -// @next Success -// @next Failure -type FirmwareUpload struct { - Payload []byte `protobuf:"bytes,1,req,name=payload" json:"payload,omitempty"` - Hash []byte `protobuf:"bytes,2,opt,name=hash" json:"hash,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *FirmwareUpload) Reset() { *m = FirmwareUpload{} } -func (m *FirmwareUpload) String() string { return proto.CompactTextString(m) } -func (*FirmwareUpload) ProtoMessage() {} -func (*FirmwareUpload) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{62} } - -func (m *FirmwareUpload) GetPayload() []byte { - if m != nil { - return m.Payload - } - return nil -} - -func (m *FirmwareUpload) GetHash() []byte { - if m != nil { - return m.Hash - } - return nil -} - -// * -// Request: Perform a device self-test -// @next Success -// @next Failure -type SelfTest struct { - Payload []byte `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SelfTest) Reset() { *m = SelfTest{} } -func (m *SelfTest) String() string { return proto.CompactTextString(m) } -func (*SelfTest) ProtoMessage() {} -func (*SelfTest) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{63} } - -func (m *SelfTest) GetPayload() []byte { - if m != nil { - return m.Payload - } - return nil -} - -// * -// Request: "Press" the button on the device -// @next Success -type DebugLinkDecision struct { - YesNo *bool `protobuf:"varint,1,req,name=yes_no,json=yesNo" json:"yes_no,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkDecision) Reset() { *m = DebugLinkDecision{} } -func (m *DebugLinkDecision) String() string { return proto.CompactTextString(m) } -func (*DebugLinkDecision) ProtoMessage() {} -func (*DebugLinkDecision) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{64} } - -func (m *DebugLinkDecision) GetYesNo() bool { - if m != nil && m.YesNo != nil { - return *m.YesNo - } - return false -} - -// * -// Request: Computer asks for device state -// @next DebugLinkState -type DebugLinkGetState struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkGetState) Reset() { *m = DebugLinkGetState{} } -func (m *DebugLinkGetState) String() string { return proto.CompactTextString(m) } -func (*DebugLinkGetState) ProtoMessage() {} -func (*DebugLinkGetState) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{65} } - -// * -// Response: Device current state -// @prev DebugLinkGetState -type DebugLinkState struct { - Layout []byte `protobuf:"bytes,1,opt,name=layout" json:"layout,omitempty"` - Pin *string `protobuf:"bytes,2,opt,name=pin" json:"pin,omitempty"` - Matrix *string `protobuf:"bytes,3,opt,name=matrix" json:"matrix,omitempty"` - Mnemonic *string `protobuf:"bytes,4,opt,name=mnemonic" json:"mnemonic,omitempty"` - Node *HDNodeType `protobuf:"bytes,5,opt,name=node" json:"node,omitempty"` - PassphraseProtection *bool `protobuf:"varint,6,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` - ResetWord *string `protobuf:"bytes,7,opt,name=reset_word,json=resetWord" json:"reset_word,omitempty"` - ResetEntropy []byte `protobuf:"bytes,8,opt,name=reset_entropy,json=resetEntropy" json:"reset_entropy,omitempty"` - RecoveryFakeWord *string `protobuf:"bytes,9,opt,name=recovery_fake_word,json=recoveryFakeWord" json:"recovery_fake_word,omitempty"` - RecoveryWordPos *uint32 `protobuf:"varint,10,opt,name=recovery_word_pos,json=recoveryWordPos" json:"recovery_word_pos,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkState) Reset() { *m = DebugLinkState{} } -func (m *DebugLinkState) String() string { return proto.CompactTextString(m) } -func (*DebugLinkState) ProtoMessage() {} -func (*DebugLinkState) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{66} } - -func (m *DebugLinkState) GetLayout() []byte { - if m != nil { - return m.Layout - } - return nil -} - -func (m *DebugLinkState) GetPin() string { - if m != nil && m.Pin != nil { - return *m.Pin - } - return "" -} - -func (m *DebugLinkState) GetMatrix() string { - if m != nil && m.Matrix != nil { - return *m.Matrix - } - return "" -} - -func (m *DebugLinkState) GetMnemonic() string { - if m != nil && m.Mnemonic != nil { - return *m.Mnemonic - } - return "" -} - -func (m *DebugLinkState) GetNode() *HDNodeType { - if m != nil { - return m.Node - } - return nil -} - -func (m *DebugLinkState) GetPassphraseProtection() bool { - if m != nil && m.PassphraseProtection != nil { - return *m.PassphraseProtection - } - return false -} - -func (m *DebugLinkState) GetResetWord() string { - if m != nil && m.ResetWord != nil { - return *m.ResetWord - } - return "" -} - -func (m *DebugLinkState) GetResetEntropy() []byte { - if m != nil { - return m.ResetEntropy - } - return nil -} - -func (m *DebugLinkState) GetRecoveryFakeWord() string { - if m != nil && m.RecoveryFakeWord != nil { - return *m.RecoveryFakeWord - } - return "" -} - -func (m *DebugLinkState) GetRecoveryWordPos() uint32 { - if m != nil && m.RecoveryWordPos != nil { - return *m.RecoveryWordPos - } - return 0 -} - -// * -// Request: Ask device to restart -type DebugLinkStop struct { - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkStop) Reset() { *m = DebugLinkStop{} } -func (m *DebugLinkStop) String() string { return proto.CompactTextString(m) } -func (*DebugLinkStop) ProtoMessage() {} -func (*DebugLinkStop) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{67} } - -// * -// Response: Device wants host to log event -type DebugLinkLog struct { - Level *uint32 `protobuf:"varint,1,opt,name=level" json:"level,omitempty"` - Bucket *string `protobuf:"bytes,2,opt,name=bucket" json:"bucket,omitempty"` - Text *string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkLog) Reset() { *m = DebugLinkLog{} } -func (m *DebugLinkLog) String() string { return proto.CompactTextString(m) } -func (*DebugLinkLog) ProtoMessage() {} -func (*DebugLinkLog) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{68} } - -func (m *DebugLinkLog) GetLevel() uint32 { - if m != nil && m.Level != nil { - return *m.Level - } - return 0 -} - -func (m *DebugLinkLog) GetBucket() string { - if m != nil && m.Bucket != nil { - return *m.Bucket - } - return "" -} - -func (m *DebugLinkLog) GetText() string { - if m != nil && m.Text != nil { - return *m.Text - } - return "" -} - -// * -// Request: Read memory from device -// @next DebugLinkMemory -type DebugLinkMemoryRead struct { - Address *uint32 `protobuf:"varint,1,opt,name=address" json:"address,omitempty"` - Length *uint32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkMemoryRead) Reset() { *m = DebugLinkMemoryRead{} } -func (m *DebugLinkMemoryRead) String() string { return proto.CompactTextString(m) } -func (*DebugLinkMemoryRead) ProtoMessage() {} -func (*DebugLinkMemoryRead) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{69} } - -func (m *DebugLinkMemoryRead) GetAddress() uint32 { - if m != nil && m.Address != nil { - return *m.Address - } - return 0 -} - -func (m *DebugLinkMemoryRead) GetLength() uint32 { - if m != nil && m.Length != nil { - return *m.Length - } - return 0 -} - -// * -// Response: Device sends memory back -// @prev DebugLinkMemoryRead -type DebugLinkMemory struct { - Memory []byte `protobuf:"bytes,1,opt,name=memory" json:"memory,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkMemory) Reset() { *m = DebugLinkMemory{} } -func (m *DebugLinkMemory) String() string { return proto.CompactTextString(m) } -func (*DebugLinkMemory) ProtoMessage() {} -func (*DebugLinkMemory) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{70} } - -func (m *DebugLinkMemory) GetMemory() []byte { - if m != nil { - return m.Memory - } - return nil -} - -// * -// Request: Write memory to device. -// WARNING: Writing to the wrong location can irreparably break the device. -type DebugLinkMemoryWrite struct { - Address *uint32 `protobuf:"varint,1,opt,name=address" json:"address,omitempty"` - Memory []byte `protobuf:"bytes,2,opt,name=memory" json:"memory,omitempty"` - Flash *bool `protobuf:"varint,3,opt,name=flash" json:"flash,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkMemoryWrite) Reset() { *m = DebugLinkMemoryWrite{} } -func (m *DebugLinkMemoryWrite) String() string { return proto.CompactTextString(m) } -func (*DebugLinkMemoryWrite) ProtoMessage() {} -func (*DebugLinkMemoryWrite) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{71} } - -func (m *DebugLinkMemoryWrite) GetAddress() uint32 { - if m != nil && m.Address != nil { - return *m.Address - } - return 0 -} - -func (m *DebugLinkMemoryWrite) GetMemory() []byte { - if m != nil { - return m.Memory - } - return nil -} - -func (m *DebugLinkMemoryWrite) GetFlash() bool { - if m != nil && m.Flash != nil { - return *m.Flash - } - return false -} - -// * -// Request: Erase block of flash on device -// WARNING: Writing to the wrong location can irreparably break the device. -type DebugLinkFlashErase struct { - Sector *uint32 `protobuf:"varint,1,opt,name=sector" json:"sector,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *DebugLinkFlashErase) Reset() { *m = DebugLinkFlashErase{} } -func (m *DebugLinkFlashErase) String() string { return proto.CompactTextString(m) } -func (*DebugLinkFlashErase) ProtoMessage() {} -func (*DebugLinkFlashErase) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{72} } - -func (m *DebugLinkFlashErase) GetSector() uint32 { - if m != nil && m.Sector != nil { - return *m.Sector - } - return 0 -} - -func init() { - proto.RegisterType((*Initialize)(nil), "Initialize") - proto.RegisterType((*GetFeatures)(nil), "GetFeatures") - proto.RegisterType((*Features)(nil), "Features") - proto.RegisterType((*ClearSession)(nil), "ClearSession") - proto.RegisterType((*ApplySettings)(nil), "ApplySettings") - proto.RegisterType((*ApplyFlags)(nil), "ApplyFlags") - proto.RegisterType((*ChangePin)(nil), "ChangePin") - proto.RegisterType((*Ping)(nil), "Ping") - proto.RegisterType((*Success)(nil), "Success") - proto.RegisterType((*Failure)(nil), "Failure") - proto.RegisterType((*ButtonRequest)(nil), "ButtonRequest") - proto.RegisterType((*ButtonAck)(nil), "ButtonAck") - proto.RegisterType((*PinMatrixRequest)(nil), "PinMatrixRequest") - proto.RegisterType((*PinMatrixAck)(nil), "PinMatrixAck") - proto.RegisterType((*Cancel)(nil), "Cancel") - proto.RegisterType((*PassphraseRequest)(nil), "PassphraseRequest") - proto.RegisterType((*PassphraseAck)(nil), "PassphraseAck") - proto.RegisterType((*GetEntropy)(nil), "GetEntropy") - proto.RegisterType((*Entropy)(nil), "Entropy") - proto.RegisterType((*GetPublicKey)(nil), "GetPublicKey") - proto.RegisterType((*PublicKey)(nil), "PublicKey") - proto.RegisterType((*GetAddress)(nil), "GetAddress") - proto.RegisterType((*EthereumGetAddress)(nil), "EthereumGetAddress") - proto.RegisterType((*Address)(nil), "Address") - proto.RegisterType((*EthereumAddress)(nil), "EthereumAddress") - proto.RegisterType((*WipeDevice)(nil), "WipeDevice") - proto.RegisterType((*LoadDevice)(nil), "LoadDevice") - proto.RegisterType((*ResetDevice)(nil), "ResetDevice") - proto.RegisterType((*BackupDevice)(nil), "BackupDevice") - proto.RegisterType((*EntropyRequest)(nil), "EntropyRequest") - proto.RegisterType((*EntropyAck)(nil), "EntropyAck") - proto.RegisterType((*RecoveryDevice)(nil), "RecoveryDevice") - proto.RegisterType((*WordRequest)(nil), "WordRequest") - proto.RegisterType((*WordAck)(nil), "WordAck") - proto.RegisterType((*SignMessage)(nil), "SignMessage") - proto.RegisterType((*VerifyMessage)(nil), "VerifyMessage") - proto.RegisterType((*MessageSignature)(nil), "MessageSignature") - proto.RegisterType((*EncryptMessage)(nil), "EncryptMessage") - proto.RegisterType((*EncryptedMessage)(nil), "EncryptedMessage") - proto.RegisterType((*DecryptMessage)(nil), "DecryptMessage") - proto.RegisterType((*DecryptedMessage)(nil), "DecryptedMessage") - proto.RegisterType((*CipherKeyValue)(nil), "CipherKeyValue") - proto.RegisterType((*CipheredKeyValue)(nil), "CipheredKeyValue") - proto.RegisterType((*EstimateTxSize)(nil), "EstimateTxSize") - proto.RegisterType((*TxSize)(nil), "TxSize") - proto.RegisterType((*SignTx)(nil), "SignTx") - proto.RegisterType((*SimpleSignTx)(nil), "SimpleSignTx") - proto.RegisterType((*TxRequest)(nil), "TxRequest") - proto.RegisterType((*TxAck)(nil), "TxAck") - proto.RegisterType((*EthereumSignTx)(nil), "EthereumSignTx") - proto.RegisterType((*EthereumTxRequest)(nil), "EthereumTxRequest") - proto.RegisterType((*EthereumTxAck)(nil), "EthereumTxAck") - proto.RegisterType((*EthereumSignMessage)(nil), "EthereumSignMessage") - proto.RegisterType((*EthereumVerifyMessage)(nil), "EthereumVerifyMessage") - proto.RegisterType((*EthereumMessageSignature)(nil), "EthereumMessageSignature") - proto.RegisterType((*SignIdentity)(nil), "SignIdentity") - proto.RegisterType((*SignedIdentity)(nil), "SignedIdentity") - proto.RegisterType((*GetECDHSessionKey)(nil), "GetECDHSessionKey") - proto.RegisterType((*ECDHSessionKey)(nil), "ECDHSessionKey") - proto.RegisterType((*SetU2FCounter)(nil), "SetU2FCounter") - proto.RegisterType((*FirmwareErase)(nil), "FirmwareErase") - proto.RegisterType((*FirmwareRequest)(nil), "FirmwareRequest") - proto.RegisterType((*FirmwareUpload)(nil), "FirmwareUpload") - proto.RegisterType((*SelfTest)(nil), "SelfTest") - proto.RegisterType((*DebugLinkDecision)(nil), "DebugLinkDecision") - proto.RegisterType((*DebugLinkGetState)(nil), "DebugLinkGetState") - proto.RegisterType((*DebugLinkState)(nil), "DebugLinkState") - proto.RegisterType((*DebugLinkStop)(nil), "DebugLinkStop") - proto.RegisterType((*DebugLinkLog)(nil), "DebugLinkLog") - proto.RegisterType((*DebugLinkMemoryRead)(nil), "DebugLinkMemoryRead") - proto.RegisterType((*DebugLinkMemory)(nil), "DebugLinkMemory") - proto.RegisterType((*DebugLinkMemoryWrite)(nil), "DebugLinkMemoryWrite") - proto.RegisterType((*DebugLinkFlashErase)(nil), "DebugLinkFlashErase") - proto.RegisterEnum("MessageType", MessageType_name, MessageType_value) -} - -func init() { proto.RegisterFile("messages.proto", fileDescriptor1) } - -var fileDescriptor1 = []byte{ - // 3424 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x5a, 0xcb, 0x6f, 0xdc, 0x46, - 0x9a, 0x5f, 0x76, 0xb7, 0xfa, 0xf1, 0x35, 0xbb, 0x55, 0xa2, 0x2d, 0xbb, 0x2d, 0x5b, 0xb6, 0x4c, - 0xc9, 0xb6, 0x64, 0x27, 0xed, 0x44, 0x79, 0x6c, 0xd6, 0xbb, 0x79, 0xc8, 0x7a, 0xd8, 0xde, 0xd8, - 0x8e, 0xc0, 0x56, 0x9c, 0xdb, 0x12, 0x14, 0x59, 0xea, 0xae, 0x55, 0x37, 0xc9, 0xf0, 0xa1, 0xa8, - 0x7d, 0xd8, 0xeb, 0xee, 0x65, 0x81, 0xec, 0x69, 0x73, 0x1a, 0xe4, 0x36, 0x19, 0x04, 0x18, 0x0c, - 0x30, 0x18, 0x60, 0x72, 0x9a, 0x3f, 0x60, 0xfe, 0x8b, 0x39, 0xce, 0x1f, 0x30, 0xe7, 0x41, 0x3d, - 0x48, 0x16, 0x29, 0xb6, 0x6c, 0x27, 0xc0, 0x5c, 0x04, 0xd6, 0x57, 0xbf, 0xfe, 0xea, 0x7b, 0xd5, - 0x57, 0x5f, 0x7d, 0x25, 0xe8, 0x4e, 0x70, 0x18, 0x5a, 0x43, 0x1c, 0xf6, 0xfd, 0xc0, 0x8b, 0xbc, - 0xa5, 0x76, 0x34, 0xf5, 0x93, 0x81, 0xae, 0x02, 0x3c, 0x71, 0x49, 0x44, 0xac, 0x31, 0x79, 0x89, - 0xf5, 0x0e, 0xb4, 0x1f, 0xe1, 0x68, 0x0f, 0x5b, 0x51, 0x1c, 0xe0, 0x50, 0xff, 0x69, 0x0e, 0x9a, - 0xc9, 0x40, 0xbb, 0x04, 0xf5, 0x13, 0xec, 0x3a, 0x5e, 0xd0, 0x53, 0x56, 0x94, 0xf5, 0x96, 0x21, - 0x46, 0xda, 0x2a, 0x74, 0x26, 0xd6, 0x7f, 0x7a, 0x81, 0x79, 0x82, 0x83, 0x90, 0x78, 0x6e, 0xaf, - 0xb2, 0xa2, 0xac, 0x77, 0x0c, 0x95, 0x11, 0x5f, 0x70, 0x1a, 0x03, 0x11, 0x57, 0x02, 0x55, 0x05, - 0x88, 0x12, 0x25, 0x90, 0x6f, 0x45, 0xf6, 0x28, 0x05, 0xd5, 0x38, 0x88, 0x11, 0x13, 0xd0, 0x1d, - 0x98, 0x3f, 0xf4, 0xbc, 0x68, 0xec, 0x59, 0x0e, 0x0e, 0xcc, 0x89, 0xe7, 0xe0, 0xde, 0xdc, 0x8a, - 0xb2, 0xde, 0x34, 0xba, 0x19, 0xf9, 0x99, 0xe7, 0x60, 0xed, 0x2a, 0xb4, 0x1c, 0x7c, 0x42, 0x6c, - 0x6c, 0x12, 0xa7, 0x57, 0x67, 0x22, 0x37, 0x39, 0xe1, 0x89, 0xa3, 0xdd, 0x82, 0xae, 0x4f, 0x5c, - 0x93, 0xda, 0x00, 0xdb, 0x11, 0x5d, 0xab, 0xc1, 0x98, 0x74, 0x7c, 0xe2, 0xee, 0xa7, 0x44, 0xed, - 0x3d, 0x58, 0xf4, 0xad, 0x30, 0xf4, 0x47, 0x81, 0x15, 0x62, 0x19, 0xdd, 0x64, 0xe8, 0x8b, 0xd9, - 0xa4, 0xf4, 0xa3, 0x25, 0x68, 0x8e, 0x2d, 0x77, 0x18, 0x5b, 0x43, 0xdc, 0x6b, 0xf1, 0x75, 0x93, - 0xb1, 0x76, 0x11, 0xe6, 0xc6, 0xd6, 0x21, 0x1e, 0xf7, 0x80, 0x4d, 0xf0, 0x81, 0x76, 0x03, 0xe6, - 0x6c, 0x8f, 0xb8, 0x61, 0xaf, 0xbd, 0x52, 0x5d, 0x6f, 0x6f, 0xb6, 0xfa, 0xdb, 0x1e, 0x71, 0x0f, - 0xa6, 0x3e, 0x36, 0x38, 0x5d, 0x5b, 0x81, 0x36, 0x49, 0xbd, 0xe4, 0xf4, 0x54, 0xb6, 0xba, 0x4c, - 0xa2, 0x8b, 0x06, 0xf8, 0x84, 0x30, 0xb3, 0x75, 0x56, 0x94, 0x75, 0xd5, 0x48, 0xc7, 0x05, 0x93, - 0x8d, 0xac, 0x70, 0xd4, 0xeb, 0x32, 0x88, 0x64, 0xb2, 0xc7, 0x56, 0x38, 0xa2, 0x4c, 0xc8, 0xc4, - 0xf7, 0x82, 0x08, 0x3b, 0xbd, 0x79, 0xb6, 0x46, 0x3a, 0xd6, 0x96, 0x01, 0xa8, 0xc5, 0x6c, 0xcb, - 0x1e, 0x61, 0xa7, 0x87, 0xd8, 0x6c, 0xcb, 0x27, 0xee, 0x36, 0x23, 0x68, 0xf7, 0x60, 0x41, 0xb2, - 0x94, 0x40, 0x2d, 0x30, 0x14, 0xca, 0x26, 0x04, 0x78, 0x03, 0xd0, 0x11, 0x09, 0x26, 0xdf, 0x58, - 0x01, 0x35, 0x2a, 0x0e, 0xb1, 0x1b, 0xf5, 0x34, 0x86, 0x9d, 0x4f, 0xe8, 0xfb, 0x9c, 0xac, 0xdd, - 0x04, 0xd5, 0xc5, 0xd8, 0x09, 0xcd, 0x43, 0xcb, 0x3e, 0x8e, 0xfd, 0xde, 0x05, 0xae, 0x3a, 0xa3, - 0x3d, 0x64, 0x24, 0x6a, 0xd3, 0xa3, 0xb1, 0x35, 0x0c, 0x7b, 0x17, 0x59, 0xb8, 0xf0, 0x81, 0xde, - 0x05, 0x75, 0x7b, 0x8c, 0xad, 0x60, 0x80, 0x43, 0x6a, 0x04, 0xfd, 0x7f, 0x14, 0xe8, 0x6c, 0xf9, - 0xfe, 0x78, 0x3a, 0xc0, 0x51, 0x44, 0xdc, 0x61, 0x98, 0xf3, 0x93, 0x32, 0xcb, 0x4f, 0x15, 0xd9, - 0x4f, 0xb7, 0xa0, 0x1b, 0xd3, 0x38, 0x48, 0xf5, 0x61, 0x61, 0xdc, 0x34, 0x3a, 0x71, 0x88, 0xf7, - 0x53, 0xa2, 0x76, 0x1d, 0x60, 0xe4, 0x4d, 0x70, 0x68, 0x07, 0x18, 0xf3, 0x20, 0x56, 0x0d, 0x89, - 0xa2, 0xeb, 0x00, 0x4c, 0x92, 0x3d, 0x2a, 0x68, 0x26, 0xbe, 0x22, 0x8b, 0xbf, 0x0a, 0xad, 0xed, - 0x91, 0xe5, 0x0e, 0xf1, 0x3e, 0x71, 0xe9, 0xd6, 0x0b, 0xf0, 0xc4, 0x3b, 0xe1, 0x72, 0x36, 0x0d, - 0x31, 0xd2, 0x7f, 0xa3, 0x40, 0x6d, 0x9f, 0xb8, 0x43, 0xad, 0x07, 0x0d, 0xb1, 0xc9, 0x85, 0x26, - 0xc9, 0x90, 0xfa, 0xe5, 0x30, 0x8e, 0x22, 0x2f, 0x17, 0xeb, 0x15, 0xee, 0x17, 0x3e, 0x21, 0x45, - 0xee, 0xd9, 0x5d, 0x51, 0x7d, 0xa3, 0x5d, 0x51, 0x9b, 0xbd, 0x2b, 0xf4, 0x55, 0x68, 0x0c, 0x62, - 0xdb, 0xc6, 0x61, 0x38, 0x5b, 0x5a, 0x7d, 0x17, 0x1a, 0x7b, 0x16, 0x19, 0xc7, 0x01, 0xd6, 0x56, - 0xa0, 0x66, 0xd3, 0xcd, 0x4d, 0x11, 0xdd, 0x4d, 0xb5, 0x2f, 0xe8, 0x6c, 0x57, 0xb0, 0x19, 0x99, - 0x4d, 0x25, 0xcf, 0xe6, 0x73, 0xe8, 0x3c, 0x64, 0xba, 0x19, 0xf8, 0xeb, 0x18, 0x87, 0x91, 0x76, - 0x3b, 0xc7, 0x4c, 0xeb, 0xe7, 0x66, 0x25, 0x96, 0x1a, 0xd4, 0x1c, 0x2b, 0xb2, 0x04, 0x3f, 0xf6, - 0xad, 0xb7, 0xa1, 0xc5, 0xe1, 0x5b, 0xf6, 0xb1, 0xfe, 0x31, 0xa0, 0x7d, 0xe2, 0x3e, 0xb3, 0xa2, - 0x80, 0x9c, 0x26, 0xcc, 0x37, 0xa0, 0x46, 0x33, 0xaa, 0x60, 0xbe, 0xd8, 0x2f, 0x02, 0x38, 0x7f, - 0x0a, 0xd1, 0x57, 0x40, 0x4d, 0x67, 0xb7, 0xec, 0x63, 0x0d, 0x41, 0xd5, 0x27, 0x6e, 0x4f, 0x59, - 0xa9, 0xac, 0xb7, 0x0c, 0xfa, 0xa9, 0x37, 0xa1, 0xbe, 0x6d, 0xb9, 0x36, 0x1e, 0xeb, 0x17, 0x60, - 0x21, 0x8b, 0x29, 0xc1, 0x4a, 0xbf, 0x0f, 0x9d, 0x8c, 0x48, 0x39, 0x5c, 0x07, 0x90, 0xc2, 0x91, - 0x33, 0x92, 0x28, 0xfa, 0x0a, 0xc0, 0x23, 0x1c, 0xed, 0xba, 0x51, 0xe0, 0xf9, 0x53, 0xaa, 0x5f, - 0x48, 0x5e, 0x72, 0x5c, 0xc7, 0x60, 0xdf, 0xd4, 0x31, 0xc9, 0x74, 0x0f, 0x1a, 0x98, 0x7f, 0x32, - 0x84, 0x6a, 0x24, 0x43, 0xfd, 0x57, 0x0a, 0xa8, 0x8f, 0x70, 0xb4, 0x1f, 0x1f, 0x8e, 0x89, 0xfd, - 0x39, 0x9e, 0xd2, 0xec, 0x6a, 0x39, 0x4e, 0x80, 0xc3, 0xd0, 0xa4, 0xf2, 0x57, 0xd7, 0x3b, 0x46, - 0x53, 0x10, 0x9e, 0x6b, 0xeb, 0x80, 0xb0, 0xed, 0x84, 0x96, 0x69, 0xc7, 0xc1, 0x09, 0x36, 0x5d, - 0x6b, 0x92, 0xb8, 0xa8, 0xcb, 0xe8, 0xdb, 0x94, 0xfc, 0xdc, 0x9a, 0x60, 0xba, 0xbd, 0xc3, 0x91, - 0xf7, 0x8d, 0xe9, 0x90, 0xd0, 0x1f, 0x5b, 0x53, 0x11, 0x6f, 0x6d, 0x4a, 0xdb, 0xe1, 0x24, 0x6d, - 0x0d, 0x5a, 0x34, 0x09, 0x72, 0x2e, 0x34, 0xc2, 0x5a, 0x0f, 0x1a, 0x0f, 0x49, 0x44, 0x69, 0x46, - 0x93, 0xfe, 0xa5, 0x8c, 0xf4, 0xcf, 0xa0, 0x95, 0x09, 0x77, 0x03, 0x6a, 0x2e, 0x77, 0x77, 0x65, - 0xbd, 0xbd, 0xd9, 0xee, 0x3f, 0xde, 0x79, 0xee, 0x39, 0x22, 0x74, 0x5c, 0xe1, 0xe7, 0x53, 0x3f, - 0x3e, 0x4c, 0xfc, 0x4c, 0xbf, 0xf5, 0xbf, 0x2a, 0xcc, 0x54, 0x5b, 0x5c, 0x89, 0xf3, 0x15, 0xcc, - 0xc9, 0x54, 0x99, 0x21, 0xd3, 0xeb, 0x28, 0xf7, 0x01, 0x34, 0x27, 0xf1, 0x38, 0x22, 0x21, 0x19, - 0x32, 0xdd, 0xda, 0x9b, 0x57, 0xfa, 0xcf, 0x04, 0xc1, 0xc0, 0x0e, 0xc6, 0x93, 0x81, 0x1d, 0x10, - 0x9f, 0xc7, 0x50, 0x0a, 0xd5, 0x3e, 0x85, 0x76, 0xc8, 0xe8, 0x26, 0x8b, 0xbc, 0x39, 0x16, 0x79, - 0xa8, 0xff, 0xc4, 0xf5, 0xe3, 0x28, 0xfb, 0xc1, 0x03, 0x75, 0xb0, 0xbf, 0xfb, 0x7c, 0x67, 0x6b, - 0x67, 0xc7, 0xd8, 0x1d, 0x0c, 0x0c, 0x08, 0xd3, 0x19, 0xfd, 0x00, 0xb4, 0xdd, 0x68, 0x84, 0x03, - 0x1c, 0x4f, 0x5e, 0x57, 0xe7, 0xa2, 0x36, 0x95, 0x33, 0xda, 0xd0, 0x50, 0x4a, 0x58, 0xf5, 0xa0, - 0x21, 0x7e, 0x29, 0x82, 0x32, 0x19, 0xea, 0xf7, 0x60, 0x3e, 0x59, 0x7a, 0x06, 0x58, 0xcd, 0xc0, - 0x2a, 0xc0, 0x57, 0xc4, 0xc7, 0x3b, 0xec, 0xdc, 0xd6, 0xff, 0xaf, 0x02, 0xf0, 0xd4, 0xb3, 0x1c, - 0x3e, 0xa4, 0x09, 0x7c, 0xe2, 0xe2, 0x89, 0xe7, 0x12, 0x3b, 0x49, 0xe0, 0xc9, 0x38, 0x0d, 0x81, - 0x0a, 0x33, 0x6a, 0x49, 0x08, 0x88, 0xad, 0x57, 0x65, 0xbf, 0xa3, 0x9f, 0x3f, 0x2b, 0xad, 0x69, - 0xab, 0xd2, 0x21, 0x32, 0xc7, 0x03, 0x01, 0xbb, 0xc3, 0x31, 0x09, 0x47, 0x65, 0xa7, 0x49, 0x5d, - 0x3e, 0x4d, 0x56, 0xa1, 0x13, 0x1e, 0x13, 0xdf, 0xb4, 0x47, 0xd8, 0x3e, 0x0e, 0xe3, 0x89, 0x28, - 0x41, 0x54, 0x4a, 0xdc, 0x16, 0x34, 0xed, 0x06, 0xb4, 0xe3, 0xcd, 0x23, 0xd3, 0xf6, 0x62, 0x37, - 0xc2, 0x01, 0xab, 0x3b, 0x3a, 0x06, 0xc4, 0x9b, 0x47, 0xdb, 0x9c, 0xa2, 0xff, 0xb6, 0x02, 0x6d, - 0x03, 0x87, 0x38, 0x12, 0x46, 0xb9, 0x05, 0x5d, 0xe1, 0x21, 0x33, 0xb0, 0x5c, 0xc7, 0x9b, 0x88, - 0x33, 0xa3, 0x23, 0xa8, 0x06, 0x23, 0x6a, 0x37, 0xa0, 0x19, 0x46, 0x01, 0x76, 0x87, 0xd1, 0x88, - 0x17, 0x6c, 0x0f, 0xaa, 0x9b, 0x1f, 0x7c, 0x68, 0xa4, 0xc4, 0xd9, 0xd6, 0xa8, 0x9e, 0x63, 0x8d, - 0xb3, 0x07, 0x48, 0xad, 0xec, 0x00, 0xf9, 0x05, 0x46, 0x2b, 0xd8, 0xa3, 0x51, 0xb4, 0x07, 0x05, - 0x30, 0xab, 0x8a, 0x7a, 0x81, 0x17, 0x6a, 0x40, 0x49, 0xbc, 0x5c, 0xa0, 0x85, 0x01, 0xff, 0x12, - 0x41, 0x85, 0xa0, 0x2b, 0xf2, 0x5f, 0x92, 0x64, 0x6f, 0x03, 0x08, 0x0a, 0xcd, 0xb0, 0xb9, 0xa4, - 0xa8, 0xc8, 0x49, 0xf1, 0x4f, 0x15, 0xe8, 0x1a, 0xd8, 0xf6, 0x4e, 0x70, 0x30, 0x15, 0xd6, 0x5f, - 0x06, 0xf8, 0xc6, 0x0b, 0x1c, 0x2e, 0x9f, 0x38, 0xd1, 0x5b, 0x94, 0xc2, 0xc4, 0x9b, 0x6d, 0xd4, - 0xca, 0x1b, 0x19, 0xb5, 0xfa, 0x2a, 0xa3, 0xd6, 0x5e, 0x69, 0xd4, 0x39, 0xd9, 0xa8, 0x1b, 0x80, - 0xb0, 0x7b, 0xe4, 0x05, 0x36, 0x36, 0xa9, 0xac, 0x63, 0x12, 0x46, 0xcc, 0xea, 0x4d, 0x63, 0x5e, - 0xd0, 0xbf, 0x12, 0x64, 0x9a, 0x39, 0x59, 0xca, 0xe1, 0x81, 0xc8, 0xbe, 0x8b, 0x3e, 0x69, 0x9d, - 0xf1, 0xc9, 0x65, 0x68, 0x38, 0xc1, 0xd4, 0x0c, 0x62, 0x97, 0xd5, 0xbd, 0x4d, 0xa3, 0xee, 0x04, - 0x53, 0x23, 0x76, 0xf5, 0xf7, 0xa0, 0x4d, 0x39, 0x27, 0x27, 0xe9, 0x5a, 0xee, 0x24, 0x45, 0x7d, - 0x69, 0x4e, 0x3a, 0x44, 0x97, 0xa1, 0x41, 0x27, 0xa8, 0x6f, 0x34, 0xa8, 0x51, 0x81, 0x45, 0x8a, - 0x61, 0xdf, 0xfa, 0x8f, 0x0a, 0xb4, 0x07, 0x64, 0xe8, 0x3e, 0x13, 0x15, 0xd0, 0xb9, 0x49, 0x2d, - 0x57, 0x43, 0xb0, 0xcc, 0x93, 0x14, 0x4e, 0xb9, 0x14, 0x5f, 0x9d, 0x95, 0xe2, 0x0b, 0x89, 0xb8, - 0xf6, 0xc6, 0x89, 0xf8, 0xbf, 0x15, 0xe8, 0xbc, 0xc0, 0x01, 0x39, 0x9a, 0x26, 0xf2, 0xe6, 0x92, - 0xa1, 0x22, 0x65, 0x4e, 0xed, 0x1a, 0xb4, 0x42, 0x32, 0x74, 0xd9, 0x7d, 0x8c, 0x45, 0x8c, 0x6a, - 0x64, 0x04, 0x59, 0x95, 0x2a, 0x8f, 0xd3, 0x52, 0x55, 0x66, 0x9e, 0xa0, 0xff, 0x0e, 0x48, 0x88, - 0x30, 0x90, 0x79, 0xfe, 0x1c, 0x59, 0xf4, 0x1f, 0x14, 0xba, 0xa9, 0xec, 0x60, 0xea, 0x47, 0x89, - 0x5a, 0x97, 0xa0, 0xee, 0xc7, 0x87, 0xc7, 0x38, 0xd9, 0x45, 0x62, 0x54, 0xac, 0xe2, 0x24, 0xb1, - 0x6f, 0x82, 0x9a, 0x64, 0x32, 0xcf, 0x1d, 0xa7, 0xc7, 0xa7, 0xa0, 0x7d, 0xe1, 0x8e, 0x0b, 0x55, - 0x48, 0xed, 0xbc, 0x43, 0x7a, 0x6e, 0x96, 0xda, 0x2f, 0x00, 0x09, 0x49, 0xb1, 0x93, 0xc8, 0x7a, - 0x11, 0xe6, 0x5c, 0xcf, 0xb5, 0xb1, 0x10, 0x95, 0x0f, 0xce, 0x91, 0x54, 0x83, 0xda, 0x68, 0x62, - 0xd9, 0xc2, 0xee, 0xec, 0x5b, 0xff, 0x1a, 0xba, 0x3b, 0x38, 0x67, 0x81, 0x73, 0x03, 0x31, 0x5d, - 0xb2, 0x32, 0x63, 0xc9, 0x6a, 0xf9, 0x92, 0x35, 0x69, 0xc9, 0x3d, 0x40, 0x62, 0xc9, 0x4c, 0x95, - 0x42, 0xad, 0x2d, 0x71, 0x90, 0x7c, 0x5b, 0xc9, 0xf9, 0x56, 0xff, 0xb3, 0x02, 0xdd, 0x6d, 0xe2, - 0x8f, 0x70, 0xf0, 0x39, 0x9e, 0xbe, 0xb0, 0xc6, 0xf1, 0x2b, 0x64, 0x47, 0x50, 0xa5, 0x7e, 0xe5, - 0x5c, 0xe8, 0x27, 0xd5, 0xe6, 0x84, 0xfe, 0x4e, 0x48, 0xcd, 0x07, 0x3c, 0x93, 0x32, 0xf9, 0xc4, - 0xb1, 0x90, 0x0c, 0xb5, 0x35, 0xe8, 0x5a, 0xe1, 0xb1, 0xe9, 0xb9, 0x66, 0x02, 0xe0, 0x77, 0x7a, - 0xd5, 0x0a, 0x8f, 0xbf, 0x70, 0x77, 0xcf, 0xa0, 0x1c, 0xae, 0xa6, 0x48, 0x52, 0x1c, 0x25, 0x54, - 0xd7, 0xba, 0x50, 0x21, 0x27, 0xec, 0x60, 0x50, 0x8d, 0x0a, 0x39, 0xd1, 0xd7, 0x01, 0x71, 0x65, - 0xb0, 0x93, 0xaa, 0x93, 0xca, 0xa7, 0x48, 0xf2, 0xe9, 0xff, 0x05, 0xdd, 0xdd, 0x30, 0x22, 0x13, - 0x2b, 0xc2, 0x07, 0xa7, 0x03, 0xf2, 0x12, 0xd3, 0x23, 0xda, 0x8b, 0x23, 0x3f, 0x8e, 0xc2, 0x34, - 0xa3, 0xd3, 0xc2, 0x59, 0x15, 0x44, 0x9e, 0xd4, 0x6f, 0x82, 0x4a, 0x5c, 0x09, 0x53, 0x61, 0x98, - 0x36, 0xa7, 0x71, 0xc8, 0x6b, 0x25, 0x13, 0xfd, 0x26, 0xd4, 0xc5, 0xba, 0x97, 0xa1, 0x11, 0x9d, - 0x9a, 0xa2, 0x54, 0xa7, 0xd9, 0xb4, 0x1e, 0xb1, 0x09, 0xfd, 0xf7, 0x0a, 0xd4, 0xe9, 0xf6, 0x3c, - 0x38, 0xfd, 0xc7, 0xca, 0xa6, 0x5d, 0x85, 0x46, 0xae, 0x2b, 0xf3, 0x40, 0x79, 0xd7, 0x48, 0x28, - 0xda, 0x75, 0x68, 0x8d, 0x3d, 0xfb, 0xd8, 0x8c, 0x88, 0xd8, 0x69, 0x9d, 0x07, 0xca, 0x3b, 0x46, - 0x93, 0xd2, 0x0e, 0xc8, 0x04, 0xeb, 0x7f, 0x53, 0x40, 0x1d, 0x90, 0x89, 0x3f, 0xc6, 0x42, 0xf6, - 0x35, 0xa8, 0x73, 0x11, 0x58, 0x2c, 0xb5, 0x37, 0xd5, 0xfe, 0xc1, 0x29, 0xcb, 0x99, 0x2c, 0xcd, - 0x8b, 0x39, 0xed, 0x0e, 0x34, 0x84, 0x32, 0xbd, 0x0a, 0x83, 0x75, 0xfa, 0x07, 0xa7, 0x5f, 0x30, - 0x0a, 0xc3, 0x25, 0xb3, 0xda, 0xfb, 0xa0, 0x46, 0x81, 0xe5, 0x86, 0x16, 0x3b, 0x09, 0xc3, 0x5e, - 0x95, 0xa1, 0x51, 0xff, 0x20, 0x23, 0xb2, 0x1f, 0xe4, 0x50, 0xaf, 0x97, 0x16, 0x65, 0xc5, 0xe7, - 0xce, 0x57, 0xbc, 0x7e, 0x56, 0xf1, 0x5f, 0x2b, 0xd0, 0x3a, 0x48, 0x2f, 0x8a, 0xf7, 0x41, 0x0d, - 0xf8, 0xa7, 0x29, 0x1d, 0x73, 0x6a, 0x5f, 0x3e, 0xe2, 0xda, 0x41, 0x36, 0xd0, 0xee, 0x43, 0xc3, - 0xc1, 0x91, 0x45, 0xc6, 0xa1, 0xa8, 0x63, 0x17, 0xfb, 0x29, 0xb7, 0x1d, 0x3e, 0xc1, 0x0d, 0x21, - 0x50, 0xda, 0x47, 0x00, 0x21, 0x0e, 0x92, 0x36, 0x51, 0x95, 0xfd, 0xa6, 0x97, 0xfd, 0x66, 0x90, - 0xce, 0xb1, 0x9f, 0x49, 0x58, 0x7d, 0x03, 0xe6, 0x0e, 0xd8, 0x95, 0x74, 0x05, 0x2a, 0xd1, 0x29, - 0x13, 0xad, 0xcc, 0x82, 0x95, 0xe8, 0x54, 0xff, 0xdf, 0x0a, 0x74, 0x93, 0x0a, 0x5e, 0xf8, 0xf3, - 0x67, 0xa4, 0xb6, 0xab, 0xd0, 0x1a, 0x5a, 0xa1, 0xe9, 0x07, 0xc4, 0x4e, 0xd2, 0x44, 0x73, 0x68, - 0x85, 0xfb, 0x74, 0x9c, 0x4c, 0x8e, 0xc9, 0x84, 0x44, 0x22, 0xc5, 0xd1, 0xc9, 0xa7, 0x74, 0x4c, - 0x37, 0x78, 0xe4, 0x31, 0x67, 0xa8, 0x46, 0x25, 0xf2, 0xb2, 0xcd, 0x5c, 0x97, 0x93, 0xcd, 0x5b, - 0xa0, 0xd1, 0xeb, 0xbb, 0x29, 0x9a, 0x64, 0xa6, 0x3d, 0x8a, 0xdd, 0x63, 0x91, 0x16, 0x10, 0x9d, - 0x11, 0x6d, 0xcf, 0x6d, 0x4a, 0xa7, 0x25, 0x0c, 0x43, 0x8f, 0x79, 0x45, 0x2c, 0xca, 0x6c, 0x4a, - 0x7a, 0xca, 0xcb, 0xe1, 0x2b, 0xd0, 0xb4, 0x47, 0x16, 0x71, 0x4d, 0xe2, 0x88, 0x02, 0xa7, 0xc1, - 0xc6, 0x4f, 0x1c, 0xfd, 0xff, 0x15, 0x58, 0x48, 0xec, 0x91, 0x39, 0xbb, 0xc0, 0x51, 0x39, 0xc3, - 0x91, 0x16, 0xaa, 0xc9, 0x81, 0x69, 0x9e, 0x88, 0xae, 0x29, 0xa4, 0xa4, 0x17, 0x79, 0x40, 0x20, - 0x6c, 0x94, 0x01, 0x8c, 0x3c, 0x20, 0x4c, 0x1a, 0x4d, 0x29, 0x69, 0xa0, 0xf7, 0xa1, 0x93, 0x09, - 0x46, 0x9d, 0xbb, 0x0c, 0x4c, 0x02, 0x61, 0x0c, 0x9e, 0xfc, 0x5a, 0x94, 0xc2, 0xac, 0xa0, 0x3f, - 0x85, 0x0b, 0xb2, 0x63, 0x7f, 0x59, 0x05, 0xa5, 0x13, 0x58, 0x4c, 0xb8, 0x9d, 0x5b, 0xe1, 0xa8, - 0xbf, 0xb8, 0xc2, 0xd1, 0x0d, 0xe8, 0x25, 0x4b, 0xbd, 0xaa, 0x86, 0x79, 0xdd, 0xd5, 0xf4, 0x9f, - 0x58, 0xd2, 0x1a, 0xba, 0x4f, 0x1c, 0xec, 0x46, 0x24, 0x9a, 0x6a, 0x1b, 0xd0, 0x24, 0xe2, 0x5b, - 0xec, 0x8f, 0x4e, 0x3f, 0x99, 0xe4, 0xf7, 0x73, 0x92, 0x41, 0x91, 0x3d, 0xb2, 0xc6, 0xd4, 0xf7, - 0xd8, 0x1c, 0x11, 0xc7, 0xc1, 0xae, 0x58, 0x60, 0x3e, 0xa5, 0x3f, 0x66, 0xe4, 0x3c, 0xf4, 0x84, - 0x84, 0xb1, 0x35, 0x16, 0x97, 0xd2, 0x0c, 0xfa, 0x82, 0x91, 0x4b, 0xdb, 0x2a, 0xb5, 0xb2, 0xb6, - 0x8a, 0x3e, 0x84, 0x2e, 0x15, 0x1d, 0x3b, 0xa9, 0xf0, 0xb3, 0x2b, 0xb9, 0x65, 0x00, 0x9f, 0x75, - 0x4e, 0xcc, 0xe4, 0x10, 0x57, 0x8d, 0x96, 0x9f, 0xf6, 0x52, 0x72, 0x46, 0xaa, 0x16, 0x8d, 0xf4, - 0xad, 0x02, 0x0b, 0x8f, 0x70, 0xb4, 0xbb, 0xbd, 0xf3, 0x58, 0x34, 0x5a, 0xe9, 0x6f, 0xde, 0xc0, - 0x52, 0xb7, 0x61, 0xde, 0xc7, 0x38, 0x30, 0xcf, 0x88, 0xd0, 0xa1, 0xe4, 0xac, 0xa5, 0x53, 0xa6, - 0x7b, 0xb5, 0x54, 0xf7, 0x77, 0xa1, 0x5b, 0x10, 0x87, 0xee, 0x13, 0x3e, 0x32, 0xb3, 0xfa, 0x13, - 0xc2, 0x14, 0xa0, 0xbf, 0x03, 0x9d, 0x01, 0x8e, 0xbe, 0xdc, 0xdc, 0x93, 0x2e, 0x91, 0xf2, 0x8d, - 0x46, 0x39, 0x73, 0xeb, 0xbe, 0x03, 0x9d, 0x3d, 0xd1, 0xa9, 0xde, 0x65, 0x3d, 0xdf, 0x4b, 0x50, - 0xcf, 0xed, 0x74, 0x31, 0xd2, 0xb7, 0x60, 0x3e, 0x01, 0x26, 0x99, 0xe1, 0x12, 0xd4, 0xbd, 0xa3, - 0xa3, 0x10, 0x27, 0xf7, 0x43, 0x31, 0x92, 0x58, 0x54, 0x72, 0x2c, 0x3e, 0x81, 0x6e, 0xc2, 0xe2, - 0x4b, 0x7f, 0xec, 0x59, 0x0e, 0x75, 0xa6, 0x6f, 0x4d, 0xe9, 0x67, 0xd2, 0x2f, 0x11, 0x43, 0x56, - 0x16, 0x5a, 0xe1, 0x48, 0xd8, 0x90, 0x7d, 0xeb, 0x6b, 0xd0, 0x1c, 0xe0, 0xf1, 0xd1, 0x01, 0x5d, - 0x3b, 0xf7, 0x4b, 0x45, 0xfa, 0xa5, 0x7e, 0x17, 0x16, 0x76, 0xf0, 0x61, 0x3c, 0x7c, 0x4a, 0xdc, - 0xe3, 0x1d, 0x6c, 0xf3, 0x97, 0x83, 0x45, 0xa8, 0x4f, 0x71, 0x68, 0xba, 0x1e, 0x5b, 0xa7, 0x69, - 0xcc, 0x4d, 0x71, 0xf8, 0xdc, 0xd3, 0x2f, 0x48, 0xd8, 0x47, 0x38, 0x1a, 0x44, 0x56, 0x84, 0xf5, - 0xbf, 0x54, 0x68, 0xc5, 0x2b, 0xa8, 0x8c, 0xc4, 0x34, 0xb2, 0xa6, 0x5e, 0x1c, 0x25, 0x35, 0x3f, - 0x1f, 0x25, 0xbd, 0x97, 0x4a, 0xd6, 0x7b, 0xb9, 0x04, 0xf5, 0x09, 0xeb, 0x8a, 0x0a, 0xa7, 0x8a, - 0x51, 0xae, 0xc5, 0x53, 0x9b, 0xd1, 0xe2, 0x99, 0x9b, 0xd5, 0xe2, 0x99, 0x79, 0xdb, 0xae, 0x9f, - 0x73, 0xdb, 0x5e, 0x06, 0x08, 0x70, 0x88, 0x23, 0x76, 0x13, 0x66, 0xe7, 0x45, 0xcb, 0x68, 0x31, - 0x0a, 0xbd, 0x74, 0xd2, 0xaa, 0x8b, 0x4f, 0x27, 0x3d, 0x81, 0x26, 0xd3, 0x4c, 0x65, 0xc4, 0xa4, - 0x8f, 0xfa, 0x16, 0x68, 0x81, 0xe8, 0x0b, 0x98, 0x47, 0xd6, 0x31, 0xbf, 0x55, 0x8b, 0xb7, 0x20, - 0x94, 0xcc, 0xec, 0x59, 0xc7, 0xec, 0x5a, 0xad, 0xdd, 0x85, 0x85, 0x14, 0xcd, 0x9a, 0x07, 0xbe, - 0x17, 0xb2, 0x7b, 0x72, 0xc7, 0x98, 0x4f, 0x26, 0x28, 0x70, 0xdf, 0x0b, 0xf5, 0x79, 0xe8, 0x48, - 0x36, 0xf6, 0x7c, 0x7d, 0x1f, 0xd4, 0x94, 0xf0, 0xd4, 0x1b, 0xb2, 0x0b, 0x3e, 0x3e, 0xc1, 0xe3, - 0xe4, 0x35, 0x81, 0x0d, 0xa8, 0x79, 0x0f, 0x63, 0xfb, 0x18, 0x47, 0xc2, 0xe6, 0x62, 0xc4, 0x6e, - 0xf3, 0xf8, 0x34, 0x12, 0x46, 0x67, 0xdf, 0xfa, 0x23, 0xb8, 0x90, 0x72, 0x7c, 0x86, 0x27, 0x5e, - 0x30, 0x35, 0x30, 0x8f, 0x39, 0x39, 0x81, 0x74, 0xb2, 0x04, 0x32, 0x2b, 0x6e, 0x37, 0x60, 0xbe, - 0xc0, 0x88, 0xb9, 0x99, 0x7d, 0x25, 0x01, 0xc1, 0x47, 0xfa, 0x7f, 0xc0, 0xc5, 0x02, 0xf4, 0xab, - 0x80, 0x44, 0xf8, 0xfc, 0x45, 0x05, 0xa7, 0x8a, 0xcc, 0x49, 0xbc, 0xa6, 0x84, 0x23, 0x71, 0x5b, - 0xe4, 0x03, 0xfd, 0x6d, 0x49, 0xa7, 0x3d, 0x4a, 0x49, 0x37, 0x6d, 0x88, 0xed, 0xc8, 0x4b, 0x76, - 0xb8, 0x18, 0xdd, 0xfd, 0x71, 0x11, 0xda, 0xe2, 0x1c, 0x61, 0x75, 0xd8, 0x0a, 0x5c, 0x92, 0x86, - 0x66, 0xf6, 0x60, 0x8a, 0xfe, 0x69, 0xa9, 0xf6, 0xed, 0x1f, 0x7a, 0x8a, 0xb6, 0x94, 0x5e, 0x9e, - 0x19, 0x62, 0x9f, 0xb8, 0x43, 0xa4, 0x88, 0xb9, 0x65, 0xb8, 0x20, 0xcf, 0x89, 0x57, 0x10, 0x54, - 0x59, 0xaa, 0x7d, 0x57, 0x32, 0x2d, 0xde, 0x39, 0x50, 0x55, 0x4c, 0xdf, 0x80, 0x45, 0x79, 0x3a, - 0x7d, 0x14, 0x42, 0x35, 0xc1, 0xbe, 0x20, 0x5c, 0xd6, 0x2e, 0x45, 0x73, 0x02, 0x71, 0x07, 0xae, - 0xe4, 0x56, 0x90, 0x13, 0x17, 0xaa, 0x2f, 0x35, 0x29, 0xe8, 0x8f, 0x14, 0xb8, 0x0e, 0x4b, 0x65, - 0x40, 0x9e, 0x75, 0x50, 0x43, 0x42, 0x6e, 0xc0, 0xd5, 0x32, 0xa4, 0x48, 0x71, 0xa8, 0xb9, 0xd4, - 0xfc, 0x2e, 0x81, 0x16, 0xe4, 0xcb, 0x5e, 0x23, 0x50, 0xab, 0xdc, 0x40, 0xc9, 0x34, 0x08, 0x0b, - 0xe8, 0xd0, 0x2b, 0x30, 0x48, 0x8f, 0x05, 0xd4, 0x16, 0x2c, 0x0a, 0x56, 0xca, 0x00, 0xaa, 0x60, - 0x52, 0x90, 0x22, 0xeb, 0x22, 0xa3, 0x8e, 0x60, 0x71, 0x13, 0x2e, 0xcb, 0x08, 0xa9, 0xa7, 0x8a, - 0xba, 0x02, 0x72, 0x0d, 0xb4, 0x9c, 0x27, 0x59, 0xf1, 0x8b, 0xe6, 0xc5, 0xec, 0x5a, 0x5e, 0x4e, - 0xf9, 0xc2, 0x83, 0xd0, 0x52, 0x9d, 0x62, 0x9a, 0x8a, 0x76, 0x1d, 0x2e, 0xe6, 0x2c, 0x27, 0x9e, - 0xd7, 0xd1, 0x82, 0x10, 0xf4, 0x36, 0x5c, 0x2b, 0x44, 0x52, 0xee, 0x31, 0x09, 0x69, 0x29, 0xae, - 0x57, 0x8a, 0xdb, 0xb2, 0x8f, 0xd1, 0x05, 0xee, 0xa9, 0xdf, 0x95, 0xc8, 0xcc, 0x1f, 0x97, 0xd0, - 0xc5, 0x72, 0xbb, 0xa5, 0xe5, 0x2b, 0x5a, 0x14, 0xcb, 0x5c, 0x85, 0x85, 0x3c, 0x80, 0xf2, 0xbf, - 0x94, 0x6a, 0x9c, 0x8b, 0x97, 0x7c, 0xcf, 0x00, 0x5d, 0x16, 0xa8, 0x82, 0xff, 0xe4, 0x57, 0x59, - 0xd4, 0x13, 0x98, 0xd5, 0x7c, 0x88, 0xe6, 0x1e, 0x6a, 0xd1, 0x95, 0x72, 0x50, 0xee, 0x11, 0x0f, - 0x2d, 0x09, 0x81, 0x57, 0xf3, 0x1a, 0xa5, 0x4f, 0x77, 0xe8, 0xaa, 0x64, 0x94, 0x42, 0x34, 0x64, - 0xaf, 0xb1, 0xe8, 0x5a, 0xf9, 0xae, 0xca, 0x1e, 0x49, 0xd0, 0x72, 0x79, 0xd4, 0x26, 0xd3, 0xd7, - 0xd3, 0xa8, 0xcd, 0xf9, 0x39, 0x39, 0x81, 0xd1, 0x8a, 0xb4, 0x8b, 0x0a, 0x96, 0x91, 0xdb, 0xd2, - 0x48, 0x2f, 0xb7, 0x71, 0xbe, 0x55, 0x8d, 0x56, 0xcb, 0xc3, 0x3b, 0x6b, 0x5f, 0xa3, 0xb5, 0xf2, - 0xf0, 0x96, 0xea, 0x7b, 0x74, 0xbb, 0xdc, 0xbe, 0xb9, 0xa2, 0x1d, 0xdd, 0x11, 0xa0, 0x42, 0x7c, - 0x16, 0xcb, 0x6d, 0xb4, 0x2e, 0x24, 0xba, 0x03, 0xcb, 0xb9, 0xf8, 0x2c, 0x3e, 0x65, 0xa2, 0x8d, - 0x14, 0x78, 0xa5, 0x1c, 0x48, 0xa5, 0xbf, 0x2b, 0x39, 0xed, 0x76, 0xc1, 0x12, 0xb9, 0x56, 0x0d, - 0xba, 0x27, 0xed, 0x30, 0x2d, 0x1f, 0xb2, 0x6c, 0xfe, 0xad, 0xa5, 0xfa, 0x77, 0x7c, 0xbe, 0x60, - 0xd1, 0x7c, 0x07, 0x1f, 0xbd, 0x5d, 0x6e, 0x2f, 0xa9, 0x15, 0x8d, 0xfa, 0xe5, 0x99, 0x5b, 0x34, - 0xa5, 0xd1, 0xfd, 0x72, 0x4b, 0x15, 0x9b, 0x50, 0xe8, 0x9d, 0x74, 0x27, 0x17, 0x3c, 0x2c, 0x77, - 0x0d, 0xd1, 0xbb, 0xa9, 0x5e, 0xeb, 0x79, 0x7e, 0xc5, 0xae, 0x25, 0xda, 0x4c, 0x35, 0x2c, 0x70, - 0xcc, 0xf7, 0x21, 0xd1, 0x7b, 0xb3, 0x38, 0x16, 0x9b, 0x87, 0xe8, 0xfd, 0x94, 0xa3, 0x5e, 0xcc, - 0x6d, 0xd9, 0xbd, 0x08, 0x7d, 0x50, 0x1e, 0xa9, 0xf9, 0x0b, 0x08, 0xfa, 0x50, 0x68, 0x5b, 0xb0, - 0xab, 0xf4, 0xef, 0x46, 0xe8, 0x9f, 0x05, 0xa3, 0x75, 0xb8, 0x9e, 0x53, 0xf4, 0xcc, 0x43, 0x25, - 0xfa, 0x48, 0x20, 0x6f, 0xe5, 0x8f, 0xa1, 0xc2, 0xbb, 0x22, 0xfa, 0x17, 0xb1, 0x66, 0x71, 0x0f, - 0xe5, 0x9a, 0x17, 0xe8, 0x41, 0x7a, 0x4c, 0x2e, 0x97, 0xa1, 0xb2, 0x9c, 0xf8, 0xaf, 0x69, 0x8a, - 0xb9, 0x52, 0x0e, 0xa4, 0xde, 0xff, 0xb7, 0x72, 0x6e, 0x67, 0x2e, 0x49, 0xe8, 0xe3, 0x19, 0x1b, - 0x3c, 0x8f, 0xfa, 0xa4, 0x7c, 0xcd, 0xdc, 0x75, 0x05, 0x7d, 0x2a, 0x58, 0x6d, 0xc0, 0x8d, 0x59, - 0x7a, 0x26, 0x2e, 0xfd, 0x4c, 0x40, 0xef, 0xc1, 0xcd, 0x32, 0x68, 0x7e, 0xcf, 0x6f, 0x09, 0x70, - 0x1f, 0xd6, 0xca, 0xc0, 0x67, 0xf6, 0xfe, 0x43, 0x21, 0xec, 0xbd, 0xbc, 0xee, 0x67, 0xee, 0x15, - 0xc8, 0x59, 0x6a, 0x7e, 0x9f, 0x6c, 0xeb, 0x3b, 0x33, 0xc0, 0xc9, 0xc5, 0x02, 0xe1, 0xa5, 0xda, - 0xf7, 0x25, 0x86, 0xca, 0xdf, 0x35, 0xd0, 0xd1, 0x52, 0xed, 0x87, 0x12, 0x43, 0xe5, 0xaa, 0x65, - 0x34, 0x14, 0xac, 0x0a, 0xe1, 0x2c, 0x57, 0xd0, 0x68, 0x24, 0x18, 0x15, 0x8c, 0x59, 0x52, 0x13, - 0x23, 0x57, 0xb0, 0x2b, 0x84, 0x61, 0x01, 0x8a, 0x3c, 0xc1, 0xf1, 0x2e, 0xac, 0x9c, 0x03, 0x63, - 0x15, 0x2f, 0xf2, 0x05, 0xcb, 0x59, 0xab, 0x67, 0xd5, 0x2b, 0xfa, 0x9a, 0x43, 0x1f, 0xbe, 0x0f, - 0xab, 0xb6, 0x37, 0xe9, 0x87, 0x56, 0xe4, 0x85, 0x23, 0x32, 0xb6, 0x0e, 0xc3, 0x7e, 0x14, 0xe0, - 0x97, 0x5e, 0xd0, 0x1f, 0x93, 0x43, 0xfe, 0x6f, 0x7e, 0x87, 0xf1, 0xd1, 0xc3, 0xce, 0x01, 0x23, - 0x0a, 0xae, 0x7f, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x2a, 0xe4, 0xc0, 0x85, 0x16, 0x28, 0x00, 0x00, -} diff --git a/accounts/usbwallet/internal/trezor/messages.proto b/accounts/usbwallet/internal/trezor/messages.proto deleted file mode 100644 index 8cb9c8cc25ca..000000000000 --- a/accounts/usbwallet/internal/trezor/messages.proto +++ /dev/null @@ -1,905 +0,0 @@ -// This file originates from the SatoshiLabs Trezor `common` repository at: -// https://github.com/trezor/trezor-common/blob/master/protob/messages.proto -// dated 28.07.2017, commit dd8ec3231fb5f7992360aff9bdfe30bb58130f4b. - -syntax = "proto2"; - -/** - * Messages for TREZOR communication - */ - -// Sugar for easier handling in Java -option java_package = "com.satoshilabs.trezor.lib.protobuf"; -option java_outer_classname = "TrezorMessage"; - -import "types.proto"; - -/** - * Mapping between Trezor wire identifier (uint) and a protobuf message - */ -enum MessageType { - MessageType_Initialize = 0 [(wire_in) = true]; - MessageType_Ping = 1 [(wire_in) = true]; - MessageType_Success = 2 [(wire_out) = true]; - MessageType_Failure = 3 [(wire_out) = true]; - MessageType_ChangePin = 4 [(wire_in) = true]; - MessageType_WipeDevice = 5 [(wire_in) = true]; - MessageType_FirmwareErase = 6 [(wire_in) = true, (wire_bootloader) = true]; - MessageType_FirmwareUpload = 7 [(wire_in) = true, (wire_bootloader) = true]; - MessageType_FirmwareRequest = 8 [(wire_out) = true, (wire_bootloader) = true]; - MessageType_GetEntropy = 9 [(wire_in) = true]; - MessageType_Entropy = 10 [(wire_out) = true]; - MessageType_GetPublicKey = 11 [(wire_in) = true]; - MessageType_PublicKey = 12 [(wire_out) = true]; - MessageType_LoadDevice = 13 [(wire_in) = true]; - MessageType_ResetDevice = 14 [(wire_in) = true]; - MessageType_SignTx = 15 [(wire_in) = true]; - MessageType_SimpleSignTx = 16 [(wire_in) = true, deprecated = true]; - MessageType_Features = 17 [(wire_out) = true]; - MessageType_PinMatrixRequest = 18 [(wire_out) = true]; - MessageType_PinMatrixAck = 19 [(wire_in) = true, (wire_tiny) = true]; - MessageType_Cancel = 20 [(wire_in) = true]; - MessageType_TxRequest = 21 [(wire_out) = true]; - MessageType_TxAck = 22 [(wire_in) = true]; - MessageType_CipherKeyValue = 23 [(wire_in) = true]; - MessageType_ClearSession = 24 [(wire_in) = true]; - MessageType_ApplySettings = 25 [(wire_in) = true]; - MessageType_ButtonRequest = 26 [(wire_out) = true]; - MessageType_ButtonAck = 27 [(wire_in) = true, (wire_tiny) = true]; - MessageType_ApplyFlags = 28 [(wire_in) = true]; - MessageType_GetAddress = 29 [(wire_in) = true]; - MessageType_Address = 30 [(wire_out) = true]; - MessageType_SelfTest = 32 [(wire_in) = true, (wire_bootloader) = true]; - MessageType_BackupDevice = 34 [(wire_in) = true]; - MessageType_EntropyRequest = 35 [(wire_out) = true]; - MessageType_EntropyAck = 36 [(wire_in) = true]; - MessageType_SignMessage = 38 [(wire_in) = true]; - MessageType_VerifyMessage = 39 [(wire_in) = true]; - MessageType_MessageSignature = 40 [(wire_out) = true]; - MessageType_PassphraseRequest = 41 [(wire_out) = true]; - MessageType_PassphraseAck = 42 [(wire_in) = true, (wire_tiny) = true]; - MessageType_EstimateTxSize = 43 [(wire_in) = true, deprecated = true]; - MessageType_TxSize = 44 [(wire_out) = true, deprecated = true]; - MessageType_RecoveryDevice = 45 [(wire_in) = true]; - MessageType_WordRequest = 46 [(wire_out) = true]; - MessageType_WordAck = 47 [(wire_in) = true]; - MessageType_CipheredKeyValue = 48 [(wire_out) = true]; - MessageType_EncryptMessage = 49 [(wire_in) = true, deprecated = true]; - MessageType_EncryptedMessage = 50 [(wire_out) = true, deprecated = true]; - MessageType_DecryptMessage = 51 [(wire_in) = true, deprecated = true]; - MessageType_DecryptedMessage = 52 [(wire_out) = true, deprecated = true]; - MessageType_SignIdentity = 53 [(wire_in) = true]; - MessageType_SignedIdentity = 54 [(wire_out) = true]; - MessageType_GetFeatures = 55 [(wire_in) = true]; - MessageType_EthereumGetAddress = 56 [(wire_in) = true]; - MessageType_EthereumAddress = 57 [(wire_out) = true]; - MessageType_EthereumSignTx = 58 [(wire_in) = true]; - MessageType_EthereumTxRequest = 59 [(wire_out) = true]; - MessageType_EthereumTxAck = 60 [(wire_in) = true]; - MessageType_GetECDHSessionKey = 61 [(wire_in) = true]; - MessageType_ECDHSessionKey = 62 [(wire_out) = true]; - MessageType_SetU2FCounter = 63 [(wire_in) = true]; - MessageType_EthereumSignMessage = 64 [(wire_in) = true]; - MessageType_EthereumVerifyMessage = 65 [(wire_in) = true]; - MessageType_EthereumMessageSignature = 66 [(wire_out) = true]; - MessageType_DebugLinkDecision = 100 [(wire_debug_in) = true, (wire_tiny) = true]; - MessageType_DebugLinkGetState = 101 [(wire_debug_in) = true]; - MessageType_DebugLinkState = 102 [(wire_debug_out) = true]; - MessageType_DebugLinkStop = 103 [(wire_debug_in) = true]; - MessageType_DebugLinkLog = 104 [(wire_debug_out) = true]; - MessageType_DebugLinkMemoryRead = 110 [(wire_debug_in) = true]; - MessageType_DebugLinkMemory = 111 [(wire_debug_out) = true]; - MessageType_DebugLinkMemoryWrite = 112 [(wire_debug_in) = true]; - MessageType_DebugLinkFlashErase = 113 [(wire_debug_in) = true]; -} - -//////////////////// -// Basic messages // -//////////////////// - -/** - * Request: Reset device to default state and ask for device details - * @next Features - */ -message Initialize { -} - -/** - * Request: Ask for device details (no device reset) - * @next Features - */ -message GetFeatures { -} - -/** - * Response: Reports various information about the device - * @prev Initialize - * @prev GetFeatures - */ -message Features { - optional string vendor = 1; // name of the manufacturer, e.g. "bitcointrezor.com" - optional uint32 major_version = 2; // major version of the device, e.g. 1 - optional uint32 minor_version = 3; // minor version of the device, e.g. 0 - optional uint32 patch_version = 4; // patch version of the device, e.g. 0 - optional bool bootloader_mode = 5; // is device in bootloader mode? - optional string device_id = 6; // device's unique identifier - optional bool pin_protection = 7; // is device protected by PIN? - optional bool passphrase_protection = 8; // is node/mnemonic encrypted using passphrase? - optional string language = 9; // device language - optional string label = 10; // device description label - repeated CoinType coins = 11; // supported coins - optional bool initialized = 12; // does device contain seed? - optional bytes revision = 13; // SCM revision of firmware - optional bytes bootloader_hash = 14; // hash of the bootloader - optional bool imported = 15; // was storage imported from an external source? - optional bool pin_cached = 16; // is PIN already cached in session? - optional bool passphrase_cached = 17; // is passphrase already cached in session? - optional bool firmware_present = 18; // is valid firmware loaded? - optional bool needs_backup = 19; // does storage need backup? (equals to Storage.needs_backup) - optional uint32 flags = 20; // device flags (equals to Storage.flags) -} - -/** - * Request: clear session (removes cached PIN, passphrase, etc). - * @next Success - */ -message ClearSession { -} - -/** - * Request: change language and/or label of the device - * @next Success - * @next Failure - * @next ButtonRequest - * @next PinMatrixRequest - */ -message ApplySettings { - optional string language = 1; - optional string label = 2; - optional bool use_passphrase = 3; - optional bytes homescreen = 4; -} - -/** - * Request: set flags of the device - * @next Success - * @next Failure - */ -message ApplyFlags { - optional uint32 flags = 1; // bitmask, can only set bits, not unset -} - -/** - * Request: Starts workflow for setting/changing/removing the PIN - * @next ButtonRequest - * @next PinMatrixRequest - */ -message ChangePin { - optional bool remove = 1; // is PIN removal requested? -} - -/** - * Request: Test if the device is alive, device sends back the message in Success response - * @next Success - */ -message Ping { - optional string message = 1; // message to send back in Success message - optional bool button_protection = 2; // ask for button press - optional bool pin_protection = 3; // ask for PIN if set in device - optional bool passphrase_protection = 4; // ask for passphrase if set in device -} - -/** - * Response: Success of the previous request - */ -message Success { - optional string message = 1; // human readable description of action or request-specific payload -} - -/** - * Response: Failure of the previous request - */ -message Failure { - optional FailureType code = 1; // computer-readable definition of the error state - optional string message = 2; // human-readable message of the error state -} - -/** - * Response: Device is waiting for HW button press. - * @next ButtonAck - * @next Cancel - */ -message ButtonRequest { - optional ButtonRequestType code = 1; - optional string data = 2; -} - -/** - * Request: Computer agrees to wait for HW button press - * @prev ButtonRequest - */ -message ButtonAck { -} - -/** - * Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme - * @next PinMatrixAck - * @next Cancel - */ -message PinMatrixRequest { - optional PinMatrixRequestType type = 1; -} - -/** - * Request: Computer responds with encoded PIN - * @prev PinMatrixRequest - */ -message PinMatrixAck { - required string pin = 1; // matrix encoded PIN entered by user -} - -/** - * Request: Abort last operation that required user interaction - * @prev ButtonRequest - * @prev PinMatrixRequest - * @prev PassphraseRequest - */ -message Cancel { -} - -/** - * Response: Device awaits encryption passphrase - * @next PassphraseAck - * @next Cancel - */ -message PassphraseRequest { -} - -/** - * Request: Send passphrase back - * @prev PassphraseRequest - */ -message PassphraseAck { - required string passphrase = 1; -} - -/** - * Request: Request a sample of random data generated by hardware RNG. May be used for testing. - * @next ButtonRequest - * @next Entropy - * @next Failure - */ -message GetEntropy { - required uint32 size = 1; // size of requested entropy -} - -/** - * Response: Reply with random data generated by internal RNG - * @prev GetEntropy - */ -message Entropy { - required bytes entropy = 1; // stream of random generated bytes -} - -/** - * Request: Ask device for public key corresponding to address_n path - * @next PassphraseRequest - * @next PublicKey - * @next Failure - */ -message GetPublicKey { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - optional string ecdsa_curve_name = 2; // ECDSA curve name to use - optional bool show_display = 3; // optionally show on display before sending the result - optional string coin_name = 4 [default='Bitcoin']; -} - -/** - * Response: Contains public key derived from device private seed - * @prev GetPublicKey - */ -message PublicKey { - required HDNodeType node = 1; // BIP32 public node - optional string xpub = 2; // serialized form of public node -} - -/** - * Request: Ask device for address corresponding to address_n path - * @next PassphraseRequest - * @next Address - * @next Failure - */ -message GetAddress { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - optional string coin_name = 2 [default='Bitcoin']; - optional bool show_display = 3 ; // optionally show on display before sending the result - optional MultisigRedeemScriptType multisig = 4; // filled if we are showing a multisig address - optional InputScriptType script_type = 5 [default=SPENDADDRESS]; // used to distinguish between various address formats (non-segwit, segwit, etc.) -} - -/** - * Request: Ask device for Ethereum address corresponding to address_n path - * @next PassphraseRequest - * @next EthereumAddress - * @next Failure - */ -message EthereumGetAddress { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - optional bool show_display = 2; // optionally show on display before sending the result -} - -/** - * Response: Contains address derived from device private seed - * @prev GetAddress - */ -message Address { - required string address = 1; // Coin address in Base58 encoding -} - -/** - * Response: Contains an Ethereum address derived from device private seed - * @prev EthereumGetAddress - */ -message EthereumAddress { - required bytes address = 1; // Coin address as an Ethereum 160 bit hash -} - -/** - * Request: Request device to wipe all sensitive data and settings - * @next ButtonRequest - */ -message WipeDevice { -} - -/** - * Request: Load seed and related internal settings from the computer - * @next ButtonRequest - * @next Success - * @next Failure - */ -message LoadDevice { - optional string mnemonic = 1; // seed encoded as BIP-39 mnemonic (12, 18 or 24 words) - optional HDNodeType node = 2; // BIP-32 node - optional string pin = 3; // set PIN protection - optional bool passphrase_protection = 4; // enable master node encryption using passphrase - optional string language = 5 [default='english']; // device language - optional string label = 6; // device label - optional bool skip_checksum = 7; // do not test mnemonic for valid BIP-39 checksum - optional uint32 u2f_counter = 8; // U2F counter -} - -/** - * Request: Ask device to do initialization involving user interaction - * @next EntropyRequest - * @next Failure - */ -message ResetDevice { - optional bool display_random = 1; // display entropy generated by the device before asking for additional entropy - optional uint32 strength = 2 [default=256]; // strength of seed in bits - optional bool passphrase_protection = 3; // enable master node encryption using passphrase - optional bool pin_protection = 4; // enable PIN protection - optional string language = 5 [default='english']; // device language - optional string label = 6; // device label - optional uint32 u2f_counter = 7; // U2F counter - optional bool skip_backup = 8; // postpone seed backup to BackupDevice workflow -} - -/** - * Request: Perform backup of the device seed if not backed up using ResetDevice - * @next ButtonRequest - */ -message BackupDevice { -} - -/** - * Response: Ask for additional entropy from host computer - * @prev ResetDevice - * @next EntropyAck - */ -message EntropyRequest { -} - -/** - * Request: Provide additional entropy for seed generation function - * @prev EntropyRequest - * @next ButtonRequest - */ -message EntropyAck { - optional bytes entropy = 1; // 256 bits (32 bytes) of random data -} - -/** - * Request: Start recovery workflow asking user for specific words of mnemonic - * Used to recovery device safely even on untrusted computer. - * @next WordRequest - */ -message RecoveryDevice { - optional uint32 word_count = 1; // number of words in BIP-39 mnemonic - optional bool passphrase_protection = 2; // enable master node encryption using passphrase - optional bool pin_protection = 3; // enable PIN protection - optional string language = 4 [default='english']; // device language - optional string label = 5; // device label - optional bool enforce_wordlist = 6; // enforce BIP-39 wordlist during the process - // 7 reserved for unused recovery method - optional uint32 type = 8; // supported recovery type (see RecoveryType) - optional uint32 u2f_counter = 9; // U2F counter - optional bool dry_run = 10; // perform dry-run recovery workflow (for safe mnemonic validation) -} - -/** - * Response: Device is waiting for user to enter word of the mnemonic - * Its position is shown only on device's internal display. - * @prev RecoveryDevice - * @prev WordAck - */ -message WordRequest { - optional WordRequestType type = 1; -} - -/** - * Request: Computer replies with word from the mnemonic - * @prev WordRequest - * @next WordRequest - * @next Success - * @next Failure - */ -message WordAck { - required string word = 1; // one word of mnemonic on asked position -} - -////////////////////////////// -// Message signing messages // -////////////////////////////// - -/** - * Request: Ask device to sign message - * @next MessageSignature - * @next Failure - */ -message SignMessage { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - required bytes message = 2; // message to be signed - optional string coin_name = 3 [default='Bitcoin']; // coin to use for signing - optional InputScriptType script_type = 4 [default=SPENDADDRESS]; // used to distinguish between various address formats (non-segwit, segwit, etc.) -} - -/** - * Request: Ask device to verify message - * @next Success - * @next Failure - */ -message VerifyMessage { - optional string address = 1; // address to verify - optional bytes signature = 2; // signature to verify - optional bytes message = 3; // message to verify - optional string coin_name = 4 [default='Bitcoin']; // coin to use for verifying -} - -/** - * Response: Signed message - * @prev SignMessage - */ -message MessageSignature { - optional string address = 1; // address used to sign the message - optional bytes signature = 2; // signature of the message -} - -/////////////////////////// -// Encryption/decryption // -/////////////////////////// - -/** - * Request: Ask device to encrypt message - * @next EncryptedMessage - * @next Failure - */ -message EncryptMessage { - optional bytes pubkey = 1; // public key - optional bytes message = 2; // message to encrypt - optional bool display_only = 3; // show just on display? (don't send back via wire) - repeated uint32 address_n = 4; // BIP-32 path to derive the signing key from master node - optional string coin_name = 5 [default='Bitcoin']; // coin to use for signing -} - -/** - * Response: Encrypted message - * @prev EncryptMessage - */ -message EncryptedMessage { - optional bytes nonce = 1; // nonce used during encryption - optional bytes message = 2; // encrypted message - optional bytes hmac = 3; // message hmac -} - -/** - * Request: Ask device to decrypt message - * @next Success - * @next Failure - */ -message DecryptMessage { - repeated uint32 address_n = 1; // BIP-32 path to derive the decryption key from master node - optional bytes nonce = 2; // nonce used during encryption - optional bytes message = 3; // message to decrypt - optional bytes hmac = 4; // message hmac -} - -/** - * Response: Decrypted message - * @prev DecryptedMessage - */ -message DecryptedMessage { - optional bytes message = 1; // decrypted message - optional string address = 2; // address used to sign the message (if used) -} - -/** - * Request: Ask device to encrypt or decrypt value of given key - * @next CipheredKeyValue - * @next Failure - */ -message CipherKeyValue { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - optional string key = 2; // key component of key:value - optional bytes value = 3; // value component of key:value - optional bool encrypt = 4; // are we encrypting (True) or decrypting (False)? - optional bool ask_on_encrypt = 5; // should we ask on encrypt operation? - optional bool ask_on_decrypt = 6; // should we ask on decrypt operation? - optional bytes iv = 7; // initialization vector (will be computed if not set) -} - -/** - * Response: Return ciphered/deciphered value - * @prev CipherKeyValue - */ -message CipheredKeyValue { - optional bytes value = 1; // ciphered/deciphered value -} - -////////////////////////////////// -// Transaction signing messages // -////////////////////////////////// - -/** - * Request: Estimated size of the transaction - * This behaves exactly like SignTx, which means that it can ask using TxRequest - * This call is non-blocking (except possible PassphraseRequest to unlock the seed) - * @next TxSize - * @next Failure - */ -message EstimateTxSize { - required uint32 outputs_count = 1; // number of transaction outputs - required uint32 inputs_count = 2; // number of transaction inputs - optional string coin_name = 3 [default='Bitcoin']; // coin to use -} - -/** - * Response: Estimated size of the transaction - * @prev EstimateTxSize - */ -message TxSize { - optional uint32 tx_size = 1; // estimated size of transaction in bytes -} - -/** - * Request: Ask device to sign transaction - * @next PassphraseRequest - * @next PinMatrixRequest - * @next TxRequest - * @next Failure - */ -message SignTx { - required uint32 outputs_count = 1; // number of transaction outputs - required uint32 inputs_count = 2; // number of transaction inputs - optional string coin_name = 3 [default='Bitcoin']; // coin to use - optional uint32 version = 4 [default=1]; // transaction version - optional uint32 lock_time = 5 [default=0]; // transaction lock_time -} - -/** - * Request: Simplified transaction signing - * This method doesn't support streaming, so there are hardware limits in number of inputs and outputs. - * In case of success, the result is returned using TxRequest message. - * @next PassphraseRequest - * @next PinMatrixRequest - * @next TxRequest - * @next Failure - */ -message SimpleSignTx { - repeated TxInputType inputs = 1; // transaction inputs - repeated TxOutputType outputs = 2; // transaction outputs - repeated TransactionType transactions = 3; // transactions whose outputs are used to build current inputs - optional string coin_name = 4 [default='Bitcoin']; // coin to use - optional uint32 version = 5 [default=1]; // transaction version - optional uint32 lock_time = 6 [default=0]; // transaction lock_time -} - -/** - * Response: Device asks for information for signing transaction or returns the last result - * If request_index is set, device awaits TxAck message (with fields filled in according to request_type) - * If signature_index is set, 'signature' contains signed input of signature_index's input - * @prev SignTx - * @prev SimpleSignTx - * @prev TxAck - */ -message TxRequest { - optional RequestType request_type = 1; // what should be filled in TxAck message? - optional TxRequestDetailsType details = 2; // request for tx details - optional TxRequestSerializedType serialized = 3; // serialized data and request for next -} - -/** - * Request: Reported transaction data - * @prev TxRequest - * @next TxRequest - */ -message TxAck { - optional TransactionType tx = 1; -} - -/** - * Request: Ask device to sign transaction - * All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing. - * Note: the first at most 1024 bytes of data MUST be transmitted as part of this message. - * @next PassphraseRequest - * @next PinMatrixRequest - * @next EthereumTxRequest - * @next Failure - */ -message EthereumSignTx { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - optional bytes nonce = 2; // <=256 bit unsigned big endian - optional bytes gas_price = 3; // <=256 bit unsigned big endian (in wei) - optional bytes gas_limit = 4; // <=256 bit unsigned big endian - optional bytes to = 5; // 160 bit address hash - optional bytes value = 6; // <=256 bit unsigned big endian (in wei) - optional bytes data_initial_chunk = 7; // The initial data chunk (<= 1024 bytes) - optional uint32 data_length = 8; // Length of transaction payload - optional uint32 chain_id = 9; // Chain Id for EIP 155 -} - -/** - * Response: Device asks for more data from transaction payload, or returns the signature. - * If data_length is set, device awaits that many more bytes of payload. - * Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present. - * @prev EthereumSignTx - * @next EthereumTxAck - */ -message EthereumTxRequest { - optional uint32 data_length = 1; // Number of bytes being requested (<= 1024) - optional uint32 signature_v = 2; // Computed signature (recovery parameter, limited to 27 or 28) - optional bytes signature_r = 3; // Computed signature R component (256 bit) - optional bytes signature_s = 4; // Computed signature S component (256 bit) -} - -/** - * Request: Transaction payload data. - * @prev EthereumTxRequest - * @next EthereumTxRequest - */ -message EthereumTxAck { - optional bytes data_chunk = 1; // Bytes from transaction payload (<= 1024 bytes) -} - -//////////////////////////////////////// -// Ethereum: Message signing messages // -//////////////////////////////////////// - -/** - * Request: Ask device to sign message - * @next EthereumMessageSignature - * @next Failure - */ -message EthereumSignMessage { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - required bytes message = 2; // message to be signed -} - -/** - * Request: Ask device to verify message - * @next Success - * @next Failure - */ -message EthereumVerifyMessage { - optional bytes address = 1; // address to verify - optional bytes signature = 2; // signature to verify - optional bytes message = 3; // message to verify -} - -/** - * Response: Signed message - * @prev EthereumSignMessage - */ -message EthereumMessageSignature { - optional bytes address = 1; // address used to sign the message - optional bytes signature = 2; // signature of the message -} - -/////////////////////// -// Identity messages // -/////////////////////// - -/** - * Request: Ask device to sign identity - * @next SignedIdentity - * @next Failure - */ -message SignIdentity { - optional IdentityType identity = 1; // identity - optional bytes challenge_hidden = 2; // non-visible challenge - optional string challenge_visual = 3; // challenge shown on display (e.g. date+time) - optional string ecdsa_curve_name = 4; // ECDSA curve name to use -} - -/** - * Response: Device provides signed identity - * @prev SignIdentity - */ -message SignedIdentity { - optional string address = 1; // identity address - optional bytes public_key = 2; // identity public key - optional bytes signature = 3; // signature of the identity data -} - -/////////////////// -// ECDH messages // -/////////////////// - -/** - * Request: Ask device to generate ECDH session key - * @next ECDHSessionKey - * @next Failure - */ -message GetECDHSessionKey { - optional IdentityType identity = 1; // identity - optional bytes peer_public_key = 2; // peer's public key - optional string ecdsa_curve_name = 3; // ECDSA curve name to use -} - -/** - * Response: Device provides ECDH session key - * @prev GetECDHSessionKey - */ -message ECDHSessionKey { - optional bytes session_key = 1; // ECDH session key -} - -/////////////////// -// U2F messages // -/////////////////// - -/** - * Request: Set U2F counter - * @next Success - */ -message SetU2FCounter { - optional uint32 u2f_counter = 1; // counter -} - -///////////////////////// -// Bootloader messages // -///////////////////////// - -/** - * Request: Ask device to erase its firmware (so it can be replaced via FirmwareUpload) - * @next Success - * @next FirmwareRequest - * @next Failure - */ -message FirmwareErase { - optional uint32 length = 1; // length of new firmware -} - -/** - * Response: Ask for firmware chunk - * @next FirmwareUpload - */ -message FirmwareRequest { - optional uint32 offset = 1; // offset of requested firmware chunk - optional uint32 length = 2; // length of requested firmware chunk -} - -/** - * Request: Send firmware in binary form to the device - * @next Success - * @next Failure - */ -message FirmwareUpload { - required bytes payload = 1; // firmware to be loaded into device - optional bytes hash = 2; // hash of the payload -} - - -/** - * Request: Perform a device self-test - * @next Success - * @next Failure - */ -message SelfTest { - optional bytes payload = 1; // payload to be used in self-test -} - -///////////////////////////////////////////////////////////// -// Debug messages (only available if DebugLink is enabled) // -///////////////////////////////////////////////////////////// - -/** - * Request: "Press" the button on the device - * @next Success - */ -message DebugLinkDecision { - required bool yes_no = 1; // true for "Confirm", false for "Cancel" -} - -/** - * Request: Computer asks for device state - * @next DebugLinkState - */ -message DebugLinkGetState { -} - -/** - * Response: Device current state - * @prev DebugLinkGetState - */ -message DebugLinkState { - optional bytes layout = 1; // raw buffer of display - optional string pin = 2; // current PIN, blank if PIN is not set/enabled - optional string matrix = 3; // current PIN matrix - optional string mnemonic = 4; // current BIP-39 mnemonic - optional HDNodeType node = 5; // current BIP-32 node - optional bool passphrase_protection = 6; // is node/mnemonic encrypted using passphrase? - optional string reset_word = 7; // word on device display during ResetDevice workflow - optional bytes reset_entropy = 8; // current entropy during ResetDevice workflow - optional string recovery_fake_word = 9; // (fake) word on display during RecoveryDevice workflow - optional uint32 recovery_word_pos = 10; // index of mnemonic word the device is expecting during RecoveryDevice workflow -} - -/** - * Request: Ask device to restart - */ -message DebugLinkStop { -} - -/** - * Response: Device wants host to log event - */ -message DebugLinkLog { - optional uint32 level = 1; - optional string bucket = 2; - optional string text = 3; -} - -/** - * Request: Read memory from device - * @next DebugLinkMemory - */ -message DebugLinkMemoryRead { - optional uint32 address = 1; - optional uint32 length = 2; -} - -/** - * Response: Device sends memory back - * @prev DebugLinkMemoryRead - */ -message DebugLinkMemory { - optional bytes memory = 1; -} - -/** - * Request: Write memory to device. - * WARNING: Writing to the wrong location can irreparably break the device. - */ -message DebugLinkMemoryWrite { - optional uint32 address = 1; - optional bytes memory = 2; - optional bool flash = 3; -} - -/** - * Request: Erase block of flash on device - * WARNING: Writing to the wrong location can irreparably break the device. - */ -message DebugLinkFlashErase { - optional uint32 sector = 1; -} diff --git a/accounts/usbwallet/internal/trezor/trezor.go b/accounts/usbwallet/internal/trezor/trezor.go deleted file mode 100644 index 80cc75efc420..000000000000 --- a/accounts/usbwallet/internal/trezor/trezor.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// This file contains the implementation for interacting with the Trezor hardware -// wallets. The wire protocol spec can be found on the SatoshiLabs website: -// https://doc.satoshilabs.com/trezor-tech/api-protobuf.html - -//go:generate protoc --go_out=import_path=trezor:. types.proto messages.proto - -// Package trezor contains the wire protocol wrapper in Go. -package trezor - -import ( - "reflect" - - "github.com/golang/protobuf/proto" -) - -// Type returns the protocol buffer type number of a specific message. If the -// message is nil, this method panics! -func Type(msg proto.Message) uint16 { - return uint16(MessageType_value["MessageType_"+reflect.TypeOf(msg).Elem().Name()]) -} - -// Name returns the friendly message type name of a specific protocol buffer -// type number. -func Name(kind uint16) string { - name := MessageType_name[int32(kind)] - if len(name) < 12 { - return name - } - return name[12:] -} diff --git a/accounts/usbwallet/internal/trezor/types.pb.go b/accounts/usbwallet/internal/trezor/types.pb.go deleted file mode 100644 index 25b7672d231c..000000000000 --- a/accounts/usbwallet/internal/trezor/types.pb.go +++ /dev/null @@ -1,1333 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: types.proto - -/* -Package trezor is a generated protocol buffer package. - -It is generated from these files: - types.proto - messages.proto - -It has these top-level messages: - HDNodeType - HDNodePathType - CoinType - MultisigRedeemScriptType - TxInputType - TxOutputType - TxOutputBinType - TransactionType - TxRequestDetailsType - TxRequestSerializedType - IdentityType - Initialize - GetFeatures - Features - ClearSession - ApplySettings - ApplyFlags - ChangePin - Ping - Success - Failure - ButtonRequest - ButtonAck - PinMatrixRequest - PinMatrixAck - Cancel - PassphraseRequest - PassphraseAck - GetEntropy - Entropy - GetPublicKey - PublicKey - GetAddress - EthereumGetAddress - Address - EthereumAddress - WipeDevice - LoadDevice - ResetDevice - BackupDevice - EntropyRequest - EntropyAck - RecoveryDevice - WordRequest - WordAck - SignMessage - VerifyMessage - MessageSignature - EncryptMessage - EncryptedMessage - DecryptMessage - DecryptedMessage - CipherKeyValue - CipheredKeyValue - EstimateTxSize - TxSize - SignTx - SimpleSignTx - TxRequest - TxAck - EthereumSignTx - EthereumTxRequest - EthereumTxAck - EthereumSignMessage - EthereumVerifyMessage - EthereumMessageSignature - SignIdentity - SignedIdentity - GetECDHSessionKey - ECDHSessionKey - SetU2FCounter - FirmwareErase - FirmwareRequest - FirmwareUpload - SelfTest - DebugLinkDecision - DebugLinkGetState - DebugLinkState - DebugLinkStop - DebugLinkLog - DebugLinkMemoryRead - DebugLinkMemory - DebugLinkMemoryWrite - DebugLinkFlashErase -*/ -package trezor - -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" -import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package - -// * -// Type of failures returned by Failure message -// @used_in Failure -type FailureType int32 - -const ( - FailureType_Failure_UnexpectedMessage FailureType = 1 - FailureType_Failure_ButtonExpected FailureType = 2 - FailureType_Failure_DataError FailureType = 3 - FailureType_Failure_ActionCancelled FailureType = 4 - FailureType_Failure_PinExpected FailureType = 5 - FailureType_Failure_PinCancelled FailureType = 6 - FailureType_Failure_PinInvalid FailureType = 7 - FailureType_Failure_InvalidSignature FailureType = 8 - FailureType_Failure_ProcessError FailureType = 9 - FailureType_Failure_NotEnoughFunds FailureType = 10 - FailureType_Failure_NotInitialized FailureType = 11 - FailureType_Failure_FirmwareError FailureType = 99 -) - -var FailureType_name = map[int32]string{ - 1: "Failure_UnexpectedMessage", - 2: "Failure_ButtonExpected", - 3: "Failure_DataError", - 4: "Failure_ActionCancelled", - 5: "Failure_PinExpected", - 6: "Failure_PinCancelled", - 7: "Failure_PinInvalid", - 8: "Failure_InvalidSignature", - 9: "Failure_ProcessError", - 10: "Failure_NotEnoughFunds", - 11: "Failure_NotInitialized", - 99: "Failure_FirmwareError", -} -var FailureType_value = map[string]int32{ - "Failure_UnexpectedMessage": 1, - "Failure_ButtonExpected": 2, - "Failure_DataError": 3, - "Failure_ActionCancelled": 4, - "Failure_PinExpected": 5, - "Failure_PinCancelled": 6, - "Failure_PinInvalid": 7, - "Failure_InvalidSignature": 8, - "Failure_ProcessError": 9, - "Failure_NotEnoughFunds": 10, - "Failure_NotInitialized": 11, - "Failure_FirmwareError": 99, -} - -func (x FailureType) Enum() *FailureType { - p := new(FailureType) - *p = x - return p -} -func (x FailureType) String() string { - return proto.EnumName(FailureType_name, int32(x)) -} -func (x *FailureType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(FailureType_value, data, "FailureType") - if err != nil { - return err - } - *x = FailureType(value) - return nil -} -func (FailureType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -// * -// Type of script which will be used for transaction output -// @used_in TxOutputType -type OutputScriptType int32 - -const ( - OutputScriptType_PAYTOADDRESS OutputScriptType = 0 - OutputScriptType_PAYTOSCRIPTHASH OutputScriptType = 1 - OutputScriptType_PAYTOMULTISIG OutputScriptType = 2 - OutputScriptType_PAYTOOPRETURN OutputScriptType = 3 - OutputScriptType_PAYTOWITNESS OutputScriptType = 4 - OutputScriptType_PAYTOP2SHWITNESS OutputScriptType = 5 -) - -var OutputScriptType_name = map[int32]string{ - 0: "PAYTOADDRESS", - 1: "PAYTOSCRIPTHASH", - 2: "PAYTOMULTISIG", - 3: "PAYTOOPRETURN", - 4: "PAYTOWITNESS", - 5: "PAYTOP2SHWITNESS", -} -var OutputScriptType_value = map[string]int32{ - "PAYTOADDRESS": 0, - "PAYTOSCRIPTHASH": 1, - "PAYTOMULTISIG": 2, - "PAYTOOPRETURN": 3, - "PAYTOWITNESS": 4, - "PAYTOP2SHWITNESS": 5, -} - -func (x OutputScriptType) Enum() *OutputScriptType { - p := new(OutputScriptType) - *p = x - return p -} -func (x OutputScriptType) String() string { - return proto.EnumName(OutputScriptType_name, int32(x)) -} -func (x *OutputScriptType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(OutputScriptType_value, data, "OutputScriptType") - if err != nil { - return err - } - *x = OutputScriptType(value) - return nil -} -func (OutputScriptType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -// * -// Type of script which will be used for transaction output -// @used_in TxInputType -type InputScriptType int32 - -const ( - InputScriptType_SPENDADDRESS InputScriptType = 0 - InputScriptType_SPENDMULTISIG InputScriptType = 1 - InputScriptType_EXTERNAL InputScriptType = 2 - InputScriptType_SPENDWITNESS InputScriptType = 3 - InputScriptType_SPENDP2SHWITNESS InputScriptType = 4 -) - -var InputScriptType_name = map[int32]string{ - 0: "SPENDADDRESS", - 1: "SPENDMULTISIG", - 2: "EXTERNAL", - 3: "SPENDWITNESS", - 4: "SPENDP2SHWITNESS", -} -var InputScriptType_value = map[string]int32{ - "SPENDADDRESS": 0, - "SPENDMULTISIG": 1, - "EXTERNAL": 2, - "SPENDWITNESS": 3, - "SPENDP2SHWITNESS": 4, -} - -func (x InputScriptType) Enum() *InputScriptType { - p := new(InputScriptType) - *p = x - return p -} -func (x InputScriptType) String() string { - return proto.EnumName(InputScriptType_name, int32(x)) -} -func (x *InputScriptType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(InputScriptType_value, data, "InputScriptType") - if err != nil { - return err - } - *x = InputScriptType(value) - return nil -} -func (InputScriptType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -// * -// Type of information required by transaction signing process -// @used_in TxRequest -type RequestType int32 - -const ( - RequestType_TXINPUT RequestType = 0 - RequestType_TXOUTPUT RequestType = 1 - RequestType_TXMETA RequestType = 2 - RequestType_TXFINISHED RequestType = 3 - RequestType_TXEXTRADATA RequestType = 4 -) - -var RequestType_name = map[int32]string{ - 0: "TXINPUT", - 1: "TXOUTPUT", - 2: "TXMETA", - 3: "TXFINISHED", - 4: "TXEXTRADATA", -} -var RequestType_value = map[string]int32{ - "TXINPUT": 0, - "TXOUTPUT": 1, - "TXMETA": 2, - "TXFINISHED": 3, - "TXEXTRADATA": 4, -} - -func (x RequestType) Enum() *RequestType { - p := new(RequestType) - *p = x - return p -} -func (x RequestType) String() string { - return proto.EnumName(RequestType_name, int32(x)) -} -func (x *RequestType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(RequestType_value, data, "RequestType") - if err != nil { - return err - } - *x = RequestType(value) - return nil -} -func (RequestType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -// * -// Type of button request -// @used_in ButtonRequest -type ButtonRequestType int32 - -const ( - ButtonRequestType_ButtonRequest_Other ButtonRequestType = 1 - ButtonRequestType_ButtonRequest_FeeOverThreshold ButtonRequestType = 2 - ButtonRequestType_ButtonRequest_ConfirmOutput ButtonRequestType = 3 - ButtonRequestType_ButtonRequest_ResetDevice ButtonRequestType = 4 - ButtonRequestType_ButtonRequest_ConfirmWord ButtonRequestType = 5 - ButtonRequestType_ButtonRequest_WipeDevice ButtonRequestType = 6 - ButtonRequestType_ButtonRequest_ProtectCall ButtonRequestType = 7 - ButtonRequestType_ButtonRequest_SignTx ButtonRequestType = 8 - ButtonRequestType_ButtonRequest_FirmwareCheck ButtonRequestType = 9 - ButtonRequestType_ButtonRequest_Address ButtonRequestType = 10 - ButtonRequestType_ButtonRequest_PublicKey ButtonRequestType = 11 -) - -var ButtonRequestType_name = map[int32]string{ - 1: "ButtonRequest_Other", - 2: "ButtonRequest_FeeOverThreshold", - 3: "ButtonRequest_ConfirmOutput", - 4: "ButtonRequest_ResetDevice", - 5: "ButtonRequest_ConfirmWord", - 6: "ButtonRequest_WipeDevice", - 7: "ButtonRequest_ProtectCall", - 8: "ButtonRequest_SignTx", - 9: "ButtonRequest_FirmwareCheck", - 10: "ButtonRequest_Address", - 11: "ButtonRequest_PublicKey", -} -var ButtonRequestType_value = map[string]int32{ - "ButtonRequest_Other": 1, - "ButtonRequest_FeeOverThreshold": 2, - "ButtonRequest_ConfirmOutput": 3, - "ButtonRequest_ResetDevice": 4, - "ButtonRequest_ConfirmWord": 5, - "ButtonRequest_WipeDevice": 6, - "ButtonRequest_ProtectCall": 7, - "ButtonRequest_SignTx": 8, - "ButtonRequest_FirmwareCheck": 9, - "ButtonRequest_Address": 10, - "ButtonRequest_PublicKey": 11, -} - -func (x ButtonRequestType) Enum() *ButtonRequestType { - p := new(ButtonRequestType) - *p = x - return p -} -func (x ButtonRequestType) String() string { - return proto.EnumName(ButtonRequestType_name, int32(x)) -} -func (x *ButtonRequestType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(ButtonRequestType_value, data, "ButtonRequestType") - if err != nil { - return err - } - *x = ButtonRequestType(value) - return nil -} -func (ButtonRequestType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } - -// * -// Type of PIN request -// @used_in PinMatrixRequest -type PinMatrixRequestType int32 - -const ( - PinMatrixRequestType_PinMatrixRequestType_Current PinMatrixRequestType = 1 - PinMatrixRequestType_PinMatrixRequestType_NewFirst PinMatrixRequestType = 2 - PinMatrixRequestType_PinMatrixRequestType_NewSecond PinMatrixRequestType = 3 -) - -var PinMatrixRequestType_name = map[int32]string{ - 1: "PinMatrixRequestType_Current", - 2: "PinMatrixRequestType_NewFirst", - 3: "PinMatrixRequestType_NewSecond", -} -var PinMatrixRequestType_value = map[string]int32{ - "PinMatrixRequestType_Current": 1, - "PinMatrixRequestType_NewFirst": 2, - "PinMatrixRequestType_NewSecond": 3, -} - -func (x PinMatrixRequestType) Enum() *PinMatrixRequestType { - p := new(PinMatrixRequestType) - *p = x - return p -} -func (x PinMatrixRequestType) String() string { - return proto.EnumName(PinMatrixRequestType_name, int32(x)) -} -func (x *PinMatrixRequestType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(PinMatrixRequestType_value, data, "PinMatrixRequestType") - if err != nil { - return err - } - *x = PinMatrixRequestType(value) - return nil -} -func (PinMatrixRequestType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -// * -// Type of recovery procedure. These should be used as bitmask, e.g., -// `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` -// listing every method supported by the host computer. -// -// Note that ScrambledWords must be supported by every implementation -// for backward compatibility; there is no way to not support it. -// -// @used_in RecoveryDevice -type RecoveryDeviceType int32 - -const ( - // use powers of two when extending this field - RecoveryDeviceType_RecoveryDeviceType_ScrambledWords RecoveryDeviceType = 0 - RecoveryDeviceType_RecoveryDeviceType_Matrix RecoveryDeviceType = 1 -) - -var RecoveryDeviceType_name = map[int32]string{ - 0: "RecoveryDeviceType_ScrambledWords", - 1: "RecoveryDeviceType_Matrix", -} -var RecoveryDeviceType_value = map[string]int32{ - "RecoveryDeviceType_ScrambledWords": 0, - "RecoveryDeviceType_Matrix": 1, -} - -func (x RecoveryDeviceType) Enum() *RecoveryDeviceType { - p := new(RecoveryDeviceType) - *p = x - return p -} -func (x RecoveryDeviceType) String() string { - return proto.EnumName(RecoveryDeviceType_name, int32(x)) -} -func (x *RecoveryDeviceType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(RecoveryDeviceType_value, data, "RecoveryDeviceType") - if err != nil { - return err - } - *x = RecoveryDeviceType(value) - return nil -} -func (RecoveryDeviceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } - -// * -// Type of Recovery Word request -// @used_in WordRequest -type WordRequestType int32 - -const ( - WordRequestType_WordRequestType_Plain WordRequestType = 0 - WordRequestType_WordRequestType_Matrix9 WordRequestType = 1 - WordRequestType_WordRequestType_Matrix6 WordRequestType = 2 -) - -var WordRequestType_name = map[int32]string{ - 0: "WordRequestType_Plain", - 1: "WordRequestType_Matrix9", - 2: "WordRequestType_Matrix6", -} -var WordRequestType_value = map[string]int32{ - "WordRequestType_Plain": 0, - "WordRequestType_Matrix9": 1, - "WordRequestType_Matrix6": 2, -} - -func (x WordRequestType) Enum() *WordRequestType { - p := new(WordRequestType) - *p = x - return p -} -func (x WordRequestType) String() string { - return proto.EnumName(WordRequestType_name, int32(x)) -} -func (x *WordRequestType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(WordRequestType_value, data, "WordRequestType") - if err != nil { - return err - } - *x = WordRequestType(value) - return nil -} -func (WordRequestType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } - -// * -// Structure representing BIP32 (hierarchical deterministic) node -// Used for imports of private key into the device and exporting public key out of device -// @used_in PublicKey -// @used_in LoadDevice -// @used_in DebugLinkState -// @used_in Storage -type HDNodeType struct { - Depth *uint32 `protobuf:"varint,1,req,name=depth" json:"depth,omitempty"` - Fingerprint *uint32 `protobuf:"varint,2,req,name=fingerprint" json:"fingerprint,omitempty"` - ChildNum *uint32 `protobuf:"varint,3,req,name=child_num,json=childNum" json:"child_num,omitempty"` - ChainCode []byte `protobuf:"bytes,4,req,name=chain_code,json=chainCode" json:"chain_code,omitempty"` - PrivateKey []byte `protobuf:"bytes,5,opt,name=private_key,json=privateKey" json:"private_key,omitempty"` - PublicKey []byte `protobuf:"bytes,6,opt,name=public_key,json=publicKey" json:"public_key,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *HDNodeType) Reset() { *m = HDNodeType{} } -func (m *HDNodeType) String() string { return proto.CompactTextString(m) } -func (*HDNodeType) ProtoMessage() {} -func (*HDNodeType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } - -func (m *HDNodeType) GetDepth() uint32 { - if m != nil && m.Depth != nil { - return *m.Depth - } - return 0 -} - -func (m *HDNodeType) GetFingerprint() uint32 { - if m != nil && m.Fingerprint != nil { - return *m.Fingerprint - } - return 0 -} - -func (m *HDNodeType) GetChildNum() uint32 { - if m != nil && m.ChildNum != nil { - return *m.ChildNum - } - return 0 -} - -func (m *HDNodeType) GetChainCode() []byte { - if m != nil { - return m.ChainCode - } - return nil -} - -func (m *HDNodeType) GetPrivateKey() []byte { - if m != nil { - return m.PrivateKey - } - return nil -} - -func (m *HDNodeType) GetPublicKey() []byte { - if m != nil { - return m.PublicKey - } - return nil -} - -type HDNodePathType struct { - Node *HDNodeType `protobuf:"bytes,1,req,name=node" json:"node,omitempty"` - AddressN []uint32 `protobuf:"varint,2,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *HDNodePathType) Reset() { *m = HDNodePathType{} } -func (m *HDNodePathType) String() string { return proto.CompactTextString(m) } -func (*HDNodePathType) ProtoMessage() {} -func (*HDNodePathType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } - -func (m *HDNodePathType) GetNode() *HDNodeType { - if m != nil { - return m.Node - } - return nil -} - -func (m *HDNodePathType) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -// * -// Structure representing Coin -// @used_in Features -type CoinType struct { - CoinName *string `protobuf:"bytes,1,opt,name=coin_name,json=coinName" json:"coin_name,omitempty"` - CoinShortcut *string `protobuf:"bytes,2,opt,name=coin_shortcut,json=coinShortcut" json:"coin_shortcut,omitempty"` - AddressType *uint32 `protobuf:"varint,3,opt,name=address_type,json=addressType,def=0" json:"address_type,omitempty"` - MaxfeeKb *uint64 `protobuf:"varint,4,opt,name=maxfee_kb,json=maxfeeKb" json:"maxfee_kb,omitempty"` - AddressTypeP2Sh *uint32 `protobuf:"varint,5,opt,name=address_type_p2sh,json=addressTypeP2sh,def=5" json:"address_type_p2sh,omitempty"` - SignedMessageHeader *string `protobuf:"bytes,8,opt,name=signed_message_header,json=signedMessageHeader" json:"signed_message_header,omitempty"` - XpubMagic *uint32 `protobuf:"varint,9,opt,name=xpub_magic,json=xpubMagic,def=76067358" json:"xpub_magic,omitempty"` - XprvMagic *uint32 `protobuf:"varint,10,opt,name=xprv_magic,json=xprvMagic,def=76066276" json:"xprv_magic,omitempty"` - Segwit *bool `protobuf:"varint,11,opt,name=segwit" json:"segwit,omitempty"` - Forkid *uint32 `protobuf:"varint,12,opt,name=forkid" json:"forkid,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *CoinType) Reset() { *m = CoinType{} } -func (m *CoinType) String() string { return proto.CompactTextString(m) } -func (*CoinType) ProtoMessage() {} -func (*CoinType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } - -const Default_CoinType_AddressType uint32 = 0 -const Default_CoinType_AddressTypeP2Sh uint32 = 5 -const Default_CoinType_XpubMagic uint32 = 76067358 -const Default_CoinType_XprvMagic uint32 = 76066276 - -func (m *CoinType) GetCoinName() string { - if m != nil && m.CoinName != nil { - return *m.CoinName - } - return "" -} - -func (m *CoinType) GetCoinShortcut() string { - if m != nil && m.CoinShortcut != nil { - return *m.CoinShortcut - } - return "" -} - -func (m *CoinType) GetAddressType() uint32 { - if m != nil && m.AddressType != nil { - return *m.AddressType - } - return Default_CoinType_AddressType -} - -func (m *CoinType) GetMaxfeeKb() uint64 { - if m != nil && m.MaxfeeKb != nil { - return *m.MaxfeeKb - } - return 0 -} - -func (m *CoinType) GetAddressTypeP2Sh() uint32 { - if m != nil && m.AddressTypeP2Sh != nil { - return *m.AddressTypeP2Sh - } - return Default_CoinType_AddressTypeP2Sh -} - -func (m *CoinType) GetSignedMessageHeader() string { - if m != nil && m.SignedMessageHeader != nil { - return *m.SignedMessageHeader - } - return "" -} - -func (m *CoinType) GetXpubMagic() uint32 { - if m != nil && m.XpubMagic != nil { - return *m.XpubMagic - } - return Default_CoinType_XpubMagic -} - -func (m *CoinType) GetXprvMagic() uint32 { - if m != nil && m.XprvMagic != nil { - return *m.XprvMagic - } - return Default_CoinType_XprvMagic -} - -func (m *CoinType) GetSegwit() bool { - if m != nil && m.Segwit != nil { - return *m.Segwit - } - return false -} - -func (m *CoinType) GetForkid() uint32 { - if m != nil && m.Forkid != nil { - return *m.Forkid - } - return 0 -} - -// * -// Type of redeem script used in input -// @used_in TxInputType -type MultisigRedeemScriptType struct { - Pubkeys []*HDNodePathType `protobuf:"bytes,1,rep,name=pubkeys" json:"pubkeys,omitempty"` - Signatures [][]byte `protobuf:"bytes,2,rep,name=signatures" json:"signatures,omitempty"` - M *uint32 `protobuf:"varint,3,opt,name=m" json:"m,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *MultisigRedeemScriptType) Reset() { *m = MultisigRedeemScriptType{} } -func (m *MultisigRedeemScriptType) String() string { return proto.CompactTextString(m) } -func (*MultisigRedeemScriptType) ProtoMessage() {} -func (*MultisigRedeemScriptType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } - -func (m *MultisigRedeemScriptType) GetPubkeys() []*HDNodePathType { - if m != nil { - return m.Pubkeys - } - return nil -} - -func (m *MultisigRedeemScriptType) GetSignatures() [][]byte { - if m != nil { - return m.Signatures - } - return nil -} - -func (m *MultisigRedeemScriptType) GetM() uint32 { - if m != nil && m.M != nil { - return *m.M - } - return 0 -} - -// * -// Structure representing transaction input -// @used_in SimpleSignTx -// @used_in TransactionType -type TxInputType struct { - AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - PrevHash []byte `protobuf:"bytes,2,req,name=prev_hash,json=prevHash" json:"prev_hash,omitempty"` - PrevIndex *uint32 `protobuf:"varint,3,req,name=prev_index,json=prevIndex" json:"prev_index,omitempty"` - ScriptSig []byte `protobuf:"bytes,4,opt,name=script_sig,json=scriptSig" json:"script_sig,omitempty"` - Sequence *uint32 `protobuf:"varint,5,opt,name=sequence,def=4294967295" json:"sequence,omitempty"` - ScriptType *InputScriptType `protobuf:"varint,6,opt,name=script_type,json=scriptType,enum=InputScriptType,def=0" json:"script_type,omitempty"` - Multisig *MultisigRedeemScriptType `protobuf:"bytes,7,opt,name=multisig" json:"multisig,omitempty"` - Amount *uint64 `protobuf:"varint,8,opt,name=amount" json:"amount,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxInputType) Reset() { *m = TxInputType{} } -func (m *TxInputType) String() string { return proto.CompactTextString(m) } -func (*TxInputType) ProtoMessage() {} -func (*TxInputType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } - -const Default_TxInputType_Sequence uint32 = 4294967295 -const Default_TxInputType_ScriptType InputScriptType = InputScriptType_SPENDADDRESS - -func (m *TxInputType) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *TxInputType) GetPrevHash() []byte { - if m != nil { - return m.PrevHash - } - return nil -} - -func (m *TxInputType) GetPrevIndex() uint32 { - if m != nil && m.PrevIndex != nil { - return *m.PrevIndex - } - return 0 -} - -func (m *TxInputType) GetScriptSig() []byte { - if m != nil { - return m.ScriptSig - } - return nil -} - -func (m *TxInputType) GetSequence() uint32 { - if m != nil && m.Sequence != nil { - return *m.Sequence - } - return Default_TxInputType_Sequence -} - -func (m *TxInputType) GetScriptType() InputScriptType { - if m != nil && m.ScriptType != nil { - return *m.ScriptType - } - return Default_TxInputType_ScriptType -} - -func (m *TxInputType) GetMultisig() *MultisigRedeemScriptType { - if m != nil { - return m.Multisig - } - return nil -} - -func (m *TxInputType) GetAmount() uint64 { - if m != nil && m.Amount != nil { - return *m.Amount - } - return 0 -} - -// * -// Structure representing transaction output -// @used_in SimpleSignTx -// @used_in TransactionType -type TxOutputType struct { - Address *string `protobuf:"bytes,1,opt,name=address" json:"address,omitempty"` - AddressN []uint32 `protobuf:"varint,2,rep,name=address_n,json=addressN" json:"address_n,omitempty"` - Amount *uint64 `protobuf:"varint,3,req,name=amount" json:"amount,omitempty"` - ScriptType *OutputScriptType `protobuf:"varint,4,req,name=script_type,json=scriptType,enum=OutputScriptType" json:"script_type,omitempty"` - Multisig *MultisigRedeemScriptType `protobuf:"bytes,5,opt,name=multisig" json:"multisig,omitempty"` - OpReturnData []byte `protobuf:"bytes,6,opt,name=op_return_data,json=opReturnData" json:"op_return_data,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxOutputType) Reset() { *m = TxOutputType{} } -func (m *TxOutputType) String() string { return proto.CompactTextString(m) } -func (*TxOutputType) ProtoMessage() {} -func (*TxOutputType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } - -func (m *TxOutputType) GetAddress() string { - if m != nil && m.Address != nil { - return *m.Address - } - return "" -} - -func (m *TxOutputType) GetAddressN() []uint32 { - if m != nil { - return m.AddressN - } - return nil -} - -func (m *TxOutputType) GetAmount() uint64 { - if m != nil && m.Amount != nil { - return *m.Amount - } - return 0 -} - -func (m *TxOutputType) GetScriptType() OutputScriptType { - if m != nil && m.ScriptType != nil { - return *m.ScriptType - } - return OutputScriptType_PAYTOADDRESS -} - -func (m *TxOutputType) GetMultisig() *MultisigRedeemScriptType { - if m != nil { - return m.Multisig - } - return nil -} - -func (m *TxOutputType) GetOpReturnData() []byte { - if m != nil { - return m.OpReturnData - } - return nil -} - -// * -// Structure representing compiled transaction output -// @used_in TransactionType -type TxOutputBinType struct { - Amount *uint64 `protobuf:"varint,1,req,name=amount" json:"amount,omitempty"` - ScriptPubkey []byte `protobuf:"bytes,2,req,name=script_pubkey,json=scriptPubkey" json:"script_pubkey,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxOutputBinType) Reset() { *m = TxOutputBinType{} } -func (m *TxOutputBinType) String() string { return proto.CompactTextString(m) } -func (*TxOutputBinType) ProtoMessage() {} -func (*TxOutputBinType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } - -func (m *TxOutputBinType) GetAmount() uint64 { - if m != nil && m.Amount != nil { - return *m.Amount - } - return 0 -} - -func (m *TxOutputBinType) GetScriptPubkey() []byte { - if m != nil { - return m.ScriptPubkey - } - return nil -} - -// * -// Structure representing transaction -// @used_in SimpleSignTx -type TransactionType struct { - Version *uint32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` - Inputs []*TxInputType `protobuf:"bytes,2,rep,name=inputs" json:"inputs,omitempty"` - BinOutputs []*TxOutputBinType `protobuf:"bytes,3,rep,name=bin_outputs,json=binOutputs" json:"bin_outputs,omitempty"` - Outputs []*TxOutputType `protobuf:"bytes,5,rep,name=outputs" json:"outputs,omitempty"` - LockTime *uint32 `protobuf:"varint,4,opt,name=lock_time,json=lockTime" json:"lock_time,omitempty"` - InputsCnt *uint32 `protobuf:"varint,6,opt,name=inputs_cnt,json=inputsCnt" json:"inputs_cnt,omitempty"` - OutputsCnt *uint32 `protobuf:"varint,7,opt,name=outputs_cnt,json=outputsCnt" json:"outputs_cnt,omitempty"` - ExtraData []byte `protobuf:"bytes,8,opt,name=extra_data,json=extraData" json:"extra_data,omitempty"` - ExtraDataLen *uint32 `protobuf:"varint,9,opt,name=extra_data_len,json=extraDataLen" json:"extra_data_len,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TransactionType) Reset() { *m = TransactionType{} } -func (m *TransactionType) String() string { return proto.CompactTextString(m) } -func (*TransactionType) ProtoMessage() {} -func (*TransactionType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } - -func (m *TransactionType) GetVersion() uint32 { - if m != nil && m.Version != nil { - return *m.Version - } - return 0 -} - -func (m *TransactionType) GetInputs() []*TxInputType { - if m != nil { - return m.Inputs - } - return nil -} - -func (m *TransactionType) GetBinOutputs() []*TxOutputBinType { - if m != nil { - return m.BinOutputs - } - return nil -} - -func (m *TransactionType) GetOutputs() []*TxOutputType { - if m != nil { - return m.Outputs - } - return nil -} - -func (m *TransactionType) GetLockTime() uint32 { - if m != nil && m.LockTime != nil { - return *m.LockTime - } - return 0 -} - -func (m *TransactionType) GetInputsCnt() uint32 { - if m != nil && m.InputsCnt != nil { - return *m.InputsCnt - } - return 0 -} - -func (m *TransactionType) GetOutputsCnt() uint32 { - if m != nil && m.OutputsCnt != nil { - return *m.OutputsCnt - } - return 0 -} - -func (m *TransactionType) GetExtraData() []byte { - if m != nil { - return m.ExtraData - } - return nil -} - -func (m *TransactionType) GetExtraDataLen() uint32 { - if m != nil && m.ExtraDataLen != nil { - return *m.ExtraDataLen - } - return 0 -} - -// * -// Structure representing request details -// @used_in TxRequest -type TxRequestDetailsType struct { - RequestIndex *uint32 `protobuf:"varint,1,opt,name=request_index,json=requestIndex" json:"request_index,omitempty"` - TxHash []byte `protobuf:"bytes,2,opt,name=tx_hash,json=txHash" json:"tx_hash,omitempty"` - ExtraDataLen *uint32 `protobuf:"varint,3,opt,name=extra_data_len,json=extraDataLen" json:"extra_data_len,omitempty"` - ExtraDataOffset *uint32 `protobuf:"varint,4,opt,name=extra_data_offset,json=extraDataOffset" json:"extra_data_offset,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxRequestDetailsType) Reset() { *m = TxRequestDetailsType{} } -func (m *TxRequestDetailsType) String() string { return proto.CompactTextString(m) } -func (*TxRequestDetailsType) ProtoMessage() {} -func (*TxRequestDetailsType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } - -func (m *TxRequestDetailsType) GetRequestIndex() uint32 { - if m != nil && m.RequestIndex != nil { - return *m.RequestIndex - } - return 0 -} - -func (m *TxRequestDetailsType) GetTxHash() []byte { - if m != nil { - return m.TxHash - } - return nil -} - -func (m *TxRequestDetailsType) GetExtraDataLen() uint32 { - if m != nil && m.ExtraDataLen != nil { - return *m.ExtraDataLen - } - return 0 -} - -func (m *TxRequestDetailsType) GetExtraDataOffset() uint32 { - if m != nil && m.ExtraDataOffset != nil { - return *m.ExtraDataOffset - } - return 0 -} - -// * -// Structure representing serialized data -// @used_in TxRequest -type TxRequestSerializedType struct { - SignatureIndex *uint32 `protobuf:"varint,1,opt,name=signature_index,json=signatureIndex" json:"signature_index,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - SerializedTx []byte `protobuf:"bytes,3,opt,name=serialized_tx,json=serializedTx" json:"serialized_tx,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *TxRequestSerializedType) Reset() { *m = TxRequestSerializedType{} } -func (m *TxRequestSerializedType) String() string { return proto.CompactTextString(m) } -func (*TxRequestSerializedType) ProtoMessage() {} -func (*TxRequestSerializedType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } - -func (m *TxRequestSerializedType) GetSignatureIndex() uint32 { - if m != nil && m.SignatureIndex != nil { - return *m.SignatureIndex - } - return 0 -} - -func (m *TxRequestSerializedType) GetSignature() []byte { - if m != nil { - return m.Signature - } - return nil -} - -func (m *TxRequestSerializedType) GetSerializedTx() []byte { - if m != nil { - return m.SerializedTx - } - return nil -} - -// * -// Structure representing identity data -// @used_in IdentityType -type IdentityType struct { - Proto *string `protobuf:"bytes,1,opt,name=proto" json:"proto,omitempty"` - User *string `protobuf:"bytes,2,opt,name=user" json:"user,omitempty"` - Host *string `protobuf:"bytes,3,opt,name=host" json:"host,omitempty"` - Port *string `protobuf:"bytes,4,opt,name=port" json:"port,omitempty"` - Path *string `protobuf:"bytes,5,opt,name=path" json:"path,omitempty"` - Index *uint32 `protobuf:"varint,6,opt,name=index,def=0" json:"index,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *IdentityType) Reset() { *m = IdentityType{} } -func (m *IdentityType) String() string { return proto.CompactTextString(m) } -func (*IdentityType) ProtoMessage() {} -func (*IdentityType) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } - -const Default_IdentityType_Index uint32 = 0 - -func (m *IdentityType) GetProto() string { - if m != nil && m.Proto != nil { - return *m.Proto - } - return "" -} - -func (m *IdentityType) GetUser() string { - if m != nil && m.User != nil { - return *m.User - } - return "" -} - -func (m *IdentityType) GetHost() string { - if m != nil && m.Host != nil { - return *m.Host - } - return "" -} - -func (m *IdentityType) GetPort() string { - if m != nil && m.Port != nil { - return *m.Port - } - return "" -} - -func (m *IdentityType) GetPath() string { - if m != nil && m.Path != nil { - return *m.Path - } - return "" -} - -func (m *IdentityType) GetIndex() uint32 { - if m != nil && m.Index != nil { - return *m.Index - } - return Default_IdentityType_Index -} - -var E_WireIn = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50002, - Name: "wire_in", - Tag: "varint,50002,opt,name=wire_in,json=wireIn", - Filename: "types.proto", -} - -var E_WireOut = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50003, - Name: "wire_out", - Tag: "varint,50003,opt,name=wire_out,json=wireOut", - Filename: "types.proto", -} - -var E_WireDebugIn = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50004, - Name: "wire_debug_in", - Tag: "varint,50004,opt,name=wire_debug_in,json=wireDebugIn", - Filename: "types.proto", -} - -var E_WireDebugOut = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50005, - Name: "wire_debug_out", - Tag: "varint,50005,opt,name=wire_debug_out,json=wireDebugOut", - Filename: "types.proto", -} - -var E_WireTiny = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50006, - Name: "wire_tiny", - Tag: "varint,50006,opt,name=wire_tiny,json=wireTiny", - Filename: "types.proto", -} - -var E_WireBootloader = &proto.ExtensionDesc{ - ExtendedType: (*google_protobuf.EnumValueOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 50007, - Name: "wire_bootloader", - Tag: "varint,50007,opt,name=wire_bootloader,json=wireBootloader", - Filename: "types.proto", -} - -func init() { - proto.RegisterType((*HDNodeType)(nil), "HDNodeType") - proto.RegisterType((*HDNodePathType)(nil), "HDNodePathType") - proto.RegisterType((*CoinType)(nil), "CoinType") - proto.RegisterType((*MultisigRedeemScriptType)(nil), "MultisigRedeemScriptType") - proto.RegisterType((*TxInputType)(nil), "TxInputType") - proto.RegisterType((*TxOutputType)(nil), "TxOutputType") - proto.RegisterType((*TxOutputBinType)(nil), "TxOutputBinType") - proto.RegisterType((*TransactionType)(nil), "TransactionType") - proto.RegisterType((*TxRequestDetailsType)(nil), "TxRequestDetailsType") - proto.RegisterType((*TxRequestSerializedType)(nil), "TxRequestSerializedType") - proto.RegisterType((*IdentityType)(nil), "IdentityType") - proto.RegisterEnum("FailureType", FailureType_name, FailureType_value) - proto.RegisterEnum("OutputScriptType", OutputScriptType_name, OutputScriptType_value) - proto.RegisterEnum("InputScriptType", InputScriptType_name, InputScriptType_value) - proto.RegisterEnum("RequestType", RequestType_name, RequestType_value) - proto.RegisterEnum("ButtonRequestType", ButtonRequestType_name, ButtonRequestType_value) - proto.RegisterEnum("PinMatrixRequestType", PinMatrixRequestType_name, PinMatrixRequestType_value) - proto.RegisterEnum("RecoveryDeviceType", RecoveryDeviceType_name, RecoveryDeviceType_value) - proto.RegisterEnum("WordRequestType", WordRequestType_name, WordRequestType_value) - proto.RegisterExtension(E_WireIn) - proto.RegisterExtension(E_WireOut) - proto.RegisterExtension(E_WireDebugIn) - proto.RegisterExtension(E_WireDebugOut) - proto.RegisterExtension(E_WireTiny) - proto.RegisterExtension(E_WireBootloader) -} - -func init() { proto.RegisterFile("types.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 1899 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x57, 0xdb, 0x72, 0x1a, 0xc9, - 0x19, 0xf6, 0x00, 0x92, 0xe0, 0x07, 0xc4, 0xa8, 0x7d, 0xd0, 0x78, 0x6d, 0xaf, 0x31, 0x76, 0x62, - 0x45, 0x55, 0x61, 0x77, 0xc9, 0x5a, 0x8e, 0x55, 0xa9, 0x24, 0x3a, 0xa0, 0x15, 0x65, 0x0b, 0x51, - 0xc3, 0x28, 0x56, 0x72, 0x33, 0x35, 0xcc, 0xb4, 0xa0, 0x4b, 0x43, 0x37, 0xe9, 0xe9, 0x91, 0xd1, - 0xde, 0xe4, 0x2a, 0xc9, 0x55, 0x5e, 0x23, 0x6f, 0x91, 0xaa, 0xbc, 0x41, 0xaa, 0x36, 0xa7, 0xcb, - 0xbc, 0x41, 0xae, 0xf2, 0x00, 0xa9, 0x3e, 0x0c, 0x02, 0xc9, 0xde, 0xd2, 0x1d, 0xfd, 0x7d, 0xff, - 0xf9, 0xd0, 0x3d, 0x40, 0x59, 0x5c, 0x4e, 0x70, 0xd2, 0x9c, 0x70, 0x26, 0xd8, 0x67, 0xf5, 0x21, - 0x63, 0xc3, 0x18, 0x7f, 0xa1, 0x4e, 0x83, 0xf4, 0xec, 0x8b, 0x08, 0x27, 0x21, 0x27, 0x13, 0xc1, - 0xb8, 0x96, 0x68, 0xfc, 0xd5, 0x02, 0x38, 0xdc, 0xef, 0xb2, 0x08, 0x7b, 0x97, 0x13, 0x8c, 0xee, - 0xc1, 0x52, 0x84, 0x27, 0x62, 0xe4, 0x58, 0xf5, 0xdc, 0x46, 0xd5, 0xd5, 0x07, 0x54, 0x87, 0xf2, - 0x19, 0xa1, 0x43, 0xcc, 0x27, 0x9c, 0x50, 0xe1, 0xe4, 0x14, 0x37, 0x0f, 0xa1, 0x47, 0x50, 0x0a, - 0x47, 0x24, 0x8e, 0x7c, 0x9a, 0x8e, 0x9d, 0xbc, 0xe2, 0x8b, 0x0a, 0xe8, 0xa6, 0x63, 0xf4, 0x04, - 0x20, 0x1c, 0x05, 0x84, 0xfa, 0x21, 0x8b, 0xb0, 0x53, 0xa8, 0xe7, 0x36, 0x2a, 0x6e, 0x49, 0x21, - 0x7b, 0x2c, 0xc2, 0xe8, 0x29, 0x94, 0x27, 0x9c, 0x5c, 0x04, 0x02, 0xfb, 0xe7, 0xf8, 0xd2, 0x59, - 0xaa, 0x5b, 0x1b, 0x15, 0x17, 0x0c, 0xf4, 0x16, 0x5f, 0x4a, 0xfd, 0x49, 0x3a, 0x88, 0x49, 0xa8, - 0xf8, 0x65, 0xc5, 0x97, 0x34, 0xf2, 0x16, 0x5f, 0x36, 0xba, 0xb0, 0xaa, 0x33, 0xe8, 0x05, 0x62, - 0xa4, 0xb2, 0x78, 0x0a, 0x05, 0x2a, 0x5d, 0xc9, 0x24, 0xca, 0xad, 0x72, 0xf3, 0x2a, 0x41, 0x57, - 0x11, 0x32, 0xdc, 0x20, 0x8a, 0x38, 0x4e, 0x12, 0x9f, 0x3a, 0xb9, 0x7a, 0x5e, 0x86, 0x6b, 0x80, - 0x6e, 0xe3, 0x7f, 0x39, 0x28, 0xee, 0x31, 0x42, 0x95, 0x29, 0x99, 0x18, 0x23, 0xd4, 0xa7, 0xc1, - 0x58, 0xda, 0xb3, 0x36, 0x4a, 0x6e, 0x51, 0x02, 0xdd, 0x60, 0x8c, 0xd1, 0x73, 0xa8, 0x2a, 0x32, - 0x19, 0x31, 0x2e, 0xc2, 0x54, 0x56, 0x46, 0x0a, 0x54, 0x24, 0xd8, 0x37, 0x18, 0x7a, 0x01, 0x95, - 0xcc, 0x97, 0x6c, 0x8d, 0x93, 0xaf, 0x5b, 0x1b, 0xd5, 0x6d, 0xeb, 0x4b, 0xb7, 0x6c, 0xe0, 0xcc, - 0xcf, 0x38, 0x98, 0x9e, 0x61, 0xec, 0x9f, 0x0f, 0x9c, 0x42, 0xdd, 0xda, 0x28, 0xb8, 0x45, 0x0d, - 0xbc, 0x1d, 0xa0, 0x1f, 0xc3, 0xda, 0xbc, 0x09, 0x7f, 0xd2, 0x4a, 0x46, 0xaa, 0x4e, 0xd5, 0x6d, - 0xeb, 0x95, 0x5b, 0x9b, 0xb3, 0xd3, 0x6b, 0x25, 0x23, 0xd4, 0x82, 0xfb, 0x09, 0x19, 0x52, 0x1c, - 0xf9, 0x63, 0x9c, 0x24, 0xc1, 0x10, 0xfb, 0x23, 0x1c, 0x44, 0x98, 0x3b, 0x45, 0x15, 0xde, 0x5d, - 0x4d, 0x1e, 0x69, 0xee, 0x50, 0x51, 0xe8, 0x25, 0xc0, 0x74, 0x92, 0x0e, 0xfc, 0x71, 0x30, 0x24, - 0xa1, 0x53, 0x52, 0xb6, 0x8b, 0xaf, 0xb7, 0xbe, 0xdc, 0x7a, 0xfd, 0x93, 0x57, 0x3f, 0x75, 0x4b, - 0x92, 0x3b, 0x92, 0x94, 0x16, 0xe4, 0x17, 0x46, 0x10, 0xae, 0x04, 0xb7, 0x5a, 0xaf, 0xb7, 0xa4, - 0x20, 0xbf, 0xd0, 0x82, 0x0f, 0x60, 0x39, 0xc1, 0xc3, 0x0f, 0x44, 0x38, 0xe5, 0xba, 0xb5, 0x51, - 0x74, 0xcd, 0x49, 0xe2, 0x67, 0x8c, 0x9f, 0x93, 0xc8, 0xa9, 0x48, 0x65, 0xd7, 0x9c, 0x1a, 0x09, - 0x38, 0x47, 0x69, 0x2c, 0x48, 0x42, 0x86, 0x2e, 0x8e, 0x30, 0x1e, 0xf7, 0xd5, 0xa4, 0xaa, 0xea, - 0xfc, 0x08, 0x56, 0x26, 0xe9, 0xe0, 0x1c, 0x5f, 0x26, 0x8e, 0x55, 0xcf, 0x6f, 0x94, 0x5b, 0xb5, - 0xe6, 0x62, 0xcb, 0xdd, 0x8c, 0x47, 0x9f, 0x03, 0xc8, 0xfc, 0x02, 0x91, 0x72, 0x9c, 0xa8, 0xde, - 0x56, 0xdc, 0x39, 0x04, 0x55, 0xc0, 0x1a, 0xeb, 0x1e, 0xb8, 0xd6, 0xb8, 0xf1, 0x97, 0x1c, 0x94, - 0xbd, 0x69, 0x87, 0x4e, 0x52, 0x91, 0xb5, 0xe1, 0x6a, 0x30, 0xac, 0xc5, 0xc1, 0x90, 0xe4, 0x84, - 0xe3, 0x0b, 0x7f, 0x14, 0x24, 0x23, 0xb5, 0x04, 0x15, 0xb7, 0x28, 0x81, 0xc3, 0x20, 0x19, 0xa9, - 0x21, 0x95, 0x24, 0xa1, 0x11, 0x9e, 0x9a, 0x15, 0x50, 0xe2, 0x1d, 0x09, 0x48, 0x5a, 0x6f, 0x9e, - 0x9f, 0x90, 0xa1, 0x6a, 0x70, 0xc5, 0x2d, 0x69, 0xa4, 0x4f, 0x86, 0xe8, 0x87, 0x50, 0x4c, 0xf0, - 0x6f, 0x53, 0x4c, 0x43, 0x6c, 0x1a, 0x0b, 0x5f, 0xb7, 0xde, 0x7c, 0xfd, 0x66, 0xeb, 0x75, 0xeb, - 0xcd, 0x2b, 0x77, 0xc6, 0xa1, 0x5f, 0x40, 0xd9, 0x98, 0x51, 0xb3, 0x24, 0x77, 0x61, 0xb5, 0x65, - 0x37, 0x55, 0x02, 0x57, 0xf5, 0xda, 0xae, 0xf4, 0x7b, 0xed, 0xee, 0xfe, 0xce, 0xfe, 0xbe, 0xdb, - 0xee, 0xf7, 0x5d, 0xe3, 0x59, 0x25, 0xf8, 0x0a, 0x8a, 0x63, 0x53, 0x65, 0x67, 0xa5, 0x6e, 0x6d, - 0x94, 0x5b, 0x0f, 0x9b, 0x9f, 0x2a, 0xbb, 0x3b, 0x13, 0x95, 0x4d, 0x0b, 0xc6, 0x2c, 0xa5, 0x42, - 0xcd, 0x50, 0xc1, 0x35, 0xa7, 0xc6, 0x7f, 0x2d, 0xa8, 0x78, 0xd3, 0xe3, 0x54, 0x64, 0x05, 0x74, - 0x60, 0xc5, 0xd4, 0xcb, 0x6c, 0x4b, 0x76, 0xfc, 0xde, 0x9d, 0x9b, 0xb3, 0x2f, 0x2b, 0x37, 0xb3, - 0x8f, 0x5a, 0x8b, 0xf9, 0xca, 0xbb, 0x63, 0xb5, 0xb5, 0xd6, 0xd4, 0x0e, 0xe7, 0x22, 0xfd, 0x54, - 0x8a, 0x4b, 0xb7, 0x4f, 0xf1, 0x05, 0xac, 0xb2, 0x89, 0xcf, 0xb1, 0x48, 0x39, 0xf5, 0xa3, 0x40, - 0x04, 0xe6, 0xa6, 0xa9, 0xb0, 0x89, 0xab, 0xc0, 0xfd, 0x40, 0x04, 0x8d, 0x2e, 0xd4, 0xb2, 0x7c, - 0x77, 0xcd, 0x15, 0x71, 0x15, 0xbb, 0xb5, 0x10, 0xfb, 0x73, 0xa8, 0x9a, 0xd8, 0xf5, 0x6c, 0x9a, - 0x91, 0xa9, 0x68, 0xb0, 0xa7, 0xb0, 0xc6, 0xdf, 0x72, 0x50, 0xf3, 0x78, 0x40, 0x93, 0x20, 0x14, - 0x84, 0xd1, 0xac, 0x86, 0x17, 0x98, 0x27, 0x84, 0x51, 0x55, 0xc3, 0xaa, 0x9b, 0x1d, 0xd1, 0x0b, - 0x58, 0x26, 0xb2, 0xd5, 0x7a, 0xb0, 0xcb, 0xad, 0x4a, 0x73, 0x6e, 0x78, 0x5d, 0xc3, 0xa1, 0xaf, - 0xa0, 0x3c, 0x20, 0xd4, 0x67, 0x2a, 0xca, 0xc4, 0xc9, 0x2b, 0x51, 0xbb, 0x79, 0x2d, 0x6e, 0x17, - 0x06, 0x84, 0x6a, 0x24, 0x41, 0x2f, 0x61, 0x25, 0x13, 0x5f, 0x52, 0xe2, 0xd5, 0xe6, 0x7c, 0x5b, - 0xdd, 0x8c, 0x95, 0x5d, 0x8c, 0x59, 0x78, 0xee, 0x0b, 0x32, 0xc6, 0x6a, 0x8c, 0xab, 0x6e, 0x51, - 0x02, 0x1e, 0x19, 0x63, 0x39, 0xe4, 0x3a, 0x04, 0x3f, 0xa4, 0x42, 0x95, 0xaf, 0xea, 0x96, 0x34, - 0xb2, 0x47, 0x85, 0xbc, 0xe8, 0x8d, 0x19, 0xc5, 0xaf, 0x28, 0x1e, 0x0c, 0x24, 0x05, 0x9e, 0x00, - 0xe0, 0xa9, 0xe0, 0x81, 0x2e, 0x7f, 0x51, 0x2f, 0x89, 0x42, 0x64, 0xed, 0x65, 0x87, 0xae, 0x68, - 0x3f, 0xc6, 0x54, 0xdf, 0x53, 0x6e, 0x65, 0x26, 0xf2, 0x0e, 0xd3, 0xc6, 0x9f, 0x2d, 0xb8, 0xe7, - 0x4d, 0x5d, 0xb9, 0x31, 0x89, 0xd8, 0xc7, 0x22, 0x20, 0xb1, 0xbe, 0x62, 0x9f, 0x43, 0x95, 0x6b, - 0xd4, 0x2c, 0xa9, 0x2e, 0x6e, 0xc5, 0x80, 0x7a, 0x4f, 0xd7, 0x61, 0x45, 0x4c, 0xb3, 0x0d, 0x97, - 0xfe, 0x97, 0xc5, 0x54, 0xed, 0xf7, 0x4d, 0xe7, 0xf9, 0x9b, 0xce, 0xd1, 0x26, 0xac, 0xcd, 0x49, - 0xb1, 0xb3, 0xb3, 0x04, 0x0b, 0x53, 0xa6, 0xda, 0x4c, 0xf0, 0x58, 0xc1, 0x8d, 0xdf, 0x5b, 0xb0, - 0x3e, 0x0b, 0xb4, 0x8f, 0x39, 0x09, 0x62, 0xf2, 0x2d, 0x8e, 0x54, 0xac, 0x2f, 0xa1, 0x36, 0xbb, - 0xb3, 0x16, 0xa2, 0x5d, 0x9d, 0xc1, 0x3a, 0xde, 0xc7, 0x50, 0x9a, 0x21, 0x26, 0xe2, 0x2b, 0x40, - 0x8d, 0xe0, 0xcc, 0xb0, 0x2f, 0xa6, 0x2a, 0x66, 0x39, 0x82, 0x57, 0xde, 0xa6, 0x8d, 0x3f, 0x59, - 0x50, 0xe9, 0x44, 0x98, 0x0a, 0x22, 0x2e, 0xb3, 0x8f, 0x00, 0xf5, 0x71, 0x60, 0x36, 0x58, 0x1f, - 0x10, 0x82, 0x42, 0x9a, 0x60, 0x6e, 0xde, 0x38, 0xf5, 0x5b, 0x62, 0x23, 0x96, 0x08, 0x65, 0xb6, - 0xe4, 0xaa, 0xdf, 0x12, 0x9b, 0x30, 0xae, 0xb3, 0x2e, 0xb9, 0xea, 0xb7, 0xc2, 0x02, 0xa1, 0xdf, - 0x2c, 0x89, 0x05, 0x62, 0x84, 0xd6, 0x61, 0x49, 0x27, 0xb6, 0x9c, 0x3d, 0x88, 0xfa, 0xbc, 0xf9, - 0x5d, 0x0e, 0xca, 0x07, 0x01, 0x89, 0x53, 0xae, 0xbf, 0x49, 0x9e, 0xc0, 0x43, 0x73, 0xf4, 0x4f, - 0x28, 0x9e, 0x4e, 0x70, 0x28, 0x66, 0xaf, 0x97, 0x6d, 0xa1, 0xcf, 0xe0, 0x41, 0x46, 0xef, 0xa6, - 0x42, 0x30, 0xda, 0x36, 0x22, 0x76, 0x0e, 0xdd, 0x87, 0xb5, 0x8c, 0x93, 0x85, 0x6f, 0x73, 0xce, - 0xb8, 0x9d, 0x47, 0x8f, 0x60, 0x3d, 0x83, 0x77, 0xd4, 0xda, 0xed, 0x05, 0x34, 0xc4, 0x71, 0x8c, - 0x23, 0xbb, 0x80, 0xd6, 0xe1, 0x6e, 0x46, 0xf6, 0xc8, 0x95, 0xb1, 0x25, 0xe4, 0xc0, 0xbd, 0x39, - 0xe2, 0x4a, 0x65, 0x19, 0x3d, 0x00, 0x34, 0xc7, 0x74, 0xe8, 0x45, 0x10, 0x93, 0xc8, 0x5e, 0x41, - 0x8f, 0xc1, 0xc9, 0x70, 0x03, 0xf6, 0xb3, 0xd6, 0xd8, 0xc5, 0x05, 0x7b, 0x9c, 0x85, 0x38, 0x49, - 0x74, 0x7c, 0xa5, 0xf9, 0x94, 0xba, 0x4c, 0xb4, 0x29, 0x4b, 0x87, 0xa3, 0x83, 0x94, 0x46, 0x89, - 0x0d, 0xd7, 0xb8, 0x0e, 0x25, 0xc2, 0x74, 0xd2, 0x2e, 0xa3, 0x87, 0x70, 0x3f, 0xe3, 0x0e, 0x08, - 0x1f, 0x7f, 0x08, 0x38, 0xd6, 0x26, 0xc3, 0xcd, 0x3f, 0x5a, 0x60, 0x5f, 0xbf, 0x35, 0x91, 0x0d, - 0x95, 0xde, 0xce, 0xaf, 0xbd, 0x63, 0xf3, 0x50, 0xd8, 0x77, 0xd0, 0x5d, 0xa8, 0x29, 0xa4, 0xbf, - 0xe7, 0x76, 0x7a, 0xde, 0xe1, 0x4e, 0xff, 0xd0, 0xb6, 0xd0, 0x1a, 0x54, 0x15, 0x78, 0x74, 0xf2, - 0xce, 0xeb, 0xf4, 0x3b, 0xdf, 0xd8, 0xb9, 0x19, 0x74, 0xdc, 0x73, 0xdb, 0xde, 0x89, 0xdb, 0xb5, - 0xf3, 0x33, 0x63, 0xef, 0x3b, 0x5e, 0x57, 0x1a, 0x2b, 0xa0, 0x7b, 0x60, 0x2b, 0xa4, 0xd7, 0xea, - 0x1f, 0x66, 0xe8, 0xd2, 0x66, 0x0c, 0xb5, 0x6b, 0xcf, 0x95, 0x54, 0x9d, 0x7f, 0xb0, 0xec, 0x3b, - 0xd2, 0xbe, 0x42, 0x66, 0x2e, 0x2d, 0x54, 0x81, 0x62, 0xfb, 0xd4, 0x6b, 0xbb, 0xdd, 0x9d, 0x77, - 0x76, 0x6e, 0xa6, 0x92, 0xd9, 0xcd, 0x4b, 0x6f, 0x0a, 0x99, 0xf7, 0x56, 0xd8, 0x3c, 0x81, 0xb2, - 0xd9, 0x30, 0xe5, 0xa9, 0x0c, 0x2b, 0xde, 0x69, 0xa7, 0xdb, 0x3b, 0xf1, 0xec, 0x3b, 0xd2, 0xa2, - 0x77, 0x7a, 0x7c, 0xe2, 0xc9, 0x93, 0x85, 0x00, 0x96, 0xbd, 0xd3, 0xa3, 0xb6, 0xb7, 0x63, 0xe7, - 0xd0, 0x2a, 0x80, 0x77, 0x7a, 0xd0, 0xe9, 0x76, 0xfa, 0x87, 0xed, 0x7d, 0x3b, 0x8f, 0x6a, 0x50, - 0xf6, 0x4e, 0xdb, 0xa7, 0x9e, 0xbb, 0xb3, 0xbf, 0xe3, 0xed, 0xd8, 0x85, 0xcd, 0xff, 0xe4, 0x60, - 0x4d, 0x4f, 0xdb, 0xbc, 0xf5, 0x75, 0xb8, 0xbb, 0x00, 0xfa, 0xc7, 0x62, 0x84, 0xb9, 0x6d, 0xa1, - 0x06, 0x7c, 0xbe, 0x48, 0x1c, 0x60, 0x7c, 0x7c, 0x81, 0xb9, 0x37, 0xe2, 0x38, 0x19, 0xb1, 0x58, - 0xce, 0xea, 0x53, 0x78, 0xb4, 0x28, 0xb3, 0xc7, 0xe8, 0x19, 0xe1, 0x63, 0xdd, 0x35, 0x3b, 0x2f, - 0xf7, 0x60, 0x51, 0xc0, 0xc5, 0x09, 0x16, 0xfb, 0xf8, 0x82, 0x84, 0xd8, 0x2e, 0xdc, 0xa4, 0x8d, - 0xfe, 0x7b, 0xc6, 0xe5, 0xf4, 0x3e, 0x06, 0x67, 0x91, 0x7e, 0x4f, 0x26, 0xd8, 0x28, 0x2f, 0xdf, - 0x54, 0xee, 0x71, 0x26, 0x70, 0x28, 0xf6, 0x82, 0x38, 0xb6, 0x57, 0xe4, 0xa8, 0x2e, 0xd2, 0x72, - 0x8e, 0xbd, 0xa9, 0x5d, 0xbc, 0x19, 0x75, 0x36, 0x78, 0x7b, 0x23, 0x1c, 0x9e, 0xdb, 0x25, 0x39, - 0x93, 0x8b, 0x02, 0x3b, 0xfa, 0xcd, 0xb7, 0x41, 0xae, 0xe1, 0x35, 0xa7, 0xd9, 0x37, 0xbd, 0x5d, - 0xde, 0xfc, 0x1d, 0xdc, 0xeb, 0x11, 0x7a, 0x14, 0x08, 0x4e, 0xa6, 0xf3, 0x35, 0xae, 0xc3, 0xe3, - 0x8f, 0xe1, 0xfe, 0x5e, 0xca, 0x39, 0xa6, 0xc2, 0xb6, 0xd0, 0x33, 0x78, 0xf2, 0x51, 0x89, 0x2e, - 0xfe, 0x70, 0x40, 0x78, 0x22, 0xec, 0x9c, 0xec, 0xc7, 0xa7, 0x44, 0xfa, 0x38, 0x64, 0x34, 0xb2, - 0xf3, 0x9b, 0xbf, 0x01, 0xe4, 0xe2, 0x90, 0x5d, 0x60, 0x7e, 0xa9, 0xcb, 0xa4, 0xdc, 0xff, 0x00, - 0x9e, 0xdd, 0x44, 0xfd, 0x7e, 0xc8, 0x83, 0xf1, 0x20, 0xc6, 0x91, 0x2c, 0x76, 0x62, 0xdf, 0x91, - 0xf5, 0xfc, 0x88, 0x98, 0x76, 0x68, 0x5b, 0x9b, 0x67, 0x50, 0x93, 0x92, 0xf3, 0x79, 0x3d, 0x84, - 0xfb, 0xd7, 0x20, 0xbf, 0x17, 0x07, 0x84, 0xda, 0x77, 0x64, 0x9d, 0xae, 0x53, 0xda, 0xd2, 0x1b, - 0xdb, 0xfa, 0x34, 0xb9, 0x65, 0xe7, 0xb6, 0x7f, 0x06, 0x2b, 0x1f, 0x88, 0x7a, 0x41, 0xd0, 0xb3, - 0xa6, 0xfe, 0x2f, 0xd8, 0xcc, 0xfe, 0x0b, 0x36, 0xdb, 0x34, 0x1d, 0xff, 0x2a, 0x88, 0x53, 0x7c, - 0x3c, 0x91, 0x77, 0x60, 0xe2, 0x7c, 0xf7, 0x87, 0xbc, 0xfe, 0x52, 0x97, 0x3a, 0x1d, 0xba, 0xfd, - 0x73, 0x28, 0x2a, 0x6d, 0x96, 0x8a, 0xdb, 0xa8, 0xff, 0xdd, 0xa8, 0x2b, 0x97, 0xc7, 0xa9, 0xd8, - 0xfe, 0x06, 0xaa, 0x4a, 0x3f, 0xc2, 0x83, 0x74, 0x78, 0xcb, 0x18, 0xfe, 0x61, 0x8c, 0x94, 0xa5, - 0xe6, 0xbe, 0x54, 0xec, 0xd0, 0xed, 0x0e, 0xac, 0xce, 0x19, 0xba, 0x65, 0x38, 0xff, 0x34, 0x96, - 0x2a, 0x33, 0x4b, 0x32, 0xa6, 0x5f, 0x42, 0x49, 0x99, 0x12, 0x84, 0x5e, 0xde, 0xc6, 0xca, 0xbf, - 0x8c, 0x15, 0x55, 0x09, 0x8f, 0xd0, 0xcb, 0xed, 0x77, 0x50, 0x53, 0x16, 0x06, 0x8c, 0x89, 0x98, - 0xa9, 0x3f, 0x4f, 0xb7, 0xb0, 0xf3, 0x6f, 0x63, 0x47, 0x25, 0xb2, 0x3b, 0x53, 0xdd, 0xfd, 0x0a, - 0x9e, 0x87, 0x6c, 0xdc, 0x4c, 0x02, 0xc1, 0x92, 0x11, 0x89, 0x83, 0x41, 0xd2, 0x14, 0x1c, 0x7f, - 0xcb, 0x78, 0x33, 0x26, 0x83, 0x99, 0xbd, 0x5d, 0xf0, 0x14, 0x28, 0xdb, 0xfb, 0xff, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x70, 0x88, 0xcd, 0x71, 0xe2, 0x0f, 0x00, 0x00, -} diff --git a/accounts/usbwallet/internal/trezor/types.proto b/accounts/usbwallet/internal/trezor/types.proto deleted file mode 100644 index acbe79e3ffd0..000000000000 --- a/accounts/usbwallet/internal/trezor/types.proto +++ /dev/null @@ -1,278 +0,0 @@ -// This file originates from the SatoshiLabs Trezor `common` repository at: -// https://github.com/trezor/trezor-common/blob/master/protob/types.proto -// dated 28.07.2017, commit dd8ec3231fb5f7992360aff9bdfe30bb58130f4b. - -syntax = "proto2"; - -/** - * Types for TREZOR communication - * - * @author Marek Palatinus - * @version 1.2 - */ - -// Sugar for easier handling in Java -option java_package = "com.satoshilabs.trezor.lib.protobuf"; -option java_outer_classname = "TrezorType"; - -import "google/protobuf/descriptor.proto"; - -/** - * Options for specifying message direction and type of wire (normal/debug) - */ -extend google.protobuf.EnumValueOptions { - optional bool wire_in = 50002; // message can be transmitted via wire from PC to TREZOR - optional bool wire_out = 50003; // message can be transmitted via wire from TREZOR to PC - optional bool wire_debug_in = 50004; // message can be transmitted via debug wire from PC to TREZOR - optional bool wire_debug_out = 50005; // message can be transmitted via debug wire from TREZOR to PC - optional bool wire_tiny = 50006; // message is handled by TREZOR when the USB stack is in tiny mode - optional bool wire_bootloader = 50007; // message is only handled by TREZOR Bootloader -} - -/** - * Type of failures returned by Failure message - * @used_in Failure - */ -enum FailureType { - Failure_UnexpectedMessage = 1; - Failure_ButtonExpected = 2; - Failure_DataError = 3; - Failure_ActionCancelled = 4; - Failure_PinExpected = 5; - Failure_PinCancelled = 6; - Failure_PinInvalid = 7; - Failure_InvalidSignature = 8; - Failure_ProcessError = 9; - Failure_NotEnoughFunds = 10; - Failure_NotInitialized = 11; - Failure_FirmwareError = 99; -} - -/** - * Type of script which will be used for transaction output - * @used_in TxOutputType - */ -enum OutputScriptType { - PAYTOADDRESS = 0; // used for all addresses (bitcoin, p2sh, witness) - PAYTOSCRIPTHASH = 1; // p2sh address (deprecated; use PAYTOADDRESS) - PAYTOMULTISIG = 2; // only for change output - PAYTOOPRETURN = 3; // op_return - PAYTOWITNESS = 4; // only for change output - PAYTOP2SHWITNESS = 5; // only for change output -} - -/** - * Type of script which will be used for transaction output - * @used_in TxInputType - */ -enum InputScriptType { - SPENDADDRESS = 0; // standard p2pkh address - SPENDMULTISIG = 1; // p2sh multisig address - EXTERNAL = 2; // reserved for external inputs (coinjoin) - SPENDWITNESS = 3; // native segwit - SPENDP2SHWITNESS = 4; // segwit over p2sh (backward compatible) -} - -/** - * Type of information required by transaction signing process - * @used_in TxRequest - */ -enum RequestType { - TXINPUT = 0; - TXOUTPUT = 1; - TXMETA = 2; - TXFINISHED = 3; - TXEXTRADATA = 4; -} - -/** - * Type of button request - * @used_in ButtonRequest - */ -enum ButtonRequestType { - ButtonRequest_Other = 1; - ButtonRequest_FeeOverThreshold = 2; - ButtonRequest_ConfirmOutput = 3; - ButtonRequest_ResetDevice = 4; - ButtonRequest_ConfirmWord = 5; - ButtonRequest_WipeDevice = 6; - ButtonRequest_ProtectCall = 7; - ButtonRequest_SignTx = 8; - ButtonRequest_FirmwareCheck = 9; - ButtonRequest_Address = 10; - ButtonRequest_PublicKey = 11; -} - -/** - * Type of PIN request - * @used_in PinMatrixRequest - */ -enum PinMatrixRequestType { - PinMatrixRequestType_Current = 1; - PinMatrixRequestType_NewFirst = 2; - PinMatrixRequestType_NewSecond = 3; -} - -/** - * Type of recovery procedure. These should be used as bitmask, e.g., - * `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` - * listing every method supported by the host computer. - * - * Note that ScrambledWords must be supported by every implementation - * for backward compatibility; there is no way to not support it. - * - * @used_in RecoveryDevice - */ -enum RecoveryDeviceType { - // use powers of two when extending this field - RecoveryDeviceType_ScrambledWords = 0; // words in scrambled order - RecoveryDeviceType_Matrix = 1; // matrix recovery type -} - -/** - * Type of Recovery Word request - * @used_in WordRequest - */ -enum WordRequestType { - WordRequestType_Plain = 0; - WordRequestType_Matrix9 = 1; - WordRequestType_Matrix6 = 2; -} - -/** - * Structure representing BIP32 (hierarchical deterministic) node - * Used for imports of private key into the device and exporting public key out of device - * @used_in PublicKey - * @used_in LoadDevice - * @used_in DebugLinkState - * @used_in Storage - */ -message HDNodeType { - required uint32 depth = 1; - required uint32 fingerprint = 2; - required uint32 child_num = 3; - required bytes chain_code = 4; - optional bytes private_key = 5; - optional bytes public_key = 6; -} - -message HDNodePathType { - required HDNodeType node = 1; // BIP-32 node in deserialized form - repeated uint32 address_n = 2; // BIP-32 path to derive the key from node -} - -/** - * Structure representing Coin - * @used_in Features - */ -message CoinType { - optional string coin_name = 1; - optional string coin_shortcut = 2; - optional uint32 address_type = 3 [default=0]; - optional uint64 maxfee_kb = 4; - optional uint32 address_type_p2sh = 5 [default=5]; - optional string signed_message_header = 8; - optional uint32 xpub_magic = 9 [default=76067358]; // default=0x0488b21e - optional uint32 xprv_magic = 10 [default=76066276]; // default=0x0488ade4 - optional bool segwit = 11; - optional uint32 forkid = 12; -} - -/** - * Type of redeem script used in input - * @used_in TxInputType - */ -message MultisigRedeemScriptType { - repeated HDNodePathType pubkeys = 1; // pubkeys from multisig address (sorted lexicographically) - repeated bytes signatures = 2; // existing signatures for partially signed input - optional uint32 m = 3; // "m" from n, how many valid signatures is necessary for spending -} - -/** - * Structure representing transaction input - * @used_in SimpleSignTx - * @used_in TransactionType - */ -message TxInputType { - repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node - required bytes prev_hash = 2; // hash of previous transaction output to spend by this input - required uint32 prev_index = 3; // index of previous output to spend - optional bytes script_sig = 4; // script signature, unset for tx to sign - optional uint32 sequence = 5 [default=4294967295]; // sequence (default=0xffffffff) - optional InputScriptType script_type = 6 [default=SPENDADDRESS]; // defines template of input script - optional MultisigRedeemScriptType multisig = 7; // Filled if input is going to spend multisig tx - optional uint64 amount = 8; // amount of previous transaction output (for segwit only) -} - -/** - * Structure representing transaction output - * @used_in SimpleSignTx - * @used_in TransactionType - */ -message TxOutputType { - optional string address = 1; // target coin address in Base58 encoding - repeated uint32 address_n = 2; // BIP-32 path to derive the key from master node; has higher priority than "address" - required uint64 amount = 3; // amount to spend in satoshis - required OutputScriptType script_type = 4; // output script type - optional MultisigRedeemScriptType multisig = 5; // defines multisig address; script_type must be PAYTOMULTISIG - optional bytes op_return_data = 6; // defines op_return data; script_type must be PAYTOOPRETURN, amount must be 0 -} - -/** - * Structure representing compiled transaction output - * @used_in TransactionType - */ -message TxOutputBinType { - required uint64 amount = 1; - required bytes script_pubkey = 2; -} - -/** - * Structure representing transaction - * @used_in SimpleSignTx - */ -message TransactionType { - optional uint32 version = 1; - repeated TxInputType inputs = 2; - repeated TxOutputBinType bin_outputs = 3; - repeated TxOutputType outputs = 5; - optional uint32 lock_time = 4; - optional uint32 inputs_cnt = 6; - optional uint32 outputs_cnt = 7; - optional bytes extra_data = 8; - optional uint32 extra_data_len = 9; -} - -/** - * Structure representing request details - * @used_in TxRequest - */ -message TxRequestDetailsType { - optional uint32 request_index = 1; // device expects TxAck message from the computer - optional bytes tx_hash = 2; // tx_hash of requested transaction - optional uint32 extra_data_len = 3; // length of requested extra data - optional uint32 extra_data_offset = 4; // offset of requested extra data -} - -/** - * Structure representing serialized data - * @used_in TxRequest - */ -message TxRequestSerializedType { - optional uint32 signature_index = 1; // 'signature' field contains signed input of this index - optional bytes signature = 2; // signature of the signature_index input - optional bytes serialized_tx = 3; // part of serialized and signed transaction -} - -/** - * Structure representing identity data - * @used_in IdentityType - */ -message IdentityType { - optional string proto = 1; // proto part of URI - optional string user = 2; // user part of URI - optional string host = 3; // host part of URI - optional string port = 4; // port part of URI - optional string path = 5; // path part of URI - optional uint32 index = 6 [default=0]; // identity index -} diff --git a/accounts/usbwallet/ledger.go b/accounts/usbwallet/ledger.go index c30903b5b769..17ca9223ffe5 100644 --- a/accounts/usbwallet/ledger.go +++ b/accounts/usbwallet/ledger.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) @@ -341,7 +342,7 @@ func (w *ledgerDriver) ledgerSign(derivationPath []uint32, tx *types.Transaction op = ledgerP1ContTransactionData } // Extract the Ethereum signature and do a sanity validation - if len(reply) != 65 { + if len(reply) != crypto.SignatureLength { return common.Address{}, nil, errors.New("reply lacks signature") } signature := append(reply[1:], reply[0]) diff --git a/accounts/usbwallet/offline.go b/accounts/usbwallet/offline.go index e3d3363abaed..6b28aa1a85ee 100644 --- a/accounts/usbwallet/offline.go +++ b/accounts/usbwallet/offline.go @@ -25,14 +25,14 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" - "github.com/karalabe/hid" + "github.com/karalabe/usb" ) // a simple wrapper for offline use, mainly for Close() type offlineWallet struct { driver driver - info hid.DeviceInfo - device *hid.Device + info usb.DeviceInfo + device usb.Device log log.Logger } @@ -108,7 +108,11 @@ func ListDevices(scheme string) []string { if len(scheme) > 0 && hub.scheme != scheme { continue } - for _, info := range hid.Enumerate(hub.vendorID, 0) { + infos, err := usb.Enumerate(hub.vendorID, 0) + if err != nil { + break + } + for _, info := range infos { for _, id := range hub.productIDs { if info.ProductID == id && (info.UsagePage == hub.usageID || info.Interface == hub.endpointID) { devices = append(devices, info.Path) @@ -139,7 +143,11 @@ func OpenOffline(scheme, path string) (interface{}, error) { if hub.scheme != scheme { continue } - for _, info := range hid.Enumerate(hub.vendorID, 0) { + infos, err := usb.Enumerate(hub.vendorID, 0) + if err != nil { + break + } + for _, info := range infos { if info.Path == path { if scheme == TrezorScheme && info.Interface == -1 { // Trezor 2. It's going to hang. Stop here. diff --git a/accounts/usbwallet/trezor.go b/accounts/usbwallet/trezor.go index a9d2e9959eb7..1892097baf65 100644 --- a/accounts/usbwallet/trezor.go +++ b/accounts/usbwallet/trezor.go @@ -28,7 +28,7 @@ import ( "math/big" "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/usbwallet/internal/trezor" + "github.com/ethereum/go-ethereum/accounts/usbwallet/trezor" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" @@ -41,6 +41,9 @@ import ( // encoded passphrase. var ErrTrezorPINNeeded = errors.New("trezor: pin needed") +// ErrTrezorPassphraseNeeded is returned if opening the trezor requires a passphrase +var ErrTrezorPassphraseNeeded = errors.New("trezor: passphrase needed") + // errTrezorReplyInvalidHeader is the error message returned by a Trezor data exchange // if the device replies with a mismatching header. This usually means the device // is in browser mode. @@ -48,12 +51,13 @@ var errTrezorReplyInvalidHeader = errors.New("trezor: invalid reply header") // trezorDriver implements the communication with a Trezor hardware wallet. type trezorDriver struct { - device io.ReadWriter // USB device connection to communicate through - version [3]uint32 // Current version of the Trezor firmware - label string // Current textual label of the Trezor device - pinwait bool // Flags whether the device is waiting for PIN entry - failure error // Any failure that would make the device unusable - log log.Logger // Contextual logger to tag the trezor with its id + device io.ReadWriter // USB device connection to communicate through + version [3]uint32 // Current version of the Trezor firmware + label string // Current textual label of the Trezor device + pinwait bool // Flags whether the device is waiting for PIN entry + passphrasewait bool // Flags whether the device is waiting for passphrase entry + failure error // Any failure that would make the device unusable + log log.Logger // Contextual logger to tag the trezor with its id } // newTrezorDriver creates a new instance of a Trezor USB protocol driver. @@ -79,19 +83,21 @@ func (w *trezorDriver) Status() (string, error) { } // Open implements usbwallet.driver, attempting to initialize the connection to -// the Trezor hardware wallet. Initializing the Trezor is a two phase operation: +// the Trezor hardware wallet. Initializing the Trezor is a two or three phase operation: // * The first phase is to initialize the connection and read the wallet's -// features. This phase is invoked is the provided passphrase is empty. The +// features. This phase is invoked if the provided passphrase is empty. The // device will display the pinpad as a result and will return an appropriate // error to notify the user that a second open phase is needed. // * The second phase is to unlock access to the Trezor, which is done by the // user actually providing a passphrase mapping a keyboard keypad to the pin // number of the user (shuffled according to the pinpad displayed). +// * If needed the device will ask for passphrase which will require calling +// open again with the actual passphrase (3rd phase) func (w *trezorDriver) Open(device io.ReadWriter, passphrase string) error { w.device, w.failure = device, nil // If phase 1 is requested, init the connection and wait for user callback - if passphrase == "" { + if passphrase == "" && !w.passphrasewait { // If we're already waiting for a PIN entry, insta-return if w.pinwait { return ErrTrezorPINNeeded @@ -104,26 +110,46 @@ func (w *trezorDriver) Open(device io.ReadWriter, passphrase string) error { w.version = [3]uint32{features.GetMajorVersion(), features.GetMinorVersion(), features.GetPatchVersion()} w.label = features.GetLabel() - // Do a manual ping, forcing the device to ask for its PIN + // Do a manual ping, forcing the device to ask for its PIN and Passphrase askPin := true - res, err := w.trezorExchange(&trezor.Ping{PinProtection: &askPin}, new(trezor.PinMatrixRequest), new(trezor.Success)) + askPassphrase := true + res, err := w.trezorExchange(&trezor.Ping{PinProtection: &askPin, PassphraseProtection: &askPassphrase}, new(trezor.PinMatrixRequest), new(trezor.PassphraseRequest), new(trezor.Success)) if err != nil { return err } // Only return the PIN request if the device wasn't unlocked until now - if res == 1 { - return nil // Device responded with trezor.Success + switch res { + case 0: + w.pinwait = true + return ErrTrezorPINNeeded + case 1: + w.pinwait = false + w.passphrasewait = true + return ErrTrezorPassphraseNeeded + case 2: + return nil // responded with trezor.Success } - w.pinwait = true - return ErrTrezorPINNeeded } // Phase 2 requested with actual PIN entry - w.pinwait = false - - if _, err := w.trezorExchange(&trezor.PinMatrixAck{Pin: &passphrase}, new(trezor.Success)); err != nil { - w.failure = err - return err + if w.pinwait { + w.pinwait = false + res, err := w.trezorExchange(&trezor.PinMatrixAck{Pin: &passphrase}, new(trezor.Success), new(trezor.PassphraseRequest)) + if err != nil { + w.failure = err + return err + } + if res == 1 { + w.passphrasewait = true + return ErrTrezorPassphraseNeeded + } + } else if w.passphrasewait { + w.passphrasewait = false + if _, err := w.trezorExchange(&trezor.PassphraseAck{Passphrase: &passphrase}, new(trezor.Success)); err != nil { + w.failure = err + return err + } } + return nil } @@ -166,7 +192,13 @@ func (w *trezorDriver) trezorDerive(derivationPath []uint32) (common.Address, er if _, err := w.trezorExchange(&trezor.EthereumGetAddress{AddressN: derivationPath}, address); err != nil { return common.Address{}, err } - return common.BytesToAddress(address.GetAddress()), nil + if addr := address.GetAddressBin(); len(addr) > 0 { // Older firmwares use binary fomats + return common.BytesToAddress(addr), nil + } + if addr := address.GetAddressHex(); len(addr) > 0 { // Newer firmwares use hexadecimal fomats + return common.HexToAddress(addr), nil + } + return common.Address{}, errors.New("missing derived address") } // trezorSign sends the transaction to the Trezor wallet, and waits for the user @@ -185,7 +217,10 @@ func (w *trezorDriver) trezorSign(derivationPath []uint32, tx *types.Transaction DataLength: &length, } if to := tx.To(); to != nil { - request.To = (*to)[:] // Non contract deploy, set recipient explicitly + // Non contract deploy, set recipient explicitly + hex := to.Hex() + request.ToHex = &hex // Newer firmwares (old will ignore) + request.ToBin = (*to)[:] // Older firmwares (new will ignore) } if length > 1024 { // Send the data chunked if that was requested request.DataInitialChunk, data = data[:1024], data[1024:] diff --git a/accounts/usbwallet/trezor/messages-common.pb.go b/accounts/usbwallet/trezor/messages-common.pb.go new file mode 100644 index 000000000000..304bec0e360a --- /dev/null +++ b/accounts/usbwallet/trezor/messages-common.pb.go @@ -0,0 +1,811 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: messages-common.proto + +package trezor + +import ( + fmt "fmt" + math "math" + + proto "github.com/golang/protobuf/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +type Failure_FailureType int32 + +const ( + Failure_Failure_UnexpectedMessage Failure_FailureType = 1 + Failure_Failure_ButtonExpected Failure_FailureType = 2 + Failure_Failure_DataError Failure_FailureType = 3 + Failure_Failure_ActionCancelled Failure_FailureType = 4 + Failure_Failure_PinExpected Failure_FailureType = 5 + Failure_Failure_PinCancelled Failure_FailureType = 6 + Failure_Failure_PinInvalid Failure_FailureType = 7 + Failure_Failure_InvalidSignature Failure_FailureType = 8 + Failure_Failure_ProcessError Failure_FailureType = 9 + Failure_Failure_NotEnoughFunds Failure_FailureType = 10 + Failure_Failure_NotInitialized Failure_FailureType = 11 + Failure_Failure_PinMismatch Failure_FailureType = 12 + Failure_Failure_FirmwareError Failure_FailureType = 99 +) + +var Failure_FailureType_name = map[int32]string{ + 1: "Failure_UnexpectedMessage", + 2: "Failure_ButtonExpected", + 3: "Failure_DataError", + 4: "Failure_ActionCancelled", + 5: "Failure_PinExpected", + 6: "Failure_PinCancelled", + 7: "Failure_PinInvalid", + 8: "Failure_InvalidSignature", + 9: "Failure_ProcessError", + 10: "Failure_NotEnoughFunds", + 11: "Failure_NotInitialized", + 12: "Failure_PinMismatch", + 99: "Failure_FirmwareError", +} + +var Failure_FailureType_value = map[string]int32{ + "Failure_UnexpectedMessage": 1, + "Failure_ButtonExpected": 2, + "Failure_DataError": 3, + "Failure_ActionCancelled": 4, + "Failure_PinExpected": 5, + "Failure_PinCancelled": 6, + "Failure_PinInvalid": 7, + "Failure_InvalidSignature": 8, + "Failure_ProcessError": 9, + "Failure_NotEnoughFunds": 10, + "Failure_NotInitialized": 11, + "Failure_PinMismatch": 12, + "Failure_FirmwareError": 99, +} + +func (x Failure_FailureType) Enum() *Failure_FailureType { + p := new(Failure_FailureType) + *p = x + return p +} + +func (x Failure_FailureType) String() string { + return proto.EnumName(Failure_FailureType_name, int32(x)) +} + +func (x *Failure_FailureType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Failure_FailureType_value, data, "Failure_FailureType") + if err != nil { + return err + } + *x = Failure_FailureType(value) + return nil +} + +func (Failure_FailureType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{1, 0} +} + +//* +// Type of button request +type ButtonRequest_ButtonRequestType int32 + +const ( + ButtonRequest_ButtonRequest_Other ButtonRequest_ButtonRequestType = 1 + ButtonRequest_ButtonRequest_FeeOverThreshold ButtonRequest_ButtonRequestType = 2 + ButtonRequest_ButtonRequest_ConfirmOutput ButtonRequest_ButtonRequestType = 3 + ButtonRequest_ButtonRequest_ResetDevice ButtonRequest_ButtonRequestType = 4 + ButtonRequest_ButtonRequest_ConfirmWord ButtonRequest_ButtonRequestType = 5 + ButtonRequest_ButtonRequest_WipeDevice ButtonRequest_ButtonRequestType = 6 + ButtonRequest_ButtonRequest_ProtectCall ButtonRequest_ButtonRequestType = 7 + ButtonRequest_ButtonRequest_SignTx ButtonRequest_ButtonRequestType = 8 + ButtonRequest_ButtonRequest_FirmwareCheck ButtonRequest_ButtonRequestType = 9 + ButtonRequest_ButtonRequest_Address ButtonRequest_ButtonRequestType = 10 + ButtonRequest_ButtonRequest_PublicKey ButtonRequest_ButtonRequestType = 11 + ButtonRequest_ButtonRequest_MnemonicWordCount ButtonRequest_ButtonRequestType = 12 + ButtonRequest_ButtonRequest_MnemonicInput ButtonRequest_ButtonRequestType = 13 + ButtonRequest_ButtonRequest_PassphraseType ButtonRequest_ButtonRequestType = 14 + ButtonRequest_ButtonRequest_UnknownDerivationPath ButtonRequest_ButtonRequestType = 15 +) + +var ButtonRequest_ButtonRequestType_name = map[int32]string{ + 1: "ButtonRequest_Other", + 2: "ButtonRequest_FeeOverThreshold", + 3: "ButtonRequest_ConfirmOutput", + 4: "ButtonRequest_ResetDevice", + 5: "ButtonRequest_ConfirmWord", + 6: "ButtonRequest_WipeDevice", + 7: "ButtonRequest_ProtectCall", + 8: "ButtonRequest_SignTx", + 9: "ButtonRequest_FirmwareCheck", + 10: "ButtonRequest_Address", + 11: "ButtonRequest_PublicKey", + 12: "ButtonRequest_MnemonicWordCount", + 13: "ButtonRequest_MnemonicInput", + 14: "ButtonRequest_PassphraseType", + 15: "ButtonRequest_UnknownDerivationPath", +} + +var ButtonRequest_ButtonRequestType_value = map[string]int32{ + "ButtonRequest_Other": 1, + "ButtonRequest_FeeOverThreshold": 2, + "ButtonRequest_ConfirmOutput": 3, + "ButtonRequest_ResetDevice": 4, + "ButtonRequest_ConfirmWord": 5, + "ButtonRequest_WipeDevice": 6, + "ButtonRequest_ProtectCall": 7, + "ButtonRequest_SignTx": 8, + "ButtonRequest_FirmwareCheck": 9, + "ButtonRequest_Address": 10, + "ButtonRequest_PublicKey": 11, + "ButtonRequest_MnemonicWordCount": 12, + "ButtonRequest_MnemonicInput": 13, + "ButtonRequest_PassphraseType": 14, + "ButtonRequest_UnknownDerivationPath": 15, +} + +func (x ButtonRequest_ButtonRequestType) Enum() *ButtonRequest_ButtonRequestType { + p := new(ButtonRequest_ButtonRequestType) + *p = x + return p +} + +func (x ButtonRequest_ButtonRequestType) String() string { + return proto.EnumName(ButtonRequest_ButtonRequestType_name, int32(x)) +} + +func (x *ButtonRequest_ButtonRequestType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(ButtonRequest_ButtonRequestType_value, data, "ButtonRequest_ButtonRequestType") + if err != nil { + return err + } + *x = ButtonRequest_ButtonRequestType(value) + return nil +} + +func (ButtonRequest_ButtonRequestType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{2, 0} +} + +//* +// Type of PIN request +type PinMatrixRequest_PinMatrixRequestType int32 + +const ( + PinMatrixRequest_PinMatrixRequestType_Current PinMatrixRequest_PinMatrixRequestType = 1 + PinMatrixRequest_PinMatrixRequestType_NewFirst PinMatrixRequest_PinMatrixRequestType = 2 + PinMatrixRequest_PinMatrixRequestType_NewSecond PinMatrixRequest_PinMatrixRequestType = 3 +) + +var PinMatrixRequest_PinMatrixRequestType_name = map[int32]string{ + 1: "PinMatrixRequestType_Current", + 2: "PinMatrixRequestType_NewFirst", + 3: "PinMatrixRequestType_NewSecond", +} + +var PinMatrixRequest_PinMatrixRequestType_value = map[string]int32{ + "PinMatrixRequestType_Current": 1, + "PinMatrixRequestType_NewFirst": 2, + "PinMatrixRequestType_NewSecond": 3, +} + +func (x PinMatrixRequest_PinMatrixRequestType) Enum() *PinMatrixRequest_PinMatrixRequestType { + p := new(PinMatrixRequest_PinMatrixRequestType) + *p = x + return p +} + +func (x PinMatrixRequest_PinMatrixRequestType) String() string { + return proto.EnumName(PinMatrixRequest_PinMatrixRequestType_name, int32(x)) +} + +func (x *PinMatrixRequest_PinMatrixRequestType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(PinMatrixRequest_PinMatrixRequestType_value, data, "PinMatrixRequest_PinMatrixRequestType") + if err != nil { + return err + } + *x = PinMatrixRequest_PinMatrixRequestType(value) + return nil +} + +func (PinMatrixRequest_PinMatrixRequestType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{4, 0} +} + +//* +// Response: Success of the previous request +// @end +type Success struct { + Message *string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Success) Reset() { *m = Success{} } +func (m *Success) String() string { return proto.CompactTextString(m) } +func (*Success) ProtoMessage() {} +func (*Success) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{0} +} + +func (m *Success) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Success.Unmarshal(m, b) +} +func (m *Success) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Success.Marshal(b, m, deterministic) +} +func (m *Success) XXX_Merge(src proto.Message) { + xxx_messageInfo_Success.Merge(m, src) +} +func (m *Success) XXX_Size() int { + return xxx_messageInfo_Success.Size(m) +} +func (m *Success) XXX_DiscardUnknown() { + xxx_messageInfo_Success.DiscardUnknown(m) +} + +var xxx_messageInfo_Success proto.InternalMessageInfo + +func (m *Success) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +//* +// Response: Failure of the previous request +// @end +type Failure struct { + Code *Failure_FailureType `protobuf:"varint,1,opt,name=code,enum=hw.trezor.messages.common.Failure_FailureType" json:"code,omitempty"` + Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Failure) Reset() { *m = Failure{} } +func (m *Failure) String() string { return proto.CompactTextString(m) } +func (*Failure) ProtoMessage() {} +func (*Failure) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{1} +} + +func (m *Failure) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Failure.Unmarshal(m, b) +} +func (m *Failure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Failure.Marshal(b, m, deterministic) +} +func (m *Failure) XXX_Merge(src proto.Message) { + xxx_messageInfo_Failure.Merge(m, src) +} +func (m *Failure) XXX_Size() int { + return xxx_messageInfo_Failure.Size(m) +} +func (m *Failure) XXX_DiscardUnknown() { + xxx_messageInfo_Failure.DiscardUnknown(m) +} + +var xxx_messageInfo_Failure proto.InternalMessageInfo + +func (m *Failure) GetCode() Failure_FailureType { + if m != nil && m.Code != nil { + return *m.Code + } + return Failure_Failure_UnexpectedMessage +} + +func (m *Failure) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +//* +// Response: Device is waiting for HW button press. +// @auxstart +// @next ButtonAck +type ButtonRequest struct { + Code *ButtonRequest_ButtonRequestType `protobuf:"varint,1,opt,name=code,enum=hw.trezor.messages.common.ButtonRequest_ButtonRequestType" json:"code,omitempty"` + Data *string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ButtonRequest) Reset() { *m = ButtonRequest{} } +func (m *ButtonRequest) String() string { return proto.CompactTextString(m) } +func (*ButtonRequest) ProtoMessage() {} +func (*ButtonRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{2} +} + +func (m *ButtonRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ButtonRequest.Unmarshal(m, b) +} +func (m *ButtonRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ButtonRequest.Marshal(b, m, deterministic) +} +func (m *ButtonRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ButtonRequest.Merge(m, src) +} +func (m *ButtonRequest) XXX_Size() int { + return xxx_messageInfo_ButtonRequest.Size(m) +} +func (m *ButtonRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ButtonRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ButtonRequest proto.InternalMessageInfo + +func (m *ButtonRequest) GetCode() ButtonRequest_ButtonRequestType { + if m != nil && m.Code != nil { + return *m.Code + } + return ButtonRequest_ButtonRequest_Other +} + +func (m *ButtonRequest) GetData() string { + if m != nil && m.Data != nil { + return *m.Data + } + return "" +} + +//* +// Request: Computer agrees to wait for HW button press +// @auxend +type ButtonAck struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ButtonAck) Reset() { *m = ButtonAck{} } +func (m *ButtonAck) String() string { return proto.CompactTextString(m) } +func (*ButtonAck) ProtoMessage() {} +func (*ButtonAck) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{3} +} + +func (m *ButtonAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ButtonAck.Unmarshal(m, b) +} +func (m *ButtonAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ButtonAck.Marshal(b, m, deterministic) +} +func (m *ButtonAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_ButtonAck.Merge(m, src) +} +func (m *ButtonAck) XXX_Size() int { + return xxx_messageInfo_ButtonAck.Size(m) +} +func (m *ButtonAck) XXX_DiscardUnknown() { + xxx_messageInfo_ButtonAck.DiscardUnknown(m) +} + +var xxx_messageInfo_ButtonAck proto.InternalMessageInfo + +//* +// Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme +// @auxstart +// @next PinMatrixAck +type PinMatrixRequest struct { + Type *PinMatrixRequest_PinMatrixRequestType `protobuf:"varint,1,opt,name=type,enum=hw.trezor.messages.common.PinMatrixRequest_PinMatrixRequestType" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PinMatrixRequest) Reset() { *m = PinMatrixRequest{} } +func (m *PinMatrixRequest) String() string { return proto.CompactTextString(m) } +func (*PinMatrixRequest) ProtoMessage() {} +func (*PinMatrixRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{4} +} + +func (m *PinMatrixRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PinMatrixRequest.Unmarshal(m, b) +} +func (m *PinMatrixRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PinMatrixRequest.Marshal(b, m, deterministic) +} +func (m *PinMatrixRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PinMatrixRequest.Merge(m, src) +} +func (m *PinMatrixRequest) XXX_Size() int { + return xxx_messageInfo_PinMatrixRequest.Size(m) +} +func (m *PinMatrixRequest) XXX_DiscardUnknown() { + xxx_messageInfo_PinMatrixRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_PinMatrixRequest proto.InternalMessageInfo + +func (m *PinMatrixRequest) GetType() PinMatrixRequest_PinMatrixRequestType { + if m != nil && m.Type != nil { + return *m.Type + } + return PinMatrixRequest_PinMatrixRequestType_Current +} + +//* +// Request: Computer responds with encoded PIN +// @auxend +type PinMatrixAck struct { + Pin *string `protobuf:"bytes,1,req,name=pin" json:"pin,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PinMatrixAck) Reset() { *m = PinMatrixAck{} } +func (m *PinMatrixAck) String() string { return proto.CompactTextString(m) } +func (*PinMatrixAck) ProtoMessage() {} +func (*PinMatrixAck) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{5} +} + +func (m *PinMatrixAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PinMatrixAck.Unmarshal(m, b) +} +func (m *PinMatrixAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PinMatrixAck.Marshal(b, m, deterministic) +} +func (m *PinMatrixAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_PinMatrixAck.Merge(m, src) +} +func (m *PinMatrixAck) XXX_Size() int { + return xxx_messageInfo_PinMatrixAck.Size(m) +} +func (m *PinMatrixAck) XXX_DiscardUnknown() { + xxx_messageInfo_PinMatrixAck.DiscardUnknown(m) +} + +var xxx_messageInfo_PinMatrixAck proto.InternalMessageInfo + +func (m *PinMatrixAck) GetPin() string { + if m != nil && m.Pin != nil { + return *m.Pin + } + return "" +} + +//* +// Response: Device awaits encryption passphrase +// @auxstart +// @next PassphraseAck +type PassphraseRequest struct { + OnDevice *bool `protobuf:"varint,1,opt,name=on_device,json=onDevice" json:"on_device,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PassphraseRequest) Reset() { *m = PassphraseRequest{} } +func (m *PassphraseRequest) String() string { return proto.CompactTextString(m) } +func (*PassphraseRequest) ProtoMessage() {} +func (*PassphraseRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{6} +} + +func (m *PassphraseRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PassphraseRequest.Unmarshal(m, b) +} +func (m *PassphraseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PassphraseRequest.Marshal(b, m, deterministic) +} +func (m *PassphraseRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PassphraseRequest.Merge(m, src) +} +func (m *PassphraseRequest) XXX_Size() int { + return xxx_messageInfo_PassphraseRequest.Size(m) +} +func (m *PassphraseRequest) XXX_DiscardUnknown() { + xxx_messageInfo_PassphraseRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_PassphraseRequest proto.InternalMessageInfo + +func (m *PassphraseRequest) GetOnDevice() bool { + if m != nil && m.OnDevice != nil { + return *m.OnDevice + } + return false +} + +//* +// Request: Send passphrase back +// @next PassphraseStateRequest +type PassphraseAck struct { + Passphrase *string `protobuf:"bytes,1,opt,name=passphrase" json:"passphrase,omitempty"` + State []byte `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PassphraseAck) Reset() { *m = PassphraseAck{} } +func (m *PassphraseAck) String() string { return proto.CompactTextString(m) } +func (*PassphraseAck) ProtoMessage() {} +func (*PassphraseAck) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{7} +} + +func (m *PassphraseAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PassphraseAck.Unmarshal(m, b) +} +func (m *PassphraseAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PassphraseAck.Marshal(b, m, deterministic) +} +func (m *PassphraseAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_PassphraseAck.Merge(m, src) +} +func (m *PassphraseAck) XXX_Size() int { + return xxx_messageInfo_PassphraseAck.Size(m) +} +func (m *PassphraseAck) XXX_DiscardUnknown() { + xxx_messageInfo_PassphraseAck.DiscardUnknown(m) +} + +var xxx_messageInfo_PassphraseAck proto.InternalMessageInfo + +func (m *PassphraseAck) GetPassphrase() string { + if m != nil && m.Passphrase != nil { + return *m.Passphrase + } + return "" +} + +func (m *PassphraseAck) GetState() []byte { + if m != nil { + return m.State + } + return nil +} + +//* +// Response: Device awaits passphrase state +// @next PassphraseStateAck +type PassphraseStateRequest struct { + State []byte `protobuf:"bytes,1,opt,name=state" json:"state,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PassphraseStateRequest) Reset() { *m = PassphraseStateRequest{} } +func (m *PassphraseStateRequest) String() string { return proto.CompactTextString(m) } +func (*PassphraseStateRequest) ProtoMessage() {} +func (*PassphraseStateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{8} +} + +func (m *PassphraseStateRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PassphraseStateRequest.Unmarshal(m, b) +} +func (m *PassphraseStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PassphraseStateRequest.Marshal(b, m, deterministic) +} +func (m *PassphraseStateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_PassphraseStateRequest.Merge(m, src) +} +func (m *PassphraseStateRequest) XXX_Size() int { + return xxx_messageInfo_PassphraseStateRequest.Size(m) +} +func (m *PassphraseStateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_PassphraseStateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_PassphraseStateRequest proto.InternalMessageInfo + +func (m *PassphraseStateRequest) GetState() []byte { + if m != nil { + return m.State + } + return nil +} + +//* +// Request: Send passphrase state back +// @auxend +type PassphraseStateAck struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PassphraseStateAck) Reset() { *m = PassphraseStateAck{} } +func (m *PassphraseStateAck) String() string { return proto.CompactTextString(m) } +func (*PassphraseStateAck) ProtoMessage() {} +func (*PassphraseStateAck) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{9} +} + +func (m *PassphraseStateAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_PassphraseStateAck.Unmarshal(m, b) +} +func (m *PassphraseStateAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_PassphraseStateAck.Marshal(b, m, deterministic) +} +func (m *PassphraseStateAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_PassphraseStateAck.Merge(m, src) +} +func (m *PassphraseStateAck) XXX_Size() int { + return xxx_messageInfo_PassphraseStateAck.Size(m) +} +func (m *PassphraseStateAck) XXX_DiscardUnknown() { + xxx_messageInfo_PassphraseStateAck.DiscardUnknown(m) +} + +var xxx_messageInfo_PassphraseStateAck proto.InternalMessageInfo + +//* +// Structure representing BIP32 (hierarchical deterministic) node +// Used for imports of private key into the device and exporting public key out of device +// @embed +type HDNodeType struct { + Depth *uint32 `protobuf:"varint,1,req,name=depth" json:"depth,omitempty"` + Fingerprint *uint32 `protobuf:"varint,2,req,name=fingerprint" json:"fingerprint,omitempty"` + ChildNum *uint32 `protobuf:"varint,3,req,name=child_num,json=childNum" json:"child_num,omitempty"` + ChainCode []byte `protobuf:"bytes,4,req,name=chain_code,json=chainCode" json:"chain_code,omitempty"` + PrivateKey []byte `protobuf:"bytes,5,opt,name=private_key,json=privateKey" json:"private_key,omitempty"` + PublicKey []byte `protobuf:"bytes,6,opt,name=public_key,json=publicKey" json:"public_key,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *HDNodeType) Reset() { *m = HDNodeType{} } +func (m *HDNodeType) String() string { return proto.CompactTextString(m) } +func (*HDNodeType) ProtoMessage() {} +func (*HDNodeType) Descriptor() ([]byte, []int) { + return fileDescriptor_aaf30d059fdbc38d, []int{10} +} + +func (m *HDNodeType) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_HDNodeType.Unmarshal(m, b) +} +func (m *HDNodeType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_HDNodeType.Marshal(b, m, deterministic) +} +func (m *HDNodeType) XXX_Merge(src proto.Message) { + xxx_messageInfo_HDNodeType.Merge(m, src) +} +func (m *HDNodeType) XXX_Size() int { + return xxx_messageInfo_HDNodeType.Size(m) +} +func (m *HDNodeType) XXX_DiscardUnknown() { + xxx_messageInfo_HDNodeType.DiscardUnknown(m) +} + +var xxx_messageInfo_HDNodeType proto.InternalMessageInfo + +func (m *HDNodeType) GetDepth() uint32 { + if m != nil && m.Depth != nil { + return *m.Depth + } + return 0 +} + +func (m *HDNodeType) GetFingerprint() uint32 { + if m != nil && m.Fingerprint != nil { + return *m.Fingerprint + } + return 0 +} + +func (m *HDNodeType) GetChildNum() uint32 { + if m != nil && m.ChildNum != nil { + return *m.ChildNum + } + return 0 +} + +func (m *HDNodeType) GetChainCode() []byte { + if m != nil { + return m.ChainCode + } + return nil +} + +func (m *HDNodeType) GetPrivateKey() []byte { + if m != nil { + return m.PrivateKey + } + return nil +} + +func (m *HDNodeType) GetPublicKey() []byte { + if m != nil { + return m.PublicKey + } + return nil +} + +func init() { + proto.RegisterEnum("hw.trezor.messages.common.Failure_FailureType", Failure_FailureType_name, Failure_FailureType_value) + proto.RegisterEnum("hw.trezor.messages.common.ButtonRequest_ButtonRequestType", ButtonRequest_ButtonRequestType_name, ButtonRequest_ButtonRequestType_value) + proto.RegisterEnum("hw.trezor.messages.common.PinMatrixRequest_PinMatrixRequestType", PinMatrixRequest_PinMatrixRequestType_name, PinMatrixRequest_PinMatrixRequestType_value) + proto.RegisterType((*Success)(nil), "hw.trezor.messages.common.Success") + proto.RegisterType((*Failure)(nil), "hw.trezor.messages.common.Failure") + proto.RegisterType((*ButtonRequest)(nil), "hw.trezor.messages.common.ButtonRequest") + proto.RegisterType((*ButtonAck)(nil), "hw.trezor.messages.common.ButtonAck") + proto.RegisterType((*PinMatrixRequest)(nil), "hw.trezor.messages.common.PinMatrixRequest") + proto.RegisterType((*PinMatrixAck)(nil), "hw.trezor.messages.common.PinMatrixAck") + proto.RegisterType((*PassphraseRequest)(nil), "hw.trezor.messages.common.PassphraseRequest") + proto.RegisterType((*PassphraseAck)(nil), "hw.trezor.messages.common.PassphraseAck") + proto.RegisterType((*PassphraseStateRequest)(nil), "hw.trezor.messages.common.PassphraseStateRequest") + proto.RegisterType((*PassphraseStateAck)(nil), "hw.trezor.messages.common.PassphraseStateAck") + proto.RegisterType((*HDNodeType)(nil), "hw.trezor.messages.common.HDNodeType") +} + +func init() { proto.RegisterFile("messages-common.proto", fileDescriptor_aaf30d059fdbc38d) } + +var fileDescriptor_aaf30d059fdbc38d = []byte{ + // 846 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x52, 0x23, 0x37, + 0x10, 0x2e, 0xff, 0x80, 0xed, 0xb6, 0xd9, 0x08, 0xc5, 0x80, 0x09, 0xb0, 0x38, 0xc3, 0x21, 0x5c, + 0xe2, 0x4a, 0xe5, 0x98, 0x53, 0x58, 0x83, 0x2b, 0xd4, 0x16, 0x86, 0x1a, 0xd8, 0xda, 0xa3, 0x4b, + 0xd1, 0xf4, 0x32, 0x2a, 0xcf, 0x48, 0x13, 0x8d, 0x06, 0xf0, 0x5e, 0xf2, 0x6a, 0x79, 0x89, 0xbc, + 0x42, 0xaa, 0x52, 0xb9, 0xe4, 0x11, 0xb6, 0x34, 0x3f, 0x78, 0xc6, 0x66, 0x39, 0xcd, 0xe8, 0xfb, + 0xbe, 0xee, 0x96, 0xba, 0x3f, 0x09, 0x76, 0x42, 0x8c, 0x63, 0x76, 0x8f, 0xf1, 0x8f, 0x5c, 0x85, + 0xa1, 0x92, 0xa3, 0x48, 0x2b, 0xa3, 0xe8, 0xbe, 0xff, 0x38, 0x32, 0x1a, 0x3f, 0x2b, 0x3d, 0x2a, + 0x04, 0xa3, 0x4c, 0xe0, 0x9c, 0x40, 0xeb, 0x36, 0xe1, 0x1c, 0xe3, 0x98, 0x0e, 0xa0, 0x95, 0xb3, + 0x83, 0xda, 0xb0, 0x76, 0xda, 0x71, 0x8b, 0xa5, 0xf3, 0x77, 0x03, 0x5a, 0x13, 0x26, 0x82, 0x44, + 0x23, 0x7d, 0x07, 0x4d, 0xae, 0xbc, 0x4c, 0xf2, 0xe6, 0xe7, 0xd1, 0xe8, 0xab, 0xa9, 0x47, 0x79, + 0x44, 0xf1, 0xbd, 0x5b, 0x44, 0xe8, 0xa6, 0xb1, 0xe5, 0x4a, 0xf5, 0x6a, 0xa5, 0xff, 0xea, 0xd0, + 0x2d, 0xe9, 0xe9, 0x11, 0xec, 0xe7, 0xcb, 0xd9, 0x07, 0x89, 0x4f, 0x11, 0x72, 0x83, 0xde, 0x55, + 0x26, 0x26, 0x35, 0xfa, 0x1d, 0xec, 0x16, 0xf4, 0xbb, 0xc4, 0x18, 0x25, 0x2f, 0x72, 0x09, 0xa9, + 0xd3, 0x1d, 0xd8, 0x2e, 0xb8, 0x73, 0x66, 0xd8, 0x85, 0xd6, 0x4a, 0x93, 0x06, 0x3d, 0x80, 0xbd, + 0x02, 0x3e, 0xe3, 0x46, 0x28, 0x39, 0x66, 0x92, 0x63, 0x10, 0xa0, 0x47, 0x9a, 0x74, 0x0f, 0xbe, + 0x2d, 0xc8, 0x1b, 0xb1, 0x4c, 0xb6, 0x41, 0x07, 0xd0, 0x2f, 0x11, 0xcb, 0x90, 0x4d, 0xba, 0x0b, + 0xb4, 0xc4, 0x5c, 0xca, 0x07, 0x16, 0x08, 0x8f, 0xb4, 0xe8, 0x21, 0x0c, 0x0a, 0x3c, 0x07, 0x6f, + 0xc5, 0xbd, 0x64, 0x26, 0xd1, 0x48, 0xda, 0x95, 0x7c, 0x5a, 0xd9, 0xf6, 0x67, 0xfb, 0xeb, 0x94, + 0x8f, 0x34, 0x55, 0xe6, 0x42, 0xaa, 0xe4, 0xde, 0x9f, 0x24, 0xd2, 0x8b, 0x09, 0xac, 0x70, 0x97, + 0x52, 0x18, 0xc1, 0x02, 0xf1, 0x19, 0x3d, 0xd2, 0x5d, 0xd9, 0xfa, 0x95, 0x88, 0x43, 0x66, 0xb8, + 0x4f, 0x7a, 0x74, 0x1f, 0x76, 0x0a, 0x62, 0x22, 0x74, 0xf8, 0xc8, 0x34, 0x66, 0xb5, 0xb8, 0xf3, + 0x4f, 0x13, 0xb6, 0xb2, 0xbe, 0xb9, 0xf8, 0x47, 0x82, 0xb1, 0xa1, 0xd3, 0xca, 0x74, 0x7f, 0x79, + 0x65, 0xba, 0x95, 0xb8, 0xea, 0xaa, 0x34, 0x69, 0x0a, 0x4d, 0x8f, 0x19, 0x96, 0x8f, 0x39, 0xfd, + 0x77, 0xfe, 0x6f, 0xc0, 0xf6, 0x9a, 0xde, 0xee, 0xbf, 0x02, 0xce, 0xae, 0x8d, 0x8f, 0x9a, 0xd4, + 0xa8, 0x03, 0x6f, 0xab, 0xc4, 0x04, 0xf1, 0xfa, 0x01, 0xf5, 0x9d, 0xaf, 0x31, 0xf6, 0x55, 0x60, + 0x67, 0x7d, 0x0c, 0x07, 0x55, 0xcd, 0x58, 0xc9, 0x4f, 0x42, 0x87, 0xd7, 0x89, 0x89, 0x12, 0x43, + 0x1a, 0xd6, 0x47, 0x55, 0x81, 0x8b, 0x31, 0x9a, 0x73, 0x7c, 0x10, 0x1c, 0x49, 0x73, 0x9d, 0xce, + 0xe3, 0x3f, 0x2a, 0x6d, 0xa7, 0x7f, 0x08, 0x83, 0x2a, 0xfd, 0x51, 0x44, 0x98, 0x07, 0x6f, 0xae, + 0x07, 0xdf, 0x68, 0x65, 0x90, 0x9b, 0x31, 0x0b, 0x02, 0xd2, 0xb2, 0xa3, 0xae, 0xd2, 0xd6, 0x07, + 0x77, 0x4f, 0xa4, 0xbd, 0xbe, 0xeb, 0x62, 0x3e, 0x63, 0x1f, 0xf9, 0x9c, 0x74, 0xec, 0xe8, 0xaa, + 0x82, 0x33, 0xcf, 0xd3, 0x18, 0x5b, 0x2b, 0x1c, 0xc0, 0xde, 0x4a, 0xd1, 0xe4, 0xf7, 0x40, 0xf0, + 0xf7, 0xb8, 0x20, 0x5d, 0x7a, 0x02, 0xc7, 0x55, 0xf2, 0x4a, 0x62, 0xa8, 0xa4, 0xe0, 0xf6, 0x3c, + 0x63, 0x95, 0x48, 0x43, 0x7a, 0xeb, 0xd5, 0x0b, 0xd1, 0xa5, 0xb4, 0x3d, 0xdb, 0xa2, 0x43, 0x38, + 0x5c, 0x29, 0xc1, 0xe2, 0x38, 0xf2, 0x35, 0x8b, 0xd3, 0xbb, 0x49, 0xde, 0xd0, 0x1f, 0xe0, 0xa4, + 0xaa, 0xf8, 0x20, 0xe7, 0x52, 0x3d, 0xca, 0x73, 0xd4, 0xe2, 0x81, 0xd9, 0xcb, 0x75, 0xc3, 0x8c, + 0x4f, 0xbe, 0x71, 0xba, 0xd0, 0xc9, 0x84, 0x67, 0x7c, 0xee, 0xfc, 0x5b, 0x03, 0x62, 0x2d, 0xca, + 0x8c, 0x16, 0x4f, 0x85, 0xf1, 0xee, 0xa0, 0x69, 0x16, 0x51, 0x61, 0xbc, 0x5f, 0x5f, 0x31, 0xde, + 0x6a, 0xe8, 0x1a, 0x90, 0xd9, 0xcf, 0x66, 0x73, 0xfe, 0x84, 0xfe, 0x4b, 0xac, 0x3d, 0xda, 0x4b, + 0xf8, 0x6c, 0x9c, 0x68, 0x8d, 0xd2, 0x90, 0x1a, 0xfd, 0x1e, 0x8e, 0x5e, 0x54, 0x4c, 0xf1, 0x71, + 0x22, 0x74, 0x6c, 0x48, 0xdd, 0x1a, 0xf3, 0x6b, 0x92, 0x5b, 0xe4, 0x4a, 0x7a, 0xa4, 0xe1, 0x0c, + 0xa1, 0xf7, 0xac, 0x39, 0xe3, 0x73, 0x4a, 0xa0, 0x11, 0x09, 0x39, 0xa8, 0x0d, 0xeb, 0xa7, 0x1d, + 0xd7, 0xfe, 0x3a, 0x3f, 0xc1, 0xf6, 0xb2, 0xaf, 0x45, 0x37, 0x0e, 0xa0, 0xa3, 0xe4, 0xcc, 0x4b, + 0x1d, 0x96, 0xb6, 0xa4, 0xed, 0xb6, 0x95, 0xcc, 0x1c, 0xe7, 0x5c, 0xc0, 0xd6, 0x32, 0xc2, 0x26, + 0x7d, 0x0b, 0x10, 0x3d, 0x03, 0xf9, 0xdb, 0x5d, 0x42, 0x68, 0x1f, 0x36, 0x62, 0xc3, 0x4c, 0xf6, + 0xd8, 0xf6, 0xdc, 0x6c, 0xe1, 0x8c, 0x60, 0x77, 0x99, 0xe6, 0xd6, 0x42, 0x45, 0xf5, 0x67, 0x7d, + 0xad, 0xac, 0xef, 0x03, 0x5d, 0xd1, 0xdb, 0x61, 0xfe, 0x55, 0x03, 0xf8, 0xed, 0x7c, 0xaa, 0xbc, + 0xec, 0xbd, 0xee, 0xc3, 0x86, 0x87, 0x91, 0xf1, 0xd3, 0x13, 0x6e, 0xb9, 0xd9, 0x82, 0x0e, 0xa1, + 0xfb, 0x49, 0xc8, 0x7b, 0xd4, 0x91, 0x16, 0xd2, 0x0c, 0xea, 0x29, 0x57, 0x86, 0xec, 0x81, 0xb9, + 0x2f, 0x02, 0x6f, 0x26, 0x93, 0x70, 0xd0, 0x48, 0xf9, 0x76, 0x0a, 0x4c, 0x93, 0x90, 0x1e, 0x01, + 0x70, 0x9f, 0x09, 0x39, 0x4b, 0x9f, 0xa6, 0xe6, 0xb0, 0x7e, 0xda, 0x73, 0x3b, 0x29, 0x32, 0xb6, + 0x6f, 0xcc, 0x31, 0x74, 0xa3, 0xd4, 0x6f, 0x38, 0x9b, 0xe3, 0x62, 0xb0, 0x91, 0x6e, 0x1a, 0x72, + 0xe8, 0x3d, 0x2e, 0x6c, 0x7c, 0x94, 0xde, 0x8e, 0x94, 0xdf, 0x4c, 0xf9, 0x4e, 0x54, 0xdc, 0x97, + 0x2f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x7d, 0x20, 0xa6, 0x35, 0x07, 0x00, 0x00, +} diff --git a/accounts/usbwallet/trezor/messages-common.proto b/accounts/usbwallet/trezor/messages-common.proto new file mode 100644 index 000000000000..75a983b0a3e5 --- /dev/null +++ b/accounts/usbwallet/trezor/messages-common.proto @@ -0,0 +1,147 @@ +// This file originates from the SatoshiLabs Trezor `common` repository at: +// https://github.com/trezor/trezor-common/blob/master/protob/messages-common.proto +// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. + +syntax = "proto2"; +package hw.trezor.messages.common; + +/** + * Response: Success of the previous request + * @end + */ +message Success { + optional string message = 1; // human readable description of action or request-specific payload +} + +/** + * Response: Failure of the previous request + * @end + */ +message Failure { + optional FailureType code = 1; // computer-readable definition of the error state + optional string message = 2; // human-readable message of the error state + enum FailureType { + Failure_UnexpectedMessage = 1; + Failure_ButtonExpected = 2; + Failure_DataError = 3; + Failure_ActionCancelled = 4; + Failure_PinExpected = 5; + Failure_PinCancelled = 6; + Failure_PinInvalid = 7; + Failure_InvalidSignature = 8; + Failure_ProcessError = 9; + Failure_NotEnoughFunds = 10; + Failure_NotInitialized = 11; + Failure_PinMismatch = 12; + Failure_FirmwareError = 99; + } +} + +/** + * Response: Device is waiting for HW button press. + * @auxstart + * @next ButtonAck + */ +message ButtonRequest { + optional ButtonRequestType code = 1; + optional string data = 2; + /** + * Type of button request + */ + enum ButtonRequestType { + ButtonRequest_Other = 1; + ButtonRequest_FeeOverThreshold = 2; + ButtonRequest_ConfirmOutput = 3; + ButtonRequest_ResetDevice = 4; + ButtonRequest_ConfirmWord = 5; + ButtonRequest_WipeDevice = 6; + ButtonRequest_ProtectCall = 7; + ButtonRequest_SignTx = 8; + ButtonRequest_FirmwareCheck = 9; + ButtonRequest_Address = 10; + ButtonRequest_PublicKey = 11; + ButtonRequest_MnemonicWordCount = 12; + ButtonRequest_MnemonicInput = 13; + ButtonRequest_PassphraseType = 14; + ButtonRequest_UnknownDerivationPath = 15; + } +} + +/** + * Request: Computer agrees to wait for HW button press + * @auxend + */ +message ButtonAck { +} + +/** + * Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme + * @auxstart + * @next PinMatrixAck + */ +message PinMatrixRequest { + optional PinMatrixRequestType type = 1; + /** + * Type of PIN request + */ + enum PinMatrixRequestType { + PinMatrixRequestType_Current = 1; + PinMatrixRequestType_NewFirst = 2; + PinMatrixRequestType_NewSecond = 3; + } +} + +/** + * Request: Computer responds with encoded PIN + * @auxend + */ +message PinMatrixAck { + required string pin = 1; // matrix encoded PIN entered by user +} + +/** + * Response: Device awaits encryption passphrase + * @auxstart + * @next PassphraseAck + */ +message PassphraseRequest { + optional bool on_device = 1; // passphrase is being entered on the device +} + +/** + * Request: Send passphrase back + * @next PassphraseStateRequest + */ +message PassphraseAck { + optional string passphrase = 1; + optional bytes state = 2; // expected device state +} + +/** + * Response: Device awaits passphrase state + * @next PassphraseStateAck + */ +message PassphraseStateRequest { + optional bytes state = 1; // actual device state +} + +/** + * Request: Send passphrase state back + * @auxend + */ +message PassphraseStateAck { +} + +/** + * Structure representing BIP32 (hierarchical deterministic) node + * Used for imports of private key into the device and exporting public key out of device + * @embed + */ +message HDNodeType { + required uint32 depth = 1; + required uint32 fingerprint = 2; + required uint32 child_num = 3; + required bytes chain_code = 4; + optional bytes private_key = 5; + optional bytes public_key = 6; +} diff --git a/accounts/usbwallet/trezor/messages-ethereum.pb.go b/accounts/usbwallet/trezor/messages-ethereum.pb.go new file mode 100644 index 000000000000..5d664f5ba447 --- /dev/null +++ b/accounts/usbwallet/trezor/messages-ethereum.pb.go @@ -0,0 +1,698 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: messages-ethereum.proto + +package trezor + +import ( + fmt "fmt" + math "math" + + proto "github.com/golang/protobuf/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +//* +// Request: Ask device for public key corresponding to address_n path +// @start +// @next EthereumPublicKey +// @next Failure +type EthereumGetPublicKey struct { + AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` + ShowDisplay *bool `protobuf:"varint,2,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumGetPublicKey) Reset() { *m = EthereumGetPublicKey{} } +func (m *EthereumGetPublicKey) String() string { return proto.CompactTextString(m) } +func (*EthereumGetPublicKey) ProtoMessage() {} +func (*EthereumGetPublicKey) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{0} +} + +func (m *EthereumGetPublicKey) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumGetPublicKey.Unmarshal(m, b) +} +func (m *EthereumGetPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumGetPublicKey.Marshal(b, m, deterministic) +} +func (m *EthereumGetPublicKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumGetPublicKey.Merge(m, src) +} +func (m *EthereumGetPublicKey) XXX_Size() int { + return xxx_messageInfo_EthereumGetPublicKey.Size(m) +} +func (m *EthereumGetPublicKey) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumGetPublicKey.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumGetPublicKey proto.InternalMessageInfo + +func (m *EthereumGetPublicKey) GetAddressN() []uint32 { + if m != nil { + return m.AddressN + } + return nil +} + +func (m *EthereumGetPublicKey) GetShowDisplay() bool { + if m != nil && m.ShowDisplay != nil { + return *m.ShowDisplay + } + return false +} + +//* +// Response: Contains public key derived from device private seed +// @end +type EthereumPublicKey struct { + Node *HDNodeType `protobuf:"bytes,1,opt,name=node" json:"node,omitempty"` + Xpub *string `protobuf:"bytes,2,opt,name=xpub" json:"xpub,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumPublicKey) Reset() { *m = EthereumPublicKey{} } +func (m *EthereumPublicKey) String() string { return proto.CompactTextString(m) } +func (*EthereumPublicKey) ProtoMessage() {} +func (*EthereumPublicKey) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{1} +} + +func (m *EthereumPublicKey) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumPublicKey.Unmarshal(m, b) +} +func (m *EthereumPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumPublicKey.Marshal(b, m, deterministic) +} +func (m *EthereumPublicKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumPublicKey.Merge(m, src) +} +func (m *EthereumPublicKey) XXX_Size() int { + return xxx_messageInfo_EthereumPublicKey.Size(m) +} +func (m *EthereumPublicKey) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumPublicKey.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumPublicKey proto.InternalMessageInfo + +func (m *EthereumPublicKey) GetNode() *HDNodeType { + if m != nil { + return m.Node + } + return nil +} + +func (m *EthereumPublicKey) GetXpub() string { + if m != nil && m.Xpub != nil { + return *m.Xpub + } + return "" +} + +//* +// Request: Ask device for Ethereum address corresponding to address_n path +// @start +// @next EthereumAddress +// @next Failure +type EthereumGetAddress struct { + AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` + ShowDisplay *bool `protobuf:"varint,2,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumGetAddress) Reset() { *m = EthereumGetAddress{} } +func (m *EthereumGetAddress) String() string { return proto.CompactTextString(m) } +func (*EthereumGetAddress) ProtoMessage() {} +func (*EthereumGetAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{2} +} + +func (m *EthereumGetAddress) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumGetAddress.Unmarshal(m, b) +} +func (m *EthereumGetAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumGetAddress.Marshal(b, m, deterministic) +} +func (m *EthereumGetAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumGetAddress.Merge(m, src) +} +func (m *EthereumGetAddress) XXX_Size() int { + return xxx_messageInfo_EthereumGetAddress.Size(m) +} +func (m *EthereumGetAddress) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumGetAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumGetAddress proto.InternalMessageInfo + +func (m *EthereumGetAddress) GetAddressN() []uint32 { + if m != nil { + return m.AddressN + } + return nil +} + +func (m *EthereumGetAddress) GetShowDisplay() bool { + if m != nil && m.ShowDisplay != nil { + return *m.ShowDisplay + } + return false +} + +//* +// Response: Contains an Ethereum address derived from device private seed +// @end +type EthereumAddress struct { + AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` + AddressHex *string `protobuf:"bytes,2,opt,name=addressHex" json:"addressHex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumAddress) Reset() { *m = EthereumAddress{} } +func (m *EthereumAddress) String() string { return proto.CompactTextString(m) } +func (*EthereumAddress) ProtoMessage() {} +func (*EthereumAddress) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{3} +} + +func (m *EthereumAddress) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumAddress.Unmarshal(m, b) +} +func (m *EthereumAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumAddress.Marshal(b, m, deterministic) +} +func (m *EthereumAddress) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumAddress.Merge(m, src) +} +func (m *EthereumAddress) XXX_Size() int { + return xxx_messageInfo_EthereumAddress.Size(m) +} +func (m *EthereumAddress) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumAddress.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumAddress proto.InternalMessageInfo + +func (m *EthereumAddress) GetAddressBin() []byte { + if m != nil { + return m.AddressBin + } + return nil +} + +func (m *EthereumAddress) GetAddressHex() string { + if m != nil && m.AddressHex != nil { + return *m.AddressHex + } + return "" +} + +//* +// Request: Ask device to sign transaction +// All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing. +// Note: the first at most 1024 bytes of data MUST be transmitted as part of this message. +// @start +// @next EthereumTxRequest +// @next Failure +type EthereumSignTx struct { + AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` + Nonce []byte `protobuf:"bytes,2,opt,name=nonce" json:"nonce,omitempty"` + GasPrice []byte `protobuf:"bytes,3,opt,name=gas_price,json=gasPrice" json:"gas_price,omitempty"` + GasLimit []byte `protobuf:"bytes,4,opt,name=gas_limit,json=gasLimit" json:"gas_limit,omitempty"` + ToBin []byte `protobuf:"bytes,5,opt,name=toBin" json:"toBin,omitempty"` + ToHex *string `protobuf:"bytes,11,opt,name=toHex" json:"toHex,omitempty"` + Value []byte `protobuf:"bytes,6,opt,name=value" json:"value,omitempty"` + DataInitialChunk []byte `protobuf:"bytes,7,opt,name=data_initial_chunk,json=dataInitialChunk" json:"data_initial_chunk,omitempty"` + DataLength *uint32 `protobuf:"varint,8,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` + ChainId *uint32 `protobuf:"varint,9,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` + TxType *uint32 `protobuf:"varint,10,opt,name=tx_type,json=txType" json:"tx_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumSignTx) Reset() { *m = EthereumSignTx{} } +func (m *EthereumSignTx) String() string { return proto.CompactTextString(m) } +func (*EthereumSignTx) ProtoMessage() {} +func (*EthereumSignTx) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{4} +} + +func (m *EthereumSignTx) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumSignTx.Unmarshal(m, b) +} +func (m *EthereumSignTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumSignTx.Marshal(b, m, deterministic) +} +func (m *EthereumSignTx) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumSignTx.Merge(m, src) +} +func (m *EthereumSignTx) XXX_Size() int { + return xxx_messageInfo_EthereumSignTx.Size(m) +} +func (m *EthereumSignTx) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumSignTx.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumSignTx proto.InternalMessageInfo + +func (m *EthereumSignTx) GetAddressN() []uint32 { + if m != nil { + return m.AddressN + } + return nil +} + +func (m *EthereumSignTx) GetNonce() []byte { + if m != nil { + return m.Nonce + } + return nil +} + +func (m *EthereumSignTx) GetGasPrice() []byte { + if m != nil { + return m.GasPrice + } + return nil +} + +func (m *EthereumSignTx) GetGasLimit() []byte { + if m != nil { + return m.GasLimit + } + return nil +} + +func (m *EthereumSignTx) GetToBin() []byte { + if m != nil { + return m.ToBin + } + return nil +} + +func (m *EthereumSignTx) GetToHex() string { + if m != nil && m.ToHex != nil { + return *m.ToHex + } + return "" +} + +func (m *EthereumSignTx) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *EthereumSignTx) GetDataInitialChunk() []byte { + if m != nil { + return m.DataInitialChunk + } + return nil +} + +func (m *EthereumSignTx) GetDataLength() uint32 { + if m != nil && m.DataLength != nil { + return *m.DataLength + } + return 0 +} + +func (m *EthereumSignTx) GetChainId() uint32 { + if m != nil && m.ChainId != nil { + return *m.ChainId + } + return 0 +} + +func (m *EthereumSignTx) GetTxType() uint32 { + if m != nil && m.TxType != nil { + return *m.TxType + } + return 0 +} + +//* +// Response: Device asks for more data from transaction payload, or returns the signature. +// If data_length is set, device awaits that many more bytes of payload. +// Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present. +// @end +// @next EthereumTxAck +type EthereumTxRequest struct { + DataLength *uint32 `protobuf:"varint,1,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` + SignatureV *uint32 `protobuf:"varint,2,opt,name=signature_v,json=signatureV" json:"signature_v,omitempty"` + SignatureR []byte `protobuf:"bytes,3,opt,name=signature_r,json=signatureR" json:"signature_r,omitempty"` + SignatureS []byte `protobuf:"bytes,4,opt,name=signature_s,json=signatureS" json:"signature_s,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumTxRequest) Reset() { *m = EthereumTxRequest{} } +func (m *EthereumTxRequest) String() string { return proto.CompactTextString(m) } +func (*EthereumTxRequest) ProtoMessage() {} +func (*EthereumTxRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{5} +} + +func (m *EthereumTxRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumTxRequest.Unmarshal(m, b) +} +func (m *EthereumTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumTxRequest.Marshal(b, m, deterministic) +} +func (m *EthereumTxRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumTxRequest.Merge(m, src) +} +func (m *EthereumTxRequest) XXX_Size() int { + return xxx_messageInfo_EthereumTxRequest.Size(m) +} +func (m *EthereumTxRequest) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumTxRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumTxRequest proto.InternalMessageInfo + +func (m *EthereumTxRequest) GetDataLength() uint32 { + if m != nil && m.DataLength != nil { + return *m.DataLength + } + return 0 +} + +func (m *EthereumTxRequest) GetSignatureV() uint32 { + if m != nil && m.SignatureV != nil { + return *m.SignatureV + } + return 0 +} + +func (m *EthereumTxRequest) GetSignatureR() []byte { + if m != nil { + return m.SignatureR + } + return nil +} + +func (m *EthereumTxRequest) GetSignatureS() []byte { + if m != nil { + return m.SignatureS + } + return nil +} + +//* +// Request: Transaction payload data. +// @next EthereumTxRequest +type EthereumTxAck struct { + DataChunk []byte `protobuf:"bytes,1,opt,name=data_chunk,json=dataChunk" json:"data_chunk,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumTxAck) Reset() { *m = EthereumTxAck{} } +func (m *EthereumTxAck) String() string { return proto.CompactTextString(m) } +func (*EthereumTxAck) ProtoMessage() {} +func (*EthereumTxAck) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{6} +} + +func (m *EthereumTxAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumTxAck.Unmarshal(m, b) +} +func (m *EthereumTxAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumTxAck.Marshal(b, m, deterministic) +} +func (m *EthereumTxAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumTxAck.Merge(m, src) +} +func (m *EthereumTxAck) XXX_Size() int { + return xxx_messageInfo_EthereumTxAck.Size(m) +} +func (m *EthereumTxAck) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumTxAck.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumTxAck proto.InternalMessageInfo + +func (m *EthereumTxAck) GetDataChunk() []byte { + if m != nil { + return m.DataChunk + } + return nil +} + +//* +// Request: Ask device to sign message +// @start +// @next EthereumMessageSignature +// @next Failure +type EthereumSignMessage struct { + AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` + Message []byte `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumSignMessage) Reset() { *m = EthereumSignMessage{} } +func (m *EthereumSignMessage) String() string { return proto.CompactTextString(m) } +func (*EthereumSignMessage) ProtoMessage() {} +func (*EthereumSignMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{7} +} + +func (m *EthereumSignMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumSignMessage.Unmarshal(m, b) +} +func (m *EthereumSignMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumSignMessage.Marshal(b, m, deterministic) +} +func (m *EthereumSignMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumSignMessage.Merge(m, src) +} +func (m *EthereumSignMessage) XXX_Size() int { + return xxx_messageInfo_EthereumSignMessage.Size(m) +} +func (m *EthereumSignMessage) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumSignMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumSignMessage proto.InternalMessageInfo + +func (m *EthereumSignMessage) GetAddressN() []uint32 { + if m != nil { + return m.AddressN + } + return nil +} + +func (m *EthereumSignMessage) GetMessage() []byte { + if m != nil { + return m.Message + } + return nil +} + +//* +// Response: Signed message +// @end +type EthereumMessageSignature struct { + AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + AddressHex *string `protobuf:"bytes,3,opt,name=addressHex" json:"addressHex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumMessageSignature) Reset() { *m = EthereumMessageSignature{} } +func (m *EthereumMessageSignature) String() string { return proto.CompactTextString(m) } +func (*EthereumMessageSignature) ProtoMessage() {} +func (*EthereumMessageSignature) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{8} +} + +func (m *EthereumMessageSignature) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumMessageSignature.Unmarshal(m, b) +} +func (m *EthereumMessageSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumMessageSignature.Marshal(b, m, deterministic) +} +func (m *EthereumMessageSignature) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumMessageSignature.Merge(m, src) +} +func (m *EthereumMessageSignature) XXX_Size() int { + return xxx_messageInfo_EthereumMessageSignature.Size(m) +} +func (m *EthereumMessageSignature) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumMessageSignature.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumMessageSignature proto.InternalMessageInfo + +func (m *EthereumMessageSignature) GetAddressBin() []byte { + if m != nil { + return m.AddressBin + } + return nil +} + +func (m *EthereumMessageSignature) GetSignature() []byte { + if m != nil { + return m.Signature + } + return nil +} + +func (m *EthereumMessageSignature) GetAddressHex() string { + if m != nil && m.AddressHex != nil { + return *m.AddressHex + } + return "" +} + +//* +// Request: Ask device to verify message +// @start +// @next Success +// @next Failure +type EthereumVerifyMessage struct { + AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + Message []byte `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` + AddressHex *string `protobuf:"bytes,4,opt,name=addressHex" json:"addressHex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EthereumVerifyMessage) Reset() { *m = EthereumVerifyMessage{} } +func (m *EthereumVerifyMessage) String() string { return proto.CompactTextString(m) } +func (*EthereumVerifyMessage) ProtoMessage() {} +func (*EthereumVerifyMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_cb33f46ba915f15c, []int{9} +} + +func (m *EthereumVerifyMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EthereumVerifyMessage.Unmarshal(m, b) +} +func (m *EthereumVerifyMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EthereumVerifyMessage.Marshal(b, m, deterministic) +} +func (m *EthereumVerifyMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_EthereumVerifyMessage.Merge(m, src) +} +func (m *EthereumVerifyMessage) XXX_Size() int { + return xxx_messageInfo_EthereumVerifyMessage.Size(m) +} +func (m *EthereumVerifyMessage) XXX_DiscardUnknown() { + xxx_messageInfo_EthereumVerifyMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_EthereumVerifyMessage proto.InternalMessageInfo + +func (m *EthereumVerifyMessage) GetAddressBin() []byte { + if m != nil { + return m.AddressBin + } + return nil +} + +func (m *EthereumVerifyMessage) GetSignature() []byte { + if m != nil { + return m.Signature + } + return nil +} + +func (m *EthereumVerifyMessage) GetMessage() []byte { + if m != nil { + return m.Message + } + return nil +} + +func (m *EthereumVerifyMessage) GetAddressHex() string { + if m != nil && m.AddressHex != nil { + return *m.AddressHex + } + return "" +} + +func init() { + proto.RegisterType((*EthereumGetPublicKey)(nil), "hw.trezor.messages.ethereum.EthereumGetPublicKey") + proto.RegisterType((*EthereumPublicKey)(nil), "hw.trezor.messages.ethereum.EthereumPublicKey") + proto.RegisterType((*EthereumGetAddress)(nil), "hw.trezor.messages.ethereum.EthereumGetAddress") + proto.RegisterType((*EthereumAddress)(nil), "hw.trezor.messages.ethereum.EthereumAddress") + proto.RegisterType((*EthereumSignTx)(nil), "hw.trezor.messages.ethereum.EthereumSignTx") + proto.RegisterType((*EthereumTxRequest)(nil), "hw.trezor.messages.ethereum.EthereumTxRequest") + proto.RegisterType((*EthereumTxAck)(nil), "hw.trezor.messages.ethereum.EthereumTxAck") + proto.RegisterType((*EthereumSignMessage)(nil), "hw.trezor.messages.ethereum.EthereumSignMessage") + proto.RegisterType((*EthereumMessageSignature)(nil), "hw.trezor.messages.ethereum.EthereumMessageSignature") + proto.RegisterType((*EthereumVerifyMessage)(nil), "hw.trezor.messages.ethereum.EthereumVerifyMessage") +} + +func init() { proto.RegisterFile("messages-ethereum.proto", fileDescriptor_cb33f46ba915f15c) } + +var fileDescriptor_cb33f46ba915f15c = []byte{ + // 593 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0x95, 0x9b, 0xb4, 0x49, 0x26, 0x0d, 0x1f, 0xa6, 0x55, 0x17, 0x0a, 0x34, 0x18, 0x21, 0xe5, + 0x00, 0x3e, 0x70, 0x43, 0xe2, 0xd2, 0x52, 0x44, 0x2b, 0x4a, 0x55, 0xdc, 0xa8, 0x57, 0x6b, 0x63, + 0x6f, 0xe3, 0x55, 0x9d, 0xdd, 0xe0, 0x5d, 0xb7, 0x0e, 0x7f, 0x82, 0x23, 0xff, 0x87, 0x5f, 0x86, + 0xf6, 0x2b, 0x71, 0x52, 0x54, 0x0e, 0xbd, 0x65, 0xde, 0xbc, 0x7d, 0xf3, 0x66, 0xf4, 0x62, 0xd8, + 0x99, 0x10, 0x21, 0xf0, 0x98, 0x88, 0x77, 0x44, 0x66, 0xa4, 0x20, 0xe5, 0x24, 0x9c, 0x16, 0x5c, + 0x72, 0x7f, 0x37, 0xbb, 0x09, 0x65, 0x41, 0x7e, 0xf2, 0x22, 0x74, 0x94, 0xd0, 0x51, 0x9e, 0x6d, + 0xcf, 0x5f, 0x25, 0x7c, 0x32, 0xe1, 0xcc, 0xbc, 0x09, 0x2e, 0x60, 0xeb, 0xb3, 0xa5, 0x7c, 0x21, + 0xf2, 0xac, 0x1c, 0xe5, 0x34, 0xf9, 0x4a, 0x66, 0xfe, 0x2e, 0x74, 0x70, 0x9a, 0x16, 0x44, 0x88, + 0x98, 0x21, 0xaf, 0xdf, 0x18, 0xf4, 0xa2, 0xb6, 0x05, 0x4e, 0xfd, 0x57, 0xb0, 0x29, 0x32, 0x7e, + 0x13, 0xa7, 0x54, 0x4c, 0x73, 0x3c, 0x43, 0x6b, 0x7d, 0x6f, 0xd0, 0x8e, 0xba, 0x0a, 0x3b, 0x34, + 0x50, 0x30, 0x82, 0xc7, 0x4e, 0x77, 0x21, 0xfa, 0x01, 0x9a, 0x8c, 0xa7, 0x04, 0x79, 0x7d, 0x6f, + 0xd0, 0x7d, 0xff, 0x26, 0xfc, 0x87, 0x5f, 0x6b, 0xee, 0xe8, 0xf0, 0x94, 0xa7, 0x64, 0x38, 0x9b, + 0x92, 0x48, 0x3f, 0xf1, 0x7d, 0x68, 0x56, 0xd3, 0x72, 0xa4, 0x47, 0x75, 0x22, 0xfd, 0x3b, 0x18, + 0x82, 0x5f, 0xf3, 0xbe, 0x6f, 0xdc, 0xdd, 0xdb, 0xf9, 0x77, 0x78, 0xe8, 0x54, 0x9d, 0xe4, 0x4b, + 0x00, 0xab, 0x70, 0x40, 0x99, 0x76, 0xbf, 0x19, 0xd5, 0x90, 0x5a, 0xff, 0x88, 0x54, 0xd6, 0x62, + 0x0d, 0x09, 0xfe, 0xac, 0xc1, 0x03, 0xa7, 0x79, 0x4e, 0xc7, 0x6c, 0x58, 0xdd, 0xed, 0x72, 0x0b, + 0xd6, 0x19, 0x67, 0x09, 0xd1, 0x52, 0x9b, 0x91, 0x29, 0xd4, 0x93, 0x31, 0x16, 0xf1, 0xb4, 0xa0, + 0x09, 0x41, 0x0d, 0xdd, 0x69, 0x8f, 0xb1, 0x38, 0x53, 0xb5, 0x6b, 0xe6, 0x74, 0x42, 0x25, 0x6a, + 0xce, 0x9b, 0x27, 0xaa, 0x56, 0x7a, 0x92, 0x2b, 0xeb, 0xeb, 0x46, 0x4f, 0x17, 0x06, 0x55, 0x86, + 0xbb, 0xda, 0xb0, 0x29, 0x14, 0x7a, 0x8d, 0xf3, 0x92, 0xa0, 0x0d, 0xc3, 0xd5, 0x85, 0xff, 0x16, + 0xfc, 0x14, 0x4b, 0x1c, 0x53, 0x46, 0x25, 0xc5, 0x79, 0x9c, 0x64, 0x25, 0xbb, 0x42, 0x2d, 0x4d, + 0x79, 0xa4, 0x3a, 0xc7, 0xa6, 0xf1, 0x49, 0xe1, 0xfe, 0x1e, 0x74, 0x35, 0x3b, 0x27, 0x6c, 0x2c, + 0x33, 0xd4, 0xee, 0x7b, 0x83, 0x5e, 0x04, 0x0a, 0x3a, 0xd1, 0x88, 0xff, 0x14, 0xda, 0x49, 0x86, + 0x29, 0x8b, 0x69, 0x8a, 0x3a, 0xba, 0xdb, 0xd2, 0xf5, 0x71, 0xea, 0xef, 0x40, 0x4b, 0x56, 0xb1, + 0x9c, 0x4d, 0x09, 0x02, 0xdd, 0xd9, 0x90, 0x95, 0xca, 0x41, 0xf0, 0xdb, 0x5b, 0x44, 0x6a, 0x58, + 0x45, 0xe4, 0x47, 0x49, 0x84, 0x5c, 0x1d, 0xe5, 0xdd, 0x1a, 0xb5, 0x07, 0x5d, 0x41, 0xc7, 0x0c, + 0xcb, 0xb2, 0x20, 0xf1, 0xb5, 0xbe, 0x68, 0x2f, 0x82, 0x39, 0x74, 0xb1, 0x4c, 0x28, 0xec, 0x61, + 0x17, 0x84, 0x68, 0x99, 0x20, 0xec, 0x71, 0x17, 0x84, 0xf3, 0x20, 0x84, 0xde, 0xc2, 0xd8, 0x7e, + 0x72, 0xe5, 0xbf, 0x00, 0xed, 0xc0, 0x5e, 0xc9, 0xe4, 0xa5, 0xa3, 0x10, 0x7d, 0x9e, 0xe0, 0x04, + 0x9e, 0xd4, 0xd3, 0xf0, 0xcd, 0x64, 0xff, 0xee, 0x48, 0x20, 0x68, 0xd9, 0xff, 0x88, 0x0d, 0x85, + 0x2b, 0x83, 0x0a, 0x90, 0x53, 0xb3, 0x4a, 0xe7, 0xce, 0xda, 0x7f, 0x83, 0xfb, 0x1c, 0x3a, 0xf3, + 0x3d, 0xac, 0xee, 0x02, 0x58, 0x89, 0x75, 0xe3, 0x56, 0xac, 0x7f, 0x79, 0xb0, 0xed, 0x46, 0x5f, + 0x90, 0x82, 0x5e, 0xce, 0xdc, 0x2a, 0xf7, 0x9b, 0x5b, 0xdb, 0xb5, 0xb1, 0xb4, 0xeb, 0x8a, 0xa3, + 0xe6, 0xaa, 0xa3, 0x83, 0x8f, 0xf0, 0x3a, 0xe1, 0x93, 0x50, 0x60, 0xc9, 0x45, 0x46, 0x73, 0x3c, + 0x12, 0xee, 0x03, 0x93, 0xd3, 0x91, 0xf9, 0xe2, 0x8d, 0xca, 0xcb, 0x83, 0xed, 0xa1, 0x06, 0xad, + 0x5b, 0xb7, 0xc2, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xce, 0x81, 0xc8, 0x59, 0x05, 0x00, + 0x00, +} diff --git a/accounts/usbwallet/trezor/messages-ethereum.proto b/accounts/usbwallet/trezor/messages-ethereum.proto new file mode 100644 index 000000000000..096bed2e4ae1 --- /dev/null +++ b/accounts/usbwallet/trezor/messages-ethereum.proto @@ -0,0 +1,131 @@ +// This file originates from the SatoshiLabs Trezor `common` repository at: +// https://github.com/trezor/trezor-common/blob/master/protob/messages-ethereum.proto +// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. + +syntax = "proto2"; +package hw.trezor.messages.ethereum; + +// Sugar for easier handling in Java +option java_package = "com.satoshilabs.trezor.lib.protobuf"; +option java_outer_classname = "TrezorMessageEthereum"; + +import "messages-common.proto"; + + +/** + * Request: Ask device for public key corresponding to address_n path + * @start + * @next EthereumPublicKey + * @next Failure + */ +message EthereumGetPublicKey { + repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node + optional bool show_display = 2; // optionally show on display before sending the result +} + +/** + * Response: Contains public key derived from device private seed + * @end + */ +message EthereumPublicKey { + optional hw.trezor.messages.common.HDNodeType node = 1; // BIP32 public node + optional string xpub = 2; // serialized form of public node +} + +/** + * Request: Ask device for Ethereum address corresponding to address_n path + * @start + * @next EthereumAddress + * @next Failure + */ +message EthereumGetAddress { + repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node + optional bool show_display = 2; // optionally show on display before sending the result +} + +/** + * Response: Contains an Ethereum address derived from device private seed + * @end + */ +message EthereumAddress { + optional bytes addressBin = 1; // Ethereum address as 20 bytes (legacy firmwares) + optional string addressHex = 2; // Ethereum address as hex string (newer firmwares) +} + +/** + * Request: Ask device to sign transaction + * All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing. + * Note: the first at most 1024 bytes of data MUST be transmitted as part of this message. + * @start + * @next EthereumTxRequest + * @next Failure + */ +message EthereumSignTx { + repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node + optional bytes nonce = 2; // <=256 bit unsigned big endian + optional bytes gas_price = 3; // <=256 bit unsigned big endian (in wei) + optional bytes gas_limit = 4; // <=256 bit unsigned big endian + optional bytes toBin = 5; // recipient address (20 bytes, legacy firmware) + optional string toHex = 11; // recipient address (hex string, newer firmware) + optional bytes value = 6; // <=256 bit unsigned big endian (in wei) + optional bytes data_initial_chunk = 7; // The initial data chunk (<= 1024 bytes) + optional uint32 data_length = 8; // Length of transaction payload + optional uint32 chain_id = 9; // Chain Id for EIP 155 + optional uint32 tx_type = 10; // (only for Wanchain) +} + +/** + * Response: Device asks for more data from transaction payload, or returns the signature. + * If data_length is set, device awaits that many more bytes of payload. + * Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present. + * @end + * @next EthereumTxAck + */ +message EthereumTxRequest { + optional uint32 data_length = 1; // Number of bytes being requested (<= 1024) + optional uint32 signature_v = 2; // Computed signature (recovery parameter, limited to 27 or 28) + optional bytes signature_r = 3; // Computed signature R component (256 bit) + optional bytes signature_s = 4; // Computed signature S component (256 bit) +} + +/** + * Request: Transaction payload data. + * @next EthereumTxRequest + */ +message EthereumTxAck { + optional bytes data_chunk = 1; // Bytes from transaction payload (<= 1024 bytes) +} + +/** + * Request: Ask device to sign message + * @start + * @next EthereumMessageSignature + * @next Failure + */ +message EthereumSignMessage { + repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node + optional bytes message = 2; // message to be signed +} + +/** + * Response: Signed message + * @end + */ +message EthereumMessageSignature { + optional bytes addressBin = 1; // address used to sign the message (20 bytes, legacy firmware) + optional bytes signature = 2; // signature of the message + optional string addressHex = 3; // address used to sign the message (hex string, newer firmware) +} + +/** + * Request: Ask device to verify message + * @start + * @next Success + * @next Failure + */ +message EthereumVerifyMessage { + optional bytes addressBin = 1; // address to verify (20 bytes, legacy firmware) + optional bytes signature = 2; // signature to verify + optional bytes message = 3; // message to verify + optional string addressHex = 4; // address to verify (hex string, newer firmware) +} diff --git a/accounts/usbwallet/trezor/messages-management.pb.go b/accounts/usbwallet/trezor/messages-management.pb.go new file mode 100644 index 000000000000..f5c872f1fb5b --- /dev/null +++ b/accounts/usbwallet/trezor/messages-management.pb.go @@ -0,0 +1,1621 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: messages-management.proto + +package trezor + +import ( + fmt "fmt" + math "math" + + proto "github.com/golang/protobuf/proto" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +//* +// Structure representing passphrase source +type ApplySettings_PassphraseSourceType int32 + +const ( + ApplySettings_ASK ApplySettings_PassphraseSourceType = 0 + ApplySettings_DEVICE ApplySettings_PassphraseSourceType = 1 + ApplySettings_HOST ApplySettings_PassphraseSourceType = 2 +) + +var ApplySettings_PassphraseSourceType_name = map[int32]string{ + 0: "ASK", + 1: "DEVICE", + 2: "HOST", +} + +var ApplySettings_PassphraseSourceType_value = map[string]int32{ + "ASK": 0, + "DEVICE": 1, + "HOST": 2, +} + +func (x ApplySettings_PassphraseSourceType) Enum() *ApplySettings_PassphraseSourceType { + p := new(ApplySettings_PassphraseSourceType) + *p = x + return p +} + +func (x ApplySettings_PassphraseSourceType) String() string { + return proto.EnumName(ApplySettings_PassphraseSourceType_name, int32(x)) +} + +func (x *ApplySettings_PassphraseSourceType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(ApplySettings_PassphraseSourceType_value, data, "ApplySettings_PassphraseSourceType") + if err != nil { + return err + } + *x = ApplySettings_PassphraseSourceType(value) + return nil +} + +func (ApplySettings_PassphraseSourceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{4, 0} +} + +//* +// Type of recovery procedure. These should be used as bitmask, e.g., +// `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` +// listing every method supported by the host computer. +// +// Note that ScrambledWords must be supported by every implementation +// for backward compatibility; there is no way to not support it. +type RecoveryDevice_RecoveryDeviceType int32 + +const ( + // use powers of two when extending this field + RecoveryDevice_RecoveryDeviceType_ScrambledWords RecoveryDevice_RecoveryDeviceType = 0 + RecoveryDevice_RecoveryDeviceType_Matrix RecoveryDevice_RecoveryDeviceType = 1 +) + +var RecoveryDevice_RecoveryDeviceType_name = map[int32]string{ + 0: "RecoveryDeviceType_ScrambledWords", + 1: "RecoveryDeviceType_Matrix", +} + +var RecoveryDevice_RecoveryDeviceType_value = map[string]int32{ + "RecoveryDeviceType_ScrambledWords": 0, + "RecoveryDeviceType_Matrix": 1, +} + +func (x RecoveryDevice_RecoveryDeviceType) Enum() *RecoveryDevice_RecoveryDeviceType { + p := new(RecoveryDevice_RecoveryDeviceType) + *p = x + return p +} + +func (x RecoveryDevice_RecoveryDeviceType) String() string { + return proto.EnumName(RecoveryDevice_RecoveryDeviceType_name, int32(x)) +} + +func (x *RecoveryDevice_RecoveryDeviceType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(RecoveryDevice_RecoveryDeviceType_value, data, "RecoveryDevice_RecoveryDeviceType") + if err != nil { + return err + } + *x = RecoveryDevice_RecoveryDeviceType(value) + return nil +} + +func (RecoveryDevice_RecoveryDeviceType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{17, 0} +} + +//* +// Type of Recovery Word request +type WordRequest_WordRequestType int32 + +const ( + WordRequest_WordRequestType_Plain WordRequest_WordRequestType = 0 + WordRequest_WordRequestType_Matrix9 WordRequest_WordRequestType = 1 + WordRequest_WordRequestType_Matrix6 WordRequest_WordRequestType = 2 +) + +var WordRequest_WordRequestType_name = map[int32]string{ + 0: "WordRequestType_Plain", + 1: "WordRequestType_Matrix9", + 2: "WordRequestType_Matrix6", +} + +var WordRequest_WordRequestType_value = map[string]int32{ + "WordRequestType_Plain": 0, + "WordRequestType_Matrix9": 1, + "WordRequestType_Matrix6": 2, +} + +func (x WordRequest_WordRequestType) Enum() *WordRequest_WordRequestType { + p := new(WordRequest_WordRequestType) + *p = x + return p +} + +func (x WordRequest_WordRequestType) String() string { + return proto.EnumName(WordRequest_WordRequestType_name, int32(x)) +} + +func (x *WordRequest_WordRequestType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(WordRequest_WordRequestType_value, data, "WordRequest_WordRequestType") + if err != nil { + return err + } + *x = WordRequest_WordRequestType(value) + return nil +} + +func (WordRequest_WordRequestType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{18, 0} +} + +//* +// Request: Reset device to default state and ask for device details +// @start +// @next Features +type Initialize struct { + State []byte `protobuf:"bytes,1,opt,name=state" json:"state,omitempty"` + SkipPassphrase *bool `protobuf:"varint,2,opt,name=skip_passphrase,json=skipPassphrase" json:"skip_passphrase,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Initialize) Reset() { *m = Initialize{} } +func (m *Initialize) String() string { return proto.CompactTextString(m) } +func (*Initialize) ProtoMessage() {} +func (*Initialize) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{0} +} + +func (m *Initialize) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Initialize.Unmarshal(m, b) +} +func (m *Initialize) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Initialize.Marshal(b, m, deterministic) +} +func (m *Initialize) XXX_Merge(src proto.Message) { + xxx_messageInfo_Initialize.Merge(m, src) +} +func (m *Initialize) XXX_Size() int { + return xxx_messageInfo_Initialize.Size(m) +} +func (m *Initialize) XXX_DiscardUnknown() { + xxx_messageInfo_Initialize.DiscardUnknown(m) +} + +var xxx_messageInfo_Initialize proto.InternalMessageInfo + +func (m *Initialize) GetState() []byte { + if m != nil { + return m.State + } + return nil +} + +func (m *Initialize) GetSkipPassphrase() bool { + if m != nil && m.SkipPassphrase != nil { + return *m.SkipPassphrase + } + return false +} + +//* +// Request: Ask for device details (no device reset) +// @start +// @next Features +type GetFeatures struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetFeatures) Reset() { *m = GetFeatures{} } +func (m *GetFeatures) String() string { return proto.CompactTextString(m) } +func (*GetFeatures) ProtoMessage() {} +func (*GetFeatures) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{1} +} + +func (m *GetFeatures) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetFeatures.Unmarshal(m, b) +} +func (m *GetFeatures) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetFeatures.Marshal(b, m, deterministic) +} +func (m *GetFeatures) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetFeatures.Merge(m, src) +} +func (m *GetFeatures) XXX_Size() int { + return xxx_messageInfo_GetFeatures.Size(m) +} +func (m *GetFeatures) XXX_DiscardUnknown() { + xxx_messageInfo_GetFeatures.DiscardUnknown(m) +} + +var xxx_messageInfo_GetFeatures proto.InternalMessageInfo + +//* +// Response: Reports various information about the device +// @end +type Features struct { + Vendor *string `protobuf:"bytes,1,opt,name=vendor" json:"vendor,omitempty"` + MajorVersion *uint32 `protobuf:"varint,2,opt,name=major_version,json=majorVersion" json:"major_version,omitempty"` + MinorVersion *uint32 `protobuf:"varint,3,opt,name=minor_version,json=minorVersion" json:"minor_version,omitempty"` + PatchVersion *uint32 `protobuf:"varint,4,opt,name=patch_version,json=patchVersion" json:"patch_version,omitempty"` + BootloaderMode *bool `protobuf:"varint,5,opt,name=bootloader_mode,json=bootloaderMode" json:"bootloader_mode,omitempty"` + DeviceId *string `protobuf:"bytes,6,opt,name=device_id,json=deviceId" json:"device_id,omitempty"` + PinProtection *bool `protobuf:"varint,7,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` + PassphraseProtection *bool `protobuf:"varint,8,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` + Language *string `protobuf:"bytes,9,opt,name=language" json:"language,omitempty"` + Label *string `protobuf:"bytes,10,opt,name=label" json:"label,omitempty"` + Initialized *bool `protobuf:"varint,12,opt,name=initialized" json:"initialized,omitempty"` + Revision []byte `protobuf:"bytes,13,opt,name=revision" json:"revision,omitempty"` + BootloaderHash []byte `protobuf:"bytes,14,opt,name=bootloader_hash,json=bootloaderHash" json:"bootloader_hash,omitempty"` + Imported *bool `protobuf:"varint,15,opt,name=imported" json:"imported,omitempty"` + PinCached *bool `protobuf:"varint,16,opt,name=pin_cached,json=pinCached" json:"pin_cached,omitempty"` + PassphraseCached *bool `protobuf:"varint,17,opt,name=passphrase_cached,json=passphraseCached" json:"passphrase_cached,omitempty"` + FirmwarePresent *bool `protobuf:"varint,18,opt,name=firmware_present,json=firmwarePresent" json:"firmware_present,omitempty"` + NeedsBackup *bool `protobuf:"varint,19,opt,name=needs_backup,json=needsBackup" json:"needs_backup,omitempty"` + Flags *uint32 `protobuf:"varint,20,opt,name=flags" json:"flags,omitempty"` + Model *string `protobuf:"bytes,21,opt,name=model" json:"model,omitempty"` + FwMajor *uint32 `protobuf:"varint,22,opt,name=fw_major,json=fwMajor" json:"fw_major,omitempty"` + FwMinor *uint32 `protobuf:"varint,23,opt,name=fw_minor,json=fwMinor" json:"fw_minor,omitempty"` + FwPatch *uint32 `protobuf:"varint,24,opt,name=fw_patch,json=fwPatch" json:"fw_patch,omitempty"` + FwVendor *string `protobuf:"bytes,25,opt,name=fw_vendor,json=fwVendor" json:"fw_vendor,omitempty"` + FwVendorKeys []byte `protobuf:"bytes,26,opt,name=fw_vendor_keys,json=fwVendorKeys" json:"fw_vendor_keys,omitempty"` + UnfinishedBackup *bool `protobuf:"varint,27,opt,name=unfinished_backup,json=unfinishedBackup" json:"unfinished_backup,omitempty"` + NoBackup *bool `protobuf:"varint,28,opt,name=no_backup,json=noBackup" json:"no_backup,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Features) Reset() { *m = Features{} } +func (m *Features) String() string { return proto.CompactTextString(m) } +func (*Features) ProtoMessage() {} +func (*Features) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{2} +} + +func (m *Features) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Features.Unmarshal(m, b) +} +func (m *Features) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Features.Marshal(b, m, deterministic) +} +func (m *Features) XXX_Merge(src proto.Message) { + xxx_messageInfo_Features.Merge(m, src) +} +func (m *Features) XXX_Size() int { + return xxx_messageInfo_Features.Size(m) +} +func (m *Features) XXX_DiscardUnknown() { + xxx_messageInfo_Features.DiscardUnknown(m) +} + +var xxx_messageInfo_Features proto.InternalMessageInfo + +func (m *Features) GetVendor() string { + if m != nil && m.Vendor != nil { + return *m.Vendor + } + return "" +} + +func (m *Features) GetMajorVersion() uint32 { + if m != nil && m.MajorVersion != nil { + return *m.MajorVersion + } + return 0 +} + +func (m *Features) GetMinorVersion() uint32 { + if m != nil && m.MinorVersion != nil { + return *m.MinorVersion + } + return 0 +} + +func (m *Features) GetPatchVersion() uint32 { + if m != nil && m.PatchVersion != nil { + return *m.PatchVersion + } + return 0 +} + +func (m *Features) GetBootloaderMode() bool { + if m != nil && m.BootloaderMode != nil { + return *m.BootloaderMode + } + return false +} + +func (m *Features) GetDeviceId() string { + if m != nil && m.DeviceId != nil { + return *m.DeviceId + } + return "" +} + +func (m *Features) GetPinProtection() bool { + if m != nil && m.PinProtection != nil { + return *m.PinProtection + } + return false +} + +func (m *Features) GetPassphraseProtection() bool { + if m != nil && m.PassphraseProtection != nil { + return *m.PassphraseProtection + } + return false +} + +func (m *Features) GetLanguage() string { + if m != nil && m.Language != nil { + return *m.Language + } + return "" +} + +func (m *Features) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *Features) GetInitialized() bool { + if m != nil && m.Initialized != nil { + return *m.Initialized + } + return false +} + +func (m *Features) GetRevision() []byte { + if m != nil { + return m.Revision + } + return nil +} + +func (m *Features) GetBootloaderHash() []byte { + if m != nil { + return m.BootloaderHash + } + return nil +} + +func (m *Features) GetImported() bool { + if m != nil && m.Imported != nil { + return *m.Imported + } + return false +} + +func (m *Features) GetPinCached() bool { + if m != nil && m.PinCached != nil { + return *m.PinCached + } + return false +} + +func (m *Features) GetPassphraseCached() bool { + if m != nil && m.PassphraseCached != nil { + return *m.PassphraseCached + } + return false +} + +func (m *Features) GetFirmwarePresent() bool { + if m != nil && m.FirmwarePresent != nil { + return *m.FirmwarePresent + } + return false +} + +func (m *Features) GetNeedsBackup() bool { + if m != nil && m.NeedsBackup != nil { + return *m.NeedsBackup + } + return false +} + +func (m *Features) GetFlags() uint32 { + if m != nil && m.Flags != nil { + return *m.Flags + } + return 0 +} + +func (m *Features) GetModel() string { + if m != nil && m.Model != nil { + return *m.Model + } + return "" +} + +func (m *Features) GetFwMajor() uint32 { + if m != nil && m.FwMajor != nil { + return *m.FwMajor + } + return 0 +} + +func (m *Features) GetFwMinor() uint32 { + if m != nil && m.FwMinor != nil { + return *m.FwMinor + } + return 0 +} + +func (m *Features) GetFwPatch() uint32 { + if m != nil && m.FwPatch != nil { + return *m.FwPatch + } + return 0 +} + +func (m *Features) GetFwVendor() string { + if m != nil && m.FwVendor != nil { + return *m.FwVendor + } + return "" +} + +func (m *Features) GetFwVendorKeys() []byte { + if m != nil { + return m.FwVendorKeys + } + return nil +} + +func (m *Features) GetUnfinishedBackup() bool { + if m != nil && m.UnfinishedBackup != nil { + return *m.UnfinishedBackup + } + return false +} + +func (m *Features) GetNoBackup() bool { + if m != nil && m.NoBackup != nil { + return *m.NoBackup + } + return false +} + +//* +// Request: clear session (removes cached PIN, passphrase, etc). +// @start +// @next Success +type ClearSession struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ClearSession) Reset() { *m = ClearSession{} } +func (m *ClearSession) String() string { return proto.CompactTextString(m) } +func (*ClearSession) ProtoMessage() {} +func (*ClearSession) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{3} +} + +func (m *ClearSession) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ClearSession.Unmarshal(m, b) +} +func (m *ClearSession) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ClearSession.Marshal(b, m, deterministic) +} +func (m *ClearSession) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClearSession.Merge(m, src) +} +func (m *ClearSession) XXX_Size() int { + return xxx_messageInfo_ClearSession.Size(m) +} +func (m *ClearSession) XXX_DiscardUnknown() { + xxx_messageInfo_ClearSession.DiscardUnknown(m) +} + +var xxx_messageInfo_ClearSession proto.InternalMessageInfo + +//* +// Request: change language and/or label of the device +// @start +// @next Success +// @next Failure +type ApplySettings struct { + Language *string `protobuf:"bytes,1,opt,name=language" json:"language,omitempty"` + Label *string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"` + UsePassphrase *bool `protobuf:"varint,3,opt,name=use_passphrase,json=usePassphrase" json:"use_passphrase,omitempty"` + Homescreen []byte `protobuf:"bytes,4,opt,name=homescreen" json:"homescreen,omitempty"` + PassphraseSource *ApplySettings_PassphraseSourceType `protobuf:"varint,5,opt,name=passphrase_source,json=passphraseSource,enum=hw.trezor.messages.management.ApplySettings_PassphraseSourceType" json:"passphrase_source,omitempty"` + AutoLockDelayMs *uint32 `protobuf:"varint,6,opt,name=auto_lock_delay_ms,json=autoLockDelayMs" json:"auto_lock_delay_ms,omitempty"` + DisplayRotation *uint32 `protobuf:"varint,7,opt,name=display_rotation,json=displayRotation" json:"display_rotation,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ApplySettings) Reset() { *m = ApplySettings{} } +func (m *ApplySettings) String() string { return proto.CompactTextString(m) } +func (*ApplySettings) ProtoMessage() {} +func (*ApplySettings) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{4} +} + +func (m *ApplySettings) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ApplySettings.Unmarshal(m, b) +} +func (m *ApplySettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ApplySettings.Marshal(b, m, deterministic) +} +func (m *ApplySettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplySettings.Merge(m, src) +} +func (m *ApplySettings) XXX_Size() int { + return xxx_messageInfo_ApplySettings.Size(m) +} +func (m *ApplySettings) XXX_DiscardUnknown() { + xxx_messageInfo_ApplySettings.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplySettings proto.InternalMessageInfo + +func (m *ApplySettings) GetLanguage() string { + if m != nil && m.Language != nil { + return *m.Language + } + return "" +} + +func (m *ApplySettings) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *ApplySettings) GetUsePassphrase() bool { + if m != nil && m.UsePassphrase != nil { + return *m.UsePassphrase + } + return false +} + +func (m *ApplySettings) GetHomescreen() []byte { + if m != nil { + return m.Homescreen + } + return nil +} + +func (m *ApplySettings) GetPassphraseSource() ApplySettings_PassphraseSourceType { + if m != nil && m.PassphraseSource != nil { + return *m.PassphraseSource + } + return ApplySettings_ASK +} + +func (m *ApplySettings) GetAutoLockDelayMs() uint32 { + if m != nil && m.AutoLockDelayMs != nil { + return *m.AutoLockDelayMs + } + return 0 +} + +func (m *ApplySettings) GetDisplayRotation() uint32 { + if m != nil && m.DisplayRotation != nil { + return *m.DisplayRotation + } + return 0 +} + +//* +// Request: set flags of the device +// @start +// @next Success +// @next Failure +type ApplyFlags struct { + Flags *uint32 `protobuf:"varint,1,opt,name=flags" json:"flags,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ApplyFlags) Reset() { *m = ApplyFlags{} } +func (m *ApplyFlags) String() string { return proto.CompactTextString(m) } +func (*ApplyFlags) ProtoMessage() {} +func (*ApplyFlags) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{5} +} + +func (m *ApplyFlags) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ApplyFlags.Unmarshal(m, b) +} +func (m *ApplyFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ApplyFlags.Marshal(b, m, deterministic) +} +func (m *ApplyFlags) XXX_Merge(src proto.Message) { + xxx_messageInfo_ApplyFlags.Merge(m, src) +} +func (m *ApplyFlags) XXX_Size() int { + return xxx_messageInfo_ApplyFlags.Size(m) +} +func (m *ApplyFlags) XXX_DiscardUnknown() { + xxx_messageInfo_ApplyFlags.DiscardUnknown(m) +} + +var xxx_messageInfo_ApplyFlags proto.InternalMessageInfo + +func (m *ApplyFlags) GetFlags() uint32 { + if m != nil && m.Flags != nil { + return *m.Flags + } + return 0 +} + +//* +// Request: Starts workflow for setting/changing/removing the PIN +// @start +// @next Success +// @next Failure +type ChangePin struct { + Remove *bool `protobuf:"varint,1,opt,name=remove" json:"remove,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ChangePin) Reset() { *m = ChangePin{} } +func (m *ChangePin) String() string { return proto.CompactTextString(m) } +func (*ChangePin) ProtoMessage() {} +func (*ChangePin) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{6} +} + +func (m *ChangePin) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ChangePin.Unmarshal(m, b) +} +func (m *ChangePin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ChangePin.Marshal(b, m, deterministic) +} +func (m *ChangePin) XXX_Merge(src proto.Message) { + xxx_messageInfo_ChangePin.Merge(m, src) +} +func (m *ChangePin) XXX_Size() int { + return xxx_messageInfo_ChangePin.Size(m) +} +func (m *ChangePin) XXX_DiscardUnknown() { + xxx_messageInfo_ChangePin.DiscardUnknown(m) +} + +var xxx_messageInfo_ChangePin proto.InternalMessageInfo + +func (m *ChangePin) GetRemove() bool { + if m != nil && m.Remove != nil { + return *m.Remove + } + return false +} + +//* +// Request: Test if the device is alive, device sends back the message in Success response +// @start +// @next Success +type Ping struct { + Message *string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + ButtonProtection *bool `protobuf:"varint,2,opt,name=button_protection,json=buttonProtection" json:"button_protection,omitempty"` + PinProtection *bool `protobuf:"varint,3,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` + PassphraseProtection *bool `protobuf:"varint,4,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Ping) Reset() { *m = Ping{} } +func (m *Ping) String() string { return proto.CompactTextString(m) } +func (*Ping) ProtoMessage() {} +func (*Ping) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{7} +} + +func (m *Ping) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Ping.Unmarshal(m, b) +} +func (m *Ping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Ping.Marshal(b, m, deterministic) +} +func (m *Ping) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ping.Merge(m, src) +} +func (m *Ping) XXX_Size() int { + return xxx_messageInfo_Ping.Size(m) +} +func (m *Ping) XXX_DiscardUnknown() { + xxx_messageInfo_Ping.DiscardUnknown(m) +} + +var xxx_messageInfo_Ping proto.InternalMessageInfo + +func (m *Ping) GetMessage() string { + if m != nil && m.Message != nil { + return *m.Message + } + return "" +} + +func (m *Ping) GetButtonProtection() bool { + if m != nil && m.ButtonProtection != nil { + return *m.ButtonProtection + } + return false +} + +func (m *Ping) GetPinProtection() bool { + if m != nil && m.PinProtection != nil { + return *m.PinProtection + } + return false +} + +func (m *Ping) GetPassphraseProtection() bool { + if m != nil && m.PassphraseProtection != nil { + return *m.PassphraseProtection + } + return false +} + +//* +// Request: Abort last operation that required user interaction +// @start +// @next Failure +type Cancel struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Cancel) Reset() { *m = Cancel{} } +func (m *Cancel) String() string { return proto.CompactTextString(m) } +func (*Cancel) ProtoMessage() {} +func (*Cancel) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{8} +} + +func (m *Cancel) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Cancel.Unmarshal(m, b) +} +func (m *Cancel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Cancel.Marshal(b, m, deterministic) +} +func (m *Cancel) XXX_Merge(src proto.Message) { + xxx_messageInfo_Cancel.Merge(m, src) +} +func (m *Cancel) XXX_Size() int { + return xxx_messageInfo_Cancel.Size(m) +} +func (m *Cancel) XXX_DiscardUnknown() { + xxx_messageInfo_Cancel.DiscardUnknown(m) +} + +var xxx_messageInfo_Cancel proto.InternalMessageInfo + +//* +// Request: Request a sample of random data generated by hardware RNG. May be used for testing. +// @start +// @next Entropy +// @next Failure +type GetEntropy struct { + Size *uint32 `protobuf:"varint,1,req,name=size" json:"size,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GetEntropy) Reset() { *m = GetEntropy{} } +func (m *GetEntropy) String() string { return proto.CompactTextString(m) } +func (*GetEntropy) ProtoMessage() {} +func (*GetEntropy) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{9} +} + +func (m *GetEntropy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GetEntropy.Unmarshal(m, b) +} +func (m *GetEntropy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GetEntropy.Marshal(b, m, deterministic) +} +func (m *GetEntropy) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetEntropy.Merge(m, src) +} +func (m *GetEntropy) XXX_Size() int { + return xxx_messageInfo_GetEntropy.Size(m) +} +func (m *GetEntropy) XXX_DiscardUnknown() { + xxx_messageInfo_GetEntropy.DiscardUnknown(m) +} + +var xxx_messageInfo_GetEntropy proto.InternalMessageInfo + +func (m *GetEntropy) GetSize() uint32 { + if m != nil && m.Size != nil { + return *m.Size + } + return 0 +} + +//* +// Response: Reply with random data generated by internal RNG +// @end +type Entropy struct { + Entropy []byte `protobuf:"bytes,1,req,name=entropy" json:"entropy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Entropy) Reset() { *m = Entropy{} } +func (m *Entropy) String() string { return proto.CompactTextString(m) } +func (*Entropy) ProtoMessage() {} +func (*Entropy) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{10} +} + +func (m *Entropy) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Entropy.Unmarshal(m, b) +} +func (m *Entropy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Entropy.Marshal(b, m, deterministic) +} +func (m *Entropy) XXX_Merge(src proto.Message) { + xxx_messageInfo_Entropy.Merge(m, src) +} +func (m *Entropy) XXX_Size() int { + return xxx_messageInfo_Entropy.Size(m) +} +func (m *Entropy) XXX_DiscardUnknown() { + xxx_messageInfo_Entropy.DiscardUnknown(m) +} + +var xxx_messageInfo_Entropy proto.InternalMessageInfo + +func (m *Entropy) GetEntropy() []byte { + if m != nil { + return m.Entropy + } + return nil +} + +//* +// Request: Request device to wipe all sensitive data and settings +// @start +// @next Success +// @next Failure +type WipeDevice struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WipeDevice) Reset() { *m = WipeDevice{} } +func (m *WipeDevice) String() string { return proto.CompactTextString(m) } +func (*WipeDevice) ProtoMessage() {} +func (*WipeDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{11} +} + +func (m *WipeDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WipeDevice.Unmarshal(m, b) +} +func (m *WipeDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WipeDevice.Marshal(b, m, deterministic) +} +func (m *WipeDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_WipeDevice.Merge(m, src) +} +func (m *WipeDevice) XXX_Size() int { + return xxx_messageInfo_WipeDevice.Size(m) +} +func (m *WipeDevice) XXX_DiscardUnknown() { + xxx_messageInfo_WipeDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_WipeDevice proto.InternalMessageInfo + +//* +// Request: Load seed and related internal settings from the computer +// @start +// @next Success +// @next Failure +type LoadDevice struct { + Mnemonic *string `protobuf:"bytes,1,opt,name=mnemonic" json:"mnemonic,omitempty"` + Node *HDNodeType `protobuf:"bytes,2,opt,name=node" json:"node,omitempty"` + Pin *string `protobuf:"bytes,3,opt,name=pin" json:"pin,omitempty"` + PassphraseProtection *bool `protobuf:"varint,4,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` + Language *string `protobuf:"bytes,5,opt,name=language,def=english" json:"language,omitempty"` + Label *string `protobuf:"bytes,6,opt,name=label" json:"label,omitempty"` + SkipChecksum *bool `protobuf:"varint,7,opt,name=skip_checksum,json=skipChecksum" json:"skip_checksum,omitempty"` + U2FCounter *uint32 `protobuf:"varint,8,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *LoadDevice) Reset() { *m = LoadDevice{} } +func (m *LoadDevice) String() string { return proto.CompactTextString(m) } +func (*LoadDevice) ProtoMessage() {} +func (*LoadDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{12} +} + +func (m *LoadDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_LoadDevice.Unmarshal(m, b) +} +func (m *LoadDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_LoadDevice.Marshal(b, m, deterministic) +} +func (m *LoadDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_LoadDevice.Merge(m, src) +} +func (m *LoadDevice) XXX_Size() int { + return xxx_messageInfo_LoadDevice.Size(m) +} +func (m *LoadDevice) XXX_DiscardUnknown() { + xxx_messageInfo_LoadDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_LoadDevice proto.InternalMessageInfo + +const Default_LoadDevice_Language string = "english" + +func (m *LoadDevice) GetMnemonic() string { + if m != nil && m.Mnemonic != nil { + return *m.Mnemonic + } + return "" +} + +func (m *LoadDevice) GetNode() *HDNodeType { + if m != nil { + return m.Node + } + return nil +} + +func (m *LoadDevice) GetPin() string { + if m != nil && m.Pin != nil { + return *m.Pin + } + return "" +} + +func (m *LoadDevice) GetPassphraseProtection() bool { + if m != nil && m.PassphraseProtection != nil { + return *m.PassphraseProtection + } + return false +} + +func (m *LoadDevice) GetLanguage() string { + if m != nil && m.Language != nil { + return *m.Language + } + return Default_LoadDevice_Language +} + +func (m *LoadDevice) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *LoadDevice) GetSkipChecksum() bool { + if m != nil && m.SkipChecksum != nil { + return *m.SkipChecksum + } + return false +} + +func (m *LoadDevice) GetU2FCounter() uint32 { + if m != nil && m.U2FCounter != nil { + return *m.U2FCounter + } + return 0 +} + +//* +// Request: Ask device to do initialization involving user interaction +// @start +// @next EntropyRequest +// @next Failure +type ResetDevice struct { + DisplayRandom *bool `protobuf:"varint,1,opt,name=display_random,json=displayRandom" json:"display_random,omitempty"` + Strength *uint32 `protobuf:"varint,2,opt,name=strength,def=256" json:"strength,omitempty"` + PassphraseProtection *bool `protobuf:"varint,3,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` + PinProtection *bool `protobuf:"varint,4,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` + Language *string `protobuf:"bytes,5,opt,name=language,def=english" json:"language,omitempty"` + Label *string `protobuf:"bytes,6,opt,name=label" json:"label,omitempty"` + U2FCounter *uint32 `protobuf:"varint,7,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` + SkipBackup *bool `protobuf:"varint,8,opt,name=skip_backup,json=skipBackup" json:"skip_backup,omitempty"` + NoBackup *bool `protobuf:"varint,9,opt,name=no_backup,json=noBackup" json:"no_backup,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ResetDevice) Reset() { *m = ResetDevice{} } +func (m *ResetDevice) String() string { return proto.CompactTextString(m) } +func (*ResetDevice) ProtoMessage() {} +func (*ResetDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{13} +} + +func (m *ResetDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ResetDevice.Unmarshal(m, b) +} +func (m *ResetDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ResetDevice.Marshal(b, m, deterministic) +} +func (m *ResetDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResetDevice.Merge(m, src) +} +func (m *ResetDevice) XXX_Size() int { + return xxx_messageInfo_ResetDevice.Size(m) +} +func (m *ResetDevice) XXX_DiscardUnknown() { + xxx_messageInfo_ResetDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_ResetDevice proto.InternalMessageInfo + +const Default_ResetDevice_Strength uint32 = 256 +const Default_ResetDevice_Language string = "english" + +func (m *ResetDevice) GetDisplayRandom() bool { + if m != nil && m.DisplayRandom != nil { + return *m.DisplayRandom + } + return false +} + +func (m *ResetDevice) GetStrength() uint32 { + if m != nil && m.Strength != nil { + return *m.Strength + } + return Default_ResetDevice_Strength +} + +func (m *ResetDevice) GetPassphraseProtection() bool { + if m != nil && m.PassphraseProtection != nil { + return *m.PassphraseProtection + } + return false +} + +func (m *ResetDevice) GetPinProtection() bool { + if m != nil && m.PinProtection != nil { + return *m.PinProtection + } + return false +} + +func (m *ResetDevice) GetLanguage() string { + if m != nil && m.Language != nil { + return *m.Language + } + return Default_ResetDevice_Language +} + +func (m *ResetDevice) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *ResetDevice) GetU2FCounter() uint32 { + if m != nil && m.U2FCounter != nil { + return *m.U2FCounter + } + return 0 +} + +func (m *ResetDevice) GetSkipBackup() bool { + if m != nil && m.SkipBackup != nil { + return *m.SkipBackup + } + return false +} + +func (m *ResetDevice) GetNoBackup() bool { + if m != nil && m.NoBackup != nil { + return *m.NoBackup + } + return false +} + +//* +// Request: Perform backup of the device seed if not backed up using ResetDevice +// @start +// @next Success +type BackupDevice struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *BackupDevice) Reset() { *m = BackupDevice{} } +func (m *BackupDevice) String() string { return proto.CompactTextString(m) } +func (*BackupDevice) ProtoMessage() {} +func (*BackupDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{14} +} + +func (m *BackupDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_BackupDevice.Unmarshal(m, b) +} +func (m *BackupDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_BackupDevice.Marshal(b, m, deterministic) +} +func (m *BackupDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_BackupDevice.Merge(m, src) +} +func (m *BackupDevice) XXX_Size() int { + return xxx_messageInfo_BackupDevice.Size(m) +} +func (m *BackupDevice) XXX_DiscardUnknown() { + xxx_messageInfo_BackupDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_BackupDevice proto.InternalMessageInfo + +//* +// Response: Ask for additional entropy from host computer +// @next EntropyAck +type EntropyRequest struct { + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EntropyRequest) Reset() { *m = EntropyRequest{} } +func (m *EntropyRequest) String() string { return proto.CompactTextString(m) } +func (*EntropyRequest) ProtoMessage() {} +func (*EntropyRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{15} +} + +func (m *EntropyRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EntropyRequest.Unmarshal(m, b) +} +func (m *EntropyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EntropyRequest.Marshal(b, m, deterministic) +} +func (m *EntropyRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_EntropyRequest.Merge(m, src) +} +func (m *EntropyRequest) XXX_Size() int { + return xxx_messageInfo_EntropyRequest.Size(m) +} +func (m *EntropyRequest) XXX_DiscardUnknown() { + xxx_messageInfo_EntropyRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_EntropyRequest proto.InternalMessageInfo + +//* +// Request: Provide additional entropy for seed generation function +// @next Success +type EntropyAck struct { + Entropy []byte `protobuf:"bytes,1,opt,name=entropy" json:"entropy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EntropyAck) Reset() { *m = EntropyAck{} } +func (m *EntropyAck) String() string { return proto.CompactTextString(m) } +func (*EntropyAck) ProtoMessage() {} +func (*EntropyAck) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{16} +} + +func (m *EntropyAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EntropyAck.Unmarshal(m, b) +} +func (m *EntropyAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EntropyAck.Marshal(b, m, deterministic) +} +func (m *EntropyAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_EntropyAck.Merge(m, src) +} +func (m *EntropyAck) XXX_Size() int { + return xxx_messageInfo_EntropyAck.Size(m) +} +func (m *EntropyAck) XXX_DiscardUnknown() { + xxx_messageInfo_EntropyAck.DiscardUnknown(m) +} + +var xxx_messageInfo_EntropyAck proto.InternalMessageInfo + +func (m *EntropyAck) GetEntropy() []byte { + if m != nil { + return m.Entropy + } + return nil +} + +//* +// Request: Start recovery workflow asking user for specific words of mnemonic +// Used to recovery device safely even on untrusted computer. +// @start +// @next WordRequest +type RecoveryDevice struct { + WordCount *uint32 `protobuf:"varint,1,opt,name=word_count,json=wordCount" json:"word_count,omitempty"` + PassphraseProtection *bool `protobuf:"varint,2,opt,name=passphrase_protection,json=passphraseProtection" json:"passphrase_protection,omitempty"` + PinProtection *bool `protobuf:"varint,3,opt,name=pin_protection,json=pinProtection" json:"pin_protection,omitempty"` + Language *string `protobuf:"bytes,4,opt,name=language,def=english" json:"language,omitempty"` + Label *string `protobuf:"bytes,5,opt,name=label" json:"label,omitempty"` + EnforceWordlist *bool `protobuf:"varint,6,opt,name=enforce_wordlist,json=enforceWordlist" json:"enforce_wordlist,omitempty"` + // 7 reserved for unused recovery method + Type *RecoveryDevice_RecoveryDeviceType `protobuf:"varint,8,opt,name=type,enum=hw.trezor.messages.management.RecoveryDevice_RecoveryDeviceType" json:"type,omitempty"` + U2FCounter *uint32 `protobuf:"varint,9,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` + DryRun *bool `protobuf:"varint,10,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RecoveryDevice) Reset() { *m = RecoveryDevice{} } +func (m *RecoveryDevice) String() string { return proto.CompactTextString(m) } +func (*RecoveryDevice) ProtoMessage() {} +func (*RecoveryDevice) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{17} +} + +func (m *RecoveryDevice) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RecoveryDevice.Unmarshal(m, b) +} +func (m *RecoveryDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RecoveryDevice.Marshal(b, m, deterministic) +} +func (m *RecoveryDevice) XXX_Merge(src proto.Message) { + xxx_messageInfo_RecoveryDevice.Merge(m, src) +} +func (m *RecoveryDevice) XXX_Size() int { + return xxx_messageInfo_RecoveryDevice.Size(m) +} +func (m *RecoveryDevice) XXX_DiscardUnknown() { + xxx_messageInfo_RecoveryDevice.DiscardUnknown(m) +} + +var xxx_messageInfo_RecoveryDevice proto.InternalMessageInfo + +const Default_RecoveryDevice_Language string = "english" + +func (m *RecoveryDevice) GetWordCount() uint32 { + if m != nil && m.WordCount != nil { + return *m.WordCount + } + return 0 +} + +func (m *RecoveryDevice) GetPassphraseProtection() bool { + if m != nil && m.PassphraseProtection != nil { + return *m.PassphraseProtection + } + return false +} + +func (m *RecoveryDevice) GetPinProtection() bool { + if m != nil && m.PinProtection != nil { + return *m.PinProtection + } + return false +} + +func (m *RecoveryDevice) GetLanguage() string { + if m != nil && m.Language != nil { + return *m.Language + } + return Default_RecoveryDevice_Language +} + +func (m *RecoveryDevice) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *RecoveryDevice) GetEnforceWordlist() bool { + if m != nil && m.EnforceWordlist != nil { + return *m.EnforceWordlist + } + return false +} + +func (m *RecoveryDevice) GetType() RecoveryDevice_RecoveryDeviceType { + if m != nil && m.Type != nil { + return *m.Type + } + return RecoveryDevice_RecoveryDeviceType_ScrambledWords +} + +func (m *RecoveryDevice) GetU2FCounter() uint32 { + if m != nil && m.U2FCounter != nil { + return *m.U2FCounter + } + return 0 +} + +func (m *RecoveryDevice) GetDryRun() bool { + if m != nil && m.DryRun != nil { + return *m.DryRun + } + return false +} + +//* +// Response: Device is waiting for user to enter word of the mnemonic +// Its position is shown only on device's internal display. +// @next WordAck +type WordRequest struct { + Type *WordRequest_WordRequestType `protobuf:"varint,1,opt,name=type,enum=hw.trezor.messages.management.WordRequest_WordRequestType" json:"type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WordRequest) Reset() { *m = WordRequest{} } +func (m *WordRequest) String() string { return proto.CompactTextString(m) } +func (*WordRequest) ProtoMessage() {} +func (*WordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{18} +} + +func (m *WordRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WordRequest.Unmarshal(m, b) +} +func (m *WordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WordRequest.Marshal(b, m, deterministic) +} +func (m *WordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_WordRequest.Merge(m, src) +} +func (m *WordRequest) XXX_Size() int { + return xxx_messageInfo_WordRequest.Size(m) +} +func (m *WordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_WordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_WordRequest proto.InternalMessageInfo + +func (m *WordRequest) GetType() WordRequest_WordRequestType { + if m != nil && m.Type != nil { + return *m.Type + } + return WordRequest_WordRequestType_Plain +} + +//* +// Request: Computer replies with word from the mnemonic +// @next WordRequest +// @next Success +// @next Failure +type WordAck struct { + Word *string `protobuf:"bytes,1,req,name=word" json:"word,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *WordAck) Reset() { *m = WordAck{} } +func (m *WordAck) String() string { return proto.CompactTextString(m) } +func (*WordAck) ProtoMessage() {} +func (*WordAck) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{19} +} + +func (m *WordAck) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_WordAck.Unmarshal(m, b) +} +func (m *WordAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_WordAck.Marshal(b, m, deterministic) +} +func (m *WordAck) XXX_Merge(src proto.Message) { + xxx_messageInfo_WordAck.Merge(m, src) +} +func (m *WordAck) XXX_Size() int { + return xxx_messageInfo_WordAck.Size(m) +} +func (m *WordAck) XXX_DiscardUnknown() { + xxx_messageInfo_WordAck.DiscardUnknown(m) +} + +var xxx_messageInfo_WordAck proto.InternalMessageInfo + +func (m *WordAck) GetWord() string { + if m != nil && m.Word != nil { + return *m.Word + } + return "" +} + +//* +// Request: Set U2F counter +// @start +// @next Success +type SetU2FCounter struct { + U2FCounter *uint32 `protobuf:"varint,1,opt,name=u2f_counter,json=u2fCounter" json:"u2f_counter,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SetU2FCounter) Reset() { *m = SetU2FCounter{} } +func (m *SetU2FCounter) String() string { return proto.CompactTextString(m) } +func (*SetU2FCounter) ProtoMessage() {} +func (*SetU2FCounter) Descriptor() ([]byte, []int) { + return fileDescriptor_0c720c20d27aa029, []int{20} +} + +func (m *SetU2FCounter) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SetU2FCounter.Unmarshal(m, b) +} +func (m *SetU2FCounter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SetU2FCounter.Marshal(b, m, deterministic) +} +func (m *SetU2FCounter) XXX_Merge(src proto.Message) { + xxx_messageInfo_SetU2FCounter.Merge(m, src) +} +func (m *SetU2FCounter) XXX_Size() int { + return xxx_messageInfo_SetU2FCounter.Size(m) +} +func (m *SetU2FCounter) XXX_DiscardUnknown() { + xxx_messageInfo_SetU2FCounter.DiscardUnknown(m) +} + +var xxx_messageInfo_SetU2FCounter proto.InternalMessageInfo + +func (m *SetU2FCounter) GetU2FCounter() uint32 { + if m != nil && m.U2FCounter != nil { + return *m.U2FCounter + } + return 0 +} + +func init() { + proto.RegisterEnum("hw.trezor.messages.management.ApplySettings_PassphraseSourceType", ApplySettings_PassphraseSourceType_name, ApplySettings_PassphraseSourceType_value) + proto.RegisterEnum("hw.trezor.messages.management.RecoveryDevice_RecoveryDeviceType", RecoveryDevice_RecoveryDeviceType_name, RecoveryDevice_RecoveryDeviceType_value) + proto.RegisterEnum("hw.trezor.messages.management.WordRequest_WordRequestType", WordRequest_WordRequestType_name, WordRequest_WordRequestType_value) + proto.RegisterType((*Initialize)(nil), "hw.trezor.messages.management.Initialize") + proto.RegisterType((*GetFeatures)(nil), "hw.trezor.messages.management.GetFeatures") + proto.RegisterType((*Features)(nil), "hw.trezor.messages.management.Features") + proto.RegisterType((*ClearSession)(nil), "hw.trezor.messages.management.ClearSession") + proto.RegisterType((*ApplySettings)(nil), "hw.trezor.messages.management.ApplySettings") + proto.RegisterType((*ApplyFlags)(nil), "hw.trezor.messages.management.ApplyFlags") + proto.RegisterType((*ChangePin)(nil), "hw.trezor.messages.management.ChangePin") + proto.RegisterType((*Ping)(nil), "hw.trezor.messages.management.Ping") + proto.RegisterType((*Cancel)(nil), "hw.trezor.messages.management.Cancel") + proto.RegisterType((*GetEntropy)(nil), "hw.trezor.messages.management.GetEntropy") + proto.RegisterType((*Entropy)(nil), "hw.trezor.messages.management.Entropy") + proto.RegisterType((*WipeDevice)(nil), "hw.trezor.messages.management.WipeDevice") + proto.RegisterType((*LoadDevice)(nil), "hw.trezor.messages.management.LoadDevice") + proto.RegisterType((*ResetDevice)(nil), "hw.trezor.messages.management.ResetDevice") + proto.RegisterType((*BackupDevice)(nil), "hw.trezor.messages.management.BackupDevice") + proto.RegisterType((*EntropyRequest)(nil), "hw.trezor.messages.management.EntropyRequest") + proto.RegisterType((*EntropyAck)(nil), "hw.trezor.messages.management.EntropyAck") + proto.RegisterType((*RecoveryDevice)(nil), "hw.trezor.messages.management.RecoveryDevice") + proto.RegisterType((*WordRequest)(nil), "hw.trezor.messages.management.WordRequest") + proto.RegisterType((*WordAck)(nil), "hw.trezor.messages.management.WordAck") + proto.RegisterType((*SetU2FCounter)(nil), "hw.trezor.messages.management.SetU2FCounter") +} + +func init() { proto.RegisterFile("messages-management.proto", fileDescriptor_0c720c20d27aa029) } + +var fileDescriptor_0c720c20d27aa029 = []byte{ + // 1393 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xdd, 0x6e, 0xdb, 0xc8, + 0x15, 0x8e, 0x7e, 0x62, 0x49, 0xc7, 0xfa, 0xcb, 0xd4, 0x8e, 0xe9, 0xb8, 0x6e, 0x1c, 0xba, 0x6e, + 0x12, 0x04, 0x15, 0x0a, 0x17, 0x09, 0x90, 0x5c, 0x14, 0x75, 0xec, 0xfc, 0x21, 0x71, 0x6a, 0xd0, + 0x6e, 0x02, 0xf4, 0x86, 0x18, 0x91, 0x47, 0xd2, 0xd4, 0xe4, 0x0c, 0xcb, 0x19, 0xda, 0x55, 0x5e, + 0x60, 0x6f, 0xf6, 0x45, 0x16, 0xfb, 0x1c, 0x7b, 0xb5, 0xcf, 0xb0, 0xef, 0xb2, 0x98, 0x19, 0x52, + 0xa2, 0x65, 0x3b, 0x46, 0x76, 0xef, 0xe6, 0x7c, 0xe7, 0xe3, 0x68, 0xce, 0x77, 0xbe, 0x39, 0x63, + 0xc3, 0x7a, 0x8c, 0x52, 0xd2, 0x31, 0xca, 0xbf, 0xc6, 0x94, 0xd3, 0x31, 0xc6, 0xc8, 0xd5, 0x20, + 0x49, 0x85, 0x12, 0x64, 0x73, 0x72, 0x3e, 0x50, 0x29, 0x7e, 0x11, 0xe9, 0xa0, 0x20, 0x0d, 0xe6, + 0xa4, 0x7b, 0xab, 0xb3, 0x2f, 0x03, 0x11, 0xc7, 0x82, 0xdb, 0xaf, 0xdc, 0xf7, 0x00, 0xef, 0x38, + 0x53, 0x8c, 0x46, 0xec, 0x0b, 0x92, 0x15, 0xb8, 0x2d, 0x15, 0x55, 0xe8, 0x54, 0xb6, 0x2a, 0x8f, + 0xda, 0x9e, 0x0d, 0xc8, 0x43, 0xe8, 0xc9, 0x53, 0x96, 0xf8, 0x09, 0x95, 0x32, 0x99, 0xa4, 0x54, + 0xa2, 0x53, 0xdd, 0xaa, 0x3c, 0x6a, 0x7a, 0x5d, 0x0d, 0x1f, 0xcd, 0x50, 0xb7, 0x03, 0xcb, 0x6f, + 0x50, 0xbd, 0x46, 0xaa, 0xb2, 0x14, 0xa5, 0xfb, 0x7d, 0x03, 0x9a, 0x45, 0x40, 0xee, 0xc2, 0xd2, + 0x19, 0xf2, 0x50, 0xa4, 0x66, 0xef, 0x96, 0x97, 0x47, 0x64, 0x1b, 0x3a, 0x31, 0xfd, 0xaf, 0x48, + 0xfd, 0x33, 0x4c, 0x25, 0x13, 0xdc, 0x6c, 0xdd, 0xf1, 0xda, 0x06, 0xfc, 0x64, 0x31, 0x43, 0x62, + 0xbc, 0x44, 0xaa, 0xe5, 0x24, 0x0d, 0x96, 0x48, 0x09, 0x55, 0xc1, 0x64, 0x46, 0xaa, 0x5b, 0x92, + 0x01, 0x0b, 0xd2, 0x43, 0xe8, 0x0d, 0x85, 0x50, 0x91, 0xa0, 0x21, 0xa6, 0x7e, 0x2c, 0x42, 0x74, + 0x6e, 0xdb, 0x5a, 0xe6, 0xf0, 0xa1, 0x08, 0x91, 0x6c, 0x40, 0x2b, 0xc4, 0x33, 0x16, 0xa0, 0xcf, + 0x42, 0x67, 0xc9, 0x1c, 0xb9, 0x69, 0x81, 0x77, 0x21, 0xd9, 0x81, 0x6e, 0xc2, 0xb8, 0xaf, 0x25, + 0xc4, 0x40, 0xe9, 0xdf, 0x6a, 0x98, 0x4d, 0x3a, 0x09, 0xe3, 0x47, 0x33, 0x90, 0xfc, 0x1d, 0x56, + 0xe7, 0x9a, 0x95, 0xd9, 0x4d, 0xc3, 0x5e, 0x99, 0x27, 0x4b, 0x1f, 0xdd, 0x83, 0x66, 0x44, 0xf9, + 0x38, 0xa3, 0x63, 0x74, 0x5a, 0xf6, 0x77, 0x8b, 0x58, 0xf7, 0x27, 0xa2, 0x43, 0x8c, 0x1c, 0x30, + 0x09, 0x1b, 0x90, 0x2d, 0x58, 0x66, 0xb3, 0x1e, 0x86, 0x4e, 0xdb, 0x6c, 0x5e, 0x86, 0xf4, 0x9e, + 0x29, 0x9e, 0x31, 0xa3, 0x4a, 0xc7, 0xb4, 0x76, 0x16, 0x2f, 0x28, 0x32, 0xa1, 0x72, 0xe2, 0x74, + 0x0d, 0xa5, 0xa4, 0xc8, 0x5b, 0x2a, 0x27, 0x7a, 0x13, 0x16, 0x27, 0x22, 0x55, 0x18, 0x3a, 0x3d, + 0xf3, 0x1b, 0xb3, 0x98, 0x6c, 0x02, 0x68, 0x41, 0x02, 0x1a, 0x4c, 0x30, 0x74, 0xfa, 0x26, 0xdb, + 0x4a, 0x18, 0xdf, 0x37, 0x00, 0x79, 0x02, 0x77, 0x4a, 0x42, 0xe4, 0xac, 0x3b, 0x86, 0xd5, 0x9f, + 0x27, 0x72, 0xf2, 0x63, 0xe8, 0x8f, 0x58, 0x1a, 0x9f, 0xd3, 0x54, 0x6b, 0x86, 0x12, 0xb9, 0x72, + 0x88, 0xe1, 0xf6, 0x0a, 0xfc, 0xc8, 0xc2, 0xe4, 0x01, 0xb4, 0x39, 0x62, 0x28, 0xfd, 0x21, 0x0d, + 0x4e, 0xb3, 0xc4, 0xf9, 0x83, 0x2d, 0xdd, 0x60, 0x2f, 0x0d, 0xa4, 0x25, 0x1b, 0x45, 0x74, 0x2c, + 0x9d, 0x15, 0xe3, 0x06, 0x1b, 0x68, 0x54, 0xf7, 0x3e, 0x72, 0x56, 0xad, 0x90, 0x26, 0x20, 0xeb, + 0xd0, 0x1c, 0x9d, 0xfb, 0xc6, 0x79, 0xce, 0x5d, 0x43, 0x6f, 0x8c, 0xce, 0x0f, 0x75, 0x58, 0xa4, + 0xb4, 0xdf, 0x9c, 0xb5, 0x59, 0x4a, 0x87, 0x79, 0xca, 0xb8, 0xcc, 0x71, 0x8a, 0xd4, 0x91, 0x0e, + 0xb5, 0x89, 0x46, 0xe7, 0x7e, 0xee, 0xfb, 0x75, 0xdb, 0xcc, 0xd1, 0xf9, 0x27, 0xeb, 0xfc, 0x3f, + 0x43, 0x77, 0x96, 0xf4, 0x4f, 0x71, 0x2a, 0x9d, 0x7b, 0x46, 0xf7, 0x76, 0xc1, 0x78, 0x8f, 0x53, + 0xa9, 0xa5, 0xcb, 0xf8, 0x88, 0x71, 0x26, 0x27, 0x18, 0x16, 0x75, 0x6e, 0x58, 0xe9, 0xe6, 0x89, + 0xbc, 0xd8, 0x0d, 0x68, 0x71, 0x51, 0x90, 0xfe, 0x68, 0x7b, 0xc4, 0x85, 0x4d, 0xba, 0x5d, 0x68, + 0xef, 0x47, 0x48, 0xd3, 0x63, 0x94, 0xba, 0xf1, 0xee, 0x77, 0x35, 0xe8, 0xec, 0x25, 0x49, 0x34, + 0x3d, 0x46, 0xa5, 0x18, 0x1f, 0xcb, 0x0b, 0xd6, 0xab, 0x5c, 0x67, 0xbd, 0x6a, 0xd9, 0x7a, 0x3b, + 0xd0, 0xcd, 0xb4, 0xb5, 0xe7, 0x93, 0xa1, 0x66, 0x2f, 0x42, 0x26, 0x71, 0x3e, 0x18, 0xc8, 0x9f, + 0x00, 0x26, 0x22, 0x46, 0x19, 0xa4, 0x88, 0xf6, 0x5e, 0xb6, 0xbd, 0x12, 0x42, 0xf8, 0x05, 0x7f, + 0x48, 0x91, 0xa5, 0x81, 0xbd, 0x97, 0xdd, 0xdd, 0xbd, 0xc1, 0x57, 0xe7, 0xda, 0xe0, 0x42, 0x05, + 0x83, 0xf9, 0x6f, 0x1e, 0x9b, 0x4d, 0x4e, 0xa6, 0x09, 0x96, 0x2d, 0x66, 0x51, 0xf2, 0x04, 0x08, + 0xcd, 0x94, 0xf0, 0x23, 0x11, 0x9c, 0xfa, 0x21, 0x46, 0x74, 0xea, 0xc7, 0xd2, 0xdc, 0xf2, 0x8e, + 0xd7, 0xd3, 0x99, 0x0f, 0x22, 0x38, 0x3d, 0xd0, 0xf8, 0xa1, 0xd4, 0x7e, 0x0c, 0x99, 0x4c, 0x34, + 0x29, 0x15, 0x8a, 0xce, 0xae, 0x7b, 0xc7, 0xeb, 0xe5, 0xb8, 0x97, 0xc3, 0xee, 0x53, 0x58, 0xb9, + 0xea, 0x04, 0xa4, 0x01, 0xb5, 0xbd, 0xe3, 0xf7, 0xfd, 0x5b, 0x04, 0x60, 0xe9, 0xe0, 0xd5, 0xa7, + 0x77, 0xfb, 0xaf, 0xfa, 0x15, 0xd2, 0x84, 0xfa, 0xdb, 0x7f, 0x1d, 0x9f, 0xf4, 0xab, 0xae, 0x0b, + 0x60, 0xca, 0x78, 0x5d, 0x78, 0xd3, 0x3a, 0xb6, 0x52, 0x72, 0xac, 0xbb, 0x0d, 0xad, 0xfd, 0x09, + 0xe5, 0x63, 0x3c, 0x62, 0x5c, 0x0f, 0xd3, 0x14, 0x63, 0x71, 0x66, 0xdb, 0xd4, 0xf4, 0xf2, 0xc8, + 0xfd, 0xa1, 0x02, 0xf5, 0x23, 0xc6, 0xc7, 0xc4, 0x81, 0x46, 0x2e, 0x56, 0xde, 0xc8, 0x22, 0xd4, + 0x7e, 0x1a, 0x66, 0x4a, 0x89, 0x0b, 0xd3, 0xcb, 0x8e, 0xf3, 0xbe, 0x4d, 0x94, 0x66, 0xd1, 0xe5, + 0x39, 0x57, 0xfb, 0xa6, 0x39, 0x57, 0xbf, 0x7e, 0xce, 0xb9, 0x4d, 0x58, 0xda, 0xa7, 0x3c, 0xc0, + 0xc8, 0xdd, 0x02, 0x78, 0x83, 0xea, 0x15, 0x57, 0xa9, 0x48, 0xa6, 0x84, 0x40, 0x5d, 0xb2, 0x2f, + 0xfa, 0xdc, 0xd5, 0x47, 0x1d, 0xcf, 0xac, 0xdd, 0x6d, 0x68, 0x14, 0x69, 0x07, 0x1a, 0x68, 0x97, + 0x86, 0xd1, 0xf6, 0x8a, 0xd0, 0x6d, 0x03, 0x7c, 0x66, 0x09, 0x1e, 0x98, 0x21, 0xed, 0xfe, 0x58, + 0x05, 0xf8, 0x20, 0x68, 0x68, 0x43, 0x6d, 0xed, 0x98, 0x63, 0x2c, 0x38, 0x0b, 0x0a, 0x6b, 0x17, + 0x31, 0x79, 0x0e, 0x75, 0xae, 0x1f, 0x02, 0xad, 0xc2, 0xf2, 0xee, 0xce, 0x55, 0x86, 0xcb, 0xdf, + 0xcc, 0xb7, 0x07, 0x1f, 0x45, 0x68, 0x4d, 0x65, 0x3e, 0x21, 0x7d, 0xa8, 0x25, 0xcc, 0xaa, 0xd2, + 0xf2, 0xf4, 0xf2, 0x37, 0x69, 0x41, 0xb6, 0x4b, 0x17, 0x4f, 0xdb, 0xbe, 0xf5, 0xa2, 0x81, 0x7c, + 0x1c, 0x31, 0x39, 0xb9, 0xea, 0x06, 0x2e, 0x95, 0x6f, 0xe0, 0x36, 0x74, 0xcc, 0xe3, 0x1c, 0x4c, + 0x30, 0x38, 0x95, 0x59, 0x9c, 0xbf, 0x44, 0x6d, 0x0d, 0xee, 0xe7, 0x18, 0xb9, 0x0f, 0xcb, 0xd9, + 0xee, 0xc8, 0x0f, 0x44, 0xc6, 0x15, 0xa6, 0xe6, 0xf9, 0xe9, 0x78, 0x90, 0xed, 0x8e, 0xf6, 0x2d, + 0xe2, 0xfe, 0x5c, 0x85, 0x65, 0x0f, 0x25, 0xaa, 0x5c, 0xae, 0x1d, 0xe8, 0xce, 0x3c, 0x4f, 0x79, + 0x28, 0xe2, 0xdc, 0x68, 0x9d, 0xc2, 0xf1, 0x06, 0x24, 0xf7, 0xa1, 0x29, 0x55, 0x8a, 0x7c, 0xac, + 0x26, 0xf6, 0xdd, 0x7e, 0x51, 0xdb, 0x7d, 0xfa, 0xcc, 0x9b, 0x81, 0xd7, 0xab, 0x51, 0xfb, 0x8a, + 0x1a, 0x97, 0x5d, 0x57, 0xbf, 0xca, 0x75, 0xbf, 0x43, 0xb4, 0x05, 0x3d, 0x1a, 0x8b, 0x7a, 0x68, + 0x82, 0x51, 0x35, 0x1f, 0xa5, 0xf6, 0xbd, 0x06, 0x0d, 0x5d, 0x35, 0x69, 0x5b, 0x97, 0x27, 0xad, + 0x5d, 0xe5, 0x5e, 0xec, 0x43, 0x37, 0xb7, 0xaf, 0x87, 0xff, 0xcb, 0x50, 0x2a, 0xf7, 0x2f, 0x00, + 0x39, 0xb2, 0x17, 0x9c, 0x5e, 0xf4, 0x74, 0xa5, 0xec, 0xe9, 0x5f, 0x6a, 0xd0, 0xf5, 0x30, 0x10, + 0x67, 0x98, 0x4e, 0xf3, 0xd6, 0x6c, 0x02, 0x9c, 0x8b, 0x34, 0xb4, 0x87, 0xcf, 0x67, 0x44, 0x4b, + 0x23, 0xe6, 0xec, 0xd7, 0x2b, 0x5e, 0xfd, 0x26, 0xc5, 0x6b, 0x37, 0x29, 0x5e, 0xbf, 0x51, 0xf1, + 0xdb, 0x65, 0xc5, 0x1f, 0x43, 0x1f, 0xf9, 0x48, 0xa4, 0x01, 0xfa, 0xfa, 0xac, 0x11, 0x93, 0xca, + 0xb4, 0xa4, 0xe9, 0xf5, 0x72, 0xfc, 0x73, 0x0e, 0x93, 0x13, 0xa8, 0xab, 0x69, 0x82, 0x46, 0xf4, + 0xee, 0xee, 0x3f, 0x6f, 0x98, 0xff, 0x17, 0xd5, 0x59, 0x08, 0xed, 0x4d, 0xd5, 0xbb, 0x2d, 0xb6, + 0xbc, 0x75, 0xa9, 0xe5, 0x6b, 0xd0, 0x08, 0xd3, 0xa9, 0x9f, 0x66, 0xdc, 0xfc, 0x75, 0xd5, 0xf4, + 0x96, 0xc2, 0x74, 0xea, 0x65, 0xdc, 0xfd, 0x0f, 0x90, 0xcb, 0xbb, 0x92, 0x1d, 0x78, 0x70, 0x19, + 0xf5, 0x8f, 0x83, 0x94, 0xc6, 0xc3, 0x08, 0x43, 0x5d, 0x8d, 0xec, 0xdf, 0x22, 0x9b, 0xb0, 0x7e, + 0x05, 0xed, 0x90, 0xaa, 0x94, 0xfd, 0xbf, 0x5f, 0x71, 0x7f, 0xaa, 0xc0, 0xb2, 0xa6, 0xe6, 0xbe, + 0x20, 0x1f, 0xf3, 0xda, 0x2b, 0xa6, 0xf6, 0x17, 0x37, 0xd4, 0x5e, 0xfa, 0xb2, 0xbc, 0x9e, 0x57, + 0xed, 0x8e, 0xa0, 0xb7, 0x90, 0x20, 0xeb, 0xb0, 0xba, 0x00, 0xf9, 0x47, 0x11, 0x65, 0xbc, 0x7f, + 0x8b, 0x6c, 0xc0, 0xda, 0x62, 0xca, 0x9e, 0xf4, 0x79, 0xbf, 0x72, 0x7d, 0xf2, 0x59, 0xbf, 0xea, + 0x6e, 0x42, 0x43, 0x27, 0xb5, 0x99, 0x09, 0xd4, 0x75, 0x87, 0xcd, 0x74, 0x6e, 0x79, 0x66, 0xed, + 0xfe, 0x0d, 0x3a, 0xc7, 0xa8, 0xfe, 0xbd, 0xfb, 0xba, 0x74, 0xbf, 0xca, 0xdd, 0xa8, 0x2c, 0x76, + 0xe3, 0xe5, 0x3f, 0x60, 0x3b, 0x10, 0xf1, 0x40, 0x52, 0x25, 0xe4, 0x84, 0x45, 0x74, 0x28, 0x0b, + 0x21, 0x22, 0x36, 0xb4, 0xff, 0xbb, 0x0c, 0xb3, 0xd1, 0xcb, 0xb5, 0x13, 0x03, 0x1e, 0x5a, 0x71, + 0x0e, 0x67, 0xd2, 0xfc, 0x1a, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x6e, 0xfc, 0x59, 0x29, 0x0d, 0x00, + 0x00, +} diff --git a/accounts/usbwallet/trezor/messages-management.proto b/accounts/usbwallet/trezor/messages-management.proto new file mode 100644 index 000000000000..0ab825a1bcca --- /dev/null +++ b/accounts/usbwallet/trezor/messages-management.proto @@ -0,0 +1,289 @@ +// This file originates from the SatoshiLabs Trezor `common` repository at: +// https://github.com/trezor/trezor-common/blob/master/protob/messages-management.proto +// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. + +syntax = "proto2"; +package hw.trezor.messages.management; + +// Sugar for easier handling in Java +option java_package = "com.satoshilabs.trezor.lib.protobuf"; +option java_outer_classname = "TrezorMessageManagement"; + +import "messages-common.proto"; + +/** + * Request: Reset device to default state and ask for device details + * @start + * @next Features + */ +message Initialize { + optional bytes state = 1; // assumed device state, clear session if set and different + optional bool skip_passphrase = 2; // this session should always assume empty passphrase +} + +/** + * Request: Ask for device details (no device reset) + * @start + * @next Features + */ +message GetFeatures { +} + +/** + * Response: Reports various information about the device + * @end + */ +message Features { + optional string vendor = 1; // name of the manufacturer, e.g. "trezor.io" + optional uint32 major_version = 2; // major version of the firmware/bootloader, e.g. 1 + optional uint32 minor_version = 3; // minor version of the firmware/bootloader, e.g. 0 + optional uint32 patch_version = 4; // patch version of the firmware/bootloader, e.g. 0 + optional bool bootloader_mode = 5; // is device in bootloader mode? + optional string device_id = 6; // device's unique identifier + optional bool pin_protection = 7; // is device protected by PIN? + optional bool passphrase_protection = 8; // is node/mnemonic encrypted using passphrase? + optional string language = 9; // device language + optional string label = 10; // device description label + optional bool initialized = 12; // does device contain seed? + optional bytes revision = 13; // SCM revision of firmware + optional bytes bootloader_hash = 14; // hash of the bootloader + optional bool imported = 15; // was storage imported from an external source? + optional bool pin_cached = 16; // is PIN already cached in session? + optional bool passphrase_cached = 17; // is passphrase already cached in session? + optional bool firmware_present = 18; // is valid firmware loaded? + optional bool needs_backup = 19; // does storage need backup? (equals to Storage.needs_backup) + optional uint32 flags = 20; // device flags (equals to Storage.flags) + optional string model = 21; // device hardware model + optional uint32 fw_major = 22; // reported firmware version if in bootloader mode + optional uint32 fw_minor = 23; // reported firmware version if in bootloader mode + optional uint32 fw_patch = 24; // reported firmware version if in bootloader mode + optional string fw_vendor = 25; // reported firmware vendor if in bootloader mode + optional bytes fw_vendor_keys = 26; // reported firmware vendor keys (their hash) + optional bool unfinished_backup = 27; // report unfinished backup (equals to Storage.unfinished_backup) + optional bool no_backup = 28; // report no backup (equals to Storage.no_backup) +} + +/** + * Request: clear session (removes cached PIN, passphrase, etc). + * @start + * @next Success + */ +message ClearSession { +} + +/** + * Request: change language and/or label of the device + * @start + * @next Success + * @next Failure + */ +message ApplySettings { + optional string language = 1; + optional string label = 2; + optional bool use_passphrase = 3; + optional bytes homescreen = 4; + optional PassphraseSourceType passphrase_source = 5; + optional uint32 auto_lock_delay_ms = 6; + optional uint32 display_rotation = 7; // in degrees from North + /** + * Structure representing passphrase source + */ + enum PassphraseSourceType { + ASK = 0; + DEVICE = 1; + HOST = 2; + } +} + +/** + * Request: set flags of the device + * @start + * @next Success + * @next Failure + */ +message ApplyFlags { + optional uint32 flags = 1; // bitmask, can only set bits, not unset +} + +/** + * Request: Starts workflow for setting/changing/removing the PIN + * @start + * @next Success + * @next Failure + */ +message ChangePin { + optional bool remove = 1; // is PIN removal requested? +} + +/** + * Request: Test if the device is alive, device sends back the message in Success response + * @start + * @next Success + */ +message Ping { + optional string message = 1; // message to send back in Success message + optional bool button_protection = 2; // ask for button press + optional bool pin_protection = 3; // ask for PIN if set in device + optional bool passphrase_protection = 4; // ask for passphrase if set in device +} + +/** + * Request: Abort last operation that required user interaction + * @start + * @next Failure + */ +message Cancel { +} + +/** + * Request: Request a sample of random data generated by hardware RNG. May be used for testing. + * @start + * @next Entropy + * @next Failure + */ +message GetEntropy { + required uint32 size = 1; // size of requested entropy +} + +/** + * Response: Reply with random data generated by internal RNG + * @end + */ +message Entropy { + required bytes entropy = 1; // chunk of random generated bytes +} + +/** + * Request: Request device to wipe all sensitive data and settings + * @start + * @next Success + * @next Failure + */ +message WipeDevice { +} + +/** + * Request: Load seed and related internal settings from the computer + * @start + * @next Success + * @next Failure + */ +message LoadDevice { + optional string mnemonic = 1; // seed encoded as BIP-39 mnemonic (12, 18 or 24 words) + optional hw.trezor.messages.common.HDNodeType node = 2; // BIP-32 node + optional string pin = 3; // set PIN protection + optional bool passphrase_protection = 4; // enable master node encryption using passphrase + optional string language = 5 [default='english']; // device language + optional string label = 6; // device label + optional bool skip_checksum = 7; // do not test mnemonic for valid BIP-39 checksum + optional uint32 u2f_counter = 8; // U2F counter +} + +/** + * Request: Ask device to do initialization involving user interaction + * @start + * @next EntropyRequest + * @next Failure + */ +message ResetDevice { + optional bool display_random = 1; // display entropy generated by the device before asking for additional entropy + optional uint32 strength = 2 [default=256]; // strength of seed in bits + optional bool passphrase_protection = 3; // enable master node encryption using passphrase + optional bool pin_protection = 4; // enable PIN protection + optional string language = 5 [default='english']; // device language + optional string label = 6; // device label + optional uint32 u2f_counter = 7; // U2F counter + optional bool skip_backup = 8; // postpone seed backup to BackupDevice workflow + optional bool no_backup = 9; // indicate that no backup is going to be made +} + +/** + * Request: Perform backup of the device seed if not backed up using ResetDevice + * @start + * @next Success + */ +message BackupDevice { +} + +/** + * Response: Ask for additional entropy from host computer + * @next EntropyAck + */ +message EntropyRequest { +} + +/** + * Request: Provide additional entropy for seed generation function + * @next Success + */ +message EntropyAck { + optional bytes entropy = 1; // 256 bits (32 bytes) of random data +} + +/** + * Request: Start recovery workflow asking user for specific words of mnemonic + * Used to recovery device safely even on untrusted computer. + * @start + * @next WordRequest + */ +message RecoveryDevice { + optional uint32 word_count = 1; // number of words in BIP-39 mnemonic + optional bool passphrase_protection = 2; // enable master node encryption using passphrase + optional bool pin_protection = 3; // enable PIN protection + optional string language = 4 [default='english']; // device language + optional string label = 5; // device label + optional bool enforce_wordlist = 6; // enforce BIP-39 wordlist during the process + // 7 reserved for unused recovery method + optional RecoveryDeviceType type = 8; // supported recovery type + optional uint32 u2f_counter = 9; // U2F counter + optional bool dry_run = 10; // perform dry-run recovery workflow (for safe mnemonic validation) + /** + * Type of recovery procedure. These should be used as bitmask, e.g., + * `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` + * listing every method supported by the host computer. + * + * Note that ScrambledWords must be supported by every implementation + * for backward compatibility; there is no way to not support it. + */ + enum RecoveryDeviceType { + // use powers of two when extending this field + RecoveryDeviceType_ScrambledWords = 0; // words in scrambled order + RecoveryDeviceType_Matrix = 1; // matrix recovery type + } +} + +/** + * Response: Device is waiting for user to enter word of the mnemonic + * Its position is shown only on device's internal display. + * @next WordAck + */ +message WordRequest { + optional WordRequestType type = 1; + /** + * Type of Recovery Word request + */ + enum WordRequestType { + WordRequestType_Plain = 0; + WordRequestType_Matrix9 = 1; + WordRequestType_Matrix6 = 2; + } +} + +/** + * Request: Computer replies with word from the mnemonic + * @next WordRequest + * @next Success + * @next Failure + */ +message WordAck { + required string word = 1; // one word of mnemonic on asked position +} + +/** + * Request: Set U2F counter + * @start + * @next Success + */ +message SetU2FCounter { + optional uint32 u2f_counter = 1; // counter +} diff --git a/accounts/usbwallet/trezor/messages.pb.go b/accounts/usbwallet/trezor/messages.pb.go new file mode 100644 index 000000000000..6278bd8ee02c --- /dev/null +++ b/accounts/usbwallet/trezor/messages.pb.go @@ -0,0 +1,889 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: messages.proto + +package trezor + +import ( + fmt "fmt" + math "math" + + proto "github.com/golang/protobuf/proto" + descriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package + +//* +// Mapping between TREZOR wire identifier (uint) and a protobuf message +type MessageType int32 + +const ( + // Management + MessageType_MessageType_Initialize MessageType = 0 + MessageType_MessageType_Ping MessageType = 1 + MessageType_MessageType_Success MessageType = 2 + MessageType_MessageType_Failure MessageType = 3 + MessageType_MessageType_ChangePin MessageType = 4 + MessageType_MessageType_WipeDevice MessageType = 5 + MessageType_MessageType_GetEntropy MessageType = 9 + MessageType_MessageType_Entropy MessageType = 10 + MessageType_MessageType_LoadDevice MessageType = 13 + MessageType_MessageType_ResetDevice MessageType = 14 + MessageType_MessageType_Features MessageType = 17 + MessageType_MessageType_PinMatrixRequest MessageType = 18 + MessageType_MessageType_PinMatrixAck MessageType = 19 + MessageType_MessageType_Cancel MessageType = 20 + MessageType_MessageType_ClearSession MessageType = 24 + MessageType_MessageType_ApplySettings MessageType = 25 + MessageType_MessageType_ButtonRequest MessageType = 26 + MessageType_MessageType_ButtonAck MessageType = 27 + MessageType_MessageType_ApplyFlags MessageType = 28 + MessageType_MessageType_BackupDevice MessageType = 34 + MessageType_MessageType_EntropyRequest MessageType = 35 + MessageType_MessageType_EntropyAck MessageType = 36 + MessageType_MessageType_PassphraseRequest MessageType = 41 + MessageType_MessageType_PassphraseAck MessageType = 42 + MessageType_MessageType_PassphraseStateRequest MessageType = 77 + MessageType_MessageType_PassphraseStateAck MessageType = 78 + MessageType_MessageType_RecoveryDevice MessageType = 45 + MessageType_MessageType_WordRequest MessageType = 46 + MessageType_MessageType_WordAck MessageType = 47 + MessageType_MessageType_GetFeatures MessageType = 55 + MessageType_MessageType_SetU2FCounter MessageType = 63 + // Bootloader + MessageType_MessageType_FirmwareErase MessageType = 6 + MessageType_MessageType_FirmwareUpload MessageType = 7 + MessageType_MessageType_FirmwareRequest MessageType = 8 + MessageType_MessageType_SelfTest MessageType = 32 + // Bitcoin + MessageType_MessageType_GetPublicKey MessageType = 11 + MessageType_MessageType_PublicKey MessageType = 12 + MessageType_MessageType_SignTx MessageType = 15 + MessageType_MessageType_TxRequest MessageType = 21 + MessageType_MessageType_TxAck MessageType = 22 + MessageType_MessageType_GetAddress MessageType = 29 + MessageType_MessageType_Address MessageType = 30 + MessageType_MessageType_SignMessage MessageType = 38 + MessageType_MessageType_VerifyMessage MessageType = 39 + MessageType_MessageType_MessageSignature MessageType = 40 + // Crypto + MessageType_MessageType_CipherKeyValue MessageType = 23 + MessageType_MessageType_CipheredKeyValue MessageType = 48 + MessageType_MessageType_SignIdentity MessageType = 53 + MessageType_MessageType_SignedIdentity MessageType = 54 + MessageType_MessageType_GetECDHSessionKey MessageType = 61 + MessageType_MessageType_ECDHSessionKey MessageType = 62 + MessageType_MessageType_CosiCommit MessageType = 71 + MessageType_MessageType_CosiCommitment MessageType = 72 + MessageType_MessageType_CosiSign MessageType = 73 + MessageType_MessageType_CosiSignature MessageType = 74 + // Debug + MessageType_MessageType_DebugLinkDecision MessageType = 100 + MessageType_MessageType_DebugLinkGetState MessageType = 101 + MessageType_MessageType_DebugLinkState MessageType = 102 + MessageType_MessageType_DebugLinkStop MessageType = 103 + MessageType_MessageType_DebugLinkLog MessageType = 104 + MessageType_MessageType_DebugLinkMemoryRead MessageType = 110 + MessageType_MessageType_DebugLinkMemory MessageType = 111 + MessageType_MessageType_DebugLinkMemoryWrite MessageType = 112 + MessageType_MessageType_DebugLinkFlashErase MessageType = 113 + // Ethereum + MessageType_MessageType_EthereumGetPublicKey MessageType = 450 + MessageType_MessageType_EthereumPublicKey MessageType = 451 + MessageType_MessageType_EthereumGetAddress MessageType = 56 + MessageType_MessageType_EthereumAddress MessageType = 57 + MessageType_MessageType_EthereumSignTx MessageType = 58 + MessageType_MessageType_EthereumTxRequest MessageType = 59 + MessageType_MessageType_EthereumTxAck MessageType = 60 + MessageType_MessageType_EthereumSignMessage MessageType = 64 + MessageType_MessageType_EthereumVerifyMessage MessageType = 65 + MessageType_MessageType_EthereumMessageSignature MessageType = 66 + // NEM + MessageType_MessageType_NEMGetAddress MessageType = 67 + MessageType_MessageType_NEMAddress MessageType = 68 + MessageType_MessageType_NEMSignTx MessageType = 69 + MessageType_MessageType_NEMSignedTx MessageType = 70 + MessageType_MessageType_NEMDecryptMessage MessageType = 75 + MessageType_MessageType_NEMDecryptedMessage MessageType = 76 + // Lisk + MessageType_MessageType_LiskGetAddress MessageType = 114 + MessageType_MessageType_LiskAddress MessageType = 115 + MessageType_MessageType_LiskSignTx MessageType = 116 + MessageType_MessageType_LiskSignedTx MessageType = 117 + MessageType_MessageType_LiskSignMessage MessageType = 118 + MessageType_MessageType_LiskMessageSignature MessageType = 119 + MessageType_MessageType_LiskVerifyMessage MessageType = 120 + MessageType_MessageType_LiskGetPublicKey MessageType = 121 + MessageType_MessageType_LiskPublicKey MessageType = 122 + // Tezos + MessageType_MessageType_TezosGetAddress MessageType = 150 + MessageType_MessageType_TezosAddress MessageType = 151 + MessageType_MessageType_TezosSignTx MessageType = 152 + MessageType_MessageType_TezosSignedTx MessageType = 153 + MessageType_MessageType_TezosGetPublicKey MessageType = 154 + MessageType_MessageType_TezosPublicKey MessageType = 155 + // Stellar + MessageType_MessageType_StellarSignTx MessageType = 202 + MessageType_MessageType_StellarTxOpRequest MessageType = 203 + MessageType_MessageType_StellarGetAddress MessageType = 207 + MessageType_MessageType_StellarAddress MessageType = 208 + MessageType_MessageType_StellarCreateAccountOp MessageType = 210 + MessageType_MessageType_StellarPaymentOp MessageType = 211 + MessageType_MessageType_StellarPathPaymentOp MessageType = 212 + MessageType_MessageType_StellarManageOfferOp MessageType = 213 + MessageType_MessageType_StellarCreatePassiveOfferOp MessageType = 214 + MessageType_MessageType_StellarSetOptionsOp MessageType = 215 + MessageType_MessageType_StellarChangeTrustOp MessageType = 216 + MessageType_MessageType_StellarAllowTrustOp MessageType = 217 + MessageType_MessageType_StellarAccountMergeOp MessageType = 218 + // omitted: StellarInflationOp is not a supported operation, would be 219 + MessageType_MessageType_StellarManageDataOp MessageType = 220 + MessageType_MessageType_StellarBumpSequenceOp MessageType = 221 + MessageType_MessageType_StellarSignedTx MessageType = 230 + // TRON + MessageType_MessageType_TronGetAddress MessageType = 250 + MessageType_MessageType_TronAddress MessageType = 251 + MessageType_MessageType_TronSignTx MessageType = 252 + MessageType_MessageType_TronSignedTx MessageType = 253 + // Cardano + // dropped Sign/VerifyMessage ids 300-302 + MessageType_MessageType_CardanoSignTx MessageType = 303 + MessageType_MessageType_CardanoTxRequest MessageType = 304 + MessageType_MessageType_CardanoGetPublicKey MessageType = 305 + MessageType_MessageType_CardanoPublicKey MessageType = 306 + MessageType_MessageType_CardanoGetAddress MessageType = 307 + MessageType_MessageType_CardanoAddress MessageType = 308 + MessageType_MessageType_CardanoTxAck MessageType = 309 + MessageType_MessageType_CardanoSignedTx MessageType = 310 + // Ontology + MessageType_MessageType_OntologyGetAddress MessageType = 350 + MessageType_MessageType_OntologyAddress MessageType = 351 + MessageType_MessageType_OntologyGetPublicKey MessageType = 352 + MessageType_MessageType_OntologyPublicKey MessageType = 353 + MessageType_MessageType_OntologySignTransfer MessageType = 354 + MessageType_MessageType_OntologySignedTransfer MessageType = 355 + MessageType_MessageType_OntologySignWithdrawOng MessageType = 356 + MessageType_MessageType_OntologySignedWithdrawOng MessageType = 357 + MessageType_MessageType_OntologySignOntIdRegister MessageType = 358 + MessageType_MessageType_OntologySignedOntIdRegister MessageType = 359 + MessageType_MessageType_OntologySignOntIdAddAttributes MessageType = 360 + MessageType_MessageType_OntologySignedOntIdAddAttributes MessageType = 361 + // Ripple + MessageType_MessageType_RippleGetAddress MessageType = 400 + MessageType_MessageType_RippleAddress MessageType = 401 + MessageType_MessageType_RippleSignTx MessageType = 402 + MessageType_MessageType_RippleSignedTx MessageType = 403 + // Monero + MessageType_MessageType_MoneroTransactionInitRequest MessageType = 501 + MessageType_MessageType_MoneroTransactionInitAck MessageType = 502 + MessageType_MessageType_MoneroTransactionSetInputRequest MessageType = 503 + MessageType_MessageType_MoneroTransactionSetInputAck MessageType = 504 + MessageType_MessageType_MoneroTransactionInputsPermutationRequest MessageType = 505 + MessageType_MessageType_MoneroTransactionInputsPermutationAck MessageType = 506 + MessageType_MessageType_MoneroTransactionInputViniRequest MessageType = 507 + MessageType_MessageType_MoneroTransactionInputViniAck MessageType = 508 + MessageType_MessageType_MoneroTransactionAllInputsSetRequest MessageType = 509 + MessageType_MessageType_MoneroTransactionAllInputsSetAck MessageType = 510 + MessageType_MessageType_MoneroTransactionSetOutputRequest MessageType = 511 + MessageType_MessageType_MoneroTransactionSetOutputAck MessageType = 512 + MessageType_MessageType_MoneroTransactionAllOutSetRequest MessageType = 513 + MessageType_MessageType_MoneroTransactionAllOutSetAck MessageType = 514 + MessageType_MessageType_MoneroTransactionSignInputRequest MessageType = 515 + MessageType_MessageType_MoneroTransactionSignInputAck MessageType = 516 + MessageType_MessageType_MoneroTransactionFinalRequest MessageType = 517 + MessageType_MessageType_MoneroTransactionFinalAck MessageType = 518 + MessageType_MessageType_MoneroKeyImageExportInitRequest MessageType = 530 + MessageType_MessageType_MoneroKeyImageExportInitAck MessageType = 531 + MessageType_MessageType_MoneroKeyImageSyncStepRequest MessageType = 532 + MessageType_MessageType_MoneroKeyImageSyncStepAck MessageType = 533 + MessageType_MessageType_MoneroKeyImageSyncFinalRequest MessageType = 534 + MessageType_MessageType_MoneroKeyImageSyncFinalAck MessageType = 535 + MessageType_MessageType_MoneroGetAddress MessageType = 540 + MessageType_MessageType_MoneroAddress MessageType = 541 + MessageType_MessageType_MoneroGetWatchKey MessageType = 542 + MessageType_MessageType_MoneroWatchKey MessageType = 543 + MessageType_MessageType_DebugMoneroDiagRequest MessageType = 546 + MessageType_MessageType_DebugMoneroDiagAck MessageType = 547 + MessageType_MessageType_MoneroGetTxKeyRequest MessageType = 550 + MessageType_MessageType_MoneroGetTxKeyAck MessageType = 551 + MessageType_MessageType_MoneroLiveRefreshStartRequest MessageType = 552 + MessageType_MessageType_MoneroLiveRefreshStartAck MessageType = 553 + MessageType_MessageType_MoneroLiveRefreshStepRequest MessageType = 554 + MessageType_MessageType_MoneroLiveRefreshStepAck MessageType = 555 + MessageType_MessageType_MoneroLiveRefreshFinalRequest MessageType = 556 + MessageType_MessageType_MoneroLiveRefreshFinalAck MessageType = 557 + // EOS + MessageType_MessageType_EosGetPublicKey MessageType = 600 + MessageType_MessageType_EosPublicKey MessageType = 601 + MessageType_MessageType_EosSignTx MessageType = 602 + MessageType_MessageType_EosTxActionRequest MessageType = 603 + MessageType_MessageType_EosTxActionAck MessageType = 604 + MessageType_MessageType_EosSignedTx MessageType = 605 + // Binance + MessageType_MessageType_BinanceGetAddress MessageType = 700 + MessageType_MessageType_BinanceAddress MessageType = 701 + MessageType_MessageType_BinanceGetPublicKey MessageType = 702 + MessageType_MessageType_BinancePublicKey MessageType = 703 + MessageType_MessageType_BinanceSignTx MessageType = 704 + MessageType_MessageType_BinanceTxRequest MessageType = 705 + MessageType_MessageType_BinanceTransferMsg MessageType = 706 + MessageType_MessageType_BinanceOrderMsg MessageType = 707 + MessageType_MessageType_BinanceCancelMsg MessageType = 708 + MessageType_MessageType_BinanceSignedTx MessageType = 709 +) + +var MessageType_name = map[int32]string{ + 0: "MessageType_Initialize", + 1: "MessageType_Ping", + 2: "MessageType_Success", + 3: "MessageType_Failure", + 4: "MessageType_ChangePin", + 5: "MessageType_WipeDevice", + 9: "MessageType_GetEntropy", + 10: "MessageType_Entropy", + 13: "MessageType_LoadDevice", + 14: "MessageType_ResetDevice", + 17: "MessageType_Features", + 18: "MessageType_PinMatrixRequest", + 19: "MessageType_PinMatrixAck", + 20: "MessageType_Cancel", + 24: "MessageType_ClearSession", + 25: "MessageType_ApplySettings", + 26: "MessageType_ButtonRequest", + 27: "MessageType_ButtonAck", + 28: "MessageType_ApplyFlags", + 34: "MessageType_BackupDevice", + 35: "MessageType_EntropyRequest", + 36: "MessageType_EntropyAck", + 41: "MessageType_PassphraseRequest", + 42: "MessageType_PassphraseAck", + 77: "MessageType_PassphraseStateRequest", + 78: "MessageType_PassphraseStateAck", + 45: "MessageType_RecoveryDevice", + 46: "MessageType_WordRequest", + 47: "MessageType_WordAck", + 55: "MessageType_GetFeatures", + 63: "MessageType_SetU2FCounter", + 6: "MessageType_FirmwareErase", + 7: "MessageType_FirmwareUpload", + 8: "MessageType_FirmwareRequest", + 32: "MessageType_SelfTest", + 11: "MessageType_GetPublicKey", + 12: "MessageType_PublicKey", + 15: "MessageType_SignTx", + 21: "MessageType_TxRequest", + 22: "MessageType_TxAck", + 29: "MessageType_GetAddress", + 30: "MessageType_Address", + 38: "MessageType_SignMessage", + 39: "MessageType_VerifyMessage", + 40: "MessageType_MessageSignature", + 23: "MessageType_CipherKeyValue", + 48: "MessageType_CipheredKeyValue", + 53: "MessageType_SignIdentity", + 54: "MessageType_SignedIdentity", + 61: "MessageType_GetECDHSessionKey", + 62: "MessageType_ECDHSessionKey", + 71: "MessageType_CosiCommit", + 72: "MessageType_CosiCommitment", + 73: "MessageType_CosiSign", + 74: "MessageType_CosiSignature", + 100: "MessageType_DebugLinkDecision", + 101: "MessageType_DebugLinkGetState", + 102: "MessageType_DebugLinkState", + 103: "MessageType_DebugLinkStop", + 104: "MessageType_DebugLinkLog", + 110: "MessageType_DebugLinkMemoryRead", + 111: "MessageType_DebugLinkMemory", + 112: "MessageType_DebugLinkMemoryWrite", + 113: "MessageType_DebugLinkFlashErase", + 450: "MessageType_EthereumGetPublicKey", + 451: "MessageType_EthereumPublicKey", + 56: "MessageType_EthereumGetAddress", + 57: "MessageType_EthereumAddress", + 58: "MessageType_EthereumSignTx", + 59: "MessageType_EthereumTxRequest", + 60: "MessageType_EthereumTxAck", + 64: "MessageType_EthereumSignMessage", + 65: "MessageType_EthereumVerifyMessage", + 66: "MessageType_EthereumMessageSignature", + 67: "MessageType_NEMGetAddress", + 68: "MessageType_NEMAddress", + 69: "MessageType_NEMSignTx", + 70: "MessageType_NEMSignedTx", + 75: "MessageType_NEMDecryptMessage", + 76: "MessageType_NEMDecryptedMessage", + 114: "MessageType_LiskGetAddress", + 115: "MessageType_LiskAddress", + 116: "MessageType_LiskSignTx", + 117: "MessageType_LiskSignedTx", + 118: "MessageType_LiskSignMessage", + 119: "MessageType_LiskMessageSignature", + 120: "MessageType_LiskVerifyMessage", + 121: "MessageType_LiskGetPublicKey", + 122: "MessageType_LiskPublicKey", + 150: "MessageType_TezosGetAddress", + 151: "MessageType_TezosAddress", + 152: "MessageType_TezosSignTx", + 153: "MessageType_TezosSignedTx", + 154: "MessageType_TezosGetPublicKey", + 155: "MessageType_TezosPublicKey", + 202: "MessageType_StellarSignTx", + 203: "MessageType_StellarTxOpRequest", + 207: "MessageType_StellarGetAddress", + 208: "MessageType_StellarAddress", + 210: "MessageType_StellarCreateAccountOp", + 211: "MessageType_StellarPaymentOp", + 212: "MessageType_StellarPathPaymentOp", + 213: "MessageType_StellarManageOfferOp", + 214: "MessageType_StellarCreatePassiveOfferOp", + 215: "MessageType_StellarSetOptionsOp", + 216: "MessageType_StellarChangeTrustOp", + 217: "MessageType_StellarAllowTrustOp", + 218: "MessageType_StellarAccountMergeOp", + 220: "MessageType_StellarManageDataOp", + 221: "MessageType_StellarBumpSequenceOp", + 230: "MessageType_StellarSignedTx", + 250: "MessageType_TronGetAddress", + 251: "MessageType_TronAddress", + 252: "MessageType_TronSignTx", + 253: "MessageType_TronSignedTx", + 303: "MessageType_CardanoSignTx", + 304: "MessageType_CardanoTxRequest", + 305: "MessageType_CardanoGetPublicKey", + 306: "MessageType_CardanoPublicKey", + 307: "MessageType_CardanoGetAddress", + 308: "MessageType_CardanoAddress", + 309: "MessageType_CardanoTxAck", + 310: "MessageType_CardanoSignedTx", + 350: "MessageType_OntologyGetAddress", + 351: "MessageType_OntologyAddress", + 352: "MessageType_OntologyGetPublicKey", + 353: "MessageType_OntologyPublicKey", + 354: "MessageType_OntologySignTransfer", + 355: "MessageType_OntologySignedTransfer", + 356: "MessageType_OntologySignWithdrawOng", + 357: "MessageType_OntologySignedWithdrawOng", + 358: "MessageType_OntologySignOntIdRegister", + 359: "MessageType_OntologySignedOntIdRegister", + 360: "MessageType_OntologySignOntIdAddAttributes", + 361: "MessageType_OntologySignedOntIdAddAttributes", + 400: "MessageType_RippleGetAddress", + 401: "MessageType_RippleAddress", + 402: "MessageType_RippleSignTx", + 403: "MessageType_RippleSignedTx", + 501: "MessageType_MoneroTransactionInitRequest", + 502: "MessageType_MoneroTransactionInitAck", + 503: "MessageType_MoneroTransactionSetInputRequest", + 504: "MessageType_MoneroTransactionSetInputAck", + 505: "MessageType_MoneroTransactionInputsPermutationRequest", + 506: "MessageType_MoneroTransactionInputsPermutationAck", + 507: "MessageType_MoneroTransactionInputViniRequest", + 508: "MessageType_MoneroTransactionInputViniAck", + 509: "MessageType_MoneroTransactionAllInputsSetRequest", + 510: "MessageType_MoneroTransactionAllInputsSetAck", + 511: "MessageType_MoneroTransactionSetOutputRequest", + 512: "MessageType_MoneroTransactionSetOutputAck", + 513: "MessageType_MoneroTransactionAllOutSetRequest", + 514: "MessageType_MoneroTransactionAllOutSetAck", + 515: "MessageType_MoneroTransactionSignInputRequest", + 516: "MessageType_MoneroTransactionSignInputAck", + 517: "MessageType_MoneroTransactionFinalRequest", + 518: "MessageType_MoneroTransactionFinalAck", + 530: "MessageType_MoneroKeyImageExportInitRequest", + 531: "MessageType_MoneroKeyImageExportInitAck", + 532: "MessageType_MoneroKeyImageSyncStepRequest", + 533: "MessageType_MoneroKeyImageSyncStepAck", + 534: "MessageType_MoneroKeyImageSyncFinalRequest", + 535: "MessageType_MoneroKeyImageSyncFinalAck", + 540: "MessageType_MoneroGetAddress", + 541: "MessageType_MoneroAddress", + 542: "MessageType_MoneroGetWatchKey", + 543: "MessageType_MoneroWatchKey", + 546: "MessageType_DebugMoneroDiagRequest", + 547: "MessageType_DebugMoneroDiagAck", + 550: "MessageType_MoneroGetTxKeyRequest", + 551: "MessageType_MoneroGetTxKeyAck", + 552: "MessageType_MoneroLiveRefreshStartRequest", + 553: "MessageType_MoneroLiveRefreshStartAck", + 554: "MessageType_MoneroLiveRefreshStepRequest", + 555: "MessageType_MoneroLiveRefreshStepAck", + 556: "MessageType_MoneroLiveRefreshFinalRequest", + 557: "MessageType_MoneroLiveRefreshFinalAck", + 600: "MessageType_EosGetPublicKey", + 601: "MessageType_EosPublicKey", + 602: "MessageType_EosSignTx", + 603: "MessageType_EosTxActionRequest", + 604: "MessageType_EosTxActionAck", + 605: "MessageType_EosSignedTx", + 700: "MessageType_BinanceGetAddress", + 701: "MessageType_BinanceAddress", + 702: "MessageType_BinanceGetPublicKey", + 703: "MessageType_BinancePublicKey", + 704: "MessageType_BinanceSignTx", + 705: "MessageType_BinanceTxRequest", + 706: "MessageType_BinanceTransferMsg", + 707: "MessageType_BinanceOrderMsg", + 708: "MessageType_BinanceCancelMsg", + 709: "MessageType_BinanceSignedTx", +} + +var MessageType_value = map[string]int32{ + "MessageType_Initialize": 0, + "MessageType_Ping": 1, + "MessageType_Success": 2, + "MessageType_Failure": 3, + "MessageType_ChangePin": 4, + "MessageType_WipeDevice": 5, + "MessageType_GetEntropy": 9, + "MessageType_Entropy": 10, + "MessageType_LoadDevice": 13, + "MessageType_ResetDevice": 14, + "MessageType_Features": 17, + "MessageType_PinMatrixRequest": 18, + "MessageType_PinMatrixAck": 19, + "MessageType_Cancel": 20, + "MessageType_ClearSession": 24, + "MessageType_ApplySettings": 25, + "MessageType_ButtonRequest": 26, + "MessageType_ButtonAck": 27, + "MessageType_ApplyFlags": 28, + "MessageType_BackupDevice": 34, + "MessageType_EntropyRequest": 35, + "MessageType_EntropyAck": 36, + "MessageType_PassphraseRequest": 41, + "MessageType_PassphraseAck": 42, + "MessageType_PassphraseStateRequest": 77, + "MessageType_PassphraseStateAck": 78, + "MessageType_RecoveryDevice": 45, + "MessageType_WordRequest": 46, + "MessageType_WordAck": 47, + "MessageType_GetFeatures": 55, + "MessageType_SetU2FCounter": 63, + "MessageType_FirmwareErase": 6, + "MessageType_FirmwareUpload": 7, + "MessageType_FirmwareRequest": 8, + "MessageType_SelfTest": 32, + "MessageType_GetPublicKey": 11, + "MessageType_PublicKey": 12, + "MessageType_SignTx": 15, + "MessageType_TxRequest": 21, + "MessageType_TxAck": 22, + "MessageType_GetAddress": 29, + "MessageType_Address": 30, + "MessageType_SignMessage": 38, + "MessageType_VerifyMessage": 39, + "MessageType_MessageSignature": 40, + "MessageType_CipherKeyValue": 23, + "MessageType_CipheredKeyValue": 48, + "MessageType_SignIdentity": 53, + "MessageType_SignedIdentity": 54, + "MessageType_GetECDHSessionKey": 61, + "MessageType_ECDHSessionKey": 62, + "MessageType_CosiCommit": 71, + "MessageType_CosiCommitment": 72, + "MessageType_CosiSign": 73, + "MessageType_CosiSignature": 74, + "MessageType_DebugLinkDecision": 100, + "MessageType_DebugLinkGetState": 101, + "MessageType_DebugLinkState": 102, + "MessageType_DebugLinkStop": 103, + "MessageType_DebugLinkLog": 104, + "MessageType_DebugLinkMemoryRead": 110, + "MessageType_DebugLinkMemory": 111, + "MessageType_DebugLinkMemoryWrite": 112, + "MessageType_DebugLinkFlashErase": 113, + "MessageType_EthereumGetPublicKey": 450, + "MessageType_EthereumPublicKey": 451, + "MessageType_EthereumGetAddress": 56, + "MessageType_EthereumAddress": 57, + "MessageType_EthereumSignTx": 58, + "MessageType_EthereumTxRequest": 59, + "MessageType_EthereumTxAck": 60, + "MessageType_EthereumSignMessage": 64, + "MessageType_EthereumVerifyMessage": 65, + "MessageType_EthereumMessageSignature": 66, + "MessageType_NEMGetAddress": 67, + "MessageType_NEMAddress": 68, + "MessageType_NEMSignTx": 69, + "MessageType_NEMSignedTx": 70, + "MessageType_NEMDecryptMessage": 75, + "MessageType_NEMDecryptedMessage": 76, + "MessageType_LiskGetAddress": 114, + "MessageType_LiskAddress": 115, + "MessageType_LiskSignTx": 116, + "MessageType_LiskSignedTx": 117, + "MessageType_LiskSignMessage": 118, + "MessageType_LiskMessageSignature": 119, + "MessageType_LiskVerifyMessage": 120, + "MessageType_LiskGetPublicKey": 121, + "MessageType_LiskPublicKey": 122, + "MessageType_TezosGetAddress": 150, + "MessageType_TezosAddress": 151, + "MessageType_TezosSignTx": 152, + "MessageType_TezosSignedTx": 153, + "MessageType_TezosGetPublicKey": 154, + "MessageType_TezosPublicKey": 155, + "MessageType_StellarSignTx": 202, + "MessageType_StellarTxOpRequest": 203, + "MessageType_StellarGetAddress": 207, + "MessageType_StellarAddress": 208, + "MessageType_StellarCreateAccountOp": 210, + "MessageType_StellarPaymentOp": 211, + "MessageType_StellarPathPaymentOp": 212, + "MessageType_StellarManageOfferOp": 213, + "MessageType_StellarCreatePassiveOfferOp": 214, + "MessageType_StellarSetOptionsOp": 215, + "MessageType_StellarChangeTrustOp": 216, + "MessageType_StellarAllowTrustOp": 217, + "MessageType_StellarAccountMergeOp": 218, + "MessageType_StellarManageDataOp": 220, + "MessageType_StellarBumpSequenceOp": 221, + "MessageType_StellarSignedTx": 230, + "MessageType_TronGetAddress": 250, + "MessageType_TronAddress": 251, + "MessageType_TronSignTx": 252, + "MessageType_TronSignedTx": 253, + "MessageType_CardanoSignTx": 303, + "MessageType_CardanoTxRequest": 304, + "MessageType_CardanoGetPublicKey": 305, + "MessageType_CardanoPublicKey": 306, + "MessageType_CardanoGetAddress": 307, + "MessageType_CardanoAddress": 308, + "MessageType_CardanoTxAck": 309, + "MessageType_CardanoSignedTx": 310, + "MessageType_OntologyGetAddress": 350, + "MessageType_OntologyAddress": 351, + "MessageType_OntologyGetPublicKey": 352, + "MessageType_OntologyPublicKey": 353, + "MessageType_OntologySignTransfer": 354, + "MessageType_OntologySignedTransfer": 355, + "MessageType_OntologySignWithdrawOng": 356, + "MessageType_OntologySignedWithdrawOng": 357, + "MessageType_OntologySignOntIdRegister": 358, + "MessageType_OntologySignedOntIdRegister": 359, + "MessageType_OntologySignOntIdAddAttributes": 360, + "MessageType_OntologySignedOntIdAddAttributes": 361, + "MessageType_RippleGetAddress": 400, + "MessageType_RippleAddress": 401, + "MessageType_RippleSignTx": 402, + "MessageType_RippleSignedTx": 403, + "MessageType_MoneroTransactionInitRequest": 501, + "MessageType_MoneroTransactionInitAck": 502, + "MessageType_MoneroTransactionSetInputRequest": 503, + "MessageType_MoneroTransactionSetInputAck": 504, + "MessageType_MoneroTransactionInputsPermutationRequest": 505, + "MessageType_MoneroTransactionInputsPermutationAck": 506, + "MessageType_MoneroTransactionInputViniRequest": 507, + "MessageType_MoneroTransactionInputViniAck": 508, + "MessageType_MoneroTransactionAllInputsSetRequest": 509, + "MessageType_MoneroTransactionAllInputsSetAck": 510, + "MessageType_MoneroTransactionSetOutputRequest": 511, + "MessageType_MoneroTransactionSetOutputAck": 512, + "MessageType_MoneroTransactionAllOutSetRequest": 513, + "MessageType_MoneroTransactionAllOutSetAck": 514, + "MessageType_MoneroTransactionSignInputRequest": 515, + "MessageType_MoneroTransactionSignInputAck": 516, + "MessageType_MoneroTransactionFinalRequest": 517, + "MessageType_MoneroTransactionFinalAck": 518, + "MessageType_MoneroKeyImageExportInitRequest": 530, + "MessageType_MoneroKeyImageExportInitAck": 531, + "MessageType_MoneroKeyImageSyncStepRequest": 532, + "MessageType_MoneroKeyImageSyncStepAck": 533, + "MessageType_MoneroKeyImageSyncFinalRequest": 534, + "MessageType_MoneroKeyImageSyncFinalAck": 535, + "MessageType_MoneroGetAddress": 540, + "MessageType_MoneroAddress": 541, + "MessageType_MoneroGetWatchKey": 542, + "MessageType_MoneroWatchKey": 543, + "MessageType_DebugMoneroDiagRequest": 546, + "MessageType_DebugMoneroDiagAck": 547, + "MessageType_MoneroGetTxKeyRequest": 550, + "MessageType_MoneroGetTxKeyAck": 551, + "MessageType_MoneroLiveRefreshStartRequest": 552, + "MessageType_MoneroLiveRefreshStartAck": 553, + "MessageType_MoneroLiveRefreshStepRequest": 554, + "MessageType_MoneroLiveRefreshStepAck": 555, + "MessageType_MoneroLiveRefreshFinalRequest": 556, + "MessageType_MoneroLiveRefreshFinalAck": 557, + "MessageType_EosGetPublicKey": 600, + "MessageType_EosPublicKey": 601, + "MessageType_EosSignTx": 602, + "MessageType_EosTxActionRequest": 603, + "MessageType_EosTxActionAck": 604, + "MessageType_EosSignedTx": 605, + "MessageType_BinanceGetAddress": 700, + "MessageType_BinanceAddress": 701, + "MessageType_BinanceGetPublicKey": 702, + "MessageType_BinancePublicKey": 703, + "MessageType_BinanceSignTx": 704, + "MessageType_BinanceTxRequest": 705, + "MessageType_BinanceTransferMsg": 706, + "MessageType_BinanceOrderMsg": 707, + "MessageType_BinanceCancelMsg": 708, + "MessageType_BinanceSignedTx": 709, +} + +func (x MessageType) Enum() *MessageType { + p := new(MessageType) + *p = x + return p +} + +func (x MessageType) String() string { + return proto.EnumName(MessageType_name, int32(x)) +} + +func (x *MessageType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(MessageType_value, data, "MessageType") + if err != nil { + return err + } + *x = MessageType(value) + return nil +} + +func (MessageType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_4dc296cbfe5ffcd5, []int{0} +} + +var E_WireIn = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50002, + Name: "hw.trezor.messages.wire_in", + Tag: "varint,50002,opt,name=wire_in", + Filename: "messages.proto", +} + +var E_WireOut = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50003, + Name: "hw.trezor.messages.wire_out", + Tag: "varint,50003,opt,name=wire_out", + Filename: "messages.proto", +} + +var E_WireDebugIn = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50004, + Name: "hw.trezor.messages.wire_debug_in", + Tag: "varint,50004,opt,name=wire_debug_in", + Filename: "messages.proto", +} + +var E_WireDebugOut = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50005, + Name: "hw.trezor.messages.wire_debug_out", + Tag: "varint,50005,opt,name=wire_debug_out", + Filename: "messages.proto", +} + +var E_WireTiny = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50006, + Name: "hw.trezor.messages.wire_tiny", + Tag: "varint,50006,opt,name=wire_tiny", + Filename: "messages.proto", +} + +var E_WireBootloader = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50007, + Name: "hw.trezor.messages.wire_bootloader", + Tag: "varint,50007,opt,name=wire_bootloader", + Filename: "messages.proto", +} + +var E_WireNoFsm = &proto.ExtensionDesc{ + ExtendedType: (*descriptor.EnumValueOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 50008, + Name: "hw.trezor.messages.wire_no_fsm", + Tag: "varint,50008,opt,name=wire_no_fsm", + Filename: "messages.proto", +} + +func init() { + proto.RegisterEnum("hw.trezor.messages.MessageType", MessageType_name, MessageType_value) + proto.RegisterExtension(E_WireIn) + proto.RegisterExtension(E_WireOut) + proto.RegisterExtension(E_WireDebugIn) + proto.RegisterExtension(E_WireDebugOut) + proto.RegisterExtension(E_WireTiny) + proto.RegisterExtension(E_WireBootloader) + proto.RegisterExtension(E_WireNoFsm) +} + +func init() { proto.RegisterFile("messages.proto", fileDescriptor_4dc296cbfe5ffcd5) } + +var fileDescriptor_4dc296cbfe5ffcd5 = []byte{ + // 2430 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x9a, 0xd9, 0x73, 0x1c, 0xc5, + 0x1d, 0xc7, 0xb3, 0xab, 0x11, 0x88, 0xf6, 0x41, 0x23, 0xb0, 0x2d, 0xaf, 0x2f, 0xf9, 0xc0, 0x96, + 0x2f, 0xd9, 0x10, 0x0c, 0x44, 0x38, 0x60, 0x69, 0xb5, 0x12, 0x8a, 0xb5, 0x5a, 0x97, 0x76, 0xb1, + 0x1f, 0x5d, 0xa3, 0x9d, 0xd6, 0x6e, 0x97, 0x67, 0x67, 0x86, 0x9e, 0x1e, 0x49, 0xeb, 0xa7, 0x9c, + 0x3c, 0x13, 0x48, 0xc0, 0xb9, 0xa9, 0xa4, 0x2a, 0x21, 0x57, 0x85, 0x1c, 0x4e, 0x25, 0x55, 0x39, + 0x08, 0x24, 0x2f, 0xc9, 0x43, 0x52, 0x9c, 0x86, 0x40, 0xee, 0x90, 0xe4, 0x0f, 0xc8, 0xc5, 0x91, + 0xa4, 0x7a, 0xa6, 0xbb, 0xe7, 0xd8, 0xdf, 0xae, 0x36, 0x6f, 0x58, 0xf3, 0xf9, 0x7d, 0x7f, 0x47, + 0xff, 0xfa, 0x37, 0xdd, 0xb3, 0xa0, 0xcd, 0x2d, 0xe2, 0xfb, 0x66, 0x83, 0xf8, 0xe3, 0x1e, 0x73, + 0xb9, 0x3b, 0x3c, 0xdc, 0x5c, 0x1d, 0xe7, 0x8c, 0x5c, 0x76, 0xd9, 0xb8, 0x7a, 0x52, 0x18, 0x6d, + 0xb8, 0x6e, 0xc3, 0x26, 0x27, 0x42, 0x62, 0x29, 0x58, 0x3e, 0x61, 0x11, 0xbf, 0xce, 0xa8, 0xc7, + 0x5d, 0x16, 0x59, 0x1d, 0xf9, 0xfe, 0x7d, 0x68, 0x43, 0x39, 0xc2, 0x6b, 0x6d, 0x8f, 0x0c, 0x1f, + 0x40, 0x5b, 0x13, 0xff, 0xbc, 0x38, 0xe7, 0x50, 0x4e, 0x4d, 0x9b, 0x5e, 0x26, 0xf8, 0x5d, 0x85, + 0xa1, 0x87, 0xaf, 0x8e, 0xe4, 0x9e, 0xba, 0x3a, 0x92, 0x1b, 0x2e, 0x20, 0x9c, 0xa4, 0xce, 0x51, + 0xa7, 0x81, 0x73, 0x05, 0x43, 0x3c, 0x1f, 0xde, 0x85, 0x6e, 0x4e, 0x3e, 0xab, 0x06, 0xf5, 0x3a, + 0xf1, 0x7d, 0x9c, 0x2f, 0x18, 0x57, 0x80, 0xc7, 0x33, 0x26, 0xb5, 0x03, 0x46, 0xf0, 0x80, 0x7c, + 0xbc, 0x07, 0x6d, 0x49, 0x3e, 0x2e, 0x36, 0x4d, 0xa7, 0x41, 0xce, 0x51, 0x07, 0x1b, 0x52, 0x7e, + 0x34, 0x1d, 0xe0, 0x05, 0xea, 0x91, 0x69, 0xb2, 0x42, 0xeb, 0x04, 0x0f, 0xc2, 0xc4, 0x2c, 0xe1, + 0x25, 0x87, 0x33, 0xd7, 0x6b, 0xe3, 0x1b, 0xe0, 0x10, 0xd5, 0x63, 0x24, 0x63, 0xc8, 0x08, 0xcc, + 0xbb, 0xa6, 0x25, 0x5d, 0x6c, 0x92, 0x02, 0x7b, 0xd1, 0xb6, 0x24, 0xb1, 0x48, 0x7c, 0xc2, 0x25, + 0xb2, 0x59, 0x22, 0xbb, 0xd1, 0x2d, 0xa9, 0x3c, 0x89, 0xc9, 0x03, 0x46, 0x7c, 0x7c, 0x93, 0x74, + 0x72, 0x10, 0xed, 0xcc, 0x94, 0xb0, 0x6c, 0x72, 0x46, 0xd7, 0x16, 0xc9, 0x83, 0x01, 0xf1, 0x39, + 0x1e, 0x96, 0xdc, 0x11, 0x34, 0x02, 0x72, 0x93, 0xf5, 0x4b, 0xf8, 0xe6, 0xc2, 0x46, 0xb5, 0x24, + 0x4f, 0x47, 0x81, 0x0f, 0xa7, 0x8a, 0x67, 0x3a, 0x75, 0x62, 0xe3, 0x5b, 0x12, 0x0b, 0xb7, 0x2f, + 0xad, 0x56, 0xb4, 0x89, 0xc9, 0xaa, 0xc4, 0xf7, 0xa9, 0xeb, 0xe0, 0x11, 0x19, 0xf9, 0x7e, 0xb4, + 0x3d, 0xc9, 0x4c, 0x7a, 0x9e, 0xdd, 0xae, 0x12, 0xce, 0xa9, 0xd3, 0xf0, 0xf1, 0x76, 0x18, 0x9a, + 0x0a, 0x38, 0x77, 0x1d, 0x15, 0x7b, 0x41, 0xc6, 0x7e, 0x28, 0xbd, 0x98, 0x11, 0x24, 0x02, 0xdf, + 0xd1, 0x11, 0xf8, 0xd6, 0x0e, 0x97, 0x33, 0xb6, 0xd9, 0xf0, 0xf1, 0x4e, 0xe9, 0x2f, 0x13, 0xf8, + 0x94, 0x59, 0xbf, 0x14, 0x78, 0xb2, 0xe4, 0xfb, 0x24, 0x73, 0x00, 0x15, 0x80, 0x65, 0x55, 0x41, + 0xed, 0x87, 0x57, 0x57, 0x52, 0x22, 0xaa, 0x03, 0x52, 0xe7, 0x10, 0xda, 0x95, 0x2a, 0xb9, 0xe9, + 0xfb, 0x5e, 0x93, 0x99, 0x3e, 0x51, 0x52, 0x87, 0xa5, 0xd4, 0xd1, 0x74, 0x11, 0x62, 0x50, 0xa8, + 0x1d, 0xc9, 0xe4, 0x78, 0x0c, 0xed, 0x83, 0xe1, 0x2a, 0x37, 0xb9, 0x96, 0x2e, 0x4b, 0xe9, 0x93, + 0x68, 0x77, 0x0f, 0x5a, 0xe8, 0x2f, 0x64, 0xf4, 0x33, 0xd9, 0x2f, 0x92, 0xba, 0xbb, 0x42, 0x58, + 0x5b, 0xd6, 0xe8, 0x38, 0xdc, 0xb9, 0x17, 0x5c, 0x66, 0x29, 0xd7, 0xe3, 0xf0, 0x0e, 0x15, 0x88, + 0xf0, 0x77, 0x02, 0x56, 0x98, 0x25, 0x5c, 0xf7, 0xf6, 0x5d, 0x70, 0x73, 0x54, 0x09, 0x7f, 0xe0, + 0xf6, 0x99, 0xa2, 0x1b, 0x38, 0x9c, 0x30, 0x7c, 0x9f, 0xae, 0x72, 0x0a, 0x9a, 0xa1, 0xac, 0xb5, + 0x6a, 0x32, 0x52, 0x12, 0x49, 0xe2, 0xeb, 0xa2, 0x9e, 0xfd, 0x9e, 0x00, 0xc7, 0xd2, 0x89, 0x29, + 0xf0, 0x01, 0xcf, 0x76, 0x4d, 0x0b, 0x5f, 0x9f, 0x20, 0x0f, 0xa3, 0x1d, 0x10, 0xa9, 0x12, 0x1c, + 0x2a, 0x0c, 0x5d, 0x51, 0xe8, 0xbe, 0xf4, 0xf6, 0xac, 0x12, 0x7b, 0xb9, 0x26, 0x98, 0xd1, 0x84, + 0x5c, 0xa6, 0xe7, 0x66, 0x09, 0x3f, 0x17, 0x2c, 0xd9, 0xb4, 0x7e, 0x96, 0xb4, 0xf1, 0x06, 0x99, + 0x45, 0x66, 0x5e, 0xc5, 0xc0, 0x46, 0x59, 0xcd, 0x9d, 0xe9, 0x3d, 0x59, 0xa5, 0x0d, 0xa7, 0xb6, + 0x86, 0x6f, 0x84, 0xcd, 0x6b, 0x7a, 0xfb, 0x6f, 0x91, 0xe6, 0x3b, 0xd0, 0x4d, 0x69, 0x40, 0x2c, + 0xc5, 0xd6, 0xae, 0x93, 0x6e, 0xd2, 0xb2, 0x98, 0x98, 0xb6, 0xbb, 0xe0, 0x49, 0xa7, 0x1e, 0xef, + 0x96, 0xea, 0x99, 0xb5, 0x14, 0xc1, 0xc9, 0x7f, 0xe3, 0x83, 0xf0, 0x5a, 0x9e, 0x27, 0x8c, 0x2e, + 0xb7, 0x15, 0x74, 0x48, 0x42, 0x99, 0x61, 0x26, 0xff, 0x5b, 0xc8, 0x85, 0x9d, 0x81, 0xc7, 0xa4, + 0xbf, 0x4c, 0x8f, 0x16, 0xa9, 0xd7, 0x24, 0xec, 0x2c, 0x69, 0x9f, 0x37, 0xed, 0x80, 0xe0, 0x6d, + 0xb0, 0x5a, 0x44, 0x11, 0x4b, 0x73, 0x27, 0xa5, 0x5a, 0x66, 0x7d, 0x84, 0xbb, 0x39, 0x8b, 0x38, + 0x9c, 0xf2, 0x36, 0x3e, 0x05, 0xcf, 0x04, 0xc1, 0x10, 0x4b, 0x53, 0x77, 0xea, 0x41, 0xb5, 0x2b, + 0xfb, 0xca, 0x28, 0x4e, 0xdf, 0x2f, 0x07, 0xa3, 0x58, 0xcd, 0xf7, 0x76, 0x19, 0x31, 0x69, 0xea, + 0x5e, 0x78, 0xc4, 0x14, 0x5d, 0x9f, 0x16, 0xdd, 0x56, 0x8b, 0x72, 0x3c, 0x0b, 0xeb, 0xc4, 0x44, + 0x8b, 0x38, 0x1c, 0xdf, 0x2f, 0x75, 0x32, 0xef, 0x10, 0x41, 0x89, 0x04, 0xf0, 0x1c, 0xbc, 0x36, + 0xea, 0x79, 0x54, 0xf3, 0xf7, 0x49, 0x91, 0x13, 0xe9, 0xdc, 0xa6, 0xc9, 0x52, 0xd0, 0x98, 0xa7, + 0xce, 0xa5, 0x69, 0x52, 0xa7, 0xe1, 0xdc, 0xb7, 0x0a, 0x1b, 0x9f, 0x48, 0x0e, 0x92, 0xa3, 0x5d, + 0x0c, 0x66, 0x09, 0x0f, 0x87, 0x0f, 0x26, 0x85, 0x21, 0x65, 0x90, 0x4d, 0x44, 0xc3, 0x11, 0xb9, + 0x5c, 0x30, 0x9e, 0x04, 0x02, 0x4d, 0x50, 0xae, 0x87, 0x1b, 0x05, 0xe3, 0x09, 0x60, 0x39, 0x35, + 0x34, 0xef, 0x36, 0x70, 0x53, 0x0a, 0x1d, 0x46, 0x7b, 0x40, 0xa6, 0x4c, 0x5a, 0x2e, 0x6b, 0x2f, + 0x12, 0xd3, 0xc2, 0x8e, 0x94, 0xbb, 0x35, 0x3d, 0x0c, 0x32, 0x28, 0x76, 0xa5, 0xe2, 0x11, 0x34, + 0xda, 0x03, 0xbb, 0xc0, 0x28, 0x27, 0xd8, 0x93, 0x92, 0xdd, 0xbc, 0xcf, 0xd8, 0xa6, 0xdf, 0x8c, + 0x06, 0xd7, 0x83, 0x12, 0x3d, 0x9a, 0x96, 0x2d, 0x71, 0xd1, 0xc2, 0x41, 0x2b, 0x35, 0x43, 0x9e, + 0x19, 0x90, 0xeb, 0x38, 0x96, 0xae, 0xb8, 0x82, 0x63, 0xf2, 0x59, 0x75, 0x3c, 0x1a, 0x4b, 0xbf, + 0x16, 0x12, 0xb2, 0x6a, 0x6b, 0xdf, 0x2d, 0x35, 0x33, 0xe9, 0x2b, 0x52, 0x61, 0xef, 0x81, 0x77, + 0xa4, 0xc2, 0xe4, 0x98, 0x9a, 0x80, 0xdf, 0x88, 0x8a, 0x8a, 0xc7, 0xd5, 0x3d, 0x52, 0x2e, 0xb3, + 0xd0, 0x31, 0x28, 0xc6, 0xd6, 0x69, 0xa9, 0x96, 0x29, 0x63, 0xd2, 0xa7, 0x1a, 0x2c, 0x67, 0x24, + 0x7a, 0x14, 0xed, 0x85, 0xd0, 0xf4, 0x14, 0x9a, 0x94, 0xf0, 0x38, 0x3a, 0x00, 0xc1, 0x1d, 0xd3, + 0x68, 0x0a, 0x0e, 0x76, 0xa1, 0x54, 0x4e, 0xd4, 0xb1, 0x08, 0xcf, 0xd8, 0x85, 0x52, 0x59, 0x11, + 0xd3, 0xf0, 0x91, 0x75, 0xa1, 0x54, 0x96, 0xd5, 0x2b, 0xc1, 0x6f, 0x4c, 0x09, 0x10, 0xab, 0xb6, + 0x86, 0x67, 0xe0, 0x01, 0xb4, 0x50, 0x2a, 0x4f, 0x93, 0x3a, 0x6b, 0x7b, 0x5c, 0xe5, 0x78, 0x16, + 0xae, 0x5d, 0x0c, 0x12, 0x4b, 0xa1, 0xf3, 0xf0, 0xd2, 0xce, 0x53, 0xff, 0x52, 0x22, 0x3f, 0x06, + 0x07, 0x27, 0x28, 0x85, 0xf8, 0x5d, 0xce, 0xc3, 0xd4, 0xbf, 0x24, 0x33, 0xe4, 0xf0, 0xe9, 0x4c, + 0x11, 0x61, 0x8a, 0x81, 0x54, 0xc9, 0x34, 0xa4, 0x62, 0x54, 0xd4, 0x2b, 0x52, 0x2a, 0xb3, 0x1f, + 0x05, 0xd6, 0xb1, 0x80, 0xab, 0x70, 0xd5, 0x04, 0x9b, 0xee, 0x8c, 0x35, 0xf8, 0x8d, 0x22, 0x4b, + 0x11, 0xef, 0xaf, 0x36, 0x3c, 0x50, 0x05, 0x17, 0x43, 0x97, 0xf5, 0xc9, 0x3d, 0x95, 0x48, 0x8d, + 0x5c, 0x76, 0xfd, 0x44, 0x61, 0x1f, 0xcb, 0x69, 0xb1, 0x91, 0x0e, 0x4e, 0x41, 0x8f, 0xe7, 0xf4, + 0x3b, 0x6c, 0x5b, 0x07, 0x24, 0x8b, 0x7b, 0x25, 0xa7, 0x5f, 0x16, 0xdb, 0x41, 0x26, 0x2c, 0xef, + 0x27, 0x72, 0x7a, 0x34, 0xec, 0x82, 0xc2, 0x8a, 0xe3, 0xff, 0x64, 0x4e, 0x8f, 0x86, 0x42, 0x07, + 0x19, 0x63, 0x9f, 0xca, 0xe9, 0xfe, 0x49, 0x9f, 0xe2, 0x38, 0xb1, 0x6d, 0x93, 0xc9, 0xe0, 0x7e, + 0x9e, 0xd3, 0x0d, 0xb9, 0x1b, 0xa0, 0x6a, 0x6b, 0x15, 0x4f, 0xcd, 0x86, 0x5f, 0x74, 0x89, 0x50, + 0xa2, 0x89, 0xd2, 0xfd, 0xb2, 0x4b, 0x84, 0x92, 0x54, 0xd8, 0xaf, 0x94, 0xe0, 0xf1, 0xf4, 0x91, + 0x5a, 0x62, 0x45, 0x46, 0xc2, 0x23, 0x72, 0x5d, 0x1c, 0x38, 0x2b, 0x1e, 0x7e, 0x2e, 0xa7, 0xa7, + 0xd8, 0x4e, 0x00, 0x3f, 0x67, 0xb6, 0xc5, 0x4b, 0xb7, 0xe2, 0xe1, 0xe7, 0x73, 0x7a, 0xea, 0x8c, + 0x82, 0x20, 0x6f, 0xc6, 0xf0, 0x0b, 0xbd, 0xe1, 0xb2, 0xe9, 0x98, 0x0d, 0x52, 0x59, 0x5e, 0x26, + 0xac, 0xe2, 0xe1, 0x17, 0x15, 0x7c, 0x3b, 0x3a, 0xd4, 0x35, 0x62, 0x71, 0xc6, 0xa7, 0x2b, 0xda, + 0xe6, 0xa5, 0x9c, 0xde, 0x11, 0x7b, 0xa0, 0x75, 0x20, 0xbc, 0xe2, 0x71, 0xea, 0x3a, 0x7e, 0xc5, + 0xc3, 0x2f, 0xf7, 0x0e, 0x26, 0xba, 0x45, 0xd7, 0x58, 0xe0, 0x8b, 0xc8, 0xaf, 0xf5, 0x16, 0x9e, + 0xb4, 0x6d, 0x77, 0x55, 0xb1, 0xaf, 0x28, 0xf6, 0x58, 0x7a, 0x10, 0x2b, 0x36, 0x2a, 0x72, 0x99, + 0xb0, 0x06, 0xa9, 0x78, 0xf8, 0xd5, 0xde, 0xca, 0x51, 0x4d, 0xa6, 0x4d, 0x6e, 0x56, 0x3c, 0xfc, + 0x5a, 0x6f, 0xe5, 0xa9, 0xa0, 0xe5, 0x55, 0x45, 0x03, 0x39, 0x75, 0xa1, 0xfc, 0x7a, 0x4e, 0xef, + 0xe4, 0x1d, 0x5d, 0x9a, 0x32, 0xdc, 0x0d, 0x6f, 0xe4, 0xf4, 0xb4, 0x49, 0xf7, 0x38, 0x73, 0x9d, + 0x44, 0xa3, 0xbd, 0x99, 0xd3, 0x83, 0x6b, 0x5b, 0x16, 0x53, 0xcc, 0x5b, 0x39, 0x7d, 0x48, 0xde, + 0x9a, 0x65, 0xe4, 0x26, 0x78, 0xbb, 0xdb, 0x56, 0x97, 0x48, 0x18, 0xd2, 0x3b, 0x5d, 0xf6, 0x53, + 0xd1, 0x64, 0x96, 0xe9, 0xb8, 0x52, 0xea, 0x1b, 0x79, 0xb8, 0x49, 0x25, 0x15, 0xbf, 0x69, 0x9f, + 0xca, 0xeb, 0x0f, 0x03, 0x7b, 0x00, 0x30, 0xb5, 0xe3, 0xbf, 0xd9, 0x5b, 0x34, 0x06, 0xbf, 0x95, + 0x87, 0xb7, 0x68, 0x2c, 0xaa, 0xaa, 0xf2, 0xed, 0x3c, 0xbc, 0x45, 0x25, 0xa9, 0xb0, 0xef, 0xe4, + 0xf5, 0x3b, 0x76, 0x04, 0x4c, 0x47, 0x9c, 0x07, 0xae, 0xe6, 0xe1, 0x45, 0x4d, 0x54, 0x26, 0xac, + 0xe0, 0x77, 0x95, 0x58, 0x66, 0xd6, 0x54, 0x1c, 0xee, 0xda, 0x6e, 0xa3, 0x9d, 0x08, 0xef, 0x37, + 0x5d, 0x24, 0x15, 0xaa, 0xb8, 0xdf, 0xe6, 0xf5, 0x15, 0x7e, 0xb4, 0x8b, 0x64, 0x5c, 0x9d, 0xdf, + 0xe5, 0xe1, 0x73, 0x9a, 0x82, 0x63, 0xf2, 0xf7, 0xeb, 0xc8, 0x86, 0x8b, 0xcd, 0x4c, 0xc7, 0x5f, + 0x26, 0x0c, 0xff, 0x41, 0xc9, 0x66, 0xc6, 0x58, 0x12, 0x26, 0x96, 0xc6, 0xff, 0xa8, 0xb4, 0xc7, + 0xd1, 0xfe, 0x6e, 0xf8, 0x05, 0xca, 0x9b, 0x16, 0x33, 0x57, 0x2b, 0x4e, 0x03, 0xff, 0x49, 0xc9, + 0x9f, 0x44, 0xb7, 0x76, 0x97, 0x4f, 0x5a, 0xfc, 0x39, 0xaf, 0x3f, 0x3e, 0x74, 0xb5, 0xa8, 0x38, + 0x7c, 0xce, 0x5a, 0x24, 0x0d, 0xea, 0x8b, 0xbb, 0xfc, 0x1b, 0x79, 0x78, 0xae, 0xa5, 0x7d, 0xa4, + 0x6d, 0xfe, 0xa2, 0xbc, 0x9c, 0x42, 0x47, 0x7a, 0x7a, 0x99, 0xb4, 0xac, 0x49, 0xce, 0x19, 0x5d, + 0x0a, 0x38, 0xf1, 0xf1, 0x5f, 0x95, 0xab, 0xbb, 0xd0, 0xb1, 0x75, 0x5c, 0xa5, 0x0d, 0xff, 0x96, + 0xd7, 0xa7, 0x85, 0xd4, 0x26, 0x58, 0xa4, 0x9e, 0x67, 0x93, 0x44, 0xef, 0x3c, 0x3c, 0x00, 0xbf, + 0x6f, 0x23, 0x50, 0x51, 0x1f, 0x1d, 0x80, 0x3b, 0x3b, 0xa2, 0xe4, 0x6e, 0x7e, 0x64, 0x00, 0xde, + 0x25, 0x31, 0x14, 0x36, 0xf6, 0xa3, 0x0a, 0x7b, 0x37, 0x1a, 0x4b, 0xdd, 0x9f, 0x5d, 0x87, 0x30, + 0x37, 0x5c, 0x79, 0xb3, 0x2e, 0x66, 0xfc, 0x9c, 0x43, 0xb9, 0x1a, 0x00, 0x7f, 0x1f, 0xd0, 0x17, + 0xbb, 0x03, 0xeb, 0x1a, 0x89, 0x6d, 0xf6, 0x0f, 0x65, 0x90, 0xa9, 0x5c, 0x87, 0x41, 0x95, 0xf0, + 0x39, 0xc7, 0x0b, 0xb4, 0xa7, 0x7f, 0x2a, 0xc3, 0xf5, 0xc2, 0x53, 0x86, 0xc2, 0xdb, 0xbf, 0x94, + 0xd1, 0x19, 0x74, 0x6a, 0x9d, 0xf0, 0xbc, 0x80, 0xfb, 0xe7, 0x08, 0x6b, 0x05, 0xdc, 0x14, 0x7f, + 0x50, 0x6e, 0xff, 0xad, 0x14, 0x4e, 0xa3, 0xdb, 0xfe, 0x3f, 0x05, 0xe1, 0xff, 0x4d, 0x65, 0x7d, + 0x37, 0x3a, 0xbe, 0xbe, 0xf5, 0x79, 0xea, 0x50, 0xe5, 0xf7, 0x2d, 0x65, 0x79, 0x07, 0x3a, 0xdc, + 0x9f, 0xa5, 0xf0, 0xf7, 0xb6, 0xb2, 0xba, 0x07, 0x9d, 0xec, 0x69, 0x35, 0x69, 0xdb, 0x51, 0xc0, + 0x55, 0xa2, 0x2b, 0xfc, 0x4e, 0xbf, 0x4b, 0x93, 0x34, 0x16, 0x5e, 0xff, 0xd3, 0x6f, 0x96, 0xe2, + 0x98, 0x10, 0xf0, 0xc4, 0xa2, 0xfe, 0xb7, 0xdf, 0x2c, 0xb5, 0xa5, 0xf0, 0xf7, 0x7e, 0xa3, 0x4f, + 0x7f, 0x93, 0xb6, 0x5d, 0x09, 0x78, 0x22, 0xc5, 0x0f, 0x18, 0x7d, 0xfa, 0xd3, 0x96, 0xc2, 0xdf, + 0x07, 0xfb, 0xf5, 0x17, 0x7e, 0xf4, 0x49, 0x36, 0xed, 0x87, 0xfa, 0xf5, 0xa7, 0x2d, 0x85, 0xbf, + 0x0f, 0xf7, 0x6b, 0x35, 0x43, 0x1d, 0xd3, 0x56, 0xbe, 0x3e, 0x62, 0xc0, 0x03, 0x13, 0xb6, 0x12, + 0x7e, 0x1e, 0x52, 0x16, 0x77, 0xa2, 0xa3, 0x9d, 0x16, 0x67, 0x49, 0x7b, 0xae, 0x65, 0x36, 0x48, + 0x69, 0xcd, 0x73, 0x19, 0x4f, 0x6e, 0xfa, 0x47, 0x94, 0x5d, 0x66, 0xd0, 0x76, 0xb3, 0x13, 0xbe, + 0x1e, 0xed, 0x99, 0x93, 0xb2, 0xa9, 0xb6, 0x9d, 0x7a, 0x95, 0x13, 0x7d, 0x5a, 0xff, 0x58, 0xcf, + 0x9c, 0xb2, 0x56, 0xc2, 0xcf, 0xc7, 0x0d, 0x78, 0xa0, 0x77, 0x5a, 0xa4, 0x8a, 0xf7, 0x98, 0x32, + 0xbb, 0x0d, 0x1d, 0xec, 0xc3, 0x4c, 0x78, 0x7a, 0xdc, 0x80, 0x47, 0x79, 0x64, 0x92, 0x18, 0xe5, + 0x9f, 0x36, 0xe0, 0x51, 0x1e, 0x81, 0x8a, 0xfa, 0x8c, 0x01, 0x9f, 0x7a, 0xb4, 0xdc, 0x05, 0x93, + 0xd7, 0x9b, 0xe2, 0xbd, 0xfe, 0x59, 0x03, 0x9e, 0xe7, 0x11, 0xa9, 0xb1, 0xcf, 0x19, 0xf0, 0xc5, + 0x24, 0xfc, 0x50, 0x14, 0xb1, 0xd3, 0xd4, 0x6c, 0xa8, 0x0a, 0x7c, 0xde, 0x80, 0xef, 0x50, 0x19, + 0x5c, 0x64, 0xfe, 0x05, 0xa5, 0x9c, 0x39, 0x2d, 0xeb, 0x50, 0x6b, 0x6b, 0x67, 0x89, 0xfe, 0xa9, + 0xe3, 0x8b, 0x06, 0x7c, 0x60, 0x49, 0xd3, 0x42, 0xf7, 0x4b, 0x3d, 0x7b, 0x64, 0x9e, 0xae, 0x90, + 0x45, 0xb2, 0xcc, 0x88, 0xdf, 0xac, 0x72, 0x93, 0xe9, 0x6e, 0x7c, 0xd2, 0x80, 0x8f, 0x16, 0xb0, + 0x95, 0xf0, 0xf3, 0x65, 0xa3, 0xd7, 0xab, 0x24, 0x65, 0x11, 0xb7, 0xe2, 0x57, 0x94, 0x1b, 0xf0, + 0x4d, 0x97, 0x31, 0x12, 0x5e, 0xbe, 0xda, 0x6f, 0x36, 0xa9, 0x46, 0xfc, 0x5a, 0xbf, 0xd9, 0xe8, + 0x3e, 0xfc, 0xba, 0x01, 0x7f, 0x0a, 0x28, 0x65, 0x6e, 0xdc, 0xd7, 0x0c, 0xf8, 0x7e, 0x50, 0x4a, + 0xde, 0xb7, 0x5f, 0x31, 0xf4, 0x67, 0x96, 0x2d, 0x19, 0x48, 0x9e, 0x26, 0x5e, 0xed, 0xd2, 0x27, + 0x25, 0xd7, 0x17, 0x07, 0xe9, 0xe4, 0xbb, 0xf3, 0xd7, 0x06, 0x7c, 0xff, 0x49, 0xa0, 0x22, 0x81, + 0xd7, 0x0c, 0xf8, 0xfe, 0x53, 0x4a, 0x7c, 0x58, 0x78, 0xbd, 0xcb, 0xee, 0x98, 0xa2, 0x8e, 0xe9, + 0xd4, 0x93, 0x07, 0xa7, 0x1f, 0x0c, 0xc2, 0xbb, 0x43, 0x92, 0x0a, 0xfb, 0xe1, 0x20, 0x7c, 0x73, + 0x89, 0x05, 0xe3, 0xa2, 0xfc, 0x68, 0x10, 0xbe, 0xb9, 0x48, 0x36, 0x06, 0x7f, 0x3c, 0x08, 0xdf, + 0xae, 0x24, 0x28, 0x2b, 0xf8, 0x74, 0x6f, 0xb9, 0xf8, 0x76, 0xf5, 0x93, 0x41, 0xf8, 0xaa, 0xa1, + 0x40, 0x79, 0x18, 0x2f, 0xfb, 0x0d, 0xfc, 0xcc, 0x20, 0x7c, 0xd5, 0x90, 0x68, 0x85, 0x59, 0x11, + 0xf7, 0x6c, 0x6f, 0xdf, 0xd1, 0x8f, 0xb4, 0x02, 0xfc, 0x69, 0x6f, 0x41, 0xbd, 0x30, 0x3f, 0x93, + 0x31, 0x4e, 0x9c, 0x46, 0xd7, 0xaf, 0x52, 0x46, 0x2e, 0x52, 0x67, 0x78, 0xef, 0x78, 0xf4, 0x4b, + 0xff, 0xb8, 0xfa, 0xa5, 0x7f, 0xbc, 0xe4, 0x04, 0xad, 0xf0, 0xe7, 0x12, 0xf9, 0x95, 0x60, 0xe4, + 0xb9, 0x87, 0x06, 0x46, 0x73, 0x63, 0x43, 0x8b, 0xd7, 0x09, 0x9b, 0x39, 0x67, 0xe2, 0x5e, 0x34, + 0x14, 0x5a, 0xbb, 0x01, 0xef, 0xc7, 0xfc, 0x79, 0x69, 0x1e, 0xba, 0xac, 0x04, 0x7c, 0x62, 0x16, + 0x6d, 0x0a, 0xed, 0x2d, 0x31, 0xad, 0xfa, 0x8c, 0xe1, 0x05, 0x29, 0xb2, 0x41, 0x58, 0x86, 0x63, + 0x6e, 0xce, 0x99, 0x98, 0x43, 0x9b, 0x13, 0x42, 0x7d, 0x86, 0xf3, 0xa2, 0x54, 0xda, 0xa8, 0x95, + 0x44, 0x4c, 0x67, 0xd0, 0x0d, 0xa1, 0x14, 0xa7, 0x4e, 0xbb, 0x1f, 0x95, 0x97, 0xa4, 0x4a, 0x58, + 0x89, 0x1a, 0x75, 0xda, 0x13, 0xf3, 0xe8, 0xc6, 0x50, 0x61, 0xc9, 0x75, 0xb9, 0xed, 0x9a, 0x16, + 0x61, 0xfd, 0xe8, 0xbc, 0x2c, 0x75, 0xc2, 0x44, 0xa6, 0xb4, 0xe9, 0x44, 0x11, 0x85, 0x99, 0x5e, + 0x74, 0xdc, 0x8b, 0xcb, 0x7e, 0xab, 0x1f, 0xa5, 0x6b, 0x52, 0x29, 0xcc, 0x63, 0xc1, 0x9d, 0xf1, + 0x5b, 0x53, 0x77, 0xa0, 0xfd, 0x75, 0xb7, 0x35, 0xee, 0x9b, 0xdc, 0xf5, 0x9b, 0xd4, 0x36, 0x97, + 0x7c, 0xf5, 0xff, 0x79, 0xd8, 0x74, 0x49, 0x4b, 0x4d, 0x6d, 0xaa, 0x85, 0x7f, 0x94, 0x9d, 0xf3, + 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x69, 0x67, 0x5d, 0x1f, 0x22, 0x00, 0x00, +} diff --git a/accounts/usbwallet/trezor/messages.proto b/accounts/usbwallet/trezor/messages.proto new file mode 100644 index 000000000000..3e0482e3446f --- /dev/null +++ b/accounts/usbwallet/trezor/messages.proto @@ -0,0 +1,264 @@ +// This file originates from the SatoshiLabs Trezor `common` repository at: +// https://github.com/trezor/trezor-common/blob/master/protob/messages.proto +// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. + +syntax = "proto2"; +package hw.trezor.messages; + +/** + * Messages for TREZOR communication + */ + +// Sugar for easier handling in Java +option java_package = "com.satoshilabs.trezor.lib.protobuf"; +option java_outer_classname = "TrezorMessage"; + +import "google/protobuf/descriptor.proto"; + +/** + * Options for specifying message direction and type of wire (normal/debug) + */ +extend google.protobuf.EnumValueOptions { + optional bool wire_in = 50002; // message can be transmitted via wire from PC to TREZOR + optional bool wire_out = 50003; // message can be transmitted via wire from TREZOR to PC + optional bool wire_debug_in = 50004; // message can be transmitted via debug wire from PC to TREZOR + optional bool wire_debug_out = 50005; // message can be transmitted via debug wire from TREZOR to PC + optional bool wire_tiny = 50006; // message is handled by TREZOR when the USB stack is in tiny mode + optional bool wire_bootloader = 50007; // message is only handled by TREZOR Bootloader + optional bool wire_no_fsm = 50008; // message is not handled by TREZOR unless the USB stack is in tiny mode +} + +/** + * Mapping between TREZOR wire identifier (uint) and a protobuf message + */ +enum MessageType { + + // Management + MessageType_Initialize = 0 [(wire_in) = true, (wire_tiny) = true]; + MessageType_Ping = 1 [(wire_in) = true]; + MessageType_Success = 2 [(wire_out) = true]; + MessageType_Failure = 3 [(wire_out) = true]; + MessageType_ChangePin = 4 [(wire_in) = true]; + MessageType_WipeDevice = 5 [(wire_in) = true]; + MessageType_GetEntropy = 9 [(wire_in) = true]; + MessageType_Entropy = 10 [(wire_out) = true]; + MessageType_LoadDevice = 13 [(wire_in) = true]; + MessageType_ResetDevice = 14 [(wire_in) = true]; + MessageType_Features = 17 [(wire_out) = true]; + MessageType_PinMatrixRequest = 18 [(wire_out) = true]; + MessageType_PinMatrixAck = 19 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; + MessageType_Cancel = 20 [(wire_in) = true, (wire_tiny) = true]; + MessageType_ClearSession = 24 [(wire_in) = true]; + MessageType_ApplySettings = 25 [(wire_in) = true]; + MessageType_ButtonRequest = 26 [(wire_out) = true]; + MessageType_ButtonAck = 27 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; + MessageType_ApplyFlags = 28 [(wire_in) = true]; + MessageType_BackupDevice = 34 [(wire_in) = true]; + MessageType_EntropyRequest = 35 [(wire_out) = true]; + MessageType_EntropyAck = 36 [(wire_in) = true]; + MessageType_PassphraseRequest = 41 [(wire_out) = true]; + MessageType_PassphraseAck = 42 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; + MessageType_PassphraseStateRequest = 77 [(wire_out) = true]; + MessageType_PassphraseStateAck = 78 [(wire_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; + MessageType_RecoveryDevice = 45 [(wire_in) = true]; + MessageType_WordRequest = 46 [(wire_out) = true]; + MessageType_WordAck = 47 [(wire_in) = true]; + MessageType_GetFeatures = 55 [(wire_in) = true]; + MessageType_SetU2FCounter = 63 [(wire_in) = true]; + + // Bootloader + MessageType_FirmwareErase = 6 [(wire_in) = true, (wire_bootloader) = true]; + MessageType_FirmwareUpload = 7 [(wire_in) = true, (wire_bootloader) = true]; + MessageType_FirmwareRequest = 8 [(wire_out) = true, (wire_bootloader) = true]; + MessageType_SelfTest = 32 [(wire_in) = true, (wire_bootloader) = true]; + + // Bitcoin + MessageType_GetPublicKey = 11 [(wire_in) = true]; + MessageType_PublicKey = 12 [(wire_out) = true]; + MessageType_SignTx = 15 [(wire_in) = true]; + MessageType_TxRequest = 21 [(wire_out) = true]; + MessageType_TxAck = 22 [(wire_in) = true]; + MessageType_GetAddress = 29 [(wire_in) = true]; + MessageType_Address = 30 [(wire_out) = true]; + MessageType_SignMessage = 38 [(wire_in) = true]; + MessageType_VerifyMessage = 39 [(wire_in) = true]; + MessageType_MessageSignature = 40 [(wire_out) = true]; + + // Crypto + MessageType_CipherKeyValue = 23 [(wire_in) = true]; + MessageType_CipheredKeyValue = 48 [(wire_out) = true]; + MessageType_SignIdentity = 53 [(wire_in) = true]; + MessageType_SignedIdentity = 54 [(wire_out) = true]; + MessageType_GetECDHSessionKey = 61 [(wire_in) = true]; + MessageType_ECDHSessionKey = 62 [(wire_out) = true]; + MessageType_CosiCommit = 71 [(wire_in) = true]; + MessageType_CosiCommitment = 72 [(wire_out) = true]; + MessageType_CosiSign = 73 [(wire_in) = true]; + MessageType_CosiSignature = 74 [(wire_out) = true]; + + // Debug + MessageType_DebugLinkDecision = 100 [(wire_debug_in) = true, (wire_tiny) = true, (wire_no_fsm) = true]; + MessageType_DebugLinkGetState = 101 [(wire_debug_in) = true, (wire_tiny) = true]; + MessageType_DebugLinkState = 102 [(wire_debug_out) = true]; + MessageType_DebugLinkStop = 103 [(wire_debug_in) = true]; + MessageType_DebugLinkLog = 104 [(wire_debug_out) = true]; + MessageType_DebugLinkMemoryRead = 110 [(wire_debug_in) = true]; + MessageType_DebugLinkMemory = 111 [(wire_debug_out) = true]; + MessageType_DebugLinkMemoryWrite = 112 [(wire_debug_in) = true]; + MessageType_DebugLinkFlashErase = 113 [(wire_debug_in) = true]; + + // Ethereum + MessageType_EthereumGetPublicKey = 450 [(wire_in) = true]; + MessageType_EthereumPublicKey = 451 [(wire_out) = true]; + MessageType_EthereumGetAddress = 56 [(wire_in) = true]; + MessageType_EthereumAddress = 57 [(wire_out) = true]; + MessageType_EthereumSignTx = 58 [(wire_in) = true]; + MessageType_EthereumTxRequest = 59 [(wire_out) = true]; + MessageType_EthereumTxAck = 60 [(wire_in) = true]; + MessageType_EthereumSignMessage = 64 [(wire_in) = true]; + MessageType_EthereumVerifyMessage = 65 [(wire_in) = true]; + MessageType_EthereumMessageSignature = 66 [(wire_out) = true]; + + // NEM + MessageType_NEMGetAddress = 67 [(wire_in) = true]; + MessageType_NEMAddress = 68 [(wire_out) = true]; + MessageType_NEMSignTx = 69 [(wire_in) = true]; + MessageType_NEMSignedTx = 70 [(wire_out) = true]; + MessageType_NEMDecryptMessage = 75 [(wire_in) = true]; + MessageType_NEMDecryptedMessage = 76 [(wire_out) = true]; + + // Lisk + MessageType_LiskGetAddress = 114 [(wire_in) = true]; + MessageType_LiskAddress = 115 [(wire_out) = true]; + MessageType_LiskSignTx = 116 [(wire_in) = true]; + MessageType_LiskSignedTx = 117 [(wire_out) = true]; + MessageType_LiskSignMessage = 118 [(wire_in) = true]; + MessageType_LiskMessageSignature = 119 [(wire_out) = true]; + MessageType_LiskVerifyMessage = 120 [(wire_in) = true]; + MessageType_LiskGetPublicKey = 121 [(wire_in) = true]; + MessageType_LiskPublicKey = 122 [(wire_out) = true]; + + // Tezos + MessageType_TezosGetAddress = 150 [(wire_in) = true]; + MessageType_TezosAddress = 151 [(wire_out) = true]; + MessageType_TezosSignTx = 152 [(wire_in) = true]; + MessageType_TezosSignedTx = 153 [(wire_out) = true]; + MessageType_TezosGetPublicKey = 154 [(wire_in) = true]; + MessageType_TezosPublicKey = 155 [(wire_out) = true]; + + // Stellar + MessageType_StellarSignTx = 202 [(wire_in) = true]; + MessageType_StellarTxOpRequest = 203 [(wire_out) = true]; + MessageType_StellarGetAddress = 207 [(wire_in) = true]; + MessageType_StellarAddress = 208 [(wire_out) = true]; + MessageType_StellarCreateAccountOp = 210 [(wire_in) = true]; + MessageType_StellarPaymentOp = 211 [(wire_in) = true]; + MessageType_StellarPathPaymentOp = 212 [(wire_in) = true]; + MessageType_StellarManageOfferOp = 213 [(wire_in) = true]; + MessageType_StellarCreatePassiveOfferOp = 214 [(wire_in) = true]; + MessageType_StellarSetOptionsOp = 215 [(wire_in) = true]; + MessageType_StellarChangeTrustOp = 216 [(wire_in) = true]; + MessageType_StellarAllowTrustOp = 217 [(wire_in) = true]; + MessageType_StellarAccountMergeOp = 218 [(wire_in) = true]; + // omitted: StellarInflationOp is not a supported operation, would be 219 + MessageType_StellarManageDataOp = 220 [(wire_in) = true]; + MessageType_StellarBumpSequenceOp = 221 [(wire_in) = true]; + MessageType_StellarSignedTx = 230 [(wire_out) = true]; + + // TRON + MessageType_TronGetAddress = 250 [(wire_in) = true]; + MessageType_TronAddress = 251 [(wire_out) = true]; + MessageType_TronSignTx = 252 [(wire_in) = true]; + MessageType_TronSignedTx = 253 [(wire_out) = true]; + + // Cardano + // dropped Sign/VerifyMessage ids 300-302 + MessageType_CardanoSignTx = 303 [(wire_in) = true]; + MessageType_CardanoTxRequest = 304 [(wire_out) = true]; + MessageType_CardanoGetPublicKey = 305 [(wire_in) = true]; + MessageType_CardanoPublicKey = 306 [(wire_out) = true]; + MessageType_CardanoGetAddress = 307 [(wire_in) = true]; + MessageType_CardanoAddress = 308 [(wire_out) = true]; + MessageType_CardanoTxAck = 309 [(wire_in) = true]; + MessageType_CardanoSignedTx = 310 [(wire_out) = true]; + + // Ontology + MessageType_OntologyGetAddress = 350 [(wire_in) = true]; + MessageType_OntologyAddress = 351 [(wire_out) = true]; + MessageType_OntologyGetPublicKey = 352 [(wire_in) = true]; + MessageType_OntologyPublicKey = 353 [(wire_out) = true]; + MessageType_OntologySignTransfer = 354 [(wire_in) = true]; + MessageType_OntologySignedTransfer = 355 [(wire_out) = true]; + MessageType_OntologySignWithdrawOng = 356 [(wire_in) = true]; + MessageType_OntologySignedWithdrawOng = 357 [(wire_out) = true]; + MessageType_OntologySignOntIdRegister = 358 [(wire_in) = true]; + MessageType_OntologySignedOntIdRegister = 359 [(wire_out) = true]; + MessageType_OntologySignOntIdAddAttributes = 360 [(wire_in) = true]; + MessageType_OntologySignedOntIdAddAttributes = 361 [(wire_out) = true]; + + // Ripple + MessageType_RippleGetAddress = 400 [(wire_in) = true]; + MessageType_RippleAddress = 401 [(wire_out) = true]; + MessageType_RippleSignTx = 402 [(wire_in) = true]; + MessageType_RippleSignedTx = 403 [(wire_in) = true]; + + // Monero + MessageType_MoneroTransactionInitRequest = 501 [(wire_out) = true]; + MessageType_MoneroTransactionInitAck = 502 [(wire_out) = true]; + MessageType_MoneroTransactionSetInputRequest = 503 [(wire_out) = true]; + MessageType_MoneroTransactionSetInputAck = 504 [(wire_out) = true]; + MessageType_MoneroTransactionInputsPermutationRequest = 505 [(wire_out) = true]; + MessageType_MoneroTransactionInputsPermutationAck = 506 [(wire_out) = true]; + MessageType_MoneroTransactionInputViniRequest = 507 [(wire_out) = true]; + MessageType_MoneroTransactionInputViniAck = 508 [(wire_out) = true]; + MessageType_MoneroTransactionAllInputsSetRequest = 509 [(wire_out) = true]; + MessageType_MoneroTransactionAllInputsSetAck = 510 [(wire_out) = true]; + MessageType_MoneroTransactionSetOutputRequest = 511 [(wire_out) = true]; + MessageType_MoneroTransactionSetOutputAck = 512 [(wire_out) = true]; + MessageType_MoneroTransactionAllOutSetRequest = 513 [(wire_out) = true]; + MessageType_MoneroTransactionAllOutSetAck = 514 [(wire_out) = true]; + MessageType_MoneroTransactionSignInputRequest = 515 [(wire_out) = true]; + MessageType_MoneroTransactionSignInputAck = 516 [(wire_out) = true]; + MessageType_MoneroTransactionFinalRequest = 517 [(wire_out) = true]; + MessageType_MoneroTransactionFinalAck = 518 [(wire_out) = true]; + MessageType_MoneroKeyImageExportInitRequest = 530 [(wire_out) = true]; + MessageType_MoneroKeyImageExportInitAck = 531 [(wire_out) = true]; + MessageType_MoneroKeyImageSyncStepRequest = 532 [(wire_out) = true]; + MessageType_MoneroKeyImageSyncStepAck = 533 [(wire_out) = true]; + MessageType_MoneroKeyImageSyncFinalRequest = 534 [(wire_out) = true]; + MessageType_MoneroKeyImageSyncFinalAck = 535 [(wire_out) = true]; + MessageType_MoneroGetAddress = 540 [(wire_in) = true]; + MessageType_MoneroAddress = 541 [(wire_out) = true]; + MessageType_MoneroGetWatchKey = 542 [(wire_in) = true]; + MessageType_MoneroWatchKey = 543 [(wire_out) = true]; + MessageType_DebugMoneroDiagRequest = 546 [(wire_in) = true]; + MessageType_DebugMoneroDiagAck = 547 [(wire_out) = true]; + MessageType_MoneroGetTxKeyRequest = 550 [(wire_in) = true]; + MessageType_MoneroGetTxKeyAck = 551 [(wire_out) = true]; + MessageType_MoneroLiveRefreshStartRequest = 552 [(wire_in) = true]; + MessageType_MoneroLiveRefreshStartAck = 553 [(wire_out) = true]; + MessageType_MoneroLiveRefreshStepRequest = 554 [(wire_in) = true]; + MessageType_MoneroLiveRefreshStepAck = 555 [(wire_out) = true]; + MessageType_MoneroLiveRefreshFinalRequest = 556 [(wire_in) = true]; + MessageType_MoneroLiveRefreshFinalAck = 557 [(wire_out) = true]; + + // EOS + MessageType_EosGetPublicKey = 600 [(wire_in) = true]; + MessageType_EosPublicKey = 601 [(wire_out) = true]; + MessageType_EosSignTx = 602 [(wire_in) = true]; + MessageType_EosTxActionRequest = 603 [(wire_out) = true]; + MessageType_EosTxActionAck = 604 [(wire_in) = true]; + MessageType_EosSignedTx = 605 [(wire_out) = true]; + + // Binance + MessageType_BinanceGetAddress = 700 [(wire_in) = true]; + MessageType_BinanceAddress = 701 [(wire_out) = true]; + MessageType_BinanceGetPublicKey = 702 [(wire_in) = true]; + MessageType_BinancePublicKey = 703 [(wire_out) = true]; + MessageType_BinanceSignTx = 704 [(wire_in) = true]; + MessageType_BinanceTxRequest = 705 [(wire_out) = true]; + MessageType_BinanceTransferMsg = 706 [(wire_in) = true]; + MessageType_BinanceOrderMsg = 707 [(wire_in) = true]; + MessageType_BinanceCancelMsg = 708 [(wire_in) = true]; + MessageType_BinanceSignedTx = 709 [(wire_out) = true]; +} diff --git a/accounts/usbwallet/trezor/trezor.go b/accounts/usbwallet/trezor/trezor.go new file mode 100644 index 000000000000..7e756e609b0c --- /dev/null +++ b/accounts/usbwallet/trezor/trezor.go @@ -0,0 +1,70 @@ +// Copyright 2017 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// This file contains the implementation for interacting with the Trezor hardware +// wallets. The wire protocol spec can be found on the SatoshiLabs website: +// https://wiki.trezor.io/Developers_guide-Message_Workflows + +// !!! STAHP !!! +// +// Before you touch the protocol files, you need to be aware of a breaking change +// that occurred between firmware versions 1.7.3->1.8.0 (Model One) and 2.0.10-> +// 2.1.0 (Model T). The Ethereum address representation was changed from the 20 +// byte binary blob to a 42 byte hex string. The upstream protocol buffer files +// only support the new format, so blindly pulling in a new spec will break old +// devices! +// +// The Trezor devs had the foresight to add the string version as a new message +// code instead of replacing the binary one. This means that the proto file can +// actually define both the old and the new versions as optional. Please ensure +// that you add back the old addresses everywhere (to avoid name clash. use the +// addressBin and addressHex names). +// +// If in doubt, reach out to @karalabe. + +// To regenerate the protocol files in this package: +// - Download the latest protoc https://github.com/protocolbuffers/protobuf/releases +// - Build with the usual `./configure && make` and ensure it's on your $PATH +// - Delete all the .proto and .pb.go files, pull in fresh ones from Trezor +// - Grab the latest Go plugin `go get -u github.com/golang/protobuf/protoc-gen-go` +// - Vendor in the latest Go plugin `govendor fetch github.com/golang/protobuf/...` + +//go:generate protoc -I/usr/local/include:. --go_out=import_path=trezor:. messages.proto messages-common.proto messages-management.proto messages-ethereum.proto + +// Package trezor contains the wire protocol. +package trezor + +import ( + "reflect" + + "github.com/golang/protobuf/proto" +) + +// Type returns the protocol buffer type number of a specific message. If the +// message is nil, this method panics! +func Type(msg proto.Message) uint16 { + return uint16(MessageType_value["MessageType_"+reflect.TypeOf(msg).Elem().Name()]) +} + +// Name returns the friendly message type name of a specific protocol buffer +// type number. +func Name(kind uint16) string { + name := MessageType_name[int32(kind)] + if len(name) < 12 { + return name + } + return name[12:] +} diff --git a/accounts/usbwallet/wallet.go b/accounts/usbwallet/wallet.go index 6cef6e0fb02a..ee539d96535d 100644 --- a/accounts/usbwallet/wallet.go +++ b/accounts/usbwallet/wallet.go @@ -29,8 +29,9 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" - "github.com/karalabe/hid" + "github.com/karalabe/usb" ) // Maximum time between wallet health checks to detect USB unplugs. @@ -76,17 +77,17 @@ type wallet struct { driver driver // Hardware implementation of the low level device operations url *accounts.URL // Textual URL uniquely identifying this wallet - info hid.DeviceInfo // Known USB device infos about the wallet - device *hid.Device // USB device advertising itself as a hardware wallet + info usb.DeviceInfo // Known USB device infos about the wallet + device usb.Device // USB device advertising itself as a hardware wallet accounts []accounts.Account // List of derive accounts pinned on the hardware wallet paths map[common.Address]accounts.DerivationPath // Known derivation paths for signing operations - deriveNextPath accounts.DerivationPath // Next derivation path for account auto-discovery - deriveNextAddr common.Address // Next derived account address for auto-discovery - deriveChain ethereum.ChainStateReader // Blockchain state reader to discover used account with - deriveReq chan chan struct{} // Channel to request a self-derivation on - deriveQuit chan chan error // Channel to terminate the self-deriver with + deriveNextPaths []accounts.DerivationPath // Next derivation paths for account auto-discovery (multiple bases supported) + deriveNextAddrs []common.Address // Next derived account addresses for auto-discovery (multiple bases supported) + deriveChain ethereum.ChainStateReader // Blockchain state reader to discover used account with + deriveReq chan chan struct{} // Channel to request a self-derivation on + deriveQuit chan chan error // Channel to terminate the self-deriver with healthQuit chan chan error @@ -273,9 +274,7 @@ func (w *wallet) close() error { w.device = nil w.accounts, w.paths = nil, nil - w.driver.Close() - - return nil + return w.driver.Close() } // Accounts implements accounts.Wallet, returning the list of accounts pinned to @@ -340,57 +339,62 @@ func (w *wallet) selfDerive() { accs []accounts.Account paths []accounts.DerivationPath - nextAddr = w.deriveNextAddr - nextPath = w.deriveNextPath + nextPaths = append([]accounts.DerivationPath{}, w.deriveNextPaths...) + nextAddrs = append([]common.Address{}, w.deriveNextAddrs...) context = context.Background() ) - for empty := false; !empty; { - // Retrieve the next derived Ethereum account - if nextAddr == (common.Address{}) { - if nextAddr, err = w.driver.Derive(nextPath); err != nil { - w.log.Warn("USB wallet account derivation failed", "err", err) + for i := 0; i < len(nextAddrs); i++ { + for empty := false; !empty; { + // Retrieve the next derived Ethereum account + if nextAddrs[i] == (common.Address{}) { + if nextAddrs[i], err = w.driver.Derive(nextPaths[i]); err != nil { + w.log.Warn("USB wallet account derivation failed", "err", err) + break + } + } + // Check the account's status against the current chain state + var ( + balance *big.Int + nonce uint64 + ) + balance, err = w.deriveChain.BalanceAt(context, nextAddrs[i], nil) + if err != nil { + w.log.Warn("USB wallet balance retrieval failed", "err", err) break } - } - // Check the account's status against the current chain state - var ( - balance *big.Int - nonce uint64 - ) - balance, err = w.deriveChain.BalanceAt(context, nextAddr, nil) - if err != nil { - w.log.Warn("USB wallet balance retrieval failed", "err", err) - break - } - nonce, err = w.deriveChain.NonceAt(context, nextAddr, nil) - if err != nil { - w.log.Warn("USB wallet nonce retrieval failed", "err", err) - break - } - // If the next account is empty, stop self-derivation, but add it nonetheless - if balance.Sign() == 0 && nonce == 0 { - empty = true - } - // We've just self-derived a new account, start tracking it locally - path := make(accounts.DerivationPath, len(nextPath)) - copy(path[:], nextPath[:]) - paths = append(paths, path) - - account := accounts.Account{ - Address: nextAddr, - URL: accounts.URL{Scheme: w.url.Scheme, Path: fmt.Sprintf("%s/%s", w.url.Path, path)}, - } - accs = append(accs, account) + nonce, err = w.deriveChain.NonceAt(context, nextAddrs[i], nil) + if err != nil { + w.log.Warn("USB wallet nonce retrieval failed", "err", err) + break + } + // If the next account is empty, stop self-derivation, but add for the last base path + if balance.Sign() == 0 && nonce == 0 { + empty = true + if i < len(nextAddrs)-1 { + break + } + } + // We've just self-derived a new account, start tracking it locally + path := make(accounts.DerivationPath, len(nextPaths[i])) + copy(path[:], nextPaths[i][:]) + paths = append(paths, path) + + account := accounts.Account{ + Address: nextAddrs[i], + URL: accounts.URL{Scheme: w.url.Scheme, Path: fmt.Sprintf("%s/%s", w.url.Path, path)}, + } + accs = append(accs, account) - // Display a log message to the user for new (or previously empty accounts) - if _, known := w.paths[nextAddr]; !known || (!empty && nextAddr == w.deriveNextAddr) { - w.log.Info("USB wallet discovered new account", "address", nextAddr, "path", path, "balance", balance, "nonce", nonce) - } - // Fetch the next potential account - if !empty { - nextAddr = common.Address{} - nextPath[len(nextPath)-1]++ + // Display a log message to the user for new (or previously empty accounts) + if _, known := w.paths[nextAddrs[i]]; !known || (!empty && nextAddrs[i] == w.deriveNextAddrs[i]) { + w.log.Info("USB wallet discovered new account", "address", nextAddrs[i], "path", path, "balance", balance, "nonce", nonce) + } + // Fetch the next potential account + if !empty { + nextAddrs[i] = common.Address{} + nextPaths[i][len(nextPaths[i])-1]++ + } } } // Self derivation complete, release device lock @@ -407,8 +411,8 @@ func (w *wallet) selfDerive() { } // Shift the self-derivation forward // TODO(karalabe): don't overwrite changes from wallet.SelfDerive - w.deriveNextAddr = nextAddr - w.deriveNextPath = nextPath + w.deriveNextAddrs = nextAddrs + w.deriveNextPaths = nextPaths w.stateLock.Unlock() // Notify the user of termination and loop after a bit of time (to avoid trashing) @@ -475,32 +479,61 @@ func (w *wallet) Derive(path accounts.DerivationPath, pin bool) (accounts.Accoun if _, ok := w.paths[address]; !ok { w.accounts = append(w.accounts, account) - w.paths[address] = path + w.paths[address] = make(accounts.DerivationPath, len(path)) + copy(w.paths[address], path) } return account, nil } -// SelfDerive implements accounts.Wallet, trying to discover accounts that the -// user used previously (based on the chain state), but ones that he/she did not -// explicitly pin to the wallet manually. To avoid chain head monitoring, self -// derivation only runs during account listing (and even then throttled). -func (w *wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainStateReader) { +// SelfDerive sets a base account derivation path from which the wallet attempts +// to discover non zero accounts and automatically add them to list of tracked +// accounts. +// +// Note, self derivaton will increment the last component of the specified path +// opposed to decending into a child path to allow discovering accounts starting +// from non zero components. +// +// Some hardware wallets switched derivation paths through their evolution, so +// this method supports providing multiple bases to discover old user accounts +// too. Only the last base will be used to derive the next empty account. +// +// You can disable automatic account discovery by calling SelfDerive with a nil +// chain state reader. +func (w *wallet) SelfDerive(bases []accounts.DerivationPath, chain ethereum.ChainStateReader) { w.stateLock.Lock() defer w.stateLock.Unlock() - w.deriveNextPath = make(accounts.DerivationPath, len(base)) - copy(w.deriveNextPath[:], base[:]) - - w.deriveNextAddr = common.Address{} + w.deriveNextPaths = make([]accounts.DerivationPath, len(bases)) + for i, base := range bases { + w.deriveNextPaths[i] = make(accounts.DerivationPath, len(base)) + copy(w.deriveNextPaths[i][:], base[:]) + } + w.deriveNextAddrs = make([]common.Address, len(bases)) w.deriveChain = chain } -// SignHash implements accounts.Wallet, however signing arbitrary data is not +// signHash implements accounts.Wallet, however signing arbitrary data is not // supported for hardware wallets, so this method will always return an error. -func (w *wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) { +func (w *wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) { return nil, accounts.ErrNotSupported } +// SignData signs keccak256(data). The mimetype parameter describes the type of data being signed +func (w *wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) { + return w.signHash(account, crypto.Keccak256(data)) +} + +// SignDataWithPassphrase implements accounts.Wallet, attempting to sign the given +// data with the given account using passphrase as extra authentication. +// Since USB wallets don't rely on passphrases, these are silently ignored. +func (w *wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) { + return w.SignData(account, mimeType, data) +} + +func (w *wallet) SignText(account accounts.Account, text []byte) ([]byte, error) { + return w.signHash(account, accounts.TextHash(text)) +} + // SignTx implements accounts.Wallet. It sends the transaction over to the Ledger // wallet to request a confirmation from the user. It returns either the signed // transaction or a failure if the user denied the transaction. @@ -550,8 +583,8 @@ func (w *wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID // SignHashWithPassphrase implements accounts.Wallet, however signing arbitrary // data is not supported for Ledger wallets, so this method will always return // an error. -func (w *wallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) { - return w.SignHash(account, hash) +func (w *wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) { + return w.SignText(account, accounts.TextHash(text)) } // SignTxWithPassphrase implements accounts.Wallet, attempting to sign the given diff --git a/appveyor.yml b/appveyor.yml index 9ed4f114e356..7d7a575a1be1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -23,8 +23,8 @@ environment: install: - git submodule update --init - rmdir C:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.11.5.windows-%GETH_ARCH%.zip - - 7z x go1.11.5.windows-%GETH_ARCH%.zip -y -oC:\ > NUL + - appveyor DownloadFile https://dl.google.com/go/go1.13.windows-%GETH_ARCH%.zip + - 7z x go1.13.windows-%GETH_ARCH%.zip -y -oC:\ > NUL - go version - gcc --version diff --git a/build/ci-notes.md b/build/ci-notes.md index ba27cdb1d730..13e1fd2307c4 100644 --- a/build/ci-notes.md +++ b/build/ci-notes.md @@ -23,18 +23,18 @@ variables `PPA_SIGNING_KEY` and `PPA_SSH_KEY` on Travis. We want to build go-ethereum with the most recent version of Go, irrespective of the Go version that is available in the main Ubuntu repository. In order to make this possible, our PPA depends on the ~gophers/ubuntu/archive PPA. Our source package build-depends on -golang-1.10, which is co-installable alongside the regular golang package. PPA dependencies +golang-1.11, which is co-installable alongside the regular golang package. PPA dependencies can be edited at https://launchpad.net/%7Eethereum/+archive/ubuntu/ethereum/+edit-dependencies ## Building Packages Locally (for testing) You need to run Ubuntu to do test packaging. -Add the gophers PPA and install Go 1.10 and Debian packaging tools: +Add the gophers PPA and install Go 1.11 and Debian packaging tools: $ sudo apt-add-repository ppa:gophers/ubuntu/archive $ sudo apt-get update - $ sudo apt-get install build-essential golang-1.10 devscripts debhelper python-bzrlib python-paramiko + $ sudo apt-get install build-essential golang-1.11 devscripts debhelper python-bzrlib python-paramiko Create the source packages: diff --git a/build/ci.go b/build/ci.go index 3e3c6c7ed613..abd3f7fc22ad 100644 --- a/build/ci.go +++ b/build/ci.go @@ -60,7 +60,6 @@ import ( "github.com/ethereum/go-ethereum/internal/build" "github.com/ethereum/go-ethereum/params" - sv "github.com/ethereum/go-ethereum/swarm/version" ) var ( @@ -80,12 +79,7 @@ var ( executablePath("puppeth"), executablePath("rlpdump"), executablePath("wnode"), - } - - // Files that end up in the swarm*.zip archive. - swarmArchiveFiles = []string{ - "COPYING", - executablePath("swarm"), + executablePath("clef"), } // A debian package is created for all executables listed here. @@ -118,45 +112,33 @@ var ( BinaryName: "wnode", Description: "Ethereum Whisper diagnostic tool", }, - } - - // A debian package is created for all executables listed here. - debSwarmExecutables = []debExecutable{ { - BinaryName: "swarm", - PackageName: "ethereum-swarm", - Description: "Ethereum Swarm daemon and tools", + BinaryName: "clef", + Description: "Ethereum account management tool.", }, } + // A debian package is created for all executables listed here. + debEthereum = debPackage{ Name: "ethereum", Version: params.Version, Executables: debExecutables, } - debSwarm = debPackage{ - Name: "ethereum-swarm", - Version: sv.Version, - Executables: debSwarmExecutables, - } - // Debian meta packages to build and push to Ubuntu PPA debPackages = []debPackage{ - debSwarm, debEthereum, } - // Packages to be cross-compiled by the xgo command - allCrossCompiledArchiveFiles = append(allToolsArchiveFiles, swarmArchiveFiles...) - // Distros for which packages are created. // Note: vivid is unsupported because there is no golang-1.6 package for it. - // Note: wily is unsupported because it was officially deprecated on lanchpad. - // Note: yakkety is unsupported because it was officially deprecated on lanchpad. - // Note: zesty is unsupported because it was officially deprecated on lanchpad. - // Note: artful is unsupported because it was officially deprecated on lanchpad. - debDistros = []string{"trusty", "xenial", "bionic", "cosmic"} + // Note: wily is unsupported because it was officially deprecated on Launchpad. + // Note: yakkety is unsupported because it was officially deprecated on Launchpad. + // Note: zesty is unsupported because it was officially deprecated on Launchpad. + // Note: artful is unsupported because it was officially deprecated on Launchpad. + // Note: cosmic is unsupported because it was officially deprecated on Launchpad. + debDistros = []string{"trusty", "xenial", "bionic", "disco", "eoan"} ) var GOBIN, _ = filepath.Abs(filepath.Join("build", "bin")) @@ -233,7 +215,6 @@ func doInstall(cmdline []string) { if flag.NArg() > 0 { packages = flag.Args() } - packages = build.ExpandPackagesNoVendor(packages) if *arch == "" || *arch == runtime.GOARCH { goinstall := goTool("install", buildFlags(env)...) @@ -286,6 +267,7 @@ func buildFlags(env build.Environment) (flags []string) { var ld []string if env.Commit != "" { ld = append(ld, "-X", "main.gitCommit="+env.Commit) + ld = append(ld, "-X", "main.gitDate="+env.Date) } if runtime.GOOS == "darwin" { ld = append(ld, "-s") @@ -335,13 +317,12 @@ func doTest(cmdline []string) { if len(flag.CommandLine.Args()) > 0 { packages = flag.CommandLine.Args() } - packages = build.ExpandPackagesNoVendor(packages) // Run the actual tests. // Test a single package at a time. CI builders are slow // and some tests run into timeouts under load. gotest := goTool("test", buildFlags(env)...) - gotest.Args = append(gotest.Args, "-p", "1", "-timeout", "5m") + gotest.Args = append(gotest.Args, "-p", "1", "-timeout", "5m", "--short") if *coverage { gotest.Args = append(gotest.Args, "-covermode=atomic", "-cover") } @@ -410,9 +391,6 @@ func doArchive(cmdline []string) { basegeth = archiveBasename(*arch, params.ArchiveVersion(env.Commit)) geth = "geth-" + basegeth + ext alltools = "geth-alltools-" + basegeth + ext - - baseswarm = archiveBasename(*arch, sv.ArchiveVersion(env.Commit)) - swarm = "swarm-" + baseswarm + ext ) maybeSkipArchive(env) if err := build.WriteArchive(geth, gethArchiveFiles); err != nil { @@ -421,10 +399,7 @@ func doArchive(cmdline []string) { if err := build.WriteArchive(alltools, allToolsArchiveFiles); err != nil { log.Fatal(err) } - if err := build.WriteArchive(swarm, swarmArchiveFiles); err != nil { - log.Fatal(err) - } - for _, archive := range []string{geth, alltools, swarm} { + for _, archive := range []string{geth, alltools} { if err := archiveUpload(archive, *upload, *signer); err != nil { log.Fatal(err) } @@ -587,8 +562,8 @@ func isUnstableBuild(env build.Environment) bool { } type debPackage struct { - Name string // the name of the Debian package to produce, e.g. "ethereum", or "ethereum-swarm" - Version string // the clean version of the debPackage, e.g. 1.8.12 or 0.3.0, without any metadata + Name string // the name of the Debian package to produce, e.g. "ethereum" + Version string // the clean version of the debPackage, e.g. 1.8.12, without any metadata Executables []debExecutable // executables to be included in the package } @@ -807,12 +782,8 @@ func doAndroidArchive(cmdline []string) { if os.Getenv("ANDROID_HOME") == "" { log.Fatal("Please ensure ANDROID_HOME points to your Android SDK") } - if os.Getenv("ANDROID_NDK") == "" { - log.Fatal("Please ensure ANDROID_NDK points to your Android NDK") - } // Build the Android archive and Maven resources build.MustRun(goTool("get", "golang.org/x/mobile/cmd/gomobile", "golang.org/x/mobile/cmd/gobind")) - build.MustRun(gomobileTool("init", "--ndk", os.Getenv("ANDROID_NDK"))) build.MustRun(gomobileTool("bind", "-ldflags", "-s -w", "--target", "android", "--javapkg", "org.ethereum", "-v", "github.com/ethereum/go-ethereum/mobile")) if *local { @@ -934,7 +905,7 @@ func doXCodeFramework(cmdline []string) { // Build the iOS XCode framework build.MustRun(goTool("get", "golang.org/x/mobile/cmd/gomobile", "golang.org/x/mobile/cmd/gobind")) build.MustRun(gomobileTool("init")) - bind := gomobileTool("bind", "-ldflags", "-s -w", "--target", "ios", "--tags", "ios", "-v", "github.com/ethereum/go-ethereum/mobile") + bind := gomobileTool("bind", "-ldflags", "-s -w", "--target", "ios", "-v", "github.com/ethereum/go-ethereum/mobile") if *local { // If we're building locally, use the build folder and stop afterwards @@ -1028,7 +999,7 @@ func doXgo(cmdline []string) { if *alltools { args = append(args, []string{"--dest", GOBIN}...) - for _, res := range allCrossCompiledArchiveFiles { + for _, res := range allToolsArchiveFiles { if strings.HasPrefix(res, GOBIN) { // Binary tool found, cross build it explicitly args = append(args, "./"+filepath.Join("cmd", filepath.Base(res))) diff --git a/build/deb/ethereum-swarm/deb.changelog b/build/deb/ethereum-swarm/deb.changelog deleted file mode 100644 index 83f804a83384..000000000000 --- a/build/deb/ethereum-swarm/deb.changelog +++ /dev/null @@ -1,5 +0,0 @@ -{{.Name}} ({{.VersionString}}) {{.Distro}}; urgency=low - - * git build of {{.Env.Commit}} - - -- {{.Author}} {{.Time}} diff --git a/build/deb/ethereum-swarm/deb.control b/build/deb/ethereum-swarm/deb.control deleted file mode 100644 index 8cd325bf55ac..000000000000 --- a/build/deb/ethereum-swarm/deb.control +++ /dev/null @@ -1,19 +0,0 @@ -Source: {{.Name}} -Section: science -Priority: extra -Maintainer: {{.Author}} -Build-Depends: debhelper (>= 8.0.0), golang-1.10 -Standards-Version: 3.9.5 -Homepage: https://ethereum.org -Vcs-Git: git://github.com/ethereum/go-ethereum.git -Vcs-Browser: https://github.com/ethereum/go-ethereum - -{{range .Executables}} -Package: {{$.ExeName .}} -Conflicts: {{$.ExeConflicts .}} -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Built-Using: ${misc:Built-Using} -Description: {{.Description}} - {{.Description}} -{{end}} diff --git a/build/deb/ethereum-swarm/deb.copyright b/build/deb/ethereum-swarm/deb.copyright deleted file mode 100644 index fe6e36ad9d76..000000000000 --- a/build/deb/ethereum-swarm/deb.copyright +++ /dev/null @@ -1,14 +0,0 @@ -Copyright 2018 The go-ethereum Authors - -go-ethereum is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -go-ethereum is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with go-ethereum. If not, see . diff --git a/build/deb/ethereum-swarm/deb.docs b/build/deb/ethereum-swarm/deb.docs deleted file mode 100644 index 62deb04972da..000000000000 --- a/build/deb/ethereum-swarm/deb.docs +++ /dev/null @@ -1 +0,0 @@ -AUTHORS diff --git a/build/deb/ethereum-swarm/deb.install b/build/deb/ethereum-swarm/deb.install deleted file mode 100644 index e7666ce5fb6b..000000000000 --- a/build/deb/ethereum-swarm/deb.install +++ /dev/null @@ -1 +0,0 @@ -build/bin/{{.BinaryName}} usr/bin diff --git a/build/deb/ethereum-swarm/deb.rules b/build/deb/ethereum-swarm/deb.rules deleted file mode 100644 index 7f286569ea6e..000000000000 --- a/build/deb/ethereum-swarm/deb.rules +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -override_dh_auto_build: - build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} - -override_dh_auto_test: - -%: - dh $@ diff --git a/build/deb/ethereum/deb.control b/build/deb/ethereum/deb.control index defb106fe367..5b3ff93542c4 100644 --- a/build/deb/ethereum/deb.control +++ b/build/deb/ethereum/deb.control @@ -2,7 +2,7 @@ Source: {{.Name}} Section: science Priority: extra Maintainer: {{.Author}} -Build-Depends: debhelper (>= 8.0.0), golang-1.10 +Build-Depends: debhelper (>= 8.0.0), golang-1.11 Standards-Version: 3.9.5 Homepage: https://ethereum.org Vcs-Git: git://github.com/ethereum/go-ethereum.git @@ -11,8 +11,8 @@ Vcs-Browser: https://github.com/ethereum/go-ethereum Package: {{.Name}} Architecture: any Depends: ${misc:Depends}, {{.ExeList}} -Description: Meta-package to install geth, swarm, and other tools - Meta-package to install geth, swarm and other tools +Description: Meta-package to install geth and other tools + Meta-package to install geth and other tools {{range .Executables}} Package: {{$.ExeName .}} diff --git a/build/deb/ethereum/deb.rules b/build/deb/ethereum/deb.rules index 7f286569ea6e..5280e0e55aa4 100644 --- a/build/deb/ethereum/deb.rules +++ b/build/deb/ethereum/deb.rules @@ -4,8 +4,11 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 +# Launchpad rejects Go's access to $HOME/.cache, use custom folder +export GOCACHE=/tmp/go-build + override_dh_auto_build: - build/env.sh /usr/lib/go-1.10/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} + build/env.sh /usr/lib/go-1.11/bin/go run build/ci.go install -git-commit={{.Env.Commit}} -git-branch={{.Env.Branch}} -git-tag={{.Env.Tag}} -buildnum={{.Env.Buildnum}} -pull-request={{.Env.IsPullRequest}} override_dh_auto_test: diff --git a/build/travis_keepalive.sh b/build/travis_keepalive.sh new file mode 100755 index 000000000000..77cc623eaf5f --- /dev/null +++ b/build/travis_keepalive.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# travis_keepalive runs the given command and preserves its return value, +# while it forks a child process what periodically produces a log line, +# so that Travis won't abort the build after 10 minutes. + +# Why? +# `t.Log()` in Go holds the buffer until the test does not pass or fail, +# and `-race` can increase the execution time by 2-20x. + +set -euo pipefail + +readonly KEEPALIVE_INTERVAL=300 # seconds => 5m + +main() { + keepalive + $@ +} + +# Keepalive produces a log line in each KEEPALIVE_INTERVAL. +keepalive() { + local child_pid + # Note: We fork here! + repeat "keepalive" & + child_pid=$! + ensureChildOnEXIT "${child_pid}" +} + +repeat() { + local this="$1" + while true; do + echo "${this}" + sleep "${KEEPALIVE_INTERVAL}" + done +} + +# Ensures that the child gets killed on normal program exit. +ensureChildOnEXIT() { + # Note: SIGINT and SIGTERM are forwarded to the child process by Bash + # automatically, so we don't have to deal with signals. + + local child_pid="$1" + trap "kill ${child_pid}" EXIT +} + +main "$@" diff --git a/build/update-license.go b/build/update-license.go index e3e00d4cc0cf..aa4d6100d78d 100644 --- a/build/update-license.go +++ b/build/update-license.go @@ -62,18 +62,22 @@ var ( skipPrefixes = []string{ // boring stuff "vendor/", "tests/testdata/", "build/", + // don't relicense vendored sources "cmd/internal/browser", + "common/bitutil/bitutil", + "common/prque/", "consensus/ethash/xor.go", "crypto/bn256/", "crypto/ecies/", - "crypto/secp256k1/curve.go", - "crypto/sha3/", + "graphql/graphiql.go", "internal/jsre/deps", "log/", - "common/bitutil/bitutil", - // don't license generated files - "contracts/chequebook/contract/code.go", + "metrics/", + "signer/rules/deps", + + // skip special licenses + "crypto/secp256k1", // Relicensed to BSD-3 via https://github.com/ethereum/go-ethereum/pull/17225 } // paths with this prefix are licensed as GPL. all other files are LGPL. @@ -146,6 +150,13 @@ func (i info) gpl() bool { return false } +// authors implements the sort.Interface for strings in case-insensitive mode. +type authors []string + +func (as authors) Len() int { return len(as) } +func (as authors) Less(i, j int) bool { return strings.ToLower(as[i]) < strings.ToLower(as[j]) } +func (as authors) Swap(i, j int) { as[i], as[j] = as[j], as[i] } + func main() { var ( files = getFiles() @@ -264,27 +275,32 @@ func mailmapLookup(authors []string) []string { } func writeAuthors(files []string) { - merge := make(map[string]bool) - // Add authors that Git reports as contributorxs. + var ( + dedup = make(map[string]bool) + list []string + ) + // Add authors that Git reports as contributors. // This is the primary source of author information. for _, a := range gitAuthors(files) { - merge[a] = true + if la := strings.ToLower(a); !dedup[la] { + list = append(list, a) + dedup[la] = true + } } // Add existing authors from the file. This should ensure that we // never lose authors, even if Git stops listing them. We can also // add authors manually this way. for _, a := range readAuthors() { - merge[a] = true + if la := strings.ToLower(a); !dedup[la] { + list = append(list, a) + dedup[la] = true + } } // Write sorted list of authors back to the file. - var result []string - for a := range merge { - result = append(result, a) - } - sort.Strings(result) + sort.Sort(authors(list)) content := new(bytes.Buffer) content.WriteString(authorsFileHeader) - for _, a := range result { + for _, a := range list { content.WriteString(a) content.WriteString("\n") } diff --git a/cmd/abigen/main.go b/cmd/abigen/main.go index d19164b18dc0..769811500896 100644 --- a/cmd/abigen/main.go +++ b/cmd/abigen/main.go @@ -18,83 +18,199 @@ package main import ( "encoding/json" - "flag" "fmt" "io/ioutil" "os" "strings" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common/compiler" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "gopkg.in/urfave/cli.v1" +) + +const ( + commandHelperTemplate = `{{.Name}}{{if .Subcommands}} command{{end}}{{if .Flags}} [command options]{{end}} [arguments...] +{{if .Description}}{{.Description}} +{{end}}{{if .Subcommands}} +SUBCOMMANDS: + {{range .Subcommands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} + {{end}}{{end}}{{if .Flags}} +OPTIONS: +{{range $.Flags}}{{"\t"}}{{.}} +{{end}} +{{end}}` ) var ( - abiFlag = flag.String("abi", "", "Path to the Ethereum contract ABI json to bind, - for STDIN") - binFlag = flag.String("bin", "", "Path to the Ethereum contract bytecode (generate deploy method)") - typFlag = flag.String("type", "", "Struct name for the binding (default = package name)") + // Git SHA1 commit hash of the release (set via linker flags) + gitCommit = "" + gitDate = "" - solFlag = flag.String("sol", "", "Path to the Ethereum contract Solidity source to build and bind") - solcFlag = flag.String("solc", "solc", "Solidity compiler to use if source builds are requested") - excFlag = flag.String("exc", "", "Comma separated types to exclude from binding") + app *cli.App - pkgFlag = flag.String("pkg", "", "Package name to generate the binding into") - outFlag = flag.String("out", "", "Output file for the generated binding (default = stdout)") - langFlag = flag.String("lang", "go", "Destination language for the bindings (go, java, objc)") + // Flags needed by abigen + abiFlag = cli.StringFlag{ + Name: "abi", + Usage: "Path to the Ethereum contract ABI json to bind, - for STDIN", + } + binFlag = cli.StringFlag{ + Name: "bin", + Usage: "Path to the Ethereum contract bytecode (generate deploy method)", + } + typeFlag = cli.StringFlag{ + Name: "type", + Usage: "Struct name for the binding (default = package name)", + } + jsonFlag = cli.StringFlag{ + Name: "combined-json", + Usage: "Path to the combined-json file generated by compiler", + } + solFlag = cli.StringFlag{ + Name: "sol", + Usage: "Path to the Ethereum contract Solidity source to build and bind", + } + solcFlag = cli.StringFlag{ + Name: "solc", + Usage: "Solidity compiler to use if source builds are requested", + Value: "solc", + } + vyFlag = cli.StringFlag{ + Name: "vy", + Usage: "Path to the Ethereum contract Vyper source to build and bind", + } + vyperFlag = cli.StringFlag{ + Name: "vyper", + Usage: "Vyper compiler to use if source builds are requested", + Value: "vyper", + } + excFlag = cli.StringFlag{ + Name: "exc", + Usage: "Comma separated types to exclude from binding", + } + pkgFlag = cli.StringFlag{ + Name: "pkg", + Usage: "Package name to generate the binding into", + } + outFlag = cli.StringFlag{ + Name: "out", + Usage: "Output file for the generated binding (default = stdout)", + } + langFlag = cli.StringFlag{ + Name: "lang", + Usage: "Destination language for the bindings (go, java, objc)", + Value: "go", + } ) -func main() { - // Parse and ensure all needed inputs are specified - flag.Parse() - - if *abiFlag == "" && *solFlag == "" { - fmt.Printf("No contract ABI (--abi) or Solidity source (--sol) specified\n") - os.Exit(-1) - } else if (*abiFlag != "" || *binFlag != "" || *typFlag != "") && *solFlag != "" { - fmt.Printf("Contract ABI (--abi), bytecode (--bin) and type (--type) flags are mutually exclusive with the Solidity source (--sol) flag\n") - os.Exit(-1) +func init() { + app = utils.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") + app.Flags = []cli.Flag{ + abiFlag, + binFlag, + typeFlag, + jsonFlag, + solFlag, + solcFlag, + vyFlag, + vyperFlag, + excFlag, + pkgFlag, + outFlag, + langFlag, } - if *pkgFlag == "" { - fmt.Printf("No destination package specified (--pkg)\n") - os.Exit(-1) + app.Action = utils.MigrateFlags(abigen) + cli.CommandHelpTemplate = commandHelperTemplate +} + +func abigen(c *cli.Context) error { + utils.CheckExclusive(c, abiFlag, jsonFlag, solFlag, vyFlag) // Only one source can be selected. + if c.GlobalString(pkgFlag.Name) == "" { + utils.Fatalf("No destination package specified (--pkg)") } var lang bind.Lang - switch *langFlag { + switch c.GlobalString(langFlag.Name) { case "go": lang = bind.LangGo case "java": lang = bind.LangJava case "objc": lang = bind.LangObjC + utils.Fatalf("Objc binding generation is uncompleted") default: - fmt.Printf("Unsupported destination language \"%s\" (--lang)\n", *langFlag) - os.Exit(-1) + utils.Fatalf("Unsupported destination language \"%s\" (--lang)", c.GlobalString(langFlag.Name)) } // If the entire solidity code was specified, build and bind based on that var ( abis []string bins []string types []string + sigs []map[string]string + libs = make(map[string]string) ) - if *solFlag != "" || (*abiFlag == "-" && *pkgFlag == "") { + if c.GlobalString(abiFlag.Name) != "" { + // Load up the ABI, optional bytecode and type name from the parameters + var ( + abi []byte + err error + ) + input := c.GlobalString(abiFlag.Name) + if input == "-" { + abi, err = ioutil.ReadAll(os.Stdin) + } else { + abi, err = ioutil.ReadFile(input) + } + if err != nil { + utils.Fatalf("Failed to read input ABI: %v", err) + } + abis = append(abis, string(abi)) + + var bin []byte + if binFile := c.GlobalString(binFlag.Name); binFile != "" { + if bin, err = ioutil.ReadFile(binFile); err != nil { + utils.Fatalf("Failed to read input bytecode: %v", err) + } + if strings.Contains(string(bin), "//") { + utils.Fatalf("Contract has additional library references, please use other mode(e.g. --combined-json) to catch library infos") + } + } + bins = append(bins, string(bin)) + + kind := c.GlobalString(typeFlag.Name) + if kind == "" { + kind = c.GlobalString(pkgFlag.Name) + } + types = append(types, kind) + } else { // Generate the list of types to exclude from binding exclude := make(map[string]bool) - for _, kind := range strings.Split(*excFlag, ",") { + for _, kind := range strings.Split(c.GlobalString(excFlag.Name), ",") { exclude[strings.ToLower(kind)] = true } - - var contracts map[string]*compiler.Contract var err error - if *solFlag != "" { - contracts, err = compiler.CompileSolidity(*solcFlag, *solFlag) + var contracts map[string]*compiler.Contract + + switch { + case c.GlobalIsSet(solFlag.Name): + contracts, err = compiler.CompileSolidity(c.GlobalString(solcFlag.Name), c.GlobalString(solFlag.Name)) if err != nil { - fmt.Printf("Failed to build Solidity contract: %v\n", err) - os.Exit(-1) + utils.Fatalf("Failed to build Solidity contract: %v", err) } - } else { - contracts, err = contractsFromStdin() + case c.GlobalIsSet(vyFlag.Name): + contracts, err = compiler.CompileVyper(c.GlobalString(vyperFlag.Name), c.GlobalString(vyFlag.Name)) + if err != nil { + utils.Fatalf("Failed to build Vyper contract: %v", err) + } + case c.GlobalIsSet(jsonFlag.Name): + jsonOutput, err := ioutil.ReadFile(c.GlobalString(jsonFlag.Name)) + if err != nil { + utils.Fatalf("Failed to read combined-json from compiler: %v", err) + } + contracts, err = compiler.ParseCombinedJSON(jsonOutput, "", "", "", "") if err != nil { - fmt.Printf("Failed to read input ABIs from STDIN: %v\n", err) - os.Exit(-1) + utils.Fatalf("Failed to read contract information from json output: %v", err) } } // Gather all non-excluded contract for binding @@ -102,64 +218,41 @@ func main() { if exclude[strings.ToLower(name)] { continue } - abi, _ := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse + abi, err := json.Marshal(contract.Info.AbiDefinition) // Flatten the compiler parse + if err != nil { + utils.Fatalf("Failed to parse ABIs from compiler output: %v", err) + } abis = append(abis, string(abi)) bins = append(bins, contract.Code) - + sigs = append(sigs, contract.Hashes) nameParts := strings.Split(name, ":") types = append(types, nameParts[len(nameParts)-1]) - } - } else { - // Otherwise load up the ABI, optional bytecode and type name from the parameters - var abi []byte - var err error - if *abiFlag == "-" { - abi, err = ioutil.ReadAll(os.Stdin) - } else { - abi, err = ioutil.ReadFile(*abiFlag) - } - if err != nil { - fmt.Printf("Failed to read input ABI: %v\n", err) - os.Exit(-1) - } - abis = append(abis, string(abi)) - - bin := []byte{} - if *binFlag != "" { - if bin, err = ioutil.ReadFile(*binFlag); err != nil { - fmt.Printf("Failed to read input bytecode: %v\n", err) - os.Exit(-1) - } - } - bins = append(bins, string(bin)) - kind := *typFlag - if kind == "" { - kind = *pkgFlag + libPattern := crypto.Keccak256Hash([]byte(name)).String()[2:36] + libs[libPattern] = nameParts[len(nameParts)-1] } - types = append(types, kind) } // Generate the contract binding - code, err := bind.Bind(types, abis, bins, *pkgFlag, lang) + code, err := bind.Bind(types, abis, bins, sigs, c.GlobalString(pkgFlag.Name), lang, libs) if err != nil { - fmt.Printf("Failed to generate ABI binding: %v\n", err) - os.Exit(-1) + utils.Fatalf("Failed to generate ABI binding: %v", err) } // Either flush it out to a file or display on the standard output - if *outFlag == "" { + if !c.GlobalIsSet(outFlag.Name) { fmt.Printf("%s\n", code) - return + return nil } - if err := ioutil.WriteFile(*outFlag, []byte(code), 0600); err != nil { - fmt.Printf("Failed to write ABI binding: %v\n", err) - os.Exit(-1) + if err := ioutil.WriteFile(c.GlobalString(outFlag.Name), []byte(code), 0600); err != nil { + utils.Fatalf("Failed to write ABI binding: %v", err) } + return nil } -func contractsFromStdin() (map[string]*compiler.Contract, error) { - bytes, err := ioutil.ReadAll(os.Stdin) - if err != nil { - return nil, err +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + + if err := app.Run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) } - return compiler.ParseCombinedJSON(bytes, "", "", "", "") } diff --git a/cmd/bootnode/main.go b/cmd/bootnode/main.go index 32f7d63bea10..f6e2a14c3bd2 100644 --- a/cmd/bootnode/main.go +++ b/cmd/bootnode/main.go @@ -70,7 +70,9 @@ func main() { if err = crypto.SaveECDSA(*genKey, nodeKey); err != nil { utils.Fatalf("%v", err) } - return + if !*writeAddr { + return + } case *nodeKeyFile == "" && *nodeKeyHex == "": utils.Fatalf("Use -nodekey or -nodekeyhex to specify a private key") case *nodeKeyFile != "" && *nodeKeyHex != "": @@ -112,12 +114,13 @@ func main() { if !realaddr.IP.IsLoopback() { go nat.Map(natm, nil, "udp", realaddr.Port, realaddr.Port, "ethereum discovery") } - // TODO: react to external IP changes over time. if ext, err := natm.ExternalIP(); err == nil { realaddr = &net.UDPAddr{IP: ext, Port: realaddr.Port} } } + printNotice(&nodeKey.PublicKey, *realaddr) + if *runv5 { if _, err := discv5.ListenUDP(nodeKey, conn, "", restrictList); err != nil { utils.Fatalf("%v", err) @@ -136,3 +139,13 @@ func main() { select {} } + +func printNotice(nodeKey *ecdsa.PublicKey, addr net.UDPAddr) { + if addr.IP.IsUnspecified() { + addr.IP = net.IP{127, 0, 0, 1} + } + n := enode.NewV4(nodeKey, addr.IP, 0, addr.Port) + fmt.Println(n.URLv4()) + fmt.Println("Note: you're using cmd/bootnode, a developer tool.") + fmt.Println("We recommend using a regular node as bootstrap node for production deployments.") +} diff --git a/cmd/checkpoint-admin/common.go b/cmd/checkpoint-admin/common.go new file mode 100644 index 000000000000..05a45dfbf997 --- /dev/null +++ b/cmd/checkpoint-admin/common.go @@ -0,0 +1,120 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "strconv" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/external" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" + "gopkg.in/urfave/cli.v1" +) + +// newClient creates a client with specified remote URL. +func newClient(ctx *cli.Context) *ethclient.Client { + client, err := ethclient.Dial(ctx.GlobalString(nodeURLFlag.Name)) + if err != nil { + utils.Fatalf("Failed to connect to Ethereum node: %v", err) + } + return client +} + +// newRPCClient creates a rpc client with specified node URL. +func newRPCClient(url string) *rpc.Client { + client, err := rpc.Dial(url) + if err != nil { + utils.Fatalf("Failed to connect to Ethereum node: %v", err) + } + return client +} + +// getContractAddr retrieves the register contract address through +// rpc request. +func getContractAddr(client *rpc.Client) common.Address { + var addr string + if err := client.Call(&addr, "les_getCheckpointContractAddress"); err != nil { + utils.Fatalf("Failed to fetch checkpoint oracle address: %v", err) + } + return common.HexToAddress(addr) +} + +// getCheckpoint retrieves the specified checkpoint or the latest one +// through rpc request. +func getCheckpoint(ctx *cli.Context, client *rpc.Client) *params.TrustedCheckpoint { + var checkpoint *params.TrustedCheckpoint + + if ctx.GlobalIsSet(indexFlag.Name) { + var result [3]string + index := uint64(ctx.GlobalInt64(indexFlag.Name)) + if err := client.Call(&result, "les_getCheckpoint", index); err != nil { + utils.Fatalf("Failed to get local checkpoint %v, please ensure the les API is exposed", err) + } + checkpoint = ¶ms.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: common.HexToHash(result[0]), + CHTRoot: common.HexToHash(result[1]), + BloomRoot: common.HexToHash(result[2]), + } + } else { + var result [4]string + err := client.Call(&result, "les_latestCheckpoint") + if err != nil { + utils.Fatalf("Failed to get local checkpoint %v, please ensure the les API is exposed", err) + } + index, err := strconv.ParseUint(result[0], 0, 64) + if err != nil { + utils.Fatalf("Failed to parse checkpoint index %v", err) + } + checkpoint = ¶ms.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: common.HexToHash(result[1]), + CHTRoot: common.HexToHash(result[2]), + BloomRoot: common.HexToHash(result[3]), + } + } + return checkpoint +} + +// newContract creates a registrar contract instance with specified +// contract address or the default contracts for mainnet or testnet. +func newContract(client *rpc.Client) (common.Address, *checkpointoracle.CheckpointOracle) { + addr := getContractAddr(client) + if addr == (common.Address{}) { + utils.Fatalf("No specified registrar contract address") + } + contract, err := checkpointoracle.NewCheckpointOracle(addr, ethclient.NewClient(client)) + if err != nil { + utils.Fatalf("Failed to setup registrar contract %s: %v", addr, err) + } + return addr, contract +} + +// newClefSigner sets up a clef backend and returns a clef transaction signer. +func newClefSigner(ctx *cli.Context) *bind.TransactOpts { + clef, err := external.NewExternalSigner(ctx.String(clefURLFlag.Name)) + if err != nil { + utils.Fatalf("Failed to create clef signer %v", err) + } + return bind.NewClefTransactor(clef, accounts.Account{Address: common.HexToAddress(ctx.String(signerFlag.Name))}) +} diff --git a/cmd/checkpoint-admin/exec.go b/cmd/checkpoint-admin/exec.go new file mode 100644 index 000000000000..352a96d9e6f0 --- /dev/null +++ b/cmd/checkpoint-admin/exec.go @@ -0,0 +1,311 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "bytes" + "context" + "encoding/binary" + "fmt" + "math/big" + "strings" + "time" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle/contract" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" + "gopkg.in/urfave/cli.v1" +) + +var commandDeploy = cli.Command{ + Name: "deploy", + Usage: "Deploy a new checkpoint oracle contract", + Flags: []cli.Flag{ + nodeURLFlag, + clefURLFlag, + signerFlag, + signersFlag, + thresholdFlag, + }, + Action: utils.MigrateFlags(deploy), +} + +var commandSign = cli.Command{ + Name: "sign", + Usage: "Sign the checkpoint with the specified key", + Flags: []cli.Flag{ + nodeURLFlag, + clefURLFlag, + signerFlag, + indexFlag, + hashFlag, + oracleFlag, + }, + Action: utils.MigrateFlags(sign), +} + +var commandPublish = cli.Command{ + Name: "publish", + Usage: "Publish a checkpoint into the oracle", + Flags: []cli.Flag{ + nodeURLFlag, + clefURLFlag, + signerFlag, + indexFlag, + signaturesFlag, + }, + Action: utils.MigrateFlags(publish), +} + +// deploy deploys the checkpoint registrar contract. +// +// Note the network where the contract is deployed depends on +// the network where the connected node is located. +func deploy(ctx *cli.Context) error { + // Gather all the addresses that should be permitted to sign + var addrs []common.Address + for _, account := range strings.Split(ctx.String(signersFlag.Name), ",") { + if trimmed := strings.TrimSpace(account); !common.IsHexAddress(trimmed) { + utils.Fatalf("Invalid account in --signers: '%s'", trimmed) + } + addrs = append(addrs, common.HexToAddress(account)) + } + // Retrieve and validate the signing threshold + needed := ctx.Int(thresholdFlag.Name) + if needed == 0 || needed > len(addrs) { + utils.Fatalf("Invalid signature threshold %d", needed) + } + // Print a summary to ensure the user understands what they're signing + fmt.Printf("Deploying new checkpoint oracle:\n\n") + for i, addr := range addrs { + fmt.Printf("Admin %d => %s\n", i+1, addr.Hex()) + } + fmt.Printf("\nSignatures needed to publish: %d\n", needed) + + // setup clef signer, create an abigen transactor and an RPC client + transactor, client := newClefSigner(ctx), newClient(ctx) + + // Deploy the checkpoint oracle + fmt.Println("Sending deploy request to Clef...") + oracle, tx, _, err := contract.DeployCheckpointOracle(transactor, client, addrs, big.NewInt(int64(params.CheckpointFrequency)), + big.NewInt(int64(params.CheckpointProcessConfirmations)), big.NewInt(int64(needed))) + if err != nil { + utils.Fatalf("Failed to deploy checkpoint oracle %v", err) + } + log.Info("Deployed checkpoint oracle", "address", oracle, "tx", tx.Hash().Hex()) + + return nil +} + +// sign creates the signature for specific checkpoint +// with local key. Only contract admins have the permission to +// sign checkpoint. +func sign(ctx *cli.Context) error { + var ( + offline bool // The indicator whether we sign checkpoint by offline. + chash common.Hash + cindex uint64 + address common.Address + + node *rpc.Client + oracle *checkpointoracle.CheckpointOracle + ) + if !ctx.GlobalIsSet(nodeURLFlag.Name) { + // Offline mode signing + offline = true + if !ctx.IsSet(hashFlag.Name) { + utils.Fatalf("Please specify the checkpoint hash (--hash) to sign in offline mode") + } + chash = common.HexToHash(ctx.String(hashFlag.Name)) + + if !ctx.IsSet(indexFlag.Name) { + utils.Fatalf("Please specify checkpoint index (--index) to sign in offline mode") + } + cindex = ctx.Uint64(indexFlag.Name) + + if !ctx.IsSet(oracleFlag.Name) { + utils.Fatalf("Please specify oracle address (--oracle) to sign in offline mode") + } + address = common.HexToAddress(ctx.String(oracleFlag.Name)) + } else { + // Interactive mode signing, retrieve the data from the remote node + node = newRPCClient(ctx.GlobalString(nodeURLFlag.Name)) + + checkpoint := getCheckpoint(ctx, node) + chash, cindex, address = checkpoint.Hash(), checkpoint.SectionIndex, getContractAddr(node) + + // Check the validity of checkpoint + reqCtx, cancelFn := context.WithTimeout(context.Background(), 10*time.Second) + defer cancelFn() + + head, err := ethclient.NewClient(node).HeaderByNumber(reqCtx, nil) + if err != nil { + return err + } + num := head.Number.Uint64() + if num < ((cindex+1)*params.CheckpointFrequency + params.CheckpointProcessConfirmations) { + utils.Fatalf("Invalid future checkpoint") + } + _, oracle = newContract(node) + latest, _, h, err := oracle.Contract().GetLatestCheckpoint(nil) + if err != nil { + return err + } + if cindex < latest { + utils.Fatalf("Checkpoint is too old") + } + if cindex == latest && (latest != 0 || h.Uint64() != 0) { + utils.Fatalf("Stale checkpoint, latest registered %d, given %d", latest, cindex) + } + } + var ( + signature string + signer string + ) + // isAdmin checks whether the specified signer is admin. + isAdmin := func(addr common.Address) error { + signers, err := oracle.Contract().GetAllAdmin(nil) + if err != nil { + return err + } + for _, s := range signers { + if s == addr { + return nil + } + } + return fmt.Errorf("signer %v is not the admin", addr.Hex()) + } + // Print to the user the data thy are about to sign + fmt.Printf("Oracle => %s\n", address.Hex()) + fmt.Printf("Index %4d => %s\n", cindex, chash.Hex()) + + // Sign checkpoint in clef mode. + signer = ctx.String(signerFlag.Name) + + if !offline { + if err := isAdmin(common.HexToAddress(signer)); err != nil { + return err + } + } + clef := newRPCClient(ctx.String(clefURLFlag.Name)) + p := make(map[string]string) + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, cindex) + p["address"] = address.Hex() + p["message"] = hexutil.Encode(append(buf, chash.Bytes()...)) + + fmt.Println("Sending signing request to Clef...") + if err := clef.Call(&signature, "account_signData", accounts.MimetypeDataWithValidator, signer, p); err != nil { + utils.Fatalf("Failed to sign checkpoint, err %v", err) + } + fmt.Printf("Signer => %s\n", signer) + fmt.Printf("Signature => %s\n", signature) + return nil +} + +// sighash calculates the hash of the data to sign for the checkpoint oracle. +func sighash(index uint64, oracle common.Address, hash common.Hash) []byte { + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, index) + + data := append([]byte{0x19, 0x00}, append(oracle[:], append(buf, hash[:]...)...)...) + return crypto.Keccak256(data) +} + +// ecrecover calculates the sender address from a sighash and signature combo. +func ecrecover(sighash []byte, sig []byte) common.Address { + sig[64] -= 27 + defer func() { sig[64] += 27 }() + + signer, err := crypto.SigToPub(sighash, sig) + if err != nil { + utils.Fatalf("Failed to recover sender from signature %x: %v", sig, err) + } + return crypto.PubkeyToAddress(*signer) +} + +// publish registers the specified checkpoint which generated by connected node +// with a authorised private key. +func publish(ctx *cli.Context) error { + // Print the checkpoint oracle's current status to make sure we're interacting + // with the correct network and contract. + status(ctx) + + // Gather the signatures from the CLI + var sigs [][]byte + for _, sig := range strings.Split(ctx.String(signaturesFlag.Name), ",") { + trimmed := strings.TrimPrefix(strings.TrimSpace(sig), "0x") + if len(trimmed) != 130 { + utils.Fatalf("Invalid signature in --signature: '%s'", trimmed) + } else { + sigs = append(sigs, common.Hex2Bytes(trimmed)) + } + } + // Retrieve the checkpoint we want to sign to sort the signatures + var ( + client = newRPCClient(ctx.GlobalString(nodeURLFlag.Name)) + addr, oracle = newContract(client) + checkpoint = getCheckpoint(ctx, client) + sighash = sighash(checkpoint.SectionIndex, addr, checkpoint.Hash()) + ) + for i := 0; i < len(sigs); i++ { + for j := i + 1; j < len(sigs); j++ { + signerA := ecrecover(sighash, sigs[i]) + signerB := ecrecover(sighash, sigs[j]) + if bytes.Compare(signerA.Bytes(), signerB.Bytes()) > 0 { + sigs[i], sigs[j] = sigs[j], sigs[i] + } + } + } + // Retrieve recent header info to protect replay attack + reqCtx, cancelFn := context.WithTimeout(context.Background(), 10*time.Second) + defer cancelFn() + + head, err := ethclient.NewClient(client).HeaderByNumber(reqCtx, nil) + if err != nil { + return err + } + num := head.Number.Uint64() + recent, err := ethclient.NewClient(client).HeaderByNumber(reqCtx, big.NewInt(int64(num-128))) + if err != nil { + return err + } + // Print a summary of the operation that's going to be performed + fmt.Printf("Publishing %d => %s:\n\n", checkpoint.SectionIndex, checkpoint.Hash().Hex()) + for i, sig := range sigs { + fmt.Printf("Signer %d => %s\n", i+1, ecrecover(sighash, sig).Hex()) + } + fmt.Println() + fmt.Printf("Sentry number => %d\nSentry hash => %s\n", recent.Number, recent.Hash().Hex()) + + // Publish the checkpoint into the oracle + fmt.Println("Sending publish request to Clef...") + tx, err := oracle.RegisterCheckpoint(newClefSigner(ctx), checkpoint.SectionIndex, checkpoint.Hash().Bytes(), recent.Number, recent.Hash(), sigs) + if err != nil { + utils.Fatalf("Register contract failed %v", err) + } + log.Info("Successfully registered checkpoint", "tx", tx.Hash().Hex()) + return nil +} diff --git a/cmd/checkpoint-admin/main.go b/cmd/checkpoint-admin/main.go new file mode 100644 index 000000000000..26d751dd81a6 --- /dev/null +++ b/cmd/checkpoint-admin/main.go @@ -0,0 +1,117 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +// checkpoint-admin is a utility that can be used to query checkpoint information +// and register stable checkpoints into an oracle contract. +package main + +import ( + "fmt" + "os" + + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common/fdlimit" + "github.com/ethereum/go-ethereum/log" + "gopkg.in/urfave/cli.v1" +) + +const ( + commandHelperTemplate = `{{.Name}}{{if .Subcommands}} command{{end}}{{if .Flags}} [command options]{{end}} [arguments...] +{{if .Description}}{{.Description}} +{{end}}{{if .Subcommands}} +SUBCOMMANDS: + {{range .Subcommands}}{{.Name}}{{with .ShortName}}, {{.}}{{end}}{{ "\t" }}{{.Usage}} + {{end}}{{end}}{{if .Flags}} +OPTIONS: +{{range $.Flags}}{{"\t"}}{{.}} +{{end}} +{{end}}` +) + +var ( + // Git SHA1 commit hash of the release (set via linker flags) + gitCommit = "" + gitDate = "" +) + +var app *cli.App + +func init() { + app = utils.NewApp(gitCommit, gitDate, "ethereum checkpoint helper tool") + app.Commands = []cli.Command{ + commandStatus, + commandDeploy, + commandSign, + commandPublish, + } + app.Flags = []cli.Flag{ + oracleFlag, + nodeURLFlag, + } + cli.CommandHelpTemplate = commandHelperTemplate +} + +// Commonly used command line flags. +var ( + indexFlag = cli.Int64Flag{ + Name: "index", + Usage: "Checkpoint index (query latest from remote node if not specified)", + } + hashFlag = cli.StringFlag{ + Name: "hash", + Usage: "Checkpoint hash (query latest from remote node if not specified)", + } + oracleFlag = cli.StringFlag{ + Name: "oracle", + Usage: "Checkpoint oracle address (query from remote node if not specified)", + } + thresholdFlag = cli.Int64Flag{ + Name: "threshold", + Usage: "Minimal number of signatures required to approve a checkpoint", + } + nodeURLFlag = cli.StringFlag{ + Name: "rpc", + Value: "http://localhost:8545", + Usage: "The rpc endpoint of a local or remote geth node", + } + clefURLFlag = cli.StringFlag{ + Name: "clef", + Value: "http://localhost:8550", + Usage: "The rpc endpoint of clef", + } + signerFlag = cli.StringFlag{ + Name: "signer", + Usage: "Signer address for clef signing", + } + signersFlag = cli.StringFlag{ + Name: "signers", + Usage: "Comma separated accounts of trusted checkpoint signers", + } + signaturesFlag = cli.StringFlag{ + Name: "signatures", + Usage: "Comma separated checkpoint signatures to submit", + } +) + +func main() { + log.Root().SetHandler(log.LvlFilterHandler(log.LvlInfo, log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) + fdlimit.Raise(2048) + + if err := app.Run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/cmd/checkpoint-admin/status.go b/cmd/checkpoint-admin/status.go new file mode 100644 index 000000000000..f613501eb35d --- /dev/null +++ b/cmd/checkpoint-admin/status.go @@ -0,0 +1,61 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "gopkg.in/urfave/cli.v1" +) + +var commandStatus = cli.Command{ + Name: "status", + Usage: "Fetches the signers and checkpoint status of the oracle contract", + Flags: []cli.Flag{ + nodeURLFlag, + }, + Action: utils.MigrateFlags(status), +} + +// status fetches the admin list of specified registrar contract. +func status(ctx *cli.Context) error { + // Create a wrapper around the checkpoint oracle contract + addr, oracle := newContract(newRPCClient(ctx.GlobalString(nodeURLFlag.Name))) + fmt.Printf("Oracle => %s\n", addr.Hex()) + fmt.Println() + + // Retrieve the list of authorized signers (admins) + admins, err := oracle.Contract().GetAllAdmin(nil) + if err != nil { + return err + } + for i, admin := range admins { + fmt.Printf("Admin %d => %s\n", i+1, admin.Hex()) + } + fmt.Println() + + // Retrieve the latest checkpoint + index, checkpoint, height, err := oracle.Contract().GetLatestCheckpoint(nil) + if err != nil { + return err + } + fmt.Printf("Checkpoint (published at #%d) %d => %s\n", height, index, common.Hash(checkpoint).Hex()) + + return nil +} diff --git a/cmd/clef/4byte.json b/cmd/clef/4byte.json deleted file mode 100644 index 5603d5931d78..000000000000 --- a/cmd/clef/4byte.json +++ /dev/null @@ -1 +0,0 @@ -{"0x22ec1244": "shaBid(bytes32,address,uint256,bytes32)", "0xcae9ca51": "approveAndCall(address,uint256,bytes)", "0x4fb2e45d": "transferOwner(address)", "0x7741b4ec": "RandomNumberFromSeed(uint256)", "0x267127ec": "getTokenSettings()", "0xb7213bd4": "readLog(uint256)", "0x3018205f": "getController()", "0xc8edf65e": "GetAndReduceFeesByFraction(uint256)", "0xeec2b628": "beforeExecute(address)", "0xfc0c546a": "token()", "0x40a3d246": "toggle()", "0x70983e91": "startBoardProposal(uint256,address)", "0x6b5caec4": "setBot(address)", "0x78524b2e": "halveMinQuorum()", "0x2c60a055": "MapTest()", "0xc2fb8f36": "TinyHuman(address,address,address)", "0x6822abae": "getMinimumCallCost(uint256)", "0x6f9fb98a": "getContractBalance()", "0x5c17f9f4": "approve(address,uint256,bytes)", "0x504ac982": "transfer(string,string)", "0x06e53f47": "whichChainIsThis()", "0xf359671c": "withdrawWithReference(address,uint256,string)", "0xf97d0591": "parseTimestamp(uint256)", "0xd3c0715b": "vote(uint256,bool,string)", "0x6b069710": "scheduleCall(address,bytes,uint256,uint256,uint8)", "0x37ae43a3": "BetOnHashV81()", "0xab519020": "calcShare(uint256,uint256)", "0x6572ae13": "calculateWinner(uint256,uint256)", "0x6aaba012": "ErrorGenerator()", "0xfe05e8b1": "assertFact(uint256,string)", "0x6e940a29": "changeHost(address)", "0x669ee827": "RegisterDevice()", "0x6f4dd69c": "testSetBalanceUpdatesSupply()", "0x4401a6e4": "safeSend(address)", "0x27dc297e": "__callback(bytes32,string)", "0xe4dedc7f": "DeleteContract()", "0x7fef036e": "totalEntries()", "0x64325ddb": "currentClaimPrice()", "0x2fc0aad3": "isNumericString(string)", "0xbc45d789": "setConfigUint(int256,bytes32,uint256)", "0xee95feaf": "isSeller(address)", "0x358d5dc2": "getIsCashed(uint256,uint256)", "0x1397fdbd": "getShares(address,bytes,int256[])", "0x2d8c1c35": "level_up()", "0x24600fc3": "withdrawFunds()", "0x05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", "0x1840f0ca": "countVotes(uint256)", "0xd44aadf7": "initROS()", "0xca1d209d": "fund(uint256)", "0x5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", "0x3c314a91": "playerGetPendingTxByAddress(address)", "0xd5582205": "getCertifiedStudentAtIndex(uint256)", "0xe45ebe93": "checkVoteStatus()", "0xcd9380d5": "testSetBalanceSetsSupplyCumulatively()", "0x637e86eb": "totBOTs()", "0x5bb47808": "setFactory(address)", "0x674cc1f5": "getMarketHashes(bytes32[])", "0x648bf774": "recover(address,address)", "0x0221038a": "payOut(address,uint256)", "0x4016535a": "parseBlock(bytes,uint256)", "0xa3908e1b": "convert(uint256)", "0xd9e7ee1c": "new_game(uint256,uint256)", "0x929e626e": "getShareDistribution(bytes32)", "0xa20495d3": "Managed()", "0xd409ddda": "EtherizationUtils()", "0xcb2b9031": "addressToBytes(address,address)", "0xfff3c457": "readMessages(uint256)", "0x043753ba": "makeDecision(uint256,bool)", "0x85b4bb53": "getSettings()", "0x60726abb": "copy()", "0xe50d0473": "SetRank(uint8,address,uint16)", "0x54ae8492": "CustodialForward()", "0xd6d02c51": "whois(string)", "0xcb712535": "_transferFrom(address,address,uint256)", "0xb152f19e": "getFirstSchedulableBlock()", "0x9334ab61": "Infos()", "0x88a49164": "testErrorUnauthorizedTransfer()", "0x17db59a4": "dEthereumlotteryNet(address,address,address)", "0xf85aefba": "testBitsSetFailIndexOOB()", "0xae99847b": "daylimit(uint256)", "0xd93e7573": "disown(bytes32)", "0xa5468081": "Pyramid(address)", "0x00e7d289": "registerListening(address)", "0x57ee24af": "getNum(bytes32,uint256)", "0xdaea85c5": "approve(address)", "0x36ffa905": "getMyProposals()", "0x7143059f": "getParticipant(address)", "0x55ff440a": "castStringToUInt(string)", "0x6a4a6b6e": "_myAddressHelper()", "0xb67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", "0xbcca1fd3": "changeVotingRules(uint256,uint256,int256)", "0x1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", "0x45104b16": "EXECUTION_GAS_OVERHEAD()", "0xa26759cb": "addFunds()", "0x232523e8": "forceDivestOfAllInvestors()", "0x7e904a48": "getNumContents(uint256)", "0xb69c0896": "BaseScheduler(address,address,uint256)", "0xc6ed8e1b": "getApprovedProxys()", "0x4d1f8c31": "owner(uint64)", "0x17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", "0x2c02d622": "precalculate()", "0xa035b1fe": "price()", "0x43b0e8df": "set(uint256,uint256,uint256)", "0x9b5fde7d": "payOut(uint256,string)", "0x89fcd099": "getApproval(address,address)", "0x4c0eceb5": "plusOnePonzi()", "0x880cdc31": "updateOwner(address)", "0xdab80d6f": "addSponsor(address)", "0x0fcda174": "getAccountTokenBalance(address,address)", "0xa55cab95": "getName(uint8,uint8)", "0x934db458": "Big()", "0xeb782d8c": "ContentSeries(address)", "0xdbfef710": "getDefaultRequiredGas()", "0x4f09eba7": "proxyApprove(address,uint256,bytes32)", "0xf4c5ab7c": "validateCallGas(uint256,uint256)", "0x376fe102": "userId(address)", "0x922dd59a": "icapTransfer(bytes,address,bytes,uint256)", "0x7318b453": "setVotetUntil(uint8)", "0xb8c86aa6": "getArraySettingResult()", "0x37bdc99b": "release(uint256)", "0x7cbcc254": "__reset__()", "0x37664643": "retractLatestRevision(bytes32)", "0x4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", "0xad8d5f48": "exec(address,bytes,uint256)", "0x2f95b833": "requiredStackDepth()", "0xe3848e5b": "thing(string,string,string)", "0xaa272d4b": "getNodeIndexId(bytes)", "0xd7f746ce": "tickingBomb()", "0x3b84edbd": "setRNG(address)", "0x1fb2f2a0": "testUpdateLatestRevision()", "0xb7fba4d3": "getProxy(address)", "0x4b8e1ba8": "isMinter(int256,address)", "0xba4c206e": "removeCertificationDocumentInternal(address,bytes32)", "0x884b5dc2": "fill(uint256[])", "0x88017e05": "setContribution(uint256)", "0x1ff517ff": "totalDebt(address)", "0xd0315658": "getShareDistributionWithTimestamp(bytes)", "0x7d03f5f3": "newGame()", "0xb7538f3e": "ChangeClient(address)", "0xbf4d89b5": "parseInt(string,uint256)", "0x7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", "0x350d141e": "getWasApprovedBeforeDeadline()", "0x27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0xb774d3d7": "BankOwner_GetDonationsBalance()", "0x267b6922": "entries(bytes32)", "0x08b7c13b": "getExists(bytes20)", "0x7e7a2fbf": "contribute_toTheGame()", "0x5b86914d": "bet_value()", "0x0e1087c3": "getMarketMakerFunds()", "0xf7149220": "RNG()", "0x345006b6": "getGenerationForCall(address)", "0xc4b14e0b": "getSignature(bytes32)", "0x419945f8": "ExpiringMarket(uint256)", "0x41868769": "CallAborted(address,bytes)", "0x29092d0e": "remove(address)", "0x746c9171": "m_required()", "0x5020dcf4": "convertToEach(uint256,string,uint256)", "0xa06db7dc": "gracePeriod()", "0xbf8fc670": "sendToAggregation(uint256)", "0xf14fcbc8": "commit(bytes32)", "0xa538d287": "getMinMax()", "0xcae523c1": "testOwnedTryAuthUnauthorized()", "0x04d10f1c": "isValidChainyJson(string)", "0x9ba5b4e9": "getEventHashes(bytes32[])", "0xfedfd535": "Config()", "0x42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", "0x31be6985": "testBitXorSuccess()", "0x173cb7de": "getNumReleasesForNameHash(bytes32)", "0xd90a88cd": "getContentReplies(uint256,uint256)", "0x92eefe9b": "setController(address)", "0x052b81c7": "releaseBadges()", "0xb2855b4f": "setFeeAddr(address)", "0x19a9c2f1": "generateId(string)", "0xfa9acb05": "addressInArray(address,address)", "0x3da5c3ce": "puzzle(address,bytes32)", "0x7a427d98": "forceReturn()", "0x70e71ea3": "etherandomSeedWithGasLimit(uint256)", "0xd7a58658": "changeHouseedge(uint8)", "0x72b75585": "getOriginalClient()", "0xf802075f": "requiredEndowment()", "0x7997b997": "doMelt(uint256,uint256)", "0x6d5433e6": "max(uint256,uint256)", "0xb651cbaf": "add_level(address,bytes)", "0xb4d6d4c7": "getPackageData(bytes32)", "0x90e3c278": "getShares(uint256[128])", "0x179b73da": "killBoardProposal(uint256,address)", "0xc944a38e": "CharlyLifeLog(string,int256)", "0xe1c66292": "Create(uint32,address)", "0x69c8b344": "ownedToken(address)", "0xabcf1328": "InterestBank()", "0x532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", "0x43d24a5e": "addUpdater(address)", "0xd1feca67": "addSpendingRequest(address)", "0x2d34ba79": "setup(address,address)", "0xcb14d93b": "getHash(bytes,address,uint256)", "0x309424fe": "get_all_names()", "0x96c52fc3": "____forward(address,uint256,uint256,bytes)", "0xde39acea": "get32(bytes,uint256)", "0xf3dd3d8a": "newCurrency(string,string,uint8)", "0x2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", "0x7fcf3a2f": "throwFooBar()", "0xabe9f569": "oraclize_getPrice(string,uint256)", "0x41ee903e": "clear(uint256,uint256)", "0xd249a52e": "update(bytes,uint256[],uint256[])", "0xc3d014d6": "setContent(bytes32,bytes32)", "0x3ac5cb73": "GeometricPonzi()", "0x4a1aa767": "claim_victory(uint256,uint8,uint8,uint8)", "0xce592586": "setThresold(uint256,uint256)", "0x63deb2c5": "changeMemberAddress(address)", "0x2e6e504a": "trusteeWithdraw()", "0xcfed9199": "timePassed(uint256)", "0xb782fc9b": "getFirstActiveDuel2()", "0x35b28153": "addAuthorization(address)", "0x46f7a883": "BuyTicket(uint8,uint8,uint8)", "0x83c51a38": "thesimplegame()", "0xfa28ba0d": "validateReleaseLockfileURI(string)", "0xa7b2d4cb": "remove(int256,address)", "0x010731c0": "sendCryptedHand(bytes32)", "0xe9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", "0x4e30a66c": "safeToAdd(uint256,uint256)", "0x2c4e591b": "totalGames()", "0xa3221c8e": "step8()", "0x783ce458": "expmod(uint256,uint256,uint256)", "0xe417291b": "undelegateDAOTokens(uint256)", "0x8e5d97a2": "releasePendingTransfer(uint256)", "0xbc5ff5e1": "oraclize_query(string,string[4],uint256)", "0x38f77d69": "getDistributeProfitsInfo()", "0xbb510a77": "createChannel(address,uint256)", "0x650955d4": "HashToken()", "0xa8484938": "doApprove(address,uint256)", "0x64ed31fe": "authVotes(address)", "0xf7ae9421": "checkInvestorBalance(address)", "0xba904eed": "removeRegistrar(address)", "0xdce4a447": "at(address)", "0xdb4cacec": "Other()", "0x3647b87a": "buildFactory()", "0xa51aea2d": "changeMaxMultiplier(uint256)", "0x4974bc27": "download()", "0xf8a8fd6d": "test()", "0xd8c90762": "addTrustedIssuer(address,string)", "0xdf6c13c3": "getMinFunding()", "0x867904b4": "issue(address,uint256)", "0x1531c267": "fipsRegisterMulti(uint256,address,bytes)", "0x40a49a96": "searchSmallestInvestor()", "0x61bffe01": "addIdentities(bytes32[],bytes32[])", "0xf77a0923": "BitcoinProcessor(address)", "0xd02528e6": "GetGameIndexesToProcess()", "0x9f927be7": "getNextCall(uint256)", "0xd8162db7": "lockedUntilBlock()", "0x36dfe260": "payOneTimeReward()", "0xc5b1a53c": "deposit(bytes16[],uint64)", "0xc2b6b58c": "isClosed()", "0xc88cc6ac": "getCertification(address)", "0x77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", "0x70ab8ba8": "creditUpdate()", "0xd3ea3322": "testBuildTokenSystemCost()", "0x72388610": "paybackAll()", "0xca6d56dc": "addMember(address)", "0x0994a0a0": "DSTokenTest()", "0xe53e04a5": "refillGas()", "0xc1d5e84f": "addNewUser(address)", "0x89ed0b30": "setOraclizeGas(uint32)", "0x02ba8742": "sendCoins(address,uint256)", "0xb0de1cb7": "publish(uint64,bytes,uint64)", "0x0e13b9af": "getValue(uint8,uint8)", "0xb3dfcdc3": "Contribution(uint256)", "0xa9b35240": "packageExists(bytes32)", "0xd1d3bb92": "testSetPkg()", "0x97297467": "checkAndVerify(bytes)", "0xe31bfa00": "next_id()", "0x9948e493": "calcMarketFee(bytes,uint256)", "0xd148288f": "setHoldingPeriod(uint256)", "0xc032dc30": "execute(uint256,address)", "0xdad99989": "burnCoins(address)", "0xb1999937": "leapYearsBefore(uint256)", "0xa6cbcdd5": "numSignatures(bytes4)", "0xaca66aec": "DVIP()", "0x20bf0c52": "Derived(uint256)", "0x693ec85e": "get(string)", "0x0411bca8": "getChallengeAnswerResult(uint256)", "0x61584936": "sealedBids(bytes32)", "0x2f1927cb": "prepareRoll(uint256,uint256,uint256)", "0xeaa1f9fe": "reqisterListening(address)", "0xb623f5e5": "checkSetCosignerAddress(address)", "0xa88c5ef7": "NextPayout()", "0x66ad484c": "newfirst_player(address)", "0xb4022950": "collectFeesInEther(uint256)", "0xbff0fbb8": "calculateMeat(uint256)", "0xd62b255b": "setOwner(address,string)", "0x2fd6d40b": "getBetValueByGamble(uint8)", "0x3b0506f7": "getVoteByAddress(address,uint256)", "0xbddd3a6b": "step7()", "0x67fbd289": "destroyTokens(uint256)", "0x9844347b": "createCertificate(bytes,bytes,uint256,bytes)", "0x5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", "0x8ba9f354": "testClearBitSuccess()", "0x48027610": "transferPaidOut(address,address,uint256)", "0x912de8de": "fixBalance()", "0x04509918": "scheduleCall(address)", "0x7cf0ffcb": "forceDivestAll()", "0x3b3b57de": "addr(bytes32)", "0xeb7c6f72": "step6()", "0xfe6f0d82": "testConstructorEvent()", "0x55b62dcf": "getThresold(uint256)", "0xfbae5e7d": "Investors(uint256)", "0x29e206bd": "forceDivestAll(bool)", "0x6a226a49": "addMessage(string)", "0x8e2a6470": "allocateShares(address,uint256)", "0xe6e7237f": "claim_time_victory(uint256)", "0x17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", "0x87fd0421": "TheEthereumLottery()", "0xc17e6817": "sendSafe(address,uint256)", "0xa5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", "0xb35893f3": "setExporter()", "0x1ceea715": "GetMyInvestFee()", "0xb78bd4a5": "breakCookie(string)", "0x05215b2f": "createStandardToken(uint256)", "0x2632bf20": "unblockMe()", "0x5292af1f": "sendBalance(address)", "0xc2e9fab3": "SubUser()", "0x6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", "0x4f896d4f": "resolve(uint256)", "0x16870257": "getTileDescription(uint8,uint8)", "0x3ef87414": "getRevisionCount(bytes20)", "0x747586b8": "setInt(int256)", "0x5714f6a1": "getTotalAvailableRelays()", "0x99154b49": "ARK()", "0x1efb17ee": "changeHouseAddress(address)", "0x354d7e40": "Payout()", "0x2da0d1ea": "etherSold()", "0xea46193e": "getEtherBalance()", "0x11fe773d": "memcpy(uint256,uint256,uint256)", "0x1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", "0x1c31f710": "setBeneficiary(address)", "0x0a4caed0": "getChannelByRank(address,uint256)", "0xf3125a1f": "deposit(address,uint256,bytes,uint256)", "0x00e46700": "setMinimumPassPercentage(uint8)", "0x92d282c1": "Send()", "0x89d59ee5": "createPersonalDepositAddress()", "0xbe1c766b": "getLength()", "0x70a08231": "balanceOf(address)", "0xae0a6b28": "signature(string,bytes32)", "0xb3485dca": "UpdatePrice(uint8,uint32)", "0xf8ec4bf2": "setAllowTransactions(bool)", "0x53d97e65": "setPrizes(uint32[])", "0xd1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0x96286cc9": "isTokenOwner(address)", "0x154af6b1": "sendShares(uint256,uint8,uint256,address)", "0xbe2430fe": "sendValues()", "0x57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", "0x8fd28bcf": "testFailAuthorityAuth()", "0x89ef40e7": "numberOfHealthyGenerations()", "0x23e9c216": "setBounty(address,string,uint256)", "0x71dd99fe": "BigRisk()", "0x1e9fcc77": "activateAllowance(address,address)", "0x561e91a1": "makeBet()", "0x32d2fb9f": "getRefRemainingTime(uint256)", "0x992c870d": "transferName(bytes,address)", "0x6b3fdc5a": "oraclize_setNetwork(uint8)", "0x2ea459b8": "claimThrone(bytes)", "0x33a99e04": "selectWinner()", "0x3b49a77b": "hasConfirmed(bytes,address)", "0xa352f1a8": "calcSHA3(bytes)", "0x4bb4b260": "cashAllOut()", "0xb89a73cb": "isShareholder(address)", "0xba5a2d33": "exitPool(address)", "0xddd41ef6": "transferDirector(address)", "0xa06cab79": "Registrar(address,bytes32)", "0x871113c3": "oraclize_query(string,string[1],uint256)", "0x1f0f711f": "discontinue()", "0x632f0ba6": "descriptionHashes(bytes)", "0x980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", "0x4ae8c55f": "getWwLength()", "0x82fc49b8": "setCosignerAddress(address)", "0xc4bd8ebc": "num_monsters()", "0x0381cb3b": "setRowcol(uint256,uint256[2])", "0x124eaee6": "Identity()", "0x3f4be889": "callContractAddress()", "0xef3a6031": "testBaseToken()", "0x954ab4b2": "say()", "0x1b855044": "getHash(uint256,uint256)", "0xd9d73887": "Diana()", "0x5103a5a3": "certify(address,bytes32)", "0x51560da9": "topDogInfo()", "0xf3ee6305": "removeCertificationDocument(address,bytes32)", "0x049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", "0xd8a8e03a": "move(uint256,address)", "0xc3c5a547": "isRegistered(address)", "0x06005754": "nameRegAddress()", "0xbe592488": "validateName(bytes)", "0x0eecae21": "draw()", "0xac3e7d24": "addChainyData(string)", "0xfd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", "0x7772a380": "isInGeneration(address,uint256)", "0xeb1ff845": "changeId(uint256,uint256,uint256)", "0x9cc9299e": "killSwap()", "0x1e2ca0f3": "updateLeftLottery(address)", "0x998446a8": "acceptRequest(uint256,bytes)", "0x8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", "0x9935935f": "setResolveHandler(bytes,address)", "0xcd4b6914": "getRandom(uint256)", "0xc08dd1dc": "IOU(string,string,uint8)", "0xbe4054b9": "commitReading(address,uint256,uint256,string)", "0xbc21ce9d": "Aggregation()", "0x6e173a7f": "storeBlockHeader(bytes,bytes)", "0x114d69b2": "setCRLaddr(address)", "0x3fa4f245": "value()", "0x69573648": "remove(bytes,bytes)", "0x7fee4ecb": "GAS_PER_DEPTH()", "0x591c515f": "append(string,string)", "0x727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", "0xc60ce271": "findNextMinute(uint256,bytes)", "0xd337616e": "resetLottery()", "0xdacaeb07": "pledge(bool,uint256)", "0xb29c2493": "token(uint256,string,uint8,string)", "0x61047ff4": "fibonacci(uint256)", "0x8f367001": "numTokensAbleToPurchase()", "0x12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", "0x67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", "0xe6c3b4ab": "testBalanceAuth()", "0xd526b9bd": "_allow()", "0x29de91db": "setMsg(address,uint256)", "0xd1cf113e": "multiAccessSetRecipient(address)", "0xc2412676": "Token()", "0x391f2e96": "InvestCancel()", "0xc0ae6a3a": "ultimateOutcomes(bytes)", "0x202d6eaf": "addInvestorsValue(uint256)", "0x30b9af98": "withdrawFunding()", "0xe80bd3e5": "addCertificationDocumentToSelf(bytes32)", "0xf4e36afd": "findThroneByNameHash(uint256)", "0x30677b83": "multiplierFactor()", "0x590528a9": "sellShares(uint256,uint8,uint256,uint256)", "0x01cceb38": "setExpiry(uint256)", "0x779beca0": "getNumOfSalesWithSameId(bytes)", "0xac940823": "betOnLowHigh(bool)", "0x06961560": "DAO(address,uint256,uint256,uint256,address)", "0xd42bf301": "doTriggerTryAuth()", "0xfa566ddd": "doAllowance(address,address)", "0x6677febe": "get_all_accepted()", "0xaa67c919": "depositFor(address)", "0xf28386bf": "Nexium()", "0x77e4fb04": "testFailNotEnoughValue()", "0x12b58349": "getTotalBalance()", "0xc0d2834b": "DataSource()", "0x3e82055a": "addSignature(uint256,bytes16,bytes)", "0xcff2fa42": "_returnFee(address,uint256)", "0xa056469a": "extractFeeLength()", "0xc98031be": "hintURL(int256,bytes32,string)", "0x6ebbe863": "updatePublishContract(address)", "0x08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", "0xc36af460": "getLatest()", "0xdb5b4183": "oracleOutcomes(bytes,address)", "0x0b5ab3d5": "destroyDeed()", "0xe1c7392a": "init()", "0x4ca1fad8": "addRequest(uint256)", "0x305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", "0x9077dcfd": "submitCoding(string,uint256)", "0x38fff2d0": "getPoolId()", "0x07bc6fad": "withdraw(address,uint256,bytes32,uint256)", "0xfbf58b3e": "transfer(string,address)", "0x1d8b70da": "order_received(string)", "0x0b3ed536": "claimDonations(uint256)", "0x6f374a12": "setBool()", "0x0ca35682": "recover(uint256)", "0x3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", "0xe6c1beb4": "prepend(address)", "0x776d62f6": "costs()", "0xe4690a0b": "popRequest()", "0x74eb9b68": "isAccountLocked(address)", "0x7d32e7bd": "transfer(address,bytes32)", "0xdf2f0a4a": "getDecisionBlockNumber(uint256,uint256)", "0xc494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", "0x446d5aa4": "getAttributes(address)", "0x4cdc6a73": "Marriage()", "0x677cee54": "SafeConditionalHFTransfer()", "0x7b48ba20": "testThrowDisownNotOwner()", "0x1288c42a": "Prism()", "0xe8b13c44": "getChainyTimestamp(string)", "0xe4c2db06": "getPreviousFile(bytes)", "0xf0586f0d": "doThrow(bool)", "0xc1b06513": "registerEvent(bytes32[])", "0x521eb273": "wallet()", "0x32254992": "getPrevHash(int256)", "0x1fd96b69": "ManagedAccount(address,bool)", "0xabf74a93": "pitFee()", "0xa480ca79": "collectFees(address)", "0xa0bde7e8": "getShareDistributionWithTimestamp(bytes32)", "0xff27c476": "shiftBitsRight(bytes,uint256)", "0x172d8a30": "setDirectorLock(uint256,uint256)", "0xf262de8c": "add_staircase(uint16)", "0x990f3f53": "computeResponseSecondHalf(uint256,uint16)", "0x26745909": "PRNG_Challenge()", "0xcacc24eb": "transferFromViaProxy(address,address,address,uint256)", "0x94f3f81d": "removeAuthorization(address)", "0x3f0ec70b": "RequestFactory(address)", "0xa2a8336f": "claimEtherSigner(uint256)", "0xaa5d4719": "getTransferable(bytes20)", "0x23cd7cd5": "Model()", "0x3fb0b2c9": "CancelRoundAndRefundAll()", "0xd5fa2b00": "setAddr(bytes32,address)", "0xa0f61310": "FakeRelay(bytes)", "0x4ea66c38": "buyinInternal(address,uint256)", "0xbe040fb0": "redeem()", "0xb845c9a2": "WEI()", "0x26a7985a": "getMaximumCallGas()", "0x06661abd": "count()", "0xc89f8f08": "testGetController()", "0x81baf820": "BlockScheduler(address)", "0x9801cb8e": "ProofOfExistence()", "0xeb7492d1": "testTotalSupply()", "0x3dfb4843": "renewDeed(bytes32)", "0xc3fa5f93": "BlockScheduler(address,address)", "0x7958533a": "meta(uint256,bytes32)", "0xa1a66e56": "deductFunds(uint256)", "0xaf92a693": "addRegistrar(address)", "0xb2aac51f": "lookupUser(string)", "0xd70cf105": "moveBalance(address,address,uint256)", "0x2afb21bc": "InvestWithdraw()", "0x6d09e2ec": "commitCurrency(address,uint256,uint256)", "0x7b1a4909": "transferETH(address,uint256)", "0x96c824a8": "createAccountFundContract()", "0xe0a70811": "restart(bytes20,bytes)", "0x22057bc7": "getAllRevisionBlockNumbers(bytes20)", "0x6af2da2f": "testKeyedHash()", "0x7f6d8955": "RegisterOne(uint32,address,address)", "0x65f27bea": "testSubBalanceFailsBelowZero()", "0xa2f16d80": "dexWithdrawCollectedFees()", "0xc179520c": "ManageAccount()", "0x2672b3e2": "SplitterEtcToEth()", "0xe839e65e": "query2(string,string,string)", "0x39f64b52": "calcTokenPrice()", "0x4ef5710a": "WatchNumberOfPlayerInCurrentRound()", "0x3017fe24": "callAPIVersion()", "0x2977b1b1": "testAllowanceStartsAtZero()", "0x531c1b33": "getOperatingBudget()", "0xb7f2f33c": "transferRightIfApproved(address,bytes)", "0x00873367": "comparisonchr(string)", "0x2a0d79ef": "totalSupply(bytes)", "0xa715ff59": "EtherandomProxy()", "0xd6ca8ccb": "disown(bytes20)", "0x6ad2a0b3": "buildContract(address)", "0x45596e2e": "setFeeRate(uint256)", "0x0e97cfdf": "placeOrder(uint256,uint256,uint256)", "0x9549355e": "oracalizeReading(uint256)", "0x8d7af473": "numberOfProposals()", "0x728af7ec": "getInterest(uint256,uint256)", "0x11b9fee8": "ForkChecker(uint256,bytes32)", "0xd850288b": "etherlist_top()", "0xf4dc2d21": "Deed(uint256)", "0xf8b11853": "getGenerationStartAt(uint256)", "0x7c7a52bf": "newChallenge(uint256,address)", "0xd2d4bd72": "getCrossRate(bytes,bytes)", "0xe9b93569": "OwnerGetFee()", "0xfb72d24e": "shift_right(uint64,uint256)", "0x112e39a8": "scheduleCall(uint256)", "0x6c494843": "multiAccessChangeOwnerD(address,address,address)", "0x313ce567": "decimals()", "0x9bac8602": "testFailAddBalanceAboveOverflow()", "0xa70a9ad7": "switchDeity(address)", "0x6a61e5fc": "setTokenPrice(uint256)", "0x990c8f79": "returnValue()", "0xa4136862": "setGreeting(string)", "0x0af4626d": "testRetract()", "0x5e11544b": "newPeriod()", "0xdc206e5f": "oraclize_query(uint256,string,string[])", "0xcaa648b4": "getTotalValue()", "0x20bfec70": "WatchFees()", "0x62a0b56b": "testUnset()", "0x42f6e389": "isModule(address)", "0x769796fe": "resetAction(uint256)", "0x402e6230": "getTotalGambles()", "0xe8a1c08f": "nibbleToChar(uint256)", "0x1aa3a008": "register()", "0x96d02099": "rsplit()", "0x83324e8c": "numGroups()", "0x72c7c85a": "minority()", "0xb8d94b95": "buildDSNullMap()", "0xe039e4a1": "getOwner(uint8,uint8)", "0x625cc465": "baseDonation()", "0x77372213": "setName(bytes32,string)", "0xa7dfc874": "unregister(bytes,address,uint256,bytes)", "0x37f4c00e": "anchorGasPrice()", "0xb2bfd948": "checkNumbers(uint8[3])", "0x512f1e64": "orderBookLength()", "0xafed762b": "toSlice(string)", "0xbb6a1427": "testThrowRestartEnforceRevisions()", "0x734d8287": "unclaimedFees()", "0xf295206f": "_unsafeSend(address,uint256)", "0x69d01268": "concatUInt(uint256)", "0x0494630f": "oraclize_query(uint256,string,string[4],uint256)", "0x13fc6ac2": "getEventData(bytes32)", "0xbff974e8": "getContentReplies(uint256)", "0x18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", "0xa87e7552": "isValid(bytes,bytes)", "0xb8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", "0x61461954": "execute()", "0xecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", "0x7cdbae63": "addRegistryIntoTagsIndex(address)", "0x1f4e996b": "challenge(bool)", "0x0eb0afa6": "createDebt(address,address,uint256)", "0x5f6a1301": "clearPending()", "0x305a762a": "getTicketsCountByBuyer(uint256,address)", "0x724ae9d0": "getMinInvestment()", "0x1e39499d": "scheduleCall(address,bytes,uint256)", "0x4f197ee7": "transferPackageOwner(string,address)", "0x7e3faec1": "GoldTxFeePool(address,address,bytes)", "0x8d68cf59": "sendFunds()", "0x83eed3d5": "queryN(uint256,string,bytes)", "0x15c91115": "pbkdf2(bytes,bytes,uint256)", "0xeb121e2f": "update(uint256,uint256[101][])", "0x5e44daf3": "vote(uint256,int256)", "0xac562666": "freezeCoin()", "0xb0166b04": "testTransferringMkr()", "0x631de4d6": "replace(address,address)", "0x4bd70ea3": "testFailGetUnset()", "0xf738e5ca": "ownerTakeProfit()", "0xc6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", "0x119aa5c8": "checkForward(bytes)", "0x541aea0f": "put(uint256,uint256)", "0x6386c1c7": "getUserInfo(address)", "0x4e209678": "testFailBreach()", "0xe9fe799e": "registrantRemove(address)", "0x2aee19c7": "testCreateWithNonce()", "0xa0ec4e09": "getUltimateOutcomes(bytes32[])", "0x4d9e4e22": "Etheria()", "0xa6b513ee": "finalPrice()", "0x82f0d875": "makeHash()", "0x78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", "0x177766e6": "getOptionChain(uint256)", "0xf1173928": "RemovedFromGeneration(address,uint256)", "0xea2ea847": "testChallengeFinalize()", "0xbd35d570": "GAS_TO_COMPLETE_EXECUTION()", "0x364ea9e7": "set(uint256,uint256,bool[],uint256[])", "0x17ff0caa": "WeatherBet(uint256,address,address,address)", "0x4e23a144": "fundUser(address,uint256)", "0x144267e0": "refundSecurity(address,uint256,uint256)", "0x31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", "0x2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", "0xde640e19": "Investment(uint256)", "0x9cb8a26a": "selfDestruct()", "0x9c43d950": "registration(uint256,uint256,uint256)", "0xe2fdcc17": "escrow()", "0xc618d15f": "ConvertNumbers(bytes5)", "0x8c98117c": "getBill(uint256,uint256)", "0x2d7788db": "rejectRequest(uint256)", "0xfaab9d39": "setRegistrar(address)", "0xa289673b": "fipsChangeOwner(bytes20,address,address)", "0x54d9d6f8": "findNextDay(uint256,bytes)", "0x008a745d": "claimDividendShare(uint256)", "0x6f4812e2": "testFailControllerInsufficientFundsTransfer()", "0x5e983d08": "setPrices()", "0x798974dd": "getNumProposals()", "0x4ca168cf": "register(bytes,uint256,address,string,uint256)", "0xa1e4d3c2": "MembershipRoster()", "0xd4065763": "returnRemainingMoney()", "0x0c4326a0": "getMajorMinorPatch(bytes32)", "0xeece1e1f": "scheduleShuffling()", "0x226685ee": "Visit()", "0x323082d7": "Vote(string)", "0x0b15650b": "randInt(uint256,uint256)", "0xc9cfac55": "refundCurrency(address,uint256,uint256)", "0xfe4a3ac9": "setExecPrice(uint256)", "0x6a0e605f": "MyToken(uint256,string,uint8,string,address)", "0xb549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", "0x85e68531": "revokeAccess(address)", "0x01991313": "scheduleCall(address,bytes4,uint256)", "0x0a6be0e7": "BalancedPonzi()", "0xf463edd1": "createDocument(uint256)", "0xa20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x560bb612": "SignatureValidator(address)", "0xf7654176": "split()", "0x48f05187": "scheduleCall(address,bytes4,bytes,uint256)", "0xf2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", "0x7bc0ff20": "setupExportFee(address,uint256)", "0xeb06e65e": "allowanceFromProxy(address,address,address)", "0xfe757fb5": "lastClaimPrice()", "0xa5d0bab1": "buyPartial(uint256,uint256)", "0xda7d0082": "isCertification(address,bytes32)", "0xe570be18": "DVIPBackend(address,address)", "0x54738157": "OwnerCloseContract()", "0xc1e5304a": "CreateNewDraw(uint256,bytes)", "0x0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", "0x0f7d6673": "Channel()", "0x54ea4000": "identify(address[])", "0x69307c80": "rotateBits(bytes,int256)", "0x78f0161a": "setGreyGreenPrice(uint8)", "0x23b872dd": "transferFrom(address,address,uint256)", "0x578bcc20": "reduceDebt(address,address,uint256)", "0x59e148fc": "getLastOfferId()", "0xb5299ca6": "giveMeat()", "0xae30d35d": "ARK_TROGLOg_1_00()", "0x2d2c44f2": "Vault()", "0xce19419b": "testThrowsSetNotUpdatableNotOwner()", "0xffcf21a9": "eventOracles(bytes,uint256)", "0xf46c50dc": "doFail()", "0x73b55eaf": "registerData(address,int256,bytes32,address)", "0x53770f9a": "isStateless()", "0x4d47feaa": "ShareholderDB(uint256)", "0x40b31937": "pledgeDecline(uint256)", "0x01cb3b20": "checkGoalReached()", "0x62e05175": "setMotionDB(address)", "0xf362d78f": "testBitNotEqualSuccess()", "0xd2531590": "CANCEL_EXTRA_GAS()", "0x9a92b7e7": "EthVenturesFinal()", "0x79b0797c": "AmIPlayer1()", "0x6241bfd1": "Token(uint256)", "0x94a1710d": "testNonOwnerCantBreach()", "0xb466b76f": "fresh()", "0x4a5dddd2": "proxyPurchase(address)", "0xc0a1a949": "x15()", "0xc3b8bfe5": "transferIfNoHF(address)", "0x4a7e049e": "getFullCompany(address,uint256)", "0x481b659d": "permitPermanentApproval(address)", "0x16ce8a69": "setBuilding(uint256,uint256)", "0x1593a8c7": "endLottery()", "0x078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", "0xfa3f1e99": "testBlobStoreRegistered()", "0x0b9e9817": "CanaryV7FastTestnet()", "0x6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x273bc3c9": "numberOfThrones()", "0x3c84f868": "set(int256,address,uint256)", "0x1ac61e8c": "testBlobCreate()", "0x5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", "0x0ccec396": "getNumReleases()", "0x6ac6205c": "addDataPoint(int256,uint256,bool,string)", "0x1d124fe4": "setUtils2(address)", "0x4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", "0x52a554a1": "voteBoardProposal(uint256,address,bool)", "0x745a8be2": "flip32(bytes)", "0xbac1e2e0": "testBitsAndSuccess()", "0x25fda176": "notify(address,uint256)", "0x3b8e6f2e": "balanceAt(address,uint256)", "0x60585358": "getByte()", "0xc853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", "0x741273d6": "testThrowRegisterContractAgain()", "0x8f2c44a2": "UnicornMilker()", "0x59d96db5": "terminate(uint256,string)", "0x483ba09e": "setBitcoinBridge(address)", "0x74fbbc86": "rate(uint256,uint256,string)", "0x83ea0620": "packageExists(string)", "0xd917deb5": "Donate()", "0x3fc6bc94": "payDAO()", "0x6558488a": "scheduleSetBool(address,uint256,bool)", "0x83e78b31": "bet(uint8,bool,uint8)", "0xeccb15bc": "SatPosition(int256,int256)", "0x7daa10ce": "getMyInfo()", "0x3e4565d2": "testErrorUnauthorizedNameRegister2()", "0x2143da91": "GameOfThrones()", "0xb29f0835": "doIt()", "0xdcc0ccf3": "Dao(address)", "0x70d53be5": "find()", "0x9a828a71": "oracalizeReading(uint256,string)", "0x6a6d31db": "externalEnter()", "0xf8b71c64": "rewardTo(address,uint256)", "0x0399c357": "assignFreeReadings(address,uint8)", "0x81ade307": "query(string,string)", "0xdb83694c": "getSaleInfo()", "0xa6bf3df0": "oraclize_query(string,string[2],uint256)", "0x29605e77": "transferOperator(address)", "0xf29d2f28": "setTokenHolder(address)", "0xa96f8668": "releaseTokens()", "0x8a3bc2bc": "iPropose(bytes,uint256,bool)", "0xd18611d6": "reactivate()", "0x7620a65b": "Publisher()", "0xa268b332": "testBitXorFailIndexOOB()", "0x6b1781b6": "Emergency()", "0x1003e2d2": "add(uint256)", "0x1209b1f6": "ticketPrice()", "0xe5a27038": "Pluton(uint256,string,uint8,string)", "0x22bc3b8e": "getArgument(uint256)", "0x47bdb7f4": "transferDisable(bytes20)", "0x13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", "0x3f3935d1": "confirmReverse(string)", "0xecb4136e": "NotAnotherPonzi()", "0x49e347ae": "getContents(uint256[],uint256)", "0x669dafe8": "toWei(uint256)", "0xc233e870": "isLatestPatchTree(bytes32,bytes32)", "0x7b789b3d": "agreement(bytes,bytes,bytes)", "0x682d3bb0": "pdfCertificateProof(bytes)", "0x42346c5e": "parseInt(string)", "0x3177029f": "approveAndCall(address,uint256)", "0x71ffcb16": "changeFeeAccount(address)", "0xc971442c": "getDBs()", "0x362e2565": "returnDeposits()", "0xe10e274a": "CrazyEarning()", "0x6d705ebb": "register(address,uint256)", "0xbe9a6555": "start()", "0x1ce624d6": "Crypted_RPS()", "0x2c4cb4be": "removeRegistryFromNameIndex(address)", "0x68742da6": "withdrawFunds(address)", "0x18f3fae1": "setOversight(address)", "0x061ea8cc": "countByOwner(address)", "0xd6d22fa4": "MetaCoin()", "0x85654c9c": "setMembershipRoster(address)", "0x8aa33776": "setMsgPrice(uint256)", "0x4dd850fb": "UfoPonzi()", "0x07e00bcb": "kissBTCCallback(uint256,uint256)", "0xa1b7ae62": "setdirectorName(string)", "0xb4d9cc3a": "profitDisperser()", "0x0f24f5c8": "doTransfer(address,uint256)", "0x8d72a473": "deductFunds(address,uint256)", "0x28f03554": "ProcessDividend()", "0x98391c94": "muteMe(bool)", "0x346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", "0xa42e36c6": "scheduleTransaction(address,bytes,uint8,uint256[5],uint256)", "0x21b36a08": "setFee(uint64,uint256)", "0xd94073d4": "PT()", "0xe8580dd4": "Survey(address,uint256,string,bytes32[])", "0x1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", "0xce8b7151": "isHF()", "0x9bee757b": "requestExecution(bytes,uint256)", "0x775dec49": "keccak()", "0x6673ce2b": "Results_of_the_last_round()", "0x9f87acd0": "exec(bytes32,bytes32,uint256)", "0x02394872": "getLastBlockHeight()", "0x615664ba": "Market()", "0x0d7af726": "addGame(address,string,string)", "0xf4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", "0x8ed67a44": "setPrice(uint16)", "0x84ebde52": "Under_the_Hood()", "0x5a28340a": "accessOperatingBudget(uint256)", "0x9a89ad65": "within6Confirms(int256,int256)", "0xdfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", "0x73f310df": "multiAccessRemoveOwner(address)", "0x4cbee813": "logout(string)", "0xd992bd5b": "testResultNotZero()", "0x05b34410": "creationDate()", "0xfed4614b": "funeral(bytes,int256)", "0x58cb7323": "MainnetETCSurvey()", "0xbb504317": "divest(address,uint256)", "0x82381c96": "WatchCurrentMultiplier()", "0xcce81927": "EtherDice(address,address)", "0x70961774": "getBlockCreatedOn()", "0x84a7b223": "Canary(address)", "0x9378a9e2": "setUInt(uint256)", "0xe4360fc8": "getFileListElement(bytes)", "0xe597f402": "create(bytes1,bytes32,bytes)", "0x95d5a1be": "SignatureReg()", "0x33ce7787": "transferInvestorAccount(address,address)", "0x46c52b1a": "blockHexCoordsValid(int8,int8)", "0x3092afd5": "removeMinter(address)", "0x30945443": "update(address,string,string)", "0xc37ff3d9": "sha(uint256,uint256)", "0x29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", "0x227f9633": "addOption(string,address,uint256)", "0x38eaf913": "setDirectorNode(string)", "0xab67aa58": "transferFrom(address,address,uint256,bytes)", "0x0ce3151c": "personUpdateRelation(uint256,string)", "0x216ef940": "proxyUpgrade(address,address,bytes)", "0x76bc21d9": "fireEventLog2Anonym()", "0xf004073a": "performAction(uint256)", "0xdba7ef7d": "Bookie(address,address)", "0xa0469b02": "inputToDigit(uint256)", "0x1d007f5f": "changeDAO(address)", "0x9dcb5c65": "resultsWeightedByEther()", "0x14ab9038": "setTTL(bytes32,uint64)", "0xf4d94699": "EndowmentRetriever()", "0xe74b9d11": "safeToSubtract(uint256,uint256)", "0xd7504385": "validateToAddress(address)", "0x57e2880d": "scheduleTransaction(uint256,uint256)", "0xe73a914c": "setDAO(address)", "0xc47bc007": "add_funds()", "0x37881810": "setCallbackAddress(address)", "0x686f2c90": "collectAllFees()", "0x278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0xfac34ff6": "throwFoo()", "0x6d98e9fc": "totalWei()", "0xb0bcc610": "scheduleTransaction(address)", "0x665bcc32": "ProcessGames(uint256[],bool)", "0x3fd1f232": "LookAtAllTheseTastyFees()", "0xdd727ea6": "runJackpot()", "0x0acc4382": "getMinDailyWithdrawLimit()", "0x46b207b8": "checkExpiry()", "0xde5d953a": "logSingleIndex(bytes,bytes,uint256)", "0xf504e0da": "load_level(uint16)", "0x4b63e601": "scheduleCall(address,uint256,bytes)", "0x4a71d469": "collectRev()", "0x80db79d9": "StructAndFor()", "0x090637a1": "GetPart(bytes,uint256)", "0xc003b082": "getMyPlayerID()", "0x00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", "0xdcf8113e": "campaignEndedSuccessfully()", "0xd1af8a5a": "LinkerExample()", "0x01fd89a4": "getFlags(bytes20)", "0xa39a45b7": "replaceOwner(address)", "0x0a3b1cd2": "setHotwallet(address)", "0x075fe877": "scheduleCall(address,bytes,uint256,uint256)", "0x3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", "0xa6403636": "resolve(uint8,bytes32,bytes32,bytes32)", "0x0b2acb3f": "add(address,bytes)", "0x6d522b19": "multiAccessChangeRequirementD(uint256,address)", "0x4311de8f": "ownerWithdraw()", "0xa99e7e29": "register(bytes,address)", "0x1ed6f423": "changeDescription(address,string)", "0xcd50d44f": "CheckRepresentment()", "0x4c0e207a": "__outputCallback(uint256)", "0xea8a1af0": "cancel()", "0x67387d6b": "testThrowCreateWithNonceExistingNonce()", "0xdc583801": "doubleyour5()", "0xb8077e28": "getTxOrigin()", "0xbfbc793c": "computeNameFuzzyHash(string)", "0x79baa8a9": "BasicIncome_CoFund()", "0xf4dbeb9d": "getCredRanksByContents(address,uint256[])", "0x227185d6": "Send1Get2()", "0x75c4aaa6": "addUnderDog(uint256)", "0xa7abc124": "activate(bool,bool)", "0x8df554b3": "Dividend()", "0x092b25e9": "setOwner(string,address)", "0x67af26fb": "transferOtherFrom(address,address,address,uint256)", "0x4bb278f3": "finalize()", "0xd1e15045": "sendBack()", "0xa4699cad": "resetWithdrawls()", "0xb61d27f6": "execute(address,uint256,bytes)", "0x9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", "0x1b3a8e6f": "directionCount(int256,int256,int256,int256)", "0xd499555b": "getFirstActiveDuel()", "0xb738169c": "betOnOddEven(bool,bool)", "0x411c4e72": "ModifyFeeFraction(uint256)", "0x06f36cc9": "helpBlue()", "0x9e65c7e5": "updateLatestRevision(bytes20,bytes)", "0xb47fa7e0": "DepositLimit(uint256)", "0xf1736d86": "m_dailyLimit()", "0x62ea82db": "bids(address)", "0x4166c1fd": "getElevation(uint8,uint8)", "0x8702735c": "setCapitol(uint256,uint256)", "0x3cc7790a": "GSI()", "0x83f6d9a4": "validateNameInternal(string)", "0x8d99b2eb": "endPoll()", "0x8bbda7e3": "setContent(string,bytes)", "0x52efea6e": "clear()", "0x2581c674": "testBitsOrFailIndexOOB()", "0x05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", "0xcbf0b0c0": "kill(address)", "0xf83d96c1": "InsuranceAgent()", "0x8dd5e298": "canEnterPool(address)", "0x2d580ef6": "add(address,bytes32)", "0xeeda149c": "Register(address)", "0xcc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", "0x428d64bd": "getShares(address,bytes32[])", "0x3c9a4baa": "requestOutput(bytes)", "0x8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", "0x419db07b": "generousFee()", "0x202e3924": "getOperation(uint256)", "0x5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", "0x7df23b6a": "ReleaseOracle(address[])", "0x9b2ea4bd": "setAddress(string,address)", "0x65093661": "newCommunity(address)", "0x33637d5a": "getPendingBlock(uint256)", "0x7910085d": "fipsIsRegistered(bytes20)", "0x730720b8": "testControllerValidTransfers()", "0xb0c80972": "setBalance(uint256,bool)", "0xdcf537b1": "multiply7(int256)", "0xdf5cc291": "get4(bytes,uint256)", "0x9ae4e388": "ChangeClientTokenAccount(address,bool)", "0x3121369d": "validateRequiredStackDepth(uint256)", "0x1747dfd4": "ContractPlay()", "0x598647f8": "bid(uint256,uint256)", "0xc368109c": "monster_hp(uint256)", "0x7fa22001": "assertEq0(bytes,bytes,bytes)", "0x8e280dce": "findNextYear(uint256,bytes)", "0x39d1f908": "actualBalance()", "0x8143f8a8": "totalGas(bytes)", "0xfe55932a": "setName(uint256,string)", "0x0fbf7151": "startsWith()", "0x4f20f35a": "payExpenses(address,uint256)", "0x705eeb90": "MultipleConstructorTest(bool)", "0x2df8e00d": "becomeMortal(uint256)", "0x645dce72": "updateRelease(uint32,uint32,uint32,bytes20,bool)", "0x1f6e5117": "getCallbackAddress()", "0xf51cbc72": "Level()", "0x64edfbf0": "purchase()", "0x35930e13": "setMinimalRewardedBalance(uint256)", "0x015e4f3a": "getConfigUint(int256,bytes)", "0x2c329e99": "Last_block_number_and_bloctime_used()", "0x6f3a7561": "SimpleAuction(address)", "0x6de00927": "GetUserRank(uint8,address)", "0xbe600276": "move(uint16)", "0x27d6c032": "unregister(bytes)", "0x4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", "0x7ba38916": "changeAdminFromBoard(address)", "0x3369dace": "flipTheCoinAndWin()", "0xfa8dc33a": "checkRecordExists(bytes)", "0xebaf7f2f": "returnReward(uint256)", "0xc88961da": "createKingdom(string,address,address,address)", "0x21970c0c": "pay_royalty()", "0xb4a5ef58": "updateDefaultTimeoutPeriod(uint256)", "0x57bcccb6": "revokePermanentApproval(address)", "0xd1d1c8ae": "ConvertNumbers(bytes)", "0xc1c0e9c4": "exec()", "0xcc131be1": "CreateNewDraw(uint256)", "0x75f96ead": "Guess(uint256)", "0x8a5fb3ca": "currentFeePercentage()", "0x550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", "0xa6780857": "fireEventLog0Anonym()", "0x2d0104a5": "updateFirstDuel1(uint256)", "0xcbf1304d": "balances(address,uint256)", "0xdda9939c": "Store(address[])", "0xf41bfa9e": "mint(int256,uint256,string)", "0x044215c6": "token(uint256)", "0x1f903037": "getBytes32()", "0xa6f9dae1": "changeOwner(address)", "0xf9391d24": "AllPayAuction()", "0xabebb7f3": "MarketsContract()", "0x9e1e6528": "uncertify(address)", "0x81788e2b": "addAllowedAddress(address)", "0x4f44728d": "ownerChangeOwner(address)", "0x3da0ac79": "compare()", "0x96e438a1": "reclaimDeposit(uint256)", "0x5fe22c8b": "testFailTransferWithoutApproval()", "0x6835f32c": "build(bytes)", "0x5cac8b27": "amazing()", "0xad605729": "getParticipantCount()", "0xb6294bde": "AdminGetFee()", "0xec81e22e": "returnmoneycreator(uint8,uint256)", "0xc535165f": "revealAndPayout(bytes,bytes)", "0x6e0bd282": "destroy(bytes32)", "0xdda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", "0xd4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0xd2602930": "RockPaperScissors()", "0xa08b3367": "EC()", "0x92d66313": "getYear(uint256)", "0xe49dcee9": "fixTokens()", "0x36555b85": "add(string,uint256)", "0x25010816": "get_length(uint256,uint256)", "0x610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", "0x79ce9fac": "transfer(bytes32,address)", "0x3ced516c": "descriptionHashes(bytes32)", "0xcf69df28": "getDataRequestLength()", "0x706dfe54": "getIssueState(uint256,bytes32)", "0x5af77fff": "Contract()", "0x66e5cb50": "stopTransfer(uint256)", "0x5f72f450": "check(uint256)", "0xf3b50c04": "rescind()", "0x57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", "0xaacc5a17": "getRandom()", "0x40275f85": "getPersonalDepositAddress(address)", "0x75700437": "query1_withGasLimit(uint256,string,string,uint256)", "0x6eb7b4c2": "underdogInfo(uint256)", "0x0f3eb785": "add(string,uint256,uint256,uint256)", "0xdc19266f": "Total_of_Players()", "0x9743dfc1": "jesterAutomaticCollectFee()", "0x6618b008": "cancelSellOrder(address)", "0x65538c73": "fireEventLog0()", "0xa4502cb8": "setExportFee(address,uint256)", "0x97bb2a63": "newvow(uint256,address)", "0xb400d149": "betOnNumber(uint8)", "0x030d406b": "entryPayout(uint256)", "0x1d71a1cd": "newIncome(string)", "0x85dd2148": "getSaleDate(bytes16)", "0x29917954": "exitPool()", "0xa25057de": "_transferToICAP(bytes32,uint256)", "0x24fc65ed": "getId(uint256,uint256)", "0x938199a5": "getDateOfLastPayment()", "0x04bb754c": "TradeFinancing()", "0xe37aa618": "distributeValue()", "0x547916ea": "finishRound()", "0xed01bf29": "budget()", "0x95ee1221": "isCancelled()", "0xfe777bcd": "etherForSale()", "0xffe302d1": "setPlz(string)", "0x891de9ed": "fromTLA(string)", "0x84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", "0xfb114f57": "oraclize_query(uint256,string,string[3],uint256)", "0xceebe28d": "repoInterfaceVersion()", "0xb0ad38c4": "buildCity(string,uint256[2],uint256[2])", "0xefa7e56b": "GameEnds()", "0xcc3471af": "maxClaimBlock()", "0xa7c5052e": "buildDSTokenRegistry()", "0x6831c169": "totalPayedOut()", "0x98f3b81a": "getShares(address,bytes32[],int256[])", "0x2d077ad0": "Latch()", "0x0ac28725": "requestTradeDeal(uint256,uint256,string)", "0xb311ee0c": "refundClaimDeposit()", "0xadd82871": "strEqual(string,string)", "0x7879e19e": "CollectAllFees()", "0x5bd74490": "regProxy(address,address)", "0xd2b0d554": "getDisclaimer()", "0x0b74edc6": "testFinalHash()", "0x6cf761d4": "getMinConfirmationsByAddr(address)", "0x4cedf74e": "get_party1()", "0x4adcbd19": "isThisHardforkedVersion()", "0xefdecd9b": "check_withdrawdao()", "0x996a8046": "__callback(bytes32,string,bool)", "0x7c9cd7df": "changeDeveloper_only_Dev(address)", "0x3f77b560": "newDocument(bytes)", "0x06b5f02d": "calcWinnings(uint256,uint256)", "0x0a2282ae": "JackPot()", "0x378a2178": "tallyVotes()", "0xd8915fc5": "DCAssetBackend(bytes32,bytes32)", "0x0f590c36": "emergencyFixGameResult(uint64,uint256)", "0xea4af029": "ConferenceCertification()", "0x769dc523": "GetCategoryNumber(bytes4)", "0xd5df7559": "removeDocument(uint256)", "0x749aa2d9": "endRound()", "0xd8e5ae6a": "Etheramid()", "0xc0576b73": "monsters(uint256)", "0x32fefb4c": "add_account(address,address)", "0x7d619d9b": "holdCoin(address,address)", "0x5b067cce": "testCreateCostMain()", "0x384b1393": "follow(uint256)", "0x4162169f": "dao()", "0x5d8227e6": "FactoryBase(string,string,string)", "0x6bf52ffa": "Vote()", "0xeb5904c0": "setProfitDistributionContract(address)", "0x366a68dc": "setBlockLock(uint256)", "0x80d9eaa6": "refCount()", "0x89b8b492": "read(uint64)", "0x46b5e202": "set_num_levels(uint256,uint256)", "0xd96de4ce": "AdminDrawError()", "0x47b47102": "bakeCookie(string)", "0x1d7b5baf": "setUint(int256,bytes32,string,uint256)", "0x0699d07d": "updateMaxVal()", "0xfa544161": "getOwner(address)", "0x638560cf": "registerBool(address,bool)", "0x7c25f260": "Government()", "0x24a852c6": "unset(bytes)", "0xa32f0f41": "testFailControllerUnapprovedTransferFrom()", "0x0968f264": "withdraw(bytes)", "0x5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", "0xc0f68859": "getMinimumGracePeriod()", "0x1bf6c21b": "USD()", "0x0fe234ed": "testSetController()", "0x05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", "0x673448dd": "isApproved(address)", "0x59dac714": "hashTo256(bytes)", "0x5a09f2f4": "setHouseFee(uint256)", "0x013cf08b": "proposals(uint256)", "0xeebf9808": "PiggyBank()", "0xadd43c59": "EtherTopDog()", "0xf909d60d": "getMinimumGasLimit()", "0xeb045789": "ChannelSeries(address)", "0x66d38203": "setup(address)", "0xe8641652": "strCompare(string,string)", "0x1959a002": "userInfo(address)", "0x737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", "0x127714c7": "getBudget()", "0x97daa043": "register(bytes,address,address,uint256,bytes)", "0xb5784f6f": "testMultiplePackages()", "0x0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", "0xe5782fd5": "setFeeStructure(uint256,uint256,uint256)", "0xa9f6def0": "HonestDice()", "0xeb7cdb56": "rankDown(uint256,uint256)", "0xb17b94c1": "testSystem()", "0xdd36e18b": "ContractStatus()", "0xee0dc478": "testSetEnforceRevisions()", "0x918359c6": "needsBirth()", "0xa5b1e13d": "settle(address,address,uint256,uint256)", "0x6b76484e": "swap(address,address)", "0x68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", "0x733480b7": "transferToICAP(bytes32,uint256)", "0x567dbf18": "__forward(address,uint256,uint256,bytes)", "0x73e1743a": "buildDSBasicAuthority()", "0x482961e1": "updateReading(uint256,uint256)", "0x4e6ba0a9": "testCreateCostMultisig()", "0x8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", "0x10142785": "assign(bytes,uint256,bytes1)", "0xfe97ee88": "hasPhone(address)", "0xe2861c8d": "cashOutProfit()", "0x0fa9ced4": "emergencyFuneral()", "0x8389f353": "setNumCities(uint256)", "0xdba1ac3d": "getEnforceRevisions(bytes20)", "0x1b4fa6ab": "getDefaultStackCheck()", "0x79be02af": "Read(address)", "0x70844f7a": "sendBadge(address,uint256)", "0x7bfaad96": "addNode(bytes,address)", "0x4d782cbc": "executeSellOrder()", "0xbe71248a": "payWinner()", "0x41304fac": "log(string)", "0x4f059a43": "getClaimAmountForBlock()", "0x6d2cb794": "airaTransfer(address,address,uint256)", "0x5a5383ac": "canExitPool()", "0xcabd27de": "Motion(address)", "0x433d4aab": "resolve(uint8,uint8)", "0x7d89ae63": "__findRef(string)", "0x4e1053cc": "RobinHoodPonzi()", "0x0220a5b4": "terminate(string)", "0x419ffa03": "fipsRegister(address)", "0x77a7e6be": "getRefTotal(uint256)", "0xed64bea4": "JamCoin()", "0x3cf885c4": "isBitSet(uint256,uint8)", "0xf2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", "0xe26c8434": "AdminStartDraw(string,bytes)", "0x13df7091": "mintAll(int256)", "0x8a46bf6d": "testFallback()", "0x29bed3bf": "EthereumRoulette()", "0xf869b11a": "declareVictor(uint256,uint256)", "0x45c41478": "getMarkets(bytes,address)", "0x90cf581c": "voteYes()", "0x9ec35352": "returnRandom()", "0x5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", "0x338a1379": "_setPackedBlockNumber(bytes20,uint256)", "0xdb641ab4": "Game_balance_in_Ethers()", "0xbc0e7adb": "testThrowsDisownNotOwner()", "0x302d350e": "firstChainedCallback(uint256)", "0x5af73f3f": "getMinimalBalance(uint256,address)", "0x4c488dac": "getChannelValidUntil(bytes)", "0xa1616429": "testBitOrSuccess()", "0xaa64c43b": "transferPool(address,address,uint256)", "0x78e97925": "startTime()", "0xa0355f4e": "decline(uint256)", "0x02556de3": "updateMajorTree(bytes32)", "0x01984892": "name(address)", "0xfad4b99a": "updateChannelMinimum(address,uint256)", "0x4f39ca59": "drop(bytes32)", "0x61591a7c": "personUpdateDOB(uint256,int256)", "0x17b3a34b": "_addIdentities(uint256,bytes32[])", "0x91d8b14e": "BuyTickets()", "0x1aadcc34": "convertGreyGreen(uint8,uint8)", "0x9a863892": "NewProposal(uint256)", "0xc5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", "0x85f8c16d": "claimHours(int256)", "0xa71f94c8": "scheduleSetUInt(address,uint256,uint256)", "0x7ef09476": "transfer(uint64,address)", "0x94bcdb4c": "Example2()", "0x37930615": "extend(bytes16[],uint64)", "0xfb09b1ac": "testBalanceOfReflectsTransfer()", "0x19a278b9": "getBAddress()", "0xc0a239e3": "valuePerShare()", "0xa039e3c7": "testSetNotTransferable()", "0x22593300": "Small(address)", "0xe21608be": "ReserveToken()", "0xc2985578": "foo()", "0xb463bcde": "testThrowsSetNotTransferableNotOwner()", "0x88d695b2": "batchTransfer(address[],uint256[])", "0x37b0574a": "isClassic()", "0x1da6822c": "testThrowsTransferEnableNotTransferable()", "0xdcfa9cc0": "testProxyCall()", "0x478aa69e": "unauthorizeUser(address)", "0x102accc1": "fireEventLog2()", "0xed62cf1f": "setCanCall(address,address,bytes,bool)", "0x15f73331": "invalidateName(string)", "0x73e30e49": "majorEventFunc(uint256,bytes,bytes)", "0x00c721ab": "setHand(uint256)", "0xf9e27106": "investmentEntryCost()", "0x4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", "0xb74e452b": "today()", "0xd3118a5a": "addDoc(string,string)", "0xc204f9f1": "_transferFromToICAP(address,bytes32,uint256)", "0xf50d3914": "resetFoundationtList()", "0xe67cdfb7": "moveOldUser(uint256)", "0x98eaca94": "inKissBTC(uint256)", "0xc633084f": "sendGreeting(address,string)", "0xde10f04b": "eraseNode(bytes32[])", "0xd50495f4": "addTransaction(bytes)", "0x96cff3df": "getMinimumCallCost(uint256,uint256)", "0xce373b95": "heroOfThePit()", "0x39e525f9": "resolveCallback(uint256)", "0x942b90d3": "getRewardTable()", "0xedca914c": "buyTicket()", "0x5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", "0x6c9c2faf": "getSupply()", "0xf1448e10": "requestExecution(bytes)", "0x0c08bf88": "terminate()", "0x08aba5aa": "setAccountBalance(uint256)", "0x2c46d8d5": "EndRound(uint256)", "0x3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", "0xf2f254c7": "getLatestMinorTree(bytes32,uint32)", "0x373a1bc3": "scheduleCall(address,bytes4)", "0x3a96fdd7": "compare(string,string)", "0x738ddabe": "getContentIndexedAccountCred(uint256,address,address)", "0x5acce36b": "getEndowmentBalance()", "0x1ca60aeb": "setMeltingContract(address)", "0x52375093": "m_lastDay()", "0x565a2e2c": "getBeneficiary()", "0x9d5c6061": "getMsgGas()", "0x41d31feb": "get_read_only_keys()", "0x796b89b9": "getBlockTimestamp()", "0x4a41e045": "getUint8(int8)", "0x38e48f06": "save(string)", "0x1cda37f2": "eraseRecords(bytes32)", "0xae978f08": "getLatestTweet()", "0x20909fa0": "communityCurrency()", "0xafbec8df": "TheGrid()", "0x1c14179a": "GavCoin()", "0x0b6142fc": "breach()", "0x3ab1e703": "roundMoneyDown3SF(uint256)", "0x414ceac0": "investorAddFee(uint256)", "0x82a62137": "activateAccount(address)", "0x4ca7fbd0": "updateTokenPriceWeekTwo()", "0x2551858e": "getFlags(bytes32)", "0x4ad07b0e": "oracleOutcomes(bytes32,address)", "0x60b431a4": "testGetSig()", "0xa5f8cdbb": "buyTicket(address)", "0x64aabe92": "tryExec(address,bytes,uint256)", "0xa6c01cfd": "isInGeneration(uint256)", "0x149c5066": "ChanceOfWinning(uint256)", "0xc068eae0": "player_collect_winnings(uint256)", "0x8129fc1c": "initialize()", "0xcf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", "0x3517a740": "getNodeParent(bytes)", "0xec6afc22": "oraclize_query(uint256,string,string[3])", "0x50944a8f": "setMembership(address)", "0x85b1423e": "returnAll()", "0xd95a2d42": "lendGovernmentMoney(address)", "0x347632e8": "getShareholderAdressByID(uint256)", "0xbb39a960": "trade(address,uint256,address,uint256)", "0x8abadb6b": "setAccountLevel(address,uint256)", "0xa502aae8": "getNextGenerationId()", "0xb5bfdd73": "addDSource(string,bytes1,uint256)", "0x28d3ad3f": "getPot(uint256)", "0x08933d11": "getJoinBlock(address)", "0x8383bfc8": "EscrowFoundry()", "0x2ca15122": "sign()", "0xf340fa01": "deposit(address)", "0x9ed93318": "create(address)", "0xa1c0539d": "scheduleCall(address,bytes4,bytes)", "0xced92670": "changeMultiplier(uint256)", "0xb2c652f3": "getMarkets(uint256[128])", "0x69b144eb": "testThrowsCreateNewRevisionNotOwner()", "0x16c72721": "forked()", "0x712ca0f8": "getOrder(string)", "0x0cf45ba5": "updateFirstDuel2(uint256)", "0x4173b181": "setWeiPrice(uint256)", "0x689b3e2d": "Moonraker(address,address)", "0x8691162a": "TlcCoin()", "0x432ced04": "reserve(bytes32)", "0x38178fbe": "addString(string,string)", "0x8f1327c0": "getRound(uint256)", "0xa9eed530": "reduceOrderQty(uint256,uint256)", "0x408938d0": "testUpdatePackageDb()", "0x56105a08": "DgxSwap()", "0xc43d0575": "scheduleCall(bytes4,uint256)", "0xdba21657": "askForEther(uint256)", "0xca3b5c91": "hasRelation(bytes,bytes,address)", "0xc71cbcf3": "recoverAccount(address,address)", "0xb010d94a": "canExitPool(address)", "0x0a16697a": "targetBlock()", "0xff1f7046": "requiresAuction(string)", "0x0b811cb6": "executeProposal(uint256,bytes32)", "0xbb8be064": "HardwareToken()", "0xe2b05077": "getSaleDate(bytes,uint256)", "0x1e9a6950": "redeem(address,uint256)", "0xd21b84ac": "createNewDAO(address)", "0xd644e356": "index(uint256,address,uint256,uint256)", "0xea27a881": "getMinimumEndowment(uint256,uint256,uint256,uint256)", "0x99a88ec4": "upgrade(address,address)", "0xc8e4acef": "playerByAddress(address)", "0x0b7abf77": "TOTAL_TOKENS()", "0xfb5d7376": "step4()", "0xc0aa18e7": "History()", "0xe2233ada": "smartDoor(address[])", "0xd6006e88": "send(address[],uint256[],uint256)", "0x95671958": "getFileListTail()", "0x16bac350": "overthrow(string)", "0x5cb18a6d": "fipsLegacyRegisterMulti(bytes20[],address,bytes)", "0x60116397": "Registrar(address,bytes32,uint256)", "0x60fe47b1": "set(uint256)", "0x5f8f0483": "buyBankerAgreementFromImporterBank()", "0x4c8cc20b": "toContentID(address,string,string,address,uint256)", "0x45ca25ed": "changeName(address,string)", "0xb21bce4c": "vote(bytes,bool)", "0x334dc700": "CanaryV7Testnet()", "0xc31d0031": "CrowdFundDAO(string,uint8,string)", "0xf3d91708": "isEligibleForUpgrade(address)", "0x0ee07836": "adjustDifficulty(uint256)", "0xf6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", "0xb2d37e95": "remove_order(uint32)", "0x691d58e7": "_applyRefund(uint256)", "0x1c2353e1": "isCertifier(address)", "0xcf158fe9": "scheduleTransaction(uint256,uint256,uint256)", "0x5d96ec65": "setAdministrator(address,string,bool)", "0x0651844e": "activateBalance(address)", "0x217311ac": "getWords(uint64)", "0xc127c247": "addMember(address,string)", "0x40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", "0xb633620c": "getTimestamp(uint256)", "0x5b764811": "_jMul(uint256,uint256,uint256,uint256)", "0xfe029156": "swap(address,address,uint256,uint256)", "0x31db4b95": "doTriggerAuth()", "0x203c03fa": "Coinflip()", "0x209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", "0xf10ae2ab": "__dig_then_proxy(uint256,address,bytes)", "0xd532e481": "activateFrozenAccount(address)", "0xe9a9c1b4": "get_party1_balance()", "0x8fcc9cfb": "setMinDeposit(uint256)", "0xe5c7e509": "testThrowTransferDisableNotEnabled()", "0x4e077f2a": "addGasEther()", "0xb7c93330": "ResourcePoolTester()", "0x82661dc4": "splitDAO(uint256,address)", "0x0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", "0x49041903": "getGame(uint64)", "0x0e1da6c3": "claimTimeout()", "0xc53ad76f": "Kardashian()", "0x8b7bcc86": "numWinners()", "0x1043dcdf": "LastIsMe(uint256,uint256)", "0x6cd22eaf": "updateAuthority(address,bool)", "0xb796a339": "addRegistryIntoOwnerIndex(address,address)", "0x308d6613": "getSignData(uint256,uint8)", "0xed88c68e": "donate()", "0xb719d1d0": "getRegInfo(address)", "0xac8d6030": "removeRequest(address)", "0x46f0975a": "signers()", "0x434cb64c": "startNextGeneration()", "0x6cb3d30a": "triggerTryAuth()", "0x3c067945": "fundBalance()", "0x26c7edaa": "flip4(bytes)", "0xf76f950e": "uint2str(uint256)", "0x860e9960": "BetPriceLimit()", "0xb0ecca8f": "LookAtLastTimePerZone(uint256)", "0xa35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", "0x3f74fecb": "DSTrueFallbackTest()", "0xdd2ad311": "scheduleCall(bytes,uint256)", "0x0ae5e739": "grantAccess(address)", "0x7d5fec5a": "setOwner(uint8,uint8,address)", "0x6a4b6aa5": "untrustedChildWithdraw()", "0x332f93a9": "nextPayoutGoal()", "0xc5ae6e0e": "Kernal()", "0x75438e49": "fillGas()", "0x51404cbe": "forceDivestOfOneInvestor(address)", "0xeacfc0ae": "Authorized()", "0xe59d843a": "Replicator(bytes,uint256,uint256,address)", "0xf00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", "0x02acdb44": "setAnyoneCanCall(address,bytes4,bool)", "0x2a24f46c": "auctionEnd()", "0x7ef1925b": "getShareRange(uint256,uint8)", "0x2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", "0x56b8c724": "transfer(address,uint256,string)", "0x33fd066d": "doBalanceFor(address)", "0xf29617da": "registrationDeposit(address)", "0x2b297f9e": "registerDao(address)", "0x79cce1c5": "getReleaseHashes(uint256,uint256)", "0xbed1b8b9": "convertToInt(string)", "0xef5daf01": "_dumpToCompany()", "0x23dc42e7": "query1(uint256,string,string)", "0xa53b1c1e": "setInt256(int256)", "0xb8cf14e7": "updateStatusPlayer()", "0x61aa8d93": "processFee()", "0x10f41715": "updateMintingData(uint256,uint256)", "0x048e2e94": "getAccountSize(address,uint256)", "0x7c47965e": "isInCurrentGeneration()", "0x420a8ac8": "NanoPyramid()", "0xe56556a9": "getPlayerID(address)", "0x5cd2f4d3": "approve(address,bytes32)", "0x8da4d776": "newCommune(address)", "0x4d30b6be": "balanceOf(address,bytes32)", "0x4a606c53": "_db()", "0x4956eaf0": "deploy(address,uint256)", "0xf1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", "0x63e38ff3": "id_for_nym(uint256)", "0x0e757a2e": "testSetAndGet()", "0x3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", "0xe548cf13": "betOnColumn(bool,bool,bool)", "0x2f1e4968": "makeNewProposal(string,uint256)", "0x0b467b9b": "revoke(bytes)", "0x74bfb965": "addNewProxy(address)", "0x02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", "0xfc1f7652": "_isBoardMember(address)", "0xefef39a1": "purchase(uint256)", "0x3ae9b510": "getLatestMajorTree(bytes32)", "0xc24924d6": "setQueryFee(uint256)", "0x839930ba": "getMinimumBet()", "0x8f5e9ca7": "acceptTOS(address,bool)", "0xd1100691": "BookCafe()", "0x839849c0": "changeBaseMultiplier(uint256)", "0x758971e8": "ownerTakeProfit(bool)", "0x2b785960": "testBitAndSuccess()", "0xd96a094a": "buy(uint256)", "0x379607f5": "claim(uint256)", "0x88e072b2": "checkTransfer(address,uint256)", "0x05fefda7": "setPrices(uint256,uint256)", "0xfc63d4fb": "order(bool,uint32,uint128)", "0x5718b994": "checkEvent(address,bytes,bytes,uint256)", "0x0c0662a8": "getLastWithdrawal()", "0xeb947f19": "ExampleResourcePool()", "0xb51c4f96": "getCodeSize(address)", "0x702fc7da": "ReviewModel()", "0xc6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", "0xb7760c8f": "transfer(uint256,address)", "0x32b12eac": "setFallback(address)", "0x0a4d564c": "TieUpLooseEnds()", "0xc3ad5ecb": "getTweet(uint256)", "0xe86afde0": "description(uint64)", "0xd0549602": "scheduleTransaction(address,uint256,uint256,uint256)", "0xbf2e694f": "getPreviousRequest(address,address)", "0x2525f5c1": "cancelBid(address,bytes32)", "0x19f02ceb": "set(address,address,uint256)", "0xf00acc47": "prepareRoll(uint256,uint256)", "0x29d28aad": "Broker(address)", "0x041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", "0xd81ab0c1": "invoke(uint256,address,address,bytes)", "0xab09ee80": "respond(uint256,uint256,uint256,uint256)", "0xd985f122": "RelayToolsTest()", "0xbe0638e4": "WealthShare()", "0x5263ba87": "getLatestPatchTree(bytes32,uint32,uint32)", "0xb7bae9b7": "exists(bytes,bytes)", "0x0b80f8d3": "invmod(uint256,uint256)", "0xbb4d7cd1": "tag(uint256,string)", "0xadf54e0c": "betOnLowHigh(bool,bool)", "0xed54746e": "lastAuction()", "0xf158458c": "getMinimumEndowment(uint256,uint256)", "0x5fcc2edb": "IndividualityTokenRoot(address)", "0x7cc48875": "Slots()", "0x2885b593": "extractMasterKeyIndexLength()", "0x8940aebe": "publicKey(uint256)", "0x0aece23c": "getFeeAmount(int256)", "0x72c3015c": "mint(int256,address,string)", "0xd6a619e3": "transferIfPuritanical(address)", "0xe30443bc": "setBalance(address,uint256)", "0x1277e24f": "payOneTimeFee()", "0xb958a5e1": "getPhoneByAddress(address)", "0x4e71d92d": "claim()", "0x3e0d4f4a": "ApproveContractorProposal()", "0x18160ddd": "totalSupply()", "0x150ad2a8": "owner_transfer_ownership(address)", "0xa2b5591c": "oraclize_query(uint256,string,string[],uint256)", "0x8d227fc0": "getPeriodInfo()", "0x1c0b6367": "processTransaction(bytes,uint256)", "0xf245b9e4": "DVIP(address)", "0x392327b5": "owner_set_fraction(uint256)", "0xadaccd74": "getNickname(address)", "0x2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", "0x89c19ddb": "concat(string,string)", "0xcef8d343": "buyShare(uint256,bool)", "0xd224118f": "PrepareDraw()", "0x4269d8ef": "_safeSend(address,uint256)", "0xda1441cd": "KudosBank(uint256)", "0x7ccfd45a": "removeSubUser(address)", "0xcc70bb1a": "publish(string,string,string,address)", "0x708f29a6": "getTotalPayments()", "0x05459f42": "WeeklyLotteryB(address)", "0x452d44dc": "checkBothNotNull()", "0x659fb968": "getOracleOutcomes(bytes32[],address[])", "0x3570c2ee": "PosRewards()", "0xbca86986": "testSetup()", "0xff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", "0x541d920c": "commit(bytes,string)", "0xa6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", "0x0f5381f1": "testUserCanIncreaseVersionNumber()", "0xf8f46b5f": "getCurrentMinerAddress()", "0xfcfff16f": "open()", "0x5a9b0b89": "getInfo()", "0xb8017221": "get_party2_balance()", "0x514dcfe3": "seller_accept()", "0x2004dff6": "Basics()", "0x0b6d8d52": "createDAO(address,uint256,uint256)", "0xf18d20be": "adminWithdraw()", "0x8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", "0x75949c13": "sendHalf(address)", "0x64ac2c4a": "WavesPresale()", "0x8946d33f": "SplitterEthToEtc()", "0x11400d8e": "priv_fastGetBlockHash__(int256,int256)", "0x7266f4a4": "X3()", "0xb189ad2a": "testErrorUnauthorizedAfterTransfer()", "0x31c2bd0b": "propose(address,bytes,uint256)", "0x100c8ada": "setCAmodulus(bytes)", "0x296ed88f": "testFailControllerInsufficientFundsTransferFrom()", "0xd5dbb1ad": "solveBet(address,uint8,bool,uint8,bytes32,bytes32)", "0x8a9ffb90": "transfer(string,string,bool)", "0x968908a3": "createMarketMaker(uint256,uint16,uint256)", "0x7b02b2c9": "sendMsg(address,string)", "0xa33dd801": "setTreasuryBalance(uint256)", "0x2f553d31": "isCreated(bytes32)", "0xf712d7ff": "testFailControllerTransferFromWithoutApproval()", "0xe51ff1fc": "iterateOverThings()", "0x60fd902c": "gnosisToken()", "0x2ef875fb": "div10(uint256,uint8)", "0x640f244b": "findSuitableGen()", "0x16cb9a01": "assertFalse(bool,bytes)", "0xe671f510": "onEtherandomExec(bytes32,bytes32,uint256)", "0x758b5172": "setPlayersPerRound(uint256)", "0x6423db34": "Reset()", "0x21958a50": "AddressSeries(address)", "0xfb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", "0xfb279ef3": "tip(uint256,address,uint256)", "0x338cdca1": "request()", "0x4e7ad367": "fireEventLog1Anonym()", "0xbd9335c0": "scheduleHangouts()", "0x4cb85356": "BranchSender(uint256,bytes32)", "0x1d7e1f68": "getContentRank(address,uint256)", "0x1a1df394": "Play(bool)", "0x468129a5": "setUnit(uint256,uint256,uint256)", "0xecb70fb7": "hasEnded()", "0x2d49ffcd": "getLocked()", "0x2e06c756": "post(string,string,string,uint256,uint256,address)", "0x73f93a48": "getAccountContentTip(address,uint256)", "0xf6a3d24e": "exists(address)", "0x5fbddcf3": "isLivingMonarch()", "0x6d568c43": "weiToCents(uint256)", "0xacf4280c": "buildDSApprovalDB()", "0xf3541901": "execute(address,bytes,uint256,uint256)", "0x88eb7af7": "_isHuman()", "0x48a490fb": "transferFromTreasury(address,uint256)", "0x5e03d393": "setAccountFrozenStatus(address,bool)", "0xfc687311": "betOn(int8)", "0x5bbfe9b6": "_myGroupHelper()", "0x5629c6d9": "doExecution(address)", "0xe3a9b508": "EnableDisableTokenProxy()", "0x9229c504": "new_mainPlayer(address)", "0x6f6c0244": "generateShortLink()", "0x33613cbe": "getBondBalance(address)", "0x4229616d": "collectPercentOfFees(uint256)", "0x4ed3885e": "set(string)", "0x043bb5e7": "getIdentities(address[])", "0xad2fea7c": "removeMinter(int256,address)", "0x0b7e9c44": "payout(address)", "0x17f5de95": "MAX_TOKENS_SOLD()", "0x50ea1932": "lookupISO3116_1_alpha_2(bytes)", "0x96f7807a": "getDuel2(uint256)", "0xa97ffd5e": "safeToSell(uint256)", "0x2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", "0x4c0bcfe5": "getTransferableBalance(address)", "0x0d17bc2e": "_disallow()", "0x0ca7395f": "returnFund(address,uint256)", "0x69fe0e2d": "setFee(uint256)", "0xfaf27bca": "greeter(string)", "0x0c7de59d": "edit(address,bytes,bool)", "0x16e27349": "getFeeRecipient(int256,int256)", "0x37751b35": "doTransfer(address,address,uint256)", "0x67fc1c6a": "validateProposedMonarchName(string)", "0xf59f99ee": "createNextGeneration()", "0x6be505f5": "selectWinner(bytes32)", "0xf6bd5893": "getGas(uint256)", "0x35b09a6e": "someFunction()", "0xb3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", "0x4f052648": "XaurumDataContract()", "0x117b4705": "retract(bytes32)", "0x2145e36c": "testBitSetFailIndexOOB()", "0x3d750b28": "found()", "0x1334a5e2": "eventCallback(uint8,address,address,uint256)", "0x3c2c21a0": "scheduleCall(address,uint256,bytes4)", "0x82996d9f": "rent()", "0xaf640d0f": "id()", "0xdaf22f4d": "identify(bytes32)", "0xfe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", "0xfc108f70": "GamblerPerAddress(address)", "0x89f4ed7a": "getLastTag(uint256)", "0xfcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", "0x43243797": "fundsOf(address)", "0x892c0214": "NumberOfCurrentBlockMiners()", "0xb5a6c525": "extractFrozenAccountLength()", "0x1acb2719": "getNextRequest(address,address)", "0xa89a4f09": "creatorBalanceChecker()", "0x1e83409a": "claim(address)", "0x5e1d7ae4": "changeFeeRebate(uint256)", "0xb7482509": "deposit(address,string)", "0xfb47a067": "_getRevisionBlockNumber(bytes20,uint256)", "0x5dcdddd1": "testSafeToAddFix()", "0x9aa26f06": "registerBytes32(address,bytes)", "0xd085e66e": "GetPart(bytes32,uint256)", "0x2cd78450": "activateExportFeeChargeRecord(address)", "0x35d129f6": "untag(string)", "0x1a7a98e2": "getDomain(uint256)", "0x877653f0": "_storeBalanceRecord(address)", "0x446fbcd1": "CredSign()", "0xfae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", "0xc1b056b0": "getNodeLeftChild(bytes)", "0x71f297cc": "XaurumToken(address)", "0xe3ffc9a3": "sendEtherToOwner()", "0xeccf1b29": "CrystalDoubler()", "0x57f4d5ec": "processDividends(address,uint256)", "0x75c589a0": "getMinimumCallCost()", "0x66772438": "computeResponse(uint16)", "0x7fefde53": "WillRegistry()", "0x8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", "0xed498fa8": "userTokens(address)", "0x5601eaea": "execute(uint256,uint256)", "0x8dd8596c": "sendDonation()", "0x15a0df43": "testThrowCreateNewRevisionNotOwner()", "0x0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", "0x157f8f51": "feePaid(int256,int256,int256,int256)", "0xf00aac7f": "ArrayRR()", "0x7b7d7225": "_approve(address,uint256)", "0x54ed7b6e": "addHash(bytes)", "0x235c002d": "transferOther(address,address,uint256)", "0x7057c20d": "CFD(address)", "0xd5563f31": "createAuction(uint256)", "0x46c3166f": "testThrowRetractLatestRevisionNotOwner()", "0x4420e486": "register(address)", "0x9a969768": "distributeProfits(uint256)", "0x464f37c9": "trustedChildRefund()", "0x5d495aea": "pickWinner()", "0xdf55b41a": "owner(string)", "0x10e6e06c": "vote(bool,uint256)", "0xe7faecec": "testFailInsufficientFundsTransfers()", "0xea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0xfff78f9c": "doThrow()", "0x9bb01b5f": "ElcoinDb(address)", "0xdc6dd152": "playerRollDice(uint256)", "0x5d0be9de": "softWithdrawRevenueFor(address)", "0xcd591822": "CanaryV7Fast()", "0x36e6b92e": "taskProcessedWithCosting(uint256,uint256)", "0x7bb6a4c6": "uno(uint256)", "0x03427656": "getDefaultSoftResolutionBlocks()", "0xc1fd4339": "createMarket(bytes32,uint256,uint256,address)", "0xeb95b7d5": "Bounty(address,address)", "0x4dd49ab4": "get(bytes,uint256)", "0xfa6d373c": "LeaderHash()", "0x8c8d98a0": "toTimestamp(uint16,uint8,uint8)", "0x9a79f4a8": "testFailHeaderInsufficientFee()", "0xdd90c403": "getAccountFeed(address,uint256,uint256)", "0x58e59c32": "get_entry(uint256,uint256,uint256)", "0xfd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", "0x0f4cf692": "numMessages()", "0x18433bb7": "DrawPrepare()", "0x1dea0c57": "getRealBet(uint256)", "0x7d60e343": "getFileListSize()", "0xd24ddcfe": "buyKissBTC()", "0xa055fe64": "_projectCommitNew(address)", "0x5f17114e": "TimeDeposit()", "0x85fe0448": "testThrowRestartNotUpdatable()", "0x901717d1": "one()", "0x528fd7b0": "manualPayExpiredDuel()", "0x85952454": "newOwner(address)", "0xf34c7010": "commitSecurity(address,uint256,uint256)", "0x3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", "0x67b830ad": "fillOrder(uint256)", "0x73fac6f0": "confirmReceived()", "0xf1b3f968": "getRaceEndBlock()", "0xf99fc046": "dEthereumlotteryNet()", "0xb409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", "0x9e920587": "testOwnedAuth()", "0x8e7cb6e1": "getIndex(uint256)", "0xe2f8a017": "payInstallment(uint256)", "0xac3e6b2f": "testSetNotRetractable()", "0x8fbc3ecd": "BUFFER()", "0x4b729aff": "buyNumber(uint256)", "0x166c4b85": "len(bytes32)", "0x6299f8cf": "stop(uint256)", "0xd767aee0": "bbb()", "0x29090202": "Resolver(address)", "0xcc2c2bcf": "MotionFactory(string,string,string)", "0xfd260dfc": "getCertificationDbStatus(address)", "0x30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", "0xd11f13df": "numberOfParticipantsWaitingForPayout()", "0xd05c78da": "safeMul(uint256,uint256)", "0x69953501": "setUtils(address)", "0xff7f5f2a": "EtherizationUtils2()", "0xde4b3262": "setBasePrice(uint256)", "0x6cf9cc58": "registerResource(bytes,uint256,bytes,string)", "0x7ac37d58": "ownerTransferEther(address,uint256)", "0x0121b93f": "vote(uint256)", "0x07b6f631": "testTestHarnessAuth()", "0x869b3f6a": "testThrowsRetractNotOwner()", "0x18253234": "ticketsAvailable()", "0x5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", "0x7102c138": "Standard_Token(uint256)", "0xce5566c5": "cash(uint256,uint256)", "0x16a25cbd": "ttl(bytes32)", "0x0c9fcec9": "setApproval(address,address,uint256)", "0xe6d95eb8": "DSAuthorized()", "0x34c0d654": "setPackageDb(address)", "0x0ee79fb3": "closeReferendums()", "0xe2cdd42a": "vote(uint256,address,bool)", "0xd3f297d6": "claimLiquidityReward()", "0xf37b437b": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256,uint256)", "0x2090cf8b": "consultBalance(address)", "0xc9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", "0x7993e5c2": "Devcon2TokenForTesting()", "0x268bb78e": "propose(address,bytes,uint256,uint256)", "0x2b16b56a": "setIndex(uint256,uint256)", "0x6d15f208": "reject(string,uint256,uint16,address,uint256)", "0xc4ff3614": "Wallet(address[],uint256,uint256)", "0xb47d89ad": "Details()", "0x0ae08793": "confirmAndCheck(bytes32)", "0x061e494f": "getBet(uint256)", "0x314e99a2": "abdicate()", "0xe487eb58": "getOwner(bytes20)", "0x7ee65635": "LookAtDepositsToPlay()", "0x9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", "0x4dfd1b02": "setUint8(int8,uint8)", "0x82fbdc9c": "register(bytes)", "0xa8b60b93": "ackMsg(uint256,string)", "0x081e806d": "PayOut(uint256)", "0x8bab8791": "testPkgUpdate()", "0xc262df45": "isKnownRequest(address,address)", "0x4123cb6b": "m_numOwners()", "0x62be3172": "Message(address,address,address,string)", "0x0d368fee": "deverify(address)", "0x5f1231ea": "getMemberInfo(address)", "0xa07daa65": "newRequest(uint256)", "0xa4406bcd": "placeSellOrder(uint256,uint256)", "0x5b7d47a9": "betOnColor(bool,bool)", "0x9c6034a7": "sendIfNotForked()", "0x26a4861c": "CROWDFUNDING_PERIOD()", "0xbaac5300": "createTokenProxy(address)", "0xfc72c1ef": "ERC20Base(uint256)", "0x316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", "0x0b590c6b": "SingularDTVToken()", "0x750e443a": "voteAgainst(uint256)", "0xfc7b9c18": "totalDebt()", "0x7ff9b596": "tokenPrice()", "0xd67cbec9": "release(uint32,uint32,uint32,bytes20)", "0x553cc48d": "Player(string)", "0x579cdf17": "getAdminName(address)", "0x7e1c4205": "query2(uint256,string,string,string,uint256)", "0x54107401": "declareLove(string,string)", "0xea4ba8eb": "getOutcome(bytes)", "0x9b5adea2": "setMinter()", "0x185061da": "undoIt()", "0x90c3a370": "AuctionMaster()", "0xbd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", "0xbc126ba1": "totalCents()", "0xa3747fef": "register(bytes,bytes)", "0x805210b7": "AmIPlayer2()", "0x4e05ded6": "ClassicCheck()", "0xec2ac54e": "deposit(address,uint256,bytes32,uint256)", "0x49c15bd9": "Purchase()", "0x87bb7ae0": "getTicketPrice()", "0xf2f03877": "commit(uint256,bytes32)", "0x167d3e9c": "SetOwner(address)", "0x5c634241": "CanaryV6()", "0xba15e52e": "getInfo(bytes20)", "0x06c1df7b": "checkBetColumn(uint8)", "0xf7bc39bf": "owns(address)", "0x27b752b8": "sha3HexAddress(address)", "0x5ac801fe": "setName(bytes32)", "0x1ae460e5": "isInPool()", "0x85c7a953": "WithdrawFullBalanceFromBankAccount()", "0x755b5b75": "setNumUnits(uint256,uint256)", "0xaefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", "0xfab43cb1": "getPongAddress()", "0x9e997121": "getConfigAddress(bytes)", "0xda2b7416": "testBitsAndFailIndexOOB()", "0xd0e30db0": "deposit()", "0x4a0d89ba": "getSwap(uint256)", "0x63a9c3d7": "verify(address)", "0x337b1cf9": "setIpfsHash(bytes)", "0xbaf00f76": "removeAllSubUsers()", "0x1b370abb": "getPreviousNode(bytes)", "0x741e2345": "registerMany(address,uint256,int256,uint256,bytes20,address,bytes)", "0xb3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", "0x73ffd969": "setMap(uint256,uint256,uint256)", "0x50b44712": "tickets(uint256)", "0x6a9d2afd": "playToWinTest(uint256)", "0x644998ae": "maintain(int256,uint256,uint256)", "0x2203ab56": "ABI(bytes32,uint256)", "0x9c67f06f": "registryStarted()", "0x93423e9c": "getAccountBalance(address)", "0x524e4e61": "testDistribution()", "0xa17042cc": "getMsgValue()", "0x4f9d719e": "testEvent()", "0xcbcaacab": "checkTransferWithReference(address,uint256,string)", "0x1bcf5758": "getOccupies(uint8)", "0x1d4b0796": "updateTxStats()", "0xd173707d": "hasPhysicalAddress(address)", "0xa54a2b8b": "testBlockHashFetch()", "0xc51bf934": "CEILING()", "0x0e54b872": "registerUser(string,address)", "0xba51a6df": "changeRequirement(uint256)", "0x6bd92f7c": "activateAllowanceRecord(address,address)", "0x90daaf67": "getMinimalDeposit()", "0x85d5c971": "logTransfer(address,address,bytes32)", "0x8b9e5385": "MeterSlock(uint256,uint256,address)", "0x7bcd7fad": "getRecordAtIndex(uint256)", "0x8e035ac1": "BetOnHashV82()", "0x5dbe47e8": "contains(address)", "0x21bb79fe": "luckyDogInfo()", "0xdd467064": "lock(uint256)", "0xa4beffa7": "increaseInvestment()", "0x8400c307": "isRecipientAllowed(address)", "0x0965bf7d": "processProposals()", "0x4b5dc8cb": "roundMoneyDown3SFExt(uint256)", "0x777feff5": "getCertificationDbAtIndex(uint256)", "0x9462eae5": "ChangeContractor(address)", "0x4c6d1d9e": "checkOutTag(string)", "0x09a399a7": "personAdd(string,int256,int256,string)", "0x31380c89": "TokenSale()", "0xd0bff051": "testSetBalanceDb()", "0x4c738909": "getMyBalance()", "0xb2310cc5": "payRequstedSum(uint256,uint256)", "0xda3c300d": "currentFee()", "0x6ed7c013": "move_monsters()", "0x4f073130": "takeOrder(bool,uint256,uint256)", "0x6860fd58": "Fees(uint256)", "0x214c9d50": "WritedrawStatus()", "0xf314bf46": "setReleaseDb(address)", "0x561a4873": "buyAd(string,string,string,uint256,uint8,address)", "0xf249cf19": "get_all_challenges()", "0xbbed7177": "getContentTimestamp(uint256)", "0xc864e760": "recordCommissionEarned(uint256)", "0x1896f70a": "setResolver(bytes32,address)", "0xfd35e71b": "entryPayoutDue(uint256)", "0x5a58cd4c": "deleteContract()", "0xb29b5366": "setRentable(bool)", "0xad5c613d": "purchase(bytes)", "0x6949a058": "sendOwnerEther()", "0xc03e382f": "calculateShare()", "0xf5bade66": "setDeposit(uint256)", "0x384e5018": "etherandomCallbackAddress()", "0xf06186c7": "testReality()", "0x677342ce": "sqrt(uint256)", "0x10e89b22": "remove_deal(uint32)", "0xf2b445ad": "rowround(uint256,uint256)", "0xd7ed7453": "redeemWinnings(uint256)", "0x92b4bb50": "rps()", "0x089327de": "MyToken()", "0x87ebd76c": "initContract(string,string,uint256,uint256)", "0xdbc45228": "newProposal(address,uint256,bytes,bytes)", "0x6b1feeeb": "get_my_sig()", "0x6837ff1e": "newContract(address)", "0x9f181b5e": "tokenCount()", "0x92ba4ba6": "GridMember(string,uint256,bool,address,address)", "0x45755dd6": "returnFunds(uint256)", "0xb4b9d1f1": "lookup(uint256,uint256)", "0x98024f18": "testThrowsTransferDisableNotEnabled()", "0x9e7b8d61": "giveRightToVote(address)", "0x8112821f": "EthVentures()", "0xe65d6b49": "getCommission()", "0x068c966b": "DrawDetails(uint256)", "0x9bb5239a": "CheckPrize(address,uint256)", "0xff08d2b0": "PayMiners()", "0x9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", "0x5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", "0xfe8b6642": "setEnforceRevisions(bytes32)", "0xe4cc1161": "seedWithGasLimit(uint256)", "0x5fd4b08a": "getName(address)", "0xaa51793c": "isLosingBet(uint256)", "0x31757f2e": "collisionCount()", "0xe1f5ebc5": "_projectAddNew(address,uint256)", "0x64228857": "getRevisionCount(bytes32)", "0x5ca3400c": "WithBeneficiary(address)", "0x39f4debc": "fillOrderAuto()", "0xcc2c5453": "add_sword(uint16)", "0x0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", "0x4d207d9a": "identify(address)", "0x3e83fe36": "getMyShares()", "0x8bb0faee": "setRef(string,string)", "0x38bbfa50": "__callback(bytes32,string,bytes)", "0xcee6f93c": "getResultOfLastFlip()", "0xbbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", "0x8e19899e": "withdraw(bytes32)", "0xd8389dc5": "hash(bytes32)", "0x8a4068dd": "transfer()", "0xea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", "0x8f4ffcb1": "receiveApproval(address,uint256,address,bytes)", "0xf67abd87": "entryDetails(uint256)", "0x67acd805": "lowerMinWager(uint256)", "0xec035393": "_getAllRevisionBlockNumbers(bytes20)", "0xbd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x112c7075": "ManualDeposit()", "0xd81a91e9": "get_party2()", "0xc52bd836": "setDappOwner(bytes32,address)", "0xf84f420b": "getRandomNumber(address,uint256)", "0xcfe9a7b8": "getPackageName(uint256)", "0xe97dcb62": "enter()", "0x48db5f89": "player()", "0x6bdbf8e6": "concat()", "0x3c959aca": "CheckTickets()", "0x3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", "0xac20902e": "NormalizeMoney()", "0x2fac1d36": "isReadyFor(address)", "0xdcaa5620": "findNextWeekday(uint256,bytes)", "0xf9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", "0xcd2cdd5b": "claimOwnershi()", "0xcfae3217": "greet()", "0xf5c8d71b": "forceMove(address,address,uint256)", "0x9718b524": "newTreasury(address)", "0xd0679d34": "send(address,uint256)", "0x1301ee02": "transferringETC(address)", "0x60eb2826": "Badge()", "0x0d0c2008": "TwoAndAHalfPonzi()", "0x17e1bfb7": "addInstitution(address,string)", "0x06394c9b": "changeOperator(address)", "0x80c951bf": "currentClaimPriceInFinney()", "0xd063f55f": "toLittleEndian(uint64)", "0x53f818d6": "checkBetValue()", "0x9205fbc2": "testAuthorityAuth()", "0x3e4c0c82": "player_1(uint256)", "0xe571c35e": "ReverseRegistrar(address,bytes32)", "0x24804cef": "Deed()", "0x622e88cb": "testBitsXorSuccess()", "0xdfca2f53": "LookAtPrizes()", "0xafa293d4": "getSource()", "0x755f99c2": "AddNewSmallContract(address)", "0x7137ed47": "setProxyContract(address)", "0x835b42fc": "testThrowUpdateLatestRevisionNotUpdatable()", "0xdd34e129": "PriceTest()", "0xedb27f4e": "switchWizard(address)", "0x1c5d9faa": "setNickname(string)", "0x4746cef8": "_confirmAndCheck(address,bytes32)", "0x189c94ae": "testFallbackStaticSig()", "0x0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", "0x2b25a7e4": "giveKudos(address,uint256)", "0x294f3d4d": "setUpLimit(uint256)", "0x2cce81aa": "getBlockHash(int256)", "0x4cd11943": "NewManualInvestor(address,uint256)", "0x7eaef50c": "over()", "0x8ac4e1d8": "TemperatureOracle()", "0xf108a7d2": "withdraw(uint256,address,string)", "0x00a676f9": "getExists(bytes32)", "0xb8d4efb5": "validate_percent(uint8)", "0xc7489441": "closeMarketMaker(uint256)", "0x3def449b": "FipsNotary()", "0x5687f2b8": "emitApproval(address,address,uint256)", "0xa9f8ec6c": "AlarmClockTipFaucet()", "0xd8e5c048": "scheduleCall(address,uint256,uint256)", "0x135217e7": "requires_depth()", "0x0aa46c12": "testClearBitFailIndexOOB()", "0x77d32e94": "ecrecovery(bytes32,bytes)", "0xace523c4": "createReferendum(string,string,uint256,uint256)", "0x5ca8bc52": "returnIt()", "0xdb318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", "0x623195b0": "setABI(bytes32,uint256,bytes)", "0xd7bb99ba": "contribute()", "0x2880ebe7": "underdogPayoutMarkup()", "0x4ce01d86": "totalBetValue()", "0x837a7ba5": "testThrowTransferDisabled()", "0x386fcda8": "testCreateCostToken()", "0x0e850239": "scheduleCall(bytes4,bytes)", "0x163aba3c": "getQueryFee()", "0x9941e3d0": "setCallAddress(address)", "0x23637e60": "votePrice(uint256,bool)", "0xde78e78a": "tokenLaunched()", "0xe3579ea5": "publish(string,string,address,uint256)", "0x59a547b0": "recordCommission(uint256)", "0x1aa86370": "updateXIPFSPublicKey(string)", "0x97fcb54e": "transfer_eth(address,uint256)", "0x05d2f92a": "check_depth(address,uint256)", "0xdfcbb794": "TrustFund(address,uint256,address)", "0xb7dd1d17": "getAllRevisionBlockNumbers(bytes32)", "0x75862df4": "TokenWithEStop(address)", "0xd22057a9": "register(bytes32,address)", "0x29d017b5": "TestWithConstructor(address,uint256[])", "0xd216d55d": "etherandomExec(bytes32,bytes32,uint256)", "0xfba06849": "fipsPublishDataMulti(bytes20[],bytes)", "0xa37fd390": "setHomeAdv(uint256,string)", "0xcf2e3efc": "GetBankAccountBalance()", "0x423e7e79": "_dispatchEarnings()", "0x74087040": "testBitsNotEqualSuccess()", "0x61d585da": "state(bytes32)", "0xcfb3a493": "getMyBounty(uint256)", "0x5afeb106": "Sqrt()", "0xf9e84395": "unexempt(address)", "0x5669c94f": "issueToken(address,string)", "0x19b05f49": "accept(uint256)", "0x3ae01f84": "USDOracle()", "0x8c172fa2": "getEvent(bytes32)", "0x4671e65e": "proposeEmergencyWithdrawal(address)", "0xc27d7721": "create(uint256[101][])", "0x5c52e51e": "processPayout()", "0xf7a0fa0a": "getShareDistribution(bytes)", "0x31a3a506": "closeFunding()", "0x465e759b": "testRestart()", "0xb60d4288": "fund()", "0x52200a13": "getNumHolders(uint256)", "0xf2c298be": "register(string)", "0x7bc25372": "UserCheckBalance(address)", "0x104d5fdd": "getPriceProxy()", "0x447cd682": "scheduleTransaction(address,uint256)", "0xa045fdff": "scheduleCall(address,bytes)", "0x4757f1d2": "redeemAllOutcomes(uint256,uint256)", "0x5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x5d3c1d4c": "_getRequest(uint256)", "0x416c8701": "beyond()", "0x63aea3e0": "PlayerInfo(uint256)", "0xa163a624": "Test()", "0xedede601": "testBalance()", "0x13651124": "WithdrawAmountFromBankAccount(uint256)", "0x893d20e8": "getOwner()", "0x90b5561d": "insert(uint256)", "0xf9983a12": "GetMyInvestmentBalance()", "0xb71c47a2": "surrender()", "0xf2a75fe4": "empty()", "0x804ba97a": "tryGet(bytes)", "0x6506b623": "rotateBitsLeft(bytes,uint256)", "0x3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", "0x73abecbb": "kill1()", "0xd5171523": "euroteambet()", "0x8e52cb51": "getRecordKey(bytes,bytes,bytes)", "0x7adbf973": "setOracle(address)", "0x4aa16737": "enter(uint8)", "0xf0cb556c": "updateLatestRevision(bytes32,bytes)", "0xbc8fbbf8": "nuke()", "0xc8e55708": "oraclize_query(string,string[1])", "0x7332b520": "getRewardsCount(uint256)", "0xf7c2b38c": "seconds_left()", "0xba344743": "_rawTransfer(address,address,uint256)", "0xcab5c0f1": "_incrementState()", "0xe044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", "0x76abc03b": "getShareDistribution(uint256)", "0xf0da84f8": "getTransferable(bytes32)", "0xcde99727": "calculateROI()", "0x155dd5ee": "withdrawFunds(uint256)", "0x8b543b80": "maximumCredit(address)", "0x340ddda6": "MeatConversionCalculator(uint256,uint256)", "0x524f3889": "getPrice(string)", "0x84054d3d": "cashout()", "0x856f3080": "WhatWasMyHash(bytes32)", "0x0386a016": "closeProposal(uint256)", "0xcebce72d": "token(uint64)", "0x7f480f9d": "processDividends(address)", "0x11d12402": "testEasyPropose()", "0x2f695053": "getCertifierAtIndex(uint256)", "0xd9fcb31f": "comm_channel()", "0x141c4e60": "challenge(uint256,address)", "0x4ff13571": "x2()", "0xa01bc729": "monster_attack(uint256)", "0x2fe9541f": "addIssueBounty(string,uint256)", "0x5503a659": "smallponzi()", "0xdfc765dc": "getMatchers_by_index(uint256)", "0x0b7623ba": "abs(int8)", "0xcde0a4f8": "setRegulator(address)", "0xf95b5a58": "getInitialAnswer(uint256)", "0x66b42dcb": "register(address,string,uint256,string)", "0x9f2ce678": "vote(bytes32,bool)", "0xb3559460": "getGenerationSize(uint256)", "0x5ddae283": "transferRegistrars(bytes32)", "0x59dc735c": "getClient()", "0xc258ff74": "List()", "0x4fb4bcec": "step5()", "0xed684cc6": "trigger(uint256)", "0x09405164": "getOpenCandidates()", "0x5c5d625e": "getProof()", "0x9f5f7c7f": "tokenSplit(address,address,address,uint256)", "0x0e38901a": "unvault(uint256)", "0x75160a20": "pay_royalties()", "0x15398afe": "compareNumericStrings(string,string)", "0xbbd8b602": "getOracleOutcomes(bytes,address[])", "0xebae35a6": "DAOTokenCreationProxyTransferer(address,address)", "0x15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", "0x830953ab": "claimAmount()", "0x26b916b4": "Set_Interest_Rate(uint256)", "0x1fb291cb": "registerInt(address,int256)", "0x505fb46c": "add(uint256,uint256,uint256)", "0xf00d4b5d": "changeOwner(address,address)", "0x034187fd": "setEthToCents(uint256)", "0x94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", "0xacbf98a7": "endsWith()", "0xfc2c3e08": "getIteration()", "0x6d7da0b1": "MyContract()", "0x1558ae4d": "Etheroll()", "0x42cbb15c": "getBlockNumber()", "0x29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", "0x2030f721": "num_objects()", "0xbc08afd9": "WebOfTrustToken(address,uint256)", "0x8cdfb1e6": "transferIfHF(address)", "0xa0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", "0x4e71e0c8": "claimOwnership()", "0xc1cc0775": "calculateFeeDynamic(uint256,uint256)", "0x50c42921": "replicate()", "0x25495998": "getMinimumConsumerDeposit()", "0x3d8e2947": "getFileAddress(bytes)", "0x1f794436": "getBlockHeader(int256)", "0x7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", "0xec0b4153": "getMoneyness(int256,uint256,uint256)", "0x01775f23": "_closeBooks()", "0x9d063ed8": "FIFSRegistrar(address,bytes32)", "0x083b2732": "callback()", "0xa1920586": "offer(uint256,uint256)", "0x19c47214": "getBlockVersion(bytes)", "0xa293d1e8": "safeSub(uint256,uint256)", "0xfe73e3ec": "preliminaryGameResult(uint64)", "0xf004b12b": "CrowdFund(uint256,uint256,address)", "0x54d03b5c": "changeFeeMake(uint256)", "0x9dbc4f9b": "participantDetails(uint256)", "0xd002462b": "setDeploymentFee(uint256)", "0xed2b8e0b": "getPoolRotationDelay()", "0xf697a0ed": "ppb(uint256,uint256)", "0x964c836c": "receiveExecutionNotification()", "0x5e0e2957": "dumpOut()", "0x33232609": "blake2b(uint64[],uint64[],uint64)", "0x88f53db1": "getDataRequest(uint256)", "0x0caf9d39": "testFailTooManyMembers()", "0x1f2e886c": "testControllerTransferTriggersEvent()", "0x586a69fa": "getMaximumStackCheck()", "0xf64fca2e": "getNodeId(bytes)", "0x8b95ec0c": "testAddBalance()", "0x32e7c5bf": "B()", "0x57e6c2f4": "isAuthorized()", "0xb2f2588b": "sortNumbers(uint8[3])", "0xe95bee59": "checkFormat(string)", "0xcef887b0": "storeBlockWithFee(bytes,int256)", "0xbe26733c": "Kill()", "0xe82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", "0xfd7ac203": "TestToken()", "0x6d052f56": "testBitsSetSuccess()", "0xf65c4d42": "Participate(uint256)", "0x432c685f": "trustClient(address)", "0xb0171fa4": "getCurrentGenerationId()", "0x03251a08": "setMin(uint256,uint256)", "0x58d3b617": "Notifier(string)", "0x15dacbea": "transferFrom(address,address,address,uint256)", "0x83f7b8e1": "getNumberOfPhotos()", "0xf1076703": "getVerificationId(address,bytes,bytes)", "0x752a3df6": "transferIfHardForked(address)", "0xaf93afdd": "Shipment(bytes,bytes,bytes,bytes,string,bytes,uint256,uint256,bytes,bytes,uint256,uint256,string,bytes,bytes,bytes)", "0x7fcf532c": "Withdrawal(address,uint256)", "0x72ea4b8c": "getNumInvestors()", "0x7df52ba8": "Arbitrate(uint32,uint32,bool)", "0xea25f24a": "TokenCreation(uint256,uint256,address)", "0xf74100e3": "getBits(bytes)", "0x63bfe3d8": "SkillBeatsLuck()", "0x80599e4b": "remove(string)", "0x6c050eae": "look()", "0xf9a794ad": "EtherLovers()", "0x501e8428": "getPart(bytes,uint256)", "0xf446c1d0": "A()", "0x2d67bb91": "World()", "0xeef547d7": "deal_details(uint32)", "0xa6cb9e64": "scheduleCall(address,bytes,bytes)", "0x659010e7": "m_spentToday()", "0x9b0b9c07": "acceptBankDraft()", "0x315e2f1b": "setTestString(string)", "0x69bcdb7d": "getCommitment(uint256)", "0xe1376da2": "updateFirstActiveGamble(uint256)", "0xc70d169d": "answerRequest(uint256,bytes)", "0xa094a031": "isReady()", "0x74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x1b5ee6ae": "mintToken(int256,address,uint256)", "0x7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", "0x5e6ad49d": "_setCosignerAddress(address)", "0xb2e85b67": "getPlayerStatus(address,uint256)", "0x30a24abd": "create(bytes4,bytes)", "0x9f0e3107": "get_timestamp(bytes32)", "0x33397816": "withdrawAccountBalance(address)", "0x0da3e613": "EthFactory()", "0xa5f3c23b": "add(int256,int256)", "0xc1829a14": "testFailTooFewConfirms()", "0x5322f0c5": "getChannelOwner(bytes)", "0x0fd1f94e": "firstClaimBlock()", "0x639d57f2": "testGetBitSuccess()", "0xd3aa22c7": "transferTLA(string,address)", "0x86314af9": "BetOnHashV84()", "0x3059ac30": "Escrow(address,address)", "0x0efafd01": "getPlayerGainLossOnLastFlip()", "0x49bf66d3": "addRegistryIntoNameIndex(address)", "0x3af39c21": "undefined()", "0xb660d77c": "switchMPO(address,address)", "0x0fdb468f": "fee(uint64)", "0x72479140": "CreateTicket(address,uint8,uint8,uint8)", "0xe79a198f": "unregister()", "0x688dcfd7": "setProofType(bytes1)", "0xfb9a4595": "GitHubBounty()", "0xd02a9889": "getDateOfFirstPayment()", "0xca35271c": "numDebtors(address)", "0x08714bfa": "TestContract()", "0x16d960b5": "createThing(bytes32[],bytes32[],uint88)", "0x17961d0f": "ord()", "0x62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", "0xbba91ea7": "getHomeadvIndex(uint256)", "0xb45105b2": "post(string,address,string)", "0xa7e25683": "testShortOutput()", "0xa068e8d3": "convict(uint256,uint256,uint256,uint256)", "0x09a69f57": "getRewardAmount()", "0xe7334156": "processNextDeposit(address)", "0x62ee6d29": "changeHashtoLowOrHigh(uint256)", "0xa80d4e9a": "EtherAuction(uint256)", "0x18489f50": "thingExist(bytes32[])", "0x5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", "0x9a777d5d": "buyCoins()", "0x36344022": "testAuthorizedTransfer()", "0x8b863095": "setContractorProposal(uint256,bytes)", "0xd10e99fe": "mint(int256,bytes32)", "0x12c82bcc": "sendRobust(address,uint256)", "0x0bf75567": "voteSuperQuorum(uint256,bool)", "0xf5f6ea26": "EthOne()", "0x14918f5e": "performInitialWithdrawal()", "0xdf32754b": "owned()", "0x1632070c": "setRewardDivisor(uint256)", "0xe50a3bb1": "oraclize_query(string,string[],uint256)", "0x9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", "0x3b751f7f": "claimThroneRP(string)", "0xd55ec697": "upgrade()", "0x43703b0e": "getEventData(bytes)", "0xd1bf9aba": "nextRune()", "0x76849376": "addNode(bytes32,address)", "0xfd958695": "isAlphaNumeric(bytes1)", "0x9fa5e5d5": "setARKowner(address)", "0x6e2cde85": "drawPot(string,string)", "0x4d5b080c": "scheduleTransaction(uint256,address,uint256)", "0xf1e4a540": "unsetCoordinator()", "0x364f4896": "emission(address,address,uint256,uint16,uint16)", "0x9183fd01": "getSeedPrice()", "0x9832ee65": "resultsWeightedByTokens()", "0xdd5244b4": "testTryProxyCallWithValue()", "0xec2ec781": "testFailGetUnsetToken()", "0x7db9743b": "Registry()", "0x1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", "0x1ba326c4": "calcShare(uint256,uint256,uint256)", "0x3ced842b": "make_offer()", "0xea295ec2": "calcRevenue(address)", "0x3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", "0x477bddaa": "setContractAddress(address)", "0xed180443": "getUint256(int256)", "0xee725d44": "toChannelID(string)", "0xa4898fd5": "deployContract(address)", "0x75ee85bd": "salsa20_8(uint256,uint256)", "0xbe7c29c1": "getNewDAOAddress(uint256)", "0xfe01f1ff": "TokenTester()", "0x6103d915": "Winners(uint256)", "0xa30b5c69": "AttributeModel()", "0x81064e2d": "getCreditorAmounts()", "0x23584a21": "initStats(string,address,uint256)", "0xe2894a8a": "OwnerAnnounce(string)", "0xa84c5330": "createNewRevision(bytes20,bytes)", "0xb742398b": "trade(address,uint256,bytes,address,uint256,bytes)", "0x3211bb90": "OwnerAddFunds()", "0xa0befa94": "getStake(uint256,uint256)", "0x6dc3edcf": "executeExecutable(uint256,uint256)", "0x17e875e3": "Transparancy()", "0x6939864b": "lotteryState()", "0x3b107682": "DualIndex()", "0x51b3d7b9": "_transferWithReference(address,uint256,string)", "0xdf7cec28": "cancelBid(bytes32)", "0x1e74a2d3": "getMinimumEndowment()", "0x39b333d9": "Play(uint8,uint8,uint8,uint8)", "0xcbd08c8c": "config(uint256,uint256,uint256,uint256)", "0xca6ad1e4": "setCustomGasPrice(uint256)", "0x510f44cb": "TestFactoryUser()", "0xcee6ee38": "aEthereumlotteryNet()", "0x11610c25": "bet()", "0xb73405a9": "roundMoneyDownNicely(uint256)", "0xb8851fea": "endDateStart()", "0xa4325485": "getCreatorBalance()", "0x2c181929": "getChainWork()", "0xffb4c857": "_confirmAndCheck(bytes32)", "0x9e66cd38": "free(uint64)", "0x44e43cb8": "depositRevenue()", "0xa553a597": "configure(uint256,uint256,uint8,address)", "0xc47f0027": "setName(string)", "0x565a2ecf": "classicTransfer(address)", "0x1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", "0xa5ebf389": "getMoneyTotals()", "0x7f445c24": "subRegistrar(string)", "0x9ad4f98e": "BlocksureInfo()", "0xd6b4ec12": "getDailyWithdrawalLimit()", "0xe0886f90": "at(uint256)", "0x5dc77e26": "andThen(string,address)", "0xe7d50e5c": "FarmShare()", "0x3f2965f0": "registerSeller(address)", "0x85b73d3c": "testCreateNewRevision()", "0x49437210": "getUpdatable(bytes32)", "0xe1a9109d": "setSeedPrice(uint256)", "0x95978868": "strConcat(string,string,string,string,string)", "0x511b1df9": "addr(string)", "0xc5b1d9aa": "newRound()", "0xecf6eb22": "setConfigAddress(bytes,address)", "0x9a9c9c53": "DepositToBankAccount()", "0x27ea6f2b": "setLimit(uint256)", "0xd2dc0869": "add(string,uint256,string,string,address)", "0xc86a90fe": "sendCoin(uint256,address)", "0x5dfc2e4a": "noop()", "0xd81e8423": "get(address,address)", "0x4cad42d3": "testWager()", "0xd120a284": "getBytesFromNumbers(uint8[3])", "0x991ffd4e": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8,uint256)", "0x60c311fd": "doBurnFromContract(address,uint256)", "0xbb6a0853": "GreedPit()", "0xc27b2c2d": "collectEarnings()", "0x446294ad": "multiAccessGetOwners()", "0x5bec9e67": "infinite()", "0x47e7ef24": "deposit(address,uint256)", "0x8d216186": "roll(uint256,bytes32)", "0xdf300b46": "getThing(bytes32[])", "0x5a6c787e": "updateWithMPO()", "0x1f2dc5ef": "divisor()", "0x421aeda6": "Set_your_game_number(string)", "0xba1162d7": "getFmLength()", "0x853255cc": "sum()", "0x20768ee8": "getProposalID()", "0xf5c57382": "nameOf(address)", "0x4e417a98": "callData()", "0xc90d080a": "registerEvent(bytes)", "0x0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xe420264a": "g(uint256)", "0x8a00a82f": "withdrawRewardFor(address)", "0x06638e92": "GetNumbersFromHash(bytes32)", "0xf63da25b": "Emailer()", "0xc01706dd": "getContentByRank(address,uint256,uint256)", "0xe1108706": "rfind()", "0xffd10e07": "enterPool(address)", "0xc4254c7b": "CoreWallet()", "0x30e0789e": "_transfer(address,address,uint256)", "0x992ae976": "isSafePunctuation(bytes1)", "0x4afce471": "test_requires_depth(uint16)", "0xda7fc24f": "setBackend(address)", "0xeb7402f5": "multiAccessHasConfirmed(bytes32,address)", "0x6c1a5b8c": "TOKEN_TARGET()", "0xb3a2a999": "nextWithdrawal(bytes16)", "0x4a420138": "scheduleHeartbeat()", "0xb1233451": "setTerm(uint256,string)", "0x266710ca": "manualUpdateBalances_only_Dev()", "0x98866c1a": "personUpdateDOD(uint256,int256)", "0xaa6be303": "debtors(address)", "0xda5c0a7c": "testDisown()", "0x8757a2cd": "test_depth(uint256,uint256)", "0xe1bedf2a": "AlarmTester(address)", "0x5dcbac7a": "registerBytes(address,bytes)", "0xa587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", "0xc3da42b8": "c()", "0x4b8772c1": "buyUnit(uint256,uint256)", "0x67f12ecf": "validate(address,uint256,uint256[101][])", "0x0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", "0x32829a23": "OpenBankAccount()", "0xdea06188": "NumberOfBlockAlreadyMined()", "0x61e539da": "testFailWrongAccountTransfers()", "0x8a3e44d4": "assetMoveInformation(address,address)", "0x1327d3d8": "setValidator(address)", "0x207c64fb": "validate(address)", "0x80acaafb": "profitDistribution()", "0x90b98a11": "sendCoin(address,uint256)", "0x8b147245": "update(bytes32)", "0x920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", "0x6f698fb5": "setMinimumQuorum(uint256)", "0xac5e81a9": "historyPayout(address)", "0x70d084c0": "SingularDTVCrowdfunding()", "0x67ce940d": "getOverhead()", "0x7a791524": "setNextFeePercentage(uint8)", "0xd6d902c4": "claimThroneFor(bytes,address)", "0xc71e48d6": "setOutcome(bytes32,bytes32[])", "0xef41e06f": "testThrowSetEnforceRevisionsNotOwner()", "0x70be4ffa": "testErrorUnauthorizedSetPackage()", "0x6d12301c": "getBetValue(bytes32,uint8)", "0x4e69d560": "getStatus()", "0x55234ec0": "remaining()", "0x5cfd8c24": "ResetPonzi()", "0xe29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", "0xbd119967": "add_rating(uint256,uint256)", "0x966acb38": "testThrowTransferNotTransferable()", "0x5c665f89": "getFunds(address,bool)", "0xa59d6986": "recoverLostFunds()", "0x403abbc7": "updateFirstActiveGamble()", "0x0230a07c": "releaseDeed(bytes32)", "0x2d116186": "deityBalance()", "0x602acca1": "InchainICO(address[],uint256)", "0xd393c871": "register(string,address,uint256)", "0xe0fe075e": "payoutReady()", "0xf3e3c629": "testBalanceOfStartsAtZero()", "0x48cd4cb1": "startBlock()", "0x669459a7": "removeRegistryFromOwnerIndex(address)", "0x74d89c47": "testUpdateNameDb()", "0x182db370": "getWhatHappened()", "0xf363441f": "getCreatorDotBalance()", "0x6896fabf": "getAccountBalance()", "0xb29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", "0x3023d0c4": "Ethstick()", "0x1077f06c": "makeClaim(uint256)", "0x8a519fb9": "BlockChainEnterprise()", "0xbffbe61c": "node(address)", "0xe20bbd8d": "RecoveryWithTenant()", "0x03bda14e": "raiseMaxNumBets(uint256)", "0xe1041d86": "__throw()", "0x3d79d1c8": "bal()", "0xbd3f0965": "AiraEtherFunds(string,string)", "0xc388cca6": "testBitAndFailIndexOOB()", "0x921f98bb": "resolveFailVote()", "0x4bbb216c": "_target(address)", "0x10922cc1": "testTransferCost()", "0xeceb2945": "checkProposalCode(uint256,address,uint256,bytes)", "0x3df4ddf4": "first()", "0x21a49ec2": "LCoin()", "0x6d1f00a6": "ThroneMaker(uint256)", "0xcaed4f9f": "DataService()", "0x5cff876b": "carrotsCaught()", "0x3a7fb796": "mintGreen(int256,address,uint256)", "0x370b6939": "AdminSetDrawer(address)", "0x2d9a37d3": "getMaxPayout()", "0x739f888c": "setNewEstimate(int256,int256)", "0x04dd69fa": "getGenerationIdForCall(address)", "0xb764e273": "failSend()", "0xd4dfadbf": "getMarket(address)", "0xa0e67e2b": "getOwners()", "0x2d592a34": "sellKissBTC(uint256)", "0x8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", "0xfcc6b5d5": "fillTheirOrder(address)", "0x61649472": "getPoolFreezePeriod()", "0x3dd297da": "safeMultiply(uint256,uint256)", "0x5d3278f0": "LooneyFifty()", "0x7399646a": "theRun()", "0x3e450fff": "adminDeleteAccount()", "0x93cc9162": "taskRejected(uint256,uint256)", "0xbc5d0f65": "beginExecution()", "0x1934d55a": "isPermanentlyApproved(address,address)", "0xf1cff4b5": "testBitsNotSetSuccess()", "0xf240f7c3": "dispute()", "0xf6d5959b": "getActionStatus(uint256)", "0x0f23cbaa": "recycle()", "0x74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", "0x0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", "0xa6afd5fd": "getBets()", "0x84ad6ff3": "ReversibleDemo()", "0x62b3b833": "createCoupon(string)", "0x523ccfa8": "isKnownCall(address)", "0xacc8cb18": "pushTerm(string)", "0xa753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", "0xc5699d68": "_compare(int256,bytes,int256)", "0xe2faf044": "createDAO(address,uint256,uint256,uint256)", "0xa15afb48": "Replicator()", "0x352d2790": "UUID4()", "0x7dee2cad": "CancelMyInvestment()", "0xbeabacc8": "transfer(address,address,uint256)", "0x674f220f": "previousOwner()", "0x4b3b6168": "SetNewBigContract(address)", "0x54ba7daa": "enter(bytes,bytes)", "0x06fdde03": "name()", "0x5944427b": "getRequestResult(uint256)", "0x983ef725": "getDifficulty(uint256)", "0x9287c877": "getNavLength()", "0xa987d654": "restoreItem(uint256)", "0x05433a26": "GetNumbersFromHash(bytes)", "0xd04bfc9c": "buyer_pay()", "0x4a9b3f95": "personUpdateName(uint256,string)", "0xe6b972f5": "userName(address)", "0x88782386": "UnicornMilk()", "0x74580e2f": "changeCreator(address)", "0x1785f53c": "removeAdmin(address)", "0xad544dcb": "testSetNotUpdatable()", "0xafd09bab": "quadrupler()", "0x77bc222c": "_eraseSingleNode(bytes32)", "0x09957e69": "newSale(bytes,uint256,uint256)", "0xa21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", "0xbb6b4619": "SendETC(address)", "0x3aa94b1d": "getCoinStats(uint256)", "0x9e2262f5": "testCreateCostData()", "0x2bf4e53d": "getCurrentShareholders()", "0x6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", "0x6b9b1006": "TransactionRecorder()", "0x83b23b40": "cEthereumlotteryNet()", "0x770c6cbb": "WithDrawPreForkChildDAO()", "0x67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", "0xa10bee85": "_transferFromWithReference(address,address,uint256,string)", "0x49cc954b": "twoYearsPassed()", "0x88c3ba85": "ParallelGambling()", "0x03985426": "getMode(bytes32)", "0xad8ed335": "__proxy(address)", "0x306387a4": "dealStatus(uint256)", "0x0343dfa0": "checkInvariants()", "0x23df9df5": "_refund(uint256)", "0x837e7cc6": "rollDice()", "0x98b1e06a": "deposit(bytes)", "0xa0440426": "purchaseProduct(uint256,uint256)", "0x4cb71b9b": "getAllReleaseHashes()", "0x3a7d280c": "login(string)", "0xb9a904f9": "testUnauthorizedSetBetaPackage()", "0xe94a4db1": "isSuitableGen(uint256,uint256)", "0x60f8af90": "refundRound()", "0x43bf718e": "getHashOfTheProposalDocument()", "0x4a30f976": "censorship(uint256,bool,bool)", "0x47e46806": "toString()", "0x8d59cc02": "register(address,string,string)", "0xb3fb14ad": "getGameResult()", "0x4a23dc52": "FileStore()", "0x8da5cb5b": "owner()", "0x3cc8daf7": "setNameOwner(bytes,address)", "0x14cbdb54": "EspCoin()", "0xc47cf5de": "getAddress(bytes)", "0x71e11354": "updateRegistration(string,string)", "0x8b2e6dcf": "publish(bytes32)", "0x12d00c2e": "soloWithdraw(uint256)", "0xd68199dc": "gameStats()", "0xf0f967e8": "canCall(address,address,bytes)", "0xe0c7c117": "Randao()", "0xddeae033": "claimFor(address)", "0xcec7260b": "move_monster(uint16,uint16)", "0xe51ace16": "record(string)", "0x4f76cb02": "testGetBitFailIndexOOB()", "0x942385eb": "getPayroll()", "0x46d667db": "setBytes32(bytes)", "0x35a063b4": "abort()", "0xb1d51d31": "pay(uint64,address)", "0x7140bdf3": "get_all_best_offers()", "0x0380e2f3": "getHashOfTheSignedDocument()", "0x2feda2fa": "POI()", "0x3c0870ae": "challenge(uint256,uint256,uint256,bool)", "0x27a5c7c6": "voteDecline(uint256)", "0xafd8c8c4": "GasProxy(address,address)", "0x8de93222": "purchase(address,uint256)", "0x087e055a": "getConfigBool(bytes)", "0xbaccc92b": "RegulatorIfc(address)", "0x8c546f81": "GNT()", "0x57cb2fc4": "getInt8()", "0xe3083fb5": "removeFromContribution(uint256)", "0x1a092541": "getDescription()", "0x7486a8e3": "get_publisher(bytes32)", "0x089e0ad0": "buildDSMap()", "0x29161820": "Base(uint256)", "0xe2f8feb2": "internal_tester(int256)", "0x1d2dbb22": "CancelMyInvest()", "0x726ab4ef": "getParentHash(bytes)", "0x83d8a90f": "theDonkeyKing()", "0x9babdad6": "removeShareholder(address)", "0xdeb931a2": "getOwner(bytes32)", "0x90cb04e1": "buy(string,uint256,uint16)", "0x2ff92323": "oraclize_query(uint256,string,string[4])", "0xf91a792e": "decryptHand(string,uint256,uint256,uint256)", "0xebf6e91d": "hit(uint256)", "0xb085b9a5": "Example()", "0x07b2779f": "BasicRegulator(address,uint256,uint256)", "0xe10e5dce": "_build(bytes)", "0x3e239e1a": "getHour(uint256)", "0xacc5a0dc": "GetPrize()", "0xa79deb4f": "acceptTradeDeal()", "0xd7c26adb": "oraclize_setProof(bytes1)", "0xc6a17d2b": "pow10(uint256,uint8)", "0xa87d942c": "getCount()", "0xe706918c": "testToggleBitSuccess()", "0xc1812b15": "reorganizeOwners()", "0x7c7c7695": "getAccountID(address)", "0x1a26ed1c": "validateReservedWindowSize(uint256,uint256)", "0x87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", "0x2e52d606": "n()", "0x2037fcbf": "withdrawInvestment(uint256)", "0x77228659": "query2(uint256,string,string,string)", "0xf67a1d37": "BlockChainChallenge()", "0xc67146a5": "check_bet(uint256,address,uint8)", "0xc89f2ce4": "funds()", "0x58e29e17": "initiateProof()", "0xf0e10c0d": "play(address,uint256)", "0x480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", "0x5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", "0xad447a19": "getBalanceDB()", "0x41095b60": "voteForUltimateOutcome(bytes,uint16)", "0x5521d17b": "betOnColor(bool)", "0xc8f8d75d": "Config(uint8,address)", "0x10ae4ce2": "setReleaseValidator(address)", "0x9fd4f7d1": "replaceWizard(address)", "0x77c78df9": "getCurrentLevel()", "0x1dda5c7d": "testFailSubBalanceBelowZero()", "0x21e5383a": "addBalance(address,uint256)", "0xb0414a2d": "setMinimumGasLimit(uint256)", "0x919840ad": "check()", "0xf651bf44": "move_to(uint16)", "0x0b97bc86": "startDate()", "0x29f1bff4": "withdrawFromChildDAO(uint256)", "0x7a02dc06": "getInfo(bytes32)", "0xe5bf93b9": "balanceEther(uint256)", "0x288c6ed2": "getSeedCost(uint256)", "0x4db3da83": "scheduleCall(bytes4)", "0x270cfee1": "getTokenAccount()", "0xb5d03751": "YoutubeViews()", "0x27e056a5": "addMinter(int256,address)", "0xfa7d68f1": "getAccountInfo(uint256,uint256)", "0x09fc8f6d": "isTokenUpgraded(bytes32)", "0xa5b9e922": "getContentTimetamp(uint256)", "0x1f8947c1": "extractUint(int256,bytes,uint256,uint256)", "0xbcc941b6": "totalWinners()", "0x1db71ffb": "doLoops(uint256)", "0x35ae41c9": "godAutomaticCollectFee()", "0x42cf0e72": "searchByOwner(address)", "0x69f18967": "testSetBitFailIndexOOB()", "0x57b07cd9": "getReleaseHash(uint256)", "0x2baf4f22": "_safeFalse()", "0x3133f2a7": "outstandingBalance()", "0x773c84ee": "exec(address,bytes,uint256,uint256)", "0x9070b18d": "_getAllRevisionBlockNumbers(bytes32)", "0x476e04c7": "NewMessage(string)", "0x3b91ceef": "setMax(uint256,uint256)", "0xe6cb9013": "safeAdd(uint256,uint256)", "0xc2038560": "setOutcome(bytes,bytes)", "0xbed34bba": "compareStrings(string,string)", "0xba8661a2": "TimestampScheduler(address)", "0x4c4aea87": "getReleaseData(bytes32)", "0x1177892f": "getBalanceByAdress(address)", "0x126a710e": "dnsrr(bytes32)", "0x60913244": "botOnSale(uint256,uint256)", "0x5731f357": "oraclize_query(uint256,string,string,string)", "0x3e58c58c": "send(address)", "0x2187a833": "setGreenToken()", "0x5f09952e": "voteAllowTransactions(bool)", "0xf2b26d8f": "nextEtherForSale()", "0x1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", "0x43d726d6": "close()", "0x6cdf4c90": "ownerSetMinBet(uint256)", "0xe6e8c692": "computeResponseFirstHalf(uint256,uint16)", "0xd1d80fdf": "setAddr(address)", "0x6da1833c": "getInstitutionByName(string)", "0x7682e6ff": "getTrustSetting(address)", "0x8f6f988c": "setUltimateOutcome(bytes)", "0xe299beb3": "SimpleIndex()", "0xa2bb5d48": "get_username(address)", "0x780900dc": "create(uint256)", "0x78710d37": "seven()", "0x2b20e397": "registrar()", "0x4094ef5e": "addDataRequest(string)", "0xc630f92b": "canEnterPool()", "0xdd114c22": "publish(address,uint256,address,uint256)", "0x57006864": "checkBetParity(uint8)", "0x45788ce2": "prev(address)", "0xee8ff562": "setMaxProfit()", "0xdc63a62c": "getFileListHead()", "0x9447fd0a": "until()", "0xb303dcbd": "Owned()", "0x0ecaea73": "create(address,uint256)", "0x20339891": "addGridMember(address)", "0xc8c01a55": "request(address,uint256)", "0x76f10ad0": "getSnapshot(uint256)", "0xc06c4474": "get_burned(bytes32)", "0x67cb61b6": "getChoice()", "0xca708230": "funnel()", "0x08b7fa31": "PriceFeed()", "0xac6bc853": "startSpin()", "0xf4bbfd6a": "scheduleCall(bytes,bytes)", "0xab73e316": "next(address)", "0xba0179b5": "confirm(uint256)", "0x1e62be25": "Bytes32Passer()", "0xb950556a": "setThingValid(bytes32[],bool)", "0xb61c0503": "fireEventLog1()", "0x79a85e6c": "getProductInfo(uint256)", "0x959ac484": "push(uint256)", "0x78e80b39": "UserGetPrize()", "0xff74927b": "strConcat(string,string)", "0xd207e757": "ownerSetOraclizeSafeGas(uint32)", "0x5819dde2": "getNumbersFromBytes(bytes3)", "0xf34ed4e6": "RanDAOPlus(address)", "0x3943807b": "insert(bytes,bytes,int256)", "0x38cc4831": "getAddress()", "0x12a7b914": "getBool()", "0xa4fd6f56": "isEnded()", "0x6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", "0x0bebd0f9": "addAddressToGeneration(address,uint256)", "0x003074ff": "getFrontend()", "0x2776a859": "computeResponseSecondHalf(uint16)", "0xadfe6b80": "InvestAdd()", "0x6981b5f4": "getLength(string)", "0x4a994eef": "setDelegate(address,bool)", "0xbac1e9f6": "getChannelSize(address,uint256)", "0xbdfdb519": "accept(string,uint256,uint16)", "0x68f5aa0f": "setShareholderDB(address)", "0xafb95eed": "logApproval(address,address,bytes32)", "0xae152cf4": "oraclize_query(string,string,uint256)", "0xe3b26a8c": "SocialNetwork()", "0x54204ad4": "triple()", "0xbc8f3bcb": "ZeroDollarHomePage()", "0xf0350c04": "transfer_ownership(address)", "0xfde9ba41": "transfer(bytes,address,uint256)", "0xfa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", "0x3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", "0x0acf473b": "AdminCloseContract()", "0x299e7318": "resolveVoting()", "0xb414d4b6": "frozenAccount(address)", "0x8d375da2": "testMakeItFail()", "0x6e8dad74": "retrieveAccountBalance(bytes,bytes)", "0xd3aa831f": "testOwnedTryAuth()", "0x13220305": "doTransferOther(address,address,address,uint256)", "0xb0c7f709": "kingAutomaticCollectFee()", "0x2dabbeed": "reclaim(uint256)", "0x5c19a95c": "delegate(address)", "0xbc2a4dd6": "doBalanceOf(address)", "0x8e7ea5b2": "getWinner()", "0xdb37e42f": "multisetProofType(uint256[],address[])", "0xa6b197aa": "Order(address,uint256)", "0x8cf4dbfb": "collectBalance()", "0xd0821b0e": "bet(uint8)", "0xa02b161e": "unregister(uint256)", "0x09dd0e81": "getBlockchainHead()", "0x8a0807b7": "indexOf(string,string)", "0xe3914699": "dEthereumlotteryNetWinners(address)", "0x44d75fa9": "updateMinorTree(bytes32)", "0x3c21db0a": "theGames(uint256)", "0xf0e959f9": "TokenSales(address)", "0x696bda86": "submitProposal(uint256,bytes)", "0x3b343a13": "getNodeAddress(bytes)", "0x2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", "0xbf32bf97": "FailGuyTax()", "0x89ced196": "setNotUpdatable(bytes32)", "0xb94e962a": "allocateTickets(uint256)", "0x7a479160": "getRequestArgs(uint256)", "0x5a825cbb": "getPayment(uint256,uint256)", "0x4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", "0x82afd23b": "isActive(uint256)", "0x6ebf10fe": "storeHeader(bytes,address)", "0x1437f9a3": "Set_your_game_number(uint16)", "0xd98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", "0x8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", "0x90fd53ec": "farmTile(uint8,uint8,int8)", "0x46e44f63": "getCheckRecordTS(bytes)", "0x1de38038": "makercoin(uint256)", "0xc038a38e": "totals()", "0xfa80918b": "computeNodeId(bytes,bytes)", "0xc76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", "0x2406cedb": "setPackageOwner(bytes32,address)", "0xb7297cf3": "gameSettings()", "0xe94acf0e": "TinyRouter(address)", "0x4a2b0c38": "DividendProfit()", "0x0e3f732a": "TheGame()", "0xd62457f6": "callValue()", "0x4961b40c": "getReleaseValidator()", "0x540cafe0": "storeHeaderWithFee(bytes,int256,address)", "0x7ff729fc": "fillUpProject(uint256,uint256)", "0x253459e3": "feesSeperateFromBalanceApproximately()", "0x930a80b4": "testAuthorizedSetPackage()", "0xb3cb8885": "nextUnderdogPayout()", "0x62c7855b": "getConfigBytes(bytes32)", "0x4f28af6a": "handleBet(uint256)", "0x103f9251": "transferFrom(address,address)", "0x9b19251a": "whitelist(address)", "0x9928811b": "testBroken()", "0xb33a8a11": "setTokenReference(address)", "0x27f06fff": "requestFillUp(uint256)", "0x2f570a23": "test(bytes)", "0x96ef7aa0": "cash_transfered(string)", "0x3983d5c4": "calcBaseFee(uint256)", "0xec0f1025": "testBitsOrSuccess()", "0xd35f4a99": "mint(int256,address,uint256)", "0x09dfdc71": "currentPyramidBalanceApproximately()", "0xac4e73f9": "proposeReverse(string,address)", "0xac4bd53a": "currentLeader()", "0x5a2ee019": "m()", "0xeba36dbd": "setAddr(uint256,address)", "0x0358d965": "addPayout(uint256)", "0xd7206124": "setInvestorLock(bool)", "0xe916d0f0": "doBalance(address)", "0x67c2a360": "authorizeUser(address)", "0x828d671c": "dyn_sig()", "0xaf6fe8e2": "testGetToken()", "0x283a4576": "Tomeka()", "0x8ac0ca36": "buyViaJohan()", "0xcc872b66": "issue(uint256)", "0xd826f88f": "reset()", "0x2aa3177a": "self_store()", "0x53b7b2e9": "cEthereumlotteryNet(bytes)", "0xce88b145": "getAccount(uint256)", "0x1fa03a2b": "isApprovedFor(address,address)", "0xe42d5be0": "getPaymentOf(address)", "0xb722a9ef": "getPreviousShareholder(address)", "0xfadf87b1": "testGetBitsSuccess()", "0xd26c8a8a": "coinBalance()", "0x30ccebb5": "getStatus(address)", "0x47799da8": "last()", "0x4a5db3b5": "authorizeAddress(address)", "0x22686250": "index(int256,uint256)", "0x07ef99a0": "demintTokens(int256,address,uint8)", "0xea2d4cf8": "__DeployerFunctions(address,address,uint256)", "0x092a2e37": "multiAccessAddOwnerD(address,address)", "0x671fa0a0": "Inscription(string)", "0xa10edc55": "GeneralPurposeProfitSplitter()", "0xd9c67404": "getMerkleRoot(bytes)", "0xdc419fd8": "cancelOrder(bool,uint256)", "0xc9734ebd": "WatchLastPayout()", "0xc7d6faf1": "easyPropose(address,uint256)", "0xfe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", "0xd3437fe0": "assertFact(uint256,bytes)", "0x5fb3e119": "Auction()", "0x665beae7": "ExecutableBase(bytes)", "0xc8bb73ef": "testGetBitsFailIndexOOB()", "0xc1d4f708": "getMwLength()", "0x22b0f6ee": "getStatusOfPayout(uint256)", "0x21520c5f": "calculatePayout(uint8,bool,uint256)", "0x66e98c31": "createCoin(string,uint256,uint256,string,string,address)", "0x7b352962": "isFinished()", "0x48d9614d": "GetFee()", "0xfe0d94c1": "execute(uint256)", "0xe4547f98": "documentExists(bytes)", "0x4e10c3ee": "transferWithoutReward(address,uint256)", "0x58ae8bcf": "voteInMasterKey(address)", "0x1dcb304b": "fipsGenerate()", "0xb595181f": "ShapeshiftBot()", "0xe02426c1": "getSignatureHash(bytes4,uint256)", "0x67546967": "EthBtcEscrow()", "0x85b31d7b": "myInfo()", "0xaa677354": "register(address,address)", "0x1d2e2cc4": "ENS()", "0x1097e579": "Enter()", "0x13a396d8": "getRequiredDeposit(bytes)", "0x6df3edef": "getSavedBytes()", "0x09b30ed5": "afterExecute(address)", "0x718e6302": "play(string)", "0x8e46fbb2": "testBitsXorFailIndexOOB()", "0x0d87a7c0": "WLBDrawsDB()", "0xbbe42771": "closeDeed(uint256)", "0xedfbf7b6": "setVotingDeadline(uint256)", "0x299e6b07": "Wallet(address)", "0x5cbc85d0": "returnBounty(uint256)", "0xe5225381": "collect()", "0x94f60a63": "getKudosLeft(address)", "0xd6960697": "confirmPurchase()", "0x4a1f0bf6": "inheritToNextGeneration(address)", "0x244ded7a": "ChangeOwnership(address)", "0x39b35753": "authCancel(address)", "0x75cb2672": "configure(address)", "0x938ae4cc": "testThrowDisownNotTransferable()", "0x04fc11d5": "getActual()", "0xacab021c": "getTOS(address)", "0x812cddf2": "getSavedString()", "0x8ae475a9": "notorize(string)", "0xb1d05422": "SendEmail(string,string)", "0x0fffbb54": "changeRankingSize(uint256)", "0xb6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", "0xda333ca6": "payOut(uint256)", "0x652f1f16": "addSignature(string)", "0x983b2d56": "addMinter(address)", "0x5e1936d4": "testThrowSetNotTransferableNotOwner()", "0x4ac1ad78": "getWeekday(uint256)", "0x6ba0b4f2": "isKnownSelector(bytes4)", "0x7c4c27c8": "isThisPuritanicalVersion()", "0x7ae2b5c7": "min(uint256,uint256)", "0x63bd1d4a": "payout()", "0x3fd94686": "changeEligibleDonkeys(uint256)", "0x7fe0518a": "asyncSend(address,uint256)", "0x5a8dd79f": "getDesignatedCaller(address,uint256)", "0x2635f4de": "registerLibrary(bytes,address)", "0x1335ff36": "createEventAndMarketMaker(uint256,uint256,uint8,uint32,address,uint256,uint8,uint16,uint256)", "0x181be00d": "getValue(uint8)", "0x9c1500f0": "registerMany(address,uint256,int256,uint256,bytes,address,bytes)", "0x16f9ce49": "_slotCommitNew(address)", "0x8ca4eef6": "getBuild(bytes32)", "0x8ee21b8e": "get_default_keys()", "0xa66f7ad6": "signRelease(uint256)", "0x414053be": "best_adjustment_for(bool,uint128)", "0x83a51ad0": "oraclize_setConfig(bytes32)", "0x262c0b72": "getPayoutFreezePeriod()", "0x499af77c": "current_spin_number()", "0x4209fff1": "isUser(address)", "0x6e1b6bcc": "checkMyBet(address)", "0xb46300ec": "send()", "0x6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", "0x58d9fa04": "addUser(uint256,address)", "0x24c93343": "error(string)", "0xa95d017d": "getRevisionBlockNumber(bytes32,uint256)", "0x46af23f5": "InstantLottery(address,address,bool,address)", "0x29ef56b1": "getAskOrderBookStats()", "0xe97db66e": "setJackpot()", "0x4b59e880": "puzzle(address,bytes32,bytes32)", "0xc7f86c37": "withdrawFundsRP()", "0x57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", "0xf1c760ae": "fixBalanceInternal(address)", "0x0908178f": "NoFeePonzi()", "0x22ebb3ac": "DieselPricePeg()", "0xb39a64cd": "getNumCalled()", "0x1c02708d": "killContract()", "0x65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x3397ca17": "numBalanceRecords(address)", "0xe436bdf3": "Draws(uint256)", "0xaf55bba0": "removeRegistryFromTagsIndex(address)", "0x11103599": "Token_Offer(address,address,uint16)", "0xb3a2a6c0": "setOfficialWebsite(string)", "0xb06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", "0x775c300c": "deploy()", "0xb1c6517a": "LookAtNumberOfPlayers()", "0xc19d93fb": "state()", "0xac9873c7": "CanaryV7()", "0x750cae6a": "enableBetting_only_Dev()", "0xdf3c8620": "num_challenges()", "0xbb00fc55": "bookEarnings()", "0x0bd2ae1c": "ERW()", "0x580bdf3c": "disableBetting_only_Dev()", "0x5c3f9765": "endDateClose()", "0xc4128b6d": "upgradeCount()", "0x140b4465": "executeSpendingRequests()", "0xfaa1a8ff": "getOwnedBot(address,uint256)", "0x40e58ee5": "cancel(uint256)", "0xf4ea95b9": "validateReleaseVersion(uint32[3])", "0x2ba0b09f": "AddNewCategory(bytes4,uint8,uint8,address)", "0x55db4092": "setTOS(address,bool)", "0xf9cc0605": "getAvailable()", "0x3f2f46b4": "revealRock(string)", "0x2af7ceff": "testPrice(uint256)", "0xcaaf2dd7": "getInitialAnswerResult(uint256)", "0x6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", "0xa18c751e": "set(bytes,bytes)", "0x4d536fe3": "doit()", "0x3197cbb6": "endTime()", "0xb83069c5": "getStemPrice()", "0x3f15457f": "ens()", "0x81ebdeea": "testThrowCreateWithNonceRetracted()", "0x249b4d0b": "removeTrustedIssuer(address,bytes)", "0xe7b48f74": "get(int256,address)", "0x089d5c4a": "repr()", "0x3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", "0x504f1671": "getSize(address)", "0xf3a44fe1": "withdrawForWorkshop()", "0x7a837213": "setAllowedAccount(address)", "0x4551b1d7": "ProxyPayment(address,address)", "0x5dac1601": "SimpleStablecoin()", "0x87914c6f": "prolongateContract()", "0xe3ceb06d": "YesNo(bytes32,address,string,address,uint256)", "0x42a745cb": "testBitEqualSuccess()", "0xaa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", "0x986dcd4d": "setCycleLimit(uint256)", "0x1e44c112": "find_strike(uint64,uint32,uint32)", "0x1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", "0x4ae85627": "grindUnicorns(uint256)", "0x200ebe34": "addTokensToGive(address)", "0x7b632c41": "TimestampScheduler(address,address)", "0x979b6f6f": "RoundInfo()", "0xb3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", "0x1d834a1b": "insert(uint256,uint256)", "0x931df75f": "validateProposedThroneName(bytes)", "0x6189be15": "columnround(uint256,uint256)", "0xdf5dd1a5": "addOracle(address)", "0x22d8cf5b": "CheckUserVote(uint8,uint8)", "0xdd62ed3e": "allowance(address,address)", "0xc0eb2325": "scheduleTransaction(address,bytes,uint256)", "0x038461ea": "getCertifiedStudentsCount()", "0x9ee035c9": "lookupCanonicalFormat(bytes)", "0x0ab58ead": "SingularDTVFund()", "0x550ed1f0": "getMaxBetAmount()", "0x6e63015c": "getCertifiersCount()", "0xbbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", "0x306b031d": "getGenerationEndAt(uint256)", "0x1bd9c46e": "setImporter()", "0xc80c28a2": "getNumberOfParticipants()", "0xcb553ac9": "sweepWizardCommission(uint256)", "0x6389654e": "changeDailyWithdrawalLimit(uint256)", "0xc0a963c9": "notifyWinner(address,uint256)", "0x3c335b0e": "getRetractable(bytes20)", "0x017972af": "getNumbersFromHash(bytes32)", "0x07da68f5": "stop()", "0x1e8c72b4": "incrUserAvailBal(address,uint256,bool)", "0x0df71602": "setWinner(uint256)", "0x85e5bb3a": "Security_AddPasswordSha3HashToBankAccount(bytes32)", "0x2ade6c36": "getNodeAddress(bytes32)", "0xb33926cb": "owner_withdraw(uint256)", "0x57764094": "getRate(uint256)", "0x13827950": "getShareholderDB()", "0x26826bf8": "setImage(bytes)", "0x76d438b0": "sendReward(uint256,uint256)", "0x51d6e547": "getNonce(bytes)", "0x4f24186a": "newProposal(string)", "0x1a695230": "transfer(address)", "0xe820a32f": "vetoPayout(uint256,uint256)", "0xfb3a1fb2": "getReleaseDb()", "0x6bae05cf": "preRegister(address)", "0xae2df7b3": "setImporterBank()", "0x56d73ad1": "getCertifierDb()", "0x8396392d": "add(string,string,string,address)", "0xeb08b304": "changeMeatProvider(address)", "0xb60e72cc": "log(string,uint256)", "0x76999896": "KingOfTheEtherThrone()", "0xea851885": "buyStake(bool)", "0xa5982885": "assertFalse(bool)", "0xfbf1f78a": "unapprove(address)", "0xc2ba5b40": "getPackageData(string)", "0x83d51a38": "concatString(string)", "0x68af4971": "registerListening()", "0x14ba5c09": "getDay()", "0xe4849b32": "sell(uint256)", "0x44dd4b3b": "lookupGeneration(uint256)", "0x3fda1281": "get_keys()", "0x09241200": "wasSuccessful()", "0xbc9147a4": "Foundation()", "0xe33734fd": "changeProposalDeposit(uint256)", "0x2cce4abe": "_finishNoCallback()", "0x45e965cd": "strConcat(string,string,string,string)", "0xd4245e5b": "transferringETH(address)", "0x10082bff": "getActorBillXdetail(address,uint256,bool)", "0xc831391d": "getPoolOverlapSize()", "0x15e33901": "digest(bytes,uint256)", "0x5f0edfb8": "create(bytes,bytes32,bytes1)", "0xadd4c784": "getResult(bytes32)", "0x3233c686": "claimerDeposit()", "0x187a62d5": "voteEmergencyWithdrawal(bool)", "0x5404bbf7": "getEntropy()", "0x3f5b7675": "periodTwo()", "0x7ec0f30d": "ack(string)", "0xd30a512e": "betOnColumnOrDozen(bool,bool,bool)", "0x9fcbc738": "setIntermediate(address)", "0x539e2bfb": "secondChainedCallback(uint256)", "0xe724529c": "freezeAccount(address,bool)", "0x5aa97eeb": "getMarkets(bytes32[],address)", "0xc51be90f": "query_withGasLimit(uint256,string,string,uint256)", "0x531b97d7": "oneCentOfWei()", "0xeace4827": "player_make_bet(uint8)", "0x9c851ebc": "new_entry()", "0x98c9cdf4": "getMinimumCallGas()", "0xd8f012c6": "StatelessFactory(string,string,string)", "0xceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", "0xd6d7d525": "get(bytes)", "0xbf55486b": "Tanya()", "0xd35ada32": "addParticipant(address,address)", "0xa8239d0b": "getPrice(string,address)", "0x12514bba": "transfer(uint256)", "0xb00140aa": "getHash(bytes)", "0x36f66528": "EtherDelta(address,uint256,uint256)", "0x279e0912": "getDownloadPrice()", "0x8173b813": "setNumCities(uint256,uint256)", "0xb98fdc36": "IconomiToken(uint256,string,uint8,string,uint256)", "0x3c7a3aff": "commit()", "0xcac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xfbeaebc6": "murder()", "0x2fa7cbfb": "getExecCost(uint256)", "0xe44d3084": "testFailure()", "0xede8acdb": "startAuction(bytes32)", "0xd5544f94": "getFundsAndAvailable(address)", "0x3824d8ee": "buy100DaoFor1Eth()", "0xbe3945e4": "getFee(address,address,uint256)", "0x1917ab5c": "activate(string)", "0x23509e69": "donkeysEligibleForFees()", "0xf460590b": "updateSigner(address,bool)", "0xc55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", "0xd96d7ea2": "PRE_EXECUTION_GAS()", "0x1f7b6d32": "length()", "0xacf8bf2a": "channelCount()", "0x18968a03": "finalize(uint256,address,address)", "0x5674a3ed": "runLottery()", "0xe3280126": "addOrder(string,bool)", "0x32afa2f9": "claimEtherOwner(uint256)", "0x355474d2": "commitReading(address)", "0x00601d6c": "board(uint256,uint8,uint8)", "0x2667f407": "__proxy(address,bytes)", "0x79716e43": "confirmTransaction(bytes32)", "0x272cda88": "EternalDB()", "0x76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", "0x338b5dea": "depositToken(address,uint256)", "0xfa93f883": "getMinute(uint256)", "0xafc4a982": "PathCost(uint16,uint32)", "0xf7d97577": "setPrice(uint256,uint256)", "0x842bc37b": "GetSmallCotractIndex(address)", "0x75f40f40": "underdogPayoutFund()", "0x23a1c271": "setPongval(int8)", "0x02571be3": "owner(bytes32)", "0xf79b22e0": "betOnATeam(uint256)", "0x10cf5d47": "awaitingPayout()", "0x1b00fe51": "testHypothesis()", "0xd449ce7c": "Administered()", "0x455259cb": "getGasPrice()", "0x975057e7": "store()", "0xdfdb5f17": "doBurn(address,uint256)", "0xaa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", "0xcabfb934": "replace(address)", "0x1f1f5e76": "addValueToContribution(uint256)", "0xa0eda9f2": "_transferFee(address,uint256,string)", "0xa8d95fb2": "claim(address,string)", "0x03ee8f08": "getCoeff(uint16)", "0x9872a20a": "registerUInt(address,uint256)", "0xb20d30a9": "setDailyLimit(uint256)", "0xe116b17e": "getKudosLeftForProject(address,address)", "0xf7c9f74a": "insert_contribution(address,uint256)", "0xc7a1865b": "play(bytes32)", "0x356594ab": "EtherTransfer()", "0xe22b0c46": "verify(uint256,uint256,uint8,bytes,bytes)", "0x2fea7b81": "getIdentity(address)", "0x6fa8de90": "changeMeatParameters(uint256,uint256)", "0x37c390e3": "allow_move(uint16)", "0xd22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", "0xf6d339e4": "setAddress(bytes32,string,address)", "0xd7cc8362": "isLatestMajorTree(bytes32,bytes32)", "0xdd012a15": "setIt(uint256)", "0x254c91b3": "testBitNotSetSuccess()", "0x47e40553": "nextRound()", "0xa6b206bf": "doSomething(uint256)", "0xac996e7e": "resolvePledging()", "0x71e2d919": "lol()", "0x07d5b826": "buyAllOutcomes(bytes32,uint256)", "0x5f68804e": "SimpleLotto()", "0xa510f776": "setCompany()", "0x0d48e8d0": "doBalance()", "0xd21d7950": "changeGasLimitOfSafeSend(uint256)", "0x3358d2d3": "buildDSTokenFrontend()", "0xec93cfae": "FountainOfWealth()", "0x65b1fdf4": "scheduleIssuePOIs()", "0xdc3080f2": "spentAllowance(address,address)", "0xd1f0bb2d": "populateAllowedFreeExchanges()", "0xd591221f": "testTransfer()", "0xf24b5779": "removeTrustedIssuer(address,string)", "0xed4b1d0d": "scheduleTransaction(uint256)", "0xa83627de": "updatePeriod()", "0xf597a499": "UserDatabase(uint256)", "0x21f8a721": "getAddress(bytes32)", "0x5548c837": "Deposit(address,address,uint256)", "0x55b775ea": "setFeed(address)", "0x01b869f1": "release(uint32,uint32,uint32,bytes)", "0x609ff1bd": "winningProposal()", "0xdf98ef33": "getResource(bytes,uint256,bytes)", "0xd39eb301": "getStatus(uint8,uint8)", "0x2cc0b254": "init(address,bytes32)", "0x4228974c": "Videos()", "0xc431f885": "addToContribution()", "0x00e43ee9": "setMigrationStatus(uint256,address)", "0xd9f8a4e2": "calcCurrentTokenPrice()", "0xb9e6f1d9": "get_amount()", "0x6b3a87d2": "WatchWinningPot()", "0xef4592fb": "getResult(bytes)", "0x41b9dc2b": "has(bytes32,bytes32)", "0x3b9901cc": "getChannelsByRanks(address,uint256,uint256)", "0x83876bc9": "newProposalInWei(address,uint256,string,bytes)", "0x50a3bd39": "enterPool()", "0xc976bbbb": "_compare(int256,bytes2,int256)", "0x0e47c76f": "rotate(uint64,uint256)", "0x6f85c7e4": "WAITING_PERIOD()", "0x7075b1d8": "latestMonarchInternal()", "0x9209b3c0": "getCrtDetails(bytes)", "0x305075db": "NormalizeRanks()", "0xb6b55f25": "deposit(uint256)", "0xf09ea2a6": "offer(uint256,address,uint256,address)", "0xf1320af2": "exempt(address)", "0xc813c30e": "testThrowSomething()", "0x4faa2d54": "getTimeElapsed()", "0x22017c5f": "DSTokenBase(uint256)", "0x6637b882": "setDao(address)", "0xd0b52156": "getIpfsHash(address,address)", "0x13bd4e2c": "_prepareAndSendReward()", "0xdb7ca38a": "XaurmProxyContract()", "0x1bad1d2e": "monitorWallet(address)", "0x691f3431": "name(bytes32)", "0x3169ff3e": "LooneyLottery()", "0x446a7974": "Fokitol()", "0xdc3ab866": "checkEarnings(address)", "0xfad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", "0xaf408d89": "setStatus(bytes)", "0xd02bf162": "spinTheWheel()", "0x9a36f932": "feeDivisor()", "0xca77ab8a": "getNextFile(bytes)", "0xc8e49707": "activateExportFee(address)", "0x502414e4": "marketMaker(string)", "0x78ec81a0": "sendEarnings(address)", "0x14167bf0": "oraclize_query(string,string[])", "0xba13a572": "lottery()", "0x299ed37a": "emergencyCall()", "0x6ec3af26": "addTrustedIssuer(address,bytes)", "0x3d69b403": "isOutcomeSet(bytes)", "0x9a19a953": "setInt8(int8)", "0x7817a60f": "acceptMember(address,string)", "0x1e223143": "getFirst()", "0x5437b39b": "hasUnprocessedDividends(address)", "0x8f0c724c": "setOperationsCallGas(uint256)", "0x3c925f16": "getAccountHolder()", "0x477801b1": "getLastRoundResults_by_index(uint256)", "0x3d21aa42": "sendApproval(address,uint256,address)", "0xd2b8035a": "draw(uint256,uint256)", "0x19c32e0b": "hmacsha256(bytes,bytes)", "0x28f90e4b": "Etheramid2()", "0xe87df70e": "fivetimes()", "0xc028df06": "offer()", "0xacb6c69b": "setTrustedClient(address)", "0xac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", "0x0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", "0x4ac6b2be": "getCheckRecordCreator(bytes)", "0x93dafba2": "getSubpot(uint256)", "0x592685d5": "getWindowStart(address,address)", "0xc24a0f8b": "endDate()", "0x3f9b250a": "getDocument(uint256)", "0xd845a4b3": "request(uint256)", "0xa5bfa9a9": "claimToken(bytes32)", "0x8e3957d9": "RandomNumber()", "0x62fb09b2": "getRefDescr(uint256)", "0x9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", "0xea1bf386": "getNextSellerBOTdata(uint256)", "0xe27fe50f": "startAuctions(bytes32[])", "0x031d973e": "closeMarket(bytes32)", "0x754dea40": "setBackendOwner(address)", "0xd83a8d11": "testProposing()", "0xf24a534e": "Oracle()", "0xd08275f1": "WolframAlpha()", "0x932db761": "profitsFromBitnationDebitCard()", "0xd96aee49": "MultipleConstructorTest()", "0x4594d06a": "delMinter(int256,address)", "0xb9f256cd": "newProposalInEther(address,uint256,string,bytes)", "0x1d2bca17": "MyToken(uint256,string,uint8,string)", "0x6edbd134": "hasHash()", "0x847f8a10": "Refund(uint32)", "0xb0604a26": "schedule()", "0x6676871d": "reserved_funds()", "0x05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", "0xe771066f": "marriageProof(bytes)", "0x7e32a592": "repairTheCastle()", "0xbab2f552": "currentCycle()", "0x45a3b0bf": "resolveFailPledge()", "0x070a888f": "updateRewardDuration(uint256)", "0x20d9822e": "setAnyoneCanCall(address,string,bool)", "0x224993c2": "setTimeBlock(uint256)", "0x01bd4051": "disown(string)", "0x4bc2a657": "setVoter(address)", "0x522103fa": "changeUnicorn(uint256,address)", "0xc988d70f": "getDailyWithdrawLimit()", "0x2f7f3ecf": "findNextHour(uint256,bytes)", "0x1b769e74": "testThrowsRestartNotUpdatable()", "0x4d561721": "etherandomSetNetwork()", "0x92a781d8": "changeBaseValue(uint256)", "0xf0a78538": "scheduleTransaction(uint256,bytes)", "0x64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", "0x97c3ccd8": "ban(address)", "0xdeb6930c": "PriceTicker()", "0x6cc5fdaa": "setBytes32(bytes,bytes)", "0x92c8eb96": "DSFalseFallbackTest()", "0x6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", "0x15e812ad": "getBaseFee()", "0xf5b53e17": "getInt256()", "0x081bf263": "isOOB(uint8,uint8)", "0xd2fb8787": "recordExists(bytes)", "0x86c57fcc": "b32ToBytes(bytes)", "0xe3a199d6": "testThrowCreateNewRevisionNotUpdatable()", "0x57cfeeee": "transfer(address,uint256,bytes32)", "0xb72e717d": "fromAddress(address)", "0x61b20d8c": "retrieveFunds()", "0xf4b103d4": "SimpleStorage(uint256)", "0xe2056c46": "ExtraBalToken()", "0xc3ee6311": "lockAndCall(string)", "0x136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", "0xc5d5997c": "changeSubUser(address,address)", "0xf8018a79": "prepend(address,address)", "0xf6b4dfb4": "contractAddress()", "0x9450b1c8": "addCharityFundation(string,string,string)", "0xd1a8d447": "get_all_bet_values()", "0x66d8c463": "reveal(bytes32,string)", "0xbb963c8a": "transferLibOwnership(bytes,address)", "0xd56b2889": "finish()", "0x9fb25d9e": "LeaderMessage()", "0x6ad50ed4": "investmentEntryInfos()", "0xa4d575ce": "_forward(address,bytes)", "0xa3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", "0x0db73c72": "noevent()", "0xf449619e": "collectPrize(uint256)", "0x1afccfa5": "Proposal(address,address,address,bytes,bool)", "0x4788cabf": "getContractId()", "0x4112987c": "strConcat(string,string,string)", "0x928a00d2": "deleteCoin(uint256)", "0xd9ec0508": "testThrowTransferNotEnabled()", "0x9aaf442c": "applyCensorship(uint256)", "0x49407a44": "claimEther(uint256)", "0x4fcf8210": "eraseRecord(bytes32)", "0x5ed84aa6": "getNymCenterAPIURL()", "0xa3c2c462": "totalReceived()", "0x5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", "0x6fc9d5e4": "changeCompareTo(uint256)", "0xe2ee9941": "tap(bytes20)", "0x0ff4f160": "oraclize_query(uint256,string,string[1])", "0x43ec3f38": "toSliceB32(bytes32)", "0x3288eb0b": "ChineseCookies()", "0x373c98a2": "authCall(address,bytes32)", "0x6ea056a9": "sweep(address,uint256)", "0x8dc45377": "getDuel1(uint256)", "0xd4625a3a": "equals()", "0x616fca9b": "adopt(address)", "0x32cea83e": "birth(bytes)", "0x002a5cc9": "getTicketHolders(uint256)", "0x31119b4d": "changeDeveloper(address)", "0x69569a51": "setFrontend(address)", "0xb7e24979": "addThing(bytes)", "0x164e68de": "withdrawFees(address)", "0x42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", "0x5dd672ec": "latestBid()", "0x45fe6e2a": "Scheduler()", "0x55cc4e57": "setIssuer(address)", "0x1df5e755": "Etherandom()", "0x8f70009d": "id_for_address(address,address)", "0x39b50688": "cancelSellOrder()", "0x40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", "0x677913e9": "setAmount(int32)", "0x66671c71": "BaseScheduler(address,address)", "0xfe71aec5": "LittleCactus()", "0x879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", "0x3b143184": "Congress(uint256,uint256,int256,address)", "0x7370a38d": "getNumPackages()", "0xfee35ff8": "newInvest(uint256,address,uint256)", "0x57dc9760": "DaoChallenge()", "0x8ac78c80": "Docsign()", "0x76d66f5d": "_Transfer(address,address,bytes32)", "0x9dc2c8f5": "fireEventLog4Anonym()", "0x43114842": "acceptChallenge(uint256,uint256,uint256)", "0x2043285d": "getMarketMakers()", "0xfb32f4f5": "ARK_FLAGGER_1_00()", "0x69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", "0x045c6ce0": "voteForProposal(uint256)", "0xa140e79c": "setMinimumDebatePeriod(uint256)", "0x331a72d1": "getRetractable(bytes32)", "0x87cc1e1c": "setExporterBank()", "0x7183616c": "notarize(string)", "0xce79add1": "givableBalanceOf(address)", "0x6f0cfab6": "DNSResolver()", "0x1c2f38ff": "paid(uint64)", "0xb7de47d3": "getIndex(uint256,uint256)", "0x04a2b2c2": "testOwnerCanBreach()", "0x65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", "0xf2ddc772": "confirm(bytes)", "0xa00ce377": "getIsContractValid()", "0xfe9fbb80": "isAuthorized(address)", "0xbbd39ac0": "coinBalanceOf(address)", "0xa4fde8bc": "player_declare_taking_too_long()", "0xd052fbf6": "getHistory(string,uint256)", "0xd205ad7d": "proposeDissolve(bytes)", "0x5a3b7e42": "standard()", "0xf27197ab": "getIsAvailable()", "0x00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", "0x971c803f": "getMinimumStackCheck()", "0x5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", "0xaef99eef": "Game()", "0x7f924c4e": "testDeposit()", "0xb1adc241": "BalanceDB()", "0x6a704d7b": "AddedToGeneration(address,uint256)", "0xb9f37c86": "Registrar()", "0xc631b292": "closeVoting()", "0x19350aea": "nameFor(address)", "0x85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", "0xbf187478": "shift_left(uint64,uint256)", "0x5b6b431d": "Withdraw(uint256)", "0xe5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", "0xbf8c50ff": "scheduleTransaction()", "0x013d64bd": "setCanCall(address,address,string,bool)", "0xb870ecbb": "testNormalWhitelistAdd()", "0xbcd3d8ca": "Collector(address,address,uint256)", "0x4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", "0x3e0dfbdf": "getInvestorByAddress(address)", "0xcb3e64fd": "unhalt()", "0xafc24e3d": "getChallengeAnswer(uint256)", "0xa36c8ec2": "UpdateContractorAddress(address)", "0xd5a4a3c6": "findRecentBet(address)", "0xb028ee13": "s2b(string)", "0x692ad3a9": "round(uint256,uint256,uint256,uint256)", "0x0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", "0x60689557": "Rock()", "0x717fedf0": "getFirstActiveDuel1()", "0xe837ab59": "getParticipantByAddress(address)", "0x32d5fe98": "revealCampaign(uint256,uint256)", "0x0178b8bf": "resolver(bytes32)", "0x44faa139": "Withdraw(uint32)", "0x418cf199": "setEstimateCost(uint256,uint256)", "0xae45850b": "schedulerAddress()", "0xd4871517": "BTCLotto(address,uint256)", "0xfbffb355": "testBitsEqualFailIndexOOB()", "0x2be6d43c": "ARKTagger_1_00()", "0x1df47aad": "ReplayProtection()", "0xb36a0b15": "getSignDetails(uint256,uint8)", "0x9c4baf27": "Skywalker(address,address)", "0xfb34fc6f": "WatchNextBlockReward()", "0xceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", "0xfc94dd18": "verifyHumanStandardToken(address)", "0x1ff13086": "size(int256)", "0xce92dced": "newBid(bytes32)", "0x231944e2": "moveUnits(uint256,uint256,uint256[])", "0x784813e0": "lookupBet(uint256,uint256)", "0xe0e3ba5a": "getLosesShare(address)", "0x5c1b3ca1": "getConfigUint(int256,bytes32)", "0x91060168": "fetchString(address,bytes4,bytes32)", "0x354b2735": "testDeploy()", "0xb88eef53": "registryCreated()", "0x8e3d4e5e": "Fibonacci(bytes)", "0x64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", "0x5c3d005d": "demote(address)", "0xb6509c12": "Ethereum_twelve_bagger()", "0xe87508be": "investorDeposit()", "0xcb96012e": "hashTo256(bytes32)", "0x314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", "0x5b6a54bc": "adjustTransactionFee(uint256)", "0x5f515226": "checkBalance(address)", "0x76cd7cbc": "sign(bytes)", "0xce220ecf": "testAddBalanceFailsAboveOverflow()", "0x922fc84b": "taskProcessedNoCosting(uint256)", "0xf8b2cb4f": "getBalance(address)", "0x7a29332d": "buyAllOutcomes(uint256,uint256)", "0x04106c8b": "startGeneration()", "0x8eaa1e29": "getContentByData(address,uint256,string,string)", "0x5a7a8850": "rollWithSeed(bytes32)", "0x2facc4e8": "depositGovernance(uint256,address)", "0xf2561a43": "voteSuicide(address)", "0xee1b4828": "closeBooks()", "0x18f303a1": "SetInternalValues(uint8,uint256)", "0xce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", "0x18b749c4": "payEther(uint256)", "0xbbc6eb1f": "getDefaultDonation()", "0x0b1ca49a": "removeMember(address)", "0xccf4f413": "setSubRegistrar(string,address)", "0x4616caa9": "pushCoin(uint256,address,string)", "0xd69450d5": "setUUID4Bytes(bytes)", "0xc98165b6": "createTarget()", "0x8c79a24d": "refName(uint256)", "0x56d88e27": "len()", "0xbfc3d84b": "CT()", "0xc7f2e6af": "Contribute(bytes20)", "0xd7e11e9d": "AddTicket(bytes)", "0x2d06177a": "addManager(address)", "0xd588acc4": "claimMiningReward()", "0x2ffb9e64": "updateGasForXaurData(uint256,uint256)", "0xf896503a": "getConfigAddress(bytes32)", "0x9af8c4ba": "respond(uint256,address,bytes)", "0x82a5285d": "getMinBetAmount()", "0x3ead67b5": "changeContractOwner(address)", "0xb29d7914": "getRefResults(uint256)", "0x135128c2": "CounterPartyDeposit()", "0x795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", "0x83197ef0": "destroy()", "0x433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", "0xf009347d": "KudosProxy(address)", "0xf2fde38b": "transferOwnership(address)", "0x62c99e84": "_Approval(address,address,bytes32)", "0x1b83b823": "notifyPlayer(uint256)", "0xe56c8552": "spinTheWheel(address)", "0x93eec1fb": "setName(uint8,uint8,string)", "0x11af3c68": "divest(address)", "0x8279c7db": "setReceiverAddress(address)", "0x44691f7e": "hasStarted()", "0x349501b7": "checkDepth(uint256)", "0xe8beef5b": "fireEventLog3Anonym()", "0x0870607b": "addSubUser(address)", "0x063925c8": "scheduleCall(bytes,uint256,uint256)", "0xa23744f0": "tryCreateCheckRecord(bytes)", "0x35d79fad": "CertificationDb(address,uint256,address)", "0x44691f2b": "Dispute()", "0xd7ccc2c3": "getLastPayment()", "0x152583de": "getAttributes()", "0x1a9360dd": "checkDate()", "0x420ef2b3": "TargetHash()", "0xf0caea2b": "SmartRoulette()", "0x5d268629": "Refund()", "0x23385089": "emitApprove(address,address,uint256)", "0x7648c929": "returnRemainingEther()", "0x5d5bc4cb": "BetOnRed()", "0xde8fa431": "getSize()", "0xda6b31b9": "testErrorTransferToNullAuthority()", "0x444dd6f3": "Elcoin()", "0xe1fa8e84": "register(bytes32)", "0x3e0a322d": "setStartTime(uint256)", "0x21bacf28": "getDefaultFee()", "0xb1662d58": "setModule(address,bool)", "0x5b0fc9c3": "setOwner(bytes32,address)", "0x40193d17": "getPongvalConstant()", "0xfb95adeb": "testFailBlockhashInsuffiecientFee()", "0x8ecc0950": "returnToOwner()", "0x34b7ac9b": "END_MINTING()", "0xeaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", "0xd7bc23af": "newParameters(int256,uint256,uint256,uint256)", "0x97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", "0xcf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", "0x40695625": "testRetractLatestRevision()", "0x90c3f38f": "setDescription(string)", "0x5fdf05d7": "two()", "0xaaac50bd": "transferDisable(bytes32)", "0x206a44f3": "getNum(bytes,uint256)", "0x7ac26aeb": "getTag(string,uint256)", "0xdc3f65d3": "createdByMe()", "0xe99543aa": "Trash(uint256)", "0x1bcad37a": "getTotalCost()", "0xa7f43779": "remove()", "0x3416f9d4": "subtractSafely(uint256,uint256)", "0x3bcf7d22": "newBribedCitizen(address)", "0x918f1bb5": "ProjectKudos()", "0xcf09e6e1": "SetBigContract(address)", "0x23add736": "claim(uint256,uint256,uint8,bytes,bytes)", "0x8ac6a869": "isObsolete()", "0x2324c67c": "getAllSignatureHashes(bytes4)", "0x981a60f5": "extractNameFromData(bytes)", "0xc018d0e6": "getFeeAmount(int256,int256)", "0x50e06b57": "Etherization()", "0x49e65440": "setSymbol(bytes32)", "0xfaee13b9": "set(int8)", "0x01ffc9a7": "supportsInterface(bytes4)", "0xc0b92612": "changePig(address)", "0x3f9f5b68": "setPreviousID(uint256,int256)", "0x2e9c5e77": "doStackExtension(uint256)", "0xc83be888": "single_move(uint256,uint8,uint8)", "0xef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", "0x2f30c6f6": "set(uint256,address)", "0x62986e27": "Canary(address,uint16)", "0x44dfdce0": "getNameOwner(bytes)", "0x4b7fcee7": "ownerPausePayouts(bool)", "0x84dac46e": "Fucksign()", "0x0878bc51": "getAttachesto(uint8)", "0x42d16748": "getMinDailyWithdrawalLimit()", "0x4ecd73e2": "DistributeDividends(uint256)", "0x03750d94": "serverSeed(address,bytes32)", "0xea0a5237": "announce(string)", "0x611daa7e": "EmergencyBalanceReset(uint256)", "0x2ae87a70": "getNumContents(address,uint256)", "0x5ec01e4d": "random()", "0xfd735602": "executeN()", "0xfebefd61": "startAuctionsAndBid(bytes32[],bytes32)", "0x8b64d70e": "owner_set_time_limit(uint256)", "0x2839e928": "ackermann(uint256,uint256)", "0xaf29e720": "remainingGasFund(uint256)", "0x9eee85fe": "bookEarnings(address,uint256)", "0x3733ffca": "convertTo(uint256,string,string)", "0xdbde1988": "transferFromWithoutReward(address,address,uint256)", "0xd3edcb5b": "getCreditorAddresses()", "0x77fcb91d": "forward(address,bool)", "0xf062e26b": "check_darkdao()", "0xdef2489b": "convert(address)", "0xccbda1af": "getChannelByName(string)", "0x267c8507": "authorizeManager(address)", "0xf1c30ec0": "reclaim(bytes)", "0xe6470fbe": "updateDefaultPayment()", "0x8fe58eb9": "Triger()", "0xd6b44859": "scheduleUndoIt(uint256)", "0x0eb8ed07": "transferEnable(bytes32)", "0xfc1f2a70": "Add(uint256,string,string)", "0x058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", "0xaf27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", "0x5b151fd2": "fifty_fifty()", "0x531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", "0x60213b88": "getInitialWithdrawal()", "0x29e94503": "VersionedBlob()", "0x9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", "0xcd9a3c98": "any(bool[7])", "0xb484e532": "getMyMsg()", "0xd1f59db9": "isLatestMinorTree(bytes32,bytes32)", "0xe0c6190d": "checkTime()", "0xaf5610dd": "isThisPreforkVersion()", "0xfa968eea": "minBetAmount()", "0x003538c5": "TestRegistrar(address,bytes32)", "0x71c59097": "MainnetSurvey(uint256,string,bytes32[])", "0xc82aac47": "searchByTag(bytes32)", "0xeca5c793": "testErrorUnauthorizedNameRegister()", "0xdc75f2db": "multiowned(address[],uint256)", "0x4c9ed763": "requestTokensBack()", "0xbd9a5673": "oraclize_query(string,string[5])", "0xb11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", "0x86e4e178": "CheckTickets(address,uint256,uint256)", "0x53c84526": "setSmartAffiliateContract(address)", "0x89029d8c": "get_all(uint256,uint256)", "0xc25e6908": "ultimateOutcomes(bytes32)", "0x6b1e564a": "challengeWinningOutcome(bytes32,uint16)", "0x1c895915": "getNumberOfPayments(uint256)", "0x244fcd03": "removeRelease(bytes32,string)", "0x2ca6d2c0": "getAccountSize(address)", "0xfe67a54b": "endAuction()", "0x756fb8c9": "getOptionChain()", "0x88102583": "safeCastSigned(uint256)", "0x60063887": "transferDebt(address,address,address,uint256)", "0x16216f39": "return13()", "0x8089d001": "getHashOfBlock(uint256)", "0x27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", "0xb29ae23f": "getDateOfSignature()", "0xdd729530": "add_shield(uint16)", "0x38557648": "executeSellOrder(address)", "0xe2a71f12": "accountDelete()", "0xce869a64": "fails()", "0x69bdfd3a": "toContractDie(bytes,bytes,uint256)", "0x99aeade3": "iterateTable(uint256,uint256)", "0x46bdca9a": "equal(string,string)", "0x5e07f240": "shiftBitsLeft(bytes,uint256)", "0x76285b5b": "_is360thDay()", "0x594151e0": "Dice()", "0x4dc43eaf": "setTreasury(uint256,uint256)", "0xec727000": "getApprovalDB()", "0xb144adfb": "balance_of(address)", "0x63052d82": "getOwnersIndex(address)", "0x833b4596": "testApproveSetsAllowance()", "0xc67d376d": "getClosedCandidates()", "0xcf03f5f4": "activateMasterKey(address)", "0x7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", "0xd92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", "0x3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", "0xfee6d28c": "addSnapshot(string)", "0xe71264fa": "addNewTokens(uint256)", "0xc4d9102f": "setNextID(uint256,int256)", "0xa6f0e577": "isLeapYear(uint16)", "0xc7102df7": "__stopBlock()", "0xfa93019c": "getBlocks(uint8,uint8)", "0xe9794dc1": "CreateHash(uint8,string)", "0x5460ef10": "sendWithExtraGas(address,uint256,uint256)", "0x2f62a6ff": "fipsRegister(uint256,address,bytes)", "0xd630bd53": "pledgeApprove(uint256)", "0x3448c7d6": "createHistory(bytes,address,address)", "0xdda3342b": "ReplicatorFactory()", "0x0cd865ec": "recover(address)", "0xb9f28076": "historyIdx(address)", "0x4dda1764": "CafeMaker()", "0x883ba26b": "getIsSettled()", "0x3f5e268f": "convictInitial(uint256,uint256)", "0x4a3b0eec": "authorizeOpen(uint256,bool,string)", "0xee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", "0xde14bbf7": "randomGen(uint256,uint256)", "0x7f3bd56e": "disburse(address,uint256)", "0x20d8741f": "Feed()", "0x60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", "0xda4b5e29": "contains()", "0xb3c25835": "addUser(address,string,string,uint256)", "0xee2af3fb": "set_factory(address)", "0xb821f815": "pay_winner(uint256)", "0x138cc941": "testErrorTransferToRejectAuthority()", "0xc0b6f0c2": "NextRoundAndEvents()", "0xc7e67360": "GAS_BUFFER()", "0x058d7433": "setAlliesContract(address)", "0xd810f298": "computeSettlementAmount()", "0xa24d23eb": "ProcessGame(uint256,uint256)", "0x7ac91cc2": "testFailOwnedAuth()", "0x79c3ddc1": "isPackageOwner(string,address,address)", "0x478ae93c": "playToWin(uint256)", "0x6632a507": "testSetupPrecondition()", "0xb6013cef": "finalize(uint256,uint256)", "0x37b7bf11": "Tile(int256,int256)", "0xecfc7ecc": "placeBid()", "0x70b1d9d4": "requestCanonicalFormat(bytes)", "0x315fdea3": "TreasureChest()", "0xc5575ef0": "checkTransferFrom(address,address,uint256)", "0x65c72840": "getDay(uint256)", "0xd6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", "0x350fbe2e": "calcNextDrawTime()", "0x8af784dc": "expectEventsExact(address)", "0x2db89533": "Auth(uint8,address)", "0x9f203255": "setAuditor(address)", "0x2526d960": "clawback()", "0x3fbd40fd": "ProcessDraw()", "0xface030b": "SpinTheWheel(address)", "0x648621ec": "xnotify(string)", "0x22dc36e2": "processed(uint64)", "0x6f52167d": "payDuel(address,string,address,string)", "0x8f70bfa0": "processDeposit()", "0x25ea269e": "Scissors()", "0x93feb13b": "ForceSendHelper(address)", "0xb688a363": "join()", "0x89859b50": "updateLatestTree(bytes32)", "0xf83d08ba": "lock()", "0x7d287697": "testTryGetUnset()", "0x98d5fdca": "getPrice()", "0xfe72e717": "toDie(bytes)", "0xb3c06f50": "transferFrom(address,address,bytes32)", "0x1465aa97": "testingContract()", "0x069d6d1c": "closeOrder(uint256)", "0xa79f26dc": "force()", "0xf2371fb3": "grantGiveableKudos(address,uint256)", "0xaa7dcd84": "testUpdateAuthorityEvent()", "0x0d8b5fa2": "testControllerValidTransferFrom()", "0x0e0f55d0": "RewardOrder(uint256,uint256)", "0x9ea1b79d": "getContentChannel(uint256)", "0x4a67fa7d": "setLotteryFee(uint256)", "0xdb006a75": "redeem(uint256)", "0x8f4ed333": "step2()", "0x1a10cfc3": "delete_entry(uint256,uint256,uint256)", "0xd422e4e0": "takeFee(address,uint256,string)", "0x61a00f6d": "Ballot(bytes32[])", "0x9c30936f": "removeCertificationDocumentFromSelf(bytes32)", "0xa5f4af33": "playerWithdrawPendingTransactions()", "0x07ad9ecb": "safeSend(address,uint256)", "0x8f99ea43": "setDividendDB(address)", "0x1df473bc": "newContract(bytes)", "0xea5ea470": "payFunding(uint256)", "0x743e0c9b": "receiveTokens(uint256)", "0x21835af6": "__dig(uint256)", "0x47448e8a": "set(bytes32,string,bytes32)", "0x9b1ad792": "destroyToken(address,uint256)", "0xf765088f": "UpdateClientAddress(address)", "0xddbbc35c": "searchByName(string)", "0x5ed7ca5b": "halt()", "0x97950740": "roomForBirth()", "0xfc01abbe": "stringToBytes32(string,string)", "0xea3d508a": "selector()", "0x8c88752a": "ContributorList(uint256)", "0x5837e083": "move_history(uint256)", "0xf7c3ee7a": "immortality()", "0x1b9f9647": "accessMyWallet(address)", "0xc8691b2a": "getHistory(uint256)", "0x91e8d3dc": "testBitOrFailIndexOOB()", "0x5c89c10d": "setBannedCycles(uint256[])", "0x4500054f": "isCancellable()", "0x334ef224": "testThrowsUpdateLatestRevisionNotOwner()", "0x763a738c": "allNames()", "0x45590ec8": "addTag(uint256,string)", "0xe7740cf9": "revealPaper(string)", "0xd9d2d058": "Splitter()", "0xb412d4d6": "CafeDelivered()", "0x8365172c": "num_levels()", "0x41c0e1b5": "kill()", "0x3106fea0": "voteOnProposal(uint256,bool,uint256)", "0x82ab890a": "update(uint256)", "0x4636a159": "newPhoneToAddr(address,uint256)", "0x2f29d8c5": "elapsed()", "0x1bf20668": "testAdminTransfer()", "0xf709dd51": "getTrademark()", "0x8b859409": "setRelease(bytes32,bytes32,string)", "0x03959bb7": "setDataContract(address)", "0x4247f52d": "DoRoll()", "0x31ab4066": "testAuthorityTryAuth()", "0xac4b2bae": "newParameters(int256,uint256,int256,uint256)", "0x57eaeddf": "_isContract()", "0x4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", "0xd116c8c4": "releasePayment()", "0x6615dd83": "setSeedSourceB(address)", "0xb8aca90b": "CurrentGame()", "0xc124e2ea": "checkBetDozen(uint8)", "0x4b0bbf84": "addEntropy()", "0x452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", "0xcdb6753b": "setNav(uint32)", "0xbb5d40eb": "isValid()", "0xd6f42038": "PhoneToAddress()", "0x6bc3e0f0": "verifySecondHalf(uint256[4],uint256[4],uint256[4])", "0x33893071": "checkMyWithdraw(address)", "0xfb46d4c5": "tweet(string)", "0x248582b0": "receivePaymentForGoodsSoldEarly()", "0x766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", "0x1c8d5d38": "allowance(address,address,bytes32)", "0x6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", "0xe8d1e961": "lockAccount(uint256)", "0x152fb125": "SimpleMixer()", "0xf72457af": "CertifierDb()", "0xe8a5282d": "setConfig(bytes32)", "0xbeb92f55": "setCaller(address)", "0x9a571d9f": "isAlphaLower(bytes1)", "0x46a2679a": "getSubpotsCount(uint256)", "0xd62d3115": "testCreate()", "0xb6ed0632": "cancelOrder(uint256,uint256)", "0xc95e81cb": "MyBet(uint8,address)", "0x1d5a9f3f": "object_types(uint256)", "0xa49d53a1": "SmartRevshare()", "0x5b65b9ab": "setFee(uint256,uint256,uint256)", "0x116c6eab": "getProfitShare(address)", "0x8e46afa9": "getDefaultGracePeriod()", "0xdabc706e": "getProposalCost()", "0x3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", "0x86269a88": "checkBetNumber(uint8)", "0xb6ac24df": "updatePatchTree(bytes32)", "0x4637d827": "trust(address)", "0x1c1b8772": "update(address)", "0x5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", "0x81a60c0d": "getResults(uint256)", "0xd1b4ff7e": "multiAccessRevokeD(bytes32,address)", "0x92b7d5b9": "getCurrentGaslimit()", "0x77ceded8": "mintGrey(int256,address,uint256)", "0x2a095fbe": "unlinkEID(bytes,bytes,address)", "0xa6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", "0x4579268a": "getOffer(uint256)", "0xcabb3a3a": "isAlphaNumeric(string)", "0xfadc51cf": "isAlpha(bytes1)", "0xf2022905": "toldYouItWouldWork()", "0x686e8aaa": "GetMoney()", "0x07718a3b": "BankOwner_WithdrawDonations()", "0xc58343ef": "getRequest(uint256)", "0x7b1a547c": "registerAs(address,string,uint256,string,address)", "0x213b9eb8": "setAddr(string,address)", "0x75090ebf": "changeDomain(uint256,uint256,uint256,address)", "0xdbbdf083": "register(uint256,address)", "0xfa4e5e5a": "notify(uint8,string,string)", "0x86a5ff97": "changeStatus(string)", "0xb8f71f26": "scheduleTransaction(uint256,address)", "0xa2ec191a": "addDSource(string,uint256)", "0x18b31f94": "registerLengthFunction(string,string,address)", "0x7b395487": "voteForUltimateOutcome(bytes32,uint16)", "0x39246d75": "VersionModel()", "0xd500dd6a": "challengeTimeout(uint256,bool,address)", "0xd1da09ee": "extractImportFeeChargeLength()", "0xc74e907b": "commit(address,uint256,uint256)", "0x4b09ebb2": "e_exp(uint256)", "0xec3af4a9": "getProjectKudos(address)", "0x714064f3": "BreakableBond(address,address,uint256)", "0xc4bc5da5": "resumeContract()", "0xf7888aec": "balanceOf(address,address)", "0x2f597e71": "testLongInput()", "0x7212b67e": "add_potion(uint16)", "0x9a15f4f3": "getBlockHeader(int256,int256)", "0x6eacd48a": "ownerPauseGame(bool)", "0xf739ed4c": "id_for_user_version(uint256,uint256)", "0xfaf0952b": "testThrowRestartNotOwner()", "0x88a1e895": "test2Fails()", "0x237e9492": "executeProposal(uint256,bytes)", "0x7cb97b2b": "set_owner(address)", "0x2bb685bc": "kill2()", "0xdc52696f": "tokenSupplyChanged()", "0x83d852d9": "shutdownTransactions()", "0x525b25b1": "getDeploymentReward()", "0xeac116c4": "createKingdom(string,address,address,address,address)", "0x014e5fde": "ARKController_1_00()", "0xc6ae3b57": "dEthereumlotteryNet(address,address)", "0xcddbe729": "game(uint256)", "0x8823a9c0": "changeFeeTake(uint256)", "0x021991e7": "getBetsLocked()", "0x3015394c": "cancelRequest(uint256)", "0x9d118770": "destroy(uint256)", "0xe854dfb4": "Order(address,uint256,uint256)", "0x8435be4b": "getLastFarm(uint8,uint8)", "0x27fbcac5": "getChannelFeed(address,uint256,uint256)", "0xc1be4031": "XaurumProxyERC20()", "0x8e25071a": "setProxyCurrator(address)", "0x4f139314": "compensateLatestMonarch(uint256)", "0x85c78fac": "retryOraclizeRequest(uint256)", "0x478e25bf": "resetAction(bytes32)", "0xc74c251f": "addSafely(uint256,uint256)", "0x058aace1": "divest()", "0x6d1da953": "createWithNonce(bytes32,bytes)", "0x30c0f8d6": "scheduleTransaction(address,bytes)", "0x69a5e902": "multiAccessCall(address,uint256,bytes)", "0x6f8b44b0": "setMaxSupply(uint256)", "0x919edc7c": "getChainySender(string)", "0x0b7ad54c": "getContent(uint256)", "0x5bfdc700": "registerData(address,int256,bytes,address)", "0x0d1fce42": "getBankroll()", "0x739b47ca": "recordWin(address)", "0xa5ea11da": "getParameters()", "0xf8af9e6f": "setAdv(uint256,string,string)", "0xe32e9f22": "setDeploymentReward(uint256)", "0x0baaaed9": "setConfigBytes(bytes,bytes)", "0x99f4b251": "mine()", "0x362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", "0x7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", "0x3adb2de7": "bet_this_spin()", "0xa311dd70": "setArray(uint8[10])", "0xc5bf339c": "getLastNonPublished()", "0x9d1bbd7e": "CancelRoundAndRefundAll(uint256)", "0x89790192": "WithFee(address,uint256)", "0x1c879c47": "getMarketHashes(bytes)", "0xbb84d362": "splitProfitVIP_only_Dev()", "0xffb1a6cb": "getWins(address)", "0x3b355af6": "baseData()", "0xb181a8fc": "resetContract()", "0x7d3d6522": "goalReached()", "0xd4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", "0xd65ab5f2": "startGame()", "0x4c4766e8": "KittenRegistry()", "0x77e5bf84": "getTxGasprice()", "0xff981099": "getVotes(uint256)", "0x4a7b26ec": "join_game(uint256)", "0xcccf7a8e": "has(uint256)", "0xa525f42c": "transferFromToICAP(address,bytes32,uint256)", "0xeef8e35f": "setChainyURL(string)", "0x557ed1ba": "getTime()", "0x595da94d": "has_owners(uint256)", "0x12511c14": "transferEnable(bytes20)", "0x2b291eb6": "UserAddTicket(bytes)", "0x50baa622": "withdrawToken(uint256)", "0xc01a8c84": "confirmTransaction(uint256)", "0x671dacdc": "CalculateSqrt(uint256)", "0xe74ffbd5": "getPart(bytes32,uint256)", "0xdd54a62f": "content(string)", "0x4025b293": "redeemAllOutcomes(bytes32,uint256)", "0xa8659216": "setInitialLockinDays(uint256)", "0x00b5b223": "computeResponse(uint256,uint16)", "0x2ef761d3": "buyTile(uint8,uint8)", "0x0a874df6": "lookup(uint256)", "0x42c69566": "get_address(address,string)", "0x02dc2e1d": "queuePayment(bytes)", "0x86bb7121": "getBlocksPerRound()", "0xacfdfd1c": "deploy(uint256,string,string,address)", "0x7d298ee3": "beforeExecute(address,uint256)", "0x5023d124": "TestFactory()", "0x827ef325": "_parseMsgData(bytes)", "0xd35b9d83": "codeAt(address)", "0x26161670": "donkeyRanking(uint256)", "0xe0834ea4": "WatchBalanceInEther()", "0xd44f2d3d": "getInitialWithdrawalDone()", "0x4f223fe3": "StatefulFactory(string,string,string)", "0x91cd242d": "setMeta(bytes32,bytes32,bytes32)", "0x9a97043b": "depositIdx(address)", "0x85db2dda": "PayoutQueueSize()", "0x423e1298": "setDoNotAutoRefundTo(bool)", "0xb7a97a2b": "isValidChannel(uint256)", "0xc1441172": "setBlackFlagRequest(uint256,uint256)", "0x53d9d910": "create(address[],uint256,uint256)", "0x64d905c0": "awaitingParticipants()", "0x718bd6dd": "setRequestUntil(uint8)", "0x5a353193": "KrakenPriceTicker()", "0xfb099c84": "newInvestor()", "0xd264e05e": "forward()", "0xcd9f05b8": "balanceEtherAddress(address)", "0xa1da2fb9": "retrieveDAOReward(bool)", "0x60708ae3": "issueAndCommit(address,address,uint256,uint256)", "0x109df68e": "rotateBitsRight(bytes,uint256)", "0x793cd71e": "cashOut()", "0xd3017193": "addUser(address,uint256)", "0xaacf5328": "setVideoID(string,uint256)", "0xb56e1bca": "setExchangeToken()", "0x9341231c": "sendOrThrow(address,uint256)", "0xaed8f3da": "partsPerBillion(uint256,uint256)", "0xdcff5581": "NewFeeAddress(address)", "0xbbe4fd50": "getNow()", "0x3df16377": "make_move_and_claim_victory(uint256,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", "0x5ae5df8f": "deleteRef(string)", "0x6d853ab6": "isSubUser(address)", "0x28472c6c": "claimComputation(bytes,bytes)", "0x2c215998": "updateStatus(string)", "0x7eff1465": "setAccountAllowance(address,address,uint256)", "0xd5089396": "Token(string,string,uint8,uint256)", "0xd1f7a4e4": "createCertificate(bytes)", "0x8c0e2a31": "regProxy(address)", "0xa819819b": "sweepDeityCommission(uint256)", "0x2b861629": "storeBlockHeader(bytes)", "0x25d4bdeb": "LookAtCollectedFees()", "0x5dddea66": "updateState(uint256,uint8,uint256)", "0x3ccfd60b": "withdraw()", "0x6795dbcd": "getAddress(bytes32,string)", "0x9b9ba572": "oraclize_query(string,string[3])", "0xa925d85e": "Exchange(address,address)", "0xbfe8c107": "betOnDozen(bool,bool,bool)", "0x1af716ba": "transferFrom(address,address,uint256,string)", "0x67eae672": "sendCoinFrom(address,uint256,address)", "0x311d5a2a": "recordBalance(address)", "0x7ca823d5": "getAverageChainWork()", "0x19483cd1": "checkHash()", "0xd366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", "0x4d70d1d7": "generateId(uint256)", "0xe13dc28b": "testValidTransfers()", "0x12065fe0": "getBalance()", "0xdd67a360": "OrderLifeCycle()", "0xd7c23572": "historyTimesPlayed(address)", "0x2675c123": "CloseContract()", "0x1381e400": "cancel(uint32)", "0xa48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", "0xb03260be": "scheduleTransaction(uint256,address,bytes)", "0xb37217a4": "getRandomNumber(uint256)", "0x5c54305e": "InsufficientFunds(address,uint256,uint256)", "0x17e1b09b": "minimumDeposit(uint256)", "0x10c4e8b0": "all()", "0xa31d5580": "Registrar(address,bytes32,address)", "0xbe6307c8": "getDraw(uint256)", "0xc985c221": "get_all_levels()", "0x91b7f5ed": "setPrice(uint256)", "0xe42def21": "CryptoHill()", "0x738486bd": "BeerCoin(uint256)", "0xe422ebe9": "getBot()", "0x67dd74ca": "buyTicket(uint256)", "0x276b94e1": "copypaste()", "0x39aaba25": "get_status()", "0x7ed19af9": "multiAccessRevoke(bytes32)", "0x4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", "0xd014c01f": "enter(address)", "0x1d49e081": "EXECUTE_EXTRA_GAS()", "0x9dafbc13": "initBlock(uint256)", "0xc7e22ac4": "setOracleGas(uint256)", "0xa3053236": "SafeInvestments()", "0xf42ac1de": "minQuorum(uint256)", "0x04d91c6a": "testFail()", "0x0e662cf0": "buyTokens(uint16)", "0x1ef0625b": "player_2(uint256)", "0xcec1365a": "ShortLimit(uint256)", "0x340f5e4e": "get_all_num_levels()", "0x3e2729bf": "isRevocated(bytes)", "0x5a1cc358": "getChannelRank(address,uint256)", "0x4d366398": "runPeerBalance()", "0xaf9a3f9b": "hashName(string)", "0x33298e25": "invoke(uint256,uint256)", "0x63def590": "untrustClient(address)", "0x836d6d66": "WeeklyLotteryB(address,uint256)", "0x7f497550": "scheduleTransfer(address,uint256,uint256)", "0xf9e05ed9": "sha(uint128)", "0xf6458c6a": "toZ1(uint256[3],uint256)", "0xf41017fc": "finalize(uint24)", "0xeeb57139": "CollectMoney(uint256)", "0xfdacd576": "setCompleted(uint256)", "0xb7266456": "StandardToken()", "0x6a8c2437": "totalRescues()", "0x1fdf6e0c": "protectKingdom()", "0xcf31e9fe": "getOutputHash()", "0xc8117b5b": "extractBalanceOfLength()", "0x0674763c": "assert(bool)", "0x87def081": "getFeeRecipient(int256)", "0xc63ff8dd": "claim(bytes)", "0x329bfc33": "getCurrentWinner()", "0x3d6a3664": "setNewOracle(address)", "0xdaa21e0e": "testBitSetSuccess()", "0xbf8783e0": "callAndGetReturn(address,bytes,uint256)", "0xb06df18e": "transfer(bytes20,address)", "0x00100a18": "NewPoll(string,string,uint256,uint256)", "0x2ffb8631": "getReleaseLockfileURI(bytes32)", "0x6716a692": "setDVIP(address)", "0xe8223468": "sha3clone(bytes)", "0x0aeacb5e": "getTotalRecords()", "0x29e30910": "testThrowCreateExistingNonce()", "0x240ecad5": "transferViaProxy(address,address,uint256)", "0xa33d4968": "Tripler()", "0x8caaaae6": "totalWeiPrice()", "0xf28a7912": "quick2()", "0xcbe9ef39": "BasicCoin(uint256,address)", "0xea3d2827": "selectWinner(string)", "0x92e9fd5e": "ColdWallet(address,address)", "0xcd5e3c5d": "roll()", "0x4a82534b": "create(address,address,address,uint256,uint8,uint8,uint256)", "0x5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", "0x9380b8e7": "testFailAddingMembers()", "0x31b0795c": "registerAddress(address,address)", "0xb76e4890": "Tester()", "0x29c08ba2": "payPremium()", "0xd7f31eb9": "forward(address,uint256,bytes)", "0xd7ef1356": "best_adjustment(bool)", "0x48d9a374": "blockTransfer(address,uint256)", "0x88b9e10e": "seizeTokens(address,uint256)", "0x8736fd16": "getRefStatus(uint256)", "0x2b30d2b8": "invoke(uint256)", "0xd4e78272": "Draw()", "0x0257c48c": "meta(bytes32,bytes32)", "0xc1246d39": "simulatePathwayFromBeneficiary()", "0x699b328a": "randomize()", "0xa200dc73": "getNextShareholder(address)", "0x9a7a7c11": "makeRoll(uint256)", "0x2bf1f9da": "restart(bytes32,bytes)", "0x943a32bc": "Relay(address)", "0x93503337": "isAllowed(bytes32,uint256)", "0xe97b2190": "add_wall(uint16)", "0x0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", "0xc0df77d0": "getRefName(uint256)", "0x27121069": "verify(bytes,uint8,bytes,bytes)", "0xb7009613": "canCall(address,address,bytes4)", "0x0295d71b": "currentDepositLimit()", "0x35ee2783": "Alarm()", "0x71b6663e": "play1(address,uint256)", "0x0178fe3f": "getData(uint256)", "0x489306eb": "oraclize_query(string,string)", "0xfce59d0c": "MangoRepo()", "0x8efc777f": "isBeta(bytes)", "0x1f7b8622": "getVotingDeadline()", "0x76da5667": "admin_kill()", "0x152cf9db": "getDataPoint(int256,uint256,uint256)", "0xd09de08a": "increment()", "0x64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", "0xd9fe60f3": "DTHPool(address,address,uint256,string,string,string)", "0x6b4dd158": "getPrice(bytes)", "0x0a80ef45": "getIsClosed()", "0x51fdaf92": "checkExpiredfunds()", "0x694e0d5b": "StringPasser(uint8[])", "0x0e1d88fc": "addTender(uint256,uint256,address,uint256)", "0x53850db3": "getParticipantById(uint256)", "0xb6cb405b": "getContractor()", "0x4c6b25b1": "results(bytes32)", "0x1c4e6cd0": "NameReg()", "0x53aab434": "buyIn()", "0x1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", "0xd98b9bb5": "placeBid(address,uint256)", "0x02e8d8c0": "scheduleTransaction(address,uint256,uint256)", "0x8a120dc9": "testBitEqualFailIndexOOB()", "0x33f707d1": "ownerWithdraw(uint256)", "0x98e00e54": "getCallWindowSize()", "0x4da74ee6": "setVoteIntention(uint256,bool,bool,string)", "0x6617e11a": "NiceGuyTax()", "0xfe13a823": "computeResponseFirstHalf(uint16)", "0xf7bd2361": "LookAtBalance()", "0xb09bc3bf": "try_to_get()", "0x0cee22e9": "testSetBalanceSetsSupply()", "0xae404996": "oraclize_query(string,string[3],uint256)", "0x2ad95786": "winner(address)", "0xe5fe4f31": "buy(uint8,bytes32,bytes32)", "0xe23941bc": "testDepositWithdraw()", "0xfc89aff6": "submitVerifiedUsers(address[])", "0xddf187b0": "dogFight()", "0xb5f5962a": "CALL_GAS_CEILING(uint256)", "0x92093dd6": "getLastResult()", "0xbfad16f4": "new_offer(uint256,uint256)", "0x01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", "0x4054f5de": "EthVentures3()", "0x244c23ee": "Token(uint256,string,uint8,string)", "0xc3daab96": "withdrawBond(uint256)", "0x5fa21f1f": "enableBetting()", "0x3b591ea7": "AmountToForgeTheNextBlock()", "0x8c3c4b34": "getSaleStatus()", "0x7429f1eb": "multiAccessSetRecipientD(address,address)", "0xf99ff4df": "paged(uint256,uint256)", "0x2a64fb63": "getSaleDate(bytes)", "0x749f9889": "changeAllowedRecipients(address,bool)", "0x053c351b": "oraclize_getPrice(string)", "0x19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", "0x5292c1a9": "testThrowsRestartEnforceRevisions()", "0x68f2ab8e": "Currency(string,string)", "0xd6e0bf29": "OwnerDeposit()", "0x94c3fa2e": "getLastBlockHashUsed()", "0x45362978": "query1(string,string)", "0xaff21c65": "getMinimumEndowment(uint256)", "0xe33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", "0x9eb9dd3b": "getBetsProcessed()", "0x3807ba1b": "poi()", "0x7281854d": "GetCategoryValue(uint8)", "0x45ee49b9": "getUltimateOutcomes(bytes)", "0x0109f22e": "CrowdSale()", "0x98596726": "note(uint224)", "0x06900c41": "ZeroPonzi()", "0x3df76482": "fipsPublishData(bytes20,bytes)", "0xe0429b6c": "ShinySquirrels()", "0xa4a7cf5c": "redeemWinnings(bytes32)", "0x2e898ddc": "validateTemporalUnit(uint256)", "0x3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", "0x43e6125d": "Badge(address)", "0x75a6a332": "testThrowRetractNotRetractable()", "0xbed411a0": "CheckPrize(address)", "0x16f3cb5e": "__kill()", "0xe8efc1a0": "updatedValue(bytes32)", "0x9c7264d7": "fillOrder(address,uint256)", "0x9a0af2ec": "getStLength()", "0xf62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", "0x940f851c": "Ballot(uint8)", "0xd96e5565": "testThrowsRetractNotRetractable()", "0x3a314b24": "SendETH(address)", "0xbd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", "0x01da73ff": "isValidChannel(bytes)", "0x8f8bde82": "MicroDAO()", "0x2973e372": "isAlphaUpper(bytes1)", "0x1d2b7155": "activateImportFeeChargeRecord(address)", "0x06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", "0x9d7d6667": "multipliers()", "0x8af49ab7": "maintain(uint256,uint256)", "0x1f3a3a53": "mint(int256,uint256)", "0x74389991": "breakit()", "0x64371977": "set(uint256,string)", "0x3fa6497f": "AdminAddFunds()", "0xba7dc45f": "_removeOperation(bytes32)", "0xf81d087d": "prepareLottery()", "0xd239ea8b": "getSchemasLenght()", "0xa2f3ede2": "computeNameHash(bytes)", "0xa28ecf0b": "sendCryptedHand(bytes)", "0x003b9d88": "setLowerFeePercentage(uint8)", "0x98ea5fca": "depositEther()", "0xb9a0a708": "testChargesAmountApproved()", "0x55291dbd": "claimEther()", "0x2d2800f1": "react()", "0xa9d2293d": "lastClaimBlock()", "0xc45aa04c": "queryShareholders(bytes,uint256)", "0x67af1c81": "getRoundIndex()", "0x50b7b7a2": "setRating(bytes32,uint256)", "0x0aa7881a": "MintableToken(int256,uint256)", "0x0eb3f5a0": "sweepCommission(uint256)", "0x97d47a60": "registerAccountant(bytes,address)", "0xe2c61114": "setImportFee(address,uint256)", "0x6dbe31eb": "testSubBalance()", "0xf5c98aff": "GreeterB(bytes)", "0x79216f5f": "add_monster(uint16,uint16,uint16)", "0x023c23db": "getSize(uint256)", "0x0e1ca8a5": "Oraclize()", "0xa05e822a": "howManyOwners()", "0x313b7b19": "finance()", "0x51a5f2f2": "ConsultingHalf(address,address)", "0x1fb6e99d": "paymentNeeded(uint64)", "0x2bffc7ed": "add(string,address)", "0x5c52c2f5": "resetSpentToday()", "0x39cdde32": "ecverify(bytes32,bytes,address)", "0x64e24f4b": "UpdateClientTokenAccount(address)", "0x0d2560ee": "addMe()", "0xd8589be3": "CoinFlipper()", "0x3b46a7df": "ivote(bool)", "0xa6823189": "parseAddr(string)", "0xd0c24e93": "setNotUpdatable(bytes20)", "0x1f13de92": "inEther(uint256)", "0xb6ce5581": "oraclize_query(string,string[5],uint256)", "0x31ae0019": "KissBTC()", "0xdabf7dc8": "PayoutDividendEarly(uint256,bool)", "0xe3da41b5": "sortWinningNumbers(uint8[5])", "0x8ea98117": "setCoordinator(address)", "0xeff6be2f": "changeBaseFee(uint256)", "0x483a83df": "setKYC(address)", "0xf98a4eca": "executeVote(uint256)", "0x776d1a01": "unvest(uint256,uint256,uint256,uint256,uint256,bool)", "0x1cf52f2b": "isActiveRegistrant(address)", "0x24c9bf5e": "Prizes()", "0xb3822da8": "getContents(uint256[])", "0x999a9965": "setMany(uint256,int256,uint256,bytes,address,bytes)", "0xbade6033": "propose(bytes,uint256)", "0xd38159b8": "testPass()", "0xdabf7ec4": "helper(uint256)", "0xf4993bbd": "executeEmergencyWithdrawal()", "0x46ddb7db": "setAccountBalance(address,uint256)", "0xc12af1ce": "fipsRegister(uint256,bytes)", "0x8f420866": "DEFAULT_SEND_GAS()", "0x62770252": "needsFuneral(uint256)", "0x32921690": "checkDepth(address,uint256)", "0xb3c1a588": "parseMsgData(bytes)", "0x29cd5777": "_tryEraseSingleNode(bytes32)", "0xc6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", "0x9bd99195": "multiAccessChangeOwner(address,address)", "0xa360b26f": "Migrations()", "0x6c6f1d93": "getContractCreationValue()", "0x5445e38c": "_isCycleValid(uint256)", "0x2c85f8e0": "oraclize_query(string,string,string,uint256)", "0xcdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", "0xc8fdc891": "numberOfMonarchs()", "0xf578fd85": "assertEq0(bytes,bytes)", "0xda311588": "getCoin(uint256)", "0x9a35f886": "__dig_then_proxy(uint256)", "0xfa14df6b": "getChangeRecipientFee()", "0x95f0684b": "getPackageNameHash(uint256)", "0x42909a9e": "create_game()", "0x51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", "0xc4e41b22": "getTotalSupply()", "0x110df916": "getChannelID(uint256)", "0x4dc3141b": "CalcAll()", "0xb88a802f": "claimReward()", "0x82b2e257": "getTokenBalance()", "0x9bb0e4df": "getUint(int256,bytes32,string)", "0xc1ae4044": "checkBetColor(uint8)", "0x4a8b5389": "allocateBountyAndEcosystemTokens()", "0xdf06f906": "numBets()", "0xdeb80111": "transfer_asset(address,uint256)", "0x5216aeec": "totalInvested()", "0xe2deaa81": "set_reference(uint256,uint256,uint256)", "0x2ffda1e0": "setBlackflag(uint256,bool)", "0xba45b0b8": "transfer(address,address)", "0x7d7c2a1c": "rebalance()", "0xf32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", "0x4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", "0x5fc5d48b": "burnUnsoldCoins(address)", "0x4da47ba0": "TokenSale(address,uint256)", "0x3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", "0x6662e4be": "isWinningBet(uint256)", "0xa501e88d": "Content()", "0x4b70cec4": "getTime(address)", "0x12253a6c": "stopContract()", "0x173825d9": "removeOwner(address)", "0x26121ff0": "f()", "0x7b647652": "LittleEthereumDoubler()", "0x0c5c2ca3": "getIndexName(bytes)", "0x90f2c86d": "convertToWei(uint256,string)", "0x83f95f13": "openClaim(string)", "0xe8b5e51f": "invest()", "0xfdc4b338": "authorizeExtension(uint256,bool,string)", "0x4e116eb8": "unRegisterCertificationDb(address)", "0x5c8a1053": "extend(string)", "0xa932ed0d": "whitelistRemove(address)", "0xa1188e56": "getCurrentDifficulty()", "0xbf1fe420": "setGasPrice(uint256)", "0xead710c4": "greet(string)", "0x144fa6d7": "setToken(address)", "0x42402c2c": "fipsTransferMulti(bytes20[],address)", "0x93e84cd9": "play()", "0x741b3c39": "depositBond()", "0x23306ed6": "getMinimumBond()", "0x5f2e686d": "Ethereum_eight_bagger()", "0x9890220b": "drain()", "0x233120aa": "getChainyURL()", "0xe9dc0614": "vote(bytes)", "0x4df53a0f": "testSetApprovalDb()", "0x5fe27ab0": "createHKG(address)", "0xb56b2627": "add_owner(uint256,address)", "0x6f9a023c": "theultimatepyramid()", "0xc8796572": "collectFees()", "0xea3ebae6": "getConfigBool(bytes32)", "0x213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", "0xfae9d06d": "calculateTxFee(uint256,address)", "0x45d27edf": "forward_method(bytes,address,uint256,bytes)", "0x8e9ccd04": "computeIndexId(address,bytes)", "0x2f6ae467": "transferDocument(bytes,address)", "0x6e353a1d": "emergencyWithdrawal(address)", "0x7dd56411": "ownerOf(bytes32)", "0x9dc35799": "updateReading(uint256)", "0x246c02e6": "check_depth(uint16)", "0x03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", "0x881be8f7": "undo()", "0x953307d8": "revealScissors(string)", "0x7af30442": "testToggleBitFailIndexOOB()", "0x1e0c7ed4": "setConfigBool(bytes32,bool)", "0x2e3be78d": "setPrecisionDirect(uint8)", "0x95a078e8": "hasAccess(address)", "0x245a03ec": "scheduleSetIt(uint256,uint256)", "0xb863bd37": "random(uint256)", "0xa5e62f02": "fallbackRP()", "0x618fa9ce": "getBotBillingIndex(uint256,uint256)", "0x06909f69": "cancel(string,uint256)", "0x2b198366": "addCertifier(address)", "0x57e871e7": "blockNumber()", "0x2b98222e": "getInstitutionByAddress(address)", "0x89eedf00": "setPdfHash(bytes,bytes)", "0x7ac4b05e": "returnMyMoney(uint256)", "0x7fc90182": "Pool(uint256)", "0x291e6777": "sendVote(uint256,uint256)", "0x579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", "0xe1f21c67": "approve(address,address,uint256)", "0xa1b9af31": "unlockBets()", "0x92d0d153": "t()", "0x095ea7b3": "approve(address,uint256)", "0x9cb31079": "setLowLimit(uint256)", "0xb971b4e5": "setNotTransferable(bytes20)", "0x2a745971": "BlockKing()", "0x582ca57b": "get_associations()", "0xa0d605c6": "addCertificationDocumentInternal(address,bytes32)", "0x85233869": "NumberOfMiners()", "0xb0349184": "clearRecords(bytes32[])", "0x3e8f5b90": "setConfig(string,uint256)", "0x7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", "0xcc9ae3f6": "getMyReward()", "0xac900c2d": "unregisterSeller(address)", "0x306df22d": "GPSDestination(int256,int256,uint256)", "0x5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", "0x80dcaf27": "getRefNumber()", "0x4245b0f7": "Lottery()", "0xe46164c5": "waitingForPayout()", "0xa8c3ec48": "oraclize_query(uint256,string,string[2])", "0x58ea80e5": "setThroneCreationPrice(uint256)", "0x8a4fb16a": "getWithdrawal(uint256)", "0x4464aec7": "testTryGet()", "0xf3c37bd5": "Verifier(address,uint256,uint8)", "0xb4c4e005": "testTransferToAcceptAuthority()", "0x346b306a": "oraclize_query(string,string,string)", "0x24032866": "checkExecutionAuthorization(address,uint256)", "0x509f8633": "create_account()", "0x26da8e17": "ownerUpdateCostToCallOraclize(uint256)", "0x74a93e6c": "setTokenHolder(address,address)", "0x1baaeb91": "getSignature(bytes4,uint256)", "0x337c1e28": "getIndexRoot(bytes)", "0xac92fdb5": "getSaleDate(bytes16,uint256)", "0x13b2663b": "cash_received(string)", "0x68e4bd99": "testSetBitSuccess()", "0x20620f37": "onAuctionEnd(string)", "0x85528394": "currentClaimPriceWei()", "0x1995333b": "burnFunds(uint256)", "0x5184ffc9": "setAmbiAddress(address,bytes)", "0x269975d0": "GameDetails(uint256)", "0x29274fe1": "buyBOTx(uint256,string,string,address,uint256)", "0x720c4798": "workshop()", "0x6f9a5eab": "createTx(uint256,address,uint256)", "0xb66a323c": "claimThrone(string)", "0x14cabddb": "joinProof(uint256)", "0x76e4ca0d": "voteQuorum(uint256,bool)", "0xbcb3b5d2": "getGamblesList(uint256)", "0xf2080ba6": "Pong(int8)", "0xab470f05": "getCaller()", "0xe0b1cccb": "updateBalance(address,uint256)", "0x4889ca88": "receiveApproval(address,uint256,address)", "0xbc4b3365": "addFunds(address,uint256)", "0x5d1a3b82": "getOutcome(bytes32)", "0x8204ecdd": "getFee(bytes)", "0x49aa4ee2": "removeVote()", "0x9131d803": "testSetFrontend()", "0x72929b56": "getKudosPerProject(address)", "0x287418e7": "query(uint256,uint16)", "0xbb7859b5": "periodThree()", "0x7dc5cd32": "_patternToNumber(bytes)", "0xf7ea7a3d": "setTotalSupply(uint256)", "0xb3f98adc": "vote(uint8)", "0x655388be": "walkTowardsBlock()", "0x856deacf": "findTag(string)", "0xcaab0acc": "testThrowCreateRetracted()", "0xede8ebf3": "checkApprove(address,uint256)", "0x4296a9cb": "getNodeRightChild(bytes)", "0x03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", "0x87045369": "setCanCall(address,address,bytes4,bool)", "0x0ed21029": "getIssueAssignee(uint256,bytes32)", "0xc5958bda": "removeFile(bytes)", "0xa8026912": "setSource(address)", "0x05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", "0xed3058e0": "transferRight(address,bytes)", "0xba487e62": "newCampaign(uint32,uint96,uint16,uint16)", "0xd6c19fe0": "build(bytes,uint256,uint256,address)", "0xebb741cb": "getChannelSize(uint256)", "0x3b996f40": "quarter(uint32,uint32,uint32,uint32)", "0x0b7373d6": "giveAllBack()", "0x3f887fad": "buyShares(uint256,uint8,uint256,uint256)", "0xb5deeca7": "BaseRegistry()", "0x6dd6e87b": "checkOut(int256)", "0x90a85119": "checkBetResult(uint8)", "0x724121ae": "contentExists(uint256)", "0x67bd69a6": "getLastDuel2()", "0x821e9169": "testFailControllerChargeMoreThanApproved()", "0x083ae1fe": "setPackage(string)", "0x8eaa6ac0": "get(bytes32)", "0xf42aa287": "getBlobStore(bytes12)", "0x32a2c5d0": "getContractAddress()", "0x69d89575": "releaseFunds()", "0x984ac378": "lotteryTitle()", "0x3baf4e1e": "newPayment(uint256,uint256)", "0x938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0x47372325": "getChannelSize(address)", "0xcb10e0c5": "getLastDuel1()", "0x1a0919dc": "unregister(bytes32)", "0x6a3c1198": "_projectCancelNew()", "0x976b01c0": "setNotRetractable(bytes20)", "0x44d03ac6": "BlockhashFetch(address)", "0xb0fd935b": "registerCertificationDb(address)", "0x2c7c4549": "PurchasableToken(uint256)", "0x3e0a51b4": "TweetAccount()", "0xc5f310c0": "register(bytes12)", "0xc10dd4c6": "getEvents(bytes32[],address)", "0x37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", "0x1b9265b8": "pay()", "0xc91d7e9c": "getFee(bytes32[])", "0xf6c5c80d": "cleanUp()", "0x590e1ae3": "refund()", "0x9c709343": "split(bool,address)", "0xe68d3ae3": "escrow(uint256,string,address,uint256)", "0xa1cb31b7": "_state()", "0xfbac3951": "isBlocked(address)", "0x29dfdded": "addNewDonkey(address)", "0x7bc49a95": "play(uint256,uint256)", "0x5329c681": "checkTimeout(uint256)", "0x7c05caf3": "testCreateCostAuth()", "0x8606f905": "balanceOf(address,bytes)", "0xbe45fd62": "transfer(address,uint256,bytes)", "0xd7130651": "getCity(uint256)", "0xb2353d69": "updateRightLottery(address)", "0x01bb85a4": "__startBlock(string)", "0x4316abbb": "newJester(address)", "0x5c3e426c": "adminRetrieveDonations(address)", "0x293ffca3": "AddressReg()", "0x4156fdb7": "createSwap(uint256)", "0x2852b71c": "accept()", "0x027a5e3f": "getLastVersion(bytes)", "0x3d90d44d": "addPowerSource(address,uint256,uint256)", "0x1ab06ee5": "set(uint256,uint256)", "0x50f07cf9": "setReadingDelay(uint256)", "0x669e48aa": "get(uint256,uint256)", "0xdea9c72b": "getLatestPreReleaseTree(bytes32,uint32,uint32,uint32)", "0x60f66701": "useCoupon(string)", "0x2431f164": "process_payment()", "0x17623e5b": "unauthorizeManager(address)", "0x367bbd78": "strlen(string)", "0xbab86ea8": "test(string,string)", "0x25f3da52": "GetBankAccountNumber()", "0xebb045fa": "PublicResolver(address)", "0xdd57d5c5": "setTrust(address)", "0x22e803c2": "transferBounty()", "0x12c8052f": "won()", "0x3535cd52": "setDailyCosts(uint256)", "0x92d8c8cf": "setupImportFee(address,uint256)", "0x53caf582": "testThrowSetNotUpdatableNotOwner()", "0xb3ade772": "shipProducts(string,string)", "0x61472fd4": "CSGOBets()", "0x5c7c9aa4": "checkAccountState(address)", "0x6560a307": "suggestedGas()", "0xd0d552dd": "setAsset(address)", "0xc02f081a": "shiftBits(bytes,int256)", "0x9348cef7": "reveal(uint256,uint256)", "0x5ca1c5a0": "getNodeValue(bytes)", "0x34c1b4ba": "sha(bytes)", "0xe0117441": "setRegistrationPrice(uint256)", "0x92698814": "reserved(bytes32)", "0xaa1e84de": "hash(bytes)", "0x2125b65b": "transfer(uint32,address,uint224)", "0x9f9eac67": "ChangeName(string)", "0x7eb69ba1": "hint(int256,bytes32,string,bytes20)", "0xc6888fa1": "multiply(uint256)", "0xa9059cbb": "transfer(address,uint256)", "0x84c344fe": "_register(bytes4,string)", "0x744d8b4f": "recordWin(uint256,uint256)", "0xad1ef61e": "donkeyInvested(address)", "0xb4787dc5": "linkEID(bytes,bytes)", "0x7b1cbb13": "getChannelValue(bytes)", "0xd0febe4c": "buyTokens()", "0x74f519db": "setLastTimestamp(uint256,uint256)", "0xe30081a0": "setAddress(address)", "0x6fd902e1": "getCurrentBlockNumber()", "0x25d8dcf2": "betAndFlip()", "0xc062f578": "updateStage()", "0xe0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x854f4817": "buyKissBTCWithCallback(address,uint256)", "0x58b1f29c": "refundBounty(uint256)", "0x0645b5d5": "getMyShareholderID()", "0xe9c63b9c": "requestPeerBalance()", "0x1b03316f": "getSecond()", "0xbcc6092a": "MyEtherBank()", "0x1cf43b63": "extractExportFeeChargeLength()", "0x5e58f141": "shares(address,bytes,int256)", "0x6103d70b": "withdrawPayments()", "0x3e0663e0": "AdminDrawProcess()", "0xa0f029fc": "ContractorInterface(address,address,address)", "0xe604cf9f": "get_all_squares()", "0xd13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", "0xb74bc710": "LuckyDoubler()", "0x611f69de": "__proxy_motion(address,uint256,uint256,bytes)", "0xbb814e9e": "versionExists(bytes32)", "0x545e7c61": "deploy(address,address)", "0x1b437d0c": "compareLastCalldata(bytes)", "0x845051d3": "testContractsNotNull()", "0x23de6651": "emitTransfer(address,address,uint256)", "0xd78c20ff": "voteApprove(uint256)", "0x6f13e01b": "EthVenturePlugin()", "0x1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", "0x13d4bc24": "buyTokenProxy(address)", "0xd509b16c": "testWithdraw()", "0x2f54bf6e": "isOwner(address)", "0xf60381a1": "stra2cbor(string[])", "0x34dbe44d": "getLastBlockNumberUsed()", "0x28dcfdac": "getSignsCount(uint256)", "0x2888f9d0": "updateMaxBet()", "0xc3b2556d": "lookup(bytes)", "0x6fbaaa1e": "currentMultiplier()", "0xe241c1d9": "deriveKey(uint256,uint256,uint256)", "0x5b37e150": "create(bytes32,bytes)", "0xa1c95ac2": "GSIToken(uint256,string,uint8,string,address)", "0xfc9e53df": "setNextRegistrar(address)", "0x34e8980f": "bootUpHangouts()", "0x457dd8b3": "setMasterKey(address)", "0xdb833e3a": "sellShares(bytes32,uint8,uint256,uint256)", "0x1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", "0x4a00a522": "homebase(int256,int256)", "0xb938bf42": "sendBounty(bytes32)", "0x46be96c3": "amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x2fa00e58": "fipsTransfer(bytes20,address)", "0x95669952": "debtor(address,uint256)", "0x3f19d043": "getContributions(address)", "0xeb455dc6": "sendBitcoin(string,uint256)", "0x034cb28e": "addressOf(address,bytes)", "0x1e26fd33": "setBool(bool)", "0x1b55ba3a": "Start()", "0x6f3fe404": "updateBalances()", "0xc45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", "0x180aadb7": "underLimit(uint256)", "0xb44bd51d": "getConfig(string)", "0x93d79105": "hashRelease(bytes32,bytes32)", "0x9f8a13d7": "isActive(address)", "0x257bcd6a": "placeBet(uint256,bytes32,bytes32)", "0xdd10d97e": "getPlayerWaiting()", "0x6d16f79c": "__transferWithReference(address,uint256,string)", "0x6ce1417e": "Fund()", "0x67beaccb": "scheduleCall(bytes)", "0x4b0697e4": "Manager(address)", "0x6a7fc8b7": "setDailyWithdrawLimit(uint128)", "0x7a6e9df7": "getTimestamp(bytes)", "0x797af627": "confirm(bytes32)", "0x81183633": "setStandard(bytes32)", "0x6a1db1bf": "changeFee(uint256)", "0x4e6ab570": "insert_order(address,bool,uint32,uint128)", "0xa4e2d634": "isLocked()", "0x7c79ebce": "expired(uint64)", "0x20965255": "getValue()", "0xfd408767": "fireEventLog4()", "0xcf6b3822": "WatchCollectedFeesInSzabo()", "0x8f7fe231": "ValidetherOracle()", "0xbf12165e": "fillUpSlot(uint256,uint256)", "0xdabdc1f2": "ChangeActiveDigger(address)", "0xe9e7a667": "get_stake(bytes32)", "0x0ad95b44": "bribery()", "0xdb6fcf01": "is_destroyed(uint256)", "0x4378a6e3": "getAttributes(uint256)", "0x71589d6b": "newponzi()", "0x47274dbe": "disableUser(address,address)", "0xb40a5627": "bidCount()", "0xf1eae25c": "mortal()", "0x13af4035": "setOwner(address)", "0xaf030d2c": "setResult(uint256,uint256,bytes32)", "0x098ab6a1": "snapshotCount()", "0x27cca148": "lastClaimedBlock()", "0x940c154b": "lockBet(uint256)", "0x378c0605": "buyTickets(address)", "0xbcfcb03e": "allocateFounderTokens()", "0x0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", "0x0a7f4239": "getAccountFundContract(address)", "0xc96593a0": "The10ETHPyramid()", "0x22beb9b9": "scheduleDoIt(uint256)", "0xdb0e127a": "openDoor()", "0x3dc02266": "fipsRegister(uint256)", "0x7d242ae5": "setBasePrice(uint256,bytes)", "0xe82b7cb2": "proxySetCosignerAddress(address,bytes32)", "0xa60bbcd3": "ModelCoordinator()", "0xc26aa3c9": "lockUnicorn(uint256)", "0x96ff7e97": "requestIdentity()", "0x99753de7": "clear_level()", "0x69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", "0xda359dc8": "setBytes(bytes)", "0x6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", "0x9d170c5d": "getRef(string)", "0x11cd98ed": "convertToAllTable(uint256,string)", "0x67f809e9": "DynamicPyramid()", "0xd5f37f95": "sign(uint256,uint256,address)", "0xf5562753": "getClaimAmountForBlock(uint256)", "0xc9bbc8c0": "donkeyName(address)", "0x5858ef10": "testErrorNonOwnerCantBreach()", "0x74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", "0xee564544": "_slotCancelNew()", "0xf3bb9741": "commitmentCampaign(uint256,bytes32)", "0x2b68b9c6": "destruct()", "0xa9b8f7b8": "ProtectTheCastle()", "0x16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", "0xb524abcf": "totalSupply(bytes32)", "0x8006745b": "getPayout(address)", "0x137c638b": "getExtraGas()", "0x824d5603": "getIndex(uint16,uint16)", "0x245a6f74": "isProxyLegit(address)", "0x9eded57a": "paybackLast()", "0x7b1aa45f": "ownerDeposit()", "0x974654f4": "requiredGas()", "0x76d690bb": "BountyList()", "0xf4b2dfea": "Matching_Finneys()", "0xbd66528a": "claim(bytes32)", "0x85eac05f": "changeOwnerAddress(address)", "0xa69df4b5": "unlock()", "0xe6d9bb0f": "secondsUntilEnd()", "0xcd57a448": "SwapContract(address,uint256)", "0xb245fc92": "findNextMonth(uint256,bytes)", "0x7620f4bb": "fipsNotaryLegacy68b4()", "0x61886014": "combineDice(uint8,uint8)", "0xdf4ec249": "step3()", "0x2262cd94": "wroom()", "0x1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", "0xd8c34127": "isKnownSignature(string)", "0x8afa08bd": "setDrawDate(uint256)", "0xdb18c972": "play4(address,uint256)", "0x2f30283e": "testSomething()", "0x8ca17995": "divest(uint256)", "0x1ef3755d": "restart()", "0x99bb875c": "funeralAndBirth(bytes,int256,bytes)", "0x157ad5a1": "canWithdrawBond(address,uint256)", "0xfd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", "0xa10889fa": "setVersion(uint32,uint32,uint32,string,string)", "0x51cff8d9": "withdraw(address)", "0xbe999705": "addFunds(uint256)", "0x2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", "0xb50954b6": "cancelWaitingForOpponent()", "0xc42cd8cf": "etherSplit(address,address)", "0x42ce1488": "upload(string)", "0xad04592e": "owner_deposit()", "0xc2cf7326": "hasConfirmed(bytes32,address)", "0x1dbf3bc7": "spend(uint256)", "0x36b81feb": "Deed(address)", "0xf47289e1": "_ecDouble(uint256,uint256,uint256)", "0x026993e0": "Midas(address,address)", "0x5e404de3": "setMaximumCredit(uint256)", "0x0194db8e": "sum(uint256[])", "0xa04a0908": "execute(address,bytes,uint256)", "0x2b4a3b31": "doTransferFrom(address,address,uint256)", "0x96ed10a4": "issuePOIs()", "0xb75c7dc6": "revoke(bytes32)", "0x6056969b": "announce(bytes32)", "0xd63547e6": "GetFreeCnt()", "0x788e26e7": "sponsorDeposit()", "0x550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", "0xd4b1d19f": "testThrowsTransferDisabled()", "0x04706fdf": "giveContributionsBackProfitBugged()", "0x5d5483b3": "WatchAppliedFeePercentage()", "0x6bf8f85a": "forceFinish()", "0x3edd90e7": "NewOwner(address)", "0x7c69b5d1": "NewDeposit(uint256)", "0x866f6736": "trustedChildWithdraw()", "0xcdcb7c8f": "chase()", "0x60dccd89": "getContentAccount(uint256)", "0xbff1f9e1": "totalUsers()", "0x1aca00fd": "variable(uint256)", "0x6e658fbe": "myFundsExpireIn(uint256)", "0xddb1bdc8": "credit(address,uint256,uint256)", "0x934bc29d": "exampleFunction(uint256)", "0x113e6b66": "fipsAddToLedger(bytes20,address)", "0x1a88bc66": "slot()", "0xec97cff7": "addCertificationDocument(address,bytes32)", "0x0790e880": "setBlockappsAddr(address)", "0xe0ad411d": "assets(bytes)", "0x791b51f1": "Consulting(address,address)", "0xa26dbf26": "totalParticipants()", "0xb78b52df": "allocate(address,uint256)", "0xdb29fe12": "addShareholder(address)", "0x06459119": "testThrowsTransferNotTransferable()", "0xbadbaa3c": "setCallData()", "0x2c6b2c92": "checkProfitLossSinceInvestorChange()", "0x8aa6f1b1": "setUltimateOutcome(bytes32)", "0xecb98714": "random_damage(uint256)", "0x506e106c": "setToS(string)", "0xf0d474f9": "underdogCount()", "0x2212dbc3": "get_timestamp()", "0xd504ea1d": "getArray()", "0x9b29cb23": "getDailyPayment()", "0x9d3e069c": "StartDraw()", "0x12494160": "isHolder()", "0xbbd4e8c9": "numDeposits()", "0xfea2920e": "createNewDraw()", "0xff556ecb": "releaseUnicorn(uint256)", "0x3bed33ce": "withdrawEther(uint256)", "0xaa9669c1": "roll(uint256,bytes)", "0xa00aede9": "scheduleCall(uint256,address)", "0xc0819961": "Invest()", "0x1ed24195": "getPeriod()", "0x5babb758": "testSetUp()", "0xaaf9d13e": "buyTopDog(uint256,uint256)", "0x7c45ef6c": "stringToSig(string,string)", "0x7353f62b": "testGetApprovalDb()", "0xef7507c8": "testWinner(uint256)", "0x7ef95c6f": "extractAccountAllowanceRecordLength(address)", "0x66099706": "getChannelCred(address,uint256)", "0x5c242c59": "query1(uint256,string,string,uint256)", "0x299a7bcc": "setOwner(address,address)", "0xe1152343": "payout(uint256)", "0xd40a71fb": "step1()", "0xda9c6a46": "getReplyCount(uint256)", "0xffb7bfba": "watchProposal(uint256)", "0x2e1a7d4d": "withdraw(uint256)", "0x03da8902": "transfearDBOwner(address)", "0xc9bd2893": "fines()", "0xfdd3a879": "quick()", "0xda0774ad": "getCallFeeScalar(uint256,uint256)", "0x0f2c9329": "split(address,address)", "0xa3912ec8": "receiveEther()", "0xfd6f5430": "setContent(string,bytes32)", "0x99e0021f": "mergencyCall()", "0xb7aec6a5": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256)", "0x23145ca0": "forceCheck()", "0xc7cf28fe": "canClaimTimeout()", "0x26db7648": "proposedVersion()", "0x60a60fd8": "testProxyCallWithValue()", "0x044d0b06": "oraclize_query(string,string[2])", "0x4f013184": "investInTheSystem()", "0x0c9fd581": "assertTrue(bool)", "0x09574810": "getOperationsNumber()", "0x6e2edf30": "ETCSurvey(address)", "0x3cc86b80": "GetMoney(uint256,address)", "0xf7b89a3e": "getTotalCosts()", "0xb18c6847": "manualUpdateBalances()", "0x8a65d874": "userStats(address)", "0xf80b3cfa": "checkBetLowhigh(uint8)", "0xc2def3b9": "getOrganizer()", "0x2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", "0x1998aeef": "bid()", "0xc64e8bc0": "executeN(uint256)", "0xd4088e33": "setPrice(uint256,uint256,uint64)", "0xd263b7eb": "ownerkill()", "0xc478fc37": "EtherWheel(uint256,uint256,uint8)", "0x05b765ea": "getCertifierStatus(address)", "0x93c32e06": "changeFounder(address)", "0xf207564e": "register(uint256)", "0xae6c0b03": "canWithdrawBond(uint256)", "0x2b1071c9": "testTransferToNullAuthority()", "0xd9feeeb6": "fillMyOrder(uint256)", "0x9fb755d7": "setHotWallet(address)", "0x7f98444f": "randomEnd()", "0xf3fef3a3": "withdraw(address,uint256)", "0x48a0d754": "available()", "0x3af94817": "getPongvalRemote()", "0xec21a913": "setUint256(int256,uint256)", "0x6099af40": "setConfigBool(bytes,bool)", "0xf0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", "0xf93589ce": "didWin(bytes)", "0x1eb5ea2e": "returnFunds()", "0xa6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", "0x8a323b38": "Contract(uint256,string,uint8,string)", "0xb0f07e44": "registerData()", "0xc9d27afe": "vote(uint256,bool)", "0x64265b1a": "share_transfered(string)", "0x78205f67": "testThrowTransferEnableNotTransferable()", "0x081780f4": "clearRecord(bytes32)", "0xdd137b5d": "toBase58(uint256,uint8)", "0x9483e91a": "withdraw(address,uint256,bytes,uint256)", "0xc6502da8": "basePayment()", "0xe17e1274": "testTransferToRejectAuthority()", "0x9af605cb": "__proxy(address,bytes,uint256)", "0x7a8df1b9": "getAffiliateInfo(address)", "0x46b305d6": "lockBetsForWithdraw()", "0x7d4cf602": "buildDSBalanceDB()", "0xce87f626": "replaceWizardRP(address)", "0x125b8f06": "isInNextGeneration()", "0xd0068f80": "getClient(uint256)", "0x7f0899f2": "AddTicket(bytes5[])", "0xb15dcc25": "query(address,bytes2,uint256)", "0x07a9574a": "changeLeaderMessage(string)", "0x16e55626": "getDogName(address)", "0xbc058968": "updateThingData(bytes32[],bytes32[],uint88)", "0x02aa274b": "setForward(bytes4,address)", "0x08f235ec": "getDefaultPayment()", "0x1dd4914b": "withdrawEtherOrThrow(uint256)", "0x7ca31724": "tokenId(address)", "0x0c4f65bd": "getOwnerAddress()", "0xeec3cb41": "placeBet(bool[],uint256,uint256)", "0x9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", "0x468f02d2": "getUnderlyingPrice()", "0x74331be7": "sete(address)", "0xb05e390a": "TokenEther(string,string)", "0x89cc5ea8": "bid(string,address,uint256)", "0xa8893a6e": "getNumOfSalesWithSameId(bytes16)", "0x3defb962": "heartbeat()", "0x15a03930": "TossMyCoin()", "0x1d8ae626": "Security(string,string)", "0xf1bca7a4": "doCall(uint256)", "0xae6215d8": "getBlockHeight(bytes)", "0x8124bb0f": "continueExecution()", "0xc1cbbca7": "contribute(uint256)", "0xa48566ba": "serverSeed(address,bytes)", "0xc0f5a9cb": "deleteThing(bytes32[])", "0x4136aa35": "isAlive()", "0x6fe665e9": "SlotMachine()", "0xfaff50a8": "rootNode()", "0xaf769eff": "Paper()", "0x77863b61": "CrossWhitehatWithdraw(uint256,address)", "0x2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", "0xd2ef7398": "challenge()", "0x96e4ee3d": "convert(uint256,uint256)", "0x2dff6941": "content(bytes32)", "0x4d536f9f": "validateNameExt(bytes)", "0xd4d5d32a": "collectFee()", "0x6620a935": "sendToOwner()", "0x5084da18": "fipsOwner(bytes20)", "0xe419f189": "multiAccessIsOwner(address)", "0xa9fbc614": "lookupTicketHolder(uint256)", "0x11f72496": "testT()", "0x7365870b": "bet(uint256)", "0x09861b81": "flooredSub(uint256,uint256)", "0xe28fed1e": "userRescues(address)", "0x28cc413a": "getProof(uint256,uint256,uint256)", "0x9a8f09bd": "newKing(address)", "0x5d068051": "sendFees(address)", "0x49cbe338": "tryRead(uint64)", "0x691bfc89": "goods(uint16,uint256)", "0xfc36e15b": "vote(string)", "0x48107843": "getNextCallSibling(address)", "0x6461fe39": "transferFromWithReference(address,address,uint256,string)", "0x804e11dc": "testThrowsDisownNotTransferable()", "0x76f30ca1": "toContentID(address,uint256,string,bytes)", "0xa77b2e37": "Coin()", "0x3f2f1596": "setupTreasury(address,uint256)", "0x3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", "0x612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", "0x4cdb48e4": "isValidNym(address)", "0x5afa5036": "isCertified(address)", "0x9a1b420b": "OraclizeAddrResolver()", "0xec5c9036": "Crowdsale(address,uint256,uint256)", "0x01095962": "oraclize_setCustomGasPrice(uint256)", "0xe7e2aa0e": "buyer_cancel()", "0x2da8f764": "submitVideo(string,string)", "0x3395dc70": "acceptTransfer(address,address,uint256)", "0xdf143fb7": "HackerGold(address)", "0x63334c58": "transferETC(address)", "0x6a5da6e5": "followCampaign(uint256)", "0x49fb2dc5": "add_to_association(uint256,uint256,uint256)", "0x953aa435": "GetPrice(uint8)", "0xc1257bad": "testPassingAProposal()", "0x3bc5de30": "getData()", "0x4abb9d39": "depletable()", "0x129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", "0x902e64e5": "Oath()", "0x8c4dd5cd": "Democracy()", "0xbea124a6": "query(bytes,bytes,int256)", "0x69347990": "ownerWithdrawl()", "0x606deecd": "requestData()", "0x6720ceb1": "sendPayment()", "0xb1050da5": "newProposal(address,uint256,string,bytes)", "0xfeaa29d8": "insertProfitHere()", "0x36f9f49c": "etherandomSeed()", "0xae815843": "query(uint256,string,string,uint256)", "0x752d349c": "depthCheck(int256,int256)", "0xa24835d1": "destroy(address,uint256)", "0x26070774": "Token(address)", "0x6e0d98fe": "setProbabilities(uint32[])", "0x0761a004": "step(uint256,bytes)", "0xad82dcac": "testBlockhashCorrectFee()", "0x0900f010": "upgrade(address)", "0xa288fb1f": "setConfigUint(int256,bytes,uint256)", "0xe88b8ac6": "confirmAndCheck(bytes)", "0xf1a00a53": "unregisterListening(address)", "0xb17acdcd": "collectFees(uint256)", "0xb5d0f16e": "getGasScalar(uint256,uint256)", "0xae999ece": "reserve(string)", "0x95ceb4b3": "winningProtocal()", "0x1a93fa4b": "reorganizeSubUsers()", "0x9243e088": "setEnforceRevisions(bytes20)", "0x342454c7": "isDigit(bytes1)", "0x8e2c6f4d": "initiateVerification(address,bytes,bytes)", "0xddb5b3ac": "SellTokens()", "0xd18dfdc9": "parrot(uint256)", "0xd3732642": "FastRealisticPyramid()", "0x37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", "0xfb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", "0x50ab6f7f": "getMsgs()", "0x6b6a53fa": "testThrowsRestartNotOwner()", "0x4dc7cc55": "terminateAlt()", "0x8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", "0x5a74dee5": "multiAccessRemoveOwnerD(address,address)", "0xfd339d18": "testAuthorityTryAuthUnauthorized()", "0xd3d6a975": "testThrowsTransferNotEnabled()", "0x8aa001fc": "getSecond(uint256)", "0x2ec2c246": "unregister(address)", "0xbbdb31cb": "challenge(uint256,address,bool)", "0x635cfda2": "Incrementer()", "0x704b6c02": "setAdmin(address)", "0xc1c723f4": "validateProposedMonarchName(bytes)", "0xadf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", "0xbe7cddf8": "TwoD()", "0xc71b583b": "closeRequest()", "0x9cbf9e36": "createToken()", "0x69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", "0xd4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", "0xf9a7a2ef": "named(bytes)", "0xdbf45aa3": "EthBank()", "0xbb3ce7fe": "DepositHolder()", "0xfb5d5729": "getPongvalTransactional()", "0x2f0b15f6": "testGetUnset()", "0x62891b5d": "multiAccessChangeRequirement(uint256)", "0x538e0759": "refill()", "0x24c65f35": "updateRefundGas()", "0x62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", "0xd81f53fd": "EtherId()", "0xcea943ee": "getSaleConfig()", "0x23647398": "testThrowRetractNotOwner()", "0xcdcd77c0": "baz(uint32,bool)", "0xa677fbd9": "example2Func()", "0xa02b9aac": "getPaymentDataByAddress(address)", "0x268eb055": "setDescription(uint64,bytes)", "0x09d2d0b9": "setServiceAccount(address,bool)", "0x5f70d9ac": "getBot(uint256)", "0x63f80de3": "issueCoin(address,uint256,uint256)", "0x8570153e": "publish(string,string,bytes,address[])", "0x7975c56e": "oraclize_query(uint256,string,string)", "0x7c3064f1": "refundStake()", "0xef4ffee2": "Honestgamble()", "0xfdc193a4": "test3Fails()", "0x0eb495c2": "pushCity()", "0x6a357465": "payHours(address,uint256)", "0x93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", "0x0a9254e4": "setUp()", "0xc490a266": "toUInt(bytes)", "0xf666323e": "UUIDProvider()", "0x857d4c07": "throwScraps(uint256)", "0x7fd8ee68": "computeNameHashExt(bytes)", "0x7bd703e8": "getBalanceInEth(address)", "0x68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", "0xc7f758a8": "getProposal(uint256)", "0x824dbc9a": "changeMembership(address,uint256,bool,string)", "0x2a228fc2": "processWithdrawals()", "0xe0457884": "betResolution(uint8,uint8,uint8,bool)", "0x550538f6": "getOneTimeCosts()", "0xf3e84cf3": "createNewRevision(bytes32,bytes)", "0x77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", "0xcc189d00": "Vault(address,uint256)", "0x9e281a98": "withdrawToken(address,uint256)", "0x7b12df39": "userProfits()", "0xa843c97f": "attack(uint256,uint256,uint256[])", "0x9da680f3": "adjustRegistrationFee(uint256)", "0x3ea3f6c5": "activateRegistrar()", "0xb36df681": "ExecutableBase()", "0x0f3a1412": "getArrlist(uint256,uint256)", "0x8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", "0xb5d3a379": "CanaryTestnet()", "0x9894221a": "SendCashForHardwareReturn()", "0xc2b12a73": "setBytes32(bytes32)", "0xff1b4341": "easyPropose(address,uint256,uint256)", "0x927ed13a": "newClient(uint256,address)", "0x9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", "0x01518d76": "sendQuery(uint256)", "0x4112b7f1": "tryGetNameOwner(bytes)", "0xb759f954": "approve(uint256)", "0x810a882f": "setConfigBytes(bytes32,bytes32)", "0xea7a7184": "testGetBalanceDb()", "0xb0c8f9dc": "add(string)", "0xe59f611f": "InputLimit(uint256)", "0xdce293a7": "minLength(uint256)", "0xf509b627": "confirm(address,uint224,uint32,address)", "0xd48bfca7": "addToken(address)", "0x044f9ac8": "findThroneCalled(bytes)", "0x1d57bcf7": "ProofLibInterface()", "0x75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", "0x2a45a39a": "Post(address)", "0x29cbdc86": "buyin(address,uint256)", "0x3cbfed74": "getBondBalance()", "0x80a23ddf": "mintBadge(int256,address,uint256)", "0x96b76c23": "stand(uint256)", "0xc392f5a0": "getAllPackageReleaseHashes(string)", "0x4847a79c": "_transfer(address,uint256)", "0x905e6e42": "JSON_Test()", "0x9f489e4e": "getDeposit(uint256,address)", "0x4f8e624e": "Greeter(string)", "0x96013c9c": "testLatestPkgGetter()", "0xe4fc6b6d": "distribute()", "0x423d4ef2": "createChannel()", "0x24d7806c": "isAdmin(address)", "0x691fb8ea": "jumpIn()", "0xd50f6bf0": "transferETH(address)", "0xd0e0813a": "promote(address)", "0x528eedcb": "sendSafe(address,address,uint256)", "0x00faf4dd": "getTokenDivisor()", "0x46a1d95f": "closeMarket(bytes)", "0x318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", "0x49d55d9d": "receiveTransfer(uint256)", "0x4fa99dd0": "Matching_Ethers()", "0x99a5d747": "calculateFee(uint256)", "0x3c67c51e": "testLogs()", "0x12ab7242": "setupStackDepthLib(address)", "0xad9ec17e": "setGreyToken()", "0xc37e8cb2": "testExportAuthorized()", "0x43046844": "placeBet(uint8)", "0xc6e1c178": "TheLuckyOne(bytes)", "0x13d1aa2e": "f(uint256,uint256)", "0x64a4a5d7": "testBitsEqualSuccess()", "0xfb1669ca": "setBalance(uint256)", "0x40fdef80": "administration(uint256,string,uint256,uint256,address)", "0xcf7315c6": "retract(bytes20)", "0x76196c88": "setDnsrr(bytes32,bytes)", "0x08bf2d0d": "getOrderBook(uint256,uint256)", "0x021c309a": "solveBet(address,uint8,bool,uint8)", "0x4de162e4": "extractAccountLength()", "0x56fa47f0": "split(address)", "0xb3a0b1ef": "basicInfoGetter()", "0x26066ad5": "offer(uint256,bytes,uint256,bytes)", "0x99c724ef": "skipInLine(uint256,uint256)", "0x838445e8": "EtherAds(address,address,address)", "0xe06174e4": "settings()", "0xfac5bb92": "getPreRelease(bytes32)", "0x93c94acb": "calculateRewards(uint256[3][3])", "0xd7fa1007": "setHash(bytes32,bytes32)", "0x2a714078": "triggerAuth()", "0x4cd995da": "registerCompany(address,string)", "0xf6469342": "_setPackedBlockNumber(bytes32,uint256)", "0x8e7fd292": "trySetSubnodeOwner(bytes32,address)", "0x4f573cb2": "withdrawRevenue()", "0x924c28c1": "ContractInterface(address,address,address)", "0x4fc9c91a": "identityOf(bytes32)", "0x19901f1d": "TokenSale(uint256,uint256)", "0xaf8b7525": "CollectAndReduceFees(uint256)", "0x3ccb7dc9": "CrowdFund(uint256,uint256)", "0xaeeb96af": "Highlander()", "0xa126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", "0x13c89a8f": "getAllowedTime(bytes32)", "0xf38b0600": "fireEventLog3()", "0xc7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", "0xefc81a8c": "create()", "0x7429c086": "repeat()", "0x9c0a4bbc": "AlwaysFail()", "0xc3d23e10": "checkBet()", "0x28a45038": "testTryProxyCall()", "0xa668d7c9": "NiceGuyPonzi()", "0x06fe1fd7": "getPackageName(bytes32)", "0x29f27577": "InvestorList(uint256)", "0x57e25a79": "PullPaymentCapable()", "0x6d1669e1": "approveAndCall(address,address,uint256,bytes)", "0xa7e93e87": "retractLatestRevision(bytes20)", "0x9c7e8a03": "addParticipant(address,address,uint256)", "0xc6ab4514": "sendRobust(address,uint256,uint256)", "0xe8f6bc2e": "changeAccountLevelsAddr(address)", "0xb5d1990d": "numRecords()", "0x3e853128": "getGasForXau(address)", "0xa1add510": "hasRelation(bytes32,bytes32,address)", "0x31e3e2fe": "WithDraw()", "0x86723215": "createMarket(bytes,uint256,uint256,address)", "0xce845d1d": "currentBalance()", "0xc3a2c0c3": "scheduleCall()", "0xcf8eeb7e": "subBalance(address,uint256)", "0xaeb4f0d3": "RegisterTwo(address,address)", "0x3c716e08": "updateAuthority(address)", "0x9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", "0x0f06670a": "didWin(bytes32)", "0x74e4435f": "getUserAddress(uint256,bytes32)", "0x4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", "0x2ac9bf09": "bid(uint256,uint256,uint256)", "0xf11c4482": "approveFromProxy(address,address,uint256)", "0xfe992c98": "balanceOfAll(address)", "0x43e332c5": "Last_block_number_and_blockhash_used()", "0x0066753e": "removeCertifier(address)", "0xd299dac0": "blake2b(bytes,bytes,uint64)", "0x41395efa": "dgxBalance()", "0xac1b14ff": "proxyCall(uint256)", "0x7a6ce2e1": "getMsgSender()", "0x3855dcd6": "getContrarians_by_index(uint256)", "0xe6febc9b": "investorWithdraw(uint256)", "0xe6e91cfc": "voidFailedPayment(uint256)", "0x547eeac1": "acceptTransfer()", "0x9824425a": "takeOrder(uint256,uint256,uint256,uint256)", "0xdf25ee23": "getIndexId(address,bytes)", "0x0f3d7c3e": "release(string,uint32[3],string,string,string)", "0x15cff546": "isOperationBlocked()", "0x0b927666": "order(address,uint256,address,uint256,uint256,uint256)", "0x00ce2057": "triggerPayment()", "0x9a9c29f6": "settle(uint256,uint256)", "0x0f096163": "Chainy()", "0x2f5a5c5b": "timegame()", "0x900d85fa": "updatePreReleaseTree(bytes32)", "0x1cbd0519": "accountLevel(address)", "0x29a065bd": "getLOg(uint256)", "0xcec95aa1": "getReleaseHashForPackage(string,uint256)", "0x41524433": "sellKissBTCWithCallback(uint256,address,uint256)", "0x5e431709": "sealedBids(address,bytes32)", "0xf55b23c0": "externalLeave()", "0x31375242": "ownerSetTreasury(address)", "0x51b42b00": "deactivate()", "0x5af36e3e": "refund(uint256,uint256)", "0xc5096a69": "feeFor(address,address,uint256)", "0x059a500c": "makeDeposit(uint256)", "0x3c2e7d54": "priv_inMainChain__(int256,int256)", "0x9431f5f0": "withdrawFees(bytes)", "0x91b4a0e7": "Difficulty()", "0x268d50fe": "ownerSetHouseEdge(uint256)", "0x9644fcbd": "changeMembership(address,bool,string)", "0x66aa6f26": "payFee(bytes)", "0x353928d8": "helpRed()", "0x9c1193ea": "GreeterA(bytes)", "0xdd79e33e": "splitIdentifiers(string)", "0x4d268ddd": "payImporterBankForGoodsBought()", "0x656d2f63": "ManagedAccount(address)", "0x1216e771": "expiration(uint64)", "0x36f7cd70": "setPricePerStake(uint256)", "0x7842a3a4": "payReward()", "0x0ae50a39": "GetOwner()", "0xc81caae7": "acceptMember(address,string,string)", "0xe50dce71": "testControllerApproveSetsAllowance()", "0x4b64e492": "execute(address)", "0xd9e947f3": "kickOutMember(address)", "0x35cc59a9": "createSchema(bytes)", "0x2530c905": "rand(uint256)", "0x4894e37f": "__callback(bytes,string,bytes)", "0x70480275": "addAdmin(address)", "0x969cb7c3": "getPublisher(uint256)", "0x4ed4831a": "all(bool[7])", "0x2ef3accc": "getPrice(string,uint256)", "0x67854643": "getGenerationMemberLength(uint256)", "0xe6690fb1": "nextAuction(uint256)", "0x5829d310": "entries(int256)", "0x7fe1dc7e": "getToken(bytes)", "0xe7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", "0x41c12a70": "voteNo()", "0x6a28db13": "getQrLength()", "0xdd93890b": "setMeta(uint256,bytes32,bytes32)", "0xa48bdb7c": "results()", "0x9d888e86": "currentVersion()", "0xff81fb91": "unhint(int256,bytes32)", "0x9ec32d45": "challengeWinningOutcome(bytes,uint16)", "0xa0a2f629": "setReferralId(uint256,address)", "0x76577eae": "distributeEarnings()", "0x3e5cee05": "issueIOU(string,uint256,address)", "0xf3c7d275": "prenup(string,string,string,string,string,address,address)", "0x7154ae61": "CheckNumbers(uint8[5])", "0x05de4f07": "getContentParent(uint256)", "0xb81e43fc": "getEventName()", "0xa7eeea37": "NewContributor(uint256)", "0xe816a515": "takeFlight()", "0x05b2b03a": "CertificationCentre(address)", "0x74d4ab27": "fipsRegister()", "0x65fa2f7f": "getLastPrice(uint256)", "0xcc8b34ab": "CrowdCoin()", "0xe2b178a0": "getAuthority()", "0x5fb64fd6": "checkMembership(address)", "0x7948f523": "setAmbiAddress(address,bytes32)", "0xebb71194": "withdrawFees(bytes32)", "0x6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", "0x7065cb48": "addOwner(address)", "0x913f424c": "_ecMul(uint256,uint256,uint256,uint256)", "0xdbecc372": "Example(uint256)", "0x9f7f760c": "SimpleDice()", "0xca94692d": "abiSignature()", "0x61ba3377": "WatchLastTime()", "0x20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", "0x0a3b0a4f": "add(address)", "0xc51cf179": "calcBaseFeeForShares(uint256)", "0x8baced64": "isInPool(address)", "0x4dc415de": "reject()", "0x1555e337": "ConferenceCertificate()", "0x9555a942": "withdrawFrom(address,address,uint256)", "0xe1efda6d": "airaSend(address,address,uint256)", "0x8bfc2f33": "delegateDAOTokens(uint256)", "0xb964608d": "get_return_by_level(uint256)", "0x0c1fad51": "setSeedSourceA(address)", "0x98688a95": "Ai()", "0xd930a90b": "testFailMoveBalanceDueToInsufficientFunds()", "0x337b5988": "testSimpleNameRegister()", "0xf06d335e": "_recoverAccount(address,address)", "0x025bbbe5": "newSale(bytes16,uint256,uint256)", "0x984413b8": "_eraseNode(bytes32)", "0x5ea187c9": "BuildByteArray(bytes)", "0xc2a95cc9": "updateTrustSettings(address,uint256)", "0xde0ff7c5": "getEther()", "0x4ac7becf": "SimpleSign()", "0x252786e4": "WatchBlockSizeInEther()", "0xf2016a4f": "updateMinEthPerNotification(uint256)", "0xd743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", "0x9eab5253": "getMembers()", "0x51d38d5f": "addDeveloper(address,string)", "0x930ed251": "getSavedVar()", "0x715ef4ff": "resendFailedPayment(uint256)", "0xb1418cf4": "payHouse()", "0xe1569f6b": "testThrowsSetNotRetractableNotOwner()", "0x4ae9af61": "getBotStats(uint256,uint256)", "0xbf8ecf9c": "authProposals()", "0xc00ca383": "getByOwner(address,uint256)", "0xc8e7ca2e": "getMsgData()", "0x711953ef": "setGameAddress(address)", "0x63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", "0x72c87075": "testBlockHeaderFetch()", "0x4c7a2254": "checkMyWithdraw()", "0xab91c7b0": "queueLength()", "0x25209260": "PrepareRoll(uint256)", "0x58150c8b": "GameRegistry()", "0x75608264": "get_hash(uint8,bytes32)", "0x6510ef4d": "oraclize_query(uint256,string,string[5])", "0xd57a12f5": "testCheckSigs()", "0x3f415772": "releaseExists(bytes32)", "0xda25c0cd": "ThisExternalAssembly()", "0xf239e528": "sendOneEtherHome()", "0xc4321adb": "investInTheSystem(uint256)", "0x4fab2ca4": "testGetFrontend()", "0x05261aea": "finalize(uint256)", "0x576eac66": "setFundingGoal(uint256)", "0xe75528cc": "buyBuilding(uint256,uint256)", "0x6ed43eb0": "getInvestorList(uint256)", "0xb38415f3": "getConfigBytes(bytes)", "0x771ad635": "getContentCred(address,uint256)", "0x93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", "0xac35caee": "transferWithReference(address,uint256,string)", "0xc6803622": "wasCalled()", "0x8cfd8901": "_incBlock()", "0xfcf0f55b": "eventOracles(bytes32,uint256)", "0x505ff574": "register(address,uint256,bool)", "0xf824384a": "addInvestorAtID(uint256)", "0x6b9f96ea": "flush()", "0xc3d0a564": "getAccountBalance(bytes)", "0x30fd300f": "registerBytes32(address,bytes32)", "0xc3169ef2": "respond(uint256,uint256[4])", "0xcf1cd249": "secureSend(address)", "0x62c335c1": "checkCallback(address,uint256,bytes,bytes)", "0xb599afc8": "totalBetCount()", "0x69433e12": "setExchange(uint256)", "0x899942b8": "Devcon2Token()", "0x4c2d71b3": "setConfigAddress(bytes32,address)", "0xb974b0a3": "allData()", "0x27e8c2d8": "burnUnicornShares()", "0xf639365d": "testSetGet()", "0x2f5d3916": "testControllerApproveTriggersEvent()", "0x938b5f32": "origin()", "0xd60dcb5d": "Switch()", "0xde629235": "getCertificationDocumentAtIndex(address,uint256)", "0x329ce29e": "buyTile(uint256)", "0x59e2d30e": "testThrowBlobStoreNotRegistered()", "0xa005b87b": "NullMapTest()", "0xc13afa91": "object_locations(uint256)", "0x4848b1a5": "setData(uint256,uint256)", "0x80ede329": "getDocumentDetails(uint256)", "0x35d13969": "SendAllMoney()", "0x8040cac4": "testOverflow()", "0x9507d39a": "get(uint256)", "0xc040e6b8": "stage()", "0x18178358": "poke()", "0xfd782de5": "Proxy()", "0xfd68a422": "returnmoneycreator(uint8,uint128)", "0x86a50535": "voteFor(uint256)", "0x44602a7d": "testFallbackReturn()", "0xa230c524": "isMember(address)", "0x3ffbd47f": "register(string,string)", "0x8cecf66e": "_inverse(uint256)", "0x51017702": "isOutcomeSet(bytes32)", "0xd408746a": "GetContractAddr()", "0x20130753": "testThrowSetNotRetractableNotOwner()", "0xa0e2abf7": "getFirstActiveGamble()", "0x7c582304": "updateInvestmentTotal(address,uint256)", "0x95d89b41": "symbol()", "0x1768b436": "ETCSurvey()", "0x6d4ce63c": "get()", "0xc41a360a": "getOwner(uint256)", "0x49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", "0x6b64c769": "startAuction()", "0x084d72f4": "getWinningOutcome(uint256)", "0xd379be23": "claimer()", "0x41fa4876": "multiBlockRandomGen(uint256,uint256)", "0x5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", "0x47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", "0xe2bbb158": "deposit(uint256,uint256)", "0x953a7fab": "testMoveBalance()", "0xeacc5b3b": "safeSend(address,uint256,uint256)", "0x96f0aa8f": "findNextSecond(uint256,bytes)", "0xc8690233": "pubkey(bytes32)", "0x459f93f7": "getBuyers(uint256,address)", "0xf714de9c": "MultiAccess()", "0xf4a81d08": "getKudosGiven(address)", "0x5aa94a68": "computeResultVoteExtraInvestFeesRate()", "0xdb2a0cb7": "HumanStandardTokenFactory()", "0xdf3a6b10": "testMemberAddedEvent()", "0xce8d054e": "_setupNoCallback()", "0x8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", "0x24fb563f": "PlayerTickets(address,uint256,uint256)", "0x8c0e156d": "scheduleCall(bytes4,uint256,uint256)", "0xef04fdb7": "buyShares(bytes,uint8,uint256,uint256)", "0xa0afd731": "dividendBalance(address)", "0xc3c95c7b": "getMarket(bytes32)", "0x94ed9b77": "append(address,address)", "0xc87b36ed": "disableBetting()", "0x566735d8": "PreVNK(uint256,string,string,uint8)", "0x400aae08": "isInCurrentGeneration(address)", "0x44dd4b5e": "scheduleTransaction(address,uint256,bytes)", "0x48c54b9d": "claimTokens()", "0xe8930efd": "Investors(address)", "0xa6f2ae3a": "buy()", "0x12819817": "setXauForGasCurrator(address)", "0x056e1059": "oraclize_query(uint256,string,string,uint256)", "0x7824407f": "tokenSupply()", "0x7f0c949c": "setJurisdication(string)", "0x2e817963": "set_sdl(address)", "0xaee84f6b": "setTime(address,uint256)", "0x3c0dde1c": "_addPools(address,address)", "0xf8bd526e": "setCoinageContract(address)", "0x04b07a5e": "removeUpdater(address)", "0x11149ada": "getProof(uint256)", "0x4306cc3f": "queryEarnings(address)", "0x55241077": "setValue(uint256)", "0x492b67ea": "Etherdoc()", "0xadf59f99": "query(uint256,string,string)", "0x951b01c5": "setCertifierDb(address)", "0x8ae986cf": "registrantApprove(address)", "0xfa68b4ce": "lookupISO3116_1_alpha_3(bytes)", "0x7fdc8290": "isUnderscore(bytes1)", "0x89495172": "convictFinal(uint256,uint256)", "0x93e02d13": "FallenLeaders()", "0x3e476053": "moveFunds(address,uint256)", "0x8894dd2b": "addEther()", "0x8f03850b": "numContributors()", "0xbfc3cd2f": "testFailChargeMoreThanApproved()", "0x1d82e9c7": "EXTRA_GAS()", "0x278ecde1": "refund(uint256)", "0x0f825673": "deleteCoupon(string)", "0xa324ad24": "getMonth(uint256)", "0xd628e0a6": "WatchBalance()", "0xb238ad0e": "getDaysInMonth(uint8,uint16)", "0xd6febde8": "buy(uint256,uint256)", "0x370ec1c5": "_fillOrder(address,uint256)", "0x4c33fe94": "cancel(address)", "0xcdd13701": "getEventHashes(uint256[256])", "0xe1bc3003": "reveal(bytes,string)", "0xa2e62045": "update()", "0x75f45878": "scheduleCall(bytes,bytes,uint256)", "0xd2756e11": "finalizeNumber(uint256)", "0x48519189": "MonedaAlcala(string,string)", "0x009b9369": "getVoteNumber(uint256)", "0xdaa283c8": "__callback(bytes,string)", "0xfcce2622": "challengeAnswer(uint256,bytes)", "0xac18de43": "removeManager(address)", "0x16d9356f": "oraclize_query(string,string[4])", "0xd1734eac": "isInNextGeneration(address)", "0x524fa7b9": "whitelistAdd(address)", "0xa5eb7a4e": "operated()", "0xb0aab296": "getNextNode(bytes)", "0x1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", "0xdf811d7d": "numberOfPlayersInCurrentRound()", "0xca7dc5b1": "getNumberOfTweets()", "0x488b3538": "shares(address,bytes32,int256)", "0xebd83378": "get_blocks_for(uint256)", "0x399fdb86": "testFailNormalWhitelistReset()", "0xca0c1e62": "computeMerkle(int256,int256,int256[],int256,int256,int256[])", "0x8963dab4": "getNodeId(bytes,bytes)", "0x7d94792a": "seed()", "0xbcf175c8": "oraclize_cbAddress()", "0x38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", "0xa08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", "0xae47a290": "changeMaxBet(uint256)", "0xd12c1e28": "badgesOf(address)", "0x001f8d11": "removePackage(bytes32,string)", "0x54fd4d50": "version()", "0x89abeb19": "ProcessGameExt(uint256)", "0x3dd7c1b9": "newProduct(string,string,uint256,uint256)", "0xa396541e": "getPongvalTxRetrievalAttempted()", "0xcc8af0fe": "bytesToUInt(bytes,bytes)", "0x983b94fb": "finalizeAuction(bytes32)", "0x3df91162": "getUpdatable(bytes20)", "0x045236b4": "getChainyData(string)", "0x9c172f87": "EthVentures4()", "0x996a4be3": "uintToBytes(uint256,uint256)", "0x775a8f5e": "toBytes(uint256)", "0xb6db75a0": "isAdmin()", "0x0b6fcdb0": "getEnforceRevisions(bytes32)", "0x29d6f899": "BetOnBlue()", "0xe6cbcba9": "PlusOnePonzi()", "0xc9030ea0": "addMember(address,bool)", "0x8f283970": "changeAdmin(address)", "0x670c884e": "setup(address,uint256,uint256,uint256,address)", "0x808ab1d6": "getCertificationDbCount()", "0x018f5472": "isAUser(address)", "0x59c87d70": "request(bytes32)", "0x407cfe5e": "get_all_players()", "0x33f472b9": "MPO()", "0x662dbe96": "getNodeHeight(bytes)", "0x60b1e173": "getProof(uint256,address,address)", "0xf25eb5c1": "removeReverse()", "0x1d065dde": "_transferWithReward(address,address,uint256)", "0x65343fcb": "TrustEth()", "0xaa237e21": "set(bool,uint256)", "0x60e519c0": "computeMarginAmount()", "0xd9597016": "multisetCustomGasPrice(uint256[],address[])", "0x4f10acc1": "updateGoldFeeData(uint256)", "0x1e9ea66a": "balanceEther10000000(uint256)", "0xffe34512": "getNumChannels(address)", "0x71dd8862": "IndexOf()", "0xdd9dd688": "calcStopPrice()", "0x934354e7": "finishSpin()", "0x26881518": "setupFee(address)", "0x5eb3f639": "assertTrue(bool,bytes)", "0xe9540395": "getRewardDivisor()", "0x8e4afa51": "checkTransferToICAP(bytes32,uint256)", "0xb5b33eda": "scheduleCall(address,uint256)", "0x3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", "0x5fd9dff6": "allowance(address,address,bytes)", "0x0d244d68": "setNotRetractable(bytes32)", "0xe63697c8": "withdraw(uint256,address,uint256)", "0x3e5087cc": "testBasicThing()", "0xee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", "0xb1cc4348": "placeWager()", "0xb95594e5": "lineOfPlayers(uint256)", "0xa9cc4718": "fail()", "0x54385526": "setStatus(uint8,uint8,string)", "0xb45c48dc": "Security_AddPasswordSha3HashToBankAccount(bytes)", "0xace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", "0x1f5d0b4c": "address(address,address,uint256)", "0x7acbfb65": "setOwner(uint256,uint256)", "0x3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", "0xac04f5a7": "append(address)", "0x2fcb6628": "_stringGas(string,string)", "0xe977992d": "Doubler()", "0xc57a050e": "fairandeasy()", "0x412664ae": "sendToken(address,uint256)", "0x0afa9fb9": "contains(int256,address)", "0xb69ef8a8": "balance()", "0x264c8e9a": "whatWasTheVal()", "0x255016c8": "checkIfExploded()", "0xd716222c": "is_owner(uint256,address)", "0xc398f030": "expire(uint256,uint8,bytes,bytes,bytes)", "0xb7d454a4": "setNotTransferable(bytes32)", "0x4789aaef": "EthereumDice()", "0xc0171112": "timestamp(uint64)", "0x4f60f334": "multiAccessAddOwner(address)", "0x80aed05f": "LooneyDice()", "0x55ba343f": "getMarket(bytes)", "0x943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", "0xa27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", "0x8f731077": "extractAllowanceRecordLength(address)", "0xc3d345c4": "getHangoutAddress()", "0xa8978434": "softResolveAnswer(uint256)", "0x7cef6047": "getNavHistory(uint256)", "0xfae14192": "changeFeePercentage(uint256)", "0x2ddbc04a": "play2(address,uint256)", "0x3fb27b85": "seal()", "0xe8038e25": "TokenSale(uint256,uint256,address)", "0x8d92fdf3": "withdrawAsset(uint256)", "0x8579cbde": "getPrice(string,uint256,address)", "0x0d61b519": "executeProposal(uint256)", "0x63a599a4": "emergencyStop()", "0x661e3605": "ConstructorContract(uint256)", "0xfd7c460d": "ciberLottery()", "0x1f83f440": "getPaymentByAddress(address)", "0xdcf73856": "generateGroups()", "0x3c6e03d7": "thewhalegame()", "0x271cd760": "getPackageDb()", "0x53fefd7d": "changeMaxDeposit(uint256)", "0xae169a50": "claimReward(uint256)", "0x6da84ec0": "calcMarketFee(bytes32,uint256)", "0xb16562fe": "fipsRegister(address,bytes)", "0x041fe13d": "onEtherandomSeed(bytes32,bytes32)", "0x4a617faa": "shaBid(bytes32,uint256,bytes32)", "0x052b2aa7": "getRegistrants()", "0x0ff0a4df": "reFund()", "0xe56b9dce": "GetPrize(uint256)", "0x8eec99c8": "setNewAdmin(address)", "0xffcce369": "changeIPFSHash(string)", "0x40fdf515": "issuetender(address,uint256,uint256)", "0xef4bdfdd": "Set_your_game_number_between_1_15(string)", "0xa991cb0e": "respond(uint256)", "0x617fba04": "getRecord(address)", "0x475a9fa9": "issueTokens(address,uint256)", "0xd30fbd0d": "safeSubtract(uint256,uint256)", "0xe54d4051": "receiveInteger(bytes,uint256,uint16)", "0x8023ffbd": "getOverallSize()", "0x8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", "0x11e99c22": "arrival()", "0x10c1952f": "setLocked()", "0x039a21b8": "tryExecute(address,bytes,uint256)", "0x201dcd7a": "newChallenge(uint256,uint256)", "0x5aebfd14": "createFile(bytes)", "0xa6b1caa3": "gasScalar(uint256)", "0x200538c6": "DTE()", "0xd1738b72": "wroomWroom()", "0x22f607f6": "Escrow()", "0x7e81b6aa": "KingdomFactory()", "0x901d7775": "voteOutMasterKey(address)", "0xd6af9411": "Rouleth()", "0x7b0383b2": "initializeDispute(uint256)", "0x70c9edb7": "BTCRelayTools(address)", "0xe9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", "0xee82ac5e": "getBlockHash(uint256)", "0x727089f1": "extractAllowanceLength()", "0x8bbb5af7": "test1Fails()", "0x47872b42": "unsealBid(bytes32,uint256,bytes32)", "0x46b04e53": "PlayerInfoPerZone(uint256,uint256)", "0x752bacce": "getExecPrice()", "0x89d8ca67": "drawPot(bytes32,bytes32)", "0xc23697a8": "check(address)", "0x0af658ca": "personUpdateActivity(uint256,bool)", "0x24d4e90a": "ln(uint256)", "0x09d33f1d": "addRequest(address,uint256)", "0xc913b552": "getVersions(bytes)", "0xbb3b8dca": "getCertificateHash(bytes)", "0x3809c0bf": "doInfinite()", "0x853552d7": "_slotAddNew(address)", "0xccf1ab9b": "usurpation()", "0xe7dafdb6": "transfer_token(address,address,uint256)", "0x0c77a697": "claimFounders()", "0xda82a035": "sweepCommission()"} \ No newline at end of file diff --git a/cmd/clef/README.md b/cmd/clef/README.md index c9461be10194..90afe8c8c8e7 100644 --- a/cmd/clef/README.md +++ b/cmd/clef/README.md @@ -1,95 +1,87 @@ -Clef ----- -Clef can be used to sign transactions and data and is meant as a replacement for geth's account management. -This allows DApps not to depend on geth's account management. When a DApp wants to sign data it can send the data to -the signer, the signer will then provide the user with context and asks the user for permission to sign the data. If -the users grants the signing request the signer will send the signature back to the DApp. - -This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can -help in situations when a DApp is connected to a remote node because a local Ethereum node is not available, not -synchronised with the chain or a particular Ethereum node that has no built-in (or limited) account management. - -Clef can run as a daemon on the same machine, or off a usb-stick like [usb armory](https://inversepath.com/usbarmory), -or a separate VM in a [QubesOS](https://www.qubes-os.org/) type os setup. - -Check out - -* the [tutorial](tutorial.md) for some concrete examples on how the signer works. -* the [setup docs](docs/setup.md) for some information on how to configure it to work on QubesOS or USBArmory. +# Clef +Clef can be used to sign transactions and data and is meant as a(n eventual) replacement for Geth's account management. This allows DApps to not depend on Geth's account management. When a DApp wants to sign data (or a transaction), it can send the content to Clef, which will then provide the user with context and asks for permission to sign the content. If the users grants the signing request, Clef will send the signature back to the DApp. + +This setup allows a DApp to connect to a remote Ethereum node and send transactions that are locally signed. This can help in situations when a DApp is connected to an untrusted remote Ethereum node, because a local one is not available, not synchronised with the chain, or is a node that has no built-in (or limited) account management. + +Clef can run as a daemon on the same machine, off a usb-stick like [USB armory](https://inversepath.com/usbarmory), or even a separate VM in a [QubesOS](https://www.qubes-os.org/) type setup. + +Check out the + +* [CLI tutorial](tutorial.md) for some concrete examples on how Clef works. +* [Setup docs](docs/setup.md) for infos on how to configure Clef on QubesOS or USB Armory. +* [Data types](datatypes.md) for details on the communication messages between Clef and an external UI. ## Command line flags + Clef accepts the following command line options: + ``` COMMANDS: init Initialize the signer, generate secret storage attest Attest that a js-file is to be used - addpw Store a credential for a keystore file + setpw Store a credential for a keystore file + delpw Remove a credential for a keystore file + gendoc Generate documentation about json-rpc format help Shows a list of commands or help for one command GLOBAL OPTIONS: --loglevel value log level to emit to the screen (default: 4) --keystore value Directory for the keystore (default: "$HOME/.ethereum/keystore") - --configdir value Directory for clef configuration (default: "$HOME/.clef") - --networkid value Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby) (default: 1) + --configdir value Directory for Clef configuration (default: "$HOME/.clef") + --chainid value Chain id to use for signing (1=mainnet, 3=Ropsten, 4=Rinkeby, 5=Goerli) (default: 1) --lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength --nousb Disables monitoring for and managing USB hardware wallets + --pcscdpath value Path to the smartcard daemon (pcscd) socket file (default: "/run/pcscd/pcscd.comm") --rpcaddr value HTTP-RPC server listening interface (default: "localhost") + --rpcvhosts value Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard. (default: "localhost") + --ipcdisable Disable the IPC-RPC server + --ipcpath Filename for IPC socket/pipe within the datadir (explicit paths escape it) + --rpc Enable the HTTP-RPC server --rpcport value HTTP-RPC server listening port (default: 8550) - --signersecret value A file containing the password used to encrypt signer credentials, e.g. keystore credentials and ruleset hash - --4bytedb value File containing 4byte-identifiers (default: "./4byte.json") + --signersecret value A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash --4bytedb-custom value File used for writing new 4byte-identifiers submitted via API (default: "./4byte-custom.json") --auditlog value File used to emit audit logs. Set to "" to disable (default: "audit.log") - --rules value Enable rule-engine (default: "rules.json") - --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when the signer is started by an external process. - --stdio-ui-test Mechanism to test interface between signer and UI. Requires 'stdio-ui'. + --rules value Path to the rule file to auto-authorize requests with + --stdio-ui Use STDIN/STDOUT as a channel for an external UI. This means that an STDIN/STDOUT is used for RPC-communication with a e.g. a graphical user interface, and can be used when Clef is started by an external process. + --stdio-ui-test Mechanism to test interface between Clef and UI. Requires 'stdio-ui'. + --advanced If enabled, issues warnings instead of rejections for suspicious requests. Default off --help, -h show help --version, -v print the version - ``` - Example: + ``` -signer -keystore /my/keystore -chainid 4 +$ clef -keystore /my/keystore -chainid 4 ``` - ## Security model -The security model of the signer is as follows: +The security model of Clef is as follows: -* One critical component (the signer binary / daemon) is responsible for handling cryptographic operations: signing, private keys, encryption/decryption of keystore files. -* The signer binary has a well-defined 'external' API. +* One critical component (the Clef binary / daemon) is responsible for handling cryptographic operations: signing, private keys, encryption/decryption of keystore files. +* Clef has a well-defined 'external' API. * The 'external' API is considered UNTRUSTED. -* The signer binary also communicates with whatever process that invoked the binary, via stdin/stdout. +* Clef also communicates with whatever process that invoked the binary, via stdin/stdout. * This channel is considered 'trusted'. Over this channel, approvals and passwords are communicated. -The general flow for signing a transaction using e.g. geth is as follows: +The general flow for signing a transaction using e.g. Geth is as follows: ![image](sign_flow.png) -In this case, `geth` would be started with `--externalsigner=http://localhost:8550` and would relay requests to `eth.sendTransaction`. +In this case, `geth` would be started with `--signer http://localhost:8550` and would relay requests to `eth.sendTransaction`. ## TODOs Some snags and todos -* [ ] The signer should take a startup param "--no-change", for UIs that do not contain the capability - to perform changes to things, only approve/deny. Such a UI should be able to start the signer in - a more secure mode by telling it that it only wants approve/deny capabilities. - -* [x] It would be nice if the signer could collect new 4byte-id:s/method selectors, and have a -secondary database for those (`4byte_custom.json`). Users could then (optionally) submit their collections for -inclusion upstream. - -* It should be possible to configure the signer to check if an account is indeed known to it, before -passing on to the UI. The reason it currently does not, is that it would make it possible to enumerate -accounts if it immediately returned "unknown account". -* [x] It should be possible to configure the signer to auto-allow listing (certain) accounts, instead of asking every time. -* [x] Done Upon startup, the signer should spit out some info to the caller (particularly important when executed in `stdio-ui`-mode), -invoking methods with the following info: +* [ ] Clef should take a startup param "--no-change", for UIs that do not contain the capability to perform changes to things, only approve/deny. Such a UI should be able to start the signer in a more secure mode by telling it that it only wants approve/deny capabilities. +* [x] It would be nice if Clef could collect new 4byte-id:s/method selectors, and have a secondary database for those (`4byte_custom.json`). Users could then (optionally) submit their collections for inclusion upstream. +* [ ] It should be possible to configure Clef to check if an account is indeed known to it, before passing on to the UI. The reason it currently does not, is that it would make it possible to enumerate accounts if it immediately returned "unknown account" (side channel attack). +* [x] It should be possible to configure Clef to auto-allow listing (certain) accounts, instead of asking every time. +* [x] Done Upon startup, Clef should spit out some info to the caller (particularly important when executed in `stdio-ui`-mode), invoking methods with the following info: * [x] Version info about the signer - * [x] Address of API (http/ipc) + * [x] Address of API (HTTP/IPC) * [ ] List of known accounts * [ ] Have a default timeout on signing operations, so that if the user has not answered within e.g. 60 seconds, the request is rejected. * [ ] `account_signRawTransaction` @@ -102,21 +94,16 @@ invoking methods with the following info: * the number of unique recipients * Geth todos - - The signer should pass the `Origin` header as call-info to the UI. As of right now, the way that info about the request is -put together is a bit of a hack into the http server. This could probably be greatly improved - - Relay: Geth should be started in `geth --external_signer localhost:8550`. - - Currently, the Geth APIs use `common.Address` in the arguments to transaction submission (e.g `to` field). This - type is 20 `bytes`, and is incapable of carrying checksum information. The signer uses `common.MixedcaseAddress`, which - retains the original input. - - The Geth api should switch to use the same type, and relay `to`-account verbatim to the external api. - + - The signer should pass the `Origin` header as call-info to the UI. As of right now, the way that info about the request is put together is a bit of a hack into the HTTP server. This could probably be greatly improved. + - Relay: Geth should be started in `geth --signer localhost:8550`. + - Currently, the Geth APIs use `common.Address` in the arguments to transaction submission (e.g `to` field). This type is 20 `bytes`, and is incapable of carrying checksum information. The signer uses `common.MixedcaseAddress`, which retains the original input. + - The Geth API should switch to use the same type, and relay `to`-account verbatim to the external API. * [x] Storage - * [x] An encrypted key-value storage should be implemented + * [x] An encrypted key-value storage should be implemented. * See [rules.md](rules.md) for more info about this. - * Another potential thing to introduce is pairing. * To prevent spurious requests which users just accept, implement a way to "pair" the caller with the signer (external API). - * Thus geth/mist/cpp would cryptographically handshake and afterwards the caller would be allowed to make signing requests. + * Thus Geth/cpp would cryptographically handshake and afterwards the caller would be allowed to make signing requests. * This feature would make the addition of rules less dangerous. * Wallets / accounts. Add API methods for wallets. @@ -125,37 +112,31 @@ put together is a bit of a hack into the http server. This could probably be gre ### External API -The signer listens to HTTP requests on `rpcaddr`:`rpcport`, with the same JSONRPC standard as Geth. The messages are -expected to be JSON [jsonrpc 2.0 standard](http://www.jsonrpc.org/specification). +Clef listens to HTTP requests on `rpcaddr`:`rpcport` (or to IPC on `ipcpath`), with the same JSON-RPC standard as Geth. The messages are expected to be [JSON-RPC 2.0 standard](https://www.jsonrpc.org/specification). -Some of these call can require user interaction. Clients must be aware that responses -may be delayed significantly or may never be received if a users decides to ignore the confirmation request. +Some of these call can require user interaction. Clients must be aware that responses may be delayed significantly or may never be received if a users decides to ignore the confirmation request. -The External API is **untrusted** : it does not accept credentials over this api, nor does it expect -that requests have any authority. +The External API is **untrusted**: it does not accept credentials over this API, nor does it expect that requests have any authority. -### UI API +### Internal UI API -The signer has one native console-based UI, for operation without any standalone tools. -However, there is also an API to communicate with an external UI. To enable that UI, -the signer needs to be executed with the `--stdio-ui` option, which allocates the -`stdin`/`stdout` for the UI-api. +Clef has one native console-based UI, for operation without any standalone tools. However, there is also an API to communicate with an external UI. To enable that UI, the signer needs to be executed with the `--stdio-ui` option, which allocates `stdin` / `stdout` for the UI API. An example (insecure) proof-of-concept of has been implemented in `pythonsigner.py`. The model is as follows: * The user starts the UI app (`pythonsigner.py`). -* The UI app starts the `signer` with `--stdio-ui`, and listens to the +* The UI app starts `clef` with `--stdio-ui`, and listens to the process output for confirmation-requests. -* The `signer` opens the external http api. -* When the `signer` receives requests, it sends a `jsonrpc` request via `stdout`. -* The UI app prompts the user accordingly, and responds to the `signer` -* The `signer` signs (or not), and responds to the original request. +* `clef` opens the external HTTP API. +* When the `signer` receives requests, it sends a JSON-RPC request via `stdout`. +* The UI app prompts the user accordingly, and responds to `clef`. +* `clef` signs (or not), and responds to the original request. ## External API -See the [external api changelog](extapi_changelog.md) for information about changes to this API. +See the [external API changelog](extapi_changelog.md) for information about changes to this API. ### Encoding - number: positive integers that are hex encoded @@ -180,7 +161,7 @@ None #### Result - address [string]: account address that is derived from the generated key - url [string]: location of the keyfile - + #### Sample call ```json { @@ -189,7 +170,9 @@ None "method": "account_new", "params": [] } - +``` +Response +``` { "id": 0, "jsonrpc": "2.0", @@ -212,9 +195,9 @@ None #### Result - array with account records: - account.address [string]: account address that is derived from the generated key - - account.type [string]: type of the + - account.type [string]: type of the - account.url [string]: location of the account - + #### Sample call ```json { @@ -222,7 +205,9 @@ None "jsonrpc": "2.0", "method": "account_list" } - +``` +Response +``` { "id": 1, "jsonrpc": "2.0", @@ -261,7 +246,7 @@ None #### Result - signed transaction in RLP encoded form [data] - + #### Sample call ```json { @@ -285,8 +270,8 @@ Response ```json { + "id": 2, "jsonrpc": "2.0", - "id": 67, "error": { "code": -32000, "message": "Request denied" @@ -298,6 +283,7 @@ Response ```json { + "id": 67, "jsonrpc": "2.0", "method": "account_signTransaction", "params": [ @@ -311,8 +297,7 @@ Response "data": "0x4401a6e40000000000000000000000000000000000000000000000000000000000000012" }, "safeSend(address)" - ], - "id": 67 + ] } ``` Response @@ -346,26 +331,30 @@ Bash example: {"jsonrpc":"2.0","id":67,"result":{"raw":"0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","tx":{"nonce":"0x0","gasPrice":"0x1","gas":"0x333","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0","value":"0x0","input":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012","v":"0x26","r":"0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e","s":"0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663","hash":"0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"}}} ``` - -### account_sign +### account_signData #### Sign data Signs a chunk of data and returns the calculated signature. #### Arguments + - content type [string]: type of signed data + - `text/validator`: hex data with custom validator defined in a contract + - `application/clique`: [clique](https://github.com/ethereum/EIPs/issues/225) headers + - `text/plain`: simple hex data validated by `account_ecRecover` - account [address]: account to sign with - - data [data]: data to sign + - data [object]: data to sign #### Result - calculated signature [data] - + #### Sample call ```json { "id": 3, "jsonrpc": "2.0", - "method": "account_sign", + "method": "account_signData", "params": [ + "data/plain", "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", "0xaabbccdd" ] @@ -381,18 +370,116 @@ Response } ``` +### account_signTypedData + +#### Sign data + Signs a chunk of structured data conformant to [EIP712]([EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md)) and returns the calculated signature. + +#### Arguments + - account [address]: account to sign with + - data [object]: data to sign + +#### Result + - calculated signature [data] + +#### Sample call +```json +{ + "id": 68, + "jsonrpc": "2.0", + "method": "account_signTypedData", + "params": [ + "0xcd2a3d9f938e13cd947ec05abc7fe734df8dd826", + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } + ] +} +``` +Response + +```json +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0x4355c47d63924e8a72e509b65029052eb6c299d53a04e167c5775fd466751c9d07299936d304c153f6443dfa05f40ff007d72911b6f72307f996231605b915621c" +} +``` + ### account_ecRecover -#### Recover address - Derive the address from the account that was used to sign data from the data and signature. - +#### Sign data + +Derive the address from the account that was used to sign data with content type `text/plain` and the signature. + #### Arguments - data [data]: data that was signed - signature [data]: the signature to verify #### Result - derived account [address] - + #### Sample call ```json { @@ -400,6 +487,7 @@ Response "jsonrpc": "2.0", "method": "account_ecRecover", "params": [ + "data/plain", "0xaabbccdd", "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c" ] @@ -413,7 +501,6 @@ Response "jsonrpc": "2.0", "result": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db" } - ``` ### account_import @@ -421,16 +508,16 @@ Response #### Import account Import a private key into the keystore. The imported key is expected to be encrypted according to the web3 keystore format. - + #### Arguments - - account [object]: key in [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) (retrieved with account_export) + - account [object]: key in [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) (retrieved with account_export) #### Result - imported key [object]: - key.address [address]: address of the imported key - key.type [string]: type of the account - key.url [string]: key URL - + #### Sample call ```json { @@ -458,7 +545,7 @@ Response }, "id": "09bccb61-b8d3-4e93-bf4f-205a8194f0b9", "version": 3 - }, + } ] } ``` @@ -479,16 +566,16 @@ Response ### account_export #### Export account from keystore - Export a private key from the keystore. The exported private key is encrypted with the original passphrase. When the - key is imported later this passphrase is required. - + Export a private key from the keystore. The exported private key is encrypted with the original password. When the + key is imported later this password is required. + #### Arguments - account [address]: export private key that is associated with this account #### Result - exported key, see [web3 keystore format](https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition) for more information - + #### Sample call ```json { @@ -530,8 +617,6 @@ Response } ``` - - ## UI API These methods needs to be implemented by a UI listener. @@ -542,13 +627,13 @@ See `pythonsigner`, which can be invoked via `python3 pythonsigner.py test` to p All methods in this API uses object-based parameters, so that there can be no mixups of parameters: each piece of data is accessed by key. -See the [ui api changelog](intapi_changelog.md) for information about changes to this API. +See the [ui API changelog](intapi_changelog.md) for information about changes to this API. OBS! A slight deviation from `json` standard is in place: every request and response should be confined to a single line. Whereas the `json` specification allows for linebreaks, linebreaks __should not__ be used in this communication channel, to make things simpler for both parties. -### ApproveTx +### ApproveTx / `ui_approveTx` Invoked when there's a transaction for approval. @@ -560,13 +645,13 @@ Here's a method invocation: curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x694267f14675d7e1b9494fd8d72fefe1755710fa","gas":"0x333","gasPrice":"0x1","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x0", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"safeSend(address)"],"id":67}' http://localhost:8550/ ``` - +Results in the following invocation on the UI: ```json { "jsonrpc": "2.0", "id": 1, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -611,7 +696,7 @@ curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","me { "jsonrpc": "2.0", "id": 1, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -654,7 +739,7 @@ One which has missing `to`, but with no `data`: { "jsonrpc": "2.0", "id": 3, - "method": "ApproveTx", + "method": "ui_approveTx", "params": [ { "transaction": { @@ -683,33 +768,7 @@ One which has missing `to`, but with no `data`: } ``` -### ApproveExport - -Invoked when a request to export an account has been made. - -#### Sample call - -```json - -{ - "jsonrpc": "2.0", - "id": 7, - "method": "ApproveExport", - "params": [ - { - "address": "0x0000000000000000000000000000000000000000", - "meta": { - "remote": "signer binary", - "local": "main", - "scheme": "in-proc" - } - } - ] -} - -``` - -### ApproveListing +### ApproveListing / `ui_approveListing` Invoked when a request for account listing has been made. @@ -720,7 +779,7 @@ Invoked when a request for account listing has been made. { "jsonrpc": "2.0", "id": 5, - "method": "ApproveListing", + "method": "ui_approveListing", "params": [ { "accounts": [ @@ -747,7 +806,7 @@ Invoked when a request for account listing has been made. ``` -### ApproveSignData +### ApproveSignData / `ui_approveSignData` #### Sample call @@ -755,7 +814,7 @@ Invoked when a request for account listing has been made. { "jsonrpc": "2.0", "id": 4, - "method": "ApproveSignData", + "method": "ui_approveSignData", "params": [ { "address": "0x123409812340981234098123409812deadbeef42", @@ -773,7 +832,7 @@ Invoked when a request for account listing has been made. ``` -### ShowInfo +### ShowInfo / `ui_showInfo` The UI should show the info to the user. Does not expect response. @@ -783,7 +842,7 @@ The UI should show the info to the user. Does not expect response. { "jsonrpc": "2.0", "id": 9, - "method": "ShowInfo", + "method": "ui_showInfo", "params": [ { "text": "Tests completed" @@ -793,7 +852,7 @@ The UI should show the info to the user. Does not expect response. ``` -### ShowError +### ShowError / `ui_showError` The UI should show the info to the user. Does not expect response. @@ -812,7 +871,7 @@ The UI should show the info to the user. Does not expect response. ``` -### OnApproved +### OnApprovedTx / `ui_onApprovedTx` `OnApprovedTx` is called when a transaction has been approved and signed. The call contains the return value that will be sent to the external caller. The return value from this method is ignored - the reason for having this callback is to allow the ruleset to keep track of approved transactions. @@ -820,9 +879,9 @@ When implementing rate-limited rules, this callback should be used. TLDR; Use this method to keep track of signed transactions, instead of using the data in `ApproveTx`. -### OnSignerStartup +### OnSignerStartup / `ui_onSignerStartup` -This method provide the UI with information about what API version the signer uses (both internal and external) aswell as build-info and external api, +This method provide the UI with information about what API version the signer uses (both internal and external) aswell as build-info and external API, in k/v-form. Example call: @@ -831,7 +890,7 @@ Example call: { "jsonrpc": "2.0", "id": 1, - "method": "OnSignerStartup", + "method": "ui_onSignerStartup", "params": [ { "info": { @@ -855,7 +914,7 @@ A UI should conform to the following rules. * For example, not load icons, stylesheets from the internet * Not load files from the filesystem, unless they reside in the same local directory (e.g. config files) * A Graphical UI MUST show the blocky-identicon for ethereum addresses. -* A UI MUST warn display approproate warning if the destination-account is formatted with invalid checksum. +* A UI MUST warn display appropriate warning if the destination-account is formatted with invalid checksum. * A UI MUST NOT open any ports or services * The signer opens the public port * A UI SHOULD verify the permissions on the signer binary, and refuse to execute or warn if permissions allow non-user write. @@ -866,9 +925,9 @@ A UI should conform to the following rules. along with the UI. -### UI Implementations +### UI Implementations -There are a couple of implementation for a UI. We'll try to keep this list up to date. +There are a couple of implementation for a UI. We'll try to keep this list up to date. | Name | Repo | UI type| No external resources| Blocky support| Verifies permissions | Hash information | No secondary storage | Statically linked| Can modify parameters| | ---- | ---- | -------| ---- | ---- | ---- |---- | ---- | ---- | ---- | diff --git a/cmd/clef/datatypes.md b/cmd/clef/datatypes.md new file mode 100644 index 000000000000..5ebf9adc9712 --- /dev/null +++ b/cmd/clef/datatypes.md @@ -0,0 +1,224 @@ +## UI Client interface + +These data types are defined in the channel between clef and the UI +### SignDataRequest + +SignDataRequest contains information about a pending request to sign some data. The data to be signed can be of various types, defined by content-type. Clef has done most of the work in canonicalizing and making sense of the data, and it's up to the UI to presentthe user with the contents of the `message` + +Example: +```json +{ + "content_type": "text/plain", + "address": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "raw_data": "GUV0aGVyZXVtIFNpZ25lZCBNZXNzYWdlOgoxMWhlbGxvIHdvcmxk", + "messages": [ + { + "name": "message", + "value": "\u0019Ethereum Signed Message:\n11hello world", + "type": "text/plain" + } + ], + "hash": "0xd9eba16ed0ecae432b71fe008c98cc872bb4cc214d3220a36f365326cf807d68", + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### SignDataResponse - approve + +Response to SignDataRequest + +Example: +```json +{ + "approved": true +} +``` +### SignDataResponse - deny + +Response to SignDataRequest + +Example: +```json +{ + "approved": false +} +``` +### SignTxRequest + +SignTxRequest contains information about a pending request to sign a transaction. Aside from the transaction itself, there is also a `call_info`-struct. That struct contains messages of various types, that the user should be informed of. + +As in any request, it's important to consider that the `meta` info also contains untrusted data. + +The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, they must be identical, otherwise an error is generated. However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket) + +Example: +```json +{ + "transaction": { + "from": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "to": null, + "gas": "0x3e8", + "gasPrice": "0x5", + "value": "0x6", + "nonce": "0x1", + "data": "0x01020304" + }, + "call_info": [ + { + "type": "Warning", + "message": "Something looks odd, show this message as a warning" + }, + { + "type": "Info", + "message": "User should see this aswell" + } + ], + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### SignTxResponse - approve + +Response to request to sign a transaction. This response needs to contain the `transaction`, because the UI is free to make modifications to the transaction. + +Example: +```json +{ + "transaction": { + "from": "0xDEADbEeF000000000000000000000000DeaDbeEf", + "to": null, + "gas": "0x3e8", + "gasPrice": "0x5", + "value": "0x6", + "nonce": "0x4", + "data": "0x04030201" + }, + "approved": true +} +``` +### SignTxResponse - deny + +Response to SignTxRequest. When denying a request, there's no need to provide the transaction in return + +Example: +```json +{ + "transaction": { + "from": "0x", + "to": null, + "gas": "0x0", + "gasPrice": "0x0", + "value": "0x0", + "nonce": "0x0", + "data": null + }, + "approved": false +} +``` +### OnApproved - SignTransactionResult + +SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)` + +This occurs _after_ successful completion of the entire signing procedure, but right before the signed transaction is passed to the external caller. This method (and data) can be used by the UI to signal to the user that the transaction was signed, but it is primarily useful for ruleset implementations. + +A ruleset that implements a rate limitation needs to know what transactions are sent out to the external interface. By hooking into this methods, the ruleset can maintain track of that count. + +**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. + +The `OnApproved` method cannot be responded to, it's purely informative + +Example: +```json +{ + "raw": "0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed", + "tx": { + "nonce": "0x64", + "gasPrice": "0x1", + "gas": "0x1", + "to": "0x8a8eafb1cf62bfbeb1741769dae1a9dd47996192", + "value": "0x1", + "input": "0x", + "v": "0x26", + "r": "0x716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293", + "s": "0x4e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed", + "hash": "0x662f6d772692dd692f1b5e8baa77a9ff95bbd909362df3fc3d301aafebde5441" + } +} +``` +### UserInputRequest + +Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free) + +Example: +```json +{ + "prompt": "The question to ask the user", + "title": "The title here", + "isPassword": true +} +``` +### UserInputResponse + +Response to UserInputRequest + +Example: +```json +{ + "text": "The textual response from user" +} +``` +### ListRequest + +Sent when a request has been made to list addresses. The UI is provided with the full `account`s, including local directory names. Note: this information is not passed back to the external caller, who only sees the `address`es. + +Example: +```json +{ + "accounts": [ + { + "address": "0xdeadbeef000000000000000000000000deadbeef", + "url": "keystore:///path/to/keyfile/a" + }, + { + "address": "0x1111111122222222222233333333334444444444", + "url": "keystore:///path/to/keyfile/b" + } + ], + "meta": { + "remote": "localhost:9999", + "local": "localhost:8545", + "scheme": "http", + "User-Agent": "Firefox 3.2", + "Origin": "www.malicious.ru" + } +} +``` +### ListResponse + +Response to list request. The response contains a list of all addresses to show to the caller. Note: the UI is free to respond with any address the caller, regardless of whether it exists or not + +Example: +```json +{ + "accounts": [ + { + "address": "0x0000000000000000000000000000000000000000", + "url": ".. ignored .." + }, + { + "address": "0xffffffffffffffffffffffffffffffffffffffff", + "url": "" + } + ] +} +``` diff --git a/cmd/clef/docs/clef_architecture_pt1.png b/cmd/clef/docs/clef_architecture_pt1.png new file mode 100644 index 0000000000000000000000000000000000000000..e40e532f3051d6b583698b539ae97bf12560f740 GIT binary patch literal 69221 zcmcG$c|4Tu`!~)+A`w!_mTbwEeG8ScNA~Q**ctmiLlPxR_GGJ&WEi{bBV^yRZzIcK zF!sS%e%Ew=?)&cke4pRv`F@}0_4H4dYdNpuc%R4dK9=*m=G9{jr3)0-D2RxNE~qF! z&?X`}gCrsX^_@EloH6%dC?g^YCQ^BDPuF*RHJvQ*$L_(t{Vt+nxP<9g>Px|~WqzWO zmU4(u*?I({BmFJCAUi{8o}sOKRJo7 zp`jn(p*Z{y+N-JtvL2vRxH;{opRW(R^Z)#x>p6LO{A%6e{c|DLHRfK0PzIXB5?O%r=^@}7R%0Ey3A0Gafv4V-{NS+b> z+iQW7-15UOTGbjx!rPsL8Vp>v>h%Jvr#Md~T#M@JW{au!e2v0l4!4xjZT&V}4qCG` z$2~l&7QD$LRpmcnPjTl3+mV&i3$}`Xr~!=E$^r?xt=}VsyMwnpeTR`Yk~(e@8yUwm z+&K+Aa2iNc$iB5F9;hr7*V@{pAwgF4`mATu>G=!xTSd=jUrR zgV*U%_*)|(e12U+IGu>B%gK0Olj>^n41dYOpoZlewG*_kpVtz89dC}qw{W~@)T(kb#i zw7YO5FZqy(#**YJ!B{R@{FDq+g`Y5e5}bDJ(nj$h$Jr-43>A;tLm7nK_OyB3{8On0 z2CNq0lYCg1bmR2iNNU~Mh`+H8`mxZEl^#|3C1W!4yvQ%t{V9qfzOeZ8K9A`{4_+Si zz)0yy>uH#_+F#bs%$zR7VXUe{jTXj59M@=Fj$w(8$7hgw20leI`7s}QA7wV2%-+q6 zLHq5v?F8&rt#}M>FXfm)R_`2!gP=|$emmvN%Q3Wn&syYcTtQe$yA_Q^w{EqyR%up7 ztNmGnoc`@iW9EnCWvW>$xXgNlxKZ>P4^kSgmNjd&RJHpg+4YOXidXkff0kUsr_ktI zs~NpoEyFtcdaK4#;XZz_2DKg2*6PCimjS>HKlP&$;v8+pN{>uVFX$yLdng7I6A&Zj z(hwoesN#Fy9+{(Rp|E`C8nOQ7(A=HQLer9hZ=;W?7?aLBLJA9wwgR22r&V$)iU*!1 z8YTMnqDLQlnrat<`!gyrUcK9Pij_iaBYm`P%(oW(Som{YocfY&^;7Qt`IcxM@|{`L z*cc9^k>X@W7OtXrBjI}%jm5~egSvh>N!14;NAe0-jA}l`Cv=tR)0Gu@ITK&G)-bfB z5wVM^gP4gnEIa5twD4N35{(5x@VmjU<}MYMSk&E_bdyHrS-vV#n>2ye8I9+gOI*$f zf%1VSM|Z3fO*Eyv5}6!X3t$D$%gb^N@qvsKMICNBy;^g=DU*#MIm#b8tIyqKvCxn5ek^l5mjy`P7U zEK)#ds8P=dH1$>&<9AJ?>ZBM1&*^-WD43t^_(~KM`3LKO)YC$I536A7lr9QVKN>Y| zIr}$Ipk~7?>_sPEW8xm0#(MIB;KJh_Qey|M3PmQ*b9Tf;F9jIzl&Ptkj;)7*@@Wg6 z!sGK|!ig|H9O??`@?>KMG5!HMDV`)(iO&*nA$cp=_+emTA!%YNKS;MvccsjHs64e| zwthP7=O_2v6zh=_6Mk;*M7(&yD1d+Oy(dN*@R(c%oAhY-Q%sx=bp4%{^H+D}%<$>y z4y%^T94)O@M>0G z&`i?K;l3U<;U(v80~(!%`fet&0f+yJ)FAb;K;q%M!GC%vjRlCyH)>!L-N#cx;qdPNFou^YyWsJ$y=7c zp(J4Qj;HT;q5q>C=WZ($U9=$F{tE!YNPi*A^%j_gzX2ctsZ;+hhYqOwlHG53*qpok zm&Xuh?c8n7|GpgR&j=9yDF=WD0PY{$c$Jvz<}(`#(Z3K-zfE%f-vFTfT@J-yhL9J( zP5I7mIuIuDKjM*amjLfyZ@vnQ^bZ8cf0N_-FT?!X0Q>Tfw3 z2^0Re92YGJDid`2gAr)${^IcX?Eoy(gXW!%H(GSm|wGtTt8t$MojItV?9}u-W+PsaiuP^@{9M9d>d7qk0)XN|{ zE;sysx-P~S9)X}JvI+l@^*wFXK17RmaoM$rFuOV>sCB0Exg>Y(Jc;6D*bzUzoZ$PM>XRSZNHYeWDE z3c->I^apTt>d-|v%CL0R%5TP1A)fBN>E>En?B0{LGk=dk15jz|6pICOXiiKn9;S5R zn&-=Nm|(u{qZOg#GDy&5N9J!D0j9&P7wmOqC*p-zoVj zv7EguGUG$a)GHY5(K?ZwR!HyfIUMa${PY}rY-UO=X%voa?{MADXZcHTn{&e|e$ZPr zSgNZQIAWO>Kf;pk^fHN2{1yOENm`(Sn&90{-C))Ryvy=fT@ADU&|%2=)itYd%6q>N z)>l93Mx)y{kx;lL6wji)2OrGDZf(YH_ed#e4;Lu>b>}Z25Jd8)qgDg6U-GGBuB!EV zeN_GMZ`wZ$E}uMT$7AJJg{nb$dCR{AOMnU`UbCQJnzG=4pwxGVwa`XTK%rEY((l~E z+1Kquu@jc3vu0(_^&|ksxPCIUWyc(rgNgk+9U`!7xBrC!wL1T?)cgdBjr44* zaH_qE(q3syC^+ahu>h>|9N&m?#ay*)!Nu*Zty!6SZ?<@IYHz>|SAWNBQJw_j=?gvj zLiQKiEfdSlg5c1Gnq)qyr}JcFzl#bOID&|Jd9ao9LwHmo9rq0+;jw=O&B?%kU_B?j z5XSH4HSbuGJze%YySvU$o^SB`2!OHy6g#oP&C(ZN)BYV}0PXmVg1t@=8IJ#SK>)y0 zG37@OJF30*Oz4h}enSNCrFw-T&t61_v(@G@s?mL}d}Q3i`K>hlUm6mq*`-S7eXksb zPln|6?@14!N;wfG+B}_P>h|RrM((D=y~I7|@wB27^MBBWW-1Gc)arX1z$;DHI0)(z zg5pPd&OUyBiZV5A?wG58)^vnuPub{D1%fvrjD$%4bUUD=NDUz0N$bxd&`p#g&Sffl zm-Nc$y(irs2{UIPOE~#QW$}-6mrz-F zehdhfwZez|JB_4+pxJ;g2YW5#B#+zw%Qn;YKzG19SGIOP7spk2Nq~Okv4vL{PENeP zd02fIo1HOtdqKG}mHNjN*|C6*4uiF9+QrWBx$6w`^)BHppFM3WqyVPnVCQM$C9yK79CN%F<4Lx1id-ZF&8dnq@mTko?B}DWEBL65oa9SNb8T z6#UR(VY@$S=)0vCQ3$1|@|<3KW1mdj&45AN;GXlV7B@!M@}+48>j8 zFR#S$Ci?~8junyx&J^x$GVG&`AIO%?y2+Xeqglj*x<rx{bPETzEJ^1lDvNvda^*3Xmdf4& zxrO5!jU~)r7nYDh%|tWVKg8h-OxUI+CM~e3QVt1qg|vYmg&TiO=+WwWjk(NBo1+1H zz955Px($a!GfyQCm%I9$@vvRWwVklnr z8sn%PuFtF2XappZ@u{>E6D|RU>vh-*e)F-jTfN*f@wox8>$0cEAMQ+H&K#f{rjwOe zx8w1rn@OISy@>sNO1t~fcxKlKxB6Gs9_!4DwKEKCFtg4tdL0K0V&=rdtA&NKAIbK2 zXqEWA1F`QKNOEeQxJ3oHL>S^S}9m-p9R6Eo(Y^d8agf53o;Qo`lj|=zV7JC zH?)J~^8>??!d^3r(8`+Fo>z+ZecmZcY#EO~_Jvd}aQe;n&k9?hl7+XLs)X&wuNl_z z=^jZuRI_{VF%+vByQY;#TP$Ph{UBE@^wruTrpPp}L`?YM{Tp%CgB8Apj77$ar$rCB zGz{6XP*KgZwRgt!*rs$&ExJehnVqf=EF7rq7mLXg??IQns&?XL z(h|}e&TSM^H%ceH6>p>_%$XZKs-0c2Eiu__rDxw}A3xD*2IO6Jg+R|A2(n0auZ58n z^a;#)oaCSaODhV0govtl4kJCRU~cHITytV?kbnDx88zWjr}!R{TE2L=g|u|OOhV}> z(anS_KJdSb?5n^bSjP_?f*SN~w*@Kq-?0D=HB{wsI^*ZJ8_?8hd-qLjr*7^J%hI^l z`$?af)GcgK(Dhz9d~vPJ)3C00jMq~YtiT59)y-Us%1@0xWP_8H_3u^9C+n(d`4uGS z{!q2oOHVKuQF+)c=TW6e(c!>R`dL+&f|s-Iz4pKsFQ-(l`cDy64z8-Z-rpD6Dn5IT zF=cS%pUDD`!=r=)o7Iw_!)RrB-yF zo~%3gt((_rwBO<&`MSAu?1{6Aem@jXpm}BkV*SRty_NihgH{#~+=2IMU*kH_FhVbI z*W`6;6p*c=x=tS3$l(j2S}P~DPl0HN<9tQ6cf*f0nd|sHnWqik ziIv`-j`dCCWA;+8`H6h&-+27!^+R;Jb71LdIsz(Ov?ZM!0;LZ=#%*!(Nh^S&E(#hq zsL5p(-8Wm6*I3`jU$3NOG@QXM$*)(oYTb}UY0&$_s&gxeG+9ONt=F$n;X+4v1?p=1 zpBzkqNZ!6DIiySl6+B0{)b1JKeWfYYN*j%~;BI3r(c}yM?LaamX(bzV#X~C?lKSBUQn|f_!zk)seJ3dE-zAgp zIATz^y}5i^MV{Vavf8mHx7Bu=LE1Ay{axApy;YUO@o}i44NeUVPP}yKvWk}di|(cB z(8~HH7Sq+i*8IZw^vyA0ziyV4N*=u=r|vgiG9?_=ni;FAJaPMQVY(c}P&H2RtOp-; zUUS?LHwIO5cWSdYWd_zi@Rt)&t@dVqjCe5qpw{n^hx()?Om^c+{-ADfYt&V6Kyb_@ z#zp>z!J6(sn6IFFpE|L^9%fO_L_Dkx!JHQ;`Z;lMh*9Vlt`?sqC+exC zwj5ZoeFiyR{1{w0Ay)_Znvde+EO9Dl9aD3QiS|!E0!e+;g$Zk!Ct5dJr><+6Px1BB z)p0C3LKyq$s^3mXr{JYkn{!9nDq;%bP&CQPs3PxOYso&gA61J&BcxOioW>gnM#DPv zL&_{}Tfj7e*msG&2xuTXRo?BCm$MyXjeQtNM8F-qw1}jEcK^MM9!phaCIY97X@v z5o!fHi8X=XFlh81E|*#Tie3%hfG*|NcEd|gZ)L*lI$`e=$YKL^VtM7aVB)w&74(Lq@%uygrxPBAESX zzp|@PyjF#k91Z{Y(YE-eVC%5P3cMTbWJn*&&s$;JzO|ulSi-Mx*;ysoFI5Np{X0iW z(Jc+RLs(_xTSgvsG&U}#Atr8<*9zP|tUGo&8Nw-f*<802@7()6I5wq8MWXVQfF+^R|ti8F9; zuUe9tfAY};^O#!tNP5a_7dG=vAH#!4G8nds)Vcp}FR?TVY!Va?nDYKc^?`e(chcwM? zgF7>r3`;rhed?a!>#dXgZq>UHe2xG0-qy7ZwlS2BAo5nF>4|^*@q52i0|UQuO?kiL zhBG->k>1Ws#6f)B@n+DSP@>G{mlMTpa@@Vs=7>~8GCI?56gq`1kQ1kiBq}|-`~XK( zDgEt`e~o(hn9#2-)Ah!eODh>%W0*~||JcWwnL2$OwYq@}FB{{O*n7p@Ci`Ezw`{tCMnh@Pem#AN?lph)B-y>pXe+e*&&#t@<|i#l ziUHQoG3pOon8w%XgBo7LS~Mv&gkbWxE&t71>2v(3S-iJEsh%XyF*TA|<&4hbqsY zz7d|r<1)T#WHW^z0%q!)nI=tqGU^k0{N@1YWJFCPZoqLOB$)XZHoie#CxYOqIK)c9 z!|Lt59-wI-s2vbYUCE-t{lMqz$}PV<13}gI#P3^5es1fdrSVX&AV^MruTLkLfoj*h zOI*e0WSzjMokFOd`^W|Nmk1kwu}-{#V7tj`+%${6jfh_0l{-(t643QCadK#wN+vWW zySrL#z~*GCIeibaBZX5vtX&sBpJxAUQY|%$?r(_aB^R zrhksCj~vaT68iFVGEYa!F~P<_(MM`e?NsT4XfuXD*;!$d#^T`*)Lic6b?>jsTQrZf zeg1f+z!Rls2qdPu!zwVtf@ZXC$4Yt?ZIZ5lj5aTaaGkcd6uWSNiFeLrHJJU7(0SK~ z;GC{g*sI8Qk_O`IJ;@ie{7N)9N6&4nFjJA6xp4T}zhyrUU+6opFkoG;6JqP49>;_E z3Euf>$8b31?dM_il`^CHQP@=mmTiRulGTnkUn8ILF0%=Zl~@KubeUZfI5tmT%DB2V zH`p-VOttoEZ+jarg?$$GOn z`TC{^%NzItH0`HM+e@tD9)@Xc)ASHtlPQ5Avt1f_ohiI2I5B4|c>Yc==Qo@bhwpdh zxWg&uIO*fdbd@QXN@IqKv8TBtxxE38<37!>#b%nL*DrW$L}-k7spOm2%m>0kT(vj% zU<+4Ft0`9(7QhCKLk`2Z%+o-Ffx&GK`GyA$4l9vI>ptf;VBv3uhlf?}KaDf>n2*z~ zL%=^8>7RY5tgD!~+T*FHn6q7?`c#-V=Y8$o=a$Nf3jG`2iXBTr=55z!sI4E`g^)Zz zzivZpAuZ0- znxvtbYU9>Tfq3|l_A52PIOff&5{GRwhTRt7D)h93XQg?h;@gD3-`(AHhe0EigO3#-Q@wwF8pZSI}ddI7G zc@4}VdvVj=U-gccphZ}N&JR~4Zn}wU=Z~Sv41FflT~~a9;(tJ(9AF1qmGnh$j-+#i zPH1}0V4eszcFKJEdg@Hos7}Zr5HD)G>MbPgJ=YFbNvEfer-h#;&yFt3-1Xn_RT_r8 zECM-*)ZuYzmRflUy6dHM=^pM|*1+zU0Z$<{(o9*^-Zyl{A z@~iLZs<_{al3Lt=BK_r{we!=#>GUN#*Oh=7{Zcy zC*Fs2yK21jwtj|oQH>pYrlKGE+#9WIWBDS%U|8A9D@s>SPvzmm7YT`pDk>_kE~WN; zFyjQ%>%Y_)@Br_Q-}b8>A0aO!$K)^cj48T^;qzr1q&iP~C#PGR&-W}@u}@5z1#OkKB6)qp z_gNJ^v2Lmx&T+!s${Pu(oZzh}Du&_6q9jF`hmu}<$F#>o=20Z(^8(@GTlErlPik0> zL}x=iI{6_LVmEMkF`5l`2<^_3ioo3=YFdUAyX+!Glck-70!tcgQyuPpp@4<*%9(gg zF2N-1^LT6UgXn#w1?A>x^$BV?xL>TiTwBYOH-L7K(^E64c~Mu*$-6xJ>OsL5XCs*2 zgUT0>WI=9q+8LTG>!TekSOuwJ$e6^D`gDtfqwq-x?s9vQB;BHWma1!lPKeLqcza(o zpKFrGb^U6-0W%azw1&}l{gd_B#T0Ocak@-=L0!w?;m+j3!h*Ju(XE!27VXE6ueZ17 z#ihsdrWlUVUS;B%>6y6>^gNVUV7{LnP2<)TPNt9WrtLM$^XH28_Es+PC8BKo?|{|P z#ei=14_PKmbYbOK-1*(w!h@O&(!tsqe8#2;+{4epUiT1N3g*NOTh|v)jLkJ0wJWC!|e!!zWtaFE<)EJvMd38PkeULbi|%d8QN#{_qS~eyoKcJ2IWaZ@^rA@_OEkcX{hq z4#{riBC6J{CyBaOZo{417TKI#P}~&U5t&{qqD%MLA#^}gx?(?Upq8O<-&;*9)(V1n z?Z6&xNh8B4Cfl@rz%1+XF;EQh96lM#P8`5%ZLFGOo%lo5TPv{{e7SS|t8QxDg^7BF zu>Gin;Flz0sm8nk9uAxZMHT%{5O443Kw0~DltD9XUD<|P$K#I;uUr;P^|tM(2&E-g z<4bgY#Yvm4CBSo_r>$+sYxshm_NxrqLf(~K=R>mS66vt}(#C#>LYN~b2WKZ^ll+^g z)XM5oq@SN(2@i+Kbmmv(B(n7cu~eV-Pi?xd)Y{&ZJ65*M#ZY^wZUnp2@z&MhPo7l{ zy}DvSKh6$jWc*H_Y!*#ec95}Zd@D2ntRF@np2|y$RpqEZ8y>PZKRgsBIZtFn*@!SX zc^&-0nMHK#>fANo^4+X_PPe_LXiI~_61140)ZYG=BZu!J5fJm-oqFrsyAxLFmSoli z(3XA?xMOVO^@%BDr(S4g`4~!lig-27qMKyG-ENJ1-R6ZsX+wLwOTs(?A>o#ut$}$O zEp@XouXH`Wt$1V{y_$epA#`^TK)c5gR^s|`-Y2for(vMbl&nKXvrce!Ho(~&!L6q^ zRN~(4&v1M|BC~o+fKBD_0t*|)`--YXU`{BPo*`R-(2PMPHuzGqUVB8a>)5qK4%VQP za`hm6UEzU&5YaQo)_9 z@>L^FLm;v1ql2-Wsh%l6BS^emCW~9T6nU_o*XMmb$wQ*Z=9#l#5e;g=lA(mVuGuEY z6g_NdR_wMp0O@^IcbX~2mb?LGE8qFOJ>3_INq)^t@*Mfo&8DYr|L6@NO& z7hpQV&4%Rmp(wL~>4C(inQtSho)0)J&ED{Ci2%B9hk*tfX`^;aj@{H$atumeW=)`7zsgx1CWdhosn^)_Vu`PW70o;QmcrmcO@`vK zZ9=y@dA>;tjStBOJ`Q0m2lp(OVs~%8*h@;_kxqHS%shD_djj27?EyD~=?$ z>#N!~`IGc~)+go)jo&TTPGVU3nG9;{G97K3eL^aMI^jt1K{MmQ6#BAxVpHuA=)h*2 z(r?Hoq06*EjjPLui@o(x{Hyb40B=il(#%gLkwf9VAV=kUMK@8{>^OGt=xGOXj&5Ao(ueO9&JaWS6+Vcwv}63{im-^iu! z=T{dJ)#!^q>8*qBZ|otl09U`x-6303aPKQ51!iO zLXh3NA6Po_>ZuQ|I+pSxercEC6tcNC@YXkQhEyluNL?Xn#-!PE4-;2ipDioRc=V58<( zqKfx;Y0afWZ}Y<^gAKyG+iPibuX+*mynF@+AejWGt7);|x6e53h^FYZMu9aup<5B{1E9;XeDr+~&soa_jy1i5VsyRejg$EuV zVH6(vYYD(WV|xgj18=&3|&FOe~0Vnxs2nMxrYHbX(AuN@r6 zb3|dUx6>gK%djVl0xyOWRr`VB+LVHMX`;e?u1Fla;wm^jy%GNvzdq7~+gry~$Clk^ z_T62|YT^(T9Zx^dBae=ZNV3ER@iob(^N9>UxVG%Ib8xoBpyN~MEpnB@q`E3E@4iGE zH?gd1$#GyG^!J6Uevbqb>!kGJOv+}MdHfBRXcR*S&*yVG1%%daPb&%g?a{LLB`)F} zB1uL@?fd(ChE%F$Mw9O6I$R!QYc!^d0DGv{GruhNgT#`o@st@_BoiS#67R{BA{n#X zsbkHJPfQHBh1^uOdiGnk)((9Q>-Y_A1fSd}U4#irDR#-0BFCxI;^Wy34GrT`QtX>$ zM}+vt&z0;63YxQU;HD%-#jfUeO#~o!T&50BB7CMcub{HlfKNZX$a!UvBnm}LZUN|? z*797O=OvWZ^Rq)3^Wm@A(0~9_GK+4)wjGy{nd8}aXxLPBcRkPfk;gq3x>vSaxan-t z+-R9raTssnrtu5H-=5?QT)p#CdrYJ%wRGnI%!_=tHbhylw>q9-UPIB&({KVYEapGA zQ(9vD)i3)Mb_2aF<8df#88h@Eg6y2*CxsH<<52TD!n+P!1w*i{jMFZ_g$i#CNJ}2Dju{K{&@PT zH$Prd=4QU)o+Rg}DaBfX1yG@BFEwkkH*%J6);DW}PG2(Scqa5h{CsVDo2&2r*fr7$ zaNk6!b$5>wPyUzkg<+W+K4a5nxQ&9zK)-gZM@or+#wWxK@9Pog#2;mpsl?=FPd8EK675oXJl9z3%5=d5TV3bG6}~q;Bjyl% zrVe3O6=SS9`$c`2sXX0DDQWk@_KSMkUQzPl^ajPtXPC!k_Gsk}HRI|(CwnaP^NJ5* zMrZMnr8`xKHPT_q!tSH9R}U`uw^F!R7SYVS(ag5%%+*9i|8g71hOByh4HDV^f6~;w{|o76fk0n=nNqx-W_JLU&an^qzl6=-@vE!Zk`k` zgtuWUeq3Wmj4K4VDkrI0*T*(RbU5S{<|S^l$;O#H=C1K z4wyM#7%MU^GxI*2_^#qMdWEZA)I5mop|O1OefFkXt@HZAwgxuF!GeOtUaP`nItJCxi zktr?A+@O5lxv`T8NRXb~=}`cWAObG2HWuMzS=?nxH~jf1?9&frU;lLLq}AjwCf94l za*9TZNqkcm$3ux;X9v72vI#AJU=$E)O3Q?1YZMv-Lc{0CTdAb_#NOa%m3c(m2|swB z5A$tQgg)iTzr9r}p<+`owY++!Cl36fed{E-bRHk2Rl*^vC%yOFN7wXS3}KZg}> zTSaob>b>P<8@5Xg$_RL-=U$F8=zL#JA}uRBMd7Nd8j)y0Z(S!ZAfO_5xMWOkA+%L9 zGZAn%@&MNmg_~`sN9nTw8+$kMQbDqdS@*Wak!J1(;444}y3VMAR9z`p(~Y`Fh>^baTS zcrwDe6;R(XYY&ZdAl5PEyfOMGBSM>F>Br12_(12pQX6R0(q#xFOjYuV>qzvQY;#Psr@N8cB ztc|k^)`^abUCJL0J?)mj9bdqHpJPX=u*D8+_j70Kv@$wDAXXpH)%)LGua5Y5)?FZ$ zYtc$r6l|!s|0ctMW)c2Pgxi#aYs&EN(b@=>QC zh_c%-xR;3hB;|C%8A86}T-mAt+pAIbhK{vsE!I{yWbOEkm3j-8)*Sii$)^^S=SLsS zcv}aRqYXMUDx(vB79k>6uWd%X<>Qpem3rE$%M<<9ItR!aGNlefo==x5ldeO`;U zn4+G1PiaJEY#)QLx>lA?Jz7Q8&X0`dD~c$|zar`PJ-y^0{j~|m#OmoCVBQ?cup_Ox z=7J;5=%8ba?5o$EcDgXkh4As9yI&k|YWMuoouc{QFe}2;@~L0;bV&D=osMG*K7URy zVIQrcclV?_-OwKG5nOsKuZ!&i{NDjuqK zU*iQoglf7%2R0fvZx&uAAgrX?!3%zb(kGAT5yRzl{CwmVr}xBO?W64Jg}t>2w7_#0 zNlLZO_hRSa;J#bPSFc`)i^{+aEtn(9{kFaRj@)q8cFYlCJ-xkH^tlbqD~}uQLB^ob{-bune3}LumynPJ z`5yoq+a``Cc*4E0kfWU%&Izem!_tP7*BK>vzqK7SJ(Ma*9^%_1w6Ds22ZQA8K5-Z; zwSlpJy1JPzkW*vx?ky*0jm;ApeR2We5co%@Qe>*)wP$-C>MzVrtJipeB*DnNZhnSk z@O=&ICDgKMI_8awD}`(La}c}^xhQAA;Q5XQ{ZbQ#WeKB~gs-im42+ILDy5ic5(|LU zM^p5|ki0(UYDU2H8!yZ^=Omo#7KS3{V~Ogbps{Vsj_c2W&*xs#EI~_Tq_A%}zM5Sg zRd#jKD3Ce7dh7Z0SP`Z4v=&8roPm7?f(Av8;SjHDOA<nw>8JphTqOEJj%Sm6p zx0}qUB8d1>I-$A2+Li7wmTDB#Rokr%1#JG~-P^EPw}?EVcKVUTI4#Xg25}la~$t0r+cbli=Lz zAdeJ8p|pc4jK;!_95kuT={vY_UT_M~{H8(5MunEq$&n`Tp{&Elh29C_c{rnZ$w>c%ISMUP@VQ{T!0oupu6v z)pk-p`MnJ*%5H`)!{XvK7gfOEZkp1D3=llPU4q0Z?%TjEDgB5DwfUyr`h*{GS-m9O zGMqr&S7?R`Ybx^oq$f@KbrLA2+d$#1==RFeD{UxCR%IvcBaWj>gXgb>?S(y&Up83i-$M4&p^-g z09!aWz5@F^28>-8Zq@|^*@YIM-p-E*{a6W3NJ^TZT<(9*FgVpOBy6?F|-U_V#*{N*Gy zeeVkRHualsHe+Y0?HJ%oXyK(#pYGL=NV2gtQn)%f!MiDBIHZg#ATyk&2Qis7m&QBu zXSfO9i1aoCdy_MvN%WQ^`(2k&bfzHampRX5#l#uj!Xwk}>W%#@|K8146hjkck1stdrw8Ldo9f z!L;RQ{Y33!x!@>Ole=xOlC&`Lq*d??JU`a+aZ917S_Cy#cf3ZJtD z*15h;p4-q@THdxWK3wIgP-1UTx?h?_Bjeri6~WaO+CI2|u@?ca?yCq}t~ePo6g~3h zwpI?*A7cXrj=I`BqdQM!^Q?f#cH{}Mcj7%I-yPx_VPq=q@`Nmsm`k5TsgumAAy$kr zBpY6Pq|^?v0{3M=k%hu`2CPMD!MN2iD}{w8F)C_m$>2`$wwaUR5krb8!92C(`buES zyQ>-lT&8i{oCw_NTJMuXth5KKw^{W-tP*x*(kW~OuLp@%~ ziQ$yr22}d0sU>ff>&BI+atQIOsdmC@kAUBs$frD1h9ceE-1K2S*lA}VKyeOhFOQB& z`k~VWn>+I}_xE=Y;_|5v)1`M0f(Q%ZT)RXP$#z5E0)oAcdt<}Q(%XQKj$OCk03SdY zeI%+RA*aF&uAGuya2!zxSIA>>Veosw0rQDTN5aR<>CI}i?Pll1=`e3W$FUr#u`l!cLrcKDVvjbP! zvxNyVBCphWZ#(5o@^xZ1_in%*u?(ps)Wv7)U`&jR%<`Zj>Zdc+BNT4CCmru~J0#KW zff|dy-RD?DnUw%EiCx`)IMS|y2ANhHmFRgTh1eWk~y zC#8R{+feo~u+`wp3>lD>n7+6q{axdEMM?f~{WZ%u<`nb9nLf>Kw=4igqz^~$I`Qxp z+92(D<)P#rksxfmifmMQH4UF05PZs&H)s+NETcLQDi8c>N;Oq`9kuWJ^OAtcOjA(c zb!4S!#eVsr6vRt1w9quO4hfLbIrb-b?AJNHgP*S-Dx&t7D_0>pIeoD;AFcP>`e~DO zoJpUsvsD_^o73Bgd@G!Y)(CFlLE9QAKTdpxZwLha64@U40eUEOgG% zO|uoc+wnfVCiqO)M0)*;YAO|x#%fx7%oFx+nW>#_`hm`4+e!UY2Sd{{?|q!9iyg^a zdmMVV(6(vE4Kc>Ck1{6q7uJKEj#M(NFgj+D?IKI$RS2P=q- z`1h|3UywxE1VueL?tkzurk7~Be~y{m)=w$@_*e)8cfXqX=4R8(sj@yK+Vgc`SduWd z9bS~2QOWvJDF;jq z@iJYjHf0HPeeZZ(zwi~yFDv`w%UjKaqmu){^jkrZzj%-IYn7^NUuwa`+5L)uZhj=| zvBp3o(S(^fd$kb^{xd}g%f|b0U3dxHYpm5h#J4eiFWSuF^g~6mfk@+vcjUt#o+yT% zuMGT|VCKQ#R7e)I)OKWaz`VG0T#gSiFV-%|85vUpmZ@x&4z{zRx6le_EslrIZFoiP zoU){m6c}3JZe?#u3>&|g$Bulu0P*^)ROtc@0*7{t#2zzqm?T9t_O^%kbdu z@T#pbw0V20Rcq(Iy@&O51QF2glC|lVbs+9>c|%;m3FPJrB|}t=w-R5@YpV!;P8#Tt z<`J1S1Qi&rB>WIHtYo|UsrxOvOxDM#oJnA*NljOMGUi(70uM6ddC}9SPvJz^$*RGy zBxOe~NdW<~@6qWu(q(YPh8C=u#QD8NW~jLv@8=XFJcVR|?tG{xf^0hC9H&=M?Y%Bl3pq2_K17VHV&`J;DmFGJZoMZ-2D)tt z5ZktdF?r=DPM<>8x|5hyNNH0|dD`FY?!L^tfoy*S4i=%JaQ#Yya#o2pMXLDeX=~MK zuIw?t+bt+8EUt+(-#vaTmvU4WSZY@ar%;RixOFXcs=KWxnVzkfmL}B(jI$#h^|+|t zq|%oGVxpm$6?mbqMMXZwg`38k|9>Q1cR1Vc*G_C|?>%epQPiwen^tR&m_^m9z4xfC zHbqtG*H+Xfu}ZDjn+Ua6>>zm4-+NvD_0Q)y=REhh#}i{=kL;U()novRd8d^Be-@s5 zTZ5EnCmhAU2$Yf$il&wyeJ?PC!%E2TnKyC?YeITt82J%QeonE{VVfd@!yHV3WqBZU#dOl^7Oo*wS(pI%gyA8A5brTKDf*vPZ%|0p?r+D^I;JHtZj^?QayG zTF$B3Yb=b*zuf2Nti(W&k{AE!M%YaqAS z+MIUBK?lygwMo}y-A@F(%2P5cSN_Fw6&zIRUlP&V&r33C`=j%@XxQ8ceVnb^VI)D{ zCvY9|_3fuU5240|Gzi}U#}y2@GXl-qV?Ej6VLfXjpyWn?$Un&@bl8-j2J@#JC(`hb z`E|QWv{dI-CcK3S9qS`fsYWhE7#~=99inQu!H=F_jEz~GPu#l>-CJ-DQkzgW`CQo2 zrg7GJCw{sSDYqz@92B!idO81B|Ej10y+RyIC;MSgkT#3Ib$tIo8OxiiYYz+ywCKxL zV!qY*6Eqyel9~Zw`tK-xtfu0q(LiUH@Ba`4~imf!btuJ#fRfXjP`x zE#fWFo=4+E6UJvtP2G^=`&DWYCiF`L|DwyUL&MM#Vh*$L|2{Cq`Zjydd0>+azlTXd zToUPA`xRhNw{13k>zC;Qvyt5NyS2ST?9ho)%G*60@|AfF1c3h+F&Xn;lZ@{w4H9pY z3nSV;EeV-F|f z4$Yq~{$6HW@jlr0^UVL%G!zh%q-1RZ1e;(O%Yy!uXFeO7f3Nl)+iu3y|z*jIm>b&I@UNkUJF zr!lI-=xEpH^ROH37Jp}pV7S_b)UF_!;8I;lQQNpSV!7!%sq=W0bK6}|>PGgX)Fqsm zFwj{>EF{*5`yhjRt+W+-Z|uwCfsCm|V#YRibD)t+%CHThBS&L2y5NiH+K(E*kMZ4i zar%42YZq;11ovObW(Jdr4*jcES*65a^bq>x!quxSB6170+TdgQqfeNMlZ zeBxgaRe&~G9PF2p7?vNmIo4N$SVBh^VZX6V#7icFY`2ohiZu~y?4O>o@AGyOaolKl zW}X#%$FQ)*l14+NaWsx>CWcg|4-uvUP0$$W9eZQF0l|~RmAbNqO0Dc_6G0WlJOTdZ zouMg&00$(`D4Ztx`$*?lg%~%F+BVkHp&i%*YY6PYc;7{qocyYgW-Tyv1$x{STEYfJ?Uj?ZwT<&1A_Z7LHG)k%V-yJ{DLKUP0AId$WTF zGp9Io$iu`lbg*~$iTtD8UC8AXIzFosu5W`?Q}mRk*?p55em*X%UKEUSGesLJW~gG> zAwOP)?<6q`qLX-v<^C1Mb?>GzgPZEy(YfO*c)~M-L5W!kiS(Qy_ou5PSk80XqTM$)=~#*h|$RT)-#%2 zV+!vb9X@$bbbN_a<8OOjbt_}*02=hkvR^%S>7PHowLDAWSgzhN-{l2gYc5sG)}S$O zafe33)kCOP?yR~Su=}?Hy3u}&x2sEny-GMR<(gc7kv))gj`fWFBWIJz{@X<#=MdU6 z!`DfY71f<9xu2d4l{ zN_=rWDzJ{mvrQF0r1duNeOhcZR-ijC>qK4QiUoya3K#>4N5pbW8~E6l--Ykc1B+a- z{L9JK+>KP}ZisR;T{i5e_NDV0WL~a4zHjan4=7B!v1v&%rxzS)emYcn8POohquP8D z-$d~>)i7K|MdhfBIVU&QDbD6T?CKa(pi=w*v$f+7*NtRBvU93l7KFXAKR1GzYG*h{%Jz;q&ceBDEuDZf}Kv; z^$G%WwbFR+0{OmXF!snhso^bgDD+wV~hdS9uS|S#gP@qW!oafm_bKZ;10up<-6$;e3e*j|Lm2;U znD$@5n&$>F^nscg9D^#AN({OAikO zZ7}BG+7od>^fc#79~X}G3 zX+)hH^58C2WLY;zkS;V}&+ARmY6xE_T}r^CyVC%m`o4CoAJCooZmmB3sp4K*j$-QL z3-jfn?1uQRz%j=m86>(DZ2^j*XIO(NIX%G@m~tv_>JLUK4i&DsuRvHSpe#0I0IS7x znnPGI;!s#POyT;K(St=O$m$`OM(ylu$92%1JryW@jqv%)*dDveUAx(z_oUVLocLJY zKPfJ?2yq_pZH5KK%`6w3G$M6!t~tR#7aoES`J)cc^T%R7jf2w%kqS-X*5?Bkc!No( zZ>endmjrZ7vSK|)GDOEXiAtP1T;#CL03J$8KrJmT>2UmBB_;F8%2}rpLK*1N((MU( zcvUL=9@nsAJ|{40)*+q~0G0u~v5+l{xU9{d_^_N*90ikc!G}!IKdrz;E~bWcosS2_ zkcXC~ZH%cRh@m)-LlW-NX}+6$x8d?;;&Q})@wjpcrgNzBtn&$V57KFkpszF~9HOxC z-n`6h7@XnIVJ(j^OXsj(-*TAkldg8|Z34i=%3(=Ol&FvJ{s$j#uxXF(4p>ghjsh zifJI%)eRFi#Q2xF>(j>BAkXtVte^_QTP^Hx7tG#$o+2=k2dG9}X-_Z5}i@sG&w%u!O9^?p-i$R8{!*6(;NHi>PiFzfrW z9H8nN4yMp3kD43vZDj*l1w z=Ff#AK4cd65;axNPaj=&d=(uo^1vq1Zx@BNE`wpce_zIIy^l>j{FNy?cjgb=ggpG< znzR}PdC~o(wOzU>^DPJ{07rMhQ!FWs7F0bErmX^-sN*U3!ml%2oT;@=mK=`HC7I>I z{G>YaJ;5^G#sQKh`o!?=gjp3wX9sfObmq5YSXMW7A0^)W&gnBAy7f&b>D+(y`fBua zxq7JrivB28;9;xOPE^~>iQnG_ug{KQCl02PO=&aSOlN(!C;9o)VedTJORHp`TwO&# z3-8Omvgvz%;>~q%OC0+%Fr@I2Vp(6lKV>=<-3oSx&mXyoEh-7uX|Qb;|L!PyUQAI0 zoSbkRIs(>$t`x3#$`xU+GZo$KkYkEkfbNt+2Px0RC|FNKOmv(NckiOVJ{B_48V67uy8+oMoVbl;G zY@l)ajzcS;RTrrLQjo4H%-f=hQ7B98Ust1+ToyK8R1q`?Ckq)h*4^>-)eVZz1 z^}Q=G$UARj&xHj29VL?Uzc8tIdwU$E-Wt3qq-WV0G1X}7*@+UtCjDui?H&Bh7ZK+57J~4RM?WmPZnY70vmohZs#PL zp;JAnS4X-JHDwM>`GA!lsn5p?I}8NFor{l7rzqs6gZ}P%cAujU^PT;UU7Ndv7%@!w z>SxCge^(qv?D`R5PbRjILLX`HF+Q;c>J5&yr$v>*`)H8b-Z{si;`J-5+hCRsJ=i9) z?9kn2&voridlCKrmm6bo&xC?%+Zpp8$ku-bvMPoq;U0#x2VD!ft+vM;%-3xWXYuP} zi`2+2b@&O#xmkrOfFhm(q-A9b!t}4poG0<|E1V{6MSw`ryO3jgG5aC&e+Lz9v5#9G zVS;6C!)f5E8LJY@<3m`*1e3O{hO#udsEX`o!-4amo@&M z#2hRfNRL^ClOHUNm~~qXRcR)#+dp3TZul!~sndaQU_`FZtMM0tXUTMfYSEPFY!^8C zI>eBHU9MaJXVenKFJzh3{IcKiy7!GKqr4FT zNim?BKqFk=o_Wq)^YkL+R{tg}T>WhtOLCx2CV>o(jj0(KQLBq&X-$WmFS=TGq`bZW zwzxR1m|%FU65~S*`+maXSRnpquMStK4eBQDxUyat(_pCtlGv`Ux@?_-d{WOZdzBw7 z6eJ}tu^}MTCd=z-5UZw$bYrz+kMWWH`IjOO{k~vZ#job>vloT1VogsqH_p; zTo?jviedJ2HrTPhwpfoL^R&E?wWZ6brU1HM)ib6>W`a@fUZ!*N84cagNEjDN)Lu4W zs|(EFL$wI<)k_r@P#7jEygW(eywr^2!IV37adj=#ZhCMUNFe>S2;y@UTI^scf0Awe z^ZccN7fD3fIoF3_0X3%w=jiRib^d4}tFD-2CHO*S1Br8-8(RjObOD?6HPX_GpeA9x zYo{1tW0=`iL*6?Zj%*b{XhBY}17LOGptb9u;!R^wWaWjVa7ejyD4dyD>|&lPbdQAu z50c3S_SzwKTkHHI4z8eU6Y=xttC)7o1XQ5`2EjnM9H6X3!omIrHDQcd|9=d#z}x{vIYRnoEvpHS zs?~mh3Ebiub(I2@am0<4}PxnEmy+ z^T7IYq+_tY2l4^+!4x#PR5~3YPq_$tqZG(vI;;BSzKdF_4leDR5|)F$o>5=LOkI!m zTioS*RV#mw#GZoRUcSDh>EIChMMgQ#fBM@4$FOHC-{Mn-y;EmGFX&kS~U zBHYzr!dXU%+QlRR55L71&Sup~-q3_lcKipsE7k^N6AzU9a6GGRZbtiT>G$^pt=DBr zu&go6-v$$ukNWkWtp_8&XS1<(Fcx@0*`*&Dm0Jqc7p|VfFL>fl4&;z^onr*sC6bzd z#Q$^W&U(47yY}SE0I5#dM6@*<#VD>_VQBounfgK)TvWZ9uvd)m2`kqwfv3*f{pxUG z;egQU+^bIgB-lr?(5(7Ogj58~Zj-!M|bW5hm(hiRk^pURuFLBPblC z5FTY*+rQf#!jDbV{r-ML7!{!4yg*9R&gI)nHM@cClOqZTzLU9<~u-&c;22VJTr^Ni_w|;=p=^GRs^GwIgV(bRwv9zEwC1k0-xT|0t_Jfi!YXgW@F9aEdbZmJen}o0 zJ%lYfnTLu76^}UpoyFD8NM)=+dz+chA{V(#Sp4&NI!$J&Ked}#g}k^Un^kS+db1{G zzUTo$huGCHJhrABZ%u7ZPTr%{p|(mJPEr}y#oPhbziNB7sUkx=b%na+?7dt

*@V)cs~^7_udH`|DL0Y7#oV`hCx? zBw9LbZ%2B4t@0a7E=Ow)V~=9RKm}p{`;E4qDzmE<9enV`uTk(5Um0f}t>WoX#V!W1 z14aJs`}!XBL)2OpK!7QsRJY&{%X=4wj!8iECkkVa>Q88QsZ~eHVs?s$zBGY5jx`MZ z%HD_^QCJbSLKN$3Y7?HAltrJI92IUnJcU;g)>g!VEJ*{6J!RL=qj?!R8@~Xr1BzuwW-(xMIbJHwx73%J2c(TeHvBebP3SpUg}b^Ef` zgr`cm0^IU0b99#Fcv*>fik=eMm%rs!96dF~~IZqFs?gbdB?b2O(VSxuv7 zbY~{MA%{MS9^MIIj`s`@A2{lv7nV-{Z{b!}_Rvj*de=N&y0&1icJH-2^^vUZSUuPc zy}}xEOG*e`f83a8hrK1OhQ?W)KCFV1mh$z3%GYeHt^|68Yvh)GorMiG-{ykX-k$5j zC2GbBo8^geBvCi1FK0FdD)eP2rxl4L7A>R zYHvY}>#Vi_<(KM%TKcRap185goW1_8I9gXs2K$d?R2s4iaV5RI$_hXkSy^07UOEkZ zeRY3T2^@XPB*Td3CKQ=OgO{4SD*?^Hq}i|AYHOWU@F7%W$6HXvw**_`y<3&BmYldR z5z7=9z34jwfCjf;LLh?~pZ726zl+n+q2!WYru^kx%e<+r`7@ZQ<%k*WIb=%mLHsjfc5z^|q-8OlO zskjqh`NP`I(Pl{YXUBa-YLZTJF)(LU0S}_U?G%4SCttY(`dtxx^e*&j`8ZpwlP5Muw|cRA9?@&lbmcJ|4X#``&X=FLd zf{>ydWn<-fIf~JsNRk!Rr5^KOHFAfjm}i=82@mT*JaU>{9VF6j*Pm?bq{oLEx;hNS zy5Amms#u&^1SW1ur6PhrmS2#o?+5GJ+ z(hVNnJw1P7KyGeshW`A4PZv*5P1QeRCkRU_#FqsVRulb+$sjjKM~rYzlone|^m;zi++5hB67!xlA;VLYTddFxTkHJ*I+KggBw%bJ$r>%;GkKeCvJ+pUgxNd`&DVclWiKH)HiEEQTG)mKVGp_^RU&+j0DaA_#U-S@&5OKXX(KG#5ECdHUV zy@#`Zt3`mCVm)7E1-G>4i4P8(q4TNP5Dq`94xJ6K?~EDFMA+Lg!t&pzyN?%@QFU5# zIkzFHYpN-X;Jmn6w)6F89~6Bt{aEBexrV0V(!pZ)roT`(8v}_6_u#?Q9CkScOnKc9 zn@&k0&Y&ya;bMFUnvq&)c4as_J3}7B2(L=SpFN|pfs^e%_h+XLDzn!0Ajb6oD^_Cz zKr?eii$)mrA3ykB8tH@>5z+graZbLy60lIm%NB$9;6hSsskH#L94htysT-kST0Tl? z!Rgl3N9U#UT07S_+{F-wN%q4}X@=3&`BEg>x;jYL=ye&a_2P$zIdjLHY7a#YxY9oc zOYxGH{C3VSTMu z?%5W!k(*fUkl$cIkX7 z^SX#g@3}`KM(^2_lOdrye+JNxW?(Of0C85>{qf>V0Ynzu!t{d)d=?7oJ+X;}smwnQ zo+hzSTY9J(vW0=#Z@$g}1$4s759?Y{c@1D1Aq&W2qoe2Tg){m|2b;U`RayxbqSz%a z>o*o9-%zHzk7Z{&D=QZE4i2YhJFTt$qhDM;QLhr#PY42CB0tuzaAQZs3U31D<|Nzt zLtD@Yri#VQK|Y8L^hu)g@#}jPALS-A>&`-~t%Gz~?GRMmyPa|J3k^Zw$l^nU=^$^( zby6Lkg#>0recQcSjEzkg5f*!5vCKK)ZFSOhP8?T9Tb4;xej>HBcslay8Q}pPaP+ie zbg>HMaR2;PR~uKHS}5eW7{*v&xO1A`RmVuj$xWG)Q)@N|m6c|z)9YRX-^y0-?FI)u ziZX&i?*$*dZhF9q(ammt)u&IYykV~?l8^`g?H!ceX-|Z-;mytd3cZUfA_j|5%7_C% zY)HxDqi_&TUF@+04(Qw?seUP;BvDz!WBetdsAu$8b!dDeN-x6NO#E%<1}>vz-PrYU zf~OXb5Xs^A`qJy>>zp~3(=2tx5nP)JhWyLY4+auPlvmDUjemYf?VTyuo!Y&b%h4*j z?)cT;?C@yVSwuJjCAFVrKBpP$fh-=BDB8&{(N*`55MH2Xf%GxM-m>D9+w2iURQMIE@yG`;r52+q03zxu8QiTQCuFrNfe^4l`Uy@-l72*4 zP-Z8Ki4g%)HBOHNZKBcBfy}q|Q561?CgJt3=mq=g0k&+iI<#v>f$FiA#A~vh{duwG zo)_7ZM^uQiB;mM|^n#&x$T555m^5pj`+hgS#&5L7{3dFnMo!+4P$>|mr=t_OWq>O&&4g3v$uBz3nSBj-gX6#J z6vT!ZtoFt$5QGo$kwPnTa#*{1jIu90nH-|xNRCUWf1~*#7RZ}e;+m_U{npj)=+OW( z)>q%D*ikXHj=bl`L1+)wAr!6|#P-`l=d6cyQYzY$h%s)ti$jP{()`P=fHLlx?zAY61+a|yxJeIGQRgNw|*?Eb>$}6q$pd`mGa~r#qMc8r{6Dj zdp5Xw5FH9BP71+9f%!N#O|I;OA1FkoWC)_DW4{%AVp*bVFCA135@=ye#2W#nIp6#= z03j6Sw>v4@Y+uX)%BnpAto0R|5?<)kmnm4~vkE5qO8+X6*K?iO?&{A}Du1S(05oQQ zTf8#E6xX%n*|JKw*8AptM zd&PjOUFX^wFQvzO=c)Y`6>pZ}n=2`HKKjic(3c}_rIT*o<=b`6`wwR)J@7|20L%(= zuZgWQ_?MP`M?D2ponV(UK{gK1YL$6|CFr}rWXI(G;@Us=3dgS*I$SQY?`#vUpeLOJcj^uI_)Y!0Sw z4yAJ}7`-Kox~bi56QS?>V4MEt)pwq-@zK%90~r?YJ;!huPOg&I;d}2dO~jVvfju7_ zG6^9E86wI+>&+^GShS|Hf~nKhjTY&5a`1Z#C1n3QGW~vFSRw#K&JMJdYVOYJn(z5Z z_`fg??Lu#rQrI#dkIV>nm#APN=S1`&H=OxW&b=e0E)0Xeh^$Mn+NA|_1j8#xa)lDL zzk|fW@xfA7*rBsP69`*Ku^&P%xG&>5vmspdnoT<70ak~+u56ihxP4CGlUsT~{)B{A z%j=$F`e*4y{)X>uQ7sKKhtJMWK4=89c55-xXX5%Dbu)^QX$3{Ob14CE*W~@1T6!B8 z{dHbIPTl*;EfkiY88IEC3DpD{q6>`-9A^m3UBiUSxtMk9Le)*Jh9j$j+~9J%^6zJj zv@tv^)e&hEEfTj&_cJE2@n5gq@5~v&Axx9+nq+UGB#sCNq>q*(p5CDKfvR^NRSJyD zRk`Z4+v)k-lYELUk%eG!!fKTDdmAD@FL_l{lzuu9HEZYUgUg}iIX`9kbFbs-*U1tuzE-0xqrwxT7S9qKkEajK(z+B*0-1s^{=P} z?W40q1)zkAf>%bFuYNGKj%$C3`QRSQ*u8gGcWU4`jO04$8ig0M-idAaS=!E9{@!vt zd<-!HR2|$?#e!a68Poo&##AQR*uFTDQu}MS>Qj8R>&1xN6Lj^O_m32di;3HGXWpyL zP6Li!E`94$_1o1sjUE5%vnw~7fw>Ui#l_f_p-N}HInRcP;!TtlAU7SgpFFDrphrVA z>^DqOISC|EjB!6rqU%q$nRNPwY~v@8OrhXrp0{)me$=w2T(B*OUb}y`zRgaEY$8Ir zScVq5V}$SM=YB;F#&glrC)gNYWIc3fnS#6L02b&ti3C>ScueGN2zI6(qeQ%8>|RhG z5YuXwRG{d_$Kz7o(s$-X!kCt83`noJl&i|V^Ps&@?)ITqOTVg7cw#P>|YY4EBPY0 zUOgaPyvpvTT)ti_p}t(?@A(+e{X}-t!=zpV%q>;z5C2}jndk3V_>&Cdy4a|E(8KGV zsj3PTf;j~bvRpfZL6M59Icq!nw^0L+tgOIRA$HoZ>0O7qk`niwp>;n?eDIUzGxRkw z4`Cw;6VOw3Y~*Pw=*9-?;wu+?dT@F+PIJV4E5hUcJC~D<)_E`0Gtt7j%Yz*?`isnQ zGQOkJucl1_hY== z3s)&R^4EN(>nqfB|GDJWjuTmK`haULkZ+S55Jr4DnJCo*;i8Q7O{e{7&u^CGt9J0S zXjjIIBGyc;7b2Mrm(FIB#*zPvM=jQq>>%GWnH(tlAn*x6BoOgVqn+ylaKhh_#Np^> z4gKU&PqIvMH?itLEF7DmFA*GNmtK?=cTOYBr__pCQPZ)1WJ8u0_u~M27Pl6j!YFj^ zBE(57wid1FqJ7nzoONhF%c_v=X+Pf2Q&y{26pG9z50mn z*&)Q+s_kfbe#(jzei3~FypAWQC zcy8tg1#16*!Kh9E*McPJ5wQG&h-G=*{xNv&_a~ShfBO3;5FfUEhVTRJnaRg;#FkX@ z{-I0I>(g(fT9~ywjk-~tsyth*KMwvQyrlx$!_wW^PC>v9*qws|HU|+pCF&U6EzuN<(e?4xES9`e%-kd zRJ15)^}rO>fCFWuSqP3;8ORDNY8d@P{iqfn;MFQL)z=yGj@I?~(`zHbzuNd#ue}G8`;-H%zH$;a*9XN4_`}*Yuk}H7^QNF#-BYM?@t2jY0|LFdmGq?#> zch$VR?PMju|3_gs37hmLB}&WzFJ;M-`A6N#KypWFJs3sJo*)#@D!`v?WNm_FJ4}2| z_)`mUuy~X%Cv;l8Jgjmhec_MgMi5w=Ae~yX4CUxVF!nYVZsBzYoWP&p*1x(HSi8Gx zS_9Gl8`d$a;Fx7U>xz+=gdqAD2Zc|Fv&%t*W~1o95^keWw9>p2rV1i(SLaG~@YC_G z*Z}7F7rJoFDVr0jx?GI0jgNO%FINw4SSBfN;vkA!dF$5HFh${T>R zrQ>dt(EXQ8U}%6+RdUg@eOo&3C@E_Ki5k52FU57us<~VW(_12rJ7&O*kp)bFi(7(& zg54Fofeo)vY(Tf9JNi|ic1aIS2wN6$)rbLkZ{VC9EP-myE*o0u7Qsjw;iF;m|U-~ISRfY_6dN`wvufO!7-}a%XLrWbi0mQ{&r?W*rLgH_g z+{eHS2hV9m4w=&7^FYDaIyG3E%~`{aM3N2i$UO_dG_64wn#?g#r2GQ$mlY++3uqUY z?3+-~!td#$zOh}9BhksV!>kIx@hFDTm23;9{k)L1Hw`hvZ+w=Tn*I~1-7oxr?^a#| z7ike5-G=`D58I8ldq_VTR+GC<8Ff0cIq9?gE(OH5>?Uu+0k!fgqDx{kN@s+0G6rf& zw2v)(|KHyEY_6s8rm1)n_cI|ZE$Ry3;=;hfC2~1s9=~GA?HLcS2&Cd?C$=`-wMwz> zt>2u(^st?O9(@$+G8%d)7iy?LdO#c;xmhpNM!AL-NfeSvgXu+Op_{17JO2wLelcUn zBit?)9@I&hN6Pr?oE?ozm9`^X;#Yn0N(^HcYS<~Op1^&3h1l{%bd^#yJK~+mpIx%z z8vHGUZ!G|yJFY`t9OwAtW6HB0%!oTixL{b%_89lBfo#qi+t*;F>ZxakClB{`H^(5e zkj$)%xYilDr)4|roX?2h>7wy^8Uy7MPEEV=Z;T$~oS87|8QR4F!e$JKh7Zp5<}`7k zQT;*T$xZtKH|O%yvi}8bsa*i>YQ49>gAI}LsD_SJEn*A4WFx=F(zXHA!-W^xo#ngz zb_o-82GmjchI74pI>Y-1>+cdhxgnY-sgo(fSXV-;lxqWsrf;%7WRS{`nrM~wq8FxA z;V~c0dmGa#C>;d`qO!4a4UK!X0pI7@JB8rTM1(~p=kPPS$T9+Jwv3wNotUHsfRzl$ z$8Rosn42$>B0uh5q}6=pxuq36_v@zWJox>nwL%5NoF8;Y3I zlu5=OJK9KfGi;GGH^{`z8m-fIio%;Ck-kyNpUiL455)kyBVp>5AuivSQSnKf$!Tp! z@KDoj67ZVBROG3n&;ujg97tRuELEc8orceh^6-99JV=(lDqBx|r-W;wu%0n$aotk# z`rq$%X{su{^&*sl#lKGEN5~ez{iZ5aX=OOS-Tx&b1T#zoej@~Dwz>6n&li#njg&l( zbhQ=vs7WcqaI+bPX%tWT!B4leWpx2ZCAO1u50N|sC`U<|9H(BZ(hM>n``&?@A*1|F%fo-Drz@ggZQ6)$uIQ^ z1EGy0atUsBnXA?U6x)Y6dXheWK0Cr@;zJ8z>~RO*ryeMnlONAL15~}UMz`^4NU((}MTf+i?NH z@88yJhW{!Y`6-*)4m(YU40Mf0@9h`8S((0Xx~t$HK}#+Br`jRl6hTe7b}#UwV6}mX8?$D2RvG3m!6 z!tTO*2qNjFU*fl_=F8G4keRMQxeuRKBkn%}f}S$Q`b@Y95WS9CA5t-43c*s~9Za+E zr=52fIb7|ADh2FMF?|91rbg7is}DvC(J9%5zxUS}7n$K0Z1$~XY-Vg9cZW9^aq9%8 z`PJQv2)kzdbjs!#)DV|rY49AarY^KpC)7sBtXU>!$JBOD=(ZMs%mE4%-B!CHvf8`A z8*8B9hvUUYTux5Tg*GqlVw6C&0=e(w@81Ji9o~MZP zooY*v!6!x zmBWhx>y;2K&Vd;Qfs4Ne@jwClOb}%_?~`iuBrMvd!M28nd}nqT{!qn_X)GAQg`)7^ z`}KB=1}$gP$#>c>ZqU4As!kQC3#Q*x1-0rJ#uV?>`>ZmoM4b*)hn>TN>)j7q{?2 zL%h8uZ0+pGSXff~`&FNE|FE{xAY4lQ*ei_IrS?eGoqj?)Iciiy#udmZvIlL>Dxd0D zW~BTPqT7AfT!sPW18n0Jtq;!25VfRi0Lp3Klcm6Z*HY-l`ubOwII^h8Pk$x_ovRqn zHu85cbGR z>s=pxIpXwPepR(iYXmcpqdg=*t_bG$+uJaE+80lkEG%%h6ltp4m3&Qc?&F65Xf=_BktDHcfC+u!d--(w%&SUWEOOaA7Z@8?_QCVgd z74GGuLAl`yCdwF~qcmNx_q^iTWc55Dj9VF2&-Xdz@F((@Vb&t&i|HV~3sBYF>V#Lk z_$1m4CLdaHVOrYa3VnHdB^%uhn=4%r8DdY^oKJ)MA*Y_kn&w|Ia^WK8egLFnaV?LX z=wnJo@QR!nzf#btI%9Y}Vk3u}cnr&cDr6K3G)zQ0=am zGxt(cE4T(IcMmc%@N+mT7yse|1!LKkT)hEhVcFa#j=_VhE$u>==i`OSuiZyW>&S{F5uB+Vky$qx3cY@*YvlOb{g*7%d-hh}dX!j}@ZlDj+jn-PuetAy4$$P!oP zk*RJqHC%ytY(TW7G6WRm&BYN_hut9l%*CB6ybVFY;M92HlB(avAK@W`{1& znA6<9pJSX|#6@D1ysJYP+eJ;9nNJdpVh<*#AQVhoL48xtK8F=ik;}ZD)MzdH3T>vm zkPn$FTi*3@M<+n^G0N<>ZT>1NN-%U2jJ<6AdNcHkab9K`CE{!-R$ez2{Zn12yltyw zKGF##nFr`JC0^Hk57gnD0_&~-?w^+sf(d&FAx-?PgQL1m-*$0*k&Wry_j~RaOko+B zNO~4Cv&IK~^JRa=l8Wh*^4vxUO~(jrxON?@@11ilE+s#k$!lUk`lMeLR^(luZT=-z zu=d8g@G|TC&*R;8-om>R{I3bu~q5?w(#|Un2<+ zm!v&84c$V7;Bis)dcIqcL0N}}`F`e?zt_&?3P!liK^?@#!ix4(hqh^5IL7W_4>Z5D zJ*dgW&&a59lD^Lf;H-6Yo)|;wT2G99cIw)Dj5F`cdW_%Rq66CBzOnyWgvAdzd9ygh z`<5~~^r35S1hMSg`Q)YG0;Ca4yoP@mmU4g%fT7(COHa{tRgZ;Mc77RR+*fWo=tk7y z0zx_Q9{2&ri|+NdEP^F^t;O|g@h>zF(sq5@i~UnQ3<2eXB?tJU7iQ7LKgcbW^J$YZ zvAHzJ*Le!Gpz2WFiBkM=?_xpT7}RO>0WU|T8%e#$p;m6Ij;TG|CqCky9U!1HvR#Aw zjY@kzl)DKtcTGF+9&O>OD{L6_HeE2Uu1z(2#`8ujloW7VJsg#Mf~9Mx)XTLEkkH6OI;IXA?UXo)bQA?=`MV z?v8DXKb3wyFL}0xIi}w65!oza5|?e)HQ_deLo3bIXK$&XBiCZn^af{1|H(T5aWz@E zv$A)GW+-hd&lk*G+wVSDObgd`gO1PeoC&?U0xLzEP~B0szbu{c z;*LI6i6%w5D`7`i;J2#ZpYwZ%FCUijY9H(dp=3Yy(&;kC`{t)nN zmco;$x?N%5?YuDCT|s(!&mHTETnM6c9MAjvl;iM&o`>3?rw}qE@=3V>QU4jyAN2Z} zcsgx~1%OS>NHqU5+kc&Uw|`S36wPdX8@ed>1Rr9cp;Es_3V0J+5cq{gx5&cbFg2z2 z3BZVTVSxMZ+6dB1HLXO<94>abGUbE8I*<{!7wDOt=JAq;0~HTcTSU`m%G64xzl?K= z8Y?viy$b*mz03|y__bJXFwpEVmc{Ud!Hp0+YYxAn+xIpgkWpE1mFr9CKGu79=!MAz z3d?s`BJo58Dr^m+ILpL*obR%6uN_WEm?{z=l_h*jzzpu6Txz-sAJmD+9Bm1)$j;3$; zmq^A<%qJRocJDENc*Cya7FhgQ{_^agV0eF(@Ldib%+2bu;i1&o@j@U`}u5WXX^^n$1Mf@g8aK$vyNd2AS1ZQ3TdXK@K8gBvd7LrfD-8XhG=gFF*gyN4<1jhK++RLJ8$EP7Gy7B zhS6w>L0sEqyAg9rt1}*9=pI~yo0{EQHepZMEb+?i$1gTcoCXy$pX~*M{WEukZ|Lxd z3eIE)LNHY~p3|Sd-fT;?Bud6@#w{LL*rRjCIi9$}C)sJ6=|8j&YR&x}M3;>BwLye8 zl%#DnOZ*Np>s@s(5fNbq%5X?)>3G@yFxY)6cb=NmTf)3UM>VzgFDSmq3?pGB)xxN- zvnSJ$ypD&Q1n!u+X4zi`%gnz7K^LJN0L$C?6%YBS?hGERiR0Wt(~h{!IZ>fFL-x z70L97P%uztfhljN{jDI_9OO`ryf&oz3rLw@0kKIsq1T~a8f3+U+n#eza|9QpQwP@$ z*_VWJCB4WGR(>_2m*8|ep#1qftc>Q}u50zFi2m2y=si(2M(y^USH%KSyq7!`Q)ZT- znhSyDir9-?yOzm;*3>_C?eRH#IDM;1P|_X|UV?!OrUb>hu{YvP>6zY`^%bv$kXOF& zZL~pSHcBVb;qI=t-|{zXeXMN1KE@UoPbwJ`xOu5y0@SPc`nrM^Q40+aJ->!wz#wtD z(Yc~Uz_yR|k8u)xE!hv-^F-`^7*yQse87jGt6Lv5I!M=J!dtks$g58e=HF}9xorLY z!}0U%Tuxs0eR}GT<%7m zMJ8?8F^&03>p>$7>4bRgCIj1;_opqL_v*NABWht1d%WfW*5`Hc>4M-RlR(_0D*NGfqjwCT zlTW8Z$$li&Hs78(kDdYfT|G-FA8%oUH~2r{mMQ*aWKZ|4_irrn7aCz8Hd?Kh?^Zt{ z0NW(^T8s+>A*qG2%T)Bfxxfg8Gmy?RoBlGVtdBDPr2fK53oWpmEQC?Idh8JO(ir2o zi6Pri<|gq7H$^f{q~EBV^mPiQay`=2j`2(Rm&zEadwi|qrK%=0j9qg zmtA(1aHJph@^(eVUZA8f4D*c1FBozMKB|M-#W6cys}+kltrNdklcnxq>zQy#DyPF* z)*4@5Z}N!=W_$+)!X}9lf3>-#<5MsXoGk>zx zQi!+Q1a*v$La48VXf|^;=X&l~E)VR|SSkv>ckEsL@@;o7>)h+xqC8C#M1&@F_yf3{ z)xWq4gc%;LWo92%oGl~q*T@_&a`o4gPmIq~#bCo?R?oORu_eNAnL^-V4fS7et*x|R z%t%`MNL8_*YhBC75$Ada31la#eI%%X*3T{xA191CO%UNf>wI^SJtPegu+PoP4Tn5N zibMoI3Jk}s5^iC1P@dr)U!4BN(zo;rJPHH+dSp(5s8QSI3Rk@M6l+?B#thiOPYKhJ=c&BvQHh~yOS5kfCR$a z@E|~5$Il+!m`rgqxLPRPzYfX}+oN1|2yaF7i zpw%?x2;CcMC>Q8rZ#b5EeZTTSKn+Z&3+$HOt%??lXuxi@-RkNpf6>7zRWyd|cl7x` zX*bzMCF#FCzY&zJ+pDF)NwKigHn8wG!sa^rcPFP}Hm?QfI%=sr#PIBoTMQ2Q+oq{gyZqfDR^A4DH?;|KQlb`m2*aGM8eL!(4^7KU#H& z(Yrz~)zje^n#)7czZ0H%Y@92f>x?;eVQ-=Un|Xsm_b03ub9=NzpeiOTy_VNHL|sF# z{u#3z;1NqUCu(C`_-?HudKKC~$BDA4ersU(;gs%BFg|5o!r5uD$#>n_?PbW_!9klj zVp?`c3C<+Y>p8dFegY~-cL;ykQt1^sSF(6)^-D=sKsOJ_F2xI08?zbNp`rb8w34g) z6J59bFG~6s7nw)}tT4~70S;(v(KqJ1C;A8~D(|bY8^UBMUM>Pkdr}7arfhKDt$OGw z;frx2`y-$*N@cAU$N z{*iXq!T74;NkwPHL8myxt_&d9Ej56{IhlDjKF&x30><6_`Yw{(fS`HyG5Mx!;S2_( z<`|^;(WwL&I_moUJRnx-Q0wauVJL(mYe`hUR%u7NE!u1|xV8s$d?f?dPeKx|StQb& zkvkx2Yr@#$x~8En(h4BM#Qk0U%b;G7uH-irqM_^xJ*%dccPX#s$tSC|0Py?T?O~m8 zhkJ@oJ0K zh_nrp6D%cQrJA%Bzq?KfKM1DnWrk1yVNDYKOXu{g zC~h@t%_THZWys?HZvo!0YxQ>c$%C{Gd4;*Mk0+K?z^k`wQ84Op^&ch(`n%M68jyKk ziHmfE=*~Db>4xu_GH*NvJQ2>;k+Ap#0<74*ms`Ut#eh5N;=eNTBAr)8I0TRUNl;_S zjx1zF$!b7(|A!fe;#|~d$gDhaQ%=sE>_4nQwK&rK1P#FkD(CTZcsSR00nZo&m9l!+ zi&fv{HYMy^WIQJ|BSNvKS03b&agrq}nou_j>P^hsewAV#@|m=X?s7D-T5$Ul<84{r zHmhb_(*vr|Sk&(*I4tf_UGqr~$%xZq0jt9j-31hD0iw1LC(O%ct?leM;^g0}J7krM zgse{%k8a_SWqri>)|x$9J^c=Q30MEq(|0V4k&iKC*n!i}@(bTsFo`XLF=OiK1yWa< z8j&gjPkZ{C{Vqg3k_~$ME>&<1GNdY_R{g8jMW96g-BrEYWAfUD%7eUl0il*iG-nQ5 zIVB-*Ol;Vure(L2`HSMJK?$pSsLffq(53wH4dAm2G0XtERl|aX6ss~ZNrU@CS{lEG zP&_Cw3W@1@iJf_biGJcW&y6}>a~MehLtP`+$&jqj)GDymG|mWuMP+2?&jUW+#D+iw*PL9^HnE75RmrZ-peTr-M6`s zGxZn7Lb78Af=co$v0<2g&yFW|__g9H-CXbPK9$NBP0Y|~QH8K_Rq)N*!!mnK^7tPp z89CjnSd?-*fI1cV@CTBy3NJAa_`E&7amb03ronElc-=M7yH43zFh2(`sbIckxklzc zJ`xb0+OYN7-AivTueAU8^91FX3xytsGQR1V@+GdpCl_bI6O>}M-7haB+!u^8*H+%b z{4!6@{k1W`-5a98r$rPu%5H}*Xa7(qnEQNQ0D{?AFYl+kN7l6sw-YS8IdR%D_E}iH zbG8yjPcwfwyCBFbWcx#A$mY|&sj!2scauqB(>JVZnp)mc3-HrQ{N3q(kj|zai+pZB zBso=7_1aU=4M)=`RR7KR6R>H$bAFKZ$KeT8s8JLDTI`_$5|=r6uLX#(0rawYX+p-Y zfXo^dWG4~rUZ71f~F$#tOR#<$X)_d9CM=mQ3^q*vs*Q3VTa1@51ryg`#cwXZ2Z z8jM+Ps}Y4M4A*q>mb^rSs(pvUQXaRB*9P%FI*C^!ccT15+X#E==3)yIqc~XVm(}qT ziG^9)WY}0)lO+=t`dsS-#@(81Q3=G3bnH}r^urqu%HVpX!Z)v$gTur{K&@%F64?eQ zIVTHbyb!l%3Sp;3<@{XZU2Qx**3HTCrF9_q-OF2zv3nLKk+#88Vee=RSUC@O%4yq2 zs)FpP`E9pb=9IUJz8Ycw|LvW=QMgr9Qj)fs*RZ;x#>*bepR&ALq-XIz=32xQVX6v^ z_I-aSVp{EWMSMAJ_y%J|BD{fZvYrzq zsWE`q5PK~H6rVE;*hr+R^oP;qmA@YSI6U;>Mm1+c!QCJ8BD-pg?qn`D^qR%El~qe+ zN;+P^t2?3ITZLjyS}#x~oepPF$Sv3QFXVVw3If?x9-&-xn zFjG>n3^yXiP4>rn#CueRV;_tEI>n-*B4-2>6B8Z7`z$1{AeX(myo$^8({j_b5ble1 zK&OGFd-Har_B0+M#ski;v~P#_`z8h`fSwL~0|C?2M3E%3b~yb5aMiD*Bd?tH;8p)e zGCGOuA`z!zU`f^(OzRY;A{h-GkL7ZSTPJ+DdaruzTaZm4dF)%m} zCY`DxmdEZTN3JXtsN#M(9XL-qbQ(1!yOVRjw`1n51ppb%fqs~4po#ptw zy!_p3OlsYLmd)fF4zhdR0lX(|02;-KH4JC~%P0*0#tWX#o&G9h^&3YeQt3??Qrgfj zk~^X^ySH6&wOxJZc3fTYLt&2zcqA_F9waZsS~XKKBYOtxcPg>#|K*%UEL)!M)M2ci*J56 zf#Q1=e+`0dRT~Jj4E=JKad+Oh$ozlFRgQ6 zI9~+Ih^(5hS7vM-*s{>UB?K|j`7sKj7h1)LwH023C&gTOVtr83DJp~FnnETL_($^|m|X1;5F?QtY{IF-GP zj*jmA_v@9_K1GCluDNP%gN$(ArWHDN#`;U$SgZLK8RPgKi(Ls%JMc|Hu{8%NjsEue>27@UKiri6w4NH%r$0hry}KZc z1$wfNqL5|}2c+6s*bNa<%!!}KumywAFt8XWi58}3&+Xp%bAAce5Mxk4>ydw3MYnac z$IVXwom{&6r8P6J;Rm8m?JMhSib$|*5P{8HKJtM0X|^K({?Hrdhz6c}ce<3dGV46# z69ZS)$Rjl-3o4e>jC=?jCVy{rfrr@z**1Rkv_B$KBn#ri5Awa#0p+rz$-@0#ylWe( zVX~nKTbJ5lLklSxqWxk%dEwVY?>Z+39l7s|rU1^$@<;9q6K4#8Di(+3c1(23uh7+s5*3zgX@ z&$G{Ulb?elW|NAnGazr1`Mc z3O~Ru2(MUS|4XU1?V53PYny1iX{8=8W#M@(ZoE}3j6Z5ur zy+*RwnF1u)-X$Q1Ae4e5hgTBflgbe&E6Z zw-eC~lGyE9$@kpqn@4-#Jk5#c|Kt59g@Tfmm{q@IugAO(gfr`v;S< zdqMsc6Y5gf>&=ln1;5e;(0V3znF+Qgnh8>`1crbHNz;PqA4bbhjw6(5&E}^$2IN*n z1D9ok*Dpn&s2=X8+im`==KiemIbn-TrqzLPM$BDDs#s{`Cf6S(>ZcmCcDU!xSoT{M z775yiZ@(QDf!m|+&mSiQkUd01@yMUI^y?i_(Kt42k^U%8xDTngG1KS({|BROH@Ejc z9V^?5b7X3C)k2OK3Nyg>$;8!tCsVEad9RKV22f)8+oYON)fio}$kpl? zLSOWlk*j-hb8X4^O;3c?b)k&mXALL--F37`X3ed&GBwL5&H4D_bVVg_dc%d`NFcgl z^5K^2ZBKGKDFoRVdHc(_pWUcnltL=!e^F1A-E&p?s@>J3e>Sjd0)dkKq!A75{WIEo zi5FFev$Lk2#P3V2CJj+()P&B;VnVfF-cC8dCt0-N#z|Lz&PhH89pknkLXxIjE6V+g zRM&O3{4M+2x8D{obO{lmKYnzH84*f<KDC+2g&*XrwDe)p~Y zem4}*qU=#zLzKtS#sKLg@Qwu(C|;y|MET+ih9MAGe#@uyY)$p+^F^2wm+k<&)&4vl z;6gd4!34aJ_e8Rn8P^V2%6d0@%s6)-w)OMVE|Fj5f2Dz7≶ZGR08Cbr)tidUa|eb?4fyK*e+?xP$P<#RrxKv-s} zDoHAZ&o{QmV7U5SlHZNcz$;sfQ&ptxTt88~3e7QuzFuh{pQch-x|^OnJg}|iVYgrA z4%>QIS&!apX@wUS@De6Q>5+lI(ze{br#m0!ilj}wUegG5BJST_zCy!LfJeISjBQR8 zDKu9E8FT;aB{QK#C5`;fhTD3K_z_v{dfoRv)hz~KI?Hy6EPa3YLs74Xfaoe=tPW_I zwxJ;Sfj!3ZG+NSeSc_U!lkr{hM=?$?5cG=Q39=J%4u{q3?6$e@TbWhNLC5Dg~M&08zaIL3n+?VkZ#W4L&2a- zf}n*vtXq3g8+Mda9qcR^pp!6iQX51j^&apUTD?3?LFFR>)_C9{x8gsg^TS) z4NF8X7jameATdX-Z~%3cs5sy#7*>Fk)@$pneqmgY-z75l^^S$S-7FW{lAkLZ3d-p}E9V`;E!e3@ zG!M{kGRe~iwO*w$n*~64L7DHpE`0EF+7Q}^y7zl`V!7b!>0Ixd70Ot@s-RDYQI#iP3niXc3G75?CqqP6OFVg75=dY zOB9+p$~^xt-dD)ZMS>17j@x+r2bL&WUWno8MdS(wr4}q;SmGKwV`nvmTLxfuu0;DM zfe;Nb3s%=q{z4ct#ejTX5!>m3$G5NVP^z)S%O(5CNUhgGerFY6cb2?LH+;eROlLs% z#rAt2*GHftnW9!|*IV6%V^VTDfz&sroV;WSY!mg@ShQ=+Wdg(0j;6BjrP*++Pz~I7 zi{|LDoAT%0b$TYf{BQnOTj3Z)cd(?HbH#Xht@ApX8ml0$ADU4mr)K7_ewLY$5wW#p z)|&$_J3XLz6{zh>l2_>v@c!iN`7j&POU*o`+7=aUK}y>^{_W47Y{qyB5^p|fNnQJs zm|^+Odtzj=)t)HKd*Va{VGw*q^E`4OvR^80J8~!~c}UL*$Re}svmOtCWuBD#xx2Dr z$_6r=Jbc`trA^iaLcGhCo5t?O$QTtLnB*?N3Pq1UXLvl1Ftuy%(6mpNoykrwZ)uKXpR3iw=Ti2>faO<~p|n+}qJ%6ZZoIU&Ni*9!^fcTU|Z@ z2fX)Af6d_+i#X*>UHQ=6V55=zTe<;%ZHcXuMVNfRL?oMqYOK;UuKglvhTJlFRHJCJ zNg~v-?maQ9>QmQrCSw-{*A_FrWY_p6xnF7=wHQa03-AU{i#UhE zXo}e>5EJ35kPiCMKFXJ)*A^_$!9A4|c5mExL)+`!nUA5}8c*1@fH=K@XAxp@7`P9juJV{r#u`{YS(P)k-sPvt{9v*?PZT?@7yO(>|TaS!o zeH!JI{I;d>^#f3f!v2cQD$q@KE}cCSwM#FTevoII%kSCFGN*oI!6{N5YN|yp*7jGH zjD6_5Rom|Q!%>^(eM={;$%(0uc4pzPdYAF5hvAO%6^;X0hUH5aAeq26&iMYEtOME8 z{9mYZ`+)R$?WzjnCc|CeZD&n^X9$MV!oPx6;r@=O`&01%j4rLhcG(6S6#4hoJbaV! zmAPuOXMi>~Zk8 zb4zCG=9}*k$t;auvh<2JYiW`TXZ9O3gcJpLF;3r+Rdan7QWDvh-B4ncY#kmAYF&w= zT2M9FeOaqbPidF39d8`_>LJ2;ex62UYT4l&U+{d2!l7rLf3=lPPIxTjCFJ-pt7dxP zs~@k0KYfQbJWg3Av(N&Pd~Ov+wnwnM62E4^LfEcBhi(@Kc8zU5UvfNFw&wG*{Rv8S zn1Cg_E~~?{A5fCSceJxew58S;8+@mKM##&4z^Mt1*5TyTyVp^I`6?At?OFF68CWA9c3H&ZO;@rJ;&0nqBFtrI*JPM^QD}!2c^vBog1&cA5CmR z6D%Q!;=;m#i*YedW~D4AURaw4v%C`~6R)MWV>AcL9YN ze@%B8Q-~jf13Alpy4?%mX7_|mE*~9i?;V+ zC*)7m3du-JS+OR|QYnL$e`R5ffo%9?4mM8~#~-kY-{Yj;2spj*m{BuuT+d6_XH+PK zqa8eT!0tX)vAjSJUFDWxQ7gSDpt6*2xc&1BRqR;ylu#r^p`3du74y__4fI0(NYn ztdFlGv}5tZmtAoj8!zBEU+?LZ_in!&vNZ>LYVbRft$4}!M>;~0RPb89_WpjD6PA!V z*3OcR&LA7>&8)XT^~-#Y*Z^`__E=NbQC9A%v0H@tlwYzXR3mHe`A~(5X*eske+~iAYcHU+Z(OSW?D+$1;oq$6$D- zxybIfxH>g8FMMrUZgSK?sc4md)1WtdQ9-0cGAXj>LY|O!HROC-?FhH}V?fq^+T8wd z?0ddZo?2+${S?(r!MBu|ej7S|p8*{1^x{r`D_dOI5mOt1UPl3aSIpeUNf9}ruZv`_ z*Tz(@IRA=S|1P^}zxwhpcZ<@o>EJ>v<2~8MQW%ZH%7V8N z^(<#M`W406W9#e9)lW}aaj~GCvk#r=p9dcz6yP~Wuhy29(R?<3iC1lf9{j8*)S^O} zVPNHdSxtVlh?rwqzas16?-a^cIiNKpHj*1Zyi+pPJJaOyZ_1SrbwmX zh=E@Z^Z30goiBUJv8spcbBoOK`A%B=(#pcneejQ5YMT%KjL2F1HFLzT=Ty|C6*RUb ze#oo&UQXUp$Amm~>EluI%7sR+z6l!-Sbups$q!AjjP*Z^upp7)NH+5T_JrM5U~79D ztUm0j-pxS3jJf{T=@hvEPc5u}n36~{xq>R7;D>D1DRZMBx14s#))7%A{T=8V5t5FL zh^lz~#PxUbF3>YUT{U zS`Ut2KTi7Ji`=~S?e-QeD?NC{%(6#fviIp;ueSTXH!YQs6lpAsaRP22LXTw`?Iy$E z|7iUZ*)J1qo>Ou^T7^;JpH}Gmk~xr}sNeibN`_?xluxB>_CfL1091A83&ix$cIwN=QuB}$_QY)gr1dU^!7OD_6ee{F>T1po~xMF{LZlHJ(z*b zwca{kXW1rS=VHR_dzQDU!v5w0Z~qt<-QG(cjjxlanm;~i_FzC{e1b;eO4HnOWu9qF+`*{|shF9CCx^jPzO%;sy3}j|$JK~{;m_A6L7*MQpaU?9 zwJp|kV)_0uYZ*x@p?V}SyKafaXjQnfGUjt>AzPz+epF_oZcH(lk(uLB8do17pMdKh z$0sxpKT@J*MMmAck)`MTYp@zW1|gsY||!CJXp9d}0tz)+VFF zco^@jfcK&fx(fIqMg4rKmbW|J-;fb$KBAWwD%^2U>aKe8@q?lX3@1?olx3(Q@7}@(TqNiy;{?6W zrPDUo^0@jtH>Ilh4kFtuO(v$+SaI`U_IK`*gAnq>BpS5&l(p%v0bw9XD8bqi1I#0z z#SEvK5HI2 zhOLT2vBwzU+xyK}F^|o}ucFS9ay9IIjc>|n7nTxYdlw=w!$a)gt0sJ4DtWekhS!5F+>WE}UsId3pA&c!N#;f#nbVQ(K-#++_Uzne{Q5W!s+1&+qL7F1u0ir2Yu^!*U24vb~lu zuOvnQ;W($|clQzPq|nu*DU^Wg?n{? z_pumNQO>FDn%8``me6HuL(_!;z_B+CLlDxT;Jv1!FZxc9Wpto#VCnW^5qR{8Q=14y9XNaSL4nt4EJXAvpb5$jC*ea ziQydtycV(a&=^F_;=4)uCWTAhrNX0m`}5^SNvO6VBh2^uFkXM`$27qCn=4PLl+L|3 zXpPlbA2?Cg1d|Az3tL}%ST8xWTKim?7D)Gqv1?Xo(Co~YA391h?^^(489bbtS8IMb zNLAOe=BT&0yU3M11vb8Ag!LJ7FSyPYyp?sNRnXvWZwwj=XIno4pE6G=Qn>u>F}MFq*k7lMWl4svoDc=C`Y% zIHONd82LGxw*bdgfU+8VXl;S6R{bJWvRI&X4RjSmyTU5d>a4rgv?QaM(e4*gn)YN6 zDD%6^=-8j5xo?eMyN#(czdqmDo;WaUEt(kIfyRACU-j(O47Yp`5I6?0js0rui>|oq1=1d``pM8NgCtEedRbFjAhXKjnw&(wwU?4Iy zp!<)~&VfkDum9-p_82g0+Eo^=M>x1&JJ!`xw`f~HzIgP`aUQg}?kH)3Qz2UKMmL2N zQfYb3#`fv=&V?<*>TSh(1alnz-Oxmni(F(z5K+XqfzJ)@o!AHA zxr)qDV0JkDRDLzA{aGnle22-pLKik!Jo4W`E^~Bx1|rB2()m~hFf3*zvXo=$X!c;b0lOa7 z+10uxRN~`l>!T7rA`7dh8x+#u6)jeGA4WMf$b$HtJwKbA4xSMfY zb*nQ&-59+F*YS#$x-}`0L>N~{a#HF@R+F0GVBJ;k9V&hfL+D{>f(d;e)AUV=p&)Ct z5O%x=uhI*&reONNRP|enwGG4 z$E10D3bPT!5mXyaCG63B-sW@VI(0mlGj*`H$74A|t6l#T!sd7U`%9MjmS;OFESe(r zUUGX#ksy0>c}#GXJ^Nd(=!eOEL;qLGym1;SPd~vqBPA+#dGwcx_}>`ozq1M9`WCqS zkjFT+KSrjS`Q7Mub0rAegb*ZL=16(4tBd_%CBfPPy^O_yNEdZvk|COwGDLa$-U(<} zB^`*@gk`~_AAGw$S&_L3W@C6aOBKCPWa;~2pkLHedy?F#et@WWPgbwospF*oU)jHp#UaPI4~YAtfKGR%g)tAyq=`po9iuqZ%ZxjaxOHYj2+7);nQ?RYU3u-!45!)lS*%&- zxhs#?g0-CgCXV;TDE~IVg7p2Nw)$d`)E|n@82Uzd7L9MevZ^ z7GvznSi+s^I_C&2@v@|V!c#F^pysRczgDSwH-o!%#xY@031RWPmd|4e&^R!6wRv$` z`D$(4&}T4N*YWoi%!aCZ->LFx^n`I@As$#R>{1Sb8=u=6HkD5;nIL`Tw{ln1YSq|b zW^GEpDWmUlkgV9(*O0$3rYO?gaMb1u6>q_KA~ z1rwWho0iJ9;#tWZeEP?YbglbbE~*%T5mNE&KJ2JYR(1cLVKH0-4U5>uFi*lvBKU=* z*n5KI;uUN%VfWNSpF7nB-(xH}(VG@KpEK13w+;Iiud{rL($Z3g_H~Ri3Z00fZ!U=Q z^g05#Z&E#J8}r*{`{EMJDk^z5N%J`Z1J%{6@XJQEDT>2=N{-DodPP6?mb$_FM$$%u z4B_)7zX8`NlL7L*jOtk;!{n=#dh5C=?TcbPRs9k4R~O3kaiRo+OE|5+iPze1 z_g>ouUYwB|q27+YGMd?LF%I=Sc40e<3)*Jc^>buM2ji{hQn#?-RKB9V&EAv0$03c4SxiaMXM##@au+TrxC- zl4l!mf>#K6WPHd(M{9161}xpMQ_bCH@RSS zM$kNM*V^fbtk`=M35m}Arl!@;jY@iT zWww0^!&2X`JZ3HF`?zgktwx|%=C+U<^&j7|1U#rIh7XI6)CY?zQBo@DLoyLbr5X^4 zI&NONMb5imdN(mN#@lrJ7}RpMQ)Tw<{=%Cq`YG!nu(hB?i4+c;DLT~N{YUfD+NjFc z-e02*E%iG5l%*M#cYPM6!f!?BB*Dye^REex8`Z*WWc(yegPCV7f6DGWCm+tz)K89H z@=>=gDC#s&z;s&`#dc*+CXFsLeWhBJoU1O-Ia75yG+OlQ{_?_x!M~RsRu}TkbADo* z9U|;vMd^U=0QEM9ViaU6exUX1)Ay<(d3731AZpoFF_Q^VSjbVlZMHWP&{8q~ltKCN zhV|~U4zg7afx1{em8t9ia*9D)NCz=N|5xan?1$(iilNPlMLAng4hE=WvTd6tv zHt}`!(Ta+53r(L&yAv%1KN;Ul-Sj93JCx$%Mw?Csp5D9B7av(iv-%hFpH;$-lHW!z z;v~PI>XUEliZn-bo2B0@b2n{yPquFIm=22Wt$N10`Z4V}jAK4)!k((fhm*@cw0-*S zdoSEy*T&c>#*YGQYEKjBxcRMHR@$if`y1_zA$=E>PLq3pg#tISpRGjYiF$YWb*0uM zT@|SOtrpi&OGLE88+d>xCeU3fR;zhvMhl(GXW|=uAeS=_n`vEZf7?ltn7HzVU$Git zJ^j%_ec_x)@4s;nzrNuX^4$k*qrdoz4o0^3H)DSNRwZa7fF-e^^O@y z8EPI*%q_2*_;Q(a_x?Vbnp%)%m04S2I!wVOOe`9nemve~*7Z^R-Cqe_HMu4Bu6SUv z9X)X=oibhsP;(G|ZrD&KFF&yVdpo3ipOsotv88~7+w@|d*r@KmpQ{&n^6t4V49)$I zH!@MB+83ppG1HGt32nseOtSqY{{{~kWwtgA{WuK4cSZjj0|_I`nSUS85jp5nDET^! zC@L@VD8Zci(!oV3rR8n~X%!GEbw2mzN zGjZJhcy_*&0jJ8974JbZK= z`UX_-tFnBTm z|F+Axoa|Oq7`&Fv9;X0*l@pHWd;~wY+5`ON$WxjBVuQ88{1W!z-^tNez?5DykT49_ z9Zj5r(KZ& z^~Ks`PI2p?!029@!ksx0fBt-D!P|U z)^}*cqcoV(X2jawQZLpl%wUYjY}t|C7T|rDdjQe+bMO}5>zC_HD){&ED*}e^gcvL8r-&x>A4^~30|&r9Jz+{3RDcB=1O$YNy6@Iy5<3a+=gex!czj!3~+-=NRFJM zhwe7InpS|{_anxA;6=aUTi23sfc0V?#l}o&*orCXTD_~6d^NeutAtEFqdBYc3xWnTW^E)_|VpYYbZt7mdxufBsxXX74!yRgcSRP3Y<~;+rL& zlJ!8+HWE-F<>nKv%H!@&6(N3KCE3SITldSAJY>q*E(1Z*dLD4x)6yOZSfRU1 zI0UkjX9YF@o`wnLb&63|y|`xNu6Ew>4u6<fTC^vG$J$}m(<=bHEwbkgk zxJme+mdvV(gV%THV(y&qG&emzhF(gL1F@OT4U2}SUj9(Y;RPENJdREtp%Dp< zhIK(y+)Y$2_Az>g53wL=Q!Nu1>y^Ud3Q(U7heGM&CwgQ|a=`;oyWT?Em^o&Z_ngb+ z8g?EAJYt|C*PCC*!c&k;GUd#XgkbI(vASX}yr!p{-)yIi0uZSA`Y!WXhz+KUyp~nX zfD%S}Z1&WLX&13|j6NAL*nYo1pZz$p>y59^Sy_gQ*%fii9wQo7B3ev*RS8v%?tRDk z^(%YY1hhWh7Jq(yi7obo7xIXA%BAe~q8Rr2$nNQxPnNxX7^`leZluma$8r}Awd~r{ z$;D4vFs4Q=brjiZ%$?w=t(RvWo?yTjO^ez4sK2aG@>zBOW*&!@#o!A+CK}L;3)ju7 zj;EI?Q@!CemAP#4lk@~M{#=_a8#I|y?KarFSL&z|rTi}&kJlnohv*N>DDK2(qQ zYUCIw^w(F$sHYLbsBGBnmLW0UhgJDH(T(aSNaUl=D~WKKiCXOIUNuuDZ*$F}eXb^f zXG~W$=cPfj51~?(T_-V>T;)eDP&MhiS`N~-70fzkIP$_dUnw=t@%jsg+>we$&wzX% zLp*)>&(clu0}owNjtoPuUXp|Zt7{%{=G0~1lCCb-+eH`iCCazJhZryo> z)p&03TItmB?)vk(#SgUXHHOEBN^|=ID+f@`-e{xeLx)a1OC|5jq(2t772QLJ)3vv$ z#XU;5?ppm;2vkUfmG92hH|zQ@l^037D4$>QHByu#eDuh4eQ4gkw2nKCf3M>OH=WyW-Z^iOx^rOMutRxHv2RsRb}fmuTQ&PA`G~_le8C6xxV3rz{46#ApHVAp zt$25XY*g=s=(g&Xtu6=R=XNmM%}3J35vt=Mv@EmY#+-<>`p!7e zyOCO4)*Huean{>a=4wAsA>%#ZLY4iGkhC2b_j~_{=b4)#5f{n!_X#{?5%tT7B&GP1 zl9Q0ceT?T<|KPXSi3k{{kI4{8g0Sn{M(Vi=!Ecg5vjEZhdbL5MG_v$+Dq#3 z!BWBS-!j(Yb-c1;oIb9d($C)^FpI?Mh46v z@0#4TicHl+)D<2$+vB?2zQOZ6-2u~rJn+`zwk%S5DPlK&NNtlBhuJo@a#g~;&+}_o zZyR|}#ebOdPKw<3`qnO#w!arHyPjY-yH(XFt`%SdP*rhidrfa?!wtLd*Y$4Ln?-mA zCaG8HulHwmPsr=K!W8x+~{j6Zhnv?)~$Q;lGc7%Y8MbT~Z{ zi|wuptj9U&)(mmG@)Wk85-@^zo7a9-NK9}Rb<+&CrtdtbuXab{hEGf9v2RS80{0{R z%jDhp^xymE%ZIssN`Fynz7eD|V7|n1?p#Wwj6v2|l8%h4uv!jUk(j|`EoGN_N-}GO zdl{Zac!p<}nSRD&VQ^|78eRk^ z#|w(17+J>1%n{c}&&zYa-H6R`BqR@HqcxJRgCN(?YX#h`&beQrp_VYF!c*{tj@1Wx z<=BQE^mc)o@y18#SP#QJge;fQr=^6QAV)^Rdqxw;s!tB`ZBlb#ZtrTc4_0x)MXpLRR_8b~rCBaASdGY2#+Rekua~ht_1DJFPxDn?OTmKTgKYC4 zYr|Exg5Y#W!a}~WSb^P|GMK&4XVha5StUT7w>Q2yfUE<1Y@T46$H2C5n?n;nOQ40m zA1mP6D<2?<6N~oNa~wDJ>hy$I92|He;tGe3bHnp|%CG2|l=9rc4!o^o>Q1Gv?#}8> zF&(_1nm$`FJ@|y@wfB_PbBDK#=P=qOla>ZkbwoLO>!9@KDDzj9?@|}7g9#^$cw*<5 zV{;8mqCG=ULu+q}WIkWk(#F+a72GzAvZ^?p;}kT%gbwOQU{=&zCoxFLVx zqprAkKFjqAzAN8$y~k5xMeUb2L~X$DxNG@E{T1GE*L|}5mZuq0x%)t`ZjOh~IF85Q zk?k7Tc)mnZfPN6FjBf7c0XWZgSn``uw?mjSaqqSNMhCZ0WZX49iG0)Mk8k^Co`shv zO5Tu;8d)B@)v%Zw83vn2QaT0gg7w=NbXj3bcohGw*GXH)^EHQ*WzYmWD>W}L_(Sd| zF+QgXaIksZE85P;aYmbEI%IRpN=ztB?6ux>C0tJNP3ofk&;_B4;;kxs1Mrk{PEG9j znLf#kfp0u&NtxawjYwtZ_6{d0A(X3r%W#!jWx~c)RUfS07^?lyg1s-d^bdn^MiY0U zTDBlv$qrlNT9toJVzgzEU=btt%`@M0#kPbOCa)JavCy5_R(L`bZw3{gw$NI)FLy)O zuP?3WSbY)Z^UCo2@%|cm_g&FwG)FhIajDH#uevuHRjlGSnB(2--fp$tFtzT{A}KyN zQ9?Yf)WyUjY5j4Ozdx_RQ@qWBmDZ0%y+xy8%a#anh+zmGUOskAl;d zT$PgJWk7S#`?9fUw)3W92pytR*NTFfb2gCuNJ+dB{dnkP!X0Zb5be%<2&=0HEQ{6V zQq!*e380RE%0=`3Xq;lIy>IL}zagbJ*ahsMBF81CEQpzU!f2=~8@r=tXC^XV^hz;oYkwhhuk<8xM93zn^EWYj~-gc?F$tN;+eecQ-4wNaul3*haRi>@$25< zGwdC@jE?2aGKaKZU*m4^p7O*eeSFaUNJOh(Z{2Qq{2~z0`;M{pjY(&58nb)XR+TQi z#%`mW$iZOMG+1agJ6jx4v=Xl;7}3?T#b53_Ay__e#zfpJJ>Ev^&U$@IJUS6D;DoJS zIsb!shy?G=n3EkrdQw(xLE!`bqZNH#%rz}+m{6!bk`4G=l^G?ic|({_$W5y*X?V46 zS^0)XensZaNxGa!2~j;0&2h0YW1f2kEf$@km)RJ;r8?4-L+ zHLHE*cJ4QxV(k99tf-;TX?J_|rX~>f{6q?hd`+TF0A2!c!lRB4zDF z=PV?I5i3%IL>s%q9LiyfDSE|gTG%Yy1K&%66w(MY$UOVfpdj^(GRm_V<=_J1JhNi| zcC|miK)}${GE1I^H-G)-`kZ}niLs0{lY*= ztC~)Plvf6KdOaes1a@8-FRMI|?HrTZsfG4lfj1Fr1+27Z-i=qL&XeHd5#t%j6ZRqQ zWOBAjn*Gqv7bWt+9lboN+WHq_Bs2slSV{&ux zvo)6mXnTExp|)o0a-TEyoYTWQT3%53+I5Y}hi8&kH=lbqe2a^wUm@o^7Lajc`C)>s zP;>Bg8a4V`G`^S;Y82ch>%RE&s7s5;qJ=(LZTz5^uyDKE%zq5XEIN3(NPk-9*MNp3J61tM?OuhfAWlzh~yb(R~Gu|P_% zdZ_(N&yE-cqx+w?loMdO=!T?aW;ef?H@O?#;&LvS{S-CGF`g!SW?{s)2n0|h6uh`n zWKAmAS;4x~UFYfdZo7~pmz$>&^7FY)D1YFQ0O`1Mw?!QoP4KqS*NVTCH}JIaD(sgg z{3zHPuc}KJVol(ZD>;1IFlizQ{Zh>t^HgX;(TjW2vrMRAuCgfcSdPevO%>-rs@~%7 zN91_cOV~$BpN^l{?XaINY)(`31G!Ln0@;oW(mn-x#8KE|dY`;zYJD+p?# z_A5~$nm;B*qB54nEW#y^4q*0xz_2#QnpoI&_|7=Pb|J02Y6d4=4g}we6B_rg_APKI zWp%e4*%P?5(qC6x|7d3dFQ*jX?0#`F{tB?)rR%zzV!V_IarFv~8dK2(X-C$7fd>ya zMwK51P}soRdbsk=`2qUUj|r#I5UYy!JYP=PT@o|jkAg=Of6Nt=XK<*w4!zN6aRnNK zaykr_o1@8MG1eS6G{jk$!4MBcCZEw)w_h0>`(7T{U)8L2^Nd;jt#PMMB`Noki%O%- zcwz-&$B{~*T3-Bl%<*(ZhXN|`I z<#Ozd4-xCzNP?A(kK=+EP%`&XMl#BHajAD_&$D1dcod2hn#D73s-Js0xU5%9(30Hl%jr8RiKJ%vv=gtjvxatWN&s8=hK!e6e@H8H%)fO&sWa8#W z0}XU$^wedupu~0Sjxy%gQ#^GwN>7_)k1XLibN|PGhcmT z8pPd+xcby9$7={!5y+^3i%BM7%P#H)M392eH?0Zw54d*A7g}$|Gt{@^P>*95w)%J~ zDqz;(xbVv7B4a8CYXxyNy}wsi9QpVyqzZ4`I)(%mdU>T458Xk;aUAN z)gcZbgZv4{A+5Yy0`E_!noTIalcE(pIqBEMI9sA`3@AGx9LUDjww$hRtzR`UV9#oh z>;Oqt&r^}>vb+Ru_z7@Jp=UE^I(R0*16Yp{XRwboC&A^&U7y1*rYhb#Dc_>$xsa1~ z_E%|v?rSG`&p>U)G)?X(U|~iTFnOuPEBji7;;2XDMzw~x(Tv(#kMO&DAC@J}f+!Yq z;F@W21oeA0L~JMDZ#ZYo1x0f?L6%aEJ7?eZA#8Wt^{MxAF7z_+S-!pO)h-FT&GG}p zK&#uiQh9?Z2dH*v4l{@!qvYJ_m=K)roeh8Fj=t*wHW%0M_eV%srAx$NVE zNi|#~c`rk->1nuKcRVsS*BJrSw0J)*QV3vq?J;p!xA+igeo_MHI4Y`FmmSJmP?shs ziUp7MoCWp7{NR%|zi8W8#!@}i&uGQnJ>4?-b^lR~*<{rgk#(&2%)`v5=O4X*Rdntj zaf@AssnZm(8s|IapX|?D(gQ~V`F_WOKV7d zZl7P4U&bAe=c^!|USOI?MP&#%oqBJg`fRF%IZxFE!ikCMqmFW)vs*mdUUSrn9jYY) zqLQspW|OF0OLEXAs+J~A>&Oml5b~*ace0X+8XjEcJ<)Qll_NF?NDlGy(Y|!+Y z0$-{xPW-wvgI-ITR?@`YiJ9u7u7u^Ivl`UeSt=jGY1#O-!XY#(DR4$NAKcTryXYSe z!B+LoOXIg5>)#6ZV6)7R=%>4G5#{vYEwpQOdwKM!op!N+mcX;9uT}Q-R^KFsi7eDd zfUe2p?vxYfiexA~R`u1py=!X)*~@l2dZgFFa-@deiRs!r6t(G1-H~%6LFhYc`%HU~JjnmOp43ygeoWaus6+Hc&ElgjmuujkP*A=@v!kn^8 zPKAyY)=mTlurdP?ucFVikCGoTJ(QHYPr~1=srmM7rNoq3^MLPu6_X74y>K z7Yn>#{^^#hQdW%;V@zL`)=$ezSFCN1 z7|iesdQ`K1)UwrLV=y|cWWZX$P9h|$DNn84X7sr6kN&KC{KX~}c?Nq$aP1g1=HG2+ zqG_<{<;{Om(qQOAI!>eZgeLt|J6HZvi9oQiw4d)26|E7d*38#S_JLx>=DMRTcH%uGm=!9CJ+ov5GaSJ z6$8$gj!>Z)sb%Y|!|O>%Haj8?$c5Ik|4`am5z1`bWc+Pj;D+z11`kW(kGW{Gf0Szf zs#2?wJDci`p^OexRCj^f&;phC_4WZKsPZo`$T9;nFen4B-`eo>zl1Vu?u}JU5i~Bp zrw{=Z6>vlDrd!QjgBDQ&2||L2r+~=dAEjvT;1li&mTArPCI{C+fGw|9-Wmhy%x1s1 zmg+P`nqmO%^NojIS6L2TH$sIGpw^xVA9|1Ok^e=6-j*7~6tSsq5B+OB=zjr#>es~! zH0k1BxyA?|?(2eKFHzEXLaG=uu=1hk_Ui;-OP}NsWh)PV|7rQrYh@|)MQ{Lb*{O#~ zP&`WEfUYVZ+;y0Lo{{mXvFf!;O}DUkJ=fdKtL`>q-6?#~e6-kV`qIUvqH3*AKAsDw z*_Zv&0q!DHz}cnh(5IFrf4Si=;XnXq(uhW;(q1PY$o5|EE-a_)P&!8PC5@J?fQh0! zz})zNo|6-_s#f01$03WGMb(ZYhYG727ysb)cNf?PxI?H4li`l3Vhn!dwa(a;Y7t(( zqh!eQ=*#8cY54<&&13LbIcKUhZn%>Hnq8l6z0^|pl|3KQDCzzcCQ_ySw~Y+zkLVT? zwR%fd1dS(qj})pw>_UeNTrG574R>Ty+5gK-^njH>%+CjB1uCAH{|DlK!6u1Uw^lzu z%Uw_mt3w2N5w?#k z$a!jG!JumU#0AHp_oiZ;2Q6m%D&GF^i~Err8jaSyrE+9Vy8?sD#jNJPIp!bdwO9QR zS)w=NWDj&Wi=?c-=lpvho7!{EbW7|2qPUxC>li%H5$sdTK$`YS&RBfc@j|k{)1F7& z-G6+Hi5hT;w-QYPOhqGyCdi+NBaD^V;73_mZGfc(|VMnZy+JDYL3A+*nk z3=-tv{5LwW59q!2Juf<1QSo)w2q|K5N~+zOl1c<#|2R3ch@motY>+E|SjQ{GYkAQ+ zV7NMd$15V-vr(HIdBBK(+Yi$;_-#9Q8vr}q887GBK%KoCwWqR%f!eEs`~X-R_`s!b z$VawY9bCDJ0mIL8TJV!IB@73Bp7sv%cC!Y}BoMnOqAIL`ym0+jef30H$D7mxKn8BR`>~VxFJt?vs(koO@su6{qU;;$rGJR_l^BKJDboWg;I~@;VOD?& z4=`sEt>0r`K7`GMgUz}o*p*6+g< zNxy)^_`L4!K|D}&{@1k>y5ZNq8xpHPyWDB%IxV+Bg)@V4Fa0{GX?-N9m*Ayiz%)M z%uEjS8pZN@!0~^&jk_uC?jV4fe=b)1rS+eye`AJnuV482?-BC1D8K>-B{BU^1pQ@^ zTg?aCJaV8-{|AKpn<(DrKu7#(678>m=RY3vd*1Qyg8mqn1{j@wck1u?(O0grUsL^m zW*vVc^H#I@0feY=0oMIXFw?a^05JtJ1P439Bk(VT0ATx-LI6zv3j>-o>c3}(|1skI z4aNVAkb|Dx{1?i3e*z#ssMaqhp!D&tnN%Ka3I&{$zkhQEMdTglJr-3H@kwo)f z2s-GS6kTWYFf8qVN3ax`l;f0s`2_)hZT>UG z{_E(!bJf2CgyK$r8gY*T@_$(qQ0t(#(eeOm(t`$|==|qepwBh`jWyLvDSG^NnExIi z+LRT?0f781ivDj&f&Yb|1GfD&)ExlG-@NwkgW2Bz(aQy}^~W2TC{g`CO$_{tV1F~{ zAEoK8|4%5EVvzq>sr=0uePGK>37=fAZ~-h5n*r%hjR{bN}A|J%3!>0VT{NnCXQaOpo{1AG;t&A-5r%!#!3PJ7$=w%3bM zEcO3i|K9?D1)9?D<}j6wgo1j04bg0QQUT|x-u~>p3H*LKZTWDXKg^ZsBK*4sn`|2+_mA?>VA}p z3L5^5?+Tl%I@&LgBwHxwb!N|t!Kp>o8ZTR+aDz`<;%Vnzqa}>EugJ;w!+Cn+1uWFh z>HB=v{cRA|Gd(FhY~-;o>Xe^{c`?&r8BX2M^P`yr<4t7_>1{a-m{*P|(j!NbSZl1b?dv@d}=KAf#i<&hsnjVU5@8b&PHKDNNvC#=?8eed^ zo7CY8Zu1JkOKI4GqBWepAF->SL7(v=h>3Owv+v}`B~G^*H34kG1|0^XoLory(z>hK zdRc>y(mc%-xo)LC(?E~FFKEa;9%{@cop$P(|DsWZ(pJWjpYea{vQ9@%s2;OS7h^Ry zs)ST=WJl9f5heE4K0ERP$wBE81=l{({kMXW_% zZ|9RjWR6EbUwvrUx@c9+NsX8>I^D686+VXSV7sH#>zAX8X23?*POpUfxTH-NK|12?9{JQyi;Ffeoz1d7wuloh{Prtsh?VH-p$ZH0=-(M1w z@kN7s_;N{z(&3gwOyod&H!kVOCSlrzIBARk8zVsP@iJbY5W6}9l8I6aLLrz>r7@ff4qV}LE2#dFa?WBf?@WA(2(sHBfyq`u(gEMm_3emSn z46DCK4bMQnM%x#pY>8i)M9TvUiBy3mo%EeYCRB#Q!kFe zNOAi@;RgSq#>^rp{xvGIM>q|skAKM%1%Q|wC8}L8aI@U&K?9Gx&X!+1 zLOuYp=$QAjeJ>larj6*v?~x;af^W6E7GmTneU9G|+$9%!o*Zk`;b+5m6h&Sb#h6%Q ze!3w1d?CSYlPmVB-yI(5VkW4uwd6uf+3`M-jFTp!Zh59+%59V$Q&V)(}6ga zudIv82*FJYN6;f)Oqu{g5U`CALK(5SQvkdBa0I75k5f;>;07R@?z>es{(-ttWS=Si7xdC$Jbe_-)dmkM6z7X~2A3U;-Po z+Gb)P!HBZ8W2=07G^KAM)o=~;G!79~oCpaYEt6T6J}mL`?8~(IT`^|UL%zb7!}Kum z#L@R>k*kJF{%jp}mxfMf66k-rH-UsLp|pD`s7!1#?ohDvR`rsFmI7zv(6!lJYX+CH z>zFP@BB5#%pI&szaS6G5JQI8tArU)v)MZ+DM{YH=n>ur27(%}#HJjbR<>SdoQZo5x^-LOYeoLq2NxS~-tS{9Q=oPN%UJtVfa z8&#NqI4Y5EhWZ2_iP0O~@JpE82yE>=`yDFn&ld5M99iDCh65Xm3vH6hO8^RYQwxBJ znvw2o)44w#Z{M5I8+C8iUXsk+sw62e&(#`LIY`5MXlpc*CQ`zRi_M&v`t@<5xd!}`kDmbFUEj}Mkyo3U%ybEb05x01h`j|4lWA(p*R-#2Vj z&4n_XB%KmE`*zPJ*>eOe*h4%! z#GHb9r{VFZn8h*hY9b?~=Lk6(oJL9zv_Svu|wUY)kF%;t+0FN19VQ89(+| zR3h(0YnsBCM5CS6`lZFIs>15?!>TWdelJ?wFGAl$?+DBKbM6}#4*T}q!=Y2&WMGOK zQ0P#HwAOi?M&~u->}eEYZ_<)_Wp)?Fk%1Au)U)egxf|kOs0mD7CZnj7EL{VqVWH)6 z{M!EadsEU?#JP%H_vBmS=$(g|nSz~74U&}u@vr*&CST6z-)?J(`*1|`49ul{FfMr4 zOcczkV6T!5u&Ov;R9W0AkeiP~Ago^qS037v2pvQ$>%&CkCIJ(3CQ=73S-JQ{P=OHN z29wjWw`Xo)`{8)$K4-A(=qkv8=}?x{XRjRVnU{OAv4k6Au`R$8b*+0B5NAy5_1g$F zsCC07)G_L6PIBblRzs6gU&(^SB3_c*=WbYH^Gv6Pfuuk7!qI2$`3tT}T4Y2;#wm_+ zJHzMJ(js(0!eq(-)i%|H?dgc-zlSQw+*oSRIfZvXSjzEP&%o-lNW?2d=zP6HnhChY zmuuR)B$!Rvsw@7clt?R#GuL{fRiM#YV|t}9#!vd@=C#=Hmg*|=towI&DwMHb#!#f^a zpeYp7wLk{GCY|!N8mD+Fwr|SxL468vbC_57zRk8|V=~Rf=3j@ z*P2%BOC6C0anz_xd`D7Kv~JL+H_xioRJ z%FryZKtE&SMglM&+iykh-9CDF^j3E5QvfchZ-9riRIBCd3uR^|tL4`AtJmD4-o_qr zU>$xo$UG?bGwf%_b!HNhus_zGtHeu~xEvO?;KH2ds(0}aPJ*>iWSdly+5Y)@d#iMx z$>D*Dd#L5{$X?$lm+YGrjSN91d=6bR6_UtS@aLGMPRAv&H9t(;nNR1(Y8ulRzxT*q zy!sixOon=gG`UXNQ3V`6dGU@Z@PNO-dja?E0zaF2X)j!${q;?I_AD*!*$cq0v$T{i z+9SYQ=_jU7PMi*WB=_A^U`+OCjGooTA4zd4aa(TB+OU&xhm;DH9VxYEsE3 zCQ0Qf8nM`Y!sCT?moIg(8t2n}Bt>g?a-Xh*M3oAIB=60+m-Rg!oEwf&#cVZvGOpgh z8H>a5W?W`3CpEqKwAkg?Lch(FW)|0Wd>Zy6^}D-c^s1b59Z{QYSUdDcFSTF#xcgyD zzJZ?aAngl5p(YFRq=>gA}RwE0JS=C53G(4QLS3D^n^As*;eeP!=Z_|e13MOh&SOdELvtrfXfBsRElLcF1c$-)99%eQk z5nr7)ACz^4{&B$-;gX(Oy3VoDZ4flixC`G!;Lu4=!wr7nn-IdcR8Of-9jgK8aQ*(y zRLTXRw>u%HD}Y$a`?s176@0ZBnV+0U?vqexRz$aye570LTKpX$Z%y$@cacgZ79Z00 zWArYzu^SgR5biQ7v&%l{(Gcw)+Xf`I+}^y}DeR{wVEWa5Y|1;W%Xl8o4b{Y2*&n67 zK5`75-&{Y}i>8>#wKY!+86V!0Wc+T@N?H!;^Q&diG|y|`m{$l*hP(OY$8@a| zMHbejk?VF7yy+uQ@mWgH!v4N68j>ZwMZ6jbCxAu*( zNwZ+KA6pMRBP8t7__})IMY1xSMX7}+_KiMQ5QoC8cbAU=z1`ryHtu%e$6OubcU#mO zk$i(T$MbM9FLjfUazOWkUFj>wtWcQ#enef*%b%0&nS;0XQ3EiSX4#4B)WYeZky^Ew z+KM~#GEF+_0jih1wd094bq$i(?4jN-;hBX@n>)t+#6a2|t4AC^WRdI{%+vTx`Bz5g zU;3OK$9dc*3~z}tq?6R=qmUElXG%(DV$a;zbKFrIL-^-9jhbDQuQeFnzzoUUcqvip z%wx;BA&hGEaE-9y$3EvWyWrLzif4Sxr_}>B_d3H^yrbC&suQ6m35FYl?|nG4f&SF( z?u8Ry%s;1aR3=l3#dXOqoOVZfG(v~l+}iuTMExbd?s{iA%uHnlpQP$k!>TT)NCBcv zg19mHwNbo!4S9zyIab#%Zr-dJT$NaU#)tn@$ zQOCsdyFfMFRUeIeUpmkjMuf?+BH>uI098@cyFzH^pb1rpX@baIFmrVAK0$IURU4f; z>yLzJ>(2IdEShg~g&Ulxg!GjAEX-7nePrJ7eL8iDjMCF&E=G1wBIZgY!z?hDg?wb| z2Y()a1RB4TKy*>(b4!pC#L9|ydX^dvo{TMJuV`pgvfti)5XzK^{=e2;Zw%8Jzwru%+3L~BWiRs6KMOtF+-`$c;xwkvL)Q;{-> zUq^NGx)laO%<~{=8Y5=hBg`_cYCzw{u)y+q>Tqj3a(SkI>j$g$J(7IBbHC} zG3P!)rdwFc%;f}b7^6LN;j)|Tg%jaPPVrjpxT1F<3r(K3M!pF%4mQ1hCmr!<8IB)f zvsc4GRp+UwOupIOnfs*JUMkHm`|QE%M;f3Neqh!BeVDA-z*+$HQ7Q8gsAmFoHBd9NY>JKZvKKhWEOz!P;(PUg zgw~UWSI3RNq-;6D<;G36Pl^w&Jbd`%mB!U*Hr0F4Jfa+|A@?3UAOUkkkKcF}tt@>C z4HWUY_Ta%2BCD;Y?lfCrFiuT)#>PZ#dy5Eo?f>V0!83bb9?`9q2!!7t3B4mb6M9i# zu*;Mem@il)>|rh~CFuT@1^YXXuHoNs#Vqs&3FyCE5^|D+-ne3h9}9X1On5Jt@bAZn z2=VH<7fkwRivJk=*MQ&8{kO||!7qoe@qVD1YivqyJ3b9iS#$A9uV}#C-$$-B&Y@qd zwn}4{$Pvm&)`^q(?YsL&kYW$eH;(iH-05MFPu8JA`bIJ($t}EyH=4gLMYOGey)elX zBSD9UMe=I98VJm)>D&Fy8j3ld7UY}}PvgO{&!|_Fg!*i8Xy3sJr|xlo01JXKgn$@7 z1(8as&ZQIY5Bt%u)yv|jNU(Y9sJP!akNr+!``qW(0|HMiFt~#XzgclvQ_#D= zR6;<=sV2ong}v6&xYNC>V()GpweLTAX`A(EiYrYTOi2C`f~ashsBSB_c|rHgRRZ{B z1n$gSAd5!5Er{xCO<&&UwaMRws_%Hz1+C}ZWjU01?;@Z2@5xzZm}I&FnopwEpaUX<$L6tRjuzmH!@m?DxO)| z{-hGT>)mNKvM^Ayou(t~WxnyWHDLEmak0DWWqwo|<5jPYnH^{)y2cSffVSM-`a&qz zDZ~t`Yec=mtR|kWCkUH&m032Ke$!*Il=XoX+B7aiI7tem6v5ELj?U={$c5TOQz@_n z*I#%6?5Y`=D2cR|F$Y+ z#-+2v(#!!n+}nE6Z<*B}Jpn)Io)Ku~K_1*;8W**gcG@1ShVBSOX-ia|GZNfA+&R>~ zgG{d-JR)xHN1M3L)>*)Z;GPL4J}o*ZUHgFrL?|MvkFO5K%(R@n&_AM`v3uA5l5~Vj z*YVw|!I6cZmc!D$T!#vzf53U?O$oTqxGnHCLBYfP9qkT-VXA<-<1fjzm2=f)?oK|0 zI!QVqg?f@s=_4mYD^As~Y`!@a*%*sjVgM=I*60lr0)X`e;5_ms>rW$-B?d4&GiwV^ zhR~Ked|=%t-h#4dcYA&%^!5fb_-~)O69v-yrj97s(*~C%H%c=R4s_(p6kCv%Keu_p z3%{ouZ`%2JIUkHm?>y1x<>epPvZ8t7Ls)z>!~Z%$S-70%mw&yD|8AXH_rN-0WubRr zHINy>b3SxPqZ=Ckx3f-PO1w9+g*5~Xc15P$tVqOpg7nrA${pHlyksRdhLx^5y1e#E zrH8evmNhsoT^g*~blX9sGvUCN18!us%;nHWuk>MkS$aEjns)#C10)L}=O6LI%-d72 z`Du$!lU21}R_4;zzfNh(HPI#PpV6jWll!3dD0o*dm#5hqRSGx9c>HoIZ~KJZuVaxD zspDzYmR7hdC3OS^>9yynb2eAmu{VQ=E&)y$Oh9eRt@TxFP>Z?1p#LLvY-8$|be=f9 zRp;IOEK{^h)2qy4c}XThotL}$Y$8RC->b|V)(aEMxoRxvEBL?DKr)>73-$6>Wuh@S zl9E?daC=>>$I|-aL#R5o9*9_fMLa^zeAbHG{`T61YKx#k`0{XH)L4Y1pSCav@~wE< z#K`c0mv8?PNlBZ{w~!}mLpFwL1q|@)*aE72+|bZMzK+b2$3T-2E^T6hy*XJGjq$HP zoY@H!w9UDGMn4xalQd~mVX~iYJJ6RZr@cy2cDC+a)c(f6(b?sI)tT!S!1Y(ka2<^2 ze-Ic3$2Wi;WAX)t;I-)zIH}jFT-8NteUv+rmcu7`lqM`3|KCERC3AG+ol9X z5nyE57G)V0g}feAj3bb;P~+G`S*jcVR^!4a7QI}Gf=_-D=nFs3 zkcPf(eH=)0Ct>hac7FoQReN*O_KT|bkW8A4LV_~1y2SWH(SkN9)*bGE!R3`K*N%#m z9vEqvty(VQ7P~)nj~zGg{8(EkX)oes?uG|7jx~lGK$>-=A-P2q`8%)OXePNewNF$SLck7O;YR^Cs7c%|lXhC2`31NvX-&MBz9{_$7>FPC zdj|GqW_Cs3>M!5Kk0&zX1-+!Q`Vmk-tt3qO0Gy}9r{{vCLce&44LeFoe=W06~6yqf-2G>E9<3f~zKLVqvd%o}XT zZvRsP_U4_l6S6nQ-@^;__nPr*xJ-3+4Uq)p=Slx5^j|{ZWduY~>G^G@e~YLR^4r{J zwDb?H;+6IfwX!$=hhFhm`CmZ?^zMI&ozVYB=$tXc5}<-J|NWoAq@0m-7L6*mKo`$W z0c1$!jDLdZw@`mumgJT+VD__y==cr)Gq#lv#tZeo02AeZeEx&zVPV#zj+AWS^nW7e@lgb z;P24j!;&d2Xn_6qNEEM&VMp1nHNc>Dp#3u?-^_Y-kTxOzTwINO!o6;NF}Y&orld!MEV}-e z;@V4Zkf{caO8=TL-9H`Bao`G{p*u_95o_F1kuQ?0)FuQ`yN1~EJj}IH8axs)@cu`B z>LU)&0qLFd`5KPM_saf9)a|&sxb6Krd;INNfI3DQvPx=h?BCdciHzpw-|5Tl28{PN zEb*|n^&+ciTep5ADCIJ!{q3Ew578NY0?t{O%-dXdq8LSUt0u}xkt7#@?cXRSBE)u3 z+3~wJH4ZuBGsM444`3@z8dNaDD3~IuaOQ15tYGGE?xR(SmGoNv(V$&^CXtfn+=CVq zAYK{ps8!&*HtrvC5`vphF@PeUk!#j|M3*O>w*AY;~%`*!`+=8I5x3D z6nK(tt75CR+&6<;Axf&9giwpFl~ zU<_}vk&AG1I~#41CGM2%-Z*aEd`*+|OjraiCmD>1j@J|dHFDLM*qhcg@-c6B9GQHx z(cQDl?EhS>3`VY`VglDvMRA=gyNbZkj#e*M_6&)@Qvhfofoo@^5WU6OM}agdY7o3i zwFoxf=A|)PB_6=6fqTzb9k?`_@elSQfvW`%l$1C4uOym6e_B1?#gH?ZngQJBZ!m__ zfqO&)FUOMC)Xmo+l>v{h$0KaZ?boFxIJvTAFBIfb7oxzlI#`f*~ zGr6T{ zhj9gtG0CE?4#kKOW{WOSi_g0Mp%@QnaC*=Zz28=Ct1-HAR6nZdFlco|D|(ei=^rBj z&A5|Qkd?q?N6=n0vCPn}GWz2Cdj7|l^`?9O7FRx)K2+P|T+JyRVa}|+E{lC_xeZiw zr|B81N48&keMd0gdn#i?knciocA3?R9yMzm7sSQ)&L0y1Q0;?cR4(8S7!l=ObS zRn6(m;buZue2=c$C5*C4L)&(BO<^7D4`!n1O!>M`w$sZ3=T**R4Nwgy;(l)j0xshy z=+-+8*K+Z(M`7A~sq~#vo+h5=WTtjdEU-+JKYSVP$(Fp0B!#kY)MNYp$0_5)WYxkee=#=Fj_i#%$ZI^c|H$ns- z{hLwcfa-EoLv(8UEu{ysgru)8x+~?WJsaTek-UK^`<|F&uAg?Zd3Cr#D7!QFU=QJs z^FCUm6Feh@4T+8_l^MTB@y(hlf{}vgojSN8^aBCLbAgvp{LeU`Lnz${I@nK46Y5Ln zRnFsYX5je|ra-=K!be(Q6X>a z&H)g;{IUol)KhHU_UG%D^Kji85wh>Ov8}gC{O4WQ0CH3FoOC1C6er&5-n}tQbp8ER zRtnjZX!`JMwv{|+u-6qhvpVjWd}(O=4&?x$e)4{QtI_zUpY*&zXJ)Y>+tI&jwtC#3 zpy1yiFgD?)lsBF;T@aU9z?X z$XwLS==MrgCo0Swn&97FNGV(&YTMZUT@(MM9w0w(5d{Env6_#~V+JDU%k=c23oBPO zs13I6di}Wa2jrxnL2BiUYMbvr4o{>zB(w4#bbC$6;gS*fNHqh}^C84+Y6Xu}JM%J) zREo$UmW}=MYGJH1uW0@}hmXSO9qH!z>q?Yd@mf&9lH7!Q$oPaRX$5u4 znSYqEd~gyGj8>#sa&`Y<)X&}pAVf=R1XqskXLF_9nX>der=i_1)Qj>fU0X9YSbI>F&#tf8P~o>D030qQ)(Y0?|U#?qzd94VNIg}J zfI2rGv|u4w(u(AaT8UPcz&&*W+?? zK4VNuGxcksl{^mi37HEA2lav-XiQavZ#)4e%`{=8ZMtB*ajw|VRdm5%_Y1`ti2=x1 z5t>kmnF=@t3~{SI7_jRp2?3ZKLR2$Dux{gl2aG<`?U z|1`dq+QFJ)W5xW-ERZmO?hT*^yi0Q43@KjH%vdN&_Uer+#-4o7c{HF*SOxYv3MM=w z`=yqxa8X5oG74LF0aU--$j^%!h+cWzQ9AoYosQ9-dkJ)!8Gn}wKuol}+}lbl>vkDd z2c%#?*uex7WY!v3{;jlju60DZVy-5v+oKt{<`$J*Tnpc;XyU$DO!4|?4$?6 zoLQm)g5PTW3;}R>_HSthM6fdM9y~O62!Z+pzX||Cr2fHJy^EHuUIQFvksy6!VE&~eSL!q~8O= z*Sm2oPcuU#G_)gpq3uEW7qls?62Nv6l^w8<;AFPu#*>k;fFJojOX+i!0p_9Z3)SXreniO#p!1#8OJR&ArCWdP7CU%9F>gk~==FkXA{+qZs! z2)(1uQQInx9J08-EU^g~mfm{Tas4>V$|X|aw>e4)(qG@1IH&hbw_6lQWWTMOkwaSY z{Rg33M?^8|%l98M6w(&Y8y0st6HQsyy_R^MKy(0>4%F9^2CU6;{@B}c#XPU^(PRNY zcheHhU%GcFAs9hdUNUIUOd0cz;1wyE`t7>@{%WI~lX*W_UpQ zz91NhsSwj4f(CM2#)wB3q!>LT(DmT>)+xJsvyJTj?>1g~HkDoHL6u{lJhRi!znaAx zR|yABCKi~XZK8xabGjm*N!)f{&n$iaDg*!qXg*Gs?;U&>G;!*xbo+JlujO%GEWsW+ zOdtY_V9k=(9hb!?L_iq6M+>?m?=|ionO&@1{BRN9e9|r;=r$CE%=4v~a{`1~fnEG= zDt8YcD}m^f;L5N1bLd8N^`>=D%o+metOG7RzjXAnFg#m$WjoE?wZNtrz3hrM<<0SXaX&W!`I$J)GK*Jh1Ok$^WBKsVqIzc@6%xe zsgBqZ^WWZmPxZ=Vi610;W?L}XTmTy}I^a_sPb!DZtLj%E*;r~#%c2opV?4DKZsKW# zL6NLK9dm?0uSFI6*_sK%4&PZyAMMG>`wCW!LwOpj2rw|5v?rpK%q?BOSZ&zf4P8{- zHvWR-U&<3GwAv7C?@T(Dj}{a`?&< zb1)f0%p_gH>H%cS#7HJbj+*?QUR(Y!pi>Lz>fU9_$@S-##Iw8YG1aNsn~#FkuXoGz z=X_TdBwCS>Zsuub!0v8}w7#<(vF@qL3Y2hgD_S9xVf>qs1dH5kUXZ*pNv$3dmEYCo0otf{eXUlXsgo5E#P`-mfTit5Pi`}0S%c;Sb8p0Azy+g!_ccXcrC z^@`e+1PO#&+Y9I6zzu^IP2aAO@S+}2xIS*H88V9zg0j-Gz zbi2f6?QvZ94@h^zV|y)K*IPsZTO&R1Mzm-jj+1iBz6w-v@Cc^tjMe+n%(lERvvX5?0Z`&3GwNa}FaySp~Tw!5B z^32v?D08nZ7{oZem-;Tbeiia!;#ZkNg1gB_d=)&_U#YM|kZwBtDZ7j7m2*t_T)X;& zX!g&8BQLXoh9x(aG-agR1=v1a8uP&*Ka-2E&X8RLfCIoV|I9u&vKncgr^DX zY`|932XsIQ?o35gk($Z9i}teQZd7+czgN zrAB3*KQcN))DX<(pZL&OE#}SBJgP>pu|-u5q=JUA2*EC%+jcN`RiE)ahocxr+twt% zFecGU*!#0E{ocO%G;YmqX=9p8{zFtZtq*T0$DQ`NQ48a)k~B2Zuqt5N-J~j+tNCPo zCl<&)Pj$Rc*qU=?K^RYq>38?=O=erIV4zBIBxIH~3pVP@ddWMJLV4Bdtu%D-mWQz` z8UsYn>v45tI|p))&5jQ;Pu>_jKmTjJVi*~C??q79&w^t{mFig>9WVU+p}0{V<+N!~ ztrzTx;=SXc7Q)M122qEf4~7M6T*J6@uth#{k2BDZj^tZDF7;%7dB$(xS>H8MkGUWt z6PO7%%8|^*DPji3<~CbpCen>V3iR70tYJN9ej zgCTe-R|=K8m7Gys_#-f?H@Zmp>9E6+xLLmE^4*8bc6}c|Typfj^CfmyktN+Fz1n4L z)kW}RH~%|{+vnsr?lWHEKNtmlB)JNJwAl7>yI@sK>OtaLIUu!a@e|#(9lBJ$te7jU zOS|S6b5|)?+s(Cc>b&3fGdd$!6Q0Vg5DXx+19pu7F8eT;(BUvb7*oE!MZxgPkm>R1 zeTa!H$b}^fn*;Nn72xP|doj z%hjoEQQs@h!yuC^;#|I$*YoA__z1@>U#{O*cwSxaxqMr3plF1r-rHKqVcBIUAs&pf z_ltdR$hQygSmT$td8o|aQaM|7)NC%{yZGX| z=rM}~7dRIFs3>NU$=gV~tMvj>IOxFS;ZhQG+;pEse21LONlxdQgZp<}?nT4uwWldj z>eZAwi(2!I-c`8T1)?n12~uH~QH!A_X>IcBcdSq==G^@JaScaA+=IFn!gW;}%)E8E zv=KYLa~G^NEvh0-tBeB;;&`^vwm)9IbKb`hQ zv#mrK6+D@=N7Q+jQm*8#LhxY_<>a+0?4F!Wf6OZv>&(6n(ocZ=Xt>@Bd9znlGecgB z@Y}YW28!(H!CDXfFwkR0+3=U>bF3`Jn~9TAj16_e$d;>+$1^&(BGbUaX0dqDV@AkV zTlA0b2p9NZOecrSFX=L`!fL0(;)It)mIemZqSb4TJU>m3jl}{2i^3^tj2;j%FtdMQ zCC?mpX7YHXh9uq2%bk_cK{d8VQbK}h}!~NKyvs@Q*OrDK2yTskZ~7S zmi0^TN@i;FA~$7ZnmT>Qx@CX2-*uTKdzPbu8U{rtmC?*gt91v9^C`s%Lz>Tl9UiyJ z#Cx)*y&~?NUO@>(NkWxn7x3N6;*$xF{+Z5n$>41YCLL>~br?K4(9!t&x%ve0f|}

OgkN>Q6asVi zhGSAvxW>kDi9@VXRxQs}lIUUtJO*;wD|)WdR|n)q>Rl5w?HX~I#_W&G)@Msutqp4d z7_R=Bef8a-)k`<4BNx))5{QjJWb8PMtL;nFjyv5HTdT};F=62o$)Iz3Pyl>VK1aVC zMgT^bK3vB>whvu3O;MZ}cYW80$3WA)gd4z#FtX?VHp4y#L zXKMD_X=!iAgnGf2O2XQcTiZQlvQZ`ofR5aphcR9$f7~EFQ&zgpP$DvlEUKIe% zeR#Q6Z2)94pGG5db$a5)P~CM$<0>2f+o_3m>8`J715bO(%pfEpMR%+aJj+8Kk)U&} z%KkP@R}r-7t~ z^(Ou>VI%l=t9HcCp)y}fINz(b_Ak?Zo;fA!W41IA$40-;O77F=~ag$5}rIe_n^(F&VD#>!zLh0;I;_k%kXmm|}I` zO_pUp_GTqV%ekVrr$R7i6Bif^U+6{EHR=`tdry;Xx;K_QdbeyFO`>V7%3A8MiipHj z^2GY}2JK|<0Y&m8UyJEKs5VL%%HqX*U>ZAk`_Zap&4fb-ZhI*w= zCyIZVOg5}_T(Uhm`e4=JcfZ%RD$Y2LIo{banURvb(rSdC-H2huG)O->DD185xp8kH z#MM+?eN)$U7gtO$udRLww@=_|Ww-Uz2NETv?#e75F6ANwp5FUzAGA#@CB!sV0$6X^Bsd6a`R4bmN0K+JEN+Y$xmO6FvOZ~ z`3$QyIlIW>#K)QEt852dk?==Q=;38f#(=eRdUI8C?|o7z3~Px>`0Oa$pzux1Lk$`?*ZFR@kOqF|boSEmaGfzroHg^I zV5_CA^a9ls|HR3cc=>wkFbV_8dVo|g-wz4er$$^$wIn*7Ts_8C!jIHSvIGmX3yKxA zKrGM|VtQ$t5RSDD_;jp0_ef9=m3~av1qvk%hnzz7QQm?onzq*ljE z);vYAoU0H|_e^j~Efr%r-=lBfTz+H(IaBOxyw)a6ws{9vJlZefpe!NZvRGj>; zPyCFNJIEmk^qDAO3A@BdgX@CCw%^-YH9yRKRC+RfIwOxc;G{=7MS#B9C|P}Ge)(d8 z-Tdjm)6nYn#E-N}^|{CIsYbQiKWrE3t*nk!g4g3bxSCD(C~mQoH8Bb|^d4%5?*;-* z_r{(}>*>oTY`pVPk~aLkUnr`8mf2+aF!2hy9T)HY7`l9Qk-A8sm-MH&F|??mFOM4B zL%`fIO=;qldfZfptp2sOZHyZdEprZFR7x2^aW}zt1cKDP5sOP#OgncR;J8G!Scz`< zIJvxyh<1RjtgV$eY+f@~W` zIhlh+DE(dEy6~bgp89QUQsnv+JABVTIDhdTFO#pfmiJ>a2!*oCPeP>*?u6_VZ-|vf z>DMf{qLY7~lefH+L8+747;o)io0?%TL>Xc|(7kQ_V=$@AA5vWSYJ{CvE0mwmgkdIn z@(~;)_`=gFr1H9d*YNG6x%kPvf;g+suO8A%x)$ubFMA@BdJWtdG^eG&7rI@kOV?2m_ar=sMyTsCUm{ z{5js!z9C3&+}mjE;=~xn(^wQo(GRrloEyQ(VoRb%12LEJHEF(fu(p$Ss5))(x#Bm{ z&A{Gbibqkp1U2FLjh+ryH#0dF2p^qZXsziZk%|dxs{J|D*u5Fe*ve0@H3Ogq(}zv_ zk_ylOx`wsoh0cR-^ar~Qx`n<&JA2G==T1{!?M>BGGd?*kAtI72kcZDFUf zZ)&7!r%U!q$w$#&-_~^YGp?jweP4`;g*OHH8Jpa{Q&8d1KNDn7wK9$x87UN#%+Q|* zI>t~dsZX%i);=o>0(gEPg%oJ7L{5?7`kk9nKHwx#g{rJ&*dy><8OLpdY2h|2NREiG z^7};VGX8R{tydJOWqZtb-0po4|JK%HKB1_7+HLjps~YKeGVlE=&`5TV&`_C`W!2IJ zlgT!s-1e0XElqM~jyrdhIEz){f4;76-`F>_e&ksupsi$i~#AnJe#He6xPbz&*qPBgl?PuB_XQ&Kl=U^BkP z-(srJobzI#z6n1p@bC>?$94b`%EgX6*sX6u+`z{+EY+e1y@{w92|Ufw$?OKvrAc$U zZUi{i=Q-$hssg7(d)RarXaE%trG$trHk@fSF}VxzK-dLC$S`7?5>rL0{ww_WmF{-t2u zUfs!27-Z=~s&;V;aVl^aI#u|yZWohS<pqV9iX>$ z5vydr#47Srg3C7Q(kT|Y@7tre|MY&z5krLz85veGe0TD`l8RcKaXtS~ClBI^b!=+& zgn!4&!{FTj|AudnM95^W+-x7B)nI`%;gO?{;$qcZ($deYEl{hudFfUxF<>N&NGkOQ zCjH4IM-3}~#aPOz9)5|~BvZC;*@xK;0m%4-1SKV9cPqhLfs-OCOm;YuB{670!x?RSc6!34ys% zchr;pM&nr9MmyzHrmd0ox)t-XCWEz9XH=0*Q00QS?ax#FYM;_+ep^qW80WFTm08>B z5Zz*@jX3zC%yRtXA=vr@xP^KxCVtaL!b(r%vjM~E)u~@g>OTga_!v+f(dkN5fY+rS z5HomB_J=zxj6-Fe%wCS_%E%bw>;|fh>!YlHeKO?`^G*amJNzb}D~O1Sgl`>Ru*Os| zZJo3d&$VxE&n|3m=u^FCzyDN%s*$~KhuBen=Y;q|R@PCl(?o&*&%c{})9 z>_i!{c01zL;`2{$wpQOgot8Cw5t(*W-a#?W(as)c)mbH7CT5NZU%wgcMXIBhSfCv` zlSrFlVuC|wqc!NT-8<~xUyO| z!YmJj9GIffTrLzU@i9fa6-F3LxSqEh%EYlY_cI!7HTaFGh>#RmENU$#mk`&8k(R8z zW*X0pY5?|Ldz+jM@f9DB+&Y3=uEg_n9oT`og^A85lSacR#vGdl-0jq=VMg^U5)O-)l*|&4k7r^#az&-$UZKw0b_BKz zF&<^HQy0$l#I2We431Du&d1(eW6`-C_e-g$)6$7lt(-$I!m_qVS@PQT9y4dX^n*^{ zN11gs8GhSoiTYb&1FgA+AvUneS-;g`evQYIgCmZbE+})W9Zn_H?px5nh_}~yKL#3r zAr|f&z6vj$6uA=$KNH6qKjtJ&f?7i!fem1$D*DaKPwacsHfrHo>j6FY&Dmt z_yeB$@whobMmDqV=J2g@M91vFfc|36EG) ztn>$M^r=&LNTo!q_P4xxn_$73p~tU^^m_9X)+c-owUGn`J^t@MM>FDT>QLGwx9(Gv zh}cjtasr!!JMpK7Kl55d9|g-E*PYs*o_@h^>;cEgjhS#oNLjfOg1av^n01fU-6jsy z4Yz7KnSCoywi&I^JGM+;idV`Otk>^g_wtV%zN23t5SsoILYf(!mha8aTk)??Ez%EE zD#CB1j5WX33O5xWnp7Dhbb^%FgsMtZU_sSFp9_X2W}o^fZTa}xOgN;KYlgPV9f-YaI0`$z>ua4^H|t|mpks`ybQv=?@tf0p`D)nwz<-RJmp2jI zuG7{-Y1vUy5dL1Nw-QI7UkWyTKm`G_<#muO1!4}#nI+kvuiLDiy2TepL1G2v1Gpdq zUw>3}P$`XiG(XfBC*&RqayqZ~%;VSKrf}eQB7LSt$meRCw(nVuW!yy%Ei_(PTe`;K-e6dg^(+**n2Jdzb3Sh&;X~|5JGet+NYrpsSgtCUE_nq3 zb77jNNsqp148w#UhZ#_oJ6$F+>J)maGO08Jbk932KcZDc z&|WYqq5yB;WZ=9mSaF70R#xPaQh5m1tG#cp9U}>R78e(#Wq&f82~wmH6(P{ErIx&x zVMQKaz7#Yf-^qFr*y2QBZWHp=phNLg%k_QZ!zFDh*-c86PHmA&peV*sxJhl(OU9hbZQ<1&-{fw9SH<|kK6Vf4pA3sv_ z?@P~8nI?RZuJzkG{>m~Zeab5AF=sieqZtF6kBBLrBLyc5T&Qd82 z>%+I8m#@Y-zI<1US=9$q(Wiqqhpfv)a2dSb`Z317if?NYbP#Us)MK zXou<+8wmb8@doZ<191l9*8N<+H_0Xjh*#!Th^utjmb?rc&N^tdc>D5|Pk`qhwJ<>D1}NklEq`MR#3X*{{Uoa#>3Zc%miS*vxH{_)*TgKLpz6=DlP_grH~ad! zmU_B>bg`_(RT3AMls89&5;Ht}c7C8f%||?y5~vw8x??K@D}4H&VDH`&a~U^AHyJd)H+etmF)dmIhE1lE%-VPKxJP%(ROmxv;g3n`(Eed56VMKWTL+q0HV|dXU5$Vq(7&5 zGt~t_ssq`rk9v!!5=vTu4_Zm9%A36f-TZB;fP7)&VaqbckGXfA0lxRRp|Lp%5}N(XxXw-P!C}X=6e*} z?M~{6-^l_Fi#TCF`yT-D*6X&z771_;I3x1?LD9d?t$2;aG!0abyM=L^BQXPpohK7O zrg9!&>@@*5eV5JGXi;6s#=b4(6nmHO2=GQ?D7p)>tH;(&`$I zxz19jLC=t433f}e?F0Y5@lZRJAtWH|fMKfh;*y|WCh_%Bn~WLZS!ztvJ@)U=NRlA4 z0j@bau|ccQ`Wl^^OZglM+&g`5cNLS*rLA-jISOvzRQdNCAH~W~aG)$*6DqhVYLqj* zvU>+yPp5dEk#D*_u9M6-;gTGET`hhjFkA&gx&V_zf=wnu{7W1p#}c8=U%j$Y$Gz7QxdliOVls{3`&bPNZri}!t~mel21S~Jrm zd!Mgw76C#`)arh&noADRGnXRc@Psy@h(?GSJ`03-+l1)0uF9wds_t*Mgq88LDjh_n zamDFyw)I{{3B#}fNn+c!sM4>a(iaPln!$dlMvV>Na zb!Uq2JU}hu>YgIj6f|w@Gk!<`{pQ+Ub2e?FyeJ z+3|F#{v>yo$s{T6-F-bJOIHyhCyu>CDGu1dM+Hb`ZdJnNFod_^8!g#D>xu8;8`$R) zDk);`PY27a(TRK#?VFoRoa!<|3OYrv#13IJ#>QEiY0zC3o{3Il_H8x|>$xfzRqAB) zM2Ru{h%=%6d&RLv!|4lNLn8wn&Wp7C2`>gg+&87!qOG*%k$dDP$;MzuItp;&wJ9TU0Y zAX`HIt@jfCJaNu#gYJ*j(0l?x7V)m@1;#02t-CI+snUi9qfaB2PSx~FKL90F+j_dd zae0jCA+9Ukrh6|S6JhHdXEwI)h_ZOWemJ7|;rTe*l82OpF7xiKB$HP133O_9cT*0X zo=6SnHlq{D)h>v=W`7F4SA48NHUI;kqcoNJd>|RL`WVy1sz%9tqn1^T)MP(IuB6Cg zQ5mdBw%SI7ap15OERm)>h=9l59WT1%zw>5bPE|fK3jRQrU#h8I;XxGnSDwmgx$*H0 z#yRng4?0BwFg{jDkMNiR^Afn+_5w@!ydoqBt>7H{)8m2l(tH5vD?z~V#Ix3_XSJbr zQRFC%mmQU}C0P|lZ8(o`@I!*NHBX(%d{Rp zSp@VYR`{O1RpNh&C89(5Lqgg42*va#eHCc+Aeok$eCGT-ai(9y+Yv%TIhXwNz@JAn zu|M8DjmwHSH6wki7E2sKo^p)5&pOpBY8I|yRH+G9uvIjFl1C59DJyJj9$v>p8v%1= zqiH99{nBFpT6H5gE318P6ZxYNcQ6DE6#=q9W2e+c2O02jnkW+ZN=n8jG%F0TqbEsv zV6^)}Czk;Deql0Pt~dZVJv)lzvxre3+b|StvJ-C7J|>QU-^0{$US`n3fb{07H)&Mg zs-#sfznhQ>N|sg#c8miF!cMp9S_t2ml!Hot#2g=+4#}($#vS)}6zcm_Y^au(qYI_n zt%D{!c8(leU0?7c;WIE)X`+vI_d?bEad6aC855wH$Udr6O!85coQaG#2-^7 z1U?qNNCA2D_Rbr?9JTV-14E?(Yq(% z;T-!%+e$pm7O3?pouZ>EedOt(A4{4sA=aHYL_WBC?CPRa;@jNt(z;R+7g%!hK5D1tv zm6>7S!udx`IOu|Uxh<)ibBr0&6`GX^w+6~beTRqQN-5j1maYhTjXB3zUEFSRf&%0O z^KNgY?F1_VYs&ehU)}^?TpQacT6x33{)`b>J`EjmG+ukd;Qa88ti?NUi|IAeuKp%7 zNQSY#8T1Bx?Lt-8(#^2IF8%YzFUl_sw>mTI@GG42-BE>KoA6Sh^*vma0{&9LARWWt zhS2!5o55laFXXGd;a2_W$>Br-Zi0p1&+l0)X`v;{nmJ04PfQ9{Z3S;P5Z`~(b;qtP z5kjGuU^nk+sZywtRGy^_99jJJfd8e8PAIi@s1HkpjAD&-h)A1JWAo27{mJ)-R>spN zq!XpO0|r#r-y7K}XT;&+e~f=-OA>ZXD4@{ex{nyNLoKH@3fuis+2_8k#3}d^9@TVo z-{#p`yz$VZveU^-%Y(30b3Jcb{NE}db8~ku;{bz`Ms@-_sa(e!jK}?KKS^K31k>Ed zjm|*Nt$!E!y>Ep-eW$#g)2ZU>YMr^@5HMugfu^WzVj+}ieG*N}p=&g*cpit73+~>$ zYIk{+u;1jdAjK$gA<>ateHB-L%6myK75xe>;IBRG?XrlwKX|~?Xo_ZCs`UhGI8#pM z&(aZMjR=d+Q3c%ZX}!F5dDFFKOeK)~=(W>HRqe+PKYMY7rR~q?PAePT{cVJ?YSloY zB-z1W%yEC3DL>Ri)(9*Aw#*7mHLpHw)I*f`ool6LQw8ksTCdrFY>_2gAs?N&N z@-_@@tbeGc8j7n^DnSvkNakGiHyjAG6?9Abnj=xx%&7Uw*t%!+xg|s!dQ7{BsQ%CKo|o z+m^vg{-sygu9L_SFy=&cgjNO*Eg#4xzc zzMYwkn$uOp)EnwB_@Ax@A-{RSTE5bgY)FuIf*fgqpo=4NO8gwS@ttvN4~9d*I#beb zsllJzP4^E5PSdxgV~icnn`?U`)t+IuCV?}IO-0F~B8^SM6i$f`9CJ<$gM#p9VNq1N z3uz16OHpre#}t=~l>;fwx@pbS;gcJP;)8VH@YShzTjtPV%AMLGD=DtKj#zPzHC`K8 zMAAt^P5aNS1#Ol)=S`QwZGmslh5#cEbhz$-AOT$MO`V!W?>L{O1l?vUq%txiEqhgl zB0|txk$PrW^6a#k0$*3aVEPbMes%=BoBCmUEcDI+^ko=${f9;)bky?BRD5 zg8UjCujwe>3*(=XZa9gkmPoytP&80fKR&-Y#%}^%`KcfqO~d;^1&({TWrIqFfo+uiIW}LrC8Y5<25SUQ^cWO}~@#%DU&}TaCqd>Fj~+N|5g+ z*-Lf7Th<+q;47R~SKD%C8~=6e>0LToH@EiYv&1pO>jt9mAR$lkQSiO@rp0gU990^7cU>rU?a!nSV zEi}~%KApKT34H$-w5aEoMN~M~ExE$8WvIDUSXQuQSTV=NJuC^qIw!F{E7i=pWz)cp zr~F+eW}P<{lFjuRnPAPxgXC>V(4I9aRr5*kx-?Jog!UCPUe7ylnQ`s&(mAzIde12y z04I~q0G7E+@4cw25hp)-nW6{RJUg~T4lcKRmgo;{XXyY^CJ&Y^3 za^sgs3rdZ2fUjiiqS4c91348Mxde1lhrvJ_|I=4#VfzE8C8mv}uUyti>E@>=#ASYt z4YM?~?>B6Vc+_;xJL3o)Ndbp?%On*E8sUwjqV_@cWKw?{8PP3ozEJeSZmiCb8nlOd zrsj!-t#-y0EBC@$NH+Er^%8Q7wT`D5I1bPr z{f5Bj?q$N0an|OieUV4B&hMQ`H&ljfLB63W1QcGEzDULpbQj!c)>Id0mb?bJU<1Hh zDUQW+6-2%^l5zVhaw?^vb1MAqNsTEJa3B*4oc>*{$BnP`)^3|Y2Dj88flP8mZ+|rX zAC|s4tO@V?e{^@ZNOy;%5`v`CJyKLaK)OduNW(yo4v`w&Y=nRyEgc&uU86^T_x}8T zfAEZlKX~?>d(OS*zT(`FpWLc}{O<<6N9Wv5|Ndb(-Q8B*jLkXw0_Yry<3wc(BJ)+p z#domAGc`9Go|XJ&hgEWsV(9UUV|Gcu2?{%NJlZoer)CxDJWJpbkhe6!#?f9_x+u@P zZpDY7SJZf>&<$g)-K&BEfkOGG)A(wBYH?j@Ge^4vpPTYEq1C%0|G8@B2l*!Hti6jU z?9h=R^6)_q5US_@P}y}1??1=BT{%9qh$~fv{Ll`a0HX~%;^TNlM%Ue2H&7NEicEhk zsGpKlU=JYZD>h!($|TPMbloJgAEGY|7ILs)yf(s^vqSIWIm&(>=mAIEu!kYE%GaHl z0g=t-2;X88BFJA)0cyuIb6VU+jEM@G;`*m>U@?1diNiV=U*S2mm%q>tQ<)=eTbadU zrku3JcK4E{plfp7^~>af?X#3kbnEUmb}r<{-{ljJCA}PSO-n5q9L_#T-|UPtbVBWT zif_g4HgNh!x-RCh$C;}S5g-Zrb8yx&{m|$bwrmiT!nTuGZmEWBVH^;9xZrXLz_YBE z4Xz57z6&yM;WvtpPY6rDGcmzET*Gq(|96J90Nmj{t5GBMO58$1*0jP_Tx1G}eZlCX zuYVfKj=Ry`k%RY`E7!BW#xYsSb=KFaUxrPBIsgS^Tn*0XEH!=t+cx3V*9fIREOEi| zpZ3l%T}GrRk+97+*v>r4BefRAioU3V#+24%xEwCMvOvBb#J$t32z6gFkK_`86cuH$ z9IM6$O`hkL5tj6d<6?JOjXm|s7GjI3_s##z8V7JLId`NAEGSuaS_pSpw#fyrSP|RF zG>BI`I~cwNxQBCi%u@dtEkR^4=*;h1X8uw7e&%Z5B5hW?f=n3+>!c(XeWRs4s{blf zUmYYR(80m}W-uxD2|V~Jvf85cmGtqFQ2nbQM+f^PSFMrsfz{14V4xad!YG#lnvQCz z5bmuN-%+Rl9Qz()3H#Nm@+*EM&(e#S3xRo7-g5F)z4k40`qfhm7lt08555-#)nu~l z?7hRsSwfaN+~}`w!Oy~0@Z|nBjAL!h`X`#|Xunwc?Y7o6`lyN)AE2!(R)&3}{b)zd z{n)P<8{=*A>P8{-2|QZG7;D20+fD`))S~y)W_^(2iwKTR|9j{pD2BybHe+PHrmsqZl; zTXC24$uVp`#HnF0$r^^io!b=@pg)8V;(*u5kJddpajxiu=g-YiBBXipG0}N)K#e%h zIdq(v4^x)IABDbPcK7-offoP0o4VlEhWMHnb4@7B%%{~g%?O8NrRxOFCBAFn0zC`* zRMvC{qRu=58{4H)IuUrpkJP@j$+>H=jnnzsJnVT-t?Gxxv&km*U)<1mB!V2FQvs-G zCqRxrMVHMNF4)woXag%WGT{EmdRZ0mBHL>q0I;Yc~Z_gm~P-mVXUeZ`qG)}-i1+nhK$ zmyW9_o-L(b8()7xjRdZcYh22dLJ!1(K+SjUv0g|Mx*=9XK%Lwbz>-q_FTpk|0!>*L zcjL8Ha(-zqGr*Yh(X0)DNfcxWak#hQpfn+2{jLP(H(2gIvPp9_KNcQOCxT3)bUjG*p6)r&TUC%Jl;Md$R^8tm?mfGzGad zU~7_kIp^!2`ZVDGKK zba3$9e_Vf7-r=*&gJX9J+syufZ=I#^ih|K;h#7e2!#ln+^hgP>-O$@gwKViq_Cyv# zxXK80NbIq5iAk`QCF0^ot$7{Z?`#DUSjMx;1i0YJN=wgKwFX6VJe3}q(f4b`vp;Mp z#zN=Xe8 zcV<5&{#H0Ae(o44r0aRF=F|E%96j3Z924(Cs=Mne!T7um8i{I9lMP!1>+LoR_t)&N zN3!GqIiMIxYrw|G*4We!Lfzvw$c|r1@*@QWei_PaGJt(OZIF9a>EqQ7=ese+P80So zJ^R_lnlHjH_RmaW9p23hUg>AOzLsx*DsFZj(|%>0li-8iv_(X8pZ;yiIlcJ&=JY3W zN<46b`1-vkg!AZ`$5L_72xgu&JC>_fp)n}Ishc69S-&{_>Q$gk`+vfOX(cPncMyR`)^nA&!Dwpa^-gcY1R)` zK9BBYmekSBcJH3EEnYeWh$pedj<< zaV5j2evaBY2KfWdV6BF?A*&l#_#U5(84!tR6PptOGKO#1sj}12IO6%%0lruQQ5%S`8+9!8MbOSDvc;hkc>0Z2e zA!zg>@R+6ab9W&Kv`}v=avgRY;C$raO#e0F>DsNrcKEIYNLE?TvIu{K9GGCuZ5g1Z zTE}}PFeq}tBH=IK6n1^SozJ^6&wvx;{cm%k2K}RKOl*70<{6F<#zPWx(%J*y_|l<& z-F7vs<)~w`<_^L>d>GFjetuDESn+J3Yq9g?B76^kVpp|QF%Zu(cZJnQSQ1zACgf%g zH9CT#SrIeDFdh-bK2Kak2{9~|0YpYa4m$P#IB#WcSnP5%*TvzQvLK22nijbij=tev zwJ{&)j|_!pJdI-O044TU(C;0u-~D7lCMqSRP2*`Hjd48G(+jIGMR77UXD;;e6~532 zNWU;l=Rozew5%%;zzhhyRRJFJdT#4IqnKB9oZ5gaz@0&?Z9r68;T6ng=g&RaLgxbi zH#RWKVj+gBqMtC((l~wc!_r=c%#}#Q93j12Rgu5wj(zNWTNXb5)$c=*|i$vNlALPC@Jy=*!AJE z{_P7)WTX0e@88c?q%p}QMAMkXoB*h!tbybWBBbX^M)6}ZwrwRIDjG{xbPdnF=c0U? z^{Ah9a+OPIU?hp!LO%buQ924G{5Ae#3XpOM|WNj4!?QJ@bWst*b62$*tP5WqqnP8(FOIubGQ=&O}7YrGtH%5&i50uY^a zk(%%W3ySpsJOe_{9u(tc8yhTm-&#}22ZxMRNloPgZnXOs;O~ndXDKa_EcmO|2#HvAn3TK>ip%E zazQX*V|xNRq*24aF2ff$exV+g>uBJ~v}3vU`*N2B?`%r3ZQm1~6JbCeGQ?0!Jah z&a&GU2ou=5Hg*ivKo0#23adO{?5=Pyza^h zx;pMxmPHS{c=l9wUmR0hL>xfp1qdpm?v-u=7EFpIEhy75zT~*cALz^kcaJhFSg-`SU51Wj^bJRD#hw$~tPL4lA zxXIen=u%Sybk+frr$TP$c;6;5oQ<3V9-nn7i-ghY)vdKfz^_vKh(o_>749~*Np`Sf zv~|GYf+8ZJ_e&2Ca}>PKLglXxZe=;HUe-JcXRf`{0))2A({^l?)E%9{&9B3#gGl%VV$1Jg54fj2h*zhHNTZ~c(V`hA3UO=S zuPHh~p$x&-wZO0t^OhXe3Cl#d4X^j%2!^mg$j8{=z5CTSzxFtAKw*dpbAU&<3mIn( zN-Yb+=4KrWH`Hr)$V!e{BUgGx*%>4^)zdBZGRf*E$hUP6WsHZA_dBwWZ6vzHsX#0^ zA%0645h57v+R{=k9v_TN9)itz!$NuY9y3W`T7Tt1?i}kVuC^QXlG1Y}y?nVypIle5 z(E-YjZ-&U#0OM`LN;YacMcN8j2fcuULBK&Dtdj#p-|x=t8?$ZeY(|>br)S^%jmbpz zrF}Zwa{)W=x$WMwsFy!Eq}g%I7d24WJ6|zng@nF@mF{nDZJpYgt#;^An>@AtGbjBg z4Pe#n0a^PEZ<>^R=OfFy(y6=_c&6(Z%YzPcT+zuGomq!1X7K8q!*e$4E-n%6`@PXe zfNN5lTi@iz*YA3-3wEl+aRQ?rUY|3qXn1~Y=<$XdF$(2f9R(ftjl4CE z#72*#fU;j+5<=#-u3AZ-n>(Y*{I7tI{588!Jia|(FmhcZ`NOSqi4upb-8GM{12}YN zq_JdFNo8xvJz!UCJqw`2HJlM5w6Odp3BlT+19?q4HmT)La})C{>Y8=^MEoD_uSg~5 z=Ua>RV!`j1BuKh86rosZs6&&M%g(SZp4p#r%(j4tfC;@}gO~Y51W;KwF_Ss-% zU{E|We^`&oBD~=N?)nTQae91u;J(yuz`4Dma#u+iD*U_E~aDKe6A>xM`hR$j_X2E&cFdBT!i9O`vOe>sXWIg1i3G+Z*K+Umpl;@Df1vV z{IA)u7d7pXx#$`q`B#;d==*31LFT*E)R5{WMHnW?(9rPO#+E<2Tzu!5mx+quObWp2 zN10QX3Z}<}{ds}v)CL$R&~;~ICHF{{S}2Ht+QiJ(Dvq8p!tH)PX5~Hkp$G<7{O8_rEeTwg-)}Jgt0#U*GzpFd3t%!p2EKWPa;z}0psr9u3?@c z7%x531ag%KDHf=^Pb@7j05yY8-8r#Ckz zDz`s!#9_#uoa=Jtb%gg{%cO>_qYa@w3Abbgh^fC7cNYrAdt?tpWNeDP&C6sc&Ye|a zm>xC)$-EGo-`j$iSzz?1%)QsQ<-me8Ur`A9>J1s?%IYkTM|-;Ti@AAGE0mC$q7iif zA|r#^(b?GxKozyRLR#oFI;FzkotBfc`1lG?D;IOcX0&Mo+#@jov!k2BQ-F?Vi72jo z>sOV=vAR1cS$COqfMCsw9~XR+Zp*FfRE4T(ch|dfhZc6Hi3GB5@~pRm!r>|C5ivxt z$H2$Pm$6)TTI}p?cd2%dgK!63Mv~Iiws<9kTMa!c-Y0A-o#@@scpXvQnDPrv;wrlD zoL?JyF{Ai6bQT@sYwPpM!<0i<>aRA>`b zQ+$rz+1^f=PCf3I$9h-QMV)T*oQx{z6s`l)?$A{xCpTE|!G)=8c%;De?^-wBL=+GM zmdvU=*qbQ$TS_c8-5rzC>mx_i4nadg!3J;U3!n&=hxK!_towUy={qg1TTAJCbM%Vo znLOlqZ_!fHgBmBm8%O;^%x$v)-IBcfOEtInzXT&3{+S=x0@f&eaf6B{`lO`kEF<;o zv9KVs4;DG|FZud?maho9tuNY-LKq#sq90eP93(P#oX|6W&5Z;LJ3V7IhXa%XRk z$Z3*J&NuHO9UJi@GBEW00u4!@fnUI|jmQJ{Z--@J0@wvM?9Z*XBJ2;5V8#o}8qr#C ze?9uhTT+Ga&fIR!1C1<%uc2(vZTgR&0eZeZo1LJlcrQD<3kDcvXjuxm)lUkyn-?y) z1CA>8eW%Hu@9wXNOS=P4WjBwgKRs1f9 z-*tNX@7;f0NnOgtp&*<8Y)|z;&flwf{t6|5a%K6ur$I`mr`uNB$|=J(=?b?&%HvH_ z2CqV<*_D4k=o@<7=o9Pt`S>{ZPfuUuG(xE*|MBrkVm9iU^m8c?oj8B|Yun4=NUb!8 zt{snm(?D6zW(9OI^)>vO2xH&gGYmLBc3^e}C|TSAG^l3^j`>Fl3>iYxz3^c&sX2a3 zt;fo>Cobg&NaGj;>>Lvp?j`%iBk~xtyv^fK*g)U9H~%}cpts!TMdDsBzfybWVb46F zwnPEb+KuTl?KY2fm1c~*jEsRuVdbDp!OjD6Ze0t_^unSVH}A+05gtu+ffOrZ`6s(? zU$UhBV=DK~Y3*lC`YWPzn^&iq2Dtl#aThdN@XQxYtM67u!tQhTE}m4!tYKNLD%MYR z`gW%Q%85lVOe?(bl*qNE$|rLADpY0uNNGwPV${Y0wooi`Z#Osypaz=wwJ3Zb@)w<$ zwsKS2@v!>do`~m1Q#^*J?|Cz0Stkba{ak-4(<0M$E_qjGQo;NJPkuic)h;3EZ<5J= zUd>2&ewpSJyouaIw;I*gP21Lo3xAtvGZi0=eBgB{_fD-e4N#+pVDB^izH{e5H`BD= zN^b1!`f{kEDi%F2E931rVg1sFrs7vbkC%Wa<9sRlV-x)eGH zMXz;QR;AElBmR)%bqA|XA2J-UJ9}#z_I7-25pqMyN`!Ac5`qn&qozhSyj2m(ls3gh zL`7lS(CW@B2AxbLf`ZK^7!zgj*C-Y5POx=7x`%!pDZt8GE#sRM zVLt-C+HxA}kgK7A7fdMM(kE=u|5+|Fty`vkH}bIC^wC!#M-XxLj&=z}BIEvp*JjOhcak7b|Y3OnL zHu- zGjPT`VC2Cke0o;b+PJo!E8pdQL<7}#&m5ScC{3H2J3uVqvDcl!rHs%O>G6Hpfji@^ z|K?@M2e6{46{&6*wtq3}uzo&*{Z?+Z(~qpItgJ2IjJp;Hwc!K3U!9sN(Rk*ao|b-1 z$cX_vIXSuW>JZjVASH+!aEFp`1C;IH6RN5)!~urrMj|3b`yM7qo&XT6R{K%4J3$E& zNRGR~Le^c4T#C;?1g@-UnSa)ekRs5Q6H$_vdsS7VVt4%L*?QxET7IkQngASKH`1OT zTmWU6&}c1!KvH>y2$$exl!N*ts`h=fa>)f3ZBE@#u6uWxH!H?jLS0WKcmn*udr}Rj zBIwOz4U-q$2P&)Q1n=;%#$@iV)C=bBt!ZavIt_E?<--@#z`TZo#<=U3r_(#ij+;|a zmg?TLA+-V;?ixwkn9d_8an#X=emh;*R#nowC9h00PJDFF)y3BMo|`q)M}F{Mq#e2m zRP}87sCY#cQ@%jT^49kB-v#jp{n-t0p!M-ecS2vW{lC1ipVC9!3lJIXq@Gs`?aIv8 zbhV#Wu5qIsVu6HMNS1-k6?IHi4{=qG4-cy9e3I-aQB`D)%Lj5REMfr_-k|a#Q_N72 z(UU6rVD++z(_a$-QE&s!g6=Wx!UQc=#4oRn)*pq+jNdV{O`g!u0SA62(7iD-8t}WF z{=i`j;Nh;YE&s)MDV9kF)6&sVv$A5=5Y5z@@kw8FvhGNHbB@vK=JH1k)8n3$07lba zKZU*|zdL=+tb5^KHhC+T`P`HSo8yKNdueg@*Zuq@^-igSSn!UqZof?6qYD8d_kBa< zLekdO1p%x;;&ont&7G16C^9YiYEy7_Q`pf6B*^1ohg=UBU<0N?p4=)CM9D1tOi4F~5}c3?=?22dGX#j%paBg?Zrc znvp|&GQc~hQCg%VD^qS%tI7%KCOmqxWH{H#jdB|~R&6OUTf6PFG)=vCs@r|_dzy?& z(fRR~SLN&~K1N`9s9DRCRql?P(_R=l?`b*-g zsJKiaLP8N<3^N}*4;`zg5A@P_<)n6+nmR9abOeL%G0B;jM#FUgO8%l)4uikR0l~W3 zqmX25MEuobyeU%|j+))bj_13}etiWjogBpO4b}BE`cfV23U9(Lqx%aqM`@`-GQ!o$ zrt2_4e;YWiCj~sa1nSiOgF*yg%V-qD->@e%K`G1{L+~!Vq_zh-0YFT^ueUp|o5SJp z03F%HU*p>aRFu07iak^0SM*fVd0qY2Zk2i2u=1tI1GX?TPfMTdlH2m3qS2i|?+|1B zX$K=;HkH>5EgjphlBbN_0b%*)%+d446rf$P9i^R~KbgKWo0xjLo>rKDQ9ip}KYHfQ zvuUi88+QBVA>sf-J{d(;oYjIT#8-^$pYYZ%Zhyps-;`jf%t<=U(#bZe8a5exC&P2i zzt``Qd{&^^#t^$7V8ghoWx}fay$r#d^)rC=^z2(G*m|O#EArS~;cxE5`mNzuLr-zD zMs)2e%_1DL)n<5Y(kSn~o1&?3O7@cRQQx4z8yPv`*xX#vYG)g`RI?n6y5-5lLU!L? ztsk-_#x?5HkBCu|vhyJ5Lm9{4IM*v5Qj(Se!`-)}uvvs(9Mo$sK*ku>__iqmHl&LQ zdY$PbCf3xapPBPD@kb*YfE1^m^QA_G5aJ`NB6{s$QU{kty$M_{t$(2+65C--MC0c_9jar%%a zk-lGFz6KuO3J=XK(7>w0N4KCl6}xwexh-fESp^d*afv_U@TT&h$_$g`8^a)mPJgWt zk0MppdoIfGwj#ao+G@N7ml^J+d*haf#B%j{EHrMmr=N2Hkrv=G!qD05?S5oVTE{ia zzzq+%gp1IGRI23E%3`lj{N7O-0EgV|Ixn=%Snt+XV&~j=gneAo@>Im+V)sDq5TJ&Z zk9k*zZXX{&99lFz8_Pr!=?FoE7?k)3uBj1b_sUY1at!K5X!#vqZ(fg{cTe2r+u)j$ znx)%X-nW7_=5{UCmaR--t}1mMl<)S4OhOb0`|hhU_-gU+LtQjS!$S7#7BrRL?#4#< zsqN_Oa}O`is2dU142g{vb#zx&Yxv#j6Zb=TMRjuQB7`*RdHu7%k*)2_-DCgC#wRf0 z4Lv~q8d|VYLBr!WXUJw%GON1qwW!A{=#>)sO2raiVk+{twYixj)^HADTBlBIb*%;9 zhFs%l*pBo`neFEj4-G3Ed=ZJzwijDT7wMC@pzI>GiP0Z4MmbwYhHW{?;*@iU-tzY) z!&UzMTJEBgO=8d1DkA7r;m$^T5Q3wsi-%-GuL(4&iTlKfiJoxp5PF&z?Nx(BL;^yK zvoC{n65&rNLebj~Ulg3#eAnybORP^4(DShlfUs=+c=7ea!A1L#B32*| z@Xc40W!V~2)W2QiA-kSzDZN$IIbIQ0a3NARsDHsnpPhq)>TIhH-LK&WlV_Ee*GFR8 zZWiX-bksbgqy}G1)qkf>TJaSM6OqA@Ta%}MbU9^V`<$7c&4q!&>8~$mKg0+{ zir0{^;`QOrWK{syKT2DI4D635Ud72#`hmfLtY4IF%)-^!U9=Xstf;DYBzwVyn)4;w znu}I_Wk|;8>RNt~sr%ZmI@Nius2PXpfOEMWv7Mfufbw~9-w~bs)Uti5jNRbCF`AGX zzP~!HOtLCatGC(XJm*#W80Dk80e47kuZO^$_Nl+qY-HGp+Bt|1Y?3lt-O=~(+gax$ zjmuPSHf15E&lgmLR--Z6C!q*yH??3DjryeYxdes)OM>L}L%^!)fED>F3yddRbu|BQt>sjAm1X z00(KX+1kS)4l)$ICxGQ^?rMW*QD_USIM7$&gy$OR}El~2wQI27&U$CPk&NDaBuX@3A> ziaPnF8%!fu$z$ILbWMiTGG)14^bR=57eVcnBkU#CTi|q!bak=iTi%#R4q6II&?s1G z#x1%V$}}c;y&E56{f0o&T38sI1+cn$kzQaNX~I6`WvmEQN54A&0veEcI6Z%g^8K(( zdlGcn)er=FKl>)RXH}q^H1n0^Vs)U<6<~fgu!<40O%G|w0NPcUO>@LZ%e(+k4gPtN zGO6{Ni#Hxa2Wcp@S#}_yn6>A{A`_BiP@eNzufn*o4>PM(HpqAZtD4YOMfjV^Sow6w zj2mB&0Io*`Ysg3@_slish5(^wxv8waKMVGIA3*u4p!Pa z+)dPRAyMD;%J{`|rSSIAc~yq3>x4Zh#2vk7qZxvZi+^NI&0k#K1Lg+e_GRY=HYd1b zKHAsrGA=~_v&F-L7@h~n4$<0^q1PLf%ZtVwRPdNP#z%`(v9SwyRYgT&v&aTF77;6W z%zYUoJi7mu~J5m%Lguh>(KN14Q$H(6S#{W?jQl+P@AJGwv zvS8p7$H7{xStlh{;t$t;EgUf8pVjnC&Pk&$5l)_I_YaS`*oX#*SZfTbrCehBENy$_ zqw2oZjxTzlKV}Q%S6{XdVlQd~YGVxxfogxGK$Yh?fnj_zRY#wWJ^akcT(QOg^RdV7 zG>>HO{?LR9V2Or9e%Kl80dz!5&v<9FzzM3um_&*l*m@DxK7q~zjfZmH2AHCXS*V8( z=!fr!ZP$HXi!^pf>1UMDJ{JaLPyRS^ZulYo4&%?pCyyJ(;K%-n*?df0#l8$t7!^lj zs4PNki8Ov&!oXCuMO%w>HFCYNFwi+>j9H91>9Tf%)XN`5iEA3NeTX2l{0qg>;hPa; zkf^@ZrB%EdE*v!@lbYs5Rd&S&g`7HjK8j>2gEKNb05dlwjqTSSBx5j-gxB37=nhdrNkO+==<`eRB2Ch0(V9S1&Te=zZH7!Lwta z-Q64iz=_c&*u`>*e58*4gAb z$GM$AqdB1-VfG7ifKJ^Po7j{W<;v8Phg*Wy)_kDKrrZb6b8~Ocy0a=`1l<>eNT*qF zb&>Nkm6D18v%g29Y$2<&*wFJl64l5aeDPE#BZ92TDkzNaR+_jsFg|~oh&2SoYP)wF zGN-imHABJhvECn%nQ}e0wqO(v-zj73pKD`iy4AVa&#mSD3HO$;KJnQugTLBKC;eGe z;&8{;Z(zSY?gjCw(tiekw*@dI2)fzP1(IH_2PhDA$=3o1cLLzhY263@ie)soI?Adw>@g6UlzsAkJF6w#QaQ9u<0*J;1B0 z1#v*>>FKE{Dd=gT8tUrnpk%g(KLrFt+w=?moPA4T%!(IT`00frXlOT#2fhA;WUSj* zweLnGidtm%C2=ng`h!9UI)9jz7nymtOJZwdLX0r2#ge{Lw-npGI+udv%Y(y0C;Llm z^utZ)YB4&|17->;e~z?1y7Y;yq+9`Jt_~xw;HI}X@9|Bn?>$Qh0rSs7_X%M}8&zNL zX<}uus!3rgl~NaN)1<(_kAETs6imfH1W^-2w)~2<#ITL&!)+W<9H*}Ym*-!($IM>W z5?j&0EYEA9{J- z2;kZTT=qZPRz@GKV&!ZOS9fnGnIvg}e&!MG9YR=<_lJYsg05fBtyZnl&=;2y>&~2l z_a7L)O-|*+EjGH19s+s-_N7hSK1I0=Kg-AQO&rnqGbO;=eMMd|PGehp!5Z)%$dFdd zW=7Ndhl)AyoI4UJWJ4+B7)e83o(KWi1tfdmMk3dXV?S(!Gk5PHs?sjXLg9JKnkj!} zF8`1WWFzr{?k(Ut&T& zwYjbqW#3dYN+RR6iYpJyWs}JTok06!AU1F*n&;qAg?!gAx^pl4@kDc$JKF{u#K+s; zIb|or7Ox)Co9?UwDjB+z%YCo{0(9U4HxHqgCqoNejs!`lVSamQK{F5<9lR4)K@#C2 zlii{B<1|D}L$@LuWa`ZXwtE^hXn~r$K7^|O4GSnbk@o_lYAruTEe=C4&&1kUttyFE zUdz9h6jWK74SL03;uBdlFkDRnFuWGG2AAv2oEe2!83SfEy)BweEq3HXXECfQ@L4ym zw^~DfKhB#?^jWD+6hBv;prqElH7{DFXFAVsCsL(7jO@K5S%AC)MCkU!wDF*JvfeiA zP7)V6ksl?ffQ5rYU5sSqRL|#7_Y3<>kh+TiV(?MS}ecnhE2avggurSn7g@g5Hq(Co7RE(F|r%L z0qS%VW0RfoTM8RVz@KBCWGBdVj?z-LK4t;u16|&Iyh}~vWCYAL2GK9$|H}Kj0u!_6 zhA%_ZX4%vadcCo9j4N{W^$;BYYdzqzz<`1}{GQ6~cSChua4<6H>-yCnT~hcC71w7u zn+Vy<>)B^S1Lz~)y7x}bvMszyB-VqRnd>aVk79-Oav0Iy%fLh6?uo2LRpmIA>e5ApNTp7j9@zuOI%bbAjmal^=t;06*2d^MU^t;94N{+xiJGoicF`Vk*cON70@ z_qF>XgscikPbeb>0P>)ucio~3@Z6)0ByoXM?ull;09CNREuw3c-o6WWtMQh7_}mgF z;{Dj`xsK!1M#J3WRhqvUudV(qed%qEbUhZSQQi{SLmiLljfCk6pfo7I?Lyxbqe6wJ~gy+A8!tw;vp= zL_&s@l`@ZUFG-R>mEQ`w*vw1_4{LFICFv7PIB^`oPLZnq(qc*oW@8#?_pvVmtir{XAsL2&=oZ?^%7yFu~0!Mv1pnbQRyH5P&1^|RKKonJF@ zIFOEYQ2UvbxcA+LRnBUvpngHPts2JA2zDFXm(EF?!MFQ$w|@d+NQp`j{ZW4 zkBVFFr2iCQ85pc`O9sOL;QXJwHB&T7N`mGr$S^vnF7SBAOI(r2-qqPYGfa`@7-(~$Tl!E!?--nt_W(DeI%Gcg?{>dUVC!@ zllCX5{4Ai1DoDZ3zG2UW(~8irvhw`vYkkFG_wU3*KZF2=z7{(!CM+9egtm68)FFzy z&G-{vaGj?P-^-ezwS#U?+k9MZprd)`YKh? z>EC3Lv_ZvH^%6^r3q`kT+SO9CvB|p=pA$BxssDQ$=9StDBdL4MN)gn;+*TKLyX*5g zKv}g%stcJ?Q~YxsNSTt&*C#>=ExZe}q&S_;0U}~fDeuS9>|vSsv)flb{qJLanb(?1 z%wX=NyW0!h)l{^#W^s1fm-dsv&cx}C_Kah}71M0>2xy1OOt~*R-9Fo%;E<7_tI#Wm2{RLv(}xd|GlO<> z`^do=wMGv*i$FHzu*3o-I-!oFm&>VHI|^g0UNSchjV{c1NRNA|PXH$1{G2o+Cx%&w zi0C1Jwt()C0fgqn>>rvKAQrBJSLpV)R{6z(+vSv*B{!bske7 z8PYQ>jFrTRP?DrA@Gpb!>*EX0Kp~7^3862}pMe07{OgJ1gn>GUee5K+uz7i=GPddL zzQM0rekAYc5*nV3t?<_+W6yl@Do3x6d$r(0rT90VYC1~1i@|B9D2qN(Meg;lDOv?p zwPwZh&l#LMgcZq*^9NB7GF{Uy`1xn}$MckpXy;`5nf z+fG-&+v)|7*p|(XyffWH9u%)XtHa^nCwF4tQRMjGE%Gd7Y;wnq>p3d!rTb`hT>!V4 zoXx1Jw#y!vSo;cJCxjj}LA|PSRA!JT+!pisUw@m|RjtL!D)bRh|Ef|`@l9g27ncXV zVn2nI38|1O1oE^}kg3{=c8p!8Z0eMC{dK_GZ0FcbURu0NU5x_HfAN#K9F}ea+TWf9 zyL+Mrc@dTo_%U!K$2^7aKgKjYIKup>0~_+;(sUImz}4kJ-+@sM?zC~qHiJE za>}7zIVK11DLa?-n+Iklrr4TgmZ^5Q*`1OtspN%BaewLIj>0U4*WB$dK$iqD2Q@&N z-%boo`&^^%9v3WV0hh8a`O)`9n?oi`IUvml`jTy9^_xI-qIO9OUeb%zfjmR&EW7w7 zd!(i5C(DR>?r&TqA2x_2-Ip@J8uL;~E=;gL``XzweTzXnO4k!SsLI9Ug^i|gtemH4 zb?ljr^BKX^jp3l=0^g(xfp-=dYymK26a7XD)||%x$#-4PS(b?~qKWe<1i8Y%neLY! zT4m{}#)YM}Rwuq8cevC$#U;{vxi6@L^*szIUuCNV;8YVnrOWlEmlSP-0M!-Tk2CEf{T^DyAS-04)jLg ze#$LNAe5ma2OLO*|8ZsX>FIucmK!HYPdQ-jk7NgjK)7^oWnbPl3`dlWXPl5I2Y%_7IY&xivvrJ&cgDC#9X!_Xfo3lr2>a`J zZv}{JDA5+#z~W^qQ^6J5US#h0Xn}*hgIz<~ees?ct(!*e%iB2L z$(#l(x%AeO8KWRlgsyPCStEx|28Q$pdnn)7}Sp*YOzLodatupB(lb~t_4%oyeNU1vt^;~V0XDLB z5gW-Ax>AzV{k1zB_nq+z?TzCAt9eD(Xmu9SSOcxiowd=6gscVc>ymE7$YCe+fT{l+ z3lw^96uwZ9&?#Udrhi=#hA8}fEQd$;pU~pO3V#qT8EEn0-Hv&+9kR1B3a*alKLi$rj`*a{{hmcc>v&L^>qEl+uDOJ!si7FNo=b49k_Up4H?8|~ zh*~{3A8`e{llrI6M5P0qdzYrz^p3(mCu#SU37BR)vGP74(gK35VSSJwP%Q*jlBz8bebozr|3g6`x<2(ZXy+*!mjvL z8tR_zOwwS#wSGySaB!FFgO*jCHg^1{E(gZ|;~Jq&w_p=C_4+zbXpW_rr!~Gkl_3Qa zT`U(d6zVghAs?wbnX`xg?Y&^R>~rU7Y47|F7B3l;-QOO1vqOAi^azqY(=oQ_%?X2> zE6hIqhZBMXrqhW!MF9{&i~HwGfT47@-i(INe5+XN7I;Rhv;)&4HfNP3|6=DU*s$C>}_Le z&gXf5G4E&B&;`%Jp>t(Fu)&huW8hLH_oPzuwlgvU#}7a3TfX0R6KihvvAtA+{&XiPH5$-<^p62@pV)=%L(z zd$9jTtJw0SN*JDnzQ;?j`4N4`N-~x|u?9q0<3C*X3j3_rEYL&`cwv4~R@yheGdWen zH~I1>cDYSpLaNUVr5@dC-+C7lWmwmG(clDLCeYZ2e;J1i%ioD@i2MUzd z$F;#UlAwAHezv42L^h`E&P6l95@F)TE;4#qb+opB%li}iE+l4q#zQ?Z$A zF>5PyanyIKOBvWd06J3Xdm96b= zMHIqLJ5SWLS6V0AImwA=usJ77Gd$b7C0p;D-M$lTr{x;%gRRAVJ&9E@#~cwnbYj@7C)Y|` z@{tS{)4b9>7yPZf+qxC|faC&&&GZsB zg}^@1-~#Yds)&2>x+e$2J_Gq};V{*CdJCt|iceJPJIIB34k(KWW~jXjni8_P-x!iL z2&hlv*d%q!tYcn^rpOP`d@4NtBJkalwoMLT!V=7Na8JXnT(ysOD*swvg#R5%K3j!0 z-S7&t6TC=$g`c3Orshc96@rCeql^p5e?Zk->6l-il^znqT6X#XT?5?YOqXiC_Ce$~ zB$US((tiSfjusp@4i_F}E}^a57SPNvwljky*HbJn(SG>s1RXX|u(g zX)#-M)lpj*pUrOZo(fsAFWun{RKH7H*nCt!XwYZyP|m_p{d90TLGEx#qk87|xdBC! z>e57BUym2z_R^t$WOqmM4}AyKoV{pJ;yQPy*oOdy&>@LCy(Mx&to_$bxm^kCesmVP z8S7y2`I^OTbjAielhl9&0AAK2ReAaqQE-sYQ#7uEZhwm&2UFPHwd8_@#9@O4;=E-P z*@5R)pCPDpv?`Nokr;;7E8CadQZPhxJL0!oK8yQ5qP{XL>M!bc=#WMbkPxIhq*EFx z1?dgFp8t)PNr!`Iz9*agK=W^FS;3Fu{BrS{ zFwqOu5vTN>a0XBnlmBx`D8eyD^U>ry6aVwsMpa zsWk0t1f0OLfr$hOk{;0QhX7(D{y3S)3ZPEr{{HK^<`CAQjk$V$;7RJlQ&|sT2s0^p zLE$2It&qL~aI5ni?geZnnuWu;vef;%aNY5p{Xr)H{&bz)T+*eXNW0eH@}PlmN`lxy za?gxO)iJ##@eJcR!+d#W=m1&hCCA&-?X!<=8#kBQqfZpXfsYoQY7OZ}XdE)?7ksBZ zKQC!1J5k4Z*u;et!+FxKvcJS@zn#sS3W=?BJ(CSYAfbBAy>)I74)Pd&U%4zBG8ZGe zQzS{)T$RHvfGf3=nul36ZT;*?M&|{^3NjR=?e8PWUV)JDkD*KA>V89n>E&OuW5fu! z_UN8JR##gKLyGOA{*0%5b9vysP+J&UZGi@G4xt{)GnwlcG{E@COtX3N-;fvC0-NT36+CIPDS01z2 zUr3_#Mbu!bi^gU)kX;>#t>&^f`n-ZVE?K`Rqh_a(garL)m9}?N|9(iQ2H*k)6#1L9 z;T7zhE+>P$Z7vs#1LMm6eV={W3{b(vWaN+%*+p79{Kf9`N)C3Yb(udP6Fh8*&wdU6 zS2DKuKj((+2;e~;C%jeoo|P3lJgg#dtEcNvfAEBhgWbD99(`)?92#}DjkoSFo`N)I zW-WwK*;Fnm;-1a~0+s|SudBb_i9g~iNUBtBcm^jObGJUfskOTml~nDnv^gOuf1kha z_t>NJ;3w^DrC5e)!t#?}k=4}Bb`V@3)D7@_T>QlD_V&)OUj&_$Vw+(5zB1TxJAz}F zP54h)*zDnY;LaIY-=u)bexZ_IT!}vWy`j~`X0Z)I2(H|?E8zW)>|? zNKMUq`>jNI)_bms3B7L=u?q5t5{urfnAhzjupcF8)yL{&A`4PC3r4Wap=SsB{^g+* zbE90FIQ2^z>sH`jtWgeJ*&`aRX+YJdUHU97gb20v;Y!Za$v!MZGW;80h}WKQTWNi> z+&gXujLi&WM!Ohq*zX_Mk@+}RSGxNE{`6OblUCta*DBlKlg4h1?Uf)Ko3g`|pojk;Hb~ z!u23z%~7l5JxC%6?~@t1ufZE(+UR&U4z*Mn@zw9S%rP2oLrzig+QJK2drwZBLqbEp zt`f!UzD3J=MM&5Q5Meg8;wP$fE%!sgWPX{rM$uN?0=Ydq96K#=65?4j^Rr%Ol|`c9 z-Fhst76ELB;>O&|4S$@D`@hJIBq-dpjf?i4F^04#Cp#$+vdaFX3LB z(c-#KiA2D|TKuf6JmiIj)Cef8D;IWx3vL-yE4Ug+Z_@fyWLVwKzn7?cDc|l=?F{xYez2vK{QMnZrimCpQnK z@MEw5B$|5s_pfPa#sa*@xgs`8XV$hWk^nY*`8at88j6+3$pNg+oQzbj5o;dN$4>P6 zB;GNroY5zN_J35>?dZF}1R5M|&SRH~%uy>4KC|(66Z_|@2^4mu#uZRn93Iz;PM-PO zw0Gu6kefo`r_(D@v7K}BXdOC^?cbB`4%c_9o*Yz9Rln~G7pL6c@{N6HOv;}*QC3)Q z-%=&}XV33rAi?nWQOxG8&!|UmX9gzT>Zj7~30KoV%8qH&6O||_o2qzmQVjFSEg_Yf z$j+DOpZtg3xLH=(^RHlW;Ckfu==#>?w4xLl_}|{^(dNmJ#D*AP`#34T&zbTCc)=^z zML&O@(0`P*Cz9v%=!JC)uFeu>PWb)A?W-GoXRWe85VtE(#l4Uk@ugmAr>UQ&L!A-S z(vQ@t&JkE5dv_h#k}Eitv<9V3LrU{N^UP_&S0#CbYX|Vp)UZG3JB=Iz(Lc#6GZ2$uO}`9#-BK50|*W`QW%* zN*MSh|6)2ZQ^>2D>?>16r{H5Ea>FK_HoEbGs0vCsW?OBL($48J?eQteYKtl=c<|2A z>Sp<+Gy3ZXb=Ou+MqlOCFMlZ8{?s)2RbR$t&h4$nG$za7R0~$R_fbFPoLXHAh4j*Q zb1_qzCVa(dz4k)D0>NJqu)R^RdoX~oCY$rIgAL|wfyPjm0SwR0!y8oX996)qS{~Ip3i=!=gJzdypMT}RnW5M0= zR-r*AK4tPW{=+%SEqGbn0P!p)!zAK3;3hpsfd;F;>r%&YZgi|TUTfL2gSOzt9bj53 z!~Z)N_tW2TpDn(>?gSY!CrdQs0MCF7hjOR7@W6hBrBI)Ox2_M|bsm{r%Ovc6*VT#^MrVB_D zu-w>D*8VN0f56-l?>y_&E&U>w2<4`_qYvL;L>~yec(EA<*76KEdc=r#{%?}h|DJGirg;ajTWCV~ zy?asVsiMDB0<3Y#OE0c;v8FDeqvPj%P?^*TsWnXG*;AU^|GMq^DeArvJMtP`Nc$@NnRp{dH=d})^KK|Ro>ra59=>Sm}0~=N0CBU7$9?K8F*NCK&p0t{Z_4qLy6fFr1!Ys@*h;q!=|<|Jx8- zOVDxoOL%#&a9($zX}!{w$%973fu_R*6TnOjf<{kh_4#{X&7Hc%=TTLi zd?_e8m_Zc;$(x0F+EFSnu|;L^_IldARfE*a!byiNSjsh4oR<$(=@m_A-K=Ta!a?}A z0T1@M1h}y$D85&UQXuv`{8Q!Z&gOfG4}JDE%3frA&lFX2x14u&^U29dk^=7FgaUAhVc;73_PlA(!XzzRBjx8=bcWr zcaVV6-ln0OmoK)%)Sk00b_CNT!(&C4*;?^Zq@xJ|FOMi_6xgW7lVV>l_V0L2vtq3>Vh0YXe@n&fWJRgO={(#H$-O?aQCUii$s^^V z9C4#b)^g;V4$k{aa)`UkZS6{?mNW2)KH%3~LeL7vi=3(3iKasBdlO{UKm#BaE$UrvrKfQ_B2%GIsi6;f z{^QeLg6)Sb@?s<+SBn+eG>V_?bHnSe{yy8-QdnUp<+gQKC%7MpOsau<&;d1bBU|uW zuSm?!AtQYA(3W3ZX;9gmK$#o8CEt^qCM1=wr5AWV{MSv#Ozdc~negW?tnzBpg9Q(M z=wCQ$zd%%%!5CyjFZp0+V!b>aL3t~~{I8XNXjG2#kSkwVozAw63!|K8P2L84uJQb7 zS|r07(@+c_=OjO;oN~T7U_gWP$iP0|L$rz|qLp((J9UyDNj?C?1?8k1-0ieg=&1Qb zHlQ#7g8mr0!~2zQxB;Vcf#)S#1Eth;_KQuBKlAU784sszL`2y@sEyR?MRoB^ugHR-Xm2>~WAbso zui$Hb)QFH4QiV>q1C#TFAMO-JR!y#do<^mV8#l+Z_ToII#3vj~LFi?eP|F`F)g5M_ z<4;H@oD3k%kLg$No_q2@e{USVOX=uO1|)i`jBRDq{!?}%CQ4Db^*GJ;L~a0it?G*b zH}5>xb8s;XF3cOg?t~u)$q#cD?fT?2=&asfJgWqQo~Xlecsnj= zQph@{4ihWwokS`OJM!RMxNSu1I<04lOVzD7KB1x-p*<+u-C}lnmH^=xCDKlt6B^&9~In{9frYxW{ zG$w^0#`%4tzm>znvgIniKOPG8V3~7Bo0^b^5pL1$@Xm(6t;T`x4dnv=OWQZPz8(Z3 zqc1{d%1n$YM#i8rjad^&7lu3d#ep)d4BuB?YkstQ)22|AJI1o(=ksj%(T(uFAkJm3 zp5@w5e8M9G;}~2NUwr^G=y~h_I$IN_c)TeOU<%3_dezCyM{|+UrtU5149q{d?lRig zzEpMMb@Be_#V~dM5t@GP`Q{M^g*!U17I}C%JG(#qMe2h=Lc z_zED6PE!QlUTpTof6}-E6-PO)OW6{JSExGU*^{|7^als);QGu)e#k<*(T`d!?Z4yw z!)2aUJZoO969?W_iF*RnZdn-KTRJtzvS^Smdp`(KD*eYlF+4;uNtEKX5nVt2&b(vi z^pA^)2}(MbcsENGRbNmJ_%;kxcf1~-FhRM19t72yW3o43z@5LfeSCTdMDhwid9Era z36%FmhxaZu4+@c{(EYDu;XNjxng3TTr9=A7!(;Obwc|JF3eR(UwQz2yQv1`@kL;u+ zlVYhUx8wSbC;c2GLu<^HHNs(37sev66W(FZ;_B_qp8Kd>Z>)I>YE4Vn+BM73G<$&d(K883V<=^(|5g*wMU!7d zSQ^`~3?kd@=!w}c`MNVHMdO~3@mlm}9xlFq99_MTHCQA=!6=uStTKyRZ7g_2?#0Kg zAjOTcCT;ym=^e`3&WRuICk5*&wNFcN){1eu@Vx`76wJOMw;+2>=g)@c>3rH_hwEq` zwQAsj3(H`?HqzH;d9vCZ$syJY#jI~Z#ILxMNx4kv*O@5SK& zx~B36b-olAP>POEe~JB12K?<_kj2P@he-w5SsbOZyoBYMf*=GuO}+Y^KH#0*Y4if( zMH|LdS6*u^`U{i2!$RJxU}|bWH}4)~f&^bL8UylGuC0%Y3UO6yKLzkfr0cIeao_a` zn_T=h!COt(>f8~y4y24ZvaNxWK&4CH=q?c(;&ttr&;4em6gL=d`1x@%BCIDWc(fpQ zNPQdJ)jz#f9rLaa20gePI5j{wX`o1!6os+{ICdhnqHtVzO4(Ht2g3wWPLN`F&*jJT zd~aqe%U;cOg+6LNX43bfd+qED-@%HCCcdsNgS*gk%mLehC}EtS z&)8+mkshO;ErPLYLHqVtt-}&oH!T3>NLW_2JiNGY= zGo7+MstopFfG;l~RffXqSLg9h4y?3B7V4yiKi!k!DAs3DfB!+ljInM=@Y^(Iui26% zrsz(@@0U*O`Z{gYTOa_T-a5cxyi+Rm(LvIRs#$d*LTeG(WRn23M%DP>zFrD+LZYhL z4G{86@%~409hTMOqcWQlalPXI%F6W>o6moCR}Wr>iD6cf0pWU63LnJbFgOMMo#4wh zyID42w2bPOoPbku8aKJA>_a2_+rfhW{Ilq7jOi8|e1p-raXWb_g^7SQIDhT~S(0F! zqoJW~_5gG=<+gKcWoNsI=zof+bs^54mXkjMh*=t~ZV!NUL3XMPSs;vP0rKFA(mXbY z;UE2xIyemABTW#KzQA5A^d#)i$hB7bdvmM>LE)a3^1 zPl26ZUL$>In4&DJy^`K58B&z^N?uX5%^i&N{SM6X`U6AfKYQ-Z1P@fE>irr1KoSDT z1?sG$Bs_14=pb%%bG1Ff*-I7jlBX#p`Y+G^_;-B1Q@JTD8B2cT|6vzp<-@m8IJUSE468r+uUwfX zZ^7%{TIjY_;ASTa+D;diX=&qm#~+(*`-PmQsM-SyK1Ku3m7G=!iFWQtlwYa9<5l?q zLy8Sr-GPbpE7_M`EVYQB?@K%WtQnj2qJuHx~LI)(Uvm#%*smyNDtM;ezOGd zx;T@CXXU&o!>{bT;IUbHtfc(^>XNS0p}7CJ@k_E}W+k9{1Yntyh=S8W>-X$*94b-$ zUZabfyj?X>UNqd6@2z{D!mSK4UcyjiGmpIG*#7N zxo|t&{HBKfS;rb{JGMSFHIOWj+xOX=OYOk$I=O44+%oENWImC19@!GGhn+w+J9SB< zb*Um!WRiL!v{rO|FKe}Ov2ppTn8GudywR_Q#^0x{T~d#)ct zO?3g-XQBq@d+i)|e8(5t(aG^iUUoXg%bg}n>P|gHk*`=)3S4I8*M!+<{8n#%+Mlp{ z3#7pny$n59nU9tOBKqQK)(4W9xG1}HlpRgKO~;+>6s~Er7LFqOy<%N8kk~IxyRc{L zKHlJnHWy&6^t?GfYyXMmyMO zig9?6l;CGj$AOnTXzJA4;f)ZZXpXff!vDC7Hma^Ev{fRQMezrI5?}RLUb6=|3*!vEFB7nU zUh5H|BIefpDBR?}?#NQ3bKw8h-fHNY+-B9LDH(ctk_S<@P-VsbAOTUEHq(rRJCWjd zH&^hOn7@q#iiKQv#f%JjHPjMGw{4SMTS0p2j(*4lI7GpZvxowAwPwzZCTRdv(we!lD*!?Z5TFc^l~`qF?z^ z#Gq@QINit0VTc6n1a93|p>28LwlUz-@zP(vnBx%R;~%}eeE2}>A36O6zNbhKL)?4y z&4+`iD%~*u*osOH8}BiL11v5+8!YbVws`bD1J&AtZ=lSTPoC?2Ts4v8RTJv!9UodV z;9{`;F~1abRVNoi*N~14r{{NhouWIg3F}wJ)m}@5-)%pN-cOk~p&vK`@XEna7Z!0c zqqnBIpyjitf$oXB&LwbwJ;?6KSoGiNFP zpwY>VQH9g9DdXW?+ytqd%gome_(_2lDi@(9istZ^3wXs@yPf3h;y(lDlQ?JEG9bYG z=FwqTpqAWetXL{u|0pzJ=&E4d0)sG+zXM^!4iL5SP_6kXr}cZ!TY5CgD-o z#`RzL(R2S-84_)~W#clCX$Z_IX5%snY1~%2-mok+`Ql$6BXnM@HUBwDv18bg{E9Vp zkqT68eL7g}?>3?avsm_r)=Ga|ZZeD+{JX7W>w+Pzc^Z*J6u2Mo8e-tT_zCA$)Ah|C zCdb*3ItU2~DLa6Pkh3cSpQG*6Ryn6mq5M5laGh=~M3TMX-n_?(3x~#zW$cLpF)<@x ztUeE@((44#d;qgAz{UL)rByVO4q5HdF9|h2NLH~_PJB$6GXat5HN`!^NtK)YvfMl~ z{&^OpCPEq<5O5;V{&4rAtfuB)X}pGd&v`b&yQt>Yxs0?tQ*e$}H@U>=cV6dle3i7IBK>!2B>AKgfldsW?WYDA1UE)bSa5 z$QW&yimeOA{%qP#DBnkiQX{H0tcCpmu^lZCVE`2)`H*e-*v>NHqq%TiDsu9h_aUrGFg^qUhf6g!dP`}JNqxR!&%7%WU!b6pH!vNKDc5Zq zp&|8v=$dUJFORwcK3+pqBE$CA84qPM*Z^aTkG3)2dA=D1u!RIl0w8@<2`q5YaXy;- z%B-)?Z}pzP*cDUOg_3u@szM(Ch@=XY&607Ce-9MmHo~x1abJ+0+~=#noQ=oQuf8pJI{nGX4p1)}f_57T5> zdplG9mZ?PU(zIZhOy*}$aREX1aRIiai`87ISlp&v%pV?;FK>u=)y`7iPYd~pVK83t z?A5e?n95EW%AQ`+aoFXPId(EXAakKg{*VKNt_yG3`am1x)lVe&0DIQ|M02tSpQRtT z5J`Qn{tT_JKh;1c>3-R(x)PFh@FKzzgeT@jU2~A+&BczCkSnB$x~7MdBmhzP`q-iH!RnIM)`g#(2ce;T`Ae+c6XC+DsRbTfwE+V666G=Ely z%8j9>eIe2M=sK%%&#dIZDtYiYt@iw#&+Yxo>VN+FHP7qCso?CJvJ?bBOvbtu_dcUP zmm7#VYJBr(OQ-Q|>>0_VFI^$q7$?A6U-x z2A*mT2C$3_YH5R6rl@HJ7qrQBj2?p3S3gmGto1W)$eS7j`^U!UHOZ)7e%>VS`kjr; z5nR(=VwcDw#;bCHrXHCg+l2Odcj6lVw+aM|inN6=rP0wzvX`LAbb>at-3_uaZccFJ zf?i-b&MckAe>Vv!AK;qm4TyBzho|fpg03@a(;17he-7*xv(VoP-S!@Fk;u??YJ^xS zx#Xwvz0P}17~Cu+KHugHowC>}Xef@Sr zVmnwautjw^?`W+lAJL!!X`t9_$aDcCeu>d`5GUb(($yer3MreqLJBbFZfwKBs#nr5 zK0C`e%vU_2(G5ZgW6#eDcltOm)?R=waf|C9cKR`5t@ctUhE7a|#FR7II4vNPGvKUT z*Xj}4@z5h1Qm3~T6{7oEBaWj7{B)-?XxI_kJ3N|yLnRn;GN|HY*ktdd7Y}20pNVk# z(o}O>2CGLvm9u4dIma6>&Z8dM)eBzUQl-17C9JyEdi51rry}^QM=@{3ArC@_^9G94 zGK{5#WAnX}+wH_Ull?of$@RBF<^AGn%CnRoA(B|U_xHsT{$@1I`SkP$kF#OpQOU;fO6jwz37ce3XV@Bvq(0> zbRNMbvPQK`g))h`dVE|N(=&los7FVa>j$z$P3c5)TwyK-fx_{qY+KuD0l8|X8Q@!_clWNQHn@&uFL~tmS@{!cj4Nqmv`n??=d(u*|eV)>nVw*%dxOq~XCSs?H z_x{BHEul7f#G6W2b}%~3Wmth7(bI= zX1ewV-Dop*wD4Pw6`k1~+-pJF9oI5T?B>vEo0plKCM*J!H=)PJBvo>6;e-3>KMD>} zo^tM}6!^7Qu0_6^WDX;bIs7eFAJ!&iqd_#iGxy;1|JCm_5PZCIa|!-*kZLDQ@HP|^ z%ui^Vx|$+)z1xC#de2^$O81~6_qmSOUMZsR<zzo=zDrHhL* zDK_(>S(SR7tDEY|Ok!}=VuRsKL)nI~MGqPU+os?pC0g;1!dy#h8^Z-XRv~|xi+kWU zh(B6tl4(dzl6IZS9vL_;(JT&mpceIrxq5j}@Xb7b@IwyC?PW$~;sc}QNQ4j^qBDUd&~e zg#*L**1ys9{p26%ikuZje_RhaMjMonw(KRYK|}kzLu29yzbq!-*T!YQsz%mMwQ|H0 zxLe)uMVQxV*X^Olb1l)WB~s~Bet_Zi%(pMSB#POD2FhrL-2(kY z)kSm6m^Oo#tKM!6YsYezYrne&UML4gJ{CKCKyE|ap;SJQFTibwue9{6-L*AIH8HRJnSP zh<%_Ib_v10Ix0BX{klQY{=4=Mj0T2|;n$-(uy3w{Fi)q-^_U5Nh-K1U}Q*$Y9uQz=7R#hLz&|EUErY8mMwfd?+9{4Ux#M%*VBN@v>cF-;ZN$9es7xviDYBR$;c5vxoJlT5&n4z= zn3=$=Kk?VAHR?eJGlFEgZ|u<;fvR`GBZHOl5krwx>EmLYHWNH|C+qiSx@9q<*OG<9 z%h2R)mUlU){uznZBkMbsh98hCxo4rv_Gba73Wudv|NRU);%X7`n9VzLoSXjo zL&(90wP|ITz#`lAZFME|6Y=HPPL+F$FIs_LMOuHD*3ck&A%-%Pe3i#J63R@`le z;7|+I>!{0egY?InJ4jm>Z-2lUtA6EPAhW-kUO*b1wZj`Or}W3HOZbqTe9giY{@)r* z>(0AL5)$?%KXFM>1w+ZY``r1yR}S+GN82!h)xAijoE#EZq@3=GfJN@B(0CeKUWR6O zHU%Ky*C5v~eAj`-9L(G-k(=%cXHUO}K|0|e=#r@V#Me*K9=DBRx88;~WIU9mzlTb3 zxc~@}+M+jqsBZ&N{$NBiJW6V2sI_^h#SE9nq84)7a7{76vUhUhS_7twdmdBaez~@ zX*t1up)OnR!uND@@5gY&Q>u#xb*`sQ7HQ$E;X)aQ(^jHA@$R&RuUtHgalMqr#S)0P zg?}BxSa;Is_;_J4i}L`><~~c*vh#{rhm(?0WY0GppIdR~RZux1O@{hWff>2=V?S){ z4-R%tN8P*oOxGAv>x05?NG~j}uE(N4eH6A}z{CnFY1aW|5*M_atnE5pv&RphL2bMX z+7#eo8u0RWyg=QXE~q)Zn+#0=DmV-5ch?avsn8)yJ-;TV#*UVjomYqRO|B_dAe}mp zYkE!cO6Pl|TAlz7|GN#xy31D`n8?GYoAWjK!+L5r6{A#>S~pJpuF(G%+_Xone8`k> zl5Z`x;{02N^6L#lY;|!?dar}Yg1>^zQYqbj=INEp)dDjK%0=Ep6 zm>Jc$dgh)KdD`1v>Yp3suVjaEWAH0hidK6RhM^+QsHglK-U2oII)tkg!~z<{pN2}3 zzOVBC<+pDm06WC!H>z6%=mlboEPSDZbNK)3O1W+$e3q2u2$d(Dn_11)kP8&7wDG>q zQYB`D6%o^jYop%Gx;@+pCL1~{Bx9cI=PE^s0jWIn&hA`mP}n1r`uR-fq8ndw+==AN z<~Vkhag?Q^aQ#aJTi>FlTVhu#6+2Vw)=wxnp3<=grWtiCn{{J5l%-tLz8#~7c*DOx zG$~4dN{_}aq4aHVw&^uO(8~Yv%=h%4T(k39(AO~-!!5^L3v`P^@#hMp^DoDnsJoD& z1kX8a3SN%r)Cy6R-OTuj>bh{7e=Vh!$H$Vu)!x)Qf46Y+UtSjv-<%P!duO3tpY~mk zNIb2D3;tR6mLf%M^kI?`^t4g&taur*kKt)KUJ7fM4tRcapLlyP*~H;}b%c#nVT!bM zkeinX5#h|Lo8ec~2)unJL_vA9D+di>jW4Z_%=>Z1R^X9Wpy&B57b+aXvZ1Ilfwb`H zHyyn9LrD?)tP>}(js=E4&>0<46Ss;m9dyrlXyLR@|?Y!?_5*f0_8eXw)aQW4I zm!<7x6z@U<>hiaLtay8@WHcuagbTjY>HNrT@l;+!KW6><(8Yh2p=XnESpLz^GexPb zePdo0!e1J<0cYFXJ{00j5kcoF9yRA3q}L@hPhEE;7M$D(@t1~-SOy}_vP3_5BVNCK zVc#9|T5xo<+uTY}t`^cmv=jjM`!Fb`V(l2fmVYv7F2@V|m_`??5h5Hts4?KeV&Qej zkkPb@z4;PR=oIi6(tdv=N{9$}_7|p2)nJzytSY=YYB}ERF9Dp2g2ZTBG`yN{T3RnM zQiad=%T)YSef)*@GYwNOsn|EJQE^p-)Pi5p6gR4F52uPr#y*gekbH7H62PY9PcVFB z`o7p7x*-e^_71Jcg{+akW2=+8c;rNQg=}#S6hI*77FXAZ<>i7doVpsq=k#JpS7GqY z4#C9ikT{%b(LJ}SJE+I<&|EL-vCY5d@$UW&TuTxyBNPfY7$O~!?H_{8ma=hfTX2Mc zW}UI#9fxlkRTjIt%7uNTVOP~+QJm&MyXz|FV`La_B~DY$z0O(CWJ68E$oQJm@Dz;8 z=^q~-@oQ3iY??mV{r?9V{qo0{@rYFWL~c1)v=}K`M^VWYcUjS#l!geIGQ&^>W&0&I z4|~#TmNZ@yMygC1n#RwGTCoK;lT=IE3YD1al;ce;I-xZJqo!gQ5hGz0U zIck0!R{pA254J_(>Yq`)+(g>={7UFLOXRUUu#8}sC+M_Y>!inm*p-NwLq_DKVNu)K zvv$Eve44-bw3Va-q+ezo%~0^;cf924Asc1uCkX?|0S5wE?U!sK-sd{CyMMYhz75|< zz3qAxYVv{H>NIAw>4O62;}6K=J~-OzYy<0YOR$5GHdGfq8hDudxBl&eAu_vq2FyZ` zmK{j}LgVz^=~N-*QzI>rr9s1z8e_k@wsziqQLj@airQbFA&;*}HKn9^Mi!mxyArME zkN?v)5Z{V>oxCX@)mK;vmQUJWWp<%yP)Qc|4K2@YC)OShX*A?H6?T~V#B;-H^EojY z@qBgh!@Jfx2DCzqRK9KD z<9g@R7zWc{qnvO4`c7c?YIU2jlfVSinZF;VbX!B@)P7|Zoyu|7Gv-R2af+Y%4*GT9 zMt4a$a5}Tr06^HNwEYplBw?`^X5D+gV=pTV!Nx|c*}^*YRv3;uvI=} zplng)qA+nqf2)E@HoyO}IF^A86Pa)FE2$Aa<;b~o2dWxXZK}gzyEW{XKbBT@w34YBS2YVyDk49fJ2iF@VOIFXoJPt*Q3W}|V z8H5S!Z2zK*cwF*iHQ(Y=-R{_ZSn)MD=-D*=^h3_F-F6< z3?hes+?QjPzqISo9jt0vy*~;#W5J~m3}&nlvr9J8TNoZ=;%k%N>iIj zo_APLbmSO&$I9TQ=~T^^-Da8ORM+Ixa&bjMzG^uZpBxDuN!C+`*$UcrTP%4at)N5O ziQ^XmKm~ z05}ECzA3CwV$^AH6lg<_3<%Fhv$(V+W=XM&Z){!u*dx9&ed84M-6X#Kad%<6BNQYP z2$sD~L4K&#_gR$U=mAz!Ivs4xd?S~v{Mp9G8vS6srRinMqpD%HkuURC)Wy2w4QqbC z#tu=l8sTbPp-fKlej)ikzx7J?b6$J-2)2avN#aJ_I=my0L_HIO%-(ZEE#o0yNA zPy%jpA(*GXk=PRKRUtja6qkFmP7{rGvsj%`pyx=2xqwx_55q#TOcen#Opbmsp)?Q% zAAdbMJw`p&k%5zoOX$u*o5Dpj_#vqM>CWzMlPiEFC{*`Dm3GW!P+2UDTC!-V)qg{f zMJeKl{zX^m$VF>Dp(G5<2LXeJRq^m^KU-2t${adO_ zaywjO$b4xsdeQ88sDC65MII(M8^zPvOg^@K@|06_j$iT5Rtlp1Z!2S|5~L29{VpKI zCjXBCUfbIseO$FR?PlyRB;NA&d00bntVDh>y&S?S?GwH+^Pi}Fdgj$qP1=Vi=emE& zigf(Ifnrq&vpnstiPr>@mPxXp-W>GAe_8sM&%4IY)OM$_4a^tZ|CNGW|8y3P9)@$~ zdjzk?5-lkuta6%bYdohf#vqGHe3f*kNGcxy!EVYsPxRTe0w*x+yUz@C9yioQ_S*QBKcF$i)H6sN?>7`@@;? z-Cikdr;4tMlKqdye|6T3GB5b)Uo_Y5#{4yljTug?k_fwnXFh9-KF~ICbx=FhLyJXp z7~2o0GUw)X6I=m-ls@6+vu3g*+V8 zLNESJJ{&z7GaiQ+rHb1B8D8WYs2A9DF`oz;s?*VG+HOLBawwUa>b^g>P5>_D!88T`$xj#yiKJ)OX%A-R>e~4#ov_A3V*rdFH02=<9+lRY=?h_&2*hF{F zGUzX(jA7z#{q6H+b$EqNql)bL(8gbSnNq0vP@ccv@t2k_E`zkq-shxQUeBzT(Jahd zt)w+=B$2SqGMFI{=eDt9RIY-0r1KC|PqN>NmH+sS!p z{7hv&ZXmW^riIsse{D!hMraK9l!w;T=+Jmx|HAM2Y;!#Sj*~suBj+w8&i|o~IdtXY z10Mw}f>D`a$TA%VY86&&W%Tp4r(~f*JoUtOPC!M(!7Do5|3%H%*IhTi7LT^7ACD;g zOgQGu&D|aPqBty%tyMFu;h|Tn=cU)I*M94**Bd+8V#w6C=Ui$^5_SCb4E#}If6?ja zy&U9PvtvH=!$Cn+^z~GvW}zO~m0?W(cDccchUDeT@d~3Bo1VexjiXm8;$b5UIhAf1 z8I`dbf|P`3nYC7uv02}XS`lV@=aS-LR!`Ncub zAF2M7dNnHlQ}^9V5djdgVYg=Pwn_#){p_TyNvatH-%ByI4x2mL(a8NILt??xUO|W2 zuvQOgYg+pb0n-kQcUqvYI6s~bL)9I38Xv!x)cP;0)dNfQARO40{=un-RQDssb3Qh` z0aa!0lqqs3`R61^60Bwy`E+M~PE78ARrd4-QKFUzNI5}vc3?4fbD|={cJgL@b+Br_`F>2MHZo|2zgF%d2`J%%!!n0HojIM&#irw zd#+=67TLlL#ItUwKlL=c17dvzIg4FZXs^NU7qr61&29-7*r4GbxZ6|Cww!@(dRjvy zIE?ClEcu0fx(;MM!`720-f}3i+{b@$t2!znrCDSh*=`5v5En0aUMd{g35B(u`Mlb^ zo=}UN`B3}$nIMyF@G7zG_Y==THPH0fnPOcejg4sx{@XQ^``@7l1*wTExwQW~$G^V@ zc|)|8QHF_gy;oCQGqt5dny#VoSt*$;K7o2MMushOWgsx3156oxEqrdtQn>Vb7^TYV zxu#uq0q8yT=*fT`vZ#&d8#>v=P+}8?ADJzx6x(7#m&6mLzZDH&O2Y3T1GKd8Jf(0J z6E!6F%*t;f@gpx$Dw`vbbejrg3SwNEy3250htB1{e7;znt$F^#u<-Gu9c^t|3HG%y zrAcGE_$8R|^`C{e*$+z|v+$yLJW%28Q5p!+7AC4Fi zJAQjKN$NG)2Ygok94TVQ^EC<<5J9KWLij||0KaqUcf|Mk*DPNSX=yveE^K?3RC`kt z2Jaui;yx-1^SR%Gi_d&bkRag!G<(N|p?PIA@8c{RE;Vd0ojHz>sCmbud*diUNEK^D zJ73IuF@>w$B%#temhm=P>fhpw2slu6GdKBd!i*i*mh7iwDuuNB`l1oE*1`N5tU;U5 zS^D|kAUlSe$zbq%pi}1O=va_VQNphzDyOKux^mmg`MxjaR+xsq?5!ez8@H@V-1JH} z@)K6*U*Bpvh`A0qaDkhDeaWlG3N7L-BQzss5g=K&j(r+za-FGgt$nv0g0@!orY$8B z*1qH&BoCRMR%eI*hj1OP3KgJwQdNBqYlSLx7tBuR_Shj?9sW(0WaANfWb?g8Kje>O z!mNz74!BKXaJ+#SMB;sLgRIAD`?t8iFgV^7-p^UW7jqt$&dAYF#NY~$lY`P|cJ^@D z=yf`LG8R)IR83Wj`?|aRYxOUG)y>`0<2{|k?FKO+dyhWP3^p&> z`8|t7oPH^3=DZbMHIP&wib(nkE60 zt_|<&qh)CbFdSz=6>=L?Iisuz>Fsg+SvW6Oc-B%8Va2iZ;R$7{^h|U=z~?fm@n$Qt z9E0sR0H2|mbwUa2Nv7=A%Z1b$IKiquJNyUQ7KswUY6ex1JGZC-WppvpxfK1O|8+bi zVOuA=IyhV0E(Lk`u^j+AhLlRQy@0izTSab}BqsCw978{DW#Tt>c39c$0wz#(KREB# zQ|YRpdMZZ2is5*EffM1#OvnENKdUk%SLf%*uMPr5X?Y%hWXX zV@i&M@g!g8K8~Z(c2J?L|3dt+prA}wlPQK3<<1+F^!>rjSkqy9-ksxuq!gVIY3AA~ zT|ooZ3|$sKVZGXPf+$Rh^$Jb8qoP@?Xo|K&>^Ya_3&o2BA> zYL}hHioLeabjj$QhIRD679A4A@`flMm=G)nDe(9{cHyvbzM@U>vMpuCk>g$FrRD9& z*jTaHrmWdwy+d+FeUQ%uxk^C+FUhSq^M;^Y0-`B$(dHvuTKHm*rp;GD!r9rG9M*dM zTiLnd-2sOMJkvD&gdJ6TiE@vr^)A0;L%SXPq#K{ z$bHD?o2Lda=8Xln#)q+)%?i3CF^5{2vXcyOG|%a)MGPr_m2)xFONPMuYN=k3|(I8CmOpJj;2JwF)yz?sE zUW~KtQmUsi!>>%yRCo;bS(?Hw{t>g3%xNOx{R6ls)h zkW`6{bc51tI;D~BZrJdyjrX|^=X}rmT<_0s{orD)J=a`w1sk#|s&4(_t8 z7tlC~(Agx;IhQ%?ERG~2W975a@UIb1-es+EpEdXPukouZ{ql`t?U4d~N05|3ku+c} zRWdiT`d`WRVE@E38$k8GJW-g*Q*?Gh+G}y?a$nW2enr}3DQUa&0Q@#Xs{3p4kA-8>$?Iz<4`yW}j6vJ~Z>I2$W*|foBJa%CHlay|)cZuvs^! zw4Cmo5IqgrR&(SUF&UnOUgik$Zm>{ZVt29UZ*JCxyq2P8U1x8yE?cpe*ttKTO4^Qe z?m8W0B#X`vu(PCGrJkE?HkU&-1iX(2)pWa$v+4aR5y}gqdT^RJ9z!#*i-U$Z^jJEM zzpAc|1~BU!g>Q^nZwQ(2xy&1f%CY3k?D|Q1zc@=hnDY}az@5nsVeB7X3RiVmKQOCx zTE3^>;HBOwMFD>LHdiYsc2O>YMfDa2Mry|!*j84F z?f3FhH|jpzpD7H6P&KLYs>}r+FLAmGy>DNRgf*uyA0p^Qh<>S@UQG>N*gY80pHTmgtZm z%8gx&;GN5S7kkdrfOb|EL-&4qBkXhlNn7fZ+RMNz;4Q4x(|H zBpu(u3PmX+}JI!F}kgRqPd>5Wgtjs(PRGOkT;}o2Am! z`}P{|)mYn=7&~=)e4>bd$HNh%MBSi7+1PF3t{M|DA#OwO}B>CvbmHU22ea*=cZ_SlU5ZBXqcUJnW zZPJME1^9#%8z&^IaqwL72U&HAnnT5pEbC`=#J}T~dkLiNh2sqt)hy(Q=C*Se3gQKz zfP8)>>D2vXxXWPubvM?An5axK7zj5xJMj$nB-V&|y`)vl-TTUE*7}ptge#fw#?8ckojos|*&o(sCzQis< z>i)L-!wg5D@da`t^t~|3X2Inei8Ax7n*_PcWo4#W+@8%(XB-gO(lK%)Fi&EW(>bS{ zqk1T$;s|ue|J0Xd7ELb&FnCH#pc-mE>*UD4f>6#-;tZX&=Xoo%=QRyH8)9BU7(VqO zKq>Y?bn!LrlErzx-8Gw95?8cOA2B!vx3ls|2RNU8951&GeY_IA`II4<|D21lZ5d_4 z$Hq6bli?&Y7X zdTs1HU?mR6eu;>6UL)N0x}hY{I}2x-yOx&+o9{Px>}Lhz3SSL8R*4ioo2LS@;H1A} z#(W*ll&1X7R5{58SF_3Z2Ao3zy3`HHHju}5xsME&qw>o8dB?-gim7+ICYFS(u#eNq zlYvC6StGRfu(&UK2WoAdnY>)(zw*PuXTf~whGprGl;g_oCdISXZ z^I@fCa=h_|o^zBhVjc92X#A(iETcsn9ieGDH}qW0{>rWTyK8AknqAKrnXr}ASTLBT~#uW zVObmt{yJfnG#B0^fbul0V7xr6;Pcgz#r6iZsh_QgzoF+CR>?EVm)l!gl00_PuQg70 zKCfOLg`9uN?W>v-B<6ihV`f(;a@lv2N-lU64G%MZKTMEI>(3BYdc>l~7V=Um@|E&0 zmjhyMxd%{!rQBf4uOk~TWs4u`r)?3xPxzp1)t&Ml?#&Dm@27pHu%qE@)Y+f;fo=hdzw(P25*v7v#ib$=~XQ zoky+u*@1(PS4a9uN%ioyw+xap>oc;s5w9TT{;v>iDHXS0(93e4drYr(80I3QUEt!K zTIB*k0-+zU2B!L}Ndt(cCOVr`8h>sRBaoJJ0px7~u8AOWSXo{DhBPa)ioYi}p2de6 z)?dUZ9wyg1ls{bKZcxt?febBi1}@+Xc<@c;7^Xv4u|CzXp>B{-lF7l*#3QoVHa%62Bx)H~ z5x33u?PkAVL=>hsr$gzRkoa+k*}6ejbkseck+Qo>k|ehqZjilxt}oLUKy>q)i~d{; zY~lW5EP%KF#BSR3!dqfa3O(y1sf+;>ugWAYVW9fUG%@Z0cs?o$L&ea+?2 zHKo*YGP5+(WURlGf3L~fFlhtP@X247OOw0wk!y1=!qcYO+$1Ot-ffka@a61elz(tC zz;!^HBL8AB#>(l+T&H{m*lJtYX6rOU;g?uI3;tI~zYX^x39PBO`1LpmuU(z8=M9jU zz%Cy0N*0+&UM{mjs9D9ow@6G3cTZK)^w-ljV>t{$)qCthH83L2(}TG(cA-w& zJgSb^TM8WlGWqa&IxHB>`3%0Zi~>Pr6YQa3c8mQ3RVKKj#Me}Ucs?py!t{QuSb`&N zzOgKx4_EOrcMHS(w=+?S0xZsX_ERW&q^=%4N0wQ%<+C<3$1nH9gxsQE;Jg?|*LU)7 zXL*+MVBfn_>AVJ5?nyQWe=xsZ6Etn3NJC{}_ASaK!A*?=H#u!MQ!AL!ER9Q^`4J=L`!YG`%g?;v6n$yf1iL~ln3nCPWXKUdFY&p?NSZQ+imAICmlog~XwT|}9L2}+ z+4E%Vr>W33=4#K$e>!F+m~+|Sd=cUEbBMw8gf_JQmsHm#P6&aN-a-9SXNvby#Z)&4 z`wOu7)3z3q6+gF)hc5M^fmJIEyE9LVzo{4(;!(#vE^dT4p~t)3D|h?zm!B+8L=*4x z4-?C+5~IcA>F^1h#s#qY)s$DC`ZO#GgF;x%G#HRu#^(J855yd5 z9{oxMLGdOEP*5}kkfC}Gd|U|<&YoOKAuFribzqXv@W{+G3Ed1`H$X;(#Jcbbea;c` zW5$$bypFGDWC42%=f+6_uV;AxhkUo!kv!FFj?bZOF6XGBDA?hV#5*um)xZE>9gxJ( zV9d&Dp{V^>&f5$(`H_j-XM&Y{&nss_eeGF615X&!$uA zVrdvB;{A{fe`S1C02%YElEADAPZ!Gf(a>2D2)j5=ku&L_9sH(#?y|UI`w3;`>}XhN zeQ3FWi}S_%`kw?Lrd9-abxQc&z2X7SYP}}nhzyGMG^hYs+^r*V6>5xcR&;6Sy7I$hLiidv=R-F?D z-#{Q2zI6q=O}@A#HNqpBqe`f@2l$h#aR}txrq%oWr&po)C)pMeRig#E2|T$)K_E?4 zL0@GigW*;8C@mi>i-4M^#E5!jLd{iSq2ehbz*p7->jksRO?%ShFg|@+u($Y_kO0IC zeUqPi{eIG`Pb#-F+mNwo03=9pd;ps94QX_arTR3Vjmg)yIC|*?KiJ-jPL;Q*Xc$ zK>j!_KXn*5?Ky!Rh1%WA39svrHrCAc6!hNjm`KGAd~wKjz4Tw)Fq@!GnnGD`9-PW?aSMwl1zoS4aEPTG7iHszF2qO$Gc@5^ta0Pa=1B{;yJF2_fH{+ zlXQHI5xX5leKLQf&dan8)3EUUVae4DJd<=5{v=EZ2Z6|LJV*>3Uz3neoQxsF%JjMu zKRqr3##@BSeEI8hf4Btexb@(SvTtT#;}+3@ZrBT84b_FzV{%wEZ^D(}(#xPN<=@UYqXEjMh>i)M&P_Nfxgd zFkDJc^;&?rQ&2=^6X)xKuFg(swG*pCdSehOw#*ZX3_cYfzpa_e2H|pBfq5g?g*~(H zdTv5i?5V}K&*eva^57;(-OlTcd|}=0>&Dk5u!GfA+Gf(})y=V9b*$EfhGv#sm#n=( z%7ueiM|@d1{*1*PLv#n=K+-0rAMnUfM!FuytnaEU!uv?<`>-EQbS2@B9O*TH#c~|- zw@;y|`1wkYhClNO=#9QrBNJ-Y>m#julAJ8SpV%psAV_CHJGMcob>9eNpoK9;Tb^u* zr_)~9K2BV9YPrJ0SDSmY(9(zSHR?J3B)>zOp$=N{m7yGmP0?>bmu2DDjBQBh(e=Eb z$N3{gB)llT>L!wcU`W9R4*^XK+upZ$^MHz$lB0&^>9B60uhS`SzCWB))|nJIUryN0 zp7klycgj~3%@-6jzfun^f$WkJ^VmF)=Jp z_D<{|CCS29Y}(svqT)$?R=sx0y1oVFl=ZX5S$q!5V5$cERr_4N^-Fs8%lphznbP)s z?CL(a!^RRm)LErgodXid82zN2H+9zI-^Ww9y)7ylz(_l%V5JcEb1(z!V`l0Vj>cTS zFDkU5DgN5Xy5(K%Dplt6;iY*tue_qo@eikPhJjJmNMUXuE*AjObjEN|kODN7`T26G z`3nQOgvf{FM6{+JE|zQ+4o(lNJ}6)W0NEo59)nMR^%?nAMrHGmFhw&!MmEPv)FGn1 z-b!h6KY4xK3j*YXoyb!!a`EP#{X7G2Qd%`>E}hNk;>z5}eHAZ0!(A2OZe2dQxeD1g zBwWZRle**|8UG1U@=Wv7FxaI?L(7L%j?R}GRuQLO{IW7Sh#-Wm>{`t-8jCh)G@x1b zWt)vvWr^c0RT0K3aSef;MkbXV8Ok$0mz$2KA}i6y3DtFu8+bd<>e{>Z?~E}o5h{rg zzFkwV<*@49qv7(r@RIFj$%{Y}&QthM%;*@wL#Us<^|K(h<`OU0rb)W2OmUz!2Z_r? z@x{4fLRP^i{XrgL@Cxet<{F(hb-;v#dVyJFS2HtqQj6HGKZXR{k zh^OcVOY-BIWK=X-W#J~zrDd8n-isTrqr@XKX#9@A#+YsL*^nG-+m{1@(eNwOg54CF zbMC4OX~S=?HyfJz)%_p!hf@358?s}`QM~%C%HZrM8>iqO1ez-<={U`Ar=!^Y02=2I z{q_c7MO4$LkY*jjd^vGhQ!Q9ez$yl@XW}aVd`|{PXc5{M83`8yEQ3-9MTmk;*G8Y> z#<`h$3zYTLt73l&iP-hA;8&Tbj~-~J!34cRd8^O8+P0jw1TIA|GbW@+!7C31E?Uza zjx@6Dw`4jR%M=+LYu~%~Bn<_>fc{=11NRMDuUytXx2NnTZ<)(~Cx}CF$V_v_Cz~PX zspxB$G0~y>43e9>n`*-BvqG+6VE8%Py(e-deYh<71WU=M>@e7Uvtd-9FW)z*K%;KG zRZ~N`8=>@qP;BeG=)E5s$A&|FXa!bI#i`g@{fSnbqS4+ zy8i5csD1UJC;sBBFIV&>;b3A30hfRyZ_)I1BUKAUTzf#2Wgwn5aPTmPp4hr4h4R7J zsg=PAh8OGheFf=hIqF5Xq4~t3rBm`Sh=GUeP{F(1B_`s>HIYHR)8ZzpcAvY#4lK>z zAoLoli_49Xea^v_VlW$Kmz~pN%2M-*QW;7{;^Oq>j394HMa9y|gr2ouWu)k~LUgKj zs+vTRI${$HD>DkNra5C1&FLAv$1Hq%yC99bRg0>=#%7y-pfBp8%N*$rg2snF3y70uKsowX)D(D+%mYqKG2 z)Yy6NgGAxy8X0e(7KyXGaW9lO!D{A3q+D!8{yUCCRu#!v6j{}Ge6E|?I(dR_R()1F z<-eaZce3PFb4$_N9luVl+F)yAG<;-A@wsg?awr zGi5V65KPmg(j7$&3}Wm=h4OTu@;_J!cVIleDouM9mKLG? zd#FZOCFt_Y>X*iE9v20x#epM-z6@Bc!ptq(6S=L)Sa|3?d6Tuii!m%Snj zv-}+EyXSTDEkGWaznj0Vf>uRx_;%!{a(3AnceonM@h5(lo+A09Whb6q(hA_l=_MMc4xs?U^=>f zeQe@#`HCvuQ2SWgO-8x&ajCSsgF^GyL{KvonYVpJM{)5nlcUI{xFfhSbR8Dj|ngIi4e#ufg9R zJx0VrKy40{(2AFYI{PFM*x5@4d4E~WZ*Ucx))e{>r)|v8jx_o>N76s(<0Vw^pQs5EH}X*T^nLh_CA8dU2CFvrun6i*E>JjaXKr`7T86{puZ?4z=drO z1!>>YHl|1nuiCycb>(I56O?8k3AI`t<1E*CVEDju)so-?Ra26fuTp~S?wD$9x~hEF zghcGe$^>)PSqO}dR512H`&Mjqmy@=(}46M9;t({j+4e{o;3wVQLo{{^S+0o$bBCp^B zDLQ4e3KA51?_q890mUnOhmMzB`@Z|MK*5hfK&3juN}LoBPNL!EX9=w&u*+*`JI`A3 z{Pjg-UvTkfNAM;G&k6*vpAE<;SiQU$!=m-;o-~8BAn4GcHOb_|s}*z8>a-u_^0ftC z=^Nj=?#nTpsP$U__>O<8r`_4%^>uFdE4fm4anGLYZ`W7L_1Uz;jJcZWtWX=)3{K}L z*3*|wsQV~!G9{IywT&w=R4{4R8Y-E&M}_^Uxa`zFKNCNQWD8b#UAGRTA+0!hx*V>s zXp`|{vADUWoejX9^|hyJTLdeOuZ1N-`Q!xIj3`l%S@4_$xhyeIA{6sJEvi@@opBN4 zC)08O1yPnq9FD>X9EY`8K>bYX>7nD9hm$>oCwBFQg2i#?m*bizuuRY!L0lmZ-mVD3 zjH|MW|6Ja2+AuWE>KiGO91bz?`LI^nIO%Ixv+CnYe z_rbg^1H;ndiUy09+YXbP@Zn)NDO>X|Bsjx=i_wRC(|+B61?_Q=Q)klMd{><<8LF?w z9%nrLG9vw3y#}Gs=*Q?OeIWzQ$X|fSSntd--NTb_TQhq z&A-Tz-a(I#St7Q+rZ=4v@#dVEpG6&>oevcUq{=yJ>mj!{f5hqX

l6RLSeG*7gVi z({j7*h5{fJh@!Se;aWvM|0vr)?fC81wveuABwrZR@VqvGs@iNgxwkzkJ)QGrw#=fH zmxU!;*lxIe*C>XTtc;k;GU;H_+MdY=nA=TUhZxHmt}d1h=0aPmGA81a_`0|BHU z-2jWLSm`<5Oy&?CUYR}#x}RXCU^dL4eXtfFwpbY7jut#!q$+g#yUe$?RIbSmKP-bdJRWhmiPIDMmp84Q?<*{AeDXH=s=t0+nk%9A5 zZ?JYS5)3Wm#c#SQ;Xt5-WD6>ny@C?~HTzXPeSTOc^`!anTlHl`z2Vm$KfL{g1w2&* z$JeLz(AhwhbS-Y*o=+BFlz0(S`o4_o%_C;;l_OALXfGN$)Ur_5(Jer_*=I+gCS z{YpOm3QUfsAEX)2Gp=d4Sg>Iobo6%h*^fzXnMoT5&Oj@BhpBtwTDrtVWclP@y6(vl zkr$Y&yzE71x6q>oqUGs!_BURIRBevOo4iU!?7oM+V^F{k+dcp|)11qGr!-F@EPYeA z(q(QWOJcW|S@)#-wUym$y|o*lH954i;yUuV-YmtcHC^k5#Vs<;A6Ta=7k$!C`kj{5 zb)cwhn7}h!5ND9I9Y;M0hEEF@;gA{`*NY&q?VOnHO`vZv)w6sd=Q&o2%U(%)Wgu4j ziV7Q{nCN_YybV#%@8l^l-?S1|Z8DG9Q|>ofhSS%*Eiw0v3PryWA~ZT|hOZ&)Pz)#? zAxAwHNYyBmBe4GXrVMm*KE}MSr}qpS5bl+J*yh^1>S8a0Nf82NZJrseI8}y@UNtLM zWt7Sq$;66rGA^endDu1W#(vHkk4lD8x1B!b&#(h?WivmlNru5=SE{YEhg4Tgb#3Kh zf(E_SvJB}tq3aJLNS%XD^aTX!tU{kQbz~Jv+m6VwHjuU@oV%&pP%oQ|?uHEj+400|NG?I#u&zL-Tt+0eZ`U`z9eSKppw| zVbs)S09k_>^YlR4T5lELs!_FFVKA*}q+aC6;aI=R$I zzOPS$oYNi0LuSCQaEL>o>m& z`g7y-(OJKIS9-@3Qqst!GeymGiUut#(Fm%jYwN*q{FrPNr($C_;r8WOp-MC(=DAi) zxNcLhcdVpaMOgKR$K7r*=bIc20B!4h%qlhOKGro{G+N4~^+s4GEcekbelbQEJG}?R zvjS+==y7nay`NmJnpT0>^PQgM?Ib)Cshv3I8G%vXRq2(R)4FtB)JjN0lh4-l+X!O` zl^An{we1tz*6m9AX0)<020{8xn8NGZ5r#xYyvEP+*40h5XCsHfR}B*{{jkys6n1 z7Hx^nHugk47vwy_2@$D1Z&Sx-SbnYPlhpJEGL;OXQ_Qe)oa6?A0T{*K2&4h80|XkQ z`Z+18T`Hxe7&RQFlAyY18sZ}Law2Qnj_}>D=~7$am*?-NCMBi$J6d zP-Wm|7F1RB*~X`?;IoZhov&J*hF68jWCi|ad0p3&#?dFuOm&#%eY8M2NqdYypN+@S z8qFA`sDANobc(Qg zH5llBT8DKs&EX+#0qHL@XAX~mcolt`ptpw*@?-0d-}L+&e1w?qvElw$z*{ez?$Kdv zo<_SmK0mz0Bv6gU!B}Wmsy}GJUUVOtX1r^eQyr!luFvhnlwf;06kHl>CPzs@-PAF} zu~WQpC_AxjNk8?zMc=tr_3pXn;9;6rebXHn#>3d$ zROc0E_lRJy#&)U)Rd{^k%){~g`V;k^;nKCN#M?k0Y((^+f1hSp$@yelV^f#*`Kr`* zJ8PST_?6ordfAKeQ|Rs>>yob&U9G*fX;s{38>u9k-*JnR%g6%KyO>nXs_hE*Rnw1E zo_#P7y4nk>PR~d~LMUE2yWEA4NSvMp*nCF};ruyPa*d8?Lqap)PHvdL5{V<`gs-wf zk{b)nnsT?HW9eWCuAE>PU}`+x7_0b&R)|X;e7xNjc011Iw^*9AtpEqAgf8Q-O9h?- zM{>DFGjVoKTIOSJgYB)CG{~XT9CkHz^4-NuR(5Iudv88yi+UN}N5BDgJjo8is-kZu z)w|cgV9O16$&24xfAqlP+Pz*5&{C1*OPwmmtMj+@#C7O-hq0gq1oyK>CiM1Tz_LyI zCR6Y25a#nSzw4D3#TnN~6@Gfwz7lV1{m8Z{H)v5QxXQ(e@sU%CZacGk{5nuscNzl| zmfj6xY>qSYw@(*!KO)g@O>rT(fW~NiZ@xaEJ|XaTxKq^9K-StP1M2R zF@Ip?Iv9v8k|y-oaFTfP$&6G*6+Hgfh7UN=022Z!x0?~wS2d;24V-@E<%>86@w%)j zZ%kJ*^9k@rdyf}qG1Y#{69z(!!12X?3eh*CARZPVh`d+_K1Ow%s7pXQ_r4rj&~^ki z?mGcBY5lPNq*G~0EB+WUoLgF52&MLYO!mb5>ilo57D<$$8f!XR4gZ+z>+2FPA!}-0;C&YY4BJWi*NO<2o9itG1;{^m9FyJqTlZFRtn$$`tjb6y>_z20b zdK}ai9gf9@DAau42yDYR&6I9EbHWYCH&{=f`QDy;0!zrIHwVXGfIn%DLkV*r6A+;6 zzHfw_Co;~0(8v5sI{Rf{Z+o+d-#&u&jF;>B$|Fr%6@OkjnmBwthUV#0=)~(gQU?M7 zDJNOXb*(awErQ@d5{K;#1Rz6R|FyOFW#qP{#h?a|@7ER$Er>ev0Axjy0oYHVj2^rK zW$H>q#D;@nM2(o5k@hkYr+0m0unZW9Y$iKOtxn4xuw=8a#gZV#8Wq7U%U}V%tgA~o zLcC=R5XeTv|2ry101)q=4_yGXm@!Rs(LD!+gzCi%et54S_$m$%7$|;=w}x5Or~E7S zKEHue_0JAq=YrzLKFf=9nu6oA3qJ5>x9x$pK|p}J$O4@Z!nv?J1Lo@Af=RKGK72b3 zL>cyn_vR=y)|d?o!Hoim8_0|5n<`*!-dN06O&T2xh}_-oOzxFe6p6~} z$1ri!G1bC1*3o>C4kS_PM5im8O&C}+2CQHViu(F44OFv(!PkO!-v!`s#KyA#uhR8W zuksYNeg_sw24cU+l;4b`>+qt~W<5_!VNAEymA!ZOt!(7U$$XKrqex7Om#&+m1Rb`& zm*`KB4x0-nS(-`k@Y|ffqyGo}PXHD}XA3f#=p=rce$@kRn!YIrO`;D2QVJ@%y#lZ` z*idSLtTPwzjqj}r0fBC*5d_jT!8jV;x=yQmKBh%wTVVZB%ciEjCTo5*G%7eV&C04@ z{~cxXEkWQP0AA92|FR@KSG;y<_FSg{RfdGAIdm%I9W3hl`Fl{2HFs!2ItzpZ8kl%J!JAU*ougP?u_gaRt< z5F#J*Me|qLTK60{@c_kyCX2AH!NG-^7tAa{ASC#R;l&65mP)vBe}wAahp83#*|_4e zS-4ja8KfWebi~7&r!S%7r>3SNf0V|bQG59pY5O~4@(isF7{xs1dG>Ky&`Sl7^sd?2 z^q66s?zC|dXnKk$1^U1 zan#FNJQV!BrK>nHO=jirziFk@1G?ZU3`ae)5fOYD~=Kq03;e~rt-j>CiFoSHC` zwq+pAu6-(dG0Volzv+daf$7_2ogARrp8YIz{K*~OLH6`J$De~g<%s~h(>;sS z1cGuguQgMNR;I>T^Z?7{zf=Y$(n>18ItY4X3W(L)8VW6Mk^~_`X8LAwquWMs6%@cQ zP#KRv&hGY{ugXe-IhAxBaQwt+&pf(*>rgh6*6+G2Nd`Uka5aT_4c_RIH5p#1qTRmy zA9XW2f&{n9Nuy3-PW_NNcYDg_gUS)^E*|FQdd%vmf&!UcPPEf&$@lNnCU5|ic>C@x z-6Szwu;qc2k2NLUrs_9Nb8%>ox_YzeCZ?u_D?TLH011FMkh1LTk2Aras3lMnqk0!e zmR9Ll4!7^9L|_8tDM3q=OJ~Net35ocy>Da?Vj6~658ttG)5WehBsP7jQbBKJeZVKJ zto6=|z;s!;fM>aLNJjb)pf|t>%JAZ;heqVU+`6Ix=gq@6Ihux^5=SWim@|-ng?=!i zv7o*6kz?%b)U~L<7jM4z-rMU$Kw`SbCe?Cre23Wp8UPlW-iDsjZasUSz5oNNK~1&W z=NYNPaH<|y6H^B;QRM<9BQ|d68b0F4+;$_KrVBtqt)~#4;ms3P+`onAr9V5$B#`%- zJD!>1cE$C*>iHZk3cQHT7^G2!L-xgVoMq9wk^e<{d`G)VL#^xAraFNjqg%xSSG4Hp zB^Ae@L*;^BD1*X$TB)|K*m$@BmcVa_UBu=&t&j{i^V6rdTV8Hn7$R* zpY$I?d<_5#06uCN20G+$Fn_xqt}%3{pI0;e03z5x z0u5ZG|BJZ?sK5jWV3?`)jW7IDO7u(66Oy569!4#5_MpUMvrtnZW;M^JdaQ-SQASe}kEQ-OEEQ|Q~CI-s!d zU!pNdZbWFr;uk+oolV{P-Hh)jtz*3H7_eaAGsEqu;h-V|F@Z4w6tA{gHFl8o>7XDx zM)C&($M%F>0dR#@tk@w;o%_MR_y<@`VMgo`YO=4gr*s*^*u#zJF?6+h5Tj=2Y3GeL=iBxZg{7-z`e*JH3!`Nt~`-{jT-Jh z-t8KWQ6Tl?Z}R-V;S3pYmEaWn8~kv8(7&JuoUB{m?;sX9!V%62f5QRq18z+G1GDh3 z)!nWERq+S@TkQXb68|rFq#5{wrvKUlfM$Wuw|Bnw|3G}o=6_KCrm5lbeaMpcsi1FZ zm4rp$6K$R_k#dnI_tB9N2fKhj0V3hRoy`teF- zlt(s7M}T(>%)98o2x#pBR+tCwVqt|w>vk-6!2So6@NpZwmG}#2_^mH$$lp-^j}QLW zZ}zmxmB7dH7bSYcK`Vro|HS;i@bE7vk&R{%6##tQL9B3~`2X_YojM$ZyLdoks}i|G z3Vejb1fvIklSXx(=$1ftD054w{}LY#_CKJ6cX$W~;|_aqO8*VzEx+A;00;XI?*F{e z)5>{^l)o6zeBlqF{<^vwt3 zip57b?*DHOLjGU{-oQWV3r%45oYw`#&7mLc;E7scONMg%)?8oS4Q%&jwXK%$21apn zdIPh*(7$Fr#@fqJ$*(IC_ES!=bNm8Ort|Q1AR0b!4GU>{+_IlMaNU0TzJF3;Vj_Ao zFp4K2PIh+o2Y>hz-r!FQL^k-F_nZq9hfA#iF zK;%P!3r^3ys`FhWq*IP+pqa7ph5xYMWtHFM4QUZDoc|wRYrQ>(<%#UQ&@23dIi!a( zA5^{5SNN}bzHIgX4)+W@&$}!y?p?Lg-x&60KGYk%6-P? za$?-h=$KC31tk0Y{GC$I!zNLV@r>%R>%YdVt}~d_#-EQbH<18+mmLa%*Y`NXN`+I1 z4havpPp$MT$e9}#Is7W}Z2B+Ih>Wh+4$30JuNPQcd^seyq3%}-{8k_Qemc#GIU+i2 zd+LA#O_q+)=sRMXzUUvRq)Xhm{Awu`7FJ53sP~af&)*Gix%LRJ3gG3UL?cS$$^Btl z+oUx3M7VyFZa#*g+MID zV^>%=dLdW3S5^qsHXqN_SI!UmHc=7xAn47zzu&oug3NDUv_{%nIxL3?>UWouENFU% zuEyh-fgJY*ZH1Ix5^a8ueU9GSHP_KI7g{hpm!8j<6w0XjeN{57f2-@lpv$72dajA) zFujYPRjqKdkm*oIOy7nirL;bSWA5ua>f1bAV zoO0Lu1X;?(A3tQ6^F^7T=&a0(ub|yjnzexFDKJT+>~NJ*@|=Ls+;`fx%4IPlbH*R3XHm$Mph_B^H&%z z?d5Jy?8_=T5@Q4p<;vxeBa1mbze-A18gppHpySu3M+6;P4C}lFku{5@FA~gW+Nq9R zbWWf(M-a2^*ZLbdCvnupij$4DMS%xooZxr^UPDMWYK;`PFIC&gb*b=-xUZv3F z`}DHqWag6cy0EdhC11K>#AL?+jk1iz%=b;Z)3p|t>B({>5fZlAh_HS>CIeIr)VJPW zF1UTR)e}*dM`gBnS-uY#1BS@+@kAx0&^g~)#rZIzk2akM^NPeCqeY*-mQ`=sHEVG7 zNpYf2f5cIEnP%H_S~{y+I@{(YSbaWbmcB4&XZ8#e-Ef9yr~5)L8OLg{w~Uf(Fvi8B zaZAbce9Fmz;o1$K-|xXsckKkBiDK~iZdoUXYf4qms*WAo#>*(2YVswKddACB(fEmI za52&_lx4%jCP~SLfBvhNU4h-0Ca?p>Mw^MG6a?uv+62WZ2S|EUoq`1*h+;gL zX0wTAId87W&9rgXyrCj}B8I-MG+Z^wUTN%fWF+Ghy?M?o{X81H4y`EMwkG3`-X7xj zGQLO^onU3=ED^@^)I=dsaktM^EP`@S=ucTE)?OK*K2Znve;^~G{hTm8`v+dk77_oX_P znfd4Wy$LAu+u|wDoxvN?e37=&WZoZbYj>P((x9uSrfKDn^%V(^7a&~mi!veY_CUUX z8p@1AXzIr%KkmTSMZ=T6kqSwZqGiG>23>P6YMRe1CtKoU+Zr(9FAsQatEz@9a=H&y z#_Scwb`@Xn9<(EPa1POy7e%T2?7rK4G^U{2$OY3ZGu<+~>{A1g$C+7zOBTbodpLeM z!?xmMPh&8vYG881;fA3c`fsXC_X2Bt8X1B5w1e$KBo(Pm><63J`M+jD+^cU3{NpKiz=a&u50SA4HO#%x%47$47>!9$0GH- zXS{sv94E3a6Ey#}JMjFP==@rrcP?LCWaF4{ZFuhhdjM)T;JUEkSOpX}VUKKUJ52SJ z?@TZvaa&oa(;2E951;bZZo8Y$>-KM%ywOMg5>N8fmlqZz^nEyb`HW*)_NV|qWI0kc z!!32K3YU8OH3P>y*x^TW!lLOCawfK>z$c!j`R?QPigU@F^!!QjVeCva(~N5uTSxYK z9}H98OZ(?T<2LStJ3gT6=;th!0$Q%i3kfyLZ+|!j3s*JmqW-S?WU}+o$F0A-P9sNX zt$IEMC}k}yc2!QtUwLXTd{L<-%xxw1x=pl;rCd9{myb}`5gj+aAf24zk)_bptHC~#j_Jf+ z>5P0jnl1Kk57yD3ZB2w3O^N;#$(D z5e&h)^1^7w3@NQTR>loJ#Vg5^JIRd~-KtzWR0hXY41-8hTtun~t>$J>=P62I->=0W z#K=~>{Qe{i4Ec$l?l&DfbX7D+QdP$tvqOnoh1E4H@s5pYv#}_sU0?TL$6h(9!s<>m zqw=mZI!X~tGNEN4L5|gh^amR7nBgaWXOm-5YO?F&lyc0Q(t%V&I7}V1Z@sF3Uv61%N zf(=Eh=#bihtpiOZn+D`S6z4fAcX3p9+Seuv8lnnoF5Z1{qhkflpx-mMbBs)?TjL_Fs>D7XRTg!`&^eC zTDdcE4;D6~6Ppmn=9QY$z%C7FDj+PKZ`{Ikg9vJ4iaH+?-XF)Dp91n35(S5leKF6C z^ugRN*sDP}s|_^ML@_F|e)P%9b6qj0FcIv@7?{*=2fE-ax5qqDg%+7K%^?bzqlS8i z3{2R9#-{pArd%yhn~nz>g%s?~X6~IgQ42jm%28mL!#vavBRKY^$&S+Ap%N*gy=WQ? z=cs3~Qk4o>-my5E!YA0KtjqvYmB5&Iv?Kz=s zXAXm=W&H9s^Q-9nWRU|XlidGLcjx}k^#4BoIYi2#c&SjRNOH;)IZcs}Qz=G{#gNmS z<~)=nQjTpoj*=)WlsRrnQZ~)`G)&5I)`X3jZJ*T--=E%p!T0&&^Y%PE9@q7_uE*oL zKd$Tfw4U60bytA#oRo1i!onH>h83eB2*1@c3%)0mHq`(M$OKfWVo~2-{hf`g!h?Fo zbZvmWes@iAH-XkoHgvm-aA;SC2$e&`wW14 zwj?S*mSP4NO~L2tOYQy=7mADT4g1zgfE`S}Aq=Ix75#5BWA$F~LF2fefEwY(V7=^m z6Xd4ep4o@0X|B~TNxlb$0s(c=GRYEGS6+!hf0nbu&&A*Ip33ion-@|108ho{=ow!z zAmLf3g{YBV6(98`dT!aJNmC;y31}^siL>R{Gk_#&S=O@BMGapDu7qby>GSfie(08L zvcegJ&hYJ`ENW4)uJ(~$G-q||K=NTje_`HLCqg~UcN)7b^@qFgJ@*sN?i~#I-Irc$ zCRG!W)#7QmN;5Q$9VZ;g+cX3qJK%<}F~s>m(+cdA6$(uS145jRcCAu7#(vOC44u#{nMiVM@DXg+*Lk17}FgTmXzs0sKDm48`+E@`rZz#Lgekp4lrE;`w{L;NK0R zo+(AOp_6>SfzWl7Xq3MvU9!5S6i|<=04QEziry%OWOA1E~nv_MeN3PYh&c~7rrCkr^VjT zih*qG zt=$po;uNQ52w>!E=M`)Tml5H)n74rT>?J_J;Psmw?waQh7{Y|bxIuXhP>!4k)%AlB z_e6#r|Jv)%1q~1N_o|-~57?Qj#O&*|omiOve94=pCE7WbuJ~cn8(?QlOT2k7S;cfG zpjv!Iwwyip+}U;T?Nf$VOLkQtl6D~3%pdo4X;e&>s^h?@Aefm0X6!_7MJl4fa=KE% z(W?36NvHj2=&ME+Pq2Xs5xE0B?O?#uXA^JavUlb+^F=QZUy9G1LHze#%pAmrf~v2C=Af*h;ZX+)7U8v-OrP;%@%tACoCvJ0;Uq z)35O&qtAwy?_G9ravvCiYa{lSzjoi$>if(H#3fxD_#PO3v?XI0GxB*n01S$d^dNsR zJUEEarWlI%%J&&s5`KEFj9CH1%h^#IaY{Ey>|zoMCYuZks>NxB+Wg1Q*USRcT-v%W zOZE5XGHwMVOH(%K7$n_sfXd6z?4u&^<7%V(DaNcH5bPixa7&b?16V*Du)c!wQfd8`m$-0iC8i9x9I zB#>)n=_xkcrlWaMz(3gA)f2KYY@dL*O}D>XvQ6&!wBc1UnJS za^b8dubr35sy7S~^)UK{3ePnk0XOSjM&9mLvxsYxdVnuZE0qDYq}cEOZSjfxbmB_K zN(c)#-=BEz&Pdx;gzbf+B2+bIt)<*os^@AV=`3}{wCS$V%Mz`kJcYcFRfdkF>}vvW z?CKZ3dhg%2&1IextrzD|OZ8a6HF$s#)Xvxb@`~llxg!b`qJdbab>)-+o9dqoSOw_? zi4QU~>gA5pnmXNw_?Dy#Q!TS^=?UL8q`fmd5PW&TFm!`Ah=fm)mdK-Ra|o8A@EvOC z!i*w7csWyRs&zUQ2~Oo!0*sDMYUT7Vn=+npwiERDE<9iao7smP@Q_Xx_Br59N#oS? zB$JSSA=9)j3g*SrLIJk`6h($&*jN|Eep6~s5a|>sXV*;BsB(2MB|D~wH+nbiFEiZL z!cQfrwkI&a!YoHXa!W7rOI zADkpb7i>^v)Q$KUxOwZTAB^LJ9uL(fyWC@9yX%Gk?Q$NVuE~99DEgQVBzpQbxf0I2 z5yN!z4N@Q47mF(g9h;1fpNP6}O#k|i#g067ICZq+cGJL2#;$%tP1k{>|1?IEs1{9O z6Peu)4Ocx27k-7~pX7ibO%Y-rF?AvG`9a81H#w_fuZ&|6xYX^FGRGy~X}Rl{q#>h| zc?zJ9!xo>q%H?oC7!%4l07YkLm!Z{fkuq3s4~aUO?5c5nva*eC9TuI(7|=2*Kx6B4zjPi zNKp86MxC_Do_bjhGmPPw!6Uo?-sJKpWt!Z!8+33oV{BP(=e=e(@x*Exhx3SO;k5f` z*IuZRL*g;T4OU7p*WEJqNHM?k^TOV()u-GZFgMT z#>mEdDGsxqI=T_5#Rd6+Hmnvp@@d9m+}-}TK7x)4N-mdMir~s4V6E9i`3Fg*hcz3O zHcYa7wS( z9v|ga0M}b++H!8%8V<6y3E~D9C82U@I3Q`-G9l|bIG>)O>W!0t7f6_|JW5N#;^Zw zPHZSx#SRk~cbz@+U~PHyBVo7yc!1iJNm0u9g7X`-z0vac=wSTTv{O(Tg8VW8O^!yj z?(K|Xt#Z@|7Ko8t*oRAzpMthpZ7}OC;~=-p;&U;%#EEQlIm{a2nLsw%UX1nla0+Fd zPozC3it*ZXX<}54$(d{P%c1|(@|xURs{_sARJDjp{C(d3COWNZw`cQM?Hu^vo+>%1 znU!@M=g?B2;LFEr>j6+({&Dv!0L}YNaGlMJ-HsKFo_g1^ETwA`G`ZaHam@*=A_=V` zJp3%bwgh_dQzAYe|7y3dFo&kr#;>nViT^zs>pV)-d?~XYa&MGbH_egDXCHKR!q;*o zT+rHw18A+Hyzi9bDV8pr{NUOm;1)(VFccH5w(VMW*r!0JPQDb+`KJJ3e}v!{eW@Ut z*>1tN+st-}N3J=s-h9o?w=T#QY_%oWI|4Wk2TKh^Iycra${QH1b&LoG?s<~TH0!kz z2n#R<;c?53vk@X`It!OCYIu{EM>d#WakZ_GNZDjI$5q{B^x-b)x#0Zk14*PUJ0xFo z%~Q>m*_|79ZwNQ@%OyHnX^*9joQ&MhlVB&x%FMFSM_x=xLqsewE_V$q{oXH#RycjYoQKjGgNwZc&+$Sn};jWHU~!6S}EFHEq5UP{UZ zz?D9RRNawlGTSlt0G*5CwI`uyee3a8hFjq~V@C(hWB1=(uQD6lv{izGT;zKfh1K{& z!}c)GweJ?3hU@aY2cT2oPIU^v?ZFcs033w?M&G7Mth33=grn^HfFLtSm~`k=s#+Vo zetq(h;Ox&_U{M6c-OUjc!532LBgX*puZ@BBcy)}h%Y5Q1`xaR;$zulU_<^-`nVCDS zd7-8II^*~&nk9E_?H(8v1lJ8X{vAg+lMZ^s@jp=W3o_>}DOQ#qEW5+!j6NivItE@! zbOe;{rM_*HlO&{_ARSgi3y7d$B0eCao?h#T#Q@>?&zJwWFDjGDK8BuIhoYwA7_!M@ zSMTG*(&DUlLwvAW1+361YFBD53=PSj&&Z#*G6%?qa^0uC)PYm|md@~ApG+oOKEkn^ z_a4%d1l$*_XRYlpzxqBhK^I6R-{7$%qW6&4LOgZy2Du4 zC`)&JCP)iPon`s+9zIw(7xYcQj7{-@0YjyQ<$oFZ?d9u!ocTq0Ryt|O)!M{r zuPXmUreG?wpL6%+l`H*&hh3$?{I6}R4DukO^R&fsxZGN&+#WA6U32Gka0HmJ?kB}} z-SfZmr%2@(O?&hEA=eRkl1*R;h_w*d5#D}gBeRe?T{Zsn zP`Yg@Uc_-H;))LRzvRcRFnaV|g(=+f2+1i1PH(zK^gYWix2iW zaOb={KCHUL2}tZwReUg59`9?|M6k*s5q3K4F@N2{?u?MnJ5M*Uw@8AX<|VK9k0Ha# zfC<0E$6S+=`YB9*DBo55571}y`b4s`&b;H>@dYbp&_q#5nonu9Wm(O7DWr<-W6+)$ zW!N;Gm!5Z|o*5uRf9(m;KTUCnz7+o=ZRcO<4^Fyc$H?hm@<72&z`vxO_QtskG`3%r z{^f59#lML$F}_;|gONOpbHi z>4qN!faK4HA$YX&g2fDaLm`HJ1>*U~RJ}}ZpGhz$;ZR0DuJbZr4~8urjc~Wb1X1ERekO{~kD|;Nu=Z90JSyH+dl7e~ zx7p2qmNNy|9U!qJT%uMG3wxMbDWGS|79<4#pv;~xW<7Q?u~ZW>DW-*@$>v^S7w@m? zPB4LFhaP={I@XBNKtyYz*sA1_s=b{j*Y({OvOWVJ!^m-^nm*W<+0oLbn8qXH)USTH zR7M1(n+lD0xB^~>{!FJ$JY#0Srn6yW399ST9Y}z{a4wT}enS3(64zJ*;%w8n4(->W=UYCt_^hs#c4bOVf8N|ZPA9-^k+#Lz73iMw#tq4f}r z;t0qQLgIvk7V11<8e4AZUXUJy(cH2e)rZ~jwO;vh!^h;ysOr|lWmjLYLz7P3Q@7_I zxwp*YpWEi&4x3-ShG_iJJ9`mPONCXWz;#bhl9VZb&O4|)=6d89L}_e%8HHU0C55bP zkFD*v3q`EQQoR{A(|5nd^K9_3+PU7Q8dEif$xUA-aR`=K>2Wl zWsbOi#n~2o>_@0?Tpf-7B9`e2q&112hGqMq3qSK?*NJ^hzvQh~M?)Yk(Lm=~D;LnW zaJ@Z!HwP88@LEPn@q_UWxt9c=FZg z7I-y5Ehj2c69PZE5iOalGT#^-9u6^^bapJDbaH2kZR%0(ybi<~x zH~oXCj(=IeTD`JDXb`+D2Grf$Jxjr9(yNq{8h`w9Zt@!&4pYdCL>9qCKDbYk{e=hPD2db29fSX9J(baURrhIxmHe7L6`9C?P^{vIjT1rEy>Ft z**4@~)6;uCDMnT6s(;sXK;*=Ek-a8rqgKM9oHL)Vm|rZ;5`AFi?M4W(AF!$ZOJAtQwicKlYLDhm`gh^_UjSzSI49qQ3`}8v9CC?^;tSS@cX8A z)(<-A$@y_&Gts>b82okd1|0z6;p)ab2>tPODpR}dT`p(*;kHE!1PzT@Z&(LLTX z2dCvIIIFUpa^J9J;!TycVLAM@l@{N2{2eaU;;HQvuP(GxK{goCgA zP)EI*nVxS)+(Z&YVD8!F*d2KDQRa+e^dJv46*t0Vqr^{gb(igw)LRujyM<@Nn6#2y z$TN5LPQa%hURRjs+?LWiQpbexzH`66U9~icXps_GsD`bx9MKN)g=}r<32Y%rDEOzJ zw2IidZ6dO`#yRxfRmvh_7hQ)(JeX_U)flxH2l&}P1h~;d(u_^ zZ*(f^6&Bjkk5hp=)jkHa=U3gJNb_y$HektS^oR{sd7EDrdfIAF$Ij{#i%}FWk?5~b zkC@7=8wLi36d-dTD{<&kh!pF^@W(BlIDAIyq!r-%1h%># zYp^&rPoSm@GvJUsu=ga9YG^oWRG@)7t@v*h7=x$)bhN&uM|-0--uDxtV)r z8#8sK8h-%v!C#iv|9*q&OwY zj8x!%H;ui?4k|obdJFj~gNhgHbfjLxSJ?2#$kzv^N%I$^laatlGe>8`)2grQH3imE ztH%URB~N`5$t>x|UZs$R^LJU#3Dhc_?Qip5y|HPPJ3Qxw{e_?u{n+Tdl7ryT6&X4+@Q!|C4(!bvlx$Fx zB*YOvj-3M3fdBK>Y8xc^Myp{XI%~-)Qk;iU)RsI(_P)TK-9ML+ESoXas1HNf2LUG! zst4vUu0`NO9x$G*Jh@yT_O;3Q0g`x6D~(b6sVPLhH^EcMh_VydF=3aV1|k*RsI1rf z>X|wQy;s+^^8!W2`)g<GF*mdI9~O7)s{m2)y&C$L*Wf0t_J!jGn|Ft@DR|$d!`i zaUL!4P6L3P)q`>7=k-ly%lHOZSQ(25-NON09KJJ{Edked8!*`iAJCs6|p z&vi+E4yej;cWO4U+*|!**zKY##p^A*e3OZy|T)_P3jkYB7oHf^mUsZ zLEd}C=uT%%`RSpI%daEzg6iX<7A6NDF*z2E3C1oF2R(306oc!~L({sidT-K%CNhgF z>PZHwl=p}WR#DfkOHheI6J>3OCZTkOil9k2kM_e^tf)D1^a&OCE>P=LqUfm=Suk%# zQUu^+$CpNObz}(Vf9X`;ONA+?)Vs)JKd}xSTBIW+@x^bv*GqUc!H+xxESBMYtsU>gGEu<}dAlcNPyZP-J zk}rl7gh4Rhh;Xr-;vxs_`!LxR@w0{ zK7)B0j^H{Nc?KUHD1)i6lW1l}RZOK-7*AQt+}%5X@x)Y!$~v4%`+a#BJ0a{{+3pSg zOtdv#qZ={8G0q+7bZrPEPKos43<@PeML9NVeQeF8vDG)0X_vqyRSob=ZhBSq+D^%S zUe?-e5biX69xOC_uOFND^X7`>jnU=LyYMof0@+C3>^6pt{+Bn+cR}}^%RVhs?J)AP zV~1t+kpJa!o%kRMRo$Awx34fU$*Shki=6n&u7OXH{6SuzboAS z+OL6EM<`{SmsRk*n?WXKZ=I+)xl!;6(Q5El}q%0gpf8F*9f&?E#WtDUmS0u(Zy;jnnr!JQ|)N5Rg^d zx%#+>@!JK7(I~PA8pS97`2AvAcA}6zZ0@_KIW}+o$eX>L=Qs2^q&Z+AFO9ZZOV1jd z-zqC-9C(A8c;aW{Ut4s_<1^E_iOW`|x0Gul^h@gr9*FCentUpY@hU#=Jk(^)jS>>* zpt{9J>VYqmDk9ss_eD45jB8Mw)xJnyKqfrug*|=fyWU_=+~A|(gS95pL73Y3lgcDX z*ASD*uCkh~n+xCeCFKU6_4f4dI7Zz5J&Hi&C{(pLQEs(9^A2a$w!dCzI-!592+g+|R^}7Fm$Ob^i literal 0 HcmV?d00001 diff --git a/cmd/clef/docs/clef_architecture_pt3.png b/cmd/clef/docs/clef_architecture_pt3.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d695447308c0fe7c0dc3018618f7350f2a806c GIT binary patch literal 101351 zcmdSBc{J4h8$aBtyG8Ds)E%M4P#S4L*;}Z_WS_x|twOSA&oHzq6g3!S4}%%|U}R65 zt*BvaV=0lWQ!)m_%<~>p>i$0G{LXXE^PKbe!x_VTmiKjCuj}=CUGI-zecdzs8$>p& zSh0d1c2?7H#fr7?6)RRX{>2C0dB8q7ykf<*6)?>ch^w8W@$0Wf4s=ky&!-YJX11)p z8&aQ+aIoK41-&Tv{zk?YBZA?FQ;yYy3~2skwRUBD-^6?ts~c3e;ku1`LXDf)k?-R|$t?vekKPLxz}f#__*ywP znO@ZFNZZh>``5124N|IeVw|*9$4ch5Czjob1RJ3q9xZQQVh!xV&eEcFix{6&B|1lJ6&M-*Xv-p8)P{^&nZT79$313g% zg5oXevUg74SAjRcuXe2gzp6Dn`GCN?MeyRU6Znav!Yjy;yw8F!@B;j@)^LT*zFpuu z_yR8$4*c7n{6*ff0;SFS4!*z(-f_YCct>A4@eSzO<9I>v9lQZv@J_S}T)?j@xwR9% z@&SSO9sC7&!8`BrOEbKEcq(eh`@3vKw$3E-K)lQFrIdugSFQe~xwURh=i(fWdT}FU zEvkx6vSw-?Z5s{o7VAnQj2kcKl!O`Ynt^^p#&cw9s{$2I7TxNmB^b)jC(mv$Uw*TQmuC9RK) zieNV2Ynr-%w7tn<`;BXTk@}#>1^}F6Pu3rqd_w_AQ`J8=wKRk+n zCg+Y3xBEissS|gNk(C%Y2aY53RP>t7z=&-v%zAh85A*XWelsRre4*n{zU%d?FXR#x zci6Q@mF1Iy?^;LKz)W5)4y2~SPO$7QT|yfh8$TW=Sg$6GB&hj0y$Ish?ZkV#=<06% zm7&O^+vexC8Shsu*Mz0Z=rfNnU!Fhsk%;YfDQg(k)O?B!nZ;plAniR*SQo#sV*6M5 zjeEeFrsf=vbbX((VpLXhkLltYwY$%YDbM!=pxJh}Ye=_`A6%IgkjZIlal4K+f;?b4 z&GuN*oZIug*9gXha~+c%_ar&bb`1HgoARP5FvTi7n4I?yxiaqOa{V~NnuW7@vl`8i zXimLle95g|y@gE1?;{e4MlQ50o7wRmve$BL7eYdwMxJ|UE=pvusVw6n|=cfh`aJNen zB>Rly%ExW8ZHSba216J+_-q}#?yPg$x3^{%<6+GnSKC_hWSpA|hB3p5GVh7bnDJ+f zbVm~Z^&D1u+3Yq>mTI-kx8d$HZBvcWsWghC>-5dCaMtLB8noEe8hiby0CmAy!SvFE z@oYwhAG=s{=R&68BNd%HpH|sPD%OOFnGNfwUthg$>jq<{3R3=WZF=9QPaDIVlT!cc z?L`VElgybx(j`@TW|YF$_eE8zNhI2(w=pGSBu{1|gI=6VZ!K~(kv?0&zQyL`H2c}? z`vEAVIOzSc&hNKuh__PN;g3J+NffWKpe5jf1}uUknmNkSg7eXN@On&CLIO1Ee2bc- z{Axz_Czncs&&LwM2c*tTkq>Zq!N?x6KVv)O;OfjPMHV<(;J!)*d@?IBh>Vzpcii5%ZR^8qdwcua$?{*-1v5zqE&T2!T$Aj#A)3gFWCf6Ed|lgul8gp*dRAO1K;RqmRGNf zyz9_A{q0j|E%li;5*f)?ugjEWM#l8oKVoz`kLU z@mhEcEv6b1rhT3-L=&0lu)Tt0P&BDAYARi|VXU)gzX5(~n3ma6 zHA&kjSs&gL8bKKTw6D&@Tw7!_G7gGNd`Gn* z@|_);sTkmtR^t2NjeHRVG~TM~h;BUVL~xU-I7(zMT3F5FAWG!w4szr|w;2eQfia$b z3cJX1{5xVcOwqNc{O&pPA_t^?iO4xTpSX!QinPH9N#cWlc(;#xwP9AlhV<0B<9b8RYV(})coAIlf+9v#hQMn4o^D<(PgN{29ZZ#Rg$H8)1 zNFWwF_)d7;dTE6{P5kP(I0U2d*}RDQ7H_8w{%+5kM_z3|_BV`;{Dz{Iym}>C+AnuP zK@zq)W=<>lsI6u13$DLx11tJb&o${+ftMqzMv-gBg6j<}%z9BT;ym>j{~}w5JBpej z$hC$Gn3!-)7FIbaC8S*$!bI`IO9=`l8X*bINO>y$=!iK;d97vA4 zl0JDQB%Jw{fD|scUSYBb>VOYP?+C6=DDM4)c@!ijTDr4Z+D*i?Xy0RLw=Y&th%(wb zF|5=i8v@^f8M$h?@h)5f40{%$CcIuJH;@$gia0*P?~O|u^QK$qQieMqr{?#o(zYIN z8mPOVmfOhENPB9B5I_dEKO1bxFAd@<2Ad(HNw^lreSh!O@CvJX!%W`L`;2iGu&QfN zSy}XWjtqRgre2)GP=yTqrmRofVSg9`c~$$YLy2F~`IeIFhKQlgqD;}8{wf{eOl4#E z%zSaxbYG}0epua7%Q0{3idR~P5o##Nbtb{EyTc`Ra zniE?or?<)HP)o*x4j@mW3om<>#0OrmcE@>GI7Q3sCs`)uziVX8Z^jJyTbnermo`E2 zV@Cb1e2IW?bWNCn95|QtLPGaT;t+{5@6X-Lt;92WX|G-tbAeh}4S4(_#za2khTUy1 z@H-WT95lbexs5y-XL0r8+Dq$NA4Ke!H_s$N-!|1!a$B>At^0-&6Ti!;_L98=5!uaO zo`-PRPu{QH);XI^&-8NOj@ls-c)H*R>E@*ZXiOnckW;_EJ+u!N-I%}l`(^3F`^(*M zIaThQgB)B)9J>j8mX~jfLSx0!u|8iKT;N)uCVzC8-GF;79qj?H^YaMu!q1bpBI1tS zx1Hwwuq+)GFY2?M&5;l5dFMEe2mBWQs;0&a@Stp1gw$4HVOuvhH+(`uKv#aJy62a7 z8-nxRyg4@ls!GARv!(kKOU#A-d=A+KR0}EcmCR8}PESii)kB zh4$7TKYl#W$q4lS^!k3bMVYs-;00wpmVIw!h1YOP-PCA@$8&d`WJH^${EsHZTa*O- zQqM5n+5j|CFvaUWKKv^9G!m18E+W-d78c4&pN5>d00h)GaUQriCh z?t)|kD+rbj5EKlL$s}DQ7bYb=6H#=!>^0IV>#bBSnQBAA4@PU@hm}PYo%T{LBHAw2 zss2!R3oC06fgDv4;4Rg)4YkylFEyp**i&O>eQps_Ix>b{pyBE!s&^yPhcViknz#6O z9Lv*>3EQDWjUOCq_H*7pRH=M=-e7fcW*c!fVV0#&%fEYiG5dD@j2wuXFphw`hl|Fg z4Ln3$CnJ&(4I?xLqRmi&l#}gTfnmDWq^6~H0xHx!FR8+`q-&SznI1xBTxX@*{cJuU z(nBzqd!Ic1Gut~h zT|LQLrUwLJJOQ1M>$t}3KyJOkn5eSn-Ua3XQi~_5Z!F|0hzHUHkBLfz!C>I;dsbxN z`ea`TNF6Vdv}*gVcj=PU5;I#$$Ch;Xpy@(5Ht3(SB}x({KP8>GsjZrGCS2Sl$?(L9 z6ZvFBO@@Gd-kaE?xuz)6$S|5yS6{zyNxZCHsHVdof)f_<{TVTWfJ+2nEDGWm6>oEG z3B`B#y@t{=RXKkHubeZe5exCTWA z0R^OK4f5Z4q%~V>3g+%`)yVXj;rz4u#?NnK%|KX%GC6~+q2`+S*hh~{ccDm*ijJ*s zK*}0D)rlgN^8I$FOJ)BI7DWglorH)&q{}>q`tSoIMc!kbF6=$ws)l`srvce6^%!Z( zWrT^TcxRbeGGOgwL@0jJeAp4(c>zfqV)uK5q}A$zn@xkld63d_1x3o3HM(d7pMZ!% z)UBh6 zvknIt_vf-l3aV5gi#5CuoDgWX{=^aT_OG{iCt7B8{D7H7(D-SIEaH#VuOeM$%PbsF zWW(x&FT4-^2hC=2vGI3!X94iE*k>1Gym&~S-LkAus6x8GGW*YS#3Vj^drf*F#=ko9 zBBU-}_6jlrq!RhWO+FM@qHMQMuUpBs@R8>9Z~}oK=Hp~;9>*`HTzGOfR86hB)O*Z9 zCq~|lRr}@*v|JSVpYWX&)IdFC{n`}J*0(++p+{<%$vhw`O|M>k8al<6 zkbB&jV^Idc6NqV_L=a}QlT+4MM?p=U2@I{dYdOg9slG4ZrOn!7&SX#EJLp;hPTz&Z z&N9r39HKH;L>-Jj>e>T)NGLT<*NxYW@n4GA@daG0HLU7iY7F`-QD}Yr^ZcTUg}^k~ zTDD1DNvR}Hun_8Q)Yg%A;bxh4-h63mc5x5-5{gvc+?SIMnd?lq)@JAQ_(v!v6;Y>?7n~AOpz)H(Adm_j{ zha$*`rjAS#xnebS^`0@K@aCcBbo!geN4nLWjdE$nLH#=FM}A%L1{;(CDI*`&L+9WFMq$mANg2#7mB3WY1tBkjt_~DIGa>;1&!H3o5j$( zP@M#LbdvLG#4eGmaxlZO2uWr%fwY&u^(M`1TP03-u?n z6AsZ(_B6lZp{OPC7J~_AS z?a2t1oDN=lTziyna|AU{S}i;^r(bpnnXfIiEMe_s>1B$S!Ol*)tva-O_jB2jHXNox z`&!W2O_w)F!4<|V2T9sUtiHlE*x*PPu)qu<86;zfvWnL*Vz2Q{vB9Fv@A5HxYSC%* zk-2Asn!n#bVOL#K?WJczytC`Suq8_Gf*gbFf(VH!IP|MG#U5omwWd`ePAXg}2?!Tg z>zWZve;cFVF=2>IO!^TpsCgwpCSSk!vsK=`JMhN$F`| zNj@9{R-Q{)AOX4@Nfy##f!6(j&~g^aH9t!FmnXhZ>-@J@>P`Mn9LCnYZCs2EN_#Q! zek>#}?u#b<&#pSOURudbWQkZT6C?}g07QCeJ(l_Fi?nVbg_is9i%5VSqAG1&==rN! z&Z96R*~NT1iRxIVx#@4l`ubN+_U%_v>afT~6SpcOoOYjIM7|azNw|vQfde`1 zgWsCk^Q}YUj@nZtN2r9*1@4*xy1b%$|5@N??sxAZAv3#XzJGpuO8d9;lb2t&fX9H9 zMH4Dt!0+{2AIwLgLA$pG5PzjD!=j7=V$p+j=^)#Fq#Pe2`bABthTKZ`36msJXt`Fs zokfm=0LCMdnhv;Sj^Uo2h5ZJtL8;KUOAGs9jSaENe=?c$rV`68ozKtDAJ}S{u$Kmi zh*{{U8QCT{a}_Os=cwEV@cL40Pu+GWF0fR(IF=O{C8d!nSD@=_)XEZ0wbcWz^!tr0 z)zMCPgA{!JWmM)WSq9b5q8M0!uf$VAnm~s@12;R=V%RDMTJb4NrHcc&QxdzVUqe;3 z{9N`LcXxN5-EFIE3`~7$YG!{{SaT6P^SSIu#Sd?Q7sCCAele4s@X&6#j~UkG5C$&1 zTJj0LEfd{RMFL=5^wLjY$FX-}tiDh=i$o)G&Q$~=O*eUWzp=4#Qys3D3;VDnA~#+lRGw?O$x}t$ocMQ zw-a8je6~nw?1^2ew~(Xc!uDakx>HO}%V271>dESDdm%+w;PQ+YkhEy03Jd)l-{BgK zZeIqDNNVa!!Wx&h9E*5)Sz_lAeLM+glx*1c&WFl*pK@lKC3t7pZy&lZ*IMC0z0ebm zFsa9FxGn~d|C|6%L=r}dB){4a19acU9`!ku+cI^no>wE_YoP#sKLI-^`%x z?Br0+4XWr6in2*L2{ zQQ1Hn95zZ^y-vrs0vHrT%1{8O1|yu>W2cvN!2Idgr-LotFas_lCsCS~x{TGKwWtIS z=)#4p&G<+ze46px5Kf&BXW1lisUFC4+D~V#j2fC7WZ?4z8(&-EwqOG!Wmu`)c0%we z2bp)B+~Tt zkrkumI7((EI<6gI>y!lL_Xgjh{AFRs{o23^vpgi1-B}1!ZQl=+0>xwxTb&RhI@=G^ z;P)^TPOCCSzDmp4pO2<`A&Nw{+HChn*$^=|hf7wo(`V1DI{GFz+TkDy9oK>s=4Ak; zoP?3rSNHpdAM_(5djC1WqpiHb-y(7@fa?Z*9a|#i(Xc8q%AwBh!!;?SmqS&m{ReN@ z8Kx$aZx^f(b1J;v3`O#TpT{(huTEiq@n>4`OTlSvh{XBymi?H7^Q#l;cf%pt%!(Uo z5tt{ugY)uav6pUWp!UDChrT$&Ybg&112_~en3ROLZEyPE!f9|YG zbybwiCVSKMNCGgP6GjnUj!9SE*4Mi?Ne>M%P52{uBCZKztmiU}Y}&Ea=9v+=c@x=@ z^_|DvMv8Xu?&@dLwHH1Ya9VM7!h$BUu`jue=Mx&@O?UXZbJsHx{-qiEh~=^`$F{W@ z(QgK~lIsn-_sGbQuKXJ%)jT4OiF!ku!ttrj^q$&{pdx!~M!eAfph$KTlH{Cp8FQG0 zT4GM@AP~ka za9L3;Er)uprJXkbeb@+c!Al_6w1Twunha__oaR-oxZ--RR+D5M={nrupQORz7NXHZ znbz|WBh2}E0!jKD@Ie%u97u9N>P2Fra+RB`x|a0C!eywv{jJ}i-(P-Q@-nq* zMb=qKBcM>R=+rnHQqb`kf%FNRbQ^oni5^7%O2d-6MT-FhvX=S*8Hb75iF}nRb2_si zGGZ_PMpF`_w*VoWUJL(;2%w+RWJ)@G7eFd*6-ovs6a24t)|ty_G`a}yPTI@FBskQS z<6rsROz-RK`+M2R7MkKh($rG>QhMS^<>q7?*x9>ENF3=o0zOVt@%r%WdJR+gm#&L! z`5P5ec`WMxzz+I@H!SA-f0}k>p)*Znu{-~%5$*SGT4I#C=6ILxQrhXT9rp3cUSuhq z7*n42gJn-CdVbL_ZsLLlT~m7DEa6q`-rVc3S@W(BsmM&@l6hcwkh8L~b~mN69knYG z((RkmS_$xN@N?%>$3=RM>=Ip8Fk4XQ6kB^2Z*dUD4J)K~!Xt3FEO6S-Dzsq3^>sjk zDJv13d1GXr=n$7%FXKBzxbPxq{FudyKtBW`QY8RT3YRL&o56Tpn2ocrAyi| zCEsHd96u)z0b>|P73w4^)b*%XCL`z%mmIGprnQLcEA)4vN^R-{Hwp;&Ja_;6=J5$F zl4jaVTi|NEbCi^pRxy~V-4nj1+bRyq+(x*LOvgP@wgU`7i!!qPqP2B+SwaqB@VMf# zg4{m;Tu*c?yCz{DXJG zh3*Q*W7M{j3*`++mxn6wOg8HvGrT{CTY0|WYr0$Z z-iwF2nl4di@R($TVE!=!(pmW+v5}jd#jaM;>TpuurbxnYzRX8rWu^mUXNk-V(HW?d zm)U%rr zA^%O>0~+hAhVI1SM^I!@Mxa*)zUj_dD6{SBeu#eOu-}NO>tA>lmMF#ZHWuOT)*{6Q z0VV}QX%pZ2Y=~S#4>=M=72xFA08%o-XbkB~9DajKFj!@DGhGs0!6B7~HM06`4x(fX zNGJ4PsW~PA$!MRKc%2nrfnO{5=2g*=2QQi2N|L5lz^}}?0aYXXXoyLx$c3rZI_PA% znV|ujTEk#N*%xh!U}&Pql%m~YlSAZ@k=okYF{Jt|DLun}6O$vcO(eMV_pLd-l2}7V1~Xb71#N2>tAV3@3miNJeYV^m>_@2fg}+03?pimgY#Rf66&{x5f68r`FQ`Q1)wgZV_5 z&=3+Lve$eyea)9r!5G2EI0B~f@e#YNz<$zoYs&e)%53G?9PKxxlgOqNyXJ#X?yw1i zjc@I|w#+Bnw`lr-0zjNVi8vU*ub+3vlk|SJKc2=5D*P#fR-n+5BuQl8`@+J)-BBcT zP_FGHIxYN>=Fb9JREa#ka2y}xU%18+tD_*Ptp*1=dj512u;u?WlJsW#5KBgQE%m{@ z**uaRaW+Q=K&M7d+tOU+hX-=u|AFKA3qh7`|5~_8`7Min9&d{pZ)&(09v;_Wf>A=Q zp{;%WtXAcSyo?X-Gi0%k|JusN8~FrPLY?2`U7z6y+dO3MzUdO^{Mu$Ap_iMR5SkV~ zO-|Q#d%)T~+hz7CJ9OPmqAwKIa_t?7*n|2%a7Tacn_HBOvs7Ll*{}65srny>Jotfl zi3P=azIdC;-T zoqhiOgZ~=akXmXpzH78xJDOl((VTPTYIDi`#%~tI@7;VsR2C@ZuL1BDo_F(PKin?8 z@d~bx?HuSSoW_$EznlA#Yi#WoDkd72{yN;9>{(r}v|tMTM(-pMw)P7;LA#E=F-;kz z%(#jAU#C+r!OK*YjJCBF*=_r8=01^u(|P?@7BXz4y!T^3rm$th0mts=nBMPpp?-P2 zZodCB;Wu5~(49a42~%b}P0)J2ARd-&&fE>guakv~6*g2eGZKGLRyOl!`oh5U&+N*9 zs&(_|2M}1l%}lpQV%=mKzBaro@N9Yd&p_k4?eJ5E_yg#QR;mXDz}s)7E{G<}FR&+R zqMiMD-PUL6q}}kEs@YPDx$p2UpV%^gt&iTp&C}ASJ9WBC>G4>$*#w!jkPtt2t}c{& zGPL_C_P$W!z}vdv3us}Rp{I4ZrrBSwWCEjUe*AST5YQtocV%}6k7#PPXCCSKb1;*N zsiRV|(R<)SDD*{y5~k62P-(p~mXo}joq)B+38k9&l(&A)HMNziVumRkV>^|7O%4V1 z^4qFhcxIFVdR*>7UfpGZG%2K*Si0mN^`Y?U)OPj>6yEztp=P~-Y`#EO+s9d5m)?7? z;2VqiIW>P3%i53o{SN@J1ppvpfj?lXRKpqUdws$$!ohyl=+l|oSx_;~$S95&mmOJ7ST2c6x%u;-Qr?Zh{+Zm z_cX4+jQ{M$8?!DUU2$G)E{#(s%N(W}S)7jo(sA!i>9Ao2QV^zl+i1{B$A$b^a=9%k&? z4@Vv%X;TkYRU1c}V~F%|F(E$>liv9QR~o+R;rA|P+w$@0>I9O0lOcfzB{$xgIpnsb zRh7R)MrcPWvfs*uLYoB?P{Xnn5=Uo*%X~hpcA?JKXT^P*N<0T!G^Up=pP`MtQbcUL z$q;$+(;PF0TnK9p-Dpefw~xQ8?2;D|q>2pMo2?B&noIZ1wCWDKZ5NLjJ+w>7IS<8lr zi0BGe09amZtN3pR{!{xVOSQlKuuV&ED8d*6A2)H;^+*J}VpTP^*b-->96Bok1&pwE zFoY}p_BIQIJ#CTIEXtonA6E^sFxoNN{=M^FT`N05gPyWS+*_E?GZo1UmC?c(3!`RR zs-(9(BxuLq{j064h3yZD)EkuRfAP@~Xf+F^ZXiY&w4mccj0$I2G=;3uJrlh<@y}%; zwvr2-Gh1t^ho$T-lP%~oA}R&r+g-L}vcICeQ6pQYrjLXpI|b)RJK<4&>(tM0)EkN2`A^|Z%1bSfSt98)L@QRlqJ1kUa*F-4h@&m`A3hwD-c+M2E`%d{ z_O;mO*b#3L`bzbc<>;li#4QH@3ktv{7<7Q#c9Mx}tTeo$iKLjFHB1F1)qGeZ ze=<%sO6t^~s{#nuV#kKpWw`AD=1T9@y{)KN$E zm3TvX7)5}2^zJvmVPzPkp~m;y^B-DZ2ZH_H2CA2tapz;Nro2{@LNbUlXvg>IZSCEx z?g5@92%sM8^}4Kb#QbmhqUSHVeX2l~|9PRro*&`s|7IudVW@vIK^29TP7aG*l{;3! znDHRorIIQ)Sj=^B3?&k*|qOY=c^FT1^8k?~#52{G*ph~ut3@WBIC7g(G9cU~@? zDt{#shoy|rXGh@?f3gl@%A3l6sS`>IX`{<;u^9s3*Ts@MK#~zV z_~nUqrul!{5xEdVr0vodu)Gh(Gr%P&W;SG&`moY%>1WkgaBg&BF0m<3w=h60DoM0E{n^qJYLiwl{&dba{ zKLoUo50Cn2;T<~W0f%&EewHtOX-P{_K;qSzjP>9_k*)y~S@ba&>FguzI7^>XU^er6 zW!6&lqX^d0;chQtl!0mzx-kq#3)v2li$uHrPRB=E1(=5$A|rcLzOH0__nj#D_U9!a ztd?vQ!sLFe!`xmIr1HL@+amkmkQ0zoaFNfRb%bbiTSD=lq?Q-f1&03xaLJYkM8g-%{isWzifBpCzd{xMJj^a42@nXXFEa)7A$!f!m3vVED8_r+g4M%T$S>iq#TV*zzBUU_Y4Rw8Wl2YXYd>Qt14#zzT)= z0my)e%OrsI+xMXH52n-Dx&Y7%hQ4p>po!&r-9XUNT;If4n-rGSkLks*|I2qx@D!d; zkJd&Q$ZT&PdOgw&6s0|N@?sg~yTa{6X-Rd7!(_yZm`0LG?$_^t&v!Rj&t>LrGfqeV zq0mkHlR!Pcmj3rRYPgQq>9_cu15}~-={ojpnt)W`!@Z+JS{hy)y>)x;36b^|38g~ z$M~Wx1AL*jB$Ew`%v>oy~`f}^$TnEqUwK;cyR$*G^ zf<0}#hy8vTUWVB}gmEzGG*XAOOLwDjqmoN72RH}rP9NU41NttMuImw%BA7xtfYc%e z=8Rv>);a56V5rHnD*xPHfdmus)d`d6u0uM3zAyqZI>7}s3pxV4VJ?+wv-c0Q(83!B zFAQYR+NbY}egsp{8c!f}nkxW9 zkyh%)cv_)>XcYY83_Qo-F>oA=s0E0d@rJE($}YXns@-(c)D;2{wNp@j6~!*%(~RgL zKsc8}%1JGJkI!I*qRX^~Gn)h&8V@rc|A!c zd${2%(yNmvFsF_F(92*{n(O3oJ3{;)uVGWhcyVWWTiPBtthRwV`HBdAA!p6&>tO2B zoM$Z@HE7jd%LnOV$eeRbhBEn%581s3^yBn0Ot}>TwWvB@!Y}^ynnK0&;O*W0(b03y zgXW#{usE^^O8cbYqH#=I)$tUoL#TT{ECokekOHlyMzJc(7HB8Jh8VcD{LqU7E^`{U zsq*EmB4g>@&*#hXjITbOCuwc;yHa})-qc}e ze|YOMM=4`BxzH|JV{1UG;he$EI~~HZbWkdFtFWi>JoLa!Hrh2T-f5yra?t(*&j}1W@SUjuPKW+4v(* z%u)H%wl? z#NX&`xHDN-Y@~bM*z9rnzu@q`1Gg{S##%STgo+&HZ3TWvkT$@p&vad7HQ`h3-D=Ed zGp))TjF#cd@xL0VR+bYR%SPMYZq$lX57+(I#mv~r=2`Q;+R_2n_PlDJ=$Ms0tgrK% zM8W2j2TQ2~yx2~_A)UO3?>%=GEzVuHVD% zV0G*rEO%CwQ8Z+{-Eb=koj=+^u9Z@cKHuhj+41AYGk&#})c%vAOw%3Y!W~P}!5!GD z8@YNB=*r&Wn$rSqbb!OIyaE8iQqjhCsB2)qc@@|m8`1r?VGt;q7)D7{W&PLkGRd6334XLOThP2z%Z;E^3($8YE3V?E z@Nd2SxIz>`j`Q7$5>P#1Bm*|WLhPo@nzn8*WbV$^y%D)m?@4n3!Vpn)lSAJvZ#3ds#5wlVi|2I8 zn3aZ<)cD~0_inN&DePC8XIS%N!X{m9)vTG~Lx<*5=tZIIz_CuIb06G>HQw#`%_!5C zEN}fSWOoGPrWW=b*pjaZCL&tIqhlQM)~dX8af!?Hqi=cBOTAzyvb1;VOxbXZw@Y0G zSVCZK1Fzb`W_tj@@uiI;i_M9&iR(2pFy9!p;(o|*Z(DSFO3J66urTqj7tX!8X5QG5#7?pRML$dw4^Cdg3X3LfVdwGV0d1BCdf$^XnY-xlooJ?ZE6|zp1*a zj>fm&9}4_9Mr3*Y#@^*jEb zt!#D`-8E3Mi{A|{VH}NDsiA$=BhJ=SzoLsqA79w> zkbpdUm~_!|C~iIEbH(;gA&6Lqzj-T%Icz&L{MLTz^hD%y$aK2$l1C3Za}ueK9iGQU zbM$W>G3*<$j8o2X$+TVn&_q_0n)HG?UC=29%Lsf$y}%4C@oeAD-`XWMB@}>OA^mWF z&eL>zPfzZ;l$3R;)8y{x`I^*$K$+9leC_;4H&Oi9>W<;z{>@T)C>xK@>Gb+ZbM}`A zfA+ETXNuU;2K5=wVl3G1$Ew z+mfI5%Wc}9pDbqz_DsR)#@S$PRF~g&p3*q3lXz;6S*j|=m|=TrH}^44pAp}(>megu zs>Lh<_jk!5+p{*G$+v2CDp?Zjp1?w=y1RwL$^JW)<%4v^YM-uWwx=40^Dckg&b-6F z@kQ*4$UCjs3=W96mC7p+ep%(xDooh;chVUZpMaMxRr4@W`7gbS)9+!5Lj!B^F_bz* z=N|i#M63(ld%Rf8Z*yl(g%y3#|1AcODr7qva&GHX5_4oxwsIjR2W#7l`vR)_z zezziVi{x;X&B-b3`5Y`efcrMln-)n}ABcU2@t&~`9%^ID)l!Y(T)opfTA~y4wk6E_ zJtVT$`2YzCTA3zK&G1Hi$nas0yo_S|z4cU}@uSMbf)4x4Z1}<6jw{$a@6Hay9WLx) zHuUYW(h(DU{22GQ??FiAW#$+5Dbe;jdghlMYvc>=eajw;h|Vc|E9a9Jw@(aP(&}zm z@|rAd<(ydlukH4x;zDNA9M$-K={vlJxA#FenU!T&)N|BEBca_43k7JOIcH1KYawBU zBrNEIJ^;~1kF|!j1hDCB=h_F+V=n|WC^v3YObtX^bv!xM+x{fCic;anqHkkY7S6A$ zqPSM6IQ4SB-i(OX;9R}f!5vuXH}`n`)ZC=JpPFr~j^!M&;%m<((WBB0uNxc5-#iM& ziU^6FqcmU2ZpU!j07|c-b1%d4s7tqFrpCU!$jR)f*KeYxKBVNfGhF`Nu~$dofkU6L z$>e?9j?a3P4t3P#?KbvbN9mO<0W+bY8wNt9dUJJsX=7!q9F0y}*?@0*6OJ!U zz3;`VzMkj2HJ>oPKZ??}U9u{Uzug7lyh$6@DuwQH$7=icn{eQx(E=)TYNCUKMAg66 zCBaAADfZn?Y?b2nu*bzHPFaQ1U{(*et}Ku;_c)L&#+WQDFXmiMgm~p=2gl3$Xs@GB zo)k4>O+xTf;X!ybB1U{_;7BjUe&07{PNK$_xW71>Nw3{r3A=66JR|V$U_*KhA4Dnt z>i4&&Mze>A_(X1rn7aSVO7^%4oi(sBTCP&n#>_j=)=|CNHP$C!fOJ9+fx`gm)s>L& zHBH9?XJ63PPcO^#X;+bO@exjwljF1`#Kt=7y`667%rw?a6*8DJB`EwP#~5DMZabpU z?I_{g?I>D2TBOiXChOI$=;t_&_M6Pt3zr>GzI(I`#S-S%^k`kbA ztzvCA_B^`qDTvz)nTaA&ut+KLqoJcN^#(;&EeFilc3V7x&f;pI8e z_qB@Zz4h)w)?)?5uK9B)AJghCKc}|x%F0QP+_m*xe%(_yO0Zey8?Ca=PsJNQ@UJ=K zi-{d*DyL2K4qfndov)@;d{b$_&J^RnnQt_kc{zhuPPKd@ucLEUwLeHpO=PB)dS}?; zS>ooFzvTC+%gBuD9XhnS6@+A(Is(I-8a*${W!N-yO+LovGaiVkPTm)r8+N1zen=YY ziShdW?n6Ta^-Kq<3q3ahk2U&O*JG4&SLh?S3O0 zoW?uBGina|IQImK>1GoCmxA}1jlG(Qb)LKz?tGPcTJ(@}%KaG5L$#x9AwTxbY|6!E z7c=hAHp&5(hgm#fkbcR?E}eerTdrw(WB9S{JA?-?F%EyXsP?jB(Z!Wzo2!J8r|?qh zESyExbYPg7F3B=&k9Y{k|Gq9xy6DD%jEOEI0o2v2vc>XNiAY0AlCV}>&z4PY*zQ5PWZt7)a6I_+f!`1PU-F5|SjG}&~ zmFYxj1!bpoF2Q!J2pK!!G%^+MJ^l3~*izo5SKOWvSaI3)fVthqqob6yBR*onX+vjj z4`tC*oIcm9`q{nmj-9GjgrDo^OC8eatt))u>XNrBcw{vHXd6AES%VzC&6xrbop65p zSq(qla3|KgBbjFAymQ-) zs?PDXtDRZT+1;5k+8ZU$6mmc?@$0bizfLjy4;^lz;aPBn!GD!VTG!YUolRa9#w z`b5&oZUPumGccp1MN2+VbQzpvz@}^ zLj4&g{o;j1W>sYVL@~0LSyf?CiJz18lp=dJ)^)!myf;p&X+OU9$Qdu~`MRV3cy0C{rDr9O}KE{}N=*1E?Xu4-mab>QF5 zsBOIi&8}XZAX8>XJoH4y`l`JRb1Z%X-5m5!;Gj@Y3u4GIT3DW9?rjK_%u3_8I_ZDK7i zJ4>kN5N2*apB#z2Re&#-u;O->xJ9>o*4upY#&~x+EhI$b3O8S-e$N=a*EK@Asi@7; z%BDkU#`{AiW3+6~8NvW7pkYV=JAWU`9Q#LQ`Yp@*!^j@W0lVnz_Bld!w|A|g3%B#| z1SjG?9fX!XMc>u?Z9tgd#~LsChwI-eI2dple#D!O3!iFFzF+2C9b_@pGn>-zE&iZI z#fu&bUr!ikvaregHu2WbNCTxk^|sQ~5 z7ft~E>A*(z*9Z&BF>Gvwx<}C~wXew*&2A4&Y%#UbQ6N7na>^&39GT8mVv-TuCmPBZ zt_H&=z0SSv69#3wMYgyKm}R1h)8o&bMW*|)0fC(NmN+A;fK@2;P2P5V-gW>mH!XFb zQVmh7lSnt9SnJjuCMP;Sj23i%O#>4;t*Ma$ier@~DeUJE5^=#`_Cv>D+UDRLi9nCl z#ClfsecK2fi5hXL$x`W_m^}#__Ul$)^jOcI@e>0N%||~jE*W5|*iAPyYn0kfkq&xM zC*Sr0WXtu*YqG4USC6GOvN{`CB^C54>sg7g4MtWJz57LRFq6(0X}JkAd|+!aas5Mh zw186PYT-2fv4_*4Kq>hH5g%`JVRU-O zxLP8e)yqATFg`z#B#SDlQ*=@}|9GZ%M|3!LX7);lU-Wo;elsquDep1{M*mj zofr2>1iHYFXcWJa7|Xvc>Qgps$mI|UjOXo?DsS0SC!D7)4R3{;Q(jr3BCX}#G`Ls5 z+XhDSv)8g^1Dm3!UR9>NAWqJeRUW%+21I1Idbe|^MwgQwXT)NJ>XjjVPJoRQ66 z%*-ies|NV#WcvCLMGRL^>YrhrMSf&X1-~ z_5S0vV0?gWIRrpD!;2FMZ10j5YgMS|@zHkr;O>;TK&S?M9x+&+sL$OXx^*gWI^vc?9nyqfRZi-3L&LgJmQ**_`Q1i*L@Yy+_@Jt#qdX$}n_@3^*V#NJuwI zqXS5Xba&@_d(L{-bNm@31!aD4C0c4A-7bFY&+c z?Sq1jq|9s2MZkBLKH&M&7``;Y;VB=3%%-(VY;g~_h+&OI=l=3K2DyVx@7vl3-k)Kt z4oSo3ZlkxZ1$#1=z%`h8(n+JG9FMkYr8wg0&M4fyL4o$#yEX=i%k+@9hp8de4~1^C zZG#JeL0M;QA<#OPfC6(EBRP2nBOr$$Ha9~v4$XbH?YBY#7F?*sn>zjon1s&Bx{b*` z=@!1#&oH*4G1~p;bOtQXJ2qB`+8ys0r!E{oL6BtdfZYs z0!D(RDSO#Lqt$akylodg`~Eisj*Dx_a%K^Mu9;)A^KL)QpEK^+nsI5)HV>fO1k|SM zH7Y`!*NV5!?FLWs1oQmU+}_qjRfKHIb&Y2zA(Te4TYOFKtdC3aCz3NW8w%9aNK7^d zCqEY7-8>9B4ufi1T4dZ2tv`WVvu-D)=DUX6FAVOWfqC0JX>@)Whh)+i(@X66-nFIkpG; zw0NOmt#|t+%?LVMrawJT?GhceUXmG;+o6lmNz=TXoO;H^l~}|TpIF4y%Gw%``RQUI zX+!QHV1pPlGE!Lms%=AZR4`zFXii$B=;S2#&V)Z$h-i; zxh~-)a$_cAX8p{s(Ut-4hoXFYxj2KS-MkhJ%1@-#Z#PQBk@qqwvvP8NU29ny_sNnL z=BV6LM_;QM;MIBVFevCS&ed{rz4Hbh_8>iQb$P@uw3MJM6tqWbMwlqhNq2ubnsM{2 zO8U}rPaFwdKEskbSm&YiyS>G(e@O2B!2koUD#gJqEdKp4<}|O|5iMz;dllV4`)WM# z_YKyGM&CDbg)Q%^HQ}o>YkG!a7N%Bl#_36FmW?KU@7=Riv*L#FG>=IKr2@QsM^XvO zPY4OL#BfA9fgoJH?TV{7_m}NH1ksP1`ZOd%L4R8ueh=}|rI6IbtS5n}9?uhr9rc zGOmb=v6IMUNm`;Z9+@jrq4ewHu2g>MD8xdJN=?fl8C&73KKLR@zfF;0`Mx2S&OT%O zQ~kcb?)LsxOkNO)ZPjo5+&aIAJSQxRD2KzOK{a^@{_R>*mI5!3PLyS=S9v|=hp!`d3sjn4zN8KbjnU9R`>8J(-bkx}b84q>RuWb<{y2D09 zUV4=1hQ#1T30@-k)wMyw@We3jr$MV9+%dtu=sGEKM-rGt!wL6FDp)1O9%0udvz-uW zodTmhotxkHzH-FitL3C_2tWV7ALS>!&+kfc_1?`77kaSMub*!C#LL{{3s;Uf{JybJ zk#mO4TcAU&vOb3wKcXQVuD0e?K3%(6T`(yzARdE=qk+&$AH^i=duKylSW{-^KS1E! zr{u+%Dd9t!7}M3CfJl;{Sfgk~;a}SDH2ZC{J$LQq=8nH@@~4-300% z-|jFcC|_tL*ngrX@@853?)V-b0{KS!!oZT99X{1$C-AjuPX41Pw$q4ZM@f{^5{)U| zMKl2x+=!XG25&;Fj@OLwX&TzWFXcBly~|Ts;6p+!$7EFW99_xkEuDe57p$bX_~p*X zUBl86(SBt9%(YBkJUHqPz=>>zpH*!D$vX#^Nhs7!QuFX-}V7d9R^=%@uBfI z#qJW)joocwp&0ZS?CXnt|NdF%tyj&Io!Qrl3YSWF-J#O`5k!DDBy|~C`xZOM3~8$! zKrX549CrP7wBCUMRJaNmJ*0_enAJVp+c_pq?ohQ|#)UB^^*pNW z&wkjemcd2KHYqVK_-1RD-he!?(XT{ZYuFhJwB_{B@p!XpF_tfGw2NOJNB^1Hu0-I| zjJx7^^(y5zs$wr|Tpkx#CiM0AHUwRDY;Fo!cr_;cTE!@d&ZT2pn`9BHQh4id_C=rV z*2QJVbLo&Yx5*}@uoy%9mRqs3p88zx*^>-|kHat?APE7OLE;tIk z5}}D#eX9E?`<3shuBS~)g6WI={+T8DS@B32kIpesUdGH<W($+N8+O%-G85(b#Jm&uG*;c0(qe&zU^5^L^<;c246A4(*KG8c*u z=JTYPs&vGmJ;Q}5h@1#j1WkL&^MZKI=C=b8+7vmX#R}TSj*or^v2)$!q5pc3QAe1# z-u#ddoI>R7rrcJlcv^E4h@RU-$2936=2Q4_&;YIE#FS0$h>uub(`LgBmGgX zIXI`Rk$(mUBkeo;&(BkXFa5-C6IgD(wi{Hgl7C)mKch^SXp3zwSFpx^z&e@Of|Zmk z=+DeFIjxnE#Yy(tn}XCq`hWQ<_+P^R`tM5nJ%PDbdlp-vF1_Ed8FYwLlP&Zc_VFN; zS|ckyDxJnQ3q-*a8pYyA5ifNO%uGm3|MJCbPy0DXFg3}P7E^I*o4?$tjPg9hSMybs zd|6XYnr7G=?rg8h&VqXOShd4|^e1P4b9hnn`14PA3r8`B@A#tCG|}gZj??!calaTW zNSx!B)ru*EOlE31(_^KlrQR&1)=>}Tk$bJrXwl^4#e7bZ1{SZ-H-de9d_Lsmy?^(P zkfTW(3590QaaXKV$F}P~Q`Kq#x5S2pN_lP1l!{$1NICAI5rdn5vK&@-Z&Ebz2(BTaN!_Sq zO!#SYK{sl@dh@{ZdR`~2bSx~=ztqR)_kqa3usrL4mh}o1`j20C2dsO`I(_~oJr?lk z$+Oh{Sjl0sSV>FsaE7>EqC)6g@qR1@+u6)JjH(K*!-dKsx8pr?EYIzG&Zx4+RbhvY z)92@xu7_jkl6@_=tVt`S=H*RbIfVg@ZT^YKabLWoB~JR*ej9FuF(~ zr?M@Raspi_@8@@IgAL8lD(yNP67gVVFxaD1xyZbvq9TbgbSko;VO%vCbs}zzoWEqy zwjhbH^dz=;Ik-e+jh+$>dc$tm$=OJ!XDark(q+!&wYwMb)>{WIL{rS>IE(tD?No^G zj(C3}#Zqlyej_-~L$ymplvIdzO}(!|C0M(TEK`+K5dK9jX~h^g%j1@21Hj5Fc8YG! zHasgY0uwsE4pialODuNEPDvIu$<2NN*#ebA#KySReTroS7sYv^*vqbE0-O< zpocs5kjv7l5Fq5rZkjradXqyHQ*ET$vb%vxV#dVai7%Ir>8X0#bA(s+Bzarau%#Lo zpMNb@(8B8XuP`~1x7iZ#Sw}p9Y2SOZNUPD!*}rz~DVaBy&h2fga5+?b*qA=#Oxy`D zHUW8`lDs6nk-m#VMRON)v+{nM&#!sb0l|PjygBB^0d0u^P3@)w5-8XFe~wQiaC`s^ zx_EaQ5EOu3B3~6ZM<_}>V5sT&+vV<&`nO94)5-NmBfsg}g`RUOXbOdna?I(gA;t!9 zbhjJz!i#0YKK%-yCb;t-tW!%paKAc#Lh!1I_Uh>lwhhpuB**PQPf8}KzDdY78e<0_ zrYxoK5ma`j6a|G}cBj;c^nxSdan^PKyZDmm6+Dg5Aw`Bfo>K`xw8gd#&V(vmm1b6H zSC{A%+#~Dj_bn2XpQq%e=$CG@3JNCoq70=$qtjE%x#kSHMc^eebN+CYGB#JbQMZm! z)SU44t!oeHLsnKywppj!Ha$bkYRl_ls?W5D@UgBywpD`~6WN3&%@rRP(hU9Xa0JcI z6kRlZ!vI7(%F>MRK*BqNszas;ty1qQbsfg~tcvEmO{ih@S?@%lro`A1X9|<+yj`^A zPuC^Jyx4C8W`DGrCi@8KQ!HY$^f44a9_#5DK9kEZGcY!O)(q~K0q`hyY(aj0^7yy` zhj$Ljt$1pRZFkCxZso_Fc1NvMrKgtGe3nw|(4F)Hg};RpH#&qAc07U_nKm7;b)HQp zB@I|a3eV0zNs&3mi)}q2PQ1O90(w(W2f2dob*|oSTjT7!BE!-6n9j>ily$QhFQtk$ z>Ma;1EC_N(^;?I=^gc80{?QMgFDS3+22KUVr1ab0rdQcMCNr%z&i~VKpumB^1#8?4 zeU(3xnn%wJ+`b6vo-gzW2ilB`Px^icwKH{?fp0p$gA6HIM4b)?5>&mMdG#cbSCk%8fvVjj);PHBCQ}xEJq690)ni>m&lQDJ z^$q&1;+mSI90Ht8O=**sllCD(i8_S_9BD!cG9|u2>gu9@Dx@Pnuu>~+#!UD?)u}?e z=K6 zTxqmj7vAN-VDT-%SIGk>=lf(xXrRW{99Lo(=LX^&ui_~>SlTR)5|&sv{(~L)+hxSo z`63E#Nt)?xGSF-5{4)Xqv=vTX_TM*iPr?!95kD}VW4cQ_p`_^hsa)a$Y7#2|aWtzg zBc{5=58p@SB<@23FpUH}e`!5zDcq(FO-5Oe5YY->0El!nz38u$RFch0Z%Rr^!|xFg z+a*1sM9{Mj=Ad8SaL~CY4h_RmQ@K*B&_AE+p9WZDxK=T};HKvW@OmV)qgHoQNNcFv z&g&K@z*&q%q%5-;+5}e0ZUEnrVVi988Greze2?9TC+mgX_Y9#L{E@==1&e3DPVBP? z+J+@QB@=Ji%I3@E)rlOWXL9fFBv}djHT+T=+HVBUboI@vc7-b{DpU*&DgP66jG{8V zTPTzQ*g~Vklm5+(Mf2?Yr;ny6f8deUsM%d-Sy{dq z+TtekFT%TLS(W0qBfZ8k-tuSmKL|rpiTJ@qEUx19g%+f!(N1w74UQl)l3w=WmoG3SESQ_Qg-RR?{4L+Rk ztY%+J#xSQSS=KAgtSa1ks}REjy#(ce4CNx@iqD^aax89aP(P2%(TaPDk36K}aoN^0 z&`WW7o<^Ew+Rd>zIgbrRv1FQ<=|$xVGwtys4Jb2#GvdG?*Bsjj{tVqmf!6tnjDRAW zXx)V)^PyX`{0o6szjMRig79~@!s`TQ#0lMoa@_9G4&Cf8aI3f2)jv8g@o1e8k`bMw7Oy?VUHvM?Zz!jtzz~ug~02w>DhOmMyX;PA&!X#xQUq=%LNgqt2#hA~#vo>SLQo<}apH-9P?+1sg28YicC4QHgSwXcLw z#XT5>A~v7FpX%TA@3m{aerG|&MJz%M&~72j zvQ_@!i-p7&DMX4Ci*MO|%0IfKqw$@=$cl%NMyIg+Jhl$VNi4HYzgiEo4iOTHBL_Eq zM_F{~-AfaORX`*VuXhWX^a}~~6xyB03Cq6PJ`{Tmwe@)NWPY@+_SCzs?o7}voB5@k z{s93<1^+wd&x%Uc=7#I~d{lEq*GKQUcTg6|_7cMmgEF*|vV9bdcZMVWKFZTOql91| z#bl~Pv1m-%%lRB(081PbCk9?7sPWg>Q*=CYmnr3M-+tEa}@ z`FA$LE2O;W5=(=eocu#-YDXwXDyT!0TZ4f0^U39I4P~l2)xt-0-#aleYOVBkF%mD6 zz%UkL?g+@!?gJ^L=yTI>6N+8{I{9>vcaf2^**jsGWJH$c2F{!hFZVTm38{-mbjXL)JOp#=gKM54vKWo?xLWZKDU9142g zZ>(}sG%?_8;&WRYsv+>V{4Ue>H?es4vQ+Jy#?BgdC|Fh;&Bj;i_ zE-7!u9kKROv@q(mwB^W`)}HYn_cMDj=&($lpH~}>Jg#_nhOVZMa3s2*-he?d{k6oJ^IP0 zN+YD067CGYZ52%0(E_qd2N2Qcyu!&D566#qhJDq%d)6G+Y&|0J3to$atH}A74A>&1 zY`Ikq)l%rEUGwDIH?BLo&ZEu#B}pDGjEt)_?K6OA@-e~982=AzVt}0!n#>qRAa-Wj zb^yHVjn5J2@rG1*uqv}AtrPXEhW4xd2!w9Gm;jt-BpLyiHf2Phfm66`5bRNKb}TTf zvPqx;HVjqBX=u{)RfxA$v_^=xj>$yocmxSmITB0PyEVAFi}Y{9x$vVaYCf$6WK)kL z9TDp%O&r?Am#qs0qBff=Db%*}O)Fe{6|X3{+z7x)iAf%_B~5s2C|MPi-uR@HpS^?i z685f%-6iXuB#A1JP(DbXOquTBK19?z;|BmLC{1_>1Iu(fP~TLM<9saie=7fa;%loa z=TcNYwQ2}HlOjti9%2p@K-M}_v^#qsXnIQ*Al|SaKYj??fM%615Us7!q4#geYip?> z404vCjRq`Ndk+%4d)faa&MaEmg}Mvx8R`PxKwMX+Sa^i?{vHPJf%uR{9%g=MmWa+C z(g0f5ZTfY-;iJm2#!d2`A|QLr{O8kS0-ru)&ARH3G!Dny*+1^#)PWiy{@Vz^|J{xUj6<(m*%Z}Gxu+RADSz9-c92F~UJC{k-dZ6@m|k?YR27M@9sU~=yr3cXu8 z6%Xfh0$x7j4iuy}we;niUdk@k5;Uu7?1oJ;yqulN`1oX{w<;<*3J5MzSefck&JG`? zEq4TJbMw`@F#9C;UK$iiXlDo3%x@tyGiy2{>sM4uun$e)6#>kvn=X`%&Lf)2{MoPK zbi5sYId_&t{DmUjsCV%V{^+pQ8Nn%pF*W_+xPcxmGq3jn<3WXy`b?IMvyGzg{nR=2 z5AE!C01>$0GMS;$1&GCHBs`Dyf5Bi76)(HqK=CuQF`uy@ncaHr?%`qi&&l#Hr`iHO z`2RIWhgq33HAq#oeYCze7FyES<%Of`w6jjC2rc#duo49KpzGk$KIS79qQsFVWh0XA zmv{F1rAL9y;OKRSv6$Bt&Y5!7XNQ?@R7UuQOd8y-?+Z)B%$IH43FrJ{9%wJ<^C__v zt`{d4eQ~|f%M}_K7rKc5uS~^N1T5bD#ZR#RtC6^vLQ{>kzE14==67oYD95~3$5)f^ zs~i8{vZzNbn5?99oDY#yX*ds=gvzBELUFH5i5@?uV_(c4;h0bJIo(GZcxG^{O|mkl z*f{e6nl;@SES4t_Ov|gqVPaMk4p%u$c&4mqBx#>@)i=Z~Z|FBH6NQ2Wg7IPX0bvB=C09D&M>umAv@oeKGYsE10#>JKppZ`VI zDuCv4{E6*WypF7);y%8<@l!ks&e-j`ZBH>52!D6y>}vK-wc{tngYREz_c%%yDbIFdAqdk~lra zR9a+1-l!QfSjal$XSUg1pfG_!)w$S{i)iF`NnL5kl{CUfIa=Oj_1<&e7r5Vv?J#Od zi=ZQbTZC(?o_)zKim$H~l914Pcs||dXtu*nR8kcnAgIK1(_E#kF@b1Dz7)?*ullPfdJ7)aO5D=hWYy%o;a3Gs&h z=;>h+7XFB?@12X1U6qyb`9U>SQo&&YI!*%^)DK&rhHc zb}-@ek!@;rON#wUr@HLzHBedk0W;OE)JI)#B4TkpL)pY^=VhS~xy&0haqA}yzP?5; zxIb*pJWd7nnsZlLw@+_h-c{5mHyghlA}{6jJiayTaWv$zbv8TVo053LEY*r$nAjxE z+X~<0tI+R2(J7159#gPAQ<5h)*(TNRdwKb7j=*5@PdO26!MQID58U0|Jw1vA;;v+* zqeEBfR{HhZ7SQDrls&%JpSNsC0N)nc4RFVxf$&lQx_X+FshTv|Zt(lJ8J#D~l+>JB zDFD%s0Z57X{~;xfNCT{r(bJ%PD!881?3D!l>62Z@LQ=jil*HIy-s=&YwY7rigkx_9 zlduY!W43b`f!-~{PX|I@$UE5-9GQfUaVOjzHa@0Tpm2jw)1~im5eA7n)PlNA5h|Dc zhS`IF5CJ6(_C`8>YlHN9at`*Z*U=;yoam`bej=K#PGOR{e){qKqB|`tpMja7{q{cL zr&@={;2;ZcOit*cB!6sc;E9f?^=nI>O4Lib?c(xg5@0XxYjk*RSj4SB-)5$XMRjv5 zFeHY=lO=M3#1wg%rW1yW$G`&&KK(M!&J3eA;c0yWyJn|gW-P7y!6YDRS%c# zmJlgy#BpTA*V}g>-Te$+^xYtSnf#YMAceE{ecFd?ObjveppCtcbb%_2wPSgLGANoa z76xJ!5(=R>%J`OWFnu#f;Gu7cmnh>Uz#WWd1m`pyrLX|=P+WQrfes@!?n1HEkTx_r zgcI;iT#BKPldQMo!x?57$s@a*b#;EDWbyPef!w)yQRB-zL@a z0dX~9gk&eLncW^yxGA7uHV6=*oXKxfpuoysIVk#LdxOjLOst{+X>I(E7@Dprh@f)O zGdAJ2AtkR~)xw)+dwWOEz=DvZ-A1_=Y`**4?GZ1WSqIqS&Ks#Sf=W$&jHAt6qH_}y z8@rMsN36(lmEH&j_=kV+?NKlhF?g0E?^CwhQ{9^2dzSx}09yb<_2}I<+*SLp3;@E3 zo2AU5=fMKa>49?s&7d&729T4m1UR)`59?v|r=s=0xr_R7 z;~7F;Eqi2br|EXt;zb79idEP~!K=3M`v1tLus@1g3CiEYE#M~`2dd7_JC^W@7`S9( z;}p^XmtX3#LrgHgQ3JsWl~TormTfQCa?^FAa%WVLq6X1$;ZHTt<;$#?i6IR$>#&=* zYa7%{U$U_M8LE3e)g%kHE#a3k(RwG9>*|@tY+}*o-mX068&*&;)GD`iuDq=)biSad z=A7g@O9N8m)2B~_nJDq<+0#>J`rxaz1Hh-TG&c_*jDx$SbuO=E3Z3nUZ>>IM1)|X; z%1h+yeQ=CC&5%5iqJa6=N_B^q0%~Ucm0TKLra!yM%u}Fu0_hUxm z2Y-=Y@f6H2cS-q*&BMA`F0(S)oRre>48$A2?Y2jkLxVNZ60(>jfjq=xhP*~q(Ixw_ zL`6F+Y<^bn0atxUk0%@z)7N(W?3=68vnG&=@s?f5`m~M!2=!?2`cFA5CEil@N3D1Mx&$?7+kO>C`dK2x8LZLVai4yn=2ylUrbB{t*)=t!aZ>&UIGDV4w2uc!)ynSC z@Ry;Zb)*5&Kz#fPX1>`c7pn}R;Gv&GdQw+|35SWEdhUz0H#*U99A6g`U_V%MG5{!7 z%4rvuPn^dNcqR*f0diGPyQod7ThPCP1vFaT|E*U5Lh|W2Z6%SDIxHOh=`fvkH+L$g zsA59rx2aT|_mGVaUgxc&`6n%*`my96l1 zH_wJg0rGPZTdnMlWu42R(15gkwDu~Q2nv#`@=P~-=ajbB&&?w;7CCgPq@L39IezIo z7TDTJ+rU+7 z?m(eA)4DI9!+=Xb5;oohv&p$}jUimF!TPo<8N@CH2DvAoh!}Gg{=gs1?9Go$M=YZg z(nTOXpy`l31`E%n1~ElD`!AIU6)mmdkWN%bhrF_yT1`W!q9V(?cf5lBypmw*1qk74 zU|ct<{uwJ5RlTEAby&AQ2mRQXdMj-|AUdU{U-`qq6^kMvh0+)FSV3l<|KMp{7X;&z zz-d^12r)hkwRWSl;P8D*9admw;m9!$?J7wZ78(EHQ7|3#jnb4e}>|6_CI4}qpvp)C*lI}%7cZ11!ufFY;@U|GC4 zc)*9oVWIOz5n%PbKU;v;vQkY@ndz8Ay$CX$ve2xYnCUT39!L$Q3BMjLE^F_y$4n8!*O!tx6A zArRx!DxIIn98;6FQZ7ZR=a-n^uK*_tE&z0CjG` z9eLVvrotfDP8jAaN%qK-p3O~6)D80myGeGYb;{)n6)d@CoDW$OctE{0;(mxRijW7E ze}j2cQVlAA6^X-l8_DH={XY%T@7Dvze2tYAP5q~^(f z!c^F`lsL__O}iG;*H#C-#NiI@l^PSDUsSkN%H2W|M3ONM7eru83=F^^uyIyaW)t@i zk5oPu=|u6kxy^@sR^{93wsqc7CPpog$i2(BX^)<00()uRTj_Ih`(+W+9TG&bV(9~Z zjpxjDX+FvUl#wEHj_0UJAGafZ1N?UfW_~OQEz0q&xk>Gy593^zas|>L`g57Ke&lB? zjb1m3-;8n&7T;sx98RNu_W~AMD^j2xTkA46CNBz_w4U5WH34#8q3=*McOAM$%-*$A z;(yv9=Krf5ezZ_5E<7EG!YTnAfUtf;d8Xe1E05G=#k9j=)a?$Q03LbNajO5R8+r}K zS0oc`6;x_lyujG4y(_@TzK`U^_#`@=U-(6FR|>P(2m5*1CWoOvRNGhrq@pXO4TM|* z!WA0k`l`GMq_HaRFoAx&QoKU6aE3ECc}AHBr zRonL~jQ{ylM++6l1(%nVAzg=%zpJmm7og&eoyxPUeLn2#!b@*LqdNg)+B)ra9 zT&tv+#rZ!CBgZEvscmg-zcxdCk5}JnW_^n$3Pk<+tPx7<&>L(r6*=zWiY$7$zxb+-nI zyuV!4pK1!^^2iZfJ5fE@S9x-#z4>KbWc~n+p&bVW&;Lz4>M&f2G9tctD ziv<~C8@Oye?F$1&&VD>m;7&-+dYWW|*c~s$n-W*Yg0J$`ZXgbdP&z5ZiI z@t0#s+;IqEV&1%%R$j}^3*R|U9=WuO6T*O$J%(ZTtOMt~0=MLXKqm$-w3Q{&I_b+0 zowB_FD{m`^w6jY0JpGyj)*;h%FhYQz5@d2!G}O_G)TlC!Bw&f6zzC*VWS(b-;YK>qM}z>ATJg?*viA=;&dL z9jQx8o6=k>r>5=QyhoG854XCu5@OrNwSAR#c>>QGN*Ks3roNwD;$Sc3A@Y%u)+24D zR^UE^5=RZKMi~+ML6i?uTIRo0i7qHVYRkD!Le|c><^8DI2o2hLkeFBj^ChudnwdS~ z11RCqw3AC}etrO8hEu}+{Q0w7RPp5gb_b3BZ7&N~E7d2{?~k({u~89poLYU_npder zne&j|nyFy5H+35F=r@4UK!4M8F{&C^-t}0Ng6bsE@+-Up?!~7Ns<((RVz+!MyuE1wdgI0i3C?3M0bZs^kM-=b{N! zlrm2&>jP-70Z&tny4&m&3V7`7_8W@bQ zlPN|ZE;J0uM%;u#4uPzm zA%}5@`=vV~nn2G;p^B9#?>S8lV`l(61pc7x7f50nu8?=ovMe9Xuqr>j^`62l1sqdS z4&o!^@y9M%E+T()gv8p%_>hdxhd;NNcx9IdZMNp_o|@RL$0g-^se}4mMR?DSk6%u% ztgNhoI*wMHgq%@|LWyA-=0OW#61=U=T#jOB=B$@OdE=a_`Z;Oc?J%XevdamJqgrxe_cf+Btjvu>_1m``;G`j4!p<5VRst z2*NW+n=()%E6w*Kng+Lj*flxTnU3UDwQ!(-1Za^m5cGbZ7}Wn3psf&e5AH}gD)iY0 z>EoEAN_Z7r#rQR=}2(sCK~rll!3VyQ7+7Mc{Knf5Fhnxwg7)yJ$=9Dr-ah z?E9-XoW_40K|~m1uSs+D;(iU8$M?fCZ}&QCWjeT%7B?0ZE!kUphfElhYHX2^TLfZr${1+3S??MUp#^}~ z%M>jd;_2A#PC0y3tt;@1Fq4P~Iq)z}YQOyu-wXvTHaeO~Q1CJEAge(aAduk5kP5bX zuSq$Miiel12PZD$x;Srz^xFQb9FXfs9o_NHE*!*j)(@l8Y>B51A!`f<<_ITCT!Naq+-Gbw!_j*P+~&WH2%;c)W}sbeqrGGpElK zByaenuoj5o#3yaGZFcxxflkiCSMv1zNevrrO!(sMp$`!*+(HKXzlI7o@H>w>^B)xd z)G_YoXPrxO?}04jzaYVSh}vVS+`N(yjMMffn_`QOy@nVPnKC%@$1$Ug*0cwZrMdBAU)B zZ}Z83>O9-U(*G3Ro%w*UH;TZVJDoRsGW~Z3J-u&6ov7>U_3zd-0bM`>d-WR=jP?)! z^VaqghdS&wW^t*6-Wdc@`80y9n4(&*MYymr;YV-J;)g59<(-o%QNk+5fD>vbGN@-} zI=lR~4ky!*3MwLRraw#5U^F?-TwX|cKh&Ppn{R1y-!F`u(xNU zUk5Bz?#P3!t^RQCdDWYR7TRzz7yp-=zf6J2gAeTm&;GSes@qeaq(Y~eRRm!^An8=I z;DH38QX0Ls+9CO&WKBNp3Jp~brLoPHfCvdl{mp2DVm=!SB{7R3alm-Y-)gm|orlay zp4~mg;4Tzy1uhZT85QC)f&zq!=Z{o+?`B>4#zMLvIH2~s#g^=#5TX>bnd+0Qi`nd; zdx(ATkNUB&x1a5b5v|K-qorY^Bh58WtAdp2h_h#FUt8mxt!=PcG4jyzKhy{nnq&Sm z5CWxm*9xKKB1!irFckk2Y)vhviy)Lr`{>)}A@2z=l4R+vNftY3Bx5%Vqovdk7nuCB2)Q%ur@EIwj>q z1seR!)BmKWcc;?x>{!X(;N5ZkovIo@TB$0%91hjLgd0QHgZnIb%2nlGR|qFF=J`BI zz~_&0G1R#sN!Hi(>N+*}I_`c6ndKmd;J3hrQs20(pl7z7v<+nuhtBF=u1EI96?Ms``&F!S9f zfq6e1&5H9~y}=cLH$`_t#JV8a!8&30|7Pny?|HPyWV!{Ml0e)~@RICj0XxImwJRzX z*l+-v1#D@kKDJ+;p38SUOv0)_HGf)@>)WIU*R!3OEL%iVI3T}U$k4*Pbq9JQw%m4X zo7X}@ea9x%ZOK`*S{wSIgMFq5%Ce#zzu zdVD(06{Gt6R+AWlqppSrygUdFv;c2%IHaCp{*`=(`~7vMKCAK8kuBkNVkK&dwR@>X zZ;PiQKD{)GMF_`~iy}0C8=6HTp~9;fe+nzx?%U+I@|a(rAVoR& zpH?5?_x1J3zkbbA4B;jtC#OX-jDi2u$?LX`8}^!?re9cCI6OQI&&i>`y}dP|C^(n# zAHqoE6tHQ9dt1_oyZ+r_fcaYihK9G=mR*WWSCd9aZgK#(JOGI8LXP@5GbMr>%$@=y zsAArBOU`ZYF3_89{x$UKqye2ulttdrd6 z2JqULy&;7%_6BwQ`b2HO3?Xob(5?2oyr{s1`!a~egM7On#?HTzjngY3#v$*yZqn)W z-))>;{*fT35!ekPBA0V`+BRY|}0k_n&D5 zM3(TO8DLZ-5UA6sC8Kh2bm^wCpyJ7k8C}w!up&?pdurnvyw)apgdkQKv6z?`a9c_l z7*S13O8StNleFR_@V76kJU%gF9tVscsj94u{Hxte{N(35co4F4m2POnqT{|>&8z1W ziy<%9w3NFO;W~aq*?mHQrNSpU7Ew(bEg+RPF`7g%{i z{#HK(SpYUcExXC<6|(p=>b&Vu-$sKlau~gP_Z5BUK*;T~Px{5gQ!&_`=5MbF0d|yMC3nr<8+&G={kpR7|WbXCv2l_R&Ry+ zhL-&Vr@SqlGz`|3GOoTa1jw!r#bW!PwgO9{f8b$)-1Z-Ou%yj|(8adRls$qCoHa~* zl&!G@EAw=Cp5w zsJDU=tx%m8Sim*g^u-J*ov~?8?#L$n$8Qfq-c*EHF>D*`Ae%-0V47l4=dd==Zjv!o#Oj0UPoI3Tm(`X`kpoPhyvr#j4#f;5oxea%vUe5l3EcGI;A|5(!D z`6C|5fm37;$<68tdUJvHJ zef|EgnnUzb-E-^SQu3e3f}Dl6n?CC|r@z&JnS6F^4mP`=wsu42-zdUdZ+7Z4WmFDl z$v*<;)uHgT)H=i9`((j~bsO%8=R#JC1*rZe&glyVhss(HYyyTA+~M_|Qq1%aOJMUE{+#?ah?(T214Do+SN>uEv1cdhMlRLfNKBEC{ z%Oc!#aKPd@FDKuI<$8i+8iVMxgGyH31#pa9 zIdad#Ga`>|sLjGZX9Rokwcrtd==FT(PN4aWvcte(Q$LW8rDo@G4rlo28*B+TES(b% z?(e-x;ZVOcg1cg&;~TYv?p$G)$1vcsi48kfh3+X7*2(!n-Wea`BUsPCYB0BE8w>st ztH8!tMFkrKUK=$x=!umE_UvQ&JU4%N#2jGZnl~zs-hw^$wd_4?d{bq>mz+z zyG5qDo!1e6r6#!bTx96_giy1>l9c74E3p5Z&hepzN-1uH*(4iL(P~2*2Y+7&IM+B5 zE&MYzJF8r90o6G1gBCaI$l_JOC!gSeHjVr9aF#CSsYD?lRJiG?Dq8?J+4%ax!{{M+ zUve$T$LryqUvepdiR($bdAwcHjV5r#=!XvNWQFZk6omdCqXD0NH>lev_yDuvz6m)w zn54a=K<7gLuJ$zK9g*K_ZVYYfcsx2XEDBtT-{Rhx;vr8X1F?wkGs%?ye>{C>G+d9@ zHKGSeL=8feV2oa(w?vy!Vi3KDL??RhBm}`2q6n~1{yL0O2M7jo>}DhU;V`JKB<8A zQI3MA6AWSY3}qC`!%X%T+g!*D6?`KI$4ELKMvC)a8W7rh^pN>%Jt=8URze5jSGkia zd1y$B2&pY4()SQCWU51_{GTF8vxsYbr0a|Q)wP`{jT>t&?>ka!@x4cBiwQF!BG14` zDdl~GCP9z+XXS6SSA3}kR-ztlaC@duBKDdv^Q~SAenGt`->@_0_PX-ac{PF9zm{OX zz=twNQuZ+#Fh3Rk2bf$e)ajtPl8gbePSaImyS8gcQkW3@{_NOh#)2vo`2-t*s<=VC z^G0rCAZgH{7c?_Wl9?ZyMY_&Ix4cFfj96t3-t5kHVvBo=+tl42BnI!+S-sy33_=1@ z8`nUjQgcG=NlaC^QJK(hIS$2X*~8K;N7aI4zcdO>@}(Tyj~cCJYB;RlOs?~kp<$UL z&eQXJ5S1t;jvK1&XpVJ%CU;XO!1 zj4Z=*J|JhQd^aKGEUh(oAx)&&r;9gHotti={l8Y9Df)I?lYY2fzCGnbu|REMaYaD` zhQ#)E`=u<8Vse(?I=$60N53CaEi}&IR!@&;pgV2|L+>$LP$NELkwm- zpdK;Q=EqR$A=L@r+!fAFNS+~0VVEV0E8JuvWw=;>Q{KKA+p<=Ly3nA&pDB@L*?cCR$PV-ROf~x(8p+3<%6@N-?Q0YQ4B2R5Q1i8xMU31aS zPGk=NZBl@++ju?M4k)5$k>6Xtrpi!R%ryGu} zz&0BoHVJ5MmIy=wBcZ(`pz#WSoSd9ovg3#6^dR`%hFQP#p@11dncBu|s`;aw1kg9H zCnkoc0eM8KdEl1zTH+x9#R}o}+6LM52tka_BnDzw z52&8IpTnHen(p>PBlZ_i4pqQ99h&+sp$%wkrGW}eDx#`OoH7GAJ_u}!AWyP3KI}Q# z46sk5YQyfzfRHS7m#D}82l?jL0}L&I|6+1^ALrsi24@$l&Dxs@6Kl+7Tkw*=hLp`s zMlD)_x}3gcFKB&B(Qe``+f^UjnYajVcMJpC)xWQfNFvLh|M+rj3Jj(r97V$-o%?3p zp``<(PR}Mm)PSKtBk7|QdGqGRkm79Lz=^KH-_%?#DI0!AzPFcyDjy`;zr8fH{JzBL z1LzTyUhtYz{{0JFFhH)6#w9enkQ2=?14FPXGv$CA@)e+@-#514stQ;Cw(_Y}2iXiP zTp0i^4eEHw6kMcw+4Ou&IjmgIg{|k7y7sswq{8g%>qne4av4Ma8DrO;(t!#AEY)|xBAF2#m zwQtbg$qJmt!GInrx44+Ip`l@Mf1ik)oLo>?*yN(=Z9=mLvq0i(OH=tvtZKbST~zlt5V9!d@+)Jo)t~E}dS8Q)c7y z$ObtM8UGt~1?QPLBi6HwJlVaZFk!7+whA#Li;*Su)fQ4uIaaa-)DEO*VtqD)aoc7u zujJI=KhR?CKR{|M){hnWX`eKKh}!IOGQB6soG7`b(`+$|owQhS(oeIC(&UgliTlgB z_+NcXv~vDwdmgu>E~XMRcKp+#kVMwZ<1-STynO_S61HN< z0Y2|BOI;)2`}4>vucRU`?}ex00I!zEaE} z)F|Yp!A&ldBy%0r(c4y=zxGaVf&pK^MX`E_2E*kl2#M?C;v&Gq!}B9CG3@dZb6400 z&#+KDf_?qv;qem<*+V?Ue1rRQfZ97eJq-e2s^pXuV>`Pi?GZEFrv9()xtb!qKZ%xj z!bOEfi+|ghi~J7 zr+mB8=&-peZavo=-7~#ZFirO_Kt^RCKip1hjtZxJeK_$lA3Hm`p%g zR55?$(Z7e15|E@d8)`w&ei|K%^X8l1C~F+doH~<+8t{v0di))CLAZR-^5FchLha-K zt5Dk(iC5+OV(24p#23z2{d#oIu$8BY=`}0$E+jVfQVt2g-L(N_wjY#L+FvCz{(!y8`H%g2`MzU#SZprY^7OZ3H#-7=fKx{ zZo#o)O{0t8F;4~h;X;5CZhx~-AZKBw#GnN!;e7oHYo7b6|@Pe~UCT0X~@2N5_}+Q)iy#kGi4QP^_J*sJ=%y1!yzGLmLym3;toIAa=lFIt&3 zb17O?R8-_35d4_fScma-Ve>l+e<6`whwVJhfPlAvo*#y}(BA&2sHo_#hNagjMbo_n z_v`*Cw7_;u=v=AGjl0)4Xf%J&P`zl=t34r=V@WZ`EEt0*WWfE z)!(`&#*8g=|Chg>Azb)a8r2%*tmcmTg>FP*H!sy6Vz-o=+iPDYv&f8)83`L5lSTN) zRu#pt*$!o~S7Jg8ldj1_2E{^(Kj^N^NN|{h_>*QAmbG-qyuP%Z|3VG)xslkMEUj4= zA>>c%Zj@xe&8=pjmcKpn+8+EVBB#&SW&sdN~krFXwq^aNaGL;xM-RS^i`U|7nTVA z_=wqN{`k0q@L_*UDOC65%xL^At@r6nGb3@MM*wo9Sv%_V7Jqbn4%P-!jT>|R!;vSg zl=4)+xUjJOd@i))z~n1nw3I1i1ae9!%TQV6A$(?XwaU{-W{`!UL=~upt)hXJ=jlb+ z@Vt-m>6xZR8Lm7Qb8az+k#sJLyVE{`OfpxE(I4ei^Ny5`shF7G=KE4LDMEl|mr?ex z=U=?W_k5IxKmy_qlnQ3OiDETV+RNTX)@*Ku`kB*TVnU)45|?HS5hk0XOqbTt&&FRi zgfx=b4n6eY8!8%d0-&|cUN8f&`GXV$egCa8>f9;zp9O_d^@C;CsK7VsoH<~4&+_!}-4pfJscepjeLR!4pM$M6 zoskX{I#zVCVO6C8)o0&{CmH0{MQD9G-bp-{)JXAKfDsrbqm-*v`BH(sF-cM!VRoHH zgIZ2>)qvlO9-`c+BK(&3EMD*#e-+o)K=NC`p?a1de566!QJ zDXL1o62Lom=D!79A-o|{ET%hN^aK;9x!6J&K11wd{YQ9Lv=t@J zMn7jIMoDh>EPe3?>!F-aR57S4DRR)V(iYAIS;WuplUmy$>} z$O)9V*ZZc8{W_uP7&E(=r~8!u6PNpxg%@8RMX}P{Fq$H>or13!3bDuO-L$4bq8pf6HnjYmXr^#t1 zo3Xw`))>KBO^ZAl!Px;L>eLua!pbuL9>?3-&bT(-Cb*ECH>r2lUzy(Jb3$d9@z>Zk zr575Q8!YJX`LBOM-)f0Ve`I2@%FM4QEU6Ismp{q%0W8cA6i3g^{fwKNd(v?hTTL^$ zV`Im*vwFyXqM@&j#6uTgF*k(Jlg0wF!v zd16?bFR>lf)r%Vz9I<6_IVH?mjb-2%{J-4+t8AI_joiX~K&$K-8#Mype_Q0_o%;%> zyf%+7DpvtRH)B@T!I^pozWMpo&Jz(6H@L77KsMRde(Zd zyaZ17+3LKy#w%{Gd9NkoJOoLrCTAfR02?lqH}vSlJEPwvnM+b)9vN{N+d9F#WT96! z6xC>69T6vq&Ed=)Wrs+-ai)u&30>53?3VG1U1XU{Tl{?)>@{NWeB5-JFHHGns0mXc zDbV*+&*?k;rS%r|R_PY^X6a{N;f?J5q3q&#km%~+=1kX`z$IN#dUKR35=Z2K;;$7MU^{`uY{j8_*Pzjxs_lo4<$X+6na|s28;-cM;$NjkvQ`*=c({DYbi3b6%=^WuGhRFRivNLx zyNmXf+XU6&+~qIgn3y6e0>9|ik5|n~qLJ@_kkO8c%e}8zaAPH(2C=l@t)MZaO`@U{(#5$ zUz_X4p4r=c9$=d`|Mu%sPDuT7D}9MLFjslvb8-JCrqFE1k6ToCN)AIC z6aQ5cZTpU_U8oMTs1#EM3kUGo8LTmJdrBAA$DjSRRzXG{QhGzRbXD@Cuf1|e^j#LB z4213sfJ1snB^;4&&u)W)Fgv=smfJ{iZp)VVx(X{oT2~$X2$|lsE3VztD4-m`IH!f+1;6VWgF%Q5UDsri$f|~_ttb7`U+1K8E zFl{XC@K*~^lLA19!s>xbjLZ?eTvC8fR07Q2$0hlzAnN6Re&mPQu>D&7< zK{{bmkKV~qqWcsR>lvODNucZt0_pcp6{KEdNnv(&5S3Vs@sB&NoXtf(yxB-~5BU^A z`3_6HCT&NUT(RZvd*SA*G{@`n-7%xj+GNk$b@p^69=!UGGplTtKHC~RR!egNYsB#( z3olA3RjsFD?R}O~sR<~BaMQfT(QgLT`Jmv4!Rg+n_yO^zvpR8he~+hnh0F*dxAmz{ z2mJi-&(I3lK64{-2ld!~IhwcO1-4>tUr3!zhwsG#73F1F zNYNmSP%MoN1MZSa7Bn0lW4x;WT?pN*z}&;OT|TsMvzm^w@$d4msWM63;5?fCjo@be z>(&k?jJ}lJ(qRjhFnw`&JCa0cp;fB++fhQQ zsKnvUKGgy#$K4{rvO`iMCnpT~Qqfqjr5iX1C-cSXEu)=m3Y%fN=_IH&6NH$lR zX)Rm*Lk!P{JmZ)b;5_tG=>%9~;j+)23T)wztyNf-xHk!y@FJR{spL(y32tJIErW`C*OO*tr_yP3aiiw1Mj#-Z)AwZlX7LgHrRbLhvRloW zidJ$%SIZwWNXxmpGkplWC`@tneQ&s?SnGdL?uU%>{29xGz-Qlv7v-EgJNyoi^?Vu- zCg=H;^SL-qD^mnnM)WHu@kSK}rH&|7(H!kd>b3x}x|jNC1DUD}Z8v;AjNEoPZFl7B zY9m_D>x%3RaruL1p2quS_1auIc_-p1ZH(*<+u;2Hg&26uwz*NP4Jt(?JUa)fkzD5D0^M`uI-`%>KCf9HMF%tK`c*mkMw{8uOrLBCF|CEe> z&@;U`C}*)EeTt^{eK@)yZZ!LzKvuUXbJv@7%Mx)Apj8RNSt%Pxp`g z{R=7O*piN(XO4Pr+Ws(5z83$Pu$L0y|M=JN+-EVqep9ZlSESf%j$AWrD)`w0KQ|2@ zD|#0>4V~%F8aG^c&fZ)e$@4;Q&MWun{(@6@Y?uaoZg}(C$@kkt3h~7)n4kSzTn*>5a(@B!P^Da zbXF#%Trr88!wUlC>X(iAUvn%$nl35S!)GT^b29!}_)*a94t)|;n)p|_S@^h+D6i1j z_G)c?-~!zJ=d7PdIOq=8G2Kqq02%DQ%SAbE3@n{)jr`8bYs+RA;`*Z0a(veLXReCs z=vz-hr4iP(l77g&`3~0~9&BMU)gkUEBQ4=!acnl}lM;apg2?;a1i`VlEvV!BI~%9% ztMbD-{Dx6=jDc3rQ>P|;uzo&<#^bofNXx5wWR91|JnTv^=K_mw@hLts$Mw>9Y90?ZJu9CIw{52R{@AdRH%_MSA2ps|TSa}3 z%Wu1zyer-jMx37vSNo=!ha)qFOUsz8Uf@P8=_^XcdJJ#~#zArwWrE#Y9jn#VnH7OdP=o&$gbr>BFsyxB;r7H>#&uyulel0H_s z#AeDWCZ2ewNXz_PHRFVZ5;{R8Xzf&ZHOP0PlhCZRqPTgFGF4R`I`*jea{f4)S#c)n z=%=FY!Au`Q$eZ7cP?mF=UI|!=$#BY(;|}5I@y~W9yVf!LRcwZRt(BD?PoP*y-XXOh zMpG^}!qvx)$D6XuW#ukd5HHkbH3jY{7?RF7k(*pP&c?9EFIURd@J*Y*`F(ozgZ-26 z;zjA|UU$q0EjPtn{jpd`CUAQA{fz#+Oqd#Zfj&2S-v@A;UboTTFW)}Bx7F}E7v-*`60ta=#oll>Zl!tqN&*r<}?VSs) zI$oOxK*JcfdY(Ss*YI3G!q1F@bsF2pAgzfXfN$HgosO7gGvbRO7 z8)Z<3tIm4WyEEMP*Q2NLL3H9eIVAPKMd40aQ2xE3iLnVg3r(3D+qL#59+tgNDV=%6 zaRiDROuq&j+!P)AKJM**;c|{_KV4HDa>We}4t!2cvrgwW#j@&t-bM682lMO$`(=UM zp1mh6Q)dJyr!sO{FC8SJ+#Zd z_t6-}_KL6RAspOX5!3gC%WOr)2UGO~jKMA!fc-X(=KgKi+$W!oNHy2eo82fu`=d|P zwa1282ld%sb8wKjAi2@Es0-u_=j%0(7;dhr(GhCwGwkO zO=r$nAD-Rm!rWtCj6LOr5;Ci3$|IC%c>OCE^Xr>#mPy_A#snG&oAKCO0_&%lM7F~a zVh-R!Uz&M?qd!{O6wg|l&c}p=EKA|*2pH7I)M!goEnGHDd%D(>S)d#)FdzO2u`l`| ztcRDmq+2DP{}UJq;p8xr1TFr4ACxmdwyw_CD&|f+v#E?JHQdYX-+T8?&P4{-|Tb{J`PC9Wy=MsRiMc7@KBJEiO6xY;Q+kUUuLp9t!Mb4R!W#WFq;wjRHt5he?gS3<>D#M?y%4tTI`{qB4PUpM zje@pwQ?G+(1TNGYQLi2^bM=+K$41U@E8#(Icv$*nC6cVqKj3GN#-s(6vhf)2#)k_v zO(pEbb?F?R=`VA)bH5lt$eNr6(0%{86Hvlm^k<=lLdLjUwL$jD%xz`KTs?2^2bUJ2 z>Z-}5>&UG6n9&&mnLaUb*`E{SEN43rHu)hLf=<|B0@HMsdtVg!D?_vWMY_NQv9rnq z1bS~K0#NQ&5Uw_H%0@*~EqsJ|;dxd}L$QzqdL0y&agf?xGHP!|^qNEEt=$UYrl7ba zcD9eN<@clhTet6aoYQ0NYf-dMqQRBkD$u@b(WU7>s(mE~9U2G@F^4s|%WO?!vttFf zT+EU3Np%lAW{!o<2cIj_?!19t4cj8CG})LN)dY}(yF8DT+c{6)<@3SjmC%Q~9^#zl zyQ?>_YMPJV21g-VUTPUAGd%SVzW`zLk9iZx#Iggjn2Y&>;4Bzj;{dD(?t zDKdK7W9DLLcY8?nc2=$v768-Oy8s4&|BLD!NZd;im+!_~z&)K(-v=LoVyB5B{mD{O z9DICyhdGcQi1-D} z0S7RH0R{am;6I(P=Fgu8jyoq}8@XEeaMd(BOwW7O z1v1tBVBw1}iYrp%bfp*)$Ocn-ymkOJ6pL%@IdOKX5SLypscAf8W__!$7tgq1g5kBJ zr`UoYk%z%v?d{Que^hHAd2?Z*O=G;h%_S}liAJ*Q*;txZnUm5vYmJ?de;g~Qg-;hh zn<{)TWA~5Q?BzZVcG?@COHy*%`F7ti$=tf>+6y`pi1HXXc-j?eGrWcoX*vprHC;wlZWI^e6@)$%~&OF3+FKQK4K!Ftq&HFc!+F%xY~#=fu~m#oqHPRK1V{D zuhyyD^G}s-L2fM@7Sg5 z&qPstEnC_+XpHhtyyO0|_+FqJK9JdW8Nh5n4YeX?xBaD!OoQHYyi`yD4B=*Cnzj2B zm8K5fCr1scg(KCOi)aEabe@dcs+=g~5-6QT!xAPxzrSWQwNM*-T&O!ju)`X|9CRU= zaJ=m7`@fhp+FHRL3F$!LD0t=p#eRaB8fm8DM2Qp&CduK-PnqYGa0&LlW%ORrNlThO z=gV(gCFW*BRm@Q9wBy|bJ7M{0BGY7P?Do^pSum}5V;>ilG zO2)pj2w~AkWKxRbVTsdgdJl`K-sR~z%l3rCCY$HuQ)m(Ey(m=d{2DyGX-pC}z&l|w zdCO%z+d$gc$;1KzNlQtgA0Hq80LcA9-D(pnm#T^?^YW7~j*e4nPL0dUCU69TzB(Nf zn}}-2ERnV;bvxAdI-lFz0c`I1sf~~B$;k)uR(dxP@WfsR=BFNSy&o*WfYl+y=8CV~ zX}64z!p+*u$Z|0?BDyMR*usNL`1?_8KyJ~&+Ign8Vl&0T1873RM|6nWs3qV{MMVKG z-b4tIZUFn#jp|u{6alpT@jx5@R*eo9;a~B{8gSdEM)x6W?&hUbNO~BaL*s=Q7QhTUIHl$kN zz6Jmf-+K1ae;&k(u3mhS@cjGK0N!B~hm?^bHyQYwUt}a;8z+&ND6kZWlT@*;m8Vs4 zG;fv5`*xU9;x5_WLVv7S&Mp$!kVuL+-!nvwR;k}R6 zHVt*Bvd9(o#I+t@q#sB4AP0~OgWf}+DF$vQnZqwUd{_a1q8Zl_a)!t@WyfD%fa{yg;z zvIV#Gut_XWB59vi-(e)bp;ddFeg6|9AvJE)qTu^{NN^J#?$?D#+J~EFoHkhA=q-)> z{2gJtN`}Be9=fV~kNFRLJQ(+nu$jHMXujlETQWgp@)>+A2h`B+A~wOOl(Fig6Hebh z2YrUVcM(a|wky8Pw*k!$_c-Jn`mLS^zJ7L1jmRI;8mVfaiiHu0>ro$-_jyJCA`tj2 z7q!wI)u)Dxi;DwrJXQ*>m$8U&7&3!`?+vE;{x{t3?EVj37ztAakJxu&yd-?1 z;Zdu)x4zWSw7<(*y``rX28WEJ{%{hZu;~|+8Fuj;1WKKIR}rel8PO48NH~kqpRgvo zI2sOHgcc-ekJibBixilhxDaI%&a~tSsOPdCJlDUqAhgAnLZNlc+sn+&5gL51krH?| z;_rJ);hK)^sBWz6r~o9!)9c{Q-oZ>4XXEwULp!`iQZgpI35`%>TlYw|=TS2&oX#x8 z;g>I9SwLzSPxg+L0i+*lj>Nx^yW%G9Ky^2q4S3=^Lbt?G$)m;f=kT=d(h7@o_2bH0 z*xNz7CSVXE#AqQh_2RboAux9*5G4QO6jO{Cul-GUf zhvfQEb>=-n$pO6SVy-lGn>d;IQY>`?_-{F5<$(z+M8=-7pxw3Ayj@)JoF$-21K(o~ z2kQAZ!q_O!w31RSnMa#V+<%Lto9~o=$}e&y=n5&`{9eST8!vyx0ew}jG0LFvuOSLm zR>lCP;rskduQ5g|4_?A&I!G$`npy)dd){K~5D>WYbvxPY3o-6pWBcBpT|6?~TFajR z@}f$N#E`_Vf^ARhqM9x`b-kcp($6BtF<`+ip6CjkuM~r_THQCM?y_#6E0~-2#cYD1 z-k$lRrUO^I~r+I{p^efH6nC)lenQ6x9(s@obSHfBzOblGv zn5jFAzSQf5WC)SDq0tJ1Q9WNm}sjcg058$0`y@x43mQ9DUL;<-eI&#V?mG-F-mUD6Xc@Z-j) zf%NFNm1)GvZb*FZOIJJiWs;iT2P6`O7E`2Rr_0J70SiSULpixBNDxxP%?eJ5EoBRS zuLwAU$$&F2b;@j0FjnAWauMhKHSp!OJH`TyGm0&{Ct}#f;-IJFn__r!_VjPdt_ivI?3{6A41G%3Qh62*l!ydi!z zEoiz4x*>~`$oc|Eq)+&oL+BEP?>qeLZ#-N|;&_9jv4_g}0h~xhUaR#4Snp{|ZT*Ff zMRET9?F}tJEIeVfE0%SdG7HHl=*^Ph0tQS`DG)RoM872ylC=YLe@5~z7~jI`(%@mp zo4quLFtNyzHpfZVYk{)Iea1U=WackRaVN{jAA6f{%?RP!%zMyQEr}TKzPggpBl{Md z&%^XklicYlaU0*yN}8@Nnga~sc#zz?)O6sJ9i8oWxiAl`5QA?SHNr>;;MHbSJ4xF3 z8jRp@jzL0j5-_C(LDbVAnk0Z5!Uu(s3O=&i?s4dsMsaFKTx3 zql>Wk=SKjfLk(rpNQre^xX!LP&Fw&C#273TVAZsKL@N=`EPzFcD-jiQ2%i2+x4Po-J^ zfkvdzq!)_0bNU1bzJplhk=^%eJE#vHYv*p)jZ98ifD?AXe{P#n`I?UOyu^EbWxrsrFb;72qEhTIZU_*PN#3r;_GWEORt3C@cVxH~_Z_ zj}5_{by@5hbGkDuSxLo+gwtMUE(wEZ<++&WQbUnOd5yo(VnzE(>AYzFzI8GFvrJuumKP<% zt3)V$wVc1M}7 z;D6k^^tJka6fs7zal)i2=`(s_{}7d(y{4(7Gv2IrbKcQoD`>wi5NXg5-k4+8&V65k zs~FYBe?&1`MI9=4jOUgu->N=~piTB9TX?v=dHXiE#)URd`kfCceYL(h9Y{TkT8@*K zI)Wvd!zLz2K5lvsi&3BLEzmD+r@4pC+0{Lq3T_?+t*Wt){emETRbDL}8Ds0NbEbyMEDn?49e{v+Qmfq)H% zLP|g^1et`pL!MobV08=M*vbTJa=h+zYfNiUK;S2gE~PJ|F-Q@9{z4o_aAAFrnTj)M zKRa?K!~?rzgy=CDkO0rrO}CczNC`0zX9@=Y9}VgjF6S$z4;K?xgT|7DB2)7x7RLl^ zRxMB=iE27ez-C5}$3!eP!;{U-($ex{0!C}K4yQpsQ=L$;ur=luc-|`~B$>R2;qBF? zDeKrMbz0cq}WZ=mhVeVs+P;D^IWD(h^WMU+v;k2_E+_2pf{39eP}+|3{~N z2T0=(R!##Y{qupQ=8^Dr47d-^z=0_+x`^$ac|Fjd?g+6F@XmfQTGnhM6Nzvg2t+t1 zk_fD6B^m@GFOqaY7$g4BFs>0_^6wM7T~9+X&K*wOCpVb*QqqEkp{O6aJ|r8QdPY@J zH07&Q%fC)GdA5HeODKZ7FjicRzADjMC4HjW?_Z`2A`TUdsn3iHKGwr(1;J_rpL!5r+fr&Lrag%R2CrfiC%m*{o%9dSE|Kt z<+|5t*xB<>f~?!+1k>#=w5e;|$Z-be{8hH`z!5^~kFxRPmZXgm8L`xYt8Py%v-WDk zfC0B!s^qjg%|}-69^INnco6lApD9>1BvU#-9Xkt7-$)yS{V~;C9&$0kTnPE{pilGQl9DN z;jO4H<=FA(P|5`Hn_Wi1~X6H1dJSH0FS2c;L^UWW>V(MwOUfQEhf=X49>G#j+=-j1bz>9epm3C zQExtzG%L+s_oa^I=9Q1!nrP5k#ib$wpDg+ zev1A&e?m+dbe`Ib)yN(*+)a-q?DCVMk)HMunYsKRa9o)Jx)N8ymraH^Pk0`jA&|t~ z&J<|81-?)usE+K6R~!F|5W8aZDX8DJD)PJiJ;Ci(GPeWdq}(9uz|cw4w|bOBhL@?v z7Vnm{!QaGLutp}^wVwH6Dr06Z3uTwVw-O6;9G1GoZcpsmjabKe92e48CzXJf4z%!5 zrSPnvvFR`XS58JU(N$SIR-IDeZcSc?@Ic)n5x(DigIKYL3U|FE7Zb-umcm$o{r+z# z0Xy$>H00y9bGq7FaMAp&0Xn4famr{vtHzj5al4px8>imn1Gy(9O1~pc!_R7oO2r%EW)-^>* zMUik!YUKE!MAX$t&KoFrPEBJVebhEsDZB-hEgvh6hCm%LRp#)&P9UZa+vv&7^KX|e zA7x=5dODC~YGG*A8k#5I6)>qe)9`wMMX~4owO1jW%muek>^Bzdvo9k{dQ{GunslGJ zcPYGj>5a;N11^&hD~_5$KMh2;`4UCi6LlrmHh7a$w{OGebQi{V>h(akyHi99Qi{7K z;|0@{i-uMfJQpm>W6;;Br!k~dv>I~q^L|yaho5c{|Af8XYl{9i^;Wmer?%HM)S>yD zycg*|DE2;Q&_8-MpL4SHWxHn1^_EyymZ>o>&SU4NaP(;SD+{GW_)8qImpMTUG2N~SV#?Uan19)W zql`E(n-d1$gwFNRZPGyJjRE z&tGi*ok@p-^dq9zUzHrqx51G6Qj}Z?&*>@_7f|C>+Ox^N=2ZC5+{)DH?Hy1ta)26| zRATa`M&c0LHX>@~3ve%Id!}477HoWdIOhs5@`Gs};5m4if8~rysu22h*T~ZL#vedP z#eJ^Oipo}u6{kZ8fD&NgB1oCIPs6O_>~)`Wj=r@KyfHpcs+lvOgfdjEmKC!~{rZ@E3$tx?i;ee-+NOmd+kjE@pwR&6On!KT?i%yB1J!kJwAa@u(9XV z!vkcXB|i3s>|gJ-QB|PtuD$V01|!FDTzdernBjWT(6&b(Um$>>Lz+fH& zqRSonqGAD~j6vPGB9IEm_aK{k!?G>ERR_&BjxQ2quwPEzgz$kUb66)o@G(Epv`6!5 zI-HE#2*F{adIbMhLjD67W_=7ld5j?6fzYrfvZ!gYPM(nN7Z>79yOH8#hkSp1zf8iB+q1FBT4f??SE5@sp`N|aUROAY|Hj2=qmU8rp3SaD2*z>5Tw;`^fzV`qN5 zCD{2{h7&831VF0-jwRAM@bzCH!}uzq$66rCoVp-3DUc1zx>j$-zg7bggrrtSCb6IMh$6V1@1R=27e0(JJ+7BW*fY6mF-t9-#>#8 zexzAaxDu8|jmwF0qfc`qF^JnuwTb{Tf=plwM7;pd9iy>dR&D^0D*qG^t`oBnL%PYB zkE#hM>OPtDhJ8Hc(F-Lq{a6m|zSO9s-OFUYB7UHq0N(Y3O9>j9`X>OAS&ZulEw9$h zINo)&7HP2Cc9@j?Q0AU88d)@i;Dr3#FQ^;)tpyqdn4ZPMPTG>nV_^XjLtt>CW0c3D z>;H}5v^|cgp6UAmubid*RIZ7qkU|kNUNI-~XL^6@h=*ma1bE0JfZjs(nu`i10hR5A=568!Haw`^u+L7w0I`b7_RISpF>==ph&uoZ3mAFTBB zG)H}FcZ`BduMWGj{1(;(^d)&JU_dR#4K&dbSBY#Z+tL}?i|M>Pu-}1qhuGScKCt)`q z&R!yNUdFrKK9wmmrnswqVyG$LP{no2<6&hvmJfOI(!%mzi+a+y*(3Y*F7l}tia6^= zKMIwKnFi+|Z8Ct%)A0M`wf$l;12ffFBhB4M6MA^pv><-j1S!3^Y?x{>F~-R z8>hh*aJ3Ub)z`L-=bCt1s0IG6OOBC*&3oaTf0-YUbYw>$5K5xPGwD*{i{uTYH-qw} zd_||CRuVbxDVSfSb(;juAbUHSwhLCoz`w8dx9j~){c6vS{>R<=kdgpL0*LoVXi|e& zcv8^MtWjGP1z0EICUGjO&m@R1mrsTb{DnAult*vcg);;tWaZN0<}6gu1}Z5$E`YEg zgOyEKNI9Kg{5f!haAzm8Nn-9J4`qjt$SZ7%f6TUao)h6URbd;~2!Dyail5;}anZNs zMkcR>nwtrwwu%!IKjbH#G@!DRwJk;a(dI;)m$a^fNX2>#t1bV%{NIt=WTJR7?3e1N zP5DT(Kn_n!YcLZgGL1J%QZp|8Ktj!5pt!Mj`Xq?~(e=qD&MP(QWzBD!2W}&az(7{? ztj6+-N8SWt+OEfh=0F!Pm2s81T{7C+8mBKe_S!>QXYJ$G?o}1YE|$1ZRQvzl`>=oS zy;wg|qI+4z`8^~wq^LQ&2FtfXpPoSMgc70b*cXT}D|1qfDFIvflmQ#pmObR0-mviO zUi-YdE+KN`?j`7@^0-fNQ7@4}i{juf56RpxZKN|20{k7z>bZW%#`Sk5e`6T`nrxv6 zzUwA`E#eKp0;u#ouIYNV|H}E$SfzW0p@h|2K&#_>^F#~Rw0vw*-#O6O;%I3{i-c9* z`rY0pU-O6$L*?2;mZJBF@?y2beTT%u?Z`)?-l5YpUx$s21yzS*Y_BTnmflrU2rDY_ zXI8bw824bWjBi%R+KrFq3Ef>2Bt^53yHRsruDD?goIf&HslXLpxza*$t^5 zfMZl+nkxB$FjmC%WaY$32N)DLB+_;kudj9FjZ1xuK4r3U%+S@qJ$uXXo=oC(M4xQ9lf_8qehQTv>^Hzy(Ek>q8l}cE<_u>2T?}vqCa=O zzvrCuKX1J9;l;J@Yp=ETTKfXLEoQfTY1}lt)b;hBHSU@#l6e7bX;5m8c@-vU*zByk~iz{3*xgwAI zlKwur6!x$r6RirdueVcyj6Ns=zE+${*6Jk5@^IoSix$g@4tkd31XEu8@*gHltl4Ch zH0$katkc@2JpcP*5u%6(z|;-?wV{E6BS7C07DeUp7&KV0dyf9c^qz#pY2Et_SFp61 z*8A(&XUX-qlWB>E4L|+MChWcTv@#E)D0HBuAvU*MDK|Md=u`?bkGD-m z4`)+=*>qCB$3G=lt$==i34X|UF<^*u-Ze>mUz zAI{gHg0)`GZuer?oJ^(1UNp5Cl`X=vv-b(f!%1PHYG&@*YT*7ijl1;F!yop&1u`>G%e&~g#Fw;83X~+ z6k`F|AZs%Tz(N~NT?IDA22C)d!${8QFdpV8qr=l{$GJH7peSPi#!W<5lt5d;N1T4Y z5&uS@+`G4BOaLYw;NcZ1fHA%L3f$rEw%{Kg={w(kS_-0?u$E!iv^p%Q4;Xfa* zU&Pl0;b(VgvU7USvvRSq$yi#xlKB3R7d@?ujre+YHB&mWG(yKPIQe7NUBI8gZJ8KG znD0{x1VodJW#^*9NQqhjlktP^$<1H_-l~i2P(ppQGjs`FjAwvXd9R&nRD{& zZTGoS15JmKEToBWPy;c{(gQJ)XPT$`5}P|U_MZZP^7u~y5S4+Jnh_5}H!t@lMviYX zEh^e(6gQh)x*hlZDZc%Z3mRZ#V;yRyOT#O>j6&I_Ps(aziRgwDq1Yc{n{`k7D2v5u z>Sl|1QyxD6Gv*pACr>7_lGQJjhCu+@18k;-fKt2!jN)l~sQ&r*vCA<8;9kyXrBsZ= zTG?Nk6aP*@#Vh;wxPN*B;?=X~bEnYNIm{((xJ$Mae=X+PIf{#$!qNFt%atW0*bc9eqjPN zLGB20MZ@((Lhbu$tAwk^9R2Y`uTDW~NHfxO0Bn^!}< zkqD*jrbUgE6h~*MrF@rm2tp^K@N#GWM?zxg@8?_LVc*`tMTE@X^{=M@n-=CgnKeY= zQo@`mp%{rdn;?l_ZY&+&F3ob$nd9mjnkouT2e4}$=NWJO$JQ2<@B~D{Qv@Ris(Z`^ zAbrzoVd?$#q$HU`Nktx}pmd}WA(Kgb&%=>b1F96xUahr@Vh_nCHJkTqrylC|A+ zv?E`)m?n{}CxDrI0{?@#-0*o;urGt-3ZH`wVJDi6duF6o`E6b?L7|&qiVUOpFlQ?^ zIK?hK`nL|TM#@u^o(d0LEh~PyO|L8Fh)g(1vk`QrV;$kwx+PfB!OzkyU$T+~^d4lE zHv7Gj1a@Es5rJ6v+`%_4Mn0Ae;TsToq74VPGDm#bKb4Xs{V777pY=(SY>C#(TDuGDPbx2e znOZHkNa5sc^IO*OJ_^O=`B+$ZDxCx%!GhL52A7*Z(eHC7`etF%tTh0yuKR3{i=Q*e zX=;@GH((u5G=?fZ#rLx8&c2dlEgprG{+k`gA&Q)-I|V!0*v*wM{?rh%&L@wt0^Ph; zrc#Hn@Z?XJwASjx{6Esh1L#Qrc5BoW^Ehc}+rme9)Q%l*ahdH2dL5Ee_^w;kdDHfA z4Zm5sK>xAf(F0zzU;(z{7=x@y1gpo$JqHEUN=@NHpNyLA%b#ae6R~Jy_aeZl_PRP= zOg)?fda@8*r}HhN{Rz|(xT-dD6kBiHm&ds+Rkq|A_$pJ$k{`9wTqv_7ie=H zE8BFUiet)?VSE{s_29yFDYUNG0Xp;HDV&g^^69$X7gkBPSWBq$+G~RbOCC9SchQVJ ztv6#&E+!h>&y}vv+wQvW-oCrsu4qGsYxCtu5#*tJVKCh{OS2Cr+q(^3xNGLT1k9J} ziHei8a~uq84vqStxmg=3W`*I>ReZ>qv8m_>#+U*QLGOLV{NuLEvb6Emhb8fn7~ zegNO0*Zufl>uYP4+mmJQUC-M;8OA|aZQMcnGIJwzvo-#FKW%B?ScO0AZuB_MXFjuC z=Ex#X#GRZnZIbqv+yOQgw_<>7Wt9>0swIpd!VJtFg&%v9DM=pIfQ<3rfgBf9lb078 zGj&(N-7%x};OAbKR<3-V=rgA|{x^V^dYsk3_i+AHu@~~ii}B>0iKa5EY9o(2{OeTAHcyG3CQ;& zb~yy3HkAe(Hex(lc%R*cRk-7|P3|$(Zp7GTAdRpQv=A~L^JkD~$w;K@a!0t)8o6$q zOdZrd;UrM=1qTQ=83BBiI*=T6vRAwnSxLbPcN`yOsSub)G1a^j-K7aV$I&t{rvM0f;K$uw^?vW4%T!UDs@m@ z()WawkWT9QhvvVXD!_7{h7W%&!j|zavLH^K_udU3by`>lrHLtZ3UE^8d`YjYBv^!mSoDDwQg|vw-Pps!T2#a*0V4o#xf-&XE1YQz)L#z!Z!Wd z@rbSH*&}O#uOe`%8H4`YpLr~7z;`QT_Ya@N{12Wn!&;ATan^_)ARc+s#d`^ij~q8D zHY(G6yM#ehPPa)Ra#QZ~}rJ4^5+%Iwsjz_TE3pS+xZcVCfvOtJ;aWiZ?_%b81O4CDli$1bc-9*ta&xSjlY#q@x7bo?Z)rXv zLVg|)4oBp>&=*qqk^<`nZ#mhP;FZ%DttwdF$$*BmoyH}QgBYq26i&{cZ+2-5^>UI< z$}L<|{~yc`L(MNfs%Sf7mm6DZof|+S06|Wjup~dyA>VU*!*#D1W+G14M1$#%|K6_dpAJa78_~xCZ*Fx+EGnoojN-V*>(PC)9j2t>Y<^$2wK#YIw)7sEo!;-1jO!=F<(qJ)Ll#W?UL>C!SMAx*%d zjq_k^nIV;4c>A95QSEM@=eI$z`^gh)j?0Pk8KC6CM}wlB(R{-+l3UGFS3>k}fxy>>LGfmju242^zTC-vYG ze}2@Z2`5t<>GV7FOV4eZQVH7A@PJ^@q6EFnKodrO-C|?}&o@R7Z+2Qi^I}*Y#-a9F zIfX#D+G0*3K4NhxJ8*!6rTB7r+B$U!u&4r5FwBPEfx1wgnprxVdbP7v=|LR&Ba2ve z&eI=NC$Ih+0YW>AmWb>dpAU^qjJ9`KcK#`Hiv4WRR13U*%LXVto&fisjHnRs2)+)7 zRfq*e+3bNUi;&+HETG!@3>GC1($L9i5!czi>*;nChj)@vH#m~eK%@V+_p1>Vp1cmd zTl2ppx_o_&8v^;*w83-=xk}`QKY$1JR0=*(%n|(-G2<-5Bf!RpC!o^(uAd||Vwpg- zgv?xOOy~PO5YxX9EcsXVl#bIni@|kZtI%H&WNGPIN?JV;Dcr8uxv^r{A2Q0%;=0}9 zpAI~XDy~K(zd;G%O`$LOW?Po5!>TylWf9@dPhg_WYpX@wq-xI5i;h=n!f6{DJJ1Gd zq+9PhO)dcB#5}A06~F^xiM-`^!Qqvartu$dQZ?QFiq-8k6U;sFGdMzjNTJVw_(|O_ z2IDgq9R!9$^Z!(y=e_7c9Ki4a%$*&EF~%b= zM0WNggVB1`+x77AQaU1IK6AjGB5Y~a>v}(}nx0INqn@9W#yK_2tdL*zt;Gul9Bo+z zSy|w%EvlJ|X#6~T_#2gF9ZC(|`&&2cxMwoq)2&xe=N9P4k$?FK%wb>YRgl;!`}hbd z2N^aX>y_Y@u@zsz#Dt?AQ2-21U)a*bV$^@~zE^2)=yu%{le-UQSlqXrS2^+wN{6&a znEnF~g3Yxq=2SFlYNg_j3gsfWdoBmbSfxCkC`49NE2zV`g$P)+V+)gvo;Hz2G4;OR zx+a_d?ulRTvIPGZvrDH1B_}6WNzs$wlZ)lu8EBtm zR1(ZyE>eiTeyT_7dO$Gn(NFWmFGpEkk7+9q>=wA^YD$BGN{P94H;w@_e4b9$GhL}N z6UxLx0+p^3;0$7oYrCRm57=ZtMR%89l28jSaYt{9N`!LND~wSvYm9Z4VZSiCxuJ3? z9!Qx!7dSoPEpRc1Lj2}MPOdK<&RXNM7qp`gHjxMcgMXTwnt@KWFg z&6(#HAfsU(bgbqjh1!w^ZXs3+pa!fltN$tWB5+~JG@x@BAPEo)zUO`htbi`_$g3hi z@I%xWAoj1;@tx56nipyq{S3?`)E|iNn~ArJ89nmy{HQn?C@e3O2G+k+zL+Aa|?VwQe>JGa|`~zlE!y=631ssgTX>ImoeP8roAtR1{qmrKdS1I`}6zdh-RzCr6$SX7wTJ`*XiEOmaxO2q=6~lp+3_&&- zHiU|jC<)BD`@m-Au{wKa`GTJ=x7%!;6BV!qUdzDX)AhCgpY`?Xvh&(sD#2)ApW0vS zZxLV8xh_8o%AfOjjZB_*yp%Ji5OoX&Yrc?}vazT#7VOb*C7s>hw}%?~D7R`<04X!` zQ4*F6L-wq~v#UT!->Gy?glM6J;cTtKPspH@sX@lc;vk-I{rIfEnBP)BxTst@I_rHL zBAya#90h;R_8hgTK_d#u5p&wa!;f{;;amtRe30GjZ51DmUbAM#(9`n~04&jg*ub|< zLE}Wvzjb3vNP`q!9i+JVQ&lbm@W%mv?7vCwioxv3e-%=~4+|WrGd+}h!`4g%s|eXPt(hMvU>A-O5I1k)fKzD(&4#&?>o*7NGX6uF zx`}Vfbn%={GxEozC$z*|WO=!&c?5 zs3e5B`oWLXWC@2KfbsYxa7{S3;0k0F7>G@p@fprKhdGQlOEMF~Te&;8Hhh|3bf+To zcViVxAIkxAP3q$f4-d!XDlvSYE1vw{KXe&WawB~X)PJ1-p$&5&IZ_WE)qx8$rDZXc z#5P8{-lAVO1m1|X-kcfhy>?bU)S=W2CwYk~H`=Pgvkk!_P)u>HWtL&bg1k~-=X6HO zpq+rFXwHpxH7aasTg>Xoz!0#@jSWU0{%9Yik?Wz#Kduzr z6qv!Cy_DLl*pH2Z%NVSrJ{tB+e@{67fT89M0rfj2&C7Z?Tvw|taQ>3ePcsDf~yU z&%$z^!q$^$x#!z?J(f-Iy^I=Y2L%v~g^#2Jr(o95F$Q)tQI~ z|8)bp*Z*G(35W%~5I&f_$F;=TtNjNE3TWd9IO*%tabuSN$*PKo@^iBLClSWo9Y45| zEirFNDzYYqA!%z1Cchv~hc9>c^ zPJ+G<)JJtN4Dp^c1UA8r4$YC{ljST$Fu>@e^R3$iajsx<9nQkcXyxp*(mD>io#GOo6D+ zLVy5^Vfopv`0(xNRC61*?`eMbwX8HJ9I)T(-lqnhOx_+L&TjjQSJ5&Xk$rvy=Be5S zW;IRG3%}zQC0lJ{a&&;oj`g1*1%`n!i1?ZeJaG6|dFTiK#}V6vHf0wl=gY~%Viwx{ z5#-^B<-^QOQn)b1fA{@m!~YKz0)ie~_#Ujz9x?q)q&nN#$b@u6oLW4zZR(f>G%T z+1wV>8c9w(n#NDd&@d|Pg#WXrGWkNGM`ysUm!Gb(k+|CIKX8tRFtst>7aul>0nU9z zpoI*=o4pxTQS>yeT=sRS#pY}`FYxh0TU6X;>_y>$g1`9k29<847z&)bjSnvl?^V37 zeAQ_lC~71Jc96k(MT1(+G>V}2yn_DOYwLhZiuUOA|EQ8b^2#Jo2RpQvboMNWxbM+( zn>K|Fr1Grxr*M301=4S#d3c}LVZkLxdv`bN9^((~Kg2aMs7(=J`S!suP49?5x9aD5 z@dc|2%Iv?GZJf@l1u>NfLyDDzsCF%Ptv1YY67U@*#RYBmC( zmYWBB_OlO8vVQ-7i{fgEP4_)#9-#mI0v3_-3S+QB9I7%V`No3lLh5?9zQX5P-#m7k z&F^%TX@+i^{1~qfFxcz9eZ%YUvj|H=u)ek&xSeZH3s@8{KC*OweOm$$N8|PJRwrY< zCNZ(;KbW6z2_f=-H1ZvUlWZyn>Bi}9{&BeV`k62xoC^ULkXQFg0A*;b<`6@!^_tf#|`h7A8?y}?~6VFR0h7U(R{j%LphQ-W8raW z)e?jew{w4fYVpPOhm7k#D){=0&3N9!oUtrjP0Y%tPBz2i!0IDfkiZD`(U6vM8V324 zMABV%)s!d5#)hkvX=Slb`%$a#c0@Qqwj?g(we2)O4}Nd~tT8w_h~73G+v4}j$-p~} zwm@>6W{-5}%PYCdh#j&7av--8jnI&F1?I35B$c(C%n^tR+@FtCJbh2CVzR@InF*;T z-&xE~tu7fio&1*9S~7~_T@z02QG20=iuCD|C5QJW1)cL0FU_> z!pOT}$-N!Br^#+n!dr2orqaSv5-&wvJ+34-e5EAYqS1?E@llS%w$TnaSyJm%N15D4 zErMsbMB*Ce;p)}hiXIu3C9;`;9$X@2?b@Efmli@$Lw@v;7cZwNc~Yw8dX1lmntv$7S2VNnMtofM$uhW7`eqbT_(h7!c>+{ihVHhy|`N_IvLs zI?LeFuR{3T&hS({hv6N?xz7~ITyJ}FB-vCa}&jn3*%0>d2z}IY= z6(zDQp!v9ggz+$z7`IPJ= z0DB|jeX5^rC&?hE}Qx=7?m)evN-PEH~PtMh+sfH0PS7+8a-eQ+& z-K-1cP0ygF%0~Jb9@!l|R{;875m>O<6hYJG5~sx(hEy;&SRQ=0P&Ll^QR$H+_rO=B zRS__8s#JN@Zba1?9iIXw!&R9;Lri37Qnb_Cwn|RC+ad9V=JQ>LRypv%mbpDnF8>&n zmSJQ<;}uCM%CMJjpbhrw40+AJEe+ zPS(|ZY(^J~#qofz{TG%Pb{s{G2=-V@%=Ek#G#XVv9>>nC95a1`R7u2B&R~&)9Gajr zu+-6TzgKD*+!_G>6T}TAckX$!{fP5KL&3^Oz3iWs04N62)i(IR3t+%o-N6kFB4J_W zp^Yh$wH~pfep!+yzaChw633*xqI_?jiI=%XOd-&&f{oBS_dVsGxn7REiBN8(qhXv- zf08COH6PRn^k{QVu7133i)=GgG+Yejd?WENy@WJ!`Q!^QP>grAWxLN7z;o2mIbjx= z1gvnltF?lHEa_*zpCSFLNC$-iF>9%RFd*6S^*98ufbIh-)+55*MU88xOe&N%;Ii^K z%mez)%+VgQ4dl5l0) zcn4a4@d|m|n?KJnw|#M~P&wrUw2E@&h%bKFrHOU8n^2Mv^|6PeP@{WIzf3rc_iAOZ zt+e1HH@bTJQ`z1)nn<;sDVKHy;WnK)>_R=uPXp2+C#KI0eOPF$-l;$b zah;Rgcwnm~x_w^MVr~R1>RCU2CbJmo>Z%;-u*&Lud8CS%&B}^vA9KpHqYEv`33rr2 ze*fOZYZRLQ2qhcS@=O`u=8e%yaN;^RMCZ$b+2;bJ(VhdkAe5ZhD({I5R07+m+iI)& zQCQF0zOe%2>|VF#3v%+f#$%^Z_dbu4k(%~m(LjUWFP@zL_W1Cq$P(a;%xd0t?p6R` zyxke=b=)Y*jpK#+^R&Xoi%zoQZWBOTH+n(>!e)s#RZf#~QNZl*m+&=RMT+&xbUT4Y z?#WEyAPpFwfu167^cTc)>Yve5gX$r;Q20Z8em%^p(s?I-3d+9cS*Ju6F4&WVw zMrcp3x_k@6toESMp-L3dXls99Qz755?JGj_hF{zOX|tM~cY@1Sk2^#y|1-G&mg>MHt2YUI$ls zEhbY3H8(}4!e%&NTQ_79I@~MvW%aSKUT$o)QXA#o2+AO|1pJlP>B9Epwdt_p3uWVj zfV=B=m2$s1cALBaH*5SA4Up%k=nK?bgv-n;@uyv#Tx{gtHE9<`frW&)+E{pZmx5lA zi*~>IQjAw3&hxTt<$=ixJKtdGr;tA)D#V(QL1XQYEh$Ms{&BS3Ro1-*G}3`tWcQI2 zTHR?N8%GpDQ(a=(PU0}H4(pd)^I)x4qGF?_|Dq`4Lgs`8(QN41-LnTtgv1Ob0Z2fx zR(Pc*Ho{K$kjt9yy^LUlf%8Y>1M-4GjzX1`xjk!ZYhoIjC+8`P6nsAkBzvbV3!>=O z#g*E*SYu@{kYN$k*C$rTmOzo*Va9r|PXIV+emUl+9hYR!bF~(zf7Yuj z(N;Ti`w?IhjRN3`Y;Fq??F`Z(pz~N^5>GtN0+fmHAb!BgzjaPd!h83E@2SYk=q&Kb z8aHcI{GC~_ z82=&v?;1X$Ca*)FP@W_#5~(<#=40}7qz&|BzO_>9_d^h2i0oeO_LmGqn}bAM^3Crz zXMtF9y37&z^;v!kPf%XVkMFvrle@+f9@|G)8rPaW*F`BAXMU7@p0N9-MH@MOC3fd~ z*u;QK^NxX+hW7_Khd(+&(iEWXkM)#HQ|Ddj^CWXt}>xpUm#4)k1Y@BLHYX zo6SGw+3=hlv?*cS=PJP=QFPc(%;a~^@6NXETyM53iXOEd^@~4bGQXou+M+M1U_3SC znArUbNKSx(z=r1oeb?b}C16Sf6lo+7S^uzKRzGcmb{QC0+sN(f?-);Hpz^eZT3cg~ z@1?!&a20ed*~nTnHiVQonFvtcZiz)InN2y5ILUs%a;Qg>8UG8ky#4|SZ9HU{T$oCFiC6ZjQ@x1%Fuhd_>CuS!8<^_mYYhJ86ylC}nqh&t065j2b87SIPG z;h#M2Ck4k@eSY>^hbspeJZ_ZMq@@7SA(nq)TKA(znnv!M)!TZ8p3$Zd9m%Bf(%1s* zXl3^CR8q+UOmX*L$P{hHST^tcTPDTK3yaS-k84$B4`;&eeZjh0idPaTYMFq}Yo;SK z-yCph9qfq4A+DdsH9-LKk^d^RvEr@f6foL*?csYSxQIm9bdyUxp{{+*9b)*21K9yT za#v;-k0c{d#i!K7TYF|0z2J9V!v)15r2YZy`!S?RlDHrP1?#wSc^!59waMgL6pDBH zMz?`9u%ajn OKnBAQ$|>Zp*_c&yQS-fgjKF*%PT`ryIw?%?joqTJsws7p5S8#0 zD47J-)751G%-5$ITp55x`@FsLFFKirIhkWHd++qM z(zVCM9UZUw`%nAWY8MLP!61VG(bVBY$g@de8yyr7f>Aj3Rt}z?SMpe z+>2(R0h}yH|F5oCdtuEMaJS@pwGc!_48n@>Q9rxB5n_tG_%m2OR#Z#Z0?Fatl@g#x zhBM19iBf8lE6GgxKD?xe%%fuBF{~Ce!KI%9+Xb^PL!I7~5fvyR)nocW!`yMGW`|5A zwuPJ{YKZ3>By!>Q7C31A<1gWp` zrfGsbwI*=^D_-BrJ`wUq7stO+^1b`B)7`(He^~#Ud$G`>H`#n_TjNav%dS4Ykr>_& zVH9skxUp$*C@C#|sH((fongRd#Wvq2lk4`@R2O-xlpk@)?5S?LA+ev;!#u43<1%h> zQ0^-x8V}51-%+T~E1NmVIe8M-xL_hp5K5NIZkmLCi;0jdpC~vR*qgA2 zkb$%z5Jo6k5Hrr9uBdKksRyGS1%%MFx6rA;CNj|7V!_XZ&J^|ueU@63mpcANn0R$L z_n`AWn&kE}_O{px^PNq==6yvVkK5vqRZfM0I z7K(Mzjt4JVHcAb3FNgEuj?o-~TVp?Kxz9Kh>UL6pm);E)zuUTenEG3sUr#7PlwVJ@ zu3YoWS#V|LsJ?M++TR*7Rddse!X1$d@tL4A`1im)`1i9*m(!9{cB7uM55_|Q@3o{Z zHyJMeuEw95GYOqiXKPgohqJgOu|LB{dAL%;x7Aop>ogQU8`=;d?nVoKjwIi|AG?xGw?R0h)s|Q9 zq3*sBmiDe}1yv6|97y}So0_^JjWl>cMxMBqkTn16*I{xLLW&w?CD|KTJsZwErW6NTmh|16D6mf{!7B_0>LXoHKqY8UlJwbTG-B%qi|0YIufJ;i zkRkWjd9Ngx&TH}JZ?t(2L}9`3i2Pq6P=WEm|F;lg5nIQm2>ah{VqUwa_O#~|+mLGz z;nb_SxDEDk%zTOB23G3FX0EG9yuedm7Vwp8CStgjhTmcmcq4mNcQyzH#|E522HxnQmq(_G-zNR0Z9ef*6s& znl8p~f?rOApwe#XVT5XR=7Bsy&78Nwl?p5J^}2{jCSb;^aljF%D8jGz3SQlf=EM;f zFy}0vs&n;X-D!nWykN%K}E_} zE}}w&!M*-Fi`{V0OFI995dXi+k-mT$R;+}jb5)#x%#pJA!x-fixa^&AYODBIh;KY2 z&e?LD7H}4=7Nb6n&#|L96UR-Q@7^$?xEqH})Mo8HqHABEw7x2qrxrJ$_;*oU)lR+6 zEg3pk=vXT4x2GAXq^$3XwryhO5udYOM)9z0Ya(qYlO*{)#__HY=hDJZ{y#b?>`#)j z=$5#LFq>KLHsnQFIucJI{-~96!}>e2s$NLjyi4f7LCjeWBHS{%BL@-WaXar!^J0rH zBZb`%QX#_it4e3^>z|8DH$M(I^1MtY|MF-n$xsR(f#qWZE!(i)b`A1hYL~l~g4_Og z4N!vdwg2zwe@0w91#xu`-grBBLW9eC$8kSVi#OW-TDco;qHeQnn?UpNsa+1wa>%W> zEN6A111-cA?_;BjC$q%8&CYhDS(g`jL33;s&9cQ!pQTnI zzNGSM&rlu3+i2f&5#;%+Q)=ZoTD^*}(;_#Ow(!sSiW2`?lEnsrj{HF_jQ~`+O*Hg@mnu*2W$mo z)@eI&fFi%^1AaN+w5Mo?Fk4yb%iX@XrGYg$jWNokODZH@0-J zw4Z(+ZI9_vn1MHLEZwxZA8zHRsS&lda=MO7Cag;Vue&XBpL9Qi61N#Dq4&nl`hJMw z*ld26<9~N16-CpgINQUOoY2mJaIQ#6zk+!gpXJKXthX56hA$#3#@*g7l)`ioe*s%p zoH3`<9xXVV)VSPaq}X=Q?E4E!(Pe4fzYa5QNuNQpj1K2!u2313E zH+pM^<$BN=UFgVMo*~o3GcBi+>}$NW{(+|O0aJ|_DqbD+U1>$m!QO$x38r(x8i>}e z?krM4+b5vc3MhzAh@khk-}Q1+4G#~?drJlmCP3N_6POwq8U6<2*STHj=KB3BL3p{c zA-zp5H$zoGQ$N}>rkeUho|9{~Y86;C0khIr;z3~kTcSdGMfp(8Vs zd&HdG>O<0%?`qRAnFSYpI#A+V=CWSr#Ix0Ua4K7K!TGNnegg%oQ>jdhxO;_sydjSo zc6pMRB=8wEb6@>yN&EVQlu{#FUma;k^U99Ra=a?_*=XtEzD)$ub18@+%zBm?0;C(~ zFzeBWg_4C}X$uA5aHTLo_kZpsPpy?2FZJ!t)vp0w>Xz1VGb}V<^s`HUl3AzxE057f z$~H@os@A|rLn?vzO;KjL?I5wF;n!kXQpMBT{4a#bwrEwf zCFIc)BtrfvwbXU8Mueu^TsT}wh1tEJ{JKtrZkr+hhknKM#_Qnkb%$w-xhE5372p*x z8@jBQng+(ez;avTbL<-AJY9Kyc(mrA?h#0h)6k8MbFLB`Z|_Gdk$|r}Fy;HdBZZyW zWkM!SK@G=B>iynrH;_A1wacN0U1*7%<=PpDGz$-bB>GiJ5Mpu|%>d3CFF6tquUCriwYSCSR`b5_Mo zBBhAIF}9q#9r?42r4uY$|EeYksG2ALr)s4CRSl16p<`eqq)z6ayAdJd(gBQ`l`-3;D3rV6|fkhLT{`+L|b15(r7lTE->&VdxPyZJThQ> zH128Yi?-G2obgL3gFC+GQ7#+u$!{R~IT-K9qp`sP1@os@q7i~VHLLMixAmr>Gl z3s%r}3O}I~)-(ES!sVp%M`w8~pm260_Lo-ul=}~q+c=pLoq^1j4H*=!Y=6cW@G_~~ zJ*I#|fF6@zgLXS0+2Dk4E)Nvgtr)3fw1L+v#J|d6KB6Mm*1G*pWYl-Xhj>#LH2#W8 zNGt~~G?|{IavHjRKVE&^C3=%RHYd73lkNvcn$IqrbL!$qRM}xFC{Ptvka>!mb3c8l zRQ441frjOLlTske;V(m<5l##~e!nQyWTuo_q9V7p(PlPyRGWM2Vc4sEda@McmS&I< zk0Sx}U}R^`xXnfDCj{z#~1iy@A$zeTQ3K#l6{UtXnp_lfmZOcB=A6y9vXvNYczaj5 zjlNM5k2Ebct{M8GBxb)I(#o?x#ixtPWDcDI@8*;`UL_;R5a7FKEY{-{7EDw(#V*$qL8iowGOw4ACD=0+7!iy9 zSY{Re)3_n#j88;&EDdmtgBrY0Ev@9YN3heR+sP}p-PtEJYP!5P*T=)Bmg@Vhejsu# zbB0*)Zk5umY|3``=+tya{I9kqS{~@uU%d9+TH7R71*T}lZY`b=!DA1<8kUkN-j7kU^6iVclzhPLEvg)my_&HX+~ev{;wv7j%t&XV1;xhF*l z3C~?7zRj?o9`=HnMWmfOvjqA?Z?eV)M5~6PT-9-udf3fS8Tw8kPgk;f;yzEb+EX^p zx-;}$6R9xG-6j0peSMn`kb|L{L#M0iZ-P#wlxw~sPBSlBnqUSQ-pLe88e3CO&Mr^r zf*M#gq%Oi7jc)j>1nI0XZKe%*ZLgULXtwy^iy~gCIo#Tc72I6Ea3p+;J)4}3s|hF; zHIUfYo4E`^4igElTpzBL9V^|4!F$dy984fsLcG)+|G;Y5!yN7)pHk&+0FaRL-2R=q zW;gsRd7<;O?b)Ozh|}g1!iP>Zms|gqP+Ihc9)7!Td8nd-wL9qcr!uWfHMX+&$0Sb~ zlCtK&yL|zElS=kDce@IbL14t9l|PO-m_y9L7SP5tfhYaj07?mUzJHn!S&Xs#j;*<* zq$OmJ+W9eqgV_Hzh1fW0LE9X0N72@+(XR-rbl!JB)ZHXqeZEn-(_*k4O`Vtc0Nfr0q7{|FHY{(ORl`fBO0G&mUo_ zhymc`I9H?*nSDo5QTisi{I1qGnWAKuRzOq>S3(>L3(c82>vBS^qBPBbaU)ep1)Y4d zK?_M4nq@UAm>Hf%0L`R<5OF+3os?d&3vZ|@MObg7GbgEE+sVtXw7rJ%Z$jSuI0nK2NQt^`_pox?zxUIdsLHt*^%y@IArenhkwuYy|T@|dGAh_)MS8@ zBDq^M48QlE9_&Po73jrglt)f5{bj#rB7J(lN-*A5)x;&rnI>b`X?*Q(7y3FDG1;$m zdNYdhbkOH4qogP%@`rp8%(GHxsV`~khMfCcSvCDK5|J~ii-J)en;mT%G&$ZV-iW%4 zeaWX5574V%%x-pUe8ypBk`W#$T|K3pX2te~(J~g&e-9g1OPBX*l?e81MF^wQ|IIWmtel0~hyHk&2qStC2=F=>+gAgO(TGUmX z{wF^@tr@ceW!@QgvBue$Lw39?{mUg5hn%Q+a#@zRLHoGiGU+PU!OPHX_~KBxV%C4B zD`_I5#LLRupeGt~O`mhdHCR1A2N1MtlW*Lf1YSc2ML9^3D$CB+{qRVZ>k@?++`FKj zWerlB>4WfU&pBdI?_2AOlQAl{mECj3-2*Jc);k6j)j%cRHaBG}GhfrMrmsA_*Qc$E zg;p0ji;Mmti*Yh#r$m54CT`CIErd6zjph31Z1YAoica}H)of+wzTwsa|Hn(GPk^*BA#9yW@h9NElsM3$2^Gp4FeYW(z1 zr4aT+W3kPX{Uu)RTCM z_xnX5);O2G0Mc}#xWEUX1X;zz$FsY?%fUg_X9AvdWE8-sFB>`T+mehh%Y9q2WQQ8x z&y2w&H*4{X3AMPt_FO2^uMVV|0L|DnS5#)(-~Ap3xJ+*bUrei4>z#|PL;8t*&U>p6Jve^V(N1X)Yy0YoK9ZT}MCY`xncd;1+>`_juY?KoF zpFA>K&BfFg8JvSzXDsWet$!pUbEsE@H3#Ty+Q>blx517!=FC6{*#yzs6s*pg(Yr3 z;Cd#EQEYtHk(mJ&_xYtLit`hB9n~SnZ*YRmE7${I0LB~r5sVZ|D>rU1A#|KA-~U^Y z)}mPVE*x+uI>uWBQ_w}2(s44gN8r^-3OEcf-#a^9oi05>2bm1iR zTwAn322s`c3y0ImJ5y1cSwA+ooH&0Coc&g{`?<(;o>qWp;JRjF3__3B zw36Sjf*bfxgmF}Cm7`tdnc3@_;eL6|MB zS+SfCvYsTU*aD+~%!P^iFo?u6mr}4PxP`{>oLd*?Ny$XqUh1mflR|(Xq)q0@4A*yd z_Fg}w6uqUJL|p97Y9u#==~ln*#5HW$_+CKW%2=XQp}bY4!MN5(W>|atov};|5Jc(z zk)BbO5)@UN+^m7jct+SDrKRAj!8*6`uF(&qN=kNJqk0Sgqil`#kgw)QQWPy3{FH(Y z{KJl+ZZo=6on}3B_v+_FMSF~8R(Hvxv9?ti18ialDC*?D&Z#ATK6mP9%i7-viin82 zmdh5)j!$7DmYR2?PTvVgdLyCIrYtCfv}}CtVfN=Q3%>8;AAdE zJsx$`oIDLqr9_^U(OPCWbh z^;*c!^|L*mrO&&krS(d~ZK8Cyp~p@w+WBMGOE{ic=PH_!GyA3IMMmQ=&-<1Ph46qn z)16f&j@JU&{YI+fI?t$Zk8Xpw#_hY2aXUP{=g(AkuTpJs3x`ySO&V{jdtz|{(BChn z+vFA1|GIEwC<0@I|A)Qzj%qUP-bQg8yMls(ihzQONK>S@*bp%SO7AE|q)V>}R*DS~ z2vVcc0|7&o7DRe)p(Q{>Y6v0J1PJBa!I^pIRloE7zO~Lj=d8n;HEV{D=ef(?*S_|( z_x(Hq?A`Sl8L#V~Q*5jT*4aE{)#cuv=Vpb8yzokhOt;spd$ETVnoaUcY8>I|u>I<3 z3xU758ag22IOP{QdCu;8TE4H2xdl?{O~KJH(6)XPA?;GnuH>5UemLJqzB)T>I)vM5 zVnOt6-h=EWLq8qPRO~5eM_hOeFk#Z~~Up&`rl z-cNU_dw_yzHrs0%s_u%V4)gLy_{!tzcPAGu6WPlbLCIjGJ!D18FaJ3XR)EGImudB% z3J1h#QQ6BW#l}!7Cibp1cx?Oa+7347gs#-Vj60Jg(xjIEp_{t0qPsCVJpB;`RF7!d zq@r4!yn0Ggj3~K~>Tk6}{=koI9xXXs7sjw&rkPoaKFH15sTXvq{C#Zmu(iMqJ=h2P zWjs%yE;xLc?i&6m7bVGEkaokMzv1Dh+xA<(UUSN1S9aBoYzs@*{W{!%dRq25`9^Or zTKBT5!=APa{y_)@~`yYMfAjTQ1GkbLe+=Eh;__#^l_+IGcL*+B@lv zwlJS+biPb_zS0LjzM&jH#X0AT^vVP~xl*e6q|iIO{yWsUG**eDkq7qjahsR<8rg)+Ebxn(c zCtdn(A30C=AVDk(-I1m0#Tvc*=hb49=a+Oyk{ZpYNs`jla@>pVyd{?`;ySD4FvBu8 zi1q0b?qkww?+T4m#1ziB_3%ZVvK6%I8{^24q{!r)TtvUrO|tJg+p$%`aa|(>Y9e4- z(&|D{Lltn<1t;wafDb*}qW{MqM;*_Yl~zfPGcq)Kxyg0Ks_7o2GQTs9NcA)5DD^X< z62Qq(1~JGhB8ya^-5{kKKUpQXB8fnisl`L=7U0Q)P8@{P3^R|(R*X)(FT`QtaH#Qt zwA-P4O7O=fYh%WnJnOK9&^JGtZc6u%rd}?Fv#3Z_yUP(5S%PrV z4Z%*A;uu6{!Yp=Xn(Iuj(4+BPg*dFH#=ca zL~%82yY}Xm1}C$)I!JfxRwOH41+NLQ>&2@pbsp@mv~^P*`&!tYGI}-keqTH1t&(@a z_~xg$>3hCbU>_}-=RNYDwQHmtF?7j$6;ddwuD`o*o0k0{+pVf&x&;-lcj&)GiCLJs zZu}W`5c_?-{E*(ce7$$uOSWk&?hX=Am*g2=g=?aW^4li^ z_c2TWL7j(z>?D8*%zeAx+Tk9lm92<_m6dK-c*d}9qEd6 zu4{ZjztQosS;7Ilxv1OnHAtmZ9GpXqR91+S-%jTX+CJGnK+M)jZ$Z`a3eUb3eS2C~ zqJa07@qU90HFV>&Uku;T^RF|5Rbi_TC-Kd?i~IyyYI3N}`By!!_# ze+BnEjdJswgR_Orj!udG)F+~W1>hNoj%FJ6^R9_aWK3=Qy%f>1Z*`?jgLWtKZ?eE^ z{v2vZ(N=P_=fA2oVt6h;`<#dQAkS2t?}WDHygKJ}ok=$jrOtOIJikFlw3>J1L<|br zRU0Lw?bDLmTAix7Tw%1r+MRxn{`Ot!@5T#Es9vvIL!M_T;M7f za|;ixTlJ^~yC-A)!HqK-(j{^$)I9dU)$vn&-M8JlJJuvTrZv?3g>iC@wNEnC z2(f%eyCvMnI0l!)hMxt`*odvqa=406#CnW@{AYa#?0#o*p@xmmYQ0j>Lg$T0k#y>U z{uzC`Bo#A1-a%5<&%0^=|t)j7+Fm~ur`NV{N4z}WQ0Uo7^E z`0ErDG2;9I%wtZHKR}HQG3lPYjnr_zx31CAjURnOR+Hf9KC zb8CEin1{HwX1ip|)tWy!c*4)>q~$LG?TXh4?>=F}q!jw|W5esF@#mcN;@5@ko0{Gs zLhXRl!RiVGYF|u_(bP&@imz$t%n8;=c=@h z2QXee4-AbBp5WC$Bea_r;*J-38`V}dtfWvS^Hgv(DY}y9n^O(NQqo0(rKQDF!$NZR z9g7xLwU5m@=rEXY-1s=!VowrHH|f-|Xu*CCwJ>MmgKimPA%aXyYU3Ow<7R9$%YDkD zAzpQKWQtwo9rE02#c2stuWZND&hw|^UW@CZ=7cX@x*N+aIWg%Z&^%wDX{Uzq#%)N4$G)^U7jL8PDOv zZ&z^IqvkGf+0*h8dT&n0T(qO8+M)S*?Ed)V;jOI+-p^bi`nK5Fz=8N8F=d&^XCLk3 zGhdlyb$gu{ZtnJ_lWRQdI#7hmd~v&vP3AB_k-+tf_LdmrhOh1*R5R?*i_@g8#8|!Z zO#OIv09ba@gIH>(K@2gRh|vMW11^m^lu}f*R?nu~QK;Xlx@p)T3D~V83;W8c0gX*a zEWWIwI)>5~PC(IaRdU`!N|}Bv*p=?ljLTKgb+#O+@lB8)8&w=X@e$Z=x&asB=vBsiQM4V9Bve%>xoE!^fx{ zYpz|ZULH4(pO;~zeTkV}atYYQrnzK!e7=ZiNg*q?s*|a;>DYh&Y9yex^rMEia-!ZUwiAvNOuBZPe!Bw>Am57dwpoe-XdL! zxJHAPJqc|q&N|OeSq>S1ZPSIuUOfAggEu-@hzD)4qisOqtt5vL{7R_)i^>>#a)|mq(3+tMZ16rlt=SjU;asa9M zW+L_@-w6Ucy@byV@G67Yo*(Zq>-xfCJAjQ$q7Wu}Fu3Q)#9Ga|E(-ce0&e#Y5(Ied ztuw}cg3(22B8T$IosNIJKfHEDf-eVs=K82wirhB z!^&6=!VNN7XVTzUE=e?&%%@4}V%p?wMH`-W-sjLjH!hUK%%uI1ls}o5E#Nkqe&|+E zOt5@Er`GVzZ+T$15}SMZWI8ynnCES4zdL5lhI!V$<@7fr7hG`_Ha6-a@ab3QKJ>~D zs8c%cmiH_7&VH+RnvUh<8V}I&=YUe&#_kj=_t%4mL~PRmUVA#t(BZs#VN=N`S&WWqC*0`HUAQJWf^h0sI)5MUGeS!cwCIJKZLn8$Xu913Nx zJYu!(WgcHi5`C^bec~m%>JS%Er@HK_wtaHChY!~1ydfdXXMe==XWe$%ezN)5vW_-i z6TzCi_^~E_1b#aRht`f>i^=00^10k(Prbbq=RF@`P2>sdJ&BmpBQ@`2@$FX!@2if1 zrt9PRtd2Q)VcjxY`tYfh#r?`(peIE;qWZ@@MDop3%I%v^hj5<*1&g2yr?U#L2A01W zb)gxcQu;fs-E}s->kzbjWj)1A1qC|tAa2(oSw1?Sm1o!IsmhT~O!AZ*p zpq)M`&ToIX?(%ufcQSXaZsoxb`7t} zA@GT$MQ5tgTom;0n8b20`Toi~0kWO;A&o}gU8!B_*Z0!cHMxCurhPd5(J14VK(oPl zsfMtkv-y#tS@_!Zyfel-9q;=295{_Lx-D51R%Dll@hQQXW$wFq3~fKSZlk_e@AlFW zKnbk=u$AMuPRY3bLeAiMLMkYnuUl%B8l3kjzG+ydNt(fK^*FBfoLk`07Tv|p4lmy0 zh_Rv72jh9l{pniOu5;bo_9hq|(*z_at5I$6Wl(!o@3Y@A3)2*a@~dP8Hs^M8FPkjv zuoNN?)L21Ir^1gITl`yaWBEd?OwZ3&*~K=5E7mE09_5V^Gt?KpK<@p+ZY#%a^wz|q zvEH`TxO=DV0(-yOd0LjE^DpOx81Hwqdhu~_;A@(PZCR?UQD4d-m`ZTL#cHDx1MrpM%2+b>j3ei8(L*rFLwECQsj60tH! zK|rLLhf$k=5Rg8a|B^loBNWX8HZqjPz~5jdHiCjl!JI~v5yk%j8Qe`HFV=-#3|pw`7k#QHVY#h+4g{sVkP^Ma z`C=L3*N%xE!$_X_RJ?b(tJPlQ73dQ(PieJY^6}e+EygLQF0XW2f}5nbTH3<*Vg80O z7M41(_sU}@J|aFn!@a$i`QA>YOX9Qxe%zMu8G?Q(`WPWCo}DBbtQ@U=@YGAruLkly z?jOk)Qx*7#53035C#n35+S&j-S{Z|*TgH1*9dX#?3aLLv8;S5>I5;zN=wOJHIY3^UFG(fSs*l`?57U&15nF**I9MXmzxDk@f z1_@wHKQ4v2m*KLxML^36SqWI8ip*a?pcJs?UeG=mqjn*DRRV!!%pL;zrD$!R%S14C z?YoryVkIAJ{nRG3fieOM%ll6?TJ|(F@uNNhbq7QNF(02S6D6M(n-38ND~;o5841<_ zE#X_6cNi>#5rJ=q8*?qz(-W>y42?3q&xerO4F}}|aN?Hf&)*k?RG)o=A_S=vw6SH> z{Ydiw8)jiSGlG$X1cED$wM|>gH%#?Ph8o-uX)bJ>p{G(iDi&tax5AGAp=ch>ij;em z|8`+2pL=D9OdJ&WJKJYrIoJ(Sof7@1K^vKpZU=q@=lkVpvX^yz=}DNOGA3_=ca!f> zLCeRX6uV?0KSYiVvmOfg3^1h1+^6tnJG28{Cfg;a z;e#YoYul@jG}A=Lgw>{EJ!Cb+y|7-S}4kJG~cOD4qfhVL!F% zX-%q}HvHFoXPy|ubmoP;e4E-B5lMCSzanDYo13?@nyEH>VB;=kCtm)5&t3RdUk0Y# zWtMdIoo~!G;qX&uWDQnWdB0jO{ouGPEG#PE(WYI=XP@^kFKx##v%dEr>q9tW@@{tq zGTTg;G^SNAi*rEVfrhs5_0$M8dYz{!@=fvC%mj7HB4A7wA z!53|~#%2HS0-?zu^}o@P=h8Pg*1^SP)&2E|Rw~@FOr3(pVy%-#k)mv+}wUb0MhXrVZr&>n5HYJd+#N#NSPol23e%5ttQUR=!?m>@U zjWW6mpf+PM0bsUXuu!alz}0z*S*XdrWma1OUN_h9aA?in_mlRe zkYp;{UxhtYV_w!RN;E3M)Nf>^knZmp0{PEMFvnJn{r244$er)PQ7(~zUt5#~LgIrw5B`u#;7sIYE&l70lQVo{WV zUF@eiPT%AoOTOuX4}m8DgItznR+uNJkY?Xiq(7N)Ol#z<0UP zn4OTCZ6B(~NQ2G*P4`DJbQ52GT+Sao7=bN|@;yQJ0yX@^UY? z(zP3iv!{R(EUI6=jQG2j4x9uyGl)g2aiA5H0}49~JTm!g1fK0d4&Ou`Vtws?wA~*PQmEg|n0bwDPZ1h4qrEn-=>VV_{{GvYvSJ)Q z3RgS@r`bc}vJ;DSP$q`TpJx?*vZYTp>5$rvxG~BLlJBTBaB$|ZlaM9Hw{)S@%Eq~i zEz&D9)6k11j%)7bPyZ9MH+LC0P)E=^T!iB?{7blzDPHkxzq4ifQI9X-9zs}rtvfzr zexcHCG(G$BzYyq$-&v5ZGz}2wfVrEke19xyhrgB5k}%SPku3k!i+v^?t9Ru8#> z+D$HJ%NwOyuR47qal!UwGxdiCc~?WO`Slf5An{qNKjN=7?vR21qZG0HGnNKYPK0*=RPnVvtFXB}I| z5BBJ}*5WKl!F%T~HoGjBE=2G@3YD2Q%CP(f4nl#VC_9u}W=~jOwkVL*e~9aU+n^+5 z{09qnHow_}albw1FIGvHxEm%a`)wCUkNyo{>%jhHHz@(P%-6*S_pb)uj8{_Qo6$+X zkt`BLVrYvDM6Gj=H>M|0KqtxNh6vG&4YLw6CBxEtqCbsN_M1?);0fjSaZrDACrajF zHk)SFm)bkiY_G_9ke+H@w!IXb97Kd^W*=*I%DiQ_W(qUuXf-|l^Z0Q{R_~lv_v3lfW|Esu$ISb9@O!b9h&;1 z1dI#N7rvn@Vp`@S{L`3wb8(>k53~Ut`;SJsa~yF%!@!cRk6*SA_# zG+6Zv6TuOqxYcioB86ou&4nu+YoP7#?azMPQ5pxF2UsVx2eiHA`9GTj0GM$Tynlqv z&#v#Z7G%9oK7Zjklfi&qp;R`<9M$i46Kf|@n@tN$Aeom@*?Q=I=sOEDV&4ErH|F|7 z#9RRZf@!Ku7P009c$g+JS@Q`}-tR3yi9A>~`MA7GO{4EATL&bTiGXFUI;O6~bmL6; z3U-0GnSK2`0DxktJNc0g&sIpOPdC|dg>^bvKYGPd#I*DtIwIp%#p0*pDKnU&&Q);g zZu_-rbB8vB4ay}v_=~YdG&L2gre8*>^+rs z9_jejAKV?_!rw@)1yTN1U%Zz{u%@Mo#kXmihvig>TW-3MHGQ(}G})z9#%T&)sH2`c z^WZ1I1Htn=!l^%BuU69@7ea3Vq7)F%3_*TP)kf*Xy^cSYeZ>~oc3e3e4><2pj}RC* zGt`Lbv{|flv8+`azIS4U3jF?%cF|tG|MC!EAZ(VT3zr@lY6P@4gIyen0(}OP2fL*4 zi*VFA6z!aD0IG2wU7KE+@YBj%0W1X2K3W}kk*M~Lg~|4yBLSv{#lvj}Kt&}Ji&GZK zsot6>R!)R1s3U)m!pu_+?yViG39GM@qsmK@HB0Hbdw)cI;PgM-9blsEi5JO}?^CDr z;#TGplDpIHqr?jJGt|2tY5pc;9-Gm*b^3>!@+>8>y1E{$P=cbbZ<@W97ey6;HU`0u&{A#^9paeVQ(xI~@3lr(|bNRgG zcdT#YW@jt<$KEk50HC}C*aJ%d&$L}NlI$E=a^{RGn`r`ugPzekEo<# z$C(W>Kl;o53XlLXj2;61LKWJH!NmZG(#i_(Yqh!i(_lBVg_8)BZi?MD5=h^DH#)SV zG!8}^fP@mXHIx0LyA}(!0>(gUoY(fG{Jgk+2+qjOE;wuN(&D{ky<7bvfzDGGok3ml z5HT%>rDFdyFDqY6aGt=Y;_$T|3ro9xLF_Sl5;)c6Bcl63N2Oxy_K-wC^)cJFH0`EFI1!?qN@|?zGE14X%mrlc*GrFsl!-VF zB;!NLTLbBCN*XHK9%D_b5Iu8{cZErGOBHtbh9)_RC~e z=C^19FGE=l)tK5V)oA7G+a{llTv$&A|Mi7Uwc+pFcpc=%76||)flhMdTqzR11X}$U;mMIGowxFf_T+Mg z9TD8;S5SK-`;7z`w|t>>>58;nzsHlg#uu`&|Czv%oL^Y6Si#s!nx^s}_;}f6+B{<4@y0JEfCKKoZ1TLL zmUh9iBq9N14zCl1wGb0QsVxafd>Vwp+vbn6E$o2yu`vA04Nf4&2!FdwWFioRD&ugM zG$-!}=65ic&t!)Z%$3aln>m0J_JD_f67`Xi5PdFRdg`R0Y|W@w|6K;g04>T5P&ac z9`fJWLPGNTAt*@3(QGbS=XKD>7bW%1~KSxV4?qB&VS-RkYWNr zd^w;K?+Nq*eh__PPbIL1^6`@kPLWev-_hBBw`s4E{a#bs?k+TSdF33NNctl^KSr`Z zQy-+9qQCt4l;LDK#vQmM4|G63roe%NCFF%(grckOeG~1;~uag#kb+l{&Ld4O)nKNt1%rwENqYB4S=GA3y^QJUPks8r?Giy zZI%IlqCQ~i%+&OdT30gt>~j=GFU;sfmwu4Kfge`zFRTLn0a<_LCa;S3np4atGY%#F z>^#h+<($}>Fz3fakiYcaO`U-WHq5{N+39J20nvX0BRiDO0{GzOC^j3v{}Y&f=`J4PHzv^6nbEIAPla{n*wmKYbe~ zRr@-QxdlIez$|(FZp_Th`sr?46XH6R3b>dq_OpE*o4NYyUj1q-Kp+3zx3lCtNB;cX z2SA?`{LPquV;RS0M&hP1Wt-9SzfAFl$mm1CUw8U9(_^*={%puML_C@?0)oH0Y?&WJ z`FCUfbuqyJ#@$0HD$H2&-==5*3SywW`=`D7&Ge>#)c@gOQ->t3-#<-Uddy3@Z-&${(DhRhB%b(^Z&^}EYb2eF#J8S`%}L+)F> z+<>Lu@307{#lP;=Z>HzBi8?x$`+wJ- ze*_4i00wPM_@5))f`03w8yC~0|C=&0yg~v$!5v{6t;=_q;(g?jh zX=kPW*t)pzio_pK;-cNk@S_*;nztdlC1a_`hjzLi=R})2Wlv6V1;DqWwoTqKdL#JW zNJB;MCWX|KLS~x6rQXZqp7FddYF@*s2n- z8f^0ahks^lM&m9t%JIpKCq(aQ331bKDI~N=XfjUSP_W6RcvQ`Pphx42O5+*h7itvy z^Y&v~on>tX1pIv}mKS`>(x-QrN9j63j9qhD{2kobZOrcJ&Ogwee{fT|EVN6hv^>{; zX@z%`q0mUNH0&Lv*{6NNV!w)HmutGdCG>3A!*~3#p*%K5tewKLS}LxVhWZ2tY_*7Y zYhGoAzY^yL>rOS28{aV=yj*Qt=tff*SD2Sw++$!%pm@dBZgePopY+Lo7sXK%L=^lU zKd&w3OkQ7pd4Wxp>noixC{W5#GJV3VJJG*vaIafSD10XWhyxbOIr6=LtEpC6a8Fa? zUTHSf*r54gh-F7JJ%Yg~Ap~X5-^P}g3@9U>nL3pR?k1CkGv|gGCk2aOYvp5J$Cqj< zSN%*6ufv+A$>&-sTN$5C*12!tS9xa>mz4s}o6CbS4+fmqE|*LI!pzroYv#VCb|?)Zv+&_rY*A;DGX z7MeWT)bjwI`P#iak&)zMJjs~xxTX-CJP0cMr|H!2JE}t=$%{PC<{=zwhGwhWaZww} zD`yeiGKB(ff!I6pEp544sJpRK_gvX<95PsPqI>RkhI#G_ zul#26KDUu$7U;ru{U`?|+rigygJa*pt_#|ETuh4YU|V((voW)o5nqjyTzTd^A3o-G zgi>cJo1;ukcAG8AT-h^yPFJFpfNSiz=_#Hud8Ksl+E_s(e6*)ae0k8;%8&2G_;>sI z9;7xSzG7QJtD6-o(#F|2H(&RupGY&wM+s(XNGvS!G0tJcDLc%hM^v`nq_Td%WSG$IsC|;srHi!o+_K zAzjFjGB4>XTmNLD7|>;cMa!-AHwqzurIEfDAR%(F0bLoY`K*JJWx!fR`3$kBA3mTb zAzrR4w(hvoO%cCQ`U$@M9vwz`5s+P0CVIDMH3k*m+*4Iqqs1Vj*M#AkbtD_pq~W3U zVX@vJ0%!v%Ka}q_dme*ThS$?~0KMkJd$^%alpV3YTD&6PEm(RoiX=QX+ijA&_LgUg zCRtz2W3brR&sIRlxKq+cX=ypGI_9~hdv(J5L063L>Yu9jjunjQh{22KoED0vS?egD zHCm4gu9AFsJPuM)<}4)FAC@~EocxYp+{y?i)Q%<)$i(>O`Gh>!&C)XSZti^}{m#5#z?^z~UXlS0V^#9d+}WI=PSfWirKyE$j?1xbDW73wy@D;Y zQq=)7s=Ro1PiN1VP@#hQ;Pht$qWB(%Ej69vxLA^txw!@J>-m}dwQvGs{+bw8@Of-# zA)}|*H$Y)zuI1ak`3qmyVG2rIAMA?>td$`9uOA>kEh5k}pRAb%w zQi$KuAZtslL9s$?sP4O<&{-Q^Y(kYkyu1L04X6)j14wl6KDtR4k2CFBz-BqHB%=<4odc9BS zoi^x&v~=@?jux1ICC7#$l^%>AgrawLRFq~T<#Nm;9n?In%xKmylkd$up$fca)X*`X zkLqz4xRCRRr|O)|Jk-x|-h=*xqM_rNsc_>-)3{_4ZPw1(4;gTdYMDpT=o6avMTZ8w z6d(^`5%2;9)%LN1;U)$xpVFe@WNE7{j?~r+j3$)bO%U((KURLhxnvQ$kONyQ2`C$* z`SJJpo7u(Ehg1u9Mi0baBKy4$^HI?BT{8F_lqFk8jXziTDNI{rt=|6_SMT(KSOLsj zQiAV=729q84*ylGG?IR2UWuL?qM(U4qY4pvUKJXw$Z+iOizYbHXXa%GX{Fuc9nY^$ z!i4B=Fz!VJ2EL9nC9r7Cf1|xLK)tzh-2wDZ6&#{r9wVt-!R|7XRs<2xT8-#Kkm@#W(Fz0BYI{m*~>&yU|WDcCg6XU;F=(d8KZ#`Ce! z^m#*aX7seu_*6hEoHj@-*|-lwMlLzUl+JlBp7h8Z?y!G0qOH$`7HwKMgP^JTv&DJO zS*&I|tCq`MTGUYH=7NmEt{Qh3b~zalU~eU}gIsq}V*Cr89rWk(r@s`PuZJw&#>4Gm z&r$HLHW+qsCPZhPRi{p@FYVu7seh-(Lk<_fW25%o|a5y%2)yFzZS)|tlG~{Q; z9we7txIKEI*0j)@Dynu|e^mweVwv(rC1WZ5^Ywk@yjB0>5J zvQcGN=Qgt*M`VsOe&%+O-b?kf0_-*MvlrZIcr);19Y(f?L1*E~A^d75pXb=gn`B`! z>uq@sbIfrn-vvt3P{0|)>p(3XqNIUG)wT4frCjAd)e=djl?<}`PwKMM|#E;3%vMqN*xRULuBu3cQ)iP52QhwMBkEY_3} z{5~(zdvJX1gHG1+@gC-cHlPxx&JYjGLGRypqDnt>1^QE3zeJ*{&a} zC&G74WZ_6#hV3V57CN(S;&)3uNE-<=hlE4qjbsuhPiaAPzR0_22$PReYQ>v}n5hAb_J0FM&K9W46_ibROvyFbb!DK+& zEtej=dgegfgLQREEdhp7>~b=@vdB)`CPeQQQ8wRx_RT^`Dg417+F8U5l%Usv@^30_ z+(p@t+u|vvpBd5C>y=&Bqg9bEAWL<8yZ(8(d4!^#lu$6TR@>raxkD61mi4zj%|T$(O%30AitSr=LB9{*rNFNzMz{0n57Wy~^6) zpN{^q^Ql{R7G^f!j0h8_0C5V_fBT( zl$vD)H`<-C!HVbvYbhi1pB&?;pj}y)ST#t+lA5drYN<`58G+=emDjQgrt0ofx(+Dr zbENkZx4_db#u0q}Xjx1h+vAqFwdvCi3)R7*LSY#^#az%USNG=TM&+4|zbq4bHpqIs zL+NVh6|6z=(PbyXzB+W9?kHFH3&rdUZ_7Q};aOMxTSK2xYA0=86C2Tj;6YFp z)AJ-fg+5p7cd=|jcXd@-v!y&0B2V0`UcKASH4o{ZZ0dM(pA9We*z2snugZXxYO`0y zHd~XOvgmM)5Xs%*e#S#Q ziQ9`sX^@p051%{qB%yN#o?TZx14pVbvf`T_C`gUof0kHWO3@REkCGfzohupM-Y1@w zW#os>sT_SNfj+voMZecVkiSM}lE>X{(=up)xgsN>bOIZ@Am_?46-YG@!M^Qj7kmwLcRTKn$j?Sqwss4Yqz&e>UD} z#I;d!l+bJoouuiDbbvP%w5Ec|((R`5LpFDVL9$Bn%l^C%}bOHxY6rJDbPBOOK#O#+)kO4 zoJAtl&{v3JCS2)tkTMbJL(NDU6{yl$yEJTE#pf=7&~s$lKX2>@`b1g2@ueObq;f}3 zzB|OjNWVHxIu+rkQk_*F__)>ko{e8c@UvpBJ_8k-8L!}E{1Ig2qeXOxrEtWBK55~( zjQHE0DmMNa9ZCERYAVVBjr-HINGOhlN%F*9m9Xw#|y2HHaqczX7Hq4nP zPseBA=JJrGjw6i%QbXO2nz!~kh)c{DaAS0aeNMEt2D)mt%lqlNEEeCp=ad z@~|}i?u+3A74OfQmmGq6Am&_EV8`B;E{TK8YtapW9o)6ZLlU9t;kS4Ec{0xdmfah< zqU#2lJ?o|xq^Rev+;#ioCuO6cD(y$qki3tRF0ckkT+QkYeJMw|*WgL%pgG~$9LPh_q8aQ$!U`;hZ;s3xR9|fK3WR8h#P1~~uLPO0VmXDcB7x;}~X6VcZiJhDET)Ue-86Q#)P$6JgR zMeig~H@wF?JPpo!I|$B6Nj=QQn`^R3AC)LLWQ>v(Kx#_vf8<)#u|>^!3i}FRo9=mG zX~Kh^UVCsr=W!8TKXGUtOgLx!II=m=HQFB>u;i6Zgftm$q22s5aQ?YO<_)s$b-qAp z=Q%m+lKAIy$M!8kgR(0bu%(VA*bIC=Xt^QZs{paJ`iun%~p-FfDj7$X+n-5<2ThTs}ngAao`O3w+bM{v!ubR`$qB$idT zyyVWcV+WAiZ|?9(wP-7hJDiukA49k`)84{>dMoVt2q{%!8C6@SvXy;)S(VC#(djIl z_*&%hpR{gK%ZlLz~>g)%y=lC<3K`ea^}K4oww>W`GG zVG;W~TP9@5h~0z(6_n)0ik>%$enTBHe3NY6c51vPs#9ZwA$Ql0r#-rraA(k*V>)c- z4((mW@6JDtDuw0^mw^;Qr|8yj4udZ zlY0}xuNw{qjaj6x&y2Fw96_wOPxz}U@PF$&=dm4s@$$jdn;0E7UO6xRF#O{~M@#pS zc%RAnEli3)A;PYr5sh~G!VRC!qKmgx*31+NOR` zz~pU0rVv9;{b}y_SJE|+SIb;Vwq^PyYY7tq4o~j^+B$UmdqH?u!6i(OoBr6*TJ&?8 zZ(a~hzNYXg#p`lWd=NFjhv<2nUhqoEynE!59dccWBWoqs&nFdvn-bHZemH8(@7(E+ zyscM~LZqlXSi>wy4k1epK)bkn9_a_1#5c`=^E1FRPikKq`OJwKsq^=okne%NzhfiK z3su$894>SD2+cB(=YR50ko4L4sjGRZxJIdLBC59n{Egif1HQ{By*MSf>RAL6yyl})Y{s4yai2uM-S6a=}r;Ic4M8}Xy(UC(`P06qC!1kqrK1L5{#b zf$Vp@I5&tOsaU=7v3^<_-A0h`7j1;?vV=B}8-xFOAdc%q5g%eEEtEScXcF|;l*f4R|j zfS^n0O;d|1I52K8Zm)%iI>7fv7$H6DC%1Ug8X^$(Ad|R9DL7f?yLrK@03TLoHXd@f zQ~BXo(@0-83;$k^t(ZJZhX?!@VAuhjazBCf=7JuDnnDP7$-7k+(C#=wM&zmC5oRT& zINy(uq(1P(SNK8OZ0#ZJ_0N0Qr*qR~;CgfUy%mA=Pn@M-`i}ZN$xb}MnmE2*^1Ur= zG5&3iJ6kRnjdsAQs0;iEBXjp}D_Pa!YnxSwnT@75?%P{mJv4Avw&CEJE(?B`d#48+#+><)CvKrWxgVeX{Fe38 zbcwAEwYQRc`sEwK^Sx(02VnEj%MwB^MPW9f0`YXX&xWD50@+IEDVKWf$Gtj^(Kn0S zUo{Z5!&qTw&0$81``>XdZzTCp-T6)UT5eulk~_bZ^m^|_{R?w586$*vj3^R&dwI1f zu208R=Kn=BDy7Yy-0dHW9a$=P6-F;F52QLeDkBd8#aye zepS~d?}wO|NMdiYW%uoLt{#d&h9*n(P)Bj$s1=EkueTusC`{j3N#uA{f^&7sHAtJ2 zO?9iCk8_>dO3V6Dg&glkQb9uXUhyYL6i0*aE|wh->yEknMwhLo2Vfh<)(R0ISaD4Yt4l_&M{PDf}PUKi{C#712lr`8t6^B3kP-RKF{W*O1S zHfmVntGsP;)_Po_PuT2?WAZ$%Y=PU9%oP?8Zg4cwsI#$CrlJ`}AEub(L^$X-u`+2`rpS7LkRUKu>9;`bKetkz8vAS#}U|-7r`>bZ5vK z8oG1}=euFDGwn%>*wmuccSi`ZVMeZTZa{rP;|@--B;#`nB+aq@t`@#n;~}vtYqgm| zGhLFMH6v#=N68ac#dF^FC5){+Zk^t92$E&8R^w_H66(tdDc995To>kk{%ozXPnJ1d zb9G~R>*|ZXD2w-4#-*)BumUREk-9b8y*Hxs)^kdi#Ac67eeVO5)a zr_)s(77q=Y5=8ziK0og>o2Yi8Md?{+^!dK0mopjJ_fpd*3J=VhR%Z@#FT)F7NT4jV z2mOwHw-`nF2lRgOw^Z(nO5L42u7tzn20B*Tyhtv>j&4M@-q&9r^YoMT?-#KWKbc>- zk!lb_V9r6gzHwc1N?@bKwPU70V%o8OZRF;1>&AKAJ~-T7>}@(mFlXm8DflmQfM^4r>lYAskn8ePApTdLIt zQc;uNByYO&AWTc%Zi}V%x&`bD5achX!Vj|=_#Bwdhp!dmj#atqdj#!=UdGABdn^z7j5(*g8s`pP{M5`tg&d%Q@2GTEBTOM@jm9gz0 zw|Qhqt!{H`^}6sz*{zi;cMcmf9{M%g&=<2s!-cBy?7{i}tGzD|hr0d#S3W5rA|WBW ztl4X9*=g)zL`+6Z_Utr_r;KGRStEOvA!M2CdtoHoWM9S-&5&Ia24nb6&+mGk&%eLF zzt{Kv>wUei>pu5=pL1{Lyv{kdpg?>W$@VGDtjw$7ie{4Ga*j4yb$bL=6bzSjV&RmS zN;AW6m2#u&`qR_3oA(Z*@n1}yvfSAr);GmIngp^heVAgrd~*M}>8V3Po1lwwqg)f3 zF_v<;7usNBTf^S}Ncvu(CtGKNmN@>JtE0zbIy&OMZ*h!rRx5~)uFd~A)clX6Nv*n~x%;edzn<$x?V zyAr|E_wNNSUgaLnd}CKUYt;accGGPtJNUR_#ybW%uET*flnXRCOxFUQ?3DnI?4DN%}x3QI5%Vg{6` z1|=kpY~1RJJk zNr~i|ZPud=3a)sdR5S$q#>RGH`)0q&F%^EK`NY?s#ztx3`E~`Uf2@g!E2Jgq(uFgR zmTjh*j3L+V8!KI^^`!fiT|zr~g`jj^Y13{^a&im#LX_l6uB>K^DC{Y+pnm zYqgAwN|-(e@;2mWrWsq-Yu3C`5FR;&nz4EuSOXxabpBHZw9xHNw$H$_adJpu3 z6M(EM=Ee&h25srZZL3D`iWruGjgV#;s7U;AG@$OaH+MMcR>&m%5OknCj0AwyAZ^O` zR{^1eA156!qx@gHZE(b&C!=UrKD{2^VS@aQN=5?KU}EGU&R4ME-jdEMDE&?xqMd^X zf6U3j-TDTKW6f)j@Dx3-hBW&q-Q^lDoa*I_iBW9uU@nFSJDQTN$KUoaq~V^QDB4N9K9jkbGM{ z05PQV@Z91~YZA6M*E=}n`D8blk4Lg7c{j?4OO?BolFkAQfE7xGEWSVT5FUlQoxaWl zIQE3yVx zpvr7!XQq+=5YsOj`bZPgrz_KZ>xHqEO6#sX$6U~D|4yM(dCcfE>^T12)PuCu_gvHSdWiQkyAF?EOL0?^6wH2xJf{VAQZO~s z5gjlA^D4GZYLJ1f{>6P``1d|`;HqHP>sS?Tu8`KGKD)3*H-T!Xe9!38U}(dsmrT(W z{PT?6H!b@4opdj*0UHzgc3IV3RIY0H-3c55jjvTA!ue!<8kE)}WB3gRTq2E2)_;0+ ztvGqc#R9Am;}N!1?nHxd{0+l#9~t$z$YbHA?&KHYto?iu9a(qPxt9um^q6?#vKA@J zP^Yb-$cj>QVC(SNR`zp;oZwPd^s8ai$<_t9J-ytI{ZwAQ<4xXr&qDxyI z!{h0I*?c~~fB=B`snx(Pwu{VF9B02L{715ImD(kzo>A_#!7p^XL8GpftP{RSrWP-) z7n4&+e~S$|?Tlos==^;F;k(bEHRAbEbKjp%GsfoGU!0CZB`#4u8g6~Vwb?LuXVBmV zg5Z8XGd>?X98%LjNYxG*@cv|`9Y6-{Bfo#-L8B8{fbE>&y#3lKCjsmad|)WZ6CWOU zqD_kvqOyoiDNQ2XZyJ?JkMs9-e<(8eSlaG)L_=W zhocC(WaMQwp{jnx0>Y#q#vk(LqAX$_{(_VOo<4;m>m%Yi0fQ+!%8s zp^?dRYUiqra0Tb*3K6A+t95Kz0CqT0U(fzXJj7ZwJuljK(qr&U?JbPdjpMr(Ewp3x zo=2hMYbWr+Di7#1j%oc}?xW+UL~nqCon8(V&2sCS$RxEU@2y=%)=SUQ>@%>jE2((R zj@$5k=9Mnpk?0TPFD7kzil-l|Iy?`U#$~K*xZ!i{N~)9X^0o|4d9oY6WPHtR8%rna z(yAaMO9RQ3D+|J@9O@1m!}@NgFZeot5|t;uBv5Ys@O=Ek^TJGAQlkYeRcPNeoCW+F z`CIwEbwsUaY6mG6+DfA}r`#hs3mloI7^AMp0X{fyyJ9u6J006kFc`mPt$T% zxoVxuQflYv0h+TEE*awF9zVBi;S%QA0$nSTh~8PMWXbBs1sXRsvIi(Yv7@VIoz;Gq z2+W*zTmiQ(+DB<{UPY}8)pM!qNlNJ?rn9lXQ2S6c<$Nfk7=SP6)mWW=TK>A@X`R$o z)afmK9UuX$qCocXv!DHPPOv;7#@;^Dw*i*jyY3>M7eQ>3&TXts+2|R4e8vHDi1eZS z@|OEy534%qe7fT3fwgFD^hlm8if<5454R$?c5f*dfUP=RWtTW+*_G^^nKe)9dTYVU zj^qekhst}JRoS$8T>mV0qap^aJONj)47w% z^&gW+6x@3$IqCYxKeqT&G22Y7PqF@2RFEc`*#4eF$XDSXbXyo;VoE_5OOqBspF)SQ1_&E#q%m?#)gxt7kOAB>QpA{p1a6&oRnp zjXmh5+BI9Ird)J+pK$`%NDsR5nFwF8`TXg?A>+?O^i=)zP6MbyJMBM|;v) zz|kOd-B$mycn?%wu>gdA*eF+4A-ci7Upy>g8L%f?3=LhEr)8pOK6rljeP3q=qmNW? z)9p?vwnS$(lHDqId5>(i-h8b&GnZ{j3y#mwZ!XL=j16W|99%3{_sX>?4;ura;}Xm|FRD`|@`*1Z z)}t1=Lw&XP8Jf-DI?|+(7VQ*lt?dn2v%)V7?B0WvUCDB) z71Qs+pbqxaNZ7URDwfz37iBAZ(HboOXOI~NOiEnEgP zp{6T0_tM0_cuOaK(GH#2DFMP7A!XZYYZsq&^LroQjkLbmrl@9JCBH}}dIy;6$x=xM@`s2@))dN1|rctAvOv^((o}r`XwD_n5e#SvclEl#eA}eWAt^ zIkCtel2I)Ra1Sb7v7e{L36?@Mf|;U;yG0_Dl5+Kg`WbP)dn==A+-u==#k`bfHlpS0 z&Q&%yaDeZ3((C}^Z&m|!@9`iS?Ie#nW;~+2-xJAHDz-9C8a2lKBwD85q+4n7<4y#y zC^h58-TA0vzrSrBr<}6|bB$~6Pv7}myZSCv6d2i3j}ZH4H+Ie|x^1km-m;C89w)Pr z$*@0=7+|){yf@Mu!8y$W2F+tOpc-0DvN@DWL)bMg_h>KQVC?n$h}LKWxpZI{W)%s!RaU99$tPWu7d z;LadhWyo5vn5o{j{I9!icaqeU2qn82 z(Ee)tE|o326+QLWRF=tLdv4M#I1zL7Caq>=tci0O*gA3XG$uwE$aJ!3u5)eNd0vJJ z4W#PRb1(XC!Kh$OiIW6B-Gr3XfkxBAH>GFEx=>E?Oa+-AerVDsHg*#|9;LPtns}^} zkhE*M<_fr+Wa;HVR&VKRlu9sb-z>J8EU`cmDW=SVb#%XPn2(SCsag+RISEv;hXF z9NqQLh#+1=m=VoFHA_p|^MVkv_>zY~>2Hw~C{XVME=_YjOh`)hb-Y2N7*-u&kyeQ- zm9wq_JclQ}ZWvzQl{Z$W0&CY=!>$)R5loYR)F|+35nb$QNnDo`NZRCv*#>I$RPh9AZnQuc7?{jA-x|wnpsP5wVsVhpmmx{u~%3H3s=a#bsBy)Z{0Jdx#oNlD5 zTD8tzAq=v*x6=A9#^GO1I%@pfw3e*z%2=6+;A$fvrO7g)6++`534+Lr-8No`d3;3sjSCTj^VR4!9S4uIWl{DQ~U5MEH4(&aG=o<|>7# zUURKAk&9H!@8$miRmMc~B7A|ot<;>zjnOxbHNY7bu=qu8S&#YYEyt*zX@codF>0Fz zExcNx0Z1ycoFBJHy_COxz&WX3KD0T7z*X3kJK~h~#Yam_qJ2e9(%Zne7ZT;(*?~|B z)u#Z8B&GklfLZM3B7}JNTSBEb+)~V^WSX9zmRxeeYp?#BcbO~)mh?8!gM?}ohPbEBVaMY)SSV~K`Bi+`)- zU&VTlI;tr0SnwS*pX83+9%~mY72e9){%UZOBu=OEn^ne`Y-@nMIcB-i`4GSLjxBdm zDAB9fav`03Vw8HD%V?pmo^M&S>K9oHXI)cbjM=nbQg z6FJ1#kh3Ldv5xV+FY|++88FlMq5Q8<_z@+&r`i6Odi~N+{L96v>E$>05D7?Ycgg{f zthucqauUOU_KWbAX?x*fTyY#aypSsGdnWx%;}!TW9@8W|?-&P4w8UxxgL` zJ|JLSCo41SxX$bcE=s$(I&XHxx`gV=vamD6(W>V@n=U-n;32YHv5&Xj^pseR1_|+* z;^zYb{BIX|&M^E!RWG<$?tN`vEqN^iAoHa?ceyd0Fj>D9!}DeK-H1*rEAU6t*A4fw zRl$yTsbTt#`*oVm+lZ@#NtyvbNr- zNR&3^^ItSHo!t8y8&5HO5mjO1$poVkXTR&^Gu7RbSoLu~M zk38`EAyoZ5&52MbKmb+o3c=te*tp)Q)j|FjHpTHiCOT) zba)M%X@>e&6FM^;2QSl{-k&{(-ZRxCO-RqqUYYrGsoV{c^clC@QF&C`dvr0J0Ge2>EZu(Ibo~QIHG84RM+mhk5O`9d@P<16hI$$u#w>cox}cx&8?KfrG29|nlKu!F-LOqVKyTSc*Op~z=sYL$^Tyyiu} ze}RZY)mW~$p!}P9D%3r3!xxMTJ)k-vLfd}JYyPoR{=ag_^bm={_#T$+0*krdhhUrL zly4kW@lbVwi9@5)wqx-Hc>$ly2R-BX-w3MKsGi>q)EIdM(HOEL;J z4vvH%iL1j70_r#-rRL}Zc!7l9&P{=>4u-*etD`JcYgy<^S+w}2`FGpflBb#7caAbz=Ta3pL+iw#leT@yoq0#g! z*XA#mbHLiSpV`U=YZEo0Xx@Rv3f5`?W>UAErefb&cprt0bye38hit~ip=yb6#D6)% z+#}O1<6?1LYt9Gnz-}%|*wOk1qxXh_>5e*@yg{d4(F++%*cO;oo7Koi7Hx)+z^-}a z8}uqrE;zr|^+Li+;8`Ue8++8ol4D9Z;|U?@;lnUtq!lX6p3k8Q>az10k40TV{mYJg z1P72|WMsIf?){|}k#G*JHN)k0WncC>?Hx!N_!Qij2;~>LE)M`{1wmXjWx4mhqRMRY z!ktIeBzJ66I+gJ|)hSnCTm3;rtc}ZOi-IKM*1PVu4Cn)^E`728PMRleHnx`vZeRV# z(@!`$I4dJ{w5+~R`~H=c4H!otVd4kKX3`nqjPr4*79;p*aly3L6N!_o0NYFHEkQqP zU_lcT)I)K++#QRuBDsYz5jGwE9l_x(D(%4}NuB1kzIH*Py=<%Rt%q@_)uoIY(6=l3 zGU>wzumA-8q5bWA89A@FYnUClf4@}gzC+p>M}8PRD#q3W^qeb%VTpAARLbmXfOgkoc@p)Z+3MsV_Var=cx=*K5KFVS z0Wnx1dGf*$jN$ixId=E5?6*8|@Ci(2Dyg}e;_}!lg_|~wpWH~2YkKJPs1BUOkVtz z${{f|q@oI3X_adBuQpft;jg0}p6q{pM>PXVk{B(=UdPT54q*ky-~QgJ|L)5BcYl^> z6vjxm^|BElr6~0L=T*3~`U zWm_A?Z*c-i(4eSmSS2s?jDNc(v;1|dWm02RKjVgPL&0D|*k6OH-qabDquap}{%`&F z*R@YaUKa}p3N9Ty$cS?Fr&+{neVZ3P^iN=)WAmW}td?-VuIR{vh*`Gps=e z@Ecg5Z*KbYk3Xk8Ie_2w$9=#z!BQ^X{r`G%VLbb9EBY@NJz?wqwR+c^%avQXg@jyF zUc4}*mipHdQ5AKOq6X*m^lI40slGzKGh_1oA0Nndb#+0H!2YOsF+_GU%sNw{B6Hsr zAL}OSKwPt8j5Vh7q9bMV%<`wq44Ruu={JtX<1K=H@QlGCo3co=@-lvCZ)aGoYHDhZ z>*?v)egFJE)oZ-ZZm8+G-TPacQ{TRQt5=$Y$K##Gm8Rx$4Y9Rgr=bHH)@zuiQw*O< zBhSs&$_uD?=JKZBn~}wsJoOh+_v`%d@namtwXFAzGmT8}EaUnLtYeGMBc<#1P z_c-mmebSY=N=xTfS=kopum?hDoi`M#a(FH68s6MJ5S2_RKr6b}G<_LpHl#Q){Jcg7 zy@Wnf!@(Kd@V(t{{ODeQ#u;txn1IE(F5jDiYCfG;=#>1d$r4SiGc!W%z3xL;r}&ZR zgV2%Q2y1z~7p8Ld%$aVy`J0bVqN7dW$+5AH9XdKXT@s_+V}Z*{i_^C_q40Vh%RBA& zcXx7M&8K1CKn6S*tF$?!{#8Y04t1P6m5Pul?^ZLLSAR4JjuS-STg9JcG{ywYL=xwp zk*?_4=Pc@(@6x-I%nZ8EDN|py+ZziH_zuL{;|Oo7tE;~km8PXtTMdz6@C@YLyve9< z%$-?q`>WH;w5a&U(k{tdqtKJ>0al4bvO;8y3q`Xkqh84=@cdOXQG9Q<=oj>%5p+)C z_z&dt{-dN?MmBC*yxZ=qi`#<;tqg9E0iXMx>oR5wB@p z$SPXEv%>zj7zW2Vs+X;)m(1rRi}+~~XbH>=Gd#A1V?UACM(fV@^gKdU%PRv(Jx4~c zyDQIjl_k$p48O_D2Gc8fWRgp7ci!IS<6w<>=VOX6B2~M<6Stf=)FrWtpl|?&d7USK z4xEfU+c5XIA+ikj(PfvQOULjFK^5~1#@zBi_x+*C(nTAb>R6&dfMa(qdb}%n4sEUQ zPq%(KVldUeAXx`hWf4C#yM&0;edp`?y05p7azFV*#h6TgcD-i_#k7jt@%PB+>@+R) z%G^o+hTfZI{pQ{v`cN_IvB)H4Sgm+w2AmUeH9S+GBuU; z==o+w(M*vPHt=C&7dAd(Qk- zx>$HAsA{^tPM=fA=%Nj`Wk|P$M133S?l%YRI@oFU?$Z{> z@%;{g%6Xe|eQePxC1>)DNb=3HdY9=YZc;|YuSizO+PPK{wz+w&?zzaBq`_|gqDilk zvgEpeib=o3H_;Ca6Kn;&FK6^NBo=vz7JbMK{}TQJ!`P2`ee=nJ5CBSm#7@fldwF6V zh6*#gV73?A-7kGlp<@@byqre*G!L2AdLYN80!33qGhi$)=2?-;=pw5UpRPd%-`=MV zF5zRG#Sw&lhpxI4UK{>$=mr*G$r5BVA4p5=%Xv-XZso*HFdjH2%s|D>(1nAfKwN--)TAtY*_C{*FG{VFSA{uWsE4dvp%w zp9N(u&MMZe6Z$pvW}H}FJ(L`@v0<(uATF^5>_c7)1)+l)s>y+(4SHd z&j`=N)rX?DrTEXz3wjLRBZ@H>e_kZ=eY~RUbS~Y5!Xf1)rH14CJe1eIczY|#>014` zZ^UPdA9R_UtYwm!@(0)Rm;2saY4B{i%XeO+!`xOhOl|0|CTmM0B`C^*mYQ^6x@M$A z?F?*kz%qN$8MW>BWD1cw&Jmsnie#6@;`|GeMeQq{)@60JS8f;8}*hwNm;HKYoY z@=qy8NSy_TnE8nxWw-)AXWP0f<`KQt?WBOL`}^cRs+%U$MuJHErPskP!`g0+Dfaj! zXb#dFD!m@Q@M_btsM1`eJ`WD_AyUF}N5n9`+t3|cA9k2cB_7Ju-|nvs7sl%i4d(3X zn4`ZK?d>lZ^!ArvyA&vOO62~cn)O7d?*Wuy5b5zdTwEqN-3CL9yyw?FX38!x$Rnw0BV} z#;lSwt;JYzv7Z(Z93?mKl*ZT#hpc7S%XTr6wee3Uhl#ttSe{RWQiniZlbgm z$zUY@8xxj=5aj&8bDL{uk{+bBdxn9qxO=o!Bpot%r5Et91Wi7s)}p}wKVvW zSGfEx^1V$Z(diHFHQ3K36dAsjYs|?ydwM-Qy*v^#sREHjp!#Qb^gHpVp?@CJklNJy zS%>k4th#@P)BSt*a&GgLNG2O;!+n#Vs)Wy7LqDzqoLrGTS!uLniKFNq*D~22Xw@xnI2g zyDF9OWI8HyDT)8EQ{us4$!5tflI)ohE^1Vm7Ols_QoKX-g{U7^J+iYe>PzMzDM{uB zVR1x$E{~nvBfL8~pT#SxwVUjv`BIyN`@q0Dw`P|3XO@2Kqc~V2#Z){l=1o|@s|+db~TpQk3R z_pG7y(+0iv&xQGJ7p*Xwmpoo@Tg?x>>Mj3OazL5}XdtLy{O{W2|L-qC zwG7lFo0?vI=Tr~;{#2N0dS0Vys>e*uBSeh^YgZxs&!Z3Vt(`GgBX z%HRJUeDfBh)0kXz^^d`QAWrH#Kj-G2EGLIc zEGs&ED)9S2!Y<9wd-E3%X+x;SV*QaV#2wmkoO zp=#k^=B5oh$tytzZ8<35Oc-Z=wF4~fj~|_ZCnwmt`uzod3-C)2x6Ei~DW9{oYy1A? z6tCD!uebQhMGViwy~33quA1wdxE4l%0-yxyWk@Z>>q!@EG^EK69gdNy#{l2ic=V7bQ)%*QOy^QV9A&8^g zASx&+DcO|=v8TFHOTTq&M2=R)%Gt*)&d->2X1;yfd7odg!S>3P_TfUm`Dr>N->3I3 z&M`8cq8B%B+Y|HT$!=R2CUijAxAp)lUp+grjn>j~QPQ_I+3wJxLv;@iYT+M7pCji~ zSL?oUY!z#q=ITTQ%+vEb=He`?oT#NGYUe>|FGIPMbZPo$*JG97!iitEfqR)0wUUL;%g1VhmbXL73L!By9;s^z<$e? z`+)PA0(&D2h$0(pr$C`DC!|i>4B-X`LPA2~AxSY}A4tK&vr}%_X6nPyLWr!N6l!R- z%S!qNVRhMQHs0Rgkk5wQTY2tNa7E3n`k$DxJnc3y`ed|bLv=OV+xkbsXPwKO7@3*+ z$};9TAM)m#ly#!I!uCi_;LYN9UU27We8`tZchb zYR;XdkkxmJFn|gmkl`VOB+`2c;DKztKo+J1~EkE7F9^c|2N=AdE?z zb#;>tw6PZEcmr(8$BW<#9~2YdtEUhhgqGnk5MP4!Ac-R}FSD z(m5uF4e9*iZx-3nffVTHe!QS)Kwj8du$~LXPJa|%xsIkB4|&_3qr?d>Ac|ow9YtQQ zasdn1%UaAU_AuZ=qOprQjqD!YcI0|Ntbc>K}EtCiikn`#;wGLPjp z=a=(CRSP;K?BhM;s)>nP(&xfWkAK_GOg`ut-W#0K+sE8`>`wBhAa-s%i=dp{eI>u2 zSA(&Xd{;$aB<0`c7ENB%8x%ep-iZ;pA6A?hBKl4=QuIRxj>xf_Zb0GSSHPD~fLw$G z4KsGvHV{f|=r%0R5939nfv4#tdKH*ph9DH8-bcPeh?&#xh_OaC;8LPv!tdRaO;1nH z>+as+(bkVkvVip{4J}M19MrlK6E2{FI28^q2AQAbg?ig)iL{PZE~qF&H(0d&`h8dK zCMICTWfMJ(h0riLg9QmSpQ&RY+LAswjeoLdzfA3G!F`M#^=#}=C@sm}sHS+~URW4r z^K}r@qw28D(!&D4Wt?{{qKg?NIX^wPmWXykhqQQ^p3aA0tYg5zm4AT1UvX14*G_8% zh@tfWcwRA3e~T%~e+S|JkmLZTSHa3qA1+i|yRGn;65>)2^Lg3J3pZT6aPbavLsr9= zW&KRocIDSq&=6M!=NKzn1U-tzJ|(|RQm2?8@b81jdF)!f3cvcR+2HL+h>@>f=HEN4 z10Acw{&Hn;@v8em8hukE?HLO`&%%a#i}GVty>n{n>j^}pn_KoiMVEw{PoHqD*jdOX z_3+45I|F=Nwc0S8L)KX)&4Nn9O3JmI3;H#Q_K;t_dL?$`h#nO!2F%gz{0enjhu`1c z;v0R%&dw)~S{7J_T*c*u>PNzv_(t^z0_1Qn!ClNC;(G2$wsZUw@BB5`O`BXQxTG%;!5xeDg6fDNZAr<=yiI?EuC8o~I-W zq6@-#hk6zCAqySbR1@P;eH%m45dwTcf*&r2uu_FV~e(V?}a; z1y8o*jE*{gIJO#ZJ0$U5nbt-Ifa-#~J|Ip%epGR`iJ5Gy4nS^|ybyI;hjzqeMD54> z`)oYNdK@KV<%!L{Dl52dEOmtL8vEfbH<_z`BpnpMkw;V~WD2&s442xTCn7D~Al>TO zSB|)7F%QqN4ecES1}j}w@B0WYXD#qo;ty;tja7F&?{3&h;M=!qr{qifrzPH%mX^-r zf=^JqEOwZ-DPv6HqYs>i&j8T6XoQjKc&JOY(K&mTGA*W4MP&@(@lt}G|ls%}O6`zCTw0CobMn3o<#oX(6f_1G@;^esmln!@fR zj`!c9hpX4^{6QA3Mlq$quLYqxvg8Lla~F3soeL(Rv)m3zooZ82u6xZ%a&2jCrGWzQ zyd**m6ow+p#vf`jGyC;0t|$RrXJ{=3FLbmA; z@3v0(TiqB%@Am%5O>R`3ypMd1bAi?XF1M5Xz-kRke2T3Fna3-}MtdB;#^Oc};6(%4 zXUt3R8+RP^(Aov-9W^@U+E?7AZu*Ke?%sPrr^9ScJD4OvswhU>zg`9Nq4_aEgoWi_ z9E5NfN{Jg{V)&Ab=>C8Hkzn{XG&CrHfK+(&=#iMBVn^2B>es&B9R{%(dhg!ET}QK6 zI_p7G7>Z!y6x;AZ8AVt`-+giC_{iJ7+9HqP%Z(LMXCW*C4}t1U3ub)GJ%PBjy49rQ z`}@^zMIV4rNmFhQnX5LkJ@PGA>j+w^i^eMJ6ziq)Mq{`b&^XCd(fcMBFODk1Fd?(s z&ri)*>RhxuZ= zUsADe8~Q0IypowkSeji%lxUE+QPOBS-t!2EOj$U^SEjM1Cfh%=cM?=Tgk!vBBaELD zBZDGXwK<8V&@X+Vk6V%+G{CBwe|Yrt7I~RY=FArxycs!F6}chj=hDXv(tqT z_G3$Y7_y?GqNLKL=-tr?Wc8Gklyg8dK;;m!5s`cL?Q_h@$x)>UoxJ+2MahAG#&7(a zLG;n=#%6EEP;-TQlFi5a*~4T)Jk`ByahgJ(08&Tz&KfYl*G|lVCyHN>*YyZcg`y3+WzH z*+2kwi3a%3sCnw*&~@>P^5_33(5vUedgJj?JaV&p=MVjF-Il%?e<2!8Xc4&XN4oHg ztwovT2)f!O0l_qZ(3fu|i0Eq#MPB0yph25gsf(rT;pL@dA+b^2-LLanr`zd9Ttbh+ zp~DApD2ysOF7;p~nE^b}#f3v6o-y?z5P%$SACNP4gs4A#>jDVGt9y>2rlj!;6i&5h z5pw^?*Q~sbB~di(5WXF4LE8v(%#aF2Jh;@(rCsGIrClDLe^$@PC_kC@v(I`9`*pAL z(vbtDr{`krlhTPsq6!Lmr^lUVNKbpb2u8TbnblgqE+riIloy^Td$^)2SjxM{=j!7X zDGaWPzNprC1q_bZ8z+w*y@rwTrfIuitGq5>Z%)y{a*>q-VUCiKR6ZOW*8V1oNIqM0 znNdwH0DQgM-EFZ57?ycZua;gyuqm44*9h?2ykShDiex09RUyf+lyc9Z`qN34*48yw z0|}6G4#|YI9M}YjCZ?!AA&DZ4Sl3vMr@4}BabGhKSKg9&eDLq@^v&;6_DG8=jm&mp ze3A6cPziV@*abL;S^el8mBO?`en3v!jrWznwxSvN7x03lX%Eu1=wBWzQq*ShRjKKDFqKJuF9K1Bt*hbS|g$3s}X!YgReuj zLso}i>`@2Ef2Ym$vlEu{S97Q()0*v|MGW>p6CU!GnDpqOCZva%>)>d99tN@KjqgI) z(V^!4V=4DWQdl-tiV`b|C4!OiIT?1IxA{O}=bef^a5F{Um2~9M+h|L#_J-1O1nn=9 z^bb(WC2PTXOk1=Iu@t|`pYJZp5@sg;0epNcQ9b%8uLtVdiFZ0`%o~ET`8oC3%kAI* zSZ{FeB*S(fr^Iioc#b+`+-1P&C;h(VM(eT8=QXA^J`dyi>Qwdxd5RtnjEK&`jKN$D z6rtmb5uPSL$4y?seOzRxp(^gcer~+s)h4?cy5z6*bbX@%6=xj4^Dq)jY1=~W)U2ag z`e?mZ&rti?_>LZapRv^?)Iu@gSd$x$iwt_#X`XLiWGtB`qXWyk8S$o)oa2MT3nPc{ zJoLuoO&!Olu-6uIAS8o87c0k0=5K9Tv0|VT4UoO|lWnEM0!@xUS`?|b-;_v)J?{bf zyXb)kiMyPuimMpWSBOPR0v04lP8HP!vJRR2m+gY>a5o>NHOc{52Ovi+78?1Q2C{lYy5GfWA%3j%~suB0ipwtFkGl?CNruCx;G zxoK?76>$e)H@;j8_s0kD@+XduUSD=(I8Fmi5#^$9T=^DpJFOd0lJ@kd`DKp%CvTiwRY1ybyJDix{GvnBL-kfw z{{MM8QC~R496td>d5vxW0wgEL#Wl2kBnOo}9zh$+a?%Y|;x%q12ikwFz}eyE;eiDh zHdRj1IvP3PZA6`M45|0?``Z~0Kz)-m#SUwT3#Zx@(q=_yN3Y*`g=6prDJeo2pCC zNyrc!_HEkgTw{}8@`3m@+W;7$bkDh=k{)(jx-|_L9V2F@w6|O>eO1@N7|uCu?Vx(V zi|Df-Dl5IizuCSGYp|%&{&{GHXs;Pz>xM#H8u2_Rp?|^K+X@N_qR3eY(xIVa_PimF|;KibMlrmkB-+L$P03>XrGQ#|}YD~c?5uj^4zLe)m9n1fu z+=OoP9`7k=g$A06O1h(mR5Rv$9Fmo{&^wBPL(4|{N+^Q-yVikqU*X-=GAjSOw1lZi z{ZR25>ygN(0B<4c?b-1C>AWap6yDThKj|-sj9I%K{egF%h^|~h+#13o zNSYYs{`FR&yt~LAYs@3X=yAUUs$|=VYp?P!6eh*B0OKX18Az(5xOd3*eHUM#?)Durhc%8BEP)Y%rlp1|!X%hj z$zuf6kD)KX5~e(}@(XX?XTsjU6m6BA06;r{_rD`un8yov0-h5^7s(FmMhDIA(>)w3 zwE+oZU;&}U@N)!~D}&~M$qxFws@V~w1xjikp^B@+C%o*fK6b|EQR7OrmM>TS`wyk% zbeU_#&V&4si2X{JDc2lMK4WEL?LJStbr9b^Xb+ zfO9sbJ?!l4)NhPe^}d!EM4H3UvghpQU0$Dhz&A0pNd@2zFy^60`qv($#k4G(z9Y@_ zd+RU3CDCMj_BB|=jyE|u5{w9P4!|MrJ7VP5L{kM!_t#-P`kg&EdWcA2P_8!7t9GZq z^drI`@C?;IH|d1hgxNmOlL0M^oS);Ho$e)HGou>@ub39==)10Qn0zZ!{_du1 zkqmYHCETqpDHBo->t6i^GMGydDJNM;oi6^CGp=;R#T;;3LMMj^p41TP$^H%4|K{oV z4j39uZO-e%v40*Sz?}FVB9Q>v!ob>;kr8 zTi(0FxXY$tk88P#`Y>w6FC;JoDwuDeGMv6V-|(>e3|+qGnt)kVhxc3emRUWHc@C#b zWg}0XJkggjy7Zi&@62wu6$OIa6fHEA;WcaAu*r9{TY?z?(bWR<7<(&b~jxbCO?QhfizDpoD`^{j%9MuFDy zbd9#HTk^?ub-KFGpw|D~Oo^K2_^hXq+bj;su=VBJPpXW>lT zz?N*K*?X#Ak>+bFyI9CLNx3&XDKpyd#T%l@vGhhE7wnkULef)M9A*L^OK84Dp z9lze@Uxy@9M}KnLO0D{(al7W@fQ8UfkKzNfN2Q@1S>L)}GY0E_1vz&u2rKX+p#9Is zLDK%*q{_#=6?45>zIF01GIK5>X6p@%OyPl)@=JeSpCjQvcNNda5&NDbUV%1b>u`{s zVpjxLTOZ{^cyWuiwl)-oEMV|~DP#XQU4{&PMxY1da;~(`1eT~O+AO`?JUbX0{YVO< zL3=u_>Uwdo_i~5z!sGXUJ_TLl58)zzJT&@1yY`{E`)TJ*wev9@WLvyp)&(~y6kR*7 z1;=oV>IO9TkEN_Mb--g5#xYH)>^SGn9P+)PpV@ACE#1jYrj;bJQLKDTvGI5PlDvb= zR?~lMd6Vkhl`QbNnd4s`{JGLKKE;O4V%A-kufJc0wv(IuXObW9RKrIl7RZ1Jb}M@j zY}BcfuYG3&UPx3HyeJlfwY5iQ>Zk|$J%-+mrG zbMkdjfn6JHI@?u{8pj-?T^nl2R*z!6Z%1=-Uv2XIPQA@91Y@+29{_Ck3a9vG(`Zn1g0^d_xcCZ4 zwR{a?w0(FfCWGe|Pu)}!g8ejlgmnJ!R+^elrCn;cTw->zD}6>#^!N+h z@>0UWbo8WEsSQ;{4E2vltBmr;`-ZwFC{}^ozX!(3t(gxmupL!0{@F#6fR4Yw zMdrSkYGK^_WvaE_NZg2VG*D{!hT5I{w5M&EjS|jG@MHGI|FxK3#K-4$gMq!`SXp%BzUz9q1r8Si=Zzyss!xI$J-*TKBZ+wvkMwD|f$UC< zJkQ!TL2b(XC(Q5g?611o;@-mp%?LyD04_InKY6kl3D<~ZNVdx6eESj2D`gn=eNWP! zy}Nep60^bhRBxs62h7RME4MFI_|8T@wa%^$vGz9%{uU;vn_sI~_IBfc-AW`?4R1kG zulHLXl^)2Z;`3@7M)qI1XlHc1%zIeReJR)<{~_ST=ctFf$sPCkkd93$Uf&oAMZCYn zHP{1Mx2+8V0m5_YtL;j7#w8Gw;$qsq24nyE@B~z&T%H-khWN#gZ<4N@htnqW)vL41 z=kkKn4<5nyzSCjkOj~7satgfM4YLI;@n5R|=v=Q>tquuhKNl~?)d~Q)wm6t{?aPgA zbwm7F+w@S2x@2xs&Bj9aB>S$6@zH$31?5CdzJf`0IwE z%3Of2y91u^UI6cKRDT$*0gH-qpPxD|RbGK1F>cLAcUPg*>6+5}e7b%JQXdWcuunew z?-bHn#xR$eiDdFEv&U8Wc8Fan?&t4Wqoke_7~RsBf*Ild<1tBtNrU@Nq<;v%uUJqS zqDq;fQ>okMemwMv0<{fv4py0kvPdxFeozn~KRfpATLHpj9@!gmoUhnj01y7dh}A-m zUqhim81I|V+Ur4c%R>g(OfXJ8YJZ>umyB$6ntlHKUVL83)s}!|5dP~hPkYF{Hbn71 zBdpBVAwn<4<8i2f_p7sTgG&Z*D#;_D$rfwFMTY5cS-?7(OI(>5V4m~8h<0EbnmYQ4 zf|}6qQ%OrH%x0(YQhU&OB}=JP-9G9})7E)!|F9JzRJEI{Epp z`JV*NYpR%2<;6Z0At}TpwZP~84?t97T#}S(UHv*TI{q620VOpFGz`;3ZDook#KqL5}yV&V!8uF5u6z!AY@9%r>UPk06hD18EIRB4+Q2cYE)zi}bD5T+- zrC+?`zOJ0pjU#d?%3WL0Gw=#t(JU=vxT`-yUh;)|80Y4mGbI@rT;0F#dbcDfumFw~ zY;89o;WSLw&AxDf!wlFDXqJNej#s736)OQ=LyU;WKW1PR)NklMgp(D9@zygNpO za`O&6Kn?vfCsii@bbCqNR9N_N_c5zc^U|^O*Y*94>OyTAF~B?d&jABa$Urry{pwIu z*voZZnnRR6d}NzXFgAnyI<`DwLN$UhiLIR5KK~Q2uyYhojNwSJ#p%3q#O>WBf%$cB zG2uwXxjXTrHl!UO*niE;`U~(G)frU_dAfiU?dsexPjoK`ob^EKxJ?XjY@AHG=fp@~ zTIxbV)(=lRE^o~3yjSa?;$S*f;9fc68Y0VUGEBvp5@C?F*ABdkH0ZcFr3$2SeVFT* z&hIyrulbmp3vz6@rbb)`PNR30){^SX^mPxd<}?-?`wNJnD|eWB7{~9FS_Yi5dxTaL z-N1Pd@3OsoF3$Lc=BZEO>zomR{V7@VWrZ83;AC*X9i_O z8a-srEX13{+T1@o)3>VyI2b~{B}(&Kdg=E!Ed~_W4qX|T*p)rd?ln!h88(MF8tAd( z_u`nT2l}*|kTK5H)hpffpyy#b9$t}@1GG&1yiuNpiHgVQ-&Fo#^#RK$b2a zE?W5bm8NA1&#)&=_e+iV3&#?yAdhlwtOtZZA?up)@w=OQG_8E@m0BYu`E^BRY5CW{ zpLs|zW5WBe5$nWb!(v4NCZ49cTWLC+FDX+zHO{}w2leRwU~Mbl%>-|xw6}3eE{VjayOA?WL;4N%M)p3 zfC}>FFx%Q|{OJbKZs_tWXYbi4){G#?;n8#0N@Ipj(%-?P=#1A4%r+CPi*Q=Rt8ODK z#902=HYIji1F|U2F+HF4Nekb79u--^b#28sjQ1KSbwC8=ALHeC`z~Ni3jc?693XH$)=OU8650V9#mpSBN0;C{b@a!?TCnGk38Wz9%Ux_Zw9;DC7{B=RiH zZLK)m%#rq20tZ;&{sS{@kN=v>P4>a3%_#%saskv9SN0UD#t)k;#a`d(+~nVOl#Rv* zy45SZ_x`hOXqYKf;iH6cP8L_G7vDHiwxte&H)JGwiggrL&rC7od04Hf9V-$p$)AUp z2O7XtBLdX3f}i5I>CY;G3==wG-n-iejy63V_Wi0mRZH@Bx{5Wtwnmzbo4`1Q3>v(= za?yY*fsBhXpVIWX5WET83iL4_$OBmdV8bj5>8(;%6f%8+@;pr7yhd-2s{5Yblfosu z9MSGP0u%6DpbsTBsJ2dLt=SSm*b0!VYy~s#D?$9wW+DQ3>yyfM{!Z9BMAjL2@@{5e zNv6TfK}n?LFOWHGo*ZrJ*W9>oHJ!VyQ^myOy-|rLkBg?27k+=C>h52@SMt?H9j$$o zJTzKkoZRm`N#3G#P#E8##>fS#!=bFXXVaqk#S9!M+F`$gM0{(LPR)i;NA|nzMoZmq z{AO-))_u>&%BD#R?Fs`G2jb=O=b5uj88yP@WjPwwWr3c&?#<7Z0)$bL#&p3VtB&U& zkFH6K{#5btd(q+VlB{l5IrrdH#%HFfxHc=rMmr;c7ZnsqZRZksc&X_#bK;d5tR2Zj z(+tjU&;yWUDxya;Sy(A%?J3xfGts1rhSny71deGXI~+i9_4^jy51k?|k2KGR?y3L8) zZpRl!Bo|%xN%FM{jy~YDMRstk@>G2CjbHT?$jSAI$K4*N5)i9mp0>qNElY=vyCE`6 zld5WkkkH&Lw0{R>@Z0o1-8zIH2c&?2YY6B!=LY0%;c^$U-V`2D`bA7KO@7LZkbc7C zln?`6%P3<1JwO!YP`xGgMiIvz27P~EOJe=Ipvr%KCMzGO2%r;ay7+iv^fPr~+~e8i zS?VPo1BBvPR0*i~bXwV$*BTj9DmoD)OInBPtkfTYdsONakbPS~-DgX~t<5wPmdeT> zPX`nBA3~3uLbFeRSh52mQ~{R@0$mxXxcQJ4%|Mp+Ym4ta5F>=&@uE;^2eQo~bKE>> z*VV-l@j#64{k1JNTp4usft&4vU6>j6JrzaqIJxK{*Po~K=QY^TPXW*jJi?3P6HKQ( z>3?$+Lt-0*5~|lPn6$LF`;cl+gYox#t4XfhfZEzDX6^h}84rlzd3*BPN*RRX*NH3}zzh@hXE|`HuOH9Sx;BENVq|i0oQ5E1+Gl%#-Ct321{B(dhiy zmN-y{el^{;RIeK$r+CR~jcSc{AoWza-q)~6(fZ!J9;TFOtYMxc3JHzUa$JL+96|Zx zS$FOsj~FADte=-t@Fl?{*_kBKyidOxaC2Pb9Rj~9WkZ99%CiB{PG zHkv4UU)~y|%h#{#{}XSC=aV8GfN8NWryQ}7r@zX|Rl4MIOo6@k9s2^-<1W67hQDjv z-u)rcIBQbSsRJm&bNJx&@LC$I!U*~yWEKI%80RZwIjV@EkmO&u7B>VWWh)J0<10`kN zE1PqLz{;T>$;f!Pi_AA6d1Uc(cU2wGkBZ=koq>W(eO-=-00SWS&K0C$sxzpN*XzQ^ zk4Q}4bu3Y%kXVdGw%s!S0`c$1O}oiVGdCj?m&$Ng!1hT&sS(in+-8fMn@`T*4`8jG zJ_DyEs`YL37X`xs*MHQPBt^sK1ito4{1yV4?tQ-AH@&Y+He%HM=B<3-9miL~3uy{O z?VI^`Tk>+~1F>&FzYEuQt4nJ)fJ(9LNN4K^1jDH?`EZda*JeUF028pMwFK{o+ zh^FKvlX=W$!>_@fX~I#OUF|{d>HFl!PBYHtg?ke$RTlgvd#l-s#?B6E$3{?*_lPdq z)?atMhdnu02Y&cFi? zq(Z%P>K5D@-eW z4ji#J7s;Sr?~8xv5PVa8rK!V4i%VtBbhT^KHQFi=w-EGG#U1H6%BU8@>6ve-qj=!l z_za#0U_=+v2CmQp0)F~@`3JpeFJmI&BKSOwHKlhD%)-@1#7(^>D|9Qk)oBJ{g@Ns; zBYVnUdtE0W1IyN^Cp&6Ni0mI(% zeM>oEzOezzEnV$fI>#sCglXs4OB zOa9bvAy-e#$T~*VC<+tENh>A$6r*appVf?{HdP?TN1GcP{wBRV%{*(c4=gOF;qYY| zCudjQ0bGtL)#=;9q_WvgGQZG5`fJ3@b8Aa$nH8!2i`aUY{3~+yZL4*Utk4HB9=D%TKEcwH=zXlP-;>PQ%TcZWX9tL zW2)R6aU(?wA>Wpsy&502^PC;aN(n~jD_mzHoD*#?}5-5AbpX$MCqh!bj`O86aO+5$U*kYf}*JzzMN0oEZ%z zX4<3Zf*Cmo9-Fn8P{C=J@92jLK|2iiyO<+c)GuoRcK@ z8)UzExzzRceX3zbbkf%J@iS*)0BpzHc0IaP@85YJNI!khib?jAmInR{{qHkD*sDRL z$e9+JT|=(tC2RI}*w|V4mg89^Z@X2ezn3Gv1xs-rf~FOLtE2_rVhpEorp$SZ z>(O0HqR}PYU}Ao~qq37sif$kD(5UExFAXIemRo3<935=t^^gMqp7##|64DP$;Ns^J zY(pgG2JR#;)s>3+g8sxU(=X(NU{VIYRK(}uV8li)GGEj6p?bd{?9Rv6E81a8k3L%8 zvGjvJRswX;&!PxawZtM%LJsn7-40j5a~0?1JJ49+AaTuPXoyo?_V@hso1B( z-32B4{EWR2x7rT2K7Pz!9D+U8Y8i};coX<}7)jW0-=;rPu8Utm&LjH~3~t~YsF)*K zUKl$~Jf9H5<$+opd#+};RN@r_@U<>=^l0M*u*{Fo3Y7`~Eb3AB$MvLE48M*y_iE7k z7b_3o(Y!D-s$Z*UQWbbDNdxx6n0+;i33*64H)+b*d`$0%MpDZ#|`+ z*cPZ>b#H{&&r>vKS<6wn6wZDJOciz@?HUtgGZ)Yu%}XkYJ|jm4x-;&?3??DMiL3ow zxS_~P-^HPXtx*e(l4B$q=xttHn*4F%&1L^HpdW!XQo~qJ0(wvPT2!l*8x@*jqQ)-` zUSv_)Egx+6&l}}F)I62Zel6GD+eDY3a-Zgn!#qKHWkY)<2{XHSC`;|Y8^}74y^Bn$ zjnXLS3CedsmF3N)eYsa=PEvP>1Ux-3(x-n!XP~o637Wy&q63$)Ahj(8nqV0=W#*WM zGGfGVQ}*p63x^xkA+J!-jAz^x+Nx3p9Mh{Ckj z6R=1B_OWQ(nZ$sfrTosd4{ge7!IbxDRPS(|Ts;Jcf|m0!u@7Z?mni8iK7gd-Pc-%K z%dbBLz-ewy2diAc0lV~yQM0q1jW#klMvI6q$QO&xM5e?&c?l*?huF}eBQ9zU)2e;M zD}=?epOy`K=C6Zlm3qb2z`dho7St>MWjLbsx5$?tgXTXHiAxY^8Gt<=ZK?zr*i@mc zxwP;}a$rWLbjYjs&i(s=Ucil+N+GGLQ$VC2GP(=za$k_Qc(Y|&QT`&ITF%wyR7}Jkp3UGxwc5|d7;zfIV4w}>_DbSp5EgtC zSiRpH$8XA$pHt=+&(NS(JkncTbCzGX|D{dPY~y;FUgH#m{cdvM;+{(=!oe`7kb}nb z=tSV$-E*FSt7V?0UPl5;@Xo&`LX*hLsdCo{LAAolhX=P+$P{1w$E&oaJo+}PVHn>D zhY|1N$6L2>>^;VqxVcfh>daZA0-w+Co^(!pdwTY)5&wy+pQnTzi`4xu3irB`gy`e^ z&mYurTtN}idaFQbtt*nLC+*{!)N-ePpTx8?%9g%g0JfJ27kEXOAm{b^WsHGLVReGf zrz1)E3THtH_*9lYI(KI$SwFdyHwGm5q$+t3e6osQM)KkExepR}#`u2IN{gN?4E`HL z^%|v^{K}(Aij@hI6`6wGggpnHc%U~{leYs$(Wf$^{)*Ys2VsH@@LOLrw)4HzxgNIl zFXk(?t8c3~?74-wRuH&+B=N_*~ZVjPve9ocvCYIoTujir3mRMuwC zWeI9ya>@%6E6K*fn;T7B9(M|=UO)3xGV5HZ=HDTi#LV+{TWmgGwsB#fXc(v;cTMxhTsk>+No9w zd}avWgz>b!jI3y4lA=wXdD#N$%@sq_SECCIQ$S9K?4fCZadOwu1i5B?Ob~XGzG`_P zDt3n;{eu@ZUR$-}QlU=4=%5o%$_Sbrn!;dCY_E15f=XWso^UwR2%bi4`~H&{t#fs4 z)T$5X=5fjgk);^#i+&UJ6MWU9S+ypXN%)wUCwkw68XvtoW2MN6TI`(ouvKfXmj6)7 z%Umnh>tTCR8#x0V#2)OkksU9n+JAkz>x`0zv6RMnbo-|y_eS?dIbg}m`1KXg6x&}b zE=<|8(Ue61Pnl;}Toh z-$-az!d-;MC{%%NeO3)#WMGm=$PH`yoHAEDc_uj}S`dV6^pn>I#KgWCEMF{4c_^rS zqW%8;WY>@4J@#Toi?3ppXsE|NlotbJiWwzB&W>Yh`Bnh%fZ5OCcC9WPxfM)x%*1>1#43NL9yN*WE@V_P4k3T3>%2t8wLC zSE&za)}t{=nf>u&Fn}oNQ93uo&rbW9-4WlrMO_o#anM_)#HB0`mvRQKD1BtHvtnCD z-AKqlEdR1s(5%Z>MY`o``9)@x&w-|$^DWVrkO*062;4~3pRMf9_pDRO@NX#h92_fr zQ!kp;=<53|W0GQ3f_9glKuseO6 za2>U)aiI@ND$W^rSE~{i94FhNd+laQZx74_&K1qpiZ9CsE>`g>1kO%vbAPES^mMV- zZ>mOdc9N>07_vNFFiTVolvu3WuY9fUtB~qt&*G)hF5;1@qk6uddQ{~r?(aQbbyt&b`5;Ib-kv zR0)Blgd8&3%wi|$ujZ?jDHsZ06fpqQaQ<_9PlQAtu=koRja_Pu2LwlVO04fHHcG8> zaWkrS0dZ@S1zgbs(gZ8bWKEkdm2KxAWz}KiMC@HCN?8r)$+nEi?meS%9n&u+7D%dr zwXq%3fg&-~ei+T|FTvZaXGIqEV=NMmtSQj$o>T`GFXus204|Hw*?jVxPeU3jiq zw)`{Z$kNZW+0PZSZ_wl8^)G1F3i)+bS1xB2R+#>6wx{#RS!^HQ$VrDL!s{PdT_=LD zGnoPeyo-y}DI6FxnRuG8|1oxXalpO@4p;%CdT1>&2>tB0qn_rU3Q%f6$VIFb#D( zj>T`u0}-#FEnR92SPBuYDt$y25|A&GG-^&>M)fU!H<=uJUlu1NQ*1LJ^-0!EcrgCd z?TdaPiUF`C<-YsjNpV-3bxbIeS(LZIjESO;G2&+D+1@UF<`2W?a>zq;Ka2dAcEw)# zt3N=2q#sbPLHqj+yx+3u5}2EIc!=o;yVs{RlRizH?EoA#hRAnmoMS|hshl1hT^a5I z#!;-`phwp9U_}Y1G>0A-%Ps>3JdC!^dg2sZrJOrPNZxd@vA7P;e8Q6?%JgIc-_{W) zxqNzHtwz9-A^Lo&NuD_1@8NhTR^h-g}e~ok$P_LG)-LN+i0`MrTHi7NQFh zT@Wp5bc4}5BYM%3X7$lutK zy|-?=*jcQDT($Qyod(=rFM^a;t}Z7Rh1=)8+3H!*rF#h6cSxP~WDQ0h_**Sp%`d7i zhi9dQd_x7uKqANjILgRxiU(Wt|9+i5zw6yN;&V>ju4WcYHghelXto=TCfiUJ{Yva?CFSipXi@pCOtY3aa!_)^wd z%Q=cGLE@H6_#9>BR;UL> zv-1CExxdh;%Xg2R5@|R2Ti)pChFth5Wp+)pIZ2o4bT;o**B@|rpGwZmWECMSApF>n zV~{1Q;rGo^f2n%^D)57-u@hN&Ygfy?OF+W?fZI^pC&^^liV)eLvfF?rsQ;|jfbjO- z>`dK;*)k_3lk{a3&@-BUA2&Wg%HAFE+5E{R-MBr!w`;pt;Wc`Hdpc>BJ|c5Hce8hp zl`__zoT?e?=hSv}wYVYc5jTFvj@kBN^?kL&s^@VRG(ZULdDn5nbDizIRDY0uoyq?~ zt)4n9-0UJ_y5%}{qxM&O%K4pvr!go1LiAg9F<|S#v6E}D_wp%w^~Y@+x1ri&zwT2y zK|yXwJdzZN+)w9;1b6F?lHq!0J2ML|Tru=h&p^Q+>+#;xoaPBy4w5%}p87IL)H*vm zwOm1ry!Q^g0X}C>I0oFLp@3(;CwuK#c21(LbJD0-i&8p2aBT8I?|MhUo!X@T6OYq1 zC>+exx)VNpVPrqg_{rd4>O95}kdL7MRosF7=2zpZNbj<%gS5&0(AC?*`#rwziw(^Q z(^-FJ8I1!%FUOtlCT}k5SBI2GxYA0AlMh@=H ziO5-mvjQ#;eBzP6d7Dke+KrDBy)Ak_+006^q;I;(3K^Z>PD|aQ!fjT|sjB~mhHTvN zg>KMk(xh~!F9@H@`XOMm?;SkX{2Uf;Zx$BkAtSp1~iLNnUd=y`GZPlVu-x|!YRLF4Hd)Jr(} z_K}&mPv2gwZtN#gyB&qnrDzNz>6DP()IQ*9FwGVMnJ%2OWX`STDKHDdscX8y-|*GmARAI_*>Y0UpG zLClH0(gDs-;uLsy$=88~pI@)y4}C*-e7B=E7_MpNEHjhl5F;hqfAjcL#N_~SulC(# z{BD1*TeWzVqs67@gTeUCZ)GiaQ~hY$p48a7D8X>C-gI&?6Gv51V;iCXk2Y`geYF=C z_&w^=qq-VxvvsT)e~Ch*>VUd1{Y2H!GvR?6%T#Ma5Ei632`{2??OU-O4-XL!&zIob zr(Y28gX^{-1j%*Vfz0B~o$$ePR#sNY`}3wu=!S_63x1>b#+{=-&OW+E#Bb95TBtGy zRl(d&id?C9i_Z^S$HDZJYTJ*OYWoSV2fb>FngYpCjJSMeeC${RBr#DpyCIJRSLtyd z5A4-P2zR;C#;S!1Ge6Geitj60M&FgV?@8flGqc!}6H5!9mI%mxxOO3zNM43ntq{qf zUp=mATY3^+RzZR?<$mcSO&DPIrQ>y}%fl?P&MWPlDNlZ^CngC?%&Gl>9x7V=!BiiX zS<*?B4{#i&y_tn=>Fq_!p&lNm95jYfuDKl)cja6D;CU?~3(w{5O_tC*;QmnY$0}}! zG=}ksAI#Z;;P^29u|p*Ys2(@P9T!ffn)tlC_qn6v%a2!Z$GS6c_`Z8u@JK)B(jGsB$U`TSHHI+=!pzv7pX7l~2gq(wq-wRzf zMguqS{2#;&?^qHhdZ<~{1zZ+kX3Tyqu9$--ijVSLCdNleNiiB6hYGZMxi0=a#J1qz zQ&ak@<7AH)<0mQ|W>8%mH|-Zn5<96L~oWDQ+n1f8v9E3~jSs|Oxy}^ZpFTp-~BKrn!{PWZO5mnQ-FPHw3$|12%C#|I^;%9E)EL5MH=GTgS4`vuy@ zZm;4qN_3$Z{#U)D68&b%o^B|+cDbM8#-IHm`kBJv$ofNL(r+BBGT|a+w={(de^TKd zFuWH;d z9%`-3w6Z7gc6p~Ybv%VVuXw8Q$KEj_O@}36A?0@_@sR9J^v5O4!D}BjM!y?z_y)1r zOZdj}G9pdDcUvhkd3m&OKB~sJ`!&dVC+zrYnP5?jtm^nUe)$l)iZPk(dWJ~JUu(_Q zO0w)#fyJku?ogHbTVvd;&F2^yo@bVQWwOC@I|_Xxz8II=+i_WG1uu2GAb65oA^e^E z=cyKcb$^9muD7DUJflDNUg2e;iInD~qQY89(3selyr^L%PLQYx=UA*(9>|U%pxF+; z#n1Acfx65NgN`n5`dE!(w;E+iB6-DU_Ls_ZE2%NrU zncvzG+WSGfP(>ISSK6++}#vzs{)tHvuN2UQvR?3-6SsDj~^6DFtz?CD)@<*3B%9HWwq zZV=j#M4mV2^i!N+8|ievSiH{)Y2Vuxvgu+k`l7e8vdW}o<1kyff|oMG?pVH}GREX( zq_rj8VVyTpld&I>$d3rtyWh3usgjdE*)cI4pm-J8NXB99!n-K#!XK{F9ptIgN<~E_ zO1h*$md{1PG2)?6=zDFW!naW`9^HKnCDBpt8=y=r_+p$&&}fkkqwZc8aSTIxdwWl{ zeUgotiCCsh!k+A7G$tSEsf9m#8CC*9$>EfZKdh-cO4*POXA8LtlX(D;oxm?{`^`|FKQTpJEdO8E;?jjqwAh*MLhbnU-W){ zPH?T-|K?8sP!FNpag8g>;bE3&JZxYs6G$H&hx9ne)>dqLptnQlfNn6Ss7fr+YOXPQ zrN`!>Vup*#`;i*}eegsxs5M-P0u6@+3#nVHF8m%oxT8{=#g zTHelvcYtXgo-Lkn=Ap9Kj(=-e|4a+oLH2oG5vC>+>I8JVv*5sl`T5_yHfVp&LQi5b zVmV|VJV~NxG@?~krl}b|_?PK%jf@O#F>OK|q&#HeK?QG2YO#|ou_JoTvZC{TBmmk} z2Azwp@okL?kFMR&K%@9pdj*(Fv`nc9iQ*Om#1x#IC?SwU$DQ9hAf-NzGMv6f?@Jd? zN)BBveMW8aY_);kOB*bqOKZN0`TBE-c1o%|Mh8{j2gc1^|Gv<>fqc#ghq-i{VY#~V z&*gqtrb_*(6Y`nc2&HiedqZlmml`b0Oodmb*}&O3$c=gCU#z0St0?Cx9-;dCow0Fn z?urFXXmNC`N(x*+UFIg7}0o4LFj!9)WZA9-LrFM5q)P4 ziX1`?lKPwe6IMopdg;m)jI*0>M0t&tZJF1&&IVqtyKfJ=jybZx6{JCszxs=ABkj)} zw!nB*_SdBqQ7a1nPFn{&pY}x|gOdFSoq(9(dl}`2Z9T}lni5fxZ&}7zUX`Wr!YJtf zf6NUGvJ&zRdF#32#)5|xn*hdoTvg8Sd=Fow#I5{37{)8h-gyVj4@he)YM0x{ch)u3 z3CIlNCCY@L5O>DYEnF^T!J~hL52|fysX&^qBO1xHVl-a;{-bYrEHQNT)5ostrGWU6 zC|14n9}G}rbeMP~Da%LNhc5U5kBtlzbF-Mokw`D9uO|bzxP8vhm{(i_<}PWpSiSw+ z_D}gst!7*NZgb9$K{p-~WZ}bKUC$z(tkD}f6j@}fOzpN{_5J0c$kP3q5_Q#OqsLyD z7ba3^6g)vglXOT<@GDEw(|r9P9e%&2WPGajS=n7w%JO)LGNCuS7OF#L%&s#k@j|;8 zkMQ@qV!1Vl$d}P7nLYlFbqsN;vB>wPx}E#Z9v&jVr^dY3(+m6djf$FvCI=3uc$}Xf z;kX_#F0@8REw@XFb!*L)B4jPD^R8W8W7#0rtvj?O_`tn5hqxCNw zGT3aYfNemSZI*9ZZP}xP*>>wE*rIy)F|NSFZ}>8RD`Xs}giw8);`PwzT@;Qo8SJ{T z(`VTt#0ei2D}85|r5g-etP8nqu`k;R(P2CBezQoj@_*ZYVFz&M_Z(?$Ok{M;Z?yTT zN}mHA+&p4>SeDlaIm{ccR0g>YbpW%6j3>7%fA6%gGP#sXVnL5cJ~O|bcEzcfKI|4q ziblJ+#e1GTK;@N(qqO58g7ny9Ccz9EV@=8kZk~6vwW7Or;U*oO_@y45Ih3wdXMQUp- zEmzHL{IN<=43@{`3NH^B3C_Q`Uv#Z^h~;3&lqlxWcFI=1A}o7DO66M3plD~9hbL2NMN|d62^Qhflh4BB}rCmWtw%BWD&RAsogFGaKZF`>K8RC&L_N7g%RcBuAyGvbW-B)dbKBdrdwMtaVNf3d7 zuJ3LoNG8qv`rH$o@ql^Wd}-=>f_w0K3A;cmH$WNNY1ucX>0_lniAmI3@@{1}8LM|! z3)lOt>#Gbx?k?dwa!rp6M()of&!(sJ5RR)`gFzx@7r%l;$jSdWczdH+R-$D&o+xJ=8&mWvdC0) z+AA?`g%osJc5O5fh}b9Yfio*oJ~;@o9k0(See;c7K*4{939mHC5p5X996)>*AX83Q zrZ!I+PH%jz3w;`(^oXybt!Y=u#N?L3yn&tjm5|Wi6f8wIZeD@#=sl&i@o;BzHa!NX zpd_Pb#+GWVZ=Wg{>(Qw4qTlJ5V%vMt%Uf!*YL0ZZVTT`1$_QU{=dsB&r#=2z^m@I+ z=^>q%7wp=SS9JdZUoTmDiIP7gK%N;ZA(DcV`~44~42lW38`qx}XQPW0AU2r37S;4{ zPjl>tXe8??ANoZBu6Qp9Rop<$8qQgbQ_Dc+6pZ|is=Mg^h(FhYh2(>Nu#s%SUp`2f zbiD#SG!Fho8J`$B2$TBKEjKzo`1hKr9w2alO5~Lm^h`SJg(W2B|yiMAJTr!Ms_Z$Yt?t+E2-ISMX40P%XP? zvsWqG>7jY&liR74m2s1qS3O$TiK~LC9BBT1)oJ9~Iv2aRX@8_6nxgk-lE7 zdP=q!NV%6)opY>$Z42Vy5VO0Bh36uYoSSO_n{6OP(J@joB@-Mc*d9*CySb1Igehx@ z%daJ=s0zGNvZm1vRqWAL;vA zRL)CKB>N`BXP9-Jy;4b0s6dh5|0cLc0w><35)Cg#W<90^Q&8{izTZ821mk@nRAo36b71l zUEl9VYBirRM@WtQw+q}s&>jt6>P^WNiuTeb2g>wPgBI?YL&d06qM*Xl=FdUOO@nm7>e z)$mUK$QMPt4lLLLykmvSKx5PI1`F;`%T~u!)sc@uf0pI?D~4lp`f}?;Rnbl3Wv6?ktNPy2a_6+FuR))fso{vDAsn2})P z6we~Hic;lO&TBEoEmK2|O1#q|IoKkZGWP5^c;toXnj_Q4&ZAHkVL&`g3*}`?RpnCw zH(40bQVFZRGd29l{E&NXWxdp()t<#O!&AXPOH?~EF**5XO-*7g>=@wAnW@pE4b+NU zc~vM8OsF-sB#VVB>v#TJqo4L=2YEk#$|kiByoB!)h1U*LTJF+8Bxt0NHFvS`lt!9v z9^KlpvN5470dqXy55Kzd#)CvUu<$jrXjd62V9aAGXy)bj|Iu+unNZkHIcC`^>;hGz z-XDyBaZwB0LpA&KWX{>JGS`R^)l6pK&I4~-bBZ*J)~|i36VHI;!`xdSfrX|LnhBVW zm0)&oFn z56OyOBW&+8y!7V%&ZVdQXh6-k<)@8PDy1rRPs7t%qE6HnIcDt}sf2jPvJHp8wLw%i z+6go3Vrxz1O6BR4AG*=hhOx$8mP#nzN&9B>0gp>-nn?K@;oQ$C`SB|?(Jz8SHg#bP zYmRx$0ZiN*?79O!B%JtWfoljA74p`uw5i~6kf#lvyq64i>}e;iok>Aoa!e_6Q-xW( zcWKx^C`MOaJ2&|-1(nX zD5%QuK{dnGJ}fh_$u+!SdDDoDTbo2asrdfbkka0i^mj=jVyb@{_meu`5_8%hp3oS$ zrw0I&wbX3f`Rb%paXL67DGm*v``KcC2P-=;&xK+}m3*%S5mUh?f)(>=b6QHyxJU^} zjij7BDA8xrOP|%SaE1f6IPF)0MF=4Z*Bm|ma* z?E|n;Bzi2;n_V6|Fp?Llt3r1xKUVgcfl2aZpxm`v1!TUKdcjTWwaIfNlG#oIf6OrH+{ z>6U@K+iap2Qpwmn3TID`+iW!CNT2e=gU?4L4na45(Pp2<4%!dl3C{TCXodKaG$Kj* z-fD#GelD^0I}s7}eQzO=h6yDiwaQyfltIU`Ri+Rv4#h%B27aOz-`CH96 z$Gk?7$O>w_XWyzpfyksJUHD6HJlXOWzuJT+%~?|Ll2a@;iqF(b0`)&U_RUM`<0)2h z%oy#$`(Z3inW}{VzrY^5#Hn<)%OlfLZ4<&NA18)_eNJ#hZyJe*+unc4&xtbBCC&D* z0*SM)trH|9iP#w?49tjC637sS9!3ZRDm%z@{qc5*{@s20h0&OJ#Ob-OAZH^+_c~I8 z%!m3KXLU(jld(PX%TKzN%K0?{*oc`T$mey)cM-WA;C@^@*!bAklsAAXc6S+HzWlg? zt`IBDt~CvfiMjhaX*&L>UzQ(Wj_Tly_5I;Qmi^w?()ytv5=lx1PjveNj2=!+ArU^O z5|((`Mnpl797<)h^6)>w_&152QbIBw-&kd7fN>A%+-Yt&NJO(89~JQMq5Bp^cP0U> z;-g7dXROS`Zd|wa8Lc0K!FauwohO#`f?!3IWf}#;Uo}}v;1bSQZ!>|eB{qdAe}=KC zc-0b9j6ftjEz=F)GGy?A$>VgE03uyEwC#TdN|5EB#^YhhNYOnR&cYF*|9MfhfIM{4 z19WWvE(gQgl1%e;K__`%+v~j@U6QA^#y1h$uc{bnc{7l2d3VffrwF|FA3aPNKEHZ! zxiCvT9puZROO5u9*dsB0&_G);9*C0V&Oni=8H5-We)ZJ^QY=S$TUXKK1c&2X`(;xof_Q<}+LPjFCLNiAXRNSp>7+YOIrhMkby} zq0(ZKXr60&K$c1SsNe84bqs535$PVL1=g`+R@xJ249ofIJ*IMl#Ki%y4E2XT=?lBv z5D2wCXv_3XE7!rW6z};J7xgd6HjK>5OPI9=D30O{)KJ zyka3^4^Kea{Lo6()j>ELJJm5LNVX}RKoOr96#R?50GASkI>8PHp@6I8AYi_P{4)KuI@>F5+muhwjQZY`_xL~cCt!&r4Pn4}t^JllM4b5qmPlVfcKy0JilYbDFx zst)rqOs)Z1z7;aGDH$xJykTA_e$sEMk}$Kw!DQvZaFEB7p8b=z4=W6P2dMjufx>(p zUOU|rO`!O? zy+Usb%UWol3lP%9uRsv+`Frp@h8|G2=YSwzcF?dIW6-@34hY}>G;h|83~c-YVt5)h zx(y$8%}^6|6ew97`mClDus84;_ptEd3AqxS(^!SDQ9LvRq;ENu2*v{&=-EarvH!Nz zJ(a6HcuRe;FCVn%M167aUeR@@KGJdId|^07TLGFZLh>cSQ}JEM3*bPEQQr?(PrDwe zh)gO)OqVi%;%p7`3Vt#a$!Wc9!)_mnEjB_qg@KYyqQj;C94yqZ$KQR3SE+~t@4yUS ze~Ec3SN1MJPrOt>(lk6nQ|QOf$R%1c6o%flYUxrkDEfyML&{X3{!duT4-+~^GJ@#W z@;2O7N_OlFhfRTLC=rMTL1P&qsJArRL%kpyuNcgSKI8(S{N)EE_|4|4zFQ@;)n`AP zytQ;$5RSK(v!ht;M&B9KTZ@U_x-sl87e9Tb+f<@4q}e&zMYJ*bfbv^n_)Z#VVqzj& zb-jw8o7^A9+!zQ&Lks_R7(+D)yG1KQNPib+Jr6yEG{|SRZhDi zW_-`(A6ESE9ykHkUlWBTy{f*S_C3iAT%a>s8c0<&;}S;Sw%UlCV!joxtIpJ$@o}RTt#iP{#L(X~B0-Pa5%y44;{}D)l#agtj+yy}i5~55YXt_)jSi z!ai}-YykQ=;JAb!84b=g!1Kx3wP+tlCJir-nqo2`egV1f<3dUGK9p{1wle~X1*7FQ zJaJ|z3284_CVp@|%s9BNr_#dTRWM)jr^aJ?XC+I7biuT2cA5)mwR1Y!>VeR0g<7!kFZSQLmPg1K~Ji= zN~vns`nI&oZ~m|zTLXU%>AV0>;JSUOq@TQ0d>37;9S|0-{IaAJ%7B2VdV2ETf zn_-=QPB-@mgyDIwi#cJT(gteL<%f}p&mYcH*L;TtLdQZ?bYq~wsIQG8Dy()Hy3tdE zC3p~u{DCIef^~*5Nqb&;Eo(=AXdmzUxy_}g#)n^Q5NRM(;SUa1)MLg;tj7(zSy)D{ z)NiMZfA!4UOu3HX4(Dw5@jSB~Q7|#dm;rhaMUHhwdisD4>o#Bw4XmrYc@w0=V~w6b z6x@FOs+E#ruv}K}&u(W@sM5f0_S7^?5&#Sj!P2@fs&o$v+cD5a(&RX1b{7_2m}uZ~ zLatW9r1@k^+mUKVoRWjK>;3e7UXcX?#!>5+aHoLJ8}8bvfQ%BwBCOY%$;{Xb^p_{f zD=_AwqErGiUdFjr+RiYtu%WMe#)M--0HiqxA)m6P^y9U@{+$GK^y{9e>9!lD*y=~j zfKRnhxlY?DbiFY)PUt%fShIvQHHH{rDbS;u5l!`S(Enl^34@^^k40RRA1sL z_Ysza09jmNVb97Bq#2_Y90Je$>uBN%YH>tICl2`{s z)zOiUrxfxI^gc52hT(Hx=>%MYt&sL|-DC8rwOFIEM@!h~#S2unQ< z4Em^8u7o1P^s9>Qzdyt#)(9h}uOZXF;ozkCqG`-LM$E&irq)YSK``a>WL4{(1ph@p z1sh*rb+Z8A#JK(z!L&(MaM_Z_=vw};Mx)QeY?Q%Zpgqu3RrSqY?(_HB0@}}kfOSl0 zpvFmsYT^QG@a@9k4<9~a>B)PePO9~@v^2nwQ|MzfHaZ3qMb9S5dNe=AN@)6M+2Qno z|9Dmm<;;0!@7<(7HjJ<&t~0HrG&*5rca94@MvnkJ{Bd!*^7t?&qI==z#!g4Xgw0Pq zkx<6m6A|EsY_nE0q$Yy&ake?>8iXcGIsMS+KEWda!)kw1JYIu=9u z2r|!F^yuc?O{M-`51DHk6s5MvK7ZzxL}nGQg}+k6C_bq#h+o@evR56#{fY?t-rS|> z>DtqXU(en#`ZFpm(>^7VE|~Ivh#Pcmh@BpzUk8h(nLKVDv)-$bcfIxLYss4k&YSfQ zdXX+Z_=ZpRwk@pJCzr^eouEHxb0o11m>kOK9&~MA}ko0j;9j zMee`)@c8gSh*$&|W(gxRLqp^~K9Y7A9CB!?_&)F=v|^id6VY@mJ$|*=@^v%IyJ7Jq zOj78Hy1E3TLA&^#wE7PzrPjNv*@Gp(cZb#~Y4nc2dj?4D%pcw-FmFsh$+E$wN&g)= z(i+&ya$D~+|8boGIDT=$995do@Ks9Sd)F-sOKAe}vPnLZh}uZH`V^FZ$hzLN2O?KH zs1`}1b|zy~@8Otm-EXOJea<2V$TbJpXj*d-e3T!HfwoNMxvslrIO@MVx&wYSELrV; zYpML&EsGc!GmhZ-^qksjpE5xUjxws8P{sgv9wGjK3dZ2Anjf`43_Gt@CRGDYk@-93 zk&RC6rE|yt_Qi7nYMhkkxCBt$a3*EfE^cb&%=c^5HL-moz#XC(ZxrQpB7SLRKRqe3 zxR(RSbK%Mdqj>Zkz8hGW?@Pjm3yY2Q?uc2VzCe*<1EUcL4$Om9T8QkMf*3Y*dpSAf zIL%&;`s=hTZRR6pY5-w6y#{H+Hpw1N6)qM@NT}IHDqi8@l*-<^OXrQL<5@Z5mWsrR zd*AVleNY1d-zWcC(Ykoe$<9{V0;DBCE@`ASNlsnB#SUG2z-5|Ga1gh(JVZ4{(UERSfa z{MRt--=obKBuJPdoE$4p?JUCY4t%SLDXGElKVLGTn{8_F_PRlDhALh>~wZf}f5G2Rox+MTy5JcX?~ zA0#1so)BT3Jkf;?&-BB1%lB&%V@ML!CFaDYC~@a+LDV)elTyH2qCDn-#ktK(y4 zf4i6ajhkl1gujA33bD}?Us*zs8n?!*DSI^AGu;0$Au~422=`ximqmcEL7&bP?S=r& z6d%QeU5ZcE!n>^Z??rdm|A3>X*n|v^=vWC`3c7iHQKkKm1{;YJ^9EZUVK5Chogy%} z_fZ3zs3Rn1!ZLV*YQ>2{(y&qO9u#n=JY4Z(%$s{(V^SE+W$)reQ26z3x(?^qVvY(; zZK;@(RM59?fAuc!-p%$tA>h^D4~`ku3PveO zNL&SIW;C7L-CcA{zeh-P^;49K@}>{A4P~t^`9YCu6;8g-ykQ5e2QvHc{rrDA_p=|e)!nkJqzo@8l+Wmoaw6w< z;as)KpJX&8AzLfIy74l|V4)2-;=cfUW2(vPfp*Z#OOyQN$pC1gMFJP%uiqr66 zkHvT7F#9EoQMr67PGbc^D%Xgz1Yj=8VI_vprBZeMtfW%Z#5M@%aB63RXMRuvXIO}m zeJG{p;p=<$dDl0rwl|3x>iC3wHAnNbU#zHnKcbR7-k-l?CsjBgTqg}_L(^AAYp+Ta z!&r^j*lTvZ=rT+(GC>F`l{etCJr^ad+Lh0vLp?Qj=S|4f3gO&Dvc&^LT;$6@i47>O z2#~z)cwPi?+G^g$KlrO-3`ZuR5sJ1!8V@)-6Mc_;lP@)^vh9d<~b()84uXcx|r%> z#`m`r%3*6I|6s~f)cudQM}h(!G1lGtI#_D&j67kEoOObZEa=HeLX=F7-UJK!*+INJZnqSL0c(@UsQh7)df{IljkOkv-Lk!^aWAo zu6L{Sm0OH9<`Er|lZ9&>^;@Q6@2u%EfPQ{E7;_J9Nr5AAFnQ)u}<`8!fX4G=^) z;s8LbfIeSxhwu3>F1L-q6$K6}<-+aPKJ4)QzAz743}}Rr%fmL)7M!0wQRYj_dZ{wU z9Aq${tBH}J7rwQT!3d=mAqWdwGLv1%zeL$n?0uZFYixKymO@^7Zm;^}`SHQ)TU>*B z`hSXwY>y)BtUijw!b2LUg1l?B#8~q69H`=m@oRlClkQ*YDD-9v7}F}nzTDA z2WSP?5dVAk1A;ujA255+>fcYP|7RHOg(I{4k2Fk;WC1*}pM_{DRDePlfOrQF4miW= zNK{C7Czj;enYI2d4%194#A<3txxnI4ki%Fg0r1~3l{p!Ha@LlIwo4Cc4`FyLVXkwR zT_2dkB^GTZB{OSF=Sd!s8M_3i^B}T(fbVzV~O%b+aM1&GHCFKqeerSW5T4z z{O^c=9qwO8QlM*Q`(8H*9GD_l`qRSZ?h)Q&)hlASlh}Vc7Z&>U=*(+Znvj2@^|mhJ z>Mr0G&D?&5_y_vL;QRffGedS4I2vF+adC~ZyKL=^pt`%FoL&HC`zzMj41in=iAQHP z1w?fOv#8l{ifIZj{hJeKiw!k+C_d;%MpGx#%^(L-ofONk&F^*^NhA^$6g+pB@-jbS z1LjyBqaV#!rzNZSg>M2J@Hhs%Qm)eiJ$_M|e7rw``yA$`$D^pxjo5f+sbU2xHM@@S zD(z9A7Cbzzr`*L`)CL;8n;YvKFQga?%Z4omhW!pB;}t;fCNb2XtfQWHD_er+Ep!l| zLjy4kRCFRM4(wKh0d*HK4t_&PB|HFV3FFT`7ZAh%2g`7JwMS;^KmzOh^=nE(&QUAe zxOFGOxy_KAiAg#bMVP>~?FVQw*Ht^=_Cs~y{jMfJWP0;Iu)GjE!J_-RwmL|pSPsY8 z!)=)ieFj7zjnX-e2!Y@#pvgJC&8rE-M!&^Dom7W2R{(j&01Q<9f6&k#R>n|QG+k~ws)8@XB&3$qKI6-tXS2!*02ur% zD5gPs86N7ZP1E5*5hiSs^i#skydQx9+9a>Tf1>>CZ-f;nDh3bL=8rkmXe+BuW{CKE zLu2fDYzt58*scrQwqbV!V*bFOVo;3(k_epQ>rZ(~ZHE5EA15GBeGO-#}kmHhY~I31CXm4fhsjz~d4!7ou!R){o&NNoj> zC}>%z-h8Q;d!Wk)^&2SGPL>%A@|gV>THj563(>=W3Db2>zHl;+hR)QlT-RSS!9B%2 zNdQ|1yxhxTc^Qlgdy@g^DXW1ZLE)HuTdH{E^uL%;_3@Z{@49y98!~_dDNy9}@H#i~ z$Vo1Zz*J<1KPD_TLwZE!fH`1=umFF$;rKu=pAHK>`wyG}O-wuce_=BKK?7so8Dfz2 z5ucteafe(huxKvYCn0 zmdsC9ucp+eflq6*;@0i5Kj;Tc7Ma{us^b53Y9(8n!pU#H8r`z-V2uv)2sUJKGC=R} zGXZ-d$?ux4!ddQK8ycc#k!83j`c%UyxHo?J$It9f*&f9gD}5P&z53wK6oO2%mxYIc z2*0IhmtH(B#1k|`Lc%>#@ZbeGk!%s;uv{J;y9sKf)(@8(O{ za*kIarUKX~CM6k%eTA`mAFKCwd`fbL z8VM5Q_Xx1VLM47rb43qC7wC`1G*zez;*W(fJut_Bv;?v@;%7>0!^nYaeI>sv7XRhe|!xt{BvkMI1 zF#viFUs#EnralKEx&ZkRM))k>q&}3i;XJ!NRjUY_l%_Y>{H%PO6Is@`Ve%+DzpUHe zM%^1K)B<>5XScl?aEoY6c}{=8Xw_zv@`F1r`rq6%Q~Dbm9rKMx26_O9=HKjcA}LdD zmy-D@`9IHGJ(-?nx_C33L*}3Q05nc{^sChlj;`0Bbu4&{EG*>Y_&DWT2%>U#EnU^l zZ^Lh+>TUIi)s9TVgh=FjFqEs5K{k_iFP?EtmC){sFTdz3rm4%`S01bLD$n|jMFdGAQEDbDy%sp9%6KFm8 z`8_7aAFpGl(M>G7s0gM3Z+Z-7qN0sy#V0er-p77vkN)!99`oC=^Q*Ck2K89R^*qtQ zEz+bAdZgPazdhxt%Rs(NlMCF}e z{Sdc}HBokqPciM|hXx?&dn98K($8sWbVVRw6Cn1xvSM+D{Zve>9*K~6cNA%-qeBff z(0*_|m`Z$c*lCRebKcr|_)+~wgS!wus%%79Q;J|UNjQC8GlXtC+0}3fB|{D?Hqm&M zM$P)GPQZ4!3yA6=ud{q^T!F}Dh$%K~(s}kzPFdX@5$txi!V=A3=@IF3|2^Xi4L$(* zNT-`RFwWH9Mqf6^Py-zsk4FVoU6FiteFWe)Ha{itJ;-8 zK(16xRyMb*@FELY-+qHi|y7%&D{mOH&F5_yO z(ep@&-=3%OM)jrn;jc?|xKzPR=0XgaJseY(?qXvRG{DC(T%6Xo<6Juo36(Kw1IwwwBS%pnUVpR*S~>%yFE1@7sj?9w}uI3j_ud`&6NWentq14=T`1at}ez(6Lgx<%29d8V?)bvw%x(ErAIt-pB7tp^hCt%Cf51v?h`4RwCp()L^0`yvUf)(AX+`QM(>sAvoYa|N_9f&FH#7-MFP zEx|7<3E#~_T;}lthXQLi5Z%v^2qi4kU!rc=ln*#S>(5&8$5oA3evlS;!AYp?J;BYa zmb-FOH;)gt@TN(|5(cvXWP20fYHG$gDGm|H=!Fa-FBH;PN&L$B=+RWt7O#dcb#9C95E+90vlck7?Per65 zffayZ=8-(Hf)9XJdDCJLD;<8&e#-ysoXJK5dJZIF%x_oR1mJ#W8$cRnzlS2P?Y`~P z(V%v0>GCPC-0Awa@3oHACjd}s0GYqzllEAdnT;;-m+l1cx|&v0F<{kBOu%SSKrqMZ zp!GqWGII8xarNxh`%M-uO71JwR>f85?NRxWm^ZK$D0qMl{iv(lcj&t72ou8FBX2ioQzw^LA70U*OY0 z9|M5!bng|WXj)N#d@dfVsAoA>nrN^gGHl9PvL6L(m zk_TT&A_xtDJpwurky^(vqy{Eb3w%@OPy9o{nqUN`;LGep2s0urH|iUbh=V9v>#(tx zQJG`Gzkja`iu8ZeeW>v)82XVxiesFDI_b;LCvQ7HrW2kSOmzCfPA+t$oqPB9r7o>_T4Ly=V`UjcEj*hd#wCJI^}rDCe-P zJkGLw>3=09|BHQQ4bBDLL!$>kD0g+h%>v?C&%O3}%r7hgV}@f7fJ3~xn7S_s8&AvG z@UZRJ0Z`iGoE$OCm>2q!v`MUQVq!kpUAXw3Zx@zfado@80xBq>6p5WV0=cRwg*l5Z z2UMVH6F=b5wpf5^rq2l+5%wnBUkZdw0~)AV)a0|C2lw8I8Rw1uB(l%0r~x0`<{&^K z|CC}x8xTx|!A#tIz&>FsdX%jDRB8tND98w+M~u$HNtJfi1FGe?{Wj)S@+W%yMElcc z<>ee@X8XhHFL)S6;>LUZh^BF{i1h_FIa2DR&r+&YN+5>GZ1T@Rbou`hivA)LVkeG9 zh8ME_SoY|8_1u#-J^07b_-G#4>sFo}NjR!#wuIKWWdW{e0LjHzcBf8cf1F4liiLgX z$}(yEN*EPm!$A4LY#i}Ac=BwK{rKB!mFo`H(@FLFc)4s~;6@CL?+G@*{=mK$n~M~` zG7UZH8;E0M=)RfY>wpALf9Sqduht_oPE2XX%!-bkz=n3Odi*mx00JN(fk*uR5cQQ& zQGQ?Bbayuh0wOIP(j^EA2n=14L&Jb{hae>q(xK!4Lw746EigluG($-@@9ppZto456 z3v12HKKtxzUvcy%$i2OD30FP+Lq#gh+XFC-A0<$aey~Q^q1Cj=>Bu7sApR)cii~Q! zR&|afIfn6rXU`)_^bkn7cMpy$->g1xQuMGjq8tkPx)HtZXK!Npfbo+>f|uC$XDR^b zR9^XtsB?n>xE!wV(@!NxqTSllt)C5(itm^BUiOcWhF$mvhGvGim)>i$HWe|ZPrb9_ zx{tOxCl)*jWgiYu?w1T|9$@6z(tSzE$-e=Xyre!cq#-epIq24zljHSOu2~yTvYIO+ zHp2N$Ov)1{B3?^EaMuUkn%{Yxba%_lUYbPc-2`4i)b!1)Lv`2i@a9eCgF;#mX& zwt$4}8kZLs*rlj5hUUKxk=>I2?1%g&5|&d|=(m4WAAv?djEYbwHFWmz(LFiM(Wy6;hOl`Mb}l-aXoVF3lccdwipzM^!pL<=vQ zORD>UgurzcN@W2-zGHcf?Q!)T>tQeB-g>Q!u6d_Zt72qS4IF#Eh>Gqnf|3oqNGiw3 z7)T!mckR3;udTzM2iVL|5ki`JY3p#v!o{D@u4G{waGc@x&_O4lC%g?1tyPm`Q)rVk zfLD#_G*nE9%)_~+tMvEe0?6XlD9v#an-viCX}0Nwuy0|6>d?wc@I?&*0WZj}SO1$= z=>&>p7x&{$Zm7_#?zikxr~aHzw$_UUnn= z1b`IVtbe~ev4Wx^Ei56Pop<%Ps%sFse)hTNJT%^;+~)2{40>Ga!z}vzLI|{n_p2f?2rl)RP7CogX*t(zdsP1z4VVxt83`Fm8o$|7CDSFgpUiDzla(@0e zPNN;yO82%k8Wl`b;p?YlqWC>FSSpdyhvWZ#-YD43&-8)xTlS6PahBX5>`F!gtVLeY z$yhRJg#5xo#dOf@h^^e$J2;mrr@b6fj792N^u2J*-;vw$#&cD5IcO_EODS!)%%dz~ z+P1_gunJFSyb2o*)w`E@UsA%AGpE_RNBuWNLp<3SD0Z_j-;8| zfEnl;CTR#nH5}}y&)G0rrN5Xy?SY{_yvkqZYT(~b-OE`(Qr1FQ3atX4uYd3Pa?PH4 z95WOVsX;bU#lG6^gZCqu)-7(Z+wcwUg=uWm-!c*&*^M}6TG&NMK_oNZEe8ubZwe~1 zzFzoSaj^nxGOQq$7ZuFU&yVpui0ixc&TO3>|DTjMX*J&MRaK$URaLn$0IeL|4%by? zbN%`t;H5335SNK^PN}P_WZFJ!YcZ*(NL{Af0pP+B0B4>?;*CvosE$g&IyKp2E(CZ1 zzjB2kI}X509ccmFC^iZbFcdm1S%hq>$`m}XO`Z98xdV*O^u{e;M(Z`7YJaSGp;YSE=(ee$V3E^g777i`VSm+-qr;B3&}dda%{OLE)pigyhvbM zu*?$GpAyfsLlFNK4Qsp77B4^S2ndD2&knF2=K7}03mV#zFSKfs^+n`O->k1C<$kDR zlFPe~xh~QjF;gC@`KZ>A5iz}9t>}HCiD=}QfMU!D(XipXZLf$ldTq8& zF)^3^Q-hk9TtzfvPaI%w3D&vbIIy4_u|}vg8~q%x8b$-tmC`UW#sly7A&QCc@T}0O zF@a7m93c4Q2`V3-3#ieFjYG>sVM0<~)o%Ba0kk4{YOC2zo=Duqb-5UrK8Y%|u^fa8 z%^H?fQQ>)s2_olVk*nOrg=27F5K3y`PcldG(N&xD*(vmV;LAj|Y3OA6v}A;&l|Q-mT}d09=QQx*_MzJ&u=Z5`6xu z1zjSiRX0Ct&n^b!%^yo<63tXc2UNP72jq}#hc^HyWy(#!MkqGa6T5>(`wGrOP!qsW zuf2pOpHp_bY%KpysxY3)gV~DoSeMOx_~$J;XwYx0TzNlg55y1Xl_y<({Tz_Zw7-X?iGzwoJ7iC&}sQ(fj-RqNw1>&<}oowG+nx z;3+7uob6nqSnua$u`mUUL`^Ax6t;w86Q#2QD!3`fIY%SI2I6P+*V+M_0dy0ZO~!M&Og^*ScOs*ytf$2EDd z22{eVcBvgVv2AMYdBzwPdhg&bY2RH^v*Qq!IqwO1jn6lLPUh@lgJr`7?dI#v7GQ^m zUSco~S&{oTw)BQA?;AEQXIJTcpXC|+ucxio2= z3SaU1Dsyih8n?WPg0w8af0VXbHO@@@Bq06WO| z!Bp1i_giG`tlLgX2h&5@9h@2mG@fY_Q(nHO-%!CXDgI}WOKR54Bdj`@#8ZFDTUQ7_ zn{uF+y^-edH~-#@d2oF493 z{rHw%(A-{Zh!foQB*Ro!x9EdQ#alD8gnxE)Dyni|7BT(upNiJf%rR`Drl!Wx;(+6# zn{oh57}5aZu|njh!+D!i?M)Q8^`XKyNy?mv5`;HH5|NlP>YC`#&Lx zEHwYtb&VOp|CvBM>~EQ#e!%jf`$vIYLya2c?vGq&CweB#?`Y9yJ5Y6i)#dqL8AxnL z)Jy`y?iXYe07}=o=h+8qMsbs`&RF{O*>H4N?H}GOv)f43Bc-tlz;ern<9uNsmHXEM`_hR|4CS?Dw zCORExKkTMknzzvsRlMILK-31+0CJ?5{U7xInBhu0K;xF0NkZAIFIuH{d~-!X*&U>q zT1K~RZg5z#o^hl2tsS^Y*1zB-_3?AL*uAU3;z8IwZCe%we{Yi<^`mNg%nji1xve!(@mz!JR$w>9=Jv1s6cRY9RjhK97UadC6R zc^R`GB2-mG@S(4+Nr9M;xGB-Az$`94ao^sB1$rhXCIS$7J4dPJfRXXS+Ir&o*8w9^ z1Jfl+YhXs`2#^ls!2%!}reNC*1&j}uumjia?Nnk=XaU09vlH$Effz=dr&(yYo0yaU z*Or;`rNNZm5)BC7yzdaTJ5xUF_OMH~#B{7!>acX0?ysB;xB#Mx4#q=uoD5B(inxR4 z{L@mq$lz~}{{R9ldV7|@+Mm~!k#fMQ^PE=9kpgV&(+^Pv;!FTwyP5b^L5*~hI#k4F zIzy14J;)VCfNVPG_AFAV8)ye?(|gu9I{2;S2|!Q=7VJ>K?i?88iY*-85H!U5dt}{s z=gusj(2>+5nEuK+sQyP4-f+V>K=;#i<9crYE*XfTMaQ2Ge`a?xDIPf}@Ce)aKzI_U z-SDWWG51$@?T<5GtS{fA&2+-Rh-Rj0x{<3)4-jjpJwD|R{m5OJSs6ykZ@F(*N^K7g z(pe;g%Qf*xo&e%VdeYU_AAbn1T!LONRe4{VYB)9N_?ZylT}B25M_qt4D88x+ zm4`PcYdREowfs+>;sDH}&xJw!D4s1n47Mhzhij ztQz>zEmB4CC*sA2r??ZX<*4;U!=;KQE{x%$zj#BD94w-tE@<#q&)+h>fl0On4O+cp z11-J9)ImG?VTGZgkzCn49#6@Xg9b$=*lEcjEC;CGwOBU#LACDro*vSbz$Pqm&Ic4m#{0KF z!8d}~h$d=BeRF_T-~Pe^Y-Dcmr0&tI8{MtzNZtdaA`f5;${~dQ($u{48Fopr4L#q3 z^b=5c3BmLg!!FQ}q3GDZcEFvLk%%UADBw0rpw9D0HSv}}A zL45&eIujMeeW9;58hSpuVt?(iH3BT!3HAA%lWNunVB_IF%fa}_#wr`POs$pdizvS~ zz#lCGoQjvq6Gr3{Q^)3`Ex?mJZ?vVEk08&WE}XE#3Dh`ERAjK$Y*ld%CO*E9Pc zX5MlwsA@U4j``xJmsa=vSS}PUD*SLAU zA3NKMWqF)bK#6|TiUfE+z;@|!TUhzhYG(a0u(q62d=Eg^H1!-w{wuWimMbwp_6Oz! z{mG1OQqI?c0xVy1+%)2ZcVRY;3U&SGH0)k7C$Y6$npI$|8guyIhep%6Z$ZktKWz6B zsrBObwo_*ou-=ZoV~IshybDe0eENR7?ieI%0Amw znefczJqmW{g$7^b8!OyX{gMs+!t!EIOOfx5jcL1bIH2^jw8GL-oR*dr7_22M5;)V?JlOJIs*n;;4^Z{q5mhHDo`Xj;up~)W!7p3oMVBQeQ^^!bM z%eyPrQcGU=@84pp-L0D$M`r&>AlI**SkNrpu=g!(J~RSfg{)OdxaCWKs}wXstbwGb z@#1RRuG^kZhZqP#mYxF?@EY|HLJoO>1|ANKp5w1cl)Z696c&q~2VO1@10IfFXT)%I z63I6U_U3l~I#yN!pheGM7Ix9Cnm+_Y#c_-X-pIvAWE$VWbV1yIkevvO_WO)>!X$hi z&_>dT+q2M*%^HL@B>nTt^1>J~%95+#wJBXWhFV zTT}^^nf*2d8{-oSX0&On)NXe^+^`9m&Ipai>pYNJTu5U@ikJ>pza|l(sePTF#lmAM z*08+WxGT9MIx9BNX)?X~kdl>|z{bKWT=sR#>0GiguPW~lpHcA^heT`>#*v|sUNSs+ zPsyixsY&icE=P5Uog*XW_vuD-_qr8+Jmi}80PQ3kz13K7J#WWL|9$(YZ z8AZ;eP8j_)N_|8=J^&o?e>Hx8vf7tO`yWhzoc=WJRX^ppTUpoYaxf(W2n~{b_8odp z3nxX9K|rlU_THA)e#n#V*ywFk`?rW$u}yaNd@2?I96F!86Wgrh;1uPO!=O|fc`yJ; znS>n9Ac*QDu14>R`V)^f`=~_j;8++?^WZ=UJbVpTGz16s2+TH7;nbK1Y%=rEsCi;0jR+9DPD9*X(H)!ix6?i&s@H^2+kFwxr4?Kh8ft?`BcT$XW( zZ3D1gz%X@h+XVq6hSM=?4^X~9SjD71Zy!Kg0JpxPM{kkq?P=ndS51DVOms5Yfpy=- zh)nO`A1GC%#S4F0mxgxO@Ad**Y8#s~3WAZS!Wa#K_JtCKM_xCqw~zTlsWKyGk8M~1 zhVl~ICSmsrMh!x9O_=&Zr}+gwSbr*CzDGiH#{DAG96ev!aYP&|Hxl{M^JkoCZUVK@ zAjS`eoCG%U`E0Upf-sIFAyevxG!fHD4By?(iS>41XK|950oy)<}5#NeZ_6m;Y44pm{k{OAesns#OLv_Nc5n*-GMc+$4z=9K6 zLSDXpBRmy(w57V%sgI1ZS1c1|OUN);t9>-`QdTY(&18S8DMei$g zqlzrV^OA<9Z)Bb2jgWjO9Vx9y%r91yN~hQOC~fi{Uy?G*WFu4{X(;8Xm3ze&4P97J z4%Y^|08+BLA#LDMjopL2tvfgdG+dGGc%TRWYWfN-NbEEs&U{)Eof;Q}jfvSaJV30U zZc_8dRf=amfGU_#g7{u@0QR9yM9Yk1ef6&=sMQ1Tq$v}W17eTF@`on?3l?^w_@`~N zI6|D(3OPSVBf4Q`(qPgL?4B_ZUjW+d1&X|dk()kweX;F7jzk{?$?*g=)V6YsO?@7S zbr0mL{%cTZ9ELc+L`*{;d~0(3azf7N?(?!<2JOzQ)C>db%??6jmuR)c(JipwxGD|= zHlKjrhCT!Wizl246i(;m*7u@=9^zSa4DE2*J3PwzZ=)in=T!d^wK;;ttk1*fl~I-FaKcKTX^^1G%YWf|p)Bvd%G8XlwTLikxCprJ`bF=e(EGOc zWXpFfWiil|jO?UsJNFbd!ED+5IgH6xdLt4AG5uX&dKROy0g|zEYu7uyOXq2tP7VTN z=%-^rar2+6nj|S^Zt)U=$ODSqF;Y^Sl&h@Jx)osR3FZaJOhwBl;`+-5^L&K5P)tHk z;OG?!#~&#gc4wl9GxCSJY&v_qeLcXAfmrMrRX%Qo@;I0km+lL5;waw^S=N?sr&>wd zXTN|I;-s9QAWzzJ8*q){x{ape(4fj7UiApXW@pEP@~~{M)78M4+xl7u^LIf0=EJou z@knfE-~#}bB~aA)sob_*6g+fPz1wlVYpIHG6DB#jWsULXCU0sm;YjRr&(-`mnsLJm ze@)c^EA*eCuk#KoUUbdd7mDaR$wY?Kd*TdwocTr_iC6D!0iuN;Bwq zEQDET<5lmoaLNS$)iN6;WadNV;~W z9VC^*?l`qS?u2rdk%2f@*Kg?C+u7t-r+x zDMLhBDonR$D{}I-zS}5Sn083|gN!oNLyUYg5n|@C-K|l|VecY^386)w`{w);x*J;6 zl3LAL)e4>VI97tq%TqeX^LzH&%3?zsRJx+4QNeoE_|e7RQNbSgr|v_AR|J{;J!LOI zdYB@(gP*0c8Z})kp1_K2hSy2>@Ih0a8p!Ya_Ikrp!b@696d?_@DXs0B(TfMK4{bdl zQ+^*@d>oLhv((9B`~wq{-e)cRCJW@-;l{GM7iU7RY8jt{c}x~e zN%f;2LSG)nW3<4TyZh^3&eOb}g~R%k`Vza2PF+mV5K_1xe_!Pa41{&Dl$GzvtE=z1 zscq1{MoKH^F`KPg{TM9L4MT24aGC=zx7CQ`Uz9n{xE@FXfyt5NBhD>8vmj1j1gb*; z)3EXsu{o7^Iah^|1ll(YXlJ4`=OJs`Dp3N(L*y-So;`y;{%J*|J4=(xl7hB2X_Z+= ztghV{+Y1|Fjt|Z~i``D|_oYjd%yaVc5|`S1ge(9zbKL&E^WeyclAoVsz26iG zfEZ5P7=}WQTwYSL%74NlkUz}}P9?@yrk%m47$BnOLIab6;=ad?e?DF5khomEBVI4^Tk)jw=oeI$g+{-K7X>8=4Xo@K>ictZ@Vi*?%p>6m>e+wQ(h5-2`WiB~x$m}DN}g#qpc?7&)TVVJe?;AAMblk?uCB6NysuhM z8FtRHV)N(b2kX}-ZWOmH^u3HO6)nG@@f74s*>?%fx4gt;lR;$Z-HuksJ~}9o3z{t^J3%P`Z#NgPNZMP&Z zFJWg;s6d@ZXh$$!0Bci^x3)0B?W~|hWu^1if(of?YEqDFTX6!i_d&2^C#e+!dZe*z zkQpU-iH9c)e9>qm0napF`d^kkw=n$J#=`cNsZEY$={24ah*cJXok!WPzM`o-p5C7Hn}07_M!Fk(j*ep~=6#)Lw2SbMS&75tk?33yU)^eN$%6~I!5IR)cny0I2vT3=NkMDA`dRo zJ&v2rY}$oN_LU!Q-@^g}dC~2}c+t~Ojc)iJMfP_?qL#LcHuK{0UDt@GzVhMZEf}F1 zZA%2lr-Vx4DSz7V<}+D9-!?$5GNf|pbCjk*j}&6w`;%^zAM(!Hnr9PC{&Z=I!h=cL z>uY$?3lqh+8m?!#oKC>DdrJtP5DDViZ1FCLqxxYnzEB^0$(1o?Hwu!ih6ZnkzDU_WWn7Fe-!+mU|DUeB5t))}MPC z;IGRKnrgbU%v727Z4Rfq|NWz!Efa_ps+}b`;U}_%_5R6ApFC-zh>-It(>9p(0Fl#5 zC!=wbi?WIemX40j>P92Yy^3)ULX1`h++>-%jdjLoKhB6)SZJu5rV54Z%4Nn<>+M$X zf0ONPFb*=_W|ar79*^79@6+9KqWnu!$33&Nj_3e8GP9dHLKhMXrii%o}tYdE|qts0g7tp0pShYlCP1l>kf+f;vrOW(fOX15dRalVn66o6IL{#S3(eSX)O zvt+|QB0HSeU3(!SiQ6pVm3&&^=m_oglG2gkEtJgckxf(t#`iLic53)nJ0;JId+F}X zg!rLn_lSP(PbCVfX0fF%rh6x?yTMWOKsK`H>7oCTED!(xdKw;-UgSDxe;^OY;(=v8 zTvTwAm9{G7U3x7JeSIi&WUhCaUszv{isF+eBs7VwCop-Odf_I&ZpL@D#Dj8gt88(+ zs78=Ui6_L39brVR2%aPw;CJ)7c5QA(4R--_kAa;&s$6sq%JK_BnIaXDBTJaP-`n@(Dr|E&+ zx_JiNlSZHuTBBvZ^c(5V>0(MnL8Mnxt?m458GF?vtDiFK(DCdgGnP} zOwK1HgH|-3GCfPcdD3*A#&(IZYP8q9b)2ahwUPZm-!^t1-$Bj9YK~HRIkYsb^LCU0 zj+dX=R(|xPZI!Q)sVjWMx+yv6jB1i-rFU7#$6d9r+i0hXsy{TTEps5$q}2mpY>br*hW*i%>LhcZdKVg<74`Mg7EPD@ubz4dH4bFkygD|_ioZ6i zp*b!=$42=2`E3QqbQ^UC{O)qdCo5z@Uc)a7eWN8h{NC_e)mL-WmMx*7<%~m zLOv=APKQfInm)*2+;6)sLIgGU-Arv0+G<&>9OFOKwoS>Zbsw*wx?VE5G&04Fv`whpbsxG~V| z83N5y=rjH>*~@qspB|9B=OYApf;24B(J_tqQLP`k@Uf>c{BVV*+8J6WE*vs0Lbp40 z^o4)AOn5&3#74@*7QIrR*M66Dk(Ur2`{cSc7aKIy=pbwVcy+VWvNq;Ev-t!M$=dy9 zK<&0KF?DhFj%G)q#JUu}yR~ovm`w`zfDfV$8eNabJ(tRmX?tgysxzg;DR6BE_GQgi zf)m-_2Z}ZEHxQU0UU{XeYCuAr*Y}RRXivZ9F#;e9lifOFpbqC%9!kM zS;IiI&2vR@&7|qZ@h!Y?A(H}5ADMjfjNm91zhYtit{fpwJwdPyJhX>en)PRKi23PM z@XzafeF7cb0@h7y4S9$xros8w)r8sYYeo<1AdV0?v(@?CScX*_Nq8lYf^LiB2f|uw zveY5U{!$Zj0=HQH_K3iz)7SF$0elzxT(sDqpNGTIRSXMl@*D(UCLiZyK7z<< zC@+@j1?`*3(Gjh!Y5q?yUn*JLJ4t?#$?E|hVJezsO#U450vV|87S^`X($q5h>8-*J zZ}%$BV*?b$7NJz#jZars#8&)nvE<``>r+G?_+>Nd7w%&H&drq1=zOGGQll5Bg=o8r zgJA}KW~C zB{Uf+j0&x|!^;DzS6VeQ{QV(A@%=XD$GpJ5vRDBUvsA6~(>5T_5RD1L3U}S>m(d7{ zq9Xx*JQfc@&<>A=y%Lcdf=Ly(^>* z*OM!B#IAQKJi16t3k5^dLWj|bJc1c(F#_!dEWQj=(P+HiNQ&w4rk`+_bgX}27P`fj z);(e?7~q7>vUDgUQD6Lw$U}np1egWCHf^Tqb5<0zM>rDXl1Due)!vcf zCUaJ~Eqaxw>|wt&*xjHuJOM`{Wn9b=D$(ZyFU0u#&KrBmhA-cKI7O{mY7g&Xx-)&A z)Zlq0r*`v7Y16ECZ@>5Rgyhk4#8GP$O&G#I7N(6=xqexJHWPcC8OI`uJ@<9si0u|b z-eIViL(Y_-jO!+R`&~*=<`;+wUb#?$nk8g!ElW+}13C8C%G8IoLP?(nm{amVD4=sA zDtVKqA}@~`Hp6bYx^F=<-*1hGedjbbUq*sWMxBQvh3(_TY?aU$z9ly>i{DX<+2{DG zodHD5v^K(sxc2i)A#jw)3aXP7g7&2)$OFls-F-sCW;hn6U(0d3TYp`y80^{1+Sq`| z>%Gs2noU#9r>C5YFK{g^;ut*Yp2TCpu-T1Ox&_&bmmM~8YGbyDHrJ;6?&-8B{}@e9AwrScV==g7of4RTiO%7&OCv2y%E&uY2%ohOX5Nfm`IKfku_%x+&)bK#fIIvCma%p} zwn)5jA$X*=l9=zBw8Wr+fAN#vjiq=(Y;=WPkgIZt(lsi*i=#UFw)3PG*U)4 zu7}-4pd*(9o!tLSzRYe9AXXh)QTi|>voGt1_xMmT|1n@^$9-#X8M1+v)_*APhPbw} z=N+z3nD?bbo_?F~>&s=uY=X3RyN|}w+H8KpfQd2lMa?QWTmFpqNp}DAqU?Jz^P(ni z{6kXcp0!WX6E{6q2_@JK)@R~Hxre#7=F7_zM_@=ErUE*2nQjRUOzYK3ESC%Ej%@>z zr+zW3r$191`V$Z%9n(iaDulhP+lzSu&yd4en;nZrvM61Ho*{0c}6mx-nX>Du9TRCT6q1 zhUL^UPsZ}6Oz*E~PD{>L{2$xjx8>pc{4oqYU*6yen3cmTz%j{Na!;~(Hzlz7H|T!T z;I(vCQ=OSAR=u)?sgRew9mS^yVT+_z-@4)q3E!ulMl(MGE0M`84Da~s>wl;c(ml&o z%CG&&#ishl$lJRT4WXc|C4#zJb(5pDPTeipu6d>ABd^bi4?(--q(*64Ra|+iMJWmO43#Nb zju*_fBU&VQZ)&xf(Riy}7z2#GYCkV73p3|9ZQQ(1+W@?vCS8uByyw`SH;VL^Q!U;uq=pYG{3Sux4(Q% zQ2$1Lpp1UPRvHxvw-=No8C9)RIx++c^ak;&%wbyWnMgtFccX+u7c#?2eqWF z>vt0_pO^{kqO3Clc~m6(HNJ%Oc-MS(s5s6cF`{oanVIx4n^0Q0PBBtMUueuZO9m$L zU<`3W|GE6tNz?4+0AlR1<*@bn4iIS*Gkx8K^}ykMv%XijM0D!f{)3`w&4es!sDm9z z?K!JL-S-Je>FpPYE%k!))^;!tYeYCQUVT+E=#iJUoeyhv?;Sz2>yu3qi4xq`D=J&s z4q6bw(oS}4couL7P99jF9=0XaD~h>oUdTc%bfymXu!)(zxcxg6zy2Xd&NsO~{;m%s zce%<+8#pVi7*?#cN}@}hde`jl~fEg*uNZPuZ)!=(?_CSM~w*kjxhq3lBHk5B3Xb@kbNo zl;QK4D2TP1GCE8|l?LPA3n^FYl{x7KU|Z1J=$>uL87h)PaDSEZX0~f0%_xjl7% zDJ#}DW3)1~o+D0BY=#o6^=J6h1r4pYogv*Sen)UrRa>RkdgHe`W82x6M-CANfp<^H zVjES5bzNi=9SgZFBHVIRIe$xIOzb*x#TKz%z0PBnp8weR=Ju6AQ|S<_*td)=q)~oh z1NnWRmxh}TaWEaP{O-4;LsmV*sD{CCOde4G2+gy=<%t(=W^;oRn=;sqyixoE7Hz;$ zqUzi0JQXeKo7S|K;=*#~P$_6I6gMKP7sXX-Dgz5lTE0}7Rkdh##(BNX)5`$%gyvSn z6G$oNzn+`?;@;8sS7YD9d9b#MnD_c4B|Fn4IG+6B!0m+`Jtx|HL3efh`v81~lWW@B zr>DQ~Fv=W!Eelw=`VOrl=Ig_kOguj|{rxd`T|l!5OXzWA8;G};>QC%B_g)XP6xXP& zCi+XWnZXi`@B^|+xa5%BpSNvZ^xPStLeI}^J1Q!jdtN}>E;HiSBYkM=Wj-8=W+RxR z>Xclx{nzS(IMYL+*Wb4++o~n%FAQ?)aU#oIj7tHtRRC- z01Z;qxqlY3AYAjMy|g>irSE@&eBxx+s97F*=Gi| zIeyO{GxA75x{Cv|mTa4S8^uiXKKb+4{yxZGX}>XGF2_OWzGn82y>Q}XYScQcv!L+I zzc=NR#;%>eR!>fMg7bo6)7e*;&jI)JO2A)C`pYe3_4>WficO+yT1%De!)o~Ua@x>A zx<|l~*oViK(3$^G#Z4;DX^ytCD9$MlB(NGGO{Bx~#$4@UGs*aMkAr zx7(WrX4h{b;Dt(h1pnBsch1-dIAMhbu)VU56x7=AF8;e=!N*G$v2BE}LB!P`6H>bY z+U(9k2cr$uGlq?0e8p9p`hfPQcg19*Q-2Kj;94uc6zoJ_rVA$&m&IXd1FO&aVjFwr zNOzq8=3Vi~?#%w*?kD$bI9dZL`6hQG2#Wfk`+=w%K2akqz9#WfXVGcwa3`@}mJJ`3 zI-FB}2Mwvz=hUMf@K}AH@KX@1M`ShA^=sA8C{OqWVMNVC`vs7cG-AW3h`Rp1l~!~e zr>?gsBMKp!hsf;6Jl2^t&yStmM5-U3UJAcnceoK{mm6(Ru3gS=@q;xmCE_9y1Zw{d z#Q0j$G`KOo&bGGP%MC$o{B1A9fx`P5ZNlTVzz?O?oBBcf_dl&n`+-&*WJlA4mtqi=?PpZspCsyo-Vz3^*%sL(n1hNkw> z+eC%J2E1*e@Z&<^>6ZCVxD>Gn6=v@eoB~tfa4$>DwS1(CstcWL)=%cKMC5271~q?O^RusX7~ni{9p?B$KGRwQCmx(-d5g`{09x(m1zIn(YN(RAiJuYxut{P6m1ZYuB69e&m*GnBQ zoL6IO41nEp-I<%!U6&8oS;pX|;2-1lz?2{KyY7yZq<(8Gq*(U;W+ibnbD$y|4qznQ zxA=@xUo_jMdrS}Rg!y^dB%u{rp~L$YFA9AkH(I-OfR#W^pX6XqsPeYS(8!m>BJv-*COY~}~f2LVcU^^X2GS*P_q(aZ<`I6#1TkiFVjUl`h~ z1eUS76fxx|3TO?$s?}yKWg&xMaA;wz`|HVNq(DZY%$FjCXO4;zRpCe6(E}KrxG%_O z^>Y)`I8&)Xo~ljdC-TF+i1RgJw}jW(%KB7XWa3N{AOo*y>Wg7uB2@lO!) zG>#1f*0z$}9{m)}hUWve2Bz=lf+H)v%Tc|2m4-Q`n)()TmjsusSo@76ESk^p2pVvE zVtm&;Kraz5QElUNCjxJb>gmXTSU|X^;Pwu5L-~;LuSkIa%WMiGsUOx!ngsLl7pm*a zhYX;p)6Xk|6D^9|LR~YC!i0C%cDFMSFP>_$)oHLS?X8wsUrn6P(^mWvNc1WRdnBSt zP<6F)?U}SFQ{SKFbr4xF18sEGTHb(8y2s$nd+1^S+JnP3Nk$M6xR#&wafEU4{-L$=oI_piJi~Yg~rIHrppoBnEyqL7Li-nUeDKU_Q$i8o<4Oi!_#L#%+P6}vWI~# z1x`x^7oL)ycf*8f;PI;b#`aNPV|LDLb`4|M*M+3av;^KV2emijAr(!s^Tc&21EKZI zZ3OqlfE>pVO*$w1}XKi~VwnHE|n@%9R4e7PhqK&+nJf zg>x-O1$k!BL0czHj1t5lfy{qn+` z)!LH$o0OPpxhm&3wXHWq8DZZ93_kd^{<*ZQ`|VhYe)HP=7m7rvhYiSi?`!PE7I?zL z3CHMblzM#>Knz7SiQq@d$Rjb`2|$TnF?}HtzwISFFgp(p`tu=d=;@rm-Xg10#LeZo zFL$R&cB>J)5A#wJZdZj`4uOv`z}TW89M2r6qJQu`wGJmG2%2B<|6eZ${+4FVy-FQCZh zFnxnoP+Aln4QzN6tg&lFh=Q2x#jfmMHWzce+W>Y1+|}(K>3pG6N0-}^9-Fto*(ioO zdPKI4)!0eEjajV><+GP4xFZRWDGR5Dog$h=zQD6AJnSfhQO1-MUj z6GX9>18%<`*eQoLNa9pF$^wfFNM@J)bxpc?&~<+aZ~WxH{gusI#02FMM|9t;4Ze!* zuR>!h8rX<5Z3!%w1QSOjMaoMiRq4nVW=qD_*nUaF*iFC(RxrGTtxJ-g1kM zc0VfJRRfyE$eup(bM{BDa>-zEWu;hJ9mK6*N&G1Z)!MPx3or2geD4!u+nwFF_fdxS zYU&B;{Q8WV<$1FRz%NXX@lastBfo2bqs3`n9r};Q_EsyV7i#kxFcF^^Ch)m229f}8}Xt8kIVrXS|#bQ57 z_gCH~0$5$~*E%QVbCE^hX>tWoX1UqMI0Cu!;)WM;9io@D)312Lr!5z7-cgrhz(aSp zNt3*Zg39b_tcGc?Tx3Qm>WWCVt7W@Wg7fqpDPmgxHTgW*V6($2zGu(gx)~h(Pwgb? zb1)ytDCKQ&dvO2=5>$#e2AtozJ;O@KiPTrz|82?eGn7a5R#1k%Pmt zrdkISxE;>y-{wf$ytr;SI&XbvxzTKhRWT*--V#qTscv2xc(ILg5&rF$`$R4Su`}9? zu;z;uw{(gO-|xNCY_!&ke=PsBqq0#~SqpY_#e-taqkW5}nr%Q$g0#juy2+nEhiz=U zf6BqZ3Rpq^{{0)1ayQOQ-SqJvz4As~y?1LgEBU!0$IF+D^nY|G=BDvwi9LRfhc6v3 zz<%yXNqtiOOd=p=+>S{e_`>Y4jop zpV??EcJMNP%n=i)cg>>40;N;(%1wOkOV30BvNzrdGlk|uASlT4_LtnSt%>=SKwO~q zdVkg`9sb+dld;LGKcAdRq2zs-Zmt31m&Tuj&C#dx!EvBf>K3M^Drb~eeQm~#L zhmXXoN1Ont>J!3zE!1qdZu@k>Yaq^PY*Bc35r3OuZ z-M0C5%{(+k7Xr0lEH+Q~Akw0G*(HC6L)S+OdEQ0%<4EYo%wk|Q)$;{GP81Zf)!=)vhXWO`if)Vwls8n}7f<)E%>C?vG=e`DC0N(WRHR(QE zmMAq3?-#Io(f3?{H|od~9QOS{eq+J&IFbP25DWnOSm*`QrhfHA_MwCQx%IG=6p`Io z@))}j{m0hRAG@qyOA;Y?Gtx7sZKA5m&>YBf&`%y=kbstlkC?JvE+%l;IG@2S+x-lv zzV2Gk57)Y4Y6r2kK4Ltj&Z`nI6jIQur8oMAv6x|_fd9+E2c4#oVYT9fhv9}BjP~b> z12`%eZE`LjH&#RjdJP1&XC^*%eplA3vw1b=r=T8j{7d8g>(jHz3kl&^zycnws$9p4 zH8$Ayto7+p+l7+S^@ez3Qu@~V&6B<#^}JZ<(%_lT+rJ|;!iBWL^w{ylIV^|Y!>2$2 zFfX_a0IIZEb@;vr*>J=1DC+I*SESw=sk-9B?Cr!D z9}VN8C$a{|S%r&2$MoeJiP$u@N@X#GzQFO$m8HGxB>qUamV^}}_D?~bzoK2diJj0P zT3IBhky^2gt53|*sWAu^BMJwh&LGVoJjC-*$Gi#X_X>qEa9#vByqq|FM?O%0y(7G} z^_IV>DM@3HoyQi0Z*~7Qg9O~SZ5A|=?vEs0G{yqIrp(u>p#eAdv4-NymaWHi^S5E> z$`8ye@Z3~SFv-i)HpIW`Z%k(p{w!U^o#Om}q z7TKijP>{@yYhQkJ3cneAj95tsPud3DvjS<{f!X-uwh=rA>!*6me^q{1zUAWVYwhkO zndN_SY#yf^t{r~ky&MqgbZVnPwD-f6OibfngJ`3KN(M@s;wC9|e}GnQXY9BiJM z%c(sf$CmHSr&0%iQyPp2w3^zoDnY3A?0<(|zwVtL9wu z`^ioz25MvOL-s{laXLQyAK5?%3%wVF0@hIfCwZGZZUa%n;>9=Q;zOQB+ z@ynzE(*f47A7c~GgcO19l+?$Y7q1#Mb5wtyz4nw+Xf39_^u41g$Bd(fr%W>=>ItNb znXpQa67(_!6U`enp19;yyYh)}=sl#;O1@Wk;OWi4guSBD6QY>D7o9K@AOJOHG5oJT zKEo=f8eg#eFTc0in|YQ@FHaNPk|*h^-k;}1Z1Vk;nl#R%wRhf+*y6?nPGSVN+dbBw zUC0XY4tqsrNp`^Hc3}xU9lkmx9ZdyK%?h7FcKmp2q(1k%YT&r%66dLoN=bO! zI0wT*$B?h@6xbc2=Ke=GbtUa5<(i_ljsdJ(__fFFIFptai&8z0BjH zWSsa=HmxL0R0>UDRFGw>0xnkJQqf6dyL)FBvpoGpPcZV1A_RI^dcI`9K5xN`@Qjru zvKw&o?qN~;olOj)WyB|z7uI$)j|p>lFS^W+R~Y9YYU4v!c(vK#sHgCWUZcy(4XaB( ze(mqfqCkCmH`LPkzfl2rc|!mYP#-+Ok!6`%Ex2T+lS=6r9n(kSfM2sCiF=@9+`l|? zpwlujwM75gbk=&JlxFz!Q}4JQV5*ffK2ys8ypWSNVo&Kcuonj+q|3$ZELbmIULt?i z6u$#nb0l-fcVHwK;MJ*!wYUV=o>H(EYa1`d;30f$Vefu1q73Gqb;A`>qX1O}F*)L8 z(f5wAl{Rg|jnd?F9E4ZSu+2C)*>-X4$F@ZPUVddasP`;}05K4}yw*)_qx`X%!=_J2 z=PjuHI}uozFxnSnIKk}UmpCAsjHLplLJF0=(lR*s_}`3R91Js5a|o%YsejnQ5!RcC z2F`f_sgY?MsS-U-uSf{WjAgP=FVU}A$5bT*)rKaUq_$0q<=3`FxRN$HTm{sA%dtRS%ayS`Ap84yLNBnH7Aa6!sSJ@iZtt8^38 z9G2fb-#JPk)M{7wbT%4(xB=R|=6;%6I}c`TAnWRgnohzalAeK2kS$Zd-;C(a-FzRZbCT zD+B>>_E(1{kiN_ahNPGN5WA%NYw=h9V8P<8a_E8uJtM-?)Qf>QpUiS1ygTh@DwXS)T>`J98`2vZFx)W43=?E{Q(}Q>6Mx)R9@F+hZy&o(x6R@KUpJKh7sh zBN3CBZs@*_m0szP85)2VO-VFmY6GGMZa#>B)_SZ)wNI*CL-o&M+D_nSaMoo9dW{MM z*cE?dO9=r4?t@CLElBf6g>9eol=A{HE<$p*R0tnw`|o8~_A_>122aJizfVq1*iVL z4!co-goYF9C%9*3dP%g21+^6KMf}gO91Mfei$+r!CNn9+MtA?g415tYvAzv=g}|d5 z(+ofB#k2ZyYRilC)KQOr^I#&S6Z#MtCxnM8=m~kOiY616vMyef0$kEre5a`9#A;fY zP2(+MoTp~3?e0VYR&_WRKgB&Kx$%x#rR6 z?ldmh9m_0s*_3CP2s$kEE5Otifq{6wVEa&j?1%kBRdg(a2oKRn_!W|Xmaf2R&9^K! z7j8-IpOZcls@W6M)I@jV9S3vVQ{BjE>ikyQ2b2wMizeVN*k!AuwBL1M8SqhnI!~;j@-MUlcD&5oZO0R0U5*_uYAJsyf(ZUbKg&Tg67dDXfxE}Z9T%jzT?TgH1Y8Vf;}B0%I0 z-_?1JOdtJDfuPd}eoQa;xjDUSF7*oU+XaDE4HHE0YTcx8tsEt8{^_AO)*6xn(>Zt` zO-dNYtm%y#q_xriCTbOsH+kUtezKAUB1U)C$%Sp^RWaCQ$H z;^5S>{m&4LkK(AIJLBkrZk40F&VivR_CvEZa+y1=;kyV#@vW*DFaTJKG{$0p>kYT7 zgz#$)-_|nXolbsT2dBHS2;|d#y>s zC_=}%Fa7QGJB7r-ww`H+{SMO~Czn|lsOd>wd3l&}Jno5UcBCRt3_}gsb9q9zVY4W| zw{$4V-Dv2Wr25CFk2OAe_p$VSgqwNF^az? zfiX%9gP~rS#h&KEFvF>UskcOujew8LjUb^p-)a*%9H|6`&EYI|sU;5Y3f7%Wg0UcC{u~OS1g3NCQ zKF^N-PAmr;ABuFjUH(;^UMC0s%wXO-Y7Nin$mS+)EQj~TQ}K2G_#b_x(-m6u+&>%k za8Qk!aasYUb&1XM0Z`PZDAp;N!3N#MEa87jtXW3LK~o1+mRwC~LSZ^NeK3p`8(sBO zkNpoLAgdI@a^N#z7O4>i_*gK&Cda_zx4~5T9ubB^)9rEZ0~hmIni}p12~5i(uHb@E zO(7eyqDJq|l;iiVHUv7UhSU;wwKflY${#lt^V%8sn1hu&H#Z%uHrIFFyPD7Su*_`Y zqO2Z0TmG-lpK)L~P=aGh(a7s$V{_hwmXY>fM_zn{(_*e|!!x6%g{Gt* z2dz$;qPX%^zvRM18&DZ3I9b3nnVn9+61B0Go|1^L-m5B;@xK#W4|yb3tzW?s#hPTV zP#{L3yp(AYbSQ2;uT)oXo74^Cb#!rP(>+`(T-uM`FeV0~GNQoogiluI^+do()jSYM z-J6K5?tiG~o0Qtz(-{|1vnCW$z~RQYrj`frhE|+-FYB4rF!~KPdH7_QU?J=)6=g%V zU?@sqb|Fsv6KIT-rhaB;|V1_!?D?f9rqy-zv=a#jiykRhXy@M0VxmAWl!Ul0E*Ekv@FG7OoH zxWj>mHU2vVBf(}g&#d&RY!~G64TT3BtbWCktsC(*!WAc$hw+n`IT(<27jd2aZmdgY z{yN69ljj9;e(>RE6gnL{3&2>md!ZMKH;f5lWJCdS(#8zm(I=W)_M8-|(AhTZ2dT!c zFRVLMKH=zn!l4X?&Dd{kB#vKi4N+ZR=Hvb5XZun_$}(*RtN_e}`mFd;tw!9p*E3K^ zD=d&{xF}vTV)S6bsDji(9%_wfB*aFgAwJuy+~t=&;w)XD59|Em8R?6A@yt=X5n5O+(|RS;%!6f7Bvigrd%-=?1IxNTxP z2=Q4dcpV5k${T%@e6x*wq>5L}_&o&^N>*aSIK!nP*%SDbwl9#tY(@a(ld82#kQMXeTrp z>mf)-JtiQybH~o=KUBPPnEXJ;9{_cI^A*Nttz;4OeI0`Al+{^X6D|pg_$YipImPf8 z3!PpDJS~>2tTtHWSaVD2I&KeXak+Q(^bD~Oa4lghq!2$!sn&_#f!MySe-aZtiih=0d^K*=974rswK;JbwdN1uNz&$N@h!Q$+D z#31itJKhvw=qS2jGcNZ+M3&2xkgSc**87F3@QhW)MJ~o>^;K9KcfthX6n`-HPGS89#hnftHiMojn)swk6q5pRaKKQ z90n`6T_KKA*|g>-CjmblXx{_62s0nKX0_k4a@J%kJ~vKp5ivkVBGm`P9@Fp(zVb|M z;Q0YG=-KZ!?b~k~-3@ zlrJwhdxDPP9|rX$F&yy9EIu5ZWlTAl-IXBPDF>rjrG1PV^VA+oeeCl*-u@JXME-rn z2%7R>D!M+q(NGc=cBJV7vQ_|$f0n?h)@+*&?YGm;9!LH*MCJ9*c;N!V7NkWR!)^CvDDPfMDc z3_xWZ%}o-(97FbWr<@zIyfjD7GNLB(!&wm<#kr-K-&&%a{>N>*<2o@V_;e=+e{r_r zT_tNP0o4xtWl@G;M&#i#vn=HGe_r7lymx;>jhss*$9ZVQN2|8+5=Q zHbaAH1*n$t>Fqk_#Hp!MoO=qLG!46;d~ayFpq2x9|NEj86%}!M!x-))sx^j!>i~wi z{@y=?c≺q&1OsM+`-5d#d(xFDEigOByo#oojri`upr*@KgT1_W>{)JCO1Bw+Uul zicjlDvCuQ4qx%f2ffr_Y#e}A>W#`zO7V}o%6?r8obj@E{3o+1yuZ#HQ0vs;Nk!J_ zR(XAFYzI>0`7zAqNE|l7Mnn6gpk6Aj8qf)ylag9fvI7AcnCKT_D4cY|9@rPI_X@8^ zJ&Z#GCZ9OuS3-j&)&0h0EWbqZMMx&|P5Pn8vbnbM8>lQz`yau5_yAY8cfbgL_&@!L zGWfs#Wc$1gEnE^hGi>Ixwvd`CC?)36+0pm_vi}Gdb?dag;k;pG&r*T~=I;q5h+&us zaj@|&1LL_TxosFcET^Zq=&n3pd{-F@b&I#472rx^)mQ1zFXzozZFFFD z>{&$u=5H=rwkG>|ej7moQZ9R9uhVq1CVHOJ6sN8yZ^_nH&!9iFG~KmBPFA{k!uIgP z#+wJR@dSO2Z}|K<}pNlDt6RDp=Q z#|}H`0+ckslC==i2tWI@G+{R>HvAiePk)ay>=xD0kxM4#b@qJrDl6lG2GIn}Z|#fSAUdN`gXM8!3wZIg0h3yx%XFgl ziZVjKSb_%HAqVw?s~K$XPUjSbXsyBTZ2&e&_@DG2$}9 z{kEHxn_)$>1wWcw)yjteob*DQvtClw64sH2wS` zZlE~qNF;hYIzx*&o znH803@>h%Cc@N>273h1I5O>t_d7FiM2uO1TEQ->Yw{;ED&J4K0gygj6Ulmq^ooFIM zn&ld%_o0X7cTP0#xSDjxdR{f3k$~^tHIoTy(4-1WO?t`l#^9F7)_WcZtWHf-%BZhZ z``-)@EH)4?#+#}iPQV4|K3a)B!zmx|SCCZMt1Cp<#gj(3-mI*8|GgBwyS=c$D}z&+ z<}|+|_^?WfBwI2fDGB@L8;f|QM^;*J!q)R<2BM$2etKL`?9MzF`Y4~(O-r}c4Az)#(N_g8uG6uG7Gw*I%mJ(5FrxSAhT)H=!jB_4VCX66zj3R#y>AKQkC%szo zf6MoD3<*NrUa+*TbIlz44Ypb>ro|*{)qfF_las8%sZ8i zQTY~}5vBLS*&%lwOlUrYQ3oE_ax<^SE*dp|JJDHc;Jr)b{?XwjxWWJlVnUF;#)fMF zxQLxGaQx`pTh%E4c;0|PQWs^F$o`#d{qIQ@JKgu(;31VV-E&F4#-BDUEW|FX#A5Ew zB30yOw&QYA7nuruU!(B_jkm<=&uG3b`a18h?#shS$?pOpHRD-DU2iuAlK8M^KU}c< z5Eyd>UAfpKvb}#M*k5cr!M0Hh+$_JseWMYe#O6{T93ZRrZ8;Q((H!o2Oa@<`6djf% zwN?;E3OOn3X2}`mK`JFcf&y=}wY0iZ1WiBzwHXo8zH#ZCLuGVNgFpQa%1(UHlp)mn zJ# zY52u(BmzI4AqsFC`O?ow8+=wRUpx~9kyNa=+O?V)eEalBpED-FzSMAi8G!6k%)%yH zn*kRSh@&GQSt6XDyp_yQFxvbxe=a`nvFV3yB0^kw=|DD`(#a4x55Urw$DGMr5q!DU z!*o*0iqbeagd9`WSY2ID)Xl4&{fcu8;rk;uC4)8Q@v(H+M=6AYp*ihqjAd&#jCqODa) zvgltKdB@Sr|wts3+o9PHmOckHRWTKxEM)nF7wgukN(Kn z5OB(RcX#8W;8#pgE_u+TyYLwk-h&q5XOGx?H}vpqul4sQDBW!?&cB{S)DsNBrLt5^RH z(oss5N|I+7OZ_8;X{o(>5kbcvEp_lvkD_nBjRms>UIhoEeahV}mHZXJwGIQl_Y=2X zu^j--L0KA^qK0;RZL3_`@2*M7Y+(LaKwIFYXRR^h5n_LtfgnzMRByMJ+gO5Df_sZK zF`lPbN63D#xNuiO$io`Xpp%YC6J6w!>|PqiQ6xE{7L*oUv%MdO zPcblpFrGhEHQ3$J9{effK)(9)ElbOfOw_}7JZbB5+8lW0sr(^m#$ca0Pb7uc;Yznf z;4K&a?ET-y7IlP~3B8w1|UYHph3mFTDC1wQ{cn$4XP^`JMSa4T%A2 z)zXyck|3#?nf^)9DIJODi%yk@k+c>8>c^fq6j}hLq#wB?P!juJ2Eu z##2_?AQw!C;F>}qhXm3dtOuB{7a=lbk=8abwy#rj*N>*Yl{uXl{BG*m1u%hsQz0M& zON)qj(ch^>$Em0YxM+1c`f4lp=eM>35|zpPJirDg|FcxJl`z(n2d}5c3#LWQCW#CV zwZ|MA4uXO}LFAuv+m*}=99%KQJ^;3(Wg|0TvquwlMaMW}pBvrhy_<^m_Xgj;hU@>g zW=r-2Qxpf>WYyEgB`GBV{IMTx)jmMaZ0rD&l|{s6AA|l@3Y3=rH?>mz&(LZLDqF5} z*8|F6xo!97xZx|Z$j-V4B7>sAs_1O-*`akYuqffTvj!`Boo*a&ll1bGC%*^_Hccvo zc~7kp${zPzg{*t7Uq-!_ao^G=Y($J|^bMeKzkzjdA_s@}s@}t~PcjmP0RVr?Xi6kv zX5`V7{3r6RwMIRl460+E3{h&G2#!@sxhhS+3bc%2!j}iIw~XJvdz2&Ot=(7NY$0_A z+9Thn`Ur4XXTFpQoz-_0j3s<{-2B*AdDNmUxY_IIC%|zfF;(_HRuOD5!bS39Rll1j zJsA+G1b=*PK9E)ml}=*T=Wi$}V4T@gk!&pOb2F|@oi;3E#uQsJB!Wj!AUwZx?cEW7 z7VUq?IF#r9Mq&W4@f*8{^Xz+TIcatg_h!EYk3|J(&lF*(3A4QZTcAQZc(@ zcB4;Y@IY$_RxCC;x0icZ&n%rdZIB*#SZ*F+Ih^IS?8PfXJE}?*GYbd%J~WT0*yiN` z+!qXFp%BLPUr`pB1jR!5YXbeG>hvX)vZV8{((B!~-?)JwI`{g2t00;AQfMqA`hTrx zpfm=+x}yINhB}(A2z>GpaMFBnzqT|V-4qWwT4X!l|Ed6Ujs!m~P6s)uy{S8Kj(FD6dR9YG$|ltbTx(jm1SW+R1+f|`q>0Sxx7bevmd-L6p{ z8Wk$*E6z)n{ugj(&vvcs)ASyOMZk`%rNPgQD5Y#v<+|<3Th<1g_V4*3W>v{OZz<-u zq^l@QU)RAVN2eYGR1&YlrB1-?%ZS!Bmzq^(u4Psk48DjS}~pXdEITL)7o> zXrughaT^V3kwS7CQOE*oa|VcxT-N6hfT*-Dx_p72#1+@pPIy46_Yk5_+tH-A&TWs% z;{rRNza&`RV-EY2@j_k!m+{^v?@ugJpBszcrEw^4fwcRCSMU2Xla5+$rNEL7WX-%r z4Gn035(NhhDcFjNXdu&{#&=_}%+*)~Kn22VhxUOJ>PSa=RmtuKTh`?|5B6^D00Eh8 z_iR=5yvN-elZ@b6KBwiJ@Dg`mX{-GW*gCTE|DE$yvzDHb0yt9FM{TQXLI0pvoB#F~ zV0r@97bYUOMWA9G7V_FA%KSzn@TURb0vjZ>k&c8*u4b9JQF5%&GZD_oRDeRBRlKX95qSv9O+4mmP z>rFiKLGTY2yM(rOis#M39el1lz1}vWC0MiPmLFXI4%;j>xKRU^c~)#yrE9f-9x}3w zq)Ll=WWC0lOJnpbw5Ljd_gji=2`zhVht3G#(xXy~G|)>kEZZ;T1}UaNYC~y^E=&?W zDV-*be=z3|@YAn+2rE*k@CD4PZ0H0^LuP;&vd6)<^j-(e!a$7=>8 z0aSw_+|Jm{zW$2#rSqm}t@8=B9L&C_&`kDgh`FM?$c3a1bujD<@VP+J(M?k|6t)YR zSM_tM?eNj*_}%SYu)f*^xb-OWyO{A@_YYUJLac4&fIUDt)KCnGlBr2)F{fYs(B26w zC?+h;d-sMWmOz_R2Yj*ia$!kFfld4Yo~Qsxmwb1lZe)`=E<|$V#;E)7)KLa`SAN9t z$s;m}mz71ZYvR45NN7`Ohh!{|z1G)Jnj$@pRWMfz9mYNtyGa<%>8>s~LU0ji#yfh< z@}An|ABPopOV${WcGw?=7SsRMPm{ zmUoKCW1;kRpp+kvZiGMgmHExgjP5TNwkj7=<4O{NU(;39)%D=Au*BTUd1Mmh81Bwh zU0_X~({iw1F=)3IKvFS;gU!jx3-lf?Qnp-)5RKCOx<2CoY6x4}CFSGnlb|w^%0`)C zBd&C%d1ukyCg-=VV5W=8e4Ouv4OH*G{_@lYHJPP%mu(aq#oZ^^8UnX#HQaJ29p)3{ zf;kcV!-&?$Tqmr3V;gq=8zEW5N~1f^dw2Ir{~OP@c6O-`j4CYJSuulE8N^`^7f5QX z$H86=;!SA{)|m%Yg9ZT}9Qa|v``KO$f&e3pQB)XvYQR3jek zA8@e3#P`2T^cd+UpD01I%C0^=5(2X_4uQ%U8f1C&q`FWvrYMuV_V2HkLh@VWN`He$ z0is2KC5P%B2GS@9^+&Br?7mQ-p9o zv)+W$Vnm1>s^~~Nn5(~MM>nm5S--}v3UV6Cl+Fb0*#*tCi$V^ zNH7tCv@pV|*o-DzYuf$2NWjj~LwwY#M|H-T-jw-$lERV8i$A6NKU8&sQFNn|V#>rM zY@6Y+Cd5daBlSmza`BB1eMk=De)m%Zp{@FA3tY(luAjOcU%oMI^rfAxu+Y>?5Y2BxS zKr(`|rA}PUvx4_C6}CzPSV1hbv|*cV{30IvBofk@z3<_R@vgmV14AOS?kvoyeO7hW zkB7>){*{W>m{HmA3V^)#Y|1nXE8YK5Jm+k_lXv-MF}4NTl?rJ@px=kr%0X`RdEbni zZsH0U;v)Rjx`C(VcYr>Cew;o92({eOwT+b}erap4cPi;YQi7ZShxK*4d6tO#?`K!8 zUA`{o0qy>xNu)W7%zfbwz9}#>eAGT)(&6%ijxl|znE1TN=9?)IMWKYhygm1%Qn5p<}P5HYVN;qCT*?%9Il7-F)$!b1*Gs`lIC>R)*jDO5{tB3h& zx$7yT(G7nGbP&P)>~>0p{;xzosj|DhV9<;NLRk_=&54r{DV4_bi4C712xe?@gQxsw z`m@3j4e@W^*!OSHdtfOP0KlmVq0bL^x_zEAfA-AM99$tL&=C%r|6E3LOtrJQmR^;k z`Qf?Q?7Dwlm%Oj^Z?fzk1zM?YXM2XG&7QHH4i7tw!snRZ^2dZaQL)*z%Oqer*r*74 z=+mn~fp;gZr-yN7@Ee%nK6lhm2f2^{snt>N9gS7Hkj+@5`W&~P$-;M9IyE(wn4TW} zl7hAf3-3ou@aH2SqmcHL6=-wOopxZSl z`4u9~NmY66wQKD$G|1=Z`{AZ{-T)F?%jTCM_o3OiS_S5S=kV7JW;0Jgfzf^TXHH}7 z)O{OF3fg9s$7GR*g|yvX2ao+url^;U3S;YytS^DTHlXfgf-6~tbiGZjtnhvLi!Aw~ z@8;LhL!@(CreY;A-k&4v_B)Rxvw+jzSU0SmaE^Gh-VrDkI;8@qa|C)HMm%pF92obh zFFs=8`kJKVV-N}p<=w&2c5hbO+?AfTW-Du73FI&;>6Py9}G!=4Q%ai|8>i?0Z+x|w|snvD(;WS4rW!a}+F^7^KQdg$j?7XCg$p7rR5 zIE2o%2CoGD5gJwwJu#}ie<+K{e$=(M*G+rT={)*xhc;IR2>d^%shn5tzBn1S6C2Ufum)d_JYV}&%{0898d~X2(+zFrl7~Fk7JBsdOJyh> zCpB4UwHB7L{fR}vJk+MPgn6g zvd-|O`xoy@7CM>qFr-V46ao#=QV86Msabq}6L~B&UT<$#beKi9r46>bqiu0Z`_%^T zn!;jsM-who71`YMo&9U4gr`vio_7b&<{Ocb$!FKChOT6T3o^7EBGI2GvU#QG;F+ATrqgD=ON`rqd5cS>E`F6qxb4XRU-k zo-QeD{adtKj65&4L&OdhaEj=VGzx|&;yo!#T*VYI&$fUIJ^j=-h-t!THJiM*YTdkr zV_@1mv==HmHwB{w;&JGG%X*BV5&?qICu$ zcnezrFCokE9Bz*N7yvxIvs&trC!3`-RaCB_^P7w`9FiI&L94^NH)f<%m2DWKD|g|! zu=z3lmt% zaa~rww9u#U<7bUxihcKmNIx)&)*E5$bMuK0n+fdPS?IQ?24sWjPcXbnX9qS?L&-di6; z062tUvfb+ak^l>eU^;q+onT&8{p&u31{PY17$uXHPW1ox$XFpzzW2BLUVijh@0%%0I!aC$l354QKWnY)#&mqnNr)mB6HJah?5@YrO=8Sqrz(;{vPyZbA@VW zkLIhh5r@m45p1BlzuU^)0N)4nBXZSV}&ZV2z%%e-wwa>x)3AKY42y?zAp zb+Q8~&WIE48-G`QX7$iFppSmiHiOZ%iXZkaX#6K?9@H4& zgRBF5zuu*h%!us8=Q$P1M#=Z_avyJ$qirl1=GX; zRI(?tqlqyTUq}PzL$yWqly&a0N}ehB1MRa9K+ErxD+pX_uh4^(?H{Wvcu=-WuRZ(} zR&=^R3#tH97e0q9zqQwa=s=byLBI#l-~wv6k=#gUEJVsPnmv{86T6ev{jUBI8-cC{ zwdODazj}xu;JoN0grBt8buQXf9>^NHNXWV?G9i!6EjZs-Zj2x#=d17Mg7)B%OeJt{>VqAF}h+@C*!QRCOQnrwcgRbxo@DkjgJzHiT zFwF}|X$!NrKs6{w7O<`iyz)LImhrlf%xu13($`hO$(erPDU+-Dn=8B{vNJkk)>2mb z=R|eITJuqxwa@Lfq~HDRg@Dx$I<-26nx0NH8GTle`pH&6 z`HIU+?mNn%ZH9_kbEVm={&@R&x}jzpyr60{bEbkM-B{OGal3B_1c`38 z0wEU{7gC;+cqvuAn76J~PyN$!T;OL~V58L2PjG#UY(FY9A=jWOK9eT?2z={kF6P{hquD|N_P za15!U$Hel4-a#@u=*m)QB;Cn`f3agLD-Q=1JJj<_>{)cI9m~uaZhaLnSxj4&DQJF9 zdJ|ZC`JDAHZ*rLfs+hKdCDSZ}1>xfgm|zA3`eKM44nB-z#Km?@g*D{3NLz;6-cPnGIWgCoHv5C=4XEhr!ulZ#qP-o#y zgXbw3Hu~)AcBj~J^kJ{nuv6l@(%kySTzxhz5OF0 z;+k#i%=(uEu3D%|8YWp8k^5&*>+<-}%XM!{n!?!irRTGU8k7}or@oun4##UlsmEut z7S(>IBhtqQ^{Z8plo=7$byW(1CsbIR(xDEHN|)bFOXt6Bsbqmkr_JS`KFczVoo>)M zXe+xG>1q1+rsO)p7lcYl_EFh5i;?=SG0M1adf0~QN_%M8OOe-?C+mo2U-uVe0wgc6 z`H!H8x|8R46}2}IHD5w>S=^!?$;yy^#{xH2J^a3J$?t5Lka|hsqcWm3OqluLyyo5V zbOhkbyFyF1@IbYfj@;YV#=Tk5BQdn5bgeUnA)rx!GhdzDOnbEdZTxE53Euk|_D$n* z(c#|3VIqt^nkayA@@Fjxa+A`8wOaj~U@BHv+3sFLPqND9*-J*yjf*U9AwMzH%W1Y&$BfN@ z-_g)m4OZvcU`6-IEP;UYAfFK&zh!?=Me2xs9;~?}8a~77)@NCDVa{;)rAw(ojis)A zSK4MkVR!oj1o-yKggYf%?Dph8iSyeN6I~h#Z2DIP1=RxUGgt{TriOC&dyQY+?Rvd3 zc!O&xTi+pA!W2vyN_!&5zRtH4cu8X3>f57lXozd!e?}X_Q0XIMd#Z5x_u-eEW(<7d zxNbl+u+{+OZ*bxL(1lnIf$=3(<K5tS8`~XkjGDdH^{8}mg2c{UWgo|R(2LOMdAzE3 zZnDwlzwLz^)oHj=kKM~vlnCGo0ZKSHac>{WOIb0l|5^T9+h}S zNy5CCP@89hj<2=We~`caVi-8Ba<&g+<5Q7D1x`B}E{5k|EF#w@nQ=45IY5mEI2&yD zuXc?j`}U}LbUP}o`@S_aFvKy-Vl{gn1sCwEb#|?gYtugsbzc)AST({i5r5gewOl|! zRn5knDJ6oat0B3X|M7M{F&LX?@flmZp!FS3T*raH_Ttl+~{u@n^+1V9y0gtmeB9y5o7d&;GxP#2;%yC{8KZULhYm%j7aAmkVfa5| z*XeOQe?Urnlz*~3WoD7`KBkd>J(VmiAgES)gYegftVX^3IUQS(yN{|z*8kN4)uH(o zP0f*4SU1T(Yb8`a@c%@$MjUUZT687xyaXceiUh{86_XxHML4ql*r%V|ACt#A4{#F^ zE~QwiHw#i<_g`u&~+gsQ3JzfA12zhPy&E(>6-};9;6-D8dQ)8d52$Jsp2lgFJf>i~~ z1Q+cE2(r=VxTrG9|J(A25wb>JXq2E4DRFJB9AcvDk1b;CS3|TUU7SNqr`_qh zJDRl1gU}Oa`O?k>d2Eu@eQL7D!?aRmv_W%6ud*U<``#0XMJolX6{L2`6|2a;y4gf& zK$B|KOMU_o&``RR-8ek7&%?eMTsdlj-n2`!0qgmG`A_~RAKwp;n5 z-W9QSe$GlJ2^T$;4jleA=VFIz+IEG(s^muiSP%j>oNU$X5chv$G*DHY=?(u6TVEX( zWw*Ue4Ba5zD5BB|(xC{bfG9ci0Me;+r+^@(f(QcAHNXH8GSmP9N=ghJf`Tw~H{TxL z_nh;d?{}Dg9K0@`nde#i-fP|Wz1CivyW~S`Osinc)%zq>_0`arY9rT^rgf!=;poX> z);<*5ck^hALXbxrJ~-Y}y@g=rX^06{QmVoby&yaA%Hc zztQApHyi(mHpNuY!8ykM$5Vlf=X3js!|PR75rLhjJ4i>#G|nD-C2%-dP}2ElZ36ap zJKJ1RJa|Hji{HxH+EC|viyC=G;l(%Z1Qr!*$v`j5-e)l|4~;aV!A6#S2implXWa5vBHNbN&cQX>xQ4Rfvb8kic{b)p(?4S4}ZJzanYw zg^w~EOezU0eehLeR_2nmZ>Q2gzWdySK~c>VFz>;QEKLJVJI=|CPbA*~h7iS) z`STW=Txyp4T~`r&`#__wWhNpz`tJfX1GG$MuA*4DSwal`)0yC+)_VDKE1wlFqgXE1 zua^`$qFIX3glM+XNJ`G5=0i?hJb*svS0fPgB|OZcDi(@x(T5%%Rp5({ig*o+m3IcM zREqM%eFu6d_;#1_5JDK5M@2ABJz{y1f)=Ax0-DdTCU+`Kg*B1Tb3}4?h+(i`{Fuib zPs`V2-8FCTKHk1AVwT7kKXmh>GqDzb*a}=aE7fN86v8BBBdG2gO~{%FNvU$=A1hZU zjGS{6+3ySf(RZB<9yD4VqyC-a>C-C$!Uv50DKeG?i=HY?CZ)Qao_p7DAMicA^;x^% zK#=c|dp{rp&sjNIZJpS0QKFGQU`LFur}jx=W~jK=!ejY+4Tn4AF`_@-zx%k|Vd5#h zXpvXSnCc5jW1%(BRp2+ci!IXGvqpic2uePV^BO>o8lPl?P{Wf^-dAe&>h8 zjl#0(Cnm`A9N!X_ENLn@KGjWljcIk}S=Rl&8(Q_cvCx3SO>;^2-_*Gq6BKItkT$kj zMQF7U-R%vjuLx<+Nt(^=SzJ#~2LqSt&pvbUbXV(sxo^mKJvsKNO|Xs@19_x@ga11Z z?a)0{4s?sf=mlUDIPNu!*=TG#j>rn3RltwzqrQu4wh6=l$x=rh(mcSp}~+ z6Jfh{Zu9lHxZVl#*stG&FG=fGkHmAQzkrc?O7z}|iW;`2<3mq; zQfcAH&B>|3XB4IEE3+rS#6G}4ZK{hY9N+{f3e0Z}2l4ZPFZ<+Z3S|d8hh8EKI_^Ia z0^U3LpZe{t?#KQ z&yFuZvMSQc&tZMyVh)q@`bC+tl8Kwch<4Y<^iS_U>>Qia9n9-=MKODXe;K2K+;aA` z{AmU$t}oeQXBX`CHb;)$V{vm@ldmGDkRuZm2)$tcKGESR7~a0v7BWONXZwp^(zBXW zOO3O&a`z!&CvitiO(2Bvh6^fP#%peU8YytFK5coYogp&J^Gn`CS3_Fds@5Imz@6CT zl@F0Vto<>rhPZ_b#UU(yMZXg3J=ch2)SsZA^hy+ed2FJ6@q}U|5>hCSGo-iJ@`-+2 z#BWbNO0zpMC%e?%6gSjp1dN^!m-D;H#U;tM__;hh>B;g4H2oQ^MJ;`3Z4l|0M*LH# zlR3@q=u0}eXukuF3h41s$J$EKV9F0V!d5z>Xd|@0Zl;%km)%Png$Y{dtXy*(`==;a z`X^^xviZCFp28_N?XLMTOO#EvWyL@VLOF$J4^Pr|`>#3UtiOtW?L^MgRM-E0h)cw- zPl<7>vvfTong-G5-~YHcgr9`0d+pD z$UV-kNj~A!OYvI|6rSbLHocnF9C^-1C$Ez$z4wQ zK}%w{Q;E@%Z(eCsVL+|#&`XG^3I1nn5jyx!`R%P81dY5J@xMf6`gRYhHsj~A$~E~r zppO34m~@XQL4K(u4hJT>MR0{$AX*U88HJZJA0K(iy8E(g7>*Hcl}|D{k@uTKzMvil zq$F5LUIu;1x76t_<4%&mWt zM0}TJ%PTRjXDK)$tY*R@PU}?kd5@et$4WqZRgg6Vht?gX9Hw>%xeT{hd@&_%wSgv);w-wOEr5 zL+Vpa$#Rm4OlO=hqJ4WttW8GZ^5wUDA)L7p8P;~~&Os;juUqPq!0vCbaL~JKZ4Gm> zXbsg>TPen~6GC)A!gck*SVX%RNX`b16DlJ`+pC94MVOR}k#yvp^N>jm3%iOM?J(zQ{|{+#ha+E&HEzy+SKL>=pfUVkspt}w{o1ta%)_I zZdH#n+{gU0V@^FwNo{DX8L9g2{V*DFT`rNQeT!)Ue4k|=)VtHT=>Xf>*HE=Sk&y`dGBX(IzK8$M8s&ied_Q{&^0H5X>JK#JN+qj z$s~~Ey-joYz$z<(cZ1fr!Jod&teH~6c?$N~XD45PczoWt(U*du97OnHw+#~>yq>7$s?QcKT+g;q6f0xMEow0|E2p}mBGoMvgJKCYL3iAGm;dn=AT=54M89RUrxv95wmu{nE}$kgy0iXnCq z>}V(6Qf9c)={s>iDQcG5daZqHQvFeWNXO46R1tVxLbO67O#EuWHEq2Ua|>s3m8%hR zzm{-0rv>y`^=b(b9nEH&vXC#Ee2?hMJ27JH@V|ftf~g7rC(uAJ3@!FnM(D<0HE`b7 zPtG*X^eL)m&m}0!7mNpC`zvglQT&7(;k26*?z9Z;Y+=i&NR+o-9C=uYHm3zY(OP{~ z`TB6Ho$^OLMf;5oZt;#T2|Bpm8d2mXo~v09IYTKwBvSV}c}eNJbsQxEIJ#Ezcn7CD zIN`vTN;IKMLh{pZPjRr3cHA|Bpy$u+Ar63E$3a6iL&WKC<-Q+kJW+H}YEv%g?F~Ce zQCfUpAXLNOZ;hMkP6+yO{gPfoFg~Z;i|ubju4^5FbQ=z*xa#Dxqf9;8ute) zW$5I*Ak2~uRdKu)PU8G4;P@3~VxVcdGEB|{7e46`50V=`@sLKHUtTafA}Uf4{2~KvVdd8Wh*&<%=fVN3#G&9L1^U))%nlj{4jA<3~t!&xjs1~1f5ER zcB1%4H4fejMveG)AIl{gYzsMrkNnsO7;p$(|5SbbnDXnzPaKE2WI{J3%8=1~t<8=r zZ(Fk|I#HsPQK;&p?K6?D5^A{Rx?DBJ;cZk&cXyk71IuL}l@Qv0(O8MNQ=QmvDq>bs z?wcc>jbl7YA7*n(vfOEg$AKY51?t{VH+hXmH|5nzyfn-L&!|1KF-a?AH;H6Qi%K^4 z@x$LJTOZRhi;RX%*H*v;du5%R*fX~lrXTk9;LY+FYNpo{G92Y9ww6(GAFL`#YHg8o z$d`l)H=n-N4djBFHTl2KtE|*Y-dR!zZ9JiDtruKIz>cIrl0|r%hL7o9)ji!#p@%g2 z1RwNBhe^|h9U!^MC1;N%)t}Joly_O|aSkP01t(o_0J^zaEZuxhXI96RVumCn(FkQ} zN1W2XA8~y@WUj%HA3lSix}8tomi$UV(w7k387mKJgxz8FB_DQPM5P z;|B`BT~SfOqR>R5LI`Kct&`<6Jv~fmNo_HVKnEPJoc8?)Z85BBsTZ^WcAXdCBHzJ( zRkcW8?D8H09_V89E>zI7TL|ytw%Y-<-Z<{7jROfWPFcDAkLL|PFUsylqaqfT|{yBm8#Z4jb$;UYU{Z?nNxn+5TwZH897#6%8ui(bov z(>7C*OFXx#bX^1l?p`p~MzAlrgci0hB>1gR`X8$5*ehTu&V_j$*RuU_8m8bP z$F*VvRMGgNinK65hdsp7- z>J(G(PLM${yK6*^e*2+{vsNOWKW+D)b}%xQxAhJ&j_r9LSv+G7@wi2JQdCjSQZW(m zL;e25C35DXCqS=jJ)~Lfcky2(1uPJu1N=lWfx(QA(19E+cqA=T`v9TxK|b)D7@|s8 z$wGZvk13u`Vy~&=6~rwId~ydi9fxA+9R7Ay!zNfr37bUYVrruQxwqjuw66f_y180J zPYoinCXiT8_??D9;(MD)pon8}?;NveWP2Lgk|96j%b=s{t7{Ojxjv8Tz8x>|HhA)Q zVUE_19Bg?nj=q1HW7F;NElSR^!b>G z_esy35^Vkr2`JCl5K+u4h_f{qatxkv*=F+Lr%x)xgtCevKR8OiT>26zbi)%$Mc-n$ zoE3wY+s6Q-4;cXrNWFJFn-qU1Pzco2x)WxpOAGp=LKC|1T~~Ikyib2=d+)8#H~1gX z0s^tCzW7=9aqA1R$G+Q_1a=K5w9f`x2ovAqf3j#*z9v|5@VMQMa+uVE^IL*pgGMRw zNO#hmJt2a^8C>ngnl_#OD~Q+DH9@2Tl-;2SK~*mE{s&{JKGC|t_Z(#*8ES9LJ9@6^ z;aZr}oCf7(7U*AA>5&|(b|@bi?9Y5BwmvBEw&MYd-^&%S+iZPQV!VLy0HvK9?B(hO zkJ!27{WA;^^?4}iseaAt&y5AI+1?a+=H;#<16|nvloM0(4Zn=Kf&@M*NIY~X^)vFC z1uwC)0pFL7ZlTK-NEsoJDK9E9BHewcoOOSW)UVYx&k_Z3+C+?(p3QwhlcNccx4_KA zt(OXL!Y2giLplNe>8W8nG^pZx2hDrkHbyi&yRu7`@P3yJy$jf2lDB6%BoGQ|%Ojfm zn$|x_0A0Xs8CvSmB}E^eRRNN)Pau+jl?F%|;)H?|0{`%TiCap$uO6Do`R*UPu(Pw* z>TL_170Dy-ed2gZ_gQtyE|&ERot$Tz&PBi+buv{9no~O(xqZD*yX&+(v`i*7%nbZx(^k2?b06(bT2Gy zfA1-3_B(nl^_l2DRB$_+V#}93@xEforDGAf)zV^W5yKLYy zic2jlnvcG4zG>lnXZwBRtOf_2qWW%r92H$>6&op%ylR%09L8X@lNFPn82Rd5Y}=`6)b-Kt^C%_6ym^`2CH|M@$bUM60)$yE*S^9 zh{0m#P9ab`BSuqOj;FWxzs4w>o>BP~Z#^U4-F!@n_LI=bjBhz9om|O^DSm#eMI!U+ zd(XE^(w-|_2()j9Se^TYWh|kC>~BUY+>RZ(c1<`Xt0=8X9P`k6OKMK_?z@6rv-27S zFe3lBsPx~vo8d_qmFa-jBMKZ0CHuKkR|0pH(Iirr)6h~bs?2KhnA?q3VKnpIX)~Lh zs-$_)j!=!0tkajk6!s59j~vKQ;``SGW?UQeVpSZdoL?=RtktYDP1a=~uW~x#KS%Wl zvywAzn6r*lf1KbxQrNY2sTXOv$@K}-^71O}gLgkjq0`ze_A^G)^BISHxVL>c)iobz z#8+qFWanI=_+61~-IQA&G_J(5As?X9&cak@EFx~Q7X&sfsB#zFAd#BBkuf@2K76uv z0|oRg1Lga_k{qb(McF}t7;M=?f*_;A{bX^s{aSB{oVTlAy>*x&M`04zUNPH~HPsr& zv{d%|Lh|B(FOM79^L<<*4bF?mi}js)!sbWXjq7I z^tA={gD>DDZkp$e1Dy^j+71{=wrz zyrDWfdxZ1LPkM+Zw^K=h4^nhMD!4kS)6vF2V~Fso2Bq-)?a3MwqP-V0$}0k zPwUUP_4I~ zFK~FLniyTD8#}AH<$ECIHoPBht`=4;8E-lp`5{|ai__b3BD`v=>^g{*oCJS{!(MQd*AH-c87B zFQ;ppe{hgy@?8!2YU+m?mLTgnt2AG!WQ!QTT|ybWR%}ezLh-FQg22qh(xNmaX{5ri ziBsUrt;NyqHvZv*3})C|6Pb$Om;qT)39|Ujg_L{WqF?<`tM)NVPv*r85q<|*vLsZ? zud03o<`Kr}`qEzzplpo89qR}7P6leSd0Qic$FMyhUy<=?njZH6-61ooM!O&)GzLR> zf9g5)qqqL#5-!sr+ir}opa;CU>_`I96QQu6K?7)A6T~{=@*_rKqd@{vF2QdrZ2}{b zy~x5Zis}5aUBHboF*!_LeD>Bur(3DIbb}IM_MS4PwUXO)$b2lp6wj#Y(JlC+FQ5O-z5?1)LFp60| z2(B(H_8qUr80*B0G(7A~FEsWA{pleh+T_towWre~r=E;{d`#kw5NxtSrMo(w!y0C1 zmBa<0Ht~n;J~*lc$=e=e@aCiF{+a60NmZFWCHnN__xjivVJ6YQ1gd`1ontb;BaG?t zJX&$RBEViDxS~2#+*#Z0BZEytR@M|6B*PRGAR)esjf^W1U(i{Lew^qULORSQ+D2a{Skg82r}xsUy`iR4Z51m{=iy`!LuK|sP>~-~nXKbN zwtyCKrV_@?2DR?Lq%$c`Ni932seMJ`T3`@~vMBFOsN-eS@?uo%NYsRxjhl2y1#s@a zoeDXedPuA;M-(HG4(Tk+5s?$)gojM(u()K@uIvLpHUJvUIOYlM`4dV31gWxy3 znJkTnu%7dWiTLId-lyJ$^{!cHC#>forO~4|l`!N_86CQJR_rpikl3W4&kMC=zpuR? zQ6quqz^C65?JQeC{3#!O-(`FRY1`CQR-|LQf_gf2?M zdxh4sIsPBGMTHa@8bAT%LuI0q?81NJr*!Gad&^(%MkvwVhR zzGV$FujgH>;r)ASwP(6PGjSKXFB_di>mJB?VH_F_wnp8ZE>lq=h@;k=5Cf%d@mU?T zzmi&`ZRR{|OQ~v#1s!xv(1*AS=<-T?>O9-hype$3%^x*KDk?KnpfbKNH>de#f7j9J zatn}u@3nJ=lp1iNGIAuiPlip#_%!yvA`uH+9#LN#i1}+W%?r%>;)Oz`#`}9#-f_@x=1e{z4c*1NL%sr9BnE|({~~+$qMRu&!krL>MaDt z8w0|$!Dl(rnRoVDm0!XfYLk`rHmt326l0;C*MoDyq1oA(C$+w6IvpqJno^`@CI zfyE8k2O>|h>yd^FR7Q^Wh(I4pGV+1tKI-G;q~1zQMK=qTaeEkJRjpq|x2#L%y8X_d z61h5fp=wZzkOIikI-I$ZHk6<{V2n%TPkEfg<$HX*s#;D{PLDc9zgdD)wtqv%wH&i+ z&%TiuvpZY;W`c*YCbw|6%zWB514`&*BFth>)kYBDO%}MLb2{R}%O*_5t;Id{F2gK; zbtZp;cy3x8a7@n)*^Ex`LQ7;IXfZLYl<2_1!Xou)y|DErJ)>)P zJBpNfMwynIt_5Wt-sdo6$~JKEnSD>I{*f^QKNODadE_niRIgP+Y4M7`1fW(&2fI@? zN~)Gmva09;=MqiNtD+m8(C8jqRQ>h{G~3zFbzz+)vWw^&Kb;;JPis!ff9QLr-8jB= zuyw}a$Qs}~@Ch+>&JZ$r{9b?rBiCoQby80_bY-K_hAYv<=CK~%)YZP`1*%WUn~(VU zMfCM3TB%?g?J`Blv{C9V8?Wbo!sFNi7YWcA!)HG8P#Hq3Iu z?!J^e$$my1fk9s8LpRo&YR+wOttHg&0%-1Pb(=3Q(r!Y{$jP!v%}t>kJ(PU}$Y3@^ zneI*&Lb)_}cqq4GPc4$U+Y2?N>(_GKR=5uSm9V@EA7QazPOK?Sy5;u`Hre$2{%gW4 z-|iW0>e_{C;ZBmo=Otck{-YX|vG%9lJ-zrriGlvQIV$6sm=Oo4RwO0+-8@dekGc7T z_ZkdJNlWOd4B;iDxyW4W7tJ|WgH-KrAZh@q|EP*wcP7p@_T$+k)roj}Gs^(+lji_hy`CPYRc3 zrX!$|Udu%;{Ab>;Uc@_n=%W1o+(*B9zLNi-?RLec;q1f4Kz3V`+5GB);7{ixwv*fl zv*wDg3msAcj*bmKlRh7qUhC+RZvxWy4QkNBCdEn3_kGoid5c>~s8fk7M`Y8ZH` z3G;C_k#C&{DgG?0qJHa7o9rY{DbE@Wd*;Ypr@9p8@RUQ~l_Z3$jjA;iVQfd)a@Wqd zl`7b%9T)m(AIDpTGdvHo1N)VKmw4LqQnt35`OwU*gtt4~j8tRQH1W7~4SBPr11L!^7MA4oCL@eM!%D=@kys)CFR^%- z&}n8T4mhx&kC0+B)@n|V>CUcpYGXM@TQTTmodvr5*V2KlxLfttPXLi?XG@Ijj}sFU z^YFboTf^XG>mw&=_ChmfvA>oI1%8v&j?Ad=U<>LRig8jRnrh=CYlpSgEe7CVcSYcun=e z@^SiG6UsEN%y3ZQnmhS(DA{jV70pR1n10eQnSSB~8VY8wYMO38?@94tba(GqUm0FL zyT9DYC{Q$BtWwx1=r(oxfVxS9k=X3_e4qU@3S#qW7L;!*)MV4+mcEZ4@GR_e_GNP9 z*`h(H%t>R@N%(ZX|Mn$Bs>LJNbPqdv?7?)3zgC7aY&xnTU^}}vth%1c zWU9%AtOOrrPiRJ?4p7@1PF861)jU{VStekPq*OXea#;PU?O%DR|8Wc7 zqa(UPjd4rhA;sbhHzGePtH@3IzWv1I`Wr3c(k!>>f4_93D|Pxn+i;uy@tBsP1uHJ1 zAcoqnCioj$N#^S3R{Wc0Jk3sPmqRhSgA&Zc$b(J6 z%c^}hM8$UfMXbJUE2O0noe}LTx-r$%P!bUp#3H=yZoo^;X4=H0SdEBEJEiNKfB&r0mV^s9Sm>?Coa|} z<(#F(U13!F$*;IbV)pjd3t|5)+?a+cLu34G(vr!0OX?2zm|Tw$qE22FsWye??quXz zPWI#9lPCBH5ssOk&}l=|v6;&ZgvbG7n1<#>dWv>EBBpc}Nf864?R#Q0@JI?~Lq0`7 zAb`S^Q0!1Vd%BvxgaSMvN~}AH0F5n2f8<1W%MlN;oTA+0!?9yxP6vq}mZQXl zdj76SPKGfurC*3dA6??;y8b$q-nU6!c&4VK)Iy)$HMWKI@ccwBn~3UmFNcihIp3SB zN3x=#2Is;I3?)IolDK7u@?W&Ae#XE;{CK>N^Fo6LOo@$=oOef;?zHFQMNRobvTHBh z=|NiDQ8#>)OJU%CGNh3xLMBA9ZmP591pe$v>YJb0~)^QQ8Yv zXVywfVXf-+4k({#WHOA&xeiNDO>dJ|foIuwojq%-zg}`5TUz`J@i!o&8!!FoB;tu5`%cqgt(Ur`p?Fj(FqKI=AobyZXE8kd2`CT#4nxG%iL93|k+3 z=U5~X&v-}ZS;meUj>D)3ori~RDTp|K*m?2bO#?@2%3%<&FK?GGF5bB)A|8{)@($G+ zlIoc>U*>$`+I&-Fgeh0q7skrnR!7y!;}d5%zSiUyJTk%mW=ho*xIB3ztUaXblIL=O z1Wpvrcy^4A=+me#S?kk8SKNOOaI0%oY4pkzp8*FY6GxitDV#KbGG44Tp{hQlM3bhIH?C z&aO{|1f<c0UZk)Ao>v^F%cT_K>w>y6P&de9a*mp)l;BAh(2?2?nokvL zFL3rhS5+V^5{ZrKp%;lYc4-sRU@tCeOQke%tY_nI1}0abMsIMEhQyUrJTzzn8aq%1 z=WutOE!14CII(o1|L3yJZu&}PGprRlIweg+JR=3gMW{wor@5HBb!A+GW@N##-$2~; z7y^-5#Cd$gu?B>ydI941x3UEx$y& zfY$=#Dc8!{hyffbNk0q5)BS@JY-`u%>PaR@u>{kT0XKZV0<`l`G$|-h*A<>BVT(NA zFMiRI8j_G}xZ*Xn9qV7sr$I}|Se+usV*6Ol! zuyjq%*gO5Wb#hL!l)r&WI+)u{gtAjnLrP`EN5-IfkUcUPsZm=AC*yfSZdBvp;~ zyvC^z_~RGw&#kMc{ycNtemctso`sLIW5X^l-lvye2XCCxCmQ*lkzKw#Ti~s*e6|5t zVx2f<%OKA&kx3pClQ%sXa(i?#Ug!>ad-xHt4&JaD0rUVEKAJSvu6%5;*dx-*+l;mU za!j>_if#x}X+R6Fm#hz%Hdg@>g$SO$w#uZ%r+N>;LTzSaQv(QpA>Y2V&hs{tz7!2>- z)xglO=Ur%em`}o-w{JH2lc>WQRQ7BEe?uAW>r~(PCY}%LMUX}@ySSZtb{6%VA!&Vtit+F!LaQ6N1sJ-Z^(?+9q zsT<-fJzY?n$HXcV`jDx!OJxfO3(fI4?o>ZKyy#{aI_(7URyyQ@8zv2naLasVV={0M z4L6>C$j#6Fz}eSTTSimv1ey93Db|-XJRGsPhI#QimBKM@ECcVUUyO*~OPmR|YM)bO zoZc#(OL2qpt(YC!AG zM}@Hf8A145zVD;LJ;uPZ<*Ufk<8i5d$+>dxBgGEF&)rxJ0=Pqe4}2lK!sV#E_oKc3 z3^n2wvg>Cd!6acWK+b+U+$4U~?gsSoT`C|n0UfHnreLeG@&muE^;5YQ2 zvFvnQz*He~L$M}#E<5Fbpm_mdqJMZc!^oqu+y_FJO7zhiqTAac7$}kPPBArzRe3A7 zhTO$q6;aa|iE^5N3Y9Pyv;M?kN6>YWAsp(+i2G*x-p9uKEsOQ78%sjrIiF%SeHo)% zC!T<84|Mg*;7(PnKP|r3v>nEo+f`e1WFB4jLjInX_F0xTk&f3#VF^43kI=o|Y@Yp0 z`%_(dD3Px>LJ$K+w*YwrA-T)W0q^(J_-c>YSOt?G{h z8RGKzwp~Y>N19-tdK?onp{}KUV4e#p(sj~~ktrrA2F(c&_=V>ZCDy2SLjiHFL<6U( z-13~NbQXlgZgM>tTf6WX_+X|tJhxf2I=1hmacGVxDhd2zuZ-u z1TCx}Z27K2C>%(bwDZlcTIw?#)eVWTQ*c0oRaY5Zm^eCQZqdW_=|@oCEgrWCqeh0v z>OD5fKJ~Lu*|g&`rX6o^{v9;f?16$pW8p{YLBnPohU$tq!LI<_IdL8#XSR3-99GQD ztI;@<&|p~H7y}-y5edvu5LQ!)XKQIq`d(M{Fu*!WapF-FQ-0|^NhhJi*^dnP)gih0 z?|gIdv=%yhH4lDH4o?&OEQniSz`+1Xm)mX{uWM$VK%sdGOu)iAAIY%UQxcCVXwhgZ z16C4p1P%P;V7ZN&6&a(7!Bn*|vEp6Tf2anC^TP$ScT`g4RQa(=smJ9tTzCc2_r)k} zo+jb$Z*=+|=$Myqxr;CR(I(!RJRgv^z!nhs;*sa-e$e?IWr&B2y!+Olel+n`F}&(S zX|RBM;Ogdyia} zyAIU69d@+Qq{pqbXs_LwZM&1&{D^X>qjfSp7gEr91E;zvH-BA8|4{Pef&HVyp9OwR z!bRixR|}o35oH1HDO1-0OiH4`0<1)^cBbpEx)36tOpz%_g+k-4* zPpm4DJimXDsEWd&9rKo=Y_%pz_tv--Xq8?gg^M=OLPCy@KD%u|uJ#h3YcphRA`N2M zZbh&Mzd*fvNAv>0ISN|M4%Y0avOO!jUgJ9kcJb(izGAtJ_rYco#DUwo>Gj}>oIPfB zH-xoj-Gg$acIP!Plw*1yb-cnzKe$oNj%uGu*)xbi9p|L|TJ?osG&4;ugFBm_1pwml zAKArr0)hp_BfHdM99D_f6$?Hei7WOlarxB|SE-UF$QnW>*=jLl&B7OrIrqxl!gH-1 zdvqhD(XDB%dOf9WZWHU=ZP0l4_>Xu%11_9C%{h ztPOaH!znm~=~mV!YS@GU>cycm(g z`A-rH59@R1Y8X%(|NB8pZPqKX2lw*dle9Q^61{=);HDOrk;a}P3Eb0I>czttjM{jF z=uj#{oL_#va5d?G#Eh}iR}WMLnG%_DHknA^Tl3HhjpA1#hL2>v6?ACno5-E{w2$49 zdT}txr2qe|6z8hB*%hc6KF;<@%HDzOND(r%_hMGx2sdYz(NsazPB~>=QF7W7g%zpb z+xS^5!q{#C+`Z`?%$QZX<7&nEUWqy$MvoBfmCU{Ehw=d>$}nIZ~x6v1uYpHPcjf1*j0= zhr*W;WqjU+7SDVF8?yjY^q=ActaLfc+eA)r;DOKbvMVot#2E}9WFbU@0XnGr0qlfw z-iO)gzibJ|ELACCC=BBStKC#q48ZOY%0KXIN^)~%fSTb*;E4}1sg!-J=L0xREbdNj z2ZjBqTMNpN$9Bu80#G1sjKh! zg>82Q>>UFJA#d!91Cl*roAQk8ht$Q8tbc%#Eg)?sAA$n6?d)`z@+#&d|&F*x7i0 zh@ig&NuWvMVd|fk$VQC#gEk~WbgJub3$+5d;Og8Ar@a|Dzlt~zH_=x^_WsITuiiIH zZ-O)214I7!3m1{X#S&oh3C%z9e4r-)wbP?Oq^W|^n|oD4 z(<~Us>&(y+%$zcIo#SC@NYG#u+taj>LoeIA-w0zN4yShM#~A~3UZ6erk1YPDg81t% zQ}l(AvCiQ;2}V(65&?<#waEoW|9wKnTwe=IB1rnMx|(N492-SWL@XB~-}VwT@~?I9 z<=4?(=-Pm}(j1^iCvTx0+jm%qF&G)nhDT6D`35X?r$ylpO*>s;3U!t(3v?uHobYG$#-7-m#y2L=nWWe zMhq8cf(HR&qO+2!;*USTNIxUs!Y#%NT5`+j$H13!e4@Ly?gD>fJJw6`=La@j$He?Q z1esIuZBlK&+yW+8M#c@cyQ>JjAZ+U_$WIxe&4*jh!fNwfWXr-qcjFJ&QmcD(w=S=Hu4JH$gj+8yh=6dzTPPFcxTk z3LzLQ`Sd{ZFHHDGCF}jfz_o;BmN4+t{Ws6QEi-?8&9g^a2PrpXuGj}Z^3tOlEYc?O z^Z|72^8}4Zp_(QoMw+6NeT+V)MfmiYV>>q3{sdgd&$Ty3rdQq(jvD~&Y8cD@6*$0XUGtaN-) zY~KBuk33xMRm2lZRZ_*tL?^w1rCfxDgT@A;%zu-5`{AP-8mOXMu9&ZG)#u?<|FxL| zG-nU?Py-c0{6ztKmT&Y6-V(@@hPA#O{ndRi4CY@qpW+dgJ9gmp**%trza&Wx+yI`r zD;@7DN{(kr(y%u~XsU_qpri>~H2o(p!a@-1JCM%*Ff`C6p z$Uo~Htav$alnk(ButNDcI-*$7N|6-ivkujtJ`K;9O|!JHT%5m`w<#Okp?gcPG5S^< zkVyZrWB>$Yp&-O)#=QXT=t1D?&Hsowyt!`zvIJRZ4F8?CXJg{?EdVAM{th32SouT_ z&*Cx_@M8R@$FgFgKH<9q2bcq>M^Bg8PnkMjNdzCQ$GjzUsjaMjW72nB`r-dsOWKju z#o;GMMeOPV8tTK8Xkr|&ws1lwhfj|yqaXerM|w4~j{WPoMPL6byBizM9!D7(GlxbB zZ>Lg&%gK&0UIZ4EX77^`zctZ6n&Xynthg=#PAmn0wT2I$ zmG`*=*2(rKG3YzfL&!X!nC+=`55{X8Bu1Rt`GXpYkM*BN z$5o!p$2%_k`g;rub|z_wI%@sZZ7Os}J_FcnKphkI7M|j2Ta$Ev z`7xW3r-B9qbD}$o_(mltC^*g_j<>ff+f{pucFKr3khJmx(>y5 z?_*yc+I;On%z(zk77t7lJf;pjP|I)S#+GvEooU9e;4Vk4F;Wv_$AbQ^J7634FUa~X z0E@kr@FDSQ%>?2cKP))m*>91*pPL6#)_v>S^pYScno&Wna}(|L;vHaD`u8HuD$Ta| zyf+I1T~7?BHB9^0rzV)vizfI@YGC7^(gR zV*Ag)$WovEvwm<5@3DD*FFrlG>}A+A?cd=0?}YNtQqw|oa3WPwOslWHa{Bz^j(!x) z;Y~0X`GpGT&cX)8pTGbVNsh1OptP&|Gn`xe+7ZJf*I9?rCewy3(gnW@SNVKbNEMVq z{>M!z;{)y!dm=hDI=bpGkN%lPKq0Alz7G>`el^0iGLiqMQntMcWnAsE-GMnd+Glwp zIx<#F8~whX>5ypxx7*lSDk*yT#BCh&L|xy>X?zJ*S#?&!9AE*!wA^ggfP~ zO@Q`h-T+R6KdFrAQdruS zmT6$n#w1#LPrf32d%W=tnn7gzf4Kp;7-b6!vWO;Ut3_EC#{T&k-K016oBX{iNhA7t z$^&n1?&i^sdk~`?EJDY-B{=j$lam=ri0tCo(O|*%$SVL&`+vp$J|3EB3P$Hr@e+mg zB5rxYQRS{^Fiqsgt9+`*Tb}J?uTfOhz!9=6`^PhthK~ITH{% z+Z`0Z^n(uJB6Y{i{6F^IJF2PeYZvw$D{@4^5|ySPRU{%vFE)CU-a$l~K>?|y&06BtA>is#_hyH%Y0mwid zW~DurJ_a{&05oTX@!p|kl6gI}`&{mW^qBaMkQS0XhauXB@`9YMWAJsRMcu*w!f!u! zUV*%^LtSYMbTL~pdbKl1D0g6uAah+iNa>Ch}ELl~8 zOUAbsQeYW(f&ZWj#(xliLs_<`^4qmhNIR{Ns>~y^=v_O5oeji7Ksk50uh=n%Mu`-$ z-P3X=5;Dh{E*`K{zXbp7z<~pnjcdX9uYcd_3~3cU%HUXEI@v{=BaF-k??!Ic%7EdS zvcr1rmgJLY;^Tsa{7DO9Smy5f(WcRMBRRd#iWdG^9t&f_Bz?oc9cQY^Qlc!eY~ZWU zdVe=nZ3z_M^QNIw@pwqzK+zB*>cBCFpj(Cq4;;7zXGD>9a>F%Qr47&hX5UNFk&7%< z0H$R`)mlxVSk3DU<;PQ~`8ec|EkZlWSb4coB(zFtt`9_6=^knbUe}}&olpI1JR?KD z3lk&wjygLsWewc^8?~=_>NJ=G81tAz@Xe+=g{DzhC1p1ReXZLBN<7)361WwKylvQC zd0A3EK5!_A-Lg>+{F{Q|!ApQaZvv*Ft+HO%Fh7L7l|b-r$QC$pYJVt6=Rcr}AC6&I zT-{fhb2E2pDSezFim1+!-MecthB~f|%)wQOJ#t?&w&E;^n0)f~JhCHRj=CF?*p3cq z$7~&QI1qgE_MZKL5iv>)yCdBw)1(e_Bx1(hkV*mt#Ik>2D?T5NG;+Fa`%o;9KM^CG}33~><1s%oRv})TZKX`j$@Ed=B~~$_EW51P?Xs+ zPnsK()&k}iyGwTJ75XEASx=!30RT8~;1r6aY6$M^7%)w0@Y!08qQ_7-$MV~z4_NLy zgPq%wJjxt?^DN3-gM=8QUmo7F$k^8QnXLkikhBa*1$k_KV`FS;>r)oRi&O%YN(!W~ zpUlC>BQx*pS@Czv6Tr*b_8fZ^WiB(Uw?lO^Pq(X002ybDtjjYd|#Y$9HR-HA5wwItv^}n zsih87($V{ZM+{V~WE-c^=%M*W=av$46M$<)0 z^7Td!ty~X*U2k@l?fXlZl0f=zW^-?8Dw1mO5aL7-MrR+hZxilaCa-H!9{aFi9MJyO z7RMdr219{y6?I8p-HigLb&v>~V0_^AcHq5VttO||SSywOTq|I z>;h<(P0j)sboMTATz5UX@9!_&iBv)+b(n-UAQn0#5^_sXJpPjtecHryDsHFz9i{iK zoK`?x3l)tP!27t&hX+QK9=T=3Vp2D+GJ5}DJ8^$?d{`A3$!~s4GlC$L&0zhKPyH{vl(FM z8+#nF2Sb2+g7Jc9QIuT$0EXUP^o6T1JNgf>KS`5;gLU&2MZWi#zgfDzltPQHox|Y) zlx4$}1qt{~K~oA+g}PLuDRbV43@Y(I{OgmOIsI|+4~_C_AL+^N&|=w41lWw3tsyvEtC>~;MqR7=A$VxvF5Y9)Mo(M72c!g zQvgdG0C=K_Xz91~IvzGzX{^57%JKG-5%TBYLF!Rsslz`{QxVa zWP_=cyL|AY0j{M3L^2xo6KqeROwOtb3j_B%Pd0|{;R?uu3?Chw1yH)c!f$Ep5?fSZ zjo31v^w?Hf@~8(((5=uX?&M4Um%2CR@}=0u3ms6c8r)oNm44Qf$l)5895z%Kat0YQ-= z;j+)Gr~NbxGXt00{mc#JprwU*Kvqg4+>pFVS!E8aa1OzXQLT%mV~BoKJ%=S`Z|dCp zh0N`NlEe>zKR-OMtohvVy}WkOva!JMoo6VJDR9FlnnpjNDO*c@a|S%BC2G`}YL>uX zV*q%-eViY|d^Sa8l6P%Y4nCE$AOhr)NR=UnTFrHD)t3@D-vmx2hN_&hZy{&dXR@1?!Jbh`+oKjG#hBK`@j-P>M8&4TkRaB$aQ<(vv8r5{aHLq>w%}maM5-LMeSzql7+lUFI-T$(>9Kek%3pL3V!X ze+b-ko&*~kV7|!)KhU11ff!(YJ~U|vFDRuv1(VHfR12hU z?WWRHba?|UUC`8y_KY`lCWBL%3?S;PEl*D z8(vE2b^RhU$2bHe)W9!K-h&r zW}X7$bstng?izG%fIxcPG#a>y+-k=v0+fpb{XHrwyv2VlRlK^sC zcx3SyYh^N0Zfxt8p@WF@`aL7lq2=wTdqeNh;Ww5CfVckg7$)l^^t@#{EzdqOx=%}g zz-@j;q{VDlLcsh2QB`aKQC1RC1q1JnWF`hIApH@$fpYntK(^p*+)m9b9{K$E*I+%4 zaR3PdL=Gsi{Y*t?Uia?c`tl~`CJ1$r`n9Mefl9`GOl;Fq)oL6I#%mn@x03GbPy>{7 zs`uKy?)=@d@!&e3p~g7ijc^K(n^90N2TCSQ+Wjm6{|O{cc#WbVbrod6uSv~v*CRy_ z%Hd`vPUaon8L$mF0eI^dD|dmqw+Mi81QO4I{kSHimCF8;X4FIQ_~eqf+)e7}q&|@b z=$#5!AkLt@ypE>i8K_j3O z4NF}0_nUvOdR~q=O;4jDAWvTc$mReo)qW=i8VagTqrm>toYt3%0xd}MfHWPHBkv-i zUq?XUxo-ze=G@XkWMkCQaX|~6GN(~LsYDyk(kU* zSNSllaQG#q3D5l3i3Oj?gU~%Uz?mtlMGSR@R(X60%@ovRoTjcRnrz8z#m=o!H`_94 z(*KugWu#0*SjXKGH$PFo_jG_FS-aIh`1BA+RVU;7E>fJSwTT0iwZGnHmW08-ujrf1 z{$>xL;$lQOG-;C73%YlWeKMA5u28L+rxxtiQn%I+>tZ)!2frEeyWn9zj`{EN$9$7y zcjaXZKPRStgX5pLZtUIn<9r137Q#HELh>9SzbJDN6spO!Vw$A^Ebi$6n%vkY^wYpP z@CUUfCfA=j0B_h0S7e7)imX>5zdzXz`S63-%+#faNCHigoEp?AL!*0pYSee?G<(=5 zDat}kV!$*{;O={L;MZI85i05JoKr7=R55PdTK$dN$Gd)q+YIZYKg?-kp2oj-R!)F6yc8_@*MPX*#uR%rmD zre?lrHu>Pu{pzr6AsGL$edb4cr*WT(+~(xdIs4nb0n6l*kMKYsu{GGO2ks!&)L8*K z{ulZ;`sBa)q3d~wiT9JGhYGvv76DlTxq+BXXX)*Za0lv$g;~8WvBaX$)OWL2G5N#4 zV)%zHa|rfy3c$ z!nVX)Bw&5nZ4w}%5)=(c-QRHYPZ|66zl%CsIchS_e-OZF`R*2&(pFYpO4u+YA*r}E z3VfIB905K4Z~S&e{gC?dzycY8s@3=Cbd}gS2Y$HoIEhFrt#ILI$-Ix{Se5!?*Zi-K z0s`UF8bkmb`fro|NJbYe&4ewnA7FU|ZQrVPzIKcp5x15oha_|Y-~Iux(lzpg7$uLp zoE8N%s{NLA*6v!8{hginnW)qg@YgyQ@P>w(%@x~5!G4u+%h1`@ zwB99azUdKx=(%^DI#3|6J~zm>pb4qperor42jl;XB(+C9KQ}-2W&xOP-+DhMEX>>K z|DZ%pgJElXCAQ$+7Pa7;xsQe) z^bC}RQvVh7Bx%VFxbj;Gh-u`6C;n%}ckfp-eGed@LF^*r&^gVq8Pw+3G z0e-D}`{ci4JX#mz$WQqMY&N@JsFV$b;P)CMG*kSeV!ltYxAOlLXy2EjV3;^lJ88Sm z*84)^Z%gol0|!(ODBruSyJzUhu6JHjcYqjO!DIHJ`z1FVNCX;tV(#EiZG^RB|FjW) z<(55G`^RM8eL|~`X}|w)8Z9FAnl~C7f%>zXMSQ=>6(++2=P_qPZ!{5?o|^qDoP3rz zz-Ba*g*6I(BY?dtzKf>)A@(2eKY{N1Qkv>my79961@Dg_IS`EZqSa1MmT0b|A?8~W z`63~na-TO_b{@^8`m%Y*CYj1PpCoJs|(LXf#!-(HQ?uP|wEZ4s7 z?+kX|b2Ko8=M`>qHd~t5_^Bsw>$_orIVN`iS#@-8vLEUdcvjl=zpUUt>*DtRn#cdz zX9(I*`;hsuO2E%u^Z<4*{A-e*Z1BT~-xuJ8?af4Y}SD%x}yV+n`U3M1D>c3p@5sSpM z^0fE)f}3YFrPrx4lyr3M=B11$(&$_&K<klZ~U9_Wm1#B?$=fDAkOCRC|)_UjyCB$YGKGH0007XtIyH>>xJGG!rr$1Gb8zJX=yP>DTYrcO9aU?p_~6oR5nQ$9v}Z1}PWn zXyd_g`_v(=u_v?9WcP;OzKs64-#YqRnQw0|;t;K_{L|s!zHm>AW1_(mxC1Da{_nf? z5TF5%(RRjNoNnzGbYF7fXo7?;h-Q_)tA5+75dUoK@b+)<78n>BI{h(0KI{H=3$$Mr z*n_2#ss}|F58Xah4<_`l9|6o3H0<9n!@Bk)QvVM?8vp-4|DP=I^?rZpMYBRJ)5vq> z2Vc#LD4P`WTzx&DOc9Aad*DFn-Igo{2{A~~l-FprCG+0MelIcxlZ+#^Pi+(mHCzl) zhmVElan7%uGum2|?Pz(OHYo~F}@axv>;|^?0WmKDN&1W9T9 z?3L>1Tw~Qf5FTW|1GfrCAu~y@9w)_CN7q2BSIVTL@F#@0-3fA4v!yE^lxC#@Iep|2 zau;_HcM(#Jtq8kY6hX-K69MQHf{{g~S&L9&MMhU`D19JgG(+3gAyO_-rsiV%``UF= z7xVhF3xP8>WHE_rhiI#JSq)CR1cra&t96l`on#smo2w5`HKb}^I$_Mxbg_E%4%$LI zDjBJ%h?)Z*%J)(>wgQcFLL5RI{{YA66O`)d<+IV=fg6s6IRO;|sZ*g16LV)#R^^U2 zv&X&f${`bjJsT^#!#;Z}KB6WtMKyoGLA$w0uRD)nW(1K+#juv{j#!l5vY!QM@jyfY{=Ads)xcLfs?`}5;v}`)p@yEE$-$k_rrP~>HtRdfb5`1~W;m*GCfsvB6C72dTz z*fV{$%GqEddM$O<4_q-;{bd*Cu1H(XpMNsDHKmJMm=~(DotRTR9{Jfj;Nr7qUxLlS z;(4=F_4mzhsib$if!DX8OqA){irn~CXT{Tk{2p@89wnbH?^d}@C_KLtNtI?<9~I0T zT6ni;7mu}{9FR}gT9SF(cRkJJvQ7V&jrxmaBUgN+9^-2HV)A8T*h4$L>fR1(gpafs zLQ6qG2g^HLM-p@B$q*f6-D$z)BWfdC^=$*9gbg+jdnd}e&5kz)te!VH&!=etj!Kdi zXR|jMGeP zy=Sc|sa%?EU@0dcfY(;8gyjbGmND9PY#}<%SJ$?0xxKEpImFX2^zDVlal27Cgr{5g z0*~3Qa=4FjD4XVoy6Qy~`pK}8McfrQvzqzGWnb9lRjv^Y%}+b`hCw&mk!7N~#}NJ1 z4>7vNeoNQ!4||%OJ6hTVmxj?y_RNy%;WAOV>8T>g?!k|VzGqQ~-6vg|=KOB(*rzH( zvt(+RH6+ZdY+3GBb&k{}c`;aT;L~Oo`1+5INt$%@$}+3@mCUEve6~jGu9G~_ae*tl z_xb}xtS$VmL~@j6PZcYnsE2+vW*W?^Jp=sH2-Q z1#NxrQ>8!R60%>SqJm9I4%}|$<{ak1I`X*56c=1P6z#ftZ99w~9E z?-xL3{=upAf`)?avJ;7Os^yW-z63dH5!AP`t{|mYj-_&i*~jLe7WAvMN5TV@`<&ae zg+KT6)m~!Q*u2*jUVqkT?SxJS{rkgivC0c@ff`;UT}ZSBwrr7Kr{C0b$=y)1Rd$gj z*6Mvo0GzT+yqQVlob%yU^zo`~oB3er!=@g6&j^IwvSt-i+c6WdMhn;{og^qOe9$$L zbMAA<_g+l&0IQPgGJ6s{>Q%YTI%8_YuB;_KtrI?PFJ}yfBoUr)E?S9l!t0qv+jCkg z5}rr&5Z*l`zVJ~VGR-M6?d;VTO$9Jh3xgfOn`~5b_AOv^c>~aEtw>ewl7tCk`wOWb ze1|J{>|?tqmtZ`PEF9$m2twWfoc!BR4g8h zg~^B+MOE%RoE1kowXNi}a+(D4SSP36wqRzn>RZ<5)vQ7k6pu@XM|lzZ+I#zFOi~ z{_OiHo$@|UYhPN>C0tDkH-y#>wmy&0x=?jK`qqM*X{o?bkdqZ7qic6jCa8KsFQ>%q zZl6ATE44CF|7Mb>QMAwJqQv!uPWiY_oyIR3%-E4>e)p2mIo*IXq0EBMa%ZBsbCo74 z#m?15oKf~$dgxf`#S8aLwSp9F5AraK>ay4+uKmuK-xGJYW@|J{aV)u_$-p^d`SX{t7=7!WBBYQI^HTVzsXUGw zFP~Kkxq-9~Tj}pPLafR`EXIYy1d#$x6@qqGd7kc?F)XjVwAVSTqv$yrU&#nhw7zil zrXH_`LZ1+egqXc3v>p3pJm)-1%km@gR%clYAu{wSf)Hbr$YxcZcbu=zzo||p2AT5g za4gT$yfxmWIb9dA!}!;neQf2EkujoNpW%g{XO9@vE=@2k^%r@_W^6QgcQxlP6mY}n z%QFMyB%f}i#(y!rQQ%Jl&jB`-Bib4-u`?ZnG8-8>i$4TY;xnGVQer|)9m~7Zv~by1 z>wMHLt*lqs`CW$}esCN6ED|sE^sfVTOr~~AhvhAz=o5tBFG${4g)@S)A!L(z{A&-v zcP@2HsJ1UhMqriUt2WUGCg?y`LYL2K7`X6<2HPdhJ%n+Ml@CdaC*Eh%KW`QvK6yWm z-P?o{4jMNOgL@pB(^VT@`1GLO^TJ$h!*6BTOcm@Ca<%LDw2-j0&a+-9ydM~v9@eSXhekw zl@*Kq5lei1|J1V3O-*0Xt8lBieqQK8@~fhcI4x)C%9J`*6AjpweG|^mB`T{Ww_2WlJf)&*Rg7>yw;oS@`;*;-u2r`IE|ey*hP@QUx8hqNO=s@kM&}IZnKQ^huq+CQrwyugs$>D|bYinB#qpZM^Gl&J^jpQ6VNC z&Okef324{VhYxsh=_OPUQ!1cga%P`T^)m`}AOPJaC za&wi2&})!3mw}H1sgzM$DC}bW1BnEe-#lcerpYf&2huz-imC;#z6Rl5j}7lWbBZap z90_$1G45mO8&rB8G!Q8}()Hx!{0BZCcgf*^n4V>iR1nIT8l&*!?PA58gs!}gsA5}1 zh&F&SBj#Dru9plL2Zp2 zuVa~j!1U7ZY-fWeKl$y+J(Q>L;sSnNA1+spS5n+&j}q_`%8JYzyqw5Mmg)1h%S=`L zb7^tTM#n~fyzsf)Ltp)_DDB{4r3C-&(2la< z>UiPkN;WS{zDBZ&U7(TJC+4SQsmngzyxLn3$bOJ-p3l5VzSpM;>Ru4fJ7XqmX|}*G z<^pL)u)1NKlQ6m($~%SR>KlC zlWI~IMvhJ(S0iw=v)l)s@b*TF*q#>jFj4DBrRS0<(=WRiUUp_D&Z8{F;L#Pj?61={ zg7T+=K{5*w!xw~+^-KJmXKc*~i))qPQPBOwO)EUETDT&EVzm_VE+wp96Dk>%XQP;*febK8f z^*T6a8TkShc??tZd92~hE2$~|nEoN7_$TJu%auZ`62vh9%k=!rNk=*KEPs=3zF6%N zzfRB@;pI%og8z$MZ4LQ0kwOM8*8#oYOyF~qrU-lHw8Dsa{B#xgr7;`y_s{G#V@$;S z9E9DZ9T8eI0zWvt&DW~_tbp%rDF1?&mx>{V{`JE} zkHekwzgsj%C2~j}{%Bvzt0Pp}3t|r0d9_j8^+M@!m#fxWP>ffwQ_5^#?}Ppr#HTp_ z$%s-^bhyD4awMI-hM%E?)rOWpESa?-&so1%2Nd z4(Gz#7KeO>S3=t`r^_jR5~Q)nsM2Ehc&*o|*ac77oteJX54G-9nVBx@j3|xKM;VML zdocljR>_CUJ@=wSpWG#m=LK8YoeS@iOOLJ$5zFMhLiKzE)#>R<%!zo54R5kqJgcmk zQSi9>VQ`hom+)d-P|r+sH4~=Z)A)qCdtc{vL&UqbO0j^mTQ9%4W$>C=eCGUGxCXoOJbaGJo%t!Dlb*wuW`0bI!m@p zxAmp$w=&*)g)k63u{d`=P%aUdBEiX(z!WSWn%2Os5iOK@_JR-ixZca=`BKCJO2g`v z{c(%uc^oDSj-4@~_8?YK_Ne;pv|7X;n{%rCs)DueX7TOg8Y77nbRbp9i|&QNRZ&5X zYVVTzL6J9A*gh##s~;Uha?CMCK`we!rGKdFZ(bXO_M5N51`}k(A*y*UJfbMCs zdK18&dUU&T)+wtk;2MVI%j->YcFdZNg@tOi2@0tNV1o2? za4X4=Sz3$^cGXvytKo9-0$1V<;^^aG&*2ulBC#p#bKRz?-N()R4S;PRF*Dsl?(i33 zSYZi*k8qQ5K1w3(zITgRT}L%E5c;XMdn(v%utA1x2TR8{G|#d?`%DAS7~rBj)L@6E z#hhN@Hb{mIXX;|&m<&4BJi3~7=7UOm^%R<`j)Ib6-Tu;AsMa*BX-BA~hEE0+DlJ8S z+2Xfcd0yqaF*3-qlkC;Yn5yY1@J@U%9Fi&SaMkf5h(Yw?R0u^Wha#%D>^zB+W{I}+ z9e({seQs^Fme`BtkWwkdRKL0H>cp~1Q478 zmSz!^npi3*H*-Wyu7tdby>*UNi0leuR5cz-?L??4;`B({2&LNiAj!(}16hPu49z`> znDk@Ban<6w#CIoDQerZcddtn-Fqs~bEXn}!@k&2?JUQv^;Jmy1c{M!R)4K7G;c8@f z9$0&`^;Pqiv=7zs*I`xW5sITDMmmbj9XlEsqMn*<vlcdkopx+ zCqt5GPnzrQA0eKx5&@%L{sVJK!LNc~Pj zg>>aWt9(hiMb9T_tvKHyWUZs1fOFfL!8kG6tl!3r3?T(q#bU3iz6n;ks8tNQA$EGU z^FdUDTK!@vQ&yL$I6A>eK*fBi{Ygsa;n^5Q@rrqG`-iW3_1I<_FOQid(6=eq5Dv!x z(xgaRaT9noaG~^zK;d_P7mMxqbendVg*gTe>#;E-?1S$ml&*^5og}C3AiwbIKm?R1 z0`1jAvHKZ>Pu+07ZsuZ+*s-^tb!^)L-p6e<6lAOO1+^Uy5w>B+j@PB%X6}^;^7J#9 zFgAK;WI4ezW*CFE%go|D2c93+XRA|_LSD<7>ti`q(ff+6Wj+kKCdv&582hLxafT@L zUSH+S2l{AP=WL+n?aqBg_Q;=gy-D7EGqR>^Q0tnX$$k>&)4I9QUVLMys&j~2=Tn7t zbvT54noZer(OjY4=@@Z=&mdWjSl+%B7u8u`8E|LJO+00cAiouaSoBx0I3x9pP1MJ= z-_g6Rh}9BpMcDCDAjS|mOypuR1bfMbF`gaVE1K^&8&d*gq8Jt&HLd8JbT+d6o-S~g z&8XB!M2#Y*b)ygj|1PT+dA1|7>xMb$QHOV`zf6Pg1MiA>)b@zW(BP@P`$k@gp__v< zOLI?ZKwV_z%)+fZ8G<$}auw$_B*fTGj=IB5$JETx!qCk$6Tj2ESX1B=X9o^^$;!Vi zcuJ8=<8!mi<+}{&FXuu}3nuOQ!rHd5Zb56BZBiWVg!=87maLEA=>wRwgA3OP4W)gICyrs1*d{^<-0ace3?i@TZs8(+hjK3xe;r@ zLry6%xXQb--7x|IGIyh;Q4RF+O_mjo;UgL=L3$X2-hp&fod4h^i&#@O&+UL=qSPWv z)Ahc(&$%E%_FTb6RE=J8zGb5tKMA44c2#k%{?2{avmmdBm?5QmL0oh0#*?4=MjqqF zR-bBqh-MjcW9|@Uy;+olznxz0UmtC&BSFl}ahp(^tbP&Eb`@UFNxILI$@=y+5*zkB z({R){H$75edBBF`GqL&{jz+B;`ligD7v}dYc=@uVI-M;M-P|SuzpH49*m1#htSNL5 z#%4F>)2w|&>`q?}eFQCo9w)udNP}wi35j%sX9Uk^4zJm;UabNj?`Cc|W~!u=dVH2! zXNw`9<)l=HTgz!8?#ia&ct)@6TNyEB$>L#uSw?#)WvG+)*_Ja-I@OR*qxQBhos}2V zu@VVamDuGTM^*WRxQ13@tcr27s@fKD@%e*kQXvasik*@%eaX7To_z`Z#F$F=y_yDa z?UQ5cOdnL2TypZetb7BGZgs+>UQ+@9Q-`<^H?|)G=8uRh= z>>89UKk{mRk$$xS&Zc7Yt-7LJbMkBer0=zAM#b3!)ogP4C7C+4$?(0K|2O{mQ|5V> z!lx!lTUe8$Gh23SnAF3F51SyEuz=sdgTZe^BTuXthp>%_A;67 zQu0QS2PX%OI>Q_Pw%OP!=Nn_DYyac(R`bQYZ1Q{{`)kH~y4+u+PN5zQ| z0ZK?nOHlXx6^n1P5l$S#)GWp|BpF8DT`h`EtNPuNe2zI@`ykHb#M$J;r`@5}I}J^B zs<`~XlY?WS@`hssBQ^U>vi38xn=3r}rda34EMAy7zNWhBfx1=4!-XikNQxNwHYHCv z)OQ4#Bf@9K4byBDUFK*XYz;_DXjo~#EM+_=CKKHavyDS0IK&F1CPW3zhIOaL;_A~+ zp`dxic&>pg)C1(ncARZaLyFsqPEBFNK=l$t%=1$M)ansy=W3DGbpG7dhiIpkU{CGj z>RDc$F*c9XPQ5sJ#UA!y@-^>F_r-(TM|MBCVobZ8v-r?t-|~J^7Z3!UtIWBKj##Y6%71BW#rr2h!U0v4WCv zDDg(BS>)jzXpMhylW|S1Pyc(qlY9O{vlSK5k|Gaqfo-!j*YY2Jl1)$CeRlyTb^hzxqAO-5W#nB*2(sMqKZVD$92Wzb2*6NO~F>m)*NrBQ2(>d8d+Z^oWa%* z%0xYXEp^$wvOA~l{vXvol6~NgqvW7fYT8n_N?y^HBH?cB`AQu#h^SpYS8PV}t4_OG zhE!;SbF~#0iPE<9U#?hsVqAfvu{ZxS?`0GV$7}56T zU{7QLOef}9Oq|KZr{&{QpS`zC=b(qnw6N70nkl%HZt=V)DQW=|2~I^xqNtc&Syi_P zJ&}^ilgz@_1>|Mzo*|aGfus8_^}1T*w!X}D_i1gCewbYdUcFYlCYwL?pzHL#XKy_8 zUA1@uNlpc&j?r`a_i~;zIBFTm+6F&^ESTRjP4hUrK6=HzY>cnXjS@5&#Ug#7_A4w4 zS#!hbvtAAyQvY7>ilz6 zaAZE%o*FRbE1bt;*H3t+6RUbIyX=OzL*Jm|vd85Zr02Y!RLbV_m9^RkLUJ{GGe7CD z(+B;4$E-%8bEn2&oO!VFw5S16%t-OP4$R(Nd8rhCZ!A2Dz@XS?F65JO4_KOBg46TO z@D{bng6Boyv+cvN8~90u*d&>dCN@x*`Ts94@bNDJM39h^Oud=Adqfdh9!tSdFikVN>w7ZdI{72@P1xV z`O2H!2?6R_6x@5V=xikafz%uXP%~IpExb137U-AP5jCbh3!0NOBc3?l9alN%GI}_j zBcCq@NftB`jjDIlO4A3u&?C_M3Qu{In%4UpD2>2gSN0P>J3G}rPOSxvtc^j6o_BD< z$2dsiyjU@Z0atU&BGTZgfmF7B#mc%i571>xbRpE@?wwjzWu-#44-fHQ&F{#ass3y3 zRYcbjvP;rJfJr_FHjhiY_;M#5zN;1we4e~ob1XE}y7r8{-;~h)-u{6H211uXl|uTa zrt{S=fUQq`P*Au965&&8ck+Y9BQ%5HswU5|7Z1PIp5<0X>NT7nY^et;sjt~w`!hn(iTz)3JG;mRB)&8WD)h@GpL#aoKh*LdWL$l_pddV7hlnT(t~9^tbKzNn$z{a}DI3Dz5J^=cN*Uh=V~xg| zd5$y@T~uT)F!UwVKtC;qCCoWSmG3oN4jdTP`zYv!Z7x20T&9=<>A|24Zg4&VLh=jE zGu_Eovr~Tet{d>M@W(&TW;dU?UCL-V5wl*e%*kZzb}Zs+jgZk9NQF72#Qk}Rl7uM( z;pSR9ebIOW-yDddu<$%xH4N_GX(D(K;!W>R^b}+!KfBz})N+HMTx0Znw)4@Q+A*T= zBEMLeN0;dY?22Vkzd@yZb#jebqqsE4(eHh(W^HM&sMlo9HG5>Wis8Z%Xjf@W$RIi2 zFrP^xKIVv1{(_p6-c%s4bB*6&fqDS&)1+G*-x4z;*v;hlo+lu^Eb@Xj)eqxW?)50l zs}sAOU#-#izg^Q-D*Vu?mtz#-W}%Wns`eYzn=E=YCz+9rWPkG-U6=>uro%K?)9sUV zsYB9B`swqk3QQuc=zusUqzUP{o48(!c9XnY%=6*rrKpy-{R)PKX?%4>z;?SJG`I?J z@9MQk#zB>gDDzvQDOf?3T4MCetI;<$aWghu9;Y}VtFmkLIT4^MYkdSM<#Th4D9OZ4y%8QM=$+BHOU8NqkRo2>Lixh0sHuLb zX?|SYHR};BP$nVwb^r+2sTFAPHH#`Au}jXw(>rO);pZo!&~AyGp<`+9f~ z3gVoW!r83ETp{naSx`n;VSUXQVqB%{-Z>he#4vc}-rrT%X4S7g-(+-HCDR0~+fXS! z!w@hushNz2WLRT}rQ@RzNiiDJB3znaNGA_gw9^*v{ z#=p5MfxGD+VP=tJv%o0(csWiTZ5UPVM(1f?7*f@Sip^77&glZzrb^S(5%=D}4tTk0uw~5+L z7?%}_S+%(3nT$akGuBF17ga5tM#s$Lmu>Mn`5lO=cWoY0mdK&_3aDgj%~`&upW z3QkH|$eVvF!v@kI(Z5Tcd=o`U@piC~&I8Bwg+HJ&gCBJ%2u{M~bbh73SN+5+|1G6^}L~5)?@ zWa7MFW=&ZfyX|w<44Z#Qg0a%m>8_W`YhMG#UdiJKMVyxr&eZuli?>5F#5k31%qDh8 z6Dsm;GaRF> zk{L5_G~N_P64wPU6%2$VnJ*%nR)}_amQ?wZAr`9~E53|j~1^qI{E72JL>gVHzx3WKHw@4V;^=21&U!F9sl*~Pd_UcDjk&_`aZ*od{ z<5c0W#XoQo1)U#9ZNeSzlAa|5`>up_wywBs`aHc&?Pn^`#OGP`;tEuahDuv&P!BS# zplB^nrdL5yY5H&dEv#?LOM0qNDcP%wwjZLad$i=`1_j!^ly?^2kUz!EY=p%Te3Wos z?(bRrtPYC)o56t!-@f4ip7Srw=(F|5~{C=VeFsI(B;(k?7=bXqYxC@m=*x zuKMHY)Um{9_Fk;wZHx#j&u6wD0}X3#_tu*S5Pe{S`V&`z|x5%uqLYu+_*Da}cS z)tS1D>sp0%l@_E|#?IbuH|IsS$7Ch+ms}lqUTI!rvp?)AQb z2fsjh=&3Jw-)TF1b$!s#D3YsXv1hoM0{NIY_b4Y~E2R{YP-i;?qM+6eaI12u0Q|_LMS|HQ-oEim_UPz~w%aBfUIGI8j#cH_I{c)q2p0 zU1^Vq*7Lg~`AJ~|D{skaV$kc<_y}&3o_c{VtaQ?B;I$xjLDo);-hoim_ zt?}mJdrIj7GlAY-H=_=Z*~dCn-U}!ktI2Ljd1TSuO4;PfsedmZ#*cY!wnD;h+0ME) z3JmcJ@ncv$;%o0(?VO%w_mtx!xk@WlK&;;DDRk5v`MoKh9K0L&kqefx<#U6Z^kkf? z8##KdeaB5=IwqtF6}wSRCPeH$j>i%`frC9SRX#Bk2rGMPw)@`4iBvn8DJr9cUup%E zH4KX05ZG}M)D{)YTD2puC@WEY_}048oN5)@a(d%{sK7}*TJE>Ex1CxX2#UjAh^?NF zsPoY#++7l}wv!MT^N1E5JX_gp6@#>8B2<`+TE-5v>fFA7Ka6chaiyXH`tw=6cQOU| zlzcUm*&7`wHO7$xmO8M%}nmsnYIkK$6q@nbf8cy!ariQe5 za@p7#tkSgzOxPZYbK9+iVue8L@{^9l%Q6a;HgQ&=BhTjZsR3;)Qb%)2p1TgrrD}YW zv9I{cgYk?;^JqSY&Lb|YpNDf8|D@)~-= zG?KYI!-rFMbe7Z~4V43va=|Q{r0PX}cXv!(3y@|9_{YAErI<(hl{ih|tdgE@8+1#^mZ4qbz!762K>*;1? zt8Mj3V-ft-6IkzXI`T`WO!q!Hw3yQ+O>!0V?;!iJ>hbg?Z;+ZXB(;GrsZI){Oogi= zruxp>Ct3-Tm0@4`=$tBa<_&Z3ZdbOkEGLuM4@2k6m&6~B0-8gfU|d~ z+Plp1$2tH_ckd{N+g-pp6f4`COmbuR41eC-iei zns2KsQ7ZF}U9csLt>(|yq?_PPA4yy@s84@w0#4g?+X`w}d2uZAh!L8c=5sEU=}~J@ zyerRB>=`vS(Udu3v$;=q-*rW*(P@J*^;4)Qw$-@uYE3Rft$|0lSJ&Q*QM`ezxE65`o18!(yAWoe`U&tp zvnsh2IwE@`Uk}?r)%_sYy=7wMKvD6lk}&-3%Y(-q;ww_*CW<-mR`?;v%4T*D!;%!B)yls&Qhh)&A_7nMHGX*pH_fBQm75=BZ>`~PY0 zOyk+iw>UnxQ{&QNT2xiFw<4WVVyeax8l$SAwpO*agi;~Kk`|%1bf&asD6!RAOC=~G zG(u`iMp{HtR6>eaO6{Sh2{HEj%uMHV-`rRC^?mnz&hvkD{-5WZ|M{Ko|2$@+v-gM> zXh1Wzzx-eLm4Z!-Ab_!uc%;m$8o&CDqSnk&fb=v5vtC#W?r_Vq<6%esircqr&!AqX ze4jthVgYS@d1;lY=yvtgBm4uB-(HBpVcxYAv9qsfe7h9Y^Qy;-8UpmjLAj4qOO_GV1?7*96sWIdRJ@?bKg=M9fdFj4b)okKDXCP` zZMk3VtH~@i`Y2X2=2$cV{M2&_{nk_7hW==6;cA-7E14)>fTV4>qu2?ZZHVw6$?aL^ zWhm5#)GX1x7fbjR?bhztaEwbD1DS5-7A}M*o>1VH2cJ8>F)>N0s9V5Oy<2*HuD)Y# z{3ML;Ye05g9-IjC&?C)(gt_wUvr2_LnT;x=yHv6SoaJq?7<2zEr25I=i$?wwkX*eB zcm-eUiq?k{W}w801?zb)X7FN90Vh3!~ItVBe_(#YH7ZC<-nht;2hF>oJo!M>W-F8B5l_E&gM(32S-p!+MG>wKlF}*l2^p&>CwUh0Og4 zJ~K(#!e0^$T=Qy5&k_4;l(p8#`WIeb=w`rZILHU883)j*hz8Na^Bo&^E5Ec25hgTD z33GF-cQWpKPLW=|tSiEH>x;^lyhu;6RSyidB|c6b80OQYESGB|+quYYj{5b39SPR};0JU*?ao2FD_&0KSvUXi z{ci6#(d=nx?B}E9kbzB@Yq9OiJA(&83bR2+ZUYWK7y79HOoA)o0`-Raq=l)mWFsse8Mem4=9F8C@_ zy}c}tnzl+LS$dVc%fA}3yKV%~A{3)Cc{$dK8Uh8)IknO2fFy)vc3qx30jQ6aj&5&Q znI!6XWH+HzxiD}q*W>JNM)`g~v(Wyu1>zKjZ9K$!5qE;0)Okj98`Z3W<9ct*R)sj8 zi9cQ6CKX_b1YirHL<%|QJpVuV+H9hH=7dEKHi6s$=?M9iv_CP^cdEj8(Hrj? zee>h0xPjopI)|!2xe(y?mj3b7fdwm)@P~L(CS**_x0B{87z8QEs{Scz5%yvY)V?C7WXv$ z&SKb>7Xg9cO35;(Xpe<`g}6@0mu6R(yShf0`Dt znMc&uwcZ`Bv>2ILapOIbC2Mrn7yXcH5Oov7{xzpiy=kf9z;Bc~6E2w)tM=`3>n+i> zxicXduGwowQo;T79|sA9-*-e2%|*QO;0Ea^gR@(MiqryS+RaVynwGnCZEhoPL7Vpt z8VOzG_X)i81g>|5m}cYa#W`i32A3rLy;jISzPQX?bjP&UDOQEqPKs`(gNv#zU76Xe zmr?6(v=noIdQb&1)0t||nM_z7?4F1!|LT`A3*o(%ZpFeRe;{uQX0y6^mjhlkVp=us zN4{j+kKfr__2bA~e@Bfy@@7ROD|}|%WY|sjU9+@dMqhzdCkI9LcX&;G-nBZEuZ$4T znbPAf8$S<6=ud3z3A%=i&XNicR_v-E$=*6h|2BSJI6se4Dc%HR%2}tPNacX1@KmWaUmJ;OpY32s0X4j7o7vnupvLG4a8Vt69wi83kMv>-4cFp(Jc>KNs>ge> z7Y4qj7a`;qy-9Z1#lxoGSu>{FKDO-cm2!&oZdTm5+FgwuTOp{+-5(kN$K{QdR{sqA zlpgk2dd=I7*(knEfyK28F0x@l*l>RdbZXaA(>|E2ZzS0%=`oy{zy6dM2%fL*mBx0L zW3{XU`SV++#4TDpmj!F*w*IT(Ks0Kr9{uqxY@S~E&JEq-aW2Ym3E)Wuu}FDQ;I~eX z*6qAXv763pNe~WYFL&7X)ghNA?~-LezQ%x-_P6T_M=!7vBCkugrf=*ow6@z3XTH> zd}4C?wvf$YK;6iw%nhDK=`H8o;9qn;h&vA`>6t=%V4atO;7qz8bU9L3VNKHYu)FAK|L13 zr=JACiSh=l-FbTC^c%e=7%T-(pfDaLH2Vrd;sXGb*|3ar!j`q?x8Wc@6;Lbyw_(#I z{n_a&Ag*5vh@&}!$sIpr$#NM8 zjkAB7|D^!TIve_78y##u;y(BKqsC{c3Ydfb`OVYyh>y6xmjg(T`l~*Z-qykYSpNU? w-#qZ!9!)y&&wl5FU4|s#(0^O=zuRE{*w@?kF8iObKlj1L%Hb0E;;je&24%pw{{R30 literal 0 HcmV?d00001 diff --git a/cmd/clef/extapi_changelog.md b/cmd/clef/extapi_changelog.md index 6c2c3e819430..dbc302631bc1 100644 --- a/cmd/clef/extapi_changelog.md +++ b/cmd/clef/extapi_changelog.md @@ -1,13 +1,39 @@ -### Changelog for external API +## Changelog for external API + +The API uses [semantic versioning](https://semver.org/). + +TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the: + +* MAJOR version when you make incompatible API changes, +* MINOR version when you add functionality in a backwards-compatible manner, and +* PATCH version when you make backwards-compatible bug fixes. + +Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. + + +### 6.0.0 + +* `New` was changed to deliver only an address, not the full `Account` data +* `Export` was moved from External API to the UI Server API + +#### 5.0.0 + +* The external `account_EcRecover`-method was reimplemented. +* The external method `account_sign(address, data)` was replaced with `account_signData(contentType, address, data)`. +The addition of `contentType` makes it possible to use the method for different types of objects, such as: + * signing data with an intended validator (not yet implemented) + * signing clique headers, + * signing plain personal messages, +* The external method `account_signTypedData` implements [EIP-712](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md) and makes it possible to sign typed data. #### 4.0.0 -* The external `account_Ecrecover`-method was removed. +* The external `account_Ecrecover`-method was removed. * The external `account_Import`-method was removed. #### 3.0.0 -* The external `account_List`-method was changed to not expose `url`, which contained info about the local filesystem. It now returns only a list of addresses. +* The external `account_List`-method was changed to not expose `url`, which contained info about the local filesystem. It now returns only a list of addresses. #### 2.0.0 @@ -18,15 +44,3 @@ makes the `accounts_signTransaction` identical to the old `eth_signTransaction`. #### 1.0.0 Initial release. - -### Versioning - -The API uses [semantic versioning](https://semver.org/). - -TLDR; Given a version number MAJOR.MINOR.PATCH, increment the: - -* MAJOR version when you make incompatible API changes, -* MINOR version when you add functionality in a backwards-compatible manner, and -* PATCH version when you make backwards-compatible bug fixes. - -Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. diff --git a/cmd/clef/intapi_changelog.md b/cmd/clef/intapi_changelog.md index 92a39a268fd3..38424f06b9fd 100644 --- a/cmd/clef/intapi_changelog.md +++ b/cmd/clef/intapi_changelog.md @@ -1,4 +1,89 @@ -### Changelog for internal API (ui-api) +## Changelog for internal API (ui-api) + +The API uses [semantic versioning](https://semver.org/). + +TL;DR: Given a version number MAJOR.MINOR.PATCH, increment the: + +* MAJOR version when you make incompatible API changes, +* MINOR version when you add functionality in a backwards-compatible manner, and +* PATCH version when you make backwards-compatible bug fixes. + +Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. + +### 7.0.0 + +- The `message` field was renamed to `messages` in all data signing request methods to better reflect that it's a list, not a value. +- The `storage.Put` and `storage.Get` methods in the rule execution engine were lower-cased to `storage.put` and `storage.get` to be consistent with JavaScript call conventions. + +### 6.0.0 + +Removed `password` from responses to operations which require them. This is for two reasons, + +- Consistency between how rulesets operate and how manual processing works. A rule can `Approve` but require the actual password to be stored in the clef storage. +With this change, the same stored password can be used even if rulesets are not enabled, but storage is. +- It also removes the usability-shortcut that a UI might otherwise want to implement; remembering passwords. Since we now will not require the +password on every `Approve`, there's no need for the UI to cache it locally. + - In a future update, we'll likely add `clef_storePassword` to the internal API, so the user can store it via his UI (currently only CLI works). + +Affected datatypes: +- `SignTxResponse` +- `SignDataResponse` +- `NewAccountResponse` + +If `clef` requires a password, the `OnInputRequired` will be used to collect it. + + +### 5.0.0 + +Changed the namespace format to adhere to the legacy ethereum format: `name_methodName`. Changes: + +* `ApproveTx` -> `ui_approveTx` +* `ApproveSignData` -> `ui_approveSignData` +* `ApproveExport` -> `removed` +* `ApproveImport` -> `removed` +* `ApproveListing` -> `ui_approveListing` +* `ApproveNewAccount` -> `ui_approveNewAccount` +* `ShowError` -> `ui_showError` +* `ShowInfo` -> `ui_showInfo` +* `OnApprovedTx` -> `ui_onApprovedTx` +* `OnSignerStartup` -> `ui_onSignerStartup` +* `OnInputRequired` -> `ui_onInputRequired` + + +### 4.0.0 + +* Bidirectional communication implemented, so the UI can query `clef` via the stdin/stdout RPC channel. Methods implemented are: + - `clef_listWallets` + - `clef_listAccounts` + - `clef_listWallets` + - `clef_deriveAccount` + - `clef_importRawKey` + - `clef_openWallet` + - `clef_chainId` + - `clef_setChainId` + - `clef_export` + - `clef_import` + +* The type `Account` was modified (the json-field `type` was removed), to consist of + +```go +type Account struct { + Address common.Address `json:"address"` // Ethereum account address derived from the key + URL URL `json:"url"` // Optional resource locator within a backend +} +``` + + +### 3.2.0 + +* Make `ShowError`, `OnApprovedTx`, `OnSignerStartup` be json-rpc [notifications](https://www.jsonrpc.org/specification#notification): + +> A Notification is a Request object without an "id" member. A Request object that is a Notification signifies the Client's lack of interest in the corresponding Response object, and as such no Response object needs to be returned to the client. The Server MUST NOT reply to a Notification, including those that are within a batch request. +> +> Notifications are not confirmable by definition, since they do not have a Response object to be returned. As such, the Client would not be aware of any errors (like e.g. "Invalid params","Internal error" +### 3.1.0 + +* Add `ContentType` `string` to `SignDataRequest` to accommodate the latest EIP-191 and EIP-712 implementations. ### 3.0.0 @@ -9,15 +94,17 @@ * Add `OnInputRequired(info UserInputRequest)` to internal API. This method is used when Clef needs user input, e.g. passwords. The following structures are used: -```golang - UserInputRequest struct { - Prompt string `json:"prompt"` - Title string `json:"title"` - IsPassword bool `json:"isPassword"` - } - UserInputResponse struct { - Text string `json:"text"` - } + +```go +UserInputRequest struct { + Prompt string `json:"prompt"` + Title string `json:"title"` + IsPassword bool `json:"isPassword"` +} +UserInputResponse struct { + Text string `json:"text"` +} +``` ### 2.0.0 @@ -91,15 +178,3 @@ Example call: #### 1.0.0 Initial release. - -### Versioning - -The API uses [semantic versioning](https://semver.org/). - -TLDR; Given a version number MAJOR.MINOR.PATCH, increment the: - -* MAJOR version when you make incompatible API changes, -* MINOR version when you add functionality in a backwards-compatible manner, and -* PATCH version when you make backwards-compatible bug fixes. - -Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 519d63b3c1ba..88d9eaaa5d9d 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU General Public License // along with go-ethereum. If not, see . -// signer is a utility that can be used so sign transactions and -// arbitrary data. package main import ( @@ -28,42 +26,50 @@ import ( "fmt" "io" "io/ioutil" + "math/big" "os" "os/signal" "os/user" "path/filepath" "runtime" "strings" + "time" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/console" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/signer/core" + "github.com/ethereum/go-ethereum/signer/fourbyte" "github.com/ethereum/go-ethereum/signer/rules" "github.com/ethereum/go-ethereum/signer/storage" + colorable "github.com/mattn/go-colorable" + "github.com/mattn/go-isatty" "gopkg.in/urfave/cli.v1" ) -// ExternalAPIVersion -- see extapi_changelog.md -const ExternalAPIVersion = "4.0.0" - -// InternalAPIVersion -- see intapi_changelog.md -const InternalAPIVersion = "3.0.0" - const legalWarning = ` -WARNING! +WARNING! -Clef is alpha software, and not yet publically released. This software has _not_ been audited, and there -are no guarantees about the workings of this software. It may contain severe flaws. You should not use this software -unless you agree to take full responsibility for doing so, and know what you are doing. +Clef is an account management tool. It may, like any software, contain bugs. -TLDR; THIS IS NOT PRODUCTION-READY SOFTWARE! +Please take care to +- backup your keystore files, +- verify that the keystore(s) can be opened with your password. +Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. ` var ( @@ -86,6 +92,11 @@ var ( Value: DefaultConfigDir(), Usage: "Directory for Clef configuration", } + chainIdFlag = cli.Int64Flag{ + Name: "chainid", + Value: params.MainnetChainConfig.ChainID.Int64(), + Usage: "Chain id to use for signing (1=mainnet, 3=Ropsten, 4=Rinkeby, 5=Goerli)", + } rpcPortFlag = cli.IntFlag{ Name: "rpcport", Usage: "HTTP-RPC server listening port", @@ -95,11 +106,6 @@ var ( Name: "signersecret", Usage: "A file containing the (encrypted) master seed to encrypt Clef data, e.g. keystore credentials and ruleset hash", } - dBFlag = cli.StringFlag{ - Name: "4bytedb", - Usage: "File containing 4byte-identifiers", - Value: "./4byte.json", - } customDBFlag = cli.StringFlag{ Name: "4bytedb-custom", Usage: "File used for writing new 4byte-identifiers submitted via API", @@ -112,8 +118,7 @@ var ( } ruleFlag = cli.StringFlag{ Name: "rules", - Usage: "Enable rule-engine", - Value: "rules.json", + Usage: "Path to the rule file to auto-authorize requests with", } stdiouiFlag = cli.BoolFlag{ Name: "stdio-ui", @@ -136,7 +141,7 @@ var ( configdirFlag, }, Description: ` -The init command generates a master seed which Clef can use to store credentials and data needed for +The init command generates a master seed which Clef can use to store credentials and data needed for the rule-engine to work.`, } attestCommand = cli.Command{ @@ -150,13 +155,12 @@ the rule-engine to work.`, signerSecretFlag, }, Description: ` -The attest command stores the sha256 of the rule.js-file that you want to use for automatic processing of -incoming requests. +The attest command stores the sha256 of the rule.js-file that you want to use for automatic processing of +incoming requests. -Whenever you make an edit to the rule file, you need to use attestation to tell +Whenever you make an edit to the rule file, you need to use attestation to tell Clef that the file is 'safe' to execute.`, } - setCredentialCommand = cli.Command{ Action: utils.MigrateFlags(setCredential), Name: "setpw", @@ -168,10 +172,28 @@ Clef that the file is 'safe' to execute.`, signerSecretFlag, }, Description: ` - The setpw command stores a password for a given address (keyfile). If you enter a blank passphrase, it will -remove any stored credential for that address (keyfile) -`, - } +The setpw command stores a password for a given address (keyfile). +`} + delCredentialCommand = cli.Command{ + Action: utils.MigrateFlags(removeCredential), + Name: "delpw", + Usage: "Remove a credential for a keystore file", + ArgsUsage: "

", + Flags: []cli.Flag{ + logLevelFlag, + configdirFlag, + signerSecretFlag, + }, + Description: ` +The delpw command removes a password for a given address (keyfile). +`} + gendocCommand = cli.Command{ + Action: GenDoc, + Name: "gendoc", + Usage: "Generate documentation about json-rpc format", + Description: ` +The gendoc generates example structures of the json-rpc communication types. +`} ) func init() { @@ -181,9 +203,10 @@ func init() { logLevelFlag, keystoreFlag, configdirFlag, - utils.NetworkIdFlag, + chainIdFlag, utils.LightKDFFlag, utils.NoUSBFlag, + utils.SmartCardDaemonPathFlag, utils.RPCListenAddrFlag, utils.RPCVirtualHostsFlag, utils.IPCDisabledFlag, @@ -191,7 +214,6 @@ func init() { utils.RPCEnabledFlag, rpcPortFlag, signerSecretFlag, - dBFlag, customDBFlag, auditLogFlag, ruleFlag, @@ -200,9 +222,9 @@ func init() { advancedMode, } app.Action = signer - app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand} - + app.Commands = []cli.Command{initCommand, attestCommand, setCredentialCommand, delCredentialCommand, gendocCommand} } + func main() { if err := app.Run(os.Args); err != nil { fmt.Fprintln(os.Stderr, err) @@ -211,11 +233,20 @@ func main() { } func initializeSecrets(c *cli.Context) error { + // Get past the legal message if err := initialize(c); err != nil { return err } + // Ensure the master key does not yet exist, we're not willing to overwrite configDir := c.GlobalString(configdirFlag.Name) - + if err := os.Mkdir(configDir, 0700); err != nil && !os.IsExist(err) { + return err + } + location := filepath.Join(configDir, "masterseed.json") + if _, err := os.Stat(location); err == nil { + return fmt.Errorf("master key %v already exists, will not overwrite", location) + } + // Key file does not exist yet, generate a new one and encrypt it masterSeed := make([]byte, 256) num, err := io.ReadFull(rand.Reader, masterSeed) if err != nil { @@ -224,18 +255,18 @@ func initializeSecrets(c *cli.Context) error { if num != len(masterSeed) { return fmt.Errorf("failed to read enough random") } - n, p := keystore.StandardScryptN, keystore.StandardScryptP if c.GlobalBool(utils.LightKDFFlag.Name) { n, p = keystore.LightScryptN, keystore.LightScryptP } - text := "The master seed of clef is locked with a password. Please give a password. Do not forget this password." + text := "The master seed of clef will be locked with a password.\nPlease specify a password. Do not forget this password!" var password string for { password = getPassPhrase(text, true) if err := core.ValidatePasswordFormat(password); err != nil { fmt.Printf("invalid password: %v\n", err) } else { + fmt.Println() break } } @@ -243,28 +274,27 @@ func initializeSecrets(c *cli.Context) error { if err != nil { return fmt.Errorf("failed to encrypt master seed: %v", err) } - - err = os.Mkdir(configDir, 0700) - if err != nil && !os.IsExist(err) { + // Double check the master key path to ensure nothing wrote there in between + if err = os.Mkdir(configDir, 0700); err != nil && !os.IsExist(err) { return err } - location := filepath.Join(configDir, "masterseed.json") if _, err := os.Stat(location); err == nil { - return fmt.Errorf("file %v already exists, will not overwrite", location) + return fmt.Errorf("master key %v already exists, will not overwrite", location) } - err = ioutil.WriteFile(location, cipherSeed, 0400) - if err != nil { + // Write the file and print the usual warning message + if err = ioutil.WriteFile(location, cipherSeed, 0400); err != nil { return err } fmt.Printf("A master seed has been generated into %s\n", location) fmt.Printf(` -This is required to be able to store credentials, such as : +This is required to be able to store credentials, such as: * Passwords for keystores (used by rule engine) -* Storage for javascript rules -* Hash of rule-file +* Storage for JavaScript auto-signing rules +* Hash of JavaScript rule-file -You should treat that file with utmost secrecy, and make a backup of it. -NOTE: This file does not contain your accounts. Those need to be backed up separately! +You should treat 'masterseed.json' with utmost secrecy and make a backup of it! +* The password is necessary but not enough, you need to back up the master seed too! +* The master seed does not contain your accounts, those need to be backed up separately! `) return nil @@ -295,14 +325,46 @@ func attestFile(ctx *cli.Context) error { func setCredential(ctx *cli.Context) error { if len(ctx.Args()) < 1 { - utils.Fatalf("This command requires an address to be passed as an argument.") + utils.Fatalf("This command requires an address to be passed as an argument") } if err := initialize(ctx); err != nil { return err } + addr := ctx.Args().First() + if !common.IsHexAddress(addr) { + utils.Fatalf("Invalid address specified: %s", addr) + } + address := common.HexToAddress(addr) + password := getPassPhrase("Please enter a password to store for this address:", true) + fmt.Println() - address := ctx.Args().First() - password := getPassPhrase("Enter a passphrase to store with this address.", true) + stretchedKey, err := readMasterKey(ctx, nil) + if err != nil { + utils.Fatalf(err.Error()) + } + configDir := ctx.GlobalString(configdirFlag.Name) + vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) + pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey) + + pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) + pwStorage.Put(address.Hex(), password) + + log.Info("Credential store updated", "set", address) + return nil +} + +func removeCredential(ctx *cli.Context) error { + if len(ctx.Args()) < 1 { + utils.Fatalf("This command requires an address to be passed as an argument") + } + if err := initialize(ctx); err != nil { + return err + } + addr := ctx.Args().First() + if !common.IsHexAddress(addr) { + utils.Fatalf("Invalid address specified: %s", addr) + } + address := common.HexToAddress(addr) stretchedKey, err := readMasterKey(ctx, nil) if err != nil { @@ -312,10 +374,10 @@ func setCredential(ctx *cli.Context) error { vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) pwkey := crypto.Keccak256([]byte("credentials"), stretchedKey) - // Initialize the encrypted storages pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) - pwStorage.Put(address, password) - log.Info("Credential store updated", "key", address) + pwStorage.Del(address.Hex()) + + log.Info("Credential store updated", "unset", address) return nil } @@ -330,18 +392,28 @@ func initialize(c *cli.Context) error { if !confirm(legalWarning) { return fmt.Errorf("aborted by user") } + fmt.Println() + } + usecolor := (isatty.IsTerminal(os.Stderr.Fd()) || isatty.IsCygwinTerminal(os.Stderr.Fd())) && os.Getenv("TERM") != "dumb" + output := io.Writer(logOutput) + if usecolor { + output = colorable.NewColorable(logOutput) } + log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(c.Int(logLevelFlag.Name)), log.StreamHandler(output, log.TerminalFormat(usecolor)))) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(c.Int(logLevelFlag.Name)), log.StreamHandler(logOutput, log.TerminalFormat(true)))) return nil } func signer(c *cli.Context) error { + // If we have some unrecognized command, bail out + if args := c.Args(); len(args) > 0 { + return fmt.Errorf("invalid command: %q", args[0]) + } if err := initialize(c); err != nil { return err } var ( - ui core.SignerUI + ui core.UIClientAPI ) if c.GlobalBool(stdiouiFlag.Name) { log.Info("Using stdin/stdout as UI-channel") @@ -350,26 +422,24 @@ func signer(c *cli.Context) error { log.Info("Using CLI as UI-channel") ui = core.NewCommandlineUI() } - fourByteDb := c.GlobalString(dBFlag.Name) + // 4bytedb data fourByteLocal := c.GlobalString(customDBFlag.Name) - db, err := core.NewAbiDBFromFiles(fourByteDb, fourByteLocal) + db, err := fourbyte.NewWithFile(fourByteLocal) if err != nil { utils.Fatalf(err.Error()) } - log.Info("Loaded 4byte db", "signatures", db.Size(), "file", fourByteDb, "local", fourByteLocal) + embeds, locals := db.Size() + log.Info("Loaded 4byte database", "embeds", embeds, "locals", locals, "local", fourByteLocal) var ( - api core.ExternalAPI + api core.ExternalAPI + pwStorage storage.Storage = &storage.NoStorage{} ) configDir := c.GlobalString(configdirFlag.Name) if stretchedKey, err := readMasterKey(c, ui); err != nil { - log.Info("No master seed provided, rules disabled", "error", err) + log.Warn("Failed to open master, rules disabled", "err", err) } else { - - if err != nil { - utils.Fatalf(err.Error()) - } vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), stretchedKey)[:10])) // Generate domain specific keys @@ -378,41 +448,50 @@ func signer(c *cli.Context) error { confkey := crypto.Keccak256([]byte("config"), stretchedKey) // Initialize the encrypted storages - pwStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) + pwStorage = storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "credentials.json"), pwkey) jsStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "jsstorage.json"), jskey) configStorage := storage.NewAESEncryptedStorage(filepath.Join(vaultLocation, "config.json"), confkey) - //Do we have a rule-file? - ruleJS, err := ioutil.ReadFile(c.GlobalString(ruleFlag.Name)) - if err != nil { - log.Info("Could not load rulefile, rules not enabled", "file", "rulefile") - } else { - hasher := sha256.New() - hasher.Write(ruleJS) - shasum := hasher.Sum(nil) - storedShasum := configStorage.Get("ruleset_sha256") - if storedShasum != hex.EncodeToString(shasum) { - log.Info("Could not validate ruleset hash, rules not enabled", "got", hex.EncodeToString(shasum), "expected", storedShasum) + // Do we have a rule-file? + if ruleFile := c.GlobalString(ruleFlag.Name); ruleFile != "" { + ruleJS, err := ioutil.ReadFile(ruleFile) + if err != nil { + log.Warn("Could not load rules, disabling", "file", ruleFile, "err", err) } else { - // Initialize rules - ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage, pwStorage) - if err != nil { - utils.Fatalf(err.Error()) + shasum := sha256.Sum256(ruleJS) + foundShaSum := hex.EncodeToString(shasum[:]) + storedShasum, _ := configStorage.Get("ruleset_sha256") + if storedShasum != foundShaSum { + log.Warn("Rule hash not attested, disabling", "hash", foundShaSum, "attested", storedShasum) + } else { + // Initialize rules + ruleEngine, err := rules.NewRuleEvaluator(ui, jsStorage) + if err != nil { + utils.Fatalf(err.Error()) + } + ruleEngine.Init(string(ruleJS)) + ui = ruleEngine + log.Info("Rule engine configured", "file", c.String(ruleFlag.Name)) } - ruleEngine.Init(string(ruleJS)) - ui = ruleEngine - log.Info("Rule engine configured", "file", c.String(ruleFlag.Name)) } } } - - apiImpl := core.NewSignerAPI( - c.GlobalInt64(utils.NetworkIdFlag.Name), - c.GlobalString(keystoreFlag.Name), - c.GlobalBool(utils.NoUSBFlag.Name), - ui, db, - c.GlobalBool(utils.LightKDFFlag.Name), - c.GlobalBool(advancedMode.Name)) + var ( + chainId = c.GlobalInt64(chainIdFlag.Name) + ksLoc = c.GlobalString(keystoreFlag.Name) + lightKdf = c.GlobalBool(utils.LightKDFFlag.Name) + advanced = c.GlobalBool(advancedMode.Name) + nousb = c.GlobalBool(utils.NoUSBFlag.Name) + scpath = c.GlobalString(utils.SmartCardDaemonPathFlag.Name) + ) + log.Info("Starting signer", "chainid", chainId, "keystore", ksLoc, + "light-kdf", lightKdf, "advanced", advanced) + am := core.StartClefAccountManager(ksLoc, nousb, lightKdf, scpath) + apiImpl := core.NewSignerAPI(am, chainId, nousb, ui, db, advanced, pwStorage) + + // Establish the bidirectional communication, by creating a new UI backend and registering + // it with the UI. + ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl // Audit logging if logfile := c.GlobalString(auditLogFlag.Name); logfile != "" { @@ -435,7 +514,6 @@ func signer(c *cli.Context) error { Version: "1.0"}, } if c.GlobalBool(utils.RPCEnabledFlag.Name) { - vhosts := splitAndTrim(c.GlobalString(utils.RPCVirtualHostsFlag.Name)) cors := splitAndTrim(c.GlobalString(utils.RPCCORSDomainFlag.Name)) @@ -452,7 +530,6 @@ func signer(c *cli.Context) error { listener.Close() log.Info("HTTP endpoint closed", "url", httpEndpoint) }() - } if !c.GlobalBool(utils.IPCDisabledFlag.Name) { if c.IsSet(utils.IPCPathFlag.Name) { @@ -479,8 +556,8 @@ func signer(c *cli.Context) error { } ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ - "extapi_version": ExternalAPIVersion, - "intapi_version": InternalAPIVersion, + "intapi_version": core.InternalAPIVersion, + "extapi_version": core.ExternalAPIVersion, "extapi_http": extapiURL, "extapi_ipc": ipcapiURL, }, @@ -514,7 +591,12 @@ func DefaultConfigDir() string { if runtime.GOOS == "darwin" { return filepath.Join(home, "Library", "Signer") } else if runtime.GOOS == "windows" { - return filepath.Join(home, "AppData", "Roaming", "Signer") + appdata := os.Getenv("APPDATA") + if appdata != "" { + return filepath.Join(appdata, "Signer") + } else { + return filepath.Join(home, "AppData", "Roaming", "Signer") + } } else { return filepath.Join(home, ".clef") } @@ -532,7 +614,7 @@ func homeDir() string { } return "" } -func readMasterKey(ctx *cli.Context, ui core.SignerUI) ([]byte, error) { +func readMasterKey(ctx *cli.Context, ui core.UIClientAPI) ([]byte, error) { var ( file string configDir = ctx.GlobalString(configdirFlag.Name) @@ -570,7 +652,6 @@ func readMasterKey(ctx *cli.Context, ui core.SignerUI) ([]byte, error) { if len(masterSeed) < 256 { return nil, fmt.Errorf("master seed of insufficient length, expected >255 bytes, got %d", len(masterSeed)) } - // Create vault location vaultLocation := filepath.Join(configDir, common.Bytes2Hex(crypto.Keccak256([]byte("vault"), masterSeed)[:10])) err = os.Mkdir(vaultLocation, 0700) @@ -598,13 +679,12 @@ func checkFile(filename string) error { // confirm displays a text and asks for user confirmation func confirm(text string) bool { fmt.Printf(text) - fmt.Printf("\nEnter 'ok' to proceed:\n>") + fmt.Printf("\nEnter 'ok' to proceed:\n> ") text, err := bufio.NewReader(os.Stdin).ReadString('\n') if err != nil { log.Crit("Failed to read user input", "err", err) } - if text := strings.TrimSpace(text); text == "ok" { return true } @@ -616,43 +696,148 @@ func testExternalUI(api *core.SignerAPI) { ctx := context.WithValue(context.Background(), "remote", "clef binary") ctx = context.WithValue(ctx, "scheme", "in-proc") ctx = context.WithValue(ctx, "local", "main") - errs := make([]string, 0) - api.UI.ShowInfo("Testing 'ShowInfo'") - api.UI.ShowError("Testing 'ShowError'") + a := common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef") + addErr := func(errStr string) { + log.Info("Test error", "err", errStr) + errs = append(errs, errStr) + } - checkErr := func(method string, err error) { - if err != nil && err != core.ErrRequestDenied { - errs = append(errs, fmt.Sprintf("%v: %v", method, err.Error())) + queryUser := func(q string) string { + resp, err := api.UI.OnInputRequired(core.UserInputRequest{ + Title: "Testing", + Prompt: q, + }) + if err != nil { + addErr(err.Error()) } + return resp.Text } - var err error - - _, err = api.SignTransaction(ctx, core.SendTxArgs{From: common.MixedcaseAddress{}}, nil) - checkErr("SignTransaction", err) - _, err = api.Sign(ctx, common.MixedcaseAddress{}, common.Hex2Bytes("01020304")) - checkErr("Sign", err) - _, err = api.List(ctx) - checkErr("List", err) - _, err = api.New(ctx) - checkErr("New", err) - _, err = api.Export(ctx, common.Address{}) - checkErr("Export", err) - _, err = api.Import(ctx, json.RawMessage{}) - checkErr("Import", err) - - api.UI.ShowInfo("Tests completed") - - if len(errs) > 0 { - log.Error("Got errors") - for _, e := range errs { - log.Error(e) + expectResponse := func(testcase, question, expect string) { + if got := queryUser(question); got != expect { + addErr(fmt.Sprintf("%s: got %v, expected %v", testcase, got, expect)) } - } else { - log.Info("No errors") + } + expectApprove := func(testcase string, err error) { + if err == nil || err == accounts.ErrUnknownAccount { + return + } + addErr(fmt.Sprintf("%v: expected no error, got %v", testcase, err.Error())) + } + expectDeny := func(testcase string, err error) { + if err == nil || err != core.ErrRequestDenied { + addErr(fmt.Sprintf("%v: expected ErrRequestDenied, got %v", testcase, err)) + } + } + var delay = 1 * time.Second + // Test display of info and error + { + api.UI.ShowInfo("If you see this message, enter 'yes' to next question") + time.Sleep(delay) + expectResponse("showinfo", "Did you see the message? [yes/no]", "yes") + api.UI.ShowError("If you see this message, enter 'yes' to the next question") + time.Sleep(delay) + expectResponse("showerror", "Did you see the message? [yes/no]", "yes") + } + { // Sign data test - clique header + api.UI.ShowInfo("Please approve the next request for signing a clique header") + time.Sleep(delay) + cliqueHeader := types.Header{ + common.HexToHash("0000H45H"), + common.HexToHash("0000H45H"), + common.HexToAddress("0000H45H"), + common.HexToHash("0000H00H"), + common.HexToHash("0000H45H"), + common.HexToHash("0000H45H"), + types.Bloom{}, + big.NewInt(1337), + big.NewInt(1337), + 1338, + 1338, + 1338, + []byte("Extra data Extra data Extra data Extra data Extra data Extra data Extra data Extra data"), + common.HexToHash("0x0000H45H"), + types.BlockNonce{}, + } + cliqueRlp, err := rlp.EncodeToBytes(cliqueHeader) + if err != nil { + utils.Fatalf("Should not error: %v", err) + } + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err = api.SignData(ctx, accounts.MimetypeClique, *addr, hexutil.Encode(cliqueRlp)) + expectApprove("signdata - clique header", err) + } + { // Sign data test - typed data + api.UI.ShowInfo("Please approve the next request for signing EIP-712 typed data") + time.Sleep(delay) + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + data := `{"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"Person":[{"name":"name","type":"string"},{"name":"test","type":"uint8"},{"name":"wallet","type":"address"}],"Mail":[{"name":"from","type":"Person"},{"name":"to","type":"Person"},{"name":"contents","type":"string"}]},"primaryType":"Mail","domain":{"name":"Ether Mail","version":"1","chainId":"1","verifyingContract":"0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"},"message":{"from":{"name":"Cow","test":"3","wallet":"0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826"},"to":{"name":"Bob","wallet":"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB","test":"2"},"contents":"Hello, Bob!"}}` + //_, err := api.SignData(ctx, accounts.MimetypeTypedData, *addr, hexutil.Encode([]byte(data))) + var typedData core.TypedData + json.Unmarshal([]byte(data), &typedData) + _, err := api.SignTypedData(ctx, *addr, typedData) + expectApprove("sign 712 typed data", err) + } + { // Sign data test - plain text + api.UI.ShowInfo("Please approve the next request for signing text") + time.Sleep(delay) + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world"))) + expectApprove("signdata - text", err) + } + { // Sign data test - plain text reject + api.UI.ShowInfo("Please deny the next request for signing text") + time.Sleep(delay) + addr, _ := common.NewMixedcaseAddressFromString("0x0011223344556677889900112233445566778899") + _, err := api.SignData(ctx, accounts.MimetypeTextPlain, *addr, hexutil.Encode([]byte("hello world"))) + expectDeny("signdata - text", err) + } + { // Sign transaction + + api.UI.ShowInfo("Please reject next transaction") + time.Sleep(delay) + data := hexutil.Bytes([]byte{}) + to := common.NewMixedcaseAddress(a) + tx := core.SendTxArgs{ + Data: &data, + Nonce: 0x1, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: &to, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + } + _, err := api.SignTransaction(ctx, tx, nil) + expectDeny("signtransaction [1]", err) + expectResponse("signtransaction [2]", "Did you see any warnings for the last transaction? (yes/no)", "no") + } + { // Listing + api.UI.ShowInfo("Please reject listing-request") + time.Sleep(delay) + _, err := api.List(ctx) + expectDeny("list", err) + } + { // Import + api.UI.ShowInfo("Please reject new account-request") + time.Sleep(delay) + _, err := api.New(ctx) + expectDeny("newaccount", err) + } + { // Metadata + api.UI.ShowInfo("Please check if you see the Origin in next listing (approve or deny)") + time.Sleep(delay) + api.List(context.WithValue(ctx, "Origin", "origin.com")) + expectResponse("metadata - origin", "Did you see origin (origin.com)? [yes/no] ", "yes") } + for _, e := range errs { + log.Error(e) + } + result := fmt.Sprintf("Tests completed. %d errors:\n%s\n", len(errs), strings.Join(errs, "\n")) + api.UI.ShowInfo(result) + } // getPassPhrase retrieves the password associated with clef, either fetched @@ -660,17 +845,17 @@ func testExternalUI(api *core.SignerAPI) { // TODO: there are many `getPassPhrase` functions, it will be better to abstract them into one. func getPassPhrase(prompt string, confirmation bool) string { fmt.Println(prompt) - password, err := console.Stdin.PromptPassword("Passphrase: ") + password, err := console.Stdin.PromptPassword("Password: ") if err != nil { - utils.Fatalf("Failed to read passphrase: %v", err) + utils.Fatalf("Failed to read password: %v", err) } if confirmation { - confirm, err := console.Stdin.PromptPassword("Repeat passphrase: ") + confirm, err := console.Stdin.PromptPassword("Repeat password: ") if err != nil { - utils.Fatalf("Failed to read passphrase confirmation: %v", err) + utils.Fatalf("Failed to read password confirmation: %v", err) } if password != confirm { - utils.Fatalf("Passphrases do not match") + utils.Fatalf("Passwords do not match") } } return password @@ -708,28 +893,150 @@ func decryptSeed(keyjson []byte, auth string) ([]byte, error) { return seed, err } -/** -//Create Account - -curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_new","params":["test"],"id":67}' localhost:8550 - -// List accounts - -curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_list","params":[""],"id":67}' http://localhost:8550/ - -// Make Transaction -// safeSend(0x12) -// 4401a6e40000000000000000000000000000000000000000000000000000000000000012 - -// supplied abi -curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x82A2A876D39022B3019932D30Cd9c97ad5616813","gas":"0x333","gasPrice":"0x123","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x10", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"},"test"],"id":67}' http://localhost:8550/ - -// Not supplied -curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_signTransaction","params":[{"from":"0x82A2A876D39022B3019932D30Cd9c97ad5616813","gas":"0x333","gasPrice":"0x123","nonce":"0x0","to":"0x07a565b7ed7d7a678680a4c162885bedbb695fe0", "value":"0x10", "data":"0x4401a6e40000000000000000000000000000000000000000000000000000000000000012"}],"id":67}' http://localhost:8550/ - -// Sign data - -curl -i -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"account_sign","params":["0x694267f14675d7e1b9494fd8d72fefe1755710fa","bazonk gaz baz"],"id":67}' http://localhost:8550/ +// GenDoc outputs examples of all structures used in json-rpc communication +func GenDoc(ctx *cli.Context) { + var ( + a = common.HexToAddress("0xdeadbeef000000000000000000000000deadbeef") + b = common.HexToAddress("0x1111111122222222222233333333334444444444") + meta = core.Metadata{ + Scheme: "http", + Local: "localhost:8545", + Origin: "www.malicious.ru", + Remote: "localhost:9999", + UserAgent: "Firefox 3.2", + } + output []string + add = func(name, desc string, v interface{}) { + if data, err := json.MarshalIndent(v, "", " "); err == nil { + output = append(output, fmt.Sprintf("### %s\n\n%s\n\nExample:\n```json\n%s\n```", name, desc, data)) + } else { + log.Error("Error generating output", err) + } + } + ) -**/ + { // Sign plain text request + desc := "SignDataRequest contains information about a pending request to sign some data. " + + "The data to be signed can be of various types, defined by content-type. Clef has done most " + + "of the work in canonicalizing and making sense of the data, and it's up to the UI to present" + + "the user with the contents of the `message`" + sighash, msg := accounts.TextAndHash([]byte("hello world")) + messages := []*core.NameValueType{{"message", msg, accounts.MimetypeTextPlain}} + + add("SignDataRequest", desc, &core.SignDataRequest{ + Address: common.NewMixedcaseAddress(a), + Meta: meta, + ContentType: accounts.MimetypeTextPlain, + Rawdata: []byte(msg), + Messages: messages, + Hash: sighash}) + } + { // Sign plain text response + add("SignDataResponse - approve", "Response to SignDataRequest", + &core.SignDataResponse{Approved: true}) + add("SignDataResponse - deny", "Response to SignDataRequest", + &core.SignDataResponse{}) + } + { // Sign transaction request + desc := "SignTxRequest contains information about a pending request to sign a transaction. " + + "Aside from the transaction itself, there is also a `call_info`-struct. That struct contains " + + "messages of various types, that the user should be informed of." + + "\n\n" + + "As in any request, it's important to consider that the `meta` info also contains untrusted data." + + "\n\n" + + "The `transaction` (on input into clef) can have either `data` or `input` -- if both are set, " + + "they must be identical, otherwise an error is generated. " + + "However, Clef will always use `data` when passing this struct on (if Clef does otherwise, please file a ticket)" + + data := hexutil.Bytes([]byte{0x01, 0x02, 0x03, 0x04}) + add("SignTxRequest", desc, &core.SignTxRequest{ + Meta: meta, + Callinfo: []core.ValidationInfo{ + {"Warning", "Something looks odd, show this message as a warning"}, + {"Info", "User should see this aswell"}, + }, + Transaction: core.SendTxArgs{ + Data: &data, + Nonce: 0x1, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: nil, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + }}) + } + { // Sign tx response + data := hexutil.Bytes([]byte{0x04, 0x03, 0x02, 0x01}) + add("SignTxResponse - approve", "Response to request to sign a transaction. This response needs to contain the `transaction`"+ + ", because the UI is free to make modifications to the transaction.", + &core.SignTxResponse{Approved: true, + Transaction: core.SendTxArgs{ + Data: &data, + Nonce: 0x4, + Value: hexutil.Big(*big.NewInt(6)), + From: common.NewMixedcaseAddress(a), + To: nil, + GasPrice: hexutil.Big(*big.NewInt(5)), + Gas: 1000, + Input: nil, + }}) + add("SignTxResponse - deny", "Response to SignTxRequest. When denying a request, there's no need to "+ + "provide the transaction in return", + &core.SignTxResponse{}) + } + { // WHen a signed tx is ready to go out + desc := "SignTransactionResult is used in the call `clef` -> `OnApprovedTx(result)`" + + "\n\n" + + "This occurs _after_ successful completion of the entire signing procedure, but right before the signed " + + "transaction is passed to the external caller. This method (and data) can be used by the UI to signal " + + "to the user that the transaction was signed, but it is primarily useful for ruleset implementations." + + "\n\n" + + "A ruleset that implements a rate limitation needs to know what transactions are sent out to the external " + + "interface. By hooking into this methods, the ruleset can maintain track of that count." + + "\n\n" + + "**OBS:** Note that if an attacker can restore your `clef` data to a previous point in time" + + " (e.g through a backup), the attacker can reset such windows, even if he/she is unable to decrypt the content. " + + "\n\n" + + "The `OnApproved` method cannot be responded to, it's purely informative" + + rlpdata := common.FromHex("0xf85d640101948a8eafb1cf62bfbeb1741769dae1a9dd47996192018026a0716bd90515acb1e68e5ac5867aa11a1e65399c3349d479f5fb698554ebc6f293a04e8a4ebfff434e971e0ef12c5bf3a881b06fd04fc3f8b8a7291fb67a26a1d4ed") + var tx types.Transaction + rlp.DecodeBytes(rlpdata, &tx) + add("OnApproved - SignTransactionResult", desc, ðapi.SignTransactionResult{Raw: rlpdata, Tx: &tx}) + + } + { // User input + add("UserInputRequest", "Sent when clef needs the user to provide data. If 'password' is true, the input field should be treated accordingly (echo-free)", + &core.UserInputRequest{IsPassword: true, Title: "The title here", Prompt: "The question to ask the user"}) + add("UserInputResponse", "Response to UserInputRequest", + &core.UserInputResponse{Text: "The textual response from user"}) + } + { // List request + add("ListRequest", "Sent when a request has been made to list addresses. The UI is provided with the "+ + "full `account`s, including local directory names. Note: this information is not passed back to the external caller, "+ + "who only sees the `address`es. ", + &core.ListRequest{ + Meta: meta, + Accounts: []accounts.Account{ + {a, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/a"}}, + {b, accounts.URL{Scheme: "keystore", Path: "/path/to/keyfile/b"}}}, + }) + + add("ListResponse", "Response to list request. The response contains a list of all addresses to show to the caller. "+ + "Note: the UI is free to respond with any address the caller, regardless of whether it exists or not", + &core.ListResponse{ + Accounts: []accounts.Account{ + {common.HexToAddress("0xcowbeef000000cowbeef00000000000000000c0w"), accounts.URL{Path: ".. ignored .."}}, + {common.HexToAddress("0xffffffffffffffffffffffffffffffffffffffff"), accounts.URL{}}, + }}) + } + + fmt.Println(`## UI Client interface + +These data types are defined in the channel between clef and the UI`) + for _, elem := range output { + fmt.Println(elem) + } +} diff --git a/cmd/clef/pythonsigner.py b/cmd/clef/pythonsigner.py index 46fa23bd8c1b..315aabd73fdb 100644 --- a/cmd/clef/pythonsigner.py +++ b/cmd/clef/pythonsigner.py @@ -42,7 +42,6 @@ def send_reply(self, context, reply): self.output.write("\n") class StdIOHandler(): - def __init__(self): pass @@ -76,7 +75,7 @@ def ApproveTx(self,req): :param transaction: transaction info :param call_info: info abou the call, e.g. if ABI info could not be :param meta: metadata about the request, e.g. where the call comes from - :return: + :return: """ transaction = req.get('transaction') _from = req.get('from') @@ -158,8 +157,7 @@ def ShowInfo(self,message = {}): return def main(args): - - cmd = ["./clef", "--stdio-ui"] + cmd = ["clef", "--stdio-ui"] if len(args) > 0 and args[0] == "test": cmd.extend(["--stdio-ui-test"]) print("cmd: {}".format(" ".join(cmd))) diff --git a/cmd/clef/rules.md b/cmd/clef/rules.md index 327ba765c5fb..112dae651220 100644 --- a/cmd/clef/rules.md +++ b/cmd/clef/rules.md @@ -19,32 +19,30 @@ The section below deals with both of them A ruleset file is implemented as a `js` file. Under the hood, the ruleset-engine is a `SignerUI`, implementing the same methods as the `json-rpc` methods defined in the UI protocol. Example: -```javascript - -function asBig(str){ - if(str.slice(0,2) == "0x"){ return new BigNumber(str.slice(2),16)} - return new BigNumber(str) +```js +function asBig(str) { + if (str.slice(0, 2) == "0x") { + return new BigNumber(str.slice(2), 16) + } + return new BigNumber(str) } // Approve transactions to a certain contract if value is below a certain limit -function ApproveTx(req){ - - var limit = big.Newint("0xb1a2bc2ec50000") +function ApproveTx(req) { + var limit = big.Newint("0xb1a2bc2ec50000") var value = asBig(req.transaction.value); - if(req.transaction.to.toLowerCase()=="0xae967917c465db8578ca9024c205720b1a3651a9") - && value.lt(limit) ){ - return "Approve" - } - // If we return "Reject", it will be rejected. - // By not returning anything, it will be passed to the next UI, for manual processing + if (req.transaction.to.toLowerCase() == "0xae967917c465db8578ca9024c205720b1a3651a9") && value.lt(limit)) { + return "Approve" + } + // If we return "Reject", it will be rejected. + // By not returning anything, it will be passed to the next UI, for manual processing } -//Approve listings if request made from IPC +// Approve listings if request made from IPC function ApproveListing(req){ if (req.metadata.scheme == "ipc"){ return "Approve"} } - ``` Whenever the external API is called (and the ruleset is enabled), the `signer` calls the UI, which is an instance of a ruleset-engine. The ruleset-engine @@ -72,7 +70,7 @@ The Otto vm has a few [caveats](https://github.com/robertkrimen/otto): Additionally, a few more have been added * The rule execution cannot load external javascript files. -* The only preloaded libary is [`bignumber.js`](https://github.com/MikeMcl/bignumber.js) version `2.0.3`. This one is fairly old, and is not aligned with the documentation at the github repository. +* The only preloaded library is [`bignumber.js`](https://github.com/MikeMcl/bignumber.js) version `2.0.3`. This one is fairly old, and is not aligned with the documentation at the github repository. * Each invocation is made in a fresh virtual machine. This means that you cannot store data in global variables between invocations. This is a deliberate choice -- if you want to store data, use the disk-backed `storage`, since rules should not rely on ephemeral data. * Javascript API parameters are _always_ an object. This is also a design choice, to ensure that parameters are accessed by _key_ and not by order. This is to prevent mistakes due to missing parameters or parameter changes. * The JS engine has access to `storage` and `console`. @@ -140,97 +138,97 @@ This is now implemented (with ephemeral non-encrypted storage for now, so not ye ## Example 1: ruleset for a rate-limited window -```javascript - - function big(str){ - if(str.slice(0,2) == "0x"){ return new BigNumber(str.slice(2),16)} - return new BigNumber(str) +```js +function big(str) { + if (str.slice(0, 2) == "0x") { + return new BigNumber(str.slice(2), 16) } + return new BigNumber(str) +} - // Time window: 1 week - var window = 1000* 3600*24*7; +// Time window: 1 week +var window = 1000* 3600*24*7; - // Limit : 1 ether - var limit = new BigNumber("1e18"); +// Limit : 1 ether +var limit = new BigNumber("1e18"); - function isLimitOk(transaction){ - var value = big(transaction.value) - // Start of our window function - var windowstart = new Date().getTime() - window; +function isLimitOk(transaction) { + var value = big(transaction.value) + // Start of our window function + var windowstart = new Date().getTime() - window; - var txs = []; - var stored = storage.Get('txs'); + var txs = []; + var stored = storage.get('txs'); - if(stored != ""){ - txs = JSON.parse(stored) - } - // First, remove all that have passed out of the time-window - var newtxs = txs.filter(function(tx){return tx.tstamp > windowstart}); - console.log(txs, newtxs.length); + if (stored != "") { + txs = JSON.parse(stored) + } + // First, remove all that have passed out of the time-window + var newtxs = txs.filter(function(tx){return tx.tstamp > windowstart}); + console.log(txs, newtxs.length); - // Secondly, aggregate the current sum - sum = new BigNumber(0) + // Secondly, aggregate the current sum + sum = new BigNumber(0) - sum = newtxs.reduce(function(agg, tx){ return big(tx.value).plus(agg)}, sum); - console.log("ApproveTx > Sum so far", sum); - console.log("ApproveTx > Requested", value.toNumber()); + sum = newtxs.reduce(function(agg, tx){ return big(tx.value).plus(agg)}, sum); + console.log("ApproveTx > Sum so far", sum); + console.log("ApproveTx > Requested", value.toNumber()); - // Would we exceed weekly limit ? - return sum.plus(value).lt(limit) + // Would we exceed weekly limit ? + return sum.plus(value).lt(limit) +} +function ApproveTx(r) { + if (isLimitOk(r.transaction)) { + return "Approve" } - function ApproveTx(r){ - if (isLimitOk(r.transaction)){ - return "Approve" - } - return "Nope" - } + return "Nope" +} - /** - * OnApprovedTx(str) is called when a transaction has been approved and signed. The parameter - * 'response_str' contains the return value that will be sent to the external caller. - * The return value from this method is ignore - the reason for having this callback is to allow the - * ruleset to keep track of approved transactions. - * - * When implementing rate-limited rules, this callback should be used. - * If a rule responds with neither 'Approve' nor 'Reject' - the tx goes to manual processing. If the user - * then accepts the transaction, this method will be called. - * - * TLDR; Use this method to keep track of signed transactions, instead of using the data in ApproveTx. - */ - function OnApprovedTx(resp){ - var value = big(resp.tx.value) - var txs = [] - // Load stored transactions - var stored = storage.Get('txs'); - if(stored != ""){ - txs = JSON.parse(stored) - } - // Add this to the storage - txs.push({tstamp: new Date().getTime(), value: value}); - storage.Put("txs", JSON.stringify(txs)); +/** +* OnApprovedTx(str) is called when a transaction has been approved and signed. The parameter + * 'response_str' contains the return value that will be sent to the external caller. +* The return value from this method is ignore - the reason for having this callback is to allow the +* ruleset to keep track of approved transactions. +* +* When implementing rate-limited rules, this callback should be used. +* If a rule responds with neither 'Approve' nor 'Reject' - the tx goes to manual processing. If the user +* then accepts the transaction, this method will be called. +* +* TLDR; Use this method to keep track of signed transactions, instead of using the data in ApproveTx. +*/ +function OnApprovedTx(resp) { + var value = big(resp.tx.value) + var txs = [] + // Load stored transactions + var stored = storage.get('txs'); + if (stored != "") { + txs = JSON.parse(stored) } - + // Add this to the storage + txs.push({tstamp: new Date().getTime(), value: value}); + storage.put("txs", JSON.stringify(txs)); +} ``` ## Example 2: allow destination -```javascript - - function ApproveTx(r){ - if(r.transaction.from.toLowerCase()=="0x0000000000000000000000000000000000001337"){ return "Approve"} - if(r.transaction.from.toLowerCase()=="0x000000000000000000000000000000000000dead"){ return "Reject"} - // Otherwise goes to manual processing +```js +function ApproveTx(r) { + if (r.transaction.from.toLowerCase() == "0x0000000000000000000000000000000000001337") { + return "Approve" } - + if (r.transaction.from.toLowerCase() == "0x000000000000000000000000000000000000dead") { + return "Reject" + } + // Otherwise goes to manual processing +} ``` ## Example 3: Allow listing -```javascript - - function ApproveListing(){ - return "Approve" - } - -``` \ No newline at end of file +```js +function ApproveListing() { + return "Approve" +} +``` diff --git a/cmd/clef/tests/testsigner.js b/cmd/clef/tests/testsigner.js new file mode 100644 index 000000000000..258679de5073 --- /dev/null +++ b/cmd/clef/tests/testsigner.js @@ -0,0 +1,89 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +// This file is a test-utility for testing clef-functionality +// +// Start clef with +// +// build/bin/clef --4bytedb=./cmd/clef/4byte.json --rpc +// +// Start geth with +// +// build/bin/geth --nodiscover --maxpeers 0 --signer http://localhost:8550 console --preload=cmd/clef/tests/testsigner.js +// +// and in the console simply invoke +// +// > test() +// +// You can reload the file via `reload()` + +function reload(){ + loadScript("./cmd/clef/tests/testsigner.js"); +} + +function init(){ + if (typeof accts == 'undefined' || accts.length == 0){ + accts = eth.accounts + console.log("Got accounts ", accts); + } +} +init() +function testTx(){ + if( accts && accts.length > 0) { + var a = accts[0] + var txdata = eth.signTransaction({from: a, to: a, value: 1, nonce: 1, gas: 1, gasPrice: 1}) + var v = parseInt(txdata.tx.v) + console.log("V value: ", v) + if (v == 37 || v == 38){ + console.log("Mainnet 155-protected chainid was used") + } + if (v == 27 || v == 28){ + throw new Error("Mainnet chainid was used, but without replay protection!") + } + } +} +function testSignText(){ + if( accts && accts.length > 0){ + var a = accts[0] + var r = eth.sign(a, "0x68656c6c6f20776f726c64"); //hello world + console.log("signing response", r) + } +} +function testClique(){ + if( accts && accts.length > 0){ + var a = accts[0] + var r = debug.testSignCliqueBlock(a, 0); // Sign genesis + console.log("signing response", r) + if( a != r){ + throw new Error("Requested signing by "+a+ " but got sealer "+r) + } + } +} + +function test(){ + var tests = [ + testTx, + testSignText, + testClique, + ] + for( i in tests){ + try{ + tests[i]() + }catch(err){ + console.log(err) + } + } + } diff --git a/cmd/clef/tutorial.md b/cmd/clef/tutorial.md index dfb31ba4efac..4453472e2d1c 100644 --- a/cmd/clef/tutorial.md +++ b/cmd/clef/tutorial.md @@ -1,200 +1,278 @@ -## Initializing the signer +## Initializing Clef -First, initialize the master seed. +First thing's first, Clef needs to store some data itself. Since that data might be sensitive (passwords, signing rules, accounts), Clef's entire storage is encrypted. To support encrypting data, the first step is to initialize Clef with a random master seed, itself too encrypted with your chosen password: ```text -#./signer init +$ clef init WARNING! -The signer is alpha software, and not yet publically released. This software has _not_ been audited, and there -are no guarantees about the workings of this software. It may contain severe flaws. You should not use this software -unless you agree to take full responsibility for doing so, and know what you are doing. +Clef is an account management tool. It may, like any software, contain bugs. -TLDR; THIS IS NOT PRODUCTION-READY SOFTWARE! +Please take care to +- backup your keystore files, +- verify that the keystore(s) can be opened with your password. +Clef is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. Enter 'ok' to proceed: ->ok -A master seed has been generated into /home/martin/.signer/secrets.dat +> ok -This is required to be able to store credentials, such as : +The master seed of clef will be locked with a password. +Please specify a password. Do not forget this password! +Password: +Repeat password: + +A master seed has been generated into /home/martin/.clef/masterseed.json + +This is required to be able to store credentials, such as: * Passwords for keystores (used by rule engine) -* Storage for javascript rules -* Hash of rule-file +* Storage for JavaScript auto-signing rules +* Hash of JavaScript rule-file -You should treat that file with utmost secrecy, and make a backup of it. -NOTE: This file does not contain your accounts. Those need to be backed up separately! +You should treat 'masterseed.json' with utmost secrecy and make a backup of it! +* The password is necessary but not enough, you need to back up the master seed too! +* The master seed does not contain your accounts, those need to be backed up separately! ``` -(for readability purposes, we'll remove the WARNING printout in the rest of this document) +*For readability purposes, we'll remove the WARNING printout, user confirmation and the unlocking of the master seed in the rest of this document.* -## Creating rules +## Remote interactions -Now, you can create a rule-file. Note that it is not mandatory to use predefined rules, but it's really handy. +Clef is capable of managing both key-file based accounts as well as hardware wallets. To evaluate clef, we're going to point it to our Rinkeby testnet keystore and specify the Rinkeby chain ID for signing (Clef doesn't have a backing chain, so it doesn't know what network it runs on). -```javascript -function ApproveListing(){ - return "Approve" -} +```text +$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 + +INFO [07-01|11:00:46.385] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +DEBUG[07-01|11:00:46.389] FS scan times list=3.521941ms set=9.017µs diff=4.112µs +DEBUG[07-01|11:00:46.391] Ledger support enabled +DEBUG[07-01|11:00:46.391] Trezor support enabled via HID +DEBUG[07-01|11:00:46.391] Trezor support enabled via WebUSB +INFO [07-01|11:00:46.391] Audit logs configured file=audit.log +DEBUG[07-01|11:00:46.392] IPC registered namespace=account +INFO [07-01|11:00:46.392] IPC endpoint opened url=$HOME/.clef/clef.ipc +------- Signer info ------- +* intapi_version : 7.0.0 +* extapi_version : 6.0.0 +* extapi_http : n/a +* extapi_ipc : $HOME/.clef/clef.ipc ``` -Get the `sha256` hash. If you have openssl, you can do `openssl sha256 rules.js`... +By default, Clef starts up in CLI (Command Line Interface) mode. Arbitrary remote processes may *request* account interactions (e.g. sign a transaction), which the user will need to individually *confirm*. + +To test this out, we can *request* Clef to list all account via its *External API endpoint*: + ```text -#sha256sum rules.js -6c21d1737429d6d4f2e55146da0797782f3c0a0355227f19d702df377c165d72 rules.js +echo '{"id": 1, "jsonrpc": "2.0", "method": "account_list"}' | nc -U ~/.clef/clef.ipc ``` -...now `attest` the file... -```text -#./signer attest 6c21d1737429d6d4f2e55146da0797782f3c0a0355227f19d702df377c165d72 -INFO [02-21|12:14:38] Ruleset attestation updated sha256=6c21d1737429d6d4f2e55146da0797782f3c0a0355227f19d702df377c165d72 +This will prompt the user within the Clef CLI to confirm or deny the request: + +```text +-------- List Account request-------------- +A request has been made to list all accounts. +You can select which accounts the caller can see + [x] 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3 + URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2017-04-14T15-15-00.327614556Z--d9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 + [x] 0x086278A6C067775F71d6B2BB1856Db6E28c30418 + URL: keystore://$HOME/.ethereum/rinkeby/keystore/UTC--2018-02-06T22-53-11.211657239Z--086278a6c067775f71d6b2bb1856db6e28c30418 +------------------------------------------- +Request context: + NA -> NA -> NA + +Additional HTTP header data, provided by the external caller: + User-Agent: + Origin: +Approve? [y/N]: +> ``` -...and (this is required only for non-production versions) load a mock-up `4byte.json` by copying the file from the source to your current working directory: +Depending on whether we approve or deny the request, the original NetCat process will get: + ```text -#cp $GOPATH/src/github.com/ethereum/go-ethereum/cmd/clef/4byte.json $PWD +{"jsonrpc":"2.0","id":1,"result":["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3","0x086278a6c067775f71d6b2bb1856db6e28c30418"]} + +or + +{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Request denied"}} ``` -At this point, we can start the signer with the rule-file: +Apart from listing accounts, you can also *request* creating a new account; signing transactions and data; and recovering signatures. You can find the available methods in the Clef [External API Spec](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#external-api-1) and the [External API Changelog](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/extapi_changelog.md). + +*Note, the number of things you can do from the External API is deliberately small, since we want to limit the power of remote calls by as much as possible! Clef has an [Internal API](https://github.com/ethereum/go-ethereum/tree/master/cmd/clef#ui-api-1) too for the UI (User Interface) which is much richer and can support custom interfaces on top. But that's out of scope here.* + +## Automatic rules + +For most users, manually confirming every transaction is the way to go. However, there are cases when it makes sense to set up some rules which permit Clef to sign a transaction without prompting the user. One such example would be running a signer on Rinkeby or other PoA networks. + +For starters, we can create a rule file that automatically permits anyone to list our available accounts without user confirmation. The rule file is a tiny JavaScript snippet that you can program however you want: + +```js +function ApproveListing() { + return "Approve" +} +``` + +Of course, Clef isn't going to just accept and run arbitrary scripts you give it, that would be dangerous if someone changes your rule file! Instead, you need to explicitly *attest* the rule file, which entails injecting its hash into Clef's secure store. + ```text -#./signer --rules rules.js --rpc +$ sha256sum rules.js +645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c rules.js -INFO [09-25|20:28:11.866] Using CLI as UI-channel -INFO [09-25|20:28:11.876] Loaded 4byte db signatures=5509 file=./4byte.json -INFO [09-25|20:28:11.877] Rule engine configured file=./rules.js -DEBUG[09-25|20:28:11.877] FS scan times list=100.781µs set=13.253µs diff=5.761µs -DEBUG[09-25|20:28:11.884] Ledger support enabled -DEBUG[09-25|20:28:11.888] Trezor support enabled -INFO [09-25|20:28:11.888] Audit logs configured file=audit.log -DEBUG[09-25|20:28:11.888] HTTP registered namespace=account -INFO [09-25|20:28:11.890] HTTP endpoint opened url=http://localhost:8550 -DEBUG[09-25|20:28:11.890] IPC registered namespace=account -INFO [09-25|20:28:11.890] IPC endpoint opened url= +$ clef attest 645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c +Decrypt master seed of clef +Password: +INFO [07-01|13:25:03.290] Ruleset attestation updated sha256=645b58e4f945e24d0221714ff29f6aa8e860382ced43490529db1695f5fcc71c +``` + +At this point, we can start Clef with the rule file: + +```text +$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js + +INFO [07-01|13:39:49.726] Rule engine configured file=rules.js +INFO [07-01|13:39:49.726] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +DEBUG[07-01|13:39:49.726] FS scan times list=35.15µs set=4.251µs diff=2.766µs +DEBUG[07-01|13:39:49.727] Ledger support enabled +DEBUG[07-01|13:39:49.727] Trezor support enabled via HID +DEBUG[07-01|13:39:49.727] Trezor support enabled via WebUSB +INFO [07-01|13:39:49.728] Audit logs configured file=audit.log +DEBUG[07-01|13:39:49.728] IPC registered namespace=account +INFO [07-01|13:39:49.728] IPC endpoint opened url=$HOME/.clef/clef.ipc ------- Signer info ------- -* extapi_version : 2.0.0 -* intapi_version : 2.0.0 -* extapi_http : http://localhost:8550 -* extapi_ipc : +* intapi_version : 7.0.0 +* extapi_version : 6.0.0 +* extapi_http : n/a +* extapi_ipc : $HOME/.clef/clef.ipc ``` -Any list-requests will now be auto-approved by our rule-file. +Any account listing *request* will now be auto-approved by the rule file: + +```text +$ echo '{"id": 1, "jsonrpc": "2.0", "method": "account_list"}' | nc -U ~/.clef/clef.ipc +{"jsonrpc":"2.0","id":1,"result":["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3","0x086278a6c067775f71d6b2bb1856db6e28c30418"]} +``` ## Under the hood While doing the operations above, these files have been created: ```text -#ls -laR ~/.signer/ -/home/martin/.signer/: -total 16 -drwx------ 3 martin martin 4096 feb 21 12:14 . -drwxr-xr-x 71 martin martin 4096 feb 21 12:12 .. -drwx------ 2 martin martin 4096 feb 21 12:14 43f73718397aa54d1b22 --rwx------ 1 martin martin 256 feb 21 12:12 secrets.dat +$ ls -laR ~/.clef/ -/home/martin/.signer/43f73718397aa54d1b22: -total 12 -drwx------ 2 martin martin 4096 feb 21 12:14 . -drwx------ 3 martin martin 4096 feb 21 12:14 .. --rw------- 1 martin martin 159 feb 21 12:14 config.json +$HOME/.clef/: +total 24 +drwxr-x--x 3 user user 4096 Jul 1 13:45 . +drwxr-xr-x 102 user user 12288 Jul 1 13:39 .. +drwx------ 2 user user 4096 Jul 1 13:25 02f90c0603f4f2f60188 +-r-------- 1 user user 868 Jun 28 13:55 masterseed.json -#cat /home/martin/.signer/43f73718397aa54d1b22/config.json -{"ruleset_sha256":{"iv":"6v4W4tfJxj3zZFbl","c":"6dt5RTDiTq93yh1qDEjpsat/tsKG7cb+vr3sza26IPL2fvsQ6ZoqFx++CPUa8yy6fD9Bbq41L01ehkKHTG3pOAeqTW6zc/+t0wv3AB6xPmU="}} +$HOME/.clef/02f90c0603f4f2f60188: +total 12 +drwx------ 2 user user 4096 Jul 1 13:25 . +drwxr-x--x 3 user user 4096 Jul 1 13:45 .. +-rw------- 1 user user 159 Jul 1 13:25 config.json +$ cat ~/.clef/02f90c0603f4f2f60188/config.json +{"ruleset_sha256":{"iv":"SWWEtnl+R+I+wfG7","c":"I3fjmwmamxVcfGax7D0MdUOL29/rBWcs73WBILmYK0o1CrX7wSMc3y37KsmtlZUAjp0oItYq01Ow8VGUOzilG91tDHInB5YHNtm/YkufEbo="}} ``` -In `~/.signer`, the `secrets.dat` file was created, containing the `master_seed`. -The `master_seed` was then used to derive a few other things: +In `$HOME/.clef`, the `masterseed.json` file was created, containing the master seed. This seed was then used to derive a few other things: -- `vault_location` : in this case `43f73718397aa54d1b22` . - - Thus, if you use a different `master_seed`, another `vault_location` will be used that does not conflict with each other. - - Example: `signer --signersecret /path/to/afile ...` -- `config.json` which is the encrypted key/value storage for configuration data, containing the key `ruleset_sha256`. +- **Vault location**: in this case `02f90c0603f4f2f60188`. + - If you use a different master seed, a different vault location will be used that does not conflict with each other (e.g. `clef --signersecret /path/to/file`). This allows you to run multiple instances of Clef, each with its own rules (e.g. mainnet + testnet). +- **`config.json`**: the encrypted key/value storage for configuration data, currently only containing the key `ruleset_sha256`, the attested hash of the automatic rules to use. +## Advanced rules -## Adding credentials - -In order to make more useful rules like signing transactions, the signer needs access to the passwords needed to unlock keystores. +In order to make more useful rules - like signing transactions - the signer needs access to the passwords needed to unlock keys from the keystore. You can inject an unlock password via `clef setpw`. ```text -#./signer addpw "0x694267f14675d7e1b9494fd8d72fefe1755710fa" "test_password" +$ clef setpw 0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 + +Please enter a password to store for this address: +Password: +Repeat password: -INFO [02-21|13:43:21] Credential store updated key=0x694267f14675d7e1b9494fd8d72fefe1755710fa +Decrypt master seed of clef +Password: +INFO [07-01|14:05:56.031] Credential store updated key=0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 ``` -## More advanced rules -Now let's update the rules to make use of credentials: +Now let's update the rules to make use of the new credentials: -```javascript -function ApproveListing(){ +```js +function ApproveListing() { return "Approve" } -function ApproveSignData(r){ - if( r.address.toLowerCase() == "0x694267f14675d7e1b9494fd8d72fefe1755710fa") - { - if(r.message.indexOf("bazonk") >= 0){ + +function ApproveSignData(req) { + if (req.address.toLowerCase() == "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3") { + if (req.messages[0].value.indexOf("bazonk") >= 0) { return "Approve" } return "Reject" } // Otherwise goes to manual processing } - ``` + In this example: -* Any requests to sign data with the account `0x694...` will be - * auto-approved if the message contains with `bazonk` - * auto-rejected if it does not. -* Any other signing-requests will be passed along for manual approve/reject. -_Note: make sure that `0x694...` is an account you have access to. You can create it either via the clef or the traditional account cli tool. If the latter was chosen, make sure both clef and geth use the same keystore by specifing `--keystore path/to/your/keystore` when running clef._ +- Any requests to sign data with the account `0xd9c9...` will be: + - Auto-approved if the message contains `bazonk`, + - Auto-rejected if the message does not contain `bazonk`, +- Any other requests will be passed along for manual confirmation. -Attest the new file... -```text -#sha256sum rules.js -2a0cb661dacfc804b6e95d935d813fd17c0997a7170e4092ffbc34ca976acd9f rules.js +*Note, to make this example work, please use you own accounts. You can create a new account either via Clef or the traditional account CLI tools. If the latter was chosen, make sure both Clef and Geth use the same keystore by specifying `--keystore path/to/your/keystore` when running Clef.* -#./signer attest 2a0cb661dacfc804b6e95d935d813fd17c0997a7170e4092ffbc34ca976acd9f +Attest the new rule file so that Clef will accept loading it: -INFO [02-21|14:36:30] Ruleset attestation updated sha256=2a0cb661dacfc804b6e95d935d813fd17c0997a7170e4092ffbc34ca976acd9f +```text +$ sha256sum rules.js +f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178 rules.js + +$ clef attest f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178 +Decrypt master seed of clef +Password: +INFO [07-01|14:11:28.509] Ruleset attestation updated sha256=f163a1738b649259bb9b369c593fdc4c6b6f86cc87e343c3ba58faee03c2a178 ``` -And start the signer: +Restart Clef with the new rules in place: ``` -#./signer --rules rules.js --rpc - -INFO [09-25|21:02:16.450] Using CLI as UI-channel -INFO [09-25|21:02:16.466] Loaded 4byte db signatures=5509 file=./4byte.json -INFO [09-25|21:02:16.467] Rule engine configured file=./rules.js -DEBUG[09-25|21:02:16.468] FS scan times list=1.45262ms set=21.926µs diff=6.944µs -DEBUG[09-25|21:02:16.473] Ledger support enabled -DEBUG[09-25|21:02:16.475] Trezor support enabled -INFO [09-25|21:02:16.476] Audit logs configured file=audit.log -DEBUG[09-25|21:02:16.476] HTTP registered namespace=account -INFO [09-25|21:02:16.478] HTTP endpoint opened url=http://localhost:8550 -DEBUG[09-25|21:02:16.478] IPC registered namespace=account -INFO [09-25|21:02:16.478] IPC endpoint opened url= +$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js + +INFO [07-01|14:12:41.636] Rule engine configured file=rules.js +INFO [07-01|14:12:41.636] Starting signer chainid=4 keystore=$HOME/.ethereum/rinkeby/keystore light-kdf=false advanced=false +DEBUG[07-01|14:12:41.636] FS scan times list=46.722µs set=4.47µs diff=2.157µs +DEBUG[07-01|14:12:41.637] Ledger support enabled +DEBUG[07-01|14:12:41.637] Trezor support enabled via HID +DEBUG[07-01|14:12:41.638] Trezor support enabled via WebUSB +INFO [07-01|14:12:41.638] Audit logs configured file=audit.log +DEBUG[07-01|14:12:41.638] IPC registered namespace=account +INFO [07-01|14:12:41.638] IPC endpoint opened url=$HOME/.clef/clef.ipc ------- Signer info ------- -* extapi_version : 2.0.0 -* intapi_version : 2.0.0 -* extapi_http : http://localhost:8550 -* extapi_ipc : +* intapi_version : 7.0.0 +* extapi_version : 6.0.0 +* extapi_http : n/a +* extapi_ipc : $HOME/.clef/clef.ipc ``` -And then test signing, once with `bazonk` and once without: +Then test signing, once with `bazonk` and once without: ``` -#curl -H "Content-Type: application/json" -X POST --data "{\"jsonrpc\":\"2.0\",\"method\":\"account_sign\",\"params\":[\"0x694267f14675d7e1b9494fd8d72fefe1755710fa\",\"0x$(xxd -pu <<< ' bazonk baz gaz')\"],\"id\":67}" http://localhost:8550/ -{"jsonrpc":"2.0","id":67,"result":"0x93e6161840c3ae1efc26dc68dedab6e8fc233bb3fefa1b4645dbf6609b93dace160572ea4ab33240256bb6d3dadb60dcd9c515d6374d3cf614ee897408d41d541c"} - -#curl -H "Content-Type: application/json" -X POST --data "{\"jsonrpc\":\"2.0\",\"method\":\"account_sign\",\"params\":[\"0x694267f14675d7e1b9494fd8d72fefe1755710fa\",\"0x$(xxd -pu <<< ' bonk baz gaz')\"],\"id\":67}" http://localhost:8550/ -{"jsonrpc":"2.0","id":67,"error":{"code":-32000,"message":"Request denied"}} +$ echo '{"id": 1, "jsonrpc":"2.0", "method":"account_signData", "params":["data/plain", "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x202062617a6f6e6b2062617a2067617a0a"]}' | nc -U ~/.clef/clef.ipc +{"jsonrpc":"2.0","id":1,"result":"0x4f93e3457027f6be99b06b3392d0ebc60615ba448bb7544687ef1248dea4f5317f789002df783979c417d969836b6fda3710f5bffb296b4d51c8aaae6e2ac4831c"} +$ echo '{"id": 1, "jsonrpc":"2.0", "method":"account_signData", "params":["data/plain", "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x2020626f6e6b2062617a2067617a0a"]}' | nc -U ~/.clef/clef.ipc +{"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"Request denied"}} ``` -Meanwhile, in the signer output: +Meanwhile, in the Clef output log you can see: ```text INFO [02-21|14:42:41] Op approved INFO [02-21|14:42:56] Op rejected @@ -203,9 +281,73 @@ INFO [02-21|14:42:56] Op rejected The signer also stores all traffic over the external API in a log file. The last 4 lines shows the two requests and their responses: ```text -#tail -n 4 audit.log -t=2018-02-21T14:42:41+0100 lvl=info msg=Sign api=signer type=request metadata="{\"remote\":\"127.0.0.1:49706\",\"local\":\"localhost:8550\",\"scheme\":\"HTTP/1.1\"}" addr="0x694267f14675d7e1b9494fd8d72fefe1755710fa [chksum INVALID]" data=202062617a6f6e6b2062617a2067617a0a -t=2018-02-21T14:42:42+0100 lvl=info msg=Sign api=signer type=response data=93e6161840c3ae1efc26dc68dedab6e8fc233bb3fefa1b4645dbf6609b93dace160572ea4ab33240256bb6d3dadb60dcd9c515d6374d3cf614ee897408d41d541c error=nil -t=2018-02-21T14:42:56+0100 lvl=info msg=Sign api=signer type=request metadata="{\"remote\":\"127.0.0.1:49708\",\"local\":\"localhost:8550\",\"scheme\":\"HTTP/1.1\"}" addr="0x694267f14675d7e1b9494fd8d72fefe1755710fa [chksum INVALID]" data=2020626f6e6b2062617a2067617a0a -t=2018-02-21T14:42:56+0100 lvl=info msg=Sign api=signer type=response data= error="Request denied" -``` \ No newline at end of file +$ tail -n 4 audit.log +t=2019-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x202062617a6f6e6b2062617a2067617a0a content-type=data/plain +t=2019-07-01T15:52:14+0300 lvl=info msg=SignData api=signer type=response data=4f93e3457027f6be99b06b3392d0ebc60615ba448bb7544687ef1248dea4f5317f789002df783979c417d969836b6fda3710f5bffb296b4d51c8aaae6e2ac4831c error=nil +t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=request metadata="{\"remote\":\"NA\",\"local\":\"NA\",\"scheme\":\"NA\",\"User-Agent\":\"\",\"Origin\":\"\"}" addr="0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3 [chksum INVALID]" data=0x2020626f6e6b2062617a2067617a0a content-type=data/plain +t=2019-07-01T15:52:23+0300 lvl=info msg=SignData api=signer type=response data= error="Request denied" +``` + +For more details on writing automatic rules, please see the [rules spec](https://github.com/ethereum/go-ethereum/blob/master/cmd/clef/rules.md). + +## Geth integration + +Of course, as awesome as Clef is, it's not feasible to interact with it via JSON RPC by hand. Long term, we're hoping to convince the general Ethereum community to support Clef as a general signer (it's only 3-5 methods), thus allowing your favorite DApp, Metamask, MyCrypto, etc to request signatures directly. + +Until then however, we're trying to pave the way via Geth. Geth v1.9.0 has built in support via `--signer ` for using a local or remote Clef instance as an account backend! + +We can try this by running Clef with our previous rules on Rinkeby (for now it's a good idea to allow auto-listing accounts, since Geth likes to retrieve them once in a while). + +```text +$ clef --keystore ~/.ethereum/rinkeby/keystore --chainid 4 --rules rules.js +``` + +In a different window we can start Geth, list our accounts, even list our wallets to see where the accounts originate from: + +```text +$ geth --rinkeby --signer=~/.clef/clef.ipc console + +> eth.accounts +["0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", "0x086278a6c067775f71d6b2bb1856db6e28c30418"] + +> personal.listWallets +[{ + accounts: [{ + address: "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3", + url: "extapi://$HOME/.clef/clef.ipc" + }, { + address: "0x086278a6c067775f71d6b2bb1856db6e28c30418", + url: "extapi://$HOME/.clef/clef.ipc" + }], + status: "ok [version=6.0.0]", + url: "extapi://$HOME/.clef/clef.ipc" +}] + +> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[0]}) +``` + +Lastly, when we requested a transaction to be sent, Clef prompted us in the original window to approve it: + +```text +--------- Transaction request------------- +to: 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3 +from: 0xD9C9Cd5f6779558b6e0eD4e6Acf6b1947E7fA1F3 [chksum ok] +value: 0 wei +gas: 0x5208 (21000) +gasprice: 1000000000 wei +nonce: 0x2366 (9062) + +Request context: + NA -> NA -> NA + +Additional HTTP header data, provided by the external caller: + User-Agent: + Origin: +------------------------------------------- +Approve? [y/N]: +> y +``` + +:boom: + +*Note, if you enable the external signer backend in Geth, all other account management is disabled. This is because long term we want to remove account management from Geth.* diff --git a/cmd/devp2p/discv4cmd.go b/cmd/devp2p/discv4cmd.go new file mode 100644 index 000000000000..ab5b874029df --- /dev/null +++ b/cmd/devp2p/discv4cmd.go @@ -0,0 +1,194 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "fmt" + "net" + "strings" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/discover" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "gopkg.in/urfave/cli.v1" +) + +var ( + discv4Command = cli.Command{ + Name: "discv4", + Usage: "Node Discovery v4 tools", + Subcommands: []cli.Command{ + discv4PingCommand, + discv4RequestRecordCommand, + discv4ResolveCommand, + discv4ResolveJSONCommand, + }, + } + discv4PingCommand = cli.Command{ + Name: "ping", + Usage: "Sends ping to a node", + Action: discv4Ping, + ArgsUsage: "", + } + discv4RequestRecordCommand = cli.Command{ + Name: "requestenr", + Usage: "Requests a node record using EIP-868 enrRequest", + Action: discv4RequestRecord, + ArgsUsage: "", + } + discv4ResolveCommand = cli.Command{ + Name: "resolve", + Usage: "Finds a node in the DHT", + Action: discv4Resolve, + ArgsUsage: "", + Flags: []cli.Flag{bootnodesFlag}, + } + discv4ResolveJSONCommand = cli.Command{ + Name: "resolve-json", + Usage: "Re-resolves nodes in a nodes.json file", + Action: discv4ResolveJSON, + Flags: []cli.Flag{bootnodesFlag}, + ArgsUsage: "", + } +) + +var bootnodesFlag = cli.StringFlag{ + Name: "bootnodes", + Usage: "Comma separated nodes used for bootstrapping", +} + +func discv4Ping(ctx *cli.Context) error { + n := getNodeArg(ctx) + disc := startV4(ctx) + defer disc.Close() + + start := time.Now() + if err := disc.Ping(n); err != nil { + return fmt.Errorf("node didn't respond: %v", err) + } + fmt.Printf("node responded to ping (RTT %v).\n", time.Since(start)) + return nil +} + +func discv4RequestRecord(ctx *cli.Context) error { + n := getNodeArg(ctx) + disc := startV4(ctx) + defer disc.Close() + + respN, err := disc.RequestENR(n) + if err != nil { + return fmt.Errorf("can't retrieve record: %v", err) + } + fmt.Println(respN.String()) + return nil +} + +func discv4Resolve(ctx *cli.Context) error { + n := getNodeArg(ctx) + disc := startV4(ctx) + defer disc.Close() + + fmt.Println(disc.Resolve(n).String()) + return nil +} + +func discv4ResolveJSON(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need nodes file as argument") + } + disc := startV4(ctx) + defer disc.Close() + file := ctx.Args().Get(0) + + // Load existing nodes in file. + var nodes []*enode.Node + if common.FileExist(file) { + nodes = loadNodesJSON(file).nodes() + } + // Add nodes from command line arguments. + for i := 1; i < ctx.NArg(); i++ { + n, err := parseNode(ctx.Args().Get(i)) + if err != nil { + exit(err) + } + nodes = append(nodes, n) + } + + result := make(nodeSet, len(nodes)) + for _, n := range nodes { + n = disc.Resolve(n) + result[n.ID()] = nodeJSON{Seq: n.Seq(), N: n} + } + writeNodesJSON(file, result) + return nil +} + +func parseBootnodes(ctx *cli.Context) ([]*enode.Node, error) { + s := params.RinkebyBootnodes + if ctx.IsSet(bootnodesFlag.Name) { + s = strings.Split(ctx.String(bootnodesFlag.Name), ",") + } + nodes := make([]*enode.Node, len(s)) + var err error + for i, record := range s { + nodes[i], err = parseNode(record) + if err != nil { + return nil, fmt.Errorf("invalid bootstrap node: %v", err) + } + } + return nodes, nil +} + +// startV4 starts an ephemeral discovery V4 node. +func startV4(ctx *cli.Context) *discover.UDPv4 { + socket, ln, cfg, err := listen() + if err != nil { + exit(err) + } + if commandHasFlag(ctx, bootnodesFlag) { + bn, err := parseBootnodes(ctx) + if err != nil { + exit(err) + } + cfg.Bootnodes = bn + } + disc, err := discover.ListenV4(socket, ln, cfg) + if err != nil { + exit(err) + } + return disc +} + +func listen() (*net.UDPConn, *enode.LocalNode, discover.Config, error) { + var cfg discover.Config + cfg.PrivateKey, _ = crypto.GenerateKey() + db, _ := enode.OpenDB("") + ln := enode.NewLocalNode(db, cfg.PrivateKey) + + socket, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IP{0, 0, 0, 0}}) + if err != nil { + db.Close() + return nil, nil, cfg, err + } + addr := socket.LocalAddr().(*net.UDPAddr) + ln.SetFallbackIP(net.IP{127, 0, 0, 1}) + ln.SetFallbackUDP(addr.Port) + return socket, ln, cfg, nil +} diff --git a/cmd/devp2p/dns_cloudflare.go b/cmd/devp2p/dns_cloudflare.go new file mode 100644 index 000000000000..83279168ccae --- /dev/null +++ b/cmd/devp2p/dns_cloudflare.go @@ -0,0 +1,163 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "fmt" + "strings" + + "github.com/cloudflare/cloudflare-go" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "gopkg.in/urfave/cli.v1" +) + +var ( + cloudflareTokenFlag = cli.StringFlag{ + Name: "token", + Usage: "CloudFlare API token", + EnvVar: "CLOUDFLARE_API_TOKEN", + } + cloudflareZoneIDFlag = cli.StringFlag{ + Name: "zoneid", + Usage: "CloudFlare Zone ID (optional)", + } +) + +type cloudflareClient struct { + *cloudflare.API + zoneID string +} + +// newCloudflareClient sets up a CloudFlare API client from command line flags. +func newCloudflareClient(ctx *cli.Context) *cloudflareClient { + token := ctx.String(cloudflareTokenFlag.Name) + if token == "" { + exit(fmt.Errorf("need cloudflare API token to proceed")) + } + api, err := cloudflare.NewWithAPIToken(token) + if err != nil { + exit(fmt.Errorf("can't create Cloudflare client: %v", err)) + } + return &cloudflareClient{ + API: api, + zoneID: ctx.String(cloudflareZoneIDFlag.Name), + } +} + +// deploy uploads the given tree to CloudFlare DNS. +func (c *cloudflareClient) deploy(name string, t *dnsdisc.Tree) error { + if err := c.checkZone(name); err != nil { + return err + } + records := t.ToTXT(name) + return c.uploadRecords(name, records) +} + +// checkZone verifies permissions on the CloudFlare DNS Zone for name. +func (c *cloudflareClient) checkZone(name string) error { + if c.zoneID == "" { + log.Info(fmt.Sprintf("Finding CloudFlare zone ID for %s", name)) + id, err := c.ZoneIDByName(name) + if err != nil { + return err + } + c.zoneID = id + } + log.Info(fmt.Sprintf("Checking Permissions on zone %s", c.zoneID)) + zone, err := c.ZoneDetails(c.zoneID) + if err != nil { + return err + } + if !strings.HasSuffix(name, "."+zone.Name) { + return fmt.Errorf("CloudFlare zone name %q does not match name %q to be deployed", zone.Name, name) + } + needPerms := map[string]bool{"#zone:edit": false, "#zone:read": false} + for _, perm := range zone.Permissions { + if _, ok := needPerms[perm]; ok { + needPerms[perm] = true + } + } + for _, ok := range needPerms { + if !ok { + return fmt.Errorf("wrong permissions on zone %s: %v", c.zoneID, needPerms) + } + } + return nil +} + +// uploadRecords updates the TXT records at a particular subdomain. All non-root records +// will have a TTL of "infinity" and all existing records not in the new map will be +// nuked! +func (c *cloudflareClient) uploadRecords(name string, records map[string]string) error { + // Convert all names to lowercase. + lrecords := make(map[string]string, len(records)) + for name, r := range records { + lrecords[strings.ToLower(name)] = r + } + records = lrecords + + log.Info(fmt.Sprintf("Retrieving existing TXT records on %s", name)) + entries, err := c.DNSRecords(c.zoneID, cloudflare.DNSRecord{Type: "TXT"}) + if err != nil { + return err + } + existing := make(map[string]cloudflare.DNSRecord) + for _, entry := range entries { + if !strings.HasSuffix(entry.Name, name) { + continue + } + existing[strings.ToLower(entry.Name)] = entry + } + + // Iterate over the new records and inject anything missing. + for path, val := range records { + old, exists := existing[path] + if !exists { + // Entry is unknown, push a new one to Cloudflare. + log.Info(fmt.Sprintf("Creating %s = %q", path, val)) + ttl := 1 + if path != name { + ttl = 2147483647 // Max TTL permitted by Cloudflare + } + _, err = c.CreateDNSRecord(c.zoneID, cloudflare.DNSRecord{Type: "TXT", Name: path, Content: val, TTL: ttl}) + } else if old.Content != val { + // Entry already exists, only change its content. + log.Info(fmt.Sprintf("Updating %s from %q to %q", path, old.Content, val)) + old.Content = val + err = c.UpdateDNSRecord(c.zoneID, old.ID, old) + } else { + log.Info(fmt.Sprintf("Skipping %s = %q", path, val)) + } + if err != nil { + return fmt.Errorf("failed to publish %s: %v", path, err) + } + } + + // Iterate over the old records and delete anything stale. + for path, entry := range existing { + if _, ok := records[path]; ok { + continue + } + // Stale entry, nuke it. + log.Info(fmt.Sprintf("Deleting %s = %q", path, entry.Content)) + if err := c.DeleteDNSRecord(c.zoneID, entry.ID); err != nil { + return fmt.Errorf("failed to delete %s: %v", path, err) + } + } + return nil +} diff --git a/cmd/devp2p/dnscmd.go b/cmd/devp2p/dnscmd.go new file mode 100644 index 000000000000..74d70d3aaaf9 --- /dev/null +++ b/cmd/devp2p/dnscmd.go @@ -0,0 +1,358 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "crypto/ecdsa" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "time" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/console" + "github.com/ethereum/go-ethereum/p2p/dnsdisc" + "github.com/ethereum/go-ethereum/p2p/enode" + cli "gopkg.in/urfave/cli.v1" +) + +var ( + dnsCommand = cli.Command{ + Name: "dns", + Usage: "DNS Discovery Commands", + Subcommands: []cli.Command{ + dnsSyncCommand, + dnsSignCommand, + dnsTXTCommand, + dnsCloudflareCommand, + }, + } + dnsSyncCommand = cli.Command{ + Name: "sync", + Usage: "Download a DNS discovery tree", + ArgsUsage: " [ ]", + Action: dnsSync, + Flags: []cli.Flag{dnsTimeoutFlag}, + } + dnsSignCommand = cli.Command{ + Name: "sign", + Usage: "Sign a DNS discovery tree", + ArgsUsage: " ", + Action: dnsSign, + Flags: []cli.Flag{dnsDomainFlag, dnsSeqFlag}, + } + dnsTXTCommand = cli.Command{ + Name: "to-txt", + Usage: "Create a DNS TXT records for a discovery tree", + ArgsUsage: " ", + Action: dnsToTXT, + } + dnsCloudflareCommand = cli.Command{ + Name: "to-cloudflare", + Usage: "Deploy DNS TXT records to cloudflare", + ArgsUsage: "", + Action: dnsToCloudflare, + Flags: []cli.Flag{cloudflareTokenFlag, cloudflareZoneIDFlag}, + } +) + +var ( + dnsTimeoutFlag = cli.DurationFlag{ + Name: "timeout", + Usage: "Timeout for DNS lookups", + } + dnsDomainFlag = cli.StringFlag{ + Name: "domain", + Usage: "Domain name of the tree", + } + dnsSeqFlag = cli.UintFlag{ + Name: "seq", + Usage: "New sequence number of the tree", + } +) + +// dnsSync performs dnsSyncCommand. +func dnsSync(ctx *cli.Context) error { + var ( + c = dnsClient(ctx) + url = ctx.Args().Get(0) + outdir = ctx.Args().Get(1) + ) + domain, _, err := dnsdisc.ParseURL(url) + if err != nil { + return err + } + if outdir == "" { + outdir = domain + } + + t, err := c.SyncTree(url) + if err != nil { + return err + } + def := treeToDefinition(url, t) + def.Meta.LastModified = time.Now() + writeTreeDefinition(outdir, def) + return nil +} + +func dnsSign(ctx *cli.Context) error { + if ctx.NArg() < 2 { + return fmt.Errorf("need tree definition directory and key file as arguments") + } + var ( + defdir = ctx.Args().Get(0) + keyfile = ctx.Args().Get(1) + def = loadTreeDefinition(defdir) + domain = directoryName(defdir) + ) + if def.Meta.URL != "" { + d, _, err := dnsdisc.ParseURL(def.Meta.URL) + if err != nil { + return fmt.Errorf("invalid 'url' field: %v", err) + } + domain = d + } + if ctx.IsSet(dnsDomainFlag.Name) { + domain = ctx.String(dnsDomainFlag.Name) + } + if ctx.IsSet(dnsSeqFlag.Name) { + def.Meta.Seq = ctx.Uint(dnsSeqFlag.Name) + } else { + def.Meta.Seq++ // Auto-bump sequence number if not supplied via flag. + } + t, err := dnsdisc.MakeTree(def.Meta.Seq, def.Nodes, def.Meta.Links) + if err != nil { + return err + } + + key := loadSigningKey(keyfile) + url, err := t.Sign(key, domain) + if err != nil { + return fmt.Errorf("can't sign: %v", err) + } + + def = treeToDefinition(url, t) + def.Meta.LastModified = time.Now() + writeTreeDefinition(defdir, def) + return nil +} + +func directoryName(dir string) string { + abs, err := filepath.Abs(dir) + if err != nil { + exit(err) + } + return filepath.Base(abs) +} + +// dnsToTXT peforms dnsTXTCommand. +func dnsToTXT(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need tree definition directory as argument") + } + output := ctx.Args().Get(1) + if output == "" { + output = "-" // default to stdout + } + domain, t, err := loadTreeDefinitionForExport(ctx.Args().Get(0)) + if err != nil { + return err + } + writeTXTJSON(output, t.ToTXT(domain)) + return nil +} + +// dnsToCloudflare peforms dnsCloudflareCommand. +func dnsToCloudflare(ctx *cli.Context) error { + if ctx.NArg() < 1 { + return fmt.Errorf("need tree definition directory as argument") + } + domain, t, err := loadTreeDefinitionForExport(ctx.Args().Get(0)) + if err != nil { + return err + } + client := newCloudflareClient(ctx) + return client.deploy(domain, t) +} + +// loadSigningKey loads a private key in Ethereum keystore format. +func loadSigningKey(keyfile string) *ecdsa.PrivateKey { + keyjson, err := ioutil.ReadFile(keyfile) + if err != nil { + exit(fmt.Errorf("failed to read the keyfile at '%s': %v", keyfile, err)) + } + password, _ := console.Stdin.PromptPassword("Please enter the password for '" + keyfile + "': ") + key, err := keystore.DecryptKey(keyjson, password) + if err != nil { + exit(fmt.Errorf("error decrypting key: %v", err)) + } + return key.PrivateKey +} + +// dnsClient configures the DNS discovery client from command line flags. +func dnsClient(ctx *cli.Context) *dnsdisc.Client { + var cfg dnsdisc.Config + if commandHasFlag(ctx, dnsTimeoutFlag) { + cfg.Timeout = ctx.Duration(dnsTimeoutFlag.Name) + } + c, _ := dnsdisc.NewClient(cfg) // cannot fail because no URLs given + return c +} + +// There are two file formats for DNS node trees on disk: +// +// The 'TXT' format is a single JSON file containing DNS TXT records +// as a JSON object where the keys are names and the values are objects +// containing the value of the record. +// +// The 'definition' format is a directory containing two files: +// +// enrtree-info.json -- contains sequence number & links to other trees +// nodes.json -- contains the nodes as a JSON array. +// +// This format exists because it's convenient to edit. nodes.json can be generated +// in multiple ways: it may be written by a DHT crawler or compiled by a human. + +type dnsDefinition struct { + Meta dnsMetaJSON + Nodes []*enode.Node +} + +type dnsMetaJSON struct { + URL string `json:"url,omitempty"` + Seq uint `json:"seq"` + Sig string `json:"signature,omitempty"` + Links []string `json:"links"` + LastModified time.Time `json:"lastModified"` +} + +func treeToDefinition(url string, t *dnsdisc.Tree) *dnsDefinition { + meta := dnsMetaJSON{ + URL: url, + Seq: t.Seq(), + Sig: t.Signature(), + Links: t.Links(), + } + if meta.Links == nil { + meta.Links = []string{} + } + return &dnsDefinition{Meta: meta, Nodes: t.Nodes()} +} + +// loadTreeDefinition loads a directory in 'definition' format. +func loadTreeDefinition(directory string) *dnsDefinition { + metaFile, nodesFile := treeDefinitionFiles(directory) + var def dnsDefinition + err := common.LoadJSON(metaFile, &def.Meta) + if err != nil && !os.IsNotExist(err) { + exit(err) + } + if def.Meta.Links == nil { + def.Meta.Links = []string{} + } + // Check link syntax. + for _, link := range def.Meta.Links { + if _, _, err := dnsdisc.ParseURL(link); err != nil { + exit(fmt.Errorf("invalid link %q: %v", link, err)) + } + } + // Check/convert nodes. + nodes := loadNodesJSON(nodesFile) + if err := nodes.verify(); err != nil { + exit(err) + } + def.Nodes = nodes.nodes() + return &def +} + +// loadTreeDefinitionForExport loads a DNS tree and ensures it is signed. +func loadTreeDefinitionForExport(dir string) (domain string, t *dnsdisc.Tree, err error) { + metaFile, _ := treeDefinitionFiles(dir) + def := loadTreeDefinition(dir) + if def.Meta.URL == "" { + return "", nil, fmt.Errorf("missing 'url' field in %v", metaFile) + } + domain, pubkey, err := dnsdisc.ParseURL(def.Meta.URL) + if err != nil { + return "", nil, fmt.Errorf("invalid 'url' field in %v: %v", metaFile, err) + } + if t, err = dnsdisc.MakeTree(def.Meta.Seq, def.Nodes, def.Meta.Links); err != nil { + return "", nil, err + } + if err := ensureValidTreeSignature(t, pubkey, def.Meta.Sig); err != nil { + return "", nil, err + } + return domain, t, nil +} + +// ensureValidTreeSignature checks that sig is valid for tree and assigns it as the +// tree's signature if valid. +func ensureValidTreeSignature(t *dnsdisc.Tree, pubkey *ecdsa.PublicKey, sig string) error { + if sig == "" { + return fmt.Errorf("missing signature, run 'devp2p dns sign' first") + } + if err := t.SetSignature(pubkey, sig); err != nil { + return fmt.Errorf("invalid signature on tree, run 'devp2p dns sign' to update it") + } + return nil +} + +// writeTreeDefinition writes a DNS node tree definition to the given directory. +func writeTreeDefinition(directory string, def *dnsDefinition) { + metaJSON, err := json.MarshalIndent(&def.Meta, "", jsonIndent) + if err != nil { + exit(err) + } + // Convert nodes. + nodes := make(nodeSet, len(def.Nodes)) + nodes.add(def.Nodes...) + // Write. + if err := os.Mkdir(directory, 0744); err != nil && !os.IsExist(err) { + exit(err) + } + metaFile, nodesFile := treeDefinitionFiles(directory) + writeNodesJSON(nodesFile, nodes) + if err := ioutil.WriteFile(metaFile, metaJSON, 0644); err != nil { + exit(err) + } +} + +func treeDefinitionFiles(directory string) (string, string) { + meta := filepath.Join(directory, "enrtree-info.json") + nodes := filepath.Join(directory, "nodes.json") + return meta, nodes +} + +// writeTXTJSON writes TXT records in JSON format. +func writeTXTJSON(file string, txt map[string]string) { + txtJSON, err := json.MarshalIndent(txt, "", jsonIndent) + if err != nil { + exit(err) + } + if file == "-" { + os.Stdout.Write(txtJSON) + fmt.Println() + return + } + if err := ioutil.WriteFile(file, txtJSON, 0644); err != nil { + exit(err) + } +} diff --git a/cmd/devp2p/enrcmd.go b/cmd/devp2p/enrcmd.go new file mode 100644 index 000000000000..15d77dd011a8 --- /dev/null +++ b/cmd/devp2p/enrcmd.go @@ -0,0 +1,198 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "bytes" + "encoding/base64" + "encoding/hex" + "fmt" + "io/ioutil" + "net" + "os" + "strconv" + "strings" + + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" + "gopkg.in/urfave/cli.v1" +) + +var enrdumpCommand = cli.Command{ + Name: "enrdump", + Usage: "Pretty-prints node records", + Action: enrdump, + Flags: []cli.Flag{ + cli.StringFlag{Name: "file"}, + }, +} + +func enrdump(ctx *cli.Context) error { + var source string + if file := ctx.String("file"); file != "" { + if ctx.NArg() != 0 { + return fmt.Errorf("can't dump record from command-line argument in -file mode") + } + var b []byte + var err error + if file == "-" { + b, err = ioutil.ReadAll(os.Stdin) + } else { + b, err = ioutil.ReadFile(file) + } + if err != nil { + return err + } + source = string(b) + } else if ctx.NArg() == 1 { + source = ctx.Args()[0] + } else { + return fmt.Errorf("need record as argument") + } + + r, err := parseRecord(source) + if err != nil { + return fmt.Errorf("INVALID: %v", err) + } + fmt.Print(dumpRecord(r)) + return nil +} + +// dumpRecord creates a human-readable description of the given node record. +func dumpRecord(r *enr.Record) string { + out := new(bytes.Buffer) + if n, err := enode.New(enode.ValidSchemes, r); err != nil { + fmt.Fprintf(out, "INVALID: %v\n", err) + } else { + fmt.Fprintf(out, "Node ID: %v\n", n.ID()) + } + kv := r.AppendElements(nil)[1:] + fmt.Fprintf(out, "Record has sequence number %d and %d key/value pairs.\n", r.Seq(), len(kv)/2) + fmt.Fprint(out, dumpRecordKV(kv, 2)) + return out.String() +} + +func dumpRecordKV(kv []interface{}, indent int) string { + // Determine the longest key name for alignment. + var out string + var longestKey = 0 + for i := 0; i < len(kv); i += 2 { + key := kv[i].(string) + if len(key) > longestKey { + longestKey = len(key) + } + } + // Print the keys, invoking formatters for known keys. + for i := 0; i < len(kv); i += 2 { + key := kv[i].(string) + val := kv[i+1].(rlp.RawValue) + pad := longestKey - len(key) + out += strings.Repeat(" ", indent) + strconv.Quote(key) + strings.Repeat(" ", pad+1) + formatter := attrFormatters[key] + if formatter == nil { + formatter = formatAttrRaw + } + fmtval, ok := formatter(val) + if ok { + out += fmtval + "\n" + } else { + out += hex.EncodeToString(val) + " (!)\n" + } + } + return out +} + +// parseNode parses a node record and verifies its signature. +func parseNode(source string) (*enode.Node, error) { + if strings.HasPrefix(source, "enode://") { + return enode.ParseV4(source) + } + r, err := parseRecord(source) + if err != nil { + return nil, err + } + return enode.New(enode.ValidSchemes, r) +} + +// parseRecord parses a node record from hex, base64, or raw binary input. +func parseRecord(source string) (*enr.Record, error) { + bin := []byte(source) + if d, ok := decodeRecordHex(bytes.TrimSpace(bin)); ok { + bin = d + } else if d, ok := decodeRecordBase64(bytes.TrimSpace(bin)); ok { + bin = d + } + var r enr.Record + err := rlp.DecodeBytes(bin, &r) + return &r, err +} + +func decodeRecordHex(b []byte) ([]byte, bool) { + if bytes.HasPrefix(b, []byte("0x")) { + b = b[2:] + } + dec := make([]byte, hex.DecodedLen(len(b))) + _, err := hex.Decode(dec, b) + return dec, err == nil +} + +func decodeRecordBase64(b []byte) ([]byte, bool) { + if bytes.HasPrefix(b, []byte("enr:")) { + b = b[4:] + } + dec := make([]byte, base64.RawURLEncoding.DecodedLen(len(b))) + n, err := base64.RawURLEncoding.Decode(dec, b) + return dec[:n], err == nil +} + +// attrFormatters contains formatting functions for well-known ENR keys. +var attrFormatters = map[string]func(rlp.RawValue) (string, bool){ + "id": formatAttrString, + "ip": formatAttrIP, + "ip6": formatAttrIP, + "tcp": formatAttrUint, + "tcp6": formatAttrUint, + "udp": formatAttrUint, + "udp6": formatAttrUint, +} + +func formatAttrRaw(v rlp.RawValue) (string, bool) { + s := hex.EncodeToString(v) + return s, true +} + +func formatAttrString(v rlp.RawValue) (string, bool) { + content, _, err := rlp.SplitString(v) + return strconv.Quote(string(content)), err == nil +} + +func formatAttrIP(v rlp.RawValue) (string, bool) { + content, _, err := rlp.SplitString(v) + if err != nil || len(content) != 4 && len(content) != 6 { + return "", false + } + return net.IP(content).String(), true +} + +func formatAttrUint(v rlp.RawValue) (string, bool) { + var x uint64 + if err := rlp.DecodeBytes(v, &x); err != nil { + return "", false + } + return strconv.FormatUint(x, 10), true +} diff --git a/cmd/devp2p/main.go b/cmd/devp2p/main.go new file mode 100644 index 000000000000..c88fe6f6123e --- /dev/null +++ b/cmd/devp2p/main.go @@ -0,0 +1,96 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "fmt" + "os" + "path/filepath" + "sort" + + "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "gopkg.in/urfave/cli.v1" +) + +var ( + // Git information set by linker when building with ci.go. + gitCommit string + gitDate string + app = &cli.App{ + Name: filepath.Base(os.Args[0]), + Usage: "go-ethereum devp2p tool", + Version: params.VersionWithCommit(gitCommit, gitDate), + Writer: os.Stdout, + HideVersion: true, + } +) + +func init() { + // Set up the CLI app. + app.Flags = append(app.Flags, debug.Flags...) + app.Before = func(ctx *cli.Context) error { + return debug.Setup(ctx, "") + } + app.After = func(ctx *cli.Context) error { + debug.Exit() + return nil + } + app.CommandNotFound = func(ctx *cli.Context, cmd string) { + fmt.Fprintf(os.Stderr, "No such command: %s\n", cmd) + os.Exit(1) + } + // Add subcommands. + app.Commands = []cli.Command{ + enrdumpCommand, + discv4Command, + dnsCommand, + } +} + +func main() { + exit(app.Run(os.Args)) +} + +// commandHasFlag returns true if the current command supports the given flag. +func commandHasFlag(ctx *cli.Context, flag cli.Flag) bool { + flags := ctx.FlagNames() + sort.Strings(flags) + i := sort.SearchStrings(flags, flag.GetName()) + return i != len(flags) && flags[i] == flag.GetName() +} + +// getNodeArg handles the common case of a single node descriptor argument. +func getNodeArg(ctx *cli.Context) *enode.Node { + if ctx.NArg() != 1 { + exit("missing node as command-line argument") + } + n, err := parseNode(ctx.Args()[0]) + if err != nil { + exit(err) + } + return n +} + +func exit(err interface{}) { + if err == nil { + os.Exit(0) + } + fmt.Fprintln(os.Stderr, err) + os.Exit(1) +} diff --git a/cmd/devp2p/nodeset.go b/cmd/devp2p/nodeset.go new file mode 100644 index 000000000000..a4a05016e92e --- /dev/null +++ b/cmd/devp2p/nodeset.go @@ -0,0 +1,87 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "sort" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +const jsonIndent = " " + +// nodeSet is the nodes.json file format. It holds a set of node records +// as a JSON object. +type nodeSet map[enode.ID]nodeJSON + +type nodeJSON struct { + Seq uint64 `json:"seq"` + N *enode.Node `json:"record"` +} + +func loadNodesJSON(file string) nodeSet { + var nodes nodeSet + if err := common.LoadJSON(file, &nodes); err != nil { + exit(err) + } + return nodes +} + +func writeNodesJSON(file string, nodes nodeSet) { + nodesJSON, err := json.MarshalIndent(nodes, "", jsonIndent) + if err != nil { + exit(err) + } + if err := ioutil.WriteFile(file, nodesJSON, 0644); err != nil { + exit(err) + } +} + +func (ns nodeSet) nodes() []*enode.Node { + result := make([]*enode.Node, 0, len(ns)) + for _, n := range ns { + result = append(result, n.N) + } + // Sort by ID. + sort.Slice(result, func(i, j int) bool { + return bytes.Compare(result[i].ID().Bytes(), result[j].ID().Bytes()) < 0 + }) + return result +} + +func (ns nodeSet) add(nodes ...*enode.Node) { + for _, n := range nodes { + ns[n.ID()] = nodeJSON{Seq: n.Seq(), N: n} + } +} + +func (ns nodeSet) verify() error { + for id, n := range ns { + if n.N.ID() != id { + return fmt.Errorf("invalid node %v: ID does not match ID %v in record", id, n.N.ID()) + } + if n.N.Seq() != n.Seq { + return fmt.Errorf("invalid node %v: 'seq' does not match seq %d from record", id, n.N.Seq()) + } + } + return nil +} diff --git a/cmd/ethkey/README.md b/cmd/ethkey/README.md index 48d3c9e9b775..bfddd146775c 100644 --- a/cmd/ethkey/README.md +++ b/cmd/ethkey/README.md @@ -35,18 +35,18 @@ It is possible to refer to a file containing the message. To sign a message contained in a file, use the --msgfile flag. -### `ethkey changepassphrase ` +### `ethkey changepassword ` -Change the passphrase of a keyfile. +Change the password of a keyfile. use the `--newpasswordfile` to point to the new password file. -## Passphrases +## Passwords For every command that uses a keyfile, you will be prompted to provide the -passphrase for decrypting the keyfile. To avoid this message, it is possible -to pass the passphrase by using the `--passwordfile` flag pointing to a file that -contains the passphrase. +password for decrypting the keyfile. To avoid this message, it is possible +to pass the password by using the `--passwordfile` flag pointing to a file that +contains the password. ## JSON diff --git a/cmd/ethkey/changepassphrase.go b/cmd/ethkey/changepassword.go similarity index 59% rename from cmd/ethkey/changepassphrase.go rename to cmd/ethkey/changepassword.go index d1ae2ae0d89b..5689c26618fd 100644 --- a/cmd/ethkey/changepassphrase.go +++ b/cmd/ethkey/changepassword.go @@ -1,3 +1,19 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + package main import ( @@ -12,15 +28,15 @@ import ( var newPassphraseFlag = cli.StringFlag{ Name: "newpasswordfile", - Usage: "the file that contains the new passphrase for the keyfile", + Usage: "the file that contains the new password for the keyfile", } var commandChangePassphrase = cli.Command{ - Name: "changepassphrase", - Usage: "change the passphrase on a keyfile", + Name: "changepassword", + Usage: "change the password on a keyfile", ArgsUsage: "", Description: ` -Change the passphrase of a keyfile.`, +Change the password of a keyfile.`, Flags: []cli.Flag{ passphraseFlag, newPassphraseFlag, @@ -42,12 +58,12 @@ Change the passphrase of a keyfile.`, } // Get a new passphrase. - fmt.Println("Please provide a new passphrase") + fmt.Println("Please provide a new password") var newPhrase string if passFile := ctx.String(newPassphraseFlag.Name); passFile != "" { content, err := ioutil.ReadFile(passFile) if err != nil { - utils.Fatalf("Failed to read new passphrase file '%s': %v", passFile, err) + utils.Fatalf("Failed to read new password file '%s': %v", passFile, err) } newPhrase = strings.TrimRight(string(content), "\r\n") } else { @@ -57,7 +73,7 @@ Change the passphrase of a keyfile.`, // Encrypt the key with the new passphrase. newJson, err := keystore.EncryptKey(key, newPhrase, keystore.StandardScryptN, keystore.StandardScryptP) if err != nil { - utils.Fatalf("Error encrypting with new passphrase: %v", err) + utils.Fatalf("Error encrypting with new password: %v", err) } // Then write the new keyfile in place of the old one. diff --git a/cmd/ethkey/main.go b/cmd/ethkey/main.go index c434da0c05e2..5b545d5f946b 100644 --- a/cmd/ethkey/main.go +++ b/cmd/ethkey/main.go @@ -30,11 +30,12 @@ const ( // Git SHA1 commit hash of the release (set via linker flags) var gitCommit = "" +var gitDate = "" var app *cli.App func init() { - app = utils.NewApp(gitCommit, "an Ethereum key manager") + app = utils.NewApp(gitCommit, gitDate, "an Ethereum key manager") app.Commands = []cli.Command{ commandGenerate, commandInspect, @@ -48,7 +49,7 @@ func init() { var ( passphraseFlag = cli.StringFlag{ Name: "passwordfile", - Usage: "the file that contains the passphrase for the keyfile", + Usage: "the file that contains the password for the keyfile", } jsonFlag = cli.BoolFlag{ Name: "json", diff --git a/cmd/ethkey/message_test.go b/cmd/ethkey/message_test.go index 39352b1d22dd..e9e8eeeafb88 100644 --- a/cmd/ethkey/message_test.go +++ b/cmd/ethkey/message_test.go @@ -37,8 +37,8 @@ func TestMessageSignVerify(t *testing.T) { generate := runEthkey(t, "generate", keyfile) generate.Expect(` !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} -Repeat passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} +Repeat password: {{.InputLine "foobar"}} `) _, matches := generate.ExpectRegexp(`Address: (0x[0-9a-fA-F]{40})\n`) address := matches[1] @@ -48,7 +48,7 @@ Repeat passphrase: {{.InputLine "foobar"}} sign := runEthkey(t, "signmessage", keyfile, message) sign.Expect(` !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} `) _, matches = sign.ExpectRegexp(`Signature: ([0-9a-f]+)\n`) signature := matches[1] diff --git a/cmd/ethkey/utils.go b/cmd/ethkey/utils.go index 6f60ebaf1beb..c6cf5c25a3ba 100644 --- a/cmd/ethkey/utils.go +++ b/cmd/ethkey/utils.go @@ -31,18 +31,18 @@ import ( // promptPassphrase prompts the user for a passphrase. Set confirmation to true // to require the user to confirm the passphrase. func promptPassphrase(confirmation bool) string { - passphrase, err := console.Stdin.PromptPassword("Passphrase: ") + passphrase, err := console.Stdin.PromptPassword("Password: ") if err != nil { - utils.Fatalf("Failed to read passphrase: %v", err) + utils.Fatalf("Failed to read password: %v", err) } if confirmation { - confirm, err := console.Stdin.PromptPassword("Repeat passphrase: ") + confirm, err := console.Stdin.PromptPassword("Repeat password: ") if err != nil { - utils.Fatalf("Failed to read passphrase confirmation: %v", err) + utils.Fatalf("Failed to read password confirmation: %v", err) } if passphrase != confirm { - utils.Fatalf("Passphrases do not match") + utils.Fatalf("Passwords do not match") } } @@ -58,7 +58,7 @@ func getPassphrase(ctx *cli.Context) string { if passphraseFile != "" { content, err := ioutil.ReadFile(passphraseFile) if err != nil { - utils.Fatalf("Failed to read passphrase file '%s': %v", + utils.Fatalf("Failed to read password file '%s': %v", passphraseFile, err) } return strings.TrimRight(string(content), "\r\n") diff --git a/cmd/evm/internal/compiler/compiler.go b/cmd/evm/internal/compiler/compiler.go index 753ca62264ef..54981b669768 100644 --- a/cmd/evm/internal/compiler/compiler.go +++ b/cmd/evm/internal/compiler/compiler.go @@ -25,7 +25,7 @@ import ( func Compile(fn string, src []byte, debug bool) (string, error) { compiler := asm.NewCompiler(debug) - compiler.Feed(asm.Lex(fn, src, debug)) + compiler.Feed(asm.Lex(src, debug)) bin, compileErrors := compiler.Compile() if len(compileErrors) > 0 { diff --git a/cmd/evm/main.go b/cmd/evm/main.go index a59cb1fb8430..a5159c6b7ee4 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -27,9 +27,10 @@ import ( ) var gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags) +var gitDate = "" var ( - app = utils.NewApp(gitCommit, "the evm command line interface") + app = utils.NewApp(gitCommit, gitDate, "the evm command line interface") DebugFlag = cli.BoolFlag{ Name: "debug", @@ -110,6 +111,11 @@ var ( Name: "nostack", Usage: "disable stack output", } + EVMInterpreterFlag = cli.StringFlag{ + Name: "vm.evm", + Usage: "External EVM configuration (default = built-in interpreter)", + Value: "", + } ) func init() { @@ -133,6 +139,7 @@ func init() { ReceiverFlag, DisableMemoryFlag, DisableStackFlag, + EVMInterpreterFlag, } app.Commands = []cli.Command{ compileCommand, diff --git a/cmd/evm/runner.go b/cmd/evm/runner.go index 54b67ce1019f..3e8ecf6c3c5c 100644 --- a/cmd/evm/runner.go +++ b/cmd/evm/runner.go @@ -17,7 +17,6 @@ package main import ( - "bytes" "encoding/json" "fmt" "io/ioutil" @@ -31,10 +30,10 @@ import ( "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/core/vm/runtime" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" cli "gopkg.in/urfave/cli.v1" @@ -99,12 +98,12 @@ func runCmd(ctx *cli.Context) error { if ctx.GlobalString(GenesisFlag.Name) != "" { gen := readGenesis(ctx.GlobalString(GenesisFlag.Name)) genesisConfig = gen - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := gen.ToBlock(db) statedb, _ = state.New(genesis.Root(), state.NewDatabase(db)) chainConfig = gen.Config } else { - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) genesisConfig = new(core.Genesis) } if ctx.GlobalString(SenderFlag.Name) != "" { @@ -121,28 +120,36 @@ func runCmd(ctx *cli.Context) error { ret []byte err error ) + codeFileFlag := ctx.GlobalString(CodeFileFlag.Name) + codeFlag := ctx.GlobalString(CodeFlag.Name) + // The '--code' or '--codefile' flag overrides code in state - if ctx.GlobalString(CodeFileFlag.Name) != "" { + if codeFileFlag != "" || codeFlag != "" { var hexcode []byte - var err error - // If - is specified, it means that code comes from stdin - if ctx.GlobalString(CodeFileFlag.Name) == "-" { - //Try reading from stdin - if hexcode, err = ioutil.ReadAll(os.Stdin); err != nil { - fmt.Printf("Could not load code from stdin: %v\n", err) - os.Exit(1) + if codeFileFlag != "" { + var err error + // If - is specified, it means that code comes from stdin + if codeFileFlag == "-" { + //Try reading from stdin + if hexcode, err = ioutil.ReadAll(os.Stdin); err != nil { + fmt.Printf("Could not load code from stdin: %v\n", err) + os.Exit(1) + } + } else { + // Codefile with hex assembly + if hexcode, err = ioutil.ReadFile(codeFileFlag); err != nil { + fmt.Printf("Could not load code from file: %v\n", err) + os.Exit(1) + } } } else { - // Codefile with hex assembly - if hexcode, err = ioutil.ReadFile(ctx.GlobalString(CodeFileFlag.Name)); err != nil { - fmt.Printf("Could not load code from file: %v\n", err) - os.Exit(1) - } + hexcode = []byte(codeFlag) } - code = common.Hex2Bytes(string(bytes.TrimRight(hexcode, "\n"))) - - } else if ctx.GlobalString(CodeFlag.Name) != "" { - code = common.Hex2Bytes(ctx.GlobalString(CodeFlag.Name)) + if len(hexcode)%2 != 0 { + fmt.Printf("Invalid input length for hex data (%d)\n", len(hexcode)) + os.Exit(1) + } + code = common.FromHex(string(hexcode)) } else if fn := ctx.Args().First(); len(fn) > 0 { // EASM-file to compile src, err := ioutil.ReadFile(fn) @@ -155,7 +162,6 @@ func runCmd(ctx *cli.Context) error { } code = common.Hex2Bytes(bin) } - initialGas := ctx.GlobalUint64(GasFlag.Name) if genesisConfig.GasLimit != 0 { initialGas = genesisConfig.GasLimit @@ -171,8 +177,9 @@ func runCmd(ctx *cli.Context) error { Coinbase: genesisConfig.Coinbase, BlockNumber: new(big.Int).SetUint64(genesisConfig.Number), EVMConfig: vm.Config{ - Tracer: tracer, - Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + Tracer: tracer, + Debug: ctx.GlobalBool(DebugFlag.Name) || ctx.GlobalBool(MachineFlag.Name), + EVMInterpreter: ctx.GlobalString(EVMInterpreterFlag.Name), }, } @@ -191,6 +198,8 @@ func runCmd(ctx *cli.Context) error { if chainConfig != nil { runtimeConfig.ChainConfig = chainConfig + } else { + runtimeConfig.ChainConfig = params.AllEthashProtocolChanges } tstart := time.Now() var leftOverGas uint64 @@ -208,7 +217,7 @@ func runCmd(ctx *cli.Context) error { if ctx.GlobalBool(DumpFlag.Name) { statedb.Commit(true) statedb.IntermediateRoot(true) - fmt.Println(string(statedb.Dump())) + fmt.Println(string(statedb.Dump(false, false, true))) } if memProfilePath := ctx.GlobalString(MemProfileFlag.Name); memProfilePath != "" { diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go index b3c69d9b9dbb..cef2aedb5e68 100644 --- a/cmd/evm/staterunner.go +++ b/cmd/evm/staterunner.go @@ -105,7 +105,7 @@ func stateTestCmd(ctx *cli.Context) error { // Test failed, mark as so and dump any state to aid debugging result.Pass, result.Error = false, err.Error() if ctx.GlobalBool(DumpFlag.Name) && state != nil { - dump := state.RawDump() + dump := state.RawDump(false, false, true) result.State = &dump } } diff --git a/cmd/faucet/faucet.go b/cmd/faucet/faucet.go index 03a8ae36365a..ed4639ee3ba1 100644 --- a/cmd/faucet/faucet.go +++ b/cmd/faucet/faucet.go @@ -88,6 +88,11 @@ var ( ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil) ) +var ( + gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags) + gitDate = "" // Git commit date YYYYMMDD of the release (set via linker flags) +) + func main() { // Parse the flags and set up the logger to print everything requested flag.Parse() @@ -216,7 +221,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u // Assemble the raw devp2p protocol stack stack, err := node.New(&node.Config{ Name: "geth", - Version: params.VersionWithMeta, + Version: params.VersionWithCommit(gitCommit, gitDate), DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"), P2P: p2p.Config{ NAT: nat.Any(), @@ -255,7 +260,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u return nil, err } for _, boot := range enodes { - old, err := enode.ParseV4(boot.String()) + old, err := enode.Parse(enode.ValidSchemes, boot.String()) if err == nil { stack.Server().AddPeer(old) } @@ -282,7 +287,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u // close terminates the Ethereum connection and tears down the faucet. func (f *faucet) close() error { - return f.stack.Stop() + return f.stack.Close() } // listenAndServe registers the HTTP handlers for the faucet and boots it up @@ -440,10 +445,14 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { return } continue + case strings.HasPrefix(msg.URL, "https://plus.google.com/"): + if err = sendError(conn, errors.New("Google+ authentication discontinued as the service was sunset")); err != nil { + log.Warn("Failed to send Google+ deprecation to client", "err", err) + return + } + continue case strings.HasPrefix(msg.URL, "https://twitter.com/"): username, avatar, address, err = authTwitter(msg.URL) - case strings.HasPrefix(msg.URL, "https://plus.google.com/"): - username, avatar, address, err = authGooglePlus(msg.URL) case strings.HasPrefix(msg.URL, "https://www.facebook.com/"): username, avatar, address, err = authFacebook(msg.URL) case *noauthFlag: @@ -497,7 +506,10 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { Time: time.Now(), Tx: signed, }) - f.timeouts[username] = time.Now().Add(time.Duration(*minutesFlag*int(math.Pow(3, float64(msg.Tier)))) * time.Minute) + timeout := time.Duration(*minutesFlag*int(math.Pow(3, float64(msg.Tier)))) * time.Minute + grace := timeout / 288 // 24h timeout => 5m grace + + f.timeouts[username] = time.Now().Add(timeout - grace) fund = true } f.lock.Unlock() @@ -579,7 +591,7 @@ func (f *faucet) loop() { go func() { for head := range update { // New chain head arrived, query the current stats and stream to clients - timestamp := time.Unix(head.Time.Int64(), 0) + timestamp := time.Unix(int64(head.Time), 0) if time.Since(timestamp) > time.Hour { log.Warn("Skipping faucet refresh, head too old", "number", head.Number, "hash", head.Hash(), "age", common.PrettyAge(timestamp)) continue @@ -699,40 +711,6 @@ func authTwitter(url string) (string, string, common.Address, error) { return username + "@twitter", avatar, address, nil } -// authGooglePlus tries to authenticate a faucet request using GooglePlus posts, -// returning the username, avatar URL and Ethereum address to fund on success. -func authGooglePlus(url string) (string, string, common.Address, error) { - // Ensure the user specified a meaningful URL, no fancy nonsense - parts := strings.Split(url, "/") - if len(parts) < 4 || parts[len(parts)-2] != "posts" { - return "", "", common.Address{}, errors.New("Invalid Google+ post URL") - } - username := parts[len(parts)-3] - - // Google's API isn't really friendly with direct links. Still, we don't - // want to do ask read permissions from users, so just load the public posts and - // scrape it for the Ethereum address and profile URL. - res, err := http.Get(url) - if err != nil { - return "", "", common.Address{}, err - } - defer res.Body.Close() - - body, err := ioutil.ReadAll(res.Body) - if err != nil { - return "", "", common.Address{}, err - } - address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) - if address == (common.Address{}) { - return "", "", common.Address{}, errors.New("No Ethereum address found to fund") - } - var avatar string - if parts = regexp.MustCompile("src=\"([^\"]+googleusercontent.com[^\"]+photo.jpg)\"").FindStringSubmatch(string(body)); len(parts) == 2 { - avatar = parts[1] - } - return username + "@google+", avatar, address, nil -} - // authFacebook tries to authenticate a faucet request using Facebook posts, // returning the username, avatar URL and Ethereum address to fund on success. func authFacebook(url string) (string, string, common.Address, error) { diff --git a/cmd/faucet/faucet.html b/cmd/faucet/faucet.html index ab41b2c87178..314b19e1232d 100644 --- a/cmd/faucet/faucet.html +++ b/cmd/faucet/faucet.html @@ -80,14 +80,11 @@

{{

How does this work?

-

This Ether faucet is running on the {{.Network}} network. To prevent malicious actors from exhausting all available funds or accumulating enough Ether to mount long running spam attacks, requests are tied to common 3rd party social network accounts. Anyone having a Twitter, Google+ or Facebook account may request funds within the permitted limits.

+

This Ether faucet is running on the {{.Network}} network. To prevent malicious actors from exhausting all available funds or accumulating enough Ether to mount long running spam attacks, requests are tied to common 3rd party social network accounts. Anyone having a Twitter or Facebook account may request funds within the permitted limits.

To request funds via Twitter, make a tweet with your Ethereum address pasted into the contents (surrounding text doesn't matter).
Copy-paste the tweets URL into the above input box and fire away!
-
-
To request funds via Google Plus, publish a new public post with your Ethereum address embedded into the content (surrounding text doesn't matter).
Copy-paste the posts URL into the above input box and fire away!
-
To request funds via Facebook, publish a new public post with your Ethereum address embedded into the content (surrounding text doesn't matter).
Copy-paste the posts URL into the above input box and fire away!
diff --git a/cmd/faucet/website.go b/cmd/faucet/website.go index fab1d43460bf..a091d249196e 100644 --- a/cmd/faucet/website.go +++ b/cmd/faucet/website.go @@ -1,12 +1,13 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// faucet.html +// faucet.html (11.27kB) package main import ( "bytes" "compress/gzip" + "crypto/sha256" "fmt" "io" "io/ioutil" @@ -19,7 +20,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %v", name, err) } var buf bytes.Buffer @@ -27,7 +28,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %v", name, err) } if clErr != nil { return nil, err @@ -37,8 +38,9 @@ func bindataRead(data []byte, name string) ([]byte, error) { } type asset struct { - bytes []byte - info os.FileInfo + bytes []byte + info os.FileInfo + digest [sha256.Size]byte } type bindataFileInfo struct { @@ -67,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x71\x73\xdb\xb6\x92\xff\xdb\xf9\x14\x5b\x5e\xfc\x24\x9d\x4d\x52\xb6\x93\x3c\x9f\x44\xaa\x93\x97\xd7\xd7\xcb\xcd\x5d\xdb\x69\xd3\xb9\x7b\xd3\xd7\xb9\x01\x89\x95\x88\x18\x04\x58\x00\x94\xac\x7a\xf4\xdd\x6f\x00\x90\x14\x29\xc9\x6e\xd2\xe4\xde\x34\x7f\x38\x24\xb0\xd8\x5d\xec\xfe\x16\xbb\x58\x2a\xf9\xe2\xaf\xdf\xbe\x79\xf7\xf7\xef\xbe\x82\xc2\x94\x7c\xf1\x2c\xb1\xff\x01\x27\x62\x95\x06\x28\x82\xc5\xb3\xb3\xa4\x40\x42\x17\xcf\xce\xce\x92\x12\x0d\x81\xbc\x20\x4a\xa3\x49\x83\xda\x2c\xc3\xdb\x60\x3f\x51\x18\x53\x85\xf8\x4b\xcd\xd6\x69\xf0\x3f\xe1\x8f\xaf\xc3\x37\xb2\xac\x88\x61\x19\xc7\x00\x72\x29\x0c\x0a\x93\x06\x6f\xbf\x4a\x91\xae\xb0\xb7\x4e\x90\x12\xd3\x60\xcd\x70\x53\x49\x65\x7a\xa4\x1b\x46\x4d\x91\x52\x5c\xb3\x1c\x43\xf7\x72\x09\x4c\x30\xc3\x08\x0f\x75\x4e\x38\xa6\x57\xc1\xe2\x99\xe5\x63\x98\xe1\xb8\x78\x78\x88\xbe\x41\xb3\x91\xea\x6e\xb7\x9b\xc1\xeb\xda\x14\x28\x0c\xcb\x89\x41\x0a\x7f\x23\x75\x8e\x26\x89\x3d\xa5\x5b\xc4\x99\xb8\x83\x42\xe1\x32\x0d\xac\xea\x7a\x16\xc7\x39\x15\xef\x75\x94\x73\x59\xd3\x25\x27\x0a\xa3\x5c\x96\x31\x79\x4f\xee\x63\xce\x32\x1d\x9b\x0d\x33\x06\x55\x98\x49\x69\xb4\x51\xa4\x8a\x6f\xa2\x9b\xe8\xcf\x71\xae\x75\xdc\x8d\x45\x25\x13\x51\xae\x75\x00\x0a\x79\x1a\x68\xb3\xe5\xa8\x0b\x44\x13\x40\xbc\xf8\x7d\x72\x97\x52\x98\x90\x6c\x50\xcb\x12\xe3\x17\xd1\x9f\xa3\xa9\x13\xd9\x1f\x7e\x5a\xaa\x15\xab\x73\xc5\x2a\x03\x5a\xe5\x1f\x2c\xf7\xfd\x2f\x35\xaa\x6d\x7c\x13\x5d\x45\x57\xcd\x8b\x93\xf3\x5e\x07\x8b\x24\xf6\x0c\x17\x9f\xc4\x3b\x14\xd2\x6c\xe3\xeb\xe8\x45\x74\x15\x57\x24\xbf\x23\x2b\xa4\xad\x24\x3b\x15\xb5\x83\x9f\x4d\xee\x63\x3e\x7c\x7f\xe8\xc2\xcf\x21\xac\x94\x25\x0a\x13\xbd\xd7\xf1\x75\x74\x75\x1b\x4d\xdb\x81\x63\xfe\x4e\x80\x75\x9a\x15\x75\x16\xad\x51\x59\xe4\xf2\x30\x47\x61\x50\xc1\x83\x1d\x3d\x2b\x99\x08\x0b\x64\xab\xc2\xcc\xe0\x6a\x3a\x3d\x9f\x9f\x1a\x5d\x17\x7e\x98\x32\x5d\x71\xb2\x9d\xc1\x92\xe3\xbd\x1f\x22\x9c\xad\x44\xc8\x0c\x96\x7a\x06\x9e\xb3\x9b\xd8\x39\x99\x95\x92\x2b\x85\x5a\x37\xc2\x2a\xa9\x99\x61\x52\xcc\x2c\xa2\x88\x61\x6b\x3c\x45\xab\x2b\x22\x8e\x16\x90\x4c\x4b\x5e\x1b\x3c\x50\x24\xe3\x32\xbf\xf3\x63\x2e\x9a\xfb\x9b\xc8\x25\x97\x6a\x06\x9b\x82\x35\xcb\xc0\x09\x82\x4a\x61\xc3\x1e\x2a\x42\x29\x13\xab\x19\xbc\xaa\x9a\xfd\x40\x49\xd4\x8a\x89\x19\x4c\xf7\x4b\x92\xb8\x35\x63\x12\xfb\x83\xeb\xd9\x59\x92\x49\xba\x75\x3e\xa4\x6c\x0d\x39\x27\x5a\xa7\xc1\x81\x89\xdd\x81\x34\x20\xb0\xe7\x10\x61\xa2\x9d\x1a\xcc\x29\xb9\x09\xc0\x09\x4a\x03\xaf\x44\x98\x49\x63\x64\x39\x83\x2b\xab\x5e\xb3\xe4\x80\x1f\x0f\xf9\x2a\xbc\xba\x6e\x27\xcf\x92\xe2\xaa\x65\x62\xf0\xde\x84\xce\x3f\x9d\x67\x82\x45\xc2\xda\xb5\x4b\x02\x4b\x12\x66\xc4\x14\x01\x10\xc5\x48\x58\x30\x4a\x51\xa4\x81\x51\x35\x5a\x1c\xb1\x05\xf4\x8f\xbf\x47\x4e\xbf\xe2\xaa\xd5\x2b\xa6\x6c\xdd\x6c\xab\xf7\x78\xb0\xc3\xc7\x37\x71\x0b\xcd\x83\x5c\x2e\x35\x9a\xb0\xb7\xa7\x1e\x31\x13\x55\x6d\xc2\x95\x92\x75\xd5\xcd\x9f\x25\x6e\x14\x18\x4d\x83\x5a\xf1\xa0\x39\xfe\xdd\xa3\xd9\x56\x8d\x29\x82\x6e\xe3\x52\x95\xa1\xf5\x84\x92\x3c\x80\x8a\x93\x1c\x0b\xc9\x29\xaa\x34\xf8\x41\xe6\x8c\x70\x10\x7e\xcf\xf0\xe3\xf7\xff\x09\x8d\xcb\x98\x58\xc1\x56\xd6\x0a\xbe\x32\x05\x2a\xac\x4b\x20\x94\x5a\xb8\x46\x51\xd4\x53\xc4\x61\xf7\x58\xd5\x30\x33\x62\x4f\x75\x96\x64\xb5\x31\xb2\x23\xcc\x8c\x80\xcc\x88\x90\xe2\x92\xd4\xdc\x00\x55\xb2\xa2\x72\x23\x42\x23\x57\x2b\x9b\xe9\xfc\x26\xfc\xa2\x00\x28\x31\xa4\x99\x4a\x83\x96\xb6\xf5\x21\xd1\x95\xac\xea\xaa\xf1\xa2\x1f\xc4\xfb\x8a\x08\x8a\xd4\xfa\x9c\x6b\x0c\x16\x5f\xb3\x35\x42\x89\x7e\x2f\x67\x87\x90\xc8\x89\x42\x13\xf6\x99\x1e\x01\x23\x89\xbd\x32\x7e\x4b\xd0\xfc\x4b\x6a\xde\x72\xea\xb6\x50\xa2\xa8\x61\xf0\x16\x2a\x7b\xae\x04\x8b\x87\x07\x45\xc4\x0a\xe1\x39\xa3\xf7\x97\xf0\x9c\x94\xb2\x16\x06\x66\x29\x44\xaf\xdd\xa3\xde\xed\x06\xdc\x01\x12\xce\x16\x09\x79\x0a\xde\x20\x45\xce\x59\x7e\x97\x06\x86\xa1\x4a\x1f\x1e\x2c\xf3\xdd\x6e\x0e\x0f\x0f\x6c\x09\xcf\xa3\xef\x31\x27\x95\xc9\x0b\xb2\xdb\xad\x54\xfb\x1c\xe1\x3d\xe6\xb5\xc1\xf1\xe4\xe1\x01\xb9\xc6\xdd\x4e\xd7\x59\xc9\xcc\xb8\x5d\x6e\xc7\x05\xdd\xed\xac\xce\x8d\x9e\xbb\x1d\xc4\x96\xa9\xa0\x78\x0f\xcf\xa3\xef\x50\x31\x49\x35\x78\xfa\x24\x26\x8b\x24\xe6\x6c\xd1\xac\x1b\x1a\x29\xae\xf9\x1e\x2f\xb1\x05\x4c\x87\x73\x17\x36\x4e\xd5\xbe\xa6\x27\xa2\x60\x15\x76\xda\x37\x78\xd0\xcc\xe0\x1d\x6e\xd3\xe0\xe1\xa1\xbf\xb6\x99\xcd\x09\xe7\x19\xb1\x76\xf1\x5b\xeb\x16\xfd\x8a\x16\xa7\x6b\xa6\x5d\x49\xb5\x68\x35\xd8\xab\xfd\x81\x61\x7d\x70\x70\x19\x59\xcd\xe0\xe6\xba\x77\x6a\x9d\x8a\xf8\x57\x07\x11\x7f\x73\x92\xb8\x22\x02\x39\xb8\xbf\xa1\x2e\x09\x6f\x9f\x9b\x68\xe9\x05\xdf\xe1\xa2\xd0\x9e\xd1\x9d\x6a\xdd\x59\x3f\x9d\x83\x5c\xa3\x5a\x72\xb9\x99\x01\xa9\x8d\x9c\x43\x49\xee\xbb\x7c\x77\x33\x9d\xf6\xf5\xb6\xa5\x20\xc9\x38\xba\xd3\x45\xe1\x2f\x35\x6a\xa3\xbb\xb3\xc4\x4f\xb9\xbf\xf6\x48\xa1\x28\x34\xd2\x03\x6b\x58\x89\xd6\xb4\x8e\xaa\xe7\xfa\xce\x98\x27\x75\x5f\x4a\xd9\xa5\x90\xbe\x1a\x0d\xeb\x5e\xb6\x0b\x16\x89\x51\x7b\xba\xb3\xc4\xd0\x8f\x4a\x01\xca\x96\x78\x8f\x65\x00\x7f\xa2\xd9\xbd\x57\x88\xca\xd7\x17\x16\xb2\xe0\x5e\x93\xd8\xd0\x4f\x90\x6c\x41\x98\x11\x8d\x1f\x22\xde\x65\xfa\xbd\x78\xf7\xfa\xa9\xf2\x0b\x24\xca\x64\x48\xcc\x87\x28\xb0\xac\x05\xed\xed\xdf\x9d\x9d\x9f\xaa\x40\x2d\xd8\x1a\x95\x66\x66\xfb\xa1\x1a\x20\xdd\xab\xe0\xdf\x87\x2a\x24\xb1\x51\x4f\x63\xad\xff\xf2\x99\x82\xfb\xb7\x4a\x92\x9b\xc5\xbf\xcb\x0d\x50\x89\x1a\x4c\xc1\x34\xd8\xe4\xfa\x65\x12\x17\x37\x1d\x49\xb5\x78\x67\x27\x9c\x51\x61\xe9\x4a\x0b\x60\x1a\x54\x2d\x5c\xe6\x95\x02\x4c\x81\xc3\x72\xa4\x49\xd2\x11\xbc\x93\xb6\xa4\x5b\xa3\x30\x50\x12\xce\x72\x26\x6b\x0d\x24\x37\x52\x69\x58\x2a\x59\x02\xde\x17\xa4\xd6\xc6\x32\xb2\xc7\x07\x59\x13\xc6\x5d\x2c\x39\x97\x82\x54\x40\xf2\xbc\x2e\x6b\x5b\x92\x8a\x15\xa0\x90\xf5\xaa\x68\x74\x31\x12\x7c\x62\xe2\x52\xac\x3a\x7d\x74\x45\x4a\x20\xc6\x90\xfc\x4e\x5f\x42\x7b\x2a\x00\x51\x08\x86\x21\xb5\xab\x72\x59\x96\x52\xc0\x8d\xa2\x50\x11\x65\xb6\xa0\x87\xb5\x05\xc9\x73\x97\xe5\x22\x78\x2d\xb6\x52\x20\x14\x64\xed\x34\x84\x77\xfe\x3a\x71\x09\x5f\x4b\xb9\xe2\x78\x61\x15\xfc\x1b\xc9\x31\x93\xb2\x5b\x06\x25\xd9\xb6\x72\x9b\x6d\x6c\x98\x29\x98\xb7\x53\x85\xaa\xb4\x3c\x28\x70\x56\x32\xa3\xa3\x24\xae\xf6\x47\xeb\x3e\x49\xf3\xb0\x90\x8a\xfd\x6a\x2b\x1c\xde\x3f\x47\xcd\xc1\x29\xd3\x1e\x92\xce\xfd\x1c\x97\x66\x06\x2f\xfc\x21\x79\x08\xe8\xe6\x2a\x74\x0a\xcd\x2d\x4f\x77\xc5\xb4\x99\x67\x06\x37\xbe\xae\xf5\x15\x05\x35\x3d\x0d\xe8\x01\xe6\xbc\xd0\xdb\xdb\xea\xbe\xd3\xa3\x2b\x8e\xa7\x1d\x13\x0b\x85\xa1\x51\xd6\xac\x67\xcf\x92\xdc\x21\x10\x48\xc8\xc1\x55\xb9\x51\xda\x5d\xb4\x98\x6b\x14\xc4\x66\x83\x68\xbe\xb4\x31\x9c\x7e\xef\x19\x32\xb1\x3a\xbf\x9e\x7a\x68\xda\x07\xcb\xfe\xfc\x7a\xca\x84\x91\xe7\xd7\xd3\xe9\xfd\xf4\x03\xff\x9d\x5f\x4f\xa5\x38\xbf\x9e\x9a\x02\xcf\xaf\xa7\xe7\xd7\x37\x7d\x50\xfb\x91\xb6\xc4\xb4\x54\xa8\xad\xb4\x16\xeb\x01\x18\xa2\x56\x68\xd2\xe0\x7f\x49\x26\x6b\x33\xcb\x38\x11\x77\xc1\xc2\xa9\x6b\xcb\x0e\x87\x82\xd3\x85\x2a\x54\x44\x5b\x48\x58\x8d\x1d\x4a\x9a\xa6\x88\x86\xb1\xae\x95\x92\xb5\xb0\xe9\x11\xec\x9e\x5d\xa8\x8a\x91\x45\x99\x35\xcc\x24\x4a\x32\x15\x2f\xde\xc8\x6a\x1b\x3a\x26\x6e\xf9\x91\x19\x75\x5d\x55\x52\x99\xa8\x6f\x4e\x62\x2f\x44\x1c\x75\x7c\x3b\x7d\x79\xfb\xea\x49\xf5\xb5\x2d\xb7\xdd\x1e\x3a\x0d\x49\x26\xd7\x08\xbe\xb8\xcf\xe4\x3d\x10\x41\x61\xc9\x14\x02\xd9\x90\xed\x17\x49\x4c\xdd\x55\xec\xd3\x51\xbb\x72\x81\x16\x56\xbc\xd6\xb6\x16\x61\x36\x50\xff\x50\x10\xf6\x27\x01\x7c\xc7\x6b\x7d\x09\x55\x9d\x71\xa6\x0b\x20\x20\x70\x03\x89\x36\x4a\x8a\xd5\xc2\x8d\xe6\xf6\xaa\xea\x5e\xa1\x92\xda\x3c\x85\x06\x2c\x33\xa4\xf4\x04\x1e\x7e\x27\x1c\xac\x3c\xe7\xc2\x7f\xbe\xfb\x96\xcd\xe1\xf8\x87\x72\x59\x7b\x62\xff\x51\xfd\x75\x14\xbe\x9b\xcd\x26\x6a\x2d\xe9\x62\xb7\x40\x5e\xc5\x36\x8d\xd5\x82\x99\x6d\xec\x4f\x41\x29\xe2\x2f\x19\x4d\xaf\x6f\xaf\x5f\xbd\xba\x7e\xf1\x6f\xb7\x2f\x5f\x5e\xdf\xbe\x78\xf9\x58\x60\x77\xa0\xf8\xfd\x71\xed\xaf\x43\xdf\xc8\xd7\xb5\x29\xba\xbb\x90\xc7\x4b\x5b\x83\xdb\x4a\x8b\xda\xbb\xa4\x0a\x7e\x37\x86\x6a\x61\x0b\xca\x90\xf0\x93\xb5\xe0\x47\xa0\xc8\xc1\xe8\x09\xcd\x3e\x11\x5a\x2d\x7c\x2c\x52\x64\x6d\xec\x0e\xdb\xa6\x0c\x93\xa2\x83\xd3\x25\x68\x56\x56\x7c\x0b\xf9\xde\xeb\xa7\x71\xf5\xa8\x53\x7e\x13\x56\x43\xb7\x79\x90\xb9\x2a\xae\x94\x14\x6d\xf5\xa6\x6b\x9d\x63\xe5\xba\xf5\xb6\x22\xfa\xcb\xf6\x57\x22\x0c\x13\xd8\x56\x4e\x11\x7c\x2b\xf8\x16\x6a\x8d\xb0\x94\x0a\x28\x66\xf5\x6a\xe5\xca\x3d\x05\x95\x62\x6b\x62\xb0\x2d\x97\x74\x83\x8a\x0e\x14\xbd\x1b\xaa\x2d\x5d\x79\xaf\x92\xfc\xbb\xac\x21\x27\x02\x8c\x22\xf9\x9d\x8f\x94\x5a\x29\x1b\x29\x15\xfa\xdd\x74\x05\x5b\x86\x5c\x6e\x1c\x89\xdf\xf7\x92\x21\x77\xd5\x9b\x46\x84\x42\x6e\xa0\xac\x73\x17\x90\xb6\x3a\x73\x9b\xd8\x10\x66\xa0\x16\x86\x71\x6f\x4f\x53\x2b\x61\x6b\x3d\x1c\x14\x59\x47\x77\xf8\x04\xcb\xc5\xbb\x02\x4f\x94\xb6\xdd\xed\x1b\x14\xbe\xf1\xe4\x50\x29\x69\x30\xb7\x0e\x05\xb2\x22\x4c\x68\xeb\x11\x57\xc6\x61\xf9\x01\xb7\xf3\xee\xa9\x79\xd8\x77\x9a\xdd\x74\x1c\xc3\xd7\x5c\x66\x84\xc3\xda\x22\x3d\xe3\xb6\x2c\x97\x50\x48\xbb\xf5\x9e\xb5\xb4\x21\xa6\xd6\x20\x97\x6e\xd4\x6b\x6e\xd7\xaf\x89\xb2\x1e\xc4\xb2\x32\x90\x36\x7d\x52\x3b\xa6\x51\xad\x9b\xee\xaf\x7d\x35\x0c\xd5\x60\xbe\xb3\x7a\x0a\x3f\xfd\x3c\x7f\xd6\xa8\xf2\x57\x5c\x3a\x48\x58\x7c\xfb\x2d\x9b\x82\x18\xc8\x15\x12\x83\x1a\x72\x2e\x75\xad\xbc\x86\x54\xc9\x0a\xac\x96\x2d\xa7\x96\xb3\x9d\xa8\x9c\xb4\x96\xc9\xb8\x20\xba\x98\x34\x6d\x5e\x85\xce\x4b\xdd\x5c\x3b\x7e\x66\x51\x37\xb6\x0c\x58\x3a\x9d\x03\x4b\x5a\xbe\x11\x47\xb1\x32\xc5\x1c\xd8\xc5\x45\x47\x7c\xc6\x96\x30\x6e\x29\x7e\x62\x3f\x47\xe6\x3e\xb2\x52\x20\x4d\xa1\x2f\xcd\x09\x6c\xf8\xe8\x8a\xb3\x1c\xc7\xec\x12\xae\x26\xf3\x76\x36\x53\x48\xee\xda\xb7\xc6\x8f\xfe\x3f\xf7\x77\x37\x1f\x5a\xc6\x19\x7f\x60\x1b\xdf\xc3\xd1\x40\x60\xc5\xb4\x81\x5a\x71\x68\x62\xd8\xbb\xa0\x73\x88\xa3\xeb\x5b\xe5\x08\x97\xcd\x43\x83\xa9\x76\x0b\x9e\x4d\xa4\x51\xd0\xf1\x7f\xfc\xf0\xed\x37\x91\x36\x8a\x89\x15\x5b\x6e\xc7\x0f\xb5\xe2\x33\x78\x3e\x0e\xfe\xa5\x56\x3c\x98\xfc\x34\xfd\x39\x5a\x13\x5e\xe3\xa5\xf3\xf7\xcc\xfd\x3d\x92\x72\x09\xcd\xe3\x0c\x86\x02\x77\x93\xc9\xfc\x74\xbf\xab\xd7\x9e\x53\xa8\xd1\x8c\x2d\x61\x07\xfc\x43\x1b\x11\x28\xd1\x14\xd2\x85\xae\xc2\x5c\x0a\x81\xb9\x81\xba\x92\xa2\x31\x09\x70\xa9\xf5\x1e\x88\x2d\x45\x7a\x0c\x8a\x86\x3e\x75\xc9\xfa\xbf\x31\xfb\x41\xe6\x77\x68\xc6\xe3\xf1\x86\x09\x2a\x37\x11\x97\xfe\xa8\x8d\x6c\x90\xca\x5c\x72\x48\xd3\x14\x9a\x2c\x1a\x4c\xe0\x4b\x08\x36\xda\xe6\xd3\x00\x66\xf6\xd1\x3e\x4d\xe0\x02\x0e\x97\x17\x36\xdf\x5f\x40\x10\x93\x8a\x05\x13\x1f\x0e\xad\xe1\xa5\x28\x51\x6b\xb2\xc2\xbe\x82\xee\x86\xdb\x81\xcc\xee\xa3\xd4\x2b\x48\xc1\x39\xa8\x22\x4a\xa3\x27\x89\x28\x31\xa4\x45\x9b\xc5\xac\x23\x4b\x53\x10\x35\xe7\x7b\x90\xfa\xa0\x98\xb7\xf0\x1b\x90\x47\x3e\xd7\x7c\x91\xa6\x50\x0b\xea\x4c\x4c\xf7\x2b\xad\xf3\x7d\x33\x64\x12\xd9\xbc\xb0\x5f\x31\x99\xf7\xd1\x3c\xe0\x86\xf4\xb7\xd8\x21\x3d\xe4\x87\xf4\x11\x86\xae\xf7\xf4\x14\x3f\xdf\xab\xea\xb1\x73\x03\x8f\x70\x13\x75\x99\xa1\x7a\x8a\x9d\xef\x3d\x35\xec\x9c\xa9\xdf\x0a\xd3\x5b\x7b\x09\x57\xaf\x26\x8f\x70\x47\xa5\xe4\xa3\xcc\x85\x34\xdb\xf1\x03\x27\x5b\x5b\x33\xc1\xc8\xc8\xea\x8d\x6b\x15\x8d\x2e\x5d\xc6\x9d\x41\xc7\xe1\xd2\x7d\x04\x98\xc1\xc8\xbd\xd9\x79\x56\xa2\x5b\xf5\x72\x3a\x9d\x5e\x42\xfb\xf5\xec\x2f\xc4\x06\xa1\xaa\x71\xf7\x88\x3e\xba\xce\x73\x9b\xf7\x3f\x45\xa3\x86\x47\xa7\x53\xf3\xfe\x09\x5a\x75\xb9\x61\xa0\x16\xfc\xe9\x4f\x70\x34\x3b\x84\x71\x1c\xc3\x7f\x11\x75\xe7\x1a\x3b\x95\xc2\xb5\x6b\xfe\x74\xf4\x25\xd3\xda\x35\x55\x34\x50\x29\xb0\x59\xf3\x71\xc7\xfe\x91\x8e\x0d\x19\x2c\x60\x7a\xa8\xa0\x3d\x0e\x7b\x69\xe1\x44\xb6\xe8\xf1\x1d\x26\x82\xb3\x5d\x5f\xde\x60\x25\x2b\x11\xbe\x48\x21\x08\xfa\x8b\x8f\x28\x2c\x41\xc7\xec\x4c\xa3\x79\xe7\x7d\x31\x6e\xb2\xe3\xa9\xdc\x35\xb9\x84\x9b\xe9\x74\x3a\x39\x52\x62\xb7\x37\xef\xeb\xca\x96\x4d\x40\xc4\xd6\x1d\x89\x9d\x6d\x5d\xe1\x68\x4b\x20\x7b\xa4\x71\xc8\x25\xe7\xbe\x66\x69\x96\x5a\x03\x37\x4d\xb0\x14\xc2\xab\xf9\x89\x2c\xda\xb3\x64\x6f\x6b\x87\xee\x39\x61\xfb\x43\x17\x0d\x6d\x76\x40\x1c\x5e\x0d\x9c\x32\xf0\xd7\x69\xc7\x9c\x75\x7a\xb3\xbd\x45\x0f\xdc\xb5\xf7\xd7\xa1\xcd\x7a\xfa\x7b\x3e\x17\x57\x1f\xb8\x8d\x6e\xba\xaa\x75\x31\x3e\x50\x74\x32\x3f\xf6\xcd\x5b\x83\xca\x56\xc9\xd2\xa6\x2c\xeb\x0b\x7b\x15\x50\x78\xe4\x12\x57\xaa\x2b\x0c\x15\x0a\x8a\xaa\x2d\x29\x7c\x65\x6f\x0b\xc0\x81\xcb\xfc\xad\xb2\x0f\xa7\x8f\x0c\x18\x57\x92\x49\x81\x00\x00\x07\x41\xe0\x80\x3a\x40\xaa\x25\x46\x4e\x2a\x8d\x14\x52\xf0\x3f\x66\x18\x4f\xa2\x5a\xb0\xfb\xf1\x24\x6c\xde\x0f\x79\xb4\xf3\xf3\xee\x9a\xd8\xaa\x7d\x91\x42\x90\x18\x05\x8c\xa6\xa3\x00\x2e\x4e\x85\xa0\xcd\xba\xa3\xc5\x5e\x83\xfe\x52\x80\xc4\xd0\x85\xeb\x67\xfb\xfb\xda\x3f\x82\x8c\xe4\x77\x2b\x77\x11\x9a\xd9\x52\x6b\x7c\xc4\x96\xac\x89\x21\xca\x71\x9d\xcc\x61\x4f\xde\x5c\x14\x73\xeb\x9c\x39\xf8\x1b\xa9\x6b\x9b\x43\xf7\xa9\xc9\xbd\x65\x52\x51\x54\xa1\x22\x94\xd5\x7a\x06\x2f\xaa\xfb\xf9\x3f\xda\x4f\x71\xae\xb9\xff\xa4\xaa\x95\xc2\xc5\x91\x46\x4d\x93\xf8\x02\x82\x24\xb6\x04\xbf\xc5\xa6\xdb\x6c\xff\x47\x14\x70\xe2\x13\x06\x74\x3f\x71\x68\xc6\x4b\x46\x29\x47\xab\xf0\x9e\xbd\x0d\x46\xeb\xff\x7e\x48\x0d\x45\x42\xf3\xed\x62\xbf\x66\x07\xc8\x35\x3e\xb1\xa0\xfb\x0c\x32\xb2\x00\x08\xed\x96\x99\xb3\x79\x73\xd9\x76\xc3\x6a\xe4\x6c\xd1\xfc\x24\x86\xd6\xca\xd5\x5a\xe3\xb0\x01\xd8\x25\x8c\xb4\xad\xfd\xa8\x1e\x4d\xa2\xa2\x2e\x89\x60\xbf\xe2\xd8\xe6\xa5\x89\xb7\x95\xfb\xae\x12\x1c\x1f\xc9\x47\xca\xec\x3f\x78\x8c\xda\x1c\x37\x6a\x8c\x38\x6a\xbd\xfb\x62\x7f\xb7\x9f\xc1\x74\x3e\xfa\x48\x0b\x9d\x96\x12\x66\x44\x41\xff\x25\x6c\x93\x2f\x28\x69\xa5\xb7\x73\x19\x51\x23\xdf\xc9\x70\xf5\xb9\x90\x9b\x74\x74\x33\xed\x94\xf4\x8e\x76\x7e\x1e\x35\x58\x3b\x72\x86\xd5\xb2\x0d\xcd\x05\xdc\x4c\x3f\x87\xb6\xbe\x1b\x72\xb0\x03\xa3\x58\x85\x14\x48\x6e\xd8\x1a\xff\x1f\x36\xf2\x19\x8c\xfc\xd1\x2a\x5a\x1c\xb6\xc6\x73\x30\x1d\xe8\x6b\x67\x3b\xdb\xfe\xab\x8d\x37\x88\x9d\x85\x2f\x20\x38\xb9\x91\x47\x91\x78\x40\x78\x10\xda\x8f\xc7\xbd\xfb\x50\x18\x1c\xe6\x14\x5b\xed\x76\x1f\xb9\x27\x51\x61\x4a\x3e\x0e\x12\xe3\x7e\xec\x64\x75\xee\x38\x38\x06\x7e\x78\x58\xd2\xed\x86\x17\x19\x7b\x7f\xc7\x83\x7b\x16\xf4\x8a\x93\xee\x2e\xd6\x56\x22\xb0\xdb\xff\x26\x2c\x8e\xe1\x07\x43\x94\x01\x02\x3f\xbe\x85\xba\xa2\xc4\xf8\x4f\x72\x36\x3f\xfa\xae\x73\xfb\xa3\xb1\x8c\x28\x0d\x4b\xa9\x36\x44\xd1\xa6\x3f\x63\x0a\xdc\xba\x4f\x72\x6d\xe9\xa7\xd1\xbc\xb5\xa7\xd8\x9a\xf0\xf1\xd1\xbd\xef\xf9\x78\x14\xf5\x5d\x3e\x9a\x44\x48\xf2\xe2\x98\xd0\x65\xac\x4e\x6e\x0a\xdf\xb8\x2b\xc0\xf8\xf9\xd8\x14\x4c\x4f\x22\x62\x8c\x1a\x8f\x06\x60\x18\x4d\xac\x5f\xaf\x7a\x57\xb2\x6e\x79\x32\x08\xab\xa7\x78\xec\x8b\xe9\xae\x10\x68\xc9\x73\xad\xc7\x1e\x57\xa3\xcb\x1e\xef\x21\xac\x46\xe7\xa3\xce\x51\xfb\xf0\xde\xef\x23\x3d\xa9\xc9\x80\xf5\xc8\x46\xd9\xe8\x48\x3c\xa1\xf4\x8d\x8d\x9f\x71\x70\x22\xd2\x0f\xd1\x31\xe9\x8c\xed\xcf\xeb\x27\xad\xec\x7f\x5e\xf3\x88\x89\x19\x1d\x4d\x22\x5d\x67\xbe\x37\x31\x7e\xd9\x5d\xc0\x5a\x32\x07\xde\xc3\x54\x70\x54\x50\x58\x11\xc3\xa2\x22\x3c\x28\x42\x9e\xc8\x1a\x8d\x48\xbf\xab\xdd\xa5\x35\xf8\x74\xd2\xb5\xb6\xbe\xd2\xb6\xb8\xf2\xad\xff\x0d\x66\xda\x75\x12\xa0\xc1\xbb\xeb\xe6\xf8\xae\xcd\xeb\xef\xde\xf6\x3a\x37\x5d\x44\x8c\x1d\xf7\xee\xf7\x9c\xa7\xfa\x24\x27\x7f\x40\xba\xd9\x6c\x22\xff\x45\xcb\xb5\xf1\xbb\x46\x4a\x4c\x2a\x16\xbd\xd7\x01\x10\xbd\x15\x39\x50\x5c\xa2\x5a\xf4\xd8\x37\xdd\x95\x24\xf6\x3f\x6d\x4c\x62\xff\xeb\xed\xff\x0b\x00\x00\xff\xff\x56\xf8\xb5\xef\xce\x2d\x00\x00") +var _faucetHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5a\x6d\x93\xdb\x36\x92\xfe\x3c\xfe\x15\x1d\x9e\xbd\x92\xce\x43\x52\x33\x63\x7b\x7d\x12\xa9\x94\xd7\x9b\xdd\xf3\xd5\x5d\x92\x4a\x9c\xba\xdb\xca\xa6\xae\x40\xb2\x25\xc2\x03\x02\x0c\x00\x4a\xa3\x4c\xe9\xbf\x5f\x35\x40\x52\xd4\xcb\x4c\xec\xb5\xaf\x6a\xfd\x61\x4c\x02\x8d\x46\xa3\xfb\x69\xf4\x0b\x95\x7c\xf5\xe7\xef\xde\xbe\xff\xdb\xf7\xdf\x40\x69\x2b\xb1\x78\x92\xd0\x7f\x20\x98\x5c\xa5\x01\xca\x60\xf1\xe4\x22\x29\x91\x15\x8b\x27\x17\x17\x49\x85\x96\x41\x5e\x32\x6d\xd0\xa6\x41\x63\x97\xe1\xeb\x60\x3f\x51\x5a\x5b\x87\xf8\x6b\xc3\xd7\x69\xf0\x3f\xe1\x4f\x6f\xc2\xb7\xaa\xaa\x99\xe5\x99\xc0\x00\x72\x25\x2d\x4a\x9b\x06\xef\xbe\x49\xb1\x58\xe1\x60\x9d\x64\x15\xa6\xc1\x9a\xe3\xa6\x56\xda\x0e\x48\x37\xbc\xb0\x65\x5a\xe0\x9a\xe7\x18\xba\x97\x4b\xe0\x92\x5b\xce\x44\x68\x72\x26\x30\xbd\x0a\x16\x4f\x88\x8f\xe5\x56\xe0\xe2\xfe\x3e\xfa\x16\xed\x46\xe9\xdb\xdd\x6e\x06\x6f\x1a\x5b\xa2\xb4\x3c\x67\x16\x0b\xf8\x0b\x6b\x72\xb4\x49\xec\x29\xdd\x22\xc1\xe5\x2d\x94\x1a\x97\x69\x40\xa2\x9b\x59\x1c\xe7\x85\xfc\x60\xa2\x5c\xa8\xa6\x58\x0a\xa6\x31\xca\x55\x15\xb3\x0f\xec\x2e\x16\x3c\x33\xb1\xdd\x70\x6b\x51\x87\x99\x52\xd6\x58\xcd\xea\xf8\x26\xba\x89\xfe\x18\xe7\xc6\xc4\xfd\x58\x54\x71\x19\xe5\xc6\x04\xa0\x51\xa4\x81\xb1\x5b\x81\xa6\x44\xb4\x01\xc4\x8b\x7f\x6c\xdf\xa5\x92\x36\x64\x1b\x34\xaa\xc2\xf8\x45\xf4\xc7\x68\xea\xb6\x1c\x0e\x3f\xbe\x2b\x6d\x6b\x72\xcd\x6b\x0b\x46\xe7\x1f\xbd\xef\x87\x5f\x1b\xd4\xdb\xf8\x26\xba\x8a\xae\xda\x17\xb7\xcf\x07\x13\x2c\x92\xd8\x33\x5c\x7c\x16\xef\x50\x2a\xbb\x8d\xaf\xa3\x17\xd1\x55\x5c\xb3\xfc\x96\xad\xb0\xe8\x76\xa2\xa9\xa8\x1b\xfc\x62\xfb\x3e\x64\xc3\x0f\xc7\x26\xfc\x12\x9b\x55\xaa\x42\x69\xa3\x0f\x26\xbe\x8e\xae\x5e\x47\xd3\x6e\xe0\x94\xbf\xdb\x80\x8c\x46\x5b\x5d\x44\x6b\xd4\x84\x5c\x11\xe6\x28\x2d\x6a\xb8\xa7\xd1\x8b\x8a\xcb\xb0\x44\xbe\x2a\xed\x0c\xae\xa6\xd3\x67\xf3\x73\xa3\xeb\xd2\x0f\x17\xdc\xd4\x82\x6d\x67\xb0\x14\x78\xe7\x87\x98\xe0\x2b\x19\x72\x8b\x95\x99\x81\xe7\xec\x26\x76\x6e\xcf\x5a\xab\x95\x46\x63\xda\xcd\x6a\x65\xb8\xe5\x4a\xce\x08\x51\xcc\xf2\x35\x9e\xa3\x35\x35\x93\x27\x0b\x58\x66\x94\x68\x2c\x1e\x09\x92\x09\x95\xdf\xfa\x31\xe7\xcd\xc3\x43\xe4\x4a\x28\x3d\x83\x4d\xc9\xdb\x65\xe0\x36\x82\x5a\x63\xcb\x1e\x6a\x56\x14\x5c\xae\x66\xf0\xaa\x6e\xcf\x03\x15\xd3\x2b\x2e\x67\x30\xdd\x2f\x49\xe2\x4e\x8d\x49\xec\x2f\xae\x27\x17\x49\xa6\x8a\xad\xb3\x61\xc1\xd7\x90\x0b\x66\x4c\x1a\x1c\xa9\xd8\x5d\x48\x07\x04\x74\x0f\x31\x2e\xbb\xa9\x83\x39\xad\x36\x01\xb8\x8d\xd2\xc0\x0b\x11\x66\xca\x5a\x55\xcd\xe0\x8a\xc4\x6b\x97\x1c\xf1\x13\xa1\x58\x85\x57\xd7\xdd\xe4\x45\x52\x5e\x75\x4c\x2c\xde\xd9\xd0\xd9\xa7\xb7\x4c\xb0\x48\x78\xb7\x76\xc9\x60\xc9\xc2\x8c\xd9\x32\x00\xa6\x39\x0b\x4b\x5e\x14\x28\xd3\xc0\xea\x06\x09\x47\x7c\x01\xc3\xeb\xef\x81\xdb\xaf\xbc\xea\xe4\x8a\x0b\xbe\x6e\x8f\x35\x78\x3c\x3a\xe1\xc3\x87\x78\x0d\xed\x83\x5a\x2e\x0d\xda\x70\x70\xa6\x01\x31\x97\x75\x63\xc3\x95\x56\x4d\xdd\xcf\x5f\x24\x6e\x14\x78\x91\x06\x8d\x16\x41\x7b\xfd\xbb\x47\xbb\xad\x5b\x55\x04\xfd\xc1\x95\xae\x42\xb2\x84\x56\x22\x80\x5a\xb0\x1c\x4b\x25\x0a\xd4\x69\xf0\xa3\xca\x39\x13\x20\xfd\x99\xe1\xa7\x1f\xfe\x13\x5a\x93\x71\xb9\x82\xad\x6a\x34\x7c\x63\x4b\xd4\xd8\x54\xc0\x8a\x82\xe0\x1a\x45\xd1\x40\x10\x87\xdd\x53\x51\xc3\xcc\xca\x3d\xd5\x45\x92\x35\xd6\xaa\x9e\x30\xb3\x12\x32\x2b\xc3\x02\x97\xac\x11\x16\x0a\xad\xea\x42\x6d\x64\x68\xd5\x6a\x45\x91\xce\x1f\xc2\x2f\x0a\xa0\x60\x96\xb5\x53\x69\xd0\xd1\x76\x36\x64\xa6\x56\x75\x53\xb7\x56\xf4\x83\x78\x57\x33\x59\x60\x41\x36\x17\x06\x83\xc5\x5f\xf9\x1a\xa1\x42\x7f\x96\x8b\x63\x48\xe4\x4c\xa3\x0d\x87\x4c\x4f\x80\x91\xc4\x5e\x18\x7f\x24\x68\xff\x25\x8d\xe8\x38\xf5\x47\xa8\x50\x36\x70\xf0\x16\x6a\xba\x57\x82\xc5\xfd\xbd\x66\x72\x85\xf0\x94\x17\x77\x97\xf0\x94\x55\xaa\x91\x16\x66\x29\x44\x6f\xdc\xa3\xd9\xed\x0e\xb8\x03\x24\x82\x2f\x12\xf6\x18\xbc\x41\xc9\x5c\xf0\xfc\x36\x0d\x2c\x47\x9d\xde\xdf\x13\xf3\xdd\x6e\x0e\xf7\xf7\x7c\x09\x4f\xa3\x1f\x30\x67\xb5\xcd\x4b\xb6\xdb\xad\x74\xf7\x1c\xe1\x1d\xe6\x8d\xc5\xf1\xe4\xfe\x1e\x85\xc1\xdd\xce\x34\x59\xc5\xed\xb8\x5b\x4e\xe3\xb2\xd8\xed\x48\xe6\x56\xce\xdd\x0e\x62\x62\x2a\x0b\xbc\x83\xa7\xd1\xf7\xa8\xb9\x2a\x0c\x78\xfa\x24\x66\x8b\x24\x16\x7c\xd1\xae\x3b\x54\x52\xdc\x88\x3d\x5e\x62\x02\x4c\x8f\x73\xe7\x36\x4e\xd4\xa1\xa4\x67\xbc\x60\x15\xf6\xd2\xb7\x78\x30\xdc\xe2\x2d\x6e\xd3\xe0\xfe\x7e\xb8\xb6\x9d\xcd\x99\x10\x19\x23\xbd\xf8\xa3\xf5\x8b\x7e\x43\xc2\xe9\x9a\x1b\x97\x52\x2d\x3a\x09\xf6\x62\x7f\xa4\x5b\x1f\x5d\x5c\x56\xd5\x33\xb8\xb9\x1e\xdc\x5a\xe7\x3c\xfe\xd5\x91\xc7\xdf\x9c\x25\xae\x99\x44\x01\xee\x6f\x68\x2a\x26\xba\xe7\xd6\x5b\x06\xce\x77\xbc\x28\xa4\x3b\xba\x17\xad\xbf\xeb\xa7\x73\x50\x6b\xd4\x4b\xa1\x36\x33\x60\x8d\x55\x73\xa8\xd8\x5d\x1f\xef\x6e\xa6\xd3\xa1\xdc\x94\x0a\xb2\x4c\xa0\xbb\x5d\x34\xfe\xda\xa0\xb1\xa6\xbf\x4b\xfc\x94\xfb\x4b\x57\x4a\x81\xd2\x60\x71\xa4\x0d\xda\x91\x54\xeb\xa8\x06\xa6\xef\x95\x79\x56\xf6\xa5\x52\x7d\x08\x19\x8a\xd1\xb2\x1e\x44\xbb\x60\x91\x58\xbd\xa7\xbb\x48\x6c\xf1\x49\x21\x40\x53\x8a\xf7\x50\x04\xf0\x37\x1a\x9d\xbd\x46\xd4\x3e\xbf\x20\xc8\x82\x7b\x4d\x62\x5b\x7c\xc6\xce\x04\xc2\x8c\x19\xfc\x98\xed\x5d\xa4\xdf\x6f\xef\x5e\x3f\x77\xff\x12\x99\xb6\x19\x32\xfb\x31\x02\x2c\x1b\x59\x0c\xce\xef\xee\xce\xcf\x15\xa0\x91\x7c\x8d\xda\x70\xbb\xfd\x58\x09\xb0\xd8\x8b\xe0\xdf\x0f\x45\x48\x62\xab\x1f\xc7\xda\xf0\xe5\x0b\x39\xf7\xef\xa5\x24\x37\x8b\x7f\x57\x1b\x28\x14\x1a\xb0\x25\x37\x40\xc1\xf5\xeb\x24\x2e\x6f\x7a\x92\x7a\xf1\x9e\x26\x9c\x52\x61\xe9\x52\x0b\xe0\x06\x74\x23\x5d\xe4\x55\x12\x6c\x89\x87\xe9\x48\x1b\xa4\x23\x78\xaf\x28\xa5\x5b\xa3\xb4\x50\x31\xc1\x73\xae\x1a\x03\x2c\xb7\x4a\x1b\x58\x6a\x55\x01\xde\x95\xac\x31\x96\x18\xd1\xf5\xc1\xd6\x8c\x0b\xe7\x4b\xce\xa4\xa0\x34\xb0\x3c\x6f\xaa\x86\x52\x52\xb9\x02\x94\xaa\x59\x95\xad\x2c\x56\x81\x0f\x4c\x42\xc9\x55\x2f\x8f\xa9\x59\x05\xcc\x5a\x96\xdf\x9a\x4b\xe8\x6e\x05\x60\x1a\xc1\x72\x2c\x68\x55\xae\xaa\x4a\x49\xb8\xd1\x05\xd4\x4c\xdb\x2d\x98\xc3\xdc\x82\xe5\xb9\x8b\x72\x11\xbc\x91\x5b\x25\x11\x4a\xb6\x76\x12\xc2\x7b\x5f\x4e\x90\x5c\x7f\x61\x39\x66\x4a\xf5\xd4\x50\xb1\x6d\xb7\x5d\x2b\xfd\x86\xdb\x92\x7b\xf5\xd4\xa8\x2b\x5a\x5a\x80\xe0\x15\xb7\x26\x4a\xe2\x7a\x7f\xa3\xee\x63\xb3\x08\x4b\xa5\xf9\x6f\x94\xd8\x88\xe1\xf5\x69\x8f\x2e\x97\xee\x6e\x74\x56\x17\xb8\xb4\x33\x78\xe1\xef\xc6\x63\x1c\xb7\x15\xd0\x39\x10\x77\x3c\x5d\x65\x49\x01\x67\x06\x37\x3e\x9d\xf5\x89\x44\x61\x07\x12\x14\x47\x50\xf3\x9b\xbe\x7e\x5d\xdf\xf5\x72\xf4\x39\xf1\xb4\x67\x42\x08\x38\x54\xca\x9a\xf7\x6a\xbc\x84\x8a\xdd\x22\x30\x48\xd8\x51\x85\xdc\x0a\xed\xea\x2b\xee\xfa\x03\xb1\xdd\x20\xda\xaf\xc9\x75\xd3\x1f\x3c\x43\x2e\x57\xcf\xae\xa7\x1e\x91\xf4\x40\xec\x9f\x5d\x4f\xb9\xb4\xea\xd9\xf5\x74\x7a\x37\xfd\xc8\x7f\xcf\xae\xa7\x4a\x3e\xbb\x9e\xda\x12\x9f\x5d\x4f\x9f\x5d\xdf\x0c\xb1\xec\x47\xba\xcc\x92\xa8\xd0\xd0\x6e\x1d\xc4\x03\xb0\x4c\xaf\xd0\xa6\xc1\xff\xb2\x4c\x35\x76\x96\x09\x26\x6f\x83\x85\x13\x97\xb2\x0d\x87\x82\xf3\xf9\x29\xd4\xcc\x10\x24\x48\x62\x87\x92\xb6\x17\x62\x60\x6c\x1a\xad\x55\x23\x29\x2a\x02\x9d\xd9\x79\xa8\x1c\x11\xca\x48\x31\x93\x28\xc9\x74\xbc\x78\xab\xea\x6d\xe8\x98\xb8\xe5\x27\x6a\x34\x4d\x5d\x2b\x6d\xa3\xa1\x3a\x19\xd5\x41\x02\x4d\xfc\x7a\xfa\xf2\xf5\xab\x47\xc5\x37\x94\x65\xbb\x33\xf4\x12\xb2\x4c\xad\x11\x7c\x4e\x9f\xa9\x3b\x60\xb2\x80\x25\xd7\x08\x6c\xc3\xb6\x5f\x25\x71\xe1\x2a\xb0\xcf\x47\xed\xb2\xf5\xae\x7f\x2a\xd8\x76\x2e\x7f\x09\x75\x93\x09\x6e\x4a\x60\x20\x71\x03\x89\xb1\x5a\xc9\xd5\xc2\x8d\xe6\x54\x92\xba\x57\xa8\x95\xb1\x8f\x99\x1f\xab\x0c\x8b\xe2\x0c\x00\xbe\x94\xfd\x37\x9b\x4d\xd4\x69\xd2\x19\xbf\x44\x51\xc7\x74\xfd\x35\x92\xdb\x6d\xec\xdd\x48\xc9\xf8\x6b\x5e\xa4\xd7\xaf\xaf\x5f\xbd\xba\x7e\xf1\x6f\xaf\x5f\xbe\xbc\x7e\xfd\xe2\xe5\x43\xc8\xa0\x43\x7d\x26\x30\x7c\x1a\xfd\xad\xa2\xaa\xb5\xcf\xa1\x3d\x5e\xba\xdc\x8d\x22\x74\x41\x35\x88\x0e\xfe\x61\x0c\x35\x92\x12\x91\x90\x89\xb3\x39\xc4\x27\xa0\xc8\xc1\xe8\x11\xc9\x3e\x13\x5a\x1d\x7c\x08\x29\xaa\xb1\x74\xc2\xae\x98\xe7\x4a\xf6\x70\xba\x04\xc3\xab\x5a\x6c\x21\xdf\x5b\xfd\x3c\xae\x1e\x34\xca\xef\xc2\xea\xd0\x6c\x1e\x64\x2e\xfa\x57\xaa\x40\x8a\xfa\xa6\x31\x39\xd6\xae\xcb\x4b\x91\xf4\x4f\xdb\xdf\x98\xb4\x5c\x62\x17\x71\x23\xf8\x4e\x8a\x2d\x34\x06\x61\xa9\x34\x14\x98\x35\xab\x95\x4b\x13\x34\xd4\x9a\xaf\x99\xc5\x2e\xcc\x9a\x16\x15\x3d\x28\x06\x95\x0d\xa5\x3c\x62\x90\x81\xfc\x4d\x35\x90\x33\x09\x56\xb3\xfc\xd6\x7b\x4a\xa3\x35\x79\x4a\x8d\xfe\x34\x7d\xa0\xcf\x50\xa8\x8d\x23\xf1\xe7\x5e\x72\x14\x2e\xea\x1b\x44\x28\xd5\x06\xaa\x26\x77\x0e\x49\x51\xdd\x1d\x62\xc3\xb8\x85\x46\x5a\x2e\xbc\x3e\x6d\xa3\x25\xe5\x08\x78\x10\xa5\x4f\x6a\xbf\x04\xab\xc5\xfb\x12\xcf\xa4\x44\x7d\xd5\x06\x1a\xdf\x7a\x72\xa8\xb5\xb2\x98\x93\x41\x81\xad\x18\x97\x86\x2c\xe2\xf2\x00\xac\x3e\xa2\xaa\xeb\x9f\xda\x87\x7d\x87\xd2\x4d\xc7\x31\xfc\x55\xa8\x8c\x09\x58\x13\xd2\x33\x41\xe9\x9c\x82\x52\xd1\xd1\x07\xda\x32\x96\xd9\xc6\x80\x5a\xba\x51\x2f\x39\xad\x5f\x33\x4d\x16\xc4\xaa\xb6\x90\xb6\xfd\x35\x1a\x33\xa8\xd7\x6d\xd7\x90\x5e\xa9\x72\x3f\x98\xef\xb5\x9e\xc2\xcf\xbf\xcc\x9f\xb4\xa2\xfc\x19\x97\x0e\x12\x84\x6f\x7f\x64\x5b\x32\x0b\xb9\x46\x66\xd1\x40\x2e\x94\x69\xb4\x97\xb0\xd0\xaa\x06\x92\xb2\xe3\xd4\x71\xa6\x89\xda\xed\xd6\x31\x19\x97\xcc\x94\x93\xb6\x3d\xa8\xd1\x59\xa9\x9f\xeb\xc6\x2f\x08\x75\x63\x62\xc0\xd3\xe9\x1c\x78\xd2\xf1\x8d\x04\xca\x95\x2d\xe7\xc0\x9f\x3f\xef\x89\x2f\xf8\x12\xc6\x1d\xc5\xcf\xfc\x97\xc8\xde\x45\xb4\x0b\xa4\x29\x0c\x77\x73\x1b\xb6\x7c\x4c\x2d\x78\x8e\x63\x7e\x09\x57\x93\x79\x37\x9b\x69\x64\xb7\xdd\x5b\x6b\x47\xff\x9f\xfb\xbb\x9b\x1f\x6a\xc6\x29\xff\x40\x37\xbe\xf6\x37\xc0\x60\xc5\x8d\x85\x46\x0b\x68\x7d\xd8\x9b\xa0\x37\x88\xa3\x1b\x6a\xe5\x04\x97\xed\x43\x8b\xa9\xee\x08\x9e\x4d\x64\x50\x16\xe3\xff\xf8\xf1\xbb\x6f\x23\x63\x35\x97\x2b\xbe\xdc\x8e\xef\x1b\x2d\x66\xf0\x74\x1c\xfc\x4b\xa3\x45\x30\xf9\x79\xfa\x4b\xb4\x66\xa2\xc1\x4b\x67\xef\x99\xfb\x7b\xb2\xcb\x25\xb4\x8f\x33\x38\xdc\x70\x37\x99\xcc\xcf\xf7\x49\x06\x6d\x1d\x8d\x06\xed\x98\x08\x7b\xe0\x1f\xeb\x88\x41\x85\xb6\x54\xce\x75\x35\xe6\x4a\x4a\xcc\x2d\x34\xb5\x92\xad\x4a\x40\x28\x63\xf6\x40\xec\x28\xd2\x53\x50\xb4\xf4\xa9\x0b\xd6\xff\x8d\xd9\x8f\x2a\xbf\x45\x3b\x1e\x8f\x37\x5c\x16\x6a\x13\x09\xe5\xaf\xda\x88\x9c\x54\xe5\x4a\x40\x9a\xa6\xd0\x46\xd1\x60\x02\x5f\x43\xb0\x31\x14\x4f\x03\x98\xd1\x23\x3d\x4d\xe0\x39\x1c\x2f\x2f\x29\xde\x3f\x87\x20\x66\x35\x0f\x26\xde\x1d\x3a\xc5\x2b\x59\xa1\x31\x6c\x85\x43\x01\x5d\x65\xd4\x83\x8c\xce\x51\x99\x15\xa4\xe0\x0c\x54\x33\x6d\xd0\x93\x44\x54\x8d\x77\x68\x23\xcc\x3a\xb2\x34\x05\xd9\x08\xb1\x07\xa9\x77\x8a\x79\x07\xbf\x03\xf2\xc8\xc7\x9a\xaf\xd2\x14\xa8\x34\x25\x15\x17\xfb\x95\x64\x7c\x5f\x44\x4f\x22\x8a\x0b\xfb\x15\x93\xf9\x10\xcd\x07\xdc\xb0\xf8\x3d\x76\x58\x1c\xf3\xc3\xe2\x01\x86\xae\x67\xf1\x18\x3f\xdf\xe3\x18\xb0\x73\x03\x0f\x70\x93\x4d\x95\xa1\x7e\x8c\x9d\xef\x59\xb4\xec\x9c\xaa\xdf\x49\x3b\x58\x7b\x09\x57\xaf\x26\x0f\x70\x47\xad\xd5\x83\xcc\xa5\xb2\xdb\xf1\xbd\x60\x5b\xca\x99\x60\x64\x55\xfd\xd6\xb5\x18\x46\x97\x2e\xe2\xce\xa0\xe7\x70\xe9\x9a\xc7\x33\x18\xb9\x37\x9a\xe7\x15\xba\x55\x2f\xa7\xd3\xe9\x25\x74\x5f\x5d\xfe\xc4\xc8\x09\x75\x83\xbb\x07\xe4\x31\x4d\x9e\x53\xdc\xff\x1c\x89\x5a\x1e\xbd\x4c\xed\xfb\x67\x48\xd5\xc7\x86\x03\xb1\xe0\x0f\x7f\x80\x93\xd9\x43\x18\xc7\x31\xfc\x17\xa3\x32\x5c\x08\xd7\x3d\x70\x4d\x83\x9e\xbe\xe2\xc6\xb8\x62\xdc\x40\xa1\x24\xb6\x6b\x3e\xed\xda\x3f\x91\xb1\x25\x83\x05\x4c\x8f\x05\xa4\xeb\x70\x10\x16\xce\x44\x8b\x01\xdf\xc3\x40\x70\xb1\x1b\xee\x77\xb0\x92\x57\x08\x5f\xa5\x10\x04\xc3\xc5\x27\x14\x44\xd0\x33\xbb\x30\x68\xdf\x7b\x5b\x8c\xdb\xe8\x78\x2e\x76\x4d\x2e\xe1\x66\x3a\x9d\x4e\x4e\x84\xd8\xed\xd5\xfb\xa6\xa6\xb4\x09\x98\xdc\xba\x2b\xb1\xd7\xad\x4b\x1c\x29\x05\xa2\x2b\x4d\x40\xae\x84\xf0\x39\x4b\xbb\x94\x14\xdc\x36\x4f\x52\x08\xaf\xe6\x67\xa2\xe8\x40\x93\x83\xa3\x1d\x9b\xe7\x8c\xee\x8f\x4d\x74\xa8\xb3\x23\xe2\xf0\xea\xc0\x28\x07\xf6\x3a\x6f\x98\x8b\x5e\x6e\xbe\xd7\xe8\x91\xb9\xf6\xf6\x3a\xd6\xd9\x40\x7e\xcf\xe7\xf9\xd5\x47\x1e\xa3\x9f\xae\x1b\x53\x8e\x8f\x04\x9d\xcc\x4f\x6d\xf3\xce\xa2\xa6\x2c\x59\x51\xc8\x22\x5b\x50\x29\xa0\xf1\xc4\x24\x2e\x55\xd7\x18\x6a\x94\x05\xea\x2e\xa5\xf0\x99\x3d\x25\x80\x07\x26\xf3\x55\xe5\x10\x4e\x9f\xe8\x30\x2e\x25\x53\x12\x01\x00\x8e\x9c\xc0\x01\xf5\x00\xa9\x44\x8c\x82\xd5\x06\x0b\x48\xc1\x7f\x04\x1f\x4f\xa2\x46\xf2\xbb\xf1\x24\x6c\xdf\x8f\x79\x74\xf3\xf3\xbe\x4c\xec\xc4\x7e\x9e\x42\x90\x58\x0d\xbc\x48\x47\x01\x3c\x3f\xe7\x82\x14\x75\x47\x8b\xbd\x04\xc3\xa5\x00\x89\x2d\x16\xae\x0f\xea\xeb\xb5\xbf\x07\x19\xcb\x6f\x57\xae\x10\x9a\x51\xaa\x35\x3e\x61\xcb\xd6\xcc\x32\xed\xb8\x4e\xe6\xb0\x27\x6f\x0b\xc5\x9c\x8c\x33\x07\x5f\x91\xba\x76\x2b\xf4\x9f\x28\xdc\x5b\xa6\x74\x81\x3a\xd4\xac\xe0\x8d\x99\xc1\x8b\xfa\x6e\xfe\xf7\xee\x13\x8e\x6b\x0a\x3f\x2a\x6a\xad\x71\x71\x22\x51\xdb\x65\x7c\x0e\x41\x12\x13\xc1\xef\xb1\xe9\x0f\x3b\xfc\xf8\x0e\x67\x5a\xdf\xd0\x7f\x1a\x6f\xc7\x2b\x5e\x14\x02\x49\xe0\x3d\x7b\x72\x46\xb2\xff\xd0\xa5\x0e\xb7\x84\xb6\xe7\xbd\x5f\xb3\x03\x14\x06\x1f\x59\xd0\xb7\xcf\x47\x04\x80\x90\x8e\xcc\x9d\xce\xdb\x62\xdb\x0d\xeb\x91\xd3\x45\xfb\x53\x8a\xa2\xd1\x2e\xd7\x1a\x87\x2d\xc0\x2e\x61\x64\x28\xf7\x2b\xcc\x68\x12\x95\x4d\xc5\x24\xff\x0d\xc7\x14\x97\x26\x5e\x57\xae\x1f\x1f\x9c\x5e\xc9\x27\xc2\xec\x1b\xe5\xa3\x2e\xc6\x8d\x5a\x25\x8e\x3a\xeb\xbe\xd8\xd7\xf6\x33\x98\xce\x47\x9f\xa8\xa1\xf3\xbb\x84\x19\xd3\x30\x7c\x09\xbb\xe0\x0b\x5a\xd1\xee\xdd\x5c\xc6\xf4\xc8\x77\x32\x5c\x7e\x2e\xd5\x26\x1d\xdd\x4c\x7b\x21\xbd\xa1\x9d\x9d\x47\x2d\xd6\x4e\x8c\x41\x52\x76\xae\xb9\x80\x9b\xe9\x97\x90\xd6\x77\x43\x8e\x4e\x60\x35\xaf\xb1\x00\x96\x5b\xbe\xc6\xff\x87\x83\x7c\x01\x25\x7f\xb2\x88\x84\xc3\x4e\x79\x0e\xa6\x07\xf2\xd2\x6c\xaf\xdb\x7f\x25\x7f\x83\xd8\x69\xf8\x39\x04\x67\x0f\xf2\x20\x12\x8f\x08\x8f\x5c\xfb\x61\xbf\x77\x1f\x98\x82\xe3\x98\x42\xd9\x6e\xff\x71\x74\x12\x95\xb6\x12\xe3\x20\xb1\xee\x47\x32\x24\x73\xcf\xc1\x31\xf0\xc3\x87\x29\xdd\xee\xb0\x90\xa1\xfa\x1d\x8f\xea\x2c\x18\x24\x27\x7d\x2d\xd6\x65\x22\xb0\xdb\xff\x96\x28\x8e\xe1\x47\xcb\xb4\x05\x06\x3f\xbd\x83\xa6\x2e\x98\xf5\x9f\x72\x28\x3e\xfa\x4f\x25\xdd\x8f\x8d\x32\xa6\x0d\x2c\x95\xde\x30\x5d\xb4\xfd\x19\x5b\xe2\xd6\x7d\xca\xe9\x52\x3f\x83\xf6\x1d\xdd\x62\x6b\x26\xc6\x27\x75\xdf\xd3\xf1\x28\x1a\x9a\x7c\x34\x89\x90\xe5\xe5\x29\xa1\x8b\x58\xfd\xbe\x29\x7c\xeb\x4a\x80\xf1\xd3\xb1\x2d\xb9\x99\x44\xcc\x5a\x3d\x1e\x1d\x80\x61\x34\x21\xbb\x5e\x0d\x4a\xb2\x7e\x79\x72\xe0\x56\x8f\xf1\xd8\x27\xd3\x7d\x22\xd0\x91\xe7\xc6\x8c\x3d\xae\x46\x97\x03\xde\x87\xb0\x1a\x3d\x1b\xf5\x86\xda\xbb\xf7\xfe\x1c\xe9\x59\x49\x0e\x58\x8f\xc8\xcb\x46\x27\xdb\xb3\xa2\x78\x4b\xfe\x33\x0e\xce\x78\xfa\x31\x3a\x26\xbd\xb2\xfd\x7d\xfd\xa8\x96\xfd\xcf\x32\x1e\x50\x31\x2f\x46\x93\xc8\x34\x99\xef\x4d\x8c\x5f\xf6\x05\x58\x47\xe6\xc0\x7b\x1c\x0a\x4e\x12\x0a\xda\xe2\x30\xa9\x08\x8f\x92\x90\x47\xa2\x46\xbb\xa5\x3f\xd5\xee\x92\x14\x3e\x9d\xf4\xad\xad\x6f\x0c\x25\x57\xbe\xf5\xbf\xc1\xcc\xb8\x4e\x02\xb4\x78\x77\xdd\x1c\xdf\xb5\x79\xf3\xfd\xbb\x41\xe7\xa6\xf7\x88\xb1\xe3\xde\xff\x0e\xf0\x5c\x9f\xe4\xec\x0f\x0f\x37\x9b\x4d\xb4\x52\x6a\x25\xfc\x4f\x0e\xfb\x46\x4a\xcc\x6a\x1e\x7d\x30\x01\x30\xb3\x95\x39\x14\xb8\x44\xbd\x18\xb0\x6f\xbb\x2b\x49\xec\x7f\x12\x97\xc4\xfe\x57\xbf\xff\x17\x00\x00\xff\xff\x31\x9f\x54\x5e\x06\x2c\x00\x00") func faucetHtmlBytes() ([]byte, error) { return bindataRead( @@ -83,7 +85,7 @@ func faucetHtml() (*asset, error) { } info := bindataFileInfo{name: "faucet.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdb, 0xa2, 0x98, 0x44, 0x4b, 0x50, 0xf8, 0xa1, 0xac, 0x4a, 0x76, 0x2e, 0xcc, 0x3d, 0xcb, 0x81, 0x9e, 0x2a, 0xaa, 0x87, 0xf5, 0x9d, 0x53, 0x4, 0x8a, 0xdd, 0x5a, 0xfe, 0xd3, 0xc3, 0xf, 0x11}} return a, nil } @@ -102,6 +104,12 @@ func Asset(name string) ([]byte, error) { return nil, fmt.Errorf("Asset %s not found", name) } +// AssetString returns the asset contents as a string (instead of a []byte). +func AssetString(name string) (string, error) { + data, err := Asset(name) + return string(data), err +} + // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { @@ -113,6 +121,12 @@ func MustAsset(name string) []byte { return a } +// MustAssetString is like AssetString but panics when Asset would return an +// error. It simplifies safe initialization of global variables. +func MustAssetString(name string) string { + return string(MustAsset(name)) +} + // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. @@ -128,6 +142,33 @@ func AssetInfo(name string) (os.FileInfo, error) { return nil, fmt.Errorf("AssetInfo %s not found", name) } +// AssetDigest returns the digest of the file with the given name. It returns an +// error if the asset could not be found or the digest could not be loaded. +func AssetDigest(name string) ([sha256.Size]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) + } + return a.digest, nil + } + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) +} + +// Digests returns a map of all known files and their checksums. +func Digests() (map[string][sha256.Size]byte, error) { + mp := make(map[string][sha256.Size]byte, len(_bindata)) + for name := range _bindata { + a, err := _bindata[name]() + if err != nil { + return nil, err + } + mp[name] = a.digest + } + return mp, nil +} + // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) @@ -151,9 +192,9 @@ var _bindata = map[string]func() (*asset, error){ // img/ // a.png // b.png -// then AssetDir("data") would return []string{"foo.txt", "img"} -// AssetDir("data/img") would return []string{"a.png", "b.png"} -// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// then AssetDir("data") would return []string{"foo.txt", "img"}, +// AssetDir("data/img") would return []string{"a.png", "b.png"}, +// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree @@ -186,7 +227,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ "faucet.html": {faucetHtml, map[string]*bintree{}}, }} -// RestoreAsset restores an asset under the given directory +// RestoreAsset restores an asset under the given directory. func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { @@ -207,7 +248,7 @@ func RestoreAsset(dir, name string) error { return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) } -// RestoreAssets restores an asset under the given directory recursively +// RestoreAssets restores an asset under the given directory recursively. func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File diff --git a/cmd/geth/accountcmd.go b/cmd/geth/accountcmd.go index 071be85397da..bf0e58318763 100644 --- a/cmd/geth/accountcmd.go +++ b/cmd/geth/accountcmd.go @@ -116,11 +116,11 @@ Print a short summary of all accounts`, Creates a new account and prints the address. -The account is saved in encrypted format, you are prompted for a passphrase. +The account is saved in encrypted format, you are prompted for a password. -You must remember this passphrase to unlock your account in the future. +You must remember this password to unlock your account in the future. -For non-interactive use the passphrase can be specified with the --password flag: +For non-interactive use the password can be specified with the --password flag: Note, this is meant to be used for testing only, it is a bad idea to save your password to file or expose in any other way. @@ -142,12 +142,12 @@ password to file or expose in any other way. Update an existing account. The account is saved in the newest version in encrypted format, you are prompted -for a passphrase to unlock the account and another to save the updated file. +for a password to unlock the account and another to save the updated file. This same command can therefore be used to migrate an account of a deprecated format to the newest format or change the password for an account. -For non-interactive use the passphrase can be specified with the --password flag: +For non-interactive use the password can be specified with the --password flag: geth account update [options]
@@ -174,11 +174,11 @@ Prints the address. The keyfile is assumed to contain an unencrypted private key in hexadecimal format. -The account is saved in encrypted format, you are prompted for a passphrase. +The account is saved in encrypted format, you are prompted for a password. -You must remember this passphrase to unlock your account in the future. +You must remember this password to unlock your account in the future. -For non-interactive use the passphrase can be specified with the -password flag: +For non-interactive use the password can be specified with the -password flag: geth account import [options] @@ -205,7 +205,7 @@ func accountList(ctx *cli.Context) error { } // tries unlocking the specified account a few times. -func unlockAccount(ctx *cli.Context, ks *keystore.KeyStore, address string, i int, passwords []string) (accounts.Account, string) { +func unlockAccount(ks *keystore.KeyStore, address string, i int, passwords []string) (accounts.Account, string) { account, err := utils.MakeAddress(ks, address) if err != nil { utils.Fatalf("Could not list accounts: %v", err) @@ -247,17 +247,17 @@ func getPassPhrase(prompt string, confirmation bool, i int, passwords []string) if prompt != "" { fmt.Println(prompt) } - password, err := console.Stdin.PromptPassword("Passphrase: ") + password, err := console.Stdin.PromptPassword("Password: ") if err != nil { - utils.Fatalf("Failed to read passphrase: %v", err) + utils.Fatalf("Failed to read password: %v", err) } if confirmation { - confirm, err := console.Stdin.PromptPassword("Repeat passphrase: ") + confirm, err := console.Stdin.PromptPassword("Repeat password: ") if err != nil { - utils.Fatalf("Failed to read passphrase confirmation: %v", err) + utils.Fatalf("Failed to read password confirmation: %v", err) } if password != confirm { - utils.Fatalf("Passphrases do not match") + utils.Fatalf("Passwords do not match") } } return password @@ -268,7 +268,7 @@ func ambiguousAddrRecovery(ks *keystore.KeyStore, err *keystore.AmbiguousAddrErr for _, a := range err.Matches { fmt.Println(" ", a.URL) } - fmt.Println("Testing your passphrase against all of them...") + fmt.Println("Testing your password against all of them...") var match *accounts.Account for _, a := range err.Matches { if err := ks.Unlock(a, auth); err == nil { @@ -279,7 +279,7 @@ func ambiguousAddrRecovery(ks *keystore.KeyStore, err *keystore.AmbiguousAddrErr if match == nil { utils.Fatalf("None of the listed files could be unlocked.") } - fmt.Printf("Your passphrase unlocked %s\n", match.URL) + fmt.Printf("Your password unlocked %s\n", match.URL) fmt.Println("In order to avoid this warning, you need to remove the following duplicate key files:") for _, a := range err.Matches { if a != *match { @@ -307,12 +307,18 @@ func accountCreate(ctx *cli.Context) error { password := getPassPhrase("Your new account is locked with a password. Please give a password. Do not forget this password.", true, 0, utils.MakePasswordList(ctx)) - address, err := keystore.StoreKey(keydir, password, scryptN, scryptP) + account, err := keystore.StoreKey(keydir, password, scryptN, scryptP) if err != nil { utils.Fatalf("Failed to create account: %v", err) } - fmt.Printf("Address: {%x}\n", address) + fmt.Printf("\nYour new key was generated\n\n") + fmt.Printf("Public address of the key: %s\n", account.Address.Hex()) + fmt.Printf("Path of the secret key file: %s\n\n", account.URL.Path) + fmt.Printf("- You can share your public address with anyone. Others need it to interact with you.\n") + fmt.Printf("- You must NEVER share the secret key with anyone! The key controls access to your funds!\n") + fmt.Printf("- You must BACKUP your key file! Without the key, it's impossible to access account funds!\n") + fmt.Printf("- You must REMEMBER your password! Without the password, it's impossible to decrypt the key!\n\n") return nil } @@ -326,7 +332,7 @@ func accountUpdate(ctx *cli.Context) error { ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) for _, addr := range ctx.Args() { - account, oldPassword := unlockAccount(ctx, ks, addr, 0, nil) + account, oldPassword := unlockAccount(ks, addr, 0, nil) newPassword := getPassPhrase("Please give a new password. Do not forget this password.", true, 0, nil) if err := ks.Update(account, oldPassword, newPassword); err != nil { utils.Fatalf("Could not update the account: %v", err) diff --git a/cmd/geth/accountcmd_test.go b/cmd/geth/accountcmd_test.go index 3ea22ccfab60..186db3c6bea1 100644 --- a/cmd/geth/accountcmd_test.go +++ b/cmd/geth/accountcmd_test.go @@ -72,10 +72,20 @@ func TestAccountNew(t *testing.T) { geth.Expect(` Your new account is locked with a password. Please give a password. Do not forget this password. !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} -Repeat passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} +Repeat password: {{.InputLine "foobar"}} + +Your new key was generated +`) + geth.ExpectRegexp(` +Public address of the key: 0x[0-9a-fA-F]{40} +Path of the secret key file: .*UTC--.+--[0-9a-f]{40} + +- You can share your public address with anyone. Others need it to interact with you. +- You must NEVER share the secret key with anyone! The key controls access to your funds! +- You must BACKUP your key file! Without the key, it's impossible to access account funds! +- You must REMEMBER your password! Without the password, it's impossible to decrypt the key! `) - geth.ExpectRegexp(`Address: \{[0-9a-f]{40}\}\n`) } func TestAccountNewBadRepeat(t *testing.T) { @@ -84,9 +94,9 @@ func TestAccountNewBadRepeat(t *testing.T) { geth.Expect(` Your new account is locked with a password. Please give a password. Do not forget this password. !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "something"}} -Repeat passphrase: {{.InputLine "something else"}} -Fatal: Passphrases do not match +Password: {{.InputLine "something"}} +Repeat password: {{.InputLine "something else"}} +Fatal: Passwords do not match `) } @@ -99,10 +109,10 @@ func TestAccountUpdate(t *testing.T) { geth.Expect(` Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} Please give a new password. Do not forget this password. -Passphrase: {{.InputLine "foobar2"}} -Repeat passphrase: {{.InputLine "foobar2"}} +Password: {{.InputLine "foobar2"}} +Repeat password: {{.InputLine "foobar2"}} `) } @@ -111,7 +121,7 @@ func TestWalletImport(t *testing.T) { defer geth.ExpectExit() geth.Expect(` !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foo"}} +Password: {{.InputLine "foo"}} Address: {d4584b5f6229b7be90727b0fc8c6b91bb427821f} `) @@ -126,8 +136,8 @@ func TestWalletImportBadPassword(t *testing.T) { defer geth.ExpectExit() geth.Expect(` !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "wrong"}} -Fatal: could not decrypt key with given passphrase +Password: {{.InputLine "wrong"}} +Fatal: could not decrypt key with given password `) } @@ -140,7 +150,7 @@ func TestUnlockFlag(t *testing.T) { geth.Expect(` Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} `) geth.ExpectExit() @@ -164,12 +174,12 @@ func TestUnlockFlagWrongPassword(t *testing.T) { geth.Expect(` Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "wrong1"}} +Password: {{.InputLine "wrong1"}} Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 2/3 -Passphrase: {{.InputLine "wrong2"}} +Password: {{.InputLine "wrong2"}} Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 3/3 -Passphrase: {{.InputLine "wrong3"}} -Fatal: Failed to unlock account f466859ead1932d743d622cb74fc058882e8648a (could not decrypt key with given passphrase) +Password: {{.InputLine "wrong3"}} +Fatal: Failed to unlock account f466859ead1932d743d622cb74fc058882e8648a (could not decrypt key with given password) `) } @@ -183,9 +193,9 @@ func TestUnlockFlagMultiIndex(t *testing.T) { geth.Expect(` Unlocking account 0 | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} Unlocking account 2 | Attempt 1/3 -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} `) geth.ExpectExit() @@ -228,7 +238,7 @@ func TestUnlockFlagPasswordFileWrongPassword(t *testing.T) { "--password", "testdata/wrong-passwords.txt", "--unlock", "0,2") defer geth.ExpectExit() geth.Expect(` -Fatal: Failed to unlock account 0 (could not decrypt key with given passphrase) +Fatal: Failed to unlock account 0 (could not decrypt key with given password) `) } @@ -248,12 +258,12 @@ func TestUnlockFlagAmbiguous(t *testing.T) { geth.Expect(` Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "foobar"}} +Password: {{.InputLine "foobar"}} Multiple key files exist for address f466859ead1932d743d622cb74fc058882e8648a: keystore://{{keypath "1"}} keystore://{{keypath "2"}} -Testing your passphrase against all of them... -Your passphrase unlocked keystore://{{keypath "1"}} +Testing your password against all of them... +Your password unlocked keystore://{{keypath "1"}} In order to avoid this warning, you need to remove the following duplicate key files: keystore://{{keypath "2"}} `) @@ -285,11 +295,11 @@ func TestUnlockFlagAmbiguousWrongPassword(t *testing.T) { geth.Expect(` Unlocking account f466859ead1932d743d622cb74fc058882e8648a | Attempt 1/3 !! Unsupported terminal, password will be echoed. -Passphrase: {{.InputLine "wrong"}} +Password: {{.InputLine "wrong"}} Multiple key files exist for address f466859ead1932d743d622cb74fc058882e8648a: keystore://{{keypath "1"}} keystore://{{keypath "2"}} -Testing your passphrase against all of them... +Testing your password against all of them... Fatal: None of the listed files could be unlocked. `) geth.ExpectExit() diff --git a/cmd/geth/bugcmd.go b/cmd/geth/bugcmd.go deleted file mode 100644 index 0adc69d1fab4..000000000000 --- a/cmd/geth/bugcmd.go +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net/url" - "os/exec" - "runtime" - "strings" - - "github.com/ethereum/go-ethereum/cmd/internal/browser" - "github.com/ethereum/go-ethereum/params" - - "github.com/ethereum/go-ethereum/cmd/utils" - cli "gopkg.in/urfave/cli.v1" -) - -var bugCommand = cli.Command{ - Action: utils.MigrateFlags(reportBug), - Name: "bug", - Usage: "opens a window to report a bug on the geth repo", - ArgsUsage: " ", - Category: "MISCELLANEOUS COMMANDS", -} - -const issueURL = "https://github.com/ethereum/go-ethereum/issues/new" - -// reportBug reports a bug by opening a new URL to the go-ethereum GH issue -// tracker and setting default values as the issue body. -func reportBug(ctx *cli.Context) error { - // execute template and write contents to buff - var buff bytes.Buffer - - fmt.Fprintln(&buff, "#### System information") - fmt.Fprintln(&buff) - fmt.Fprintln(&buff, "Version:", params.VersionWithMeta) - fmt.Fprintln(&buff, "Go Version:", runtime.Version()) - fmt.Fprintln(&buff, "OS:", runtime.GOOS) - printOSDetails(&buff) - fmt.Fprintln(&buff, header) - - // open a new GH issue - if !browser.Open(issueURL + "?body=" + url.QueryEscape(buff.String())) { - fmt.Printf("Please file a new issue at %s using this template:\n\n%s", issueURL, buff.String()) - } - return nil -} - -// copied from the Go source. Copyright 2017 The Go Authors -func printOSDetails(w io.Writer) { - switch runtime.GOOS { - case "darwin": - printCmdOut(w, "uname -v: ", "uname", "-v") - printCmdOut(w, "", "sw_vers") - case "linux": - printCmdOut(w, "uname -sr: ", "uname", "-sr") - printCmdOut(w, "", "lsb_release", "-a") - case "openbsd", "netbsd", "freebsd", "dragonfly": - printCmdOut(w, "uname -v: ", "uname", "-v") - case "solaris": - out, err := ioutil.ReadFile("/etc/release") - if err == nil { - fmt.Fprintf(w, "/etc/release: %s\n", out) - } else { - fmt.Printf("failed to read /etc/release: %v\n", err) - } - } -} - -// printCmdOut prints the output of running the given command. -// It ignores failures; 'go bug' is best effort. -// -// copied from the Go source. Copyright 2017 The Go Authors -func printCmdOut(w io.Writer, prefix, path string, args ...string) { - cmd := exec.Command(path, args...) - out, err := cmd.Output() - if err != nil { - fmt.Printf("%s %s: %v\n", path, strings.Join(args, " "), err) - return - } - fmt.Fprintf(w, "%s%s\n", prefix, bytes.TrimSpace(out)) -} - -const header = ` -#### Expected behaviour - - -#### Actual behaviour - - -#### Steps to reproduce the behaviour - - -#### Backtrace -` diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 62a0ce9463f1..d82e550a1f02 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -20,6 +20,7 @@ import ( "encoding/json" "fmt" "os" + "path/filepath" "runtime" "strconv" "sync/atomic" @@ -29,14 +30,13 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/trie" - "github.com/syndtr/goleveldb/leveldb/util" "gopkg.in/urfave/cli.v1" ) @@ -162,12 +162,32 @@ Remove blockchain and state databases`, utils.DataDirFlag, utils.CacheFlag, utils.SyncModeFlag, + utils.IterativeOutputFlag, + utils.ExcludeCodeFlag, + utils.ExcludeStorageFlag, + utils.IncludeIncompletesFlag, }, Category: "BLOCKCHAIN COMMANDS", Description: ` The arguments are interpreted as block numbers or hashes. Use "ethereum dump 0" to dump the genesis block.`, } + inspectCommand = cli.Command{ + Action: utils.MigrateFlags(inspect), + Name: "inspect", + Usage: "Inspect the storage size for each type of data in the database", + ArgsUsage: " ", + Flags: []cli.Flag{ + utils.DataDirFlag, + utils.AncientFlag, + utils.CacheFlag, + utils.TestnetFlag, + utils.RinkebyFlag, + utils.GoerliFlag, + utils.SyncModeFlag, + }, + Category: "BLOCKCHAIN COMMANDS", + } ) // initGenesis will initialise the given JSON format genesis file and writes it as @@ -190,8 +210,10 @@ func initGenesis(ctx *cli.Context) error { } // Open an initialise both full and light databases stack := makeFullNode(ctx) + defer stack.Close() + for _, name := range []string{"chaindata", "lightchaindata"} { - chaindb, err := stack.OpenDatabase(name, 0, 0) + chaindb, err := stack.OpenDatabase(name, 0, 0, "") if err != nil { utils.Fatalf("Failed to open database: %v", err) } @@ -199,6 +221,7 @@ func initGenesis(ctx *cli.Context) error { if err != nil { utils.Fatalf("Failed to write genesis block: %v", err) } + chaindb.Close() log.Info("Successfully wrote genesis state", "database", name, "hash", hash) } return nil @@ -209,8 +232,10 @@ func importChain(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - chain, chainDb := utils.MakeChain(ctx, stack) - defer chainDb.Close() + defer stack.Close() + + chain, db := utils.MakeChain(ctx, stack) + defer db.Close() // Start periodically gathering memory profiles var peakMemAlloc, peakMemSys uint64 @@ -245,23 +270,18 @@ func importChain(ctx *cli.Context) error { fmt.Printf("Import done in %v.\n\n", time.Since(start)) // Output pre-compaction stats mostly to see the import trashing - db := chainDb.(*ethdb.LDBDatabase) - - stats, err := db.LDB().GetProperty("leveldb.stats") + stats, err := db.Stat("leveldb.stats") if err != nil { utils.Fatalf("Failed to read database stats: %v", err) } fmt.Println(stats) - ioStats, err := db.LDB().GetProperty("leveldb.iostats") + ioStats, err := db.Stat("leveldb.iostats") if err != nil { utils.Fatalf("Failed to read database iostats: %v", err) } fmt.Println(ioStats) - fmt.Printf("Trie cache misses: %d\n", trie.CacheMisses()) - fmt.Printf("Trie cache unloads: %d\n\n", trie.CacheUnloads()) - // Print the memory statistics used by the importing mem := new(runtime.MemStats) runtime.ReadMemStats(mem) @@ -271,30 +291,29 @@ func importChain(ctx *cli.Context) error { fmt.Printf("Allocations: %.3f million\n", float64(mem.Mallocs)/1000000) fmt.Printf("GC pause: %v\n\n", time.Duration(mem.PauseTotalNs)) - if ctx.GlobalIsSet(utils.NoCompactionFlag.Name) { + if ctx.GlobalBool(utils.NoCompactionFlag.Name) { return nil } // Compact the entire database to more accurately measure disk io and print the stats start = time.Now() fmt.Println("Compacting entire database...") - if err = db.LDB().CompactRange(util.Range{}); err != nil { + if err = db.Compact(nil, nil); err != nil { utils.Fatalf("Compaction failed: %v", err) } fmt.Printf("Compaction done in %v.\n\n", time.Since(start)) - stats, err = db.LDB().GetProperty("leveldb.stats") + stats, err = db.Stat("leveldb.stats") if err != nil { utils.Fatalf("Failed to read database stats: %v", err) } fmt.Println(stats) - ioStats, err = db.LDB().GetProperty("leveldb.iostats") + ioStats, err = db.Stat("leveldb.iostats") if err != nil { utils.Fatalf("Failed to read database iostats: %v", err) } fmt.Println(ioStats) - return nil } @@ -303,6 +322,8 @@ func exportChain(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) + defer stack.Close() + chain, _ := utils.MakeChain(ctx, stack) start := time.Now() @@ -336,10 +357,12 @@ func importPreimages(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase) + defer stack.Close() + db := utils.MakeChainDatabase(ctx, stack) start := time.Now() - if err := utils.ImportPreimages(diskdb, ctx.Args().First()); err != nil { + + if err := utils.ImportPreimages(db, ctx.Args().First()); err != nil { utils.Fatalf("Import error: %v\n", err) } fmt.Printf("Import done in %v\n", time.Since(start)) @@ -352,10 +375,12 @@ func exportPreimages(ctx *cli.Context) error { utils.Fatalf("This command requires an argument.") } stack := makeFullNode(ctx) - diskdb := utils.MakeChainDatabase(ctx, stack).(*ethdb.LDBDatabase) + defer stack.Close() + db := utils.MakeChainDatabase(ctx, stack) start := time.Now() - if err := utils.ExportPreimages(diskdb, ctx.Args().First()); err != nil { + + if err := utils.ExportPreimages(db, ctx.Args().First()); err != nil { utils.Fatalf("Export error: %v\n", err) } fmt.Printf("Export done in %v\n", time.Since(start)) @@ -364,18 +389,27 @@ func exportPreimages(ctx *cli.Context) error { func copyDb(ctx *cli.Context) error { // Ensure we have a source chain directory to copy - if len(ctx.Args()) != 1 { + if len(ctx.Args()) < 1 { utils.Fatalf("Source chaindata directory path argument missing") } + if len(ctx.Args()) < 2 { + utils.Fatalf("Source ancient chain directory path argument missing") + } // Initialize a new chain for the running node to sync into stack := makeFullNode(ctx) + defer stack.Close() + chain, chainDb := utils.MakeChain(ctx, stack) + syncMode := *utils.GlobalTextMarshaler(ctx, utils.SyncModeFlag.Name).(*downloader.SyncMode) - syncmode := *utils.GlobalTextMarshaler(ctx, utils.SyncModeFlag.Name).(*downloader.SyncMode) - dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil) + var syncBloom *trie.SyncBloom + if syncMode == downloader.FastSync { + syncBloom = trie.NewSyncBloom(uint64(ctx.GlobalInt(utils.CacheFlag.Name)/2), chainDb) + } + dl := downloader.New(0, chainDb, syncBloom, new(event.TypeMux), chain, nil, nil) // Create a source peer to satisfy downloader requests from - db, err := ethdb.NewDatabase(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name), 256) + db, err := rawdb.NewDBWithFreezer(ctx.Args().First(), ctx.GlobalInt(utils.CacheFlag.Name)/2, 256, ctx.Args().Get(1), "") if err != nil { return err } @@ -391,7 +425,7 @@ func copyDb(ctx *cli.Context) error { start := time.Now() currentHeader := hc.CurrentHeader() - if err = dl.Synchronise("local", currentHeader.Hash(), hc.GetTd(currentHeader.Hash(), currentHeader.Number.Uint64()), syncmode); err != nil { + if err = dl.Synchronise("local", currentHeader.Hash(), hc.GetTd(currentHeader.Hash(), currentHeader.Number.Uint64()), syncMode); err != nil { return err } for dl.Synchronising() { @@ -402,46 +436,79 @@ func copyDb(ctx *cli.Context) error { // Compact the entire database to remove any sync overhead start = time.Now() fmt.Println("Compacting entire database...") - if err = chainDb.(*ethdb.LDBDatabase).LDB().CompactRange(util.Range{}); err != nil { + if err = db.Compact(nil, nil); err != nil { utils.Fatalf("Compaction failed: %v", err) } fmt.Printf("Compaction done in %v.\n\n", time.Since(start)) - return nil } func removeDB(ctx *cli.Context) error { - stack, _ := makeConfigNode(ctx) - - for _, name := range []string{"chaindata", "lightchaindata"} { - // Ensure the database exists in the first place - logger := log.New("database", name) + stack, config := makeConfigNode(ctx) - dbdir := stack.ResolvePath(name) - if !common.FileExist(dbdir) { - logger.Info("Database doesn't exist, skipping", "path", dbdir) - continue - } - // Confirm removal and execute - fmt.Println(dbdir) - confirm, err := console.Stdin.PromptConfirm("Remove this database?") - switch { - case err != nil: - utils.Fatalf("%v", err) - case !confirm: - logger.Warn("Database deletion aborted") - default: - start := time.Now() - os.RemoveAll(dbdir) - logger.Info("Database successfully deleted", "elapsed", common.PrettyDuration(time.Since(start))) - } + // Remove the full node state database + path := stack.ResolvePath("chaindata") + if common.FileExist(path) { + confirmAndRemoveDB(path, "full node state database") + } else { + log.Info("Full node state database missing", "path", path) + } + // Remove the full node ancient database + path = config.Eth.DatabaseFreezer + switch { + case path == "": + path = filepath.Join(stack.ResolvePath("chaindata"), "ancient") + case !filepath.IsAbs(path): + path = config.Node.ResolvePath(path) + } + if common.FileExist(path) { + confirmAndRemoveDB(path, "full node ancient database") + } else { + log.Info("Full node ancient database missing", "path", path) + } + // Remove the light node database + path = stack.ResolvePath("lightchaindata") + if common.FileExist(path) { + confirmAndRemoveDB(path, "light node database") + } else { + log.Info("Light node database missing", "path", path) } return nil } +// confirmAndRemoveDB prompts the user for a last confirmation and removes the +// folder if accepted. +func confirmAndRemoveDB(database string, kind string) { + confirm, err := console.Stdin.PromptConfirm(fmt.Sprintf("Remove %s (%s)?", kind, database)) + switch { + case err != nil: + utils.Fatalf("%v", err) + case !confirm: + log.Info("Database deletion skipped", "path", database) + default: + start := time.Now() + filepath.Walk(database, func(path string, info os.FileInfo, err error) error { + // If we're at the top level folder, recurse into + if path == database { + return nil + } + // Delete all the files, but not subfolders + if !info.IsDir() { + os.Remove(path) + return nil + } + return filepath.SkipDir + }) + log.Info("Database successfully deleted", "path", database, "elapsed", common.PrettyDuration(time.Since(start))) + } +} + func dump(ctx *cli.Context) error { stack := makeFullNode(ctx) + defer stack.Close() + chain, chainDb := utils.MakeChain(ctx, stack) + defer chainDb.Close() for _, arg := range ctx.Args() { var block *types.Block if hashish(arg) { @@ -458,13 +525,33 @@ func dump(ctx *cli.Context) error { if err != nil { utils.Fatalf("could not create new state: %v", err) } - fmt.Printf("%s\n", state.Dump()) + excludeCode := ctx.Bool(utils.ExcludeCodeFlag.Name) + excludeStorage := ctx.Bool(utils.ExcludeStorageFlag.Name) + includeMissing := ctx.Bool(utils.IncludeIncompletesFlag.Name) + if ctx.Bool(utils.IterativeOutputFlag.Name) { + state.IterativeDump(excludeCode, excludeStorage, !includeMissing, json.NewEncoder(os.Stdout)) + } else { + if includeMissing { + fmt.Printf("If you want to include accounts with missing preimages, you need iterative output, since" + + " otherwise the accounts will overwrite each other in the resulting mapping.") + } + fmt.Printf("%v %s\n", includeMissing, state.Dump(excludeCode, excludeStorage, false)) + } } } - chainDb.Close() return nil } +func inspect(ctx *cli.Context) error { + node, _ := makeConfigNode(ctx) + defer node.Close() + + _, chainDb := utils.MakeChain(ctx, node) + defer chainDb.Close() + + return rawdb.InspectDatabase(chainDb) +} + // hashish returns true for strings that look like hashes. func hashish(x string) bool { _, err := strconv.Atoi(x) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 90dd857bf464..6aaa743c1289 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -100,7 +100,7 @@ func loadConfig(file string, cfg *gethConfig) error { func defaultNodeConfig() node.Config { cfg := node.DefaultConfig cfg.Name = clientIdentifier - cfg.Version = params.VersionWithCommit(gitCommit) + cfg.Version = params.VersionWithCommit(gitCommit, gitDate) cfg.HTTPModules = append(cfg.HTTPModules, "eth", "shh") cfg.WSModules = append(cfg.WSModules, "eth", "shh") cfg.IPCPath = "geth.ipc" @@ -152,8 +152,8 @@ func enableWhisper(ctx *cli.Context) bool { func makeFullNode(ctx *cli.Context) *node.Node { stack, cfg := makeConfigNode(ctx) - if ctx.GlobalIsSet(utils.ConstantinopleOverrideFlag.Name) { - cfg.Eth.ConstantinopleOverride = new(big.Int).SetUint64(ctx.GlobalUint64(utils.ConstantinopleOverrideFlag.Name)) + if ctx.GlobalIsSet(utils.OverrideIstanbulFlag.Name) { + cfg.Eth.OverrideIstanbul = new(big.Int).SetUint64(ctx.GlobalUint64(utils.OverrideIstanbulFlag.Name)) } utils.RegisterEthService(stack, &cfg.Eth) @@ -175,7 +175,10 @@ func makeFullNode(ctx *cli.Context) *node.Node { } utils.RegisterShhService(stack, &cfg.Shh) } - + // Configure GraphQL if requested + if ctx.GlobalIsSet(utils.GraphQLEnabledFlag.Name) { + utils.RegisterGraphQLService(stack, cfg.Node.GraphQLEndpoint(), cfg.Node.GraphQLCors, cfg.Node.GraphQLVirtualHosts, cfg.Node.HTTPTimeouts) + } // Add the Ethereum Stats daemon if requested. if cfg.Ethstats.URL != "" { utils.RegisterEthStatsService(stack, cfg.Ethstats.URL) diff --git a/cmd/geth/consolecmd.go b/cmd/geth/consolecmd.go index 2500a969cf5e..83614f60e18e 100644 --- a/cmd/geth/consolecmd.go +++ b/cmd/geth/consolecmd.go @@ -77,9 +77,10 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/JavaScript-Cons // same time. func localConsole(ctx *cli.Context) error { // Create and start the node based on the CLI flags + prepare(ctx) node := makeFullNode(ctx) startNode(ctx, node) - defer node.Stop() + defer node.Close() // Attach to the newly started node and start the JavaScript console client, err := node.Attach() @@ -180,7 +181,7 @@ func ephemeralConsole(ctx *cli.Context) error { // Create and start the node based on the CLI flags node := makeFullNode(ctx) startNode(ctx, node) - defer node.Stop() + defer node.Close() // Attach to the newly started node and start the JavaScript console client, err := node.Attach() diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go index 34ba877020c0..33c83b7ede82 100644 --- a/cmd/geth/consolecmd_test.go +++ b/cmd/geth/consolecmd_test.go @@ -50,7 +50,7 @@ func TestConsoleWelcome(t *testing.T) { geth.SetTemplateFunc("goos", func() string { return runtime.GOOS }) geth.SetTemplateFunc("goarch", func() string { return runtime.GOARCH }) geth.SetTemplateFunc("gover", runtime.Version) - geth.SetTemplateFunc("gethver", func() string { return params.VersionWithMeta }) + geth.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") }) geth.SetTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) }) geth.SetTemplateFunc("apis", func() string { return ipcAPIs }) @@ -87,7 +87,7 @@ func TestIPCAttachWelcome(t *testing.T) { "--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--etherbase", coinbase, "--shh", "--ipcpath", ipc) - time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open + waitForEndpoint(t, ipc, 3*time.Second) testAttachWelcome(t, geth, "ipc:"+ipc, ipcAPIs) geth.Interrupt() @@ -101,8 +101,9 @@ func TestHTTPAttachWelcome(t *testing.T) { "--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--etherbase", coinbase, "--rpc", "--rpcport", port) - time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open - testAttachWelcome(t, geth, "http://localhost:"+port, httpAPIs) + endpoint := "http://127.0.0.1:" + port + waitForEndpoint(t, endpoint, 3*time.Second) + testAttachWelcome(t, geth, endpoint, httpAPIs) geth.Interrupt() geth.ExpectExit() @@ -116,8 +117,9 @@ func TestWSAttachWelcome(t *testing.T) { "--port", "0", "--maxpeers", "0", "--nodiscover", "--nat", "none", "--etherbase", coinbase, "--ws", "--wsport", port) - time.Sleep(2 * time.Second) // Simple way to wait for the RPC endpoint to open - testAttachWelcome(t, geth, "ws://localhost:"+port, httpAPIs) + endpoint := "ws://127.0.0.1:" + port + waitForEndpoint(t, endpoint, 3*time.Second) + testAttachWelcome(t, geth, endpoint, httpAPIs) geth.Interrupt() geth.ExpectExit() @@ -133,7 +135,7 @@ func testAttachWelcome(t *testing.T, geth *testgeth, endpoint, apis string) { attach.SetTemplateFunc("goos", func() string { return runtime.GOOS }) attach.SetTemplateFunc("goarch", func() string { return runtime.GOARCH }) attach.SetTemplateFunc("gover", runtime.Version) - attach.SetTemplateFunc("gethver", func() string { return params.VersionWithMeta }) + attach.SetTemplateFunc("gethver", func() string { return params.VersionWithCommit("", "") }) attach.SetTemplateFunc("etherbase", func() string { return geth.Etherbase }) attach.SetTemplateFunc("niltime", func() string { return time.Unix(0, 0).Format(time.RFC1123) }) attach.SetTemplateFunc("ipc", func() bool { return strings.HasPrefix(endpoint, "ipc") }) diff --git a/cmd/geth/dao_test.go b/cmd/geth/dao_test.go index 52983ff2af2c..cb06038ec8bc 100644 --- a/cmd/geth/dao_test.go +++ b/cmd/geth/dao_test.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -121,7 +120,7 @@ func testDAOForkBlockNewChain(t *testing.T, test int, genesis string, expectBloc } // Retrieve the DAO config flag from the database path := filepath.Join(datadir, "geth", "chaindata") - db, err := ethdb.NewLDBDatabase(path, 0, 0) + db, err := rawdb.NewLevelDBDatabase(path, 0, 0, "") if err != nil { t.Fatalf("test %d: failed to open test database: %v", test, err) } diff --git a/cmd/geth/governancedeploy.go b/cmd/geth/governancedeploy.go index e3b8527fb56f..21bf61eaf2d1 100644 --- a/cmd/geth/governancedeploy.go +++ b/cmd/geth/governancedeploy.go @@ -52,7 +52,8 @@ func getInitialGovernanceMembersAndNodes(configJsFile string) (nodes []byte, sta return nil, nil, nil, nil, err } - b1.Write(metclient.PackNum(reflect.ValueOf(m.Addr.Big()))) + addr := new(big.Int).SetBytes(m.Addr[:]) + b1.Write(metclient.PackNum(reflect.ValueOf(addr))) b1.Write(metclient.PackNum(reflect.ValueOf(len(m.Name)))) b1.Write([]byte(m.Name)) b1.Write(metclient.PackNum(reflect.ValueOf(len(id)))) @@ -61,7 +62,7 @@ func getInitialGovernanceMembersAndNodes(configJsFile string) (nodes []byte, sta b1.Write([]byte(m.Ip)) b1.Write(metclient.PackNum(reflect.ValueOf(m.Port))) - b2.Write(metclient.PackNum(reflect.ValueOf(m.Addr.Big()))) + b2.Write(metclient.PackNum(reflect.ValueOf(addr))) b2.Write(metclient.PackNum(reflect.ValueOf(m.Stake))) } nodes = b1.Bytes() diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 4f427f373dc7..c6fc7608b31c 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -34,10 +34,13 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/console" "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/internal/debug" + "github.com/ethereum/go-ethereum/les" "github.com/ethereum/go-ethereum/log" metadium "github.com/ethereum/go-ethereum/metadium" "github.com/ethereum/go-ethereum/metrics" @@ -52,8 +55,9 @@ const ( var ( // Git SHA1 commit hash of the release (set via linker flags) gitCommit = "" + gitDate = "" // The app that holds all commands and flags. - app = utils.NewApp(gitCommit, "the go-ethereum command line interface") + app = utils.NewApp(gitCommit, gitDate, "the go-ethereum command line interface") // flags that configure the node nodeFlags = []cli.Flag{ utils.IdentityFlag, @@ -63,8 +67,12 @@ var ( utils.BootnodesV4Flag, utils.BootnodesV5Flag, utils.DataDirFlag, + utils.AncientFlag, utils.KeyStoreDirFlag, + utils.ExternalSignerFlag, utils.NoUSBFlag, + utils.SmartCardDaemonPathFlag, + utils.OverrideIstanbulFlag, utils.DashboardEnabledFlag, utils.DashboardAddrFlag, utils.DashboardPortFlag, @@ -87,16 +95,24 @@ var ( utils.TxPoolGlobalQueueFlag, utils.TxPoolLifetimeFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, - utils.LightServFlag, - utils.LightPeersFlag, + utils.LightServeFlag, + utils.LightLegacyServFlag, + utils.LightIngressFlag, + utils.LightEgressFlag, + utils.LightMaxPeersFlag, + utils.LightLegacyPeersFlag, utils.LightKDFFlag, + utils.UltraLightServersFlag, + utils.UltraLightFractionFlag, + utils.UltraLightOnlyAnnounceFlag, utils.WhitelistFlag, utils.CacheFlag, utils.CacheDatabaseFlag, utils.CacheTrieFlag, utils.CacheGCFlag, - utils.TrieCacheGenFlag, + utils.CacheNoPrefetchFlag, utils.ListenPortFlag, utils.MaxPeersFlag, utils.MaxPendingPeersFlag, @@ -128,11 +144,7 @@ var ( utils.GoerliFlag, utils.VMEnableDebugFlag, utils.NetworkIdFlag, - utils.ConstantinopleOverrideFlag, - utils.RPCCORSDomainFlag, - utils.RPCVirtualHostsFlag, utils.EthStatsURLFlag, - utils.MetricsEnabledFlag, utils.FakePoWFlag, utils.NoCompactionFlag, utils.GpoBlocksFlag, @@ -146,6 +158,13 @@ var ( utils.RPCEnabledFlag, utils.RPCListenAddrFlag, utils.RPCPortFlag, + utils.RPCCORSDomainFlag, + utils.RPCVirtualHostsFlag, + utils.GraphQLEnabledFlag, + utils.GraphQLListenAddrFlag, + utils.GraphQLPortFlag, + utils.GraphQLCORSDomainFlag, + utils.GraphQLVirtualHostsFlag, utils.RPCApiFlag, utils.WSEnabledFlag, utils.WSListenAddrFlag, @@ -154,6 +173,8 @@ var ( utils.WSAllowedOriginsFlag, utils.IPCDisabledFlag, utils.IPCPathFlag, + utils.InsecureUnlockAllowedFlag, + utils.RPCGlobalGasCap, } whisperFlags = []cli.Flag{ @@ -164,6 +185,8 @@ var ( } metricsFlags = []cli.Flag{ + utils.MetricsEnabledFlag, + utils.MetricsEnabledExpensiveFlag, utils.MetricsEnableInfluxDBFlag, utils.MetricsInfluxDBEndpointFlag, utils.MetricsInfluxDBDatabaseFlag, @@ -202,8 +225,7 @@ func init() { copydbCommand, removedbCommand, dumpCommand, - // See monitorcmd.go: - monitorCommand, + inspectCommand, // See accountcmd.go: accountCommand, walletCommand, @@ -215,10 +237,11 @@ func init() { makecacheCommand, makedagCommand, versionCommand, - bugCommand, licenseCommand, // See config.go dumpConfigCommand, + // See retesteth.go + retestethCommand, metadiumCommand, } sort.Sort(cli.CommandsByName(app.Commands)) @@ -248,28 +271,6 @@ func init() { if err := debug.Setup(ctx, logdir); err != nil { return err } - // Cap the cache allowance and tune the garbage collector - var mem gosigar.Mem - if err := mem.Get(); err == nil { - allowance := int(mem.Total / 1024 / 1024 / 3) - if cache := ctx.GlobalInt(utils.CacheFlag.Name); cache > allowance { - log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance) - ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(allowance)) - } - } - // Ensure Go's GC ignores the database cache for trigger percentage - cache := ctx.GlobalInt(utils.CacheFlag.Name) - gogc := math.Max(20, math.Min(100, 100/(float64(cache)/1024))) - - log.Debug("Sanitizing Go's GC trigger", "percent", int(gogc)) - godebug.SetGCPercent(int(gogc)) - - // Start metrics export if enabled - utils.SetupMetrics(ctx) - - // Start system runtime metrics collection - go metrics.CollectProcessMetrics(3 * time.Second) - return nil } @@ -287,6 +288,50 @@ func main() { } } +// prepare manipulates memory cache allowance and setups metric system. +// This function should be called before launching devp2p stack. +func prepare(ctx *cli.Context) { + // If we're a full node on mainnet without --cache specified, bump default cache allowance + if ctx.GlobalString(utils.SyncModeFlag.Name) != "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) && !ctx.GlobalIsSet(utils.NetworkIdFlag.Name) { + // Make sure we're not on any supported preconfigured testnet either + if !ctx.GlobalIsSet(utils.TestnetFlag.Name) && !ctx.GlobalIsSet(utils.RinkebyFlag.Name) && !ctx.GlobalIsSet(utils.GoerliFlag.Name) && !ctx.GlobalIsSet(utils.DeveloperFlag.Name) { + // Nope, we're really on mainnet. Bump that cache up! + log.Info("Bumping default cache on mainnet", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 4096) + ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(4096)) + } + } + // If we're running a light client on any network, drop the cache to some meaningfully low amount + if ctx.GlobalString(utils.SyncModeFlag.Name) == "light" && !ctx.GlobalIsSet(utils.CacheFlag.Name) { + log.Info("Dropping default light client cache", "provided", ctx.GlobalInt(utils.CacheFlag.Name), "updated", 128) + ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(128)) + } + // Cap the cache allowance and tune the garbage collector + var mem gosigar.Mem + // Workaround until OpenBSD support lands into gosigar + // Check https://github.com/elastic/gosigar#supported-platforms + if runtime.GOOS != "openbsd" { + if err := mem.Get(); err == nil { + allowance := int(mem.Total / 1024 / 1024 / 3) + if cache := ctx.GlobalInt(utils.CacheFlag.Name); cache > allowance { + log.Warn("Sanitizing cache to Go's GC limits", "provided", cache, "updated", allowance) + ctx.GlobalSet(utils.CacheFlag.Name, strconv.Itoa(allowance)) + } + } + } + // Ensure Go's GC ignores the database cache for trigger percentage + cache := ctx.GlobalInt(utils.CacheFlag.Name) + gogc := math.Max(20, math.Min(100, 100/(float64(cache)/1024))) + + log.Debug("Sanitizing Go's GC trigger", "percent", int(gogc)) + godebug.SetGCPercent(int(gogc)) + + // Start metrics export if enabled + utils.SetupMetrics(ctx) + + // Start system runtime metrics collection + go metrics.CollectProcessMetrics(3 * time.Second) +} + // geth is the main entry point into the system if no special subcommand is ran. // It creates a default node based on the command line arguments and runs it in // blocking mode, waiting for it to be shut down. @@ -294,7 +339,9 @@ func geth(ctx *cli.Context) error { if args := ctx.Args(); len(args) > 0 { return fmt.Errorf("invalid command: %q", args[0]) } + prepare(ctx) node := makeFullNode(ctx) + defer node.Close() startNode(ctx, node) node.Wait() return nil @@ -313,27 +360,39 @@ func startNode(ctx *cli.Context, stack *node.Node) { metadium.StartAdmin(stack, ctx.GlobalString(utils.DataDirFlag.Name)) // Unlock any account specifically requested - ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) + unlockAccounts(ctx, stack) - passwords := utils.MakePasswordList(ctx) - unlocks := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") - for i, account := range unlocks { - if trimmed := strings.TrimSpace(account); trimmed != "" { - unlockAccount(ctx, ks, trimmed, i, passwords) - } - } // Register wallet event handlers to open and auto-derive wallets events := make(chan accounts.WalletEvent, 16) stack.AccountManager().Subscribe(events) - go func() { - // Create a chain state reader for self-derivation - rpcClient, err := stack.Attach() - if err != nil { - utils.Fatalf("Failed to attach to self: %v", err) + // Create a client to interact with local geth node. + rpcClient, err := stack.Attach() + if err != nil { + utils.Fatalf("Failed to attach to self: %v", err) + } + ethClient := ethclient.NewClient(rpcClient) + + // Set contract backend for ethereum service if local node + // is serving LES requests. + if ctx.GlobalInt(utils.LightLegacyServFlag.Name) > 0 || ctx.GlobalInt(utils.LightServeFlag.Name) > 0 { + var ethService *eth.Ethereum + if err := stack.Service(ðService); err != nil { + utils.Fatalf("Failed to retrieve ethereum service: %v", err) + } + ethService.SetContractBackend(ethClient) + } + // Set contract backend for les service if local node is + // running as a light client. + if ctx.GlobalString(utils.SyncModeFlag.Name) == "light" { + var lesService *les.LightEthereum + if err := stack.Service(&lesService); err != nil { + utils.Fatalf("Failed to retrieve light ethereum service: %v", err) } - stateReader := ethclient.NewClient(rpcClient) + lesService.SetContractBackend(ethClient) + } + go func() { // Open any wallets already attached for _, wallet := range stack.AccountManager().Wallets() { if err := wallet.Open(""); err != nil { @@ -351,11 +410,13 @@ func startNode(ctx *cli.Context, stack *node.Node) { status, _ := event.Wallet.Status() log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status) - derivationPath := accounts.DefaultBaseDerivationPath + var derivationPaths []accounts.DerivationPath if event.Wallet.URL().Scheme == "ledger" { - derivationPath = accounts.DefaultLedgerBaseDerivationPath + derivationPaths = append(derivationPaths, accounts.LegacyLedgerBaseDerivationPath) } - event.Wallet.SelfDerive(derivationPath, stateReader) + derivationPaths = append(derivationPaths, accounts.DefaultBaseDerivationPath) + + event.Wallet.SelfDerive(derivationPaths, ethClient) case accounts.WalletDropped: log.Info("Old wallet dropped", "url", event.Wallet.URL()) @@ -363,6 +424,31 @@ func startNode(ctx *cli.Context, stack *node.Node) { } } }() + + // Spawn a standalone goroutine for status synchronization monitoring, + // close the node when synchronization is complete if user required. + if ctx.GlobalBool(utils.ExitWhenSyncedFlag.Name) { + go func() { + sub := stack.EventMux().Subscribe(downloader.DoneEvent{}) + defer sub.Unsubscribe() + for { + event := <-sub.Chan() + if event == nil { + continue + } + done, ok := event.Data.(downloader.DoneEvent) + if !ok { + continue + } + if timestamp := time.Unix(int64(done.Latest.Time), 0); time.Since(timestamp) < 10*time.Minute { + log.Info("Synchronisation completed", "latestnum", done.Latest.Number, "latesthash", done.Latest.Hash(), + "age", common.PrettyAge(timestamp)) + stack.Stop() + } + } + }() + } + // Start auxiliary services if enabled if ctx.GlobalBool(utils.MiningEnabledFlag.Name) || ctx.GlobalBool(utils.DeveloperFlag.Name) { // Mining only makes sense if a full Ethereum node is running @@ -423,3 +509,28 @@ func limitMaxRss(max int64) { } } } + +// unlockAccounts unlocks any account specifically requested. +func unlockAccounts(ctx *cli.Context, stack *node.Node) { + var unlocks []string + inputs := strings.Split(ctx.GlobalString(utils.UnlockedAccountFlag.Name), ",") + for _, input := range inputs { + if trimmed := strings.TrimSpace(input); trimmed != "" { + unlocks = append(unlocks, trimmed) + } + } + // Short circuit if there is no account to unlock. + if len(unlocks) == 0 { + return + } + // If insecure account unlocking is not allowed if node's APIs are exposed to external. + // Print warning log to user and skip unlocking. + if !stack.Config().InsecureUnlockAllowed && stack.Config().ExtRPCEnabled() { + utils.Fatalf("Account unlock with HTTP access is forbidden!") + } + ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) + passwords := utils.MakePasswordList(ctx) + for i, account := range unlocks { + unlockAccount(ks, account, i, passwords) + } +} diff --git a/cmd/geth/misccmd.go b/cmd/geth/misccmd.go index f62e254786d5..39ca47872bad 100644 --- a/cmd/geth/misccmd.go +++ b/cmd/geth/misccmd.go @@ -112,6 +112,9 @@ func version(ctx *cli.Context) error { if gitCommit != "" { fmt.Println("Git Commit:", gitCommit) } + if gitDate != "" { + fmt.Println("Git Commit Date:", gitDate) + } fmt.Println("Architecture:", runtime.GOARCH) fmt.Println("Protocol Versions:", eth.ProtocolVersions) fmt.Println("Network Id:", eth.DefaultConfig.NetworkId) diff --git a/cmd/geth/monitorcmd.go b/cmd/geth/monitorcmd.go deleted file mode 100644 index e4ba96a7a681..000000000000 --- a/cmd/geth/monitorcmd.go +++ /dev/null @@ -1,351 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "fmt" - "math" - "reflect" - "runtime" - "sort" - "strings" - "time" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/rpc" - "github.com/gizak/termui" - "gopkg.in/urfave/cli.v1" -) - -var ( - monitorCommandAttachFlag = cli.StringFlag{ - Name: "attach", - Value: node.DefaultIPCEndpoint(clientIdentifier), - Usage: "API endpoint to attach to", - } - monitorCommandRowsFlag = cli.IntFlag{ - Name: "rows", - Value: 5, - Usage: "Maximum rows in the chart grid", - } - monitorCommandRefreshFlag = cli.IntFlag{ - Name: "refresh", - Value: 3, - Usage: "Refresh interval in seconds", - } - monitorCommand = cli.Command{ - Action: utils.MigrateFlags(monitor), // keep track of migration progress - Name: "monitor", - Usage: "Monitor and visualize node metrics", - ArgsUsage: " ", - Category: "MONITOR COMMANDS", - Description: ` -The Geth monitor is a tool to collect and visualize various internal metrics -gathered by the node, supporting different chart types as well as the capacity -to display multiple metrics simultaneously. -`, - Flags: []cli.Flag{ - monitorCommandAttachFlag, - monitorCommandRowsFlag, - monitorCommandRefreshFlag, - }, - } -) - -// monitor starts a terminal UI based monitoring tool for the requested metrics. -func monitor(ctx *cli.Context) error { - var ( - client *rpc.Client - err error - ) - // Attach to an Ethereum node over IPC or RPC - endpoint := ctx.String(monitorCommandAttachFlag.Name) - if client, err = dialRPC(endpoint); err != nil { - utils.Fatalf("Unable to attach to geth node: %v", err) - } - defer client.Close() - - // Retrieve all the available metrics and resolve the user pattens - metrics, err := retrieveMetrics(client) - if err != nil { - utils.Fatalf("Failed to retrieve system metrics: %v", err) - } - monitored := resolveMetrics(metrics, ctx.Args()) - if len(monitored) == 0 { - list := expandMetrics(metrics, "") - sort.Strings(list) - - if len(list) > 0 { - utils.Fatalf("No metrics specified.\n\nAvailable:\n - %s", strings.Join(list, "\n - ")) - } else { - utils.Fatalf("No metrics collected by geth (--%s).\n", utils.MetricsEnabledFlag.Name) - } - } - sort.Strings(monitored) - if cols := len(monitored) / ctx.Int(monitorCommandRowsFlag.Name); cols > 6 { - utils.Fatalf("Requested metrics (%d) spans more that 6 columns:\n - %s", len(monitored), strings.Join(monitored, "\n - ")) - } - // Create and configure the chart UI defaults - if err := termui.Init(); err != nil { - utils.Fatalf("Unable to initialize terminal UI: %v", err) - } - defer termui.Close() - - rows := len(monitored) - if max := ctx.Int(monitorCommandRowsFlag.Name); rows > max { - rows = max - } - cols := (len(monitored) + rows - 1) / rows - for i := 0; i < rows; i++ { - termui.Body.AddRows(termui.NewRow()) - } - // Create each individual data chart - footer := termui.NewPar("") - footer.Block.Border = true - footer.Height = 3 - - charts := make([]*termui.LineChart, len(monitored)) - units := make([]int, len(monitored)) - data := make([][]float64, len(monitored)) - for i := 0; i < len(monitored); i++ { - charts[i] = createChart((termui.TermHeight() - footer.Height) / rows) - row := termui.Body.Rows[i%rows] - row.Cols = append(row.Cols, termui.NewCol(12/cols, 0, charts[i])) - } - termui.Body.AddRows(termui.NewRow(termui.NewCol(12, 0, footer))) - - refreshCharts(client, monitored, data, units, charts, ctx, footer) - termui.Body.Align() - termui.Render(termui.Body) - - // Watch for various system events, and periodically refresh the charts - termui.Handle("/sys/kbd/C-c", func(termui.Event) { - termui.StopLoop() - }) - termui.Handle("/sys/wnd/resize", func(termui.Event) { - termui.Body.Width = termui.TermWidth() - for _, chart := range charts { - chart.Height = (termui.TermHeight() - footer.Height) / rows - } - termui.Body.Align() - termui.Render(termui.Body) - }) - go func() { - tick := time.NewTicker(time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second) - for range tick.C { - if refreshCharts(client, monitored, data, units, charts, ctx, footer) { - termui.Body.Align() - } - termui.Render(termui.Body) - } - }() - termui.Loop() - return nil -} - -// retrieveMetrics contacts the attached geth node and retrieves the entire set -// of collected system metrics. -func retrieveMetrics(client *rpc.Client) (map[string]interface{}, error) { - var metrics map[string]interface{} - err := client.Call(&metrics, "debug_metrics", true) - return metrics, err -} - -// resolveMetrics takes a list of input metric patterns, and resolves each to one -// or more canonical metric names. -func resolveMetrics(metrics map[string]interface{}, patterns []string) []string { - res := []string{} - for _, pattern := range patterns { - res = append(res, resolveMetric(metrics, pattern, "")...) - } - return res -} - -// resolveMetrics takes a single of input metric pattern, and resolves it to one -// or more canonical metric names. -func resolveMetric(metrics map[string]interface{}, pattern string, path string) []string { - results := []string{} - - // If a nested metric was requested, recurse optionally branching (via comma) - parts := strings.SplitN(pattern, "/", 2) - if len(parts) > 1 { - for _, variation := range strings.Split(parts[0], ",") { - submetrics, ok := metrics[variation].(map[string]interface{}) - if !ok { - utils.Fatalf("Failed to retrieve system metrics: %s", path+variation) - return nil - } - results = append(results, resolveMetric(submetrics, parts[1], path+variation+"/")...) - } - return results - } - // Depending what the last link is, return or expand - for _, variation := range strings.Split(pattern, ",") { - switch metric := metrics[variation].(type) { - case float64: - // Final metric value found, return as singleton - results = append(results, path+variation) - - case map[string]interface{}: - results = append(results, expandMetrics(metric, path+variation+"/")...) - - default: - utils.Fatalf("Metric pattern resolved to unexpected type: %v", reflect.TypeOf(metric)) - return nil - } - } - return results -} - -// expandMetrics expands the entire tree of metrics into a flat list of paths. -func expandMetrics(metrics map[string]interface{}, path string) []string { - // Iterate over all fields and expand individually - list := []string{} - for name, metric := range metrics { - switch metric := metric.(type) { - case float64: - // Final metric value found, append to list - list = append(list, path+name) - - case map[string]interface{}: - // Tree of metrics found, expand recursively - list = append(list, expandMetrics(metric, path+name+"/")...) - - default: - utils.Fatalf("Metric pattern %s resolved to unexpected type: %v", path+name, reflect.TypeOf(metric)) - return nil - } - } - return list -} - -// fetchMetric iterates over the metrics map and retrieves a specific one. -func fetchMetric(metrics map[string]interface{}, metric string) float64 { - parts := strings.Split(metric, "/") - for _, part := range parts[:len(parts)-1] { - var found bool - metrics, found = metrics[part].(map[string]interface{}) - if !found { - return 0 - } - } - if v, ok := metrics[parts[len(parts)-1]].(float64); ok { - return v - } - return 0 -} - -// refreshCharts retrieves a next batch of metrics, and inserts all the new -// values into the active datasets and charts -func refreshCharts(client *rpc.Client, metrics []string, data [][]float64, units []int, charts []*termui.LineChart, ctx *cli.Context, footer *termui.Par) (realign bool) { - values, err := retrieveMetrics(client) - for i, metric := range metrics { - if len(data) < 512 { - data[i] = append([]float64{fetchMetric(values, metric)}, data[i]...) - } else { - data[i] = append([]float64{fetchMetric(values, metric)}, data[i][:len(data[i])-1]...) - } - if updateChart(metric, data[i], &units[i], charts[i], err) { - realign = true - } - } - updateFooter(ctx, err, footer) - return -} - -// updateChart inserts a dataset into a line chart, scaling appropriately as to -// not display weird labels, also updating the chart label accordingly. -func updateChart(metric string, data []float64, base *int, chart *termui.LineChart, err error) (realign bool) { - dataUnits := []string{"", "K", "M", "G", "T", "E"} - timeUnits := []string{"ns", "µs", "ms", "s", "ks", "ms"} - colors := []termui.Attribute{termui.ColorBlue, termui.ColorCyan, termui.ColorGreen, termui.ColorYellow, termui.ColorRed, termui.ColorRed} - - // Extract only part of the data that's actually visible - if chart.Width*2 < len(data) { - data = data[:chart.Width*2] - } - // Find the maximum value and scale under 1K - high := 0.0 - if len(data) > 0 { - high = data[0] - for _, value := range data[1:] { - high = math.Max(high, value) - } - } - unit, scale := 0, 1.0 - for high >= 1000 && unit+1 < len(dataUnits) { - high, unit, scale = high/1000, unit+1, scale*1000 - } - // If the unit changes, re-create the chart (hack to set max height...) - if unit != *base { - realign, *base, *chart = true, unit, *createChart(chart.Height) - } - // Update the chart's data points with the scaled values - if cap(chart.Data) < len(data) { - chart.Data = make([]float64, len(data)) - } - chart.Data = chart.Data[:len(data)] - for i, value := range data { - chart.Data[i] = value / scale - } - // Update the chart's label with the scale units - units := dataUnits - if strings.Contains(metric, "/Percentiles/") || strings.Contains(metric, "/pauses/") || strings.Contains(metric, "/time/") { - units = timeUnits - } - chart.BorderLabel = metric - if len(units[unit]) > 0 { - chart.BorderLabel += " [" + units[unit] + "]" - } - chart.LineColor = colors[unit] | termui.AttrBold - if err != nil { - chart.LineColor = termui.ColorRed | termui.AttrBold - } - return -} - -// createChart creates an empty line chart with the default configs. -func createChart(height int) *termui.LineChart { - chart := termui.NewLineChart() - if runtime.GOOS == "windows" { - chart.Mode = "dot" - } - chart.DataLabels = []string{""} - chart.Height = height - chart.AxesColor = termui.ColorWhite - chart.PaddingBottom = -2 - - chart.BorderLabelFg = chart.BorderFg | termui.AttrBold - chart.BorderFg = chart.BorderBg - - return chart -} - -// updateFooter updates the footer contents based on any encountered errors. -func updateFooter(ctx *cli.Context, err error, footer *termui.Par) { - // Generate the basic footer - refresh := time.Duration(ctx.Int(monitorCommandRefreshFlag.Name)) * time.Second - footer.Text = fmt.Sprintf("Press Ctrl+C to quit. Refresh interval: %v.", refresh) - footer.TextFgColor = termui.ThemeAttr("par.fg") | termui.AttrBold - - // Append any encountered errors - if err != nil { - footer.Text = fmt.Sprintf("Error: %v.", err) - footer.TextFgColor = termui.ColorRed | termui.AttrBold - } -} diff --git a/cmd/geth/retesteth.go b/cmd/geth/retesteth.go new file mode 100644 index 000000000000..add922297e07 --- /dev/null +++ b/cmd/geth/retesteth.go @@ -0,0 +1,899 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "bytes" + "context" + "fmt" + "math/big" + "os" + "os/signal" + "strings" + "time" + + "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/consensus/misc" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/trie" + + cli "gopkg.in/urfave/cli.v1" +) + +var ( + rpcPortFlag = cli.IntFlag{ + Name: "rpcport", + Usage: "HTTP-RPC server listening port", + Value: node.DefaultHTTPPort, + } + retestethCommand = cli.Command{ + Action: utils.MigrateFlags(retesteth), + Name: "retesteth", + Usage: "Launches geth in retesteth mode", + ArgsUsage: "", + Flags: []cli.Flag{rpcPortFlag}, + Category: "MISCELLANEOUS COMMANDS", + Description: `Launches geth in retesteth mode (no database, no network, only retesteth RPC interface)`, + } +) + +type RetestethTestAPI interface { + SetChainParams(ctx context.Context, chainParams ChainParams) (bool, error) + MineBlocks(ctx context.Context, number uint64) (bool, error) + ModifyTimestamp(ctx context.Context, interval uint64) (bool, error) + ImportRawBlock(ctx context.Context, rawBlock hexutil.Bytes) (common.Hash, error) + RewindToBlock(ctx context.Context, number uint64) (bool, error) + GetLogHash(ctx context.Context, txHash common.Hash) (common.Hash, error) +} + +type RetestethEthAPI interface { + SendRawTransaction(ctx context.Context, rawTx hexutil.Bytes) (common.Hash, error) + BlockNumber(ctx context.Context) (uint64, error) + GetBlockByNumber(ctx context.Context, blockNr math.HexOrDecimal64, fullTx bool) (map[string]interface{}, error) + GetBalance(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (*math.HexOrDecimal256, error) + GetCode(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (hexutil.Bytes, error) + GetTransactionCount(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (uint64, error) +} + +type RetestethDebugAPI interface { + AccountRange(ctx context.Context, + blockHashOrNumber *math.HexOrDecimal256, txIndex uint64, + addressHash *math.HexOrDecimal256, maxResults uint64, + ) (AccountRangeResult, error) + StorageRangeAt(ctx context.Context, + blockHashOrNumber *math.HexOrDecimal256, txIndex uint64, + address common.Address, + begin *math.HexOrDecimal256, maxResults uint64, + ) (StorageRangeResult, error) +} + +type RetestWeb3API interface { + ClientVersion(ctx context.Context) (string, error) +} + +type RetestethAPI struct { + ethDb ethdb.Database + db state.Database + chainConfig *params.ChainConfig + author common.Address + extraData []byte + genesisHash common.Hash + engine *NoRewardEngine + blockchain *core.BlockChain + blockNumber uint64 + txMap map[common.Address]map[uint64]*types.Transaction // Sender -> Nonce -> Transaction + txSenders map[common.Address]struct{} // Set of transaction senders + blockInterval uint64 +} + +type ChainParams struct { + SealEngine string `json:"sealEngine"` + Params CParamsParams `json:"params"` + Genesis CParamsGenesis `json:"genesis"` + Accounts map[common.Address]CParamsAccount `json:"accounts"` +} + +type CParamsParams struct { + AccountStartNonce math.HexOrDecimal64 `json:"accountStartNonce"` + HomesteadForkBlock *math.HexOrDecimal64 `json:"homesteadForkBlock"` + EIP150ForkBlock *math.HexOrDecimal64 `json:"EIP150ForkBlock"` + EIP158ForkBlock *math.HexOrDecimal64 `json:"EIP158ForkBlock"` + DaoHardforkBlock *math.HexOrDecimal64 `json:"daoHardforkBlock"` + ByzantiumForkBlock *math.HexOrDecimal64 `json:"byzantiumForkBlock"` + ConstantinopleForkBlock *math.HexOrDecimal64 `json:"constantinopleForkBlock"` + ConstantinopleFixForkBlock *math.HexOrDecimal64 `json:"constantinopleFixForkBlock"` + IstanbulBlock *math.HexOrDecimal64 `json:"istanbulForkBlock"` + ChainID *math.HexOrDecimal256 `json:"chainID"` + MaximumExtraDataSize math.HexOrDecimal64 `json:"maximumExtraDataSize"` + TieBreakingGas bool `json:"tieBreakingGas"` + MinGasLimit math.HexOrDecimal64 `json:"minGasLimit"` + MaxGasLimit math.HexOrDecimal64 `json:"maxGasLimit"` + GasLimitBoundDivisor math.HexOrDecimal64 `json:"gasLimitBoundDivisor"` + MinimumDifficulty math.HexOrDecimal256 `json:"minimumDifficulty"` + DifficultyBoundDivisor math.HexOrDecimal256 `json:"difficultyBoundDivisor"` + DurationLimit math.HexOrDecimal256 `json:"durationLimit"` + BlockReward math.HexOrDecimal256 `json:"blockReward"` + NetworkID math.HexOrDecimal256 `json:"networkID"` +} + +type CParamsGenesis struct { + Nonce math.HexOrDecimal64 `json:"nonce"` + Difficulty *math.HexOrDecimal256 `json:"difficulty"` + MixHash *math.HexOrDecimal256 `json:"mixHash"` + Author common.Address `json:"author"` + Timestamp math.HexOrDecimal64 `json:"timestamp"` + ParentHash common.Hash `json:"parentHash"` + ExtraData hexutil.Bytes `json:"extraData"` + GasLimit math.HexOrDecimal64 `json:"gasLimit"` +} + +type CParamsAccount struct { + Balance *math.HexOrDecimal256 `json:"balance"` + Precompiled *CPAccountPrecompiled `json:"precompiled"` + Code hexutil.Bytes `json:"code"` + Storage map[string]string `json:"storage"` + Nonce *math.HexOrDecimal64 `json:"nonce"` +} + +type CPAccountPrecompiled struct { + Name string `json:"name"` + StartingBlock math.HexOrDecimal64 `json:"startingBlock"` + Linear *CPAPrecompiledLinear `json:"linear"` +} + +type CPAPrecompiledLinear struct { + Base uint64 `json:"base"` + Word uint64 `json:"word"` +} + +type AccountRangeResult struct { + AddressMap map[common.Hash]common.Address `json:"addressMap"` + NextKey common.Hash `json:"nextKey"` +} + +type StorageRangeResult struct { + Complete bool `json:"complete"` + Storage map[common.Hash]SRItem `json:"storage"` +} + +type SRItem struct { + Key string `json:"key"` + Value string `json:"value"` +} + +type NoRewardEngine struct { + inner consensus.Engine + rewardsOn bool +} + +func (e *NoRewardEngine) Author(header *types.Header) (common.Address, error) { + return e.inner.Author(header) +} + +func (e *NoRewardEngine) VerifyHeader(chain consensus.ChainReader, header *types.Header, seal bool) error { + return e.inner.VerifyHeader(chain, header, seal) +} + +func (e *NoRewardEngine) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, seals []bool) (chan<- struct{}, <-chan error) { + return e.inner.VerifyHeaders(chain, headers, seals) +} + +func (e *NoRewardEngine) VerifyUncles(chain consensus.ChainReader, block *types.Block) error { + return e.inner.VerifyUncles(chain, block) +} + +func (e *NoRewardEngine) VerifySeal(chain consensus.ChainReader, header *types.Header) error { + return e.inner.VerifySeal(chain, header) +} + +func (e *NoRewardEngine) Prepare(chain consensus.ChainReader, header *types.Header) error { + return e.inner.Prepare(chain, header) +} + +func (e *NoRewardEngine) accumulateRewards(config *params.ChainConfig, state *state.StateDB, header *types.Header, uncles []*types.Header) { + // Simply touch miner and uncle coinbase accounts + reward := big.NewInt(0) + for _, uncle := range uncles { + state.AddBalance(uncle.Coinbase, reward) + } + state.AddBalance(header.Coinbase, reward) +} + +func (e *NoRewardEngine) Finalize(chain consensus.ChainReader, header *types.Header, statedb *state.StateDB, txs []*types.Transaction, + uncles []*types.Header) { + if e.rewardsOn { + e.inner.Finalize(chain, header, statedb, txs, uncles) + } else { + e.accumulateRewards(chain.Config(), statedb, header, uncles) + header.Root = statedb.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + } +} + +func (e *NoRewardEngine) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, statedb *state.StateDB, txs []*types.Transaction, + uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { + if e.rewardsOn { + return e.inner.FinalizeAndAssemble(chain, header, statedb, txs, uncles, receipts) + } else { + e.accumulateRewards(chain.Config(), statedb, header, uncles) + header.Root = statedb.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + + // Header seems complete, assemble into a block and return + return types.NewBlock(header, txs, uncles, receipts), nil + } +} + +func (e *NoRewardEngine) Seal(chain consensus.ChainReader, block *types.Block, results chan<- *types.Block, stop <-chan struct{}) error { + return e.inner.Seal(chain, block, results, stop) +} + +func (e *NoRewardEngine) SealHash(header *types.Header) common.Hash { + return e.inner.SealHash(header) +} + +func (e *NoRewardEngine) CalcDifficulty(chain consensus.ChainReader, time uint64, parent *types.Header) *big.Int { + return e.inner.CalcDifficulty(chain, time, parent) +} + +func (e *NoRewardEngine) APIs(chain consensus.ChainReader) []rpc.API { + return e.inner.APIs(chain) +} + +func (e *NoRewardEngine) Close() error { + return e.inner.Close() +} + +func (api *RetestethAPI) SetChainParams(ctx context.Context, chainParams ChainParams) (bool, error) { + // Clean up + if api.blockchain != nil { + api.blockchain.Stop() + } + if api.engine != nil { + api.engine.Close() + } + if api.ethDb != nil { + api.ethDb.Close() + } + ethDb := rawdb.NewMemoryDatabase() + accounts := make(core.GenesisAlloc) + for address, account := range chainParams.Accounts { + balance := big.NewInt(0) + if account.Balance != nil { + balance.Set((*big.Int)(account.Balance)) + } + var nonce uint64 + if account.Nonce != nil { + nonce = uint64(*account.Nonce) + } + if account.Precompiled == nil || account.Balance != nil { + storage := make(map[common.Hash]common.Hash) + for k, v := range account.Storage { + storage[common.HexToHash(k)] = common.HexToHash(v) + } + accounts[address] = core.GenesisAccount{ + Balance: balance, + Code: account.Code, + Nonce: nonce, + Storage: storage, + } + } + } + chainId := big.NewInt(1) + if chainParams.Params.ChainID != nil { + chainId.Set((*big.Int)(chainParams.Params.ChainID)) + } + var ( + homesteadBlock *big.Int + daoForkBlock *big.Int + eip150Block *big.Int + eip155Block *big.Int + eip158Block *big.Int + byzantiumBlock *big.Int + constantinopleBlock *big.Int + petersburgBlock *big.Int + istanbulBlock *big.Int + ) + if chainParams.Params.HomesteadForkBlock != nil { + homesteadBlock = big.NewInt(int64(*chainParams.Params.HomesteadForkBlock)) + } + if chainParams.Params.DaoHardforkBlock != nil { + daoForkBlock = big.NewInt(int64(*chainParams.Params.DaoHardforkBlock)) + } + if chainParams.Params.EIP150ForkBlock != nil { + eip150Block = big.NewInt(int64(*chainParams.Params.EIP150ForkBlock)) + } + if chainParams.Params.EIP158ForkBlock != nil { + eip158Block = big.NewInt(int64(*chainParams.Params.EIP158ForkBlock)) + eip155Block = eip158Block + } + if chainParams.Params.ByzantiumForkBlock != nil { + byzantiumBlock = big.NewInt(int64(*chainParams.Params.ByzantiumForkBlock)) + } + if chainParams.Params.ConstantinopleForkBlock != nil { + constantinopleBlock = big.NewInt(int64(*chainParams.Params.ConstantinopleForkBlock)) + } + if chainParams.Params.ConstantinopleFixForkBlock != nil { + petersburgBlock = big.NewInt(int64(*chainParams.Params.ConstantinopleFixForkBlock)) + } + if constantinopleBlock != nil && petersburgBlock == nil { + petersburgBlock = big.NewInt(100000000000) + } + if chainParams.Params.IstanbulBlock != nil { + istanbulBlock = big.NewInt(int64(*chainParams.Params.IstanbulBlock)) + } + + genesis := &core.Genesis{ + Config: ¶ms.ChainConfig{ + ChainID: chainId, + HomesteadBlock: homesteadBlock, + DAOForkBlock: daoForkBlock, + DAOForkSupport: false, + EIP150Block: eip150Block, + EIP155Block: eip155Block, + EIP158Block: eip158Block, + ByzantiumBlock: byzantiumBlock, + ConstantinopleBlock: constantinopleBlock, + PetersburgBlock: petersburgBlock, + IstanbulBlock: istanbulBlock, + }, + Nonce: uint64(chainParams.Genesis.Nonce), + Timestamp: uint64(chainParams.Genesis.Timestamp), + ExtraData: chainParams.Genesis.ExtraData, + GasLimit: uint64(chainParams.Genesis.GasLimit), + Difficulty: big.NewInt(0).Set((*big.Int)(chainParams.Genesis.Difficulty)), + Mixhash: common.BigToHash((*big.Int)(chainParams.Genesis.MixHash)), + Coinbase: chainParams.Genesis.Author, + ParentHash: chainParams.Genesis.ParentHash, + Alloc: accounts, + } + chainConfig, genesisHash, err := core.SetupGenesisBlock(ethDb, genesis) + if err != nil { + return false, err + } + fmt.Printf("Chain config: %v\n", chainConfig) + + var inner consensus.Engine + switch chainParams.SealEngine { + case "NoProof", "NoReward": + inner = ethash.NewFaker() + case "Ethash": + inner = ethash.New(ethash.Config{ + CacheDir: "ethash", + CachesInMem: 2, + CachesOnDisk: 3, + DatasetsInMem: 1, + DatasetsOnDisk: 2, + }, nil, false) + default: + return false, fmt.Errorf("unrecognised seal engine: %s", chainParams.SealEngine) + } + engine := &NoRewardEngine{inner: inner, rewardsOn: chainParams.SealEngine != "NoReward"} + + blockchain, err := core.NewBlockChain(ethDb, nil, chainConfig, engine, vm.Config{}, nil) + if err != nil { + return false, err + } + + api.chainConfig = chainConfig + api.genesisHash = genesisHash + api.author = chainParams.Genesis.Author + api.extraData = chainParams.Genesis.ExtraData + api.ethDb = ethDb + api.engine = engine + api.blockchain = blockchain + api.db = state.NewDatabase(api.ethDb) + api.blockNumber = 0 + api.txMap = make(map[common.Address]map[uint64]*types.Transaction) + api.txSenders = make(map[common.Address]struct{}) + api.blockInterval = 0 + return true, nil +} + +func (api *RetestethAPI) SendRawTransaction(ctx context.Context, rawTx hexutil.Bytes) (common.Hash, error) { + tx := new(types.Transaction) + if err := rlp.DecodeBytes(rawTx, tx); err != nil { + // Return nil is not by mistake - some tests include sending transaction where gasLimit overflows uint64 + return common.Hash{}, nil + } + signer := types.MakeSigner(api.chainConfig, big.NewInt(int64(api.blockNumber))) + sender, err := types.Sender(signer, tx) + if err != nil { + return common.Hash{}, err + } + if nonceMap, ok := api.txMap[sender]; ok { + nonceMap[tx.Nonce()] = tx + } else { + nonceMap = make(map[uint64]*types.Transaction) + nonceMap[tx.Nonce()] = tx + api.txMap[sender] = nonceMap + } + api.txSenders[sender] = struct{}{} + return tx.Hash(), nil +} + +func (api *RetestethAPI) MineBlocks(ctx context.Context, number uint64) (bool, error) { + for i := 0; i < int(number); i++ { + if err := api.mineBlock(); err != nil { + return false, err + } + } + fmt.Printf("Mined %d blocks\n", number) + return true, nil +} + +func (api *RetestethAPI) mineBlock() error { + parentHash := rawdb.ReadCanonicalHash(api.ethDb, api.blockNumber) + parent := rawdb.ReadBlock(api.ethDb, parentHash, api.blockNumber) + var timestamp uint64 + if api.blockInterval == 0 { + timestamp = uint64(time.Now().Unix()) + } else { + timestamp = parent.Time() + api.blockInterval + } + gasLimit := core.CalcGasLimit(parent, 9223372036854775807, 9223372036854775807) + header := &types.Header{ + ParentHash: parent.Hash(), + Number: big.NewInt(int64(api.blockNumber + 1)), + GasLimit: gasLimit, + Extra: api.extraData, + Time: timestamp, + } + header.Coinbase = api.author + if api.engine != nil { + api.engine.Prepare(api.blockchain, header) + } + // If we are care about TheDAO hard-fork check whether to override the extra-data or not + if daoBlock := api.chainConfig.DAOForkBlock; daoBlock != nil { + // Check whether the block is among the fork extra-override range + limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) + if header.Number.Cmp(daoBlock) >= 0 && header.Number.Cmp(limit) < 0 { + // Depending whether we support or oppose the fork, override differently + if api.chainConfig.DAOForkSupport { + header.Extra = common.CopyBytes(params.DAOForkBlockExtra) + } else if bytes.Equal(header.Extra, params.DAOForkBlockExtra) { + header.Extra = []byte{} // If miner opposes, don't let it use the reserved extra-data + } + } + } + statedb, err := api.blockchain.StateAt(parent.Root()) + if err != nil { + return err + } + if api.chainConfig.DAOForkSupport && api.chainConfig.DAOForkBlock != nil && api.chainConfig.DAOForkBlock.Cmp(header.Number) == 0 { + misc.ApplyDAOHardFork(statedb) + } + gasPool := new(core.GasPool).AddGas(header.GasLimit) + txCount := 0 + var txs []*types.Transaction + var receipts []*types.Receipt + var coalescedLogs []*types.Log + var blockFull = gasPool.Gas() < params.TxGas + for address := range api.txSenders { + if blockFull { + break + } + m := api.txMap[address] + for nonce := statedb.GetNonce(address); ; nonce++ { + if tx, ok := m[nonce]; ok { + // Try to apply transactions to the state + statedb.Prepare(tx.Hash(), common.Hash{}, txCount) + snap := statedb.Snapshot() + fees := new(big.Int) + + receipt, err := core.ApplyTransaction( + api.chainConfig, + api.blockchain, + &api.author, + gasPool, + statedb, + header, tx, &header.GasUsed, fees, *api.blockchain.GetVMConfig(), + ) + if err != nil { + statedb.RevertToSnapshot(snap) + break + } + txs = append(txs, tx) + receipts = append(receipts, receipt) + coalescedLogs = append(coalescedLogs, receipt.Logs...) + delete(m, nonce) + if len(m) == 0 { + // Last tx for the sender + delete(api.txMap, address) + delete(api.txSenders, address) + } + txCount++ + if gasPool.Gas() < params.TxGas { + blockFull = true + break + } + } else { + break // Gap in the nonces + } + } + } + block, err := api.engine.FinalizeAndAssemble(api.blockchain, header, statedb, txs, []*types.Header{}, receipts) + if err != nil { + return err + } + return api.importBlock(block) +} + +func (api *RetestethAPI) importBlock(block *types.Block) error { + if _, err := api.blockchain.InsertChain([]*types.Block{block}); err != nil { + return err + } + api.blockNumber = block.NumberU64() + fmt.Printf("Imported block %d\n", block.NumberU64()) + return nil +} + +func (api *RetestethAPI) ModifyTimestamp(ctx context.Context, interval uint64) (bool, error) { + api.blockInterval = interval + return true, nil +} + +func (api *RetestethAPI) ImportRawBlock(ctx context.Context, rawBlock hexutil.Bytes) (common.Hash, error) { + block := new(types.Block) + if err := rlp.DecodeBytes(rawBlock, block); err != nil { + return common.Hash{}, err + } + fmt.Printf("Importing block %d with parent hash: %x, genesisHash: %x\n", block.NumberU64(), block.ParentHash(), api.genesisHash) + if err := api.importBlock(block); err != nil { + return common.Hash{}, err + } + return block.Hash(), nil +} + +func (api *RetestethAPI) RewindToBlock(ctx context.Context, newHead uint64) (bool, error) { + if err := api.blockchain.SetHead(newHead); err != nil { + return false, err + } + api.blockNumber = newHead + return true, nil +} + +var emptyListHash common.Hash = common.HexToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") + +func (api *RetestethAPI) GetLogHash(ctx context.Context, txHash common.Hash) (common.Hash, error) { + receipt, _, _, _ := rawdb.ReadReceipt(api.ethDb, txHash, api.chainConfig) + if receipt == nil { + return emptyListHash, nil + } else { + if logListRlp, err := rlp.EncodeToBytes(receipt.Logs); err != nil { + return common.Hash{}, err + } else { + return common.BytesToHash(crypto.Keccak256(logListRlp)), nil + } + } +} + +func (api *RetestethAPI) BlockNumber(ctx context.Context) (uint64, error) { + //fmt.Printf("BlockNumber, response: %d\n", api.blockNumber) + return api.blockNumber, nil +} + +func (api *RetestethAPI) GetBlockByNumber(ctx context.Context, blockNr math.HexOrDecimal64, fullTx bool) (map[string]interface{}, error) { + block := api.blockchain.GetBlockByNumber(uint64(blockNr)) + if block != nil { + response, err := RPCMarshalBlock(block, true, fullTx) + if err != nil { + return nil, err + } + response["author"] = response["miner"] + response["totalDifficulty"] = (*hexutil.Big)(api.blockchain.GetTd(block.Hash(), uint64(blockNr))) + return response, err + } + return nil, fmt.Errorf("block %d not found", blockNr) +} + +func (api *RetestethAPI) AccountRange(ctx context.Context, + blockHashOrNumber *math.HexOrDecimal256, txIndex uint64, + addressHash *math.HexOrDecimal256, maxResults uint64, +) (AccountRangeResult, error) { + var ( + header *types.Header + block *types.Block + ) + if (*big.Int)(blockHashOrNumber).Cmp(big.NewInt(math.MaxInt64)) > 0 { + blockHash := common.BigToHash((*big.Int)(blockHashOrNumber)) + header = api.blockchain.GetHeaderByHash(blockHash) + block = api.blockchain.GetBlockByHash(blockHash) + //fmt.Printf("Account range: %x, txIndex %d, start: %x, maxResults: %d\n", blockHash, txIndex, common.BigToHash((*big.Int)(addressHash)), maxResults) + } else { + blockNumber := (*big.Int)(blockHashOrNumber).Uint64() + header = api.blockchain.GetHeaderByNumber(blockNumber) + block = api.blockchain.GetBlockByNumber(blockNumber) + //fmt.Printf("Account range: %d, txIndex %d, start: %x, maxResults: %d\n", blockNumber, txIndex, common.BigToHash((*big.Int)(addressHash)), maxResults) + } + parentHeader := api.blockchain.GetHeaderByHash(header.ParentHash) + var root common.Hash + var statedb *state.StateDB + var err error + if parentHeader == nil || int(txIndex) >= len(block.Transactions()) { + root = header.Root + statedb, err = api.blockchain.StateAt(root) + if err != nil { + return AccountRangeResult{}, err + } + } else { + root = parentHeader.Root + statedb, err = api.blockchain.StateAt(root) + if err != nil { + return AccountRangeResult{}, err + } + // Recompute transactions up to the target index. + signer := types.MakeSigner(api.blockchain.Config(), block.Number()) + for idx, tx := range block.Transactions() { + // Assemble the transaction call message and return if the requested offset + msg, _ := tx.AsMessage(signer) + context := core.NewEVMContext(msg, block.Header(), api.blockchain, nil) + // Not yet the searched for transaction, execute on top of the current state + vmenv := vm.NewEVM(context, statedb, api.blockchain.Config(), vm.Config{}) + if _, _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + return AccountRangeResult{}, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) + } + // Ensure any modifications are committed to the state + // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect + root = statedb.IntermediateRoot(vmenv.ChainConfig().IsEIP158(block.Number())) + if idx == int(txIndex) { + // This is to make sure root can be opened by OpenTrie + root, err = statedb.Commit(api.chainConfig.IsEIP158(block.Number())) + if err != nil { + return AccountRangeResult{}, err + } + break + } + } + } + accountTrie, err := statedb.Database().OpenTrie(root) + if err != nil { + return AccountRangeResult{}, err + } + it := trie.NewIterator(accountTrie.NodeIterator(common.BigToHash((*big.Int)(addressHash)).Bytes())) + result := AccountRangeResult{AddressMap: make(map[common.Hash]common.Address)} + for i := 0; i < int(maxResults) && it.Next(); i++ { + if preimage := accountTrie.GetKey(it.Key); preimage != nil { + result.AddressMap[common.BytesToHash(it.Key)] = common.BytesToAddress(preimage) + //fmt.Printf("%x: %x\n", it.Key, preimage) + } else { + //fmt.Printf("could not find preimage for %x\n", it.Key) + } + } + //fmt.Printf("Number of entries returned: %d\n", len(result.AddressMap)) + // Add the 'next key' so clients can continue downloading. + if it.Next() { + next := common.BytesToHash(it.Key) + result.NextKey = next + } + return result, nil +} + +func (api *RetestethAPI) GetBalance(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (*math.HexOrDecimal256, error) { + //fmt.Printf("GetBalance %x, block %d\n", address, blockNr) + header := api.blockchain.GetHeaderByNumber(uint64(blockNr)) + statedb, err := api.blockchain.StateAt(header.Root) + if err != nil { + return nil, err + } + return (*math.HexOrDecimal256)(statedb.GetBalance(address)), nil +} + +func (api *RetestethAPI) GetCode(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (hexutil.Bytes, error) { + header := api.blockchain.GetHeaderByNumber(uint64(blockNr)) + statedb, err := api.blockchain.StateAt(header.Root) + if err != nil { + return nil, err + } + return statedb.GetCode(address), nil +} + +func (api *RetestethAPI) GetTransactionCount(ctx context.Context, address common.Address, blockNr math.HexOrDecimal64) (uint64, error) { + header := api.blockchain.GetHeaderByNumber(uint64(blockNr)) + statedb, err := api.blockchain.StateAt(header.Root) + if err != nil { + return 0, err + } + return statedb.GetNonce(address), nil +} + +func (api *RetestethAPI) StorageRangeAt(ctx context.Context, + blockHashOrNumber *math.HexOrDecimal256, txIndex uint64, + address common.Address, + begin *math.HexOrDecimal256, maxResults uint64, +) (StorageRangeResult, error) { + var ( + header *types.Header + block *types.Block + ) + if (*big.Int)(blockHashOrNumber).Cmp(big.NewInt(math.MaxInt64)) > 0 { + blockHash := common.BigToHash((*big.Int)(blockHashOrNumber)) + header = api.blockchain.GetHeaderByHash(blockHash) + block = api.blockchain.GetBlockByHash(blockHash) + //fmt.Printf("Storage range: %x, txIndex %d, addr: %x, start: %x, maxResults: %d\n", + // blockHash, txIndex, address, common.BigToHash((*big.Int)(begin)), maxResults) + } else { + blockNumber := (*big.Int)(blockHashOrNumber).Uint64() + header = api.blockchain.GetHeaderByNumber(blockNumber) + block = api.blockchain.GetBlockByNumber(blockNumber) + //fmt.Printf("Storage range: %d, txIndex %d, addr: %x, start: %x, maxResults: %d\n", + // blockNumber, txIndex, address, common.BigToHash((*big.Int)(begin)), maxResults) + } + parentHeader := api.blockchain.GetHeaderByHash(header.ParentHash) + var root common.Hash + var statedb *state.StateDB + var err error + if parentHeader == nil || int(txIndex) >= len(block.Transactions()) { + root = header.Root + statedb, err = api.blockchain.StateAt(root) + if err != nil { + return StorageRangeResult{}, err + } + } else { + root = parentHeader.Root + statedb, err = api.blockchain.StateAt(root) + if err != nil { + return StorageRangeResult{}, err + } + // Recompute transactions up to the target index. + signer := types.MakeSigner(api.blockchain.Config(), block.Number()) + for idx, tx := range block.Transactions() { + // Assemble the transaction call message and return if the requested offset + msg, _ := tx.AsMessage(signer) + context := core.NewEVMContext(msg, block.Header(), api.blockchain, nil) + // Not yet the searched for transaction, execute on top of the current state + vmenv := vm.NewEVM(context, statedb, api.blockchain.Config(), vm.Config{}) + if _, _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + return StorageRangeResult{}, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) + } + // Ensure any modifications are committed to the state + // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect + _ = statedb.IntermediateRoot(vmenv.ChainConfig().IsEIP158(block.Number())) + if idx == int(txIndex) { + // This is to make sure root can be opened by OpenTrie + _, err = statedb.Commit(vmenv.ChainConfig().IsEIP158(block.Number())) + if err != nil { + return StorageRangeResult{}, err + } + } + } + } + storageTrie := statedb.StorageTrie(address) + it := trie.NewIterator(storageTrie.NodeIterator(common.BigToHash((*big.Int)(begin)).Bytes())) + result := StorageRangeResult{Storage: make(map[common.Hash]SRItem)} + for i := 0; /*i < int(maxResults) && */ it.Next(); i++ { + if preimage := storageTrie.GetKey(it.Key); preimage != nil { + key := (*math.HexOrDecimal256)(big.NewInt(0).SetBytes(preimage)) + v, _, err := rlp.SplitString(it.Value) + if err != nil { + return StorageRangeResult{}, err + } + value := (*math.HexOrDecimal256)(big.NewInt(0).SetBytes(v)) + ks, _ := key.MarshalText() + vs, _ := value.MarshalText() + if len(ks)%2 != 0 { + ks = append(append(append([]byte{}, ks[:2]...), byte('0')), ks[2:]...) + } + if len(vs)%2 != 0 { + vs = append(append(append([]byte{}, vs[:2]...), byte('0')), vs[2:]...) + } + result.Storage[common.BytesToHash(it.Key)] = SRItem{ + Key: string(ks), + Value: string(vs), + } + //fmt.Printf("Key: %s, Value: %s\n", ks, vs) + } else { + //fmt.Printf("Did not find preimage for %x\n", it.Key) + } + } + if it.Next() { + result.Complete = false + } else { + result.Complete = true + } + return result, nil +} + +func (api *RetestethAPI) ClientVersion(ctx context.Context) (string, error) { + return "Geth-" + params.VersionWithCommit(gitCommit, gitDate), nil +} + +// splitAndTrim splits input separated by a comma +// and trims excessive white space from the substrings. +func splitAndTrim(input string) []string { + result := strings.Split(input, ",") + for i, r := range result { + result[i] = strings.TrimSpace(r) + } + return result +} + +func retesteth(ctx *cli.Context) error { + log.Info("Welcome to retesteth!") + // register signer API with server + var ( + extapiURL string + ) + apiImpl := &RetestethAPI{} + var testApi RetestethTestAPI = apiImpl + var ethApi RetestethEthAPI = apiImpl + var debugApi RetestethDebugAPI = apiImpl + var web3Api RetestWeb3API = apiImpl + rpcAPI := []rpc.API{ + { + Namespace: "test", + Public: true, + Service: testApi, + Version: "1.0", + }, + { + Namespace: "eth", + Public: true, + Service: ethApi, + Version: "1.0", + }, + { + Namespace: "debug", + Public: true, + Service: debugApi, + Version: "1.0", + }, + { + Namespace: "web3", + Public: true, + Service: web3Api, + Version: "1.0", + }, + } + vhosts := splitAndTrim(ctx.GlobalString(utils.RPCVirtualHostsFlag.Name)) + cors := splitAndTrim(ctx.GlobalString(utils.RPCCORSDomainFlag.Name)) + + // start http server + httpEndpoint := fmt.Sprintf("%s:%d", ctx.GlobalString(utils.RPCListenAddrFlag.Name), ctx.Int(rpcPortFlag.Name)) + listener, _, err := rpc.StartHTTPEndpoint(httpEndpoint, rpcAPI, []string{"test", "eth", "debug", "web3"}, cors, vhosts, rpc.DefaultHTTPTimeouts) + if err != nil { + utils.Fatalf("Could not start RPC api: %v", err) + } + extapiURL = fmt.Sprintf("http://%s", httpEndpoint) + log.Info("HTTP endpoint opened", "url", extapiURL) + + defer func() { + listener.Close() + log.Info("HTTP endpoint closed", "url", httpEndpoint) + }() + + abortChan := make(chan os.Signal) + signal.Notify(abortChan, os.Interrupt) + + sig := <-abortChan + log.Info("Exiting...", "signal", sig) + return nil +} diff --git a/cmd/geth/retesteth_copypaste.go b/cmd/geth/retesteth_copypaste.go new file mode 100644 index 000000000000..e2795af7f968 --- /dev/null +++ b/cmd/geth/retesteth_copypaste.go @@ -0,0 +1,148 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package main + +import ( + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" +) + +// RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction +type RPCTransaction struct { + BlockHash common.Hash `json:"blockHash"` + BlockNumber *hexutil.Big `json:"blockNumber"` + From common.Address `json:"from"` + Gas hexutil.Uint64 `json:"gas"` + GasPrice *hexutil.Big `json:"gasPrice"` + Hash common.Hash `json:"hash"` + Input hexutil.Bytes `json:"input"` + Nonce hexutil.Uint64 `json:"nonce"` + To *common.Address `json:"to"` + TransactionIndex hexutil.Uint `json:"transactionIndex"` + Value *hexutil.Big `json:"value"` + V *hexutil.Big `json:"v"` + R *hexutil.Big `json:"r"` + S *hexutil.Big `json:"s"` +} + +// newRPCTransaction returns a transaction that will serialize to the RPC +// representation, with the given location metadata set (if available). +func newRPCTransaction(tx *types.Transaction, blockHash common.Hash, blockNumber uint64, index uint64) *RPCTransaction { + var signer types.Signer = types.FrontierSigner{} + if tx.Protected() { + signer = types.NewEIP155Signer(tx.ChainId()) + } + from, _ := types.Sender(signer, tx) + v, r, s := tx.RawSignatureValues() + + result := &RPCTransaction{ + From: from, + Gas: hexutil.Uint64(tx.Gas()), + GasPrice: (*hexutil.Big)(tx.GasPrice()), + Hash: tx.Hash(), + Input: hexutil.Bytes(tx.Data()), + Nonce: hexutil.Uint64(tx.Nonce()), + To: tx.To(), + Value: (*hexutil.Big)(tx.Value()), + V: (*hexutil.Big)(v), + R: (*hexutil.Big)(r), + S: (*hexutil.Big)(s), + } + if blockHash != (common.Hash{}) { + result.BlockHash = blockHash + result.BlockNumber = (*hexutil.Big)(new(big.Int).SetUint64(blockNumber)) + result.TransactionIndex = hexutil.Uint(index) + } + return result +} + +// newRPCTransactionFromBlockIndex returns a transaction that will serialize to the RPC representation. +func newRPCTransactionFromBlockIndex(b *types.Block, index uint64) *RPCTransaction { + txs := b.Transactions() + if index >= uint64(len(txs)) { + return nil + } + return newRPCTransaction(txs[index], b.Hash(), b.NumberU64(), index) +} + +// newRPCTransactionFromBlockHash returns a transaction that will serialize to the RPC representation. +func newRPCTransactionFromBlockHash(b *types.Block, hash common.Hash) *RPCTransaction { + for idx, tx := range b.Transactions() { + if tx.Hash() == hash { + return newRPCTransactionFromBlockIndex(b, uint64(idx)) + } + } + return nil +} + +// RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are +// returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain +// transaction hashes. +func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { + head := b.Header() // copies the header once + fields := map[string]interface{}{ + "number": (*hexutil.Big)(head.Number), + "hash": b.Hash(), + "parentHash": head.ParentHash, + "nonce": head.Nonce, + "mixHash": head.MixDigest, + "sha3Uncles": head.UncleHash, + "logsBloom": head.Bloom, + "stateRoot": head.Root, + "miner": head.Coinbase, + "difficulty": (*hexutil.Big)(head.Difficulty), + "extraData": hexutil.Bytes(head.Extra), + "size": hexutil.Uint64(b.Size()), + "gasLimit": hexutil.Uint64(head.GasLimit), + "gasUsed": hexutil.Uint64(head.GasUsed), + "timestamp": hexutil.Uint64(head.Time), + "transactionsRoot": head.TxHash, + "receiptsRoot": head.ReceiptHash, + } + + if inclTx { + formatTx := func(tx *types.Transaction) (interface{}, error) { + return tx.Hash(), nil + } + if fullTx { + formatTx = func(tx *types.Transaction) (interface{}, error) { + return newRPCTransactionFromBlockHash(b, tx.Hash()), nil + } + } + txs := b.Transactions() + transactions := make([]interface{}, len(txs)) + var err error + for i, tx := range txs { + if transactions[i], err = formatTx(tx); err != nil { + return nil, err + } + } + fields["transactions"] = transactions + } + + uncles := b.Uncles() + uncleHashes := make([]common.Hash, len(uncles)) + for i, uncle := range uncles { + uncleHashes[i] = uncle.Hash() + } + fields["uncles"] = uncleHashes + + return fields, nil +} diff --git a/cmd/geth/run_test.go b/cmd/geth/run_test.go index da82facac36e..f7b735b84c14 100644 --- a/cmd/geth/run_test.go +++ b/cmd/geth/run_test.go @@ -17,13 +17,16 @@ package main import ( + "context" "fmt" "io/ioutil" "os" "testing" + "time" "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/internal/cmdtest" + "github.com/ethereum/go-ethereum/rpc" ) func tmpdir(t *testing.T) string { @@ -96,3 +99,28 @@ func runGeth(t *testing.T, args ...string) *testgeth { return tt } + +// waitForEndpoint attempts to connect to an RPC endpoint until it succeeds. +func waitForEndpoint(t *testing.T, endpoint string, timeout time.Duration) { + probe := func() bool { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + c, err := rpc.DialContext(ctx, endpoint) + if c != nil { + _, err = c.SupportedModules() + c.Close() + } + return err == nil + } + + start := time.Now() + for { + if probe() { + return + } + if time.Since(start) > timeout { + t.Fatal("endpoint", endpoint, "did not open within", timeout) + } + time.Sleep(200 * time.Millisecond) + } +} diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index b12e3116569c..dadc6c5fa809 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -33,7 +33,7 @@ import ( var AppHelpTemplate = `NAME: {{.App.Name}} - {{.App.Usage}} - Copyright 2013-2018 The go-ethereum Authors + Copyright 2013-2019 The go-ethereum Authors USAGE: {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}} @@ -69,22 +69,35 @@ var AppHelpFlagGroups = []flagGroup{ Flags: []cli.Flag{ configFileFlag, utils.DataDirFlag, + utils.AncientFlag, utils.KeyStoreDirFlag, utils.NoUSBFlag, + utils.SmartCardDaemonPathFlag, utils.NetworkIdFlag, utils.TestnetFlag, utils.RinkebyFlag, utils.GoerliFlag, utils.SyncModeFlag, + utils.ExitWhenSyncedFlag, utils.GCModeFlag, utils.EthStatsURLFlag, utils.IdentityFlag, - utils.LightServFlag, - utils.LightPeersFlag, utils.LightKDFFlag, utils.WhitelistFlag, }, }, + { + Name: "LIGHT CLIENT", + Flags: []cli.Flag{ + utils.LightServeFlag, + utils.LightIngressFlag, + utils.LightEgressFlag, + utils.LightMaxPeersFlag, + utils.UltraLightServersFlag, + utils.UltraLightFractionFlag, + utils.UltraLightOnlyAnnounceFlag, + }, + }, { Name: "DEVELOPER CHAIN", Flags: []cli.Flag{ @@ -136,7 +149,7 @@ var AppHelpFlagGroups = []flagGroup{ utils.CacheDatabaseFlag, utils.CacheTrieFlag, utils.CacheGCFlag, - utils.TrieCacheGenFlag, + utils.CacheNoPrefetchFlag, }, }, { @@ -144,24 +157,32 @@ var AppHelpFlagGroups = []flagGroup{ Flags: []cli.Flag{ utils.UnlockedAccountFlag, utils.PasswordFileFlag, + utils.ExternalSignerFlag, + utils.InsecureUnlockAllowedFlag, }, }, { Name: "API AND CONSOLE", Flags: []cli.Flag{ + utils.IPCDisabledFlag, + utils.IPCPathFlag, utils.RPCEnabledFlag, utils.RPCListenAddrFlag, utils.RPCPortFlag, utils.RPCApiFlag, + utils.RPCGlobalGasCap, + utils.RPCCORSDomainFlag, + utils.RPCVirtualHostsFlag, utils.WSEnabledFlag, utils.WSListenAddrFlag, utils.WSPortFlag, utils.WSApiFlag, utils.WSAllowedOriginsFlag, - utils.IPCDisabledFlag, - utils.IPCPathFlag, - utils.RPCCORSDomainFlag, - utils.RPCVirtualHostsFlag, + utils.GraphQLEnabledFlag, + utils.GraphQLListenAddrFlag, + utils.GraphQLPortFlag, + utils.GraphQLCORSDomainFlag, + utils.GraphQLVirtualHostsFlag, utils.JSpathFlag, utils.ExecFlag, utils.PreloadJSFlag, @@ -222,16 +243,8 @@ var AppHelpFlagGroups = []flagGroup{ }, debug.Flags...), }, { - Name: "METRICS AND STATS", - Flags: []cli.Flag{ - utils.MetricsEnabledFlag, - utils.MetricsEnableInfluxDBFlag, - utils.MetricsInfluxDBEndpointFlag, - utils.MetricsInfluxDBDatabaseFlag, - utils.MetricsInfluxDBUsernameFlag, - utils.MetricsInfluxDBPasswordFlag, - utils.MetricsInfluxDBTagsFlag, - }, + Name: "METRICS AND STATS", + Flags: metricsFlags, }, { Name: "WHISPER (EXPERIMENTAL)", @@ -256,6 +269,8 @@ var AppHelpFlagGroups = []flagGroup{ { Name: "DEPRECATED", Flags: []cli.Flag{ + utils.LightLegacyServFlag, + utils.LightLegacyPeersFlag, utils.MinerLegacyThreadsFlag, utils.MinerLegacyGasTargetFlag, utils.MinerLegacyGasPriceFlag, @@ -322,7 +337,7 @@ func init() { categorized[flag.String()] = struct{}{} } } - uncategorized := []cli.Flag{} + var uncategorized []cli.Flag for _, flag := range data.(*cli.App).Flags { if _, ok := categorized[flag.String()]; !ok { if strings.HasPrefix(flag.GetName(), "dashboard") { diff --git a/cmd/internal/browser/browser.go b/cmd/internal/browser/browser.go deleted file mode 100644 index 897086f47177..000000000000 --- a/cmd/internal/browser/browser.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package browser provides utilities for interacting with users' browsers. -package browser - -import ( - "os" - "os/exec" - "runtime" -) - -// Commands returns a list of possible commands to use to open a url. -func Commands() [][]string { - var cmds [][]string - if exe := os.Getenv("BROWSER"); exe != "" { - cmds = append(cmds, []string{exe}) - } - switch runtime.GOOS { - case "darwin": - cmds = append(cmds, []string{"/usr/bin/open"}) - case "windows": - cmds = append(cmds, []string{"cmd", "/c", "start"}) - default: - cmds = append(cmds, []string{"xdg-open"}) - } - cmds = append(cmds, - []string{"chrome"}, - []string{"google-chrome"}, - []string{"chromium"}, - []string{"firefox"}, - ) - return cmds -} - -// Open tries to open url in a browser and reports whether it succeeded. -func Open(url string) bool { - for _, args := range Commands() { - cmd := exec.Command(args[0], append(args[1:], url)...) - if cmd.Start() == nil { - return true - } - } - return false -} diff --git a/cmd/puppeth/genesis_test.go b/cmd/puppeth/genesis_test.go index 83e738360572..f128da24f90e 100644 --- a/cmd/puppeth/genesis_test.go +++ b/cmd/puppeth/genesis_test.go @@ -18,7 +18,6 @@ package main import ( "encoding/json" - "fmt" "io/ioutil" "reflect" "strings" @@ -61,7 +60,7 @@ func TestAlethSturebyConverter(t *testing.T) { got := strings.Split(c.Sdump(spec), "\n") for i := 0; i < len(exp) && i < len(got); i++ { if exp[i] != got[i] { - fmt.Printf("got: %v\nexp: %v\n", exp[i], got[i]) + t.Logf("got: %v\nexp: %v\n", exp[i], got[i]) } } } @@ -102,7 +101,7 @@ func TestParitySturebyConverter(t *testing.T) { got := strings.Split(c.Sdump(spec), "\n") for i := 0; i < len(exp) && i < len(got); i++ { if exp[i] != got[i] { - fmt.Printf("got: %v\nexp: %v\n", exp[i], got[i]) + t.Logf("got: %v\nexp: %v\n", exp[i], got[i]) } } } diff --git a/cmd/puppeth/module_explorer.go b/cmd/puppeth/module_explorer.go index e465fa04ad6e..8fffe1a1c468 100644 --- a/cmd/puppeth/module_explorer.go +++ b/cmd/puppeth/module_explorer.go @@ -30,108 +30,86 @@ import ( // explorerDockerfile is the Dockerfile required to run a block explorer. var explorerDockerfile = ` -FROM puppeth/explorer:latest - -ADD ethstats.json /ethstats.json -ADD chain.json /chain.json +FROM puppeth/blockscout:latest +ADD genesis.json /genesis.json RUN \ - echo '(cd ../eth-net-intelligence-api && pm2 start /ethstats.json)' > explorer.sh && \ - echo '(cd ../etherchain-light && npm start &)' >> explorer.sh && \ - echo 'exec /parity/parity --chain=/chain.json --port={{.NodePort}} --tracing=on --fat-db=on --pruning=archive' >> explorer.sh + echo 'geth --cache 512 init /genesis.json' > explorer.sh && \ + echo $'geth --networkid {{.NetworkID}} --syncmode "full" --gcmode "archive" --port {{.EthPort}} --bootnodes {{.Bootnodes}} --ethstats \'{{.Ethstats}}\' --cache=512 --rpc --rpcapi "net,web3,eth,shh,debug" --rpccorsdomain "*" --rpcvhosts "*" --ws --wsorigins "*" --exitwhensynced' >> explorer.sh && \ + echo $'exec geth --networkid {{.NetworkID}} --syncmode "full" --gcmode "archive" --port {{.EthPort}} --bootnodes {{.Bootnodes}} --ethstats \'{{.Ethstats}}\' --cache=512 --rpc --rpcapi "net,web3,eth,shh,debug" --rpccorsdomain "*" --rpcvhosts "*" --ws --wsorigins "*" &' >> explorer.sh && \ + echo '/usr/local/bin/docker-entrypoint.sh postgres &' >> explorer.sh && \ + echo 'sleep 5' >> explorer.sh && \ + echo 'mix do ecto.drop --force, ecto.create, ecto.migrate' >> explorer.sh && \ + echo 'mix phx.server' >> explorer.sh ENTRYPOINT ["/bin/sh", "explorer.sh"] ` -// explorerEthstats is the configuration file for the ethstats javascript client. -var explorerEthstats = `[ - { - "name" : "node-app", - "script" : "app.js", - "log_date_format" : "YYYY-MM-DD HH:mm Z", - "merge_logs" : false, - "watch" : false, - "max_restarts" : 10, - "exec_interpreter" : "node", - "exec_mode" : "fork_mode", - "env": - { - "NODE_ENV" : "production", - "RPC_HOST" : "localhost", - "RPC_PORT" : "8545", - "LISTENING_PORT" : "{{.Port}}", - "INSTANCE_NAME" : "{{.Name}}", - "CONTACT_DETAILS" : "", - "WS_SERVER" : "{{.Host}}", - "WS_SECRET" : "{{.Secret}}", - "VERBOSITY" : 2 - } - } -]` - // explorerComposefile is the docker-compose.yml file required to deploy and // maintain a block explorer. var explorerComposefile = ` version: '2' services: - explorer: - build: . - image: {{.Network}}/explorer - container_name: {{.Network}}_explorer_1 - ports: - - "{{.NodePort}}:{{.NodePort}}" - - "{{.NodePort}}:{{.NodePort}}/udp"{{if not .VHost}} - - "{{.WebPort}}:3000"{{end}} - volumes: - - {{.Datadir}}:/root/.local/share/io.parity.ethereum - environment: - - NODE_PORT={{.NodePort}}/tcp - - STATS={{.Ethstats}}{{if .VHost}} - - VIRTUAL_HOST={{.VHost}} - - VIRTUAL_PORT=3000{{end}} - logging: - driver: "json-file" - options: - max-size: "1m" - max-file: "10" - restart: always + explorer: + build: . + image: {{.Network}}/explorer + container_name: {{.Network}}_explorer_1 + ports: + - "{{.EthPort}}:{{.EthPort}}" + - "{{.EthPort}}:{{.EthPort}}/udp"{{if not .VHost}} + - "{{.WebPort}}:4000"{{end}} + environment: + - ETH_PORT={{.EthPort}} + - ETH_NAME={{.EthName}} + - BLOCK_TRANSFORMER={{.Transformer}}{{if .VHost}} + - VIRTUAL_HOST={{.VHost}} + - VIRTUAL_PORT=4000{{end}} + volumes: + - {{.Datadir}}:/opt/app/.ethereum + - {{.DBDir}}:/var/lib/postgresql/data + logging: + driver: "json-file" + options: + max-size: "1m" + max-file: "10" + restart: always ` // deployExplorer deploys a new block explorer container to a remote machine via // SSH, docker and docker-compose. If an instance with the specified network name // already exists there, it will be overwritten! -func deployExplorer(client *sshClient, network string, chainspec []byte, config *explorerInfos, nocache bool) ([]byte, error) { +func deployExplorer(client *sshClient, network string, bootnodes []string, config *explorerInfos, nocache bool, isClique bool) ([]byte, error) { // Generate the content to upload to the server workdir := fmt.Sprintf("%d", rand.Int63()) files := make(map[string][]byte) dockerfile := new(bytes.Buffer) template.Must(template.New("").Parse(explorerDockerfile)).Execute(dockerfile, map[string]interface{}{ - "NodePort": config.nodePort, + "NetworkID": config.node.network, + "Bootnodes": strings.Join(bootnodes, ","), + "Ethstats": config.node.ethstats, + "EthPort": config.node.port, }) files[filepath.Join(workdir, "Dockerfile")] = dockerfile.Bytes() - ethstats := new(bytes.Buffer) - template.Must(template.New("").Parse(explorerEthstats)).Execute(ethstats, map[string]interface{}{ - "Port": config.nodePort, - "Name": config.ethstats[:strings.Index(config.ethstats, ":")], - "Secret": config.ethstats[strings.Index(config.ethstats, ":")+1 : strings.Index(config.ethstats, "@")], - "Host": config.ethstats[strings.Index(config.ethstats, "@")+1:], - }) - files[filepath.Join(workdir, "ethstats.json")] = ethstats.Bytes() - + transformer := "base" + if isClique { + transformer = "clique" + } composefile := new(bytes.Buffer) template.Must(template.New("").Parse(explorerComposefile)).Execute(composefile, map[string]interface{}{ - "Datadir": config.datadir, - "Network": network, - "NodePort": config.nodePort, - "VHost": config.webHost, - "WebPort": config.webPort, - "Ethstats": config.ethstats[:strings.Index(config.ethstats, ":")], + "Network": network, + "VHost": config.host, + "Ethstats": config.node.ethstats, + "Datadir": config.node.datadir, + "DBDir": config.dbdir, + "EthPort": config.node.port, + "EthName": config.node.ethstats[:strings.Index(config.node.ethstats, ":")], + "WebPort": config.port, + "Transformer": transformer, }) files[filepath.Join(workdir, "docker-compose.yaml")] = composefile.Bytes() - - files[filepath.Join(workdir, "chain.json")] = chainspec + files[filepath.Join(workdir, "genesis.json")] = config.node.genesis // Upload the deployment files to the remote server (and clean up afterwards) if out, err := client.Upload(files); err != nil { @@ -149,22 +127,20 @@ func deployExplorer(client *sshClient, network string, chainspec []byte, config // explorerInfos is returned from a block explorer status check to allow reporting // various configuration parameters. type explorerInfos struct { - datadir string - ethstats string - nodePort int - webHost string - webPort int + node *nodeInfos + dbdir string + host string + port int } // Report converts the typed struct into a plain string->string map, containing // most - but not all - fields for reporting to the user. func (info *explorerInfos) Report() map[string]string { report := map[string]string{ - "Data directory": info.datadir, - "Node listener port ": strconv.Itoa(info.nodePort), - "Ethstats username": info.ethstats, - "Website address ": info.webHost, - "Website listener port ": strconv.Itoa(info.webPort), + "Website address ": info.host, + "Website listener port ": strconv.Itoa(info.port), + "Ethereum listener port ": strconv.Itoa(info.node.port), + "Ethstats username": info.node.ethstats, } return report } @@ -172,7 +148,7 @@ func (info *explorerInfos) Report() map[string]string { // checkExplorer does a health-check against a block explorer server to verify // whether it's running, and if yes, whether it's responsive. func checkExplorer(client *sshClient, network string) (*explorerInfos, error) { - // Inspect a possible block explorer container on the host + // Inspect a possible explorer container on the host infos, err := inspectContainer(client, fmt.Sprintf("%s_explorer_1", network)) if err != nil { return nil, err @@ -181,13 +157,13 @@ func checkExplorer(client *sshClient, network string) (*explorerInfos, error) { return nil, ErrServiceOffline } // Resolve the port from the host, or the reverse proxy - webPort := infos.portmap["3000/tcp"] - if webPort == 0 { + port := infos.portmap["4000/tcp"] + if port == 0 { if proxy, _ := checkNginx(client, network); proxy != nil { - webPort = proxy.port + port = proxy.port } } - if webPort == 0 { + if port == 0 { return nil, ErrNotExposed } // Resolve the host from the reverse-proxy and the config values @@ -196,17 +172,23 @@ func checkExplorer(client *sshClient, network string) (*explorerInfos, error) { host = client.server } // Run a sanity check to see if the devp2p is reachable - nodePort := infos.portmap[infos.envvars["NODE_PORT"]] - if err = checkPort(client.server, nodePort); err != nil { - log.Warn(fmt.Sprintf("Explorer devp2p port seems unreachable"), "server", client.server, "port", nodePort, "err", err) + p2pPort := infos.portmap[infos.envvars["ETH_PORT"]+"/tcp"] + if err = checkPort(host, p2pPort); err != nil { + log.Warn("Explorer node seems unreachable", "server", host, "port", p2pPort, "err", err) + } + if err = checkPort(host, port); err != nil { + log.Warn("Explorer service seems unreachable", "server", host, "port", port, "err", err) } // Assemble and return the useful infos stats := &explorerInfos{ - datadir: infos.volumes["/root/.local/share/io.parity.ethereum"], - nodePort: nodePort, - webHost: host, - webPort: webPort, - ethstats: infos.envvars["STATS"], + node: &nodeInfos{ + datadir: infos.volumes["/opt/app/.ethereum"], + port: infos.portmap[infos.envvars["ETH_PORT"]+"/tcp"], + ethstats: infos.envvars["ETH_NAME"], + }, + dbdir: infos.volumes["/var/lib/postgresql/data"], + host: host, + port: port, } return stats, nil } diff --git a/cmd/puppeth/wizard_dashboard.go b/cmd/puppeth/wizard_dashboard.go index 8a8370845b69..b699d7617d00 100644 --- a/cmd/puppeth/wizard_dashboard.go +++ b/cmd/puppeth/wizard_dashboard.go @@ -77,7 +77,7 @@ func (w *wizard) deployDashboard() { } case "explorer": if infos, err := checkExplorer(client, w.network); err == nil { - port = infos.webPort + port = infos.port } case "wallet": if infos, err := checkWallet(client, w.network); err == nil { diff --git a/cmd/puppeth/wizard_explorer.go b/cmd/puppeth/wizard_explorer.go index a128fb9fb52b..1df9cbc0f322 100644 --- a/cmd/puppeth/wizard_explorer.go +++ b/cmd/puppeth/wizard_explorer.go @@ -35,10 +35,6 @@ func (w *wizard) deployExplorer() { log.Error("No ethstats server configured") return } - if w.conf.Genesis.Config.Ethash == nil { - log.Error("Only ethash network supported") - return - } // Select the server to interact with server := w.selectServer() if server == "" { @@ -50,50 +46,57 @@ func (w *wizard) deployExplorer() { infos, err := checkExplorer(client, w.network) if err != nil { infos = &explorerInfos{ - nodePort: 30303, webPort: 80, webHost: client.server, + node: &nodeInfos{port: 30303}, + port: 80, + host: client.server, } } existed := err == nil - chainspec, err := newParityChainSpec(w.network, w.conf.Genesis, w.conf.bootnodes) - if err != nil { - log.Error("Failed to create chain spec for explorer", "err", err) - return - } - chain, _ := json.MarshalIndent(chainspec, "", " ") + infos.node.genesis, _ = json.MarshalIndent(w.conf.Genesis, "", " ") + infos.node.network = w.conf.Genesis.Config.ChainID.Int64() // Figure out which port to listen on fmt.Println() - fmt.Printf("Which port should the explorer listen on? (default = %d)\n", infos.webPort) - infos.webPort = w.readDefaultInt(infos.webPort) + fmt.Printf("Which port should the explorer listen on? (default = %d)\n", infos.port) + infos.port = w.readDefaultInt(infos.port) // Figure which virtual-host to deploy ethstats on - if infos.webHost, err = w.ensureVirtualHost(client, infos.webPort, infos.webHost); err != nil { + if infos.host, err = w.ensureVirtualHost(client, infos.port, infos.host); err != nil { log.Error("Failed to decide on explorer host", "err", err) return } // Figure out where the user wants to store the persistent data fmt.Println() - if infos.datadir == "" { - fmt.Printf("Where should data be stored on the remote machine?\n") - infos.datadir = w.readString() + if infos.node.datadir == "" { + fmt.Printf("Where should node data be stored on the remote machine?\n") + infos.node.datadir = w.readString() + } else { + fmt.Printf("Where should node data be stored on the remote machine? (default = %s)\n", infos.node.datadir) + infos.node.datadir = w.readDefaultString(infos.node.datadir) + } + // Figure out where the user wants to store the persistent data for backend database + fmt.Println() + if infos.dbdir == "" { + fmt.Printf("Where should postgres data be stored on the remote machine?\n") + infos.dbdir = w.readString() } else { - fmt.Printf("Where should data be stored on the remote machine? (default = %s)\n", infos.datadir) - infos.datadir = w.readDefaultString(infos.datadir) + fmt.Printf("Where should postgres data be stored on the remote machine? (default = %s)\n", infos.dbdir) + infos.dbdir = w.readDefaultString(infos.dbdir) } // Figure out which port to listen on fmt.Println() - fmt.Printf("Which TCP/UDP port should the archive node listen on? (default = %d)\n", infos.nodePort) - infos.nodePort = w.readDefaultInt(infos.nodePort) + fmt.Printf("Which TCP/UDP port should the archive node listen on? (default = %d)\n", infos.node.port) + infos.node.port = w.readDefaultInt(infos.node.port) // Set a proper name to report on the stats page fmt.Println() - if infos.ethstats == "" { + if infos.node.ethstats == "" { fmt.Printf("What should the explorer be called on the stats page?\n") - infos.ethstats = w.readString() + ":" + w.conf.ethstats + infos.node.ethstats = w.readString() + ":" + w.conf.ethstats } else { - fmt.Printf("What should the explorer be called on the stats page? (default = %s)\n", infos.ethstats) - infos.ethstats = w.readDefaultString(infos.ethstats) + ":" + w.conf.ethstats + fmt.Printf("What should the explorer be called on the stats page? (default = %s)\n", infos.node.ethstats) + infos.node.ethstats = w.readDefaultString(infos.node.ethstats) + ":" + w.conf.ethstats } // Try to deploy the explorer on the host nocache := false @@ -102,7 +105,7 @@ func (w *wizard) deployExplorer() { fmt.Printf("Should the explorer be built from scratch (y/n)? (default = no)\n") nocache = w.readDefaultYesNo(false) } - if out, err := deployExplorer(client, w.network, chain, infos, nocache); err != nil { + if out, err := deployExplorer(client, w.network, w.conf.bootnodes, infos, nocache, w.conf.Genesis.Config.Clique != nil); err != nil { log.Error("Failed to deploy explorer container", "err", err) if len(out) > 0 { fmt.Printf("%s\n", out) diff --git a/cmd/puppeth/wizard_faucet.go b/cmd/puppeth/wizard_faucet.go index 9068c1d30b5a..9f753ad68bb9 100644 --- a/cmd/puppeth/wizard_faucet.go +++ b/cmd/puppeth/wizard_faucet.go @@ -147,7 +147,7 @@ func (w *wizard) deployFaucet() { infos.node.keyPass = w.readPassword() if _, err := keystore.DecryptKey([]byte(infos.node.keyJSON), infos.node.keyPass); err != nil { - log.Error("Failed to decrypt key with given passphrase") + log.Error("Failed to decrypt key with given password") infos.node.keyJSON = "" infos.node.keyPass = "" } diff --git a/cmd/puppeth/wizard_genesis.go b/cmd/puppeth/wizard_genesis.go index 6aed09f141f7..499f320f6432 100644 --- a/cmd/puppeth/wizard_genesis.go +++ b/cmd/puppeth/wizard_genesis.go @@ -44,12 +44,13 @@ func (w *wizard) makeGenesis() { Difficulty: big.NewInt(524288), Alloc: make(core.GenesisAlloc), Config: ¶ms.ChainConfig{ - HomesteadBlock: big.NewInt(1), - EIP150Block: big.NewInt(2), - EIP155Block: big.NewInt(3), - EIP158Block: big.NewInt(3), - ByzantiumBlock: big.NewInt(4), - ConstantinopleBlock: big.NewInt(5), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), }, } // Figure out which consensus engine to choose @@ -191,7 +192,7 @@ func (w *wizard) importGenesis() { func (w *wizard) manageGenesis() { // Figure out whether to modify or export the genesis fmt.Println() - fmt.Println(" 1. Modify existing fork rules") + fmt.Println(" 1. Modify existing configurations") fmt.Println(" 2. Export genesis configurations") fmt.Println(" 3. Remove genesis configuration") @@ -226,7 +227,7 @@ func (w *wizard) manageGenesis() { w.conf.Genesis.Config.PetersburgBlock = w.conf.Genesis.Config.ConstantinopleBlock } fmt.Println() - fmt.Printf("Which block should Constantinople-Fix (remove EIP-1283) come into effect? (default = %v)\n", w.conf.Genesis.Config.PetersburgBlock) + fmt.Printf("Which block should Petersburg come into effect? (default = %v)\n", w.conf.Genesis.Config.PetersburgBlock) w.conf.Genesis.Config.PetersburgBlock = w.readDefaultBigInt(w.conf.Genesis.Config.PetersburgBlock) out, _ := json.MarshalIndent(w.conf.Genesis.Config, "", " ") diff --git a/cmd/puppeth/wizard_network.go b/cmd/puppeth/wizard_network.go index 83b10cf375cb..97302c0df8bb 100644 --- a/cmd/puppeth/wizard_network.go +++ b/cmd/puppeth/wizard_network.go @@ -174,7 +174,7 @@ func (w *wizard) deployComponent() { fmt.Println(" 1. Ethstats - Network monitoring tool") fmt.Println(" 2. Bootnode - Entry point of the network") fmt.Println(" 3. Sealer - Full node minting new blocks") - fmt.Println(" 4. Explorer - Chain analysis webservice (ethash only)") + fmt.Println(" 4. Explorer - Chain analysis webservice") fmt.Println(" 5. Wallet - Browser wallet for quick sends") fmt.Println(" 6. Faucet - Crypto faucet to give away funds") fmt.Println(" 7. Dashboard - Website listing above web-services") diff --git a/cmd/puppeth/wizard_node.go b/cmd/puppeth/wizard_node.go index e37297f6d629..2bae33214283 100644 --- a/cmd/puppeth/wizard_node.go +++ b/cmd/puppeth/wizard_node.go @@ -142,7 +142,7 @@ func (w *wizard) deployNode(boot bool) { infos.keyPass = w.readPassword() if _, err := keystore.DecryptKey([]byte(infos.keyJSON), infos.keyPass); err != nil { - log.Error("Failed to decrypt key with given passphrase") + log.Error("Failed to decrypt key with given password") return } } diff --git a/cmd/swarm/access.go b/cmd/swarm/access.go deleted file mode 100644 index 072541b6595f..000000000000 --- a/cmd/swarm/access.go +++ /dev/null @@ -1,297 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . -package main - -import ( - "crypto/rand" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "strings" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/api/client" - "gopkg.in/urfave/cli.v1" -) - -var ( - salt = make([]byte, 32) - accessCommand = cli.Command{ - CustomHelpTemplate: helpTemplate, - Name: "access", - Usage: "encrypts a reference and embeds it into a root manifest", - ArgsUsage: "", - Description: "encrypts a reference and embeds it into a root manifest", - Subcommands: []cli.Command{ - { - CustomHelpTemplate: helpTemplate, - Name: "new", - Usage: "encrypts a reference and embeds it into a root manifest", - ArgsUsage: "", - Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", - Subcommands: []cli.Command{ - { - Action: accessNewPass, - CustomHelpTemplate: helpTemplate, - Flags: []cli.Flag{ - utils.PasswordFileFlag, - SwarmDryRunFlag, - }, - Name: "pass", - Usage: "encrypts a reference with a password and embeds it into a root manifest", - ArgsUsage: "", - Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", - }, - { - Action: accessNewPK, - CustomHelpTemplate: helpTemplate, - Flags: []cli.Flag{ - utils.PasswordFileFlag, - SwarmDryRunFlag, - SwarmAccessGrantKeyFlag, - }, - Name: "pk", - Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", - ArgsUsage: "", - Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", - }, - { - Action: accessNewACT, - CustomHelpTemplate: helpTemplate, - Flags: []cli.Flag{ - SwarmAccessGrantKeysFlag, - SwarmDryRunFlag, - utils.PasswordFileFlag, - }, - Name: "act", - Usage: "encrypts a reference with the node's private key and a given grantee's public key and embeds it into a root manifest", - ArgsUsage: "", - Description: "encrypts a reference and embeds it into a root access manifest and prints the resulting manifest", - }, - }, - }, - }, - } -) - -func init() { - if _, err := io.ReadFull(rand.Reader, salt); err != nil { - panic("reading from crypto/rand failed: " + err.Error()) - } -} - -func accessNewPass(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 1 { - utils.Fatalf("Expected 1 argument - the ref") - } - - var ( - ae *api.AccessEntry - accessKey []byte - err error - ref = args[0] - password = getPassPhrase("", 0, makePasswordList(ctx)) - dryRun = ctx.Bool(SwarmDryRunFlag.Name) - ) - accessKey, ae, err = api.DoPassword(ctx, password, salt) - if err != nil { - utils.Fatalf("error getting session key: %v", err) - } - m, err := api.GenerateAccessControlManifest(ctx, ref, accessKey, ae) - if err != nil { - utils.Fatalf("had an error generating the manifest: %v", err) - } - if dryRun { - err = printManifests(m, nil) - if err != nil { - utils.Fatalf("had an error printing the manifests: %v", err) - } - } else { - err = uploadManifests(ctx, m, nil) - if err != nil { - utils.Fatalf("had an error uploading the manifests: %v", err) - } - } -} - -func accessNewPK(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 1 { - utils.Fatalf("Expected 1 argument - the ref") - } - - var ( - ae *api.AccessEntry - sessionKey []byte - err error - ref = args[0] - privateKey = getPrivKey(ctx) - granteePublicKey = ctx.String(SwarmAccessGrantKeyFlag.Name) - dryRun = ctx.Bool(SwarmDryRunFlag.Name) - ) - sessionKey, ae, err = api.DoPK(ctx, privateKey, granteePublicKey, salt) - if err != nil { - utils.Fatalf("error getting session key: %v", err) - } - m, err := api.GenerateAccessControlManifest(ctx, ref, sessionKey, ae) - if err != nil { - utils.Fatalf("had an error generating the manifest: %v", err) - } - if dryRun { - err = printManifests(m, nil) - if err != nil { - utils.Fatalf("had an error printing the manifests: %v", err) - } - } else { - err = uploadManifests(ctx, m, nil) - if err != nil { - utils.Fatalf("had an error uploading the manifests: %v", err) - } - } -} - -func accessNewACT(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 1 { - utils.Fatalf("Expected 1 argument - the ref") - } - - var ( - ae *api.AccessEntry - actManifest *api.Manifest - accessKey []byte - err error - ref = args[0] - pkGrantees = []string{} - passGrantees = []string{} - pkGranteesFilename = ctx.String(SwarmAccessGrantKeysFlag.Name) - passGranteesFilename = ctx.String(utils.PasswordFileFlag.Name) - privateKey = getPrivKey(ctx) - dryRun = ctx.Bool(SwarmDryRunFlag.Name) - ) - if pkGranteesFilename == "" && passGranteesFilename == "" { - utils.Fatalf("you have to provide either a grantee public-keys file or an encryption passwords file (or both)") - } - - if pkGranteesFilename != "" { - bytes, err := ioutil.ReadFile(pkGranteesFilename) - if err != nil { - utils.Fatalf("had an error reading the grantee public key list") - } - pkGrantees = strings.Split(strings.Trim(string(bytes), "\n"), "\n") - } - - if passGranteesFilename != "" { - bytes, err := ioutil.ReadFile(passGranteesFilename) - if err != nil { - utils.Fatalf("could not read password filename: %v", err) - } - passGrantees = strings.Split(strings.Trim(string(bytes), "\n"), "\n") - } - accessKey, ae, actManifest, err = api.DoACT(ctx, privateKey, salt, pkGrantees, passGrantees) - if err != nil { - utils.Fatalf("error generating ACT manifest: %v", err) - } - - if err != nil { - utils.Fatalf("error getting session key: %v", err) - } - m, err := api.GenerateAccessControlManifest(ctx, ref, accessKey, ae) - if err != nil { - utils.Fatalf("error generating root access manifest: %v", err) - } - - if dryRun { - err = printManifests(m, actManifest) - if err != nil { - utils.Fatalf("had an error printing the manifests: %v", err) - } - } else { - err = uploadManifests(ctx, m, actManifest) - if err != nil { - utils.Fatalf("had an error uploading the manifests: %v", err) - } - } -} - -func printManifests(rootAccessManifest, actManifest *api.Manifest) error { - js, err := json.Marshal(rootAccessManifest) - if err != nil { - return err - } - fmt.Println(string(js)) - - if actManifest != nil { - js, err := json.Marshal(actManifest) - if err != nil { - return err - } - fmt.Println(string(js)) - } - return nil -} - -func uploadManifests(ctx *cli.Context, rootAccessManifest, actManifest *api.Manifest) error { - bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client := client.NewClient(bzzapi) - - var ( - key string - err error - ) - if actManifest != nil { - key, err = client.UploadManifest(actManifest, false) - if err != nil { - return err - } - - rootAccessManifest.Entries[0].Access.Act = key - } - key, err = client.UploadManifest(rootAccessManifest, false) - if err != nil { - return err - } - fmt.Println(key) - return nil -} - -// makePasswordList reads password lines from the file specified by the global --password flag -// and also by the same subcommand --password flag. -// This function ia a fork of utils.MakePasswordList to lookup cli context for subcommand. -// Function ctx.SetGlobal is not setting the global flag value that can be accessed -// by ctx.GlobalString using the current version of cli package. -func makePasswordList(ctx *cli.Context) []string { - path := ctx.GlobalString(utils.PasswordFileFlag.Name) - if path == "" { - path = ctx.String(utils.PasswordFileFlag.Name) - if path == "" { - return nil - } - } - text, err := ioutil.ReadFile(path) - if err != nil { - utils.Fatalf("Failed to read password file: %v", err) - } - lines := strings.Split(string(text), "\n") - // Sanitise DOS line endings. - for i := range lines { - lines[i] = strings.TrimRight(lines[i], "\r") - } - return lines -} diff --git a/cmd/swarm/access_test.go b/cmd/swarm/access_test.go deleted file mode 100644 index 967ef274248f..000000000000 --- a/cmd/swarm/access_test.go +++ /dev/null @@ -1,614 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "crypto/rand" - "encoding/hex" - "encoding/json" - "io" - "io/ioutil" - gorand "math/rand" - "net/http" - "os" - "runtime" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/ecies" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/api" - swarmapi "github.com/ethereum/go-ethereum/swarm/api/client" - "github.com/ethereum/go-ethereum/swarm/testutil" - "golang.org/x/crypto/sha3" -) - -const ( - hashRegexp = `[a-f\d]{128}` - data = "notsorandomdata" -) - -var DefaultCurve = crypto.S256() - -func TestACT(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - initCluster(t) - - cases := []struct { - name string - f func(t *testing.T) - }{ - {"Password", testPassword}, - {"PK", testPK}, - {"ACTWithoutBogus", testACTWithoutBogus}, - {"ACTWithBogus", testACTWithBogus}, - } - - for _, tc := range cases { - t.Run(tc.name, tc.f) - } -} - -// testPassword tests for the correct creation of an ACT manifest protected by a password. -// The test creates bogus content, uploads it encrypted, then creates the wrapping manifest with the Access entry -// The parties participating - node (publisher), uploads to second node then disappears. Content which was uploaded -// is then fetched through 2nd node. since the tested code is not key-aware - we can just -// fetch from the 2nd node using HTTP BasicAuth -func testPassword(t *testing.T) { - dataFilename := testutil.TempFileWithContent(t, data) - defer os.RemoveAll(dataFilename) - - // upload the file with 'swarm up' and expect a hash - up := runSwarm(t, - "--bzzapi", - cluster.Nodes[0].URL, - "up", - "--encrypt", - dataFilename) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - - if len(matches) < 1 { - t.Fatal("no matches found") - } - - ref := matches[0] - tmp, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmp) - password := "smth" - passwordFilename := testutil.TempFileWithContent(t, "smth") - defer os.RemoveAll(passwordFilename) - - up = runSwarm(t, - "access", - "new", - "pass", - "--dry-run", - "--password", - passwordFilename, - ref, - ) - - _, matches = up.ExpectRegexp(".+") - up.ExpectExit() - - if len(matches) == 0 { - t.Fatalf("stdout not matched") - } - - var m api.Manifest - - err = json.Unmarshal([]byte(matches[0]), &m) - if err != nil { - t.Fatalf("unmarshal manifest: %v", err) - } - - if len(m.Entries) != 1 { - t.Fatalf("expected one manifest entry, got %v", len(m.Entries)) - } - - e := m.Entries[0] - - ct := "application/bzz-manifest+json" - if e.ContentType != ct { - t.Errorf("expected %q content type, got %q", ct, e.ContentType) - } - - if e.Access == nil { - t.Fatal("manifest access is nil") - } - - a := e.Access - - if a.Type != "pass" { - t.Errorf(`got access type %q, expected "pass"`, a.Type) - } - if len(a.Salt) < 32 { - t.Errorf(`got salt with length %v, expected not less the 32 bytes`, len(a.Salt)) - } - if a.KdfParams == nil { - t.Fatal("manifest access kdf params is nil") - } - if a.Publisher != "" { - t.Fatal("should be empty") - } - - client := swarmapi.NewClient(cluster.Nodes[0].URL) - - hash, err := client.UploadManifest(&m, false) - if err != nil { - t.Fatal(err) - } - - url := cluster.Nodes[0].URL + "/" + "bzz:/" + hash - - httpClient := &http.Client{} - response, err := httpClient.Get(url) - if err != nil { - t.Fatal(err) - } - if response.StatusCode != http.StatusUnauthorized { - t.Fatal("should be a 401") - } - authHeader := response.Header.Get("WWW-Authenticate") - if authHeader == "" { - t.Fatal("should be something here") - } - - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - t.Fatal(err) - } - req.SetBasicAuth("", password) - - response, err = http.DefaultClient.Do(req) - if err != nil { - t.Fatal(err) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - t.Errorf("expected status %v, got %v", http.StatusOK, response.StatusCode) - } - d, err := ioutil.ReadAll(response.Body) - if err != nil { - t.Fatal(err) - } - if string(d) != data { - t.Errorf("expected decrypted data %q, got %q", data, string(d)) - } - - wrongPasswordFilename := testutil.TempFileWithContent(t, "just wr0ng") - defer os.RemoveAll(wrongPasswordFilename) - - //download file with 'swarm down' with wrong password - up = runSwarm(t, - "--bzzapi", - cluster.Nodes[0].URL, - "down", - "bzz:/"+hash, - tmp, - "--password", - wrongPasswordFilename) - - _, matches = up.ExpectRegexp("unauthorized") - if len(matches) != 1 && matches[0] != "unauthorized" { - t.Fatal(`"unauthorized" not found in output"`) - } - up.ExpectExit() -} - -// testPK tests for the correct creation of an ACT manifest between two parties (publisher and grantee). -// The test creates bogus content, uploads it encrypted, then creates the wrapping manifest with the Access entry -// The parties participating - node (publisher), uploads to second node (which is also the grantee) then disappears. -// Content which was uploaded is then fetched through the grantee's http proxy. Since the tested code is private-key aware, -// the test will fail if the proxy's given private key is not granted on the ACT. -func testPK(t *testing.T) { - dataFilename := testutil.TempFileWithContent(t, data) - defer os.RemoveAll(dataFilename) - - // upload the file with 'swarm up' and expect a hash - up := runSwarm(t, - "--bzzapi", - cluster.Nodes[0].URL, - "up", - "--encrypt", - dataFilename) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - - if len(matches) < 1 { - t.Fatal("no matches found") - } - - ref := matches[0] - pk := cluster.Nodes[0].PrivateKey - granteePubKey := crypto.CompressPubkey(&pk.PublicKey) - - publisherDir, err := ioutil.TempDir("", "swarm-account-dir-temp") - if err != nil { - t.Fatal(err) - } - - passwordFilename := testutil.TempFileWithContent(t, testPassphrase) - defer os.RemoveAll(passwordFilename) - - _, publisherAccount := getTestAccount(t, publisherDir) - up = runSwarm(t, - "--bzzaccount", - publisherAccount.Address.String(), - "--password", - passwordFilename, - "--datadir", - publisherDir, - "--bzzapi", - cluster.Nodes[0].URL, - "access", - "new", - "pk", - "--dry-run", - "--grant-key", - hex.EncodeToString(granteePubKey), - ref, - ) - - _, matches = up.ExpectRegexp(".+") - up.ExpectExit() - - if len(matches) == 0 { - t.Fatalf("stdout not matched") - } - - //get the public key from the publisher directory - publicKeyFromDataDir := runSwarm(t, - "--bzzaccount", - publisherAccount.Address.String(), - "--password", - passwordFilename, - "--datadir", - publisherDir, - "print-keys", - "--compressed", - ) - _, publicKeyString := publicKeyFromDataDir.ExpectRegexp(".+") - publicKeyFromDataDir.ExpectExit() - pkComp := strings.Split(publicKeyString[0], "=")[1] - var m api.Manifest - - err = json.Unmarshal([]byte(matches[0]), &m) - if err != nil { - t.Fatalf("unmarshal manifest: %v", err) - } - - if len(m.Entries) != 1 { - t.Fatalf("expected one manifest entry, got %v", len(m.Entries)) - } - - e := m.Entries[0] - - ct := "application/bzz-manifest+json" - if e.ContentType != ct { - t.Errorf("expected %q content type, got %q", ct, e.ContentType) - } - - if e.Access == nil { - t.Fatal("manifest access is nil") - } - - a := e.Access - - if a.Type != "pk" { - t.Errorf(`got access type %q, expected "pk"`, a.Type) - } - if len(a.Salt) < 32 { - t.Errorf(`got salt with length %v, expected not less the 32 bytes`, len(a.Salt)) - } - if a.KdfParams != nil { - t.Fatal("manifest access kdf params should be nil") - } - if a.Publisher != pkComp { - t.Fatal("publisher key did not match") - } - client := swarmapi.NewClient(cluster.Nodes[0].URL) - - hash, err := client.UploadManifest(&m, false) - if err != nil { - t.Fatal(err) - } - - httpClient := &http.Client{} - - url := cluster.Nodes[0].URL + "/" + "bzz:/" + hash - response, err := httpClient.Get(url) - if err != nil { - t.Fatal(err) - } - if response.StatusCode != http.StatusOK { - t.Fatal("should be a 200") - } - d, err := ioutil.ReadAll(response.Body) - if err != nil { - t.Fatal(err) - } - if string(d) != data { - t.Errorf("expected decrypted data %q, got %q", data, string(d)) - } -} - -// testACTWithoutBogus tests the creation of the ACT manifest end-to-end, without any bogus entries (i.e. default scenario = 3 nodes 1 unauthorized) -func testACTWithoutBogus(t *testing.T) { - testACT(t, 0) -} - -// testACTWithBogus tests the creation of the ACT manifest end-to-end, with 100 bogus entries (i.e. 100 EC keys + default scenario = 3 nodes 1 unauthorized = 103 keys in the ACT manifest) -func testACTWithBogus(t *testing.T) { - testACT(t, 100) -} - -// testACT tests the e2e creation, uploading and downloading of an ACT access control with both EC keys AND password protection -// the test fires up a 3 node cluster, then randomly picks 2 nodes which will be acting as grantees to the data -// set and also protects the ACT with a password. the third node should fail decoding the reference as it will not be granted access. -// the third node then then tries to download using a correct password (and succeeds) then uses a wrong password and fails. -// the publisher uploads through one of the nodes then disappears. -func testACT(t *testing.T, bogusEntries int) { - var uploadThroughNode = cluster.Nodes[0] - client := swarmapi.NewClient(uploadThroughNode.URL) - - r1 := gorand.New(gorand.NewSource(time.Now().UnixNano())) - nodeToSkip := r1.Intn(clusterSize) // a number between 0 and 2 (node indices in `cluster`) - dataFilename := testutil.TempFileWithContent(t, data) - defer os.RemoveAll(dataFilename) - - // upload the file with 'swarm up' and expect a hash - up := runSwarm(t, - "--bzzapi", - cluster.Nodes[0].URL, - "up", - "--encrypt", - dataFilename) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - - if len(matches) < 1 { - t.Fatal("no matches found") - } - - ref := matches[0] - grantees := []string{} - for i, v := range cluster.Nodes { - if i == nodeToSkip { - continue - } - pk := v.PrivateKey - granteePubKey := crypto.CompressPubkey(&pk.PublicKey) - grantees = append(grantees, hex.EncodeToString(granteePubKey)) - } - - if bogusEntries > 0 { - bogusGrantees := []string{} - - for i := 0; i < bogusEntries; i++ { - prv, err := ecies.GenerateKey(rand.Reader, DefaultCurve, nil) - if err != nil { - t.Fatal(err) - } - bogusGrantees = append(bogusGrantees, hex.EncodeToString(crypto.CompressPubkey(&prv.ExportECDSA().PublicKey))) - } - r2 := gorand.New(gorand.NewSource(time.Now().UnixNano())) - for i := 0; i < len(grantees); i++ { - insertAtIdx := r2.Intn(len(bogusGrantees)) - bogusGrantees = append(bogusGrantees[:insertAtIdx], append([]string{grantees[i]}, bogusGrantees[insertAtIdx:]...)...) - } - grantees = bogusGrantees - } - granteesPubkeyListFile := testutil.TempFileWithContent(t, strings.Join(grantees, "\n")) - defer os.RemoveAll(granteesPubkeyListFile) - - publisherDir, err := ioutil.TempDir("", "swarm-account-dir-temp") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(publisherDir) - - passwordFilename := testutil.TempFileWithContent(t, testPassphrase) - defer os.RemoveAll(passwordFilename) - actPasswordFilename := testutil.TempFileWithContent(t, "smth") - defer os.RemoveAll(actPasswordFilename) - _, publisherAccount := getTestAccount(t, publisherDir) - up = runSwarm(t, - "--bzzaccount", - publisherAccount.Address.String(), - "--password", - passwordFilename, - "--datadir", - publisherDir, - "--bzzapi", - cluster.Nodes[0].URL, - "access", - "new", - "act", - "--grant-keys", - granteesPubkeyListFile, - "--password", - actPasswordFilename, - ref, - ) - - _, matches = up.ExpectRegexp(`[a-f\d]{64}`) - up.ExpectExit() - - if len(matches) == 0 { - t.Fatalf("stdout not matched") - } - - //get the public key from the publisher directory - publicKeyFromDataDir := runSwarm(t, - "--bzzaccount", - publisherAccount.Address.String(), - "--password", - passwordFilename, - "--datadir", - publisherDir, - "print-keys", - "--compressed", - ) - _, publicKeyString := publicKeyFromDataDir.ExpectRegexp(".+") - publicKeyFromDataDir.ExpectExit() - pkComp := strings.Split(publicKeyString[0], "=")[1] - - hash := matches[0] - m, _, err := client.DownloadManifest(hash) - if err != nil { - t.Fatalf("unmarshal manifest: %v", err) - } - - if len(m.Entries) != 1 { - t.Fatalf("expected one manifest entry, got %v", len(m.Entries)) - } - - e := m.Entries[0] - - ct := "application/bzz-manifest+json" - if e.ContentType != ct { - t.Errorf("expected %q content type, got %q", ct, e.ContentType) - } - - if e.Access == nil { - t.Fatal("manifest access is nil") - } - - a := e.Access - - if a.Type != "act" { - t.Fatalf(`got access type %q, expected "act"`, a.Type) - } - if len(a.Salt) < 32 { - t.Fatalf(`got salt with length %v, expected not less the 32 bytes`, len(a.Salt)) - } - - if a.Publisher != pkComp { - t.Fatal("publisher key did not match") - } - httpClient := &http.Client{} - - // all nodes except the skipped node should be able to decrypt the content - for i, node := range cluster.Nodes { - log.Debug("trying to fetch from node", "node index", i) - - url := node.URL + "/" + "bzz:/" + hash - response, err := httpClient.Get(url) - if err != nil { - t.Fatal(err) - } - log.Debug("got response from node", "response code", response.StatusCode) - - if i == nodeToSkip { - log.Debug("reached node to skip", "status code", response.StatusCode) - - if response.StatusCode != http.StatusUnauthorized { - t.Fatalf("should be a 401") - } - - // try downloading using a password instead, using the unauthorized node - passwordUrl := strings.Replace(url, "http://", "http://:smth@", -1) - response, err = httpClient.Get(passwordUrl) - if err != nil { - t.Fatal(err) - } - if response.StatusCode != http.StatusOK { - t.Fatal("should be a 200") - } - - // now try with the wrong password, expect 401 - passwordUrl = strings.Replace(url, "http://", "http://:smthWrong@", -1) - response, err = httpClient.Get(passwordUrl) - if err != nil { - t.Fatal(err) - } - if response.StatusCode != http.StatusUnauthorized { - t.Fatal("should be a 401") - } - continue - } - - if response.StatusCode != http.StatusOK { - t.Fatal("should be a 200") - } - d, err := ioutil.ReadAll(response.Body) - if err != nil { - t.Fatal(err) - } - if string(d) != data { - t.Errorf("expected decrypted data %q, got %q", data, string(d)) - } - } -} - -// TestKeypairSanity is a sanity test for the crypto scheme for ACT. it asserts the correct shared secret according to -// the specs at https://github.com/ethersphere/swarm-docs/blob/eb857afda906c6e7bb90d37f3f334ccce5eef230/act.md -func TestKeypairSanity(t *testing.T) { - salt := make([]byte, 32) - if _, err := io.ReadFull(rand.Reader, salt); err != nil { - t.Fatalf("reading from crypto/rand failed: %v", err.Error()) - } - sharedSecret := "a85586744a1ddd56a7ed9f33fa24f40dd745b3a941be296a0d60e329dbdb896d" - - for i, v := range []struct { - publisherPriv string - granteePub string - }{ - { - publisherPriv: "ec5541555f3bc6376788425e9d1a62f55a82901683fd7062c5eddcc373a73459", - granteePub: "0226f213613e843a413ad35b40f193910d26eb35f00154afcde9ded57479a6224a", - }, - { - publisherPriv: "70c7a73011aa56584a0009ab874794ee7e5652fd0c6911cd02f8b6267dd82d2d", - granteePub: "02e6f8d5e28faaa899744972bb847b6eb805a160494690c9ee7197ae9f619181db", - }, - } { - b, _ := hex.DecodeString(v.granteePub) - granteePub, _ := crypto.DecompressPubkey(b) - publisherPrivate, _ := crypto.HexToECDSA(v.publisherPriv) - - ssKey, err := api.NewSessionKeyPK(publisherPrivate, granteePub, salt) - if err != nil { - t.Fatal(err) - } - - hasher := sha3.NewLegacyKeccak256() - hasher.Write(salt) - shared, err := hex.DecodeString(sharedSecret) - if err != nil { - t.Fatal(err) - } - hasher.Write(shared) - sum := hasher.Sum(nil) - - if !bytes.Equal(ssKey, sum) { - t.Fatalf("%d: got a session key mismatch", i) - } - } -} diff --git a/cmd/swarm/bootnodes.go b/cmd/swarm/bootnodes.go deleted file mode 100644 index ce3cd5288e56..000000000000 --- a/cmd/swarm/bootnodes.go +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -var SwarmBootnodes = []string{ - // EF Swarm Bootnode - AWS - eu-central-1 - "enode://4c113504601930bf2000c29bcd98d1716b6167749f58bad703bae338332fe93cc9d9204f08afb44100dc7bea479205f5d162df579f9a8f76f8b402d339709023@3.122.203.99:30301", - // EF Swarm Bootnode - AWS - us-west-2 - "enode://89f2ede3371bff1ad9f2088f2012984e280287a4e2b68007c2a6ad994909c51886b4a8e9e2ecc97f9910aca538398e0a5804b0ee80a187fde1ba4f32626322ba@52.35.212.179:30301", -} diff --git a/cmd/swarm/config.go b/cmd/swarm/config.go deleted file mode 100644 index 98d4dee7b906..000000000000 --- a/cmd/swarm/config.go +++ /dev/null @@ -1,447 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "errors" - "fmt" - "io" - "os" - "reflect" - "strconv" - "strings" - "time" - "unicode" - - cli "gopkg.in/urfave/cli.v1" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/naoina/toml" - - bzzapi "github.com/ethereum/go-ethereum/swarm/api" -) - -var ( - //flag definition for the dumpconfig command - DumpConfigCommand = cli.Command{ - Action: utils.MigrateFlags(dumpConfig), - Name: "dumpconfig", - Usage: "Show configuration values", - ArgsUsage: "", - Flags: app.Flags, - Category: "MISCELLANEOUS COMMANDS", - Description: `The dumpconfig command shows configuration values.`, - } - - //flag definition for the config file command - SwarmTomlConfigPathFlag = cli.StringFlag{ - Name: "config", - Usage: "TOML configuration file", - } -) - -//constants for environment variables -const ( - SWARM_ENV_CHEQUEBOOK_ADDR = "SWARM_CHEQUEBOOK_ADDR" - SWARM_ENV_ACCOUNT = "SWARM_ACCOUNT" - SWARM_ENV_LISTEN_ADDR = "SWARM_LISTEN_ADDR" - SWARM_ENV_PORT = "SWARM_PORT" - SWARM_ENV_NETWORK_ID = "SWARM_NETWORK_ID" - SWARM_ENV_SWAP_ENABLE = "SWARM_SWAP_ENABLE" - SWARM_ENV_SWAP_API = "SWARM_SWAP_API" - SWARM_ENV_SYNC_DISABLE = "SWARM_SYNC_DISABLE" - SWARM_ENV_SYNC_UPDATE_DELAY = "SWARM_ENV_SYNC_UPDATE_DELAY" - SWARM_ENV_MAX_STREAM_PEER_SERVERS = "SWARM_ENV_MAX_STREAM_PEER_SERVERS" - SWARM_ENV_LIGHT_NODE_ENABLE = "SWARM_LIGHT_NODE_ENABLE" - SWARM_ENV_DELIVERY_SKIP_CHECK = "SWARM_DELIVERY_SKIP_CHECK" - SWARM_ENV_ENS_API = "SWARM_ENS_API" - SWARM_ENV_ENS_ADDR = "SWARM_ENS_ADDR" - SWARM_ENV_CORS = "SWARM_CORS" - SWARM_ENV_BOOTNODES = "SWARM_BOOTNODES" - SWARM_ENV_PSS_ENABLE = "SWARM_PSS_ENABLE" - SWARM_ENV_STORE_PATH = "SWARM_STORE_PATH" - SWARM_ENV_STORE_CAPACITY = "SWARM_STORE_CAPACITY" - SWARM_ENV_STORE_CACHE_CAPACITY = "SWARM_STORE_CACHE_CAPACITY" - SWARM_ENV_BOOTNODE_MODE = "SWARM_BOOTNODE_MODE" - SWARM_ACCESS_PASSWORD = "SWARM_ACCESS_PASSWORD" - SWARM_AUTO_DEFAULTPATH = "SWARM_AUTO_DEFAULTPATH" - SWARM_GLOBALSTORE_API = "SWARM_GLOBALSTORE_API" - GETH_ENV_DATADIR = "GETH_DATADIR" -) - -// These settings ensure that TOML keys use the same names as Go struct fields. -var tomlSettings = toml.Config{ - NormFieldName: func(rt reflect.Type, key string) string { - return key - }, - FieldToKey: func(rt reflect.Type, field string) string { - return field - }, - MissingField: func(rt reflect.Type, field string) error { - link := "" - if unicode.IsUpper(rune(rt.Name()[0])) && rt.PkgPath() != "main" { - link = fmt.Sprintf(", check github.com/ethereum/go-ethereum/swarm/api/config.go for available fields") - } - return fmt.Errorf("field '%s' is not defined in %s%s", field, rt.String(), link) - }, -} - -//before booting the swarm node, build the configuration -func buildConfig(ctx *cli.Context) (config *bzzapi.Config, err error) { - //start by creating a default config - config = bzzapi.NewConfig() - //first load settings from config file (if provided) - config, err = configFileOverride(config, ctx) - if err != nil { - return nil, err - } - //override settings provided by environment variables - config = envVarsOverride(config) - //override settings provided by command line - config = cmdLineOverride(config, ctx) - //validate configuration parameters - err = validateConfig(config) - - return -} - -//finally, after the configuration build phase is finished, initialize -func initSwarmNode(config *bzzapi.Config, stack *node.Node, ctx *cli.Context) { - //at this point, all vars should be set in the Config - //get the account for the provided swarm account - prvkey := getAccount(config.BzzAccount, ctx, stack) - //set the resolved config path (geth --datadir) - config.Path = expandPath(stack.InstanceDir()) - //finally, initialize the configuration - config.Init(prvkey) - //configuration phase completed here - log.Debug("Starting Swarm with the following parameters:") - //after having created the config, print it to screen - log.Debug(printConfig(config)) -} - -//configFileOverride overrides the current config with the config file, if a config file has been provided -func configFileOverride(config *bzzapi.Config, ctx *cli.Context) (*bzzapi.Config, error) { - var err error - - //only do something if the -config flag has been set - if ctx.GlobalIsSet(SwarmTomlConfigPathFlag.Name) { - var filepath string - if filepath = ctx.GlobalString(SwarmTomlConfigPathFlag.Name); filepath == "" { - utils.Fatalf("Config file flag provided with invalid file path") - } - var f *os.File - f, err = os.Open(filepath) - if err != nil { - return nil, err - } - defer f.Close() - - //decode the TOML file into a Config struct - //note that we are decoding into the existing defaultConfig; - //if an entry is not present in the file, the default entry is kept - err = tomlSettings.NewDecoder(f).Decode(&config) - // Add file name to errors that have a line number. - if _, ok := err.(*toml.LineError); ok { - err = errors.New(filepath + ", " + err.Error()) - } - } - return config, err -} - -// cmdLineOverride overrides the current config with whatever is provided through the command line -// most values are not allowed a zero value (empty string), if not otherwise noted -func cmdLineOverride(currentConfig *bzzapi.Config, ctx *cli.Context) *bzzapi.Config { - if keyid := ctx.GlobalString(SwarmAccountFlag.Name); keyid != "" { - currentConfig.BzzAccount = keyid - } - - if chbookaddr := ctx.GlobalString(ChequebookAddrFlag.Name); chbookaddr != "" { - currentConfig.Contract = common.HexToAddress(chbookaddr) - } - - if networkid := ctx.GlobalString(SwarmNetworkIdFlag.Name); networkid != "" { - id, err := strconv.ParseUint(networkid, 10, 64) - if err != nil { - utils.Fatalf("invalid cli flag %s: %v", SwarmNetworkIdFlag.Name, err) - } - if id != 0 { - currentConfig.NetworkID = id - } - } - - if ctx.GlobalIsSet(utils.DataDirFlag.Name) { - if datadir := ctx.GlobalString(utils.DataDirFlag.Name); datadir != "" { - currentConfig.Path = expandPath(datadir) - } - } - - bzzport := ctx.GlobalString(SwarmPortFlag.Name) - if len(bzzport) > 0 { - currentConfig.Port = bzzport - } - - if bzzaddr := ctx.GlobalString(SwarmListenAddrFlag.Name); bzzaddr != "" { - currentConfig.ListenAddr = bzzaddr - } - - if ctx.GlobalIsSet(SwarmSwapEnabledFlag.Name) { - currentConfig.SwapEnabled = true - } - - if ctx.GlobalIsSet(SwarmSyncDisabledFlag.Name) { - currentConfig.SyncEnabled = false - } - - if d := ctx.GlobalDuration(SwarmSyncUpdateDelay.Name); d > 0 { - currentConfig.SyncUpdateDelay = d - } - - // any value including 0 is acceptable - currentConfig.MaxStreamPeerServers = ctx.GlobalInt(SwarmMaxStreamPeerServersFlag.Name) - - if ctx.GlobalIsSet(SwarmLightNodeEnabled.Name) { - currentConfig.LightNodeEnabled = true - } - - if ctx.GlobalIsSet(SwarmDeliverySkipCheckFlag.Name) { - currentConfig.DeliverySkipCheck = true - } - - currentConfig.SwapAPI = ctx.GlobalString(SwarmSwapAPIFlag.Name) - if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" { - utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API) - } - - if ctx.GlobalIsSet(EnsAPIFlag.Name) { - ensAPIs := ctx.GlobalStringSlice(EnsAPIFlag.Name) - // preserve backward compatibility to disable ENS with --ens-api="" - if len(ensAPIs) == 1 && ensAPIs[0] == "" { - ensAPIs = nil - } - for i := range ensAPIs { - ensAPIs[i] = expandPath(ensAPIs[i]) - } - - currentConfig.EnsAPIs = ensAPIs - } - - if cors := ctx.GlobalString(CorsStringFlag.Name); cors != "" { - currentConfig.Cors = cors - } - - if storePath := ctx.GlobalString(SwarmStorePath.Name); storePath != "" { - currentConfig.LocalStoreParams.ChunkDbPath = storePath - } - - if storeCapacity := ctx.GlobalUint64(SwarmStoreCapacity.Name); storeCapacity != 0 { - currentConfig.LocalStoreParams.DbCapacity = storeCapacity - } - - if storeCacheCapacity := ctx.GlobalUint(SwarmStoreCacheCapacity.Name); storeCacheCapacity != 0 { - currentConfig.LocalStoreParams.CacheCapacity = storeCacheCapacity - } - - if ctx.GlobalIsSet(SwarmBootnodeModeFlag.Name) { - currentConfig.BootnodeMode = ctx.GlobalBool(SwarmBootnodeModeFlag.Name) - } - - if ctx.GlobalIsSet(SwarmGlobalStoreAPIFlag.Name) { - currentConfig.GlobalStoreAPI = ctx.GlobalString(SwarmGlobalStoreAPIFlag.Name) - } - - return currentConfig - -} - -// envVarsOverride overrides the current config with whatver is provided in environment variables -// most values are not allowed a zero value (empty string), if not otherwise noted -func envVarsOverride(currentConfig *bzzapi.Config) (config *bzzapi.Config) { - if keyid := os.Getenv(SWARM_ENV_ACCOUNT); keyid != "" { - currentConfig.BzzAccount = keyid - } - - if chbookaddr := os.Getenv(SWARM_ENV_CHEQUEBOOK_ADDR); chbookaddr != "" { - currentConfig.Contract = common.HexToAddress(chbookaddr) - } - - if networkid := os.Getenv(SWARM_ENV_NETWORK_ID); networkid != "" { - id, err := strconv.ParseUint(networkid, 10, 64) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_NETWORK_ID, err) - } - if id != 0 { - currentConfig.NetworkID = id - } - } - - if datadir := os.Getenv(GETH_ENV_DATADIR); datadir != "" { - currentConfig.Path = expandPath(datadir) - } - - bzzport := os.Getenv(SWARM_ENV_PORT) - if len(bzzport) > 0 { - currentConfig.Port = bzzport - } - - if bzzaddr := os.Getenv(SWARM_ENV_LISTEN_ADDR); bzzaddr != "" { - currentConfig.ListenAddr = bzzaddr - } - - if swapenable := os.Getenv(SWARM_ENV_SWAP_ENABLE); swapenable != "" { - swap, err := strconv.ParseBool(swapenable) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SWAP_ENABLE, err) - } - currentConfig.SwapEnabled = swap - } - - if syncdisable := os.Getenv(SWARM_ENV_SYNC_DISABLE); syncdisable != "" { - sync, err := strconv.ParseBool(syncdisable) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_DISABLE, err) - } - currentConfig.SyncEnabled = !sync - } - - if v := os.Getenv(SWARM_ENV_DELIVERY_SKIP_CHECK); v != "" { - skipCheck, err := strconv.ParseBool(v) - if err != nil { - currentConfig.DeliverySkipCheck = skipCheck - } - } - - if v := os.Getenv(SWARM_ENV_SYNC_UPDATE_DELAY); v != "" { - d, err := time.ParseDuration(v) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_SYNC_UPDATE_DELAY, err) - } - currentConfig.SyncUpdateDelay = d - } - - if max := os.Getenv(SWARM_ENV_MAX_STREAM_PEER_SERVERS); max != "" { - m, err := strconv.Atoi(max) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_MAX_STREAM_PEER_SERVERS, err) - } - currentConfig.MaxStreamPeerServers = m - } - - if lne := os.Getenv(SWARM_ENV_LIGHT_NODE_ENABLE); lne != "" { - lightnode, err := strconv.ParseBool(lne) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_LIGHT_NODE_ENABLE, err) - } - currentConfig.LightNodeEnabled = lightnode - } - - if swapapi := os.Getenv(SWARM_ENV_SWAP_API); swapapi != "" { - currentConfig.SwapAPI = swapapi - } - - if currentConfig.SwapEnabled && currentConfig.SwapAPI == "" { - utils.Fatalf(SWARM_ERR_SWAP_SET_NO_API) - } - - if ensapi := os.Getenv(SWARM_ENV_ENS_API); ensapi != "" { - currentConfig.EnsAPIs = strings.Split(ensapi, ",") - } - - if ensaddr := os.Getenv(SWARM_ENV_ENS_ADDR); ensaddr != "" { - currentConfig.EnsRoot = common.HexToAddress(ensaddr) - } - - if cors := os.Getenv(SWARM_ENV_CORS); cors != "" { - currentConfig.Cors = cors - } - - if bm := os.Getenv(SWARM_ENV_BOOTNODE_MODE); bm != "" { - bootnodeMode, err := strconv.ParseBool(bm) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_ENV_BOOTNODE_MODE, err) - } - currentConfig.BootnodeMode = bootnodeMode - } - - if api := os.Getenv(SWARM_GLOBALSTORE_API); api != "" { - currentConfig.GlobalStoreAPI = api - } - - return currentConfig -} - -// dumpConfig is the dumpconfig command. -// writes a default config to STDOUT -func dumpConfig(ctx *cli.Context) error { - cfg, err := buildConfig(ctx) - if err != nil { - utils.Fatalf(fmt.Sprintf("Uh oh - dumpconfig triggered an error %v", err)) - } - comment := "" - out, err := tomlSettings.Marshal(&cfg) - if err != nil { - return err - } - io.WriteString(os.Stdout, comment) - os.Stdout.Write(out) - return nil -} - -//validate configuration parameters -func validateConfig(cfg *bzzapi.Config) (err error) { - for _, ensAPI := range cfg.EnsAPIs { - if ensAPI != "" { - if err := validateEnsAPIs(ensAPI); err != nil { - return fmt.Errorf("invalid format [tld:][contract-addr@]url for ENS API endpoint configuration %q: %v", ensAPI, err) - } - } - } - return nil -} - -//validate EnsAPIs configuration parameter -func validateEnsAPIs(s string) (err error) { - // missing contract address - if strings.HasPrefix(s, "@") { - return errors.New("missing contract address") - } - // missing url - if strings.HasSuffix(s, "@") { - return errors.New("missing url") - } - // missing tld - if strings.HasPrefix(s, ":") { - return errors.New("missing tld") - } - // missing url - if strings.HasSuffix(s, ":") { - return errors.New("missing url") - } - return nil -} - -//print a Config as string -func printConfig(config *bzzapi.Config) string { - out, err := tomlSettings.Marshal(&config) - if err != nil { - return fmt.Sprintf("Something is not right with the configuration: %v", err) - } - return string(out) -} diff --git a/cmd/swarm/config_test.go b/cmd/swarm/config_test.go deleted file mode 100644 index 18be316e5fd0..000000000000 --- a/cmd/swarm/config_test.go +++ /dev/null @@ -1,575 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "fmt" - "io" - "io/ioutil" - "net" - "os" - "os/exec" - "testing" - "time" - - "github.com/docker/docker/pkg/reexec" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm" - "github.com/ethereum/go-ethereum/swarm/api" -) - -func TestConfigDump(t *testing.T) { - swarm := runSwarm(t, "dumpconfig") - defaultConf := api.NewConfig() - out, err := tomlSettings.Marshal(&defaultConf) - if err != nil { - t.Fatal(err) - } - swarm.Expect(string(out)) - swarm.ExpectExit() -} - -func TestConfigFailsSwapEnabledNoSwapApi(t *testing.T) { - flags := []string{ - fmt.Sprintf("--%s", SwarmNetworkIdFlag.Name), "42", - fmt.Sprintf("--%s", SwarmPortFlag.Name), "54545", - fmt.Sprintf("--%s", SwarmSwapEnabledFlag.Name), - } - - swarm := runSwarm(t, flags...) - swarm.Expect("Fatal: " + SWARM_ERR_SWAP_SET_NO_API + "\n") - swarm.ExpectExit() -} - -func TestConfigFailsNoBzzAccount(t *testing.T) { - flags := []string{ - fmt.Sprintf("--%s", SwarmNetworkIdFlag.Name), "42", - fmt.Sprintf("--%s", SwarmPortFlag.Name), "54545", - } - - swarm := runSwarm(t, flags...) - swarm.Expect("Fatal: " + SWARM_ERR_NO_BZZACCOUNT + "\n") - swarm.ExpectExit() -} - -func TestConfigCmdLineOverrides(t *testing.T) { - dir, err := ioutil.TempDir("", "bzztest") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - conf, account := getTestAccount(t, dir) - node := &testNode{Dir: dir} - - // assign ports - httpPort, err := assignTCPPort() - if err != nil { - t.Fatal(err) - } - - flags := []string{ - fmt.Sprintf("--%s", SwarmNetworkIdFlag.Name), "42", - fmt.Sprintf("--%s", SwarmPortFlag.Name), httpPort, - fmt.Sprintf("--%s", SwarmSyncDisabledFlag.Name), - fmt.Sprintf("--%s", CorsStringFlag.Name), "*", - fmt.Sprintf("--%s", SwarmAccountFlag.Name), account.Address.String(), - fmt.Sprintf("--%s", SwarmDeliverySkipCheckFlag.Name), - fmt.Sprintf("--%s", EnsAPIFlag.Name), "", - fmt.Sprintf("--%s", utils.DataDirFlag.Name), dir, - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), conf.IPCPath, - } - node.Cmd = runSwarm(t, flags...) - node.Cmd.InputLine(testPassphrase) - defer func() { - if t.Failed() { - node.Shutdown() - } - }() - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - - if info.Port != httpPort { - t.Fatalf("Expected port to be %s, got %s", httpPort, info.Port) - } - - if info.NetworkID != 42 { - t.Fatalf("Expected network ID to be %d, got %d", 42, info.NetworkID) - } - - if info.SyncEnabled { - t.Fatal("Expected Sync to be disabled, but is true") - } - - if !info.DeliverySkipCheck { - t.Fatal("Expected DeliverySkipCheck to be enabled, but it is not") - } - - if info.Cors != "*" { - t.Fatalf("Expected Cors flag to be set to %s, got %s", "*", info.Cors) - } - - node.Shutdown() -} - -func TestConfigFileOverrides(t *testing.T) { - - // assign ports - httpPort, err := assignTCPPort() - if err != nil { - t.Fatal(err) - } - - //create a config file - //first, create a default conf - defaultConf := api.NewConfig() - //change some values in order to test if they have been loaded - defaultConf.SyncEnabled = false - defaultConf.DeliverySkipCheck = true - defaultConf.NetworkID = 54 - defaultConf.Port = httpPort - defaultConf.DbCapacity = 9000000 - defaultConf.HiveParams.KeepAliveInterval = 6000000000 - defaultConf.Swap.Params.Strategy.AutoCashInterval = 600 * time.Second - //defaultConf.SyncParams.KeyBufferSize = 512 - //create a TOML string - out, err := tomlSettings.Marshal(&defaultConf) - if err != nil { - t.Fatalf("Error creating TOML file in TestFileOverride: %v", err) - } - //create file - f, err := ioutil.TempFile("", "testconfig.toml") - if err != nil { - t.Fatalf("Error writing TOML file in TestFileOverride: %v", err) - } - //write file - _, err = f.WriteString(string(out)) - if err != nil { - t.Fatalf("Error writing TOML file in TestFileOverride: %v", err) - } - f.Sync() - - dir, err := ioutil.TempDir("", "bzztest") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - conf, account := getTestAccount(t, dir) - node := &testNode{Dir: dir} - - flags := []string{ - fmt.Sprintf("--%s", SwarmTomlConfigPathFlag.Name), f.Name(), - fmt.Sprintf("--%s", SwarmAccountFlag.Name), account.Address.String(), - fmt.Sprintf("--%s", EnsAPIFlag.Name), "", - fmt.Sprintf("--%s", utils.DataDirFlag.Name), dir, - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), conf.IPCPath, - } - node.Cmd = runSwarm(t, flags...) - node.Cmd.InputLine(testPassphrase) - defer func() { - if t.Failed() { - node.Shutdown() - } - }() - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - - if info.Port != httpPort { - t.Fatalf("Expected port to be %s, got %s", httpPort, info.Port) - } - - if info.NetworkID != 54 { - t.Fatalf("Expected network ID to be %d, got %d", 54, info.NetworkID) - } - - if info.SyncEnabled { - t.Fatal("Expected Sync to be disabled, but is true") - } - - if !info.DeliverySkipCheck { - t.Fatal("Expected DeliverySkipCheck to be enabled, but it is not") - } - - if info.DbCapacity != 9000000 { - t.Fatalf("Expected network ID to be %d, got %d", 54, info.NetworkID) - } - - if info.HiveParams.KeepAliveInterval != 6000000000 { - t.Fatalf("Expected HiveParams KeepAliveInterval to be %d, got %d", uint64(6000000000), uint64(info.HiveParams.KeepAliveInterval)) - } - - if info.Swap.Params.Strategy.AutoCashInterval != 600*time.Second { - t.Fatalf("Expected SwapParams AutoCashInterval to be %ds, got %d", 600, info.Swap.Params.Strategy.AutoCashInterval) - } - - // if info.SyncParams.KeyBufferSize != 512 { - // t.Fatalf("Expected info.SyncParams.KeyBufferSize to be %d, got %d", 512, info.SyncParams.KeyBufferSize) - // } - - node.Shutdown() -} - -func TestConfigEnvVars(t *testing.T) { - // assign ports - httpPort, err := assignTCPPort() - if err != nil { - t.Fatal(err) - } - - envVars := os.Environ() - envVars = append(envVars, fmt.Sprintf("%s=%s", SwarmPortFlag.EnvVar, httpPort)) - envVars = append(envVars, fmt.Sprintf("%s=%s", SwarmNetworkIdFlag.EnvVar, "999")) - envVars = append(envVars, fmt.Sprintf("%s=%s", CorsStringFlag.EnvVar, "*")) - envVars = append(envVars, fmt.Sprintf("%s=%s", SwarmSyncDisabledFlag.EnvVar, "true")) - envVars = append(envVars, fmt.Sprintf("%s=%s", SwarmDeliverySkipCheckFlag.EnvVar, "true")) - - dir, err := ioutil.TempDir("", "bzztest") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - conf, account := getTestAccount(t, dir) - node := &testNode{Dir: dir} - flags := []string{ - fmt.Sprintf("--%s", SwarmAccountFlag.Name), account.Address.String(), - "--ens-api", "", - "--datadir", dir, - "--ipcpath", conf.IPCPath, - } - - //node.Cmd = runSwarm(t,flags...) - //node.Cmd.cmd.Env = envVars - //the above assignment does not work, so we need a custom Cmd here in order to pass envVars: - cmd := &exec.Cmd{ - Path: reexec.Self(), - Args: append([]string{"swarm-test"}, flags...), - Stderr: os.Stderr, - Stdout: os.Stdout, - } - cmd.Env = envVars - //stdout, err := cmd.StdoutPipe() - //if err != nil { - // t.Fatal(err) - //} - //stdout = bufio.NewReader(stdout) - var stdin io.WriteCloser - if stdin, err = cmd.StdinPipe(); err != nil { - t.Fatal(err) - } - if err := cmd.Start(); err != nil { - t.Fatal(err) - } - - //cmd.InputLine(testPassphrase) - io.WriteString(stdin, testPassphrase+"\n") - defer func() { - if t.Failed() { - node.Shutdown() - cmd.Process.Kill() - } - }() - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - - if info.Port != httpPort { - t.Fatalf("Expected port to be %s, got %s", httpPort, info.Port) - } - - if info.NetworkID != 999 { - t.Fatalf("Expected network ID to be %d, got %d", 999, info.NetworkID) - } - - if info.Cors != "*" { - t.Fatalf("Expected Cors flag to be set to %s, got %s", "*", info.Cors) - } - - if info.SyncEnabled { - t.Fatal("Expected Sync to be disabled, but is true") - } - - if !info.DeliverySkipCheck { - t.Fatal("Expected DeliverySkipCheck to be enabled, but it is not") - } - - node.Shutdown() - cmd.Process.Kill() -} - -func TestConfigCmdLineOverridesFile(t *testing.T) { - - // assign ports - httpPort, err := assignTCPPort() - if err != nil { - t.Fatal(err) - } - - //create a config file - //first, create a default conf - defaultConf := api.NewConfig() - //change some values in order to test if they have been loaded - defaultConf.SyncEnabled = true - defaultConf.NetworkID = 54 - defaultConf.Port = "8588" - defaultConf.DbCapacity = 9000000 - defaultConf.HiveParams.KeepAliveInterval = 6000000000 - defaultConf.Swap.Params.Strategy.AutoCashInterval = 600 * time.Second - //defaultConf.SyncParams.KeyBufferSize = 512 - //create a TOML file - out, err := tomlSettings.Marshal(&defaultConf) - if err != nil { - t.Fatalf("Error creating TOML file in TestFileOverride: %v", err) - } - //write file - fname := "testconfig.toml" - f, err := ioutil.TempFile("", fname) - if err != nil { - t.Fatalf("Error writing TOML file in TestFileOverride: %v", err) - } - defer os.Remove(fname) - //write file - _, err = f.WriteString(string(out)) - if err != nil { - t.Fatalf("Error writing TOML file in TestFileOverride: %v", err) - } - f.Sync() - - dir, err := ioutil.TempDir("", "bzztest") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - conf, account := getTestAccount(t, dir) - node := &testNode{Dir: dir} - - expectNetworkId := uint64(77) - - flags := []string{ - fmt.Sprintf("--%s", SwarmNetworkIdFlag.Name), "77", - fmt.Sprintf("--%s", SwarmPortFlag.Name), httpPort, - fmt.Sprintf("--%s", SwarmSyncDisabledFlag.Name), - fmt.Sprintf("--%s", SwarmTomlConfigPathFlag.Name), f.Name(), - fmt.Sprintf("--%s", SwarmAccountFlag.Name), account.Address.String(), - fmt.Sprintf("--%s", EnsAPIFlag.Name), "", - fmt.Sprintf("--%s", utils.DataDirFlag.Name), dir, - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), conf.IPCPath, - } - node.Cmd = runSwarm(t, flags...) - node.Cmd.InputLine(testPassphrase) - defer func() { - if t.Failed() { - node.Shutdown() - } - }() - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - - if info.Port != httpPort { - t.Fatalf("Expected port to be %s, got %s", httpPort, info.Port) - } - - if info.NetworkID != expectNetworkId { - t.Fatalf("Expected network ID to be %d, got %d", expectNetworkId, info.NetworkID) - } - - if info.SyncEnabled { - t.Fatal("Expected Sync to be disabled, but is true") - } - - if info.LocalStoreParams.DbCapacity != 9000000 { - t.Fatalf("Expected Capacity to be %d, got %d", 9000000, info.LocalStoreParams.DbCapacity) - } - - if info.HiveParams.KeepAliveInterval != 6000000000 { - t.Fatalf("Expected HiveParams KeepAliveInterval to be %d, got %d", uint64(6000000000), uint64(info.HiveParams.KeepAliveInterval)) - } - - if info.Swap.Params.Strategy.AutoCashInterval != 600*time.Second { - t.Fatalf("Expected SwapParams AutoCashInterval to be %ds, got %d", 600, info.Swap.Params.Strategy.AutoCashInterval) - } - - // if info.SyncParams.KeyBufferSize != 512 { - // t.Fatalf("Expected info.SyncParams.KeyBufferSize to be %d, got %d", 512, info.SyncParams.KeyBufferSize) - // } - - node.Shutdown() -} - -func TestConfigValidate(t *testing.T) { - for _, c := range []struct { - cfg *api.Config - err string - }{ - { - cfg: &api.Config{EnsAPIs: []string{ - "/data/testnet/geth.ipc", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "http://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "ws://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "test:/data/testnet/geth.ipc", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "test:ws://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "314159265dD8dbb310642f98f50C066173C1259b@/data/testnet/geth.ipc", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "314159265dD8dbb310642f98f50C066173C1259b@http://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "314159265dD8dbb310642f98f50C066173C1259b@ws://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "test:314159265dD8dbb310642f98f50C066173C1259b@/data/testnet/geth.ipc", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "eth:314159265dD8dbb310642f98f50C066173C1259b@http://127.0.0.1:1234", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "eth:314159265dD8dbb310642f98f50C066173C1259b@ws://127.0.0.1:12344", - }}, - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "eth:", - }}, - err: "invalid format [tld:][contract-addr@]url for ENS API endpoint configuration \"eth:\": missing url", - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "314159265dD8dbb310642f98f50C066173C1259b@", - }}, - err: "invalid format [tld:][contract-addr@]url for ENS API endpoint configuration \"314159265dD8dbb310642f98f50C066173C1259b@\": missing url", - }, - { - cfg: &api.Config{EnsAPIs: []string{ - ":314159265dD8dbb310642f98f50C066173C1259", - }}, - err: "invalid format [tld:][contract-addr@]url for ENS API endpoint configuration \":314159265dD8dbb310642f98f50C066173C1259\": missing tld", - }, - { - cfg: &api.Config{EnsAPIs: []string{ - "@/data/testnet/geth.ipc", - }}, - err: "invalid format [tld:][contract-addr@]url for ENS API endpoint configuration \"@/data/testnet/geth.ipc\": missing contract address", - }, - } { - err := validateConfig(c.cfg) - if c.err != "" && err.Error() != c.err { - t.Errorf("expected error %q, got %q", c.err, err) - } - if c.err == "" && err != nil { - t.Errorf("unexpected error %q", err) - } - } -} - -func assignTCPPort() (string, error) { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return "", err - } - l.Close() - _, port, err := net.SplitHostPort(l.Addr().String()) - if err != nil { - return "", err - } - return port, nil -} diff --git a/cmd/swarm/db.go b/cmd/swarm/db.go deleted file mode 100644 index 7916beffceb3..000000000000 --- a/cmd/swarm/db.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "fmt" - "io" - "os" - "path/filepath" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/storage" - "gopkg.in/urfave/cli.v1" -) - -var dbCommand = cli.Command{ - Name: "db", - CustomHelpTemplate: helpTemplate, - Usage: "manage the local chunk database", - ArgsUsage: "db COMMAND", - Description: "Manage the local chunk database", - Subcommands: []cli.Command{ - { - Action: dbExport, - CustomHelpTemplate: helpTemplate, - Name: "export", - Usage: "export a local chunk database as a tar archive (use - to send to stdout)", - ArgsUsage: " ", - Description: ` -Export a local chunk database as a tar archive (use - to send to stdout). - - swarm db export ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar - -The export may be quite large, consider piping the output through the Unix -pv(1) tool to get a progress bar: - - swarm db export ~/.ethereum/swarm/bzz-KEY/chunks - | pv > chunks.tar -`, - }, - { - Action: dbImport, - CustomHelpTemplate: helpTemplate, - Name: "import", - Usage: "import chunks from a tar archive into a local chunk database (use - to read from stdin)", - ArgsUsage: " ", - Description: `Import chunks from a tar archive into a local chunk database (use - to read from stdin). - - swarm db import ~/.ethereum/swarm/bzz-KEY/chunks chunks.tar - -The import may be quite large, consider piping the input through the Unix -pv(1) tool to get a progress bar: - - pv chunks.tar | swarm db import ~/.ethereum/swarm/bzz-KEY/chunks -`, - }, - }, -} - -func dbExport(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 3 { - utils.Fatalf("invalid arguments, please specify both (path to a local chunk database), (path to write the tar archive to, - for stdout) and the base key") - } - - store, err := openLDBStore(args[0], common.Hex2Bytes(args[2])) - if err != nil { - utils.Fatalf("error opening local chunk database: %s", err) - } - defer store.Close() - - var out io.Writer - if args[1] == "-" { - out = os.Stdout - } else { - f, err := os.Create(args[1]) - if err != nil { - utils.Fatalf("error opening output file: %s", err) - } - defer f.Close() - out = f - } - - count, err := store.Export(out) - if err != nil { - utils.Fatalf("error exporting local chunk database: %s", err) - } - - log.Info(fmt.Sprintf("successfully exported %d chunks", count)) -} - -func dbImport(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 3 { - utils.Fatalf("invalid arguments, please specify both (path to a local chunk database), (path to read the tar archive from, - for stdin) and the base key") - } - - store, err := openLDBStore(args[0], common.Hex2Bytes(args[2])) - if err != nil { - utils.Fatalf("error opening local chunk database: %s", err) - } - defer store.Close() - - var in io.Reader - if args[1] == "-" { - in = os.Stdin - } else { - f, err := os.Open(args[1]) - if err != nil { - utils.Fatalf("error opening input file: %s", err) - } - defer f.Close() - in = f - } - - count, err := store.Import(in) - if err != nil { - utils.Fatalf("error importing local chunk database: %s", err) - } - - log.Info(fmt.Sprintf("successfully imported %d chunks", count)) -} - -func openLDBStore(path string, basekey []byte) (*storage.LDBStore, error) { - if _, err := os.Stat(filepath.Join(path, "CURRENT")); err != nil { - return nil, fmt.Errorf("invalid chunkdb path: %s", err) - } - - storeparams := storage.NewDefaultStoreParams() - ldbparams := storage.NewLDBStoreParams(storeparams, path) - ldbparams.BaseKey = basekey - return storage.NewLDBStore(ldbparams) -} diff --git a/cmd/swarm/download.go b/cmd/swarm/download.go deleted file mode 100644 index fcbefa020666..000000000000 --- a/cmd/swarm/download.go +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . -package main - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/api" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - "gopkg.in/urfave/cli.v1" -) - -var downloadCommand = cli.Command{ - Action: download, - Name: "down", - Flags: []cli.Flag{SwarmRecursiveFlag, SwarmAccessPasswordFlag}, - Usage: "downloads a swarm manifest or a file inside a manifest", - ArgsUsage: " []", - Description: `Downloads a swarm bzz uri to the given dir. When no dir is provided, working directory is assumed. --recursive flag is expected when downloading a manifest with multiple entries.`, -} - -func download(ctx *cli.Context) { - log.Debug("downloading content using swarm down") - args := ctx.Args() - dest := "." - - switch len(args) { - case 0: - utils.Fatalf("Usage: swarm down [options] []") - case 1: - log.Trace(fmt.Sprintf("swarm down: no destination path - assuming working dir")) - default: - log.Trace(fmt.Sprintf("destination path arg: %s", args[1])) - if absDest, err := filepath.Abs(args[1]); err == nil { - dest = absDest - } else { - utils.Fatalf("could not get download path: %v", err) - } - } - - var ( - bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - isRecursive = ctx.Bool(SwarmRecursiveFlag.Name) - client = swarm.NewClient(bzzapi) - ) - - if fi, err := os.Stat(dest); err == nil { - if isRecursive && !fi.Mode().IsDir() { - utils.Fatalf("destination path is not a directory!") - } - } else { - if !os.IsNotExist(err) { - utils.Fatalf("could not stat path: %v", err) - } - } - - uri, err := api.Parse(args[0]) - if err != nil { - utils.Fatalf("could not parse uri argument: %v", err) - } - - dl := func(credentials string) error { - // assume behaviour according to --recursive switch - if isRecursive { - if err := client.DownloadDirectory(uri.Addr, uri.Path, dest, credentials); err != nil { - if err == swarm.ErrUnauthorized { - return err - } - return fmt.Errorf("directory %s: %v", uri.Path, err) - } - } else { - // we are downloading a file - log.Debug("downloading file/path from a manifest", "uri.Addr", uri.Addr, "uri.Path", uri.Path) - - err := client.DownloadFile(uri.Addr, uri.Path, dest, credentials) - if err != nil { - if err == swarm.ErrUnauthorized { - return err - } - return fmt.Errorf("file %s from address: %s: %v", uri.Path, uri.Addr, err) - } - } - return nil - } - if passwords := makePasswordList(ctx); passwords != nil { - password := getPassPhrase(fmt.Sprintf("Downloading %s is restricted", uri), 0, passwords) - err = dl(password) - } else { - err = dl("") - } - if err != nil { - utils.Fatalf("download: %v", err) - } -} diff --git a/cmd/swarm/export_test.go b/cmd/swarm/export_test.go deleted file mode 100644 index e8671eea797a..000000000000 --- a/cmd/swarm/export_test.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "crypto/md5" - "io" - "net/http" - "os" - "runtime" - "strings" - "testing" - - "github.com/ethereum/go-ethereum/swarm" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -// TestCLISwarmExportImport perform the following test: -// 1. runs swarm node -// 2. uploads a random file -// 3. runs an export of the local datastore -// 4. runs a second swarm node -// 5. imports the exported datastore -// 6. fetches the uploaded random file from the second node -func TestCLISwarmExportImport(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - cluster := newTestCluster(t, 1) - - // generate random 1mb file - content := testutil.RandomBytes(1, 1000000) - fileName := testutil.TempFileWithContent(t, string(content)) - defer os.Remove(fileName) - - // upload the file with 'swarm up' and expect a hash - up := runSwarm(t, "--bzzapi", cluster.Nodes[0].URL, "up", fileName) - _, matches := up.ExpectRegexp(`[a-f\d]{64}`) - up.ExpectExit() - hash := matches[0] - - var info swarm.Info - if err := cluster.Nodes[0].Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - - cluster.Stop() - defer cluster.Cleanup() - - // generate an export.tar - exportCmd := runSwarm(t, "db", "export", info.Path+"/chunks", info.Path+"/export.tar", strings.TrimPrefix(info.BzzKey, "0x")) - exportCmd.ExpectExit() - - // start second cluster - cluster2 := newTestCluster(t, 1) - - var info2 swarm.Info - if err := cluster2.Nodes[0].Client.Call(&info2, "bzz_info"); err != nil { - t.Fatal(err) - } - - // stop second cluster, so that we close LevelDB - cluster2.Stop() - defer cluster2.Cleanup() - - // import the export.tar - importCmd := runSwarm(t, "db", "import", info2.Path+"/chunks", info.Path+"/export.tar", strings.TrimPrefix(info2.BzzKey, "0x")) - importCmd.ExpectExit() - - // spin second cluster back up - cluster2.StartExistingNodes(t, 1, strings.TrimPrefix(info2.BzzAccount, "0x")) - - // try to fetch imported file - res, err := http.Get(cluster2.Nodes[0].URL + "/bzz:/" + hash) - if err != nil { - t.Fatal(err) - } - - if res.StatusCode != 200 { - t.Fatalf("expected HTTP status %d, got %s", 200, res.Status) - } - - // compare downloaded file with the generated random file - mustEqualFiles(t, bytes.NewReader(content), res.Body) -} - -func mustEqualFiles(t *testing.T, up io.Reader, down io.Reader) { - h := md5.New() - upLen, err := io.Copy(h, up) - if err != nil { - t.Fatal(err) - } - upHash := h.Sum(nil) - h.Reset() - downLen, err := io.Copy(h, down) - if err != nil { - t.Fatal(err) - } - downHash := h.Sum(nil) - - if !bytes.Equal(upHash, downHash) || upLen != downLen { - t.Fatalf("downloaded imported file md5=%x (length %v) is not the same as the generated one mp5=%x (length %v)", downHash, downLen, upHash, upLen) - } -} diff --git a/cmd/swarm/feeds.go b/cmd/swarm/feeds.go deleted file mode 100644 index 6cd971a92c17..000000000000 --- a/cmd/swarm/feeds.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// Command feed allows the user to create and update signed Swarm feeds -package main - -import ( - "fmt" - "strings" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - - "github.com/ethereum/go-ethereum/cmd/utils" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "gopkg.in/urfave/cli.v1" -) - -var feedCommand = cli.Command{ - CustomHelpTemplate: helpTemplate, - Name: "feed", - Usage: "(Advanced) Create and update Swarm Feeds", - ArgsUsage: "", - Description: "Works with Swarm Feeds", - Subcommands: []cli.Command{ - { - Action: feedCreateManifest, - CustomHelpTemplate: helpTemplate, - Name: "create", - Usage: "creates and publishes a new feed manifest", - Description: `creates and publishes a new feed manifest pointing to a specified user's updates about a particular topic. - The feed topic can be built in the following ways: - * use --topic to set the topic to an arbitrary binary hex string. - * use --name to set the topic to a human-readable name. - For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. - * use both --topic and --name to create named subtopics. - For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning - this feed tracks a discussion about that contract. - The --user flag allows to have this manifest refer to a user other than yourself. If not specified, - it will then default to your local account (--bzzaccount)`, - Flags: []cli.Flag{SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, - }, - { - Action: feedUpdate, - CustomHelpTemplate: helpTemplate, - Name: "update", - Usage: "updates the content of an existing Swarm Feed", - ArgsUsage: "<0x Hex data>", - Description: `publishes a new update on the specified topic - The feed topic can be built in the following ways: - * use --topic to set the topic to an arbitrary binary hex string. - * use --name to set the topic to a human-readable name. - For example --name could be set to "profile-picture", meaning this feed allows to get this user's current profile picture. - * use both --topic and --name to create named subtopics. - For example, --topic could be set to an Ethereum contract address and --name could be set to "comments", meaning - this feed tracks a discussion about that contract. - - If you have a manifest, you can specify it with --manifest to refer to the feed, - instead of using --topic / --name - `, - Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag}, - }, - { - Action: feedInfo, - CustomHelpTemplate: helpTemplate, - Name: "info", - Usage: "obtains information about an existing Swarm feed", - Description: `obtains information about an existing Swarm feed - The topic can be specified directly with the --topic flag as an hex string - If no topic is specified, the default topic (zero) will be used - The --name flag can be used to specify subtopics with a specific name. - The --user flag allows to refer to a user other than yourself. If not specified, - it will then default to your local account (--bzzaccount) - If you have a manifest, you can specify it with --manifest instead of --topic / --name / ---user - to refer to the feed`, - Flags: []cli.Flag{SwarmFeedManifestFlag, SwarmFeedNameFlag, SwarmFeedTopicFlag, SwarmFeedUserFlag}, - }, - }, -} - -func NewGenericSigner(ctx *cli.Context) feed.Signer { - return feed.NewGenericSigner(getPrivKey(ctx)) -} - -func getTopic(ctx *cli.Context) (topic feed.Topic) { - var name = ctx.String(SwarmFeedNameFlag.Name) - var relatedTopic = ctx.String(SwarmFeedTopicFlag.Name) - var relatedTopicBytes []byte - var err error - - if relatedTopic != "" { - relatedTopicBytes, err = hexutil.Decode(relatedTopic) - if err != nil { - utils.Fatalf("Error parsing topic: %s", err) - } - } - - topic, err = feed.NewTopic(name, relatedTopicBytes) - if err != nil { - utils.Fatalf("Error parsing topic: %s", err) - } - return topic -} - -// swarm feed create [--name ] [--data <0x Hexdata> [--multihash=false]] -// swarm feed update <0x Hexdata> [--multihash=false] -// swarm feed info - -func feedCreateManifest(ctx *cli.Context) { - var ( - bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client = swarm.NewClient(bzzapi) - ) - - newFeedUpdateRequest := feed.NewFirstRequest(getTopic(ctx)) - newFeedUpdateRequest.Feed.User = feedGetUser(ctx) - - manifestAddress, err := client.CreateFeedWithManifest(newFeedUpdateRequest) - if err != nil { - utils.Fatalf("Error creating feed manifest: %s", err.Error()) - return - } - fmt.Println(manifestAddress) // output manifest address to the user in a single line (useful for other commands to pick up) - -} - -func feedUpdate(ctx *cli.Context) { - args := ctx.Args() - - var ( - bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client = swarm.NewClient(bzzapi) - manifestAddressOrDomain = ctx.String(SwarmFeedManifestFlag.Name) - ) - - if len(args) < 1 { - fmt.Println("Incorrect number of arguments") - cli.ShowCommandHelpAndExit(ctx, "update", 1) - return - } - - signer := NewGenericSigner(ctx) - - data, err := hexutil.Decode(args[0]) - if err != nil { - utils.Fatalf("Error parsing data: %s", err.Error()) - return - } - - var updateRequest *feed.Request - var query *feed.Query - - if manifestAddressOrDomain == "" { - query = new(feed.Query) - query.User = signer.Address() - query.Topic = getTopic(ctx) - } - - // Retrieve a feed update request - updateRequest, err = client.GetFeedRequest(query, manifestAddressOrDomain) - if err != nil { - utils.Fatalf("Error retrieving feed status: %s", err.Error()) - } - - // Check that the provided signer matches the request to sign - if updateRequest.User != signer.Address() { - utils.Fatalf("Signer address does not match the update request") - } - - // set the new data - updateRequest.SetData(data) - - // sign update - if err = updateRequest.Sign(signer); err != nil { - utils.Fatalf("Error signing feed update: %s", err.Error()) - } - - // post update - err = client.UpdateFeed(updateRequest) - if err != nil { - utils.Fatalf("Error updating feed: %s", err.Error()) - return - } -} - -func feedInfo(ctx *cli.Context) { - var ( - bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client = swarm.NewClient(bzzapi) - manifestAddressOrDomain = ctx.String(SwarmFeedManifestFlag.Name) - ) - - var query *feed.Query - if manifestAddressOrDomain == "" { - query = new(feed.Query) - query.Topic = getTopic(ctx) - query.User = feedGetUser(ctx) - } - - metadata, err := client.GetFeedRequest(query, manifestAddressOrDomain) - if err != nil { - utils.Fatalf("Error retrieving feed metadata: %s", err.Error()) - return - } - encodedMetadata, err := metadata.MarshalJSON() - if err != nil { - utils.Fatalf("Error encoding metadata to JSON for display:%s", err) - } - fmt.Println(string(encodedMetadata)) -} - -func feedGetUser(ctx *cli.Context) common.Address { - var user = ctx.String(SwarmFeedUserFlag.Name) - if user != "" { - return common.HexToAddress(user) - } - pk := getPrivKey(ctx) - if pk == nil { - utils.Fatalf("Cannot read private key. Must specify --user or --bzzaccount") - } - return crypto.PubkeyToAddress(pk.PublicKey) - -} diff --git a/cmd/swarm/feeds_test.go b/cmd/swarm/feeds_test.go deleted file mode 100644 index 4c40f62a8292..000000000000 --- a/cmd/swarm/feeds_test.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "encoding/json" - "io/ioutil" - "os" - "testing" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/api" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -func TestCLIFeedUpdate(t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, func(api *api.API) swarmhttp.TestServer { - return swarmhttp.NewServer(api, "") - }, nil) - log.Info("starting a test swarm server") - defer srv.Close() - - // create a private key file for signing - privkeyHex := "0000000000000000000000000000000000000000000000000000000000001979" - privKey, _ := crypto.HexToECDSA(privkeyHex) - address := crypto.PubkeyToAddress(privKey.PublicKey) - - pkFileName := testutil.TempFileWithContent(t, privkeyHex) - defer os.Remove(pkFileName) - - // compose a topic. We'll be doing quotes about Miguel de Cervantes - var topic feed.Topic - subject := []byte("Miguel de Cervantes") - copy(topic[:], subject[:]) - name := "quotes" - - // prepare some data for the update - data := []byte("En boca cerrada no entran moscas") - hexData := hexutil.Encode(data) - - flags := []string{ - "--bzzapi", srv.URL, - "--bzzaccount", pkFileName, - "feed", "update", - "--topic", topic.Hex(), - "--name", name, - hexData} - - // create an update and expect an exit without errors - log.Info("updating a feed with 'swarm feed update'") - cmd := runSwarm(t, flags...) - cmd.ExpectExit() - - // now try to get the update using the client - client := swarm.NewClient(srv.URL) - - // build the same topic as before, this time - // we use NewTopic to create a topic automatically. - topic, err := feed.NewTopic(name, subject) - if err != nil { - t.Fatal(err) - } - - // Feed configures whose updates we will be looking up. - fd := feed.Feed{ - Topic: topic, - User: address, - } - - // Build a query to get the latest update - query := feed.NewQueryLatest(&fd, lookup.NoClue) - - // retrieve content! - reader, err := client.QueryFeed(query, "") - if err != nil { - t.Fatal(err) - } - - retrieved, err := ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - - // check we retrieved the sent information - if !bytes.Equal(data, retrieved) { - t.Fatalf("Received %s, expected %s", retrieved, data) - } - - // Now retrieve info for the next update - flags = []string{ - "--bzzapi", srv.URL, - "feed", "info", - "--topic", topic.Hex(), - "--user", address.Hex(), - } - - log.Info("getting feed info with 'swarm feed info'") - cmd = runSwarm(t, flags...) - _, matches := cmd.ExpectRegexp(`.*`) // regex hack to extract stdout - cmd.ExpectExit() - - // verify we can deserialize the result as a valid JSON - var request feed.Request - err = json.Unmarshal([]byte(matches[0]), &request) - if err != nil { - t.Fatal(err) - } - - // make sure the retrieved feed is the same - if request.Feed != fd { - t.Fatalf("Expected feed to be: %s, got %s", fd, request.Feed) - } - - // test publishing a manifest - flags = []string{ - "--bzzapi", srv.URL, - "--bzzaccount", pkFileName, - "feed", "create", - "--topic", topic.Hex(), - } - - log.Info("Publishing manifest with 'swarm feed create'") - cmd = runSwarm(t, flags...) - _, matches = cmd.ExpectRegexp(`[a-f\d]{64}`) - cmd.ExpectExit() - - manifestAddress := matches[0] // read the received feed manifest - - // now attempt to lookup the latest update using a manifest instead - reader, err = client.QueryFeed(nil, manifestAddress) - if err != nil { - t.Fatal(err) - } - - retrieved, err = ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(data, retrieved) { - t.Fatalf("Received %s, expected %s", retrieved, data) - } - - // test publishing a manifest for a different user - flags = []string{ - "--bzzapi", srv.URL, - "feed", "create", - "--topic", topic.Hex(), - "--user", "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", // different user - } - - log.Info("Publishing manifest with 'swarm feed create' for a different user") - cmd = runSwarm(t, flags...) - _, matches = cmd.ExpectRegexp(`[a-f\d]{64}`) - cmd.ExpectExit() - - manifestAddress = matches[0] // read the received feed manifest - - // now let's try to update that user's manifest which we don't have the private key for - flags = []string{ - "--bzzapi", srv.URL, - "--bzzaccount", pkFileName, - "feed", "update", - "--manifest", manifestAddress, - hexData} - - // create an update and expect an error given there is a user mismatch - log.Info("updating a feed with 'swarm feed update'") - cmd = runSwarm(t, flags...) - cmd.ExpectRegexp("Fatal:.*") // best way so far to detect a failure. - cmd.ExpectExit() - if cmd.ExitStatus() == 0 { - t.Fatal("Expected nonzero exit code when updating a manifest with the wrong user. Got 0.") - } -} diff --git a/cmd/swarm/flags.go b/cmd/swarm/flags.go deleted file mode 100644 index b092a77476c2..000000000000 --- a/cmd/swarm/flags.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// Command feed allows the user to create and update signed Swarm feeds -package main - -import cli "gopkg.in/urfave/cli.v1" - -var ( - ChequebookAddrFlag = cli.StringFlag{ - Name: "chequebook", - Usage: "chequebook contract address", - EnvVar: SWARM_ENV_CHEQUEBOOK_ADDR, - } - SwarmAccountFlag = cli.StringFlag{ - Name: "bzzaccount", - Usage: "Swarm account key file", - EnvVar: SWARM_ENV_ACCOUNT, - } - SwarmListenAddrFlag = cli.StringFlag{ - Name: "httpaddr", - Usage: "Swarm HTTP API listening interface", - EnvVar: SWARM_ENV_LISTEN_ADDR, - } - SwarmPortFlag = cli.StringFlag{ - Name: "bzzport", - Usage: "Swarm local http api port", - EnvVar: SWARM_ENV_PORT, - } - SwarmNetworkIdFlag = cli.IntFlag{ - Name: "bzznetworkid", - Usage: "Network identifier (integer, default 3=swarm testnet)", - EnvVar: SWARM_ENV_NETWORK_ID, - } - SwarmSwapEnabledFlag = cli.BoolFlag{ - Name: "swap", - Usage: "Swarm SWAP enabled (default false)", - EnvVar: SWARM_ENV_SWAP_ENABLE, - } - SwarmSwapAPIFlag = cli.StringFlag{ - Name: "swap-api", - Usage: "URL of the Ethereum API provider to use to settle SWAP payments", - EnvVar: SWARM_ENV_SWAP_API, - } - SwarmSyncDisabledFlag = cli.BoolTFlag{ - Name: "nosync", - Usage: "Disable swarm syncing", - EnvVar: SWARM_ENV_SYNC_DISABLE, - } - SwarmSyncUpdateDelay = cli.DurationFlag{ - Name: "sync-update-delay", - Usage: "Duration for sync subscriptions update after no new peers are added (default 15s)", - EnvVar: SWARM_ENV_SYNC_UPDATE_DELAY, - } - SwarmMaxStreamPeerServersFlag = cli.IntFlag{ - Name: "max-stream-peer-servers", - Usage: "Limit of Stream peer servers, 0 denotes unlimited", - EnvVar: SWARM_ENV_MAX_STREAM_PEER_SERVERS, - Value: 10000, // A very large default value is possible as stream servers have very small memory footprint - } - SwarmLightNodeEnabled = cli.BoolFlag{ - Name: "lightnode", - Usage: "Enable Swarm LightNode (default false)", - EnvVar: SWARM_ENV_LIGHT_NODE_ENABLE, - } - SwarmDeliverySkipCheckFlag = cli.BoolFlag{ - Name: "delivery-skip-check", - Usage: "Skip chunk delivery check (default false)", - EnvVar: SWARM_ENV_DELIVERY_SKIP_CHECK, - } - EnsAPIFlag = cli.StringSliceFlag{ - Name: "ens-api", - Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url", - EnvVar: SWARM_ENV_ENS_API, - } - SwarmApiFlag = cli.StringFlag{ - Name: "bzzapi", - Usage: "Specifies the Swarm HTTP endpoint to connect to", - Value: "http://127.0.0.1:8500", - } - SwarmRecursiveFlag = cli.BoolFlag{ - Name: "recursive", - Usage: "Upload directories recursively", - } - SwarmWantManifestFlag = cli.BoolTFlag{ - Name: "manifest", - Usage: "Automatic manifest upload (default true)", - } - SwarmUploadDefaultPath = cli.StringFlag{ - Name: "defaultpath", - Usage: "path to file served for empty url path (none)", - } - SwarmAccessGrantKeyFlag = cli.StringFlag{ - Name: "grant-key", - Usage: "grants a given public key access to an ACT", - } - SwarmAccessGrantKeysFlag = cli.StringFlag{ - Name: "grant-keys", - Usage: "grants a given list of public keys in the following file (separated by line breaks) access to an ACT", - } - SwarmUpFromStdinFlag = cli.BoolFlag{ - Name: "stdin", - Usage: "reads data to be uploaded from stdin", - } - SwarmUploadMimeType = cli.StringFlag{ - Name: "mime", - Usage: "Manually specify MIME type", - } - SwarmEncryptedFlag = cli.BoolFlag{ - Name: "encrypt", - Usage: "use encrypted upload", - } - SwarmAccessPasswordFlag = cli.StringFlag{ - Name: "password", - Usage: "Password", - EnvVar: SWARM_ACCESS_PASSWORD, - } - SwarmDryRunFlag = cli.BoolFlag{ - Name: "dry-run", - Usage: "dry-run", - } - CorsStringFlag = cli.StringFlag{ - Name: "corsdomain", - Usage: "Domain on which to send Access-Control-Allow-Origin header (multiple domains can be supplied separated by a ',')", - EnvVar: SWARM_ENV_CORS, - } - SwarmStorePath = cli.StringFlag{ - Name: "store.path", - Usage: "Path to leveldb chunk DB (default <$GETH_ENV_DIR>/swarm/bzz-<$BZZ_KEY>/chunks)", - EnvVar: SWARM_ENV_STORE_PATH, - } - SwarmStoreCapacity = cli.Uint64Flag{ - Name: "store.size", - Usage: "Number of chunks (5M is roughly 20-25GB) (default 5000000)", - EnvVar: SWARM_ENV_STORE_CAPACITY, - } - SwarmStoreCacheCapacity = cli.UintFlag{ - Name: "store.cache.size", - Usage: "Number of recent chunks cached in memory (default 5000)", - EnvVar: SWARM_ENV_STORE_CACHE_CAPACITY, - } - SwarmCompressedFlag = cli.BoolFlag{ - Name: "compressed", - Usage: "Prints encryption keys in compressed form", - } - SwarmBootnodeModeFlag = cli.BoolFlag{ - Name: "bootnode-mode", - Usage: "Run Swarm in Bootnode mode", - } - SwarmFeedNameFlag = cli.StringFlag{ - Name: "name", - Usage: "User-defined name for the new feed, limited to 32 characters. If combined with topic, it will refer to a subtopic with this name", - } - SwarmFeedTopicFlag = cli.StringFlag{ - Name: "topic", - Usage: "User-defined topic this feed is tracking, hex encoded. Limited to 64 hexadecimal characters", - } - SwarmFeedManifestFlag = cli.StringFlag{ - Name: "manifest", - Usage: "Refers to the feed through a manifest", - } - SwarmFeedUserFlag = cli.StringFlag{ - Name: "user", - Usage: "Indicates the user who updates the feed", - } - SwarmGlobalStoreAPIFlag = cli.StringFlag{ - Name: "globalstore-api", - Usage: "URL of the Global Store API provider (only for testing)", - EnvVar: SWARM_GLOBALSTORE_API, - } -) diff --git a/cmd/swarm/fs.go b/cmd/swarm/fs.go deleted file mode 100644 index edeeddff84e1..000000000000 --- a/cmd/swarm/fs.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "context" - "fmt" - "path/filepath" - "strings" - "time" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/fuse" - "gopkg.in/urfave/cli.v1" -) - -var fsCommand = cli.Command{ - Name: "fs", - CustomHelpTemplate: helpTemplate, - Usage: "perform FUSE operations", - ArgsUsage: "fs COMMAND", - Description: "Performs FUSE operations by mounting/unmounting/listing mount points. This assumes you already have a Swarm node running locally. For all operation you must reference the correct path to bzzd.ipc in order to communicate with the node", - Subcommands: []cli.Command{ - { - Action: mount, - CustomHelpTemplate: helpTemplate, - Name: "mount", - Usage: "mount a swarm hash to a mount point", - ArgsUsage: "swarm fs mount ", - Description: "Mounts a Swarm manifest hash to a given mount point. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", - }, - { - Action: unmount, - CustomHelpTemplate: helpTemplate, - Name: "unmount", - Usage: "unmount a swarmfs mount", - ArgsUsage: "swarm fs unmount ", - Description: "Unmounts a swarmfs mount residing at . This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", - }, - { - Action: listMounts, - CustomHelpTemplate: helpTemplate, - Name: "list", - Usage: "list swarmfs mounts", - ArgsUsage: "swarm fs list", - Description: "Lists all mounted swarmfs volumes. This assumes you already have a Swarm node running locally. You must reference the correct path to your bzzd.ipc file", - }, - }, -} - -func mount(cliContext *cli.Context) { - args := cliContext.Args() - if len(args) < 2 { - utils.Fatalf("Usage: swarm fs mount ") - } - - client, err := dialRPC(cliContext) - if err != nil { - utils.Fatalf("had an error dailing to RPC endpoint: %v", err) - } - defer client.Close() - - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - mf := &fuse.MountInfo{} - mountPoint, err := filepath.Abs(filepath.Clean(args[1])) - if err != nil { - utils.Fatalf("error expanding path for mount point: %v", err) - } - err = client.CallContext(ctx, mf, "swarmfs_mount", args[0], mountPoint) - if err != nil { - utils.Fatalf("had an error calling the RPC endpoint while mounting: %v", err) - } -} - -func unmount(cliContext *cli.Context) { - args := cliContext.Args() - - if len(args) < 1 { - utils.Fatalf("Usage: swarm fs unmount ") - } - client, err := dialRPC(cliContext) - if err != nil { - utils.Fatalf("had an error dailing to RPC endpoint: %v", err) - } - defer client.Close() - - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - mf := fuse.MountInfo{} - err = client.CallContext(ctx, &mf, "swarmfs_unmount", args[0]) - if err != nil { - utils.Fatalf("encountered an error calling the RPC endpoint while unmounting: %v", err) - } - fmt.Printf("%s\n", mf.LatestManifest) //print the latest manifest hash for user reference -} - -func listMounts(cliContext *cli.Context) { - client, err := dialRPC(cliContext) - if err != nil { - utils.Fatalf("had an error dailing to RPC endpoint: %v", err) - } - defer client.Close() - - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - mf := []fuse.MountInfo{} - err = client.CallContext(ctx, &mf, "swarmfs_listmounts") - if err != nil { - utils.Fatalf("encountered an error calling the RPC endpoint while listing mounts: %v", err) - } - if len(mf) == 0 { - fmt.Print("Could not found any swarmfs mounts. Please make sure you've specified the correct RPC endpoint\n") - } else { - fmt.Printf("Found %d swarmfs mount(s):\n", len(mf)) - for i, mountInfo := range mf { - fmt.Printf("%d:\n", i) - fmt.Printf("\tMount point: %s\n", mountInfo.MountPoint) - fmt.Printf("\tLatest Manifest: %s\n", mountInfo.LatestManifest) - fmt.Printf("\tStart Manifest: %s\n", mountInfo.StartManifest) - } - } -} - -func dialRPC(ctx *cli.Context) (*rpc.Client, error) { - endpoint := getIPCEndpoint(ctx) - log.Info("IPC endpoint", "path", endpoint) - return rpc.Dial(endpoint) -} - -func getIPCEndpoint(ctx *cli.Context) string { - cfg := defaultNodeConfig - utils.SetNodeConfig(ctx, &cfg) - - endpoint := cfg.IPCEndpoint() - - if strings.HasPrefix(endpoint, "rpc:") || strings.HasPrefix(endpoint, "ipc:") { - // Backwards compatibility with geth < 1.5 which required - // these prefixes. - endpoint = endpoint[4:] - } - return endpoint -} diff --git a/cmd/swarm/fs_test.go b/cmd/swarm/fs_test.go deleted file mode 100644 index 5f58d6c0d8e9..000000000000 --- a/cmd/swarm/fs_test.go +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// +build linux freebsd - -package main - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/log" -) - -type testFile struct { - filePath string - content string -} - -// TestCLISwarmFsDefaultIPCPath tests if the most basic fs command, i.e., list -// can find and correctly connect to a running Swarm node on the default -// IPCPath. -func TestCLISwarmFsDefaultIPCPath(t *testing.T) { - cluster := newTestCluster(t, 1) - defer cluster.Shutdown() - - handlingNode := cluster.Nodes[0] - list := runSwarm(t, []string{ - "--datadir", handlingNode.Dir, - "fs", - "list", - }...) - - list.WaitExit() - if list.Err != nil { - t.Fatal(list.Err) - } -} - -// TestCLISwarmFs is a high-level test of swarmfs -// -// This test fails on travis for macOS as this executable exits with code 1 -// and without any log messages in the log: -// /Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse. -// This is the reason for this file not being built on darwin architecture. -func TestCLISwarmFs(t *testing.T) { - cluster := newTestCluster(t, 3) - defer cluster.Shutdown() - - // create a tmp dir - mountPoint, err := ioutil.TempDir("", "swarm-test") - log.Debug("swarmfs cli test", "1st mount", mountPoint) - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(mountPoint) - - handlingNode := cluster.Nodes[0] - mhash := doUploadEmptyDir(t, handlingNode) - log.Debug("swarmfs cli test: mounting first run", "ipc path", filepath.Join(handlingNode.Dir, handlingNode.IpcPath)) - - mount := runSwarm(t, []string{ - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), filepath.Join(handlingNode.Dir, handlingNode.IpcPath), - "fs", - "mount", - mhash, - mountPoint, - }...) - mount.ExpectExit() - - filesToAssert := []*testFile{} - - dirPath, err := createDirInDir(mountPoint, "testSubDir") - if err != nil { - t.Fatal(err) - } - dirPath2, err := createDirInDir(dirPath, "AnotherTestSubDir") - if err != nil { - t.Fatal(err) - } - - dummyContent := "somerandomtestcontentthatshouldbeasserted" - dirs := []string{ - mountPoint, - dirPath, - dirPath2, - } - files := []string{"f1.tmp", "f2.tmp"} - for _, d := range dirs { - for _, entry := range files { - tFile, err := createTestFileInPath(d, entry, dummyContent) - if err != nil { - t.Fatal(err) - } - filesToAssert = append(filesToAssert, tFile) - } - } - if len(filesToAssert) != len(dirs)*len(files) { - t.Fatalf("should have %d files to assert now, got %d", len(dirs)*len(files), len(filesToAssert)) - } - hashRegexp := `[a-f\d]{64}` - log.Debug("swarmfs cli test: unmounting first run...", "ipc path", filepath.Join(handlingNode.Dir, handlingNode.IpcPath)) - - unmount := runSwarm(t, []string{ - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), filepath.Join(handlingNode.Dir, handlingNode.IpcPath), - "fs", - "unmount", - mountPoint, - }...) - _, matches := unmount.ExpectRegexp(hashRegexp) - unmount.ExpectExit() - - hash := matches[0] - if hash == mhash { - t.Fatal("this should not be equal") - } - log.Debug("swarmfs cli test: asserting no files in mount point") - - //check that there's nothing in the mount folder - filesInDir, err := ioutil.ReadDir(mountPoint) - if err != nil { - t.Fatalf("had an error reading the directory: %v", err) - } - - if len(filesInDir) != 0 { - t.Fatal("there shouldn't be anything here") - } - - secondMountPoint, err := ioutil.TempDir("", "swarm-test") - log.Debug("swarmfs cli test", "2nd mount point at", secondMountPoint) - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(secondMountPoint) - - log.Debug("swarmfs cli test: remounting at second mount point", "ipc path", filepath.Join(handlingNode.Dir, handlingNode.IpcPath)) - - //remount, check files - newMount := runSwarm(t, []string{ - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), filepath.Join(handlingNode.Dir, handlingNode.IpcPath), - "fs", - "mount", - hash, // the latest hash - secondMountPoint, - }...) - - newMount.ExpectExit() - time.Sleep(1 * time.Second) - - filesInDir, err = ioutil.ReadDir(secondMountPoint) - if err != nil { - t.Fatal(err) - } - - if len(filesInDir) == 0 { - t.Fatal("there should be something here") - } - - log.Debug("swarmfs cli test: traversing file tree to see it matches previous mount") - - for _, file := range filesToAssert { - file.filePath = strings.Replace(file.filePath, mountPoint, secondMountPoint, -1) - fileBytes, err := ioutil.ReadFile(file.filePath) - - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(fileBytes, bytes.NewBufferString(file.content).Bytes()) { - t.Fatal("this should be equal") - } - } - - log.Debug("swarmfs cli test: unmounting second run", "ipc path", filepath.Join(handlingNode.Dir, handlingNode.IpcPath)) - - unmountSec := runSwarm(t, []string{ - fmt.Sprintf("--%s", utils.IPCPathFlag.Name), filepath.Join(handlingNode.Dir, handlingNode.IpcPath), - "fs", - "unmount", - secondMountPoint, - }...) - - _, matches = unmountSec.ExpectRegexp(hashRegexp) - unmountSec.ExpectExit() - - if matches[0] != hash { - t.Fatal("these should be equal - no changes made") - } -} - -func doUploadEmptyDir(t *testing.T, node *testNode) string { - // create a tmp dir - tmpDir, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmpDir) - - hashRegexp := `[a-f\d]{64}` - - flags := []string{ - "--bzzapi", node.URL, - "--recursive", - "up", - tmpDir} - - log.Info("swarmfs cli test: uploading dir with 'swarm up'") - up := runSwarm(t, flags...) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - hash := matches[0] - log.Info("swarmfs cli test: dir uploaded", "hash", hash) - return hash -} - -func createDirInDir(createInDir string, dirToCreate string) (string, error) { - fullpath := filepath.Join(createInDir, dirToCreate) - err := os.MkdirAll(fullpath, 0777) - if err != nil { - return "", err - } - return fullpath, nil -} - -func createTestFileInPath(dir, filename, content string) (*testFile, error) { - tFile := &testFile{} - filePath := filepath.Join(dir, filename) - if file, err := os.Create(filePath); err == nil { - tFile.content = content - tFile.filePath = filePath - - _, err = io.WriteString(file, content) - if err != nil { - return nil, err - } - file.Close() - } - - return tFile, nil -} diff --git a/cmd/swarm/hash.go b/cmd/swarm/hash.go deleted file mode 100644 index 471feb53d6e5..000000000000 --- a/cmd/swarm/hash.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// Command bzzhash computes a swarm tree hash. -package main - -import ( - "context" - "fmt" - "os" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/swarm/storage" - "gopkg.in/urfave/cli.v1" -) - -var hashCommand = cli.Command{ - Action: hash, - CustomHelpTemplate: helpTemplate, - Name: "hash", - Usage: "print the swarm hash of a file or directory", - ArgsUsage: "", - Description: "Prints the swarm hash of file or directory", -} - -func hash(ctx *cli.Context) { - args := ctx.Args() - if len(args) < 1 { - utils.Fatalf("Usage: swarm hash ") - } - f, err := os.Open(args[0]) - if err != nil { - utils.Fatalf("Error opening file " + args[1]) - } - defer f.Close() - - stat, _ := f.Stat() - fileStore := storage.NewFileStore(&storage.FakeChunkStore{}, storage.NewFileStoreParams()) - addr, _, err := fileStore.Store(context.TODO(), f, stat.Size(), false) - if err != nil { - utils.Fatalf("%v\n", err) - } else { - fmt.Printf("%v\n", addr) - } -} diff --git a/cmd/swarm/list.go b/cmd/swarm/list.go deleted file mode 100644 index 5d35154a57b9..000000000000 --- a/cmd/swarm/list.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "fmt" - "os" - "strings" - "text/tabwriter" - - "github.com/ethereum/go-ethereum/cmd/utils" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - "gopkg.in/urfave/cli.v1" -) - -var listCommand = cli.Command{ - Action: list, - CustomHelpTemplate: helpTemplate, - Name: "ls", - Usage: "list files and directories contained in a manifest", - ArgsUsage: " []", - Description: "Lists files and directories contained in a manifest", -} - -func list(ctx *cli.Context) { - args := ctx.Args() - - if len(args) < 1 { - utils.Fatalf("Please supply a manifest reference as the first argument") - } else if len(args) > 2 { - utils.Fatalf("Too many arguments - usage 'swarm ls manifest [prefix]'") - } - manifest := args[0] - - var prefix string - if len(args) == 2 { - prefix = args[1] - } - - bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client := swarm.NewClient(bzzapi) - list, err := client.List(manifest, prefix, "") - if err != nil { - utils.Fatalf("Failed to generate file and directory list: %s", err) - } - - w := tabwriter.NewWriter(os.Stdout, 1, 2, 2, ' ', 0) - defer w.Flush() - fmt.Fprintln(w, "HASH\tCONTENT TYPE\tPATH") - for _, prefix := range list.CommonPrefixes { - fmt.Fprintf(w, "%s\t%s\t%s\n", "", "DIR", prefix) - } - for _, entry := range list.Entries { - fmt.Fprintf(w, "%s\t%s\t%s\n", entry.Hash, entry.ContentType, entry.Path) - } -} diff --git a/cmd/swarm/main.go b/cmd/swarm/main.go deleted file mode 100644 index 3053ea1b3b1d..000000000000 --- a/cmd/swarm/main.go +++ /dev/null @@ -1,469 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "crypto/ecdsa" - "encoding/hex" - "fmt" - "io/ioutil" - "os" - "os/signal" - "runtime" - "sort" - "strconv" - "strings" - "syscall" - - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/console" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/internal/debug" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm" - bzzapi "github.com/ethereum/go-ethereum/swarm/api" - swarmmetrics "github.com/ethereum/go-ethereum/swarm/metrics" - "github.com/ethereum/go-ethereum/swarm/storage/mock" - mockrpc "github.com/ethereum/go-ethereum/swarm/storage/mock/rpc" - "github.com/ethereum/go-ethereum/swarm/tracing" - sv "github.com/ethereum/go-ethereum/swarm/version" - - cli "gopkg.in/urfave/cli.v1" -) - -const clientIdentifier = "swarm" -const helpTemplate = `NAME: -{{.HelpName}} - {{.Usage}} - -USAGE: -{{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}}{{if .VisibleFlags}} [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Category}} - -CATEGORY: -{{.Category}}{{end}}{{if .Description}} - -DESCRIPTION: -{{.Description}}{{end}}{{if .VisibleFlags}} - -OPTIONS: -{{range .VisibleFlags}}{{.}} -{{end}}{{end}} -` - -// Git SHA1 commit hash of the release (set via linker flags) -// this variable will be assigned if corresponding parameter is passed with install, but not with test -// e.g.: go install -ldflags "-X main.gitCommit=ed1312d01b19e04ef578946226e5d8069d5dfd5a" ./cmd/swarm -var gitCommit string - -//declare a few constant error messages, useful for later error check comparisons in test -var ( - SWARM_ERR_NO_BZZACCOUNT = "bzzaccount option is required but not set; check your config file, command line or environment variables" - SWARM_ERR_SWAP_SET_NO_API = "SWAP is enabled but --swap-api is not set" -) - -// this help command gets added to any subcommand that does not define it explicitly -var defaultSubcommandHelp = cli.Command{ - Action: func(ctx *cli.Context) { cli.ShowCommandHelpAndExit(ctx, "", 1) }, - CustomHelpTemplate: helpTemplate, - Name: "help", - Usage: "shows this help", - Hidden: true, -} - -var defaultNodeConfig = node.DefaultConfig - -// This init function sets defaults so cmd/swarm can run alongside geth. -func init() { - sv.GitCommit = gitCommit - defaultNodeConfig.Name = clientIdentifier - defaultNodeConfig.Version = sv.VersionWithCommit(gitCommit) - defaultNodeConfig.P2P.ListenAddr = ":30399" - defaultNodeConfig.IPCPath = "bzzd.ipc" - // Set flag defaults for --help display. - utils.ListenPortFlag.Value = 30399 -} - -var app = utils.NewApp("", "Ethereum Swarm") - -// This init function creates the cli.App. -func init() { - app.Action = bzzd - app.Version = sv.ArchiveVersion(gitCommit) - app.Copyright = "Copyright 2013-2016 The go-ethereum Authors" - app.Commands = []cli.Command{ - { - Action: version, - CustomHelpTemplate: helpTemplate, - Name: "version", - Usage: "Print version numbers", - Description: "The output of this command is supposed to be machine-readable", - }, - { - Action: keys, - CustomHelpTemplate: helpTemplate, - Name: "print-keys", - Flags: []cli.Flag{SwarmCompressedFlag}, - Usage: "Print public key information", - Description: "The output of this command is supposed to be machine-readable", - }, - // See upload.go - upCommand, - // See access.go - accessCommand, - // See feeds.go - feedCommand, - // See list.go - listCommand, - // See hash.go - hashCommand, - // See download.go - downloadCommand, - // See manifest.go - manifestCommand, - // See fs.go - fsCommand, - // See db.go - dbCommand, - // See config.go - DumpConfigCommand, - // hashesCommand - hashesCommand, - } - - // append a hidden help subcommand to all commands that have subcommands - // if a help command was already defined above, that one will take precedence. - addDefaultHelpSubcommands(app.Commands) - - sort.Sort(cli.CommandsByName(app.Commands)) - - app.Flags = []cli.Flag{ - utils.IdentityFlag, - utils.DataDirFlag, - utils.BootnodesFlag, - utils.KeyStoreDirFlag, - utils.ListenPortFlag, - utils.DiscoveryV5Flag, - utils.NetrestrictFlag, - utils.NodeKeyFileFlag, - utils.NodeKeyHexFlag, - utils.MaxPeersFlag, - utils.NATFlag, - utils.IPCDisabledFlag, - utils.IPCPathFlag, - utils.PasswordFileFlag, - // bzzd-specific flags - CorsStringFlag, - EnsAPIFlag, - SwarmTomlConfigPathFlag, - SwarmSwapEnabledFlag, - SwarmSwapAPIFlag, - SwarmSyncDisabledFlag, - SwarmSyncUpdateDelay, - SwarmMaxStreamPeerServersFlag, - SwarmLightNodeEnabled, - SwarmDeliverySkipCheckFlag, - SwarmListenAddrFlag, - SwarmPortFlag, - SwarmAccountFlag, - SwarmNetworkIdFlag, - ChequebookAddrFlag, - // upload flags - SwarmApiFlag, - SwarmRecursiveFlag, - SwarmWantManifestFlag, - SwarmUploadDefaultPath, - SwarmUpFromStdinFlag, - SwarmUploadMimeType, - // bootnode mode - SwarmBootnodeModeFlag, - // storage flags - SwarmStorePath, - SwarmStoreCapacity, - SwarmStoreCacheCapacity, - SwarmGlobalStoreAPIFlag, - } - rpcFlags := []cli.Flag{ - utils.WSEnabledFlag, - utils.WSListenAddrFlag, - utils.WSPortFlag, - utils.WSApiFlag, - utils.WSAllowedOriginsFlag, - } - app.Flags = append(app.Flags, rpcFlags...) - app.Flags = append(app.Flags, debug.Flags...) - app.Flags = append(app.Flags, swarmmetrics.Flags...) - app.Flags = append(app.Flags, tracing.Flags...) - app.Before = func(ctx *cli.Context) error { - runtime.GOMAXPROCS(runtime.NumCPU()) - if err := debug.Setup(ctx, ""); err != nil { - return err - } - swarmmetrics.Setup(ctx) - tracing.Setup(ctx) - return nil - } - app.After = func(ctx *cli.Context) error { - debug.Exit() - return nil - } -} - -func main() { - if err := app.Run(os.Args); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } -} - -func keys(ctx *cli.Context) error { - privateKey := getPrivKey(ctx) - pubkey := crypto.FromECDSAPub(&privateKey.PublicKey) - pubkeyhex := hex.EncodeToString(pubkey) - pubCompressed := hex.EncodeToString(crypto.CompressPubkey(&privateKey.PublicKey)) - bzzkey := crypto.Keccak256Hash(pubkey).Hex() - - if !ctx.Bool(SwarmCompressedFlag.Name) { - fmt.Println(fmt.Sprintf("bzzkey=%s", bzzkey[2:])) - fmt.Println(fmt.Sprintf("publicKey=%s", pubkeyhex)) - } - fmt.Println(fmt.Sprintf("publicKeyCompressed=%s", pubCompressed)) - - return nil -} - -func version(ctx *cli.Context) error { - fmt.Println(strings.Title(clientIdentifier)) - fmt.Println("Version:", sv.VersionWithMeta) - if gitCommit != "" { - fmt.Println("Git Commit:", gitCommit) - } - fmt.Println("Go Version:", runtime.Version()) - fmt.Println("OS:", runtime.GOOS) - return nil -} - -func bzzd(ctx *cli.Context) error { - //build a valid bzzapi.Config from all available sources: - //default config, file config, command line and env vars - - bzzconfig, err := buildConfig(ctx) - if err != nil { - utils.Fatalf("unable to configure swarm: %v", err) - } - - cfg := defaultNodeConfig - - //pss operates on ws - cfg.WSModules = append(cfg.WSModules, "pss") - - //geth only supports --datadir via command line - //in order to be consistent within swarm, if we pass --datadir via environment variable - //or via config file, we get the same directory for geth and swarm - if _, err := os.Stat(bzzconfig.Path); err == nil { - cfg.DataDir = bzzconfig.Path - } - - //optionally set the bootnodes before configuring the node - setSwarmBootstrapNodes(ctx, &cfg) - //setup the ethereum node - utils.SetNodeConfig(ctx, &cfg) - - //always disable discovery from p2p package - swarm discovery is done with the `hive` protocol - cfg.P2P.NoDiscovery = true - - stack, err := node.New(&cfg) - if err != nil { - utils.Fatalf("can't create node: %v", err) - } - - //a few steps need to be done after the config phase is completed, - //due to overriding behavior - initSwarmNode(bzzconfig, stack, ctx) - //register BZZ as node.Service in the ethereum node - registerBzzService(bzzconfig, stack) - //start the node - utils.StartNode(stack) - - go func() { - sigc := make(chan os.Signal, 1) - signal.Notify(sigc, syscall.SIGTERM) - defer signal.Stop(sigc) - <-sigc - log.Info("Got sigterm, shutting swarm down...") - stack.Stop() - }() - - // add swarm bootnodes, because swarm doesn't use p2p package's discovery discv5 - go func() { - s := stack.Server() - - for _, n := range cfg.P2P.BootstrapNodes { - s.AddPeer(n) - } - }() - - stack.Wait() - return nil -} - -func registerBzzService(bzzconfig *bzzapi.Config, stack *node.Node) { - //define the swarm service boot function - boot := func(_ *node.ServiceContext) (node.Service, error) { - var nodeStore *mock.NodeStore - if bzzconfig.GlobalStoreAPI != "" { - // connect to global store - client, err := rpc.Dial(bzzconfig.GlobalStoreAPI) - if err != nil { - return nil, fmt.Errorf("global store: %v", err) - } - globalStore := mockrpc.NewGlobalStore(client) - // create a node store for this swarm key on global store - nodeStore = globalStore.NewNodeStore(common.HexToAddress(bzzconfig.BzzKey)) - } - return swarm.NewSwarm(bzzconfig, nodeStore) - } - //register within the ethereum node - if err := stack.Register(boot); err != nil { - utils.Fatalf("Failed to register the Swarm service: %v", err) - } -} - -func getAccount(bzzaccount string, ctx *cli.Context, stack *node.Node) *ecdsa.PrivateKey { - //an account is mandatory - if bzzaccount == "" { - utils.Fatalf(SWARM_ERR_NO_BZZACCOUNT) - } - // Try to load the arg as a hex key file. - if key, err := crypto.LoadECDSA(bzzaccount); err == nil { - log.Info("Swarm account key loaded", "address", crypto.PubkeyToAddress(key.PublicKey)) - return key - } - // Otherwise try getting it from the keystore. - am := stack.AccountManager() - ks := am.Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) - - return decryptStoreAccount(ks, bzzaccount, utils.MakePasswordList(ctx)) -} - -// getPrivKey returns the private key of the specified bzzaccount -// Used only by client commands, such as `feed` -func getPrivKey(ctx *cli.Context) *ecdsa.PrivateKey { - // booting up the swarm node just as we do in bzzd action - bzzconfig, err := buildConfig(ctx) - if err != nil { - utils.Fatalf("unable to configure swarm: %v", err) - } - cfg := defaultNodeConfig - if _, err := os.Stat(bzzconfig.Path); err == nil { - cfg.DataDir = bzzconfig.Path - } - utils.SetNodeConfig(ctx, &cfg) - stack, err := node.New(&cfg) - if err != nil { - utils.Fatalf("can't create node: %v", err) - } - return getAccount(bzzconfig.BzzAccount, ctx, stack) -} - -func decryptStoreAccount(ks *keystore.KeyStore, account string, passwords []string) *ecdsa.PrivateKey { - var a accounts.Account - var err error - if common.IsHexAddress(account) { - a, err = ks.Find(accounts.Account{Address: common.HexToAddress(account)}) - } else if ix, ixerr := strconv.Atoi(account); ixerr == nil && ix > 0 { - if accounts := ks.Accounts(); len(accounts) > ix { - a = accounts[ix] - } else { - err = fmt.Errorf("index %d higher than number of accounts %d", ix, len(accounts)) - } - } else { - utils.Fatalf("Can't find swarm account key %s", account) - } - if err != nil { - utils.Fatalf("Can't find swarm account key: %v - Is the provided bzzaccount(%s) from the right datadir/Path?", err, account) - } - keyjson, err := ioutil.ReadFile(a.URL.Path) - if err != nil { - utils.Fatalf("Can't load swarm account key: %v", err) - } - for i := 0; i < 3; i++ { - password := getPassPhrase(fmt.Sprintf("Unlocking swarm account %s [%d/3]", a.Address.Hex(), i+1), i, passwords) - key, err := keystore.DecryptKey(keyjson, password) - if err == nil { - return key.PrivateKey - } - } - utils.Fatalf("Can't decrypt swarm account key") - return nil -} - -// getPassPhrase retrieves the password associated with bzz account, either by fetching -// from a list of pre-loaded passwords, or by requesting it interactively from user. -func getPassPhrase(prompt string, i int, passwords []string) string { - // non-interactive - if len(passwords) > 0 { - if i < len(passwords) { - return passwords[i] - } - return passwords[len(passwords)-1] - } - - // fallback to interactive mode - if prompt != "" { - fmt.Println(prompt) - } - password, err := console.Stdin.PromptPassword("Passphrase: ") - if err != nil { - utils.Fatalf("Failed to read passphrase: %v", err) - } - return password -} - -// addDefaultHelpSubcommand scans through defined CLI commands and adds -// a basic help subcommand to each -// if a help command is already defined, it will take precedence over the default. -func addDefaultHelpSubcommands(commands []cli.Command) { - for i := range commands { - cmd := &commands[i] - if cmd.Subcommands != nil { - cmd.Subcommands = append(cmd.Subcommands, defaultSubcommandHelp) - addDefaultHelpSubcommands(cmd.Subcommands) - } - } -} - -func setSwarmBootstrapNodes(ctx *cli.Context, cfg *node.Config) { - if ctx.GlobalIsSet(utils.BootnodesFlag.Name) || ctx.GlobalIsSet(utils.BootnodesV4Flag.Name) { - return - } - - cfg.P2P.BootstrapNodes = []*enode.Node{} - - for _, url := range SwarmBootnodes { - node, err := enode.ParseV4(url) - if err != nil { - log.Error("Bootstrap URL invalid", "enode", url, "err", err) - } - cfg.P2P.BootstrapNodes = append(cfg.P2P.BootstrapNodes, node) - } - -} diff --git a/cmd/swarm/manifest.go b/cmd/swarm/manifest.go deleted file mode 100644 index 312c72fa2103..000000000000 --- a/cmd/swarm/manifest.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// Command MANIFEST update -package main - -import ( - "fmt" - "os" - "strings" - - "github.com/ethereum/go-ethereum/cmd/utils" - "github.com/ethereum/go-ethereum/swarm/api" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - "gopkg.in/urfave/cli.v1" -) - -var manifestCommand = cli.Command{ - Name: "manifest", - CustomHelpTemplate: helpTemplate, - Usage: "perform operations on swarm manifests", - ArgsUsage: "COMMAND", - Description: "Updates a MANIFEST by adding/removing/updating the hash of a path.\nCOMMAND could be: add, update, remove", - Subcommands: []cli.Command{ - { - Action: manifestAdd, - CustomHelpTemplate: helpTemplate, - Name: "add", - Usage: "add a new path to the manifest", - ArgsUsage: " ", - Description: "Adds a new path to the manifest", - }, - { - Action: manifestUpdate, - CustomHelpTemplate: helpTemplate, - Name: "update", - Usage: "update the hash for an already existing path in the manifest", - ArgsUsage: " ", - Description: "Update the hash for an already existing path in the manifest", - }, - { - Action: manifestRemove, - CustomHelpTemplate: helpTemplate, - Name: "remove", - Usage: "removes a path from the manifest", - ArgsUsage: " ", - Description: "Removes a path from the manifest", - }, - }, -} - -// manifestAdd adds a new entry to the manifest at the given path. -// New entry hash, the last argument, must be the hash of a manifest -// with only one entry, which meta-data will be added to the original manifest. -// On success, this function will print new (updated) manifest's hash. -func manifestAdd(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 3 { - utils.Fatalf("Need exactly three arguments ") - } - - var ( - mhash = args[0] - path = args[1] - hash = args[2] - ) - - bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client := swarm.NewClient(bzzapi) - - m, _, err := client.DownloadManifest(hash) - if err != nil { - utils.Fatalf("Error downloading manifest to add: %v", err) - } - l := len(m.Entries) - if l == 0 { - utils.Fatalf("No entries in manifest %s", hash) - } else if l > 1 { - utils.Fatalf("Too many entries in manifest %s", hash) - } - - newManifest := addEntryToManifest(client, mhash, path, m.Entries[0]) - fmt.Println(newManifest) -} - -// manifestUpdate replaces an existing entry of the manifest at the given path. -// New entry hash, the last argument, must be the hash of a manifest -// with only one entry, which meta-data will be added to the original manifest. -// On success, this function will print hash of the updated manifest. -func manifestUpdate(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 3 { - utils.Fatalf("Need exactly three arguments ") - } - - var ( - mhash = args[0] - path = args[1] - hash = args[2] - ) - - bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client := swarm.NewClient(bzzapi) - - m, _, err := client.DownloadManifest(hash) - if err != nil { - utils.Fatalf("Error downloading manifest to update: %v", err) - } - l := len(m.Entries) - if l == 0 { - utils.Fatalf("No entries in manifest %s", hash) - } else if l > 1 { - utils.Fatalf("Too many entries in manifest %s", hash) - } - - newManifest, _, defaultEntryUpdated := updateEntryInManifest(client, mhash, path, m.Entries[0], true) - if defaultEntryUpdated { - // Print informational message to stderr - // allowing the user to get the new manifest hash from stdout - // without the need to parse the complete output. - fmt.Fprintln(os.Stderr, "Manifest default entry is updated, too") - } - fmt.Println(newManifest) -} - -// manifestRemove removes an existing entry of the manifest at the given path. -// On success, this function will print hash of the manifest which does not -// contain the path. -func manifestRemove(ctx *cli.Context) { - args := ctx.Args() - if len(args) != 2 { - utils.Fatalf("Need exactly two arguments ") - } - - var ( - mhash = args[0] - path = args[1] - ) - - bzzapi := strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - client := swarm.NewClient(bzzapi) - - newManifest := removeEntryFromManifest(client, mhash, path) - fmt.Println(newManifest) -} - -func addEntryToManifest(client *swarm.Client, mhash, path string, entry api.ManifestEntry) string { - var longestPathEntry = api.ManifestEntry{} - - mroot, isEncrypted, err := client.DownloadManifest(mhash) - if err != nil { - utils.Fatalf("Manifest download failed: %v", err) - } - - // See if we path is in this Manifest or do we have to dig deeper - for _, e := range mroot.Entries { - if path == e.Path { - utils.Fatalf("Path %s already present, not adding anything", path) - } else { - if e.ContentType == api.ManifestType { - prfxlen := strings.HasPrefix(path, e.Path) - if prfxlen && len(path) > len(longestPathEntry.Path) { - longestPathEntry = e - } - } - } - } - - if longestPathEntry.Path != "" { - // Load the child Manifest add the entry there - newPath := path[len(longestPathEntry.Path):] - newHash := addEntryToManifest(client, longestPathEntry.Hash, newPath, entry) - - // Replace the hash for parent Manifests - newMRoot := &api.Manifest{} - for _, e := range mroot.Entries { - if longestPathEntry.Path == e.Path { - e.Hash = newHash - } - newMRoot.Entries = append(newMRoot.Entries, e) - } - mroot = newMRoot - } else { - // Add the entry in the leaf Manifest - entry.Path = path - mroot.Entries = append(mroot.Entries, entry) - } - - newManifestHash, err := client.UploadManifest(mroot, isEncrypted) - if err != nil { - utils.Fatalf("Manifest upload failed: %v", err) - } - return newManifestHash -} - -// updateEntryInManifest updates an existing entry o path with a new one in the manifest with provided mhash -// finding the path recursively through all nested manifests. Argument isRoot is used for default -// entry update detection. If the updated entry has the same hash as the default entry, then the -// default entry in root manifest will be updated too. -// Returned values are the new manifest hash, hash of the entry that was replaced by the new entry and -// a a bool that is true if default entry is updated. -func updateEntryInManifest(client *swarm.Client, mhash, path string, entry api.ManifestEntry, isRoot bool) (newManifestHash, oldHash string, defaultEntryUpdated bool) { - var ( - newEntry = api.ManifestEntry{} - longestPathEntry = api.ManifestEntry{} - ) - - mroot, isEncrypted, err := client.DownloadManifest(mhash) - if err != nil { - utils.Fatalf("Manifest download failed: %v", err) - } - - // See if we path is in this Manifest or do we have to dig deeper - for _, e := range mroot.Entries { - if path == e.Path { - newEntry = e - // keep the reference of the hash of the entry that should be replaced - // for default entry detection - oldHash = e.Hash - } else { - if e.ContentType == api.ManifestType { - prfxlen := strings.HasPrefix(path, e.Path) - if prfxlen && len(path) > len(longestPathEntry.Path) { - longestPathEntry = e - } - } - } - } - - if longestPathEntry.Path == "" && newEntry.Path == "" { - utils.Fatalf("Path %s not present in the Manifest, not setting anything", path) - } - - if longestPathEntry.Path != "" { - // Load the child Manifest add the entry there - newPath := path[len(longestPathEntry.Path):] - var newHash string - newHash, oldHash, _ = updateEntryInManifest(client, longestPathEntry.Hash, newPath, entry, false) - - // Replace the hash for parent Manifests - newMRoot := &api.Manifest{} - for _, e := range mroot.Entries { - if longestPathEntry.Path == e.Path { - e.Hash = newHash - } - newMRoot.Entries = append(newMRoot.Entries, e) - - } - mroot = newMRoot - } - - // update the manifest if the new entry is found and - // check if default entry should be updated - if newEntry.Path != "" || isRoot { - // Replace the hash for leaf Manifest - newMRoot := &api.Manifest{} - for _, e := range mroot.Entries { - if newEntry.Path == e.Path { - entry.Path = e.Path - newMRoot.Entries = append(newMRoot.Entries, entry) - } else if isRoot && e.Path == "" && e.Hash == oldHash { - entry.Path = e.Path - newMRoot.Entries = append(newMRoot.Entries, entry) - defaultEntryUpdated = true - } else { - newMRoot.Entries = append(newMRoot.Entries, e) - } - } - mroot = newMRoot - } - - newManifestHash, err = client.UploadManifest(mroot, isEncrypted) - if err != nil { - utils.Fatalf("Manifest upload failed: %v", err) - } - return newManifestHash, oldHash, defaultEntryUpdated -} - -func removeEntryFromManifest(client *swarm.Client, mhash, path string) string { - var ( - entryToRemove = api.ManifestEntry{} - longestPathEntry = api.ManifestEntry{} - ) - - mroot, isEncrypted, err := client.DownloadManifest(mhash) - if err != nil { - utils.Fatalf("Manifest download failed: %v", err) - } - - // See if we path is in this Manifest or do we have to dig deeper - for _, entry := range mroot.Entries { - if path == entry.Path { - entryToRemove = entry - } else { - if entry.ContentType == api.ManifestType { - prfxlen := strings.HasPrefix(path, entry.Path) - if prfxlen && len(path) > len(longestPathEntry.Path) { - longestPathEntry = entry - } - } - } - } - - if longestPathEntry.Path == "" && entryToRemove.Path == "" { - utils.Fatalf("Path %s not present in the Manifest, not removing anything", path) - } - - if longestPathEntry.Path != "" { - // Load the child Manifest remove the entry there - newPath := path[len(longestPathEntry.Path):] - newHash := removeEntryFromManifest(client, longestPathEntry.Hash, newPath) - - // Replace the hash for parent Manifests - newMRoot := &api.Manifest{} - for _, entry := range mroot.Entries { - if longestPathEntry.Path == entry.Path { - entry.Hash = newHash - } - newMRoot.Entries = append(newMRoot.Entries, entry) - } - mroot = newMRoot - } - - if entryToRemove.Path != "" { - // remove the entry in this Manifest - newMRoot := &api.Manifest{} - for _, entry := range mroot.Entries { - if entryToRemove.Path != entry.Path { - newMRoot.Entries = append(newMRoot.Entries, entry) - } - } - mroot = newMRoot - } - - newManifestHash, err := client.UploadManifest(mroot, isEncrypted) - if err != nil { - utils.Fatalf("Manifest upload failed: %v", err) - } - return newManifestHash -} diff --git a/cmd/swarm/manifest_test.go b/cmd/swarm/manifest_test.go deleted file mode 100644 index 01d982aa7a3e..000000000000 --- a/cmd/swarm/manifest_test.go +++ /dev/null @@ -1,597 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "io/ioutil" - "os" - "path/filepath" - "runtime" - "testing" - - "github.com/ethereum/go-ethereum/swarm/api" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http" -) - -// TestManifestChange tests manifest add, update and remove -// cli commands without encryption. -func TestManifestChange(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - testManifestChange(t, false) -} - -// TestManifestChange tests manifest add, update and remove -// cli commands with encryption enabled. -func TestManifestChangeEncrypted(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - testManifestChange(t, true) -} - -// testManifestChange performs cli commands: -// - manifest add -// - manifest update -// - manifest remove -// on a manifest, testing the functionality of this -// comands on paths that are in root manifest or a nested one. -// Argument encrypt controls whether to use encryption or not. -func testManifestChange(t *testing.T, encrypt bool) { - t.Parallel() - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - tmp, err := ioutil.TempDir("", "swarm-manifest-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmp) - - origDir := filepath.Join(tmp, "orig") - if err := os.Mkdir(origDir, 0777); err != nil { - t.Fatal(err) - } - - indexDataFilename := filepath.Join(origDir, "index.html") - err = ioutil.WriteFile(indexDataFilename, []byte("

Test

"), 0666) - if err != nil { - t.Fatal(err) - } - // Files paths robots.txt and robots.html share the same prefix "robots." - // which will result a manifest with a nested manifest under path "robots.". - // This will allow testing manifest changes on both root and nested manifest. - err = ioutil.WriteFile(filepath.Join(origDir, "robots.txt"), []byte("Disallow: /"), 0666) - if err != nil { - t.Fatal(err) - } - err = ioutil.WriteFile(filepath.Join(origDir, "robots.html"), []byte("No Robots Allowed"), 0666) - if err != nil { - t.Fatal(err) - } - err = ioutil.WriteFile(filepath.Join(origDir, "mutants.txt"), []byte("Frank\nMarcus"), 0666) - if err != nil { - t.Fatal(err) - } - - args := []string{ - "--bzzapi", - srv.URL, - "--recursive", - "--defaultpath", - indexDataFilename, - "up", - origDir, - } - if encrypt { - args = append(args, "--encrypt") - } - - origManifestHash := runSwarmExpectHash(t, args...) - - checkHashLength(t, origManifestHash, encrypt) - - client := swarm.NewClient(srv.URL) - - // upload a new file and use its manifest to add it the original manifest. - t.Run("add", func(t *testing.T) { - humansData := []byte("Ann\nBob") - humansDataFilename := filepath.Join(tmp, "humans.txt") - err = ioutil.WriteFile(humansDataFilename, humansData, 0666) - if err != nil { - t.Fatal(err) - } - - humansManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "up", - humansDataFilename, - ) - - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "add", - origManifestHash, - "humans.txt", - humansManifestHash, - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - for _, e := range newManifest.Entries { - if e.Path == "humans.txt" { - found = true - if e.Size != int64(len(humansData)) { - t.Errorf("expected humans.txt size %v, got %v", len(humansData), e.Size) - } - if e.ModTime.IsZero() { - t.Errorf("got zero mod time for humans.txt") - } - ct := "text/plain; charset=utf-8" - if e.ContentType != ct { - t.Errorf("expected content type %q, got %q", ct, e.ContentType) - } - break - } - } - if !found { - t.Fatal("no humans.txt in new manifest") - } - - checkFile(t, client, newManifestHash, "humans.txt", humansData) - }) - - // upload a new file and use its manifest to add it the original manifest, - // but ensure that the file will be in the nested manifest of the original one. - t.Run("add nested", func(t *testing.T) { - robotsData := []byte(`{"disallow": "/"}`) - robotsDataFilename := filepath.Join(tmp, "robots.json") - err = ioutil.WriteFile(robotsDataFilename, robotsData, 0666) - if err != nil { - t.Fatal(err) - } - - robotsManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "up", - robotsDataFilename, - ) - - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "add", - origManifestHash, - "robots.json", - robotsManifestHash, - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - loop: - for _, e := range newManifest.Entries { - if e.Path == "robots." { - nestedManifest := downloadManifest(t, client, e.Hash, encrypt) - for _, e := range nestedManifest.Entries { - if e.Path == "json" { - found = true - if e.Size != int64(len(robotsData)) { - t.Errorf("expected robots.json size %v, got %v", len(robotsData), e.Size) - } - if e.ModTime.IsZero() { - t.Errorf("got zero mod time for robots.json") - } - ct := "application/json" - if e.ContentType != ct { - t.Errorf("expected content type %q, got %q", ct, e.ContentType) - } - break loop - } - } - } - } - if !found { - t.Fatal("no robots.json in new manifest") - } - - checkFile(t, client, newManifestHash, "robots.json", robotsData) - }) - - // upload a new file and use its manifest to change the file it the original manifest. - t.Run("update", func(t *testing.T) { - indexData := []byte("

Ethereum Swarm

") - indexDataFilename := filepath.Join(tmp, "index.html") - err = ioutil.WriteFile(indexDataFilename, indexData, 0666) - if err != nil { - t.Fatal(err) - } - - indexManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "up", - indexDataFilename, - ) - - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "update", - origManifestHash, - "index.html", - indexManifestHash, - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - for _, e := range newManifest.Entries { - if e.Path == "index.html" { - found = true - if e.Size != int64(len(indexData)) { - t.Errorf("expected index.html size %v, got %v", len(indexData), e.Size) - } - if e.ModTime.IsZero() { - t.Errorf("got zero mod time for index.html") - } - ct := "text/html; charset=utf-8" - if e.ContentType != ct { - t.Errorf("expected content type %q, got %q", ct, e.ContentType) - } - break - } - } - if !found { - t.Fatal("no index.html in new manifest") - } - - checkFile(t, client, newManifestHash, "index.html", indexData) - - // check default entry change - checkFile(t, client, newManifestHash, "", indexData) - }) - - // upload a new file and use its manifest to change the file it the original manifest, - // but ensure that the file is in the nested manifest of the original one. - t.Run("update nested", func(t *testing.T) { - robotsData := []byte(`Only humans allowed!!!`) - robotsDataFilename := filepath.Join(tmp, "robots.html") - err = ioutil.WriteFile(robotsDataFilename, robotsData, 0666) - if err != nil { - t.Fatal(err) - } - - humansManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "up", - robotsDataFilename, - ) - - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "update", - origManifestHash, - "robots.html", - humansManifestHash, - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - loop: - for _, e := range newManifest.Entries { - if e.Path == "robots." { - nestedManifest := downloadManifest(t, client, e.Hash, encrypt) - for _, e := range nestedManifest.Entries { - if e.Path == "html" { - found = true - if e.Size != int64(len(robotsData)) { - t.Errorf("expected robots.html size %v, got %v", len(robotsData), e.Size) - } - if e.ModTime.IsZero() { - t.Errorf("got zero mod time for robots.html") - } - ct := "text/html; charset=utf-8" - if e.ContentType != ct { - t.Errorf("expected content type %q, got %q", ct, e.ContentType) - } - break loop - } - } - } - } - if !found { - t.Fatal("no robots.html in new manifest") - } - - checkFile(t, client, newManifestHash, "robots.html", robotsData) - }) - - // remove a file from the manifest. - t.Run("remove", func(t *testing.T) { - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "remove", - origManifestHash, - "mutants.txt", - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - for _, e := range newManifest.Entries { - if e.Path == "mutants.txt" { - found = true - break - } - } - if found { - t.Fatal("mutants.txt is not removed") - } - }) - - // remove a file from the manifest, but ensure that the file is in - // the nested manifest of the original one. - t.Run("remove nested", func(t *testing.T) { - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "remove", - origManifestHash, - "robots.html", - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - loop: - for _, e := range newManifest.Entries { - if e.Path == "robots." { - nestedManifest := downloadManifest(t, client, e.Hash, encrypt) - for _, e := range nestedManifest.Entries { - if e.Path == "html" { - found = true - break loop - } - } - } - } - if found { - t.Fatal("robots.html in not removed") - } - }) -} - -// TestNestedDefaultEntryUpdate tests if the default entry is updated -// if the file in nested manifest used for it is also updated. -func TestNestedDefaultEntryUpdate(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - testNestedDefaultEntryUpdate(t, false) -} - -// TestNestedDefaultEntryUpdateEncrypted tests if the default entry -// of encrypted upload is updated if the file in nested manifest -// used for it is also updated. -func TestNestedDefaultEntryUpdateEncrypted(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - testNestedDefaultEntryUpdate(t, true) -} - -func testNestedDefaultEntryUpdate(t *testing.T, encrypt bool) { - t.Parallel() - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - tmp, err := ioutil.TempDir("", "swarm-manifest-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmp) - - origDir := filepath.Join(tmp, "orig") - if err := os.Mkdir(origDir, 0777); err != nil { - t.Fatal(err) - } - - indexData := []byte("

Test

") - indexDataFilename := filepath.Join(origDir, "index.html") - err = ioutil.WriteFile(indexDataFilename, indexData, 0666) - if err != nil { - t.Fatal(err) - } - // Add another file with common prefix as the default entry to test updates of - // default entry with nested manifests. - err = ioutil.WriteFile(filepath.Join(origDir, "index.txt"), []byte("Test"), 0666) - if err != nil { - t.Fatal(err) - } - - args := []string{ - "--bzzapi", - srv.URL, - "--recursive", - "--defaultpath", - indexDataFilename, - "up", - origDir, - } - if encrypt { - args = append(args, "--encrypt") - } - - origManifestHash := runSwarmExpectHash(t, args...) - - checkHashLength(t, origManifestHash, encrypt) - - client := swarm.NewClient(srv.URL) - - newIndexData := []byte("

Ethereum Swarm

") - newIndexDataFilename := filepath.Join(tmp, "index.html") - err = ioutil.WriteFile(newIndexDataFilename, newIndexData, 0666) - if err != nil { - t.Fatal(err) - } - - newIndexManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "up", - newIndexDataFilename, - ) - - newManifestHash := runSwarmExpectHash(t, - "--bzzapi", - srv.URL, - "manifest", - "update", - origManifestHash, - "index.html", - newIndexManifestHash, - ) - - checkHashLength(t, newManifestHash, encrypt) - - newManifest := downloadManifest(t, client, newManifestHash, encrypt) - - var found bool - for _, e := range newManifest.Entries { - if e.Path == "index." { - found = true - newManifest = downloadManifest(t, client, e.Hash, encrypt) - break - } - } - if !found { - t.Fatal("no index. path in new manifest") - } - - found = false - for _, e := range newManifest.Entries { - if e.Path == "html" { - found = true - if e.Size != int64(len(newIndexData)) { - t.Errorf("expected index.html size %v, got %v", len(newIndexData), e.Size) - } - if e.ModTime.IsZero() { - t.Errorf("got zero mod time for index.html") - } - ct := "text/html; charset=utf-8" - if e.ContentType != ct { - t.Errorf("expected content type %q, got %q", ct, e.ContentType) - } - break - } - } - if !found { - t.Fatal("no html in new manifest") - } - - checkFile(t, client, newManifestHash, "index.html", newIndexData) - - // check default entry change - checkFile(t, client, newManifestHash, "", newIndexData) -} - -func runSwarmExpectHash(t *testing.T, args ...string) (hash string) { - t.Helper() - hashRegexp := `[a-f\d]{64,128}` - up := runSwarm(t, args...) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - - if len(matches) < 1 { - t.Fatal("no matches found") - } - return matches[0] -} - -func checkHashLength(t *testing.T, hash string, encrypted bool) { - t.Helper() - l := len(hash) - if encrypted && l != 128 { - t.Errorf("expected hash length 128, got %v", l) - } - if !encrypted && l != 64 { - t.Errorf("expected hash length 64, got %v", l) - } -} - -func downloadManifest(t *testing.T, client *swarm.Client, hash string, encrypted bool) (manifest *api.Manifest) { - t.Helper() - m, isEncrypted, err := client.DownloadManifest(hash) - if err != nil { - t.Fatal(err) - } - - if encrypted != isEncrypted { - t.Error("new manifest encryption flag is not correct") - } - return m -} - -func checkFile(t *testing.T, client *swarm.Client, hash, path string, expected []byte) { - t.Helper() - f, err := client.Download(hash, path) - if err != nil { - t.Fatal(err) - } - - got, err := ioutil.ReadAll(f) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(got, expected) { - t.Errorf("expected file content %q, got %q", expected, got) - } -} diff --git a/cmd/swarm/mimegen/generator.go b/cmd/swarm/mimegen/generator.go deleted file mode 100644 index 68f9e306e5ac..000000000000 --- a/cmd/swarm/mimegen/generator.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . -package main - -// Standard "mime" package rely on system-settings, see mime.osInitMime -// Swarm will run on many OS/Platform/Docker and must behave similar -// This command generates code to add common mime types based on mime.types file -// -// mime.types file provided by mailcap, which follow https://www.iana.org/assignments/media-types/media-types.xhtml -// -// Get last version of mime.types file by: -// docker run --rm -v $(pwd):/tmp alpine:edge /bin/sh -c "apk add -U mailcap; mv /etc/mime.types /tmp" - -import ( - "bufio" - "bytes" - "flag" - "html/template" - "io/ioutil" - "strings" - - "log" -) - -var ( - typesFlag = flag.String("types", "", "Input mime.types file") - packageFlag = flag.String("package", "", "Golang package in output file") - outFlag = flag.String("out", "", "Output file name for the generated mime types") -) - -type mime struct { - Name string - Exts []string -} - -type templateParams struct { - PackageName string - Mimes []mime -} - -func main() { - // Parse and ensure all needed inputs are specified - flag.Parse() - if *typesFlag == "" { - log.Fatalf("--types is required") - } - if *packageFlag == "" { - log.Fatalf("--types is required") - } - if *outFlag == "" { - log.Fatalf("--out is required") - } - - params := templateParams{ - PackageName: *packageFlag, - } - - types, err := ioutil.ReadFile(*typesFlag) - if err != nil { - log.Fatal(err) - } - - scanner := bufio.NewScanner(bytes.NewReader(types)) - for scanner.Scan() { - txt := scanner.Text() - if strings.HasPrefix(txt, "#") || len(txt) == 0 { - continue - } - parts := strings.Fields(txt) - if len(parts) == 1 { - continue - } - params.Mimes = append(params.Mimes, mime{parts[0], parts[1:]}) - } - - if err = scanner.Err(); err != nil { - log.Fatal(err) - } - - result := bytes.NewBuffer([]byte{}) - - if err := template.Must(template.New("_").Parse(tpl)).Execute(result, params); err != nil { - log.Fatal(err) - } - - if err := ioutil.WriteFile(*outFlag, result.Bytes(), 0600); err != nil { - log.Fatal(err) - } -} - -var tpl = `// Code generated by github.com/ethereum/go-ethereum/cmd/swarm/mimegen. DO NOT EDIT. - -package {{ .PackageName }} - -import "mime" -func init() { - var mimeTypes = map[string]string{ -{{- range .Mimes -}} - {{ $name := .Name -}} - {{- range .Exts }} - ".{{ . }}": "{{ $name | html }}", - {{- end }} -{{- end }} - } - for ext, name := range mimeTypes { - if err := mime.AddExtensionType(ext, name); err != nil { - panic(err) - } - } -} -` diff --git a/cmd/swarm/mimegen/mime.types b/cmd/swarm/mimegen/mime.types deleted file mode 100644 index 1bdf211490d9..000000000000 --- a/cmd/swarm/mimegen/mime.types +++ /dev/null @@ -1,1828 +0,0 @@ -# This is a comment. I love comments. -*- indent-tabs-mode: t -*- - -# This file controls what Internet media types are sent to the client for -# given file extension(s). Sending the correct media type to the client -# is important so they know how to handle the content of the file. -# Extra types can either be added here or by using an AddType directive -# in your config files. For more information about Internet media types, -# please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type -# registry is at . - -# IANA types - -# MIME type Extensions -application/1d-interleaved-parityfec -application/3gpdash-qoe-report+xml -application/3gpp-ims+xml -application/A2L a2l -application/activemessage -application/alto-costmap+json -application/alto-costmapfilter+json -application/alto-directory+json -application/alto-endpointcost+json -application/alto-endpointcostparams+json -application/alto-endpointprop+json -application/alto-endpointpropparams+json -application/alto-error+json -application/alto-networkmap+json -application/alto-networkmapfilter+json -application/AML aml -application/andrew-inset ez -application/applefile -application/ATF atf -application/ATFX atfx -application/ATXML atxml -application/atom+xml atom -application/atomcat+xml atomcat -application/atomdeleted+xml atomdeleted -application/atomicmail -application/atomsvc+xml atomsvc -application/auth-policy+xml apxml -application/bacnet-xdd+zip xdd -application/batch-SMTP -application/beep+xml -application/calendar+json -application/calendar+xml xcs -application/call-completion -application/cals-1840 -application/cbor cbor -application/ccmp+xml ccmp -application/ccxml+xml ccxml -application/CDFX+XML cdfx -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -application/cdni -application/CEA cea -application/cea-2018+xml -application/cellml+xml cellml cml -application/cfw -application/clue_info+xml clue -application/cms cmsc -application/cnrp+xml -application/coap-group+json -application/coap-payload -application/commonground -application/conference-info+xml -application/cpl+xml cpl -application/cose -application/cose-key -application/cose-key-set -application/csrattrs csrattrs -application/csta+xml -application/CSTAdata+xml -application/csvm+json -application/cybercash -application/dash+xml mpd -application/dashdelta mpdd -application/davmount+xml davmount -application/dca-rft -application/DCD dcd -application/dec-dx -application/dialog-info+xml -application/dicom dcm -application/dicom+json -application/dicom+xml -application/DII dii -application/DIT dit -application/dns -application/dskpp+xml xmls -application/dssc+der dssc -application/dssc+xml xdssc -application/dvcs dvc -application/ecmascript es -application/EDI-Consent -application/EDI-X12 -application/EDIFACT -application/efi efi -application/EmergencyCallData.Comment+xml -application/EmergencyCallData.Control+xml -application/EmergencyCallData.DeviceInfo+xml -application/EmergencyCallData.eCall.MSD -application/EmergencyCallData.ProviderInfo+xml -application/EmergencyCallData.ServiceInfo+xml -application/EmergencyCallData.SubscriberInfo+xml -application/EmergencyCallData.VEDS+xml -application/emma+xml emma -application/emotionml+xml emotionml -application/encaprtp -application/epp+xml -application/epub+zip epub -application/eshop -application/exi exi -application/fastinfoset finf -application/fastsoap -application/fdt+xml fdt -# fits, fit, fts: image/fits -application/fits -# application/font-sfnt deprecated in favor of font/sfnt -application/font-tdpfr pfr -# application/font-woff deprecated in favor of font/woff -application/framework-attributes+xml -application/geo+json geojson -application/geo+json-seq -application/gml+xml gml -application/gzip gz tgz -application/H224 -application/held+xml -application/http -application/hyperstudio stk -application/ibe-key-request+xml -application/ibe-pkg-reply+xml -application/ibe-pp-data -application/iges -application/im-iscomposing+xml -application/index -application/index.cmd -application/index.obj -application/index.response -application/index.vnd -application/inkml+xml ink inkml -application/iotp -application/ipfix ipfix -application/ipp -application/isup -application/its+xml its -application/javascript js -application/jose -application/jose+json -application/jrd+json jrd -application/json json -application/json-patch+json json-patch -application/json-seq -application/jwk+json -application/jwk-set+json -application/jwt -application/kpml-request+xml -application/kpml-response+xml -application/ld+json jsonld -application/lgr+xml lgr -application/link-format wlnk -application/load-control+xml -application/lost+xml lostxml -application/lostsync+xml lostsyncxml -application/LXF lxf -application/mac-binhex40 hqx -application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica nb ma mb -application/mathml-content+xml -application/mathml-presentation+xml -application/mathml+xml mml -application/mbms-associated-procedure-description+xml -application/mbms-deregister+xml -application/mbms-envelope+xml -application/mbms-msk-response+xml -application/mbms-msk+xml -application/mbms-protection-description+xml -application/mbms-reception-report+xml -application/mbms-register-response+xml -application/mbms-register+xml -application/mbms-schedule+xml -application/mbms-user-service-description+xml -application/mbox mbox -application/media_control+xml -# mpf: text/vnd.ms-mediapackage -application/media-policy-dataset+xml -application/mediaservercontrol+xml -application/merge-patch+json -application/metalink4+xml meta4 -application/mets+xml mets -application/MF4 mf4 -application/mikey -application/mods+xml mods -application/moss-keys -application/moss-signature -application/mosskey-data -application/mosskey-request -application/mp21 m21 mp21 -# mp4, mpg4: video/mp4, see RFC 4337 -application/mp4 -application/mpeg4-generic -application/mpeg4-iod -application/mpeg4-iod-xmt -# xdf: application/xcap-diff+xml -application/mrb-consumer+xml -application/mrb-publish+xml -application/msc-ivr+xml -application/msc-mixer+xml -application/msword doc -application/mud+json -application/mxf mxf -application/n-quads nq -application/n-triples nt -application/nasdata -application/news-checkgroups -application/news-groupinfo -application/news-transmission -application/nlsml+xml -application/nss -application/ocsp-request orq -application/ocsp-response ors -application/octet-stream bin lha lzh exe class so dll img iso -application/oda oda -application/ODX odx -application/oebps-package+xml opf -application/ogg ogx -application/oxps oxps -application/p2p-overlay+xml relo -application/parityfec -# xer: application/xcap-error+xml -application/patch-ops-error+xml -application/pdf pdf -application/PDX pdx -application/pgp-encrypted pgp -application/pgp-keys -application/pgp-signature sig -application/pidf-diff+xml -application/pidf+xml -application/pkcs10 p10 -application/pkcs12 p12 pfx -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -# ac: application/vnd.nokia.n-gage.ac+xml -application/pkix-attr-cert -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -application/poc-settings+xml -application/postscript ps eps ai -application/ppsp-tracker+json -application/problem+json -application/problem+xml -application/provenance+xml provx -application/prs.alvestrand.titrax-sheet -application/prs.cww cw cww -application/prs.hpub+zip hpub -application/prs.nprend rnd rct -application/prs.plucker -application/prs.rdf-xml-crypt rdf-crypt -application/prs.xsf+xml xsf -application/pskc+xml pskcxml -application/qsig -application/raptorfec -application/rdap+json -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -application/remote-printing -application/reputon+json -application/resource-lists-diff+xml rld -application/resource-lists+xml rl -application/rfc+xml rfcxml -application/riscos -application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-publication -application/rpki-roa roa -application/rpki-updown -application/rtf rtf -application/rtploopback -application/rtx -application/samlassertion+xml -application/samlmetadata+xml -application/sbml+xml -application/scaip+xml -# scm: application/vnd.lotus-screencam -application/scim+json scim -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -application/sep+xml -application/sep-exi -application/session-info -application/set-payment -application/set-payment-initiation -application/set-registration -application/set-registration-initiation -application/sgml -application/sgml-open-catalog soc -application/shf+xml shf -application/sieve siv sieve -application/simple-filter+xml cl -application/simple-message-summary -application/simpleSymbolContainer -application/slate -# application/smil obsoleted by application/smil+xml -application/smil+xml smil smi sml -application/smpte336m -application/soap+fastinfoset -application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -application/spirits-event+xml -application/sql sql -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssml+xml ssml -application/tamp-apex-update tau -application/tamp-apex-update-confirm auc -application/tamp-community-update tcu -application/tamp-community-update-confirm cuc -application/tamp-error ter -application/tamp-sequence-adjust tsa -application/tamp-sequence-adjust-confirm sac -# tsq: application/timestamp-query -application/tamp-status-query -# tsr: application/timestamp-reply -application/tamp-status-response -application/tamp-update tur -application/tamp-update-confirm tuc -application/tei+xml tei teiCorpus odd -application/thraud+xml tfi -application/timestamp-query tsq -application/timestamp-reply tsr -application/timestamped-data tsd -application/trig trig -application/ttml+xml ttml -application/tve-trigger -application/ulpfec -application/urc-grpsheet+xml gsheet -application/urc-ressheet+xml rsheet -application/urc-targetdesc+xml td -application/urc-uisocketdesc+xml uis -application/vcard+json -application/vcard+xml -application/vemmi -application/vnd.3gpp.access-transfer-events+xml -application/vnd.3gpp.bsf+xml -application/vnd.3gpp.mid-call+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -application/vnd.3gpp-prose+xml -application/vnd.3gpp-prose-pc3ch+xml -# sms: application/vnd.3gpp2.sms -application/vnd.3gpp.sms -application/vnd.3gpp.sms+xml -application/vnd.3gpp.srvcc-ext+xml -application/vnd.3gpp.SRVCC-info+xml -application/vnd.3gpp.state-and-event-info+xml -application/vnd.3gpp.ussd+xml -application/vnd.3gpp2.bcmcsinfo+xml -application/vnd.3gpp2.sms sms -application/vnd.3gpp2.tcap tcap -application/vnd.3lightssoftware.imagescal imgcal -application/vnd.3M.Post-it-Notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.flash.movie swf -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -application/vnd.aether.imp -application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.mobi8-ebook azw3 -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -application/vnd.amundsen.maze+xml -application/vnd.anki apkg -application/vnd.anser-web-certificate-issue-initiation cii -# Not in IANA listing, but is on FTP site? -application/vnd.anser-web-funds-transfer-initiation fti -# atx: audio/ATRAC-X -application/vnd.antix.game-component -application/vnd.apache.thrift.binary -application/vnd.apache.thrift.compact -application/vnd.apache.thrift.json -application/vnd.api+json -application/vnd.apothekende.reservation+json -application/vnd.apple.installer+xml dist distz pkg mpkg -# m3u: audio/x-mpegurl for now -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi obsoleted by application/vnd.aristanetworks.swi -application/vnd.aristanetworks.swi swi -application/vnd.artsquare -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -application/vnd.autopackage package -application/vnd.avistar+xml -application/vnd.balsamiq.bmml+xml bmml -application/vnd.balsamiq.bmpr bmpr -application/vnd.bekitzur-stech+json -application/vnd.bint.med-content -application/vnd.biopax.rdf+xml -application/vnd.blueice.multipass mpm -application/vnd.bluetooth.ep.oob ep -application/vnd.bluetooth.le.oob le -application/vnd.bmi bmi -application/vnd.businessobjects rep -application/vnd.cab-jscript -application/vnd.canon-cpdl -application/vnd.canon-lips -application/vnd.capasystems-pg+json -application/vnd.cendio.thinlinc.clientconf tlclient -application/vnd.century-systems.tcp_stream -application/vnd.chemdraw+xml cdxml -application/vnd.chess-pgn pgn -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -application/vnd.cirpack.isdn-ext -application/vnd.citationstyles.style+xml csl -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -application/vnd.coffeescript coffee -application/vnd.collection+json -application/vnd.collection.doc+json -application/vnd.collection.next+json -application/vnd.comicbook+zip cbz -# icc: application/vnd.iccprofile -application/vnd.commerce-battelle ica icf icd ic0 ic1 ic2 ic3 ic4 ic5 ic6 ic7 ic8 -application/vnd.commonspace csp cst -application/vnd.contact.cmsg cdbcmsg -application/vnd.coreos.ignition+json ign ignition -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -application/vnd.ctct.ws+xml -application/vnd.cups-pdf -application/vnd.cups-postscript -application/vnd.cups-ppd ppd -application/vnd.cups-raster -application/vnd.cups-raw -application/vnd.curl curl -application/vnd.cyan.dean.root+xml -application/vnd.cybank -application/vnd.d2l.coursepackage1p0+zip -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.datapackage+json -application/vnd.dataresource+json -application/vnd.debian.binary-package deb udeb -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -application/vnd.desmume.movie dsm -application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dm.delegation+xml -application/vnd.dna dna -application/vnd.document+json docjson -application/vnd.dolby.mobile.1 -application/vnd.dolby.mobile.2 -application/vnd.doremir.scorecloud-binary-document scld -application/vnd.dpgraph dpg mwc dpgraph -application/vnd.dreamfactory dfac -application/vnd.drive+json -application/vnd.dtg.local -application/vnd.dtg.local.flash fla -application/vnd.dtg.local.html -application/vnd.dvb.ait ait -# class: application/octet-stream -application/vnd.dvb.dvbj -application/vnd.dvb.esgcontainer -application/vnd.dvb.ipdcdftnotifaccess -application/vnd.dvb.ipdcesgaccess -application/vnd.dvb.ipdcesgaccess2 -application/vnd.dvb.ipdcesgpdd -application/vnd.dvb.ipdcroaming -application/vnd.dvb.iptv.alfec-base -application/vnd.dvb.iptv.alfec-enhancement -application/vnd.dvb.notif-aggregate-root+xml -application/vnd.dvb.notif-container+xml -application/vnd.dvb.notif-generic+xml -application/vnd.dvb.notif-ia-msglist+xml -application/vnd.dvb.notif-ia-registration-request+xml -application/vnd.dvb.notif-ia-registration-response+xml -application/vnd.dvb.notif-init+xml -# pfr: application/font-tdpfr -application/vnd.dvb.pfr -application/vnd.dvb.service svc -# dxr: application/x-director -application/vnd.dxr -application/vnd.dynageo geo -application/vnd.dzr dzr -application/vnd.easykaraoke.cdgdownload -application/vnd.ecdis-update -application/vnd.ecowin.chart mag -application/vnd.ecowin.filerequest -application/vnd.ecowin.fileupdate -application/vnd.ecowin.series -application/vnd.ecowin.seriesrequest -application/vnd.ecowin.seriesupdate -# img: application/octet-stream -application/vnd.efi-img -# iso: application/octet-stream -application/vnd.efi-iso -application/vnd.enliven nml -application/vnd.enphase.envoy -application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -application/vnd.ericsson.quickcall qcall qca -application/vnd.espass-espass+zip espass -application/vnd.eszigno3+xml es3 et3 -application/vnd.etsi.aoc+xml -application/vnd.etsi.asic-e+zip asice sce -# scs: application/scvp-cv-response -application/vnd.etsi.asic-s+zip asics -application/vnd.etsi.cug+xml -application/vnd.etsi.iptvcommand+xml -application/vnd.etsi.iptvdiscovery+xml -application/vnd.etsi.iptvprofile+xml -application/vnd.etsi.iptvsad-bc+xml -application/vnd.etsi.iptvsad-cod+xml -application/vnd.etsi.iptvsad-npvr+xml -application/vnd.etsi.iptvservice+xml -application/vnd.etsi.iptvsync+xml -application/vnd.etsi.iptvueprofile+xml -application/vnd.etsi.mcid+xml -application/vnd.etsi.mheg5 -application/vnd.etsi.overload-control-policy-dataset+xml -application/vnd.etsi.pstn+xml -application/vnd.etsi.sci+xml -application/vnd.etsi.simservs+xml -application/vnd.etsi.timestamp-token tst -application/vnd.etsi.tsl.der -application/vnd.etsi.tsl+xml -application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -application/vnd.f-secure.mobile -application/vnd.fastcopy-disk-image dim -application/vnd.fdf fdf -application/vnd.fdsn.mseed msd mseed -application/vnd.fdsn.seed seed dataless -application/vnd.ffsns -application/vnd.filmit.zfc zfc -# all extensions: application/vnd.hbci -application/vnd.fints -application/vnd.firemonkeys.cloudcell -application/vnd.FloGraphIt gph -application/vnd.fluxtime.clip ftc -application/vnd.font-fontforge-sfd sfd -application/vnd.framemaker fm -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -application/vnd.fujixerox.ART-EX -application/vnd.fujixerox.ART4 -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -application/vnd.fujixerox.docuworks.container xct -application/vnd.fujixerox.HBPL -application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geo+json obsoleted by application/geo+json -application/vnd.geocube+xml g3 g³ -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# gbr: application/rpki-ghostbusters -application/vnd.gerber -application/vnd.globalplatform.card-content-mgt -application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.gov.sk.e-form+xml -application/vnd.gov.sk.e-form+zip -application/vnd.gov.sk.xmldatacontainer+xml -application/vnd.grafeq gqf gqs -application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.HandHeld-Entertainment+xml zmm -application/vnd.hbci hbci hbc kom upa pkd bpd -application/vnd.hc+json -# rep: application/vnd.businessobjects -application/vnd.hcl-bireports -application/vnd.hdt hdt -application/vnd.heroku+json -application/vnd.hhe.lesson-player les -application/vnd.hp-HPGL hpgl -application/vnd.hp-hpid hpi hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-PCL pcl -application/vnd.hp-PCLXL -application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -application/vnd.hyperdrive+json -application/vnd.hzn-3d-crossword x3d -application/vnd.ibm.afplinedata -application/vnd.ibm.electronic-media emm -application/vnd.ibm.MiniPay mpy -application/vnd.ibm.modcap list3820 listafp afp pseg3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.ieee.1905 1905.1 -application/vnd.igloader igl -application/vnd.imagemeter.folder+zip imf -application/vnd.imagemeter.image+zip imi -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -application/vnd.ims.imsccv1p1 imscc -application/vnd.ims.imsccv1p2 -application/vnd.ims.imsccv1p3 -application/vnd.ims.lis.v2.result+json -application/vnd.ims.lti.v2.toolconsumerprofile+json -application/vnd.ims.lti.v2.toolproxy.id+json -application/vnd.ims.lti.v2.toolproxy+json -application/vnd.ims.lti.v2.toolsettings+json -application/vnd.ims.lti.v2.toolsettings.simple+json -application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary obsoleted by application/vnd.visionary -application/vnd.infotech.project -application/vnd.infotech.project+xml -application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -application/vnd.intertrust.digibox -application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -application/vnd.iptc.g2.catalogitem+xml -application/vnd.iptc.g2.conceptitem+xml -application/vnd.iptc.g2.knowledgeitem+xml -application/vnd.iptc.g2.newsitem+xml -application/vnd.iptc.g2.newsmessage+xml -application/vnd.iptc.g2.packageitem+xml -application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -application/vnd.japannet-directory-service -application/vnd.japannet-jpnstore-wakeup -application/vnd.japannet-payment-wakeup -application/vnd.japannet-registration -application/vnd.japannet-registration-wakeup -application/vnd.japannet-setstore-wakeup -application/vnd.japannet-verification -application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.jsk.isdn-ngn -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.Kinar kne knp sdf -application/vnd.koan skp skd skm skt -application/vnd.kodak-descriptor sse -application/vnd.las.las+json lasjson -application/vnd.las.las+xml lasxml -application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 wk4 wk3 wk1 -application/vnd.lotus-approach apr vew -application/vnd.lotus-freelance prz pre -application/vnd.lotus-notes nsf ntf ndl ns4 ns3 ns2 nsh nsg -application/vnd.lotus-organizer or3 or2 org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp sam -application/vnd.macports.portpkg portpkg -application/vnd.mapbox-vector-tile mvt -application/vnd.marlin.drm.actiontoken+xml -application/vnd.marlin.drm.conftoken+xml -application/vnd.marlin.drm.license+xml -application/vnd.marlin.drm.mdcf mdc -application/vnd.mason+json -application/vnd.maxmind.maxmind-db mmdb -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -application/vnd.meridian-slingshot -application/vnd.MFER mwf -application/vnd.mfmp mfm -application/vnd.micro+json -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.microsoft.portable-executable -application/vnd.microsoft.windows.thumbnail-cache -application/vnd.miele+json -application/vnd.mif mif -application/vnd.minisoft-hp3000-save -application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.Mobius.DAF daf -application/vnd.Mobius.DIS dis -application/vnd.Mobius.MBK mbk -application/vnd.Mobius.MQY mqy -application/vnd.Mobius.MSL msl -application/vnd.Mobius.PLC plc -application/vnd.Mobius.TXF txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -application/vnd.motorola.flexsuite -application/vnd.motorola.flexsuite.adsi -application/vnd.motorola.flexsuite.fis -application/vnd.motorola.flexsuite.gotap -application/vnd.motorola.flexsuite.kmr -application/vnd.motorola.flexsuite.ttc -application/vnd.motorola.flexsuite.wem -application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-3mfdocument 3mf -application/vnd.ms-artgalry cil -application/vnd.ms-asf asf -application/vnd.ms-cab-compressed cab -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.template.macroEnabled.12 xltm -application/vnd.ms-excel.addin.macroEnabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb -application/vnd.ms-excel.sheet.macroEnabled.12 xlsm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -application/vnd.ms-office.activeX+xml -application/vnd.ms-officetheme thmx -application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm -application/vnd.ms-powerpoint.slide.macroEnabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm -application/vnd.ms-powerpoint.template.macroEnabled.12 potm -application/vnd.ms-PrintDeviceCapabilities+xml -application/vnd.ms-PrintSchemaTicket+xml -application/vnd.ms-project mpp mpt -application/vnd.ms-tnef tnef tnf -application/vnd.ms-windows.devicepairing -application/vnd.ms-windows.nwprinting.oob -application/vnd.ms-windows.printerpairing -application/vnd.ms-windows.wsd.oob -application/vnd.ms-wmdrm.lic-chlg-req -application/vnd.ms-wmdrm.lic-resp -application/vnd.ms-wmdrm.meter-chlg-req -application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroEnabled.12 docm -application/vnd.ms-word.template.macroEnabled.12 dotm -application/vnd.ms-works wcm wdb wks wps -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.msa-disk-image msa -application/vnd.mseq mseq -application/vnd.msign -application/vnd.multiad.creator crtr -application/vnd.multiad.creator.cif cif -application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -application/vnd.ncd.control -application/vnd.ncd.reference -application/vnd.nearst.inv+json -application/vnd.nervana entity request bkm kcm -application/vnd.netfpx -# ntf: application/vnd.lotus-notes -application/vnd.nitf nitf -application/vnd.neurolanguage.nlu nlu -application/vnd.nintendo.nitro.rom nds -application/vnd.nintendo.snes.rom sfc smc -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -application/vnd.nokia.catalogs -application/vnd.nokia.conml+wbxml -application/vnd.nokia.conml+xml -application/vnd.nokia.iptv.config+xml -application/vnd.nokia.iSDS-radio-presets -application/vnd.nokia.landmark+wbxml -application/vnd.nokia.landmark+xml -application/vnd.nokia.landmarkcollection+xml -application/vnd.nokia.n-gage.ac+xml ac -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -application/vnd.nokia.ncd -application/vnd.nokia.pcd+wbxml -application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.EDM edm -application/vnd.novadigm.EDX edx -application/vnd.novadigm.EXT ext -application/vnd.ntt-local.content-share -application/vnd.ntt-local.file-transfer -application/vnd.ntt-local.ogw_remote-access -application/vnd.ntt-local.sip-ta_remote -application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -# otf: font/otf -application/vnd.oasis.opendocument.formula-template -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -application/vnd.obn -application/vnd.ocf+cbor -application/vnd.oftn.l10n+json -application/vnd.oipf.contentaccessdownload+xml -application/vnd.oipf.contentaccessstreaming+xml -application/vnd.oipf.cspg-hexbinary -application/vnd.oipf.dae.svg+xml -application/vnd.oipf.dae.xhtml+xml -application/vnd.oipf.mippvcontrolmessage+xml -application/vnd.oipf.pae.gem -application/vnd.oipf.spdiscovery+xml -application/vnd.oipf.spdlist+xml -application/vnd.oipf.ueprofile+xml -application/vnd.olpc-sugar xo -application/vnd.oma.bcast.associated-procedure-parameter+xml -application/vnd.oma.bcast.drm-trigger+xml -application/vnd.oma.bcast.imd+xml -application/vnd.oma.bcast.ltkm -application/vnd.oma.bcast.notification+xml -application/vnd.oma.bcast.provisioningtrigger -application/vnd.oma.bcast.sgboot -application/vnd.oma.bcast.sgdd+xml -application/vnd.oma.bcast.sgdu -application/vnd.oma.bcast.simple-symbol-container -application/vnd.oma.bcast.smartcard-trigger+xml -application/vnd.oma.bcast.sprov+xml -application/vnd.oma.bcast.stkm -application/vnd.oma.cab-address-book+xml -application/vnd.oma.cab-feature-handler+xml -application/vnd.oma.cab-pcc+xml -application/vnd.oma.cab-subs-invite+xml -application/vnd.oma.cab-user-prefs+xml -application/vnd.oma.dcd -application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -application/vnd.oma.drm.risd+xml -application/vnd.oma.group-usage-list+xml -application/vnd.oma.lwm2m+json -application/vnd.oma.lwm2m+tlv -application/vnd.oma.pal+xml -application/vnd.oma.poc.detailed-progress-report+xml -application/vnd.oma.poc.final-report+xml -application/vnd.oma.poc.groups+xml -application/vnd.oma.poc.invocation-descriptor+xml -application/vnd.oma.poc.optimized-progress-report+xml -application/vnd.oma.push -application/vnd.oma.scidm.messages+xml -application/vnd.oma.xcap-directory+xml -application/vnd.oma-scws-config -application/vnd.oma-scws-http-request -application/vnd.oma-scws-http-response -application/vnd.omads-email+xml -application/vnd.omads-file+xml -application/vnd.omads-folder+xml -application/vnd.omaloc-supl-init -application/vnd.onepager tam -application/vnd.onepagertamp tamp -application/vnd.onepagertamx tamx -application/vnd.onepagertat tat -application/vnd.onepagertatp tatp -application/vnd.onepagertatx tatx -application/vnd.openblox.game+xml obgx -application/vnd.openblox.game-binary obg -application/vnd.openeye.oeb oeb -application/vnd.openofficeorg.extension oxt -application/vnd.openstreetmap.data+xml osm -application/vnd.openxmlformats-officedocument.custom-properties+xml -application/vnd.openxmlformats-officedocument.customXmlProperties+xml -application/vnd.openxmlformats-officedocument.drawing+xml -application/vnd.openxmlformats-officedocument.drawingml.chart+xml -application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml -application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml -application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml -application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml -application/vnd.openxmlformats-officedocument.extended-properties+xml -application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml -application/vnd.openxmlformats-officedocument.presentationml.comments+xml -application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml -application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml -application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml -application/vnd.openxmlformats-officedocument.presentationml.presProps+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -application/vnd.openxmlformats-officedocument.presentationml.slide+xml -application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml -application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideUpdateInfo+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml -application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -application/vnd.openxmlformats-officedocument.theme+xml -application/vnd.openxmlformats-officedocument.themeOverride+xml -application/vnd.openxmlformats-officedocument.vmlDrawing -application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml -application/vnd.openxmlformats-package.core-properties+xml -application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -application/vnd.openxmlformats-package.relationships+xml -application/vnd.oracle.resource+json -application/vnd.orange.indata -application/vnd.osa.netdeploy ndc -application/vnd.osgeo.mapguide.package mgp -# jar: application/x-java-archive -application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -application/vnd.otps.ct-kip+xml -application/vnd.oxli.countgraph oxlicg -application/vnd.pagerduty+json -application/vnd.palm prc pdb pqa oprc -application/vnd.panoply plp -application/vnd.paos+xml -application/vnd.pawaafile paw -application/vnd.pcos -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -application/vnd.piaccess.application-license pil -application/vnd.picsel efif -application/vnd.pmi.widget wg -application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -application/vnd.powerbuilder6-s -application/vnd.powerbuilder7 -application/vnd.powerbuilder7-s -application/vnd.powerbuilder75 -application/vnd.powerbuilder75-s -application/vnd.preminet preminet -application/vnd.previewsystems.box box vbox -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -# pti: image/prs.pti -application/vnd.pvi.ptid1 ptid -application/vnd.pwg-multiplexed -application/vnd.pwg-xhtml-print+xml -application/vnd.qualcomm.brew-app-res bar -application/vnd.quarantainenet -application/vnd.Quark.QuarkXPress qxd qxt qwd qwt qxl qxb -application/vnd.quobject-quoxdocument quox quiz -application/vnd.radisys.moml+xml -application/vnd.radisys.msml-audit-conf+xml -application/vnd.radisys.msml-audit-conn+xml -application/vnd.radisys.msml-audit-dialog+xml -application/vnd.radisys.msml-audit-stream+xml -application/vnd.radisys.msml-audit+xml -application/vnd.radisys.msml-conf+xml -application/vnd.radisys.msml-dialog-base+xml -application/vnd.radisys.msml-dialog-fax-detect+xml -application/vnd.radisys.msml-dialog-fax-sendrecv+xml -application/vnd.radisys.msml-dialog-group+xml -application/vnd.radisys.msml-dialog-speech+xml -application/vnd.radisys.msml-dialog-transform+xml -application/vnd.radisys.msml-dialog+xml -application/vnd.radisys.msml+xml -application/vnd.rainstor.data tree -application/vnd.rapid -application/vnd.rar rar -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml -application/vnd.RenLearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.route66.link66+xml link66 -# gbr: application/rpki-ghostbusters -application/vnd.rs-274x -application/vnd.ruckus.download -application/vnd.s3sms -application/vnd.sailingtracker.track st -application/vnd.sbm.cid -application/vnd.sbm.mid2 -application/vnd.scribus scd sla slaz -application/vnd.sealed.3df s3df -application/vnd.sealed.csf scsf -application/vnd.sealed.doc sdoc sdo s1w -application/vnd.sealed.eml seml sem -application/vnd.sealed.mht smht smh -application/vnd.sealed.net -# spp: application/scvp-vp-response -application/vnd.sealed.ppt sppt s1p -application/vnd.sealed.tiff stif -application/vnd.sealed.xls sxls sxl s1e -# stm: audio/x-stm -application/vnd.sealedmedia.softseal.html stml s1h -application/vnd.sealedmedia.softseal.pdf spdf spd s1a -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.SimTech-MindMapper twd twds -application/vnd.siren+json -application/vnd.smaf mmf -application/vnd.smart.notebook notebook -application/vnd.smart.teacher teacher -application/vnd.software602.filler.form+xml fo -application/vnd.software602.filler.form-xml-zip zfo -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -application/vnd.sss-cod -application/vnd.sss-dtf -application/vnd.sss-ntf -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -application/vnd.street-stream -application/vnd.sun.wadl+xml wadl -application/vnd.sus-calendar sus susp -application/vnd.svd -application/vnd.swiftview-ics -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -application/vnd.syncml.dm.notification -application/vnd.syncml.dmddf+wbxml -application/vnd.syncml.dmddf+xml ddf -application/vnd.syncml.dmtnds+wbxml -application/vnd.syncml.dmtnds+xml -application/vnd.syncml.ds.notification -application/vnd.tableschema+json -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.theqvd qvd -application/vnd.tmd.mediaflex.api+xml -application/vnd.tml vfr viaframe -application/vnd.tmobile-livetv tmo -application/vnd.tri.onesource -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -application/vnd.truedoc -# cab: application/vnd.ms-cab-compressed -application/vnd.ubisoft.webplayer -application/vnd.ufdl ufdl ufd frm -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml uo -application/vnd.uplanet.alert -application/vnd.uplanet.alert-wbxml -application/vnd.uplanet.bearer-choice -application/vnd.uplanet.bearer-choice-wbxml -application/vnd.uplanet.cacheop -application/vnd.uplanet.cacheop-wbxml -application/vnd.uplanet.channel -application/vnd.uplanet.channel-wbxml -application/vnd.uplanet.list -application/vnd.uplanet.list-wbxml -application/vnd.uplanet.listcmd -application/vnd.uplanet.listcmd-wbxml -application/vnd.uplanet.signal -application/vnd.uri-map urim urimap -application/vnd.valve.source.material vmt -application/vnd.vcx vcx -# sxi: application/vnd.sun.xml.impress -application/vnd.vd-study mxi study-inter model-inter -# mcd: application/vnd.mcd -application/vnd.vectorworks vwx -application/vnd.vel+json -application/vnd.verimatrix.vcas -application/vnd.vidsoft.vidconference vsc -application/vnd.visio vsd vst vsw vss -application/vnd.visionary vis -# vsc: application/vnd.vidsoft.vidconference -application/vnd.vividence.scriptfile -application/vnd.vsf vsf -application/vnd.wap.sic sic -application/vnd.wap.slc slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -application/vnd.wfa.p2p p2p -application/vnd.wfa.wsc wsc -application/vnd.windows.devicepairing -application/vnd.wmc wmc -application/vnd.wmf.bootstrap -# nb: application/mathematica for now -application/vnd.wolfram.mathematica -application/vnd.wolfram.mathematica.package m -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -application/vnd.wv.csp+xml -application/vnd.wv.csp+wbxml wv -application/vnd.wv.ssp+xml -application/vnd.xacml+json -application/vnd.xara xar -application/vnd.xfdl xfdl xfd -application/vnd.xfdl.webform -application/vnd.xmi+xml -application/vnd.xmpie.cpkg cpkg -application/vnd.xmpie.dpkg dpkg -# dpkg: application/vnd.xmpie.dpkg -application/vnd.xmpie.plan -application/vnd.xmpie.ppkg ppkg -application/vnd.xmpie.xlim xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml -application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -application/vnd.yamaha.through-ngn -application/vnd.yamaha.tunnel-udpencap -application/vnd.yaoweme yme -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -application/vq-rtcp-xr -application/watcherinfo+xml wif -application/whoispp-query -application/whoispp-response -application/widget wgt -application/wita -application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -# yes, this *is* IANA registered despite of x- -application/x-www-form-urlencoded -application/x400-bp -application/xacml+xml -application/xcap-att+xml xav -application/xcap-caps+xml xca -application/xcap-diff+xml xdf -application/xcap-el+xml xel -application/xcap-error+xml xer -application/xcap-ns+xml xns -application/xcon-conference-info-diff+xml -application/xcon-conference-info+xml -application/xenc+xml -application/xhtml+xml xhtml xhtm xht -# xml, xsd, rng: text/xml -application/xml -# mod: audio/x-mod -application/xml-dtd dtd -# ent: text/xml-external-parsed-entity -application/xml-external-parsed-entity -application/xml-patch+xml -application/xmpp+xml -application/xop+xml xop -application/xslt+xml xsl xslt -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yang-data+json -application/yang-data+xml -application/yang-patch+json -application/yang-patch+xml -application/yin+xml yin -application/zip zip -application/zlib -audio/1d-interleaved-parityfec -audio/32kadpcm 726 -# 3gp, 3gpp: video/3gpp -audio/3gpp -# 3g2, 3gpp2: video/3gpp2 -audio/3gpp2 -audio/ac3 ac3 -audio/AMR amr -audio/AMR-WB awb -audio/amr-wb+ -audio/aptx -audio/asc acn -# aa3, omg: audio/ATRAC3 -audio/ATRAC-ADVANCED-LOSSLESS aal -# aa3, omg: audio/ATRAC3 -audio/ATRAC-X atx -audio/ATRAC3 at3 aa3 omg -audio/basic au snd -audio/BV16 -audio/BV32 -audio/clearmode -audio/CN -audio/DAT12 -audio/dls dls -audio/dsr-es201108 -audio/dsr-es202050 -audio/dsr-es202211 -audio/dsr-es202212 -audio/DV -audio/DVI4 -audio/eac3 -audio/encaprtp -audio/EVRC evc -# qcp: audio/qcelp -audio/EVRC-QCP -audio/EVRC0 -audio/EVRC1 -audio/EVRCB evb -audio/EVRCB0 -audio/EVRCB1 -audio/EVRCNW enw -audio/EVRCNW0 -audio/EVRCNW1 -audio/EVRCWB evw -audio/EVRCWB0 -audio/EVRCWB1 -audio/EVS -audio/example -audio/fwdred -audio/G711-0 -audio/G719 -audio/G722 -audio/G7221 -audio/G723 -audio/G726-16 -audio/G726-24 -audio/G726-32 -audio/G726-40 -audio/G728 -audio/G729 -audio/G7291 -audio/G729D -audio/G729E -audio/GSM -audio/GSM-EFR -audio/GSM-HR-08 -audio/iLBC lbc -audio/ip-mr_v2.5 -# wav: audio/x-wav -audio/L16 l16 -audio/L20 -audio/L24 -audio/L8 -audio/LPC -audio/MELP -audio/MELP600 -audio/MELP1200 -audio/MELP2400 -audio/mobile-xmf mxmf -# mp4, mpg4: video/mp4, see RFC 4337 -audio/mp4 m4a -audio/MP4A-LATM -audio/MPA -audio/mpa-robust -audio/mpeg mp3 mpga mp1 mp2 -audio/mpeg4-generic -audio/ogg oga ogg opus spx -audio/opus -audio/parityfec -audio/PCMA -audio/PCMA-WB -audio/PCMU -audio/PCMU-WB -audio/prs.sid sid psid -audio/qcelp qcp -audio/raptorfec -audio/RED -audio/rtp-enc-aescm128 -audio/rtp-midi -audio/rtploopback -audio/rtx -audio/SMV smv -# qcp: audio/qcelp, see RFC 3625 -audio/SMV-QCP -audio/SMV0 -# mid: audio/midi -audio/sp-midi -audio/speex -audio/t140c -audio/t38 -audio/telephone-event -audio/tone -audio/UEMCLIP -audio/ulpfec -audio/VDVI -audio/VMR-WB -audio/vnd.3gpp.iufp -audio/vnd.4SB -audio/vnd.audikoz koz -audio/vnd.CELP -audio/vnd.cisco.nse -audio/vnd.cmles.radio-events -audio/vnd.cns.anp1 -audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -audio/vnd.dlna.adts -audio/vnd.dolby.heaac.1 -audio/vnd.dolby.heaac.2 -audio/vnd.dolby.mlp mlp -audio/vnd.dolby.mps -audio/vnd.dolby.pl2 -audio/vnd.dolby.pl2x -audio/vnd.dolby.pl2z -audio/vnd.dolby.pulse.1 -audio/vnd.dra -# wav: audio/x-wav, cpt: application/mac-compactpro -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# dvb: video/vnd.dvb.file -audio/vnd.dvb.file -audio/vnd.everad.plj plj -# rm: audio/x-pn-realaudio -audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# mxmf: audio/mobile-xmf -audio/vnd.nokia.mobile-xmf -audio/vnd.nortel.vbk vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -audio/vnd.octel.sbc -# audio/vnd.qcelp deprecated in favour of audio/qcelp -audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -audio/vnd.sealedmedia.softseal.mpeg smp3 smp s1m -audio/vnd.vmx.cvsd -audio/vorbis -audio/vorbis-config -font/collection ttc -font/otf otf -font/sfnt -font/ttf ttf -font/woff woff -font/woff2 woff2 -image/bmp bmp dib -image/cgm cgm -image/dicom-rle drle -image/emf emf -image/example -image/fits fits fit fts -image/g3fax -image/gif gif -image/ief ief -image/jls jls -image/jp2 jp2 jpg2 -image/jpeg jpg jpeg jpe jfif -image/jpm jpm jpgm -image/jpx jpx jpf -image/ktx ktx -image/naplps -image/png png -image/prs.btif btif btf -image/prs.pti pti -image/pwg-raster -image/svg+xml svg svgz -image/t38 t38 -image/tiff tiff tif -image/tiff-fx tfx -image/vnd.adobe.photoshop psd -image/vnd.airzip.accelerator.azv azv -image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.djvu djvu djv -# sub: text/vnd.dvb.subtitle -image/vnd.dvb.subtitle -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -image/vnd.globalgraphics.pgb pgb -image/vnd.microsoft.icon ico -image/vnd.mix -image/vnd.mozilla.apng apng -image/vnd.ms-modi mdi -image/vnd.net-fpx -image/vnd.radiance hdr rgbe xyze -image/vnd.sealed.png spng spn s1n -image/vnd.sealedmedia.softseal.gif sgif sgi s1g -image/vnd.sealedmedia.softseal.jpg sjpg sjp s1j -image/vnd.svf -image/vnd.tencent.tap tap -image/vnd.valve.source.texture vtf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/vnd.zbrush.pcx pcx -image/wmf wmf -message/CPIM -message/delivery-status -message/disposition-notification -message/example -message/external-body -message/feedback-report -message/global u8msg -message/global-delivery-status u8dsn -message/global-disposition-notification u8mdn -message/global-headers u8hdr -message/http -# cl: application/simple-filter+xml -message/imdn+xml -# message/news obsoleted by message/rfc822 -message/partial -message/rfc822 eml mail art -message/s-http -message/sip -message/sipfrag -message/tracking-status -message/vnd.si.simp -# wsc: application/vnd.wfa.wsc -message/vnd.wfa.wsc -model/example -model/gltf+json gltf -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# 3dml, 3dm: text/vnd.in3d.3dml -model/vnd.flatland.3dml -model/vnd.gdl gdl gsm win dor lmp rsm msm ism -model/vnd.gs-gdl -model/vnd.gtw gtw -model/vnd.moml+xml moml -model/vnd.mts mts -model/vnd.opengex ogex -model/vnd.parasolid.transmit.binary x_b xmt_bin -model/vnd.parasolid.transmit.text x_t xmt_txt -model/vnd.rosette.annotated-data-model -model/vnd.valve.source.compiled-map bsp -model/vnd.vtu vtu -model/vrml wrl vrml -# x3db: model/x3d+xml -model/x3d+fastinfoset -# x3d: application/vnd.hzn-3d-crossword -model/x3d+xml x3db -model/x3d-vrml x3dv x3dvz -multipart/alternative -multipart/appledouble -multipart/byteranges -multipart/digest -multipart/encrypted -multipart/form-data -multipart/header-set -multipart/mixed -multipart/parallel -multipart/related -multipart/report -multipart/signed -multipart/vnd.bint.med-plus bmed -multipart/voice-message vpm -multipart/x-mixed-replace -text/1d-interleaved-parityfec -text/cache-manifest appcache manifest -text/calendar ics ifb -text/css css -text/csv csv -text/csv-schema csvs -text/directory -text/dns soa zone -text/encaprtp -# text/ecmascript obsoleted by application/ecmascript -text/enriched -text/example -text/fwdred -text/grammar-ref-list -text/html html htm -# text/javascript obsoleted by application/javascript -text/jcr-cnd cnd -text/markdown markdown md -text/mizar miz -text/n3 n3 -text/parameters -text/parityfec -text/plain txt asc text pm el c h cc hh cxx hxx f90 conf log -text/provenance-notation provn -text/prs.fallenstein.rst rst -text/prs.lines.tag tag dsc -text/prs.prop.logic -text/raptorfec -text/RED -text/rfc822-headers -text/richtext rtx -# rtf: application/rtf -text/rtf -text/rtp-enc-aescm128 -text/rtploopback -text/rtx -text/sgml sgml sgm -text/strings -text/t140 -text/tab-separated-values tsv -text/troff t tr roff -text/turtle ttl -text/ulpfec -text/uri-list uris uri -text/vcard vcf vcard -text/vnd.a a -text/vnd.abc abc -text/vnd.ascii-art ascii -# curl: application/vnd.curl -text/vnd.curl -text/vnd.debian.copyright copyright -text/vnd.DMClientScript dms -text/vnd.dvb.subtitle sub -text/vnd.esmertec.theme-descriptor jtd -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv dot -text/vnd.in3d.3dml 3dml 3dm -text/vnd.in3d.spot spot spo -text/vnd.IPTC.NewsML -text/vnd.IPTC.NITF -text/vnd.latex-z -text/vnd.motorola.reflex -text/vnd.ms-mediapackage mpf -text/vnd.net2phone.commcenter.command ccc -text/vnd.radisys.msml-basic-layout -text/vnd.si.uricatalogue uric -text/vnd.sun.j2me.app-descriptor jad -text/vnd.trolltech.linguist ts -text/vnd.wap.si si -text/vnd.wap.sl sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/xml xml xsd rng -text/xml-external-parsed-entity ent -video/1d-interleaved-parityfec -video/3gpp 3gp 3gpp -video/3gpp2 3g2 3gpp2 -video/3gpp-tt -video/BMPEG -video/BT656 -video/CelB -video/DV -video/encaprtp -video/example -video/H261 -video/H263 -video/H263-1998 -video/H263-2000 -video/H264 -video/H264-RCDO -video/H264-SVC -video/H265 -video/iso.segment m4s -video/JPEG -video/jpeg2000 -video/mj2 mj2 mjp2 -video/MP1S -video/MP2P -video/MP2T -video/mp4 mp4 mpg4 m4v -video/MP4V-ES -video/mpeg mpeg mpg mpe m1v m2v -video/mpeg4-generic -video/MPV -video/nv -video/ogg ogv -video/parityfec -video/pointer -video/quicktime mov qt -video/raptorfec -video/raw -video/rtp-enc-aescm128 -video/rtploopback -video/rtx -video/SMPTE292M -video/ulpfec -video/vc1 -video/vnd.CCTV -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -video/vnd.dece.mp4 uvu uvvu -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -video/vnd.directv.mpeg -video/vnd.directv.mpeg-tts -video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# rm: audio/x-pn-realaudio -video/vnd.hns.video -video/vnd.iptvforum.1dparityfec-1010 -video/vnd.iptvforum.1dparityfec-2005 -video/vnd.iptvforum.2dparityfec-1010 -video/vnd.iptvforum.2dparityfec-2005 -video/vnd.iptvforum.ttsavc -video/vnd.iptvforum.ttsmpeg2 -video/vnd.motorola.video -video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -video/vnd.nokia.interleaved-multimedia nim -video/vnd.nokia.videovoip -# mp4: video/mp4 -video/vnd.objectvideo -video/vnd.radgamettools.bink bik bk2 -video/vnd.radgamettools.smacker smk -video/vnd.sealed.mpeg1 smpg s11 -# smpg: video/vnd.sealed.mpeg1 -video/vnd.sealed.mpeg4 s14 -video/vnd.sealed.swf sswf ssw -video/vnd.sealedmedia.softseal.mov smov smo s1q -# uvu, uvvu: video/vnd.dece.mp4 -video/vnd.uvvu.mp4 -video/vnd.vivo viv -video/VP8 - -# Non-IANA types - -application/mac-compactpro cpt -application/metalink+xml metalink -application/owl+xml owx -application/rss+xml rss -application/vnd.android.package-archive apk -application/vnd.oma.dd+xml dd -application/vnd.oma.drm.content dcf -# odf: application/vnd.oasis.opendocument.formula -application/vnd.oma.drm.dcf o4a o4v -application/vnd.oma.drm.message dm -application/vnd.oma.drm.rights+wbxml drc -application/vnd.oma.drm.rights+xml dr -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -application/vnd.symbian.install sis -application/vnd.wap.mms-message mms -application/x-annodex anx -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-bzip2 bz2 -application/x-cdlink vcd -application/x-chrome-extension crx -application/x-cpio cpio -application/x-csh csh -application/x-director dcr dir dxr -application/x-dvi dvi -application/x-futuresplash spl -application/x-gtar gtar -application/x-hdf hdf -application/x-java-archive jar -application/x-java-jnlp-file jnlp -application/x-java-pack200 pack -application/x-killustrator kil -application/x-latex latex -application/x-netcdf nc cdf -application/x-perl pl -application/x-rpm rpm -application/x-sh sh -application/x-shar shar -application/x-stuffit sit -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-texinfo texinfo texi -application/x-troff-man man 1 2 3 4 5 6 7 8 -application/x-troff-me me -application/x-troff-ms ms -application/x-ustar ustar -application/x-wais-source src -application/x-xpinstall xpi -application/x-xspf+xml xspf -application/x-xz xz -audio/midi mid midi kar -audio/x-aiff aif aiff aifc -audio/x-annodex axa -audio/x-flac flac -audio/x-matroska mka -audio/x-mod mod ult uni m15 mtm 669 med -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram rm -audio/x-realaudio ra -audio/x-s3m s3m -audio/x-stm stm -audio/x-wav wav -chemical/x-xyz xyz -image/webp webp -image/x-cmu-raster ras -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-targa tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -text/html-sandboxed sandboxed -text/x-pod pod -text/x-setext etx -video/webm webm -video/x-annodex axv -video/x-flv flv -video/x-javafx fxm -video/x-matroska mkv -video/x-matroska-3d mk3d -video/x-ms-asf asx -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -x-conference/x-cooltalk ice -x-epoc/x-sisx-app sisx diff --git a/cmd/swarm/run_test.go b/cmd/swarm/run_test.go deleted file mode 100644 index 4a6a56d9b8b4..000000000000 --- a/cmd/swarm/run_test.go +++ /dev/null @@ -1,480 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "context" - "crypto/ecdsa" - "flag" - "fmt" - "io/ioutil" - "net" - "os" - "path" - "path/filepath" - "runtime" - "sync" - "syscall" - "testing" - "time" - - "github.com/docker/docker/pkg/reexec" - "github.com/ethereum/go-ethereum/accounts" - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/internal/cmdtest" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm" - "github.com/ethereum/go-ethereum/swarm/api" - swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http" -) - -var loglevel = flag.Int("loglevel", 3, "verbosity of logs") - -func init() { - // Run the app if we've been exec'd as "swarm-test" in runSwarm. - reexec.Register("swarm-test", func() { - if err := app.Run(os.Args); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - os.Exit(0) - }) -} - -const clusterSize = 3 - -var clusteronce sync.Once -var cluster *testCluster - -func initCluster(t *testing.T) { - clusteronce.Do(func() { - cluster = newTestCluster(t, clusterSize) - }) -} - -func serverFunc(api *api.API) swarmhttp.TestServer { - return swarmhttp.NewServer(api, "") -} -func TestMain(m *testing.M) { - // check if we have been reexec'd - if reexec.Init() { - return - } - os.Exit(m.Run()) -} - -func runSwarm(t *testing.T, args ...string) *cmdtest.TestCmd { - tt := cmdtest.NewTestCmd(t, nil) - - // Boot "swarm". This actually runs the test binary but the TestMain - // function will prevent any tests from running. - tt.Run("swarm-test", args...) - - return tt -} - -type testCluster struct { - Nodes []*testNode - TmpDir string -} - -// newTestCluster starts a test swarm cluster of the given size. -// -// A temporary directory is created and each node gets a data directory inside -// it. -// -// Each node listens on 127.0.0.1 with random ports for both the HTTP and p2p -// ports (assigned by first listening on 127.0.0.1:0 and then passing the ports -// as flags). -// -// When starting more than one node, they are connected together using the -// admin SetPeer RPC method. - -func newTestCluster(t *testing.T, size int) *testCluster { - cluster := &testCluster{} - defer func() { - if t.Failed() { - cluster.Shutdown() - } - }() - - tmpdir, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - cluster.TmpDir = tmpdir - - // start the nodes - cluster.StartNewNodes(t, size) - - if size == 1 { - return cluster - } - - // connect the nodes together - for _, node := range cluster.Nodes { - if err := node.Client.Call(nil, "admin_addPeer", cluster.Nodes[0].Enode); err != nil { - t.Fatal(err) - } - } - - // wait until all nodes have the correct number of peers -outer: - for _, node := range cluster.Nodes { - var peers []*p2p.PeerInfo - for start := time.Now(); time.Since(start) < time.Minute; time.Sleep(50 * time.Millisecond) { - if err := node.Client.Call(&peers, "admin_peers"); err != nil { - t.Fatal(err) - } - if len(peers) == len(cluster.Nodes)-1 { - continue outer - } - } - t.Fatalf("%s only has %d / %d peers", node.Name, len(peers), len(cluster.Nodes)-1) - } - - return cluster -} - -func (c *testCluster) Shutdown() { - for _, node := range c.Nodes { - node.Shutdown() - } - os.RemoveAll(c.TmpDir) -} - -func (c *testCluster) Stop() { - for _, node := range c.Nodes { - node.Shutdown() - } -} - -func (c *testCluster) StartNewNodes(t *testing.T, size int) { - c.Nodes = make([]*testNode, 0, size) - for i := 0; i < size; i++ { - dir := filepath.Join(c.TmpDir, fmt.Sprintf("swarm%02d", i)) - if err := os.Mkdir(dir, 0700); err != nil { - t.Fatal(err) - } - - node := newTestNode(t, dir) - node.Name = fmt.Sprintf("swarm%02d", i) - - c.Nodes = append(c.Nodes, node) - } -} - -func (c *testCluster) StartExistingNodes(t *testing.T, size int, bzzaccount string) { - c.Nodes = make([]*testNode, 0, size) - for i := 0; i < size; i++ { - dir := filepath.Join(c.TmpDir, fmt.Sprintf("swarm%02d", i)) - node := existingTestNode(t, dir, bzzaccount) - node.Name = fmt.Sprintf("swarm%02d", i) - - c.Nodes = append(c.Nodes, node) - } -} - -func (c *testCluster) Cleanup() { - os.RemoveAll(c.TmpDir) -} - -type testNode struct { - Name string - Addr string - URL string - Enode string - Dir string - IpcPath string - PrivateKey *ecdsa.PrivateKey - Client *rpc.Client - Cmd *cmdtest.TestCmd -} - -const testPassphrase = "swarm-test-passphrase" - -func getTestAccount(t *testing.T, dir string) (conf *node.Config, account accounts.Account) { - // create key - conf = &node.Config{ - DataDir: dir, - IPCPath: "bzzd.ipc", - NoUSB: true, - } - n, err := node.New(conf) - if err != nil { - t.Fatal(err) - } - account, err = n.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore).NewAccount(testPassphrase) - if err != nil { - t.Fatal(err) - } - - // use a unique IPCPath when running tests on Windows - if runtime.GOOS == "windows" { - conf.IPCPath = fmt.Sprintf("bzzd-%s.ipc", account.Address.String()) - } - - return conf, account -} - -func existingTestNode(t *testing.T, dir string, bzzaccount string) *testNode { - conf, _ := getTestAccount(t, dir) - node := &testNode{Dir: dir} - - // use a unique IPCPath when running tests on Windows - if runtime.GOOS == "windows" { - conf.IPCPath = fmt.Sprintf("bzzd-%s.ipc", bzzaccount) - } - - // assign ports - ports, err := getAvailableTCPPorts(2) - if err != nil { - t.Fatal(err) - } - p2pPort := ports[0] - httpPort := ports[1] - - // start the node - node.Cmd = runSwarm(t, - "--port", p2pPort, - "--nat", "extip:127.0.0.1", - "--datadir", dir, - "--ipcpath", conf.IPCPath, - "--ens-api", "", - "--bzzaccount", bzzaccount, - "--bzznetworkid", "321", - "--bzzport", httpPort, - "--verbosity", fmt.Sprint(*loglevel), - ) - node.Cmd.InputLine(testPassphrase) - defer func() { - if t.Failed() { - node.Shutdown() - } - }() - - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - // ensure that all ports have active listeners - // so that the next node will not get the same - // when calling getAvailableTCPPorts - err = waitTCPPorts(ctx, ports...) - if err != nil { - t.Fatal(err) - } - - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - node.Addr = net.JoinHostPort("127.0.0.1", info.Port) - node.URL = "http://" + node.Addr - - var nodeInfo p2p.NodeInfo - if err := node.Client.Call(&nodeInfo, "admin_nodeInfo"); err != nil { - t.Fatal(err) - } - node.Enode = nodeInfo.Enode - node.IpcPath = conf.IPCPath - return node -} - -func newTestNode(t *testing.T, dir string) *testNode { - - conf, account := getTestAccount(t, dir) - ks := keystore.NewKeyStore(path.Join(dir, "keystore"), 1<<18, 1) - - pk := decryptStoreAccount(ks, account.Address.Hex(), []string{testPassphrase}) - - node := &testNode{Dir: dir, PrivateKey: pk} - - // assign ports - ports, err := getAvailableTCPPorts(2) - if err != nil { - t.Fatal(err) - } - p2pPort := ports[0] - httpPort := ports[1] - - // start the node - node.Cmd = runSwarm(t, - "--port", p2pPort, - "--nat", "extip:127.0.0.1", - "--datadir", dir, - "--ipcpath", conf.IPCPath, - "--ens-api", "", - "--bzzaccount", account.Address.String(), - "--bzznetworkid", "321", - "--bzzport", httpPort, - "--verbosity", fmt.Sprint(*loglevel), - ) - node.Cmd.InputLine(testPassphrase) - defer func() { - if t.Failed() { - node.Shutdown() - } - }() - - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - - // ensure that all ports have active listeners - // so that the next node will not get the same - // when calling getAvailableTCPPorts - err = waitTCPPorts(ctx, ports...) - if err != nil { - t.Fatal(err) - } - - // wait for the node to start - for start := time.Now(); time.Since(start) < 10*time.Second; time.Sleep(50 * time.Millisecond) { - node.Client, err = rpc.Dial(conf.IPCEndpoint()) - if err == nil { - break - } - } - if node.Client == nil { - t.Fatal(err) - } - - // load info - var info swarm.Info - if err := node.Client.Call(&info, "bzz_info"); err != nil { - t.Fatal(err) - } - node.Addr = net.JoinHostPort("127.0.0.1", info.Port) - node.URL = "http://" + node.Addr - - var nodeInfo p2p.NodeInfo - if err := node.Client.Call(&nodeInfo, "admin_nodeInfo"); err != nil { - t.Fatal(err) - } - node.Enode = nodeInfo.Enode - node.IpcPath = conf.IPCPath - return node -} - -func (n *testNode) Shutdown() { - if n.Cmd != nil { - n.Cmd.Kill() - } -} - -// getAvailableTCPPorts returns a set of ports that -// nothing is listening on at the time. -// -// Function assignTCPPort cannot be called in sequence -// and guardantee that the same port will be returned in -// different calls as the listener is closed within the function, -// not after all listeners are started and selected unique -// available ports. -func getAvailableTCPPorts(count int) (ports []string, err error) { - for i := 0; i < count; i++ { - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return nil, err - } - // defer close in the loop to be sure the same port will not - // be selected in the next iteration - defer l.Close() - - _, port, err := net.SplitHostPort(l.Addr().String()) - if err != nil { - return nil, err - } - ports = append(ports, port) - } - return ports, nil -} - -// waitTCPPorts blocks until tcp connections can be -// established on all provided ports. It runs all -// ports dialers in parallel, and returns the first -// encountered error. -// See waitTCPPort also. -func waitTCPPorts(ctx context.Context, ports ...string) error { - var err error - // mu locks err variable that is assigned in - // other goroutines - var mu sync.Mutex - - // cancel is canceling all goroutines - // when the firs error is returned - // to prevent unnecessary waiting - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - var wg sync.WaitGroup - for _, port := range ports { - wg.Add(1) - go func(port string) { - defer wg.Done() - - e := waitTCPPort(ctx, port) - - mu.Lock() - defer mu.Unlock() - if e != nil && err == nil { - err = e - cancel() - } - }(port) - } - wg.Wait() - - return err -} - -// waitTCPPort blocks until tcp connection can be established -// ona provided port. It has a 3 minute timeout as maximum, -// to prevent long waiting, but it can be shortened with -// a provided context instance. Dialer has a 10 second timeout -// in every iteration, and connection refused error will be -// retried in 100 milliseconds periods. -func waitTCPPort(ctx context.Context, port string) error { - ctx, cancel := context.WithTimeout(ctx, 3*time.Minute) - defer cancel() - - for { - c, err := (&net.Dialer{Timeout: 10 * time.Second}).DialContext(ctx, "tcp", "127.0.0.1:"+port) - if err != nil { - if operr, ok := err.(*net.OpError); ok { - if syserr, ok := operr.Err.(*os.SyscallError); ok && syserr.Err == syscall.ECONNREFUSED { - time.Sleep(100 * time.Millisecond) - continue - } - } - return err - } - return c.Close() - } -} diff --git a/cmd/swarm/swarm-smoke/feed_upload_and_sync.go b/cmd/swarm/swarm-smoke/feed_upload_and_sync.go deleted file mode 100644 index 6b3fed0c7e03..000000000000 --- a/cmd/swarm/swarm-smoke/feed_upload_and_sync.go +++ /dev/null @@ -1,291 +0,0 @@ -package main - -import ( - "bytes" - "crypto/md5" - "fmt" - "io" - "io/ioutil" - "os" - "os/exec" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/ethereum/go-ethereum/swarm/testutil" - "github.com/pborman/uuid" - cli "gopkg.in/urfave/cli.v1" -) - -const ( - feedRandomDataLength = 8 -) - -func feedUploadAndSyncCmd(ctx *cli.Context, tuid string) error { - errc := make(chan error) - - go func() { - errc <- feedUploadAndSync(ctx, tuid) - }() - - select { - case err := <-errc: - if err != nil { - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.fail", commandName), nil).Inc(1) - } - return err - case <-time.After(time.Duration(timeout) * time.Second): - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1) - - return fmt.Errorf("timeout after %v sec", timeout) - } -} - -func feedUploadAndSync(c *cli.Context, tuid string) error { - log.Info("generating and uploading feeds to " + httpEndpoint(hosts[0]) + " and syncing") - - // create a random private key to sign updates with and derive the address - pkFile, err := ioutil.TempFile("", "swarm-feed-smoke-test") - if err != nil { - return err - } - defer pkFile.Close() - defer os.Remove(pkFile.Name()) - - privkeyHex := "0000000000000000000000000000000000000000000000000000000000001976" - privKey, err := crypto.HexToECDSA(privkeyHex) - if err != nil { - return err - } - user := crypto.PubkeyToAddress(privKey.PublicKey) - userHex := hexutil.Encode(user.Bytes()) - - // save the private key to a file - _, err = io.WriteString(pkFile, privkeyHex) - if err != nil { - return err - } - - // keep hex strings for topic and subtopic - var topicHex string - var subTopicHex string - - // and create combination hex topics for bzz-feed retrieval - // xor'ed with topic (zero-value topic if no topic) - var subTopicOnlyHex string - var mergedSubTopicHex string - - // generate random topic and subtopic and put a hex on them - topicBytes, err := generateRandomData(feed.TopicLength) - topicHex = hexutil.Encode(topicBytes) - subTopicBytes, err := generateRandomData(8) - subTopicHex = hexutil.Encode(subTopicBytes) - if err != nil { - return err - } - mergedSubTopic, err := feed.NewTopic(subTopicHex, topicBytes) - if err != nil { - return err - } - mergedSubTopicHex = hexutil.Encode(mergedSubTopic[:]) - subTopicOnlyBytes, err := feed.NewTopic(subTopicHex, nil) - if err != nil { - return err - } - subTopicOnlyHex = hexutil.Encode(subTopicOnlyBytes[:]) - - // create feed manifest, topic only - var out bytes.Buffer - cmd := exec.Command("swarm", "--bzzapi", httpEndpoint(hosts[0]), "feed", "create", "--topic", topicHex, "--user", userHex) - cmd.Stdout = &out - log.Debug("create feed manifest topic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - return err - } - manifestWithTopic := strings.TrimRight(out.String(), string([]byte{0x0a})) - if len(manifestWithTopic) != 64 { - return fmt.Errorf("unknown feed create manifest hash format (topic): (%d) %s", len(out.String()), manifestWithTopic) - } - log.Debug("create topic feed", "manifest", manifestWithTopic) - out.Reset() - - // create feed manifest, subtopic only - cmd = exec.Command("swarm", "--bzzapi", httpEndpoint(hosts[0]), "feed", "create", "--name", subTopicHex, "--user", userHex) - cmd.Stdout = &out - log.Debug("create feed manifest subtopic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - return err - } - manifestWithSubTopic := strings.TrimRight(out.String(), string([]byte{0x0a})) - if len(manifestWithSubTopic) != 64 { - return fmt.Errorf("unknown feed create manifest hash format (subtopic): (%d) %s", len(out.String()), manifestWithSubTopic) - } - log.Debug("create subtopic feed", "manifest", manifestWithTopic) - out.Reset() - - // create feed manifest, merged topic - cmd = exec.Command("swarm", "--bzzapi", httpEndpoint(hosts[0]), "feed", "create", "--topic", topicHex, "--name", subTopicHex, "--user", userHex) - cmd.Stdout = &out - log.Debug("create feed manifest mergetopic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - log.Error(err.Error()) - return err - } - manifestWithMergedTopic := strings.TrimRight(out.String(), string([]byte{0x0a})) - if len(manifestWithMergedTopic) != 64 { - return fmt.Errorf("unknown feed create manifest hash format (mergedtopic): (%d) %s", len(out.String()), manifestWithMergedTopic) - } - log.Debug("create mergedtopic feed", "manifest", manifestWithMergedTopic) - out.Reset() - - // create test data - data, err := generateRandomData(feedRandomDataLength) - if err != nil { - return err - } - h := md5.New() - h.Write(data) - dataHash := h.Sum(nil) - dataHex := hexutil.Encode(data) - - // update with topic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--topic", topicHex, dataHex) - cmd.Stdout = &out - log.Debug("update feed manifest topic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update topic", "out", out) - out.Reset() - - // update with subtopic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--name", subTopicHex, dataHex) - cmd.Stdout = &out - log.Debug("update feed manifest subtopic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update subtopic", "out", out) - out.Reset() - - // update with merged topic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--topic", topicHex, "--name", subTopicHex, dataHex) - cmd.Stdout = &out - log.Debug("update feed manifest merged topic cmd", "cmd", cmd) - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update mergedtopic", "out", out) - out.Reset() - - time.Sleep(3 * time.Second) - - // retrieve the data - wg := sync.WaitGroup{} - for _, host := range hosts { - // raw retrieve, topic only - for _, hex := range []string{topicHex, subTopicOnlyHex, mergedSubTopicHex} { - wg.Add(1) - ruid := uuid.New()[:8] - go func(hex string, endpoint string, ruid string) { - for { - err := fetchFeed(hex, userHex, httpEndpoint(host), dataHash, ruid) - if err != nil { - continue - } - - wg.Done() - return - } - }(hex, httpEndpoint(host), ruid) - } - } - wg.Wait() - log.Info("all endpoints synced random data successfully") - - // upload test file - log.Info("feed uploading to "+httpEndpoint(hosts[0])+" and syncing", "seed", seed) - - randomBytes := testutil.RandomBytes(seed, filesize*1000) - - hash, err := upload(randomBytes, httpEndpoint(hosts[0])) - if err != nil { - return err - } - hashBytes, err := hexutil.Decode("0x" + hash) - if err != nil { - return err - } - multihashHex := hexutil.Encode(hashBytes) - fileHash := h.Sum(nil) - - log.Info("uploaded successfully", "hash", hash, "digest", fmt.Sprintf("%x", fileHash)) - - // update file with topic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--topic", topicHex, multihashHex) - cmd.Stdout = &out - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update topic", "out", out) - out.Reset() - - // update file with subtopic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--name", subTopicHex, multihashHex) - cmd.Stdout = &out - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update subtopic", "out", out) - out.Reset() - - // update file with merged topic - cmd = exec.Command("swarm", "--bzzaccount", pkFile.Name(), "--bzzapi", httpEndpoint(hosts[0]), "feed", "update", "--topic", topicHex, "--name", subTopicHex, multihashHex) - cmd.Stdout = &out - err = cmd.Run() - if err != nil { - return err - } - log.Debug("feed update mergedtopic", "out", out) - out.Reset() - - time.Sleep(3 * time.Second) - - for _, host := range hosts { - - // manifest retrieve, topic only - for _, url := range []string{manifestWithTopic, manifestWithSubTopic, manifestWithMergedTopic} { - wg.Add(1) - ruid := uuid.New()[:8] - go func(url string, endpoint string, ruid string) { - for { - err := fetch(url, endpoint, fileHash, ruid, "") - if err != nil { - continue - } - - wg.Done() - return - } - }(url, httpEndpoint(host), ruid) - } - - } - wg.Wait() - log.Info("all endpoints synced random file successfully") - - return nil -} diff --git a/cmd/swarm/swarm-smoke/main.go b/cmd/swarm/swarm-smoke/main.go deleted file mode 100644 index 43d2c1ff51df..000000000000 --- a/cmd/swarm/swarm-smoke/main.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "fmt" - "os" - "sort" - - "github.com/ethereum/go-ethereum/cmd/utils" - gethmetrics "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/metrics/influxdb" - swarmmetrics "github.com/ethereum/go-ethereum/swarm/metrics" - "github.com/ethereum/go-ethereum/swarm/tracing" - - "github.com/ethereum/go-ethereum/log" - - cli "gopkg.in/urfave/cli.v1" -) - -var ( - gitCommit string // Git SHA1 commit hash of the release (set via linker flags) -) - -var ( - allhosts string - hosts []string - filesize int - syncDelay int - httpPort int - wsPort int - verbosity int - timeout int - single bool - trackTimeout int -) - -func main() { - - app := cli.NewApp() - app.Name = "smoke-test" - app.Usage = "" - - app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "hosts", - Value: "", - Usage: "comma-separated list of swarm hosts", - Destination: &allhosts, - }, - cli.IntFlag{ - Name: "http-port", - Value: 80, - Usage: "http port", - Destination: &httpPort, - }, - cli.IntFlag{ - Name: "ws-port", - Value: 8546, - Usage: "ws port", - Destination: &wsPort, - }, - cli.IntFlag{ - Name: "filesize", - Value: 1024, - Usage: "file size for generated random file in KB", - Destination: &filesize, - }, - cli.IntFlag{ - Name: "sync-delay", - Value: 5, - Usage: "duration of delay in seconds to wait for content to be synced", - Destination: &syncDelay, - }, - cli.IntFlag{ - Name: "verbosity", - Value: 1, - Usage: "verbosity", - Destination: &verbosity, - }, - cli.IntFlag{ - Name: "timeout", - Value: 120, - Usage: "timeout in seconds after which kill the process", - Destination: &timeout, - }, - cli.BoolFlag{ - Name: "single", - Usage: "whether to fetch content from a single node or from all nodes", - Destination: &single, - }, - cli.IntFlag{ - Name: "track-timeout", - Value: 5, - Usage: "timeout in seconds to wait for GetAllReferences to return", - Destination: &trackTimeout, - }, - } - - app.Flags = append(app.Flags, []cli.Flag{ - utils.MetricsEnabledFlag, - swarmmetrics.MetricsInfluxDBEndpointFlag, - swarmmetrics.MetricsInfluxDBDatabaseFlag, - swarmmetrics.MetricsInfluxDBUsernameFlag, - swarmmetrics.MetricsInfluxDBPasswordFlag, - swarmmetrics.MetricsInfluxDBTagsFlag, - }...) - - app.Flags = append(app.Flags, tracing.Flags...) - - app.Commands = []cli.Command{ - { - Name: "upload_and_sync", - Aliases: []string{"c"}, - Usage: "upload and sync", - Action: wrapCliCommand("upload-and-sync", uploadAndSyncCmd), - }, - { - Name: "feed_sync", - Aliases: []string{"f"}, - Usage: "feed update generate, upload and sync", - Action: wrapCliCommand("feed-and-sync", feedUploadAndSyncCmd), - }, - { - Name: "upload_speed", - Aliases: []string{"u"}, - Usage: "measure upload speed", - Action: wrapCliCommand("upload-speed", uploadSpeedCmd), - }, - { - Name: "sliding_window", - Aliases: []string{"s"}, - Usage: "measure network aggregate capacity", - Action: wrapCliCommand("sliding-window", slidingWindowCmd), - }, - } - - sort.Sort(cli.FlagsByName(app.Flags)) - sort.Sort(cli.CommandsByName(app.Commands)) - - app.Before = func(ctx *cli.Context) error { - tracing.Setup(ctx) - return nil - } - - app.After = func(ctx *cli.Context) error { - return emitMetrics(ctx) - } - - err := app.Run(os.Args) - if err != nil { - log.Error(err.Error()) - - os.Exit(1) - } -} - -func emitMetrics(ctx *cli.Context) error { - if gethmetrics.Enabled { - var ( - endpoint = ctx.GlobalString(swarmmetrics.MetricsInfluxDBEndpointFlag.Name) - database = ctx.GlobalString(swarmmetrics.MetricsInfluxDBDatabaseFlag.Name) - username = ctx.GlobalString(swarmmetrics.MetricsInfluxDBUsernameFlag.Name) - password = ctx.GlobalString(swarmmetrics.MetricsInfluxDBPasswordFlag.Name) - tags = ctx.GlobalString(swarmmetrics.MetricsInfluxDBTagsFlag.Name) - ) - - tagsMap := utils.SplitTagsFlag(tags) - tagsMap["version"] = gitCommit - tagsMap["filesize"] = fmt.Sprintf("%v", filesize) - - return influxdb.InfluxDBWithTagsOnce(gethmetrics.DefaultRegistry, endpoint, database, username, password, "swarm-smoke.", tagsMap) - } - - return nil -} diff --git a/cmd/swarm/swarm-smoke/upload_and_sync.go b/cmd/swarm/swarm-smoke/upload_and_sync.go deleted file mode 100644 index 90230df253cf..000000000000 --- a/cmd/swarm/swarm-smoke/upload_and_sync.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "context" - "fmt" - "io/ioutil" - "math/rand" - "os" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/testutil" - "github.com/pborman/uuid" - - cli "gopkg.in/urfave/cli.v1" -) - -func uploadAndSyncCmd(ctx *cli.Context, tuid string) error { - randomBytes := testutil.RandomBytes(seed, filesize*1000) - - errc := make(chan error) - - go func() { - errc <- uplaodAndSync(ctx, randomBytes, tuid) - }() - - select { - case err := <-errc: - if err != nil { - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.fail", commandName), nil).Inc(1) - } - return err - case <-time.After(time.Duration(timeout) * time.Second): - metrics.GetOrRegisterCounter(fmt.Sprintf("%s.timeout", commandName), nil).Inc(1) - - e := fmt.Errorf("timeout after %v sec", timeout) - // trigger debug functionality on randomBytes - err := trackChunks(randomBytes[:]) - if err != nil { - e = fmt.Errorf("%v; triggerChunkDebug failed: %v", e, err) - } - - return e - } -} - -func trackChunks(testData []byte) error { - log.Warn("Test timed out; running chunk debug sequence") - - addrs, err := getAllRefs(testData) - if err != nil { - return err - } - log.Trace("All references retrieved") - - // has-chunks - for _, host := range hosts { - httpHost := fmt.Sprintf("ws://%s:%d", host, 8546) - log.Trace("Calling `Has` on host", "httpHost", httpHost) - rpcClient, err := rpc.Dial(httpHost) - if err != nil { - log.Trace("Error dialing host", "err", err) - return err - } - log.Trace("rpc dial ok") - var hasInfo []api.HasInfo - err = rpcClient.Call(&hasInfo, "bzz_has", addrs) - if err != nil { - log.Trace("Error calling host", "err", err) - return err - } - log.Trace("rpc call ok") - count := 0 - for _, info := range hasInfo { - if !info.Has { - count++ - log.Error("Host does not have chunk", "host", httpHost, "chunk", info.Addr) - } - } - if count == 0 { - log.Info("Host reported to have all chunks", "host", httpHost) - } - } - return nil -} - -func getAllRefs(testData []byte) (storage.AddressCollection, error) { - log.Trace("Getting all references for given root hash") - datadir, err := ioutil.TempDir("", "chunk-debug") - if err != nil { - return nil, fmt.Errorf("unable to create temp dir: %v", err) - } - defer os.RemoveAll(datadir) - fileStore, err := storage.NewLocalFileStore(datadir, make([]byte, 32)) - if err != nil { - return nil, err - } - ctx, cancel := context.WithTimeout(context.Background(), time.Duration(trackTimeout)*time.Second) - defer cancel() - - reader := bytes.NewReader(testData) - return fileStore.GetAllReferences(ctx, reader, false) -} - -func uplaodAndSync(c *cli.Context, randomBytes []byte, tuid string) error { - log.Info("uploading to "+httpEndpoint(hosts[0])+" and syncing", "tuid", tuid, "seed", seed) - - t1 := time.Now() - hash, err := upload(randomBytes, httpEndpoint(hosts[0])) - if err != nil { - log.Error(err.Error()) - return err - } - t2 := time.Since(t1) - metrics.GetOrRegisterResettingTimer("upload-and-sync.upload-time", nil).Update(t2) - - fhash, err := digest(bytes.NewReader(randomBytes)) - if err != nil { - log.Error(err.Error()) - return err - } - - log.Info("uploaded successfully", "tuid", tuid, "hash", hash, "took", t2, "digest", fmt.Sprintf("%x", fhash)) - - time.Sleep(time.Duration(syncDelay) * time.Second) - - wg := sync.WaitGroup{} - if single { - randIndex := 1 + rand.Intn(len(hosts)-1) - ruid := uuid.New()[:8] - wg.Add(1) - go func(endpoint string, ruid string) { - for { - start := time.Now() - err := fetch(hash, endpoint, fhash, ruid, tuid) - if err != nil { - continue - } - ended := time.Since(start) - - metrics.GetOrRegisterResettingTimer("upload-and-sync.single.fetch-time", nil).Update(ended) - log.Info("fetch successful", "tuid", tuid, "ruid", ruid, "took", ended, "endpoint", endpoint) - wg.Done() - return - } - }(httpEndpoint(hosts[randIndex]), ruid) - } else { - for _, endpoint := range hosts[1:] { - ruid := uuid.New()[:8] - wg.Add(1) - go func(endpoint string, ruid string) { - for { - start := time.Now() - err := fetch(hash, endpoint, fhash, ruid, tuid) - if err != nil { - continue - } - ended := time.Since(start) - - metrics.GetOrRegisterResettingTimer("upload-and-sync.each.fetch-time", nil).Update(ended) - log.Info("fetch successful", "tuid", tuid, "ruid", ruid, "took", ended, "endpoint", endpoint) - wg.Done() - return - } - }(httpEndpoint(endpoint), ruid) - } - } - wg.Wait() - log.Info("all hosts synced random file successfully") - - return nil -} diff --git a/cmd/swarm/upload.go b/cmd/swarm/upload.go deleted file mode 100644 index 992f2d6e976f..000000000000 --- a/cmd/swarm/upload.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -// Command bzzup uploads files to the swarm HTTP API. -package main - -import ( - "errors" - "fmt" - "io" - "io/ioutil" - "os" - "os/user" - "path" - "path/filepath" - "strconv" - "strings" - - "github.com/ethereum/go-ethereum/log" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - - "github.com/ethereum/go-ethereum/cmd/utils" - "gopkg.in/urfave/cli.v1" -) - -var upCommand = cli.Command{ - Action: upload, - CustomHelpTemplate: helpTemplate, - Name: "up", - Usage: "uploads a file or directory to swarm using the HTTP API", - ArgsUsage: "", - Flags: []cli.Flag{SwarmEncryptedFlag}, - Description: "uploads a file or directory to swarm using the HTTP API and prints the root hash", -} - -func upload(ctx *cli.Context) { - args := ctx.Args() - var ( - bzzapi = strings.TrimRight(ctx.GlobalString(SwarmApiFlag.Name), "/") - recursive = ctx.GlobalBool(SwarmRecursiveFlag.Name) - wantManifest = ctx.GlobalBoolT(SwarmWantManifestFlag.Name) - defaultPath = ctx.GlobalString(SwarmUploadDefaultPath.Name) - fromStdin = ctx.GlobalBool(SwarmUpFromStdinFlag.Name) - mimeType = ctx.GlobalString(SwarmUploadMimeType.Name) - client = swarm.NewClient(bzzapi) - toEncrypt = ctx.Bool(SwarmEncryptedFlag.Name) - autoDefaultPath = false - file string - ) - if autoDefaultPathString := os.Getenv(SWARM_AUTO_DEFAULTPATH); autoDefaultPathString != "" { - b, err := strconv.ParseBool(autoDefaultPathString) - if err != nil { - utils.Fatalf("invalid environment variable %s: %v", SWARM_AUTO_DEFAULTPATH, err) - } - autoDefaultPath = b - } - if len(args) != 1 { - if fromStdin { - tmp, err := ioutil.TempFile("", "swarm-stdin") - if err != nil { - utils.Fatalf("error create tempfile: %s", err) - } - defer os.Remove(tmp.Name()) - n, err := io.Copy(tmp, os.Stdin) - if err != nil { - utils.Fatalf("error copying stdin to tempfile: %s", err) - } else if n == 0 { - utils.Fatalf("error reading from stdin: zero length") - } - file = tmp.Name() - } else { - utils.Fatalf("Need filename as the first and only argument") - } - } else { - file = expandPath(args[0]) - } - - if !wantManifest { - f, err := swarm.Open(file) - if err != nil { - utils.Fatalf("Error opening file: %s", err) - } - defer f.Close() - hash, err := client.UploadRaw(f, f.Size, toEncrypt) - if err != nil { - utils.Fatalf("Upload failed: %s", err) - } - fmt.Println(hash) - return - } - - stat, err := os.Stat(file) - if err != nil { - utils.Fatalf("Error opening file: %s", err) - } - - // define a function which either uploads a directory or single file - // based on the type of the file being uploaded - var doUpload func() (hash string, err error) - if stat.IsDir() { - doUpload = func() (string, error) { - if !recursive { - return "", errors.New("Argument is a directory and recursive upload is disabled") - } - if autoDefaultPath && defaultPath == "" { - defaultEntryCandidate := path.Join(file, "index.html") - log.Debug("trying to find default path", "path", defaultEntryCandidate) - defaultEntryStat, err := os.Stat(defaultEntryCandidate) - if err == nil && !defaultEntryStat.IsDir() { - log.Debug("setting auto detected default path", "path", defaultEntryCandidate) - defaultPath = defaultEntryCandidate - } - } - if defaultPath != "" { - // construct absolute default path - absDefaultPath, _ := filepath.Abs(defaultPath) - absFile, _ := filepath.Abs(file) - // make sure absolute directory ends with only one "/" - // to trim it from absolute default path and get relative default path - absFile = strings.TrimRight(absFile, "/") + "/" - if absDefaultPath != "" && absFile != "" && strings.HasPrefix(absDefaultPath, absFile) { - defaultPath = strings.TrimPrefix(absDefaultPath, absFile) - } - } - return client.UploadDirectory(file, defaultPath, "", toEncrypt) - } - } else { - doUpload = func() (string, error) { - f, err := swarm.Open(file) - if err != nil { - return "", fmt.Errorf("error opening file: %s", err) - } - defer f.Close() - if mimeType != "" { - f.ContentType = mimeType - } - return client.Upload(f, "", toEncrypt) - } - } - hash, err := doUpload() - if err != nil { - utils.Fatalf("Upload failed: %s", err) - } - fmt.Println(hash) -} - -// Expands a file path -// 1. replace tilde with users home dir -// 2. expands embedded environment variables -// 3. cleans the path, e.g. /a/b/../c -> /a/c -// Note, it has limitations, e.g. ~someuser/tmp will not be expanded -func expandPath(p string) string { - if i := strings.Index(p, ":"); i > 0 { - return p - } - if i := strings.Index(p, "@"); i > 0 { - return p - } - if strings.HasPrefix(p, "~/") || strings.HasPrefix(p, "~\\") { - if home := homeDir(); home != "" { - p = home + p[1:] - } - } - return path.Clean(os.ExpandEnv(p)) -} - -func homeDir() string { - if home := os.Getenv("HOME"); home != "" { - return home - } - if usr, err := user.Current(); err == nil { - return usr.HomeDir - } - return "" -} diff --git a/cmd/swarm/upload_test.go b/cmd/swarm/upload_test.go deleted file mode 100644 index 616486e37c8f..000000000000 --- a/cmd/swarm/upload_test.go +++ /dev/null @@ -1,356 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package main - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "path" - "path/filepath" - "runtime" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - swarmapi "github.com/ethereum/go-ethereum/swarm/api/client" - "github.com/ethereum/go-ethereum/swarm/testutil" - "github.com/mattn/go-colorable" -) - -func init() { - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -func TestSwarmUp(t *testing.T) { - if runtime.GOOS == "windows" { - t.Skip() - } - - initCluster(t) - - cases := []struct { - name string - f func(t *testing.T) - }{ - {"NoEncryption", testNoEncryption}, - {"Encrypted", testEncrypted}, - {"RecursiveNoEncryption", testRecursiveNoEncryption}, - {"RecursiveEncrypted", testRecursiveEncrypted}, - {"DefaultPathAll", testDefaultPathAll}, - } - - for _, tc := range cases { - t.Run(tc.name, tc.f) - } -} - -// testNoEncryption tests that running 'swarm up' makes the resulting file -// available from all nodes via the HTTP API -func testNoEncryption(t *testing.T) { - testDefault(false, t) -} - -// testEncrypted tests that running 'swarm up --encrypted' makes the resulting file -// available from all nodes via the HTTP API -func testEncrypted(t *testing.T) { - testDefault(true, t) -} - -func testRecursiveNoEncryption(t *testing.T) { - testRecursive(false, t) -} - -func testRecursiveEncrypted(t *testing.T) { - testRecursive(true, t) -} - -func testDefault(toEncrypt bool, t *testing.T) { - tmpFileName := testutil.TempFileWithContent(t, data) - defer os.Remove(tmpFileName) - - // write data to file - hashRegexp := `[a-f\d]{64}` - flags := []string{ - "--bzzapi", cluster.Nodes[0].URL, - "up", - tmpFileName} - if toEncrypt { - hashRegexp = `[a-f\d]{128}` - flags = []string{ - "--bzzapi", cluster.Nodes[0].URL, - "up", - "--encrypt", - tmpFileName} - } - // upload the file with 'swarm up' and expect a hash - log.Info(fmt.Sprintf("uploading file with 'swarm up'")) - up := runSwarm(t, flags...) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - hash := matches[0] - log.Info("file uploaded", "hash", hash) - - // get the file from the HTTP API of each node - for _, node := range cluster.Nodes { - log.Info("getting file from node", "node", node.Name) - - res, err := http.Get(node.URL + "/bzz:/" + hash) - if err != nil { - t.Fatal(err) - } - defer res.Body.Close() - - reply, err := ioutil.ReadAll(res.Body) - if err != nil { - t.Fatal(err) - } - if res.StatusCode != 200 { - t.Fatalf("expected HTTP status 200, got %s", res.Status) - } - if string(reply) != data { - t.Fatalf("expected HTTP body %q, got %q", data, reply) - } - log.Debug("verifying uploaded file using `swarm down`") - //try to get the content with `swarm down` - tmpDownload, err := ioutil.TempDir("", "swarm-test") - tmpDownload = path.Join(tmpDownload, "tmpfile.tmp") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmpDownload) - - bzzLocator := "bzz:/" + hash - flags = []string{ - "--bzzapi", cluster.Nodes[0].URL, - "down", - bzzLocator, - tmpDownload, - } - - down := runSwarm(t, flags...) - down.ExpectExit() - - fi, err := os.Stat(tmpDownload) - if err != nil { - t.Fatalf("could not stat path: %v", err) - } - - switch mode := fi.Mode(); { - case mode.IsRegular(): - downloadedBytes, err := ioutil.ReadFile(tmpDownload) - if err != nil { - t.Fatalf("had an error reading the downloaded file: %v", err) - } - if !bytes.Equal(downloadedBytes, bytes.NewBufferString(data).Bytes()) { - t.Fatalf("retrieved data and posted data not equal!") - } - - default: - t.Fatalf("expected to download regular file, got %s", fi.Mode()) - } - } - - timeout := time.Duration(2 * time.Second) - httpClient := http.Client{ - Timeout: timeout, - } - - // try to squeeze a timeout by getting an non-existent hash from each node - for _, node := range cluster.Nodes { - _, err := httpClient.Get(node.URL + "/bzz:/1023e8bae0f70be7d7b5f74343088ba408a218254391490c85ae16278e230340") - // we're speeding up the timeout here since netstore has a 60 seconds timeout on a request - if err != nil && !strings.Contains(err.Error(), "Client.Timeout exceeded while awaiting headers") { - t.Fatal(err) - } - // this is disabled since it takes 60s due to netstore timeout - // if res.StatusCode != 404 { - // t.Fatalf("expected HTTP status 404, got %s", res.Status) - // } - } -} - -func testRecursive(toEncrypt bool, t *testing.T) { - tmpUploadDir, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmpUploadDir) - // create tmp files - for _, path := range []string{"tmp1", "tmp2"} { - if err := ioutil.WriteFile(filepath.Join(tmpUploadDir, path), bytes.NewBufferString(data).Bytes(), 0644); err != nil { - t.Fatal(err) - } - } - - hashRegexp := `[a-f\d]{64}` - flags := []string{ - "--bzzapi", cluster.Nodes[0].URL, - "--recursive", - "up", - tmpUploadDir} - if toEncrypt { - hashRegexp = `[a-f\d]{128}` - flags = []string{ - "--bzzapi", cluster.Nodes[0].URL, - "--recursive", - "up", - "--encrypt", - tmpUploadDir} - } - // upload the file with 'swarm up' and expect a hash - log.Info(fmt.Sprintf("uploading file with 'swarm up'")) - up := runSwarm(t, flags...) - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - hash := matches[0] - log.Info("dir uploaded", "hash", hash) - - // get the file from the HTTP API of each node - for _, node := range cluster.Nodes { - log.Info("getting file from node", "node", node.Name) - //try to get the content with `swarm down` - tmpDownload, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmpDownload) - bzzLocator := "bzz:/" + hash - flagss := []string{ - "--bzzapi", cluster.Nodes[0].URL, - "down", - "--recursive", - bzzLocator, - tmpDownload, - } - - fmt.Println("downloading from swarm with recursive") - down := runSwarm(t, flagss...) - down.ExpectExit() - - files, err := ioutil.ReadDir(tmpDownload) - for _, v := range files { - fi, err := os.Stat(path.Join(tmpDownload, v.Name())) - if err != nil { - t.Fatalf("got an error: %v", err) - } - - switch mode := fi.Mode(); { - case mode.IsRegular(): - if file, err := swarmapi.Open(path.Join(tmpDownload, v.Name())); err != nil { - t.Fatalf("encountered an error opening the file returned from the CLI: %v", err) - } else { - ff := make([]byte, len(data)) - io.ReadFull(file, ff) - buf := bytes.NewBufferString(data) - - if !bytes.Equal(ff, buf.Bytes()) { - t.Fatalf("retrieved data and posted data not equal!") - } - } - default: - t.Fatalf("this shouldnt happen") - } - } - if err != nil { - t.Fatalf("could not list files at: %v", files) - } - } -} - -// testDefaultPathAll tests swarm recursive upload with relative and absolute -// default paths and with encryption. -func testDefaultPathAll(t *testing.T) { - testDefaultPath(false, false, t) - testDefaultPath(false, true, t) - testDefaultPath(true, false, t) - testDefaultPath(true, true, t) -} - -func testDefaultPath(toEncrypt bool, absDefaultPath bool, t *testing.T) { - tmp, err := ioutil.TempDir("", "swarm-defaultpath-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmp) - - err = ioutil.WriteFile(filepath.Join(tmp, "index.html"), []byte("

Test

"), 0666) - if err != nil { - t.Fatal(err) - } - err = ioutil.WriteFile(filepath.Join(tmp, "robots.txt"), []byte("Disallow: /"), 0666) - if err != nil { - t.Fatal(err) - } - - defaultPath := "index.html" - if absDefaultPath { - defaultPath = filepath.Join(tmp, defaultPath) - } - - args := []string{ - "--bzzapi", - cluster.Nodes[0].URL, - "--recursive", - "--defaultpath", - defaultPath, - "up", - tmp, - } - if toEncrypt { - args = append(args, "--encrypt") - } - - up := runSwarm(t, args...) - hashRegexp := `[a-f\d]{64,128}` - _, matches := up.ExpectRegexp(hashRegexp) - up.ExpectExit() - hash := matches[0] - - client := swarmapi.NewClient(cluster.Nodes[0].URL) - - m, isEncrypted, err := client.DownloadManifest(hash) - if err != nil { - t.Fatal(err) - } - - if toEncrypt != isEncrypted { - t.Error("downloaded manifest is not encrypted") - } - - var found bool - var entriesCount int - for _, e := range m.Entries { - entriesCount++ - if e.Path == "" { - found = true - } - } - - if !found { - t.Error("manifest default entry was not found") - } - - if entriesCount != 3 { - t.Errorf("manifest contains %v entries, expected %v", entriesCount, 3) - } -} diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index f23aa5775b4e..a3ee45ba7f06 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -238,7 +238,7 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las } // ImportPreimages imports a batch of exported hash preimages into the database. -func ImportPreimages(db *ethdb.LDBDatabase, fn string) error { +func ImportPreimages(db ethdb.Database, fn string) error { log.Info("Importing preimages", "file", fn) // Open the file handle and potentially unwrap the gzip stream @@ -285,7 +285,7 @@ func ImportPreimages(db *ethdb.LDBDatabase, fn string) error { // ExportPreimages exports all known hash preimages into the specified file, // truncating any data already present in the file. -func ExportPreimages(db *ethdb.LDBDatabase, fn string) error { +func ExportPreimages(db ethdb.Database, fn string) error { log.Info("Exporting preimages", "file", fn) // Open the file handle and potentially wrap with a gzip stream @@ -302,6 +302,8 @@ func ExportPreimages(db *ethdb.LDBDatabase, fn string) error { } // Iterate over the preimages and export them it := db.NewIteratorWithPrefix([]byte("secure-key-")) + defer it.Release() + for it.Next() { if err := rlp.Encode(writer, it.Value()); err != nil { return err diff --git a/cmd/utils/customflags.go b/cmd/utils/customflags.go index e5bf8724c17a..66ebf9ab0467 100644 --- a/cmd/utils/customflags.go +++ b/cmd/utils/customflags.go @@ -20,7 +20,6 @@ import ( "encoding" "errors" "flag" - "fmt" "math/big" "os" "os/user" @@ -34,33 +33,44 @@ import ( // Custom type which is registered in the flags library which cli uses for // argument parsing. This allows us to expand Value to an absolute path when // the argument is parsed -type DirectoryString struct { - Value string -} +type DirectoryString string -func (self *DirectoryString) String() string { - return self.Value +func (s *DirectoryString) String() string { + return string(*s) } -func (self *DirectoryString) Set(value string) error { - self.Value = expandPath(value) +func (s *DirectoryString) Set(value string) error { + *s = DirectoryString(expandPath(value)) return nil } // Custom cli.Flag type which expand the received string to an absolute path. // e.g. ~/.ethereum -> /home/username/.ethereum type DirectoryFlag struct { - Name string - Value DirectoryString - Usage string + Name string + Value DirectoryString + Usage string + EnvVar string } -func (self DirectoryFlag) String() string { - fmtString := "%s %v\t%v" - if len(self.Value.Value) > 0 { - fmtString = "%s \"%v\"\t%v" - } - return fmt.Sprintf(fmtString, prefixedNames(self.Name), self.Value.Value, self.Usage) +func (f DirectoryFlag) String() string { + return cli.FlagStringer(f) +} + +// called by cli library, grabs variable from environment (if in env) +// and adds variable to flag set for parsing. +func (f DirectoryFlag) Apply(set *flag.FlagSet) { + eachName(f.Name, func(name string) { + set.Var(&f.Value, f.Name, f.Usage) + }) +} + +func (f DirectoryFlag) GetName() string { + return f.Name +} + +func (f *DirectoryFlag) Set(value string) { + f.Value.Set(value) } func eachName(longName string, fn func(string)) { @@ -71,14 +81,6 @@ func eachName(longName string, fn func(string)) { } } -// called by cli library, grabs variable from environment (if in env) -// and adds variable to flag set for parsing. -func (self DirectoryFlag) Apply(set *flag.FlagSet) { - eachName(self.Name, func(name string) { - set.Var(&self.Value, self.Name, self.Usage) - }) -} - type TextMarshaler interface { encoding.TextMarshaler encoding.TextUnmarshaler @@ -103,9 +105,10 @@ func (v textMarshalerVal) Set(s string) error { // TextMarshalerFlag wraps a TextMarshaler value. type TextMarshalerFlag struct { - Name string - Value TextMarshaler - Usage string + Name string + Value TextMarshaler + Usage string + EnvVar string } func (f TextMarshalerFlag) GetName() string { @@ -113,7 +116,7 @@ func (f TextMarshalerFlag) GetName() string { } func (f TextMarshalerFlag) String() string { - return fmt.Sprintf("%s \"%v\"\t%v", prefixedNames(f.Name), f.Value, f.Usage) + return cli.FlagStringer(f) } func (f TextMarshalerFlag) Apply(set *flag.FlagSet) { @@ -134,9 +137,10 @@ func GlobalTextMarshaler(ctx *cli.Context, name string) TextMarshaler { // BigFlag is a command line flag that accepts 256 bit big integers in decimal or // hexadecimal syntax. type BigFlag struct { - Name string - Value *big.Int - Usage string + Name string + Value *big.Int + Usage string + EnvVar string } // bigValue turns *big.Int into a flag.Value @@ -163,11 +167,7 @@ func (f BigFlag) GetName() string { } func (f BigFlag) String() string { - fmtString := "%s %v\t%v" - if f.Value != nil { - fmtString = "%s \"%v\"\t%v" - } - return fmt.Sprintf(fmtString, prefixedNames(f.Name), f.Value, f.Usage) + return cli.FlagStringer(f) } func (f BigFlag) Apply(set *flag.FlagSet) { @@ -207,14 +207,6 @@ func prefixedNames(fullName string) (prefixed string) { return } -func (self DirectoryFlag) GetName() string { - return self.Name -} - -func (self *DirectoryFlag) Set(value string) { - self.Value.Value = value -} - // Expands a file path // 1. replace tilde with users home dir // 2. expands embedded environment variables diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 115ef8e97219..a1c45213fd82 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -19,13 +19,17 @@ package utils import ( "crypto/ecdsa" + "errors" "fmt" + "io" "io/ioutil" "math/big" "os" "path/filepath" "strconv" "strings" + "text/tabwriter" + "text/template" "time" "github.com/ethereum/go-ethereum/accounts" @@ -36,7 +40,6 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/dashboard" @@ -45,10 +48,12 @@ import ( "github.com/ethereum/go-ethereum/eth/gasprice" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethstats" + "github.com/ethereum/go-ethereum/graphql" "github.com/ethereum/go-ethereum/les" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/metrics/influxdb" + "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discv5" @@ -56,7 +61,9 @@ import ( "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/p2p/netutil" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rpc" whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" + pcsclite "github.com/gballet/go-libpcsclite" cli "gopkg.in/urfave/cli.v1" ) @@ -86,25 +93,32 @@ GLOBAL OPTIONS: {{range .Flags}}{{.}} {{end}}{{end}} ` - cli.CommandHelpTemplate = CommandHelpTemplate + cli.HelpPrinter = printHelp } // NewApp creates an app with sane defaults. -func NewApp(gitCommit, usage string) *cli.App { +func NewApp(gitCommit, gitDate, usage string) *cli.App { app := cli.NewApp() app.Name = filepath.Base(os.Args[0]) app.Author = "" - //app.Authors = nil app.Email = "" - app.Version = params.VersionWithMeta - if len(gitCommit) >= 8 { - app.Version += "-" + gitCommit[:8] - } + app.Version = params.VersionWithCommit(gitCommit, gitDate) app.Usage = usage return app } +func printHelp(out io.Writer, templ string, data interface{}) { + funcMap := template.FuncMap{"join": strings.Join} + t := template.Must(template.New("help").Funcs(funcMap).Parse(templ)) + w := tabwriter.NewWriter(out, 38, 8, 2, ' ', 0) + err := t.Execute(w, data) + if err != nil { + panic(err) + } + w.Flush() +} + // These are all the command line flags we support. // If you add to this list, please remember to include the // flag in the appropriate command definition. @@ -117,7 +131,11 @@ var ( DataDirFlag = DirectoryFlag{ Name: "datadir", Usage: "Data directory for the databases and keystore", - Value: DirectoryString{node.DefaultDataDir()}, + Value: DirectoryString(node.DefaultDataDir()), + } + AncientFlag = DirectoryFlag{ + Name: "datadir.ancient", + Usage: "Data directory for ancient chain segments (default = inside chaindata)", } KeyStoreDirFlag = DirectoryFlag{ Name: "keystore", @@ -127,6 +145,11 @@ var ( Name: "nousb", Usage: "Disables monitoring for and managing USB hardware wallets", } + SmartCardDaemonPathFlag = cli.StringFlag{ + Name: "pcscdpath", + Usage: "Path to the smartcard daemon (pcscd) socket file", + Value: pcsclite.PCSCDSockName, + } NetworkIdFlag = cli.Uint64Flag{ Name: "networkid", Usage: "Network identifier (integer, 1=Frontier, 2=Morden (disused), 3=Ropsten, 4=Rinkeby, 11=Metadium, 12=MetadiumTestnet)", @@ -144,10 +167,6 @@ var ( Name: "goerli", Usage: "Görli network: pre-configured proof-of-authority test network", } - ConstantinopleOverrideFlag = cli.Uint64Flag{ - Name: "override.constantinople", - Usage: "Manually specify constantinople fork-block, overriding the bundled setting", - } DeveloperFlag = cli.BoolFlag{ Name: "dev", Usage: "Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled", @@ -163,7 +182,27 @@ var ( DocRootFlag = DirectoryFlag{ Name: "docroot", Usage: "Document Root for HTTPClient file scheme", - Value: DirectoryString{homeDir()}, + Value: DirectoryString(homeDir()), + } + ExitWhenSyncedFlag = cli.BoolFlag{ + Name: "exitwhensynced", + Usage: "Exits after block synchronisation completes", + } + IterativeOutputFlag = cli.BoolFlag{ + Name: "iterative", + Usage: "Print streaming JSON iteratively, delimited by newlines", + } + ExcludeStorageFlag = cli.BoolFlag{ + Name: "nostorage", + Usage: "Exclude storage entries (save db lookups)", + } + IncludeIncompletesFlag = cli.BoolFlag{ + Name: "incompletes", + Usage: "Include accounts for which we don't have the address (missing preimage)", + } + ExcludeCodeFlag = cli.BoolFlag{ + Name: "nocode", + Usage: "Exclude contract code (save db lookups)", } defaultSyncMode = eth.DefaultConfig.SyncMode SyncModeFlag = TextMarshalerFlag{ @@ -176,16 +215,6 @@ var ( Usage: `Blockchain garbage collection mode ("full", "archive")`, Value: "full", } - LightServFlag = cli.IntFlag{ - Name: "lightserv", - Usage: "Maximum percentage of time allowed for serving LES requests (0-90)", - Value: 0, - } - LightPeersFlag = cli.IntFlag{ - Name: "lightpeers", - Usage: "Maximum number of LES client peers", - Value: eth.DefaultConfig.LightPeers, - } LightKDFFlag = cli.BoolFlag{ Name: "lightkdf", Usage: "Reduce key-derivation RAM & CPU usage at some expense of KDF strength", @@ -194,9 +223,58 @@ var ( Name: "whitelist", Usage: "Comma separated block number-to-hash mappings to enforce (=)", } + OverrideIstanbulFlag = cli.Uint64Flag{ + Name: "override.istanbul", + Usage: "Manually specify Istanbul fork-block, overriding the bundled setting", + } + // Light server and client settings + LightLegacyServFlag = cli.IntFlag{ // Deprecated in favor of light.serve, remove in 2021 + Name: "lightserv", + Usage: "Maximum percentage of time allowed for serving LES requests (deprecated, use --light.serve)", + Value: eth.DefaultConfig.LightServ, + } + LightServeFlag = cli.IntFlag{ + Name: "light.serve", + Usage: "Maximum percentage of time allowed for serving LES requests (multi-threaded processing allows values over 100)", + Value: eth.DefaultConfig.LightServ, + } + LightIngressFlag = cli.IntFlag{ + Name: "light.ingress", + Usage: "Incoming bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", + Value: eth.DefaultConfig.LightIngress, + } + LightEgressFlag = cli.IntFlag{ + Name: "light.egress", + Usage: "Outgoing bandwidth limit for serving light clients (kilobytes/sec, 0 = unlimited)", + Value: eth.DefaultConfig.LightEgress, + } + LightLegacyPeersFlag = cli.IntFlag{ // Deprecated in favor of light.maxpeers, remove in 2021 + Name: "lightpeers", + Usage: "Maximum number of light clients to serve, or light servers to attach to (deprecated, use --light.maxpeers)", + Value: eth.DefaultConfig.LightPeers, + } + LightMaxPeersFlag = cli.IntFlag{ + Name: "light.maxpeers", + Usage: "Maximum number of light clients to serve, or light servers to attach to", + Value: eth.DefaultConfig.LightPeers, + } + UltraLightServersFlag = cli.StringFlag{ + Name: "ulc.servers", + Usage: "List of trusted ultra-light servers", + Value: strings.Join(eth.DefaultConfig.UltraLightServers, ","), + } + UltraLightFractionFlag = cli.IntFlag{ + Name: "ulc.fraction", + Usage: "Minimum % of trusted ultra-light servers required to announce a new head", + Value: eth.DefaultConfig.UltraLightFraction, + } + UltraLightOnlyAnnounceFlag = cli.BoolFlag{ + Name: "ulc.onlyannounce", + Usage: "Ultra light server sends announcements only", + } // Dashboard settings DashboardEnabledFlag = cli.BoolFlag{ - Name: metrics.DashboardEnabledFlag, + Name: "dashboard", Usage: "Enable the dashboard", } DashboardAddrFlag = cli.StringFlag{ @@ -231,8 +309,8 @@ var ( } EthashDatasetDirFlag = DirectoryFlag{ Name: "ethash.dagdir", - Usage: "Directory to store the ethash mining DAGs (default = inside home folder)", - Value: DirectoryString{eth.DefaultConfig.Ethash.DatasetDir}, + Usage: "Directory to store the ethash mining DAGs", + Value: DirectoryString(eth.DefaultConfig.Ethash.DatasetDir), } EthashDatasetsInMemoryFlag = cli.IntFlag{ Name: "ethash.dagsinmem", @@ -301,7 +379,7 @@ var ( // Performance tuning settings CacheFlag = cli.IntFlag{ Name: "cache", - Usage: "Megabytes of memory allocated to internal caching", + Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", Value: 1024, } CacheDatabaseFlag = cli.IntFlag{ @@ -311,18 +389,17 @@ var ( } CacheTrieFlag = cli.IntFlag{ Name: "cache.trie", - Usage: "Percentage of cache memory allowance to use for trie caching", + Usage: "Percentage of cache memory allowance to use for trie caching (default = 25% full mode, 50% archive mode)", Value: 25, } CacheGCFlag = cli.IntFlag{ Name: "cache.gc", - Usage: "Percentage of cache memory allowance to use for trie pruning", + Usage: "Percentage of cache memory allowance to use for trie pruning (default = 25% full mode, 0% archive mode)", Value: 25, } - TrieCacheGenFlag = cli.IntFlag{ - Name: "trie-cache-gens", - Usage: "Number of trie node generations to keep in memory", - Value: int(state.MaxTrieCacheGen), + CacheNoPrefetchFlag = cli.BoolFlag{ + Name: "cache.noprefetch", + Usage: "Disable heuristic state prefetch during block import (less CPU and disk IO, more time waiting for data)", } // Miner settings MiningEnabledFlag = cli.BoolFlag{ @@ -346,27 +423,27 @@ var ( MinerGasTargetFlag = cli.Uint64Flag{ Name: "miner.gastarget", Usage: "Target gas floor for mined blocks", - Value: eth.DefaultConfig.MinerGasFloor, + Value: eth.DefaultConfig.Miner.GasFloor, } MinerLegacyGasTargetFlag = cli.Uint64Flag{ Name: "targetgaslimit", Usage: "Target gas floor for mined blocks (deprecated, use --miner.gastarget)", - Value: eth.DefaultConfig.MinerGasFloor, + Value: eth.DefaultConfig.Miner.GasFloor, } MinerGasLimitFlag = cli.Uint64Flag{ Name: "miner.gaslimit", Usage: "Target gas ceiling for mined blocks", - Value: eth.DefaultConfig.MinerGasCeil, + Value: eth.DefaultConfig.Miner.GasCeil, } MinerGasPriceFlag = BigFlag{ Name: "miner.gasprice", Usage: "Minimum gas price for mining a transaction", - Value: eth.DefaultConfig.MinerGasPrice, + Value: eth.DefaultConfig.Miner.GasPrice, } MinerLegacyGasPriceFlag = BigFlag{ Name: "gasprice", Usage: "Minimum gas price for mining a transaction (deprecated, use --miner.gasprice)", - Value: eth.DefaultConfig.MinerGasPrice, + Value: eth.DefaultConfig.Miner.GasPrice, } MinerEtherbaseFlag = cli.StringFlag{ Name: "miner.etherbase", @@ -389,7 +466,7 @@ var ( MinerRecommitIntervalFlag = cli.DurationFlag{ Name: "miner.recommit", Usage: "Time interval to recreate the block being mined", - Value: eth.DefaultConfig.MinerRecommit, + Value: eth.DefaultConfig.Miner.Recommit, } MinerNoVerfiyFlag = cli.BoolFlag{ Name: "miner.noverify", @@ -406,11 +483,23 @@ var ( Usage: "Password file to use for non-interactive password input", Value: "", } - + ExternalSignerFlag = cli.StringFlag{ + Name: "signer", + Usage: "External signer (url or path to ipc file)", + Value: "", + } VMEnableDebugFlag = cli.BoolFlag{ Name: "vmdebug", Usage: "Record information useful for VM and contract debugging", } + InsecureUnlockAllowedFlag = cli.BoolFlag{ + Name: "allow-insecure-unlock", + Usage: "Allow insecure account unlocking when account-related RPCs are exposed by http", + } + RPCGlobalGasCap = cli.Uint64Flag{ + Name: "rpc.gascap", + Usage: "Sets a cap on gas that can be used in eth_call/estimateGas", + } // Logging and debug settings EthStatsURLFlag = cli.StringFlag{ Name: "ethstats", @@ -425,6 +514,14 @@ var ( Usage: "Disables db compaction after import", } // RPC settings + IPCDisabledFlag = cli.BoolFlag{ + Name: "ipcdisable", + Usage: "Disable the IPC-RPC server", + } + IPCPathFlag = DirectoryFlag{ + Name: "ipcpath", + Usage: "Filename for IPC socket/pipe within the datadir (explicit paths escape it)", + } RPCEnabledFlag = cli.BoolFlag{ Name: "rpc", Usage: "Enable the HTTP-RPC server", @@ -454,14 +551,6 @@ var ( Usage: "API's offered over the HTTP-RPC interface", Value: "", } - IPCDisabledFlag = cli.BoolFlag{ - Name: "ipcdisable", - Usage: "Disable the IPC-RPC server", - } - IPCPathFlag = DirectoryFlag{ - Name: "ipcpath", - Usage: "Filename for IPC socket/pipe within the datadir (explicit paths escape it)", - } WSEnabledFlag = cli.BoolFlag{ Name: "ws", Usage: "Enable the WS-RPC server", @@ -486,6 +575,30 @@ var ( Usage: "Origins from which to accept websockets requests", Value: "", } + GraphQLEnabledFlag = cli.BoolFlag{ + Name: "graphql", + Usage: "Enable the GraphQL server", + } + GraphQLListenAddrFlag = cli.StringFlag{ + Name: "graphql.addr", + Usage: "GraphQL server listening interface", + Value: node.DefaultGraphQLHost, + } + GraphQLPortFlag = cli.IntFlag{ + Name: "graphql.port", + Usage: "GraphQL server listening port", + Value: node.DefaultGraphQLPort, + } + GraphQLCORSDomainFlag = cli.StringFlag{ + Name: "graphql.corsdomain", + Usage: "Comma separated list of domains from which to accept cross origin requests (browser enforced)", + Value: "", + } + GraphQLVirtualHostsFlag = cli.StringFlag{ + Name: "graphql.vhosts", + Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", + Value: strings.Join(node.DefaultConfig.GraphQLVirtualHosts, ","), + } ExecFlag = cli.StringFlag{ Name: "exec", Usage: "Execute JavaScript statement", @@ -499,12 +612,12 @@ var ( MaxPeersFlag = cli.IntFlag{ Name: "maxpeers", Usage: "Maximum number of network peers (network disabled if set to 0)", - Value: 25, + Value: node.DefaultConfig.P2P.MaxPeers, } MaxPendingPeersFlag = cli.IntFlag{ Name: "maxpendpeers", Usage: "Maximum number of pending connection attempts (defaults used if set to 0)", - Value: 0, + Value: node.DefaultConfig.P2P.MaxPendingPeers, } ListenPortFlag = cli.IntFlag{ Name: "port", @@ -591,9 +704,13 @@ var ( // Metrics flags MetricsEnabledFlag = cli.BoolFlag{ - Name: metrics.MetricsEnabledFlag, + Name: "metrics", Usage: "Enable metrics collection and reporting", } + MetricsEnabledExpensiveFlag = cli.BoolFlag{ + Name: "metrics.expensive", + Usage: "Enable expensive metrics collection and reporting", + } MetricsEnableInfluxDBFlag = cli.BoolFlag{ Name: "metrics.influxdb", Usage: "Enable metrics export/push to an external InfluxDB database", @@ -773,11 +890,14 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { cfg.BootstrapNodes = make([]*enode.Node, 0, len(urls)) for _, url := range urls { - node, err := enode.ParseV4(url) - if err != nil { - log.Crit("Bootstrap URL invalid", "enode", url, "err", err) + if url != "" { + node, err := enode.Parse(enode.ValidSchemes, url) + if err != nil { + log.Crit("Bootstrap URL invalid", "enode", url, "err", err) + continue + } + cfg.BootstrapNodes = append(cfg.BootstrapNodes, node) } - cfg.BootstrapNodes = append(cfg.BootstrapNodes, node) } } @@ -802,12 +922,14 @@ func setBootstrapNodesV5(ctx *cli.Context, cfg *p2p.Config) { cfg.BootstrapNodesV5 = make([]*discv5.Node, 0, len(urls)) for _, url := range urls { - node, err := discv5.ParseNode(url) - if err != nil { - log.Error("Bootstrap URL invalid", "enode", url, "err", err) - continue + if url != "" { + node, err := discv5.ParseNode(url) + if err != nil { + log.Error("Bootstrap URL invalid", "enode", url, "err", err) + continue + } + cfg.BootstrapNodesV5 = append(cfg.BootstrapNodesV5, node) } - cfg.BootstrapNodesV5 = append(cfg.BootstrapNodesV5, node) } } @@ -849,7 +971,6 @@ func setHTTP(ctx *cli.Context, cfg *node.Config) { cfg.HTTPHost = ctx.GlobalString(RPCListenAddrFlag.Name) } } - if ctx.GlobalIsSet(RPCPortFlag.Name) { cfg.HTTPPort = ctx.GlobalInt(RPCPortFlag.Name) } @@ -864,6 +985,24 @@ func setHTTP(ctx *cli.Context, cfg *node.Config) { } } +// setGraphQL creates the GraphQL listener interface string from the set +// command line flags, returning empty if the GraphQL endpoint is disabled. +func setGraphQL(ctx *cli.Context, cfg *node.Config) { + if ctx.GlobalBool(GraphQLEnabledFlag.Name) && cfg.GraphQLHost == "" { + cfg.GraphQLHost = "127.0.0.1" + if ctx.GlobalIsSet(GraphQLListenAddrFlag.Name) { + cfg.GraphQLHost = ctx.GlobalString(GraphQLListenAddrFlag.Name) + } + } + cfg.GraphQLPort = ctx.GlobalInt(GraphQLPortFlag.Name) + if ctx.GlobalIsSet(GraphQLCORSDomainFlag.Name) { + cfg.GraphQLCors = splitAndTrim(ctx.GlobalString(GraphQLCORSDomainFlag.Name)) + } + if ctx.GlobalIsSet(GraphQLVirtualHostsFlag.Name) { + cfg.GraphQLVirtualHosts = splitAndTrim(ctx.GlobalString(GraphQLVirtualHostsFlag.Name)) + } +} + // setWS creates the WebSocket RPC listener interface string from the set // command line flags, returning empty if the HTTP endpoint is disabled. func setWS(ctx *cli.Context, cfg *node.Config) { @@ -873,7 +1012,6 @@ func setWS(ctx *cli.Context, cfg *node.Config) { cfg.WSHost = ctx.GlobalString(WSListenAddrFlag.Name) } } - if ctx.GlobalIsSet(WSPortFlag.Name) { cfg.WSPort = ctx.GlobalInt(WSPortFlag.Name) } @@ -888,7 +1026,7 @@ func setWS(ctx *cli.Context, cfg *node.Config) { // setIPC creates an IPC path configuration from the set command line flags, // returning an empty string if IPC was explicitly disabled, or the set path. func setIPC(ctx *cli.Context, cfg *node.Config) { - checkExclusive(ctx, IPCDisabledFlag, IPCPathFlag) + CheckExclusive(ctx, IPCDisabledFlag, IPCPathFlag) switch { case ctx.GlobalBool(IPCDisabledFlag.Name): cfg.IPCPath = "" @@ -897,6 +1035,41 @@ func setIPC(ctx *cli.Context, cfg *node.Config) { } } +// setLes configures the les server and ultra light client settings from the command line flags. +func setLes(ctx *cli.Context, cfg *eth.Config) { + if ctx.GlobalIsSet(LightLegacyServFlag.Name) { + cfg.LightServ = ctx.GlobalInt(LightLegacyServFlag.Name) + } + if ctx.GlobalIsSet(LightServeFlag.Name) { + cfg.LightServ = ctx.GlobalInt(LightServeFlag.Name) + } + if ctx.GlobalIsSet(LightIngressFlag.Name) { + cfg.LightIngress = ctx.GlobalInt(LightIngressFlag.Name) + } + if ctx.GlobalIsSet(LightEgressFlag.Name) { + cfg.LightEgress = ctx.GlobalInt(LightEgressFlag.Name) + } + if ctx.GlobalIsSet(LightLegacyPeersFlag.Name) { + cfg.LightPeers = ctx.GlobalInt(LightLegacyPeersFlag.Name) + } + if ctx.GlobalIsSet(LightMaxPeersFlag.Name) { + cfg.LightPeers = ctx.GlobalInt(LightMaxPeersFlag.Name) + } + if ctx.GlobalIsSet(UltraLightServersFlag.Name) { + cfg.UltraLightServers = strings.Split(ctx.GlobalString(UltraLightServersFlag.Name), ",") + } + if ctx.GlobalIsSet(UltraLightFractionFlag.Name) { + cfg.UltraLightFraction = ctx.GlobalInt(UltraLightFractionFlag.Name) + } + if cfg.UltraLightFraction <= 0 && cfg.UltraLightFraction > 100 { + log.Error("Ultra light fraction is invalid", "had", cfg.UltraLightFraction, "updated", eth.DefaultConfig.UltraLightFraction) + cfg.UltraLightFraction = eth.DefaultConfig.UltraLightFraction + } + if ctx.GlobalIsSet(UltraLightOnlyAnnounceFlag.Name) { + cfg.UltraLightOnlyAnnounce = ctx.GlobalBool(UltraLightOnlyAnnounceFlag.Name) + } +} + // makeDatabaseHandles raises out the number of allowed file handles per process // for Geth and returns half of the allowance to assign to the database. func makeDatabaseHandles() int { @@ -949,11 +1122,15 @@ func setEtherbase(ctx *cli.Context, ks *keystore.KeyStore, cfg *eth.Config) { } // Convert the etherbase into an address and configure it if etherbase != "" { - account, err := MakeAddress(ks, etherbase) - if err != nil { - Fatalf("Invalid miner etherbase: %v", err) + if ks != nil { + account, err := MakeAddress(ks, etherbase) + if err != nil { + Fatalf("Invalid miner etherbase: %v", err) + } + cfg.Miner.Etherbase = account.Address + } else { + Fatalf("No etherbase configured") } - cfg.Etherbase = account.Address } } @@ -983,19 +1160,27 @@ func SetP2PConfig(ctx *cli.Context, cfg *p2p.Config) { setBootstrapNodesV5(ctx, cfg) lightClient := ctx.GlobalString(SyncModeFlag.Name) == "light" - lightServer := ctx.GlobalInt(LightServFlag.Name) != 0 - lightPeers := ctx.GlobalInt(LightPeersFlag.Name) + lightServer := (ctx.GlobalInt(LightLegacyServFlag.Name) != 0 || ctx.GlobalInt(LightServeFlag.Name) != 0) + + lightPeers := ctx.GlobalInt(LightLegacyPeersFlag.Name) + if ctx.GlobalIsSet(LightMaxPeersFlag.Name) { + lightPeers = ctx.GlobalInt(LightMaxPeersFlag.Name) + } + if lightClient && !ctx.GlobalIsSet(LightLegacyPeersFlag.Name) && !ctx.GlobalIsSet(LightMaxPeersFlag.Name) { + // dynamic default - for clients we use 1/10th of the default for servers + lightPeers /= 10 + } if ctx.GlobalIsSet(MaxPeersFlag.Name) { cfg.MaxPeers = ctx.GlobalInt(MaxPeersFlag.Name) - if lightServer && !ctx.GlobalIsSet(LightPeersFlag.Name) { + if lightServer && !ctx.GlobalIsSet(LightLegacyPeersFlag.Name) && !ctx.GlobalIsSet(LightMaxPeersFlag.Name) { cfg.MaxPeers += lightPeers } } else { if lightServer { cfg.MaxPeers += lightPeers } - if lightClient && ctx.GlobalIsSet(LightPeersFlag.Name) && cfg.MaxPeers < lightPeers { + if lightClient && (ctx.GlobalIsSet(LightLegacyPeersFlag.Name) || ctx.GlobalIsSet(LightMaxPeersFlag.Name)) && cfg.MaxPeers < lightPeers { cfg.MaxPeers = lightPeers } } @@ -1047,9 +1232,15 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { SetP2PConfig(ctx, &cfg.P2P) setIPC(ctx, cfg) setHTTP(ctx, cfg) + setGraphQL(ctx, cfg) setWS(ctx, cfg) setNodeUserIdent(ctx, cfg) setDataDir(ctx, cfg) + setSmartCard(ctx, cfg) + + if ctx.GlobalIsSet(ExternalSignerFlag.Name) { + cfg.ExternalSigner = ctx.GlobalString(ExternalSignerFlag.Name) + } if ctx.GlobalIsSet(KeyStoreDirFlag.Name) { cfg.KeyStoreDir = ctx.GlobalString(KeyStoreDirFlag.Name) @@ -1060,6 +1251,29 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { if ctx.GlobalIsSet(NoUSBFlag.Name) { cfg.NoUSB = ctx.GlobalBool(NoUSBFlag.Name) } + if ctx.GlobalIsSet(InsecureUnlockAllowedFlag.Name) { + cfg.InsecureUnlockAllowed = ctx.GlobalBool(InsecureUnlockAllowedFlag.Name) + } +} + +func setSmartCard(ctx *cli.Context, cfg *node.Config) { + // Skip enabling smartcards if no path is set + path := ctx.GlobalString(SmartCardDaemonPathFlag.Name) + if path == "" { + return + } + // Sanity check that the smartcard path is valid + fi, err := os.Stat(path) + if err != nil { + log.Info("Smartcard socket not found, disabling", "err", err) + return + } + if fi.Mode()&os.ModeType != os.ModeSocket { + log.Error("Invalid smartcard daemon path", "path", path, "type", fi.Mode().String()) + return + } + // Smartcard daemon path exists and is a socket, enable it + cfg.SmartCardDaemonPath = path } func setDataDir(ctx *cli.Context, cfg *node.Config) { @@ -1068,11 +1282,11 @@ func setDataDir(ctx *cli.Context, cfg *node.Config) { cfg.DataDir = ctx.GlobalString(DataDirFlag.Name) case ctx.GlobalBool(DeveloperFlag.Name): cfg.DataDir = "" // unless explicitly requested, use memory databases - case ctx.GlobalBool(TestnetFlag.Name): + case ctx.GlobalBool(TestnetFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "testnet") - case ctx.GlobalBool(RinkebyFlag.Name): + case ctx.GlobalBool(RinkebyFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "rinkeby") - case ctx.GlobalBool(GoerliFlag.Name): + case ctx.GlobalBool(GoerliFlag.Name) && cfg.DataDir == node.DefaultDataDir(): cfg.DataDir = filepath.Join(node.DefaultDataDir(), "goerli") } } @@ -1150,6 +1364,39 @@ func setEthash(ctx *cli.Context, cfg *eth.Config) { } } +func setMiner(ctx *cli.Context, cfg *miner.Config) { + if ctx.GlobalIsSet(MinerNotifyFlag.Name) { + cfg.Notify = strings.Split(ctx.GlobalString(MinerNotifyFlag.Name), ",") + } + if ctx.GlobalIsSet(MinerLegacyExtraDataFlag.Name) { + cfg.ExtraData = []byte(ctx.GlobalString(MinerLegacyExtraDataFlag.Name)) + } + if ctx.GlobalIsSet(MinerExtraDataFlag.Name) { + cfg.ExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name)) + } + if ctx.GlobalIsSet(MinerLegacyGasTargetFlag.Name) { + cfg.GasFloor = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name) + } + if ctx.GlobalIsSet(MinerGasTargetFlag.Name) { + cfg.GasFloor = ctx.GlobalUint64(MinerGasTargetFlag.Name) + } + if ctx.GlobalIsSet(MinerGasLimitFlag.Name) { + cfg.GasCeil = ctx.GlobalUint64(MinerGasLimitFlag.Name) + } + if ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { + cfg.GasPrice = GlobalBig(ctx, MinerLegacyGasPriceFlag.Name) + } + if ctx.GlobalIsSet(MinerGasPriceFlag.Name) { + cfg.GasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name) + } + if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) { + cfg.Recommit = ctx.Duration(MinerRecommitIntervalFlag.Name) + } + if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) { + cfg.Noverify = ctx.Bool(MinerNoVerfiyFlag.Name) + } +} + func setWhitelist(ctx *cli.Context, cfg *eth.Config) { whitelist := ctx.GlobalString(WhitelistFlag.Name) if whitelist == "" { @@ -1173,10 +1420,10 @@ func setWhitelist(ctx *cli.Context, cfg *eth.Config) { } } -// checkExclusive verifies that only a single instance of the provided flags was +// CheckExclusive verifies that only a single instance of the provided flags was // set by the user. Each flag might optionally be followed by a string type to // specialize it further. -func checkExclusive(ctx *cli.Context, args ...interface{}) { +func CheckExclusive(ctx *cli.Context, args ...interface{}) { set := make([]string, 0, 1) for i := 0; i < len(args); i++ { // Make sure the next argument is a flag and skip if not set @@ -1230,25 +1477,25 @@ func SetShhConfig(ctx *cli.Context, stack *node.Node, cfg *whisper.Config) { // SetEthConfig applies eth-related command line flags to the config. func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { // Avoid conflicting network flags - checkExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag, GoerliFlag) - checkExclusive(ctx, LightServFlag, SyncModeFlag, "light") + CheckExclusive(ctx, DeveloperFlag, TestnetFlag, RinkebyFlag, GoerliFlag) + CheckExclusive(ctx, LightLegacyServFlag, LightServeFlag, SyncModeFlag, "light") + CheckExclusive(ctx, DeveloperFlag, ExternalSignerFlag) // Can't use both ephemeral unlocked and external signer - ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) + var ks *keystore.KeyStore + if keystores := stack.AccountManager().Backends(keystore.KeyStoreType); len(keystores) > 0 { + ks = keystores[0].(*keystore.KeyStore) + } setEtherbase(ctx, ks, cfg) setGPO(ctx, &cfg.GPO) setTxPool(ctx, &cfg.TxPool) setEthash(ctx, cfg) + setMiner(ctx, &cfg.Miner) setWhitelist(ctx, cfg) + setLes(ctx, cfg) if ctx.GlobalIsSet(SyncModeFlag.Name) { cfg.SyncMode = *GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode) } - if ctx.GlobalIsSet(LightServFlag.Name) { - cfg.LightServ = ctx.GlobalInt(LightServFlag.Name) - } - if ctx.GlobalIsSet(LightPeersFlag.Name) { - cfg.LightPeers = ctx.GlobalInt(LightPeersFlag.Name) - } if ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = ctx.GlobalUint64(NetworkIdFlag.Name) } @@ -1256,11 +1503,15 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { cfg.DatabaseCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheDatabaseFlag.Name) / 100 } cfg.DatabaseHandles = makeDatabaseHandles() + if ctx.GlobalIsSet(AncientFlag.Name) { + cfg.DatabaseFreezer = ctx.GlobalString(AncientFlag.Name) + } if gcmode := ctx.GlobalString(GCModeFlag.Name); gcmode != "full" && gcmode != "archive" { Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name) } cfg.NoPruning = ctx.GlobalString(GCModeFlag.Name) == "archive" + cfg.NoPrefetch = ctx.GlobalBool(CacheNoPrefetchFlag.Name) if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheTrieFlag.Name) { cfg.TrieCleanCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheTrieFlag.Name) / 100 @@ -1268,39 +1519,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheGCFlag.Name) { cfg.TrieDirtyCache = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheGCFlag.Name) / 100 } - if ctx.GlobalIsSet(MinerNotifyFlag.Name) { - cfg.MinerNotify = strings.Split(ctx.GlobalString(MinerNotifyFlag.Name), ",") - } if ctx.GlobalIsSet(DocRootFlag.Name) { cfg.DocRoot = ctx.GlobalString(DocRootFlag.Name) } - if ctx.GlobalIsSet(MinerLegacyExtraDataFlag.Name) { - cfg.MinerExtraData = []byte(ctx.GlobalString(MinerLegacyExtraDataFlag.Name)) - } - if ctx.GlobalIsSet(MinerExtraDataFlag.Name) { - cfg.MinerExtraData = []byte(ctx.GlobalString(MinerExtraDataFlag.Name)) - } - if ctx.GlobalIsSet(MinerLegacyGasTargetFlag.Name) { - cfg.MinerGasFloor = ctx.GlobalUint64(MinerLegacyGasTargetFlag.Name) - } - if ctx.GlobalIsSet(MinerGasTargetFlag.Name) { - cfg.MinerGasFloor = ctx.GlobalUint64(MinerGasTargetFlag.Name) - } - if ctx.GlobalIsSet(MinerGasLimitFlag.Name) { - cfg.MinerGasCeil = ctx.GlobalUint64(MinerGasLimitFlag.Name) - } - if ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { - cfg.MinerGasPrice = GlobalBig(ctx, MinerLegacyGasPriceFlag.Name) - } - if ctx.GlobalIsSet(MinerGasPriceFlag.Name) { - cfg.MinerGasPrice = GlobalBig(ctx, MinerGasPriceFlag.Name) - } - if ctx.GlobalIsSet(MinerRecommitIntervalFlag.Name) { - cfg.MinerRecommit = ctx.Duration(MinerRecommitIntervalFlag.Name) - } - if ctx.GlobalIsSet(MinerNoVerfiyFlag.Name) { - cfg.MinerNoverify = ctx.Bool(MinerNoVerfiyFlag.Name) - } if ctx.GlobalIsSet(VMEnableDebugFlag.Name) { // TODO(fjl): force-enable this in --dev mode cfg.EnablePreimageRecording = ctx.GlobalBool(VMEnableDebugFlag.Name) @@ -1313,6 +1534,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { if ctx.GlobalIsSet(EVMInterpreterFlag.Name) { cfg.EVMInterpreter = ctx.GlobalString(EVMInterpreterFlag.Name) } + if ctx.GlobalIsSet(RPCGlobalGasCap.Name) { + cfg.RPCGasCap = new(big.Int).SetUint64(ctx.GlobalUint64(RPCGlobalGasCap.Name)) + } // Override any default configs for hard coded networks. switch { @@ -1355,13 +1579,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *eth.Config) { cfg.Genesis = core.DeveloperGenesisBlock(uint64(ctx.GlobalInt(DeveloperPeriodFlag.Name)), developer.Address) if !ctx.GlobalIsSet(MinerGasPriceFlag.Name) && !ctx.GlobalIsSet(MinerLegacyGasPriceFlag.Name) { - cfg.MinerGasPrice = big.NewInt(1) + cfg.Miner.GasPrice = big.NewInt(1) } } - // TODO(fjl): move trie cache generations into config - if gen := ctx.GlobalInt(TrieCacheGenFlag.Name); gen > 0 { - state.MaxTrieCacheGen = uint16(gen) - } } // SetMetadiumConfig applies metadium related command line flags to the config. @@ -1459,12 +1679,33 @@ func RegisterEthStatsService(stack *node.Node, url string) { var lesServ *les.LightEthereum ctx.Service(&lesServ) + // Let ethstats use whichever is not nil return ethstats.New(url, ethServ, lesServ) }); err != nil { Fatalf("Failed to register the Ethereum Stats service: %v", err) } } +// RegisterGraphQLService is a utility function to construct a new service and register it against a node. +func RegisterGraphQLService(stack *node.Node, endpoint string, cors, vhosts []string, timeouts rpc.HTTPTimeouts) { + if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { + // Try to construct the GraphQL service backed by a full node + var ethServ *eth.Ethereum + if err := ctx.Service(ðServ); err == nil { + return graphql.New(ethServ.APIBackend, endpoint, cors, vhosts, timeouts) + } + // Try to construct the GraphQL service backed by a light node + var lesServ *les.LightEthereum + if err := ctx.Service(&lesServ); err == nil { + return graphql.New(lesServ.ApiBackend, endpoint, cors, vhosts, timeouts) + } + // Well, this should not have happened, bail out + return nil, errors.New("no Ethereum service") + }); err != nil { + Fatalf("Failed to register the GraphQL service: %v", err) + } +} + func SetupMetrics(ctx *cli.Context) { if metrics.Enabled { log.Info("Enabling metrics collection") @@ -1513,7 +1754,7 @@ func MakeChainDatabase(ctx *cli.Context, stack *node.Node) ethdb.Database { if ctx.GlobalString(SyncModeFlag.Name) == "light" { name = "lightchaindata" } - chainDb, err := stack.OpenDatabase(name, cache, handles) + chainDb, err := stack.OpenDatabaseWithFreezer(name, cache, handles, ctx.GlobalString(AncientFlag.Name), "") if err != nil { Fatalf("Could not open database: %v", err) } @@ -1563,10 +1804,11 @@ func MakeChain(ctx *cli.Context, stack *node.Node) (chain *core.BlockChain, chai Fatalf("--%s must be either 'full' or 'archive'", GCModeFlag.Name) } cache := &core.CacheConfig{ - Disabled: ctx.GlobalString(GCModeFlag.Name) == "archive", - TrieCleanLimit: eth.DefaultConfig.TrieCleanCache, - TrieDirtyLimit: eth.DefaultConfig.TrieDirtyCache, - TrieTimeLimit: eth.DefaultConfig.TrieTimeout, + TrieCleanLimit: eth.DefaultConfig.TrieCleanCache, + TrieCleanNoPrefetch: ctx.GlobalBool(CacheNoPrefetchFlag.Name), + TrieDirtyLimit: eth.DefaultConfig.TrieDirtyCache, + TrieDirtyDisabled: ctx.GlobalString(GCModeFlag.Name) == "archive", + TrieTimeLimit: eth.DefaultConfig.TrieTimeout, } if ctx.GlobalIsSet(CacheFlag.Name) || ctx.GlobalIsSet(CacheTrieFlag.Name) { cache.TrieCleanLimit = ctx.GlobalInt(CacheFlag.Name) * ctx.GlobalInt(CacheTrieFlag.Name) / 100 @@ -1590,7 +1832,7 @@ func MakeConsolePreloads(ctx *cli.Context) []string { return nil } // Otherwise resolve absolute paths and return them - preloads := []string{} + var preloads []string assets := ctx.GlobalString(JSpathFlag.Name) for _, file := range strings.Split(ctx.GlobalString(PreloadJSFlag.Name), ",") { diff --git a/cmd/wnode/main.go b/cmd/wnode/main.go index 97e5852013bf..49736d7321f2 100644 --- a/cmd/wnode/main.go +++ b/cmd/wnode/main.go @@ -203,7 +203,7 @@ func initialize() { if len(*argEnode) == 0 { argEnode = scanLineA("Please enter the peer's enode: ") } - peer := enode.MustParseV4(*argEnode) + peer := enode.MustParse(*argEnode) peers = append(peers, peer) } @@ -356,7 +356,7 @@ func configureNode() { if len(symPass) == 0 { symPass, err = console.Stdin.PromptPassword("Please enter the password for symmetric encryption: ") if err != nil { - utils.Fatalf("Failed to read passphrase: %v", err) + utils.Fatalf("Failed to read password: %v", err) } } @@ -747,9 +747,9 @@ func requestExpiredMessagesLoop() { } func extractIDFromEnode(s string) []byte { - n, err := enode.ParseV4(s) + n, err := enode.Parse(enode.ValidSchemes, s) if err != nil { - utils.Fatalf("Failed to parse enode: %s", err) + utils.Fatalf("Failed to parse node: %s", err) } return n.ID().Bytes() } diff --git a/common/bitutil/bitutil_test.go b/common/bitutil/bitutil_test.go index 93647031ef84..307bf731f765 100644 --- a/common/bitutil/bitutil_test.go +++ b/common/bitutil/bitutil_test.go @@ -190,6 +190,8 @@ func benchmarkBaseOR(b *testing.B, size int) { } } +var GloBool bool // Exported global will not be dead-code eliminated, at least not yet. + // Benchmarks the potentially optimized bit testing performance. func BenchmarkFastTest1KB(b *testing.B) { benchmarkFastTest(b, 1024) } func BenchmarkFastTest2KB(b *testing.B) { benchmarkFastTest(b, 2048) } @@ -197,9 +199,11 @@ func BenchmarkFastTest4KB(b *testing.B) { benchmarkFastTest(b, 4096) } func benchmarkFastTest(b *testing.B, size int) { p := make([]byte, size) + a := false for i := 0; i < b.N; i++ { - TestBytes(p) + a = a != TestBytes(p) } + GloBool = a // Use of benchmark "result" to prevent total dead code elimination. } // Benchmarks the baseline bit testing performance. @@ -209,7 +213,9 @@ func BenchmarkBaseTest4KB(b *testing.B) { benchmarkBaseTest(b, 4096) } func benchmarkBaseTest(b *testing.B, size int) { p := make([]byte, size) + a := false for i := 0; i < b.N; i++ { - safeTestBytes(p) + a = a != safeTestBytes(p) } + GloBool = a // Use of benchmark "result" to prevent total dead code elimination. } diff --git a/common/bytes.go b/common/bytes.go index c82e61624187..fa457b92cf3a 100644 --- a/common/bytes.go +++ b/common/bytes.go @@ -43,10 +43,8 @@ func ToHexArray(b [][]byte) []string { // FromHex returns the bytes represented by the hexadecimal string s. // s may be prefixed with "0x". func FromHex(s string) []byte { - if len(s) > 1 { - if s[0:2] == "0x" || s[0:2] == "0X" { - s = s[2:] - } + if has0xPrefix(s) { + s = s[2:] } if len(s)%2 == 1 { s = "0" + s @@ -65,8 +63,8 @@ func CopyBytes(b []byte) (copiedBytes []byte) { return } -// hasHexPrefix validates str begins with '0x' or '0X'. -func hasHexPrefix(str string) bool { +// has0xPrefix validates str begins with '0x' or '0X'. +func has0xPrefix(str string) bool { return len(str) >= 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X') } @@ -136,3 +134,14 @@ func LeftPadBytes(slice []byte, l int) []byte { return padded } + +// TrimLeftZeroes returns a subslice of s without leading zeroes +func TrimLeftZeroes(s []byte) []byte { + idx := 0 + for ; idx < len(s); idx++ { + if s[idx] != 0 { + break + } + } + return s[idx:] +} diff --git a/common/compiler/helpers.go b/common/compiler/helpers.go new file mode 100644 index 000000000000..5ed640de8f0e --- /dev/null +++ b/common/compiler/helpers.go @@ -0,0 +1,65 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). +package compiler + +import ( + "bytes" + "io/ioutil" + "regexp" +) + +var versionRegexp = regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) + +// Contract contains information about a compiled contract, alongside its code and runtime code. +type Contract struct { + Code string `json:"code"` + RuntimeCode string `json:"runtime-code"` + Info ContractInfo `json:"info"` + Hashes map[string]string `json:"hashes"` +} + +// ContractInfo contains information about a compiled contract, including access +// to the ABI definition, source mapping, user and developer docs, and metadata. +// +// Depending on the source, language version, compiler version, and compiler +// options will provide information about how the contract was compiled. +type ContractInfo struct { + Source string `json:"source"` + Language string `json:"language"` + LanguageVersion string `json:"languageVersion"` + CompilerVersion string `json:"compilerVersion"` + CompilerOptions string `json:"compilerOptions"` + SrcMap interface{} `json:"srcMap"` + SrcMapRuntime string `json:"srcMapRuntime"` + AbiDefinition interface{} `json:"abiDefinition"` + UserDoc interface{} `json:"userDoc"` + DeveloperDoc interface{} `json:"developerDoc"` + Metadata string `json:"metadata"` +} + +func slurpFiles(files []string) (string, error) { + var concat bytes.Buffer + for _, file := range files { + content, err := ioutil.ReadFile(file) + if err != nil { + return "", err + } + concat.Write(content) + } + return concat.String(), nil +} diff --git a/common/compiler/solidity.go b/common/compiler/solidity.go index b7c8ec5638b4..b689f258a369 100644 --- a/common/compiler/solidity.go +++ b/common/compiler/solidity.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package compiler wraps the Solidity compiler executable (solc). +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). package compiler import ( @@ -22,41 +22,11 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "os/exec" - "regexp" "strconv" "strings" ) -var versionRegexp = regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) - -// Contract contains information about a compiled contract, alongside its code and runtime code. -type Contract struct { - Code string `json:"code"` - RuntimeCode string `json:"runtime-code"` - Info ContractInfo `json:"info"` -} - -// ContractInfo contains information about a compiled contract, including access -// to the ABI definition, source mapping, user and developer docs, and metadata. -// -// Depending on the source, language version, compiler version, and compiler -// options will provide information about how the contract was compiled. -type ContractInfo struct { - Source string `json:"source"` - Language string `json:"language"` - LanguageVersion string `json:"languageVersion"` - CompilerVersion string `json:"compilerVersion"` - CompilerOptions string `json:"compilerOptions"` - SrcMap string `json:"srcMap"` - SrcMapRuntime string `json:"srcMapRuntime"` - AbiDefinition interface{} `json:"abiDefinition"` - UserDoc interface{} `json:"userDoc"` - DeveloperDoc interface{} `json:"developerDoc"` - Metadata string `json:"metadata"` -} - // Solidity contains information about the solidity compiler. type Solidity struct { Path, Version, FullVersion string @@ -69,6 +39,7 @@ type solcOutput struct { BinRuntime string `json:"bin-runtime"` SrcMapRuntime string `json:"srcmap-runtime"` Bin, SrcMap, Abi, Devdoc, Userdoc, Metadata string + Hashes map[string]string } Version string } @@ -76,10 +47,11 @@ type solcOutput struct { func (s *Solidity) makeArgs() []string { p := []string{ "--combined-json", "bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc", - "--optimize", // code optimizer switched on + "--optimize", // code optimizer switched on + "--allow-paths", "., ./, ../", // default to support relative paths } if s.Major > 0 || s.Minor > 4 || s.Patch > 6 { - p[1] += ",metadata" + p[1] += ",metadata,hashes" } return p } @@ -171,7 +143,6 @@ func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion strin if err := json.Unmarshal(combinedJSON, &output); err != nil { return nil, err } - // Compilation succeeded, assemble and return the contracts. contracts := make(map[string]*Contract) for name, info := range output.Contracts { @@ -180,17 +151,14 @@ func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion strin if err := json.Unmarshal([]byte(info.Abi), &abi); err != nil { return nil, fmt.Errorf("solc: error reading abi definition (%v)", err) } - var userdoc interface{} - if err := json.Unmarshal([]byte(info.Userdoc), &userdoc); err != nil { - return nil, fmt.Errorf("solc: error reading user doc: %v", err) - } - var devdoc interface{} - if err := json.Unmarshal([]byte(info.Devdoc), &devdoc); err != nil { - return nil, fmt.Errorf("solc: error reading dev doc: %v", err) - } + var userdoc, devdoc interface{} + json.Unmarshal([]byte(info.Userdoc), &userdoc) + json.Unmarshal([]byte(info.Devdoc), &devdoc) + contracts[name] = &Contract{ Code: "0x" + info.Bin, RuntimeCode: "0x" + info.BinRuntime, + Hashes: info.Hashes, Info: ContractInfo{ Source: source, Language: "Solidity", @@ -208,15 +176,3 @@ func ParseCombinedJSON(combinedJSON []byte, source string, languageVersion strin } return contracts, nil } - -func slurpFiles(files []string) (string, error) { - var concat bytes.Buffer - for _, file := range files { - content, err := ioutil.ReadFile(file) - if err != nil { - return "", err - } - concat.Write(content) - } - return concat.String(), nil -} diff --git a/common/compiler/solidity_test.go b/common/compiler/solidity_test.go index 0da3bb337e89..491e3665e2c0 100644 --- a/common/compiler/solidity_test.go +++ b/common/compiler/solidity_test.go @@ -23,9 +23,10 @@ import ( const ( testSource = ` +pragma solidity >0.0.0; contract test { /// @notice Will multiply ` + "`a`" + ` by 7. - function multiply(uint a) returns(uint d) { + function multiply(uint a) public returns(uint d) { return a * 7; } } @@ -38,7 +39,7 @@ func skipWithoutSolc(t *testing.T) { } } -func TestCompiler(t *testing.T) { +func TestSolidityCompiler(t *testing.T) { skipWithoutSolc(t) contracts, err := CompileSolidityString("", testSource) @@ -66,7 +67,7 @@ func TestCompiler(t *testing.T) { } } -func TestCompileError(t *testing.T) { +func TestSolidityCompileError(t *testing.T) { skipWithoutSolc(t) contracts, err := CompileSolidityString("", testSource[4:]) diff --git a/common/compiler/test.v.py b/common/compiler/test.v.py new file mode 100644 index 000000000000..35af56c8f6ef --- /dev/null +++ b/common/compiler/test.v.py @@ -0,0 +1,3 @@ +@public +def test(): + hello: int128 diff --git a/common/compiler/test_bad.v.py b/common/compiler/test_bad.v.py new file mode 100644 index 000000000000..443ef7826325 --- /dev/null +++ b/common/compiler/test_bad.v.py @@ -0,0 +1,3 @@ +lic +def test(): + hello: int128 diff --git a/common/compiler/vyper.go b/common/compiler/vyper.go new file mode 100644 index 000000000000..a9bca95e5901 --- /dev/null +++ b/common/compiler/vyper.go @@ -0,0 +1,144 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper). +package compiler + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "os/exec" + "strconv" + "strings" +) + +// Vyper contains information about the vyper compiler. +type Vyper struct { + Path, Version, FullVersion string + Major, Minor, Patch int +} + +func (s *Vyper) makeArgs() []string { + p := []string{ + "-f", "combined_json", + } + return p +} + +// VyperVersion runs vyper and parses its version output. +func VyperVersion(vyper string) (*Vyper, error) { + if vyper == "" { + vyper = "vyper" + } + var out bytes.Buffer + cmd := exec.Command(vyper, "--version") + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + return nil, err + } + matches := versionRegexp.FindStringSubmatch(out.String()) + if len(matches) != 4 { + return nil, fmt.Errorf("can't parse vyper version %q", out.String()) + } + s := &Vyper{Path: cmd.Path, FullVersion: out.String(), Version: matches[0]} + if s.Major, err = strconv.Atoi(matches[1]); err != nil { + return nil, err + } + if s.Minor, err = strconv.Atoi(matches[2]); err != nil { + return nil, err + } + if s.Patch, err = strconv.Atoi(matches[3]); err != nil { + return nil, err + } + return s, nil +} + +// CompileVyper compiles all given Vyper source files. +func CompileVyper(vyper string, sourcefiles ...string) (map[string]*Contract, error) { + if len(sourcefiles) == 0 { + return nil, errors.New("vyper: no source files") + } + source, err := slurpFiles(sourcefiles) + if err != nil { + return nil, err + } + s, err := VyperVersion(vyper) + if err != nil { + return nil, err + } + args := s.makeArgs() + cmd := exec.Command(s.Path, append(args, sourcefiles...)...) + return s.run(cmd, source) +} + +func (s *Vyper) run(cmd *exec.Cmd, source string) (map[string]*Contract, error) { + var stderr, stdout bytes.Buffer + cmd.Stderr = &stderr + cmd.Stdout = &stdout + if err := cmd.Run(); err != nil { + return nil, fmt.Errorf("vyper: %v\n%s", err, stderr.Bytes()) + } + + return ParseVyperJSON(stdout.Bytes(), source, s.Version, s.Version, strings.Join(s.makeArgs(), " ")) +} + +// ParseVyperJSON takes the direct output of a vyper --f combined_json run and +// parses it into a map of string contract name to Contract structs. The +// provided source, language and compiler version, and compiler options are all +// passed through into the Contract structs. +// +// The vyper output is expected to contain ABI and source mapping. +// +// Returns an error if the JSON is malformed or missing data, or if the JSON +// embedded within the JSON is malformed. +func ParseVyperJSON(combinedJSON []byte, source string, languageVersion string, compilerVersion string, compilerOptions string) (map[string]*Contract, error) { + var output map[string]interface{} + if err := json.Unmarshal(combinedJSON, &output); err != nil { + return nil, err + } + + // Compilation succeeded, assemble and return the contracts. + contracts := make(map[string]*Contract) + for name, info := range output { + // Parse the individual compilation results. + if name == "version" { + continue + } + c := info.(map[string]interface{}) + + contracts[name] = &Contract{ + Code: c["bytecode"].(string), + RuntimeCode: c["bytecode_runtime"].(string), + Info: ContractInfo{ + Source: source, + Language: "Vyper", + LanguageVersion: languageVersion, + CompilerVersion: compilerVersion, + CompilerOptions: compilerOptions, + SrcMap: c["source_map"], + SrcMapRuntime: "", + AbiDefinition: c["abi"], + UserDoc: "", + DeveloperDoc: "", + Metadata: "", + }, + } + } + return contracts, nil +} diff --git a/common/compiler/vyper_test.go b/common/compiler/vyper_test.go new file mode 100644 index 000000000000..7761c92affc5 --- /dev/null +++ b/common/compiler/vyper_test.go @@ -0,0 +1,71 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package compiler + +import ( + "os/exec" + "testing" +) + +func skipWithoutVyper(t *testing.T) { + if _, err := exec.LookPath("vyper"); err != nil { + t.Skip(err) + } +} + +func TestVyperCompiler(t *testing.T) { + skipWithoutVyper(t) + + testSource := []string{"test.v.py"} + source, err := slurpFiles(testSource) + if err != nil { + t.Error("couldn't read test files") + } + contracts, err := CompileVyper("", testSource...) + if err != nil { + t.Fatalf("error compiling test.v.py. result %v: %v", contracts, err) + } + if len(contracts) != 1 { + t.Errorf("one contract expected, got %d", len(contracts)) + } + c, ok := contracts["test.v.py"] + if !ok { + c, ok = contracts[":test"] + if !ok { + t.Fatal("info for contract 'test.v.py' not present in result") + } + } + if c.Code == "" { + t.Error("empty code") + } + if c.Info.Source != source { + t.Error("wrong source") + } + if c.Info.CompilerVersion == "" { + t.Error("empty version") + } +} + +func TestVyperCompileError(t *testing.T) { + skipWithoutVyper(t) + + contracts, err := CompileVyper("", "test_bad.v.py") + if err == nil { + t.Errorf("error expected compiling test_bad.v.py. got none. result %v", contracts) + } + t.Logf("error: %v", err) +} diff --git a/common/fdlimit/fdlimit_darwin.go b/common/fdlimit/fdlimit_darwin.go new file mode 100644 index 000000000000..6b26fa00f12c --- /dev/null +++ b/common/fdlimit/fdlimit_darwin.go @@ -0,0 +1,71 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fdlimit + +import "syscall" + +// hardlimit is the number of file descriptors allowed at max by the kernel. +const hardlimit = 10240 + +// Raise tries to maximize the file descriptor allowance of this process +// to the maximum hard-limit allowed by the OS. +// Returns the size it was set to (may differ from the desired 'max') +func Raise(max uint64) (uint64, error) { + // Get the current limit + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Try to update the limit to the max allowance + limit.Cur = limit.Max + if limit.Cur > max { + limit.Cur = max + } + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // MacOS can silently apply further caps, so retrieve the actually set limit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return limit.Cur, nil +} + +// Current retrieves the number of file descriptors allowed to be opened by this +// process. +func Current() (int, error) { + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + return int(limit.Cur), nil +} + +// Maximum retrieves the maximum number of file descriptors this process is +// allowed to request for itself. +func Maximum() (int, error) { + // Retrieve the maximum allowed by dynamic OS limits + var limit syscall.Rlimit + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { + return 0, err + } + // Cap it to OPEN_MAX (10240) because macos is a special snowflake + if limit.Max > hardlimit { + limit.Max = hardlimit + } + return int(limit.Max), nil +} diff --git a/common/fdlimit/fdlimit_freebsd.go b/common/fdlimit/fdlimit_freebsd.go index 5da4342379fa..0d8727138e6d 100644 --- a/common/fdlimit/fdlimit_freebsd.go +++ b/common/fdlimit/fdlimit_freebsd.go @@ -43,7 +43,7 @@ func Raise(max uint64) (uint64, error) { if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil { return 0, err } - return limit.Cur, nil + return uint64(limit.Cur), nil } // Current retrieves the number of file descriptors allowed to be opened by this diff --git a/common/fdlimit/fdlimit_unix.go b/common/fdlimit/fdlimit_unix.go index 670112751554..e5a575f7a79d 100644 --- a/common/fdlimit/fdlimit_unix.go +++ b/common/fdlimit/fdlimit_unix.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build linux darwin netbsd openbsd solaris +// +build linux netbsd openbsd solaris package fdlimit diff --git a/common/fdlimit/fdlimit_windows.go b/common/fdlimit/fdlimit_windows.go index 63a44e0de05b..f472153662e6 100644 --- a/common/fdlimit/fdlimit_windows.go +++ b/common/fdlimit/fdlimit_windows.go @@ -18,6 +18,7 @@ package fdlimit import "fmt" +// hardlimit is the number of file descriptors allowed at max by the kernel. const hardlimit = 16384 // Raise tries to maximize the file descriptor allowance of this process diff --git a/common/hexutil/json.go b/common/hexutil/json.go index fbc21241c8ad..777b08eca42a 100644 --- a/common/hexutil/json.go +++ b/common/hexutil/json.go @@ -72,6 +72,25 @@ func (b Bytes) String() string { return Encode(b) } +// ImplementsGraphQLType returns true if Bytes implements the specified GraphQL type. +func (b Bytes) ImplementsGraphQLType(name string) bool { return name == "Bytes" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Bytes) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + data, err := Decode(input) + if err != nil { + return err + } + *b = data + default: + err = fmt.Errorf("Unexpected type for Bytes: %v", input) + } + return err +} + // UnmarshalFixedJSON decodes the input as a string with 0x prefix. The length of out // determines the required input length. This function is commonly used to implement the // UnmarshalJSON method for fixed-size types. @@ -187,6 +206,25 @@ func (b *Big) String() string { return EncodeBig(b.ToInt()) } +// ImplementsGraphQLType returns true if Big implements the provided GraphQL type. +func (b Big) ImplementsGraphQLType(name string) bool { return name == "BigInt" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Big) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + return b.UnmarshalText([]byte(input)) + case int32: + var num big.Int + num.SetInt64(int64(input)) + *b = Big(num) + default: + err = fmt.Errorf("Unexpected type for BigInt: %v", input) + } + return err +} + // Uint64 marshals/unmarshals as a JSON string with 0x prefix. // The zero value marshals as "0x0". type Uint64 uint64 @@ -234,6 +272,23 @@ func (b Uint64) String() string { return EncodeUint64(uint64(b)) } +// ImplementsGraphQLType returns true if Uint64 implements the provided GraphQL type. +func (b Uint64) ImplementsGraphQLType(name string) bool { return name == "Long" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (b *Uint64) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + return b.UnmarshalText([]byte(input)) + case int32: + *b = Uint64(input) + default: + err = fmt.Errorf("Unexpected type for Long: %v", input) + } + return err +} + // Uint marshals/unmarshals as a JSON string with 0x prefix. // The zero value marshals as "0x0". type Uint uint diff --git a/common/math/big.go b/common/math/big.go index 9d2e7946d155..d31c59af10ab 100644 --- a/common/math/big.go +++ b/common/math/big.go @@ -42,6 +42,13 @@ const ( // HexOrDecimal256 marshals big.Int as hex or decimal. type HexOrDecimal256 big.Int +// NewHexOrDecimal256 creates a new HexOrDecimal256 +func NewHexOrDecimal256(x int64) *HexOrDecimal256 { + b := big.NewInt(x) + h := HexOrDecimal256(*b) + return &h +} + // UnmarshalText implements encoding.TextUnmarshaler. func (i *HexOrDecimal256) UnmarshalText(input []byte) error { bigint, ok := ParseBig256(string(input)) diff --git a/common/mclock/mclock.go b/common/mclock/mclock.go index dcac59c6ceaa..d0e0cd78be96 100644 --- a/common/mclock/mclock.go +++ b/common/mclock/mclock.go @@ -36,28 +36,39 @@ func (t AbsTime) Add(d time.Duration) AbsTime { return t + AbsTime(d) } -// Clock interface makes it possible to replace the monotonic system clock with +// The Clock interface makes it possible to replace the monotonic system clock with // a simulated clock. type Clock interface { Now() AbsTime Sleep(time.Duration) After(time.Duration) <-chan time.Time + AfterFunc(d time.Duration, f func()) Timer +} + +// Timer represents a cancellable event returned by AfterFunc +type Timer interface { + Stop() bool } // System implements Clock using the system clock. type System struct{} -// Now implements Clock. +// Now returns the current monotonic time. func (System) Now() AbsTime { return AbsTime(monotime.Now()) } -// Sleep implements Clock. +// Sleep blocks for the given duration. func (System) Sleep(d time.Duration) { time.Sleep(d) } -// After implements Clock. +// After returns a channel which receives the current time after d has elapsed. func (System) After(d time.Duration) <-chan time.Time { return time.After(d) } + +// AfterFunc runs f on a new goroutine after the duration has elapsed. +func (System) AfterFunc(d time.Duration, f func()) Timer { + return time.AfterFunc(d, f) +} diff --git a/common/mclock/simclock.go b/common/mclock/simclock.go index e014f56150ea..4d351252ff32 100644 --- a/common/mclock/simclock.go +++ b/common/mclock/simclock.go @@ -32,35 +32,45 @@ import ( // the timeout using a channel or semaphore. type Simulated struct { now AbsTime - scheduled []event + scheduled []*simTimer mu sync.RWMutex cond *sync.Cond + lastId uint64 } -type event struct { +// simTimer implements Timer on the virtual clock. +type simTimer struct { do func() at AbsTime + id uint64 + s *Simulated } // Run moves the clock by the given duration, executing all timers before that duration. func (s *Simulated) Run(d time.Duration) { s.mu.Lock() - defer s.mu.Unlock() s.init() end := s.now + AbsTime(d) + var do []func() for len(s.scheduled) > 0 { ev := s.scheduled[0] if ev.at > end { break } s.now = ev.at - ev.do() + do = append(do, ev.do) s.scheduled = s.scheduled[1:] } s.now = end + s.mu.Unlock() + + for _, fn := range do { + fn() + } } +// ActiveTimers returns the number of timers that haven't fired. func (s *Simulated) ActiveTimers() int { s.mu.RLock() defer s.mu.RUnlock() @@ -68,6 +78,7 @@ func (s *Simulated) ActiveTimers() int { return len(s.scheduled) } +// WaitForTimers waits until the clock has at least n scheduled timers. func (s *Simulated) WaitForTimers(n int) { s.mu.Lock() defer s.mu.Unlock() @@ -78,7 +89,7 @@ func (s *Simulated) WaitForTimers(n int) { } } -// Now implements Clock. +// Now returns the current virtual time. func (s *Simulated) Now() AbsTime { s.mu.RLock() defer s.mu.RUnlock() @@ -86,40 +97,62 @@ func (s *Simulated) Now() AbsTime { return s.now } -// Sleep implements Clock. +// Sleep blocks until the clock has advanced by d. func (s *Simulated) Sleep(d time.Duration) { <-s.After(d) } -// After implements Clock. +// After returns a channel which receives the current time after the clock +// has advanced by d. func (s *Simulated) After(d time.Duration) <-chan time.Time { after := make(chan time.Time, 1) - s.insert(d, func() { + s.AfterFunc(d, func() { after <- (time.Time{}).Add(time.Duration(s.now)) }) return after } -func (s *Simulated) insert(d time.Duration, do func()) { +// AfterFunc runs fn after the clock has advanced by d. Unlike with the system +// clock, fn runs on the goroutine that calls Run. +func (s *Simulated) AfterFunc(d time.Duration, fn func()) Timer { s.mu.Lock() defer s.mu.Unlock() s.init() at := s.now + AbsTime(d) + s.lastId++ + id := s.lastId l, h := 0, len(s.scheduled) ll := h for l != h { m := (l + h) / 2 - if at < s.scheduled[m].at { + if (at < s.scheduled[m].at) || ((at == s.scheduled[m].at) && (id < s.scheduled[m].id)) { h = m } else { l = m + 1 } } - s.scheduled = append(s.scheduled, event{}) + ev := &simTimer{do: fn, at: at, s: s} + s.scheduled = append(s.scheduled, nil) copy(s.scheduled[l+1:], s.scheduled[l:ll]) - s.scheduled[l] = event{do: do, at: at} + s.scheduled[l] = ev s.cond.Broadcast() + return ev +} + +func (ev *simTimer) Stop() bool { + s := ev.s + s.mu.Lock() + defer s.mu.Unlock() + + for i := 0; i < len(s.scheduled); i++ { + if s.scheduled[i] == ev { + s.scheduled = append(s.scheduled[:i], s.scheduled[i+1:]...) + s.cond.Broadcast() + return true + } + } + return false } func (s *Simulated) init() { diff --git a/common/mclock/simclock_test.go b/common/mclock/simclock_test.go new file mode 100644 index 000000000000..09e4391c1c09 --- /dev/null +++ b/common/mclock/simclock_test.go @@ -0,0 +1,115 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package mclock + +import ( + "testing" + "time" +) + +var _ Clock = System{} +var _ Clock = new(Simulated) + +func TestSimulatedAfter(t *testing.T) { + const timeout = 30 * time.Minute + const adv = time.Minute + + var ( + c Simulated + end = c.Now().Add(timeout) + ch = c.After(timeout) + ) + for c.Now() < end.Add(-adv) { + c.Run(adv) + select { + case <-ch: + t.Fatal("Timer fired early") + default: + } + } + + c.Run(adv) + select { + case stamp := <-ch: + want := time.Time{}.Add(timeout) + if !stamp.Equal(want) { + t.Errorf("Wrong time sent on timer channel: got %v, want %v", stamp, want) + } + default: + t.Fatal("Timer didn't fire") + } +} + +func TestSimulatedAfterFunc(t *testing.T) { + var c Simulated + + called1 := false + timer1 := c.AfterFunc(100*time.Millisecond, func() { called1 = true }) + if c.ActiveTimers() != 1 { + t.Fatalf("%d active timers, want one", c.ActiveTimers()) + } + if fired := timer1.Stop(); !fired { + t.Fatal("Stop returned false even though timer didn't fire") + } + if c.ActiveTimers() != 0 { + t.Fatalf("%d active timers, want zero", c.ActiveTimers()) + } + if called1 { + t.Fatal("timer 1 called") + } + if fired := timer1.Stop(); fired { + t.Fatal("Stop returned true after timer was already stopped") + } + + called2 := false + timer2 := c.AfterFunc(100*time.Millisecond, func() { called2 = true }) + c.Run(50 * time.Millisecond) + if called2 { + t.Fatal("timer 2 called") + } + c.Run(51 * time.Millisecond) + if !called2 { + t.Fatal("timer 2 not called") + } + if fired := timer2.Stop(); fired { + t.Fatal("Stop returned true after timer has fired") + } +} + +func TestSimulatedSleep(t *testing.T) { + var ( + c Simulated + timeout = 1 * time.Hour + done = make(chan AbsTime) + ) + go func() { + c.Sleep(timeout) + done <- c.Now() + }() + + c.WaitForTimers(1) + c.Run(2 * timeout) + select { + case stamp := <-done: + want := AbsTime(2 * timeout) + if stamp != want { + t.Errorf("Wrong time after sleep: got %v, want %v", stamp, want) + } + case <-time.After(5 * time.Second): + t.Fatal("Sleep didn't return in time") + } +} diff --git a/common/prque/lazyqueue.go b/common/prque/lazyqueue.go new file mode 100644 index 000000000000..92ddd77f677a --- /dev/null +++ b/common/prque/lazyqueue.go @@ -0,0 +1,182 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package prque + +import ( + "container/heap" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +// LazyQueue is a priority queue data structure where priorities can change over +// time and are only evaluated on demand. +// Two callbacks are required: +// - priority evaluates the actual priority of an item +// - maxPriority gives an upper estimate for the priority in any moment between +// now and the given absolute time +// If the upper estimate is exceeded then Update should be called for that item. +// A global Refresh function should also be called periodically. +type LazyQueue struct { + clock mclock.Clock + // Items are stored in one of two internal queues ordered by estimated max + // priority until the next and the next-after-next refresh. Update and Refresh + // always places items in queue[1]. + queue [2]*sstack + popQueue *sstack + period time.Duration + maxUntil mclock.AbsTime + indexOffset int + setIndex SetIndexCallback + priority PriorityCallback + maxPriority MaxPriorityCallback +} + +type ( + PriorityCallback func(data interface{}, now mclock.AbsTime) int64 // actual priority callback + MaxPriorityCallback func(data interface{}, until mclock.AbsTime) int64 // estimated maximum priority callback +) + +// NewLazyQueue creates a new lazy queue +func NewLazyQueue(setIndex SetIndexCallback, priority PriorityCallback, maxPriority MaxPriorityCallback, clock mclock.Clock, refreshPeriod time.Duration) *LazyQueue { + q := &LazyQueue{ + popQueue: newSstack(nil), + setIndex: setIndex, + priority: priority, + maxPriority: maxPriority, + clock: clock, + period: refreshPeriod} + q.Reset() + q.Refresh() + return q +} + +// Reset clears the contents of the queue +func (q *LazyQueue) Reset() { + q.queue[0] = newSstack(q.setIndex0) + q.queue[1] = newSstack(q.setIndex1) +} + +// Refresh should be called at least with the frequency specified by the refreshPeriod parameter +func (q *LazyQueue) Refresh() { + q.maxUntil = q.clock.Now() + mclock.AbsTime(q.period) + for q.queue[0].Len() != 0 { + q.Push(heap.Pop(q.queue[0]).(*item).value) + } + q.queue[0], q.queue[1] = q.queue[1], q.queue[0] + q.indexOffset = 1 - q.indexOffset + q.maxUntil += mclock.AbsTime(q.period) +} + +// Push adds an item to the queue +func (q *LazyQueue) Push(data interface{}) { + heap.Push(q.queue[1], &item{data, q.maxPriority(data, q.maxUntil)}) +} + +// Update updates the upper priority estimate for the item with the given queue index +func (q *LazyQueue) Update(index int) { + q.Push(q.Remove(index)) +} + +// Pop removes and returns the item with the greatest actual priority +func (q *LazyQueue) Pop() (interface{}, int64) { + var ( + resData interface{} + resPri int64 + ) + q.MultiPop(func(data interface{}, priority int64) bool { + resData = data + resPri = priority + return false + }) + return resData, resPri +} + +// peekIndex returns the index of the internal queue where the item with the +// highest estimated priority is or -1 if both are empty +func (q *LazyQueue) peekIndex() int { + if q.queue[0].Len() != 0 { + if q.queue[1].Len() != 0 && q.queue[1].blocks[0][0].priority > q.queue[0].blocks[0][0].priority { + return 1 + } + return 0 + } + if q.queue[1].Len() != 0 { + return 1 + } + return -1 +} + +// MultiPop pops multiple items from the queue and is more efficient than calling +// Pop multiple times. Popped items are passed to the callback. MultiPop returns +// when the callback returns false or there are no more items to pop. +func (q *LazyQueue) MultiPop(callback func(data interface{}, priority int64) bool) { + now := q.clock.Now() + nextIndex := q.peekIndex() + for nextIndex != -1 { + data := heap.Pop(q.queue[nextIndex]).(*item).value + heap.Push(q.popQueue, &item{data, q.priority(data, now)}) + nextIndex = q.peekIndex() + for q.popQueue.Len() != 0 && (nextIndex == -1 || q.queue[nextIndex].blocks[0][0].priority < q.popQueue.blocks[0][0].priority) { + i := heap.Pop(q.popQueue).(*item) + if !callback(i.value, i.priority) { + for q.popQueue.Len() != 0 { + q.Push(heap.Pop(q.popQueue).(*item).value) + } + return + } + } + } +} + +// PopItem pops the item from the queue only, dropping the associated priority value. +func (q *LazyQueue) PopItem() interface{} { + i, _ := q.Pop() + return i +} + +// Remove removes removes the item with the given index. +func (q *LazyQueue) Remove(index int) interface{} { + if index < 0 { + return nil + } + return heap.Remove(q.queue[index&1^q.indexOffset], index>>1).(*item).value +} + +// Empty checks whether the priority queue is empty. +func (q *LazyQueue) Empty() bool { + return q.queue[0].Len() == 0 && q.queue[1].Len() == 0 +} + +// Size returns the number of items in the priority queue. +func (q *LazyQueue) Size() int { + return q.queue[0].Len() + q.queue[1].Len() +} + +// setIndex0 translates internal queue item index to the virtual index space of LazyQueue +func (q *LazyQueue) setIndex0(data interface{}, index int) { + if index == -1 { + q.setIndex(data, -1) + } else { + q.setIndex(data, index+index) + } +} + +// setIndex1 translates internal queue item index to the virtual index space of LazyQueue +func (q *LazyQueue) setIndex1(data interface{}, index int) { + q.setIndex(data, index+index+1) +} diff --git a/common/prque/lazyqueue_test.go b/common/prque/lazyqueue_test.go new file mode 100644 index 000000000000..0bd4fc65972e --- /dev/null +++ b/common/prque/lazyqueue_test.go @@ -0,0 +1,119 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package prque + +import ( + "math/rand" + "sync" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +const ( + testItems = 1000 + testPriorityStep = 100 + testSteps = 1000000 + testStepPeriod = time.Millisecond + testQueueRefresh = time.Second + testAvgRate = float64(testPriorityStep) / float64(testItems) / float64(testStepPeriod) +) + +type lazyItem struct { + p, maxp int64 + last mclock.AbsTime + index int +} + +func testPriority(a interface{}, now mclock.AbsTime) int64 { + return a.(*lazyItem).p +} + +func testMaxPriority(a interface{}, until mclock.AbsTime) int64 { + i := a.(*lazyItem) + dt := until - i.last + i.maxp = i.p + int64(float64(dt)*testAvgRate) + return i.maxp +} + +func testSetIndex(a interface{}, i int) { + a.(*lazyItem).index = i +} + +func TestLazyQueue(t *testing.T) { + rand.Seed(time.Now().UnixNano()) + clock := &mclock.Simulated{} + q := NewLazyQueue(testSetIndex, testPriority, testMaxPriority, clock, testQueueRefresh) + + var ( + items [testItems]lazyItem + maxPri int64 + ) + + for i := range items[:] { + items[i].p = rand.Int63n(testPriorityStep * 10) + if items[i].p > maxPri { + maxPri = items[i].p + } + items[i].index = -1 + q.Push(&items[i]) + } + + var lock sync.Mutex + stopCh := make(chan chan struct{}) + go func() { + for { + select { + case <-clock.After(testQueueRefresh): + lock.Lock() + q.Refresh() + lock.Unlock() + case stop := <-stopCh: + close(stop) + return + } + } + }() + + for c := 0; c < testSteps; c++ { + i := rand.Intn(testItems) + lock.Lock() + items[i].p += rand.Int63n(testPriorityStep*2-1) + 1 + if items[i].p > maxPri { + maxPri = items[i].p + } + items[i].last = clock.Now() + if items[i].p > items[i].maxp { + q.Update(items[i].index) + } + if rand.Intn(100) == 0 { + p := q.PopItem().(*lazyItem) + if p.p != maxPri { + t.Fatalf("incorrect item (best known priority %d, popped %d)", maxPri, p.p) + } + q.Push(p) + } + lock.Unlock() + clock.Run(testStepPeriod) + clock.WaitForTimers(1) + } + + stop := make(chan struct{}) + stopCh <- stop + <-stop +} diff --git a/common/prque/prque.go b/common/prque/prque.go index 9fd31a2e5d1f..3cc5a1adaf15 100755 --- a/common/prque/prque.go +++ b/common/prque/prque.go @@ -1,5 +1,20 @@ +// CookieJar - A contestant's algorithm toolbox +// Copyright (c) 2013 Peter Szilagyi. All rights reserved. +// +// CookieJar is dual licensed: use of this source code is governed by a BSD +// license that can be found in the LICENSE file. Alternatively, the CookieJar +// toolbox may be used in accordance with the terms and conditions contained +// in a signed written agreement between you and the author(s). + // This is a duplicated and slightly modified version of "gopkg.in/karalabe/cookiejar.v2/collections/prque". +// Package prque implements a priority queue data structure supporting arbitrary +// value types and int64 priorities. +// +// If you would like to use a min-priority queue, simply negate the priorities. +// +// Internally the queue is based on the standard heap package working on a +// sortable version of the block based stack. package prque import ( @@ -11,8 +26,8 @@ type Prque struct { cont *sstack } -// Creates a new priority queue. -func New(setIndex setIndexCallback) *Prque { +// New creates a new priority queue. +func New(setIndex SetIndexCallback) *Prque { return &Prque{newSstack(setIndex)} } @@ -21,6 +36,12 @@ func (p *Prque) Push(data interface{}, priority int64) { heap.Push(p.cont, &item{data, priority}) } +// Peek returns the value with the greates priority but does not pop it off. +func (p *Prque) Peek() (interface{}, int64) { + item := p.cont.blocks[0][0] + return item.value, item.priority +} + // Pops the value with the greates priority off the stack and returns it. // Currently no shrinking is done. func (p *Prque) Pop() (interface{}, int64) { diff --git a/common/prque/sstack.go b/common/prque/sstack.go index 4875dae99d96..8518af54ff1a 100755 --- a/common/prque/sstack.go +++ b/common/prque/sstack.go @@ -1,3 +1,11 @@ +// CookieJar - A contestant's algorithm toolbox +// Copyright (c) 2013 Peter Szilagyi. All rights reserved. +// +// CookieJar is dual licensed: use of this source code is governed by a BSD +// license that can be found in the LICENSE file. Alternatively, the CookieJar +// toolbox may be used in accordance with the terms and conditions contained +// in a signed written agreement between you and the author(s). + // This is a duplicated and slightly modified version of "gopkg.in/karalabe/cookiejar.v2/collections/prque". package prque @@ -14,16 +22,16 @@ type item struct { priority int64 } -// setIndexCallback is called when the element is moved to a new index. -// Providing setIndexCallback is optional, it is needed only if the application needs +// SetIndexCallback is called when the element is moved to a new index. +// Providing SetIndexCallback is optional, it is needed only if the application needs // to delete elements other than the top one. -type setIndexCallback func(a interface{}, i int) +type SetIndexCallback func(data interface{}, index int) // Internal sortable stack data structure. Implements the Push and Pop ops for // the stack (heap) functionality and the Len, Less and Swap methods for the // sortability requirements of the heaps. type sstack struct { - setIndex setIndexCallback + setIndex SetIndexCallback size int capacity int offset int @@ -33,7 +41,7 @@ type sstack struct { } // Creates a new, empty stack. -func newSstack(setIndex setIndexCallback) *sstack { +func newSstack(setIndex SetIndexCallback) *sstack { result := new(sstack) result.setIndex = setIndex result.active = make([]*item, blockSize) diff --git a/common/size.go b/common/size.go index bd0fc85c7dcc..097b6304a8d0 100644 --- a/common/size.go +++ b/common/size.go @@ -26,10 +26,14 @@ type StorageSize float64 // String implements the stringer interface. func (s StorageSize) String() string { - if s > 1000000 { - return fmt.Sprintf("%.2f mB", s/1000000) - } else if s > 1000 { - return fmt.Sprintf("%.2f kB", s/1000) + if s > 1099511627776 { + return fmt.Sprintf("%.2f TiB", s/1099511627776) + } else if s > 1073741824 { + return fmt.Sprintf("%.2f GiB", s/1073741824) + } else if s > 1048576 { + return fmt.Sprintf("%.2f MiB", s/1048576) + } else if s > 1024 { + return fmt.Sprintf("%.2f KiB", s/1024) } else { return fmt.Sprintf("%.2f B", s) } @@ -38,10 +42,14 @@ func (s StorageSize) String() string { // TerminalString implements log.TerminalStringer, formatting a string for console // output during logging. func (s StorageSize) TerminalString() string { - if s > 1000000 { - return fmt.Sprintf("%.2fmB", s/1000000) - } else if s > 1000 { - return fmt.Sprintf("%.2fkB", s/1000) + if s > 1099511627776 { + return fmt.Sprintf("%.2fTiB", s/1099511627776) + } else if s > 1073741824 { + return fmt.Sprintf("%.2fGiB", s/1073741824) + } else if s > 1048576 { + return fmt.Sprintf("%.2fMiB", s/1048576) + } else if s > 1024 { + return fmt.Sprintf("%.2fKiB", s/1024) } else { return fmt.Sprintf("%.2fB", s) } diff --git a/common/size_test.go b/common/size_test.go index f5b6c725e237..0938d483c4bb 100644 --- a/common/size_test.go +++ b/common/size_test.go @@ -25,8 +25,8 @@ func TestStorageSizeString(t *testing.T) { size StorageSize str string }{ - {2381273, "2.38 mB"}, - {2192, "2.19 kB"}, + {2381273, "2.27 MiB"}, + {2192, "2.14 KiB"}, {12, "12.00 B"}, } diff --git a/common/types.go b/common/types.go index 0f4892d28758..8ca51a05f8c1 100644 --- a/common/types.go +++ b/common/types.go @@ -141,6 +141,21 @@ func (h Hash) Value() (driver.Value, error) { return h[:], nil } +// ImplementsGraphQLType returns true if Hash implements the specified GraphQL type. +func (_ Hash) ImplementsGraphQLType(name string) bool { return name == "Bytes32" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (h *Hash) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + err = h.UnmarshalText([]byte(input)) + default: + err = fmt.Errorf("Unexpected type for Bytes32: %v", input) + } + return err +} + // UnprefixedHash allows marshaling a Hash without 0x prefix. type UnprefixedHash Hash @@ -178,7 +193,7 @@ func HexToAddress(s string) Address { return BytesToAddress(FromHex(s)) } // IsHexAddress verifies whether a string can represent a valid hex-encoded // Ethereum address or not. func IsHexAddress(s string) bool { - if hasHexPrefix(s) { + if has0xPrefix(s) { s = s[2:] } return len(s) == 2*AddressLength && isHex(s) @@ -187,9 +202,6 @@ func IsHexAddress(s string) bool { // Bytes gets the string representation of the underlying address. func (a Address) Bytes() []byte { return a[:] } -// Big converts an address to a big integer. -func (a Address) Big() *big.Int { return new(big.Int).SetBytes(a[:]) } - // Hash converts an address to a hash by left-padding it with zeros. func (a Address) Hash() Hash { return BytesToHash(a[:]) } @@ -268,6 +280,21 @@ func (a Address) Value() (driver.Value, error) { return a[:], nil } +// ImplementsGraphQLType returns true if Hash implements the specified GraphQL type. +func (a Address) ImplementsGraphQLType(name string) bool { return name == "Address" } + +// UnmarshalGraphQL unmarshals the provided GraphQL query data. +func (a *Address) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + err = a.UnmarshalText([]byte(input)) + default: + err = fmt.Errorf("Unexpected type for Address: %v", input) + } + return err +} + // UnprefixedAddress allows marshaling an Address without 0x prefix. type UnprefixedAddress Address diff --git a/common/types_test.go b/common/types_test.go index 7095ccd0191b..fffd673c6ee2 100644 --- a/common/types_test.go +++ b/common/types_test.go @@ -114,8 +114,8 @@ func TestAddressUnmarshalJSON(t *testing.T) { if test.ShouldErr { t.Errorf("test #%d: expected error, got none", i) } - if v.Big().Cmp(test.Output) != 0 { - t.Errorf("test #%d: address mismatch: have %v, want %v", i, v.Big(), test.Output) + if got := new(big.Int).SetBytes(v.Bytes()); got.Cmp(test.Output) != 0 { + t.Errorf("test #%d: address mismatch: have %v, want %v", i, got, test.Output) } } } diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index c79c30caed65..02b6da35b29b 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -20,6 +20,7 @@ package clique import ( "bytes" "errors" + "io" "math/big" "math/rand" "sync" @@ -54,8 +55,8 @@ const ( var ( epochLength = uint64(30000) // Default number of blocks after which to checkpoint and reset the pending votes - extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity - extraSeal = 65 // Fixed number of extra-data suffix bytes reserved for signer seal + extraVanity = 32 // Fixed number of extra-data prefix bytes reserved for signer vanity + extraSeal = crypto.SignatureLength // Fixed number of extra-data suffix bytes reserved for signer seal nonceAuthVote = hexutil.MustDecode("0xffffffffffffffff") // Magic nonce number to vote on adding a new signer nonceDropVote = hexutil.MustDecode("0x0000000000000000") // Magic nonce number to vote on removing a signer. @@ -136,40 +137,9 @@ var ( errRecentlySigned = errors.New("recently signed") ) -// SignerFn is a signer callback function to request a hash to be signed by a +// SignerFn is a signer callback function to request a header to be signed by a // backing account. -type SignerFn func(accounts.Account, []byte) ([]byte, error) - -// sigHash returns the hash which is used as input for the proof-of-authority -// signing. It is the hash of the entire header apart from the 65 byte signature -// contained at the end of the extra data. -// -// Note, the method requires the extra data to be at least 65 bytes, otherwise it -// panics. This is done to avoid accidentally using both forms (signature present -// or not), which could be abused to produce different hashes for the same header. -func sigHash(header *types.Header) (hash common.Hash) { - hasher := sha3.NewLegacyKeccak256() - - rlp.Encode(hasher, []interface{}{ - header.ParentHash, - header.UncleHash, - header.Coinbase, - header.Root, - header.TxHash, - header.ReceiptHash, - header.Bloom, - header.Difficulty, - header.Number, - header.GasLimit, - header.GasUsed, - header.Time, - header.Extra[:len(header.Extra)-65], // Yes, this will panic if extra is too short - header.MixDigest, - header.Nonce, - }) - hasher.Sum(hash[:0]) - return hash -} +type SignerFn func(accounts.Account, string, []byte) ([]byte, error) // ecrecover extracts the Ethereum account address from a signed header. func ecrecover(header *types.Header, sigcache *lru.ARCCache) (common.Address, error) { @@ -185,7 +155,7 @@ func ecrecover(header *types.Header, sigcache *lru.ARCCache) (common.Address, er signature := header.Extra[len(header.Extra)-extraSeal:] // Recover the public key and the Ethereum address - pubkey, err := crypto.Ecrecover(sigHash(header).Bytes(), signature) + pubkey, err := crypto.Ecrecover(SealHash(header).Bytes(), signature) if err != nil { return common.Address{}, err } @@ -279,7 +249,7 @@ func (c *Clique) verifyHeader(chain consensus.ChainReader, header *types.Header, number := header.Number.Uint64() // Don't waste time checking blocks from the future - if header.Time.Cmp(big.NewInt(time.Now().Unix())) > 0 { + if header.Time > uint64(time.Now().Unix()) { return consensus.ErrFutureBlock } // Checkpoint blocks need to enforce zero beneficiary @@ -351,7 +321,7 @@ func (c *Clique) verifyCascadingFields(chain consensus.ChainReader, header *type if parent == nil || parent.Number.Uint64() != number-1 || parent.Hash() != header.ParentHash { return consensus.ErrUnknownAncestor } - if parent.Time.Uint64()+c.config.Period > header.Time.Uint64() { + if parent.Time+c.config.Period > header.Time { return ErrInvalidTimestamp } // Retrieve the snapshot needed to verify this header and cache it @@ -395,8 +365,11 @@ func (c *Clique) snapshot(chain consensus.ChainReader, number uint64, hash commo break } } - // If we're at an checkpoint block, make a snapshot if it's known - if number == 0 || (number%c.config.Epoch == 0 && chain.GetHeaderByNumber(number-1) == nil) { + // If we're at the genesis, snapshot the initial state. Alternatively if we're + // at a checkpoint block without a parent (light client CHT), or we have piled + // up more headers than allowed to be reorged (chain reinit from a freezer), + // consider the checkpoint trusted and snapshot it. + if number == 0 || (number%c.config.Epoch == 0 && (len(headers) > params.ImmutabilityThreshold || chain.GetHeaderByNumber(number-1) == nil)) { checkpoint := chain.GetHeaderByNumber(number) if checkpoint != nil { hash := checkpoint.Hash() @@ -570,16 +543,24 @@ func (c *Clique) Prepare(chain consensus.ChainReader, header *types.Header) erro if parent == nil { return consensus.ErrUnknownAncestor } - header.Time = new(big.Int).Add(parent.Time, new(big.Int).SetUint64(c.config.Period)) - if header.Time.Int64() < time.Now().Unix() { - header.Time = big.NewInt(time.Now().Unix()) + header.Time = parent.Time + c.config.Period + if header.Time < uint64(time.Now().Unix()) { + header.Time = uint64(time.Now().Unix()) } return nil } // Finalize implements consensus.Engine, ensuring no uncles are set, nor block -// rewards given, and returns the final block. -func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +// rewards given. +func (c *Clique) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { + // No block rewards in PoA, so the state remains as is and uncles are dropped + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) + header.UncleHash = types.CalcUncleHash(nil) +} + +// FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, +// nor block rewards given, and returns the final block. +func (c *Clique) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { // No block rewards in PoA, so the state remains as is and uncles are dropped header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) header.UncleHash = types.CalcUncleHash(nil) @@ -637,7 +618,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c } } // Sweet, the protocol permits us to sign the block, wait for our time - delay := time.Unix(header.Time.Int64(), 0).Sub(time.Now()) // nolint: gosimple + delay := time.Unix(int64(header.Time), 0).Sub(time.Now()) // nolint: gosimple if header.Difficulty.Cmp(diffNoTurn) == 0 { // It's not our turn explicitly to sign, delay it a bit wiggle := time.Duration(len(snap.Signers)/2+1) * wiggleTime @@ -646,7 +627,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c log.Trace("Out-of-turn signing requested", "wiggle", common.PrettyDuration(wiggle)) } // Sign all the things! - sighash, err := signFn(accounts.Account{Address: signer}, sigHash(header).Bytes()) + sighash, err := signFn(accounts.Account{Address: signer}, accounts.MimetypeClique, CliqueRLP(header)) if err != nil { return err } @@ -663,7 +644,7 @@ func (c *Clique) Seal(chain consensus.ChainReader, block *types.Block, results c select { case results <- block.WithSeal(header): default: - log.Warn("Sealing result is not read by miner", "sealhash", c.SealHash(header)) + log.Warn("Sealing result is not read by miner", "sealhash", SealHash(header)) } }() @@ -693,7 +674,7 @@ func CalcDifficulty(snap *Snapshot, signer common.Address) *big.Int { // SealHash returns the hash of a block prior to it being sealed. func (c *Clique) SealHash(header *types.Header) common.Hash { - return sigHash(header) + return SealHash(header) } // Close implements consensus.Engine. It's a noop for clique as there are no background threads. @@ -711,3 +692,47 @@ func (c *Clique) APIs(chain consensus.ChainReader) []rpc.API { Public: false, }} } + +// SealHash returns the hash of a block prior to it being sealed. +func SealHash(header *types.Header) (hash common.Hash) { + hasher := sha3.NewLegacyKeccak256() + encodeSigHeader(hasher, header) + hasher.Sum(hash[:0]) + return hash +} + +// CliqueRLP returns the rlp bytes which needs to be signed for the proof-of-authority +// sealing. The RLP to sign consists of the entire header apart from the 65 byte signature +// contained at the end of the extra data. +// +// Note, the method requires the extra data to be at least 65 bytes, otherwise it +// panics. This is done to avoid accidentally using both forms (signature present +// or not), which could be abused to produce different hashes for the same header. +func CliqueRLP(header *types.Header) []byte { + b := new(bytes.Buffer) + encodeSigHeader(b, header) + return b.Bytes() +} + +func encodeSigHeader(w io.Writer, header *types.Header) { + err := rlp.Encode(w, []interface{}{ + header.ParentHash, + header.UncleHash, + header.Coinbase, + header.Root, + header.TxHash, + header.ReceiptHash, + header.Bloom, + header.Difficulty, + header.Number, + header.GasLimit, + header.GasUsed, + header.Time, + header.Extra[:len(header.Extra)-crypto.SignatureLength], // Yes, this will panic if extra is too short + header.MixDigest, + header.Nonce, + }) + if err != nil { + panic("can't encode: " + err.Error()) + } +} diff --git a/consensus/clique/clique_test.go b/consensus/clique/clique_test.go new file mode 100644 index 000000000000..710f44805555 --- /dev/null +++ b/consensus/clique/clique_test.go @@ -0,0 +1,113 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package clique + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +// This test case is a repro of an annoying bug that took us forever to catch. +// In Clique PoA networks (Rinkeby, Görli, etc), consecutive blocks might have +// the same state root (no block subsidy, empty block). If a node crashes, the +// chain ends up losing the recent state and needs to regenerate it from blocks +// already in the database. The bug was that processing the block *prior* to an +// empty one **also completes** the empty one, ending up in a known-block error. +func TestReimportMirroredState(t *testing.T) { + // Initialize a Clique chain with a single signer + var ( + db = rawdb.NewMemoryDatabase() + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr = crypto.PubkeyToAddress(key.PublicKey) + engine = New(params.AllCliqueProtocolChanges.Clique, db) + signer = new(types.HomesteadSigner) + ) + genspec := &core.Genesis{ + ExtraData: make([]byte, extraVanity+common.AddressLength+extraSeal), + Alloc: map[common.Address]core.GenesisAccount{ + addr: {Balance: big.NewInt(1)}, + }, + } + copy(genspec.ExtraData[extraVanity:], addr[:]) + genesis := genspec.MustCommit(db) + + // Generate a batch of blocks, each properly signed + chain, _ := core.NewBlockChain(db, nil, params.AllCliqueProtocolChanges, engine, vm.Config{}, nil) + defer chain.Stop() + + blocks, _ := core.GenerateChain(params.AllCliqueProtocolChanges, genesis, engine, db, 3, func(i int, block *core.BlockGen) { + // The chain maker doesn't have access to a chain, so the difficulty will be + // lets unset (nil). Set it here to the correct value. + block.SetDifficulty(diffInTurn) + + // We want to simulate an empty middle block, having the same state as the + // first one. The last is needs a state change again to force a reorg. + if i != 1 { + tx, err := types.SignTx(types.NewTransaction(block.TxNonce(addr), common.Address{0x00}, new(big.Int), params.TxGas, nil, nil), signer, key) + if err != nil { + panic(err) + } + block.AddTxWithChain(chain, tx) + } + }) + for i, block := range blocks { + header := block.Header() + if i > 0 { + header.ParentHash = blocks[i-1].Hash() + } + header.Extra = make([]byte, extraVanity+extraSeal) + header.Difficulty = diffInTurn + + sig, _ := crypto.Sign(SealHash(header).Bytes(), key) + copy(header.Extra[len(header.Extra)-extraSeal:], sig) + blocks[i] = block.WithSeal(header) + } + // Insert the first two blocks and make sure the chain is valid + db = rawdb.NewMemoryDatabase() + genspec.MustCommit(db) + + chain, _ = core.NewBlockChain(db, nil, params.AllCliqueProtocolChanges, engine, vm.Config{}, nil) + defer chain.Stop() + + if _, err := chain.InsertChain(blocks[:2]); err != nil { + t.Fatalf("failed to insert initial blocks: %v", err) + } + if head := chain.CurrentBlock().NumberU64(); head != 2 { + t.Fatalf("chain head mismatch: have %d, want %d", head, 2) + } + + // Simulate a crash by creating a new chain on top of the database, without + // flushing the dirty states out. Insert the last block, trigerring a sidechain + // reimport. + chain, _ = core.NewBlockChain(db, nil, params.AllCliqueProtocolChanges, engine, vm.Config{}, nil) + defer chain.Stop() + + if _, err := chain.InsertChain(blocks[2:]); err != nil { + t.Fatalf("failed to insert final block: %v", err) + } + if head := chain.CurrentBlock().NumberU64(); head != 3 { + t.Fatalf("chain head mismatch: have %d, want %d", head, 3) + } +} diff --git a/consensus/clique/snapshot.go b/consensus/clique/snapshot.go index 54d4555f3b6a..4ee731a90821 100644 --- a/consensus/clique/snapshot.go +++ b/consensus/clique/snapshot.go @@ -20,10 +20,12 @@ import ( "bytes" "encoding/json" "sort" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" lru "github.com/hashicorp/golang-lru" ) @@ -197,7 +199,11 @@ func (s *Snapshot) apply(headers []*types.Header) (*Snapshot, error) { // Iterate through the headers and create a new snapshot snap := s.copy() - for _, header := range headers { + var ( + start = time.Now() + logged = time.Now() + ) + for i, header := range headers { // Remove any votes on checkpoint blocks number := header.Number.Uint64() if number%s.config.Epoch == 0 { @@ -285,6 +291,14 @@ func (s *Snapshot) apply(headers []*types.Header) (*Snapshot, error) { } delete(snap.Tally, header.Coinbase) } + // If we're taking too much time (ecrecover), notify the user once a while + if time.Since(logged) > 8*time.Second { + log.Info("Reconstructing voting history", "processed", i, "total", len(headers), "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + if time.Since(start) > 8*time.Second { + log.Info("Reconstructed voting history", "processed", len(headers), "elapsed", common.PrettyDuration(time.Since(start))) } snap.Number += uint64(len(headers)) snap.Hash = headers[len(headers)-1].Hash() diff --git a/consensus/clique/snapshot_test.go b/consensus/clique/snapshot_test.go index 41dae1426fec..fc08722efd63 100644 --- a/consensus/clique/snapshot_test.go +++ b/consensus/clique/snapshot_test.go @@ -24,10 +24,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -80,7 +80,7 @@ func (ap *testerAccountPool) sign(header *types.Header, signer string) { ap.accounts[signer], _ = crypto.GenerateKey() } // Sign the header and embed the signature in extra data - sig, _ := crypto.Sign(sigHash(header).Bytes(), ap.accounts[signer]) + sig, _ := crypto.Sign(SealHash(header).Bytes(), ap.accounts[signer]) copy(header.Extra[len(header.Extra)-extraSeal:], sig) } @@ -246,10 +246,10 @@ func TestClique(t *testing.T) { // Votes from deauthorized signers are discarded immediately (auth votes) signers: []string{"A", "B", "C"}, votes: []testerVote{ - {signer: "C", voted: "B", auth: false}, + {signer: "C", voted: "D", auth: true}, {signer: "A", voted: "C", auth: false}, {signer: "B", voted: "C", auth: false}, - {signer: "A", voted: "B", auth: false}, + {signer: "A", voted: "D", auth: true}, }, results: []string{"A", "B"}, }, { @@ -400,7 +400,7 @@ func TestClique(t *testing.T) { copy(genesis.ExtraData[extraVanity+j*common.AddressLength:], signer[:]) } // Create a pristine blockchain with the genesis injected - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis.Commit(db) // Assemble a chain of headers from the cast votes diff --git a/consensus/consensus.go b/consensus/consensus.go index 487b07be7725..f753af550ca0 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -80,10 +80,19 @@ type Engine interface { Prepare(chain ChainReader, header *types.Header) error // Finalize runs any post-transaction state modifications (e.g. block rewards) - // and assembles the final block. + // but does not assemble the block. + // // Note: The block header and state database might be updated to reflect any // consensus rules that happen at finalization (e.g. block rewards). Finalize(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, + uncles []*types.Header) + + // FinalizeAndAssemble runs any post-transaction state modifications (e.g. block + // rewards) and assembles the final block. + // + // Note: The block header and state database might be updated to reflect any + // consensus rules that happen at finalization (e.g. block rewards). + FinalizeAndAssemble(chain ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) // Seal generates a new sealing request for the given input block and pushes diff --git a/consensus/ethash/algorithm_test.go b/consensus/ethash/algorithm_test.go index c58479e2896c..cf8552f3ab74 100644 --- a/consensus/ethash/algorithm_test.go +++ b/consensus/ethash/algorithm_test.go @@ -716,7 +716,7 @@ func TestConcurrentDiskCacheGeneration(t *testing.T) { Difficulty: big.NewInt(167925187834220), GasLimit: 4015682, GasUsed: 0, - Time: big.NewInt(1488928920), + Time: 1488928920, Extra: []byte("www.bw.com"), MixDigest: common.HexToHash("0x3e140b0784516af5e5ec6730f2fb20cca22f32be399b9e4ad77d32541f798cd0"), Nonce: types.EncodeNonce(0xf400cd0006070c49), diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 875014840346..41b5a138a6c5 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -65,7 +65,6 @@ var ( // codebase, inherently breaking if the engine is swapped out. Please put common // error types into the consensus package. var ( - errLargeBlockTime = errors.New("timestamp too big") errZeroBlockTime = errors.New("timestamp equals parent's") errTooManyUncles = errors.New("too many uncles") errDuplicateUncle = errors.New("duplicate uncle") @@ -194,6 +193,9 @@ func (ethash *Ethash) VerifyUncles(chain consensus.ChainReader, block *types.Blo if len(block.Uncles()) > maxUncles { return errTooManyUncles } + if len(block.Uncles()) == 0 { + return nil + } // Gather the set of past uncles and ancestors uncles, ancestors := mapset.NewSet(), make(map[common.Hash]*types.Header) @@ -244,20 +246,16 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainReader, header, parent * return fmt.Errorf("extra-data too long: %d > %d", len(header.Extra), params.MaximumExtraDataSize) } // Verify the header's timestamp - if uncle { - if header.Time.Cmp(math.MaxBig256) > 0 { - return errLargeBlockTime - } - } else { - if header.Time.Cmp(big.NewInt(time.Now().Add(allowedFutureBlockTime).Unix())) > 0 { + if !uncle { + if header.Time > uint64(time.Now().Add(allowedFutureBlockTime).Unix()) { return consensus.ErrFutureBlock } } - if metaminer.IsPoW() && header.Time.Cmp(parent.Time) <= 0 { + if metaminer.IsPoW() && header.Time <= parent.Time { return errZeroBlockTime } // Verify the block's difficulty based in it's timestamp and parent's difficulty - expected := ethash.CalcDifficulty(chain, header.Time.Uint64(), parent) + expected := ethash.CalcDifficulty(chain, header.Time, parent) if expected.Cmp(header.Difficulty) != 0 { return fmt.Errorf("invalid difficulty: have %v, want %v", header.Difficulty, expected) @@ -359,7 +357,7 @@ func makeDifficultyCalculator(bombDelay *big.Int) func(time uint64, parent *type // ) + 2^(periodCount - 2) bigTime := new(big.Int).SetUint64(time) - bigParentTime := new(big.Int).Set(parent.Time) + bigParentTime := new(big.Int).SetUint64(parent.Time) // holds intermediate values to make the algo easier to read & audit x := new(big.Int) @@ -418,7 +416,7 @@ func calcDifficultyHomestead(time uint64, parent *types.Header) *big.Int { // ) + 2^(periodCount - 2) bigTime := new(big.Int).SetUint64(time) - bigParentTime := new(big.Int).Set(parent.Time) + bigParentTime := new(big.Int).SetUint64(parent.Time) // holds intermediate values to make the algo easier to read & audit x := new(big.Int) @@ -466,7 +464,7 @@ func calcDifficultyFrontier(time uint64, parent *types.Header) *big.Int { bigParentTime := new(big.Int) bigTime.SetUint64(time) - bigParentTime.Set(parent.Time) + bigParentTime.SetUint64(parent.Time) if bigTime.Sub(bigTime, bigParentTime).Cmp(params.DurationLimit) < 0 { diff.Add(parent.Difficulty, adjust) @@ -568,13 +566,21 @@ func (ethash *Ethash) Prepare(chain consensus.ChainReader, header *types.Header) if parent == nil { return consensus.ErrUnknownAncestor } - header.Difficulty = ethash.CalcDifficulty(chain, header.Time.Uint64(), parent) + header.Difficulty = ethash.CalcDifficulty(chain, header.Time, parent) return nil } // Finalize implements consensus.Engine, accumulating the block and uncle rewards, -// setting the final state and assembling the block. -func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { +// setting the final state on the header +func (ethash *Ethash) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) { + // Accumulate any block and uncle rewards and commit the final state root + accumulateRewards(chain.Config(), state, header, uncles) + header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) +} + +// FinalizeAndAssemble implements consensus.Engine, accumulating the block and +// uncle rewards, setting the final state and assembling the block. +func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) { // Accumulate any block and uncle rewards and commit the final state root accumulateRewards(chain.Config(), state, header, uncles) header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number)) diff --git a/consensus/ethash/consensus_test.go b/consensus/ethash/consensus_test.go index 438a99dd66c2..675737d9e1aa 100644 --- a/consensus/ethash/consensus_test.go +++ b/consensus/ethash/consensus_test.go @@ -76,7 +76,7 @@ func TestCalcDifficulty(t *testing.T) { number := new(big.Int).Sub(test.CurrentBlocknumber, big.NewInt(1)) diff := CalcDifficulty(config, test.CurrentTimestamp, &types.Header{ Number: number, - Time: new(big.Int).SetUint64(test.ParentTimestamp), + Time: test.ParentTimestamp, Difficulty: test.ParentDifficulty, }) if diff.Cmp(test.CurrentDifficulty) != 0 { diff --git a/consensus/ethash/sealer.go b/consensus/ethash/sealer.go index 277d2a1444bd..3b661481f703 100644 --- a/consensus/ethash/sealer.go +++ b/consensus/ethash/sealer.go @@ -298,7 +298,7 @@ func (ethash *Ethash) remote(notify []string, noverify bool) { start := time.Now() if !noverify { if err := ethash.verifySeal(nil, header, true); err != nil { - log.Warn("Invalid proof-of-work submitted", "sealhash", sealhash, "elapsed", time.Since(start), "err", err) + log.Warn("Invalid proof-of-work submitted", "sealhash", sealhash, "elapsed", common.PrettyDuration(time.Since(start)), "err", err) return false } } @@ -307,7 +307,7 @@ func (ethash *Ethash) remote(notify []string, noverify bool) { log.Warn("Ethash result channel is empty, submitted mining result is rejected") return false } - log.Trace("Verified correct proof-of-work", "sealhash", sealhash, "elapsed", time.Since(start)) + log.Trace("Verified correct proof-of-work", "sealhash", sealhash, "elapsed", common.PrettyDuration(time.Since(start))) // Solutions seems to be valid, return to the miner and notify acceptance. solution := block.WithSeal(header) diff --git a/consensus/ethash/sealer_test.go b/consensus/ethash/sealer_test.go index 436359af7c16..82f08d673c89 100644 --- a/consensus/ethash/sealer_test.go +++ b/consensus/ethash/sealer_test.go @@ -1,3 +1,19 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package ethash import ( diff --git a/console/bridge.go b/console/bridge.go index b0b4d37985f8..c7a67a68503d 100644 --- a/console/bridge.go +++ b/console/bridge.go @@ -23,6 +23,7 @@ import ( "strings" "time" + "github.com/ethereum/go-ethereum/accounts/scwallet" "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rpc" @@ -58,14 +59,14 @@ func (b *bridge) NewAccount(call otto.FunctionCall) (response otto.Value) { switch { // No password was specified, prompt the user for it case len(call.ArgumentList) == 0: - if password, err = b.prompter.PromptPassword("Passphrase: "); err != nil { + if password, err = b.prompter.PromptPassword("Password: "); err != nil { throwJSException(err.Error()) } - if confirm, err = b.prompter.PromptPassword("Repeat passphrase: "); err != nil { + if confirm, err = b.prompter.PromptPassword("Repeat password: "); err != nil { throwJSException(err.Error()) } if password != confirm { - throwJSException("passphrases don't match!") + throwJSException("passwords don't match!") } // A single string password was specified, use that @@ -104,10 +105,92 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { if err == nil { return val } - // Wallet open failed, report error unless it's a PIN entry - if !strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPINNeeded.Error()) { + + // Wallet open failed, report error unless it's a PIN or PUK entry + switch { + case strings.HasSuffix(err.Error(), usbwallet.ErrTrezorPINNeeded.Error()): + val, err = b.readPinAndReopenWallet(call) + if err == nil { + return val + } + val, err = b.readPassphraseAndReopenWallet(call) + if err != nil { + throwJSException(err.Error()) + } + + case strings.HasSuffix(err.Error(), scwallet.ErrPairingPasswordNeeded.Error()): + // PUK input requested, fetch from the user and call open again + if input, err := b.prompter.PromptPassword("Please enter the pairing password: "); err != nil { + throwJSException(err.Error()) + } else { + passwd, _ = otto.ToValue(input) + } + if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { + if !strings.HasSuffix(err.Error(), scwallet.ErrPINNeeded.Error()) { + throwJSException(err.Error()) + } else { + // PIN input requested, fetch from the user and call open again + if input, err := b.prompter.PromptPassword("Please enter current PIN: "); err != nil { + throwJSException(err.Error()) + } else { + passwd, _ = otto.ToValue(input) + } + if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { + throwJSException(err.Error()) + } + } + } + + case strings.HasSuffix(err.Error(), scwallet.ErrPINUnblockNeeded.Error()): + // PIN unblock requested, fetch PUK and new PIN from the user + var pukpin string + if input, err := b.prompter.PromptPassword("Please enter current PUK: "); err != nil { + throwJSException(err.Error()) + } else { + pukpin = input + } + if input, err := b.prompter.PromptPassword("Please enter new PIN: "); err != nil { + throwJSException(err.Error()) + } else { + pukpin += input + } + passwd, _ = otto.ToValue(pukpin) + if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { + throwJSException(err.Error()) + } + + case strings.HasSuffix(err.Error(), scwallet.ErrPINNeeded.Error()): + // PIN input requested, fetch from the user and call open again + if input, err := b.prompter.PromptPassword("Please enter current PIN: "); err != nil { + throwJSException(err.Error()) + } else { + passwd, _ = otto.ToValue(input) + } + if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { + throwJSException(err.Error()) + } + + default: + // Unknown error occurred, drop to the user throwJSException(err.Error()) } + return val +} + +func (b *bridge) readPassphraseAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { + var passwd otto.Value + wallet := call.Argument(0) + if input, err := b.prompter.PromptPassword("Please enter your password: "); err != nil { + throwJSException(err.Error()) + } else { + passwd, _ = otto.ToValue(input) + } + return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) +} + +func (b *bridge) readPinAndReopenWallet(call otto.FunctionCall) (otto.Value, error) { + var passwd otto.Value + wallet := call.Argument(0) // Trezor PIN matrix input requested, display the matrix to the user and fetch the data fmt.Fprintf(b.printer, "Look at the device for number positions\n\n") fmt.Fprintf(b.printer, "7 | 8 | 9\n") @@ -121,10 +204,7 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) { } else { passwd, _ = otto.ToValue(input) } - if val, err = call.Otto.Call("jeth.openWallet", nil, wallet, passwd); err != nil { - throwJSException(err.Error()) - } - return val + return call.Otto.Call("jeth.openWallet", nil, wallet, passwd) } // UnlockAccount is a wrapper around the personal.unlockAccount RPC method that @@ -143,7 +223,7 @@ func (b *bridge) UnlockAccount(call otto.FunctionCall) (response otto.Value) { if call.Argument(1).IsUndefined() || call.Argument(1).IsNull() { fmt.Fprintf(b.printer, "Unlock account %s\n", account) - if input, err := b.prompter.PromptPassword("Passphrase: "); err != nil { + if input, err := b.prompter.PromptPassword("Password: "); err != nil { throwJSException(err.Error()) } else { passwd, _ = otto.ToValue(input) @@ -190,7 +270,7 @@ func (b *bridge) Sign(call otto.FunctionCall) (response otto.Value) { // if the password is not given or null ask the user and ensure password is a string if passwd.IsUndefined() || passwd.IsNull() { fmt.Fprintf(b.printer, "Give password for account %s\n", account) - if input, err := b.prompter.PromptPassword("Passphrase: "); err != nil { + if input, err := b.prompter.PromptPassword("Password: "); err != nil { throwJSException(err.Error()) } else { passwd, _ = otto.ToValue(input) diff --git a/console/console.go b/console/console.go index abfdb0bb2f55..6621611d1f91 100644 --- a/console/console.go +++ b/console/console.go @@ -120,10 +120,10 @@ func (c *Console) init(preload []string) error { consoleObj.Object().Set("error", c.consoleOutput) // Load all the internal utility JavaScript libraries - if err := c.jsre.Compile("bignumber.js", jsre.BigNumber_JS); err != nil { + if err := c.jsre.Compile("bignumber.js", jsre.BignumberJs); err != nil { return fmt.Errorf("bignumber.js: %v", err) } - if err := c.jsre.Compile("web3.js", jsre.Web3_JS); err != nil { + if err := c.jsre.Compile("web3.js", jsre.Web3Js); err != nil { return fmt.Errorf("web3.js: %v", err) } if _, err := c.jsre.Run("var Web3 = require('web3');"); err != nil { @@ -238,7 +238,7 @@ func (c *Console) clearHistory() { // consoleOutput is an override for the console.log and console.error methods to // stream the output into the configured output stream instead of stdout. func (c *Console) consoleOutput(call otto.FunctionCall) otto.Value { - output := []string{} + var output []string for _, argument := range call.ArgumentList { output = append(output, fmt.Sprintf("%v", argument)) } @@ -276,14 +276,22 @@ func (c *Console) AutoCompleteInput(line string, pos int) (string, []string, str // Welcome show summary of current Geth instance and some metadata about the // console's available modules. func (c *Console) Welcome() { + message := "Welcome to the Geth JavaScript console!\n\n" + // Print some generic Geth metadata - fmt.Fprintf(c.printer, "Welcome to the Geth JavaScript console!\n\n") - c.jsre.Run(` - console.log("instance: " + web3.version.node); - console.log("coinbase: " + eth.coinbase); - console.log("at block: " + eth.blockNumber + " (" + new Date(1000 * eth.getBlock(eth.blockNumber).timestamp) + ")"); - console.log(" datadir: " + admin.datadir); - `) + if res, err := c.jsre.Run(` + var message = "instance: " + web3.version.node + "\n"; + try { + message += "coinbase: " + eth.coinbase + "\n"; + } catch (err) {} + message += "at block: " + eth.blockNumber + " (" + new Date(1000 * eth.getBlock(eth.blockNumber).timestamp) + ")\n"; + try { + message += " datadir: " + admin.datadir + "\n"; + } catch (err) {} + message + `); err == nil { + message += res.String() + } // List all the supported modules for the user to call if apis, err := c.client.SupportedModules(); err == nil { modules := make([]string, 0, len(apis)) @@ -291,9 +299,9 @@ func (c *Console) Welcome() { modules = append(modules, fmt.Sprintf("%s:%s", api, version)) } sort.Strings(modules) - fmt.Fprintln(c.printer, " modules:", strings.Join(modules, " ")) + message += " modules: " + strings.Join(modules, " ") + "\n" } - fmt.Fprintln(c.printer) + fmt.Fprintln(c.printer, message) } // Evaluate executes code and pretty prints the result to the specified output diff --git a/console/console_test.go b/console/console_test.go index 26465ca6f450..89dd7cd838a8 100644 --- a/console/console_test.go +++ b/console/console_test.go @@ -31,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/internal/jsre" + "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" ) @@ -96,8 +97,10 @@ func newTester(t *testing.T, confOverride func(*eth.Config)) *tester { t.Fatalf("failed to create node: %v", err) } ethConf := ð.Config{ - Genesis: core.DeveloperGenesisBlock(15, common.Address{}), - Etherbase: common.HexToAddress(testAddress), + Genesis: core.DeveloperGenesisBlock(15, common.Address{}), + Miner: miner.Config{ + Etherbase: common.HexToAddress(testAddress), + }, Ethash: ethash.Config{ PowMode: ethash.ModeTest, }, @@ -149,8 +152,8 @@ func (env *tester) Close(t *testing.T) { if err := env.console.Stop(false); err != nil { t.Errorf("failed to stop embedded console: %v", err) } - if err := env.stack.Stop(); err != nil { - t.Errorf("failed to stop embedded node: %v", err) + if err := env.stack.Close(); err != nil { + t.Errorf("failed to tear down embedded node: %v", err) } os.RemoveAll(env.workspace) } diff --git a/console/prompter.go b/console/prompter.go index d4742282af42..1b1941515ee3 100644 --- a/console/prompter.go +++ b/console/prompter.go @@ -142,7 +142,7 @@ func (p *terminalPrompter) PromptPassword(prompt string) (passwd string, err err // PromptConfirm displays the given prompt to the user and requests a boolean // choice to be made, returning that choice. func (p *terminalPrompter) PromptConfirm(prompt string) (bool, error) { - input, err := p.Prompt(prompt + " [y/N] ") + input, err := p.Prompt(prompt + " [y/n] ") if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" { return true, nil } diff --git a/containers/docker/develop-alpine/Dockerfile b/containers/docker/develop-alpine/Dockerfile deleted file mode 100644 index 1f3e1112ec1b..000000000000 --- a/containers/docker/develop-alpine/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM alpine:3.7 - -RUN \ - apk add --update go git make gcc musl-dev linux-headers ca-certificates && \ - git clone --depth 1 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apk del go git make gcc musl-dev linux-headers && \ - rm -rf /go-ethereum && rm -rf /var/cache/apk/* - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/containers/docker/develop-ubuntu/Dockerfile b/containers/docker/develop-ubuntu/Dockerfile deleted file mode 100644 index 8c4fe9f59514..000000000000 --- a/containers/docker/develop-ubuntu/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM ubuntu:xenial - -ENV PATH=/usr/lib/go-1.9/bin:$PATH - -RUN \ - apt-get update && apt-get upgrade -q -y && \ - apt-get install -y --no-install-recommends golang-1.9 git make gcc libc-dev ca-certificates && \ - git clone --depth 1 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apt-get remove -y golang-1.9 git make gcc libc-dev && apt autoremove -y && apt-get clean && \ - rm -rf /go-ethereum - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/containers/docker/master-alpine/Dockerfile b/containers/docker/master-alpine/Dockerfile deleted file mode 100644 index 8d4e7fe81a6b..000000000000 --- a/containers/docker/master-alpine/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM alpine:3.7 - -RUN \ - apk add --update go git make gcc musl-dev linux-headers ca-certificates && \ - git clone --depth 1 --branch release/1.8 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apk del go git make gcc musl-dev linux-headers && \ - rm -rf /go-ethereum && rm -rf /var/cache/apk/* - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/containers/docker/master-ubuntu/Dockerfile b/containers/docker/master-ubuntu/Dockerfile deleted file mode 100644 index 4cfc4f58c0cb..000000000000 --- a/containers/docker/master-ubuntu/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM ubuntu:xenial - -ENV PATH=/usr/lib/go-1.9/bin:$PATH - -RUN \ - apt-get update && apt-get upgrade -q -y && \ - apt-get install -y --no-install-recommends golang-1.9 git make gcc libc-dev ca-certificates && \ - git clone --depth 1 --branch release/1.8 https://github.com/ethereum/go-ethereum && \ - (cd go-ethereum && make geth) && \ - cp go-ethereum/build/bin/geth /geth && \ - apt-get remove -y golang-1.9 git make gcc libc-dev && apt autoremove -y && apt-get clean && \ - rm -rf /go-ethereum - -EXPOSE 8545 -EXPOSE 30303 - -ENTRYPOINT ["/geth"] diff --git a/contracts/checkpointoracle/contract/oracle.go b/contracts/checkpointoracle/contract/oracle.go new file mode 100644 index 000000000000..3bb351792f7a --- /dev/null +++ b/contracts/checkpointoracle/contract/oracle.go @@ -0,0 +1,415 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package contract + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = abi.U256 + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// CheckpointOracleABI is the input ABI used to generate the binding from. +const CheckpointOracleABI = "[{\"constant\":true,\"inputs\":[],\"name\":\"GetAllAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"GetLatestCheckpoint\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recentNumber\",\"type\":\"uint256\"},{\"name\":\"_recentHash\",\"type\":\"bytes32\"},{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_sectionIndex\",\"type\":\"uint64\"},{\"name\":\"v\",\"type\":\"uint8[]\"},{\"name\":\"r\",\"type\":\"bytes32[]\"},{\"name\":\"s\",\"type\":\"bytes32[]\"}],\"name\":\"SetCheckpoint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_adminlist\",\"type\":\"address[]\"},{\"name\":\"_sectionSize\",\"type\":\"uint256\"},{\"name\":\"_processConfirms\",\"type\":\"uint256\"},{\"name\":\"_threshold\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"index\",\"type\":\"uint64\"},{\"indexed\":false,\"name\":\"checkpointHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"NewCheckpointVote\",\"type\":\"event\"}]" + +// CheckpointOracleBin is the compiled bytecode used for deploying new contracts. +const CheckpointOracleBin = `0x608060405234801561001057600080fd5b506040516108153803806108158339818101604052608081101561003357600080fd5b81019080805164010000000081111561004b57600080fd5b8201602081018481111561005e57600080fd5b815185602082028301116401000000008211171561007b57600080fd5b505060208201516040830151606090930151919450925060005b84518110156101415760016000808784815181106100af57fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060018582815181106100fc57fe5b60209081029190910181015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610095565b50600592909255600655600755506106b78061015e6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806345848dfc146100465780634d6a304c1461009e578063d459fc46146100cf575b600080fd5b61004e6102b0565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561008a578181015183820152602001610072565b505050509050019250505060405180910390f35b6100a661034f565b6040805167ffffffffffffffff9094168452602084019290925282820152519081900360600190f35b61029c600480360360e08110156100e557600080fd5b81359160208101359160408201359167ffffffffffffffff6060820135169181019060a08101608082013564010000000081111561012257600080fd5b82018360208201111561013457600080fd5b8035906020019184602083028401116401000000008311171561015657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156101a657600080fd5b8201836020820111156101b857600080fd5b803590602001918460208302840111640100000000831117156101da57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561022a57600080fd5b82018360208201111561023c57600080fd5b8035906020019184602083028401116401000000008311171561025e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061036a945050505050565b604080519115158252519081900360200190f35b6060806001805490506040519080825280602002602001820160405280156102e2578160200160208202803883390190505b50905060005b60015481101561034957600181815481106102ff57fe5b9060005260206000200160009054906101000a90046001600160a01b031682828151811061032957fe5b6001600160a01b03909216602092830291909101909101526001016102e8565b50905090565b60025460045460035467ffffffffffffffff90921691909192565b3360009081526020819052604081205460ff1661038657600080fd5b8688401461039357600080fd5b82518451146103a157600080fd5b81518451146103af57600080fd5b6006546005548660010167ffffffffffffffff1602014310156103d457506000610677565b60025467ffffffffffffffff90811690861610156103f457506000610677565b60025467ffffffffffffffff8681169116148015610426575067ffffffffffffffff8516151580610426575060035415155b1561043357506000610677565b8561044057506000610677565b60408051601960f81b6020808301919091526000602183018190523060601b60228401526001600160c01b031960c08a901b166036840152603e8084018b905284518085039091018152605e909301909352815191012090805b86518110156106715760006001848984815181106104b457fe5b60200260200101518985815181106104c857fe5b60200260200101518986815181106104dc57fe5b602002602001015160405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561053b573d6000803e3d6000fd5b505060408051601f1901516001600160a01b03811660009081526020819052919091205490925060ff16905061057057600080fd5b826001600160a01b0316816001600160a01b03161161058e57600080fd5b8092508867ffffffffffffffff167fce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a418b8a85815181106105ca57fe5b60200260200101518a86815181106105de57fe5b60200260200101518a87815181106105f257fe5b6020026020010151604051808581526020018460ff1660ff16815260200183815260200182815260200194505050505060405180910390a260075482600101106106685750505060048790555050436003556002805467ffffffffffffffff191667ffffffffffffffff86161790556001610677565b5060010161049a565b50600080fd5b97965050505050505056fea265627a7a723058207f6a191ce575596a2f1e907c8c0a01003d16b69fb2c4f432d10878e8c0a99a0264736f6c634300050a0032` + +// DeployCheckpointOracle deploys a new Ethereum contract, binding an instance of CheckpointOracle to it. +func DeployCheckpointOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _adminlist []common.Address, _sectionSize *big.Int, _processConfirms *big.Int, _threshold *big.Int) (common.Address, *types.Transaction, *CheckpointOracle, error) { + parsed, err := abi.JSON(strings.NewReader(CheckpointOracleABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(CheckpointOracleBin), backend, _adminlist, _sectionSize, _processConfirms, _threshold) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &CheckpointOracle{CheckpointOracleCaller: CheckpointOracleCaller{contract: contract}, CheckpointOracleTransactor: CheckpointOracleTransactor{contract: contract}, CheckpointOracleFilterer: CheckpointOracleFilterer{contract: contract}}, nil +} + +// CheckpointOracle is an auto generated Go binding around an Ethereum contract. +type CheckpointOracle struct { + CheckpointOracleCaller // Read-only binding to the contract + CheckpointOracleTransactor // Write-only binding to the contract + CheckpointOracleFilterer // Log filterer for contract events +} + +// CheckpointOracleCaller is an auto generated read-only Go binding around an Ethereum contract. +type CheckpointOracleCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointOracleTransactor is an auto generated write-only Go binding around an Ethereum contract. +type CheckpointOracleTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointOracleFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type CheckpointOracleFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// CheckpointOracleSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type CheckpointOracleSession struct { + Contract *CheckpointOracle // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CheckpointOracleCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type CheckpointOracleCallerSession struct { + Contract *CheckpointOracleCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// CheckpointOracleTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type CheckpointOracleTransactorSession struct { + Contract *CheckpointOracleTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// CheckpointOracleRaw is an auto generated low-level Go binding around an Ethereum contract. +type CheckpointOracleRaw struct { + Contract *CheckpointOracle // Generic contract binding to access the raw methods on +} + +// CheckpointOracleCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type CheckpointOracleCallerRaw struct { + Contract *CheckpointOracleCaller // Generic read-only contract binding to access the raw methods on +} + +// CheckpointOracleTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type CheckpointOracleTransactorRaw struct { + Contract *CheckpointOracleTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewCheckpointOracle creates a new instance of CheckpointOracle, bound to a specific deployed contract. +func NewCheckpointOracle(address common.Address, backend bind.ContractBackend) (*CheckpointOracle, error) { + contract, err := bindCheckpointOracle(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CheckpointOracle{CheckpointOracleCaller: CheckpointOracleCaller{contract: contract}, CheckpointOracleTransactor: CheckpointOracleTransactor{contract: contract}, CheckpointOracleFilterer: CheckpointOracleFilterer{contract: contract}}, nil +} + +// NewCheckpointOracleCaller creates a new read-only instance of CheckpointOracle, bound to a specific deployed contract. +func NewCheckpointOracleCaller(address common.Address, caller bind.ContractCaller) (*CheckpointOracleCaller, error) { + contract, err := bindCheckpointOracle(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CheckpointOracleCaller{contract: contract}, nil +} + +// NewCheckpointOracleTransactor creates a new write-only instance of CheckpointOracle, bound to a specific deployed contract. +func NewCheckpointOracleTransactor(address common.Address, transactor bind.ContractTransactor) (*CheckpointOracleTransactor, error) { + contract, err := bindCheckpointOracle(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CheckpointOracleTransactor{contract: contract}, nil +} + +// NewCheckpointOracleFilterer creates a new log filterer instance of CheckpointOracle, bound to a specific deployed contract. +func NewCheckpointOracleFilterer(address common.Address, filterer bind.ContractFilterer) (*CheckpointOracleFilterer, error) { + contract, err := bindCheckpointOracle(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CheckpointOracleFilterer{contract: contract}, nil +} + +// bindCheckpointOracle binds a generic wrapper to an already deployed contract. +func bindCheckpointOracle(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(CheckpointOracleABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CheckpointOracle *CheckpointOracleRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _CheckpointOracle.Contract.CheckpointOracleCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CheckpointOracle *CheckpointOracleRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CheckpointOracle.Contract.CheckpointOracleTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CheckpointOracle *CheckpointOracleRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CheckpointOracle.Contract.CheckpointOracleTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_CheckpointOracle *CheckpointOracleCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { + return _CheckpointOracle.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_CheckpointOracle *CheckpointOracleTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CheckpointOracle.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_CheckpointOracle *CheckpointOracleTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CheckpointOracle.Contract.contract.Transact(opts, method, params...) +} + +// GetAllAdmin is a free data retrieval call binding the contract method 0x45848dfc. +// +// Solidity: function GetAllAdmin() constant returns(address[]) +func (_CheckpointOracle *CheckpointOracleCaller) GetAllAdmin(opts *bind.CallOpts) ([]common.Address, error) { + var ( + ret0 = new([]common.Address) + ) + out := ret0 + err := _CheckpointOracle.contract.Call(opts, out, "GetAllAdmin") + return *ret0, err +} + +// GetAllAdmin is a free data retrieval call binding the contract method 0x45848dfc. +// +// Solidity: function GetAllAdmin() constant returns(address[]) +func (_CheckpointOracle *CheckpointOracleSession) GetAllAdmin() ([]common.Address, error) { + return _CheckpointOracle.Contract.GetAllAdmin(&_CheckpointOracle.CallOpts) +} + +// GetAllAdmin is a free data retrieval call binding the contract method 0x45848dfc. +// +// Solidity: function GetAllAdmin() constant returns(address[]) +func (_CheckpointOracle *CheckpointOracleCallerSession) GetAllAdmin() ([]common.Address, error) { + return _CheckpointOracle.Contract.GetAllAdmin(&_CheckpointOracle.CallOpts) +} + +// GetLatestCheckpoint is a free data retrieval call binding the contract method 0x4d6a304c. +// +// Solidity: function GetLatestCheckpoint() constant returns(uint64, bytes32, uint256) +func (_CheckpointOracle *CheckpointOracleCaller) GetLatestCheckpoint(opts *bind.CallOpts) (uint64, [32]byte, *big.Int, error) { + var ( + ret0 = new(uint64) + ret1 = new([32]byte) + ret2 = new(*big.Int) + ) + out := &[]interface{}{ + ret0, + ret1, + ret2, + } + err := _CheckpointOracle.contract.Call(opts, out, "GetLatestCheckpoint") + return *ret0, *ret1, *ret2, err +} + +// GetLatestCheckpoint is a free data retrieval call binding the contract method 0x4d6a304c. +// +// Solidity: function GetLatestCheckpoint() constant returns(uint64, bytes32, uint256) +func (_CheckpointOracle *CheckpointOracleSession) GetLatestCheckpoint() (uint64, [32]byte, *big.Int, error) { + return _CheckpointOracle.Contract.GetLatestCheckpoint(&_CheckpointOracle.CallOpts) +} + +// GetLatestCheckpoint is a free data retrieval call binding the contract method 0x4d6a304c. +// +// Solidity: function GetLatestCheckpoint() constant returns(uint64, bytes32, uint256) +func (_CheckpointOracle *CheckpointOracleCallerSession) GetLatestCheckpoint() (uint64, [32]byte, *big.Int, error) { + return _CheckpointOracle.Contract.GetLatestCheckpoint(&_CheckpointOracle.CallOpts) +} + +// SetCheckpoint is a paid mutator transaction binding the contract method 0xd459fc46. +// +// Solidity: function SetCheckpoint(uint256 _recentNumber, bytes32 _recentHash, bytes32 _hash, uint64 _sectionIndex, uint8[] v, bytes32[] r, bytes32[] s) returns(bool) +func (_CheckpointOracle *CheckpointOracleTransactor) SetCheckpoint(opts *bind.TransactOpts, _recentNumber *big.Int, _recentHash [32]byte, _hash [32]byte, _sectionIndex uint64, v []uint8, r [][32]byte, s [][32]byte) (*types.Transaction, error) { + return _CheckpointOracle.contract.Transact(opts, "SetCheckpoint", _recentNumber, _recentHash, _hash, _sectionIndex, v, r, s) +} + +// SetCheckpoint is a paid mutator transaction binding the contract method 0xd459fc46. +// +// Solidity: function SetCheckpoint(uint256 _recentNumber, bytes32 _recentHash, bytes32 _hash, uint64 _sectionIndex, uint8[] v, bytes32[] r, bytes32[] s) returns(bool) +func (_CheckpointOracle *CheckpointOracleSession) SetCheckpoint(_recentNumber *big.Int, _recentHash [32]byte, _hash [32]byte, _sectionIndex uint64, v []uint8, r [][32]byte, s [][32]byte) (*types.Transaction, error) { + return _CheckpointOracle.Contract.SetCheckpoint(&_CheckpointOracle.TransactOpts, _recentNumber, _recentHash, _hash, _sectionIndex, v, r, s) +} + +// SetCheckpoint is a paid mutator transaction binding the contract method 0xd459fc46. +// +// Solidity: function SetCheckpoint(uint256 _recentNumber, bytes32 _recentHash, bytes32 _hash, uint64 _sectionIndex, uint8[] v, bytes32[] r, bytes32[] s) returns(bool) +func (_CheckpointOracle *CheckpointOracleTransactorSession) SetCheckpoint(_recentNumber *big.Int, _recentHash [32]byte, _hash [32]byte, _sectionIndex uint64, v []uint8, r [][32]byte, s [][32]byte) (*types.Transaction, error) { + return _CheckpointOracle.Contract.SetCheckpoint(&_CheckpointOracle.TransactOpts, _recentNumber, _recentHash, _hash, _sectionIndex, v, r, s) +} + +// CheckpointOracleNewCheckpointVoteIterator is returned from FilterNewCheckpointVote and is used to iterate over the raw logs and unpacked data for NewCheckpointVote events raised by the CheckpointOracle contract. +type CheckpointOracleNewCheckpointVoteIterator struct { + Event *CheckpointOracleNewCheckpointVote // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *CheckpointOracleNewCheckpointVoteIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(CheckpointOracleNewCheckpointVote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(CheckpointOracleNewCheckpointVote) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *CheckpointOracleNewCheckpointVoteIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *CheckpointOracleNewCheckpointVoteIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// CheckpointOracleNewCheckpointVote represents a NewCheckpointVote event raised by the CheckpointOracle contract. +type CheckpointOracleNewCheckpointVote struct { + Index uint64 + CheckpointHash [32]byte + V uint8 + R [32]byte + S [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNewCheckpointVote is a free log retrieval operation binding the contract event 0xce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a41. +// +// Solidity: event NewCheckpointVote(uint64 indexed index, bytes32 checkpointHash, uint8 v, bytes32 r, bytes32 s) +func (_CheckpointOracle *CheckpointOracleFilterer) FilterNewCheckpointVote(opts *bind.FilterOpts, index []uint64) (*CheckpointOracleNewCheckpointVoteIterator, error) { + + var indexRule []interface{} + for _, indexItem := range index { + indexRule = append(indexRule, indexItem) + } + + logs, sub, err := _CheckpointOracle.contract.FilterLogs(opts, "NewCheckpointVote", indexRule) + if err != nil { + return nil, err + } + return &CheckpointOracleNewCheckpointVoteIterator{contract: _CheckpointOracle.contract, event: "NewCheckpointVote", logs: logs, sub: sub}, nil +} + +// WatchNewCheckpointVote is a free log subscription operation binding the contract event 0xce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a41. +// +// Solidity: event NewCheckpointVote(uint64 indexed index, bytes32 checkpointHash, uint8 v, bytes32 r, bytes32 s) +func (_CheckpointOracle *CheckpointOracleFilterer) WatchNewCheckpointVote(opts *bind.WatchOpts, sink chan<- *CheckpointOracleNewCheckpointVote, index []uint64) (event.Subscription, error) { + + var indexRule []interface{} + for _, indexItem := range index { + indexRule = append(indexRule, indexItem) + } + + logs, sub, err := _CheckpointOracle.contract.WatchLogs(opts, "NewCheckpointVote", indexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(CheckpointOracleNewCheckpointVote) + if err := _CheckpointOracle.contract.UnpackLog(event, "NewCheckpointVote", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNewCheckpointVote is a log parse operation binding the contract event 0xce51ffa16246bcaf0899f6504f473cd0114f430f566cef71ab7e03d3dde42a41. +// +// Solidity: event NewCheckpointVote(uint64 indexed index, bytes32 checkpointHash, uint8 v, bytes32 r, bytes32 s) +func (_CheckpointOracle *CheckpointOracleFilterer) ParseNewCheckpointVote(log types.Log) (*CheckpointOracleNewCheckpointVote, error) { + event := new(CheckpointOracleNewCheckpointVote) + if err := _CheckpointOracle.contract.UnpackLog(event, "NewCheckpointVote", log); err != nil { + return nil, err + } + return event, nil +} diff --git a/contracts/checkpointoracle/contract/oracle.sol b/contracts/checkpointoracle/contract/oracle.sol new file mode 100644 index 000000000000..010644727374 --- /dev/null +++ b/contracts/checkpointoracle/contract/oracle.sol @@ -0,0 +1,174 @@ +pragma solidity ^0.5.10; + +/** + * @title CheckpointOracle + * @author Gary Rong, Martin Swende + * @dev Implementation of the blockchain checkpoint registrar. + */ +contract CheckpointOracle { + /* + Events + */ + + // NewCheckpointVote is emitted when a new checkpoint proposal receives a vote. + event NewCheckpointVote(uint64 indexed index, bytes32 checkpointHash, uint8 v, bytes32 r, bytes32 s); + + /* + Public Functions + */ + constructor(address[] memory _adminlist, uint _sectionSize, uint _processConfirms, uint _threshold) public { + for (uint i = 0; i < _adminlist.length; i++) { + admins[_adminlist[i]] = true; + adminList.push(_adminlist[i]); + } + sectionSize = _sectionSize; + processConfirms = _processConfirms; + threshold = _threshold; + } + + /** + * @dev Get latest stable checkpoint information. + * @return section index + * @return checkpoint hash + * @return block height associated with checkpoint + */ + function GetLatestCheckpoint() + view + public + returns(uint64, bytes32, uint) { + return (sectionIndex, hash, height); + } + + // SetCheckpoint sets a new checkpoint. It accepts a list of signatures + // @_recentNumber: a recent blocknumber, for replay protection + // @_recentHash : the hash of `_recentNumber` + // @_hash : the hash to set at _sectionIndex + // @_sectionIndex : the section index to set + // @v : the list of v-values + // @r : the list or r-values + // @s : the list of s-values + function SetCheckpoint( + uint _recentNumber, + bytes32 _recentHash, + bytes32 _hash, + uint64 _sectionIndex, + uint8[] memory v, + bytes32[] memory r, + bytes32[] memory s) + public + returns (bool) + { + // Ensure the sender is authorized. + require(admins[msg.sender]); + + // These checks replay protection, so it cannot be replayed on forks, + // accidentally or intentionally + require(blockhash(_recentNumber) == _recentHash); + + // Ensure the batch of signatures are valid. + require(v.length == r.length); + require(v.length == s.length); + + // Filter out "future" checkpoint. + if (block.number < (_sectionIndex+1)*sectionSize+processConfirms) { + return false; + } + // Filter out "old" announcement + if (_sectionIndex < sectionIndex) { + return false; + } + // Filter out "stale" announcement + if (_sectionIndex == sectionIndex && (_sectionIndex != 0 || height != 0)) { + return false; + } + // Filter out "invalid" announcement + if (_hash == ""){ + return false; + } + + // EIP 191 style signatures + // + // Arguments when calculating hash to validate + // 1: byte(0x19) - the initial 0x19 byte + // 2: byte(0) - the version byte (data with intended validator) + // 3: this - the validator address + // -- Application specific data + // 4 : checkpoint section_index(uint64) + // 5 : checkpoint hash (bytes32) + // hash = keccak256(checkpoint_index, section_head, cht_root, bloom_root) + bytes32 signedHash = keccak256(abi.encodePacked(byte(0x19), byte(0), this, _sectionIndex, _hash)); + + address lastVoter = address(0); + + // In order for us not to have to maintain a mapping of who has already + // voted, and we don't want to count a vote twice, the signatures must + // be submitted in strict ordering. + for (uint idx = 0; idx < v.length; idx++){ + address signer = ecrecover(signedHash, v[idx], r[idx], s[idx]); + require(admins[signer]); + require(uint256(signer) > uint256(lastVoter)); + lastVoter = signer; + emit NewCheckpointVote(_sectionIndex, _hash, v[idx], r[idx], s[idx]); + + // Sufficient signatures present, update latest checkpoint. + if (idx+1 >= threshold){ + hash = _hash; + height = block.number; + sectionIndex = _sectionIndex; + return true; + } + } + // We shouldn't wind up here, reverting un-emits the events + revert(); + } + + /** + * @dev Get all admin addresses + * @return address list + */ + function GetAllAdmin() + public + view + returns(address[] memory) + { + address[] memory ret = new address[](adminList.length); + for (uint i = 0; i < adminList.length; i++) { + ret[i] = adminList[i]; + } + return ret; + } + + /* + Fields + */ + // A map of admin users who have the permission to update CHT and bloom Trie root + mapping(address => bool) admins; + + // A list of admin users so that we can obtain all admin users. + address[] adminList; + + // Latest stored section id + uint64 sectionIndex; + + // The block height associated with latest registered checkpoint. + uint height; + + // The hash of latest registered checkpoint. + bytes32 hash; + + // The frequency for creating a checkpoint + // + // The default value should be the same as the checkpoint size(32768) in the ethereum. + uint sectionSize; + + // The number of confirmations needed before a checkpoint can be registered. + // We have to make sure the checkpoint registered will not be invalid due to + // chain reorg. + // + // The default value should be the same as the checkpoint process confirmations(256) + // in the ethereum. + uint processConfirms; + + // The required signatures to finalize a stable checkpoint. + uint threshold; +} diff --git a/contracts/checkpointoracle/oracle.go b/contracts/checkpointoracle/oracle.go new file mode 100644 index 000000000000..2d725397bdf0 --- /dev/null +++ b/contracts/checkpointoracle/oracle.go @@ -0,0 +1,90 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package checkpointoracle is a an on-chain light client checkpoint oracle. +package checkpointoracle + +//go:generate abigen --sol contract/oracle.sol --pkg contract --out contract/oracle.go + +import ( + "errors" + "math/big" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle/contract" + "github.com/ethereum/go-ethereum/core/types" +) + +// CheckpointOracle is a Go wrapper around an on-chain light client checkpoint oracle. +type CheckpointOracle struct { + contract *contract.CheckpointOracle +} + +// NewCheckpointOracle binds checkpoint contract and returns a registrar instance. +func NewCheckpointOracle(contractAddr common.Address, backend bind.ContractBackend) (*CheckpointOracle, error) { + c, err := contract.NewCheckpointOracle(contractAddr, backend) + if err != nil { + return nil, err + } + return &CheckpointOracle{contract: c}, nil +} + +// Contract returns the underlying contract instance. +func (oracle *CheckpointOracle) Contract() *contract.CheckpointOracle { + return oracle.contract +} + +// LookupCheckpointEvents searches checkpoint event for specific section in the +// given log batches. +func (oracle *CheckpointOracle) LookupCheckpointEvents(blockLogs [][]*types.Log, section uint64, hash common.Hash) []*contract.CheckpointOracleNewCheckpointVote { + var votes []*contract.CheckpointOracleNewCheckpointVote + + for _, logs := range blockLogs { + for _, log := range logs { + event, err := oracle.contract.ParseNewCheckpointVote(*log) + if err != nil { + continue + } + if event.Index == section && common.Hash(event.CheckpointHash) == hash { + votes = append(votes, event) + } + } + } + return votes +} + +// RegisterCheckpoint registers the checkpoint with a batch of associated signatures +// that are collected off-chain and sorted by lexicographical order. +// +// Notably all signatures given should be transformed to "ethereum style" which transforms +// v from 0/1 to 27/28 according to the yellow paper. +func (oracle *CheckpointOracle) RegisterCheckpoint(opts *bind.TransactOpts, index uint64, hash []byte, rnum *big.Int, rhash [32]byte, sigs [][]byte) (*types.Transaction, error) { + var ( + r [][32]byte + s [][32]byte + v []uint8 + ) + for i := 0; i < len(sigs); i++ { + if len(sigs[i]) != 65 { + return nil, errors.New("invalid signature") + } + r = append(r, common.BytesToHash(sigs[i][:32])) + s = append(s, common.BytesToHash(sigs[i][32:64])) + v = append(v, sigs[i][64]) + } + return oracle.contract.SetCheckpoint(opts, rnum, rhash, common.BytesToHash(hash), index, v, r, s) +} diff --git a/contracts/checkpointoracle/oracle_test.go b/contracts/checkpointoracle/oracle_test.go new file mode 100644 index 000000000000..817954d11abe --- /dev/null +++ b/contracts/checkpointoracle/oracle_test.go @@ -0,0 +1,336 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package checkpointoracle + +import ( + "bytes" + "crypto/ecdsa" + "encoding/binary" + "errors" + "math/big" + "reflect" + "sort" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle/contract" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +var ( + emptyHash = [32]byte{} + + checkpoint0 = params.TrustedCheckpoint{ + SectionIndex: 0, + SectionHead: common.HexToHash("0x7fa3c32f996c2bfb41a1a65b3d8ea3e0a33a1674cde43678ad6f4235e764d17d"), + CHTRoot: common.HexToHash("0x98fc5d3de23a0fecebad236f6655533c157d26a1aedcd0852a514dc1169e6350"), + BloomRoot: common.HexToHash("0x99b5adb52b337fe25e74c1c6d3835b896bd638611b3aebddb2317cce27a3f9fa"), + } + checkpoint1 = params.TrustedCheckpoint{ + SectionIndex: 1, + SectionHead: common.HexToHash("0x2d4dee68102125e59b0cc61b176bd89f0d12b3b91cfaf52ef8c2c82fb920c2d2"), + CHTRoot: common.HexToHash("0x7d428008ece3b4c4ef5439f071930aad0bb75108d381308df73beadcd01ded95"), + BloomRoot: common.HexToHash("0x652571f7736de17e7bbb427ac881474da684c6988a88bf51b10cca9a2ee148f4"), + } + checkpoint2 = params.TrustedCheckpoint{ + SectionIndex: 2, + SectionHead: common.HexToHash("0x61c0de578c0115b1dff8ef39aa600588c7c6ecb8a2f102003d7cf4c4146e9291"), + CHTRoot: common.HexToHash("0x407a08a407a2bc3838b74ca3eb206903c9c8a186ccf5ef14af07794efff1970b"), + BloomRoot: common.HexToHash("0x058b4161f558ce295a92925efc57f34f9210d5a30088d7475c183e0d3e58f5ac"), + } +) + +var ( + // The block frequency for creating checkpoint(only used in test) + sectionSize = big.NewInt(512) + + // The number of confirmations needed to generate a checkpoint(only used in test). + processConfirms = big.NewInt(4) +) + +// validateOperation executes the operation, watches and delivers all events fired by the backend and ensures the +// correctness by assert function. +func validateOperation(t *testing.T, c *contract.CheckpointOracle, backend *backends.SimulatedBackend, operation func(), + assert func(<-chan *contract.CheckpointOracleNewCheckpointVote) error, opName string) { + // Watch all events and deliver them to assert function + var ( + sink = make(chan *contract.CheckpointOracleNewCheckpointVote) + sub, _ = c.WatchNewCheckpointVote(nil, sink, nil) + ) + defer func() { + // Close all subscribers + sub.Unsubscribe() + }() + operation() + + // flush pending block + backend.Commit() + if err := assert(sink); err != nil { + t.Errorf("operation {%s} failed, err %s", opName, err) + } +} + +// validateEvents checks that the correct number of contract events +// fired by contract backend. +func validateEvents(target int, sink interface{}) (bool, []reflect.Value) { + chanval := reflect.ValueOf(sink) + chantyp := chanval.Type() + if chantyp.Kind() != reflect.Chan || chantyp.ChanDir()&reflect.RecvDir == 0 { + return false, nil + } + count := 0 + var recv []reflect.Value + timeout := time.After(1 * time.Second) + cases := []reflect.SelectCase{{Chan: chanval, Dir: reflect.SelectRecv}, {Chan: reflect.ValueOf(timeout), Dir: reflect.SelectRecv}} + for { + chose, v, _ := reflect.Select(cases) + if chose == 1 { + // Not enough event received + return false, nil + } + count += 1 + recv = append(recv, v) + if count == target { + break + } + } + done := time.After(50 * time.Millisecond) + cases = cases[:1] + cases = append(cases, reflect.SelectCase{Chan: reflect.ValueOf(done), Dir: reflect.SelectRecv}) + chose, _, _ := reflect.Select(cases) + // If chose equal 0, it means receiving redundant events. + return chose == 1, recv +} + +func signCheckpoint(addr common.Address, privateKey *ecdsa.PrivateKey, index uint64, hash common.Hash) []byte { + // EIP 191 style signatures + // + // Arguments when calculating hash to validate + // 1: byte(0x19) - the initial 0x19 byte + // 2: byte(0) - the version byte (data with intended validator) + // 3: this - the validator address + // -- Application specific data + // 4 : checkpoint section_index(uint64) + // 5 : checkpoint hash (bytes32) + // hash = keccak256(checkpoint_index, section_head, cht_root, bloom_root) + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, index) + data := append([]byte{0x19, 0x00}, append(addr.Bytes(), append(buf, hash.Bytes()...)...)...) + sig, _ := crypto.Sign(crypto.Keccak256(data), privateKey) + sig[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + return sig +} + +// assertSignature verifies whether the recovered signers are equal with expected. +func assertSignature(addr common.Address, index uint64, hash [32]byte, r, s [32]byte, v uint8, expect common.Address) bool { + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, index) + data := append([]byte{0x19, 0x00}, append(addr.Bytes(), append(buf, hash[:]...)...)...) + pubkey, err := crypto.Ecrecover(crypto.Keccak256(data), append(r[:], append(s[:], v-27)...)) + if err != nil { + return false + } + var signer common.Address + copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) + return bytes.Equal(signer.Bytes(), expect.Bytes()) +} + +type Account struct { + key *ecdsa.PrivateKey + addr common.Address +} +type Accounts []Account + +func (a Accounts) Len() int { return len(a) } +func (a Accounts) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a Accounts) Less(i, j int) bool { return bytes.Compare(a[i].addr.Bytes(), a[j].addr.Bytes()) < 0 } + +func TestCheckpointRegister(t *testing.T) { + // Initialize test accounts + var accounts Accounts + for i := 0; i < 3; i++ { + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + accounts = append(accounts, Account{key: key, addr: addr}) + } + sort.Sort(accounts) + + // Deploy registrar contract + contractBackend := backends.NewSimulatedBackend(core.GenesisAlloc{accounts[0].addr: {Balance: big.NewInt(1000000000)}, accounts[1].addr: {Balance: big.NewInt(1000000000)}, accounts[2].addr: {Balance: big.NewInt(1000000000)}}, 10000000) + defer contractBackend.Close() + + transactOpts := bind.NewKeyedTransactor(accounts[0].key) + + // 3 trusted signers, threshold 2 + contractAddr, _, c, err := contract.DeployCheckpointOracle(transactOpts, contractBackend, []common.Address{accounts[0].addr, accounts[1].addr, accounts[2].addr}, sectionSize, processConfirms, big.NewInt(2)) + if err != nil { + t.Error("Failed to deploy registrar contract", err) + } + contractBackend.Commit() + + // getRecent returns block height and hash of the head parent. + getRecent := func() (*big.Int, common.Hash) { + parentNumber := new(big.Int).Sub(contractBackend.Blockchain().CurrentHeader().Number, big.NewInt(1)) + parentHash := contractBackend.Blockchain().CurrentHeader().ParentHash + return parentNumber, parentHash + } + // collectSig generates specified number signatures. + collectSig := func(index uint64, hash common.Hash, n int, unauthorized *ecdsa.PrivateKey) (v []uint8, r [][32]byte, s [][32]byte) { + for i := 0; i < n; i++ { + sig := signCheckpoint(contractAddr, accounts[i].key, index, hash) + if unauthorized != nil { + sig = signCheckpoint(contractAddr, unauthorized, index, hash) + } + r = append(r, common.BytesToHash(sig[:32])) + s = append(s, common.BytesToHash(sig[32:64])) + v = append(v, sig[64]) + } + return v, r, s + } + // insertEmptyBlocks inserts a batch of empty blocks to blockchain. + insertEmptyBlocks := func(number int) { + for i := 0; i < number; i++ { + contractBackend.Commit() + } + } + // assert checks whether the current contract status is same with + // the expected. + assert := func(index uint64, hash [32]byte, height *big.Int) error { + lindex, lhash, lheight, err := c.GetLatestCheckpoint(nil) + if err != nil { + return err + } + if lindex != index { + return errors.New("latest checkpoint index mismatch") + } + if !bytes.Equal(lhash[:], hash[:]) { + return errors.New("latest checkpoint hash mismatch") + } + if lheight.Cmp(height) != 0 { + return errors.New("latest checkpoint height mismatch") + } + return nil + } + + // Test future checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(0, checkpoint0.Hash(), 2, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint0.Hash(), 0, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + return assert(0, emptyHash, big.NewInt(0)) + }, "test future checkpoint registration") + + insertEmptyBlocks(int(sectionSize.Uint64() + processConfirms.Uint64())) + + // Test transaction replay protection + validateOperation(t, c, contractBackend, func() { + number, _ := getRecent() + v, r, s := collectSig(0, checkpoint0.Hash(), 2, nil) + hash := common.HexToHash("deadbeef") + c.SetCheckpoint(transactOpts, number, hash, checkpoint0.Hash(), 0, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + return assert(0, emptyHash, big.NewInt(0)) + }, "test transaction replay protection") + + // Test unauthorized signature checking + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + u, _ := crypto.GenerateKey() + v, r, s := collectSig(0, checkpoint0.Hash(), 2, u) + c.SetCheckpoint(transactOpts, number, hash, checkpoint0.Hash(), 0, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + return assert(0, emptyHash, big.NewInt(0)) + }, "test unauthorized signature checking") + + // Test un-multi-signature checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(0, checkpoint0.Hash(), 1, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint0.Hash(), 0, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + return assert(0, emptyHash, big.NewInt(0)) + }, "test un-multi-signature checkpoint registration") + + // Test valid checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(0, checkpoint0.Hash(), 2, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint0.Hash(), 0, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + if valid, recv := validateEvents(2, events); !valid { + return errors.New("receive incorrect number of events") + } else { + for i := 0; i < len(recv); i++ { + event := recv[i].Interface().(*contract.CheckpointOracleNewCheckpointVote) + if !assertSignature(contractAddr, event.Index, event.CheckpointHash, event.R, event.S, event.V, accounts[i].addr) { + return errors.New("recover signer failed") + } + } + } + number, _ := getRecent() + return assert(0, checkpoint0.Hash(), number.Add(number, big.NewInt(1))) + }, "test valid checkpoint registration") + + distance := 3*sectionSize.Uint64() + processConfirms.Uint64() - contractBackend.Blockchain().CurrentHeader().Number.Uint64() + insertEmptyBlocks(int(distance)) + + // Test uncontinuous checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(2, checkpoint2.Hash(), 2, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint2.Hash(), 2, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + if valid, recv := validateEvents(2, events); !valid { + return errors.New("receive incorrect number of events") + } else { + for i := 0; i < len(recv); i++ { + event := recv[i].Interface().(*contract.CheckpointOracleNewCheckpointVote) + if !assertSignature(contractAddr, event.Index, event.CheckpointHash, event.R, event.S, event.V, accounts[i].addr) { + return errors.New("recover signer failed") + } + } + } + number, _ := getRecent() + return assert(2, checkpoint2.Hash(), number.Add(number, big.NewInt(1))) + }, "test uncontinuous checkpoint registration") + + // Test old checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(1, checkpoint1.Hash(), 2, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint1.Hash(), 1, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + number, _ := getRecent() + return assert(2, checkpoint2.Hash(), number) + }, "test uncontinuous checkpoint registration") + + // Test stale checkpoint registration + validateOperation(t, c, contractBackend, func() { + number, hash := getRecent() + v, r, s := collectSig(2, checkpoint2.Hash(), 2, nil) + c.SetCheckpoint(transactOpts, number, hash, checkpoint2.Hash(), 2, v, r, s) + }, func(events <-chan *contract.CheckpointOracleNewCheckpointVote) error { + number, _ := getRecent() + return assert(2, checkpoint2.Hash(), number.Sub(number, big.NewInt(1))) + }, "test stale checkpoint registration") +} diff --git a/contracts/chequebook/api.go b/contracts/chequebook/api.go deleted file mode 100644 index fb7080308b65..000000000000 --- a/contracts/chequebook/api.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package chequebook - -import ( - "errors" - "math/big" - - "github.com/ethereum/go-ethereum/common" -) - -const Version = "1.0" - -var errNoChequebook = errors.New("no chequebook") - -type API struct { - chequebookf func() *Chequebook -} - -func NewAPI(ch func() *Chequebook) *API { - return &API{ch} -} - -func (a *API) Balance() (string, error) { - ch := a.chequebookf() - if ch == nil { - return "", errNoChequebook - } - return ch.Balance().String(), nil -} - -func (a *API) Issue(beneficiary common.Address, amount *big.Int) (cheque *Cheque, err error) { - ch := a.chequebookf() - if ch == nil { - return nil, errNoChequebook - } - return ch.Issue(beneficiary, amount) -} - -func (a *API) Cash(cheque *Cheque) (txhash string, err error) { - ch := a.chequebookf() - if ch == nil { - return "", errNoChequebook - } - return ch.Cash(cheque) -} - -func (a *API) Deposit(amount *big.Int) (txhash string, err error) { - ch := a.chequebookf() - if ch == nil { - return "", errNoChequebook - } - return ch.Deposit(amount) -} diff --git a/contracts/chequebook/cheque.go b/contracts/chequebook/cheque.go deleted file mode 100644 index 53eb093a6196..000000000000 --- a/contracts/chequebook/cheque.go +++ /dev/null @@ -1,641 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package chequebook package wraps the 'chequebook' Ethereum smart contract. -// -// The functions in this package allow using chequebook for -// issuing, receiving, verifying cheques in ether; (auto)cashing cheques in ether -// as well as (auto)depositing ether to the chequebook contract. -package chequebook - -//go:generate abigen --sol contract/chequebook.sol --exc contract/mortal.sol:mortal,contract/owned.sol:owned --pkg contract --out contract/chequebook.go -//go:generate go run ./gencode.go - -import ( - "bytes" - "context" - "crypto/ecdsa" - "encoding/json" - "fmt" - "io/ioutil" - "math/big" - "os" - "sync" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/contracts/chequebook/contract" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/services/swap/swap" -) - -// TODO(zelig): watch peer solvency and notify of bouncing cheques -// TODO(zelig): enable paying with cheque by signing off - -// Some functionality requires interacting with the blockchain: -// * setting current balance on peer's chequebook -// * sending the transaction to cash the cheque -// * depositing ether to the chequebook -// * watching incoming ether - -var ( - gasToCash = uint64(2000000) // gas cost of a cash transaction using chequebook - // gasToDeploy = uint64(3000000) -) - -// Backend wraps all methods required for chequebook operation. -type Backend interface { - bind.ContractBackend - TransactionReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error) - BalanceAt(ctx context.Context, address common.Address, blockNum *big.Int) (*big.Int, error) -} - -// Cheque represents a payment promise to a single beneficiary. -type Cheque struct { - Contract common.Address // address of chequebook, needed to avoid cross-contract submission - Beneficiary common.Address - Amount *big.Int // cumulative amount of all funds sent - Sig []byte // signature Sign(Keccak256(contract, beneficiary, amount), prvKey) -} - -func (ch *Cheque) String() string { - return fmt.Sprintf("contract: %s, beneficiary: %s, amount: %v, signature: %x", ch.Contract.Hex(), ch.Beneficiary.Hex(), ch.Amount, ch.Sig) -} - -type Params struct { - ContractCode, ContractAbi string -} - -var ContractParams = &Params{contract.ChequebookBin, contract.ChequebookABI} - -// Chequebook can create and sign cheques from a single contract to multiple beneficiaries. -// It is the outgoing payment handler for peer to peer micropayments. -type Chequebook struct { - path string // path to chequebook file - prvKey *ecdsa.PrivateKey // private key to sign cheque with - lock sync.Mutex // - backend Backend // blockchain API - quit chan bool // when closed causes autodeposit to stop - owner common.Address // owner address (derived from pubkey) - contract *contract.Chequebook // abigen binding - session *contract.ChequebookSession // abigen binding with Tx Opts - - // persisted fields - balance *big.Int // not synced with blockchain - contractAddr common.Address // contract address - sent map[common.Address]*big.Int //tallies for beneficiaries - - txhash string // tx hash of last deposit tx - threshold *big.Int // threshold that triggers autodeposit if not nil - buffer *big.Int // buffer to keep on top of balance for fork protection - - log log.Logger // contextual logger with the contract address embedded -} - -func (chbook *Chequebook) String() string { - return fmt.Sprintf("contract: %s, owner: %s, balance: %v, signer: %x", chbook.contractAddr.Hex(), chbook.owner.Hex(), chbook.balance, chbook.prvKey.PublicKey) -} - -// NewChequebook creates a new Chequebook. -func NewChequebook(path string, contractAddr common.Address, prvKey *ecdsa.PrivateKey, backend Backend) (self *Chequebook, err error) { - balance := new(big.Int) - sent := make(map[common.Address]*big.Int) - - chbook, err := contract.NewChequebook(contractAddr, backend) - if err != nil { - return nil, err - } - transactOpts := bind.NewKeyedTransactor(prvKey) - session := &contract.ChequebookSession{ - Contract: chbook, - TransactOpts: *transactOpts, - } - - self = &Chequebook{ - prvKey: prvKey, - balance: balance, - contractAddr: contractAddr, - sent: sent, - path: path, - backend: backend, - owner: transactOpts.From, - contract: chbook, - session: session, - log: log.New("contract", contractAddr), - } - - if (contractAddr != common.Address{}) { - self.setBalanceFromBlockChain() - self.log.Trace("New chequebook initialised", "owner", self.owner, "balance", self.balance) - } - return -} - -func (chbook *Chequebook) setBalanceFromBlockChain() { - balance, err := chbook.backend.BalanceAt(context.TODO(), chbook.contractAddr, nil) - if err != nil { - log.Error("Failed to retrieve chequebook balance", "err", err) - } else { - chbook.balance.Set(balance) - } -} - -// LoadChequebook loads a chequebook from disk (file path). -func LoadChequebook(path string, prvKey *ecdsa.PrivateKey, backend Backend, checkBalance bool) (self *Chequebook, err error) { - var data []byte - data, err = ioutil.ReadFile(path) - if err != nil { - return - } - self, _ = NewChequebook(path, common.Address{}, prvKey, backend) - - err = json.Unmarshal(data, self) - if err != nil { - return nil, err - } - if checkBalance { - self.setBalanceFromBlockChain() - } - log.Trace("Loaded chequebook from disk", "path", path) - - return -} - -// chequebookFile is the JSON representation of a chequebook. -type chequebookFile struct { - Balance string - Contract string - Owner string - Sent map[string]string -} - -// UnmarshalJSON deserialises a chequebook. -func (chbook *Chequebook) UnmarshalJSON(data []byte) error { - var file chequebookFile - err := json.Unmarshal(data, &file) - if err != nil { - return err - } - _, ok := chbook.balance.SetString(file.Balance, 10) - if !ok { - return fmt.Errorf("cumulative amount sent: unable to convert string to big integer: %v", file.Balance) - } - chbook.contractAddr = common.HexToAddress(file.Contract) - for addr, sent := range file.Sent { - chbook.sent[common.HexToAddress(addr)], ok = new(big.Int).SetString(sent, 10) - if !ok { - return fmt.Errorf("beneficiary %v cumulative amount sent: unable to convert string to big integer: %v", addr, sent) - } - } - return nil -} - -// MarshalJSON serialises a chequebook. -func (chbook *Chequebook) MarshalJSON() ([]byte, error) { - var file = &chequebookFile{ - Balance: chbook.balance.String(), - Contract: chbook.contractAddr.Hex(), - Owner: chbook.owner.Hex(), - Sent: make(map[string]string), - } - for addr, sent := range chbook.sent { - file.Sent[addr.Hex()] = sent.String() - } - return json.Marshal(file) -} - -// Save persists the chequebook on disk, remembering balance, contract address and -// cumulative amount of funds sent for each beneficiary. -func (chbook *Chequebook) Save() (err error) { - data, err := json.MarshalIndent(chbook, "", " ") - if err != nil { - return err - } - chbook.log.Trace("Saving chequebook to disk", chbook.path) - - return ioutil.WriteFile(chbook.path, data, os.ModePerm) -} - -// Stop quits the autodeposit go routine to terminate -func (chbook *Chequebook) Stop() { - defer chbook.lock.Unlock() - chbook.lock.Lock() - if chbook.quit != nil { - close(chbook.quit) - chbook.quit = nil - } -} - -// Issue creates a cheque signed by the chequebook owner's private key. The -// signer commits to a contract (one that they own), a beneficiary and amount. -func (chbook *Chequebook) Issue(beneficiary common.Address, amount *big.Int) (ch *Cheque, err error) { - defer chbook.lock.Unlock() - chbook.lock.Lock() - - if amount.Sign() <= 0 { - return nil, fmt.Errorf("amount must be greater than zero (%v)", amount) - } - if chbook.balance.Cmp(amount) < 0 { - err = fmt.Errorf("insufficient funds to issue cheque for amount: %v. balance: %v", amount, chbook.balance) - } else { - var sig []byte - sent, found := chbook.sent[beneficiary] - if !found { - sent = new(big.Int) - chbook.sent[beneficiary] = sent - } - sum := new(big.Int).Set(sent) - sum.Add(sum, amount) - - sig, err = crypto.Sign(sigHash(chbook.contractAddr, beneficiary, sum), chbook.prvKey) - if err == nil { - ch = &Cheque{ - Contract: chbook.contractAddr, - Beneficiary: beneficiary, - Amount: sum, - Sig: sig, - } - sent.Set(sum) - chbook.balance.Sub(chbook.balance, amount) // subtract amount from balance - } - } - - // auto deposit if threshold is set and balance is less then threshold - // note this is called even if issuing cheque fails - // so we reattempt depositing - if chbook.threshold != nil { - if chbook.balance.Cmp(chbook.threshold) < 0 { - send := new(big.Int).Sub(chbook.buffer, chbook.balance) - chbook.deposit(send) - } - } - - return -} - -// Cash is a convenience method to cash any cheque. -func (chbook *Chequebook) Cash(ch *Cheque) (txhash string, err error) { - return ch.Cash(chbook.session) -} - -// data to sign: contract address, beneficiary, cumulative amount of funds ever sent -func sigHash(contract, beneficiary common.Address, sum *big.Int) []byte { - bigamount := sum.Bytes() - if len(bigamount) > 32 { - return nil - } - var amount32 [32]byte - copy(amount32[32-len(bigamount):32], bigamount) - input := append(contract.Bytes(), beneficiary.Bytes()...) - input = append(input, amount32[:]...) - return crypto.Keccak256(input) -} - -// Balance returns the current balance of the chequebook. -func (chbook *Chequebook) Balance() *big.Int { - defer chbook.lock.Unlock() - chbook.lock.Lock() - return new(big.Int).Set(chbook.balance) -} - -// Owner returns the owner account of the chequebook. -func (chbook *Chequebook) Owner() common.Address { - return chbook.owner -} - -// Address returns the on-chain contract address of the chequebook. -func (chbook *Chequebook) Address() common.Address { - return chbook.contractAddr -} - -// Deposit deposits money to the chequebook account. -func (chbook *Chequebook) Deposit(amount *big.Int) (string, error) { - defer chbook.lock.Unlock() - chbook.lock.Lock() - return chbook.deposit(amount) -} - -// deposit deposits amount to the chequebook account. -// The caller must hold self.lock. -func (chbook *Chequebook) deposit(amount *big.Int) (string, error) { - // since the amount is variable here, we do not use sessions - depositTransactor := bind.NewKeyedTransactor(chbook.prvKey) - depositTransactor.Value = amount - chbookRaw := &contract.ChequebookRaw{Contract: chbook.contract} - tx, err := chbookRaw.Transfer(depositTransactor) - if err != nil { - chbook.log.Warn("Failed to fund chequebook", "amount", amount, "balance", chbook.balance, "target", chbook.buffer, "err", err) - return "", err - } - // assume that transaction is actually successful, we add the amount to balance right away - chbook.balance.Add(chbook.balance, amount) - chbook.log.Trace("Deposited funds to chequebook", "amount", amount, "balance", chbook.balance, "target", chbook.buffer) - return tx.Hash().Hex(), nil -} - -// AutoDeposit (re)sets interval time and amount which triggers sending funds to the -// chequebook. Contract backend needs to be set if threshold is not less than buffer, then -// deposit will be triggered on every new cheque issued. -func (chbook *Chequebook) AutoDeposit(interval time.Duration, threshold, buffer *big.Int) { - defer chbook.lock.Unlock() - chbook.lock.Lock() - chbook.threshold = threshold - chbook.buffer = buffer - chbook.autoDeposit(interval) -} - -// autoDeposit starts a goroutine that periodically sends funds to the chequebook -// contract caller holds the lock the go routine terminates if Chequebook.quit is closed. -func (chbook *Chequebook) autoDeposit(interval time.Duration) { - if chbook.quit != nil { - close(chbook.quit) - chbook.quit = nil - } - // if threshold >= balance autodeposit after every cheque issued - if interval == time.Duration(0) || chbook.threshold != nil && chbook.buffer != nil && chbook.threshold.Cmp(chbook.buffer) >= 0 { - return - } - - ticker := time.NewTicker(interval) - chbook.quit = make(chan bool) - quit := chbook.quit - - go func() { - for { - select { - case <-quit: - return - case <-ticker.C: - chbook.lock.Lock() - if chbook.balance.Cmp(chbook.buffer) < 0 { - amount := new(big.Int).Sub(chbook.buffer, chbook.balance) - txhash, err := chbook.deposit(amount) - if err == nil { - chbook.txhash = txhash - } - } - chbook.lock.Unlock() - } - } - }() -} - -// Outbox can issue cheques from a single contract to a single beneficiary. -type Outbox struct { - chequeBook *Chequebook - beneficiary common.Address -} - -// NewOutbox creates an outbox. -func NewOutbox(chbook *Chequebook, beneficiary common.Address) *Outbox { - return &Outbox{chbook, beneficiary} -} - -// Issue creates cheque. -func (o *Outbox) Issue(amount *big.Int) (swap.Promise, error) { - return o.chequeBook.Issue(o.beneficiary, amount) -} - -// AutoDeposit enables auto-deposits on the underlying chequebook. -func (o *Outbox) AutoDeposit(interval time.Duration, threshold, buffer *big.Int) { - o.chequeBook.AutoDeposit(interval, threshold, buffer) -} - -// Stop helps satisfy the swap.OutPayment interface. -func (o *Outbox) Stop() {} - -// String implements fmt.Stringer. -func (o *Outbox) String() string { - return fmt.Sprintf("chequebook: %v, beneficiary: %s, balance: %v", o.chequeBook.Address().Hex(), o.beneficiary.Hex(), o.chequeBook.Balance()) -} - -// Inbox can deposit, verify and cash cheques from a single contract to a single -// beneficiary. It is the incoming payment handler for peer to peer micropayments. -type Inbox struct { - lock sync.Mutex - contract common.Address // peer's chequebook contract - beneficiary common.Address // local peer's receiving address - sender common.Address // local peer's address to send cashing tx from - signer *ecdsa.PublicKey // peer's public key - txhash string // tx hash of last cashing tx - session *contract.ChequebookSession // abi contract backend with tx opts - quit chan bool // when closed causes autocash to stop - maxUncashed *big.Int // threshold that triggers autocashing - cashed *big.Int // cumulative amount cashed - cheque *Cheque // last cheque, nil if none yet received - log log.Logger // contextual logger with the contract address embedded -} - -// NewInbox creates an Inbox. An Inboxes is not persisted, the cumulative sum is updated -// from blockchain when first cheque is received. -func NewInbox(prvKey *ecdsa.PrivateKey, contractAddr, beneficiary common.Address, signer *ecdsa.PublicKey, abigen bind.ContractBackend) (self *Inbox, err error) { - if signer == nil { - return nil, fmt.Errorf("signer is null") - } - chbook, err := contract.NewChequebook(contractAddr, abigen) - if err != nil { - return nil, err - } - transactOpts := bind.NewKeyedTransactor(prvKey) - transactOpts.GasLimit = gasToCash - session := &contract.ChequebookSession{ - Contract: chbook, - TransactOpts: *transactOpts, - } - sender := transactOpts.From - - self = &Inbox{ - contract: contractAddr, - beneficiary: beneficiary, - sender: sender, - signer: signer, - session: session, - cashed: new(big.Int).Set(common.Big0), - log: log.New("contract", contractAddr), - } - self.log.Trace("New chequebook inbox initialized", "beneficiary", self.beneficiary, "signer", hexutil.Bytes(crypto.FromECDSAPub(signer))) - return -} - -func (i *Inbox) String() string { - return fmt.Sprintf("chequebook: %v, beneficiary: %s, balance: %v", i.contract.Hex(), i.beneficiary.Hex(), i.cheque.Amount) -} - -// Stop quits the autocash goroutine. -func (i *Inbox) Stop() { - defer i.lock.Unlock() - i.lock.Lock() - if i.quit != nil { - close(i.quit) - i.quit = nil - } -} - -// Cash attempts to cash the current cheque. -func (i *Inbox) Cash() (txhash string, err error) { - if i.cheque != nil { - txhash, err = i.cheque.Cash(i.session) - i.log.Trace("Cashing in chequebook cheque", "amount", i.cheque.Amount, "beneficiary", i.beneficiary) - i.cashed = i.cheque.Amount - } - return -} - -// AutoCash (re)sets maximum time and amount which triggers cashing of the last uncashed -// cheque if maxUncashed is set to 0, then autocash on receipt. -func (i *Inbox) AutoCash(cashInterval time.Duration, maxUncashed *big.Int) { - defer i.lock.Unlock() - i.lock.Lock() - i.maxUncashed = maxUncashed - i.autoCash(cashInterval) -} - -// autoCash starts a loop that periodically clears the last cheque -// if the peer is trusted. Clearing period could be 24h or a week. -// The caller must hold self.lock. -func (i *Inbox) autoCash(cashInterval time.Duration) { - if i.quit != nil { - close(i.quit) - i.quit = nil - } - // if maxUncashed is set to 0, then autocash on receipt - if cashInterval == time.Duration(0) || i.maxUncashed != nil && i.maxUncashed.Sign() == 0 { - return - } - - ticker := time.NewTicker(cashInterval) - i.quit = make(chan bool) - quit := i.quit - - go func() { - for { - select { - case <-quit: - return - case <-ticker.C: - i.lock.Lock() - if i.cheque != nil && i.cheque.Amount.Cmp(i.cashed) != 0 { - txhash, err := i.Cash() - if err == nil { - i.txhash = txhash - } - } - i.lock.Unlock() - } - } - }() -} - -// Receive is called to deposit the latest cheque to the incoming Inbox. -// The given promise must be a *Cheque. -func (i *Inbox) Receive(promise swap.Promise) (*big.Int, error) { - ch := promise.(*Cheque) - - defer i.lock.Unlock() - i.lock.Lock() - - var sum *big.Int - if i.cheque == nil { - // the sum is checked against the blockchain once a cheque is received - tally, err := i.session.Sent(i.beneficiary) - if err != nil { - return nil, fmt.Errorf("inbox: error calling backend to set amount: %v", err) - } - sum = tally - } else { - sum = i.cheque.Amount - } - - amount, err := ch.Verify(i.signer, i.contract, i.beneficiary, sum) - var uncashed *big.Int - if err == nil { - i.cheque = ch - - if i.maxUncashed != nil { - uncashed = new(big.Int).Sub(ch.Amount, i.cashed) - if i.maxUncashed.Cmp(uncashed) < 0 { - i.Cash() - } - } - i.log.Trace("Received cheque in chequebook inbox", "amount", amount, "uncashed", uncashed) - } - - return amount, err -} - -// Verify verifies cheque for signer, contract, beneficiary, amount, valid signature. -func (ch *Cheque) Verify(signerKey *ecdsa.PublicKey, contract, beneficiary common.Address, sum *big.Int) (*big.Int, error) { - log.Trace("Verifying chequebook cheque", "cheque", ch, "sum", sum) - if sum == nil { - return nil, fmt.Errorf("invalid amount") - } - - if ch.Beneficiary != beneficiary { - return nil, fmt.Errorf("beneficiary mismatch: %v != %v", ch.Beneficiary.Hex(), beneficiary.Hex()) - } - if ch.Contract != contract { - return nil, fmt.Errorf("contract mismatch: %v != %v", ch.Contract.Hex(), contract.Hex()) - } - - amount := new(big.Int).Set(ch.Amount) - if sum != nil { - amount.Sub(amount, sum) - if amount.Sign() <= 0 { - return nil, fmt.Errorf("incorrect amount: %v <= 0", amount) - } - } - - pubKey, err := crypto.SigToPub(sigHash(ch.Contract, beneficiary, ch.Amount), ch.Sig) - if err != nil { - return nil, fmt.Errorf("invalid signature: %v", err) - } - if !bytes.Equal(crypto.FromECDSAPub(pubKey), crypto.FromECDSAPub(signerKey)) { - return nil, fmt.Errorf("signer mismatch: %x != %x", crypto.FromECDSAPub(pubKey), crypto.FromECDSAPub(signerKey)) - } - return amount, nil -} - -// v/r/s representation of signature -func sig2vrs(sig []byte) (v byte, r, s [32]byte) { - v = sig[64] + 27 - copy(r[:], sig[:32]) - copy(s[:], sig[32:64]) - return -} - -// Cash cashes the cheque by sending an Ethereum transaction. -func (ch *Cheque) Cash(session *contract.ChequebookSession) (string, error) { - v, r, s := sig2vrs(ch.Sig) - tx, err := session.Cash(ch.Beneficiary, ch.Amount, v, r, s) - if err != nil { - return "", err - } - return tx.Hash().Hex(), nil -} - -// ValidateCode checks that the on-chain code at address matches the expected chequebook -// contract code. This is used to detect suicided chequebooks. -func ValidateCode(ctx context.Context, b Backend, address common.Address) (ok bool, err error) { - code, err := b.CodeAt(ctx, address, nil) - if err != nil { - return false, err - } - return bytes.Equal(code, common.FromHex(contract.ContractDeployedCode)), nil -} diff --git a/contracts/chequebook/cheque_test.go b/contracts/chequebook/cheque_test.go deleted file mode 100644 index 4bd2e176b14f..000000000000 --- a/contracts/chequebook/cheque_test.go +++ /dev/null @@ -1,487 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package chequebook - -import ( - "crypto/ecdsa" - "math/big" - "os" - "path/filepath" - "testing" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/chequebook/contract" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/crypto" -) - -var ( - key0, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - key1, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") - key2, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - addr0 = crypto.PubkeyToAddress(key0.PublicKey) - addr1 = crypto.PubkeyToAddress(key1.PublicKey) - addr2 = crypto.PubkeyToAddress(key2.PublicKey) -) - -func newTestBackend() *backends.SimulatedBackend { - return backends.NewSimulatedBackend(core.GenesisAlloc{ - addr0: {Balance: big.NewInt(1000000000)}, - addr1: {Balance: big.NewInt(1000000000)}, - addr2: {Balance: big.NewInt(1000000000)}, - }, 10000000) -} - -func deploy(prvKey *ecdsa.PrivateKey, amount *big.Int, backend *backends.SimulatedBackend) (common.Address, error) { - deployTransactor := bind.NewKeyedTransactor(prvKey) - deployTransactor.Value = amount - addr, _, _, err := contract.DeployChequebook(deployTransactor, backend) - if err != nil { - return common.Address{}, err - } - backend.Commit() - return addr, nil -} - -func TestIssueAndReceive(t *testing.T) { - path := filepath.Join(os.TempDir(), "chequebook-test.json") - backend := newTestBackend() - addr0, err := deploy(key0, big.NewInt(0), backend) - if err != nil { - t.Fatalf("deploy contract: expected no error, got %v", err) - } - chbook, err := NewChequebook(path, addr0, key0, backend) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - chbook.sent[addr1] = new(big.Int).SetUint64(42) - amount := common.Big1 - - if _, err = chbook.Issue(addr1, amount); err == nil { - t.Fatalf("expected insufficient funds error, got none") - } - - chbook.balance = new(big.Int).Set(common.Big1) - if chbook.Balance().Cmp(common.Big1) != 0 { - t.Fatalf("expected: %v, got %v", "0", chbook.Balance()) - } - - ch, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - if chbook.Balance().Sign() != 0 { - t.Errorf("expected: %v, got %v", "0", chbook.Balance()) - } - - chbox, err := NewInbox(key1, addr0, addr1, &key0.PublicKey, backend) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - received, err := chbox.Receive(ch) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - if received.Cmp(big.NewInt(43)) != 0 { - t.Errorf("expected: %v, got %v", "43", received) - } - -} - -func TestCheckbookFile(t *testing.T) { - path := filepath.Join(os.TempDir(), "chequebook-test.json") - backend := newTestBackend() - chbook, err := NewChequebook(path, addr0, key0, backend) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - chbook.sent[addr1] = new(big.Int).SetUint64(42) - chbook.balance = new(big.Int).Set(common.Big1) - - chbook.Save() - - chbook, err = LoadChequebook(path, key0, backend, false) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - if chbook.Balance().Cmp(common.Big1) != 0 { - t.Errorf("expected: %v, got %v", "0", chbook.Balance()) - } - - var ch *Cheque - if ch, err = chbook.Issue(addr1, common.Big1); err != nil { - t.Fatalf("expected no error, got %v", err) - } - if ch.Amount.Cmp(new(big.Int).SetUint64(43)) != 0 { - t.Errorf("expected: %v, got %v", "0", ch.Amount) - } - - err = chbook.Save() - if err != nil { - t.Fatalf("expected no error, got %v", err) - } -} - -func TestVerifyErrors(t *testing.T) { - path0 := filepath.Join(os.TempDir(), "chequebook-test-0.json") - backend := newTestBackend() - contr0, err := deploy(key0, common.Big2, backend) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - chbook0, err := NewChequebook(path0, contr0, key0, backend) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - path1 := filepath.Join(os.TempDir(), "chequebook-test-1.json") - contr1, _ := deploy(key1, common.Big2, backend) - chbook1, err := NewChequebook(path1, contr1, key1, backend) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - chbook0.sent[addr1] = new(big.Int).SetUint64(42) - chbook0.balance = new(big.Int).Set(common.Big2) - chbook1.balance = new(big.Int).Set(common.Big1) - amount := common.Big1 - ch0, err := chbook0.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - chbox, err := NewInbox(key1, contr0, addr1, &key0.PublicKey, backend) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - received, err := chbox.Receive(ch0) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - if received.Cmp(big.NewInt(43)) != 0 { - t.Errorf("expected: %v, got %v", "43", received) - } - - ch1, err := chbook0.Issue(addr2, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - received, err = chbox.Receive(ch1) - t.Logf("correct error: %v", err) - if err == nil { - t.Fatalf("expected receiver error, got none and value %v", received) - } - - ch2, err := chbook1.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - received, err = chbox.Receive(ch2) - t.Logf("correct error: %v", err) - if err == nil { - t.Fatalf("expected sender error, got none and value %v", received) - } - - _, err = chbook1.Issue(addr1, new(big.Int).SetInt64(-1)) - t.Logf("correct error: %v", err) - if err == nil { - t.Fatalf("expected incorrect amount error, got none") - } - - received, err = chbox.Receive(ch0) - t.Logf("correct error: %v", err) - if err == nil { - t.Fatalf("expected incorrect amount error, got none and value %v", received) - } - -} - -func TestDeposit(t *testing.T) { - path0 := filepath.Join(os.TempDir(), "chequebook-test-0.json") - backend := newTestBackend() - contr0, _ := deploy(key0, new(big.Int), backend) - - chbook, err := NewChequebook(path0, contr0, key0, backend) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - - balance := new(big.Int).SetUint64(42) - chbook.Deposit(balance) - backend.Commit() - if chbook.Balance().Cmp(balance) != 0 { - t.Fatalf("expected balance %v, got %v", balance, chbook.Balance()) - } - - amount := common.Big1 - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - exp := new(big.Int).SetUint64(41) - if chbook.Balance().Cmp(exp) != 0 { - t.Fatalf("expected balance %v, got %v", exp, chbook.Balance()) - } - - // autodeposit on each issue - chbook.AutoDeposit(0, balance, balance) - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - if chbook.Balance().Cmp(balance) != 0 { - t.Fatalf("expected balance %v, got %v", balance, chbook.Balance()) - } - - // autodeposit off - chbook.AutoDeposit(0, common.Big0, balance) - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - exp = new(big.Int).SetUint64(40) - if chbook.Balance().Cmp(exp) != 0 { - t.Fatalf("expected balance %v, got %v", exp, chbook.Balance()) - } - - // autodeposit every 200ms if new cheque issued - interval := 200 * time.Millisecond - chbook.AutoDeposit(interval, common.Big1, balance) - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - exp = new(big.Int).SetUint64(38) - if chbook.Balance().Cmp(exp) != 0 { - t.Fatalf("expected balance %v, got %v", exp, chbook.Balance()) - } - - time.Sleep(3 * interval) - backend.Commit() - if chbook.Balance().Cmp(balance) != 0 { - t.Fatalf("expected balance %v, got %v", balance, chbook.Balance()) - } - - exp = new(big.Int).SetUint64(40) - chbook.AutoDeposit(4*interval, exp, balance) - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - time.Sleep(3 * interval) - backend.Commit() - if chbook.Balance().Cmp(exp) != 0 { - t.Fatalf("expected balance %v, got %v", exp, chbook.Balance()) - } - - _, err = chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - time.Sleep(1 * interval) - backend.Commit() - - if chbook.Balance().Cmp(balance) != 0 { - t.Fatalf("expected balance %v, got %v", balance, chbook.Balance()) - } - - chbook.AutoDeposit(1*interval, common.Big0, balance) - chbook.Stop() - - _, err = chbook.Issue(addr1, common.Big1) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - _, err = chbook.Issue(addr1, common.Big2) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - time.Sleep(1 * interval) - backend.Commit() - - exp = new(big.Int).SetUint64(39) - if chbook.Balance().Cmp(exp) != 0 { - t.Fatalf("expected balance %v, got %v", exp, chbook.Balance()) - } - -} - -func TestCash(t *testing.T) { - path := filepath.Join(os.TempDir(), "chequebook-test.json") - backend := newTestBackend() - contr0, _ := deploy(key0, common.Big2, backend) - - chbook, err := NewChequebook(path, contr0, key0, backend) - if err != nil { - t.Errorf("expected no error, got %v", err) - } - chbook.sent[addr1] = new(big.Int).SetUint64(42) - amount := common.Big1 - chbook.balance = new(big.Int).Set(common.Big1) - ch, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - chbox, err := NewInbox(key1, contr0, addr1, &key0.PublicKey, backend) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - // cashing latest cheque - if _, err = chbox.Receive(ch); err != nil { - t.Fatalf("expected no error, got %v", err) - } - if _, err = ch.Cash(chbook.session); err != nil { - t.Fatal("Cash failed:", err) - } - backend.Commit() - - chbook.balance = new(big.Int).Set(common.Big3) - ch0, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - ch1, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - interval := 10 * time.Millisecond - // setting autocash with interval of 10ms - chbox.AutoCash(interval, nil) - _, err = chbox.Receive(ch0) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - _, err = chbox.Receive(ch1) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - // after 3x interval time and 2 cheques received, exactly one cashing tx is sent - time.Sleep(4 * interval) - backend.Commit() - - // after stopping autocash no more tx are sent - ch2, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - chbox.Stop() - _, err = chbox.Receive(ch2) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - time.Sleep(2 * interval) - backend.Commit() - - // autocash below 1 - chbook.balance = big.NewInt(2) - chbox.AutoCash(0, common.Big1) - - ch3, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - ch4, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - _, err = chbox.Receive(ch3) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - _, err = chbox.Receive(ch4) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - // autochash on receipt when maxUncashed is 0 - chbook.balance = new(big.Int).Set(common.Big2) - chbox.AutoCash(0, common.Big0) - - ch5, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - ch6, err := chbook.Issue(addr1, amount) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - - _, err = chbox.Receive(ch5) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - - _, err = chbox.Receive(ch6) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - backend.Commit() - -} diff --git a/contracts/chequebook/contract/chequebook.go b/contracts/chequebook/contract/chequebook.go deleted file mode 100644 index 3129b811c684..000000000000 --- a/contracts/chequebook/contract/chequebook.go +++ /dev/null @@ -1,367 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contract - -import ( - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// ChequebookABI is the input ABI used to generate the binding from. -const ChequebookABI = "[{\"constant\":false,\"inputs\":[],\"name\":\"kill\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"sent\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"beneficiary\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"sig_v\",\"type\":\"uint8\"},{\"name\":\"sig_r\",\"type\":\"bytes32\"},{\"name\":\"sig_s\",\"type\":\"bytes32\"}],\"name\":\"cash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"deadbeat\",\"type\":\"address\"}],\"name\":\"Overdraft\",\"type\":\"event\"}]" - -// ChequebookBin is the compiled bytecode used for deploying new contracts. -const ChequebookBin = `0x606060405260008054600160a060020a033316600160a060020a03199091161790556102ec806100306000396000f3006060604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166341c0e1b581146100585780637bf786f81461006b578063fbf788d61461009c575b005b341561006357600080fd5b6100566100ca565b341561007657600080fd5b61008a600160a060020a03600435166100f1565b60405190815260200160405180910390f35b34156100a757600080fd5b610056600160a060020a036004351660243560ff60443516606435608435610103565b60005433600160a060020a03908116911614156100ef57600054600160a060020a0316ff5b565b60016020526000908152604090205481565b600160a060020a0385166000908152600160205260408120548190861161012957600080fd5b3087876040516c01000000000000000000000000600160a060020a03948516810282529290931690910260148301526028820152604801604051809103902091506001828686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156101cf57600080fd5b505060206040510351600054600160a060020a039081169116146101f257600080fd5b50600160a060020a03808716600090815260016020526040902054860390301631811161026257600160a060020a0387166000818152600160205260409081902088905582156108fc0290839051600060405180830381858888f19350505050151561025d57600080fd5b6102b7565b6000547f2250e2993c15843b32621c89447cc589ee7a9f049c026986e545d3c2c0c6f97890600160a060020a0316604051600160a060020a03909116815260200160405180910390a186600160a060020a0316ff5b505050505050505600a165627a7a72305820533e856fc37e3d64d1706bcc7dfb6b1d490c8d566ea498d9d01ec08965a896ca0029` - -// DeployChequebook deploys a new Ethereum contract, binding an instance of Chequebook to it. -func DeployChequebook(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Chequebook, error) { - parsed, err := abi.JSON(strings.NewReader(ChequebookABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ChequebookBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &Chequebook{ChequebookCaller: ChequebookCaller{contract: contract}, ChequebookTransactor: ChequebookTransactor{contract: contract}, ChequebookFilterer: ChequebookFilterer{contract: contract}}, nil -} - -// Chequebook is an auto generated Go binding around an Ethereum contract. -type Chequebook struct { - ChequebookCaller // Read-only binding to the contract - ChequebookTransactor // Write-only binding to the contract - ChequebookFilterer // Log filterer for contract events -} - -// ChequebookCaller is an auto generated read-only Go binding around an Ethereum contract. -type ChequebookCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChequebookTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ChequebookTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChequebookFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ChequebookFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ChequebookSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ChequebookSession struct { - Contract *Chequebook // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ChequebookCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ChequebookCallerSession struct { - Contract *ChequebookCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ChequebookTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ChequebookTransactorSession struct { - Contract *ChequebookTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ChequebookRaw is an auto generated low-level Go binding around an Ethereum contract. -type ChequebookRaw struct { - Contract *Chequebook // Generic contract binding to access the raw methods on -} - -// ChequebookCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ChequebookCallerRaw struct { - Contract *ChequebookCaller // Generic read-only contract binding to access the raw methods on -} - -// ChequebookTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ChequebookTransactorRaw struct { - Contract *ChequebookTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewChequebook creates a new instance of Chequebook, bound to a specific deployed contract. -func NewChequebook(address common.Address, backend bind.ContractBackend) (*Chequebook, error) { - contract, err := bindChequebook(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Chequebook{ChequebookCaller: ChequebookCaller{contract: contract}, ChequebookTransactor: ChequebookTransactor{contract: contract}, ChequebookFilterer: ChequebookFilterer{contract: contract}}, nil -} - -// NewChequebookCaller creates a new read-only instance of Chequebook, bound to a specific deployed contract. -func NewChequebookCaller(address common.Address, caller bind.ContractCaller) (*ChequebookCaller, error) { - contract, err := bindChequebook(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ChequebookCaller{contract: contract}, nil -} - -// NewChequebookTransactor creates a new write-only instance of Chequebook, bound to a specific deployed contract. -func NewChequebookTransactor(address common.Address, transactor bind.ContractTransactor) (*ChequebookTransactor, error) { - contract, err := bindChequebook(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ChequebookTransactor{contract: contract}, nil -} - -// NewChequebookFilterer creates a new log filterer instance of Chequebook, bound to a specific deployed contract. -func NewChequebookFilterer(address common.Address, filterer bind.ContractFilterer) (*ChequebookFilterer, error) { - contract, err := bindChequebook(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ChequebookFilterer{contract: contract}, nil -} - -// bindChequebook binds a generic wrapper to an already deployed contract. -func bindChequebook(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ChequebookABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Chequebook *ChequebookRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _Chequebook.Contract.ChequebookCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Chequebook *ChequebookRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Chequebook.Contract.ChequebookTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Chequebook *ChequebookRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Chequebook.Contract.ChequebookTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Chequebook *ChequebookCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _Chequebook.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Chequebook *ChequebookTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Chequebook.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Chequebook *ChequebookTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Chequebook.Contract.contract.Transact(opts, method, params...) -} - -// Sent is a free data retrieval call binding the contract method 0x7bf786f8. -// -// Solidity: function sent( address) constant returns(uint256) -func (_Chequebook *ChequebookCaller) Sent(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { - var ( - ret0 = new(*big.Int) - ) - out := ret0 - err := _Chequebook.contract.Call(opts, out, "sent", arg0) - return *ret0, err -} - -// Sent is a free data retrieval call binding the contract method 0x7bf786f8. -// -// Solidity: function sent( address) constant returns(uint256) -func (_Chequebook *ChequebookSession) Sent(arg0 common.Address) (*big.Int, error) { - return _Chequebook.Contract.Sent(&_Chequebook.CallOpts, arg0) -} - -// Sent is a free data retrieval call binding the contract method 0x7bf786f8. -// -// Solidity: function sent( address) constant returns(uint256) -func (_Chequebook *ChequebookCallerSession) Sent(arg0 common.Address) (*big.Int, error) { - return _Chequebook.Contract.Sent(&_Chequebook.CallOpts, arg0) -} - -// Cash is a paid mutator transaction binding the contract method 0xfbf788d6. -// -// Solidity: function cash(beneficiary address, amount uint256, sig_v uint8, sig_r bytes32, sig_s bytes32) returns() -func (_Chequebook *ChequebookTransactor) Cash(opts *bind.TransactOpts, beneficiary common.Address, amount *big.Int, sigV uint8, sigR [32]byte, sigS [32]byte) (*types.Transaction, error) { - return _Chequebook.contract.Transact(opts, "cash", beneficiary, amount, sigV, sigR, sigS) -} - -// Cash is a paid mutator transaction binding the contract method 0xfbf788d6. -// -// Solidity: function cash(beneficiary address, amount uint256, sig_v uint8, sig_r bytes32, sig_s bytes32) returns() -func (_Chequebook *ChequebookSession) Cash(beneficiary common.Address, amount *big.Int, sigV uint8, sigR [32]byte, sigS [32]byte) (*types.Transaction, error) { - return _Chequebook.Contract.Cash(&_Chequebook.TransactOpts, beneficiary, amount, sigV, sigR, sigS) -} - -// Cash is a paid mutator transaction binding the contract method 0xfbf788d6. -// -// Solidity: function cash(beneficiary address, amount uint256, sig_v uint8, sig_r bytes32, sig_s bytes32) returns() -func (_Chequebook *ChequebookTransactorSession) Cash(beneficiary common.Address, amount *big.Int, sigV uint8, sigR [32]byte, sigS [32]byte) (*types.Transaction, error) { - return _Chequebook.Contract.Cash(&_Chequebook.TransactOpts, beneficiary, amount, sigV, sigR, sigS) -} - -// Kill is a paid mutator transaction binding the contract method 0x41c0e1b5. -// -// Solidity: function kill() returns() -func (_Chequebook *ChequebookTransactor) Kill(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Chequebook.contract.Transact(opts, "kill") -} - -// Kill is a paid mutator transaction binding the contract method 0x41c0e1b5. -// -// Solidity: function kill() returns() -func (_Chequebook *ChequebookSession) Kill() (*types.Transaction, error) { - return _Chequebook.Contract.Kill(&_Chequebook.TransactOpts) -} - -// Kill is a paid mutator transaction binding the contract method 0x41c0e1b5. -// -// Solidity: function kill() returns() -func (_Chequebook *ChequebookTransactorSession) Kill() (*types.Transaction, error) { - return _Chequebook.Contract.Kill(&_Chequebook.TransactOpts) -} - -// ChequebookOverdraftIterator is returned from FilterOverdraft and is used to iterate over the raw logs and unpacked data for Overdraft events raised by the Chequebook contract. -type ChequebookOverdraftIterator struct { - Event *ChequebookOverdraft // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ChequebookOverdraftIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ChequebookOverdraft) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ChequebookOverdraft) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *ChequebookOverdraftIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ChequebookOverdraftIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ChequebookOverdraft represents a Overdraft event raised by the Chequebook contract. -type ChequebookOverdraft struct { - Deadbeat common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOverdraft is a free log retrieval operation binding the contract event 0x2250e2993c15843b32621c89447cc589ee7a9f049c026986e545d3c2c0c6f978. -// -// Solidity: event Overdraft(deadbeat address) -func (_Chequebook *ChequebookFilterer) FilterOverdraft(opts *bind.FilterOpts) (*ChequebookOverdraftIterator, error) { - - logs, sub, err := _Chequebook.contract.FilterLogs(opts, "Overdraft") - if err != nil { - return nil, err - } - return &ChequebookOverdraftIterator{contract: _Chequebook.contract, event: "Overdraft", logs: logs, sub: sub}, nil -} - -// WatchOverdraft is a free log subscription operation binding the contract event 0x2250e2993c15843b32621c89447cc589ee7a9f049c026986e545d3c2c0c6f978. -// -// Solidity: event Overdraft(deadbeat address) -func (_Chequebook *ChequebookFilterer) WatchOverdraft(opts *bind.WatchOpts, sink chan<- *ChequebookOverdraft) (event.Subscription, error) { - - logs, sub, err := _Chequebook.contract.WatchLogs(opts, "Overdraft") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ChequebookOverdraft) - if err := _Chequebook.contract.UnpackLog(event, "Overdraft", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} diff --git a/contracts/chequebook/contract/chequebook.sol b/contracts/chequebook/contract/chequebook.sol deleted file mode 100644 index c386cceed856..000000000000 --- a/contracts/chequebook/contract/chequebook.sol +++ /dev/null @@ -1,47 +0,0 @@ -pragma solidity ^0.4.18; - -import "./mortal.sol"; - -/// @title Chequebook for Ethereum micropayments -/// @author Daniel A. Nagy -contract chequebook is mortal { - // Cumulative paid amount in wei to each beneficiary - mapping (address => uint256) public sent; - - /// @notice Overdraft event - event Overdraft(address deadbeat); - - // Allow sending ether to the chequebook. - function() public payable { } - - /// @notice Cash cheque - /// - /// @param beneficiary beneficiary address - /// @param amount cumulative amount in wei - /// @param sig_v signature parameter v - /// @param sig_r signature parameter r - /// @param sig_s signature parameter s - /// The digital signature is calculated on the concatenated triplet of contract address, beneficiary address and cumulative amount - function cash(address beneficiary, uint256 amount, uint8 sig_v, bytes32 sig_r, bytes32 sig_s) public { - // Check if the cheque is old. - // Only cheques that are more recent than the last cashed one are considered. - require(amount > sent[beneficiary]); - // Check the digital signature of the cheque. - bytes32 hash = keccak256(address(this), beneficiary, amount); - require(owner == ecrecover(hash, sig_v, sig_r, sig_s)); - // Attempt sending the difference between the cumulative amount on the cheque - // and the cumulative amount on the last cashed cheque to beneficiary. - uint256 diff = amount - sent[beneficiary]; - if (diff <= this.balance) { - // update the cumulative amount before sending - sent[beneficiary] = amount; - beneficiary.transfer(diff); - } else { - // Upon failure, punish owner for writing a bounced cheque. - // owner.sendToDebtorsPrison(); - Overdraft(owner); - // Compensate beneficiary. - selfdestruct(beneficiary); - } - } -} diff --git a/contracts/chequebook/contract/code.go b/contracts/chequebook/contract/code.go deleted file mode 100644 index d837a9d60114..000000000000 --- a/contracts/chequebook/contract/code.go +++ /dev/null @@ -1,5 +0,0 @@ -package contract - -// ContractDeployedCode is used to detect suicides. This constant needs to be -// updated when the contract code is changed. -const ContractDeployedCode = "0x6060604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166341c0e1b581146100585780637bf786f81461006b578063fbf788d61461009c575b005b341561006357600080fd5b6100566100ca565b341561007657600080fd5b61008a600160a060020a03600435166100f1565b60405190815260200160405180910390f35b34156100a757600080fd5b610056600160a060020a036004351660243560ff60443516606435608435610103565b60005433600160a060020a03908116911614156100ef57600054600160a060020a0316ff5b565b60016020526000908152604090205481565b600160a060020a0385166000908152600160205260408120548190861161012957600080fd5b3087876040516c01000000000000000000000000600160a060020a03948516810282529290931690910260148301526028820152604801604051809103902091506001828686866040516000815260200160405260006040516020015260405193845260ff90921660208085019190915260408085019290925260608401929092526080909201915160208103908084039060008661646e5a03f115156101cf57600080fd5b505060206040510351600054600160a060020a039081169116146101f257600080fd5b50600160a060020a03808716600090815260016020526040902054860390301631811161026257600160a060020a0387166000818152600160205260409081902088905582156108fc0290839051600060405180830381858888f19350505050151561025d57600080fd5b6102b7565b6000547f2250e2993c15843b32621c89447cc589ee7a9f049c026986e545d3c2c0c6f97890600160a060020a0316604051600160a060020a03909116815260200160405180910390a186600160a060020a0316ff5b505050505050505600a165627a7a72305820533e856fc37e3d64d1706bcc7dfb6b1d490c8d566ea498d9d01ec08965a896ca0029" diff --git a/contracts/chequebook/contract/mortal.sol b/contracts/chequebook/contract/mortal.sol deleted file mode 100644 index c43f1e4f7951..000000000000 --- a/contracts/chequebook/contract/mortal.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity ^0.4.0; - -import "./owned.sol"; - -contract mortal is owned { - function kill() public { - if (msg.sender == owner) - selfdestruct(owner); - } -} diff --git a/contracts/chequebook/contract/owned.sol b/contracts/chequebook/contract/owned.sol deleted file mode 100644 index ee9860d343af..000000000000 --- a/contracts/chequebook/contract/owned.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.4.0; - -contract owned { - address owner; - - modifier onlyowner() { - if (msg.sender == owner) { - _; - } - } - - function owned() public { - owner = msg.sender; - } -} diff --git a/contracts/chequebook/gencode.go b/contracts/chequebook/gencode.go deleted file mode 100644 index ddfe8d151274..000000000000 --- a/contracts/chequebook/gencode.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build none - -// This program generates contract/code.go, which contains the chequebook code -// after deployment. -package main - -import ( - "fmt" - "io/ioutil" - "math/big" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/contracts/chequebook/contract" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/crypto" -) - -var ( - testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - testAlloc = core.GenesisAlloc{ - crypto.PubkeyToAddress(testKey.PublicKey): {Balance: big.NewInt(500000000000)}, - } -) - -func main() { - backend := backends.NewSimulatedBackend(testAlloc, uint64(100000000)) - auth := bind.NewKeyedTransactor(testKey) - - // Deploy the contract, get the code. - addr, _, _, err := contract.DeployChequebook(auth, backend) - if err != nil { - panic(err) - } - backend.Commit() - code, err := backend.CodeAt(nil, addr, nil) - if err != nil { - panic(err) - } - if len(code) == 0 { - panic("empty code") - } - - // Write the output file. - content := fmt.Sprintf(`package contract - -// ContractDeployedCode is used to detect suicides. This constant needs to be -// updated when the contract code is changed. -const ContractDeployedCode = "%#x" -`, code) - if err := ioutil.WriteFile("contract/code.go", []byte(content), 0644); err != nil { - panic(err) - } -} diff --git a/contracts/ens/README.md b/contracts/ens/README.md deleted file mode 100644 index c09b47e39d81..000000000000 --- a/contracts/ens/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Swarm ENS interface - -## Usage - -Full documentation for the Ethereum Name Service [can be found as EIP 137](https://github.com/ethereum/EIPs/issues/137). -This package offers a simple binding that streamlines the registration of arbitrary UTF8 domain names to swarm content hashes. - -## Development - -The SOL file in contract subdirectory implements the ENS root registry, a simple -first-in, first-served registrar for the root namespace, and a simple resolver contract; -they're used in tests, and can be used to deploy these contracts for your own purposes. - -The solidity source code can be found at [github.com/arachnid/ens/](https://github.com/arachnid/ens/). - -The go bindings for ENS contracts are generated using `abigen` via the go generator: - -```shell -go generate ./contracts/ens -``` diff --git a/contracts/ens/contract/AbstractENS.sol b/contracts/ens/contract/AbstractENS.sol deleted file mode 100644 index b80a1b0e6b50..000000000000 --- a/contracts/ens/contract/AbstractENS.sol +++ /dev/null @@ -1,23 +0,0 @@ -pragma solidity ^0.4.0; - -contract AbstractENS { - function owner(bytes32 node) constant returns(address); - function resolver(bytes32 node) constant returns(address); - function ttl(bytes32 node) constant returns(uint64); - function setOwner(bytes32 node, address owner); - function setSubnodeOwner(bytes32 node, bytes32 label, address owner); - function setResolver(bytes32 node, address resolver); - function setTTL(bytes32 node, uint64 ttl); - - // Logged when the owner of a node assigns a new owner to a subnode. - event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); - - // Logged when the owner of a node transfers ownership to a new account. - event Transfer(bytes32 indexed node, address owner); - - // Logged when the resolver for a node changes. - event NewResolver(bytes32 indexed node, address resolver); - - // Logged when the TTL of a node changes - event NewTTL(bytes32 indexed node, uint64 ttl); -} diff --git a/contracts/ens/contract/ENS.sol b/contracts/ens/contract/ENS.sol deleted file mode 100644 index 47050c19dabb..000000000000 --- a/contracts/ens/contract/ENS.sol +++ /dev/null @@ -1,94 +0,0 @@ -pragma solidity ^0.4.0; - -import './AbstractENS.sol'; - -/** - * The ENS registry contract. - */ -contract ENS is AbstractENS { - struct Record { - address owner; - address resolver; - uint64 ttl; - } - - mapping(bytes32=>Record) records; - - // Permits modifications only by the owner of the specified node. - modifier only_owner(bytes32 node) { - if (records[node].owner != msg.sender) throw; - _; - } - - /** - * Constructs a new ENS registrar. - */ - function ENS() { - records[0].owner = msg.sender; - } - - /** - * Returns the address that owns the specified node. - */ - function owner(bytes32 node) constant returns (address) { - return records[node].owner; - } - - /** - * Returns the address of the resolver for the specified node. - */ - function resolver(bytes32 node) constant returns (address) { - return records[node].resolver; - } - - /** - * Returns the TTL of a node, and any records associated with it. - */ - function ttl(bytes32 node) constant returns (uint64) { - return records[node].ttl; - } - - /** - * Transfers ownership of a node to a new address. May only be called by the current - * owner of the node. - * @param node The node to transfer ownership of. - * @param owner The address of the new owner. - */ - function setOwner(bytes32 node, address owner) only_owner(node) { - Transfer(node, owner); - records[node].owner = owner; - } - - /** - * Transfers ownership of a subnode sha3(node, label) to a new address. May only be - * called by the owner of the parent node. - * @param node The parent node. - * @param label The hash of the label specifying the subnode. - * @param owner The address of the new owner. - */ - function setSubnodeOwner(bytes32 node, bytes32 label, address owner) only_owner(node) { - var subnode = sha3(node, label); - NewOwner(node, label, owner); - records[subnode].owner = owner; - } - - /** - * Sets the resolver address for the specified node. - * @param node The node to update. - * @param resolver The address of the resolver. - */ - function setResolver(bytes32 node, address resolver) only_owner(node) { - NewResolver(node, resolver); - records[node].resolver = resolver; - } - - /** - * Sets the TTL for the specified node. - * @param node The node to update. - * @param ttl The TTL in seconds. - */ - function setTTL(bytes32 node, uint64 ttl) only_owner(node) { - NewTTL(node, ttl); - records[node].ttl = ttl; - } -} diff --git a/contracts/ens/contract/FIFSRegistrar.sol b/contracts/ens/contract/FIFSRegistrar.sol deleted file mode 100644 index 51629c2b65e0..000000000000 --- a/contracts/ens/contract/FIFSRegistrar.sol +++ /dev/null @@ -1,39 +0,0 @@ -pragma solidity ^0.4.0; - -import './AbstractENS.sol'; - -/** - * A registrar that allocates subdomains to the first person to claim them. - */ -contract FIFSRegistrar { - AbstractENS ens; - bytes32 rootNode; - - modifier only_owner(bytes32 subnode) { - var node = sha3(rootNode, subnode); - var currentOwner = ens.owner(node); - - if (currentOwner != 0 && currentOwner != msg.sender) throw; - - _; - } - - /** - * Constructor. - * @param ensAddr The address of the ENS registry. - * @param node The node that this registrar administers. - */ - function FIFSRegistrar(AbstractENS ensAddr, bytes32 node) { - ens = ensAddr; - rootNode = node; - } - - /** - * Register a name, or change the owner of an existing registration. - * @param subnode The hash of the label to register. - * @param owner The address of the new owner. - */ - function register(bytes32 subnode, address owner) only_owner(subnode) { - ens.setSubnodeOwner(rootNode, subnode, owner); - } -} diff --git a/contracts/ens/contract/PublicResolver.sol b/contracts/ens/contract/PublicResolver.sol deleted file mode 100644 index 9dcc95689ecc..000000000000 --- a/contracts/ens/contract/PublicResolver.sol +++ /dev/null @@ -1,212 +0,0 @@ -pragma solidity ^0.4.0; - -import './AbstractENS.sol'; - -/** - * A simple resolver anyone can use; only allows the owner of a node to set its - * address. - */ -contract PublicResolver { - bytes4 constant INTERFACE_META_ID = 0x01ffc9a7; - bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de; - bytes4 constant CONTENT_INTERFACE_ID = 0xd8389dc5; - bytes4 constant NAME_INTERFACE_ID = 0x691f3431; - bytes4 constant ABI_INTERFACE_ID = 0x2203ab56; - bytes4 constant PUBKEY_INTERFACE_ID = 0xc8690233; - bytes4 constant TEXT_INTERFACE_ID = 0x59d1d43c; - - event AddrChanged(bytes32 indexed node, address a); - event ContentChanged(bytes32 indexed node, bytes32 hash); - event NameChanged(bytes32 indexed node, string name); - event ABIChanged(bytes32 indexed node, uint256 indexed contentType); - event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); - event TextChanged(bytes32 indexed node, string indexed indexedKey, string key); - - struct PublicKey { - bytes32 x; - bytes32 y; - } - - struct Record { - address addr; - bytes32 content; - string name; - PublicKey pubkey; - mapping(string=>string) text; - mapping(uint256=>bytes) abis; - } - - AbstractENS ens; - mapping(bytes32=>Record) records; - - modifier only_owner(bytes32 node) { - if (ens.owner(node) != msg.sender) throw; - _; - } - - /** - * Constructor. - * @param ensAddr The ENS registrar contract. - */ - function PublicResolver(AbstractENS ensAddr) { - ens = ensAddr; - } - - /** - * Returns true if the resolver implements the interface specified by the provided hash. - * @param interfaceID The ID of the interface to check for. - * @return True if the contract implements the requested interface. - */ - function supportsInterface(bytes4 interfaceID) constant returns (bool) { - return interfaceID == ADDR_INTERFACE_ID || - interfaceID == CONTENT_INTERFACE_ID || - interfaceID == NAME_INTERFACE_ID || - interfaceID == ABI_INTERFACE_ID || - interfaceID == PUBKEY_INTERFACE_ID || - interfaceID == TEXT_INTERFACE_ID || - interfaceID == INTERFACE_META_ID; - } - - /** - * Returns the address associated with an ENS node. - * @param node The ENS node to query. - * @return The associated address. - */ - function addr(bytes32 node) constant returns (address ret) { - ret = records[node].addr; - } - - /** - * Sets the address associated with an ENS node. - * May only be called by the owner of that node in the ENS registry. - * @param node The node to update. - * @param addr The address to set. - */ - function setAddr(bytes32 node, address addr) only_owner(node) { - records[node].addr = addr; - AddrChanged(node, addr); - } - - /** - * Returns the content hash associated with an ENS node. - * Note that this resource type is not standardized, and will likely change - * in future to a resource type based on multihash. - * @param node The ENS node to query. - * @return The associated content hash. - */ - function content(bytes32 node) constant returns (bytes32 ret) { - ret = records[node].content; - } - - /** - * Sets the content hash associated with an ENS node. - * May only be called by the owner of that node in the ENS registry. - * Note that this resource type is not standardized, and will likely change - * in future to a resource type based on multihash. - * @param node The node to update. - * @param hash The content hash to set - */ - function setContent(bytes32 node, bytes32 hash) only_owner(node) { - records[node].content = hash; - ContentChanged(node, hash); - } - - /** - * Returns the name associated with an ENS node, for reverse records. - * Defined in EIP181. - * @param node The ENS node to query. - * @return The associated name. - */ - function name(bytes32 node) constant returns (string ret) { - ret = records[node].name; - } - - /** - * Sets the name associated with an ENS node, for reverse records. - * May only be called by the owner of that node in the ENS registry. - * @param node The node to update. - * @param name The name to set. - */ - function setName(bytes32 node, string name) only_owner(node) { - records[node].name = name; - NameChanged(node, name); - } - - /** - * Returns the ABI associated with an ENS node. - * Defined in EIP205. - * @param node The ENS node to query - * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. - * @return contentType The content type of the return value - * @return data The ABI data - */ - function ABI(bytes32 node, uint256 contentTypes) constant returns (uint256 contentType, bytes data) { - var record = records[node]; - for(contentType = 1; contentType <= contentTypes; contentType <<= 1) { - if ((contentType & contentTypes) != 0 && record.abis[contentType].length > 0) { - data = record.abis[contentType]; - return; - } - } - contentType = 0; - } - - /** - * Sets the ABI associated with an ENS node. - * Nodes may have one ABI of each content type. To remove an ABI, set it to - * the empty string. - * @param node The node to update. - * @param contentType The content type of the ABI - * @param data The ABI data. - */ - function setABI(bytes32 node, uint256 contentType, bytes data) only_owner(node) { - // Content types must be powers of 2 - if (((contentType - 1) & contentType) != 0) throw; - - records[node].abis[contentType] = data; - ABIChanged(node, contentType); - } - - /** - * Returns the SECP256k1 public key associated with an ENS node. - * Defined in EIP 619. - * @param node The ENS node to query - * @return x, y the X and Y coordinates of the curve point for the public key. - */ - function pubkey(bytes32 node) constant returns (bytes32 x, bytes32 y) { - return (records[node].pubkey.x, records[node].pubkey.y); - } - - /** - * Sets the SECP256k1 public key associated with an ENS node. - * @param node The ENS node to query - * @param x the X coordinate of the curve point for the public key. - * @param y the Y coordinate of the curve point for the public key. - */ - function setPubkey(bytes32 node, bytes32 x, bytes32 y) only_owner(node) { - records[node].pubkey = PublicKey(x, y); - PubkeyChanged(node, x, y); - } - - /** - * Returns the text data associated with an ENS node and key. - * @param node The ENS node to query. - * @param key The text data key to query. - * @return The associated text data. - */ - function text(bytes32 node, string key) constant returns (string ret) { - ret = records[node].text[key]; - } - - /** - * Sets the text data associated with an ENS node and key. - * May only be called by the owner of that node in the ENS registry. - * @param node The node to update. - * @param key The key to set. - * @param value The text data value to set. - */ - function setText(bytes32 node, string key, string value) only_owner(node) { - records[node].text[key] = value; - TextChanged(node, key, key); - } -} diff --git a/contracts/ens/contract/ens.go b/contracts/ens/contract/ens.go deleted file mode 100644 index 8827071afc07..000000000000 --- a/contracts/ens/contract/ens.go +++ /dev/null @@ -1,879 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contract - -import ( - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// ENSABI is the input ABI used to generate the binding from. -const ENSABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}]" - -// ENSBin is the compiled bytecode used for deploying new contracts. -const ENSBin = `0x6060604052341561000f57600080fd5b60008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054600160a060020a033316600160a060020a0319909116179055610503806100626000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630178b8bf811461008757806302571be3146100b957806306ab5923146100cf57806314ab9038146100f657806316a25cbd146101195780631896f70a1461014c5780635b0fc9c31461016e575b600080fd5b341561009257600080fd5b61009d600435610190565b604051600160a060020a03909116815260200160405180910390f35b34156100c457600080fd5b61009d6004356101ae565b34156100da57600080fd5b6100f4600435602435600160a060020a03604435166101c9565b005b341561010157600080fd5b6100f460043567ffffffffffffffff6024351661028b565b341561012457600080fd5b61012f600435610357565b60405167ffffffffffffffff909116815260200160405180910390f35b341561015757600080fd5b6100f4600435600160a060020a036024351661038e565b341561017957600080fd5b6100f4600435600160a060020a0360243516610434565b600090815260208190526040902060010154600160a060020a031690565b600090815260208190526040902054600160a060020a031690565b600083815260208190526040812054849033600160a060020a039081169116146101f257600080fd5b8484604051918252602082015260409081019051908190039020915083857fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8285604051600160a060020a03909116815260200160405180910390a3506000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555050565b600082815260208190526040902054829033600160a060020a039081169116146102b457600080fd5b827f1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa688360405167ffffffffffffffff909116815260200160405180910390a250600091825260208290526040909120600101805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60009081526020819052604090206001015474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b600082815260208190526040902054829033600160a060020a039081169116146103b757600080fd5b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a083604051600160a060020a03909116815260200160405180910390a250600091825260208290526040909120600101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600082815260208190526040902054829033600160a060020a0390811691161461045d57600080fd5b827fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d26683604051600160a060020a03909116815260200160405180910390a250600091825260208290526040909120805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555600a165627a7a72305820f4c798d4c84c9912f389f64631e85e8d16c3e6644f8c2e1579936015c7d5f6660029` - -// DeployENS deploys a new Ethereum contract, binding an instance of ENS to it. -func DeployENS(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ENS, error) { - parsed, err := abi.JSON(strings.NewReader(ENSABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ENSBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ENS{ENSCaller: ENSCaller{contract: contract}, ENSTransactor: ENSTransactor{contract: contract}, ENSFilterer: ENSFilterer{contract: contract}}, nil -} - -// ENS is an auto generated Go binding around an Ethereum contract. -type ENS struct { - ENSCaller // Read-only binding to the contract - ENSTransactor // Write-only binding to the contract - ENSFilterer // Log filterer for contract events -} - -// ENSCaller is an auto generated read-only Go binding around an Ethereum contract. -type ENSCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ENSTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ENSTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ENSFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ENSFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ENSSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ENSSession struct { - Contract *ENS // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ENSCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ENSCallerSession struct { - Contract *ENSCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ENSTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ENSTransactorSession struct { - Contract *ENSTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ENSRaw is an auto generated low-level Go binding around an Ethereum contract. -type ENSRaw struct { - Contract *ENS // Generic contract binding to access the raw methods on -} - -// ENSCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ENSCallerRaw struct { - Contract *ENSCaller // Generic read-only contract binding to access the raw methods on -} - -// ENSTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ENSTransactorRaw struct { - Contract *ENSTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewENS creates a new instance of ENS, bound to a specific deployed contract. -func NewENS(address common.Address, backend bind.ContractBackend) (*ENS, error) { - contract, err := bindENS(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ENS{ENSCaller: ENSCaller{contract: contract}, ENSTransactor: ENSTransactor{contract: contract}, ENSFilterer: ENSFilterer{contract: contract}}, nil -} - -// NewENSCaller creates a new read-only instance of ENS, bound to a specific deployed contract. -func NewENSCaller(address common.Address, caller bind.ContractCaller) (*ENSCaller, error) { - contract, err := bindENS(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ENSCaller{contract: contract}, nil -} - -// NewENSTransactor creates a new write-only instance of ENS, bound to a specific deployed contract. -func NewENSTransactor(address common.Address, transactor bind.ContractTransactor) (*ENSTransactor, error) { - contract, err := bindENS(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ENSTransactor{contract: contract}, nil -} - -// NewENSFilterer creates a new log filterer instance of ENS, bound to a specific deployed contract. -func NewENSFilterer(address common.Address, filterer bind.ContractFilterer) (*ENSFilterer, error) { - contract, err := bindENS(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ENSFilterer{contract: contract}, nil -} - -// bindENS binds a generic wrapper to an already deployed contract. -func bindENS(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(ENSABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ENS *ENSRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _ENS.Contract.ENSCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ENS *ENSRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ENS.Contract.ENSTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ENS *ENSRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ENS.Contract.ENSTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_ENS *ENSCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _ENS.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_ENS *ENSTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ENS.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ENS *ENSTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ENS.Contract.contract.Transact(opts, method, params...) -} - -// Owner is a free data retrieval call binding the contract method 0x02571be3. -// -// Solidity: function owner(node bytes32) constant returns(address) -func (_ENS *ENSCaller) Owner(opts *bind.CallOpts, node [32]byte) (common.Address, error) { - var ( - ret0 = new(common.Address) - ) - out := ret0 - err := _ENS.contract.Call(opts, out, "owner", node) - return *ret0, err -} - -// Owner is a free data retrieval call binding the contract method 0x02571be3. -// -// Solidity: function owner(node bytes32) constant returns(address) -func (_ENS *ENSSession) Owner(node [32]byte) (common.Address, error) { - return _ENS.Contract.Owner(&_ENS.CallOpts, node) -} - -// Owner is a free data retrieval call binding the contract method 0x02571be3. -// -// Solidity: function owner(node bytes32) constant returns(address) -func (_ENS *ENSCallerSession) Owner(node [32]byte) (common.Address, error) { - return _ENS.Contract.Owner(&_ENS.CallOpts, node) -} - -// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. -// -// Solidity: function resolver(node bytes32) constant returns(address) -func (_ENS *ENSCaller) Resolver(opts *bind.CallOpts, node [32]byte) (common.Address, error) { - var ( - ret0 = new(common.Address) - ) - out := ret0 - err := _ENS.contract.Call(opts, out, "resolver", node) - return *ret0, err -} - -// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. -// -// Solidity: function resolver(node bytes32) constant returns(address) -func (_ENS *ENSSession) Resolver(node [32]byte) (common.Address, error) { - return _ENS.Contract.Resolver(&_ENS.CallOpts, node) -} - -// Resolver is a free data retrieval call binding the contract method 0x0178b8bf. -// -// Solidity: function resolver(node bytes32) constant returns(address) -func (_ENS *ENSCallerSession) Resolver(node [32]byte) (common.Address, error) { - return _ENS.Contract.Resolver(&_ENS.CallOpts, node) -} - -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. -// -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSCaller) TTL(opts *bind.CallOpts, node [32]byte) (uint64, error) { - var ( - ret0 = new(uint64) - ) - out := ret0 - err := _ENS.contract.Call(opts, out, "ttl", node) - return *ret0, err -} - -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. -// -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSSession) TTL(node [32]byte) (uint64, error) { - return _ENS.Contract.TTL(&_ENS.CallOpts, node) -} - -// TTL is a free data retrieval call binding the contract method 0x16a25cbd. -// -// Solidity: function ttl(node bytes32) constant returns(uint64) -func (_ENS *ENSCallerSession) TTL(node [32]byte) (uint64, error) { - return _ENS.Contract.TTL(&_ENS.CallOpts, node) -} - -// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. -// -// Solidity: function setOwner(node bytes32, owner address) returns() -func (_ENS *ENSTransactor) SetOwner(opts *bind.TransactOpts, node [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.contract.Transact(opts, "setOwner", node, owner) -} - -// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. -// -// Solidity: function setOwner(node bytes32, owner address) returns() -func (_ENS *ENSSession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetOwner(&_ENS.TransactOpts, node, owner) -} - -// SetOwner is a paid mutator transaction binding the contract method 0x5b0fc9c3. -// -// Solidity: function setOwner(node bytes32, owner address) returns() -func (_ENS *ENSTransactorSession) SetOwner(node [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetOwner(&_ENS.TransactOpts, node, owner) -} - -// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. -// -// Solidity: function setResolver(node bytes32, resolver address) returns() -func (_ENS *ENSTransactor) SetResolver(opts *bind.TransactOpts, node [32]byte, resolver common.Address) (*types.Transaction, error) { - return _ENS.contract.Transact(opts, "setResolver", node, resolver) -} - -// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. -// -// Solidity: function setResolver(node bytes32, resolver address) returns() -func (_ENS *ENSSession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetResolver(&_ENS.TransactOpts, node, resolver) -} - -// SetResolver is a paid mutator transaction binding the contract method 0x1896f70a. -// -// Solidity: function setResolver(node bytes32, resolver address) returns() -func (_ENS *ENSTransactorSession) SetResolver(node [32]byte, resolver common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetResolver(&_ENS.TransactOpts, node, resolver) -} - -// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. -// -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() -func (_ENS *ENSTransactor) SetSubnodeOwner(opts *bind.TransactOpts, node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.contract.Transact(opts, "setSubnodeOwner", node, label, owner) -} - -// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. -// -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() -func (_ENS *ENSSession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetSubnodeOwner(&_ENS.TransactOpts, node, label, owner) -} - -// SetSubnodeOwner is a paid mutator transaction binding the contract method 0x06ab5923. -// -// Solidity: function setSubnodeOwner(node bytes32, label bytes32, owner address) returns() -func (_ENS *ENSTransactorSession) SetSubnodeOwner(node [32]byte, label [32]byte, owner common.Address) (*types.Transaction, error) { - return _ENS.Contract.SetSubnodeOwner(&_ENS.TransactOpts, node, label, owner) -} - -// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. -// -// Solidity: function setTTL(node bytes32, ttl uint64) returns() -func (_ENS *ENSTransactor) SetTTL(opts *bind.TransactOpts, node [32]byte, ttl uint64) (*types.Transaction, error) { - return _ENS.contract.Transact(opts, "setTTL", node, ttl) -} - -// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. -// -// Solidity: function setTTL(node bytes32, ttl uint64) returns() -func (_ENS *ENSSession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { - return _ENS.Contract.SetTTL(&_ENS.TransactOpts, node, ttl) -} - -// SetTTL is a paid mutator transaction binding the contract method 0x14ab9038. -// -// Solidity: function setTTL(node bytes32, ttl uint64) returns() -func (_ENS *ENSTransactorSession) SetTTL(node [32]byte, ttl uint64) (*types.Transaction, error) { - return _ENS.Contract.SetTTL(&_ENS.TransactOpts, node, ttl) -} - -// ENSNewOwnerIterator is returned from FilterNewOwner and is used to iterate over the raw logs and unpacked data for NewOwner events raised by the ENS contract. -type ENSNewOwnerIterator struct { - Event *ENSNewOwner // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ENSNewOwnerIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ENSNewOwner) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ENSNewOwner) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *ENSNewOwnerIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ENSNewOwnerIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ENSNewOwner represents a NewOwner event raised by the ENS contract. -type ENSNewOwner struct { - Node [32]byte - Label [32]byte - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNewOwner is a free log retrieval operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. -// -// Solidity: event NewOwner(node indexed bytes32, label indexed bytes32, owner address) -func (_ENS *ENSFilterer) FilterNewOwner(opts *bind.FilterOpts, node [][32]byte, label [][32]byte) (*ENSNewOwnerIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var labelRule []interface{} - for _, labelItem := range label { - labelRule = append(labelRule, labelItem) - } - - logs, sub, err := _ENS.contract.FilterLogs(opts, "NewOwner", nodeRule, labelRule) - if err != nil { - return nil, err - } - return &ENSNewOwnerIterator{contract: _ENS.contract, event: "NewOwner", logs: logs, sub: sub}, nil -} - -// WatchNewOwner is a free log subscription operation binding the contract event 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82. -// -// Solidity: event NewOwner(node indexed bytes32, label indexed bytes32, owner address) -func (_ENS *ENSFilterer) WatchNewOwner(opts *bind.WatchOpts, sink chan<- *ENSNewOwner, node [][32]byte, label [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var labelRule []interface{} - for _, labelItem := range label { - labelRule = append(labelRule, labelItem) - } - - logs, sub, err := _ENS.contract.WatchLogs(opts, "NewOwner", nodeRule, labelRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ENSNewOwner) - if err := _ENS.contract.UnpackLog(event, "NewOwner", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ENSNewResolverIterator is returned from FilterNewResolver and is used to iterate over the raw logs and unpacked data for NewResolver events raised by the ENS contract. -type ENSNewResolverIterator struct { - Event *ENSNewResolver // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ENSNewResolverIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ENSNewResolver) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ENSNewResolver) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *ENSNewResolverIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ENSNewResolverIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ENSNewResolver represents a NewResolver event raised by the ENS contract. -type ENSNewResolver struct { - Node [32]byte - Resolver common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNewResolver is a free log retrieval operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. -// -// Solidity: event NewResolver(node indexed bytes32, resolver address) -func (_ENS *ENSFilterer) FilterNewResolver(opts *bind.FilterOpts, node [][32]byte) (*ENSNewResolverIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.FilterLogs(opts, "NewResolver", nodeRule) - if err != nil { - return nil, err - } - return &ENSNewResolverIterator{contract: _ENS.contract, event: "NewResolver", logs: logs, sub: sub}, nil -} - -// WatchNewResolver is a free log subscription operation binding the contract event 0x335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0. -// -// Solidity: event NewResolver(node indexed bytes32, resolver address) -func (_ENS *ENSFilterer) WatchNewResolver(opts *bind.WatchOpts, sink chan<- *ENSNewResolver, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.WatchLogs(opts, "NewResolver", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ENSNewResolver) - if err := _ENS.contract.UnpackLog(event, "NewResolver", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ENSNewTTLIterator is returned from FilterNewTTL and is used to iterate over the raw logs and unpacked data for NewTTL events raised by the ENS contract. -type ENSNewTTLIterator struct { - Event *ENSNewTTL // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ENSNewTTLIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ENSNewTTL) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ENSNewTTL) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *ENSNewTTLIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ENSNewTTLIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ENSNewTTL represents a NewTTL event raised by the ENS contract. -type ENSNewTTL struct { - Node [32]byte - TTL uint64 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNewTTL is a free log retrieval operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. -// -// Solidity: event NewTTL(node indexed bytes32, ttl uint64) -func (_ENS *ENSFilterer) FilterNewTTL(opts *bind.FilterOpts, node [][32]byte) (*ENSNewTTLIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.FilterLogs(opts, "NewTTL", nodeRule) - if err != nil { - return nil, err - } - return &ENSNewTTLIterator{contract: _ENS.contract, event: "NewTTL", logs: logs, sub: sub}, nil -} - -// WatchNewTTL is a free log subscription operation binding the contract event 0x1d4f9bbfc9cab89d66e1a1562f2233ccbf1308cb4f63de2ead5787adddb8fa68. -// -// Solidity: event NewTTL(node indexed bytes32, ttl uint64) -func (_ENS *ENSFilterer) WatchNewTTL(opts *bind.WatchOpts, sink chan<- *ENSNewTTL, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.WatchLogs(opts, "NewTTL", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ENSNewTTL) - if err := _ENS.contract.UnpackLog(event, "NewTTL", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ENSTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ENS contract. -type ENSTransferIterator struct { - Event *ENSTransfer // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *ENSTransferIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(ENSTransfer) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(ENSTransfer) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *ENSTransferIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ENSTransferIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ENSTransfer represents a Transfer event raised by the ENS contract. -type ENSTransfer struct { - Node [32]byte - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransfer is a free log retrieval operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. -// -// Solidity: event Transfer(node indexed bytes32, owner address) -func (_ENS *ENSFilterer) FilterTransfer(opts *bind.FilterOpts, node [][32]byte) (*ENSTransferIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.FilterLogs(opts, "Transfer", nodeRule) - if err != nil { - return nil, err - } - return &ENSTransferIterator{contract: _ENS.contract, event: "Transfer", logs: logs, sub: sub}, nil -} - -// WatchTransfer is a free log subscription operation binding the contract event 0xd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266. -// -// Solidity: event Transfer(node indexed bytes32, owner address) -func (_ENS *ENSFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ENSTransfer, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _ENS.contract.WatchLogs(opts, "Transfer", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(ENSTransfer) - if err := _ENS.contract.UnpackLog(event, "Transfer", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} diff --git a/contracts/ens/contract/fifsregistrar.go b/contracts/ens/contract/fifsregistrar.go deleted file mode 100644 index a08380adfca5..000000000000 --- a/contracts/ens/contract/fifsregistrar.go +++ /dev/null @@ -1,195 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contract - -import ( - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" -) - -// FIFSRegistrarABI is the input ABI used to generate the binding from. -const FIFSRegistrarABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"subnode\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]" - -// FIFSRegistrarBin is the compiled bytecode used for deploying new contracts. -const FIFSRegistrarBin = `0x6060604052341561000f57600080fd5b604051604080610224833981016040528080519190602001805160008054600160a060020a03909516600160a060020a03199095169490941790935550506001556101c58061005f6000396000f3006060604052600436106100275763ffffffff60e060020a600035041663d22057a9811461002c575b600080fd5b341561003757600080fd5b61004e600435600160a060020a0360243516610050565b005b816000806001548360405191825260208201526040908101905190819003902060008054919350600160a060020a03909116906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156100c857600080fd5b6102c65a03f115156100d957600080fd5b5050506040518051915050600160a060020a0381161580159061010e575033600160a060020a031681600160a060020a031614155b1561011857600080fd5b600054600154600160a060020a03909116906306ab592390878760405160e060020a63ffffffff861602815260048101939093526024830191909152600160a060020a03166044820152606401600060405180830381600087803b151561017e57600080fd5b6102c65a03f1151561018f57600080fd5b50505050505050505600a165627a7a723058206fb963cb168d5e3a51af12cd6bb23e324dbd32dd4954f43653ba27e66b68ea650029` - -// DeployFIFSRegistrar deploys a new Ethereum contract, binding an instance of FIFSRegistrar to it. -func DeployFIFSRegistrar(auth *bind.TransactOpts, backend bind.ContractBackend, ensAddr common.Address, node [32]byte) (common.Address, *types.Transaction, *FIFSRegistrar, error) { - parsed, err := abi.JSON(strings.NewReader(FIFSRegistrarABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(FIFSRegistrarBin), backend, ensAddr, node) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &FIFSRegistrar{FIFSRegistrarCaller: FIFSRegistrarCaller{contract: contract}, FIFSRegistrarTransactor: FIFSRegistrarTransactor{contract: contract}, FIFSRegistrarFilterer: FIFSRegistrarFilterer{contract: contract}}, nil -} - -// FIFSRegistrar is an auto generated Go binding around an Ethereum contract. -type FIFSRegistrar struct { - FIFSRegistrarCaller // Read-only binding to the contract - FIFSRegistrarTransactor // Write-only binding to the contract - FIFSRegistrarFilterer // Log filterer for contract events -} - -// FIFSRegistrarCaller is an auto generated read-only Go binding around an Ethereum contract. -type FIFSRegistrarCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// FIFSRegistrarTransactor is an auto generated write-only Go binding around an Ethereum contract. -type FIFSRegistrarTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// FIFSRegistrarFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type FIFSRegistrarFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// FIFSRegistrarSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type FIFSRegistrarSession struct { - Contract *FIFSRegistrar // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// FIFSRegistrarCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type FIFSRegistrarCallerSession struct { - Contract *FIFSRegistrarCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// FIFSRegistrarTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type FIFSRegistrarTransactorSession struct { - Contract *FIFSRegistrarTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// FIFSRegistrarRaw is an auto generated low-level Go binding around an Ethereum contract. -type FIFSRegistrarRaw struct { - Contract *FIFSRegistrar // Generic contract binding to access the raw methods on -} - -// FIFSRegistrarCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type FIFSRegistrarCallerRaw struct { - Contract *FIFSRegistrarCaller // Generic read-only contract binding to access the raw methods on -} - -// FIFSRegistrarTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type FIFSRegistrarTransactorRaw struct { - Contract *FIFSRegistrarTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewFIFSRegistrar creates a new instance of FIFSRegistrar, bound to a specific deployed contract. -func NewFIFSRegistrar(address common.Address, backend bind.ContractBackend) (*FIFSRegistrar, error) { - contract, err := bindFIFSRegistrar(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &FIFSRegistrar{FIFSRegistrarCaller: FIFSRegistrarCaller{contract: contract}, FIFSRegistrarTransactor: FIFSRegistrarTransactor{contract: contract}, FIFSRegistrarFilterer: FIFSRegistrarFilterer{contract: contract}}, nil -} - -// NewFIFSRegistrarCaller creates a new read-only instance of FIFSRegistrar, bound to a specific deployed contract. -func NewFIFSRegistrarCaller(address common.Address, caller bind.ContractCaller) (*FIFSRegistrarCaller, error) { - contract, err := bindFIFSRegistrar(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &FIFSRegistrarCaller{contract: contract}, nil -} - -// NewFIFSRegistrarTransactor creates a new write-only instance of FIFSRegistrar, bound to a specific deployed contract. -func NewFIFSRegistrarTransactor(address common.Address, transactor bind.ContractTransactor) (*FIFSRegistrarTransactor, error) { - contract, err := bindFIFSRegistrar(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &FIFSRegistrarTransactor{contract: contract}, nil -} - -// NewFIFSRegistrarFilterer creates a new log filterer instance of FIFSRegistrar, bound to a specific deployed contract. -func NewFIFSRegistrarFilterer(address common.Address, filterer bind.ContractFilterer) (*FIFSRegistrarFilterer, error) { - contract, err := bindFIFSRegistrar(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &FIFSRegistrarFilterer{contract: contract}, nil -} - -// bindFIFSRegistrar binds a generic wrapper to an already deployed contract. -func bindFIFSRegistrar(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(FIFSRegistrarABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_FIFSRegistrar *FIFSRegistrarRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _FIFSRegistrar.Contract.FIFSRegistrarCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_FIFSRegistrar *FIFSRegistrarRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.FIFSRegistrarTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_FIFSRegistrar *FIFSRegistrarRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.FIFSRegistrarTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_FIFSRegistrar *FIFSRegistrarCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _FIFSRegistrar.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_FIFSRegistrar *FIFSRegistrarTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_FIFSRegistrar *FIFSRegistrarTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.contract.Transact(opts, method, params...) -} - -// Register is a paid mutator transaction binding the contract method 0xd22057a9. -// -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarTransactor) Register(opts *bind.TransactOpts, subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.contract.Transact(opts, "register", subnode, owner) -} - -// Register is a paid mutator transaction binding the contract method 0xd22057a9. -// -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarSession) Register(subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, subnode, owner) -} - -// Register is a paid mutator transaction binding the contract method 0xd22057a9. -// -// Solidity: function register(subnode bytes32, owner address) returns() -func (_FIFSRegistrar *FIFSRegistrarTransactorSession) Register(subnode [32]byte, owner common.Address) (*types.Transaction, error) { - return _FIFSRegistrar.Contract.Register(&_FIFSRegistrar.TransactOpts, subnode, owner) -} diff --git a/contracts/ens/contract/publicresolver.go b/contracts/ens/contract/publicresolver.go deleted file mode 100644 index c567d5884a79..000000000000 --- a/contracts/ens/contract/publicresolver.go +++ /dev/null @@ -1,1321 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contract - -import ( - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// PublicResolverABI is the input ABI used to generate the binding from. -const PublicResolverABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"content\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"ret\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"setContent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"ContentChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"}]" - -// PublicResolverBin is the compiled bytecode used for deploying new contracts. -const PublicResolverBin = `0x6060604052341561000f57600080fd5b6040516020806111b28339810160405280805160008054600160a060020a03909216600160a060020a0319909216919091179055505061115e806100546000396000f3006060604052600436106100ab5763ffffffff60e060020a60003504166301ffc9a781146100b057806310f13a8c146100e45780632203ab561461017e57806329cd62ea146102155780632dff6941146102315780633b3b57de1461025957806359d1d43c1461028b578063623195b014610358578063691f3431146103b457806377372213146103ca578063c3d014d614610420578063c869023314610439578063d5fa2b0014610467575b600080fd5b34156100bb57600080fd5b6100d0600160e060020a031960043516610489565b604051901515815260200160405180910390f35b34156100ef57600080fd5b61017c600480359060446024803590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506105f695505050505050565b005b341561018957600080fd5b610197600435602435610807565b60405182815260406020820181815290820183818151815260200191508051906020019080838360005b838110156101d95780820151838201526020016101c1565b50505050905090810190601f1680156102065780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561022057600080fd5b61017c600435602435604435610931565b341561023c57600080fd5b610247600435610a30565b60405190815260200160405180910390f35b341561026457600080fd5b61026f600435610a46565b604051600160a060020a03909116815260200160405180910390f35b341561029657600080fd5b6102e1600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610a6195505050505050565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561031d578082015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036357600080fd5b61017c600480359060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610b8095505050505050565b34156103bf57600080fd5b6102e1600435610c7c565b34156103d557600080fd5b61017c600480359060446024803590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610d4295505050505050565b341561042b57600080fd5b61017c600435602435610e8c565b341561044457600080fd5b61044f600435610f65565b60405191825260208201526040908101905180910390f35b341561047257600080fd5b61017c600435600160a060020a0360243516610f82565b6000600160e060020a031982167f3b3b57de0000000000000000000000000000000000000000000000000000000014806104ec5750600160e060020a031982167fd8389dc500000000000000000000000000000000000000000000000000000000145b806105205750600160e060020a031982167f691f343100000000000000000000000000000000000000000000000000000000145b806105545750600160e060020a031982167f2203ab5600000000000000000000000000000000000000000000000000000000145b806105885750600160e060020a031982167fc869023300000000000000000000000000000000000000000000000000000000145b806105bc5750600160e060020a031982167f59d1d43c00000000000000000000000000000000000000000000000000000000145b806105f05750600160e060020a031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561064f57600080fd5b6102c65a03f1151561066057600080fd5b50505060405180519050600160a060020a031614151561067f57600080fd5b6000848152600160205260409081902083916005909101908590518082805190602001908083835b602083106106c65780518252601f1990920191602091820191016106a7565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161070a929160200190611085565b50826040518082805190602001908083835b6020831061073b5780518252601f19909201916020918201910161071c565b6001836020036101000a0380198251168184511617909252505050919091019250604091505051908190039020847fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508560405160208082528190810183818151815260200191508051906020019080838360005b838110156107c75780820151838201526020016107af565b50505050905090810190601f1680156107f45780820380516001836020036101000a031916815260200191505b509250505060405180910390a350505050565b6000610811611103565b60008481526001602081905260409091209092505b838311610924578284161580159061085f5750600083815260068201602052604081205460026000196101006001841615020190911604115b15610919578060060160008481526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561090d5780601f106108e25761010080835404028352916020019161090d565b820191906000526020600020905b8154815290600101906020018083116108f057829003601f168201915b50505050509150610929565b600290920291610826565b600092505b509250929050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561098a57600080fd5b6102c65a03f1151561099b57600080fd5b50505060405180519050600160a060020a03161415156109ba57600080fd5b6040805190810160409081528482526020808301859052600087815260019091522060030181518155602082015160019091015550837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46848460405191825260208201526040908101905180910390a250505050565b6000908152600160208190526040909120015490565b600090815260016020526040902054600160a060020a031690565b610a69611103565b60008381526001602052604090819020600501908390518082805190602001908083835b60208310610aac5780518252601f199092019160209182019101610a8d565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905092915050565b600080548491600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bd957600080fd5b6102c65a03f11515610bea57600080fd5b50505060405180519050600160a060020a0316141515610c0957600080fd5b6000198301831615610c1a57600080fd5b60008481526001602090815260408083208684526006019091529020828051610c47929160200190611085565b5082847faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a350505050565b610c84611103565b6001600083600019166000191681526020019081526020016000206002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d365780601f10610d0b57610100808354040283529160200191610d36565b820191906000526020600020905b815481529060010190602001808311610d1957829003601f168201915b50505050509050919050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d9b57600080fd5b6102c65a03f11515610dac57600080fd5b50505060405180519050600160a060020a0316141515610dcb57600080fd5b6000838152600160205260409020600201828051610ded929160200190611085565b50827fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f78360405160208082528190810183818151815260200191508051906020019080838360005b83811015610e4d578082015183820152602001610e35565b50505050905090810190601f168015610e7a5780820380516001836020036101000a031916815260200191505b509250505060405180910390a2505050565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610ee557600080fd5b6102c65a03f11515610ef657600080fd5b50505060405180519050600160a060020a0316141515610f1557600080fd5b6000838152600160208190526040918290200183905583907f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc9084905190815260200160405180910390a2505050565b600090815260016020526040902060038101546004909101549091565b600080548391600160a060020a033381169216906302571be39084906040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610fdb57600080fd5b6102c65a03f11515610fec57600080fd5b50505060405180519050600160a060020a031614151561100b57600080fd5b60008381526001602052604090819020805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03851617905583907f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd290849051600160a060020a03909116815260200160405180910390a2505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106110c657805160ff19168380011785556110f3565b828001600101855582156110f3579182015b828111156110f35782518255916020019190600101906110d8565b506110ff929150611115565b5090565b60206040519081016040526000815290565b61112f91905b808211156110ff576000815560010161111b565b905600a165627a7a723058201ecacbc445b9fbcd91b0ab164389f69d7283b856883bc7437eeed1008345a4920029` - -// DeployPublicResolver deploys a new Ethereum contract, binding an instance of PublicResolver to it. -func DeployPublicResolver(auth *bind.TransactOpts, backend bind.ContractBackend, ensAddr common.Address) (common.Address, *types.Transaction, *PublicResolver, error) { - parsed, err := abi.JSON(strings.NewReader(PublicResolverABI)) - if err != nil { - return common.Address{}, nil, nil, err - } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(PublicResolverBin), backend, ensAddr) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &PublicResolver{PublicResolverCaller: PublicResolverCaller{contract: contract}, PublicResolverTransactor: PublicResolverTransactor{contract: contract}, PublicResolverFilterer: PublicResolverFilterer{contract: contract}}, nil -} - -// PublicResolver is an auto generated Go binding around an Ethereum contract. -type PublicResolver struct { - PublicResolverCaller // Read-only binding to the contract - PublicResolverTransactor // Write-only binding to the contract - PublicResolverFilterer // Log filterer for contract events -} - -// PublicResolverCaller is an auto generated read-only Go binding around an Ethereum contract. -type PublicResolverCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PublicResolverTransactor is an auto generated write-only Go binding around an Ethereum contract. -type PublicResolverTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PublicResolverFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type PublicResolverFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// PublicResolverSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type PublicResolverSession struct { - Contract *PublicResolver // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// PublicResolverCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type PublicResolverCallerSession struct { - Contract *PublicResolverCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// PublicResolverTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type PublicResolverTransactorSession struct { - Contract *PublicResolverTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// PublicResolverRaw is an auto generated low-level Go binding around an Ethereum contract. -type PublicResolverRaw struct { - Contract *PublicResolver // Generic contract binding to access the raw methods on -} - -// PublicResolverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type PublicResolverCallerRaw struct { - Contract *PublicResolverCaller // Generic read-only contract binding to access the raw methods on -} - -// PublicResolverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type PublicResolverTransactorRaw struct { - Contract *PublicResolverTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewPublicResolver creates a new instance of PublicResolver, bound to a specific deployed contract. -func NewPublicResolver(address common.Address, backend bind.ContractBackend) (*PublicResolver, error) { - contract, err := bindPublicResolver(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &PublicResolver{PublicResolverCaller: PublicResolverCaller{contract: contract}, PublicResolverTransactor: PublicResolverTransactor{contract: contract}, PublicResolverFilterer: PublicResolverFilterer{contract: contract}}, nil -} - -// NewPublicResolverCaller creates a new read-only instance of PublicResolver, bound to a specific deployed contract. -func NewPublicResolverCaller(address common.Address, caller bind.ContractCaller) (*PublicResolverCaller, error) { - contract, err := bindPublicResolver(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &PublicResolverCaller{contract: contract}, nil -} - -// NewPublicResolverTransactor creates a new write-only instance of PublicResolver, bound to a specific deployed contract. -func NewPublicResolverTransactor(address common.Address, transactor bind.ContractTransactor) (*PublicResolverTransactor, error) { - contract, err := bindPublicResolver(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &PublicResolverTransactor{contract: contract}, nil -} - -// NewPublicResolverFilterer creates a new log filterer instance of PublicResolver, bound to a specific deployed contract. -func NewPublicResolverFilterer(address common.Address, filterer bind.ContractFilterer) (*PublicResolverFilterer, error) { - contract, err := bindPublicResolver(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &PublicResolverFilterer{contract: contract}, nil -} - -// bindPublicResolver binds a generic wrapper to an already deployed contract. -func bindPublicResolver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(PublicResolverABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_PublicResolver *PublicResolverRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _PublicResolver.Contract.PublicResolverCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_PublicResolver *PublicResolverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _PublicResolver.Contract.PublicResolverTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_PublicResolver *PublicResolverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _PublicResolver.Contract.PublicResolverTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_PublicResolver *PublicResolverCallerRaw) Call(opts *bind.CallOpts, result interface{}, method string, params ...interface{}) error { - return _PublicResolver.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_PublicResolver *PublicResolverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _PublicResolver.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_PublicResolver *PublicResolverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _PublicResolver.Contract.contract.Transact(opts, method, params...) -} - -// ABI is a free data retrieval call binding the contract method 0x2203ab56. -// -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverCaller) ABI(opts *bind.CallOpts, node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { - ret := new(struct { - ContentType *big.Int - Data []byte - }) - out := ret - err := _PublicResolver.contract.Call(opts, out, "ABI", node, contentTypes) - return *ret, err -} - -// ABI is a free data retrieval call binding the contract method 0x2203ab56. -// -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverSession) ABI(node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { - return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) -} - -// ABI is a free data retrieval call binding the contract method 0x2203ab56. -// -// Solidity: function ABI(node bytes32, contentTypes uint256) constant returns(contentType uint256, data bytes) -func (_PublicResolver *PublicResolverCallerSession) ABI(node [32]byte, contentTypes *big.Int) (struct { - ContentType *big.Int - Data []byte -}, error) { - return _PublicResolver.Contract.ABI(&_PublicResolver.CallOpts, node, contentTypes) -} - -// Addr is a free data retrieval call binding the contract method 0x3b3b57de. -// -// Solidity: function addr(node bytes32) constant returns(ret address) -func (_PublicResolver *PublicResolverCaller) Addr(opts *bind.CallOpts, node [32]byte) (common.Address, error) { - var ( - ret0 = new(common.Address) - ) - out := ret0 - err := _PublicResolver.contract.Call(opts, out, "addr", node) - return *ret0, err -} - -// Addr is a free data retrieval call binding the contract method 0x3b3b57de. -// -// Solidity: function addr(node bytes32) constant returns(ret address) -func (_PublicResolver *PublicResolverSession) Addr(node [32]byte) (common.Address, error) { - return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) -} - -// Addr is a free data retrieval call binding the contract method 0x3b3b57de. -// -// Solidity: function addr(node bytes32) constant returns(ret address) -func (_PublicResolver *PublicResolverCallerSession) Addr(node [32]byte) (common.Address, error) { - return _PublicResolver.Contract.Addr(&_PublicResolver.CallOpts, node) -} - -// Content is a free data retrieval call binding the contract method 0x2dff6941. -// -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverCaller) Content(opts *bind.CallOpts, node [32]byte) ([32]byte, error) { - var ( - ret0 = new([32]byte) - ) - out := ret0 - err := _PublicResolver.contract.Call(opts, out, "content", node) - return *ret0, err -} - -// Content is a free data retrieval call binding the contract method 0x2dff6941. -// -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverSession) Content(node [32]byte) ([32]byte, error) { - return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) -} - -// Content is a free data retrieval call binding the contract method 0x2dff6941. -// -// Solidity: function content(node bytes32) constant returns(ret bytes32) -func (_PublicResolver *PublicResolverCallerSession) Content(node [32]byte) ([32]byte, error) { - return _PublicResolver.Contract.Content(&_PublicResolver.CallOpts, node) -} - -// Name is a free data retrieval call binding the contract method 0x691f3431. -// -// Solidity: function name(node bytes32) constant returns(ret string) -func (_PublicResolver *PublicResolverCaller) Name(opts *bind.CallOpts, node [32]byte) (string, error) { - var ( - ret0 = new(string) - ) - out := ret0 - err := _PublicResolver.contract.Call(opts, out, "name", node) - return *ret0, err -} - -// Name is a free data retrieval call binding the contract method 0x691f3431. -// -// Solidity: function name(node bytes32) constant returns(ret string) -func (_PublicResolver *PublicResolverSession) Name(node [32]byte) (string, error) { - return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) -} - -// Name is a free data retrieval call binding the contract method 0x691f3431. -// -// Solidity: function name(node bytes32) constant returns(ret string) -func (_PublicResolver *PublicResolverCallerSession) Name(node [32]byte) (string, error) { - return _PublicResolver.Contract.Name(&_PublicResolver.CallOpts, node) -} - -// Pubkey is a free data retrieval call binding the contract method 0xc8690233. -// -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) -func (_PublicResolver *PublicResolverCaller) Pubkey(opts *bind.CallOpts, node [32]byte) (struct { - X [32]byte - Y [32]byte -}, error) { - ret := new(struct { - X [32]byte - Y [32]byte - }) - out := ret - err := _PublicResolver.contract.Call(opts, out, "pubkey", node) - return *ret, err -} - -// Pubkey is a free data retrieval call binding the contract method 0xc8690233. -// -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) -func (_PublicResolver *PublicResolverSession) Pubkey(node [32]byte) (struct { - X [32]byte - Y [32]byte -}, error) { - return _PublicResolver.Contract.Pubkey(&_PublicResolver.CallOpts, node) -} - -// Pubkey is a free data retrieval call binding the contract method 0xc8690233. -// -// Solidity: function pubkey(node bytes32) constant returns(x bytes32, y bytes32) -func (_PublicResolver *PublicResolverCallerSession) Pubkey(node [32]byte) (struct { - X [32]byte - Y [32]byte -}, error) { - return _PublicResolver.Contract.Pubkey(&_PublicResolver.CallOpts, node) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) -func (_PublicResolver *PublicResolverCaller) SupportsInterface(opts *bind.CallOpts, interfaceID [4]byte) (bool, error) { - var ( - ret0 = new(bool) - ) - out := ret0 - err := _PublicResolver.contract.Call(opts, out, "supportsInterface", interfaceID) - return *ret0, err -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) -func (_PublicResolver *PublicResolverSession) SupportsInterface(interfaceID [4]byte) (bool, error) { - return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) -} - -// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. -// -// Solidity: function supportsInterface(interfaceID bytes4) constant returns(bool) -func (_PublicResolver *PublicResolverCallerSession) SupportsInterface(interfaceID [4]byte) (bool, error) { - return _PublicResolver.Contract.SupportsInterface(&_PublicResolver.CallOpts, interfaceID) -} - -// Text is a free data retrieval call binding the contract method 0x59d1d43c. -// -// Solidity: function text(node bytes32, key string) constant returns(ret string) -func (_PublicResolver *PublicResolverCaller) Text(opts *bind.CallOpts, node [32]byte, key string) (string, error) { - var ( - ret0 = new(string) - ) - out := ret0 - err := _PublicResolver.contract.Call(opts, out, "text", node, key) - return *ret0, err -} - -// Text is a free data retrieval call binding the contract method 0x59d1d43c. -// -// Solidity: function text(node bytes32, key string) constant returns(ret string) -func (_PublicResolver *PublicResolverSession) Text(node [32]byte, key string) (string, error) { - return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) -} - -// Text is a free data retrieval call binding the contract method 0x59d1d43c. -// -// Solidity: function text(node bytes32, key string) constant returns(ret string) -func (_PublicResolver *PublicResolverCallerSession) Text(node [32]byte, key string) (string, error) { - return _PublicResolver.Contract.Text(&_PublicResolver.CallOpts, node, key) -} - -// SetABI is a paid mutator transaction binding the contract method 0x623195b0. -// -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() -func (_PublicResolver *PublicResolverTransactor) SetABI(opts *bind.TransactOpts, node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setABI", node, contentType, data) -} - -// SetABI is a paid mutator transaction binding the contract method 0x623195b0. -// -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() -func (_PublicResolver *PublicResolverSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) -} - -// SetABI is a paid mutator transaction binding the contract method 0x623195b0. -// -// Solidity: function setABI(node bytes32, contentType uint256, data bytes) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetABI(node [32]byte, contentType *big.Int, data []byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetABI(&_PublicResolver.TransactOpts, node, contentType, data) -} - -// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. -// -// Solidity: function setAddr(node bytes32, addr address) returns() -func (_PublicResolver *PublicResolverTransactor) SetAddr(opts *bind.TransactOpts, node [32]byte, addr common.Address) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setAddr", node, addr) -} - -// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. -// -// Solidity: function setAddr(node bytes32, addr address) returns() -func (_PublicResolver *PublicResolverSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { - return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) -} - -// SetAddr is a paid mutator transaction binding the contract method 0xd5fa2b00. -// -// Solidity: function setAddr(node bytes32, addr address) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetAddr(node [32]byte, addr common.Address) (*types.Transaction, error) { - return _PublicResolver.Contract.SetAddr(&_PublicResolver.TransactOpts, node, addr) -} - -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. -// -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverTransactor) SetContent(opts *bind.TransactOpts, node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setContent", node, hash) -} - -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. -// -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) -} - -// SetContent is a paid mutator transaction binding the contract method 0xc3d014d6. -// -// Solidity: function setContent(node bytes32, hash bytes32) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetContent(node [32]byte, hash [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetContent(&_PublicResolver.TransactOpts, node, hash) -} - -// SetName is a paid mutator transaction binding the contract method 0x77372213. -// -// Solidity: function setName(node bytes32, name string) returns() -func (_PublicResolver *PublicResolverTransactor) SetName(opts *bind.TransactOpts, node [32]byte, name string) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setName", node, name) -} - -// SetName is a paid mutator transaction binding the contract method 0x77372213. -// -// Solidity: function setName(node bytes32, name string) returns() -func (_PublicResolver *PublicResolverSession) SetName(node [32]byte, name string) (*types.Transaction, error) { - return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) -} - -// SetName is a paid mutator transaction binding the contract method 0x77372213. -// -// Solidity: function setName(node bytes32, name string) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetName(node [32]byte, name string) (*types.Transaction, error) { - return _PublicResolver.Contract.SetName(&_PublicResolver.TransactOpts, node, name) -} - -// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. -// -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() -func (_PublicResolver *PublicResolverTransactor) SetPubkey(opts *bind.TransactOpts, node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setPubkey", node, x, y) -} - -// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. -// -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() -func (_PublicResolver *PublicResolverSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) -} - -// SetPubkey is a paid mutator transaction binding the contract method 0x29cd62ea. -// -// Solidity: function setPubkey(node bytes32, x bytes32, y bytes32) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetPubkey(node [32]byte, x [32]byte, y [32]byte) (*types.Transaction, error) { - return _PublicResolver.Contract.SetPubkey(&_PublicResolver.TransactOpts, node, x, y) -} - -// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. -// -// Solidity: function setText(node bytes32, key string, value string) returns() -func (_PublicResolver *PublicResolverTransactor) SetText(opts *bind.TransactOpts, node [32]byte, key string, value string) (*types.Transaction, error) { - return _PublicResolver.contract.Transact(opts, "setText", node, key, value) -} - -// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. -// -// Solidity: function setText(node bytes32, key string, value string) returns() -func (_PublicResolver *PublicResolverSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { - return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) -} - -// SetText is a paid mutator transaction binding the contract method 0x10f13a8c. -// -// Solidity: function setText(node bytes32, key string, value string) returns() -func (_PublicResolver *PublicResolverTransactorSession) SetText(node [32]byte, key string, value string) (*types.Transaction, error) { - return _PublicResolver.Contract.SetText(&_PublicResolver.TransactOpts, node, key, value) -} - -// PublicResolverABIChangedIterator is returned from FilterABIChanged and is used to iterate over the raw logs and unpacked data for ABIChanged events raised by the PublicResolver contract. -type PublicResolverABIChangedIterator struct { - Event *PublicResolverABIChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverABIChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverABIChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverABIChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverABIChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverABIChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverABIChanged represents a ABIChanged event raised by the PublicResolver contract. -type PublicResolverABIChanged struct { - Node [32]byte - ContentType *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterABIChanged is a free log retrieval operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. -// -// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) -func (_PublicResolver *PublicResolverFilterer) FilterABIChanged(opts *bind.FilterOpts, node [][32]byte, contentType []*big.Int) (*PublicResolverABIChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var contentTypeRule []interface{} - for _, contentTypeItem := range contentType { - contentTypeRule = append(contentTypeRule, contentTypeItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ABIChanged", nodeRule, contentTypeRule) - if err != nil { - return nil, err - } - return &PublicResolverABIChangedIterator{contract: _PublicResolver.contract, event: "ABIChanged", logs: logs, sub: sub}, nil -} - -// WatchABIChanged is a free log subscription operation binding the contract event 0xaa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe3. -// -// Solidity: event ABIChanged(node indexed bytes32, contentType indexed uint256) -func (_PublicResolver *PublicResolverFilterer) WatchABIChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverABIChanged, node [][32]byte, contentType []*big.Int) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var contentTypeRule []interface{} - for _, contentTypeItem := range contentType { - contentTypeRule = append(contentTypeRule, contentTypeItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ABIChanged", nodeRule, contentTypeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverABIChanged) - if err := _PublicResolver.contract.UnpackLog(event, "ABIChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// PublicResolverAddrChangedIterator is returned from FilterAddrChanged and is used to iterate over the raw logs and unpacked data for AddrChanged events raised by the PublicResolver contract. -type PublicResolverAddrChangedIterator struct { - Event *PublicResolverAddrChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverAddrChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverAddrChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverAddrChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverAddrChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverAddrChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverAddrChanged represents a AddrChanged event raised by the PublicResolver contract. -type PublicResolverAddrChanged struct { - Node [32]byte - A common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAddrChanged is a free log retrieval operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. -// -// Solidity: event AddrChanged(node indexed bytes32, a address) -func (_PublicResolver *PublicResolverFilterer) FilterAddrChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverAddrChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "AddrChanged", nodeRule) - if err != nil { - return nil, err - } - return &PublicResolverAddrChangedIterator{contract: _PublicResolver.contract, event: "AddrChanged", logs: logs, sub: sub}, nil -} - -// WatchAddrChanged is a free log subscription operation binding the contract event 0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2. -// -// Solidity: event AddrChanged(node indexed bytes32, a address) -func (_PublicResolver *PublicResolverFilterer) WatchAddrChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverAddrChanged, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "AddrChanged", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverAddrChanged) - if err := _PublicResolver.contract.UnpackLog(event, "AddrChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// PublicResolverContentChangedIterator is returned from FilterContentChanged and is used to iterate over the raw logs and unpacked data for ContentChanged events raised by the PublicResolver contract. -type PublicResolverContentChangedIterator struct { - Event *PublicResolverContentChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverContentChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverContentChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverContentChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverContentChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverContentChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverContentChanged represents a ContentChanged event raised by the PublicResolver contract. -type PublicResolverContentChanged struct { - Node [32]byte - Hash [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterContentChanged is a free log retrieval operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. -// -// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) -func (_PublicResolver *PublicResolverFilterer) FilterContentChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverContentChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "ContentChanged", nodeRule) - if err != nil { - return nil, err - } - return &PublicResolverContentChangedIterator{contract: _PublicResolver.contract, event: "ContentChanged", logs: logs, sub: sub}, nil -} - -// WatchContentChanged is a free log subscription operation binding the contract event 0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc. -// -// Solidity: event ContentChanged(node indexed bytes32, hash bytes32) -func (_PublicResolver *PublicResolverFilterer) WatchContentChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverContentChanged, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "ContentChanged", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverContentChanged) - if err := _PublicResolver.contract.UnpackLog(event, "ContentChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// PublicResolverNameChangedIterator is returned from FilterNameChanged and is used to iterate over the raw logs and unpacked data for NameChanged events raised by the PublicResolver contract. -type PublicResolverNameChangedIterator struct { - Event *PublicResolverNameChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverNameChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverNameChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverNameChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverNameChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverNameChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverNameChanged represents a NameChanged event raised by the PublicResolver contract. -type PublicResolverNameChanged struct { - Node [32]byte - Name string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterNameChanged is a free log retrieval operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. -// -// Solidity: event NameChanged(node indexed bytes32, name string) -func (_PublicResolver *PublicResolverFilterer) FilterNameChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverNameChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "NameChanged", nodeRule) - if err != nil { - return nil, err - } - return &PublicResolverNameChangedIterator{contract: _PublicResolver.contract, event: "NameChanged", logs: logs, sub: sub}, nil -} - -// WatchNameChanged is a free log subscription operation binding the contract event 0xb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7. -// -// Solidity: event NameChanged(node indexed bytes32, name string) -func (_PublicResolver *PublicResolverFilterer) WatchNameChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverNameChanged, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "NameChanged", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverNameChanged) - if err := _PublicResolver.contract.UnpackLog(event, "NameChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// PublicResolverPubkeyChangedIterator is returned from FilterPubkeyChanged and is used to iterate over the raw logs and unpacked data for PubkeyChanged events raised by the PublicResolver contract. -type PublicResolverPubkeyChangedIterator struct { - Event *PublicResolverPubkeyChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverPubkeyChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverPubkeyChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverPubkeyChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverPubkeyChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverPubkeyChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverPubkeyChanged represents a PubkeyChanged event raised by the PublicResolver contract. -type PublicResolverPubkeyChanged struct { - Node [32]byte - X [32]byte - Y [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterPubkeyChanged is a free log retrieval operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. -// -// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) -func (_PublicResolver *PublicResolverFilterer) FilterPubkeyChanged(opts *bind.FilterOpts, node [][32]byte) (*PublicResolverPubkeyChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "PubkeyChanged", nodeRule) - if err != nil { - return nil, err - } - return &PublicResolverPubkeyChangedIterator{contract: _PublicResolver.contract, event: "PubkeyChanged", logs: logs, sub: sub}, nil -} - -// WatchPubkeyChanged is a free log subscription operation binding the contract event 0x1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e46. -// -// Solidity: event PubkeyChanged(node indexed bytes32, x bytes32, y bytes32) -func (_PublicResolver *PublicResolverFilterer) WatchPubkeyChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverPubkeyChanged, node [][32]byte) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "PubkeyChanged", nodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverPubkeyChanged) - if err := _PublicResolver.contract.UnpackLog(event, "PubkeyChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// PublicResolverTextChangedIterator is returned from FilterTextChanged and is used to iterate over the raw logs and unpacked data for TextChanged events raised by the PublicResolver contract. -type PublicResolverTextChangedIterator struct { - Event *PublicResolverTextChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *PublicResolverTextChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(PublicResolverTextChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(PublicResolverTextChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error retruned any retrieval or parsing error occurred during filtering. -func (it *PublicResolverTextChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *PublicResolverTextChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// PublicResolverTextChanged represents a TextChanged event raised by the PublicResolver contract. -type PublicResolverTextChanged struct { - Node [32]byte - IndexedKey common.Hash - Key string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTextChanged is a free log retrieval operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. -// -// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) -func (_PublicResolver *PublicResolverFilterer) FilterTextChanged(opts *bind.FilterOpts, node [][32]byte, indexedKey []string) (*PublicResolverTextChangedIterator, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var indexedKeyRule []interface{} - for _, indexedKeyItem := range indexedKey { - indexedKeyRule = append(indexedKeyRule, indexedKeyItem) - } - - logs, sub, err := _PublicResolver.contract.FilterLogs(opts, "TextChanged", nodeRule, indexedKeyRule) - if err != nil { - return nil, err - } - return &PublicResolverTextChangedIterator{contract: _PublicResolver.contract, event: "TextChanged", logs: logs, sub: sub}, nil -} - -// WatchTextChanged is a free log subscription operation binding the contract event 0xd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550. -// -// Solidity: event TextChanged(node indexed bytes32, indexedKey indexed string, key string) -func (_PublicResolver *PublicResolverFilterer) WatchTextChanged(opts *bind.WatchOpts, sink chan<- *PublicResolverTextChanged, node [][32]byte, indexedKey []string) (event.Subscription, error) { - - var nodeRule []interface{} - for _, nodeItem := range node { - nodeRule = append(nodeRule, nodeItem) - } - var indexedKeyRule []interface{} - for _, indexedKeyItem := range indexedKey { - indexedKeyRule = append(indexedKeyRule, indexedKeyItem) - } - - logs, sub, err := _PublicResolver.contract.WatchLogs(opts, "TextChanged", nodeRule, indexedKeyRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(PublicResolverTextChanged) - if err := _PublicResolver.contract.UnpackLog(event, "TextChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} diff --git a/contracts/ens/ens.go b/contracts/ens/ens.go deleted file mode 100644 index b1841ab17daf..000000000000 --- a/contracts/ens/ens.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ens - -//go:generate abigen --sol contract/ENS.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/ens.go -//go:generate abigen --sol contract/FIFSRegistrar.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/fifsregistrar.go -//go:generate abigen --sol contract/PublicResolver.sol --exc contract/AbstractENS.sol:AbstractENS --pkg contract --out contract/publicresolver.go - -import ( - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/ens/contract" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" -) - -var ( - MainNetAddress = common.HexToAddress("0x314159265dD8dbb310642f98f50C066173C1259b") - TestNetAddress = common.HexToAddress("0x112234455c3a32fd11230c42e7bccd4a84e02010") -) - -// ENS is the swarm domain name registry and resolver -type ENS struct { - *contract.ENSSession - contractBackend bind.ContractBackend -} - -// NewENS creates a struct exposing convenient high-level operations for interacting with -// the Ethereum Name Service. -func NewENS(transactOpts *bind.TransactOpts, contractAddr common.Address, contractBackend bind.ContractBackend) (*ENS, error) { - ens, err := contract.NewENS(contractAddr, contractBackend) - if err != nil { - return nil, err - } - return &ENS{ - &contract.ENSSession{ - Contract: ens, - TransactOpts: *transactOpts, - }, - contractBackend, - }, nil -} - -// DeployENS deploys an instance of the ENS nameservice, with a 'first-in, first-served' root registrar. -func DeployENS(transactOpts *bind.TransactOpts, contractBackend bind.ContractBackend) (common.Address, *ENS, error) { - // Deploy the ENS registry - ensAddr, _, _, err := contract.DeployENS(transactOpts, contractBackend) - if err != nil { - return ensAddr, nil, err - } - ens, err := NewENS(transactOpts, ensAddr, contractBackend) - if err != nil { - return ensAddr, nil, err - } - // Deploy the registrar - regAddr, _, _, err := contract.DeployFIFSRegistrar(transactOpts, contractBackend, ensAddr, [32]byte{}) - if err != nil { - return ensAddr, nil, err - } - // Set the registrar as owner of the ENS root - if _, err = ens.SetOwner([32]byte{}, regAddr); err != nil { - return ensAddr, nil, err - } - return ensAddr, ens, nil -} - -func ensParentNode(name string) (common.Hash, common.Hash) { - parts := strings.SplitN(name, ".", 2) - label := crypto.Keccak256Hash([]byte(parts[0])) - if len(parts) == 1 { - return [32]byte{}, label - } - parentNode, parentLabel := ensParentNode(parts[1]) - return crypto.Keccak256Hash(parentNode[:], parentLabel[:]), label -} - -func EnsNode(name string) common.Hash { - parentNode, parentLabel := ensParentNode(name) - return crypto.Keccak256Hash(parentNode[:], parentLabel[:]) -} - -func (ens *ENS) getResolver(node [32]byte) (*contract.PublicResolverSession, error) { - resolverAddr, err := ens.Resolver(node) - if err != nil { - return nil, err - } - resolver, err := contract.NewPublicResolver(resolverAddr, ens.contractBackend) - if err != nil { - return nil, err - } - return &contract.PublicResolverSession{ - Contract: resolver, - TransactOpts: ens.TransactOpts, - }, nil -} - -func (ens *ENS) getRegistrar(node [32]byte) (*contract.FIFSRegistrarSession, error) { - registrarAddr, err := ens.Owner(node) - if err != nil { - return nil, err - } - registrar, err := contract.NewFIFSRegistrar(registrarAddr, ens.contractBackend) - if err != nil { - return nil, err - } - return &contract.FIFSRegistrarSession{ - Contract: registrar, - TransactOpts: ens.TransactOpts, - }, nil -} - -// Resolve is a non-transactional call that returns the content hash associated with a name. -func (ens *ENS) Resolve(name string) (common.Hash, error) { - node := EnsNode(name) - - resolver, err := ens.getResolver(node) - if err != nil { - return common.Hash{}, err - } - ret, err := resolver.Content(node) - if err != nil { - return common.Hash{}, err - } - return common.BytesToHash(ret[:]), nil -} - -// Addr is a non-transactional call that returns the address associated with a name. -func (ens *ENS) Addr(name string) (common.Address, error) { - node := EnsNode(name) - - resolver, err := ens.getResolver(node) - if err != nil { - return common.Address{}, err - } - ret, err := resolver.Addr(node) - if err != nil { - return common.Address{}, err - } - return common.BytesToAddress(ret[:]), nil -} - -// SetAddress sets the address associated with a name. Only works if the caller -// owns the name, and the associated resolver implements a `setAddress` function. -func (ens *ENS) SetAddr(name string, addr common.Address) (*types.Transaction, error) { - node := EnsNode(name) - - resolver, err := ens.getResolver(node) - if err != nil { - return nil, err - } - opts := ens.TransactOpts - opts.GasLimit = 200000 - return resolver.Contract.SetAddr(&opts, node, addr) -} - -// Register registers a new domain name for the caller, making them the owner of the new name. -// Only works if the registrar for the parent domain implements the FIFS registrar protocol. -func (ens *ENS) Register(name string) (*types.Transaction, error) { - parentNode, label := ensParentNode(name) - registrar, err := ens.getRegistrar(parentNode) - if err != nil { - return nil, err - } - return registrar.Contract.Register(&ens.TransactOpts, label, ens.TransactOpts.From) -} - -// SetContentHash sets the content hash associated with a name. Only works if the caller -// owns the name, and the associated resolver implements a `setContent` function. -func (ens *ENS) SetContentHash(name string, hash common.Hash) (*types.Transaction, error) { - node := EnsNode(name) - - resolver, err := ens.getResolver(node) - if err != nil { - return nil, err - } - opts := ens.TransactOpts - opts.GasLimit = 200000 - return resolver.Contract.SetContent(&opts, node, hash) -} diff --git a/contracts/ens/ens_test.go b/contracts/ens/ens_test.go deleted file mode 100644 index cd64fbf15f83..000000000000 --- a/contracts/ens/ens_test.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ens - -import ( - "math/big" - "testing" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/ens/contract" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/crypto" -) - -var ( - key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - name = "my name on ENS" - hash = crypto.Keccak256Hash([]byte("my content")) - addr = crypto.PubkeyToAddress(key.PublicKey) - testAddr = common.HexToAddress("0x1234123412341234123412341234123412341234") -) - -func TestENS(t *testing.T) { - contractBackend := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 10000000) - transactOpts := bind.NewKeyedTransactor(key) - - ensAddr, ens, err := DeployENS(transactOpts, contractBackend) - if err != nil { - t.Fatalf("can't deploy root registry: %v", err) - } - contractBackend.Commit() - - // Set ourself as the owner of the name. - if _, err := ens.Register(name); err != nil { - t.Fatalf("can't register: %v", err) - } - contractBackend.Commit() - - // Deploy a resolver and make it responsible for the name. - resolverAddr, _, _, err := contract.DeployPublicResolver(transactOpts, contractBackend, ensAddr) - if err != nil { - t.Fatalf("can't deploy resolver: %v", err) - } - if _, err := ens.SetResolver(EnsNode(name), resolverAddr); err != nil { - t.Fatalf("can't set resolver: %v", err) - } - contractBackend.Commit() - - // Set the content hash for the name. - if _, err = ens.SetContentHash(name, hash); err != nil { - t.Fatalf("can't set content hash: %v", err) - } - contractBackend.Commit() - - // Try to resolve the name. - vhost, err := ens.Resolve(name) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - if vhost != hash { - t.Fatalf("resolve error, expected %v, got %v", hash.Hex(), vhost.Hex()) - } - - // set the address for the name - if _, err = ens.SetAddr(name, testAddr); err != nil { - t.Fatalf("can't set address: %v", err) - } - contractBackend.Commit() - - // Try to resolve the name to an address - recoveredAddr, err := ens.Addr(name) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - if vhost != hash { - t.Fatalf("resolve error, expected %v, got %v", testAddr.Hex(), recoveredAddr.Hex()) - } -} diff --git a/core/asm/lex_test.go b/core/asm/lex_test.go index e6901d4e3769..16e0ad458d16 100644 --- a/core/asm/lex_test.go +++ b/core/asm/lex_test.go @@ -22,7 +22,7 @@ import ( ) func lexAll(src string) []token { - ch := Lex("test.asm", []byte(src), false) + ch := Lex([]byte(src), false) var tokens []token for i := range ch { diff --git a/core/asm/lexer.go b/core/asm/lexer.go index 91caeb27bc35..00526242e4cf 100644 --- a/core/asm/lexer.go +++ b/core/asm/lexer.go @@ -95,7 +95,7 @@ type lexer struct { // lex lexes the program by name with the given source. It returns a // channel on which the tokens are delivered. -func Lex(name string, source []byte, debug bool) <-chan token { +func Lex(source []byte, debug bool) <-chan token { ch := make(chan token) l := &lexer{ input: string(source), diff --git a/core/bench_test.go b/core/bench_test.go index 53cba051709d..d7a5e11c2f15 100644 --- a/core/bench_test.go +++ b/core/bench_test.go @@ -85,7 +85,7 @@ func genValueTx(nbytes int) func(int, *BlockGen) { return func(i int, gen *BlockGen) { toaddr := common.Address{} data := make([]byte, nbytes) - gas, _ := IntrinsicGas(data, false, false) + gas, _ := IntrinsicGas(data, false, false, false) tx, _ := types.SignTx(types.NewTransaction(gen.TxNonce(benchRootAddr), toaddr, big.NewInt(1), gas, nil, data), types.HomesteadSigner{}, benchRootKey) gen.AddTx(tx) } @@ -150,14 +150,14 @@ func benchInsertChain(b *testing.B, disk bool, gen func(int, *BlockGen)) { // Create the database in memory or in a temporary directory. var db ethdb.Database if !disk { - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() } else { dir, err := ioutil.TempDir("", "eth-core-bench") if err != nil { b.Fatalf("cannot create temporary directory: %v", err) } defer os.RemoveAll(dir) - db, err = ethdb.NewLDBDatabase(dir, 128, 128) + db, err = rawdb.NewLevelDBDatabase(dir, 128, 128, "") if err != nil { b.Fatalf("cannot create temporary database: %v", err) } @@ -255,7 +255,7 @@ func benchWriteChain(b *testing.B, full bool, count uint64) { if err != nil { b.Fatalf("cannot create temporary directory: %v", err) } - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } @@ -272,7 +272,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { } defer os.RemoveAll(dir) - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } @@ -283,7 +283,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { b.ResetTimer() for i := 0; i < b.N; i++ { - db, err := ethdb.NewLDBDatabase(dir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(dir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", dir, err) } @@ -297,7 +297,7 @@ func benchReadChain(b *testing.B, full bool, count uint64) { if full { hash := header.Hash() rawdb.ReadBody(db, hash, n) - rawdb.ReadReceipts(db, hash, n) + rawdb.ReadReceipts(db, hash, n, chain.Config()) } } chain.Stop() diff --git a/core/block_validator.go b/core/block_validator.go index 899539b09514..e6632df0904f 100644 --- a/core/block_validator.go +++ b/core/block_validator.go @@ -78,7 +78,7 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error { // transition, such as amount of used gas, the receipt roots and the state root // itself. ValidateState returns a database batch if the validation was a success // otherwise nil and an error is returned. -func (v *BlockValidator) ValidateState(block, parent *types.Block, statedb *state.StateDB, receipts types.Receipts, usedGas uint64, fees *big.Int) error { +func (v *BlockValidator) ValidateState(block *types.Block, statedb *state.StateDB, receipts types.Receipts, usedGas uint64, fees *big.Int) error { header := block.Header() if block.GasUsed() != usedGas { return fmt.Errorf("invalid gas used (remote: %d local: %d)", block.GasUsed(), usedGas) diff --git a/core/block_validator_test.go b/core/block_validator_test.go index 9319a7835dba..06e2ba1a4fd9 100644 --- a/core/block_validator_test.go +++ b/core/block_validator_test.go @@ -22,9 +22,9 @@ import ( "time" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -32,7 +32,7 @@ import ( func TestHeaderVerification(t *testing.T) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil) @@ -84,7 +84,7 @@ func TestHeaderConcurrentVerification32(t *testing.T) { testHeaderConcurrentVeri func testHeaderConcurrentVerification(t *testing.T, threads int) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 8, nil) @@ -156,7 +156,7 @@ func TestHeaderConcurrentAbortion32(t *testing.T) { testHeaderConcurrentAbortion func testHeaderConcurrentAbortion(t *testing.T, threads int) { // Create a simple chain to verify var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() gspec = &Genesis{Config: params.TestChainConfig} genesis = gspec.MustCommit(testdb) blocks, _ = GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), testdb, 1024, nil) diff --git a/core/blockchain.go b/core/blockchain.go index 77e5df515b89..d65364d96e32 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -35,7 +35,6 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" @@ -47,34 +46,74 @@ import ( ) var ( + headBlockGauge = metrics.NewRegisteredGauge("chain/head/block", nil) + headHeaderGauge = metrics.NewRegisteredGauge("chain/head/header", nil) + headFastBlockGauge = metrics.NewRegisteredGauge("chain/head/receipt", nil) + + accountReadTimer = metrics.NewRegisteredTimer("chain/account/reads", nil) + accountHashTimer = metrics.NewRegisteredTimer("chain/account/hashes", nil) + accountUpdateTimer = metrics.NewRegisteredTimer("chain/account/updates", nil) + accountCommitTimer = metrics.NewRegisteredTimer("chain/account/commits", nil) + + storageReadTimer = metrics.NewRegisteredTimer("chain/storage/reads", nil) + storageHashTimer = metrics.NewRegisteredTimer("chain/storage/hashes", nil) + storageUpdateTimer = metrics.NewRegisteredTimer("chain/storage/updates", nil) + storageCommitTimer = metrics.NewRegisteredTimer("chain/storage/commits", nil) + blockInsertTimer = metrics.NewRegisteredTimer("chain/inserts", nil) blockValidationTimer = metrics.NewRegisteredTimer("chain/validation", nil) blockExecutionTimer = metrics.NewRegisteredTimer("chain/execution", nil) blockWriteTimer = metrics.NewRegisteredTimer("chain/write", nil) + blockReorgAddMeter = metrics.NewRegisteredMeter("chain/reorg/drop", nil) + blockReorgDropMeter = metrics.NewRegisteredMeter("chain/reorg/add", nil) - ErrNoGenesis = errors.New("Genesis not found in chain") + blockPrefetchExecuteTimer = metrics.NewRegisteredTimer("chain/prefetch/executes", nil) + blockPrefetchInterruptMeter = metrics.NewRegisteredMeter("chain/prefetch/interrupts", nil) + + errInsertionInterrupted = errors.New("insertion is interrupted") ) const ( bodyCacheLimit = 256 blockCacheLimit = 256 receiptsCacheLimit = 32 + txLookupCacheLimit = 1024 maxFutureBlocks = 256 maxTimeFutureBlocks = 30 badBlockLimit = 10 - triesInMemory = 128 + TriesInMemory = 128 // BlockChainVersion ensures that an incompatible database forces a resync from scratch. - BlockChainVersion uint64 = 3 + // + // Changelog: + // + // - Version 4 + // The following incompatible database changes were added: + // * the `BlockNumber`, `TxHash`, `TxIndex`, `BlockHash` and `Index` fields of log are deleted + // * the `Bloom` field of receipt is deleted + // * the `BlockIndex` and `TxIndex` fields of txlookup are deleted + // - Version 5 + // The following incompatible database changes were added: + // * the `TxHash`, `GasCost`, and `ContractAddress` fields are no longer stored for a receipt + // * the `TxHash`, `GasCost`, and `ContractAddress` fields are computed by looking up the + // receipts' corresponding block + // - Version 6 + // The following incompatible database changes were added: + // * Transaction lookup information stores the corresponding block number instead of block hash + // - Version 7 + // The following incompatible database changes were added: + // * Use freezer as the ancient database to maintain all ancient data + BlockChainVersion uint64 = 7 ) // CacheConfig contains the configuration values for the trie caching/pruning // that's resident in a blockchain. type CacheConfig struct { - Disabled bool // Whether to disable trie write caching (archive node) - TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory - TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk - TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk + TrieCleanLimit int // Memory allowance (MB) to use for caching trie nodes in memory + TrieCleanNoPrefetch bool // Whether to disable heuristic state prefetching for followup blocks + TrieDirtyLimit int // Memory limit (MB) at which to start flushing dirty trie nodes to disk + TrieDirtyDisabled bool // Whether to disable trie write caching and GC altogether (archive node) + TrieTimeLimit time.Duration // Time limit after which to flush the current in-memory trie to disk } // BlockChain represents the canonical chain given a database with a genesis @@ -105,14 +144,12 @@ type BlockChain struct { chainSideFeed event.Feed chainHeadFeed event.Feed logsFeed event.Feed + blockProcFeed event.Feed scope event.SubscriptionScope genesisBlock *types.Block - mu sync.RWMutex // global mutex for locking chain operations chainmu sync.RWMutex // blockchain insertion lock - procmu sync.RWMutex // block processor lock - checkpoint int // checkpoint counts towards the new checkpoint currentBlock atomic.Value // Current head of the block chain currentFastBlock atomic.Value // Current head of the fast-sync chain (may be above the block chain!) @@ -121,6 +158,7 @@ type BlockChain struct { bodyRLPCache *lru.Cache // Cache for the most recent block bodies in RLP encoded format receiptsCache *lru.Cache // Cache for the most recent receipts per block blockCache *lru.Cache // Cache for the most recent entire blocks + txLookupCache *lru.Cache // Cache for the most recent transaction lookup data. futureBlocks *lru.Cache // future blocks are blocks added for later processing quit chan struct{} // blockchain quit channel @@ -129,13 +167,15 @@ type BlockChain struct { procInterrupt int32 // interrupt signaler for block processing wg sync.WaitGroup // chain processing wait group for shutting down - engine consensus.Engine - processor Processor // block processor interface - validator Validator // block and state validator interface - vmConfig vm.Config + engine consensus.Engine + validator Validator // Block and state validator interface + prefetcher Prefetcher // Block state prefetcher interface + processor Processor // Block transaction processor interface + vmConfig vm.Config - badBlocks *lru.Cache // Bad block cache - shouldPreserve func(*types.Block) bool // Function used to determine whether should preserve the given block. + badBlocks *lru.Cache // Bad block cache + shouldPreserve func(*types.Block) bool // Function used to determine whether should preserve the given block. + terminateInsert func(common.Hash, uint64) bool // Testing hook used to terminate ancient receipt chain insertion. } // NewBlockChain returns a fully initialised block chain using information @@ -153,6 +193,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par bodyRLPCache, _ := lru.New(bodyCacheLimit) receiptsCache, _ := lru.New(receiptsCacheLimit) blockCache, _ := lru.New(blockCacheLimit) + txLookupCache, _ := lru.New(txLookupCacheLimit) futureBlocks, _ := lru.New(maxFutureBlocks) badBlocks, _ := lru.New(badBlockLimit) @@ -168,13 +209,15 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par bodyRLPCache: bodyRLPCache, receiptsCache: receiptsCache, blockCache: blockCache, + txLookupCache: txLookupCache, futureBlocks: futureBlocks, engine: engine, vmConfig: vmConfig, badBlocks: badBlocks, } - bc.SetValidator(NewBlockValidator(chainConfig, bc, engine)) - bc.SetProcessor(NewStateProcessor(chainConfig, bc, engine)) + bc.validator = NewBlockValidator(chainConfig, bc, engine) + bc.prefetcher = newStatePrefetcher(chainConfig, bc, engine) + bc.processor = NewStateProcessor(chainConfig, bc, engine) var err error bc.hc, err = NewHeaderChain(db, chainConfig, engine, bc.getProcInterrupt) @@ -185,9 +228,57 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par if bc.genesisBlock == nil { return nil, ErrNoGenesis } + + var nilBlock *types.Block + bc.currentBlock.Store(nilBlock) + bc.currentFastBlock.Store(nilBlock) + + // Initialize the chain with ancient data if it isn't empty. + if bc.empty() { + rawdb.InitDatabaseFromFreezer(bc.db) + } + if err := bc.loadLastState(); err != nil { return nil, err } + // The first thing the node will do is reconstruct the verification data for + // the head block (ethash cache or clique voting snapshot). Might as well do + // it in advance. + bc.engine.VerifyHeader(bc, bc.CurrentHeader(), true) + + if frozen, err := bc.db.Ancients(); err == nil && frozen > 0 { + var ( + needRewind bool + low uint64 + ) + // The head full block may be rolled back to a very low height due to + // blockchain repair. If the head full block is even lower than the ancient + // chain, truncate the ancient store. + fullBlock := bc.CurrentBlock() + if fullBlock != nil && fullBlock != bc.genesisBlock && fullBlock.NumberU64() < frozen-1 { + needRewind = true + low = fullBlock.NumberU64() + } + // In fast sync, it may happen that ancient data has been written to the + // ancient store, but the LastFastBlock has not been updated, truncate the + // extra data here. + fastBlock := bc.CurrentFastBlock() + if fastBlock != nil && fastBlock.NumberU64() < frozen-1 { + needRewind = true + if fastBlock.NumberU64() < low || low == 0 { + low = fastBlock.NumberU64() + } + } + if needRewind { + var hashes []common.Hash + previous := bc.CurrentHeader().Number.Uint64() + for i := low + 1; i <= bc.CurrentHeader().Number.Uint64(); i++ { + hashes = append(hashes, rawdb.ReadCanonicalHash(bc.db, i)) + } + bc.Rollback(hashes) + log.Warn("Truncate ancient chain", "from", previous, "to", low) + } + } // Check the current state of the block hashes and make sure that we do not have any of the bad blocks in our chain for hash := range BadHashes { if header := bc.GetHeaderByHash(hash); header != nil { @@ -215,6 +306,20 @@ func (bc *BlockChain) GetVMConfig() *vm.Config { return &bc.vmConfig } +// empty returns an indicator whether the blockchain is empty. +// Note, it's a special case that we connect a non-empty ancient +// database with an empty node, so that we can plugin the ancient +// into node seamlessly. +func (bc *BlockChain) empty() bool { + genesis := bc.genesisBlock.Hash() + for _, hash := range []common.Hash{rawdb.ReadHeadBlockHash(bc.db), rawdb.ReadHeadHeaderHash(bc.db), rawdb.ReadHeadFastBlockHash(bc.db)} { + if hash != genesis { + return false + } + } + return true +} + // loadLastState loads the last known chain state from the database. This method // assumes that the chain manager mutex is held. func (bc *BlockChain) loadLastState() error { @@ -239,9 +344,11 @@ func (bc *BlockChain) loadLastState() error { if err := bc.repair(¤tBlock); err != nil { return err } + rawdb.WriteHeadBlockHash(bc.db, currentBlock.Hash()) } // Everything seems to be fine, set as the head block bc.currentBlock.Store(currentBlock) + headBlockGauge.Update(int64(currentBlock.NumberU64())) // Restore the last known head header currentHeader := currentBlock.Header() @@ -254,12 +361,14 @@ func (bc *BlockChain) loadLastState() error { // Restore the last known head fast block bc.currentFastBlock.Store(currentBlock) + headFastBlockGauge.Update(int64(currentBlock.NumberU64())) + if head := rawdb.ReadHeadFastBlockHash(bc.db); head != (common.Hash{}) { if block := bc.GetBlockByHash(head); block != nil { bc.currentFastBlock.Store(block) + headFastBlockGauge.Update(int64(block.NumberU64())) } } - // Issue a status log for the user currentFastBlock := bc.CurrentFastBlock() @@ -267,9 +376,9 @@ func (bc *BlockChain) loadLastState() error { blockTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) fastTd := bc.GetTd(currentFastBlock.Hash(), currentFastBlock.NumberU64()) - log.Info("Loaded most recent local header", "number", currentHeader.Number, "hash", currentHeader.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(currentHeader.Time.Int64(), 0))) - log.Info("Loaded most recent local full block", "number", currentBlock.Number(), "hash", currentBlock.Hash(), "td", blockTd, "age", common.PrettyAge(time.Unix(currentBlock.Time().Int64(), 0))) - log.Info("Loaded most recent local fast block", "number", currentFastBlock.Number(), "hash", currentFastBlock.Hash(), "td", fastTd, "age", common.PrettyAge(time.Unix(currentFastBlock.Time().Int64(), 0))) + log.Info("Loaded most recent local header", "number", currentHeader.Number, "hash", currentHeader.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(int64(currentHeader.Time), 0))) + log.Info("Loaded most recent local full block", "number", currentBlock.Number(), "hash", currentBlock.Hash(), "td", blockTd, "age", common.PrettyAge(time.Unix(int64(currentBlock.Time()), 0))) + log.Info("Loaded most recent local fast block", "number", currentFastBlock.Number(), "hash", currentFastBlock.Hash(), "td", fastTd, "age", common.PrettyAge(time.Unix(int64(currentFastBlock.Time()), 0))) return nil } @@ -281,50 +390,71 @@ func (bc *BlockChain) loadLastState() error { func (bc *BlockChain) SetHead(head uint64) error { log.Warn("Rewinding blockchain", "target", head) - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() + + updateFn := func(db ethdb.KeyValueWriter, header *types.Header) { + // Rewind the block chain, ensuring we don't end up with a stateless head block + if currentBlock := bc.CurrentBlock(); currentBlock != nil && header.Number.Uint64() < currentBlock.NumberU64() { + newHeadBlock := bc.GetBlock(header.Hash(), header.Number.Uint64()) + if newHeadBlock == nil { + newHeadBlock = bc.genesisBlock + } else { + if _, err := state.New(newHeadBlock.Root(), bc.stateCache); err != nil { + // Rewound state missing, rolled back to before pivot, reset to genesis + newHeadBlock = bc.genesisBlock + } + } + rawdb.WriteHeadBlockHash(db, newHeadBlock.Hash()) + bc.currentBlock.Store(newHeadBlock) + headBlockGauge.Update(int64(newHeadBlock.NumberU64())) + } + + // Rewind the fast block in a simpleton way to the target head + if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock != nil && header.Number.Uint64() < currentFastBlock.NumberU64() { + newHeadFastBlock := bc.GetBlock(header.Hash(), header.Number.Uint64()) + // If either blocks reached nil, reset to the genesis state + if newHeadFastBlock == nil { + newHeadFastBlock = bc.genesisBlock + } + rawdb.WriteHeadFastBlockHash(db, newHeadFastBlock.Hash()) + bc.currentFastBlock.Store(newHeadFastBlock) + headFastBlockGauge.Update(int64(newHeadFastBlock.NumberU64())) + } + } // Rewind the header chain, deleting all block bodies until then - delFn := func(db rawdb.DatabaseDeleter, hash common.Hash, num uint64) { - rawdb.DeleteBody(db, hash, num) + delFn := func(db ethdb.KeyValueWriter, hash common.Hash, num uint64) { + // Ignore the error here since light client won't hit this path + frozen, _ := bc.db.Ancients() + if num+1 <= frozen { + // Truncate all relative data(header, total difficulty, body, receipt + // and canonical hash) from ancient store. + if err := bc.db.TruncateAncients(num + 1); err != nil { + log.Crit("Failed to truncate ancient data", "number", num, "err", err) + } + + // Remove the hash <-> number mapping from the active store. + rawdb.DeleteHeaderNumber(db, hash) + } else { + // Remove relative body and receipts from the active store. + // The header, total difficulty and canonical hash will be + // removed in the hc.SetHead function. + rawdb.DeleteBody(db, hash, num) + rawdb.DeleteReceipts(db, hash, num) + } + // Todo(rjl493456442) txlookup, bloombits, etc } - bc.hc.SetHead(head, delFn) - currentHeader := bc.hc.CurrentHeader() + bc.hc.SetHead(head, updateFn, delFn) // Clear out any stale content from the caches bc.bodyCache.Purge() bc.bodyRLPCache.Purge() bc.receiptsCache.Purge() bc.blockCache.Purge() + bc.txLookupCache.Purge() bc.futureBlocks.Purge() - // Rewind the block chain, ensuring we don't end up with a stateless head block - if currentBlock := bc.CurrentBlock(); currentBlock != nil && currentHeader.Number.Uint64() < currentBlock.NumberU64() { - bc.currentBlock.Store(bc.GetBlock(currentHeader.Hash(), currentHeader.Number.Uint64())) - } - if currentBlock := bc.CurrentBlock(); currentBlock != nil { - if _, err := state.New(currentBlock.Root(), bc.stateCache); err != nil { - // Rewound state missing, rolled back to before pivot, reset to genesis - bc.currentBlock.Store(bc.genesisBlock) - } - } - // Rewind the fast block in a simpleton way to the target head - if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock != nil && currentHeader.Number.Uint64() < currentFastBlock.NumberU64() { - bc.currentFastBlock.Store(bc.GetBlock(currentHeader.Hash(), currentHeader.Number.Uint64())) - } - // If either blocks reached nil, reset to the genesis state - if currentBlock := bc.CurrentBlock(); currentBlock == nil { - bc.currentBlock.Store(bc.genesisBlock) - } - if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock == nil { - bc.currentFastBlock.Store(bc.genesisBlock) - } - currentBlock := bc.CurrentBlock() - currentFastBlock := bc.CurrentFastBlock() - - rawdb.WriteHeadBlockHash(bc.db, currentBlock.Hash()) - rawdb.WriteHeadFastBlockHash(bc.db, currentFastBlock.Hash()) - return bc.loadLastState() } @@ -336,13 +466,14 @@ func (bc *BlockChain) FastSyncCommitHead(hash common.Hash) error { if block == nil { return fmt.Errorf("non existent block [%x…]", hash[:4]) } - if _, err := trie.NewSecure(block.Root(), bc.stateCache.TrieDB(), 0); err != nil { + if _, err := trie.NewSecure(block.Root(), bc.stateCache.TrieDB()); err != nil { return err } // If all checks out, manually set the head block - bc.mu.Lock() + bc.chainmu.Lock() bc.currentBlock.Store(block) - bc.mu.Unlock() + headBlockGauge.Update(int64(block.NumberU64())) + bc.chainmu.Unlock() log.Info("Committed new head block", "number", block.Number(), "hash", hash) return nil @@ -365,31 +496,13 @@ func (bc *BlockChain) CurrentFastBlock() *types.Block { return bc.currentFastBlock.Load().(*types.Block) } -// SetProcessor sets the processor required for making state modifications. -func (bc *BlockChain) SetProcessor(processor Processor) { - bc.procmu.Lock() - defer bc.procmu.Unlock() - bc.processor = processor -} - -// SetValidator sets the validator which is used to validate incoming blocks. -func (bc *BlockChain) SetValidator(validator Validator) { - bc.procmu.Lock() - defer bc.procmu.Unlock() - bc.validator = validator -} - // Validator returns the current validator. func (bc *BlockChain) Validator() Validator { - bc.procmu.RLock() - defer bc.procmu.RUnlock() return bc.validator } // Processor returns the current processor. func (bc *BlockChain) Processor() Processor { - bc.procmu.RLock() - defer bc.procmu.RUnlock() return bc.processor } @@ -420,8 +533,8 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error { if err := bc.SetHead(0); err != nil { return err } - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() // Prepare the genesis block and reinitialise the chain if err := bc.hc.WriteTd(genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()); err != nil { @@ -432,9 +545,12 @@ func (bc *BlockChain) ResetWithGenesisBlock(genesis *types.Block) error { bc.genesisBlock = genesis bc.insert(bc.genesisBlock) bc.currentBlock.Store(bc.genesisBlock) + headBlockGauge.Update(int64(bc.genesisBlock.NumberU64())) + bc.hc.SetGenesis(bc.genesisBlock.Header()) bc.hc.SetCurrentHeader(bc.genesisBlock.Header()) bc.currentFastBlock.Store(bc.genesisBlock) + headFastBlockGauge.Update(int64(bc.genesisBlock.NumberU64())) return nil } @@ -457,7 +573,7 @@ func (bc *BlockChain) repair(head **types.Block) error { if block == nil { return fmt.Errorf("missing block %d [%x]", (*head).NumberU64()-1, (*head).ParentHash()) } - (*head) = block + *head = block } } @@ -468,8 +584,8 @@ func (bc *BlockChain) Export(w io.Writer) error { // ExportN writes a subset of the active chain to the given writer. func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { - bc.mu.RLock() - defer bc.mu.RUnlock() + bc.chainmu.RLock() + defer bc.chainmu.RUnlock() if first > last { return fmt.Errorf("export failed: first (%d) is greater than last (%d)", first, last) @@ -490,7 +606,6 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { reported = time.Now() } } - return nil } @@ -509,6 +624,7 @@ func (bc *BlockChain) insert(block *types.Block) { rawdb.WriteHeadBlockHash(bc.db, block.Hash()) bc.currentBlock.Store(block) + headBlockGauge.Update(int64(block.NumberU64())) // If the block is better than our head or is on a different chain, force update heads if updateHeads { @@ -516,6 +632,7 @@ func (bc *BlockChain) insert(block *types.Block) { rawdb.WriteHeadFastBlockHash(bc.db, block.Hash()) bc.currentFastBlock.Store(block) + headFastBlockGauge.Update(int64(block.NumberU64())) } } @@ -645,7 +762,10 @@ func (bc *BlockChain) GetReceiptsByHash(hash common.Hash) types.Receipts { if number == nil { return nil } - receipts := rawdb.ReadReceipts(bc.db, hash, *number) + receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig) + if receipts == nil { + return nil + } bc.receiptsCache.Add(hash, receipts) return receipts } @@ -704,10 +824,10 @@ func (bc *BlockChain) Stop() { // - HEAD: So we don't need to reprocess any blocks in the general case // - HEAD-1: So we don't do large reorgs if our HEAD becomes an uncle // - HEAD-127: So we have a hard limit on the number of blocks reexecuted - if !bc.cacheConfig.Disabled { + if !bc.cacheConfig.TrieDirtyDisabled { triedb := bc.stateCache.TrieDB() - for _, offset := range []uint64{0, 1, triesInMemory - 1} { + for _, offset := range []uint64{0, 1, TriesInMemory - 1} { if number := bc.CurrentBlock().NumberU64(); number > offset { recent := bc.GetBlockByNumber(number - offset) @@ -756,8 +876,8 @@ const ( // Rollback is designed to remove a chain of links from the database that aren't // certain enough to be valid. func (bc *BlockChain) Rollback(chain []common.Hash) { - bc.mu.Lock() - defer bc.mu.Unlock() + bc.chainmu.Lock() + defer bc.chainmu.Unlock() for i := len(chain) - 1; i >= 0; i-- { hash := chain[i] @@ -768,134 +888,329 @@ func (bc *BlockChain) Rollback(chain []common.Hash) { } if currentFastBlock := bc.CurrentFastBlock(); currentFastBlock.Hash() == hash { newFastBlock := bc.GetBlock(currentFastBlock.ParentHash(), currentFastBlock.NumberU64()-1) - bc.currentFastBlock.Store(newFastBlock) rawdb.WriteHeadFastBlockHash(bc.db, newFastBlock.Hash()) + bc.currentFastBlock.Store(newFastBlock) + headFastBlockGauge.Update(int64(newFastBlock.NumberU64())) } if currentBlock := bc.CurrentBlock(); currentBlock.Hash() == hash { newBlock := bc.GetBlock(currentBlock.ParentHash(), currentBlock.NumberU64()-1) - bc.currentBlock.Store(newBlock) rawdb.WriteHeadBlockHash(bc.db, newBlock.Hash()) + bc.currentBlock.Store(newBlock) + headBlockGauge.Update(int64(newBlock.NumberU64())) } } + // Truncate ancient data which exceeds the current header. + // + // Notably, it can happen that system crashes without truncating the ancient data + // but the head indicator has been updated in the active store. Regarding this issue, + // system will self recovery by truncating the extra data during the setup phase. + if err := bc.truncateAncient(bc.hc.CurrentHeader().Number.Uint64()); err != nil { + log.Crit("Truncate ancient store failed", "err", err) + } } -// SetReceiptsData computes all the non-consensus fields of the receipts -func SetReceiptsData(config *params.ChainConfig, block *types.Block, receipts types.Receipts) error { - signer := types.MakeSigner(config, block.Number()) - - transactions, logIndex := block.Transactions(), uint(0) - if len(transactions) != len(receipts) { - return errors.New("transaction and receipt count mismatch") +// truncateAncient rewinds the blockchain to the specified header and deletes all +// data in the ancient store that exceeds the specified header. +func (bc *BlockChain) truncateAncient(head uint64) error { + frozen, err := bc.db.Ancients() + if err != nil { + return err } + // Short circuit if there is no data to truncate in ancient store. + if frozen <= head+1 { + return nil + } + // Truncate all the data in the freezer beyond the specified head + if err := bc.db.TruncateAncients(head + 1); err != nil { + return err + } + // Clear out any stale content from the caches + bc.hc.headerCache.Purge() + bc.hc.tdCache.Purge() + bc.hc.numberCache.Purge() - for j := 0; j < len(receipts); j++ { - // The transaction hash can be retrieved from the transaction itself - receipts[j].TxHash = transactions[j].Hash() + // Clear out any stale content from the caches + bc.bodyCache.Purge() + bc.bodyRLPCache.Purge() + bc.receiptsCache.Purge() + bc.blockCache.Purge() + bc.txLookupCache.Purge() + bc.futureBlocks.Purge() - // The contract address can be derived from the transaction itself - if transactions[j].To() == nil { - // Deriving the signer is expensive, only do if it's actually needed - from, _ := types.Sender(signer, transactions[j]) - receipts[j].ContractAddress = crypto.CreateAddress(from, transactions[j].Nonce()) - } - // The used gas can be calculated based on previous receipts - if j == 0 { - receipts[j].GasUsed = receipts[j].CumulativeGasUsed - } else { - receipts[j].GasUsed = receipts[j].CumulativeGasUsed - receipts[j-1].CumulativeGasUsed - } - // The derived log fields can simply be set from the block and transaction - for k := 0; k < len(receipts[j].Logs); k++ { - receipts[j].Logs[k].BlockNumber = block.NumberU64() - receipts[j].Logs[k].BlockHash = block.Hash() - receipts[j].Logs[k].TxHash = receipts[j].TxHash - receipts[j].Logs[k].TxIndex = uint(j) - receipts[j].Logs[k].Index = logIndex - logIndex++ - } - } + log.Info("Rewind ancient data", "number", head) return nil } +// numberHash is just a container for a number and a hash, to represent a block +type numberHash struct { + number uint64 + hash common.Hash +} + // InsertReceiptChain attempts to complete an already existing header chain with // transaction and receipt data. -func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain []types.Receipts) (int, error) { +func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain []types.Receipts, ancientLimit uint64) (int, error) { + // We don't require the chainMu here since we want to maximize the + // concurrency of header insertion and receipt insertion. bc.wg.Add(1) defer bc.wg.Done() + var ( + ancientBlocks, liveBlocks types.Blocks + ancientReceipts, liveReceipts []types.Receipts + ) // Do a sanity check that the provided chain is actually ordered and linked - for i := 1; i < len(blockChain); i++ { - if blockChain[i].NumberU64() != blockChain[i-1].NumberU64()+1 || blockChain[i].ParentHash() != blockChain[i-1].Hash() { - log.Error("Non contiguous receipt insert", "number", blockChain[i].Number(), "hash", blockChain[i].Hash(), "parent", blockChain[i].ParentHash(), - "prevnumber", blockChain[i-1].Number(), "prevhash", blockChain[i-1].Hash()) - return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, blockChain[i-1].NumberU64(), - blockChain[i-1].Hash().Bytes()[:4], i, blockChain[i].NumberU64(), blockChain[i].Hash().Bytes()[:4], blockChain[i].ParentHash().Bytes()[:4]) + for i := 0; i < len(blockChain); i++ { + if i != 0 { + if blockChain[i].NumberU64() != blockChain[i-1].NumberU64()+1 || blockChain[i].ParentHash() != blockChain[i-1].Hash() { + log.Error("Non contiguous receipt insert", "number", blockChain[i].Number(), "hash", blockChain[i].Hash(), "parent", blockChain[i].ParentHash(), + "prevnumber", blockChain[i-1].Number(), "prevhash", blockChain[i-1].Hash()) + return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, blockChain[i-1].NumberU64(), + blockChain[i-1].Hash().Bytes()[:4], i, blockChain[i].NumberU64(), blockChain[i].Hash().Bytes()[:4], blockChain[i].ParentHash().Bytes()[:4]) + } + } + if blockChain[i].NumberU64() <= ancientLimit { + ancientBlocks, ancientReceipts = append(ancientBlocks, blockChain[i]), append(ancientReceipts, receiptChain[i]) + } else { + liveBlocks, liveReceipts = append(liveBlocks, blockChain[i]), append(liveReceipts, receiptChain[i]) } } var ( stats = struct{ processed, ignored int32 }{} start = time.Now() - bytes = 0 - batch = bc.db.NewBatch() + size = 0 ) - for i, block := range blockChain { - receipts := receiptChain[i] - // Short circuit insertion if shutting down or processing failed - if atomic.LoadInt32(&bc.procInterrupt) == 1 { - return 0, nil + // updateHead updates the head fast sync block if the inserted blocks are better + // and returns a indicator whether the inserted blocks are canonical. + updateHead := func(head *types.Block) bool { + bc.chainmu.Lock() + + // Rewind may have occurred, skip in that case. + if bc.CurrentHeader().Number.Cmp(head.Number()) >= 0 { + currentFastBlock, td := bc.CurrentFastBlock(), bc.GetTd(head.Hash(), head.NumberU64()) + if bc.GetTd(currentFastBlock.Hash(), currentFastBlock.NumberU64()).Cmp(td) < 0 { + rawdb.WriteHeadFastBlockHash(bc.db, head.Hash()) + bc.currentFastBlock.Store(head) + headFastBlockGauge.Update(int64(head.NumberU64())) + bc.chainmu.Unlock() + return true + } + } + bc.chainmu.Unlock() + return false + } + // writeAncient writes blockchain and corresponding receipt chain into ancient store. + // + // this function only accepts canonical chain data. All side chain will be reverted + // eventually. + writeAncient := func(blockChain types.Blocks, receiptChain []types.Receipts) (int, error) { + var ( + previous = bc.CurrentFastBlock() + batch = bc.db.NewBatch() + ) + // If any error occurs before updating the head or we are inserting a side chain, + // all the data written this time wll be rolled back. + defer func() { + if previous != nil { + if err := bc.truncateAncient(previous.NumberU64()); err != nil { + log.Crit("Truncate ancient store failed", "err", err) + } + } + }() + var deleted []*numberHash + for i, block := range blockChain { + // Short circuit insertion if shutting down or processing failed + if atomic.LoadInt32(&bc.procInterrupt) == 1 { + return 0, errInsertionInterrupted + } + // Short circuit insertion if it is required(used in testing only) + if bc.terminateInsert != nil && bc.terminateInsert(block.Hash(), block.NumberU64()) { + return i, errors.New("insertion is terminated for testing purpose") + } + // Short circuit if the owner header is unknown + if !bc.HasHeader(block.Hash(), block.NumberU64()) { + return i, fmt.Errorf("containing header #%d [%x…] unknown", block.Number(), block.Hash().Bytes()[:4]) + } + var ( + start = time.Now() + logged = time.Now() + count int + ) + // Migrate all ancient blocks. This can happen if someone upgrades from Geth + // 1.8.x to 1.9.x mid-fast-sync. Perhaps we can get rid of this path in the + // long term. + for { + // We can ignore the error here since light client won't hit this code path. + frozen, _ := bc.db.Ancients() + if frozen >= block.NumberU64() { + break + } + h := rawdb.ReadCanonicalHash(bc.db, frozen) + b := rawdb.ReadBlock(bc.db, h, frozen) + size += rawdb.WriteAncientBlock(bc.db, b, rawdb.ReadReceipts(bc.db, h, frozen, bc.chainConfig), rawdb.ReadTd(bc.db, h, frozen)) + count += 1 + + // Always keep genesis block in active database. + if b.NumberU64() != 0 { + deleted = append(deleted, &numberHash{b.NumberU64(), b.Hash()}) + } + if time.Since(logged) > 8*time.Second { + log.Info("Migrating ancient blocks", "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + // Don't collect too much in-memory, write it out every 100K blocks + if len(deleted) > 100000 { + + // Sync the ancient store explicitly to ensure all data has been flushed to disk. + if err := bc.db.Sync(); err != nil { + return 0, err + } + // Wipe out canonical block data. + for _, nh := range deleted { + rawdb.DeleteBlockWithoutNumber(batch, nh.hash, nh.number) + rawdb.DeleteCanonicalHash(batch, nh.number) + } + if err := batch.Write(); err != nil { + return 0, err + } + batch.Reset() + // Wipe out side chain too. + for _, nh := range deleted { + for _, hash := range rawdb.ReadAllHashes(bc.db, nh.number) { + rawdb.DeleteBlock(batch, hash, nh.number) + } + } + if err := batch.Write(); err != nil { + return 0, err + } + batch.Reset() + deleted = deleted[0:] + } + } + if count > 0 { + log.Info("Migrated ancient blocks", "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + } + // Flush data into ancient database. + size += rawdb.WriteAncientBlock(bc.db, block, receiptChain[i], bc.GetTd(block.Hash(), block.NumberU64())) + rawdb.WriteTxLookupEntries(batch, block) + + stats.processed++ } - // Short circuit if the owner header is unknown - if !bc.HasHeader(block.Hash(), block.NumberU64()) { - return i, fmt.Errorf("containing header #%d [%x…] unknown", block.Number(), block.Hash().Bytes()[:4]) + // Flush all tx-lookup index data. + size += batch.ValueSize() + if err := batch.Write(); err != nil { + return 0, err } - // Skip if the entire data is already known - if bc.HasBlock(block.Hash(), block.NumberU64()) { - stats.ignored++ - continue + batch.Reset() + + // Sync the ancient store explicitly to ensure all data has been flushed to disk. + if err := bc.db.Sync(); err != nil { + return 0, err } - // Compute all the non-consensus fields of the receipts - if err := SetReceiptsData(bc.chainConfig, block, receipts); err != nil { - return i, fmt.Errorf("failed to set receipts data: %v", err) + if !updateHead(blockChain[len(blockChain)-1]) { + return 0, errors.New("side blocks can't be accepted as the ancient chain data") } - // Write all the data out into the database - rawdb.WriteBody(batch, block.Hash(), block.NumberU64(), block.Body()) - rawdb.WriteReceipts(batch, block.Hash(), block.NumberU64(), receipts) - rawdb.WriteTxLookupEntries(batch, block) + previous = nil // disable rollback explicitly - stats.processed++ + // Wipe out canonical block data. + for _, nh := range deleted { + rawdb.DeleteBlockWithoutNumber(batch, nh.hash, nh.number) + rawdb.DeleteCanonicalHash(batch, nh.number) + } + for _, block := range blockChain { + // Always keep genesis block in active database. + if block.NumberU64() != 0 { + rawdb.DeleteBlockWithoutNumber(batch, block.Hash(), block.NumberU64()) + rawdb.DeleteCanonicalHash(batch, block.NumberU64()) + } + } + if err := batch.Write(); err != nil { + return 0, err + } + batch.Reset() - if batch.ValueSize() >= ethdb.IdealBatchSize { + // Wipe out side chain too. + for _, nh := range deleted { + for _, hash := range rawdb.ReadAllHashes(bc.db, nh.number) { + rawdb.DeleteBlock(batch, hash, nh.number) + } + } + for _, block := range blockChain { + // Always keep genesis block in active database. + if block.NumberU64() != 0 { + for _, hash := range rawdb.ReadAllHashes(bc.db, block.NumberU64()) { + rawdb.DeleteBlock(batch, hash, block.NumberU64()) + } + } + } + if err := batch.Write(); err != nil { + return 0, err + } + return 0, nil + } + // writeLive writes blockchain and corresponding receipt chain into active store. + writeLive := func(blockChain types.Blocks, receiptChain []types.Receipts) (int, error) { + batch := bc.db.NewBatch() + for i, block := range blockChain { + // Short circuit insertion if shutting down or processing failed + if atomic.LoadInt32(&bc.procInterrupt) == 1 { + return 0, errInsertionInterrupted + } + // Short circuit if the owner header is unknown + if !bc.HasHeader(block.Hash(), block.NumberU64()) { + return i, fmt.Errorf("containing header #%d [%x…] unknown", block.Number(), block.Hash().Bytes()[:4]) + } + if bc.HasBlock(block.Hash(), block.NumberU64()) { + stats.ignored++ + continue + } + // Write all the data out into the database + rawdb.WriteBody(batch, block.Hash(), block.NumberU64(), block.Body()) + rawdb.WriteReceipts(batch, block.Hash(), block.NumberU64(), receiptChain[i]) + rawdb.WriteTxLookupEntries(batch, block) + + stats.processed++ + if batch.ValueSize() >= ethdb.IdealBatchSize { + if err := batch.Write(); err != nil { + return 0, err + } + size += batch.ValueSize() + batch.Reset() + } + } + if batch.ValueSize() > 0 { + size += batch.ValueSize() if err := batch.Write(); err != nil { return 0, err } - bytes += batch.ValueSize() - batch.Reset() } + updateHead(blockChain[len(blockChain)-1]) + return 0, nil } - if batch.ValueSize() > 0 { - bytes += batch.ValueSize() - if err := batch.Write(); err != nil { - return 0, err + // Write downloaded chain data and corresponding receipt chain data. + if len(ancientBlocks) > 0 { + if n, err := writeAncient(ancientBlocks, ancientReceipts); err != nil { + if err == errInsertionInterrupted { + return 0, nil + } + return n, err } } - - // Update the head fast sync block if better - bc.mu.Lock() - head := blockChain[len(blockChain)-1] - if td := bc.GetTd(head.Hash(), head.NumberU64()); td != nil { // Rewind may have occurred, skip in that case - currentFastBlock := bc.CurrentFastBlock() - if bc.GetTd(currentFastBlock.Hash(), currentFastBlock.NumberU64()).Cmp(td) < 0 { - rawdb.WriteHeadFastBlockHash(bc.db, head.Hash()) - bc.currentFastBlock.Store(head) + if len(liveBlocks) > 0 { + if n, err := writeLive(liveBlocks, liveReceipts); err != nil { + if err == errInsertionInterrupted { + return 0, nil + } + return n, err } } - bc.mu.Unlock() + head := blockChain[len(blockChain)-1] context := []interface{}{ "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)), - "number", head.Number(), "hash", head.Hash(), "age", common.PrettyAge(time.Unix(head.Time().Int64(), 0)), - "size", common.StorageSize(bytes), + "number", head.Number(), "hash", head.Hash(), "age", common.PrettyAge(time.Unix(int64(head.Time()), 0)), + "size", common.StorageSize(size), } if stats.ignored > 0 { context = append(context, []interface{}{"ignored", stats.ignored}...) @@ -907,10 +1222,10 @@ func (bc *BlockChain) InsertReceiptChain(blockChain types.Blocks, receiptChain [ var lastWrite uint64 -// WriteBlockWithoutState writes only the block and its metadata to the database, +// writeBlockWithoutState writes only the block and its metadata to the database, // but does not write any state. This is used to construct competing side forks // up to the point where they exceed the canonical total difficulty. -func (bc *BlockChain) WriteBlockWithoutState(block *types.Block, td *big.Int) (err error) { +func (bc *BlockChain) writeBlockWithoutState(block *types.Block, td *big.Int) (err error) { bc.wg.Add(1) defer bc.wg.Done() @@ -922,8 +1237,37 @@ func (bc *BlockChain) WriteBlockWithoutState(block *types.Block, td *big.Int) (e return nil } +// writeKnownBlock updates the head block flag with a known block +// and introduces chain reorg if necessary. +func (bc *BlockChain) writeKnownBlock(block *types.Block) error { + bc.wg.Add(1) + defer bc.wg.Done() + + current := bc.CurrentBlock() + if block.ParentHash() != current.Hash() { + if err := bc.reorg(current, block); err != nil { + return err + } + } + // Write the positional metadata for transaction/receipt lookups. + // Preimages here is empty, ignore it. + rawdb.WriteTxLookupEntries(bc.db, block) + + bc.insert(block) + return nil +} + // WriteBlockWithState writes the block and all associated state to the database. func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types.Receipt, state *state.StateDB) (status WriteStatus, err error) { + bc.chainmu.Lock() + defer bc.chainmu.Unlock() + + return bc.writeBlockWithState(block, receipts, state) +} + +// writeBlockWithState writes the block and all associated state to the database, +// but is expects the chain mutex to be held. +func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.Receipt, state *state.StateDB) (status WriteStatus, err error) { bc.wg.Add(1) defer bc.wg.Done() @@ -933,9 +1277,6 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. return NonStatTy, consensus.ErrUnknownAncestor } // Make sure no inconsistent state is leaked during insertion - bc.mu.Lock() - defer bc.mu.Unlock() - currentBlock := bc.CurrentBlock() localTd := bc.GetTd(currentBlock.Hash(), currentBlock.NumberU64()) externTd := new(big.Int).Add(block.Difficulty(), ptd) @@ -953,7 +1294,7 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. triedb := bc.stateCache.TrieDB() // If we're running an archive node, always flush - if bc.cacheConfig.Disabled { + if bc.cacheConfig.TrieDirtyDisabled { if err := triedb.Commit(root, false); err != nil { return NonStatTy, err } @@ -962,7 +1303,7 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. triedb.Reference(root, common.Hash{}) // metadata reference to keep trie alive bc.triegc.Push(root, -int64(block.NumberU64())) - if current := block.NumberU64(); current > triesInMemory { + if current := block.NumberU64(); current > TriesInMemory { // If we exceeded our memory allowance, flush matured singleton nodes to disk var ( nodes, imgs = triedb.Size() @@ -972,7 +1313,7 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. triedb.Cap(limit - ethdb.IdealBatchSize) } // Find the next state trie we need to commit - chosen := current - triesInMemory + chosen := current - TriesInMemory // If we exceeded out time allowance, flush an entire trie to disk if bc.gcproc > bc.cacheConfig.TrieTimeLimit { @@ -984,8 +1325,8 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. } else { // If we're exceeding limits but haven't reached a large enough memory gap, // warn the user that the system is becoming unstable. - if chosen < lastWrite+triesInMemory && bc.gcproc >= 2*bc.cacheConfig.TrieTimeLimit { - log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", bc.cacheConfig.TrieTimeLimit, "optimum", float64(chosen-lastWrite)/triesInMemory) + if chosen < lastWrite+TriesInMemory && bc.gcproc >= 2*bc.cacheConfig.TrieTimeLimit { + log.Info("State in memory for too long, committing", "time", bc.gcproc, "allowance", bc.cacheConfig.TrieTimeLimit, "optimum", float64(chosen-lastWrite)/TriesInMemory) } // Flush an entire trie and restart the counters triedb.Commit(header.Root, true) @@ -1058,8 +1399,8 @@ func (bc *BlockChain) WriteBlockWithState(block *types.Block, receipts []*types. // accepted for future processing, and returns an error if the block is too far // ahead and was not added. func (bc *BlockChain) addFutureBlock(block *types.Block) error { - max := big.NewInt(time.Now().Unix() + maxTimeFutureBlocks) - if block.Time().Cmp(max) > 0 { + max := uint64(time.Now().Unix() + maxTimeFutureBlocks) + if block.Time() > max { return fmt.Errorf("future block timestamp %v > allowed %v", block.Time(), max) } bc.futureBlocks.Add(block.Hash(), block) @@ -1077,15 +1418,25 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { if len(chain) == 0 { return 0, nil } + + bc.blockProcFeed.Send(true) + defer bc.blockProcFeed.Send(false) + + // Remove already known canon-blocks + var ( + block, prev *types.Block + ) // Do a sanity check that the provided chain is actually ordered and linked for i := 1; i < len(chain); i++ { - if chain[i].NumberU64() != chain[i-1].NumberU64()+1 || chain[i].ParentHash() != chain[i-1].Hash() { + block = chain[i] + prev = chain[i-1] + if block.NumberU64() != prev.NumberU64()+1 || block.ParentHash() != prev.Hash() { // Chain broke ancestry, log a message (programming error) and skip insertion - log.Error("Non contiguous block insert", "number", chain[i].Number(), "hash", chain[i].Hash(), - "parent", chain[i].ParentHash(), "prevnumber", chain[i-1].Number(), "prevhash", chain[i-1].Hash()) + log.Error("Non contiguous block insert", "number", block.Number(), "hash", block.Hash(), + "parent", block.ParentHash(), "prevnumber", prev.Number(), "prevhash", prev.Hash()) - return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, chain[i-1].NumberU64(), - chain[i-1].Hash().Bytes()[:4], i, chain[i].NumberU64(), chain[i].Hash().Bytes()[:4], chain[i].ParentHash().Bytes()[:4]) + return 0, fmt.Errorf("non contiguous insert: item %d is #%d [%x…], item %d is #%d [%x…] (parent [%x…])", i-1, prev.NumberU64(), + prev.Hash().Bytes()[:4], i, block.NumberU64(), block.Hash().Bytes()[:4], block.ParentHash().Bytes()[:4]) } } // Pre-checks passed, start the full block imports @@ -1099,7 +1450,7 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { return n, err } -// insertChain is the internal implementation of insertChain, which assumes that +// insertChain is the internal implementation of InsertChain, which assumes that // 1) chains are contiguous, and 2) The chain mutex is held. // // This method is split out so that import batches that require re-injecting @@ -1108,7 +1459,7 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { // is imported, but then new canon-head is added before the actual sidechain // completes, then the historic state could be pruned again func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, []interface{}, []*types.Log, error) { - // If the chain is terminating, don't even bother starting u + // If the chain is terminating, don't even bother starting up if atomic.LoadInt32(&bc.procInterrupt) == 1 { return 0, nil, nil, nil } @@ -1136,17 +1487,61 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] defer close(abort) // Peek the error for the first block to decide the directing import logic - it := newInsertIterator(chain, results, bc.Validator()) + it := newInsertIterator(chain, results, bc.validator) block, err := it.next() + + // Left-trim all the known blocks + if err == ErrKnownBlock { + // First block (and state) is known + // 1. We did a roll-back, and should now do a re-import + // 2. The block is stored as a sidechain, and is lying about it's stateroot, and passes a stateroot + // from the canonical chain, which has not been verified. + // Skip all known blocks that are behind us + var ( + current = bc.CurrentBlock() + localTd = bc.GetTd(current.Hash(), current.NumberU64()) + externTd = bc.GetTd(block.ParentHash(), block.NumberU64()-1) // The first block can't be nil + ) + for block != nil && err == ErrKnownBlock { + externTd = new(big.Int).Add(externTd, block.Difficulty()) + if localTd.Cmp(externTd) < 0 { + break + } + log.Debug("Ignoring already known block", "number", block.Number(), "hash", block.Hash()) + stats.ignored++ + + block, err = it.next() + } + // The remaining blocks are still known blocks, the only scenario here is: + // During the fast sync, the pivot point is already submitted but rollback + // happens. Then node resets the head full block to a lower height via `rollback` + // and leaves a few known blocks in the database. + // + // When node runs a fast sync again, it can re-import a batch of known blocks via + // `insertChain` while a part of them have higher total difficulty than current + // head full block(new pivot point). + for block != nil && err == ErrKnownBlock { + log.Debug("Writing previously known block", "number", block.Number(), "hash", block.Hash()) + if err := bc.writeKnownBlock(block); err != nil { + return it.index, nil, nil, err + } + lastCanon = block + + block, err = it.next() + } + // Falls through to the block import + } switch { // First block is pruned, insert as sidechain and reorg only if TD grows enough case err == consensus.ErrPrunedAncestor: - return bc.insertSidechain(block, it) + log.Debug("Pruned ancestor, inserting as sidechain", "number", block.Number(), "hash", block.Hash()) + return bc.insertSideChain(block, it) // First block is future, shove it (and all children) to the future queue (unknown ancestor) case err == consensus.ErrFutureBlock || (err == consensus.ErrUnknownAncestor && bc.futureBlocks.Contains(it.first().ParentHash())): for block != nil && (it.index == 0 || err == consensus.ErrUnknownAncestor) { + log.Debug("Future block, postponing import", "number", block.Number(), "hash", block.Hash()) if err := bc.addFutureBlock(block); err != nil { return it.index, events, coalescedLogs, err } @@ -1158,28 +1553,15 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] // If there are any still remaining, mark as ignored return it.index, events, coalescedLogs, err - // First block (and state) is known - // 1. We did a roll-back, and should now do a re-import - // 2. The block is stored as a sidechain, and is lying about it's stateroot, and passes a stateroot - // from the canonical chain, which has not been verified. - case err == ErrKnownBlock: - // Skip all known blocks that behind us - current := bc.CurrentBlock().NumberU64() - - for block != nil && err == ErrKnownBlock && current >= block.NumberU64() { - stats.ignored++ - block, err = it.next() - } - // Falls through to the block import - // Some other error occurred, abort case err != nil: + bc.futureBlocks.Remove(block.Hash()) stats.ignored += len(it.chain) bc.reportBlock(block, nil, err) return it.index, events, coalescedLogs, err } // No validation errors for the first block (or chain prefix skipped) - for ; block != nil && err == nil; block, err = it.next() { + for ; block != nil && err == nil || err == ErrKnownBlock; block, err = it.next() { // If the chain is terminating, stop processing blocks if atomic.LoadInt32(&bc.procInterrupt) == 1 { log.Debug("Premature abort during blocks processing") @@ -1190,43 +1572,111 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] bc.reportBlock(block, nil, ErrBlacklistedHash) return it.index, events, coalescedLogs, ErrBlacklistedHash } + // If the block is known (in the middle of the chain), it's a special case for + // Clique blocks where they can share state among each other, so importing an + // older block might complete the state of the subsequent one. In this case, + // just skip the block (we already validated it once fully (and crashed), since + // its header and body was already in the database). + if err == ErrKnownBlock { + logger := log.Debug + if bc.chainConfig.Clique == nil { + logger = log.Warn + } + logger("Inserted known block", "number", block.Number(), "hash", block.Hash(), + "uncles", len(block.Uncles()), "txs", len(block.Transactions()), "gas", block.GasUsed(), + "root", block.Root()) + + if err := bc.writeKnownBlock(block); err != nil { + return it.index, nil, nil, err + } + stats.processed++ + + // We can assume that logs are empty here, since the only way for consecutive + // Clique blocks to have the same state is if there are no transactions. + events = append(events, ChainEvent{block, block.Hash(), nil}) + lastCanon = block + + continue + } // Retrieve the parent block and it's state to execute on top start := time.Now() parent := it.previous() if parent == nil { - parent = bc.GetBlock(block.ParentHash(), block.NumberU64()-1) + parent = bc.GetHeader(block.ParentHash(), block.NumberU64()-1) } - state, err := state.New(parent.Root(), bc.stateCache) + statedb, err := state.New(parent.Root, bc.stateCache) if err != nil { return it.index, events, coalescedLogs, err } - // Process block using the parent state as reference point. - t0 := time.Now() - receipts, logs, usedGas, fees, err := bc.processor.Process(block, state, bc.vmConfig) - t1 := time.Now() + // If we have a followup block, run that against the current state to pre-cache + // transactions and probabilistically some of the account/storage trie nodes. + var followupInterrupt uint32 + + if !bc.cacheConfig.TrieCleanNoPrefetch { + if followup, err := it.peek(); followup != nil && err == nil { + go func(start time.Time) { + throwaway, _ := state.New(parent.Root, bc.stateCache) + bc.prefetcher.Prefetch(followup, throwaway, bc.vmConfig, &followupInterrupt) + + blockPrefetchExecuteTimer.Update(time.Since(start)) + if atomic.LoadUint32(&followupInterrupt) == 1 { + blockPrefetchInterruptMeter.Mark(1) + } + }(time.Now()) + } + } + // Process block using the parent state as reference point + substart := time.Now() + receipts, logs, usedGas, fees, err := bc.processor.Process(block, statedb, bc.vmConfig) if err != nil { bc.reportBlock(block, receipts, err) + atomic.StoreUint32(&followupInterrupt, 1) return it.index, events, coalescedLogs, err } + // Update the metrics touched during block processing + accountReadTimer.Update(statedb.AccountReads) // Account reads are complete, we can mark them + storageReadTimer.Update(statedb.StorageReads) // Storage reads are complete, we can mark them + accountUpdateTimer.Update(statedb.AccountUpdates) // Account updates are complete, we can mark them + storageUpdateTimer.Update(statedb.StorageUpdates) // Storage updates are complete, we can mark them + + triehash := statedb.AccountHashes + statedb.StorageHashes // Save to not double count in validation + trieproc := statedb.AccountReads + statedb.AccountUpdates + trieproc += statedb.StorageReads + statedb.StorageUpdates + + blockExecutionTimer.Update(time.Since(substart) - trieproc - triehash) + // Validate the state using the default validator - if err := bc.Validator().ValidateState(block, parent, state, receipts, usedGas, fees); err != nil { + substart = time.Now() + if err := bc.validator.ValidateState(block, statedb, receipts, usedGas, fees); err != nil { bc.reportBlock(block, receipts, err) + atomic.StoreUint32(&followupInterrupt, 1) return it.index, events, coalescedLogs, err } - t2 := time.Now() proctime := time.Since(start) + // Update the metrics touched during block validation + accountHashTimer.Update(statedb.AccountHashes) // Account hashes are complete, we can mark them + storageHashTimer.Update(statedb.StorageHashes) // Storage hashes are complete, we can mark them + + blockValidationTimer.Update(time.Since(substart) - (statedb.AccountHashes + statedb.StorageHashes - triehash)) + // Write the block to the chain and get the status. - status, err := bc.WriteBlockWithState(block, receipts, state) - t3 := time.Now() + substart = time.Now() + status, err := bc.writeBlockWithState(block, receipts, statedb) if err != nil { + atomic.StoreUint32(&followupInterrupt, 1) return it.index, events, coalescedLogs, err } + atomic.StoreUint32(&followupInterrupt, 1) + + // Update the metrics touched during block commit + accountCommitTimer.Update(statedb.AccountCommits) // Account commits are complete, we can mark them + storageCommitTimer.Update(statedb.StorageCommits) // Storage commits are complete, we can mark them + + blockWriteTimer.Update(time.Since(substart) - statedb.AccountCommits - statedb.StorageCommits) blockInsertTimer.UpdateSince(start) - blockExecutionTimer.Update(t1.Sub(t0)) - blockValidationTimer.Update(t2.Sub(t1)) - blockWriteTimer.Update(t3.Sub(t2)) + switch status { case CanonStatTy: log.Debug("Inserted new block", "number", block.Number(), "hash", block.Hash(), @@ -1247,13 +1697,20 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] "txs", len(block.Transactions()), "gas", block.GasUsed(), "uncles", len(block.Uncles()), "root", block.Root()) events = append(events, ChainSideEvent{block}) + + default: + // This in theory is impossible, but lets be nice to our future selves and leave + // a log, instead of trying to track down blocks imports that don't emit logs. + log.Warn("Inserted block with unknown status", "number", block.Number(), "hash", block.Hash(), + "diff", block.Difficulty(), "elapsed", common.PrettyDuration(time.Since(start)), + "txs", len(block.Transactions()), "gas", block.GasUsed(), "uncles", len(block.Uncles()), + "root", block.Root()) } - blockInsertTimer.UpdateSince(start) stats.processed++ stats.usedGas += usedGas - cache, _ := bc.stateCache.TrieDB().Size() - stats.report(chain, it.index, cache) + dirty, _ := bc.stateCache.TrieDB().Size() + stats.report(chain, it.index, dirty) } // Any blocks remaining here? The only ones we care about are the future ones if block != nil && err == consensus.ErrFutureBlock { @@ -1278,16 +1735,16 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals bool) (int, [] return it.index, events, coalescedLogs, err } -// insertSidechain is called when an import batch hits upon a pruned ancestor +// insertSideChain is called when an import batch hits upon a pruned ancestor // error, which happens when a sidechain with a sufficiently old fork-block is // found. // // The method writes all (header-and-body-valid) blocks to disk, then tries to // switch over to the new chain if the TD exceeded the current chain. -func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (int, []interface{}, []*types.Log, error) { +func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator) (int, []interface{}, []*types.Log, error) { var ( externTd *big.Int - current = bc.CurrentBlock().NumberU64() + current = bc.CurrentBlock() ) // The first sidechain block error is already verified to be ErrPrunedAncestor. // Since we don't import them here, we expect ErrUnknownAncestor for the remaining @@ -1296,8 +1753,18 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i err := consensus.ErrPrunedAncestor for ; block != nil && (err == consensus.ErrPrunedAncestor); block, err = it.next() { // Check the canonical state root for that number - if number := block.NumberU64(); current >= number { - if canonical := bc.GetBlockByNumber(number); canonical != nil && canonical.Root() == block.Root() { + if number := block.NumberU64(); current.NumberU64() >= number { + canonical := bc.GetBlockByNumber(number) + if canonical != nil && canonical.Hash() == block.Hash() { + // Not a sidechain block, this is a re-import of a canon block which has it's state pruned + + // Collect the TD of the block. Since we know it's a canon one, + // we can get it directly, and not (like further below) use + // the parent and then add the block on top + externTd = bc.GetTd(block.Hash(), block.NumberU64()) + continue + } + if canonical != nil && canonical.Root() == block.Root() { // This is most likely a shadow-state attack. When a fork is imported into the // database, and it eventually reaches a block height which is not pruned, we // just found that the state already exist! This means that the sidechain block @@ -1320,7 +1787,7 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i if !bc.HasBlock(block.Hash(), block.NumberU64()) { start := time.Now() - if err := bc.WriteBlockWithoutState(block, externTd); err != nil { + if err := bc.writeBlockWithoutState(block, externTd); err != nil { return it.index, nil, nil, err } log.Debug("Injected sidechain block", "number", block.Number(), "hash", block.Hash(), @@ -1335,9 +1802,9 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i // // If the externTd was larger than our local TD, we now need to reimport the previous // blocks to regenerate the required state - localTd := bc.GetTd(bc.CurrentBlock().Hash(), current) + localTd := bc.GetTd(current.Hash(), current.NumberU64()) if localTd.Cmp(externTd) > 0 { - log.Info("Sidechain written to disk", "start", it.first().NumberU64(), "end", it.previous().NumberU64(), "sidetd", externTd, "localtd", localTd) + log.Info("Sidechain written to disk", "start", it.first().NumberU64(), "end", it.previous().Number, "sidetd", externTd, "localtd", localTd) return it.index, nil, nil, err } // Gather all the sidechain hashes (full blocks may be memory heavy) @@ -1345,7 +1812,7 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i hashes []common.Hash numbers []uint64 ) - parent := bc.GetHeader(it.previous().Hash(), it.previous().NumberU64()) + parent := it.previous() for parent != nil && !bc.HasState(parent.Root) { hashes = append(hashes, parent.Hash()) numbers = append(numbers, parent.Number.Uint64()) @@ -1391,118 +1858,152 @@ func (bc *BlockChain) insertSidechain(block *types.Block, it *insertIterator) (i return 0, nil, nil, nil } -// reorgs takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them -// to be part of the new canonical chain and accumulates potential missing transactions and post an -// event about them +// reorg takes two blocks, an old chain and a new chain and will reconstruct the +// blocks and inserts them to be part of the new canonical chain and accumulates +// potential missing transactions and post an event about them. func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error { var ( newChain types.Blocks oldChain types.Blocks commonBlock *types.Block - deletedTxs types.Transactions + + deletedTxs types.Transactions + addedTxs types.Transactions + deletedLogs []*types.Log + rebirthLogs []*types.Log + // collectLogs collects the logs that were generated during the // processing of the block that corresponds with the given hash. - // These logs are later announced as deleted. - collectLogs = func(hash common.Hash) { - // Coalesce logs and set 'Removed'. + // These logs are later announced as deleted or reborn + collectLogs = func(hash common.Hash, removed bool) { number := bc.hc.GetBlockNumber(hash) if number == nil { return } - receipts := rawdb.ReadReceipts(bc.db, hash, *number) + receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig) for _, receipt := range receipts { for _, log := range receipt.Logs { - del := *log - del.Removed = true - deletedLogs = append(deletedLogs, &del) + l := *log + if removed { + l.Removed = true + deletedLogs = append(deletedLogs, &l) + } else { + rebirthLogs = append(rebirthLogs, &l) + } } } } ) - - // first reduce whoever is higher bound + // Reduce the longer chain to the same number as the shorter one if oldBlock.NumberU64() > newBlock.NumberU64() { - // reduce old chain + // Old chain is longer, gather all transactions and logs as deleted ones for ; oldBlock != nil && oldBlock.NumberU64() != newBlock.NumberU64(); oldBlock = bc.GetBlock(oldBlock.ParentHash(), oldBlock.NumberU64()-1) { oldChain = append(oldChain, oldBlock) deletedTxs = append(deletedTxs, oldBlock.Transactions()...) - - collectLogs(oldBlock.Hash()) + collectLogs(oldBlock.Hash(), true) } } else { - // reduce new chain and append new chain blocks for inserting later on + // New chain is longer, stash all blocks away for subsequent insertion for ; newBlock != nil && newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = bc.GetBlock(newBlock.ParentHash(), newBlock.NumberU64()-1) { newChain = append(newChain, newBlock) } } if oldBlock == nil { - return fmt.Errorf("Invalid old chain") + return fmt.Errorf("invalid old chain") } if newBlock == nil { - return fmt.Errorf("Invalid new chain") + return fmt.Errorf("invalid new chain") } - + // Both sides of the reorg are at the same number, reduce both until the common + // ancestor is found for { + // If the common ancestor was found, bail out if oldBlock.Hash() == newBlock.Hash() { commonBlock = oldBlock break } - + // Remove an old block as well as stash away a new block oldChain = append(oldChain, oldBlock) - newChain = append(newChain, newBlock) deletedTxs = append(deletedTxs, oldBlock.Transactions()...) - collectLogs(oldBlock.Hash()) + collectLogs(oldBlock.Hash(), true) + + newChain = append(newChain, newBlock) - oldBlock, newBlock = bc.GetBlock(oldBlock.ParentHash(), oldBlock.NumberU64()-1), bc.GetBlock(newBlock.ParentHash(), newBlock.NumberU64()-1) + // Step back with both chains + oldBlock = bc.GetBlock(oldBlock.ParentHash(), oldBlock.NumberU64()-1) if oldBlock == nil { - return fmt.Errorf("Invalid old chain") + return fmt.Errorf("invalid old chain") } + newBlock = bc.GetBlock(newBlock.ParentHash(), newBlock.NumberU64()-1) if newBlock == nil { - return fmt.Errorf("Invalid new chain") + return fmt.Errorf("invalid new chain") } } // Ensure the user sees large reorgs if len(oldChain) > 0 && len(newChain) > 0 { - logFn := log.Debug + logFn := log.Info + msg := "Chain reorg detected" if len(oldChain) > 63 { + msg = "Large chain reorg detected" logFn = log.Warn } - logFn("Chain split detected", "number", commonBlock.Number(), "hash", commonBlock.Hash(), + logFn(msg, "number", commonBlock.Number(), "hash", commonBlock.Hash(), "drop", len(oldChain), "dropfrom", oldChain[0].Hash(), "add", len(newChain), "addfrom", newChain[0].Hash()) + blockReorgAddMeter.Mark(int64(len(newChain))) + blockReorgDropMeter.Mark(int64(len(oldChain))) } else { log.Error("Impossible reorg, please file an issue", "oldnum", oldBlock.Number(), "oldhash", oldBlock.Hash(), "newnum", newBlock.Number(), "newhash", newBlock.Hash()) } - // Insert the new chain, taking care of the proper incremental order - var addedTxs types.Transactions - for i := len(newChain) - 1; i >= 0; i-- { - // insert the block in the canonical way, re-writing history + // Insert the new chain(except the head block(reverse order)), + // taking care of the proper incremental order. + for i := len(newChain) - 1; i >= 1; i-- { + // Insert the block in the canonical way, re-writing history bc.insert(newChain[i]) - // write lookup entries for hash based transaction/receipt searches + + // Collect reborn logs due to chain reorg + collectLogs(newChain[i].Hash(), false) + + // Write lookup entries for hash based transaction/receipt searches rawdb.WriteTxLookupEntries(bc.db, newChain[i]) addedTxs = append(addedTxs, newChain[i].Transactions()...) } - // calculate the difference between deleted and added transactions - diff := types.TxDifference(deletedTxs, addedTxs) - // When transactions get deleted from the database that means the - // receipts that were created in the fork must also be deleted + // When transactions get deleted from the database, the receipts that were + // created in the fork must also be deleted batch := bc.db.NewBatch() - for _, tx := range diff { + for _, tx := range types.TxDifference(deletedTxs, addedTxs) { rawdb.DeleteTxLookupEntry(batch, tx.Hash()) } - batch.Write() - - if len(deletedLogs) > 0 { - go bc.rmLogsFeed.Send(RemovedLogsEvent{deletedLogs}) + // Delete any canonical number assignments above the new head + number := bc.CurrentBlock().NumberU64() + for i := number + 1; ; i++ { + hash := rawdb.ReadCanonicalHash(bc.db, i) + if hash == (common.Hash{}) { + break + } + rawdb.DeleteCanonicalHash(batch, i) } - if len(oldChain) > 0 { - go func() { + batch.Write() + // If any logs need to be fired, do it now. In theory we could avoid creating + // this goroutine if there are no events to fire, but realistcally that only + // ever happens if we're reorging empty blocks, which will only happen on idle + // networks where performance is not an issue either way. + // + // TODO(karalabe): Can we get rid of the goroutine somehow to guarantee correct + // event ordering? + go func() { + if len(deletedLogs) > 0 { + bc.rmLogsFeed.Send(RemovedLogsEvent{deletedLogs}) + } + if len(rebirthLogs) > 0 { + bc.logsFeed.Send(rebirthLogs) + } + if len(oldChain) > 0 { for _, block := range oldChain { bc.chainSideFeed.Send(ChainSideEvent{Block: block}) } - }() - } - + } + }() return nil } @@ -1603,36 +2104,12 @@ func (bc *BlockChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (i defer bc.wg.Done() whFunc := func(header *types.Header) error { - bc.mu.Lock() - defer bc.mu.Unlock() - _, err := bc.hc.WriteHeader(header) return err } - return bc.hc.InsertHeaderChain(chain, whFunc, start) } -// writeHeader writes a header into the local chain, given that its parent is -// already known. If the total difficulty of the newly inserted header becomes -// greater than the current known TD, the canonical chain is re-routed. -// -// Note: This method is not concurrent-safe with inserting blocks simultaneously -// into the chain, as side effects caused by reorganisations cannot be emulated -// without the real blocks. Hence, writing headers directly should only be done -// in two scenarios: pure-header mode of operation (light clients), or properly -// separated header/block phases (non-archive clients). -func (bc *BlockChain) writeHeader(header *types.Header) error { - bc.wg.Add(1) - defer bc.wg.Done() - - bc.mu.Lock() - defer bc.mu.Unlock() - - _, err := bc.hc.WriteHeader(header) - return err -} - // CurrentHeader retrieves the current head header of the canonical chain. The // header is retrieved from the HeaderChain's internal cache. func (bc *BlockChain) CurrentHeader() *types.Header { @@ -1669,6 +2146,11 @@ func (bc *BlockChain) HasHeader(hash common.Hash, number uint64) bool { return bc.hc.HasHeader(hash, number) } +// GetCanonicalHash returns the canonical hash for a given block number +func (bc *BlockChain) GetCanonicalHash(number uint64) common.Hash { + return bc.hc.GetCanonicalHash(number) +} + // GetBlockHashesFromHash retrieves a number of block hashes starting at a given // hash, fetching towards the genesis block. func (bc *BlockChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { @@ -1681,9 +2163,6 @@ func (bc *BlockChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []com // // Note: ancestor == 0 returns the same block, 1 returns its parent and so on. func (bc *BlockChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - bc.chainmu.Lock() - defer bc.chainmu.Unlock() - return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) } @@ -1693,7 +2172,23 @@ func (bc *BlockChain) GetHeaderByNumber(number uint64) *types.Header { return bc.hc.GetHeaderByNumber(number) } -// Config retrieves the blockchain's chain configuration. +// GetTransactionLookup retrieves the lookup associate with the given transaction +// hash from the cache or database. +func (bc *BlockChain) GetTransactionLookup(hash common.Hash) *rawdb.LegacyTxLookupEntry { + // Short circuit if the txlookup already in the cache, retrieve otherwise + if lookup, exist := bc.txLookupCache.Get(hash); exist { + return lookup.(*rawdb.LegacyTxLookupEntry) + } + tx, blockHash, blockNumber, txIndex := rawdb.ReadTransaction(bc.db, hash) + if tx == nil { + return nil + } + lookup := &rawdb.LegacyTxLookupEntry{BlockHash: blockHash, BlockIndex: blockNumber, Index: txIndex} + bc.txLookupCache.Add(hash, lookup) + return lookup +} + +// Config retrieves the chain's fork configuration. func (bc *BlockChain) Config() *params.ChainConfig { return bc.chainConfig } // Engine retrieves the blockchain's consensus engine. @@ -1723,3 +2218,9 @@ func (bc *BlockChain) SubscribeChainSideEvent(ch chan<- ChainSideEvent) event.Su func (bc *BlockChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { return bc.scope.Track(bc.logsFeed.Subscribe(ch)) } + +// SubscribeBlockProcessingEvent registers a subscription of bool where true means +// block processing has started while false means it has stopped. +func (bc *BlockChain) SubscribeBlockProcessingEvent(ch chan<- bool) event.Subscription { + return bc.scope.Track(bc.blockProcFeed.Subscribe(ch)) +} diff --git a/core/blockchain_insert.go b/core/blockchain_insert.go index cfa32c5aab14..5685b0a4bdd9 100644 --- a/core/blockchain_insert.go +++ b/core/blockchain_insert.go @@ -39,7 +39,7 @@ const statsReportLimit = 8 * time.Second // report prints statistics if some number of blocks have been processed // or more than a few seconds have passed since the last message. -func (st *insertStats) report(chain []*types.Block, index int, cache common.StorageSize) { +func (st *insertStats) report(chain []*types.Block, index int, dirty common.StorageSize) { // Fetch the timings for the batch var ( now = mclock.Now() @@ -60,10 +60,10 @@ func (st *insertStats) report(chain []*types.Block, index int, cache common.Stor "elapsed", common.PrettyDuration(elapsed), "mgasps", float64(st.usedGas) * 1000 / float64(elapsed), "number", end.Number(), "hash", end.Hash(), } - if timestamp := time.Unix(end.Time().Int64(), 0); time.Since(timestamp) > time.Minute { + if timestamp := time.Unix(int64(end.Time()), 0); time.Since(timestamp) > time.Minute { context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) } - context = append(context, []interface{}{"cache", cache}...) + context = append(context, []interface{}{"dirty", dirty}...) if st.queued > 0 { context = append(context, []interface{}{"queued", st.queued}...) @@ -80,10 +80,13 @@ func (st *insertStats) report(chain []*types.Block, index int, cache common.Stor // insertIterator is a helper to assist during chain import. type insertIterator struct { - chain types.Blocks - results <-chan error - index int - validator Validator + chain types.Blocks // Chain of blocks being iterated over + + results <-chan error // Verification result sink from the consensus engine + errors []error // Header verification errors for the blocks + + index int // Current offset of the iterator + validator Validator // Validator to run if verification succeeds } // newInsertIterator creates a new iterator based on the given blocks, which are @@ -92,6 +95,7 @@ func newInsertIterator(chain types.Blocks, results <-chan error, validator Valid return &insertIterator{ chain: chain, results: results, + errors: make([]error, 0, len(chain)), index: -1, validator: validator, } @@ -100,23 +104,50 @@ func newInsertIterator(chain types.Blocks, results <-chan error, validator Valid // next returns the next block in the iterator, along with any potential validation // error for that block. When the end is reached, it will return (nil, nil). func (it *insertIterator) next() (*types.Block, error) { + // If we reached the end of the chain, abort if it.index+1 >= len(it.chain) { it.index = len(it.chain) return nil, nil } + // Advance the iterator and wait for verification result if not yet done it.index++ - if err := <-it.results; err != nil { - return it.chain[it.index], err + if len(it.errors) <= it.index { + it.errors = append(it.errors, <-it.results) + } + if it.errors[it.index] != nil { + return it.chain[it.index], it.errors[it.index] } + // Block header valid, run body validation and return return it.chain[it.index], it.validator.ValidateBody(it.chain[it.index]) } -// previous returns the previous block was being processed, or nil -func (it *insertIterator) previous() *types.Block { +// peek returns the next block in the iterator, along with any potential validation +// error for that block, but does **not** advance the iterator. +// +// Both header and body validation errors (nil too) is cached into the iterator +// to avoid duplicating work on the following next() call. +func (it *insertIterator) peek() (*types.Block, error) { + // If we reached the end of the chain, abort + if it.index+1 >= len(it.chain) { + return nil, nil + } + // Wait for verification result if not yet done + if len(it.errors) <= it.index+1 { + it.errors = append(it.errors, <-it.results) + } + if it.errors[it.index+1] != nil { + return it.chain[it.index+1], it.errors[it.index+1] + } + // Block header valid, ignore body validation since we don't have a parent anyway + return it.chain[it.index+1], nil +} + +// previous returns the previous header that was being processed, or nil. +func (it *insertIterator) previous() *types.Header { if it.index < 1 { return nil } - return it.chain[it.index-1] + return it.chain[it.index-1].Header() } // first returns the first block in the it. diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 504ad0eaf74e..a0fa50678382 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -18,8 +18,10 @@ package core import ( "fmt" + "io/ioutil" "math/big" "math/rand" + "os" "sync" "testing" "time" @@ -47,7 +49,7 @@ var ( // header only chain. func newCanonical(engine consensus.Engine, n int, full bool) (ethdb.Database, *BlockChain, error) { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() genesis = new(Genesis).MustCommit(db) ) @@ -126,13 +128,6 @@ func testFork(t *testing.T, blockchain *BlockChain, i, n int, full bool, compara comparator(tdPre, tdPost) } -func printChain(bc *BlockChain) { - for i := bc.CurrentBlock().Number().Uint64(); i > 0; i-- { - b := bc.GetBlockByNumber(uint64(i)) - fmt.Printf("\t%x %v\n", b.Hash(), b.Difficulty()) - } -} - // testBlockChainImport tries to process a chain of blocks, writing them into // the database if successful. func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { @@ -152,21 +147,21 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { if err != nil { return err } - receipts, _, usedGas, err := blockchain.Processor().Process(block, statedb, vm.Config{}) + receipts, _, usedGas, err := blockchain.processor.Process(block, statedb, vm.Config{}) if err != nil { blockchain.reportBlock(block, receipts, err) return err } - err = blockchain.validator.ValidateState(block, blockchain.GetBlockByHash(block.ParentHash()), statedb, receipts, usedGas) + err = blockchain.validator.ValidateState(block, statedb, receipts, usedGas) if err != nil { blockchain.reportBlock(block, receipts, err) return err } - blockchain.mu.Lock() + blockchain.chainmu.Lock() rawdb.WriteTd(blockchain.db, block.Hash(), block.NumberU64(), new(big.Int).Add(block.Difficulty(), blockchain.GetTdByHash(block.ParentHash()))) rawdb.WriteBlock(blockchain.db, block) statedb.Commit(false) - blockchain.mu.Unlock() + blockchain.chainmu.Unlock() } return nil } @@ -180,23 +175,14 @@ func testHeaderChainImport(chain []*types.Header, blockchain *BlockChain) error return err } // Manually insert the header into the database, but don't reorganise (allows subsequent testing) - blockchain.mu.Lock() + blockchain.chainmu.Lock() rawdb.WriteTd(blockchain.db, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, blockchain.GetTdByHash(header.ParentHash))) rawdb.WriteHeader(blockchain.db, header) - blockchain.mu.Unlock() + blockchain.chainmu.Unlock() } return nil } -func insertChain(done chan bool, blockchain *BlockChain, chain types.Blocks, t *testing.T) { - _, err := blockchain.InsertChain(chain) - if err != nil { - fmt.Println(err) - t.FailNow() - } - done <- true -} - func TestLastBlock(t *testing.T) { _, blockchain, err := newCanonical(ethash.NewFaker(), 0, true) if err != nil { @@ -603,7 +589,7 @@ func testInsertNonceError(t *testing.T, full bool) { func TestFastVsFullChains(t *testing.T) { // Configure and generate a sample block chain var ( - gendb = ethdb.NewMemDatabase() + gendb = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -633,7 +619,7 @@ func TestFastVsFullChains(t *testing.T) { } }) // Import the chain as an archive node for the comparison baseline - archiveDb := ethdb.NewMemDatabase() + archiveDb := rawdb.NewMemoryDatabase() gspec.MustCommit(archiveDb) archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer archive.Stop() @@ -642,7 +628,7 @@ func TestFastVsFullChains(t *testing.T) { t.Fatalf("failed to process block %d: %v", n, err) } // Fast import the chain as a non-archive node to test - fastDb := ethdb.NewMemDatabase() + fastDb := rawdb.NewMemoryDatabase() gspec.MustCommit(fastDb) fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer fast.Stop() @@ -654,7 +640,27 @@ func TestFastVsFullChains(t *testing.T) { if n, err := fast.InsertHeaderChain(headers, 1); err != nil { t.Fatalf("failed to insert header %d: %v", n, err) } - if n, err := fast.InsertReceiptChain(blocks, receipts); err != nil { + if n, err := fast.InsertReceiptChain(blocks, receipts, 0); err != nil { + t.Fatalf("failed to insert receipt %d: %v", n, err) + } + // Freezer style fast import the chain. + frdir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp freezer dir: %v", err) + } + defer os.Remove(frdir) + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "") + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(ancientDb) + ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer ancient.Stop() + + if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(len(blocks)/2)); err != nil { t.Fatalf("failed to insert receipt %d: %v", n, err) } // Iterate over all chain data components, and cross reference @@ -662,26 +668,35 @@ func TestFastVsFullChains(t *testing.T) { num, hash := blocks[i].NumberU64(), blocks[i].Hash() if ftd, atd := fast.GetTdByHash(hash), archive.GetTdByHash(hash); ftd.Cmp(atd) != 0 { - t.Errorf("block #%d [%x]: td mismatch: have %v, want %v", num, hash, ftd, atd) + t.Errorf("block #%d [%x]: td mismatch: fastdb %v, archivedb %v", num, hash, ftd, atd) + } + if antd, artd := ancient.GetTdByHash(hash), archive.GetTdByHash(hash); antd.Cmp(artd) != 0 { + t.Errorf("block #%d [%x]: td mismatch: ancientdb %v, archivedb %v", num, hash, antd, artd) } if fheader, aheader := fast.GetHeaderByHash(hash), archive.GetHeaderByHash(hash); fheader.Hash() != aheader.Hash() { - t.Errorf("block #%d [%x]: header mismatch: have %v, want %v", num, hash, fheader, aheader) + t.Errorf("block #%d [%x]: header mismatch: fastdb %v, archivedb %v", num, hash, fheader, aheader) } - if fblock, ablock := fast.GetBlockByHash(hash), archive.GetBlockByHash(hash); fblock.Hash() != ablock.Hash() { - t.Errorf("block #%d [%x]: block mismatch: have %v, want %v", num, hash, fblock, ablock) - } else if types.DeriveSha(fblock.Transactions()) != types.DeriveSha(ablock.Transactions()) { - t.Errorf("block #%d [%x]: transactions mismatch: have %v, want %v", num, hash, fblock.Transactions(), ablock.Transactions()) - } else if types.CalcUncleHash(fblock.Uncles()) != types.CalcUncleHash(ablock.Uncles()) { - t.Errorf("block #%d [%x]: uncles mismatch: have %v, want %v", num, hash, fblock.Uncles(), ablock.Uncles()) + if anheader, arheader := ancient.GetHeaderByHash(hash), archive.GetHeaderByHash(hash); anheader.Hash() != arheader.Hash() { + t.Errorf("block #%d [%x]: header mismatch: ancientdb %v, archivedb %v", num, hash, anheader, arheader) } - if freceipts, areceipts := rawdb.ReadReceipts(fastDb, hash, *rawdb.ReadHeaderNumber(fastDb, hash)), rawdb.ReadReceipts(archiveDb, hash, *rawdb.ReadHeaderNumber(archiveDb, hash)); types.DeriveSha(freceipts) != types.DeriveSha(areceipts) { - t.Errorf("block #%d [%x]: receipts mismatch: have %v, want %v", num, hash, freceipts, areceipts) + if fblock, arblock, anblock := fast.GetBlockByHash(hash), archive.GetBlockByHash(hash), ancient.GetBlockByHash(hash); fblock.Hash() != arblock.Hash() || anblock.Hash() != arblock.Hash() { + t.Errorf("block #%d [%x]: block mismatch: fastdb %v, ancientdb %v, archivedb %v", num, hash, fblock, anblock, arblock) + } else if types.DeriveSha(fblock.Transactions()) != types.DeriveSha(arblock.Transactions()) || types.DeriveSha(anblock.Transactions()) != types.DeriveSha(arblock.Transactions()) { + t.Errorf("block #%d [%x]: transactions mismatch: fastdb %v, ancientdb %v, archivedb %v", num, hash, fblock.Transactions(), anblock.Transactions(), arblock.Transactions()) + } else if types.CalcUncleHash(fblock.Uncles()) != types.CalcUncleHash(arblock.Uncles()) || types.CalcUncleHash(anblock.Uncles()) != types.CalcUncleHash(arblock.Uncles()) { + t.Errorf("block #%d [%x]: uncles mismatch: fastdb %v, ancientdb %v, archivedb %v", num, hash, fblock.Uncles(), anblock, arblock.Uncles()) + } + if freceipts, anreceipts, areceipts := rawdb.ReadReceipts(fastDb, hash, *rawdb.ReadHeaderNumber(fastDb, hash), fast.Config()), rawdb.ReadReceipts(ancientDb, hash, *rawdb.ReadHeaderNumber(ancientDb, hash), fast.Config()), rawdb.ReadReceipts(archiveDb, hash, *rawdb.ReadHeaderNumber(archiveDb, hash), fast.Config()); types.DeriveSha(freceipts) != types.DeriveSha(areceipts) { + t.Errorf("block #%d [%x]: receipts mismatch: fastdb %v, ancientdb %v, archivedb %v", num, hash, freceipts, anreceipts, areceipts) } } // Check that the canonical chains are the same between the databases for i := 0; i < len(blocks)+1; i++ { if fhash, ahash := rawdb.ReadCanonicalHash(fastDb, uint64(i)), rawdb.ReadCanonicalHash(archiveDb, uint64(i)); fhash != ahash { - t.Errorf("block #%d: canonical hash mismatch: have %v, want %v", i, fhash, ahash) + t.Errorf("block #%d: canonical hash mismatch: fastdb %v, archivedb %v", i, fhash, ahash) + } + if anhash, arhash := rawdb.ReadCanonicalHash(ancientDb, uint64(i)), rawdb.ReadCanonicalHash(archiveDb, uint64(i)); anhash != arhash { + t.Errorf("block #%d: canonical hash mismatch: ancientdb %v, archivedb %v", i, anhash, arhash) } } } @@ -691,7 +706,7 @@ func TestFastVsFullChains(t *testing.T) { func TestLightVsFastVsFullChainHeads(t *testing.T) { // Configure and generate a sample block chain var ( - gendb = ethdb.NewMemDatabase() + gendb = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -701,6 +716,20 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { height := uint64(1024) blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), nil) + // makeDb creates a db instance for testing. + makeDb := func() (ethdb.Database, func()) { + dir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp freezer dir: %v", err) + } + defer os.Remove(dir) + db, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), dir, "") + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(db) + return db, func() { os.RemoveAll(dir) } + } // Configure a subchain to roll back remove := []common.Hash{} for _, block := range blocks[height/2:] { @@ -719,9 +748,8 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { } } // Import the chain as an archive node and ensure all pointers are updated - archiveDb := ethdb.NewMemDatabase() - gspec.MustCommit(archiveDb) - + archiveDb, delfn := makeDb() + defer delfn() archive, _ := NewBlockChain(archiveDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) if n, err := archive.InsertChain(blocks); err != nil { t.Fatalf("failed to process block %d: %v", n, err) @@ -733,8 +761,8 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { assert(t, "archive", archive, height/2, height/2, height/2) // Import the chain as a non-archive node and ensure all pointers are updated - fastDb := ethdb.NewMemDatabase() - gspec.MustCommit(fastDb) + fastDb, delfn := makeDb() + defer delfn() fast, _ := NewBlockChain(fastDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) defer fast.Stop() @@ -745,17 +773,35 @@ func TestLightVsFastVsFullChainHeads(t *testing.T) { if n, err := fast.InsertHeaderChain(headers, 1); err != nil { t.Fatalf("failed to insert header %d: %v", n, err) } - if n, err := fast.InsertReceiptChain(blocks, receipts); err != nil { + if n, err := fast.InsertReceiptChain(blocks, receipts, 0); err != nil { t.Fatalf("failed to insert receipt %d: %v", n, err) } assert(t, "fast", fast, height, height, 0) fast.Rollback(remove) assert(t, "fast", fast, height/2, height/2, 0) - // Import the chain as a light node and ensure all pointers are updated - lightDb := ethdb.NewMemDatabase() - gspec.MustCommit(lightDb) + // Import the chain as a ancient-first node and ensure all pointers are updated + ancientDb, delfn := makeDb() + defer delfn() + ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer ancient.Stop() + if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(3*len(blocks)/4)); err != nil { + t.Fatalf("failed to insert receipt %d: %v", n, err) + } + assert(t, "ancient", ancient, height, height, 0) + ancient.Rollback(remove) + assert(t, "ancient", ancient, height/2, height/2, 0) + if frozen, err := ancientDb.Ancients(); err != nil || frozen != height/2+1 { + t.Fatalf("failed to truncate ancient store, want %v, have %v", height/2+1, frozen) + } + + // Import the chain as a light node and ensure all pointers are updated + lightDb, delfn := makeDb() + defer delfn() light, _ := NewBlockChain(lightDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) if n, err := light.InsertHeaderChain(headers, 1); err != nil { t.Fatalf("failed to insert header %d: %v", n, err) @@ -776,7 +822,7 @@ func TestChainTxReorgs(t *testing.T) { addr1 = crypto.PubkeyToAddress(key1.PublicKey) addr2 = crypto.PubkeyToAddress(key2.PublicKey) addr3 = crypto.PubkeyToAddress(key3.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = &Genesis{ Config: params.TestChainConfig, GasLimit: 3141592, @@ -859,7 +905,7 @@ func TestChainTxReorgs(t *testing.T) { if txn, _, _, _ := rawdb.ReadTransaction(db, tx.Hash()); txn != nil { t.Errorf("drop %d: tx %v found while shouldn't have been", i, txn) } - if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash()); rcpt != nil { + if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash(), blockchain.Config()); rcpt != nil { t.Errorf("drop %d: receipt %v found while shouldn't have been", i, rcpt) } } @@ -868,7 +914,7 @@ func TestChainTxReorgs(t *testing.T) { if txn, _, _, _ := rawdb.ReadTransaction(db, tx.Hash()); txn == nil { t.Errorf("add %d: expected tx to be found", i) } - if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash()); rcpt == nil { + if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash(), blockchain.Config()); rcpt == nil { t.Errorf("add %d: expected receipt to be found", i) } } @@ -877,18 +923,17 @@ func TestChainTxReorgs(t *testing.T) { if txn, _, _, _ := rawdb.ReadTransaction(db, tx.Hash()); txn == nil { t.Errorf("share %d: expected tx to be found", i) } - if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash()); rcpt == nil { + if rcpt, _, _, _ := rawdb.ReadReceipt(db, tx.Hash(), blockchain.Config()); rcpt == nil { t.Errorf("share %d: expected receipt to be found", i) } } } func TestLogReorgs(t *testing.T) { - var ( key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") addr1 = crypto.PubkeyToAddress(key1.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() // this code generates a log code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} @@ -930,9 +975,216 @@ func TestLogReorgs(t *testing.T) { } } +func TestLogRebirth(t *testing.T) { + var ( + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + db = rawdb.NewMemoryDatabase() + + // this code generates a log + code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} + genesis = gspec.MustCommit(db) + signer = types.NewEIP155Signer(gspec.Config.ChainID) + newLogCh = make(chan bool) + ) + + // listenNewLog checks whether the received logs number is equal with expected. + listenNewLog := func(sink chan []*types.Log, expect int) { + cnt := 0 + for { + select { + case logs := <-sink: + cnt += len(logs) + case <-time.NewTimer(5 * time.Second).C: + // new logs timeout + newLogCh <- false + return + } + if cnt == expect { + break + } else if cnt > expect { + // redundant logs received + newLogCh <- false + return + } + } + select { + case <-sink: + // redundant logs received + newLogCh <- false + case <-time.NewTimer(100 * time.Millisecond).C: + newLogCh <- true + } + } + + blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer blockchain.Stop() + + logsCh := make(chan []*types.Log) + blockchain.SubscribeLogsEvent(logsCh) + + rmLogsCh := make(chan RemovedLogsEvent) + blockchain.SubscribeRemovedLogsEvent(rmLogsCh) + + chain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + if i == 1 { + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, new(big.Int), code), signer, key1) + if err != nil { + t.Fatalf("failed to create tx: %v", err) + } + gen.AddTx(tx) + } + }) + + // Spawn a goroutine to receive log events + go listenNewLog(logsCh, 1) + if _, err := blockchain.InsertChain(chain); err != nil { + t.Fatalf("failed to insert chain: %v", err) + } + if !<-newLogCh { + t.Fatalf("failed to receive new log event") + } + + // Generate long reorg chain + forkChain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + if i == 1 { + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, new(big.Int), code), signer, key1) + if err != nil { + t.Fatalf("failed to create tx: %v", err) + } + gen.AddTx(tx) + // Higher block difficulty + gen.OffsetTime(-9) + } + }) + + // Spawn a goroutine to receive log events + go listenNewLog(logsCh, 1) + if _, err := blockchain.InsertChain(forkChain); err != nil { + t.Fatalf("failed to insert forked chain: %v", err) + } + if !<-newLogCh { + t.Fatalf("failed to receive new log event") + } + // Ensure removedLog events received + select { + case ev := <-rmLogsCh: + if len(ev.Logs) == 0 { + t.Error("expected logs") + } + case <-time.NewTimer(1 * time.Second).C: + t.Fatal("Timeout. There is no RemovedLogsEvent has been sent.") + } + + newBlocks, _ := GenerateChain(params.TestChainConfig, chain[len(chain)-1], ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) + go listenNewLog(logsCh, 1) + if _, err := blockchain.InsertChain(newBlocks); err != nil { + t.Fatalf("failed to insert forked chain: %v", err) + } + // Ensure removedLog events received + select { + case ev := <-rmLogsCh: + if len(ev.Logs) == 0 { + t.Error("expected logs") + } + case <-time.NewTimer(1 * time.Second).C: + t.Fatal("Timeout. There is no RemovedLogsEvent has been sent.") + } + // Rebirth logs should omit a newLogEvent + if !<-newLogCh { + t.Fatalf("failed to receive new log event") + } +} + +func TestSideLogRebirth(t *testing.T) { + var ( + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + db = rawdb.NewMemoryDatabase() + + // this code generates a log + code = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405180905060405180910390a15b600a8060416000396000f360606040526008565b00") + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{addr1: {Balance: big.NewInt(10000000000000)}}} + genesis = gspec.MustCommit(db) + signer = types.NewEIP155Signer(gspec.Config.ChainID) + newLogCh = make(chan bool) + ) + + // listenNewLog checks whether the received logs number is equal with expected. + listenNewLog := func(sink chan []*types.Log, expect int) { + cnt := 0 + for { + select { + case logs := <-sink: + cnt += len(logs) + case <-time.NewTimer(5 * time.Second).C: + // new logs timeout + newLogCh <- false + return + } + if cnt == expect { + break + } else if cnt > expect { + // redundant logs received + newLogCh <- false + return + } + } + select { + case <-sink: + // redundant logs received + newLogCh <- false + case <-time.NewTimer(100 * time.Millisecond).C: + newLogCh <- true + } + } + + blockchain, _ := NewBlockChain(db, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer blockchain.Stop() + + logsCh := make(chan []*types.Log) + blockchain.SubscribeLogsEvent(logsCh) + + chain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + if i == 1 { + // Higher block difficulty + gen.OffsetTime(-9) + } + }) + if _, err := blockchain.InsertChain(chain); err != nil { + t.Fatalf("failed to insert forked chain: %v", err) + } + + // Generate side chain with lower difficulty + sideChain, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, 2, func(i int, gen *BlockGen) { + if i == 1 { + tx, err := types.SignTx(types.NewContractCreation(gen.TxNonce(addr1), new(big.Int), 1000000, new(big.Int), code), signer, key1) + if err != nil { + t.Fatalf("failed to create tx: %v", err) + } + gen.AddTx(tx) + } + }) + if _, err := blockchain.InsertChain(sideChain); err != nil { + t.Fatalf("failed to insert forked chain: %v", err) + } + + // Generate a new block based on side chain + newBlocks, _ := GenerateChain(params.TestChainConfig, sideChain[len(sideChain)-1], ethash.NewFaker(), db, 1, func(i int, gen *BlockGen) {}) + go listenNewLog(logsCh, 1) + if _, err := blockchain.InsertChain(newBlocks); err != nil { + t.Fatalf("failed to insert forked chain: %v", err) + } + // Rebirth logs should omit a newLogEvent + if !<-newLogCh { + t.Fatalf("failed to receive new log event") + } +} + func TestReorgSideEvent(t *testing.T) { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") addr1 = crypto.PubkeyToAddress(key1.PublicKey) gspec = &Genesis{ @@ -1060,7 +1312,7 @@ func TestCanonicalBlockRetrieval(t *testing.T) { func TestEIP155Transition(t *testing.T) { // Configure and generate a sample block chain var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -1163,7 +1415,7 @@ func TestEIP155Transition(t *testing.T) { func TestEIP161AccountRemoval(t *testing.T) { // Configure and generate a sample block chain var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") address = crypto.PubkeyToAddress(key.PublicKey) funds = big.NewInt(1000000000) @@ -1235,7 +1487,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) @@ -1251,7 +1503,7 @@ func TestBlockchainHeaderchainReorgConsistency(t *testing.T) { } // Import the canonical and fork chain side by side, verifying the current block // and current header consistency - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1280,9 +1532,9 @@ func TestTrieForkGC(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) - blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*triesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*TriesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) // Generate a bunch of fork blocks, each side forking from the canonical chain forks := make([]*types.Block, len(blocks)) @@ -1295,7 +1547,7 @@ func TestTrieForkGC(t *testing.T) { forks[i] = fork[0] } // Import the canonical and fork chain side by side, forcing the trie cache to cache both - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1311,7 +1563,7 @@ func TestTrieForkGC(t *testing.T) { } } // Dereference all the recent tries and ensure no past trie is left in - for i := 0; i < triesInMemory; i++ { + for i := 0; i < TriesInMemory; i++ { chain.stateCache.TrieDB().Dereference(blocks[len(blocks)-1-i].Root()) chain.stateCache.TrieDB().Dereference(forks[len(blocks)-1-i].Root()) } @@ -1326,15 +1578,15 @@ func TestLargeReorgTrieGC(t *testing.T) { // Generate the original common chain segment and the two competing forks engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) shared, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 64, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) - original, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*triesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{2}) }) - competitor, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*triesInMemory+1, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{3}) }) + original, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*TriesInMemory, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{2}) }) + competitor, _ := GenerateChain(params.TestChainConfig, shared[len(shared)-1], engine, db, 2*TriesInMemory+1, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{3}) }) // Import the shared chain and the original canonical one - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1366,13 +1618,521 @@ func TestLargeReorgTrieGC(t *testing.T) { if _, err := chain.InsertChain(competitor[len(competitor)-2:]); err != nil { t.Fatalf("failed to finalize competitor chain: %v", err) } - for i, block := range competitor[:len(competitor)-triesInMemory] { + for i, block := range competitor[:len(competitor)-TriesInMemory] { if node, _ := chain.stateCache.TrieDB().Node(block.Root()); node != nil { t.Fatalf("competitor %d: competing chain state missing", i) } } } +func TestBlockchainRecovery(t *testing.T) { + // Configure and generate a sample block chain + var ( + gendb = rawdb.NewMemoryDatabase() + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + funds = big.NewInt(1000000000) + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{address: {Balance: funds}}} + genesis = gspec.MustCommit(gendb) + ) + height := uint64(1024) + blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), nil) + + // Import the chain as a ancient-first node and ensure all pointers are updated + frdir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp freezer dir: %v", err) + } + defer os.Remove(frdir) + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "") + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(ancientDb) + ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + + headers := make([]*types.Header, len(blocks)) + for i, block := range blocks { + headers[i] = block.Header() + } + if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(3*len(blocks)/4)); err != nil { + t.Fatalf("failed to insert receipt %d: %v", n, err) + } + ancient.Stop() + + // Destroy head fast block manually + midBlock := blocks[len(blocks)/2] + rawdb.WriteHeadFastBlockHash(ancientDb, midBlock.Hash()) + + // Reopen broken blockchain again + ancient, _ = NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer ancient.Stop() + if num := ancient.CurrentBlock().NumberU64(); num != 0 { + t.Errorf("head block mismatch: have #%v, want #%v", num, 0) + } + if num := ancient.CurrentFastBlock().NumberU64(); num != midBlock.NumberU64() { + t.Errorf("head fast-block mismatch: have #%v, want #%v", num, midBlock.NumberU64()) + } + if num := ancient.CurrentHeader().Number.Uint64(); num != midBlock.NumberU64() { + t.Errorf("head header mismatch: have #%v, want #%v", num, midBlock.NumberU64()) + } +} + +func TestIncompleteAncientReceiptChainInsertion(t *testing.T) { + // Configure and generate a sample block chain + var ( + gendb = rawdb.NewMemoryDatabase() + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + funds = big.NewInt(1000000000) + gspec = &Genesis{Config: params.TestChainConfig, Alloc: GenesisAlloc{address: {Balance: funds}}} + genesis = gspec.MustCommit(gendb) + ) + height := uint64(1024) + blocks, receipts := GenerateChain(gspec.Config, genesis, ethash.NewFaker(), gendb, int(height), nil) + + // Import the chain as a ancient-first node and ensure all pointers are updated + frdir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp freezer dir: %v", err) + } + defer os.Remove(frdir) + ancientDb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), frdir, "") + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + gspec.MustCommit(ancientDb) + ancient, _ := NewBlockChain(ancientDb, nil, gspec.Config, ethash.NewFaker(), vm.Config{}, nil) + defer ancient.Stop() + + headers := make([]*types.Header, len(blocks)) + for i, block := range blocks { + headers[i] = block.Header() + } + if n, err := ancient.InsertHeaderChain(headers, 1); err != nil { + t.Fatalf("failed to insert header %d: %v", n, err) + } + // Abort ancient receipt chain insertion deliberately + ancient.terminateInsert = func(hash common.Hash, number uint64) bool { + return number == blocks[len(blocks)/2].NumberU64() + } + previousFastBlock := ancient.CurrentFastBlock() + if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(3*len(blocks)/4)); err == nil { + t.Fatalf("failed to insert receipt %d: %v", n, err) + } + if ancient.CurrentFastBlock().NumberU64() != previousFastBlock.NumberU64() { + t.Fatalf("failed to rollback ancient data, want %d, have %d", previousFastBlock.NumberU64(), ancient.CurrentFastBlock().NumberU64()) + } + if frozen, err := ancient.db.Ancients(); err != nil || frozen != 1 { + t.Fatalf("failed to truncate ancient data") + } + ancient.terminateInsert = nil + if n, err := ancient.InsertReceiptChain(blocks, receipts, uint64(3*len(blocks)/4)); err != nil { + t.Fatalf("failed to insert receipt %d: %v", n, err) + } + if ancient.CurrentFastBlock().NumberU64() != blocks[len(blocks)-1].NumberU64() { + t.Fatalf("failed to insert ancient recept chain after rollback") + } +} + +// Tests that importing a very large side fork, which is larger than the canon chain, +// but where the difficulty per block is kept low: this means that it will not +// overtake the 'canon' chain until after it's passed canon by about 200 blocks. +// +// Details at: +// - https://github.com/ethereum/go-ethereum/issues/18977 +// - https://github.com/ethereum/go-ethereum/pull/18988 +func TestLowDiffLongChain(t *testing.T) { + // Generate a canonical chain to act as the main dataset + engine := ethash.NewFaker() + db := rawdb.NewMemoryDatabase() + genesis := new(Genesis).MustCommit(db) + + // We must use a pretty long chain to ensure that the fork doesn't overtake us + // until after at least 128 blocks post tip + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 6*TriesInMemory, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + b.OffsetTime(-9) + }) + + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + new(Genesis).MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + if n, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + // Generate fork chain, starting from an early block + parent := blocks[10] + fork, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 8*TriesInMemory, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{2}) + }) + + // And now import the fork + if i, err := chain.InsertChain(fork); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", i, err) + } + head := chain.CurrentBlock() + if got := fork[len(fork)-1].Hash(); got != head.Hash() { + t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + } + // Sanity check that all the canonical numbers are present + header := chain.CurrentHeader() + for number := head.NumberU64(); number > 0; number-- { + if hash := chain.GetHeaderByNumber(number).Hash(); hash != header.Hash() { + t.Fatalf("header %d: canonical hash mismatch: have %x, want %x", number, hash, header.Hash()) + } + header = chain.GetHeader(header.ParentHash, number-1) + } +} + +// Tests that importing a sidechain (S), where +// - S is sidechain, containing blocks [Sn...Sm] +// - C is canon chain, containing blocks [G..Cn..Cm] +// - A common ancestor is placed at prune-point + blocksBetweenCommonAncestorAndPruneblock +// - The sidechain S is prepended with numCanonBlocksInSidechain blocks from the canon chain +func testSideImport(t *testing.T, numCanonBlocksInSidechain, blocksBetweenCommonAncestorAndPruneblock int) { + + // Generate a canonical chain to act as the main dataset + engine := ethash.NewFaker() + db := rawdb.NewMemoryDatabase() + genesis := new(Genesis).MustCommit(db) + + // Generate and import the canonical chain + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*TriesInMemory, nil) + diskdb := rawdb.NewMemoryDatabase() + new(Genesis).MustCommit(diskdb) + chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + if n, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + + lastPrunedIndex := len(blocks) - TriesInMemory - 1 + lastPrunedBlock := blocks[lastPrunedIndex] + firstNonPrunedBlock := blocks[len(blocks)-TriesInMemory] + + // Verify pruning of lastPrunedBlock + if chain.HasBlockAndState(lastPrunedBlock.Hash(), lastPrunedBlock.NumberU64()) { + t.Errorf("Block %d not pruned", lastPrunedBlock.NumberU64()) + } + // Verify firstNonPrunedBlock is not pruned + if !chain.HasBlockAndState(firstNonPrunedBlock.Hash(), firstNonPrunedBlock.NumberU64()) { + t.Errorf("Block %d pruned", firstNonPrunedBlock.NumberU64()) + } + // Generate the sidechain + // First block should be a known block, block after should be a pruned block. So + // canon(pruned), side, side... + + // Generate fork chain, make it longer than canon + parentIndex := lastPrunedIndex + blocksBetweenCommonAncestorAndPruneblock + parent := blocks[parentIndex] + fork, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 2*TriesInMemory, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{2}) + }) + // Prepend the parent(s) + var sidechain []*types.Block + for i := numCanonBlocksInSidechain; i > 0; i-- { + sidechain = append(sidechain, blocks[parentIndex+1-i]) + } + sidechain = append(sidechain, fork...) + _, err = chain.InsertChain(sidechain) + if err != nil { + t.Errorf("Got error, %v", err) + } + head := chain.CurrentBlock() + if got := fork[len(fork)-1].Hash(); got != head.Hash() { + t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + } +} + +// Tests that importing a sidechain (S), where +// - S is sidechain, containing blocks [Sn...Sm] +// - C is canon chain, containing blocks [G..Cn..Cm] +// - The common ancestor Cc is pruned +// - The first block in S: Sn, is == Cn +// That is: the sidechain for import contains some blocks already present in canon chain. +// So the blocks are +// [ Cn, Cn+1, Cc, Sn+3 ... Sm] +// ^ ^ ^ pruned +func TestPrunedImportSide(t *testing.T) { + //glogger := log.NewGlogHandler(log.StreamHandler(os.Stdout, log.TerminalFormat(false))) + //glogger.Verbosity(3) + //log.Root().SetHandler(log.Handler(glogger)) + testSideImport(t, 3, 3) + testSideImport(t, 3, -3) + testSideImport(t, 10, 0) + testSideImport(t, 1, 10) + testSideImport(t, 1, -10) +} + +func TestInsertKnownHeaders(t *testing.T) { testInsertKnownChainData(t, "headers") } +func TestInsertKnownReceiptChain(t *testing.T) { testInsertKnownChainData(t, "receipts") } +func TestInsertKnownBlocks(t *testing.T) { testInsertKnownChainData(t, "blocks") } + +func testInsertKnownChainData(t *testing.T, typ string) { + engine := ethash.NewFaker() + + db := rawdb.NewMemoryDatabase() + genesis := new(Genesis).MustCommit(db) + + blocks, receipts := GenerateChain(params.TestChainConfig, genesis, engine, db, 32, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) + // A longer chain but total difficulty is lower. + blocks2, receipts2 := GenerateChain(params.TestChainConfig, blocks[len(blocks)-1], engine, db, 65, func(i int, b *BlockGen) { b.SetCoinbase(common.Address{1}) }) + // A shorter chain but total difficulty is higher. + blocks3, receipts3 := GenerateChain(params.TestChainConfig, blocks[len(blocks)-1], engine, db, 64, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + b.OffsetTime(-9) // A higher difficulty + }) + // Import the shared chain and the original canonical one + dir, err := ioutil.TempDir("", "") + if err != nil { + t.Fatalf("failed to create temp freezer dir: %v", err) + } + defer os.Remove(dir) + chaindb, err := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), dir, "") + if err != nil { + t.Fatalf("failed to create temp freezer db: %v", err) + } + new(Genesis).MustCommit(chaindb) + defer os.RemoveAll(dir) + + chain, err := NewBlockChain(chaindb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + + var ( + inserter func(blocks []*types.Block, receipts []types.Receipts) error + asserter func(t *testing.T, block *types.Block) + ) + headers, headers2 := make([]*types.Header, 0, len(blocks)), make([]*types.Header, 0, len(blocks2)) + for _, block := range blocks { + headers = append(headers, block.Header()) + } + for _, block := range blocks2 { + headers2 = append(headers2, block.Header()) + } + if typ == "headers" { + inserter = func(blocks []*types.Block, receipts []types.Receipts) error { + headers := make([]*types.Header, 0, len(blocks)) + for _, block := range blocks { + headers = append(headers, block.Header()) + } + _, err := chain.InsertHeaderChain(headers, 1) + return err + } + asserter = func(t *testing.T, block *types.Block) { + if chain.CurrentHeader().Hash() != block.Hash() { + t.Fatalf("current head header mismatch, have %v, want %v", chain.CurrentHeader().Hash().Hex(), block.Hash().Hex()) + } + } + } else if typ == "receipts" { + inserter = func(blocks []*types.Block, receipts []types.Receipts) error { + headers := make([]*types.Header, 0, len(blocks)) + for _, block := range blocks { + headers = append(headers, block.Header()) + } + _, err := chain.InsertHeaderChain(headers, 1) + if err != nil { + return err + } + _, err = chain.InsertReceiptChain(blocks, receipts, 0) + return err + } + asserter = func(t *testing.T, block *types.Block) { + if chain.CurrentFastBlock().Hash() != block.Hash() { + t.Fatalf("current head fast block mismatch, have %v, want %v", chain.CurrentFastBlock().Hash().Hex(), block.Hash().Hex()) + } + } + } else { + inserter = func(blocks []*types.Block, receipts []types.Receipts) error { + _, err := chain.InsertChain(blocks) + return err + } + asserter = func(t *testing.T, block *types.Block) { + if chain.CurrentBlock().Hash() != block.Hash() { + t.Fatalf("current head block mismatch, have %v, want %v", chain.CurrentBlock().Hash().Hex(), block.Hash().Hex()) + } + } + } + + if err := inserter(blocks, receipts); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + + // Reimport the chain data again. All the imported + // chain data are regarded "known" data. + if err := inserter(blocks, receipts); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + asserter(t, blocks[len(blocks)-1]) + + // Import a long canonical chain with some known data as prefix. + var rollback []common.Hash + for i := len(blocks) / 2; i < len(blocks); i++ { + rollback = append(rollback, blocks[i].Hash()) + } + chain.Rollback(rollback) + if err := inserter(append(blocks, blocks2...), append(receipts, receipts2...)); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + asserter(t, blocks2[len(blocks2)-1]) + + // Import a heavier shorter but higher total difficulty chain with some known data as prefix. + if err := inserter(append(blocks, blocks3...), append(receipts, receipts3...)); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + asserter(t, blocks3[len(blocks3)-1]) + + // Import a longer but lower total difficulty chain with some known data as prefix. + if err := inserter(append(blocks, blocks2...), append(receipts, receipts2...)); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + // The head shouldn't change. + asserter(t, blocks3[len(blocks3)-1]) + + // Rollback the heavier chain and re-insert the longer chain again + for i := 0; i < len(blocks3); i++ { + rollback = append(rollback, blocks3[i].Hash()) + } + chain.Rollback(rollback) + + if err := inserter(append(blocks, blocks2...), append(receipts, receipts2...)); err != nil { + t.Fatalf("failed to insert chain data: %v", err) + } + asserter(t, blocks2[len(blocks2)-1]) +} + +// getLongAndShortChains returns two chains, +// A is longer, B is heavier +func getLongAndShortChains() (*BlockChain, []*types.Block, []*types.Block, error) { + // Generate a canonical chain to act as the main dataset + engine := ethash.NewFaker() + db := rawdb.NewMemoryDatabase() + genesis := new(Genesis).MustCommit(db) + + // Generate and import the canonical chain, + // Offset the time, to keep the difficulty low + longChain, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 80, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + }) + diskdb := rawdb.NewMemoryDatabase() + new(Genesis).MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + return nil, nil, nil, fmt.Errorf("failed to create tester chain: %v", err) + } + + // Generate fork chain, make it shorter than canon, with common ancestor pretty early + parentIndex := 3 + parent := longChain[parentIndex] + heavyChain, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 75, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{2}) + b.OffsetTime(-9) + }) + // Verify that the test is sane + var ( + longerTd = new(big.Int) + shorterTd = new(big.Int) + ) + for index, b := range longChain { + longerTd.Add(longerTd, b.Difficulty()) + if index <= parentIndex { + shorterTd.Add(shorterTd, b.Difficulty()) + } + } + for _, b := range heavyChain { + shorterTd.Add(shorterTd, b.Difficulty()) + } + if shorterTd.Cmp(longerTd) <= 0 { + return nil, nil, nil, fmt.Errorf("Test is moot, heavyChain td (%v) must be larger than canon td (%v)", shorterTd, longerTd) + } + longerNum := longChain[len(longChain)-1].NumberU64() + shorterNum := heavyChain[len(heavyChain)-1].NumberU64() + if shorterNum >= longerNum { + return nil, nil, nil, fmt.Errorf("Test is moot, heavyChain num (%v) must be lower than canon num (%v)", shorterNum, longerNum) + } + return chain, longChain, heavyChain, nil +} + +// TestReorgToShorterRemovesCanonMapping tests that if we +// 1. Have a chain [0 ... N .. X] +// 2. Reorg to shorter but heavier chain [0 ... N ... Y] +// 3. Then there should be no canon mapping for the block at height X +func TestReorgToShorterRemovesCanonMapping(t *testing.T) { + chain, canonblocks, sideblocks, err := getLongAndShortChains() + if err != nil { + t.Fatal(err) + } + if n, err := chain.InsertChain(canonblocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) + } + canonNum := chain.CurrentBlock().NumberU64() + _, err = chain.InsertChain(sideblocks) + if err != nil { + t.Errorf("Got error, %v", err) + } + head := chain.CurrentBlock() + if got := sideblocks[len(sideblocks)-1].Hash(); got != head.Hash() { + t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + } + // We have now inserted a sidechain. + if blockByNum := chain.GetBlockByNumber(canonNum); blockByNum != nil { + t.Errorf("expected block to be gone: %v", blockByNum.NumberU64()) + } + if headerByNum := chain.GetHeaderByNumber(canonNum); headerByNum != nil { + t.Errorf("expected header to be gone: %v", headerByNum.Number.Uint64()) + } +} + +// TestReorgToShorterRemovesCanonMappingHeaderChain is the same scenario +// as TestReorgToShorterRemovesCanonMapping, but applied on headerchain +// imports -- that is, for fast sync +func TestReorgToShorterRemovesCanonMappingHeaderChain(t *testing.T) { + chain, canonblocks, sideblocks, err := getLongAndShortChains() + if err != nil { + t.Fatal(err) + } + // Convert into headers + canonHeaders := make([]*types.Header, len(canonblocks)) + for i, block := range canonblocks { + canonHeaders[i] = block.Header() + } + if n, err := chain.InsertHeaderChain(canonHeaders, 0); err != nil { + t.Fatalf("header %d: failed to insert into chain: %v", n, err) + } + canonNum := chain.CurrentHeader().Number.Uint64() + sideHeaders := make([]*types.Header, len(sideblocks)) + for i, block := range sideblocks { + sideHeaders[i] = block.Header() + } + if n, err := chain.InsertHeaderChain(sideHeaders, 0); err != nil { + t.Fatalf("header %d: failed to insert into chain: %v", n, err) + } + head := chain.CurrentHeader() + if got := sideblocks[len(sideblocks)-1].Hash(); got != head.Hash() { + t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + } + // We have now inserted a sidechain. + if blockByNum := chain.GetBlockByNumber(canonNum); blockByNum != nil { + t.Errorf("expected block to be gone: %v", blockByNum.NumberU64()) + } + if headerByNum := chain.GetHeaderByNumber(canonNum); headerByNum != nil { + t.Errorf("expected header to be gone: %v", headerByNum.Number.Uint64()) + } +} + // Benchmarks large blocks with value transfers to non-existing accounts func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks int, recipientFn func(uint64) common.Address, dataFn func(uint64) []byte) { var ( @@ -1394,7 +2154,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in ) // Generate the original common chain segment and the two competing forks engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := gspec.MustCommit(db) blockGenerator := func(i int, block *BlockGen) { @@ -1402,7 +2162,6 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in for txi := 0; txi < numTxs; txi++ { uniq := uint64(i*numTxs + txi) recipient := recipientFn(uniq) - //recipient := common.BigToAddress(big.NewInt(0).SetUint64(1337 + uniq)) tx, err := types.SignTx(types.NewTransaction(uniq, recipient, big.NewInt(1), params.TxGas, big.NewInt(1), nil), signer, testBankKey) if err != nil { b.Error(err) @@ -1416,7 +2175,7 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in b.ResetTimer() for i := 0; i < b.N; i++ { // Import the shared chain and the original canonical one - diskdb := ethdb.NewMemDatabase() + diskdb := rawdb.NewMemoryDatabase() gspec.MustCommit(diskdb) chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) @@ -1429,26 +2188,26 @@ func benchmarkLargeNumberOfValueToNonexisting(b *testing.B, numTxs, numBlocks in } b.StopTimer() if got := chain.CurrentBlock().Transactions().Len(); got != numTxs*numBlocks { - b.Fatalf("Transactions were not included, expected %d, got %d", (numTxs * numBlocks), got) + b.Fatalf("Transactions were not included, expected %d, got %d", numTxs*numBlocks, got) } } } + func BenchmarkBlockChain_1x1000ValueTransferToNonexisting(b *testing.B) { var ( numTxs = 1000 numBlocks = 1 ) - recipientFn := func(nonce uint64) common.Address { return common.BigToAddress(big.NewInt(0).SetUint64(1337 + nonce)) } dataFn := func(nonce uint64) []byte { return nil } - benchmarkLargeNumberOfValueToNonexisting(b, numTxs, numBlocks, recipientFn, dataFn) } + func BenchmarkBlockChain_1x1000ValueTransferToExisting(b *testing.B) { var ( numTxs = 1000 @@ -1463,9 +2222,9 @@ func BenchmarkBlockChain_1x1000ValueTransferToExisting(b *testing.B) { dataFn := func(nonce uint64) []byte { return nil } - benchmarkLargeNumberOfValueToNonexisting(b, numTxs, numBlocks, recipientFn, dataFn) } + func BenchmarkBlockChain_1x1000Executions(b *testing.B) { var ( numTxs = 1000 @@ -1480,34 +2239,27 @@ func BenchmarkBlockChain_1x1000Executions(b *testing.B) { dataFn := func(nonce uint64) []byte { return nil } - benchmarkLargeNumberOfValueToNonexisting(b, numTxs, numBlocks, recipientFn, dataFn) } -// Tests that importing a very large side fork, which is larger than the canon chain, -// but where the difficulty per block is kept low: this means that it will not -// overtake the 'canon' chain until after it's passed canon by about 200 blocks. -// -// Details at: -// - https://github.com/ethereum/go-ethereum/issues/18977 -// - https://github.com/ethereum/go-ethereum/pull/18988 -func TestLowDiffLongChain(t *testing.T) { +// Tests that importing a some old blocks, where all blocks are before the +// pruning point. +// This internally leads to a sidechain import, since the blocks trigger an +// ErrPrunedAncestor error. +// This may e.g. happen if +// 1. Downloader rollbacks a batch of inserted blocks and exits +// 2. Downloader starts to sync again +// 3. The blocks fetched are all known and canonical blocks +func TestSideImportPrunedBlocks(t *testing.T) { // Generate a canonical chain to act as the main dataset engine := ethash.NewFaker() - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() genesis := new(Genesis).MustCommit(db) - // We must use a pretty long chain to ensure that the fork doesn't overtake us - // until after at least 128 blocks post tip - blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 6*triesInMemory, func(i int, b *BlockGen) { - b.SetCoinbase(common.Address{1}) - b.OffsetTime(-9) - }) - - // Import the canonical chain - diskdb := ethdb.NewMemDatabase() + // Generate and import the canonical chain + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 2*TriesInMemory, nil) + diskdb := rawdb.NewMemoryDatabase() new(Genesis).MustCommit(diskdb) - chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) @@ -1515,26 +2267,98 @@ func TestLowDiffLongChain(t *testing.T) { if n, err := chain.InsertChain(blocks); err != nil { t.Fatalf("block %d: failed to insert into chain: %v", n, err) } - // Generate fork chain, starting from an early block - parent := blocks[10] - fork, _ := GenerateChain(params.TestChainConfig, parent, engine, db, 8*triesInMemory, func(i int, b *BlockGen) { - b.SetCoinbase(common.Address{2}) - }) - // And now import the fork - if i, err := chain.InsertChain(fork); err != nil { - t.Fatalf("block %d: failed to insert into chain: %v", i, err) + lastPrunedIndex := len(blocks) - TriesInMemory - 1 + lastPrunedBlock := blocks[lastPrunedIndex] + + // Verify pruning of lastPrunedBlock + if chain.HasBlockAndState(lastPrunedBlock.Hash(), lastPrunedBlock.NumberU64()) { + t.Errorf("Block %d not pruned", lastPrunedBlock.NumberU64()) } - head := chain.CurrentBlock() - if got := fork[len(fork)-1].Hash(); got != head.Hash() { - t.Fatalf("head wrong, expected %x got %x", head.Hash(), got) + firstNonPrunedBlock := blocks[len(blocks)-TriesInMemory] + // Verify firstNonPrunedBlock is not pruned + if !chain.HasBlockAndState(firstNonPrunedBlock.Hash(), firstNonPrunedBlock.NumberU64()) { + t.Errorf("Block %d pruned", firstNonPrunedBlock.NumberU64()) } - // Sanity check that all the canonical numbers are present - header := chain.CurrentHeader() - for number := head.NumberU64(); number > 0; number-- { - if hash := chain.GetHeaderByNumber(number).Hash(); hash != header.Hash() { - t.Fatalf("header %d: canonical hash mismatch: have %x, want %x", number, hash, header.Hash()) + // Now re-import some old blocks + blockToReimport := blocks[5:8] + _, err = chain.InsertChain(blockToReimport) + if err != nil { + t.Errorf("Got error, %v", err) + } +} + +// TestDeleteCreateRevert tests a weird state transition corner case that we hit +// while changing the internals of statedb. The workflow is that a contract is +// self destructed, then in a followup transaction (but same block) it's created +// again and the transaction reverted. +// +// The original statedb implementation flushed dirty objects to the tries after +// each transaction, so this works ok. The rework accumulated writes in memory +// first, but the journal wiped the entire state object on create-revert. +func TestDeleteCreateRevert(t *testing.T) { + var ( + aa = common.HexToAddress("0x000000000000000000000000000000000000aaaa") + bb = common.HexToAddress("0x000000000000000000000000000000000000bbbb") + // Generate a canonical chain to act as the main dataset + engine = ethash.NewFaker() + db = rawdb.NewMemoryDatabase() + + // A sender who makes transactions, has some funds + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + funds = big.NewInt(1000000000) + gspec = &Genesis{ + Config: params.TestChainConfig, + Alloc: GenesisAlloc{ + address: {Balance: funds}, + // The address 0xAAAAA selfdestructs if called + aa: { + // Code needs to just selfdestruct + Code: []byte{byte(vm.PC), 0xFF}, + Nonce: 1, + Balance: big.NewInt(0), + }, + // The address 0xBBBB send 1 wei to 0xAAAA, then reverts + bb: { + Code: []byte{ + byte(vm.PC), // [0] + byte(vm.DUP1), // [0,0] + byte(vm.DUP1), // [0,0,0] + byte(vm.DUP1), // [0,0,0,0] + byte(vm.PUSH1), 0x01, // [0,0,0,0,1] (value) + byte(vm.PUSH2), 0xaa, 0xaa, // [0,0,0,0,1, 0xaaaa] + byte(vm.GAS), + byte(vm.CALL), + byte(vm.REVERT), + }, + Balance: big.NewInt(1), + }, + }, } - header = chain.GetHeader(header.ParentHash, number-1) + genesis = gspec.MustCommit(db) + ) + + blocks, _ := GenerateChain(params.TestChainConfig, genesis, engine, db, 1, func(i int, b *BlockGen) { + b.SetCoinbase(common.Address{1}) + // One transaction to AAAA + tx, _ := types.SignTx(types.NewTransaction(0, aa, + big.NewInt(0), 50000, big.NewInt(1), nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + // One transaction to BBBB + tx, _ = types.SignTx(types.NewTransaction(1, bb, + big.NewInt(0), 100000, big.NewInt(1), nil), types.HomesteadSigner{}, key) + b.AddTx(tx) + }) + // Import the canonical chain + diskdb := rawdb.NewMemoryDatabase() + gspec.MustCommit(diskdb) + + chain, err := NewBlockChain(diskdb, nil, params.TestChainConfig, engine, vm.Config{}, nil) + if err != nil { + t.Fatalf("failed to create tester chain: %v", err) + } + if n, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("block %d: failed to insert into chain: %v", n, err) } } diff --git a/core/chain_indexer.go b/core/chain_indexer.go index 1adde1fcb424..c0c2c4f7f945 100644 --- a/core/chain_indexer.go +++ b/core/chain_indexer.go @@ -97,7 +97,7 @@ type ChainIndexer struct { // NewChainIndexer creates a new chain indexer to do background processing on // chain segments of a given size after certain number of confirmations passed. // The throttling parameter might be used to prevent database thrashing. -func NewChainIndexer(chainDb, indexDb ethdb.Database, backend ChainIndexerBackend, section, confirm uint64, throttling time.Duration, kind string) *ChainIndexer { +func NewChainIndexer(chainDb ethdb.Database, indexDb ethdb.Database, backend ChainIndexerBackend, section, confirm uint64, throttling time.Duration, kind string) *ChainIndexer { c := &ChainIndexer{ chainDb: chainDb, indexDb: indexDb, @@ -128,12 +128,13 @@ func (c *ChainIndexer) AddCheckpoint(section uint64, shead common.Hash) { c.lock.Lock() defer c.lock.Unlock() + // Short circuit if the given checkpoint is below than local's. + if c.checkpointSections >= section+1 || section < c.storedSections { + return + } c.checkpointSections = section + 1 c.checkpointHead = shead - if section < c.storedSections { - return - } c.setSectionHead(section, shead) c.setValidSections(section + 1) } @@ -243,7 +244,7 @@ func (c *ChainIndexer) newHead(head uint64, reorg bool) { // If a reorg happened, invalidate all sections until that point if reorg { // Revert the known section number to the reorg point - known := head / c.sectionSize + known := (head + 1) / c.sectionSize stored := known if known < c.checkpointSections { known = 0 @@ -323,6 +324,7 @@ func (c *ChainIndexer) updateLoop() { updated = time.Now() } // Cache the current section count and head to allow unlocking the mutex + c.verifyLastHead() section := c.storedSections var oldHead common.Hash if section > 0 { @@ -342,8 +344,8 @@ func (c *ChainIndexer) updateLoop() { } c.lock.Lock() - // If processing succeeded and no reorgs occcurred, mark the section completed - if err == nil && oldHead == c.SectionHead(section-1) { + // If processing succeeded and no reorgs occurred, mark the section completed + if err == nil && (section == 0 || oldHead == c.SectionHead(section-1)) { c.setSectionHead(section, newHead) c.setValidSections(section + 1) if c.storedSections == c.knownSections && updating { @@ -358,6 +360,7 @@ func (c *ChainIndexer) updateLoop() { } else { // If processing failed, don't retry until further notification c.log.Debug("Chain index processing failed", "section", section, "err", err) + c.verifyLastHead() c.knownSections = c.storedSections } } @@ -411,6 +414,18 @@ func (c *ChainIndexer) processSection(section uint64, lastHead common.Hash) (com return lastHead, nil } +// verifyLastHead compares last stored section head with the corresponding block hash in the +// actual canonical chain and rolls back reorged sections if necessary to ensure that stored +// sections are all valid +func (c *ChainIndexer) verifyLastHead() { + for c.storedSections > 0 && c.storedSections > c.checkpointSections { + if c.SectionHead(c.storedSections-1) == rawdb.ReadCanonicalHash(c.chainDb, c.storedSections*c.sectionSize-1) { + return + } + c.setValidSections(c.storedSections - 1) + } +} + // Sections returns the number of processed sections maintained by the indexer // and also the information about the last header indexed for potential canonical // verifications. @@ -418,6 +433,7 @@ func (c *ChainIndexer) Sections() (uint64, uint64, common.Hash) { c.lock.Lock() defer c.lock.Unlock() + c.verifyLastHead() return c.storedSections, c.storedSections*c.sectionSize - 1, c.SectionHead(c.storedSections - 1) } diff --git a/core/chain_indexer_test.go b/core/chain_indexer_test.go index a029dec62658..abf5b3cc1400 100644 --- a/core/chain_indexer_test.go +++ b/core/chain_indexer_test.go @@ -27,7 +27,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" ) // Runs multiple tests with randomized parameters. @@ -49,7 +48,7 @@ func TestChainIndexerWithChildren(t *testing.T) { // multiple backends. The section size and required confirmation count parameters // are randomized. func testChainIndexer(t *testing.T, count int) { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() defer db.Close() // Create a chain of indexers and ensure they all report empty @@ -60,7 +59,7 @@ func testChainIndexer(t *testing.T, count int) { confirmsReq = uint64(rand.Intn(10)) ) backends[i] = &testChainIndexBackend{t: t, processCh: make(chan uint64)} - backends[i].indexer = NewChainIndexer(db, ethdb.NewTable(db, string([]byte{byte(i)})), backends[i], sectionSize, confirmsReq, 0, fmt.Sprintf("indexer-%d", i)) + backends[i].indexer = NewChainIndexer(db, rawdb.NewTable(db, string([]byte{byte(i)})), backends[i], sectionSize, confirmsReq, 0, fmt.Sprintf("indexer-%d", i)) if sections, _, _ := backends[i].indexer.Sections(); sections != 0 { t.Fatalf("Canonical section count mismatch: have %v, want %v", sections, 0) diff --git a/core/chain_makers.go b/core/chain_makers.go index f8b3169bb91a..c2ef3621dba8 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -71,6 +71,13 @@ func (b *BlockGen) SetNonce(nonce types.BlockNonce) { b.header.Nonce = nonce } +// SetDifficulty sets the difficulty field of the generated block. This method is +// useful for Clique tests where the difficulty does not depend on time. For the +// ethash tests, please use OffsetTime, which implicitly recalculates the diff. +func (b *BlockGen) SetDifficulty(diff *big.Int) { + b.header.Difficulty = diff +} + // AddTx adds a transaction to the generated block. If no coinbase has // been set, the block's coinbase is set to the zero address. // @@ -97,7 +104,7 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { } b.statedb.Prepare(tx.Hash(), common.Hash{}, len(b.txs)) fees := new(big.Int) - receipt, _, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, fees, vm.Config{}) + receipt, err := ApplyTransaction(b.config, bc, &b.header.Coinbase, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed, fees, vm.Config{}) if err != nil { panic(err) } @@ -105,6 +112,15 @@ func (b *BlockGen) AddTxWithChain(bc *BlockChain, tx *types.Transaction) { b.receipts = append(b.receipts, receipt) } +// AddUncheckedTx forcefully adds a transaction to the block without any +// validation. +// +// AddUncheckedTx will cause consensus failures when used during real +// chain processing. This is best used in conjunction with raw block insertion. +func (b *BlockGen) AddUncheckedTx(tx *types.Transaction) { + b.txs = append(b.txs, tx) +} + // Number returns the block number of the block being generated. func (b *BlockGen) Number() *big.Int { return new(big.Int).Set(b.header.Number) @@ -150,12 +166,12 @@ func (b *BlockGen) PrevBlock(index int) *types.Block { // associated difficulty. It's useful to test scenarios where forking is not // tied to chain length directly. func (b *BlockGen) OffsetTime(seconds int64) { - b.header.Time.Add(b.header.Time, big.NewInt(seconds)) - if b.header.Time.Cmp(b.parent.Header().Time) <= 0 { + b.header.Time += uint64(seconds) + if b.header.Time <= b.parent.Header().Time { panic("block time out of range") } chainreader := &fakeChainReader{config: b.config} - b.header.Difficulty = b.engine.CalcDifficulty(chainreader, b.header.Time.Uint64(), b.parent.Header()) + b.header.Difficulty = b.engine.CalcDifficulty(chainreader, b.header.Time, b.parent.Header()) } // GenerateChain creates a chain of n blocks. The first block's @@ -198,7 +214,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse } if b.engine != nil { // Finalize and seal the block - block, _ := b.engine.Finalize(chainreader, b.header, statedb, b.txs, b.uncles, b.receipts) + block, _ := b.engine.FinalizeAndAssemble(chainreader, b.header, statedb, b.txs, b.uncles, b.receipts) // Write state changes to db root, err := statedb.Commit(config.IsEIP158(b.header.Number)) @@ -226,20 +242,20 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse } func makeHeader(chain consensus.ChainReader, parent *types.Block, state *state.StateDB, engine consensus.Engine) *types.Header { - var time *big.Int - if parent.Time() == nil { - time = big.NewInt(10) + var time uint64 + if parent.Time() == 0 { + time = 10 } else { - time = new(big.Int).Add(parent.Time(), big.NewInt(10)) // block time is fixed at 10 seconds + time = parent.Time() + 10 // block time is fixed at 10 seconds } return &types.Header{ Root: state.IntermediateRoot(chain.Config().IsEIP158(parent.Number())), ParentHash: parent.Hash(), Coinbase: parent.Coinbase(), - Difficulty: engine.CalcDifficulty(chain, time.Uint64(), &types.Header{ + Difficulty: engine.CalcDifficulty(chain, time, &types.Header{ Number: parent.Number(), - Time: new(big.Int).Sub(time, big.NewInt(10)), + Time: time - 10, Difficulty: parent.Difficulty(), UncleHash: parent.UncleHash(), }), diff --git a/core/chain_makers_test.go b/core/chain_makers_test.go index 64b64fd6a355..32e3888d55ce 100644 --- a/core/chain_makers_test.go +++ b/core/chain_makers_test.go @@ -21,10 +21,10 @@ import ( "math/big" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -36,7 +36,7 @@ func ExampleGenerateChain() { addr1 = crypto.PubkeyToAddress(key1.PublicKey) addr2 = crypto.PubkeyToAddress(key2.PublicKey) addr3 = crypto.PubkeyToAddress(key3.PublicKey) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() ) // Ensure that key1 has some funds in the genesis block. diff --git a/core/dao_test.go b/core/dao_test.go index 966139bce302..4e8dba9e8488 100644 --- a/core/dao_test.go +++ b/core/dao_test.go @@ -21,8 +21,8 @@ import ( "testing" "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -32,13 +32,13 @@ func TestDAOForkRangeExtradata(t *testing.T) { forkBlock := big.NewInt(32) // Generate a common prefix for both pro-forkers and non-forkers - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := new(Genesis) genesis := gspec.MustCommit(db) prefix, _ := GenerateChain(params.TestChainConfig, genesis, ethash.NewFaker(), db, int(forkBlock.Int64()-1), func(i int, gen *BlockGen) {}) // Create the concurrent, conflicting two nodes - proDb := ethdb.NewMemDatabase() + proDb := rawdb.NewMemoryDatabase() gspec.MustCommit(proDb) proConf := *params.TestChainConfig @@ -48,7 +48,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { proBc, _ := NewBlockChain(proDb, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer proBc.Stop() - conDb := ethdb.NewMemDatabase() + conDb := rawdb.NewMemoryDatabase() gspec.MustCommit(conDb) conConf := *params.TestChainConfig @@ -67,7 +67,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { // Try to expand both pro-fork and non-fork chains iteratively with other camp's blocks for i := int64(0); i < params.DAOForkExtraRange.Int64(); i++ { // Create a pro-fork block, and try to feed into the no-fork chain - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -92,7 +92,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { t.Fatalf("contra-fork chain didn't accepted no-fork block: %v", err) } // Create a no-fork block, and try to feed into the pro-fork chain - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -118,7 +118,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { } } // Verify that contra-forkers accept pro-fork extra-datas after forking finishes - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ := NewBlockChain(db, nil, &conConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() @@ -138,7 +138,7 @@ func TestDAOForkRangeExtradata(t *testing.T) { t.Fatalf("contra-fork chain didn't accept pro-fork block post-fork: %v", err) } // Verify that pro-forkers accept contra-fork extra-datas after forking finishes - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec.MustCommit(db) bc, _ = NewBlockChain(db, nil, &proConf, ethash.NewFaker(), vm.Config{}, nil) defer bc.Stop() diff --git a/core/error.go b/core/error.go index 410eca1e1ea0..cd4be3d705e1 100644 --- a/core/error.go +++ b/core/error.go @@ -32,4 +32,7 @@ var ( // ErrNonceTooHigh is returned if the nonce of a transaction is higher than the // next one expected based on the local chain. ErrNonceTooHigh = errors.New("nonce too high") + + // ErrNoGenesis is returned when there is no Genesis Block. + ErrNoGenesis = errors.New("genesis not found in chain") ) diff --git a/core/evm.go b/core/evm.go index d303c40a4074..b654bbd4796f 100644 --- a/core/evm.go +++ b/core/evm.go @@ -51,7 +51,7 @@ func NewEVMContext(msg Message, header *types.Header, chain ChainContext, author Origin: msg.From(), Coinbase: beneficiary, BlockNumber: new(big.Int).Set(header.Number), - Time: new(big.Int).Set(header.Time), + Time: new(big.Int).SetUint64(header.Time), Difficulty: new(big.Int).Set(header.Difficulty), GasLimit: header.GasLimit, GasPrice: new(big.Int).Set(msg.GasPrice()), diff --git a/core/forkid/forkid.go b/core/forkid/forkid.go new file mode 100644 index 000000000000..8c1700879a5e --- /dev/null +++ b/core/forkid/forkid.go @@ -0,0 +1,236 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package forkid implements EIP-2124 (https://eips.ethereum.org/EIPS/eip-2124). +package forkid + +import ( + "encoding/binary" + "errors" + "hash/crc32" + "math" + "math/big" + "reflect" + "strings" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +var ( + // ErrRemoteStale is returned by the validator if a remote fork checksum is a + // subset of our already applied forks, but the announced next fork block is + // not on our already passed chain. + ErrRemoteStale = errors.New("remote needs update") + + // ErrLocalIncompatibleOrStale is returned by the validator if a remote fork + // checksum does not match any local checksum variation, signalling that the + // two chains have diverged in the past at some point (possibly at genesis). + ErrLocalIncompatibleOrStale = errors.New("local incompatible or needs update") +) + +// ID is a fork identifier as defined by EIP-2124. +type ID struct { + Hash [4]byte // CRC32 checksum of the genesis block and passed fork block numbers + Next uint64 // Block number of the next upcoming fork, or 0 if no forks are known +} + +// NewID calculates the Ethereum fork ID from the chain config and head. +func NewID(chain *core.BlockChain) ID { + return newID( + chain.Config(), + chain.Genesis().Hash(), + chain.CurrentHeader().Number.Uint64(), + ) +} + +// newID is the internal version of NewID, which takes extracted values as its +// arguments instead of a chain. The reason is to allow testing the IDs without +// having to simulate an entire blockchain. +func newID(config *params.ChainConfig, genesis common.Hash, head uint64) ID { + // Calculate the starting checksum from the genesis hash + hash := crc32.ChecksumIEEE(genesis[:]) + + // Calculate the current fork checksum and the next fork block + var next uint64 + for _, fork := range gatherForks(config) { + if fork <= head { + // Fork already passed, checksum the previous hash and the fork number + hash = checksumUpdate(hash, fork) + continue + } + next = fork + break + } + return ID{Hash: checksumToBytes(hash), Next: next} +} + +// NewFilter creates an filter that returns if a fork ID should be rejected or not +// based on the local chain's status. +func NewFilter(chain *core.BlockChain) func(id ID) error { + return newFilter( + chain.Config(), + chain.Genesis().Hash(), + func() uint64 { + return chain.CurrentHeader().Number.Uint64() + }, + ) +} + +// newFilter is the internal version of NewFilter, taking closures as its arguments +// instead of a chain. The reason is to allow testing it without having to simulate +// an entire blockchain. +func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() uint64) func(id ID) error { + // Calculate the all the valid fork hash and fork next combos + var ( + forks = gatherForks(config) + sums = make([][4]byte, len(forks)+1) // 0th is the genesis + ) + hash := crc32.ChecksumIEEE(genesis[:]) + sums[0] = checksumToBytes(hash) + for i, fork := range forks { + hash = checksumUpdate(hash, fork) + sums[i+1] = checksumToBytes(hash) + } + // Add two sentries to simplify the fork checks and don't require special + // casing the last one. + forks = append(forks, math.MaxUint64) // Last fork will never be passed + + // Create a validator that will filter out incompatible chains + return func(id ID) error { + // Run the fork checksum validation ruleset: + // 1. If local and remote FORK_CSUM matches, connect. + // The two nodes are in the same fork state currently. They might know + // of differing future forks, but that's not relevant until the fork + // triggers (might be postponed, nodes might be updated to match). + // 2. If the remote FORK_CSUM is a subset of the local past forks and the + // remote FORK_NEXT matches with the locally following fork block number, + // connect. + // Remote node is currently syncing. It might eventually diverge from + // us, but at this current point in time we don't have enough information. + // 3. If the remote FORK_CSUM is a superset of the local past forks and can + // be completed with locally known future forks, connect. + // Local node is currently syncing. It might eventually diverge from + // the remote, but at this current point in time we don't have enough + // information. + // 4. Reject in all other cases. + head := headfn() + for i, fork := range forks { + // If our head is beyond this fork, continue to the next (we have a dummy + // fork of maxuint64 as the last item to always fail this check eventually). + if head > fork { + continue + } + // Found the first unpassed fork block, check if our current state matches + // the remote checksum (rule #1). + if sums[i] == id.Hash { + // Yay, fork checksum matched, ignore any upcoming fork + return nil + } + // The local and remote nodes are in different forks currently, check if the + // remote checksum is a subset of our local forks (rule #2). + for j := 0; j < i; j++ { + if sums[j] == id.Hash { + // Remote checksum is a subset, validate based on the announced next fork + if forks[j] != id.Next { + return ErrRemoteStale + } + return nil + } + } + // Remote chain is not a subset of our local one, check if it's a superset by + // any chance, signalling that we're simply out of sync (rule #3). + for j := i + 1; j < len(sums); j++ { + if sums[j] == id.Hash { + // Yay, remote checksum is a superset, ignore upcoming forks + return nil + } + } + // No exact, subset or superset match. We are on differing chains, reject. + return ErrLocalIncompatibleOrStale + } + log.Error("Impossible fork ID validation", "id", id) + return nil // Something's very wrong, accept rather than reject + } +} + +// checksum calculates the IEEE CRC32 checksum of a block number. +func checksum(fork uint64) uint32 { + var blob [8]byte + binary.BigEndian.PutUint64(blob[:], fork) + return crc32.ChecksumIEEE(blob[:]) +} + +// checksumUpdate calculates the next IEEE CRC32 checksum based on the previous +// one and a fork block number (equivalent to CRC32(original-blob || fork)). +func checksumUpdate(hash uint32, fork uint64) uint32 { + var blob [8]byte + binary.BigEndian.PutUint64(blob[:], fork) + return crc32.Update(hash, crc32.IEEETable, blob[:]) +} + +// checksumToBytes converts a uint32 checksum into a [4]byte array. +func checksumToBytes(hash uint32) [4]byte { + var blob [4]byte + binary.BigEndian.PutUint32(blob[:], hash) + return blob +} + +// gatherForks gathers all the known forks and creates a sorted list out of them. +func gatherForks(config *params.ChainConfig) []uint64 { + // Gather all the fork block numbers via reflection + kind := reflect.TypeOf(params.ChainConfig{}) + conf := reflect.ValueOf(config).Elem() + + var forks []uint64 + for i := 0; i < kind.NumField(); i++ { + // Fetch the next field and skip non-fork rules + field := kind.Field(i) + if !strings.HasSuffix(field.Name, "Block") { + continue + } + if field.Type != reflect.TypeOf(new(big.Int)) { + continue + } + // Extract the fork rule block number and aggregate it + rule := conf.Field(i).Interface().(*big.Int) + if rule != nil { + forks = append(forks, rule.Uint64()) + } + } + // Sort the fork block numbers to permit chronologival XOR + for i := 0; i < len(forks); i++ { + for j := i + 1; j < len(forks); j++ { + if forks[i] > forks[j] { + forks[i], forks[j] = forks[j], forks[i] + } + } + } + // Deduplicate block numbers applying multiple forks + for i := 1; i < len(forks); i++ { + if forks[i] == forks[i-1] { + forks = append(forks[:i], forks[i+1:]...) + i-- + } + } + // Skip any forks in block 0, that's the genesis ruleset + if len(forks) > 0 && forks[0] == 0 { + forks = forks[1:] + } + return forks +} diff --git a/core/forkid/forkid_test.go b/core/forkid/forkid_test.go new file mode 100644 index 000000000000..3048940236e4 --- /dev/null +++ b/core/forkid/forkid_test.go @@ -0,0 +1,211 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package forkid + +import ( + "bytes" + "math" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// TestCreation tests that different genesis and fork rule combinations result in +// the correct fork ID. +func TestCreation(t *testing.T) { + type testcase struct { + head uint64 + want ID + } + tests := []struct { + config *params.ChainConfig + genesis common.Hash + cases []testcase + }{ + // Mainnet test cases + { + params.MainnetChainConfig, + params.MainnetGenesisHash, + []testcase{ + {0, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Unsynced + {1149999, ID{Hash: checksumToBytes(0xfc64ec04), Next: 1150000}}, // Last Frontier block + {1150000, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // First Homestead block + {1919999, ID{Hash: checksumToBytes(0x97c2c34c), Next: 1920000}}, // Last Homestead block + {1920000, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // First DAO block + {2462999, ID{Hash: checksumToBytes(0x91d1f948), Next: 2463000}}, // Last DAO block + {2463000, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // First Tangerine block + {2674999, ID{Hash: checksumToBytes(0x7a64da13), Next: 2675000}}, // Last Tangerine block + {2675000, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // First Spurious block + {4369999, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}}, // Last Spurious block + {4370000, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // First Byzantium block + {7279999, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}}, // Last Byzantium block + {7280000, ID{Hash: checksumToBytes(0x668db0af), Next: 0}}, // First and last Constantinople, first Petersburg block + {7987396, ID{Hash: checksumToBytes(0x668db0af), Next: 0}}, // Today Petersburg block + }, + }, + // Ropsten test cases + { + params.TestnetChainConfig, + params.TestnetGenesisHash, + []testcase{ + {0, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Unsynced, last Frontier, Homestead and first Tangerine block + {9, ID{Hash: checksumToBytes(0x30c7ddbc), Next: 10}}, // Last Tangerine block + {10, ID{Hash: checksumToBytes(0x63760190), Next: 1700000}}, // First Spurious block + {1699999, ID{Hash: checksumToBytes(0x63760190), Next: 1700000}}, // Last Spurious block + {1700000, ID{Hash: checksumToBytes(0x3ea159c7), Next: 4230000}}, // First Byzantium block + {4229999, ID{Hash: checksumToBytes(0x3ea159c7), Next: 4230000}}, // Last Byzantium block + {4230000, ID{Hash: checksumToBytes(0x97b544f3), Next: 4939394}}, // First Constantinople block + {4939393, ID{Hash: checksumToBytes(0x97b544f3), Next: 4939394}}, // Last Constantinople block + {4939394, ID{Hash: checksumToBytes(0xd6e2149b), Next: 6485846}}, // First Petersburg block + {6485845, ID{Hash: checksumToBytes(0xd6e2149b), Next: 6485846}}, // Last Petersburg block + {6485846, ID{Hash: checksumToBytes(0x4bc66396), Next: 0}}, // First Istanbul block + {7500000, ID{Hash: checksumToBytes(0x4bc66396), Next: 0}}, // Future Istanbul block + }, + }, + // Rinkeby test cases + { + params.RinkebyChainConfig, + params.RinkebyGenesisHash, + []testcase{ + {0, ID{Hash: checksumToBytes(0x3b8e0691), Next: 1}}, // Unsynced, last Frontier block + {1, ID{Hash: checksumToBytes(0x60949295), Next: 2}}, // First and last Homestead block + {2, ID{Hash: checksumToBytes(0x8bde40dd), Next: 3}}, // First and last Tangerine block + {3, ID{Hash: checksumToBytes(0xcb3a64bb), Next: 1035301}}, // First Spurious block + {1035300, ID{Hash: checksumToBytes(0xcb3a64bb), Next: 1035301}}, // Last Spurious block + {1035301, ID{Hash: checksumToBytes(0x8d748b57), Next: 3660663}}, // First Byzantium block + {3660662, ID{Hash: checksumToBytes(0x8d748b57), Next: 3660663}}, // Last Byzantium block + {3660663, ID{Hash: checksumToBytes(0xe49cab14), Next: 4321234}}, // First Constantinople block + {4321233, ID{Hash: checksumToBytes(0xe49cab14), Next: 4321234}}, // Last Constantinople block + {4321234, ID{Hash: checksumToBytes(0xafec6b27), Next: 5435345}}, // First Petersburg block + {5435344, ID{Hash: checksumToBytes(0xafec6b27), Next: 5435345}}, // Last Petersburg block + {5435345, ID{Hash: checksumToBytes(0xcbdb8838), Next: 0}}, // First Istanbul block + {6000000, ID{Hash: checksumToBytes(0xcbdb8838), Next: 0}}, // Future Istanbul block + }, + }, + // Goerli test cases + { + params.GoerliChainConfig, + params.GoerliGenesisHash, + []testcase{ + {0, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Unsynced, last Frontier, Homestead, Tangerine, Spurious, Byzantium, Constantinople and first Petersburg block + {1561650, ID{Hash: checksumToBytes(0xa3f5ab08), Next: 1561651}}, // Last Petersburg block + {1561651, ID{Hash: checksumToBytes(0xc25efa5c), Next: 0}}, // First Istanbul block + {2000000, ID{Hash: checksumToBytes(0xc25efa5c), Next: 0}}, // Future Istanbul block + }, + }, + } + for i, tt := range tests { + for j, ttt := range tt.cases { + if have := newID(tt.config, tt.genesis, ttt.head); have != ttt.want { + t.Errorf("test %d, case %d: fork ID mismatch: have %x, want %x", i, j, have, ttt.want) + } + } + } +} + +// TestValidation tests that a local peer correctly validates and accepts a remote +// fork ID. +func TestValidation(t *testing.T) { + tests := []struct { + head uint64 + id ID + err error + }{ + // Local is mainnet Petersburg, remote announces the same. No future fork is announced. + {7987396, ID{Hash: checksumToBytes(0x668db0af), Next: 0}, nil}, + + // Local is mainnet Petersburg, remote announces the same. Remote also announces a next fork + // at block 0xffffffff, but that is uncertain. + {7987396, ID{Hash: checksumToBytes(0x668db0af), Next: math.MaxUint64}, nil}, + + // Local is mainnet currently in Byzantium only (so it's aware of Petersburg), remote announces + // also Byzantium, but it's not yet aware of Petersburg (e.g. non updated node before the fork). + // In this case we don't know if Petersburg passed yet or not. + {7279999, ID{Hash: checksumToBytes(0xa00bc324), Next: 0}, nil}, + + // Local is mainnet currently in Byzantium only (so it's aware of Petersburg), remote announces + // also Byzantium, and it's also aware of Petersburg (e.g. updated node before the fork). We + // don't know if Petersburg passed yet (will pass) or not. + {7279999, ID{Hash: checksumToBytes(0xa00bc324), Next: 7280000}, nil}, + + // Local is mainnet currently in Byzantium only (so it's aware of Petersburg), remote announces + // also Byzantium, and it's also aware of some random fork (e.g. misconfigured Petersburg). As + // neither forks passed at neither nodes, they may mismatch, but we still connect for now. + {7279999, ID{Hash: checksumToBytes(0xa00bc324), Next: math.MaxUint64}, nil}, + + // Local is mainnet Petersburg, remote announces Byzantium + knowledge about Petersburg. Remote + // is simply out of sync, accept. + {7987396, ID{Hash: checksumToBytes(0x668db0af), Next: 7280000}, nil}, + + // Local is mainnet Petersburg, remote announces Spurious + knowledge about Byzantium. Remote + // is definitely out of sync. It may or may not need the Petersburg update, we don't know yet. + {7987396, ID{Hash: checksumToBytes(0x3edd5b10), Next: 4370000}, nil}, + + // Local is mainnet Byzantium, remote announces Petersburg. Local is out of sync, accept. + {7279999, ID{Hash: checksumToBytes(0x668db0af), Next: 0}, nil}, + + // Local is mainnet Spurious, remote announces Byzantium, but is not aware of Petersburg. Local + // out of sync. Local also knows about a future fork, but that is uncertain yet. + {4369999, ID{Hash: checksumToBytes(0xa00bc324), Next: 0}, nil}, + + // Local is mainnet Petersburg. remote announces Byzantium but is not aware of further forks. + // Remote needs software update. + {7987396, ID{Hash: checksumToBytes(0xa00bc324), Next: 0}, ErrRemoteStale}, + + // Local is mainnet Petersburg, and isn't aware of more forks. Remote announces Petersburg + + // 0xffffffff. Local needs software update, reject. + {7987396, ID{Hash: checksumToBytes(0x5cddc0e1), Next: 0}, ErrLocalIncompatibleOrStale}, + + // Local is mainnet Byzantium, and is aware of Petersburg. Remote announces Petersburg + + // 0xffffffff. Local needs software update, reject. + {7279999, ID{Hash: checksumToBytes(0x5cddc0e1), Next: 0}, ErrLocalIncompatibleOrStale}, + + // Local is mainnet Petersburg, remote is Rinkeby Petersburg. + {7987396, ID{Hash: checksumToBytes(0xafec6b27), Next: 0}, ErrLocalIncompatibleOrStale}, + } + for i, tt := range tests { + filter := newFilter(params.MainnetChainConfig, params.MainnetGenesisHash, func() uint64 { return tt.head }) + if err := filter(tt.id); err != tt.err { + t.Errorf("test %d: validation error mismatch: have %v, want %v", i, err, tt.err) + } + } +} + +// Tests that IDs are properly RLP encoded (specifically important because we +// use uint32 to store the hash, but we need to encode it as [4]byte). +func TestEncoding(t *testing.T) { + tests := []struct { + id ID + want []byte + }{ + {ID{Hash: checksumToBytes(0), Next: 0}, common.Hex2Bytes("c6840000000080")}, + {ID{Hash: checksumToBytes(0xdeadbeef), Next: 0xBADDCAFE}, common.Hex2Bytes("ca84deadbeef84baddcafe,")}, + {ID{Hash: checksumToBytes(math.MaxUint32), Next: math.MaxUint64}, common.Hex2Bytes("ce84ffffffff88ffffffffffffffff")}, + } + for i, tt := range tests { + have, err := rlp.EncodeToBytes(tt.id) + if err != nil { + t.Errorf("test %d: failed to encode forkid: %v", i, err) + continue + } + if !bytes.Equal(have, tt.want) { + t.Errorf("test %d: RLP mismatch: have %x, want %x", i, have, tt.want) + } + } +} diff --git a/core/genesis.go b/core/genesis.go index 0e531ed7ac39..2d954ac988c9 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" @@ -136,7 +137,7 @@ type GenesisMismatchError struct { } func (e *GenesisMismatchError) Error() string { - return fmt.Sprintf("database already contains an incompatible genesis block (have %x, new %x)", e.Stored[:8], e.New[:8]) + return fmt.Sprintf("database contains incompatible genesis (have %x, new %x)", e.Stored, e.New) } // SetupGenesisBlock writes or updates the genesis block in db. @@ -155,7 +156,8 @@ func (e *GenesisMismatchError) Error() string { func SetupGenesisBlock(db ethdb.Database, genesis *Genesis) (*params.ChainConfig, common.Hash, error) { return SetupGenesisBlockWithOverride(db, genesis, nil) } -func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, constantinopleOverride *big.Int) (*params.ChainConfig, common.Hash, error) { + +func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, overrideIstanbul *big.Int) (*params.ChainConfig, common.Hash, error) { if genesis != nil && genesis.Config == nil { return params.AllEthashProtocolChanges, common.Hash{}, errGenesisNoConfig } @@ -169,7 +171,29 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, constant log.Info("Writing custom genesis block") } block, err := genesis.Commit(db) - return genesis.Config, block.Hash(), err + if err != nil { + return genesis.Config, common.Hash{}, err + } + return genesis.Config, block.Hash(), nil + } + + // We have the genesis block in database(perhaps in ancient database) + // but the corresponding state is missing. + header := rawdb.ReadHeader(db, stored, 0) + if _, err := state.New(header.Root, state.NewDatabaseWithCache(db, 0)); err != nil { + if genesis == nil { + genesis = DefaultGenesisBlock() + } + // Ensure the stored genesis matches with the given one. + hash := genesis.ToBlock(nil).Hash() + if hash != stored { + return genesis.Config, hash, &GenesisMismatchError{stored, hash} + } + block, err := genesis.Commit(db) + if err != nil { + return genesis.Config, hash, err + } + return genesis.Config, block.Hash(), nil } // Check whether the genesis block is already written. @@ -182,9 +206,8 @@ func SetupGenesisBlockWithOverride(db ethdb.Database, genesis *Genesis, constant // Get the existing chain configuration. newcfg := genesis.configOrDefault(stored) - if constantinopleOverride != nil { - newcfg.ConstantinopleBlock = constantinopleOverride - newcfg.PetersburgBlock = constantinopleOverride + if overrideIstanbul != nil { + newcfg.IstanbulBlock = overrideIstanbul } storedcfg := rawdb.ReadChainConfig(db, stored) if storedcfg == nil { @@ -230,7 +253,7 @@ func (g *Genesis) configOrDefault(ghash common.Hash) *params.ChainConfig { // to the given database (or discards it if nil). func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { if db == nil { - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() } statedb, _ := state.New(common.Hash{}, state.NewDatabase(db)) for addr, account := range g.Alloc { @@ -245,7 +268,7 @@ func (g *Genesis) ToBlock(db ethdb.Database) *types.Block { head := &types.Header{ Number: new(big.Int).SetUint64(g.Number), Nonce: types.EncodeNonce(g.Nonce), - Time: new(big.Int).SetUint64(g.Timestamp), + Time: g.Timestamp, ParentHash: g.ParentHash, Extra: g.ExtraData, GasLimit: g.GasLimit, @@ -279,6 +302,7 @@ func (g *Genesis) Commit(db ethdb.Database) (*types.Block, error) { rawdb.WriteReceipts(db, block.Hash(), block.NumberU64(), nil) rawdb.WriteCanonicalHash(db, block.Hash(), block.NumberU64()) rawdb.WriteHeadBlockHash(db, block.Hash()) + rawdb.WriteHeadFastBlockHash(db, block.Hash()) rawdb.WriteHeadHeaderHash(db, block.Hash()) config := g.Config @@ -417,7 +441,7 @@ func DeveloperGenesisBlock(period uint64, faucet common.Address) *Genesis { // Assemble and return the genesis with the precompiles and faucet pre-funded return &Genesis{ Config: &config, - ExtraData: append(append(make([]byte, 32), faucet[:]...), make([]byte, 65)...), + ExtraData: append(append(make([]byte, 32), faucet[:]...), make([]byte, crypto.SignatureLength)...), GasLimit: 6283185, Difficulty: big.NewInt(1), Alloc: map[common.Address]GenesisAccount{ diff --git a/core/genesis_test.go b/core/genesis_test.go index c7d54f20571b..c6bcd0aa54bd 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -141,7 +141,7 @@ func TestSetupGenesis(t *testing.T) { } for _, test := range tests { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() config, hash, err := test.fn(db) // Check the return values. if !reflect.DeepEqual(err, test.wantErr) { diff --git a/core/headerchain.go b/core/headerchain.go index d2093113c0e2..4682069cff0c 100644 --- a/core/headerchain.go +++ b/core/headerchain.go @@ -33,7 +33,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" - "github.com/hashicorp/golang-lru" + lru "github.com/hashicorp/golang-lru" ) const ( @@ -104,6 +104,7 @@ func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine c } } hc.currentHeaderHash = hc.CurrentHeader().Hash() + headHeaderGauge.Update(hc.CurrentHeader().Number.Int64()) return hc, nil } @@ -185,12 +186,12 @@ func (hc *HeaderChain) WriteHeader(header *types.Header) (status WriteStatus, er hc.currentHeaderHash = hash hc.currentHeader.Store(types.CopyHeader(header)) + headHeaderGauge.Update(header.Number.Int64()) status = CanonStatTy } else { status = SideStatTy } - hc.headerCache.Add(hash, header) hc.numberCache.Add(hash, number) @@ -219,14 +220,18 @@ func (hc *HeaderChain) ValidateHeaderChain(chain []*types.Header, checkFreq int) // Generate the list of seal verification requests, and start the parallel verifier seals := make([]bool, len(chain)) - for i := 0; i < len(seals)/checkFreq; i++ { - index := i*checkFreq + hc.rand.Intn(checkFreq) - if index >= len(seals) { - index = len(seals) - 1 + if checkFreq != 0 { + // In case of checkFreq == 0 all seals are left false. + for i := 0; i < len(seals)/checkFreq; i++ { + index := i*checkFreq + hc.rand.Intn(checkFreq) + if index >= len(seals) { + index = len(seals) - 1 + } + seals[index] = true } - seals[index] = true + // Last should always be verified to avoid junk. + seals[len(seals)-1] = true } - seals[len(seals)-1] = true // Last should always be verified to avoid junk abort, results := hc.engine.VerifyHeaders(hc, chain, seals) defer close(abort) @@ -270,9 +275,14 @@ func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, writeHeader WhCa return i, errors.New("aborted") } // If the header's already known, skip it, otherwise store - if hc.HasHeader(header.Hash(), header.Number.Uint64()) { - stats.ignored++ - continue + hash := header.Hash() + if hc.HasHeader(hash, header.Number.Uint64()) { + externTd := hc.GetTd(hash, header.Number.Uint64()) + localTd := hc.GetTd(hc.currentHeaderHash, hc.CurrentHeader().Number.Uint64()) + if externTd == nil || externTd.Cmp(localTd) <= 0 { + stats.ignored++ + continue + } } if err := writeHeader(header); err != nil { return i, err @@ -286,7 +296,7 @@ func (hc *HeaderChain) InsertHeaderChain(chain []*types.Header, writeHeader WhCa "count", stats.processed, "elapsed", common.PrettyDuration(time.Since(start)), "number", last.Number, "hash", last.Hash(), } - if timestamp := time.Unix(last.Time.Int64(), 0); time.Since(timestamp) > time.Minute { + if timestamp := time.Unix(int64(last.Time), 0); time.Since(timestamp) > time.Minute { context = append(context, []interface{}{"age", common.PrettyAge(timestamp)}...) } if stats.ignored > 0 { @@ -339,8 +349,11 @@ func (hc *HeaderChain) GetAncestor(hash common.Hash, number, ancestor uint64, ma } for ancestor != 0 { if rawdb.ReadCanonicalHash(hc.chainDb, number) == hash { - number -= ancestor - return rawdb.ReadCanonicalHash(hc.chainDb, number), number + ancestorHash := rawdb.ReadCanonicalHash(hc.chainDb, number-ancestor) + if rawdb.ReadCanonicalHash(hc.chainDb, number) == hash { + number -= ancestor + return ancestorHash, number + } } if *maxNonCanonical == 0 { return common.Hash{}, 0 @@ -435,6 +448,10 @@ func (hc *HeaderChain) GetHeaderByNumber(number uint64) *types.Header { return hc.GetHeader(hash, number) } +func (hc *HeaderChain) GetCanonicalHash(number uint64) common.Hash { + return rawdb.ReadCanonicalHash(hc.chainDb, number) +} + // CurrentHeader retrieves the current head header of the canonical chain. The // header is retrieved from the HeaderChain's internal cache. func (hc *HeaderChain) CurrentHeader() *types.Header { @@ -447,35 +464,60 @@ func (hc *HeaderChain) SetCurrentHeader(head *types.Header) { hc.currentHeader.Store(head) hc.currentHeaderHash = head.Hash() + headHeaderGauge.Update(head.Number.Int64()) } -// DeleteCallback is a callback function that is called by SetHead before -// each header is deleted. -type DeleteCallback func(rawdb.DatabaseDeleter, common.Hash, uint64) +type ( + // UpdateHeadBlocksCallback is a callback function that is called by SetHead + // before head header is updated. + UpdateHeadBlocksCallback func(ethdb.KeyValueWriter, *types.Header) + + // DeleteBlockContentCallback is a callback function that is called by SetHead + // before each header is deleted. + DeleteBlockContentCallback func(ethdb.KeyValueWriter, common.Hash, uint64) +) // SetHead rewinds the local chain to a new head. Everything above the new head // will be deleted and the new one set. -func (hc *HeaderChain) SetHead(head uint64, delFn DeleteCallback) { - height := uint64(0) - - if hdr := hc.CurrentHeader(); hdr != nil { - height = hdr.Number.Uint64() - } - batch := hc.chainDb.NewBatch() +func (hc *HeaderChain) SetHead(head uint64, updateFn UpdateHeadBlocksCallback, delFn DeleteBlockContentCallback) { + var ( + parentHash common.Hash + batch = hc.chainDb.NewBatch() + ) for hdr := hc.CurrentHeader(); hdr != nil && hdr.Number.Uint64() > head; hdr = hc.CurrentHeader() { - hash := hdr.Hash() - num := hdr.Number.Uint64() + hash, num := hdr.Hash(), hdr.Number.Uint64() + + // Rewind block chain to new head. + parent := hc.GetHeader(hdr.ParentHash, num-1) + if parent == nil { + parent = hc.genesisHeader + } + parentHash = hdr.ParentHash + // Notably, since geth has the possibility for setting the head to a low + // height which is even lower than ancient head. + // In order to ensure that the head is always no higher than the data in + // the database(ancient store or active store), we need to update head + // first then remove the relative data from the database. + // + // Update head first(head fast block, head full block) before deleting the data. + if updateFn != nil { + updateFn(hc.chainDb, parent) + } + // Update head header then. + rawdb.WriteHeadHeaderHash(hc.chainDb, parentHash) + + // Remove the relative data from the database. if delFn != nil { delFn(batch, hash, num) } + // Rewind header chain to new head. rawdb.DeleteHeader(batch, hash, num) rawdb.DeleteTd(batch, hash, num) + rawdb.DeleteCanonicalHash(batch, num) - hc.currentHeader.Store(hc.GetHeader(hdr.ParentHash, hdr.Number.Uint64()-1)) - } - // Roll back the canonical chain numbering - for i := height; i > head; i-- { - rawdb.DeleteCanonicalHash(batch, i) + hc.currentHeader.Store(parent) + hc.currentHeaderHash = parentHash + headHeaderGauge.Update(parent.Number.Int64()) } batch.Write() @@ -483,13 +525,6 @@ func (hc *HeaderChain) SetHead(head uint64, delFn DeleteCallback) { hc.headerCache.Purge() hc.tdCache.Purge() hc.numberCache.Purge() - - if hc.CurrentHeader() == nil { - hc.currentHeader.Store(hc.genesisHeader) - } - hc.currentHeaderHash = hc.CurrentHeader().Hash() - - rawdb.WriteHeadHeaderHash(hc.chainDb, hc.currentHeaderHash) } // SetGenesis sets a new genesis block header for the chain diff --git a/core/helper_test.go b/core/helper_test.go index 051384d8547b..e61c92dcdd23 100644 --- a/core/helper_test.go +++ b/core/helper_test.go @@ -19,6 +19,7 @@ package core import ( "container/list" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -78,7 +79,7 @@ func (tm *TestManager) Db() ethdb.Database { func NewTestManager() *TestManager { testManager := &TestManager{} testManager.eventMux = new(event.TypeMux) - testManager.db = ethdb.NewMemDatabase() + testManager.db = rawdb.NewMemoryDatabase() // testManager.txPool = NewTxPool(testManager) // testManager.blockChain = NewBlockChain(testManager) // testManager.stateManager = NewStateManager(testManager) diff --git a/core/mkalloc.go b/core/mkalloc.go index 565e8c5826d4..5118a4fcb327 100644 --- a/core/mkalloc.go +++ b/core/mkalloc.go @@ -52,7 +52,8 @@ func makelist(g *core.Genesis) allocList { if len(account.Storage) > 0 || len(account.Code) > 0 || account.Nonce != 0 { panic(fmt.Sprintf("can't encode account %x", addr)) } - a = append(a, allocItem{addr.Big(), account.Balance}) + bigAddr := new(big.Int).SetBytes(addr.Bytes()) + a = append(a, allocItem{bigAddr, account.Balance}) } sort.Sort(a) return a diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 491a125c6519..fab7ca56c3a5 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -23,13 +23,25 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) // ReadCanonicalHash retrieves the hash assigned to a canonical block number. -func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash { - data, _ := db.Get(headerHashKey(number)) +func ReadCanonicalHash(db ethdb.Reader, number uint64) common.Hash { + data, _ := db.Ancient(freezerHashTable, number) + if len(data) == 0 { + data, _ = db.Get(headerHashKey(number)) + // In the background freezer is moving data from leveldb to flatten files. + // So during the first check for ancient db, the data is not yet in there, + // but when we reach into leveldb, the data was already moved. That would + // result in a not found error. + if len(data) == 0 { + data, _ = db.Ancient(freezerHashTable, number) + } + } if len(data) == 0 { return common.Hash{} } @@ -37,21 +49,38 @@ func ReadCanonicalHash(db DatabaseReader, number uint64) common.Hash { } // WriteCanonicalHash stores the hash assigned to a canonical block number. -func WriteCanonicalHash(db DatabaseWriter, hash common.Hash, number uint64) { +func WriteCanonicalHash(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { if err := db.Put(headerHashKey(number), hash.Bytes()); err != nil { log.Crit("Failed to store number to hash mapping", "err", err) } } // DeleteCanonicalHash removes the number to hash canonical mapping. -func DeleteCanonicalHash(db DatabaseDeleter, number uint64) { +func DeleteCanonicalHash(db ethdb.KeyValueWriter, number uint64) { if err := db.Delete(headerHashKey(number)); err != nil { log.Crit("Failed to delete number to hash mapping", "err", err) } } +// ReadAllHashes retrieves all the hashes assigned to blocks at a certain heights, +// both canonical and reorged forks included. +func ReadAllHashes(db ethdb.Iteratee, number uint64) []common.Hash { + prefix := headerKeyPrefix(number) + + hashes := make([]common.Hash, 0, 1) + it := db.NewIteratorWithPrefix(prefix) + defer it.Release() + + for it.Next() { + if key := it.Key(); len(key) == len(prefix)+32 { + hashes = append(hashes, common.BytesToHash(key[len(key)-32:])) + } + } + return hashes +} + // ReadHeaderNumber returns the header number assigned to a hash. -func ReadHeaderNumber(db DatabaseReader, hash common.Hash) *uint64 { +func ReadHeaderNumber(db ethdb.KeyValueReader, hash common.Hash) *uint64 { data, _ := db.Get(headerNumberKey(hash)) if len(data) != 8 { return nil @@ -60,8 +89,24 @@ func ReadHeaderNumber(db DatabaseReader, hash common.Hash) *uint64 { return &number } +// WriteHeaderNumber stores the hash->number mapping. +func WriteHeaderNumber(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { + key := headerNumberKey(hash) + enc := encodeBlockNumber(number) + if err := db.Put(key, enc); err != nil { + log.Crit("Failed to store hash to number mapping", "err", err) + } +} + +// DeleteHeaderNumber removes hash->number mapping. +func DeleteHeaderNumber(db ethdb.KeyValueWriter, hash common.Hash) { + if err := db.Delete(headerNumberKey(hash)); err != nil { + log.Crit("Failed to delete hash to number mapping", "err", err) + } +} + // ReadHeadHeaderHash retrieves the hash of the current canonical head header. -func ReadHeadHeaderHash(db DatabaseReader) common.Hash { +func ReadHeadHeaderHash(db ethdb.KeyValueReader) common.Hash { data, _ := db.Get(headHeaderKey) if len(data) == 0 { return common.Hash{} @@ -70,14 +115,14 @@ func ReadHeadHeaderHash(db DatabaseReader) common.Hash { } // WriteHeadHeaderHash stores the hash of the current canonical head header. -func WriteHeadHeaderHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadHeaderHash(db ethdb.KeyValueWriter, hash common.Hash) { if err := db.Put(headHeaderKey, hash.Bytes()); err != nil { log.Crit("Failed to store last header's hash", "err", err) } } // ReadHeadBlockHash retrieves the hash of the current canonical head block. -func ReadHeadBlockHash(db DatabaseReader) common.Hash { +func ReadHeadBlockHash(db ethdb.KeyValueReader) common.Hash { data, _ := db.Get(headBlockKey) if len(data) == 0 { return common.Hash{} @@ -86,14 +131,14 @@ func ReadHeadBlockHash(db DatabaseReader) common.Hash { } // WriteHeadBlockHash stores the head block's hash. -func WriteHeadBlockHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { if err := db.Put(headBlockKey, hash.Bytes()); err != nil { log.Crit("Failed to store last block's hash", "err", err) } } // ReadHeadFastBlockHash retrieves the hash of the current fast-sync head block. -func ReadHeadFastBlockHash(db DatabaseReader) common.Hash { +func ReadHeadFastBlockHash(db ethdb.KeyValueReader) common.Hash { data, _ := db.Get(headFastBlockKey) if len(data) == 0 { return common.Hash{} @@ -102,7 +147,7 @@ func ReadHeadFastBlockHash(db DatabaseReader) common.Hash { } // WriteHeadFastBlockHash stores the hash of the current fast-sync head block. -func WriteHeadFastBlockHash(db DatabaseWriter, hash common.Hash) { +func WriteHeadFastBlockHash(db ethdb.KeyValueWriter, hash common.Hash) { if err := db.Put(headFastBlockKey, hash.Bytes()); err != nil { log.Crit("Failed to store last fast block's hash", "err", err) } @@ -110,7 +155,7 @@ func WriteHeadFastBlockHash(db DatabaseWriter, hash common.Hash) { // ReadFastTrieProgress retrieves the number of tries nodes fast synced to allow // reporting correct numbers across restarts. -func ReadFastTrieProgress(db DatabaseReader) uint64 { +func ReadFastTrieProgress(db ethdb.KeyValueReader) uint64 { data, _ := db.Get(fastTrieProgressKey) if len(data) == 0 { return 0 @@ -120,20 +165,33 @@ func ReadFastTrieProgress(db DatabaseReader) uint64 { // WriteFastTrieProgress stores the fast sync trie process counter to support // retrieving it across restarts. -func WriteFastTrieProgress(db DatabaseWriter, count uint64) { +func WriteFastTrieProgress(db ethdb.KeyValueWriter, count uint64) { if err := db.Put(fastTrieProgressKey, new(big.Int).SetUint64(count).Bytes()); err != nil { log.Crit("Failed to store fast sync trie progress", "err", err) } } // ReadHeaderRLP retrieves a block header in its raw RLP database encoding. -func ReadHeaderRLP(db DatabaseReader, hash common.Hash, number uint64) rlp.RawValue { - data, _ := db.Get(headerKey(number, hash)) +func ReadHeaderRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { + data, _ := db.Ancient(freezerHeaderTable, number) + if len(data) == 0 { + data, _ = db.Get(headerKey(number, hash)) + // In the background freezer is moving data from leveldb to flatten files. + // So during the first check for ancient db, the data is not yet in there, + // but when we reach into leveldb, the data was already moved. That would + // result in a not found error. + if len(data) == 0 { + data, _ = db.Ancient(freezerHeaderTable, number) + } + } return data } // HasHeader verifies the existence of a block header corresponding to the hash. -func HasHeader(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasHeader(db ethdb.Reader, hash common.Hash, number uint64) bool { + if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + return true + } if has, err := db.Has(headerKey(number, hash)); !has || err != nil { return false } @@ -141,7 +199,7 @@ func HasHeader(db DatabaseReader, hash common.Hash, number uint64) bool { } // ReadHeader retrieves the block header corresponding to the hash. -func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Header { +func ReadHeader(db ethdb.Reader, hash common.Hash, number uint64) *types.Header { data := ReadHeaderRLP(db, hash, number) if len(data) == 0 { return nil @@ -156,53 +214,69 @@ func ReadHeader(db DatabaseReader, hash common.Hash, number uint64) *types.Heade // WriteHeader stores a block header into the database and also stores the hash- // to-number mapping. -func WriteHeader(db DatabaseWriter, header *types.Header) { - // Write the hash -> number mapping +func WriteHeader(db ethdb.KeyValueWriter, header *types.Header) { var ( - hash = header.Hash() - number = header.Number.Uint64() - encoded = encodeBlockNumber(number) + hash = header.Hash() + number = header.Number.Uint64() ) - key := headerNumberKey(hash) - if err := db.Put(key, encoded); err != nil { - log.Crit("Failed to store hash to number mapping", "err", err) - } + // Write the hash -> number mapping + WriteHeaderNumber(db, hash, number) + // Write the encoded header data, err := rlp.EncodeToBytes(header) if err != nil { log.Crit("Failed to RLP encode header", "err", err) } - key = headerKey(number, hash) + key := headerKey(number, hash) if err := db.Put(key, data); err != nil { log.Crit("Failed to store header", "err", err) } } // DeleteHeader removes all block header data associated with a hash. -func DeleteHeader(db DatabaseDeleter, hash common.Hash, number uint64) { - if err := db.Delete(headerKey(number, hash)); err != nil { - log.Crit("Failed to delete header", "err", err) - } +func DeleteHeader(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { + deleteHeaderWithoutNumber(db, hash, number) if err := db.Delete(headerNumberKey(hash)); err != nil { log.Crit("Failed to delete hash to number mapping", "err", err) } } +// deleteHeaderWithoutNumber removes only the block header but does not remove +// the hash to number mapping. +func deleteHeaderWithoutNumber(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { + if err := db.Delete(headerKey(number, hash)); err != nil { + log.Crit("Failed to delete header", "err", err) + } +} + // ReadBodyRLP retrieves the block body (transactions and uncles) in RLP encoding. -func ReadBodyRLP(db DatabaseReader, hash common.Hash, number uint64) rlp.RawValue { - data, _ := db.Get(blockBodyKey(number, hash)) +func ReadBodyRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { + data, _ := db.Ancient(freezerBodiesTable, number) + if len(data) == 0 { + data, _ = db.Get(blockBodyKey(number, hash)) + // In the background freezer is moving data from leveldb to flatten files. + // So during the first check for ancient db, the data is not yet in there, + // but when we reach into leveldb, the data was already moved. That would + // result in a not found error. + if len(data) == 0 { + data, _ = db.Ancient(freezerBodiesTable, number) + } + } return data } // WriteBodyRLP stores an RLP encoded block body into the database. -func WriteBodyRLP(db DatabaseWriter, hash common.Hash, number uint64, rlp rlp.RawValue) { +func WriteBodyRLP(db ethdb.KeyValueWriter, hash common.Hash, number uint64, rlp rlp.RawValue) { if err := db.Put(blockBodyKey(number, hash), rlp); err != nil { log.Crit("Failed to store block body", "err", err) } } // HasBody verifies the existence of a block body corresponding to the hash. -func HasBody(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasBody(db ethdb.Reader, hash common.Hash, number uint64) bool { + if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + return true + } if has, err := db.Has(blockBodyKey(number, hash)); !has || err != nil { return false } @@ -210,7 +284,7 @@ func HasBody(db DatabaseReader, hash common.Hash, number uint64) bool { } // ReadBody retrieves the block body corresponding to the hash. -func ReadBody(db DatabaseReader, hash common.Hash, number uint64) *types.Body { +func ReadBody(db ethdb.Reader, hash common.Hash, number uint64) *types.Body { data := ReadBodyRLP(db, hash, number) if len(data) == 0 { return nil @@ -223,8 +297,8 @@ func ReadBody(db DatabaseReader, hash common.Hash, number uint64) *types.Body { return body } -// WriteBody storea a block body into the database. -func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.Body) { +// WriteBody stores a block body into the database. +func WriteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64, body *types.Body) { data, err := rlp.EncodeToBytes(body) if err != nil { log.Crit("Failed to RLP encode body", "err", err) @@ -233,15 +307,31 @@ func WriteBody(db DatabaseWriter, hash common.Hash, number uint64, body *types.B } // DeleteBody removes all block body data associated with a hash. -func DeleteBody(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { if err := db.Delete(blockBodyKey(number, hash)); err != nil { log.Crit("Failed to delete block body", "err", err) } } +// ReadTdRLP retrieves a block's total difficulty corresponding to the hash in RLP encoding. +func ReadTdRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { + data, _ := db.Ancient(freezerDifficultyTable, number) + if len(data) == 0 { + data, _ = db.Get(headerTDKey(number, hash)) + // In the background freezer is moving data from leveldb to flatten files. + // So during the first check for ancient db, the data is not yet in there, + // but when we reach into leveldb, the data was already moved. That would + // result in a not found error. + if len(data) == 0 { + data, _ = db.Ancient(freezerDifficultyTable, number) + } + } + return data +} + // ReadTd retrieves a block's total difficulty corresponding to the hash. -func ReadTd(db DatabaseReader, hash common.Hash, number uint64) *big.Int { - data, _ := db.Get(headerTDKey(number, hash)) +func ReadTd(db ethdb.Reader, hash common.Hash, number uint64) *big.Int { + data := ReadTdRLP(db, hash, number) if len(data) == 0 { return nil } @@ -254,7 +344,7 @@ func ReadTd(db DatabaseReader, hash common.Hash, number uint64) *big.Int { } // WriteTd stores the total difficulty of a block into the database. -func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) { +func WriteTd(db ethdb.KeyValueWriter, hash common.Hash, number uint64, td *big.Int) { data, err := rlp.EncodeToBytes(td) if err != nil { log.Crit("Failed to RLP encode block total difficulty", "err", err) @@ -265,7 +355,7 @@ func WriteTd(db DatabaseWriter, hash common.Hash, number uint64, td *big.Int) { } // DeleteTd removes all block total difficulty data associated with a hash. -func DeleteTd(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteTd(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { if err := db.Delete(headerTDKey(number, hash)); err != nil { log.Crit("Failed to delete block total difficulty", "err", err) } @@ -273,17 +363,38 @@ func DeleteTd(db DatabaseDeleter, hash common.Hash, number uint64) { // HasReceipts verifies the existence of all the transaction receipts belonging // to a block. -func HasReceipts(db DatabaseReader, hash common.Hash, number uint64) bool { +func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { + if has, err := db.Ancient(freezerHashTable, number); err == nil && common.BytesToHash(has) == hash { + return true + } if has, err := db.Has(blockReceiptsKey(number, hash)); !has || err != nil { return false } return true } -// ReadReceipts retrieves all the transaction receipts belonging to a block. -func ReadReceipts(db DatabaseReader, hash common.Hash, number uint64) types.Receipts { +// ReadReceiptsRLP retrieves all the transaction receipts belonging to a block in RLP encoding. +func ReadReceiptsRLP(db ethdb.Reader, hash common.Hash, number uint64) rlp.RawValue { + data, _ := db.Ancient(freezerReceiptTable, number) + if len(data) == 0 { + data, _ = db.Get(blockReceiptsKey(number, hash)) + // In the background freezer is moving data from leveldb to flatten files. + // So during the first check for ancient db, the data is not yet in there, + // but when we reach into leveldb, the data was already moved. That would + // result in a not found error. + if len(data) == 0 { + data, _ = db.Ancient(freezerReceiptTable, number) + } + } + return data +} + +// ReadRawReceipts retrieves all the transaction receipts belonging to a block. +// The receipt metadata fields are not guaranteed to be populated, so they +// should not be used. Use ReadReceipts instead if the metadata is needed. +func ReadRawReceipts(db ethdb.Reader, hash common.Hash, number uint64) types.Receipts { // Retrieve the flattened receipt slice - data, _ := db.Get(blockReceiptsKey(number, hash)) + data := ReadReceiptsRLP(db, hash, number) if len(data) == 0 { return nil } @@ -294,14 +405,39 @@ func ReadReceipts(db DatabaseReader, hash common.Hash, number uint64) types.Rece return nil } receipts := make(types.Receipts, len(storageReceipts)) - for i, receipt := range storageReceipts { - receipts[i] = (*types.Receipt)(receipt) + for i, storageReceipt := range storageReceipts { + receipts[i] = (*types.Receipt)(storageReceipt) + } + return receipts +} + +// ReadReceipts retrieves all the transaction receipts belonging to a block, including +// its correspoinding metadata fields. If it is unable to populate these metadata +// fields then nil is returned. +// +// The current implementation populates these metadata fields by reading the receipts' +// corresponding block body, so if the block body is not found it will return nil even +// if the receipt itself is stored. +func ReadReceipts(db ethdb.Reader, hash common.Hash, number uint64, config *params.ChainConfig) types.Receipts { + // We're deriving many fields from the block body, retrieve beside the receipt + receipts := ReadRawReceipts(db, hash, number) + if receipts == nil { + return nil + } + body := ReadBody(db, hash, number) + if body == nil { + log.Error("Missing body but have receipt", "hash", hash, "number", number) + return nil + } + if err := receipts.DeriveFields(config, hash, number, body.Transactions); err != nil { + log.Error("Failed to derive block receipts fields", "hash", hash, "number", number, "err", err) + return nil } return receipts } // WriteReceipts stores all the transaction receipts belonging to a block. -func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts types.Receipts) { +func WriteReceipts(db ethdb.KeyValueWriter, hash common.Hash, number uint64, receipts types.Receipts) { // Convert the receipts into their storage form and serialize them storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) for i, receipt := range receipts { @@ -318,7 +454,7 @@ func WriteReceipts(db DatabaseWriter, hash common.Hash, number uint64, receipts } // DeleteReceipts removes all receipt data associated with a block hash. -func DeleteReceipts(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteReceipts(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { if err := db.Delete(blockReceiptsKey(number, hash)); err != nil { log.Crit("Failed to delete block receipts", "err", err) } @@ -330,7 +466,7 @@ func DeleteReceipts(db DatabaseDeleter, hash common.Hash, number uint64) { // // Note, due to concurrent download of header and block body the header and thus // canonical hash can be stored in the database but the body data not (yet). -func ReadBlock(db DatabaseReader, hash common.Hash, number uint64) *types.Block { +func ReadBlock(db ethdb.Reader, hash common.Hash, number uint64) *types.Block { header := ReadHeader(db, hash, number) if header == nil { return nil @@ -343,21 +479,61 @@ func ReadBlock(db DatabaseReader, hash common.Hash, number uint64) *types.Block } // WriteBlock serializes a block into the database, header and body separately. -func WriteBlock(db DatabaseWriter, block *types.Block) { +func WriteBlock(db ethdb.KeyValueWriter, block *types.Block) { WriteBody(db, block.Hash(), block.NumberU64(), block.Body()) WriteHeader(db, block.Header()) } +// WriteAncientBlock writes entire block data into ancient store and returns the total written size. +func WriteAncientBlock(db ethdb.AncientWriter, block *types.Block, receipts types.Receipts, td *big.Int) int { + // Encode all block components to RLP format. + headerBlob, err := rlp.EncodeToBytes(block.Header()) + if err != nil { + log.Crit("Failed to RLP encode block header", "err", err) + } + bodyBlob, err := rlp.EncodeToBytes(block.Body()) + if err != nil { + log.Crit("Failed to RLP encode body", "err", err) + } + storageReceipts := make([]*types.ReceiptForStorage, len(receipts)) + for i, receipt := range receipts { + storageReceipts[i] = (*types.ReceiptForStorage)(receipt) + } + receiptBlob, err := rlp.EncodeToBytes(storageReceipts) + if err != nil { + log.Crit("Failed to RLP encode block receipts", "err", err) + } + tdBlob, err := rlp.EncodeToBytes(td) + if err != nil { + log.Crit("Failed to RLP encode block total difficulty", "err", err) + } + // Write all blob to flatten files. + err = db.AppendAncient(block.NumberU64(), block.Hash().Bytes(), headerBlob, bodyBlob, receiptBlob, tdBlob) + if err != nil { + log.Crit("Failed to write block data to ancient store", "err", err) + } + return len(headerBlob) + len(bodyBlob) + len(receiptBlob) + len(tdBlob) + common.HashLength +} + // DeleteBlock removes all block data associated with a hash. -func DeleteBlock(db DatabaseDeleter, hash common.Hash, number uint64) { +func DeleteBlock(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { DeleteReceipts(db, hash, number) DeleteHeader(db, hash, number) DeleteBody(db, hash, number) DeleteTd(db, hash, number) } +// DeleteBlockWithoutNumber removes all block data associated with a hash, except +// the hash to number mapping. +func DeleteBlockWithoutNumber(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { + DeleteReceipts(db, hash, number) + deleteHeaderWithoutNumber(db, hash, number) + DeleteBody(db, hash, number) + DeleteTd(db, hash, number) +} + // FindCommonAncestor returns the last common ancestor of two block headers -func FindCommonAncestor(db DatabaseReader, a, b *types.Header) *types.Header { +func FindCommonAncestor(db ethdb.Reader, a, b *types.Header) *types.Header { for bn := b.Number.Uint64(); a.Number.Uint64() > bn; { a = ReadHeader(db, a.ParentHash, a.Number.Uint64()-1) if a == nil { diff --git a/core/rawdb/accessors_chain_test.go b/core/rawdb/accessors_chain_test.go index fcc36dc2b4c5..8c8affffd9e8 100644 --- a/core/rawdb/accessors_chain_test.go +++ b/core/rawdb/accessors_chain_test.go @@ -18,19 +18,21 @@ package rawdb import ( "bytes" + "encoding/hex" + "fmt" "math/big" "testing" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "golang.org/x/crypto/sha3" ) // Tests block header storage and retrieval operations. func TestHeaderStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test header to move around the database and make sure it's really new header := &types.Header{Number: big.NewInt(42), Extra: []byte("test header")} @@ -63,7 +65,7 @@ func TestHeaderStorage(t *testing.T) { // Tests block body storage and retrieval operations. func TestBodyStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test body to move around the database and make sure it's really new body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}} @@ -101,7 +103,7 @@ func TestBodyStorage(t *testing.T) { // Tests block storage and retrieval operations. func TestBlockStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test block to move around the database and make sure it's really new block := types.NewBlockWithHeader(&types.Header{ @@ -151,7 +153,7 @@ func TestBlockStorage(t *testing.T) { // Tests that partial block contents don't get reassembled into full blocks. func TestPartialBlockStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() block := types.NewBlockWithHeader(&types.Header{ Extra: []byte("test block"), UncleHash: types.EmptyUncleHash, @@ -185,7 +187,7 @@ func TestPartialBlockStorage(t *testing.T) { // Tests block total difficulty storage and retrieval operations. func TestTdStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test TD to move around the database and make sure it's really new hash, td := common.Hash{}, big.NewInt(314) @@ -208,7 +210,7 @@ func TestTdStorage(t *testing.T) { // Tests that canonical numbers can be mapped to hashes and retrieved. func TestCanonicalMappingStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() // Create a test canonical number and assinged hash to move around hash, number := common.Hash{0: 0xff}, uint64(314) @@ -231,7 +233,7 @@ func TestCanonicalMappingStorage(t *testing.T) { // Tests that head headers and head blocks can be assigned, individually. func TestHeadStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() blockHead := types.NewBlockWithHeader(&types.Header{Extra: []byte("test block header")}) blockFull := types.NewBlockWithHeader(&types.Header{Extra: []byte("test block full")}) @@ -266,8 +268,15 @@ func TestHeadStorage(t *testing.T) { // Tests that receipts associated with a single block can be stored and retrieved. func TestBlockReceiptStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + db := NewMemoryDatabase() + // Create a live block since we need metadata to reconstruct the receipt + tx1 := types.NewTransaction(1, common.HexToAddress("0x1"), big.NewInt(1), 1, big.NewInt(1), nil) + tx2 := types.NewTransaction(2, common.HexToAddress("0x2"), big.NewInt(2), 2, big.NewInt(2), nil) + + body := &types.Body{Transactions: types.Transactions{tx1, tx2}} + + // Create the two receipts to manage afterwards receipt1 := &types.Receipt{ Status: types.ReceiptStatusFailed, CumulativeGasUsed: 1, @@ -275,10 +284,12 @@ func TestBlockReceiptStorage(t *testing.T) { {Address: common.BytesToAddress([]byte{0x11})}, {Address: common.BytesToAddress([]byte{0x01, 0x11})}, }, - TxHash: common.BytesToHash([]byte{0x11, 0x11}), + TxHash: tx1.Hash(), ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), GasUsed: 111111, } + receipt1.Bloom = types.CreateBloom(types.Receipts{receipt1}) + receipt2 := &types.Receipt{ PostState: common.Hash{2}.Bytes(), CumulativeGasUsed: 2, @@ -286,34 +297,64 @@ func TestBlockReceiptStorage(t *testing.T) { {Address: common.BytesToAddress([]byte{0x22})}, {Address: common.BytesToAddress([]byte{0x02, 0x22})}, }, - TxHash: common.BytesToHash([]byte{0x22, 0x22}), + TxHash: tx2.Hash(), ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}), GasUsed: 222222, } + receipt2.Bloom = types.CreateBloom(types.Receipts{receipt2}) receipts := []*types.Receipt{receipt1, receipt2} // Check that no receipt entries are in a pristine database hash := common.BytesToHash([]byte{0x03, 0x14}) - if rs := ReadReceipts(db, hash, 0); len(rs) != 0 { + if rs := ReadReceipts(db, hash, 0, params.TestChainConfig); len(rs) != 0 { t.Fatalf("non existent receipts returned: %v", rs) } + // Insert the body that corresponds to the receipts + WriteBody(db, hash, 0, body) + // Insert the receipt slice into the database and check presence WriteReceipts(db, hash, 0, receipts) - if rs := ReadReceipts(db, hash, 0); len(rs) == 0 { + if rs := ReadReceipts(db, hash, 0, params.TestChainConfig); len(rs) == 0 { t.Fatalf("no receipts returned") } else { - for i := 0; i < len(receipts); i++ { - rlpHave, _ := rlp.EncodeToBytes(rs[i]) - rlpWant, _ := rlp.EncodeToBytes(receipts[i]) - - if !bytes.Equal(rlpHave, rlpWant) { - t.Fatalf("receipt #%d: receipt mismatch: have %v, want %v", i, rs[i], receipts[i]) - } + if err := checkReceiptsRLP(rs, receipts); err != nil { + t.Fatalf(err.Error()) } } - // Delete the receipt slice and check purge + // Delete the body and ensure that the receipts are no longer returned (metadata can't be recomputed) + DeleteBody(db, hash, 0) + if rs := ReadReceipts(db, hash, 0, params.TestChainConfig); rs != nil { + t.Fatalf("receipts returned when body was deleted: %v", rs) + } + // Ensure that receipts without metadata can be returned without the block body too + if err := checkReceiptsRLP(ReadRawReceipts(db, hash, 0), receipts); err != nil { + t.Fatalf(err.Error()) + } + // Sanity check that body alone without the receipt is a full purge + WriteBody(db, hash, 0, body) + DeleteReceipts(db, hash, 0) - if rs := ReadReceipts(db, hash, 0); len(rs) != 0 { + if rs := ReadReceipts(db, hash, 0, params.TestChainConfig); len(rs) != 0 { t.Fatalf("deleted receipts returned: %v", rs) } } + +func checkReceiptsRLP(have, want types.Receipts) error { + if len(have) != len(want) { + return fmt.Errorf("receipts sizes mismatch: have %d, want %d", len(have), len(want)) + } + for i := 0; i < len(want); i++ { + rlpHave, err := rlp.EncodeToBytes(have[i]) + if err != nil { + return err + } + rlpWant, err := rlp.EncodeToBytes(want[i]) + if err != nil { + return err + } + if !bytes.Equal(rlpHave, rlpWant) { + return fmt.Errorf("receipt #%d: receipt mismatch: have %s, want %s", i, hex.EncodeToString(rlpHave), hex.EncodeToString(rlpWant)) + } + } + return nil +} diff --git a/core/rawdb/accessors_indexes.go b/core/rawdb/accessors_indexes.go index 4ff7e5bd35d3..38f8fe10ea94 100644 --- a/core/rawdb/accessors_indexes.go +++ b/core/rawdb/accessors_indexes.go @@ -17,90 +17,114 @@ package rawdb import ( + "math/big" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) // ReadTxLookupEntry retrieves the positional metadata associated with a transaction // hash to allow retrieving the transaction or receipt by hash. -func ReadTxLookupEntry(db DatabaseReader, hash common.Hash) (common.Hash, uint64, uint64) { +func ReadTxLookupEntry(db ethdb.Reader, hash common.Hash) *uint64 { data, _ := db.Get(txLookupKey(hash)) if len(data) == 0 { - return common.Hash{}, 0, 0 + return nil + } + // Database v6 tx lookup just stores the block number + if len(data) < common.HashLength { + number := new(big.Int).SetBytes(data).Uint64() + return &number } - var entry TxLookupEntry + // Database v4-v5 tx lookup format just stores the hash + if len(data) == common.HashLength { + return ReadHeaderNumber(db, common.BytesToHash(data)) + } + // Finally try database v3 tx lookup format + var entry LegacyTxLookupEntry if err := rlp.DecodeBytes(data, &entry); err != nil { - log.Error("Invalid transaction lookup entry RLP", "hash", hash, "err", err) - return common.Hash{}, 0, 0 + log.Error("Invalid transaction lookup entry RLP", "hash", hash, "blob", data, "err", err) + return nil } - return entry.BlockHash, entry.BlockIndex, entry.Index + return &entry.BlockIndex } // WriteTxLookupEntries stores a positional metadata for every transaction from // a block, enabling hash based transaction and receipt lookups. -func WriteTxLookupEntries(db DatabaseWriter, block *types.Block) { - for i, tx := range block.Transactions() { - entry := TxLookupEntry{ - BlockHash: block.Hash(), - BlockIndex: block.NumberU64(), - Index: uint64(i), - } - data, err := rlp.EncodeToBytes(entry) - if err != nil { - log.Crit("Failed to encode transaction lookup entry", "err", err) - } - if err := db.Put(txLookupKey(tx.Hash()), data); err != nil { +func WriteTxLookupEntries(db ethdb.KeyValueWriter, block *types.Block) { + number := block.Number().Bytes() + for _, tx := range block.Transactions() { + if err := db.Put(txLookupKey(tx.Hash()), number); err != nil { log.Crit("Failed to store transaction lookup entry", "err", err) } } } // DeleteTxLookupEntry removes all transaction data associated with a hash. -func DeleteTxLookupEntry(db DatabaseDeleter, hash common.Hash) { +func DeleteTxLookupEntry(db ethdb.KeyValueWriter, hash common.Hash) { db.Delete(txLookupKey(hash)) } // ReadTransaction retrieves a specific transaction from the database, along with // its added positional metadata. -func ReadTransaction(db DatabaseReader, hash common.Hash) (*types.Transaction, common.Hash, uint64, uint64) { - blockHash, blockNumber, txIndex := ReadTxLookupEntry(db, hash) +func ReadTransaction(db ethdb.Reader, hash common.Hash) (*types.Transaction, common.Hash, uint64, uint64) { + blockNumber := ReadTxLookupEntry(db, hash) + if blockNumber == nil { + return nil, common.Hash{}, 0, 0 + } + blockHash := ReadCanonicalHash(db, *blockNumber) if blockHash == (common.Hash{}) { return nil, common.Hash{}, 0, 0 } - body := ReadBody(db, blockHash, blockNumber) - if body == nil || len(body.Transactions) <= int(txIndex) { - log.Error("Transaction referenced missing", "number", blockNumber, "hash", blockHash, "index", txIndex) + body := ReadBody(db, blockHash, *blockNumber) + if body == nil { + log.Error("Transaction referenced missing", "number", blockNumber, "hash", blockHash) return nil, common.Hash{}, 0, 0 } - return body.Transactions[txIndex], blockHash, blockNumber, txIndex + for txIndex, tx := range body.Transactions { + if tx.Hash() == hash { + return tx, blockHash, *blockNumber, uint64(txIndex) + } + } + log.Error("Transaction not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + return nil, common.Hash{}, 0, 0 } // ReadReceipt retrieves a specific transaction receipt from the database, along with // its added positional metadata. -func ReadReceipt(db DatabaseReader, hash common.Hash) (*types.Receipt, common.Hash, uint64, uint64) { - blockHash, blockNumber, receiptIndex := ReadTxLookupEntry(db, hash) - if blockHash == (common.Hash{}) { +func ReadReceipt(db ethdb.Reader, hash common.Hash, config *params.ChainConfig) (*types.Receipt, common.Hash, uint64, uint64) { + // Retrieve the context of the receipt based on the transaction hash + blockNumber := ReadTxLookupEntry(db, hash) + if blockNumber == nil { return nil, common.Hash{}, 0, 0 } - receipts := ReadReceipts(db, blockHash, blockNumber) - if len(receipts) <= int(receiptIndex) { - log.Error("Receipt refereced missing", "number", blockNumber, "hash", blockHash, "index", receiptIndex) + blockHash := ReadCanonicalHash(db, *blockNumber) + if blockHash == (common.Hash{}) { return nil, common.Hash{}, 0, 0 } - return receipts[receiptIndex], blockHash, blockNumber, receiptIndex + // Read all the receipts from the block and return the one with the matching hash + receipts := ReadReceipts(db, blockHash, *blockNumber, config) + for receiptIndex, receipt := range receipts { + if receipt.TxHash == hash { + return receipt, blockHash, *blockNumber, uint64(receiptIndex) + } + } + log.Error("Receipt not found", "number", blockNumber, "hash", blockHash, "txhash", hash) + return nil, common.Hash{}, 0, 0 } // ReadBloomBits retrieves the compressed bloom bit vector belonging to the given // section and bit index from the. -func ReadBloomBits(db DatabaseReader, bit uint, section uint64, head common.Hash) ([]byte, error) { +func ReadBloomBits(db ethdb.KeyValueReader, bit uint, section uint64, head common.Hash) ([]byte, error) { return db.Get(bloomBitsKey(bit, section, head)) } // WriteBloomBits stores the compressed bloom bits vector belonging to the given // section and bit index. -func WriteBloomBits(db DatabaseWriter, bit uint, section uint64, head common.Hash, bits []byte) { +func WriteBloomBits(db ethdb.KeyValueWriter, bit uint, section uint64, head common.Hash, bits []byte) { if err := db.Put(bloomBitsKey(bit, section, head), bits); err != nil { log.Crit("Failed to store bloom bits", "err", err) } diff --git a/core/rawdb/accessors_indexes_test.go b/core/rawdb/accessors_indexes_test.go index d9c10e1490fa..c09bff010127 100644 --- a/core/rawdb/accessors_indexes_test.go +++ b/core/rawdb/accessors_indexes_test.go @@ -23,46 +23,86 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/rlp" ) // Tests that positional lookup metadata can be stored and retrieved. func TestLookupStorage(t *testing.T) { - db := ethdb.NewMemDatabase() + tests := []struct { + name string + writeTxLookupEntries func(ethdb.Writer, *types.Block) + }{ + { + "DatabaseV6", + func(db ethdb.Writer, block *types.Block) { + WriteTxLookupEntries(db, block) + }, + }, + { + "DatabaseV4-V5", + func(db ethdb.Writer, block *types.Block) { + for _, tx := range block.Transactions() { + db.Put(txLookupKey(tx.Hash()), block.Hash().Bytes()) + } + }, + }, + { + "DatabaseV3", + func(db ethdb.Writer, block *types.Block) { + for index, tx := range block.Transactions() { + entry := LegacyTxLookupEntry{ + BlockHash: block.Hash(), + BlockIndex: block.NumberU64(), + Index: uint64(index), + } + data, _ := rlp.EncodeToBytes(entry) + db.Put(txLookupKey(tx.Hash()), data) + } + }, + }, + } - tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) - tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22}) - tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33}) - txs := []*types.Transaction{tx1, tx2, tx3} + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + db := NewMemoryDatabase() - block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, nil) + tx1 := types.NewTransaction(1, common.BytesToAddress([]byte{0x11}), big.NewInt(111), 1111, big.NewInt(11111), []byte{0x11, 0x11, 0x11}) + tx2 := types.NewTransaction(2, common.BytesToAddress([]byte{0x22}), big.NewInt(222), 2222, big.NewInt(22222), []byte{0x22, 0x22, 0x22}) + tx3 := types.NewTransaction(3, common.BytesToAddress([]byte{0x33}), big.NewInt(333), 3333, big.NewInt(33333), []byte{0x33, 0x33, 0x33}) + txs := []*types.Transaction{tx1, tx2, tx3} - // Check that no transactions entries are in a pristine database - for i, tx := range txs { - if txn, _, _, _ := ReadTransaction(db, tx.Hash()); txn != nil { - t.Fatalf("tx #%d [%x]: non existent transaction returned: %v", i, tx.Hash(), txn) - } - } - // Insert all the transactions into the database, and verify contents - WriteBlock(db, block) - WriteTxLookupEntries(db, block) + block := types.NewBlock(&types.Header{Number: big.NewInt(314)}, txs, nil, nil) - for i, tx := range txs { - if txn, hash, number, index := ReadTransaction(db, tx.Hash()); txn == nil { - t.Fatalf("tx #%d [%x]: transaction not found", i, tx.Hash()) - } else { - if hash != block.Hash() || number != block.NumberU64() || index != uint64(i) { - t.Fatalf("tx #%d [%x]: positional metadata mismatch: have %x/%d/%d, want %x/%v/%v", i, tx.Hash(), hash, number, index, block.Hash(), block.NumberU64(), i) + // Check that no transactions entries are in a pristine database + for i, tx := range txs { + if txn, _, _, _ := ReadTransaction(db, tx.Hash()); txn != nil { + t.Fatalf("tx #%d [%x]: non existent transaction returned: %v", i, tx.Hash(), txn) + } } - if tx.Hash() != txn.Hash() { - t.Fatalf("tx #%d [%x]: transaction mismatch: have %v, want %v", i, tx.Hash(), txn, tx) + // Insert all the transactions into the database, and verify contents + WriteCanonicalHash(db, block.Hash(), block.NumberU64()) + WriteBlock(db, block) + tc.writeTxLookupEntries(db, block) + + for i, tx := range txs { + if txn, hash, number, index := ReadTransaction(db, tx.Hash()); txn == nil { + t.Fatalf("tx #%d [%x]: transaction not found", i, tx.Hash()) + } else { + if hash != block.Hash() || number != block.NumberU64() || index != uint64(i) { + t.Fatalf("tx #%d [%x]: positional metadata mismatch: have %x/%d/%d, want %x/%v/%v", i, tx.Hash(), hash, number, index, block.Hash(), block.NumberU64(), i) + } + if tx.Hash() != txn.Hash() { + t.Fatalf("tx #%d [%x]: transaction mismatch: have %v, want %v", i, tx.Hash(), txn, tx) + } + } } - } - } - // Delete the transactions and check purge - for i, tx := range txs { - DeleteTxLookupEntry(db, tx.Hash()) - if txn, _, _, _ := ReadTransaction(db, tx.Hash()); txn != nil { - t.Fatalf("tx #%d [%x]: deleted transaction returned: %v", i, tx.Hash(), txn) - } + // Delete the transactions and check purge + for i, tx := range txs { + DeleteTxLookupEntry(db, tx.Hash()) + if txn, _, _, _ := ReadTransaction(db, tx.Hash()); txn != nil { + t.Fatalf("tx #%d [%x]: deleted transaction returned: %v", i, tx.Hash(), txn) + } + } + }) } } diff --git a/core/rawdb/accessors_metadata.go b/core/rawdb/accessors_metadata.go index 82e4bf04558e..f8d09fbddf2d 100644 --- a/core/rawdb/accessors_metadata.go +++ b/core/rawdb/accessors_metadata.go @@ -20,13 +20,14 @@ import ( "encoding/json" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) // ReadDatabaseVersion retrieves the version number of the database. -func ReadDatabaseVersion(db DatabaseReader) *uint64 { +func ReadDatabaseVersion(db ethdb.KeyValueReader) *uint64 { var version uint64 enc, _ := db.Get(databaseVerisionKey) @@ -41,7 +42,7 @@ func ReadDatabaseVersion(db DatabaseReader) *uint64 { } // WriteDatabaseVersion stores the version number of the database -func WriteDatabaseVersion(db DatabaseWriter, version uint64) { +func WriteDatabaseVersion(db ethdb.KeyValueWriter, version uint64) { enc, err := rlp.EncodeToBytes(version) if err != nil { log.Crit("Failed to encode database version", "err", err) @@ -52,7 +53,7 @@ func WriteDatabaseVersion(db DatabaseWriter, version uint64) { } // ReadChainConfig retrieves the consensus settings based on the given genesis hash. -func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { +func ReadChainConfig(db ethdb.KeyValueReader, hash common.Hash) *params.ChainConfig { data, _ := db.Get(configKey(hash)) if len(data) == 0 { return nil @@ -66,7 +67,7 @@ func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { } // WriteChainConfig writes the chain config settings to the database. -func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConfig) { +func WriteChainConfig(db ethdb.KeyValueWriter, hash common.Hash, cfg *params.ChainConfig) { if cfg == nil { return } @@ -80,13 +81,13 @@ func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConf } // ReadPreimage retrieves a single preimage of the provided hash. -func ReadPreimage(db DatabaseReader, hash common.Hash) []byte { +func ReadPreimage(db ethdb.KeyValueReader, hash common.Hash) []byte { data, _ := db.Get(preimageKey(hash)) return data } // WritePreimages writes the provided set of preimages to the database. -func WritePreimages(db DatabaseWriter, preimages map[common.Hash][]byte) { +func WritePreimages(db ethdb.KeyValueWriter, preimages map[common.Hash][]byte) { for hash, preimage := range preimages { if err := db.Put(preimageKey(hash), preimage); err != nil { log.Crit("Failed to store trie preimage", "err", err) diff --git a/core/rawdb/database.go b/core/rawdb/database.go new file mode 100644 index 000000000000..fa16acb8a90f --- /dev/null +++ b/core/rawdb/database.go @@ -0,0 +1,398 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "bytes" + "errors" + "fmt" + "os" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/leveldb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/ethdb/rocksdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" + "github.com/olekukonko/tablewriter" +) + +// freezerdb is a database wrapper that enabled freezer data retrievals. +type freezerdb struct { + ethdb.KeyValueStore + ethdb.AncientStore +} + +// Close implements io.Closer, closing both the fast key-value store as well as +// the slow ancient tables. +func (frdb *freezerdb) Close() error { + var errs []error + if err := frdb.KeyValueStore.Close(); err != nil { + errs = append(errs, err) + } + if err := frdb.AncientStore.Close(); err != nil { + errs = append(errs, err) + } + if len(errs) != 0 { + return fmt.Errorf("%v", errs) + } + return nil +} + +// nofreezedb is a database wrapper that disables freezer data retrievals. +type nofreezedb struct { + ethdb.KeyValueStore +} + +// HasAncient returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) HasAncient(kind string, number uint64) (bool, error) { + return false, errNotSupported +} + +// Ancient returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) Ancient(kind string, number uint64) ([]byte, error) { + return nil, errNotSupported +} + +// Ancients returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) Ancients() (uint64, error) { + return 0, errNotSupported +} + +// AncientSize returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) AncientSize(kind string) (uint64, error) { + return 0, errNotSupported +} + +// AppendAncient returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) AppendAncient(number uint64, hash, header, body, receipts, td []byte) error { + return errNotSupported +} + +// TruncateAncients returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) TruncateAncients(items uint64) error { + return errNotSupported +} + +// Sync returns an error as we don't have a backing chain freezer. +func (db *nofreezedb) Sync() error { + return errNotSupported +} + +// NewDatabase creates a high level database on top of a given key-value data +// store without a freezer moving immutable chain segments into cold storage. +func NewDatabase(db ethdb.KeyValueStore) ethdb.Database { + return &nofreezedb{ + KeyValueStore: db, + } +} + +// NewDatabaseWithFreezer creates a high level database on top of a given key- +// value data store with a freezer moving immutable chain segments into cold +// storage. +func NewDatabaseWithFreezer(db ethdb.KeyValueStore, freezer string, namespace string) (ethdb.Database, error) { + // Create the idle freezer instance + frdb, err := newFreezer(freezer, namespace) + if err != nil { + return nil, err + } + // Since the freezer can be stored separately from the user's key-value database, + // there's a fairly high probability that the user requests invalid combinations + // of the freezer and database. Ensure that we don't shoot ourselves in the foot + // by serving up conflicting data, leading to both datastores getting corrupted. + // + // - If both the freezer and key-value store is empty (no genesis), we just + // initialized a new empty freezer, so everything's fine. + // - If the key-value store is empty, but the freezer is not, we need to make + // sure the user's genesis matches the freezer. That will be checked in the + // blockchain, since we don't have the genesis block here (nor should we at + // this point care, the key-value/freezer combo is valid). + // - If neither the key-value store nor the freezer is empty, cross validate + // the genesis hashes to make sure they are compatible. If they are, also + // ensure that there's no gap between the freezer and sunsequently leveldb. + // - If the key-value store is not empty, but the freezer is we might just be + // upgrading to the freezer release, or we might have had a small chain and + // not frozen anything yet. Ensure that no blocks are missing yet from the + // key-value store, since that would mean we already had an old freezer. + + // If the genesis hash is empty, we have a new key-value store, so nothing to + // validate in this method. If, however, the genesis hash is not nil, compare + // it to the freezer content. + if kvgenesis, _ := db.Get(headerHashKey(0)); len(kvgenesis) > 0 { + if frozen, _ := frdb.Ancients(); frozen > 0 { + // If the freezer already contains something, ensure that the genesis blocks + // match, otherwise we might mix up freezers across chains and destroy both + // the freezer and the key-value store. + if frgenesis, _ := frdb.Ancient(freezerHashTable, 0); !bytes.Equal(kvgenesis, frgenesis) { + return nil, fmt.Errorf("genesis mismatch: %#x (leveldb) != %#x (ancients)", kvgenesis, frgenesis) + } + // Key-value store and freezer belong to the same network. Ensure that they + // are contiguous, otherwise we might end up with a non-functional freezer. + if kvhash, _ := db.Get(headerHashKey(frozen)); len(kvhash) == 0 { + // Subsequent header after the freezer limit is missing from the database. + // Reject startup is the database has a more recent head. + if *ReadHeaderNumber(db, ReadHeadHeaderHash(db)) > frozen-1 { + return nil, fmt.Errorf("gap (#%d) in the chain between ancients and leveldb", frozen) + } + // Database contains only older data than the freezer, this happens if the + // state was wiped and reinited from an existing freezer. + } else { + // Key-value store continues where the freezer left off, all is fine. We might + // have duplicate blocks (crash after freezer write but before kay-value store + // deletion, but that's fine). + } + } else { + // If the freezer is empty, ensure nothing was moved yet from the key-value + // store, otherwise we'll end up missing data. We check block #1 to decide + // if we froze anything previously or not, but do take care of databases with + // only the genesis block. + if ReadHeadHeaderHash(db) != common.BytesToHash(kvgenesis) { + // Key-value store contains more data than the genesis block, make sure we + // didn't freeze anything yet. + if kvblob, _ := db.Get(headerHashKey(1)); len(kvblob) == 0 { + return nil, errors.New("ancient chain segments already extracted, please set --datadir.ancient to the correct path") + } + // Block #1 is still in the database, we're allowed to init a new feezer + } else { + // The head header is still the genesis, we're allowed to init a new feezer + } + } + } + // Freezer is consistent with the key-value database, permit combining the two + go frdb.freeze(db) + + return &freezerdb{ + KeyValueStore: db, + AncientStore: frdb, + }, nil +} + +// NewMemoryDatabase creates an ephemeral in-memory key-value database without a +// freezer moving immutable chain segments into cold storage. +func NewMemoryDatabase() ethdb.Database { + return NewDatabase(memorydb.New()) +} + +// NewMemoryDatabaseWithCap creates an ephemeral in-memory key-value database +// with an initial starting capacity, but without a freezer moving immutable +// chain segments into cold storage. +func NewMemoryDatabaseWithCap(size int) ethdb.Database { + return NewDatabase(memorydb.NewWithCap(size)) +} + +// NewLevelDBDatabase creates a persistent key-value database without a freezer +// moving immutable chain segments into cold storage. +func NewLevelDBDatabase(file string, cache int, handles int, namespace string) (ethdb.Database, error) { + db, err := leveldb.New(file, cache, handles, namespace) + if err != nil { + return nil, err + } + return NewDatabase(db), nil +} + +// NewLevelDBDatabaseWithFreezer creates a persistent key-value database with a +// freezer moving immutable chain segments into cold storage. +func NewLevelDBDatabaseWithFreezer(file string, cache int, handles int, freezer string, namespace string) (ethdb.Database, error) { + kvdb, err := leveldb.New(file, cache, handles, namespace) + if err != nil { + return nil, err + } + frdb, err := NewDatabaseWithFreezer(kvdb, freezer, namespace) + if err != nil { + kvdb.Close() + return nil, err + } + return frdb, nil +} + +// NewRocksDBDatabase creates a persistent key-value database without a freezer +// moving immutable chain segments into cold storage. +func NewRocksDBDatabase(file string, cache int, handles int, namespace string) (ethdb.Database, error) { + db, err := rocksdb.New(file, cache, handles, namespace) + if err != nil { + return nil, err + } + return NewDatabase(db), nil +} + +// NewRocksDBDatabaseWithFreezer creates a persistent key-value database with a +// freezer moving immutable chain segments into cold storage. +func NewRocksDBDatabaseWithFreezer(file string, cache int, handles int, freezer string, namespace string) (ethdb.Database, error) { + kvdb, err := rocksdb.New(file, cache, handles, namespace) + if err != nil { + return nil, err + } + frdb, err := NewDatabaseWithFreezer(kvdb, freezer, namespace) + if err != nil { + kvdb.Close() + return nil, err + } + return frdb, nil +} + +func NewDB(file string, cache int, handles int, namespace string) (ethdb.Database, error) { + if params.UseRocksDb != 0 { + return NewRocksDBDatabase(file, cache, handles, namespace) + } else { + return NewLevelDBDatabase(file, cache, handles, namespace) + } +} + +func NewDBWithFreezer(file string, cache int, handles int, freezer string, namespace string) (ethdb.Database, error) { + if params.UseRocksDb != 0 { + return NewRocksDBDatabaseWithFreezer(file, cache, handles, freezer, namespace) + } else { + return NewLevelDBDatabaseWithFreezer(file, cache, handles, freezer, namespace) + } +} + +// InspectDatabase traverses the entire database and checks the size +// of all different categories of data. +func InspectDatabase(db ethdb.Database) error { + it := db.NewIterator() + defer it.Release() + + var ( + count int64 + start = time.Now() + logged = time.Now() + + // Key-value store statistics + total common.StorageSize + headerSize common.StorageSize + bodySize common.StorageSize + receiptSize common.StorageSize + tdSize common.StorageSize + numHashPairing common.StorageSize + hashNumPairing common.StorageSize + trieSize common.StorageSize + txlookupSize common.StorageSize + preimageSize common.StorageSize + bloomBitsSize common.StorageSize + cliqueSnapsSize common.StorageSize + + // Ancient store statistics + ancientHeaders common.StorageSize + ancientBodies common.StorageSize + ancientReceipts common.StorageSize + ancientHashes common.StorageSize + ancientTds common.StorageSize + + // Les statistic + chtTrieNodes common.StorageSize + bloomTrieNodes common.StorageSize + + // Meta- and unaccounted data + metadata common.StorageSize + unaccounted common.StorageSize + ) + // Inspect key-value database first. + for it.Next() { + var ( + key = it.Key() + size = common.StorageSize(len(key) + len(it.Value())) + ) + total += size + switch { + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerTDSuffix): + tdSize += size + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix): + numHashPairing += size + case bytes.HasPrefix(key, headerPrefix) && len(key) == (len(headerPrefix)+8+common.HashLength): + headerSize += size + case bytes.HasPrefix(key, headerNumberPrefix) && len(key) == (len(headerNumberPrefix)+common.HashLength): + hashNumPairing += size + case bytes.HasPrefix(key, blockBodyPrefix) && len(key) == (len(blockBodyPrefix)+8+common.HashLength): + bodySize += size + case bytes.HasPrefix(key, blockReceiptsPrefix) && len(key) == (len(blockReceiptsPrefix)+8+common.HashLength): + receiptSize += size + case bytes.HasPrefix(key, txLookupPrefix) && len(key) == (len(txLookupPrefix)+common.HashLength): + txlookupSize += size + case bytes.HasPrefix(key, preimagePrefix) && len(key) == (len(preimagePrefix)+common.HashLength): + preimageSize += size + case bytes.HasPrefix(key, bloomBitsPrefix) && len(key) == (len(bloomBitsPrefix)+10+common.HashLength): + bloomBitsSize += size + case bytes.HasPrefix(key, []byte("clique-")) && len(key) == 7+common.HashLength: + cliqueSnapsSize += size + case bytes.HasPrefix(key, []byte("cht-")) && len(key) == 4+common.HashLength: + chtTrieNodes += size + case bytes.HasPrefix(key, []byte("blt-")) && len(key) == 4+common.HashLength: + bloomTrieNodes += size + case len(key) == common.HashLength: + trieSize += size + default: + var accounted bool + for _, meta := range [][]byte{databaseVerisionKey, headHeaderKey, headBlockKey, headFastBlockKey, fastTrieProgressKey} { + if bytes.Equal(key, meta) { + metadata += size + accounted = true + break + } + } + if !accounted { + unaccounted += size + } + } + count += 1 + if count%1000 == 0 && time.Since(logged) > 8*time.Second { + log.Info("Inspecting database", "count", count, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + // Inspect append-only file store then. + ancients := []*common.StorageSize{&ancientHeaders, &ancientBodies, &ancientReceipts, &ancientHashes, &ancientTds} + for i, category := range []string{freezerHeaderTable, freezerBodiesTable, freezerReceiptTable, freezerHashTable, freezerDifficultyTable} { + if size, err := db.AncientSize(category); err == nil { + *ancients[i] += common.StorageSize(size) + total += common.StorageSize(size) + } + } + // Display the database statistic. + stats := [][]string{ + {"Key-Value store", "Headers", headerSize.String()}, + {"Key-Value store", "Bodies", bodySize.String()}, + {"Key-Value store", "Receipts", receiptSize.String()}, + {"Key-Value store", "Difficulties", tdSize.String()}, + {"Key-Value store", "Block number->hash", numHashPairing.String()}, + {"Key-Value store", "Block hash->number", hashNumPairing.String()}, + {"Key-Value store", "Transaction index", txlookupSize.String()}, + {"Key-Value store", "Bloombit index", bloomBitsSize.String()}, + {"Key-Value store", "Trie nodes", trieSize.String()}, + {"Key-Value store", "Trie preimages", preimageSize.String()}, + {"Key-Value store", "Clique snapshots", cliqueSnapsSize.String()}, + {"Key-Value store", "Singleton metadata", metadata.String()}, + {"Ancient store", "Headers", ancientHeaders.String()}, + {"Ancient store", "Bodies", ancientBodies.String()}, + {"Ancient store", "Receipts", ancientReceipts.String()}, + {"Ancient store", "Difficulties", ancientTds.String()}, + {"Ancient store", "Block number->hash", ancientHashes.String()}, + {"Light client", "CHT trie nodes", chtTrieNodes.String()}, + {"Light client", "Bloom trie nodes", bloomTrieNodes.String()}, + } + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Database", "Category", "Size"}) + table.SetFooter([]string{"", "Total", total.String()}) + table.AppendBulk(stats) + table.Render() + + if unaccounted > 0 { + log.Error("Database contains unaccounted data", "size", unaccounted) + } + return nil +} diff --git a/core/rawdb/freezer.go b/core/rawdb/freezer.go new file mode 100644 index 000000000000..5497c59d4908 --- /dev/null +++ b/core/rawdb/freezer.go @@ -0,0 +1,393 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "errors" + "fmt" + "math" + "os" + "path/filepath" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/params" + "github.com/prometheus/tsdb/fileutil" +) + +var ( + // errUnknownTable is returned if the user attempts to read from a table that is + // not tracked by the freezer. + errUnknownTable = errors.New("unknown table") + + // errOutOrderInsertion is returned if the user attempts to inject out-of-order + // binary blobs into the freezer. + errOutOrderInsertion = errors.New("the append operation is out-order") + + // errSymlinkDatadir is returned if the ancient directory specified by user + // is a symbolic link. + errSymlinkDatadir = errors.New("symbolic link datadir is not supported") +) + +const ( + // freezerRecheckInterval is the frequency to check the key-value database for + // chain progression that might permit new blocks to be frozen into immutable + // storage. + freezerRecheckInterval = time.Minute + + // freezerBatchLimit is the maximum number of blocks to freeze in one batch + // before doing an fsync and deleting it from the key-value store. + freezerBatchLimit = 30000 +) + +// freezer is an memory mapped append-only database to store immutable chain data +// into flat files: +// +// - The append only nature ensures that disk writes are minimized. +// - The memory mapping ensures we can max out system memory for caching without +// reserving it for go-ethereum. This would also reduce the memory requirements +// of Geth, and thus also GC overhead. +type freezer struct { + // WARNING: The `frozen` field is accessed atomically. On 32 bit platforms, only + // 64-bit aligned fields can be atomic. The struct is guaranteed to be so aligned, + // so take advantage of that (https://golang.org/pkg/sync/atomic/#pkg-note-BUG). + frozen uint64 // Number of blocks already frozen + + tables map[string]*freezerTable // Data tables for storing everything + instanceLock fileutil.Releaser // File-system lock to prevent double opens +} + +// newFreezer creates a chain freezer that moves ancient chain data into +// append-only flat file containers. +func newFreezer(datadir string, namespace string) (*freezer, error) { + // Create the initial freezer object + var ( + readMeter = metrics.NewRegisteredMeter(namespace+"ancient/read", nil) + writeMeter = metrics.NewRegisteredMeter(namespace+"ancient/write", nil) + sizeGauge = metrics.NewRegisteredGauge(namespace+"ancient/size", nil) + ) + // Ensure the datadir is not a symbolic link if it exists. + if info, err := os.Lstat(datadir); !os.IsNotExist(err) { + if info.Mode()&os.ModeSymlink != 0 { + log.Warn("Symbolic link ancient database is not supported", "path", datadir) + return nil, errSymlinkDatadir + } + } + // Leveldb uses LOCK as the filelock filename. To prevent the + // name collision, we use FLOCK as the lock name. + lock, _, err := fileutil.Flock(filepath.Join(datadir, "FLOCK")) + if err != nil { + return nil, err + } + // Open all the supported data tables + freezer := &freezer{ + tables: make(map[string]*freezerTable), + instanceLock: lock, + } + for name, disableSnappy := range freezerNoSnappy { + table, err := newTable(datadir, name, readMeter, writeMeter, sizeGauge, disableSnappy) + if err != nil { + for _, table := range freezer.tables { + table.Close() + } + lock.Release() + return nil, err + } + freezer.tables[name] = table + } + if err := freezer.repair(); err != nil { + for _, table := range freezer.tables { + table.Close() + } + lock.Release() + return nil, err + } + log.Info("Opened ancient database", "database", datadir) + return freezer, nil +} + +// Close terminates the chain freezer, unmapping all the data files. +func (f *freezer) Close() error { + var errs []error + for _, table := range f.tables { + if err := table.Close(); err != nil { + errs = append(errs, err) + } + } + if err := f.instanceLock.Release(); err != nil { + errs = append(errs, err) + } + if errs != nil { + return fmt.Errorf("%v", errs) + } + return nil +} + +// HasAncient returns an indicator whether the specified ancient data exists +// in the freezer. +func (f *freezer) HasAncient(kind string, number uint64) (bool, error) { + if table := f.tables[kind]; table != nil { + return table.has(number), nil + } + return false, nil +} + +// Ancient retrieves an ancient binary blob from the append-only immutable files. +func (f *freezer) Ancient(kind string, number uint64) ([]byte, error) { + if table := f.tables[kind]; table != nil { + return table.Retrieve(number) + } + return nil, errUnknownTable +} + +// Ancients returns the length of the frozen items. +func (f *freezer) Ancients() (uint64, error) { + return atomic.LoadUint64(&f.frozen), nil +} + +// AncientSize returns the ancient size of the specified category. +func (f *freezer) AncientSize(kind string) (uint64, error) { + if table := f.tables[kind]; table != nil { + return table.size() + } + return 0, errUnknownTable +} + +// AppendAncient injects all binary blobs belong to block at the end of the +// append-only immutable table files. +// +// Notably, this function is lock free but kind of thread-safe. All out-of-order +// injection will be rejected. But if two injections with same number happen at +// the same time, we can get into the trouble. +func (f *freezer) AppendAncient(number uint64, hash, header, body, receipts, td []byte) (err error) { + // Ensure the binary blobs we are appending is continuous with freezer. + if atomic.LoadUint64(&f.frozen) != number { + return errOutOrderInsertion + } + // Rollback all inserted data if any insertion below failed to ensure + // the tables won't out of sync. + defer func() { + if err != nil { + rerr := f.repair() + if rerr != nil { + log.Crit("Failed to repair freezer", "err", rerr) + } + log.Info("Append ancient failed", "number", number, "err", err) + } + }() + // Inject all the components into the relevant data tables + if err := f.tables[freezerHashTable].Append(f.frozen, hash[:]); err != nil { + log.Error("Failed to append ancient hash", "number", f.frozen, "hash", hash, "err", err) + return err + } + if err := f.tables[freezerHeaderTable].Append(f.frozen, header); err != nil { + log.Error("Failed to append ancient header", "number", f.frozen, "hash", hash, "err", err) + return err + } + if err := f.tables[freezerBodiesTable].Append(f.frozen, body); err != nil { + log.Error("Failed to append ancient body", "number", f.frozen, "hash", hash, "err", err) + return err + } + if err := f.tables[freezerReceiptTable].Append(f.frozen, receipts); err != nil { + log.Error("Failed to append ancient receipts", "number", f.frozen, "hash", hash, "err", err) + return err + } + if err := f.tables[freezerDifficultyTable].Append(f.frozen, td); err != nil { + log.Error("Failed to append ancient difficulty", "number", f.frozen, "hash", hash, "err", err) + return err + } + atomic.AddUint64(&f.frozen, 1) // Only modify atomically + return nil +} + +// Truncate discards any recent data above the provided threshold number. +func (f *freezer) TruncateAncients(items uint64) error { + if atomic.LoadUint64(&f.frozen) <= items { + return nil + } + for _, table := range f.tables { + if err := table.truncate(items); err != nil { + return err + } + } + atomic.StoreUint64(&f.frozen, items) + return nil +} + +// sync flushes all data tables to disk. +func (f *freezer) Sync() error { + var errs []error + for _, table := range f.tables { + if err := table.Sync(); err != nil { + errs = append(errs, err) + } + } + if errs != nil { + return fmt.Errorf("%v", errs) + } + return nil +} + +// freeze is a background thread that periodically checks the blockchain for any +// import progress and moves ancient data from the fast database into the freezer. +// +// This functionality is deliberately broken off from block importing to avoid +// incurring additional data shuffling delays on block propagation. +func (f *freezer) freeze(db ethdb.KeyValueStore) { + nfdb := &nofreezedb{KeyValueStore: db} + + for { + // Retrieve the freezing threshold. + hash := ReadHeadBlockHash(nfdb) + if hash == (common.Hash{}) { + log.Debug("Current full block hash unavailable") // new chain, empty database + time.Sleep(freezerRecheckInterval) + continue + } + number := ReadHeaderNumber(nfdb, hash) + switch { + case number == nil: + log.Error("Current full block number unavailable", "hash", hash) + time.Sleep(freezerRecheckInterval) + continue + + case *number < params.ImmutabilityThreshold: + log.Debug("Current full block not old enough", "number", *number, "hash", hash, "delay", params.ImmutabilityThreshold) + time.Sleep(freezerRecheckInterval) + continue + + case *number-params.ImmutabilityThreshold <= f.frozen: + log.Debug("Ancient blocks frozen already", "number", *number, "hash", hash, "frozen", f.frozen) + time.Sleep(freezerRecheckInterval) + continue + } + head := ReadHeader(nfdb, hash, *number) + if head == nil { + log.Error("Current full block unavailable", "number", *number, "hash", hash) + time.Sleep(freezerRecheckInterval) + continue + } + // Seems we have data ready to be frozen, process in usable batches + limit := *number - params.ImmutabilityThreshold + if limit-f.frozen > freezerBatchLimit { + limit = f.frozen + freezerBatchLimit + } + var ( + start = time.Now() + first = f.frozen + ancients = make([]common.Hash, 0, limit) + ) + for f.frozen < limit { + // Retrieves all the components of the canonical block + hash := ReadCanonicalHash(nfdb, f.frozen) + if hash == (common.Hash{}) { + log.Error("Canonical hash missing, can't freeze", "number", f.frozen) + break + } + header := ReadHeaderRLP(nfdb, hash, f.frozen) + if len(header) == 0 { + log.Error("Block header missing, can't freeze", "number", f.frozen, "hash", hash) + break + } + body := ReadBodyRLP(nfdb, hash, f.frozen) + if len(body) == 0 { + log.Error("Block body missing, can't freeze", "number", f.frozen, "hash", hash) + break + } + receipts := ReadReceiptsRLP(nfdb, hash, f.frozen) + if len(receipts) == 0 { + log.Error("Block receipts missing, can't freeze", "number", f.frozen, "hash", hash) + break + } + td := ReadTdRLP(nfdb, hash, f.frozen) + if len(td) == 0 { + log.Error("Total difficulty missing, can't freeze", "number", f.frozen, "hash", hash) + break + } + log.Trace("Deep froze ancient block", "number", f.frozen, "hash", hash) + // Inject all the components into the relevant data tables + if err := f.AppendAncient(f.frozen, hash[:], header, body, receipts, td); err != nil { + break + } + ancients = append(ancients, hash) + } + // Batch of blocks have been frozen, flush them before wiping from leveldb + if err := f.Sync(); err != nil { + log.Crit("Failed to flush frozen tables", "err", err) + } + // Wipe out all data from the active database + batch := db.NewBatch() + for i := 0; i < len(ancients); i++ { + // Always keep the genesis block in active database + if first+uint64(i) != 0 { + DeleteBlockWithoutNumber(batch, ancients[i], first+uint64(i)) + DeleteCanonicalHash(batch, first+uint64(i)) + } + } + if err := batch.Write(); err != nil { + log.Crit("Failed to delete frozen canonical blocks", "err", err) + } + batch.Reset() + // Wipe out side chain also. + for number := first; number < f.frozen; number++ { + // Always keep the genesis block in active database + if number != 0 { + for _, hash := range ReadAllHashes(db, number) { + DeleteBlock(batch, hash, number) + } + } + } + if err := batch.Write(); err != nil { + log.Crit("Failed to delete frozen side blocks", "err", err) + } + // Log something friendly for the user + context := []interface{}{ + "blocks", f.frozen - first, "elapsed", common.PrettyDuration(time.Since(start)), "number", f.frozen - 1, + } + if n := len(ancients); n > 0 { + context = append(context, []interface{}{"hash", ancients[n-1]}...) + } + log.Info("Deep froze chain segment", context...) + + // Avoid database thrashing with tiny writes + if f.frozen-first < freezerBatchLimit { + time.Sleep(freezerRecheckInterval) + } + } +} + +// repair truncates all data tables to the same length. +func (f *freezer) repair() error { + min := uint64(math.MaxUint64) + for _, table := range f.tables { + items := atomic.LoadUint64(&table.items) + if min > items { + min = items + } + } + for _, table := range f.tables { + if err := table.truncate(min); err != nil { + return err + } + } + atomic.StoreUint64(&f.frozen, min) + return nil +} diff --git a/core/rawdb/freezer_reinit.go b/core/rawdb/freezer_reinit.go new file mode 100644 index 000000000000..ea4dd33d1d6b --- /dev/null +++ b/core/rawdb/freezer_reinit.go @@ -0,0 +1,127 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "errors" + "runtime" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// InitDatabaseFromFreezer reinitializes an empty database from a previous batch +// of frozen ancient blocks. The method iterates over all the frozen blocks and +// injects into the database the block hash->number mappings and the transaction +// lookup entries. +func InitDatabaseFromFreezer(db ethdb.Database) error { + // If we can't access the freezer or it's empty, abort + frozen, err := db.Ancients() + if err != nil || frozen == 0 { + return err + } + // Blocks previously frozen, iterate over- and hash them concurrently + var ( + number = ^uint64(0) // -1 + results = make(chan *types.Block, 4*runtime.NumCPU()) + ) + abort := make(chan struct{}) + defer close(abort) + + for i := 0; i < runtime.NumCPU(); i++ { + go func() { + for { + // Fetch the next task number, terminating if everything's done + n := atomic.AddUint64(&number, 1) + if n >= frozen { + return + } + // Retrieve the block from the freezer (no need for the hash, we pull by + // number from the freezer). If successful, pre-cache the block hash and + // the individual transaction hashes for storing into the database. + block := ReadBlock(db, common.Hash{}, n) + if block != nil { + block.Hash() + for _, tx := range block.Transactions() { + tx.Hash() + } + } + // Feed the block to the aggregator, or abort on interrupt + select { + case results <- block: + case <-abort: + return + } + } + }() + } + // Reassemble the blocks into a contiguous stream and push them out to disk + var ( + queue = prque.New(nil) + next = int64(0) + + batch = db.NewBatch() + start = time.Now() + logged time.Time + ) + for i := uint64(0); i < frozen; i++ { + // Retrieve the next result and bail if it's nil + block := <-results + if block == nil { + return errors.New("broken ancient database") + } + // Push the block into the import queue and process contiguous ranges + queue.Push(block, -int64(block.NumberU64())) + for !queue.Empty() { + // If the next available item is gapped, return + if _, priority := queue.Peek(); -priority != next { + break + } + // Next block available, pop it off and index it + block = queue.PopItem().(*types.Block) + next++ + + // Inject hash<->number mapping and txlookup indexes + WriteHeaderNumber(batch, block.Hash(), block.NumberU64()) + WriteTxLookupEntries(batch, block) + + // If enough data was accumulated in memory or we're at the last block, dump to disk + if batch.ValueSize() > ethdb.IdealBatchSize || uint64(next) == frozen { + if err := batch.Write(); err != nil { + return err + } + batch.Reset() + } + // If we've spent too much time already, notify the user of what we're doing + if time.Since(logged) > 8*time.Second { + log.Info("Initializing chain from ancient data", "number", block.Number(), "hash", block.Hash(), "total", frozen-1, "elapsed", common.PrettyDuration(time.Since(start))) + logged = time.Now() + } + } + } + hash := ReadCanonicalHash(db, frozen-1) + WriteHeadHeaderHash(db, hash) + WriteHeadFastBlockHash(db, hash) + + log.Info("Initialized chain from ancient data", "number", frozen-1, "hash", hash, "elapsed", common.PrettyDuration(time.Since(start))) + return nil +} diff --git a/core/rawdb/freezer_table.go b/core/rawdb/freezer_table.go new file mode 100644 index 000000000000..9fb341f02558 --- /dev/null +++ b/core/rawdb/freezer_table.go @@ -0,0 +1,637 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "encoding/binary" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/golang/snappy" +) + +var ( + // errClosed is returned if an operation attempts to read from or write to the + // freezer table after it has already been closed. + errClosed = errors.New("closed") + + // errOutOfBounds is returned if the item requested is not contained within the + // freezer table. + errOutOfBounds = errors.New("out of bounds") + + // errNotSupported is returned if the database doesn't support the required operation. + errNotSupported = errors.New("this operation is not supported") +) + +// indexEntry contains the number/id of the file that the data resides in, aswell as the +// offset within the file to the end of the data +// In serialized form, the filenum is stored as uint16. +type indexEntry struct { + filenum uint32 // stored as uint16 ( 2 bytes) + offset uint32 // stored as uint32 ( 4 bytes) +} + +const indexEntrySize = 6 + +// unmarshallBinary deserializes binary b into the rawIndex entry. +func (i *indexEntry) unmarshalBinary(b []byte) error { + i.filenum = uint32(binary.BigEndian.Uint16(b[:2])) + i.offset = binary.BigEndian.Uint32(b[2:6]) + return nil +} + +// marshallBinary serializes the rawIndex entry into binary. +func (i *indexEntry) marshallBinary() []byte { + b := make([]byte, indexEntrySize) + binary.BigEndian.PutUint16(b[:2], uint16(i.filenum)) + binary.BigEndian.PutUint32(b[2:6], i.offset) + return b +} + +// freezerTable represents a single chained data table within the freezer (e.g. blocks). +// It consists of a data file (snappy encoded arbitrary data blobs) and an indexEntry +// file (uncompressed 64 bit indices into the data file). +type freezerTable struct { + // WARNING: The `items` field is accessed atomically. On 32 bit platforms, only + // 64-bit aligned fields can be atomic. The struct is guaranteed to be so aligned, + // so take advantage of that (https://golang.org/pkg/sync/atomic/#pkg-note-BUG). + items uint64 // Number of items stored in the table (including items removed from tail) + + noCompression bool // if true, disables snappy compression. Note: does not work retroactively + maxFileSize uint32 // Max file size for data-files + name string + path string + + head *os.File // File descriptor for the data head of the table + files map[uint32]*os.File // open files + headId uint32 // number of the currently active head file + tailId uint32 // number of the earliest file + index *os.File // File descriptor for the indexEntry file of the table + + // In the case that old items are deleted (from the tail), we use itemOffset + // to count how many historic items have gone missing. + itemOffset uint32 // Offset (number of discarded items) + + headBytes uint32 // Number of bytes written to the head file + readMeter metrics.Meter // Meter for measuring the effective amount of data read + writeMeter metrics.Meter // Meter for measuring the effective amount of data written + sizeGauge metrics.Gauge // Gauge for tracking the combined size of all freezer tables + + logger log.Logger // Logger with database path and table name ambedded + lock sync.RWMutex // Mutex protecting the data file descriptors +} + +// newTable opens a freezer table with default settings - 2G files +func newTable(path string, name string, readMeter metrics.Meter, writeMeter metrics.Meter, sizeGauge metrics.Gauge, disableSnappy bool) (*freezerTable, error) { + return newCustomTable(path, name, readMeter, writeMeter, sizeGauge, 2*1000*1000*1000, disableSnappy) +} + +// openFreezerFileForAppend opens a freezer table file and seeks to the end +func openFreezerFileForAppend(filename string) (*os.File, error) { + // Open the file without the O_APPEND flag + // because it has differing behaviour during Truncate operations + // on different OS's + file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0644) + if err != nil { + return nil, err + } + // Seek to end for append + if _, err = file.Seek(0, io.SeekEnd); err != nil { + return nil, err + } + return file, nil +} + +// openFreezerFileForReadOnly opens a freezer table file for read only access +func openFreezerFileForReadOnly(filename string) (*os.File, error) { + return os.OpenFile(filename, os.O_RDONLY, 0644) +} + +// openFreezerFileTruncated opens a freezer table making sure it is truncated +func openFreezerFileTruncated(filename string) (*os.File, error) { + return os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) +} + +// truncateFreezerFile resizes a freezer table file and seeks to the end +func truncateFreezerFile(file *os.File, size int64) error { + if err := file.Truncate(size); err != nil { + return err + } + // Seek to end for append + if _, err := file.Seek(0, io.SeekEnd); err != nil { + return err + } + return nil +} + +// newCustomTable opens a freezer table, creating the data and index files if they are +// non existent. Both files are truncated to the shortest common length to ensure +// they don't go out of sync. +func newCustomTable(path string, name string, readMeter metrics.Meter, writeMeter metrics.Meter, sizeGauge metrics.Gauge, maxFilesize uint32, noCompression bool) (*freezerTable, error) { + // Ensure the containing directory exists and open the indexEntry file + if err := os.MkdirAll(path, 0755); err != nil { + return nil, err + } + var idxName string + if noCompression { + // Raw idx + idxName = fmt.Sprintf("%s.ridx", name) + } else { + // Compressed idx + idxName = fmt.Sprintf("%s.cidx", name) + } + offsets, err := openFreezerFileForAppend(filepath.Join(path, idxName)) + if err != nil { + return nil, err + } + // Create the table and repair any past inconsistency + tab := &freezerTable{ + index: offsets, + files: make(map[uint32]*os.File), + readMeter: readMeter, + writeMeter: writeMeter, + sizeGauge: sizeGauge, + name: name, + path: path, + logger: log.New("database", path, "table", name), + noCompression: noCompression, + maxFileSize: maxFilesize, + } + if err := tab.repair(); err != nil { + tab.Close() + return nil, err + } + // Initialize the starting size counter + size, err := tab.sizeNolock() + if err != nil { + tab.Close() + return nil, err + } + tab.sizeGauge.Inc(int64(size)) + + return tab, nil +} + +// repair cross checks the head and the index file and truncates them to +// be in sync with each other after a potential crash / data loss. +func (t *freezerTable) repair() error { + // Create a temporary offset buffer to init files with and read indexEntry into + buffer := make([]byte, indexEntrySize) + + // If we've just created the files, initialize the index with the 0 indexEntry + stat, err := t.index.Stat() + if err != nil { + return err + } + if stat.Size() == 0 { + if _, err := t.index.Write(buffer); err != nil { + return err + } + } + // Ensure the index is a multiple of indexEntrySize bytes + if overflow := stat.Size() % indexEntrySize; overflow != 0 { + truncateFreezerFile(t.index, stat.Size()-overflow) // New file can't trigger this path + } + // Retrieve the file sizes and prepare for truncation + if stat, err = t.index.Stat(); err != nil { + return err + } + offsetsSize := stat.Size() + + // Open the head file + var ( + firstIndex indexEntry + lastIndex indexEntry + contentSize int64 + contentExp int64 + ) + // Read index zero, determine what file is the earliest + // and what item offset to use + t.index.ReadAt(buffer, 0) + firstIndex.unmarshalBinary(buffer) + + t.tailId = firstIndex.offset + t.itemOffset = firstIndex.filenum + + t.index.ReadAt(buffer, offsetsSize-indexEntrySize) + lastIndex.unmarshalBinary(buffer) + t.head, err = t.openFile(lastIndex.filenum, openFreezerFileForAppend) + if err != nil { + return err + } + if stat, err = t.head.Stat(); err != nil { + return err + } + contentSize = stat.Size() + + // Keep truncating both files until they come in sync + contentExp = int64(lastIndex.offset) + + for contentExp != contentSize { + // Truncate the head file to the last offset pointer + if contentExp < contentSize { + t.logger.Warn("Truncating dangling head", "indexed", common.StorageSize(contentExp), "stored", common.StorageSize(contentSize)) + if err := truncateFreezerFile(t.head, contentExp); err != nil { + return err + } + contentSize = contentExp + } + // Truncate the index to point within the head file + if contentExp > contentSize { + t.logger.Warn("Truncating dangling indexes", "indexed", common.StorageSize(contentExp), "stored", common.StorageSize(contentSize)) + if err := truncateFreezerFile(t.index, offsetsSize-indexEntrySize); err != nil { + return err + } + offsetsSize -= indexEntrySize + t.index.ReadAt(buffer, offsetsSize-indexEntrySize) + var newLastIndex indexEntry + newLastIndex.unmarshalBinary(buffer) + // We might have slipped back into an earlier head-file here + if newLastIndex.filenum != lastIndex.filenum { + // Release earlier opened file + t.releaseFile(lastIndex.filenum) + if t.head, err = t.openFile(newLastIndex.filenum, openFreezerFileForAppend); err != nil { + return err + } + if stat, err = t.head.Stat(); err != nil { + // TODO, anything more we can do here? + // A data file has gone missing... + return err + } + contentSize = stat.Size() + } + lastIndex = newLastIndex + contentExp = int64(lastIndex.offset) + } + } + // Ensure all reparation changes have been written to disk + if err := t.index.Sync(); err != nil { + return err + } + if err := t.head.Sync(); err != nil { + return err + } + // Update the item and byte counters and return + t.items = uint64(t.itemOffset) + uint64(offsetsSize/indexEntrySize-1) // last indexEntry points to the end of the data file + t.headBytes = uint32(contentSize) + t.headId = lastIndex.filenum + + // Close opened files and preopen all files + if err := t.preopen(); err != nil { + return err + } + t.logger.Debug("Chain freezer table opened", "items", t.items, "size", common.StorageSize(t.headBytes)) + return nil +} + +// preopen opens all files that the freezer will need. This method should be called from an init-context, +// since it assumes that it doesn't have to bother with locking +// The rationale for doing preopen is to not have to do it from within Retrieve, thus not needing to ever +// obtain a write-lock within Retrieve. +func (t *freezerTable) preopen() (err error) { + // The repair might have already opened (some) files + t.releaseFilesAfter(0, false) + // Open all except head in RDONLY + for i := t.tailId; i < t.headId; i++ { + if _, err = t.openFile(i, openFreezerFileForReadOnly); err != nil { + return err + } + } + // Open head in read/write + t.head, err = t.openFile(t.headId, openFreezerFileForAppend) + return err +} + +// truncate discards any recent data above the provided threshold number. +func (t *freezerTable) truncate(items uint64) error { + t.lock.Lock() + defer t.lock.Unlock() + + // If our item count is correct, don't do anything + if atomic.LoadUint64(&t.items) <= items { + return nil + } + // We need to truncate, save the old size for metrics tracking + oldSize, err := t.sizeNolock() + if err != nil { + return err + } + // Something's out of sync, truncate the table's offset index + t.logger.Warn("Truncating freezer table", "items", t.items, "limit", items) + if err := truncateFreezerFile(t.index, int64(items+1)*indexEntrySize); err != nil { + return err + } + // Calculate the new expected size of the data file and truncate it + buffer := make([]byte, indexEntrySize) + if _, err := t.index.ReadAt(buffer, int64(items*indexEntrySize)); err != nil { + return err + } + var expected indexEntry + expected.unmarshalBinary(buffer) + + // We might need to truncate back to older files + if expected.filenum != t.headId { + // If already open for reading, force-reopen for writing + t.releaseFile(expected.filenum) + newHead, err := t.openFile(expected.filenum, openFreezerFileForAppend) + if err != nil { + return err + } + // Release any files _after the current head -- both the previous head + // and any files which may have been opened for reading + t.releaseFilesAfter(expected.filenum, true) + // Set back the historic head + t.head = newHead + atomic.StoreUint32(&t.headId, expected.filenum) + } + if err := truncateFreezerFile(t.head, int64(expected.offset)); err != nil { + return err + } + // All data files truncated, set internal counters and return + atomic.StoreUint64(&t.items, items) + atomic.StoreUint32(&t.headBytes, expected.offset) + + // Retrieve the new size and update the total size counter + newSize, err := t.sizeNolock() + if err != nil { + return err + } + t.sizeGauge.Dec(int64(oldSize - newSize)) + + return nil +} + +// Close closes all opened files. +func (t *freezerTable) Close() error { + t.lock.Lock() + defer t.lock.Unlock() + + var errs []error + if err := t.index.Close(); err != nil { + errs = append(errs, err) + } + t.index = nil + + for _, f := range t.files { + if err := f.Close(); err != nil { + errs = append(errs, err) + } + } + t.head = nil + + if errs != nil { + return fmt.Errorf("%v", errs) + } + return nil +} + +// openFile assumes that the write-lock is held by the caller +func (t *freezerTable) openFile(num uint32, opener func(string) (*os.File, error)) (f *os.File, err error) { + var exist bool + if f, exist = t.files[num]; !exist { + var name string + if t.noCompression { + name = fmt.Sprintf("%s.%04d.rdat", t.name, num) + } else { + name = fmt.Sprintf("%s.%04d.cdat", t.name, num) + } + f, err = opener(filepath.Join(t.path, name)) + if err != nil { + return nil, err + } + t.files[num] = f + } + return f, err +} + +// releaseFile closes a file, and removes it from the open file cache. +// Assumes that the caller holds the write lock +func (t *freezerTable) releaseFile(num uint32) { + if f, exist := t.files[num]; exist { + delete(t.files, num) + f.Close() + } +} + +// releaseFilesAfter closes all open files with a higher number, and optionally also deletes the files +func (t *freezerTable) releaseFilesAfter(num uint32, remove bool) { + for fnum, f := range t.files { + if fnum > num { + delete(t.files, fnum) + f.Close() + if remove { + os.Remove(f.Name()) + } + } + } +} + +// Append injects a binary blob at the end of the freezer table. The item number +// is a precautionary parameter to ensure data correctness, but the table will +// reject already existing data. +// +// Note, this method will *not* flush any data to disk so be sure to explicitly +// fsync before irreversibly deleting data from the database. +func (t *freezerTable) Append(item uint64, blob []byte) error { + // Read lock prevents competition with truncate + t.lock.RLock() + // Ensure the table is still accessible + if t.index == nil || t.head == nil { + t.lock.RUnlock() + return errClosed + } + // Ensure only the next item can be written, nothing else + if atomic.LoadUint64(&t.items) != item { + t.lock.RUnlock() + return fmt.Errorf("appending unexpected item: want %d, have %d", t.items, item) + } + // Encode the blob and write it into the data file + if !t.noCompression { + blob = snappy.Encode(nil, blob) + } + bLen := uint32(len(blob)) + if t.headBytes+bLen < bLen || + t.headBytes+bLen > t.maxFileSize { + // we need a new file, writing would overflow + t.lock.RUnlock() + t.lock.Lock() + nextID := atomic.LoadUint32(&t.headId) + 1 + // We open the next file in truncated mode -- if this file already + // exists, we need to start over from scratch on it + newHead, err := t.openFile(nextID, openFreezerFileTruncated) + if err != nil { + t.lock.Unlock() + return err + } + // Close old file, and reopen in RDONLY mode + t.releaseFile(t.headId) + t.openFile(t.headId, openFreezerFileForReadOnly) + + // Swap out the current head + t.head = newHead + atomic.StoreUint32(&t.headBytes, 0) + atomic.StoreUint32(&t.headId, nextID) + t.lock.Unlock() + t.lock.RLock() + } + + defer t.lock.RUnlock() + if _, err := t.head.Write(blob); err != nil { + return err + } + newOffset := atomic.AddUint32(&t.headBytes, bLen) + idx := indexEntry{ + filenum: atomic.LoadUint32(&t.headId), + offset: newOffset, + } + // Write indexEntry + t.index.Write(idx.marshallBinary()) + + t.writeMeter.Mark(int64(bLen + indexEntrySize)) + t.sizeGauge.Inc(int64(bLen + indexEntrySize)) + + atomic.AddUint64(&t.items, 1) + return nil +} + +// getBounds returns the indexes for the item +// returns start, end, filenumber and error +func (t *freezerTable) getBounds(item uint64) (uint32, uint32, uint32, error) { + var startIdx, endIdx indexEntry + buffer := make([]byte, indexEntrySize) + if _, err := t.index.ReadAt(buffer, int64(item*indexEntrySize)); err != nil { + return 0, 0, 0, err + } + startIdx.unmarshalBinary(buffer) + if _, err := t.index.ReadAt(buffer, int64((item+1)*indexEntrySize)); err != nil { + return 0, 0, 0, err + } + endIdx.unmarshalBinary(buffer) + if startIdx.filenum != endIdx.filenum { + // If a piece of data 'crosses' a data-file, + // it's actually in one piece on the second data-file. + // We return a zero-indexEntry for the second file as start + return 0, endIdx.offset, endIdx.filenum, nil + } + return startIdx.offset, endIdx.offset, endIdx.filenum, nil +} + +// Retrieve looks up the data offset of an item with the given number and retrieves +// the raw binary blob from the data file. +func (t *freezerTable) Retrieve(item uint64) ([]byte, error) { + // Ensure the table and the item is accessible + if t.index == nil || t.head == nil { + return nil, errClosed + } + if atomic.LoadUint64(&t.items) <= item { + return nil, errOutOfBounds + } + // Ensure the item was not deleted from the tail either + offset := atomic.LoadUint32(&t.itemOffset) + if uint64(offset) > item { + return nil, errOutOfBounds + } + t.lock.RLock() + startOffset, endOffset, filenum, err := t.getBounds(item - uint64(offset)) + if err != nil { + t.lock.RUnlock() + return nil, err + } + dataFile, exist := t.files[filenum] + if !exist { + t.lock.RUnlock() + return nil, fmt.Errorf("missing data file %d", filenum) + } + // Retrieve the data itself, decompress and return + blob := make([]byte, endOffset-startOffset) + if _, err := dataFile.ReadAt(blob, int64(startOffset)); err != nil { + t.lock.RUnlock() + return nil, err + } + t.lock.RUnlock() + t.readMeter.Mark(int64(len(blob) + 2*indexEntrySize)) + + if t.noCompression { + return blob, nil + } + return snappy.Decode(nil, blob) +} + +// has returns an indicator whether the specified number data +// exists in the freezer table. +func (t *freezerTable) has(number uint64) bool { + return atomic.LoadUint64(&t.items) > number +} + +// size returns the total data size in the freezer table. +func (t *freezerTable) size() (uint64, error) { + t.lock.RLock() + defer t.lock.RUnlock() + + return t.sizeNolock() +} + +// sizeNolock returns the total data size in the freezer table without obtaining +// the mutex first. +func (t *freezerTable) sizeNolock() (uint64, error) { + stat, err := t.index.Stat() + if err != nil { + return 0, err + } + total := uint64(t.maxFileSize)*uint64(t.headId-t.tailId) + uint64(t.headBytes) + uint64(stat.Size()) + return total, nil +} + +// Sync pushes any pending data from memory out to disk. This is an expensive +// operation, so use it with care. +func (t *freezerTable) Sync() error { + if err := t.index.Sync(); err != nil { + return err + } + return t.head.Sync() +} + +// printIndex is a debug print utility function for testing +func (t *freezerTable) printIndex() { + buf := make([]byte, indexEntrySize) + + fmt.Printf("|-----------------|\n") + fmt.Printf("| fileno | offset |\n") + fmt.Printf("|--------+--------|\n") + + for i := uint64(0); ; i++ { + if _, err := t.index.ReadAt(buf, int64(i*indexEntrySize)); err != nil { + break + } + var entry indexEntry + entry.unmarshalBinary(buf) + fmt.Printf("| %03d | %03d | \n", entry.filenum, entry.offset) + if i > 100 { + fmt.Printf(" ... \n") + break + } + } + fmt.Printf("|-----------------|\n") +} diff --git a/core/rawdb/freezer_table_test.go b/core/rawdb/freezer_table_test.go new file mode 100644 index 000000000000..7de10815176c --- /dev/null +++ b/core/rawdb/freezer_table_test.go @@ -0,0 +1,624 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "bytes" + "fmt" + "math/rand" + "os" + "path/filepath" + "testing" + "time" + + "github.com/ethereum/go-ethereum/metrics" +) + +func init() { + rand.Seed(time.Now().Unix()) +} + +// Gets a chunk of data, filled with 'b' +func getChunk(size int, b int) []byte { + data := make([]byte, size) + for i := range data { + data[i] = byte(b) + } + return data +} + +func print(t *testing.T, f *freezerTable, item uint64) { + a, err := f.Retrieve(item) + if err != nil { + t.Fatal(err) + } + t.Logf("db[%d] = %x\n", item, a) +} + +// TestFreezerBasics test initializing a freezertable from scratch, writing to the table, +// and reading it back. +func TestFreezerBasics(t *testing.T) { + t.Parallel() + // set cutoff at 50 bytes + f, err := newCustomTable(os.TempDir(), + fmt.Sprintf("unittest-%d", rand.Uint64()), + metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 50, true) + if err != nil { + t.Fatal(err) + } + defer f.Close() + // Write 15 bytes 255 times, results in 85 files + for x := 0; x < 255; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + + //print(t, f, 0) + //print(t, f, 1) + //print(t, f, 2) + // + //db[0] = 000000000000000000000000000000 + //db[1] = 010101010101010101010101010101 + //db[2] = 020202020202020202020202020202 + + for y := 0; y < 255; y++ { + exp := getChunk(15, y) + got, err := f.Retrieve(uint64(y)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, exp) { + t.Fatalf("test %d, got \n%x != \n%x", y, got, exp) + } + } + // Check that we cannot read too far + _, err = f.Retrieve(uint64(255)) + if err != errOutOfBounds { + t.Fatal(err) + } +} + +// TestFreezerBasicsClosing tests same as TestFreezerBasics, but also closes and reopens the freezer between +// every operation +func TestFreezerBasicsClosing(t *testing.T) { + t.Parallel() + // set cutoff at 50 bytes + var ( + fname = fmt.Sprintf("basics-close-%d", rand.Uint64()) + rm, wm, sg = metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + f *freezerTable + err error + ) + f, err = newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 255 times, results in 85 files + for x := 0; x < 255; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + f.Close() + f, err = newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + } + defer f.Close() + + for y := 0; y < 255; y++ { + exp := getChunk(15, y) + got, err := f.Retrieve(uint64(y)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, exp) { + t.Fatalf("test %d, got \n%x != \n%x", y, got, exp) + } + f.Close() + f, err = newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + } +} + +// TestFreezerRepairDanglingHead tests that we can recover if index entries are removed +func TestFreezerRepairDanglingHead(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("dangling_headtest-%d", rand.Uint64()) + + { // Fill table + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 255 times + for x := 0; x < 255; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + // The last item should be there + if _, err = f.Retrieve(0xfe); err != nil { + t.Fatal(err) + } + f.Close() + } + // open the index + idxFile, err := os.OpenFile(filepath.Join(os.TempDir(), fmt.Sprintf("%s.ridx", fname)), os.O_RDWR, 0644) + if err != nil { + t.Fatalf("Failed to open index file: %v", err) + } + // Remove 4 bytes + stat, err := idxFile.Stat() + if err != nil { + t.Fatalf("Failed to stat index file: %v", err) + } + idxFile.Truncate(stat.Size() - 4) + idxFile.Close() + // Now open it again + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // The last item should be missing + if _, err = f.Retrieve(0xff); err == nil { + t.Errorf("Expected error for missing index entry") + } + // The one before should still be there + if _, err = f.Retrieve(0xfd); err != nil { + t.Fatalf("Expected no error, got %v", err) + } + } +} + +// TestFreezerRepairDanglingHeadLarge tests that we can recover if very many index entries are removed +func TestFreezerRepairDanglingHeadLarge(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("dangling_headtest-%d", rand.Uint64()) + + { // Fill a table and close it + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 255 times + for x := 0; x < 0xff; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + // The last item should be there + if _, err = f.Retrieve(f.items - 1); err == nil { + if err != nil { + t.Fatal(err) + } + } + f.Close() + } + // open the index + idxFile, err := os.OpenFile(filepath.Join(os.TempDir(), fmt.Sprintf("%s.ridx", fname)), os.O_RDWR, 0644) + if err != nil { + t.Fatalf("Failed to open index file: %v", err) + } + // Remove everything but the first item, and leave data unaligned + // 0-indexEntry, 1-indexEntry, corrupt-indexEntry + idxFile.Truncate(indexEntrySize + indexEntrySize + indexEntrySize/2) + idxFile.Close() + // Now open it again + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // The first item should be there + if _, err = f.Retrieve(0); err != nil { + t.Fatal(err) + } + // The second item should be missing + if _, err = f.Retrieve(1); err == nil { + t.Errorf("Expected error for missing index entry") + } + // We should now be able to store items again, from item = 1 + for x := 1; x < 0xff; x++ { + data := getChunk(15, ^x) + f.Append(uint64(x), data) + } + f.Close() + } + // And if we open it, we should now be able to read all of them (new values) + { + f, _ := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + for y := 1; y < 255; y++ { + exp := getChunk(15, ^y) + got, err := f.Retrieve(uint64(y)) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, exp) { + t.Fatalf("test %d, got \n%x != \n%x", y, got, exp) + } + } + } +} + +// TestSnappyDetection tests that we fail to open a snappy database and vice versa +func TestSnappyDetection(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("snappytest-%d", rand.Uint64()) + // Open with snappy + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 255 times + for x := 0; x < 0xff; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + f.Close() + } + // Open without snappy + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, false) + if err != nil { + t.Fatal(err) + } + if _, err = f.Retrieve(0); err == nil { + f.Close() + t.Fatalf("expected empty table") + } + } + + // Open with snappy + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // There should be 255 items + if _, err = f.Retrieve(0xfe); err != nil { + f.Close() + t.Fatalf("expected no error, got %v", err) + } + } + +} +func assertFileSize(f string, size int64) error { + stat, err := os.Stat(f) + if err != nil { + return err + } + if stat.Size() != size { + return fmt.Errorf("error, expected size %d, got %d", size, stat.Size()) + } + return nil + +} + +// TestFreezerRepairDanglingIndex checks that if the index has more entries than there are data, +// the index is repaired +func TestFreezerRepairDanglingIndex(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("dangling_indextest-%d", rand.Uint64()) + + { // Fill a table and close it + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 9 times : 150 bytes + for x := 0; x < 9; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + // The last item should be there + if _, err = f.Retrieve(f.items - 1); err != nil { + f.Close() + t.Fatal(err) + } + f.Close() + // File sizes should be 45, 45, 45 : items[3, 3, 3) + } + // Crop third file + fileToCrop := filepath.Join(os.TempDir(), fmt.Sprintf("%s.0002.rdat", fname)) + // Truncate third file: 45 ,45, 20 + { + if err := assertFileSize(fileToCrop, 45); err != nil { + t.Fatal(err) + } + file, err := os.OpenFile(fileToCrop, os.O_RDWR, 0644) + if err != nil { + t.Fatal(err) + } + file.Truncate(20) + file.Close() + } + // Open db it again + // It should restore the file(s) to + // 45, 45, 15 + // with 3+3+1 items + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + if f.items != 7 { + f.Close() + t.Fatalf("expected %d items, got %d", 7, f.items) + } + if err := assertFileSize(fileToCrop, 15); err != nil { + t.Fatal(err) + } + } +} + +func TestFreezerTruncate(t *testing.T) { + + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("truncation-%d", rand.Uint64()) + + { // Fill table + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 30 times + for x := 0; x < 30; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + // The last item should be there + if _, err = f.Retrieve(f.items - 1); err != nil { + t.Fatal(err) + } + f.Close() + } + // Reopen, truncate + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + defer f.Close() + f.truncate(10) // 150 bytes + if f.items != 10 { + t.Fatalf("expected %d items, got %d", 10, f.items) + } + // 45, 45, 45, 15 -- bytes should be 15 + if f.headBytes != 15 { + t.Fatalf("expected %d bytes, got %d", 15, f.headBytes) + } + + } + +} + +// TestFreezerRepairFirstFile tests a head file with the very first item only half-written. +// That will rewind the index, and _should_ truncate the head file +func TestFreezerRepairFirstFile(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("truncationfirst-%d", rand.Uint64()) + { // Fill table + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 80 bytes, splitting out into two files + f.Append(0, getChunk(40, 0xFF)) + f.Append(1, getChunk(40, 0xEE)) + // The last item should be there + if _, err = f.Retrieve(f.items - 1); err != nil { + t.Fatal(err) + } + f.Close() + } + // Truncate the file in half + fileToCrop := filepath.Join(os.TempDir(), fmt.Sprintf("%s.0001.rdat", fname)) + { + if err := assertFileSize(fileToCrop, 40); err != nil { + t.Fatal(err) + } + file, err := os.OpenFile(fileToCrop, os.O_RDWR, 0644) + if err != nil { + t.Fatal(err) + } + file.Truncate(20) + file.Close() + } + // Reopen + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + if f.items != 1 { + f.Close() + t.Fatalf("expected %d items, got %d", 0, f.items) + } + // Write 40 bytes + f.Append(1, getChunk(40, 0xDD)) + f.Close() + // Should have been truncated down to zero and then 40 written + if err := assertFileSize(fileToCrop, 40); err != nil { + t.Fatal(err) + } + } +} + +// TestFreezerReadAndTruncate tests: +// - we have a table open +// - do some reads, so files are open in readonly +// - truncate so those files are 'removed' +// - check that we did not keep the rdonly file descriptors +func TestFreezerReadAndTruncate(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("read_truncate-%d", rand.Uint64()) + { // Fill table + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + // Write 15 bytes 30 times + for x := 0; x < 30; x++ { + data := getChunk(15, x) + f.Append(uint64(x), data) + } + // The last item should be there + if _, err = f.Retrieve(f.items - 1); err != nil { + t.Fatal(err) + } + f.Close() + } + // Reopen and read all files + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 50, true) + if err != nil { + t.Fatal(err) + } + if f.items != 30 { + f.Close() + t.Fatalf("expected %d items, got %d", 0, f.items) + } + for y := byte(0); y < 30; y++ { + f.Retrieve(uint64(y)) + } + // Now, truncate back to zero + f.truncate(0) + // Write the data again + for x := 0; x < 30; x++ { + data := getChunk(15, ^x) + if err := f.Append(uint64(x), data); err != nil { + t.Fatalf("error %v", err) + } + } + f.Close() + } +} + +func TestOffset(t *testing.T) { + t.Parallel() + rm, wm, sg := metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge() + fname := fmt.Sprintf("offset-%d", rand.Uint64()) + { // Fill table + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 40, true) + if err != nil { + t.Fatal(err) + } + // Write 6 x 20 bytes, splitting out into three files + f.Append(0, getChunk(20, 0xFF)) + f.Append(1, getChunk(20, 0xEE)) + + f.Append(2, getChunk(20, 0xdd)) + f.Append(3, getChunk(20, 0xcc)) + + f.Append(4, getChunk(20, 0xbb)) + f.Append(5, getChunk(20, 0xaa)) + f.printIndex() + f.Close() + } + // Now crop it. + { + // delete files 0 and 1 + for i := 0; i < 2; i++ { + p := filepath.Join(os.TempDir(), fmt.Sprintf("%v.%04d.rdat", fname, i)) + if err := os.Remove(p); err != nil { + t.Fatal(err) + } + } + // Read the index file + p := filepath.Join(os.TempDir(), fmt.Sprintf("%v.ridx", fname)) + indexFile, err := os.OpenFile(p, os.O_RDWR, 0644) + if err != nil { + t.Fatal(err) + } + indexBuf := make([]byte, 7*indexEntrySize) + indexFile.Read(indexBuf) + + // Update the index file, so that we store + // [ file = 2, offset = 4 ] at index zero + + tailId := uint32(2) // First file is 2 + itemOffset := uint32(4) // We have removed four items + zeroIndex := indexEntry{ + offset: tailId, + filenum: itemOffset, + } + buf := zeroIndex.marshallBinary() + // Overwrite index zero + copy(indexBuf, buf) + // Remove the four next indices by overwriting + copy(indexBuf[indexEntrySize:], indexBuf[indexEntrySize*5:]) + indexFile.WriteAt(indexBuf, 0) + // Need to truncate the moved index items + indexFile.Truncate(indexEntrySize * (1 + 2)) + indexFile.Close() + + } + // Now open again + { + f, err := newCustomTable(os.TempDir(), fname, rm, wm, sg, 40, true) + if err != nil { + t.Fatal(err) + } + f.printIndex() + // It should allow writing item 6 + f.Append(6, getChunk(20, 0x99)) + + // It should be fine to fetch 4,5,6 + if got, err := f.Retrieve(4); err != nil { + t.Fatal(err) + } else if exp := getChunk(20, 0xbb); !bytes.Equal(got, exp) { + t.Fatalf("expected %x got %x", exp, got) + } + if got, err := f.Retrieve(5); err != nil { + t.Fatal(err) + } else if exp := getChunk(20, 0xaa); !bytes.Equal(got, exp) { + t.Fatalf("expected %x got %x", exp, got) + } + if got, err := f.Retrieve(6); err != nil { + t.Fatal(err) + } else if exp := getChunk(20, 0x99); !bytes.Equal(got, exp) { + t.Fatalf("expected %x got %x", exp, got) + } + + // It should error at 0, 1,2,3 + for i := 0; i < 4; i++ { + if _, err := f.Retrieve(uint64(i)); err == nil { + t.Fatal("expected err") + } + } + } +} + +// TODO (?) +// - test that if we remove several head-files, aswell as data last data-file, +// the index is truncated accordingly +// Right now, the freezer would fail on these conditions: +// 1. have data files d0, d1, d2, d3 +// 2. remove d2,d3 +// +// However, all 'normal' failure modes arising due to failing to sync() or save a file should be +// handled already, and the case described above can only (?) happen if an external process/user +// deletes files from the filesystem. diff --git a/core/rawdb/schema.go b/core/rawdb/schema.go index 8a9921ef40d2..a44a2c99f94f 100644 --- a/core/rawdb/schema.go +++ b/core/rawdb/schema.go @@ -29,10 +29,10 @@ var ( // databaseVerisionKey tracks the current database version. databaseVerisionKey = []byte("DatabaseVersion") - // headHeaderKey tracks the latest know header's hash. + // headHeaderKey tracks the latest known header's hash. headHeaderKey = []byte("LastHeader") - // headBlockKey tracks the latest know full block's hash. + // headBlockKey tracks the latest known full block's hash. headBlockKey = []byte("LastBlock") // headFastBlockKey tracks the latest known incomplete block's hash during fast sync. @@ -63,9 +63,36 @@ var ( preimageHitCounter = metrics.NewRegisteredCounter("db/preimage/hits", nil) ) -// TxLookupEntry is a positional metadata to help looking up the data content of -// a transaction or receipt given only its hash. -type TxLookupEntry struct { +const ( + // freezerHeaderTable indicates the name of the freezer header table. + freezerHeaderTable = "headers" + + // freezerHashTable indicates the name of the freezer canonical hash table. + freezerHashTable = "hashes" + + // freezerBodiesTable indicates the name of the freezer block body table. + freezerBodiesTable = "bodies" + + // freezerReceiptTable indicates the name of the freezer receipts table. + freezerReceiptTable = "receipts" + + // freezerDifficultyTable indicates the name of the freezer total difficulty table. + freezerDifficultyTable = "diffs" +) + +// freezerNoSnappy configures whether compression is disabled for the ancient-tables. +// Hashes and difficulties don't compress well. +var freezerNoSnappy = map[string]bool{ + freezerHeaderTable: false, + freezerHashTable: true, + freezerBodiesTable: false, + freezerReceiptTable: false, + freezerDifficultyTable: true, +} + +// LegacyTxLookupEntry is the legacy TxLookupEntry definition with some unnecessary +// fields. +type LegacyTxLookupEntry struct { BlockHash common.Hash BlockIndex uint64 Index uint64 @@ -78,6 +105,11 @@ func encodeBlockNumber(number uint64) []byte { return enc } +// headerKeyPrefix = headerPrefix + num (uint64 big endian) +func headerKeyPrefix(number uint64) []byte { + return append(headerPrefix, encodeBlockNumber(number)...) +} + // headerKey = headerPrefix + num (uint64 big endian) + hash func headerKey(number uint64, hash common.Hash) []byte { return append(append(headerPrefix, encodeBlockNumber(number)...), hash.Bytes()...) diff --git a/core/rawdb/table.go b/core/rawdb/table.go new file mode 100644 index 000000000000..6610b7f5a256 --- /dev/null +++ b/core/rawdb/table.go @@ -0,0 +1,204 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rawdb + +import ( + "github.com/ethereum/go-ethereum/ethdb" +) + +// table is a wrapper around a database that prefixes each key access with a pre- +// configured string. +type table struct { + db ethdb.Database + prefix string +} + +// NewTable returns a database object that prefixes all keys with a given string. +func NewTable(db ethdb.Database, prefix string) ethdb.Database { + return &table{ + db: db, + prefix: prefix, + } +} + +// Close is a noop to implement the Database interface. +func (t *table) Close() error { + return nil +} + +// Has retrieves if a prefixed version of a key is present in the database. +func (t *table) Has(key []byte) (bool, error) { + return t.db.Has(append([]byte(t.prefix), key...)) +} + +// Get retrieves the given prefixed key if it's present in the database. +func (t *table) Get(key []byte) ([]byte, error) { + return t.db.Get(append([]byte(t.prefix), key...)) +} + +// HasAncient is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) HasAncient(kind string, number uint64) (bool, error) { + return t.db.HasAncient(kind, number) +} + +// Ancient is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) Ancient(kind string, number uint64) ([]byte, error) { + return t.db.Ancient(kind, number) +} + +// Ancients is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) Ancients() (uint64, error) { + return t.db.Ancients() +} + +// AncientSize is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) AncientSize(kind string) (uint64, error) { + return t.db.AncientSize(kind) +} + +// AppendAncient is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) AppendAncient(number uint64, hash, header, body, receipts, td []byte) error { + return t.db.AppendAncient(number, hash, header, body, receipts, td) +} + +// TruncateAncients is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) TruncateAncients(items uint64) error { + return t.db.TruncateAncients(items) +} + +// Sync is a noop passthrough that just forwards the request to the underlying +// database. +func (t *table) Sync() error { + return t.db.Sync() +} + +// Put inserts the given value into the database at a prefixed version of the +// provided key. +func (t *table) Put(key []byte, value []byte) error { + return t.db.Put(append([]byte(t.prefix), key...), value) +} + +// Delete removes the given prefixed key from the database. +func (t *table) Delete(key []byte) error { + return t.db.Delete(append([]byte(t.prefix), key...)) +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the database. +func (t *table) NewIterator() ethdb.Iterator { + return t.NewIteratorWithPrefix(nil) +} + +// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of +// database content starting at a particular initial key (or after, if it does +// not exist). +func (t *table) NewIteratorWithStart(start []byte) ethdb.Iterator { + return t.db.NewIteratorWithStart(start) +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (t *table) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + return t.db.NewIteratorWithPrefix(append([]byte(t.prefix), prefix...)) +} + +// Stat returns a particular internal stat of the database. +func (t *table) Stat(property string) (string, error) { + return t.db.Stat(property) +} + +// Compact flattens the underlying data store for the given key range. In essence, +// deleted and overwritten versions are discarded, and the data is rearranged to +// reduce the cost of operations needed to access them. +// +// A nil start is treated as a key before all keys in the data store; a nil limit +// is treated as a key after all keys in the data store. If both is nil then it +// will compact entire data store. +func (t *table) Compact(start []byte, limit []byte) error { + // If no start was specified, use the table prefix as the first value + if start == nil { + start = []byte(t.prefix) + } + // If no limit was specified, use the first element not matching the prefix + // as the limit + if limit == nil { + limit = []byte(t.prefix) + for i := len(limit) - 1; i >= 0; i-- { + // Bump the current character, stopping if it doesn't overflow + limit[i]++ + if limit[i] > 0 { + break + } + // Character overflown, proceed to the next or nil if the last + if i == 0 { + limit = nil + } + } + } + // Range correctly calculated based on table prefix, delegate down + return t.db.Compact(start, limit) +} + +// NewBatch creates a write-only database that buffers changes to its host db +// until a final write is called, each operation prefixing all keys with the +// pre-configured string. +func (t *table) NewBatch() ethdb.Batch { + return &tableBatch{t.db.NewBatch(), t.prefix} +} + +// tableBatch is a wrapper around a database batch that prefixes each key access +// with a pre-configured string. +type tableBatch struct { + batch ethdb.Batch + prefix string +} + +// Put inserts the given value into the batch for later committing. +func (b *tableBatch) Put(key, value []byte) error { + return b.batch.Put(append([]byte(b.prefix), key...), value) +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *tableBatch) Delete(key []byte) error { + return b.batch.Delete(append([]byte(b.prefix), key...)) +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *tableBatch) ValueSize() int { + return b.batch.ValueSize() +} + +// Write flushes any accumulated data to disk. +func (b *tableBatch) Write() error { + return b.batch.Write() +} + +// Reset resets the batch for reuse. +func (b *tableBatch) Reset() { + b.batch.Reset() +} + +// Replay replays the batch contents. +func (b *tableBatch) Replay(w ethdb.KeyValueWriter) error { + return b.batch.Replay(w) +} diff --git a/core/state/database.go b/core/state/database.go index f6ea144b9b1e..ecc2c134da6c 100644 --- a/core/state/database.go +++ b/core/state/database.go @@ -18,7 +18,6 @@ package state import ( "fmt" - "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethdb" @@ -26,14 +25,7 @@ import ( lru "github.com/hashicorp/golang-lru" ) -// Trie cache generation limit after which to evict trie nodes from memory. -var MaxTrieCacheGen = uint16(120) - const ( - // Number of past tries to keep. This value is chosen such that - // reasonable chain reorg depths will hit an existing trie. - maxPastTries = 12 - // Number of codehash->size associations to keep. codeSizeCacheSize = 100000 ) @@ -59,28 +51,61 @@ type Database interface { TrieDB() *trie.Database } -// Trie is a Ethereum Merkle Trie. +// Trie is a Ethereum Merkle Patricia trie. type Trie interface { + // GetKey returns the sha3 preimage of a hashed key that was previously used + // to store a value. + // + // TODO(fjl): remove this when SecureTrie is removed + GetKey([]byte) []byte + + // TryGet returns the value for key stored in the trie. The value bytes must + // not be modified by the caller. If a node was not found in the database, a + // trie.MissingNodeError is returned. TryGet(key []byte) ([]byte, error) + + // TryUpdate associates key with value in the trie. If value has length zero, any + // existing value is deleted from the trie. The value bytes must not be modified + // by the caller while they are stored in the trie. If a node was not found in the + // database, a trie.MissingNodeError is returned. TryUpdate(key, value []byte) error + + // TryDelete removes any existing value for key from the trie. If a node was not + // found in the database, a trie.MissingNodeError is returned. TryDelete(key []byte) error - Commit(onleaf trie.LeafCallback) (common.Hash, error) + + // Hash returns the root hash of the trie. It does not write to the database and + // can be used even if the trie doesn't have one. Hash() common.Hash + + // Commit writes all nodes to the trie's memory database, tracking the internal + // and external (for account tries) references. + Commit(onleaf trie.LeafCallback) (common.Hash, error) + + // NodeIterator returns an iterator that returns nodes of the trie. Iteration + // starts at the key after the given start key. NodeIterator(startKey []byte) trie.NodeIterator - GetKey([]byte) []byte // TODO(fjl): remove this when SecureTrie is removed - Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error + + // Prove constructs a Merkle proof for key. The result contains all encoded nodes + // on the path to the value at key. The value itself is also included in the last + // node and can be retrieved by verifying the proof. + // + // If the trie does not contain a value for key, the returned proof contains all + // nodes of the longest existing prefix of the key (at least the root), ending + // with the node that proves the absence of the key. + Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) error } // NewDatabase creates a backing store for state. The returned database is safe for -// concurrent use and retains a few recent expanded trie nodes in memory. To keep -// more historical state in memory, use the NewDatabaseWithCache constructor. +// concurrent use, but does not retain any recent trie nodes in memory. To keep some +// historical state in memory, use the NewDatabaseWithCache constructor. func NewDatabase(db ethdb.Database) Database { return NewDatabaseWithCache(db, 0) } -// NewDatabase creates a backing store for state. The returned database is safe for -// concurrent use and retains both a few recent expanded trie nodes in memory, as -// well as a lot of collapsed RLP trie nodes in a large memory cache. +// NewDatabaseWithCache creates a backing store for state. The returned database +// is safe for concurrent use and retains a lot of collapsed RLP trie nodes in a +// large memory cache. func NewDatabaseWithCache(db ethdb.Database, cache int) Database { csc, _ := lru.New(codeSizeCacheSize) return &cachingDB{ @@ -91,50 +116,22 @@ func NewDatabaseWithCache(db ethdb.Database, cache int) Database { type cachingDB struct { db *trie.Database - mu sync.Mutex - pastTries []*trie.SecureTrie codeSizeCache *lru.Cache } -// OpenTrie opens the main account trie. +// OpenTrie opens the main account trie at a specific root hash. func (db *cachingDB) OpenTrie(root common.Hash) (Trie, error) { - db.mu.Lock() - defer db.mu.Unlock() - - for i := len(db.pastTries) - 1; i >= 0; i-- { - if db.pastTries[i].Hash() == root { - return cachedTrie{db.pastTries[i].Copy(), db}, nil - } - } - tr, err := trie.NewSecure(root, db.db, MaxTrieCacheGen) - if err != nil { - return nil, err - } - return cachedTrie{tr, db}, nil -} - -func (db *cachingDB) pushTrie(t *trie.SecureTrie) { - db.mu.Lock() - defer db.mu.Unlock() - - if len(db.pastTries) >= maxPastTries { - copy(db.pastTries, db.pastTries[1:]) - db.pastTries[len(db.pastTries)-1] = t - } else { - db.pastTries = append(db.pastTries, t) - } + return trie.NewSecure(root, db.db) } // OpenStorageTrie opens the storage trie of an account. func (db *cachingDB) OpenStorageTrie(addrHash, root common.Hash) (Trie, error) { - return trie.NewSecure(root, db.db, 0) + return trie.NewSecure(root, db.db) } // CopyTrie returns an independent copy of the given trie. func (db *cachingDB) CopyTrie(t Trie) Trie { switch t := t.(type) { - case cachedTrie: - return cachedTrie{t.SecureTrie.Copy(), db} case *trie.SecureTrie: return t.Copy() default: @@ -164,21 +161,3 @@ func (db *cachingDB) ContractCodeSize(addrHash, codeHash common.Hash) (int, erro func (db *cachingDB) TrieDB() *trie.Database { return db.db } - -// cachedTrie inserts its trie into a cachingDB on commit. -type cachedTrie struct { - *trie.SecureTrie - db *cachingDB -} - -func (m cachedTrie) Commit(onleaf trie.LeafCallback) (common.Hash, error) { - root, err := m.SecureTrie.Commit(onleaf) - if err == nil { - m.db.pushTrie(m.SecureTrie) - } - return root, err -} - -func (m cachedTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { - return m.SecureTrie.Prove(key, fromLevel, proofDb) -} diff --git a/core/state/dump.go b/core/state/dump.go index 072dbbf05300..7912fd5f9a08 100644 --- a/core/state/dump.go +++ b/core/state/dump.go @@ -21,61 +21,138 @@ import ( "fmt" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) +// DumpAccount represents an account in the state type DumpAccount struct { - Balance string `json:"balance"` - Nonce uint64 `json:"nonce"` - Root string `json:"root"` - CodeHash string `json:"codeHash"` - Code string `json:"code"` - Storage map[string]string `json:"storage"` + Balance string `json:"balance"` + Nonce uint64 `json:"nonce"` + Root string `json:"root"` + CodeHash string `json:"codeHash"` + Code string `json:"code,omitempty"` + Storage map[common.Hash]string `json:"storage,omitempty"` + Address *common.Address `json:"address,omitempty"` // Address only present in iterative (line-by-line) mode + SecureKey hexutil.Bytes `json:"key,omitempty"` // If we don't have address, we can output the key + } +// Dump represents the full dump in a collected format, as one large map type Dump struct { - Root string `json:"root"` - Accounts map[string]DumpAccount `json:"accounts"` + Root string `json:"root"` + Accounts map[common.Address]DumpAccount `json:"accounts"` +} + +// iterativeDump is a 'collector'-implementation which dump output line-by-line iteratively +type iterativeDump json.Encoder + +// Collector interface which the state trie calls during iteration +type collector interface { + onRoot(common.Hash) + onAccount(common.Address, DumpAccount) +} + +func (self *Dump) onRoot(root common.Hash) { + self.Root = fmt.Sprintf("%x", root) } -func (self *StateDB) RawDump() Dump { - dump := Dump{ - Root: fmt.Sprintf("%x", self.trie.Hash()), - Accounts: make(map[string]DumpAccount), +func (self *Dump) onAccount(addr common.Address, account DumpAccount) { + self.Accounts[addr] = account +} + +func (self iterativeDump) onAccount(addr common.Address, account DumpAccount) { + dumpAccount := &DumpAccount{ + Balance: account.Balance, + Nonce: account.Nonce, + Root: account.Root, + CodeHash: account.CodeHash, + Code: account.Code, + Storage: account.Storage, + SecureKey: account.SecureKey, + Address: nil, + } + if addr != (common.Address{}) { + dumpAccount.Address = &addr } + (*json.Encoder)(&self).Encode(dumpAccount) +} +func (self iterativeDump) onRoot(root common.Hash) { + (*json.Encoder)(&self).Encode(struct { + Root common.Hash `json:"root"` + }{root}) +} +func (self *StateDB) dump(c collector, excludeCode, excludeStorage, excludeMissingPreimages bool) { + emptyAddress := (common.Address{}) + missingPreimages := 0 + c.onRoot(self.trie.Hash()) it := trie.NewIterator(self.trie.NodeIterator(nil)) for it.Next() { - addr := self.trie.GetKey(it.Key) var data Account if err := rlp.DecodeBytes(it.Value, &data); err != nil { panic(err) } - - obj := newObject(nil, common.BytesToAddress(addr), data) + addr := common.BytesToAddress(self.trie.GetKey(it.Key)) + obj := newObject(nil, addr, data) account := DumpAccount{ Balance: data.Balance.String(), Nonce: data.Nonce, Root: common.Bytes2Hex(data.Root[:]), CodeHash: common.Bytes2Hex(data.CodeHash), - Code: common.Bytes2Hex(obj.Code(self.db)), - Storage: make(map[string]string), } - storageIt := trie.NewIterator(obj.getTrie(self.db).NodeIterator(nil)) - for storageIt.Next() { - account.Storage[common.Bytes2Hex(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(storageIt.Value) + if emptyAddress == addr { + // Preimage missing + missingPreimages++ + if excludeMissingPreimages { + continue + } + account.SecureKey = it.Key + } + if !excludeCode { + account.Code = common.Bytes2Hex(obj.Code(self.db)) + } + if !excludeStorage { + account.Storage = make(map[common.Hash]string) + storageIt := trie.NewIterator(obj.getTrie(self.db).NodeIterator(nil)) + for storageIt.Next() { + _, content, _, err := rlp.Split(storageIt.Value) + if err != nil { + log.Error("Failed to decode the value returned by iterator", "error", err) + continue + } + account.Storage[common.BytesToHash(self.trie.GetKey(storageIt.Key))] = common.Bytes2Hex(content) + } } - dump.Accounts[common.Bytes2Hex(addr)] = account + c.onAccount(addr, account) + } + if missingPreimages > 0 { + log.Warn("Dump incomplete due to missing preimages", "missing", missingPreimages) + } +} + +// RawDump returns the entire state an a single large object +func (self *StateDB) RawDump(excludeCode, excludeStorage, excludeMissingPreimages bool) Dump { + dump := &Dump{ + Accounts: make(map[common.Address]DumpAccount), } - return dump + self.dump(dump, excludeCode, excludeStorage, excludeMissingPreimages) + return *dump } -func (self *StateDB) Dump() []byte { - json, err := json.MarshalIndent(self.RawDump(), "", " ") +// Dump returns a JSON string representing the entire state as a single json-object +func (self *StateDB) Dump(excludeCode, excludeStorage, excludeMissingPreimages bool) []byte { + dump := self.RawDump(excludeCode, excludeStorage, excludeMissingPreimages) + json, err := json.MarshalIndent(dump, "", " ") if err != nil { fmt.Println("dump err", err) } - return json } + +// IterativeDump dumps out accounts as json-objects, delimited by linebreaks on stdout +func (self *StateDB) IterativeDump(excludeCode, excludeStorage, excludeMissingPreimages bool, output *json.Encoder) { + self.dump(iterativeDump(*output), excludeCode, excludeStorage, excludeMissingPreimages) +} diff --git a/core/state/iterator_test.go b/core/state/iterator_test.go index 9e46c851cdcb..69f51c4c7d8a 100644 --- a/core/state/iterator_test.go +++ b/core/state/iterator_test.go @@ -51,7 +51,9 @@ func TestNodeIteratorCoverage(t *testing.T) { t.Errorf("state entry not reported %x", hash) } } - for _, key := range db.TrieDB().DiskDB().(*ethdb.MemDatabase).Keys() { + it := db.TrieDB().DiskDB().(ethdb.Database).NewIterator() + for it.Next() { + key := it.Key() if bytes.HasPrefix(key, []byte("secure-key-")) { continue } @@ -59,4 +61,5 @@ func TestNodeIteratorCoverage(t *testing.T) { t.Errorf("state entry not reported %x", key) } } + it.Release() } diff --git a/core/state/managed_state.go b/core/state/managed_state.go deleted file mode 100644 index 1390ef4a00af..000000000000 --- a/core/state/managed_state.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package state - -import ( - "sync" - - "github.com/ethereum/go-ethereum/common" -) - -type account struct { - stateObject *stateObject - nstart uint64 - nonces []bool -} - -type ManagedState struct { - *StateDB - - mu sync.RWMutex - - accounts map[common.Address]*account -} - -// ManagedState returns a new managed state with the statedb as it's backing layer -func ManageState(statedb *StateDB) *ManagedState { - return &ManagedState{ - StateDB: statedb.Copy(), - accounts: make(map[common.Address]*account), - } -} - -// SetState sets the backing layer of the managed state -func (ms *ManagedState) SetState(statedb *StateDB) { - ms.mu.Lock() - defer ms.mu.Unlock() - ms.StateDB = statedb -} - -// RemoveNonce removed the nonce from the managed state and all future pending nonces -func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64) { - if ms.hasAccount(addr) { - ms.mu.Lock() - defer ms.mu.Unlock() - - account := ms.getAccount(addr) - if n-account.nstart <= uint64(len(account.nonces)) { - reslice := make([]bool, n-account.nstart) - copy(reslice, account.nonces[:n-account.nstart]) - account.nonces = reslice - } - } -} - -// NewNonce returns the new canonical nonce for the managed account -func (ms *ManagedState) NewNonce(addr common.Address) uint64 { - ms.mu.Lock() - defer ms.mu.Unlock() - - account := ms.getAccount(addr) - for i, nonce := range account.nonces { - if !nonce { - return account.nstart + uint64(i) - } - } - account.nonces = append(account.nonces, true) - - return uint64(len(account.nonces)-1) + account.nstart -} - -// GetNonce returns the canonical nonce for the managed or unmanaged account. -// -// Because GetNonce mutates the DB, we must take a write lock. -func (ms *ManagedState) GetNonce(addr common.Address) uint64 { - ms.mu.Lock() - defer ms.mu.Unlock() - - if ms.hasAccount(addr) { - account := ms.getAccount(addr) - return uint64(len(account.nonces)) + account.nstart - } else { - return ms.StateDB.GetNonce(addr) - } -} - -// SetNonce sets the new canonical nonce for the managed state -func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64) { - ms.mu.Lock() - defer ms.mu.Unlock() - - so := ms.GetOrNewStateObject(addr) - so.SetNonce(nonce) - - ms.accounts[addr] = newAccount(so) -} - -// HasAccount returns whether the given address is managed or not -func (ms *ManagedState) HasAccount(addr common.Address) bool { - ms.mu.RLock() - defer ms.mu.RUnlock() - return ms.hasAccount(addr) -} - -func (ms *ManagedState) hasAccount(addr common.Address) bool { - _, ok := ms.accounts[addr] - return ok -} - -// populate the managed state -func (ms *ManagedState) getAccount(addr common.Address) *account { - if account, ok := ms.accounts[addr]; !ok { - so := ms.GetOrNewStateObject(addr) - ms.accounts[addr] = newAccount(so) - } else { - // Always make sure the state account nonce isn't actually higher - // than the tracked one. - so := ms.StateDB.getStateObject(addr) - if so != nil && uint64(len(account.nonces))+account.nstart < so.Nonce() { - ms.accounts[addr] = newAccount(so) - } - - } - - return ms.accounts[addr] -} - -func newAccount(so *stateObject) *account { - return &account{so, so.Nonce(), nil} -} diff --git a/core/state/managed_state_test.go b/core/state/managed_state_test.go deleted file mode 100644 index 3d9c4e867603..000000000000 --- a/core/state/managed_state_test.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package state - -import ( - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" -) - -var addr = common.BytesToAddress([]byte("test")) - -func create() (*ManagedState, *account) { - statedb, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) - ms := ManageState(statedb) - ms.StateDB.SetNonce(addr, 100) - ms.accounts[addr] = newAccount(ms.StateDB.getStateObject(addr)) - return ms, ms.accounts[addr] -} - -func TestNewNonce(t *testing.T) { - ms, _ := create() - - nonce := ms.NewNonce(addr) - if nonce != 100 { - t.Error("expected nonce 100. got", nonce) - } - - nonce = ms.NewNonce(addr) - if nonce != 101 { - t.Error("expected nonce 101. got", nonce) - } -} - -func TestRemove(t *testing.T) { - ms, account := create() - - nn := make([]bool, 10) - for i := range nn { - nn[i] = true - } - account.nonces = append(account.nonces, nn...) - - i := uint64(5) - ms.RemoveNonce(addr, account.nstart+i) - if len(account.nonces) != 5 { - t.Error("expected", i, "'th index to be false") - } -} - -func TestReuse(t *testing.T) { - ms, account := create() - - nn := make([]bool, 10) - for i := range nn { - nn[i] = true - } - account.nonces = append(account.nonces, nn...) - - i := uint64(5) - ms.RemoveNonce(addr, account.nstart+i) - nonce := ms.NewNonce(addr) - if nonce != 105 { - t.Error("expected nonce to be 105. got", nonce) - } -} - -func TestRemoteNonceChange(t *testing.T) { - ms, account := create() - nn := make([]bool, 10) - for i := range nn { - nn[i] = true - } - account.nonces = append(account.nonces, nn...) - ms.NewNonce(addr) - - ms.StateDB.stateObjects[addr].data.Nonce = 200 - nonce := ms.NewNonce(addr) - if nonce != 200 { - t.Error("expected nonce after remote update to be", 200, "got", nonce) - } - ms.NewNonce(addr) - ms.NewNonce(addr) - ms.NewNonce(addr) - ms.StateDB.stateObjects[addr].data.Nonce = 200 - nonce = ms.NewNonce(addr) - if nonce != 204 { - t.Error("expected nonce after remote update to be", 204, "got", nonce) - } -} - -func TestSetNonce(t *testing.T) { - ms, _ := create() - - var addr common.Address - ms.SetNonce(addr, 10) - - if ms.GetNonce(addr) != 10 { - t.Error("Expected nonce of 10, got", ms.GetNonce(addr)) - } - - addr[0] = 1 - ms.StateDB.SetNonce(addr, 1) - - if ms.GetNonce(addr) != 1 { - t.Error("Expected nonce of 1, got", ms.GetNonce(addr)) - } -} diff --git a/core/state/state_object.go b/core/state/state_object.go index f41ab0409221..8680de021f42 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -21,9 +21,11 @@ import ( "fmt" "io" "math/big" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" ) @@ -31,23 +33,23 @@ var emptyCodeHash = crypto.Keccak256(nil) type Code []byte -func (self Code) String() string { - return string(self) //strings.Join(Disassemble(self), " ") +func (c Code) String() string { + return string(c) //strings.Join(Disassemble(c), " ") } type Storage map[common.Hash]common.Hash -func (self Storage) String() (str string) { - for key, value := range self { +func (s Storage) String() (str string) { + for key, value := range s { str += fmt.Sprintf("%X : %X\n", key, value) } return } -func (self Storage) Copy() Storage { +func (s Storage) Copy() Storage { cpy := make(Storage) - for key, value := range self { + for key, value := range s { cpy[key] = value } @@ -77,8 +79,10 @@ type stateObject struct { trie Trie // storage trie, which becomes non-nil on first access code Code // contract bytecode, which gets set when code is loaded - originStorage Storage // Storage cache of original entries to dedup rewrites - dirtyStorage Storage // Storage entries that need to be flushed to disk + originStorage Storage // Storage cache of original entries to dedup rewrites, reset for every transaction + pendingStorage Storage // Storage entries that need to be flushed to disk, at the end of an entire block + dirtyStorage Storage // Storage entries that have been modified in the current transaction execution + fakeStorage Storage // Fake storage which constructed by caller for debugging purpose. // Cache flags. // When an object is marked suicided it will be delete from the trie @@ -110,203 +114,275 @@ func newObject(db *StateDB, address common.Address, data Account) *stateObject { if data.CodeHash == nil { data.CodeHash = emptyCodeHash } + if data.Root == (common.Hash{}) { + data.Root = emptyRoot + } return &stateObject{ - db: db, - address: address, - addrHash: crypto.Keccak256Hash(address[:]), - data: data, - originStorage: make(Storage), - dirtyStorage: make(Storage), + db: db, + address: address, + addrHash: crypto.Keccak256Hash(address[:]), + data: data, + originStorage: make(Storage), + pendingStorage: make(Storage), + dirtyStorage: make(Storage), } } // EncodeRLP implements rlp.Encoder. -func (c *stateObject) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, c.data) +func (s *stateObject) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, s.data) } // setError remembers the first non-nil error it is called with. -func (self *stateObject) setError(err error) { - if self.dbErr == nil { - self.dbErr = err +func (s *stateObject) setError(err error) { + if s.dbErr == nil { + s.dbErr = err } } -func (self *stateObject) markSuicided() { - self.suicided = true +func (s *stateObject) markSuicided() { + s.suicided = true } -func (c *stateObject) touch() { - c.db.journal.append(touchChange{ - account: &c.address, +func (s *stateObject) touch() { + s.db.journal.append(touchChange{ + account: &s.address, }) - if c.address == ripemd { + if s.address == ripemd { // Explicitly put it in the dirty-cache, which is otherwise generated from // flattened journals. - c.db.journal.dirty(c.address) + s.db.journal.dirty(s.address) } } -func (c *stateObject) getTrie(db Database) Trie { - if c.trie == nil { +func (s *stateObject) getTrie(db Database) Trie { + if s.trie == nil { var err error - c.trie, err = db.OpenStorageTrie(c.addrHash, c.data.Root) + s.trie, err = db.OpenStorageTrie(s.addrHash, s.data.Root) if err != nil { - c.trie, _ = db.OpenStorageTrie(c.addrHash, common.Hash{}) - c.setError(fmt.Errorf("can't create storage trie: %v", err)) + s.trie, _ = db.OpenStorageTrie(s.addrHash, common.Hash{}) + s.setError(fmt.Errorf("can't create storage trie: %v", err)) } } - return c.trie + return s.trie } // GetState retrieves a value from the account storage trie. -func (self *stateObject) GetState(db Database, key common.Hash) common.Hash { +func (s *stateObject) GetState(db Database, key common.Hash) common.Hash { + // If the fake storage is set, only lookup the state here(in the debugging mode) + if s.fakeStorage != nil { + return s.fakeStorage[key] + } // If we have a dirty value for this state entry, return it - value, dirty := self.dirtyStorage[key] + value, dirty := s.dirtyStorage[key] if dirty { return value } // Otherwise return the entry's original value - return self.GetCommittedState(db, key) + return s.GetCommittedState(db, key) } // GetCommittedState retrieves a value from the committed account storage trie. -func (self *stateObject) GetCommittedState(db Database, key common.Hash) common.Hash { - // If we have the original value cached, return that - value, cached := self.originStorage[key] - if cached { +func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Hash { + // If the fake storage is set, only lookup the state here(in the debugging mode) + if s.fakeStorage != nil { + return s.fakeStorage[key] + } + // If we have a pending write or clean cached, return that + if value, pending := s.pendingStorage[key]; pending { return value } + if value, cached := s.originStorage[key]; cached { + return value + } + // Track the amount of time wasted on reading the storage trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.db.StorageReads += time.Since(start) }(time.Now()) + } // Otherwise load the value from the database - enc, err := self.getTrie(db).TryGet(key[:]) + enc, err := s.getTrie(db).TryGet(key[:]) if err != nil { - self.setError(err) + s.setError(err) return common.Hash{} } + var value common.Hash if len(enc) > 0 { _, content, _, err := rlp.Split(enc) if err != nil { - self.setError(err) + s.setError(err) } value.SetBytes(content) } - self.originStorage[key] = value + s.originStorage[key] = value return value } // SetState updates a value in account storage. -func (self *stateObject) SetState(db Database, key, value common.Hash) { +func (s *stateObject) SetState(db Database, key, value common.Hash) { + // If the fake storage is set, put the temporary state update here. + if s.fakeStorage != nil { + s.fakeStorage[key] = value + return + } // If the new value is the same as old, don't set - prev := self.GetState(db, key) + prev := s.GetState(db, key) if prev == value { return } // New value is different, update and journal the change - self.db.journal.append(storageChange{ - account: &self.address, + s.db.journal.append(storageChange{ + account: &s.address, key: key, prevalue: prev, }) - self.setState(key, value) + s.setState(key, value) } -func (self *stateObject) setState(key, value common.Hash) { - self.dirtyStorage[key] = value +// SetStorage replaces the entire state storage with the given one. +// +// After this function is called, all original state will be ignored and state +// lookup only happens in the fake state storage. +// +// Note this function should only be used for debugging purpose. +func (s *stateObject) SetStorage(storage map[common.Hash]common.Hash) { + // Allocate fake storage if it's nil. + if s.fakeStorage == nil { + s.fakeStorage = make(Storage) + } + for key, value := range storage { + s.fakeStorage[key] = value + } + // Don't bother journal since this function should only be used for + // debugging and the `fake` storage won't be committed to database. +} + +func (s *stateObject) setState(key, value common.Hash) { + s.dirtyStorage[key] = value +} + +// finalise moves all dirty storage slots into the pending area to be hashed or +// committed later. It is invoked at the end of every transaction. +func (s *stateObject) finalise() { + for key, value := range s.dirtyStorage { + s.pendingStorage[key] = value + } + if len(s.dirtyStorage) > 0 { + s.dirtyStorage = make(Storage) + } } // updateTrie writes cached storage modifications into the object's storage trie. -func (self *stateObject) updateTrie(db Database) Trie { - tr := self.getTrie(db) - for key, value := range self.dirtyStorage { - delete(self.dirtyStorage, key) +func (s *stateObject) updateTrie(db Database) Trie { + // Make sure all dirty slots are finalized into the pending storage area + s.finalise() + // Track the amount of time wasted on updating the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.db.StorageUpdates += time.Since(start) }(time.Now()) + } + // Insert all the pending updates into the trie + tr := s.getTrie(db) + for key, value := range s.pendingStorage { // Skip noop changes, persist actual changes - if value == self.originStorage[key] { + if value == s.originStorage[key] { continue } - self.originStorage[key] = value + s.originStorage[key] = value if (value == common.Hash{}) { - self.setError(tr.TryDelete(key[:])) + s.setError(tr.TryDelete(key[:])) continue } // Encoding []byte cannot fail, ok to ignore the error. - v, _ := rlp.EncodeToBytes(bytes.TrimLeft(value[:], "\x00")) - self.setError(tr.TryUpdate(key[:], v)) + v, _ := rlp.EncodeToBytes(common.TrimLeftZeroes(value[:])) + s.setError(tr.TryUpdate(key[:], v)) + } + if len(s.pendingStorage) > 0 { + s.pendingStorage = make(Storage) } return tr } // UpdateRoot sets the trie root to the current root hash of -func (self *stateObject) updateRoot(db Database) { - self.updateTrie(db) - self.data.Root = self.trie.Hash() +func (s *stateObject) updateRoot(db Database) { + s.updateTrie(db) + + // Track the amount of time wasted on hashing the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.db.StorageHashes += time.Since(start) }(time.Now()) + } + s.data.Root = s.trie.Hash() } // CommitTrie the storage trie of the object to db. // This updates the trie root. -func (self *stateObject) CommitTrie(db Database) error { - self.updateTrie(db) - if self.dbErr != nil { - return self.dbErr +func (s *stateObject) CommitTrie(db Database) error { + s.updateTrie(db) + if s.dbErr != nil { + return s.dbErr } - root, err := self.trie.Commit(nil) + // Track the amount of time wasted on committing the storge trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.db.StorageCommits += time.Since(start) }(time.Now()) + } + root, err := s.trie.Commit(nil) if err == nil { - self.data.Root = root + s.data.Root = root } return err } // AddBalance removes amount from c's balance. // It is used to add funds to the destination account of a transfer. -func (c *stateObject) AddBalance(amount *big.Int) { +func (s *stateObject) AddBalance(amount *big.Int) { // EIP158: We must check emptiness for the objects such that the account // clearing (0,0,0 objects) can take effect. if amount.Sign() == 0 { - if c.empty() { - c.touch() + if s.empty() { + s.touch() } return } - c.SetBalance(new(big.Int).Add(c.Balance(), amount)) + s.SetBalance(new(big.Int).Add(s.Balance(), amount)) } // SubBalance removes amount from c's balance. // It is used to remove funds from the origin account of a transfer. -func (c *stateObject) SubBalance(amount *big.Int) { +func (s *stateObject) SubBalance(amount *big.Int) { if amount.Sign() == 0 { return } - c.SetBalance(new(big.Int).Sub(c.Balance(), amount)) + s.SetBalance(new(big.Int).Sub(s.Balance(), amount)) } -func (self *stateObject) SetBalance(amount *big.Int) { - self.db.journal.append(balanceChange{ - account: &self.address, - prev: new(big.Int).Set(self.data.Balance), +func (s *stateObject) SetBalance(amount *big.Int) { + s.db.journal.append(balanceChange{ + account: &s.address, + prev: new(big.Int).Set(s.data.Balance), }) - self.setBalance(amount) + s.setBalance(amount) } -func (self *stateObject) setBalance(amount *big.Int) { - self.data.Balance = amount +func (s *stateObject) setBalance(amount *big.Int) { + s.data.Balance = amount } // Return the gas back to the origin. Used by the Virtual machine or Closures -func (c *stateObject) ReturnGas(gas *big.Int) {} - -func (self *stateObject) deepCopy(db *StateDB) *stateObject { - stateObject := newObject(db, self.address, self.data) - if self.trie != nil { - stateObject.trie = db.db.CopyTrie(self.trie) - } - stateObject.code = self.code - stateObject.dirtyStorage = self.dirtyStorage.Copy() - stateObject.originStorage = self.originStorage.Copy() - stateObject.suicided = self.suicided - stateObject.dirtyCode = self.dirtyCode - stateObject.deleted = self.deleted +func (s *stateObject) ReturnGas(gas *big.Int) {} + +func (s *stateObject) deepCopy(db *StateDB) *stateObject { + stateObject := newObject(db, s.address, s.data) + if s.trie != nil { + stateObject.trie = db.db.CopyTrie(s.trie) + } + stateObject.code = s.code + stateObject.dirtyStorage = s.dirtyStorage.Copy() + stateObject.originStorage = s.originStorage.Copy() + stateObject.pendingStorage = s.pendingStorage.Copy() + stateObject.suicided = s.suicided + stateObject.dirtyCode = s.dirtyCode + stateObject.deleted = s.deleted return stateObject } @@ -315,69 +391,69 @@ func (self *stateObject) deepCopy(db *StateDB) *stateObject { // // Returns the address of the contract/account -func (c *stateObject) Address() common.Address { - return c.address +func (s *stateObject) Address() common.Address { + return s.address } // Code returns the contract code associated with this object, if any. -func (self *stateObject) Code(db Database) []byte { - if self.code != nil { - return self.code +func (s *stateObject) Code(db Database) []byte { + if s.code != nil { + return s.code } - if bytes.Equal(self.CodeHash(), emptyCodeHash) { + if bytes.Equal(s.CodeHash(), emptyCodeHash) { return nil } - code, err := db.ContractCode(self.addrHash, common.BytesToHash(self.CodeHash())) + code, err := db.ContractCode(s.addrHash, common.BytesToHash(s.CodeHash())) if err != nil { - self.setError(fmt.Errorf("can't load code hash %x: %v", self.CodeHash(), err)) + s.setError(fmt.Errorf("can't load code hash %x: %v", s.CodeHash(), err)) } - self.code = code + s.code = code return code } -func (self *stateObject) SetCode(codeHash common.Hash, code []byte) { - prevcode := self.Code(self.db.db) - self.db.journal.append(codeChange{ - account: &self.address, - prevhash: self.CodeHash(), +func (s *stateObject) SetCode(codeHash common.Hash, code []byte) { + prevcode := s.Code(s.db.db) + s.db.journal.append(codeChange{ + account: &s.address, + prevhash: s.CodeHash(), prevcode: prevcode, }) - self.setCode(codeHash, code) + s.setCode(codeHash, code) } -func (self *stateObject) setCode(codeHash common.Hash, code []byte) { - self.code = code - self.data.CodeHash = codeHash[:] - self.dirtyCode = true +func (s *stateObject) setCode(codeHash common.Hash, code []byte) { + s.code = code + s.data.CodeHash = codeHash[:] + s.dirtyCode = true } -func (self *stateObject) SetNonce(nonce uint64) { - self.db.journal.append(nonceChange{ - account: &self.address, - prev: self.data.Nonce, +func (s *stateObject) SetNonce(nonce uint64) { + s.db.journal.append(nonceChange{ + account: &s.address, + prev: s.data.Nonce, }) - self.setNonce(nonce) + s.setNonce(nonce) } -func (self *stateObject) setNonce(nonce uint64) { - self.data.Nonce = nonce +func (s *stateObject) setNonce(nonce uint64) { + s.data.Nonce = nonce } -func (self *stateObject) CodeHash() []byte { - return self.data.CodeHash +func (s *stateObject) CodeHash() []byte { + return s.data.CodeHash } -func (self *stateObject) Balance() *big.Int { - return self.data.Balance +func (s *stateObject) Balance() *big.Int { + return s.data.Balance } -func (self *stateObject) Nonce() uint64 { - return self.data.Nonce +func (s *stateObject) Nonce() uint64 { + return s.data.Nonce } // Never called, but must be present to allow stateObject to be used // as a vm.Account interface that also satisfies the vm.ContractRef // interface. Interfaces are awesome. -func (self *stateObject) Value() *big.Int { +func (s *stateObject) Value() *big.Int { panic("Value on stateObject should never be called") } diff --git a/core/state/state_object_test.go b/core/state/state_object_test.go new file mode 100644 index 000000000000..e86d3b994371 --- /dev/null +++ b/core/state/state_object_test.go @@ -0,0 +1,70 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package state + +import ( + "bytes" + "fmt" + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" +) + +func BenchmarkCutOriginal(b *testing.B) { + value := common.HexToHash("0x01") + for i := 0; i < b.N; i++ { + bytes.TrimLeft(value[:], "\x00") + } +} + +func BenchmarkCutsetterFn(b *testing.B) { + value := common.HexToHash("0x01") + cutSetFn := func(r rune) bool { + return int32(r) == int32(0) + } + for i := 0; i < b.N; i++ { + bytes.TrimLeftFunc(value[:], cutSetFn) + } +} + +func BenchmarkCutCustomTrim(b *testing.B) { + value := common.HexToHash("0x01") + for i := 0; i < b.N; i++ { + common.TrimLeftZeroes(value[:]) + } +} + +func xTestFuzzCutter(t *testing.T) { + rand.Seed(time.Now().Unix()) + for { + v := make([]byte, 20) + zeroes := rand.Intn(21) + rand.Read(v[zeroes:]) + exp := bytes.TrimLeft(v[:], "\x00") + got := common.TrimLeftZeroes(v) + if !bytes.Equal(exp, got) { + + fmt.Printf("Input %x\n", v) + fmt.Printf("Exp %x\n", exp) + fmt.Printf("Got %x\n", got) + t.Fatalf("Error") + } + //break + } +} diff --git a/core/state/state_test.go b/core/state/state_test.go index a09273f3b1fb..d6ff714ee49c 100644 --- a/core/state/state_test.go +++ b/core/state/state_test.go @@ -22,13 +22,14 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" checker "gopkg.in/check.v1" ) type StateSuite struct { - db *ethdb.MemDatabase + db ethdb.Database state *StateDB } @@ -51,33 +52,28 @@ func (s *StateSuite) TestDump(c *checker.C) { s.state.Commit(false) // check that dump contains the state objects that are in trie - got := string(s.state.Dump()) + got := string(s.state.Dump(false, false, true)) want := `{ "root": "71edff0130dd2385947095001c73d9e28d862fc286fca2b922ca6f6f3cddfdd2", "accounts": { - "0000000000000000000000000000000000000001": { + "0x0000000000000000000000000000000000000001": { "balance": "22", "nonce": 0, "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "code": "", - "storage": {} + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" }, - "0000000000000000000000000000000000000002": { + "0x0000000000000000000000000000000000000002": { "balance": "44", "nonce": 0, "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "code": "", - "storage": {} + "codeHash": "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470" }, - "0000000000000000000000000000000000000102": { + "0x0000000000000000000000000000000000000102": { "balance": "0", "nonce": 0, "root": "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "87874902497a5bb968da31a2998d8f22e949d1ef6214bcdedd8bae24cca4b9e3", - "code": "03030303030303", - "storage": {} + "code": "03030303030303" } } }` @@ -87,7 +83,7 @@ func (s *StateSuite) TestDump(c *checker.C) { } func (s *StateSuite) SetUpTest(c *checker.C) { - s.db = ethdb.NewMemDatabase() + s.db = rawdb.NewMemoryDatabase() s.state, _ = New(common.Hash{}, NewDatabase(s.db)) } @@ -141,7 +137,7 @@ func (s *StateSuite) TestSnapshotEmpty(c *checker.C) { // use testing instead of checker because checker does not support // printing/logging in tests (-check.vv does not work) func TestSnapshot2(t *testing.T) { - state, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) stateobjaddr0 := toAddr([]byte("so0")) stateobjaddr1 := toAddr([]byte("so1")) diff --git a/core/state/statedb.go b/core/state/statedb.go index 2230b10ef06e..4b4f374c9245 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -22,11 +22,13 @@ import ( "fmt" "math/big" "sort" + "time" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) @@ -37,8 +39,8 @@ type revision struct { } var ( - // emptyState is the known hash of an empty state trie entry. - emptyState = crypto.Keccak256Hash(nil) + // emptyRoot is the known root hash of an empty trie. + emptyRoot = common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") // emptyCode is the known hash of the empty EVM bytecode. emptyCode = crypto.Keccak256Hash(nil) @@ -51,6 +53,10 @@ func (n *proofList) Put(key []byte, value []byte) error { return nil } +func (n *proofList) Delete(key []byte) error { + panic("not supported") +} + // StateDBs within the ethereum protocol are used to store anything // within the merkle trie. StateDBs take care of caching and storing // nested states. It's the general query interface to retrieve: @@ -61,8 +67,9 @@ type StateDB struct { trie Trie // This map holds 'live' objects, which will get modified while processing a state transition. - stateObjects map[common.Address]*stateObject - stateObjectsDirty map[common.Address]struct{} + stateObjects map[common.Address]*stateObject + stateObjectsPending map[common.Address]struct{} // State objects finalized but not yet written to the trie + stateObjectsDirty map[common.Address]struct{} // State objects modified in the current execution // DB error. // State objects are used by the consensus core and VM which are @@ -86,6 +93,16 @@ type StateDB struct { journal *journal validRevisions []revision nextRevisionId int + + // Measurements gathered during execution for debugging purposes + AccountReads time.Duration + AccountHashes time.Duration + AccountUpdates time.Duration + AccountCommits time.Duration + StorageReads time.Duration + StorageHashes time.Duration + StorageUpdates time.Duration + StorageCommits time.Duration } // Create a new state from a given trie. @@ -95,13 +112,14 @@ func New(root common.Hash, db Database) (*StateDB, error) { return nil, err } return &StateDB{ - db: db, - trie: tr, - stateObjects: make(map[common.Address]*stateObject), - stateObjectsDirty: make(map[common.Address]struct{}), - logs: make(map[common.Hash][]*types.Log), - preimages: make(map[common.Hash][]byte), - journal: newJournal(), + db: db, + trie: tr, + stateObjects: make(map[common.Address]*stateObject), + stateObjectsPending: make(map[common.Address]struct{}), + stateObjectsDirty: make(map[common.Address]struct{}), + logs: make(map[common.Hash][]*types.Log), + preimages: make(map[common.Hash][]byte), + journal: newJournal(), }, nil } @@ -125,6 +143,7 @@ func (self *StateDB) Reset(root common.Hash) error { } self.trie = tr self.stateObjects = make(map[common.Address]*stateObject) + self.stateObjectsPending = make(map[common.Address]struct{}) self.stateObjectsDirty = make(map[common.Address]struct{}) self.thash = common.Hash{} self.bhash = common.Hash{} @@ -221,6 +240,16 @@ func (self *StateDB) GetNonce(addr common.Address) uint64 { return 0 } +// TxIndex returns the current transaction index set by Prepare. +func (self *StateDB) TxIndex() int { + return self.txIndex +} + +// BlockHash returns the current block hash set by Prepare. +func (self *StateDB) BlockHash() common.Hash { + return self.bhash +} + func (self *StateDB) GetCode(addr common.Address) []byte { stateObject := self.getStateObject(addr) if stateObject != nil { @@ -360,6 +389,15 @@ func (self *StateDB) SetState(addr common.Address, key, value common.Hash) { } } +// SetStorage replaces the entire storage for the specified account with given +// storage. This function should only be used for debugging. +func (self *StateDB) SetStorage(addr common.Address, storage map[common.Hash]common.Hash) { + stateObject := self.GetOrNewStateObject(addr) + if stateObject != nil { + stateObject.SetStorage(storage) + } +} + // Suicide marks the given account as suicided. // This clears the account balance. // @@ -386,36 +424,59 @@ func (self *StateDB) Suicide(addr common.Address) bool { // // updateStateObject writes the given object to the trie. -func (self *StateDB) updateStateObject(stateObject *stateObject) { - addr := stateObject.Address() - data, err := rlp.EncodeToBytes(stateObject) +func (s *StateDB) updateStateObject(obj *stateObject) { + // Track the amount of time wasted on updating the account from the trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) + } + // Encode the account and update the account trie + addr := obj.Address() + + data, err := rlp.EncodeToBytes(obj) if err != nil { panic(fmt.Errorf("can't encode object at %x: %v", addr[:], err)) } - self.setError(self.trie.TryUpdate(addr[:], data)) + s.setError(s.trie.TryUpdate(addr[:], data)) } // deleteStateObject removes the given object from the state trie. -func (self *StateDB) deleteStateObject(stateObject *stateObject) { - stateObject.deleted = true - addr := stateObject.Address() - self.setError(self.trie.TryDelete(addr[:])) +func (s *StateDB) deleteStateObject(obj *stateObject) { + // Track the amount of time wasted on deleting the account from the trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountUpdates += time.Since(start) }(time.Now()) + } + // Delete the account from the trie + addr := obj.Address() + s.setError(s.trie.TryDelete(addr[:])) } -// Retrieve a state object given by the address. Returns nil if not found. -func (self *StateDB) getStateObject(addr common.Address) (stateObject *stateObject) { - // Prefer 'live' objects. - if obj := self.stateObjects[addr]; obj != nil { - if obj.deleted { - return nil - } +// getStateObject retrieves a state object given by the address, returning nil if +// the object is not found or was deleted in this execution context. If you need +// to differentiate between non-existent/just-deleted, use getDeletedStateObject. +func (s *StateDB) getStateObject(addr common.Address) *stateObject { + if obj := s.getDeletedStateObject(addr); obj != nil && !obj.deleted { return obj } + return nil +} - // Load the object from the database. - enc, err := self.trie.TryGet(addr[:]) +// getDeletedStateObject is similar to getStateObject, but instead of returning +// nil for a deleted state object, it returns the actual object with the deleted +// flag set. This is needed by the state journal to revert to the correct self- +// destructed object instead of wiping all knowledge about the state object. +func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { + // Prefer live objects if any is available + if obj := s.stateObjects[addr]; obj != nil { + return obj + } + // Track the amount of time wasted on loading the object from the database + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountReads += time.Since(start) }(time.Now()) + } + // Load the object from the database + enc, err := s.trie.TryGet(addr[:]) if len(enc) == 0 { - self.setError(err) + s.setError(err) return nil } var data Account @@ -423,9 +484,9 @@ func (self *StateDB) getStateObject(addr common.Address) (stateObject *stateObje log.Error("Failed to decode state object", "addr", addr, "err", err) return nil } - // Insert into the live set. - obj := newObject(self, addr, data) - self.setStateObject(obj) + // Insert into the live set + obj := newObject(s, addr, data) + s.setStateObject(obj) return obj } @@ -436,7 +497,7 @@ func (self *StateDB) setStateObject(object *stateObject) { // Retrieve a state object or create a new state object if nil. func (self *StateDB) GetOrNewStateObject(addr common.Address) *stateObject { stateObject := self.getStateObject(addr) - if stateObject == nil || stateObject.deleted { + if stateObject == nil { stateObject, _ = self.createObject(addr) } return stateObject @@ -445,7 +506,8 @@ func (self *StateDB) GetOrNewStateObject(addr common.Address) *stateObject { // createObject creates a new state object. If there is an existing account with // the given address, it is overwritten and returned as the second return value. func (self *StateDB) createObject(addr common.Address) (newobj, prev *stateObject) { - prev = self.getStateObject(addr) + prev = self.getDeletedStateObject(addr) // Note, prev might have been deleted, we need that! + newobj = newObject(self, addr, Account{}) newobj.setNonce(0) // sets the object to dirty if prev == nil { @@ -474,20 +536,33 @@ func (self *StateDB) CreateAccount(addr common.Address) { } } -func (db *StateDB) ForEachStorage(addr common.Address, cb func(key, value common.Hash) bool) { +func (db *StateDB) ForEachStorage(addr common.Address, cb func(key, value common.Hash) bool) error { so := db.getStateObject(addr) if so == nil { - return + return nil } it := trie.NewIterator(so.getTrie(db.db).NodeIterator(nil)) + for it.Next() { key := common.BytesToHash(db.trie.GetKey(it.Key)) if value, dirty := so.dirtyStorage[key]; dirty { - cb(key, value) + if !cb(key, value) { + return nil + } continue } - cb(key, common.BytesToHash(it.Value)) + + if len(it.Value) > 0 { + _, content, _, err := rlp.Split(it.Value) + if err != nil { + return err + } + if !cb(key, common.BytesToHash(content)) { + return nil + } + } } + return nil } // Copy creates a deep, independent copy of the state. @@ -495,15 +570,16 @@ func (db *StateDB) ForEachStorage(addr common.Address, cb func(key, value common func (self *StateDB) Copy() *StateDB { // Copy all the basic fields, initialize the memory ones state := &StateDB{ - db: self.db, - trie: self.db.CopyTrie(self.trie), - stateObjects: make(map[common.Address]*stateObject, len(self.journal.dirties)), - stateObjectsDirty: make(map[common.Address]struct{}, len(self.journal.dirties)), - refund: self.refund, - logs: make(map[common.Hash][]*types.Log, len(self.logs)), - logSize: self.logSize, - preimages: make(map[common.Hash][]byte), - journal: newJournal(), + db: self.db, + trie: self.db.CopyTrie(self.trie), + stateObjects: make(map[common.Address]*stateObject, len(self.journal.dirties)), + stateObjectsPending: make(map[common.Address]struct{}, len(self.stateObjectsPending)), + stateObjectsDirty: make(map[common.Address]struct{}, len(self.journal.dirties)), + refund: self.refund, + logs: make(map[common.Hash][]*types.Log, len(self.logs)), + logSize: self.logSize, + preimages: make(map[common.Hash][]byte, len(self.preimages)), + journal: newJournal(), } // Copy the dirty states, logs, and preimages for addr := range self.journal.dirties { @@ -512,18 +588,29 @@ func (self *StateDB) Copy() *StateDB { // in the stateObjects: OOG after touch on ripeMD prior to Byzantium. Thus, we need to check for // nil if object, exist := self.stateObjects[addr]; exist { + // Even though the original object is dirty, we are not copying the journal, + // so we need to make sure that anyside effect the journal would have caused + // during a commit (or similar op) is already applied to the copy. state.stateObjects[addr] = object.deepCopy(state) - state.stateObjectsDirty[addr] = struct{}{} + + state.stateObjectsDirty[addr] = struct{}{} // Mark the copy dirty to force internal (code/state) commits + state.stateObjectsPending[addr] = struct{}{} // Mark the copy pending to force external (account) commits } } // Above, we don't copy the actual journal. This means that if the copy is copied, the // loop above will be a no-op, since the copy's journal is empty. // Thus, here we iterate over stateObjects, to enable copies of copies + for addr := range self.stateObjectsPending { + if _, exist := state.stateObjects[addr]; !exist { + state.stateObjects[addr] = self.stateObjects[addr].deepCopy(state) + } + state.stateObjectsPending[addr] = struct{}{} + } for addr := range self.stateObjectsDirty { if _, exist := state.stateObjects[addr]; !exist { state.stateObjects[addr] = self.stateObjects[addr].deepCopy(state) - state.stateObjectsDirty[addr] = struct{}{} } + state.stateObjectsDirty[addr] = struct{}{} } for hash, logs := range self.logs { cpy := make([]*types.Log, len(logs)) @@ -568,11 +655,12 @@ func (self *StateDB) GetRefund() uint64 { return self.refund } -// Finalise finalises the state by removing the self destructed objects -// and clears the journal as well as the refunds. +// Finalise finalises the state by removing the self destructed objects and clears +// the journal as well as the refunds. Finalise, however, will not push any updates +// into the tries just yet. Only IntermediateRoot or Commit will do that. func (s *StateDB) Finalise(deleteEmptyObjects bool) { for addr := range s.journal.dirties { - stateObject, exist := s.stateObjects[addr] + obj, exist := s.stateObjects[addr] if !exist { // ripeMD is 'touched' at block 1714175, in tx 0x1237f737031e40bcde4a8b7e717b2d15e3ecadfe49bb1bbc71ee9deb09c6fcf2 // That tx goes out of gas, and although the notion of 'touched' does not exist there, the @@ -582,13 +670,12 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) { // Thus, we can safely ignore it here continue } - - if stateObject.suicided || (deleteEmptyObjects && stateObject.empty()) { - s.deleteStateObject(stateObject) + if obj.suicided || (deleteEmptyObjects && obj.empty()) { + obj.deleted = true } else { - stateObject.updateRoot(s.db) - s.updateStateObject(stateObject) + obj.finalise() } + s.stateObjectsPending[addr] = struct{}{} s.stateObjectsDirty[addr] = struct{}{} } // Invalidate journal because reverting across transactions is not allowed. @@ -599,7 +686,25 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) { // It is called in between transactions to get the root hash that // goes into transaction receipts. func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { + // Finalise all the dirty storage states and write them into the tries s.Finalise(deleteEmptyObjects) + + for addr := range s.stateObjectsPending { + obj := s.stateObjects[addr] + if obj.deleted { + s.deleteStateObject(obj) + } else { + obj.updateRoot(s.db) + s.updateStateObject(obj) + } + } + if len(s.stateObjectsPending) > 0 { + s.stateObjectsPending = make(map[common.Address]struct{}) + } + // Track the amount of time wasted on hashing the account trie + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountHashes += time.Since(start) }(time.Now()) + } return s.trie.Hash() } @@ -612,48 +717,45 @@ func (self *StateDB) Prepare(thash, bhash common.Hash, ti int) { } func (s *StateDB) clearJournalAndRefund() { - s.journal = newJournal() - s.validRevisions = s.validRevisions[:0] - s.refund = 0 + if len(s.journal.entries) > 0 { + s.journal = newJournal() + s.refund = 0 + } + s.validRevisions = s.validRevisions[:0] // Snapshots can be created without journal entires } // Commit writes the state to the underlying in-memory trie database. -func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error) { - defer s.clearJournalAndRefund() +func (s *StateDB) Commit(deleteEmptyObjects bool) (common.Hash, error) { + // Finalize any pending changes and merge everything into the tries + s.IntermediateRoot(deleteEmptyObjects) - for addr := range s.journal.dirties { - s.stateObjectsDirty[addr] = struct{}{} - } - // Commit objects to the trie. - for addr, stateObject := range s.stateObjects { - _, isDirty := s.stateObjectsDirty[addr] - switch { - case stateObject.suicided || (isDirty && deleteEmptyObjects && stateObject.empty()): - // If the object has been removed, don't bother syncing it - // and just mark it for deletion in the trie. - s.deleteStateObject(stateObject) - case isDirty: + // Commit objects to the trie, measuring the elapsed time + for addr := range s.stateObjectsDirty { + if obj := s.stateObjects[addr]; !obj.deleted { // Write any contract code associated with the state object - if stateObject.code != nil && stateObject.dirtyCode { - s.db.TrieDB().InsertBlob(common.BytesToHash(stateObject.CodeHash()), stateObject.code) - stateObject.dirtyCode = false + if obj.code != nil && obj.dirtyCode { + s.db.TrieDB().InsertBlob(common.BytesToHash(obj.CodeHash()), obj.code) + obj.dirtyCode = false } - // Write any storage changes in the state object to its storage trie. - if err := stateObject.CommitTrie(s.db); err != nil { + // Write any storage changes in the state object to its storage trie + if err := obj.CommitTrie(s.db); err != nil { return common.Hash{}, err } - // Update the object in the main account trie. - s.updateStateObject(stateObject) } - delete(s.stateObjectsDirty, addr) } - // Write trie changes. - root, err = s.trie.Commit(func(leaf []byte, parent common.Hash) error { + if len(s.stateObjectsDirty) > 0 { + s.stateObjectsDirty = make(map[common.Address]struct{}) + } + // Write the account trie changes, measuing the amount of wasted time + if metrics.EnabledExpensive { + defer func(start time.Time) { s.AccountCommits += time.Since(start) }(time.Now()) + } + return s.trie.Commit(func(leaf []byte, parent common.Hash) error { var account Account if err := rlp.DecodeBytes(leaf, &account); err != nil { return nil } - if account.Root != emptyState { + if account.Root != emptyRoot { s.db.TrieDB().Reference(account.Root, parent) } code := common.BytesToHash(account.CodeHash) @@ -662,6 +764,4 @@ func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error) } return nil }) - log.Debug("Trie cache stats after commit", "misses", trie.CacheMisses(), "unloads", trie.CacheUnloads()) - return root, err } diff --git a/core/state/statedb_test.go b/core/state/statedb_test.go index cbd5bc75e75f..bfb081191374 100644 --- a/core/state/statedb_test.go +++ b/core/state/statedb_test.go @@ -25,21 +25,22 @@ import ( "math/rand" "reflect" "strings" + "sync" "testing" "testing/quick" - check "gopkg.in/check.v1" + "gopkg.in/check.v1" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethdb" ) // Tests that updating a state trie does not leak any database writes prior to // actually committing the state. func TestUpdateLeaks(t *testing.T) { // Create an empty state database - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() state, _ := New(common.Hash{}, NewDatabase(db)) // Update it with some accounts @@ -53,21 +54,27 @@ func TestUpdateLeaks(t *testing.T) { if i%3 == 0 { state.SetCode(addr, []byte{i, i, i, i, i}) } - state.IntermediateRoot(false) } + + root := state.IntermediateRoot(false) + if err := state.Database().TrieDB().Commit(root, false); err != nil { + t.Errorf("can not commit trie %v to persistent database", root.Hex()) + } + // Ensure that no data was leaked into the database - for _, key := range db.Keys() { - value, _ := db.Get(key) - t.Errorf("State leaked into database: %x -> %x", key, value) + it := db.NewIterator() + for it.Next() { + t.Errorf("State leaked into database: %x -> %x", it.Key(), it.Value()) } + it.Release() } // Tests that no intermediate state of an object is stored into the database, // only the one right before the commit. func TestIntermediateLeaks(t *testing.T) { // Create two state databases, one transitioning to the final state, the other final from the beginning - transDb := ethdb.NewMemDatabase() - finalDb := ethdb.NewMemDatabase() + transDb := rawdb.NewMemoryDatabase() + finalDb := rawdb.NewMemoryDatabase() transState, _ := New(common.Hash{}, NewDatabase(transDb)) finalState, _ := New(common.Hash{}, NewDatabase(finalDb)) @@ -85,34 +92,56 @@ func TestIntermediateLeaks(t *testing.T) { // Modify the transient state. for i := byte(0); i < 255; i++ { - modify(transState, common.Address{byte(i)}, i, 0) + modify(transState, common.Address{i}, i, 0) } // Write modifications to trie. transState.IntermediateRoot(false) // Overwrite all the data with new values in the transient database. for i := byte(0); i < 255; i++ { - modify(transState, common.Address{byte(i)}, i, 99) - modify(finalState, common.Address{byte(i)}, i, 99) + modify(transState, common.Address{i}, i, 99) + modify(finalState, common.Address{i}, i, 99) } // Commit and cross check the databases. - if _, err := transState.Commit(false); err != nil { + transRoot, err := transState.Commit(false) + if err != nil { t.Fatalf("failed to commit transition state: %v", err) } - if _, err := finalState.Commit(false); err != nil { + if err = transState.Database().TrieDB().Commit(transRoot, false); err != nil { + t.Errorf("can not commit trie %v to persistent database", transRoot.Hex()) + } + + finalRoot, err := finalState.Commit(false) + if err != nil { t.Fatalf("failed to commit final state: %v", err) } - for _, key := range finalDb.Keys() { - if _, err := transDb.Get(key); err != nil { - val, _ := finalDb.Get(key) - t.Errorf("entry missing from the transition database: %x -> %x", key, val) + if err = finalState.Database().TrieDB().Commit(finalRoot, false); err != nil { + t.Errorf("can not commit trie %v to persistent database", finalRoot.Hex()) + } + + it := finalDb.NewIterator() + for it.Next() { + key, fvalue := it.Key(), it.Value() + tvalue, err := transDb.Get(key) + if err != nil { + t.Errorf("entry missing from the transition database: %x -> %x", key, fvalue) + } + if !bytes.Equal(fvalue, tvalue) { + t.Errorf("the value associate key %x is mismatch,: %x in transition database ,%x in final database", key, tvalue, fvalue) } } - for _, key := range transDb.Keys() { - if _, err := finalDb.Get(key); err != nil { - val, _ := transDb.Get(key) - t.Errorf("extra entry in the transition database: %x -> %x", key, val) + it.Release() + + it = transDb.NewIterator() + for it.Next() { + key, tvalue := it.Key(), it.Value() + fvalue, err := finalDb.Get(key) + if err != nil { + t.Errorf("extra entry in the transition database: %x -> %x", key, it.Value()) + } + if !bytes.Equal(fvalue, tvalue) { + t.Errorf("the value associate key %x is mismatch,: %x in transition database ,%x in final database", key, tvalue, fvalue) } } } @@ -122,7 +151,7 @@ func TestIntermediateLeaks(t *testing.T) { // https://github.com/ethereum/go-ethereum/pull/15549. func TestCopy(t *testing.T) { // Create a random state test to copy and modify "independently" - orig, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + orig, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) for i := byte(0); i < 255; i++ { obj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i})) @@ -131,32 +160,45 @@ func TestCopy(t *testing.T) { } orig.Finalise(false) - // Copy the state, modify both in-memory + // Copy the state copy := orig.Copy() + // Copy the copy state + ccopy := copy.Copy() + + // modify all in memory for i := byte(0); i < 255; i++ { origObj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i})) copyObj := copy.GetOrNewStateObject(common.BytesToAddress([]byte{i})) + ccopyObj := ccopy.GetOrNewStateObject(common.BytesToAddress([]byte{i})) origObj.AddBalance(big.NewInt(2 * int64(i))) copyObj.AddBalance(big.NewInt(3 * int64(i))) + ccopyObj.AddBalance(big.NewInt(4 * int64(i))) orig.updateStateObject(origObj) copy.updateStateObject(copyObj) + ccopy.updateStateObject(copyObj) } - // Finalise the changes on both concurrently - done := make(chan struct{}) - go func() { - orig.Finalise(true) - close(done) - }() - copy.Finalise(true) - <-done - // Verify that the two states have been updated independently + // Finalise the changes on all concurrently + finalise := func(wg *sync.WaitGroup, db *StateDB) { + defer wg.Done() + db.Finalise(true) + } + + var wg sync.WaitGroup + wg.Add(3) + go finalise(&wg, orig) + go finalise(&wg, copy) + go finalise(&wg, ccopy) + wg.Wait() + + // Verify that the three states have been updated independently for i := byte(0); i < 255; i++ { origObj := orig.GetOrNewStateObject(common.BytesToAddress([]byte{i})) copyObj := copy.GetOrNewStateObject(common.BytesToAddress([]byte{i})) + ccopyObj := ccopy.GetOrNewStateObject(common.BytesToAddress([]byte{i})) if want := big.NewInt(3 * int64(i)); origObj.Balance().Cmp(want) != 0 { t.Errorf("orig obj %d: balance mismatch: have %v, want %v", i, origObj.Balance(), want) @@ -164,6 +206,9 @@ func TestCopy(t *testing.T) { if want := big.NewInt(4 * int64(i)); copyObj.Balance().Cmp(want) != 0 { t.Errorf("copy obj %d: balance mismatch: have %v, want %v", i, copyObj.Balance(), want) } + if want := big.NewInt(5 * int64(i)); ccopyObj.Balance().Cmp(want) != 0 { + t.Errorf("copy obj %d: balance mismatch: have %v, want %v", i, ccopyObj.Balance(), want) + } } } @@ -276,13 +321,22 @@ func newTestAction(addr common.Address, r *rand.Rand) testAction { }, args: make([]int64, 1), }, + { + name: "AddPreimage", + fn: func(a testAction, s *StateDB) { + preimage := []byte{1} + hash := common.BytesToHash(preimage) + s.AddPreimage(hash, preimage) + }, + args: make([]int64, 1), + }, } action := actions[r.Intn(len(actions))] var nameargs []string if !action.noAddr { nameargs = append(nameargs, addr.Hex()) } - for _, i := range action.args { + for i := range action.args { action.args[i] = rand.Int63n(100) nameargs = append(nameargs, fmt.Sprint(action.args[i])) } @@ -333,7 +387,7 @@ func (test *snapshotTest) String() string { func (test *snapshotTest) run() bool { // Run all actions and create snapshots. var ( - state, _ = New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + state, _ = New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) snapshotRevs = make([]int, len(test.snapshots)) sindex = 0 ) @@ -424,14 +478,206 @@ func (s *StateSuite) TestTouchDelete(c *check.C) { // TestCopyOfCopy tests that modified objects are carried over to the copy, and the copy of the copy. // See https://github.com/ethereum/go-ethereum/pull/15225#issuecomment-380191512 func TestCopyOfCopy(t *testing.T) { - sdb, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) addr := common.HexToAddress("aaaa") - sdb.SetBalance(addr, big.NewInt(42)) + state.SetBalance(addr, big.NewInt(42)) - if got := sdb.Copy().GetBalance(addr).Uint64(); got != 42 { + if got := state.Copy().GetBalance(addr).Uint64(); got != 42 { t.Fatalf("1st copy fail, expected 42, got %v", got) } - if got := sdb.Copy().Copy().GetBalance(addr).Uint64(); got != 42 { + if got := state.Copy().Copy().GetBalance(addr).Uint64(); got != 42 { t.Fatalf("2nd copy fail, expected 42, got %v", got) } } + +// Tests a regression where committing a copy lost some internal meta information, +// leading to corrupted subsequent copies. +// +// See https://github.com/ethereum/go-ethereum/issues/20106. +func TestCopyCommitCopy(t *testing.T) { + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) + + // Create an account and check if the retrieved balance is correct + addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe") + skey := common.HexToHash("aaa") + sval := common.HexToHash("bbb") + + state.SetBalance(addr, big.NewInt(42)) // Change the account trie + state.SetCode(addr, []byte("hello")) // Change an external metadata + state.SetState(addr, skey, sval) // Change the storage trie + + if balance := state.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("initial balance mismatch: have %v, want %v", balance, 42) + } + if code := state.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("initial code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := state.GetState(addr, skey); val != sval { + t.Fatalf("initial non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := state.GetCommittedState(addr, skey); val != (common.Hash{}) { + t.Fatalf("initial committed storage slot mismatch: have %x, want %x", val, common.Hash{}) + } + // Copy the non-committed state database and check pre/post commit balance + copyOne := state.Copy() + if balance := copyOne.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("first copy pre-commit balance mismatch: have %v, want %v", balance, 42) + } + if code := copyOne.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("first copy pre-commit code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyOne.GetState(addr, skey); val != sval { + t.Fatalf("first copy pre-commit non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyOne.GetCommittedState(addr, skey); val != (common.Hash{}) { + t.Fatalf("first copy pre-commit committed storage slot mismatch: have %x, want %x", val, common.Hash{}) + } + + copyOne.Commit(false) + if balance := copyOne.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("first copy post-commit balance mismatch: have %v, want %v", balance, 42) + } + if code := copyOne.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("first copy post-commit code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyOne.GetState(addr, skey); val != sval { + t.Fatalf("first copy post-commit non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyOne.GetCommittedState(addr, skey); val != sval { + t.Fatalf("first copy post-commit committed storage slot mismatch: have %x, want %x", val, sval) + } + // Copy the copy and check the balance once more + copyTwo := copyOne.Copy() + if balance := copyTwo.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("second copy balance mismatch: have %v, want %v", balance, 42) + } + if code := copyTwo.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("second copy code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyTwo.GetState(addr, skey); val != sval { + t.Fatalf("second copy non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyTwo.GetCommittedState(addr, skey); val != sval { + t.Fatalf("second copy post-commit committed storage slot mismatch: have %x, want %x", val, sval) + } +} + +// Tests a regression where committing a copy lost some internal meta information, +// leading to corrupted subsequent copies. +// +// See https://github.com/ethereum/go-ethereum/issues/20106. +func TestCopyCopyCommitCopy(t *testing.T) { + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) + + // Create an account and check if the retrieved balance is correct + addr := common.HexToAddress("0xaffeaffeaffeaffeaffeaffeaffeaffeaffeaffe") + skey := common.HexToHash("aaa") + sval := common.HexToHash("bbb") + + state.SetBalance(addr, big.NewInt(42)) // Change the account trie + state.SetCode(addr, []byte("hello")) // Change an external metadata + state.SetState(addr, skey, sval) // Change the storage trie + + if balance := state.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("initial balance mismatch: have %v, want %v", balance, 42) + } + if code := state.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("initial code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := state.GetState(addr, skey); val != sval { + t.Fatalf("initial non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := state.GetCommittedState(addr, skey); val != (common.Hash{}) { + t.Fatalf("initial committed storage slot mismatch: have %x, want %x", val, common.Hash{}) + } + // Copy the non-committed state database and check pre/post commit balance + copyOne := state.Copy() + if balance := copyOne.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("first copy balance mismatch: have %v, want %v", balance, 42) + } + if code := copyOne.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("first copy code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyOne.GetState(addr, skey); val != sval { + t.Fatalf("first copy non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyOne.GetCommittedState(addr, skey); val != (common.Hash{}) { + t.Fatalf("first copy committed storage slot mismatch: have %x, want %x", val, common.Hash{}) + } + // Copy the copy and check the balance once more + copyTwo := copyOne.Copy() + if balance := copyTwo.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("second copy pre-commit balance mismatch: have %v, want %v", balance, 42) + } + if code := copyTwo.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("second copy pre-commit code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyTwo.GetState(addr, skey); val != sval { + t.Fatalf("second copy pre-commit non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyTwo.GetCommittedState(addr, skey); val != (common.Hash{}) { + t.Fatalf("second copy pre-commit committed storage slot mismatch: have %x, want %x", val, common.Hash{}) + } + copyTwo.Commit(false) + if balance := copyTwo.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("second copy post-commit balance mismatch: have %v, want %v", balance, 42) + } + if code := copyTwo.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("second copy post-commit code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyTwo.GetState(addr, skey); val != sval { + t.Fatalf("second copy post-commit non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyTwo.GetCommittedState(addr, skey); val != sval { + t.Fatalf("second copy post-commit committed storage slot mismatch: have %x, want %x", val, sval) + } + // Copy the copy-copy and check the balance once more + copyThree := copyTwo.Copy() + if balance := copyThree.GetBalance(addr); balance.Cmp(big.NewInt(42)) != 0 { + t.Fatalf("third copy balance mismatch: have %v, want %v", balance, 42) + } + if code := copyThree.GetCode(addr); !bytes.Equal(code, []byte("hello")) { + t.Fatalf("third copy code mismatch: have %x, want %x", code, []byte("hello")) + } + if val := copyThree.GetState(addr, skey); val != sval { + t.Fatalf("third copy non-committed storage slot mismatch: have %x, want %x", val, sval) + } + if val := copyThree.GetCommittedState(addr, skey); val != sval { + t.Fatalf("third copy committed storage slot mismatch: have %x, want %x", val, sval) + } +} + +// TestDeleteCreateRevert tests a weird state transition corner case that we hit +// while changing the internals of statedb. The workflow is that a contract is +// self destructed, then in a followup transaction (but same block) it's created +// again and the transaction reverted. +// +// The original statedb implementation flushed dirty objects to the tries after +// each transaction, so this works ok. The rework accumulated writes in memory +// first, but the journal wiped the entire state object on create-revert. +func TestDeleteCreateRevert(t *testing.T) { + // Create an initial state with a single contract + state, _ := New(common.Hash{}, NewDatabase(rawdb.NewMemoryDatabase())) + + addr := toAddr([]byte("so")) + state.SetBalance(addr, big.NewInt(1)) + + root, _ := state.Commit(false) + state.Reset(root) + + // Simulate self-destructing in one transaction, then create-reverting in another + state.Suicide(addr) + state.Finalise(true) + + id := state.Snapshot() + state.SetBalance(addr, big.NewInt(2)) + state.RevertToSnapshot(id) + + // Commit the entire state and make sure we don't crash and have the correct state + root, _ = state.Commit(true) + state.Reset(root) + + if state.getStateObject(addr) != nil { + t.Fatalf("self-destructed contract came alive") + } +} diff --git a/core/state/sync.go b/core/state/sync.go index c566e790739a..ef7930527366 100644 --- a/core/state/sync.go +++ b/core/state/sync.go @@ -20,12 +20,13 @@ import ( "bytes" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) // NewStateSync create a new state trie download scheduler. -func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.Sync { +func NewStateSync(root common.Hash, database ethdb.KeyValueReader, bloom *trie.SyncBloom) *trie.Sync { var syncer *trie.Sync callback := func(leaf []byte, parent common.Hash) error { var obj Account @@ -36,6 +37,6 @@ func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.Sync { syncer.AddRawEntry(common.BytesToHash(obj.CodeHash), 64, parent) return nil } - syncer = trie.NewSync(root, database, callback) + syncer = trie.NewSync(root, database, callback, bloom) return syncer } diff --git a/core/state/sync_test.go b/core/state/sync_test.go index 31774016082a..de098dce0fea 100644 --- a/core/state/sync_test.go +++ b/core/state/sync_test.go @@ -22,8 +22,10 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" "github.com/ethereum/go-ethereum/trie" ) @@ -38,7 +40,7 @@ type testAccount struct { // makeTestState create a sample test state to test node-wise reconstruction. func makeTestState() (Database, common.Hash, []*testAccount) { // Create an empty state - db := NewDatabase(ethdb.NewMemDatabase()) + db := NewDatabase(rawdb.NewMemoryDatabase()) state, _ := New(common.Hash{}, db) // Fill it with some arbitrary data @@ -124,7 +126,7 @@ func checkStateConsistency(db ethdb.Database, root common.Hash) error { // Tests that an empty state is not scheduled for syncing. func TestEmptyStateSync(t *testing.T) { empty := common.HexToHash("56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421") - if req := NewStateSync(empty, ethdb.NewMemDatabase()).Missing(1); len(req) != 0 { + if req := NewStateSync(empty, rawdb.NewMemoryDatabase(), trie.NewSyncBloom(1, memorydb.New())).Missing(1); len(req) != 0 { t.Errorf("content requested for empty state: %v", req) } } @@ -139,8 +141,8 @@ func testIterativeStateSync(t *testing.T, batch int) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() - sched := NewStateSync(srcRoot, dstDb) + dstDb := rawdb.NewMemoryDatabase() + sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) queue := append([]common.Hash{}, sched.Missing(batch)...) for len(queue) > 0 { @@ -171,8 +173,8 @@ func TestIterativeDelayedStateSync(t *testing.T) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() - sched := NewStateSync(srcRoot, dstDb) + dstDb := rawdb.NewMemoryDatabase() + sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) queue := append([]common.Hash{}, sched.Missing(0)...) for len(queue) > 0 { @@ -208,8 +210,8 @@ func testIterativeRandomStateSync(t *testing.T, batch int) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() - sched := NewStateSync(srcRoot, dstDb) + dstDb := rawdb.NewMemoryDatabase() + sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) queue := make(map[common.Hash]struct{}) for _, hash := range sched.Missing(batch) { @@ -248,8 +250,8 @@ func TestIterativeRandomDelayedStateSync(t *testing.T) { srcDb, srcRoot, srcAccounts := makeTestState() // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() - sched := NewStateSync(srcRoot, dstDb) + dstDb := rawdb.NewMemoryDatabase() + sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) queue := make(map[common.Hash]struct{}) for _, hash := range sched.Missing(0) { @@ -295,8 +297,8 @@ func TestIncompleteStateSync(t *testing.T) { checkTrieConsistency(srcDb.TrieDB().DiskDB().(ethdb.Database), srcRoot) // Create a destination state and sync with the scheduler - dstDb := ethdb.NewMemDatabase() - sched := NewStateSync(srcRoot, dstDb) + dstDb := rawdb.NewMemoryDatabase() + sched := NewStateSync(srcRoot, dstDb, trie.NewSyncBloom(1, dstDb)) added := []common.Hash{} queue := append([]common.Hash{}, sched.Missing(1)...) diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go new file mode 100644 index 000000000000..2b2a1f03b48d --- /dev/null +++ b/core/state_prefetcher.go @@ -0,0 +1,85 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" +) + +// statePrefetcher is a basic Prefetcher, which blindly executes a block on top +// of an arbitrary state with the goal of prefetching potentially useful state +// data from disk before the main block processor start executing. +type statePrefetcher struct { + config *params.ChainConfig // Chain configuration options + bc *BlockChain // Canonical block chain + engine consensus.Engine // Consensus engine used for block rewards +} + +// newStatePrefetcher initialises a new statePrefetcher. +func newStatePrefetcher(config *params.ChainConfig, bc *BlockChain, engine consensus.Engine) *statePrefetcher { + return &statePrefetcher{ + config: config, + bc: bc, + engine: engine, + } +} + +// Prefetch processes the state changes according to the Ethereum rules by running +// the transaction messages using the statedb, but any changes are discarded. The +// only goal is to pre-cache transaction signatures and state trie nodes. +func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, cfg vm.Config, interrupt *uint32) { + var ( + header = block.Header() + gaspool = new(GasPool).AddGas(block.GasLimit()) + ) + // Iterate over and process the individual transactions + for i, tx := range block.Transactions() { + // If block precaching was interrupted, abort + if interrupt != nil && atomic.LoadUint32(interrupt) == 1 { + return + } + // Block precaching permitted to continue, execute the transaction + statedb.Prepare(tx.Hash(), block.Hash(), i) + if err := precacheTransaction(p.config, p.bc, nil, gaspool, statedb, header, tx, cfg); err != nil { + return // Ugh, something went horribly wrong, bail out + } + } +} + +// precacheTransaction attempts to apply a transaction to the given state database +// and uses the input parameters for its environment. The goal is not to execute +// the transaction successfully, rather to warm up touched data slots. +func precacheTransaction(config *params.ChainConfig, bc ChainContext, author *common.Address, gaspool *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, cfg vm.Config) error { + // Convert the transaction into an executable message and pre-cache its sender + msg, err := tx.AsMessage(types.MakeSigner(config, header.Number)) + if err != nil { + return err + } + // Create the EVM and execute the transaction + context := NewEVMContext(msg, header, bc, author) + vm := vm.NewEVM(context, statedb, config, cfg) + + _, _, _, _, err = ApplyMessage(vm, msg, gaspool) + return err +} diff --git a/core/state_processor.go b/core/state_processor.go index 5c5ca04f8aa6..ee2af2da1d19 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -71,7 +71,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg // Iterate over and process the individual transactions for i, tx := range block.Transactions() { statedb.Prepare(tx.Hash(), block.Hash(), i) - receipt, _, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, fees, cfg) + receipt, err := ApplyTransaction(p.config, p.bc, nil, gp, statedb, header, tx, usedGas, fees, cfg) if err != nil { return nil, nil, 0, big.NewInt(0), err } @@ -79,7 +79,7 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg allLogs = append(allLogs, receipt.Logs...) } // Finalize the block, applying any consensus engine specific extras (e.g. block rewards) - p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles(), receipts) + p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles()) return receipts, allLogs, *usedGas, fees, nil } @@ -88,10 +88,10 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg // and uses the input parameters for its environment. It returns the receipt // for the transaction, gas used and an error if the transaction failed, // indicating the block was invalid. -func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, fees *big.Int, cfg vm.Config) (*types.Receipt, uint64, error) { +func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *common.Address, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64, fees *big.Int, cfg vm.Config) (*types.Receipt, error) { msg, err := tx.AsMessage(types.MakeSigner(config, header.Number)) if err != nil { - return nil, 0, err + return nil, err } // Create a new context to be used in the EVM environment context := NewEVMContext(msg, header, bc, author) @@ -101,7 +101,7 @@ func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *commo // Apply the transaction to the current state (included in the env) _, gas, fee, failed, err := ApplyMessage(vmenv, msg, gp) if err != nil { - return nil, 0, err + return nil, err } // Update the state with pending changes var root []byte @@ -125,6 +125,9 @@ func ApplyTransaction(config *params.ChainConfig, bc ChainContext, author *commo // Set the receipt logs and create a bloom for filtering receipt.Logs = statedb.GetLogs(tx.Hash()) receipt.Bloom = types.CreateBloom(types.Receipts{receipt}) + receipt.BlockHash = statedb.BlockHash() + receipt.BlockNumber = header.Number + receipt.TransactionIndex = uint(statedb.TxIndex()) - return receipt, gas, err + return receipt, err } diff --git a/core/state_transition.go b/core/state_transition.go index 00f416aa9227..22c9ea7aa81b 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -77,10 +77,10 @@ type Message interface { } // IntrinsicGas computes the 'intrinsic gas' for a message with the given data. -func IntrinsicGas(data []byte, contractCreation, homestead bool) (uint64, error) { +func IntrinsicGas(data []byte, contractCreation, isEIP155 bool, isEIP2028 bool) (uint64, error) { // Set the starting gas for the raw transaction var gas uint64 - if contractCreation && homestead { + if contractCreation && isEIP155 { gas = params.TxGasContractCreation } else { gas = params.TxGas @@ -95,10 +95,14 @@ func IntrinsicGas(data []byte, contractCreation, homestead bool) (uint64, error) } } // Make sure we don't exceed uint64 for all data combinations - if (math.MaxUint64-gas)/params.TxDataNonZeroGas < nz { + nonZeroGas := params.TxDataNonZeroGasFrontier + if isEIP2028 { + nonZeroGas = params.TxDataNonZeroGasEIP2028 + } + if (math.MaxUint64-gas)/nonZeroGas < nz { return 0, vm.ErrOutOfGas } - gas += nz * params.TxDataNonZeroGas + gas += nz * nonZeroGas z := uint64(len(data)) - nz if (math.MaxUint64-gas)/params.TxDataZeroGas < z { @@ -188,10 +192,11 @@ func (st *StateTransition) TransitionDb() (ret []byte, usedGas, fee uint64, fail msg := st.msg sender := vm.AccountRef(msg.From()) homestead := st.evm.ChainConfig().IsHomestead(st.evm.BlockNumber) + istanbul := st.evm.ChainConfig().IsIstanbul(st.evm.BlockNumber) contractCreation := msg.To() == nil // Pay intrinsic gas - gas, err := IntrinsicGas(st.data, contractCreation, homestead) + gas, err := IntrinsicGas(st.data, contractCreation, homestead, istanbul) if err != nil { return nil, 0, 0, false, err } diff --git a/core/tx_list.go b/core/tx_list.go index 57abc5148643..75bfdaedac1a 100644 --- a/core/tx_list.go +++ b/core/tx_list.go @@ -418,9 +418,9 @@ func (l *txPricedList) Put(tx *types.Transaction) { // Removed notifies the prices transaction list that an old transaction dropped // from the pool. The list will just keep a counter of stale objects and update // the heap if a large enough ratio of transactions go stale. -func (l *txPricedList) Removed() { +func (l *txPricedList) Removed(count int) { // Bump the stale counter, but exit if still too low (< 25%) - l.stales++ + l.stales += count if l.stales <= len(*l.items)/4 { return } diff --git a/core/tx_noncer.go b/core/tx_noncer.go new file mode 100644 index 000000000000..aa87c643aee2 --- /dev/null +++ b/core/tx_noncer.go @@ -0,0 +1,79 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/state" +) + +// txNoncer is a tiny virtual state database to manage the executable nonces of +// accounts in the pool, falling back to reading from a real state database if +// an account is unknown. +type txNoncer struct { + fallback *state.StateDB + nonces map[common.Address]uint64 + lock sync.Mutex +} + +// newTxNoncer creates a new virtual state database to track the pool nonces. +func newTxNoncer(statedb *state.StateDB) *txNoncer { + return &txNoncer{ + fallback: statedb.Copy(), + nonces: make(map[common.Address]uint64), + } +} + +// get returns the current nonce of an account, falling back to a real state +// database if the account is unknown. +func (txn *txNoncer) get(addr common.Address) uint64 { + // We use mutex for get operation is the underlying + // state will mutate db even for read access. + txn.lock.Lock() + defer txn.lock.Unlock() + + if _, ok := txn.nonces[addr]; !ok { + txn.nonces[addr] = txn.fallback.GetNonce(addr) + } + return txn.nonces[addr] +} + +// set inserts a new virtual nonce into the virtual state database to be returned +// whenever the pool requests it instead of reaching into the real state database. +func (txn *txNoncer) set(addr common.Address, nonce uint64) { + txn.lock.Lock() + defer txn.lock.Unlock() + + txn.nonces[addr] = nonce +} + +// setIfLower updates a new virtual nonce into the virtual state database if the +// the new one is lower. +func (txn *txNoncer) setIfLower(addr common.Address, nonce uint64) { + txn.lock.Lock() + defer txn.lock.Unlock() + + if _, ok := txn.nonces[addr]; !ok { + txn.nonces[addr] = txn.fallback.GetNonce(addr) + } + if txn.nonces[addr] <= nonce { + return + } + txn.nonces[addr] = nonce +} diff --git a/core/tx_pool.go b/core/tx_pool.go index 7547a75d2437..b2b157f55832 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -89,20 +89,26 @@ var ( var ( // Metrics for the pending pool - pendingDiscardCounter = metrics.NewRegisteredCounter("txpool/pending/discard", nil) - pendingReplaceCounter = metrics.NewRegisteredCounter("txpool/pending/replace", nil) - pendingRateLimitCounter = metrics.NewRegisteredCounter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting - pendingNofundsCounter = metrics.NewRegisteredCounter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds + pendingDiscardMeter = metrics.NewRegisteredMeter("txpool/pending/discard", nil) + pendingReplaceMeter = metrics.NewRegisteredMeter("txpool/pending/replace", nil) + pendingRateLimitMeter = metrics.NewRegisteredMeter("txpool/pending/ratelimit", nil) // Dropped due to rate limiting + pendingNofundsMeter = metrics.NewRegisteredMeter("txpool/pending/nofunds", nil) // Dropped due to out-of-funds // Metrics for the queued pool - queuedDiscardCounter = metrics.NewRegisteredCounter("txpool/queued/discard", nil) - queuedReplaceCounter = metrics.NewRegisteredCounter("txpool/queued/replace", nil) - queuedRateLimitCounter = metrics.NewRegisteredCounter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting - queuedNofundsCounter = metrics.NewRegisteredCounter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds + queuedDiscardMeter = metrics.NewRegisteredMeter("txpool/queued/discard", nil) + queuedReplaceMeter = metrics.NewRegisteredMeter("txpool/queued/replace", nil) + queuedRateLimitMeter = metrics.NewRegisteredMeter("txpool/queued/ratelimit", nil) // Dropped due to rate limiting + queuedNofundsMeter = metrics.NewRegisteredMeter("txpool/queued/nofunds", nil) // Dropped due to out-of-funds // General tx metrics - invalidTxCounter = metrics.NewRegisteredCounter("txpool/invalid", nil) - underpricedTxCounter = metrics.NewRegisteredCounter("txpool/underpriced", nil) + knownTxMeter = metrics.NewRegisteredMeter("txpool/known", nil) + validTxMeter = metrics.NewRegisteredMeter("txpool/valid", nil) + invalidTxMeter = metrics.NewRegisteredMeter("txpool/invalid", nil) + underpricedTxMeter = metrics.NewRegisteredMeter("txpool/underpriced", nil) + + pendingGauge = metrics.NewRegisteredGauge("txpool/pending", nil) + queuedGauge = metrics.NewRegisteredGauge("txpool/queued", nil) + localGauge = metrics.NewRegisteredGauge("txpool/local", nil) ) // TxStatus is the current status of a transaction as seen by the pool. @@ -207,20 +213,20 @@ func (config *TxPoolConfig) sanitize() TxPoolConfig { // current state) and future transactions. Transactions move between those // two states over time as they are received and processed. type TxPool struct { - config TxPoolConfig - chainconfig *params.ChainConfig - chain blockChain - gasPrice *big.Int - txFeed event.Feed - scope event.SubscriptionScope - chainHeadCh chan ChainHeadEvent - chainHeadSub event.Subscription - signer types.Signer - mu sync.RWMutex - - currentState *state.StateDB // Current state in the blockchain head - pendingState *state.ManagedState // Pending state tracking virtual nonces - currentMaxGas uint64 // Current gas limit for transaction caps + config TxPoolConfig + chainconfig *params.ChainConfig + chain blockChain + gasPrice *big.Int + txFeed event.Feed + scope event.SubscriptionScope + signer types.Signer + mu sync.RWMutex + + istanbul bool // Fork indicator whether we are in the istanbul stage. + + currentState *state.StateDB // Current state in the blockchain head + pendingNonces *txNoncer // Pending state tracking virtual nonces + currentMaxGas uint64 // Current gas limit for transaction caps locals *accountSet // Set of local transaction to exempt from eviction rules journal *txJournal // Journal of local transaction to back up to disk @@ -233,9 +239,18 @@ type TxPool struct { senderResolver *SenderResolver // ecrecover helper - wg sync.WaitGroup // for shutdown sync + chainHeadCh chan ChainHeadEvent + chainHeadSub event.Subscription + reqResetCh chan *txpoolResetRequest + reqPromoteCh chan *accountSet + queueTxEventCh chan *types.Transaction + reorgDoneCh chan chan struct{} + reorgShutdownCh chan struct{} // requests shutdown of scheduleReorgLoop + wg sync.WaitGroup // tracks loop, scheduleReorgLoop +} - homestead bool +type txpoolResetRequest struct { + oldHead, newHead *types.Header } // NewTxPool creates a new transaction pool to gather, sort and filter inbound @@ -246,17 +261,22 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block // Create the transaction pool with its initial settings pool := &TxPool{ - config: config, - chainconfig: chainconfig, - chain: chain, - signer: types.NewEIP155Signer(chainconfig.ChainID), - pending: make(map[common.Address]*txList), - queue: make(map[common.Address]*txList), - beats: make(map[common.Address]time.Time), - all: newTxLookup(), - chainHeadCh: make(chan ChainHeadEvent, chainHeadChanSize), - gasPrice: new(big.Int).SetUint64(config.PriceLimit), - senderResolver: NewSenderResolver(runtime.NumCPU()*2, tx2addrCacheSize ), + config: config, + chainconfig: chainconfig, + chain: chain, + signer: types.NewEIP155Signer(chainconfig.ChainID), + pending: make(map[common.Address]*txList), + queue: make(map[common.Address]*txList), + beats: make(map[common.Address]time.Time), + all: newTxLookup(), + chainHeadCh: make(chan ChainHeadEvent, chainHeadChanSize), + reqResetCh: make(chan *txpoolResetRequest), + reqPromoteCh: make(chan *accountSet), + queueTxEventCh: make(chan *types.Transaction), + reorgDoneCh: make(chan chan struct{}), + reorgShutdownCh: make(chan struct{}), + gasPrice: new(big.Int).SetUint64(config.PriceLimit), + senderResolver: NewSenderResolver(runtime.NumCPU()*2, tx2addrCacheSize ), } pool.locals = newAccountSet(pool.signer) for _, addr := range config.Locals { @@ -269,6 +289,10 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block // Start the ecrecover helper go pool.senderResolver.Run() + // Start the reorg loop early so it can handle requests generated during journal loading. + pool.wg.Add(1) + go pool.scheduleReorgLoop() + // If local transactions and journaling is enabled, load from disk if !config.NoLocals && config.Journal != "" { pool.journal = newTxJournal(config.Journal) @@ -280,10 +304,9 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block log.Warn("Failed to rotate transaction journal", "err", err) } } - // Subscribe events from blockchain - pool.chainHeadSub = pool.chain.SubscribeChainHeadEvent(pool.chainHeadCh) - // Start the event loop and return + // Subscribe events from blockchain and start the main event loop. + pool.chainHeadSub = pool.chain.SubscribeChainHeadEvent(pool.chainHeadCh) pool.wg.Add(1) go pool.loop() @@ -296,38 +319,31 @@ func NewTxPool(config TxPoolConfig, chainconfig *params.ChainConfig, chain block func (pool *TxPool) loop() { defer pool.wg.Done() - // Start the stats reporting and transaction eviction tickers - var prevPending, prevQueued, prevStales int - - report := time.NewTicker(statsReportInterval) + var ( + prevPending, prevQueued, prevStales int + // Start the stats reporting and transaction eviction tickers + report = time.NewTicker(statsReportInterval) + evict = time.NewTicker(evictionInterval) + journal = time.NewTicker(pool.config.Rejournal) + // Track the previous head headers for transaction reorgs + head = pool.chain.CurrentBlock() + ) defer report.Stop() - - evict := time.NewTicker(evictionInterval) defer evict.Stop() - - journal := time.NewTicker(pool.config.Rejournal) defer journal.Stop() - // Track the previous head headers for transaction reorgs - head := pool.chain.CurrentBlock() - - // Keep waiting for and reacting to the various events for { select { // Handle ChainHeadEvent case ev := <-pool.chainHeadCh: if ev.Block != nil { - pool.mu.Lock() - if pool.chainconfig.IsHomestead(ev.Block.Number()) { - pool.homestead = true - } - pool.reset(head.Header(), ev.Block.Header()) + pool.requestReset(head.Header(), ev.Block.Header()) head = ev.Block - - pool.mu.Unlock() } - // Be unsubscribed due to system stopped + + // System shutdown. case <-pool.chainHeadSub.Err(): + close(pool.reorgShutdownCh) return // Handle stats reporting ticks @@ -372,99 +388,6 @@ func (pool *TxPool) loop() { } } -// lockedReset is a wrapper around reset to allow calling it in a thread safe -// manner. This method is only ever used in the tester! -func (pool *TxPool) lockedReset(oldHead, newHead *types.Header) { - pool.mu.Lock() - defer pool.mu.Unlock() - - pool.reset(oldHead, newHead) -} - -// reset retrieves the current state of the blockchain and ensures the content -// of the transaction pool is valid with regard to the chain state. -func (pool *TxPool) reset(oldHead, newHead *types.Header) { - // If we're reorging an old state, reinject all dropped transactions - var reinject types.Transactions - - if oldHead != nil && oldHead.Hash() != newHead.ParentHash { - // If the reorg is too deep, avoid doing it (will happen during fast sync) - oldNum := oldHead.Number.Uint64() - newNum := newHead.Number.Uint64() - - if depth := uint64(math.Abs(float64(oldNum) - float64(newNum))); depth > 64 { - log.Debug("Skipping deep transaction reorg", "depth", depth) - } else { - // Reorg seems shallow enough to pull in all transactions into memory - var discarded, included types.Transactions - - var ( - rem = pool.chain.GetBlock(oldHead.Hash(), oldHead.Number.Uint64()) - add = pool.chain.GetBlock(newHead.Hash(), newHead.Number.Uint64()) - ) - for rem.NumberU64() > add.NumberU64() { - discarded = append(discarded, rem.Transactions()...) - if rem = pool.chain.GetBlock(rem.ParentHash(), rem.NumberU64()-1); rem == nil { - log.Error("Unrooted old chain seen by tx pool", "block", oldHead.Number, "hash", oldHead.Hash()) - return - } - } - for add.NumberU64() > rem.NumberU64() { - included = append(included, add.Transactions()...) - if add = pool.chain.GetBlock(add.ParentHash(), add.NumberU64()-1); add == nil { - log.Error("Unrooted new chain seen by tx pool", "block", newHead.Number, "hash", newHead.Hash()) - return - } - } - for rem.Hash() != add.Hash() { - discarded = append(discarded, rem.Transactions()...) - if rem = pool.chain.GetBlock(rem.ParentHash(), rem.NumberU64()-1); rem == nil { - log.Error("Unrooted old chain seen by tx pool", "block", oldHead.Number, "hash", oldHead.Hash()) - return - } - included = append(included, add.Transactions()...) - if add = pool.chain.GetBlock(add.ParentHash(), add.NumberU64()-1); add == nil { - log.Error("Unrooted new chain seen by tx pool", "block", newHead.Number, "hash", newHead.Hash()) - return - } - } - reinject = types.TxDifference(discarded, included) - } - } - // Initialize the internal state to the current head - if newHead == nil { - newHead = pool.chain.CurrentBlock().Header() // Special case during testing - } - statedb, err := pool.chain.StateAt(newHead.Root) - if err != nil { - log.Error("Failed to reset txpool state", "err", err) - return - } - pool.currentState = statedb - pool.pendingState = state.ManageState(statedb) - pool.currentMaxGas = newHead.GasLimit - - // Inject any transactions discarded due to reorgs - log.Debug("Reinjecting stale transactions", "count", len(reinject)) - senderCacher.recover(pool.signer, reinject) - pool.addTxsLocked(reinject, false, nil) - - // validate the pool of pending transactions, this will remove - // any transactions that have been included in the block or - // have been invalidated because of another transaction (e.g. - // higher gas price) - pool.demoteUnexecutables() - - // Update all accounts to the latest known pending nonce - for addr, list := range pool.pending { - txs := list.Flatten() // Heavy but will be cached and is needed by the miner anyway - pool.pendingState.SetNonce(addr, txs[len(txs)-1].Nonce()+1) - } - // Check the queue and move transactions over to the pending if possible - // or remove those that have become invalid - pool.promoteExecutables(nil) -} - // Stop terminates the transaction pool. func (pool *TxPool) Stop() { // Unsubscribe all subscriptions registered from txpool @@ -511,12 +434,13 @@ func (pool *TxPool) SetGasPrice(price *big.Int) { log.Info("Transaction pool price threshold updated", "price", price) } -// State returns the virtual managed state of the transaction pool. -func (pool *TxPool) State() *state.ManagedState { +// Nonce returns the next nonce of an account, with all transactions executable +// by the pool already applied on top. +func (pool *TxPool) Nonce(addr common.Address) uint64 { pool.mu.RLock() defer pool.mu.RUnlock() - return pool.pendingState + return pool.pendingNonces.get(addr) } // Stats retrieves the current pool stats, namely the number of pending and the @@ -625,8 +549,9 @@ func (pool *TxPool) local() map[common.Address]types.Transactions { return txs } -// Do the most of validation outside of mutex -func preValidateTx(tx *types.Transaction, signer types.Signer, maxGas uint64, homestead bool) error { +// validateTx checks whether a transaction is valid according to the consensus +// rules and adheres to some heuristic limits of the local node (price and size). +func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { // Check nonce limit if params.NonceLimit != 0 && tx.Nonce() > params.NonceLimit { return fmt.Errorf("Too many transactions (%d) for an account", params.NonceLimit) @@ -641,27 +566,9 @@ func preValidateTx(tx *types.Transaction, signer types.Signer, maxGas uint64, ho return ErrNegativeValue } // Ensure the transaction doesn't exceed the current block limit gas. - if maxGas < tx.Gas() { + if pool.currentMaxGas < tx.Gas() { return ErrGasLimit } - // Make sure the transaction is signed properly - _, err := types.Sender(signer, tx) - if err != nil { - return ErrInvalidSender - } - intrGas, err := IntrinsicGas(tx.Data(), tx.To() == nil, homestead) - if err != nil { - return err - } - if tx.Gas() < intrGas { - return ErrIntrinsicGas - } - return nil -} - -// validateTx checks whether a transaction is valid according to the consensus -// rules and adheres to some heuristic limits of the local node (price and size). -func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { // Make sure the transaction is signed properly from, err := types.Sender(pool.signer, tx) if err != nil { @@ -681,32 +588,36 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { if pool.currentState.GetBalance(from).Cmp(tx.Cost()) < 0 { return ErrInsufficientFunds } + // Ensure the transaction has more gas than the basic tx fee. + intrGas, err := IntrinsicGas(tx.Data(), tx.To() == nil, true, pool.istanbul) + if err != nil { + return err + } + if tx.Gas() < intrGas { + return ErrIntrinsicGas + } return nil } -// add validates a transaction and inserts it into the non-executable queue for -// later pending promotion and execution. If the transaction is a replacement for -// an already pending or queued one, it overwrites the previous and returns this -// so outer code doesn't uselessly call promote. +// add validates a transaction and inserts it into the non-executable queue for later +// pending promotion and execution. If the transaction is a replacement for an already +// pending or queued one, it overwrites the previous transaction if its price is higher. // // If a newly added transaction is marked as local, its sending account will be -// whitelisted, preventing any associated transaction from being dropped out of -// the pool due to pricing constraints. -func (pool *TxPool) add(tx *types.Transaction, local bool) (bool, error) { - // Check nonce limit - if params.NonceLimit != 0 && tx.Nonce() > params.NonceLimit { - return false, fmt.Errorf("Too many transactions (%d) for an account", params.NonceLimit) - } +// whitelisted, preventing any associated transaction from being dropped out of the pool +// due to pricing constraints. +func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err error) { // If the transaction is already known, discard it hash := tx.Hash() if pool.all.Get(hash) != nil { log.Trace("Discarding already known transaction", "hash", hash) + knownTxMeter.Mark(1) return false, fmt.Errorf("known transaction: %x", hash) } // If the transaction fails basic validation, discard it if err := pool.validateTx(tx, local); err != nil { log.Trace("Discarding invalid transaction", "hash", hash, "err", err) - invalidTxCounter.Inc(1) + invalidTxMeter.Mark(1) return false, err } // If the transaction pool is full, discard underpriced transactions @@ -714,45 +625,41 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (bool, error) { // If the new transaction is underpriced, don't accept it if !local && pool.priced.Underpriced(tx, pool.locals) { log.Trace("Discarding underpriced transaction", "hash", hash, "price", tx.GasPrice()) - underpricedTxCounter.Inc(1) + underpricedTxMeter.Mark(1) return false, ErrUnderpriced } // New transaction is better than our worse ones, make room for it drop := pool.priced.Discard(pool.all.Count()-int(pool.config.GlobalSlots+pool.config.GlobalQueue-1), pool.locals) for _, tx := range drop { log.Trace("Discarding freshly underpriced transaction", "hash", tx.Hash(), "price", tx.GasPrice()) - underpricedTxCounter.Inc(1) + underpricedTxMeter.Mark(1) pool.removeTx(tx.Hash(), false) } } - // If the transaction is replacing an already pending one, do directly + // Try to replace an existing transaction in the pending pool from, _ := types.Sender(pool.signer, tx) // already validated if list := pool.pending[from]; list != nil && list.Overlaps(tx) { // Nonce already pending, check if required price bump is met inserted, old := list.Add(tx, pool.config.PriceBump) if !inserted { - pendingDiscardCounter.Inc(1) + pendingDiscardMeter.Mark(1) return false, ErrReplaceUnderpriced } // New transaction is better, replace old one if old != nil { pool.all.Remove(old.Hash()) - pool.priced.Removed() - pendingReplaceCounter.Inc(1) + pool.priced.Removed(1) + pendingReplaceMeter.Mark(1) } pool.all.Add(tx) pool.priced.Put(tx) pool.journalTx(from, tx) - + pool.queueTxEvent(tx) log.Trace("Pooled new executable transaction", "hash", hash, "from", from, "to", tx.To()) - - // We've directly injected a replacement transaction, notify subsystems - go pool.txFeed.Send(NewTxsEvent{types.Transactions{tx}}) - return old != nil, nil } // New transaction isn't replacing a pending one, push into queue - replace, err := pool.enqueueTx(hash, tx) + replaced, err = pool.enqueueTx(hash, tx) if err != nil { return false, err } @@ -763,10 +670,13 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (bool, error) { pool.locals.add(from) } } + if local || pool.locals.contains(from) { + localGauge.Inc(1) + } pool.journalTx(from, tx) log.Trace("Pooled new future transaction", "hash", hash, "from", from, "to", tx.To()) - return replace, nil + return replaced, nil } // enqueueTx inserts a new transaction into the non-executable transaction queue. @@ -781,14 +691,17 @@ func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) (bool, er inserted, old := pool.queue[from].Add(tx, pool.config.PriceBump) if !inserted { // An older transaction was better, discard this - queuedDiscardCounter.Inc(1) + queuedDiscardMeter.Mark(1) return false, ErrReplaceUnderpriced } // Discard any previous transaction and mark this if old != nil { pool.all.Remove(old.Hash()) - pool.priced.Removed() - queuedReplaceCounter.Inc(1) + pool.priced.Removed(1) + queuedReplaceMeter.Mark(1) + } else { + // Nothing was replaced, bump the queued counter + queuedGauge.Inc(1) } if pool.all.Get(hash) == nil { pool.all.Add(tx) @@ -824,17 +737,20 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T if !inserted { // An older transaction was better, discard this pool.all.Remove(hash) - pool.priced.Removed() + pool.priced.Removed(1) - pendingDiscardCounter.Inc(1) + pendingDiscardMeter.Mark(1) return false } // Otherwise discard any previous transaction and mark this if old != nil { pool.all.Remove(old.Hash()) - pool.priced.Removed() + pool.priced.Removed(1) - pendingReplaceCounter.Inc(1) + pendingReplaceMeter.Mark(1) + } else { + // Nothing was replaced, bump the pending counter + pendingGauge.Inc(1) } // Failsafe to work around direct pending inserts (tests) if pool.all.Get(hash) == nil { @@ -843,135 +759,143 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T } // Set the potentially new pending nonce and notify any subsystems of the new tx pool.beats[addr] = time.Now() - pool.pendingState.SetNonce(addr, tx.Nonce()+1) + pool.pendingNonces.set(addr, tx.Nonce()+1) return true } -// AddLocal enqueues a single transaction into the pool if it is valid, marking -// the sender as a local one in the mean time, ensuring it goes around the local -// pricing constraints. -func (pool *TxPool) AddLocal(tx *types.Transaction) error { - pool.ResolveSender(pool.signer, tx) - return pool.addTx(tx, !pool.config.NoLocals) +// AddLocals enqueues a batch of transactions into the pool if they are valid, marking the +// senders as a local ones, ensuring they go around the local pricing constraints. +// +// This method is used to add transactions from the RPC API and performs synchronous pool +// reorganization and event propagation. +func (pool *TxPool) AddLocals(txs []*types.Transaction) []error { + pool.ResolveSenders(pool.signer, txs) + return pool.addTxs(txs, !pool.config.NoLocals, true) } -// AddRemote enqueues a single transaction into the pool if it is valid. If the -// sender is not among the locally tracked ones, full pricing constraints will -// apply. -func (pool *TxPool) AddRemote(tx *types.Transaction) error { - pool.ResolveSender(pool.signer, tx) - return pool.addTx(tx, false) +// AddLocal enqueues a single local transaction into the pool if it is valid. This is +// a convenience wrapper aroundd AddLocals. +func (pool *TxPool) AddLocal(tx *types.Transaction) error { + errs := pool.AddLocals([]*types.Transaction{tx}) + return errs[0] } -// AddLocals enqueues a batch of transactions into the pool if they are valid, -// marking the senders as a local ones in the mean time, ensuring they go around -// the local pricing constraints. -func (pool *TxPool) AddLocals(txs []*types.Transaction) []error { +// AddRemotes enqueues a batch of transactions into the pool if they are valid. If the +// senders are not among the locally tracked ones, full pricing constraints will apply. +// +// This method is used to add transactions from the p2p network and does not wait for pool +// reorganization and internal event propagation. +func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error { pool.ResolveSenders(pool.signer, txs) - return pool.addTxs(txs, !pool.config.NoLocals) + return pool.addTxs(txs, false, false) } -// AddRemotes enqueues a batch of transactions into the pool if they are valid. -// If the senders are not among the locally tracked ones, full pricing constraints -// will apply. -func (pool *TxPool) AddRemotes(txs []*types.Transaction) []error { +// This is like AddRemotes, but waits for pool reorganization. Tests use this method. +func (pool *TxPool) AddRemotesSync(txs []*types.Transaction) []error { pool.ResolveSenders(pool.signer, txs) - return pool.addTxs(txs, false) + return pool.addTxs(txs, false, true) } -// addTx enqueues a single transaction into the pool if it is valid. -func (pool *TxPool) addTx(tx *types.Transaction, local bool) error { - if err := preValidateTx(tx, pool.signer, pool.currentMaxGas, pool.homestead); err != nil { - return err - } - - pool.mu.Lock() - defer pool.mu.Unlock() +// This is like AddRemotes with a single transaction, but waits for pool reorganization. Tests use this method. +func (pool *TxPool) addRemoteSync(tx *types.Transaction) error { + errs := pool.AddRemotesSync([]*types.Transaction{tx}) + return errs[0] +} - // Try to inject the transaction and update any state - replace, err := pool.add(tx, local) - if err != nil { - return err - } - // If we added a new transaction, run promotion checks and return - if !replace { - from, _ := types.Sender(pool.signer, tx) // already validated - pool.promoteExecutables([]common.Address{from}) - } - return nil +// AddRemote enqueues a single transaction into the pool if it is valid. This is a convenience +// wrapper around AddRemotes. +// +// Deprecated: use AddRemotes +func (pool *TxPool) AddRemote(tx *types.Transaction) error { + errs := pool.AddRemotes([]*types.Transaction{tx}) + return errs[0] } // addTxs attempts to queue a batch of transactions if they are valid. -func (pool *TxPool) addTxs(txs []*types.Transaction, local bool) []error { - errs := make([]error, len(txs)) +func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error { + // Filter out known ones without obtaining the pool lock or recovering signatures + var ( + errs = make([]error, len(txs)) + news = make([]*types.Transaction, 0, len(txs)) + ) for i, tx := range txs { - if err := preValidateTx(tx, pool.signer, pool.currentMaxGas, pool.homestead); err != nil { - errs[i] = err + // If the transaction is known, pre-set the error slot + if pool.all.Get(tx.Hash()) != nil { + errs[i] = fmt.Errorf("known transaction: %x", tx.Hash()) + knownTxMeter.Mark(1) + continue } + // Accumulate all unknown transactions for deeper processing + news = append(news, tx) } - + if len(news) == 0 { + return errs + } + // Cache senders in transactions before obtaining lock (pool.signer is immutable) + for _, tx := range news { + types.Sender(pool.signer, tx) + } + // Process all the new transaction and merge any errors into the original slice pool.mu.Lock() - defer pool.mu.Unlock() + newErrs, dirtyAddrs := pool.addTxsLocked(news, local) + pool.mu.Unlock() - pool.addTxsLocked(txs, local, errs) + var nilSlot = 0 + for _, err := range newErrs { + for errs[nilSlot] != nil { + nilSlot++ + } + errs[nilSlot] = err + } + // Reorg the pool internals if needed and return + done := pool.requestPromoteExecutables(dirtyAddrs) + if sync { + <-done + } return errs } -// addTxsLocked attempts to queue a batch of transactions if they are valid, -// whilst assuming the transaction pool lock is already held. -func (pool *TxPool) addTxsLocked(txs []*types.Transaction, local bool, errs []error) { - // Add the batch of transactions, tracking the accepted ones - dirty := make(map[common.Address]struct{}) - if errs == nil { - errs = make([]error, len(txs)) - } - +// addTxsLocked attempts to queue a batch of transactions if they are valid. +// The transaction pool lock must be held. +func (pool *TxPool) addTxsLocked(txs []*types.Transaction, local bool) ([]error, *accountSet) { + dirty := newAccountSet(pool.signer) + errs := make([]error, len(txs)) for i, tx := range txs { - if errs[i] != nil { - // already rejected - continue - } - - var replace bool - if replace, errs[i] = pool.add(tx, local); errs[i] == nil && !replace { - from, _ := types.Sender(pool.signer, tx) // already validated - dirty[from] = struct{}{} - } - } - // Only reprocess the internal state if something was actually added - if len(dirty) > 0 { - addrs := make([]common.Address, 0, len(dirty)) - for addr := range dirty { - addrs = append(addrs, addr) + replaced, err := pool.add(tx, local) + errs[i] = err + if err == nil && !replaced { + dirty.addTx(tx) } - pool.promoteExecutables(addrs) } - return + validTxMeter.Mark(int64(len(dirty.accounts))) + return errs, dirty } // Status returns the status (unknown/pending/queued) of a batch of transactions // identified by their hashes. func (pool *TxPool) Status(hashes []common.Hash) []TxStatus { - pool.mu.RLock() - defer pool.mu.RUnlock() - status := make([]TxStatus, len(hashes)) for i, hash := range hashes { - if tx := pool.all.Get(hash); tx != nil { - from, _ := types.Sender(pool.signer, tx) // already validated - if pool.pending[from] != nil && pool.pending[from].txs.items[tx.Nonce()] != nil { - status[i] = TxStatusPending - } else { - status[i] = TxStatusQueued - } + tx := pool.Get(hash) + if tx == nil { + continue } + from, _ := types.Sender(pool.signer, tx) // already validated + pool.mu.RLock() + if txList := pool.pending[from]; txList != nil && txList.txs.items[tx.Nonce()] != nil { + status[i] = TxStatusPending + } else if txList := pool.queue[from]; txList != nil && txList.txs.items[tx.Nonce()] != nil { + status[i] = TxStatusQueued + } + // implicit else: the tx may have been included into a block between + // checking pool.Get and obtaining the lock. In that case, TxStatusUnknown is correct + pool.mu.RUnlock() } return status } -// Get returns a transaction if it is contained in the pool -// and nil otherwise. +// Get returns a transaction if it is contained in the pool and nil otherwise. func (pool *TxPool) Get(hash common.Hash) *types.Transaction { return pool.all.Get(hash) } @@ -989,7 +913,10 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { // Remove it from the list of known transactions pool.all.Remove(hash) if outofbound { - pool.priced.Removed() + pool.priced.Removed(1) + } + if pool.locals.contains(addr) { + localGauge.Dec(1) } // Remove the transaction from the pending lists and reset the account nonce if pending := pool.pending[addr]; pending != nil { @@ -1004,35 +931,283 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) { pool.enqueueTx(tx.Hash(), tx) } // Update the account nonce if needed - if nonce := tx.Nonce(); pool.pendingState.GetNonce(addr) > nonce { - pool.pendingState.SetNonce(addr, nonce) - } + pool.pendingNonces.setIfLower(addr, tx.Nonce()) + // Reduce the pending counter + pendingGauge.Dec(int64(1 + len(invalids))) return } } // Transaction is in the future queue if future := pool.queue[addr]; future != nil { - future.Remove(tx) + if removed, _ := future.Remove(tx); removed { + // Reduce the queued counter + queuedGauge.Dec(1) + } if future.Empty() { delete(pool.queue, addr) } } } +// requestPromoteExecutables requests a pool reset to the new head block. +// The returned channel is closed when the reset has occurred. +func (pool *TxPool) requestReset(oldHead *types.Header, newHead *types.Header) chan struct{} { + select { + case pool.reqResetCh <- &txpoolResetRequest{oldHead, newHead}: + return <-pool.reorgDoneCh + case <-pool.reorgShutdownCh: + return pool.reorgShutdownCh + } +} + +// requestPromoteExecutables requests transaction promotion checks for the given addresses. +// The returned channel is closed when the promotion checks have occurred. +func (pool *TxPool) requestPromoteExecutables(set *accountSet) chan struct{} { + select { + case pool.reqPromoteCh <- set: + return <-pool.reorgDoneCh + case <-pool.reorgShutdownCh: + return pool.reorgShutdownCh + } +} + +// queueTxEvent enqueues a transaction event to be sent in the next reorg run. +func (pool *TxPool) queueTxEvent(tx *types.Transaction) { + select { + case pool.queueTxEventCh <- tx: + case <-pool.reorgShutdownCh: + } +} + +// scheduleReorgLoop schedules runs of reset and promoteExecutables. Code above should not +// call those methods directly, but request them being run using requestReset and +// requestPromoteExecutables instead. +func (pool *TxPool) scheduleReorgLoop() { + defer pool.wg.Done() + + var ( + curDone chan struct{} // non-nil while runReorg is active + nextDone = make(chan struct{}) + launchNextRun bool + reset *txpoolResetRequest + dirtyAccounts *accountSet + queuedEvents = make(map[common.Address]*txSortedMap) + ) + for { + // Launch next background reorg if needed + if curDone == nil && launchNextRun { + // Run the background reorg and announcements + go pool.runReorg(nextDone, reset, dirtyAccounts, queuedEvents) + + // Prepare everything for the next round of reorg + curDone, nextDone = nextDone, make(chan struct{}) + launchNextRun = false + + reset, dirtyAccounts = nil, nil + queuedEvents = make(map[common.Address]*txSortedMap) + } + + select { + case req := <-pool.reqResetCh: + // Reset request: update head if request is already pending. + if reset == nil { + reset = req + } else { + reset.newHead = req.newHead + } + launchNextRun = true + pool.reorgDoneCh <- nextDone + + case req := <-pool.reqPromoteCh: + // Promote request: update address set if request is already pending. + if dirtyAccounts == nil { + dirtyAccounts = req + } else { + dirtyAccounts.merge(req) + } + launchNextRun = true + pool.reorgDoneCh <- nextDone + + case tx := <-pool.queueTxEventCh: + // Queue up the event, but don't schedule a reorg. It's up to the caller to + // request one later if they want the events sent. + addr, _ := types.Sender(pool.signer, tx) + if _, ok := queuedEvents[addr]; !ok { + queuedEvents[addr] = newTxSortedMap() + } + queuedEvents[addr].Put(tx) + + case <-curDone: + curDone = nil + + case <-pool.reorgShutdownCh: + // Wait for current run to finish. + if curDone != nil { + <-curDone + } + close(nextDone) + return + } + } +} + +// runReorg runs reset and promoteExecutables on behalf of scheduleReorgLoop. +func (pool *TxPool) runReorg(done chan struct{}, reset *txpoolResetRequest, dirtyAccounts *accountSet, events map[common.Address]*txSortedMap) { + defer close(done) + + var promoteAddrs []common.Address + if dirtyAccounts != nil { + promoteAddrs = dirtyAccounts.flatten() + } + pool.mu.Lock() + if reset != nil { + // Reset from the old head to the new, rescheduling any reorged transactions + pool.reset(reset.oldHead, reset.newHead) + + // Nonces were reset, discard any events that became stale + for addr := range events { + events[addr].Forward(pool.pendingNonces.get(addr)) + if events[addr].Len() == 0 { + delete(events, addr) + } + } + // Reset needs promote for all addresses + promoteAddrs = promoteAddrs[:0] + for addr := range pool.queue { + promoteAddrs = append(promoteAddrs, addr) + } + } + // Check for pending transactions for every account that sent new ones + promoted := pool.promoteExecutables(promoteAddrs) + for _, tx := range promoted { + addr, _ := types.Sender(pool.signer, tx) + if _, ok := events[addr]; !ok { + events[addr] = newTxSortedMap() + } + events[addr].Put(tx) + } + // If a new block appeared, validate the pool of pending transactions. This will + // remove any transaction that has been included in the block or was invalidated + // because of another transaction (e.g. higher gas price). + if reset != nil { + pool.demoteUnexecutables() + } + // Ensure pool.queue and pool.pending sizes stay within the configured limits. + pool.truncatePending() + pool.truncateQueue() + + // Update all accounts to the latest known pending nonce + for addr, list := range pool.pending { + txs := list.Flatten() // Heavy but will be cached and is needed by the miner anyway + pool.pendingNonces.set(addr, txs[len(txs)-1].Nonce()+1) + } + pool.mu.Unlock() + + // Notify subsystems for newly added transactions + if len(events) > 0 { + var txs []*types.Transaction + for _, set := range events { + txs = append(txs, set.Flatten()...) + } + pool.txFeed.Send(NewTxsEvent{txs}) + } +} + +// reset retrieves the current state of the blockchain and ensures the content +// of the transaction pool is valid with regard to the chain state. +func (pool *TxPool) reset(oldHead, newHead *types.Header) { + // If we're reorging an old state, reinject all dropped transactions + var reinject types.Transactions + + if oldHead != nil && oldHead.Hash() != newHead.ParentHash { + // If the reorg is too deep, avoid doing it (will happen during fast sync) + oldNum := oldHead.Number.Uint64() + newNum := newHead.Number.Uint64() + + if depth := uint64(math.Abs(float64(oldNum) - float64(newNum))); depth > 64 { + log.Debug("Skipping deep transaction reorg", "depth", depth) + } else { + // Reorg seems shallow enough to pull in all transactions into memory + var discarded, included types.Transactions + var ( + rem = pool.chain.GetBlock(oldHead.Hash(), oldHead.Number.Uint64()) + add = pool.chain.GetBlock(newHead.Hash(), newHead.Number.Uint64()) + ) + if rem == nil { + // This can happen if a setHead is performed, where we simply discard the old + // head from the chain. + // If that is the case, we don't have the lost transactions any more, and + // there's nothing to add + if newNum < oldNum { + // If the reorg ended up on a lower number, it's indicative of setHead being the cause + log.Debug("Skipping transaction reset caused by setHead", + "old", oldHead.Hash(), "oldnum", oldNum, "new", newHead.Hash(), "newnum", newNum) + } else { + // If we reorged to a same or higher number, then it's not a case of setHead + log.Warn("Transaction pool reset with missing oldhead", + "old", oldHead.Hash(), "oldnum", oldNum, "new", newHead.Hash(), "newnum", newNum) + } + return + } + for rem.NumberU64() > add.NumberU64() { + discarded = append(discarded, rem.Transactions()...) + if rem = pool.chain.GetBlock(rem.ParentHash(), rem.NumberU64()-1); rem == nil { + log.Error("Unrooted old chain seen by tx pool", "block", oldHead.Number, "hash", oldHead.Hash()) + return + } + } + for add.NumberU64() > rem.NumberU64() { + included = append(included, add.Transactions()...) + if add = pool.chain.GetBlock(add.ParentHash(), add.NumberU64()-1); add == nil { + log.Error("Unrooted new chain seen by tx pool", "block", newHead.Number, "hash", newHead.Hash()) + return + } + } + for rem.Hash() != add.Hash() { + discarded = append(discarded, rem.Transactions()...) + if rem = pool.chain.GetBlock(rem.ParentHash(), rem.NumberU64()-1); rem == nil { + log.Error("Unrooted old chain seen by tx pool", "block", oldHead.Number, "hash", oldHead.Hash()) + return + } + included = append(included, add.Transactions()...) + if add = pool.chain.GetBlock(add.ParentHash(), add.NumberU64()-1); add == nil { + log.Error("Unrooted new chain seen by tx pool", "block", newHead.Number, "hash", newHead.Hash()) + return + } + } + reinject = types.TxDifference(discarded, included) + } + } + // Initialize the internal state to the current head + if newHead == nil { + newHead = pool.chain.CurrentBlock().Header() // Special case during testing + } + statedb, err := pool.chain.StateAt(newHead.Root) + if err != nil { + log.Error("Failed to reset txpool state", "err", err) + return + } + pool.currentState = statedb + pool.pendingNonces = newTxNoncer(statedb) + pool.currentMaxGas = newHead.GasLimit + + // Inject any transactions discarded due to reorgs + log.Debug("Reinjecting stale transactions", "count", len(reinject)) + senderCacher.recover(pool.signer, reinject) + pool.addTxsLocked(reinject, false) + + // Update all fork indicator by next pending block number. + next := new(big.Int).Add(newHead.Number, big.NewInt(1)) + pool.istanbul = pool.chainconfig.IsIstanbul(next) +} + // promoteExecutables moves transactions that have become processable from the // future queue to the set of pending transactions. During this process, all // invalidated transactions (low nonce, low balance) are deleted. -func (pool *TxPool) promoteExecutables(accounts []common.Address) { +func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Transaction { // Track the promoted transactions to broadcast them at once var promoted []*types.Transaction - // Gather all the accounts potentially needing updates - if accounts == nil { - accounts = make([]common.Address, 0, len(pool.queue)) - for addr := range pool.queue { - accounts = append(accounts, addr) - } - } // Iterate over all accounts and promote any executable transactions for _, addr := range accounts { list := pool.queue[addr] @@ -1040,157 +1215,185 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) { continue // Just in case someone calls with a non existing account } // Drop all transactions that are deemed too old (low nonce) - for _, tx := range list.Forward(pool.currentState.GetNonce(addr)) { + forwards := list.Forward(pool.currentState.GetNonce(addr)) + for _, tx := range forwards { hash := tx.Hash() - log.Trace("Removed old queued transaction", "hash", hash) pool.all.Remove(hash) - pool.priced.Removed() + log.Trace("Removed old queued transaction", "hash", hash) } // Drop all transactions that are too costly (low balance or out of gas) drops, _ := list.Filter(pool.currentState.GetBalance(addr), pool.currentMaxGas) for _, tx := range drops { hash := tx.Hash() - log.Trace("Removed unpayable queued transaction", "hash", hash) pool.all.Remove(hash) - pool.priced.Removed() - queuedNofundsCounter.Inc(1) + log.Trace("Removed unpayable queued transaction", "hash", hash) } + queuedNofundsMeter.Mark(int64(len(drops))) + // Gather all executable transactions and promote them - for _, tx := range list.Ready(pool.pendingState.GetNonce(addr)) { + readies := list.Ready(pool.pendingNonces.get(addr)) + for _, tx := range readies { hash := tx.Hash() if pool.promoteTx(addr, hash, tx) { log.Trace("Promoting queued transaction", "hash", hash) promoted = append(promoted, tx) } } + queuedGauge.Dec(int64(len(readies))) + // Drop all transactions over the allowed limit + var caps types.Transactions if !pool.locals.contains(addr) { - for _, tx := range list.Cap(int(pool.config.AccountQueue)) { + caps = list.Cap(int(pool.config.AccountQueue)) + for _, tx := range caps { hash := tx.Hash() pool.all.Remove(hash) - pool.priced.Removed() - queuedRateLimitCounter.Inc(1) log.Trace("Removed cap-exceeding queued transaction", "hash", hash) } + queuedRateLimitMeter.Mark(int64(len(caps))) + } + // Mark all the items dropped as removed + pool.priced.Removed(len(forwards) + len(drops) + len(caps)) + queuedGauge.Dec(int64(len(forwards) + len(drops) + len(caps))) + if pool.locals.contains(addr) { + localGauge.Dec(int64(len(forwards) + len(drops) + len(caps))) } // Delete the entire queue entry if it became empty. if list.Empty() { delete(pool.queue, addr) } } - // Notify subsystem for new promoted transactions. - if len(promoted) > 0 { - go pool.txFeed.Send(NewTxsEvent{promoted}) - } - // If the pending limit is overflown, start equalizing allowances + return promoted +} + +// truncatePending removes transactions from the pending queue if the pool is above the +// pending limit. The algorithm tries to reduce transaction counts by an approximately +// equal number for all for accounts with many pending transactions. +func (pool *TxPool) truncatePending() { pending := uint64(0) for _, list := range pool.pending { pending += uint64(list.Len()) } - if pending > pool.config.GlobalSlots { - pendingBeforeCap := pending - // Assemble a spam order to penalize large transactors first - spammers := prque.New(nil) - for addr, list := range pool.pending { - // Only evict transactions from high rollers - if !pool.locals.contains(addr) && uint64(list.Len()) > pool.config.AccountSlots { - spammers.Push(addr, int64(list.Len())) - } - } - // Gradually drop transactions from offenders - offenders := []common.Address{} - for pending > pool.config.GlobalSlots && !spammers.Empty() { - // Retrieve the next offender if not local address - offender, _ := spammers.Pop() - offenders = append(offenders, offender.(common.Address)) - - // Equalize balances until all the same or below threshold - if len(offenders) > 1 { - // Calculate the equalization threshold for all current offenders - threshold := pool.pending[offender.(common.Address)].Len() - - // Iteratively reduce all offenders until below limit or threshold reached - for pending > pool.config.GlobalSlots && pool.pending[offenders[len(offenders)-2]].Len() > threshold { - for i := 0; i < len(offenders)-1; i++ { - list := pool.pending[offenders[i]] - for _, tx := range list.Cap(list.Len() - 1) { - // Drop the transaction from the global pools too - hash := tx.Hash() - pool.all.Remove(hash) - pool.priced.Removed() - - // Update the account nonce to the dropped transaction - if nonce := tx.Nonce(); pool.pendingState.GetNonce(offenders[i]) > nonce { - pool.pendingState.SetNonce(offenders[i], nonce) - } - log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) - } - pending-- - } - } - } + if pending <= pool.config.GlobalSlots { + return + } + + pendingBeforeCap := pending + // Assemble a spam order to penalize large transactors first + spammers := prque.New(nil) + for addr, list := range pool.pending { + // Only evict transactions from high rollers + if !pool.locals.contains(addr) && uint64(list.Len()) > pool.config.AccountSlots { + spammers.Push(addr, int64(list.Len())) } - // If still above threshold, reduce to limit or min allowance - if pending > pool.config.GlobalSlots && len(offenders) > 0 { - for pending > pool.config.GlobalSlots && uint64(pool.pending[offenders[len(offenders)-1]].Len()) > pool.config.AccountSlots { - for _, addr := range offenders { - list := pool.pending[addr] - for _, tx := range list.Cap(list.Len() - 1) { + } + // Gradually drop transactions from offenders + offenders := []common.Address{} + for pending > pool.config.GlobalSlots && !spammers.Empty() { + // Retrieve the next offender if not local address + offender, _ := spammers.Pop() + offenders = append(offenders, offender.(common.Address)) + + // Equalize balances until all the same or below threshold + if len(offenders) > 1 { + // Calculate the equalization threshold for all current offenders + threshold := pool.pending[offender.(common.Address)].Len() + + // Iteratively reduce all offenders until below limit or threshold reached + for pending > pool.config.GlobalSlots && pool.pending[offenders[len(offenders)-2]].Len() > threshold { + for i := 0; i < len(offenders)-1; i++ { + list := pool.pending[offenders[i]] + + caps := list.Cap(list.Len() - 1) + for _, tx := range caps { // Drop the transaction from the global pools too hash := tx.Hash() pool.all.Remove(hash) - pool.priced.Removed() // Update the account nonce to the dropped transaction - if nonce := tx.Nonce(); pool.pendingState.GetNonce(addr) > nonce { - pool.pendingState.SetNonce(addr, nonce) - } + pool.pendingNonces.setIfLower(offenders[i], tx.Nonce()) log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) } + pool.priced.Removed(len(caps)) + pendingGauge.Dec(int64(len(caps))) + if pool.locals.contains(offenders[i]) { + localGauge.Dec(int64(len(caps))) + } pending-- } } } - pendingRateLimitCounter.Inc(int64(pendingBeforeCap - pending)) } - // If we've queued more transactions than the hard limit, drop oldest ones + + // If still above threshold, reduce to limit or min allowance + if pending > pool.config.GlobalSlots && len(offenders) > 0 { + for pending > pool.config.GlobalSlots && uint64(pool.pending[offenders[len(offenders)-1]].Len()) > pool.config.AccountSlots { + for _, addr := range offenders { + list := pool.pending[addr] + + caps := list.Cap(list.Len() - 1) + for _, tx := range caps { + // Drop the transaction from the global pools too + hash := tx.Hash() + pool.all.Remove(hash) + + // Update the account nonce to the dropped transaction + pool.pendingNonces.setIfLower(addr, tx.Nonce()) + log.Trace("Removed fairness-exceeding pending transaction", "hash", hash) + } + pool.priced.Removed(len(caps)) + pendingGauge.Dec(int64(len(caps))) + if pool.locals.contains(addr) { + localGauge.Dec(int64(len(caps))) + } + pending-- + } + } + } + pendingRateLimitMeter.Mark(int64(pendingBeforeCap - pending)) +} + +// truncateQueue drops the oldes transactions in the queue if the pool is above the global queue limit. +func (pool *TxPool) truncateQueue() { queued := uint64(0) for _, list := range pool.queue { queued += uint64(list.Len()) } - if queued > pool.config.GlobalQueue { - // Sort all accounts with queued transactions by heartbeat - addresses := make(addressesByHeartbeat, 0, len(pool.queue)) - for addr := range pool.queue { - if !pool.locals.contains(addr) { // don't drop locals - addresses = append(addresses, addressByHeartbeat{addr, pool.beats[addr]}) - } + if queued <= pool.config.GlobalQueue { + return + } + + // Sort all accounts with queued transactions by heartbeat + addresses := make(addressesByHeartbeat, 0, len(pool.queue)) + for addr := range pool.queue { + if !pool.locals.contains(addr) { // don't drop locals + addresses = append(addresses, addressByHeartbeat{addr, pool.beats[addr]}) } - sort.Sort(addresses) + } + sort.Sort(addresses) - // Drop transactions until the total is below the limit or only locals remain - for drop := queued - pool.config.GlobalQueue; drop > 0 && len(addresses) > 0; { - addr := addresses[len(addresses)-1] - list := pool.queue[addr.address] + // Drop transactions until the total is below the limit or only locals remain + for drop := queued - pool.config.GlobalQueue; drop > 0 && len(addresses) > 0; { + addr := addresses[len(addresses)-1] + list := pool.queue[addr.address] - addresses = addresses[:len(addresses)-1] + addresses = addresses[:len(addresses)-1] - // Drop all transactions if they are less than the overflow - if size := uint64(list.Len()); size <= drop { - for _, tx := range list.Flatten() { - pool.removeTx(tx.Hash(), true) - } - drop -= size - queuedRateLimitCounter.Inc(int64(size)) - continue - } - // Otherwise drop only last few transactions - txs := list.Flatten() - for i := len(txs) - 1; i >= 0 && drop > 0; i-- { - pool.removeTx(txs[i].Hash(), true) - drop-- - queuedRateLimitCounter.Inc(1) + // Drop all transactions if they are less than the overflow + if size := uint64(list.Len()); size <= drop { + for _, tx := range list.Flatten() { + pool.removeTx(tx.Hash(), true) } + drop -= size + queuedRateLimitMeter.Mark(int64(size)) + continue + } + // Otherwise drop only last few transactions + txs := list.Flatten() + for i := len(txs) - 1; i >= 0 && drop > 0; i-- { + pool.removeTx(txs[i].Hash(), true) + drop-- + queuedRateLimitMeter.Mark(1) } } } @@ -1204,11 +1407,11 @@ func (pool *TxPool) demoteUnexecutables() { nonce := pool.currentState.GetNonce(addr) // Drop all transactions that are deemed too old (low nonce) - for _, tx := range list.Forward(nonce) { + olds := list.Forward(nonce) + for _, tx := range olds { hash := tx.Hash() - log.Trace("Removed old pending transaction", "hash", hash) pool.all.Remove(hash) - pool.priced.Removed() + log.Trace("Removed old pending transaction", "hash", hash) } // Drop all transactions that are too costly (low balance or out of gas), and queue any invalids back for later drops, invalids := list.Filter(pool.currentState.GetBalance(addr), pool.currentMaxGas) @@ -1216,21 +1419,28 @@ func (pool *TxPool) demoteUnexecutables() { hash := tx.Hash() log.Trace("Removed unpayable pending transaction", "hash", hash) pool.all.Remove(hash) - pool.priced.Removed() - pendingNofundsCounter.Inc(1) } + pool.priced.Removed(len(olds) + len(drops)) + pendingNofundsMeter.Mark(int64(len(drops))) + for _, tx := range invalids { hash := tx.Hash() log.Trace("Demoting pending transaction", "hash", hash) pool.enqueueTx(hash, tx) } + pendingGauge.Dec(int64(len(olds) + len(drops) + len(invalids))) + if pool.locals.contains(addr) { + localGauge.Dec(int64(len(olds) + len(drops) + len(invalids))) + } // If there's a gap in front, alert (should never happen) and postpone all transactions if list.Len() > 0 && list.txs.Get(nonce) == nil { - for _, tx := range list.Cap(0) { + gapped := list.Cap(0) + for _, tx := range gapped { hash := tx.Hash() log.Error("Demoting invalidated transaction", "hash", hash) pool.enqueueTx(hash, tx) } + pendingGauge.Dec(int64(len(gapped))) } // Delete the entire queue entry if it became empty. if list.Empty() { @@ -1262,11 +1472,15 @@ type accountSet struct { // newAccountSet creates a new address set with an associated signer for sender // derivations. -func newAccountSet(signer types.Signer) *accountSet { - return &accountSet{ +func newAccountSet(signer types.Signer, addrs ...common.Address) *accountSet { + as := &accountSet{ accounts: make(map[common.Address]struct{}), signer: signer, } + for _, addr := range addrs { + as.add(addr) + } + return as } // contains checks if a given address is contained within the set. @@ -1290,6 +1504,13 @@ func (as *accountSet) add(addr common.Address) { as.cache = nil } +// addTx adds the sender of tx into the set. +func (as *accountSet) addTx(tx *types.Transaction) { + if addr, err := types.Sender(as.signer, tx); err == nil { + as.add(addr) + } +} + // flatten returns the list of addresses within this set, also caching it for later // reuse. The returned slice should not be changed! func (as *accountSet) flatten() []common.Address { @@ -1303,6 +1524,14 @@ func (as *accountSet) flatten() []common.Address { return *as.cache } +// merge adds all addresses from the 'other' set into 'as'. +func (as *accountSet) merge(other *accountSet) { + for addr := range other.accounts { + as.accounts[addr] = struct{}{} + } + as.cache = nil +} + // txLookup is used internally by TxPool to track transactions while allowing lookup without // mutex contention. // diff --git a/core/tx_pool_test.go b/core/tx_pool_test.go index 6d3bd7a5a5c5..0f1e7ac8f8fd 100644 --- a/core/tx_pool_test.go +++ b/core/tx_pool_test.go @@ -27,10 +27,10 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/params" ) @@ -78,7 +78,7 @@ func pricedTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ec } func setupTxPool() (*TxPool, *ecdsa.PrivateKey) { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} key, _ := crypto.GenerateKey() @@ -109,7 +109,7 @@ func validateTxPoolInternals(pool *TxPool) error { last = nonce } } - if nonce := pool.pendingState.GetNonce(addr); nonce != last+1 { + if nonce := pool.Nonce(addr); nonce != last+1 { return fmt.Errorf("pending nonce mismatch: have %v, want %v", nonce, last+1) } } @@ -126,7 +126,7 @@ func validateEvents(events chan NewTxsEvent, count int) error { case ev := <-events: received = append(received, ev.Txs...) case <-time.After(time.Second): - return fmt.Errorf("event #%d not fired", received) + return fmt.Errorf("event #%d not fired", len(received)) } } if len(received) > count { @@ -163,7 +163,7 @@ func (c *testChain) State() (*state.StateDB, error) { // a state change between those fetches. stdb := c.statedb if *c.trigger { - c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + c.statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) // simulate that the new head block included tx0 and tx1 c.statedb.SetNonce(c.address, 2) c.statedb.SetBalance(c.address, new(big.Int).SetUint64(params.Ether)) @@ -181,7 +181,7 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { var ( key, _ = crypto.GenerateKey() address = crypto.PubkeyToAddress(key.PublicKey) - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) trigger = false ) @@ -195,28 +195,27 @@ func TestStateChangeDuringTransactionPoolReset(t *testing.T) { pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) defer pool.Stop() - nonce := pool.State().GetNonce(address) + nonce := pool.Nonce(address) if nonce != 0 { t.Fatalf("Invalid nonce, want 0, got %d", nonce) } - pool.AddRemotes(types.Transactions{tx0, tx1}) + pool.AddRemotesSync([]*types.Transaction{tx0, tx1}) - nonce = pool.State().GetNonce(address) + nonce = pool.Nonce(address) if nonce != 2 { t.Fatalf("Invalid nonce, want 2, got %d", nonce) } // trigger state change in the background trigger = true - - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) _, err := pool.Pending() if err != nil { t.Fatalf("Could not fetch pending transactions: %v", err) } - nonce = pool.State().GetNonce(address) + nonce = pool.Nonce(address) if nonce != 2 { t.Fatalf("Invalid nonce, want 2, got %d", nonce) } @@ -268,10 +267,10 @@ func TestTransactionQueue(t *testing.T) { tx := transaction(0, 100, key) from, _ := deriveSender(tx) pool.currentState.AddBalance(from, big.NewInt(1000)) - pool.lockedReset(nil, nil) - pool.enqueueTx(tx.Hash(), tx) + <-pool.requestReset(nil, nil) - pool.promoteExecutables([]common.Address{from}) + pool.enqueueTx(tx.Hash(), tx) + <-pool.requestPromoteExecutables(newAccountSet(pool.signer, from)) if len(pool.pending) != 1 { t.Error("expected valid txs to be 1 is", len(pool.pending)) } @@ -280,33 +279,36 @@ func TestTransactionQueue(t *testing.T) { from, _ = deriveSender(tx) pool.currentState.SetNonce(from, 2) pool.enqueueTx(tx.Hash(), tx) - pool.promoteExecutables([]common.Address{from}) + + <-pool.requestPromoteExecutables(newAccountSet(pool.signer, from)) if _, ok := pool.pending[from].txs.items[tx.Nonce()]; ok { t.Error("expected transaction to be in tx pool") } - if len(pool.queue) > 0 { t.Error("expected transaction queue to be empty. is", len(pool.queue)) } +} + +func TestTransactionQueue2(t *testing.T) { + t.Parallel() - pool, key = setupTxPool() + pool, key := setupTxPool() defer pool.Stop() tx1 := transaction(0, 100, key) tx2 := transaction(10, 100, key) tx3 := transaction(11, 100, key) - from, _ = deriveSender(tx1) + from, _ := deriveSender(tx1) pool.currentState.AddBalance(from, big.NewInt(1000)) - pool.lockedReset(nil, nil) + pool.reset(nil, nil) pool.enqueueTx(tx1.Hash(), tx1) pool.enqueueTx(tx2.Hash(), tx2) pool.enqueueTx(tx3.Hash(), tx3) pool.promoteExecutables([]common.Address{from}) - if len(pool.pending) != 1 { - t.Error("expected tx pool to be 1, got", len(pool.pending)) + t.Error("expected pending length to be 1, got", len(pool.pending)) } if pool.queue[from].Len() != 2 { t.Error("expected len(queue) == 2, got", pool.queue[from].Len()) @@ -335,11 +337,11 @@ func TestTransactionChainFork(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) statedb.AddBalance(addr, big.NewInt(100000000000000)) pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) } resetState() @@ -364,11 +366,11 @@ func TestTransactionDoubleNonce(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) resetState := func() { - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) statedb.AddBalance(addr, big.NewInt(100000000000000)) pool.chain = &testBlockChain{statedb, 1000000, new(event.Feed)} - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) } resetState() @@ -384,16 +386,17 @@ func TestTransactionDoubleNonce(t *testing.T) { if replace, err := pool.add(tx2, false); err != nil || !replace { t.Errorf("second transaction insert failed (%v) or not reported replacement (%v)", err, replace) } - pool.promoteExecutables([]common.Address{addr}) + <-pool.requestPromoteExecutables(newAccountSet(signer, addr)) if pool.pending[addr].Len() != 1 { t.Error("expected 1 pending transactions, got", pool.pending[addr].Len()) } if tx := pool.pending[addr].txs.items[0]; tx.Hash() != tx2.Hash() { t.Errorf("transaction mismatch: have %x, want %x", tx.Hash(), tx2.Hash()) } + // Add the third transaction and ensure it's not saved (smaller price) pool.add(tx3, false) - pool.promoteExecutables([]common.Address{addr}) + <-pool.requestPromoteExecutables(newAccountSet(signer, addr)) if pool.pending[addr].Len() != 1 { t.Error("expected 1 pending transactions, got", pool.pending[addr].Len()) } @@ -439,7 +442,7 @@ func TestTransactionNonceRecovery(t *testing.T) { addr := crypto.PubkeyToAddress(key.PublicKey) pool.currentState.SetNonce(addr, n) pool.currentState.AddBalance(addr, big.NewInt(100000000000000)) - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) tx := transaction(n, 100000, key) if err := pool.AddRemote(tx); err != nil { @@ -447,8 +450,8 @@ func TestTransactionNonceRecovery(t *testing.T) { } // simulate some weird re-order of transactions and missing nonce(s) pool.currentState.SetNonce(addr, n-1) - pool.lockedReset(nil, nil) - if fn := pool.pendingState.GetNonce(addr); fn != n-1 { + <-pool.requestReset(nil, nil) + if fn := pool.Nonce(addr); fn != n-1 { t.Errorf("expected nonce to be %d, got %d", n-1, fn) } } @@ -491,7 +494,7 @@ func TestTransactionDropping(t *testing.T) { if pool.all.Count() != 6 { t.Errorf("total transaction mismatch: have %d, want %d", pool.all.Count(), 6) } - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) if pool.pending[account].Len() != 3 { t.Errorf("pending transaction mismatch: have %d, want %d", pool.pending[account].Len(), 3) } @@ -503,7 +506,7 @@ func TestTransactionDropping(t *testing.T) { } // Reduce the balance of the account, and check that invalidated transactions are dropped pool.currentState.AddBalance(account, big.NewInt(-650)) - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) if _, ok := pool.pending[account].txs.items[tx0.Nonce()]; !ok { t.Errorf("funded pending transaction missing: %v", tx0) @@ -528,7 +531,7 @@ func TestTransactionDropping(t *testing.T) { } // Reduce the block gas limit, check that invalidated transactions are dropped pool.chain.(*testBlockChain).gasLimit = 100 - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) if _, ok := pool.pending[account].txs.items[tx0.Nonce()]; !ok { t.Errorf("funded pending transaction missing: %v", tx0) @@ -554,7 +557,7 @@ func TestTransactionPostponing(t *testing.T) { t.Parallel() // Create the pool to test the postponing with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -584,7 +587,7 @@ func TestTransactionPostponing(t *testing.T) { txs = append(txs, tx) } } - for i, err := range pool.AddRemotes(txs) { + for i, err := range pool.AddRemotesSync(txs) { if err != nil { t.Fatalf("tx %d: failed to add transactions: %v", i, err) } @@ -599,7 +602,7 @@ func TestTransactionPostponing(t *testing.T) { if pool.all.Count() != len(txs) { t.Errorf("total transaction mismatch: have %d, want %d", pool.all.Count(), len(txs)) } - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) if pending := pool.pending[accs[0]].Len() + pool.pending[accs[1]].Len(); pending != len(txs) { t.Errorf("pending transaction mismatch: have %d, want %d", pending, len(txs)) } @@ -613,7 +616,7 @@ func TestTransactionPostponing(t *testing.T) { for _, addr := range accs { pool.currentState.AddBalance(addr, big.NewInt(-1)) } - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) // The first account's first transaction remains valid, check that subsequent // ones are either filtered out, or queued up for later. @@ -680,12 +683,10 @@ func TestTransactionGapFilling(t *testing.T) { defer sub.Unsubscribe() // Create a pending and a queued transaction with a nonce-gap in between - if err := pool.AddRemote(transaction(0, 100000, key)); err != nil { - t.Fatalf("failed to add pending transaction: %v", err) - } - if err := pool.AddRemote(transaction(2, 100000, key)); err != nil { - t.Fatalf("failed to add queued transaction: %v", err) - } + pool.AddRemotesSync([]*types.Transaction{ + transaction(0, 100000, key), + transaction(2, 100000, key), + }) pending, queued := pool.Stats() if pending != 1 { t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 1) @@ -700,7 +701,7 @@ func TestTransactionGapFilling(t *testing.T) { t.Fatalf("pool internal state corrupted: %v", err) } // Fill the nonce gap and ensure all transactions become pending - if err := pool.AddRemote(transaction(1, 100000, key)); err != nil { + if err := pool.addRemoteSync(transaction(1, 100000, key)); err != nil { t.Fatalf("failed to add gapped transaction: %v", err) } pending, queued = pool.Stats() @@ -732,7 +733,7 @@ func TestTransactionQueueAccountLimiting(t *testing.T) { // Keep queuing up transactions and make sure all above a limit are dropped for i := uint64(1); i <= testTxPoolConfig.AccountQueue+5; i++ { - if err := pool.AddRemote(transaction(i, 100000, key)); err != nil { + if err := pool.addRemoteSync(transaction(i, 100000, key)); err != nil { t.Fatalf("tx %d: failed to add transaction: %v", i, err) } if len(pool.pending) != 0 { @@ -769,7 +770,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -799,7 +800,7 @@ func testTransactionQueueGlobalLimiting(t *testing.T, nolocals bool) { nonces[addr]++ } // Import the batch and verify that limits have been enforced - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) queued := 0 for addr, list := range pool.queue { @@ -857,7 +858,7 @@ func testTransactionQueueTimeLimiting(t *testing.T, nolocals bool) { evictionInterval = time.Second // Create the pool to test the non-expiration enforcement - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -932,7 +933,7 @@ func TestTransactionPendingLimiting(t *testing.T) { // Keep queuing up transactions and make sure all above a limit are dropped for i := uint64(0); i < testTxPoolConfig.AccountQueue+5; i++ { - if err := pool.AddRemote(transaction(i, 100000, key)); err != nil { + if err := pool.addRemoteSync(transaction(i, 100000, key)); err != nil { t.Fatalf("tx %d: failed to add transaction: %v", i, err) } if pool.pending[account].Len() != int(i)+1 { @@ -953,57 +954,6 @@ func TestTransactionPendingLimiting(t *testing.T) { } } -// Tests that the transaction limits are enforced the same way irrelevant whether -// the transactions are added one by one or in batches. -func TestTransactionQueueLimitingEquivalency(t *testing.T) { testTransactionLimitingEquivalency(t, 1) } -func TestTransactionPendingLimitingEquivalency(t *testing.T) { testTransactionLimitingEquivalency(t, 0) } - -func testTransactionLimitingEquivalency(t *testing.T, origin uint64) { - t.Parallel() - - // Add a batch of transactions to a pool one by one - pool1, key1 := setupTxPool() - defer pool1.Stop() - - account1, _ := deriveSender(transaction(0, 0, key1)) - pool1.currentState.AddBalance(account1, big.NewInt(1000000)) - - for i := uint64(0); i < testTxPoolConfig.AccountQueue+5; i++ { - if err := pool1.AddRemote(transaction(origin+i, 100000, key1)); err != nil { - t.Fatalf("tx %d: failed to add transaction: %v", i, err) - } - } - // Add a batch of transactions to a pool in one big batch - pool2, key2 := setupTxPool() - defer pool2.Stop() - - account2, _ := deriveSender(transaction(0, 0, key2)) - pool2.currentState.AddBalance(account2, big.NewInt(1000000)) - - txs := []*types.Transaction{} - for i := uint64(0); i < testTxPoolConfig.AccountQueue+5; i++ { - txs = append(txs, transaction(origin+i, 100000, key2)) - } - pool2.AddRemotes(txs) - - // Ensure the batch optimization honors the same pool mechanics - if len(pool1.pending) != len(pool2.pending) { - t.Errorf("pending transaction count mismatch: one-by-one algo: %d, batch algo: %d", len(pool1.pending), len(pool2.pending)) - } - if len(pool1.queue) != len(pool2.queue) { - t.Errorf("queued transaction count mismatch: one-by-one algo: %d, batch algo: %d", len(pool1.queue), len(pool2.queue)) - } - if pool1.all.Count() != pool2.all.Count() { - t.Errorf("total transaction count mismatch: one-by-one algo %d, batch algo %d", pool1.all.Count(), pool2.all.Count()) - } - if err := validateTxPoolInternals(pool1); err != nil { - t.Errorf("pool 1 internal state corrupted: %v", err) - } - if err := validateTxPoolInternals(pool2); err != nil { - t.Errorf("pool 2 internal state corrupted: %v", err) - } -} - // Tests that if the transaction count belonging to multiple accounts go above // some hard threshold, the higher transactions are dropped to prevent DOS // attacks. @@ -1011,7 +961,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1038,7 +988,7 @@ func TestTransactionPendingGlobalLimiting(t *testing.T) { } } // Import the batch and verify that limits have been enforced - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) pending := 0 for _, list := range pool.pending { @@ -1057,7 +1007,7 @@ func TestTransactionCapClearsFromAll(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1091,7 +1041,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { t.Parallel() // Create the pool to test the limit enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1118,7 +1068,7 @@ func TestTransactionPendingMinimumAllowance(t *testing.T) { } } // Import the batch and verify that limits have been enforced - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) for addr, list := range pool.pending { if list.Len() != int(config.AccountSlots) { @@ -1139,7 +1089,7 @@ func TestTransactionPoolRepricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1174,7 +1124,7 @@ func TestTransactionPoolRepricing(t *testing.T) { ltx := pricedTransaction(0, 100000, big.NewInt(1), keys[3]) // Import the batch and that both pending and queued transactions match up - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) pool.AddLocal(ltx) pending, queued := pool.Stats() @@ -1260,7 +1210,7 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1274,14 +1224,14 @@ func TestTransactionPoolRepricingKeepsLocals(t *testing.T) { } // Create transaction (both pending and queued) with a linearly growing gasprice for i := uint64(0); i < 500; i++ { - // Add pending - p_tx := pricedTransaction(i, 100000, big.NewInt(int64(i)), keys[2]) - if err := pool.AddLocal(p_tx); err != nil { + // Add pending transaction. + pendingTx := pricedTransaction(i, 100000, big.NewInt(int64(i)), keys[2]) + if err := pool.AddLocal(pendingTx); err != nil { t.Fatal(err) } - // Add queued - q_tx := pricedTransaction(i+501, 100000, big.NewInt(int64(i)), keys[2]) - if err := pool.AddLocal(q_tx); err != nil { + // Add queued transaction. + queuedTx := pricedTransaction(i+501, 100000, big.NewInt(int64(i)), keys[2]) + if err := pool.AddLocal(queuedTx); err != nil { t.Fatal(err) } } @@ -1322,7 +1272,7 @@ func TestTransactionPoolUnderpricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1428,7 +1378,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1454,7 +1404,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { for i := uint64(0); i < config.GlobalSlots; i++ { txs = append(txs, pricedTransaction(i, 100000, big.NewInt(1), keys[0])) } - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) pending, queued := pool.Stats() if pending != int(config.GlobalSlots) { @@ -1470,7 +1420,7 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { t.Fatalf("pool internal state corrupted: %v", err) } // Ensure that adding high priced transactions drops a cheap, but doesn't produce a gap - if err := pool.AddRemote(pricedTransaction(0, 100000, big.NewInt(3), keys[1])); err != nil { + if err := pool.addRemoteSync(pricedTransaction(0, 100000, big.NewInt(3), keys[1])); err != nil { t.Fatalf("failed to add well priced transaction: %v", err) } pending, queued = pool.Stats() @@ -1488,13 +1438,78 @@ func TestTransactionPoolStableUnderpricing(t *testing.T) { } } +// Tests that the pool rejects duplicate transactions. +func TestTransactionDeduplication(t *testing.T) { + t.Parallel() + + // Create the pool to test the pricing enforcement with + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} + + pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) + defer pool.Stop() + + // Create a test account to add transactions with + key, _ := crypto.GenerateKey() + pool.currentState.AddBalance(crypto.PubkeyToAddress(key.PublicKey), big.NewInt(1000000000)) + + // Create a batch of transactions and add a few of them + txs := make([]*types.Transaction, 16) + for i := 0; i < len(txs); i++ { + txs[i] = pricedTransaction(uint64(i), 100000, big.NewInt(1), key) + } + var firsts []*types.Transaction + for i := 0; i < len(txs); i += 2 { + firsts = append(firsts, txs[i]) + } + errs := pool.AddRemotesSync(firsts) + if len(errs) != len(firsts) { + t.Fatalf("first add mismatching result count: have %d, want %d", len(errs), len(firsts)) + } + for i, err := range errs { + if err != nil { + t.Errorf("add %d failed: %v", i, err) + } + } + pending, queued := pool.Stats() + if pending != 1 { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, 1) + } + if queued != len(txs)/2-1 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, len(txs)/2-1) + } + // Try to add all of them now and ensure previous ones error out as knowns + errs = pool.AddRemotesSync(txs) + if len(errs) != len(txs) { + t.Fatalf("all add mismatching result count: have %d, want %d", len(errs), len(txs)) + } + for i, err := range errs { + if i%2 == 0 && err == nil { + t.Errorf("add %d succeeded, should have failed as known", i) + } + if i%2 == 1 && err != nil { + t.Errorf("add %d failed: %v", i, err) + } + } + pending, queued = pool.Stats() + if pending != len(txs) { + t.Fatalf("pending transactions mismatched: have %d, want %d", pending, len(txs)) + } + if queued != 0 { + t.Fatalf("queued transactions mismatched: have %d, want %d", queued, 0) + } + if err := validateTxPoolInternals(pool); err != nil { + t.Fatalf("pool internal state corrupted: %v", err) + } +} + // Tests that the pool rejects replacement transactions that don't meet the minimum // price bump required. func TestTransactionReplacement(t *testing.T) { t.Parallel() // Create the pool to test the pricing enforcement with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1513,7 +1528,7 @@ func TestTransactionReplacement(t *testing.T) { price := int64(100) threshold := (price * (100 + int64(testTxPoolConfig.PriceBump))) / 100 - if err := pool.AddRemote(pricedTransaction(0, 100000, big.NewInt(1), key)); err != nil { + if err := pool.addRemoteSync(pricedTransaction(0, 100000, big.NewInt(1), key)); err != nil { t.Fatalf("failed to add original cheap pending transaction: %v", err) } if err := pool.AddRemote(pricedTransaction(0, 100001, big.NewInt(1), key)); err != ErrReplaceUnderpriced { @@ -1526,7 +1541,7 @@ func TestTransactionReplacement(t *testing.T) { t.Fatalf("cheap replacement event firing failed: %v", err) } - if err := pool.AddRemote(pricedTransaction(0, 100000, big.NewInt(price), key)); err != nil { + if err := pool.addRemoteSync(pricedTransaction(0, 100000, big.NewInt(price), key)); err != nil { t.Fatalf("failed to add original proper pending transaction: %v", err) } if err := pool.AddRemote(pricedTransaction(0, 100001, big.NewInt(threshold-1), key)); err != ErrReplaceUnderpriced { @@ -1538,6 +1553,7 @@ func TestTransactionReplacement(t *testing.T) { if err := validateEvents(events, 2); err != nil { t.Fatalf("proper replacement event firing failed: %v", err) } + // Add queued transactions, ensuring the minimum price bump is enforced for replacement (for ultra low prices too) if err := pool.AddRemote(pricedTransaction(2, 100000, big.NewInt(1), key)); err != nil { t.Fatalf("failed to add original cheap queued transaction: %v", err) @@ -1588,7 +1604,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { os.Remove(journal) // Create the original pool to inject transaction into the journal - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} config := testTxPoolConfig @@ -1615,7 +1631,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { if err := pool.AddLocal(pricedTransaction(2, 100000, big.NewInt(1), local)); err != nil { t.Fatalf("failed to add local transaction: %v", err) } - if err := pool.AddRemote(pricedTransaction(0, 100000, big.NewInt(1), remote)); err != nil { + if err := pool.addRemoteSync(pricedTransaction(0, 100000, big.NewInt(1), remote)); err != nil { t.Fatalf("failed to add remote transaction: %v", err) } pending, queued := pool.Stats() @@ -1653,7 +1669,7 @@ func testTransactionJournaling(t *testing.T, nolocals bool) { } // Bump the nonce temporarily and ensure the newly invalidated transaction is removed statedb.SetNonce(crypto.PubkeyToAddress(local.PublicKey), 2) - pool.lockedReset(nil, nil) + <-pool.requestReset(nil, nil) time.Sleep(2 * config.Rejournal) pool.Stop() @@ -1686,7 +1702,7 @@ func TestTransactionStatusCheck(t *testing.T) { t.Parallel() // Create the pool to test the status retrievals with - statedb, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) blockchain := &testBlockChain{statedb, 1000000, new(event.Feed)} pool := NewTxPool(testTxPoolConfig, params.TestChainConfig, blockchain) @@ -1707,7 +1723,7 @@ func TestTransactionStatusCheck(t *testing.T) { txs = append(txs, pricedTransaction(2, 100000, big.NewInt(1), keys[2])) // Queued only // Import the transaction and ensure they are correctly added - pool.AddRemotes(txs) + pool.AddRemotesSync(txs) pending, queued := pool.Stats() if pending != 2 { @@ -1786,26 +1802,6 @@ func benchmarkFuturePromotion(b *testing.B, size int) { } } -// Benchmarks the speed of iterative transaction insertion. -func BenchmarkPoolInsert(b *testing.B) { - // Generate a batch of transactions to enqueue into the pool - pool, key := setupTxPool() - defer pool.Stop() - - account, _ := deriveSender(transaction(0, 0, key)) - pool.currentState.AddBalance(account, big.NewInt(1000000)) - - txs := make(types.Transactions, b.N) - for i := 0; i < b.N; i++ { - txs[i] = transaction(uint64(i), 100000, key) - } - // Benchmark importing the transactions into the queue - b.ResetTimer() - for _, tx := range txs { - pool.AddRemote(tx) - } -} - // Benchmarks the speed of batched transaction insertion. func BenchmarkPoolBatchInsert100(b *testing.B) { benchmarkPoolBatchInsert(b, 100) } func BenchmarkPoolBatchInsert1000(b *testing.B) { benchmarkPoolBatchInsert(b, 1000) } diff --git a/core/types.go b/core/types.go index 4ecef6c52778..ae909a48fb1f 100644 --- a/core/types.go +++ b/core/types.go @@ -27,22 +27,27 @@ import ( // Validator is an interface which defines the standard for block validation. It // is only responsible for validating block contents, as the header validation is // done by the specific consensus engines. -// type Validator interface { // ValidateBody validates the given block's content. ValidateBody(block *types.Block) error // ValidateState validates the given statedb and optionally the receipts and // gas used. - ValidateState(block, parent *types.Block, state *state.StateDB, receipts types.Receipts, usedGas uint64, fees *big.Int) error + ValidateState(block *types.Block, state *state.StateDB, receipts types.Receipts, usedGas uint64, fees *big.Int) error +} + +// Prefetcher is an interface for pre-caching transaction signatures and state. +type Prefetcher interface { + // Prefetch processes the state changes according to the Ethereum rules by running + // the transaction messages using the statedb, but any changes are discarded. The + // only goal is to pre-cache transaction signatures and state trie nodes. + Prefetch(block *types.Block, statedb *state.StateDB, cfg vm.Config, interrupt *uint32) } // Processor is an interface for processing blocks using a given initial state. -// -// Process takes the block to be processed and the statedb upon which the -// initial state is based. It should return the receipts generated, amount -// of gas used in the process and return an error if any of the internal rules -// failed. type Processor interface { + // Process processes the state changes according to the Ethereum rules by running + // the transaction messages using the statedb and applying any rewards to both + // the processor (coinbase) and any included uncles. Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (types.Receipts, []*types.Log, uint64, *big.Int, error) } diff --git a/core/types/block.go b/core/types/block.go index d12c326177bf..727ba87ed769 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -19,12 +19,13 @@ package types import ( "encoding/binary" + "fmt" "io" "math/big" + "reflect" "sort" "sync/atomic" "time" - "unsafe" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -34,7 +35,7 @@ import ( var ( EmptyRootHash = DeriveSha(Transactions{}) - EmptyUncleHash = CalcUncleHash(nil) + EmptyUncleHash = rlpHash([]*Header(nil)) ) // A BlockNonce is a 64-bit hash which proves (combined with the @@ -80,7 +81,7 @@ type Header struct { GasLimit uint64 `json:"gasLimit" gencodec:"required"` GasUsed uint64 `json:"gasUsed" gencodec:"required"` Fees *big.Int `json:"fees" gencodec:"required"` - Time *big.Int `json:"timestamp" gencodec:"required"` + Time uint64 `json:"timestamp" gencodec:"required"` Extra []byte `json:"extraData" gencodec:"required"` Rewards []byte `json:"rewards" gencodec:"required"` MixDigest common.Hash `json:"mixHash"` @@ -96,7 +97,7 @@ type headerMarshaling struct { GasLimit hexutil.Uint64 GasUsed hexutil.Uint64 Fees *hexutil.Big - Time *hexutil.Big + Time hexutil.Uint64 Extra hexutil.Bytes Rewards hexutil.Bytes MinerNodeId hexutil.Bytes @@ -110,10 +111,31 @@ func (h *Header) Hash() common.Hash { return rlpHash(h) } +var headerSize = common.StorageSize(reflect.TypeOf(Header{}).Size()) + // Size returns the approximate memory used by all internal contents. It is used // to approximate and limit the memory consumption of various caches. func (h *Header) Size() common.StorageSize { - return common.StorageSize(unsafe.Sizeof(*h)) + common.StorageSize(len(h.Extra)+len(h.Rewards)+(h.Difficulty.BitLen()+h.Number.BitLen()+h.Time.BitLen())/8) + return headerSize + common.StorageSize(len(h.Extra)+len(h.Rewards)+(h.Difficulty.BitLen()+h.Number.BitLen())/8) +} + +// SanityCheck checks a few basic things -- these checks are way beyond what +// any 'sane' production values should hold, and can mainly be used to prevent +// that the unbounded fields are stuffed with junk data to add processing +// overhead +func (h *Header) SanityCheck() error { + if h.Number != nil && !h.Number.IsUint64() { + return fmt.Errorf("too large block number: bitlen %d", h.Number.BitLen()) + } + if h.Difficulty != nil { + if diffLen := h.Difficulty.BitLen(); diffLen > 80 { + return fmt.Errorf("too large block difficulty: bitlen %d", diffLen) + } + } + if eLen := len(h.Extra); eLen > 100*1024 { + return fmt.Errorf("too large block extradata: size %d", eLen) + } + return nil } func rlpHash(x interface{}) (h common.Hash) { @@ -229,9 +251,6 @@ func NewBlockWithHeader(header *Header) *Block { // modifying a header variable. func CopyHeader(h *Header) *Header { cpy := *h - if cpy.Time = new(big.Int); h.Time != nil { - cpy.Time.Set(h.Time) - } if cpy.Difficulty = new(big.Int); h.Difficulty != nil { cpy.Difficulty.Set(h.Difficulty) } @@ -299,7 +318,7 @@ func (b *Block) GasLimit() uint64 { return b.header.GasLimit } func (b *Block) GasUsed() uint64 { return b.header.GasUsed } func (b *Block) Fees() *big.Int { return b.header.Fees } func (b *Block) Difficulty() *big.Int { return new(big.Int).Set(b.header.Difficulty) } -func (b *Block) Time() *big.Int { return new(big.Int).Set(b.header.Time) } +func (b *Block) Time() uint64 { return b.header.Time } func (b *Block) NumberU64() uint64 { return b.header.Number.Uint64() } func (b *Block) MixDigest() common.Hash { return b.header.MixDigest } @@ -334,6 +353,12 @@ func (b *Block) Size() common.StorageSize { return common.StorageSize(c) } +// SanityCheck can be used to prevent that unbounded fields are +// stuffed with junk data to add processing overhead +func (b *Block) SanityCheck() error { + return b.header.SanityCheck() +} + type writeCounter common.StorageSize func (c *writeCounter) Write(b []byte) (int, error) { @@ -342,6 +367,9 @@ func (c *writeCounter) Write(b []byte) (int, error) { } func CalcUncleHash(uncles []*Header) common.Hash { + if len(uncles) == 0 { + return EmptyUncleHash + } return rlpHash(uncles) } diff --git a/core/types/block_test.go b/core/types/block_test.go index a35fbc25b1ed..ff0a641e5ceb 100644 --- a/core/types/block_test.go +++ b/core/types/block_test.go @@ -18,7 +18,6 @@ package types import ( "bytes" - "fmt" "math/big" "reflect" "testing" @@ -48,15 +47,11 @@ func TestBlockEncoding(t *testing.T) { check("Root", block.Root(), common.HexToHash("ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017")) check("Hash", block.Hash(), common.HexToHash("0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e")) check("Nonce", block.Nonce(), uint64(0xa13a5a8c8f2bb1c4)) - check("Time", block.Time(), big.NewInt(1426516743)) + check("Time", block.Time(), uint64(1426516743)) check("Size", block.Size(), common.StorageSize(len(blockEnc))) tx1 := NewTransaction(0, common.HexToAddress("095e7baea6a6c7c4c2dfeb977efac326af552d87"), big.NewInt(10), 50000, big.NewInt(10), nil) - tx1, _ = tx1.WithSignature(HomesteadSigner{}, common.Hex2Bytes("9bea4c4daac7c7c52e093e6a4c35dbbcf8856f1af7b059ba20253e70848d094f8a8fae537ce25ed8cb5af9adac3f141af69bd515bd2ba031522df09b97dd72b100")) - fmt.Println(block.Transactions()[0].Hash()) - fmt.Println(tx1.data) - fmt.Println(tx1.Hash()) check("len(Transactions)", len(block.Transactions()), 1) check("Transactions[0].Hash", block.Transactions()[0].Hash(), tx1.Hash()) @@ -68,3 +63,19 @@ func TestBlockEncoding(t *testing.T) { t.Errorf("encoded block mismatch:\ngot: %x\nwant: %x", ourBlockEnc, blockEnc) } } + +func TestUncleHash(t *testing.T) { + uncles := make([]*Header, 0) + h := CalcUncleHash(uncles) + exp := common.HexToHash("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347") + if h != exp { + t.Fatalf("empty uncle hash is wrong, got %x != %x", h, exp) + } +} +func BenchmarkUncleHash(b *testing.B) { + uncles := make([]*Header, 0) + b.ResetTimer() + for i := 0; i < b.N; i++ { + CalcUncleHash(uncles) + } +} diff --git a/core/types/gen_header_json.go b/core/types/gen_header_json.go index 87981f4ff80c..ce4971abdb5b 100644 --- a/core/types/gen_header_json.go +++ b/core/types/gen_header_json.go @@ -28,7 +28,7 @@ func (h Header) MarshalJSON() ([]byte, error) { GasLimit hexutil.Uint64 `json:"gasLimit" gencodec:"required"` GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"` Fees *hexutil.Big `json:"fees" gencodec:"required"` - Time *hexutil.Big `json:"timestamp" gencodec:"required"` + Time hexutil.Uint64 `json:"timestamp" gencodec:"required"` Extra hexutil.Bytes `json:"extraData" gencodec:"required"` Rewards []byte `json:"rewards" gencodec:"required"` MixDigest common.Hash `json:"mixHash"` @@ -50,7 +50,7 @@ func (h Header) MarshalJSON() ([]byte, error) { enc.GasLimit = hexutil.Uint64(h.GasLimit) enc.GasUsed = hexutil.Uint64(h.GasUsed) enc.Fees = (*hexutil.Big)(h.Fees) - enc.Time = (*hexutil.Big)(h.Time) + enc.Time = hexutil.Uint64(h.Time) enc.Extra = h.Extra enc.Rewards = h.Rewards enc.MixDigest = h.MixDigest @@ -76,7 +76,7 @@ func (h *Header) UnmarshalJSON(input []byte) error { GasLimit *hexutil.Uint64 `json:"gasLimit" gencodec:"required"` GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"` Fees *hexutil.Big `json:"fees" gencodec:"required"` - Time *hexutil.Big `json:"timestamp" gencodec:"required"` + Time *hexutil.Uint64 `json:"timestamp" gencodec:"required"` Extra *hexutil.Bytes `json:"extraData" gencodec:"required"` Rewards *hexutil.Bytes `json:"rewards" gencodec:"required"` MixDigest *common.Hash `json:"mixHash"` @@ -139,7 +139,7 @@ func (h *Header) UnmarshalJSON(input []byte) error { if dec.Time == nil { return errors.New("missing required field 'timestamp' for Header") } - h.Time = (*big.Int)(dec.Time) + h.Time = uint64(*dec.Time) if dec.Extra == nil { return errors.New("missing required field 'extraData' for Header") } diff --git a/core/types/gen_log_json.go b/core/types/gen_log_json.go index 1b5ae3c653ba..6e94339478f0 100644 --- a/core/types/gen_log_json.go +++ b/core/types/gen_log_json.go @@ -12,6 +12,7 @@ import ( var _ = (*logMarshaling)(nil) +// MarshalJSON marshals as JSON. func (l Log) MarshalJSON() ([]byte, error) { type Log struct { Address common.Address `json:"address" gencodec:"required"` @@ -37,6 +38,7 @@ func (l Log) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (l *Log) UnmarshalJSON(input []byte) error { type Log struct { Address *common.Address `json:"address" gencodec:"required"` diff --git a/core/types/gen_receipt_json.go b/core/types/gen_receipt_json.go index 5c807a4ccbe1..790ed65b5817 100644 --- a/core/types/gen_receipt_json.go +++ b/core/types/gen_receipt_json.go @@ -5,6 +5,7 @@ package types import ( "encoding/json" "errors" + "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -23,6 +24,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress common.Address `json:"contractAddress"` GasUsed hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + BlockHash common.Hash `json:"blockHash,omitempty"` + BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` + TransactionIndex hexutil.Uint `json:"transactionIndex"` } var enc Receipt enc.PostState = r.PostState @@ -33,6 +37,9 @@ func (r Receipt) MarshalJSON() ([]byte, error) { enc.TxHash = r.TxHash enc.ContractAddress = r.ContractAddress enc.GasUsed = hexutil.Uint64(r.GasUsed) + enc.BlockHash = r.BlockHash + enc.BlockNumber = (*hexutil.Big)(r.BlockNumber) + enc.TransactionIndex = hexutil.Uint(r.TransactionIndex) return json.Marshal(&enc) } @@ -47,6 +54,9 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { TxHash *common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress *common.Address `json:"contractAddress"` GasUsed *hexutil.Uint64 `json:"gasUsed" gencodec:"required"` + BlockHash *common.Hash `json:"blockHash,omitempty"` + BlockNumber *hexutil.Big `json:"blockNumber,omitempty"` + TransactionIndex *hexutil.Uint `json:"transactionIndex"` } var dec Receipt if err := json.Unmarshal(input, &dec); err != nil { @@ -81,5 +91,14 @@ func (r *Receipt) UnmarshalJSON(input []byte) error { return errors.New("missing required field 'gasUsed' for Receipt") } r.GasUsed = uint64(*dec.GasUsed) + if dec.BlockHash != nil { + r.BlockHash = *dec.BlockHash + } + if dec.BlockNumber != nil { + r.BlockNumber = (*big.Int)(dec.BlockNumber) + } + if dec.TransactionIndex != nil { + r.TransactionIndex = uint(*dec.TransactionIndex) + } return nil } diff --git a/core/types/gen_tx_json.go b/core/types/gen_tx_json.go index c27da67096eb..e676058ecc4b 100644 --- a/core/types/gen_tx_json.go +++ b/core/types/gen_tx_json.go @@ -13,6 +13,7 @@ import ( var _ = (*txdataMarshaling)(nil) +// MarshalJSON marshals as JSON. func (t txdata) MarshalJSON() ([]byte, error) { type txdata struct { AccountNonce hexutil.Uint64 `json:"nonce" gencodec:"required"` @@ -40,6 +41,7 @@ func (t txdata) MarshalJSON() ([]byte, error) { return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (t *txdata) UnmarshalJSON(input []byte) error { type txdata struct { AccountNonce *hexutil.Uint64 `json:"nonce" gencodec:"required"` diff --git a/core/types/log.go b/core/types/log.go index 717cd2e5a026..006f62bbf6f6 100644 --- a/core/types/log.go +++ b/core/types/log.go @@ -68,7 +68,11 @@ type rlpLog struct { Data []byte } -type rlpStorageLog struct { +// rlpStorageLog is the storage encoding of a log. +type rlpStorageLog rlpLog + +// legacyRlpStorageLog is the previous storage encoding of a log including some redundant fields. +type legacyRlpStorageLog struct { Address common.Address Topics []common.Hash Data []byte @@ -101,31 +105,38 @@ type LogForStorage Log // EncodeRLP implements rlp.Encoder. func (l *LogForStorage) EncodeRLP(w io.Writer) error { return rlp.Encode(w, rlpStorageLog{ - Address: l.Address, - Topics: l.Topics, - Data: l.Data, - BlockNumber: l.BlockNumber, - TxHash: l.TxHash, - TxIndex: l.TxIndex, - BlockHash: l.BlockHash, - Index: l.Index, + Address: l.Address, + Topics: l.Topics, + Data: l.Data, }) } // DecodeRLP implements rlp.Decoder. +// +// Note some redundant fields(e.g. block number, tx hash etc) will be assembled later. func (l *LogForStorage) DecodeRLP(s *rlp.Stream) error { + blob, err := s.Raw() + if err != nil { + return err + } var dec rlpStorageLog - err := s.Decode(&dec) + err = rlp.DecodeBytes(blob, &dec) if err == nil { *l = LogForStorage{ - Address: dec.Address, - Topics: dec.Topics, - Data: dec.Data, - BlockNumber: dec.BlockNumber, - TxHash: dec.TxHash, - TxIndex: dec.TxIndex, - BlockHash: dec.BlockHash, - Index: dec.Index, + Address: dec.Address, + Topics: dec.Topics, + Data: dec.Data, + } + } else { + // Try to decode log with previous definition. + var dec legacyRlpStorageLog + err = rlp.DecodeBytes(blob, &dec) + if err == nil { + *l = LogForStorage{ + Address: dec.Address, + Topics: dec.Topics, + Data: dec.Data, + } } } return err diff --git a/core/types/receipt.go b/core/types/receipt.go index 3d1fc95aabce..a96c7525ef3b 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -18,12 +18,16 @@ package types import ( "bytes" + "errors" "fmt" "io" + "math/big" "unsafe" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -44,17 +48,24 @@ const ( // Receipt represents the results of a transaction. type Receipt struct { - // Consensus fields + // Consensus fields: These fields are defined by the Yellow Paper PostState []byte `json:"root"` Status uint64 `json:"status"` CumulativeGasUsed uint64 `json:"cumulativeGasUsed" gencodec:"required"` Bloom Bloom `json:"logsBloom" gencodec:"required"` Logs []*Log `json:"logs" gencodec:"required"` - // Implementation fields (don't reorder!) + // Implementation fields: These fields are added by geth when processing a transaction. + // They are stored in the chain database. TxHash common.Hash `json:"transactionHash" gencodec:"required"` ContractAddress common.Address `json:"contractAddress"` GasUsed uint64 `json:"gasUsed" gencodec:"required"` + + // Inclusion information: These fields provide information about the inclusion of the + // transaction corresponding to this receipt. + BlockHash common.Hash `json:"blockHash,omitempty"` + BlockNumber *big.Int `json:"blockNumber,omitempty"` + TransactionIndex uint `json:"transactionIndex"` } type receiptMarshaling struct { @@ -62,6 +73,8 @@ type receiptMarshaling struct { Status hexutil.Uint64 CumulativeGasUsed hexutil.Uint64 GasUsed hexutil.Uint64 + BlockNumber *hexutil.Big + TransactionIndex hexutil.Uint } // receiptRLP is the consensus encoding of a receipt. @@ -72,7 +85,25 @@ type receiptRLP struct { Logs []*Log } -type receiptStorageRLP struct { +// storedReceiptRLP is the storage encoding of a receipt. +type storedReceiptRLP struct { + PostStateOrStatus []byte + CumulativeGasUsed uint64 + Logs []*LogForStorage +} + +// v4StoredReceiptRLP is the storage encoding of a receipt used in database version 4. +type v4StoredReceiptRLP struct { + PostStateOrStatus []byte + CumulativeGasUsed uint64 + TxHash common.Hash + ContractAddress common.Address + Logs []*LogForStorage + GasUsed uint64 +} + +// v3StoredReceiptRLP is the original storage encoding of a receipt including some unnecessary fields. +type v3StoredReceiptRLP struct { PostStateOrStatus []byte CumulativeGasUsed uint64 Bloom Bloom @@ -156,14 +187,10 @@ type ReceiptForStorage Receipt // EncodeRLP implements rlp.Encoder, and flattens all content fields of a receipt // into an RLP stream. func (r *ReceiptForStorage) EncodeRLP(w io.Writer) error { - enc := &receiptStorageRLP{ + enc := &storedReceiptRLP{ PostStateOrStatus: (*Receipt)(r).statusEncoding(), CumulativeGasUsed: r.CumulativeGasUsed, - Bloom: r.Bloom, - TxHash: r.TxHash, - ContractAddress: r.ContractAddress, Logs: make([]*LogForStorage, len(r.Logs)), - GasUsed: r.GasUsed, } for i, log := range r.Logs { enc.Logs[i] = (*LogForStorage)(log) @@ -174,21 +201,79 @@ func (r *ReceiptForStorage) EncodeRLP(w io.Writer) error { // DecodeRLP implements rlp.Decoder, and loads both consensus and implementation // fields of a receipt from an RLP stream. func (r *ReceiptForStorage) DecodeRLP(s *rlp.Stream) error { - var dec receiptStorageRLP - if err := s.Decode(&dec); err != nil { + // Retrieve the entire receipt blob as we need to try multiple decoders + blob, err := s.Raw() + if err != nil { return err } - if err := (*Receipt)(r).setStatus(dec.PostStateOrStatus); err != nil { + // Try decoding from the newest format for future proofness, then the older one + // for old nodes that just upgraded. V4 was an intermediate unreleased format so + // we do need to decode it, but it's not common (try last). + if err := decodeStoredReceiptRLP(r, blob); err == nil { + return nil + } + if err := decodeV3StoredReceiptRLP(r, blob); err == nil { + return nil + } + return decodeV4StoredReceiptRLP(r, blob) +} + +func decodeStoredReceiptRLP(r *ReceiptForStorage, blob []byte) error { + var stored storedReceiptRLP + if err := rlp.DecodeBytes(blob, &stored); err != nil { return err } - // Assign the consensus fields - r.CumulativeGasUsed, r.Bloom = dec.CumulativeGasUsed, dec.Bloom - r.Logs = make([]*Log, len(dec.Logs)) - for i, log := range dec.Logs { + if err := (*Receipt)(r).setStatus(stored.PostStateOrStatus); err != nil { + return err + } + r.CumulativeGasUsed = stored.CumulativeGasUsed + r.Logs = make([]*Log, len(stored.Logs)) + for i, log := range stored.Logs { + r.Logs[i] = (*Log)(log) + } + r.Bloom = CreateBloom(Receipts{(*Receipt)(r)}) + + return nil +} + +func decodeV4StoredReceiptRLP(r *ReceiptForStorage, blob []byte) error { + var stored v4StoredReceiptRLP + if err := rlp.DecodeBytes(blob, &stored); err != nil { + return err + } + if err := (*Receipt)(r).setStatus(stored.PostStateOrStatus); err != nil { + return err + } + r.CumulativeGasUsed = stored.CumulativeGasUsed + r.TxHash = stored.TxHash + r.ContractAddress = stored.ContractAddress + r.GasUsed = stored.GasUsed + r.Logs = make([]*Log, len(stored.Logs)) + for i, log := range stored.Logs { + r.Logs[i] = (*Log)(log) + } + r.Bloom = CreateBloom(Receipts{(*Receipt)(r)}) + + return nil +} + +func decodeV3StoredReceiptRLP(r *ReceiptForStorage, blob []byte) error { + var stored v3StoredReceiptRLP + if err := rlp.DecodeBytes(blob, &stored); err != nil { + return err + } + if err := (*Receipt)(r).setStatus(stored.PostStateOrStatus); err != nil { + return err + } + r.CumulativeGasUsed = stored.CumulativeGasUsed + r.Bloom = stored.Bloom + r.TxHash = stored.TxHash + r.ContractAddress = stored.ContractAddress + r.GasUsed = stored.GasUsed + r.Logs = make([]*Log, len(stored.Logs)) + for i, log := range stored.Logs { r.Logs[i] = (*Log)(log) } - // Assign the implementation fields - r.TxHash, r.ContractAddress, r.GasUsed = dec.TxHash, dec.ContractAddress, dec.GasUsed return nil } @@ -206,3 +291,46 @@ func (r Receipts) GetRlp(i int) []byte { } return bytes } + +// DeriveFields fills the receipts with their computed fields based on consensus +// data and contextual infos like containing block and transactions. +func (r Receipts) DeriveFields(config *params.ChainConfig, hash common.Hash, number uint64, txs Transactions) error { + signer := MakeSigner(config, new(big.Int).SetUint64(number)) + + logIndex := uint(0) + if len(txs) != len(r) { + return errors.New("transaction and receipt count mismatch") + } + for i := 0; i < len(r); i++ { + // The transaction hash can be retrieved from the transaction itself + r[i].TxHash = txs[i].Hash() + + // block location fields + r[i].BlockHash = hash + r[i].BlockNumber = new(big.Int).SetUint64(number) + r[i].TransactionIndex = uint(i) + + // The contract address can be derived from the transaction itself + if txs[i].To() == nil { + // Deriving the signer is expensive, only do if it's actually needed + from, _ := Sender(signer, txs[i]) + r[i].ContractAddress = crypto.CreateAddress(from, txs[i].Nonce()) + } + // The used gas can be calculated based on previous r + if i == 0 { + r[i].GasUsed = r[i].CumulativeGasUsed + } else { + r[i].GasUsed = r[i].CumulativeGasUsed - r[i-1].CumulativeGasUsed + } + // The derived log fields can simply be set from the block and transaction + for j := 0; j < len(r[i].Logs); j++ { + r[i].Logs[j].BlockNumber = number + r[i].Logs[j].BlockHash = hash + r[i].Logs[j].TxHash = r[i].TxHash + r[i].Logs[j].TxIndex = uint(i) + r[i].Logs[j].Index = logIndex + logIndex++ + } + } + return nil +} diff --git a/core/types/receipt_test.go b/core/types/receipt_test.go new file mode 100644 index 000000000000..806b3dd2ab88 --- /dev/null +++ b/core/types/receipt_test.go @@ -0,0 +1,283 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package types + +import ( + "bytes" + "math" + "math/big" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +func TestLegacyReceiptDecoding(t *testing.T) { + tests := []struct { + name string + encode func(*Receipt) ([]byte, error) + }{ + { + "StoredReceiptRLP", + encodeAsStoredReceiptRLP, + }, + { + "V4StoredReceiptRLP", + encodeAsV4StoredReceiptRLP, + }, + { + "V3StoredReceiptRLP", + encodeAsV3StoredReceiptRLP, + }, + } + + tx := NewTransaction(1, common.HexToAddress("0x1"), big.NewInt(1), 1, big.NewInt(1), nil) + receipt := &Receipt{ + Status: ReceiptStatusFailed, + CumulativeGasUsed: 1, + Logs: []*Log{ + { + Address: common.BytesToAddress([]byte{0x11}), + Topics: []common.Hash{common.HexToHash("dead"), common.HexToHash("beef")}, + Data: []byte{0x01, 0x00, 0xff}, + }, + { + Address: common.BytesToAddress([]byte{0x01, 0x11}), + Topics: []common.Hash{common.HexToHash("dead"), common.HexToHash("beef")}, + Data: []byte{0x01, 0x00, 0xff}, + }, + }, + TxHash: tx.Hash(), + ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), + GasUsed: 111111, + } + receipt.Bloom = CreateBloom(Receipts{receipt}) + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + enc, err := tc.encode(receipt) + if err != nil { + t.Fatalf("Error encoding receipt: %v", err) + } + var dec ReceiptForStorage + if err := rlp.DecodeBytes(enc, &dec); err != nil { + t.Fatalf("Error decoding RLP receipt: %v", err) + } + // Check whether all consensus fields are correct. + if dec.Status != receipt.Status { + t.Fatalf("Receipt status mismatch, want %v, have %v", receipt.Status, dec.Status) + } + if dec.CumulativeGasUsed != receipt.CumulativeGasUsed { + t.Fatalf("Receipt CumulativeGasUsed mismatch, want %v, have %v", receipt.CumulativeGasUsed, dec.CumulativeGasUsed) + } + if dec.Bloom != receipt.Bloom { + t.Fatalf("Bloom data mismatch, want %v, have %v", receipt.Bloom, dec.Bloom) + } + if len(dec.Logs) != len(receipt.Logs) { + t.Fatalf("Receipt log number mismatch, want %v, have %v", len(receipt.Logs), len(dec.Logs)) + } + for i := 0; i < len(dec.Logs); i++ { + if dec.Logs[i].Address != receipt.Logs[i].Address { + t.Fatalf("Receipt log %d address mismatch, want %v, have %v", i, receipt.Logs[i].Address, dec.Logs[i].Address) + } + if !reflect.DeepEqual(dec.Logs[i].Topics, receipt.Logs[i].Topics) { + t.Fatalf("Receipt log %d topics mismatch, want %v, have %v", i, receipt.Logs[i].Topics, dec.Logs[i].Topics) + } + if !bytes.Equal(dec.Logs[i].Data, receipt.Logs[i].Data) { + t.Fatalf("Receipt log %d data mismatch, want %v, have %v", i, receipt.Logs[i].Data, dec.Logs[i].Data) + } + } + }) + } +} + +func encodeAsStoredReceiptRLP(want *Receipt) ([]byte, error) { + stored := &storedReceiptRLP{ + PostStateOrStatus: want.statusEncoding(), + CumulativeGasUsed: want.CumulativeGasUsed, + Logs: make([]*LogForStorage, len(want.Logs)), + } + for i, log := range want.Logs { + stored.Logs[i] = (*LogForStorage)(log) + } + return rlp.EncodeToBytes(stored) +} + +func encodeAsV4StoredReceiptRLP(want *Receipt) ([]byte, error) { + stored := &v4StoredReceiptRLP{ + PostStateOrStatus: want.statusEncoding(), + CumulativeGasUsed: want.CumulativeGasUsed, + TxHash: want.TxHash, + ContractAddress: want.ContractAddress, + Logs: make([]*LogForStorage, len(want.Logs)), + GasUsed: want.GasUsed, + } + for i, log := range want.Logs { + stored.Logs[i] = (*LogForStorage)(log) + } + return rlp.EncodeToBytes(stored) +} + +func encodeAsV3StoredReceiptRLP(want *Receipt) ([]byte, error) { + stored := &v3StoredReceiptRLP{ + PostStateOrStatus: want.statusEncoding(), + CumulativeGasUsed: want.CumulativeGasUsed, + Bloom: want.Bloom, + TxHash: want.TxHash, + ContractAddress: want.ContractAddress, + Logs: make([]*LogForStorage, len(want.Logs)), + GasUsed: want.GasUsed, + } + for i, log := range want.Logs { + stored.Logs[i] = (*LogForStorage)(log) + } + return rlp.EncodeToBytes(stored) +} + +// Tests that receipt data can be correctly derived from the contextual infos +func TestDeriveFields(t *testing.T) { + // Create a few transactions to have receipts for + txs := Transactions{ + NewContractCreation(1, big.NewInt(1), 1, big.NewInt(1), nil), + NewTransaction(2, common.HexToAddress("0x2"), big.NewInt(2), 2, big.NewInt(2), nil), + } + // Create the corresponding receipts + receipts := Receipts{ + &Receipt{ + Status: ReceiptStatusFailed, + CumulativeGasUsed: 1, + Logs: []*Log{ + {Address: common.BytesToAddress([]byte{0x11})}, + {Address: common.BytesToAddress([]byte{0x01, 0x11})}, + }, + TxHash: txs[0].Hash(), + ContractAddress: common.BytesToAddress([]byte{0x01, 0x11, 0x11}), + GasUsed: 1, + }, + &Receipt{ + PostState: common.Hash{2}.Bytes(), + CumulativeGasUsed: 3, + Logs: []*Log{ + {Address: common.BytesToAddress([]byte{0x22})}, + {Address: common.BytesToAddress([]byte{0x02, 0x22})}, + }, + TxHash: txs[1].Hash(), + ContractAddress: common.BytesToAddress([]byte{0x02, 0x22, 0x22}), + GasUsed: 2, + }, + } + // Clear all the computed fields and re-derive them + number := big.NewInt(1) + hash := common.BytesToHash([]byte{0x03, 0x14}) + + clearComputedFieldsOnReceipts(t, receipts) + if err := receipts.DeriveFields(params.TestChainConfig, hash, number.Uint64(), txs); err != nil { + t.Fatalf("DeriveFields(...) = %v, want ", err) + } + // Iterate over all the computed fields and check that they're correct + signer := MakeSigner(params.TestChainConfig, number) + + logIndex := uint(0) + for i := range receipts { + if receipts[i].TxHash != txs[i].Hash() { + t.Errorf("receipts[%d].TxHash = %s, want %s", i, receipts[i].TxHash.String(), txs[i].Hash().String()) + } + if receipts[i].BlockHash != hash { + t.Errorf("receipts[%d].BlockHash = %s, want %s", i, receipts[i].BlockHash.String(), hash.String()) + } + if receipts[i].BlockNumber.Cmp(number) != 0 { + t.Errorf("receipts[%c].BlockNumber = %s, want %s", i, receipts[i].BlockNumber.String(), number.String()) + } + if receipts[i].TransactionIndex != uint(i) { + t.Errorf("receipts[%d].TransactionIndex = %d, want %d", i, receipts[i].TransactionIndex, i) + } + if receipts[i].GasUsed != txs[i].Gas() { + t.Errorf("receipts[%d].GasUsed = %d, want %d", i, receipts[i].GasUsed, txs[i].Gas()) + } + if txs[i].To() != nil && receipts[i].ContractAddress != (common.Address{}) { + t.Errorf("receipts[%d].ContractAddress = %s, want %s", i, receipts[i].ContractAddress.String(), (common.Address{}).String()) + } + from, _ := Sender(signer, txs[i]) + contractAddress := crypto.CreateAddress(from, txs[i].Nonce()) + if txs[i].To() == nil && receipts[i].ContractAddress != contractAddress { + t.Errorf("receipts[%d].ContractAddress = %s, want %s", i, receipts[i].ContractAddress.String(), contractAddress.String()) + } + for j := range receipts[i].Logs { + if receipts[i].Logs[j].BlockNumber != number.Uint64() { + t.Errorf("receipts[%d].Logs[%d].BlockNumber = %d, want %d", i, j, receipts[i].Logs[j].BlockNumber, number.Uint64()) + } + if receipts[i].Logs[j].BlockHash != hash { + t.Errorf("receipts[%d].Logs[%d].BlockHash = %s, want %s", i, j, receipts[i].Logs[j].BlockHash.String(), hash.String()) + } + if receipts[i].Logs[j].TxHash != txs[i].Hash() { + t.Errorf("receipts[%d].Logs[%d].TxHash = %s, want %s", i, j, receipts[i].Logs[j].TxHash.String(), txs[i].Hash().String()) + } + if receipts[i].Logs[j].TxHash != txs[i].Hash() { + t.Errorf("receipts[%d].Logs[%d].TxHash = %s, want %s", i, j, receipts[i].Logs[j].TxHash.String(), txs[i].Hash().String()) + } + if receipts[i].Logs[j].TxIndex != uint(i) { + t.Errorf("receipts[%d].Logs[%d].TransactionIndex = %d, want %d", i, j, receipts[i].Logs[j].TxIndex, i) + } + if receipts[i].Logs[j].Index != logIndex { + t.Errorf("receipts[%d].Logs[%d].Index = %d, want %d", i, j, receipts[i].Logs[j].Index, logIndex) + } + logIndex++ + } + } +} + +func clearComputedFieldsOnReceipts(t *testing.T, receipts Receipts) { + t.Helper() + + for _, receipt := range receipts { + clearComputedFieldsOnReceipt(t, receipt) + } +} + +func clearComputedFieldsOnReceipt(t *testing.T, receipt *Receipt) { + t.Helper() + + receipt.TxHash = common.Hash{} + receipt.BlockHash = common.Hash{} + receipt.BlockNumber = big.NewInt(math.MaxUint32) + receipt.TransactionIndex = math.MaxUint32 + receipt.ContractAddress = common.Address{} + receipt.GasUsed = 0 + + clearComputedFieldsOnLogs(t, receipt.Logs) +} + +func clearComputedFieldsOnLogs(t *testing.T, logs []*Log) { + t.Helper() + + for _, log := range logs { + clearComputedFieldsOnLog(t, log) + } +} + +func clearComputedFieldsOnLog(t *testing.T, log *Log) { + t.Helper() + + log.BlockNumber = math.MaxUint32 + log.BlockHash = common.Hash{} + log.TxHash = common.Hash{} + log.TxIndex = math.MaxUint32 + log.Index = math.MaxUint32 +} diff --git a/core/types/transaction.go b/core/types/transaction.go index 4cfa639ba22f..ca7bd9b53ce3 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -311,7 +311,9 @@ func (tx *Transaction) Cost() *big.Int { return total } -func (tx *Transaction) RawSignatureValues() (*big.Int, *big.Int, *big.Int) { +// RawSignatureValues returns the V, R, S signature values of the transaction. +// The return values should not be modified by the caller. +func (tx *Transaction) RawSignatureValues() (v, r, s *big.Int) { return tx.data.V, tx.data.R, tx.data.S } diff --git a/core/types/transaction_signing.go b/core/types/transaction_signing.go index 9e73dc3bb4e5..428162c4cb81 100644 --- a/core/types/transaction_signing.go +++ b/core/types/transaction_signing.go @@ -218,8 +218,8 @@ func (s FrontierSigner) Equal(s2 Signer) bool { // SignatureValues returns signature values. This signature // needs to be in the [R || S || V] format where V is 0 or 1. func (fs FrontierSigner) SignatureValues(tx *Transaction, sig []byte) (r, s, v *big.Int, err error) { - if len(sig) != 65 { - panic(fmt.Sprintf("wrong size for signature: got %d, want 65", len(sig))) + if len(sig) != crypto.SignatureLength { + panic(fmt.Sprintf("wrong size for signature: got %d, want %d", len(sig), crypto.SignatureLength)) } r = new(big.Int).SetBytes(sig[:32]) s = new(big.Int).SetBytes(sig[32:64]) @@ -254,7 +254,7 @@ func recoverPlain(sighash common.Hash, R, S, Vb *big.Int, homestead bool) (commo } // encode the signature in uncompressed format r, s := R.Bytes(), S.Bytes() - sig := make([]byte, 65) + sig := make([]byte, crypto.SignatureLength) copy(sig[32-len(r):32], r) copy(sig[64-len(s):64], s) sig[64] = V diff --git a/core/types/transaction_test.go b/core/types/transaction_test.go index f38d8e7177c4..7a1b6cd4d4b7 100644 --- a/core/types/transaction_test.go +++ b/core/types/transaction_test.go @@ -89,17 +89,15 @@ func TestRecipientEmpty(t *testing.T) { _, addr := defaultTestKey() tx, err := decodeTx(common.Hex2Bytes("f8498080808080011ca09b16de9d5bdee2cf56c28d16275a4da68cd30273e2525f3959f5d62557489921a0372ebd8fb3345f7db7b5a86d42e24d36e983e259b0664ceb8c227ec9af572f3d")) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } from, err := Sender(HomesteadSigner{}, tx) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } if addr != from { - t.Error("derived address doesn't match") + t.Fatal("derived address doesn't match") } } @@ -108,18 +106,15 @@ func TestRecipientNormal(t *testing.T) { tx, err := decodeTx(common.Hex2Bytes("f85d80808094000000000000000000000000000000000000000080011ca0527c0d8f5c63f7b9f41324a7c8a563ee1190bcbf0dac8ab446291bdbf32f5c79a0552c4ef0a09a04395074dab9ed34d3fbfb843c2f2546cc30fe89ec143ca94ca6")) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } from, err := Sender(HomesteadSigner{}, tx) if err != nil { - t.Error(err) - t.FailNow() + t.Fatal(err) } - if addr != from { - t.Error("derived address doesn't match") + t.Fatal("derived address doesn't match") } } diff --git a/core/vm/common.go b/core/vm/common.go index 17de38decba2..d592a9410dd0 100644 --- a/core/vm/common.go +++ b/core/vm/common.go @@ -23,13 +23,31 @@ import ( "github.com/ethereum/go-ethereum/common/math" ) -// calculates the memory size required for a step -func calcMemSize(off, l *big.Int) *big.Int { - if l.Sign() == 0 { - return common.Big0 +// calcMemSize64 calculates the required memory size, and returns +// the size and whether the result overflowed uint64 +func calcMemSize64(off, l *big.Int) (uint64, bool) { + if !l.IsUint64() { + return 0, true } + return calcMemSize64WithUint(off, l.Uint64()) +} - return new(big.Int).Add(off, l) +// calcMemSize64WithUint calculates the required memory size, and returns +// the size and whether the result overflowed uint64 +// Identical to calcMemSize64, but length is a uint64 +func calcMemSize64WithUint(off *big.Int, length64 uint64) (uint64, bool) { + // if length is zero, memsize is always zero, regardless of offset + if length64 == 0 { + return 0, false + } + // Check that offset doesn't overflow + if !off.IsUint64() { + return 0, true + } + offset64 := off.Uint64() + val := offset64 + length64 + // if value < either of it's parts, then it overflowed + return val, val < offset64 } // getData returns a slice from the data based on the start and size and pads @@ -59,7 +77,7 @@ func getDataBig(data []byte, start *big.Int, size *big.Int) []byte { // bigUint64 returns the integer casted to a uint64 and returns whether it // overflowed in the process. func bigUint64(v *big.Int) (uint64, bool) { - return v.Uint64(), v.BitLen() > 64 + return v.Uint64(), !v.IsUint64() } // toWordSize returns the ceiled word size required for memory expansion. diff --git a/core/vm/contract.go b/core/vm/contract.go index 20baa6e751bc..375e24bc1974 100644 --- a/core/vm/contract.go +++ b/core/vm/contract.go @@ -162,7 +162,7 @@ func (c *Contract) Address() common.Address { return c.self.Address() } -// Value returns the contracts value (sent to it from it's caller) +// Value returns the contract's value (sent to it from it's caller) func (c *Contract) Value() *big.Int { return c.value } diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 20b741f8f144..875054f89a70 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -18,12 +18,14 @@ package vm import ( "crypto/sha256" + "encoding/binary" "errors" "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/blake2b" "github.com/ethereum/go-ethereum/crypto/bn256" "github.com/ethereum/go-ethereum/params" "golang.org/x/crypto/ripemd160" @@ -54,9 +56,23 @@ var PrecompiledContractsByzantium = map[common.Address]PrecompiledContract{ common.BytesToAddress([]byte{3}): &ripemd160hash{}, common.BytesToAddress([]byte{4}): &dataCopy{}, common.BytesToAddress([]byte{5}): &bigModExp{}, - common.BytesToAddress([]byte{6}): &bn256Add{}, - common.BytesToAddress([]byte{7}): &bn256ScalarMul{}, - common.BytesToAddress([]byte{8}): &bn256Pairing{}, + common.BytesToAddress([]byte{6}): &bn256AddByzantium{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulByzantium{}, + common.BytesToAddress([]byte{8}): &bn256PairingByzantium{}, +} + +// PrecompiledContractsIstanbul contains the default set of pre-compiled Ethereum +// contracts used in the Istanbul release. +var PrecompiledContractsIstanbul = map[common.Address]PrecompiledContract{ + common.BytesToAddress([]byte{1}): &ecrecover{}, + common.BytesToAddress([]byte{2}): &sha256hash{}, + common.BytesToAddress([]byte{3}): &ripemd160hash{}, + common.BytesToAddress([]byte{4}): &dataCopy{}, + common.BytesToAddress([]byte{5}): &bigModExp{}, + common.BytesToAddress([]byte{6}): &bn256AddIstanbul{}, + common.BytesToAddress([]byte{7}): &bn256ScalarMulIstanbul{}, + common.BytesToAddress([]byte{8}): &bn256PairingIstanbul{}, + common.BytesToAddress([]byte{9}): &blake2F{}, } // RunPrecompiledContract runs and evaluates the output of a precompiled contract. @@ -271,15 +287,9 @@ func newTwistPoint(blob []byte) (*bn256.G2, error) { return p, nil } -// bn256Add implements a native elliptic curve point addition. -type bn256Add struct{} - -// RequiredGas returns the gas required to execute the pre-compiled contract. -func (c *bn256Add) RequiredGas(input []byte) uint64 { - return params.Bn256AddGas -} - -func (c *bn256Add) Run(input []byte) ([]byte, error) { +// runBn256Add implements the Bn256Add precompile, referenced by both +// Byzantium and Istanbul operations. +func runBn256Add(input []byte) ([]byte, error) { x, err := newCurvePoint(getData(input, 0, 64)) if err != nil { return nil, err @@ -293,15 +303,35 @@ func (c *bn256Add) Run(input []byte) ([]byte, error) { return res.Marshal(), nil } -// bn256ScalarMul implements a native elliptic curve scalar multiplication. -type bn256ScalarMul struct{} +// bn256Add implements a native elliptic curve point addition conforming to +// Istanbul consensus rules. +type bn256AddIstanbul struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256AddIstanbul) RequiredGas(input []byte) uint64 { + return params.Bn256AddGasIstanbul +} + +func (c *bn256AddIstanbul) Run(input []byte) ([]byte, error) { + return runBn256Add(input) +} + +// bn256AddByzantium implements a native elliptic curve point addition +// conforming to Byzantium consensus rules. +type bn256AddByzantium struct{} // RequiredGas returns the gas required to execute the pre-compiled contract. -func (c *bn256ScalarMul) RequiredGas(input []byte) uint64 { - return params.Bn256ScalarMulGas +func (c *bn256AddByzantium) RequiredGas(input []byte) uint64 { + return params.Bn256AddGasByzantium } -func (c *bn256ScalarMul) Run(input []byte) ([]byte, error) { +func (c *bn256AddByzantium) Run(input []byte) ([]byte, error) { + return runBn256Add(input) +} + +// runBn256ScalarMul implements the Bn256ScalarMul precompile, referenced by +// both Byzantium and Istanbul operations. +func runBn256ScalarMul(input []byte) ([]byte, error) { p, err := newCurvePoint(getData(input, 0, 64)) if err != nil { return nil, err @@ -311,6 +341,32 @@ func (c *bn256ScalarMul) Run(input []byte) ([]byte, error) { return res.Marshal(), nil } +// bn256ScalarMulIstanbul implements a native elliptic curve scalar +// multiplication conforming to Istanbul consensus rules. +type bn256ScalarMulIstanbul struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256ScalarMulIstanbul) RequiredGas(input []byte) uint64 { + return params.Bn256ScalarMulGasIstanbul +} + +func (c *bn256ScalarMulIstanbul) Run(input []byte) ([]byte, error) { + return runBn256ScalarMul(input) +} + +// bn256ScalarMulByzantium implements a native elliptic curve scalar +// multiplication conforming to Byzantium consensus rules. +type bn256ScalarMulByzantium struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256ScalarMulByzantium) RequiredGas(input []byte) uint64 { + return params.Bn256ScalarMulGasByzantium +} + +func (c *bn256ScalarMulByzantium) Run(input []byte) ([]byte, error) { + return runBn256ScalarMul(input) +} + var ( // true32Byte is returned if the bn256 pairing check succeeds. true32Byte = []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} @@ -322,15 +378,9 @@ var ( errBadPairingInput = errors.New("bad elliptic curve pairing size") ) -// bn256Pairing implements a pairing pre-compile for the bn256 curve -type bn256Pairing struct{} - -// RequiredGas returns the gas required to execute the pre-compiled contract. -func (c *bn256Pairing) RequiredGas(input []byte) uint64 { - return params.Bn256PairingBaseGas + uint64(len(input)/192)*params.Bn256PairingPerPointGas -} - -func (c *bn256Pairing) Run(input []byte) ([]byte, error) { +// runBn256Pairing implements the Bn256Pairing precompile, referenced by both +// Byzantium and Istanbul operations. +func runBn256Pairing(input []byte) ([]byte, error) { // Handle some corner cases cheaply if len(input)%192 > 0 { return nil, errBadPairingInput @@ -358,3 +408,90 @@ func (c *bn256Pairing) Run(input []byte) ([]byte, error) { } return false32Byte, nil } + +// bn256PairingIstanbul implements a pairing pre-compile for the bn256 curve +// conforming to Istanbul consensus rules. +type bn256PairingIstanbul struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256PairingIstanbul) RequiredGas(input []byte) uint64 { + return params.Bn256PairingBaseGasIstanbul + uint64(len(input)/192)*params.Bn256PairingPerPointGasIstanbul +} + +func (c *bn256PairingIstanbul) Run(input []byte) ([]byte, error) { + return runBn256Pairing(input) +} + +// bn256PairingByzantium implements a pairing pre-compile for the bn256 curve +// conforming to Byzantium consensus rules. +type bn256PairingByzantium struct{} + +// RequiredGas returns the gas required to execute the pre-compiled contract. +func (c *bn256PairingByzantium) RequiredGas(input []byte) uint64 { + return params.Bn256PairingBaseGasByzantium + uint64(len(input)/192)*params.Bn256PairingPerPointGasByzantium +} + +func (c *bn256PairingByzantium) Run(input []byte) ([]byte, error) { + return runBn256Pairing(input) +} + +type blake2F struct{} + +func (c *blake2F) RequiredGas(input []byte) uint64 { + // If the input is malformed, we can't calculate the gas, return 0 and let the + // actual call choke and fault. + if len(input) != blake2FInputLength { + return 0 + } + return uint64(binary.BigEndian.Uint32(input[0:4])) +} + +const ( + blake2FInputLength = 213 + blake2FFinalBlockBytes = byte(1) + blake2FNonFinalBlockBytes = byte(0) +) + +var ( + errBlake2FInvalidInputLength = errors.New("invalid input length") + errBlake2FInvalidFinalFlag = errors.New("invalid final flag") +) + +func (c *blake2F) Run(input []byte) ([]byte, error) { + // Make sure the input is valid (correct lenth and final flag) + if len(input) != blake2FInputLength { + return nil, errBlake2FInvalidInputLength + } + if input[212] != blake2FNonFinalBlockBytes && input[212] != blake2FFinalBlockBytes { + return nil, errBlake2FInvalidFinalFlag + } + // Parse the input into the Blake2b call parameters + var ( + rounds = binary.BigEndian.Uint32(input[0:4]) + final = (input[212] == blake2FFinalBlockBytes) + + h [8]uint64 + m [16]uint64 + t [2]uint64 + ) + for i := 0; i < 8; i++ { + offset := 4 + i*8 + h[i] = binary.LittleEndian.Uint64(input[offset : offset+8]) + } + for i := 0; i < 16; i++ { + offset := 68 + i*8 + m[i] = binary.LittleEndian.Uint64(input[offset : offset+8]) + } + t[0] = binary.LittleEndian.Uint64(input[196:204]) + t[1] = binary.LittleEndian.Uint64(input[204:212]) + + // Execute the compression function, extract and return the result + blake2b.F(&h, m, t, final, rounds) + + output := make([]byte, 64) + for i := 0; i < 8; i++ { + offset := i * 8 + binary.LittleEndian.PutUint64(output[offset:offset+8], h[i]) + } + return output, nil +} diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index 96083337c922..ae95b4462fef 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -19,6 +19,7 @@ package vm import ( "fmt" "math/big" + "reflect" "testing" "github.com/ethereum/go-ethereum/common" @@ -32,6 +33,14 @@ type precompiledTest struct { noBenchmark bool // Benchmark primarily the worst-cases } +// precompiledFailureTest defines the input/error pairs for precompiled +// contract failure tests. +type precompiledFailureTest struct { + input string + expectedError error + name string +} + // modexpTests are the test and benchmark data for the modexp precompiled contract. var modexpTests = []precompiledTest{ { @@ -336,8 +345,61 @@ var bn256PairingTests = []precompiledTest{ }, } +// EIP-152 test vectors +var blake2FMalformedInputTests = []precompiledFailureTest{ + { + input: "", + expectedError: errBlake2FInvalidInputLength, + name: "vector 0: empty input", + }, + { + input: "00000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expectedError: errBlake2FInvalidInputLength, + name: "vector 1: less than 213 bytes input", + }, + { + input: "000000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expectedError: errBlake2FInvalidInputLength, + name: "vector 2: more than 213 bytes input", + }, + { + input: "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000002", + expectedError: errBlake2FInvalidFinalFlag, + name: "vector 3: malformed final block indicator flag", + }, +} + +// EIP-152 test vectors +var blake2FTests = []precompiledTest{ + { + input: "0000000048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expected: "08c9bcf367e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d282e6ad7f520e511f6c3e2b8c68059b9442be0454267ce079217e1319cde05b", + name: "vector 4", + }, + { // https://tools.ietf.org/html/rfc7693#appendix-A + input: "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expected: "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923", + name: "vector 5", + }, + { + input: "0000000c48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000", + expected: "75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d2875298743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735", + name: "vector 6", + }, + { + input: "0000000148c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expected: "b63a380cb2897d521994a85234ee2c181b5f844d2c624c002677e9703449d2fba551b3a8333bcdf5f2f7e08993d53923de3d64fcc68c034e717b9293fed7a421", + name: "vector 7", + }, + { + input: "007A120048c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b61626300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000001", + expected: "6d2ce9e534d50e18ff866ae92d70cceba79bbcd14c63819fe48752c8aca87a4bb7dcc230d22a4047f0486cfcfb50a17b24b2899eb8fca370f22240adb5170189", + name: "vector 8", + }, +} + func testPrecompiled(addr string, test precompiledTest, t *testing.T) { - p := PrecompiledContractsByzantium[common.HexToAddress(addr)] + p := PrecompiledContractsIstanbul[common.HexToAddress(addr)] in := common.Hex2Bytes(test.input) contract := NewContract(AccountRef(common.HexToAddress("1337")), nil, new(big.Int), p.RequiredGas(in)) @@ -350,11 +412,25 @@ func testPrecompiled(addr string, test precompiledTest, t *testing.T) { }) } +func testPrecompiledFailure(addr string, test precompiledFailureTest, t *testing.T) { + p := PrecompiledContractsIstanbul[common.HexToAddress(addr)] + in := common.Hex2Bytes(test.input) + contract := NewContract(AccountRef(common.HexToAddress("31337")), + nil, new(big.Int), p.RequiredGas(in)) + + t.Run(test.name, func(t *testing.T) { + _, err := RunPrecompiledContract(p, in, contract) + if !reflect.DeepEqual(err, test.expectedError) { + t.Errorf("Expected error [%v], got [%v]", test.expectedError, err) + } + }) +} + func benchmarkPrecompiled(addr string, test precompiledTest, bench *testing.B) { if test.noBenchmark { return } - p := PrecompiledContractsByzantium[common.HexToAddress(addr)] + p := PrecompiledContractsIstanbul[common.HexToAddress(addr)] in := common.Hex2Bytes(test.input) reqGas := p.RequiredGas(in) contract := NewContract(AccountRef(common.HexToAddress("1337")), @@ -481,3 +557,20 @@ func BenchmarkPrecompiledBn256Pairing(bench *testing.B) { benchmarkPrecompiled("08", test, bench) } } +func TestPrecompiledBlake2F(t *testing.T) { + for _, test := range blake2FTests { + testPrecompiled("09", test, t) + } +} + +func BenchmarkPrecompiledBlake2F(bench *testing.B) { + for _, test := range blake2FTests { + benchmarkPrecompiled("09", test, bench) + } +} + +func TestPrecompileBlake2FMalformedInput(t *testing.T) { + for _, test := range blake2FMalformedInputTests { + testPrecompiledFailure("09", test, t) + } +} diff --git a/core/vm/eips.go b/core/vm/eips.go new file mode 100644 index 000000000000..075f5b760669 --- /dev/null +++ b/core/vm/eips.go @@ -0,0 +1,92 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package vm + +import ( + "fmt" + + "github.com/ethereum/go-ethereum/params" +) + +// EnableEIP enables the given EIP on the config. +// This operation writes in-place, and callers need to ensure that the globally +// defined jump tables are not polluted. +func EnableEIP(eipNum int, jt *JumpTable) error { + switch eipNum { + case 2200: + enable2200(jt) + case 1884: + enable1884(jt) + case 1344: + enable1344(jt) + default: + return fmt.Errorf("undefined eip %d", eipNum) + } + return nil +} + +// enable1884 applies EIP-1884 to the given jump table: +// - Increase cost of BALANCE to 700 +// - Increase cost of EXTCODEHASH to 700 +// - Increase cost of SLOAD to 800 +// - Define SELFBALANCE, with cost GasFastStep (5) +func enable1884(jt *JumpTable) { + // Gas cost changes + jt[BALANCE].constantGas = params.BalanceGasEIP1884 + jt[EXTCODEHASH].constantGas = params.ExtcodeHashGasEIP1884 + jt[SLOAD].constantGas = params.SloadGasEIP1884 + + // New opcode + jt[SELFBALANCE] = operation{ + execute: opSelfBalance, + constantGas: GasFastStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, + } +} + +func opSelfBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { + balance := interpreter.intPool.get().Set(interpreter.evm.StateDB.GetBalance(contract.Address())) + stack.push(balance) + return nil, nil +} + +// enable1344 applies EIP-1344 (ChainID Opcode) +// - Adds an opcode that returns the current chain’s EIP-155 unique identifier +func enable1344(jt *JumpTable) { + // New opcode + jt[CHAINID] = operation{ + execute: opChainID, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, + } +} + +// opChainID implements CHAINID opcode +func opChainID(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { + chainId := interpreter.intPool.get().Set(interpreter.evm.chainConfig.ChainID) + stack.push(chainId) + return nil, nil +} + +// enable2200 applies EIP-2200 (Rebalance net-metered SSTORE) +func enable2200(jt *JumpTable) { + jt[SSTORE].dynamicGas = gasSStoreEIP2200 +} diff --git a/core/vm/evm.go b/core/vm/evm.go index ba4d1e9eb8c5..751c1fdc1f41 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -35,7 +35,7 @@ type ( CanTransferFunc func(StateDB, common.Address, *big.Int) bool // TransferFunc is the signature of a transfer function TransferFunc func(StateDB, common.Address, common.Address, *big.Int) - // GetHashFunc returns the nth block hash in the blockchain + // GetHashFunc returns the n'th block hash in the blockchain // and is used by the BLOCKHASH EVM op code. GetHashFunc func(uint64) common.Hash ) @@ -44,9 +44,12 @@ type ( func run(evm *EVM, contract *Contract, input []byte, readOnly bool) ([]byte, error) { if contract.CodeAddr != nil { precompiles := PrecompiledContractsHomestead - if evm.ChainConfig().IsByzantium(evm.BlockNumber) { + if evm.chainRules.IsByzantium { precompiles = PrecompiledContractsByzantium } + if evm.chainRules.IsIstanbul { + precompiles = PrecompiledContractsIstanbul + } if p := precompiles[*contract.CodeAddr]; p != nil { return RunPrecompiledContract(p, input, contract) } @@ -169,6 +172,11 @@ func (evm *EVM) Cancel() { atomic.StoreInt32(&evm.abort, 1) } +// Cancelled returns true if Cancel has been called +func (evm *EVM) Cancelled() bool { + return atomic.LoadInt32(&evm.abort) == 1 +} + // Interpreter returns the current interpreter func (evm *EVM) Interpreter() Interpreter { return evm.interpreter @@ -198,10 +206,13 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas ) if !evm.StateDB.Exist(addr) { precompiles := PrecompiledContractsHomestead - if evm.ChainConfig().IsByzantium(evm.BlockNumber) { + if evm.chainRules.IsByzantium { precompiles = PrecompiledContractsByzantium } - if precompiles[addr] == nil && evm.ChainConfig().IsEIP158(evm.BlockNumber) && value.Sign() == 0 { + if evm.chainRules.IsIstanbul { + precompiles = PrecompiledContractsIstanbul + } + if precompiles[addr] == nil && evm.chainRules.IsEIP158 && value.Sign() == 0 { // Calling a non existing account, don't do anything, but ping the tracer if evm.vmConfig.Debug && evm.depth == 0 { evm.vmConfig.Tracer.CaptureStart(caller.Address(), addr, false, input, gas, value) @@ -267,9 +278,8 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte, snapshot = evm.StateDB.Snapshot() to = AccountRef(caller.Address()) ) - // initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, to, value, gas) contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) @@ -333,9 +343,8 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte to = AccountRef(addr) snapshot = evm.StateDB.Snapshot() ) - // Initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, to, new(big.Int), gas) contract.SetCallCode(&addr, evm.StateDB.GetCodeHash(addr), evm.StateDB.GetCode(addr)) @@ -391,14 +400,13 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, // Create a new account on the state snapshot := evm.StateDB.Snapshot() evm.StateDB.CreateAccount(address) - if evm.ChainConfig().IsEIP158(evm.BlockNumber) { + if evm.chainRules.IsEIP158 { evm.StateDB.SetNonce(address, 1) } evm.Transfer(evm.StateDB, caller.Address(), address, value) - // initialise a new contract and set the code that is to be used by the - // EVM. The contract is a scoped environment for this execution context - // only. + // Initialise a new contract and set the code that is to be used by the EVM. + // The contract is a scoped environment for this execution context only. contract := NewContract(caller, AccountRef(address), value, gas) contract.SetCodeOptionalHash(&address, codeAndHash) @@ -414,7 +422,7 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, ret, err := run(evm, contract, nil, false) // check whether the max code size has been exceeded - maxCodeSizeExceeded := evm.ChainConfig().IsEIP158(evm.BlockNumber) && len(ret) > params.MaxCodeSize + maxCodeSizeExceeded := evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize // if the contract creation ran successfully and no errors were returned // calculate the gas required to store the code. If the code could not // be stored due to not enough gas set an error and let it be handled @@ -431,7 +439,7 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, // When an error was returned by the EVM or when setting the creation code // above we revert to the snapshot and consume any gas remaining. Additionally // when we're in homestead this also counts for code storage gas errors. - if maxCodeSizeExceeded || (err != nil && (evm.ChainConfig().IsHomestead(evm.BlockNumber) || err != ErrCodeStoreOutOfGas)) { + if maxCodeSizeExceeded || (err != nil && (evm.chainRules.IsHomestead || err != ErrCodeStoreOutOfGas)) { evm.StateDB.RevertToSnapshot(snapshot) if err != errExecutionReverted { contract.UseGas(contract.Gas) diff --git a/core/vm/gas.go b/core/vm/gas.go index bba7058c7e23..bd8b4f1042fa 100644 --- a/core/vm/gas.go +++ b/core/vm/gas.go @@ -18,8 +18,6 @@ package vm import ( "math/big" - - "github.com/ethereum/go-ethereum/params" ) // Gas costs @@ -30,28 +28,24 @@ const ( GasMidStep uint64 = 8 GasSlowStep uint64 = 10 GasExtStep uint64 = 20 - - GasReturn uint64 = 0 - GasStop uint64 = 0 - GasContractByte uint64 = 200 ) // calcGas returns the actual gas cost of the call. // -// The cost of gas was changed during the homestead price change HF. To allow for EIP150 -// to be implemented. The returned gas is gas - base * 63 / 64. -func callGas(gasTable params.GasTable, availableGas, base uint64, callCost *big.Int) (uint64, error) { - if gasTable.CreateBySuicide > 0 { +// The cost of gas was changed during the homestead price change HF. +// As part of EIP 150 (TangerineWhistle), the returned gas is gas - base * 63 / 64. +func callGas(isEip150 bool, availableGas, base uint64, callCost *big.Int) (uint64, error) { + if isEip150 { availableGas = availableGas - base gas := availableGas - availableGas/64 // If the bit length exceeds 64 bit we know that the newly calculated "gas" for EIP150 // is smaller than the requested amount. Therefor we return the new gas instead // of returning an error. - if callCost.BitLen() > 64 || gas < callCost.Uint64() { + if !callCost.IsUint64() || gas < callCost.Uint64() { return gas, nil } } - if callCost.BitLen() > 64 { + if !callCost.IsUint64() { return 0, errGasUintOverflow } diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index 9203e10a70b2..1d3c4f1003e0 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -17,29 +17,27 @@ package vm import ( + "errors" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/params" ) -// memoryGasCosts calculates the quadratic gas for memory expansion. It does so +// memoryGasCost calculates the quadratic gas for memory expansion. It does so // only for the memory region that is expanded, not the total memory. func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { - if newMemSize == 0 { return 0, nil } - // The maximum that will fit in a uint64 is max_word_count - 1 - // anything above that will result in an overflow. - // Additionally, a newMemSize which results in a - // newMemSizeWords larger than 0x7ffffffff will cause the square operation - // to overflow. - // The constant 0xffffffffe0 is the highest number that can be used without - // overflowing the gas calculation - if newMemSize > 0xffffffffe0 { + // The maximum that will fit in a uint64 is max_word_count - 1. Anything above + // that will result in an overflow. Additionally, a newMemSize which results in + // a newMemSizeWords larger than 0xFFFFFFFF will cause the square operation to + // overflow. The constant 0x1FFFFFFFE0 is the highest number that can be used + // without overflowing the gas calculation. + if newMemSize > 0x1FFFFFFFE0 { return 0, errGasUintOverflow } - newMemSizeWords := toWordSize(newMemSize) newMemSize = newMemSizeWords * 32 @@ -57,65 +55,45 @@ func memoryGasCost(mem *Memory, newMemSize uint64) (uint64, error) { return 0, nil } -func constGasFunc(gas uint64) gasFunc { - return func(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gas, nil - } -} - -func gasCallDataCopy(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - - var overflow bool - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - - words, overflow := bigUint64(stack.Back(2)) - if overflow { - return 0, errGasUintOverflow - } +// memoryCopierGas creates the gas functions for the following opcodes, and takes +// the stack position of the operand which determines the size of the data to copy +// as argument: +// CALLDATACOPY (stack position 2) +// CODECOPY (stack position 2) +// EXTCODECOPY (stack poition 3) +// RETURNDATACOPY (stack position 2) +func memoryCopierGas(stackpos int) gasFunc { + return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + // Gas for expanding the memory + gas, err := memoryGasCost(mem, memorySize) + if err != nil { + return 0, err + } + // And gas for copying data, charged per word at param.CopyGas + words, overflow := bigUint64(stack.Back(stackpos)) + if overflow { + return 0, errGasUintOverflow + } - if words, overflow = math.SafeMul(toWordSize(words), params.CopyGas); overflow { - return 0, errGasUintOverflow - } + if words, overflow = math.SafeMul(toWordSize(words), params.CopyGas); overflow { + return 0, errGasUintOverflow + } - if gas, overflow = math.SafeAdd(gas, words); overflow { - return 0, errGasUintOverflow + if gas, overflow = math.SafeAdd(gas, words); overflow { + return 0, errGasUintOverflow + } + return gas, nil } - return gas, nil } -func gasReturnDataCopy(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - - var overflow bool - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - - words, overflow := bigUint64(stack.Back(2)) - if overflow { - return 0, errGasUintOverflow - } - - if words, overflow = math.SafeMul(toWordSize(words), params.CopyGas); overflow { - return 0, errGasUintOverflow - } - - if gas, overflow = math.SafeAdd(gas, words); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} +var ( + gasCallDataCopy = memoryCopierGas(2) + gasCodeCopy = memoryCopierGas(2) + gasExtCodeCopy = memoryCopierGas(3) + gasReturnDataCopy = memoryCopierGas(2) +) -func gasSStore(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { var ( y, x = stack.Back(1), stack.Back(0) current = evm.StateDB.GetState(contract.Address(), common.BigToHash(x)) @@ -184,8 +162,63 @@ func gasSStore(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, m return params.NetSstoreDirtyGas, nil } +// 0. If *gasleft* is less than or equal to 2300, fail the current call. +// 1. If current value equals new value (this is a no-op), SSTORE_NOOP_GAS gas is deducted. +// 2. If current value does not equal new value: +// 2.1. If original value equals current value (this storage slot has not been changed by the current execution context): +// 2.1.1. If original value is 0, SSTORE_INIT_GAS gas is deducted. +// 2.1.2. Otherwise, SSTORE_CLEAN_GAS gas is deducted. If new value is 0, add SSTORE_CLEAR_REFUND to refund counter. +// 2.2. If original value does not equal current value (this storage slot is dirty), SSTORE_DIRTY_GAS gas is deducted. Apply both of the following clauses: +// 2.2.1. If original value is not 0: +// 2.2.1.1. If current value is 0 (also means that new value is not 0), subtract SSTORE_CLEAR_REFUND gas from refund counter. We can prove that refund counter will never go below 0. +// 2.2.1.2. If new value is 0 (also means that current value is not 0), add SSTORE_CLEAR_REFUND gas to refund counter. +// 2.2.2. If original value equals new value (this storage slot is reset): +// 2.2.2.1. If original value is 0, add SSTORE_INIT_REFUND to refund counter. +// 2.2.2.2. Otherwise, add SSTORE_CLEAN_REFUND gas to refund counter. +func gasSStoreEIP2200(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + // If we fail the minimum gas availability invariant, fail (0) + if contract.Gas <= params.SstoreSentryGasEIP2200 { + return 0, errors.New("not enough gas for reentrancy sentry") + } + // Gas sentry honoured, do the actual gas calculation based on the stored value + var ( + y, x = stack.Back(1), stack.Back(0) + current = evm.StateDB.GetState(contract.Address(), common.BigToHash(x)) + ) + value := common.BigToHash(y) + + if current == value { // noop (1) + return params.SstoreNoopGasEIP2200, nil + } + original := evm.StateDB.GetCommittedState(contract.Address(), common.BigToHash(x)) + if original == current { + if original == (common.Hash{}) { // create slot (2.1.1) + return params.SstoreInitGasEIP2200, nil + } + if value == (common.Hash{}) { // delete slot (2.1.2b) + evm.StateDB.AddRefund(params.SstoreClearRefundEIP2200) + } + return params.SstoreCleanGasEIP2200, nil // write existing slot (2.1.2) + } + if original != (common.Hash{}) { + if current == (common.Hash{}) { // recreate slot (2.2.1.1) + evm.StateDB.SubRefund(params.SstoreClearRefundEIP2200) + } else if value == (common.Hash{}) { // delete slot (2.2.1.2) + evm.StateDB.AddRefund(params.SstoreClearRefundEIP2200) + } + } + if original == value { + if original == (common.Hash{}) { // reset to original inexistent slot (2.2.2.1) + evm.StateDB.AddRefund(params.SstoreInitRefundEIP2200) + } else { // reset to original existing slot (2.2.2.2) + evm.StateDB.AddRefund(params.SstoreCleanRefundEIP2200) + } + } + return params.SstoreDirtyGasEIP2200, nil // dirty update (2.2) +} + func makeGasLog(n uint64) gasFunc { - return func(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { requestedSize, overflow := bigUint64(stack.Back(1)) if overflow { return 0, errGasUintOverflow @@ -214,17 +247,11 @@ func makeGasLog(n uint64) gasFunc { } } -func gasSha3(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool +func gasSha3(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - - if gas, overflow = math.SafeAdd(gas, params.Sha3Gas); overflow { - return 0, errGasUintOverflow - } - wordGas, overflow := bigUint64(stack.Back(1)) if overflow { return 0, errGasUintOverflow @@ -238,117 +265,27 @@ func gasSha3(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem return gas, nil } -func gasCodeCopy(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - - var overflow bool - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - - wordGas, overflow := bigUint64(stack.Back(2)) - if overflow { - return 0, errGasUintOverflow - } - if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.CopyGas); overflow { - return 0, errGasUintOverflow - } - if gas, overflow = math.SafeAdd(gas, wordGas); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} - -func gasExtCodeCopy(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - - var overflow bool - if gas, overflow = math.SafeAdd(gas, gt.ExtcodeCopy); overflow { - return 0, errGasUintOverflow - } - - wordGas, overflow := bigUint64(stack.Back(3)) - if overflow { - return 0, errGasUintOverflow - } - - if wordGas, overflow = math.SafeMul(toWordSize(wordGas), params.CopyGas); overflow { - return 0, errGasUintOverflow - } - - if gas, overflow = math.SafeAdd(gas, wordGas); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} - -func gasExtCodeHash(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gt.ExtcodeHash, nil -} - -func gasMLoad(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, errGasUintOverflow - } - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} - -func gasMStore8(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, errGasUintOverflow - } - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} - -func gasMStore(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, errGasUintOverflow - } - if gas, overflow = math.SafeAdd(gas, GasFastestStep); overflow { - return 0, errGasUintOverflow - } - return gas, nil +// pureMemoryGascost is used by several operations, which aside from their +// static cost have a dynamic cost which is solely based on the memory +// expansion +func pureMemoryGascost(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + return memoryGasCost(mem, memorySize) } -func gasCreate(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - if gas, overflow = math.SafeAdd(gas, params.CreateGas); overflow { - return 0, errGasUintOverflow - } - return gas, nil -} +var ( + gasReturn = pureMemoryGascost + gasRevert = pureMemoryGascost + gasMLoad = pureMemoryGascost + gasMStore8 = pureMemoryGascost + gasMStore = pureMemoryGascost + gasCreate = pureMemoryGascost +) -func gasCreate2(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var overflow bool +func gasCreate2(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - if gas, overflow = math.SafeAdd(gas, params.Create2Gas); overflow { - return 0, errGasUintOverflow - } wordGas, overflow := bigUint64(stack.Back(2)) if overflow { return 0, errGasUintOverflow @@ -359,43 +296,42 @@ func gasCreate2(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, if gas, overflow = math.SafeAdd(gas, wordGas); overflow { return 0, errGasUintOverflow } - return gas, nil } -func gasBalance(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gt.Balance, nil -} - -func gasExtCodeSize(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gt.ExtcodeSize, nil -} +func gasExpFrontier(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + expByteLen := uint64((stack.data[stack.len()-2].BitLen() + 7) / 8) -func gasSLoad(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return gt.SLoad, nil + var ( + gas = expByteLen * params.ExpByteFrontier // no overflow check required. Max is 256 * ExpByte gas + overflow bool + ) + if gas, overflow = math.SafeAdd(gas, params.ExpGas); overflow { + return 0, errGasUintOverflow + } + return gas, nil } -func gasExp(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasExpEIP158(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { expByteLen := uint64((stack.data[stack.len()-2].BitLen() + 7) / 8) var ( - gas = expByteLen * gt.ExpByte // no overflow check required. Max is 256 * ExpByte gas + gas = expByteLen * params.ExpByteEIP158 // no overflow check required. Max is 256 * ExpByte gas overflow bool ) - if gas, overflow = math.SafeAdd(gas, GasSlowStep); overflow { + if gas, overflow = math.SafeAdd(gas, params.ExpGas); overflow { return 0, errGasUintOverflow } return gas, nil } -func gasCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { var ( - gas = gt.Calls + gas uint64 transfersValue = stack.Back(2).Sign() != 0 address = common.BigToAddress(stack.Back(1)) - eip158 = evm.ChainConfig().IsEIP158(evm.BlockNumber) ) - if eip158 { + if evm.chainRules.IsEIP158 { if transfersValue && evm.StateDB.Empty(address) { gas += params.CallNewAccountGas } @@ -414,7 +350,7 @@ func gasCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem return 0, errGasUintOverflow } - evm.callGasTemp, err = callGas(gt, contract.Gas, gas, stack.Back(0)) + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) if err != nil { return 0, err } @@ -424,21 +360,22 @@ func gasCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem return gas, nil } -func gasCallCode(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas := gt.Calls - if stack.Back(2).Sign() != 0 { - gas += params.CallValueTransferGas - } +func gasCallCode(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { memoryGas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - var overflow bool + var ( + gas uint64 + overflow bool + ) + if stack.Back(2).Sign() != 0 { + gas += params.CallValueTransferGas + } if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { return 0, errGasUintOverflow } - - evm.callGasTemp, err = callGas(gt, contract.Gas, gas, stack.Back(0)) + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) if err != nil { return 0, err } @@ -448,88 +385,57 @@ func gasCallCode(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, return gas, nil } -func gasReturn(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return memoryGasCost(mem, memorySize) -} - -func gasRevert(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return memoryGasCost(mem, memorySize) -} - -func gasSuicide(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - var gas uint64 - // EIP150 homestead gas reprice fork: - if evm.ChainConfig().IsEIP150(evm.BlockNumber) { - gas = gt.Suicide - var ( - address = common.BigToAddress(stack.Back(0)) - eip158 = evm.ChainConfig().IsEIP158(evm.BlockNumber) - ) - - if eip158 { - // if empty and transfers value - if evm.StateDB.Empty(address) && evm.StateDB.GetBalance(contract.Address()).Sign() != 0 { - gas += gt.CreateBySuicide - } - } else if !evm.StateDB.Exist(address) { - gas += gt.CreateBySuicide - } - } - - if !evm.StateDB.HasSuicided(contract.Address()) { - evm.StateDB.AddRefund(params.SuicideRefundGas) - } - return gas, nil -} - -func gasDelegateCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasDelegateCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - var overflow bool - if gas, overflow = math.SafeAdd(gas, gt.Calls); overflow { - return 0, errGasUintOverflow - } - - evm.callGasTemp, err = callGas(gt, contract.Gas, gas, stack.Back(0)) + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) if err != nil { return 0, err } + var overflow bool if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { return 0, errGasUintOverflow } return gas, nil } -func gasStaticCall(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasStaticCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { gas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } - var overflow bool - if gas, overflow = math.SafeAdd(gas, gt.Calls); overflow { - return 0, errGasUintOverflow - } - - evm.callGasTemp, err = callGas(gt, contract.Gas, gas, stack.Back(0)) + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) if err != nil { return 0, err } + var overflow bool if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { return 0, errGasUintOverflow } return gas, nil } -func gasPush(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil -} +func gasSelfdestruct(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + var gas uint64 + // EIP150 homestead gas reprice fork: + if evm.chainRules.IsEIP150 { + gas = params.SelfdestructGasEIP150 + var address = common.BigToAddress(stack.Back(0)) -func gasSwap(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil -} + if evm.chainRules.IsEIP158 { + // if empty and transfers value + if evm.StateDB.Empty(address) && evm.StateDB.GetBalance(contract.Address()).Sign() != 0 { + gas += params.CreateBySelfdestructGas + } + } else if !evm.StateDB.Exist(address) { + gas += params.CreateBySelfdestructGas + } + } -func gasDup(gt params.GasTable, evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - return GasFastestStep, nil + if !evm.StateDB.HasSuicided(contract.Address()) { + evm.StateDB.AddRefund(params.SelfdestructRefundGas) + } + return gas, nil } diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 1b91aee56c66..5d443de0eae6 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -16,21 +16,92 @@ package vm -import "testing" +import ( + "math" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/params" +) func TestMemoryGasCost(t *testing.T) { - //size := uint64(math.MaxUint64 - 64) - size := uint64(0xffffffffe0) - v, err := memoryGasCost(&Memory{}, size) - if err != nil { - t.Error("didn't expect error:", err) + tests := []struct { + size uint64 + cost uint64 + overflow bool + }{ + {0x1fffffffe0, 36028809887088637, false}, + {0x1fffffffe1, 0, true}, } - if v != 36028899963961341 { - t.Errorf("Expected: 36028899963961341, got %d", v) + for i, tt := range tests { + v, err := memoryGasCost(&Memory{}, tt.size) + if (err == errGasUintOverflow) != tt.overflow { + t.Errorf("test %d: overflow mismatch: have %v, want %v", i, err == errGasUintOverflow, tt.overflow) + } + if v != tt.cost { + t.Errorf("test %d: gas cost mismatch: have %v, want %v", i, v, tt.cost) + } } +} + +var eip2200Tests = []struct { + original byte + gaspool uint64 + input string + used uint64 + refund uint64 + failure error +}{ + {0, math.MaxUint64, "0x60006000556000600055", 1612, 0, nil}, // 0 -> 0 -> 0 + {0, math.MaxUint64, "0x60006000556001600055", 20812, 0, nil}, // 0 -> 0 -> 1 + {0, math.MaxUint64, "0x60016000556000600055", 20812, 19200, nil}, // 0 -> 1 -> 0 + {0, math.MaxUint64, "0x60016000556002600055", 20812, 0, nil}, // 0 -> 1 -> 2 + {0, math.MaxUint64, "0x60016000556001600055", 20812, 0, nil}, // 0 -> 1 -> 1 + {1, math.MaxUint64, "0x60006000556000600055", 5812, 15000, nil}, // 1 -> 0 -> 0 + {1, math.MaxUint64, "0x60006000556001600055", 5812, 4200, nil}, // 1 -> 0 -> 1 + {1, math.MaxUint64, "0x60006000556002600055", 5812, 0, nil}, // 1 -> 0 -> 2 + {1, math.MaxUint64, "0x60026000556000600055", 5812, 15000, nil}, // 1 -> 2 -> 0 + {1, math.MaxUint64, "0x60026000556003600055", 5812, 0, nil}, // 1 -> 2 -> 3 + {1, math.MaxUint64, "0x60026000556001600055", 5812, 4200, nil}, // 1 -> 2 -> 1 + {1, math.MaxUint64, "0x60026000556002600055", 5812, 0, nil}, // 1 -> 2 -> 2 + {1, math.MaxUint64, "0x60016000556000600055", 5812, 15000, nil}, // 1 -> 1 -> 0 + {1, math.MaxUint64, "0x60016000556002600055", 5812, 0, nil}, // 1 -> 1 -> 2 + {1, math.MaxUint64, "0x60016000556001600055", 1612, 0, nil}, // 1 -> 1 -> 1 + {0, math.MaxUint64, "0x600160005560006000556001600055", 40818, 19200, nil}, // 0 -> 1 -> 0 -> 1 + {1, math.MaxUint64, "0x600060005560016000556000600055", 10818, 19200, nil}, // 1 -> 0 -> 1 -> 0 + {1, 2306, "0x6001600055", 2306, 0, ErrOutOfGas}, // 1 -> 1 (2300 sentry + 2xPUSH) + {1, 2307, "0x6001600055", 806, 0, nil}, // 1 -> 1 (2301 sentry + 2xPUSH) +} + +func TestEIP2200(t *testing.T) { + for i, tt := range eip2200Tests { + address := common.BytesToAddress([]byte("contract")) + + statedb, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) + statedb.CreateAccount(address) + statedb.SetCode(address, hexutil.MustDecode(tt.input)) + statedb.SetState(address, common.Hash{}, common.BytesToHash([]byte{tt.original})) + statedb.Finalise(true) // Push the state into the "original" slot + + vmctx := Context{ + CanTransfer: func(StateDB, common.Address, *big.Int) bool { return true }, + Transfer: func(StateDB, common.Address, common.Address, *big.Int) {}, + } + vmenv := NewEVM(vmctx, statedb, params.AllEthashProtocolChanges, Config{ExtraEips: []int{2200}}) - _, err = memoryGasCost(&Memory{}, size+1) - if err == nil { - t.Error("expected error") + _, gas, err := vmenv.Call(AccountRef(common.Address{}), address, nil, tt.gaspool, new(big.Int)) + if err != tt.failure { + t.Errorf("test %d: failure mismatch: have %v, want %v", i, err, tt.failure) + } + if used := tt.gaspool - gas; used != tt.used { + t.Errorf("test %d: gas used mismatch: have %v, want %v", i, used, tt.used) + } + if refund := vmenv.StateDB.GetRefund(); refund != tt.refund { + t.Errorf("test %d: gas refund mismatch: have %v, want %v", i, refund, tt.refund) + } } } diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 5195e716b295..7b6909c9279a 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -18,7 +18,6 @@ package vm import ( "errors" - "fmt" "math/big" "github.com/ethereum/go-ethereum/common" @@ -35,6 +34,7 @@ var ( errReturnDataOutOfBounds = errors.New("evm: return data out of bounds") errExecutionReverted = errors.New("evm: execution reverted") errMaxCodeSizeExceeded = errors.New("evm: max code size exceeded") + errInvalidJump = errors.New("evm: invalid jump destination") ) func opAdd(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { @@ -405,7 +405,7 @@ func opSha3(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory } func opAddress(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(contract.Address().Big()) + stack.push(interpreter.intPool.get().SetBytes(contract.Address().Bytes())) return nil, nil } @@ -416,12 +416,12 @@ func opBalance(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memo } func opOrigin(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.evm.Origin.Big()) + stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Origin.Bytes())) return nil, nil } func opCaller(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(contract.Caller().Big()) + stack.push(interpreter.intPool.get().SetBytes(contract.Caller().Bytes())) return nil, nil } @@ -467,7 +467,7 @@ func opReturnDataCopy(pc *uint64, interpreter *EVMInterpreter, contract *Contrac ) defer interpreter.intPool.put(memOffset, dataOffset, length, end) - if end.BitLen() > 64 || uint64(len(interpreter.returnData)) < end.Uint64() { + if !end.IsUint64() || uint64(len(interpreter.returnData)) < end.Uint64() { return nil, errReturnDataOutOfBounds } memory.Set(memOffset.Uint64(), length.Uint64(), interpreter.returnData[dataOffset.Uint64():end.Uint64()]) @@ -572,7 +572,7 @@ func opBlockhash(pc *uint64, interpreter *EVMInterpreter, contract *Contract, me } func opCoinbase(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - stack.push(interpreter.evm.Coinbase.Big()) + stack.push(interpreter.intPool.get().SetBytes(interpreter.evm.Coinbase.Bytes())) return nil, nil } @@ -645,8 +645,7 @@ func opSstore(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor func opJump(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { pos := stack.pop() if !contract.validJumpdest(pos) { - nop := contract.GetOp(pos.Uint64()) - return nil, fmt.Errorf("invalid jump destination (%v) %v", nop, pos) + return nil, errInvalidJump } *pc = pos.Uint64() @@ -658,8 +657,7 @@ func opJumpi(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory pos, cond := stack.pop(), stack.pop() if cond.Sign() != 0 { if !contract.validJumpdest(pos) { - nop := contract.GetOp(pos.Uint64()) - return nil, fmt.Errorf("invalid jump destination (%v) %v", nop, pos) + return nil, errInvalidJump } *pc = pos.Uint64() } else { @@ -696,7 +694,7 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor input = memory.Get(offset.Int64(), size.Int64()) gas = contract.Gas ) - if interpreter.evm.ChainConfig().IsEIP150(interpreter.evm.BlockNumber) { + if interpreter.evm.chainRules.IsEIP150 { gas -= gas / 64 } @@ -706,12 +704,12 @@ func opCreate(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memor // homestead we must check for CodeStoreOutOfGasError (homestead only // rule) and treat as an error, if the ruleset is frontier we must // ignore this error and pretend the operation was successful. - if interpreter.evm.ChainConfig().IsHomestead(interpreter.evm.BlockNumber) && suberr == ErrCodeStoreOutOfGas { + if interpreter.evm.chainRules.IsHomestead && suberr == ErrCodeStoreOutOfGas { stack.push(interpreter.intPool.getZero()) } else if suberr != nil && suberr != ErrCodeStoreOutOfGas { stack.push(interpreter.intPool.getZero()) } else { - stack.push(addr.Big()) + stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) } contract.Gas += returnGas interpreter.intPool.put(value, offset, size) @@ -739,7 +737,7 @@ func opCreate2(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memo if suberr != nil { stack.push(interpreter.intPool.getZero()) } else { - stack.push(addr.Big()) + stack.push(interpreter.intPool.get().SetBytes(addr.Bytes())) } contract.Gas += returnGas interpreter.intPool.put(endowment, offset, size, salt) @@ -912,6 +910,21 @@ func makeLog(size int) executionFunc { } } +// opPush1 is a specialized version of pushN +func opPush1(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { + var ( + codeLen = uint64(len(contract.Code)) + integer = interpreter.intPool.get() + ) + *pc += 1 + if *pc < codeLen { + stack.push(integer.SetUint64(uint64(contract.Code[*pc]))) + } else { + stack.push(integer.SetUint64(0)) + } + return nil, nil +} + // make push instruction function func makePush(size uint64, pushByteSize int) executionFunc { return func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 8a48d765dd68..50d0a9ddae30 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -18,6 +18,9 @@ package vm import ( "bytes" + "encoding/json" + "fmt" + "io/ioutil" "math/big" "testing" @@ -26,32 +29,91 @@ import ( "github.com/ethereum/go-ethereum/params" ) -type twoOperandTest struct { - x string - y string - expected string +type TwoOperandTestcase struct { + X string + Y string + Expected string } -func testTwoOperandOp(t *testing.T, tests []twoOperandTest, opFn func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error)) { +type twoOperandParams struct { + x string + y string +} + +var commonParams []*twoOperandParams +var twoOpMethods map[string]executionFunc + +func init() { + + // Params is a list of common edgecases that should be used for some common tests + params := []string{ + "0000000000000000000000000000000000000000000000000000000000000000", // 0 + "0000000000000000000000000000000000000000000000000000000000000001", // +1 + "0000000000000000000000000000000000000000000000000000000000000005", // +5 + "7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", // + max -1 + "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // + max + "8000000000000000000000000000000000000000000000000000000000000000", // - max + "8000000000000000000000000000000000000000000000000000000000000001", // - max+1 + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", // - 5 + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", // - 1 + } + // Params are combined so each param is used on each 'side' + commonParams = make([]*twoOperandParams, len(params)*len(params)) + for i, x := range params { + for j, y := range params { + commonParams[i*len(params)+j] = &twoOperandParams{x, y} + } + } + twoOpMethods = map[string]executionFunc{ + "add": opAdd, + "sub": opSub, + "mul": opMul, + "div": opDiv, + "sdiv": opSdiv, + "mod": opMod, + "smod": opSmod, + "exp": opExp, + "signext": opSignExtend, + "lt": opLt, + "gt": opGt, + "slt": opSlt, + "sgt": opSgt, + "eq": opEq, + "and": opAnd, + "or": opOr, + "xor": opXor, + "byte": opByte, + "shl": opSHL, + "shr": opSHR, + "sar": opSAR, + } +} + +func testTwoOperandOp(t *testing.T, tests []TwoOperandTestcase, opFn executionFunc, name string) { + var ( env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) stack = newstack() pc = uint64(0) - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) + evmInterpreter = env.interpreter.(*EVMInterpreter) ) - - env.interpreter = evmInterpreter + // Stuff a couple of nonzero bigints into pool, to ensure that ops do not rely on pooled integers to be zero evmInterpreter.intPool = poolOfIntPools.get() + evmInterpreter.intPool.put(big.NewInt(-1337)) + evmInterpreter.intPool.put(big.NewInt(-1337)) + evmInterpreter.intPool.put(big.NewInt(-1337)) + for i, test := range tests { - x := new(big.Int).SetBytes(common.Hex2Bytes(test.x)) - shift := new(big.Int).SetBytes(common.Hex2Bytes(test.y)) - expected := new(big.Int).SetBytes(common.Hex2Bytes(test.expected)) + x := new(big.Int).SetBytes(common.Hex2Bytes(test.X)) + y := new(big.Int).SetBytes(common.Hex2Bytes(test.Y)) + expected := new(big.Int).SetBytes(common.Hex2Bytes(test.Expected)) stack.push(x) - stack.push(shift) + stack.push(y) opFn(&pc, evmInterpreter, nil, nil, stack) actual := stack.pop() + if actual.Cmp(expected) != 0 { - t.Errorf("Testcase %d, expected %v, got %v", i, expected, actual) + t.Errorf("Testcase %v %d, %v(%x, %x): expected %x, got %x", name, i, name, x, y, expected, actual) } // Check pool usage // 1.pool is not allowed to contain anything on the stack @@ -64,7 +126,7 @@ func testTwoOperandOp(t *testing.T, tests []twoOperandTest, opFn func(pc *uint64 for evmInterpreter.intPool.pool.len() > 0 { key := evmInterpreter.intPool.get() if _, exist := poolvals[key]; exist { - t.Errorf("Testcase %d, pool contains double-entry", i) + t.Errorf("Testcase %v %d, pool contains double-entry", name, i) } poolvals[key] = struct{}{} } @@ -74,47 +136,22 @@ func testTwoOperandOp(t *testing.T, tests []twoOperandTest, opFn func(pc *uint64 } func TestByteOp(t *testing.T) { - var ( - env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) - stack = newstack() - evmInterpreter = NewEVMInterpreter(env, env.vmConfig) - ) - - env.interpreter = evmInterpreter - evmInterpreter.intPool = poolOfIntPools.get() - tests := []struct { - v string - th uint64 - expected *big.Int - }{ - {"ABCDEF0908070605040302010000000000000000000000000000000000000000", 0, big.NewInt(0xAB)}, - {"ABCDEF0908070605040302010000000000000000000000000000000000000000", 1, big.NewInt(0xCD)}, - {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 0, big.NewInt(0x00)}, - {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", 1, big.NewInt(0xCD)}, - {"0000000000000000000000000000000000000000000000000000000000102030", 31, big.NewInt(0x30)}, - {"0000000000000000000000000000000000000000000000000000000000102030", 30, big.NewInt(0x20)}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 32, big.NewInt(0x0)}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0xFFFFFFFFFFFFFFFF, big.NewInt(0x0)}, - } - pc := uint64(0) - for _, test := range tests { - val := new(big.Int).SetBytes(common.Hex2Bytes(test.v)) - th := new(big.Int).SetUint64(test.th) - stack.push(val) - stack.push(th) - opByte(&pc, evmInterpreter, nil, nil, stack) - actual := stack.pop() - if actual.Cmp(test.expected) != 0 { - t.Fatalf("Expected [%v] %v:th byte to be %v, was %v.", test.v, test.th, test.expected, actual) - } + tests := []TwoOperandTestcase{ + {"ABCDEF0908070605040302010000000000000000000000000000000000000000", "00", "AB"}, + {"ABCDEF0908070605040302010000000000000000000000000000000000000000", "01", "CD"}, + {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", "00", "00"}, + {"00CDEF090807060504030201ffffffffffffffffffffffffffffffffffffffff", "01", "CD"}, + {"0000000000000000000000000000000000000000000000000000000000102030", "1F", "30"}, + {"0000000000000000000000000000000000000000000000000000000000102030", "1E", "20"}, + {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "20", "00"}, + {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "FFFFFFFFFFFFFFFF", "00"}, } - poolOfIntPools.put(evmInterpreter.intPool) + testTwoOperandOp(t, tests, opByte, "byte") } func TestSHL(t *testing.T) { // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shl-shift-left - tests := []twoOperandTest{ - {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, + tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000002"}, {"0000000000000000000000000000000000000000000000000000000000000001", "ff", "8000000000000000000000000000000000000000000000000000000000000000"}, {"0000000000000000000000000000000000000000000000000000000000000001", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, @@ -126,12 +163,12 @@ func TestSHL(t *testing.T) { {"0000000000000000000000000000000000000000000000000000000000000000", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "01", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"}, } - testTwoOperandOp(t, tests, opSHL) + testTwoOperandOp(t, tests, opSHL, "shl") } func TestSHR(t *testing.T) { // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#shr-logical-shift-right - tests := []twoOperandTest{ + tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, {"8000000000000000000000000000000000000000000000000000000000000000", "01", "4000000000000000000000000000000000000000000000000000000000000000"}, @@ -144,12 +181,12 @@ func TestSHR(t *testing.T) { {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, {"0000000000000000000000000000000000000000000000000000000000000000", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, } - testTwoOperandOp(t, tests, opSHR) + testTwoOperandOp(t, tests, opSHR, "shr") } func TestSAR(t *testing.T) { // Testcases from https://github.com/ethereum/EIPs/blob/master/EIPS/eip-145.md#sar-arithmetic-shift-right - tests := []twoOperandTest{ + tests := []TwoOperandTestcase{ {"0000000000000000000000000000000000000000000000000000000000000001", "00", "0000000000000000000000000000000000000000000000000000000000000001"}, {"0000000000000000000000000000000000000000000000000000000000000001", "01", "0000000000000000000000000000000000000000000000000000000000000000"}, {"8000000000000000000000000000000000000000000000000000000000000000", "01", "c000000000000000000000000000000000000000000000000000000000000000"}, @@ -168,44 +205,58 @@ func TestSAR(t *testing.T) { {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0100", "0000000000000000000000000000000000000000000000000000000000000000"}, } - testTwoOperandOp(t, tests, opSAR) + testTwoOperandOp(t, tests, opSAR, "sar") } -func TestSGT(t *testing.T) { - tests := []twoOperandTest{ +// getResult is a convenience function to generate the expected values +func getResult(args []*twoOperandParams, opFn executionFunc) []TwoOperandTestcase { + var ( + env = NewEVM(Context{}, nil, params.TestChainConfig, Config{}) + stack = newstack() + pc = uint64(0) + interpreter = env.interpreter.(*EVMInterpreter) + ) + interpreter.intPool = poolOfIntPools.get() + result := make([]TwoOperandTestcase, len(args)) + for i, param := range args { + x := new(big.Int).SetBytes(common.Hex2Bytes(param.x)) + y := new(big.Int).SetBytes(common.Hex2Bytes(param.y)) + stack.push(x) + stack.push(y) + opFn(&pc, interpreter, nil, nil, stack) + actual := stack.pop() + result[i] = TwoOperandTestcase{param.x, param.y, fmt.Sprintf("%064x", actual)} + } + return result +} - {"0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"8000000000000000000000000000000000000000000000000000000000000001", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"8000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "0000000000000000000000000000000000000000000000000000000000000000"}, +// utility function to fill the json-file with testcases +// Enable this test to generate the 'testcases_xx.json' files +func xTestWriteExpectedValues(t *testing.T) { + for name, method := range twoOpMethods { + data, err := json.Marshal(getResult(commonParams, method)) + if err != nil { + t.Fatal(err) + } + _ = ioutil.WriteFile(fmt.Sprintf("testdata/testcases_%v.json", name), data, 0644) + if err != nil { + t.Fatal(err) + } } - testTwoOperandOp(t, tests, opSgt) -} - -func TestSLT(t *testing.T) { - tests := []twoOperandTest{ - {"0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"0000000000000000000000000000000000000000000000000000000000000001", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"8000000000000000000000000000000000000000000000000000000000000001", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"8000000000000000000000000000000000000000000000000000000000000001", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "8000000000000000000000000000000000000000000000000000000000000001", "0000000000000000000000000000000000000000000000000000000000000001"}, - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "0000000000000000000000000000000000000000000000000000000000000000"}, - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb", "0000000000000000000000000000000000000000000000000000000000000001"}, + t.Fatal("This test should not be activated") +} + +// TestJsonTestcases runs through all the testcases defined as json-files +func TestJsonTestcases(t *testing.T) { + for name := range twoOpMethods { + data, err := ioutil.ReadFile(fmt.Sprintf("testdata/testcases_%v.json", name)) + if err != nil { + t.Fatal("Failed to read file", err) + } + var testcases []TwoOperandTestcase + json.Unmarshal(data, &testcases) + testTwoOperandOp(t, testcases, twoOpMethods[name], name) } - testTwoOperandOp(t, tests, opSlt) } func opBenchmark(bench *testing.B, op func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error), args ...string) { diff --git a/core/vm/interface.go b/core/vm/interface.go index fc15082f18ed..dd401466adfa 100644 --- a/core/vm/interface.go +++ b/core/vm/interface.go @@ -63,7 +63,7 @@ type StateDB interface { AddLog(*types.Log) AddPreimage(common.Hash, []byte) - ForEachStorage(common.Address, func(common.Hash, common.Hash) bool) + ForEachStorage(common.Address, func(common.Hash, common.Hash) bool) error } // CallContext provides a basic interface for the EVM calling conventions. The EVM diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 952d96dd4d18..fe06492de3f2 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -23,29 +23,22 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" - "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/log" ) // Config are the configuration options for the Interpreter type Config struct { - // Debug enabled debugging Interpreter options - Debug bool - // Tracer is the op code logger - Tracer Tracer - // NoRecursion disabled Interpreter call, callcode, - // delegate call and create. - NoRecursion bool - // Enable recording of SHA3/keccak preimages - EnablePreimageRecording bool - // JumpTable contains the EVM instruction table. This - // may be left uninitialised and will be set to the default - // table. - JumpTable [256]operation + Debug bool // Enables debugging + Tracer Tracer // Opcode logger + NoRecursion bool // Disables call, callcode, delegate call and create + EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages - // Type of the EWASM interpreter - EWASMInterpreter string - // Type of the EVM interpreter - EVMInterpreter string + JumpTable [256]operation // EVM instruction table, automatically populated if unset + + EWASMInterpreter string // External EWASM interpreter options + EVMInterpreter string // External EVM interpreter options + + ExtraEips []int // Additional EIPS that are to be enabled } // Interpreter is used to run Ethereum based contracts and will utilise the @@ -80,9 +73,8 @@ type keccakState interface { // EVMInterpreter represents an EVM interpreter type EVMInterpreter struct { - evm *EVM - cfg Config - gasTable params.GasTable + evm *EVM + cfg Config intPool *intPool @@ -99,39 +91,37 @@ func NewEVMInterpreter(evm *EVM, cfg Config) *EVMInterpreter { // the jump table was initialised. If it was not // we'll set the default jump table. if !cfg.JumpTable[STOP].valid { + var jt JumpTable switch { - case evm.ChainConfig().IsConstantinople(evm.BlockNumber): - cfg.JumpTable = constantinopleInstructionSet - case evm.ChainConfig().IsByzantium(evm.BlockNumber): - cfg.JumpTable = byzantiumInstructionSet - case evm.ChainConfig().IsHomestead(evm.BlockNumber): - cfg.JumpTable = homesteadInstructionSet + case evm.chainRules.IsIstanbul: + jt = istanbulInstructionSet + case evm.chainRules.IsConstantinople: + jt = constantinopleInstructionSet + case evm.chainRules.IsByzantium: + jt = byzantiumInstructionSet + case evm.chainRules.IsEIP158: + jt = spuriousDragonInstructionSet + case evm.chainRules.IsEIP150: + jt = tangerineWhistleInstructionSet + case evm.chainRules.IsHomestead: + jt = homesteadInstructionSet default: - cfg.JumpTable = frontierInstructionSet + jt = frontierInstructionSet + } + for i, eip := range cfg.ExtraEips { + if err := EnableEIP(eip, &jt); err != nil { + // Disable it, so caller can check if it's activated or not + cfg.ExtraEips = append(cfg.ExtraEips[:i], cfg.ExtraEips[i+1:]...) + log.Error("EIP activation failed", "eip", eip, "error", err) + } } + cfg.JumpTable = jt } return &EVMInterpreter{ - evm: evm, - cfg: cfg, - gasTable: evm.ChainConfig().GasTable(evm.BlockNumber), - } -} - -func (in *EVMInterpreter) enforceRestrictions(op OpCode, operation operation, stack *Stack) error { - if in.evm.chainRules.IsByzantium { - if in.readOnly { - // If the interpreter is operating in readonly mode, make sure no - // state-modifying operation is performed. The 3rd stack item - // for a call operation is the value. Transferring value from one - // account to the others means the state is modified and should also - // return with an error. - if operation.writes || (op == CALL && stack.Back(2).BitLen() > 0) { - return errWriteProtection - } - } + evm: evm, + cfg: cfg, } - return nil } // Run loops and evaluates the contract's code with the given input data and returns @@ -182,6 +172,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( pcCopy uint64 // needed for the deferred Tracer gasCopy uint64 // for Tracer to log gas remaining before execution logged bool // deferred Tracer should ignore already logged steps + res []byte // result of the opcode execution function ) contract.Input = input @@ -216,19 +207,36 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( if !operation.valid { return nil, fmt.Errorf("invalid opcode 0x%x", int(op)) } - if err := operation.validateStack(stack); err != nil { - return nil, err + // Validate stack + if sLen := stack.len(); sLen < operation.minStack { + return nil, fmt.Errorf("stack underflow (%d <=> %d)", sLen, operation.minStack) + } else if sLen > operation.maxStack { + return nil, fmt.Errorf("stack limit reached %d (%d)", sLen, operation.maxStack) } // If the operation is valid, enforce and write restrictions - if err := in.enforceRestrictions(op, operation, stack); err != nil { - return nil, err + if in.readOnly && in.evm.chainRules.IsByzantium { + // If the interpreter is operating in readonly mode, make sure no + // state-modifying operation is performed. The 3rd stack item + // for a call operation is the value. Transferring value from one + // account to the others means the state is modified and should also + // return with an error. + if operation.writes || (op == CALL && stack.Back(2).Sign() != 0) { + return nil, errWriteProtection + } + } + // Static portion of gas + cost = operation.constantGas // For tracing + if !contract.UseGas(operation.constantGas) { + return nil, ErrOutOfGas } var memorySize uint64 // calculate the new memory size and expand the memory to fit // the operation + // Memory check needs to be done prior to evaluating the dynamic gas portion, + // to detect calculation overflows if operation.memorySize != nil { - memSize, overflow := bigUint64(operation.memorySize(stack)) + memSize, overflow := operation.memorySize(stack) if overflow { return nil, errGasUintOverflow } @@ -238,11 +246,16 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( return nil, errGasUintOverflow } } + // Dynamic portion of gas // consume the gas and return an error if not enough gas is available. // cost is explicitly set so that the capture state defer method can get the proper cost - cost, err = operation.gasCost(in.gasTable, in.evm, contract, stack, mem, memorySize) - if err != nil || !contract.UseGas(cost) { - return nil, ErrOutOfGas + if operation.dynamicGas != nil { + var dynamicCost uint64 + dynamicCost, err = operation.dynamicGas(in.evm, contract, stack, mem, memorySize) + cost += dynamicCost // total cost, for debug tracing + if err != nil || !contract.UseGas(dynamicCost) { + return nil, ErrOutOfGas + } } if memorySize > 0 { mem.Resize(memorySize) @@ -254,7 +267,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( } // execute the operation - res, err := operation.execute(&pc, in, contract, mem, stack) + res, err = operation.execute(&pc, in, contract, mem, stack) // verifyPool is a build flag. Pool verification makes sure the integrity // of the integer pool by comparing values to a default value. if verifyPool { diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index deedf70cdb7d..b26b55284c58 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -18,27 +18,30 @@ package vm import ( "errors" - "math/big" "github.com/ethereum/go-ethereum/params" ) type ( - executionFunc func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) - gasFunc func(params.GasTable, *EVM, *Contract, *Stack, *Memory, uint64) (uint64, error) // last parameter is the requested memory size as a uint64 - stackValidationFunc func(*Stack) error - memorySizeFunc func(*Stack) *big.Int + executionFunc func(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) + gasFunc func(*EVM, *Contract, *Stack, *Memory, uint64) (uint64, error) // last parameter is the requested memory size as a uint64 + // memorySizeFunc returns the required size, and whether the operation overflowed a uint64 + memorySizeFunc func(*Stack) (size uint64, overflow bool) ) var errGasUintOverflow = errors.New("gas uint64 overflow") type operation struct { // execute is the operation function - execute executionFunc - // gasCost is the gas function and returns the gas required for execution - gasCost gasFunc - // validateStack validates the stack (size) for the operation - validateStack stackValidationFunc + execute executionFunc + constantGas uint64 + dynamicGas gasFunc + // minStack tells how many stack items are required + minStack int + // maxStack specifies the max length the stack can have for this operation + // to not overflow the stack. + maxStack int + // memorySize returns the memory size required for the operation memorySize memorySizeFunc @@ -51,916 +54,1106 @@ type operation struct { } var ( - frontierInstructionSet = newFrontierInstructionSet() - homesteadInstructionSet = newHomesteadInstructionSet() - byzantiumInstructionSet = newByzantiumInstructionSet() - constantinopleInstructionSet = newConstantinopleInstructionSet() + frontierInstructionSet = newFrontierInstructionSet() + homesteadInstructionSet = newHomesteadInstructionSet() + tangerineWhistleInstructionSet = newTangerineWhistleInstructionSet() + spuriousDragonInstructionSet = newSpuriousDragonInstructionSet() + byzantiumInstructionSet = newByzantiumInstructionSet() + constantinopleInstructionSet = newConstantinopleInstructionSet() + istanbulInstructionSet = newIstanbulInstructionSet() ) -// NewConstantinopleInstructionSet returns the frontier, homestead +// JumpTable contains the EVM opcodes supported at a given fork. +type JumpTable [256]operation + +// newIstanbulInstructionSet returns the frontier, homestead +// byzantium, contantinople and petersburg instructions. +func newIstanbulInstructionSet() JumpTable { + instructionSet := newConstantinopleInstructionSet() + + enable1344(&instructionSet) // ChainID opcode - https://eips.ethereum.org/EIPS/eip-1344 + enable1884(&instructionSet) // Reprice reader opcodes - https://eips.ethereum.org/EIPS/eip-1884 + enable2200(&instructionSet) // Net metered SSTORE - https://eips.ethereum.org/EIPS/eip-2200 + + return instructionSet +} + +// newConstantinopleInstructionSet returns the frontier, homestead // byzantium and contantinople instructions. -func newConstantinopleInstructionSet() [256]operation { - // instructions that can be executed during the byzantium phase. +func newConstantinopleInstructionSet() JumpTable { instructionSet := newByzantiumInstructionSet() instructionSet[SHL] = operation{ - execute: opSHL, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSHL, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[SHR] = operation{ - execute: opSHR, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSHR, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[SAR] = operation{ - execute: opSAR, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSAR, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, } instructionSet[EXTCODEHASH] = operation{ - execute: opExtCodeHash, - gasCost: gasExtCodeHash, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opExtCodeHash, + constantGas: params.ExtcodeHashGasConstantinople, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, } instructionSet[CREATE2] = operation{ - execute: opCreate2, - gasCost: gasCreate2, - validateStack: makeStackFunc(4, 1), - memorySize: memoryCreate2, - valid: true, - writes: true, - returns: true, + execute: opCreate2, + constantGas: params.Create2Gas, + dynamicGas: gasCreate2, + minStack: minStack(4, 1), + maxStack: maxStack(4, 1), + memorySize: memoryCreate2, + valid: true, + writes: true, + returns: true, } return instructionSet } -// NewByzantiumInstructionSet returns the frontier, homestead and +// newByzantiumInstructionSet returns the frontier, homestead and // byzantium instructions. -func newByzantiumInstructionSet() [256]operation { - // instructions that can be executed during the homestead phase. - instructionSet := newHomesteadInstructionSet() +func newByzantiumInstructionSet() JumpTable { + instructionSet := newSpuriousDragonInstructionSet() instructionSet[STATICCALL] = operation{ - execute: opStaticCall, - gasCost: gasStaticCall, - validateStack: makeStackFunc(6, 1), - memorySize: memoryStaticCall, - valid: true, - returns: true, + execute: opStaticCall, + constantGas: params.CallGasEIP150, + dynamicGas: gasStaticCall, + minStack: minStack(6, 1), + maxStack: maxStack(6, 1), + memorySize: memoryStaticCall, + valid: true, + returns: true, } instructionSet[RETURNDATASIZE] = operation{ - execute: opReturnDataSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opReturnDataSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, } instructionSet[RETURNDATACOPY] = operation{ - execute: opReturnDataCopy, - gasCost: gasReturnDataCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryReturnDataCopy, - valid: true, + execute: opReturnDataCopy, + constantGas: GasFastestStep, + dynamicGas: gasReturnDataCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryReturnDataCopy, + valid: true, } instructionSet[REVERT] = operation{ - execute: opRevert, - gasCost: gasRevert, - validateStack: makeStackFunc(2, 0), - memorySize: memoryRevert, - valid: true, - reverts: true, - returns: true, + execute: opRevert, + dynamicGas: gasRevert, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryRevert, + valid: true, + reverts: true, + returns: true, } return instructionSet } -// NewHomesteadInstructionSet returns the frontier and homestead +// EIP 158 a.k.a Spurious Dragon +func newSpuriousDragonInstructionSet() JumpTable { + instructionSet := newTangerineWhistleInstructionSet() + instructionSet[EXP].dynamicGas = gasExpEIP158 + return instructionSet + +} + +// EIP 150 a.k.a Tangerine Whistle +func newTangerineWhistleInstructionSet() JumpTable { + instructionSet := newHomesteadInstructionSet() + instructionSet[BALANCE].constantGas = params.BalanceGasEIP150 + instructionSet[EXTCODESIZE].constantGas = params.ExtcodeSizeGasEIP150 + instructionSet[SLOAD].constantGas = params.SloadGasEIP150 + instructionSet[EXTCODECOPY].constantGas = params.ExtcodeCopyBaseEIP150 + instructionSet[CALL].constantGas = params.CallGasEIP150 + instructionSet[CALLCODE].constantGas = params.CallGasEIP150 + instructionSet[DELEGATECALL].constantGas = params.CallGasEIP150 + return instructionSet +} + +// newHomesteadInstructionSet returns the frontier and homestead // instructions that can be executed during the homestead phase. -func newHomesteadInstructionSet() [256]operation { +func newHomesteadInstructionSet() JumpTable { instructionSet := newFrontierInstructionSet() instructionSet[DELEGATECALL] = operation{ - execute: opDelegateCall, - gasCost: gasDelegateCall, - validateStack: makeStackFunc(6, 1), - memorySize: memoryDelegateCall, - valid: true, - returns: true, + execute: opDelegateCall, + dynamicGas: gasDelegateCall, + constantGas: params.CallGasFrontier, + minStack: minStack(6, 1), + maxStack: maxStack(6, 1), + memorySize: memoryDelegateCall, + valid: true, + returns: true, } return instructionSet } -// NewFrontierInstructionSet returns the frontier instructions +// newFrontierInstructionSet returns the frontier instructions // that can be executed during the frontier phase. -func newFrontierInstructionSet() [256]operation { - return [256]operation{ +func newFrontierInstructionSet() JumpTable { + return JumpTable{ STOP: { - execute: opStop, - gasCost: constGasFunc(0), - validateStack: makeStackFunc(0, 0), - halts: true, - valid: true, + execute: opStop, + constantGas: 0, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + halts: true, + valid: true, }, ADD: { - execute: opAdd, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opAdd, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, MUL: { - execute: opMul, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opMul, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SUB: { - execute: opSub, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSub, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, DIV: { - execute: opDiv, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opDiv, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SDIV: { - execute: opSdiv, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSdiv, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, MOD: { - execute: opMod, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opMod, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SMOD: { - execute: opSmod, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSmod, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, ADDMOD: { - execute: opAddmod, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(3, 1), - valid: true, + execute: opAddmod, + constantGas: GasMidStep, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + valid: true, }, MULMOD: { - execute: opMulmod, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(3, 1), - valid: true, + execute: opMulmod, + constantGas: GasMidStep, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + valid: true, }, EXP: { - execute: opExp, - gasCost: gasExp, - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opExp, + dynamicGas: gasExpFrontier, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SIGNEXTEND: { - execute: opSignExtend, - gasCost: constGasFunc(GasFastStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSignExtend, + constantGas: GasFastStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, LT: { - execute: opLt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opLt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, GT: { - execute: opGt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opGt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SLT: { - execute: opSlt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSlt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SGT: { - execute: opSgt, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opSgt, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, EQ: { - execute: opEq, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opEq, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, ISZERO: { - execute: opIszero, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opIszero, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, AND: { - execute: opAnd, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opAnd, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, XOR: { - execute: opXor, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opXor, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, OR: { - execute: opOr, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opOr, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, NOT: { - execute: opNot, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opNot, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, BYTE: { - execute: opByte, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(2, 1), - valid: true, + execute: opByte, + constantGas: GasFastestStep, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + valid: true, }, SHA3: { - execute: opSha3, - gasCost: gasSha3, - validateStack: makeStackFunc(2, 1), - memorySize: memorySha3, - valid: true, + execute: opSha3, + constantGas: params.Sha3Gas, + dynamicGas: gasSha3, + minStack: minStack(2, 1), + maxStack: maxStack(2, 1), + memorySize: memorySha3, + valid: true, }, ADDRESS: { - execute: opAddress, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opAddress, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, BALANCE: { - execute: opBalance, - gasCost: gasBalance, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opBalance, + constantGas: params.BalanceGasFrontier, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, ORIGIN: { - execute: opOrigin, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opOrigin, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLER: { - execute: opCaller, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCaller, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLVALUE: { - execute: opCallValue, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCallValue, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLDATALOAD: { - execute: opCallDataLoad, - gasCost: constGasFunc(GasFastestStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opCallDataLoad, + constantGas: GasFastestStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, CALLDATASIZE: { - execute: opCallDataSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCallDataSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CALLDATACOPY: { - execute: opCallDataCopy, - gasCost: gasCallDataCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryCallDataCopy, - valid: true, + execute: opCallDataCopy, + constantGas: GasFastestStep, + dynamicGas: gasCallDataCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryCallDataCopy, + valid: true, }, CODESIZE: { - execute: opCodeSize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCodeSize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, CODECOPY: { - execute: opCodeCopy, - gasCost: gasCodeCopy, - validateStack: makeStackFunc(3, 0), - memorySize: memoryCodeCopy, - valid: true, + execute: opCodeCopy, + constantGas: GasFastestStep, + dynamicGas: gasCodeCopy, + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryCodeCopy, + valid: true, }, GASPRICE: { - execute: opGasprice, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGasprice, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, EXTCODESIZE: { - execute: opExtCodeSize, - gasCost: gasExtCodeSize, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opExtCodeSize, + constantGas: params.ExtcodeSizeGasFrontier, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, EXTCODECOPY: { - execute: opExtCodeCopy, - gasCost: gasExtCodeCopy, - validateStack: makeStackFunc(4, 0), - memorySize: memoryExtCodeCopy, - valid: true, + execute: opExtCodeCopy, + constantGas: params.ExtcodeCopyBaseFrontier, + dynamicGas: gasExtCodeCopy, + minStack: minStack(4, 0), + maxStack: maxStack(4, 0), + memorySize: memoryExtCodeCopy, + valid: true, }, BLOCKHASH: { - execute: opBlockhash, - gasCost: constGasFunc(GasExtStep), - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opBlockhash, + constantGas: GasExtStep, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, COINBASE: { - execute: opCoinbase, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opCoinbase, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, TIMESTAMP: { - execute: opTimestamp, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opTimestamp, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, NUMBER: { - execute: opNumber, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opNumber, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, DIFFICULTY: { - execute: opDifficulty, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opDifficulty, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, GASLIMIT: { - execute: opGasLimit, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGasLimit, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, POP: { - execute: opPop, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(1, 0), - valid: true, + execute: opPop, + constantGas: GasQuickStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + valid: true, }, MLOAD: { - execute: opMload, - gasCost: gasMLoad, - validateStack: makeStackFunc(1, 1), - memorySize: memoryMLoad, - valid: true, + execute: opMload, + constantGas: GasFastestStep, + dynamicGas: gasMLoad, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + memorySize: memoryMLoad, + valid: true, }, MSTORE: { - execute: opMstore, - gasCost: gasMStore, - validateStack: makeStackFunc(2, 0), - memorySize: memoryMStore, - valid: true, + execute: opMstore, + constantGas: GasFastestStep, + dynamicGas: gasMStore, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryMStore, + valid: true, }, MSTORE8: { - execute: opMstore8, - gasCost: gasMStore8, - memorySize: memoryMStore8, - validateStack: makeStackFunc(2, 0), + execute: opMstore8, + constantGas: GasFastestStep, + dynamicGas: gasMStore8, + memorySize: memoryMStore8, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), valid: true, }, SLOAD: { - execute: opSload, - gasCost: gasSLoad, - validateStack: makeStackFunc(1, 1), - valid: true, + execute: opSload, + constantGas: params.SloadGasFrontier, + minStack: minStack(1, 1), + maxStack: maxStack(1, 1), + valid: true, }, SSTORE: { - execute: opSstore, - gasCost: gasSStore, - validateStack: makeStackFunc(2, 0), - valid: true, - writes: true, + execute: opSstore, + dynamicGas: gasSStore, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + valid: true, + writes: true, }, JUMP: { - execute: opJump, - gasCost: constGasFunc(GasMidStep), - validateStack: makeStackFunc(1, 0), - jumps: true, - valid: true, + execute: opJump, + constantGas: GasMidStep, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + jumps: true, + valid: true, }, JUMPI: { - execute: opJumpi, - gasCost: constGasFunc(GasSlowStep), - validateStack: makeStackFunc(2, 0), - jumps: true, - valid: true, + execute: opJumpi, + constantGas: GasSlowStep, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + jumps: true, + valid: true, }, PC: { - execute: opPc, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opPc, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, MSIZE: { - execute: opMsize, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opMsize, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, GAS: { - execute: opGas, - gasCost: constGasFunc(GasQuickStep), - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opGas, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, JUMPDEST: { - execute: opJumpdest, - gasCost: constGasFunc(params.JumpdestGas), - validateStack: makeStackFunc(0, 0), - valid: true, + execute: opJumpdest, + constantGas: params.JumpdestGas, + minStack: minStack(0, 0), + maxStack: maxStack(0, 0), + valid: true, }, PUSH1: { - execute: makePush(1, 1), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: opPush1, + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH2: { - execute: makePush(2, 2), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(2, 2), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH3: { - execute: makePush(3, 3), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(3, 3), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH4: { - execute: makePush(4, 4), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(4, 4), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH5: { - execute: makePush(5, 5), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(5, 5), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH6: { - execute: makePush(6, 6), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(6, 6), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH7: { - execute: makePush(7, 7), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(7, 7), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH8: { - execute: makePush(8, 8), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(8, 8), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH9: { - execute: makePush(9, 9), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(9, 9), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH10: { - execute: makePush(10, 10), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(10, 10), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH11: { - execute: makePush(11, 11), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(11, 11), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH12: { - execute: makePush(12, 12), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(12, 12), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH13: { - execute: makePush(13, 13), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(13, 13), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH14: { - execute: makePush(14, 14), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(14, 14), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH15: { - execute: makePush(15, 15), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(15, 15), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH16: { - execute: makePush(16, 16), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(16, 16), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH17: { - execute: makePush(17, 17), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(17, 17), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH18: { - execute: makePush(18, 18), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(18, 18), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH19: { - execute: makePush(19, 19), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(19, 19), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH20: { - execute: makePush(20, 20), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(20, 20), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH21: { - execute: makePush(21, 21), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(21, 21), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH22: { - execute: makePush(22, 22), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(22, 22), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH23: { - execute: makePush(23, 23), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(23, 23), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH24: { - execute: makePush(24, 24), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(24, 24), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH25: { - execute: makePush(25, 25), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(25, 25), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH26: { - execute: makePush(26, 26), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(26, 26), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH27: { - execute: makePush(27, 27), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(27, 27), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH28: { - execute: makePush(28, 28), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(28, 28), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH29: { - execute: makePush(29, 29), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(29, 29), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH30: { - execute: makePush(30, 30), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(30, 30), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH31: { - execute: makePush(31, 31), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(31, 31), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, PUSH32: { - execute: makePush(32, 32), - gasCost: gasPush, - validateStack: makeStackFunc(0, 1), - valid: true, + execute: makePush(32, 32), + constantGas: GasFastestStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + valid: true, }, DUP1: { - execute: makeDup(1), - gasCost: gasDup, - validateStack: makeDupStackFunc(1), - valid: true, + execute: makeDup(1), + constantGas: GasFastestStep, + minStack: minDupStack(1), + maxStack: maxDupStack(1), + valid: true, }, DUP2: { - execute: makeDup(2), - gasCost: gasDup, - validateStack: makeDupStackFunc(2), - valid: true, + execute: makeDup(2), + constantGas: GasFastestStep, + minStack: minDupStack(2), + maxStack: maxDupStack(2), + valid: true, }, DUP3: { - execute: makeDup(3), - gasCost: gasDup, - validateStack: makeDupStackFunc(3), - valid: true, + execute: makeDup(3), + constantGas: GasFastestStep, + minStack: minDupStack(3), + maxStack: maxDupStack(3), + valid: true, }, DUP4: { - execute: makeDup(4), - gasCost: gasDup, - validateStack: makeDupStackFunc(4), - valid: true, + execute: makeDup(4), + constantGas: GasFastestStep, + minStack: minDupStack(4), + maxStack: maxDupStack(4), + valid: true, }, DUP5: { - execute: makeDup(5), - gasCost: gasDup, - validateStack: makeDupStackFunc(5), - valid: true, + execute: makeDup(5), + constantGas: GasFastestStep, + minStack: minDupStack(5), + maxStack: maxDupStack(5), + valid: true, }, DUP6: { - execute: makeDup(6), - gasCost: gasDup, - validateStack: makeDupStackFunc(6), - valid: true, + execute: makeDup(6), + constantGas: GasFastestStep, + minStack: minDupStack(6), + maxStack: maxDupStack(6), + valid: true, }, DUP7: { - execute: makeDup(7), - gasCost: gasDup, - validateStack: makeDupStackFunc(7), - valid: true, + execute: makeDup(7), + constantGas: GasFastestStep, + minStack: minDupStack(7), + maxStack: maxDupStack(7), + valid: true, }, DUP8: { - execute: makeDup(8), - gasCost: gasDup, - validateStack: makeDupStackFunc(8), - valid: true, + execute: makeDup(8), + constantGas: GasFastestStep, + minStack: minDupStack(8), + maxStack: maxDupStack(8), + valid: true, }, DUP9: { - execute: makeDup(9), - gasCost: gasDup, - validateStack: makeDupStackFunc(9), - valid: true, + execute: makeDup(9), + constantGas: GasFastestStep, + minStack: minDupStack(9), + maxStack: maxDupStack(9), + valid: true, }, DUP10: { - execute: makeDup(10), - gasCost: gasDup, - validateStack: makeDupStackFunc(10), - valid: true, + execute: makeDup(10), + constantGas: GasFastestStep, + minStack: minDupStack(10), + maxStack: maxDupStack(10), + valid: true, }, DUP11: { - execute: makeDup(11), - gasCost: gasDup, - validateStack: makeDupStackFunc(11), - valid: true, + execute: makeDup(11), + constantGas: GasFastestStep, + minStack: minDupStack(11), + maxStack: maxDupStack(11), + valid: true, }, DUP12: { - execute: makeDup(12), - gasCost: gasDup, - validateStack: makeDupStackFunc(12), - valid: true, + execute: makeDup(12), + constantGas: GasFastestStep, + minStack: minDupStack(12), + maxStack: maxDupStack(12), + valid: true, }, DUP13: { - execute: makeDup(13), - gasCost: gasDup, - validateStack: makeDupStackFunc(13), - valid: true, + execute: makeDup(13), + constantGas: GasFastestStep, + minStack: minDupStack(13), + maxStack: maxDupStack(13), + valid: true, }, DUP14: { - execute: makeDup(14), - gasCost: gasDup, - validateStack: makeDupStackFunc(14), - valid: true, + execute: makeDup(14), + constantGas: GasFastestStep, + minStack: minDupStack(14), + maxStack: maxDupStack(14), + valid: true, }, DUP15: { - execute: makeDup(15), - gasCost: gasDup, - validateStack: makeDupStackFunc(15), - valid: true, + execute: makeDup(15), + constantGas: GasFastestStep, + minStack: minDupStack(15), + maxStack: maxDupStack(15), + valid: true, }, DUP16: { - execute: makeDup(16), - gasCost: gasDup, - validateStack: makeDupStackFunc(16), - valid: true, + execute: makeDup(16), + constantGas: GasFastestStep, + minStack: minDupStack(16), + maxStack: maxDupStack(16), + valid: true, }, SWAP1: { - execute: makeSwap(1), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(2), - valid: true, + execute: makeSwap(1), + constantGas: GasFastestStep, + minStack: minSwapStack(2), + maxStack: maxSwapStack(2), + valid: true, }, SWAP2: { - execute: makeSwap(2), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(3), - valid: true, + execute: makeSwap(2), + constantGas: GasFastestStep, + minStack: minSwapStack(3), + maxStack: maxSwapStack(3), + valid: true, }, SWAP3: { - execute: makeSwap(3), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(4), - valid: true, + execute: makeSwap(3), + constantGas: GasFastestStep, + minStack: minSwapStack(4), + maxStack: maxSwapStack(4), + valid: true, }, SWAP4: { - execute: makeSwap(4), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(5), - valid: true, + execute: makeSwap(4), + constantGas: GasFastestStep, + minStack: minSwapStack(5), + maxStack: maxSwapStack(5), + valid: true, }, SWAP5: { - execute: makeSwap(5), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(6), - valid: true, + execute: makeSwap(5), + constantGas: GasFastestStep, + minStack: minSwapStack(6), + maxStack: maxSwapStack(6), + valid: true, }, SWAP6: { - execute: makeSwap(6), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(7), - valid: true, + execute: makeSwap(6), + constantGas: GasFastestStep, + minStack: minSwapStack(7), + maxStack: maxSwapStack(7), + valid: true, }, SWAP7: { - execute: makeSwap(7), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(8), - valid: true, + execute: makeSwap(7), + constantGas: GasFastestStep, + minStack: minSwapStack(8), + maxStack: maxSwapStack(8), + valid: true, }, SWAP8: { - execute: makeSwap(8), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(9), - valid: true, + execute: makeSwap(8), + constantGas: GasFastestStep, + minStack: minSwapStack(9), + maxStack: maxSwapStack(9), + valid: true, }, SWAP9: { - execute: makeSwap(9), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(10), - valid: true, + execute: makeSwap(9), + constantGas: GasFastestStep, + minStack: minSwapStack(10), + maxStack: maxSwapStack(10), + valid: true, }, SWAP10: { - execute: makeSwap(10), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(11), - valid: true, + execute: makeSwap(10), + constantGas: GasFastestStep, + minStack: minSwapStack(11), + maxStack: maxSwapStack(11), + valid: true, }, SWAP11: { - execute: makeSwap(11), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(12), - valid: true, + execute: makeSwap(11), + constantGas: GasFastestStep, + minStack: minSwapStack(12), + maxStack: maxSwapStack(12), + valid: true, }, SWAP12: { - execute: makeSwap(12), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(13), - valid: true, + execute: makeSwap(12), + constantGas: GasFastestStep, + minStack: minSwapStack(13), + maxStack: maxSwapStack(13), + valid: true, }, SWAP13: { - execute: makeSwap(13), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(14), - valid: true, + execute: makeSwap(13), + constantGas: GasFastestStep, + minStack: minSwapStack(14), + maxStack: maxSwapStack(14), + valid: true, }, SWAP14: { - execute: makeSwap(14), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(15), - valid: true, + execute: makeSwap(14), + constantGas: GasFastestStep, + minStack: minSwapStack(15), + maxStack: maxSwapStack(15), + valid: true, }, SWAP15: { - execute: makeSwap(15), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(16), - valid: true, + execute: makeSwap(15), + constantGas: GasFastestStep, + minStack: minSwapStack(16), + maxStack: maxSwapStack(16), + valid: true, }, SWAP16: { - execute: makeSwap(16), - gasCost: gasSwap, - validateStack: makeSwapStackFunc(17), - valid: true, + execute: makeSwap(16), + constantGas: GasFastestStep, + minStack: minSwapStack(17), + maxStack: maxSwapStack(17), + valid: true, }, LOG0: { - execute: makeLog(0), - gasCost: makeGasLog(0), - validateStack: makeStackFunc(2, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(0), + dynamicGas: makeGasLog(0), + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG1: { - execute: makeLog(1), - gasCost: makeGasLog(1), - validateStack: makeStackFunc(3, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(1), + dynamicGas: makeGasLog(1), + minStack: minStack(3, 0), + maxStack: maxStack(3, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG2: { - execute: makeLog(2), - gasCost: makeGasLog(2), - validateStack: makeStackFunc(4, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(2), + dynamicGas: makeGasLog(2), + minStack: minStack(4, 0), + maxStack: maxStack(4, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG3: { - execute: makeLog(3), - gasCost: makeGasLog(3), - validateStack: makeStackFunc(5, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(3), + dynamicGas: makeGasLog(3), + minStack: minStack(5, 0), + maxStack: maxStack(5, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, LOG4: { - execute: makeLog(4), - gasCost: makeGasLog(4), - validateStack: makeStackFunc(6, 0), - memorySize: memoryLog, - valid: true, - writes: true, + execute: makeLog(4), + dynamicGas: makeGasLog(4), + minStack: minStack(6, 0), + maxStack: maxStack(6, 0), + memorySize: memoryLog, + valid: true, + writes: true, }, CREATE: { - execute: opCreate, - gasCost: gasCreate, - validateStack: makeStackFunc(3, 1), - memorySize: memoryCreate, - valid: true, - writes: true, - returns: true, + execute: opCreate, + constantGas: params.CreateGas, + dynamicGas: gasCreate, + minStack: minStack(3, 1), + maxStack: maxStack(3, 1), + memorySize: memoryCreate, + valid: true, + writes: true, + returns: true, }, CALL: { - execute: opCall, - gasCost: gasCall, - validateStack: makeStackFunc(7, 1), - memorySize: memoryCall, - valid: true, - returns: true, + execute: opCall, + constantGas: params.CallGasFrontier, + dynamicGas: gasCall, + minStack: minStack(7, 1), + maxStack: maxStack(7, 1), + memorySize: memoryCall, + valid: true, + returns: true, }, CALLCODE: { - execute: opCallCode, - gasCost: gasCallCode, - validateStack: makeStackFunc(7, 1), - memorySize: memoryCall, - valid: true, - returns: true, + execute: opCallCode, + constantGas: params.CallGasFrontier, + dynamicGas: gasCallCode, + minStack: minStack(7, 1), + maxStack: maxStack(7, 1), + memorySize: memoryCall, + valid: true, + returns: true, }, RETURN: { - execute: opReturn, - gasCost: gasReturn, - validateStack: makeStackFunc(2, 0), - memorySize: memoryReturn, - halts: true, - valid: true, + execute: opReturn, + dynamicGas: gasReturn, + minStack: minStack(2, 0), + maxStack: maxStack(2, 0), + memorySize: memoryReturn, + halts: true, + valid: true, }, SELFDESTRUCT: { - execute: opSuicide, - gasCost: gasSuicide, - validateStack: makeStackFunc(1, 0), - halts: true, - valid: true, - writes: true, + execute: opSuicide, + dynamicGas: gasSelfdestruct, + minStack: minStack(1, 0), + maxStack: maxStack(1, 0), + halts: true, + valid: true, + writes: true, }, } } diff --git a/core/vm/logger.go b/core/vm/logger.go index 1733bf270013..262ee5cc3e83 100644 --- a/core/vm/logger.go +++ b/core/vm/logger.go @@ -158,7 +158,7 @@ func (l *StructLogger) CaptureState(env *EVM, pc uint64, op OpCode, gas, cost ui ) l.changedValues[contract.Address()][address] = value } - // Copy a snapstot of the current memory state to a new buffer + // Copy a snapshot of the current memory state to a new buffer var mem []byte if !l.cfg.DisableMemory { mem = make([]byte, len(memory.Data())) @@ -177,7 +177,7 @@ func (l *StructLogger) CaptureState(env *EVM, pc uint64, op OpCode, gas, cost ui if !l.cfg.DisableStorage { storage = l.changedValues[contract.Address()].Copy() } - // create a new snaptshot of the EVM. + // create a new snapshot of the EVM. log := StructLog{pc, op, gas, cost, mem, memory.Len(), stck, storage, depth, env.StateDB.GetRefund(), err} l.logs = append(l.logs, log) diff --git a/core/vm/logger_json.go b/core/vm/logger_json.go index ff379a4efdba..04a83d0660fc 100644 --- a/core/vm/logger_json.go +++ b/core/vm/logger_json.go @@ -1,18 +1,18 @@ // Copyright 2017 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package vm diff --git a/core/vm/memory_table.go b/core/vm/memory_table.go index 8fa6c90ca7d4..4fcb41442c4e 100644 --- a/core/vm/memory_table.go +++ b/core/vm/memory_table.go @@ -16,82 +16,98 @@ package vm -import ( - "math/big" - - "github.com/ethereum/go-ethereum/common/math" -) - -func memorySha3(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) +func memorySha3(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryCallDataCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryCallDataCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryReturnDataCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryReturnDataCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryCodeCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(2)) +func memoryCodeCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(2)) } -func memoryExtCodeCopy(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(3)) +func memoryExtCodeCopy(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(3)) } -func memoryMLoad(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(32)) +func memoryMLoad(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 32) } -func memoryMStore8(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(1)) +func memoryMStore8(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 1) } -func memoryMStore(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), big.NewInt(32)) +func memoryMStore(stack *Stack) (uint64, bool) { + return calcMemSize64WithUint(stack.Back(0), 32) } -func memoryCreate(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(2)) +func memoryCreate(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(2)) } -func memoryCreate2(stack *Stack) *big.Int { - return calcMemSize(stack.Back(1), stack.Back(2)) +func memoryCreate2(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(1), stack.Back(2)) } -func memoryCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(5), stack.Back(6)) - y := calcMemSize(stack.Back(3), stack.Back(4)) - - return math.BigMax(x, y) +func memoryCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(5), stack.Back(6)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(3), stack.Back(4)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false } - -func memoryDelegateCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(4), stack.Back(5)) - y := calcMemSize(stack.Back(2), stack.Back(3)) - - return math.BigMax(x, y) +func memoryDelegateCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(4), stack.Back(5)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(2), stack.Back(3)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false } -func memoryStaticCall(stack *Stack) *big.Int { - x := calcMemSize(stack.Back(4), stack.Back(5)) - y := calcMemSize(stack.Back(2), stack.Back(3)) - - return math.BigMax(x, y) +func memoryStaticCall(stack *Stack) (uint64, bool) { + x, overflow := calcMemSize64(stack.Back(4), stack.Back(5)) + if overflow { + return 0, true + } + y, overflow := calcMemSize64(stack.Back(2), stack.Back(3)) + if overflow { + return 0, true + } + if x > y { + return x, false + } + return y, false } -func memoryReturn(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) +func memoryReturn(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryRevert(stack *Stack) *big.Int { - return calcMemSize(stack.Back(0), stack.Back(1)) +func memoryRevert(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } -func memoryLog(stack *Stack) *big.Int { - mSize, mStart := stack.Back(1), stack.Back(0) - return calcMemSize(mStart, mSize) +func memoryLog(stack *Stack) (uint64, bool) { + return calcMemSize64(stack.Back(0), stack.Back(1)) } diff --git a/core/vm/opcodes.go b/core/vm/opcodes.go index 4349ffd29525..ba0ba01b8f03 100644 --- a/core/vm/opcodes.go +++ b/core/vm/opcodes.go @@ -101,6 +101,8 @@ const ( NUMBER DIFFICULTY GASLIMIT + CHAINID = 0x46 + SELFBALANCE = 0x47 ) // 0x50 range - 'storage' and execution. @@ -271,12 +273,14 @@ var opCodeToString = map[OpCode]string{ EXTCODEHASH: "EXTCODEHASH", // 0x40 range - block operations. - BLOCKHASH: "BLOCKHASH", - COINBASE: "COINBASE", - TIMESTAMP: "TIMESTAMP", - NUMBER: "NUMBER", - DIFFICULTY: "DIFFICULTY", - GASLIMIT: "GASLIMIT", + BLOCKHASH: "BLOCKHASH", + COINBASE: "COINBASE", + TIMESTAMP: "TIMESTAMP", + NUMBER: "NUMBER", + DIFFICULTY: "DIFFICULTY", + GASLIMIT: "GASLIMIT", + CHAINID: "CHAINID", + SELFBALANCE: "SELFBALANCE", // 0x50 range - 'storage' and execution. POP: "POP", @@ -428,6 +432,7 @@ var stringToOp = map[string]OpCode{ "CALLDATALOAD": CALLDATALOAD, "CALLDATASIZE": CALLDATASIZE, "CALLDATACOPY": CALLDATACOPY, + "CHAINID": CHAINID, "DELEGATECALL": DELEGATECALL, "STATICCALL": STATICCALL, "CODESIZE": CODESIZE, @@ -444,6 +449,7 @@ var stringToOp = map[string]OpCode{ "NUMBER": NUMBER, "DIFFICULTY": DIFFICULTY, "GASLIMIT": GASLIMIT, + "SELFBALANCE": SELFBALANCE, "POP": POP, "MLOAD": MLOAD, "MSTORE": MSTORE, diff --git a/core/vm/runtime/runtime.go b/core/vm/runtime/runtime.go index cda49a34b4a7..db1f6f38222b 100644 --- a/core/vm/runtime/runtime.go +++ b/core/vm/runtime/runtime.go @@ -22,10 +22,10 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -99,7 +99,7 @@ func Execute(code, input []byte, cfg *Config) ([]byte, *state.StateDB, error) { setDefaults(cfg) if cfg.State == nil { - cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) } var ( address = common.BytesToAddress([]byte("contract")) @@ -129,7 +129,7 @@ func Create(input []byte, cfg *Config) ([]byte, common.Address, uint64, error) { setDefaults(cfg) if cfg.State == nil { - cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + cfg.State, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) } var ( vmenv = NewEnv(cfg) diff --git a/core/vm/runtime/runtime_test.go b/core/vm/runtime/runtime_test.go index bac06e524bd2..15f545ddcafb 100644 --- a/core/vm/runtime/runtime_test.go +++ b/core/vm/runtime/runtime_test.go @@ -23,9 +23,9 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -95,7 +95,7 @@ func TestExecute(t *testing.T) { } func TestCall(t *testing.T) { - state, _ := state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + state, _ := state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) address := common.HexToAddress("0x0a") state.SetCode(address, []byte{ byte(vm.PUSH1), 10, @@ -151,7 +151,7 @@ func BenchmarkCall(b *testing.B) { } func benchmarkEVM_Create(bench *testing.B, code string) { var ( - statedb, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + statedb, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) sender = common.BytesToAddress([]byte("sender")) receiver = common.BytesToAddress([]byte("receiver")) ) diff --git a/core/vm/stack_table.go b/core/vm/stack_table.go index a4b1cfcd896e..10c12901afdb 100644 --- a/core/vm/stack_table.go +++ b/core/vm/stack_table.go @@ -17,28 +17,26 @@ package vm import ( - "fmt" - "github.com/ethereum/go-ethereum/params" ) -func makeStackFunc(pop, push int) stackValidationFunc { - return func(stack *Stack) error { - if err := stack.require(pop); err != nil { - return err - } - - if stack.len()+push-pop > int(params.StackLimit) { - return fmt.Errorf("stack limit reached %d (%d)", stack.len(), params.StackLimit) - } - return nil - } +func minSwapStack(n int) int { + return minStack(n, n) +} +func maxSwapStack(n int) int { + return maxStack(n, n) } -func makeDupStackFunc(n int) stackValidationFunc { - return makeStackFunc(n, n+1) +func minDupStack(n int) int { + return minStack(n, n+1) +} +func maxDupStack(n int) int { + return maxStack(n, n+1) } -func makeSwapStackFunc(n int) stackValidationFunc { - return makeStackFunc(n, n) +func maxStack(pop, push int) int { + return int(params.StackLimit) + pop - push +} +func minStack(pops, push int) int { + return pops } diff --git a/core/vm/testdata/testcases_add.json b/core/vm/testdata/testcases_add.json new file mode 100644 index 000000000000..c03ae96ada40 --- /dev/null +++ b/core/vm/testdata/testcases_add.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000006"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000006"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"000000000000000000000000000000000000000000000000000000000000000a"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000003"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000006"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000003"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000006"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_and.json b/core/vm/testdata/testcases_and.json new file mode 100644 index 000000000000..aba5f2463c84 --- /dev/null +++ b/core/vm/testdata/testcases_and.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_byte.json b/core/vm/testdata/testcases_byte.json new file mode 100644 index 000000000000..88d7c7d80711 --- /dev/null +++ b/core/vm/testdata/testcases_byte.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"000000000000000000000000000000000000000000000000000000000000007f"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"000000000000000000000000000000000000000000000000000000000000007f"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000080"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000080"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"00000000000000000000000000000000000000000000000000000000000000ff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_div.json b/core/vm/testdata/testcases_div.json new file mode 100644 index 000000000000..b1f9c7fbac8b --- /dev/null +++ b/core/vm/testdata/testcases_div.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"3333333333333333333333333333333333333333333333333333333333333332"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"3333333333333333333333333333333333333333333333333333333333333333"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_eq.json b/core/vm/testdata/testcases_eq.json new file mode 100644 index 000000000000..937eadb02481 --- /dev/null +++ b/core/vm/testdata/testcases_eq.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_exp.json b/core/vm/testdata/testcases_exp.json new file mode 100644 index 000000000000..61818357f8c6 --- /dev/null +++ b/core/vm/testdata/testcases_exp.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000c35"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cb"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c28f5c29"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccd"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"3333333333333333333333333333333333333333333333333333333333333333"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"58cd20afa2f05a708ede54b48d3ae685db76b3bb83cf2cf95d4e8fb00bcbe61d"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"a732df505d0fa58f7121ab4b72c5197a24894c447c30d306a2b1704ff43419e3"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccd"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"3333333333333333333333333333333333333333333333333333333333333333"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_gt.json b/core/vm/testdata/testcases_gt.json new file mode 100644 index 000000000000..637bd3f6e67b --- /dev/null +++ b/core/vm/testdata/testcases_gt.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_lt.json b/core/vm/testdata/testcases_lt.json new file mode 100644 index 000000000000..55252a4de263 --- /dev/null +++ b/core/vm/testdata/testcases_lt.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_mod.json b/core/vm/testdata/testcases_mod.json new file mode 100644 index 000000000000..192503f26f21 --- /dev/null +++ b/core/vm/testdata/testcases_mod.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000003"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000003"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000003"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_mul.json b/core/vm/testdata/testcases_mul.json new file mode 100644 index 000000000000..dc44c253f6ec --- /dev/null +++ b/core/vm/testdata/testcases_mul.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000019"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"800000000000000000000000000000000000000000000000000000000000000a"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"800000000000000000000000000000000000000000000000000000000000000a"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000019"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_or.json b/core/vm/testdata/testcases_or.json new file mode 100644 index 000000000000..bfa561b58595 --- /dev/null +++ b/core/vm/testdata/testcases_or.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_sar.json b/core/vm/testdata/testcases_sar.json new file mode 100644 index 000000000000..c93abbd654fa --- /dev/null +++ b/core/vm/testdata/testcases_sar.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"c000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fc00000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"c000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fc00000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_sdiv.json b/core/vm/testdata/testcases_sdiv.json new file mode 100644 index 000000000000..18cb666ab507 --- /dev/null +++ b/core/vm/testdata/testcases_sdiv.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"e666666666666666666666666666666666666666666666666666666666666667"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"e666666666666666666666666666666666666666666666666666666666666667"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"e666666666666666666666666666666666666666666666666666666666666667"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"e666666666666666666666666666666666666666666666666666666666666667"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"1999999999999999999999999999999999999999999999999999999999999999"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_sgt.json b/core/vm/testdata/testcases_sgt.json new file mode 100644 index 000000000000..aa581a65492a --- /dev/null +++ b/core/vm/testdata/testcases_sgt.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_shl.json b/core/vm/testdata/testcases_shl.json new file mode 100644 index 000000000000..65e9c07b77a9 --- /dev/null +++ b/core/vm/testdata/testcases_shl.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000020"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"000000000000000000000000000000000000000000000000000000000000000a"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"00000000000000000000000000000000000000000000000000000000000000a0"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000020"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_shr.json b/core/vm/testdata/testcases_shr.json new file mode 100644 index 000000000000..a38491350d5d --- /dev/null +++ b/core/vm/testdata/testcases_shr.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"4000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0400000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"4000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0400000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_signext.json b/core/vm/testdata/testcases_signext.json new file mode 100644 index 000000000000..bdadd400e78c --- /dev/null +++ b/core/vm/testdata/testcases_signext.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_slt.json b/core/vm/testdata/testcases_slt.json new file mode 100644 index 000000000000..4369b96fd8f4 --- /dev/null +++ b/core/vm/testdata/testcases_slt.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_smod.json b/core/vm/testdata/testcases_smod.json new file mode 100644 index 000000000000..980e0341a797 --- /dev/null +++ b/core/vm/testdata/testcases_smod.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_sub.json b/core/vm/testdata/testcases_sub.json new file mode 100644 index 000000000000..b3881a5ab624 --- /dev/null +++ b/core/vm/testdata/testcases_sub.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000003"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000007"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000003"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000006"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000006"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"000000000000000000000000000000000000000000000000000000000000000a"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000003"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000006"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000002"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000006"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000002"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/core/vm/testdata/testcases_xor.json b/core/vm/testdata/testcases_xor.json new file mode 100644 index 000000000000..4cc2dddd7dfa --- /dev/null +++ b/core/vm/testdata/testcases_xor.json @@ -0,0 +1 @@ +[{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"0000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"0000000000000000000000000000000000000000000000000000000000000005","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"8000000000000000000000000000000000000000000000000000000000000000","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"0000000000000000000000000000000000000000000000000000000000000001"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"8000000000000000000000000000000000000000000000000000000000000001","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000005"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000004"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000000"},{"X":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000000","Expected":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000001","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"0000000000000000000000000000000000000000000000000000000000000005","Expected":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe","Expected":"8000000000000000000000000000000000000000000000000000000000000001"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"8000000000000000000000000000000000000000000000000000000000000000"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000000","Expected":"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"8000000000000000000000000000000000000000000000000000000000000001","Expected":"7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb","Expected":"0000000000000000000000000000000000000000000000000000000000000004"},{"X":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Y":"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff","Expected":"0000000000000000000000000000000000000000000000000000000000000000"}] \ No newline at end of file diff --git a/crypto/blake2b/blake2b.go b/crypto/blake2b/blake2b.go new file mode 100644 index 000000000000..5da50cab6f00 --- /dev/null +++ b/crypto/blake2b/blake2b.go @@ -0,0 +1,319 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 +// and the extendable output function (XOF) BLAKE2Xb. +// +// For a detailed specification of BLAKE2b see https://blake2.net/blake2.pdf +// and for BLAKE2Xb see https://blake2.net/blake2x.pdf +// +// If you aren't sure which function you need, use BLAKE2b (Sum512 or New512). +// If you need a secret-key MAC (message authentication code), use the New512 +// function with a non-nil key. +// +// BLAKE2X is a construction to compute hash values larger than 64 bytes. It +// can produce hash values between 0 and 4 GiB. +package blake2b + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // The blocksize of BLAKE2b in bytes. + BlockSize = 128 + // The hash size of BLAKE2b-512 in bytes. + Size = 64 + // The hash size of BLAKE2b-384 in bytes. + Size384 = 48 + // The hash size of BLAKE2b-256 in bytes. + Size256 = 32 +) + +var ( + useAVX2 bool + useAVX bool + useSSE4 bool +) + +var ( + errKeySize = errors.New("blake2b: invalid key size") + errHashSize = errors.New("blake2b: invalid hash size") +) + +var iv = [8]uint64{ + 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, +} + +// Sum512 returns the BLAKE2b-512 checksum of the data. +func Sum512(data []byte) [Size]byte { + var sum [Size]byte + checkSum(&sum, Size, data) + return sum +} + +// Sum384 returns the BLAKE2b-384 checksum of the data. +func Sum384(data []byte) [Size384]byte { + var sum [Size]byte + var sum384 [Size384]byte + checkSum(&sum, Size384, data) + copy(sum384[:], sum[:Size384]) + return sum384 +} + +// Sum256 returns the BLAKE2b-256 checksum of the data. +func Sum256(data []byte) [Size256]byte { + var sum [Size]byte + var sum256 [Size256]byte + checkSum(&sum, Size256, data) + copy(sum256[:], sum[:Size256]) + return sum256 +} + +// New512 returns a new hash.Hash computing the BLAKE2b-512 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New512(key []byte) (hash.Hash, error) { return newDigest(Size, key) } + +// New384 returns a new hash.Hash computing the BLAKE2b-384 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New384(key []byte) (hash.Hash, error) { return newDigest(Size384, key) } + +// New256 returns a new hash.Hash computing the BLAKE2b-256 checksum. A non-nil +// key turns the hash into a MAC. The key must be between zero and 64 bytes long. +func New256(key []byte) (hash.Hash, error) { return newDigest(Size256, key) } + +// New returns a new hash.Hash computing the BLAKE2b checksum with a custom length. +// A non-nil key turns the hash into a MAC. The key must be between zero and 64 bytes long. +// The hash size can be a value between 1 and 64 but it is highly recommended to use +// values equal or greater than: +// - 32 if BLAKE2b is used as a hash function (The key is zero bytes long). +// - 16 if BLAKE2b is used as a MAC function (The key is at least 16 bytes long). +// When the key is nil, the returned hash.Hash implements BinaryMarshaler +// and BinaryUnmarshaler for state (de)serialization as documented by hash.Hash. +func New(size int, key []byte) (hash.Hash, error) { return newDigest(size, key) } + +// F is a compression function for BLAKE2b. It takes as an argument the state +// vector `h`, message block vector `m`, offset counter `t`, final block indicator +// flag `f`, and number of rounds `rounds`. The state vector provided as the first +// parameter is modified by the function. +func F(h *[8]uint64, m [16]uint64, c [2]uint64, final bool, rounds uint32) { + var flag uint64 + if final { + flag = 0xFFFFFFFFFFFFFFFF + } + f(h, &m, c[0], c[1], flag, uint64(rounds)) +} + +func newDigest(hashSize int, key []byte) (*digest, error) { + if hashSize < 1 || hashSize > Size { + return nil, errHashSize + } + if len(key) > Size { + return nil, errKeySize + } + d := &digest{ + size: hashSize, + keyLen: len(key), + } + copy(d.key[:], key) + d.Reset() + return d, nil +} + +func checkSum(sum *[Size]byte, hashSize int, data []byte) { + h := iv + h[0] ^= uint64(hashSize) | (1 << 16) | (1 << 24) + var c [2]uint64 + + if length := len(data); length > BlockSize { + n := length &^ (BlockSize - 1) + if length == n { + n -= BlockSize + } + hashBlocks(&h, &c, 0, data[:n]) + data = data[n:] + } + + var block [BlockSize]byte + offset := copy(block[:], data) + remaining := uint64(BlockSize - offset) + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h[:(hashSize+7)/8] { + binary.LittleEndian.PutUint64(sum[8*i:], v) + } +} + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + var m [16]uint64 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + for j := range m { + m[j] = binary.LittleEndian.Uint64(blocks[i:]) + i += 8 + } + f(h, &m, c0, c1, flag, 12) + } + c[0], c[1] = c0, c1 +} + +type digest struct { + h [8]uint64 + c [2]uint64 + size int + block [BlockSize]byte + offset int + + key [BlockSize]byte + keyLen int +} + +const ( + magic = "b2b" + marshaledSize = len(magic) + 8*8 + 2*8 + 1 + BlockSize + 1 +) + +func (d *digest) MarshalBinary() ([]byte, error) { + if d.keyLen != 0 { + return nil, errors.New("crypto/blake2b: cannot marshal MACs") + } + b := make([]byte, 0, marshaledSize) + b = append(b, magic...) + for i := 0; i < 8; i++ { + b = appendUint64(b, d.h[i]) + } + b = appendUint64(b, d.c[0]) + b = appendUint64(b, d.c[1]) + // Maximum value for size is 64 + b = append(b, byte(d.size)) + b = append(b, d.block[:]...) + b = append(b, byte(d.offset)) + return b, nil +} + +func (d *digest) UnmarshalBinary(b []byte) error { + if len(b) < len(magic) || string(b[:len(magic)]) != magic { + return errors.New("crypto/blake2b: invalid hash state identifier") + } + if len(b) != marshaledSize { + return errors.New("crypto/blake2b: invalid hash state size") + } + b = b[len(magic):] + for i := 0; i < 8; i++ { + b, d.h[i] = consumeUint64(b) + } + b, d.c[0] = consumeUint64(b) + b, d.c[1] = consumeUint64(b) + d.size = int(b[0]) + b = b[1:] + copy(d.block[:], b[:BlockSize]) + b = b[BlockSize:] + d.offset = int(b[0]) + return nil +} + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Size() int { return d.size } + +func (d *digest) Reset() { + d.h = iv + d.h[0] ^= uint64(d.size) | (uint64(d.keyLen) << 8) | (1 << 16) | (1 << 24) + d.offset, d.c[0], d.c[1] = 0, 0, 0 + if d.keyLen > 0 { + d.block = d.key + d.offset = BlockSize + } +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + + if d.offset > 0 { + remaining := BlockSize - d.offset + if n <= remaining { + d.offset += copy(d.block[d.offset:], p) + return + } + copy(d.block[d.offset:], p[:remaining]) + hashBlocks(&d.h, &d.c, 0, d.block[:]) + d.offset = 0 + p = p[remaining:] + } + + if length := len(p); length > BlockSize { + nn := length &^ (BlockSize - 1) + if length == nn { + nn -= BlockSize + } + hashBlocks(&d.h, &d.c, 0, p[:nn]) + p = p[nn:] + } + + if len(p) > 0 { + d.offset += copy(d.block[:], p) + } + + return +} + +func (d *digest) Sum(sum []byte) []byte { + var hash [Size]byte + d.finalize(&hash) + return append(sum, hash[:d.size]...) +} + +func (d *digest) finalize(hash *[Size]byte) { + var block [BlockSize]byte + copy(block[:], d.block[:d.offset]) + remaining := uint64(BlockSize - d.offset) + + c := d.c + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + h := d.h + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h { + binary.LittleEndian.PutUint64(hash[8*i:], v) + } +} + +func appendUint64(b []byte, x uint64) []byte { + var a [8]byte + binary.BigEndian.PutUint64(a[:], x) + return append(b, a[:]...) +} + +func appendUint32(b []byte, x uint32) []byte { + var a [4]byte + binary.BigEndian.PutUint32(a[:], x) + return append(b, a[:]...) +} + +func consumeUint64(b []byte) ([]byte, uint64) { + x := binary.BigEndian.Uint64(b) + return b[8:], x +} + +func consumeUint32(b []byte) ([]byte, uint32) { + x := binary.BigEndian.Uint32(b) + return b[4:], x +} diff --git a/crypto/blake2b/blake2bAVX2_amd64.go b/crypto/blake2b/blake2bAVX2_amd64.go new file mode 100644 index 000000000000..0d52b186990b --- /dev/null +++ b/crypto/blake2b/blake2bAVX2_amd64.go @@ -0,0 +1,37 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useAVX2 = cpu.X86.HasAVX2 + useAVX = cpu.X86.HasAVX + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func fAVX2(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) + +//go:noescape +func fAVX(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) + +//go:noescape +func fSSE4(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) + +func f(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) { + switch { + case useAVX2: + fAVX2(h, m, c0, c1, flag, rounds) + case useAVX: + fAVX(h, m, c0, c1, flag, rounds) + case useSSE4: + fSSE4(h, m, c0, c1, flag, rounds) + default: + fGeneric(h, m, c0, c1, flag, rounds) + } +} diff --git a/crypto/blake2b/blake2bAVX2_amd64.s b/crypto/blake2b/blake2bAVX2_amd64.s new file mode 100644 index 000000000000..4998af37dddd --- /dev/null +++ b/crypto/blake2b/blake2bAVX2_amd64.s @@ -0,0 +1,717 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine + +#include "textflag.h" + +DATA ·AVX2_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX2_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +DATA ·AVX2_iv0<>+0x10(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX2_iv0<>+0x18(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX2_iv0<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_iv1<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX2_iv1<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +DATA ·AVX2_iv1<>+0x10(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX2_iv1<>+0x18(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX2_iv1<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +DATA ·AVX2_c40<>+0x10(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x18(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX2_c40<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +DATA ·AVX2_c48<>+0x10(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x18(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX2_c48<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·AVX_iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX_iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX_iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX_iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·AVX_iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX_iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX_iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX_c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16 + +#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 +#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 +#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e +#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 +#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 + +#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \ + VPADDQ m0, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m1, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y1_Y1; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y3_Y3; \ + VPADDQ m2, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m3, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y3_Y3; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y1_Y1 + +#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E +#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26 +#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E +#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36 +#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E + +#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n +#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n +#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n +#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n +#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n + +#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01 +#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01 +#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01 +#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01 +#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01 + +#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01 + +#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8 +#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01 + +// load msg: Y12 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y12, Y12 + +// load msg: Y13 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \ + VMOVQ_SI_X13(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X13(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y13, Y13 + +// load msg: Y14 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \ + VMOVQ_SI_X14(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X14(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y14, Y14 + +// load msg: Y15 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \ + VMOVQ_SI_X15(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X15(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X11(6*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \ + LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \ + LOAD_MSG_AVX2_Y15(9, 11, 13, 15) + +#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \ + LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \ + LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \ + VMOVQ_SI_X11(11*8); \ + VPSHUFD $0x4E, 0*8(SI), X14; \ + VPINSRQ_1_SI_X11(5*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(12, 2, 7, 3) + +#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \ + VMOVQ_SI_X11(5*8); \ + VMOVDQU 11*8(SI), X12; \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + VMOVQ_SI_X13(8*8); \ + VMOVQ_SI_X11(2*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X11(13*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \ + LOAD_MSG_AVX2_Y15(14, 6, 1, 4) + +#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \ + LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \ + LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \ + LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \ + VMOVQ_SI_X15(6*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X15(10*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \ + LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X13(7*8); \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \ + LOAD_MSG_AVX2_Y15(1, 12, 8, 13) + +#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \ + LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \ + LOAD_MSG_AVX2_Y15(13, 5, 14, 9) + +#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \ + LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \ + LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \ + VMOVQ_SI_X14_0; \ + VPSHUFD $0x4E, 8*8(SI), X11; \ + VPINSRQ_1_SI_X14(6*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(7, 3, 2, 11) + +#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \ + LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \ + LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \ + LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \ + VMOVQ_SI_X15_0; \ + VMOVQ_SI_X11(6*8); \ + VPINSRQ_1_SI_X15(4*8); \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \ + VMOVQ_SI_X12(6*8); \ + VMOVQ_SI_X11(11*8); \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \ + VMOVQ_SI_X11(1*8); \ + VMOVDQU 12*8(SI), X14; \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + VMOVQ_SI_X15(2*8); \ + VMOVDQU 4*8(SI), X11; \ + VPINSRQ_1_SI_X15(7*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \ + LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \ + VMOVQ_SI_X13(2*8); \ + VPSHUFD $0x4E, 5*8(SI), X11; \ + VPINSRQ_1_SI_X13(4*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \ + VMOVQ_SI_X15(11*8); \ + VMOVQ_SI_X11(12*8); \ + VPINSRQ_1_SI_X15(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y15, Y15 + +// func fAVX2(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) +TEXT ·fAVX2(SB), 4, $64-48 // frame size = 32 + 32 byte alignment + MOVQ h+0(FP), AX + MOVQ m+8(FP), SI + MOVQ c0+16(FP), R8 + MOVQ c1+24(FP), R9 + MOVQ flag+32(FP), CX + MOVQ rounds+40(FP), BX + + MOVQ SP, DX + MOVQ SP, R10 + ADDQ $31, R10 + ANDQ $~31, R10 + MOVQ R10, SP + + MOVQ CX, 16(SP) + XORQ CX, CX + MOVQ CX, 24(SP) + + VMOVDQU ·AVX2_c40<>(SB), Y4 + VMOVDQU ·AVX2_c48<>(SB), Y5 + + VMOVDQU 0(AX), Y8 + VMOVDQU 32(AX), Y9 + VMOVDQU ·AVX2_iv0<>(SB), Y6 + VMOVDQU ·AVX2_iv1<>(SB), Y7 + + MOVQ R8, 0(SP) + MOVQ R9, 8(SP) + + VMOVDQA Y8, Y0 + VMOVDQA Y9, Y1 + VMOVDQA Y6, Y2 + VPXOR 0(SP), Y7, Y3 + +loop: + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + JMP loop + +done: + VPXOR Y0, Y8, Y8 + VPXOR Y1, Y9, Y9 + VPXOR Y2, Y8, Y8 + VPXOR Y3, Y9, Y9 + + VMOVDQU Y8, 0(AX) + VMOVDQU Y9, 32(AX) + VZEROUPPER + + MOVQ DX, SP + RET + +#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA +#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB +#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF +#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD +#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE + +#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF +#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF + +#define SHUFFLE_AVX() \ + VMOVDQA X6, X13; \ + VMOVDQA X2, X14; \ + VMOVDQA X4, X6; \ + VPUNPCKLQDQ_X13_X13_X15; \ + VMOVDQA X5, X4; \ + VMOVDQA X6, X5; \ + VPUNPCKHQDQ_X15_X7_X6; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X13_X7; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VPUNPCKHQDQ_X15_X2_X2; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X3_X3; \ + +#define SHUFFLE_AVX_INV() \ + VMOVDQA X2, X13; \ + VMOVDQA X4, X14; \ + VPUNPCKLQDQ_X2_X2_X15; \ + VMOVDQA X5, X4; \ + VPUNPCKHQDQ_X15_X3_X2; \ + VMOVDQA X14, X5; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VMOVDQA X6, X14; \ + VPUNPCKHQDQ_X15_X13_X3; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X6_X6; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X7_X7; \ + +#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + VPADDQ m0, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m1, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFD $-79, v6, v6; \ + VPSHUFD $-79, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPSHUFB c40, v2, v2; \ + VPSHUFB c40, v3, v3; \ + VPADDQ m2, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m3, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFB c48, v6, v6; \ + VPSHUFB c48, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPADDQ v2, v2, t0; \ + VPSRLQ $63, v2, v2; \ + VPXOR t0, v2, v2; \ + VPADDQ v3, v3, t0; \ + VPSRLQ $63, v3, v3; \ + VPXOR t0, v3, v3 + +// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7) +// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0 +#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X13(i2*8); \ + VMOVQ_SI_X14(i4*8); \ + VMOVQ_SI_X15(i6*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X13(i3*8); \ + VPINSRQ_1_SI_X14(i5*8); \ + VPINSRQ_1_SI_X15(i7*8) + +// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7) +#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(1*8); \ + VMOVQ_SI_X15(5*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X13(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(7*8) + +// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3) +#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \ + VPSHUFD $0x4E, 0*8(SI), X12; \ + VMOVQ_SI_X13(11*8); \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(7*8); \ + VPINSRQ_1_SI_X13(5*8); \ + VPINSRQ_1_SI_X14(2*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13) +#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \ + VMOVDQU 11*8(SI), X12; \ + VMOVQ_SI_X13(5*8); \ + VMOVQ_SI_X14(8*8); \ + VMOVQ_SI_X15(2*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14_0; \ + VPINSRQ_1_SI_X15(13*8) + +// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8) +#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(6*8); \ + VMOVQ_SI_X15_0; \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15) +#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \ + VMOVQ_SI_X12(9*8); \ + VMOVQ_SI_X13(2*8); \ + VMOVQ_SI_X14_0; \ + VMOVQ_SI_X15(4*8); \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VPINSRQ_1_SI_X15(15*8) + +// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3) +#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(11*8); \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X13(8*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11) +#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \ + MOVQ 0*8(SI), X12; \ + VPSHUFD $0x4E, 8*8(SI), X13; \ + MOVQ 7*8(SI), X14; \ + MOVQ 2*8(SI), X15; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(11*8) + +// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8) +#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \ + MOVQ 6*8(SI), X12; \ + MOVQ 11*8(SI), X13; \ + MOVQ 15*8(SI), X14; \ + MOVQ 3*8(SI), X15; \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X14(9*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10) +#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \ + MOVQ 5*8(SI), X12; \ + MOVQ 8*8(SI), X13; \ + MOVQ 0*8(SI), X14; \ + MOVQ 6*8(SI), X15; \ + VPINSRQ_1_SI_X12(15*8); \ + VPINSRQ_1_SI_X13(2*8); \ + VPINSRQ_1_SI_X14(4*8); \ + VPINSRQ_1_SI_X15(10*8) + +// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5) +#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \ + VMOVDQU 12*8(SI), X12; \ + MOVQ 1*8(SI), X13; \ + MOVQ 2*8(SI), X14; \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VMOVDQU 4*8(SI), X15 + +// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0) +#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \ + MOVQ 15*8(SI), X12; \ + MOVQ 3*8(SI), X13; \ + MOVQ 11*8(SI), X14; \ + MOVQ 12*8(SI), X15; \ + VPINSRQ_1_SI_X12(9*8); \ + VPINSRQ_1_SI_X13(13*8); \ + VPINSRQ_1_SI_X14(14*8); \ + VPINSRQ_1_SI_X15_0 + +// func fAVX(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) +TEXT ·fAVX(SB), 4, $24-48 // frame size = 8 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ m+8(FP), SI + MOVQ c0+16(FP), R8 + MOVQ c1+24(FP), R9 + MOVQ flag+32(FP), CX + MOVQ rounds+40(FP), BX + + MOVQ SP, BP + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + MOVQ R10, SP + + VMOVDQU ·AVX_c40<>(SB), X0 + VMOVDQU ·AVX_c48<>(SB), X1 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + + VMOVDQU ·AVX_iv3<>(SB), X0 + VMOVDQA X0, 0(SP) + XORQ CX, 0(SP) // 0(SP) = ·AVX_iv3 ^ (CX || 0) + + VMOVDQU 0(AX), X10 + VMOVDQU 16(AX), X11 + VMOVDQU 32(AX), X2 + VMOVDQU 48(AX), X3 + + VMOVQ_R8_X15 + VPINSRQ_1_R9_X15 + + VMOVDQA X10, X0 + VMOVDQA X11, X1 + VMOVDQU ·AVX_iv0<>(SB), X4 + VMOVDQU ·AVX_iv1<>(SB), X5 + VMOVDQU ·AVX_iv2<>(SB), X6 + + VPXOR X15, X6, X6 + VMOVDQA 0(SP), X7 + +loop: + SUBQ $1, BX; JCS done + LOAD_MSG_AVX_0_2_4_6_1_3_5_7() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_1_0_11_5_12_2_7_3() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX_11_12_5_15_8_0_2_13() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_2_5_4_15_6_10_0_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX_9_5_2_10_0_7_4_15() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX_2_6_0_8_12_10_11_3() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_0_6_9_8_7_3_2_11() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_5_15_8_2_0_4_6_10() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX_6_14_11_0_15_9_3_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_12_13_1_10_2_7_4_5() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + SUBQ $1, BX; JCS done + LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_15_9_3_13_11_14_12_0() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + JMP loop + +done: + VMOVDQU 32(AX), X14 + VMOVDQU 48(AX), X15 + VPXOR X0, X10, X10 + VPXOR X1, X11, X11 + VPXOR X2, X14, X14 + VPXOR X3, X15, X15 + VPXOR X4, X10, X10 + VPXOR X5, X11, X11 + VPXOR X6, X14, X2 + VPXOR X7, X15, X3 + VMOVDQU X2, 32(AX) + VMOVDQU X3, 48(AX) + + VMOVDQU X10, 0(AX) + VMOVDQU X11, 16(AX) + VZEROUPPER + + MOVQ BP, SP + RET diff --git a/crypto/blake2b/blake2b_amd64.go b/crypto/blake2b/blake2b_amd64.go new file mode 100644 index 000000000000..4dbe90da8f1a --- /dev/null +++ b/crypto/blake2b/blake2b_amd64.go @@ -0,0 +1,24 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7,amd64,!gccgo,!appengine + +package blake2b + +import "golang.org/x/sys/cpu" + +func init() { + useSSE4 = cpu.X86.HasSSE41 +} + +//go:noescape +func fSSE4(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) + +func f(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) { + if useSSE4 { + fSSE4(h, m, c0, c1, flag, rounds) + } else { + fGeneric(h, m, c0, c1, flag, rounds) + } +} diff --git a/crypto/blake2b/blake2b_amd64.s b/crypto/blake2b/blake2b_amd64.s new file mode 100644 index 000000000000..ce4b56d1053c --- /dev/null +++ b/crypto/blake2b/blake2b_amd64.s @@ -0,0 +1,253 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +#include "textflag.h" + +DATA ·iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + PADDQ m0, v0; \ + PADDQ m1, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v6, v6; \ + PSHUFD $0xB1, v7, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + PSHUFB c40, v2; \ + PSHUFB c40, v3; \ + PADDQ m2, v0; \ + PADDQ m3, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFB c48, v6; \ + PSHUFB c48, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + MOVOU v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVOU v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG(m0, m1, m2, m3, i0, i1, i2, i3, i4, i5, i6, i7) \ + MOVQ i0*8(SI), m0; \ + PINSRQ $1, i1*8(SI), m0; \ + MOVQ i2*8(SI), m1; \ + PINSRQ $1, i3*8(SI), m1; \ + MOVQ i4*8(SI), m2; \ + PINSRQ $1, i5*8(SI), m2; \ + MOVQ i6*8(SI), m3; \ + PINSRQ $1, i7*8(SI), m3 + +// func fSSE4(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) +TEXT ·fSSE4(SB), 4, $24-48 // frame size = 8 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ m+8(FP), SI + MOVQ c0+16(FP), R8 + MOVQ c1+24(FP), R9 + MOVQ flag+32(FP), CX + MOVQ rounds+40(FP), BX + + MOVQ SP, BP + MOVQ SP, R10 + ADDQ $15, R10 + ANDQ $~15, R10 + MOVQ R10, SP + + MOVOU ·iv3<>(SB), X0 + MOVO X0, 0(SP) + XORQ CX, 0(SP) // 0(SP) = ·iv3 ^ (CX || 0) + + MOVOU ·c40<>(SB), X13 + MOVOU ·c48<>(SB), X14 + + MOVOU 0(AX), X12 + MOVOU 16(AX), X15 + + MOVQ R8, X8 + PINSRQ $1, R9, X8 + + MOVO X12, X0 + MOVO X15, X1 + MOVOU 32(AX), X2 + MOVOU 48(AX), X3 + MOVOU ·iv0<>(SB), X4 + MOVOU ·iv1<>(SB), X5 + MOVOU ·iv2<>(SB), X6 + + PXOR X8, X6 + MOVO 0(SP), X7 + +loop: + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 0, 2, 4, 6, 1, 3, 5, 7) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 8, 10, 12, 14, 9, 11, 13, 15) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 14, 4, 9, 13, 10, 8, 15, 6) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 1, 0, 11, 5, 12, 2, 7, 3) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 11, 12, 5, 15, 8, 0, 2, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 2, 5, 4, 15, 6, 10, 0, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 9, 5, 2, 10, 0, 7, 4, 15) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 2, 6, 0, 8, 12, 10, 11, 3) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 0, 6, 9, 8, 7, 3, 2, 11) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 5, 15, 8, 2, 0, 4, 6, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 6, 14, 11, 0, 15, 9, 3, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 12, 13, 1, 10, 2, 7, 4, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + SUBQ $1, BX; JCS done + LOAD_MSG(X8, X9, X10, X11, 10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, 15, 9, 3, 13, 11, 14, 12, 0) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + JMP loop + +done: + MOVOU 32(AX), X10 + MOVOU 48(AX), X11 + PXOR X0, X12 + PXOR X1, X15 + PXOR X2, X10 + PXOR X3, X11 + PXOR X4, X12 + PXOR X5, X15 + PXOR X6, X10 + PXOR X7, X11 + MOVOU X10, 32(AX) + MOVOU X11, 48(AX) + + MOVOU X12, 0(AX) + MOVOU X15, 16(AX) + + MOVQ BP, SP + RET diff --git a/crypto/blake2b/blake2b_f_fuzz.go b/crypto/blake2b/blake2b_f_fuzz.go new file mode 100644 index 000000000000..ab73342803f8 --- /dev/null +++ b/crypto/blake2b/blake2b_f_fuzz.go @@ -0,0 +1,57 @@ +// +build gofuzz + +package blake2b + +import ( + "encoding/binary" +) + +func Fuzz(data []byte) int { + // Make sure the data confirms to the input model + if len(data) != 211 { + return 0 + } + // Parse everything and call all the implementations + var ( + rounds = binary.BigEndian.Uint16(data[0:2]) + + h [8]uint64 + m [16]uint64 + t [2]uint64 + f uint64 + ) + for i := 0; i < 8; i++ { + offset := 2 + i*8 + h[i] = binary.LittleEndian.Uint64(data[offset : offset+8]) + } + for i := 0; i < 16; i++ { + offset := 66 + i*8 + m[i] = binary.LittleEndian.Uint64(data[offset : offset+8]) + } + t[0] = binary.LittleEndian.Uint64(data[194:202]) + t[1] = binary.LittleEndian.Uint64(data[202:210]) + + if data[210]%2 == 1 { // Avoid spinning the fuzzer to hit 0/1 + f = 0xFFFFFFFFFFFFFFFF + } + // Run the blake2b compression on all instruction sets and cross reference + want := h + fGeneric(&want, &m, t[0], t[1], f, uint64(rounds)) + + have := h + fSSE4(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("SSE4 mismatches generic algo") + } + have = h + fAVX(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("AVX mismatches generic algo") + } + have = h + fAVX2(&have, &m, t[0], t[1], f, uint64(rounds)) + if have != want { + panic("AVX2 mismatches generic algo") + } + return 1 +} diff --git a/crypto/blake2b/blake2b_f_test.go b/crypto/blake2b/blake2b_f_test.go new file mode 100644 index 000000000000..4e07d131cda6 --- /dev/null +++ b/crypto/blake2b/blake2b_f_test.go @@ -0,0 +1,59 @@ +package blake2b + +import ( + "fmt" + "reflect" + "testing" +) + +func TestF(t *testing.T) { + for i, test := range testVectorsF { + t.Run(fmt.Sprintf("test vector %v", i), func(t *testing.T) { + //toEthereumTestCase(test) + + h := test.hIn + F(&h, test.m, test.c, test.f, test.rounds) + + if !reflect.DeepEqual(test.hOut, h) { + t.Errorf("Unexpected result\nExpected: [%#x]\nActual: [%#x]\n", test.hOut, h) + } + }) + } +} + +type testVector struct { + hIn [8]uint64 + m [16]uint64 + c [2]uint64 + f bool + rounds uint32 + hOut [8]uint64 +} + +// https://tools.ietf.org/html/rfc7693#appendix-A +var testVectorsF = []testVector{ + { + hIn: [8]uint64{ + 0x6a09e667f2bdc948, 0xbb67ae8584caa73b, + 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, + 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, + }, + m: [16]uint64{ + 0x0000000000636261, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, + 0x0000000000000000, + }, + c: [2]uint64{3, 0}, + f: true, + rounds: 12, + hOut: [8]uint64{ + 0x0D4D1C983FA580BA, 0xE9F6129FB697276A, 0xB7C45A68142F214C, + 0xD1A2FFDB6FBB124B, 0x2D79AB2A39C5877D, 0x95CC3345DED552C2, + 0x5A92F1DBA88AD318, 0x239900D4ED8623B9, + }, + }, +} diff --git a/crypto/blake2b/blake2b_generic.go b/crypto/blake2b/blake2b_generic.go new file mode 100644 index 000000000000..35c40cc924f8 --- /dev/null +++ b/crypto/blake2b/blake2b_generic.go @@ -0,0 +1,180 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "encoding/binary" + "math/bits" +) + +// the precomputed values for BLAKE2b +// there are 10 16-byte arrays - one for each round +// the entries are calculated from the sigma constants. +var precomputed = [10][16]byte{ + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, + {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, + {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, + {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, + {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, + {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, + {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, + {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, + {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, +} + +func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + var m [16]uint64 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + for j := range m { + m[j] = binary.LittleEndian.Uint64(blocks[i:]) + i += 8 + } + fGeneric(h, &m, c0, c1, flag, 12) + } + c[0], c[1] = c0, c1 +} + +func fGeneric(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) { + v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] + v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] + v12 ^= c0 + v13 ^= c1 + v14 ^= flag + + for i := 0; i < int(rounds); i++ { + s := &(precomputed[i%10]) + + v0 += m[s[0]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -32) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -24) + v1 += m[s[1]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -32) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -24) + v2 += m[s[2]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -32) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -24) + v3 += m[s[3]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -32) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -24) + + v0 += m[s[4]] + v0 += v4 + v12 ^= v0 + v12 = bits.RotateLeft64(v12, -16) + v8 += v12 + v4 ^= v8 + v4 = bits.RotateLeft64(v4, -63) + v1 += m[s[5]] + v1 += v5 + v13 ^= v1 + v13 = bits.RotateLeft64(v13, -16) + v9 += v13 + v5 ^= v9 + v5 = bits.RotateLeft64(v5, -63) + v2 += m[s[6]] + v2 += v6 + v14 ^= v2 + v14 = bits.RotateLeft64(v14, -16) + v10 += v14 + v6 ^= v10 + v6 = bits.RotateLeft64(v6, -63) + v3 += m[s[7]] + v3 += v7 + v15 ^= v3 + v15 = bits.RotateLeft64(v15, -16) + v11 += v15 + v7 ^= v11 + v7 = bits.RotateLeft64(v7, -63) + + v0 += m[s[8]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -32) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -24) + v1 += m[s[9]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -32) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -24) + v2 += m[s[10]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -32) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -24) + v3 += m[s[11]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -32) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -24) + + v0 += m[s[12]] + v0 += v5 + v15 ^= v0 + v15 = bits.RotateLeft64(v15, -16) + v10 += v15 + v5 ^= v10 + v5 = bits.RotateLeft64(v5, -63) + v1 += m[s[13]] + v1 += v6 + v12 ^= v1 + v12 = bits.RotateLeft64(v12, -16) + v11 += v12 + v6 ^= v11 + v6 = bits.RotateLeft64(v6, -63) + v2 += m[s[14]] + v2 += v7 + v13 ^= v2 + v13 = bits.RotateLeft64(v13, -16) + v8 += v13 + v7 ^= v8 + v7 = bits.RotateLeft64(v7, -63) + v3 += m[s[15]] + v3 += v4 + v14 ^= v3 + v14 = bits.RotateLeft64(v14, -16) + v9 += v14 + v4 ^= v9 + v4 = bits.RotateLeft64(v4, -63) + } + h[0] ^= v0 ^ v8 + h[1] ^= v1 ^ v9 + h[2] ^= v2 ^ v10 + h[3] ^= v3 ^ v11 + h[4] ^= v4 ^ v12 + h[5] ^= v5 ^ v13 + h[6] ^= v6 ^ v14 + h[7] ^= v7 ^ v15 +} diff --git a/crypto/blake2b/blake2b_ref.go b/crypto/blake2b/blake2b_ref.go new file mode 100644 index 000000000000..9d0ade473a14 --- /dev/null +++ b/crypto/blake2b/blake2b_ref.go @@ -0,0 +1,11 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package blake2b + +func f(h *[8]uint64, m *[16]uint64, c0, c1 uint64, flag uint64, rounds uint64) { + fGeneric(h, m, c0, c1, flag, rounds) +} diff --git a/crypto/blake2b/blake2b_test.go b/crypto/blake2b/blake2b_test.go new file mode 100644 index 000000000000..9e7297da160f --- /dev/null +++ b/crypto/blake2b/blake2b_test.go @@ -0,0 +1,871 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "bytes" + "encoding" + "encoding/hex" + "fmt" + "hash" + "io" + "testing" +) + +func fromHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +func TestHashes(t *testing.T) { + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + + if useAVX2 { + t.Log("AVX2 version") + testHashes(t) + useAVX2 = false + } + if useAVX { + t.Log("AVX version") + testHashes(t) + useAVX = false + } + if useSSE4 { + t.Log("SSE4 version") + testHashes(t) + useSSE4 = false + } + t.Log("generic version") + testHashes(t) +} + +func TestHashes2X(t *testing.T) { + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + + if useAVX2 { + t.Log("AVX2 version") + testHashes2X(t) + useAVX2 = false + } + if useAVX { + t.Log("AVX version") + testHashes2X(t) + useAVX = false + } + if useSSE4 { + t.Log("SSE4 version") + testHashes2X(t) + useSSE4 = false + } + t.Log("generic version") + testHashes2X(t) +} + +func TestMarshal(t *testing.T) { + input := make([]byte, 255) + for i := range input { + input[i] = byte(i) + } + for _, size := range []int{Size, Size256, Size384, 12, 25, 63} { + for i := 0; i < 256; i++ { + h, err := New(size, nil) + if err != nil { + t.Fatalf("size=%d, len(input)=%d: error from New(%v, nil): %v", size, i, size, err) + } + h2, err := New(size, nil) + if err != nil { + t.Fatalf("size=%d, len(input)=%d: error from New(%v, nil): %v", size, i, size, err) + } + + h.Write(input[:i/2]) + halfstate, err := h.(encoding.BinaryMarshaler).MarshalBinary() + if err != nil { + t.Fatalf("size=%d, len(input)=%d: could not marshal: %v", size, i, err) + } + err = h2.(encoding.BinaryUnmarshaler).UnmarshalBinary(halfstate) + if err != nil { + t.Fatalf("size=%d, len(input)=%d: could not unmarshal: %v", size, i, err) + } + + h.Write(input[i/2 : i]) + sum := h.Sum(nil) + h2.Write(input[i/2 : i]) + sum2 := h2.Sum(nil) + + if !bytes.Equal(sum, sum2) { + t.Fatalf("size=%d, len(input)=%d: results do not match; sum = %v, sum2 = %v", size, i, sum, sum2) + } + + h3, err := New(size, nil) + if err != nil { + t.Fatalf("size=%d, len(input)=%d: error from New(%v, nil): %v", size, i, size, err) + } + h3.Write(input[:i]) + sum3 := h3.Sum(nil) + if !bytes.Equal(sum, sum3) { + t.Fatalf("size=%d, len(input)=%d: sum = %v, want %v", size, i, sum, sum3) + } + } + } +} + +func testHashes(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f") + + input := make([]byte, 255) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes { + h, err := New512(key) + if err != nil { + t.Fatalf("#%d: error from New512: %v", i, err) + } + + h.Write(input[:i]) + sum := h.Sum(nil) + + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < i; j++ { + h.Write(input[j : j+1]) + } + + sum = h.Sum(sum[:0]) + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } +} + +func testHashes2X(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f") + + input := make([]byte, 256) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes2X { + length := uint32(len(expectedHex) / 2) + sum := make([]byte, int(length)) + + h, err := NewXOF(length, key) + if err != nil { + t.Fatalf("#%d: error from NewXOF: %v", i, err) + } + + if _, err := h.Write(input); err != nil { + t.Fatalf("#%d (single write): error from Write: %v", i, err) + } + if _, err := h.Read(sum); err != nil { + t.Fatalf("#%d (single write): error from Read: %v", i, err) + } + if n, err := h.Read(sum); n != 0 || err != io.EOF { + t.Fatalf("#%d (single write): Read did not return (0, io.EOF) after exhaustion, got (%v, %v)", i, n, err) + } + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < len(input); j++ { + h.Write(input[j : j+1]) + } + for j := 0; j < len(sum); j++ { + h = h.Clone() + if _, err := h.Read(sum[j : j+1]); err != nil { + t.Fatalf("#%d (byte-by-byte) - Read %d: error from Read: %v", i, j, err) + } + } + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } + + h, err := NewXOF(OutputLengthUnknown, key) + if err != nil { + t.Fatalf("#unknown length: error from NewXOF: %v", err) + } + if _, err := h.Write(input); err != nil { + t.Fatalf("#unknown length: error from Write: %v", err) + } + + var result [64]byte + if n, err := h.Read(result[:]); err != nil { + t.Fatalf("#unknown length: error from Read: %v", err) + } else if n != len(result) { + t.Fatalf("#unknown length: Read returned %d bytes, want %d", n, len(result)) + } + + const expected = "3dbba8516da76bf7330055c66ea36cf1005e92714262b24d9710f51d9e126406e1bcd6497059f9331f1091c3634b695428d475ed432f987040575520a1c29f5e" + if fmt.Sprintf("%x", result) != expected { + t.Fatalf("#unknown length: bad result %x, wanted %s", result, expected) + } +} + +func generateSequence(out []byte, seed uint32) { + a := 0xDEAD4BAD * seed // prime + b := uint32(1) + + for i := range out { // fill the buf + a, b = b, a+b + out[i] = byte(b >> 24) + } +} + +func computeMAC(msg []byte, hashSize int, key []byte) (sum []byte) { + var h hash.Hash + switch hashSize { + case Size: + h, _ = New512(key) + case Size384: + h, _ = New384(key) + case Size256: + h, _ = New256(key) + case 20: + h, _ = newDigest(20, key) + default: + panic("unexpected hashSize") + } + + h.Write(msg) + return h.Sum(sum) +} + +func computeHash(msg []byte, hashSize int) (sum []byte) { + switch hashSize { + case Size: + hash := Sum512(msg) + return hash[:] + case Size384: + hash := Sum384(msg) + return hash[:] + case Size256: + hash := Sum256(msg) + return hash[:] + case 20: + var hash [64]byte + checkSum(&hash, 20, msg) + return hash[:20] + default: + panic("unexpected hashSize") + } +} + +// Test function from RFC 7693. +func TestSelfTest(t *testing.T) { + hashLens := [4]int{20, 32, 48, 64} + msgLens := [6]int{0, 3, 128, 129, 255, 1024} + + msg := make([]byte, 1024) + key := make([]byte, 64) + + h, _ := New256(nil) + for _, hashSize := range hashLens { + for _, msgLength := range msgLens { + generateSequence(msg[:msgLength], uint32(msgLength)) // unkeyed hash + + md := computeHash(msg[:msgLength], hashSize) + h.Write(md) + + generateSequence(key[:], uint32(hashSize)) // keyed hash + md = computeMAC(msg[:msgLength], hashSize, key[:hashSize]) + h.Write(md) + } + } + + sum := h.Sum(nil) + expected := [32]byte{ + 0xc2, 0x3a, 0x78, 0x00, 0xd9, 0x81, 0x23, 0xbd, + 0x10, 0xf5, 0x06, 0xc6, 0x1e, 0x29, 0xda, 0x56, + 0x03, 0xd7, 0x63, 0xb8, 0xbb, 0xad, 0x2e, 0x73, + 0x7f, 0x5e, 0x76, 0x5a, 0x7b, 0xcc, 0xd4, 0x75, + } + if !bytes.Equal(sum, expected[:]) { + t.Fatalf("got %x, wanted %x", sum, expected) + } +} + +// Benchmarks + +func benchmarkSum(b *testing.B, size int, sse4, avx, avx2 bool) { + // Enable the correct set of instructions + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + + data := make([]byte, size) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sum512(data) + } +} + +func benchmarkWrite(b *testing.B, size int, sse4, avx, avx2 bool) { + // Enable the correct set of instructions + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + + data := make([]byte, size) + h, _ := New512(nil) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + h.Write(data) + } +} + +func BenchmarkWrite128Generic(b *testing.B) { benchmarkWrite(b, 128, false, false, false) } +func BenchmarkWrite1KGeneric(b *testing.B) { benchmarkWrite(b, 1024, false, false, false) } +func BenchmarkWrite128SSE4(b *testing.B) { benchmarkWrite(b, 128, true, false, false) } +func BenchmarkWrite1KSSE4(b *testing.B) { benchmarkWrite(b, 1024, true, false, false) } +func BenchmarkWrite128AVX(b *testing.B) { benchmarkWrite(b, 128, false, true, false) } +func BenchmarkWrite1KAVX(b *testing.B) { benchmarkWrite(b, 1024, false, true, false) } +func BenchmarkWrite128AVX2(b *testing.B) { benchmarkWrite(b, 128, false, false, true) } +func BenchmarkWrite1KAVX2(b *testing.B) { benchmarkWrite(b, 1024, false, false, true) } + +func BenchmarkSum128Generic(b *testing.B) { benchmarkSum(b, 128, false, false, false) } +func BenchmarkSum1KGeneric(b *testing.B) { benchmarkSum(b, 1024, false, false, false) } +func BenchmarkSum128SSE4(b *testing.B) { benchmarkSum(b, 128, true, false, false) } +func BenchmarkSum1KSSE4(b *testing.B) { benchmarkSum(b, 1024, true, false, false) } +func BenchmarkSum128AVX(b *testing.B) { benchmarkSum(b, 128, false, true, false) } +func BenchmarkSum1KAVX(b *testing.B) { benchmarkSum(b, 1024, false, true, false) } +func BenchmarkSum128AVX2(b *testing.B) { benchmarkSum(b, 128, false, false, true) } +func BenchmarkSum1KAVX2(b *testing.B) { benchmarkSum(b, 1024, false, false, true) } + +// These values were taken from https://blake2.net/blake2b-test.txt. +var hashes = []string{ + "10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568", + "961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd", + "da2cfbe2d8409a0f38026113884f84b50156371ae304c4430173d08a99d9fb1b983164a3770706d537f49e0c916d9f32b95cc37a95b99d857436f0232c88a965", + "33d0825dddf7ada99b0e7e307104ad07ca9cfd9692214f1561356315e784f3e5a17e364ae9dbb14cb2036df932b77f4b292761365fb328de7afdc6d8998f5fc1", + "beaa5a3d08f3807143cf621d95cd690514d0b49efff9c91d24b59241ec0eefa5f60196d407048bba8d2146828ebcb0488d8842fd56bb4f6df8e19c4b4daab8ac", + "098084b51fd13deae5f4320de94a688ee07baea2800486689a8636117b46c1f4c1f6af7f74ae7c857600456a58a3af251dc4723a64cc7c0a5ab6d9cac91c20bb", + "6044540d560853eb1c57df0077dd381094781cdb9073e5b1b3d3f6c7829e12066bbaca96d989a690de72ca3133a83652ba284a6d62942b271ffa2620c9e75b1f", + "7a8cfe9b90f75f7ecb3acc053aaed6193112b6f6a4aeeb3f65d3de541942deb9e2228152a3c4bbbe72fc3b12629528cfbb09fe630f0474339f54abf453e2ed52", + "380beaf6ea7cc9365e270ef0e6f3a64fb902acae51dd5512f84259ad2c91f4bc4108db73192a5bbfb0cbcf71e46c3e21aee1c5e860dc96e8eb0b7b8426e6abe9", + "60fe3c4535e1b59d9a61ea8500bfac41a69dffb1ceadd9aca323e9a625b64da5763bad7226da02b9c8c4f1a5de140ac5a6c1124e4f718ce0b28ea47393aa6637", + "4fe181f54ad63a2983feaaf77d1e7235c2beb17fa328b6d9505bda327df19fc37f02c4b6f0368ce23147313a8e5738b5fa2a95b29de1c7f8264eb77b69f585cd", + "f228773ce3f3a42b5f144d63237a72d99693adb8837d0e112a8a0f8ffff2c362857ac49c11ec740d1500749dac9b1f4548108bf3155794dcc9e4082849e2b85b", + "962452a8455cc56c8511317e3b1f3b2c37df75f588e94325fdd77070359cf63a9ae6e930936fdf8e1e08ffca440cfb72c28f06d89a2151d1c46cd5b268ef8563", + "43d44bfa18768c59896bf7ed1765cb2d14af8c260266039099b25a603e4ddc5039d6ef3a91847d1088d401c0c7e847781a8a590d33a3c6cb4df0fab1c2f22355", + "dcffa9d58c2a4ca2cdbb0c7aa4c4c1d45165190089f4e983bb1c2cab4aaeff1fa2b5ee516fecd780540240bf37e56c8bcca7fab980e1e61c9400d8a9a5b14ac6", + "6fbf31b45ab0c0b8dad1c0f5f4061379912dde5aa922099a030b725c73346c524291adef89d2f6fd8dfcda6d07dad811a9314536c2915ed45da34947e83de34e", + "a0c65bddde8adef57282b04b11e7bc8aab105b99231b750c021f4a735cb1bcfab87553bba3abb0c3e64a0b6955285185a0bd35fb8cfde557329bebb1f629ee93", + "f99d815550558e81eca2f96718aed10d86f3f1cfb675cce06b0eff02f617c5a42c5aa760270f2679da2677c5aeb94f1142277f21c7f79f3c4f0cce4ed8ee62b1", + "95391da8fc7b917a2044b3d6f5374e1ca072b41454d572c7356c05fd4bc1e0f40b8bb8b4a9f6bce9be2c4623c399b0dca0dab05cb7281b71a21b0ebcd9e55670", + "04b9cd3d20d221c09ac86913d3dc63041989a9a1e694f1e639a3ba7e451840f750c2fc191d56ad61f2e7936bc0ac8e094b60caeed878c18799045402d61ceaf9", + "ec0e0ef707e4ed6c0c66f9e089e4954b058030d2dd86398fe84059631f9ee591d9d77375355149178c0cf8f8e7c49ed2a5e4f95488a2247067c208510fadc44c", + "9a37cce273b79c09913677510eaf7688e89b3314d3532fd2764c39de022a2945b5710d13517af8ddc0316624e73bec1ce67df15228302036f330ab0cb4d218dd", + "4cf9bb8fb3d4de8b38b2f262d3c40f46dfe747e8fc0a414c193d9fcf753106ce47a18f172f12e8a2f1c26726545358e5ee28c9e2213a8787aafbc516d2343152", + "64e0c63af9c808fd893137129867fd91939d53f2af04be4fa268006100069b2d69daa5c5d8ed7fddcb2a70eeecdf2b105dd46a1e3b7311728f639ab489326bc9", + "5e9c93158d659b2def06b0c3c7565045542662d6eee8a96a89b78ade09fe8b3dcc096d4fe48815d88d8f82620156602af541955e1f6ca30dce14e254c326b88f", + "7775dff889458dd11aef417276853e21335eb88e4dec9cfb4e9edb49820088551a2ca60339f12066101169f0dfe84b098fddb148d9da6b3d613df263889ad64b", + "f0d2805afbb91f743951351a6d024f9353a23c7ce1fc2b051b3a8b968c233f46f50f806ecb1568ffaa0b60661e334b21dde04f8fa155ac740eeb42e20b60d764", + "86a2af316e7d7754201b942e275364ac12ea8962ab5bd8d7fb276dc5fbffc8f9a28cae4e4867df6780d9b72524160927c855da5b6078e0b554aa91e31cb9ca1d", + "10bdf0caa0802705e706369baf8a3f79d72c0a03a80675a7bbb00be3a45e516424d1ee88efb56f6d5777545ae6e27765c3a8f5e493fc308915638933a1dfee55", + "b01781092b1748459e2e4ec178696627bf4ebafebba774ecf018b79a68aeb84917bf0b84bb79d17b743151144cd66b7b33a4b9e52c76c4e112050ff5385b7f0b", + "c6dbc61dec6eaeac81e3d5f755203c8e220551534a0b2fd105a91889945a638550204f44093dd998c076205dffad703a0e5cd3c7f438a7e634cd59fededb539e", + "eba51acffb4cea31db4b8d87e9bf7dd48fe97b0253ae67aa580f9ac4a9d941f2bea518ee286818cc9f633f2a3b9fb68e594b48cdd6d515bf1d52ba6c85a203a7", + "86221f3ada52037b72224f105d7999231c5e5534d03da9d9c0a12acb68460cd375daf8e24386286f9668f72326dbf99ba094392437d398e95bb8161d717f8991", + "5595e05c13a7ec4dc8f41fb70cb50a71bce17c024ff6de7af618d0cc4e9c32d9570d6d3ea45b86525491030c0d8f2b1836d5778c1ce735c17707df364d054347", + "ce0f4f6aca89590a37fe034dd74dd5fa65eb1cbd0a41508aaddc09351a3cea6d18cb2189c54b700c009f4cbf0521c7ea01be61c5ae09cb54f27bc1b44d658c82", + "7ee80b06a215a3bca970c77cda8761822bc103d44fa4b33f4d07dcb997e36d55298bceae12241b3fa07fa63be5576068da387b8d5859aeab701369848b176d42", + "940a84b6a84d109aab208c024c6ce9647676ba0aaa11f86dbb7018f9fd2220a6d901a9027f9abcf935372727cbf09ebd61a2a2eeb87653e8ecad1bab85dc8327", + "2020b78264a82d9f4151141adba8d44bf20c5ec062eee9b595a11f9e84901bf148f298e0c9f8777dcdbc7cc4670aac356cc2ad8ccb1629f16f6a76bcefbee760", + "d1b897b0e075ba68ab572adf9d9c436663e43eb3d8e62d92fc49c9be214e6f27873fe215a65170e6bea902408a25b49506f47babd07cecf7113ec10c5dd31252", + "b14d0c62abfa469a357177e594c10c194243ed2025ab8aa5ad2fa41ad318e0ff48cd5e60bec07b13634a711d2326e488a985f31e31153399e73088efc86a5c55", + "4169c5cc808d2697dc2a82430dc23e3cd356dc70a94566810502b8d655b39abf9e7f902fe717e0389219859e1945df1af6ada42e4ccda55a197b7100a30c30a1", + "258a4edb113d66c839c8b1c91f15f35ade609f11cd7f8681a4045b9fef7b0b24c82cda06a5f2067b368825e3914e53d6948ede92efd6e8387fa2e537239b5bee", + "79d2d8696d30f30fb34657761171a11e6c3f1e64cbe7bebee159cb95bfaf812b4f411e2f26d9c421dc2c284a3342d823ec293849e42d1e46b0a4ac1e3c86abaa", + "8b9436010dc5dee992ae38aea97f2cd63b946d94fedd2ec9671dcde3bd4ce9564d555c66c15bb2b900df72edb6b891ebcadfeff63c9ea4036a998be7973981e7", + "c8f68e696ed28242bf997f5b3b34959508e42d613810f1e2a435c96ed2ff560c7022f361a9234b9837feee90bf47922ee0fd5f8ddf823718d86d1e16c6090071", + "b02d3eee4860d5868b2c39ce39bfe81011290564dd678c85e8783f29302dfc1399ba95b6b53cd9ebbf400cca1db0ab67e19a325f2d115812d25d00978ad1bca4", + "7693ea73af3ac4dad21ca0d8da85b3118a7d1c6024cfaf557699868217bc0c2f44a199bc6c0edd519798ba05bd5b1b4484346a47c2cadf6bf30b785cc88b2baf", + "a0e5c1c0031c02e48b7f09a5e896ee9aef2f17fc9e18e997d7f6cac7ae316422c2b1e77984e5f3a73cb45deed5d3f84600105e6ee38f2d090c7d0442ea34c46d", + "41daa6adcfdb69f1440c37b596440165c15ada596813e2e22f060fcd551f24dee8e04ba6890387886ceec4a7a0d7fc6b44506392ec3822c0d8c1acfc7d5aebe8", + "14d4d40d5984d84c5cf7523b7798b254e275a3a8cc0a1bd06ebc0bee726856acc3cbf516ff667cda2058ad5c3412254460a82c92187041363cc77a4dc215e487", + "d0e7a1e2b9a447fee83e2277e9ff8010c2f375ae12fa7aaa8ca5a6317868a26a367a0b69fbc1cf32a55d34eb370663016f3d2110230eba754028a56f54acf57c", + "e771aa8db5a3e043e8178f39a0857ba04a3f18e4aa05743cf8d222b0b095825350ba422f63382a23d92e4149074e816a36c1cd28284d146267940b31f8818ea2", + "feb4fd6f9e87a56bef398b3284d2bda5b5b0e166583a66b61e538457ff0584872c21a32962b9928ffab58de4af2edd4e15d8b35570523207ff4e2a5aa7754caa", + "462f17bf005fb1c1b9e671779f665209ec2873e3e411f98dabf240a1d5ec3f95ce6796b6fc23fe171903b502023467dec7273ff74879b92967a2a43a5a183d33", + "d3338193b64553dbd38d144bea71c5915bb110e2d88180dbc5db364fd6171df317fc7268831b5aef75e4342b2fad8797ba39eddcef80e6ec08159350b1ad696d", + "e1590d585a3d39f7cb599abd479070966409a6846d4377acf4471d065d5db94129cc9be92573b05ed226be1e9b7cb0cabe87918589f80dadd4ef5ef25a93d28e", + "f8f3726ac5a26cc80132493a6fedcb0e60760c09cfc84cad178175986819665e76842d7b9fedf76dddebf5d3f56faaad4477587af21606d396ae570d8e719af2", + "30186055c07949948183c850e9a756cc09937e247d9d928e869e20bafc3cd9721719d34e04a0899b92c736084550186886efba2e790d8be6ebf040b209c439a4", + "f3c4276cb863637712c241c444c5cc1e3554e0fddb174d035819dd83eb700b4ce88df3ab3841ba02085e1a99b4e17310c5341075c0458ba376c95a6818fbb3e2", + "0aa007c4dd9d5832393040a1583c930bca7dc5e77ea53add7e2b3f7c8e231368043520d4a3ef53c969b6bbfd025946f632bd7f765d53c21003b8f983f75e2a6a", + "08e9464720533b23a04ec24f7ae8c103145f765387d738777d3d343477fd1c58db052142cab754ea674378e18766c53542f71970171cc4f81694246b717d7564", + "d37ff7ad297993e7ec21e0f1b4b5ae719cdc83c5db687527f27516cbffa822888a6810ee5c1ca7bfe3321119be1ab7bfa0a502671c8329494df7ad6f522d440f", + "dd9042f6e464dcf86b1262f6accfafbd8cfd902ed3ed89abf78ffa482dbdeeb6969842394c9a1168ae3d481a017842f660002d42447c6b22f7b72f21aae021c9", + "bd965bf31e87d70327536f2a341cebc4768eca275fa05ef98f7f1b71a0351298de006fba73fe6733ed01d75801b4a928e54231b38e38c562b2e33ea1284992fa", + "65676d800617972fbd87e4b9514e1c67402b7a331096d3bfac22f1abb95374abc942f16e9ab0ead33b87c91968a6e509e119ff07787b3ef483e1dcdccf6e3022", + "939fa189699c5d2c81ddd1ffc1fa207c970b6a3685bb29ce1d3e99d42f2f7442da53e95a72907314f4588399a3ff5b0a92beb3f6be2694f9f86ecf2952d5b41c", + "c516541701863f91005f314108ceece3c643e04fc8c42fd2ff556220e616aaa6a48aeb97a84bad74782e8dff96a1a2fa949339d722edcaa32b57067041df88cc", + "987fd6e0d6857c553eaebb3d34970a2c2f6e89a3548f492521722b80a1c21a153892346d2cba6444212d56da9a26e324dccbc0dcde85d4d2ee4399eec5a64e8f", + "ae56deb1c2328d9c4017706bce6e99d41349053ba9d336d677c4c27d9fd50ae6aee17e853154e1f4fe7672346da2eaa31eea53fcf24a22804f11d03da6abfc2b", + "49d6a608c9bde4491870498572ac31aac3fa40938b38a7818f72383eb040ad39532bc06571e13d767e6945ab77c0bdc3b0284253343f9f6c1244ebf2ff0df866", + "da582ad8c5370b4469af862aa6467a2293b2b28bd80ae0e91f425ad3d47249fdf98825cc86f14028c3308c9804c78bfeeeee461444ce243687e1a50522456a1d", + "d5266aa3331194aef852eed86d7b5b2633a0af1c735906f2e13279f14931a9fc3b0eac5ce9245273bd1aa92905abe16278ef7efd47694789a7283b77da3c70f8", + "2962734c28252186a9a1111c732ad4de4506d4b4480916303eb7991d659ccda07a9911914bc75c418ab7a4541757ad054796e26797feaf36e9f6ad43f14b35a4", + "e8b79ec5d06e111bdfafd71e9f5760f00ac8ac5d8bf768f9ff6f08b8f026096b1cc3a4c973333019f1e3553e77da3f98cb9f542e0a90e5f8a940cc58e59844b3", + "dfb320c44f9d41d1efdcc015f08dd5539e526e39c87d509ae6812a969e5431bf4fa7d91ffd03b981e0d544cf72d7b1c0374f8801482e6dea2ef903877eba675e", + "d88675118fdb55a5fb365ac2af1d217bf526ce1ee9c94b2f0090b2c58a06ca58187d7fe57c7bed9d26fca067b4110eefcd9a0a345de872abe20de368001b0745", + "b893f2fc41f7b0dd6e2f6aa2e0370c0cff7df09e3acfcc0e920b6e6fad0ef747c40668417d342b80d2351e8c175f20897a062e9765e6c67b539b6ba8b9170545", + "6c67ec5697accd235c59b486d7b70baeedcbd4aa64ebd4eef3c7eac189561a726250aec4d48cadcafbbe2ce3c16ce2d691a8cce06e8879556d4483ed7165c063", + "f1aa2b044f8f0c638a3f362e677b5d891d6fd2ab0765f6ee1e4987de057ead357883d9b405b9d609eea1b869d97fb16d9b51017c553f3b93c0a1e0f1296fedcd", + "cbaa259572d4aebfc1917acddc582b9f8dfaa928a198ca7acd0f2aa76a134a90252e6298a65b08186a350d5b7626699f8cb721a3ea5921b753ae3a2dce24ba3a", + "fa1549c9796cd4d303dcf452c1fbd5744fd9b9b47003d920b92de34839d07ef2a29ded68f6fc9e6c45e071a2e48bd50c5084e96b657dd0404045a1ddefe282ed", + "5cf2ac897ab444dcb5c8d87c495dbdb34e1838b6b629427caa51702ad0f9688525f13bec503a3c3a2c80a65e0b5715e8afab00ffa56ec455a49a1ad30aa24fcd", + "9aaf80207bace17bb7ab145757d5696bde32406ef22b44292ef65d4519c3bb2ad41a59b62cc3e94b6fa96d32a7faadae28af7d35097219aa3fd8cda31e40c275", + "af88b163402c86745cb650c2988fb95211b94b03ef290eed9662034241fd51cf398f8073e369354c43eae1052f9b63b08191caa138aa54fea889cc7024236897", + "48fa7d64e1ceee27b9864db5ada4b53d00c9bc7626555813d3cd6730ab3cc06ff342d727905e33171bde6e8476e77fb1720861e94b73a2c538d254746285f430", + "0e6fd97a85e904f87bfe85bbeb34f69e1f18105cf4ed4f87aec36c6e8b5f68bd2a6f3dc8a9ecb2b61db4eedb6b2ea10bf9cb0251fb0f8b344abf7f366b6de5ab", + "06622da5787176287fdc8fed440bad187d830099c94e6d04c8e9c954cda70c8bb9e1fc4a6d0baa831b9b78ef6648681a4867a11da93ee36e5e6a37d87fc63f6f", + "1da6772b58fabf9c61f68d412c82f182c0236d7d575ef0b58dd22458d643cd1dfc93b03871c316d8430d312995d4197f0874c99172ba004a01ee295abac24e46", + "3cd2d9320b7b1d5fb9aab951a76023fa667be14a9124e394513918a3f44096ae4904ba0ffc150b63bc7ab1eeb9a6e257e5c8f000a70394a5afd842715de15f29", + "04cdc14f7434e0b4be70cb41db4c779a88eaef6accebcb41f2d42fffe7f32a8e281b5c103a27021d0d08362250753cdf70292195a53a48728ceb5844c2d98bab", + "9071b7a8a075d0095b8fb3ae5113785735ab98e2b52faf91d5b89e44aac5b5d4ebbf91223b0ff4c71905da55342e64655d6ef8c89a4768c3f93a6dc0366b5bc8", + "ebb30240dd96c7bc8d0abe49aa4edcbb4afdc51ff9aaf720d3f9e7fbb0f9c6d6571350501769fc4ebd0b2141247ff400d4fd4be414edf37757bb90a32ac5c65a", + "8532c58bf3c8015d9d1cbe00eef1f5082f8f3632fbe9f1ed4f9dfb1fa79e8283066d77c44c4af943d76b300364aecbd0648c8a8939bd204123f4b56260422dec", + "fe9846d64f7c7708696f840e2d76cb4408b6595c2f81ec6a28a7f2f20cb88cfe6ac0b9e9b8244f08bd7095c350c1d0842f64fb01bb7f532dfcd47371b0aeeb79", + "28f17ea6fb6c42092dc264257e29746321fb5bdaea9873c2a7fa9d8f53818e899e161bc77dfe8090afd82bf2266c5c1bc930a8d1547624439e662ef695f26f24", + "ec6b7d7f030d4850acae3cb615c21dd25206d63e84d1db8d957370737ba0e98467ea0ce274c66199901eaec18a08525715f53bfdb0aacb613d342ebdceeddc3b", + "b403d3691c03b0d3418df327d5860d34bbfcc4519bfbce36bf33b208385fadb9186bc78a76c489d89fd57e7dc75412d23bcd1dae8470ce9274754bb8585b13c5", + "31fc79738b8772b3f55cd8178813b3b52d0db5a419d30ba9495c4b9da0219fac6df8e7c23a811551a62b827f256ecdb8124ac8a6792ccfecc3b3012722e94463", + "bb2039ec287091bcc9642fc90049e73732e02e577e2862b32216ae9bedcd730c4c284ef3968c368b7d37584f97bd4b4dc6ef6127acfe2e6ae2509124e66c8af4", + "f53d68d13f45edfcb9bd415e2831e938350d5380d3432278fc1c0c381fcb7c65c82dafe051d8c8b0d44e0974a0e59ec7bf7ed0459f86e96f329fc79752510fd3", + "8d568c7984f0ecdf7640fbc483b5d8c9f86634f6f43291841b309a350ab9c1137d24066b09da9944bac54d5bb6580d836047aac74ab724b887ebf93d4b32eca9", + "c0b65ce5a96ff774c456cac3b5f2c4cd359b4ff53ef93a3da0778be4900d1e8da1601e769e8f1b02d2a2f8c5b9fa10b44f1c186985468feeb008730283a6657d", + "4900bba6f5fb103ece8ec96ada13a5c3c85488e05551da6b6b33d988e611ec0fe2e3c2aa48ea6ae8986a3a231b223c5d27cec2eadde91ce07981ee652862d1e4", + "c7f5c37c7285f927f76443414d4357ff789647d7a005a5a787e03c346b57f49f21b64fa9cf4b7e45573e23049017567121a9c3d4b2b73ec5e9413577525db45a", + "ec7096330736fdb2d64b5653e7475da746c23a4613a82687a28062d3236364284ac01720ffb406cfe265c0df626a188c9e5963ace5d3d5bb363e32c38c2190a6", + "82e744c75f4649ec52b80771a77d475a3bc091989556960e276a5f9ead92a03f718742cdcfeaee5cb85c44af198adc43a4a428f5f0c2ddb0be36059f06d7df73", + "2834b7a7170f1f5b68559ab78c1050ec21c919740b784a9072f6e5d69f828d70c919c5039fb148e39e2c8a52118378b064ca8d5001cd10a5478387b966715ed6", + "16b4ada883f72f853bb7ef253efcab0c3e2161687ad61543a0d2824f91c1f81347d86be709b16996e17f2dd486927b0288ad38d13063c4a9672c39397d3789b6", + "78d048f3a69d8b54ae0ed63a573ae350d89f7c6cf1f3688930de899afa037697629b314e5cd303aa62feea72a25bf42b304b6c6bcb27fae21c16d925e1fbdac3", + "0f746a48749287ada77a82961f05a4da4abdb7d77b1220f836d09ec814359c0ec0239b8c7b9ff9e02f569d1b301ef67c4612d1de4f730f81c12c40cc063c5caa", + "f0fc859d3bd195fbdc2d591e4cdac15179ec0f1dc821c11df1f0c1d26e6260aaa65b79fafacafd7d3ad61e600f250905f5878c87452897647a35b995bcadc3a3", + "2620f687e8625f6a412460b42e2cef67634208ce10a0cbd4dff7044a41b7880077e9f8dc3b8d1216d3376a21e015b58fb279b521d83f9388c7382c8505590b9b", + "227e3aed8d2cb10b918fcb04f9de3e6d0a57e08476d93759cd7b2ed54a1cbf0239c528fb04bbf288253e601d3bc38b21794afef90b17094a182cac557745e75f", + "1a929901b09c25f27d6b35be7b2f1c4745131fdebca7f3e2451926720434e0db6e74fd693ad29b777dc3355c592a361c4873b01133a57c2e3b7075cbdb86f4fc", + "5fd7968bc2fe34f220b5e3dc5af9571742d73b7d60819f2888b629072b96a9d8ab2d91b82d0a9aaba61bbd39958132fcc4257023d1eca591b3054e2dc81c8200", + "dfcce8cf32870cc6a503eadafc87fd6f78918b9b4d0737db6810be996b5497e7e5cc80e312f61e71ff3e9624436073156403f735f56b0b01845c18f6caf772e6", + "02f7ef3a9ce0fff960f67032b296efca3061f4934d690749f2d01c35c81c14f39a67fa350bc8a0359bf1724bffc3bca6d7c7bba4791fd522a3ad353c02ec5aa8", + "64be5c6aba65d594844ae78bb022e5bebe127fd6b6ffa5a13703855ab63b624dcd1a363f99203f632ec386f3ea767fc992e8ed9686586aa27555a8599d5b808f", + "f78585505c4eaa54a8b5be70a61e735e0ff97af944ddb3001e35d86c4e2199d976104b6ae31750a36a726ed285064f5981b503889fef822fcdc2898dddb7889a", + "e4b5566033869572edfd87479a5bb73c80e8759b91232879d96b1dda36c012076ee5a2ed7ae2de63ef8406a06aea82c188031b560beafb583fb3de9e57952a7e", + "e1b3e7ed867f6c9484a2a97f7715f25e25294e992e41f6a7c161ffc2adc6daaeb7113102d5e6090287fe6ad94ce5d6b739c6ca240b05c76fb73f25dd024bf935", + "85fd085fdc12a080983df07bd7012b0d402a0f4043fcb2775adf0bad174f9b08d1676e476985785c0a5dcc41dbff6d95ef4d66a3fbdc4a74b82ba52da0512b74", + "aed8fa764b0fbff821e05233d2f7b0900ec44d826f95e93c343c1bc3ba5a24374b1d616e7e7aba453a0ada5e4fab5382409e0d42ce9c2bc7fb39a99c340c20f0", + "7ba3b2e297233522eeb343bd3ebcfd835a04007735e87f0ca300cbee6d416565162171581e4020ff4cf176450f1291ea2285cb9ebffe4c56660627685145051c", + "de748bcf89ec88084721e16b85f30adb1a6134d664b5843569babc5bbd1a15ca9b61803c901a4fef32965a1749c9f3a4e243e173939dc5a8dc495c671ab52145", + "aaf4d2bdf200a919706d9842dce16c98140d34bc433df320aba9bd429e549aa7a3397652a4d768277786cf993cde2338673ed2e6b66c961fefb82cd20c93338f", + "c408218968b788bf864f0997e6bc4c3dba68b276e2125a4843296052ff93bf5767b8cdce7131f0876430c1165fec6c4f47adaa4fd8bcfacef463b5d3d0fa61a0", + "76d2d819c92bce55fa8e092ab1bf9b9eab237a25267986cacf2b8ee14d214d730dc9a5aa2d7b596e86a1fd8fa0804c77402d2fcd45083688b218b1cdfa0dcbcb", + "72065ee4dd91c2d8509fa1fc28a37c7fc9fa7d5b3f8ad3d0d7a25626b57b1b44788d4caf806290425f9890a3a2a35a905ab4b37acfd0da6e4517b2525c9651e4", + "64475dfe7600d7171bea0b394e27c9b00d8e74dd1e416a79473682ad3dfdbb706631558055cfc8a40e07bd015a4540dcdea15883cbbf31412df1de1cd4152b91", + "12cd1674a4488a5d7c2b3160d2e2c4b58371bedad793418d6f19c6ee385d70b3e06739369d4df910edb0b0a54cbff43d54544cd37ab3a06cfa0a3ddac8b66c89", + "60756966479dedc6dd4bcff8ea7d1d4ce4d4af2e7b097e32e3763518441147cc12b3c0ee6d2ecabf1198cec92e86a3616fba4f4e872f5825330adbb4c1dee444", + "a7803bcb71bc1d0f4383dde1e0612e04f872b715ad30815c2249cf34abb8b024915cb2fc9f4e7cc4c8cfd45be2d5a91eab0941c7d270e2da4ca4a9f7ac68663a", + "b84ef6a7229a34a750d9a98ee2529871816b87fbe3bc45b45fa5ae82d5141540211165c3c5d7a7476ba5a4aa06d66476f0d9dc49a3f1ee72c3acabd498967414", + "fae4b6d8efc3f8c8e64d001dabec3a21f544e82714745251b2b4b393f2f43e0da3d403c64db95a2cb6e23ebb7b9e94cdd5ddac54f07c4a61bd3cb10aa6f93b49", + "34f7286605a122369540141ded79b8957255da2d4155abbf5a8dbb89c8eb7ede8eeef1daa46dc29d751d045dc3b1d658bb64b80ff8589eddb3824b13da235a6b", + "3b3b48434be27b9eababba43bf6b35f14b30f6a88dc2e750c358470d6b3aa3c18e47db4017fa55106d8252f016371a00f5f8b070b74ba5f23cffc5511c9f09f0", + "ba289ebd6562c48c3e10a8ad6ce02e73433d1e93d7c9279d4d60a7e879ee11f441a000f48ed9f7c4ed87a45136d7dccdca482109c78a51062b3ba4044ada2469", + "022939e2386c5a37049856c850a2bb10a13dfea4212b4c732a8840a9ffa5faf54875c5448816b2785a007da8a8d2bc7d71a54e4e6571f10b600cbdb25d13ede3", + "e6fec19d89ce8717b1a087024670fe026f6c7cbda11caef959bb2d351bf856f8055d1c0ebdaaa9d1b17886fc2c562b5e99642fc064710c0d3488a02b5ed7f6fd", + "94c96f02a8f576aca32ba61c2b206f907285d9299b83ac175c209a8d43d53bfe683dd1d83e7549cb906c28f59ab7c46f8751366a28c39dd5fe2693c9019666c8", + "31a0cd215ebd2cb61de5b9edc91e6195e31c59a5648d5c9f737e125b2605708f2e325ab3381c8dce1a3e958886f1ecdc60318f882cfe20a24191352e617b0f21", + "91ab504a522dce78779f4c6c6ba2e6b6db5565c76d3e7e7c920caf7f757ef9db7c8fcf10e57f03379ea9bf75eb59895d96e149800b6aae01db778bb90afbc989", + "d85cabc6bd5b1a01a5afd8c6734740da9fd1c1acc6db29bfc8a2e5b668b028b6b3154bfb8703fa3180251d589ad38040ceb707c4bad1b5343cb426b61eaa49c1", + "d62efbec2ca9c1f8bd66ce8b3f6a898cb3f7566ba6568c618ad1feb2b65b76c3ce1dd20f7395372faf28427f61c9278049cf0140df434f5633048c86b81e0399", + "7c8fdc6175439e2c3db15bafa7fb06143a6a23bc90f449e79deef73c3d492a671715c193b6fea9f036050b946069856b897e08c00768f5ee5ddcf70b7cd6d0e0", + "58602ee7468e6bc9df21bd51b23c005f72d6cb013f0a1b48cbec5eca299299f97f09f54a9a01483eaeb315a6478bad37ba47ca1347c7c8fc9e6695592c91d723", + "27f5b79ed256b050993d793496edf4807c1d85a7b0a67c9c4fa99860750b0ae66989670a8ffd7856d7ce411599e58c4d77b232a62bef64d15275be46a68235ff", + "3957a976b9f1887bf004a8dca942c92d2b37ea52600f25e0c9bc5707d0279c00c6e85a839b0d2d8eb59c51d94788ebe62474a791cadf52cccf20f5070b6573fc", + "eaa2376d55380bf772ecca9cb0aa4668c95c707162fa86d518c8ce0ca9bf7362b9f2a0adc3ff59922df921b94567e81e452f6c1a07fc817cebe99604b3505d38", + "c1e2c78b6b2734e2480ec550434cb5d613111adcc21d475545c3b1b7e6ff12444476e5c055132e2229dc0f807044bb919b1a5662dd38a9ee65e243a3911aed1a", + "8ab48713389dd0fcf9f965d3ce66b1e559a1f8c58741d67683cd971354f452e62d0207a65e436c5d5d8f8ee71c6abfe50e669004c302b31a7ea8311d4a916051", + "24ce0addaa4c65038bd1b1c0f1452a0b128777aabc94a29df2fd6c7e2f85f8ab9ac7eff516b0e0a825c84a24cfe492eaad0a6308e46dd42fe8333ab971bb30ca", + "5154f929ee03045b6b0c0004fa778edee1d139893267cc84825ad7b36c63de32798e4a166d24686561354f63b00709a1364b3c241de3febf0754045897467cd4", + "e74e907920fd87bd5ad636dd11085e50ee70459c443e1ce5809af2bc2eba39f9e6d7128e0e3712c316da06f4705d78a4838e28121d4344a2c79c5e0db307a677", + "bf91a22334bac20f3fd80663b3cd06c4e8802f30e6b59f90d3035cc9798a217ed5a31abbda7fa6842827bdf2a7a1c21f6fcfccbb54c6c52926f32da816269be1", + "d9d5c74be5121b0bd742f26bffb8c89f89171f3f934913492b0903c271bbe2b3395ef259669bef43b57f7fcc3027db01823f6baee66e4f9fead4d6726c741fce", + "50c8b8cf34cd879f80e2faab3230b0c0e1cc3e9dcadeb1b9d97ab923415dd9a1fe38addd5c11756c67990b256e95ad6d8f9fedce10bf1c90679cde0ecf1be347", + "0a386e7cd5dd9b77a035e09fe6fee2c8ce61b5383c87ea43205059c5e4cd4f4408319bb0a82360f6a58e6c9ce3f487c446063bf813bc6ba535e17fc1826cfc91", + "1f1459cb6b61cbac5f0efe8fc487538f42548987fcd56221cfa7beb22504769e792c45adfb1d6b3d60d7b749c8a75b0bdf14e8ea721b95dca538ca6e25711209", + "e58b3836b7d8fedbb50ca5725c6571e74c0785e97821dab8b6298c10e4c079d4a6cdf22f0fedb55032925c16748115f01a105e77e00cee3d07924dc0d8f90659", + "b929cc6505f020158672deda56d0db081a2ee34c00c1100029bdf8ea98034fa4bf3e8655ec697fe36f40553c5bb46801644a627d3342f4fc92b61f03290fb381", + "72d353994b49d3e03153929a1e4d4f188ee58ab9e72ee8e512f29bc773913819ce057ddd7002c0433ee0a16114e3d156dd2c4a7e80ee53378b8670f23e33ef56", + "c70ef9bfd775d408176737a0736d68517ce1aaad7e81a93c8c1ed967ea214f56c8a377b1763e676615b60f3988241eae6eab9685a5124929d28188f29eab06f7", + "c230f0802679cb33822ef8b3b21bf7a9a28942092901d7dac3760300831026cf354c9232df3e084d9903130c601f63c1f4a4a4b8106e468cd443bbe5a734f45f", + "6f43094cafb5ebf1f7a4937ec50f56a4c9da303cbb55ac1f27f1f1976cd96beda9464f0e7b9c54620b8a9fba983164b8be3578425a024f5fe199c36356b88972", + "3745273f4c38225db2337381871a0c6aafd3af9b018c88aa02025850a5dc3a42a1a3e03e56cbf1b0876d63a441f1d2856a39b8801eb5af325201c415d65e97fe", + "c50c44cca3ec3edaae779a7e179450ebdda2f97067c690aa6c5a4ac7c30139bb27c0df4db3220e63cb110d64f37ffe078db72653e2daacf93ae3f0a2d1a7eb2e", + "8aef263e385cbc61e19b28914243262af5afe8726af3ce39a79c27028cf3ecd3f8d2dfd9cfc9ad91b58f6f20778fd5f02894a3d91c7d57d1e4b866a7f364b6be", + "28696141de6e2d9bcb3235578a66166c1448d3e905a1b482d423be4bc5369bc8c74dae0acc9cc123e1d8ddce9f97917e8c019c552da32d39d2219b9abf0fa8c8", + "2fb9eb2085830181903a9dafe3db428ee15be7662224efd643371fb25646aee716e531eca69b2bdc8233f1a8081fa43da1500302975a77f42fa592136710e9dc", + "66f9a7143f7a3314a669bf2e24bbb35014261d639f495b6c9c1f104fe8e320aca60d4550d69d52edbd5a3cdeb4014ae65b1d87aa770b69ae5c15f4330b0b0ad8", + "f4c4dd1d594c3565e3e25ca43dad82f62abea4835ed4cd811bcd975e46279828d44d4c62c3679f1b7f7b9dd4571d7b49557347b8c5460cbdc1bef690fb2a08c0", + "8f1dc9649c3a84551f8f6e91cac68242a43b1f8f328ee92280257387fa7559aa6db12e4aeadc2d26099178749c6864b357f3f83b2fb3efa8d2a8db056bed6bcc", + "3139c1a7f97afd1675d460ebbc07f2728aa150df849624511ee04b743ba0a833092f18c12dc91b4dd243f333402f59fe28abdbbbae301e7b659c7a26d5c0f979", + "06f94a2996158a819fe34c40de3cf0379fd9fb85b3e363ba3926a0e7d960e3f4c2e0c70c7ce0ccb2a64fc29869f6e7ab12bd4d3f14fce943279027e785fb5c29", + "c29c399ef3eee8961e87565c1ce263925fc3d0ce267d13e48dd9e732ee67b0f69fad56401b0f10fcaac119201046cca28c5b14abdea3212ae65562f7f138db3d", + "4cec4c9df52eef05c3f6faaa9791bc7445937183224ecc37a1e58d0132d35617531d7e795f52af7b1eb9d147de1292d345fe341823f8e6bc1e5badca5c656108", + "898bfbae93b3e18d00697eab7d9704fa36ec339d076131cefdf30edbe8d9cc81c3a80b129659b163a323bab9793d4feed92d54dae966c77529764a09be88db45", + "ee9bd0469d3aaf4f14035be48a2c3b84d9b4b1fff1d945e1f1c1d38980a951be197b25fe22c731f20aeacc930ba9c4a1f4762227617ad350fdabb4e80273a0f4", + "3d4d3113300581cd96acbf091c3d0f3c310138cd6979e6026cde623e2dd1b24d4a8638bed1073344783ad0649cc6305ccec04beb49f31c633088a99b65130267", + "95c0591ad91f921ac7be6d9ce37e0663ed8011c1cfd6d0162a5572e94368bac02024485e6a39854aa46fe38e97d6c6b1947cd272d86b06bb5b2f78b9b68d559d", + "227b79ded368153bf46c0a3ca978bfdbef31f3024a5665842468490b0ff748ae04e7832ed4c9f49de9b1706709d623e5c8c15e3caecae8d5e433430ff72f20eb", + "5d34f3952f0105eef88ae8b64c6ce95ebfade0e02c69b08762a8712d2e4911ad3f941fc4034dc9b2e479fdbcd279b902faf5d838bb2e0c6495d372b5b7029813", + "7f939bf8353abce49e77f14f3750af20b7b03902e1a1e7fb6aaf76d0259cd401a83190f15640e74f3e6c5a90e839c7821f6474757f75c7bf9002084ddc7a62dc", + "062b61a2f9a33a71d7d0a06119644c70b0716a504de7e5e1be49bd7b86e7ed6817714f9f0fc313d06129597e9a2235ec8521de36f7290a90ccfc1ffa6d0aee29", + "f29e01eeae64311eb7f1c6422f946bf7bea36379523e7b2bbaba7d1d34a22d5ea5f1c5a09d5ce1fe682cced9a4798d1a05b46cd72dff5c1b355440b2a2d476bc", + "ec38cd3bbab3ef35d7cb6d5c914298351d8a9dc97fcee051a8a02f58e3ed6184d0b7810a5615411ab1b95209c3c810114fdeb22452084e77f3f847c6dbaafe16", + "c2aef5e0ca43e82641565b8cb943aa8ba53550caef793b6532fafad94b816082f0113a3ea2f63608ab40437ecc0f0229cb8fa224dcf1c478a67d9b64162b92d1", + "15f534efff7105cd1c254d074e27d5898b89313b7d366dc2d7d87113fa7d53aae13f6dba487ad8103d5e854c91fdb6e1e74b2ef6d1431769c30767dde067a35c", + "89acbca0b169897a0a2714c2df8c95b5b79cb69390142b7d6018bb3e3076b099b79a964152a9d912b1b86412b7e372e9cecad7f25d4cbab8a317be36492a67d7", + "e3c0739190ed849c9c962fd9dbb55e207e624fcac1eb417691515499eea8d8267b7e8f1287a63633af5011fde8c4ddf55bfdf722edf88831414f2cfaed59cb9a", + "8d6cf87c08380d2d1506eee46fd4222d21d8c04e585fbfd08269c98f702833a156326a0724656400ee09351d57b440175e2a5de93cc5f80db6daf83576cf75fa", + "da24bede383666d563eeed37f6319baf20d5c75d1635a6ba5ef4cfa1ac95487e96f8c08af600aab87c986ebad49fc70a58b4890b9c876e091016daf49e1d322e", + "f9d1d1b1e87ea7ae753a029750cc1cf3d0157d41805e245c5617bb934e732f0ae3180b78e05bfe76c7c3051e3e3ac78b9b50c05142657e1e03215d6ec7bfd0fc", + "11b7bc1668032048aa43343de476395e814bbbc223678db951a1b03a021efac948cfbe215f97fe9a72a2f6bc039e3956bfa417c1a9f10d6d7ba5d3d32ff323e5", + "b8d9000e4fc2b066edb91afee8e7eb0f24e3a201db8b6793c0608581e628ed0bcc4e5aa6787992a4bcc44e288093e63ee83abd0bc3ec6d0934a674a4da13838a", + "ce325e294f9b6719d6b61278276ae06a2564c03bb0b783fafe785bdf89c7d5acd83e78756d301b445699024eaeb77b54d477336ec2a4f332f2b3f88765ddb0c3", + "29acc30e9603ae2fccf90bf97e6cc463ebe28c1b2f9b4b765e70537c25c702a29dcbfbf14c99c54345ba2b51f17b77b5f15db92bbad8fa95c471f5d070a137cc", + "3379cbaae562a87b4c0425550ffdd6bfe1203f0d666cc7ea095be407a5dfe61ee91441cd5154b3e53b4f5fb31ad4c7a9ad5c7af4ae679aa51a54003a54ca6b2d", + "3095a349d245708c7cf550118703d7302c27b60af5d4e67fc978f8a4e60953c7a04f92fcf41aee64321ccb707a895851552b1e37b00bc5e6b72fa5bcef9e3fff", + "07262d738b09321f4dbccec4bb26f48cb0f0ed246ce0b31b9a6e7bc683049f1f3e5545f28ce932dd985c5ab0f43bd6de0770560af329065ed2e49d34624c2cbb", + "b6405eca8ee3316c87061cc6ec18dba53e6c250c63ba1f3bae9e55dd3498036af08cd272aa24d713c6020d77ab2f3919af1a32f307420618ab97e73953994fb4", + "7ee682f63148ee45f6e5315da81e5c6e557c2c34641fc509c7a5701088c38a74756168e2cd8d351e88fd1a451f360a01f5b2580f9b5a2e8cfc138f3dd59a3ffc", + "1d263c179d6b268f6fa016f3a4f29e943891125ed8593c81256059f5a7b44af2dcb2030d175c00e62ecaf7ee96682aa07ab20a611024a28532b1c25b86657902", + "106d132cbdb4cd2597812846e2bc1bf732fec5f0a5f65dbb39ec4e6dc64ab2ce6d24630d0f15a805c3540025d84afa98e36703c3dbee713e72dde8465bc1be7e", + "0e79968226650667a8d862ea8da4891af56a4e3a8b6d1750e394f0dea76d640d85077bcec2cc86886e506751b4f6a5838f7f0b5fef765d9dc90dcdcbaf079f08", + "521156a82ab0c4e566e5844d5e31ad9aaf144bbd5a464fdca34dbd5717e8ff711d3ffebbfa085d67fe996a34f6d3e4e60b1396bf4b1610c263bdbb834d560816", + "1aba88befc55bc25efbce02db8b9933e46f57661baeabeb21cc2574d2a518a3cba5dc5a38e49713440b25f9c744e75f6b85c9d8f4681f676160f6105357b8406", + "5a9949fcb2c473cda968ac1b5d08566dc2d816d960f57e63b898fa701cf8ebd3f59b124d95bfbbedc5f1cf0e17d5eaed0c02c50b69d8a402cabcca4433b51fd4", + "b0cead09807c672af2eb2b0f06dde46cf5370e15a4096b1a7d7cbb36ec31c205fbefca00b7a4162fa89fb4fb3eb78d79770c23f44e7206664ce3cd931c291e5d", + "bb6664931ec97044e45b2ae420ae1c551a8874bc937d08e969399c3964ebdba8346cdd5d09caafe4c28ba7ec788191ceca65ddd6f95f18583e040d0f30d0364d", + "65bc770a5faa3792369803683e844b0be7ee96f29f6d6a35568006bd5590f9a4ef639b7a8061c7b0424b66b60ac34af3119905f33a9d8c3ae18382ca9b689900", + "ea9b4dca333336aaf839a45c6eaa48b8cb4c7ddabffea4f643d6357ea6628a480a5b45f2b052c1b07d1fedca918b6f1139d80f74c24510dcbaa4be70eacc1b06", + "e6342fb4a780ad975d0e24bce149989b91d360557e87994f6b457b895575cc02d0c15bad3ce7577f4c63927ff13f3e381ff7e72bdbe745324844a9d27e3f1c01", + "3e209c9b33e8e461178ab46b1c64b49a07fb745f1c8bc95fbfb94c6b87c69516651b264ef980937fad41238b91ddc011a5dd777c7efd4494b4b6ecd3a9c22ac0", + "fd6a3d5b1875d80486d6e69694a56dbb04a99a4d051f15db2689776ba1c4882e6d462a603b7015dc9f4b7450f05394303b8652cfb404a266962c41bae6e18a94", + "951e27517e6bad9e4195fc8671dee3e7e9be69cee1422cb9fecfce0dba875f7b310b93ee3a3d558f941f635f668ff832d2c1d033c5e2f0997e4c66f147344e02", + "8eba2f874f1ae84041903c7c4253c82292530fc8509550bfdc34c95c7e2889d5650b0ad8cb988e5c4894cb87fbfbb19612ea93ccc4c5cad17158b9763464b492", + "16f712eaa1b7c6354719a8e7dbdfaf55e4063a4d277d947550019b38dfb564830911057d50506136e2394c3b28945cc964967d54e3000c2181626cfb9b73efd2", + "c39639e7d5c7fb8cdd0fd3e6a52096039437122f21c78f1679cea9d78a734c56ecbeb28654b4f18e342c331f6f7229ec4b4bc281b2d80a6eb50043f31796c88c", + "72d081af99f8a173dcc9a0ac4eb3557405639a29084b54a40172912a2f8a395129d5536f0918e902f9e8fa6000995f4168ddc5f893011be6a0dbc9b8a1a3f5bb", + "c11aa81e5efd24d5fc27ee586cfd8847fbb0e27601ccece5ecca0198e3c7765393bb74457c7e7a27eb9170350e1fb53857177506be3e762cc0f14d8c3afe9077", + "c28f2150b452e6c0c424bcde6f8d72007f9310fed7f2f87de0dbb64f4479d6c1441ba66f44b2accee61609177ed340128b407ecec7c64bbe50d63d22d8627727", + "f63d88122877ec30b8c8b00d22e89000a966426112bd44166e2f525b769ccbe9b286d437a0129130dde1a86c43e04bedb594e671d98283afe64ce331de9828fd", + "348b0532880b88a6614a8d7408c3f913357fbb60e995c60205be9139e74998aede7f4581e42f6b52698f7fa1219708c14498067fd1e09502de83a77dd281150c", + "5133dc8bef725359dff59792d85eaf75b7e1dcd1978b01c35b1b85fcebc63388ad99a17b6346a217dc1a9622ebd122ecf6913c4d31a6b52a695b86af00d741a0", + "2753c4c0e98ecad806e88780ec27fccd0f5c1ab547f9e4bf1659d192c23aa2cc971b58b6802580baef8adc3b776ef7086b2545c2987f348ee3719cdef258c403", + "b1663573ce4b9d8caefc865012f3e39714b9898a5da6ce17c25a6a47931a9ddb9bbe98adaa553beed436e89578455416c2a52a525cf2862b8d1d49a2531b7391", + "64f58bd6bfc856f5e873b2a2956ea0eda0d6db0da39c8c7fc67c9f9feefcff3072cdf9e6ea37f69a44f0c61aa0da3693c2db5b54960c0281a088151db42b11e8", + "0764c7be28125d9065c4b98a69d60aede703547c66a12e17e1c618994132f5ef82482c1e3fe3146cc65376cc109f0138ed9a80e49f1f3c7d610d2f2432f20605", + "f748784398a2ff03ebeb07e155e66116a839741a336e32da71ec696001f0ad1b25cd48c69cfca7265eca1dd71904a0ce748ac4124f3571076dfa7116a9cf00e9", + "3f0dbc0186bceb6b785ba78d2a2a013c910be157bdaffae81bb6663b1a73722f7f1228795f3ecada87cf6ef0078474af73f31eca0cc200ed975b6893f761cb6d", + "d4762cd4599876ca75b2b8fe249944dbd27ace741fdab93616cbc6e425460feb51d4e7adcc38180e7fc47c89024a7f56191adb878dfde4ead62223f5a2610efe", + "cd36b3d5b4c91b90fcbba79513cfee1907d8645a162afd0cd4cf4192d4a5f4c892183a8eacdb2b6b6a9d9aa8c11ac1b261b380dbee24ca468f1bfd043c58eefe", + "98593452281661a53c48a9d8cd790826c1a1ce567738053d0bee4a91a3d5bd92eefdbabebe3204f2031ca5f781bda99ef5d8ae56e5b04a9e1ecd21b0eb05d3e1", + "771f57dd2775ccdab55921d3e8e30ccf484d61fe1c1b9c2ae819d0fb2a12fab9be70c4a7a138da84e8280435daade5bbe66af0836a154f817fb17f3397e725a3", + "c60897c6f828e21f16fbb5f15b323f87b6c8955eabf1d38061f707f608abdd993fac3070633e286cf8339ce295dd352df4b4b40b2f29da1dd50b3a05d079e6bb", + "8210cd2c2d3b135c2cf07fa0d1433cd771f325d075c6469d9c7f1ba0943cd4ab09808cabf4acb9ce5bb88b498929b4b847f681ad2c490d042db2aec94214b06b", + "1d4edfffd8fd80f7e4107840fa3aa31e32598491e4af7013c197a65b7f36dd3ac4b478456111cd4309d9243510782fa31b7c4c95fa951520d020eb7e5c36e4ef", + "af8e6e91fab46ce4873e1a50a8ef448cc29121f7f74deef34a71ef89cc00d9274bc6c2454bbb3230d8b2ec94c62b1dec85f3593bfa30ea6f7a44d7c09465a253", + "29fd384ed4906f2d13aa9fe7af905990938bed807f1832454a372ab412eea1f5625a1fcc9ac8343b7c67c5aba6e0b1cc4644654913692c6b39eb9187ceacd3ec", + "a268c7885d9874a51c44dffed8ea53e94f78456e0b2ed99ff5a3924760813826d960a15edbedbb5de5226ba4b074e71b05c55b9756bb79e55c02754c2c7b6c8a", + "0cf8545488d56a86817cd7ecb10f7116b7ea530a45b6ea497b6c72c997e09e3d0da8698f46bb006fc977c2cd3d1177463ac9057fdd1662c85d0c126443c10473", + "b39614268fdd8781515e2cfebf89b4d5402bab10c226e6344e6b9ae000fb0d6c79cb2f3ec80e80eaeb1980d2f8698916bd2e9f747236655116649cd3ca23a837", + "74bef092fc6f1e5dba3663a3fb003b2a5ba257496536d99f62b9d73f8f9eb3ce9ff3eec709eb883655ec9eb896b9128f2afc89cf7d1ab58a72f4a3bf034d2b4a", + "3a988d38d75611f3ef38b8774980b33e573b6c57bee0469ba5eed9b44f29945e7347967fba2c162e1c3be7f310f2f75ee2381e7bfd6b3f0baea8d95dfb1dafb1", + "58aedfce6f67ddc85a28c992f1c0bd0969f041e66f1ee88020a125cbfcfebcd61709c9c4eba192c15e69f020d462486019fa8dea0cd7a42921a19d2fe546d43d", + "9347bd291473e6b4e368437b8e561e065f649a6d8ada479ad09b1999a8f26b91cf6120fd3bfe014e83f23acfa4c0ad7b3712b2c3c0733270663112ccd9285cd9", + "b32163e7c5dbb5f51fdc11d2eac875efbbcb7e7699090a7e7ff8a8d50795af5d74d9ff98543ef8cdf89ac13d0485278756e0ef00c817745661e1d59fe38e7537", + "1085d78307b1c4b008c57a2e7e5b234658a0a82e4ff1e4aaac72b312fda0fe27d233bc5b10e9cc17fdc7697b540c7d95eb215a19a1a0e20e1abfa126efd568c7", + "4e5c734c7dde011d83eac2b7347b373594f92d7091b9ca34cb9c6f39bdf5a8d2f134379e16d822f6522170ccf2ddd55c84b9e6c64fc927ac4cf8dfb2a17701f2", + "695d83bd990a1117b3d0ce06cc888027d12a054c2677fd82f0d4fbfc93575523e7991a5e35a3752e9b70ce62992e268a877744cdd435f5f130869c9a2074b338", + "a6213743568e3b3158b9184301f3690847554c68457cb40fc9a4b8cfd8d4a118c301a07737aeda0f929c68913c5f51c80394f53bff1c3e83b2e40ca97eba9e15", + "d444bfa2362a96df213d070e33fa841f51334e4e76866b8139e8af3bb3398be2dfaddcbc56b9146de9f68118dc5829e74b0c28d7711907b121f9161cb92b69a9", + "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461", +} + +var hashes2X = []string{ + "64", + "f457", + "e8c045", + "a74c6d0d", + "eb02ae482a", + "be65b981275e", + "8540ccd083a455", + "074a02fa58d7c7c0", + "da6da05e10db3022b6", + "542a5aae2f28f2c3b68c", + "ca3af2afc4afe891da78b1", + "e0f66b8dcebf4edc85f12c85", + "744224d383733b3fa2c53bfcf5", + "b09b653e85b72ef5cdf8fcfa95f3", + "dd51877f31f1cf7b9f68bbb09064a3", + "f5ebf68e7ebed6ad445ffc0c47e82650", + "ebdcfe03bcb7e21a9091202c5938c0a1bb", + "860fa5a72ff92efafc48a89df1632a4e2809", + "0d6d49daa26ae2818041108df3ce0a4db48c8d", + "e5d7e1bc5715f5ae991e4043e39533af5d53e47f", + "5232028a43b9d4dfa7f37439b49495926481ab8a29", + "c118803c922f9ae2397fb676a2ab7603dd9c29c21fe4", + "2af924f48b9bd7076bfd68794bba6402e2a7ae048de3ea", + "61255ac38231087c79ea1a0fa14538c26be1c851b6f318c0", + "f9712b8e42f0532162822f142cb946c40369f2f0e77b6b186e", + "76da0b89558df66f9b1e66a61d1e795b178ce77a359087793ff2", + "9036fd1eb32061bdecebc4a32aa524b343b8098a16768ee774d93c", + "f4ce5a05934e125d159678bea521f585574bcf9572629f155f63efcc", + "5e1c0d9fae56393445d3024d6b82692d1339f7b5936f68b062c691d3bf", + "538e35f3e11111d7c4bab69f83b30ade4f67addf1f45cdd2ac74bf299509", + "17572c4dcbb17faf8785f3bba9f6903895394352eae79b01ebd758377694cc", + "29f6bb55de7f8868e053176c878c9fe6c2055c4c5413b51ab0386c277fdbac75", + "bad026c8b2bd3d294907f2280a7145253ec2117d76e3800357be6d431b16366e41", + "386b7cb6e0fd4b27783125cbe80065af8eb9981fafc3ed18d8120863d972fa7427d9", + "06e8e6e26e756fff0b83b226dce974c21f970e44fb5b3e5bbada6e4b12f81cca666f48", + "2f9bd300244f5bc093ba6dcdb4a89fa29da22b1de9d2c9762af919b5fedf6998fbda305b", + "cf6bdcc46d788074511f9e8f0a4b86704365b2d3f98340b8db53920c385b959a38c8869ae7", + "1171e603e5cdeb4cda8fd7890222dd8390ede87b6f3284cac0f0d832d8250c9200715af7913d", + "bda7b2ad5d02bd35ffb009bdd72b7d7bc9c28b3a32f32b0ba31d6cbd3ee87c60b7b98c03404621", + "2001455324e748503aa08eff2fb2e52ae0170e81a6e9368ada054a36ca340fb779393fb045ac72b3", + "45f0761aefafbf87a68f9f1f801148d9bba52616ad5ee8e8ac9207e9846a782f487d5cca8b20355a18", + "3a7e05708be62f087f17b41ac9f20e4ef8115c5ab6d08e84d46af8c273fb46d3ce1aabebae5eea14e018", + "ea318da9d042ca337ccdfb2bee3e96ecb8f907876c8d143e8e44569178353c2e593e4a82c265931ba1dd79", + "e0f7c08f5bd712f87094b04528fadb283d83c9ceb82a3e39ec31c19a42a1a1c3bee5613b5640abe069b0d690", + "d35e63fb1f3f52ab8f7c6cd7c8247e9799042e53922fbaea808ab979fa0c096588cfea3009181d2f93002dfc11", + "b8b0ab69e3ae55a8699eb481dd665b6a2424c89bc6b7cca02d15fdf1b9854139cab49d34de498b50b2c7e8b910cf", + "fb65e3222a2950eae1701d4cdd4736266f65bf2c0d2e77968996eadb60ef74fb786f6234973a2524bdfe32d100aa0e", + "f28b4bb3a2e2c4d5c01a23ff134558559a2d3d704b75402983ee4e0f71d273ae056842c4153b18ee5c47e2bfa54313d4", + "7bb78794e58a53c3e4b1aeb161e756af051583d14e0a5a3205e094b7c9a8cf62d098fa9ea1db12f330a51ab9852c17f983", + "a879a8ebae4d0987789bcc58ec3448e35ba1fa1ee58c668d8295aba4eaeaf2762b053a677e25404f635a53037996974d418a", + "695865b353ec701ecc1cb38f3154489eed0d39829fc192bb68db286d20fa0a64235cde5639137819f7e99f86bd89afcef84a0f", + "a6ec25f369f71176952fb9b33305dc768589a6070463ee4c35996e1ced4964a865a5c3dc8f0d809eab71366450de702318e4834d", + "604749f7bfadb069a036409ffac5ba291fa05be8cba2f141554132f56d9bcb88d1ce12f2004cd3ade1aa66a26e6ef64e327514096d", + "daf9fa7dc2464a899533594e7916fc9bc585bd29dd60c930f3bfa78bc47f6c8439448043a45119fc9228c15bce5fd24f46baf9de736b", + "943ea5647a8666763084da6a6f15dcf0e8dc24f27fd0d9194805d25180fe3a6d98f4b2b5e0d6a04e9b41869817030f16ae975dd41fc35c", + "af4f73cbfc093760dfeb52d57ef45207bbd1a515f5523404e5d95a73c237d97ae65bd195b472de6d514c2c448b12fafc282166da132258e9", + "605f4ed72ed7f5046a342fe4cf6808100d4632e610d59f7ebb016e367d0ff0a95cf45b02c727ba71f147e95212f52046804d376c918cadd260", + "3750d8ab0a6b13f78e51d321dfd1aa801680e958de45b7b977d05732ee39f856b27cb2bcce8fbf3db6666d35e21244c2881fdcc27fbfea6b1672", + "8f1b929e80ab752b58abe9731b7b34eb61369536995abef1c0980d93903c1880da3637d367456895f0cb4769d6de3a979e38ed6f5f6ac4d48e9b32", + "d8469b7aa538b36cdc711a591d60dafecca22bd421973a70e2deef72f69d8014a6f0064eabfbebf5383cbb90f452c6e113d2110e4b1092c54a38b857", + "7d1f1ad2029f4880e1898af8289c23bc933a40863cc4ab697fead79c58b6b8e25b68cf5324579b0fe879fe7a12e6d03907f0140dfe7b29d33d6109ecf1", + "87a77aca6d551642288a0dff66078225ae39d288801607429d6725ca949eed7a6f199dd8a65523b4ee7cfa4187400e96597bfffc3e38ade0ae0ab88536a9", + "e101f43179d8e8546e5ce6a96d7556b7e6b9d4a7d00e7aade5579d085d527ce34a9329551ebcaf6ba946949bbe38e30a62ae344c1950b4bde55306b3bac432", + "4324561d76c370ef35ac36a4adf8f3773a50d86504bd284f71f7ce9e2bc4c1f1d34a7fb2d67561d101955d448b67577eb30dfee96a95c7f921ef53e20be8bc44", + "78f0ed6e220b3da3cc9381563b2f72c8dc830cb0f39a48c6ae479a6a78dcfa94002631dec467e9e9b47cc8f0887eb680e340aec3ec009d4a33d241533c76c8ca8c", + "9f6589c31a472e0a736f4eb22b6c70a9d332cc15304ccb66a6b97cd051b6ed82f8990e1d9bee2e4bb1c3c45e550ae0e7b96e93ae23f2fb8f63b309131e72b36cba6a", + "c138077ee4ed3d7ffa85ba851dfdf6e9843fc1dc00889d117237bfaad9aa757192f73556b959f98e6d24886ce48869f2a01a48c371785f12b6484eb2078f08c22066e1", + "f83e7c9e0954a500576ea1fc90a3db2cbd7994eaef647dab5b34e88ab9dc0b47addbc807b21c8e6dd3d0bd357f008471d4f3e0abb18450e1d4919e03a34545b9643f870e", + "3277a11f2628544fc66f50428f1ad56bcba6ee36ba2ca6ecdf7e255effc0c30235c039d13e01f04cf1efe95b5c2033ab72adda30994b62f2851d17c9920eadca9a251752dc", + "c2a834281a06fe7b730d3a03f90761daf02714c066e33fc07e1f59ac801ec2f4433486b5a2da8faa51a0cf3c34e29b2960cd0013378938dbd47c3a3d12d70db01d7d06c3e91e", + "47680182924a51cabe142a6175c9253e8ba7ea579ece8d9bcb78b1e9ca00db844fa08abcf41702bd758ee2c608d9612fed50e85854469cb4ef3038acf1e35b6ba4390561d8ae82", + "cec45830cd71869e83b109a99a3cd7d935f83a95de7c582f3adbd34e4938fa2f3f922f52f14f169c38cc6618d3f306a8a4d607b345b8a9c48017136fbf825aecf7b620e85f837fae", + "46fb53c70ab105079d5d78dc60eaa30d938f26e4d0b9df122e21ec85deda94744c1daf8038b8a6652d1ff3e7e15376f5abd30e564784a999f665078340d66b0e939e0c2ef03f9c08bb", + "7b0dcb52791a170cc52f2e8b95d8956f325c3751d3ef3b2b83b41d82d4496b46228a750d02b71a96012e56b0720949ca77dc68be9b1ef1ad6d6a5ceb86bf565cb972279039e209dddcdc", + "7153fd43e6b05f5e1a4401e0fef954a737ed142ec2f60bc4daeef9ce73ea1b40a0fcaf1a1e03a3513f930dd5335723632f59f7297fe3a98b68e125eadf478eb045ed9fc4ee566d13f537f5", + "c7f569c79c801dab50e9d9ca6542f25774b3841e49c83efe0b89109f569509ce7887bc0d2b57b50320eb81fab9017f16c4c870e59edb6c26620d93748500231d70a36f48a7c60747ca2d5986", + "0a81e0c547648595adca65623ce783411aac7f7d30c3ad269efafab288e7186f6895261972f5137877669c550f34f5128850ebb50e1884814ea1055ee29a866afd04b2087abed02d9592573428", + "6a7b6769e1f1c95314b0c7fe77013567891bd23416374f23e4f43e27bc4c55cfada13b53b1581948e07fb96a50676baa2756db0988077b0f27d36ac088e0ff0fe72eda1e8eb4b8facff3218d9af0", + "a399474595cb1ccab6107f18e80f03b1707745c7bf769fc9f260094dc9f8bc6fe09271cb0b131ebb2acd073de4a6521c8368e664278be86be216d1622393f23435fae4fbc6a2e7c961282a777c2d75", + "4f0fc590b2755a515ae6b46e9628092369d9c8e589e3239320639aa8f7aa44f8111c7c4b3fdbe6e55e036fbf5ebc9c0aa87a4e66851c11e86f6cbf0bd9eb1c98a378c7a7d3af900f55ee108b59bc9e5c", + "ed96a046f08dd675107331d267379c6fce3c352a9f8d7b243008a74cb4e9410836afaabe871dab6038ca94ce5f6d41fa922ce08aba58169f94cfc86d9f688f396abd24c11a6a9b0830572105a477c33e92", + "379955f539abf0eb2972ee99ed9546c4bbee363403991833005dc27904c271ef22a799bc32cb39f08d2e4ba6717d55153feb692d7c5efae70890bf29d96df02333c7b05ccc314e4835b018fec9141a82c745", + "e16cc8d41b96547ede0d0cf4d908c5fa393399daa4a9696e76a4c1f6a2a9fef70f17fb53551a8145ed88f18db8fe780a079d94732437023f7c1d1849ef69ad536a76204239e8ba5d97e507c36c7d042f87fe0e", + "a81de50750ece3f84536728f227208bf01ec5b7721579d007de72c88ee20663318332efe5bc7c09ad1fa8342be51f0609046ccf760a7957a7d8dc88941adb93666a4521ebe76618e5ddc2dd3261493d400b50073", + "b72c5fb7c7f60d243928fa41a2d711157b96aef290185c64b4de3dcfa3d644da67a8f37c2ac55caad79ec695a473e8b481f658c497edb8a191526592b11a412282d2a4010c90ef4647bd6ce745ebc9244a71d4876b", + "9550703877079c90e200e830f277b605624954c549e729c359ee01ee2b07741ecc4255cb37f96682dafcdbaade1063e2c5ccbd1918fb669926a67744101fb6de3ac016be4c74165a1e5a696b704ba2ebf4a953d44b95", + "a17eb44d4de502dc04a80d5a5e9507d17f27c96467f24c79b06bc98a4c410741d4ac2db98ec02c2a976d788531f1a4451b6c6204cef6dae1b6ebbcd0bde23e6fffb02754043c8fd3c783d90a670b16879ce68b5554fe1c", + "41d3ea1eaba5be4a206732dbb5b70b79b66a6e5908795ad4fb7cf9e67efb13f06fef8f90acb080ce082aadec6a1b543af759ab63fa6f1d3941186482b0c2b312f1151ea8386253a13ed3708093279b8eb04185636488b226", + "5e7cdd8373dc42a243c96013cd29df9283b5f28bb50453a903c85e2ce57f35861bf93f03029072b70dac0804e7d51fd0c578c8d9fa619f1e9ce3d8044f65d55634dba611280c1d5cfb59c836a595c803124f696b07ddfac718", + "26a14c4aa168907cb5de0d12a82e1373a128fb21f2ed11feba108b1bebce934ad63ed89f4ed7ea5e0bc8846e4fc10142f82de0bebd39d68f7874f615c3a9c896bab34190e85df05aaa316e14820b5e478d838fa89dfc94a7fc1e", + "0211dfc3c35881adc170e4ba6daab1b702dff88933db9a6829a76b8f4a7c2a6d658117132a974f0a0b3a38ceea1efc2488da21905345909e1d859921dc2b5054f09bce8eeb91fa2fc6d048ce00b9cd655e6aafbdaa3a2f19270a16", + "ddf015b01b68c4f5f72c3145d54049867d99ee6bef24282abf0eecdb506e295bacf8f23ffa65a4cd891f76a046b9dd82cae43a8d01e18a8dff3b50aeb92672be69d7c087ec1fa2d3b2a39196ea5b49b7baede37a586fea71aded587f", + "6ee721f71ca4dd5c9ce7873c5c04c6ce76a2c824b984251c15535afc96adc9a4d48ca314bfeb6b8ee65092f14cf2a7ca9614e1dcf24c2a7f0f0c11207d3d8aed4af92873b56e8b9ba2fbd659c3f4ca90fa24f113f74a37181bf0fdf758", + "689bd150e65ac123612524f720f54def78c095eaab8a87b8bcc72b443408e3227f5c8e2bd5af9bcac684d497bc3e41b7a022c28fb5458b95e8dfa2e8caccde0492936ff1902476bb7b4ef2125b19aca2cd3384d922d9f36dddbcd96ae0d6", + "3a3c0ef066fa4390ec76ad6be1dc9c31ddf45fef43fbfa1f49b439caa2eb9f3042253a9853e96a9cf86b4f873785a5d2c5d3b05f6501bc876e09031188e05f48937bf3c9b667d14800db62437590b84ce96aa70bb5141ee2ea41b55a6fd944", + "741ce384e5e0edaebb136701ce38b3d33215415197758ae81235307a4115777d4dab23891db530c6d28f63a957428391421f742789a0e04c99c828373d9903b64dd57f26b3a38b67df829ae243feef731ead0abfca049924667fdec49d40f665", + "a513f450d66cd5a48a115aee862c65b26e836f35a5eb6894a80519e2cd96cc4cad8ed7eb922b4fc9bbc55c973089d627b1da9c3a95f6c019ef1d47143cc545b15e4244424be28199c51a5efc7234dcd94e72d229897c392af85f523c2633427825", + "71f1554d2d49bb7bd9e62e71fa049fb54a2c097032f61ebda669b3e1d4593962e47fc62a0ab5d85706aebd6a2f9a192c88aa1ee2f6a46710cf4af6d3c25b7e68ad5c3db23ac009c8f13625ff85dc8e50a9a1b2682d3329330b973ec8cbb7bb73b2bd", + "167cc1067bc08a8d2c1a0c10041ebe1fc327b37043f6bd8f1c63569e9d36ded58519e66b162f34b6d8f1107ef1e3de199d97b36b44141a1fc4f49b883f40507ff11f909a017869dc8a2357fc7336ae68703d25f75710b0ff5f9765321c0fa53a51675c", + "cb859b35dc70e264efaad2a809fea1e71cd4a3f924be3b5a13f8687a1166b538c40b2ad51d5c3e47b0de482497382673140f547068ff0b3b0fb7501209e1bf36082509ae85f60bb98fd02ac50d883a1a8daa704952d83c1f6da60c9624bc7c99912930bf", + "afb1f0c6b7125b04fa2578dd40f60cb411b35ebc7026c702e25b3f0ae3d4695d44cfdf37cb755691dd9c365edadf21ee44245620e6a24d4c2497135b37cd7ac67e3bd0aaee9f63f107746f9b88859ea902bc7d6895406aa2161f480cad56327d0a5bba2836", + "13e9c0522587460d90c7cb354604de8f1bf850e75b4b176bda92862d35ec810861f7d5e7ff6ba9302f2c2c8642ff8b7776a2f53665790f570fcef3cac069a90d50db42227331c4affb33d6c040d75b9aeafc9086eb83ced38bb02c759e95ba08c92b17031288", + "0549812d62d3ed497307673a4806a21060987a4dbbf43d352b9b170a29240954cf04bc3e1e250476e6800b79e843a8bd8253b7d743de01ab336e978d4bea384eaff700ce020691647411b10a60acacb6f8837fb08ad666b8dcc9eaa87ccb42aef6914a3f3bc30a", + "3a263efbe1f2d463f20526e1d0fd735035fd3f808925f058b32c4d8788aeeab9b8ce233b3c34894731cd73361f465bd350395aebcabd2fb63010298ca025d849c1fa3cd573309b74d7f824bbfe383f09db24bcc565f636b877333206a6ad70815c3bef5574c5fc1c", + "3c6a7d8a84ef7e3eaa812fc1eb8e85105467230d2c9e4562edbfd808f4d1ac15d16b786cc6a02959c2bc17149c2ce74c6f85ee5ef22a8a96b9be1f197cffd214c1ab02a06a9227f37cd432579f8c28ff2b5ac91cca8ffe6240932739d56788c354e92c591e1dd76499", + "b571859294b02af17541a0b5e899a5f67d6f5e36d38255bc417486e69240db56b09cf2607fbf4f95d085a779358a8a8b41f36503438c1860c8f361ce0f2783a08b21bd7232b50ca6d35428335272a5c05b436b2631d8d5c84d60e8040083768ce56a250727fb0579dd5c", + "98ee1b7269d2a0dd490ca38d447279870ea55326571a1b430adbb2cf65c492131136f504145df3ab113a13abfb72c33663266b8bc9c458db4bf5d7ef03e1d3b8a99d5de0c024be8fabc8dc4f5dac82a0342d8ed65c329e7018d6997e69e29a01350516c86beaf153da65ac", + "41c5c95f088df320d35269e5bf86d10248f17aec6776f0fe653f1c356aae409788c938befeb67c86d1c8870e8099ca0ce61a80fbb5a6654c44529368f70fc9b9c2f912f5092047d0ffc339577d24142300e34948e086f62e23ecaca410d24f8a36b5c8c5a80e0926bc8aa16a", + "9f93c41f533b2a82a4df893c78faaaa793c1506974ba2a604cd33101713ca4adfd30819ffd8403402b8d40aff78106f3357f3e2c24312c0d3603a17184d7b999fc9908d14d50192aebabd90d05073da7af4be37dd3d81c90acc80e8333df546f17ab6874f1ec204392d1c0571e", + "3da5207245ac270a915fc91cdb314e5a2577c4f8e269c4e701f0d7493ba716de79935918b917a2bd5db98050dbd1eb3894b65fac5abf13e075abebc011e651c03cafb6127147771a5c8418223e1548137a89206635c26ca9c235ccc108dc25cf846e4732444bd0c2782b197b262b", + "96011af3965bb941dc8f749932ea484eccb9ba94e34b39f24c1e80410f96ce1d4f6e0aa5be606def4f54301e930493d4b55d484d93ab9dd4dc2c9cfb79345363af31ad42f4bd1aa6c77b8afc9f0d551bef7570b13b927afe3e7ac4de7603a0876d5edb1ad9be05e9ee8b53941e8f59", + "51dbbf2a7ca224e524e3454fe82ddc901fafd2120fa8603bc343f129484e9600f688586e040566de0351d1693829045232d04ff31aa6b80125c763faab2a9b233313d931903dcfaba490538b06e4688a35886dc24cdd32a13875e6acf45454a8eb8a315ab95e608ad8b6a49aef0e299a", + "5a6a422529e22104681e8b18d64bc0463a45df19ae2633751c7aae412c250f8fb2cd5e1270d3d0cf009c8aa69688ccd4e2b6536f5747a5bc479b20c135bf4e89d33a26118705a614c6be7ecfe766932471ad4ba01c4f045b1abb5070f90ec78439a27a1788db9327d1c32f939e5fb1d5ba", + "5d26c983642093cb12ff0afabd87b7c56e211d01844ad6da3f623b9f20a0c968034299f2a65e6673530c5980a532beb831c7d0697d12760445986681076dfb6fae5f3a4d8f17a0db5008ce8619f566d2cfe4cf2a6d6f9c3664e3a48564a351c0b3c945c5ee24587521e4112c57e318be1b6a", + "52641dbc6e36be4d905d8d60311e303e8e859cc47901ce30d6f67f152343e3c4030e3a33463793c19effd81fb7c4d631a9479a7505a983a052b1e948ce093b30efa595fab3a00f4cef9a2f664ceeb07ec61719212d58966bca9f00a7d7a8cb4024cf6476bab7fbccee5fd4e7c3f5e2b2975aa2", + "a34ce135b37bf3db1c4aaa4878b4499bd2ee17b85578fcaf605d41e1826b45fdaa1b083d8235dc642787f11469a5493e36806504fe2a2063905e821475e2d5ee217057950370492f5024995e77b82aa51b4f5bd8ea24dc71e0a8a640b0592c0d80c24a726169cf0a10b40944747113d03b52708c", + "46b3cdf4946e15a5334fc3244d6680f5fc132afa67bf43bfade23d0c9e0ec64e7dab76faaeca1870c05f96b7d019411d8b0873d9fed04fa5057c039d5949a4d592827f619471359d6171691cfa8a5d7cb07ef2804f6ccad4821c56d4988bea7765f660f09ef87405f0a80bcf8559efa111f2a0b419", + "8b9fc21691477f11252fca050b121c5334eb4280aa11659e267297de1fec2b2294c7ccee9b59a149b9930b08bd320d3943130930a7d931b71d2f10234f4480c67f1de883d9894ada5ed5071660e221d78ae402f1f05af47761e13fec979f2671e3c63fb0ae7aa1327cf9b8313adab90794a52686bbc4", + "cd6598924ce847de7ff45b20ac940aa6292a8a99b56a74eddc24f2cfb45797188614a21d4e8867e23ff75afd7cd324248d58fcf1ddc73fbd115dfa8c09e62022fab540a59f87c989c12a86ded05130939f00cd2f3b512963dfe0289f0e54acad881c1027d2a0292138fdee902d67d9669c0ca1034a9456", + "594e1cd7337248704e691854af0fdb021067ddf7832b049ba7b684438c32b029eded2df2c89a6ff5f2f2c311522ae2dc6db5a815afc60637b15ec24ef9541f1550409db2a006da3affffe548a1eaee7bd114e9b805d0756c8e90c4dc33cb05226bc2b393b18d953f8730d4c7ae693159cdba758ad28964e2", + "1f0d292453f04406ada8be4c161b82e3cdd69099a8637659e0ee40b8f6da46005cfc6085db9804852decfbe9f7b4dda019a7112612895a144ed430a960c8b2f5458d3d56b7f427cee6358915aee7146278aed2a0296cdd929e4d21ef95a3adf8b7a6beba673cdccdbdcfb2474711732d972ad054b2dc64f38d", + "b65a72d4e1f9f9f75911cc46ad0806b9b18c87d105332a3fe183f45f063a746c892dc6c4b9181b1485b3e3a2cc3b453eba2d4c39d6905a774ed3fb755468beb190925ecd8e57ecb0d985125741650c6b6a1b2a3a50e93e3892c21d47ed5884eed83aa94e1602288f2f49fe286624de9d01fcb54433a0dc4ad70b", + "705ce0ffa469250782aff725248fc88fe98eb76659e8407edc1c4842c9867d61fe64fb86f74e980598b92bc213d06f337bd5654fc28643c7ba769a4c31563427543c00808b627a19c90d86c322f33566ce020121cc322229c3337943d46f68ef939d613dcef0077269f88151d6398b6b009abb763410b154ad76a3", + "7fa881ce87498440ab6af13854f0d851a7e0404de33896999a9b3292a5d2f5b3ad033530c558168fe5d2fdb9b89a2354c46cf32a0e612afc6c6485d789511bfef26800c74bf1a4cfbe30bda310d5f6029c3dccdedb6149e4971274e276dccfabd63bc4b9955e8303feb57f8a688db55ecb4b33d1f9fe1b3a8ba7ac32", + "23a98f71c01c0408ae16843dc03be7db0aeaf055f951709d4e0dfdf64fffbffaf900ee592ee10929648e56f6c1e9f5be5793f7df66453eb56502c7c56c0f0c88da77abc8fa371e434104627ef7c663c49f40998dbad63fa6c7aa4fac17ae138d8bbe081f9bd168cd33c1fbc92fa35ed687679f48a64b87db1fe5bae675", + "7b8970b6a33237e5a7bcb39272703edb92285c55842b30b9a48834b1b507cc02a6764739f2f7ee6ae02a7b715a1c455e59e8c77a1ae98abb10161853f1234d20da99016588cd8602d6b7ec7e177d4011edfa61e6b3766a3c6f8d6e9eac893c568903eb6e6aba9c4725774f6b4343b7acaa6c031593a36eef6c72806ff309", + "f7f4d328ba108b7b1de4443e889a985ed52f485f3ca4e0c246aa5526590cbed344e9f4fe53e4eea0e761c82324649206ca8c2b45152157d4115e68c818644b03b65bb47ad79f94d37cb03c1d953b74c2b8adfa0e1c418bda9c518ddcd7050e0f149044740a2b16479413b63fc13c36144f80c73687513dca761ba8642a8ae0", + "2d7dc80c19a1d12d5fe3963569547a5d1d3e821e6f06c5d5e2c09401f946c9f7e13cd019f2f9a878b62dd850453b6294b99ccaa068e542993524b0f63832d48e865be31e8ec1ee103c718340c904b32efb69170b67f038d50a3252794b1b4076c0620621ab3d91215d55ffea99f23d54e161a90d8d4902fda5931d9f6a27146a", + "77dff4c7ad30c954338c4b23639dae4b275086cbe654d401a2343528065e4c9f1f2eca22aa025d49ca823e76fdbb35df78b1e5075ff2c82b680bca385c6d57f7ea7d1030bb392527b25dd73e9eeff97bea397cf3b9dda0c817a9c870ed12c006cc054968c64000e0da874e9b7d7d621b0679866912243ea096c7b38a1344e98f74", + "83bed0d556798f2b419f7056e6d3ffada06e939b95a688d0ec8c6ac5ea45ab73a4cf01043e0a170766e21395f27ab4b78c435f5f0dfe6e93ab80df38610e41158429ddf20296f53a06a017723359fe22dc08b5da33f0800a4fe50118e8d7eab2f83a85cd764bf8a166903bd0e9dcfeeceba44ff4ca4439846458d31ea2bb564645d1", + "ea12cf5a113543e39504123036f15a5bafa9c555562469f99cd29996a4dfaaab2a34b00557ccf15f37fc0cc1b3be427e725f2cd952e50af7970dda9200cd5ce252b1f29c40067fea3027ed686190803b59d834179d1b8f5b55abe55ad174b2a1188f7753ec0ae2fc01316e7d498b68ee3598a0e9baaaa664a60f7fb4f90edbed494ad7", + "55266358332d8d9e68bd13432088beadf95833aab67a0eb3b10650414255f299e2670c3e1a5b2976159a46c72a7ce57d59b7be14c15798e09ed50fa312a431b0264d7a1396aa6168bde897e208ece53d2cfc83786113b1e6eac5e9bb98984abb6c8d64eebb991903254abc650c999bb9958a5d7937434b869bc940e21b9dc1cc8982f2ba", + "4d6104ded730aefe02873f4c741232c8234a6d66d85393aff57fbf56ba6347666988dfc4d58f3cc895a0da598822edeee4533d24ec0ee292fd5e1ad04898ffbc1ff4bef14dec220babcb0f28fffe32a6e2c28aaaac16442bf4feb02917d18bb3a415d84fa9358d5a9852688d846c92271911f934181c30f82434d915f93f155a1ffbf0b125", + "eb5f579a4c476af554aac11e5719d378549497e613b35a929d6f36bb8831d7a466aa76de9be24ebb55543f1c13924f64cfd648a5b3fa90387315c16174dbf1e9a183c196d9bb8f84af65f1f8212429aadc11ef2426d07d4716062b85c8d5d2dff8e21b9e62b7fa7dbd57d72633054b464fb28583a56ca13ccc5ddc74dae942492f31731e7046", + "ebddec3dcaf18063e45a76ebeac39af85a1adc2818881ccce48c106288f5988365cca2b4b1d7f037322da46840f42bebdcbc7193838d426e101087d8cea03aaff743d573eb4f4e9a71a2c884390769a6503874125d194bee8d46a3a0d5e4fcf28ff8465887d8e9df771d70157e75df3642b331d2778ceb32ceba868640171ab7a5d22eede1ee44", + "26d87ec70b57691e3bb359633d3ddba17f029d62cdfe977f5fd42274d79b444a32494d1c01e9f72d03cce78c806df96e93ea78da3a054209924ed765edc4d570f66168dc25ee3114e4017e387440349c8f0a94804761c3055f88e4fda2a49b860b1486a9609095f6250f268b6a4d1aecc03a505632ebf0b9dc22d0755a736faf7ad7000858b5864b", + "3880f5cc2d08fa70ef44b1f263fcf534d062a298c1bd5ee2eee8c3265806c4ce50b004f3a1fc1fa5b024aaac7f528c023c8181f67c6e1c357425dc4d573bd46b93a542afa3a19bdb140a2ce666e1a01f5c4d2dcd681fa9f5839b797813c394738d5ee4971386c12c7c117d17c7bec324b760aa30cda9ab2aa850284ba6fa97946f710f02449d1883c6", + "3317d2f452105dd3f4a96f9257af8285a80be58066b50f6f54bd633749b49f6ab9d57d45652d2ae852a2f6940cd5ec3159dd7f333358b12f502325df38843508faf7e246352d201280babd90b14fbf7722641c3601d0e458474439973c611bb5502fd0eb3078f87124ca7e1a016fcb6cfeff65f6a565985aca7122cfa8c5a11da0cb47797c5132333179", + "f2c5c955d0224e784a46b9125f8fef8a5e1271e145eb08bbbd07ca8e1cfc848cef14fa3b36221ac62006403dbb7f7d77958ccc54a8566c837858b809f3e310ace8ca682515bc655d2a397cab238a663b464d511f02dc5d033dad4cb5e0e519e94a54b62a3896e460ec70e5716b5921bf8396aa86a60123e6287e34570bb01bdc602e113670bf498af2ff10", + "180e275205691a83630cf4b0c7b80e6df8fad6ef1c23ba8013d2f09aef7abade1827f23af230de90676240b4b3b0673f8afdea0327330055041741f65560d90348de696d34ca80dfe8afae582fe4879d4594b80e9408fb53e800e01ca58552b905c365e7f1416e51c080f517d6bbd30e64ae1535d59decdc76c6624d737868f49f2f719da39ba1344d59eab9", + "c517a84e4631a7f65ace170d1e5c2fdb259841535d88da323e68c0883e6af7b041cfe05908815a5a9d1b14fa712c2c16fadcf1ca54d3aa954d411240df331b2aebdfb65aced84d0b8aace56ec0aa7c13ec7d75ca883b6bcf6db74c9e98463c484a8262684f29910373430651f90ecffe18b072170e61ee58de20e2a6ff67b3ab00fccbb80af943f20b56b98107", + "d1a56a5ee990e02b84b5862fde62f69ec07567be2d7ccb769a461c4989d11fdda6c945d942fb8b2da795ed97e43a5b7dbdde7f8fd2ff7154544336d5c50fb7380341e660d4898c7fbc39b2b782f28defac6873523c7c1de8e52c65e4395c686ba483c35a220b0416d46357a063fa4c33fa9c52d5c207a1304ae141c791e62ba6a7374ed922b8dd94079b72b69302", + "4720b88d6bfb1ab43958e26827730d852d9ec30173ebd0fe0d273edcece2e788558984cd9306fe5978086a5cb6d37975755d2a3daeb16f99a8a11544b8247a8b7ed5587afc5bea1daf85dcea5703c5905cf56ae7cc76408ccabb8fcc25cacc5ff456db3f62fa559c45b9c71505eb5073df1f10fc4c9060843f0cd68bbb4e8edfb48d0fd81d9c21e53b28a2aae4f7ba", + "f4639b511db9e092823d47d2947efacbaae0e5b912dec3b284d2350b9262f3a51796a0cd9f8bc5a65879d6578ec24a060e293100c2e12ad82d5b2a0e9d22965858030e7cdf2ab3562bfa8ac084c6e8237aa22f54b94c4e92d69f22169ced6c85a293f5e16bfc326153bf629cdd6393675c6627cd949cd367eef02e0f54779f4d5210197698e4754a5fe490a3a7521c1c", + "3d9e7a860a718565e3670c29079ce80e381969fea91017cfd5952e0d8a4a79bb08e2cd1e26161f30ee03a24891d1bfa8c212861b51618d07429fb48000ff87ef09c6fca526567777e9c076d58a642d5c521b1caa5fb0fb3a4b8982dc14a444732b72b239b8f01fc8ba8ee86b3013b5d3e98a92b2aeaecd4879fca5d5e9e0bd880dbfffa6f96f94f3998812aac6a714f331", + "4d9bf551d7fd531e7482e2ec875c0651b0bcc6caa738f7497befd11e67ae0e036c9d7ae4301cc3c7906f0d0e1ed4738753f414f9b3cd9b8a71176e325c4c74ce020680ecbfb146889597f5b40487e93f974cd866817fb9fb24c7c7c16177e6e120bfe349e83aa82ba40e59e917565788658a2b254f25cf99bc65070b3794cea2259eb10e42bb54852cba3110baa773dcd70c", + "b91f65ab5bc059bfa5b43b6ebae243b1c46826f3da061338b5af02b2da76bb5ebad2b426de3c3134a633499c7c36a120369727cb48a0c6cbab0acecdda137057159aa117a5d687c4286868f561a272e0c18966b2fec3e55d75abea818ce2d339e26adc005c2658493fe06271ad0cc33fcb25065e6a2a286af45a518aee5e2532f81ec9256f93ff2d0d41c9b9a2efdb1a2af899", + "736f6e387acb9acbee026a6080f8a9eb8dbb5d7c54ac7053ce75dd184b2cb7b942e22a3497419ddb3a04cf9e4eb9340a1a6f9474c06ee1dcfc8513979fee1fc4768087617fd424f4d65f54782c787a1d2de6efc81534343e855f20b3f3589027a5436201eee747d45b9b8375e4294d72ab6a52e04dfbb2914db92ee58f134b026527ed52d4f794459e02a43a17b0d51ea69bd7f3", + "9242d3eb31d26d923b99d66954cfade94f25a18912e6356810b63b971ae74bb53bc58b3c01424208ea1e0b1499936daea27e63d904f9ed65fdf69de40780a3027b2e89d94bdf214f585472613ce328f628f4f0d56217dfb53db5f7a07f54c8d71db16e27de7cdb8d23988837b49b65c12f1771d979e8b192c9f4a16b8d9fba917bcf74ce5a82aac2075608ba6c2d485fa59864b9de", + "5da68704f4b592d41f08aca08f62d85e2e2466e5f3be010315d11d113db674c4b98764a509a2f5aacc7ae72c9deff2bcc42810b47f64d429b35745b9efff0b18c58653461e968aaa3c2c7fc455bc5771a8f10cd184be831040df767201ab8d32cb9a58c89afbebecb524502c9b940c1b838f8361bbcde90d272715017f67609ea39b20fac985332d82daaa023999e3f8bfa5f3758bb8", + "71ea2af9c8ac2e5ae44a176662882e01027ca3cdb41ec2c6785606a07d7231cd4a2bded7155c2feef3d44d8fd42afa73265cef826f6e03aa761c5c51d5b1f129ddc27503ff50d9c2d748322df4b13dd5cdc7d46381528ab22b79b0049011e4d2e57fe2735e0d58d8d56e92c75dbeac8c76c4239d7f3f24fb56697593b3e4afa6671d5bbc96c079a1c154fe20212ade67b05d49ceaa7a84", + "1d133170582fa4bff59a21953ebbc01bc202d43cd79c083d1f5c02fa15a43a0f519e36acb710bdabac880f04bc003800641c2487930de9c03c0e0deb347fa815efca0a38c6c5de694db698743bc955581f6a945deec4ae988ef7cdf40498b77796ddea3fae0ea844891ab751c7ee20917c5a4af53cd4ebd82170078f41ada2795e6eea17593fa90cbf5290a1095e299fc7f507f360f187cd", + "5ec4ac45d48fc15c72471d795066bdf8e99a483d5fdd599511b9cdc408de7c0616491b73924d0266da34a495331a935c4b8884f57d7ad8cce4cbe586875aa52482215ed39d7626cce55d50349c7767981c8bd6890f132a196184247343566fc972b86fe3c5369d6a6519e9f07942f0522b77ad01c751dcf7defe31e471a0ec00963765dd8518144a3b8c3c978ad108056516a25dbe3092e73c", + "0d5e74b78290c689f2b3cfea45fc9b6a84c822639cd438a7f05c07c374adced42cdc12d2a9233a4ffe80307efc1ac13cb04300e165f8d90dd01c0ea955e7657332c6e86ad6b43e78ba4c13c675aed83192d8427866fb6484e6a3071b2369a46fba9005f31232da7ffec7952f831aaaddf63e225263531c2cf387f8cc14fa856c8795137142c3a52ffa69b8e30ebc88ce3bbc227597bcc8dddd89", + "a0fe36f983259921dc2fa7d89002b3066241d63bfc2448caf7e10522a35562be0bfedc3dce49cfce2e614a04d4c64cfc0ab898873a7fc26928dc1927c009d12f6f9b7a278205d3d0057604f4ac746f8b9287c3bc6b929832bf253b6586192ac43fdd29ba585dbd9059aab9c6ff6000a7867c67fec1457b733f6b620881166b8fed92bc8d84f0426002e7be7fcd6ee0abf3755e2babfe5636ca0b37", + "1d29b6d8eca793bb801becf90b7d7de215b17618ec32340da4bac707cdbb58b951d5036ec02e105d83b5960e2a72002d19b7fa8e1128cc7c5049ed1f76b82a59eac6ed09e56eb73d9ade38a6739f0e07155afa6ec0d9f5cf13c4b30f5f9a465b162a9c3ba04b5a0b3363c2a63f13f2a3b57c590ec6aa7f64f4dcf7f1582d0ca157eb3b3e53b20e306b1f24e9bda87397d413f01b453ceffeca1fb1e7", + "6a2860c110cd0fc5a19bcaafcd30762ee10242d34739638e716bd89fd537ea4dc630e6f85d1bd88a25ad3892ca554c232c9830bd56980c9f08d378d28f7fa6fa7df4fcbf6ad98b1adfff3ec1f63310e50f920c99a5200b8e64c2c2ca249399a149942261f737d5d72da949e914c024d57c4b639cb89990fed2b38a37e5bcd24d17ca12dfcd36ce04691fd03c32f6ed5de2a2191ed7c826375ba81f78d0", + "7132aa291ddc9210c60dbe7eb3c19f9053f2dd74742cf57fdc5df98312adbf4710a73245de4a0c3b24e21ab8b466a77ae29d15500d5142555ef3088cbccbe685ed9119a10755148f0b9f0dbcf02b2b9bcadc8517c88346ea4e78285e9cbab122f824cc18faf53b742a87c008bb6aa47eed8e1c8709b8c2b9adb4cc4f07fb423e5830a8e503ab4f7945a2a02ab0a019b65d4fd71dc364d07bdc6e637990e3", + "3e664da330f2c6007bff0d5101d88288aaacd3c07913c09e871cce16e55a39fde1ce4db6b8379977c46cce08983ca686778afe0a77a41baf447854b9aa286c398c2b83c95a127b053101b6799c1638e5efd67273b2618df6ec0b96d8d040e8c1ee01a99b9b5c8fe63fea2f749e6c90d31f6fae4e1469ac09884c4fe1a8539acb313f42c941224a0e79c059e18affc2bcb6724975c436f7bf949ebdd8aef51c", + "7a6ea63a271eb49470f5ce77519ed61ae9b2f1be07a96855726bc3df1d0723af3a703fdfc2e739c9d31d25814daf661a23558b50982e66ee37ad880f5c8f11c8130fac8a5d0250583700d5a324894fae6d61993f6bf9327214f8674649f355b23fd634940b2c467973a839e659169c773119919f5b81ee171edb2e5f6940d7551f9e5a70625d9ea88711ad0ed8ab2da720ad358bef954456cb2d5636425717c2", + "c5106bbda114168c449172e49590c7eeb827fa4e1a2a7a87a3c1f721a9047d0c0a50fbf244731be1b7eb1a2ef30f5ae846a9f38f0df44f32af61b68dbdcd0226e741dfb6ef81a2503691af5e4b3171f48c59ba4ef91eba344b5b697f261df7bbbb734ca6e6daebaa4a179feb17002823281b8534d55a6531c59305f6e3fd3fa63b747bcf0deb654c392a02fe687a269effb1238f38bcaea6b208b221c45fe7fbe7", + "597716a5ebeebc4bf524c15518816f0b5dcda39cc833c3d66b6368ce39f3fd02ceba8d12072bfe6137c68d3acd50c849873150928b320b4fbc31c1456679ea1d0acaeeabf666d1f1bad3e6b9312c5cbdecf9b799d3e30b0316bed5f41245107b693366accc8b2bcef2a6be54209ffabc0bb6f93377abdcd57d1b25a89e046f16d8fd00f99d1c0cd247aafa72234386ae484510c084ee609f08aad32a005a0a5710cb", + "0771ffe789f4135704b6970b617bae41666bc9a6939d47bd04282e140d5a861c44cf05e0aa57190f5b02e298f1431265a365d29e3127d6fccd86ec0df600e26bcdda2d8f487d2e4b38fbb20f1667591f9b5730930788f2691b9ee1564829d1ada15fffc53e785e0c5e5dd11705a5a71e390ca66f4a592785be188fefe89b4bd085b2024b22a210cb7f4a71c2ad215f082ec63746c7367c22aedb5601f513d9f1ffc1f3", + "be6556c94313739c115895a7bad2b620c0708e24f0390daa55521c31d2c6782acf41156271238885c367a57c72b4fe999c160e804ad58d8e565edbce14a2dd90e443eb80626b3eab9d7ab75d6f8a062d7ca89b7af8eb292c98eaf87ad1dfd0db103d1bb6188bd7e7a63502153cf3ce23d43b60c5782602bac8ad92fb2324f5a79453898c5de18415639ecc5c7974d3077f76fc1df5b956723bb19a624d7ea3ec13ba3d86", + "4bc33729f14cd2f1dc2ff459abee8f6860dda1062845e4adab78b53c835d106bdfa35dd9e77219eaef403d4e80488ca6bd1c93dd76ef9d543fbb7c8904dccc5f71509a6214f73d0f4e467c3e038ea639b29e7fc442ee29f57117740576188ada15a739827c647a46b0271817ab235c023c30c90f2115e5c90cd8501e7b286962fc66ffc3fe7e8978746168314908a41998bd83a1eeffda9d714b864f4d490fdeb9c7a6edfa", + "ab12faea205b3d3a803cf6cb32b9698c32301a1e7f7c6c23a20174c95e98b7c3cfe93fffb3c970face8f5751312a261741141b948d777b8a2ea286fe69fc8ac84d34116a4674bb09a1a0b6af90a748e511749de4697908f4acb22be08e96ebc58ab1690acf73914286c198a2b57f1dd70ea8a52325d3045b8bdfe9a09792521526b7564a2a5fcd01e291f1f8894017ce7d3e8a5dba15332fb410fcfc8d62195a48a9e7c86fc4", + "7d421e59a567af70594757a49809a9c22e07fe14061090b9a041875bb77933deae36c823a9b47044fa0599187c75426b6b5ed94982ab1af7882d9e952eca399ee80a8903c4bc8ebe7a0fb035b6b26a2a013536e57fa9c94b16f8c2753c9dd79fb568f638966b06da81ce87cd77ac0793b7a36c45b8687c995bf4414d28289dbee977e77bf05d931b4feaa359a397ca41be529910077c8d498e0e8fb06e8e660cc6ebf07b77a02f", + "0c18ab727725d62fd3a2714b7185c09faca130438eff1675b38beca7f93a6962d7b98cb300ea33067a2035cdd694348784aa2eda2f16c731eca119a050d3b3ce7d5c0fd6c234354a1da98c0642451922f670984d035f8c6f35031d6188bbeb31a95e99e21b26f6eb5e2af3c7f8eea426357b3b5f83e0029f4c4732bca366c9aa625748297f039327c276cd8d9c9bf692a47af098aa50ca97b99961bef8bc2a7a802e0b8cfdb84319", + "92d5909d18a8b2b9971cd1627b461e98a74ba377186a6a9df5bd133635250b300abccb2254cacb775df6d99f7c7d0952653c28e6909b9f9a45adce691f7adc1afffcd9b06e49f775364cc2c62825b9c1a86089080e26b57e732aac98d80d009bfe50df01b95205aa07ed8ec5c873da3b92d00d53af825aa64b3c634c5ece40bff152c331222d3453fd92e0ca17cef19ecb96a6eed4961b627aca48b12fecd091754f770d52ba861546", + "802f22e4a388e874927fef24c797408254e03910bab5bf372320207f8067f2b1ea543917d4a27df89f5bf936ba12e04302bde23119533d0976beca9e20cc16b4dbf17a2ddc44b66aba76c61ad59d5e90de02a88327ead0a8b75463a1a68e307a6e2e53ecc1986274b9ee80bc9f3140671d5285bc5fb57b281042a8978a1175900c6073fd7bd740122956602c1aa773dd2896674d0a6beab24454b107f7c847acb31a0d332b4dfc5e3f2f", + "3844fe65db11c92fb90bf15e2e0cd216b5b5be91604baf3b84a0ca480e41ecfaca3709b32f8c6e8761406a635b88eec91e075c48799a16ca08f295d9766d74475c47f3f2a274eae8a6ee1d191a7f37ee413a4bf42cad52acd5564a651715ae42ac2cddd52f819c692ecdef52ecb763270322cdca7bd5aef71428fa73e844568b96b43c89bf1ed42a0abf209ffad0eeec286c6f141e8af073ba4adfbbdeda253752ae36c9957dfc905b4c49", + "329377f7bf3c8d74991a7d61b0cf39baff5d485d79751b0d5ad017d23bec570fb19810105bab79ab5acb102ab972165224d4ec888ec7de5148077fa9c1bb6820e0d91ae4e2591a21fec2f820606ce4bafc1e377f8dc3a5bd1a9e2772a57abccd0b757164d768872c91d02789545ab5b203f688d71dd08522a3fd2f5bcd7df507aebf1ca27ddff0a82afb7aa9c180008f49d1325adf97d047e77238fc75f56356de4e87d8c961575c9f6362c9", + "f7f269929b0d71ea8eef7120e55ccba691c582dd534692abef35c0fe9dec7dae973cd9702e5ad420d278fe0e653fdcb22fdcb63148109ec7e94f2d0750b28157dd1764376ae10fdb0a4aef3b304bd82793e0595f941226a2d72abbc929f53134dc495b0d65ced409914f94c2523f3dfbbdeeac84ae247ab5d1b9ea33dce1a808885a55be1f3683b46f4be73d9b62eec2585f690056858dfc427aabf591cd276724885bcd4c00b93bb51fb7484d", + "ac022309aa2c4d7fb628255b8b7fb4c3e3ae64b1cb65e0de711a6def1653d95d8088871cb8905fe8ae76423604988a8f77589f3f776dc1e4b30dbe9dd262b2187db02518a132d219bd1a06ebac13132b5164b6c420b37dd2ccee7d69b3b7fa12e54f0a53b853d490a68379ea1fa2d79762830ffb71bf86aab506b51f85c4b6a41b69325c7d0c7aa85b93b7144489d213e8f33dbb879fce22849865337b620b155cb2d2d36a68832889e30194d36d", + "d009c2b78a8f02e5e5dbb586ef71fc324b375092e15913ca1a5bfd22d516baadb96867bee3562e77c4a4852344a1a76c30728be5e22400b4cc41711f66754c246a520498d8c24f0205b9c873748dbeb67fe1ad099ad04cf89f4b517f0aa481136d9f6de2d727df01c6aa4099da59d4382b51e25fd47c33d9842c32b62331e50794bfe8b61b3ba9de1b8b704779c6d65edff3af00f121ab4a7ea384edabe47c6d0098a48991f387ca4444135ec59d46", + "c00bab36cce69899817d1425016d222d7303197ed3e3fdcac744705e7f178a1ac745968900f69299163e19b3161f3e0a4cc55aa2e4e71e0ee6ac427d1f4d14e063f68d303ddfbb18118335cfa7a6a90d99c38319ee76f7a884846a9e0b68030bf28e78bfbd56359b9368842814da42b04cb0e307d5d846dc22f049147bae31b9a956d17676a8cc348dafa3cabc2007a30e730e3894dddf9999fb8819086311f0703e141613ed6dcd7af8510e2dc435b0", + "c9789152a9fc29698d49ed95f09bd11b75f18a8c5615a73dbe54ae5e550027fd0ae6a8b60667040c1b12de3d1ee3f6bf061c78c951a3210effc912e19f482dd4de152063c588c44903bc11761706fd935afa040df085b08144d83d0dde32b46ab52f4fae98ac116c7ff11d7f553450c2e37b9c5f0b1dd9e0b8640a24cba6f2a5246c41f197f46e3dc8a29131c79bef3351c6e277a0a34442274d546ccd058891277473d668420f121750d19cd684267405", + "06a15a0731ce52557e368bcbaa11ef3399299e36fb9f2eda6e5726907c1d29c5c6fc581405ba48c7e2e522206a8f128d7c1c939d1132a00bd7d6366aa82724e968964eb2e373563f607dfa649590dcf5589114df69da5547fef8d1604cc4c6de1ed5783c8746918a4dd31168d6bc8784cd0c769206bd803d6ca8557b66748770402b075ef44b38157d4c0da7c6281725a2065d087b1f7b23455fa673bdeeba45b983311c44eabe9ef4b7bde3420ae9881863", + "d08aacef2d7a41aec09473bd8a44f628e15addb7b9e5b77a1e09c8ab4942f379a0bfcb324d580b774666f18ae78dd36710824ff12393f059068fe4b559c53662c2b0e6c69e23785c8f32554e837ec1714bee902e60737b639dd933af4f68cb9d7de77e1f3b28e5b122891afce62b79acd5b1ab4ba411662cc77d806449e69c5a45a143b742d98ac84a0826d68433b9b700ace6cd472ba2d58a90847f42ce9c43f38ffc017db4bf40450b2eee1f4594dc740c0f", + "6a6058b0a498b7ea76a93c646eb9b8629f0cba4a0c726420c5f67ba9b0412cade356abdf0a4fb94384bad32ce0d5dd9e23dcaae1d6f28ff8683616b30f1392890c67b3a2c04b360893b801f127e527e4da82e239f4c878da13f4a4f1c76db07190e77ec123995168102fb274434a2d1e12913b9b5cbab4aacaad2bd89d88b3ca2b8e60dacf7c22c9379097ff60880f552e320ca3b571994f52534470feee2b39e0dadb5cd88257a3e459a4cc6f12f17b8d54e1bb", + "adeced01fc5671531cbb45679f5ddd42b3a95151677b6125aaf6f5e8f82fbabaa5ecf7c3552c2458587224f0042870f178f5fca5465250e75d71352e652eeed23cdb7f915f5ebb44099b6db116ca1be45530ac8ed32b7f161d60ed4397ad3d7d649ae6bf75ca5bec891d8e595605be9764f3a03965e1fe0eaffbf212e3df4f0fa35e08ff9d0091e6d4ac4748edfe43b611085a6ffec163014655fdd839fd9e81b63b1fa8cae4ec335ec343289758e389a79ceedfae", + "d014592f3a83ba40af366f137c674724916c3cdd3f6cf9d4c5c7c8d6d51ebf26e315e2c12b3546be56fb52382904046ecbd2f5b883aa4ff473de6f0c26ab862c3fa34bf3d880cc1911ce39a4088c6617c179dc5faf68a2c488bbde12d67b50f73abcfab0e3b062e68c95363e11f5f1de8ec36ed01ea21442518089045df67d346135283ad5b3fff80cf57f20876849f6db9fa139728358415a90610f69ec720fc92d8234e3e122551e9df2c644c4a2c4e3734d07de8e", + "c0d0c37838873ba8757d6e41b409605043bc1635edcd731219587676d94217e9f0ab44b71de25000661ce7303b7015f45e6eaa7b7ebef92b8f4a34c902c908d2172185505fa33aca5a41be83079316cdfdd430fc2c45f505f85d867e6d516f7e1bf19c001d9f43018968aab65ec031b3801399231c83ec9e622dab5629922a6b424cab938c135ff7310501c2c02971bfd2f577e25904d1a618baf0859f77f4e8b1d0cde9544e95ec52ff710c0672fdb3d891feeea2b017", + "7022e7f00902219ba97baa0e940e8ac7727f58955aa068c29680fac4a16bcd812c03eeb5adbcfe867a7f7c6b5d89f4641adb9173b76a1a8438866f9b4f640ce2aedf5f1080c890bcf515b4be4e3e512352f1e5323c62ec46cb73f3d71be8235fee55a154763f7c3f9aeb61ffd28f4cd93d3310f608e2133586bf1ab3f102de96f64c68a4668de8acb2a76a7ce0cddddc8fa3df5e9d230823da16ed9ebb402d36e38e6e018795e5a71517ecab5f9ca472b9ced8ff69d2d195", + "acaf4baf3681ab865ab9abfae41697141ead9d5e98523c2e0e1eeb6373dd15405242a3393611e19b693cabaa4e45ac866cc66663a6e898dc73095a4132d43fb78ff7166724f06562fc6c546c78f2d5087467fcfb780478ec871ac38d9516c2f62bdb66c00218747e959b24f1f1795fafe39ee4109a1f84e3f82e96436a3f8e2c74ef1a665b0daaa459c7a80757b52c905e2fb4e30c4a3f882e87bce35d70e2925a1671205c28c89886a49e045e31434abaab4a7aed077ff22c", + "84cb6ec8a2da4f6c3b15edf77f9af9e44e13d67acc17b24bd4c7a33980f37050c0301ba3aa15ad92efe842cd3ebd3636cf945bb1f199fe0682037b9dacf86f162dadabfa625239c37f8b8db9901df0e618ff56fa62a57499f7ba83baebc085eaf3dda850835520344a67e09419368d81012168e5de5ea45158397af9a5c6a1657b26f319b66f816cd2c28996547d697e8df2bb163ccb9dda4d6691dffd102a13667ab9cde60ffbfb872187d9c425a7f67c1d9fffff9276ed0aeb", + "6a52c9bbbba454c14540b2be58230d78ecbeb391646a0c6fcce2f789086a78364b81ae85d5396d7cfa8b46bda41e3083ec5cf7b4c47dc601c8a697df52f557defca248506dbebab25657f5a561d09625b7f4b2f0119a12beeac087efc9d350a735c35d2431c1da7dda99befb17f41a3dc4da0f00bb95366be128538ce27763d81f832fe3c1d4efc07b5b08ad8dc9e65fb5e48546664e18cb2d3bb3fe1f56fa7aae718c5e3bbdeaf70e15023f6a25b72a2d177fcfd04211d40664fe", + "c3c4d3b31f1f5f9538923df3478c84fffaef411520a542da9a220ee4132eabb9d718b5076fb2f985485e8ba058330aed27ddfd3afa3db34aa60301088caec3d0053828c0c2bc87e2e61db5ea5a29f62fdad9c8b5fc5063ec4ee865e5b2e35fac0c7a835d5f57a1b1079833c25fc38fcb14311c54f8a3bd251bca19342d69e5785f9c2e43cf189d421c76c8e8db925d70fa0fae5ee3a28c4047c23a2b8a167ce53f35ced33bec822b88b06f41558c47d4fed1bfa3e21eb060df4d8ba1", + "8d55e92136992ba23856c1aea109766fc44772477efc932b3194af2265e433ed77d63b44d2a1cff2e8680eff120a430fe012f0f09c6201d546e13ad46fc4ce910eab27bb1569879abed2d9c37fae9f1267c2216ec5debcb20d4de58461a621e6ce8946899de81c0add44d35e27b7982a97f2a5e6314901caebe41dbba35f48bc9244ca6dca2bdde7306435892f287036df088633a070c2e385815ab3e2bfc1a47c05a5b9fe0e80dd6e38e4713a70c8f82bd32475eea8400c7bc67f59cf", + "5016284e20362610fa05ca9d789cad25f6d43263787e7e085476764ce4a8908ce99b262b375e9d106170b1bec1f473d5e777e0c1896533040e39c8c1465e07907ef5860e14e4d8310013e35f12090e0bfc687474b1f15f3dd2033a0edac5246102da4deec7e188c3517d84d9c2a0a4497a4c5f82a30f1ba009e45ee6eb3ab4368c720ea6feee428ffd2c4cc52debb8d634a64176572c72368f94a66689f23f8a01218f532117af5a8060d140e7ca435a92882fcb5630ebe14a4805f1dc83", + "05456ec59b8d41bbd736727976b96b38c43827f9e16169be673ff37870c2ecd5f0d1ea1a136be4cc7b047a02a4421d484fd2a12ece418e42ee391a13a0b1df5a0162b29ab70d3fe3e04ba6ab26b37d62b7cf05a5e2f033611bf970b8e1f30e198e483e740fa9618c1e8677e07b61296b94a9787a68fba622d7653b5568f4a8628025939b0f74389ea8fced6098c065bf2a869fd8e07d705eadb53006be2abb716a3114ceb0236d7e916f037cb954cf977720855d12be76d900ca124a2a66bb", + "eb6f60b83fcee77060ff346aaf6ec34d82a8af469947d3b5074cde8eb26566eb1fa039bcc707738df1e95869bd827c246e88436f0614d9834ead5392ef376105c4a9f370071cdeaaff6ca0f18b74c3a48d19a717253c49bd9009ccbfdd5728a08b7d112a2ed8dbafbbb46d7a75dc9a05e09bfde1a0a92d74a51887f9d123d7896e9f9d0057b660ed7d55454c069d3c5260411db4cdc67e7b74f680d7ac4b9dcc2f8baf72e15e6b3cafebcdf449a6436ed2c398b675f79c644747c57553bf7ea2", + "187a88e88514f6c4157c1ba40b442baae1ae563a6c989277443b12a219aa484cb9fa8adbb9a29d429f50155321b15664926317477079c7060dfdaa84c1d74bba78892c34e6f21ad35208d2ae622012401696bff5cd57b6485944b3db7b9071fa5f57fbfb1085d91bb9cff5808d662cdc6c8157249478262c44b7fbc397ed42a4977b202e817717bfccc9f0467294062313f7705251ed09573f16d23429361fada259dfb300369c4198f07341b38e84d02cdb74af5de6aab1fc2026208ea7c418c0", + "be31bc96606d0fab007e5caeded2f1c9f747c759777e9b6eef962bed49e45a1d4fc993e279d024915e600865ecb087b960584be18c41114d3c43f92169b9e0e1f85a0ebcd4e196376ccdc920e66103cd3b1c58407d0aafd0e003c4e341a1daddb9f4faba974362a32f35db83384b05ae8e3322d728893861afd8b1c940de5a17f691e763ce4969b6d94f67fb4a0235d100225bd8602f291388f0ca4a568748ad0d6040f1262eac2aede6cd27419bb78a394c1ffad72c262be8c3f9d9619d633e51d0", + "4d83d85ca838b4518588f2a90228a4dd18f14dd5b4c012d26298a97d848abbd825d221d02cceb6e8c701b4ad00e1dee4889b5c533e4bb60f1f41a4a61ee5478be2c1b1016c30345afd7a5253668260515e70751f22c8b4022d7fe4877d7bbce90b46531507dd3e89549e7fd58ea28f4cb23d33662bd003c1345ba94cc4b06867f778957901a8c441bee0f3b12e16463a51f7e50690356971dd73a686a49fda1eae46c9d54fba262811d698025d0ee053f1c58591c3bb3cbde69de0b31549ef5b69cf10", + "cdeb07d36dc5f9a1cd717a9e9cca37a2ce93caa298eee63571f7d6c5fde2a11c666cf53cf2dcb41ca2ea2319e7230ca68e38c647905928713a13982bf47fe33d7095ebd50b2df976208920a43eb2e29b942f32467403c45cea18bf44e0f6aeb155b48a8e5c471fec972a9d62f7ae093d2758f0aaec7ca50cb4725bfa219f1a3a46ad6bde7361f445f86b94d66b8ece080e56c510250693a5d0ea0ae87b4421860b853bcf0381eae4f1bf7c5c0472a93ad18407bc88475ab8560d344a921d3e86a02da397", + "a598fad52852c5d51ae3b10528fc1f722e21d44fbd42ae5acdf20e85a28532e646a223d27fd907bfd38eb8bb75175636892f8242877aab89e8c0824d368f3339ce7a82aa4e5af6db1f3b588a4d667a00f67bee37cfd2724dde06d2909fb9e58d892f4cfd2c4ca85acdf8256f5458b030a6bda151154ff2e6d7a8da90b54a2884c8a99fab5a4ac211ff23dc0975f4f592fd1b6b9dc7783bdcd2d4ca4e68d2902f2013e122cb62e2bff6b0a98ec55ba25837e21f1cfe67739b568d43e6413dab2bd1dc471e5a", + "17b68c74c9fe4926e8102070916a4e381b9fe25f5973c9bd4b04ce25749fc18931f37a65a356d3f5e5a1ef125d546f4f0ea797c15fb2efea6fbfcc5739c564693d47adeb12dcb3d98a2830719b13247792cb2491dca159a28138c6cff925aca42f4fdb02e73fbd508ec49b25c60703a7595a3e8f44b155b371d525e48e7e5dc84ac7b17c52bf5e526a67e7187234a2f19f57c548c70fc0b27183df73ffa53fa58b658034c896fa791ae9a7fd2620f5e46ce84c842a6e60e9324ae4db224ffc87d9617cb85ca2", + "b9e4267ea39e1de1fed0579f93bb351007c9f8fcdd811053fae33f09e2753d7428f04e1a9efcd45ea701a5d87a35b3afb2e6b65365dee6ead0bbb611b7797b212ac688653f542e604a39df277f12514ddfee3b4e27b98395c2cd97a203f1f1153c50327965770802ec2c9783edc428271762b275471e7ac65ac36523df28b0d7e6e6ccc7674268a132a63411fc82c0738dbb68af003b769a0bf9e6587b36476cb465350fee13f88ea355d47ffac7b0f964f4139db11b7642cb8d75fe1bc74d859b6d9e884f75ac", + "8ca704fe7208fe5f9c23110c0b3b4eee0ef632cae82bda68d8db2436ad409aa05cf159223586e1e6d8bdae9f316ea786809fbe7fe81ec61c61552d3a83cd6beaf652d1263862664df6aae321d0323440430f400f291c3efbe5d5c690b0cc6b0bf871b3933befb40bc870e2ee1ebb68025a2dcc11b68daadef6be29b5f21e440374301bde1e80dcfade4c9d681480e65ec494a6af48df232c3d51447b9d06be714949249c44c43cf73ed13ef0d533e770284e51369d94ae241a5fb2f163893071b2b4c118aeaf9eae", + "4fd8dd01012bb4df82bf42e0683f998e6f52dd9c5617bae33f867d6c0b69798cead8179346d70acc941abbbdd26e3229d5651361d2252c72ff22db2938d06ff6fc29a42fdf800ae967d06479bc7bbb8e71f40b1190a4b7189ffc9a7096cdb76d40aec424e1388e1eb7ef4ac3b34f3f089da8fda7d1927f5d775c0b2801d22dd1265c973158f640cec93edfed06dc80b20ef8c496b98289d54d46ccd205951cbb0f4e7daeb866b60bacb483411e4382b6f04d472843186bd0e31fbaa93e5c901ec028efafeb45fc551a", + "e9ee1b22b04b321a5fdd8301627011f583887d77560fb0f35552e207561f81e38ac58a0d0aeaf832d1ee72d913720d01f75574e9a321864fe95f4d0d8f0b8db97649a53e71e940aede5c40b4b9105daa42a6fb2811b61209247534cbaf830b07abe338d75d2f5f4eb1c3cf151e9edabe2c8d5f6fff08fac1495ef48160b100d30dcb0676700bcceb28723a29980ab0766a93abb8cb3d1963007db8458ed99b689d2a7c28c788743c80e8c1239b20982c81dadd0eed6740c65fbc4ef15c7b5569cb9fc997c6550a34b3b2", + "ec01e3a60964360f7f23ab0b22e021815765ad706f242265ebc19a2bb9e4eac94393952dcf61aae47682671a10f9165f0b20adf83a6706bfbdcf04c6faba6114653a35584267267873291c6fe7ff5f7695243143421509502c8875aafa9e9afe5be5ef2c851c7f35d69be5d3896000ccdbbfab5c238bb34d607cfe2d55d748880545b4aa7ca61137992925189025c62654b1f20d49c3ccd75aa73ce99cd7258dabedd6480a9f5185531fc0118beb68cc0a9cd182f6973287cf9252e12be5b619f15c25b65c71b7a316ebfd", + "db51a2f84704b78414093aa93708ec5e78573595c6e3a16c9e15744fa0f98ec78a1b3ed1e16f9717c01f6cab1bff0d56367ffc516c2e33261074935e0735ccf0d018744b4d28450f9a4db0dcf7ff504d3183aa967f76a507357948da9018fc38f150db53e2df6cea14466f03792f8bc11bdb5266dd6d508cde9e12ff04305c0295de29de19d491ad86e766774bb517e7e65befb1c5e2c267f013e235d8483e177214f89978b4cdc81aa7eff8b39f2825ad3a1b6ac1424e30edd49b067d770f16e74dd7a9c3af2ad74289a676", + "00e40f30ae3746edad0f5dd03d0e640933cf3d1694804c1e1ed6399ac36611d405196ee48f129344a8512feda16a354517871322bd5d9c6a1b592933eab531923efb393ffb23d9109cbe1075cebfa5fb917b40df028a621460ff6783c798792cb1d9635b5a6f84ec13918fa302924649b5c7fcb1f7007f0d2f06e9cfd7c27491e565a96c68a0c3644f92cd8f38857258c33801c5d537a83dfe583cba59d7eec7e394199c0a2660a62fabe3ed2099d57f315a6cd8de1a4ade29d977f15d65759cff433e5ac0c182aef3761163e1", + "3c5ea24d0d9b618294a263f062b2414a722be4eb10dfc346a6ec3b821d7396eba61cd6ef33618b04cd087a811f299d4606820227f16000d7c839062b96d3e3f59cd1a082448d13fc8f56b3fa7fb5f66d0350aa3b72dd7c165d590282f7da2e12cfe9e60e1796122bb8c2d40fdc2997af634b9c6b127a893dfb3467909378300db3da911be1d7b616bb8e0572433e65527e15d936500a2c60e9f9909dcf22ab5e4b6700f0238c205b4a813626fac3d945bab2637fb08203044a73d20c9a3fcf7c3fc4eb7807c3276dd5f73ce89597", + "9271aeeebfac46f4de85df78f1bfd36136aa8905e15835c9e1941176f71e3aa5b1b131843d40479735e23e182a2bd71f66f6149dccb7ed8c16469079dc8590bbf165374951785f4531f7e7361de62f936cfb23a2b5bdf186632e7042a0dd451fdc9b7208f923f3a5f250ae590ec348c63a16c3aacaf7379f53b5dd4152dcd40d23e683e2156e64c592ffc07e2cd6bbeebef4dd590b2f6b2bcbf08fcd111c079f5c4033adb6c17574f8756ecd87be27eff1d7c8e8d0324438d59ae171d5a17128fbcb5533d921bd044a2038a5046b33", + "4e3e533d5bcb15793d1b9d0468aaee801f32fdb486b11027183553a09ddbee8213924296f2815dc61577297459e834bf1c7a53f87d43782209e589b8295219ba7073a8fff18ad647fdb474fa39e1faa69911bf83438d5f64fe52f38ce6a991f25812c8f548de7bf2fdea7e9b4782beb4011d3567184c817521a2ba0ebad75b892f7f8e35d68b099827a1b08a84ec5e8125651d6f260295684d0ab1011a9209d2bdeb75128bf5364774d7df91e0746b7b08bda9185035f4f226e7d0a1946fcaa9c607a66b185d8546aac2800e85b74e67", + "b5d89fa2d94531093365d1259cc6fe8827fea48e6374c8b9a8c4d2209c280fa5c44958a1847222a692a59e6aa2696e6cdc8a543dd89b0ce03bc293b4e78d6ef48e1839694ccd5c65661143095c705b07e3ced84a0f5959114dd89deb956ab3fac8130eb4a878278205b801ae41a29e34146192308c4e759b374757b0c3b00319bce92a1b95a4d2ee179fd6714ff96155d26f693a5bc973f84ac8b3b91e3926276297532d98b46992a3f104c08100bf1671c43134bac280c617da711e90a0100137525375ebb12802a428885ae7fce6514a", + "40e3d8048fc10650cb8a7fc2e7113e26dec34f9ca2d5129cd10a8e8e44d113d61ee48c7d003e19fd307fc6debd70feb30243f298c510ccc4418355ce143066f067ad7c6de7288c3080e7ad46a23c8d34deb55a43e652fe90444ad3c57d3ec1e1c489d63ef915a24bc74a7925a0a7b1e1523f21ca8fee78df24e3d0a68d0013423db97c280799a0618229c0f2c167289a891e5c8d6661ab21285951c31710e3b5fe55f6347fe16d9b40507948a59252efeb616df83e5c098b07d0a7247cd371daff0e50491c582503fd89f79ba94d6af9ed76", + "1fa444de01dd3901e2b4684e3d7a799ffa02d85afd35fb30fe4c9d672837bee6dd8a3b8608b4bb5e589220ad5a854f46b46e41c6d57ad124a46beab4169ff69fee7e3838a6165e19dad8eb5d7bf53d4edd3cd2769daf219510a02fdd2afe0c0e1da3cd30fcd1aa88b68965586f07a25a1720fbd90a096ea30fc8e945e3637d7857c8a9c0ab4154ffb2000e57b5f9adfa4e4eaf8065bc3c2b2e75f495963325588785a6ce417dcddffd299873b15dcccca128d63cd4eeeadb64cda28099a9ad7c80d34844901f26b88b00b9aafeb2f90286d29d", + "fde0a0d9d813983bd1f55cf778a003a2023b34a555322ab280584537bc6bdd844d22a7d6066c18da83ec09f3d8d5a1aab4be0d5ce19b436052f6e259a4b49017a1f47f1fe2bf115d5bc8599fb216351c60dd6b1bedb2e6f4dcadf424b833501b6f099cbfad9e2290680fb69c25032b42a6274f7cb9b5c5950401354838a45f7cb77b95bf54718e2f3d3d9fb91eb2311903980277396398d9736d8e92fd838594ac8a537c6c529db5a8a4f89290e6ba6f20ac0e5ed6fef40901d0e0e8e3e502990811f9acaae555dd54eb1bcd96b513e2fe751bec", + "9f8e0caec87858599f5ab29bff86da78a841a918a023a111098687ecdf2747612d3f3809d9ca400b878bd4f92c43a1004f1c17c7f19a3cd1ce449bd2b23aff551623c37dd8c0be56bf3fd857b500c2b9f9ccea62481944090a3cf3b6ee81d9af8eeb60f65ef150f9fa4d3ed6ce4762d3d4f174ee8ccd460c25cafac0ea5ec8a6a4b2f9e8c0520cb7061155e532cb65f188b01e4b9086db951f504b060c296b326b3fc1c590498ecce594f828f4a10ea416675720ae505295d38a791bd0e93f428448a8f4c1fc0af53604a9e8255384d29ae5c334e2", + "33d1e683a4c97ee6bbaa5f9df1a88cb53b7f3c157b6045d70a56fda0ccbd3a1fa1f049cd564da072b53f415bf5fb843771c1d2551fd075d33377362b2f7c0645f9723123d11975991db8a2b518f02e2c7c30342a044754290bae2c77496d755e5981f12e6b0a0174280b958bf11ed628a9062775993ced04bf752ea8d165e3ac2177d7cd1b9371c44efa98f0b3e68602a839d384eec007979f46429dafb138cbc231ad928a9f65f7d66fac77416395e8f1debaaf76ec2e4e03e8674102cd26f614739f3ec9f949033df1fb97e87c2326d65aef94ed5f", + "180048f09d0b480887af7fd548a85abf605440c1ddde6afe4c30c30670233f7bf928f43b4681f59279ebbda5e8f8f2a1abefdee129e18ac60f9224e90b38b0aabd01308e0a27f41b6fb2ee07ee176ec9048c5fe33c3f7c791469c81f30e28170585b9f3e7e3c8c2e9d74370cb4518f13bf2dee048cbd98ffa32d85e43bcc64a626b40efb51ce712925fdd6fee006dc68b88004a81549d2121986dd1966084cd654a7c6686b3bae32afbd9625e09344e85cf9611ea08dfce835a2e5b3726e69ae8a76a97db60fcc539944ba4b1e8449e4d9802ae99fae86", + "13c0bc2f5eb887cd90eae426143764cf82b3545998c386007cca871890912217aa143ac4ed4ddb5a7495b704aa4de18419b8664b15bc26cfc6596a4d2ae408f98b47a566476d5802d594ba84c2f538def9d016661f6404bb2337a3932a24f6e30073a6c9c274b940c62c727242e24466084a3ea336365d71ea8fa6499c0ea8d59eea505f1126b99c795023c4963aa0d99323d0391e8701110edf551b2d3799e1063ca443f1add162156e445502ca1a052fe70c289838593b58839fc63de128a03e2bbf389e22ae0cf957fd03315ee407b096cc1cfd92dee6", + "6f1eb607d679efef065df08987a1174aab41bdac8aece7726dfa65805d6fff5b3d17a672d96b770dc32165f144f0f7324822a5c87563b7cd9e37a742ae83ef245d09006d91576f435a03476f509ea2936636232f66aa7f6cdf1ac187bbd1fcb8e20f8791866e60ed96c73374c12ac16795e999b891c64507d2dbd97e5fc29fac750ad27f2937cbcd29fdafccf27ab22453834d475f6186eaf975a36fad5c8bd61c21da554e1ded46c4c39765dcf5c8f5ccfb49b6a4dc562c919d0c7d8940ec536ab2448ec3c9a9c8b0e8fd4870cad9de2577c7b0c38563f355", + "dcdd993c94d3acbc555f464871a32c5da6f13b3d5bbc3e34429705e8ad2e76393fdd96a69a94acb652f5dc3c120d41187e9aa919669f727c4868013b0cb6acc165c1b7706c52248e15c3bf81eb6c147619467945c7c48fa14a73e7c3d5bec91706c567145342a026c9d97eff97ec672c5debb9df1a998083b0b0081d65c517b3e5634c95e347e781aa30ca1c8af815e2e494d844e847fdcb41622894a518dc36571123a40bfdbe8c4f4cff44d83c61dd9dcd24c464c53b395edb31efee9f3aa080e87cdc3d22d613ae84a53c9249c32c96f9a3bc4629bb126a70", + "49971f9823e63c3a72574d977953329e813b22a8387cd13f56d8ea77a5d1a8a20012632d1d8732bbcb9f756b9675aab5db927beacab7ca263e5718b8dfa7b2eed9a91bf5ed163b16139d45f7b8cc7e3f7bdda6202106f67dfb23b7c315ee3e17a09d466b1e6b13e7c7428184a979f5358667b4fa8bd40bcc8ea46058db44587a85377ac46bf155136c09ac58cb6c27f28e17028c91e7e8f74d5b500e56293b316974f02b9d9ea205d9b6ac4cfb74eb8eb0c944577fd2f41316368307beab3e327bf7dbaa0a4428836ec4e895dea635234abeaf113ceeadac33c7a3", + "c57a9cc958cee983599b04fe694f15fb470fcbc53e4bfcc00a27351b12d5d2434444253ad4184e87b81b738922ffd7ff1dc1e54f39c5518b49fb8fe50d63e3935f99e4bd125e8dc0ba8a17fd62de709339a43fabe15cf86d96a54010112170c340cfac4132182eed7301402bc7c8276089dec38488af145cb6222525894658f03501204b7a66aba0be1b557b28a2f652d66f7313ed825ecc4d8596c1be7420d4425b86a1a90a5b7f30d0f24e0d1aae0eb619ca457a71699e44be612a4011c597ee80b94d5507e429d7fc6af22579cd6ad642723b05ef169fade526fb", + "0568a672cd1ecbaa947045b712e2ac27995392fbef8f9488f79803cbee561c212287f080eca95adb5ba42739d78e3ba667f06045d87850d3a0499358649caa257ad29f1a9c511e7054db20554d15cbb55ff854afa45cae475c729cea72ede953522031865bc02b95589ed4d9841c552a8cc94904a93ed09ed77222f6c178195056be59bc4e96a815adf534e6b466fb47e262ff79c803c157a21b6e2269c2e0abeb494113cd868d8466e82d4b2f6a28b73645853d96bc9242515d803e33294848d3fe42fdff68da53c03491636beede47ff1399dd3d54a5e914d55d7adf", + "3f19f61a4cd085796731ac9f85a75a8bce77031932c31762d87d8b8d07b8bd19ff78d6b7d1bd1e87f3a4f41aad03b6c4d17a6cbc86be55f7c8b88ada047bb04f8d49f1c34bcf81cc0f3389ad01a758fc7eeb0072aa9ad1481992bfdde82e438e75590a4423832dfbe3756e2229ea873bc3606e6d72174cb2163bf40b5d49c81009dab85ecc03e311351bbf96e32c030a2b276a7698cb25bc2c967acb3213161a1fdde7d912cd6a804490f8056c47da1333f6e35c41e749c2c23919cb9af5eec5652e6e072b034fb1682e9aaa194a9c0bd456ea0b008d14dbce37967a7a8e", + "705f98f632d99d3651793825c38dc4deda56c59eac539da6a0159c83131cf8ab6f2ee0c3b74111fde351f7aa1a8c500a0cecab17c212d2c58ca09eae608c8eefc922b9902ef8d6832f799ba48c3c28aa702b3242107edeba01daafe424406a3822965056cfe8783455a671e93b1e2eae2321364f1871471c82124df33bc09e1b52882bd7e1c4c7d0b2f3dd4a28c2a002a43246768af0700f9659de99d62167be93177aabf19d678e79e9c726ac510d94e74873eda99620a3961930cd91937c88a06d8153d64fd60da7ca38cf26d1d4f04a0df273f52127c53fdc593f0f8df9", + "ea6f8e977c954657b45f25480ff42c36c7a10c77caa26eb1c907062e24fbca5aebc65cacca0de10abea8c78322f08672e13d8ac16996eca1aa17402eaea4c1cc6c800b22dc18cb8d620192d74bac02c07b5cfa61e513c7f28b7e29b9700e0e442720bf4c669d4995da19d19f841d9eb68cc74153592591e3bf059ef616b95305aa453b32fe99a91afb35bd482cf2b7aa42702837a53be3c38883d2963020e347556f841254ec6b85854485fe8c520b05f2ea67a9bf3981555c20991e2bacd4db5b418228b6002d8d41c025cb472bf5443aaa885974a408ea7f2e3f932c600deb", + "408190134ed06556811b1af808ab2d986aff152a28de2c41a2207c0ccc18125ac20f48384de89ea7c80cda1da14e60cc1599943646b4c0082bbcda2d9fa55a13e9df2934edf15eb4fd41f25fa3dd706ab6de522ed351b106321e494e7a27d5f7caf44ec6fadf1122d227eefc0f57aefc140d2c63d07dcbfd65790b1099745ed042cfd1548242076b98e616b76ff0d53db5179df8dd62c06a36a8b9e95a671e2a9b9dd3fb187a31ae5828d218ec5851913e0b52e2532bd4bf9e7b349f32de2b6d5d3cdf9f372d49617b6220c93c05962327e99a0480488443349f0fd54c1860f7c8", + "5f9e5c6f38573a85010a9d84d33f29c057003b2645e3ea6f72cbc7af95d197ce6a06b13fea81722853e6991791b8b15091cd066f5ed913592ed3d3af5370d39ba22beeb2a582a414b16824b77e194a094c2afdcc09aa73ce36f4943cca5ae32c5017dc398801dd92a47382d9327c9f6cffd38ca4167cd836f7855fc5ff048d8efba378cdde224905a0425e6b1de061fc951c5e624a5153b008ad41160a710b3ff2081748d5e02deb9f841f4fc6cf4a15153dd4fe874fd447482696283e79ee0e6bc8c1c0409baa5ab02c5209c319e3169b2476149c0c6e541c6197ca46e004eef533", + "218c6b3508aec69574f2b5039b30b942b72a8349d05f48ff945bbbe5c8957d5a6199492a6bf54bab821c9377e2edfa4c908384664d2c80112d5e805d66e0a551b941021be17dd20bd825bea9a3b6afb1b8c605805b3bda58750f03ea5c953a698494b425d8980c69f34d1c3f6b5866e8717031152a127215c256e08873c21b0f5cc85875d0f7c94601659150c04cd5fe5d381ba29983a2d94fcd3a65a94c53c7279cd000dddd4253d8cff8d7f6ace10247fe3bc30d63ba4bb54f557b3d22a3924369430d71ab37b701e9500bda70b5a643704858beed4726a889b6c9c91584194c68f1", + "dac26aa7273fc25d6e044c79fc2bfa46e59892a42bbca59a86826c91e76ab03e4bd9f7c0b5f08d1931d88b36ea77d94f7ba67cd4f1d3086e529427201119096ae066ae6f170940830ed7900de7bb9d66e09788287403a4ecc93c6da975d2fb08e918840a236c15f5d3a8f7375c2eeebbf6f01a6e7f29ca2b8d42df158414c320777433663c59fdcd1f39ca68e3473db721be7ce8c6dba5fddc024f94fedb286b0477581d451313ca8c737484daf60d67f9b2d56d4bcc271f7e9ae958c7f258efbc74d25753e0516f28282461941bf2dcc7dd8c7df6173b89760cefcac07190243ff863fb", + "c46e6512e6797cc7a54254a1b26b2de29aa83d6c4b1ea5a2786fbcec388270625b12635eae39e1fba013f8a65219421bca8b52a8ddfd431cda60299bdf160734d5a7450ec79620058522702174ae451b9bfa7c4a455fbbee3e1d048c7d4bac5131018228f137c8e130440c7059b4f15eaa34ce872a851a16ce86f982df78a00be4d564da2003a450ddee9ab43ea876b8b4b65c84f0b39265fd5456417afb5bc54997c986e66fc222f2123ba5e719c4d6b9a177b188277df384f1125821cf19d5248cef0be183ccdc84ac194506f740ed2188b2689ea4c9236a9e9e3a2fff85b6af4e9b49a3", + "1ccd4d278d67b65cf2564ecd4de1b55fe07adc80e1f735fe2f08ea53fd3977323689122c29c798957abaff6aba09bdcbf661d77f4dc8913ab1fe2bef38846166e3834785e7105d746484eff8c656af5d8c7854abc1c62b7fadb65521dc6f793d978bda9838eb3800417d32e8a24d8c8cb1d18a5de6ca79d9e1b0ff9aa25e6218fe944cf18666fecc1e31334b390260dbe0997539e1b02f6366b2aea4f4a21efe04f4b97568fcb39e59919d5ebac6543d5d0f48fc66b923c34aac377dc95c20329b837b6ed5e8d9a3d2089cd0d8f025658006ff41cbdaccca618822ca590ab155253f8bc1c7f5", + "9875209588395ee3c9fdd793fd48717cc84c8c3ea622b2ccc4a1be4448e6034b7810569855255031f10be5ffd714b05f9ce01972d712d40abf03d4d0ce175813a7a668f761324996093fc2aa5912f7fc2abdadd8775d2b4d9ad492216293381460ed8f6db3d641d1525f4242c348bbfe504c704f215dc461de51b5c75c1aae967936963848f16c673eca5e78dfd47eb19001d52d1bcf96c98956dad5ddf594a5da757e7ca35f2f69803b784e66ac5a58b75c228b8266ec592505e5d1ca87d81225738855f15bc0914677e81593fd409e77d159f8a908f67788de9eb06c5561547aada96c47c535", + "40c90e375e366f3756d89091eb3eed9fe0fbfc5638700af4617d358812bac53124a2205dd6756456787d49cd6a35e302479a0992288f47532e4ea7ab62fc5ad5adc690a5d9a446f7e035ad4641bd8dae83946aee3338ec984ccb5cc633e1409f2531eeffe05532a8b0062ba99454c9aeabf8ecb94db195af7032bfebc22912f49d39330add47ff8fa5720612d697f0b602738930e060a1bb214efc5e292224cf34e29deaea6b1b1ff847e94ecc997325ac38df61db45d82bf0e74a664d2fe085c20b04c39e90d6a170b68d2f1d373f00c731c524456ada73d659aaac9df3191a7a3865083343fc13", + "e8800d82e072210ca6d7fa2472028974780b76aad4bcb9ad362422dd05ae3232668251d164daa375a43b26a38cce28dbeb3dee1a4a579f70d0fe7febb29b5ece8aa836e050fb3d188c63aa9c3c0da6c717d86458a6096b5effceb964efdec7035960c09ccd10dea3c5f1c7f9f478d5887ebbe2e15c5ff85dbacbc444bb951c4eec7abecb89ed80187e409e2972ffe1a5f01562af109f2cf09471cf72cf83a3bb8f4e2ef38ed0e326b698296394e5b2718a5000c01425708e8ad0461e62462d8819c2377f13ab1be2c7c9f33dc06fe23cad27b87569f2ce2e56e4b2c60c7b1b3d370841d89ebdc1f192", + "796d6d1447d5b7e8c55cd8b2f8b7010db39f27565f907e3fc0e464ea2d4bb52b37f10e7c6dcfc59231b9cdee12c32aeb4adbc42b86e86eb6defb5b69e6ca75e1f4d0dae3e124e5a1b8b6697f7e10b0403f1f0a5ff848eef3752837a9ba17780f16a9a709188a8d5b89a2fa74adb2e651163b1c2b3d261e225c9158dcd9eb7ac3d6704cee290cdff6bcb3cb90cee030aa0d19d4693655c3c30ac6fc06d2ae37787c47126d57ed9a6bef5f8a6c56859aefc08755739a95aac57a4dd916a92ba9f3afbf969df8085949615033365c751a9a3e1a18cee98a69d22e64009bebf8307169b6c61de0617ecfafdf", + "4f9057183566153cf337b07c3f5556006de54c56b2a1e5326c07aaeabd1886ec6f1641358925db232b2f0dbf75229c796a7395b2f934c1f99090bec1123f3c841b1cb3c5b1ec42ed5408f2940f0c48a9470b852c46d6557853d459cecd2c32bbcd8ee21fa11e385eef0857cba4d8545a61b52a484cdd779db4739fbc7aa9860dcabe0488b98fa0b60c3f7d6153db279000a52ffb573dab37d2ab1896a90e5deb7ac6bbe56239085c325d83a917dc6e8a448425b718c2356b9f3066163555ec444f372e184e02c8c4c69b1c1c2ae2b51e45b98f73d933d18750968945ca85d6bbb22014b4c4015262e3c40d", + "79dcca7d8b81a61359e4aece21f3df7b99518ce70bd2f57a18bab5e7114af2add0a0cea7f319d69f231f060e0a539d9a23fb3e95451ce8c6340cfb09edf931df84203a39226dd9eb278f11b691ef612585b973daab373e65d11325898badf6732100371fd759960fa8fec373268421d28bffdb9b12a430b92fe4b07566ca0c89e616e49f8fc75ccd9cdc66db820d7c02e109aa5ed86b89770262918a518f90a2292f6b68d68ae03992e4259a17a23c84ec2a417f082b5abf3a26e44d2278ecb8ba9456965303a75f25394d1aaf5544590e74b14d8a4cc4050be2b0ebcfe4d2db6b12a02c68a3bcdda70301f3", + "848755dc31e25e9a42f9ec12d847d19f292c14c162c9aba49e972cb123b58b8e57bb263a923929833373858594ff52dbc298dbbc078599194e4c07b0e5fc1e10808bbacdb6e93c72b333685cf961f28eb0d5a395c63266b01f130d25db384b356e5da6d01042fc2359581b89c63b3bb2d1ce897fbc9e83fe85d9666cb60e6a8c657f70caad5387b8a045bf91095606802c8424ea8ac52ef29386dc46183378a5fcb2cb927428b8c070f1c42aafd3bc70ca25437807696a46873cfeb7b80ba2ebc3c4272443d445e46343a1465253a9eebd532a0d1d2c18264b91ff45159f245404ae9335f2af55c802772426b4", + "ecaa6e999ef355a0768730edb835db411829a3764f79d764bb5682af6d00f51b313e017b83fffe2e332cd4a3de0a81d6a52084d5748346a1f81eb9b183ff6d93d05edc00e938d001c90872dfe234e8dd085f639af168af4a07e18f1c56ca6c7c1addffc4a70eb4660666dda0321636c3f83479ad3b64e23d749620413a2ecdcc52ad4e6e63f2b817ce99c15b5d2da3792721d7158297cce65e0c04fe810d7e2434b969e4c7892b3840623e153576356e9a696fd9e7a801c25de621a7849da3f99158d3d09bf039f43c510c8ffb00fa3e9a3c12d2c8062dd25b8dabe53d8581e30427e81c3dfc2d455352487e1255", + "23a3fe80e3636313fdf922a1359514d9f31775e1adf24285e8001c04dbce866df055edf25b506e18953492a173ba5aa0c1ec758123406a97025ba9b6b7a97eb14734424d1a7841ec0eaeba0051d6e9734263bea1af9895a3b8c83d8c854da2ae7832bdd7c285b73f8113c3821cced38b3656b4e6369a9f8327cd368f04128f1d78b6b4260f55995277feffa15e34532cd0306c1f47354667c17018ee012a791af2dbbc7afc92c388008c601740cccbbe66f1eb06ea657e9d478066c2bd2093ab62cd94abadc002722f50968e8acf361658fc64f50685a5b1b004888b3b4f64a4ddb67bec7e4ac64c9ee8deeda896b9", + "758f3567cd992228386a1c01930f7c52a9dcce28fdc1aaa54b0fed97d9a54f1df805f31bac12d559e90a2063cd7df8311a148f6904f78c5440f75e49877c0c0855d59c7f7ee52837e6ef3e54a568a7b38a0d5b896e298c8e46a56d24d8cabda8aeff85a622a3e7c87483ba921f34156defd185f608e2241224286e38121a162c2ba7604f68484717196f6628861a948180e8f06c6cc1ec66d032cf8d16da039cd74277cde31e535bc1692a44046e16881c954af3cd91dc49b443a3680e4bc42a954a46ebd1368b1398edd7580f935514b15c7fbfa9b40048a35122283af731f5e460aa85b66e65f49a9d158699bd2870", + "fe511e86971cea2b6af91b2afa898d9b067fa71780790bb409189f5debe719f405e16acf7c4306a6e6ac5cd535290efe088943b9e6c5d25bfc508023c1b105d20d57252fee8cdbddb4d34a6ec2f72e8d55be55afcafd2e922ab8c31888bec4e816d04f0b2cd23df6e04720969c5152b3563c6da37e4608554cc7b8715bc10aba6a2e3b6fbcd35408df0dd73a9076bfad32b741fcdb0edfb563b3f753508b9b26f0a91673255f9bcda2b9a120f6bfa0632b6551ca517d846a747b66ebda1b2170891ece94c19ce8bf682cc94afdf0053fba4e4f0530935c07cdd6f879c999a8c4328ef6d3e0a37974a230ada83910604337", + "a6024f5b959698c0de45f4f29e1803f99dc8112989c536e5a1337e281bc856ff721e986de183d7b0ea9eb61166830ae5d6d6bc857dc833ff189b52889b8e2bd3f35b4937624d9b36dc5f19db44f0772508029784c7dac9568d28609058bc437e2f79f95b12307d8a8fb042d7fd6ee910a9e8df609ede3283f958ba918a9925a0b1d0f9f9f232062315f28a52cbd60e71c09d83e0f6600f508f0ae8ad7642c080ffc618fcd2314e26f67f1529342569f6df37017f7e3b2dac32ad88d56d175ab22205ee7e3ee94720d76933a21132e110fefbb0689a3adbaa4c685f43652136d09b3a359b5c671e38f11915cb5612db2ae294", + "af6de0e227bd78494acb559ddf34d8a7d55a03912384831be21c38376f39cda8a864aff7a48aed758f6bdf777779a669068a75ce82a06f6b3325c855ed83daf5513a078a61f7dc6c1622a633367e5f3a33e765c8ec5d8d54f48494006fdbf8922063e5340013e312871b7f8f8e5ea439c0d4cb78e2f19dd11f010729b692c65dd0d347f0ce53de9d849224666ea2f6487f1c6f953e8f9dbfd3d6de291c3e9d045e633cfd83c89d2f2327d0b2f31f72ac1604a3db1febc5f22cad08153278047210cc2894582c251a014c652e3951593e70e52a5d7451be8924b64f85c8247dab6268d24710b39fc1c07b4ac829fbda34ed79b5", + "d7314e8b1ff82100b8f5870da62b61c31ab37ace9e6a7b6f7d294571523783c1fdedcbc00dd487dd6f848c34aab493507d07071b5eb59d1a2346068c7f356755fbde3d2cab67514f8c3a12d6ff9f96a977a9ac9263491bd33122a904da5386b943d35a6ba383932df07f259b6b45f69e9b27b4ca124fb3ae143d709853eed86690bc2754d5f8865c355a44b5279d8eb31cdc00f7407fb5f5b34edc57fc7ace943565da2222dc80632ccf42f2f125ceb19714ea964c2e50603c9f8960c3f27c2ed0e18a559931c4352bd7422109a28c5e145003f55c9b7c664fdc985168868950396eaf6fefc7b73d815c1aca721d7c67da632925", + "2928b55c0e4d0f5cb4b60af59e9a702e3d616a8cf427c8bb03981fb8c29026d8f7d89161f36c11654f9a5e8ccb703595a58d671ecdc22c6a784abe363158682be4643002a7da5c9d268a30ea9a8d4cc24f562ab59f55c2b43af7dbcecc7e5ebe7494e82d74145a1e7d442125eb0431c5ea0939b27afa47f8ca97849f341f707660c7fbe49b7a0712fbcb6f7562ae2961425f27c7779c7534ecdeb8047ff3cb89a25159f3e1cefe42f9ef16426241f2c4d62c11d7ac43c4500dfcd184436bb4ef33260366f875230f26d81613c334dbda4736ba9d1d2966502914ec01bbe72d885606ec11da7a2cb01b29d35eebedbb0ecc73ed6c35", + "fd993f50e8a68c7b2c7f87511ce65b93c0aa94dcbdf2c9cca93816f0f3b2ab34c62c586fc507b4900a34cf9d0517e0fe10a89d154c5419c1f5e38de00e8834fe3dc1032abdeb10729a81655a69a12856a78ca6e12110580de879b086fd6608726541cfa9616326bdd36064bc0d1e5f9c93b41278bff6a13b2494b81e238c0c45aea1b07d855e8f3fe1478e373bd9d3957cf8a5e5b9003386793d994c7c575cff2322e2428cbbaa4f47560316ae3354a7478842ff7cc5dcbacb6e871e72b36f06d63a9aaeb9044cfb7974afdc238a5816f537dcf33ee40b4e1a5eb3cff2402b46d548264e133008d284f11b7e4e450bc3c5ff9f79b9c4", + "8df21892f5fc303b0de4adef1970186db6fe71bb3ea3094922e13afcfabf1d0be009f36d6f6310c5f9fda51f1a946507a055b645c296370440e5e83d8e906a2fb51f2b42de8856a81a4f28a73a8825c68ea08e5e366730bce8047011cb7d6d9be8c6f4211308fad21856284d5bc47d199988e0abf5badf8693ceeed0a2d98e8ae94b7775a42925edb1f697ffbd8e806af23145054a85e071819cca4cd48875290ca65e5ee72a9a54ff9f19c10ef4adaf8d04c9a9afcc73853fc128bbebc61f78702787c966ca6e1b1a0e4dab646acdfcd3c6bf3e5cfbec5ebe3e06c8abaa1de56e48421d87c46b5c78030afcafd91f27e7d7c85eb4872b", + "48ec6ec520f8e593d7b3f653eb15553de246723b81a6d0c3221aaa42a37420fba98a23796338dff5f845dce6d5a449be5ecc1887356619270461087e08d05fb60433a83d7bd00c002b09ea210b428965124b9b27d9105a71c826c1a2491cfd60e4cfa86c2da0c7100a8dc1c3f2f94b280d54e01e043acf0e966200d9fa8a41daf3b9382820786c75cadbb8841a1b2be5b6cbeb64878e4a231ae063a99b4e2308960ef0c8e2a16bb3545cc43bdf171493fb89a84f47e7973dc60cf75aeeca71e0a7ebe17d161d4fb9fe009941cc438f16a5bae6c99fcad08cac486eb2a48060b023d8730bf1d82fe60a2f036e6f52a5bff95f43bbe088933f", + "f4d84ed3e564c102600a795eaa9b1eaf4ad12f1a4deca1d042a0a2750ddf6201db03073d8bf553cb9dde48a1b0083827a609f7242b86584cc180964ae794b12ce55661e00e36a6ba4dbc389e6a5a85f1b45df9af7ead1b0a54db56e68639b9d438a91504e82c35d40c7bc7e048a53ac0b04accd0dadf4ac9884b0ca0e3cb5ba4336e3581be4c4760a553823ffa283a1120d4e145af56a59f2533903650f0b9e9ad9fe2e8a3c3c3dd03a1fcb709032c8835324839c735b0c051d0cbd8b5d867617c11023432e4bd275d3d0eb98a0b6cf58071a5b712922f2bc751ac7c2588c447444cde2f37a8ea5ec126425bf517e0d17c9e2999f52fee14b3", + "2ccea21bac9c2b70d3923309cbf2d7cb7abd1fcc8b8b002688870a80029c62397350c3c898194e5deea360bb963d26d485cb7963f8167586976ec0556950b2e86135f4a2800991ce8473bfd44a3c5e937a48b5e355ba5141bccf2131a83988d9d2a9e8e7635a956105b3512c05ef708139ced51d7a4e204c12d8a49a21e8dc6de2629a2fd092326885d9f218745fe09f6d91fb6afce250a30a63689534b6be1f26899ffa3767d835cf586aa47776700f94241bc999b1e3deefe188f37ff734f5f16ee6a00914323dc7b8a143c9137cdcc5cd08ae9566f04bb2941532674c97dff6ffa5ce3405ef8e5d27ec403114253dd6394c0167d72a0044c5", + "2b681c6398aee63bf862770341648bbcd31d7de7903c5903fe3d9469311320bb24d914f2af0cdca199c97214c7c679dc32a2800ba484a03c010ea6be3bb9f2c87e30a98b606050b8a3f297f12b8f92caaeceb3e844652115934874e0a1ab093a73d759b53f6a6c3096940dd22c2bb96ce6820a7b9c6d71a208de9892aa6a7209b0fff56a0cafea52b952cdd6f5752cff3309d448800b4e4c878aa595595b56b12b83fcd6ca89520c7da664e449d7b4438fc455888aad5de0fad9a06eed14afd3513b5ebbffe01775549b701181bd26370764f56eba52fdb24286ad1ac0f5418a7c429f7dfc7f3168437fa8eed7a2ed7c723a485e4c3ed14dea2e07", + "aadfd505a89f4aade2c3018258a7e039401b1fc6a7f3d87910dddbb880d372ec8a13c70d92245de5b8e5f9a285c33b99dc82fa2b22decee72b93a72211656ad7a52696c8e570f78be28c0e427a371dafde856e8d5ed24f83b0660b51e7fac05d93a8666dfde6def59af863f80f3e5f6801182c87422203df390dcb736b8f830052a8832eeeb0b4e27e732aaf793d166b5a3ec7745aeef3766937c2b75a276bddd145f6010c29d035e343e267cb2d828436876ec3a7ebe3b6347d4172f7a99d6821ce152e039e53deb33340b324c7f068ffb94b3cde35a8eaa12d15c3806a7ad0acec3e8c7078c1d32a28fd3eec9f32cb86e4c22166ff69e83785e851", + "1605b8cce529a9d6262fd4390d9e4ae5e14e0adc0ec89b028ef68dd0f373ea259aaa96f2967091dd0874c0105385e9e6da9ca68297c31afa44ef834535fb302ce5b4e49edacbbdf359fe1228a8172495b3e57014c27edd58b685110980056c50c398a64f4923f2d720b4df16d75cb36b4233660694182099c35028a972519c24764fc94e18e582b24deb3491535fc06b83837c7958522800e822201d694af0bd0aa3834e17d4b1ba36f470905ae5f8bbeeb6c4c8604d8af02baa347b07086d6989867ddd5e8e8ed7740c3469bfa2810519c55c6add1332c4c54ee9097961d6741cb12a09713a0d07645f784f42f5ad94b48b836b34263130b0483f15e3", + "ff9c6125b2f60bfd6c2427b279df070e430075096647599bdc68c531152c58e13858b82385d78c856092d6c74106e87ccf51ac7e673936332d9b223444eaa0e762ee258d8a733d3a515ec68ed73285e5ca183ae3278b4820b0ab2797feb1e7d8cc864df585dfb5ebe02a993325a9ad5e2d7d49d3132cf66013898351d044e0fe908ccdfeeebf651983601e3673a1f92d36510c0cc19b2e75856db8e4a41f92a51efa66d6cc22e414944c2c34a5a89ccde0be76f51410824e330d8e7c613194338c93732e8aea651fca18bcf1ac1824340c5553aff1e58d4ab8d7c8842b4712021e517cd6c140f6743c69c7bee05b10a8f24050a8caa4f96d1664909c5a06", + "6e85c2f8e1fdc3aaeb969da1258cb504bbf0070cd03d23b3fb5ee08feea5ee2e0ee1c71a5d0f4f701b351f4e4b4d74cb1e2ae6184814f77b62d2f08134b7236ebf6b67d8a6c9f01b4248b30667c555f5d8646dbfe291151b23c9c9857e33a4d5c847be29a5ee7b402e03bac02d1a4319acc0dd8f25e9c7a266f5e5c896cc11b5b238df96a0963ae806cb277abc515c298a3e61a3036b177acf87a56ca4478c4c6d0d468913de602ec891318bbaf52c97a77c35c5b7d164816cf24e4c4b0b5f45853882f716d61eb947a45ce2efa78f1c70a918512af1ad536cbe6148083385b34e207f5f690d7a954021e4b5f4258a385fd8a87809a481f34202af4caccb82", + "1e9b2c454e9de3a2d723d850331037dbf54133dbe27488ff757dd255833a27d8eb8a128ad12d0978b6884e25737086a704fb289aaaccf930d5b582ab4df1f55f0c429b6875edec3fe45464fa74164be056a55e243c4222c586bec5b18f39036aa903d98180f24f83d09a454dfa1e03a60e6a3ba4613e99c35f874d790174ee48a557f4f021ade4d1b278d7997ef094569b37b3db0505951e9ee8400adaea275c6db51b325ee730c69df97745b556ae41cd98741e28aa3a49544541eeb3da1b1e8fa4e8e9100d66dd0c7f5e2c271b1ecc077de79c462b9fe4c273543ecd82a5bea63c5acc01eca5fb780c7d7c8c9fe208ae8bd50cad1769693d92c6c8649d20d8", +} diff --git a/crypto/blake2b/blake2x.go b/crypto/blake2b/blake2x.go new file mode 100644 index 000000000000..52c414db0e64 --- /dev/null +++ b/crypto/blake2b/blake2x.go @@ -0,0 +1,177 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "encoding/binary" + "errors" + "io" +) + +// XOF defines the interface to hash functions that +// support arbitrary-length output. +type XOF interface { + // Write absorbs more data into the hash's state. It panics if called + // after Read. + io.Writer + + // Read reads more output from the hash. It returns io.EOF if the limit + // has been reached. + io.Reader + + // Clone returns a copy of the XOF in its current state. + Clone() XOF + + // Reset resets the XOF to its initial state. + Reset() +} + +// OutputLengthUnknown can be used as the size argument to NewXOF to indicate +// the length of the output is not known in advance. +const OutputLengthUnknown = 0 + +// magicUnknownOutputLength is a magic value for the output size that indicates +// an unknown number of output bytes. +const magicUnknownOutputLength = (1 << 32) - 1 + +// maxOutputLength is the absolute maximum number of bytes to produce when the +// number of output bytes is unknown. +const maxOutputLength = (1 << 32) * 64 + +// NewXOF creates a new variable-output-length hash. The hash either produce a +// known number of bytes (1 <= size < 2**32-1), or an unknown number of bytes +// (size == OutputLengthUnknown). In the latter case, an absolute limit of +// 256GiB applies. +// +// A non-nil key turns the hash into a MAC. The key must between +// zero and 32 bytes long. +func NewXOF(size uint32, key []byte) (XOF, error) { + if len(key) > Size { + return nil, errKeySize + } + if size == magicUnknownOutputLength { + // 2^32-1 indicates an unknown number of bytes and thus isn't a + // valid length. + return nil, errors.New("blake2b: XOF length too large") + } + if size == OutputLengthUnknown { + size = magicUnknownOutputLength + } + x := &xof{ + d: digest{ + size: Size, + keyLen: len(key), + }, + length: size, + } + copy(x.d.key[:], key) + x.Reset() + return x, nil +} + +type xof struct { + d digest + length uint32 + remaining uint64 + cfg, root, block [Size]byte + offset int + nodeOffset uint32 + readMode bool +} + +func (x *xof) Write(p []byte) (n int, err error) { + if x.readMode { + panic("blake2b: write to XOF after read") + } + return x.d.Write(p) +} + +func (x *xof) Clone() XOF { + clone := *x + return &clone +} + +func (x *xof) Reset() { + x.cfg[0] = byte(Size) + binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length + binary.LittleEndian.PutUint32(x.cfg[12:], x.length) // XOF length + x.cfg[17] = byte(Size) // inner hash size + + x.d.Reset() + x.d.h[1] ^= uint64(x.length) << 32 + + x.remaining = uint64(x.length) + if x.remaining == magicUnknownOutputLength { + x.remaining = maxOutputLength + } + x.offset, x.nodeOffset = 0, 0 + x.readMode = false +} + +func (x *xof) Read(p []byte) (n int, err error) { + if !x.readMode { + x.d.finalize(&x.root) + x.readMode = true + } + + if x.remaining == 0 { + return 0, io.EOF + } + + n = len(p) + if uint64(n) > x.remaining { + n = int(x.remaining) + p = p[:n] + } + + if x.offset > 0 { + blockRemaining := Size - x.offset + if n < blockRemaining { + x.offset += copy(p, x.block[x.offset:]) + x.remaining -= uint64(n) + return + } + copy(p, x.block[x.offset:]) + p = p[blockRemaining:] + x.offset = 0 + x.remaining -= uint64(blockRemaining) + } + + for len(p) >= Size { + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + copy(p, x.block[:]) + p = p[Size:] + x.remaining -= uint64(Size) + } + + if todo := len(p); todo > 0 { + if x.remaining < uint64(Size) { + x.cfg[0] = byte(x.remaining) + } + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + x.offset = copy(p, x.block[:todo]) + x.remaining -= uint64(todo) + } + return +} + +func (d *digest) initConfig(cfg *[Size]byte) { + d.offset, d.c[0], d.c[1] = 0, 0, 0 + for i := range d.h { + d.h[i] = iv[i] ^ binary.LittleEndian.Uint64(cfg[i*8:]) + } +} diff --git a/crypto/blake2b/register.go b/crypto/blake2b/register.go new file mode 100644 index 000000000000..efd689af4b49 --- /dev/null +++ b/crypto/blake2b/register.go @@ -0,0 +1,32 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package blake2b + +import ( + "crypto" + "hash" +) + +func init() { + newHash256 := func() hash.Hash { + h, _ := New256(nil) + return h + } + newHash384 := func() hash.Hash { + h, _ := New384(nil) + return h + } + + newHash512 := func() hash.Hash { + h, _ := New512(nil) + return h + } + + crypto.RegisterHash(crypto.BLAKE2b_256, newHash256) + crypto.RegisterHash(crypto.BLAKE2b_384, newHash384) + crypto.RegisterHash(crypto.BLAKE2b_512, newHash512) +} diff --git a/crypto/bn256/cloudflare/bn256.go b/crypto/bn256/cloudflare/bn256.go index c6ea2d07e01c..38822a76bfec 100644 --- a/crypto/bn256/cloudflare/bn256.go +++ b/crypto/bn256/cloudflare/bn256.go @@ -100,6 +100,10 @@ func (e *G1) Marshal() []byte { // Each value is a 256-bit number. const numBytes = 256 / 8 + if e.p == nil { + e.p = &curvePoint{} + } + e.p.MakeAffine() ret := make([]byte, numBytes*2) if e.p.IsInfinity() { @@ -382,6 +386,11 @@ func (e *GT) Marshal() []byte { // Each value is a 256-bit number. const numBytes = 256 / 8 + if e.p == nil { + e.p = &gfP12{} + e.p.SetOne() + } + ret := make([]byte, numBytes*12) temp := &gfP{} diff --git a/crypto/bn256/cloudflare/constants.go b/crypto/bn256/cloudflare/constants.go index 5122aae64f1e..f7d2c7c001cc 100644 --- a/crypto/bn256/cloudflare/constants.go +++ b/crypto/bn256/cloudflare/constants.go @@ -13,10 +13,13 @@ func bigFromBase10(s string) *big.Int { return n } -// u is the BN parameter that determines the prime: 1868033³. +// u is the BN parameter. var u = bigFromBase10("4965661367192848881") // Order is the number of elements in both G₁ and G₂: 36u⁴+36u³+18u²+6u+1. +// Needs to be highly 2-adic for efficient SNARK key and proof generation. +// Order - 1 = 2^28 * 3^2 * 13 * 29 * 983 * 11003 * 237073 * 405928799 * 1670836401704629 * 13818364434197438864469338081. +// Refer to https://eprint.iacr.org/2013/879.pdf and https://eprint.iacr.org/2013/507.pdf for more information on these parameters. var Order = bigFromBase10("21888242871839275222246405745257275088548364400416034343698204186575808495617") // P is a prime over which we form a basic field: 36u⁴+36u³+24u²+6u+1. diff --git a/crypto/bn256/cloudflare/gfp6.go b/crypto/bn256/cloudflare/gfp6.go index 83d61b781f39..a42734911c64 100644 --- a/crypto/bn256/cloudflare/gfp6.go +++ b/crypto/bn256/cloudflare/gfp6.go @@ -5,7 +5,7 @@ package bn256 // http://eprint.iacr.org/2006/471.pdf. // gfP6 implements the field of size p⁶ as a cubic extension of gfP2 where τ³=ξ -// and ξ=i+3. +// and ξ=i+9. type gfP6 struct { x, y, z gfP2 // value is xτ² + yτ + z } diff --git a/crypto/bn256/cloudflare/main_test.go b/crypto/bn256/cloudflare/main_test.go index 0230f1b1993d..c0c85457beca 100644 --- a/crypto/bn256/cloudflare/main_test.go +++ b/crypto/bn256/cloudflare/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/crypto/bn256/cloudflare/mul_arm64.h b/crypto/bn256/cloudflare/mul_arm64.h index 75d52217311b..d405eb8f7287 100644 --- a/crypto/bn256/cloudflare/mul_arm64.h +++ b/crypto/bn256/cloudflare/mul_arm64.h @@ -12,7 +12,7 @@ UMULH R1, R8, c4 \ ADCS ZR, c4 \ \ - MUL R2, R5, R25 \ + MUL R2, R5, R1 \ UMULH R2, R5, R26 \ MUL R2, R6, R0 \ ADDS R0, R26 \ @@ -24,13 +24,13 @@ ADCS R0, R29 \ UMULH R2, R8, c5 \ ADCS ZR, c5 \ - ADDS R25, c1 \ + ADDS R1, c1 \ ADCS R26, c2 \ ADCS R27, c3 \ ADCS R29, c4 \ ADCS ZR, c5 \ \ - MUL R3, R5, R25 \ + MUL R3, R5, R1 \ UMULH R3, R5, R26 \ MUL R3, R6, R0 \ ADDS R0, R26 \ @@ -42,13 +42,13 @@ ADCS R0, R29 \ UMULH R3, R8, c6 \ ADCS ZR, c6 \ - ADDS R25, c2 \ + ADDS R1, c2 \ ADCS R26, c3 \ ADCS R27, c4 \ ADCS R29, c5 \ ADCS ZR, c6 \ \ - MUL R4, R5, R25 \ + MUL R4, R5, R1 \ UMULH R4, R5, R26 \ MUL R4, R6, R0 \ ADDS R0, R26 \ @@ -60,7 +60,7 @@ ADCS R0, R29 \ UMULH R4, R8, c7 \ ADCS ZR, c7 \ - ADDS R25, c3 \ + ADDS R1, c3 \ ADCS R26, c4 \ ADCS R27, c5 \ ADCS R29, c6 \ @@ -69,15 +69,15 @@ #define gfpReduce() \ \ // m = (T * N') mod R, store m in R1:R2:R3:R4 MOVD ·np+0(SB), R17 \ - MOVD ·np+8(SB), R18 \ + MOVD ·np+8(SB), R25 \ MOVD ·np+16(SB), R19 \ MOVD ·np+24(SB), R20 \ \ MUL R9, R17, R1 \ UMULH R9, R17, R2 \ - MUL R9, R18, R0 \ + MUL R9, R25, R0 \ ADDS R0, R2 \ - UMULH R9, R18, R3 \ + UMULH R9, R25, R3 \ MUL R9, R19, R0 \ ADCS R0, R3 \ UMULH R9, R19, R4 \ @@ -86,9 +86,9 @@ \ MUL R10, R17, R21 \ UMULH R10, R17, R22 \ - MUL R10, R18, R0 \ + MUL R10, R25, R0 \ ADDS R0, R22 \ - UMULH R10, R18, R23 \ + UMULH R10, R25, R23 \ MUL R10, R19, R0 \ ADCS R0, R23 \ ADDS R21, R2 \ @@ -97,7 +97,7 @@ \ MUL R11, R17, R21 \ UMULH R11, R17, R22 \ - MUL R11, R18, R0 \ + MUL R11, R25, R0 \ ADDS R0, R22 \ ADDS R21, R3 \ ADCS R22, R4 \ @@ -107,19 +107,19 @@ \ \ // m * N loadModulus(R5,R6,R7,R8) \ - mul(R17,R18,R19,R20,R21,R22,R23,R24) \ + mul(R17,R25,R19,R20,R21,R22,R23,R24) \ \ \ // Add the 512-bit intermediate to m*N - MOVD ZR, R25 \ + MOVD ZR, R0 \ ADDS R9, R17 \ - ADCS R10, R18 \ + ADCS R10, R25 \ ADCS R11, R19 \ ADCS R12, R20 \ ADCS R13, R21 \ ADCS R14, R22 \ ADCS R15, R23 \ ADCS R16, R24 \ - ADCS ZR, R25 \ + ADCS ZR, R0 \ \ \ // Our output is R21:R22:R23:R24. Reduce mod p if necessary. SUBS R5, R21, R10 \ diff --git a/crypto/bn256/google/main_test.go b/crypto/bn256/google/main_test.go index 0230f1b1993d..c0c85457beca 100644 --- a/crypto/bn256/google/main_test.go +++ b/crypto/bn256/google/main_test.go @@ -13,7 +13,7 @@ func TestRandomG2Marshal(t *testing.T) { t.Error(err) continue } - t.Logf("%d: %x\n", n, g2.Marshal()) + t.Logf("%v: %x\n", n, g2.Marshal()) } } diff --git a/crypto/crypto.go b/crypto/crypto.go index 4567fafc729c..2869b4c19165 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -34,6 +34,15 @@ import ( "golang.org/x/crypto/sha3" ) +//SignatureLength indicates the byte length required to carry a signature with recovery id. +const SignatureLength = 64 + 1 // 64 bytes ECDSA signature + 1 byte recovery id + +// RecoveryIDOffset points to the byte offset within the signature that contains the recovery id. +const RecoveryIDOffset = 64 + +// DigestLength sets the signature digest exact length +const DigestLength = 32 + var ( secp256k1N, _ = new(big.Int).SetString("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16) secp256k1halfN = new(big.Int).Div(secp256k1N, big.NewInt(2)) diff --git a/crypto/ecies/ecies_test.go b/crypto/ecies/ecies_test.go index f33f204d5b7f..2def505d0c0b 100644 --- a/crypto/ecies/ecies_test.go +++ b/crypto/ecies/ecies_test.go @@ -35,7 +35,6 @@ import ( "crypto/rand" "crypto/sha256" "encoding/hex" - "flag" "fmt" "math/big" "testing" @@ -43,14 +42,6 @@ import ( "github.com/ethereum/go-ethereum/crypto" ) -var dumpEnc bool - -func init() { - flDump := flag.Bool("dump", false, "write encrypted test message to file") - flag.Parse() - dumpEnc = *flDump -} - // Ensure the KDF generates appropriately sized keys. func TestKDF(t *testing.T) { msg := []byte("Hello, world") @@ -58,12 +49,10 @@ func TestKDF(t *testing.T) { k, err := concatKDF(h, msg, nil, 64) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } if len(k) != 64 { - fmt.Printf("KDF: generated key is the wrong size (%d instead of 64\n", len(k)) - t.FailNow() + t.Fatalf("KDF: generated key is the wrong size (%d instead of 64\n", len(k)) } } @@ -93,49 +82,31 @@ func cmpPublic(pub1, pub2 PublicKey) bool { return bytes.Equal(pub1Out, pub2Out) } -// cmpPrivate returns true if the two private keys are the same. -func cmpPrivate(prv1, prv2 *PrivateKey) bool { - if prv1 == nil || prv1.D == nil { - return false - } else if prv2 == nil || prv2.D == nil { - return false - } else if prv1.D.Cmp(prv2.D) != 0 { - return false - } else { - return cmpPublic(prv1.PublicKey, prv2.PublicKey) - } -} - // Validate the ECDH component. func TestSharedKey(t *testing.T) { prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } skLen := MaxSharedKeyLength(&prv1.PublicKey) / 2 prv2, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } sk1, err := prv1.GenerateShared(&prv2.PublicKey, skLen, skLen) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } sk2, err := prv2.GenerateShared(&prv1.PublicKey, skLen, skLen) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } if !bytes.Equal(sk1, sk2) { - fmt.Println(ErrBadSharedKeys.Error()) - t.FailNow() + t.Fatal(ErrBadSharedKeys) } } @@ -164,7 +135,7 @@ func TestSharedKeyPadding(t *testing.T) { // test shared secret generation sk1, err := prv0.GenerateShared(&prv1.PublicKey, 16, 16) if err != nil { - fmt.Println(err.Error()) + t.Log(err.Error()) } sk2, err := prv1.GenerateShared(&prv0.PublicKey, 16, 16) @@ -182,26 +153,22 @@ func TestSharedKeyPadding(t *testing.T) { func TestTooBigSharedKey(t *testing.T) { prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } prv2, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } _, err = prv1.GenerateShared(&prv2.PublicKey, 32, 32) if err != ErrSharedKeyTooBig { - fmt.Println("ecdh: shared key should be too large for curve") - t.FailNow() + t.Fatal("ecdh: shared key should be too large for curve") } _, err = prv2.GenerateShared(&prv1.PublicKey, 32, 32) if err != ErrSharedKeyTooBig { - fmt.Println("ecdh: shared key should be too large for curve") - t.FailNow() + t.Fatal("ecdh: shared key should be too large for curve") } } @@ -209,8 +176,7 @@ func TestTooBigSharedKey(t *testing.T) { func BenchmarkGenerateKeyP256(b *testing.B) { for i := 0; i < b.N; i++ { if _, err := GenerateKey(rand.Reader, elliptic.P256(), nil); err != nil { - fmt.Println(err.Error()) - b.FailNow() + b.Fatal(err) } } } @@ -219,15 +185,13 @@ func BenchmarkGenerateKeyP256(b *testing.B) { func BenchmarkGenSharedKeyP256(b *testing.B) { prv, err := GenerateKey(rand.Reader, elliptic.P256(), nil) if err != nil { - fmt.Println(err.Error()) - b.FailNow() + b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { _, err := prv.GenerateShared(&prv.PublicKey, 16, 16) if err != nil { - fmt.Println(err.Error()) - b.FailNow() + b.Fatal(err) } } } @@ -236,15 +200,13 @@ func BenchmarkGenSharedKeyP256(b *testing.B) { func BenchmarkGenSharedKeyS256(b *testing.B) { prv, err := GenerateKey(rand.Reader, crypto.S256(), nil) if err != nil { - fmt.Println(err.Error()) - b.FailNow() + b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { _, err := prv.GenerateShared(&prv.PublicKey, 16, 16) if err != nil { - fmt.Println(err.Error()) - b.FailNow() + b.Fatal(err) } } } @@ -253,38 +215,32 @@ func BenchmarkGenSharedKeyS256(b *testing.B) { func TestEncryptDecrypt(t *testing.T) { prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } prv2, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } message := []byte("Hello, world.") ct, err := Encrypt(rand.Reader, &prv2.PublicKey, message, nil, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } pt, err := prv2.Decrypt(ct, nil, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } if !bytes.Equal(pt, message) { - fmt.Println("ecies: plaintext doesn't match message") - t.FailNow() + t.Fatal("ecies: plaintext doesn't match message") } _, err = prv1.Decrypt(ct, nil, nil) if err == nil { - fmt.Println("ecies: encryption should not have succeeded") - t.FailNow() + t.Fatal("ecies: encryption should not have succeeded") } } @@ -354,50 +310,39 @@ func TestParamSelection(t *testing.T) { func testParamSelection(t *testing.T, c testCase) { params := ParamsFromCurve(c.Curve) if params == nil && c.Expected != nil { - fmt.Printf("%s (%s)\n", ErrInvalidParams.Error(), c.Name) - t.FailNow() + t.Fatalf("%s (%s)\n", ErrInvalidParams.Error(), c.Name) } else if params != nil && !cmpParams(params, c.Expected) { - fmt.Printf("ecies: parameters should be invalid (%s)\n", - c.Name) - t.FailNow() + t.Fatalf("ecies: parameters should be invalid (%s)\n", c.Name) } prv1, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Printf("%s (%s)\n", err.Error(), c.Name) - t.FailNow() + t.Fatalf("%s (%s)\n", err.Error(), c.Name) } prv2, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Printf("%s (%s)\n", err.Error(), c.Name) - t.FailNow() + t.Fatalf("%s (%s)\n", err.Error(), c.Name) } message := []byte("Hello, world.") ct, err := Encrypt(rand.Reader, &prv2.PublicKey, message, nil, nil) if err != nil { - fmt.Printf("%s (%s)\n", err.Error(), c.Name) - t.FailNow() + t.Fatalf("%s (%s)\n", err.Error(), c.Name) } pt, err := prv2.Decrypt(ct, nil, nil) if err != nil { - fmt.Printf("%s (%s)\n", err.Error(), c.Name) - t.FailNow() + t.Fatalf("%s (%s)\n", err.Error(), c.Name) } if !bytes.Equal(pt, message) { - fmt.Printf("ecies: plaintext doesn't match message (%s)\n", - c.Name) - t.FailNow() + t.Fatalf("ecies: plaintext doesn't match message (%s)\n", c.Name) } _, err = prv1.Decrypt(ct, nil, nil) if err == nil { - fmt.Printf("ecies: encryption should not have succeeded (%s)\n", - c.Name) - t.FailNow() + t.Fatalf("ecies: encryption should not have succeeded (%s)\n", c.Name) } } @@ -409,23 +354,20 @@ func TestBasicKeyValidation(t *testing.T) { prv, err := GenerateKey(rand.Reader, DefaultCurve, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } message := []byte("Hello, world.") ct, err := Encrypt(rand.Reader, &prv.PublicKey, message, nil, nil) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } for _, b := range badBytes { ct[0] = b _, err := prv.Decrypt(ct, nil, nil) if err != ErrInvalidPublicKey { - fmt.Println("ecies: validated an invalid key") - t.FailNow() + t.Fatal("ecies: validated an invalid key") } } } @@ -463,19 +405,16 @@ func TestSharedKeyStatic(t *testing.T) { sk1, err := prv1.GenerateShared(&prv2.PublicKey, skLen, skLen) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } sk2, err := prv2.GenerateShared(&prv1.PublicKey, skLen, skLen) if err != nil { - fmt.Println(err.Error()) - t.FailNow() + t.Fatal(err) } if !bytes.Equal(sk1, sk2) { - fmt.Println(ErrBadSharedKeys.Error()) - t.FailNow() + t.Fatal(ErrBadSharedKeys) } sk, _ := hex.DecodeString("167ccc13ac5e8a26b131c3446030c60fbfac6aa8e31149d0869f93626a4cdf62") diff --git a/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s index 5df561f2fc93..1e2d7ff9612d 100644 --- a/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s +++ b/crypto/secp256k1/libsecp256k1/src/asm/field_10x26_arm.s @@ -23,7 +23,7 @@ Note: .eabi_attribute 10, 0 @ Tag_FP_arch = none .eabi_attribute 24, 1 @ Tag_ABI_align_needed = 8-byte .eabi_attribute 25, 1 @ Tag_ABI_align_preserved = 8-byte, except leaf SP - .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Agressive Speed + .eabi_attribute 30, 2 @ Tag_ABI_optimization_goals = Aggressive Speed .eabi_attribute 34, 1 @ Tag_CPU_unaligned_access = v6 .text diff --git a/crypto/signature_cgo.go b/crypto/signature_cgo.go index 340bfc221eae..1fe84509e76f 100644 --- a/crypto/signature_cgo.go +++ b/crypto/signature_cgo.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !nacl,!js,!nocgo +// +build !nacl,!js,cgo package crypto @@ -47,24 +47,24 @@ func SigToPub(hash, sig []byte) (*ecdsa.PublicKey, error) { // // This function is susceptible to chosen plaintext attacks that can leak // information about the private key that is used for signing. Callers must -// be aware that the given hash cannot be chosen by an adversery. Common +// be aware that the given digest cannot be chosen by an adversery. Common // solution is to hash any input before calculating the signature. // // The produced signature is in the [R || S || V] format where V is 0 or 1. -func Sign(hash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) { - if len(hash) != 32 { - return nil, fmt.Errorf("hash is required to be exactly 32 bytes (%d)", len(hash)) +func Sign(digestHash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) { + if len(digestHash) != DigestLength { + return nil, fmt.Errorf("hash is required to be exactly %d bytes (%d)", DigestLength, len(digestHash)) } seckey := math.PaddedBigBytes(prv.D, prv.Params().BitSize/8) defer zeroBytes(seckey) - return secp256k1.Sign(hash, seckey) + return secp256k1.Sign(digestHash, seckey) } -// VerifySignature checks that the given public key created signature over hash. +// VerifySignature checks that the given public key created signature over digest. // The public key should be in compressed (33 bytes) or uncompressed (65 bytes) format. // The signature should have the 64 byte [R || S] format. -func VerifySignature(pubkey, hash, signature []byte) bool { - return secp256k1.VerifySignature(pubkey, hash, signature) +func VerifySignature(pubkey, digestHash, signature []byte) bool { + return secp256k1.VerifySignature(pubkey, digestHash, signature) } // DecompressPubkey parses a public key in the 33-byte compressed format. diff --git a/crypto/signature_nocgo.go b/crypto/signature_nocgo.go index e8fa18ed475d..067d32e13ce1 100644 --- a/crypto/signature_nocgo.go +++ b/crypto/signature_nocgo.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build nacl js nocgo +// +build nacl js !cgo package crypto @@ -41,7 +41,7 @@ func Ecrecover(hash, sig []byte) ([]byte, error) { // SigToPub returns the public key that created the given signature. func SigToPub(hash, sig []byte) (*ecdsa.PublicKey, error) { // Convert to btcec input format with 'recovery id' v at the beginning. - btcsig := make([]byte, 65) + btcsig := make([]byte, SignatureLength) btcsig[0] = sig[64] + 27 copy(btcsig[1:], sig) diff --git a/dashboard/assets.go b/dashboard/assets.go index f3e7cf981506..eb7a8271035c 100644 --- a/dashboard/assets.go +++ b/dashboard/assets.go @@ -2,6 +2,7 @@ // sources: // assets/index.html // assets/bundle.js +// assets/bundle.js.map package dashboard @@ -71,7 +72,7 @@ var _indexHtml = []byte(`
- + `) @@ -87,40536 +88,30631 @@ func indexHtml() (*asset, error) { } info := bindataFileInfo{name: "index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x22, 0xc8, 0x3d, 0x86, 0x2f, 0xb4, 0x6a, 0x1f, 0xda, 0xd, 0x54, 0x14, 0xa3, 0x6e, 0x80, 0x56, 0x28, 0xea, 0x44, 0xcf, 0xf5, 0xf2, 0xe, 0xad, 0x19, 0xf5, 0x93, 0xd6, 0x8d, 0x6d, 0x2f, 0x35}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0xe4, 0x19, 0xb4, 0xf4, 0x89, 0xd3, 0x51, 0xa8, 0xde, 0x87, 0x57, 0x96, 0x17, 0x3f, 0x43, 0xa6, 0xa0, 0x7a, 0x6f, 0xba, 0xeb, 0x27, 0xcf, 0x41, 0x28, 0x6e, 0x85, 0x91, 0xa6, 0x48, 0xcf}} return a, nil } //nolint:misspell -var _bundleJs = []byte((((((((((`!function(modules) { - function __webpack_require__(moduleId) { - if (installedModules[moduleId]) return installedModules[moduleId].exports; - var module = installedModules[moduleId] = { - i: moduleId, +var _bundleJs = []byte((((`!function(e) { + var t = {}; + function n(r) { + if (t[r]) return t[r].exports; + var o = t[r] = { + i: r, l: !1, exports: {} }; - return modules[moduleId].call(module.exports, module, module.exports, __webpack_require__), - module.l = !0, module.exports; + return e[r].call(o.exports, o, o.exports, n), o.l = !0, o.exports; } - var installedModules = {}; - __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.d = function(exports, name, getter) { - __webpack_require__.o(exports, name) || Object.defineProperty(exports, name, { - configurable: !1, + n.m = e, n.c = t, n.d = function(e, t, r) { + n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, - get: getter + get: r }); - }, __webpack_require__.n = function(module) { - var getter = module && module.__esModule ? function() { - return module.default; - } : function() { - return module; - }; - return __webpack_require__.d(getter, "a", getter), getter; - }, __webpack_require__.o = function(object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 375); -}([ function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - "production" === process.env.NODE_ENV ? module.exports = __webpack_require__(376) : module.exports = __webpack_require__(377); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - (function(process) { - if ("production" !== process.env.NODE_ENV) { - var REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, isValidElement = function(object) { - return "object" == typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; - }; - module.exports = __webpack_require__(418)(isValidElement, !0); - } else module.exports = __webpack_require__(419)(); - }).call(exports, __webpack_require__(2)); -}, function(module, exports) { - function defaultSetTimout() { - throw new Error("setTimeout has not been defined"); - } - function defaultClearTimeout() { - throw new Error("clearTimeout has not been defined"); - } - function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) return setTimeout(fun, 0); - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) return cachedSetTimeout = setTimeout, - setTimeout(fun, 0); - try { - return cachedSetTimeout(fun, 0); - } catch (e) { - try { - return cachedSetTimeout.call(null, fun, 0); - } catch (e) { - return cachedSetTimeout.call(this, fun, 0); - } - } - } - function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) return clearTimeout(marker); - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) return cachedClearTimeout = clearTimeout, - clearTimeout(marker); - try { - return cachedClearTimeout(marker); - } catch (e) { - try { - return cachedClearTimeout.call(null, marker); - } catch (e) { - return cachedClearTimeout.call(this, marker); - } - } - } - function cleanUpNextTick() { - draining && currentQueue && (draining = !1, currentQueue.length ? queue = currentQueue.concat(queue) : queueIndex = -1, - queue.length && drainQueue()); - } - function drainQueue() { - if (!draining) { - var timeout = runTimeout(cleanUpNextTick); - draining = !0; - for (var len = queue.length; len; ) { - for (currentQueue = queue, queue = []; ++queueIndex < len; ) currentQueue && currentQueue[queueIndex].run(); - queueIndex = -1, len = queue.length; - } - currentQueue = null, draining = !1, runClearTimeout(timeout); - } - } - function Item(fun, array) { - this.fun = fun, this.array = array; - } - function noop() {} - var cachedSetTimeout, cachedClearTimeout, process = module.exports = {}; - !function() { - try { - cachedSetTimeout = "function" == typeof setTimeout ? setTimeout : defaultSetTimout; - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - cachedClearTimeout = "function" == typeof clearTimeout ? clearTimeout : defaultClearTimeout; - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } - }(); - var currentQueue, queue = [], draining = !1, queueIndex = -1; - process.nextTick = function(fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; - queue.push(new Item(fun, args)), 1 !== queue.length || draining || runTimeout(drainQueue); - }, Item.prototype.run = function() { - this.fun.apply(null, this.array); - }, process.title = "browser", process.browser = !0, process.env = {}, process.argv = [], - process.version = "", process.versions = {}, process.on = noop, process.addListener = noop, - process.once = noop, process.off = noop, process.removeListener = noop, process.removeAllListeners = noop, - process.emit = noop, process.prependListener = noop, process.prependOnceListener = noop, - process.listeners = function(name) { - return []; - }, process.binding = function(name) { - throw new Error("process.binding is not supported"); - }, process.cwd = function() { - return "/"; - }, process.chdir = function(dir) { - throw new Error("process.chdir is not supported"); - }, process.umask = function() { - return 0; - }; -}, function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; - !function() { - "use strict"; - function classNames() { - for (var classes = [], i = 0; i < arguments.length; i++) { - var arg = arguments[i]; - if (arg) { - var argType = typeof arg; - if ("string" === argType || "number" === argType) classes.push(arg); else if (Array.isArray(arg)) classes.push(classNames.apply(null, arg)); else if ("object" === argType) for (var key in arg) hasOwn.call(arg, key) && arg[key] && classes.push(key); - } - } - return classes.join(" "); - } - var hasOwn = {}.hasOwnProperty; - void 0 !== module && module.exports ? module.exports = classNames : (__WEBPACK_AMD_DEFINE_ARRAY__ = [], - void 0 !== (__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return classNames; - }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - }(); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - __webpack_require__.d(__webpack_exports__, "c", function() { - return PRESENTATION_ATTRIBUTES; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return EVENT_ATTRIBUTES; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return SCALE_TYPES; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return LEGEND_TYPES; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return getDisplayName; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return findAllByType; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return findChildByType; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return getPresentationAttributes; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return filterEventAttributes; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return filterEventsOfChild; - }), __webpack_require__.d(__webpack_exports__, "q", function() { - return validateWidthHeight; - }), __webpack_require__.d(__webpack_exports__, "n", function() { - return isSsr; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return filterSvgElements; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return isChildrenEqual; - }), __webpack_require__.d(__webpack_exports__, "p", function() { - return renderByOrder; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return getReactEventByType; - }), __webpack_require__.d(__webpack_exports__, "o", function() { - return parseChildIndex; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isString__), __WEBPACK_IMPORTED_MODULE_2_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_8__PureRender__ = __webpack_require__(5), PRESENTATION_ATTRIBUTES = { - alignmentBaseline: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - angle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - baselineShift: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clip: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clipPath: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - clipRule: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - color: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorInterpolation: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorInterpolationFilters: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorProfile: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - colorRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - cursor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - direction: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "ltr", "rtl", "inherit" ]), - display: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - dominantBaseline: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - enableBackground: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fill: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fillOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - fillRule: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "nonzero", "evenodd", "inherit" ]), - filter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - floodColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - floodOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - font: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fontFamily: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - fontSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - fontSizeAdjust: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - fontStretch: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", "inherit" ]), - fontStyle: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "italic", "oblique", "inherit" ]), - fontVariant: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "small-caps", "inherit" ]), - fontWeight: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "bold", "bolder", "lighter", 100, 200, 300, 400, 500, 600, 700, 800, 900, "inherit" ]), - glyphOrientationHorizontal: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - glyphOrientationVertical: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - imageRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "optimizeQuality", "inherit" ]), - kerning: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - letterSpacing: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - lightingColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerEnd: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerMid: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - markerStart: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - mask: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - opacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - overflow: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visible", "hidden", "scroll", "auto", "inherit" ]), - pointerEvents: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visiblePainted", "visibleFill", "visibleStroke", "visible", "painted", "fill", "stroke", "all", "none", "inherit" ]), - shapeRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "crispEdges", "geometricPrecision", "inherit" ]), - stopColor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - stopOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - stroke: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeDasharray: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - strokeDashoffset: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeLinecap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "butt", "round", "square", "inherit" ]), - strokeLinejoin: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "miter", "round", "bevel", "inherit" ]), - strokeMiterlimit: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeOpacity: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - strokeWidth: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - textAnchor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "start", "middle", "end", "inherit" ]), - textDecoration: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "none", "underline", "overline", "line-through", "blink", "inherit" ]), - textRendering: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision", "inherit" ]), - unicodeBidi: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "normal", "embed", "bidi-override", "inherit" ]), - visibility: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "visible", "hidden", "collapse", "inherit" ]), - wordSpacing: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - writingMode: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "lr-tb", "rl-tb", "tb-rl", "lr", "rl", "tb", "inherit" ]), - transform: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, - width: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - dx: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - dy: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - x: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - r: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - radius: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.array ]) - }, EVENT_ATTRIBUTES = { - onClick: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseDown: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseUp: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseOver: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseOut: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseEnter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseLeave: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchEnd: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchStart: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onTouchCancel: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func - }, REACT_BROWSER_EVENT_MAP = { - click: "onClick", - mousedown: "onMouseDown", - mouseup: "onMouseUp", - mouseover: "onMouseOver", - mousemove: "onMouseMove", - mouseout: "onMouseOut", - mouseenter: "onMouseEnter", - mouseleave: "onMouseLeave", - touchcancel: "onTouchCancel", - touchend: "onTouchEnd", - touchmove: "onTouchMove", - touchstart: "onTouchStart" - }, SCALE_TYPES = [ "auto", "linear", "pow", "sqrt", "log", "identity", "time", "band", "point", "ordinal", "quantile", "quantize", "utcTime", "sequential", "threshold" ], LEGEND_TYPES = [ "plainline", "line", "square", "rect", "circle", "cross", "diamond", "star", "triangle", "wye", "none" ], getDisplayName = function(Comp) { - return Comp ? "string" == typeof Comp ? Comp : Comp.displayName || Comp.name || "Component" : ""; - }, findAllByType = function(children, type) { - var result = [], types = []; - return types = __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(type) ? type.map(function(t) { - return getDisplayName(t); - }) : [ getDisplayName(type) ], __WEBPACK_IMPORTED_MODULE_5_react___default.a.Children.forEach(children, function(child) { - var childType = child && child.type && (child.type.displayName || child.type.name); - -1 !== types.indexOf(childType) && result.push(child); - }), result; - }, findChildByType = function(children, type) { - var result = findAllByType(children, type); - return result && result[0]; - }, getPresentationAttributes = function(el) { - if (!el || __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(el)) return null; - var props = __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(el) ? el.props : el; - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && PRESENTATION_ATTRIBUTES[i] && (out || (out = {}), - out[i] = props[i]); - return out; - }, getEventHandlerOfElement = function(originalHandler, props) { - return function(e) { - return originalHandler(props, e), null; - }; - }, filterEventAttributes = function(el, newHandler) { - var wrapCallback = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; - if (!el || __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(el)) return null; - var props = __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(el) ? el.props : el; - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && (out || (out = {}), - out[i] = newHandler || (wrapCallback ? getEventHandlerOfElement(props[i], props) : props[i])); - return out; - }, getEventHandlerOfChild = function(originalHandler, data, index) { - return function(e) { - return originalHandler(data, index, e), null; - }; - }, filterEventsOfChild = function(props, data, index) { - if (!__WEBPACK_IMPORTED_MODULE_2_lodash_isObject___default()(props)) return null; - var out = null; - for (var i in props) ({}).hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && __WEBPACK_IMPORTED_MODULE_3_lodash_isFunction___default()(props[i]) && (out || (out = {}), - out[i] = getEventHandlerOfChild(props[i], data, index)); - return out; - }, validateWidthHeight = function(el) { - if (!el || !el.props) return !1; - var _el$props = el.props, width = _el$props.width, height = _el$props.height; - return !(!Object(__WEBPACK_IMPORTED_MODULE_7__DataUtils__.h)(width) || width <= 0 || !Object(__WEBPACK_IMPORTED_MODULE_7__DataUtils__.h)(height) || height <= 0); - }, isSsr = function() { - return !("undefined" != typeof window && window.document && window.document.createElement && window.setTimeout); - }, SVG_TAGS = [ "a", "altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor", "animateMotion", "animateTransform", "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "ellipse", "feBlend", "feColormatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face", "font-face-format", "font-face-name", "font-face-url", "foreignObject", "g", "glyph", "glyphRef", "hkern", "image", "line", "lineGradient", "marker", "mask", "metadata", "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline", "radialGradient", "rect", "script", "set", "stop", "style", "svg", "switch", "symbol", "text", "textPath", "title", "tref", "tspan", "use", "view", "vkern" ], isSvgElement = function(child) { - return child && child.type && __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default()(child.type) && SVG_TAGS.indexOf(child.type) >= 0; - }, filterSvgElements = function(children) { - var svgElements = []; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.Children.forEach(children, function(entry) { - entry && entry.type && __WEBPACK_IMPORTED_MODULE_1_lodash_isString___default()(entry.type) && SVG_TAGS.indexOf(entry.type) >= 0 && svgElements.push(entry); - }), svgElements; - }, isSingleChildEqual = function(nextChild, prevChild) { - if (__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(nextChild) && __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(prevChild)) return !0; - if (!__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(nextChild) && !__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(prevChild)) { - var _ref = nextChild.props || {}, nextChildren = _ref.children, nextProps = _objectWithoutProperties(_ref, [ "children" ]), _ref2 = prevChild.props || {}, prevChildren = _ref2.children, prevProps = _objectWithoutProperties(_ref2, [ "children" ]); - return nextChildren && prevChildren ? Object(__WEBPACK_IMPORTED_MODULE_8__PureRender__.b)(nextProps, prevProps) && isChildrenEqual(nextChildren, prevChildren) : !nextChildren && !prevChildren && Object(__WEBPACK_IMPORTED_MODULE_8__PureRender__.b)(nextProps, prevProps); - } - return !1; - }, isChildrenEqual = function isChildrenEqual(nextChildren, prevChildren) { - if (nextChildren === prevChildren) return !0; - if (__WEBPACK_IMPORTED_MODULE_5_react__.Children.count(nextChildren) !== __WEBPACK_IMPORTED_MODULE_5_react__.Children.count(prevChildren)) return !1; - var count = __WEBPACK_IMPORTED_MODULE_5_react__.Children.count(nextChildren); - if (0 === count) return !0; - if (1 === count) return isSingleChildEqual(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(nextChildren) ? nextChildren[0] : nextChildren, __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(prevChildren) ? prevChildren[0] : prevChildren); - for (var i = 0; i < count; i++) { - var nextChild = nextChildren[i], prevChild = prevChildren[i]; - if (__WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(nextChild) || __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(prevChild)) { - if (!isChildrenEqual(nextChild, prevChild)) return !1; - } else if (!isSingleChildEqual(nextChild, prevChild)) return !1; - } - return !0; - }, renderByOrder = function(children, renderMap) { - var elements = [], record = {}; - return __WEBPACK_IMPORTED_MODULE_5_react__.Children.forEach(children, function(child, index) { - if (child && isSvgElement(child)) elements.push(child); else if (child && renderMap[getDisplayName(child.type)]) { - var displayName = getDisplayName(child.type), _renderMap$displayNam = renderMap[displayName], handler = _renderMap$displayNam.handler, once = _renderMap$displayNam.once; - if (once && !record[displayName] || !once) { - var results = handler(child, displayName, index); - __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(results) ? elements = [ elements ].concat(_toConsumableArray(results)) : elements.push(results), - record[displayName] = !0; - } - } - }), elements; - }, getReactEventByType = function(e) { - var type = e && e.type; - return type && REACT_BROWSER_EVENT_MAP[type] ? REACT_BROWSER_EVENT_MAP[type] : null; - }, parseChildIndex = function(child, children) { - var result = -1; - return __WEBPACK_IMPORTED_MODULE_5_react__.Children.forEach(children, function(entry, index) { - entry === child && (result = index); - }), result; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function shallowEqual(a, b) { - for (var key in a) if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) return !1; - for (var _key in b) if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) return !1; - return !0; - } - function shouldComponentUpdate(props, state) { - return !shallowEqual(props, this.props) || !shallowEqual(state, this.state); - } - function pureRenderDecorator(component) { - component.prototype.shouldComponentUpdate = shouldComponentUpdate; - } - __webpack_exports__.b = shallowEqual, __webpack_exports__.a = pureRenderDecorator; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _assign = __webpack_require__(222), _assign2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_assign); - exports.default = _assign2.default || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0, exports.default = function(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - }; -}, function(module, exports, __webpack_require__) { - function isFunction(value) { - if (!isObject(value)) return !1; - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - var baseGetTag = __webpack_require__(41), isObject = __webpack_require__(32), asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; - module.exports = isFunction; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "j", function() { - return mathSign; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return isPercent; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return isNumber; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return isNumOrStr; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return uniqueId; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return getPercentValue; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return getAnyElementOfObject; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return hasDuplicate; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return interpolateNumber; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return findEntryInArray; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return getLinearRegression; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_get__ = __webpack_require__(174), __WEBPACK_IMPORTED_MODULE_0_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_get__), __WEBPACK_IMPORTED_MODULE_1_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_1_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__ = __webpack_require__(120), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__), __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber__ = __webpack_require__(272), __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isNumber__), __WEBPACK_IMPORTED_MODULE_4_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isString__), mathSign = function(value) { - return 0 === value ? 0 : value > 0 ? 1 : -1; - }, isPercent = function(value) { - return __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(value) && value.indexOf("%") === value.length - 1; - }, isNumber = function(value) { - return __WEBPACK_IMPORTED_MODULE_3_lodash_isNumber___default()(value) && !__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(value); - }, isNumOrStr = function(value) { - return isNumber(value) || __WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(value); - }, idCounter = 0, uniqueId = function(prefix) { - var id = ++idCounter; - return "" + (prefix || "") + id; - }, getPercentValue = function(percent, totalValue) { - var defaultValue = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0, validate = arguments.length > 3 && void 0 !== arguments[3] && arguments[3]; - if (!isNumber(percent) && !__WEBPACK_IMPORTED_MODULE_4_lodash_isString___default()(percent)) return defaultValue; - var value = void 0; - if (isPercent(percent)) { - var index = percent.indexOf("%"); - value = totalValue * parseFloat(percent.slice(0, index)) / 100; - } else value = +percent; - return __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(value) && (value = defaultValue), - validate && value > totalValue && (value = totalValue), value; - }, getAnyElementOfObject = function(obj) { - if (!obj) return null; - var keys = Object.keys(obj); - return keys && keys.length ? obj[keys[0]] : null; - }, hasDuplicate = function(ary) { - if (!__WEBPACK_IMPORTED_MODULE_1_lodash_isArray___default()(ary)) return !1; - for (var len = ary.length, cache = {}, i = 0; i < len; i++) { - if (cache[ary[i]]) return !0; - cache[ary[i]] = !0; - } - return !1; - }, interpolateNumber = function(numberA, numberB) { - return isNumber(numberA) && isNumber(numberB) ? function(t) { - return numberA + t * (numberB - numberA); - } : function() { - return numberB; - }; - }, findEntryInArray = function(ary, specifiedKey, specifiedValue) { - return ary && ary.length ? ary.find(function(entry) { - return entry && __WEBPACK_IMPORTED_MODULE_0_lodash_get___default()(entry, specifiedKey) === specifiedValue; - }) : null; - }, getLinearRegression = function(data) { - if (!data || !data.length) return null; - for (var len = data.length, xsum = 0, ysum = 0, xysum = 0, xxsum = 0, xmin = 1 / 0, xmax = -1 / 0, i = 0; i < len; i++) xsum += data[i].cx, - ysum += data[i].cy, xysum += data[i].cx * data[i].cy, xxsum += data[i].cx * data[i].cx, - xmin = Math.min(xmin, data[i].cx), xmax = Math.max(xmax, data[i].cx); - var a = len * xxsum != xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0; - return { - xmin: xmin, - xmax: xmax, - a: a, - b: (ysum - a * xsum) / len - }; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function getDefaultTheme() { - return defaultTheme || (defaultTheme = (0, _createMuiTheme2.default)()); - } - Object.defineProperty(exports, "__esModule", { + }, n.r = function(e) { + "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { + value: "Module" + }), Object.defineProperty(e, "__esModule", { value: !0 - }), exports.sheetsManager = void 0; - var _keys = __webpack_require__(55), _keys2 = _interopRequireDefault(_keys), _extends2 = __webpack_require__(6), _extends3 = _interopRequireDefault(_extends2), _getPrototypeOf = __webpack_require__(26), _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf), _classCallCheck2 = __webpack_require__(27), _classCallCheck3 = _interopRequireDefault(_classCallCheck2), _createClass2 = __webpack_require__(28), _createClass3 = _interopRequireDefault(_createClass2), _possibleConstructorReturn2 = __webpack_require__(29), _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2), _inherits2 = __webpack_require__(30), _inherits3 = _interopRequireDefault(_inherits2), _objectWithoutProperties2 = __webpack_require__(7), _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2), _map = __webpack_require__(440), _map2 = _interopRequireDefault(_map), _minSafeInteger = __webpack_require__(456), _minSafeInteger2 = _interopRequireDefault(_minSafeInteger), _react = __webpack_require__(0), _react2 = _interopRequireDefault(_react), _propTypes = __webpack_require__(1), _propTypes2 = _interopRequireDefault(_propTypes), _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning), _hoistNonReactStatics = __webpack_require__(162), _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics), _getDisplayName = __webpack_require__(244), _getDisplayName2 = _interopRequireDefault(_getDisplayName), _wrapDisplayName = __webpack_require__(79), _wrapDisplayName2 = _interopRequireDefault(_wrapDisplayName), _contextTypes = __webpack_require__(459), _contextTypes2 = _interopRequireDefault(_contextTypes), _jss = __webpack_require__(246), _ns = __webpack_require__(245), ns = function(obj) { - if (obj && obj.__esModule) return obj; - var newObj = {}; - if (null != obj) for (var key in obj) Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]); - return newObj.default = obj, newObj; - }(_ns), _jssPreset = __webpack_require__(481), _jssPreset2 = _interopRequireDefault(_jssPreset), _createMuiTheme = __webpack_require__(161), _createMuiTheme2 = _interopRequireDefault(_createMuiTheme), _themeListener = __webpack_require__(160), _themeListener2 = _interopRequireDefault(_themeListener), _createGenerateClassName = __webpack_require__(494), _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName), _getStylesCreator = __webpack_require__(495), _getStylesCreator2 = _interopRequireDefault(_getStylesCreator), jss = (0, - _jss.create)((0, _jssPreset2.default)()), generateClassName = (0, _createGenerateClassName2.default)(), indexCounter = _minSafeInteger2.default, sheetsManager = exports.sheetsManager = new _map2.default(), noopTheme = {}, defaultTheme = void 0, withStyles = function(stylesOrCreator) { - var options = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; - return function(Component) { - var _options$withTheme = options.withTheme, withTheme = void 0 !== _options$withTheme && _options$withTheme, _options$flip = options.flip, flip = void 0 === _options$flip ? null : _options$flip, name = options.name, styleSheetOptions = (0, - _objectWithoutProperties3.default)(options, [ "withTheme", "flip", "name" ]), stylesCreator = (0, - _getStylesCreator2.default)(stylesOrCreator), listenToTheme = stylesCreator.themingEnabled || withTheme || "string" == typeof name; - indexCounter += 1, stylesCreator.options.index = indexCounter, "production" !== process.env.NODE_ENV && (0, - _warning2.default)(indexCounter < 0, [ "Material-UI: you might have a memory leak.", "The indexCounter is not supposed to grow that much." ].join(" ")); - var WithStyles = function(_React$Component) { - function WithStyles(props, context) { - (0, _classCallCheck3.default)(this, WithStyles); - var _this = (0, _possibleConstructorReturn3.default)(this, (WithStyles.__proto__ || (0, - _getPrototypeOf2.default)(WithStyles)).call(this, props, context)); - _this.state = {}, _this.disableStylesGeneration = !1, _this.jss = null, _this.sheetOptions = null, - _this.sheetsManager = sheetsManager, _this.stylesCreatorSaved = null, _this.theme = null, - _this.unsubscribeId = null, _this.jss = _this.context[ns.jss] || jss; - var muiThemeProviderOptions = _this.context.muiThemeProviderOptions; - return muiThemeProviderOptions && (muiThemeProviderOptions.sheetsManager && (_this.sheetsManager = muiThemeProviderOptions.sheetsManager), - _this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration), - _this.stylesCreatorSaved = stylesCreator, _this.sheetOptions = (0, _extends3.default)({ - generateClassName: generateClassName - }, _this.context[ns.sheetOptions]), _this.theme = listenToTheme ? _themeListener2.default.initial(context) || getDefaultTheme() : noopTheme, - _this; - } - return (0, _inherits3.default)(WithStyles, _React$Component), (0, _createClass3.default)(WithStyles, [ { - key: "componentWillMount", - value: function() { - this.attach(this.theme); - } - }, { - key: "componentDidMount", - value: function() { - var _this2 = this; - listenToTheme && (this.unsubscribeId = _themeListener2.default.subscribe(this.context, function(theme) { - var oldTheme = _this2.theme; - _this2.theme = theme, _this2.attach(_this2.theme), _this2.setState({}, function() { - _this2.detach(oldTheme); - }); - })); - } - }, { - key: "componentWillReceiveProps", - value: function() { - this.stylesCreatorSaved !== stylesCreator && "production" !== process.env.NODE_ENV && (this.detach(this.theme), - this.stylesCreatorSaved = stylesCreator, this.attach(this.theme)); - } - }, { - key: "componentWillUnmount", - value: function() { - this.detach(this.theme), null !== this.unsubscribeId && _themeListener2.default.unsubscribe(this.context, this.unsubscribeId); - } - }, { - key: "attach", - value: function(theme) { - if (!this.disableStylesGeneration) { - var stylesCreatorSaved = this.stylesCreatorSaved, sheetManager = this.sheetsManager.get(stylesCreatorSaved); - sheetManager || (sheetManager = new _map2.default(), this.sheetsManager.set(stylesCreatorSaved, sheetManager)); - var sheetManagerTheme = sheetManager.get(theme); - if (sheetManagerTheme || (sheetManagerTheme = { - refs: 0, - sheet: null - }, sheetManager.set(theme, sheetManagerTheme)), 0 === sheetManagerTheme.refs) { - var styles = stylesCreatorSaved.create(theme, name), meta = name; - "production" === process.env.NODE_ENV || meta || (meta = (0, _getDisplayName2.default)(Component)); - var sheet = this.jss.createStyleSheet(styles, (0, _extends3.default)({ - meta: meta, - classNamePrefix: meta, - flip: "boolean" == typeof flip ? flip : "rtl" === theme.direction, - link: !1 - }, this.sheetOptions, stylesCreatorSaved.options, { - name: name - }, styleSheetOptions)); - sheetManagerTheme.sheet = sheet, sheet.attach(); - var sheetsRegistry = this.context[ns.sheetsRegistry]; - sheetsRegistry && sheetsRegistry.add(sheet); - } - sheetManagerTheme.refs += 1; - } - } - }, { - key: "detach", - value: function(theme) { - if (!this.disableStylesGeneration) { - var stylesCreatorSaved = this.stylesCreatorSaved, sheetManager = this.sheetsManager.get(stylesCreatorSaved), sheetManagerTheme = sheetManager.get(theme); - if (sheetManagerTheme.refs -= 1, 0 === sheetManagerTheme.refs) { - sheetManager.delete(theme), this.jss.removeStyleSheet(sheetManagerTheme.sheet); - var sheetsRegistry = this.context[ns.sheetsRegistry]; - sheetsRegistry && sheetsRegistry.remove(sheetManagerTheme.sheet); - } - } - } - }, { - key: "render", - value: function() { - var _this3 = this, _props = this.props, classesProp = _props.classes, innerRef = _props.innerRef, other = (0, - _objectWithoutProperties3.default)(_props, [ "classes", "innerRef" ]), classes = void 0, renderedClasses = {}; - if (!this.disableStylesGeneration) { - var sheetManager = this.sheetsManager.get(this.stylesCreatorSaved), sheetsManagerTheme = sheetManager.get(this.theme); - renderedClasses = sheetsManagerTheme.sheet.classes; - } - classes = classesProp ? (0, _extends3.default)({}, renderedClasses, (0, _keys2.default)(classesProp).reduce(function(accumulator, key) { - return "production" !== process.env.NODE_ENV && (0, _warning2.default)(renderedClasses[key] || _this3.disableStylesGeneration, [ "Material-UI: the key ` + ("`" + `" + key + "`)) + ("`" + (` provided to the classes property is not implemented in " + (0, - _getDisplayName2.default)(Component) + ".", "You can only override one of the following: " + (0, - _keys2.default)(renderedClasses).join(",") ].join("\n")), "production" !== process.env.NODE_ENV && (0, - _warning2.default)(!classesProp[key] || "string" == typeof classesProp[key], [ "Material-UI: the key ` + "`"))) + ((`" + key + "` + ("`" + ` provided to the classes property is not valid for " + (0, - _getDisplayName2.default)(Component) + ".", "You need to provide a non empty string instead of: " + classesProp[key] + "." ].join("\n")), - classesProp[key] && (accumulator[key] = renderedClasses[key] + " " + classesProp[key]), - accumulator; - }, {})) : renderedClasses; - var more = {}; - return withTheme && (more.theme = this.theme), _react2.default.createElement(Component, (0, - _extends3.default)({ - classes: classes - }, more, other, { - ref: innerRef - })); - } - } ]), WithStyles; - }(_react2.default.Component); - return WithStyles.propTypes = "production" !== process.env.NODE_ENV ? { - classes: _propTypes2.default.object, - innerRef: _propTypes2.default.func - } : {}, WithStyles.contextTypes = (0, _extends3.default)({ - muiThemeProviderOptions: _propTypes2.default.object - }, _contextTypes2.default, listenToTheme ? _themeListener2.default.contextTypes : {}), - "production" !== process.env.NODE_ENV && (WithStyles.displayName = (0, _wrapDisplayName2.default)(Component, "WithStyles")), - (0, _hoistNonReactStatics2.default)(WithStyles, Component), "production" !== process.env.NODE_ENV && (WithStyles.Naked = Component, - WithStyles.options = options), WithStyles; - }; - }; - exports.default = withStyles; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var warning = function() {}; - "production" !== process.env.NODE_ENV && (warning = function(condition, format, args) { - var len = arguments.length; - args = new Array(len > 2 ? len - 2 : 0); - for (var key = 2; key < len; key++) args[key - 2] = arguments[key]; - if (void 0 === format) throw new Error("`)) + ("`" + (`warning(condition, format, ...args)` + "`")))) + (((` requires a warning message argument"); - if (format.length < 10 || /^[s\W]*$/.test(format)) throw new Error("The warning format should be able to uniquely identify this warning. Please, use a more descriptive format than: " + format); - if (!condition) { - var argIndex = 0, message = "Warning: " + format.replace(/%s/g, function() { - return args[argIndex++]; - }); - "undefined" != typeof console && console.error(message); - try { - throw new Error(message); - } catch (x) {} - } - }), module.exports = warning; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _defineProperty = __webpack_require__(154), _defineProperty2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_defineProperty); - exports.default = function(obj, key, value) { - return key in obj ? (0, _defineProperty2.default)(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - }; -}, function(module, exports) { - var isArray = Array.isArray; - module.exports = isArray; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function Layer(props) { - var children = props.children, className = props.className, others = _objectWithoutProperties(props, [ "children", "className" ]), layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-layer", className); - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("g", _extends({ - className: layerClass - }, others), children); - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node ]) - }; - Layer.propTypes = propTypes, __webpack_exports__.a = Layer; -}, function(module, exports, __webpack_require__) { - var global = __webpack_require__(167), core = __webpack_require__(168), hide = __webpack_require__(266), redefine = __webpack_require__(581), ctx = __webpack_require__(584), $export = function(type, name, source) { - var key, own, out, exp, IS_FORCED = type & $export.F, IS_GLOBAL = type & $export.G, IS_STATIC = type & $export.S, IS_PROTO = type & $export.P, IS_BIND = type & $export.B, target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {}).prototype, exports = IS_GLOBAL ? core : core[name] || (core[name] = {}), expProto = exports.prototype || (exports.prototype = {}); - IS_GLOBAL && (source = name); - for (key in source) own = !IS_FORCED && target && void 0 !== target[key], out = (own ? target : source)[key], - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && "function" == typeof out ? ctx(Function.call, out) : out, - target && redefine(target, key, out, type & $export.U), exports[key] != out && hide(exports, key, exp), - IS_PROTO && expProto[key] != out && (expProto[key] = out); - }; - global.core = core, $export.F = 1, $export.G = 2, $export.S = 4, $export.P = 8, - $export.B = 16, $export.W = 32, $export.U = 64, $export.R = 128, module.exports = $export; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - __webpack_require__.d(__webpack_exports__, "w", function() { - return getValueByDataKey; - }), __webpack_require__.d(__webpack_exports__, "n", function() { - return getDomainOfDataByKey; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return calculateActiveTickIndex; - }), __webpack_require__.d(__webpack_exports__, "r", function() { - return getMainColorOfGraphicItem; - }), __webpack_require__.d(__webpack_exports__, "q", function() { - return getLegendProps; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return getBarSizeList; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return getBarPosition; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return appendOffsetOfLegend; - }), __webpack_require__.d(__webpack_exports__, "z", function() { - return parseErrorBarsOfAxis; - }), __webpack_require__.d(__webpack_exports__, "o", function() { - return getDomainOfItemsWithSameAxis; - }), __webpack_require__.d(__webpack_exports__, "x", function() { - return isCategorialAxis; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return getCoordinatesOfGrid; - }), __webpack_require__.d(__webpack_exports__, "u", function() { - return getTicksOfAxis; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return combineEventHandlers; - }), __webpack_require__.d(__webpack_exports__, "A", function() { - return parseScale; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return checkDomainOfScale; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return findPositionOfBar; - }), __webpack_require__.d(__webpack_exports__, "C", function() { - return truncateByDomain; - }), __webpack_require__.d(__webpack_exports__, "s", function() { - return getStackGroupsByAxisId; - }), __webpack_require__.d(__webpack_exports__, "v", function() { - return getTicksOfScale; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return getCateCoordinateOfLine; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return getCateCoordinateOfBar; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return getBaseValueOfBar; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return detectReferenceElementsDomain; - }), __webpack_require__.d(__webpack_exports__, "t", function() { - return getStackedDataOfItem; - }), __webpack_require__.d(__webpack_exports__, "p", function() { - return getDomainOfStackGroups; - }), __webpack_require__.d(__webpack_exports__, "B", function() { - return parseSpecifiedDomain; - }), __webpack_require__.d(__webpack_exports__, "D", function() { - return validateCoordinateInRange; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return getBandSizeOfAxis; - }), __webpack_require__.d(__webpack_exports__, "y", function() { - return parseDomainOfCategoryAxis; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual__ = __webpack_require__(45), __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isEqual__), __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy__ = __webpack_require__(321), __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_sortBy__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__ = __webpack_require__(120), __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNaN__), __WEBPACK_IMPORTED_MODULE_3_lodash_isString__ = __webpack_require__(173), __WEBPACK_IMPORTED_MODULE_3_lodash_isString___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_isString__), __WEBPACK_IMPORTED_MODULE_4_lodash_max__ = __webpack_require__(841), __WEBPACK_IMPORTED_MODULE_4_lodash_max___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_max__), __WEBPACK_IMPORTED_MODULE_5_lodash_min__ = __webpack_require__(328), __WEBPACK_IMPORTED_MODULE_5_lodash_min___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_lodash_min__), __WEBPACK_IMPORTED_MODULE_6_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap__ = __webpack_require__(842), __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_lodash_flatMap__), __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_8_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_9_lodash_get__ = __webpack_require__(174), __WEBPACK_IMPORTED_MODULE_9_lodash_get___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_lodash_get__), __WEBPACK_IMPORTED_MODULE_10_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_10_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_11_recharts_scale__ = __webpack_require__(844), __WEBPACK_IMPORTED_MODULE_12_d3_scale__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__), - __webpack_require__(331)), __WEBPACK_IMPORTED_MODULE_13_d3_shape__ = __webpack_require__(182), __WEBPACK_IMPORTED_MODULE_14__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_15__cartesian_ReferenceDot__ = __webpack_require__(364), __WEBPACK_IMPORTED_MODULE_16__cartesian_ReferenceLine__ = __webpack_require__(365), __WEBPACK_IMPORTED_MODULE_17__cartesian_ReferenceArea__ = __webpack_require__(366), __WEBPACK_IMPORTED_MODULE_18__cartesian_ErrorBar__ = __webpack_require__(95), __WEBPACK_IMPORTED_MODULE_19__component_Legend__ = __webpack_require__(180), __WEBPACK_IMPORTED_MODULE_20__ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, getValueByDataKey = function(obj, dataKey, defaultValue) { - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(obj) || __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(dataKey) ? defaultValue : Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(dataKey) ? __WEBPACK_IMPORTED_MODULE_9_lodash_get___default()(obj, dataKey, defaultValue) : __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(dataKey) ? dataKey(obj) : defaultValue; - }, getDomainOfDataByKey = function(data, key, type, filterNil) { - var flattenData = __WEBPACK_IMPORTED_MODULE_7_lodash_flatMap___default()(data, function(entry) { - return getValueByDataKey(entry, key); - }); - if ("number" === type) { - var domain = flattenData.filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h); - return [ Math.min.apply(null, domain), Math.max.apply(null, domain) ]; - } - return (filterNil ? flattenData.filter(function(entry) { - return !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry); - }) : flattenData).map(function(entry) { - return Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(entry) ? entry : ""; - }); - }, calculateActiveTickIndex = function(coordinate, ticks, unsortedTicks, axis) { - var index = -1, len = ticks.length; - if (len > 1) { - if (axis && "angleAxis" === axis.axisType && Math.abs(Math.abs(axis.range[1] - axis.range[0]) - 360) <= 1e-6) for (var range = axis.range, i = 0; i < len; i++) { - var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate, cur = unsortedTicks[i].coordinate, after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate, sameDirectionCoord = void 0; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(cur - before) !== Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(after - cur)) { - var diffInterval = []; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(after - cur) === Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(range[1] - range[0])) { - sameDirectionCoord = after; - var curInRange = cur + range[1] - range[0]; - diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2), diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2); - } else { - sameDirectionCoord = before; - var afterInRange = after + range[1] - range[0]; - diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2), diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2); - } - var sameInterval = [ Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2) ]; - if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) { - index = unsortedTicks[i].index; - break; - } - } else { - var min = Math.min(before, after), max = Math.max(before, after); - if (coordinate > (min + cur) / 2 && coordinate <= (max + cur) / 2) { - index = unsortedTicks[i].index; - break; - } - } - } else for (var _i = 0; _i < len; _i++) if (0 === _i && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) { - index = ticks[_i].index; - break; - } - } else index = 0; - return index; - }, getMainColorOfGraphicItem = function(item) { - var displayName = item.type.displayName, result = void 0; - switch (displayName) { - case "Line": - case "Area": - case "Radar": - result = item.props.stroke; - break; - - default: - result = item.props.fill; - } - return result; - }, getLegendProps = function(_ref) { - var children = _ref.children, formatedGraphicalItems = _ref.formatedGraphicalItems, legendWidth = _ref.legendWidth, legendContent = _ref.legendContent, legendItem = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__component_Legend__.a); - if (!legendItem) return null; - var legendData = void 0; - return legendData = legendItem.props && legendItem.props.payload ? legendItem.props && legendItem.props.payload : "children" === legendContent ? (formatedGraphicalItems || []).reduce(function(result, _ref2) { - var item = _ref2.item, props = _ref2.props, data = props.sectors || props.data || []; - return result.concat(data.map(function(entry) { - return { - type: legendItem.props.iconType || item.props.legendType, - value: entry.name, - color: entry.fill, - payload: entry - }; - })); - }, []) : (formatedGraphicalItems || []).map(function(_ref3) { - var item = _ref3.item, _item$props = item.props, dataKey = _item$props.dataKey, name = _item$props.name, legendType = _item$props.legendType; - return { - inactive: _item$props.hide, - dataKey: dataKey, - type: legendItem.props.iconType || legendType || "square", - color: getMainColorOfGraphicItem(item), - value: name || dataKey, - payload: item.props - }; - }), _extends({}, legendItem.props, __WEBPACK_IMPORTED_MODULE_19__component_Legend__.a.getWithHeight(legendItem, legendWidth), { - payload: legendData, - item: legendItem }); - }, getBarSizeList = function(_ref4) { - var globalSize = _ref4.barSize, _ref4$stackGroups = _ref4.stackGroups, stackGroups = void 0 === _ref4$stackGroups ? {} : _ref4$stackGroups; - if (!stackGroups) return {}; - for (var result = {}, numericAxisIds = Object.keys(stackGroups), i = 0, len = numericAxisIds.length; i < len; i++) for (var sgs = stackGroups[numericAxisIds[i]].stackGroups, stackIds = Object.keys(sgs), j = 0, sLen = stackIds.length; j < sLen; j++) { - var _sgs$stackIds$j = sgs[stackIds[j]], items = _sgs$stackIds$j.items, cateAxisId = _sgs$stackIds$j.cateAxisId, barItems = items.filter(function(item) { - return Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.j)(item.type).indexOf("Bar") >= 0; + }, n.t = function(e, t) { + if (1 & t && (e = n(e)), 8 & t) return e; + if (4 & t && "object" == typeof e && e && e.__esModule) return e; + var r = Object.create(null); + if (n.r(r), Object.defineProperty(r, "default", { + enumerable: !0, + value: e + }), 2 & t && "string" != typeof e) for (var o in e) n.d(r, o, function(t) { + return e[t]; + }.bind(null, o)); + return r; + }, n.n = function(e) { + var t = e && e.__esModule ? function() { + return e.default; + } : function() { + return e; + }; + return n.d(t, "a", t), t; + }, n.o = function(e, t) { + return Object.prototype.hasOwnProperty.call(e, t); + }, n.p = "", n(n.s = "./index.jsx"); +}({ + "./common.jsx": function(e, t, n) { + "use strict"; + (function(e) { + n.d(t, "b", function() { + return d; + }), n.d(t, "a", function() { + return f; + }), n.d(t, "c", function() { + return p; + }), n.d(t, "g", function() { + return h; + }), n.d(t, "f", function() { + return m; + }), n.d(t, "e", function() { + return y; + }), n.d(t, "d", function() { + return b; }); - if (barItems && barItems.length) { - var selfSize = barItems[0].props.barSize, cateId = barItems[0].props[cateAxisId]; - result[cateId] || (result[cateId] = []), result[cateId].push({ - item: barItems[0], - stackList: barItems.slice(1), - barSize: __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(selfSize) ? globalSize : selfSize - }); - } - } - return result; - }, getBarPosition = function(_ref5) { - var barGap = _ref5.barGap, barCategoryGap = _ref5.barCategoryGap, bandSize = _ref5.bandSize, _ref5$sizeList = _ref5.sizeList, sizeList = void 0 === _ref5$sizeList ? [] : _ref5$sizeList, maxBarSize = _ref5.maxBarSize, len = sizeList.length; - if (len < 1) return null; - var realBarGap = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.d)(barGap, bandSize, 0, !0), result = void 0; - if (sizeList[0].barSize === +sizeList[0].barSize) { - var useFull = !1, fullBarSize = bandSize / len, sum = sizeList.reduce(function(res, entry) { - return res + entry.barSize || 0; - }, 0); - sum += (len - 1) * realBarGap, sum >= bandSize && (sum -= (len - 1) * realBarGap, - realBarGap = 0), sum >= bandSize && fullBarSize > 0 && (useFull = !0, fullBarSize *= .9, - sum = len * fullBarSize); - var offset = (bandSize - sum) / 2 >> 0, prev = { - offset: offset - realBarGap, - size: 0 - }; - result = sizeList.reduce(function(res, entry) { - var newRes = [].concat(_toConsumableArray(res), [ { - item: entry.item, - position: { - offset: prev.offset + prev.size + realBarGap, - size: useFull ? fullBarSize : entry.barSize - } - } ]); - return prev = newRes[newRes.length - 1].position, entry.stackList && entry.stackList.length && entry.stackList.forEach(function(item) { - newRes.push({ - item: item, - position: prev + var r, o = n("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"), a = n("./node_modules/@fortawesome/free-regular-svg-icons/index.es.js"); + function i(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter(function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable; + }))), r.forEach(function(t) { + s(e, t, n[t]); }); - }), newRes; - }, []); - } else { - var _offset = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.d)(barCategoryGap, bandSize, 0, !0); - bandSize - 2 * _offset - (len - 1) * realBarGap <= 0 && (realBarGap = 0); - var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len; - originalSize > 1 && (originalSize >>= 0); - var size = maxBarSize === +maxBarSize ? Math.min(originalSize, maxBarSize) : originalSize; - result = sizeList.reduce(function(res, entry, i) { - var newRes = [].concat(_toConsumableArray(res), [ { - item: entry.item, - position: { - offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2, - size: size - } - } ]); - return entry.stackList && entry.stackList.length && entry.stackList.forEach(function(item) { - newRes.push({ - item: item, - position: newRes[newRes.length - 1].position - }); - }), newRes; - }, []); - } - return result; - }, appendOffsetOfLegend = function(offset, items, props, legendBox) { - var children = props.children, width = props.width, height = props.height, margin = props.margin, legendWidth = width - (margin.left || 0) - (margin.right || 0), legendHeight = height - (margin.top || 0) - (margin.bottom || 0), legendProps = getLegendProps({ - children: children, - items: items, - legendWidth: legendWidth, - legendHeight: legendHeight - }), newOffset = offset; - if (legendProps) { - var box = legendBox || {}, align = legendProps.align, verticalAlign = legendProps.verticalAlign, layout = legendProps.layout; - ("vertical" === layout || "horizontal" === layout && "center" === verticalAlign) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(offset[align]) && (newOffset = _extends({}, offset, _defineProperty({}, align, newOffset[align] + (box.width || 0)))), - ("horizontal" === layout || "vertical" === layout && "center" === align) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(offset[verticalAlign]) && (newOffset = _extends({}, offset, _defineProperty({}, verticalAlign, newOffset[verticalAlign] + (box.height || 0)))); - } - return newOffset; - }, getDomainOfErrorBars = function(data, item, dataKey, axisType) { - var children = item.props.children, errorBars = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_18__cartesian_ErrorBar__.a).filter(function(errorBarChild) { - var direction = errorBarChild.props.direction; - return !(!__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(direction) && !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(axisType)) || axisType.indexOf(direction) >= 0; - }); - if (errorBars && errorBars.length) { - var keys = errorBars.map(function(errorBarChild) { - return errorBarChild.props.dataKey; - }); - return data.reduce(function(result, entry) { - var entryValue = getValueByDataKey(entry, dataKey, 0), mainValue = __WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(entryValue) ? [ __WEBPACK_IMPORTED_MODULE_5_lodash_min___default()(entryValue), __WEBPACK_IMPORTED_MODULE_4_lodash_max___default()(entryValue) ] : [ entryValue, entryValue ], errorDomain = keys.reduce(function(prevErrorArr, k) { - var errorValue = getValueByDataKey(entry, k, 0), lowerValue = mainValue[0] - Math.abs(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(errorValue) ? errorValue[0] : errorValue), upperValue = mainValue[1] + Math.abs(__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(errorValue) ? errorValue[1] : errorValue); - return [ Math.min(lowerValue, prevErrorArr[0]), Math.max(upperValue, prevErrorArr[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - return [ Math.min(errorDomain[0], result[0]), Math.max(errorDomain[1], result[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - } - return null; - }, parseErrorBarsOfAxis = function(data, items, dataKey, axisType) { - var domains = items.map(function(item) { - return getDomainOfErrorBars(data, item, dataKey, axisType); - }).filter(function(entry) { - return !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry); - }); - return domains && domains.length ? domains.reduce(function(result, entry) { - return [ Math.min(result[0], entry[0]), Math.max(result[1], entry[1]) ]; - }, [ 1 / 0, -1 / 0 ]) : null; - }, getDomainOfItemsWithSameAxis = function(data, items, type, filterNil) { - var domains = items.map(function(item) { - var dataKey = item.props.dataKey; - return "number" === type && dataKey ? getDomainOfErrorBars(data, item, dataKey) || getDomainOfDataByKey(data, dataKey, type, filterNil) : getDomainOfDataByKey(data, dataKey, type, filterNil); - }); - if ("number" === type) return domains.reduce(function(result, entry) { - return [ Math.min(result[0], entry[0]), Math.max(result[1], entry[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - var tag = {}; - return domains.reduce(function(result, entry) { - for (var i = 0, len = entry.length; i < len; i++) tag[entry[i]] || (tag[entry[i]] = !0, - result.push(entry[i])); - return result; - }, []); - }, isCategorialAxis = function(layout, axisType) { - return "horizontal" === layout && "xAxis" === axisType || "vertical" === layout && "yAxis" === axisType || "centric" === layout && "angleAxis" === axisType || "radial" === layout && "radiusAxis" === axisType; - }, getCoordinatesOfGrid = function(ticks, min, max) { - var hasMin = void 0, hasMax = void 0, values = ticks.map(function(entry) { - return entry.coordinate === min && (hasMin = !0), entry.coordinate === max && (hasMax = !0), - entry.coordinate; - }); - return hasMin || values.push(min), hasMax || values.push(max), values; - }, getTicksOfAxis = function(axis, isGrid, isAll) { - if (!axis) return null; - var scale = axis.scale, duplicateDomain = axis.duplicateDomain, type = axis.type, range = axis.range, offset = (isGrid || isAll) && "category" === type && scale.bandwidth ? scale.bandwidth() / 2 : 0; - return offset = "angleAxis" === axis.axisType ? 2 * Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.j)(range[0] - range[1]) * offset : offset, - isGrid && (axis.ticks || axis.niceTicks) ? (axis.ticks || axis.niceTicks).map(function(entry) { - var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry; - return { - coordinate: scale(scaleContent) + offset, - value: entry, - offset: offset - }; - }) : axis.isCategorial && axis.categoricalDomain ? axis.categoricalDomain.map(function(entry, index) { - return { - coordinate: scale(entry), - value: entry, - index: index, - offset: offset - }; - }) : scale.ticks && !isAll ? scale.ticks(axis.tickCount).map(function(entry) { - return { - coordinate: scale(entry) + offset, - value: entry, - offset: offset - }; - }) : scale.domain().map(function(entry, index) { - return { - coordinate: scale(entry) + offset, - value: duplicateDomain ? duplicateDomain[entry] : entry, - index: index, - offset: offset - }; - }); - }, combineEventHandlers = function(defaultHandler, parentHandler, childHandler) { - var customizedHandler = void 0; - return __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(childHandler) ? customizedHandler = childHandler : __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(parentHandler) && (customizedHandler = parentHandler), - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(defaultHandler) || customizedHandler ? function(arg1, arg2, arg3, arg4) { - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(defaultHandler) && defaultHandler(arg1, arg2, arg3, arg4), - __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(customizedHandler) && customizedHandler(arg1, arg2, arg3, arg4); - } : null; - }, parseScale = function(axis, chartType) { - var scale = axis.scale, type = axis.type, layout = axis.layout, axisType = axis.axisType; - if ("auto" === scale) return "radial" === layout && "radiusAxis" === axisType ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleBand(), - realScaleType: "band" - } : "radial" === layout && "angleAxis" === axisType ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleLinear(), - realScaleType: "linear" - } : "category" === type && chartType && (chartType.indexOf("LineChart") >= 0 || chartType.indexOf("AreaChart") >= 0) ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint(), - realScaleType: "point" - } : "category" === type ? { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleBand(), - realScaleType: "band" - } : { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scaleLinear(), - realScaleType: "linear" - }; - if (__WEBPACK_IMPORTED_MODULE_3_lodash_isString___default()(scale)) { - var name = "scale" + scale.slice(0, 1).toUpperCase() + scale.slice(1); - return { - scale: (__WEBPACK_IMPORTED_MODULE_12_d3_scale__[name] || __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint)(), - realScaleType: __WEBPACK_IMPORTED_MODULE_12_d3_scale__[name] ? name : "point" - }; - } - return __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(scale) ? { - scale: scale - } : { - scale: __WEBPACK_IMPORTED_MODULE_12_d3_scale__.scalePoint(), - realScaleType: "point" - }; - }, checkDomainOfScale = function(scale) { - var domain = scale.domain(); - if (domain && !(domain.length <= 2)) { - var len = domain.length, range = scale.range(), min = Math.min(range[0], range[1]) - 1e-4, max = Math.max(range[0], range[1]) + 1e-4, first = scale(domain[0]), last = scale(domain[len - 1]); - (first < min || first > max || last < min || last > max) && scale.domain([ domain[0], domain[len - 1] ]); - } - }, findPositionOfBar = function(barPosition, child) { - if (!barPosition) return null; - for (var i = 0, len = barPosition.length; i < len; i++) if (barPosition[i].item === child) return barPosition[i].position; - return null; - }, truncateByDomain = function(value, domain) { - if (!domain || 2 !== domain.length || !Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(domain[0]) || !Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(domain[1])) return value; - var min = Math.min(domain[0], domain[1]), max = Math.max(domain[0], domain[1]), result = [ value[0], value[1] ]; - return (!Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(value[0]) || value[0] < min) && (result[0] = min), - (!Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(value[1]) || value[1] > max) && (result[1] = max), - result[0] > max && (result[0] = max), result[1] < min && (result[1] = min), result; - }, offsetSign = function(series) { - var n = series.length; - if (!(n <= 0)) for (var j = 0, m = series[0].length; j < m; ++j) for (var positive = 0, negative = 0, i = 0; i < n; ++i) { - var value = __WEBPACK_IMPORTED_MODULE_2_lodash_isNaN___default()(series[i][j][1]) ? series[i][j][0] : series[i][j][1]; - value >= 0 ? (series[i][j][0] = positive, series[i][j][1] = positive + value, positive = series[i][j][1]) : (series[i][j][0] = negative, - series[i][j][1] = negative + value, negative = series[i][j][1]); - } - }, STACK_OFFSET_MAP = { - sign: offsetSign, - expand: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.o, - none: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.p, - silhouette: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.q, - wiggle: __WEBPACK_IMPORTED_MODULE_13_d3_shape__.r - }, getStackedData = function(data, stackItems, offsetType) { - var dataKeys = stackItems.map(function(item) { - return item.props.dataKey; - }); - return Object(__WEBPACK_IMPORTED_MODULE_13_d3_shape__.n)().keys(dataKeys).value(function(d, key) { - return +getValueByDataKey(d, key, 0); - }).order(__WEBPACK_IMPORTED_MODULE_13_d3_shape__.s).offset(STACK_OFFSET_MAP[offsetType])(data); - }, getStackGroupsByAxisId = function(data, _items, numericAxisId, cateAxisId, offsetType, reverseStackOrder) { - if (!data) return null; - var items = reverseStackOrder ? _items.reverse() : _items, stackGroups = items.reduce(function(result, item) { - var _item$props2 = item.props, stackId = _item$props2.stackId; - if (_item$props2.hide) return result; - var axisId = item.props[numericAxisId], parentGroup = result[axisId] || { - hasStack: !1, - stackGroups: {} - }; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(stackId)) { - var childGroup = parentGroup.stackGroups[stackId] || { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: [] - }; - childGroup.items.push(item), parentGroup.hasStack = !0, parentGroup.stackGroups[stackId] = childGroup; - } else parentGroup.stackGroups[Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.k)("_stackId_")] = { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: [ item ] - }; - return _extends({}, result, _defineProperty({}, axisId, parentGroup)); - }, {}); - return Object.keys(stackGroups).reduce(function(result, axisId) { - var group = stackGroups[axisId]; - return group.hasStack && (group.stackGroups = Object.keys(group.stackGroups).reduce(function(res, stackId) { - var g = group.stackGroups[stackId]; - return _extends({}, res, _defineProperty({}, stackId, { - numericAxisId: numericAxisId, - cateAxisId: cateAxisId, - items: g.items, - stackedData: getStackedData(data, g.items, offsetType) - })); - }, {})), _extends({}, result, _defineProperty({}, axisId, group)); - }, {}); - }, calculateDomainOfTicks = function(ticks, type) { - return "number" === type ? [ Math.min.apply(null, ticks), Math.max.apply(null, ticks) ] : ticks; - }, getTicksOfScale = function(scale, opts) { - var realScaleType = opts.realScaleType, type = opts.type, tickCount = opts.tickCount, originalDomain = opts.originalDomain, allowDecimals = opts.allowDecimals, scaleType = realScaleType || opts.scale; - if ("auto" !== scaleType && "linear" !== scaleType) return null; - if (tickCount && "number" === type && originalDomain && ("auto" === originalDomain[0] || "auto" === originalDomain[1])) { - var domain = scale.domain(), tickValues = Object(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__.getNiceTickValues)(domain, tickCount, allowDecimals); - return scale.domain(calculateDomainOfTicks(tickValues, type)), { - niceTicks: tickValues - }; - } - if (tickCount && "number" === type) { - var _domain = scale.domain(); - return { - niceTicks: Object(__WEBPACK_IMPORTED_MODULE_11_recharts_scale__.getTickValuesFixedDomain)(_domain, tickCount, allowDecimals) - }; - } - return null; - }, getCateCoordinateOfLine = function(_ref6) { - var axis = _ref6.axis, ticks = _ref6.ticks, bandSize = _ref6.bandSize, entry = _ref6.entry, index = _ref6.index; - if ("category" === axis.type) { - if (!axis.allowDuplicatedCategory && axis.dataKey && !__WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(entry[axis.dataKey])) { - var matchedTick = Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.a)(ticks, "value", entry[axis.dataKey]); - if (matchedTick) return matchedTick.coordinate + bandSize / 2; - } - return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null; - } - var value = getValueByDataKey(entry, axis.dataKey); - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(value) ? null : axis.scale(value); - }, getCateCoordinateOfBar = function(_ref7) { - var axis = _ref7.axis, ticks = _ref7.ticks, offset = _ref7.offset, bandSize = _ref7.bandSize, entry = _ref7.entry, index = _ref7.index; - if ("category" === axis.type) return ticks[index] ? ticks[index].coordinate + offset : null; - var value = getValueByDataKey(entry, axis.dataKey, axis.domain[index]); - return __WEBPACK_IMPORTED_MODULE_10_lodash_isNil___default()(value) ? null : axis.scale(value) - bandSize / 2 + offset; - }, getBaseValueOfBar = function(_ref8) { - var numericAxis = _ref8.numericAxis, domain = numericAxis.scale.domain(); - if ("number" === numericAxis.type) { - var min = Math.min(domain[0], domain[1]), max = Math.max(domain[0], domain[1]); - return min <= 0 && max >= 0 ? 0 : max < 0 ? max : min; - } - return domain[0]; - }, detectReferenceElementsDomain = function(children, domain, axisId, axisType, specifiedTicks) { - var lines = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_16__cartesian_ReferenceLine__.a), dots = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_15__cartesian_ReferenceDot__.a), elements = lines.concat(dots), areas = Object(__WEBPACK_IMPORTED_MODULE_20__ReactUtils__.h)(children, __WEBPACK_IMPORTED_MODULE_17__cartesian_ReferenceArea__.a), idKey = axisType + "Id", valueKey = axisType[0], finalDomain = domain; - if (elements.length && (finalDomain = elements.reduce(function(result, el) { - if (el.props[idKey] === axisId && el.props.alwaysShow && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[valueKey])) { - var value = el.props[valueKey]; - return [ Math.min(result[0], value), Math.max(result[1], value) ]; - } - return result; - }, finalDomain)), areas.length) { - var key1 = valueKey + "1", key2 = valueKey + "2"; - finalDomain = areas.reduce(function(result, el) { - if (el.props[idKey] === axisId && el.props.alwaysShow && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[key1]) && Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(el.props[key2])) { - var value1 = el.props[key1], value2 = el.props[key2]; - return [ Math.min(result[0], value1, value2), Math.max(result[1], value1, value2) ]; - } - return result; - }, finalDomain); - } - return specifiedTicks && specifiedTicks.length && (finalDomain = specifiedTicks.reduce(function(result, tick) { - return Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(tick) ? [ Math.min(result[0], tick), Math.max(result[1], tick) ] : result; - }, finalDomain)), finalDomain; - }, getStackedDataOfItem = function(item, stackGroups) { - var stackId = item.props.stackId; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.g)(stackId)) { - var group = stackGroups[stackId]; - if (group && group.items.length) { - for (var itemIndex = -1, i = 0, len = group.items.length; i < len; i++) if (group.items[i] === item) { - itemIndex = i; - break; } - return itemIndex >= 0 ? group.stackedData[itemIndex] : null; + return e; } - } - return null; - }, getDomainOfSingle = function(data) { - return data.reduce(function(result, entry) { - return [ Math.min.apply(null, entry.concat([ result[0] ]).filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)), Math.max.apply(null, entry.concat([ result[1] ]).filter(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)) ]; - }, [ 1 / 0, -1 / 0 ]); - }, getDomainOfStackGroups = function(stackGroups, startIndex, endIndex) { - return Object.keys(stackGroups).reduce(function(result, stackId) { - var group = stackGroups[stackId], stackedData = group.stackedData, domain = stackedData.reduce(function(res, entry) { - var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1)); - return [ Math.min(res[0], s[0]), Math.max(res[1], s[1]) ]; - }, [ 1 / 0, -1 / 0 ]); - return [ Math.min(domain[0], result[0]), Math.max(domain[1], result[1]) ]; - }, [ 1 / 0, -1 / 0 ]).map(function(result) { - return result === 1 / 0 || result === -1 / 0 ? 0 : result; - }); - }, MIN_VALUE_REG = /^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/, MAX_VALUE_REG = /^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/, parseSpecifiedDomain = function(specifiedDomain, dataDomain, allowDataOverflow) { - if (!__WEBPACK_IMPORTED_MODULE_6_lodash_isArray___default()(specifiedDomain)) return dataDomain; - var domain = []; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(specifiedDomain[0])) domain[0] = allowDataOverflow ? specifiedDomain[0] : Math.min(specifiedDomain[0], dataDomain[0]); else if (MIN_VALUE_REG.test(specifiedDomain[0])) { - var value = +MIN_VALUE_REG.exec(specifiedDomain[0])[1]; - domain[0] = dataDomain[0] - value; - } else __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(specifiedDomain[0]) ? domain[0] = specifiedDomain[0](dataDomain[0]) : domain[0] = dataDomain[0]; - if (Object(__WEBPACK_IMPORTED_MODULE_14__DataUtils__.h)(specifiedDomain[1])) domain[1] = allowDataOverflow ? specifiedDomain[1] : Math.max(specifiedDomain[1], dataDomain[1]); else if (MAX_VALUE_REG.test(specifiedDomain[1])) { - var _value = +MAX_VALUE_REG.exec(specifiedDomain[1])[1]; - domain[1] = dataDomain[1] + _value; - } else __WEBPACK_IMPORTED_MODULE_8_lodash_isFunction___default()(specifiedDomain[1]) ? domain[1] = specifiedDomain[1](dataDomain[1]) : domain[1] = dataDomain[1]; - return domain; - }, validateCoordinateInRange = function(coordinate, scale) { - if (!scale) return !1; - var range = scale.range(), first = range[0], last = range[range.length - 1]; - return first <= last ? coordinate >= first && coordinate <= last : coordinate >= last && coordinate <= first; - }, getBandSizeOfAxis = function(axis, ticks) { - if (axis && axis.scale && axis.scale.bandwidth) return axis.scale.bandwidth(); - if (axis && ticks && ticks.length >= 2) { - for (var orderedTicks = __WEBPACK_IMPORTED_MODULE_1_lodash_sortBy___default()(ticks, function(o) { - return o.coordinate; - }), bandSize = 1 / 0, i = 1, len = orderedTicks.length; i < len; i++) { - var cur = orderedTicks[i], prev = orderedTicks[i - 1]; - bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize); - } - return bandSize === 1 / 0 ? 0 : bandSize; - } - return 0; - }, parseDomainOfCategoryAxis = function(specifiedDomain, calculatedDomain, axisChild) { - return specifiedDomain && specifiedDomain.length ? __WEBPACK_IMPORTED_MODULE_0_lodash_isEqual___default()(specifiedDomain, __WEBPACK_IMPORTED_MODULE_9_lodash_get___default()(axisChild, "type.defaultProps.domain")) ? calculatedDomain : specifiedDomain : calculatedDomain; - }; -}, function(module, exports) { - var core = module.exports = { - version: "2.5.7" - }; - "number" == typeof __e && (__e = core); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function newInterval(floori, offseti, count, field) { - function interval(date) { - return floori(date = new Date(+date)), date; - } - return interval.floor = interval, interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }, interval.round = function(date) { - var d0 = interval(date), d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }, interval.offset = function(date, step) { - return offseti(date = new Date(+date), null == step ? 1 : Math.floor(step)), date; - }, interval.range = function(start, stop, step) { - var previous, range = []; - if (start = interval.ceil(start), step = null == step ? 1 : Math.floor(step), !(start < stop && step > 0)) return range; - do { - range.push(previous = new Date(+start)), offseti(start, step), floori(start); - } while (previous < start && start < stop); - return range; - }, interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) for (;floori(date), !test(date); ) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) if (step < 0) for (;++step <= 0; ) for (;offseti(date, -1), !test(date); ) ; else for (;--step >= 0; ) for (;offseti(date, 1), - !test(date); ) ; - }); - }, count && (interval.count = function(start, end) { - return t0.setTime(+start), t1.setTime(+end), floori(t0), floori(t1), Math.floor(count(t0, t1)); - }, interval.every = function(step) { - return step = Math.floor(step), isFinite(step) && step > 0 ? step > 1 ? interval.filter(field ? function(d) { - return field(d) % step == 0; - } : function(d) { - return interval.count(0, d) % step == 0; - }) : interval : null; - }), interval; - } - __webpack_exports__.a = newInterval; - var t0 = new Date(), t1 = new Date(); -}, function(module, exports, __webpack_require__) { - var global = __webpack_require__(24), core = __webpack_require__(17), ctx = __webpack_require__(51), hide = __webpack_require__(39), has = __webpack_require__(54), $export = function(type, name, source) { - var key, own, out, IS_FORCED = type & $export.F, IS_GLOBAL = type & $export.G, IS_STATIC = type & $export.S, IS_PROTO = type & $export.P, IS_BIND = type & $export.B, IS_WRAP = type & $export.W, exports = IS_GLOBAL ? core : core[name] || (core[name] = {}), expProto = exports.prototype, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {}).prototype; - IS_GLOBAL && (source = name); - for (key in source) (own = !IS_FORCED && target && void 0 !== target[key]) && has(exports, key) || (out = own ? target[key] : source[key], - exports[key] = IS_GLOBAL && "function" != typeof target[key] ? source[key] : IS_BIND && own ? ctx(out, global) : IS_WRAP && target[key] == out ? function(C) { - var F = function(a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: - return new C(); - - case 1: - return new C(a); - - case 2: - return new C(a, b); - } - return new C(a, b, c); - } - return C.apply(this, arguments); - }; - return F.prototype = C.prototype, F; - }(out) : IS_PROTO && "function" == typeof out ? ctx(Function.call, out) : out, IS_PROTO && ((exports.virtual || (exports.virtual = {}))[key] = out, - type & $export.R && expProto && !expProto[key] && hide(expProto, key, out))); - }; - $export.F = 1, $export.G = 2, $export.S = 4, $export.P = 8, $export.B = 16, $export.W = 32, - $export.U = 64, $export.R = 128, module.exports = $export; -}, function(module, exports) { - function isNil(value) { - return null == value; - } - module.exports = isNil; -}, function(module, exports, __webpack_require__) { - var store = __webpack_require__(151)("wks"), uid = __webpack_require__(103), Symbol = __webpack_require__(24).Symbol, USE_SYMBOL = "function" == typeof Symbol; - (module.exports = function(name) { - return store[name] || (store[name] = USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)("Symbol." + name)); - }).store = store; -}, function(module, exports, __webpack_require__) { - var anObject = __webpack_require__(52), IE8_DOM_DEFINE = __webpack_require__(224), toPrimitive = __webpack_require__(145), dP = Object.defineProperty; - exports.f = __webpack_require__(25) ? Object.defineProperty : function(O, P, Attributes) { - if (anObject(O), P = toPrimitive(P, !0), anObject(Attributes), IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) {} - if ("get" in Attributes || "set" in Attributes) throw TypeError("Accessors not supported!"); - return "value" in Attributes && (O[P] = Attributes.value), O; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return RADIAN; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return polarToCartesian; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return getMaxRadius; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return formatAxisMap; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return inRangeOfSector; - }); - var __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1__DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_2__ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, RADIAN = Math.PI / 180, radianToDegree = function(angleInRadian) { - return 180 * angleInRadian / Math.PI; - }, polarToCartesian = function(cx, cy, radius, angle) { - return { - x: cx + Math.cos(-RADIAN * angle) * radius, - y: cy + Math.sin(-RADIAN * angle) * radius - }; - }, getMaxRadius = function(width, height) { - var offset = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { - top: 0, - right: 0, - bottom: 0, - left: 0 - }; - return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2; - }, formatAxisMap = function(props, axisMap, offset, axisType, chartName) { - var width = props.width, height = props.height, startAngle = props.startAngle, endAngle = props.endAngle, cx = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.cx, width, width / 2), cy = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.cy, height, height / 2), maxRadius = getMaxRadius(width, height, offset), innerRadius = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.innerRadius, maxRadius, 0), outerRadius = Object(__WEBPACK_IMPORTED_MODULE_1__DataUtils__.d)(props.outerRadius, maxRadius, .8 * maxRadius); - return Object.keys(axisMap).reduce(function(result, id) { - var axis = axisMap[id], domain = axis.domain, reversed = axis.reversed, range = void 0; - __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(axis.range) ? ("angleAxis" === axisType ? range = [ startAngle, endAngle ] : "radiusAxis" === axisType && (range = [ innerRadius, outerRadius ]), - reversed && (range = [ range[1], range[0] ])) : (range = axis.range, startAngle = range[0], - endAngle = range[1]); - var _parseScale = Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.A)(axis, chartName), realScaleType = _parseScale.realScaleType, scale = _parseScale.scale; - scale.domain(domain).range(range), Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.c)(scale); - var ticks = Object(__WEBPACK_IMPORTED_MODULE_2__ChartUtils__.v)(scale, _extends({}, axis, { - realScaleType: realScaleType - })), finalAxis = _extends({}, axis, ticks, { - range: range, - radius: outerRadius, - realScaleType: realScaleType, - scale: scale, - cx: cx, - cy: cy, - innerRadius: innerRadius, - outerRadius: outerRadius, - startAngle: startAngle, - endAngle: endAngle - }); - return _extends({}, result, _defineProperty({}, id, finalAxis)); - }, {}); - }, distanceBetweenPoints = function(point, anotherPoint) { - var x1 = point.x, y1 = point.y, x2 = anotherPoint.x, y2 = anotherPoint.y; - return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); - }, getAngleOfPoint = function(_ref, _ref2) { - var x = _ref.x, y = _ref.y, cx = _ref2.cx, cy = _ref2.cy, radius = distanceBetweenPoints({ - x: x, - y: y - }, { - x: cx, - y: cy - }); - if (radius <= 0) return { - radius: radius - }; - var cos = (x - cx) / radius, angleInRadian = Math.acos(cos); - return y > cy && (angleInRadian = 2 * Math.PI - angleInRadian), { - radius: radius, - angle: radianToDegree(angleInRadian), - angleInRadian: angleInRadian - }; - }, formatAngleOfSector = function(_ref3) { - var startAngle = _ref3.startAngle, endAngle = _ref3.endAngle, startCnt = Math.floor(startAngle / 360), endCnt = Math.floor(endAngle / 360), min = Math.min(startCnt, endCnt); - return { - startAngle: startAngle - 360 * min, - endAngle: endAngle - 360 * min - }; - }, reverseFormatAngleOfSetor = function(angle, _ref4) { - var startAngle = _ref4.startAngle, endAngle = _ref4.endAngle, startCnt = Math.floor(startAngle / 360), endCnt = Math.floor(endAngle / 360); - return angle + 360 * Math.min(startCnt, endCnt); - }, inRangeOfSector = function(_ref5, sector) { - var x = _ref5.x, y = _ref5.y, _getAngleOfPoint = getAngleOfPoint({ - x: x, - y: y - }, sector), radius = _getAngleOfPoint.radius, angle = _getAngleOfPoint.angle, innerRadius = sector.innerRadius, outerRadius = sector.outerRadius; - if (radius < innerRadius || radius > outerRadius) return !1; - if (0 === radius) return !0; - var _formatAngleOfSector = formatAngleOfSector(sector), startAngle = _formatAngleOfSector.startAngle, endAngle = _formatAngleOfSector.endAngle, formatAngle = angle, inRange = void 0; - if (startAngle <= endAngle) { - for (;formatAngle > endAngle; ) formatAngle -= 360; - for (;formatAngle < startAngle; ) formatAngle += 360; - inRange = formatAngle >= startAngle && formatAngle <= endAngle; - } else { - for (;formatAngle > startAngle; ) formatAngle -= 360; - for (;formatAngle < endAngle; ) formatAngle += 360; - inRange = formatAngle >= endAngle && formatAngle <= startAngle; - } - return inRange ? _extends({}, sector, { - radius: radius, - angle: reverseFormatAngleOfSetor(formatAngle, sector) - }) : null; - }; -}, function(module, exports) { - var global = module.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); - "number" == typeof __g && (__g = global); -}, function(module, exports, __webpack_require__) { - module.exports = !__webpack_require__(53)(function() { - return 7 != Object.defineProperty({}, "a", { - get: function() { - return 7; - } - }).a; - }); -}, function(module, exports, __webpack_require__) { - module.exports = { - default: __webpack_require__(394), - __esModule: !0 - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0, exports.default = function(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _defineProperty = __webpack_require__(154), _defineProperty2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_defineProperty); - exports.default = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), (0, _defineProperty2.default)(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(); -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _typeof2 = __webpack_require__(105), _typeof3 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_typeof2); - exports.default = function(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" !== (void 0 === call ? "undefined" : (0, _typeof3.default)(call)) && "function" != typeof call ? self : call; - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - exports.__esModule = !0; - var _setPrototypeOf = __webpack_require__(411), _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf), _create = __webpack_require__(415), _create2 = _interopRequireDefault(_create), _typeof2 = __webpack_require__(105), _typeof3 = _interopRequireDefault(_typeof2); - exports.default = function(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + (void 0 === superClass ? "undefined" : (0, - _typeof3.default)(superClass))); - subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (_setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass); - }; -}, function(module, exports, __webpack_require__) { - var freeGlobal = __webpack_require__(268), freeSelf = "object" == typeof self && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function("return this")(); - module.exports = root; -}, function(module, exports) { - function isObject(value) { - var type = typeof value; - return null != value && ("object" == type || "function" == type); - } - module.exports = isObject; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }), exports.translateStyle = exports.AnimateGroup = exports.configBezier = exports.configSpring = void 0; - var _Animate = __webpack_require__(287), _Animate2 = _interopRequireDefault(_Animate), _easing = __webpack_require__(305), _util = __webpack_require__(132), _AnimateGroup = __webpack_require__(762), _AnimateGroup2 = _interopRequireDefault(_AnimateGroup); - exports.configSpring = _easing.configSpring, exports.configBezier = _easing.configBezier, - exports.AnimateGroup = _AnimateGroup2.default, exports.translateStyle = _util.translateStyle, - exports.default = _Animate2.default; -}, function(module, exports) { - var isArray = Array.isArray; - module.exports = isArray; -}, function(module, exports) { - module.exports = function(it) { - return "object" == typeof it ? null !== it : "function" == typeof it; - }; -}, function(module, exports, __webpack_require__) { - var freeGlobal = __webpack_require__(292), freeSelf = "object" == typeof self && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function("return this")(); - module.exports = root; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_bisect__ = __webpack_require__(332); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_bisect__.a; - }); - var __WEBPACK_IMPORTED_MODULE_1__src_ascending__ = __webpack_require__(69); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_ascending__.a; - }); - var __WEBPACK_IMPORTED_MODULE_2__src_bisector__ = __webpack_require__(333); - __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_2__src_bisector__.a; - }); - var __WEBPACK_IMPORTED_MODULE_18__src_quantile__ = (__webpack_require__(848), __webpack_require__(849), - __webpack_require__(335), __webpack_require__(337), __webpack_require__(850), __webpack_require__(853), - __webpack_require__(854), __webpack_require__(341), __webpack_require__(855), __webpack_require__(856), - __webpack_require__(857), __webpack_require__(858), __webpack_require__(342), __webpack_require__(334), - __webpack_require__(859), __webpack_require__(204)); - __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_18__src_quantile__.a; - }); - var __WEBPACK_IMPORTED_MODULE_19__src_range__ = __webpack_require__(339); - __webpack_require__.d(__webpack_exports__, "e", function() { - return __WEBPACK_IMPORTED_MODULE_19__src_range__.a; - }); - var __WEBPACK_IMPORTED_MODULE_23__src_ticks__ = (__webpack_require__(860), __webpack_require__(861), - __webpack_require__(862), __webpack_require__(340)); - __webpack_require__.d(__webpack_exports__, "h", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.a; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.b; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return __WEBPACK_IMPORTED_MODULE_23__src_ticks__.c; - }); - __webpack_require__(343), __webpack_require__(336), __webpack_require__(863); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "d", function() { - return durationSecond; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return durationMinute; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return durationHour; - }), __webpack_require__.d(__webpack_exports__, "a", function() { - return durationDay; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return durationWeek; - }); - var durationSecond = 1e3, durationMinute = 6e4, durationHour = 36e5, durationDay = 864e5, durationWeek = 6048e5; -}, function(module, exports, __webpack_require__) { - var dP = __webpack_require__(22), createDesc = __webpack_require__(75); - module.exports = __webpack_require__(25) ? function(object, key, value) { - return dP.f(object, key, createDesc(1, value)); - } : function(object, key, value) { - return object[key] = value, object; - }; -}, function(module, exports) { - var g; - g = function() { - return this; - }(); - try { - g = g || Function("return this")() || (0, eval)("this"); - } catch (e) { - "object" == typeof window && (g = window); - } - module.exports = g; -}, function(module, exports, __webpack_require__) { - function baseGetTag(value) { - return null == value ? void 0 === value ? undefinedTag : nullTag : symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - var Symbol = __webpack_require__(83), getRawTag = __webpack_require__(603), objectToString = __webpack_require__(604), nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag = Symbol ? Symbol.toStringTag : void 0; - module.exports = baseGetTag; -}, function(module, exports) { - function isObjectLike(value) { - return null != value && "object" == typeof value; - } - module.exports = isObjectLike; -}, function(module, exports) { - function isObjectLike(value) { - return null != value && "object" == typeof value; - } - module.exports = isObjectLike; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function Label(props) { - var viewBox = props.viewBox, position = props.position, value = props.value, children = props.children, content = props.content, _props$className = props.className, className = void 0 === _props$className ? "" : _props$className; - if (!viewBox || __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(value) && __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(children) && !Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(content) && !__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(content)) return null; - if (Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(content)) return Object(__WEBPACK_IMPORTED_MODULE_3_react__.cloneElement)(content, props); - var label = void 0; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(content)) { - if (label = content(props), Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(label)) return label; - } else label = getLabel(props); - var isPolarLabel = isPolar(viewBox), attrs = Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.k)(props); - if (isPolarLabel && ("insideStart" === position || "insideEnd" === position || "end" === position)) return renderRadialLabel(props, label, attrs); - var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(props) : getAttrsOfCartesianLabel(props); - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_6__Text__.a, _extends({ - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-label", className) - }, attrs, positionAttrs), label); - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_3_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_3_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react__), __WEBPACK_IMPORTED_MODULE_4_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_4_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_prop_types__), __WEBPACK_IMPORTED_MODULE_5_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_5_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_classnames__), __WEBPACK_IMPORTED_MODULE_6__Text__ = __webpack_require__(61), __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_8__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__ = __webpack_require__(23), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, cartesianViewBoxShape = __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.shape({ - x: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number - }), polarViewBoxShape = __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.shape({ - cx: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - cy: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - innerRadius: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - outerRadius: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - startAngle: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - endAngle: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number - }), propTypes = { - viewBox: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ cartesianViewBoxShape, polarViewBoxShape ]), - formatter: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.func, - value: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.string ]), - offset: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.number, - position: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOf([ "top", "left", "right", "bottom", "inside", "outside", "insideLeft", "insideRight", "insideTop", "insideBottom", "insideTopLeft", "insideBottomLeft", "insideTopRight", "insideBottomRight", "insideStart", "insideEnd", "end", "center" ]), - children: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.node ]), - className: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.string, - content: __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.element, __WEBPACK_IMPORTED_MODULE_4_prop_types___default.a.func ]) - }, defaultProps = { - offset: 5 - }, getLabel = function(props) { - var value = props.value, formatter = props.formatter, label = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(props.children) ? value : props.children; - return __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(formatter) ? formatter(label) : label; - }, getDeltaAngle = function(startAngle, endAngle) { - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.j)(endAngle - startAngle) * Math.min(Math.abs(endAngle - startAngle), 360); - }, renderRadialLabel = function(labelProps, label, attrs) { - var position = labelProps.position, viewBox = labelProps.viewBox, offset = labelProps.offset, className = labelProps.className, cx = viewBox.cx, cy = viewBox.cy, innerRadius = viewBox.innerRadius, outerRadius = viewBox.outerRadius, startAngle = viewBox.startAngle, endAngle = viewBox.endAngle, clockWise = viewBox.clockWise, radius = (innerRadius + outerRadius) / 2, deltaAngle = getDeltaAngle(startAngle, endAngle), sign = deltaAngle >= 0 ? 1 : -1, labelAngle = void 0, direction = void 0; - "insideStart" === position ? (labelAngle = startAngle + sign * offset, direction = clockWise) : "insideEnd" === position ? (labelAngle = endAngle - sign * offset, - direction = !clockWise) : "end" === position && (labelAngle = endAngle + sign * offset, - direction = clockWise), direction = deltaAngle <= 0 ? direction : !direction; - var startPoint = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, radius, labelAngle), endPoint = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, radius, labelAngle + 359 * (direction ? 1 : -1)), path = "M" + startPoint.x + "," + startPoint.y + "\n A" + radius + "," + radius + ",0,1," + (direction ? 0 : 1) + ",\n " + endPoint.x + "," + endPoint.y, id = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(labelProps.id) ? Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.k)("recharts-radial-line-") : labelProps.id; - return __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("text", _extends({}, attrs, { - dominantBaseline: "central", - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-radial-bar-label", className) - }), __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("defs", null, __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("path", { - id: id, - d: path - })), __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement("textPath", { - xlinkHref: "#" + id - }, label)); - }, getAttrsOfPolarLabel = function(props) { - var viewBox = props.viewBox, offset = props.offset, position = props.position, cx = viewBox.cx, cy = viewBox.cy, innerRadius = viewBox.innerRadius, outerRadius = viewBox.outerRadius, startAngle = viewBox.startAngle, endAngle = viewBox.endAngle, midAngle = (startAngle + endAngle) / 2; - if ("outside" === position) { - var _polarToCartesian = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, outerRadius + offset, midAngle), _x = _polarToCartesian.x; - return { - x: _x, - y: _polarToCartesian.y, - textAnchor: _x >= cx ? "start" : "end", - verticalAnchor: "middle" - }; - } - if ("center" === position) return { - x: cx, - y: cy, - textAnchor: "middle", - verticalAnchor: "middle" - }; - var r = (innerRadius + outerRadius) / 2, _polarToCartesian2 = Object(__WEBPACK_IMPORTED_MODULE_9__util_PolarUtils__.e)(cx, cy, r, midAngle); - return { - x: _polarToCartesian2.x, - y: _polarToCartesian2.y, - textAnchor: "middle", - verticalAnchor: "middle" - }; - }, getAttrsOfCartesianLabel = function(props) { - var viewBox = props.viewBox, offset = props.offset, position = props.position, x = viewBox.x, y = viewBox.y, width = viewBox.width, height = viewBox.height, sign = height >= 0 ? 1 : -1; - return "top" === position ? { - x: x + width / 2, - y: y - sign * offset, - textAnchor: "middle", - verticalAnchor: "end" - } : "bottom" === position ? { - x: x + width / 2, - y: y + height + sign * offset, - textAnchor: "middle", - verticalAnchor: "start" - } : "left" === position ? { - x: x - offset, - y: y + height / 2, - textAnchor: "end", - verticalAnchor: "middle" - } : "right" === position ? { - x: x + width + offset, - y: y + height / 2, - textAnchor: "start", - verticalAnchor: "middle" - } : "insideLeft" === position ? { - x: x + offset, - y: y + height / 2, - textAnchor: "start", - verticalAnchor: "middle" - } : "insideRight" === position ? { - x: x + width - offset, - y: y + height / 2, - textAnchor: "end", - verticalAnchor: "middle" - } : "insideTop" === position ? { - x: x + width / 2, - y: y + sign * offset, - textAnchor: "middle", - verticalAnchor: "start" - } : "insideBottom" === position ? { - x: x + width / 2, - y: y + height - sign * offset, - textAnchor: "middle", - verticalAnchor: "end" - } : "insideTopLeft" === position ? { - x: x + offset, - y: y + sign * offset, - textAnchor: "start", - verticalAnchor: "start" - } : "insideTopRight" === position ? { - x: x + width - offset, - y: y + sign * offset, - textAnchor: "end", - verticalAnchor: "start" - } : "insideBottomLeft" === position ? { - x: x + offset, - y: y + height - sign * offset, - textAnchor: "start", - verticalAnchor: "end" - } : "insideBottomRight" === position ? { - x: x + width - offset, - y: y + height - sign * offset, - textAnchor: "end", - verticalAnchor: "end" - } : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(position) && (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(position.x) || Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.i)(position.x)) && (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(position.y) || Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.i)(position.y)) ? { - x: x + Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.d)(position.x, width), - y: y + Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.d)(position.y, height), - textAnchor: "end", - verticalAnchor: "end" - } : { - x: x + width / 2, - y: y + height / 2, - textAnchor: "middle", - verticalAnchor: "middle" - }; - }, isPolar = function(viewBox) { - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(viewBox.cx); - }; - Label.displayName = "Label", Label.defaultProps = defaultProps, Label.propTypes = propTypes; - var parseViewBox = function(props) { - var cx = props.cx, cy = props.cy, angle = props.angle, startAngle = props.startAngle, endAngle = props.endAngle, r = props.r, radius = props.radius, innerRadius = props.innerRadius, outerRadius = props.outerRadius, x = props.x, y = props.y, top = props.top, left = props.left, width = props.width, height = props.height, clockWise = props.clockWise; - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(width) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(height)) { - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(x) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(y)) return { - x: x, - y: y, - width: width, - height: height - }; - if (Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(top) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(left)) return { - x: top, - y: left, - width: width, - height: height - }; - } - return Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(x) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(y) ? { - x: x, - y: y, - width: 0, - height: 0 - } : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(cx) && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(cy) ? { - cx: cx, - cy: cy, - startAngle: startAngle || angle || 0, - endAngle: endAngle || angle || 0, - innerRadius: innerRadius || 0, - outerRadius: outerRadius || radius || r || 0, - clockWise: clockWise - } : props.viewBox ? props.viewBox : {}; - }, parseLabel = function(label, viewBox) { - return label ? !0 === label ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - viewBox: viewBox - }) : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.g)(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - viewBox: viewBox, - value: label - }) : Object(__WEBPACK_IMPORTED_MODULE_3_react__.isValidElement)(label) || __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, { - key: "label-implicit", - content: label, - viewBox: viewBox - }) : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(label) ? __WEBPACK_IMPORTED_MODULE_3_react___default.a.createElement(Label, _extends({ - viewBox: viewBox - }, label, { - key: "label-implicit" - })) : null : null; - }, renderCallByParent = function(parentProps, viewBox) { - var ckeckPropsLabel = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; - if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) return null; - var children = parentProps.children, parentViewBox = parseViewBox(parentProps), explicitChilren = Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.h)(children, Label).map(function(child, index) { - return Object(__WEBPACK_IMPORTED_MODULE_3_react__.cloneElement)(child, { - viewBox: viewBox || parentViewBox, - key: "label-" + index - }); - }); - return ckeckPropsLabel ? [ parseLabel(parentProps.label, viewBox || parentViewBox) ].concat(_toConsumableArray(explicitChilren)) : explicitChilren; - }; - Label.parseViewBox = parseViewBox, Label.renderCallByParent = renderCallByParent, - __webpack_exports__.a = Label; -}, function(module, exports, __webpack_require__) { - function isEqual(value, other) { - return baseIsEqual(value, other); - } - var baseIsEqual = __webpack_require__(199); - module.exports = isEqual; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_color__ = __webpack_require__(207); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.e; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.g; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_color__.f; - }); - var __WEBPACK_IMPORTED_MODULE_1__src_lab__ = __webpack_require__(871); - __webpack_require__.d(__webpack_exports__, "e", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_lab__.a; - }), __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_1__src_lab__.b; - }); - var __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__ = __webpack_require__(872); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__.a; - }); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function LabelList(props) { - var data = props.data, valueAccessor = props.valueAccessor, dataKey = props.dataKey, clockWise = props.clockWise, id = props.id, others = _objectWithoutProperties(props, [ "data", "valueAccessor", "dataKey", "clockWise", "id" ]); - return data && data.length ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Layer__.a, { - className: "recharts-label-list" - }, data.map(function(entry, index) { - var value = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(dataKey) ? valueAccessor(entry, index) : Object(__WEBPACK_IMPORTED_MODULE_10__util_ChartUtils__.w)(entry && entry.payload, dataKey), idProps = __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(id) ? {} : { - id: id + "-" + index - }; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_7__Label__.a, _extends({}, Object(__WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__.k)(entry), others, idProps, { - index: index, - value: value, - viewBox: __WEBPACK_IMPORTED_MODULE_7__Label__.a.parseViewBox(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default()(clockWise) ? entry : _extends({}, entry, { - clockWise: clockWise - })), - key: "label-" + index - })); - })) : null; - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_isObject__ = __webpack_require__(32), __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isObject__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_2_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_3_lodash_last__ = __webpack_require__(922), __WEBPACK_IMPORTED_MODULE_3_lodash_last___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_last__), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7__Label__ = __webpack_require__(44), __WEBPACK_IMPORTED_MODULE_8__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_10__util_ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - id: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - data: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object), - valueAccessor: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - clockWise: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - dataKey: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func ]) - }, defaultProps = { - valueAccessor: function(entry) { - return __WEBPACK_IMPORTED_MODULE_4_lodash_isArray___default()(entry.value) ? __WEBPACK_IMPORTED_MODULE_3_lodash_last___default()(entry.value) : entry.value; - } - }; - LabelList.propTypes = propTypes, LabelList.displayName = "LabelList"; - var parseLabelList = function(label, data) { - return label ? !0 === label ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, { - key: "labelList-implicit", - data: data - }) : __WEBPACK_IMPORTED_MODULE_5_react___default.a.isValidElement(label) || __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(label) ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, { - key: "labelList-implicit", - data: data, - content: label - }) : __WEBPACK_IMPORTED_MODULE_0_lodash_isObject___default()(label) ? __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(LabelList, _extends({ - data: data - }, label, { - key: "labelList-implicit" - })) : null : null; - }, renderCallByParent = function(parentProps, data) { - var ckeckPropsLabel = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; - if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) return null; - var children = parentProps.children, explicitChilren = Object(__WEBPACK_IMPORTED_MODULE_9__util_ReactUtils__.h)(children, LabelList).map(function(child, index) { - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(child, { - data: data, - key: "labelList-" + index - }); - }); - return ckeckPropsLabel ? [ parseLabelList(parentProps.label, data) ].concat(_toConsumableArray(explicitChilren)) : explicitChilren; - }; - LabelList.renderCallByParent = renderCallByParent, LabelList.defaultProps = defaultProps, - __webpack_exports__.a = LabelList; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - function _toConsumableArray(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - return arr2; - } - return Array.from(arr); - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 + function s(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy__ = __webpack_require__(321), __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_sortBy__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_lodash_range__ = __webpack_require__(373), __WEBPACK_IMPORTED_MODULE_2_lodash_range___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_range__), __WEBPACK_IMPORTED_MODULE_3_lodash_throttle__ = __webpack_require__(933), __WEBPACK_IMPORTED_MODULE_3_lodash_throttle___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_throttle__), __WEBPACK_IMPORTED_MODULE_4_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_5_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_5_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_react__), __WEBPACK_IMPORTED_MODULE_6_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_6_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_prop_types__), __WEBPACK_IMPORTED_MODULE_7_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_7_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_classnames__), __WEBPACK_IMPORTED_MODULE_8__container_Surface__ = __webpack_require__(82), __WEBPACK_IMPORTED_MODULE_9__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__ = __webpack_require__(125), __WEBPACK_IMPORTED_MODULE_11__component_Legend__ = __webpack_require__(180), __WEBPACK_IMPORTED_MODULE_12__shape_Curve__ = __webpack_require__(71), __WEBPACK_IMPORTED_MODULE_13__shape_Cross__ = __webpack_require__(367), __WEBPACK_IMPORTED_MODULE_14__shape_Sector__ = __webpack_require__(139), __WEBPACK_IMPORTED_MODULE_15__shape_Dot__ = __webpack_require__(63), __WEBPACK_IMPORTED_MODULE_16__shape_Rectangle__ = __webpack_require__(70), __WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__ = __webpack_require__(374), __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__ = __webpack_require__(372), __WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__ = __webpack_require__(198), __WEBPACK_IMPORTED_MODULE_21__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__ = __webpack_require__(16), __WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__ = __webpack_require__(23), __WEBPACK_IMPORTED_MODULE_24__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_25__util_Events__ = __webpack_require__(934), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), ORIENT_MAP = { - xAxis: [ "bottom", "top" ], - yAxis: [ "left", "right" ] - }, originCoordinate = { - x: 0, - y: 0 - }, generateCategoricalChart = function(_ref) { - var _class, _temp, _initialiseProps, chartName = _ref.chartName, GraphicalChild = _ref.GraphicalChild, _ref$eventType = _ref.eventType, eventType = void 0 === _ref$eventType ? "axis" : _ref$eventType, axisComponents = _ref.axisComponents, legendContent = _ref.legendContent, formatAxisMap = _ref.formatAxisMap, defaultProps = _ref.defaultProps, propTypes = _ref.propTypes; - return _temp = _class = function(_Component) { - function CategoricalChartWrapper(props) { - _classCallCheck(this, CategoricalChartWrapper); - var _this = _possibleConstructorReturn(this, (CategoricalChartWrapper.__proto__ || Object.getPrototypeOf(CategoricalChartWrapper)).call(this, props)); - _initialiseProps.call(_this); - var defaultState = _this.constructor.createDefaultState(props); - return _this.state = _extends({}, defaultState, { - updateId: 0 - }, _this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: props - }, defaultState, { - updateId: 0 - }))), _this.uniqueChartId = __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(props.id) ? Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.k)("recharts") : props.id, - props.throttleDelay && (_this.triggeredAfterMouseMove = __WEBPACK_IMPORTED_MODULE_3_lodash_throttle___default()(_this.triggeredAfterMouseMove, props.throttleDelay)), - _this; - } - return _inherits(CategoricalChartWrapper, _Component), _createClass(CategoricalChartWrapper, [ { - key: "componentDidMount", - value: function() { - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) || this.addListener(); - } - }, { - key: "componentWillReceiveProps", - value: function(nextProps) { - var _props = this.props, data = _props.data, children = _props.children, width = _props.width, height = _props.height, layout = _props.layout, stackOffset = _props.stackOffset, margin = _props.margin, updateId = this.state.updateId; - if (nextProps.data === data && nextProps.width === width && nextProps.height === height && nextProps.layout === layout && nextProps.stackOffset === stackOffset && Object(__WEBPACK_IMPORTED_MODULE_24__util_PureRender__.b)(nextProps.margin, margin)) { - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.m)(nextProps.children, children)) { - var hasGlobalData = !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.data), newUpdateId = hasGlobalData ? updateId : updateId + 1, _state = this.state, dataStartIndex = _state.dataStartIndex, dataEndIndex = _state.dataEndIndex, _defaultState = _extends({}, this.constructor.createDefaultState(nextProps), { - dataEndIndex: dataEndIndex, - dataStartIndex: dataStartIndex - }); - this.setState(_extends({}, _defaultState, { - updateId: newUpdateId - }, this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: nextProps - }, _defaultState, { - updateId: newUpdateId - })))); - } - } else { - var defaultState = this.constructor.createDefaultState(nextProps); - this.setState(_extends({}, defaultState, { - updateId: updateId + 1 - }, this.updateStateOfAxisMapsOffsetAndStackGroups(_extends({ - props: nextProps - }, defaultState, { - updateId: updateId + 1 - })))); - } - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) && !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.syncId) && this.addListener(), - !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) && __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(nextProps.syncId) && this.removeListener(); + (r = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).enterModule) && r(e); + var l, u, c = [ { + id: "home", + menu: { + title: "Home", + icon: o.d } }, { - key: "componentWillUnmount", - value: function() { - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(this.props.syncId) || this.removeListener(), - "function" == typeof this.triggeredAfterMouseMove.cancel && this.triggeredAfterMouseMove.cancel(); + id: "chain", + menu: { + title: "Chain", + icon: o.e } }, { - key: "getAxisMap", - value: function(props, _ref2) { - var _ref2$axisType = _ref2.axisType, axisType = void 0 === _ref2$axisType ? "xAxis" : _ref2$axisType, AxisComp = _ref2.AxisComp, graphicalItems = _ref2.graphicalItems, stackGroups = _ref2.stackGroups, dataStartIndex = _ref2.dataStartIndex, dataEndIndex = _ref2.dataEndIndex, children = props.children, axisIdKey = axisType + "Id", axes = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.h)(children, AxisComp), axisMap = {}; - return axes && axes.length ? axisMap = this.getAxisMapByAxes(props, { - axes: axes, - graphicalItems: graphicalItems, - axisType: axisType, - axisIdKey: axisIdKey, - stackGroups: stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }) : graphicalItems && graphicalItems.length && (axisMap = this.getAxisMapByItems(props, { - Axis: AxisComp, - graphicalItems: graphicalItems, - axisType: axisType, - axisIdKey: axisIdKey, - stackGroups: stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - })), axisMap; + id: "txpool", + menu: { + title: "TxPool", + icon: a.b } }, { - key: "getAxisMapByAxes", - value: function(props, _ref3) { - var _this2 = this, axes = _ref3.axes, graphicalItems = _ref3.graphicalItems, axisType = _ref3.axisType, axisIdKey = _ref3.axisIdKey, stackGroups = _ref3.stackGroups, dataStartIndex = _ref3.dataStartIndex, dataEndIndex = _ref3.dataEndIndex, layout = props.layout, children = props.children, stackOffset = props.stackOffset, isCategorial = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.x)(layout, axisType); - return axes.reduce(function(result, child) { - var _child$props = child.props, type = _child$props.type, dataKey = _child$props.dataKey, allowDataOverflow = _child$props.allowDataOverflow, allowDuplicatedCategory = _child$props.allowDuplicatedCategory, scale = _child$props.scale, ticks = _child$props.ticks, axisId = child.props[axisIdKey], displayedData = _this2.constructor.getDisplayedData(props, { - graphicalItems: graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId; - }), - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }), len = displayedData.length; - if (!result[axisId]) { - var domain = void 0, duplicateDomain = void 0, categoricalDomain = void 0; - if (dataKey) { - if (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.n)(displayedData, dataKey, type), - "category" === type && isCategorial) { - var duplicate = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.e)(domain); - allowDuplicatedCategory && duplicate ? (duplicateDomain = domain, domain = __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len)) : allowDuplicatedCategory || (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.y)(child.props.domain, domain, child).reduce(function(finalDomain, entry) { - return finalDomain.indexOf(entry) >= 0 ? finalDomain : [].concat(_toConsumableArray(finalDomain), [ entry ]); - }, [])); - } else if ("category" === type) domain = allowDuplicatedCategory ? domain.filter(function(entry) { - return "" !== entry && !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(entry); - }) : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.y)(child.props.domain, domain, child).reduce(function(finalDomain, entry) { - return finalDomain.indexOf(entry) >= 0 || "" === entry || __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(entry) ? finalDomain : [].concat(_toConsumableArray(finalDomain), [ entry ]); - }, []); else if ("number" === type) { - var errorBarsDomain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.z)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), dataKey, axisType); - errorBarsDomain && (domain = errorBarsDomain); - } - !isCategorial || "number" !== type && "auto" === scale || (categoricalDomain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.n)(displayedData, dataKey, "category")); - } else domain = isCategorial ? __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len) : stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack && "number" === type ? "expand" === stackOffset ? [ 0, 1 ] : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.p)(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex) : Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.o)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), type, !0); - return "number" === type && (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType, ticks), - child.props.domain && (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.B)(child.props.domain, domain, allowDataOverflow))), - _extends({}, result, _defineProperty({}, axisId, _extends({}, child.props, { - axisType: axisType, - domain: domain, - categoricalDomain: categoricalDomain, - duplicateDomain: duplicateDomain, - originalDomain: child.props.domain, - isCategorial: isCategorial, - layout: layout - }))); - } - return result; - }, {}); + id: "network", + menu: { + title: "Network", + icon: o.c } }, { - key: "getAxisMapByItems", - value: function(props, _ref4) { - var graphicalItems = _ref4.graphicalItems, Axis = _ref4.Axis, axisType = _ref4.axisType, axisIdKey = _ref4.axisIdKey, stackGroups = _ref4.stackGroups, dataStartIndex = _ref4.dataStartIndex, dataEndIndex = _ref4.dataEndIndex, layout = props.layout, children = props.children, displayedData = this.constructor.getDisplayedData(props, { - graphicalItems: graphicalItems, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }), len = displayedData.length, isCategorial = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.x)(layout, axisType), index = -1; - return graphicalItems.reduce(function(result, child) { - var axisId = child.props[axisIdKey]; - if (!result[axisId]) { - index++; - var domain = void 0; - return isCategorial ? domain = __WEBPACK_IMPORTED_MODULE_2_lodash_range___default()(0, len) : stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack ? (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.p)(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex), - domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType)) : (domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.B)(Axis.defaultProps.domain, Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.o)(displayedData, graphicalItems.filter(function(item) { - return item.props[axisIdKey] === axisId && !item.props.hide; - }), "number"), Axis.defaultProps.allowDataOverflow), domain = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.e)(children, domain, axisId, axisType)), - _extends({}, result, _defineProperty({}, axisId, _extends({ - axisType: axisType - }, Axis.defaultProps, { - hide: !0, - orientation: ORIENT_MAP[axisType] && ORIENT_MAP[axisType][index % 2], - domain: domain, - originalDomain: Axis.defaultProps.domain, - isCategorial: isCategorial, - layout: layout - }))); - } - return result; - }, {}); + id: "system", + menu: { + title: "System", + icon: o.g } }, { - key: "getActiveCoordinate", - value: function(tooltipTicks, activeIndex, rangeObj) { - var layout = this.props.layout, entry = tooltipTicks.find(function(tick) { - return tick && tick.index === activeIndex; - }); - if (entry) { - if ("horizontal" === layout) return { - x: entry.coordinate, - y: rangeObj.y - }; - if ("vertical" === layout) return { - x: rangeObj.x, - y: entry.coordinate - }; - if ("centric" === layout) { - var _angle = entry.coordinate, _radius = rangeObj.radius; - return _extends({}, rangeObj, Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(rangeObj.cx, rangeObj.cy, _radius, _angle), { - angle: _angle, - radius: _radius - }); - } - var radius = entry.coordinate, angle = rangeObj.angle; - return _extends({}, rangeObj, Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(rangeObj.cx, rangeObj.cy, radius, angle), { - angle: angle, - radius: radius - }); + id: "logs", + menu: { + title: "Logs", + icon: o.f + } + } ], d = new Map(c.map(function(e) { + var t = e.id; + return [ t, i({ + id: t + }, e.menu) ]; + })), f = 200, p = .2, h = { + light: { + color: "rgba(255, 255, 255, 0.54)" + } + }, _ = [ "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi" ], m = function(e) { + for (var t = 0; e > 1024 && t < 8; t++) e /= 1024; + return e.toFixed(2).toString().concat(" ", _[t], "B"); + }, y = [ "#00FF00", "#FFFF00", "#FF7F00", "#FF0000" ], b = [ 0, 2048, 102400, 2097152 ]; + (l = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).default) && (l.register(c, "menuSkeletons", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(d, "MENU", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(f, "DURATION", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(p, "chartStrokeWidth", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(h, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(_, "unit", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(m, "simplifyBytes", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(y, "hues", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx"), + l.register(b, "hueScale", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/common.jsx")), + (u = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).leaveModule) && u(e); + }).call(this, n("./node_modules/webpack/buildin/harmony-module.js")(e)); + }, + "./components/Body.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _SideBar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./components/SideBar.jsx"), _Main__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./components/Main.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 } - return originCoordinate; - } - }, { - key: "getMouseInfo", - value: function(event) { - if (!this.container) return null; - var containerOffset = Object(__WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__.b)(this.container), e = Object(__WEBPACK_IMPORTED_MODULE_20__util_DOMUtils__.a)(event, containerOffset), rangeObj = this.inRange(e.chartX, e.chartY); - if (!rangeObj) return null; - var _state2 = this.state, xAxisMap = _state2.xAxisMap, yAxisMap = _state2.yAxisMap; - if ("axis" !== eventType && xAxisMap && yAxisMap) { - var xScale = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(xAxisMap).scale, yScale = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(yAxisMap).scale, xValue = xScale && xScale.invert ? xScale.invert(e.chartX) : null, yValue = yScale && yScale.invert ? yScale.invert(e.chartY) : null; - return _extends({}, e, { - xValue: xValue, - yValue: yValue - }); + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + body: { + display: "flex", + width: "100%", + height: "92%" + } + }, Body = function(_Component) { + function Body() { + return _classCallCheck(this, Body), _possibleConstructorReturn(this, _getPrototypeOf(Body).apply(this, arguments)); + } + return _inherits(Body, _Component), _createClass(Body, [ { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.body + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_SideBar__WEBPACK_IMPORTED_MODULE_1__.a, { + opened: this.props.opened, + changeContent: this.props.changeContent + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Main__WEBPACK_IMPORTED_MODULE_2__.a, { + active: this.props.active, + content: this.props.content, + shouldUpdate: this.props.shouldUpdate, + send: this.props.send + })); } - var _state3 = this.state, ticks = _state3.orderedTooltipTicks, axis = _state3.tooltipAxis, tooltipTicks = _state3.tooltipTicks, pos = this.calculateTooltipPos(rangeObj), activeIndex = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.b)(pos, ticks, tooltipTicks, axis); - if (activeIndex >= 0 && tooltipTicks) { - var activeLabel = tooltipTicks[activeIndex] && tooltipTicks[activeIndex].value, activePayload = this.getTooltipContent(activeIndex, activeLabel), activeCoordinate = this.getActiveCoordinate(ticks, activeIndex, rangeObj); - return _extends({}, e, { - activeTooltipIndex: activeIndex, - activeLabel: activeLabel, - activePayload: activePayload, - activeCoordinate: activeCoordinate - }); + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); } - return null; - } - }, { - key: "getTooltipContent", - value: function(activeIndex, activeLabel) { - var _state4 = this.state, graphicalItems = _state4.graphicalItems, tooltipAxis = _state4.tooltipAxis, displayedData = this.constructor.getDisplayedData(this.props, this.state); - return activeIndex < 0 || !graphicalItems || !graphicalItems.length || activeIndex >= displayedData.length ? null : graphicalItems.reduce(function(result, child) { - if (child.props.hide) return result; - var _child$props2 = child.props, dataKey = _child$props2.dataKey, name = _child$props2.name, unit = _child$props2.unit, formatter = _child$props2.formatter, data = _child$props2.data, payload = void 0; - return payload = tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory ? Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(data || displayedData, tooltipAxis.dataKey, activeLabel) : displayedData[activeIndex], - payload ? [].concat(_toConsumableArray(result), [ _extends({}, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(child), { - dataKey: dataKey, - unit: unit, - formatter: formatter, - name: name || dataKey, - color: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.r)(child), - value: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.w)(payload, dataKey), - payload: payload - }) ]) : result; - }, []); + } ]), Body; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = Body, reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx"), + reactHotLoader.register(Body, "Body", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Body.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/ChartRow.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/Grid/index.js"), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1__), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + container: { + flexWrap: "nowrap", + height: "100%", + maxWidth: "100%", + margin: 0 + }, + item: { + flex: 1, + padding: 0 + } + }, ChartRow = function(_Component) { + function ChartRow() { + return _classCallCheck(this, ChartRow), _possibleConstructorReturn(this, _getPrototypeOf(ChartRow).apply(this, arguments)); + } + return _inherits(ChartRow, _Component), _createClass(ChartRow, [ { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default.a, { + container: !0, + direction: "row", + style: styles.container, + justify: "space-between" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.Children.map(this.props.children, function(e) { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_1___default.a, { + item: !0, + xs: !0, + style: styles.item + }, e); + })); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), ChartRow; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = ChartRow, reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx"), + reactHotLoader.register(ChartRow, "ChartRow", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/ChartRow.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/CustomTooltip.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + __webpack_require__.d(__webpack_exports__, "d", function() { + return multiplier; + }), __webpack_require__.d(__webpack_exports__, "e", function() { + return percentPlotter; + }), __webpack_require__.d(__webpack_exports__, "b", function() { + return bytePlotter; + }), __webpack_require__.d(__webpack_exports__, "a", function() { + return bytePerSecPlotter; + }); + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/Typography/index.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1__), _common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var multiplier = function() { + var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 1; + return function(t) { + return t * e; + }; + }, percentPlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), " ", r.toFixed(2), " %"); + }; + }, bytePlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), " ", Object(_common__WEBPACK_IMPORTED_MODULE_2__.f)(r)); + }; + }, bytePerSecPlotter = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : multiplier(1); + return function(n) { + var r = t(n); + return "number" != typeof r ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_1___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_2__.g.light + }, e), Object(_common__WEBPACK_IMPORTED_MODULE_2__.f)(r), "/s"); + }; + }, CustomTooltip = function(_Component) { + function CustomTooltip() { + return _classCallCheck(this, CustomTooltip), _possibleConstructorReturn(this, _getPrototypeOf(CustomTooltip).apply(this, arguments)); + } + return _inherits(CustomTooltip, _Component), _createClass(CustomTooltip, [ { + key: "render", + value: function() { + var e = this.props, t = e.active, n = e.payload, r = e.tooltip; + return !t || "function" != typeof r || !Array.isArray(n) || n.length < 1 ? null : r(n[0].value); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), CustomTooltip; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = CustomTooltip, reactHotLoader, leaveModule; + __webpack_exports__.c = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(multiplier, "multiplier", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(percentPlotter, "percentPlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(bytePlotter, "bytePlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(bytePerSecPlotter, "bytePerSecPlotter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(CustomTooltip, "CustomTooltip", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/CustomTooltip.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Dashboard.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), react_hot_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/react-hot-loader/index.js"), react_hot_loader__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(react_hot_loader__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2__), Header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./components/Header.jsx"), Body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./components/Body.jsx"), Logs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./components/Logs.jsx"), Network__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./components/Network.jsx"), _common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _nonIterableSpread(); + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + function _iterableToArray(e) { + if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); + } + function _arrayWithoutHoles(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t]; + return n; + } + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var deepUpdate = function e(t, n, r) { + if (void 0 === n) return r; + if ("function" == typeof t) return t(n, r); + var o = {}; + return Object.keys(r).forEach(function(a) { + o[a] = e(t[a], n[a], r[a]); + }), o; + }, shouldUpdate = function e(t, n) { + var r = {}; + return Object.keys(n).forEach(function(o) { + r[o] = "function" == typeof t[o] || e(t[o], n[o]); + }), r; + }, replacer = function(e) { + return e; + }, appender = function(e) { + var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : replacer; + return function(n, r) { + return [].concat(_toConsumableArray(r), _toConsumableArray(n.map(function(e) { + return t(e); + }))).slice(-e); + }; + }, defaultContent = function() { + return { + general: { + version: null, + commit: null + }, + home: {}, + chain: {}, + txpool: {}, + network: { + peers: { + bundles: {} + }, + diff: [] + }, + system: { + activeMemory: [], + virtualMemory: [], + networkIngress: [], + networkEgress: [], + processCPU: [], + systemCPU: [], + diskRead: [], + diskWrite: [] + }, + logs: { + chunks: [], + endTop: !1, + endBottom: !0, + topChanged: Logs__WEBPACK_IMPORTED_MODULE_5__.a, + bottomChanged: Logs__WEBPACK_IMPORTED_MODULE_5__.a + } + }; + }, updaters = { + general: { + version: replacer, + commit: replacer + }, + home: null, + chain: null, + txpool: null, + network: Object(Network__WEBPACK_IMPORTED_MODULE_6__.b)(200), + system: { + activeMemory: appender(200), + virtualMemory: appender(200), + networkIngress: appender(200), + networkEgress: appender(200), + processCPU: appender(200), + systemCPU: appender(200), + diskRead: appender(200), + diskWrite: appender(200) + }, + logs: Object(Logs__WEBPACK_IMPORTED_MODULE_5__.c)(5) + }, styles = { + dashboard: { + display: "flex", + flexFlow: "column", + width: "100%", + height: "100%", + zIndex: 1, + overflow: "hidden" } - }, { - key: "getFormatItems", - value: function(props, currentState) { - var _this3 = this, graphicalItems = currentState.graphicalItems, stackGroups = currentState.stackGroups, offset = currentState.offset, updateId = currentState.updateId, dataStartIndex = currentState.dataStartIndex, dataEndIndex = currentState.dataEndIndex, barSize = props.barSize, layout = props.layout, barGap = props.barGap, barCategoryGap = props.barCategoryGap, globalMaxBarSize = props.maxBarSize, _getAxisNameByLayout = this.getAxisNameByLayout(layout), numericAxisName = _getAxisNameByLayout.numericAxisName, cateAxisName = _getAxisNameByLayout.cateAxisName, hasBar = this.constructor.hasBar(graphicalItems), sizeList = hasBar && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.i)({ - barSize: barSize, - stackGroups: stackGroups - }), formatedItems = []; - return graphicalItems.forEach(function(item, index) { - var displayedData = _this3.constructor.getDisplayedData(props, { - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }, item), _item$props = item.props, dataKey = _item$props.dataKey, childMaxBarSize = _item$props.maxBarSize, numericAxisId = item.props[numericAxisName + "Id"], cateAxisId = item.props[cateAxisName + "Id"], axisObj = axisComponents.reduce(function(result, entry) { - var _extends4, axisMap = currentState[entry.axisType + "Map"], id = item.props[entry.axisType + "Id"], axis = axisMap && axisMap[id]; - return _extends({}, result, (_extends4 = {}, _defineProperty(_extends4, entry.axisType, axis), - _defineProperty(_extends4, entry.axisType + "Ticks", Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis)), - _extends4)); - }, {}), cateAxis = axisObj[cateAxisName], cateTicks = axisObj[cateAxisName + "Ticks"], stackedData = stackGroups && stackGroups[numericAxisId] && stackGroups[numericAxisId].hasStack && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.t)(item, stackGroups[numericAxisId].stackGroups), bandSize = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.g)(cateAxis, cateTicks), maxBarSize = __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize, barPosition = hasBar && Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.h)({ - barGap: barGap, - barCategoryGap: barCategoryGap, - bandSize: bandSize, - sizeList: sizeList[cateAxisId], - maxBarSize: maxBarSize - }), componsedFn = item && item.type && item.type.getComposedData; - if (componsedFn) { - var _extends5; - formatedItems.push({ - props: _extends({}, componsedFn(_extends({}, axisObj, { - displayedData: displayedData, - props: props, - dataKey: dataKey, - item: item, - bandSize: bandSize, - barPosition: barPosition, - offset: offset, - stackedData: stackedData, - layout: layout, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - onItemMouseLeave: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this3.handleItemMouseLeave, null, item.props.onMouseLeave), - onItemMouseEnter: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this3.handleItemMouseEnter, null, item.props.onMouseEnter) - })), (_extends5 = { - key: item.key || "item-" + index - }, _defineProperty(_extends5, numericAxisName, axisObj[numericAxisName]), _defineProperty(_extends5, cateAxisName, axisObj[cateAxisName]), - _defineProperty(_extends5, "animationId", updateId), _extends5)), - childIndex: Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.o)(item, props.children), - item: item + }, themeStyles = function(e) { + return { + dashboard: { + background: e.palette.background.default + } + }; + }, Dashboard = function(_Component) { + function Dashboard(e) { + var t; + return _classCallCheck(this, Dashboard), _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, _getPrototypeOf(Dashboard).call(this, e))), "reconnect", function() { + var e = window.location.host, n = new WebSocket("".concat("https:" === window.location.protocol ? "wss://" : "ws://").concat(e, "/api")); + n.onopen = function() { + t.setState({ + content: defaultContent(), + shouldUpdate: {}, + server: n }); - } - }), formatedItems; - } - }, { - key: "getCursorRectangle", - value: function() { - var layout = this.props.layout, _state5 = this.state, activeCoordinate = _state5.activeCoordinate, offset = _state5.offset, tooltipAxisBandSize = _state5.tooltipAxisBandSize, halfSize = tooltipAxisBandSize / 2; - return { - stroke: "none", - fill: "#ccc", - x: "horizontal" === layout ? activeCoordinate.x - halfSize : offset.left + .5, - y: "horizontal" === layout ? offset.top + .5 : activeCoordinate.y - halfSize, - width: "horizontal" === layout ? tooltipAxisBandSize : offset.width - 1, - height: "horizontal" === layout ? offset.height - 1 : tooltipAxisBandSize - }; - } - }, { - key: "getCursorPoints", - value: function() { - var layout = this.props.layout, _state6 = this.state, activeCoordinate = _state6.activeCoordinate, offset = _state6.offset, x1 = void 0, y1 = void 0, x2 = void 0, y2 = void 0; - if ("horizontal" === layout) x1 = activeCoordinate.x, x2 = x1, y1 = offset.top, - y2 = offset.top + offset.height; else if ("vertical" === layout) y1 = activeCoordinate.y, - y2 = y1, x1 = offset.left, x2 = offset.left + offset.width; else if (!__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activeCoordinate.cx) || !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activeCoordinate.cy)) { - if ("centric" !== layout) { - var _cx = activeCoordinate.cx, _cy = activeCoordinate.cy, radius = activeCoordinate.radius, startAngle = activeCoordinate.startAngle, endAngle = activeCoordinate.endAngle, startPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(_cx, _cy, radius, startAngle), endPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(_cx, _cy, radius, endAngle); + }, n.onmessage = function(e) { + var n = JSON.parse(e.data); + n ? t.update(n) : console.error("Incoming message is ".concat(n)); + }, n.onclose = function() { + t.setState({ + server: null + }), setTimeout(t.reconnect, 3e3); + }; + }), _defineProperty(_assertThisInitialized(t), "send", function(e) { + null != t.state.server && t.state.server.send(e); + }), _defineProperty(_assertThisInitialized(t), "update", function(e) { + t.setState(function(t) { return { - points: [ startPoint, endPoint ], - cx: _cx, - cy: _cy, - radius: radius, - startAngle: startAngle, - endAngle: endAngle + content: deepUpdate(updaters, e, t.content), + shouldUpdate: shouldUpdate(updaters, e) }; - } - var cx = activeCoordinate.cx, cy = activeCoordinate.cy, innerRadius = activeCoordinate.innerRadius, outerRadius = activeCoordinate.outerRadius, angle = activeCoordinate.angle, innerPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(cx, cy, innerRadius, angle), outerPoint = Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.e)(cx, cy, outerRadius, angle); - x1 = innerPoint.x, y1 = innerPoint.y, x2 = outerPoint.x, y2 = outerPoint.y; + }); + }), _defineProperty(_assertThisInitialized(t), "changeContent", function(e) { + t.setState(function(t) { + return t.active !== e ? { + active: e + } : {}; + }); + }), _defineProperty(_assertThisInitialized(t), "switchSideBar", function() { + t.setState(function(e) { + return { + sideBar: !e.sideBar + }; + }); + }), t.state = { + active: _common__WEBPACK_IMPORTED_MODULE_7__.b.get("home").id, + sideBar: !0, + content: defaultContent(), + shouldUpdate: {}, + server: null + }, t; + } + return _inherits(Dashboard, _Component), _createClass(Dashboard, [ { + key: "componentDidMount", + value: function() { + this.reconnect(); } - return [ { - x: x1, - y: y1 - }, { - x: x2, - y: y2 - } ]; + }, { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: this.props.classes.dashboard, + style: styles.dashboard + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Header__WEBPACK_IMPORTED_MODULE_3__.a, { + switchSideBar: this.switchSideBar + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Body__WEBPACK_IMPORTED_MODULE_4__.a, { + opened: this.state.sideBar, + changeContent: this.changeContent, + active: this.state.active, + content: this.state.content, + shouldUpdate: this.state.shouldUpdate, + send: this.send + })); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Dashboard; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = Object(react_hot_loader__WEBPACK_IMPORTED_MODULE_1__.hot)(module)(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_2___default()(themeStyles)(Dashboard)), reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(deepUpdate, "deepUpdate", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(shouldUpdate, "shouldUpdate", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(replacer, "replacer", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(appender, "appender", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(defaultContent, "defaultContent", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(updaters, "updaters", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(themeStyles, "themeStyles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(Dashboard, "Dashboard", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Dashboard.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Footer.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/Typography/index.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_2__), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./node_modules/@material-ui/core/Grid/index.js"), _material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3___default = __webpack_require__.n(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3__), recharts_es6_component_ResponsiveContainer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./node_modules/recharts/es6/component/ResponsiveContainer.js"), recharts_es6_chart_AreaChart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./node_modules/recharts/es6/chart/AreaChart.js"), recharts_es6_cartesian_Area__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./node_modules/recharts/es6/cartesian/Area.js"), recharts_es6_cartesian_ReferenceLine__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./node_modules/recharts/es6/cartesian/ReferenceLine.js"), recharts_es6_component_Label__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./node_modules/recharts/es6/component/Label.js"), recharts_es6_component_Tooltip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./node_modules/recharts/es6/component/Tooltip.js"), ChartRow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./components/ChartRow.jsx"), CustomTooltip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./components/CustomTooltip.jsx"), _common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _extends() { + return (_extends = Object.assign || function(e) { + for (var t = 1; t < arguments.length; t++) { + var n = arguments[t]; + for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); + } + return e; + }).apply(this, arguments); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } - }, { - key: "getAxisNameByLayout", - value: function(layout) { - return "horizontal" === layout ? { - numericAxisName: "yAxis", - cateAxisName: "xAxis" - } : "vertical" === layout ? { - numericAxisName: "xAxis", - cateAxisName: "yAxis" - } : "centric" === layout ? { - numericAxisName: "radiusAxis", - cateAxisName: "angleAxis" - } : { - numericAxisName: "angleAxis", - cateAxisName: "radiusAxis" - }; + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var FOOTER_SYNC_ID = "footerSyncId", CPU = "cpu", MEMORY = "memory", DISK = "disk", TRAFFIC = "traffic", TOP = "Top", BOTTOM = "Bottom", cpuLabelTop = "Process load", cpuLabelBottom = "System load", memoryLabelTop = "Active memory", memoryLabelBottom = "Virtual memory", diskLabelTop = "Disk read", diskLabelBottom = "Disk write", trafficLabelTop = "Download", trafficLabelBottom = "Upload", styles = { + footer: { + maxWidth: "100%", + flexWrap: "nowrap", + margin: 0 + }, + chartRowWrapper: { + height: "100%", + padding: 0 + }, + doubleChartWrapper: { + height: "100%", + width: "99%" + }, + link: { + color: "inherit", + textDecoration: "none" } - }, { - key: "calculateTooltipPos", - value: function(rangeObj) { - var layout = this.props.layout; - return "horizontal" === layout ? rangeObj.x : "vertical" === layout ? rangeObj.y : "centric" === layout ? rangeObj.angle : rangeObj.radius; + }, themeStyles = function(e) { + return { + footer: { + backgroundColor: e.palette.grey[900], + color: e.palette.getContrastText(e.palette.grey[900]), + zIndex: e.zIndex.appBar, + height: 10 * e.spacing.unit + } + }; + }, Footer = function(_Component) { + function Footer() { + var e, t; + _classCallCheck(this, Footer); + for (var n = arguments.length, r = new Array(n), o = 0; o < n; o++) r[o] = arguments[o]; + return _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, (e = _getPrototypeOf(Footer)).call.apply(e, [ this ].concat(r)))), "halfHeightChart", function(e, t, n, r, o) { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_component_ResponsiveContainer__WEBPACK_IMPORTED_MODULE_4__.a, { + width: "100%", + height: "50%" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_chart_AreaChart__WEBPACK_IMPORTED_MODULE_5__.a, e, !t || react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_component_Tooltip__WEBPACK_IMPORTED_MODULE_9__.a, { + cursor: !1, + content: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.c, { + tooltip: t + }) + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_cartesian_Area__WEBPACK_IMPORTED_MODULE_6__.a, _extends({ + isAnimationActive: !1, + strokeWidth: _common__WEBPACK_IMPORTED_MODULE_12__.c, + type: "monotone" + }, n)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_cartesian_ReferenceLine__WEBPACK_IMPORTED_MODULE_7__.a, { + x: 0, + strokeWidth: 0 + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts_es6_component_Label__WEBPACK_IMPORTED_MODULE_8__.a, { + fill: n.fill, + value: r, + position: o + })))); + }), _defineProperty(_assertThisInitialized(t), "doubleChart", function(e, n, r, o) { + if (!Array.isArray(r.data) || !Array.isArray(o.data)) return null; + var a = r.default || 0, i = o.default || 0, s = "".concat(n).concat(TOP), l = "".concat(n).concat(BOTTOM); + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.doubleChartWrapper + }, t.halfHeightChart({ + syncId: e, + data: r.data.map(function(e) { + var t = e.value; + return _defineProperty({}, s, t || a); + }), + margin: { + top: 5, + right: 5, + bottom: 0, + left: 5 + } + }, r.tooltip, { + dataKey: s, + stroke: "#8884d8", + fill: "#8884d8" + }, r.label, "insideBottomLeft"), t.halfHeightChart({ + syncId: e, + data: o.data.map(function(e) { + var t = e.value; + return _defineProperty({}, l, -t || -i); + }), + margin: { + top: 0, + right: 5, + bottom: 5, + left: 5 + } + }, o.tooltip, { + dataKey: l, + stroke: "#82ca9d", + fill: "#82ca9d" + }, o.label, "insideTopLeft")); + }), t; + } + return _inherits(Footer, _Component), _createClass(Footer, [ { + key: "shouldComponentUpdate", + value: function(e, t, n) { + return void 0 !== e.shouldUpdate.general || void 0 !== e.shouldUpdate.system; + } + }, { + key: "render", + value: function() { + var e = this.props, t = e.general, n = e.system; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3___default.a, { + container: !0, + className: this.props.classes.footer, + direction: "row", + alignItems: "center", + style: styles.footer + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3___default.a, { + item: !0, + xs: !0, + style: styles.chartRowWrapper + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ChartRow__WEBPACK_IMPORTED_MODULE_10__.a, null, this.doubleChart(FOOTER_SYNC_ID, CPU, { + data: n.processCPU, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.e)(cpuLabelTop), + label: cpuLabelTop + }, { + data: n.systemCPU, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.e)(cpuLabelBottom, Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.d)(-1)), + label: cpuLabelBottom + }), this.doubleChart(FOOTER_SYNC_ID, MEMORY, { + data: n.activeMemory, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.b)(memoryLabelTop), + label: memoryLabelTop + }, { + data: n.virtualMemory, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.b)(memoryLabelBottom, Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.d)(-1)), + label: memoryLabelBottom + }), this.doubleChart(FOOTER_SYNC_ID, DISK, { + data: n.diskRead, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.a)(diskLabelTop), + label: diskLabelTop + }, { + data: n.diskWrite, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.a)(diskLabelBottom, Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.d)(-1)), + label: diskLabelBottom + }), this.doubleChart(FOOTER_SYNC_ID, TRAFFIC, { + data: n.networkIngress, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.a)(trafficLabelTop), + label: trafficLabelTop + }, { + data: n.networkEgress, + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.a)(trafficLabelBottom, Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_11__.d)(-1)), + label: trafficLabelBottom + }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid__WEBPACK_IMPORTED_MODULE_3___default.a, { + item: !0 + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_2___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_12__.g.light + }, "Geth"), " ", t.version), t.commit && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_2___default.a, { + type: "caption", + color: "inherit" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", { + style: _common__WEBPACK_IMPORTED_MODULE_12__.g.light + }, "Commit "), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", { + href: "https://github.com/ethereum/go-ethereum/commit/".concat(t.commit), + target: "_blank", + rel: "noopener noreferrer", + style: styles.link + }, t.commit.substring(0, 8))))); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Footer; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default()(themeStyles)(Footer), reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(FOOTER_SYNC_ID, "FOOTER_SYNC_ID", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(CPU, "CPU", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(MEMORY, "MEMORY", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(DISK, "DISK", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(TRAFFIC, "TRAFFIC", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(TOP, "TOP", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(BOTTOM, "BOTTOM", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(cpuLabelTop, "cpuLabelTop", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(cpuLabelBottom, "cpuLabelBottom", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(memoryLabelTop, "memoryLabelTop", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(memoryLabelBottom, "memoryLabelBottom", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(diskLabelTop, "diskLabelTop", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(diskLabelBottom, "diskLabelBottom", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(trafficLabelTop, "trafficLabelTop", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(trafficLabelBottom, "trafficLabelBottom", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(themeStyles, "themeStyles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(Footer, "Footer", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Footer.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Header.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_AppBar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/AppBar/index.js"), _material_ui_core_AppBar__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_AppBar__WEBPACK_IMPORTED_MODULE_2__), _material_ui_core_Toolbar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./node_modules/@material-ui/core/Toolbar/index.js"), _material_ui_core_Toolbar__WEBPACK_IMPORTED_MODULE_3___default = __webpack_require__.n(_material_ui_core_Toolbar__WEBPACK_IMPORTED_MODULE_3__), _material_ui_core_IconButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./node_modules/@material-ui/core/IconButton/index.js"), _material_ui_core_IconButton__WEBPACK_IMPORTED_MODULE_4___default = __webpack_require__.n(_material_ui_core_IconButton__WEBPACK_IMPORTED_MODULE_4__), _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./node_modules/@fortawesome/react-fontawesome/index.es.js"), _fortawesome_free_solid_svg_icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./node_modules/@material-ui/core/Typography/index.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7___default = __webpack_require__.n(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7__), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + header: { + height: "8%" + }, + toolbar: { + height: "100%" } - }, { - key: "inRange", - value: function(x, y) { - var layout = this.props.layout; - if ("horizontal" === layout || "vertical" === layout) { - var offset = this.state.offset; - return x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height ? { - x: x, - y: y - } : null; + }, themeStyles = function(e) { + return { + header: { + backgroundColor: e.palette.grey[900], + color: e.palette.getContrastText(e.palette.grey[900]), + zIndex: e.zIndex.appBar + }, + toolbar: { + paddingLeft: e.spacing.unit, + paddingRight: e.spacing.unit + }, + title: { + paddingLeft: e.spacing.unit, + fontSize: 3 * e.spacing.unit } - var _state7 = this.state, angleAxisMap = _state7.angleAxisMap, radiusAxisMap = _state7.radiusAxisMap; - if (angleAxisMap && radiusAxisMap) { - var angleAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(angleAxisMap); - return Object(__WEBPACK_IMPORTED_MODULE_23__util_PolarUtils__.d)({ - x: x, - y: y - }, angleAxis); + }; + }, Header = function(_Component) { + function Header() { + return _classCallCheck(this, Header), _possibleConstructorReturn(this, _getPrototypeOf(Header).apply(this, arguments)); + } + return _inherits(Header, _Component), _createClass(Header, [ { + key: "render", + value: function() { + var e = this.props.classes; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_AppBar__WEBPACK_IMPORTED_MODULE_2___default.a, { + position: "static", + className: e.header, + style: styles.header + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Toolbar__WEBPACK_IMPORTED_MODULE_3___default.a, { + className: e.toolbar, + style: styles.toolbar + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_IconButton__WEBPACK_IMPORTED_MODULE_4___default.a, { + onClick: this.props.switchSideBar + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_5__.a, { + icon: _fortawesome_free_solid_svg_icons__WEBPACK_IMPORTED_MODULE_6__.a + })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7___default.a, { + type: "title", + color: "inherit", + noWrap: !0, + className: e.title + }, "Go Ethereum Dashboard"))); } - return null; + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Header; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default()(themeStyles)(Header), reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx"), + reactHotLoader.register(themeStyles, "themeStyles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx"), + reactHotLoader.register(Header, "Header", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Header.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Logs.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + __webpack_require__.d(__webpack_exports__, "a", function() { + return SAME; + }), __webpack_require__.d(__webpack_exports__, "c", function() { + return inserter; + }); + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_List__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/List/index.js"), _material_ui_core_List__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_List__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/ListItem/index.js"), _material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_2__), escape_html__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./node_modules/escape-html/index.js"), escape_html__WEBPACK_IMPORTED_MODULE_3___default = __webpack_require__.n(escape_html__WEBPACK_IMPORTED_MODULE_3__), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _nonIterableSpread(); + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + function _iterableToArray(e) { + if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); + } + function _arrayWithoutHoles(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t]; + return n; + } + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var requestBand = .05, fieldPadding = new Map(), createChunk = function(e) { + var t = ""; + return e.forEach(function(e) { + var n = e.t, r = e.ctx, o = e.lvl, a = e.msg, i = "#ce3c23"; + switch (o) { + case "trace": + case "trce": + o = "TRACE", i = "#3465a4"; + break; + + case "debug": + case "dbug": + o = "DEBUG", i = "#3d989b"; + break; + + case "info": + o = "INFO ", i = "#4c8f0f"; + break; + + case "warn": + o = "WARN ", i = "#b79a22"; + break; + + case "error": + case "eror": + o = "ERROR", i = "#754b70"; + break; + + case "crit": + o = "CRIT ", i = "#ce3c23"; + break; + + default: + o = ""; + } + var s = new Date(n); + if ("" !== o && s instanceof Date && !isNaN(s) && "string" == typeof a && Array.isArray(r)) { + r.length > 0 && (a += " ".repeat(Math.max(40 - a.length, 0))); + var l = "0".concat(s.getMonth() + 1).slice(-2), u = "0".concat(s.getDate()).slice(-2), c = "0".concat(s.getHours()).slice(-2), d = "0".concat(s.getMinutes()).slice(-2), f = "0".concat(s.getSeconds()).slice(-2); + t += '').concat(o, "[").concat(l, "-").concat(u, "|").concat(c, ":").concat(d, ":").concat(f, "] ").concat(a); + for (var p = 0; p < r.length; p += 2) { + var h = escape_html__WEBPACK_IMPORTED_MODULE_3___default()(r[p]), _ = escape_html__WEBPACK_IMPORTED_MODULE_3___default()(r[p + 1]), m = fieldPadding.get(h); + ("number" != typeof m || m < _.length) && (m = _.length, fieldPadding.set(h, m)); + var y = ""; + p < r.length - 2 && (y = " ".repeat(m - _.length)), t += ' ').concat(h, "=").concat(_).concat(y); + } + t += "
"; + } else t += 'Invalid log record
'; + }), t; + }, ADDED = 1, SAME = 0, REMOVED = -1, inserter = function(e) { + return function(t, n) { + if (n.topChanged = SAME, n.bottomChanged = SAME, !Array.isArray(t.chunk) || t.chunk.length < 1) return n; + Array.isArray(n.chunks) || (n.chunks = []); + var r = createChunk(t.chunk); + if (!t.source) return n.endBottom ? n.chunks.length < 1 ? [ { + content: r, + name: "00000000000000.log" + } ] : (n.chunks[n.chunks.length - 1].content += r, n.bottomChanged = ADDED, n) : n; + var o = { + content: r, + name: t.source.name + }; + return n.chunks.length > 0 && t.source.name < n.chunks[0].name ? (t.source.last && (n.endTop = !0), + n.chunks.length >= e && (n.endBottom = !1, n.chunks.splice(e - 1, n.chunks.length - e + 1), + n.bottomChanged = REMOVED), n.chunks = [ o ].concat(_toConsumableArray(n.chunks)), + n.topChanged = ADDED, n) : (t.source.last && (n.endBottom = !0), n.chunks.length >= e && (n.endTop = !1, + n.chunks.splice(0, n.chunks.length - e + 1), n.topChanged = REMOVED), n.chunks = [].concat(_toConsumableArray(n.chunks), [ o ]), + n.bottomChanged = ADDED, n); + }; + }, styles = { + logListItem: { + padding: 0, + lineHeight: 1.231 + }, + logChunk: { + color: "white", + fontFamily: "monospace", + whiteSpace: "nowrap", + width: 0 + }, + waitMsg: { + textAlign: "center", + color: "white", + fontFamily: "monospace" + } + }, Logs = function(_Component) { + function Logs(e) { + var t; + return _classCallCheck(this, Logs), _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, _getPrototypeOf(Logs).call(this, e))), "onScroll", function() { + if (t.state.requestAllowed && void 0 !== t.content) { + var e = t.props.content.logs; + e.chunks.length < 1 || (t.atTop() && !e.endTop ? t.sendRequest(e.chunks[0].name, !0) : t.atBottom() && !e.endBottom && t.sendRequest(e.chunks[e.chunks.length - 1].name, !1)); + } + }), _defineProperty(_assertThisInitialized(t), "sendRequest", function(e, n) { + t.setState({ + requestAllowed: !1 + }), t.props.send(JSON.stringify({ + Logs: { + Name: e, + Past: n + } + })); + }), _defineProperty(_assertThisInitialized(t), "atTop", function() { + return t.props.container.scrollTop <= t.props.container.scrollHeight * requestBand; + }), _defineProperty(_assertThisInitialized(t), "atBottom", function() { + var e = t.props.container; + return e.scrollHeight - e.scrollTop <= e.clientHeight + e.scrollHeight * requestBand; + }), _defineProperty(_assertThisInitialized(t), "beforeUpdate", function() { + var e = 0, n = t.content.children[1]; + return n && n.children[0] && (e = n.children[0].clientHeight), { + scrollTop: t.props.container.scrollTop, + firstHeight: e + }; + }), _defineProperty(_assertThisInitialized(t), "didUpdate", function(e, n, r) { + if (void 0 !== t.props.shouldUpdate.logs && void 0 !== t.content && null !== r) { + var o = t.props.content.logs, a = t.props.container; + if (!(void 0 === a || o.chunks.length < 1)) if (t.content.clientHeight < a.clientHeight) o.endTop || t.sendRequest(o.chunks[0].name, !0); else { + var i = r.scrollTop; + o.topChanged === ADDED ? i += t.content.children[1].children[0].clientHeight : o.bottomChanged === ADDED && (o.topChanged === REMOVED ? i -= r.firstHeight : t.atBottom() && o.endBottom && (i = a.scrollHeight - a.clientHeight)), + a.scrollTop = i, t.setState({ + requestAllowed: !0 + }); + } + } + }), t.content = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef(), t.state = { + requestAllowed: !0 + }, t; + } + return _inherits(Logs, _Component), _createClass(Logs, [ { + key: "componentDidMount", + value: function() { + var e = this.props.container; + if (void 0 !== e) { + e.scrollTop = e.scrollHeight - e.clientHeight; + var t = this.props.content.logs; + void 0 === this.content || t.chunks.length < 1 || this.content.clientHeight < e.clientHeight && !t.endTop && this.sendRequest(t.chunks[0].name, !0); + } + } + }, { + key: "render", + value: function() { + var e = this; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + ref: function(t) { + e.content = t; + } + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.waitMsg + }, this.props.content.logs.endTop ? "No more logs." : "Waiting for server..."), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_List__WEBPACK_IMPORTED_MODULE_1___default.a, null, this.props.content.logs.chunks.map(function(e, t) { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_2___default.a, { + style: styles.logListItem, + key: t + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.logChunk, + dangerouslySetInnerHTML: { + __html: e.content + } + })); + })), this.props.content.logs.endBottom || react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.waitMsg + }, "Waiting for server...")); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Logs; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = Logs, reactHotLoader, leaveModule; + __webpack_exports__.b = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(requestBand, "requestBand", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(fieldPadding, "fieldPadding", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(createChunk, "createChunk", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(ADDED, "ADDED", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(SAME, "SAME", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(REMOVED, "REMOVED", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(inserter, "inserter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(Logs, "Logs", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Logs.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Main.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__), Network__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./components/Network.jsx"), Logs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./components/Logs.jsx"), Footer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./components/Footer.jsx"), _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + wrapper: { + display: "flex", + flexDirection: "column", + width: "100%" + }, + content: { + flex: 1, + overflow: "auto" } - }, { - key: "parseEventsOfWrapper", - value: function() { - var children = this.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a), tooltipEvents = tooltipItem && "axis" === eventType ? { - onMouseEnter: this.handleMouseEnter, - onMouseMove: this.handleMouseMove, - onMouseLeave: this.handleMouseLeave, - onTouchMove: this.handleTouchMove - } : {}, outerEvents = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.e)(this.props, this.handleOuterEvent); - return _extends({}, outerEvents, tooltipEvents); + }, themeStyles = function(e) { + return { + content: { + backgroundColor: e.palette.background.default, + padding: 3 * e.spacing.unit + } + }; + }, Main = function(_Component) { + function Main(e) { + var t; + return _classCallCheck(this, Main), _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, _getPrototypeOf(Main).call(this, e))), "onScroll", function() { + t.content && "function" == typeof t.content.onScroll && t.content.onScroll(); + }), t.container = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef(), t.content = react__WEBPACK_IMPORTED_MODULE_0___default.a.createRef(), + t; + } + return _inherits(Main, _Component), _createClass(Main, [ { + key: "componentDidUpdate", + value: function(e, t, n) { + this.content && "function" == typeof this.content.didUpdate && this.content.didUpdate(e, t, n); + } + }, { + key: "getSnapshotBeforeUpdate", + value: function(e, t) { + return this.content && "function" == typeof this.content.beforeUpdate ? this.content.beforeUpdate() : null; + } + }, { + key: "render", + value: function() { + var e = this, t = this.props, n = t.classes, r = t.active, o = t.content, a = t.shouldUpdate, i = null; + switch (r) { + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("home").id: + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("chain").id: + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("txpool").id: + i = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, "Work in progress."); + break; + + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("network").id: + i = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Network__WEBPACK_IMPORTED_MODULE_2__.a, { + content: this.props.content.network, + container: this.container + }); + break; + + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("system").id: + i = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, "Work in progress."); + break; + + case _common__WEBPACK_IMPORTED_MODULE_5__.b.get("logs").id: + i = react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Logs__WEBPACK_IMPORTED_MODULE_3__.b, { + ref: function(t) { + e.content = t; + }, + container: this.container, + send: this.props.send, + content: this.props.content, + shouldUpdate: a + }); + } + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + style: styles.wrapper + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: n.content, + style: styles.content, + ref: function(t) { + e.container = t; + }, + onScroll: this.onScroll + }, i), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Footer__WEBPACK_IMPORTED_MODULE_4__.a, { + general: o.general, + system: o.system, + shouldUpdate: a + })); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Main; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default()(themeStyles)(Main), reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx"), + reactHotLoader.register(themeStyles, "themeStyles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx"), + reactHotLoader.register(Main, "Main", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Main.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/Network.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + __webpack_require__.d(__webpack_exports__, "b", function() { + return inserter; + }); + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_Table__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/Table/index.js"), _material_ui_core_Table__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_Table__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_TableHead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/TableHead/index.js"), _material_ui_core_TableHead__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_TableHead__WEBPACK_IMPORTED_MODULE_2__), _material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./node_modules/@material-ui/core/TableBody/index.js"), _material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3___default = __webpack_require__.n(_material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3__), _material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./node_modules/@material-ui/core/TableRow/index.js"), _material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4___default = __webpack_require__.n(_material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4__), _material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./node_modules/@material-ui/core/TableCell/index.js"), _material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default = __webpack_require__.n(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5__), _material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./node_modules/@material-ui/core/Grid/Grid.js"), _material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6___default = __webpack_require__.n(_material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6__), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./node_modules/@material-ui/core/Typography/index.js"), _material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7___default = __webpack_require__.n(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7__), recharts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./node_modules/recharts/es6/index.js"), _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./node_modules/@fortawesome/react-fontawesome/index.es.js"), _fortawesome_free_solid_svg_icons__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("./node_modules/@fortawesome/free-solid-svg-icons/index.es.js"), _fortawesome_free_regular_svg_icons__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./node_modules/@fortawesome/free-regular-svg-icons/index.es.js"), color_convert__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("./node_modules/color-convert/index.js"), color_convert__WEBPACK_IMPORTED_MODULE_12___default = __webpack_require__.n(color_convert__WEBPACK_IMPORTED_MODULE_12__), CustomTooltip__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("./components/CustomTooltip.jsx"), _common__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _slicedToArray(e, t) { + return _arrayWithHoles(e) || _iterableToArrayLimit(e, t) || _nonIterableRest(); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + function _iterableToArrayLimit(e, t) { + var n = [], r = !0, o = !1, a = void 0; + try { + for (var i, s = e[Symbol.iterator](); !(r = (i = s.next()).done) && (n.push(i.value), + !t || n.length !== t); r = !0) ; + } catch (e) { + o = !0, a = e; + } finally { + try { + r || null == s.return || s.return(); + } finally { + if (o) throw a; + } } - }, { - key: "updateStateOfAxisMapsOffsetAndStackGroups", - value: function(_ref5) { - var _this4 = this, props = _ref5.props, dataStartIndex = _ref5.dataStartIndex, dataEndIndex = _ref5.dataEndIndex, updateId = _ref5.updateId; - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.q)({ - props: props - })) return null; - var children = props.children, layout = props.layout, stackOffset = props.stackOffset, data = props.data, reverseStackOrder = props.reverseStackOrder, _getAxisNameByLayout2 = this.getAxisNameByLayout(layout), numericAxisName = _getAxisNameByLayout2.numericAxisName, cateAxisName = _getAxisNameByLayout2.cateAxisName, graphicalItems = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.h)(children, GraphicalChild), stackGroups = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.s)(data, graphicalItems, numericAxisName + "Id", cateAxisName + "Id", stackOffset, reverseStackOrder), axisObj = axisComponents.reduce(function(result, entry) { - var name = entry.axisType + "Map"; - return _extends({}, result, _defineProperty({}, name, _this4.getAxisMap(props, _extends({}, entry, { - graphicalItems: graphicalItems, - stackGroups: entry.axisType === numericAxisName && stackGroups, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - })))); - }, {}), offset = this.calculateOffset(_extends({}, axisObj, { - props: props, - graphicalItems: graphicalItems - })); - Object.keys(axisObj).forEach(function(key) { - axisObj[key] = formatAxisMap(props, axisObj[key], offset, key.replace("Map", ""), chartName); + return n; + } + function _arrayWithHoles(e) { + if (Array.isArray(e)) return e; + } + function _objectSpread(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter(function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable; + }))), r.forEach(function(t) { + _defineProperty(e, t, n[t]); }); - var cateAxisMap = axisObj[cateAxisName + "Map"], ticksObj = this.tooltipTicksGenerator(cateAxisMap), formatedGraphicalItems = this.getFormatItems(props, _extends({}, axisObj, { - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId, - graphicalItems: graphicalItems, - stackGroups: stackGroups, - offset: offset - })); - return _extends({ - formatedGraphicalItems: formatedGraphicalItems, - graphicalItems: graphicalItems, - offset: offset, - stackGroups: stackGroups - }, ticksObj, axisObj); } - }, { - key: "addListener", - value: function() { - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.on(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, this.handleReceiveSyncEvent), - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners(__WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners + 1); + return e; + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } - }, { - key: "removeListener", - value: function() { - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.removeListener(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, this.handleReceiveSyncEvent), - __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners && __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.setMaxListeners(__WEBPACK_IMPORTED_MODULE_25__util_Events__.b._maxListeners - 1); + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + function _toConsumableArray(e) { + return _arrayWithoutHoles(e) || _iterableToArray(e) || _nonIterableSpread(); + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + function _iterableToArray(e) { + if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); + } + function _arrayWithoutHoles(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t]; + return n; } - }, { - key: "calculateOffset", - value: function(_ref6) { - var props = _ref6.props, graphicalItems = _ref6.graphicalItems, _ref6$xAxisMap = _ref6.xAxisMap, xAxisMap = void 0 === _ref6$xAxisMap ? {} : _ref6$xAxisMap, _ref6$yAxisMap = _ref6.yAxisMap, yAxisMap = void 0 === _ref6$yAxisMap ? {} : _ref6$yAxisMap, width = props.width, height = props.height, children = props.children, margin = props.margin || {}, brushItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a), legendItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_11__component_Legend__.a), offsetH = Object.keys(yAxisMap).reduce(function(result, id) { - var entry = yAxisMap[id], orientation = entry.orientation; - return entry.mirror || entry.hide ? result : _extends({}, result, _defineProperty({}, orientation, result[orientation] + entry.width)); - }, { - left: margin.left || 0, - right: margin.right || 0 - }), offsetV = Object.keys(xAxisMap).reduce(function(result, id) { - var entry = xAxisMap[id], orientation = entry.orientation; - return entry.mirror || entry.hide ? result : _extends({}, result, _defineProperty({}, orientation, result[orientation] + entry.height)); - }, { - top: margin.top || 0, - bottom: margin.bottom || 0 - }), offset = _extends({}, offsetV, offsetH), brushBottom = offset.bottom; - if (brushItem && (offset.bottom += brushItem.props.height || __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a.defaultProps.height), - legendItem && this.legendInstance) { - var legendBox = this.legendInstance.getBBox(); - offset = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.a)(offset, graphicalItems, props, legendBox); - } - return _extends({ - brushBottom: brushBottom - }, offset, { - width: width - offset.left - offset.right, - height: height - offset.top - offset.bottom + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var trafficChartHeight = 18, trafficChartWidth = 400, setMaxIngress = function(e, t) { + e.maxIngress = t, e.ingressGradient = [], e.ingressGradient.push({ + offset: _common__WEBPACK_IMPORTED_MODULE_14__.d[0], + color: _common__WEBPACK_IMPORTED_MODULE_14__.e[0] + }); + for (var n = 1; n < _common__WEBPACK_IMPORTED_MODULE_14__.e.length && t > _common__WEBPACK_IMPORTED_MODULE_14__.d[n]; n++) e.ingressGradient.push({ + offset: Math.floor(100 * _common__WEBPACK_IMPORTED_MODULE_14__.d[n] / t), + color: _common__WEBPACK_IMPORTED_MODULE_14__.e[n] + }); + if (--n < _common__WEBPACK_IMPORTED_MODULE_14__.e.length - 1) { + var r = color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.hex.lab(_common__WEBPACK_IMPORTED_MODULE_14__.e[n]), o = 100 * (t - _common__WEBPACK_IMPORTED_MODULE_14__.d[n]) / (_common__WEBPACK_IMPORTED_MODULE_14__.d[n + 1] - _common__WEBPACK_IMPORTED_MODULE_14__.d[n]); + color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.hex.lab(_common__WEBPACK_IMPORTED_MODULE_14__.e[n + 1]).forEach(function(e, t) { + r[t] = (r[t] * o + e * (100 - o)) / 100; + }), e.ingressGradient.push({ + offset: 100, + color: "#".concat(color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.lab.hex(r)) }); } - }, { - key: "triggerSyncEvent", - value: function(data) { - var syncId = this.props.syncId; - __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(syncId) || __WEBPACK_IMPORTED_MODULE_25__util_Events__.b.emit(__WEBPACK_IMPORTED_MODULE_25__util_Events__.a, syncId, this.uniqueChartId, data); + }, setMaxEgress = function(e, t) { + e.maxEgress = t, e.egressGradient = [], e.egressGradient.push({ + offset: 100 - _common__WEBPACK_IMPORTED_MODULE_14__.d[0], + color: _common__WEBPACK_IMPORTED_MODULE_14__.e[0] + }); + for (var n = 1; n < _common__WEBPACK_IMPORTED_MODULE_14__.e.length && t > _common__WEBPACK_IMPORTED_MODULE_14__.d[n]; n++) e.egressGradient.unshift({ + offset: 100 - Math.floor(100 * _common__WEBPACK_IMPORTED_MODULE_14__.d[n] / t), + color: _common__WEBPACK_IMPORTED_MODULE_14__.e[n] + }); + if (--n < _common__WEBPACK_IMPORTED_MODULE_14__.e.length - 1) { + var r = color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.hex.lab(_common__WEBPACK_IMPORTED_MODULE_14__.e[n]), o = 100 * (t - _common__WEBPACK_IMPORTED_MODULE_14__.d[n]) / (_common__WEBPACK_IMPORTED_MODULE_14__.d[n + 1] - _common__WEBPACK_IMPORTED_MODULE_14__.d[n]); + color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.hex.lab(_common__WEBPACK_IMPORTED_MODULE_14__.e[n + 1]).forEach(function(e, t) { + r[t] = (r[t] * o + e * (100 - o)) / 100; + }), e.egressGradient.unshift({ + offset: 0, + color: "#".concat(color_convert__WEBPACK_IMPORTED_MODULE_12___default.a.lab.hex(r)) + }); } - }, { - key: "filterFormatItem", - value: function(item, displayName, childIndex) { - for (var formatedGraphicalItems = this.state.formatedGraphicalItems, i = 0, len = formatedGraphicalItems.length; i < len; i++) { - var entry = formatedGraphicalItems[i]; - if (entry.item === item || entry.props.key === item.key || displayName === Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.j)(entry.item.type) && childIndex === entry.childIndex) return entry; - } - return null; - } - }, { - key: "renderAxis", - value: function(axisOptions, element, displayName, index) { - var _props2 = this.props, width = _props2.width, height = _props2.height; - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a, _extends({}, axisOptions, { - className: "recharts-" + axisOptions.axisType + " " + axisOptions.axisType, - key: element.key || displayName + "-" + index, - viewBox: { - x: 0, - y: 0, - width: width, - height: height - }, - ticksGenerator: this.axesTicksGenerator - })); - } - }, { - key: "renderLegend", - value: function() { - var _this5 = this, formatedGraphicalItems = this.state.formatedGraphicalItems, _props3 = this.props, children = _props3.children, width = _props3.width, height = _props3.height, margin = this.props.margin || {}, legendWidth = width - (margin.left || 0) - (margin.right || 0), legendHeight = height - (margin.top || 0) - (margin.bottom || 0), props = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.q)({ - children: children, - formatedGraphicalItems: formatedGraphicalItems, - legendWidth: legendWidth, - legendHeight: legendHeight, - legendContent: legendContent - }); - if (!props) return null; - var item = props.item, otherProps = _objectWithoutProperties(props, [ "item" ]); - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(item, _extends({}, otherProps, { - chartWidth: width, - chartHeight: height, - margin: margin, - ref: function(legend) { - _this5.legendInstance = legend; - }, - onBBoxUpdate: this.handleLegendBBoxUpdate - })); + }, setIngressChartAttributes = function(e) { + var t = 0; + e.ingress.forEach(function(e) { + var n = e.value; + n > t && (t = n); + }), setMaxIngress(e, t); + }, setEgressChartAttributes = function(e) { + var t = 0; + e.egress.forEach(function(e) { + var n = e.value; + n > t && (t = n); + }), setMaxEgress(e, t); + }, inserter = function(e) { + return function(t, n) { + return t.peers && t.peers.bundles && (n.peers = t.peers, Object.values(n.peers.bundles).forEach(function(e) { + e.knownPeers && Object.values(e.knownPeers).forEach(function(e) { + e.maxIngress || setIngressChartAttributes(e), e.maxEgress || setEgressChartAttributes(e); + }); + })), Array.isArray(t.diff) && t.diff.forEach(function(t) { + if (t.ip) { + switch (t.remove) { + case "bundle": + return void delete n.peers.bundles[t.ip]; + + case "known": + if (!t.id) return void console.error("Remove known peer event without ID", t.ip); + var r = n.peers.bundles[t.ip]; + return r && r.knownPeers && r.knownPeers[t.id] ? void delete r.knownPeers[t.id] : void console.error("No known peer to remove", t.ip, t.id); + + case "attempt": + var o = n.peers.bundles[t.ip]; + return !o || !Array.isArray(o.attempts) || o.attempts.length < 1 ? void console.error("No unknown peer to remove", t.ip) : void o.attempts.splice(0, 1); + } + n.peers.bundles[t.ip] || (n.peers.bundles[t.ip] = { + location: { + country: "", + city: "", + latitude: 0, + longitude: 0 + }, + knownPeers: {}, + attempts: [] + }); + var a = n.peers.bundles[t.ip]; + if (t.location) a.location = t.location; else { + if (!t.id) return a.attempts || (a.attempts = []), void a.attempts.push({ + connected: t.connected, + disconnected: t.disconnected + }); + a.knownPeers || (a.knownPeers = {}), a.knownPeers[t.id] || (a.knownPeers[t.id] = { + connected: [], + disconnected: [], + ingress: [], + egress: [], + active: !1 + }); + var i = a.knownPeers[t.id]; + switch (i.maxIngress || setIngressChartAttributes(i), i.maxEgress || setEgressChartAttributes(i), + t.connected && (i.connected || (console.warn("peer.connected should exist"), i.connected = []), + i.connected.push(t.connected)), t.disconnected && (i.disconnected || (console.warn("peer.disconnected should exist"), + i.disconnected = []), i.disconnected.push(t.disconnected)), t.activity) { + case "active": + i.active = !0; + break; + + case "inactive": + i.active = !1; + } + if (Array.isArray(t.ingress) && Array.isArray(t.egress)) { + var s, l; + if (t.ingress.length !== t.egress.length) return void console.error("Different traffic sample length", t); + var u = i.maxIngress; + t.ingress.forEach(function(e) { + var t = e.value; + t > u && (u = t); + }), u > i.maxIngress && setMaxIngress(i, u), (s = i.ingress).splice.apply(s, [ i.ingress.length, 0 ].concat(_toConsumableArray(t.ingress))); + var c = i.ingress.length - e; + if (c > 0) { + for (var d = 0; d < c && i.ingress[d].value < i.maxIngress; ) d++; + i.ingress.splice(0, c), d < c && setIngressChartAttributes(i); + } + var f = i.maxEgress; + t.egress.forEach(function(e) { + var t = e.value; + t > f && (f = t); + }), f > i.maxEgress && setMaxEgress(i, f), (l = i.egress).splice.apply(l, [ i.egress.length, 0 ].concat(_toConsumableArray(t.egress))); + var p = i.egress.length - e; + if (p > 0) { + for (var h = 0; h < p && i.egress[h].value < i.maxEgress; ) h++; + i.egress.splice(0, p), h < p && setEgressChartAttributes(i); + } + } + } + } else console.error("Peer event without IP", t); + }), n; + }; + }, styles = { + tableHead: { + height: "auto" + }, + tableRow: { + height: "auto" + }, + tableCell: { + paddingTop: 0, + paddingRight: 5, + paddingBottom: 0, + paddingLeft: 5, + border: "none" + } + }, Network = function(_Component) { + function Network() { + var e, t; + _classCallCheck(this, Network); + for (var n = arguments.length, r = new Array(n), o = 0; o < n; o++) r[o] = arguments[o]; + return _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, (e = _getPrototypeOf(Network)).call.apply(e, [ this ].concat(r)))), "formatTime", function(e) { + var t = new Date(e); + if (isNaN(t)) return ""; + var n = "0".concat(t.getMonth() + 1).slice(-2), r = "0".concat(t.getDate()).slice(-2), o = "0".concat(t.getHours()).slice(-2), a = "0".concat(t.getMinutes()).slice(-2), i = "0".concat(t.getSeconds()).slice(-2); + return "".concat(n, "/").concat(r, "/").concat(o, ":").concat(a, ":").concat(i); + }), _defineProperty(_assertThisInitialized(t), "copyToClipboard", function(e) { + return function(t) { + t.preventDefault(), navigator.clipboard.writeText(e).then(function() {}, function() { + console.error("Failed to copy node id", e); + }); + }; + }), _defineProperty(_assertThisInitialized(t), "peerTableRow", function(e, n, r, o) { + var a, i = o.ingress.map(function(e) { + return { + ingress: e.value || .001 + }; + }), s = o.egress.map(function(e) { + return { + egress: -e.value || -.001 + }; + }); + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4___default.a, { + key: "known_".concat(e, "_").concat(n), + style: styles.tableRow + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, o.active ? react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_9__.a, { + icon: _fortawesome_free_solid_svg_icons__WEBPACK_IMPORTED_MODULE_10__.b, + color: "green" + }) : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_9__.a, { + icon: _fortawesome_free_regular_svg_icons__WEBPACK_IMPORTED_MODULE_11__.a, + style: _common__WEBPACK_IMPORTED_MODULE_14__.g.light + })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: _objectSpread({ + fontFamily: "monospace", + cursor: "copy" + }, styles.tableCell, _common__WEBPACK_IMPORTED_MODULE_14__.g.light), + onClick: t.copyToClipboard(n) + }, n.substring(0, 10)), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, r.location ? (a = r.location, "".concat(a.country ? a.country : "").concat(a.city ? "/".concat(a.city) : "")) : ""), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.b, { + width: trafficChartWidth, + height: trafficChartHeight, + data: i, + margin: { + top: 5, + right: 5, + bottom: 0, + left: 5 + }, + syncId: "peerIngress_".concat(e, "_").concat(n) + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("defs", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("linearGradient", { + id: "ingressGradient_".concat(e, "_").concat(n), + x1: "0", + y1: "1", + x2: "0", + y2: "0" + }, o.ingressGradient && o.ingressGradient.map(function(t, r) { + var o = t.offset, a = t.color; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("stop", { + key: "ingressStop_".concat(e, "_").concat(n, "_").concat(r), + offset: "".concat(o, "%"), + stopColor: a + }); + }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.c, { + cursor: !1, + content: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(CustomTooltip__WEBPACK_IMPORTED_MODULE_13__.c, { + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_13__.b)("Download") + }) + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.d, { + hide: !0, + scale: "sqrt", + domain: [ .001, function(e) { + return Math.max(e, 0); + } ] + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.a, { + dataKey: "ingress", + isAnimationActive: !1, + type: "monotone", + fill: "url(#ingressGradient_".concat(e, "_").concat(n, ")"), + stroke: o.ingressGradient[o.ingressGradient.length - 1].color, + strokeWidth: _common__WEBPACK_IMPORTED_MODULE_14__.c + })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.b, { + width: trafficChartWidth, + height: trafficChartHeight, + data: s, + margin: { + top: 0, + right: 5, + bottom: 5, + left: 5 + }, + syncId: "peerIngress_".concat(e, "_").concat(n) + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("defs", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("linearGradient", { + id: "egressGradient_".concat(e, "_").concat(n), + x1: "0", + y1: "1", + x2: "0", + y2: "0" + }, o.egressGradient && o.egressGradient.map(function(t, r) { + var o = t.offset, a = t.color; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("stop", { + key: "egressStop_".concat(e, "_").concat(n, "_").concat(r), + offset: "".concat(o, "%"), + stopColor: a + }); + }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.c, { + cursor: !1, + content: react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(CustomTooltip__WEBPACK_IMPORTED_MODULE_13__.c, { + tooltip: Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_13__.b)("Upload", Object(CustomTooltip__WEBPACK_IMPORTED_MODULE_13__.d)(-1)) + }) + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.d, { + hide: !0, + scale: "sqrt", + domain: [ function(e) { + return Math.min(e, 0); + }, -.001 ] + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(recharts__WEBPACK_IMPORTED_MODULE_8__.a, { + dataKey: "egress", + isAnimationActive: !1, + type: "monotone", + fill: "url(#egressGradient_".concat(e, "_").concat(n, ")"), + stroke: o.egressGradient[0].color, + strokeWidth: _common__WEBPACK_IMPORTED_MODULE_14__.c + })))); + }), t; } - }, { - key: "renderTooltip", - value: function() { - var children = this.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a); - if (!tooltipItem) return null; - var _state8 = this.state, isTooltipActive = _state8.isTooltipActive, activeCoordinate = _state8.activeCoordinate, activePayload = _state8.activePayload, activeLabel = _state8.activeLabel, offset = _state8.offset; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(tooltipItem, { - viewBox: _extends({}, offset, { - x: offset.left, - y: offset.top - }), - active: isTooltipActive, - label: activeLabel, - payload: isTooltipActive ? activePayload : [], - coordinate: activeCoordinate + return _inherits(Network, _Component), _createClass(Network, [ { + key: "componentDidMount", + value: function() { + var e = this.props.container; + void 0 !== e && (e.scrollTop = 0); + } + }, { + key: "render", + value: function() { + var e = this; + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6___default.a, { + container: !0, + direction: "row", + justify: "space-between" + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6___default.a, { + item: !0 + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Table__WEBPACK_IMPORTED_MODULE_1___default.a, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableHead__WEBPACK_IMPORTED_MODULE_2___default.a, { + style: styles.tableHead + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4___default.a, { + style: styles.tableRow + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "Node ID"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "Location"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "Traffic"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3___default.a, null, Object.entries(this.props.content.peers.bundles).map(function(t) { + var n = _slicedToArray(t, 2), r = n[0], o = n[1]; + return !o.knownPeers || Object.keys(o.knownPeers).length < 1 ? null : Object.entries(o.knownPeers).map(function(t) { + var n = _slicedToArray(t, 2), a = n[0], i = n[1]; + return !1 === i.active ? null : e.peerTableRow(r, a, o, i); + }); + })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3___default.a, null, Object.entries(this.props.content.peers.bundles).map(function(t) { + var n = _slicedToArray(t, 2), r = n[0], o = n[1]; + return !o.knownPeers || Object.keys(o.knownPeers).length < 1 ? null : Object.entries(o.knownPeers).map(function(t) { + var n = _slicedToArray(t, 2), a = n[0], i = n[1]; + return !0 === i.active ? null : e.peerTableRow(r, a, o, i); + }); + })))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Grid_Grid__WEBPACK_IMPORTED_MODULE_6___default.a, { + item: !0 + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Typography__WEBPACK_IMPORTED_MODULE_7___default.a, { + variant: "subtitle1", + gutterBottom: !0 + }, "Connection attempts"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Table__WEBPACK_IMPORTED_MODULE_1___default.a, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableHead__WEBPACK_IMPORTED_MODULE_2___default.a, { + style: styles.tableHead + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4___default.a, { + style: styles.tableRow + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "IP"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "Location"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, "Nr"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableBody__WEBPACK_IMPORTED_MODULE_3___default.a, null, Object.entries(this.props.content.peers.bundles).map(function(e) { + var t, n = _slicedToArray(e, 2), r = n[0], o = n[1]; + return !o.attempts || o.attempts.length < 1 ? null : react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableRow__WEBPACK_IMPORTED_MODULE_4___default.a, { + key: "attempt_".concat(r), + style: styles.tableRow + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, r), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, o.location ? (t = o.location, "".concat(t.country ? t.country : "").concat(t.city ? "/".concat(t.city) : "")) : ""), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_TableCell__WEBPACK_IMPORTED_MODULE_5___default.a, { + style: styles.tableCell + }, Object.values(o.attempts).length)); + }))))); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), Network; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = Network, reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(trafficChartHeight, "trafficChartHeight", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(trafficChartWidth, "trafficChartWidth", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(setMaxIngress, "setMaxIngress", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(setMaxEgress, "setMaxEgress", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(setIngressChartAttributes, "setIngressChartAttributes", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(setEgressChartAttributes, "setEgressChartAttributes", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(inserter, "inserter", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(Network, "Network", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/Network.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./components/SideBar.jsx": function(module, __webpack_exports__, __webpack_require__) { + "use strict"; + (function(module) { + var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js"), react__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("./node_modules/@material-ui/core/styles/withStyles.js"), _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default = __webpack_require__.n(_material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1__), _material_ui_core_List__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./node_modules/@material-ui/core/List/index.js"), _material_ui_core_List__WEBPACK_IMPORTED_MODULE_2___default = __webpack_require__.n(_material_ui_core_List__WEBPACK_IMPORTED_MODULE_2__), _material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./node_modules/@material-ui/core/ListItem/index.js"), _material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_3___default = __webpack_require__.n(_material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_3__), _material_ui_core_ListItemIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./node_modules/@material-ui/core/ListItemIcon/index.js"), _material_ui_core_ListItemIcon__WEBPACK_IMPORTED_MODULE_4___default = __webpack_require__.n(_material_ui_core_ListItemIcon__WEBPACK_IMPORTED_MODULE_4__), _material_ui_core_ListItemText__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./node_modules/@material-ui/core/ListItemText/index.js"), _material_ui_core_ListItemText__WEBPACK_IMPORTED_MODULE_5___default = __webpack_require__.n(_material_ui_core_ListItemText__WEBPACK_IMPORTED_MODULE_5__), _material_ui_core_Icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./node_modules/@material-ui/core/Icon/index.js"), _material_ui_core_Icon__WEBPACK_IMPORTED_MODULE_6___default = __webpack_require__.n(_material_ui_core_Icon__WEBPACK_IMPORTED_MODULE_6__), react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./node_modules/react-transition-group/Transition.js"), react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_7___default = __webpack_require__.n(react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_7__), _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./node_modules/@fortawesome/react-fontawesome/index.es.js"), _common__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./common.jsx"), enterModule; + function _typeof(e) { + return (_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function _objectSpread(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter(function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable; + }))), r.forEach(function(t) { + _defineProperty(e, t, n[t]); }); } - }, { - key: "renderActiveDot", - value: function(option, props) { - var dot = void 0; - return dot = Object(__WEBPACK_IMPORTED_MODULE_5_react__.isValidElement)(option) ? Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(option, props) : __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(option) ? option(props) : __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_15__shape_Dot__.a, props), - __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_9__container_Layer__.a, { - className: "recharts-active-dot", - key: props.key - }, dot); - } - }, { - key: "renderActivePoints", - value: function(_ref7) { - var item = _ref7.item, activePoint = _ref7.activePoint, basePoint = _ref7.basePoint, childIndex = _ref7.childIndex, isRange = _ref7.isRange, result = [], key = item.props.key, _item$item$props = item.item.props, activeDot = _item$item$props.activeDot, dataKey = _item$item$props.dataKey, dotProps = _extends({ - index: childIndex, - dataKey: dataKey, - cx: activePoint.x, - cy: activePoint.y, - r: 4, - fill: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.r)(item.item), - strokeWidth: 2, - stroke: "#fff", - payload: activePoint.payload, - value: activePoint.value, - key: key + "-activePoint-" + childIndex - }, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(activeDot), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.e)(activeDot)); - return result.push(this.renderActiveDot(activeDot, dotProps, childIndex)), basePoint ? result.push(this.renderActiveDot(activeDot, _extends({}, dotProps, { - cx: basePoint.x, - cy: basePoint.y, - key: key + "-basePoint-" + childIndex - }), childIndex)) : isRange && result.push(null), result; + return e; + } + function _classCallCheck(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); + } + function _defineProperties(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } - }, { - key: "render", - value: function() { - var _this6 = this; - if (!Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.q)(this)) return null; - var _props4 = this.props, children = _props4.children, className = _props4.className, width = _props4.width, height = _props4.height, style = _props4.style, compact = _props4.compact, others = _objectWithoutProperties(_props4, [ "children", "className", "width", "height", "style", "compact" ]), attrs = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(others), map = { - CartesianGrid: { - handler: this.renderGrid, - once: !0 - }, - ReferenceArea: { - handler: this.renderReferenceElement - }, - ReferenceLine: { - handler: this.renderReferenceElement - }, - ReferenceDot: { - handler: this.renderReferenceElement - }, - XAxis: { - handler: this.renderXAxis - }, - YAxis: { - handler: this.renderYAxis - }, - Brush: { - handler: this.renderBrush, - once: !0 - }, - Bar: { - handler: this.renderGraphicChild - }, - Line: { - handler: this.renderGraphicChild - }, - Area: { - handler: this.renderGraphicChild - }, - Radar: { - handler: this.renderGraphicChild - }, - RadialBar: { - handler: this.renderGraphicChild - }, - Scatter: { - handler: this.renderGraphicChild - }, - Pie: { - handler: this.renderGraphicChild - }, - Tooltip: { - handler: this.renderCursor, - once: !0 - }, - PolarGrid: { - handler: this.renderPolarGrid, - once: !0 - }, - PolarAngleAxis: { - handler: this.renderPolarAxis - }, - PolarRadiusAxis: { - handler: this.renderPolarAxis - } - }; - if (compact) return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Surface__.a, _extends({}, attrs, { - width: width, - height: height - }), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.p)(children, map)); - var events = this.parseEventsOfWrapper(); - return __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement("div", _extends({ - className: __WEBPACK_IMPORTED_MODULE_7_classnames___default()("recharts-wrapper", className), - style: _extends({}, style, { - position: "relative", - cursor: "default", - width: width, - height: height - }) - }, events, { - ref: function(node) { - _this6.container = node; + } + function _createClass(e, t, n) { + return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e; + } + function _possibleConstructorReturn(e, t) { + return !t || "object" !== _typeof(t) && "function" != typeof t ? _assertThisInitialized(e) : t; + } + function _getPrototypeOf(e) { + return (_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + })(e); + } + function _assertThisInitialized(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; + } + function _inherits(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && _setPrototypeOf(e, t); + } + function _setPrototypeOf(e, t) { + return (_setPrototypeOf = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + })(e, t); + } + function _defineProperty(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + enterModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).enterModule, + enterModule && enterModule(module); + var styles = { + menu: { + default: { + transition: "margin-left ".concat(_common__WEBPACK_IMPORTED_MODULE_9__.a, "ms") + }, + transition: { + entered: { + marginLeft: -200 } - }), __WEBPACK_IMPORTED_MODULE_5_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_8__container_Surface__.a, _extends({}, attrs, { - width: width, - height: height - }), Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.p)(children, map)), this.renderLegend(), this.renderTooltip()); - } - } ]), CategoricalChartWrapper; - }(__WEBPACK_IMPORTED_MODULE_5_react__.Component), _class.displayName = chartName, - _class.propTypes = _extends({ - syncId: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number ]), - compact: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - width: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - data: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object), - layout: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "horizontal", "vertical" ]), - stackOffset: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOf([ "sign", "expand", "none", "wiggle", "silhouette" ]), - throttleDelay: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - margin: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.shape({ - top: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - right: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - bottom: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - left: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number - }), - barCategoryGap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - barGap: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - barSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string ]), - maxBarSize: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.number, - style: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.object, - className: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string, - children: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.node ]), - onClick: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseLeave: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseEnter: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseMove: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseDown: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - onMouseUp: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.func, - reverseStackOrder: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.bool, - id: __WEBPACK_IMPORTED_MODULE_6_prop_types___default.a.string - }, propTypes), _class.defaultProps = _extends({ - layout: "horizontal", - stackOffset: "none", - barCategoryGap: "10%", - barGap: 4, - margin: { - top: 5, - right: 5, - bottom: 5, - left: 5 - }, - reverseStackOrder: !1 - }, defaultProps), _class.createDefaultState = function(props) { - var children = props.children, brushItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_19__cartesian_Brush__.a); - return { - chartX: 0, - chartY: 0, - dataStartIndex: brushItem && brushItem.props && brushItem.props.startIndex || 0, - dataEndIndex: brushItem && brushItem.props && brushItem.props.endIndex || props.data && props.data.length - 1 || 0, - activeTooltipIndex: -1, - isTooltipActive: !1 - }; - }, _class.hasBar = function(graphicalItems) { - return !(!graphicalItems || !graphicalItems.length) && graphicalItems.some(function(item) { - var name = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.j)(item && item.type); - return name && name.indexOf("Bar") >= 0; - }); - }, _class.getDisplayedData = function(props, _ref8, item) { - var graphicalItems = _ref8.graphicalItems, dataStartIndex = _ref8.dataStartIndex, dataEndIndex = _ref8.dataEndIndex, itemsData = (graphicalItems || []).reduce(function(result, child) { - var itemData = child.props.data; - return itemData && itemData.length ? [].concat(_toConsumableArray(result), _toConsumableArray(itemData)) : result; - }, []); - if (itemsData && itemsData.length > 0) return itemsData; - if (item && item.props && item.props.data && item.props.data.length > 0) return item.props.data; - var data = props.data; - return data && data.length && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(dataStartIndex) && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(dataEndIndex) ? data.slice(dataStartIndex, dataEndIndex + 1) : []; - }, _initialiseProps = function() { - var _this7 = this; - this.handleLegendBBoxUpdate = function(box) { - if (box && _this7.legendInstance) { - var _state9 = _this7.state, dataStartIndex = _state9.dataStartIndex, dataEndIndex = _state9.dataEndIndex, updateId = _state9.updateId; - _this7.setState(_this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId - })); - } - }, this.handleReceiveSyncEvent = function(cId, chartId, data) { - var _props5 = _this7.props, syncId = _props5.syncId, layout = _props5.layout, updateId = _this7.state.updateId; - if (syncId === cId && chartId !== _this7.uniqueChartId) { - var dataStartIndex = data.dataStartIndex, dataEndIndex = data.dataEndIndex; - if (__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.dataStartIndex) && __WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.dataEndIndex)) if (__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(data.activeTooltipIndex)) _this7.setState(data); else { - var chartX = data.chartX, chartY = data.chartY, activeTooltipIndex = data.activeTooltipIndex, _state10 = _this7.state, offset = _state10.offset, tooltipTicks = _state10.tooltipTicks; - if (!offset) return; - var viewBox = _extends({}, offset, { - x: offset.left, - y: offset.top - }), validateChartX = Math.min(chartX, viewBox.x + viewBox.width), validateChartY = Math.min(chartY, viewBox.y + viewBox.height), activeLabel = tooltipTicks[activeTooltipIndex] && tooltipTicks[activeTooltipIndex].value, activePayload = _this7.getTooltipContent(activeTooltipIndex), activeCoordinate = tooltipTicks[activeTooltipIndex] ? { - x: "horizontal" === layout ? tooltipTicks[activeTooltipIndex].coordinate : validateChartX, - y: "horizontal" === layout ? validateChartY : tooltipTicks[activeTooltipIndex].coordinate - } : originCoordinate; - _this7.setState(_extends({}, data, { - activeLabel: activeLabel, - activeCoordinate: activeCoordinate, - activePayload: activePayload - })); - } else _this7.setState(_extends({ - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex - }, _this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: dataStartIndex, - dataEndIndex: dataEndIndex, - updateId: updateId - }))); - } - }, this.handleBrushChange = function(_ref9) { - var startIndex = _ref9.startIndex, endIndex = _ref9.endIndex; - if (startIndex !== _this7.state.dataStartIndex || endIndex !== _this7.state.dataEndIndex) { - var updateId = _this7.state.updateId; - _this7.setState(function() { - return _extends({ - dataStartIndex: startIndex, - dataEndIndex: endIndex - }, _this7.updateStateOfAxisMapsOffsetAndStackGroups({ - props: _this7.props, - dataStartIndex: startIndex, - dataEndIndex: endIndex, - updateId: updateId - })); - }), _this7.triggerSyncEvent({ - dataStartIndex: startIndex, - dataEndIndex: endIndex - }); - } - }, this.handleMouseEnter = function(e) { - var onMouseEnter = _this7.props.onMouseEnter, mouse = _this7.getMouseInfo(e); - if (mouse) { - var nextState = _extends({}, mouse, { - isTooltipActive: !0 - }); - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseEnter) && onMouseEnter(nextState, e); + } } - }, this.triggeredAfterMouseMove = function(e) { - var onMouseMove = _this7.props.onMouseMove, mouse = _this7.getMouseInfo(e), nextState = mouse ? _extends({}, mouse, { - isTooltipActive: !0 - }) : { - isTooltipActive: !1 - }; - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseMove) && onMouseMove(nextState, e); - }, this.handleItemMouseEnter = function(el) { - _this7.setState(function() { - return { - isTooltipActive: !0, - activeItem: el, - activePayload: el.tooltipPayload, - activeCoordinate: el.tooltipPosition || { - x: el.cx, - y: el.cy - } - }; - }); - }, this.handleItemMouseLeave = function() { - _this7.setState(function() { - return { - isTooltipActive: !1 - }; - }); - }, this.handleMouseMove = function(e) { - e && __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(e.persist) && e.persist(), - _this7.triggeredAfterMouseMove(e); - }, this.handleMouseLeave = function(e) { - var onMouseLeave = _this7.props.onMouseLeave, nextState = { - isTooltipActive: !1 - }; - _this7.setState(nextState), _this7.triggerSyncEvent(nextState), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseLeave) && onMouseLeave(nextState, e); - }, this.handleOuterEvent = function(e) { - var eventName = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.l)(e); - if (eventName && __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(_this7.props[eventName])) { - var mouse = _this7.getMouseInfo(e); - (0, _this7.props[eventName])(mouse, e); - } - }, this.handleClick = function(e) { - var onClick = _this7.props.onClick; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onClick)) { - onClick(_this7.getMouseInfo(e), e); - } - }, this.handleMouseDown = function(e) { - var onMouseDown = _this7.props.onMouseDown; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseDown)) { - onMouseDown(_this7.getMouseInfo(e), e); - } - }, this.handleMouseUp = function(e) { - var onMouseUp = _this7.props.onMouseUp; - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(onMouseUp)) { - onMouseUp(_this7.getMouseInfo(e), e); - } - }, this.handleTouchMove = function(e) { - null != e.changedTouches && e.changedTouches.length > 0 && _this7.handleMouseMove(e.changedTouches[0]); - }, this.verticalCoordinatesGenerator = function(_ref10) { - var xAxis = _ref10.xAxis, width = _ref10.width, height = _ref10.height, offset = _ref10.offset; - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.m)(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.getTicks(_extends({}, __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.defaultProps, xAxis, { - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(xAxis, !0), - viewBox: { - x: 0, - y: 0, - width: width, - height: height - } - })), offset.left, offset.left + offset.width); - }, this.horizontalCoordinatesGenerator = function(_ref11) { - var yAxis = _ref11.yAxis, width = _ref11.width, height = _ref11.height, offset = _ref11.offset; - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.m)(__WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.getTicks(_extends({}, __WEBPACK_IMPORTED_MODULE_18__cartesian_CartesianAxis__.a.defaultProps, yAxis, { - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(yAxis, !0), - viewBox: { - x: 0, - y: 0, - width: width, - height: height - } - })), offset.top, offset.top + offset.height); - }, this.axesTicksGenerator = function(axis) { - return Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis, !0); - }, this.tooltipTicksGenerator = function(axisMap) { - var axis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(axisMap), tooltipTicks = Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axis, !1, !0); + }, themeStyles = function(e) { return { - tooltipTicks: tooltipTicks, - orderedTooltipTicks: __WEBPACK_IMPORTED_MODULE_0_lodash_sortBy___default()(tooltipTicks, function(o) { - return o.coordinate; - }), - tooltipAxis: axis, - tooltipAxisBandSize: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.g)(axis) + list: { + background: e.palette.grey[900] + }, + listItem: { + minWidth: 7 * e.spacing.unit + }, + icon: { + fontSize: 3 * e.spacing.unit, + overflow: "unset" + } }; - }, this.renderCursor = function(element) { - var _state11 = _this7.state, isTooltipActive = _state11.isTooltipActive, activeCoordinate = _state11.activeCoordinate, activePayload = _state11.activePayload, offset = _state11.offset; - if (!(element && element.props.cursor && isTooltipActive && activeCoordinate)) return null; - var layout = _this7.props.layout, restProps = void 0, cursorComp = __WEBPACK_IMPORTED_MODULE_12__shape_Curve__.a; - if ("ScatterChart" === chartName) restProps = activeCoordinate, cursorComp = __WEBPACK_IMPORTED_MODULE_13__shape_Cross__.a; else if ("BarChart" === chartName) restProps = _this7.getCursorRectangle(), - cursorComp = __WEBPACK_IMPORTED_MODULE_16__shape_Rectangle__.a; else if ("radial" === layout) { - var _getCursorPoints = _this7.getCursorPoints(), cx = _getCursorPoints.cx, cy = _getCursorPoints.cy, radius = _getCursorPoints.radius, startAngle = _getCursorPoints.startAngle, endAngle = _getCursorPoints.endAngle; - restProps = { - cx: cx, - cy: cy, - startAngle: startAngle, - endAngle: endAngle, - innerRadius: radius, - outerRadius: radius - }, cursorComp = __WEBPACK_IMPORTED_MODULE_14__shape_Sector__.a; - } else restProps = { - points: _this7.getCursorPoints() - }, cursorComp = __WEBPACK_IMPORTED_MODULE_12__shape_Curve__.a; - var key = element.key || "_recharts-cursor", cursorProps = _extends({ - stroke: "#ccc" - }, offset, restProps, Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.k)(element.props.cursor), { - payload: activePayload, - key: key, - className: "recharts-tooltip-cursor" - }); - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.isValidElement)(element.props.cursor) ? Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element.props.cursor, cursorProps) : Object(__WEBPACK_IMPORTED_MODULE_5_react__.createElement)(cursorComp, cursorProps); - }, this.renderPolarAxis = function(element, displayName, index) { - var axisType = element.type.axisType, axisMap = _this7.state[axisType + "Map"], axisOption = axisMap[element.props[axisType + "Id"]]; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, _extends({}, axisOption, { - className: axisType, - key: element.key || displayName + "-" + index, - ticks: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(axisOption, !0) - })); - }, this.renderXAxis = function(element, displayName, index) { - var xAxisMap = _this7.state.xAxisMap, axisObj = xAxisMap[element.props.xAxisId]; - return _this7.renderAxis(axisObj, element, displayName, index); - }, this.renderYAxis = function(element, displayName, index) { - var yAxisMap = _this7.state.yAxisMap, axisObj = yAxisMap[element.props.yAxisId]; - return _this7.renderAxis(axisObj, element, displayName, index); - }, this.renderGrid = function(element) { - var _state12 = _this7.state, xAxisMap = _state12.xAxisMap, yAxisMap = _state12.yAxisMap, offset = _state12.offset, _props6 = _this7.props, width = _props6.width, height = _props6.height, xAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(xAxisMap), yAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(yAxisMap), props = element.props || {}; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || "grid", - x: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.x) ? props.x : offset.left, - y: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.y) ? props.y : offset.top, - width: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.width) ? props.width : offset.width, - height: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(props.height) ? props.height : offset.height, - xAxis: xAxis, - yAxis: yAxis, - offset: offset, - chartWidth: width, - chartHeight: height, - verticalCoordinatesGenerator: _this7.verticalCoordinatesGenerator, - horizontalCoordinatesGenerator: _this7.horizontalCoordinatesGenerator - }); - }, this.renderPolarGrid = function(element) { - var _state13 = _this7.state, radiusAxisMap = _state13.radiusAxisMap, angleAxisMap = _state13.angleAxisMap, radiusAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(radiusAxisMap), angleAxis = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.b)(angleAxisMap), cx = angleAxis.cx, cy = angleAxis.cy, innerRadius = angleAxis.innerRadius, outerRadius = angleAxis.outerRadius; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - polarAngles: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(angleAxis, !0).map(function(entry) { - return entry.coordinate; - }), - polarRadius: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.u)(radiusAxis, !0).map(function(entry) { - return entry.coordinate; - }), - cx: cx, - cy: cy, - innerRadius: innerRadius, - outerRadius: outerRadius, - key: element.key || "polar-grid" - }); - }, this.renderBrush = function(element) { - var _props7 = _this7.props, margin = _props7.margin, data = _props7.data, _state14 = _this7.state, offset = _state14.offset, dataStartIndex = _state14.dataStartIndex, dataEndIndex = _state14.dataEndIndex, updateId = _state14.updateId; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || "_recharts-brush", - onChange: Object(__WEBPACK_IMPORTED_MODULE_22__util_ChartUtils__.d)(_this7.handleBrushChange, null, element.props.onChange), - data: data, - x: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.x) ? element.props.x : offset.left, - y: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.y) ? element.props.y : offset.top + offset.height + offset.brushBottom - (margin.bottom || 0), - width: Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.h)(element.props.width) ? element.props.width : offset.width, - startIndex: dataStartIndex, - endIndex: dataEndIndex, - updateId: "brush-" + updateId - }); - }, this.renderReferenceElement = function(element, displayName, index) { - if (!element) return null; - var _state15 = _this7.state, xAxisMap = _state15.xAxisMap, yAxisMap = _state15.yAxisMap, offset = _state15.offset, _element$props = element.props, xAxisId = _element$props.xAxisId, yAxisId = _element$props.yAxisId; - return Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, { - key: element.key || displayName + "-" + index, - xAxis: xAxisMap[xAxisId], - yAxis: yAxisMap[yAxisId], - viewBox: { - x: offset.left, - y: offset.top, - width: offset.width, - height: offset.height + }, SideBar = function(_Component) { + function SideBar() { + var e, t; + _classCallCheck(this, SideBar); + for (var n = arguments.length, r = new Array(n), o = 0; o < n; o++) r[o] = arguments[o]; + return _defineProperty(_assertThisInitialized(t = _possibleConstructorReturn(this, (e = _getPrototypeOf(SideBar)).call.apply(e, [ this ].concat(r)))), "clickOn", function(e) { + return function(n) { + n.preventDefault(), t.props.changeContent(e); + }; + }), _defineProperty(_assertThisInitialized(t), "menuItems", function(e) { + var n = t.props.classes, r = []; + return _common__WEBPACK_IMPORTED_MODULE_9__.b.forEach(function(o) { + r.push(react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_ListItem__WEBPACK_IMPORTED_MODULE_3___default.a, { + button: !0, + key: o.id, + onClick: t.clickOn(o.id), + className: n.listItem + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_ListItemIcon__WEBPACK_IMPORTED_MODULE_4___default.a, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_Icon__WEBPACK_IMPORTED_MODULE_6___default.a, { + className: n.icon + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_8__.a, { + icon: o.icon + }))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_ListItemText__WEBPACK_IMPORTED_MODULE_5___default.a, { + primary: o.title, + style: _objectSpread({}, styles.menu.default, styles.menu.transition[e], { + padding: 0 + }) + }))); + }), r; + }), _defineProperty(_assertThisInitialized(t), "menu", function(e) { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { + className: t.props.classes.list + }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_material_ui_core_List__WEBPACK_IMPORTED_MODULE_2___default.a, null, t.menuItems(e))); + }), t; + } + return _inherits(SideBar, _Component), _createClass(SideBar, [ { + key: "shouldComponentUpdate", + value: function(e, t, n) { + return e.opened !== this.props.opened; } - }); - }, this.renderGraphicChild = function(element, displayName, index) { - var item = _this7.filterFormatItem(element, displayName, index); - if (!item) return null; - var graphicalItem = Object(__WEBPACK_IMPORTED_MODULE_5_react__.cloneElement)(element, item.props), _state16 = _this7.state, isTooltipActive = _state16.isTooltipActive, tooltipAxis = _state16.tooltipAxis, activeTooltipIndex = _state16.activeTooltipIndex, activeLabel = _state16.activeLabel, children = _this7.props.children, tooltipItem = Object(__WEBPACK_IMPORTED_MODULE_17__util_ReactUtils__.i)(children, __WEBPACK_IMPORTED_MODULE_10__component_Tooltip__.a), _item$props2 = item.props, points = _item$props2.points, isRange = _item$props2.isRange, baseLine = _item$props2.baseLine, _item$item$props2 = item.item.props, activeDot = _item$item$props2.activeDot; - if (!_item$item$props2.hide && isTooltipActive && tooltipItem && activeDot && activeTooltipIndex >= 0) { - var activePoint = void 0, basePoint = void 0; - if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory ? (activePoint = Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(points, "payload." + tooltipAxis.dataKey, activeLabel), - basePoint = isRange && baseLine && Object(__WEBPACK_IMPORTED_MODULE_21__util_DataUtils__.a)(baseLine, "payload." + tooltipAxis.dataKey, activeLabel)) : (activePoint = points[activeTooltipIndex], - basePoint = isRange && baseLine && baseLine[activeTooltipIndex]), !__WEBPACK_IMPORTED_MODULE_4_lodash_isNil___default()(activePoint)) return [ graphicalItem ].concat(_toConsumableArray(_this7.renderActivePoints({ - item: item, - activePoint: activePoint, - basePoint: basePoint, - childIndex: activeTooltipIndex, - isRange: isRange - }))); - } - return isRange ? [ graphicalItem, null, null ] : [ graphicalItem, null ]; - }; - }, _temp; - }; - __webpack_exports__.a = generateCategoricalChart; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function invariant(condition, format, a, b, c, d, e, f) { - if (validateFormat(format), !condition) { - var error; - if (void 0 === format) error = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else { - var args = [ a, b, c, d, e, f ], argIndex = 0; - error = new Error(format.replace(/%s/g, function() { - return args[argIndex++]; - })), error.name = "Invariant Violation"; - } - throw error.framesToPop = 1, error; - } - } - var validateFormat = function(format) {}; - "production" !== process.env.NODE_ENV && (validateFormat = function(format) { - if (void 0 === format) throw new Error("invariant requires an error message argument"); - }), module.exports = invariant; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - function makeEmptyFunction(arg) { - return function() { - return arg; + }, { + key: "render", + value: function() { + return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_7___default.a, { + mountOnEnter: !0, + in: this.props.opened, + timeout: { + enter: _common__WEBPACK_IMPORTED_MODULE_9__.a + } + }, this.menu); + } + }, { + key: "__reactstandin__regenerateByEval", + value: function __reactstandin__regenerateByEval(key, code) { + this[key] = eval(code); + } + } ]), SideBar; + }(react__WEBPACK_IMPORTED_MODULE_0__.Component), _default = _material_ui_core_styles_withStyles__WEBPACK_IMPORTED_MODULE_1___default()(themeStyles)(SideBar), reactHotLoader, leaveModule; + __webpack_exports__.a = _default, reactHotLoader = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).default, + reactHotLoader && (reactHotLoader.register(styles, "styles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx"), + reactHotLoader.register(themeStyles, "themeStyles", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx"), + reactHotLoader.register(SideBar, "SideBar", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx"), + reactHotLoader.register(_default, "default", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/components/SideBar.jsx")), + leaveModule = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : __webpack_require__("./node_modules/react-hot-loader/index.js")).leaveModule, + leaveModule && leaveModule(module); + }).call(this, __webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module)); + }, + "./index.jsx": function(e, t, n) { + "use strict"; + n.r(t), function(e) { + var t, r = n("./node_modules/react/index.js"), o = n.n(r), a = n("./node_modules/react-dom/index.js"), i = n("./node_modules/@material-ui/core/styles/MuiThemeProvider.js"), s = n.n(i), l = n("./node_modules/@material-ui/core/styles/createMuiTheme.js"), u = n.n(l), c = n("./components/Dashboard.jsx"); + (t = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).enterModule) && t(e); + var d, f, p = u()({ + palette: { + type: "dark" + } + }), h = document.getElementById("dashboard"); + h && Object(a.render)(o.a.createElement(s.a, { + theme: p + }, o.a.createElement(c.a, null)), h), (d = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).default) && (d.register(p, "theme", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx"), + d.register(h, "dashboard", "/home/misi/Work/src/github.com/ethereum/go-ethereum/dashboard/assets/index.jsx")), + (f = ("undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal : n("./node_modules/react-hot-loader/index.js")).leaveModule) && f(e); + }.call(this, n("./node_modules/webpack/buildin/harmony-module.js")(e)); + }, + "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js": function(e, t) { + e.exports = function(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t]; + return n; + } + }; + }, + "./node_modules/@babel/runtime/helpers/assertThisInitialized.js": function(e, t) { + e.exports = function(e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e; }; - } - var emptyFunction = function() {}; - emptyFunction.thatReturns = makeEmptyFunction, emptyFunction.thatReturnsFalse = makeEmptyFunction(!1), - emptyFunction.thatReturnsTrue = makeEmptyFunction(!0), emptyFunction.thatReturnsNull = makeEmptyFunction(null), - emptyFunction.thatReturnsThis = function() { - return this; - }, emptyFunction.thatReturnsArgument = function(arg) { - return arg; - }, module.exports = emptyFunction; -}, function(module, exports, __webpack_require__) { - var aFunction = __webpack_require__(223); - module.exports = function(fn, that, length) { - if (aFunction(fn), void 0 === that) return fn; - switch (length) { - case 1: - return function(a) { - return fn.call(that, a); - }; - - case 2: - return function(a, b) { - return fn.call(that, a, b); - }; - - case 3: - return function(a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function() { - return fn.apply(that, arguments); - }; - }; -}, function(module, exports, __webpack_require__) { - var isObject = __webpack_require__(35); - module.exports = function(it) { - if (!isObject(it)) throw TypeError(it + " is not an object!"); - return it; - }; -}, function(module, exports) { - module.exports = function(exec) { - try { - return !!exec(); - } catch (e) { - return !0; - } - }; -}, function(module, exports) { - var hasOwnProperty = {}.hasOwnProperty; - module.exports = function(it, key) { - return hasOwnProperty.call(it, key); - }; -}, function(module, exports, __webpack_require__) { - module.exports = { - default: __webpack_require__(421), - __esModule: !0 - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function capitalize(string) { - if ("production" !== process.env.NODE_ENV && "string" != typeof string) throw new Error("Material-UI: capitalize(string) expects a string argument."); - return string.charAt(0).toUpperCase() + string.slice(1); - } - function contains(obj, pred) { - return (0, _keys2.default)(pred).every(function(key) { - return obj.hasOwnProperty(key) && obj[key] === pred[key]; - }); - } - function findIndex(arr, pred) { - for (var predType = void 0 === pred ? "undefined" : (0, _typeof3.default)(pred), i = 0; i < arr.length; i += 1) { - if ("function" === predType && !0 == !!pred(arr[i], i, arr)) return i; - if ("object" === predType && contains(arr[i], pred)) return i; - if (-1 !== [ "string", "number", "boolean" ].indexOf(predType)) return arr.indexOf(pred); - } - return -1; - } - function find(arr, pred) { - var index = findIndex(arr, pred); - return index > -1 ? arr[index] : void 0; - } - function createChainedFunction() { - for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) funcs[_key] = arguments[_key]; - return funcs.filter(function(func) { - return null != func; - }).reduce(function(acc, func) { - return "production" !== process.env.NODE_ENV && (0, _warning2.default)("function" == typeof func, "Material-UI: invalid Argument Type, must only provide functions, undefined, or null."), - function() { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) args[_key2] = arguments[_key2]; - acc.apply(this, args), func.apply(this, args); - }; - }, function() {}); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _typeof2 = __webpack_require__(105), _typeof3 = _interopRequireDefault(_typeof2), _keys = __webpack_require__(55), _keys2 = _interopRequireDefault(_keys); - exports.capitalize = capitalize, exports.contains = contains, exports.findIndex = findIndex, - exports.find = find, exports.createChainedFunction = createChainedFunction; - var _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; - } - var baseIsNative = __webpack_require__(611), getValue = __webpack_require__(614); - module.exports = getNative; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(x) { - return function() { - return x; + }, + "./node_modules/@babel/runtime/helpers/classCallCheck.js": function(e, t) { + e.exports = function(e, t) { + if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); }; - }; -}, function(module, exports, __webpack_require__) { - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; - } - var baseIsNative = __webpack_require__(668), getValue = __webpack_require__(673); - module.exports = getNative; -}, function(module, exports, __webpack_require__) { - function baseGetTag(value) { - return null == value ? void 0 === value ? undefinedTag : nullTag : symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - var Symbol = __webpack_require__(128), getRawTag = __webpack_require__(669), objectToString = __webpack_require__(670), nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag = Symbol ? Symbol.toStringTag : void 0; - module.exports = baseGetTag; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _temp2, __WEBPACK_IMPORTED_MODULE_0_lodash_isNil__ = __webpack_require__(20), __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isNil__), __WEBPACK_IMPORTED_MODULE_1_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_react__), __WEBPACK_IMPORTED_MODULE_2_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_2_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_prop_types__), __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc__ = __webpack_require__(771), __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_reduce_css_calc__), __WEBPACK_IMPORTED_MODULE_4_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_4_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_classnames__), __WEBPACK_IMPORTED_MODULE_5__util_DataUtils__ = __webpack_require__(9), __WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__ = __webpack_require__(198), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); + }, + "./node_modules/@babel/runtime/helpers/createClass.js": function(e, t) { + function n(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); } } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; + e.exports = function(e, t, r) { + return t && n(e.prototype, t), r && n(e, r), e; }; - }(), BREAKING_SPACES = /[ \f\n\r\t\v\u2028\u2029]+/, calculateWordWidths = function(props) { - try { - return { - wordsWithComputedWidth: (__WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(props.children) ? [] : props.children.toString().split(BREAKING_SPACES)).map(function(word) { - return { - word: word, - width: Object(__WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__.c)(word, props.style).width - }; - }), - spaceWidth: Object(__WEBPACK_IMPORTED_MODULE_7__util_DOMUtils__.c)(" ", props.style).width + }, + "./node_modules/@babel/runtime/helpers/defineProperty.js": function(e, t) { + e.exports = function(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + }; + }, + "./node_modules/@babel/runtime/helpers/extends.js": function(e, t) { + function n() { + return e.exports = n = Object.assign || function(e) { + for (var t = 1; t < arguments.length; t++) { + var n = arguments[t]; + for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); + } + return e; + }, n.apply(this, arguments); + } + e.exports = n; + }, + "./node_modules/@babel/runtime/helpers/getPrototypeOf.js": function(e, t) { + function n(t) { + return e.exports = n = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) { + return e.__proto__ || Object.getPrototypeOf(e); + }, n(t); + } + e.exports = n; + }, + "./node_modules/@babel/runtime/helpers/inherits.js": function(e, t, n) { + var r = n("./node_modules/@babel/runtime/helpers/setPrototypeOf.js"); + e.exports = function(e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && r(e, t); + }; + }, + "./node_modules/@babel/runtime/helpers/interopRequireDefault.js": function(e, t) { + e.exports = function(e) { + return e && e.__esModule ? e : { + default: e }; - } catch (e) { - return null; - } - }, Text = (_temp2 = _class = function(_Component) { - function Text() { - var _ref, _temp, _this, _ret; - _classCallCheck(this, Text); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; - return _temp = _this = _possibleConstructorReturn(this, (_ref = Text.__proto__ || Object.getPrototypeOf(Text)).call.apply(_ref, [ this ].concat(args))), - _this.state = { - wordsByLines: [] - }, _ret = _temp, _possibleConstructorReturn(_this, _ret); - } - return _inherits(Text, _Component), _createClass(Text, [ { - key: "componentWillMount", - value: function() { - this.updateWordsByLines(this.props, !0); - } - }, { - key: "componentWillReceiveProps", - value: function(nextProps) { - var needCalculate = this.props.children !== nextProps.children || this.props.style !== nextProps.style; - this.updateWordsByLines(nextProps, needCalculate); + }; + }, + "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js": function(e, t) { + e.exports = function(e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) for (var n in e) if (Object.prototype.hasOwnProperty.call(e, n)) { + var r = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(e, n) : {}; + r.get || r.set ? Object.defineProperty(t, n, r) : t[n] = e[n]; + } + return t.default = e, t; + }; + }, + "./node_modules/@babel/runtime/helpers/iterableToArray.js": function(e, t) { + e.exports = function(e) { + if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e); + }; + }, + "./node_modules/@babel/runtime/helpers/nonIterableSpread.js": function(e, t) { + e.exports = function() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + }; + }, + "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js": function(e, t, n) { + var r = n("./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js"); + e.exports = function(e, t) { + if (null == e) return {}; + var n, o, a = r(e, t); + if (Object.getOwnPropertySymbols) { + var i = Object.getOwnPropertySymbols(e); + for (o = 0; o < i.length; o++) n = i[o], t.indexOf(n) >= 0 || Object.prototype.propertyIsEnumerable.call(e, n) && (a[n] = e[n]); } - }, { - key: "updateWordsByLines", - value: function(props, needCalculate) { - if (!props.width && !props.scaleToFit || Object(__WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.n)()) this.updateWordsWithoutCalculate(props); else { - if (needCalculate) { - var wordWidths = calculateWordWidths(props); - if (!wordWidths) return void this.updateWordsWithoutCalculate(props); - var wordsWithComputedWidth = wordWidths.wordsWithComputedWidth, spaceWidth = wordWidths.spaceWidth; - this.wordsWithComputedWidth = wordsWithComputedWidth, this.spaceWidth = spaceWidth; - } - var wordsByLines = this.calculateWordsByLines(this.wordsWithComputedWidth, this.spaceWidth, props.width); - this.setState({ - wordsByLines: wordsByLines + return a; + }; + }, + "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js": function(e, t) { + e.exports = function(e, t) { + if (null == e) return {}; + var n, r, o = {}, a = Object.keys(e); + for (r = 0; r < a.length; r++) n = a[r], t.indexOf(n) >= 0 || (o[n] = e[n]); + return o; + }; + }, + "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js": function(e, t, n) { + var r = n("./node_modules/@babel/runtime/helpers/typeof.js"), o = n("./node_modules/@babel/runtime/helpers/assertThisInitialized.js"); + e.exports = function(e, t) { + return !t || "object" !== r(t) && "function" != typeof t ? o(e) : t; + }; + }, + "./node_modules/@babel/runtime/helpers/setPrototypeOf.js": function(e, t) { + function n(t, r) { + return e.exports = n = Object.setPrototypeOf || function(e, t) { + return e.__proto__ = t, e; + }, n(t, r); + } + e.exports = n; + }, + "./node_modules/@babel/runtime/helpers/toConsumableArray.js": function(e, t, n) { + var r = n("./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js"), o = n("./node_modules/@babel/runtime/helpers/iterableToArray.js"), a = n("./node_modules/@babel/runtime/helpers/nonIterableSpread.js"); + e.exports = function(e) { + return r(e) || o(e) || a(); + }; + }, + "./node_modules/@babel/runtime/helpers/typeof.js": function(e, t) { + function n(e) { + return (n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function r(t) { + return "function" == typeof Symbol && "symbol" === n(Symbol.iterator) ? e.exports = r = function(e) { + return n(e); + } : e.exports = r = function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : n(e); + }, r(t); + } + e.exports = r; + }, + "./node_modules/@fortawesome/fontawesome-svg-core/index.es.js": function(e, t, n) { + "use strict"; + (function(e, r) { + function o(e) { + return (o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { + return typeof e; + } : function(e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; + })(e); + } + function a(e, t) { + for (var n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), + Object.defineProperty(e, r.key, r); + } + } + function i(e, t, n) { + return t in e ? Object.defineProperty(e, t, { + value: n, + enumerable: !0, + configurable: !0, + writable: !0 + }) : e[t] = n, e; + } + function s(e) { + for (var t = 1; t < arguments.length; t++) { + var n = null != arguments[t] ? arguments[t] : {}, r = Object.keys(n); + "function" == typeof Object.getOwnPropertySymbols && (r = r.concat(Object.getOwnPropertySymbols(n).filter(function(e) { + return Object.getOwnPropertyDescriptor(n, e).enumerable; + }))), r.forEach(function(t) { + i(e, t, n[t]); }); } + return e; } - }, { - key: "updateWordsWithoutCalculate", - value: function(props) { - var words = __WEBPACK_IMPORTED_MODULE_0_lodash_isNil___default()(props.children) ? [] : props.children.toString().split(BREAKING_SPACES); - this.setState({ - wordsByLines: [ { - words: words - } ] + function l(e, t) { + return function(e) { + if (Array.isArray(e)) return e; + }(e) || function(e, t) { + var n = [], r = !0, o = !1, a = void 0; + try { + for (var i, s = e[Symbol.iterator](); !(r = (i = s.next()).done) && (n.push(i.value), + !t || n.length !== t); r = !0) ; + } catch (e) { + o = !0, a = e; + } finally { + try { + r || null == s.return || s.return(); + } finally { + if (o) throw a; + } + } + return n; + }(e, t) || function() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + }(); + } + n.d(t, "a", function() { + return Ce; + }), n.d(t, "b", function() { + return Te; + }); + var u = function() {}, c = {}, d = {}, f = { + mark: u, + measure: u + }; + try { + "undefined" != typeof window && (c = window), "undefined" != typeof document && (d = document), + "undefined" != typeof MutationObserver && MutationObserver, "undefined" != typeof performance && (f = performance); + } catch (e) {} + var p = (c.navigator || {}).userAgent, h = void 0 === p ? "" : p, _ = c, m = d, y = f, b = (_.document, + !!m.documentElement && !!m.head && "function" == typeof m.addEventListener && "function" == typeof m.createElement), v = (~h.indexOf("MSIE") || h.indexOf("Trident/"), + "fa"), g = "svg-inline--fa", j = "data-fa-i2svg", x = (function() { + try { + } catch (e) { + return !1; + } + }(), [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]), O = x.concat([ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]), w = ([ "xs", "sm", "lg", "fw", "ul", "li", "border", "pull-left", "pull-right", "spin", "pulse", "rotate-90", "rotate-180", "rotate-270", "flip-horizontal", "flip-vertical", "flip-both", "stack", "stack-1x", "stack-2x", "inverse", "layers", "layers-text", "layers-counter" ].concat(x.map(function(e) { + return "".concat(e, "x"); + })).concat(O.map(function(e) { + return "w-".concat(e); + })), _.FontAwesomeConfig || {}); + if (m && "function" == typeof m.querySelector) { + [ [ "data-family-prefix", "familyPrefix" ], [ "data-replacement-class", "replacementClass" ], [ "data-auto-replace-svg", "autoReplaceSvg" ], [ "data-auto-add-css", "autoAddCss" ], [ "data-auto-a11y", "autoA11y" ], [ "data-search-pseudo-elements", "searchPseudoElements" ], [ "data-observe-mutations", "observeMutations" ], [ "data-mutate-approach", "mutateApproach" ], [ "data-keep-original-source", "keepOriginalSource" ], [ "data-measure-performance", "measurePerformance" ], [ "data-show-missing-icons", "showMissingIcons" ] ].forEach(function(e) { + var t = l(e, 2), n = t[0], r = t[1], o = function(e) { + return "" === e || "false" !== e && ("true" === e || e); + }(function(e) { + var t = m.querySelector("script[" + e + "]"); + if (t) return t.getAttribute(e); + }(n)); + null != o && (w[r] = o); }); } - }, { - key: "calculateWordsByLines", - value: function(wordsWithComputedWidth, spaceWidth, lineWidth) { - var scaleToFit = this.props.scaleToFit; - return wordsWithComputedWidth.reduce(function(result, _ref2) { - var word = _ref2.word, width = _ref2.width, currentLine = result[result.length - 1]; - if (currentLine && (null == lineWidth || scaleToFit || currentLine.width + width + spaceWidth < lineWidth)) currentLine.words.push(word), - currentLine.width += width + spaceWidth; else { - var newLine = { - words: [ word ], - width: width - }; - result.push(newLine); + var E = s({}, { + familyPrefix: v, + replacementClass: g, + autoReplaceSvg: !0, + autoAddCss: !0, + autoA11y: !0, + searchPseudoElements: !1, + observeMutations: !0, + mutateApproach: "async", + keepOriginalSource: !0, + measurePerformance: !1, + showMissingIcons: !0 + }, w); + E.autoReplaceSvg || (E.observeMutations = !1); + var M = s({}, E); + _.FontAwesomeConfig = M; + var P = _ || {}; + P.___FONT_AWESOME___ || (P.___FONT_AWESOME___ = {}), P.___FONT_AWESOME___.styles || (P.___FONT_AWESOME___.styles = {}), + P.___FONT_AWESOME___.hooks || (P.___FONT_AWESOME___.hooks = {}), P.___FONT_AWESOME___.shims || (P.___FONT_AWESOME___.shims = []); + var k = P.___FONT_AWESOME___, T = []; + b && ((m.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(m.readyState) || m.addEventListener("DOMContentLoaded", function e() { + m.removeEventListener("DOMContentLoaded", e), 1, T.map(function(e) { + return e(); + }); + })); + var C, S = "pending", D = "settled", A = "fulfilled", I = "rejected", R = function() {}, L = void 0 !== e && void 0 !== e.process && "function" == typeof e.process.emit, N = void 0 === r ? setTimeout : r, B = []; + function U() { + for (var e = 0; e < B.length; e++) B[e][0](B[e][1]); + B = [], C = !1; + } + function W(e, t) { + B.push([ e, t ]), C || (C = !0, N(U, 0)); + } + function z(e) { + var t = e.owner, n = t._state, r = t._data, o = e[n], a = e.then; + if ("function" == typeof o) { + n = A; + try { + r = o(r); + } catch (e) { + q(a, e); } - return result; - }, []); + } + K(a, r) || (n === A && F(a, r), n === I && q(a, r)); } - }, { - key: "render", - value: function() { - var _props = this.props, dx = _props.dx, dy = _props.dy, textAnchor = _props.textAnchor, verticalAnchor = _props.verticalAnchor, scaleToFit = _props.scaleToFit, angle = _props.angle, lineHeight = _props.lineHeight, capHeight = _props.capHeight, className = _props.className, textProps = _objectWithoutProperties(_props, [ "dx", "dy", "textAnchor", "verticalAnchor", "scaleToFit", "angle", "lineHeight", "capHeight", "className" ]), wordsByLines = this.state.wordsByLines; - if (!Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.g)(textProps.x) || !Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.g)(textProps.y)) return null; - var x = textProps.x + (Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.h)(dx) ? dx : 0), y = textProps.y + (Object(__WEBPACK_IMPORTED_MODULE_5__util_DataUtils__.h)(dy) ? dy : 0), startDy = void 0; - switch (verticalAnchor) { - case "start": - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + capHeight + ")"); - break; - - case "middle": - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + (wordsByLines.length - 1) / 2 + " * -" + lineHeight + " + (" + capHeight + " / 2))"); - break; - - default: - startDy = __WEBPACK_IMPORTED_MODULE_3_reduce_css_calc___default()("calc(" + (wordsByLines.length - 1) + " * -" + lineHeight + ")"); - } - var transforms = []; - if (scaleToFit) { - var lineWidth = wordsByLines[0].width; - transforms.push("scale(" + this.props.width / lineWidth + ")"); - } - return angle && transforms.push("rotate(" + angle + ", " + x + ", " + y + ")"), - transforms.length && (textProps.transform = transforms.join(" ")), __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement("text", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.k)(textProps), { - x: x, - y: y, - className: __WEBPACK_IMPORTED_MODULE_4_classnames___default()("recharts-text", className), - textAnchor: textAnchor - }), wordsByLines.map(function(line, index) { - return __WEBPACK_IMPORTED_MODULE_1_react___default.a.createElement("tspan", { - x: x, - dy: 0 === index ? startDy : lineHeight, - key: index - }, line.words.join(" ")); - })); + function K(e, t) { + var n; + try { + if (e === t) throw new TypeError("A promises callback cannot return that same promise."); + if (t && ("function" == typeof t || "object" === o(t))) { + var r = t.then; + if ("function" == typeof r) return r.call(t, function(r) { + n || (n = !0, t === r ? H(e, r) : F(e, r)); + }, function(t) { + n || (n = !0, q(e, t)); + }), !0; + } + } catch (t) { + return n || q(e, t), !0; + } + return !1; } - } ]), Text; - }(__WEBPACK_IMPORTED_MODULE_1_react__.Component), _class.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_6__util_ReactUtils__.c, { - scaleToFit: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.bool, - angle: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.number, - textAnchor: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.oneOf([ "start", "middle", "end", "inherit" ]), - verticalAnchor: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.oneOf([ "start", "middle", "end" ]), - style: __WEBPACK_IMPORTED_MODULE_2_prop_types___default.a.object - }), _class.defaultProps = { - x: 0, - y: 0, - lineHeight: "1em", - capHeight: "0.71em", - scaleToFit: !1, - textAnchor: "start", - verticalAnchor: "end" - }, _temp2); - __webpack_exports__.a = Text; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_require__.d(__webpack_exports__, "a", function() { - return map; - }), __webpack_require__.d(__webpack_exports__, "b", function() { - return slice; - }); - var array = Array.prototype, map = array.map, slice = array.slice; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 + function F(e, t) { + e !== t && K(e, t) || H(e, t); } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), Dot = Object(__WEBPACK_IMPORTED_MODULE_3__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function Dot() { - return _classCallCheck(this, Dot), _possibleConstructorReturn(this, (Dot.__proto__ || Object.getPrototypeOf(Dot)).apply(this, arguments)); - } - return _inherits(Dot, _Component), _createClass(Dot, [ { - key: "render", - value: function() { - var _props = this.props, cx = _props.cx, cy = _props.cy, r = _props.r, className = _props.className, layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-dot", className); - return cx === +cx && cy === +cy && r === +r ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("circle", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_4__util_ReactUtils__.e)(this.props, null, !0), { - className: layerClass, - cx: cx, - cy: cy, - r: r - })) : null; - } - } ]), Dot; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "Dot", _class2.propTypes = { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - cx: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - cy: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - r: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }, _class = _temp)) || _class; - __webpack_exports__.a = Dot; -}, function(module, exports, __webpack_require__) { - var IObject = __webpack_require__(146), defined = __webpack_require__(148); - module.exports = function(it) { - return IObject(defined(it)); - }; -}, function(module, exports, __webpack_require__) { - var defined = __webpack_require__(148); - module.exports = function(it) { - return Object(defined(it)); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), _warning = __webpack_require__(11), _warning2 = _interopRequireDefault(_warning), _toCss = __webpack_require__(163), _toCss2 = _interopRequireDefault(_toCss), _toCssValue = __webpack_require__(110), _toCssValue2 = _interopRequireDefault(_toCssValue), StyleRule = function() { - function StyleRule(key, style, options) { - _classCallCheck(this, StyleRule), this.type = "style", this.isProcessed = !1; - var sheet = options.sheet, Renderer = options.Renderer, selector = options.selector; - this.key = key, this.options = options, this.style = style, selector && (this.selectorText = selector), - this.renderer = sheet ? sheet.renderer : new Renderer(); - } - return _createClass(StyleRule, [ { - key: "prop", - value: function(name, value) { - if (void 0 === value) return this.style[name]; - if (this.style[name] === value) return this; - value = this.options.jss.plugins.onChangeValue(value, name, this); - var isEmpty = null == value || !1 === value, isDefined = name in this.style; - if (isEmpty && !isDefined) return this; - var remove = isEmpty && isDefined; - if (remove ? delete this.style[name] : this.style[name] = value, this.renderable) return remove ? this.renderer.removeProperty(this.renderable, name) : this.renderer.setProperty(this.renderable, name, value), - this; - var sheet = this.options.sheet; - return sheet && sheet.attached && (0, _warning2.default)(!1, 'Rule is not linked. Missing sheet option "link: true".'), - this; + function H(e, t) { + e._state === S && (e._state = D, e._data = t, W(V, e)); } - }, { - key: "applyTo", - value: function(renderable) { - var json = this.toJSON(); - for (var prop in json) this.renderer.setProperty(renderable, prop, json[prop]); - return this; + function q(e, t) { + e._state === S && (e._state = D, e._data = t, W(X, e)); } - }, { - key: "toJSON", - value: function() { - var json = {}; - for (var prop in this.style) { - var value = this.style[prop]; - "object" !== (void 0 === value ? "undefined" : _typeof(value)) ? json[prop] = value : Array.isArray(value) && (json[prop] = (0, - _toCssValue2.default)(value)); - } - return json; + function G(e) { + e._then = e._then.forEach(z); } - }, { - key: "toString", - value: function(options) { - var sheet = this.options.sheet, link = !!sheet && sheet.options.link, opts = link ? _extends({}, options, { - allowEmpty: !0 - }) : options; - return (0, _toCss2.default)(this.selector, this.style, opts); + function V(e) { + e._state = A, G(e); } - }, { - key: "selector", - set: function(selector) { - if (selector !== this.selectorText && (this.selectorText = selector, this.renderable)) { - if (!this.renderer.setSelector(this.renderable, selector) && this.renderable) { - var renderable = this.renderer.replaceRule(this.renderable, this); - renderable && (this.renderable = renderable); - } - } - }, - get: function() { - return this.selectorText; - } - } ]), StyleRule; - }(); - exports.default = StyleRule; -}, function(module, exports, __webpack_require__) { - function isSymbol(value) { - return "symbol" == typeof value || isObjectLike(value) && baseGetTag(value) == symbolTag; - } - var baseGetTag = __webpack_require__(41), isObjectLike = __webpack_require__(42), symbolTag = "[object Symbol]"; - module.exports = isSymbol; -}, function(module, exports) { - function identity(value) { - return value; - } - module.exports = identity; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 + function X(t) { + t._state = I, G(t), !t._handled && L && e.process.emit("unhandledRejection", t._data, t); } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp2, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3_react_smooth__ = __webpack_require__(33), __WEBPACK_IMPORTED_MODULE_3_react_smooth___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_react_smooth__), __WEBPACK_IMPORTED_MODULE_4__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), getRectangePath = function(x, y, width, height, radius) { - var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2), sign = height >= 0 ? 1 : -1, clockWise = height >= 0 ? 1 : 0, path = void 0; - if (maxRadius > 0 && radius instanceof Array) { - for (var newRadius = [], i = 0; i < 4; i++) newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i]; - path = "M" + x + "," + (y + sign * newRadius[0]), newRadius[0] > 0 && (path += "A " + newRadius[0] + "," + newRadius[0] + ",0,0," + clockWise + "," + (x + newRadius[0]) + "," + y), - path += "L " + (x + width - newRadius[1]) + "," + y, newRadius[1] > 0 && (path += "A " + newRadius[1] + "," + newRadius[1] + ",0,0," + clockWise + ",\n " + (x + width) + "," + (y + sign * newRadius[1])), - path += "L " + (x + width) + "," + (y + height - sign * newRadius[2]), newRadius[2] > 0 && (path += "A " + newRadius[2] + "," + newRadius[2] + ",0,0," + clockWise + ",\n " + (x + width - newRadius[2]) + "," + (y + height)), - path += "L " + (x + newRadius[3]) + "," + (y + height), newRadius[3] > 0 && (path += "A " + newRadius[3] + "," + newRadius[3] + ",0,0," + clockWise + ",\n " + x + "," + (y + height - sign * newRadius[3])), - path += "Z"; - } else if (maxRadius > 0 && radius === +radius && radius > 0) { - var _newRadius = Math.min(maxRadius, radius); - path = "M " + x + "," + (y + sign * _newRadius) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + _newRadius) + "," + y + "\n L " + (x + width - _newRadius) + "," + y + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + width) + "," + (y + sign * _newRadius) + "\n L " + (x + width) + "," + (y + height - sign * _newRadius) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + (x + width - _newRadius) + "," + (y + height) + "\n L " + (x + _newRadius) + "," + (y + height) + "\n A " + _newRadius + "," + _newRadius + ",0,0," + clockWise + "," + x + "," + (y + height - sign * _newRadius) + " Z"; - } else path = "M " + x + "," + y + " h " + width + " v " + height + " h " + -width + " Z"; - return path; - }, Rectangle = Object(__WEBPACK_IMPORTED_MODULE_4__util_PureRender__.a)((_temp2 = _class2 = function(_Component) { - function Rectangle() { - var _ref, _temp, _this, _ret; - _classCallCheck(this, Rectangle); - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key]; - return _temp = _this = _possibleConstructorReturn(this, (_ref = Rectangle.__proto__ || Object.getPrototypeOf(Rectangle)).call.apply(_ref, [ this ].concat(args))), - _this.state = { - totalLength: -1 - }, _ret = _temp, _possibleConstructorReturn(_this, _ret); - } - return _inherits(Rectangle, _Component), _createClass(Rectangle, [ { - key: "componentDidMount", - value: function() { - if (this.node && this.node.getTotalLength) try { - var totalLength = this.node.getTotalLength(); - totalLength && this.setState({ - totalLength: totalLength - }); - } catch (err) {} + function $(t) { + e.process.emit("rejectionHandled", t); } - }, { - key: "render", - value: function() { - var _this2 = this, _props = this.props, x = _props.x, y = _props.y, width = _props.width, height = _props.height, radius = _props.radius, className = _props.className, totalLength = this.state.totalLength, _props2 = this.props, animationEasing = _props2.animationEasing, animationDuration = _props2.animationDuration, animationBegin = _props2.animationBegin, isAnimationActive = _props2.isAnimationActive, isUpdateAnimationActive = _props2.isUpdateAnimationActive; - if (x !== +x || y !== +y || width !== +width || height !== +height || 0 === width || 0 === height) return null; - var layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-rectangle", className); - return isUpdateAnimationActive ? __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_smooth___default.a, { - canBegin: totalLength > 0, - from: { - width: width, - height: height, - x: x, - y: y - }, - to: { - width: width, - height: height, - x: x, - y: y - }, - duration: animationDuration, - animationEasing: animationEasing, - isActive: isUpdateAnimationActive - }, function(_ref2) { - var currWidth = _ref2.width, currHeight = _ref2.height, currX = _ref2.x, currY = _ref2.y; - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_3_react_smooth___default.a, { - canBegin: totalLength > 0, - from: "0px " + (-1 === totalLength ? 1 : totalLength) + "px", - to: totalLength + "px 0px", - attributeName: "strokeDasharray", - begin: animationBegin, - duration: animationDuration, - isActive: isAnimationActive, - easing: animationEasing - }, __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.k)(_this2.props), Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.e)(_this2.props), { - className: layerClass, - d: getRectangePath(currX, currY, currWidth, currHeight, radius), - ref: function(node) { - _this2.node = node; - } - }))); - }) : __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.e)(this.props), { - className: layerClass, - d: getRectangePath(x, y, width, height, radius) - })); - } - } ]), Rectangle; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "Rectangle", - _class2.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.c, __WEBPACK_IMPORTED_MODULE_5__util_ReactUtils__.a, { - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - x: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - radius: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array ]), - isAnimationActive: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - isUpdateAnimationActive: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - animationBegin: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - animationDuration: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - animationEasing: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "ease", "ease-in", "ease-out", "ease-in-out", "linear" ]) - }), _class2.defaultProps = { - x: 0, - y: 0, - width: 0, - height: 0, - radius: 0, - isAnimationActive: !1, - isUpdateAnimationActive: !1, - animationBegin: 0, - animationDuration: 1500, - animationEasing: "ease" - }, _class = _temp2)) || _class; - __webpack_exports__.a = Rectangle; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_lodash_isArray__ = __webpack_require__(13), __WEBPACK_IMPORTED_MODULE_0_lodash_isArray___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isArray__), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__ = __webpack_require__(8), __WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction__), __WEBPACK_IMPORTED_MODULE_2_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_2_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_react__), __WEBPACK_IMPORTED_MODULE_3_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_3_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_prop_types__), __WEBPACK_IMPORTED_MODULE_4_d3_shape__ = __webpack_require__(182), __WEBPACK_IMPORTED_MODULE_5_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_5_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_classnames__), __WEBPACK_IMPORTED_MODULE_6__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__ = __webpack_require__(4), __WEBPACK_IMPORTED_MODULE_8__util_DataUtils__ = __webpack_require__(9), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), CURVE_FACTORIES = { - curveBasisClosed: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.c, - curveBasisOpen: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.d, - curveBasis: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.b, - curveLinearClosed: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.f, - curveLinear: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.e, - curveMonotoneX: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.g, - curveMonotoneY: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.h, - curveNatural: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.i, - curveStep: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.j, - curveStepAfter: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.k, - curveStepBefore: __WEBPACK_IMPORTED_MODULE_4_d3_shape__.l - }, defined = function(p) { - return p.x === +p.x && p.y === +p.y; - }, getX = function(p) { - return p.x; - }, getY = function(p) { - return p.y; - }, getCurveFactory = function(type, layout) { - if (__WEBPACK_IMPORTED_MODULE_1_lodash_isFunction___default()(type)) return type; - var name = "curve" + type.slice(0, 1).toUpperCase() + type.slice(1); - return "curveMonotone" === name && layout ? CURVE_FACTORIES[name + ("vertical" === layout ? "Y" : "X")] : CURVE_FACTORIES[name] || __WEBPACK_IMPORTED_MODULE_4_d3_shape__.e; - }, Curve = Object(__WEBPACK_IMPORTED_MODULE_6__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function Curve() { - return _classCallCheck(this, Curve), _possibleConstructorReturn(this, (Curve.__proto__ || Object.getPrototypeOf(Curve)).apply(this, arguments)); - } - return _inherits(Curve, _Component), _createClass(Curve, [ { - key: "getPath", - value: function() { - var _props = this.props, type = _props.type, points = _props.points, baseLine = _props.baseLine, layout = _props.layout, connectNulls = _props.connectNulls, curveFactory = getCurveFactory(type, layout), formatPoints = connectNulls ? points.filter(function(entry) { - return defined(entry); - }) : points, lineFunction = void 0; - if (__WEBPACK_IMPORTED_MODULE_0_lodash_isArray___default()(baseLine)) { - var areaPoints = formatPoints.map(function(entry, index) { - return _extends({}, entry, { - base: baseLine[index] - }); - }); - return lineFunction = "vertical" === layout ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().y(getY).x1(getX).x0(function(d) { - return d.base.x; - }) : Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().x(getX).y1(getY).y0(function(d) { - return d.base.y; - }), lineFunction.defined(defined).curve(curveFactory), lineFunction(areaPoints); + function Y(e) { + if ("function" != typeof e) throw new TypeError("Promise resolver " + e + " is not a function"); + if (this instanceof Y == !1) throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); + this._then = [], function(e, t) { + function n(e) { + q(t, e); + } + try { + e(function(e) { + F(t, e); + }, n); + } catch (e) { + n(e); + } + }(e, this); + } + Y.prototype = { + constructor: Y, + _state: S, + _then: null, + _data: void 0, + _handled: !1, + then: function(e, t) { + var n = { + owner: this, + then: new this.constructor(R), + fulfilled: e, + rejected: t + }; + return !t && !e || this._handled || (this._handled = !0, this._state === I && L && W($, this)), + this._state === A || this._state === I ? W(z, n) : this._then.push(n), n.then; + }, + catch: function(e) { + return this.then(null, e); + } + }, Y.all = function(e) { + if (!Array.isArray(e)) throw new TypeError("You must pass an array to Promise.all()."); + return new Y(function(t, n) { + var r = [], o = 0; + function a(e) { + return o++, function(n) { + r[e] = n, --o || t(r); + }; + } + for (var i, s = 0; s < e.length; s++) (i = e[s]) && "function" == typeof i.then ? i.then(a(s), n) : r[s] = i; + o || t(r); + }); + }, Y.race = function(e) { + if (!Array.isArray(e)) throw new TypeError("You must pass an array to Promise.race()."); + return new Y(function(t, n) { + for (var r, o = 0; o < e.length; o++) (r = e[o]) && "function" == typeof r.then ? r.then(t, n) : t(r); + }); + }, Y.resolve = function(e) { + return e && "object" === o(e) && e.constructor === Y ? e : new Y(function(t) { + t(e); + }); + }, Y.reject = function(e) { + return new Y(function(t, n) { + n(e); + }); + }; + "function" == typeof Promise && Promise; + var Q = { + size: 16, + x: 0, + y: 0, + rotate: 0, + flipX: !1, + flipY: !1 + }; + function J(e) { + if (e && b) { + var t = m.createElement("style"); + t.setAttribute("type", "text/css"), t.innerHTML = e; + for (var n = m.head.childNodes, r = null, o = n.length - 1; o > -1; o--) { + var a = n[o], i = (a.tagName || "").toUpperCase(); + [ "STYLE", "LINK" ].indexOf(i) > -1 && (r = a); + } + return m.head.insertBefore(t, r), e; } - return lineFunction = "vertical" === layout && Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(baseLine) ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().y(getY).x1(getX).x0(baseLine) : Object(__WEBPACK_IMPORTED_MODULE_8__util_DataUtils__.h)(baseLine) ? Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.a)().x(getX).y1(getY).y0(baseLine) : Object(__WEBPACK_IMPORTED_MODULE_4_d3_shape__.m)().x(getX).y(getY), - lineFunction.defined(defined).curve(curveFactory), lineFunction(formatPoints); - } - }, { - key: "render", - value: function() { - var _props2 = this.props, className = _props2.className, points = _props2.points, path = _props2.path, pathRef = _props2.pathRef; - if (!(points && points.length || path)) return null; - var realPath = points && points.length ? this.getPath() : path; - return __WEBPACK_IMPORTED_MODULE_2_react___default.a.createElement("path", _extends({}, Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.k)(this.props), Object(__WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.e)(this.props, null, !0), { - className: __WEBPACK_IMPORTED_MODULE_5_classnames___default()("recharts-curve", className), - d: realPath, - ref: pathRef - })); - } - } ]), Curve; - }(__WEBPACK_IMPORTED_MODULE_2_react__.Component), _class2.displayName = "Curve", - _class2.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_7__util_ReactUtils__.c, { - className: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string, - type: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOf([ "basis", "basisClosed", "basisOpen", "linear", "linearClosed", "natural", "monotoneX", "monotoneY", "monotone", "step", "stepBefore", "stepAfter" ]), __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func ]), - layout: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOf([ "horizontal", "vertical" ]), - baseLine: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.array ]), - points: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.object), - connectNulls: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.bool, - path: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.string, - pathRef: __WEBPACK_IMPORTED_MODULE_3_prop_types___default.a.func - }), _class2.defaultProps = { - type: "linear", - points: [], - connectNulls: !1 - }, _class = _temp)) || _class; - __webpack_exports__.a = Curve; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(1)), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__util_PureRender__ = __webpack_require__(5), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), XAxis = Object(__WEBPACK_IMPORTED_MODULE_2__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function XAxis() { - return _classCallCheck(this, XAxis), _possibleConstructorReturn(this, (XAxis.__proto__ || Object.getPrototypeOf(XAxis)).apply(this, arguments)); - } - return _inherits(XAxis, _Component), _createClass(XAxis, [ { - key: "render", - value: function() { - return null; - } - } ]), XAxis; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "XAxis", - _class2.propTypes = { - allowDecimals: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - allowDuplicatedCategory: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - hide: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - name: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - unit: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - xAxisId: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - domain: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "dataMin", "dataMax" ]) ])), - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - mirror: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - orientation: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "top", "bottom" ]), - type: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "number", "category" ]), - ticks: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - tickCount: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - padding: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - left: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - right: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - allowDataOverflow: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - scale: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.d), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - tick: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.element ]), - axisLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - tickLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - minTickGap: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickSize: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - interval: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "preserveStart", "preserveEnd", "preserveStartEnd" ]) ]), - reversed: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool - }, _class2.defaultProps = { - allowDecimals: !0, - hide: !1, - orientation: "bottom", - width: 0, - height: 30, - mirror: !1, - xAxisId: 0, - tickCount: 5, - type: "category", - domain: [ 0, "auto" ], - padding: { - left: 0, - right: 0 - }, - allowDataOverflow: !1, - scale: "auto", - reversed: !1, - allowDuplicatedCategory: !0 - }, _class = _temp)) || _class; - __webpack_exports__.a = XAxis; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 - } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _class2, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(1)), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__util_PureRender__ = __webpack_require__(5), _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), YAxis = Object(__WEBPACK_IMPORTED_MODULE_2__util_PureRender__.a)((_temp = _class2 = function(_Component) { - function YAxis() { - return _classCallCheck(this, YAxis), _possibleConstructorReturn(this, (YAxis.__proto__ || Object.getPrototypeOf(YAxis)).apply(this, arguments)); - } - return _inherits(YAxis, _Component), _createClass(YAxis, [ { - key: "render", - value: function() { - return null; - } - } ]), YAxis; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class2.displayName = "YAxis", - _class2.propTypes = { - allowDecimals: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - allowDuplicatedCategory: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - hide: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - name: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - unit: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - yAxisId: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number ]), - domain: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "dataMin", "dataMax" ]) ])), - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - ticks: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - tickCount: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - mirror: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - orientation: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "left", "right" ]), - type: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "number", "category" ]), - padding: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - top: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - bottom: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - allowDataOverflow: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, - scale: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "auto", "linear", "pow", "sqrt", "log", "identity", "time", "band", "point", "ordinal", "quantile", "quantize", "utcTime", "sequential", "threshold" ]), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]), - tick: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.element ]), - axisLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - tickLine: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object ]), - minTickGap: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - tickSize: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - interval: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOf([ "preserveStart", "preserveEnd", "preserveStartEnd" ]) ]), - reversed: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.bool - }, _class2.defaultProps = { - allowDuplicatedCategory: !0, - allowDecimals: !0, - hide: !1, - orientation: "left", - width: 60, - height: 0, - mirror: !1, - yAxisId: 0, - tickCount: 5, - type: "number", - domain: [ 0, "auto" ], - padding: { - top: 0, - bottom: 0 - }, - allowDataOverflow: !1, - scale: "auto", - reversed: !1 - }, _class = _temp)) || _class; - __webpack_exports__.a = YAxis; -}, function(module, exports, __webpack_require__) { - "use strict"; - function toObject(val) { - if (null === val || void 0 === val) throw new TypeError("Object.assign cannot be called with null or undefined"); - return Object(val); - } - var getOwnPropertySymbols = Object.getOwnPropertySymbols, hasOwnProperty = Object.prototype.hasOwnProperty, propIsEnumerable = Object.prototype.propertyIsEnumerable; - module.exports = function() { - try { - if (!Object.assign) return !1; - var test1 = new String("abc"); - if (test1[5] = "de", "5" === Object.getOwnPropertyNames(test1)[0]) return !1; - for (var test2 = {}, i = 0; i < 10; i++) test2["_" + String.fromCharCode(i)] = i; - if ("0123456789" !== Object.getOwnPropertyNames(test2).map(function(n) { - return test2[n]; - }).join("")) return !1; - var test3 = {}; - return "abcdefghijklmnopqrst".split("").forEach(function(letter) { - test3[letter] = letter; - }), "abcdefghijklmnopqrst" === Object.keys(Object.assign({}, test3)).join(""); - } catch (err) { - return !1; - } - }() ? Object.assign : function(target, source) { - for (var from, symbols, to = toObject(target), s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - for (var key in from) hasOwnProperty.call(from, key) && (to[key] = from[key]); - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) propIsEnumerable.call(from, symbols[i]) && (to[symbols[i]] = from[symbols[i]]); - } - } - return to; - }; -}, function(module, exports) { - module.exports = function(bitmap, value) { - return { - enumerable: !(1 & bitmap), - configurable: !(2 & bitmap), - writable: !(4 & bitmap), - value: value - }; - }; -}, function(module, exports, __webpack_require__) { - var $keys = __webpack_require__(226), enumBugKeys = __webpack_require__(152); - module.exports = Object.keys || function(O) { - return $keys(O, enumBugKeys); - }; -}, function(module, exports) { - module.exports = {}; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function createBreakpoints(breakpoints) { - function up(key) { - return "@media (min-width:" + ("number" == typeof values[key] ? values[key] : key) + unit + ")"; - } - function down(key) { - var endIndex = keys.indexOf(key) + 1, upperbound = values[keys[endIndex]]; - return endIndex === keys.length ? up("xs") : "@media (max-width:" + (("number" == typeof upperbound && endIndex > 0 ? upperbound : key) - step / 100) + unit + ")"; - } - function between(start, end) { - var endIndex = keys.indexOf(end) + 1; - return endIndex === keys.length ? up(start) : "@media (min-width:" + values[start] + unit + ") and (max-width:" + (values[keys[endIndex]] - step / 100) + unit + ")"; - } - function only(key) { - return between(key, key); - } - function width(key) { - return values[key]; - } - var _breakpoints$values = breakpoints.values, values = void 0 === _breakpoints$values ? { - xs: 0, - sm: 600, - md: 960, - lg: 1280, - xl: 1920 - } : _breakpoints$values, _breakpoints$unit = breakpoints.unit, unit = void 0 === _breakpoints$unit ? "px" : _breakpoints$unit, _breakpoints$step = breakpoints.step, step = void 0 === _breakpoints$step ? 5 : _breakpoints$step, other = (0, - _objectWithoutProperties3.default)(breakpoints, [ "values", "unit", "step" ]); - return (0, _extends3.default)({ - keys: keys, - values: values, - up: up, - down: down, - between: between, - only: only, - width: width - }, other); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }), exports.keys = void 0; - var _extends2 = __webpack_require__(6), _extends3 = _interopRequireDefault(_extends2), _objectWithoutProperties2 = __webpack_require__(7), _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); - exports.default = createBreakpoints; - var keys = exports.keys = [ "xs", "sm", "md", "lg", "xl" ]; -}, function(module, exports, __webpack_require__) { - "use strict"; - exports.__esModule = !0; - var _getDisplayName = __webpack_require__(244), _getDisplayName2 = function(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - }(_getDisplayName), wrapDisplayName = function(BaseComponent, hocName) { - return hocName + "(" + (0, _getDisplayName2.default)(BaseComponent) + ")"; - }; - exports.default = wrapDisplayName; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), _createRule = __webpack_require__(111), _createRule2 = _interopRequireDefault(_createRule), _linkRule = __webpack_require__(249), _linkRule2 = _interopRequireDefault(_linkRule), _StyleRule = __webpack_require__(66), _StyleRule2 = _interopRequireDefault(_StyleRule), _escape = __webpack_require__(467), _escape2 = _interopRequireDefault(_escape), RuleList = function() { - function RuleList(options) { - _classCallCheck(this, RuleList), this.map = {}, this.raw = {}, this.index = [], - this.options = options, this.classes = options.classes; - } - return _createClass(RuleList, [ { - key: "add", - value: function(name, decl, options) { - var _options = this.options, parent = _options.parent, sheet = _options.sheet, jss = _options.jss, Renderer = _options.Renderer, generateClassName = _options.generateClassName; - options = _extends({ - classes: this.classes, - parent: parent, - sheet: sheet, - jss: jss, - Renderer: Renderer, - generateClassName: generateClassName - }, options), !options.selector && this.classes[name] && (options.selector = "." + (0, - _escape2.default)(this.classes[name])), this.raw[name] = decl; - var rule = (0, _createRule2.default)(name, decl, options), className = void 0; - !options.selector && rule instanceof _StyleRule2.default && (className = generateClassName(rule, sheet), - rule.selector = "." + (0, _escape2.default)(className)), this.register(rule, className); - var index = void 0 === options.index ? this.index.length : options.index; - return this.index.splice(index, 0, rule), rule; - } - }, { - key: "get", - value: function(name) { - return this.map[name]; - } - }, { - key: "remove", - value: function(rule) { - this.unregister(rule), this.index.splice(this.indexOf(rule), 1); - } - }, { - key: "indexOf", - value: function(rule) { - return this.index.indexOf(rule); } - }, { - key: "process", - value: function() { - var plugins = this.options.jss.plugins; - this.index.slice(0).forEach(plugins.onProcessRule, plugins); - } - }, { - key: "register", - value: function(rule, className) { - this.map[rule.key] = rule, rule instanceof _StyleRule2.default && (this.map[rule.selector] = rule, - className && (this.classes[rule.key] = className)); + var Z = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + function ee() { + for (var e = 12, t = ""; e-- > 0; ) t += Z[62 * Math.random() | 0]; + return t; } - }, { - key: "unregister", - value: function(rule) { - delete this.map[rule.key], rule instanceof _StyleRule2.default && (delete this.map[rule.selector], - delete this.classes[rule.key]); + function te(e) { + return "".concat(e).replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">"); } - }, { - key: "update", - value: function(name, data) { - var _options2 = this.options, plugins = _options2.jss.plugins, sheet = _options2.sheet; - if ("string" == typeof name) return void plugins.onUpdate(data, this.get(name), sheet); - for (var index = 0; index < this.index.length; index++) plugins.onUpdate(name, this.index[index], sheet); + function ne(e) { + return Object.keys(e || {}).reduce(function(t, n) { + return t + "".concat(n, ": ").concat(e[n], ";"); + }, ""); } - }, { - key: "link", - value: function(cssRules) { - for (var map = this.options.sheet.renderer.getUnescapedKeysMap(this.index), i = 0; i < cssRules.length; i++) { - var cssRule = cssRules[i], _key = this.options.sheet.renderer.getKey(cssRule); - map[_key] && (_key = map[_key]); - var rule = this.map[_key]; - rule && (0, _linkRule2.default)(rule, cssRule); - } + function re(e) { + return e.size !== Q.size || e.x !== Q.x || e.y !== Q.y || e.rotate !== Q.rotate || e.flipX || e.flipY; } - }, { - key: "toString", - value: function(options) { - for (var str = "", sheet = this.options.sheet, link = !!sheet && sheet.options.link, index = 0; index < this.index.length; index++) { - var rule = this.index[index], css = rule.toString(options); - (css || link) && (str && (str += "\n"), str += css); - } - return str; - } - } ]), RuleList; - }(); - exports.default = RuleList; -}, function(module, exports, __webpack_require__) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: !0 - }); - var _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, menuSkeletons = [ { - id: "home", - menu: { - title: "Home", - icon: "home" - } - }, { - id: "chain", - menu: { - title: "Chain", - icon: "link" - } - }, { - id: "txpool", - menu: { - title: "TxPool", - icon: "credit-card" - } - }, { - id: "network", - menu: { - title: "Network", - icon: "globe" - } - }, { - id: "system", - menu: { - title: "System", - icon: "tachometer" - } - }, { - id: "logs", - menu: { - title: "Logs", - icon: "list" - } - } ]; - exports.MENU = new Map(menuSkeletons.map(function(_ref) { - var id = _ref.id, menu = _ref.menu; - return [ id, _extends({ - id: id - }, menu) ]; - })), exports.DURATION = 200, exports.styles = { - light: { - color: "rgba(255, 255, 255, 0.54)" - } - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function Surface(props) { - var children = props.children, width = props.width, height = props.height, viewBox = props.viewBox, className = props.className, style = props.style, others = _objectWithoutProperties(props, [ "children", "width", "height", "viewBox", "className", "style" ]), svgView = viewBox || { - width: width, - height: height, - x: 0, - y: 0 - }, layerClass = __WEBPACK_IMPORTED_MODULE_2_classnames___default()("recharts-surface", className), attrs = Object(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.k)(others); - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("svg", _extends({}, attrs, { - className: layerClass, - width: width, - height: height, - style: style, - viewBox: svgView.x + " " + svgView.y + " " + svgView.width + " " + svgView.height, - version: "1.1" - }), children); - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2_classnames__ = __webpack_require__(3), __WEBPACK_IMPORTED_MODULE_2_classnames___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_classnames__), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, propTypes = { - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number.isRequired, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number.isRequired, - viewBox: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.shape({ - x: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - y: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - height: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }), - className: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - style: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - children: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.arrayOf(__WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node), __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.node ]) - }; - Surface.propTypes = propTypes, __webpack_exports__.a = Surface; -}, function(module, exports, __webpack_require__) { - var root = __webpack_require__(31), Symbol = root.Symbol; - module.exports = Symbol; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_path__ = __webpack_require__(633); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_path__.a; - }); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); - } - function asin(x) { - return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return abs; - }), __webpack_require__.d(__webpack_exports__, "d", function() { - return atan2; - }), __webpack_require__.d(__webpack_exports__, "e", function() { - return cos; - }), __webpack_require__.d(__webpack_exports__, "h", function() { - return max; - }), __webpack_require__.d(__webpack_exports__, "i", function() { - return min; - }), __webpack_require__.d(__webpack_exports__, "k", function() { - return sin; - }), __webpack_require__.d(__webpack_exports__, "l", function() { - return sqrt; - }), __webpack_require__.d(__webpack_exports__, "f", function() { - return epsilon; - }), __webpack_require__.d(__webpack_exports__, "j", function() { - return pi; - }), __webpack_require__.d(__webpack_exports__, "g", function() { - return halfPi; - }), __webpack_require__.d(__webpack_exports__, "m", function() { - return tau; - }), __webpack_exports__.b = acos, __webpack_exports__.c = asin; - var abs = Math.abs, atan2 = Math.atan2, cos = Math.cos, max = Math.max, min = Math.min, sin = Math.sin, sqrt = Math.sqrt, epsilon = 1e-12, pi = Math.PI, halfPi = pi / 2, tau = 2 * pi; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(series, order) { - if ((n = series.length) > 1) for (var j, s0, n, i = 1, s1 = series[order[0]], m = s1.length; i < n; ++i) for (s0 = s1, - s1 = series[order[i]], j = 0; j < m; ++j) s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(series) { - for (var n = series.length, o = new Array(n); --n >= 0; ) o[n] = n; - return o; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function Cell() { - return null; - } - var __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_1__util_ReactUtils__ = (__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), - __webpack_require__(4)), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }; - Cell.propTypes = _extends({}, __WEBPACK_IMPORTED_MODULE_1__util_ReactUtils__.c), - Cell.displayName = "Cell", __webpack_exports__.a = Cell; -}, function(module, exports, __webpack_require__) { - function baseIteratee(value) { - return "function" == typeof value ? value : null == value ? identity : "object" == typeof value ? isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value) : property(value); - } - var baseMatches = __webpack_require__(815), baseMatchesProperty = __webpack_require__(818), identity = __webpack_require__(68), isArray = __webpack_require__(13), property = __webpack_require__(822); - module.exports = baseIteratee; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(x) { - return null === x ? NaN : +x; - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function linearish(scale) { - var domain = scale.domain; - return scale.ticks = function(count) { - var d = domain(); - return Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.h)(d[0], d[d.length - 1], null == count ? 10 : count); - }, scale.tickFormat = function(count, specifier) { - return Object(__WEBPACK_IMPORTED_MODULE_3__tickFormat__.a)(domain(), count, specifier); - }, scale.nice = function(count) { - null == count && (count = 10); - var step, d = domain(), i0 = 0, i1 = d.length - 1, start = d[i0], stop = d[i1]; - return stop < start && (step = start, start = stop, stop = step, step = i0, i0 = i1, - i1 = step), step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count), - step > 0 ? (start = Math.floor(start / step) * step, stop = Math.ceil(stop / step) * step, - step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count)) : step < 0 && (start = Math.ceil(start * step) / step, - stop = Math.floor(stop * step) / step, step = Object(__WEBPACK_IMPORTED_MODULE_0_d3_array__.f)(start, stop, count)), - step > 0 ? (d[i0] = Math.floor(start / step) * step, d[i1] = Math.ceil(stop / step) * step, - domain(d)) : step < 0 && (d[i0] = Math.ceil(start * step) / step, d[i1] = Math.floor(stop * step) / step, - domain(d)), scale; - }, scale; - } - function linear() { - var scale = Object(__WEBPACK_IMPORTED_MODULE_2__continuous__.b)(__WEBPACK_IMPORTED_MODULE_2__continuous__.c, __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__.c); - return scale.copy = function() { - return Object(__WEBPACK_IMPORTED_MODULE_2__continuous__.a)(scale, linear()); - }, linearish(scale); - } - __webpack_exports__.b = linearish, __webpack_exports__.a = linear; - var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(37), __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(92), __WEBPACK_IMPORTED_MODULE_2__continuous__ = __webpack_require__(137), __WEBPACK_IMPORTED_MODULE_3__tickFormat__ = __webpack_require__(883); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__src_value__ = __webpack_require__(206); - __webpack_require__.d(__webpack_exports__, "a", function() { - return __WEBPACK_IMPORTED_MODULE_0__src_value__.a; - }); - var __WEBPACK_IMPORTED_MODULE_5__src_number__ = (__webpack_require__(349), __webpack_require__(209), - __webpack_require__(347), __webpack_require__(350), __webpack_require__(136)); - __webpack_require__.d(__webpack_exports__, "c", function() { - return __WEBPACK_IMPORTED_MODULE_5__src_number__.a; - }); - var __WEBPACK_IMPORTED_MODULE_7__src_round__ = (__webpack_require__(351), __webpack_require__(873)); - __webpack_require__.d(__webpack_exports__, "d", function() { - return __WEBPACK_IMPORTED_MODULE_7__src_round__.a; - }); - var __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__ = (__webpack_require__(352), __webpack_require__(874), - __webpack_require__(877), __webpack_require__(346), __webpack_require__(878), __webpack_require__(879), - __webpack_require__(880), __webpack_require__(881)); - __webpack_require__.d(__webpack_exports__, "b", function() { - return __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__.a; - }); - __webpack_require__(882); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function linear(a, d) { - return function(t) { - return a + t * d; - }; - } - function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; - } - function hue(a, b) { - var d = b - a; - return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - } - function gamma(y) { - return 1 == (y = +y) ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - }; - } - function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : Object(__WEBPACK_IMPORTED_MODULE_0__constant__.a)(isNaN(a) ? b : a); - } - __webpack_exports__.c = hue, __webpack_exports__.b = gamma, __webpack_exports__.a = nogamma; - var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(348); -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__.a = function(s) { - return s.match(/.{6}/g).map(function(x) { - return "#" + x; - }); - }; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _objectWithoutProperties(obj, keys) { - var target = {}; - for (var i in obj) keys.indexOf(i) >= 0 || Object.prototype.hasOwnProperty.call(obj, i) && (target[i] = obj[i]); - return target; - } - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - } - function _possibleConstructorReturn(self, call) { - if (!self) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - return !call || "object" != typeof call && "function" != typeof call ? self : call; - } - function _inherits(subClass, superClass) { - if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: !1, - writable: !0, - configurable: !0 + function oe(e) { + var t = e.transform, n = e.containerWidth, r = e.iconWidth, o = { + transform: "translate(".concat(n / 2, " 256)") + }, a = "translate(".concat(32 * t.x, ", ").concat(32 * t.y, ") "), i = "scale(".concat(t.size / 16 * (t.flipX ? -1 : 1), ", ").concat(t.size / 16 * (t.flipY ? -1 : 1), ") "), s = "rotate(".concat(t.rotate, " 0 0)"); + return { + outer: o, + inner: { + transform: "".concat(a, " ").concat(i, " ").concat(s) + }, + path: { + transform: "translate(".concat(r / 2 * -1, " -256)") + } + }; } - }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass); - } - var _class, _temp, __WEBPACK_IMPORTED_MODULE_0_react__ = __webpack_require__(0), __WEBPACK_IMPORTED_MODULE_0_react___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_react__), __WEBPACK_IMPORTED_MODULE_1_prop_types__ = __webpack_require__(1), __WEBPACK_IMPORTED_MODULE_1_prop_types___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_prop_types__), __WEBPACK_IMPORTED_MODULE_2__container_Layer__ = __webpack_require__(14), __WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__ = __webpack_require__(4), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, _createClass = function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, - "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), - Constructor; - }; - }(), ErrorBar = (_temp = _class = function(_Component) { - function ErrorBar() { - return _classCallCheck(this, ErrorBar), _possibleConstructorReturn(this, (ErrorBar.__proto__ || Object.getPrototypeOf(ErrorBar)).apply(this, arguments)); - } - return _inherits(ErrorBar, _Component), _createClass(ErrorBar, [ { - key: "renderErrorBars", - value: function() { - var _props = this.props, offset = _props.offset, layout = _props.layout, width = _props.width, dataKey = _props.dataKey, data = _props.data, dataPointFormatter = _props.dataPointFormatter, xAxis = _props.xAxis, yAxis = _props.yAxis, others = _objectWithoutProperties(_props, [ "offset", "layout", "width", "dataKey", "data", "dataPointFormatter", "xAxis", "yAxis" ]), props = Object(__WEBPACK_IMPORTED_MODULE_3__util_ReactUtils__.k)(others); - return data.map(function(entry, i) { - var _dataPointFormatter = dataPointFormatter(entry, dataKey), x = _dataPointFormatter.x, y = _dataPointFormatter.y, value = _dataPointFormatter.value, errorVal = _dataPointFormatter.errorVal; - if (!errorVal) return null; - var xMid = void 0, yMid = void 0, xMin = void 0, yMin = void 0, xMax = void 0, yMax = void 0, scale = void 0, coordsTop = void 0, coordsMid = void 0, coordsBot = void 0, lowBound = void 0, highBound = void 0; - return Array.isArray(errorVal) ? (lowBound = errorVal[0], highBound = errorVal[1]) : (lowBound = errorVal, - highBound = errorVal), "vertical" === layout ? (scale = xAxis.scale, xMid = value, - yMid = y + offset, xMin = scale(xMid - lowBound), yMin = yMid + width, xMax = scale(xMid + highBound), - yMax = yMid - width, coordsTop = { - x1: xMax, - y1: yMin, - x2: xMax, - y2: yMax - }, coordsMid = { - x1: xMin, - y1: yMid, - x2: xMax, - y2: yMid - }, coordsBot = { - x1: xMin, - y1: yMin, - x2: xMin, - y2: yMax - }) : "horizontal" === layout && (scale = yAxis.scale, xMid = x + offset, yMid = value, - xMin = xMid - width, xMax = xMid + width, yMin = scale(yMid - lowBound), yMax = scale(yMid + highBound), - coordsTop = { - x1: xMin, - y1: yMax, - x2: xMax, - y2: yMax - }, coordsMid = { - x1: xMid, - y1: yMin, - x2: xMid, - y2: yMax - }, coordsBot = { - x1: xMin, - y1: yMin, - x2: xMax, - y2: yMin - }), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__container_Layer__.a, _extends({ - className: "recharts-errorBar", - key: i - }, props), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsTop), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsMid), __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement("line", coordsBot)); + var ae = { + x: 0, + y: 0, + width: "100%", + height: "100%" + }; + function ie(e) { + var t = e.icons, n = t.main, r = t.mask, o = e.prefix, a = e.iconName, i = e.transform, l = e.symbol, u = e.title, c = e.extra, d = e.watchable, f = void 0 !== d && d, p = r.found ? r : n, h = p.width, _ = p.height, m = "fa-w-".concat(Math.ceil(h / _ * 16)), y = [ M.replacementClass, a ? "".concat(M.familyPrefix, "-").concat(a) : "", m ].filter(function(e) { + return -1 === c.classes.indexOf(e); + }).concat(c.classes).join(" "), b = { + children: [], + attributes: s({}, c.attributes, { + "data-prefix": o, + "data-icon": a, + class: y, + role: c.attributes.role || "img", + xmlns: "http://www.w3.org/2000/svg", + viewBox: "0 0 ".concat(h, " ").concat(_) + }) + }; + f && (b.attributes[j] = ""), u && b.children.push({ + tag: "title", + attributes: { + id: b.attributes["aria-labelledby"] || "title-".concat(ee()) + }, + children: [ u ] }); + var v = s({}, b, { + prefix: o, + iconName: a, + main: n, + mask: r, + transform: i, + symbol: l, + styles: c.styles + }), g = r.found && n.found ? function(e) { + var t = e.children, n = e.attributes, r = e.main, o = e.mask, a = e.transform, i = r.width, l = r.icon, u = o.width, c = o.icon, d = oe({ + transform: a, + containerWidth: u, + iconWidth: i + }), f = { + tag: "rect", + attributes: s({}, ae, { + fill: "white" + }) + }, p = { + tag: "g", + attributes: s({}, d.inner), + children: [ { + tag: "path", + attributes: s({}, l.attributes, d.path, { + fill: "black" + }) + } ] + }, h = { + tag: "g", + attributes: s({}, d.outer), + children: [ p ] + }, _ = "mask-".concat(ee()), m = "clip-".concat(ee()), y = { + tag: "defs", + children: [ { + tag: "clipPath", + attributes: { + id: m + }, + children: [ c ] + }, { + tag: "mask", + attributes: s({}, ae, { + id: _, + maskUnits: "userSpaceOnUse", + maskContentUnits: "userSpaceOnUse" + }), + children: [ f, h ] + } ] + }; + return t.push(y, { + tag: "rect", + attributes: s({ + fill: "currentColor", + "clip-path": "url(#".concat(m, ")"), + mask: "url(#".concat(_, ")") + }, ae) + }), { + children: t, + attributes: n + }; + }(v) : function(e) { + var t = e.children, n = e.attributes, r = e.main, o = e.transform, a = ne(e.styles); + if (a.length > 0 && (n.style = a), re(o)) { + var i = oe({ + transform: o, + containerWidth: r.width, + iconWidth: r.width + }); + t.push({ + tag: "g", + attributes: s({}, i.outer), + children: [ { + tag: "g", + attributes: s({}, i.inner), + children: [ { + tag: r.icon.tag, + children: r.icon.children, + attributes: s({}, r.icon.attributes, i.path) + } ] + } ] + }); + } else t.push(r.icon); + return { + children: t, + attributes: n + }; + }(v), x = g.children, O = g.attributes; + return v.children = x, v.attributes = O, l ? function(e) { + var t = e.prefix, n = e.iconName, r = e.children, o = e.attributes, a = e.symbol; + return [ { + tag: "svg", + attributes: { + style: "display: none;" + }, + children: [ { + tag: "symbol", + attributes: s({}, o, { + id: !0 === a ? "".concat(t, "-").concat(M.familyPrefix, "-").concat(n) : a + }), + children: r + } ] + } ]; + }(v) : function(e) { + var t = e.children, n = e.main, r = e.mask, o = e.attributes, a = e.styles, i = e.transform; + if (re(i) && n.found && !r.found) { + var l = { + x: n.width / n.height / 2, + y: .5 + }; + o.style = ne(s({}, a, { + "transform-origin": "".concat(l.x + i.x / 16, "em ").concat(l.y + i.y / 16, "em") + })); + } + return [ { + tag: "svg", + attributes: o, + children: t + } ]; + }(v); } - }, { - key: "render", - value: function() { - return __WEBPACK_IMPORTED_MODULE_0_react___default.a.createElement(__WEBPACK_IMPORTED_MODULE_2__container_Layer__.a, { - className: "recharts-errorBars" - }, this.renderErrorBars()); - } - } ]), ErrorBar; - }(__WEBPACK_IMPORTED_MODULE_0_react__.Component), _class.propTypes = { - dataKey: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.oneOfType([ __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func ]).isRequired, - data: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.array, - xAxis: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - yAxis: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.object, - layout: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - dataPointFormatter: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.func, - stroke: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.string, - strokeWidth: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - width: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number, - offset: __WEBPACK_IMPORTED_MODULE_1_prop_types___default.a.number - }, _class.defaultProps = { - stroke: "black", - strokeWidth: 1.5, - width: 5, - offset: 0, - layout: "horizontal" - }, _temp); - __webpack_exports__.a = ErrorBar; -}, function(module, __webpack_exports__, __webpack_require__) { - "use strict"; - function _defineProperty(obj, key, value) { - return key in obj ? Object.defineProperty(obj, key, { - value: value, - enumerable: !0, - configurable: !0, - writable: !0 - }) : obj[key] = value, obj; - } - __webpack_require__.d(__webpack_exports__, "a", function() { - return formatAxisMap; - }); - var __WEBPACK_IMPORTED_MODULE_0__ChartUtils__ = __webpack_require__(16), _extends = Object.assign || function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]); - } - return target; - }, formatAxisMap = function(props, axisMap, offset, axisType, chartName) { - var width = props.width, height = props.height, layout = props.layout, ids = Object.keys(axisMap), steps = { - left: offset.left, - leftMirror: offset.left, - right: width - offset.right, - rightMirror: width - offset.right, - top: offset.top, - topMirror: offset.top, - bottom: height - offset.bottom, - bottomMirror: height - offset.bottom - }; - return ids.reduce(function(result, id) { - var axis = axisMap[id], orientation = axis.orientation, domain = axis.domain, _axis$padding = axis.padding, padding = void 0 === _axis$padding ? {} : _axis$padding, mirror = axis.mirror, reversed = axis.reversed, offsetKey = orientation + (mirror ? "Mirror" : ""), range = void 0, x = void 0, y = void 0, needSpace = void 0; - range = "xAxis" === axisType ? [ offset.left + (padding.left || 0), offset.left + offset.width - (padding.right || 0) ] : "yAxis" === axisType ? "horizontal" === layout ? [ offset.top + offset.height - (padding.bottom || 0), offset.top + (padding.top || 0) ] : [ offset.top + (padding.top || 0), offset.top + offset.height - (padding.bottom || 0) ] : axis.range, - reversed && (range = [ range[1], range[0] ]); - var _parseScale = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.A)(axis, chartName), scale = _parseScale.scale, realScaleType = _parseScale.realScaleType; - scale.domain(domain).range(range), Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.c)(scale); - var ticks = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.v)(scale, _extends({}, axis, { - realScaleType: realScaleType - })); - "xAxis" === axisType ? (needSpace = "top" === orientation && !mirror || "bottom" === orientation && mirror, - x = offset.left, y = steps[offsetKey] - needSpace * axis.height) : "yAxis" === axisType && (needSpace = "left" === orientation && !mirror || "right" === orientation && mirror, - x = steps[offsetKey] - needSpace * axis.width, y = offset.top); - var finalAxis = _extends({}, axis, ticks, { - realScaleType: realScaleType, - x: x, - y: y, - scale: scale, - width: "xAxis" === axisType ? offset.width : axis.width, - height: "yAxis" === axisType ? offset.height : axis.height + var se = function() {}, le = (M.measurePerformance && y && y.mark && y.measure, + function(e, t, n, r) { + var o, a, i, s = Object.keys(e), l = s.length, u = void 0 !== r ? function(e, t) { + return function(n, r, o, a) { + return e.call(t, n, r, o, a); + }; + }(t, r) : t; + for (void 0 === n ? (o = 1, i = e[s[0]]) : (o = 0, i = n); o < l; o++) i = u(i, e[a = s[o]], a, e); + return i; }); - return finalAxis.bandSize = Object(__WEBPACK_IMPORTED_MODULE_0__ChartUtils__.g)(finalAxis, ticks), - axis.hide || "xAxis" !== axisType ? axis.hide || (steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.width) : steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.height, - _extends({}, result, _defineProperty({}, id, finalAxis)); - }, {}); - }; -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var emptyObject = {}; - "production" !== process.env.NODE_ENV && Object.freeze(emptyObject), module.exports = emptyObject; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - var emptyFunction = __webpack_require__(50), warning = emptyFunction; - if ("production" !== process.env.NODE_ENV) { - var printWarning = function(format) { - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) args[_key - 1] = arguments[_key]; - var argIndex = 0, message = "Warning: " + format.replace(/%s/g, function() { - return args[argIndex++]; + var ue = k.styles, ce = k.shims, de = function() { + var e = function(e) { + return le(ue, function(t, n, r) { + return t[r] = le(n, e, {}), t; + }, {}); + }; + e(function(e, t, n) { + return t[3] && (e[t[3]] = n), e; + }), e(function(e, t, n) { + var r = t[2]; + return e[n] = n, r.forEach(function(t) { + e[t] = n; + }), e; }); - "undefined" != typeof console && console.error(message); - try { - throw new Error(message); - } catch (x) {} - }; - warning = function(condition, format) { - if (void 0 === format) throw new Error("` + ("`" + `warning(condition, format, ...args)`)) + ("`" + (` requires a warning message argument"); - if (0 !== format.indexOf("Failed Composite propType: ") && !condition) { - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) args[_key2 - 2] = arguments[_key2]; - printWarning.apply(void 0, [ format ].concat(args)); - } + var t = "far" in ue; + le(ce, function(e, n) { + var r = n[0], o = n[1], a = n[2]; + return "far" !== o || t || (o = "fas"), e[r] = { + prefix: o, + iconName: a + }, e; + }, {}); }; - } - module.exports = warning; - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - (function(process) { - function checkDCE() { - if ("undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) { - if ("production" !== process.env.NODE_ENV) throw new Error("^_^"); - try { - __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); - } catch (err) { - console.error(err); - } - } - } - "production" === process.env.NODE_ENV ? (checkDCE(), module.exports = __webpack_require__(378)) : module.exports = __webpack_require__(381); - }).call(exports, __webpack_require__(2)); -}, function(module, exports, __webpack_require__) { - "use strict"; - function is(x, y) { - return x === y ? 0 !== x || 0 !== y || 1 / x == 1 / y : x !== x && y !== y; - } - function shallowEqual(objA, objB) { - if (is(objA, objB)) return !0; - if ("object" != typeof objA || null === objA || "object" != typeof objB || null === objB) return !1; - var keysA = Object.keys(objA), keysB = Object.keys(objB); - if (keysA.length !== keysB.length) return !1; - for (var i = 0; i < keysA.length; i++) if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) return !1; - return !0; - } - var hasOwnProperty = Object.prototype.hasOwnProperty; - module.exports = shallowEqual; -}, function(module, exports, __webpack_require__) { - var toInteger = __webpack_require__(149), min = Math.min; - module.exports = function(it) { - return it > 0 ? min(toInteger(it), 9007199254740991) : 0; - }; -}, function(module, exports) { - module.exports = !0; -}, function(module, exports) { - var id = 0, px = Math.random(); - module.exports = function(key) { - return "Symbol(".concat(void 0 === key ? "" : key, ")_", (++id + px).toString(36)); - }; -}, function(module, exports) { - exports.f = {}.propertyIsEnumerable; -}, function(module, exports, __webpack_require__) { - "use strict"; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - exports.__esModule = !0; - var _iterator = __webpack_require__(396), _iterator2 = _interopRequireDefault(_iterator), _symbol = __webpack_require__(404), _symbol2 = _interopRequireDefault(_symbol), _typeof = "function" == typeof _symbol2.default && "symbol" == typeof _iterator2.default ? function(obj) { - return typeof obj; - } : function(obj) { - return obj && "function" == typeof _symbol2.default && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; - }; - exports.default = "function" == typeof _symbol2.default && "symbol" === _typeof(_iterator2.default) ? function(obj) { - return void 0 === obj ? "undefined" : _typeof(obj); - } : function(obj) { - return obj && "function" == typeof _symbol2.default && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : void 0 === obj ? "undefined" : _typeof(obj); - }; -}, function(module, exports, __webpack_require__) { - var anObject = __webpack_require__(52), dPs = __webpack_require__(400), enumBugKeys = __webpack_require__(152), IE_PROTO = __webpack_require__(150)("IE_PROTO"), Empty = function() {}, createDict = function() { - var iframeDocument, iframe = __webpack_require__(225)("iframe"), i = enumBugKeys.length; - for (iframe.style.display = "none", __webpack_require__(401).appendChild(iframe), - iframe.src = "javascript:", iframeDocument = iframe.contentWindow.document, iframeDocument.open(), - iframeDocument.write("\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\n\nvar _default = {\n familyPrefix: DEFAULT_FAMILY_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n};\n\nvar _config = _objectSpread({}, _default, initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\n\nvar config = _objectSpread({}, _config);\n\nWINDOW.FontAwesomeConfig = config;\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nvar PENDING = 'pending';\nvar SETTLED = 'settled';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\n\nvar NOOP = function NOOP() {};\n\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush() {\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++) {\n asyncQueue[i][0](asyncQueue[i][1]);\n } // reset async asyncQueue\n\n\n asyncQueue = [];\n asyncTimer = false;\n}\n\nfunction asyncCall(callback, arg) {\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer) {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n}\n\nfunction invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch (e) {\n rejectPromise(e);\n }\n}\n\nfunction invokeCallback(subscriber) {\n var owner = subscriber.owner;\n var settled = owner._state;\n var value = owner._data;\n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function') {\n settled = FULFILLED;\n\n try {\n value = callback(value);\n } catch (e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value)) {\n if (settled === FULFILLED) {\n resolve(promise, value);\n }\n\n if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n}\n\nfunction handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value) {\n throw new TypeError('A promises callback cannot return that same promise.');\n }\n\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n // then should be retrieved only once\n var then = value.then;\n\n if (typeof then === 'function') {\n then.call(value, function (val) {\n if (!resolved) {\n resolved = true;\n\n if (value === val) {\n fulfill(promise, val);\n } else {\n resolve(promise, val);\n }\n }\n }, function (reason) {\n if (!resolved) {\n resolved = true;\n reject(promise, reason);\n }\n });\n return true;\n }\n }\n } catch (e) {\n if (!resolved) {\n reject(promise, e);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction resolve(promise, value) {\n if (promise === value || !handleThenable(promise, value)) {\n fulfill(promise, value);\n }\n}\n\nfunction fulfill(promise, value) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = value;\n asyncCall(publishFulfillment, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = reason;\n asyncCall(publishRejection, promise);\n }\n}\n\nfunction publish(promise) {\n promise._then = promise._then.forEach(invokeCallback);\n}\n\nfunction publishFulfillment(promise) {\n promise._state = FULFILLED;\n publish(promise);\n}\n\nfunction publishRejection(promise) {\n promise._state = REJECTED;\n publish(promise);\n\n if (!promise._handled && isNode) {\n global.process.emit('unhandledRejection', promise._data, promise);\n }\n}\n\nfunction notifyRejectionHandled(promise) {\n global.process.emit('rejectionHandled', promise);\n}\n/**\n * @class\n */\n\n\nfunction P(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n }\n\n if (this instanceof P === false) {\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n }\n\n this._then = [];\n invokeResolver(resolver, this);\n}\n\nP.prototype = {\n constructor: P,\n _state: PENDING,\n _then: null,\n _data: undefined,\n _handled: false,\n then: function then(onFulfillment, onRejection) {\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if ((onRejection || onFulfillment) && !this._handled) {\n this._handled = true;\n\n if (this._state === REJECTED && isNode) {\n asyncCall(notifyRejectionHandled, this);\n }\n }\n\n if (this._state === FULFILLED || this._state === REJECTED) {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n } else {\n // subscribe\n this._then.push(subscriber);\n }\n\n return subscriber.then;\n },\n catch: function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nP.all = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.all().');\n }\n\n return new P(function (resolve, reject) {\n var results = [];\n var remaining = 0;\n\n function resolver(index) {\n remaining++;\n return function (value) {\n results[index] = value;\n\n if (! --remaining) {\n resolve(results);\n }\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolver(i), reject);\n } else {\n results[i] = promise;\n }\n }\n\n if (!remaining) {\n resolve(results);\n }\n });\n};\n\nP.race = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.race().');\n }\n\n return new P(function (resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n });\n};\n\nP.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === P) {\n return value;\n }\n\n return new P(function (resolve) {\n resolve(value);\n });\n};\n\nP.reject = function (reason) {\n return new P(function (resolve, reject) {\n reject(reason);\n });\n};\n\nvar picked = typeof Promise === 'function' ? Promise : P;\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\n\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n}\nfunction toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n}\nfunction getIconName(familyPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n}\nfunction transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\nfunction makeIconMasking (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread({}, ALL_SPACE, {\n fill: 'white'\n })\n };\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: 'path',\n attributes: _objectSpread({}, mainPath.attributes, trans.path, {\n fill: 'black'\n })\n }]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(nextUniqueId());\n var clipId = \"clip-\".concat(nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread({}, ALL_SPACE, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: [maskPath]\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction makeIconStandard (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n transform = _ref.transform,\n styles = _ref.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n if (transformIsMeaningful(transform)) {\n var trans = transformForSvg({\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n children.push({\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\n }]\n }]\n });\n } else {\n children.push(main.icon);\n }\n\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n}\n\nfunction asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread({}, attributes, {\n id: id\n }),\n children: children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var widthClass = \"fa-w-\".concat(Math.ceil(width / height * 16));\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread({}, extra.attributes, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(nextUniqueId())\n },\n children: [title]\n });\n\n var args = _objectSpread({}, content, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n transform: transform,\n symbol: symbol,\n styles: extra.styles\n });\n\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nvar preamble = \"FA \\\"5.9.0\\\"\";\n\nvar begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n};\n\nvar end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n begin: begin,\n end: end\n};\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object ` + ("`" + `.reduce()`)) + ("`" + (` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n};\n\nfunction toHex(unicode) {\n var result = '';\n\n for (var i = 0; i < unicode.length; i++) {\n var hex = unicode.charCodeAt(i).toString(16);\n result += ('000' + hex).slice(-4);\n }\n\n return result;\n}\n\nfunction defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalized);\n } else {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n }\n /**\n * Font Awesome 4 used the prefix of ` + "`"))) + ((`fa` + ("`" + ` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `)) + ("`" + (`fa` + "`")))) + (((` is now an alias\n * for ` + ("`" + `fas`)) + ("`" + (` so we'll easy the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nvar styles = namespace.styles,\n shims = namespace.shims;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n var ligatures = icon[2];\n acc[iconName] = iconName;\n ligatures.forEach(function (ligature) {\n acc[ligature] = iconName;\n });\n return acc;\n });\n var hasRegular = 'far' in styles;\n _byOldName = reduce(shims, function (acc, shim) {\n var oldName = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n acc[oldName] = {\n prefix: prefix,\n iconName: iconName\n };\n return acc;\n }, {});\n};\nbuild();\nfunction byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\n\nvar styles$1 = namespace.styles;\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getCanonicalIcon(values) {\n return values.reduce(function (acc, cls) {\n var iconName = getIconName(config.familyPrefix, cls);\n\n if (styles$1[cls]) {\n acc.prefix = cls;\n } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fab', 'fa'].indexOf(cls) > -1) {\n acc.prefix = cls;\n } else if (iconName) {\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n acc.iconName = shim.iconName || iconName;\n acc.prefix = shim.prefix || acc.prefix;\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n acc.rest.push(cls);\n }\n\n return acc;\n }, emptyCanonicalIcon());\n}\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\nfunction toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n}\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\n\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\n\nvar mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n var abstract = mutation[1];\n var newOuterHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n if (node.parentNode && node.outerHTML) {\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"\") : '');\n } else if (node.parentNode) {\n var newNode = document.createElement('span');\n node.parentNode.replaceChild(newNode, node);\n newNode.outerHTML = newOuterHTML;\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n delete abstract[0].attributes.style;\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n var newInnerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.setAttribute('class', splitClasses.toNode.join(' '));\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\n\nfunction performOperationSync(op) {\n op();\n}\n\nfunction perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nvar disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var treeCallback = options.treeCallback,\n nodeCallback = options.nodeCallback,\n pseudoElementsCallback = options.pseudoElementsCallback,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class') {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n } else {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n}\n\nfunction classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.prefix && innerText.length > 1) {\n val.iconName = byLigature(val.prefix, node.innerText);\n } else if (val.prefix && innerText.length === 1) {\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n }\n\n return val;\n}\n\nvar parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n\n if (!transformString) {\n return transform;\n } else {\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n }\n};\nfunction transformParser (node) {\n return parseTransformString(node.getAttribute('data-fa-transform'));\n}\n\nfunction symbolParser (node) {\n var symbol = node.getAttribute('data-fa-symbol');\n return symbol === null ? false : symbol === '' ? true : symbol;\n}\n\nfunction attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n}\n\nfunction maskParser (node) {\n var mask = node.getAttribute('data-fa-mask');\n\n if (!mask) {\n return emptyCanonicalIcon();\n } else {\n return getCanonicalIcon(mask.split(' ').map(function (i) {\n return i.trim();\n }));\n }\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraStyles = styleParser(node);\n var transform = transformParser(node);\n var symbol = symbolParser(node);\n var extraAttributes = attributesParser(node);\n var mask = maskParser(node);\n return {\n iconName: iconName,\n title: node.getAttribute('title'),\n prefix: prefix,\n transform: transform,\n symbol: symbol,\n mask: mask,\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n };\n}\n\nfunction MissingIcon(error) {\n this.name = 'MissingIcon';\n this.message = error || 'Icon unavailable';\n this.stack = new Error().stack;\n}\nMissingIcon.prototype = Object.create(Error.prototype);\nMissingIcon.prototype.constructor = MissingIcon;\n\nvar FILL = {\n fill: 'currentColor'\n};\nvar ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n};\nvar RING = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n};\n\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'opacity'\n});\n\nvar DOT = {\n tag: 'circle',\n attributes: _objectSpread({}, FILL, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;1;1;0;1;'\n })\n }]\n};\nvar QUESTION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;0;0;0;1;'\n })\n }]\n};\nvar EXCLAMATION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '0;0;1;1;0;0;'\n })\n }]\n};\nvar missing = {\n tag: 'g',\n children: [RING, DOT, QUESTION, EXCLAMATION]\n};\n\nvar styles$2 = namespace.styles;\nfunction findIcon(iconName, prefix) {\n return new picked(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: missing\n };\n\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n var icon = styles$2[prefix][iconName];\n var width = icon[0];\n var height = icon[1];\n var vectorData = icon.slice(4);\n val = {\n found: true,\n width: width,\n height: height,\n icon: {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData[0]\n }\n }\n };\n return resolve(val);\n }\n\n if (iconName && prefix && !config.showMissingIcons) {\n reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n } else {\n resolve(val);\n }\n });\n}\n\nvar styles$3 = namespace.styles;\n\nfunction generateSvgReplacementMutation(node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n extra = nodeMeta.extra;\n return new picked(function (resolve, reject) {\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n mask: mask,\n title: title,\n extra: extra,\n watchable: true\n })]);\n });\n });\n}\n\nfunction generateLayersText(node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return picked.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n}\n\nfunction generateMutation(node) {\n var nodeMeta = parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return generateLayersText(node, nodeMeta);\n } else {\n return generateSvgReplacementMutation(node, nodeMeta);\n }\n}\n\nfunction onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return;\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return;\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return;\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e instanceof MissingIcon) {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new picked(function (resolve, reject) {\n picked.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function () {\n mark();\n reject();\n });\n });\n}\nfunction onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\n\nfunction replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new picked(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily) {\n var content = styles.getPropertyValue('content');\n var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n var hexValue = toHex(content.length === 3 ? content.substr(1, 1) : content);\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n var element = DOCUMENT.createElement('svg');\n\n if (position === ':before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\n\nfunction replace(node) {\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n}\n\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements (root) {\n if (!IS_DOM) return;\n return new picked(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n picked.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n}\n\nvar baseStyles = \"svg:not(:root).svg-inline--fa {\\n overflow: visible;\\n}\\n\\n.svg-inline--fa {\\n display: inline-block;\\n font-size: inherit;\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.225em;\\n}\\n.svg-inline--fa.fa-w-1 {\\n width: 0.0625em;\\n}\\n.svg-inline--fa.fa-w-2 {\\n width: 0.125em;\\n}\\n.svg-inline--fa.fa-w-3 {\\n width: 0.1875em;\\n}\\n.svg-inline--fa.fa-w-4 {\\n width: 0.25em;\\n}\\n.svg-inline--fa.fa-w-5 {\\n width: 0.3125em;\\n}\\n.svg-inline--fa.fa-w-6 {\\n width: 0.375em;\\n}\\n.svg-inline--fa.fa-w-7 {\\n width: 0.4375em;\\n}\\n.svg-inline--fa.fa-w-8 {\\n width: 0.5em;\\n}\\n.svg-inline--fa.fa-w-9 {\\n width: 0.5625em;\\n}\\n.svg-inline--fa.fa-w-10 {\\n width: 0.625em;\\n}\\n.svg-inline--fa.fa-w-11 {\\n width: 0.6875em;\\n}\\n.svg-inline--fa.fa-w-12 {\\n width: 0.75em;\\n}\\n.svg-inline--fa.fa-w-13 {\\n width: 0.8125em;\\n}\\n.svg-inline--fa.fa-w-14 {\\n width: 0.875em;\\n}\\n.svg-inline--fa.fa-w-15 {\\n width: 0.9375em;\\n}\\n.svg-inline--fa.fa-w-16 {\\n width: 1em;\\n}\\n.svg-inline--fa.fa-w-17 {\\n width: 1.0625em;\\n}\\n.svg-inline--fa.fa-w-18 {\\n width: 1.125em;\\n}\\n.svg-inline--fa.fa-w-19 {\\n width: 1.1875em;\\n}\\n.svg-inline--fa.fa-w-20 {\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-border {\\n height: 1.5em;\\n}\\n.svg-inline--fa.fa-li {\\n width: 2em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: 1.25em;\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: #ff253a;\\n border-radius: 1em;\\n -webkit-box-sizing: border-box;\\n box-sizing: border-box;\\n color: #fff;\\n height: 1.5em;\\n line-height: 1;\\n max-width: 5em;\\n min-width: 1.5em;\\n overflow: hidden;\\n padding: 0.25em;\\n right: 0;\\n text-overflow: ellipsis;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: 0;\\n right: 0;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom right;\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: 0;\\n left: 0;\\n right: auto;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom left;\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n right: 0;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: 0;\\n right: auto;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top left;\\n transform-origin: top left;\\n}\\n\\n.fa-lg {\\n font-size: 1.3333333333em;\\n line-height: 0.75em;\\n vertical-align: -0.0667em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: 2.5em;\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: -2em;\\n position: absolute;\\n text-align: center;\\n width: 2em;\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border: solid 0.08em #eee;\\n border-radius: 0.1em;\\n padding: 0.2em 0.25em 0.15em;\\n}\\n\\n.fa-pull-left {\\n float: left;\\n}\\n\\n.fa-pull-right {\\n float: right;\\n}\\n\\n.fa.fa-pull-left,\\n.fas.fa-pull-left,\\n.far.fa-pull-left,\\n.fal.fa-pull-left,\\n.fab.fa-pull-left {\\n margin-right: 0.3em;\\n}\\n.fa.fa-pull-right,\\n.fas.fa-pull-right,\\n.far.fa-pull-right,\\n.fal.fa-pull-right,\\n.fab.fa-pull-right {\\n margin-left: 0.3em;\\n}\\n\\n.fa-spin {\\n -webkit-animation: fa-spin 2s infinite linear;\\n animation: fa-spin 2s infinite linear;\\n}\\n\\n.fa-pulse {\\n -webkit-animation: fa-spin 1s infinite steps(8);\\n animation: fa-spin 1s infinite steps(8);\\n}\\n\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\";\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\";\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\";\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\";\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1);\\n}\\n\\n:root .fa-rotate-90,\\n:root .fa-rotate-180,\\n:root .fa-rotate-270,\\n:root .fa-flip-horizontal,\\n:root .fa-flip-vertical,\\n:root .fa-flip-both {\\n -webkit-filter: none;\\n filter: none;\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: #fff;\\n}\\n\\n.sr-only {\\n border: 0;\\n clip: rect(0, 0, 0, 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n}\\n\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\n clip: auto;\\n height: auto;\\n margin: 0;\\n overflow: visible;\\n position: static;\\n width: auto;\\n}\";\n\nfunction css () {\n var dfp = DEFAULT_FAMILY_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.familyPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dfp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n}\n\nvar Library =\n/*#__PURE__*/\nfunction () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n defineIcons(key, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n if (!additions[prefix]) additions[prefix] = {};\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n}();\n\nfunction prepIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n var vectorData = icon.slice(4);\n return {\n found: true,\n width: width,\n height: height,\n icon: {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData[0]\n }\n }\n };\n}\n\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n}\n\nfunction apiObject(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction findIconDefinition(iconLookup) {\n var _iconLookup$prefix = iconLookup.prefix,\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n iconName = iconLookup.iconName;\n if (!iconName) return;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\n\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread({}, params, {\n mask: mask\n }));\n };\n}\n\nvar library = new Library();\nvar noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n disconnect();\n};\nvar _cssInserted = false;\nvar dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n ensureCss();\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n\n return onTree(node, callback);\n } else {\n return picked.reject('Operation requires a DOM of some kind.');\n }\n },\n css: css,\n insertCss: function insertCss$$1() {\n if (!_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n observeMutationsRoot = params.observeMutationsRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements,\n observeMutationsRoot: observeMutationsRoot\n });\n });\n }\n};\nvar parse = {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n};\nvar icon = resolveIcons(function (iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return apiObject(_objectSpread({\n type: 'icon'\n }, iconDefinition), function () {\n ensureCss();\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: prepIcon(icon),\n mask: mask ? prepIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread({}, meaninglessTransform, transform),\n symbol: symbol,\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n});\nvar text = function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform2 = params.transform,\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n _params$title2 = params.title,\n title = _params$title2 === void 0 ? null : _params$title2,\n _params$classes2 = params.classes,\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\n _params$attributes2 = params.attributes,\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n _params$styles2 = params.styles,\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\n return apiObject({\n type: 'text',\n content: content\n }, function () {\n ensureCss();\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread({}, meaninglessTransform, transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar counter = function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title3 = params.title,\n title = _params$title3 === void 0 ? null : _params$title3,\n _params$classes3 = params.classes,\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\n _params$attributes3 = params.attributes,\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n _params$styles3 = params.styles,\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\n return apiObject({\n type: 'counter',\n content: content\n }, function () {\n ensureCss();\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar layer = function layer(assembler) {\n return apiObject({\n type: 'layer'\n }, function () {\n ensureCss();\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-layers\")\n },\n children: children\n }];\n });\n};\nvar api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n library: library,\n parse: parse,\n findIconDefinition: findIconDefinition,\n icon: icon,\n text: text,\n counter: counter,\n layer: layer,\n toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nexport { icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition };\n", + "var prefix = \"far\";\nvar faAddressBook = {\n prefix: 'far',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-68 304H48V48h320v416zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'far',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H48V80h480v352zM208 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2zM360 320h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8z\"]\n};\nvar faAngry = {\n prefix: 'far',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-144c-33.6 0-65.2 14.8-86.8 40.6-8.5 10.2-7.1 25.3 3.1 33.8s25.3 7.2 33.8-3c24.8-29.7 75-29.7 99.8 0 8.1 9.7 23.2 11.9 33.8 3 10.2-8.5 11.5-23.6 3.1-33.8-21.6-25.8-53.2-40.6-86.8-40.6zm-48-72c10.3 0 19.9-6.7 23-17.1 3.8-12.7-3.4-26.1-16.1-29.9l-80-24c-12.8-3.9-26.1 3.4-29.9 16.1-3.8 12.7 3.4 26.1 16.1 29.9l28.2 8.5c-3.1 4.9-5.3 10.4-5.3 16.6 0 17.7 14.3 32 32 32s32-14.4 32-32.1zm199-54.9c-3.8-12.7-17.1-19.9-29.9-16.1l-80 24c-12.7 3.8-19.9 17.2-16.1 29.9 3.1 10.4 12.7 17.1 23 17.1 0 17.7 14.3 32 32 32s32-14.3 32-32c0-6.2-2.2-11.7-5.3-16.6l28.2-8.5c12.7-3.7 19.9-17.1 16.1-29.8z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M8 256c0 137 111 248 248 248s248-111 248-248S393 8 256 8 8 119 8 256zm448 0c0 110.5-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56s200 89.5 200 200zm-72-20v40c0 6.6-5.4 12-12 12H256v67c0 10.7-12.9 16-20.5 8.5l-99-99c-4.7-4.7-4.7-12.3 0-17l99-99c7.6-7.6 20.5-2.2 20.5 8.5v67h116c6.6 0 12 5.4 12 12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'far',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z\"]\n};\nvar faBell = {\n prefix: 'far',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBellSlash = {\n prefix: 'far',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.99 471.02L36 3.51C29.1-2.01 19.03-.9 13.51 6l-10 12.49C-2.02 25.39-.9 35.46 6 40.98l598 467.51c6.9 5.52 16.96 4.4 22.49-2.49l10-12.49c5.52-6.9 4.41-16.97-2.5-22.49zM163.53 368c16.71-22.03 34.48-55.8 41.4-110.58l-45.47-35.55c-3.27 90.73-36.47 120.68-54.84 140.42-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h279.66l-61.4-48H163.53zM320 96c61.86 0 112 50.14 112 112 0 .2-.06.38-.06.58.02 16.84 1.16 31.77 2.79 45.73l59.53 46.54c-8.31-22.13-14.34-51.49-14.34-92.85 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-26.02 5.41-49.45 16.94-69.13 32.72l38.17 29.84C275 103.18 296.65 96 320 96zm0 416c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBookmark = {\n prefix: 'far',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z\"]\n};\nvar faBuilding = {\n prefix: 'far',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M128 148v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12zm140 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-128 96h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm128 0h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm-76 84v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm76 12h40c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12zm180 124v36H0v-36c0-6.6 5.4-12 12-12h19.5V24c0-13.3 10.7-24 24-24h337c13.3 0 24 10.7 24 24v440H436c6.6 0 12 5.4 12 12zM79.5 463H192v-67c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v67h112.5V49L80 48l-.5 415z\"]\n};\nvar faCalendar = {\n prefix: 'far',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M400 64h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V160h352v298c0 3.3-2.7 6-6 6z\"]\n};\nvar faCalendarAlt = {\n prefix: 'far',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarCheck = {\n prefix: 'far',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z\"]\n};\nvar faCalendarMinus = {\n prefix: 'far',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M124 328c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v24c0 6.6-5.4 12-12 12H124zm324-216v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarPlus = {\n prefix: 'far',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M336 292v24c0 6.6-5.4 12-12 12h-76v76c0 6.6-5.4 12-12 12h-24c-6.6 0-12-5.4-12-12v-76h-76c-6.6 0-12-5.4-12-12v-24c0-6.6 5.4-12 12-12h76v-76c0-6.6 5.4-12 12-12h24c6.6 0 12 5.4 12 12v76h76c6.6 0 12 5.4 12 12zm112-180v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCalendarTimes = {\n prefix: 'far',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M311.7 374.7l-17 17c-4.7 4.7-12.3 4.7-17 0L224 337.9l-53.7 53.7c-4.7 4.7-12.3 4.7-17 0l-17-17c-4.7-4.7-4.7-12.3 0-17l53.7-53.7-53.7-53.7c-4.7-4.7-4.7-12.3 0-17l17-17c4.7-4.7 12.3-4.7 17 0l53.7 53.7 53.7-53.7c4.7-4.7 12.3-4.7 17 0l17 17c4.7 4.7 4.7 12.3 0 17L257.9 304l53.7 53.7c4.8 4.7 4.8 12.3.1 17zM448 112v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'far',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M125.1 208h197.8c10.7 0 16.1 13 8.5 20.5l-98.9 98.3c-4.7 4.7-12.2 4.7-16.9 0l-98.9-98.3c-7.7-7.5-2.3-20.5 8.4-20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'far',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M272 157.1v197.8c0 10.7-13 16.1-20.5 8.5l-98.3-98.9c-4.7-4.7-4.7-12.2 0-16.9l98.3-98.9c7.5-7.7 20.5-2.3 20.5 8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'far',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M176 354.9V157.1c0-10.7 13-16.1 20.5-8.5l98.3 98.9c4.7 4.7 4.7 12.2 0 16.9l-98.3 98.9c-7.5 7.7-20.5 2.3-20.5-8.4zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'far',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M322.9 304H125.1c-10.7 0-16.1-13-8.5-20.5l98.9-98.3c4.7-4.7 12.2-4.7 16.9 0l98.9 98.3c7.7 7.5 2.3 20.5-8.4 20.5zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faChartBar = {\n prefix: 'far',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\"]\n};\nvar faCheckCircle = {\n prefix: 'far',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z\"]\n};\nvar faCheckSquare = {\n prefix: 'far',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm0 400H48V80h352v352zm-35.864-241.724L191.547 361.48c-4.705 4.667-12.303 4.637-16.97-.068l-90.781-91.516c-4.667-4.705-4.637-12.303.069-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l59.792 60.277 141.352-140.216c4.705-4.667 12.303-4.637 16.97.068l22.536 22.718c4.667 4.706 4.637 12.304-.068 16.971z\"]\n};\nvar faCircle = {\n prefix: 'far',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200z\"]\n};\nvar faClipboard = {\n prefix: 'far',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm144 418c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h42v36c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-36h42c3.3 0 6 2.7 6 6z\"]\n};\nvar faClock = {\n prefix: 'far',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n prefix: 'far',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'far',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zm-6 336H54c-3.3 0-6-2.7-6-6V118c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v276c0 3.3-2.7 6-6 6zm-211.1-85.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7zm190.4 0c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.9-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 220.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6 2.8-2.5 7.1-2.1 9.2.9l19.6 27.7z\"]\n};\nvar faComment = {\n prefix: 'far',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faCommentAlt = {\n prefix: 'far',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 7.1 5.8 12 12 12 2.4 0 4.9-.7 7.1-2.4L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zm16 352c0 8.8-7.2 16-16 16H288l-12.8 9.6L208 428v-60H64c-8.8 0-16-7.2-16-16V64c0-8.8 7.2-16 16-16h384c8.8 0 16 7.2 16 16v288z\"]\n};\nvar faCommentDots = {\n prefix: 'far',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M144 208c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm112 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zM256 32C114.6 32 0 125.1 0 240c0 47.6 19.9 91.2 52.9 126.3C38 405.7 7 439.1 6.5 439.5c-6.6 7-8.4 17.2-4.6 26S14.4 480 24 480c61.5 0 110-25.7 139.1-46.3C192 442.8 223.2 448 256 448c141.4 0 256-93.1 256-208S397.4 32 256 32zm0 368c-26.7 0-53.1-4.1-78.4-12.1l-22.7-7.2-19.5 13.8c-14.3 10.1-33.9 21.4-57.5 29 7.3-12.1 14.4-25.7 19.9-40.2l10.6-28.1-20.6-21.8C69.7 314.1 48 282.2 48 240c0-88.2 93.3-160 208-160s208 71.8 208 160-93.3 160-208 160z\"]\n};\nvar faComments = {\n prefix: 'far',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M532 386.2c27.5-27.1 44-61.1 44-98.2 0-80-76.5-146.1-176.2-157.9C368.3 72.5 294.3 32 208 32 93.1 32 0 103.6 0 192c0 37 16.5 71 44 98.2-15.3 30.7-37.3 54.5-37.7 54.9-6.3 6.7-8.1 16.5-4.4 25 3.6 8.5 12 14 21.2 14 53.5 0 96.7-20.2 125.2-38.8 9.2 2.1 18.7 3.7 28.4 4.9C208.1 407.6 281.8 448 368 448c20.8 0 40.8-2.4 59.8-6.8C456.3 459.7 499.4 480 553 480c9.2 0 17.5-5.5 21.2-14 3.6-8.5 1.9-18.3-4.4-25-.4-.3-22.5-24.1-37.8-54.8zm-392.8-92.3L122.1 305c-14.1 9.1-28.5 16.3-43.1 21.4 2.7-4.7 5.4-9.7 8-14.8l15.5-31.1L77.7 256C64.2 242.6 48 220.7 48 192c0-60.7 73.3-112 160-112s160 51.3 160 112-73.3 112-160 112c-16.5 0-33-1.9-49-5.6l-19.8-4.5zM498.3 352l-24.7 24.4 15.5 31.1c2.6 5.1 5.3 10.1 8 14.8-14.6-5.1-29-12.3-43.1-21.4l-17.1-11.1-19.9 4.6c-16 3.7-32.5 5.6-49 5.6-54 0-102.2-20.1-131.3-49.7C338 339.5 416 272.9 416 192c0-3.4-.4-6.7-.7-10C479.7 196.5 528 238.8 528 288c0 28.7-16.2 50.6-29.7 64z\"]\n};\nvar faCompass = {\n prefix: 'far',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M347.94 129.86L203.6 195.83a31.938 31.938 0 0 0-15.77 15.77l-65.97 144.34c-7.61 16.65 9.54 33.81 26.2 26.2l144.34-65.97a31.938 31.938 0 0 0 15.77-15.77l65.97-144.34c7.61-16.66-9.54-33.81-26.2-26.2zm-77.36 148.72c-12.47 12.47-32.69 12.47-45.16 0-12.47-12.47-12.47-32.69 0-45.16 12.47-12.47 32.69-12.47 45.16 0 12.47 12.47 12.47 32.69 0 45.16zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faCopy = {\n prefix: 'far',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"]\n};\nvar faCopyright = {\n prefix: 'far',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm107.351-101.064c-9.614 9.712-45.53 41.396-104.065 41.396-82.43 0-140.484-61.425-140.484-141.567 0-79.152 60.275-139.401 139.762-139.401 55.531 0 88.738 26.62 97.593 34.779a11.965 11.965 0 0 1 1.936 15.322l-18.155 28.113c-3.841 5.95-11.966 7.282-17.499 2.921-8.595-6.776-31.814-22.538-61.708-22.538-48.303 0-77.916 35.33-77.916 80.082 0 41.589 26.888 83.692 78.277 83.692 32.657 0 56.843-19.039 65.726-27.225 5.27-4.857 13.596-4.039 17.82 1.738l19.865 27.17a11.947 11.947 0 0 1-1.152 15.518z\"]\n};\nvar faCreditCard = {\n prefix: 'far',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M527.9 32H48.1C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48.1 48h479.8c26.6 0 48.1-21.5 48.1-48V80c0-26.5-21.5-48-48.1-48zM54.1 80h467.8c3.3 0 6 2.7 6 6v42H48.1V86c0-3.3 2.7-6 6-6zm467.8 352H54.1c-3.3 0-6-2.7-6-6V256h479.8v170c0 3.3-2.7 6-6 6zM192 332v40c0 6.6-5.4 12-12 12h-72c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12zm192 0v40c0 6.6-5.4 12-12 12H236c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12z\"]\n};\nvar faDizzy = {\n prefix: 'far',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-33.8-217.9c7.8-7.8 7.8-20.5 0-28.3L196.3 192l17.9-17.9c7.8-7.8 7.8-20.5 0-28.3-7.8-7.8-20.5-7.8-28.3 0L168 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.9 7.7 20.5 7.7 28.4-.2zm160-92.2c-7.8-7.8-20.5-7.8-28.3 0L328 163.7l-17.8-17.8c-7.8-7.8-20.5-7.8-28.3 0-7.8 7.8-7.8 20.5 0 28.3l17.9 17.9-17.9 17.9c-7.8 7.8-7.8 20.5 0 28.3 7.8 7.8 20.5 7.8 28.3 0l17.8-17.8 17.8 17.8c7.8 7.8 20.5 7.8 28.3 0 7.8-7.8 7.8-20.5 0-28.3l-17.8-18 17.9-17.9c7.7-7.8 7.7-20.4 0-28.2zM248 272c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64z\"]\n};\nvar faDotCircle = {\n prefix: 'far',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 56c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m0-48C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 168c-44.183 0-80 35.817-80 80s35.817 80 80 80 80-35.817 80-80-35.817-80-80-80z\"]\n};\nvar faEdit = {\n prefix: 'far',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z\"]\n};\nvar faEnvelope = {\n prefix: 'far',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'far',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M494.586 164.516c-4.697-3.883-111.723-89.95-135.251-108.657C337.231 38.191 299.437 0 256 0c-43.205 0-80.636 37.717-103.335 55.859-24.463 19.45-131.07 105.195-135.15 108.549A48.004 48.004 0 0 0 0 201.485V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V201.509a48 48 0 0 0-17.414-36.993zM464 458a6 6 0 0 1-6 6H54a6 6 0 0 1-6-6V204.347c0-1.813.816-3.526 2.226-4.665 15.87-12.814 108.793-87.554 132.364-106.293C200.755 78.88 232.398 48 256 48c23.693 0 55.857 31.369 73.41 45.389 23.573 18.741 116.503 93.493 132.366 106.316a5.99 5.99 0 0 1 2.224 4.663V458zm-31.991-187.704c4.249 5.159 3.465 12.795-1.745 16.981-28.975 23.283-59.274 47.597-70.929 56.863C336.636 362.283 299.205 400 256 400c-43.452 0-81.287-38.237-103.335-55.86-11.279-8.967-41.744-33.413-70.927-56.865-5.21-4.187-5.993-11.822-1.745-16.981l15.258-18.528c4.178-5.073 11.657-5.843 16.779-1.726 28.618 23.001 58.566 47.035 70.56 56.571C200.143 320.631 232.307 352 256 352c23.602 0 55.246-30.88 73.41-45.389 11.994-9.535 41.944-33.57 70.563-56.568 5.122-4.116 12.601-3.346 16.778 1.727l15.258 18.526z\"]\n};\nvar faEye = {\n prefix: 'far',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M288 144a110.94 110.94 0 0 0-31.24 5 55.4 55.4 0 0 1 7.24 27 56 56 0 0 1-56 56 55.4 55.4 0 0 1-27-7.24A111.71 111.71 0 1 0 288 144zm284.52 97.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400c-98.65 0-189.09-55-237.93-144C98.91 167 189.34 112 288 112s189.09 55 237.93 144C477.1 345 386.66 400 288 400z\"]\n};\nvar faEyeSlash = {\n prefix: 'far',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M634 471L36 3.51A16 16 0 0 0 13.51 6l-10 12.49A16 16 0 0 0 6 41l598 467.49a16 16 0 0 0 22.49-2.49l10-12.49A16 16 0 0 0 634 471zM296.79 146.47l134.79 105.38C429.36 191.91 380.48 144 320 144a112.26 112.26 0 0 0-23.21 2.47zm46.42 219.07L208.42 260.16C210.65 320.09 259.53 368 320 368a113 113 0 0 0 23.21-2.46zM320 112c98.65 0 189.09 55 237.93 144a285.53 285.53 0 0 1-44 60.2l37.74 29.5a333.7 333.7 0 0 0 52.9-75.11 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64c-36.7 0-71.71 7-104.63 18.81l46.41 36.29c18.94-4.3 38.34-7.1 58.22-7.1zm0 288c-98.65 0-189.08-55-237.93-144a285.47 285.47 0 0 1 44.05-60.19l-37.74-29.5a333.6 333.6 0 0 0-52.89 75.1 32.35 32.35 0 0 0 0 29.19C89.72 376.41 197.08 448 320 448c36.7 0 71.71-7.05 104.63-18.81l-46.41-36.28C359.28 397.2 339.89 400 320 400z\"]\n};\nvar faFile = {\n prefix: 'far',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z\"]\n};\nvar faFileAlt = {\n prefix: 'far',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z\"]\n};\nvar faFileArchive = {\n prefix: 'far',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M128.3 160v32h32v-32zm64-96h-32v32h32zm-64 32v32h32V96zm64 32h-32v32h32zm177.6-30.1L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h79.7v16h32V48H208v104c0 13.3 10.7 24 24 24h104zM194.2 265.7c-1.1-5.6-6-9.7-11.8-9.7h-22.1v-32h-32v32l-19.7 97.1C102 385.6 126.8 416 160 416c33.1 0 57.9-30.2 51.5-62.6zm-33.9 124.4c-17.9 0-32.4-12.1-32.4-27s14.5-27 32.4-27 32.4 12.1 32.4 27-14.5 27-32.4 27zm32-198.1h-32v32h32z\"]\n};\nvar faFileAudio = {\n prefix: 'far',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm144-76.024c0 10.691-12.926 16.045-20.485 8.485L136 360.486h-28c-6.627 0-12-5.373-12-12v-56c0-6.627 5.373-12 12-12h28l35.515-36.947c7.56-7.56 20.485-2.206 20.485 8.485v135.952zm41.201-47.13c9.051-9.297 9.06-24.133.001-33.439-22.149-22.752 12.235-56.246 34.395-33.481 27.198 27.94 27.212 72.444.001 100.401-21.793 22.386-56.947-10.315-34.397-33.481z\"]\n};\nvar faFileCode = {\n prefix: 'far',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M149.9 349.1l-.2-.2-32.8-28.9 32.8-28.9c3.6-3.2 4-8.8.8-12.4l-.2-.2-17.4-18.6c-3.4-3.6-9-3.7-12.4-.4l-57.7 54.1c-3.7 3.5-3.7 9.4 0 12.8l57.7 54.1c1.6 1.5 3.8 2.4 6 2.4 2.4 0 4.8-1 6.4-2.8l17.4-18.6c3.3-3.5 3.1-9.1-.4-12.4zm220-251.2L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM256 51.9l76.1 76.1H256zM336 464H48V48h160v104c0 13.3 10.7 24 24 24h104zM209.6 214c-4.7-1.4-9.5 1.3-10.9 6L144 408.1c-1.4 4.7 1.3 9.6 6 10.9l24.4 7.1c4.7 1.4 9.6-1.4 10.9-6L240 231.9c1.4-4.7-1.3-9.6-6-10.9zm24.5 76.9l.2.2 32.8 28.9-32.8 28.9c-3.6 3.2-4 8.8-.8 12.4l.2.2 17.4 18.6c3.3 3.5 8.9 3.7 12.4.4l57.7-54.1c3.7-3.5 3.7-9.4 0-12.8l-57.7-54.1c-3.5-3.3-9.1-3.2-12.4.4l-17.4 18.6c-3.3 3.5-3.1 9.1.4 12.4z\"]\n};\nvar faFileExcel = {\n prefix: 'far',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm212-240h-28.8c-4.4 0-8.4 2.4-10.5 6.3-18 33.1-22.2 42.4-28.6 57.7-13.9-29.1-6.9-17.3-28.6-57.7-2.1-3.9-6.2-6.3-10.6-6.3H124c-9.3 0-15 10-10.4 18l46.3 78-46.3 78c-4.7 8 1.1 18 10.4 18h28.9c4.4 0 8.4-2.4 10.5-6.3 21.7-40 23-45 28.6-57.7 14.9 30.2 5.9 15.9 28.6 57.7 2.1 3.9 6.2 6.3 10.6 6.3H260c9.3 0 15-10 10.4-18L224 320c.7-1.1 30.3-50.5 46.3-78 4.7-8-1.1-18-10.3-18z\"]\n};\nvar faFileImage = {\n prefix: 'far',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z\"]\n};\nvar faFilePdf = {\n prefix: 'far',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm250.2-143.7c-12.2-12-47-8.7-64.4-6.5-17.2-10.5-28.7-25-36.8-46.3 3.9-16.1 10.1-40.6 5.4-56-4.2-26.2-37.8-23.6-42.6-5.9-4.4 16.1-.4 38.5 7 67.1-10 23.9-24.9 56-35.4 74.4-20 10.3-47 26.2-51 46.2-3.3 15.8 26 55.2 76.1-31.2 22.4-7.4 46.8-16.5 68.4-20.1 18.9 10.2 41 17 55.8 17 25.5 0 28-28.2 17.5-38.7zm-198.1 77.8c5.1-13.7 24.5-29.5 30.4-35-19 30.3-30.4 35.7-30.4 35zm81.6-190.6c7.4 0 6.7 32.1 1.8 40.8-4.4-13.9-4.3-40.8-1.8-40.8zm-24.4 136.6c9.7-16.9 18-37 24.7-54.7 8.3 15.1 18.9 27.2 30.1 35.5-20.8 4.3-38.9 13.1-54.8 19.2zm131.6-5s-5 6-37.3-7.8c35.1-2.6 40.9 5.4 37.3 7.8z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'far',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z\"]\n};\nvar faFileVideo = {\n prefix: 'far',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M369.941 97.941l-83.882-83.882A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v416c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48V131.882a48 48 0 0 0-14.059-33.941zM332.118 128H256V51.882L332.118 128zM48 464V48h160v104c0 13.255 10.745 24 24 24h104v288H48zm228.687-211.303L224 305.374V268c0-11.046-8.954-20-20-20H100c-11.046 0-20 8.954-20 20v104c0 11.046 8.954 20 20 20h104c11.046 0 20-8.954 20-20v-37.374l52.687 52.674C286.704 397.318 304 390.28 304 375.986V264.011c0-14.311-17.309-21.319-27.313-11.314z\"]\n};\nvar faFileWord = {\n prefix: 'far',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm220.1-208c-5.7 0-10.6 4-11.7 9.5-20.6 97.7-20.4 95.4-21 103.5-.2-1.2-.4-2.6-.7-4.3-.8-5.1.3.2-23.6-99.5-1.3-5.4-6.1-9.2-11.7-9.2h-13.3c-5.5 0-10.3 3.8-11.7 9.1-24.4 99-24 96.2-24.8 103.7-.1-1.1-.2-2.5-.5-4.2-.7-5.2-14.1-73.3-19.1-99-1.1-5.6-6-9.7-11.8-9.7h-16.8c-7.8 0-13.5 7.3-11.7 14.8 8 32.6 26.7 109.5 33.2 136 1.3 5.4 6.1 9.1 11.7 9.1h25.2c5.5 0 10.3-3.7 11.6-9.1l17.9-71.4c1.5-6.2 2.5-12 3-17.3l2.9 17.3c.1.4 12.6 50.5 17.9 71.4 1.3 5.3 6.1 9.1 11.6 9.1h24.7c5.5 0 10.3-3.7 11.6-9.1 20.8-81.9 30.2-119 34.5-136 1.9-7.6-3.8-14.9-11.6-14.9h-15.8z\"]\n};\nvar faFlag = {\n prefix: 'far',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M336.174 80c-49.132 0-93.305-32-161.913-32-31.301 0-58.303 6.482-80.721 15.168a48.04 48.04 0 0 0 2.142-20.727C93.067 19.575 74.167 1.594 51.201.104 23.242-1.71 0 20.431 0 48c0 17.764 9.657 33.262 24 41.562V496c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-83.443C109.869 395.28 143.259 384 199.826 384c49.132 0 93.305 32 161.913 32 58.479 0 101.972-22.617 128.548-39.981C503.846 367.161 512 352.051 512 335.855V95.937c0-34.459-35.264-57.768-66.904-44.117C409.193 67.309 371.641 80 336.174 80zM464 336c-21.783 15.412-60.824 32-102.261 32-59.945 0-102.002-32-161.913-32-43.361 0-96.379 9.403-127.826 24V128c21.784-15.412 60.824-32 102.261-32 59.945 0 102.002 32 161.913 32 43.271 0 96.32-17.366 127.826-32v240z\"]\n};\nvar faFlushed = {\n prefix: 'far',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm96-312c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-112 24c0-44.2-35.8-80-80-80s-80 35.8-80 80 35.8 80 80 80 80-35.8 80-80zm-80 48c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm160 144H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faFolder = {\n prefix: 'far',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-54.63-54.63c-6-6-14.14-9.37-22.63-9.37H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm0 272H48V112h140.12l54.63 54.63c6 6 14.14 9.37 22.63 9.37H464v224z\"]\n};\nvar faFolderOpen = {\n prefix: 'far',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M527.9 224H480v-48c0-26.5-21.5-48-48-48H272l-64-64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h400c16.5 0 31.9-8.5 40.7-22.6l79.9-128c20-31.9-3-73.4-40.7-73.4zM48 118c0-3.3 2.7-6 6-6h134.1l64 64H426c3.3 0 6 2.7 6 6v42H152c-16.8 0-32.4 8.8-41.1 23.2L48 351.4zm400 282H72l77.2-128H528z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'far',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFrown = {\n prefix: 'far',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 128c-40.2 0-78 17.7-103.8 48.6-8.5 10.2-7.1 25.3 3.1 33.8 10.2 8.4 25.3 7.1 33.8-3.1 16.6-19.9 41-31.4 66.9-31.4s50.3 11.4 66.9 31.4c8.1 9.7 23.1 11.9 33.8 3.1 10.2-8.5 11.5-23.6 3.1-33.8C326 321.7 288.2 304 248 304z\"]\n};\nvar faFrownOpen = {\n prefix: 'far',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-48-248c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-80 112c-35.6 0-88.8 21.3-95.8 61.2-2 11.8 9 21.5 20.5 18.1 31.2-9.6 59.4-15.3 75.3-15.3s44.1 5.7 75.3 15.3c11.4 3.5 22.5-6.3 20.5-18.1-7-39.9-60.2-61.2-95.8-61.2z\"]\n};\nvar faFutbol = {\n prefix: 'far',\n iconName: 'futbol',\n icon: [496, 512, [], \"f1e3\", \"M483.8 179.4C449.8 74.6 352.6 8 248.1 8c-25.4 0-51.2 3.9-76.7 12.2C41.2 62.5-30.1 202.4 12.2 332.6 46.2 437.4 143.4 504 247.9 504c25.4 0 51.2-3.9 76.7-12.2 130.2-42.3 201.5-182.2 159.2-312.4zm-74.5 193.7l-52.2 6.4-43.7-60.9 24.4-75.2 71.1-22.1 38.9 36.4c-.2 30.7-7.4 61.1-21.7 89.2-4.7 9.3-10.7 17.8-16.8 26.2zm0-235.4l-10.4 53.1-70.7 22-64.2-46.5V92.5l47.4-26.2c39.2 13 73.4 38 97.9 71.4zM184.9 66.4L232 92.5v73.8l-64.2 46.5-70.6-22-10.1-52.5c24.3-33.4 57.9-58.6 97.8-71.9zM139 379.5L85.9 373c-14.4-20.1-37.3-59.6-37.8-115.3l39-36.4 71.1 22.2 24.3 74.3-43.5 61.7zm48.2 67l-22.4-48.1 43.6-61.7H287l44.3 61.7-22.4 48.1c-6.2 1.8-57.6 20.4-121.7 0z\"]\n};\nvar faGem = {\n prefix: 'far',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M464 0H112c-4 0-7.8 2-10 5.4L2 152.6c-2.9 4.4-2.6 10.2.7 14.2l276 340.8c4.8 5.9 13.8 5.9 18.6 0l276-340.8c3.3-4.1 3.6-9.8.7-14.2L474.1 5.4C471.8 2 468.1 0 464 0zm-19.3 48l63.3 96h-68.4l-51.7-96h56.8zm-202.1 0h90.7l51.7 96H191l51.6-96zm-111.3 0h56.8l-51.7 96H68l63.3-96zm-43 144h51.4L208 352 88.3 192zm102.9 0h193.6L288 435.3 191.2 192zM368 352l68.2-160h51.4L368 352z\"]\n};\nvar faGrimace = {\n prefix: 'far',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm16 16H152c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h192c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48zm-168 96h-24c-8.8 0-16-7.2-16-16v-8h40v24zm0-40h-40v-8c0-8.8 7.2-16 16-16h24v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm64 40h-48v-24h48v24zm0-40h-48v-24h48v24zm56 24c0 8.8-7.2 16-16 16h-24v-24h40v8zm0-24h-40v-24h24c8.8 0 16 7.2 16 16v8z\"]\n};\nvar faGrin = {\n prefix: 'far',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faGrinAlt = {\n prefix: 'far',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M200.3 248c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zm128 0c12.4-18.7 15.1-37.3 15.7-56-.5-18.7-3.3-37.3-15.7-56-8-12-25.1-11.4-32.7 0-12.4 18.7-15.1 37.3-15.7 56 .5 18.7 3.3 37.3 15.7 56 8.1 12 25.2 11.4 32.7 0zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'far',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-235.9-72.9c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3zm160 0c3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'far',\n iconName: 'grin-beam-sweat',\n icon: [496, 512, [], \"f583\", \"M440 160c29.5 0 53.3-26.3 53.3-58.7 0-25-31.7-75.5-46.2-97.3-3.6-5.3-10.7-5.3-14.2 0-14.5 21.8-46.2 72.3-46.2 97.3 0 32.4 23.8 58.7 53.3 58.7zM248 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zm105.3-52.9c-24.6 15.7-46 12.9-46.4 12.9 6.9 20.2 10.8 41.8 10.8 64.3 0 110.3-89.7 200-200 200S48 366.3 48 256 137.7 56 248 56c39.8 0 76.8 11.8 108 31.9 1.7-9.5 6.3-24.1 17.2-45.7C336.4 20.6 293.7 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-27-4.4-52.9-12.4-77.2zM168 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinHearts = {\n prefix: 'far',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M353.6 304.6c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-152.8-48.9c4.5 1.2 9.2-1.5 10.5-6l19.4-69.9c5.6-20.3-7.4-41.1-28.8-44.5-18.6-3-36.4 9.8-41.5 27.9l-2 7.1-7.1-1.9c-18.2-4.7-38.2 4.3-44.9 22-7.7 20.2 3.8 41.9 24.2 47.2l70.2 18.1zm188.8-65.3c-6.7-17.6-26.7-26.7-44.9-22l-7.1 1.9-2-7.1c-5-18.1-22.8-30.9-41.5-27.9-21.4 3.4-34.4 24.2-28.8 44.5l19.4 69.9c1.2 4.5 5.9 7.2 10.5 6l70.2-18.2c20.4-5.3 31.9-26.9 24.2-47.1zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200z\"]\n};\nvar faGrinSquint = {\n prefix: 'far',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.4-17.7 15.3 7.9 47.1 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-234.7-40.8c3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3l-80-48c-5.1-3-11.4-1.9-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11.1.1 15.5zm242.9 2.5c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11-.1-15.5-3.8-4.4-10.2-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'far',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M117.1 384.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 479 124.3 420.8 128 395c.8-6.4-4.6-11.8-10.9-10.9zm-41.2-41.7C40.3 268 53 176.1 114.6 114.6 152.4 76.8 202.6 56 256 56c36.2 0 70.8 9.8 101.2 27.7 3.8-20.3 8-36.1 12-48.3C333.8 17.2 294.9 8 256 8 192.5 8 129.1 32.2 80.6 80.6c-74.1 74.1-91.3 183.4-52 274 12.2-4.1 27.7-8.3 47.3-12.2zm352.3-187.6c45 76.6 34.9 176.9-30.8 242.6-37.8 37.8-88 58.6-141.4 58.6-30.5 0-59.8-7-86.4-19.8-3.9 19.5-8 35-12.2 47.2 31.4 13.6 65 20.6 98.7 20.6 63.5 0 126.9-24.2 175.4-72.6 78.1-78.1 93.1-195.4 45.2-288.6-12.3 4-28.2 8.1-48.5 12zm-33.3-26.9c25.8-3.7 84-13.7 100.9-30.6 21.9-21.9 21.5-57.9-.9-80.3s-58.3-22.8-80.3-.9C397.7 33 387.7 91.2 384 117c-.8 6.4 4.6 11.8 10.9 10.9zm-187 108.3c-3-3-7.2-4.2-11.4-3.2L106 255.7c-5.7 1.4-9.5 6.7-9.1 12.6.5 5.8 5.1 10.5 10.9 11l52.3 4.8 4.8 52.3c.5 5.8 5.2 10.4 11 10.9h.9c5.5 0 10.3-3.7 11.7-9.1l22.6-90.5c1-4.2-.2-8.5-3.2-11.5zm39.7-25.1l90.5-22.6c5.7-1.4 9.5-6.7 9.1-12.6-.5-5.8-5.1-10.5-10.9-11l-52.3-4.8-4.8-52.3c-.5-5.8-5.2-10.4-11-10.9-5.6-.1-11.2 3.4-12.6 9.1L233 196.5c-1 4.1.2 8.4 3.2 11.4 5 5 11.3 3.2 11.4 3.2zm52 88.5c-29.1 29.1-59.7 52.9-83.9 65.4-9.2 4.8-10 17.5-1.7 23.4 38.9 27.7 107 6.2 143.7-30.6S416 253 388.3 214.1c-5.8-8.2-18.5-7.6-23.4 1.7-12.3 24.2-36.2 54.7-65.3 83.8z\"]\n};\nvar faGrinStars = {\n prefix: 'far',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm105.6-151.4c-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 7.9 47.2 71.3 80 123.3 80s115.3-32.9 123.3-80c1.6-9.8-7.7-18.4-17.7-15.3zm-227.9-57.5c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.5 1.9-12.2-4.3-13.2l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6.1 34.9zm259.7-72.7l-34.9-5-15.5-31.6c-2.9-5.8-11-5.8-13.9 0l-15.5 31.6-34.9 5c-6.2.9-8.9 8.6-4.3 13.2l25.4 24.6-6 34.9c-1 6.2 5.4 11 11 7.9l31.3-16.3 31.3 16.3c5.6 3.1 12-1.7 11-7.9l-6-34.9 25.4-24.6c4.5-4.6 1.8-12.2-4.4-13.2z\"]\n};\nvar faGrinTears = {\n prefix: 'far',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M117.1 256.1c-25.8 3.7-84 13.7-100.9 30.6-21.9 21.9-21.5 57.9.9 80.3s58.3 22.8 80.3.9C114.3 351 124.3 292.8 128 267c.8-6.4-4.6-11.8-10.9-10.9zm506.7 30.6c-16.9-16.9-75.1-26.9-100.9-30.6-6.3-.9-11.7 4.5-10.8 10.8 3.7 25.8 13.7 84 30.6 100.9 21.9 21.9 57.9 21.5 80.3-.9 22.3-22.3 22.7-58.3.8-80.2zm-126.6 61.7C463.8 412.3 396.9 456 320 456c-76.9 0-143.8-43.7-177.2-107.6-12.5 37.4-25.2 43.9-28.3 46.5C159.1 460.7 234.5 504 320 504s160.9-43.3 205.5-109.1c-3.2-2.7-15.9-9.2-28.3-46.5zM122.7 224.5C137.9 129.2 220.5 56 320 56c99.5 0 182.1 73.2 197.3 168.5 2.1-.2 5.2-2.4 49.5 7C554.4 106 448.7 8 320 8S85.6 106 73.2 231.4c44.5-9.4 47.1-7.2 49.5-6.9zM320 400c51.9 0 115.3-32.9 123.3-80 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.8-3.1-19.4 5.3-17.7 15.3 8 47.1 71.4 80 123.3 80zm130.3-168.3c3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.6 6.2 4.6 9.3 3.7zM240 189.4c12.3 0 23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.8 19.2-21.6 31.5-21.6z\"]\n};\nvar faGrinTongue = {\n prefix: 'far',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zM168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'far',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3zm36.9-281.1c-3.8-4.4-10.3-5.5-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.7 1.7 15.3-2.5 3.8-4.5 3.8-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zm-162.9 45.5l-80-48c-5-3-11.4-2-15.3 2.5-3.8 4.5-3.8 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.6 4.2 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3s-2.2-8.1-5.8-10.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'far',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M152 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm176-52c-44.2 0-80 35.8-80 80s35.8 80 80 80 80-35.8 80-80-35.8-80-80-80zm0 128c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-72c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm64 400c0 35.6-29.1 64.5-64.9 64-35.1-.5-63.1-29.8-63.1-65v-42.8l17.7-8.8c15-7.5 31.5 1.7 34.9 16.5l2.8 12.1c2.1 9.2 15.2 9.2 17.3 0l2.8-12.1c3.4-14.8 19.8-24.1 34.9-16.5l17.7 8.8V408zm28.2 25.3c2.2-8.1 3.8-16.5 3.8-25.3v-43.5c14.2-12.4 24.4-27.5 27.3-44.5 1.7-9.9-7.7-18.5-17.7-15.3-25.9 8.3-64.4 13.1-105.6 13.1s-79.6-4.8-105.6-13.1c-9.9-3.1-19.4 5.3-17.7 15.3 2.9 17 13.1 32.1 27.3 44.5V408c0 8.8 1.6 17.2 3.8 25.3C91.8 399.9 48 333 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 77-43.8 143.9-107.8 177.3z\"]\n};\nvar faGrinWink = {\n prefix: 'far',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M328 180c-25.69 0-55.88 16.92-59.86 42.12-1.75 11.22 11.5 18.24 19.83 10.84l9.55-8.48c14.81-13.19 46.16-13.19 60.97 0l9.55 8.48c8.48 7.43 21.56.25 19.83-10.84C383.88 196.92 353.69 180 328 180zm-160 60c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm185.55 64.64c-25.93 8.3-64.4 13.06-105.55 13.06s-79.62-4.75-105.55-13.06c-9.94-3.13-19.4 5.37-17.71 15.34C132.67 367.13 196.06 400 248 400s115.33-32.87 123.26-80.02c1.68-9.89-7.67-18.48-17.71-15.34zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 448c-110.28 0-200-89.72-200-200S137.72 56 248 56s200 89.72 200 200-89.72 200-200 200z\"]\n};\nvar faHandLizard = {\n prefix: 'far',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M556.686 290.542L410.328 64.829C397.001 44.272 374.417 32 349.917 32H56C25.121 32 0 57.122 0 88v8c0 44.112 35.888 80 80 80h196.042l-18.333 48H144c-48.523 0-88 39.477-88 88 0 30.879 25.121 56 56 56h131.552c2.987 0 5.914.549 8.697 1.631L352 408.418V480h224V355.829c0-23.225-6.679-45.801-19.314-65.287zM528 432H400v-23.582c0-19.948-12.014-37.508-30.604-44.736l-99.751-38.788A71.733 71.733 0 0 0 243.552 320H112c-4.411 0-8-3.589-8-8 0-22.056 17.944-40 40-40h113.709c19.767 0 37.786-12.407 44.84-30.873l24.552-64.281c8.996-23.553-8.428-48.846-33.63-48.846H80c-17.645 0-32-14.355-32-32v-8c0-4.411 3.589-8 8-8h293.917c8.166 0 15.693 4.09 20.137 10.942l146.358 225.715A71.84 71.84 0 0 1 528 355.829V432z\"]\n};\nvar faHandPaper = {\n prefix: 'far',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M372.57 112.641v-10.825c0-43.612-40.52-76.691-83.039-65.546-25.629-49.5-94.09-47.45-117.982.747C130.269 26.456 89.144 57.945 89.144 102v126.13c-19.953-7.427-43.308-5.068-62.083 8.871-29.355 21.796-35.794 63.333-14.55 93.153L132.48 498.569a32 32 0 0 0 26.062 13.432h222.897c14.904 0 27.835-10.289 31.182-24.813l30.184-130.958A203.637 203.637 0 0 0 448 310.564V179c0-40.62-35.523-71.992-75.43-66.359zm27.427 197.922c0 11.731-1.334 23.469-3.965 34.886L368.707 464h-201.92L51.591 302.303c-14.439-20.27 15.023-42.776 29.394-22.605l27.128 38.079c8.995 12.626 29.031 6.287 29.031-9.283V102c0-25.645 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V67c0-25.663 36.571-24.81 36.571.691V256c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16V101.125c0-25.672 36.57-24.81 36.57.691V256c0 8.837 7.163 16 16 16h6.857c8.837 0 16-7.163 16-16v-76.309c0-26.242 36.57-25.64 36.57-.691v131.563z\"]\n};\nvar faHandPeace = {\n prefix: 'far',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M362.146 191.976c-13.71-21.649-38.761-34.016-65.006-30.341V74c0-40.804-32.811-74-73.141-74-40.33 0-73.14 33.196-73.14 74L160 168l-18.679-78.85C126.578 50.843 83.85 32.11 46.209 47.208 8.735 62.238-9.571 104.963 5.008 142.85l55.757 144.927c-30.557 24.956-43.994 57.809-24.733 92.218l54.853 97.999C102.625 498.97 124.73 512 148.575 512h205.702c30.744 0 57.558-21.44 64.555-51.797l27.427-118.999a67.801 67.801 0 0 0 1.729-15.203L448 256c0-44.956-43.263-77.343-85.854-64.024zM399.987 326c0 1.488-.169 2.977-.502 4.423l-27.427 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H148.575c-6.486 0-12.542-3.621-15.805-9.449l-54.854-98c-4.557-8.141-2.619-18.668 4.508-24.488l26.647-21.764a16 16 0 0 0 4.812-18.139l-64.09-166.549C37.226 92.956 84.37 74.837 96.51 106.389l59.784 155.357A16 16 0 0 0 171.227 272h11.632c8.837 0 16-7.163 16-16V74c0-34.375 50.281-34.43 50.281 0v182c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16v-28c0-25.122 36.567-25.159 36.567 0v28c0 8.837 7.163 16 16 16h6.856c8.837 0 16-7.163 16-16 0-25.12 36.567-25.16 36.567 0v70z\"]\n};\nvar faHandPointDown = {\n prefix: 'far',\n iconName: 'hand-point-down',\n icon: [448, 512, [], \"f0a7\", \"M188.8 512c45.616 0 83.2-37.765 83.2-83.2v-35.647a93.148 93.148 0 0 0 22.064-7.929c22.006 2.507 44.978-3.503 62.791-15.985C409.342 368.1 448 331.841 448 269.299V248c0-60.063-40-98.512-40-127.2v-2.679c4.952-5.747 8-13.536 8-22.12V32c0-17.673-12.894-32-28.8-32H156.8C140.894 0 128 14.327 128 32v64c0 8.584 3.048 16.373 8 22.12v2.679c0 6.964-6.193 14.862-23.668 30.183l-.148.129-.146.131c-9.937 8.856-20.841 18.116-33.253 25.851C48.537 195.798 0 207.486 0 252.8c0 56.928 35.286 92 83.2 92 8.026 0 15.489-.814 22.4-2.176V428.8c0 45.099 38.101 83.2 83.2 83.2zm0-48c-18.7 0-35.2-16.775-35.2-35.2V270.4c-17.325 0-35.2 26.4-70.4 26.4-26.4 0-35.2-20.625-35.2-44 0-8.794 32.712-20.445 56.1-34.926 14.575-9.074 27.225-19.524 39.875-30.799 18.374-16.109 36.633-33.836 39.596-59.075h176.752C364.087 170.79 400 202.509 400 248v21.299c0 40.524-22.197 57.124-61.325 50.601-8.001 14.612-33.979 24.151-53.625 12.925-18.225 19.365-46.381 17.787-61.05 4.95V428.8c0 18.975-16.225 35.2-35.2 35.2zM328 64c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24z\"]\n};\nvar faHandPointLeft = {\n prefix: 'far',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M0 220.8C0 266.416 37.765 304 83.2 304h35.647a93.148 93.148 0 0 0 7.929 22.064c-2.507 22.006 3.503 44.978 15.985 62.791C143.9 441.342 180.159 480 242.701 480H264c60.063 0 98.512-40 127.2-40h2.679c5.747 4.952 13.536 8 22.12 8h64c17.673 0 32-12.894 32-28.8V188.8c0-15.906-14.327-28.8-32-28.8h-64c-8.584 0-16.373 3.048-22.12 8H391.2c-6.964 0-14.862-6.193-30.183-23.668l-.129-.148-.131-.146c-8.856-9.937-18.116-20.841-25.851-33.253C316.202 80.537 304.514 32 259.2 32c-56.928 0-92 35.286-92 83.2 0 8.026.814 15.489 2.176 22.4H83.2C38.101 137.6 0 175.701 0 220.8zm48 0c0-18.7 16.775-35.2 35.2-35.2h158.4c0-17.325-26.4-35.2-26.4-70.4 0-26.4 20.625-35.2 44-35.2 8.794 0 20.445 32.712 34.926 56.1 9.074 14.575 19.524 27.225 30.799 39.875 16.109 18.374 33.836 36.633 59.075 39.596v176.752C341.21 396.087 309.491 432 264 432h-21.299c-40.524 0-57.124-22.197-50.601-61.325-14.612-8.001-24.151-33.979-12.925-53.625-19.365-18.225-17.787-46.381-4.95-61.05H83.2C64.225 256 48 239.775 48 220.8zM448 360c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointRight = {\n prefix: 'far',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M428.8 137.6h-86.177a115.52 115.52 0 0 0 2.176-22.4c0-47.914-35.072-83.2-92-83.2-45.314 0-57.002 48.537-75.707 78.784-7.735 12.413-16.994 23.317-25.851 33.253l-.131.146-.129.148C135.662 161.807 127.764 168 120.8 168h-2.679c-5.747-4.952-13.536-8-22.12-8H32c-17.673 0-32 12.894-32 28.8v230.4C0 435.106 14.327 448 32 448h64c8.584 0 16.373-3.048 22.12-8h2.679c28.688 0 67.137 40 127.2 40h21.299c62.542 0 98.8-38.658 99.94-91.145 12.482-17.813 18.491-40.785 15.985-62.791A93.148 93.148 0 0 0 393.152 304H428.8c45.435 0 83.2-37.584 83.2-83.2 0-45.099-38.101-83.2-83.2-83.2zm0 118.4h-91.026c12.837 14.669 14.415 42.825-4.95 61.05 11.227 19.646 1.687 45.624-12.925 53.625 6.524 39.128-10.076 61.325-50.6 61.325H248c-45.491 0-77.21-35.913-120-39.676V215.571c25.239-2.964 42.966-21.222 59.075-39.596 11.275-12.65 21.725-25.3 30.799-39.875C232.355 112.712 244.006 80 252.8 80c23.375 0 44 8.8 44 35.2 0 35.2-26.4 53.075-26.4 70.4h158.4c18.425 0 35.2 16.5 35.2 35.2 0 18.975-16.225 35.2-35.2 35.2zM88 384c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faHandPointUp = {\n prefix: 'far',\n iconName: 'hand-point-up',\n icon: [448, 512, [], \"f0a6\", \"M105.6 83.2v86.177a115.52 115.52 0 0 0-22.4-2.176c-47.914 0-83.2 35.072-83.2 92 0 45.314 48.537 57.002 78.784 75.707 12.413 7.735 23.317 16.994 33.253 25.851l.146.131.148.129C129.807 376.338 136 384.236 136 391.2v2.679c-4.952 5.747-8 13.536-8 22.12v64c0 17.673 12.894 32 28.8 32h230.4c15.906 0 28.8-14.327 28.8-32v-64c0-8.584-3.048-16.373-8-22.12V391.2c0-28.688 40-67.137 40-127.2v-21.299c0-62.542-38.658-98.8-91.145-99.94-17.813-12.482-40.785-18.491-62.791-15.985A93.148 93.148 0 0 0 272 118.847V83.2C272 37.765 234.416 0 188.8 0c-45.099 0-83.2 38.101-83.2 83.2zm118.4 0v91.026c14.669-12.837 42.825-14.415 61.05 4.95 19.646-11.227 45.624-1.687 53.625 12.925 39.128-6.524 61.325 10.076 61.325 50.6V264c0 45.491-35.913 77.21-39.676 120H183.571c-2.964-25.239-21.222-42.966-39.596-59.075-12.65-11.275-25.3-21.725-39.875-30.799C80.712 279.645 48 267.994 48 259.2c0-23.375 8.8-44 35.2-44 35.2 0 53.075 26.4 70.4 26.4V83.2c0-18.425 16.5-35.2 35.2-35.2 18.975 0 35.2 16.225 35.2 35.2zM352 424c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24z\"]\n};\nvar faHandPointer = {\n prefix: 'far',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M358.182 179.361c-19.493-24.768-52.679-31.945-79.872-19.098-15.127-15.687-36.182-22.487-56.595-19.629V67c0-36.944-29.736-67-66.286-67S89.143 30.056 89.143 67v161.129c-19.909-7.41-43.272-5.094-62.083 8.872-29.355 21.795-35.793 63.333-14.55 93.152l109.699 154.001C134.632 501.59 154.741 512 176 512h178.286c30.802 0 57.574-21.5 64.557-51.797l27.429-118.999A67.873 67.873 0 0 0 448 326v-84c0-46.844-46.625-79.273-89.818-62.639zM80.985 279.697l27.126 38.079c8.995 12.626 29.031 6.287 29.031-9.283V67c0-25.12 36.571-25.16 36.571 0v175c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16v-35c0-25.12 36.571-25.16 36.571 0v35c0 8.836 7.163 16 16 16H272c8.837 0 16-7.164 16-16v-21c0-25.12 36.571-25.16 36.571 0v21c0 8.836 7.163 16 16 16h6.857c8.837 0 16-7.164 16-16 0-25.121 36.571-25.16 36.571 0v84c0 1.488-.169 2.977-.502 4.423l-27.43 119.001c-1.978 8.582-9.29 14.576-17.782 14.576H176c-5.769 0-11.263-2.878-14.697-7.697l-109.712-154c-14.406-20.223 14.994-42.818 29.394-22.606zM176.143 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.733 0-14-7.163-14-16zm75.428 0v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16zM327 400v-96c0-8.837 6.268-16 14-16h6c7.732 0 14 7.163 14 16v96c0 8.837-6.268 16-14 16h-6c-7.732 0-14-7.163-14-16z\"]\n};\nvar faHandRock = {\n prefix: 'far',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M408.864 79.052c-22.401-33.898-66.108-42.273-98.813-23.588-29.474-31.469-79.145-31.093-108.334-.022-47.16-27.02-108.71 5.055-110.671 60.806C44.846 105.407 0 140.001 0 187.429v56.953c0 32.741 14.28 63.954 39.18 85.634l97.71 85.081c4.252 3.702 3.11 5.573 3.11 32.903 0 17.673 14.327 32 32 32h252c17.673 0 32-14.327 32-32 0-23.513-1.015-30.745 3.982-42.37l42.835-99.656c6.094-14.177 9.183-29.172 9.183-44.568V146.963c0-52.839-54.314-88.662-103.136-67.911zM464 261.406a64.505 64.505 0 0 1-5.282 25.613l-42.835 99.655c-5.23 12.171-7.883 25.04-7.883 38.25V432H188v-10.286c0-16.37-7.14-31.977-19.59-42.817l-97.71-85.08C56.274 281.255 48 263.236 48 244.381v-56.953c0-33.208 52-33.537 52 .677v41.228a16 16 0 0 0 5.493 12.067l7 6.095A16 16 0 0 0 139 235.429V118.857c0-33.097 52-33.725 52 .677v26.751c0 8.836 7.164 16 16 16h7c8.836 0 16-7.164 16-16v-41.143c0-33.134 52-33.675 52 .677v40.466c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16v-27.429c0-33.03 52-33.78 52 .677v26.751c0 8.836 7.163 16 16 16h7c8.837 0 16-7.164 16-16 0-33.146 52-33.613 52 .677v114.445z\"]\n};\nvar faHandScissors = {\n prefix: 'far',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M256 480l70-.013c5.114 0 10.231-.583 15.203-1.729l118.999-27.427C490.56 443.835 512 417.02 512 386.277V180.575c0-23.845-13.03-45.951-34.005-57.69l-97.999-54.853c-34.409-19.261-67.263-5.824-92.218 24.733L142.85 37.008c-37.887-14.579-80.612 3.727-95.642 41.201-15.098 37.642 3.635 80.37 41.942 95.112L168 192l-94-9.141c-40.804 0-74 32.811-74 73.14 0 40.33 33.196 73.141 74 73.141h87.635c-3.675 26.245 8.692 51.297 30.341 65.006C178.657 436.737 211.044 480 256 480zm0-48.013c-25.16 0-25.12-36.567 0-36.567 8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16h-28c-25.159 0-25.122-36.567 0-36.567h28c8.837 0 16-7.163 16-16v-6.856c0-8.837-7.163-16-16-16H74c-34.43 0-34.375-50.281 0-50.281h182c8.837 0 16-7.163 16-16v-11.632a16 16 0 0 0-10.254-14.933L106.389 128.51c-31.552-12.14-13.432-59.283 19.222-46.717l166.549 64.091a16.001 16.001 0 0 0 18.139-4.812l21.764-26.647c5.82-7.127 16.348-9.064 24.488-4.508l98 54.854c5.828 3.263 9.449 9.318 9.449 15.805v205.701c0 8.491-5.994 15.804-14.576 17.782l-119.001 27.427a19.743 19.743 0 0 1-4.423.502h-70z\"]\n};\nvar faHandSpock = {\n prefix: 'far',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M21.096 381.79l129.092 121.513a32 32 0 0 0 21.932 8.698h237.6c14.17 0 26.653-9.319 30.68-22.904l31.815-107.313A115.955 115.955 0 0 0 477 348.811v-36.839c0-4.051.476-8.104 1.414-12.045l31.73-133.41c10.099-42.412-22.316-82.738-65.544-82.525-4.144-24.856-22.543-47.165-49.85-53.992-35.803-8.952-72.227 12.655-81.25 48.75L296.599 184 274.924 52.01c-8.286-36.07-44.303-58.572-80.304-50.296-29.616 6.804-50.138 32.389-51.882 61.295-42.637.831-73.455 40.563-64.071 81.844l31.04 136.508c-27.194-22.515-67.284-19.992-91.482 5.722-25.376 26.961-24.098 69.325 2.871 94.707zm32.068-61.811l.002-.001c7.219-7.672 19.241-7.98 26.856-.813l53.012 49.894C143.225 378.649 160 371.4 160 357.406v-69.479c0-1.193-.134-2.383-.397-3.546l-34.13-150.172c-5.596-24.617 31.502-32.86 37.054-8.421l30.399 133.757a16 16 0 0 0 15.603 12.454h8.604c10.276 0 17.894-9.567 15.594-19.583l-41.62-181.153c-5.623-24.469 31.39-33.076 37.035-8.508l45.22 196.828A16 16 0 0 0 288.956 272h13.217a16 16 0 0 0 15.522-12.119l42.372-169.49c6.104-24.422 42.962-15.159 36.865 9.217L358.805 252.12c-2.521 10.088 5.115 19.88 15.522 19.88h9.694a16 16 0 0 0 15.565-12.295L426.509 146.6c5.821-24.448 42.797-15.687 36.966 8.802L431.72 288.81a100.094 100.094 0 0 0-2.72 23.162v36.839c0 6.548-.943 13.051-2.805 19.328L397.775 464h-219.31L53.978 346.836c-7.629-7.18-7.994-19.229-.814-26.857z\"]\n};\nvar faHandshake = {\n prefix: 'far',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M519.2 127.9l-47.6-47.6A56.252 56.252 0 0 0 432 64H205.2c-14.8 0-29.1 5.9-39.6 16.3L118 127.9H0v255.7h64c17.6 0 31.8-14.2 31.9-31.7h9.1l84.6 76.4c30.9 25.1 73.8 25.7 105.6 3.8 12.5 10.8 26 15.9 41.1 15.9 18.2 0 35.3-7.4 48.8-24 22.1 8.7 48.2 2.6 64-16.8l26.2-32.3c5.6-6.9 9.1-14.8 10.9-23h57.9c.1 17.5 14.4 31.7 31.9 31.7h64V127.9H519.2zM48 351.6c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16zm390-6.9l-26.1 32.2c-2.8 3.4-7.8 4-11.3 1.2l-23.9-19.4-30 36.5c-6 7.3-15 4.8-18 2.4l-36.8-31.5-15.6 19.2c-13.9 17.1-39.2 19.7-55.3 6.6l-97.3-88H96V175.8h41.9l61.7-61.6c2-.8 3.7-1.5 5.7-2.3H262l-38.7 35.5c-29.4 26.9-31.1 72.3-4.4 101.3 14.8 16.2 61.2 41.2 101.5 4.4l8.2-7.5 108.2 87.8c3.4 2.8 3.9 7.9 1.2 11.3zm106-40.8h-69.2c-2.3-2.8-4.9-5.4-7.7-7.7l-102.7-83.4 12.5-11.4c6.5-6 7-16.1 1-22.6L367 167.1c-6-6.5-16.1-6.9-22.6-1l-55.2 50.6c-9.5 8.7-25.7 9.4-34.6 0-9.3-9.9-8.5-25.1 1.2-33.9l65.6-60.1c7.4-6.8 17-10.5 27-10.5l83.7-.2c2.1 0 4.1.8 5.5 2.3l61.7 61.6H544v128zm48 47.7c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16c0 8.9-7.2 16-16 16z\"]\n};\nvar faHdd = {\n prefix: 'far',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M567.403 235.642L462.323 84.589A48 48 0 0 0 422.919 64H153.081a48 48 0 0 0-39.404 20.589L8.597 235.642A48.001 48.001 0 0 0 0 263.054V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V263.054c0-9.801-3-19.366-8.597-27.412zM153.081 112h269.838l77.913 112H75.168l77.913-112zM528 400H48V272h480v128zm-32-64c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32zm-96 0c0 17.673-14.327 32-32 32s-32-14.327-32-32 14.327-32 32-32 32 14.327 32 32z\"]\n};\nvar faHeart = {\n prefix: 'far',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M458.4 64.3C400.6 15.7 311.3 23 256 79.3 200.7 23 111.4 15.6 53.6 64.3-21.6 127.6-10.6 230.8 43 285.5l175.4 178.7c10 10.2 23.4 15.9 37.6 15.9 14.3 0 27.6-5.6 37.6-15.8L469 285.6c53.5-54.7 64.7-157.9-10.6-221.3zm-23.6 187.5L259.4 430.5c-2.4 2.4-4.4 2.4-6.8 0L77.2 251.8c-36.5-37.2-43.9-107.6 7.3-150.7 38.9-32.7 98.9-27.8 136.5 10.5l35 35.7 35-35.7c37.8-38.5 97.8-43.2 136.5-10.6 51.1 43.1 43.5 113.9 7.3 150.8z\"]\n};\nvar faHospital = {\n prefix: 'far',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M128 244v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12zm140 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm-76 84v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm76 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm180 124v36H0v-36c0-6.627 5.373-12 12-12h19.5V85.035C31.5 73.418 42.245 64 55.5 64H144V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v40h88.5c13.255 0 24 9.418 24 21.035V464H436c6.627 0 12 5.373 12 12zM79.5 463H192v-67c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v67h112.5V112H304v24c0 13.255-10.745 24-24 24H168c-13.255 0-24-10.745-24-24v-24H79.5v351zM266 64h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6z\"]\n};\nvar faHourglass = {\n prefix: 'far',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M368 48h4c6.627 0 12-5.373 12-12V12c0-6.627-5.373-12-12-12H12C5.373 0 0 5.373 0 12v24c0 6.627 5.373 12 12 12h4c0 80.564 32.188 165.807 97.18 208C47.899 298.381 16 383.9 16 464h-4c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12h-4c0-80.564-32.188-165.807-97.18-208C336.102 213.619 368 128.1 368 48zM64 48h256c0 101.62-57.307 184-128 184S64 149.621 64 48zm256 416H64c0-101.62 57.308-184 128-184s128 82.38 128 184z\"]\n};\nvar faIdBadge = {\n prefix: 'far',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm0 464H48V48h288v416zM144 112h96c8.8 0 16-7.2 16-16s-7.2-16-16-16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16zm48 176c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm-89.6 128h179.2c12.4 0 22.4-8.6 22.4-19.2v-19.2c0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6v19.2c0 10.6 10 19.2 22.4 19.2z\"]\n};\nvar faIdCard = {\n prefix: 'far',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 400H303.2c.9-4.5.8 3.6.8-22.4 0-31.8-30.1-57.6-67.2-57.6-10.8 0-18.7 8-44.8 8-26.9 0-33.4-8-44.8-8-37.1 0-67.2 25.8-67.2 57.6 0 26-.2 17.9.8 22.4H48V144h480v288zm-168-80h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm0-64h112c4.4 0 8-3.6 8-8v-16c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm-168 96c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faImage = {\n prefix: 'far',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z\"]\n};\nvar faImages = {\n prefix: 'far',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v48H54a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6v-10h48zm42-336H150a6 6 0 0 0-6 6v244a6 6 0 0 0 6 6h372a6 6 0 0 0 6-6V86a6 6 0 0 0-6-6zm6-48c26.51 0 48 21.49 48 48v256c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h384zM264 144c0 22.091-17.909 40-40 40s-40-17.909-40-40 17.909-40 40-40 40 17.909 40 40zm-72 96l39.515-39.515c4.686-4.686 12.284-4.686 16.971 0L288 240l103.515-103.515c4.686-4.686 12.284-4.686 16.971 0L480 208v80H192v-48z\"]\n};\nvar faKeyboard = {\n prefix: 'far',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm8 336c0 4.411-3.589 8-8 8H48c-4.411 0-8-3.589-8-8V112c0-4.411 3.589-8 8-8h480c4.411 0 8 3.589 8 8v288zM170 270v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-336 82v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm384 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zM122 188v-28c0-6.627-5.373-12-12-12H82c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm96 0v-28c0-6.627-5.373-12-12-12h-28c-6.627 0-12 5.373-12 12v28c0 6.627 5.373 12 12 12h28c6.627 0 12-5.373 12-12zm-98 158v-16c0-6.627-5.373-12-12-12H180c-6.627 0-12 5.373-12 12v16c0 6.627 5.373 12 12 12h216c6.627 0 12-5.373 12-12z\"]\n};\nvar faKiss = {\n prefix: 'far',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M168 176c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm136 132c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faKissBeam = {\n prefix: 'far',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M168 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm56-148c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36C290.6 335.3 304 321 304 308zm24-156c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2 7.2 5.6 8.3 3.5 1 7.5-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 5.9-4.5 5.6-8.3-3.1-42.1-32-71.4-55.8-71.4z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'far',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M304 308.5c0-19.2-28.8-41.5-71.5-44-3.8-.4-7.4 2.4-8.2 6.2-.9 3.8 1.1 7.7 4.7 9.2l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-5.7 2.4-6 12.2 0 14.8l16.9 7.2c13 5.5 20.8 13.5 20.8 21.5s-7.8 16-20.7 21.5l-17 7.2c-3.6 1.5-5.6 5.4-4.7 9.2.8 3.6 4.1 6.2 7.8 6.2h.5c42.8-2.5 71.5-24.8 71.5-44 0-13-13.4-27.3-35.2-36 21.7-9.1 35.1-23.4 35.1-36.4zm70.5-83.5l9.5 8.5c3.8 3.3 9.3 4 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 5.8 3.1 11.2.7 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0zM136 208.5c0 17.7 14.3 32 32 32s32-14.3 32-32-14.3-32-32-32-32 14.3-32 32zm365.1 194c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zM334 436.3c-26.1 12.5-55.2 19.7-86 19.7-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200c0 22.1-3.7 43.3-10.4 63.2 9 6.4 17 14.2 22.6 23.9 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-2.5-7.3 4.3 17.2-13.4-46.8z\"]\n};\nvar faLaugh = {\n prefix: 'far',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughBeam = {\n prefix: 'far',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 152c-23.8 0-52.7 29.3-56 71.4-.7 8.6 10.8 11.9 14.9 4.5l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.1-42.1-32-71.4-55.8-71.4zm-201 75.9l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c4.1 7.4 15.6 4 14.9-4.5-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.6 8.5 10.9 11.9 15.1 4.5zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughSquint = {\n prefix: 'far',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM343.6 196l33.6-40.3c8.6-10.3-3.8-24.8-15.4-18l-80 48c-7.8 4.7-7.8 15.9 0 20.6l80 48c11.5 6.8 24-7.6 15.4-18L343.6 196zm-209.4 58.3l80-48c7.8-4.7 7.8-15.9 0-20.6l-80-48c-11.6-6.9-24 7.7-15.4 18l33.6 40.3-33.6 40.3c-8.7 10.4 3.8 24.8 15.4 18zM362.4 288H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLaughWink = {\n prefix: 'far',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6C68.8 359.6 48 309.4 48 256s20.8-103.6 58.6-141.4C144.4 76.8 194.6 56 248 56s103.6 20.8 141.4 58.6c37.8 37.8 58.6 88 58.6 141.4s-20.8 103.6-58.6 141.4zM328 164c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1zm-160 60c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\"]\n};\nvar faLemon = {\n prefix: 'far',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M484.112 27.889C455.989-.233 416.108-8.057 387.059 8.865 347.604 31.848 223.504-41.111 91.196 91.197-41.277 223.672 31.923 347.472 8.866 387.058c-16.922 29.051-9.1 68.932 19.022 97.054 28.135 28.135 68.011 35.938 97.057 19.021 39.423-22.97 163.557 49.969 295.858-82.329 132.474-132.477 59.273-256.277 82.331-295.861 16.922-29.05 9.1-68.931-19.022-97.054zm-22.405 72.894c-38.8 66.609 45.6 165.635-74.845 286.08-120.44 120.443-219.475 36.048-286.076 74.843-22.679 13.207-64.035-27.241-50.493-50.488 38.8-66.609-45.6-165.635 74.845-286.08C245.573 4.702 344.616 89.086 411.219 50.292c22.73-13.24 64.005 27.288 50.488 50.491zm-169.861 8.736c1.37 10.96-6.404 20.957-17.365 22.327-54.846 6.855-135.779 87.787-142.635 142.635-1.373 10.989-11.399 18.734-22.326 17.365-10.961-1.37-18.735-11.366-17.365-22.326 9.162-73.286 104.167-168.215 177.365-177.365 10.953-1.368 20.956 6.403 22.326 17.364z\"]\n};\nvar faLifeRing = {\n prefix: 'far',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z\"]\n};\nvar faLightbulb = {\n prefix: 'far',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z\"]\n};\nvar faListAlt = {\n prefix: 'far',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v340a6 6 0 0 1-6 6zm-42-92v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm0-96v24c0 6.627-5.373 12-12 12H204c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h200c6.627 0 12 5.373 12 12zm-252 12c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36zm0 96c0 19.882-16.118 36-36 36s-36-16.118-36-36 16.118-36 36-36 36 16.118 36 36z\"]\n};\nvar faMap = {\n prefix: 'far',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M560.02 32c-1.96 0-3.98.37-5.96 1.16L384.01 96H384L212 35.28A64.252 64.252 0 0 0 191.76 32c-6.69 0-13.37 1.05-19.81 3.14L20.12 87.95A32.006 32.006 0 0 0 0 117.66v346.32C0 473.17 7.53 480 15.99 480c1.96 0 3.97-.37 5.96-1.16L192 416l172 60.71a63.98 63.98 0 0 0 40.05.15l151.83-52.81A31.996 31.996 0 0 0 576 394.34V48.02c0-9.19-7.53-16.02-15.98-16.02zM224 90.42l128 45.19v285.97l-128-45.19V90.42zM48 418.05V129.07l128-44.53v286.2l-.64.23L48 418.05zm480-35.13l-128 44.53V141.26l.64-.24L528 93.95v288.97z\"]\n};\nvar faMeh = {\n prefix: 'far',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm8 144H160c-13.2 0-24 10.8-24 24s10.8 24 24 24h176c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMehBlank = {\n prefix: 'far',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-280c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm160 0c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'far',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm88-304c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm0 112c-22.1 0-40-17.9-40-40 0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40zm-104-40c0-39.8-32.2-72-72-72s-72 32.2-72 72 32.2 72 72 72 72-32.2 72-72zm-112 0c0-13.6 7.3-25.1 17.7-32.3-1 2.6-1.7 5.3-1.7 8.3 0 13.3 10.7 24 24 24s24-10.7 24-24c0-2.9-.7-5.7-1.7-8.3 10.4 7.2 17.7 18.7 17.7 32.3 0 22.1-17.9 40-40 40s-40-17.9-40-40zm192 128H184c-13.2 0-24 10.8-24 24s10.8 24 24 24h128c13.2 0 24-10.8 24-24s-10.8-24-24-24z\"]\n};\nvar faMinusSquare = {\n prefix: 'far',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'far',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M320 144c-53.02 0-96 50.14-96 112 0 61.85 42.98 112 96 112 53 0 96-50.13 96-112 0-61.86-42.98-112-96-112zm40 168c0 4.42-3.58 8-8 8h-64c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h16v-55.44l-.47.31a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09l15.33-10.22a23.99 23.99 0 0 1 13.31-4.03H328c4.42 0 8 3.58 8 8v88h16c4.42 0 8 3.58 8 8v16zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zm-16 272c-35.35 0-64 28.65-64 64H112c0-35.35-28.65-64-64-64V176c35.35 0 64-28.65 64-64h416c0 35.35 28.65 64 64 64v160z\"]\n};\nvar faMoon = {\n prefix: 'far',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M279.135 512c78.756 0 150.982-35.804 198.844-94.775 28.27-34.831-2.558-85.722-46.249-77.401-82.348 15.683-158.272-47.268-158.272-130.792 0-48.424 26.06-92.292 67.434-115.836 38.745-22.05 28.999-80.788-15.022-88.919A257.936 257.936 0 0 0 279.135 0c-141.36 0-256 114.575-256 256 0 141.36 114.576 256 256 256zm0-464c12.985 0 25.689 1.201 38.016 3.478-54.76 31.163-91.693 90.042-91.693 157.554 0 113.848 103.641 199.2 215.252 177.944C402.574 433.964 344.366 464 279.135 464c-114.875 0-208-93.125-208-208s93.125-208 208-208z\"]\n};\nvar faNewspaper = {\n prefix: 'far',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H112c-20.858 0-38.643 13.377-45.248 32H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h496c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24zM48 392V144h16v248c0 4.411-3.589 8-8 8s-8-3.589-8-8zm480 8H111.422c.374-2.614.578-5.283.578-8V112h416v288zM172 280h136c6.627 0 12-5.373 12-12v-96c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v96c0 6.627 5.373 12 12 12zm28-80h80v40h-80v-40zm-40 140v-24c0-6.627 5.373-12 12-12h136c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H172c-6.627 0-12-5.373-12-12zm192 0v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0-144v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12zm0 72v-24c0-6.627 5.373-12 12-12h104c6.627 0 12 5.373 12 12v24c0 6.627-5.373 12-12 12H364c-6.627 0-12-5.373-12-12z\"]\n};\nvar faObjectGroup = {\n prefix: 'far',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M500 128c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v256H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V128h12zm-52-64h32v32h-32V64zM32 64h32v32H32V64zm32 384H32v-32h32v32zm416 0h-32v-32h32v32zm-40-64h-12c-6.627 0-12 5.373-12 12v12H96v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h320v12c0 6.627 5.373 12 12 12h12v256zm-36-192h-84v-52c0-6.628-5.373-12-12-12H108c-6.627 0-12 5.372-12 12v168c0 6.628 5.373 12 12 12h84v52c0 6.628 5.373 12 12 12h200c6.627 0 12-5.372 12-12V204c0-6.628-5.373-12-12-12zm-268-24h144v112H136V168zm240 176H232v-24h76c6.627 0 12-5.372 12-12v-76h56v112z\"]\n};\nvar faObjectUngroup = {\n prefix: 'far',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M564 224c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12h-88v-24h12c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-72c-6.627 0-12 5.373-12 12v12H96V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v72c0 6.627 5.373 12 12 12h12v160H12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h88v24h-12c-6.627 0-12 5.373-12 12v72c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12V224h12zM352 64h32v32h-32V64zm0 256h32v32h-32v-32zM64 352H32v-32h32v32zm0-256H32V64h32v32zm32 216v-12c0-6.627-5.373-12-12-12H72V128h12c6.627 0 12-5.373 12-12v-12h224v12c0 6.627 5.373 12 12 12h12v160h-12c-6.627 0-12 5.373-12 12v12H96zm128 136h-32v-32h32v32zm280-64h-12c-6.627 0-12 5.373-12 12v12H256v-12c0-6.627-5.373-12-12-12h-12v-24h88v12c0 6.627 5.373 12 12 12h72c6.627 0 12-5.373 12-12v-72c0-6.627-5.373-12-12-12h-12v-88h88v12c0 6.627 5.373 12 12 12h12v160zm40 64h-32v-32h32v32zm0-256h-32v-32h32v32z\"]\n};\nvar faPaperPlane = {\n prefix: 'far',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M440 6.5L24 246.4c-34.4 19.9-31.1 70.8 5.7 85.9L144 379.6V464c0 46.4 59.2 65.5 86.6 28.6l43.8-59.1 111.9 46.2c5.9 2.4 12.1 3.6 18.3 3.6 8.2 0 16.3-2.1 23.6-6.2 12.8-7.2 21.6-20 23.9-34.5l59.4-387.2c6.1-40.1-36.9-68.8-71.5-48.9zM192 464v-64.6l36.6 15.1L192 464zm212.6-28.7l-153.8-63.5L391 169.5c10.7-15.5-9.5-33.5-23.7-21.2L155.8 332.6 48 288 464 48l-59.4 387.3z\"]\n};\nvar faPauseCircle = {\n prefix: 'far',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z\"]\n};\nvar faPlayCircle = {\n prefix: 'far',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"]\n};\nvar faPlusSquare = {\n prefix: 'far',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M352 240v32c0 6.6-5.4 12-12 12h-88v88c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-88h-88c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h88v-88c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v88h88c6.6 0 12 5.4 12 12zm96-160v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z\"]\n};\nvar faQuestionCircle = {\n prefix: 'far',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z\"]\n};\nvar faRegistered = {\n prefix: 'far',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 448c-110.532 0-200-89.451-200-200 0-110.531 89.451-200 200-200 110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200zm110.442-81.791c-53.046-96.284-50.25-91.468-53.271-96.085 24.267-13.879 39.482-41.563 39.482-73.176 0-52.503-30.247-85.252-101.498-85.252h-78.667c-6.617 0-12 5.383-12 12V380c0 6.617 5.383 12 12 12h38.568c6.617 0 12-5.383 12-12v-83.663h31.958l47.515 89.303a11.98 11.98 0 0 0 10.593 6.36h42.81c9.14 0 14.914-9.799 10.51-17.791zM256.933 239.906h-33.875v-64.14h27.377c32.417 0 38.929 12.133 38.929 31.709-.001 20.913-11.518 32.431-32.431 32.431z\"]\n};\nvar faSadCry = {\n prefix: 'far',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm144 386.4V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v151.4C315.5 447 282.8 456 248 456s-67.5-9-96-24.6V280c0-13.2-10.8-24-24-24s-24 10.8-24 24v114.4c-34.6-36-56-84.7-56-138.4 0-110.3 89.7-200 200-200s200 89.7 200 200c0 53.7-21.4 102.5-56 138.4zM205.8 234.5c4.4-2.4 6.9-7.4 6.1-12.4-4-25.2-34.2-42.1-59.8-42.1s-55.9 16.9-59.8 42.1c-.8 5 1.7 10 6.1 12.4 4.4 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.3 7.9 4.8 13.7 1.6zM344 180c-25.7 0-55.9 16.9-59.8 42.1-.8 5 1.7 10 6.1 12.4 4.5 2.4 9.9 1.8 13.7-1.6l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c2.5 2.2 8 4.7 13.7 1.6 4.4-2.4 6.9-7.4 6.1-12.4-3.9-25.2-34.1-42.1-59.8-42.1zm-96 92c-30.9 0-56 28.7-56 64s25.1 64 56 64 56-28.7 56-64-25.1-64-56-64z\"]\n};\nvar faSadTear = {\n prefix: 'far',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm8-152c-13.2 0-24 10.8-24 24s10.8 24 24 24c23.8 0 46.3 10.5 61.6 28.8 8.1 9.8 23.2 11.9 33.8 3.1 10.2-8.5 11.6-23.6 3.1-33.8C330 320.8 294.1 304 256 304zm-88-64c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-64c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm-165.6 98.8C151 290.1 126 325.4 126 342.9c0 22.7 18.8 41.1 42 41.1s42-18.4 42-41.1c0-17.5-25-52.8-36.4-68.1-2.8-3.7-8.4-3.7-11.2 0z\"]\n};\nvar faSave = {\n prefix: 'far',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM272 80v80H144V80h128zm122 352H54a6 6 0 0 1-6-6V86a6 6 0 0 1 6-6h42v104c0 13.255 10.745 24 24 24h176c13.255 0 24-10.745 24-24V83.882l78.243 78.243a6 6 0 0 1 1.757 4.243V426a6 6 0 0 1-6 6zM224 232c-48.523 0-88 39.477-88 88s39.477 88 88 88 88-39.477 88-88-39.477-88-88-88zm0 128c-22.056 0-40-17.944-40-40s17.944-40 40-40 40 17.944 40 40-17.944 40-40 40z\"]\n};\nvar faShareSquare = {\n prefix: 'far',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M561.938 158.06L417.94 14.092C387.926-15.922 336 5.097 336 48.032v57.198c-42.45 1.88-84.03 6.55-120.76 17.99-35.17 10.95-63.07 27.58-82.91 49.42C108.22 199.2 96 232.6 96 271.94c0 61.697 33.178 112.455 84.87 144.76 37.546 23.508 85.248-12.651 71.02-55.74-15.515-47.119-17.156-70.923 84.11-78.76V336c0 42.993 51.968 63.913 81.94 33.94l143.998-144c18.75-18.74 18.75-49.14 0-67.88zM384 336V232.16C255.309 234.082 166.492 255.35 206.31 376 176.79 357.55 144 324.08 144 271.94c0-109.334 129.14-118.947 240-119.85V48l144 144-144 144zm24.74 84.493a82.658 82.658 0 0 0 20.974-9.303c7.976-4.952 18.286.826 18.286 10.214V464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h132c6.627 0 12 5.373 12 12v4.486c0 4.917-2.987 9.369-7.569 11.152-13.702 5.331-26.396 11.537-38.05 18.585a12.138 12.138 0 0 1-6.28 1.777H54a6 6 0 0 0-6 6v340a6 6 0 0 0 6 6h340a6 6 0 0 0 6-6v-25.966c0-5.37 3.579-10.059 8.74-11.541z\"]\n};\nvar faSmile = {\n prefix: 'far',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm-80-216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm4 72.6c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.1-8.4-25.3-7.1-33.8 3.1z\"]\n};\nvar faSmileBeam = {\n prefix: 'far',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm84-143.4c-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.6-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8-10.2-8.4-25.3-7.1-33.8 3.1zM136.5 211c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4s-52.7 29.3-56 71.4c-.3 3.7 2.1 7.2 5.7 8.3 3.4 1.1 7.4-.5 9.3-3.7l9.5-17zM328 152c-23.8 0-52.7 29.3-56 71.4-.3 3.7 2.1 7.2 5.7 8.3 3.5 1.1 7.4-.5 9.3-3.7l9.5-17c7.7-13.7 19.2-21.6 31.5-21.6s23.8 7.9 31.5 21.6l9.5 17c2.1 3.7 6.2 4.7 9.3 3.7 3.6-1.1 6-4.5 5.7-8.3-3.3-42.1-32.2-71.4-56-71.4z\"]\n};\nvar faSmileWink = {\n prefix: 'far',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm117.8-146.4c-10.2-8.5-25.3-7.1-33.8 3.1-20.8 25-51.5 39.4-84 39.4s-63.2-14.3-84-39.4c-8.5-10.2-23.7-11.5-33.8-3.1-10.2 8.5-11.5 23.6-3.1 33.8 30 36 74.1 56.6 120.9 56.6s90.9-20.6 120.9-56.6c8.5-10.2 7.1-25.3-3.1-33.8zM168 240c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm160-60c-25.7 0-55.9 16.9-59.9 42.1-1.7 11.2 11.5 18.2 19.8 10.8l9.5-8.5c14.8-13.2 46.2-13.2 61 0l9.5 8.5c8.5 7.4 21.6.3 19.8-10.8-3.8-25.2-34-42.1-59.7-42.1z\"]\n};\nvar faSnowflake = {\n prefix: 'far',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.1 355.2l-39.2-23 34.1-9.3c8.4-2.3 13.4-11.1 11.1-19.6l-4.1-15.5c-2.2-8.5-10.9-13.6-19.3-11.3L343 298.2 271.2 256l71.9-42.2 79.7 21.7c8.4 2.3 17-2.8 19.3-11.3l4.1-15.5c2.2-8.5-2.7-17.3-11.1-19.6l-34.1-9.3 39.2-23c7.5-4.4 10.1-14.2 5.8-21.9l-7.9-13.9c-4.3-7.7-14-10.3-21.5-5.9l-39.2 23 9.1-34.7c2.2-8.5-2.7-17.3-11.1-19.6l-15.2-4.1c-8.4-2.3-17 2.8-19.3 11.3l-21.3 81-71.9 42.2v-84.5L306 70.4c6.1-6.2 6.1-16.4 0-22.6l-11.1-11.3c-6.1-6.2-16.1-6.2-22.2 0l-24.9 25.4V16c0-8.8-7-16-15.7-16h-15.7c-8.7 0-15.7 7.2-15.7 16v46.1l-24.9-25.4c-6.1-6.2-16.1-6.2-22.2 0L142.1 48c-6.1 6.2-6.1 16.4 0 22.6l58.3 59.3v84.5l-71.9-42.2-21.3-81c-2.2-8.5-10.9-13.6-19.3-11.3L72.7 84c-8.4 2.3-13.4 11.1-11.1 19.6l9.1 34.7-39.2-23c-7.5-4.4-17.1-1.8-21.5 5.9l-7.9 13.9c-4.3 7.7-1.8 17.4 5.8 21.9l39.2 23-34.1 9.1c-8.4 2.3-13.4 11.1-11.1 19.6L6 224.2c2.2 8.5 10.9 13.6 19.3 11.3l79.7-21.7 71.9 42.2-71.9 42.2-79.7-21.7c-8.4-2.3-17 2.8-19.3 11.3l-4.1 15.5c-2.2 8.5 2.7 17.3 11.1 19.6l34.1 9.3-39.2 23c-7.5 4.4-10.1 14.2-5.8 21.9L10 391c4.3 7.7 14 10.3 21.5 5.9l39.2-23-9.1 34.7c-2.2 8.5 2.7 17.3 11.1 19.6l15.2 4.1c8.4 2.3 17-2.8 19.3-11.3l21.3-81 71.9-42.2v84.5l-58.3 59.3c-6.1 6.2-6.1 16.4 0 22.6l11.1 11.3c6.1 6.2 16.1 6.2 22.2 0l24.9-25.4V496c0 8.8 7 16 15.7 16h15.7c8.7 0 15.7-7.2 15.7-16v-46.1l24.9 25.4c6.1 6.2 16.1 6.2 22.2 0l11.1-11.3c6.1-6.2 6.1-16.4 0-22.6l-58.3-59.3v-84.5l71.9 42.2 21.3 81c2.2 8.5 10.9 13.6 19.3 11.3L375 428c8.4-2.3 13.4-11.1 11.1-19.6l-9.1-34.7 39.2 23c7.5 4.4 17.1 1.8 21.5-5.9l7.9-13.9c4.6-7.5 2.1-17.3-5.5-21.7z\"]\n};\nvar faSquare = {\n prefix: 'far',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-6 400H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h340c3.3 0 6 2.7 6 6v340c0 3.3-2.7 6-6 6z\"]\n};\nvar faStar = {\n prefix: 'far',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z\"]\n};\nvar faStarHalf = {\n prefix: 'far',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 385.3l-124.3 65.4 23.7-138.4-100.6-98 139-20.2 62.2-126V0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6v-54.3z\"]\n};\nvar faStickyNote = {\n prefix: 'far',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M448 348.106V80c0-26.51-21.49-48-48-48H48C21.49 32 0 53.49 0 80v351.988c0 26.51 21.49 48 48 48h268.118a48 48 0 0 0 33.941-14.059l83.882-83.882A48 48 0 0 0 448 348.106zm-128 80v-76.118h76.118L320 428.106zM400 80v223.988H296c-13.255 0-24 10.745-24 24v104H48V80h352z\"]\n};\nvar faStopCircle = {\n prefix: 'far',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm296-80v160c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16z\"]\n};\nvar faSun = {\n prefix: 'far',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M494.2 221.9l-59.8-40.5 13.7-71c2.6-13.2-1.6-26.8-11.1-36.4-9.6-9.5-23.2-13.7-36.2-11.1l-70.9 13.7-40.4-59.9c-15.1-22.3-51.9-22.3-67 0l-40.4 59.9-70.8-13.7C98 60.4 84.5 64.5 75 74.1c-9.5 9.6-13.7 23.1-11.1 36.3l13.7 71-59.8 40.5C6.6 229.5 0 242 0 255.5s6.7 26 17.8 33.5l59.8 40.5-13.7 71c-2.6 13.2 1.6 26.8 11.1 36.3 9.5 9.5 22.9 13.7 36.3 11.1l70.8-13.7 40.4 59.9C230 505.3 242.6 512 256 512s26-6.7 33.5-17.8l40.4-59.9 70.9 13.7c13.4 2.7 26.8-1.6 36.3-11.1 9.5-9.5 13.6-23.1 11.1-36.3l-13.7-71 59.8-40.5c11.1-7.5 17.8-20.1 17.8-33.5-.1-13.6-6.7-26.1-17.9-33.7zm-112.9 85.6l17.6 91.2-91-17.6L256 458l-51.9-77-90.9 17.6 17.6-91.2-76.8-52 76.8-52-17.6-91.2 91 17.6L256 53l51.9 76.9 91-17.6-17.6 91.1 76.8 52-76.8 52.1zM256 152c-57.3 0-104 46.7-104 104s46.7 104 104 104 104-46.7 104-104-46.7-104-104-104zm0 160c-30.9 0-56-25.1-56-56s25.1-56 56-56 56 25.1 56 56-25.1 56-56 56z\"]\n};\nvar faSurprise = {\n prefix: 'far',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm0-176c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm-48-72c0-17.7-14.3-32-32-32s-32 14.3-32 32 14.3 32 32 32 32-14.3 32-32zm128-32c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faThumbsDown = {\n prefix: 'far',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M466.27 225.31c4.674-22.647.864-44.538-8.99-62.99 2.958-23.868-4.021-48.565-17.34-66.99C438.986 39.423 404.117 0 327 0c-7 0-15 .01-22.22.01C201.195.01 168.997 40 128 40h-10.845c-5.64-4.975-13.042-8-21.155-8H32C14.327 32 0 46.327 0 64v240c0 17.673 14.327 32 32 32h64c11.842 0 22.175-6.438 27.708-16h7.052c19.146 16.953 46.013 60.653 68.76 83.4 13.667 13.667 10.153 108.6 71.76 108.6 57.58 0 95.27-31.936 95.27-104.73 0-18.41-3.93-33.73-8.85-46.54h36.48c48.602 0 85.82-41.565 85.82-85.58 0-19.15-4.96-34.99-13.73-49.84zM64 296c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm330.18 16.73H290.19c0 37.82 28.36 55.37 28.36 94.54 0 23.75 0 56.73-47.27 56.73-18.91-18.91-9.46-66.18-37.82-94.54C206.9 342.89 167.28 272 138.92 272H128V85.83c53.611 0 100.001-37.82 171.64-37.82h37.82c35.512 0 60.82 17.12 53.12 65.9 15.2 8.16 26.5 36.44 13.94 57.57 21.581 20.384 18.699 51.065 5.21 65.62 9.45 0 22.36 18.91 22.27 37.81-.09 18.91-16.71 37.82-37.82 37.82z\"]\n};\nvar faThumbsUp = {\n prefix: 'far',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M466.27 286.69C475.04 271.84 480 256 480 236.85c0-44.015-37.218-85.58-85.82-85.58H357.7c4.92-12.81 8.85-28.13 8.85-46.54C366.55 31.936 328.86 0 271.28 0c-61.607 0-58.093 94.933-71.76 108.6-22.747 22.747-49.615 66.447-68.76 83.4H32c-17.673 0-32 14.327-32 32v240c0 17.673 14.327 32 32 32h64c14.893 0 27.408-10.174 30.978-23.95 44.509 1.001 75.06 39.94 177.802 39.94 7.22 0 15.22.01 22.22.01 77.117 0 111.986-39.423 112.94-95.33 13.319-18.425 20.299-43.122 17.34-66.99 9.854-18.452 13.664-40.343 8.99-62.99zm-61.75 53.83c12.56 21.13 1.26 49.41-13.94 57.57 7.7 48.78-17.608 65.9-53.12 65.9h-37.82c-71.639 0-118.029-37.82-171.64-37.82V240h10.92c28.36 0 67.98-70.89 94.54-97.46 28.36-28.36 18.91-75.63 37.82-94.54 47.27 0 47.27 32.98 47.27 56.73 0 39.17-28.36 56.72-28.36 94.54h103.99c21.11 0 37.73 18.91 37.82 37.82.09 18.9-12.82 37.81-22.27 37.81 13.489 14.555 16.371 45.236-5.21 65.62zM88 432c0 13.255-10.745 24-24 24s-24-10.745-24-24 10.745-24 24-24 24 10.745 24 24z\"]\n};\nvar faTimesCircle = {\n prefix: 'far',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z\"]\n};\nvar faTired = {\n prefix: 'far',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-110.3 0-200-89.7-200-200S137.7 56 248 56s200 89.7 200 200-89.7 200-200 200zm129.1-303.8c-3.8-4.4-10.3-5.4-15.3-2.5l-80 48c-3.6 2.2-5.8 6.1-5.8 10.3s2.2 8.1 5.8 10.3l80 48c5.4 3.2 11.8 1.6 15.3-2.5 3.8-4.5 3.9-11 .1-15.5L343.6 208l33.6-40.3c3.8-4.5 3.7-11.1-.1-15.5zM220 208c0-4.2-2.2-8.1-5.8-10.3l-80-48c-5-3-11.5-1.9-15.3 2.5-3.8 4.5-3.9 11-.1 15.5l33.6 40.3-33.6 40.3c-3.8 4.5-3.7 11 .1 15.5 3.5 4.1 9.9 5.7 15.3 2.5l80-48c3.6-2.2 5.8-6.1 5.8-10.3zm28 64c-45.4 0-100.9 38.3-107.8 93.3-1.5 11.8 6.9 21.6 15.5 17.9C178.4 373.5 212 368 248 368s69.6 5.5 92.3 15.2c8.5 3.7 17-6 15.5-17.9-6.9-55-62.4-93.3-107.8-93.3z\"]\n};\nvar faTrashAlt = {\n prefix: 'far',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M268 416h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12zM432 80h-82.41l-34-56.7A48 48 0 0 0 274.41 0H173.59a48 48 0 0 0-41.16 23.3L98.41 80H16A16 16 0 0 0 0 96v16a16 16 0 0 0 16 16h16v336a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128h16a16 16 0 0 0 16-16V96a16 16 0 0 0-16-16zM171.84 50.91A6 6 0 0 1 177 48h94a6 6 0 0 1 5.15 2.91L293.61 80H154.39zM368 464H80V128h288zm-212-48h24a12 12 0 0 0 12-12V188a12 12 0 0 0-12-12h-24a12 12 0 0 0-12 12v216a12 12 0 0 0 12 12z\"]\n};\nvar faUser = {\n prefix: 'far',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M313.6 304c-28.7 0-42.5 16-89.6 16-47.1 0-60.8-16-89.6-16C60.2 304 0 364.2 0 438.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-25.6c0-74.2-60.2-134.4-134.4-134.4zM400 464H48v-25.6c0-47.6 38.8-86.4 86.4-86.4 14.6 0 38.3 16 89.6 16 51.7 0 74.9-16 89.6-16 47.6 0 86.4 38.8 86.4 86.4V464zM224 288c79.5 0 144-64.5 144-144S303.5 0 224 0 80 64.5 80 144s64.5 144 144 144zm0-240c52.9 0 96 43.1 96 96s-43.1 96-96 96-96-43.1-96-96 43.1-96 96-96z\"]\n};\nvar faUserCircle = {\n prefix: 'far',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 104c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96zm0 144c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm0-240C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 448c-49.7 0-95.1-18.3-130.1-48.4 14.9-23 40.4-38.6 69.6-39.5 20.8 6.4 40.6 9.6 60.5 9.6s39.7-3.1 60.5-9.6c29.2 1 54.7 16.5 69.6 39.5-35 30.1-80.4 48.4-130.1 48.4zm162.7-84.1c-24.4-31.4-62.1-51.9-105.1-51.9-10.2 0-26 9.6-57.6 9.6-31.5 0-47.4-9.6-57.6-9.6-42.9 0-80.6 20.5-105.1 51.9C61.9 339.2 48 299.2 48 256c0-110.3 89.7-200 200-200s200 89.7 200 200c0 43.2-13.9 83.2-37.3 115.9z\"]\n};\nvar faWindowClose = {\n prefix: 'far',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V86c0-3.3 2.7-6 6-6h404c3.3 0 6 2.7 6 6v340zM356.5 194.6L295.1 256l61.4 61.4c4.6 4.6 4.6 12.1 0 16.8l-22.3 22.3c-4.6 4.6-12.1 4.6-16.8 0L256 295.1l-61.4 61.4c-4.6 4.6-12.1 4.6-16.8 0l-22.3-22.3c-4.6-4.6-4.6-12.1 0-16.8l61.4-61.4-61.4-61.4c-4.6-4.6-4.6-12.1 0-16.8l22.3-22.3c4.6-4.6 12.1-4.6 16.8 0l61.4 61.4 61.4-61.4c4.6-4.6 12.1-4.6 16.8 0l22.3 22.3c4.7 4.6 4.7 12.1 0 16.8z\"]\n};\nvar faWindowMaximize = {\n prefix: 'far',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm0 394c0 3.3-2.7 6-6 6H54c-3.3 0-6-2.7-6-6V192h416v234z\"]\n};\nvar faWindowMinimize = {\n prefix: 'far',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M480 480H32c-17.7 0-32-14.3-32-32s14.3-32 32-32h448c17.7 0 32 14.3 32 32s-14.3 32-32 32z\"]\n};\nvar faWindowRestore = {\n prefix: 'far',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-96 464H48V256h320v208zm96-96h-48V144c0-26.5-21.5-48-48-48H144V48h320v320z\"]\n};\nvar _iconsCache = {\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAngry: faAngry,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBookmark: faBookmark,\n faBuilding: faBuilding,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faChartBar: faChartBar,\n faCheckCircle: faCheckCircle,\n faCheckSquare: faCheckSquare,\n faCircle: faCircle,\n faClipboard: faClipboard,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDots: faCommentDots,\n faComments: faComments,\n faCompass: faCompass,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCreditCard: faCreditCard,\n faDizzy: faDizzy,\n faDotCircle: faDotCircle,\n faEdit: faEdit,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEye: faEye,\n faEyeSlash: faEyeSlash,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileExcel: faFileExcel,\n faFileImage: faFileImage,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFlag: faFlag,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderOpen: faFolderOpen,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFutbol: faFutbol,\n faGem: faGem,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faHandLizard: faHandLizard,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSpock: faHandSpock,\n faHandshake: faHandshake,\n faHdd: faHdd,\n faHeart: faHeart,\n faHospital: faHospital,\n faHourglass: faHourglass,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faImage: faImage,\n faImages: faImages,\n faKeyboard: faKeyboard,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLemon: faLemon,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faListAlt: faListAlt,\n faMap: faMap,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMinusSquare: faMinusSquare,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoon: faMoon,\n faNewspaper: faNewspaper,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faPaperPlane: faPaperPlane,\n faPauseCircle: faPauseCircle,\n faPlayCircle: faPlayCircle,\n faPlusSquare: faPlusSquare,\n faQuestionCircle: faQuestionCircle,\n faRegistered: faRegistered,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSave: faSave,\n faShareSquare: faShareSquare,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSnowflake: faSnowflake,\n faSquare: faSquare,\n faStar: faStar,\n faStarHalf: faStarHalf,\n faStickyNote: faStickyNote,\n faStopCircle: faStopCircle,\n faSun: faSun,\n faSurprise: faSurprise,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faTimesCircle: faTimesCircle,\n faTired: faTired,\n faTrashAlt: faTrashAlt,\n faUser: faUser,\n faUserCircle: faUserCircle,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore\n};\n\nexport { _iconsCache as far, prefix, faAddressBook, faAddressCard, faAngry, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faBell, faBellSlash, faBookmark, faBuilding, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faChartBar, faCheckCircle, faCheckSquare, faCircle, faClipboard, faClock, faClone, faClosedCaptioning, faComment, faCommentAlt, faCommentDots, faComments, faCompass, faCopy, faCopyright, faCreditCard, faDizzy, faDotCircle, faEdit, faEnvelope, faEnvelopeOpen, faEye, faEyeSlash, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileExcel, faFileImage, faFilePdf, faFilePowerpoint, faFileVideo, faFileWord, faFlag, faFlushed, faFolder, faFolderOpen, faFontAwesomeLogoFull, faFrown, faFrownOpen, faFutbol, faGem, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faHandLizard, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHandshake, faHdd, faHeart, faHospital, faHourglass, faIdBadge, faIdCard, faImage, faImages, faKeyboard, faKiss, faKissBeam, faKissWinkHeart, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLemon, faLifeRing, faLightbulb, faListAlt, faMap, faMeh, faMehBlank, faMehRollingEyes, faMinusSquare, faMoneyBillAlt, faMoon, faNewspaper, faObjectGroup, faObjectUngroup, faPaperPlane, faPauseCircle, faPlayCircle, faPlusSquare, faQuestionCircle, faRegistered, faSadCry, faSadTear, faSave, faShareSquare, faSmile, faSmileBeam, faSmileWink, faSnowflake, faSquare, faStar, faStarHalf, faStickyNote, faStopCircle, faSun, faSurprise, faThumbsDown, faThumbsUp, faTimesCircle, faTired, faTrashAlt, faUser, faUserCircle, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore };\n", + "var prefix = \"fas\";\nvar faAd = {\n prefix: 'fas',\n iconName: 'ad',\n icon: [512, 512, [], \"f641\", \"M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z\"]\n};\nvar faAddressBook = {\n prefix: 'fas',\n iconName: 'address-book',\n icon: [448, 512, [], \"f2b9\", \"M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faAddressCard = {\n prefix: 'fas',\n iconName: 'address-card',\n icon: [576, 512, [], \"f2bb\", \"M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faAdjust = {\n prefix: 'fas',\n iconName: 'adjust',\n icon: [512, 512, [], \"f042\", \"M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z\"]\n};\nvar faAirFreshener = {\n prefix: 'fas',\n iconName: 'air-freshener',\n icon: [384, 512, [], \"f5d0\", \"M378.94 321.41L284.7 224h49.22c15.3 0 23.66-16.6 13.86-27.53L234.45 69.96c3.43-6.61 5.55-14 5.55-21.96 0-26.51-21.49-48-48-48s-48 21.49-48 48c0 7.96 2.12 15.35 5.55 21.96L36.22 196.47C26.42 207.4 34.78 224 50.08 224H99.3L5.06 321.41C-6.69 333.56 3.34 352 21.7 352H160v32H48c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h288c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16H224v-32h138.3c18.36 0 28.39-18.44 16.64-30.59zM192 31.98c8.85 0 16.02 7.17 16.02 16.02 0 8.84-7.17 16.02-16.02 16.02S175.98 56.84 175.98 48c0-8.85 7.17-16.02 16.02-16.02zM304 432v32H80v-32h224z\"]\n};\nvar faAlignCenter = {\n prefix: 'fas',\n iconName: 'align-center',\n icon: [448, 512, [], \"f037\", \"M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z\"]\n};\nvar faAlignJustify = {\n prefix: 'fas',\n iconName: 'align-justify',\n icon: [448, 512, [], \"f039\", \"M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faAlignLeft = {\n prefix: 'fas',\n iconName: 'align-left',\n icon: [448, 512, [], \"f036\", \"M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faAlignRight = {\n prefix: 'fas',\n iconName: 'align-right',\n icon: [448, 512, [], \"f038\", \"M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z\"]\n};\nvar faAllergies = {\n prefix: 'fas',\n iconName: 'allergies',\n icon: [448, 512, [], \"f461\", \"M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faAmbulance = {\n prefix: 'fas',\n iconName: 'ambulance',\n icon: [640, 512, [], \"f0f9\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faAmericanSignLanguageInterpreting = {\n prefix: 'fas',\n iconName: 'american-sign-language-interpreting',\n icon: [640, 512, [], \"f2a3\", \"M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z\"]\n};\nvar faAnchor = {\n prefix: 'fas',\n iconName: 'anchor',\n icon: [576, 512, [], \"f13d\", \"M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z\"]\n};\nvar faAngleDoubleDown = {\n prefix: 'fas',\n iconName: 'angle-double-down',\n icon: [320, 512, [], \"f103\", \"M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z\"]\n};\nvar faAngleDoubleLeft = {\n prefix: 'fas',\n iconName: 'angle-double-left',\n icon: [448, 512, [], \"f100\", \"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z\"]\n};\nvar faAngleDoubleRight = {\n prefix: 'fas',\n iconName: 'angle-double-right',\n icon: [448, 512, [], \"f101\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"]\n};\nvar faAngleDoubleUp = {\n prefix: 'fas',\n iconName: 'angle-double-up',\n icon: [320, 512, [], \"f102\", \"M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z\"]\n};\nvar faAngleDown = {\n prefix: 'fas',\n iconName: 'angle-down',\n icon: [320, 512, [], \"f107\", \"M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z\"]\n};\nvar faAngleLeft = {\n prefix: 'fas',\n iconName: 'angle-left',\n icon: [256, 512, [], \"f104\", \"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z\"]\n};\nvar faAngleRight = {\n prefix: 'fas',\n iconName: 'angle-right',\n icon: [256, 512, [], \"f105\", \"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"]\n};\nvar faAngleUp = {\n prefix: 'fas',\n iconName: 'angle-up',\n icon: [320, 512, [], \"f106\", \"M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z\"]\n};\nvar faAngry = {\n prefix: 'fas',\n iconName: 'angry',\n icon: [496, 512, [], \"f556\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z\"]\n};\nvar faAnkh = {\n prefix: 'fas',\n iconName: 'ankh',\n icon: [320, 512, [], \"f644\", \"M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z\"]\n};\nvar faAppleAlt = {\n prefix: 'fas',\n iconName: 'apple-alt',\n icon: [448, 512, [], \"f5d1\", \"M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z\"]\n};\nvar faArchive = {\n prefix: 'fas',\n iconName: 'archive',\n icon: [512, 512, [], \"f187\", \"M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z\"]\n};\nvar faArchway = {\n prefix: 'fas',\n iconName: 'archway',\n icon: [576, 512, [], \"f557\", \"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faArrowAltCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-down',\n icon: [512, 512, [], \"f358\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z\"]\n};\nvar faArrowAltCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-left',\n icon: [512, 512, [], \"f359\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z\"]\n};\nvar faArrowAltCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-right',\n icon: [512, 512, [], \"f35a\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z\"]\n};\nvar faArrowAltCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-alt-circle-up',\n icon: [512, 512, [], \"f35b\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z\"]\n};\nvar faArrowCircleDown = {\n prefix: 'fas',\n iconName: 'arrow-circle-down',\n icon: [512, 512, [], \"f0ab\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z\"]\n};\nvar faArrowCircleLeft = {\n prefix: 'fas',\n iconName: 'arrow-circle-left',\n icon: [512, 512, [], \"f0a8\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z\"]\n};\nvar faArrowCircleRight = {\n prefix: 'fas',\n iconName: 'arrow-circle-right',\n icon: [512, 512, [], \"f0a9\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z\"]\n};\nvar faArrowCircleUp = {\n prefix: 'fas',\n iconName: 'arrow-circle-up',\n icon: [512, 512, [], \"f0aa\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z\"]\n};\nvar faArrowDown = {\n prefix: 'fas',\n iconName: 'arrow-down',\n icon: [448, 512, [], \"f063\", \"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z\"]\n};\nvar faArrowLeft = {\n prefix: 'fas',\n iconName: 'arrow-left',\n icon: [448, 512, [], \"f060\", \"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z\"]\n};\nvar faArrowRight = {\n prefix: 'fas',\n iconName: 'arrow-right',\n icon: [448, 512, [], \"f061\", \"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z\"]\n};\nvar faArrowUp = {\n prefix: 'fas',\n iconName: 'arrow-up',\n icon: [448, 512, [], \"f062\", \"M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z\"]\n};\nvar faArrowsAlt = {\n prefix: 'fas',\n iconName: 'arrows-alt',\n icon: [512, 512, [], \"f0b2\", \"M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z\"]\n};\nvar faArrowsAltH = {\n prefix: 'fas',\n iconName: 'arrows-alt-h',\n icon: [512, 512, [], \"f337\", \"M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z\"]\n};\nvar faArrowsAltV = {\n prefix: 'fas',\n iconName: 'arrows-alt-v',\n icon: [256, 512, [], \"f338\", \"M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z\"]\n};\nvar faAssistiveListeningSystems = {\n prefix: 'fas',\n iconName: 'assistive-listening-systems',\n icon: [512, 512, [], \"f2a2\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z\"]\n};\nvar faAsterisk = {\n prefix: 'fas',\n iconName: 'asterisk',\n icon: [512, 512, [], \"f069\", \"M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z\"]\n};\nvar faAt = {\n prefix: 'fas',\n iconName: 'at',\n icon: [512, 512, [], \"f1fa\", \"M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z\"]\n};\nvar faAtlas = {\n prefix: 'fas',\n iconName: 'atlas',\n icon: [448, 512, [], \"f558\", \"M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z\"]\n};\nvar faAtom = {\n prefix: 'fas',\n iconName: 'atom',\n icon: [448, 512, [], \"f5d2\", \"M413.03 256c40.13-54.89 41.51-98.62 25.14-128-10.91-19.52-40.54-50.73-116.33-41.88C300.36 34.89 267.64 0 224 0s-76.36 34.89-97.84 86.12C50.43 77.34 20.73 108.48 9.83 128c-16.38 29.4-15 73.09 25.14 128-40.13 54.89-41.51 98.62-25.14 128 29.21 52.34 101.68 43.58 116.33 41.88C147.63 477.1 180.36 512 224 512s76.37-34.9 97.84-86.12c14.64 1.7 87.11 10.46 116.33-41.88 16.38-29.4 15-73.09-25.14-128zM63.38 352c-4.03-7.21-.19-24.8 14.95-48.29 6.96 6.53 14.2 12.89 21.87 19.18 1.71 13.71 4 27.08 6.76 40.08-24.56.89-39.89-4.37-43.58-10.97zm36.82-162.88c-7.66 6.29-14.9 12.65-21.87 19.18-15.13-23.5-18.97-41.09-14.95-48.3 3.41-6.14 16.39-11.47 37.92-11.47 1.71 0 3.87.3 5.69.37a472.191 472.191 0 0 0-6.79 40.22zM224 64c9.47 0 22.2 13.52 33.86 37.26-11.19 3.7-22.44 8-33.86 12.86-11.42-4.86-22.67-9.16-33.86-12.86C201.8 77.52 214.53 64 224 64zm0 384c-9.47 0-22.2-13.52-33.86-37.26 11.19-3.7 22.44-8 33.86-12.86 11.42 4.86 22.67 9.16 33.86 12.86C246.2 434.48 233.47 448 224 448zm62.5-157.33c-26.7 19.08-46.14 29.33-62.5 37.48-16.35-8.14-35.8-18.41-62.5-37.48-1.99-27.79-1.99-41.54 0-69.33 26.67-19.05 46.13-29.32 62.5-37.48 16.39 8.17 35.86 18.44 62.5 37.48 1.98 27.78 1.99 41.53 0 69.33zM384.62 352c-3.67 6.62-19 11.82-43.58 10.95 2.76-13 5.05-26.37 6.76-40.06 7.66-6.29 14.9-12.65 21.87-19.18 15.13 23.49 18.97 41.08 14.95 48.29zm-14.95-143.71c-6.96-6.53-14.2-12.89-21.87-19.18a473.535 473.535 0 0 0-6.79-40.22c1.82-.07 3.97-.37 5.69-.37 21.52 0 34.51 5.34 37.92 11.47 4.02 7.22.18 24.81-14.95 48.3zM224 224c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faAudioDescription = {\n prefix: 'fas',\n iconName: 'audio-description',\n icon: [512, 512, [], \"f29e\", \"M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z\"]\n};\nvar faAward = {\n prefix: 'fas',\n iconName: 'award',\n icon: [384, 512, [], \"f559\", \"M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z\"]\n};\nvar faBaby = {\n prefix: 'fas',\n iconName: 'baby',\n icon: [384, 512, [], \"f77c\", \"M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z\"]\n};\nvar faBabyCarriage = {\n prefix: 'fas',\n iconName: 'baby-carriage',\n icon: [512, 512, [], \"f77d\", \"M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z\"]\n};\nvar faBackspace = {\n prefix: 'fas',\n iconName: 'backspace',\n icon: [640, 512, [], \"f55a\", \"M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z\"]\n};\nvar faBackward = {\n prefix: 'fas',\n iconName: 'backward',\n icon: [512, 512, [], \"f04a\", \"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"]\n};\nvar faBacon = {\n prefix: 'fas',\n iconName: 'bacon',\n icon: [576, 512, [], \"f7e5\", \"M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z\"]\n};\nvar faBalanceScale = {\n prefix: 'fas',\n iconName: 'balance-scale',\n icon: [640, 512, [], \"f24e\", \"M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faBalanceScaleLeft = {\n prefix: 'fas',\n iconName: 'balance-scale-left',\n icon: [640, 512, [], \"f515\", \"M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z\"]\n};\nvar faBalanceScaleRight = {\n prefix: 'fas',\n iconName: 'balance-scale-right',\n icon: [640, 512, [], \"f516\", \"M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z\"]\n};\nvar faBan = {\n prefix: 'fas',\n iconName: 'ban',\n icon: [512, 512, [], \"f05e\", \"M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z\"]\n};\nvar faBandAid = {\n prefix: 'fas',\n iconName: 'band-aid',\n icon: [640, 512, [], \"f462\", \"M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z\"]\n};\nvar faBarcode = {\n prefix: 'fas',\n iconName: 'barcode',\n icon: [512, 512, [], \"f02a\", \"M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z\"]\n};\nvar faBars = {\n prefix: 'fas',\n iconName: 'bars',\n icon: [448, 512, [], \"f0c9\", \"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"]\n};\nvar faBaseballBall = {\n prefix: 'fas',\n iconName: 'baseball-ball',\n icon: [496, 512, [], \"f433\", \"M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z\"]\n};\nvar faBasketballBall = {\n prefix: 'fas',\n iconName: 'basketball-ball',\n icon: [496, 512, [], \"f434\", \"M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z\"]\n};\nvar faBath = {\n prefix: 'fas',\n iconName: 'bath',\n icon: [512, 512, [], \"f2cd\", \"M488 256H80V112c0-17.645 14.355-32 32-32 11.351 0 21.332 5.945 27.015 14.88-16.492 25.207-14.687 59.576 6.838 83.035-4.176 4.713-4.021 11.916.491 16.428l11.314 11.314c4.686 4.686 12.284 4.686 16.971 0l95.03-95.029c4.686-4.686 4.686-12.284 0-16.971l-11.314-11.314c-4.512-4.512-11.715-4.666-16.428-.491-17.949-16.469-42.294-21.429-64.178-15.365C163.281 45.667 139.212 32 112 32c-44.112 0-80 35.888-80 80v144h-8c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h8v32c0 28.43 12.362 53.969 32 71.547V456c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-8h256v8c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-32.453c19.638-17.578 32-43.117 32-71.547v-32h8c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faBatteryEmpty = {\n prefix: 'fas',\n iconName: 'battery-empty',\n icon: [640, 512, [], \"f244\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z\"]\n};\nvar faBatteryFull = {\n prefix: 'fas',\n iconName: 'battery-full',\n icon: [640, 512, [], \"f240\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z\"]\n};\nvar faBatteryHalf = {\n prefix: 'fas',\n iconName: 'battery-half',\n icon: [640, 512, [], \"f242\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z\"]\n};\nvar faBatteryQuarter = {\n prefix: 'fas',\n iconName: 'battery-quarter',\n icon: [640, 512, [], \"f243\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z\"]\n};\nvar faBatteryThreeQuarters = {\n prefix: 'fas',\n iconName: 'battery-three-quarters',\n icon: [640, 512, [], \"f241\", \"M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z\"]\n};\nvar faBed = {\n prefix: 'fas',\n iconName: 'bed',\n icon: [640, 512, [], \"f236\", \"M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z\"]\n};\nvar faBeer = {\n prefix: 'fas',\n iconName: 'beer',\n icon: [448, 512, [], \"f0fc\", \"M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z\"]\n};\nvar faBell = {\n prefix: 'fas',\n iconName: 'bell',\n icon: [448, 512, [], \"f0f3\", \"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z\"]\n};\nvar faBellSlash = {\n prefix: 'fas',\n iconName: 'bell-slash',\n icon: [640, 512, [], \"f1f6\", \"M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z\"]\n};\nvar faBezierCurve = {\n prefix: 'fas',\n iconName: 'bezier-curve',\n icon: [640, 512, [], \"f55b\", \"M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faBible = {\n prefix: 'fas',\n iconName: 'bible',\n icon: [448, 512, [], \"f647\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faBicycle = {\n prefix: 'fas',\n iconName: 'bicycle',\n icon: [640, 512, [], \"f206\", \"M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z\"]\n};\nvar faBiking = {\n prefix: 'fas',\n iconName: 'biking',\n icon: [640, 512, [], \"f84a\", \"M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z\"]\n};\nvar faBinoculars = {\n prefix: 'fas',\n iconName: 'binoculars',\n icon: [512, 512, [], \"f1e5\", \"M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z\"]\n};\nvar faBiohazard = {\n prefix: 'fas',\n iconName: 'biohazard',\n icon: [576, 512, [], \"f780\", \"M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faBirthdayCake = {\n prefix: 'fas',\n iconName: 'birthday-cake',\n icon: [448, 512, [], \"f1fd\", \"M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z\"]\n};\nvar faBlender = {\n prefix: 'fas',\n iconName: 'blender',\n icon: [512, 512, [], \"f517\", \"M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z\"]\n};\nvar faBlenderPhone = {\n prefix: 'fas',\n iconName: 'blender-phone',\n icon: [576, 512, [], \"f6b6\", \"M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBlind = {\n prefix: 'fas',\n iconName: 'blind',\n icon: [384, 512, [], \"f29d\", \"M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z\"]\n};\nvar faBlog = {\n prefix: 'fas',\n iconName: 'blog',\n icon: [512, 512, [], \"f781\", \"M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faBold = {\n prefix: 'fas',\n iconName: 'bold',\n icon: [384, 512, [], \"f032\", \"M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z\"]\n};\nvar faBolt = {\n prefix: 'fas',\n iconName: 'bolt',\n icon: [320, 512, [], \"f0e7\", \"M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z\"]\n};\nvar faBomb = {\n prefix: 'fas',\n iconName: 'bomb',\n icon: [512, 512, [], \"f1e2\", \"M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z\"]\n};\nvar faBone = {\n prefix: 'fas',\n iconName: 'bone',\n icon: [640, 512, [], \"f5d7\", \"M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z\"]\n};\nvar faBong = {\n prefix: 'fas',\n iconName: 'bong',\n icon: [448, 512, [], \"f55c\", \"M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z\"]\n};\nvar faBook = {\n prefix: 'fas',\n iconName: 'book',\n icon: [448, 512, [], \"f02d\", \"M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z\"]\n};\nvar faBookDead = {\n prefix: 'fas',\n iconName: 'book-dead',\n icon: [448, 512, [], \"f6b7\", \"M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z\"]\n};\nvar faBookMedical = {\n prefix: 'fas',\n iconName: 'book-medical',\n icon: [448, 512, [], \"f7e6\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z\"]\n};\nvar faBookOpen = {\n prefix: 'fas',\n iconName: 'book-open',\n icon: [576, 512, [], \"f518\", \"M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z\"]\n};\nvar faBookReader = {\n prefix: 'fas',\n iconName: 'book-reader',\n icon: [512, 512, [], \"f5da\", \"M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z\"]\n};\nvar faBookmark = {\n prefix: 'fas',\n iconName: 'bookmark',\n icon: [384, 512, [], \"f02e\", \"M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z\"]\n};\nvar faBorderAll = {\n prefix: 'fas',\n iconName: 'border-all',\n icon: [448, 512, [], \"f84c\", \"M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z\"]\n};\nvar faBorderNone = {\n prefix: 'fas',\n iconName: 'border-none',\n icon: [448, 512, [], \"f850\", \"M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBorderStyle = {\n prefix: 'fas',\n iconName: 'border-style',\n icon: [448, 512, [], \"f853\", \"M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faBowlingBall = {\n prefix: 'fas',\n iconName: 'bowling-ball',\n icon: [496, 512, [], \"f436\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faBox = {\n prefix: 'fas',\n iconName: 'box',\n icon: [512, 512, [], \"f466\", \"M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z\"]\n};\nvar faBoxOpen = {\n prefix: 'fas',\n iconName: 'box-open',\n icon: [640, 512, [], \"f49e\", \"M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z\"]\n};\nvar faBoxes = {\n prefix: 'fas',\n iconName: 'boxes',\n icon: [576, 512, [], \"f468\", \"M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z\"]\n};\nvar faBraille = {\n prefix: 'fas',\n iconName: 'braille',\n icon: [640, 512, [], \"f2a1\", \"M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faBrain = {\n prefix: 'fas',\n iconName: 'brain',\n icon: [576, 512, [], \"f5dc\", \"M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z\"]\n};\nvar faBreadSlice = {\n prefix: 'fas',\n iconName: 'bread-slice',\n icon: [576, 512, [], \"f7ec\", \"M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z\"]\n};\nvar faBriefcase = {\n prefix: 'fas',\n iconName: 'briefcase',\n icon: [512, 512, [], \"f0b1\", \"M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z\"]\n};\nvar faBriefcaseMedical = {\n prefix: 'fas',\n iconName: 'briefcase-medical',\n icon: [512, 512, [], \"f469\", \"M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z\"]\n};\nvar faBroadcastTower = {\n prefix: 'fas',\n iconName: 'broadcast-tower',\n icon: [640, 512, [], \"f519\", \"M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z\"]\n};\nvar faBroom = {\n prefix: 'fas',\n iconName: 'broom',\n icon: [640, 512, [], \"f51a\", \"M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z\"]\n};\nvar faBrush = {\n prefix: 'fas',\n iconName: 'brush',\n icon: [384, 512, [], \"f55d\", \"M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z\"]\n};\nvar faBug = {\n prefix: 'fas',\n iconName: 'bug',\n icon: [512, 512, [], \"f188\", \"M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z\"]\n};\nvar faBuilding = {\n prefix: 'fas',\n iconName: 'building',\n icon: [448, 512, [], \"f1ad\", \"M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z\"]\n};\nvar faBullhorn = {\n prefix: 'fas',\n iconName: 'bullhorn',\n icon: [576, 512, [], \"f0a1\", \"M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z\"]\n};\nvar faBullseye = {\n prefix: 'fas',\n iconName: 'bullseye',\n icon: [496, 512, [], \"f140\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z\"]\n};\nvar faBurn = {\n prefix: 'fas',\n iconName: 'burn',\n icon: [384, 512, [], \"f46a\", \"M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z\"]\n};\nvar faBus = {\n prefix: 'fas',\n iconName: 'bus',\n icon: [512, 512, [], \"f207\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusAlt = {\n prefix: 'fas',\n iconName: 'bus-alt',\n icon: [512, 512, [], \"f55e\", \"M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faBusinessTime = {\n prefix: 'fas',\n iconName: 'business-time',\n icon: [640, 512, [], \"f64a\", \"M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z\"]\n};\nvar faCalculator = {\n prefix: 'fas',\n iconName: 'calculator',\n icon: [448, 512, [], \"f1ec\", \"M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z\"]\n};\nvar faCalendar = {\n prefix: 'fas',\n iconName: 'calendar',\n icon: [448, 512, [], \"f133\", \"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"]\n};\nvar faCalendarAlt = {\n prefix: 'fas',\n iconName: 'calendar-alt',\n icon: [448, 512, [], \"f073\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarCheck = {\n prefix: 'fas',\n iconName: 'calendar-check',\n icon: [448, 512, [], \"f274\", \"M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z\"]\n};\nvar faCalendarDay = {\n prefix: 'fas',\n iconName: 'calendar-day',\n icon: [448, 512, [], \"f783\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCalendarMinus = {\n prefix: 'fas',\n iconName: 'calendar-minus',\n icon: [448, 512, [], \"f272\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z\"]\n};\nvar faCalendarPlus = {\n prefix: 'fas',\n iconName: 'calendar-plus',\n icon: [448, 512, [], \"f271\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z\"]\n};\nvar faCalendarTimes = {\n prefix: 'fas',\n iconName: 'calendar-times',\n icon: [448, 512, [], \"f273\", \"M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z\"]\n};\nvar faCalendarWeek = {\n prefix: 'fas',\n iconName: 'calendar-week',\n icon: [448, 512, [], \"f784\", \"M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\"]\n};\nvar faCamera = {\n prefix: 'fas',\n iconName: 'camera',\n icon: [512, 512, [], \"f030\", \"M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z\"]\n};\nvar faCameraRetro = {\n prefix: 'fas',\n iconName: 'camera-retro',\n icon: [512, 512, [], \"f083\", \"M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z\"]\n};\nvar faCampground = {\n prefix: 'fas',\n iconName: 'campground',\n icon: [640, 512, [], \"f6bb\", \"M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z\"]\n};\nvar faCandyCane = {\n prefix: 'fas',\n iconName: 'candy-cane',\n icon: [512, 512, [], \"f786\", \"M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z\"]\n};\nvar faCannabis = {\n prefix: 'fas',\n iconName: 'cannabis',\n icon: [512, 512, [], \"f55f\", \"M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z\"]\n};\nvar faCapsules = {\n prefix: 'fas',\n iconName: 'capsules',\n icon: [576, 512, [], \"f46b\", \"M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z\"]\n};\nvar faCar = {\n prefix: 'fas',\n iconName: 'car',\n icon: [512, 512, [], \"f1b9\", \"M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarAlt = {\n prefix: 'fas',\n iconName: 'car-alt',\n icon: [480, 512, [], \"f5de\", \"M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z\"]\n};\nvar faCarBattery = {\n prefix: 'fas',\n iconName: 'car-battery',\n icon: [512, 512, [], \"f5df\", \"M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faCarCrash = {\n prefix: 'fas',\n iconName: 'car-crash',\n icon: [640, 512, [], \"f5e1\", \"M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z\"]\n};\nvar faCarSide = {\n prefix: 'fas',\n iconName: 'car-side',\n icon: [640, 512, [], \"f5e4\", \"M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faCaretDown = {\n prefix: 'fas',\n iconName: 'caret-down',\n icon: [320, 512, [], \"f0d7\", \"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\"]\n};\nvar faCaretLeft = {\n prefix: 'fas',\n iconName: 'caret-left',\n icon: [192, 512, [], \"f0d9\", \"M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z\"]\n};\nvar faCaretRight = {\n prefix: 'fas',\n iconName: 'caret-right',\n icon: [192, 512, [], \"f0da\", \"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\"]\n};\nvar faCaretSquareDown = {\n prefix: 'fas',\n iconName: 'caret-square-down',\n icon: [448, 512, [], \"f150\", \"M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z\"]\n};\nvar faCaretSquareLeft = {\n prefix: 'fas',\n iconName: 'caret-square-left',\n icon: [448, 512, [], \"f191\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z\"]\n};\nvar faCaretSquareRight = {\n prefix: 'fas',\n iconName: 'caret-square-right',\n icon: [448, 512, [], \"f152\", \"M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z\"]\n};\nvar faCaretSquareUp = {\n prefix: 'fas',\n iconName: 'caret-square-up',\n icon: [448, 512, [], \"f151\", \"M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z\"]\n};\nvar faCaretUp = {\n prefix: 'fas',\n iconName: 'caret-up',\n icon: [320, 512, [], \"f0d8\", \"M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z\"]\n};\nvar faCarrot = {\n prefix: 'fas',\n iconName: 'carrot',\n icon: [512, 512, [], \"f787\", \"M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z\"]\n};\nvar faCartArrowDown = {\n prefix: 'fas',\n iconName: 'cart-arrow-down',\n icon: [576, 512, [], \"f218\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z\"]\n};\nvar faCartPlus = {\n prefix: 'fas',\n iconName: 'cart-plus',\n icon: [576, 512, [], \"f217\", \"M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z\"]\n};\nvar faCashRegister = {\n prefix: 'fas',\n iconName: 'cash-register',\n icon: [512, 512, [], \"f788\", \"M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z\"]\n};\nvar faCat = {\n prefix: 'fas',\n iconName: 'cat',\n icon: [512, 512, [], \"f6be\", \"M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faCertificate = {\n prefix: 'fas',\n iconName: 'certificate',\n icon: [512, 512, [], \"f0a3\", \"M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z\"]\n};\nvar faChair = {\n prefix: 'fas',\n iconName: 'chair',\n icon: [448, 512, [], \"f6c0\", \"M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z\"]\n};\nvar faChalkboard = {\n prefix: 'fas',\n iconName: 'chalkboard',\n icon: [640, 512, [], \"f51b\", \"M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChalkboardTeacher = {\n prefix: 'fas',\n iconName: 'chalkboard-teacher',\n icon: [640, 512, [], \"f51c\", \"M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z\"]\n};\nvar faChargingStation = {\n prefix: 'fas',\n iconName: 'charging-station',\n icon: [576, 512, [], \"f5e7\", \"M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z\"]\n};\nvar faChartArea = {\n prefix: 'fas',\n iconName: 'chart-area',\n icon: [512, 512, [], \"f1fe\", \"M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z\"]\n};\nvar faChartBar = {\n prefix: 'fas',\n iconName: 'chart-bar',\n icon: [512, 512, [], \"f080\", \"M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faChartLine = {\n prefix: 'fas',\n iconName: 'chart-line',\n icon: [512, 512, [], \"f201\", \"M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z\"]\n};\nvar faChartPie = {\n prefix: 'fas',\n iconName: 'chart-pie',\n icon: [544, 512, [], \"f200\", \"M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z\"]\n};\nvar faCheck = {\n prefix: 'fas',\n iconName: 'check',\n icon: [512, 512, [], \"f00c\", \"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"]\n};\nvar faCheckCircle = {\n prefix: 'fas',\n iconName: 'check-circle',\n icon: [512, 512, [], \"f058\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\"]\n};\nvar faCheckDouble = {\n prefix: 'fas',\n iconName: 'check-double',\n icon: [512, 512, [], \"f560\", \"M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z\"]\n};\nvar faCheckSquare = {\n prefix: 'fas',\n iconName: 'check-square',\n icon: [448, 512, [], \"f14a\", \"M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z\"]\n};\nvar faCheese = {\n prefix: 'fas',\n iconName: 'cheese',\n icon: [512, 512, [], \"f7ef\", \"M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z\"]\n};\nvar faChess = {\n prefix: 'fas',\n iconName: 'chess',\n icon: [512, 512, [], \"f439\", \"M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z\"]\n};\nvar faChessBishop = {\n prefix: 'fas',\n iconName: 'chess-bishop',\n icon: [320, 512, [], \"f43a\", \"M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessBoard = {\n prefix: 'fas',\n iconName: 'chess-board',\n icon: [512, 512, [], \"f43c\", \"M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z\"]\n};\nvar faChessKing = {\n prefix: 'fas',\n iconName: 'chess-king',\n icon: [448, 512, [], \"f43f\", \"M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z\"]\n};\nvar faChessKnight = {\n prefix: 'fas',\n iconName: 'chess-knight',\n icon: [384, 512, [], \"f441\", \"M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessPawn = {\n prefix: 'fas',\n iconName: 'chess-pawn',\n icon: [320, 512, [], \"f443\", \"M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChessQueen = {\n prefix: 'fas',\n iconName: 'chess-queen',\n icon: [512, 512, [], \"f445\", \"M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z\"]\n};\nvar faChessRook = {\n prefix: 'fas',\n iconName: 'chess-rook',\n icon: [384, 512, [], \"f447\", \"M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faChevronCircleDown = {\n prefix: 'fas',\n iconName: 'chevron-circle-down',\n icon: [512, 512, [], \"f13a\", \"M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z\"]\n};\nvar faChevronCircleLeft = {\n prefix: 'fas',\n iconName: 'chevron-circle-left',\n icon: [512, 512, [], \"f137\", \"M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z\"]\n};\nvar faChevronCircleRight = {\n prefix: 'fas',\n iconName: 'chevron-circle-right',\n icon: [512, 512, [], \"f138\", \"M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z\"]\n};\nvar faChevronCircleUp = {\n prefix: 'fas',\n iconName: 'chevron-circle-up',\n icon: [512, 512, [], \"f139\", \"M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z\"]\n};\nvar faChevronDown = {\n prefix: 'fas',\n iconName: 'chevron-down',\n icon: [448, 512, [], \"f078\", \"M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z\"]\n};\nvar faChevronLeft = {\n prefix: 'fas',\n iconName: 'chevron-left',\n icon: [320, 512, [], \"f053\", \"M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z\"]\n};\nvar faChevronRight = {\n prefix: 'fas',\n iconName: 'chevron-right',\n icon: [320, 512, [], \"f054\", \"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"]\n};\nvar faChevronUp = {\n prefix: 'fas',\n iconName: 'chevron-up',\n icon: [448, 512, [], \"f077\", \"M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z\"]\n};\nvar faChild = {\n prefix: 'fas',\n iconName: 'child',\n icon: [384, 512, [], \"f1ae\", \"M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z\"]\n};\nvar faChurch = {\n prefix: 'fas',\n iconName: 'church',\n icon: [640, 512, [], \"f51d\", \"M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z\"]\n};\nvar faCircle = {\n prefix: 'fas',\n iconName: 'circle',\n icon: [512, 512, [], \"f111\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z\"]\n};\nvar faCircleNotch = {\n prefix: 'fas',\n iconName: 'circle-notch',\n icon: [512, 512, [], \"f1ce\", \"M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z\"]\n};\nvar faCity = {\n prefix: 'fas',\n iconName: 'city',\n icon: [640, 512, [], \"f64f\", \"M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z\"]\n};\nvar faClinicMedical = {\n prefix: 'fas',\n iconName: 'clinic-medical',\n icon: [576, 512, [], \"f7f2\", \"M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z\"]\n};\nvar faClipboard = {\n prefix: 'fas',\n iconName: 'clipboard',\n icon: [384, 512, [], \"f328\", \"M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z\"]\n};\nvar faClipboardCheck = {\n prefix: 'fas',\n iconName: 'clipboard-check',\n icon: [384, 512, [], \"f46c\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z\"]\n};\nvar faClipboardList = {\n prefix: 'fas',\n iconName: 'clipboard-list',\n icon: [384, 512, [], \"f46d\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faClock = {\n prefix: 'fas',\n iconName: 'clock',\n icon: [512, 512, [], \"f017\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm57.1 350.1L224.9 294c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v137.7l63.5 46.2c5.4 3.9 6.5 11.4 2.6 16.8l-28.2 38.8c-3.9 5.3-11.4 6.5-16.8 2.6z\"]\n};\nvar faClone = {\n prefix: 'fas',\n iconName: 'clone',\n icon: [512, 512, [], \"f24d\", \"M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z\"]\n};\nvar faClosedCaptioning = {\n prefix: 'fas',\n iconName: 'closed-captioning',\n icon: [512, 512, [], \"f20a\", \"M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z\"]\n};\nvar faCloud = {\n prefix: 'fas',\n iconName: 'cloud',\n icon: [640, 512, [], \"f0c2\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z\"]\n};\nvar faCloudDownloadAlt = {\n prefix: 'fas',\n iconName: 'cloud-download-alt',\n icon: [640, 512, [], \"f381\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z\"]\n};\nvar faCloudMeatball = {\n prefix: 'fas',\n iconName: 'cloud-meatball',\n icon: [512, 512, [], \"f73b\", \"M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z\"]\n};\nvar faCloudMoon = {\n prefix: 'fas',\n iconName: 'cloud-moon',\n icon: [576, 512, [], \"f6c3\", \"M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z\"]\n};\nvar faCloudMoonRain = {\n prefix: 'fas',\n iconName: 'cloud-moon-rain',\n icon: [576, 512, [], \"f73c\", \"M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudRain = {\n prefix: 'fas',\n iconName: 'cloud-rain',\n icon: [512, 512, [], \"f73d\", \"M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z\"]\n};\nvar faCloudShowersHeavy = {\n prefix: 'fas',\n iconName: 'cloud-showers-heavy',\n icon: [512, 512, [], \"f740\", \"M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z\"]\n};\nvar faCloudSun = {\n prefix: 'fas',\n iconName: 'cloud-sun',\n icon: [640, 512, [], \"f6c4\", \"M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z\"]\n};\nvar faCloudSunRain = {\n prefix: 'fas',\n iconName: 'cloud-sun-rain',\n icon: [576, 512, [], \"f743\", \"M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z\"]\n};\nvar faCloudUploadAlt = {\n prefix: 'fas',\n iconName: 'cloud-upload-alt',\n icon: [640, 512, [], \"f382\", \"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\"]\n};\nvar faCocktail = {\n prefix: 'fas',\n iconName: 'cocktail',\n icon: [576, 512, [], \"f561\", \"M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z\"]\n};\nvar faCode = {\n prefix: 'fas',\n iconName: 'code',\n icon: [640, 512, [], \"f121\", \"M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z\"]\n};\nvar faCodeBranch = {\n prefix: 'fas',\n iconName: 'code-branch',\n icon: [384, 512, [], \"f126\", \"M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z\"]\n};\nvar faCoffee = {\n prefix: 'fas',\n iconName: 'coffee',\n icon: [640, 512, [], \"f0f4\", \"M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z\"]\n};\nvar faCog = {\n prefix: 'fas',\n iconName: 'cog',\n icon: [512, 512, [], \"f013\", \"M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faCogs = {\n prefix: 'fas',\n iconName: 'cogs',\n icon: [640, 512, [], \"f085\", \"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"]\n};\nvar faCoins = {\n prefix: 'fas',\n iconName: 'coins',\n icon: [512, 512, [], \"f51e\", \"M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z\"]\n};\nvar faColumns = {\n prefix: 'fas',\n iconName: 'columns',\n icon: [512, 512, [], \"f0db\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z\"]\n};\nvar faComment = {\n prefix: 'fas',\n iconName: 'comment',\n icon: [512, 512, [], \"f075\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z\"]\n};\nvar faCommentAlt = {\n prefix: 'fas',\n iconName: 'comment-alt',\n icon: [512, 512, [], \"f27a\", \"M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z\"]\n};\nvar faCommentDollar = {\n prefix: 'fas',\n iconName: 'comment-dollar',\n icon: [512, 512, [], \"f651\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z\"]\n};\nvar faCommentDots = {\n prefix: 'fas',\n iconName: 'comment-dots',\n icon: [512, 512, [], \"f4ad\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faCommentMedical = {\n prefix: 'fas',\n iconName: 'comment-medical',\n icon: [512, 512, [], \"f7f5\", \"M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z\"]\n};\nvar faCommentSlash = {\n prefix: 'fas',\n iconName: 'comment-slash',\n icon: [640, 512, [], \"f4b3\", \"M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faComments = {\n prefix: 'fas',\n iconName: 'comments',\n icon: [576, 512, [], \"f086\", \"M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z\"]\n};\nvar faCommentsDollar = {\n prefix: 'fas',\n iconName: 'comments-dollar',\n icon: [576, 512, [], \"f653\", \"M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z\"]\n};\nvar faCompactDisc = {\n prefix: 'fas',\n iconName: 'compact-disc',\n icon: [496, 512, [], \"f51f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z\"]\n};\nvar faCompass = {\n prefix: 'fas',\n iconName: 'compass',\n icon: [496, 512, [], \"f14e\", \"M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z\"]\n};\nvar faCompress = {\n prefix: 'fas',\n iconName: 'compress',\n icon: [448, 512, [], \"f066\", \"M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faCompressArrowsAlt = {\n prefix: 'fas',\n iconName: 'compress-arrows-alt',\n icon: [512, 512, [], \"f78c\", \"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"]\n};\nvar faConciergeBell = {\n prefix: 'fas',\n iconName: 'concierge-bell',\n icon: [512, 512, [], \"f562\", \"M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faCookie = {\n prefix: 'fas',\n iconName: 'cookie',\n icon: [512, 512, [], \"f563\", \"M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCookieBite = {\n prefix: 'fas',\n iconName: 'cookie-bite',\n icon: [512, 512, [], \"f564\", \"M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faCopy = {\n prefix: 'fas',\n iconName: 'copy',\n icon: [448, 512, [], \"f0c5\", \"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z\"]\n};\nvar faCopyright = {\n prefix: 'fas',\n iconName: 'copyright',\n icon: [512, 512, [], \"f1f9\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z\"]\n};\nvar faCouch = {\n prefix: 'fas',\n iconName: 'couch',\n icon: [640, 512, [], \"f4b8\", \"M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z\"]\n};\nvar faCreditCard = {\n prefix: 'fas',\n iconName: 'credit-card',\n icon: [576, 512, [], \"f09d\", \"M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z\"]\n};\nvar faCrop = {\n prefix: 'fas',\n iconName: 'crop',\n icon: [512, 512, [], \"f125\", \"M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faCropAlt = {\n prefix: 'fas',\n iconName: 'crop-alt',\n icon: [512, 512, [], \"f565\", \"M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z\"]\n};\nvar faCross = {\n prefix: 'fas',\n iconName: 'cross',\n icon: [384, 512, [], \"f654\", \"M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faCrosshairs = {\n prefix: 'fas',\n iconName: 'crosshairs',\n icon: [512, 512, [], \"f05b\", \"M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z\"]\n};\nvar faCrow = {\n prefix: 'fas',\n iconName: 'crow',\n icon: [640, 512, [], \"f520\", \"M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faCrown = {\n prefix: 'fas',\n iconName: 'crown',\n icon: [640, 512, [], \"f521\", \"M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z\"]\n};\nvar faCrutch = {\n prefix: 'fas',\n iconName: 'crutch',\n icon: [512, 512, [], \"f7f7\", \"M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z\"]\n};\nvar faCube = {\n prefix: 'fas',\n iconName: 'cube',\n icon: [512, 512, [], \"f1b2\", \"M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z\"]\n};\nvar faCubes = {\n prefix: 'fas',\n iconName: 'cubes',\n icon: [512, 512, [], \"f1b3\", \"M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z\"]\n};\nvar faCut = {\n prefix: 'fas',\n iconName: 'cut',\n icon: [448, 512, [], \"f0c4\", \"M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faDatabase = {\n prefix: 'fas',\n iconName: 'database',\n icon: [448, 512, [], \"f1c0\", \"M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z\"]\n};\nvar faDeaf = {\n prefix: 'fas',\n iconName: 'deaf',\n icon: [512, 512, [], \"f2a4\", \"M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z\"]\n};\nvar faDemocrat = {\n prefix: 'fas',\n iconName: 'democrat',\n icon: [640, 512, [], \"f747\", \"M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z\"]\n};\nvar faDesktop = {\n prefix: 'fas',\n iconName: 'desktop',\n icon: [576, 512, [], \"f108\", \"M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z\"]\n};\nvar faDharmachakra = {\n prefix: 'fas',\n iconName: 'dharmachakra',\n icon: [512, 512, [], \"f655\", \"M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z\"]\n};\nvar faDiagnoses = {\n prefix: 'fas',\n iconName: 'diagnoses',\n icon: [640, 512, [], \"f470\", \"M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDice = {\n prefix: 'fas',\n iconName: 'dice',\n icon: [640, 512, [], \"f522\", \"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faDiceD20 = {\n prefix: 'fas',\n iconName: 'dice-d20',\n icon: [480, 512, [], \"f6cf\", \"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"]\n};\nvar faDiceD6 = {\n prefix: 'fas',\n iconName: 'dice-d6',\n icon: [448, 512, [], \"f6d1\", \"M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z\"]\n};\nvar faDiceFive = {\n prefix: 'fas',\n iconName: 'dice-five',\n icon: [448, 512, [], \"f523\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceFour = {\n prefix: 'fas',\n iconName: 'dice-four',\n icon: [448, 512, [], \"f524\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceOne = {\n prefix: 'fas',\n iconName: 'dice-one',\n icon: [448, 512, [], \"f525\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceSix = {\n prefix: 'fas',\n iconName: 'dice-six',\n icon: [448, 512, [], \"f526\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceThree = {\n prefix: 'fas',\n iconName: 'dice-three',\n icon: [448, 512, [], \"f527\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDiceTwo = {\n prefix: 'fas',\n iconName: 'dice-two',\n icon: [448, 512, [], \"f528\", \"M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faDigitalTachograph = {\n prefix: 'fas',\n iconName: 'digital-tachograph',\n icon: [640, 512, [], \"f566\", \"M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z\"]\n};\nvar faDirections = {\n prefix: 'fas',\n iconName: 'directions',\n icon: [512, 512, [], \"f5eb\", \"M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z\"]\n};\nvar faDivide = {\n prefix: 'fas',\n iconName: 'divide',\n icon: [448, 512, [], \"f529\", \"M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faDizzy = {\n prefix: 'fas',\n iconName: 'dizzy',\n icon: [496, 512, [], \"f567\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z\"]\n};\nvar faDna = {\n prefix: 'fas',\n iconName: 'dna',\n icon: [448, 512, [], \"f471\", \"M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z\"]\n};\nvar faDog = {\n prefix: 'fas',\n iconName: 'dog',\n icon: [512, 512, [], \"f6d3\", \"M496 96h-64l-7.16-14.31A32 32 0 0 0 396.22 64H342.6l-27.28-27.28C305.23 26.64 288 33.78 288 48.03v149.84l128 45.71V208h32c35.35 0 64-28.65 64-64v-32c0-8.84-7.16-16-16-16zm-112 48c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM96 224c-17.64 0-32-14.36-32-32 0-17.67-14.33-32-32-32S0 174.33 0 192c0 41.66 26.83 76.85 64 90.1V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V384h160v112c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V277.55L266.05 224H96z\"]\n};\nvar faDollarSign = {\n prefix: 'fas',\n iconName: 'dollar-sign',\n icon: [288, 512, [], \"f155\", \"M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z\"]\n};\nvar faDolly = {\n prefix: 'fas',\n iconName: 'dolly',\n icon: [576, 512, [], \"f472\", \"M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faDollyFlatbed = {\n prefix: 'fas',\n iconName: 'dolly-flatbed',\n icon: [640, 512, [], \"f474\", \"M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDonate = {\n prefix: 'fas',\n iconName: 'donate',\n icon: [512, 512, [], \"f4b9\", \"M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z\"]\n};\nvar faDoorClosed = {\n prefix: 'fas',\n iconName: 'door-closed',\n icon: [640, 512, [], \"f52a\", \"M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z\"]\n};\nvar faDoorOpen = {\n prefix: 'fas',\n iconName: 'door-open',\n icon: [640, 512, [], \"f52b\", \"M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z\"]\n};\nvar faDotCircle = {\n prefix: 'fas',\n iconName: 'dot-circle',\n icon: [512, 512, [], \"f192\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z\"]\n};\nvar faDove = {\n prefix: 'fas',\n iconName: 'dove',\n icon: [512, 512, [], \"f4ba\", \"M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faDownload = {\n prefix: 'fas',\n iconName: 'download',\n icon: [512, 512, [], \"f019\", \"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faDraftingCompass = {\n prefix: 'fas',\n iconName: 'drafting-compass',\n icon: [512, 512, [], \"f568\", \"M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z\"]\n};\nvar faDragon = {\n prefix: 'fas',\n iconName: 'dragon',\n icon: [640, 512, [], \"f6d5\", \"M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z\"]\n};\nvar faDrawPolygon = {\n prefix: 'fas',\n iconName: 'draw-polygon',\n icon: [448, 512, [], \"f5ee\", \"M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z\"]\n};\nvar faDrum = {\n prefix: 'fas',\n iconName: 'drum',\n icon: [576, 512, [], \"f569\", \"M458.08 120.88l102.39-61.43c15.16-9.09 20.06-28.75 10.97-43.91C562.34.39 542.7-4.53 527.53 4.57l-160.69 96.41A629.32 629.32 0 0 0 288 96C128.94 96 0 153.31 0 224v160.83c0 30.46 24.03 58.4 64 80.37v-96.37c0-17.6 14.4-32 32-32s32 14.4 32 32v122.41c37.4 11.13 81 18.44 128 20.75V400.84c0-17.6 14.4-32 32-32s32 14.4 32 32V512c47-2.31 90.6-9.62 128-20.75V368.84c0-17.6 14.4-32 32-32s32 14.4 32 32v96.37c39.97-21.97 64-49.91 64-80.37V224.01c-.01-42.38-46.54-79.84-117.92-103.13zM288 304c-132.55 0-240-35.82-240-80s107.45-80 240-80c2.34 0 4.62.1 6.94.12l-87.41 52.44c-15.16 9.09-20.06 28.75-10.97 43.91 9.56 15.93 29.51 19.61 43.91 10.97l162.71-97.62C477.55 167.41 528 193.74 528 224.01 528 268.19 420.54 304 288 304z\"]\n};\nvar faDrumSteelpan = {\n prefix: 'fas',\n iconName: 'drum-steelpan',\n icon: [576, 512, [], \"f56a\", \"M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z\"]\n};\nvar faDrumstickBite = {\n prefix: 'fas',\n iconName: 'drumstick-bite',\n icon: [512, 512, [], \"f6d7\", \"M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z\"]\n};\nvar faDumbbell = {\n prefix: 'fas',\n iconName: 'dumbbell',\n icon: [640, 512, [], \"f44b\", \"M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z\"]\n};\nvar faDumpster = {\n prefix: 'fas',\n iconName: 'dumpster',\n icon: [576, 512, [], \"f793\", \"M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faDumpsterFire = {\n prefix: 'fas',\n iconName: 'dumpster-fire',\n icon: [640, 512, [], \"f794\", \"M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z\"]\n};\nvar faDungeon = {\n prefix: 'fas',\n iconName: 'dungeon',\n icon: [512, 512, [], \"f6d9\", \"M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z\"]\n};\nvar faEdit = {\n prefix: 'fas',\n iconName: 'edit',\n icon: [576, 512, [], \"f044\", \"M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z\"]\n};\nvar faEgg = {\n prefix: 'fas',\n iconName: 'egg',\n icon: [384, 512, [], \"f7fb\", \"M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z\"]\n};\nvar faEject = {\n prefix: 'fas',\n iconName: 'eject',\n icon: [448, 512, [], \"f052\", \"M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z\"]\n};\nvar faEllipsisH = {\n prefix: 'fas',\n iconName: 'ellipsis-h',\n icon: [512, 512, [], \"f141\", \"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"]\n};\nvar faEllipsisV = {\n prefix: 'fas',\n iconName: 'ellipsis-v',\n icon: [192, 512, [], \"f142\", \"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z\"]\n};\nvar faEnvelope = {\n prefix: 'fas',\n iconName: 'envelope',\n icon: [512, 512, [], \"f0e0\", \"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"]\n};\nvar faEnvelopeOpen = {\n prefix: 'fas',\n iconName: 'envelope-open',\n icon: [512, 512, [], \"f2b6\", \"M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z\"]\n};\nvar faEnvelopeOpenText = {\n prefix: 'fas',\n iconName: 'envelope-open-text',\n icon: [512, 512, [], \"f658\", \"M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z\"]\n};\nvar faEnvelopeSquare = {\n prefix: 'fas',\n iconName: 'envelope-square',\n icon: [448, 512, [], \"f199\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z\"]\n};\nvar faEquals = {\n prefix: 'fas',\n iconName: 'equals',\n icon: [448, 512, [], \"f52c\", \"M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faEraser = {\n prefix: 'fas',\n iconName: 'eraser',\n icon: [512, 512, [], \"f12d\", \"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"]\n};\nvar faEthernet = {\n prefix: 'fas',\n iconName: 'ethernet',\n icon: [512, 512, [], \"f796\", \"M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z\"]\n};\nvar faEuroSign = {\n prefix: 'fas',\n iconName: 'euro-sign',\n icon: [320, 512, [], \"f153\", \"M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z\"]\n};\nvar faExchangeAlt = {\n prefix: 'fas',\n iconName: 'exchange-alt',\n icon: [512, 512, [], \"f362\", \"M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z\"]\n};\nvar faExclamation = {\n prefix: 'fas',\n iconName: 'exclamation',\n icon: [192, 512, [], \"f12a\", \"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z\"]\n};\nvar faExclamationCircle = {\n prefix: 'fas',\n iconName: 'exclamation-circle',\n icon: [512, 512, [], \"f06a\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExclamationTriangle = {\n prefix: 'fas',\n iconName: 'exclamation-triangle',\n icon: [576, 512, [], \"f071\", \"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"]\n};\nvar faExpand = {\n prefix: 'fas',\n iconName: 'expand',\n icon: [448, 512, [], \"f065\", \"M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z\"]\n};\nvar faExpandArrowsAlt = {\n prefix: 'fas',\n iconName: 'expand-arrows-alt',\n icon: [448, 512, [], \"f31e\", \"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z\"]\n};\nvar faExternalLinkAlt = {\n prefix: 'fas',\n iconName: 'external-link-alt',\n icon: [576, 512, [], \"f35d\", \"M576 24v127.984c0 21.461-25.96 31.98-40.971 16.971l-35.707-35.709-243.523 243.523c-9.373 9.373-24.568 9.373-33.941 0l-22.627-22.627c-9.373-9.373-9.373-24.569 0-33.941L442.756 76.676l-35.703-35.705C391.982 25.9 402.656 0 424.024 0H552c13.255 0 24 10.745 24 24zM407.029 270.794l-16 16A23.999 23.999 0 0 0 384 303.765V448H64V128h264a24.003 24.003 0 0 0 16.97-7.029l16-16C376.089 89.851 365.381 64 344 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V287.764c0-21.382-25.852-32.09-40.971-16.97z\"]\n};\nvar faExternalLinkSquareAlt = {\n prefix: 'fas',\n iconName: 'external-link-square-alt',\n icon: [448, 512, [], \"f360\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z\"]\n};\nvar faEye = {\n prefix: 'fas',\n iconName: 'eye',\n icon: [576, 512, [], \"f06e\", \"M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z\"]\n};\nvar faEyeDropper = {\n prefix: 'fas',\n iconName: 'eye-dropper',\n icon: [512, 512, [], \"f1fb\", \"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z\"]\n};\nvar faEyeSlash = {\n prefix: 'fas',\n iconName: 'eye-slash',\n icon: [640, 512, [], \"f070\", \"M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z\"]\n};\nvar faFan = {\n prefix: 'fas',\n iconName: 'fan',\n icon: [512, 512, [], \"f863\", \"M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faFastBackward = {\n prefix: 'fas',\n iconName: 'fast-backward',\n icon: [512, 512, [], \"f049\", \"M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z\"]\n};\nvar faFastForward = {\n prefix: 'fas',\n iconName: 'fast-forward',\n icon: [512, 512, [], \"f050\", \"M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z\"]\n};\nvar faFax = {\n prefix: 'fas',\n iconName: 'fax',\n icon: [512, 512, [], \"f1ac\", \"M64 128H32c-17.67 0-32 14.33-32 32v320c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zm416 32V77.25c0-8.49-3.37-16.62-9.37-22.63L425.37 9.37c-6-6-14.14-9.37-22.63-9.37H160c-17.67 0-32 14.33-32 32v448c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zM288 432c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm128 128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm0-128c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v32zm16-112H176V48h208v32c0 8.84 7.16 16 16 16h32v96z\"]\n};\nvar faFeather = {\n prefix: 'fas',\n iconName: 'feather',\n icon: [512, 512, [], \"f52d\", \"M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z\"]\n};\nvar faFeatherAlt = {\n prefix: 'fas',\n iconName: 'feather-alt',\n icon: [512, 512, [], \"f56b\", \"M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z\"]\n};\nvar faFemale = {\n prefix: 'fas',\n iconName: 'female',\n icon: [256, 512, [], \"f182\", \"M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z\"]\n};\nvar faFighterJet = {\n prefix: 'fas',\n iconName: 'fighter-jet',\n icon: [640, 512, [], \"f0fb\", \"M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z\"]\n};\nvar faFile = {\n prefix: 'fas',\n iconName: 'file',\n icon: [384, 512, [], \"f15b\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileAlt = {\n prefix: 'fas',\n iconName: 'file-alt',\n icon: [384, 512, [], \"f15c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileArchive = {\n prefix: 'fas',\n iconName: 'file-archive',\n icon: [384, 512, [], \"f1c6\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z\"]\n};\nvar faFileAudio = {\n prefix: 'fas',\n iconName: 'file-audio',\n icon: [384, 512, [], \"f1c7\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileCode = {\n prefix: 'fas',\n iconName: 'file-code',\n icon: [384, 512, [], \"f1c9\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z\"]\n};\nvar faFileContract = {\n prefix: 'fas',\n iconName: 'file-contract',\n icon: [384, 512, [], \"f56c\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileCsv = {\n prefix: 'fas',\n iconName: 'file-csv',\n icon: [384, 512, [], \"f6dd\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileDownload = {\n prefix: 'fas',\n iconName: 'file-download',\n icon: [384, 512, [], \"f56d\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileExcel = {\n prefix: 'fas',\n iconName: 'file-excel',\n icon: [384, 512, [], \"f1c3\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileExport = {\n prefix: 'fas',\n iconName: 'file-export',\n icon: [576, 512, [], \"f56e\", \"M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z\"]\n};\nvar faFileImage = {\n prefix: 'fas',\n iconName: 'file-image',\n icon: [384, 512, [], \"f1c5\", \"M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z\"]\n};\nvar faFileImport = {\n prefix: 'fas',\n iconName: 'file-import',\n icon: [512, 512, [], \"f56f\", \"M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z\"]\n};\nvar faFileInvoice = {\n prefix: 'fas',\n iconName: 'file-invoice',\n icon: [384, 512, [], \"f570\", \"M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z\"]\n};\nvar faFileInvoiceDollar = {\n prefix: 'fas',\n iconName: 'file-invoice-dollar',\n icon: [384, 512, [], \"f571\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z\"]\n};\nvar faFileMedical = {\n prefix: 'fas',\n iconName: 'file-medical',\n icon: [384, 512, [], \"f477\", \"M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z\"]\n};\nvar faFileMedicalAlt = {\n prefix: 'fas',\n iconName: 'file-medical-alt',\n icon: [448, 512, [], \"f478\", \"M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFilePdf = {\n prefix: 'fas',\n iconName: 'file-pdf',\n icon: [384, 512, [], \"f1c1\", \"M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z\"]\n};\nvar faFilePowerpoint = {\n prefix: 'fas',\n iconName: 'file-powerpoint',\n icon: [384, 512, [], \"f1c4\", \"M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z\"]\n};\nvar faFilePrescription = {\n prefix: 'fas',\n iconName: 'file-prescription',\n icon: [384, 512, [], \"f572\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFileSignature = {\n prefix: 'fas',\n iconName: 'file-signature',\n icon: [576, 512, [], \"f573\", \"M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z\"]\n};\nvar faFileUpload = {\n prefix: 'fas',\n iconName: 'file-upload',\n icon: [384, 512, [], \"f574\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"]\n};\nvar faFileVideo = {\n prefix: 'fas',\n iconName: 'file-video',\n icon: [384, 512, [], \"f1c8\", \"M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z\"]\n};\nvar faFileWord = {\n prefix: 'fas',\n iconName: 'file-word',\n icon: [384, 512, [], \"f1c2\", \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"]\n};\nvar faFill = {\n prefix: 'fas',\n iconName: 'fill',\n icon: [512, 512, [], \"f575\", \"M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z\"]\n};\nvar faFillDrip = {\n prefix: 'fas',\n iconName: 'fill-drip',\n icon: [576, 512, [], \"f576\", \"M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z\"]\n};\nvar faFilm = {\n prefix: 'fas',\n iconName: 'film',\n icon: [512, 512, [], \"f008\", \"M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faFilter = {\n prefix: 'fas',\n iconName: 'filter',\n icon: [512, 512, [], \"f0b0\", \"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z\"]\n};\nvar faFingerprint = {\n prefix: 'fas',\n iconName: 'fingerprint',\n icon: [512, 512, [], \"f577\", \"M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z\"]\n};\nvar faFire = {\n prefix: 'fas',\n iconName: 'fire',\n icon: [384, 512, [], \"f06d\", \"M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z\"]\n};\nvar faFireAlt = {\n prefix: 'fas',\n iconName: 'fire-alt',\n icon: [448, 512, [], \"f7e4\", \"M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z\"]\n};\nvar faFireExtinguisher = {\n prefix: 'fas',\n iconName: 'fire-extinguisher',\n icon: [448, 512, [], \"f134\", \"M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z\"]\n};\nvar faFirstAid = {\n prefix: 'fas',\n iconName: 'first-aid',\n icon: [576, 512, [], \"f479\", \"M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faFish = {\n prefix: 'fas',\n iconName: 'fish',\n icon: [576, 512, [], \"f578\", \"M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFistRaised = {\n prefix: 'fas',\n iconName: 'fist-raised',\n icon: [384, 512, [], \"f6de\", \"M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z\"]\n};\nvar faFlag = {\n prefix: 'fas',\n iconName: 'flag',\n icon: [512, 512, [], \"f024\", \"M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z\"]\n};\nvar faFlagCheckered = {\n prefix: 'fas',\n iconName: 'flag-checkered',\n icon: [512, 512, [], \"f11e\", \"M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z\"]\n};\nvar faFlagUsa = {\n prefix: 'fas',\n iconName: 'flag-usa',\n icon: [512, 512, [], \"f74d\", \"M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z\"]\n};\nvar faFlask = {\n prefix: 'fas',\n iconName: 'flask',\n icon: [448, 512, [], \"f0c3\", \"M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z\"]\n};\nvar faFlushed = {\n prefix: 'fas',\n iconName: 'flushed',\n icon: [496, 512, [], \"f579\", \"M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z\"]\n};\nvar faFolder = {\n prefix: 'fas',\n iconName: 'folder',\n icon: [512, 512, [], \"f07b\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z\"]\n};\nvar faFolderMinus = {\n prefix: 'fas',\n iconName: 'folder-minus',\n icon: [512, 512, [], \"f65d\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFolderOpen = {\n prefix: 'fas',\n iconName: 'folder-open',\n icon: [576, 512, [], \"f07c\", \"M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z\"]\n};\nvar faFolderPlus = {\n prefix: 'fas',\n iconName: 'folder-plus',\n icon: [512, 512, [], \"f65e\", \"M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16h-72v72c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-72h-72c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h72v-72c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v72h72c8.84 0 16 7.16 16 16v16z\"]\n};\nvar faFont = {\n prefix: 'fas',\n iconName: 'font',\n icon: [448, 512, [], \"f031\", \"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z\"]\n};\nvar faFontAwesomeLogoFull = {\n prefix: 'fas',\n iconName: 'font-awesome-logo-full',\n icon: [3992, 512, [\"Font Awesome\"], \"f4e6\", \"M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z\"]\n};\nvar faFootballBall = {\n prefix: 'fas',\n iconName: 'football-ball',\n icon: [496, 512, [], \"f44e\", \"M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z\"]\n};\nvar faForward = {\n prefix: 'fas',\n iconName: 'forward',\n icon: [512, 512, [], \"f04e\", \"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"]\n};\nvar faFrog = {\n prefix: 'fas',\n iconName: 'frog',\n icon: [576, 512, [], \"f52e\", \"M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z\"]\n};\nvar faFrown = {\n prefix: 'fas',\n iconName: 'frown',\n icon: [496, 512, [], \"f119\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z\"]\n};\nvar faFrownOpen = {\n prefix: 'fas',\n iconName: 'frown-open',\n icon: [496, 512, [], \"f57a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faFunnelDollar = {\n prefix: 'fas',\n iconName: 'funnel-dollar',\n icon: [640, 512, [], \"f662\", \"M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z\"]\n};\nvar faFutbol = {\n prefix: 'fas',\n iconName: 'futbol',\n icon: [512, 512, [], \"f1e3\", \"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z\"]\n};\nvar faGamepad = {\n prefix: 'fas',\n iconName: 'gamepad',\n icon: [640, 512, [], \"f11b\", \"M480 96H160C71.6 96 0 167.6 0 256s71.6 160 160 160c44.8 0 85.2-18.4 114.2-48h91.5c29 29.6 69.5 48 114.2 48 88.4 0 160-71.6 160-160S568.4 96 480 96zM256 276c0 6.6-5.4 12-12 12h-52v52c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-52H76c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h52v-52c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h52c6.6 0 12 5.4 12 12v40zm184 68c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-80c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faGasPump = {\n prefix: 'fas',\n iconName: 'gas-pump',\n icon: [512, 512, [], \"f52f\", \"M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z\"]\n};\nvar faGavel = {\n prefix: 'fas',\n iconName: 'gavel',\n icon: [512, 512, [], \"f0e3\", \"M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z\"]\n};\nvar faGem = {\n prefix: 'fas',\n iconName: 'gem',\n icon: [576, 512, [], \"f3a5\", \"M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z\"]\n};\nvar faGenderless = {\n prefix: 'fas',\n iconName: 'genderless',\n icon: [288, 512, [], \"f22d\", \"M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z\"]\n};\nvar faGhost = {\n prefix: 'fas',\n iconName: 'ghost',\n icon: [384, 512, [], \"f6e2\", \"M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faGift = {\n prefix: 'fas',\n iconName: 'gift',\n icon: [512, 512, [], \"f06b\", \"M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z\"]\n};\nvar faGifts = {\n prefix: 'fas',\n iconName: 'gifts',\n icon: [640, 512, [], \"f79c\", \"M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z\"]\n};\nvar faGlassCheers = {\n prefix: 'fas',\n iconName: 'glass-cheers',\n icon: [640, 512, [], \"f79f\", \"M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z\"]\n};\nvar faGlassMartini = {\n prefix: 'fas',\n iconName: 'glass-martini',\n icon: [512, 512, [], \"f000\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z\"]\n};\nvar faGlassMartiniAlt = {\n prefix: 'fas',\n iconName: 'glass-martini-alt',\n icon: [512, 512, [], \"f57b\", \"M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z\"]\n};\nvar faGlassWhiskey = {\n prefix: 'fas',\n iconName: 'glass-whiskey',\n icon: [512, 512, [], \"f7a0\", \"M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z\"]\n};\nvar faGlasses = {\n prefix: 'fas',\n iconName: 'glasses',\n icon: [576, 512, [], \"f530\", \"M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z\"]\n};\nvar faGlobe = {\n prefix: 'fas',\n iconName: 'globe',\n icon: [496, 512, [], \"f0ac\", \"M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z\"]\n};\nvar faGlobeAfrica = {\n prefix: 'fas',\n iconName: 'globe-africa',\n icon: [496, 512, [], \"f57c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z\"]\n};\nvar faGlobeAmericas = {\n prefix: 'fas',\n iconName: 'globe-americas',\n icon: [496, 512, [], \"f57d\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z\"]\n};\nvar faGlobeAsia = {\n prefix: 'fas',\n iconName: 'globe-asia',\n icon: [496, 512, [], \"f57e\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z\"]\n};\nvar faGlobeEurope = {\n prefix: 'fas',\n iconName: 'globe-europe',\n icon: [496, 512, [], \"f7a2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z\"]\n};\nvar faGolfBall = {\n prefix: 'fas',\n iconName: 'golf-ball',\n icon: [416, 512, [], \"f450\", \"M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z\"]\n};\nvar faGopuram = {\n prefix: 'fas',\n iconName: 'gopuram',\n icon: [512, 512, [], \"f664\", \"M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z\"]\n};\nvar faGraduationCap = {\n prefix: 'fas',\n iconName: 'graduation-cap',\n icon: [640, 512, [], \"f19d\", \"M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z\"]\n};\nvar faGreaterThan = {\n prefix: 'fas',\n iconName: 'greater-than',\n icon: [384, 512, [], \"f531\", \"M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z\"]\n};\nvar faGreaterThanEqual = {\n prefix: 'fas',\n iconName: 'greater-than-equal',\n icon: [448, 512, [], \"f532\", \"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faGrimace = {\n prefix: 'fas',\n iconName: 'grimace',\n icon: [496, 512, [], \"f57f\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z\"]\n};\nvar faGrin = {\n prefix: 'fas',\n iconName: 'grin',\n icon: [496, 512, [], \"f580\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinAlt = {\n prefix: 'fas',\n iconName: 'grin-alt',\n icon: [496, 512, [], \"f581\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeam = {\n prefix: 'fas',\n iconName: 'grin-beam',\n icon: [496, 512, [], \"f582\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinBeamSweat = {\n prefix: 'fas',\n iconName: 'grin-beam-sweat',\n icon: [504, 512, [], \"f583\", \"M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinHearts = {\n prefix: 'fas',\n iconName: 'grin-hearts',\n icon: [496, 512, [], \"f584\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z\"]\n};\nvar faGrinSquint = {\n prefix: 'fas',\n iconName: 'grin-squint',\n icon: [496, 512, [], \"f585\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinSquintTears = {\n prefix: 'fas',\n iconName: 'grin-squint-tears',\n icon: [512, 512, [], \"f586\", \"M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z\"]\n};\nvar faGrinStars = {\n prefix: 'fas',\n iconName: 'grin-stars',\n icon: [496, 512, [], \"f587\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z\"]\n};\nvar faGrinTears = {\n prefix: 'fas',\n iconName: 'grin-tears',\n icon: [640, 512, [], \"f588\", \"M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z\"]\n};\nvar faGrinTongue = {\n prefix: 'fas',\n iconName: 'grin-tongue',\n icon: [496, 512, [], \"f589\", \"M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinTongueSquint = {\n prefix: 'fas',\n iconName: 'grin-tongue-squint',\n icon: [496, 512, [], \"f58a\", \"M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z\"]\n};\nvar faGrinTongueWink = {\n prefix: 'fas',\n iconName: 'grin-tongue-wink',\n icon: [496, 512, [], \"f58b\", \"M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z\"]\n};\nvar faGrinWink = {\n prefix: 'fas',\n iconName: 'grin-wink',\n icon: [496, 512, [], \"f58c\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z\"]\n};\nvar faGripHorizontal = {\n prefix: 'fas',\n iconName: 'grip-horizontal',\n icon: [448, 512, [], \"f58d\", \"M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGripLines = {\n prefix: 'fas',\n iconName: 'grip-lines',\n icon: [512, 512, [], \"f7a4\", \"M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z\"]\n};\nvar faGripLinesVertical = {\n prefix: 'fas',\n iconName: 'grip-lines-vertical',\n icon: [256, 512, [], \"f7a5\", \"M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z\"]\n};\nvar faGripVertical = {\n prefix: 'fas',\n iconName: 'grip-vertical',\n icon: [320, 512, [], \"f58e\", \"M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z\"]\n};\nvar faGuitar = {\n prefix: 'fas',\n iconName: 'guitar',\n icon: [512, 512, [], \"f7a6\", \"M502.6 54.6L457.4 9.4c-12.5-12.5-32.8-12.5-45.3 0l-67.9 67.9c-12.5 12.5-12.5 32.8 0 45.3L290 176.7c-45.4-29-100.4-28.9-133.5 4.2-9.7 9.7-16.4 21.2-20.5 33.9-6.1 18.8-23.5 33.1-42.7 34.9-24 2.3-46.3 11.6-63.4 28.8C-16.3 324.6-8 407.6 48.2 463.8c56.2 56.2 139.2 64.4 185.3 18.3 17.2-17.1 26.5-39.4 28.8-63.5 1.8-19.1 16.1-36.6 34.9-42.7 12.7-4.1 24.2-10.8 33.9-20.5 33.1-33.1 33.1-88.1 4.2-133.5l54.2-54.2c12.5 12.5 32.8 12.5 45.3 0l67.9-67.9c12.4-12.4 12.4-32.7-.1-45.2zM208 352c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faHSquare = {\n prefix: 'fas',\n iconName: 'h-square',\n icon: [448, 512, [], \"f0fd\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z\"]\n};\nvar faHamburger = {\n prefix: 'fas',\n iconName: 'hamburger',\n icon: [512, 512, [], \"f805\", \"M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z\"]\n};\nvar faHammer = {\n prefix: 'fas',\n iconName: 'hammer',\n icon: [576, 512, [], \"f6e3\", \"M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z\"]\n};\nvar faHamsa = {\n prefix: 'fas',\n iconName: 'hamsa',\n icon: [512, 512, [], \"f665\", \"M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faHandHolding = {\n prefix: 'fas',\n iconName: 'hand-holding',\n icon: [576, 512, [], \"f4bd\", \"M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingHeart = {\n prefix: 'fas',\n iconName: 'hand-holding-heart',\n icon: [576, 512, [], \"f4be\", \"M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z\"]\n};\nvar faHandHoldingUsd = {\n prefix: 'fas',\n iconName: 'hand-holding-usd',\n icon: [544, 512, [], \"f4c0\", \"M257.6 144.3l50 14.3c3.6 1 6.1 4.4 6.1 8.1 0 4.6-3.8 8.4-8.4 8.4h-32.8c-3.6 0-7.1-.8-10.3-2.2-4.8-2.2-10.4-1.7-14.1 2l-17.5 17.5c-5.3 5.3-4.7 14.3 1.5 18.4 9.5 6.3 20.3 10.1 31.8 11.5V240c0 8.8 7.2 16 16 16h16c8.8 0 16-7.2 16-16v-17.6c30.3-3.6 53.3-31 49.3-63-2.9-23-20.7-41.3-42.9-47.7l-50-14.3c-3.6-1-6.1-4.4-6.1-8.1 0-4.6 3.8-8.4 8.4-8.4h32.8c3.6 0 7.1.8 10.3 2.2 4.8 2.2 10.4 1.7 14.1-2l17.5-17.5c5.3-5.3 4.7-14.3-1.5-18.4-9.5-6.3-20.3-10.1-31.8-11.5V16c0-8.8-7.2-16-16-16h-16c-8.8 0-16 7.2-16 16v17.6c-30.3 3.6-53.3 31-49.3 63 2.9 23 20.7 41.3 42.9 47.7zm276.3 183.8c-11.2-10.7-28.5-10-40.3 0L406.4 402c-10.7 9.1-24 14-37.8 14H256.9c-8.3 0-15.1-7.2-15.1-16s6.8-16 15.1-16h73.9c15.1 0 29-10.9 31.4-26.6 3.1-20-11.5-37.4-29.8-37.4H181.3c-25.5 0-50.2 9.3-69.9 26.3L67.5 384H15.1C6.8 384 0 391.2 0 400v96c0 8.8 6.8 16 15.1 16H352c13.7 0 27-4.9 37.8-14l142.8-121c14.4-12.1 15.5-35.3 1.3-48.9z\"]\n};\nvar faHandLizard = {\n prefix: 'fas',\n iconName: 'hand-lizard',\n icon: [576, 512, [], \"f258\", \"M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z\"]\n};\nvar faHandMiddleFinger = {\n prefix: 'fas',\n iconName: 'hand-middle-finger',\n icon: [512, 512, [], \"f806\", \"M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z\"]\n};\nvar faHandPaper = {\n prefix: 'fas',\n iconName: 'hand-paper',\n icon: [448, 512, [], \"f256\", \"M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z\"]\n};\nvar faHandPeace = {\n prefix: 'fas',\n iconName: 'hand-peace',\n icon: [448, 512, [], \"f25b\", \"M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z\"]\n};\nvar faHandPointDown = {\n prefix: 'fas',\n iconName: 'hand-point-down',\n icon: [384, 512, [], \"f0a7\", \"M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointLeft = {\n prefix: 'fas',\n iconName: 'hand-point-left',\n icon: [512, 512, [], \"f0a5\", \"M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z\"]\n};\nvar faHandPointRight = {\n prefix: 'fas',\n iconName: 'hand-point-right',\n icon: [512, 512, [], \"f0a4\", \"M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z\"]\n};\nvar faHandPointUp = {\n prefix: 'fas',\n iconName: 'hand-point-up',\n icon: [384, 512, [], \"f0a6\", \"M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z\"]\n};\nvar faHandPointer = {\n prefix: 'fas',\n iconName: 'hand-pointer',\n icon: [448, 512, [], \"f25a\", \"M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z\"]\n};\nvar faHandRock = {\n prefix: 'fas',\n iconName: 'hand-rock',\n icon: [512, 512, [], \"f255\", \"M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z\"]\n};\nvar faHandScissors = {\n prefix: 'fas',\n iconName: 'hand-scissors',\n icon: [512, 512, [], \"f257\", \"M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z\"]\n};\nvar faHandSpock = {\n prefix: 'fas',\n iconName: 'hand-spock',\n icon: [512, 512, [], \"f259\", \"M481.3 97.1c-21.5-5.1-43.1 8.2-48.2 29.6L402.3 256h-11.1l43.6-174.3c5.4-21.4-7.7-43.1-29.1-48.5s-43.1 7.7-48.5 29.1L308.8 256h-15.1L242 31.1c-5-21.6-26.4-35-48-30.1-21.5 4.9-35 26.4-30 47.9l47.6 207h-9.8L167 103.1c-4.9-21.5-26.3-35-47.9-30.1-21.5 4.9-35 26.3-30.1 47.9l39 171.6v79.4l-60.6-57c-16.1-15.1-41.4-14.4-56.5 1.7s-14.4 41.4 1.7 56.5L146.3 499c8.9 8.4 20.7 13 32.9 13h216.7c21.3 0 40-14 46-34.4l26.2-88.3c2.6-8.9 4-18 4-27.3v-42c0-7.5.9-15 2.6-22.2L511 145.3c5-21.5-8.3-43.1-29.7-48.2z\"]\n};\nvar faHands = {\n prefix: 'fas',\n iconName: 'hands',\n icon: [640, 512, [], \"f4c2\", \"M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z\"]\n};\nvar faHandsHelping = {\n prefix: 'fas',\n iconName: 'hands-helping',\n icon: [640, 512, [], \"f4c4\", \"M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z\"]\n};\nvar faHandshake = {\n prefix: 'fas',\n iconName: 'handshake',\n icon: [640, 512, [], \"f2b5\", \"M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z\"]\n};\nvar faHanukiah = {\n prefix: 'fas',\n iconName: 'hanukiah',\n icon: [640, 512, [], \"f6e6\", \"M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z\"]\n};\nvar faHardHat = {\n prefix: 'fas',\n iconName: 'hard-hat',\n icon: [512, 512, [], \"f807\", \"M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faHashtag = {\n prefix: 'fas',\n iconName: 'hashtag',\n icon: [448, 512, [], \"f292\", \"M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z\"]\n};\nvar faHatWizard = {\n prefix: 'fas',\n iconName: 'hat-wizard',\n icon: [512, 512, [], \"f6e8\", \"M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z\"]\n};\nvar faHaykal = {\n prefix: 'fas',\n iconName: 'haykal',\n icon: [512, 512, [], \"f666\", \"M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z\"]\n};\nvar faHdd = {\n prefix: 'fas',\n iconName: 'hdd',\n icon: [576, 512, [], \"f0a0\", \"M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z\"]\n};\nvar faHeading = {\n prefix: 'fas',\n iconName: 'heading',\n icon: [512, 512, [], \"f1dc\", \"M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z\"]\n};\nvar faHeadphones = {\n prefix: 'fas',\n iconName: 'headphones',\n icon: [512, 512, [], \"f025\", \"M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z\"]\n};\nvar faHeadphonesAlt = {\n prefix: 'fas',\n iconName: 'headphones-alt',\n icon: [512, 512, [], \"f58f\", \"M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z\"]\n};\nvar faHeadset = {\n prefix: 'fas',\n iconName: 'headset',\n icon: [512, 512, [], \"f590\", \"M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z\"]\n};\nvar faHeart = {\n prefix: 'fas',\n iconName: 'heart',\n icon: [512, 512, [], \"f004\", \"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"]\n};\nvar faHeartBroken = {\n prefix: 'fas',\n iconName: 'heart-broken',\n icon: [512, 512, [], \"f7a9\", \"M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHeartbeat = {\n prefix: 'fas',\n iconName: 'heartbeat',\n icon: [512, 512, [], \"f21e\", \"M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z\"]\n};\nvar faHelicopter = {\n prefix: 'fas',\n iconName: 'helicopter',\n icon: [640, 512, [], \"f533\", \"M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z\"]\n};\nvar faHighlighter = {\n prefix: 'fas',\n iconName: 'highlighter',\n icon: [544, 512, [], \"f591\", \"M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z\"]\n};\nvar faHiking = {\n prefix: 'fas',\n iconName: 'hiking',\n icon: [384, 512, [], \"f6ec\", \"M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z\"]\n};\nvar faHippo = {\n prefix: 'fas',\n iconName: 'hippo',\n icon: [640, 512, [], \"f6ed\", \"M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHistory = {\n prefix: 'fas',\n iconName: 'history',\n icon: [512, 512, [], \"f1da\", \"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z\"]\n};\nvar faHockeyPuck = {\n prefix: 'fas',\n iconName: 'hockey-puck',\n icon: [512, 512, [], \"f453\", \"M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z\"]\n};\nvar faHollyBerry = {\n prefix: 'fas',\n iconName: 'holly-berry',\n icon: [448, 512, [], \"f7aa\", \"M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z\"]\n};\nvar faHome = {\n prefix: 'fas',\n iconName: 'home',\n icon: [576, 512, [], \"f015\", \"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"]\n};\nvar faHorse = {\n prefix: 'fas',\n iconName: 'horse',\n icon: [576, 512, [], \"f6f0\", \"M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z\"]\n};\nvar faHorseHead = {\n prefix: 'fas',\n iconName: 'horse-head',\n icon: [512, 512, [], \"f7ab\", \"M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z\"]\n};\nvar faHospital = {\n prefix: 'fas',\n iconName: 'hospital',\n icon: [448, 512, [], \"f0f8\", \"M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z\"]\n};\nvar faHospitalAlt = {\n prefix: 'fas',\n iconName: 'hospital-alt',\n icon: [576, 512, [], \"f47d\", \"M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z\"]\n};\nvar faHospitalSymbol = {\n prefix: 'fas',\n iconName: 'hospital-symbol',\n icon: [512, 512, [], \"f47e\", \"M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z\"]\n};\nvar faHotTub = {\n prefix: 'fas',\n iconName: 'hot-tub',\n icon: [512, 512, [], \"f593\", \"M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z\"]\n};\nvar faHotdog = {\n prefix: 'fas',\n iconName: 'hotdog',\n icon: [512, 512, [], \"f80f\", \"M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z\"]\n};\nvar faHotel = {\n prefix: 'fas',\n iconName: 'hotel',\n icon: [576, 512, [], \"f594\", \"M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faHourglass = {\n prefix: 'fas',\n iconName: 'hourglass',\n icon: [384, 512, [], \"f254\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z\"]\n};\nvar faHourglassEnd = {\n prefix: 'fas',\n iconName: 'hourglass-end',\n icon: [384, 512, [], \"f253\", \"M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z\"]\n};\nvar faHourglassHalf = {\n prefix: 'fas',\n iconName: 'hourglass-half',\n icon: [384, 512, [], \"f252\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z\"]\n};\nvar faHourglassStart = {\n prefix: 'fas',\n iconName: 'hourglass-start',\n icon: [384, 512, [], \"f251\", \"M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z\"]\n};\nvar faHouseDamage = {\n prefix: 'fas',\n iconName: 'house-damage',\n icon: [576, 512, [], \"f6f1\", \"M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z\"]\n};\nvar faHryvnia = {\n prefix: 'fas',\n iconName: 'hryvnia',\n icon: [384, 512, [], \"f6f2\", \"M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z\"]\n};\nvar faICursor = {\n prefix: 'fas',\n iconName: 'i-cursor',\n icon: [256, 512, [], \"f246\", \"M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z\"]\n};\nvar faIceCream = {\n prefix: 'fas',\n iconName: 'ice-cream',\n icon: [448, 512, [], \"f810\", \"M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z\"]\n};\nvar faIcicles = {\n prefix: 'fas',\n iconName: 'icicles',\n icon: [512, 512, [], \"f7ad\", \"M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z\"]\n};\nvar faIcons = {\n prefix: 'fas',\n iconName: 'icons',\n icon: [512, 512, [], \"f86d\", \"M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z\"]\n};\nvar faIdBadge = {\n prefix: 'fas',\n iconName: 'id-badge',\n icon: [384, 512, [], \"f2c1\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faIdCard = {\n prefix: 'fas',\n iconName: 'id-card',\n icon: [576, 512, [], \"f2c2\", \"M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z\"]\n};\nvar faIdCardAlt = {\n prefix: 'fas',\n iconName: 'id-card-alt',\n icon: [576, 512, [], \"f47f\", \"M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z\"]\n};\nvar faIgloo = {\n prefix: 'fas',\n iconName: 'igloo',\n icon: [576, 512, [], \"f7ae\", \"M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z\"]\n};\nvar faImage = {\n prefix: 'fas',\n iconName: 'image',\n icon: [512, 512, [], \"f03e\", \"M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z\"]\n};\nvar faImages = {\n prefix: 'fas',\n iconName: 'images',\n icon: [576, 512, [], \"f302\", \"M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z\"]\n};\nvar faInbox = {\n prefix: 'fas',\n iconName: 'inbox',\n icon: [576, 512, [], \"f01c\", \"M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z\"]\n};\nvar faIndent = {\n prefix: 'fas',\n iconName: 'indent',\n icon: [448, 512, [], \"f03c\", \"M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faIndustry = {\n prefix: 'fas',\n iconName: 'industry',\n icon: [512, 512, [], \"f275\", \"M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z\"]\n};\nvar faInfinity = {\n prefix: 'fas',\n iconName: 'infinity',\n icon: [640, 512, [], \"f534\", \"M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z\"]\n};\nvar faInfo = {\n prefix: 'fas',\n iconName: 'info',\n icon: [192, 512, [], \"f129\", \"M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z\"]\n};\nvar faInfoCircle = {\n prefix: 'fas',\n iconName: 'info-circle',\n icon: [512, 512, [], \"f05a\", \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"]\n};\nvar faItalic = {\n prefix: 'fas',\n iconName: 'italic',\n icon: [320, 512, [], \"f033\", \"M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z\"]\n};\nvar faJedi = {\n prefix: 'fas',\n iconName: 'jedi',\n icon: [544, 512, [], \"f669\", \"M479.99 352l58.88-58.87c3.29-16.8 5.13-34.12 5.13-51.86 0-5.81-.68-11.51-1.05-17.27H496l41.25-41.24c-14.5-64.79-52.43-123.05-107.91-162.27-2.77-1.96-5.97-2.99-9.25-2.99-5.37 0-10.41 2.71-13.49 7.24-3.05 4.49-3.64 9.99-1.61 15.09 6.55 16.46 9.86 33.73 9.86 51.31 0 45.12-21.03 86.57-57.69 113.73-4.02 2.98-6.46 7.5-6.7 12.4-.24 4.92 1.76 9.66 5.49 13.03 32.93 29.75 47.35 73.51 38.57 117.07-9.74 48.35-48.84 87.1-97.31 96.5l-2.5-65.34L321.88 397c2.98 2.06 7.39 1.69 10.02-.8a8.002 8.002 0 0 0 1.34-9.92l-20.11-33.73 42.07-8.72c3.7-.75 6.38-4.05 6.38-7.83 0-3.77-2.69-7.06-6.38-7.83l-42.07-8.73 20.13-33.77c1.92-3.23 1.34-7.31-1.38-9.91-2.7-2.55-6.97-2.89-10-.8l-30.39 20.67L279.96 7.7a7.964 7.964 0 0 0-8-7.7c-4.33 0-7.84 3.38-8 7.67l-11.52 287.97-30.39-20.66c-3.14-2.12-7.27-1.83-10 .78-2.72 2.59-3.3 6.67-1.36 9.94l20.11 33.73-42.07 8.73c-3.7.75-6.38 4.05-6.38 7.83s2.67 7.08 6.38 7.83l42.07 8.72-20.13 33.77c-1.92 3.23-1.34 7.33 1.39 9.94 2.59 2.45 7.03 2.75 10 .75l27.16-18.48-2.5 65.26c-56.94-11.64-99.89-61.89-99.89-121.92 0-35.08 14.62-67.6 41.17-91.58 3.72-3.36 5.72-8.11 5.48-13.01-.24-4.9-2.68-9.41-6.69-12.38-36.67-27.16-57.71-68.62-57.71-113.74 0-17.56 3.31-34.81 9.84-51.26 2.02-5.09 1.43-10.59-1.62-15.09-3.08-4.54-8.13-7.25-13.51-7.25-3.3 0-6.5 1.04-9.27 3-55.87 39.52-93.6 97.37-107.97 162.07L47.93 224H.72c-.63 9.92-.97 19.91-.5 29.99.62 13.43 2.54 26.53 5.11 39.41l58.6 58.6H24.02c41.25 90.23 131.13 154.94 235.1 159.71 4.3.2 8.59.29 12.85.29 110.34 0 205.35-65.83 247.98-160h-39.96z\"]\n};\nvar faJoint = {\n prefix: 'fas',\n iconName: 'joint',\n icon: [640, 512, [], \"f595\", \"M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z\"]\n};\nvar faJournalWhills = {\n prefix: 'fas',\n iconName: 'journal-whills',\n icon: [448, 512, [], \"f66a\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM133.08 144.39l21.26 21.26c1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34c3.12-3.12 3.12-8.19 0-11.31l-26.42-26.42c10-20.9 26.24-37.97 46.37-49.26C179.62 88.4 176 99.74 176 112c0 19.96 9.33 37.57 23.66 49.31C190.01 171.37 184 184.96 184 200c0 26.94 19.04 49.4 44.38 54.76l1.36-32.71-10.37 7.04c-.69.45-1.47.69-2.25.69-1 0-1.98-.38-2.75-1.09a4.006 4.006 0 0 1-.69-4.95l8.54-14.31-17.91-3.72c-1.86-.39-3.19-2.03-3.19-3.92s1.33-3.53 3.19-3.92l17.91-3.72-8.54-14.31c-.95-1.61-.67-3.67.69-4.95 1.36-1.3 3.44-1.44 5-.41l12.01 8.16L236 71.83c.09-2.14 1.86-3.83 4-3.83s3.91 1.69 4 3.83l4.68 112.29 14.2-9.65a4.067 4.067 0 0 1 5 .41 4.006 4.006 0 0 1 .69 4.95l-8.54 14.31 17.91 3.72c1.86.39 3.19 2.03 3.19 3.92s-1.33 3.53-3.19 3.92l-17.91 3.72 8.54 14.31c.95 1.61.67 3.67-.69 4.95-.77.72-1.77 1.09-2.75 1.09-.78 0-1.56-.23-2.25-.69l-12.68-8.62 1.43 34.28C276.96 249.4 296 226.94 296 200c0-15.04-6.01-28.63-15.66-38.69C294.67 149.57 304 131.96 304 112c0-12.26-3.62-23.6-9.6-33.33 20.13 11.28 36.37 28.36 46.37 49.26l-26.42 26.42c-3.12 3.12-3.12 8.19 0 11.31 1.56 1.56 3.61 2.34 5.66 2.34s4.09-.78 5.66-2.34l21.26-21.26c2.97 10.08 5.07 20.55 5.07 31.6 0 .52-.14.99-.15 1.51l-37.11 32.47a7.975 7.975 0 0 0-.75 11.28 7.97 7.97 0 0 0 6.02 2.73c1.88 0 3.75-.66 5.27-1.98l23.59-20.64C337.32 250.96 293.09 288 240 288s-97.32-37.04-108.86-86.62l23.59 20.64A7.957 7.957 0 0 0 160 224c2.22 0 4.44-.92 6.02-2.73 2.92-3.33 2.58-8.38-.75-11.28l-37.11-32.47c-.01-.52-.15-.99-.15-1.51-.01-11.06 2.09-21.53 5.07-31.62zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faKaaba = {\n prefix: 'fas',\n iconName: 'kaaba',\n icon: [576, 512, [], \"f66b\", \"M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z\"]\n};\nvar faKey = {\n prefix: 'fas',\n iconName: 'key',\n icon: [512, 512, [], \"f084\", \"M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z\"]\n};\nvar faKeyboard = {\n prefix: 'fas',\n iconName: 'keyboard',\n icon: [576, 512, [], \"f11c\", \"M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faKhanda = {\n prefix: 'fas',\n iconName: 'khanda',\n icon: [512, 512, [], \"f66d\", \"M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z\"]\n};\nvar faKiss = {\n prefix: 'fas',\n iconName: 'kiss',\n icon: [496, 512, [], \"f596\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faKissBeam = {\n prefix: 'fas',\n iconName: 'kiss-beam',\n icon: [496, 512, [], \"f597\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z\"]\n};\nvar faKissWinkHeart = {\n prefix: 'fas',\n iconName: 'kiss-wink-heart',\n icon: [504, 512, [], \"f598\", \"M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z\"]\n};\nvar faKiwiBird = {\n prefix: 'fas',\n iconName: 'kiwi-bird',\n icon: [576, 512, [], \"f535\", \"M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z\"]\n};\nvar faLandmark = {\n prefix: 'fas',\n iconName: 'landmark',\n icon: [512, 512, [], \"f66f\", \"M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faLanguage = {\n prefix: 'fas',\n iconName: 'language',\n icon: [640, 512, [], \"f1ab\", \"M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z\"]\n};\nvar faLaptop = {\n prefix: 'fas',\n iconName: 'laptop',\n icon: [640, 512, [], \"f109\", \"M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopCode = {\n prefix: 'fas',\n iconName: 'laptop-code',\n icon: [640, 512, [], \"f5fc\", \"M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z\"]\n};\nvar faLaptopMedical = {\n prefix: 'fas',\n iconName: 'laptop-medical',\n icon: [640, 512, [], \"f812\", \"M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z\"]\n};\nvar faLaugh = {\n prefix: 'fas',\n iconName: 'laugh',\n icon: [496, 512, [], \"f599\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z\"]\n};\nvar faLaughBeam = {\n prefix: 'fas',\n iconName: 'laugh-beam',\n icon: [496, 512, [], \"f59a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughSquint = {\n prefix: 'fas',\n iconName: 'laugh-squint',\n icon: [496, 512, [], \"f59b\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLaughWink = {\n prefix: 'fas',\n iconName: 'laugh-wink',\n icon: [496, 512, [], \"f59c\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z\"]\n};\nvar faLayerGroup = {\n prefix: 'fas',\n iconName: 'layer-group',\n icon: [512, 512, [], \"f5fd\", \"M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z\"]\n};\nvar faLeaf = {\n prefix: 'fas',\n iconName: 'leaf',\n icon: [576, 512, [], \"f06c\", \"M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z\"]\n};\nvar faLemon = {\n prefix: 'fas',\n iconName: 'lemon',\n icon: [512, 512, [], \"f094\", \"M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z\"]\n};\nvar faLessThan = {\n prefix: 'fas',\n iconName: 'less-than',\n icon: [384, 512, [], \"f536\", \"M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z\"]\n};\nvar faLessThanEqual = {\n prefix: 'fas',\n iconName: 'less-than-equal',\n icon: [448, 512, [], \"f537\", \"M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"]\n};\nvar faLevelDownAlt = {\n prefix: 'fas',\n iconName: 'level-down-alt',\n icon: [320, 512, [], \"f3be\", \"M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z\"]\n};\nvar faLevelUpAlt = {\n prefix: 'fas',\n iconName: 'level-up-alt',\n icon: [320, 512, [], \"f3bf\", \"M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z\"]\n};\nvar faLifeRing = {\n prefix: 'fas',\n iconName: 'life-ring',\n icon: [512, 512, [], \"f1cd\", \"M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z\"]\n};\nvar faLightbulb = {\n prefix: 'fas',\n iconName: 'lightbulb',\n icon: [352, 512, [], \"f0eb\", \"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faLink = {\n prefix: 'fas',\n iconName: 'link',\n icon: [512, 512, [], \"f0c1\", \"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z\"]\n};\nvar faLiraSign = {\n prefix: 'fas',\n iconName: 'lira-sign',\n icon: [384, 512, [], \"f195\", \"M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z\"]\n};\nvar faList = {\n prefix: 'fas',\n iconName: 'list',\n icon: [512, 512, [], \"f03a\", \"M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faListAlt = {\n prefix: 'fas',\n iconName: 'list-alt',\n icon: [512, 512, [], \"f022\", \"M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z\"]\n};\nvar faListOl = {\n prefix: 'fas',\n iconName: 'list-ol',\n icon: [512, 512, [], \"f0cb\", \"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"]\n};\nvar faListUl = {\n prefix: 'fas',\n iconName: 'list-ul',\n icon: [512, 512, [], \"f0ca\", \"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faLocationArrow = {\n prefix: 'fas',\n iconName: 'location-arrow',\n icon: [512, 512, [], \"f124\", \"M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z\"]\n};\nvar faLock = {\n prefix: 'fas',\n iconName: 'lock',\n icon: [448, 512, [], \"f023\", \"M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z\"]\n};\nvar faLockOpen = {\n prefix: 'fas',\n iconName: 'lock-open',\n icon: [576, 512, [], \"f3c1\", \"M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z\"]\n};\nvar faLongArrowAltDown = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-down',\n icon: [256, 512, [], \"f309\", \"M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z\"]\n};\nvar faLongArrowAltLeft = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-left',\n icon: [448, 512, [], \"f30a\", \"M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z\"]\n};\nvar faLongArrowAltRight = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-right',\n icon: [448, 512, [], \"f30b\", \"M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z\"]\n};\nvar faLongArrowAltUp = {\n prefix: 'fas',\n iconName: 'long-arrow-alt-up',\n icon: [256, 512, [], \"f30c\", \"M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z\"]\n};\nvar faLowVision = {\n prefix: 'fas',\n iconName: 'low-vision',\n icon: [576, 512, [], \"f2a8\", \"M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z\"]\n};\nvar faLuggageCart = {\n prefix: 'fas',\n iconName: 'luggage-cart',\n icon: [640, 512, [], \"f59d\", \"M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z\"]\n};\nvar faMagic = {\n prefix: 'fas',\n iconName: 'magic',\n icon: [512, 512, [], \"f0d0\", \"M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z\"]\n};\nvar faMagnet = {\n prefix: 'fas',\n iconName: 'magnet',\n icon: [512, 512, [], \"f076\", \"M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z\"]\n};\nvar faMailBulk = {\n prefix: 'fas',\n iconName: 'mail-bulk',\n icon: [576, 512, [], \"f674\", \"M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z\"]\n};\nvar faMale = {\n prefix: 'fas',\n iconName: 'male',\n icon: [192, 512, [], \"f183\", \"M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z\"]\n};\nvar faMap = {\n prefix: 'fas',\n iconName: 'map',\n icon: [576, 512, [], \"f279\", \"M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarked = {\n prefix: 'fas',\n iconName: 'map-marked',\n icon: [576, 512, [], \"f59f\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarkedAlt = {\n prefix: 'fas',\n iconName: 'map-marked-alt',\n icon: [576, 512, [], \"f5a0\", \"M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z\"]\n};\nvar faMapMarker = {\n prefix: 'fas',\n iconName: 'map-marker',\n icon: [384, 512, [], \"f041\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z\"]\n};\nvar faMapMarkerAlt = {\n prefix: 'fas',\n iconName: 'map-marker-alt',\n icon: [384, 512, [], \"f3c5\", \"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"]\n};\nvar faMapPin = {\n prefix: 'fas',\n iconName: 'map-pin',\n icon: [288, 512, [], \"f276\", \"M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z\"]\n};\nvar faMapSigns = {\n prefix: 'fas',\n iconName: 'map-signs',\n icon: [512, 512, [], \"f277\", \"M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z\"]\n};\nvar faMarker = {\n prefix: 'fas',\n iconName: 'marker',\n icon: [512, 512, [], \"f5a1\", \"M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z\"]\n};\nvar faMars = {\n prefix: 'fas',\n iconName: 'mars',\n icon: [384, 512, [], \"f222\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsDouble = {\n prefix: 'fas',\n iconName: 'mars-double',\n icon: [512, 512, [], \"f227\", \"M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z\"]\n};\nvar faMarsStroke = {\n prefix: 'fas',\n iconName: 'mars-stroke',\n icon: [384, 512, [], \"f229\", \"M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faMarsStrokeH = {\n prefix: 'fas',\n iconName: 'mars-stroke-h',\n icon: [480, 512, [], \"f22b\", \"M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMarsStrokeV = {\n prefix: 'fas',\n iconName: 'mars-stroke-v',\n icon: [288, 512, [], \"f22a\", \"M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z\"]\n};\nvar faMask = {\n prefix: 'fas',\n iconName: 'mask',\n icon: [640, 512, [], \"f6fa\", \"M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z\"]\n};\nvar faMedal = {\n prefix: 'fas',\n iconName: 'medal',\n icon: [512, 512, [], \"f5a2\", \"M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z\"]\n};\nvar faMedkit = {\n prefix: 'fas',\n iconName: 'medkit',\n icon: [512, 512, [], \"f0fa\", \"M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z\"]\n};\nvar faMeh = {\n prefix: 'fas',\n iconName: 'meh',\n icon: [496, 512, [], \"f11a\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehBlank = {\n prefix: 'fas',\n iconName: 'meh-blank',\n icon: [496, 512, [], \"f5a4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMehRollingEyes = {\n prefix: 'fas',\n iconName: 'meh-rolling-eyes',\n icon: [496, 512, [], \"f5a5\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z\"]\n};\nvar faMemory = {\n prefix: 'fas',\n iconName: 'memory',\n icon: [640, 512, [], \"f538\", \"M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z\"]\n};\nvar faMenorah = {\n prefix: 'fas',\n iconName: 'menorah',\n icon: [640, 512, [], \"f676\", \"M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z\"]\n};\nvar faMercury = {\n prefix: 'fas',\n iconName: 'mercury',\n icon: [288, 512, [], \"f223\", \"M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faMeteor = {\n prefix: 'fas',\n iconName: 'meteor',\n icon: [512, 512, [], \"f753\", \"M491.2.7C452.5 12.3 379.4 35 303.5 62c-2.1-7-4-13.5-5.6-18.6-3-9.7-13.9-14.2-22.9-9.5C232.6 56 122.2 116.5 60.6 176.4c-1.1 1-2.5 2-3.5 3C19 217.4 0 267.3 0 317.2 0 367 19 416.9 57 455c38 38 87.9 57.1 137.8 57 49.9 0 99.8-19 137.9-57.1 1-1 2-2.4 3-3.5 59.8-61.6 120.4-172.1 142.5-214.4 4.7-9 .2-19.9-9.5-22.9-5.2-1.6-11.6-3.5-18.6-5.6 27-76 49.7-149 61.3-187.7C515 8.4 503.6-3 491.2.7zM192 448c-70.7 0-128-57.3-128-128s57.3-128 128-128 128 57.3 128 128-57.3 128-128 128zm-32-192c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32zm48 96c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16z\"]\n};\nvar faMicrochip = {\n prefix: 'fas',\n iconName: 'microchip',\n icon: [512, 512, [], \"f2db\", \"M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z\"]\n};\nvar faMicrophone = {\n prefix: 'fas',\n iconName: 'microphone',\n icon: [352, 512, [], \"f130\", \"M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneAlt = {\n prefix: 'fas',\n iconName: 'microphone-alt',\n icon: [352, 512, [], \"f3c9\", \"M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z\"]\n};\nvar faMicrophoneAltSlash = {\n prefix: 'fas',\n iconName: 'microphone-alt-slash',\n icon: [640, 512, [], \"f539\", \"M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicrophoneSlash = {\n prefix: 'fas',\n iconName: 'microphone-slash',\n icon: [640, 512, [], \"f131\", \"M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z\"]\n};\nvar faMicroscope = {\n prefix: 'fas',\n iconName: 'microscope',\n icon: [512, 512, [], \"f610\", \"M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z\"]\n};\nvar faMinus = {\n prefix: 'fas',\n iconName: 'minus',\n icon: [448, 512, [], \"f068\", \"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faMinusCircle = {\n prefix: 'fas',\n iconName: 'minus-circle',\n icon: [512, 512, [], \"f056\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z\"]\n};\nvar faMinusSquare = {\n prefix: 'fas',\n iconName: 'minus-square',\n icon: [448, 512, [], \"f146\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z\"]\n};\nvar faMitten = {\n prefix: 'fas',\n iconName: 'mitten',\n icon: [448, 512, [], \"f7b5\", \"M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z\"]\n};\nvar faMobile = {\n prefix: 'fas',\n iconName: 'mobile',\n icon: [320, 512, [], \"f10b\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faMobileAlt = {\n prefix: 'fas',\n iconName: 'mobile-alt',\n icon: [320, 512, [], \"f3cd\", \"M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faMoneyBill = {\n prefix: 'fas',\n iconName: 'money-bill',\n icon: [640, 512, [], \"f0d6\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillAlt = {\n prefix: 'fas',\n iconName: 'money-bill-alt',\n icon: [640, 512, [], \"f3d1\", \"M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z\"]\n};\nvar faMoneyBillWave = {\n prefix: 'fas',\n iconName: 'money-bill-wave',\n icon: [640, 512, [], \"f53a\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z\"]\n};\nvar faMoneyBillWaveAlt = {\n prefix: 'fas',\n iconName: 'money-bill-wave-alt',\n icon: [640, 512, [], \"f53b\", \"M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z\"]\n};\nvar faMoneyCheck = {\n prefix: 'fas',\n iconName: 'money-check',\n icon: [640, 512, [], \"f53c\", \"M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faMoneyCheckAlt = {\n prefix: 'fas',\n iconName: 'money-check-alt',\n icon: [640, 512, [], \"f53d\", \"M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z\"]\n};\nvar faMonument = {\n prefix: 'fas',\n iconName: 'monument',\n icon: [384, 512, [], \"f5a6\", \"M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z\"]\n};\nvar faMoon = {\n prefix: 'fas',\n iconName: 'moon',\n icon: [512, 512, [], \"f186\", \"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z\"]\n};\nvar faMortarPestle = {\n prefix: 'fas',\n iconName: 'mortar-pestle',\n icon: [512, 512, [], \"f5a7\", \"M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z\"]\n};\nvar faMosque = {\n prefix: 'fas',\n iconName: 'mosque',\n icon: [640, 512, [], \"f678\", \"M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z\"]\n};\nvar faMotorcycle = {\n prefix: 'fas',\n iconName: 'motorcycle',\n icon: [640, 512, [], \"f21c\", \"M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z\"]\n};\nvar faMountain = {\n prefix: 'fas',\n iconName: 'mountain',\n icon: [640, 512, [], \"f6fc\", \"M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z\"]\n};\nvar faMousePointer = {\n prefix: 'fas',\n iconName: 'mouse-pointer',\n icon: [320, 512, [], \"f245\", \"M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z\"]\n};\nvar faMugHot = {\n prefix: 'fas',\n iconName: 'mug-hot',\n icon: [512, 512, [], \"f7b6\", \"M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faMusic = {\n prefix: 'fas',\n iconName: 'music',\n icon: [512, 512, [], \"f001\", \"M511.99 32.01c0-21.71-21.1-37.01-41.6-30.51L150.4 96c-13.3 4.2-22.4 16.5-22.4 30.5v261.42c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64V214.31l256-75.02v184.63c-10.05-2.38-20.72-3.92-32-3.92-53.02 0-96 28.65-96 64s42.98 64 96 64 96-28.65 96-64l-.01-351.99z\"]\n};\nvar faNetworkWired = {\n prefix: 'fas',\n iconName: 'network-wired',\n icon: [640, 512, [], \"f6ff\", \"M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z\"]\n};\nvar faNeuter = {\n prefix: 'fas',\n iconName: 'neuter',\n icon: [288, 512, [], \"f22c\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faNewspaper = {\n prefix: 'fas',\n iconName: 'newspaper',\n icon: [576, 512, [], \"f1ea\", \"M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z\"]\n};\nvar faNotEqual = {\n prefix: 'fas',\n iconName: 'not-equal',\n icon: [448, 512, [], \"f53e\", \"M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z\"]\n};\nvar faNotesMedical = {\n prefix: 'fas',\n iconName: 'notes-medical',\n icon: [384, 512, [], \"f481\", \"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faObjectGroup = {\n prefix: 'fas',\n iconName: 'object-group',\n icon: [512, 512, [], \"f247\", \"M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z\"]\n};\nvar faObjectUngroup = {\n prefix: 'fas',\n iconName: 'object-ungroup',\n icon: [576, 512, [], \"f248\", \"M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z\"]\n};\nvar faOilCan = {\n prefix: 'fas',\n iconName: 'oil-can',\n icon: [640, 512, [], \"f613\", \"M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z\"]\n};\nvar faOm = {\n prefix: 'fas',\n iconName: 'om',\n icon: [512, 512, [], \"f679\", \"M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z\"]\n};\nvar faOtter = {\n prefix: 'fas',\n iconName: 'otter',\n icon: [640, 512, [], \"f700\", \"M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z\"]\n};\nvar faOutdent = {\n prefix: 'fas',\n iconName: 'outdent',\n icon: [448, 512, [], \"f03b\", \"M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faPager = {\n prefix: 'fas',\n iconName: 'pager',\n icon: [512, 512, [], \"f815\", \"M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z\"]\n};\nvar faPaintBrush = {\n prefix: 'fas',\n iconName: 'paint-brush',\n icon: [512, 512, [], \"f1fc\", \"M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z\"]\n};\nvar faPaintRoller = {\n prefix: 'fas',\n iconName: 'paint-roller',\n icon: [512, 512, [], \"f5aa\", \"M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z\"]\n};\nvar faPalette = {\n prefix: 'fas',\n iconName: 'palette',\n icon: [512, 512, [], \"f53f\", \"M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPallet = {\n prefix: 'fas',\n iconName: 'pallet',\n icon: [640, 512, [], \"f482\", \"M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z\"]\n};\nvar faPaperPlane = {\n prefix: 'fas',\n iconName: 'paper-plane',\n icon: [512, 512, [], \"f1d8\", \"M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z\"]\n};\nvar faPaperclip = {\n prefix: 'fas',\n iconName: 'paperclip',\n icon: [448, 512, [], \"f0c6\", \"M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z\"]\n};\nvar faParachuteBox = {\n prefix: 'fas',\n iconName: 'parachute-box',\n icon: [512, 512, [], \"f4cd\", \"M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z\"]\n};\nvar faParagraph = {\n prefix: 'fas',\n iconName: 'paragraph',\n icon: [448, 512, [], \"f1dd\", \"M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z\"]\n};\nvar faParking = {\n prefix: 'fas',\n iconName: 'parking',\n icon: [448, 512, [], \"f540\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z\"]\n};\nvar faPassport = {\n prefix: 'fas',\n iconName: 'passport',\n icon: [448, 512, [], \"f5ab\", \"M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z\"]\n};\nvar faPastafarianism = {\n prefix: 'fas',\n iconName: 'pastafarianism',\n icon: [640, 512, [], \"f67b\", \"M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z\"]\n};\nvar faPaste = {\n prefix: 'fas',\n iconName: 'paste',\n icon: [448, 512, [], \"f0ea\", \"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"]\n};\nvar faPause = {\n prefix: 'fas',\n iconName: 'pause',\n icon: [448, 512, [], \"f04c\", \"M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z\"]\n};\nvar faPauseCircle = {\n prefix: 'fas',\n iconName: 'pause-circle',\n icon: [512, 512, [], \"f28b\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faPaw = {\n prefix: 'fas',\n iconName: 'paw',\n icon: [512, 512, [], \"f1b0\", \"M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z\"]\n};\nvar faPeace = {\n prefix: 'fas',\n iconName: 'peace',\n icon: [496, 512, [], \"f67c\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z\"]\n};\nvar faPen = {\n prefix: 'fas',\n iconName: 'pen',\n icon: [512, 512, [], \"f304\", \"M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z\"]\n};\nvar faPenAlt = {\n prefix: 'fas',\n iconName: 'pen-alt',\n icon: [512, 512, [], \"f305\", \"M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z\"]\n};\nvar faPenFancy = {\n prefix: 'fas',\n iconName: 'pen-fancy',\n icon: [512, 512, [], \"f5ac\", \"M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z\"]\n};\nvar faPenNib = {\n prefix: 'fas',\n iconName: 'pen-nib',\n icon: [512, 512, [], \"f5ad\", \"M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z\"]\n};\nvar faPenSquare = {\n prefix: 'fas',\n iconName: 'pen-square',\n icon: [448, 512, [], \"f14b\", \"M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z\"]\n};\nvar faPencilAlt = {\n prefix: 'fas',\n iconName: 'pencil-alt',\n icon: [512, 512, [], \"f303\", \"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"]\n};\nvar faPencilRuler = {\n prefix: 'fas',\n iconName: 'pencil-ruler',\n icon: [512, 512, [], \"f5ae\", \"M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z\"]\n};\nvar faPeopleCarry = {\n prefix: 'fas',\n iconName: 'people-carry',\n icon: [640, 512, [], \"f4ce\", \"M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z\"]\n};\nvar faPepperHot = {\n prefix: 'fas',\n iconName: 'pepper-hot',\n icon: [512, 512, [], \"f816\", \"M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z\"]\n};\nvar faPercent = {\n prefix: 'fas',\n iconName: 'percent',\n icon: [448, 512, [], \"f295\", \"M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z\"]\n};\nvar faPercentage = {\n prefix: 'fas',\n iconName: 'percentage',\n icon: [384, 512, [], \"f541\", \"M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z\"]\n};\nvar faPersonBooth = {\n prefix: 'fas',\n iconName: 'person-booth',\n icon: [576, 512, [], \"f756\", \"M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z\"]\n};\nvar faPhone = {\n prefix: 'fas',\n iconName: 'phone',\n icon: [512, 512, [], \"f095\", \"M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z\"]\n};\nvar faPhoneAlt = {\n prefix: 'fas',\n iconName: 'phone-alt',\n icon: [512, 512, [], \"f879\", \"M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z\"]\n};\nvar faPhoneSlash = {\n prefix: 'fas',\n iconName: 'phone-slash',\n icon: [640, 512, [], \"f3dd\", \"M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z\"]\n};\nvar faPhoneSquare = {\n prefix: 'fas',\n iconName: 'phone-square',\n icon: [448, 512, [], \"f098\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z\"]\n};\nvar faPhoneSquareAlt = {\n prefix: 'fas',\n iconName: 'phone-square-alt',\n icon: [448, 512, [], \"f87b\", \"M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z\"]\n};\nvar faPhoneVolume = {\n prefix: 'fas',\n iconName: 'phone-volume',\n icon: [384, 512, [], \"f2a0\", \"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"]\n};\nvar faPhotoVideo = {\n prefix: 'fas',\n iconName: 'photo-video',\n icon: [640, 512, [], \"f87c\", \"M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z\"]\n};\nvar faPiggyBank = {\n prefix: 'fas',\n iconName: 'piggy-bank',\n icon: [576, 512, [], \"f4d3\", \"M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z\"]\n};\nvar faPills = {\n prefix: 'fas',\n iconName: 'pills',\n icon: [576, 512, [], \"f484\", \"M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z\"]\n};\nvar faPizzaSlice = {\n prefix: 'fas',\n iconName: 'pizza-slice',\n icon: [512, 512, [], \"f818\", \"M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z\"]\n};\nvar faPlaceOfWorship = {\n prefix: 'fas',\n iconName: 'place-of-worship',\n icon: [640, 512, [], \"f67f\", \"M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z\"]\n};\nvar faPlane = {\n prefix: 'fas',\n iconName: 'plane',\n icon: [576, 512, [], \"f072\", \"M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z\"]\n};\nvar faPlaneArrival = {\n prefix: 'fas',\n iconName: 'plane-arrival',\n icon: [640, 512, [], \"f5af\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z\"]\n};\nvar faPlaneDeparture = {\n prefix: 'fas',\n iconName: 'plane-departure',\n icon: [640, 512, [], \"f5b0\", \"M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z\"]\n};\nvar faPlay = {\n prefix: 'fas',\n iconName: 'play',\n icon: [448, 512, [], \"f04b\", \"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z\"]\n};\nvar faPlayCircle = {\n prefix: 'fas',\n iconName: 'play-circle',\n icon: [512, 512, [], \"f144\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z\"]\n};\nvar faPlug = {\n prefix: 'fas',\n iconName: 'plug',\n icon: [384, 512, [], \"f1e6\", \"M256 144V32c0-17.673 14.327-32 32-32s32 14.327 32 32v112h-64zm112 16H16c-8.837 0-16 7.163-16 16v32c0 8.837 7.163 16 16 16h16v32c0 77.406 54.969 141.971 128 156.796V512h64v-99.204c73.031-14.825 128-79.39 128-156.796v-32h16c8.837 0 16-7.163 16-16v-32c0-8.837-7.163-16-16-16zm-240-16V32c0-17.673-14.327-32-32-32S64 14.327 64 32v112h64z\"]\n};\nvar faPlus = {\n prefix: 'fas',\n iconName: 'plus',\n icon: [448, 512, [], \"f067\", \"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPlusCircle = {\n prefix: 'fas',\n iconName: 'plus-circle',\n icon: [512, 512, [], \"f055\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPlusSquare = {\n prefix: 'fas',\n iconName: 'plus-square',\n icon: [448, 512, [], \"f0fe\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z\"]\n};\nvar faPodcast = {\n prefix: 'fas',\n iconName: 'podcast',\n icon: [448, 512, [], \"f2ce\", \"M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z\"]\n};\nvar faPoll = {\n prefix: 'fas',\n iconName: 'poll',\n icon: [448, 512, [], \"f681\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z\"]\n};\nvar faPollH = {\n prefix: 'fas',\n iconName: 'poll-h',\n icon: [448, 512, [], \"f682\", \"M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z\"]\n};\nvar faPoo = {\n prefix: 'fas',\n iconName: 'poo',\n icon: [512, 512, [], \"f2fe\", \"M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faPooStorm = {\n prefix: 'fas',\n iconName: 'poo-storm',\n icon: [448, 512, [], \"f75a\", \"M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z\"]\n};\nvar faPoop = {\n prefix: 'fas',\n iconName: 'poop',\n icon: [512, 512, [], \"f619\", \"M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z\"]\n};\nvar faPortrait = {\n prefix: 'fas',\n iconName: 'portrait',\n icon: [384, 512, [], \"f3e0\", \"M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z\"]\n};\nvar faPoundSign = {\n prefix: 'fas',\n iconName: 'pound-sign',\n icon: [320, 512, [], \"f154\", \"M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z\"]\n};\nvar faPowerOff = {\n prefix: 'fas',\n iconName: 'power-off',\n icon: [512, 512, [], \"f011\", \"M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z\"]\n};\nvar faPray = {\n prefix: 'fas',\n iconName: 'pray',\n icon: [384, 512, [], \"f683\", \"M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z\"]\n};\nvar faPrayingHands = {\n prefix: 'fas',\n iconName: 'praying-hands',\n icon: [640, 512, [], \"f684\", \"M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z\"]\n};\nvar faPrescription = {\n prefix: 'fas',\n iconName: 'prescription',\n icon: [384, 512, [], \"f5b1\", \"M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z\"]\n};\nvar faPrescriptionBottle = {\n prefix: 'fas',\n iconName: 'prescription-bottle',\n icon: [384, 512, [], \"f485\", \"M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z\"]\n};\nvar faPrescriptionBottleAlt = {\n prefix: 'fas',\n iconName: 'prescription-bottle-alt',\n icon: [384, 512, [], \"f486\", \"M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z\"]\n};\nvar faPrint = {\n prefix: 'fas',\n iconName: 'print',\n icon: [512, 512, [], \"f02f\", \"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faProcedures = {\n prefix: 'fas',\n iconName: 'procedures',\n icon: [640, 512, [], \"f487\", \"M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z\"]\n};\nvar faProjectDiagram = {\n prefix: 'fas',\n iconName: 'project-diagram',\n icon: [640, 512, [], \"f542\", \"M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z\"]\n};\nvar faPuzzlePiece = {\n prefix: 'fas',\n iconName: 'puzzle-piece',\n icon: [576, 512, [], \"f12e\", \"M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z\"]\n};\nvar faQrcode = {\n prefix: 'fas',\n iconName: 'qrcode',\n icon: [448, 512, [], \"f029\", \"M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z\"]\n};\nvar faQuestion = {\n prefix: 'fas',\n iconName: 'question',\n icon: [384, 512, [], \"f128\", \"M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z\"]\n};\nvar faQuestionCircle = {\n prefix: 'fas',\n iconName: 'question-circle',\n icon: [512, 512, [], \"f059\", \"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\"]\n};\nvar faQuidditch = {\n prefix: 'fas',\n iconName: 'quidditch',\n icon: [640, 512, [], \"f458\", \"M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z\"]\n};\nvar faQuoteLeft = {\n prefix: 'fas',\n iconName: 'quote-left',\n icon: [512, 512, [], \"f10d\", \"M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuoteRight = {\n prefix: 'fas',\n iconName: 'quote-right',\n icon: [512, 512, [], \"f10e\", \"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faQuran = {\n prefix: 'fas',\n iconName: 'quran',\n icon: [448, 512, [], \"f687\", \"M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z\"]\n};\nvar faRadiation = {\n prefix: 'fas',\n iconName: 'radiation',\n icon: [496, 512, [], \"f7b9\", \"M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z\"]\n};\nvar faRadiationAlt = {\n prefix: 'fas',\n iconName: 'radiation-alt',\n icon: [496, 512, [], \"f7ba\", \"M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faRainbow = {\n prefix: 'fas',\n iconName: 'rainbow',\n icon: [576, 512, [], \"f75b\", \"M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z\"]\n};\nvar faRandom = {\n prefix: 'fas',\n iconName: 'random',\n icon: [512, 512, [], \"f074\", \"M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z\"]\n};\nvar faReceipt = {\n prefix: 'fas',\n iconName: 'receipt',\n icon: [384, 512, [], \"f543\", \"M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faRecycle = {\n prefix: 'fas',\n iconName: 'recycle',\n icon: [512, 512, [], \"f1b8\", \"M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z\"]\n};\nvar faRedo = {\n prefix: 'fas',\n iconName: 'redo',\n icon: [512, 512, [], \"f01e\", \"M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z\"]\n};\nvar faRedoAlt = {\n prefix: 'fas',\n iconName: 'redo-alt',\n icon: [512, 512, [], \"f2f9\", \"M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z\"]\n};\nvar faRegistered = {\n prefix: 'fas',\n iconName: 'registered',\n icon: [512, 512, [], \"f25d\", \"M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z\"]\n};\nvar faRemoveFormat = {\n prefix: 'fas',\n iconName: 'remove-format',\n icon: [640, 512, [], \"f87d\", \"M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z\"]\n};\nvar faReply = {\n prefix: 'fas',\n iconName: 'reply',\n icon: [512, 512, [], \"f3e5\", \"M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z\"]\n};\nvar faReplyAll = {\n prefix: 'fas',\n iconName: 'reply-all',\n icon: [576, 512, [], \"f122\", \"M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z\"]\n};\nvar faRepublican = {\n prefix: 'fas',\n iconName: 'republican',\n icon: [640, 512, [], \"f75e\", \"M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z\"]\n};\nvar faRestroom = {\n prefix: 'fas',\n iconName: 'restroom',\n icon: [640, 512, [], \"f7bd\", \"M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z\"]\n};\nvar faRetweet = {\n prefix: 'fas',\n iconName: 'retweet',\n icon: [640, 512, [], \"f079\", \"M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z\"]\n};\nvar faRibbon = {\n prefix: 'fas',\n iconName: 'ribbon',\n icon: [448, 512, [], \"f4d6\", \"M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z\"]\n};\nvar faRing = {\n prefix: 'fas',\n iconName: 'ring',\n icon: [512, 512, [], \"f70b\", \"M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z\"]\n};\nvar faRoad = {\n prefix: 'fas',\n iconName: 'road',\n icon: [576, 512, [], \"f018\", \"M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z\"]\n};\nvar faRobot = {\n prefix: 'fas',\n iconName: 'robot',\n icon: [640, 512, [], \"f544\", \"M0 256v128c0 17.7 14.3 32 32 32h32V224H32c-17.7 0-32 14.3-32 32zM464 96H352V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H176c-44.2 0-80 35.8-80 80v272c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V176c0-44.2-35.8-80-80-80zM256 416h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm128 120h-64v-32h64v32zm96 0h-64v-32h64v32zm-32-120c-22.1 0-40-17.9-40-40s17.9-40 40-40 40 17.9 40 40-17.9 40-40 40zm192-72h-32v192h32c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32z\"]\n};\nvar faRocket = {\n prefix: 'fas',\n iconName: 'rocket',\n icon: [512, 512, [], \"f135\", \"M505.05 19.1a15.89 15.89 0 0 0-12.2-12.2C460.65 0 435.46 0 410.36 0c-103.2 0-165.1 55.2-211.29 128H94.87A48 48 0 0 0 52 154.49l-49.42 98.8A24 24 0 0 0 24.07 288h103.77l-22.47 22.47a32 32 0 0 0 0 45.25l50.9 50.91a32 32 0 0 0 45.26 0L224 384.16V488a24 24 0 0 0 34.7 21.49l98.7-49.39a47.91 47.91 0 0 0 26.5-42.9V312.79c72.59-46.3 128-108.4 128-211.09.1-25.2.1-50.4-6.85-82.6zM384 168a40 40 0 1 1 40-40 40 40 0 0 1-40 40z\"]\n};\nvar faRoute = {\n prefix: 'fas',\n iconName: 'route',\n icon: [512, 512, [], \"f4d7\", \"M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faRss = {\n prefix: 'fas',\n iconName: 'rss',\n icon: [448, 512, [], \"f09e\", \"M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z\"]\n};\nvar faRssSquare = {\n prefix: 'fas',\n iconName: 'rss-square',\n icon: [448, 512, [], \"f143\", \"M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z\"]\n};\nvar faRubleSign = {\n prefix: 'fas',\n iconName: 'ruble-sign',\n icon: [384, 512, [], \"f158\", \"M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z\"]\n};\nvar faRuler = {\n prefix: 'fas',\n iconName: 'ruler',\n icon: [640, 512, [], \"f545\", \"M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z\"]\n};\nvar faRulerCombined = {\n prefix: 'fas',\n iconName: 'ruler-combined',\n icon: [512, 512, [], \"f546\", \"M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerHorizontal = {\n prefix: 'fas',\n iconName: 'ruler-horizontal',\n icon: [576, 512, [], \"f547\", \"M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z\"]\n};\nvar faRulerVertical = {\n prefix: 'fas',\n iconName: 'ruler-vertical',\n icon: [256, 512, [], \"f548\", \"M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z\"]\n};\nvar faRunning = {\n prefix: 'fas',\n iconName: 'running',\n icon: [416, 512, [], \"f70c\", \"M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z\"]\n};\nvar faRupeeSign = {\n prefix: 'fas',\n iconName: 'rupee-sign',\n icon: [320, 512, [], \"f156\", \"M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z\"]\n};\nvar faSadCry = {\n prefix: 'fas',\n iconName: 'sad-cry',\n icon: [496, 512, [], \"f5b3\", \"M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z\"]\n};\nvar faSadTear = {\n prefix: 'fas',\n iconName: 'sad-tear',\n icon: [496, 512, [], \"f5b4\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z\"]\n};\nvar faSatellite = {\n prefix: 'fas',\n iconName: 'satellite',\n icon: [512, 512, [], \"f7bf\", \"M502.7 265l-80.3-80.4 47.8-47.9c13.1-13.1 13.1-34.4 0-47.5l-47.5-47.5c-13.1-13.1-34.4-13.1-47.5 0l-47.8 47.9-80.3-80.3C240.8 3.1 232.7 0 224.5 0S208.2 3.1 202 9.3L105.3 106c-12.4 12.4-12.4 32.6 0 45.1l80.3 80.4-9.8 9.8C122.1 217 59.6 218.6 7.3 246.7c-8.5 4.6-9.6 16.4-2.8 23.2L112 377.4l-17.8 17.8c-2.6-.7-5-1.6-7.8-1.6-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32c0-2.8-.9-5.2-1.6-7.8l17.8-17.8 107.5 107.5c6.8 6.8 18.7 5.7 23.2-2.8 28.1-52.3 29.7-114.8 5.4-168.5l9.9-9.9 80.3 80.4c6.2 6.2 14.4 9.3 22.5 9.3s16.3-3.1 22.5-9.3l96.7-96.7c12.5-12.4 12.5-32.6.1-45zm-352-136.5l73.8-73.8 68.9 68.9-73.8 73.8-68.9-68.9zm232.8 232.8l-68.9-68.9 73.8-73.8 68.9 68.9-73.8 73.8z\"]\n};\nvar faSatelliteDish = {\n prefix: 'fas',\n iconName: 'satellite-dish',\n icon: [512, 512, [], \"f7c0\", \"M188.8 345.9l27.4-27.4c2.6.7 5 1.6 7.8 1.6 17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32c0 2.8.9 5.2 1.6 7.8l-27.4 27.4L49.4 206.5c-7.3-7.3-20.1-6.1-25 3-41.8 77.8-29.9 176.7 35.7 242.3 65.6 65.6 164.6 77.5 242.3 35.7 9.2-4.9 10.4-17.7 3-25L188.8 345.9zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z\"]\n};\nvar faSave = {\n prefix: 'fas',\n iconName: 'save',\n icon: [448, 512, [], \"f0c7\", \"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"]\n};\nvar faSchool = {\n prefix: 'fas',\n iconName: 'school',\n icon: [640, 512, [], \"f549\", \"M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z\"]\n};\nvar faScrewdriver = {\n prefix: 'fas',\n iconName: 'screwdriver',\n icon: [512, 512, [], \"f54a\", \"M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z\"]\n};\nvar faScroll = {\n prefix: 'fas',\n iconName: 'scroll',\n icon: [640, 512, [], \"f70e\", \"M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z\"]\n};\nvar faSdCard = {\n prefix: 'fas',\n iconName: 'sd-card',\n icon: [384, 512, [], \"f7c2\", \"M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z\"]\n};\nvar faSearch = {\n prefix: 'fas',\n iconName: 'search',\n icon: [512, 512, [], \"f002\", \"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"]\n};\nvar faSearchDollar = {\n prefix: 'fas',\n iconName: 'search-dollar',\n icon: [512, 512, [], \"f688\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z\"]\n};\nvar faSearchLocation = {\n prefix: 'fas',\n iconName: 'search-location',\n icon: [512, 512, [], \"f689\", \"M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faSearchMinus = {\n prefix: 'fas',\n iconName: 'search-minus',\n icon: [512, 512, [], \"f010\", \"M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSearchPlus = {\n prefix: 'fas',\n iconName: 'search-plus',\n icon: [512, 512, [], \"f00e\", \"M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z\"]\n};\nvar faSeedling = {\n prefix: 'fas',\n iconName: 'seedling',\n icon: [512, 512, [], \"f4d8\", \"M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z\"]\n};\nvar faServer = {\n prefix: 'fas',\n iconName: 'server',\n icon: [512, 512, [], \"f233\", \"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"]\n};\nvar faShapes = {\n prefix: 'fas',\n iconName: 'shapes',\n icon: [512, 512, [], \"f61f\", \"M512 320v160c0 17.67-14.33 32-32 32H320c-17.67 0-32-14.33-32-32V320c0-17.67 14.33-32 32-32h160c17.67 0 32 14.33 32 32zm-384-64C57.31 256 0 313.31 0 384s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm351.03-32c25.34 0 41.18-26.67 28.51-48L412.51 16c-12.67-21.33-44.35-21.33-57.02 0l-95.03 160c-12.67 21.33 3.17 48 28.51 48h190.06z\"]\n};\nvar faShare = {\n prefix: 'fas',\n iconName: 'share',\n icon: [512, 512, [], \"f064\", \"M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z\"]\n};\nvar faShareAlt = {\n prefix: 'fas',\n iconName: 'share-alt',\n icon: [448, 512, [], \"f1e0\", \"M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z\"]\n};\nvar faShareAltSquare = {\n prefix: 'fas',\n iconName: 'share-alt-square',\n icon: [448, 512, [], \"f1e1\", \"M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z\"]\n};\nvar faShareSquare = {\n prefix: 'fas',\n iconName: 'share-square',\n icon: [576, 512, [], \"f14d\", \"M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z\"]\n};\nvar faShekelSign = {\n prefix: 'fas',\n iconName: 'shekel-sign',\n icon: [448, 512, [], \"f20b\", \"M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z\"]\n};\nvar faShieldAlt = {\n prefix: 'fas',\n iconName: 'shield-alt',\n icon: [512, 512, [], \"f3ed\", \"M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z\"]\n};\nvar faShip = {\n prefix: 'fas',\n iconName: 'ship',\n icon: [640, 512, [], \"f21a\", \"M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z\"]\n};\nvar faShippingFast = {\n prefix: 'fas',\n iconName: 'shipping-fast',\n icon: [640, 512, [], \"f48b\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faShoePrints = {\n prefix: 'fas',\n iconName: 'shoe-prints',\n icon: [640, 512, [], \"f54b\", \"M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z\"]\n};\nvar faShoppingBag = {\n prefix: 'fas',\n iconName: 'shopping-bag',\n icon: [448, 512, [], \"f290\", \"M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z\"]\n};\nvar faShoppingBasket = {\n prefix: 'fas',\n iconName: 'shopping-basket',\n icon: [576, 512, [], \"f291\", \"M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z\"]\n};\nvar faShoppingCart = {\n prefix: 'fas',\n iconName: 'shopping-cart',\n icon: [576, 512, [], \"f07a\", \"M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z\"]\n};\nvar faShower = {\n prefix: 'fas',\n iconName: 'shower',\n icon: [512, 512, [], \"f2cc\", \"M389.66 135.6L231.6 293.66c-9.37 9.37-24.57 9.37-33.94 0l-11.32-11.32c-9.37-9.37-9.37-24.57 0-33.94l.11-.11c-34.03-40.21-35.16-98.94-3.39-140.38-11.97-7.55-26.14-11.91-41.3-11.91C98.88 96 64 130.88 64 173.76V480H0V173.76C0 95.59 63.59 32 141.76 32c36.93 0 70.61 14.2 95.86 37.42 35.9-11.51 76.5-4.5 106.67 21.03l.11-.11c9.37-9.37 24.57-9.37 33.94 0l11.32 11.32c9.37 9.37 9.37 24.57 0 33.94zM384 208c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm48-16c8.837 0 16 7.163 16 16s-7.163 16-16 16-16-7.163-16-16 7.163-16 16-16zm80 16c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-160 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm32 0c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-128 32c0-8.837 7.163-16 16-16s16 7.163 16 16-7.163 16-16 16-16-7.163-16-16zm96 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-96 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm64 0c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16zm-32 32c0 8.837-7.163 16-16 16s-16-7.163-16-16 7.163-16 16-16 16 7.163 16 16z\"]\n};\nvar faShuttleVan = {\n prefix: 'fas',\n iconName: 'shuttle-van',\n icon: [640, 512, [], \"f5b6\", \"M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z\"]\n};\nvar faSign = {\n prefix: 'fas',\n iconName: 'sign',\n icon: [512, 512, [], \"f4d9\", \"M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z\"]\n};\nvar faSignInAlt = {\n prefix: 'fas',\n iconName: 'sign-in-alt',\n icon: [512, 512, [], \"f2f6\", \"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"]\n};\nvar faSignLanguage = {\n prefix: 'fas',\n iconName: 'sign-language',\n icon: [448, 512, [], \"f2a7\", \"M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z\"]\n};\nvar faSignOutAlt = {\n prefix: 'fas',\n iconName: 'sign-out-alt',\n icon: [512, 512, [], \"f2f5\", \"M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z\"]\n};\nvar faSignal = {\n prefix: 'fas',\n iconName: 'signal',\n icon: [640, 512, [], \"f012\", \"M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"]\n};\nvar faSignature = {\n prefix: 'fas',\n iconName: 'signature',\n icon: [640, 512, [], \"f5b7\", \"M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z\"]\n};\nvar faSimCard = {\n prefix: 'fas',\n iconName: 'sim-card',\n icon: [384, 512, [], \"f7c4\", \"M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z\"]\n};\nvar faSitemap = {\n prefix: 'fas',\n iconName: 'sitemap',\n icon: [640, 512, [], \"f0e8\", \"M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z\"]\n};\nvar faSkating = {\n prefix: 'fas',\n iconName: 'skating',\n icon: [448, 512, [], \"f7c5\", \"M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z\"]\n};\nvar faSkiing = {\n prefix: 'fas',\n iconName: 'skiing',\n icon: [512, 512, [], \"f7c9\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z\"]\n};\nvar faSkiingNordic = {\n prefix: 'fas',\n iconName: 'skiing-nordic',\n icon: [576, 512, [], \"f7ca\", \"M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z\"]\n};\nvar faSkull = {\n prefix: 'fas',\n iconName: 'skull',\n icon: [512, 512, [], \"f54c\", \"M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\"]\n};\nvar faSkullCrossbones = {\n prefix: 'fas',\n iconName: 'skull-crossbones',\n icon: [448, 512, [], \"f714\", \"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"]\n};\nvar faSlash = {\n prefix: 'fas',\n iconName: 'slash',\n icon: [640, 512, [], \"f715\", \"M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z\"]\n};\nvar faSleigh = {\n prefix: 'fas',\n iconName: 'sleigh',\n icon: [640, 512, [], \"f7cc\", \"M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z\"]\n};\nvar faSlidersH = {\n prefix: 'fas',\n iconName: 'sliders-h',\n icon: [512, 512, [], \"f1de\", \"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z\"]\n};\nvar faSmile = {\n prefix: 'fas',\n iconName: 'smile',\n icon: [496, 512, [], \"f118\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z\"]\n};\nvar faSmileBeam = {\n prefix: 'fas',\n iconName: 'smile-beam',\n icon: [496, 512, [], \"f5b8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z\"]\n};\nvar faSmileWink = {\n prefix: 'fas',\n iconName: 'smile-wink',\n icon: [496, 512, [], \"f4da\", \"M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z\"]\n};\nvar faSmog = {\n prefix: 'fas',\n iconName: 'smog',\n icon: [640, 512, [], \"f75f\", \"M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z\"]\n};\nvar faSmoking = {\n prefix: 'fas',\n iconName: 'smoking',\n icon: [640, 512, [], \"f48d\", \"M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z\"]\n};\nvar faSmokingBan = {\n prefix: 'fas',\n iconName: 'smoking-ban',\n icon: [512, 512, [], \"f54d\", \"M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z\"]\n};\nvar faSms = {\n prefix: 'fas',\n iconName: 'sms',\n icon: [512, 512, [], \"f7cd\", \"M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z\"]\n};\nvar faSnowboarding = {\n prefix: 'fas',\n iconName: 'snowboarding',\n icon: [512, 512, [], \"f7ce\", \"M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z\"]\n};\nvar faSnowflake = {\n prefix: 'fas',\n iconName: 'snowflake',\n icon: [448, 512, [], \"f2dc\", \"M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z\"]\n};\nvar faSnowman = {\n prefix: 'fas',\n iconName: 'snowman',\n icon: [512, 512, [], \"f7d0\", \"M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faSnowplow = {\n prefix: 'fas',\n iconName: 'snowplow',\n icon: [640, 512, [], \"f7d2\", \"M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z\"]\n};\nvar faSocks = {\n prefix: 'fas',\n iconName: 'socks',\n icon: [512, 512, [], \"f696\", \"M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z\"]\n};\nvar faSolarPanel = {\n prefix: 'fas',\n iconName: 'solar-panel',\n icon: [640, 512, [], \"f5ba\", \"M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z\"]\n};\nvar faSort = {\n prefix: 'fas',\n iconName: 'sort',\n icon: [320, 512, [], \"f0dc\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z\"]\n};\nvar faSortAlphaDown = {\n prefix: 'fas',\n iconName: 'sort-alpha-down',\n icon: [448, 512, [], \"f15d\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaDownAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-down-alt',\n icon: [448, 512, [], \"f881\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAlphaUp = {\n prefix: 'fas',\n iconName: 'sort-alpha-up',\n icon: [448, 512, [], \"f15e\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"]\n};\nvar faSortAlphaUpAlt = {\n prefix: 'fas',\n iconName: 'sort-alpha-up-alt',\n icon: [448, 512, [], \"f882\", \"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"]\n};\nvar faSortAmountDown = {\n prefix: 'fas',\n iconName: 'sort-amount-down',\n icon: [512, 512, [], \"f160\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountDownAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-down-alt',\n icon: [512, 512, [], \"f884\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortAmountUp = {\n prefix: 'fas',\n iconName: 'sort-amount-up',\n icon: [512, 512, [], \"f161\", \"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faSortAmountUpAlt = {\n prefix: 'fas',\n iconName: 'sort-amount-up-alt',\n icon: [512, 512, [], \"f885\", \"M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z\"]\n};\nvar faSortDown = {\n prefix: 'fas',\n iconName: 'sort-down',\n icon: [320, 512, [], \"f0dd\", \"M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z\"]\n};\nvar faSortNumericDown = {\n prefix: 'fas',\n iconName: 'sort-numeric-down',\n icon: [448, 512, [], \"f162\", \"M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z\"]\n};\nvar faSortNumericDownAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-down-alt',\n icon: [448, 512, [], \"f886\", \"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortNumericUp = {\n prefix: 'fas',\n iconName: 'sort-numeric-up',\n icon: [448, 512, [], \"f163\", \"M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z\"]\n};\nvar faSortNumericUpAlt = {\n prefix: 'fas',\n iconName: 'sort-numeric-up-alt',\n icon: [448, 512, [], \"f887\", \"M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z\"]\n};\nvar faSortUp = {\n prefix: 'fas',\n iconName: 'sort-up',\n icon: [320, 512, [], \"f0de\", \"M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z\"]\n};\nvar faSpa = {\n prefix: 'fas',\n iconName: 'spa',\n icon: [576, 512, [], \"f5bb\", \"M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z\"]\n};\nvar faSpaceShuttle = {\n prefix: 'fas',\n iconName: 'space-shuttle',\n icon: [640, 512, [], \"f197\", \"M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z\"]\n};\nvar faSpellCheck = {\n prefix: 'fas',\n iconName: 'spell-check',\n icon: [576, 512, [], \"f891\", \"M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z\"]\n};\nvar faSpider = {\n prefix: 'fas',\n iconName: 'spider',\n icon: [576, 512, [], \"f717\", \"M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z\"]\n};\nvar faSpinner = {\n prefix: 'fas',\n iconName: 'spinner',\n icon: [512, 512, [], \"f110\", \"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"]\n};\nvar faSplotch = {\n prefix: 'fas',\n iconName: 'splotch',\n icon: [512, 512, [], \"f5bc\", \"M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z\"]\n};\nvar faSprayCan = {\n prefix: 'fas',\n iconName: 'spray-can',\n icon: [512, 512, [], \"f5bd\", \"M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar faSquare = {\n prefix: 'fas',\n iconName: 'square',\n icon: [448, 512, [], \"f0c8\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faSquareFull = {\n prefix: 'fas',\n iconName: 'square-full',\n icon: [512, 512, [], \"f45c\", \"M512 512H0V0h512v512z\"]\n};\nvar faSquareRootAlt = {\n prefix: 'fas',\n iconName: 'square-root-alt',\n icon: [576, 512, [], \"f698\", \"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z\"]\n};\nvar faStamp = {\n prefix: 'fas',\n iconName: 'stamp',\n icon: [512, 512, [], \"f5bf\", \"M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z\"]\n};\nvar faStar = {\n prefix: 'fas',\n iconName: 'star',\n icon: [576, 512, [], \"f005\", \"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z\"]\n};\nvar faStarAndCrescent = {\n prefix: 'fas',\n iconName: 'star-and-crescent',\n icon: [512, 512, [], \"f699\", \"M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z\"]\n};\nvar faStarHalf = {\n prefix: 'fas',\n iconName: 'star-half',\n icon: [576, 512, [], \"f089\", \"M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z\"]\n};\nvar faStarHalfAlt = {\n prefix: 'fas',\n iconName: 'star-half-alt',\n icon: [536, 512, [], \"f5c0\", \"M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z\"]\n};\nvar faStarOfDavid = {\n prefix: 'fas',\n iconName: 'star-of-david',\n icon: [464, 512, [], \"f69a\", \"M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z\"]\n};\nvar faStarOfLife = {\n prefix: 'fas',\n iconName: 'star-of-life',\n icon: [480, 512, [], \"f621\", \"M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z\"]\n};\nvar faStepBackward = {\n prefix: 'fas',\n iconName: 'step-backward',\n icon: [448, 512, [], \"f048\", \"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"]\n};\nvar faStepForward = {\n prefix: 'fas',\n iconName: 'step-forward',\n icon: [448, 512, [], \"f051\", \"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"]\n};\nvar faStethoscope = {\n prefix: 'fas',\n iconName: 'stethoscope',\n icon: [512, 512, [], \"f0f1\", \"M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z\"]\n};\nvar faStickyNote = {\n prefix: 'fas',\n iconName: 'sticky-note',\n icon: [448, 512, [], \"f249\", \"M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z\"]\n};\nvar faStop = {\n prefix: 'fas',\n iconName: 'stop',\n icon: [448, 512, [], \"f04d\", \"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"]\n};\nvar faStopCircle = {\n prefix: 'fas',\n iconName: 'stop-circle',\n icon: [512, 512, [], \"f28d\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z\"]\n};\nvar faStopwatch = {\n prefix: 'fas',\n iconName: 'stopwatch',\n icon: [448, 512, [], \"f2f2\", \"M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z\"]\n};\nvar faStore = {\n prefix: 'fas',\n iconName: 'store',\n icon: [616, 512, [], \"f54e\", \"M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z\"]\n};\nvar faStoreAlt = {\n prefix: 'fas',\n iconName: 'store-alt',\n icon: [640, 512, [], \"f54f\", \"M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z\"]\n};\nvar faStream = {\n prefix: 'fas',\n iconName: 'stream',\n icon: [512, 512, [], \"f550\", \"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z\"]\n};\nvar faStreetView = {\n prefix: 'fas',\n iconName: 'street-view',\n icon: [512, 512, [], \"f21d\", \"M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z\"]\n};\nvar faStrikethrough = {\n prefix: 'fas',\n iconName: 'strikethrough',\n icon: [512, 512, [], \"f0cc\", \"M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z\"]\n};\nvar faStroopwafel = {\n prefix: 'fas',\n iconName: 'stroopwafel',\n icon: [512, 512, [], \"f551\", \"M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z\"]\n};\nvar faSubscript = {\n prefix: 'fas',\n iconName: 'subscript',\n icon: [512, 512, [], \"f12c\", \"M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSubway = {\n prefix: 'fas',\n iconName: 'subway',\n icon: [448, 512, [], \"f239\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faSuitcase = {\n prefix: 'fas',\n iconName: 'suitcase',\n icon: [512, 512, [], \"f0f2\", \"M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z\"]\n};\nvar faSuitcaseRolling = {\n prefix: 'fas',\n iconName: 'suitcase-rolling',\n icon: [384, 512, [], \"f5c1\", \"M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z\"]\n};\nvar faSun = {\n prefix: 'fas',\n iconName: 'sun',\n icon: [512, 512, [], \"f185\", \"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z\"]\n};\nvar faSuperscript = {\n prefix: 'fas',\n iconName: 'superscript',\n icon: [512, 512, [], \"f12b\", \"M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z\"]\n};\nvar faSurprise = {\n prefix: 'fas',\n iconName: 'surprise',\n icon: [496, 512, [], \"f5c2\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faSwatchbook = {\n prefix: 'fas',\n iconName: 'swatchbook',\n icon: [511, 512, [], \"f5c3\", \"M479.06 320H372.29L186.15 506.51c-2.06 2.07-4.49 3.58-6.67 5.49h299.58c17.64 0 31.94-14.33 31.94-32V352c0-17.67-14.3-32-31.94-32zm-44.5-152.9l-90.33-90.51c-12.47-12.5-32.69-12.5-45.17 0l-75.5 75.65V416c0 2.96-.67 5.73-.87 8.64l211.87-212.28c12.47-12.5 12.47-32.77 0-45.26zM191.62 32c0-17.67-14.3-32-31.94-32H31.94C14.3 0 0 14.33 0 32v384c0 53.02 42.9 96 95.81 96s95.81-42.98 95.81-96V32zM95.81 440c-13.23 0-23.95-10.75-23.95-24 0-13.26 10.73-24 23.95-24s23.95 10.74 23.95 24c.01 13.25-10.72 24-23.95 24zm31.94-184H63.88v-64h63.88v64zm0-128H63.88V64h63.88v64z\"]\n};\nvar faSwimmer = {\n prefix: 'fas',\n iconName: 'swimmer',\n icon: [640, 512, [], \"f5c4\", \"M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z\"]\n};\nvar faSwimmingPool = {\n prefix: 'fas',\n iconName: 'swimming-pool',\n icon: [640, 512, [], \"f5c5\", \"M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z\"]\n};\nvar faSynagogue = {\n prefix: 'fas',\n iconName: 'synagogue',\n icon: [640, 512, [], \"f69b\", \"M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z\"]\n};\nvar faSync = {\n prefix: 'fas',\n iconName: 'sync',\n icon: [512, 512, [], \"f021\", \"M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z\"]\n};\nvar faSyncAlt = {\n prefix: 'fas',\n iconName: 'sync-alt',\n icon: [512, 512, [], \"f2f1\", \"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z\"]\n};\nvar faSyringe = {\n prefix: 'fas',\n iconName: 'syringe',\n icon: [512, 512, [], \"f48e\", \"M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z\"]\n};\nvar faTable = {\n prefix: 'fas',\n iconName: 'table',\n icon: [512, 512, [], \"f0ce\", \"M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z\"]\n};\nvar faTableTennis = {\n prefix: 'fas',\n iconName: 'table-tennis',\n icon: [512, 512, [], \"f45d\", \"M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z\"]\n};\nvar faTablet = {\n prefix: 'fas',\n iconName: 'tablet',\n icon: [448, 512, [], \"f10a\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z\"]\n};\nvar faTabletAlt = {\n prefix: 'fas',\n iconName: 'tablet-alt',\n icon: [448, 512, [], \"f3fa\", \"M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z\"]\n};\nvar faTablets = {\n prefix: 'fas',\n iconName: 'tablets',\n icon: [640, 512, [], \"f490\", \"M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z\"]\n};\nvar faTachometerAlt = {\n prefix: 'fas',\n iconName: 'tachometer-alt',\n icon: [576, 512, [], \"f3fd\", \"M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTag = {\n prefix: 'fas',\n iconName: 'tag',\n icon: [512, 512, [], \"f02b\", \"M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z\"]\n};\nvar faTags = {\n prefix: 'fas',\n iconName: 'tags',\n icon: [640, 512, [], \"f02c\", \"M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z\"]\n};\nvar faTape = {\n prefix: 'fas',\n iconName: 'tape',\n icon: [640, 512, [], \"f4db\", \"M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z\"]\n};\nvar faTasks = {\n prefix: 'fas',\n iconName: 'tasks',\n icon: [512, 512, [], \"f0ae\", \"M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faTaxi = {\n prefix: 'fas',\n iconName: 'taxi',\n icon: [512, 512, [], \"f1ba\", \"M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faTeeth = {\n prefix: 'fas',\n iconName: 'teeth',\n icon: [640, 512, [], \"f62e\", \"M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z\"]\n};\nvar faTeethOpen = {\n prefix: 'fas',\n iconName: 'teeth-open',\n icon: [640, 512, [], \"f62f\", \"M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z\"]\n};\nvar faTemperatureHigh = {\n prefix: 'fas',\n iconName: 'temperature-high',\n icon: [512, 512, [], \"f769\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTemperatureLow = {\n prefix: 'fas',\n iconName: 'temperature-low',\n icon: [512, 512, [], \"f76b\", \"M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z\"]\n};\nvar faTenge = {\n prefix: 'fas',\n iconName: 'tenge',\n icon: [384, 512, [], \"f7d7\", \"M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z\"]\n};\nvar faTerminal = {\n prefix: 'fas',\n iconName: 'terminal',\n icon: [640, 512, [], \"f120\", \"M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z\"]\n};\nvar faTextHeight = {\n prefix: 'fas',\n iconName: 'text-height',\n icon: [576, 512, [], \"f034\", \"M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z\"]\n};\nvar faTextWidth = {\n prefix: 'fas',\n iconName: 'text-width',\n icon: [448, 512, [], \"f035\", \"M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z\"]\n};\nvar faTh = {\n prefix: 'fas',\n iconName: 'th',\n icon: [512, 512, [], \"f00a\", \"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z\"]\n};\nvar faThLarge = {\n prefix: 'fas',\n iconName: 'th-large',\n icon: [512, 512, [], \"f009\", \"M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z\"]\n};\nvar faThList = {\n prefix: 'fas',\n iconName: 'th-list',\n icon: [512, 512, [], \"f00b\", \"M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z\"]\n};\nvar faTheaterMasks = {\n prefix: 'fas',\n iconName: 'theater-masks',\n icon: [640, 512, [], \"f630\", \"M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z\"]\n};\nvar faThermometer = {\n prefix: 'fas',\n iconName: 'thermometer',\n icon: [512, 512, [], \"f491\", \"M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z\"]\n};\nvar faThermometerEmpty = {\n prefix: 'fas',\n iconName: 'thermometer-empty',\n icon: [256, 512, [], \"f2cb\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerFull = {\n prefix: 'fas',\n iconName: 'thermometer-full',\n icon: [256, 512, [], \"f2c7\", \"M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z\"]\n};\nvar faThermometerHalf = {\n prefix: 'fas',\n iconName: 'thermometer-half',\n icon: [256, 512, [], \"f2c9\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerQuarter = {\n prefix: 'fas',\n iconName: 'thermometer-quarter',\n icon: [256, 512, [], \"f2ca\", \"M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThermometerThreeQuarters = {\n prefix: 'fas',\n iconName: 'thermometer-three-quarters',\n icon: [256, 512, [], \"f2c8\", \"M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z\"]\n};\nvar faThumbsDown = {\n prefix: 'fas',\n iconName: 'thumbs-down',\n icon: [512, 512, [], \"f165\", \"M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z\"]\n};\nvar faThumbsUp = {\n prefix: 'fas',\n iconName: 'thumbs-up',\n icon: [512, 512, [], \"f164\", \"M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z\"]\n};\nvar faThumbtack = {\n prefix: 'fas',\n iconName: 'thumbtack',\n icon: [384, 512, [], \"f08d\", \"M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z\"]\n};\nvar faTicketAlt = {\n prefix: 'fas',\n iconName: 'ticket-alt',\n icon: [576, 512, [], \"f3ff\", \"M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z\"]\n};\nvar faTimes = {\n prefix: 'fas',\n iconName: 'times',\n icon: [352, 512, [], \"f00d\", \"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"]\n};\nvar faTimesCircle = {\n prefix: 'fas',\n iconName: 'times-circle',\n icon: [512, 512, [], \"f057\", \"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"]\n};\nvar faTint = {\n prefix: 'fas',\n iconName: 'tint',\n icon: [352, 512, [], \"f043\", \"M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"]\n};\nvar faTintSlash = {\n prefix: 'fas',\n iconName: 'tint-slash',\n icon: [640, 512, [], \"f5c7\", \"M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z\"]\n};\nvar faTired = {\n prefix: 'fas',\n iconName: 'tired',\n icon: [496, 512, [], \"f5c8\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z\"]\n};\nvar faToggleOff = {\n prefix: 'fas',\n iconName: 'toggle-off',\n icon: [576, 512, [], \"f204\", \"M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z\"]\n};\nvar faToggleOn = {\n prefix: 'fas',\n iconName: 'toggle-on',\n icon: [576, 512, [], \"f205\", \"M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z\"]\n};\nvar faToilet = {\n prefix: 'fas',\n iconName: 'toilet',\n icon: [384, 512, [], \"f7d8\", \"M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z\"]\n};\nvar faToiletPaper = {\n prefix: 'fas',\n iconName: 'toilet-paper',\n icon: [576, 512, [], \"f71e\", \"M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z\"]\n};\nvar faToolbox = {\n prefix: 'fas',\n iconName: 'toolbox',\n icon: [512, 512, [], \"f552\", \"M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z\"]\n};\nvar faTools = {\n prefix: 'fas',\n iconName: 'tools',\n icon: [512, 512, [], \"f7d9\", \"M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z\"]\n};\nvar faTooth = {\n prefix: 'fas',\n iconName: 'tooth',\n icon: [448, 512, [], \"f5c9\", \"M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z\"]\n};\nvar faTorah = {\n prefix: 'fas',\n iconName: 'torah',\n icon: [640, 512, [], \"f6a0\", \"M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z\"]\n};\nvar faToriiGate = {\n prefix: 'fas',\n iconName: 'torii-gate',\n icon: [512, 512, [], \"f6a1\", \"M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z\"]\n};\nvar faTractor = {\n prefix: 'fas',\n iconName: 'tractor',\n icon: [640, 512, [], \"f722\", \"M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z\"]\n};\nvar faTrademark = {\n prefix: 'fas',\n iconName: 'trademark',\n icon: [640, 512, [], \"f25c\", \"M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z\"]\n};\nvar faTrafficLight = {\n prefix: 'fas',\n iconName: 'traffic-light',\n icon: [384, 512, [], \"f637\", \"M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTrain = {\n prefix: 'fas',\n iconName: 'train',\n icon: [448, 512, [], \"f238\", \"M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z\"]\n};\nvar faTram = {\n prefix: 'fas',\n iconName: 'tram',\n icon: [512, 512, [], \"f7da\", \"M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z\"]\n};\nvar faTransgender = {\n prefix: 'fas',\n iconName: 'transgender',\n icon: [384, 512, [], \"f224\", \"M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTransgenderAlt = {\n prefix: 'fas',\n iconName: 'transgender-alt',\n icon: [480, 512, [], \"f225\", \"M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faTrash = {\n prefix: 'fas',\n iconName: 'trash',\n icon: [448, 512, [], \"f1f8\", \"M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z\"]\n};\nvar faTrashAlt = {\n prefix: 'fas',\n iconName: 'trash-alt',\n icon: [448, 512, [], \"f2ed\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestore = {\n prefix: 'fas',\n iconName: 'trash-restore',\n icon: [448, 512, [], \"f829\", \"M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTrashRestoreAlt = {\n prefix: 'fas',\n iconName: 'trash-restore-alt',\n icon: [448, 512, [], \"f82a\", \"M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"]\n};\nvar faTree = {\n prefix: 'fas',\n iconName: 'tree',\n icon: [384, 512, [], \"f1bb\", \"M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z\"]\n};\nvar faTrophy = {\n prefix: 'fas',\n iconName: 'trophy',\n icon: [576, 512, [], \"f091\", \"M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z\"]\n};\nvar faTruck = {\n prefix: 'fas',\n iconName: 'truck',\n icon: [640, 512, [], \"f0d1\", \"M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z\"]\n};\nvar faTruckLoading = {\n prefix: 'fas',\n iconName: 'truck-loading',\n icon: [640, 512, [], \"f4de\", \"M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z\"]\n};\nvar faTruckMonster = {\n prefix: 'fas',\n iconName: 'truck-monster',\n icon: [640, 512, [], \"f63b\", \"M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z\"]\n};\nvar faTruckMoving = {\n prefix: 'fas',\n iconName: 'truck-moving',\n icon: [640, 512, [], \"f4df\", \"M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z\"]\n};\nvar faTruckPickup = {\n prefix: 'fas',\n iconName: 'truck-pickup',\n icon: [640, 512, [], \"f63c\", \"M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z\"]\n};\nvar faTshirt = {\n prefix: 'fas',\n iconName: 'tshirt',\n icon: [640, 512, [], \"f553\", \"M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z\"]\n};\nvar faTty = {\n prefix: 'fas',\n iconName: 'tty',\n icon: [512, 512, [], \"f1e4\", \"M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z\"]\n};\nvar faTv = {\n prefix: 'fas',\n iconName: 'tv',\n icon: [640, 512, [], \"f26c\", \"M592 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h245.1v32h-160c-17.7 0-32 14.3-32 32s14.3 32 32 32h384c17.7 0 32-14.3 32-32s-14.3-32-32-32h-160v-32H592c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h512v288z\"]\n};\nvar faUmbrella = {\n prefix: 'fas',\n iconName: 'umbrella',\n icon: [576, 512, [], \"f0e9\", \"M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z\"]\n};\nvar faUmbrellaBeach = {\n prefix: 'fas',\n iconName: 'umbrella-beach',\n icon: [640, 512, [], \"f5ca\", \"M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z\"]\n};\nvar faUnderline = {\n prefix: 'fas',\n iconName: 'underline',\n icon: [448, 512, [], \"f0cd\", \"M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z\"]\n};\nvar faUndo = {\n prefix: 'fas',\n iconName: 'undo',\n icon: [512, 512, [], \"f0e2\", \"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z\"]\n};\nvar faUndoAlt = {\n prefix: 'fas',\n iconName: 'undo-alt',\n icon: [512, 512, [], \"f2ea\", \"M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z\"]\n};\nvar faUniversalAccess = {\n prefix: 'fas',\n iconName: 'universal-access',\n icon: [512, 512, [], \"f29a\", \"M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z\"]\n};\nvar faUniversity = {\n prefix: 'fas',\n iconName: 'university',\n icon: [512, 512, [], \"f19c\", \"M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z\"]\n};\nvar faUnlink = {\n prefix: 'fas',\n iconName: 'unlink',\n icon: [512, 512, [], \"f127\", \"M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z\"]\n};\nvar faUnlock = {\n prefix: 'fas',\n iconName: 'unlock',\n icon: [448, 512, [], \"f09c\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z\"]\n};\nvar faUnlockAlt = {\n prefix: 'fas',\n iconName: 'unlock-alt',\n icon: [448, 512, [], \"f13e\", \"M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z\"]\n};\nvar faUpload = {\n prefix: 'fas',\n iconName: 'upload',\n icon: [512, 512, [], \"f093\", \"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z\"]\n};\nvar faUser = {\n prefix: 'fas',\n iconName: 'user',\n icon: [448, 512, [], \"f007\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserAlt = {\n prefix: 'fas',\n iconName: 'user-alt',\n icon: [512, 512, [], \"f406\", \"M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z\"]\n};\nvar faUserAltSlash = {\n prefix: 'fas',\n iconName: 'user-alt-slash',\n icon: [640, 512, [], \"f4fa\", \"M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z\"]\n};\nvar faUserAstronaut = {\n prefix: 'fas',\n iconName: 'user-astronaut',\n icon: [448, 512, [], \"f4fb\", \"M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z\"]\n};\nvar faUserCheck = {\n prefix: 'fas',\n iconName: 'user-check',\n icon: [640, 512, [], \"f4fc\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"]\n};\nvar faUserCircle = {\n prefix: 'fas',\n iconName: 'user-circle',\n icon: [496, 512, [], \"f2bd\", \"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z\"]\n};\nvar faUserClock = {\n prefix: 'fas',\n iconName: 'user-clock',\n icon: [640, 512, [], \"f4fd\", \"M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z\"]\n};\nvar faUserCog = {\n prefix: 'fas',\n iconName: 'user-cog',\n icon: [640, 512, [], \"f4fe\", \"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"]\n};\nvar faUserEdit = {\n prefix: 'fas',\n iconName: 'user-edit',\n icon: [640, 512, [], \"f4ff\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z\"]\n};\nvar faUserFriends = {\n prefix: 'fas',\n iconName: 'user-friends',\n icon: [640, 512, [], \"f500\", \"M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z\"]\n};\nvar faUserGraduate = {\n prefix: 'fas',\n iconName: 'user-graduate',\n icon: [448, 512, [], \"f501\", \"M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z\"]\n};\nvar faUserInjured = {\n prefix: 'fas',\n iconName: 'user-injured',\n icon: [448, 512, [], \"f728\", \"M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z\"]\n};\nvar faUserLock = {\n prefix: 'fas',\n iconName: 'user-lock',\n icon: [640, 512, [], \"f502\", \"M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z\"]\n};\nvar faUserMd = {\n prefix: 'fas',\n iconName: 'user-md',\n icon: [448, 512, [], \"f0f0\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z\"]\n};\nvar faUserMinus = {\n prefix: 'fas',\n iconName: 'user-minus',\n icon: [640, 512, [], \"f503\", \"M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserNinja = {\n prefix: 'fas',\n iconName: 'user-ninja',\n icon: [448, 512, [], \"f504\", \"M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z\"]\n};\nvar faUserNurse = {\n prefix: 'fas',\n iconName: 'user-nurse',\n icon: [448, 512, [], \"f82f\", \"M57.78 288h82.36c22.51 19.68 51.62 32 83.86 32s61.35-12.32 83.86-32h82.36a16 16 0 0 0 14.28-23.18c-15.23-29.85-31.28-62.23-42.15-95.54C354.78 146.09 352 121.59 352 97.2V48L224 0 96 48v49.2c0 24.39-2.75 48.89-10.33 72.08C74.78 202.59 58.73 235 43.5 264.82A16 16 0 0 0 57.78 288zM184 71.67a5 5 0 0 1 5-5h21.67V45a5 5 0 0 1 5-5h16.66a5 5 0 0 1 5 5v21.67H259a5 5 0 0 1 5 5v16.66a5 5 0 0 1-5 5h-21.67V115a5 5 0 0 1-5 5h-16.66a5 5 0 0 1-5-5V93.33H189a5 5 0 0 1-5-5zM144 160h160v32a80 80 0 0 1-160 0zm175.41 160L224 415.39 128.59 320C57.1 323.1 0 381.6 0 453.79A58.21 58.21 0 0 0 58.21 512h331.58A58.21 58.21 0 0 0 448 453.79C448 381.6 390.9 323.1 319.41 320z\"]\n};\nvar faUserPlus = {\n prefix: 'fas',\n iconName: 'user-plus',\n icon: [640, 512, [], \"f234\", \"M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUserSecret = {\n prefix: 'fas',\n iconName: 'user-secret',\n icon: [448, 512, [], \"f21b\", \"M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z\"]\n};\nvar faUserShield = {\n prefix: 'fas',\n iconName: 'user-shield',\n icon: [640, 512, [], \"f505\", \"M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z\"]\n};\nvar faUserSlash = {\n prefix: 'fas',\n iconName: 'user-slash',\n icon: [640, 512, [], \"f506\", \"M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z\"]\n};\nvar faUserTag = {\n prefix: 'fas',\n iconName: 'user-tag',\n icon: [640, 512, [], \"f507\", \"M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z\"]\n};\nvar faUserTie = {\n prefix: 'fas',\n iconName: 'user-tie',\n icon: [448, 512, [], \"f508\", \"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z\"]\n};\nvar faUserTimes = {\n prefix: 'fas',\n iconName: 'user-times',\n icon: [640, 512, [], \"f235\", \"M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z\"]\n};\nvar faUsers = {\n prefix: 'fas',\n iconName: 'users',\n icon: [640, 512, [], \"f0c0\", \"M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUsersCog = {\n prefix: 'fas',\n iconName: 'users-cog',\n icon: [640, 512, [], \"f509\", \"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"]\n};\nvar faUtensilSpoon = {\n prefix: 'fas',\n iconName: 'utensil-spoon',\n icon: [512, 512, [], \"f2e5\", \"M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z\"]\n};\nvar faUtensils = {\n prefix: 'fas',\n iconName: 'utensils',\n icon: [416, 512, [], \"f2e7\", \"M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z\"]\n};\nvar faVectorSquare = {\n prefix: 'fas',\n iconName: 'vector-square',\n icon: [512, 512, [], \"f5cb\", \"M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z\"]\n};\nvar faVenus = {\n prefix: 'fas',\n iconName: 'venus',\n icon: [288, 512, [], \"f221\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z\"]\n};\nvar faVenusDouble = {\n prefix: 'fas',\n iconName: 'venus-double',\n icon: [512, 512, [], \"f226\", \"M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z\"]\n};\nvar faVenusMars = {\n prefix: 'fas',\n iconName: 'venus-mars',\n icon: [576, 512, [], \"f228\", \"M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z\"]\n};\nvar faVial = {\n prefix: 'fas',\n iconName: 'vial',\n icon: [480, 512, [], \"f492\", \"M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z\"]\n};\nvar faVials = {\n prefix: 'fas',\n iconName: 'vials',\n icon: [640, 512, [], \"f493\", \"M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z\"]\n};\nvar faVideo = {\n prefix: 'fas',\n iconName: 'video',\n icon: [576, 512, [], \"f03d\", \"M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z\"]\n};\nvar faVideoSlash = {\n prefix: 'fas',\n iconName: 'video-slash',\n icon: [640, 512, [], \"f4e2\", \"M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z\"]\n};\nvar faVihara = {\n prefix: 'fas',\n iconName: 'vihara',\n icon: [640, 512, [], \"f6a7\", \"M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z\"]\n};\nvar faVoicemail = {\n prefix: 'fas',\n iconName: 'voicemail',\n icon: [640, 512, [], \"f897\", \"M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z\"]\n};\nvar faVolleyballBall = {\n prefix: 'fas',\n iconName: 'volleyball-ball',\n icon: [512, 512, [], \"f45f\", \"M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z\"]\n};\nvar faVolumeDown = {\n prefix: 'fas',\n iconName: 'volume-down',\n icon: [384, 512, [], \"f027\", \"M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z\"]\n};\nvar faVolumeMute = {\n prefix: 'fas',\n iconName: 'volume-mute',\n icon: [512, 512, [], \"f6a9\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z\"]\n};\nvar faVolumeOff = {\n prefix: 'fas',\n iconName: 'volume-off',\n icon: [256, 512, [], \"f026\", \"M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z\"]\n};\nvar faVolumeUp = {\n prefix: 'fas',\n iconName: 'volume-up',\n icon: [576, 512, [], \"f028\", \"M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z\"]\n};\nvar faVoteYea = {\n prefix: 'fas',\n iconName: 'vote-yea',\n icon: [640, 512, [], \"f772\", \"M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z\"]\n};\nvar faVrCardboard = {\n prefix: 'fas',\n iconName: 'vr-cardboard',\n icon: [640, 512, [], \"f729\", \"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"]\n};\nvar faWalking = {\n prefix: 'fas',\n iconName: 'walking',\n icon: [320, 512, [], \"f554\", \"M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z\"]\n};\nvar faWallet = {\n prefix: 'fas',\n iconName: 'wallet',\n icon: [512, 512, [], \"f555\", \"M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z\"]\n};\nvar faWarehouse = {\n prefix: 'fas',\n iconName: 'warehouse',\n icon: [640, 512, [], \"f494\", \"M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z\"]\n};\nvar faWater = {\n prefix: 'fas',\n iconName: 'water',\n icon: [576, 512, [], \"f773\", \"M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z\"]\n};\nvar faWaveSquare = {\n prefix: 'fas',\n iconName: 'wave-square',\n icon: [640, 512, [], \"f83e\", \"M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z\"]\n};\nvar faWeight = {\n prefix: 'fas',\n iconName: 'weight',\n icon: [512, 512, [], \"f496\", \"M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z\"]\n};\nvar faWeightHanging = {\n prefix: 'fas',\n iconName: 'weight-hanging',\n icon: [512, 512, [], \"f5cd\", \"M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z\"]\n};\nvar faWheelchair = {\n prefix: 'fas',\n iconName: 'wheelchair',\n icon: [512, 512, [], \"f193\", \"M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z\"]\n};\nvar faWifi = {\n prefix: 'fas',\n iconName: 'wifi',\n icon: [640, 512, [], \"f1eb\", \"M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z\"]\n};\nvar faWind = {\n prefix: 'fas',\n iconName: 'wind',\n icon: [512, 512, [], \"f72e\", \"M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z\"]\n};\nvar faWindowClose = {\n prefix: 'fas',\n iconName: 'window-close',\n icon: [512, 512, [], \"f410\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z\"]\n};\nvar faWindowMaximize = {\n prefix: 'fas',\n iconName: 'window-maximize',\n icon: [512, 512, [], \"f2d0\", \"M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z\"]\n};\nvar faWindowMinimize = {\n prefix: 'fas',\n iconName: 'window-minimize',\n icon: [512, 512, [], \"f2d1\", \"M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z\"]\n};\nvar faWindowRestore = {\n prefix: 'fas',\n iconName: 'window-restore',\n icon: [512, 512, [], \"f2d2\", \"M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z\"]\n};\nvar faWineBottle = {\n prefix: 'fas',\n iconName: 'wine-bottle',\n icon: [512, 512, [], \"f72f\", \"M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z\"]\n};\nvar faWineGlass = {\n prefix: 'fas',\n iconName: 'wine-glass',\n icon: [288, 512, [], \"f4e3\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z\"]\n};\nvar faWineGlassAlt = {\n prefix: 'fas',\n iconName: 'wine-glass-alt',\n icon: [288, 512, [], \"f5ce\", \"M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z\"]\n};\nvar faWonSign = {\n prefix: 'fas',\n iconName: 'won-sign',\n icon: [576, 512, [], \"f159\", \"M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z\"]\n};\nvar faWrench = {\n prefix: 'fas',\n iconName: 'wrench',\n icon: [512, 512, [], \"f0ad\", \"M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"]\n};\nvar faXRay = {\n prefix: 'fas',\n iconName: 'x-ray',\n icon: [640, 512, [], \"f497\", \"M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z\"]\n};\nvar faYenSign = {\n prefix: 'fas',\n iconName: 'yen-sign',\n icon: [384, 512, [], \"f157\", \"M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z\"]\n};\nvar faYinYang = {\n prefix: 'fas',\n iconName: 'yin-yang',\n icon: [496, 512, [], \"f6ad\", \"M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z\"]\n};\nvar _iconsCache = {\n faAd: faAd,\n faAddressBook: faAddressBook,\n faAddressCard: faAddressCard,\n faAdjust: faAdjust,\n faAirFreshener: faAirFreshener,\n faAlignCenter: faAlignCenter,\n faAlignJustify: faAlignJustify,\n faAlignLeft: faAlignLeft,\n faAlignRight: faAlignRight,\n faAllergies: faAllergies,\n faAmbulance: faAmbulance,\n faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting,\n faAnchor: faAnchor,\n faAngleDoubleDown: faAngleDoubleDown,\n faAngleDoubleLeft: faAngleDoubleLeft,\n faAngleDoubleRight: faAngleDoubleRight,\n faAngleDoubleUp: faAngleDoubleUp,\n faAngleDown: faAngleDown,\n faAngleLeft: faAngleLeft,\n faAngleRight: faAngleRight,\n faAngleUp: faAngleUp,\n faAngry: faAngry,\n faAnkh: faAnkh,\n faAppleAlt: faAppleAlt,\n faArchive: faArchive,\n faArchway: faArchway,\n faArrowAltCircleDown: faArrowAltCircleDown,\n faArrowAltCircleLeft: faArrowAltCircleLeft,\n faArrowAltCircleRight: faArrowAltCircleRight,\n faArrowAltCircleUp: faArrowAltCircleUp,\n faArrowCircleDown: faArrowCircleDown,\n faArrowCircleLeft: faArrowCircleLeft,\n faArrowCircleRight: faArrowCircleRight,\n faArrowCircleUp: faArrowCircleUp,\n faArrowDown: faArrowDown,\n faArrowLeft: faArrowLeft,\n faArrowRight: faArrowRight,\n faArrowUp: faArrowUp,\n faArrowsAlt: faArrowsAlt,\n faArrowsAltH: faArrowsAltH,\n faArrowsAltV: faArrowsAltV,\n faAssistiveListeningSystems: faAssistiveListeningSystems,\n faAsterisk: faAsterisk,\n faAt: faAt,\n faAtlas: faAtlas,\n faAtom: faAtom,\n faAudioDescription: faAudioDescription,\n faAward: faAward,\n faBaby: faBaby,\n faBabyCarriage: faBabyCarriage,\n faBackspace: faBackspace,\n faBackward: faBackward,\n faBacon: faBacon,\n faBalanceScale: faBalanceScale,\n faBalanceScaleLeft: faBalanceScaleLeft,\n faBalanceScaleRight: faBalanceScaleRight,\n faBan: faBan,\n faBandAid: faBandAid,\n faBarcode: faBarcode,\n faBars: faBars,\n faBaseballBall: faBaseballBall,\n faBasketballBall: faBasketballBall,\n faBath: faBath,\n faBatteryEmpty: faBatteryEmpty,\n faBatteryFull: faBatteryFull,\n faBatteryHalf: faBatteryHalf,\n faBatteryQuarter: faBatteryQuarter,\n faBatteryThreeQuarters: faBatteryThreeQuarters,\n faBed: faBed,\n faBeer: faBeer,\n faBell: faBell,\n faBellSlash: faBellSlash,\n faBezierCurve: faBezierCurve,\n faBible: faBible,\n faBicycle: faBicycle,\n faBiking: faBiking,\n faBinoculars: faBinoculars,\n faBiohazard: faBiohazard,\n faBirthdayCake: faBirthdayCake,\n faBlender: faBlender,\n faBlenderPhone: faBlenderPhone,\n faBlind: faBlind,\n faBlog: faBlog,\n faBold: faBold,\n faBolt: faBolt,\n faBomb: faBomb,\n faBone: faBone,\n faBong: faBong,\n faBook: faBook,\n faBookDead: faBookDead,\n faBookMedical: faBookMedical,\n faBookOpen: faBookOpen,\n faBookReader: faBookReader,\n faBookmark: faBookmark,\n faBorderAll: faBorderAll,\n faBorderNone: faBorderNone,\n faBorderStyle: faBorderStyle,\n faBowlingBall: faBowlingBall,\n faBox: faBox,\n faBoxOpen: faBoxOpen,\n faBoxes: faBoxes,\n faBraille: faBraille,\n faBrain: faBrain,\n faBreadSlice: faBreadSlice,\n faBriefcase: faBriefcase,\n faBriefcaseMedical: faBriefcaseMedical,\n faBroadcastTower: faBroadcastTower,\n faBroom: faBroom,\n faBrush: faBrush,\n faBug: faBug,\n faBuilding: faBuilding,\n faBullhorn: faBullhorn,\n faBullseye: faBullseye,\n faBurn: faBurn,\n faBus: faBus,\n faBusAlt: faBusAlt,\n faBusinessTime: faBusinessTime,\n faCalculator: faCalculator,\n faCalendar: faCalendar,\n faCalendarAlt: faCalendarAlt,\n faCalendarCheck: faCalendarCheck,\n faCalendarDay: faCalendarDay,\n faCalendarMinus: faCalendarMinus,\n faCalendarPlus: faCalendarPlus,\n faCalendarTimes: faCalendarTimes,\n faCalendarWeek: faCalendarWeek,\n faCamera: faCamera,\n faCameraRetro: faCameraRetro,\n faCampground: faCampground,\n faCandyCane: faCandyCane,\n faCannabis: faCannabis,\n faCapsules: faCapsules,\n faCar: faCar,\n faCarAlt: faCarAlt,\n faCarBattery: faCarBattery,\n faCarCrash: faCarCrash,\n faCarSide: faCarSide,\n faCaretDown: faCaretDown,\n faCaretLeft: faCaretLeft,\n faCaretRight: faCaretRight,\n faCaretSquareDown: faCaretSquareDown,\n faCaretSquareLeft: faCaretSquareLeft,\n faCaretSquareRight: faCaretSquareRight,\n faCaretSquareUp: faCaretSquareUp,\n faCaretUp: faCaretUp,\n faCarrot: faCarrot,\n faCartArrowDown: faCartArrowDown,\n faCartPlus: faCartPlus,\n faCashRegister: faCashRegister,\n faCat: faCat,\n faCertificate: faCertificate,\n faChair: faChair,\n faChalkboard: faChalkboard,\n faChalkboardTeacher: faChalkboardTeacher,\n faChargingStation: faChargingStation,\n faChartArea: faChartArea,\n faChartBar: faChartBar,\n faChartLine: faChartLine,\n faChartPie: faChartPie,\n faCheck: faCheck,\n faCheckCircle: faCheckCircle,\n faCheckDouble: faCheckDouble,\n faCheckSquare: faCheckSquare,\n faCheese: faCheese,\n faChess: faChess,\n faChessBishop: faChessBishop,\n faChessBoard: faChessBoard,\n faChessKing: faChessKing,\n faChessKnight: faChessKnight,\n faChessPawn: faChessPawn,\n faChessQueen: faChessQueen,\n faChessRook: faChessRook,\n faChevronCircleDown: faChevronCircleDown,\n faChevronCircleLeft: faChevronCircleLeft,\n faChevronCircleRight: faChevronCircleRight,\n faChevronCircleUp: faChevronCircleUp,\n faChevronDown: faChevronDown,\n faChevronLeft: faChevronLeft,\n faChevronRight: faChevronRight,\n faChevronUp: faChevronUp,\n faChild: faChild,\n faChurch: faChurch,\n faCircle: faCircle,\n faCircleNotch: faCircleNotch,\n faCity: faCity,\n faClinicMedical: faClinicMedical,\n faClipboard: faClipboard,\n faClipboardCheck: faClipboardCheck,\n faClipboardList: faClipboardList,\n faClock: faClock,\n faClone: faClone,\n faClosedCaptioning: faClosedCaptioning,\n faCloud: faCloud,\n faCloudDownloadAlt: faCloudDownloadAlt,\n faCloudMeatball: faCloudMeatball,\n faCloudMoon: faCloudMoon,\n faCloudMoonRain: faCloudMoonRain,\n faCloudRain: faCloudRain,\n faCloudShowersHeavy: faCloudShowersHeavy,\n faCloudSun: faCloudSun,\n faCloudSunRain: faCloudSunRain,\n faCloudUploadAlt: faCloudUploadAlt,\n faCocktail: faCocktail,\n faCode: faCode,\n faCodeBranch: faCodeBranch,\n faCoffee: faCoffee,\n faCog: faCog,\n faCogs: faCogs,\n faCoins: faCoins,\n faColumns: faColumns,\n faComment: faComment,\n faCommentAlt: faCommentAlt,\n faCommentDollar: faCommentDollar,\n faCommentDots: faCommentDots,\n faCommentMedical: faCommentMedical,\n faCommentSlash: faCommentSlash,\n faComments: faComments,\n faCommentsDollar: faCommentsDollar,\n faCompactDisc: faCompactDisc,\n faCompass: faCompass,\n faCompress: faCompress,\n faCompressArrowsAlt: faCompressArrowsAlt,\n faConciergeBell: faConciergeBell,\n faCookie: faCookie,\n faCookieBite: faCookieBite,\n faCopy: faCopy,\n faCopyright: faCopyright,\n faCouch: faCouch,\n faCreditCard: faCreditCard,\n faCrop: faCrop,\n faCropAlt: faCropAlt,\n faCross: faCross,\n faCrosshairs: faCrosshairs,\n faCrow: faCrow,\n faCrown: faCrown,\n faCrutch: faCrutch,\n faCube: faCube,\n faCubes: faCubes,\n faCut: faCut,\n faDatabase: faDatabase,\n faDeaf: faDeaf,\n faDemocrat: faDemocrat,\n faDesktop: faDesktop,\n faDharmachakra: faDharmachakra,\n faDiagnoses: faDiagnoses,\n faDice: faDice,\n faDiceD20: faDiceD20,\n faDiceD6: faDiceD6,\n faDiceFive: faDiceFive,\n faDiceFour: faDiceFour,\n faDiceOne: faDiceOne,\n faDiceSix: faDiceSix,\n faDiceThree: faDiceThree,\n faDiceTwo: faDiceTwo,\n faDigitalTachograph: faDigitalTachograph,\n faDirections: faDirections,\n faDivide: faDivide,\n faDizzy: faDizzy,\n faDna: faDna,\n faDog: faDog,\n faDollarSign: faDollarSign,\n faDolly: faDolly,\n faDollyFlatbed: faDollyFlatbed,\n faDonate: faDonate,\n faDoorClosed: faDoorClosed,\n faDoorOpen: faDoorOpen,\n faDotCircle: faDotCircle,\n faDove: faDove,\n faDownload: faDownload,\n faDraftingCompass: faDraftingCompass,\n faDragon: faDragon,\n faDrawPolygon: faDrawPolygon,\n faDrum: faDrum,\n faDrumSteelpan: faDrumSteelpan,\n faDrumstickBite: faDrumstickBite,\n faDumbbell: faDumbbell,\n faDumpster: faDumpster,\n faDumpsterFire: faDumpsterFire,\n faDungeon: faDungeon,\n faEdit: faEdit,\n faEgg: faEgg,\n faEject: faEject,\n faEllipsisH: faEllipsisH,\n faEllipsisV: faEllipsisV,\n faEnvelope: faEnvelope,\n faEnvelopeOpen: faEnvelopeOpen,\n faEnvelopeOpenText: faEnvelopeOpenText,\n faEnvelopeSquare: faEnvelopeSquare,\n faEquals: faEquals,\n faEraser: faEraser,\n faEthernet: faEthernet,\n faEuroSign: faEuroSign,\n faExchangeAlt: faExchangeAlt,\n faExclamation: faExclamation,\n faExclamationCircle: faExclamationCircle,\n faExclamationTriangle: faExclamationTriangle,\n faExpand: faExpand,\n faExpandArrowsAlt: faExpandArrowsAlt,\n faExternalLinkAlt: faExternalLinkAlt,\n faExternalLinkSquareAlt: faExternalLinkSquareAlt,\n faEye: faEye,\n faEyeDropper: faEyeDropper,\n faEyeSlash: faEyeSlash,\n faFan: faFan,\n faFastBackward: faFastBackward,\n faFastForward: faFastForward,\n faFax: faFax,\n faFeather: faFeather,\n faFeatherAlt: faFeatherAlt,\n faFemale: faFemale,\n faFighterJet: faFighterJet,\n faFile: faFile,\n faFileAlt: faFileAlt,\n faFileArchive: faFileArchive,\n faFileAudio: faFileAudio,\n faFileCode: faFileCode,\n faFileContract: faFileContract,\n faFileCsv: faFileCsv,\n faFileDownload: faFileDownload,\n faFileExcel: faFileExcel,\n faFileExport: faFileExport,\n faFileImage: faFileImage,\n faFileImport: faFileImport,\n faFileInvoice: faFileInvoice,\n faFileInvoiceDollar: faFileInvoiceDollar,\n faFileMedical: faFileMedical,\n faFileMedicalAlt: faFileMedicalAlt,\n faFilePdf: faFilePdf,\n faFilePowerpoint: faFilePowerpoint,\n faFilePrescription: faFilePrescription,\n faFileSignature: faFileSignature,\n faFileUpload: faFileUpload,\n faFileVideo: faFileVideo,\n faFileWord: faFileWord,\n faFill: faFill,\n faFillDrip: faFillDrip,\n faFilm: faFilm,\n faFilter: faFilter,\n faFingerprint: faFingerprint,\n faFire: faFire,\n faFireAlt: faFireAlt,\n faFireExtinguisher: faFireExtinguisher,\n faFirstAid: faFirstAid,\n faFish: faFish,\n faFistRaised: faFistRaised,\n faFlag: faFlag,\n faFlagCheckered: faFlagCheckered,\n faFlagUsa: faFlagUsa,\n faFlask: faFlask,\n faFlushed: faFlushed,\n faFolder: faFolder,\n faFolderMinus: faFolderMinus,\n faFolderOpen: faFolderOpen,\n faFolderPlus: faFolderPlus,\n faFont: faFont,\n faFontAwesomeLogoFull: faFontAwesomeLogoFull,\n faFootballBall: faFootballBall,\n faForward: faForward,\n faFrog: faFrog,\n faFrown: faFrown,\n faFrownOpen: faFrownOpen,\n faFunnelDollar: faFunnelDollar,\n faFutbol: faFutbol,\n faGamepad: faGamepad,\n faGasPump: faGasPump,\n faGavel: faGavel,\n faGem: faGem,\n faGenderless: faGenderless,\n faGhost: faGhost,\n faGift: faGift,\n faGifts: faGifts,\n faGlassCheers: faGlassCheers,\n faGlassMartini: faGlassMartini,\n faGlassMartiniAlt: faGlassMartiniAlt,\n faGlassWhiskey: faGlassWhiskey,\n faGlasses: faGlasses,\n faGlobe: faGlobe,\n faGlobeAfrica: faGlobeAfrica,\n faGlobeAmericas: faGlobeAmericas,\n faGlobeAsia: faGlobeAsia,\n faGlobeEurope: faGlobeEurope,\n faGolfBall: faGolfBall,\n faGopuram: faGopuram,\n faGraduationCap: faGraduationCap,\n faGreaterThan: faGreaterThan,\n faGreaterThanEqual: faGreaterThanEqual,\n faGrimace: faGrimace,\n faGrin: faGrin,\n faGrinAlt: faGrinAlt,\n faGrinBeam: faGrinBeam,\n faGrinBeamSweat: faGrinBeamSweat,\n faGrinHearts: faGrinHearts,\n faGrinSquint: faGrinSquint,\n faGrinSquintTears: faGrinSquintTears,\n faGrinStars: faGrinStars,\n faGrinTears: faGrinTears,\n faGrinTongue: faGrinTongue,\n faGrinTongueSquint: faGrinTongueSquint,\n faGrinTongueWink: faGrinTongueWink,\n faGrinWink: faGrinWink,\n faGripHorizontal: faGripHorizontal,\n faGripLines: faGripLines,\n faGripLinesVertical: faGripLinesVertical,\n faGripVertical: faGripVertical,\n faGuitar: faGuitar,\n faHSquare: faHSquare,\n faHamburger: faHamburger,\n faHammer: faHammer,\n faHamsa: faHamsa,\n faHandHolding: faHandHolding,\n faHandHoldingHeart: faHandHoldingHeart,\n faHandHoldingUsd: faHandHoldingUsd,\n faHandLizard: faHandLizard,\n faHandMiddleFinger: faHandMiddleFinger,\n faHandPaper: faHandPaper,\n faHandPeace: faHandPeace,\n faHandPointDown: faHandPointDown,\n faHandPointLeft: faHandPointLeft,\n faHandPointRight: faHandPointRight,\n faHandPointUp: faHandPointUp,\n faHandPointer: faHandPointer,\n faHandRock: faHandRock,\n faHandScissors: faHandScissors,\n faHandSpock: faHandSpock,\n faHands: faHands,\n faHandsHelping: faHandsHelping,\n faHandshake: faHandshake,\n faHanukiah: faHanukiah,\n faHardHat: faHardHat,\n faHashtag: faHashtag,\n faHatWizard: faHatWizard,\n faHaykal: faHaykal,\n faHdd: faHdd,\n faHeading: faHeading,\n faHeadphones: faHeadphones,\n faHeadphonesAlt: faHeadphonesAlt,\n faHeadset: faHeadset,\n faHeart: faHeart,\n faHeartBroken: faHeartBroken,\n faHeartbeat: faHeartbeat,\n faHelicopter: faHelicopter,\n faHighlighter: faHighlighter,\n faHiking: faHiking,\n faHippo: faHippo,\n faHistory: faHistory,\n faHockeyPuck: faHockeyPuck,\n faHollyBerry: faHollyBerry,\n faHome: faHome,\n faHorse: faHorse,\n faHorseHead: faHorseHead,\n faHospital: faHospital,\n faHospitalAlt: faHospitalAlt,\n faHospitalSymbol: faHospitalSymbol,\n faHotTub: faHotTub,\n faHotdog: faHotdog,\n faHotel: faHotel,\n faHourglass: faHourglass,\n faHourglassEnd: faHourglassEnd,\n faHourglassHalf: faHourglassHalf,\n faHourglassStart: faHourglassStart,\n faHouseDamage: faHouseDamage,\n faHryvnia: faHryvnia,\n faICursor: faICursor,\n faIceCream: faIceCream,\n faIcicles: faIcicles,\n faIcons: faIcons,\n faIdBadge: faIdBadge,\n faIdCard: faIdCard,\n faIdCardAlt: faIdCardAlt,\n faIgloo: faIgloo,\n faImage: faImage,\n faImages: faImages,\n faInbox: faInbox,\n faIndent: faIndent,\n faIndustry: faIndustry,\n faInfinity: faInfinity,\n faInfo: faInfo,\n faInfoCircle: faInfoCircle,\n faItalic: faItalic,\n faJedi: faJedi,\n faJoint: faJoint,\n faJournalWhills: faJournalWhills,\n faKaaba: faKaaba,\n faKey: faKey,\n faKeyboard: faKeyboard,\n faKhanda: faKhanda,\n faKiss: faKiss,\n faKissBeam: faKissBeam,\n faKissWinkHeart: faKissWinkHeart,\n faKiwiBird: faKiwiBird,\n faLandmark: faLandmark,\n faLanguage: faLanguage,\n faLaptop: faLaptop,\n faLaptopCode: faLaptopCode,\n faLaptopMedical: faLaptopMedical,\n faLaugh: faLaugh,\n faLaughBeam: faLaughBeam,\n faLaughSquint: faLaughSquint,\n faLaughWink: faLaughWink,\n faLayerGroup: faLayerGroup,\n faLeaf: faLeaf,\n faLemon: faLemon,\n faLessThan: faLessThan,\n faLessThanEqual: faLessThanEqual,\n faLevelDownAlt: faLevelDownAlt,\n faLevelUpAlt: faLevelUpAlt,\n faLifeRing: faLifeRing,\n faLightbulb: faLightbulb,\n faLink: faLink,\n faLiraSign: faLiraSign,\n faList: faList,\n faListAlt: faListAlt,\n faListOl: faListOl,\n faListUl: faListUl,\n faLocationArrow: faLocationArrow,\n faLock: faLock,\n faLockOpen: faLockOpen,\n faLongArrowAltDown: faLongArrowAltDown,\n faLongArrowAltLeft: faLongArrowAltLeft,\n faLongArrowAltRight: faLongArrowAltRight,\n faLongArrowAltUp: faLongArrowAltUp,\n faLowVision: faLowVision,\n faLuggageCart: faLuggageCart,\n faMagic: faMagic,\n faMagnet: faMagnet,\n faMailBulk: faMailBulk,\n faMale: faMale,\n faMap: faMap,\n faMapMarked: faMapMarked,\n faMapMarkedAlt: faMapMarkedAlt,\n faMapMarker: faMapMarker,\n faMapMarkerAlt: faMapMarkerAlt,\n faMapPin: faMapPin,\n faMapSigns: faMapSigns,\n faMarker: faMarker,\n faMars: faMars,\n faMarsDouble: faMarsDouble,\n faMarsStroke: faMarsStroke,\n faMarsStrokeH: faMarsStrokeH,\n faMarsStrokeV: faMarsStrokeV,\n faMask: faMask,\n faMedal: faMedal,\n faMedkit: faMedkit,\n faMeh: faMeh,\n faMehBlank: faMehBlank,\n faMehRollingEyes: faMehRollingEyes,\n faMemory: faMemory,\n faMenorah: faMenorah,\n faMercury: faMercury,\n faMeteor: faMeteor,\n faMicrochip: faMicrochip,\n faMicrophone: faMicrophone,\n faMicrophoneAlt: faMicrophoneAlt,\n faMicrophoneAltSlash: faMicrophoneAltSlash,\n faMicrophoneSlash: faMicrophoneSlash,\n faMicroscope: faMicroscope,\n faMinus: faMinus,\n faMinusCircle: faMinusCircle,\n faMinusSquare: faMinusSquare,\n faMitten: faMitten,\n faMobile: faMobile,\n faMobileAlt: faMobileAlt,\n faMoneyBill: faMoneyBill,\n faMoneyBillAlt: faMoneyBillAlt,\n faMoneyBillWave: faMoneyBillWave,\n faMoneyBillWaveAlt: faMoneyBillWaveAlt,\n faMoneyCheck: faMoneyCheck,\n faMoneyCheckAlt: faMoneyCheckAlt,\n faMonument: faMonument,\n faMoon: faMoon,\n faMortarPestle: faMortarPestle,\n faMosque: faMosque,\n faMotorcycle: faMotorcycle,\n faMountain: faMountain,\n faMousePointer: faMousePointer,\n faMugHot: faMugHot,\n faMusic: faMusic,\n faNetworkWired: faNetworkWired,\n faNeuter: faNeuter,\n faNewspaper: faNewspaper,\n faNotEqual: faNotEqual,\n faNotesMedical: faNotesMedical,\n faObjectGroup: faObjectGroup,\n faObjectUngroup: faObjectUngroup,\n faOilCan: faOilCan,\n faOm: faOm,\n faOtter: faOtter,\n faOutdent: faOutdent,\n faPager: faPager,\n faPaintBrush: faPaintBrush,\n faPaintRoller: faPaintRoller,\n faPalette: faPalette,\n faPallet: faPallet,\n faPaperPlane: faPaperPlane,\n faPaperclip: faPaperclip,\n faParachuteBox: faParachuteBox,\n faParagraph: faParagraph,\n faParking: faParking,\n faPassport: faPassport,\n faPastafarianism: faPastafarianism,\n faPaste: faPaste,\n faPause: faPause,\n faPauseCircle: faPauseCircle,\n faPaw: faPaw,\n faPeace: faPeace,\n faPen: faPen,\n faPenAlt: faPenAlt,\n faPenFancy: faPenFancy,\n faPenNib: faPenNib,\n faPenSquare: faPenSquare,\n faPencilAlt: faPencilAlt,\n faPencilRuler: faPencilRuler,\n faPeopleCarry: faPeopleCarry,\n faPepperHot: faPepperHot,\n faPercent: faPercent,\n faPercentage: faPercentage,\n faPersonBooth: faPersonBooth,\n faPhone: faPhone,\n faPhoneAlt: faPhoneAlt,\n faPhoneSlash: faPhoneSlash,\n faPhoneSquare: faPhoneSquare,\n faPhoneSquareAlt: faPhoneSquareAlt,\n faPhoneVolume: faPhoneVolume,\n faPhotoVideo: faPhotoVideo,\n faPiggyBank: faPiggyBank,\n faPills: faPills,\n faPizzaSlice: faPizzaSlice,\n faPlaceOfWorship: faPlaceOfWorship,\n faPlane: faPlane,\n faPlaneArrival: faPlaneArrival,\n faPlaneDeparture: faPlaneDeparture,\n faPlay: faPlay,\n faPlayCircle: faPlayCircle,\n faPlug: faPlug,\n faPlus: faPlus,\n faPlusCircle: faPlusCircle,\n faPlusSquare: faPlusSquare,\n faPodcast: faPodcast,\n faPoll: faPoll,\n faPollH: faPollH,\n faPoo: faPoo,\n faPooStorm: faPooStorm,\n faPoop: faPoop,\n faPortrait: faPortrait,\n faPoundSign: faPoundSign,\n faPowerOff: faPowerOff,\n faPray: faPray,\n faPrayingHands: faPrayingHands,\n faPrescription: faPrescription,\n faPrescriptionBottle: faPrescriptionBottle,\n faPrescriptionBottleAlt: faPrescriptionBottleAlt,\n faPrint: faPrint,\n faProcedures: faProcedures,\n faProjectDiagram: faProjectDiagram,\n faPuzzlePiece: faPuzzlePiece,\n faQrcode: faQrcode,\n faQuestion: faQuestion,\n faQuestionCircle: faQuestionCircle,\n faQuidditch: faQuidditch,\n faQuoteLeft: faQuoteLeft,\n faQuoteRight: faQuoteRight,\n faQuran: faQuran,\n faRadiation: faRadiation,\n faRadiationAlt: faRadiationAlt,\n faRainbow: faRainbow,\n faRandom: faRandom,\n faReceipt: faReceipt,\n faRecycle: faRecycle,\n faRedo: faRedo,\n faRedoAlt: faRedoAlt,\n faRegistered: faRegistered,\n faRemoveFormat: faRemoveFormat,\n faReply: faReply,\n faReplyAll: faReplyAll,\n faRepublican: faRepublican,\n faRestroom: faRestroom,\n faRetweet: faRetweet,\n faRibbon: faRibbon,\n faRing: faRing,\n faRoad: faRoad,\n faRobot: faRobot,\n faRocket: faRocket,\n faRoute: faRoute,\n faRss: faRss,\n faRssSquare: faRssSquare,\n faRubleSign: faRubleSign,\n faRuler: faRuler,\n faRulerCombined: faRulerCombined,\n faRulerHorizontal: faRulerHorizontal,\n faRulerVertical: faRulerVertical,\n faRunning: faRunning,\n faRupeeSign: faRupeeSign,\n faSadCry: faSadCry,\n faSadTear: faSadTear,\n faSatellite: faSatellite,\n faSatelliteDish: faSatelliteDish,\n faSave: faSave,\n faSchool: faSchool,\n faScrewdriver: faScrewdriver,\n faScroll: faScroll,\n faSdCard: faSdCard,\n faSearch: faSearch,\n faSearchDollar: faSearchDollar,\n faSearchLocation: faSearchLocation,\n faSearchMinus: faSearchMinus,\n faSearchPlus: faSearchPlus,\n faSeedling: faSeedling,\n faServer: faServer,\n faShapes: faShapes,\n faShare: faShare,\n faShareAlt: faShareAlt,\n faShareAltSquare: faShareAltSquare,\n faShareSquare: faShareSquare,\n faShekelSign: faShekelSign,\n faShieldAlt: faShieldAlt,\n faShip: faShip,\n faShippingFast: faShippingFast,\n faShoePrints: faShoePrints,\n faShoppingBag: faShoppingBag,\n faShoppingBasket: faShoppingBasket,\n faShoppingCart: faShoppingCart,\n faShower: faShower,\n faShuttleVan: faShuttleVan,\n faSign: faSign,\n faSignInAlt: faSignInAlt,\n faSignLanguage: faSignLanguage,\n faSignOutAlt: faSignOutAlt,\n faSignal: faSignal,\n faSignature: faSignature,\n faSimCard: faSimCard,\n faSitemap: faSitemap,\n faSkating: faSkating,\n faSkiing: faSkiing,\n faSkiingNordic: faSkiingNordic,\n faSkull: faSkull,\n faSkullCrossbones: faSkullCrossbones,\n faSlash: faSlash,\n faSleigh: faSleigh,\n faSlidersH: faSlidersH,\n faSmile: faSmile,\n faSmileBeam: faSmileBeam,\n faSmileWink: faSmileWink,\n faSmog: faSmog,\n faSmoking: faSmoking,\n faSmokingBan: faSmokingBan,\n faSms: faSms,\n faSnowboarding: faSnowboarding,\n faSnowflake: faSnowflake,\n faSnowman: faSnowman,\n faSnowplow: faSnowplow,\n faSocks: faSocks,\n faSolarPanel: faSolarPanel,\n faSort: faSort,\n faSortAlphaDown: faSortAlphaDown,\n faSortAlphaDownAlt: faSortAlphaDownAlt,\n faSortAlphaUp: faSortAlphaUp,\n faSortAlphaUpAlt: faSortAlphaUpAlt,\n faSortAmountDown: faSortAmountDown,\n faSortAmountDownAlt: faSortAmountDownAlt,\n faSortAmountUp: faSortAmountUp,\n faSortAmountUpAlt: faSortAmountUpAlt,\n faSortDown: faSortDown,\n faSortNumericDown: faSortNumericDown,\n faSortNumericDownAlt: faSortNumericDownAlt,\n faSortNumericUp: faSortNumericUp,\n faSortNumericUpAlt: faSortNumericUpAlt,\n faSortUp: faSortUp,\n faSpa: faSpa,\n faSpaceShuttle: faSpaceShuttle,\n faSpellCheck: faSpellCheck,\n faSpider: faSpider,\n faSpinner: faSpinner,\n faSplotch: faSplotch,\n faSprayCan: faSprayCan,\n faSquare: faSquare,\n faSquareFull: faSquareFull,\n faSquareRootAlt: faSquareRootAlt,\n faStamp: faStamp,\n faStar: faStar,\n faStarAndCrescent: faStarAndCrescent,\n faStarHalf: faStarHalf,\n faStarHalfAlt: faStarHalfAlt,\n faStarOfDavid: faStarOfDavid,\n faStarOfLife: faStarOfLife,\n faStepBackward: faStepBackward,\n faStepForward: faStepForward,\n faStethoscope: faStethoscope,\n faStickyNote: faStickyNote,\n faStop: faStop,\n faStopCircle: faStopCircle,\n faStopwatch: faStopwatch,\n faStore: faStore,\n faStoreAlt: faStoreAlt,\n faStream: faStream,\n faStreetView: faStreetView,\n faStrikethrough: faStrikethrough,\n faStroopwafel: faStroopwafel,\n faSubscript: faSubscript,\n faSubway: faSubway,\n faSuitcase: faSuitcase,\n faSuitcaseRolling: faSuitcaseRolling,\n faSun: faSun,\n faSuperscript: faSuperscript,\n faSurprise: faSurprise,\n faSwatchbook: faSwatchbook,\n faSwimmer: faSwimmer,\n faSwimmingPool: faSwimmingPool,\n faSynagogue: faSynagogue,\n faSync: faSync,\n faSyncAlt: faSyncAlt,\n faSyringe: faSyringe,\n faTable: faTable,\n faTableTennis: faTableTennis,\n faTablet: faTablet,\n faTabletAlt: faTabletAlt,\n faTablets: faTablets,\n faTachometerAlt: faTachometerAlt,\n faTag: faTag,\n faTags: faTags,\n faTape: faTape,\n faTasks: faTasks,\n faTaxi: faTaxi,\n faTeeth: faTeeth,\n faTeethOpen: faTeethOpen,\n faTemperatureHigh: faTemperatureHigh,\n faTemperatureLow: faTemperatureLow,\n faTenge: faTenge,\n faTerminal: faTerminal,\n faTextHeight: faTextHeight,\n faTextWidth: faTextWidth,\n faTh: faTh,\n faThLarge: faThLarge,\n faThList: faThList,\n faTheaterMasks: faTheaterMasks,\n faThermometer: faThermometer,\n faThermometerEmpty: faThermometerEmpty,\n faThermometerFull: faThermometerFull,\n faThermometerHalf: faThermometerHalf,\n faThermometerQuarter: faThermometerQuarter,\n faThermometerThreeQuarters: faThermometerThreeQuarters,\n faThumbsDown: faThumbsDown,\n faThumbsUp: faThumbsUp,\n faThumbtack: faThumbtack,\n faTicketAlt: faTicketAlt,\n faTimes: faTimes,\n faTimesCircle: faTimesCircle,\n faTint: faTint,\n faTintSlash: faTintSlash,\n faTired: faTired,\n faToggleOff: faToggleOff,\n faToggleOn: faToggleOn,\n faToilet: faToilet,\n faToiletPaper: faToiletPaper,\n faToolbox: faToolbox,\n faTools: faTools,\n faTooth: faTooth,\n faTorah: faTorah,\n faToriiGate: faToriiGate,\n faTractor: faTractor,\n faTrademark: faTrademark,\n faTrafficLight: faTrafficLight,\n faTrain: faTrain,\n faTram: faTram,\n faTransgender: faTransgender,\n faTransgenderAlt: faTransgenderAlt,\n faTrash: faTrash,\n faTrashAlt: faTrashAlt,\n faTrashRestore: faTrashRestore,\n faTrashRestoreAlt: faTrashRestoreAlt,\n faTree: faTree,\n faTrophy: faTrophy,\n faTruck: faTruck,\n faTruckLoading: faTruckLoading,\n faTruckMonster: faTruckMonster,\n faTruckMoving: faTruckMoving,\n faTruckPickup: faTruckPickup,\n faTshirt: faTshirt,\n faTty: faTty,\n faTv: faTv,\n faUmbrella: faUmbrella,\n faUmbrellaBeach: faUmbrellaBeach,\n faUnderline: faUnderline,\n faUndo: faUndo,\n faUndoAlt: faUndoAlt,\n faUniversalAccess: faUniversalAccess,\n faUniversity: faUniversity,\n faUnlink: faUnlink,\n faUnlock: faUnlock,\n faUnlockAlt: faUnlockAlt,\n faUpload: faUpload,\n faUser: faUser,\n faUserAlt: faUserAlt,\n faUserAltSlash: faUserAltSlash,\n faUserAstronaut: faUserAstronaut,\n faUserCheck: faUserCheck,\n faUserCircle: faUserCircle,\n faUserClock: faUserClock,\n faUserCog: faUserCog,\n faUserEdit: faUserEdit,\n faUserFriends: faUserFriends,\n faUserGraduate: faUserGraduate,\n faUserInjured: faUserInjured,\n faUserLock: faUserLock,\n faUserMd: faUserMd,\n faUserMinus: faUserMinus,\n faUserNinja: faUserNinja,\n faUserNurse: faUserNurse,\n faUserPlus: faUserPlus,\n faUserSecret: faUserSecret,\n faUserShield: faUserShield,\n faUserSlash: faUserSlash,\n faUserTag: faUserTag,\n faUserTie: faUserTie,\n faUserTimes: faUserTimes,\n faUsers: faUsers,\n faUsersCog: faUsersCog,\n faUtensilSpoon: faUtensilSpoon,\n faUtensils: faUtensils,\n faVectorSquare: faVectorSquare,\n faVenus: faVenus,\n faVenusDouble: faVenusDouble,\n faVenusMars: faVenusMars,\n faVial: faVial,\n faVials: faVials,\n faVideo: faVideo,\n faVideoSlash: faVideoSlash,\n faVihara: faVihara,\n faVoicemail: faVoicemail,\n faVolleyballBall: faVolleyballBall,\n faVolumeDown: faVolumeDown,\n faVolumeMute: faVolumeMute,\n faVolumeOff: faVolumeOff,\n faVolumeUp: faVolumeUp,\n faVoteYea: faVoteYea,\n faVrCardboard: faVrCardboard,\n faWalking: faWalking,\n faWallet: faWallet,\n faWarehouse: faWarehouse,\n faWater: faWater,\n faWaveSquare: faWaveSquare,\n faWeight: faWeight,\n faWeightHanging: faWeightHanging,\n faWheelchair: faWheelchair,\n faWifi: faWifi,\n faWind: faWind,\n faWindowClose: faWindowClose,\n faWindowMaximize: faWindowMaximize,\n faWindowMinimize: faWindowMinimize,\n faWindowRestore: faWindowRestore,\n faWineBottle: faWineBottle,\n faWineGlass: faWineGlass,\n faWineGlassAlt: faWineGlassAlt,\n faWonSign: faWonSign,\n faWrench: faWrench,\n faXRay: faXRay,\n faYenSign: faYenSign,\n faYinYang: faYinYang\n};\n\nexport { _iconsCache as fas, prefix, faAd, faAddressBook, faAddressCard, faAdjust, faAirFreshener, faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faAllergies, faAmbulance, faAmericanSignLanguageInterpreting, faAnchor, faAngleDoubleDown, faAngleDoubleLeft, faAngleDoubleRight, faAngleDoubleUp, faAngleDown, faAngleLeft, faAngleRight, faAngleUp, faAngry, faAnkh, faAppleAlt, faArchive, faArchway, faArrowAltCircleDown, faArrowAltCircleLeft, faArrowAltCircleRight, faArrowAltCircleUp, faArrowCircleDown, faArrowCircleLeft, faArrowCircleRight, faArrowCircleUp, faArrowDown, faArrowLeft, faArrowRight, faArrowUp, faArrowsAlt, faArrowsAltH, faArrowsAltV, faAssistiveListeningSystems, faAsterisk, faAt, faAtlas, faAtom, faAudioDescription, faAward, faBaby, faBabyCarriage, faBackspace, faBackward, faBacon, faBalanceScale, faBalanceScaleLeft, faBalanceScaleRight, faBan, faBandAid, faBarcode, faBars, faBaseballBall, faBasketballBall, faBath, faBatteryEmpty, faBatteryFull, faBatteryHalf, faBatteryQuarter, faBatteryThreeQuarters, faBed, faBeer, faBell, faBellSlash, faBezierCurve, faBible, faBicycle, faBiking, faBinoculars, faBiohazard, faBirthdayCake, faBlender, faBlenderPhone, faBlind, faBlog, faBold, faBolt, faBomb, faBone, faBong, faBook, faBookDead, faBookMedical, faBookOpen, faBookReader, faBookmark, faBorderAll, faBorderNone, faBorderStyle, faBowlingBall, faBox, faBoxOpen, faBoxes, faBraille, faBrain, faBreadSlice, faBriefcase, faBriefcaseMedical, faBroadcastTower, faBroom, faBrush, faBug, faBuilding, faBullhorn, faBullseye, faBurn, faBus, faBusAlt, faBusinessTime, faCalculator, faCalendar, faCalendarAlt, faCalendarCheck, faCalendarDay, faCalendarMinus, faCalendarPlus, faCalendarTimes, faCalendarWeek, faCamera, faCameraRetro, faCampground, faCandyCane, faCannabis, faCapsules, faCar, faCarAlt, faCarBattery, faCarCrash, faCarSide, faCaretDown, faCaretLeft, faCaretRight, faCaretSquareDown, faCaretSquareLeft, faCaretSquareRight, faCaretSquareUp, faCaretUp, faCarrot, faCartArrowDown, faCartPlus, faCashRegister, faCat, faCertificate, faChair, faChalkboard, faChalkboardTeacher, faChargingStation, faChartArea, faChartBar, faChartLine, faChartPie, faCheck, faCheckCircle, faCheckDouble, faCheckSquare, faCheese, faChess, faChessBishop, faChessBoard, faChessKing, faChessKnight, faChessPawn, faChessQueen, faChessRook, faChevronCircleDown, faChevronCircleLeft, faChevronCircleRight, faChevronCircleUp, faChevronDown, faChevronLeft, faChevronRight, faChevronUp, faChild, faChurch, faCircle, faCircleNotch, faCity, faClinicMedical, faClipboard, faClipboardCheck, faClipboardList, faClock, faClone, faClosedCaptioning, faCloud, faCloudDownloadAlt, faCloudMeatball, faCloudMoon, faCloudMoonRain, faCloudRain, faCloudShowersHeavy, faCloudSun, faCloudSunRain, faCloudUploadAlt, faCocktail, faCode, faCodeBranch, faCoffee, faCog, faCogs, faCoins, faColumns, faComment, faCommentAlt, faCommentDollar, faCommentDots, faCommentMedical, faCommentSlash, faComments, faCommentsDollar, faCompactDisc, faCompass, faCompress, faCompressArrowsAlt, faConciergeBell, faCookie, faCookieBite, faCopy, faCopyright, faCouch, faCreditCard, faCrop, faCropAlt, faCross, faCrosshairs, faCrow, faCrown, faCrutch, faCube, faCubes, faCut, faDatabase, faDeaf, faDemocrat, faDesktop, faDharmachakra, faDiagnoses, faDice, faDiceD20, faDiceD6, faDiceFive, faDiceFour, faDiceOne, faDiceSix, faDiceThree, faDiceTwo, faDigitalTachograph, faDirections, faDivide, faDizzy, faDna, faDog, faDollarSign, faDolly, faDollyFlatbed, faDonate, faDoorClosed, faDoorOpen, faDotCircle, faDove, faDownload, faDraftingCompass, faDragon, faDrawPolygon, faDrum, faDrumSteelpan, faDrumstickBite, faDumbbell, faDumpster, faDumpsterFire, faDungeon, faEdit, faEgg, faEject, faEllipsisH, faEllipsisV, faEnvelope, faEnvelopeOpen, faEnvelopeOpenText, faEnvelopeSquare, faEquals, faEraser, faEthernet, faEuroSign, faExchangeAlt, faExclamation, faExclamationCircle, faExclamationTriangle, faExpand, faExpandArrowsAlt, faExternalLinkAlt, faExternalLinkSquareAlt, faEye, faEyeDropper, faEyeSlash, faFan, faFastBackward, faFastForward, faFax, faFeather, faFeatherAlt, faFemale, faFighterJet, faFile, faFileAlt, faFileArchive, faFileAudio, faFileCode, faFileContract, faFileCsv, faFileDownload, faFileExcel, faFileExport, faFileImage, faFileImport, faFileInvoice, faFileInvoiceDollar, faFileMedical, faFileMedicalAlt, faFilePdf, faFilePowerpoint, faFilePrescription, faFileSignature, faFileUpload, faFileVideo, faFileWord, faFill, faFillDrip, faFilm, faFilter, faFingerprint, faFire, faFireAlt, faFireExtinguisher, faFirstAid, faFish, faFistRaised, faFlag, faFlagCheckered, faFlagUsa, faFlask, faFlushed, faFolder, faFolderMinus, faFolderOpen, faFolderPlus, faFont, faFontAwesomeLogoFull, faFootballBall, faForward, faFrog, faFrown, faFrownOpen, faFunnelDollar, faFutbol, faGamepad, faGasPump, faGavel, faGem, faGenderless, faGhost, faGift, faGifts, faGlassCheers, faGlassMartini, faGlassMartiniAlt, faGlassWhiskey, faGlasses, faGlobe, faGlobeAfrica, faGlobeAmericas, faGlobeAsia, faGlobeEurope, faGolfBall, faGopuram, faGraduationCap, faGreaterThan, faGreaterThanEqual, faGrimace, faGrin, faGrinAlt, faGrinBeam, faGrinBeamSweat, faGrinHearts, faGrinSquint, faGrinSquintTears, faGrinStars, faGrinTears, faGrinTongue, faGrinTongueSquint, faGrinTongueWink, faGrinWink, faGripHorizontal, faGripLines, faGripLinesVertical, faGripVertical, faGuitar, faHSquare, faHamburger, faHammer, faHamsa, faHandHolding, faHandHoldingHeart, faHandHoldingUsd, faHandLizard, faHandMiddleFinger, faHandPaper, faHandPeace, faHandPointDown, faHandPointLeft, faHandPointRight, faHandPointUp, faHandPointer, faHandRock, faHandScissors, faHandSpock, faHands, faHandsHelping, faHandshake, faHanukiah, faHardHat, faHashtag, faHatWizard, faHaykal, faHdd, faHeading, faHeadphones, faHeadphonesAlt, faHeadset, faHeart, faHeartBroken, faHeartbeat, faHelicopter, faHighlighter, faHiking, faHippo, faHistory, faHockeyPuck, faHollyBerry, faHome, faHorse, faHorseHead, faHospital, faHospitalAlt, faHospitalSymbol, faHotTub, faHotdog, faHotel, faHourglass, faHourglassEnd, faHourglassHalf, faHourglassStart, faHouseDamage, faHryvnia, faICursor, faIceCream, faIcicles, faIcons, faIdBadge, faIdCard, faIdCardAlt, faIgloo, faImage, faImages, faInbox, faIndent, faIndustry, faInfinity, faInfo, faInfoCircle, faItalic, faJedi, faJoint, faJournalWhills, faKaaba, faKey, faKeyboard, faKhanda, faKiss, faKissBeam, faKissWinkHeart, faKiwiBird, faLandmark, faLanguage, faLaptop, faLaptopCode, faLaptopMedical, faLaugh, faLaughBeam, faLaughSquint, faLaughWink, faLayerGroup, faLeaf, faLemon, faLessThan, faLessThanEqual, faLevelDownAlt, faLevelUpAlt, faLifeRing, faLightbulb, faLink, faLiraSign, faList, faListAlt, faListOl, faListUl, faLocationArrow, faLock, faLockOpen, faLongArrowAltDown, faLongArrowAltLeft, faLongArrowAltRight, faLongArrowAltUp, faLowVision, faLuggageCart, faMagic, faMagnet, faMailBulk, faMale, faMap, faMapMarked, faMapMarkedAlt, faMapMarker, faMapMarkerAlt, faMapPin, faMapSigns, faMarker, faMars, faMarsDouble, faMarsStroke, faMarsStrokeH, faMarsStrokeV, faMask, faMedal, faMedkit, faMeh, faMehBlank, faMehRollingEyes, faMemory, faMenorah, faMercury, faMeteor, faMicrochip, faMicrophone, faMicrophoneAlt, faMicrophoneAltSlash, faMicrophoneSlash, faMicroscope, faMinus, faMinusCircle, faMinusSquare, faMitten, faMobile, faMobileAlt, faMoneyBill, faMoneyBillAlt, faMoneyBillWave, faMoneyBillWaveAlt, faMoneyCheck, faMoneyCheckAlt, faMonument, faMoon, faMortarPestle, faMosque, faMotorcycle, faMountain, faMousePointer, faMugHot, faMusic, faNetworkWired, faNeuter, faNewspaper, faNotEqual, faNotesMedical, faObjectGroup, faObjectUngroup, faOilCan, faOm, faOtter, faOutdent, faPager, faPaintBrush, faPaintRoller, faPalette, faPallet, faPaperPlane, faPaperclip, faParachuteBox, faParagraph, faParking, faPassport, faPastafarianism, faPaste, faPause, faPauseCircle, faPaw, faPeace, faPen, faPenAlt, faPenFancy, faPenNib, faPenSquare, faPencilAlt, faPencilRuler, faPeopleCarry, faPepperHot, faPercent, faPercentage, faPersonBooth, faPhone, faPhoneAlt, faPhoneSlash, faPhoneSquare, faPhoneSquareAlt, faPhoneVolume, faPhotoVideo, faPiggyBank, faPills, faPizzaSlice, faPlaceOfWorship, faPlane, faPlaneArrival, faPlaneDeparture, faPlay, faPlayCircle, faPlug, faPlus, faPlusCircle, faPlusSquare, faPodcast, faPoll, faPollH, faPoo, faPooStorm, faPoop, faPortrait, faPoundSign, faPowerOff, faPray, faPrayingHands, faPrescription, faPrescriptionBottle, faPrescriptionBottleAlt, faPrint, faProcedures, faProjectDiagram, faPuzzlePiece, faQrcode, faQuestion, faQuestionCircle, faQuidditch, faQuoteLeft, faQuoteRight, faQuran, faRadiation, faRadiationAlt, faRainbow, faRandom, faReceipt, faRecycle, faRedo, faRedoAlt, faRegistered, faRemoveFormat, faReply, faReplyAll, faRepublican, faRestroom, faRetweet, faRibbon, faRing, faRoad, faRobot, faRocket, faRoute, faRss, faRssSquare, faRubleSign, faRuler, faRulerCombined, faRulerHorizontal, faRulerVertical, faRunning, faRupeeSign, faSadCry, faSadTear, faSatellite, faSatelliteDish, faSave, faSchool, faScrewdriver, faScroll, faSdCard, faSearch, faSearchDollar, faSearchLocation, faSearchMinus, faSearchPlus, faSeedling, faServer, faShapes, faShare, faShareAlt, faShareAltSquare, faShareSquare, faShekelSign, faShieldAlt, faShip, faShippingFast, faShoePrints, faShoppingBag, faShoppingBasket, faShoppingCart, faShower, faShuttleVan, faSign, faSignInAlt, faSignLanguage, faSignOutAlt, faSignal, faSignature, faSimCard, faSitemap, faSkating, faSkiing, faSkiingNordic, faSkull, faSkullCrossbones, faSlash, faSleigh, faSlidersH, faSmile, faSmileBeam, faSmileWink, faSmog, faSmoking, faSmokingBan, faSms, faSnowboarding, faSnowflake, faSnowman, faSnowplow, faSocks, faSolarPanel, faSort, faSortAlphaDown, faSortAlphaDownAlt, faSortAlphaUp, faSortAlphaUpAlt, faSortAmountDown, faSortAmountDownAlt, faSortAmountUp, faSortAmountUpAlt, faSortDown, faSortNumericDown, faSortNumericDownAlt, faSortNumericUp, faSortNumericUpAlt, faSortUp, faSpa, faSpaceShuttle, faSpellCheck, faSpider, faSpinner, faSplotch, faSprayCan, faSquare, faSquareFull, faSquareRootAlt, faStamp, faStar, faStarAndCrescent, faStarHalf, faStarHalfAlt, faStarOfDavid, faStarOfLife, faStepBackward, faStepForward, faStethoscope, faStickyNote, faStop, faStopCircle, faStopwatch, faStore, faStoreAlt, faStream, faStreetView, faStrikethrough, faStroopwafel, faSubscript, faSubway, faSuitcase, faSuitcaseRolling, faSun, faSuperscript, faSurprise, faSwatchbook, faSwimmer, faSwimmingPool, faSynagogue, faSync, faSyncAlt, faSyringe, faTable, faTableTennis, faTablet, faTabletAlt, faTablets, faTachometerAlt, faTag, faTags, faTape, faTasks, faTaxi, faTeeth, faTeethOpen, faTemperatureHigh, faTemperatureLow, faTenge, faTerminal, faTextHeight, faTextWidth, faTh, faThLarge, faThList, faTheaterMasks, faThermometer, faThermometerEmpty, faThermometerFull, faThermometerHalf, faThermometerQuarter, faThermometerThreeQuarters, faThumbsDown, faThumbsUp, faThumbtack, faTicketAlt, faTimes, faTimesCircle, faTint, faTintSlash, faTired, faToggleOff, faToggleOn, faToilet, faToiletPaper, faToolbox, faTools, faTooth, faTorah, faToriiGate, faTractor, faTrademark, faTrafficLight, faTrain, faTram, faTransgender, faTransgenderAlt, faTrash, faTrashAlt, faTrashRestore, faTrashRestoreAlt, faTree, faTrophy, faTruck, faTruckLoading, faTruckMonster, faTruckMoving, faTruckPickup, faTshirt, faTty, faTv, faUmbrella, faUmbrellaBeach, faUnderline, faUndo, faUndoAlt, faUniversalAccess, faUniversity, faUnlink, faUnlock, faUnlockAlt, faUpload, faUser, faUserAlt, faUserAltSlash, faUserAstronaut, faUserCheck, faUserCircle, faUserClock, faUserCog, faUserEdit, faUserFriends, faUserGraduate, faUserInjured, faUserLock, faUserMd, faUserMinus, faUserNinja, faUserNurse, faUserPlus, faUserSecret, faUserShield, faUserSlash, faUserTag, faUserTie, faUserTimes, faUsers, faUsersCog, faUtensilSpoon, faUtensils, faVectorSquare, faVenus, faVenusDouble, faVenusMars, faVial, faVials, faVideo, faVideoSlash, faVihara, faVoicemail, faVolleyballBall, faVolumeDown, faVolumeMute, faVolumeOff, faVolumeUp, faVoteYea, faVrCardboard, faWalking, faWallet, faWarehouse, faWater, faWaveSquare, faWeight, faWeightHanging, faWheelchair, faWifi, faWind, faWindowClose, faWindowMaximize, faWindowMinimize, faWindowRestore, faWineBottle, faWineGlass, faWineGlassAlt, faWonSign, faWrench, faXRay, faYenSign, faYinYang };\n", + "import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n}\n\nfunction _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar humps = createCommonjsModule(function (module) {\n(function(global) {\n\n var _processKeys = function(convert, obj, options) {\n if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\n return obj;\n }\n\n var output,\n i = 0,\n l = 0;\n\n if(_isArray(obj)) {\n output = [];\n for(l=obj.length; i 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof element === 'string') {\n return element;\n }\n\n var children = (element.children || []).map(function (child) {\n return convert(createElement, child);\n });\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n var val = element.attributes[key];\n\n switch (key) {\n case 'class':\n acc.attrs['className'] = val;\n delete element.attributes['class'];\n break;\n\n case 'style':\n acc.attrs['style'] = styleToObject(val);\n break;\n\n default:\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n acc.attrs[key.toLowerCase()] = val;\n } else {\n acc.attrs[humps.camelize(key)] = val;\n }\n\n }\n\n return acc;\n }, {\n attrs: {}\n });\n\n var _extraProps$style = extraProps.style,\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n remaining = _objectWithoutProperties(extraProps, [\"style\"]);\n\n mixins.attrs['style'] = _objectSpread({}, mixins.attrs['style'], existingStyle);\n return createElement.apply(void 0, [element.tag, _objectSpread({}, mixins.attrs, remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n if (!PRODUCTION && console && typeof console.error === 'function') {\n var _console;\n\n (_console = console).error.apply(_console, arguments);\n }\n}\n\nfunction objectWithKey(key, value) {\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nfunction classList(props) {\n var _classes;\n\n var classes = (_classes = {\n 'fa-spin': props.spin,\n 'fa-pulse': props.pulse,\n 'fa-fw': props.fixedWidth,\n 'fa-inverse': props.inverse,\n 'fa-border': props.border,\n 'fa-li': props.listItem,\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\n }, _defineProperty(_classes, \"fa-\".concat(props.size), props.size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \"fa-pull-\".concat(props.pull), props.pull !== null), _classes);\n return Object.keys(classes).map(function (key) {\n return classes[key] ? key : null;\n }).filter(function (key) {\n return key;\n });\n}\n\nfunction normalizeIconArgs(icon$$1) {\n if (icon$$1 === null) {\n return null;\n }\n\n if (_typeof(icon$$1) === 'object' && icon$$1.prefix && icon$$1.iconName) {\n return icon$$1;\n }\n\n if (Array.isArray(icon$$1) && icon$$1.length === 2) {\n return {\n prefix: icon$$1[0],\n iconName: icon$$1[1]\n };\n }\n\n if (typeof icon$$1 === 'string') {\n return {\n prefix: 'fas',\n iconName: icon$$1\n };\n }\n}\n\nfunction FontAwesomeIcon(props) {\n var iconArgs = props.icon,\n maskArgs = props.mask,\n symbol = props.symbol,\n className = props.className,\n title = props.title;\n var iconLookup = normalizeIconArgs(iconArgs);\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\n var transform = objectWithKey('transform', typeof props.transform === 'string' ? parse.transform(props.transform) : props.transform);\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n var renderedIcon = icon(iconLookup, _objectSpread({}, classes, transform, mask, {\n symbol: symbol,\n title: title\n }));\n\n if (!renderedIcon) {\n log('Could not find icon', iconLookup);\n return null;\n }\n\n var abstract = renderedIcon.abstract;\n var extraProps = {};\n Object.keys(props).forEach(function (key) {\n if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\n extraProps[key] = props[key];\n }\n });\n return convertCurry(abstract[0], extraProps);\n}\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n border: PropTypes.bool,\n className: PropTypes.string,\n mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n fixedWidth: PropTypes.bool,\n inverse: PropTypes.bool,\n flip: PropTypes.oneOf(['horizontal', 'vertical', 'both']),\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n listItem: PropTypes.bool,\n pull: PropTypes.oneOf(['right', 'left']),\n pulse: PropTypes.bool,\n rotation: PropTypes.oneOf([90, 180, 270]),\n size: PropTypes.oneOf(['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n spin: PropTypes.bool,\n symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n title: PropTypes.string,\n transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\nFontAwesomeIcon.defaultProps = {\n border: false,\n className: '',\n mask: null,\n fixedWidth: false,\n inverse: false,\n flip: null,\n icon: null,\n listItem: false,\n pull: null,\n pulse: false,\n rotation: null,\n size: null,\n spin: false,\n symbol: false,\n title: '',\n transform: null\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\n", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar _Paper = _interopRequireDefault(require(\"../Paper\"));\n\n// @inheritedComponent Paper\nvar styles = function styles(theme) {\n var backgroundColorDefault = theme.palette.type === 'light' ? theme.palette.grey[100] : theme.palette.grey[900];\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n boxSizing: 'border-box',\n // Prevent padding issue with the Modal and fixed positioned AppBar.\n zIndex: theme.zIndex.appBar,\n flexShrink: 0\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`position=\"fixed\"` + ("`" + `. */\n positionFixed: {\n position: 'fixed',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `)) + (("`" + `position=\"absolute\"`) + ("`" + `. */\n positionAbsolute: {\n position: 'absolute',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if `))))) + (((("`" + (`position=\"sticky\"` + "`")) + (`. */\n positionSticky: {\n position: 'sticky',\n top: 0,\n left: 'auto',\n right: 0\n },\n\n /* Styles applied to the root element if ` + ("`" + `position=\"static\"`))) + (("`" + (`. */\n positionStatic: {\n position: 'static'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`position=\"relative\"` + ("`" + `. */\n positionRelative: {\n position: 'relative'\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + (`color=\"default\"` + "`")) + (`. */\n colorDefault: {\n backgroundColor: backgroundColorDefault,\n color: theme.palette.getContrastText(backgroundColorDefault)\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"primary\"`))) + (("`" + (`. */\n colorPrimary: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText\n },\n\n /* Styles applied to the root element if ` + "`")) + ((`color=\"secondary\"` + "`") + (`. */\n colorSecondary: {\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText\n }\n };\n};\n\nexports.styles = styles;\n\nfunction AppBar(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n color = props.color,\n position = props.position,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"position\"]);\n var className = (0, _classnames.default)(classes.root, classes[\"position\".concat((0, _helpers.capitalize)(position))], (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'inherit'), (0, _defineProperty2.default)(_classNames, 'mui-fixed', position === 'fixed'), _classNames), classNameProp);\n return _react.default.createElement(_Paper.default, (0, _extends2.default)({\n square: true,\n component: \"header\",\n elevation: 4,\n className: className\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? AppBar.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['inherit', 'primary', 'secondary', 'default']),\n\n /**\r\n * The positioning type. The behavior of the different options is described\r\n * [in the MDN web docs](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning).\r\n * Note: ` + "`")))))))) + (((((((`sticky` + ("`" + ` is not universally supported and will fall back to `)) + ("`" + (`static` + "`"))) + ((` when unavailable.\r\n */\n position: _propTypes.default.oneOf(['fixed', 'absolute', 'sticky', 'static', 'relative'])\n} : void 0;\nAppBar.defaultProps = {\n color: 'primary',\n position: 'fixed'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiAppBar'\n})(AppBar);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _AppBar.default;\n }\n});\n\nvar _AppBar = _interopRequireDefault(require(\"./AppBar\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _ownerWindow = _interopRequireDefault(require(\"../utils/ownerWindow\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _NoSsr = _interopRequireDefault(require(\"../NoSsr\"));\n\nvar _focusVisible = require(\"./focusVisible\");\n\nvar _TouchRipple = _interopRequireDefault(require(\"./TouchRipple\"));\n\nvar _createRippleHandler = _interopRequireDefault(require(\"./createRippleHandler\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'relative',\n // Remove grey highlight\n WebkitTapHighlightColor: 'transparent',\n backgroundColor: 'transparent',\n // Reset default value\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n border: 0,\n margin: 0,\n // Remove the margin in Safari\n borderRadius: 0,\n padding: 0,\n // Remove the padding in Firefox\n cursor: 'pointer',\n userSelect: 'none',\n verticalAlign: 'middle',\n '-moz-appearance': 'none',\n // Reset\n '-webkit-appearance': 'none',\n // Reset\n textDecoration: 'none',\n // So we take precedent over the style of a native element.\n color: 'inherit',\n '&::-moz-focus-inner': {\n borderStyle: 'none' // Remove Firefox dotted outline.\n\n },\n '&$disabled': {\n pointerEvents: 'none',\n // Disable link interactions\n cursor: 'default'\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `disabled={true}`)) + ("`" + (`. */\n disabled: {},\n\n /* Styles applied to the root element if keyboard focused. */\n focusVisible: {}\n};\n/* istanbul ignore if */\n\nexports.styles = styles;\n\nif (process.env.NODE_ENV !== 'production' && !_react.default.createContext) {\n throw new Error('Material-UI: react@16.3.0 or greater is required.');\n}\n/**\r\n * ` + "`")))) + (((`ButtonBase` + ("`" + ` contains as few styles as possible.\r\n * It aims to be a simple building block for creating a button.\r\n * It contains a load of style reset and some focus/ripple logic.\r\n */\n\n\nvar ButtonBase =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(ButtonBase, _React$Component);\n\n function ButtonBase() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, ButtonBase);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(ButtonBase)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {};\n _this.keyDown = false;\n _this.focusVisibleCheckTime = 50;\n _this.focusVisibleMaxCheckTimes = 5;\n _this.handleMouseDown = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseDown', 'start', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n _this.handleMouseUp = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseUp', 'stop');\n _this.handleMouseLeave = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'MouseLeave', 'stop', function (event) {\n if (_this.state.focusVisible) {\n event.preventDefault();\n }\n });\n _this.handleTouchStart = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchStart', 'start');\n _this.handleTouchEnd = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchEnd', 'stop');\n _this.handleTouchMove = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'TouchMove', 'stop');\n _this.handleContextMenu = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'ContextMenu', 'stop');\n _this.handleBlur = (0, _createRippleHandler.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'Blur', 'stop', function () {\n clearTimeout(_this.focusVisibleTimeout);\n\n if (_this.state.focusVisible) {\n _this.setState({\n focusVisible: false\n });\n }\n });\n\n _this.onRippleRef = function (node) {\n _this.ripple = node;\n };\n\n _this.onFocusVisibleHandler = function (event) {\n _this.keyDown = false;\n\n _this.setState({\n focusVisible: true\n });\n\n if (_this.props.onFocusVisible) {\n _this.props.onFocusVisible(event);\n }\n };\n\n _this.handleKeyDown = function (event) {\n var _this$props = _this.props,\n component = _this$props.component,\n focusRipple = _this$props.focusRipple,\n onKeyDown = _this$props.onKeyDown,\n onClick = _this$props.onClick; // Check if key is already down to avoid repeats being counted as multiple activations\n\n if (focusRipple && !_this.keyDown && _this.state.focusVisible && _this.ripple && event.key === ' ') {\n _this.keyDown = true;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.start(event);\n });\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n } // Keyboard accessibility for non interactive elements\n\n\n if (event.target === event.currentTarget && component && component !== 'button' && (event.key === ' ' || event.key === 'Enter') && !(_this.button.tagName === 'A' && _this.button.href)) {\n event.preventDefault();\n\n if (onClick) {\n onClick(event);\n }\n }\n };\n\n _this.handleKeyUp = function (event) {\n if (_this.props.focusRipple && event.key === ' ' && _this.ripple && _this.state.focusVisible) {\n _this.keyDown = false;\n event.persist();\n\n _this.ripple.stop(event, function () {\n _this.ripple.pulsate(event);\n });\n }\n\n if (_this.props.onKeyUp) {\n _this.props.onKeyUp(event);\n }\n };\n\n _this.handleFocus = function (event) {\n if (_this.props.disabled) {\n return;\n } // Fix for https://github.com/facebook/react/issues/7769\n\n\n if (!_this.button) {\n _this.button = event.currentTarget;\n }\n\n event.persist();\n (0, _focusVisible.detectFocusVisible)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), _this.button, function () {\n _this.onFocusVisibleHandler(event);\n });\n\n if (_this.props.onFocus) {\n _this.props.onFocus(event);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(ButtonBase, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.button = _reactDom.default.findDOMNode(this);\n (0, _focusVisible.listenForFocusKeys)((0, _ownerWindow.default)(this.button));\n\n if (this.props.action) {\n this.props.action({\n focusVisible: function focusVisible() {\n _this2.setState({\n focusVisible: true\n });\n\n _this2.button.focus();\n }\n });\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (this.props.focusRipple && !this.props.disableRipple && !prevState.focusVisible && this.state.focusVisible) {\n this.ripple.pulsate();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.focusVisibleTimeout);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames;\n\n var _this$props2 = this.props,\n action = _this$props2.action,\n buttonRef = _this$props2.buttonRef,\n centerRipple = _this$props2.centerRipple,\n children = _this$props2.children,\n classes = _this$props2.classes,\n classNameProp = _this$props2.className,\n component = _this$props2.component,\n disabled = _this$props2.disabled,\n disableRipple = _this$props2.disableRipple,\n disableTouchRipple = _this$props2.disableTouchRipple,\n focusRipple = _this$props2.focusRipple,\n focusVisibleClassName = _this$props2.focusVisibleClassName,\n onBlur = _this$props2.onBlur,\n onFocus = _this$props2.onFocus,\n onFocusVisible = _this$props2.onFocusVisible,\n onKeyDown = _this$props2.onKeyDown,\n onKeyUp = _this$props2.onKeyUp,\n onMouseDown = _this$props2.onMouseDown,\n onMouseLeave = _this$props2.onMouseLeave,\n onMouseUp = _this$props2.onMouseUp,\n onTouchEnd = _this$props2.onTouchEnd,\n onTouchMove = _this$props2.onTouchMove,\n onTouchStart = _this$props2.onTouchStart,\n tabIndex = _this$props2.tabIndex,\n TouchRippleProps = _this$props2.TouchRippleProps,\n type = _this$props2.type,\n other = (0, _objectWithoutProperties2.default)(_this$props2, [\"action\", \"buttonRef\", \"centerRipple\", \"children\", \"classes\", \"className\", \"component\", \"disabled\", \"disableRipple\", \"disableTouchRipple\", \"focusRipple\", \"focusVisibleClassName\", \"onBlur\", \"onFocus\", \"onFocusVisible\", \"onKeyDown\", \"onKeyUp\", \"onMouseDown\", \"onMouseLeave\", \"onMouseUp\", \"onTouchEnd\", \"onTouchMove\", \"onTouchStart\", \"tabIndex\", \"TouchRippleProps\", \"type\"]);\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.focusVisible, this.state.focusVisible), (0, _defineProperty2.default)(_classNames, focusVisibleClassName, this.state.focusVisible), _classNames), classNameProp);\n var ComponentProp = component;\n\n if (ComponentProp === 'button' && other.href) {\n ComponentProp = 'a';\n }\n\n var buttonProps = {};\n\n if (ComponentProp === 'button') {\n buttonProps.type = type || 'button';\n buttonProps.disabled = disabled;\n } else {\n buttonProps.role = 'button';\n }\n\n return _react.default.createElement(ComponentProp, (0, _extends2.default)({\n className: className,\n onBlur: this.handleBlur,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyUp: this.handleKeyUp,\n onMouseDown: this.handleMouseDown,\n onMouseLeave: this.handleMouseLeave,\n onMouseUp: this.handleMouseUp,\n onTouchEnd: this.handleTouchEnd,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onContextMenu: this.handleContextMenu,\n ref: buttonRef,\n tabIndex: disabled ? '-1' : tabIndex\n }, buttonProps, other), children, !disableRipple && !disabled ? _react.default.createElement(_NoSsr.default, null, _react.default.createElement(_TouchRipple.default, (0, _extends2.default)({\n innerRef: this.onRippleRef,\n center: centerRipple\n }, TouchRippleProps))) : null);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n if (typeof prevState.focusVisible === 'undefined') {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n } // The blur won't fire when the disabled state is set on a focused input.\n // We need to book keep the focused state manually.\n\n\n if (!prevState.prevState && nextProps.disabled && prevState.focusVisible) {\n return {\n focusVisible: false,\n lastDisabled: nextProps.disabled\n };\n }\n\n return {\n lastDisabled: nextProps.disabled\n };\n }\n }]);\n return ButtonBase;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? ButtonBase.propTypes = {\n /**\r\n * Callback fired when the component mounts.\r\n * This is useful when you want to trigger an action programmatically.\r\n * It currently only supports `)) + ("`" + (`focusVisible()` + "`"))) + ((` action.\r\n *\r\n * @param {object} actions This object contains all possible actions\r\n * that can be triggered programmatically.\r\n */\n action: _propTypes.default.func,\n\n /**\r\n * Use that property to pass a ref callback to the native button component.\r\n */\n buttonRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, the ripples will be centered.\r\n * They won't start at the cursor interaction position.\r\n */\n centerRipple: _propTypes.default.bool,\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + "`"))))) + ((((`true` + ("`" + `, the base button will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`"))) + ((`, the ripple effect will be disabled.\r\n */\n disableRipple: _propTypes.default.bool,\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, the touch ripple effect will be disabled.\r\n */\n disableTouchRipple: _propTypes.default.bool,\n\n /**\r\n * If ` + "`")))) + (((`true` + ("`" + `, the base button will have a keyboard focus ripple.\r\n * `)) + ("`" + (`disableRipple` + "`"))) + ((` must also be ` + ("`" + `false`)) + (("`" + `.\r\n */\n focusRipple: _propTypes.default.bool,\n\n /**\r\n * This property can help a person know which element has the keyboard focus.\r\n * The class name will be applied when the element gain the focus through a keyboard interaction.\r\n * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\r\n * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/master/explainer.md).\r\n * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `) + ("`" + `focus-visible`)))))) + ((((("`" + (` class to other components\r\n * if needed.\r\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\r\n * @ignore\r\n */\n onBlur: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onClick: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onFocus: _propTypes.default.func,\n\n /**\r\n * Callback fired when the component is focused with a keyboard.\r\n * We trigger a ` + "`")) + (`onFocus` + ("`" + ` callback too.\r\n */\n onFocusVisible: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onKeyDown: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onKeyUp: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseDown: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseLeave: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onMouseUp: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchEnd: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchMove: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n onTouchStart: _propTypes.default.func,\n\n /**\r\n * @ignore\r\n */\n role: _propTypes.default.string,\n\n /**\r\n * @ignore\r\n */\n tabIndex: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n\n /**\r\n * Properties applied to the `))) + (("`" + (`TouchRipple` + "`")) + (` element.\r\n */\n TouchRippleProps: _propTypes.default.object,\n\n /**\r\n * Used to control the button's purpose.\r\n * This property passes the value to the ` + ("`" + `type`)))) + ((("`" + (` attribute of the native button component.\r\n * Valid property values include ` + "`")) + (`button` + ("`" + `, `))) + (("`" + (`submit` + "`")) + ((`, and ` + "`") + (`reset` + "`"))))) + ((((`.\r\n */\n type: _propTypes.default.string\n} : void 0;\nButtonBase.defaultProps = {\n centerRipple: false,\n component: 'button',\n disableRipple: false,\n disableTouchRipple: false,\n focusRipple: false,\n tabIndex: '0',\n type: 'button'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiButtonBase'\n})(ButtonBase);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _Transition = _interopRequireDefault(require(\"react-transition-group/Transition\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar Ripple =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Ripple, _React$Component);\n\n function Ripple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Ripple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Ripple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n visible: false,\n leaving: false\n };\n\n _this.handleEnter = function () {\n _this.setState({\n visible: true\n });\n };\n\n _this.handleExit = function () {\n _this.setState({\n leaving: true\n });\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(Ripple, [{\n key: \"render\",\n value: function render() {\n var _classNames, _classNames2;\n\n var _this$props = this.props,\n classes = _this$props.classes,\n classNameProp = _this$props.className,\n pulsate = _this$props.pulsate,\n rippleX = _this$props.rippleX,\n rippleY = _this$props.rippleY,\n rippleSize = _this$props.rippleSize,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"pulsate\", \"rippleX\", \"rippleY\", \"rippleSize\"]);\n var _this$state = this.state,\n visible = _this$state.visible,\n leaving = _this$state.leaving;\n var rippleClassName = (0, _classnames.default)(classes.ripple, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.rippleVisible, visible), (0, _defineProperty2.default)(_classNames, classes.ripplePulsate, pulsate), _classNames), classNameProp);\n var rippleStyles = {\n width: rippleSize,\n height: rippleSize,\n top: -(rippleSize / 2) + rippleY,\n left: -(rippleSize / 2) + rippleX\n };\n var childClassName = (0, _classnames.default)(classes.child, (_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, classes.childLeaving, leaving), (0, _defineProperty2.default)(_classNames2, classes.childPulsate, pulsate), _classNames2));\n return _react.default.createElement(_Transition.default, (0, _extends2.default)({\n onEnter: this.handleEnter,\n onExit: this.handleExit\n }, other), _react.default.createElement(\"span\", {\n className: rippleClassName,\n style: rippleStyles\n }, _react.default.createElement(\"span\", {\n className: childClassName\n })));\n }\n }]);\n return Ripple;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes = {\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, the ripple pulsates, typically indicating the keyboard focus state of an element.\r\n */\n pulsate: _propTypes.default.bool,\n\n /**\r\n * Diameter of the ripple.\r\n */\n rippleSize: _propTypes.default.number,\n\n /**\r\n * Horizontal position of the ripple center.\r\n */\n rippleX: _propTypes.default.number,\n\n /**\r\n * Vertical position of the ripple center.\r\n */\n rippleY: _propTypes.default.number\n} : void 0;\nRipple.defaultProps = {\n pulsate: false\n};\nvar _default = Ripple;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = exports.DELAY_RIPPLE = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"react-transition-group/TransitionGroup\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Ripple = _interopRequireDefault(require(\"./Ripple\"));\n\nvar DURATION = 550;\nvar DELAY_RIPPLE = 80;\nexports.DELAY_RIPPLE = DELAY_RIPPLE;\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'block',\n position: 'absolute',\n overflow: 'hidden',\n borderRadius: 'inherit',\n width: '100%',\n height: '100%',\n left: 0,\n top: 0,\n pointerEvents: 'none',\n zIndex: 0\n },\n\n /* Styles applied to the internal ` + "`"))) + ((`Ripple` + ("`" + ` components `)) + ("`" + (`ripple` + "`")))) + (((` class. */\n ripple: {\n width: 50,\n height: 50,\n left: 0,\n top: 0,\n opacity: 0,\n position: 'absolute'\n },\n\n /* Styles applied to the internal ` + ("`" + `Ripple`)) + ("`" + (` components ` + "`"))) + ((`rippleVisible` + ("`" + ` class. */\n rippleVisible: {\n opacity: 0.3,\n transform: 'scale(1)',\n animation: \"mui-ripple-enter \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-enter'\n },\n\n /* Styles applied to the internal `)) + (("`" + `Ripple`) + ("`" + ` components `))))))) + (((((("`" + (`ripplePulsate` + "`")) + (` class. */\n ripplePulsate: {\n animationDuration: \"\".concat(theme.transitions.duration.shorter, \"ms\")\n },\n\n /* Styles applied to the internal ` + ("`" + `Ripple`))) + (("`" + (` components ` + "`")) + (`child` + ("`" + ` class. */\n child: {\n opacity: 1,\n display: 'block',\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n backgroundColor: 'currentColor'\n },\n\n /* Styles applied to the internal `)))) + ((("`" + (`Ripple` + "`")) + (` components ` + ("`" + `childLeaving`))) + (("`" + (` class. */\n childLeaving: {\n opacity: 0,\n animation: \"mui-ripple-exit \".concat(DURATION, \"ms \").concat(theme.transitions.easing.easeInOut),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-exit'\n },\n\n /* Styles applied to the internal ` + "`")) + (`Ripple` + ("`" + ` components `))))) + (((("`" + (`childPulsate` + "`")) + (` class. */\n childPulsate: {\n position: 'absolute',\n left: 0,\n top: 0,\n animation: \"mui-ripple-pulsate 2500ms \".concat(theme.transitions.easing.easeInOut, \" 200ms infinite\"),\n // Backward compatible logic between JSS v9 and v10.\n // To remove with the release of Material-UI v4\n animationName: '$mui-ripple-pulsate'\n },\n '@keyframes mui-ripple-enter': {\n '0%': {\n transform: 'scale(0)',\n opacity: 0.1\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 0.3\n }\n },\n '@keyframes mui-ripple-exit': {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n },\n '@keyframes mui-ripple-pulsate': {\n '0%': {\n transform: 'scale(1)'\n },\n '50%': {\n transform: 'scale(0.92)'\n },\n '100%': {\n transform: 'scale(1)'\n }\n }\n };\n};\n\nexports.styles = styles;\n\nvar TouchRipple =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n (0, _inherits2.default)(TouchRipple, _React$PureComponent);\n\n function TouchRipple() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, TouchRipple);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(TouchRipple)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n nextKey: 0,\n ripples: []\n };\n\n _this.pulsate = function () {\n _this.start({}, {\n pulsate: true\n });\n };\n\n _this.start = function () {\n var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var cb = arguments.length > 2 ? arguments[2] : undefined;\n var _options$pulsate = options.pulsate,\n pulsate = _options$pulsate === void 0 ? false : _options$pulsate,\n _options$center = options.center,\n center = _options$center === void 0 ? _this.props.center || options.pulsate : _options$center,\n _options$fakeElement = options.fakeElement,\n fakeElement = _options$fakeElement === void 0 ? false : _options$fakeElement;\n\n if (event.type === 'mousedown' && _this.ignoringMouseDown) {\n _this.ignoringMouseDown = false;\n return;\n }\n\n if (event.type === 'touchstart') {\n _this.ignoringMouseDown = true;\n }\n\n var element = fakeElement ? null : _reactDom.default.findDOMNode((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));\n var rect = element ? element.getBoundingClientRect() : {\n width: 0,\n height: 0,\n left: 0,\n top: 0\n }; // Get the size of the ripple\n\n var rippleX;\n var rippleY;\n var rippleSize;\n\n if (center || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n rippleX = Math.round(rect.width / 2);\n rippleY = Math.round(rect.height / 2);\n } else {\n var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n rippleX = Math.round(clientX - rect.left);\n rippleY = Math.round(clientY - rect.top);\n }\n\n if (center) {\n rippleSize = Math.sqrt((2 * Math.pow(rect.width, 2) + Math.pow(rect.height, 2)) / 3); // For some reason the animation is broken on Mobile Chrome if the size if even.\n\n if (rippleSize % 2 === 0) {\n rippleSize += 1;\n }\n } else {\n var sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n var sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n rippleSize = Math.sqrt(Math.pow(sizeX, 2) + Math.pow(sizeY, 2));\n } // Touche devices\n\n\n if (event.touches) {\n // Prepare the ripple effect.\n _this.startTimerCommit = function () {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }; // Delay the execution of the ripple effect.\n\n\n _this.startTimer = setTimeout(function () {\n if (_this.startTimerCommit) {\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n }\n }, DELAY_RIPPLE); // We have to make a tradeoff with this value.\n } else {\n _this.startCommit({\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize,\n cb: cb\n });\n }\n };\n\n _this.startCommit = function (params) {\n var pulsate = params.pulsate,\n rippleX = params.rippleX,\n rippleY = params.rippleY,\n rippleSize = params.rippleSize,\n cb = params.cb;\n\n _this.setState(function (state) {\n return {\n nextKey: state.nextKey + 1,\n ripples: [].concat((0, _toConsumableArray2.default)(state.ripples), [_react.default.createElement(_Ripple.default, {\n key: state.nextKey,\n classes: _this.props.classes,\n timeout: {\n exit: DURATION,\n enter: DURATION\n },\n pulsate: pulsate,\n rippleX: rippleX,\n rippleY: rippleY,\n rippleSize: rippleSize\n })])\n };\n }, cb);\n };\n\n _this.stop = function (event, cb) {\n clearTimeout(_this.startTimer);\n var ripples = _this.state.ripples; // The touch interaction occurs too quickly.\n // We still want to show ripple effect.\n\n if (event.type === 'touchend' && _this.startTimerCommit) {\n event.persist();\n\n _this.startTimerCommit();\n\n _this.startTimerCommit = null;\n _this.startTimer = setTimeout(function () {\n _this.stop(event, cb);\n });\n return;\n }\n\n _this.startTimerCommit = null;\n\n if (ripples && ripples.length) {\n _this.setState({\n ripples: ripples.slice(1)\n }, cb);\n }\n };\n\n return _this;\n }\n\n (0, _createClass2.default)(TouchRipple, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n clearTimeout(this.startTimer);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n center = _this$props.center,\n classes = _this$props.classes,\n className = _this$props.className,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"center\", \"classes\", \"className\"]);\n return _react.default.createElement(_TransitionGroup.default, (0, _extends2.default)({\n component: \"span\",\n enter: true,\n exit: true,\n className: (0, _classnames.default)(classes.root, className)\n }, other), this.state.ripples);\n }\n }]);\n return TouchRipple;\n}(_react.default.PureComponent);\n\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes = {\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the ripple starts at the center of the component\r\n * rather than at the point of interaction.\r\n */\n center: _propTypes.default.bool,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string\n} : void 0;\nTouchRipple.defaultProps = {\n center: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n flip: false,\n name: 'MuiTouchRipple'\n})(TouchRipple);\n\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable import/no-mutable-exports */\nvar createRippleHandler = function createRippleHandler(instance, eventName, action, cb) {\n return function (event) {\n if (cb) {\n cb.call(instance, event);\n }\n\n var ignore = false; // Ignore events that have been ` + "`")) + (`event.preventDefault()` + ("`" + ` marked.\n\n if (event.defaultPrevented) {\n ignore = true;\n }\n\n if (instance.props.disableTouchRipple && eventName !== 'Blur') {\n ignore = true;\n }\n\n if (!ignore && instance.ripple) {\n instance.ripple[action](event);\n }\n\n if (typeof instance.props[\"on\".concat(eventName)] === 'function') {\n instance.props[\"on\".concat(eventName)](event);\n }\n\n return true;\n };\n};\n/* istanbul ignore if */\n\n\nif (typeof window === 'undefined') {\n createRippleHandler = function createRippleHandler() {\n return function () {};\n };\n}\n\nvar _default = createRippleHandler;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectFocusVisible = detectFocusVisible;\nexports.listenForFocusKeys = listenForFocusKeys;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _ownerDocument = _interopRequireDefault(require(\"../utils/ownerDocument\"));\n\nvar internal = {\n focusKeyPressed: false,\n keyUpEventTimeout: -1\n};\n\nfunction findActiveElement(doc) {\n var activeElement = doc.activeElement;\n\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n\n return activeElement;\n}\n\nfunction detectFocusVisible(instance, element, callback) {\n var attempt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(instance.focusVisibleCheckTime, 'Material-UI: missing instance.focusVisibleCheckTime.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(instance.focusVisibleMaxCheckTimes, 'Material-UI: missing instance.focusVisibleMaxCheckTimes.') : void 0;\n instance.focusVisibleTimeout = setTimeout(function () {\n var doc = (0, _ownerDocument.default)(element);\n var activeElement = findActiveElement(doc);\n\n if (internal.focusKeyPressed && (activeElement === element || element.contains(activeElement))) {\n callback();\n } else if (attempt < instance.focusVisibleMaxCheckTimes) {\n detectFocusVisible(instance, element, callback, attempt + 1);\n }\n }, instance.focusVisibleCheckTime);\n}\n\nvar FOCUS_KEYS = [9, // 'Tab',\n13, // 'Enter',\n27, // 'Escape',\n32, // ' ',\n37, // 'ArrowLeft',\n38, // 'ArrowUp',\n39, // 'ArrowRight',\n40];\n\nfunction isFocusKey(event) {\n // Use event.keyCode to support IE 11\n return FOCUS_KEYS.indexOf(event.keyCode) > -1;\n}\n\nvar handleKeyUpEvent = function handleKeyUpEvent(event) {\n if (isFocusKey(event)) {\n internal.focusKeyPressed = true; // Let's consider that the user is using a keyboard during a window frame of 500ms.\n\n clearTimeout(internal.keyUpEventTimeout);\n internal.keyUpEventTimeout = setTimeout(function () {\n internal.focusKeyPressed = false;\n }, 500);\n }\n};\n\nfunction listenForFocusKeys(win) {\n // The event listener will only be added once per window.\n // Duplicate event listeners will be ignored by addEventListener.\n // Also, this logic is client side only, we don't need a teardown.\n win.addEventListener('keyup', handleKeyUpEvent);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ButtonBase.default;\n }\n});\n\nvar _ButtonBase = _interopRequireDefault(require(\"./ButtonBase\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _createBreakpoints = require(\"../styles/createBreakpoints\");\n\nvar _requirePropFactory = _interopRequireDefault(require(\"../utils/requirePropFactory\"));\n\n// A grid component using the following libs as inspiration.\n//\n// For the implementation:\n// - http://v4-alpha.getbootstrap.com/layout/flexbox-grid/\n// - https://github.com/kristoferjoseph/flexboxgrid/blob/master/src/css/flexboxgrid.css\n// - https://github.com/roylee0704/react-flexbox-grid\n// - https://material.angularjs.org/latest/layout/introduction\n//\n// Follow this flexbox Guide to better understand the underlying model:\n// - https://css-tricks.com/snippets/css/a-guide-to-flexbox/\nvar GUTTERS = [0, 8, 16, 24, 32, 40];\nvar GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\nfunction generateGrid(globalStyles, theme, breakpoint) {\n var styles = {};\n GRID_SIZES.forEach(function (size) {\n var key = \"grid-\".concat(breakpoint, \"-\").concat(size);\n\n if (size === true) {\n // For the auto layouting\n styles[key] = {\n flexBasis: 0,\n flexGrow: 1,\n maxWidth: '100%'\n };\n return;\n }\n\n if (size === 'auto') {\n styles[key] = {\n flexBasis: 'auto',\n flexGrow: 0,\n maxWidth: 'none'\n };\n return;\n } // Keep 7 significant numbers.\n\n\n var width = \"\".concat(Math.round(size / 12 * 10e7) / 10e5, \"%\"); // Close to the bootstrap implementation:\n // https://github.com/twbs/bootstrap/blob/8fccaa2439e97ec72a4b7dc42ccc1f649790adb0/scss/mixins/_grid.scss#L41\n\n styles[key] = {\n flexBasis: width,\n flexGrow: 0,\n maxWidth: width\n };\n }); // No need for a media query for the first size.\n\n if (breakpoint === 'xs') {\n (0, _extends2.default)(globalStyles, styles);\n } else {\n globalStyles[theme.breakpoints.up(breakpoint)] = styles;\n }\n}\n\nfunction generateGutter(theme, breakpoint) {\n var styles = {};\n GUTTERS.forEach(function (spacing, index) {\n if (index === 0) {\n // Skip the default style.\n return;\n }\n\n styles[\"spacing-\".concat(breakpoint, \"-\").concat(spacing)] = {\n margin: -spacing / 2,\n width: \"calc(100% + \".concat(spacing, \"px)\"),\n '& > $item': {\n padding: spacing / 2\n }\n };\n });\n return styles;\n} // Default CSS values\n// flex: '0 1 auto',\n// flexDirection: 'row',\n// alignItems: 'flex-start',\n// flexWrap: 'nowrap',\n// justifyContent: 'flex-start',\n\n\nvar styles = function styles(theme) {\n return (0, _extends2.default)({\n /* Styles applied to the root element if `)))) + ((("`" + (`container={true}` + "`")) + (`. */\n container: {\n boxSizing: 'border-box',\n display: 'flex',\n flexWrap: 'wrap',\n width: '100%'\n },\n\n /* Styles applied to the root element if ` + ("`" + `item={true}`))) + (("`" + (`. */\n item: {\n boxSizing: 'border-box',\n margin: '0' // For instance, it's useful when used with a ` + "`")) + ((`figure` + "`") + (` element.\n\n },\n\n /* Styles applied to the root element if ` + "`")))))) + (((((`zeroMinWidth={true}` + ("`" + `. */\n zeroMinWidth: {\n minWidth: 0\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`direction=\"column\"` + "`"))) + ((`. */\n 'direction-xs-column': {\n flexDirection: 'column'\n },\n\n /* Styles applied to the root element if ` + ("`" + `direction=\"column-reverse\"`)) + ("`" + (`. */\n 'direction-xs-column-reverse': {\n flexDirection: 'column-reverse'\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`direction=\"rwo-reverse\"` + ("`" + `. */\n 'direction-xs-row-reverse': {\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`wrap=\"nowrap\"` + "`"))) + ((`. */\n 'wrap-xs-nowrap': {\n flexWrap: 'nowrap'\n },\n\n /* Styles applied to the root element if ` + ("`" + `wrap=\"reverse\"`)) + (("`" + `. */\n 'wrap-xs-wrap-reverse': {\n flexWrap: 'wrap-reverse'\n },\n\n /* Styles applied to the root element if `) + ("`" + `alignItems=\"center\"`))))) + (((("`" + (`. */\n 'align-items-xs-center': {\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`alignItems=\"flex-start\"` + ("`" + `. */\n 'align-items-xs-flex-start': {\n alignItems: 'flex-start'\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`alignItems=\"flex-end\"` + "`")) + (`. */\n 'align-items-xs-flex-end': {\n alignItems: 'flex-end'\n },\n\n /* Styles applied to the root element if ` + ("`" + `alignItems=\"baseline\"`)))) + ((("`" + (`. */\n 'align-items-xs-baseline': {\n alignItems: 'baseline'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`alignContent=\"center\"` + ("`" + `. */\n 'align-content-xs-center': {\n alignContent: 'center'\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`alignContent=\"flex-start\"` + "`")) + ((`. */\n 'align-content-xs-flex-start': {\n alignContent: 'flex-start'\n },\n\n /* Styles applied to the root element if ` + "`") + (`alignContent=\"flex-end\"` + "`"))))))))) + ((((((((`. */\n 'align-content-xs-flex-end': {\n alignContent: 'flex-end'\n },\n\n /* Styles applied to the root element if ` + ("`" + `alignContent=\"space-between\"`)) + ("`" + (`. */\n 'align-content-xs-space-between': {\n alignContent: 'space-between'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`alignContent=\"space-around\"` + ("`" + `. */\n 'align-content-xs-space-around': {\n alignContent: 'space-around'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`justify=\"center\"` + "`")))) + (((`. */\n 'justify-xs-center': {\n justifyContent: 'center'\n },\n\n /* Styles applied to the root element if ` + ("`" + `justify=\"flex-end\"`)) + ("`" + (`. */\n 'justify-xs-flex-end': {\n justifyContent: 'flex-end'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`justify=\"space-between\"` + ("`" + `. */\n 'justify-xs-space-between': {\n justifyContent: 'space-between'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`justify=\"space-around\"` + "`"))))) + ((((`. */\n 'justify-xs-space-around': {\n justifyContent: 'space-around'\n },\n\n /* Styles applied to the root element if ` + ("`" + `justify=\"space-evenly\"`)) + ("`" + (`. */\n 'justify-xs-space-evenly': {\n justifyContent: 'space-evenly'\n }\n }, generateGutter(theme, 'xs'), _createBreakpoints.keys.reduce(function (accumulator, key) {\n // Use side effect over immutability for better performance.\n generateGrid(accumulator, theme, key);\n return accumulator;\n }, {}));\n};\n\nexports.styles = styles;\n\nfunction Grid(props) {\n var _classNames;\n\n var alignContent = props.alignContent,\n alignItems = props.alignItems,\n classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n container = props.container,\n direction = props.direction,\n item = props.item,\n justify = props.justify,\n lg = props.lg,\n md = props.md,\n sm = props.sm,\n spacing = props.spacing,\n wrap = props.wrap,\n xl = props.xl,\n xs = props.xs,\n zeroMinWidth = props.zeroMinWidth,\n other = (0, _objectWithoutProperties2.default)(props, [\"alignContent\", \"alignItems\", \"classes\", \"className\", \"component\", \"container\", \"direction\", \"item\", \"justify\", \"lg\", \"md\", \"sm\", \"spacing\", \"wrap\", \"xl\", \"xs\", \"zeroMinWidth\"]);\n var className = (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.container, container), (0, _defineProperty2.default)(_classNames, classes.item, item), (0, _defineProperty2.default)(_classNames, classes.zeroMinWidth, zeroMinWidth), (0, _defineProperty2.default)(_classNames, classes[\"spacing-xs-\".concat(String(spacing))], container && spacing !== 0), (0, _defineProperty2.default)(_classNames, classes[\"direction-xs-\".concat(String(direction))], direction !== Grid.defaultProps.direction), (0, _defineProperty2.default)(_classNames, classes[\"wrap-xs-\".concat(String(wrap))], wrap !== Grid.defaultProps.wrap), (0, _defineProperty2.default)(_classNames, classes[\"align-items-xs-\".concat(String(alignItems))], alignItems !== Grid.defaultProps.alignItems), (0, _defineProperty2.default)(_classNames, classes[\"align-content-xs-\".concat(String(alignContent))], alignContent !== Grid.defaultProps.alignContent), (0, _defineProperty2.default)(_classNames, classes[\"justify-xs-\".concat(String(justify))], justify !== Grid.defaultProps.justify), (0, _defineProperty2.default)(_classNames, classes[\"grid-xs-\".concat(String(xs))], xs !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-sm-\".concat(String(sm))], sm !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-md-\".concat(String(md))], md !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-lg-\".concat(String(lg))], lg !== false), (0, _defineProperty2.default)(_classNames, classes[\"grid-xl-\".concat(String(xl))], xl !== false), _classNames), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Grid.propTypes = {\n /**\r\n * Defines the ` + "`"))) + ((`align-content` + ("`" + ` style property.\r\n * It's applied for all screen sizes.\r\n */\n alignContent: _propTypes.default.oneOf(['stretch', 'center', 'flex-start', 'flex-end', 'space-between', 'space-around']),\n\n /**\r\n * Defines the `)) + ("`" + (`align-items` + "`")))) + (((` style property.\r\n * It's applied for all screen sizes.\r\n */\n alignItems: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'stretch', 'baseline']),\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, the component will have the flex *container* behavior.\r\n * You should be wrapping *items* with a *container*.\r\n */\n container: _propTypes.default.bool,\n\n /**\r\n * Defines the ` + "`"))) + ((`flex-direction` + ("`" + ` style property.\r\n * It is applied for all screen sizes.\r\n */\n direction: _propTypes.default.oneOf(['row', 'row-reverse', 'column', 'column-reverse']),\n\n /**\r\n * If `)) + (("`" + `true`) + ("`" + `, the component will have the flex *item* behavior.\r\n * You should be wrapping *items* with a *container*.\r\n */\n item: _propTypes.default.bool,\n\n /**\r\n * Defines the `)))))) + ((((("`" + (`justify-content` + "`")) + (` style property.\r\n * It is applied for all screen sizes.\r\n */\n justify: _propTypes.default.oneOf(['flex-start', 'center', 'flex-end', 'space-between', 'space-around', 'space-evenly']),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the ` + ("`" + `lg`))) + (("`" + (` breakpoint and wider screens if not overridden.\r\n */\n lg: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the ` + "`")) + (`md` + ("`" + ` breakpoint and wider screens if not overridden.\r\n */\n md: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the `)))) + ((("`" + (`sm` + "`")) + (` breakpoint and wider screens if not overridden.\r\n */\n sm: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the space between the type ` + ("`" + `item`))) + (("`" + (` component.\r\n * It can only be used on a type ` + "`")) + ((`container` + "`") + (` component.\r\n */\n spacing: _propTypes.default.oneOf(GUTTERS),\n\n /**\r\n * Defines the ` + "`"))))) + ((((`flex-wrap` + ("`" + ` style property.\r\n * It's applied for all screen sizes.\r\n */\n wrap: _propTypes.default.oneOf(['nowrap', 'wrap', 'wrap-reverse']),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for the `)) + ("`" + (`xl` + "`"))) + ((` breakpoint and wider screens.\r\n */\n xl: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * Defines the number of grids the component is going to use.\r\n * It's applied for all the screen sizes with the lowest priority.\r\n */\n xs: _propTypes.default.oneOf([false, 'auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, it sets ` + "`")))) + (((`min-width: 0` + ("`" + ` on the item.\r\n * Refer to the limitations section of the documentation to better understand the use case.\r\n */\n zeroMinWidth: _propTypes.default.bool\n} : void 0;\nGrid.defaultProps = {\n alignContent: 'stretch',\n alignItems: 'stretch',\n component: 'div',\n container: false,\n direction: 'row',\n item: false,\n justify: 'flex-start',\n lg: false,\n md: false,\n sm: false,\n spacing: 0,\n wrap: 'wrap',\n xl: false,\n xs: false,\n zeroMinWidth: false\n};\nvar StyledGrid = (0, _withStyles.default)(styles, {\n name: 'MuiGrid'\n})(Grid);\n\nif (process.env.NODE_ENV !== 'production') {\n var requireProp = (0, _requirePropFactory.default)('Grid');\n StyledGrid.propTypes = (0, _extends2.default)({}, StyledGrid.propTypes, {\n alignContent: requireProp('container'),\n alignItems: requireProp('container'),\n direction: requireProp('container'),\n justify: requireProp('container'),\n lg: requireProp('item'),\n md: requireProp('item'),\n sm: requireProp('item'),\n spacing: requireProp('container'),\n wrap: requireProp('container'),\n xs: requireProp('item'),\n zeroMinWidth: requireProp('zeroMinWidth')\n });\n}\n\nvar _default = StyledGrid;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Grid.default;\n }\n});\n\nvar _Grid = _interopRequireDefault(require(\"./Grid\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n userSelect: 'none',\n fontSize: 24,\n width: '1em',\n height: '1em',\n // Chrome fix for https://bugs.chromium.org/p/chromium/issues/detail?id=820541\n // To remove at some point.\n overflow: 'hidden',\n flexShrink: 0\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`color=\"primary\"` + "`"))) + ((`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"secondary\"`)) + (("`" + `. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the root element if `) + ("`" + `color=\"action\"`))))))) + (((((("`" + (`. */\n colorAction: {\n color: theme.palette.action.active\n },\n\n /* Styles applied to the root element if ` + "`")) + (`color=\"error\"` + ("`" + `. */\n colorError: {\n color: theme.palette.error.main\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`color=\"disabled\"` + "`")) + (`. */\n colorDisabled: {\n color: theme.palette.action.disabled\n },\n fontSizeInherit: {\n fontSize: 'inherit'\n },\n\n /* Styles applied to the root element if ` + ("`" + `fontSize=\"small\"`)))) + ((("`" + (`. */\n fontSizeSmall: {\n fontSize: 20\n },\n\n /* Styles applied to the root element if ` + "`")) + (`fontSize=\"large\"` + ("`" + `. */\n fontSizeLarge: {\n fontSize: 36\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Icon(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n color = props.color,\n Component = props.component,\n fontSize = props.fontSize,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"fontSize\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)('material-icons', classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes[\"fontSize\".concat((0, _helpers.capitalize)(fontSize))], fontSize !== 'default'), _classNames), className),\n \"aria-hidden\": \"true\"\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Icon.propTypes = {\n /**\r\n * The name of the icon font ligature.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['inherit', 'primary', 'secondary', 'action', 'error', 'disabled']),\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\r\n */\n fontSize: _propTypes.default.oneOf(['inherit', 'default', 'small', 'large'])\n} : void 0;\nIcon.defaultProps = {\n color: 'inherit',\n component: 'span',\n fontSize: 'default'\n};\nIcon.muiName = 'Icon';\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiIcon'\n})(Icon);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Icon.default;\n }\n});\n\nvar _Icon = _interopRequireDefault(require(\"./Icon\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _colorManipulator = require(\"../styles/colorManipulator\");\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\n// @inheritedComponent ButtonBase\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n textAlign: 'center',\n flex: '0 0 auto',\n fontSize: theme.typography.pxToRem(24),\n padding: 12,\n borderRadius: '50%',\n overflow: 'visible',\n // Explicitly set the default value to solve a bug on IE 11.\n color: theme.palette.action.active,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest\n }),\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.action.active, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n },\n '&$disabled': {\n backgroundColor: 'transparent'\n }\n },\n '&$disabled': {\n color: theme.palette.action.disabled\n }\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`color=\"inherit\"` + "`")) + (`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"primary\"`))))) + (((("`" + (`. */\n colorPrimary: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if ` + "`")) + (`color=\"secondary\"` + ("`" + `. */\n colorSecondary: {\n color: theme.palette.secondary.main,\n '&:hover': {\n backgroundColor: (0, _colorManipulator.fade)(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n }\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`disabled={true}` + "`")) + (`. */\n disabled: {},\n\n /* Styles applied to the children container element. */\n label: {\n width: '100%',\n display: 'flex',\n alignItems: 'inherit',\n justifyContent: 'inherit'\n }\n };\n};\n/**\r\n * Refer to the [Icons](/style/icons/) section of the documentation\r\n * regarding the available icon options.\r\n */\n\n\nexports.styles = styles;\n\nfunction IconButton(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n color = props.color,\n disabled = props.disabled,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"color\", \"disabled\"]);\n return _react.default.createElement(_ButtonBase.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'default'), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), _classNames), className),\n centerRipple: true,\n focusRipple: true,\n disabled: disabled\n }, other), _react.default.createElement(\"span\", {\n className: classes.label\n }, children));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? IconButton.propTypes = {\n /**\r\n * The icon element.\r\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node, function (props) {\n var found = _react.default.Children.toArray(props.children).some(function (child) {\n return _react.default.isValidElement(child) && child.props.onClick;\n });\n\n if (found) {\n return new Error(['Material-UI: you are providing an onClick event listener ' + 'to a child of a button element.', 'Firefox will never trigger the event.', 'You should move the onClick listener to the parent button element.', 'https://github.com/mui-org/material-ui/issues/13957', // Change error message slightly on every check to prevent caching when testing\n // which would not trigger console errors on subsequent fails\n process.env.NODE_ENV === 'test' ? Date.now() : ''].join('\\n'));\n }\n\n return null;\n }),\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n /**\r\n * If ` + ("`" + `true`)))) + ((("`" + (`, the button will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If ` + "`")) + (`true` + ("`" + `, the ripple will be disabled.\r\n */\n disableRipple: _propTypes.default.bool\n} : void 0;\nIconButton.defaultProps = {\n color: 'default',\n disabled: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiIconButton'\n})(IconButton);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _IconButton.default;\n }\n});\n\nvar _IconButton = _interopRequireDefault(require(\"./IconButton\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _ListContext = _interopRequireDefault(require(\"./ListContext\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n position: 'relative'\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`disablePadding={false}` + "`")) + ((`. */\n padding: {\n paddingTop: 8,\n paddingBottom: 8\n },\n\n /* Styles applied to the root element if ` + "`") + (`dense={true}` + "`")))))) + (((((` & ` + ("`" + `disablePadding={false}`)) + ("`" + (`. */\n dense: {\n paddingTop: 4,\n paddingBottom: 4\n },\n\n /* Styles applied to the root element if a ` + "`"))) + ((`subheader` + ("`" + ` is provided. */\n subheader: {\n paddingTop: 0\n }\n};\nexports.styles = styles;\n\nfunction List(props) {\n var _classNames;\n\n var children = props.children,\n classes = props.classes,\n className = props.className,\n Component = props.component,\n dense = props.dense,\n disablePadding = props.disablePadding,\n subheader = props.subheader,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.dense, dense && !disablePadding), (0, _defineProperty2.default)(_classNames, classes.padding, !disablePadding), (0, _defineProperty2.default)(_classNames, classes.subheader, subheader), _classNames), className)\n }, other), _react.default.createElement(_ListContext.default.Provider, {\n value: {\n dense: dense\n }\n }, subheader, children));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `)) + ("`" + (`true` + "`")))) + (((`, compact vertical padding designed for keyboard and mouse input will be used for\r\n * the list and list items. The property is available to descendant components as the\r\n * ` + ("`" + `dense`)) + ("`" + (` context.\r\n */\n dense: _propTypes.default.bool,\n\n /**\r\n * If ` + "`"))) + ((`true` + ("`" + `, vertical padding will be removed from the list.\r\n */\n disablePadding: _propTypes.default.bool,\n\n /**\r\n * The content of the subheader, normally `)) + (("`" + `ListSubheader`) + ("`" + `.\r\n */\n subheader: _propTypes.default.node\n} : void 0;\nList.defaultProps = {\n component: 'ul',\n dense: false,\n disablePadding: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiList'\n})(List);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar ListContext = _react.default.createContext({});\n\nvar _default = ListContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _List.default;\n }\n});\n\nvar _List = _interopRequireDefault(require(\"./List\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _ButtonBase = _interopRequireDefault(require(\"../ButtonBase\"));\n\nvar _reactHelpers = require(\"../utils/reactHelpers\");\n\nvar _MergeListContext = _interopRequireDefault(require(\"./MergeListContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the (normally root) `))))) + (((("`" + (`component` + "`")) + (` element. May be wrapped by a ` + ("`" + `container`))) + (("`" + (`. */\n root: {\n display: 'flex',\n justifyContent: 'flex-start',\n alignItems: 'center',\n position: 'relative',\n textDecoration: 'none',\n width: '100%',\n boxSizing: 'border-box',\n textAlign: 'left',\n paddingTop: 11,\n // To use 10px in v4\n paddingBottom: 11,\n // To use 10px in v4\n '&$selected, &$selected:hover, &$selected:focus': {\n backgroundColor: theme.palette.action.selected\n }\n },\n\n /* Styles applied to the ` + "`")) + (`container` + ("`" + ` element if `)))) + ((("`" + (`children` + "`")) + (` includes ` + ("`" + `ListItemSecondaryAction`))) + (("`" + (`. */\n container: {\n position: 'relative'\n },\n // To remove in v4\n\n /* Styles applied to the ` + "`")) + ((`component` + "`") + (`'s ` + "`")))))))) + (((((((`focusVisibleClassName` + ("`" + ` property if `)) + ("`" + (`button={true}` + "`"))) + ((`. */\n focusVisible: {},\n\n /* Legacy styles applied to the root element. Use ` + ("`" + `root`)) + ("`" + (` instead. */\n default: {},\n\n /* Styles applied to the ` + "`")))) + (((`component` + ("`" + ` element if `)) + ("`" + (`dense={true}` + "`"))) + ((` or ` + ("`" + `children`)) + ("`" + (` includes ` + "`"))))) + ((((`Avatar` + ("`" + `. */\n dense: {\n paddingTop: 8,\n paddingBottom: 8\n },\n\n /* Styles applied to the `)) + ("`" + (`component` + "`"))) + ((` element if ` + ("`" + `alignItems=\"flex-start\"`)) + ("`" + (`. */\n alignItemsFlexStart: {\n alignItems: 'flex-start'\n },\n\n /* Styles applied to the inner ` + "`")))) + (((`component` + ("`" + ` element if `)) + ("`" + (`disabled={true}` + "`"))) + ((`. */\n disabled: {\n opacity: 0.5\n },\n\n /* Styles applied to the inner ` + ("`" + `component`)) + (("`" + ` element if `) + ("`" + `divider={true}`)))))) + ((((("`" + (`. */\n divider: {\n borderBottom: \"1px solid \".concat(theme.palette.divider),\n backgroundClip: 'padding-box'\n },\n\n /* Styles applied to the inner ` + "`")) + (`component` + ("`" + ` element if `))) + (("`" + (`disableGutters={false}` + "`")) + (`. */\n gutters: {\n paddingLeft: 16,\n paddingRight: 16\n },\n\n /* Styles applied to the inner ` + ("`" + `component`)))) + ((("`" + (` element if ` + "`")) + (`button={true}` + ("`" + `. */\n button: {\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shortest\n }),\n '&:hover': {\n textDecoration: 'none',\n backgroundColor: theme.palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor: 'transparent'\n }\n },\n '&:focus': {\n backgroundColor: theme.palette.action.hover\n }\n },\n\n /* Styles applied to the `))) + (("`" + (`component` + "`")) + ((` element if ` + "`") + (`children` + "`"))))) + ((((` includes ` + ("`" + `ListItemSecondaryAction`)) + ("`" + (`. */\n secondaryAction: {\n // Add some space to avoid collision as ` + "`"))) + ((`ListItemSecondaryAction` + ("`" + `\n // is absolutely positioned.\n paddingRight: 32\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`selected={true}` + "`")))) + (((`. */\n selected: {}\n };\n};\n/**\r\n * Uses an additional container component if ` + ("`" + `ListItemSecondaryAction`)) + ("`" + (` is the last child.\r\n */\n\n\nexports.styles = styles;\n\nfunction ListItem(props) {\n var alignItems = props.alignItems,\n button = props.button,\n childrenProp = props.children,\n classes = props.classes,\n classNameProp = props.className,\n componentProp = props.component,\n ContainerComponent = props.ContainerComponent,\n _props$ContainerProps = props.ContainerProps;\n _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n var ContainerClassName = _props$ContainerProps.className,\n ContainerProps = (0, _objectWithoutProperties2.default)(_props$ContainerProps, [\"className\"]),\n denseProp = props.dense,\n disabled = props.disabled,\n disableGutters = props.disableGutters,\n divider = props.divider,\n focusVisibleClassName = props.focusVisibleClassName,\n selected = props.selected,\n other = (0, _objectWithoutProperties2.default)(props, [\"alignItems\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n return _react.default.createElement(_MergeListContext.default, {\n dense: denseProp,\n alignItems: alignItems\n }, function (_ref) {\n var _classNames;\n\n var dense = _ref.dense;\n\n var children = _react.default.Children.toArray(childrenProp);\n\n var hasAvatar = children.some(function (value) {\n return (0, _reactHelpers.isMuiElement)(value, ['ListItemAvatar']);\n });\n var hasSecondaryAction = children.length && (0, _reactHelpers.isMuiElement)(children[children.length - 1], ['ListItemSecondaryAction']);\n var className = (0, _classnames.default)(classes.root, classes.default, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.dense, dense || hasAvatar), (0, _defineProperty2.default)(_classNames, classes.gutters, !disableGutters), (0, _defineProperty2.default)(_classNames, classes.divider, divider), (0, _defineProperty2.default)(_classNames, classes.disabled, disabled), (0, _defineProperty2.default)(_classNames, classes.button, button), (0, _defineProperty2.default)(_classNames, classes.alignItemsFlexStart, alignItems === 'flex-start'), (0, _defineProperty2.default)(_classNames, classes.secondaryAction, hasSecondaryAction), (0, _defineProperty2.default)(_classNames, classes.selected, selected), _classNames), classNameProp);\n var componentProps = (0, _extends2.default)({\n className: className,\n disabled: disabled\n }, other);\n var Component = componentProp || 'li';\n\n if (button) {\n componentProps.component = componentProp || 'div';\n componentProps.focusVisibleClassName = (0, _classnames.default)(classes.focusVisible, focusVisibleClassName);\n Component = _ButtonBase.default;\n }\n\n if (hasSecondaryAction) {\n // Use div by default.\n Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n if (ContainerComponent === 'li') {\n if (Component === 'li') {\n Component = 'div';\n } else if (componentProps.component === 'li') {\n componentProps.component = 'div';\n }\n }\n\n return _react.default.createElement(ContainerComponent, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.container, ContainerClassName)\n }, ContainerProps), _react.default.createElement(Component, componentProps, children), children.pop());\n }\n\n return _react.default.createElement(Component, componentProps, children);\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItem.propTypes = {\n /**\r\n * Defines the ` + "`"))) + ((`align-items` + ("`" + ` style property.\r\n */\n alignItems: _propTypes.default.oneOf(['flex-start', 'center']),\n\n /**\r\n * If `)) + (("`" + `true`) + ("`" + `, the list item will be a button (using `))))))) + (((((("`" + (`ButtonBase` + "`")) + (`).\r\n */\n button: _propTypes.default.bool,\n\n /**\r\n * The content of the component. If a ` + ("`" + `ListItemSecondaryAction`))) + (("`" + (` is used it must\r\n * be the last child.\r\n */\n children: (0, _utils.chainPropTypes)(_propTypes.default.node, function (props) {\n var children = _react.default.Children.toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n\n var secondaryActionIndex = -1;\n\n for (var i = children.length - 1; i >= 0; i -= 1) {\n var child = children[i];\n\n if ((0, _reactHelpers.isMuiElement)(child, ['ListItemSecondaryAction'])) {\n secondaryActionIndex = i;\n break;\n }\n } // is ListItemSecondaryAction the last child of ListItem\n\n\n if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n return new Error('Material-UI: you used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + \"you must pass it has the last children to ListItem.\".concat(process.env.NODE_ENV === 'test' ? Date.now() : ''));\n }\n\n return null;\n }),\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n * By default, it's a ` + "`")) + (`li` + ("`" + ` when `)))) + ((("`" + (`button` + "`")) + (` is ` + ("`" + `false`))) + (("`" + (` and a ` + "`")) + ((`div` + "`") + (` when ` + "`"))))) + ((((`button` + ("`" + ` is `)) + ("`" + (`true` + "`"))) + ((`.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * The container component used when a ` + ("`" + `ListItemSecondaryAction`)) + ("`" + (` is the last child.\r\n */\n ContainerComponent: _utils.componentPropType,\n\n /**\r\n * Properties applied to the container component if used.\r\n */\n ContainerProps: _propTypes.default.object,\n\n /**\r\n * If ` + "`")))) + (((`true` + ("`" + `, compact vertical padding designed for keyboard and mouse input will be used.\r\n */\n dense: _propTypes.default.bool,\n\n /**\r\n * If `)) + ("`" + (`true` + "`"))) + ((`, the list item will be disabled.\r\n */\n disabled: _propTypes.default.bool,\n\n /**\r\n * If ` + ("`" + `true`)) + (("`" + `, the left and right padding is removed.\r\n */\n disableGutters: _propTypes.default.bool,\n\n /**\r\n * If `) + ("`" + `true`)))))) + ((((("`" + (`, a 1px light border is added to the bottom of the list item.\r\n */\n divider: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n */\n focusVisibleClassName: _propTypes.default.string,\n\n /**\r\n * Use to apply selected styling.\r\n */\n selected: _propTypes.default.bool\n} : void 0;\nListItem.defaultProps = {\n alignItems: 'center',\n button: false,\n ContainerComponent: 'li',\n dense: false,\n disabled: false,\n disableGutters: false,\n divider: false,\n selected: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItem'\n})(ListItem);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _ListContext = _interopRequireDefault(require(\"../List/ListContext\"));\n\n/**\r\n * @ignore - internal component.\r\n *\r\n * Consumes a context and passes that context merged with its props.\r\n */\nfunction MergeListContext(props) {\n var alignItems = props.alignItems,\n children = props.children,\n dense = props.dense;\n return _react.default.createElement(_ListContext.default.Consumer, null, function (context) {\n var childContext = {\n dense: dense || context.dense || false,\n alignItems: alignItems\n };\n return _react.default.createElement(_ListContext.default.Provider, {\n value: childContext\n }, children(childContext));\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? MergeListContext.propTypes = {\n alignItems: _propTypes.default.oneOf(['flex-start', 'center']).isRequired,\n children: _propTypes.default.func.isRequired,\n dense: _propTypes.default.bool.isRequired\n} : void 0;\nvar _default = MergeListContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItem.default;\n }\n});\n\nvar _ListItem = _interopRequireDefault(require(\"./ListItem\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n marginRight: 16,\n color: theme.palette.action.active,\n flexShrink: 0,\n display: 'inline-flex'\n }\n };\n};\n/**\r\n * A simple wrapper to apply ` + "`")) + (`List` + ("`" + ` styles to an `))) + (("`" + (`Icon` + "`")) + (` or ` + ("`" + `SvgIcon`)))) + ((("`" + (`.\r\n */\n\n\nexports.styles = styles;\n\nfunction ListItemIcon(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\"]);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, classNameProp)\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItemIcon.propTypes = {\n /**\r\n * The content of the component, normally ` + "`")) + (`Icon` + ("`" + `, `))) + (("`" + (`SvgIcon` + "`")) + ((`,\r\n * or a ` + "`") + (`@material-ui/icons` + "`"))))) + ((((` SVG icon element.\r\n */\n children: _propTypes.default.element.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string\n} : void 0;\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItemIcon'\n})(ListItemIcon);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItemIcon.default;\n }\n});\n\nvar _ListItemIcon = _interopRequireDefault(require(\"./ListItemIcon\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Typography = _interopRequireDefault(require(\"../Typography\"));\n\nvar _ListContext = _interopRequireDefault(require(\"../List/ListContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n flex: '1 1 auto',\n minWidth: 0,\n padding: '0 16px',\n '&:first-child': {\n paddingLeft: 0\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `inset={true}`)) + ("`" + (`. */\n inset: {\n '&:first-child': {\n paddingLeft: 56\n }\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`context.dense` + ("`" + ` is `)) + ("`" + (`true` + "`")))) + (((`. */\n dense: {\n fontSize: theme.typography.pxToRem(13)\n },\n\n /* Styles applied to the primary ` + ("`" + `Typography`)) + ("`" + (` component. */\n primary: {\n '&$textDense': {\n fontSize: 'inherit'\n }\n },\n\n /* Styles applied to the secondary ` + "`"))) + ((`Typography` + ("`" + ` component. */\n secondary: {\n '&$textDense': {\n fontSize: 'inherit'\n }\n },\n\n /* Styles applied to the `)) + (("`" + `Typography`) + ("`" + ` components if `)))))))))) + ((((((((("`" + (`context.dense` + "`")) + (` is ` + ("`" + `true`))) + (("`" + (`. */\n textDense: {}\n };\n};\n\nexports.styles = styles;\n\nfunction ListItemText(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n disableTypography = props.disableTypography,\n inset = props.inset,\n primaryProp = props.primary,\n primaryTypographyProps = props.primaryTypographyProps,\n secondaryProp = props.secondary,\n secondaryTypographyProps = props.secondaryTypographyProps,\n theme = props.theme,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableTypography\", \"inset\", \"primary\", \"primaryTypographyProps\", \"secondary\", \"secondaryTypographyProps\", \"theme\"]);\n return _react.default.createElement(_ListContext.default.Consumer, null, function (_ref) {\n var _classNames3;\n\n var dense = _ref.dense;\n var primary = primaryProp != null ? primaryProp : children;\n\n if (primary != null && primary.type !== _Typography.default && !disableTypography) {\n primary = _react.default.createElement(_Typography.default, (0, _extends2.default)({\n variant: theme.typography.useNextVariants ? 'body1' : 'subheading',\n className: (0, _classnames.default)(classes.primary, (0, _defineProperty2.default)({}, classes.textDense, dense)),\n component: \"span\"\n }, primaryTypographyProps), primary);\n }\n\n var secondary = secondaryProp;\n\n if (secondary != null && secondary.type !== _Typography.default && !disableTypography) {\n secondary = _react.default.createElement(_Typography.default, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.secondary, (0, _defineProperty2.default)({}, classes.textDense, dense)),\n color: \"textSecondary\"\n }, secondaryTypographyProps), secondary);\n }\n\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, (_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, classes.dense, dense), (0, _defineProperty2.default)(_classNames3, classes.inset, inset), _classNames3), classNameProp)\n }, other), primary, secondary);\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? ListItemText.propTypes = {\n /**\r\n * Alias for the ` + "`")) + (`primary` + ("`" + ` property.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If `)))) + ((("`" + (`true` + "`")) + (`, the children won't be wrapped by a Typography component.\r\n * This can be useful to render an alternative Typography variant by wrapping\r\n * the ` + ("`" + `children`))) + (("`" + (` (or ` + "`")) + (`primary` + ("`" + `) text, and optional `))))) + (((("`" + (`secondary` + "`")) + (` text\r\n * with the Typography component.\r\n */\n disableTypography: _propTypes.default.bool,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the children will be indented.\r\n * This should be used if there is no left avatar or left icon.\r\n */\n inset: _propTypes.default.bool,\n\n /**\r\n * The main content element.\r\n */\n primary: _propTypes.default.node,\n\n /**\r\n * These props will be forwarded to the primary typography component\r\n * (as long as disableTypography is not ` + "`")) + (`true` + ("`" + `).\r\n */\n primaryTypographyProps: _propTypes.default.object,\n\n /**\r\n * The secondary content element.\r\n */\n secondary: _propTypes.default.node,\n\n /**\r\n * These props will be forwarded to the secondary typography component\r\n * (as long as disableTypography is not `)))) + ((("`" + (`true` + "`")) + (`).\r\n */\n secondaryTypographyProps: _propTypes.default.object,\n\n /**\r\n * @ignore\r\n */\n theme: _propTypes.default.object.isRequired\n} : void 0;\nListItemText.defaultProps = {\n disableTypography: false,\n inset: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiListItemText',\n withTheme: true\n})(ListItemText);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _ListItemText.default;\n }\n});\n\nvar _ListItemText = _interopRequireDefault(require(\"./ListItemText\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\n/**\r\n * NoSsr purposely removes components from the subject of Server Side Rendering (SSR).\r\n *\r\n * This component can be useful in a variety of situations:\r\n * - Escape hatch for broken dependencies not supporting SSR.\r\n * - Improve the time-to-first paint on the client by only rendering above the fold.\r\n * - Reduce the rendering time on the server.\r\n * - Under too heavy server load, you can turn on service degradation.\r\n */\nvar NoSsr =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(NoSsr, _React$Component);\n\n function NoSsr() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, NoSsr);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(NoSsr)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.mounted = false;\n _this.state = {\n mounted: false\n };\n return _this;\n }\n\n (0, _createClass2.default)(NoSsr, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n this.mounted = true;\n\n if (this.props.defer) {\n // Wondering why we use two RAFs? Check this video out:\n // https://www.youtube.com/watch?v=cCOL7MC4Pl0\n //\n // The componentDidMount() method is called after the DOM nodes are inserted.\n // The UI might not have rendering the changes. We request a frame.\n requestAnimationFrame(function () {\n // The browser should be about to render the DOM nodes\n // that React committed at this point.\n // We don't want to interrupt. Let's wait the next frame.\n requestAnimationFrame(function () {\n // The UI is up-to-date at this point.\n // We can continue rendering the children.\n if (_this2.mounted) {\n _this2.setState({\n mounted: true\n });\n }\n });\n });\n } else {\n this.setState({\n mounted: true\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n children = _this$props.children,\n fallback = _this$props.fallback;\n return this.state.mounted ? children : fallback;\n }\n }]);\n return NoSsr;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? NoSsr.propTypes = {\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the component will not only prevent server-side rendering.\r\n * It will also defer the rendering of the children into a different screen frame.\r\n */\n defer: _propTypes.default.bool,\n\n /**\r\n * The fallback content to display.\r\n */\n fallback: _propTypes.default.node\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? NoSsr.propTypes = (0, _utils.exactProp)(NoSsr.propTypes) : void 0;\n}\n\nNoSsr.defaultProps = {\n defer: false,\n fallback: null\n};\nvar _default = NoSsr;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _NoSsr.default;\n }\n});\n\nvar _NoSsr = _interopRequireDefault(require(\"./NoSsr\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n var elevations = {};\n theme.shadows.forEach(function (shadow, index) {\n elevations[\"elevation\".concat(index)] = {\n boxShadow: shadow\n };\n });\n return (0, _extends2.default)({\n /* Styles applied to the root element. */\n root: {\n backgroundColor: theme.palette.background.paper\n },\n\n /* Styles applied to the root element if ` + "`")) + ((`square={false}` + "`") + (`. */\n rounded: {\n borderRadius: theme.shape.borderRadius\n }\n }, elevations);\n};\n\nexports.styles = styles;\n\nfunction Paper(props) {\n var classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n square = props.square,\n elevation = props.elevation,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\", \"square\", \"elevation\"]);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(elevation >= 0 && elevation < 25, \"Material-UI: this elevation ` + "`")))))) + (((((`\".concat(elevation, \"` + ("`" + ` is not implemented.\")) : void 0;\n var className = (0, _classnames.default)(classes.root, classes[\"elevation\".concat(elevation)], (0, _defineProperty2.default)({}, classes.rounded, !square), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Paper.propTypes = {\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * Shadow depth, corresponds to `)) + ("`" + (`dp` + "`"))) + ((` in the spec.\r\n * It's accepting values between 0 and 24 inclusive.\r\n */\n elevation: _propTypes.default.number,\n\n /**\r\n * If ` + ("`" + `true`)) + ("`" + (`, rounded corners are disabled.\r\n */\n square: _propTypes.default.bool\n} : void 0;\nPaper.defaultProps = {\n component: 'div',\n elevation: 2,\n square: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiPaper'\n})(Paper);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Paper.default;\n }\n});\n\nvar _Paper = _interopRequireDefault(require(\"./Paper\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf3 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _TableContext = _interopRequireDefault(require(\"./TableContext\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'table',\n fontFamily: theme.typography.fontFamily,\n width: '100%',\n borderCollapse: 'collapse',\n borderSpacing: 0\n }\n };\n};\n\nexports.styles = styles;\n\nvar Table =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(Table, _React$Component);\n\n function Table() {\n var _getPrototypeOf2;\n\n var _this;\n\n (0, _classCallCheck2.default)(this, Table);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(Table)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.memoizedContextValue = {};\n return _this;\n }\n\n (0, _createClass2.default)(Table, [{\n key: \"useMemo\",\n // To replace with the corresponding Hook once Material-UI v4 is out:\n // https://reactjs.org/docs/hooks-reference.html#usememo\n value: function useMemo(contextValue) {\n var objectKeys = Object.keys(contextValue);\n\n for (var i = 0; i < objectKeys.length; i += 1) {\n var objectKey = objectKeys[i];\n\n if (contextValue[objectKey] !== this.memoizedContextValue[objectKey]) {\n this.memoizedContextValue = contextValue;\n break;\n }\n }\n\n return this.memoizedContextValue;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n classes = _this$props.classes,\n className = _this$props.className,\n Component = _this$props.component,\n padding = _this$props.padding,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"className\", \"component\", \"padding\"]);\n return _react.default.createElement(_TableContext.default.Provider, {\n value: this.useMemo({\n padding: padding\n })\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n }\n }]);\n return Table;\n}(_react.default.Component);\n\nprocess.env.NODE_ENV !== \"production\" ? Table.propTypes = {\n /**\r\n * The content of the table, normally ` + "`")))) + (((`TableHead` + ("`" + ` and `)) + ("`" + (`TableBody` + "`"))) + ((`.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * Allows TableCells to inherit padding of the Table.\r\n */\n padding: _propTypes.default.oneOf(['default', 'checkbox', 'dense', 'none'])\n} : void 0;\nTable.defaultProps = {\n component: 'table',\n padding: 'default'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTable'\n})(Table);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar TableContext = _react.default.createContext();\n\nvar _default = TableContext;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\n/**\r\n * @ignore - internal component.\r\n */\nvar Tablelvl2Context = _react.default.createContext();\n\nvar _default = Tablelvl2Context;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Table.default;\n }\n});\n\nvar _Table = _interopRequireDefault(require(\"./Table\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'table-row-group'\n }\n};\nexports.styles = styles;\nvar contextValue = {\n variant: 'body'\n};\n\nfunction TableBody(props) {\n var classes = props.classes,\n className = props.className,\n Component = props.component,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Provider, {\n value: contextValue\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableBody.propTypes = {\n /**\r\n * The content of the component, normally ` + ("`" + `TableRow`)) + (("`" + `.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType\n} : void 0;\nTableBody.defaultProps = {\n component: 'tbody'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableBody'\n})(TableBody);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableBody.default;\n }\n});\n\nvar _TableBody = _interopRequireDefault(require(\"./TableBody\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar _deprecatedPropType = _interopRequireDefault(require(\"../utils/deprecatedPropType\"));\n\nvar _colorManipulator = require(\"../styles/colorManipulator\");\n\nvar _TableContext = _interopRequireDefault(require(\"../Table/TableContext\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'table-cell',\n verticalAlign: 'inherit',\n // Workaround for a rendering bug with spanned columns in Chrome 62.0.\n // Removes the alpha (sets it to 1), and lightens or darkens the theme color.\n borderBottom: \"1px solid\\n \".concat(theme.palette.type === 'light' ? (0, _colorManipulator.lighten)((0, _colorManipulator.fade)(theme.palette.divider, 1), 0.88) : (0, _colorManipulator.darken)((0, _colorManipulator.fade)(theme.palette.divider, 1), 0.68)),\n textAlign: 'left',\n padding: '4px 56px 4px 24px',\n '&:last-child': {\n paddingRight: 24\n }\n },\n\n /* Styles applied to the root element if `) + ("`" + `variant=\"head\"`))))) + (((("`" + (` or ` + "`")) + (`context.table.head` + ("`" + `. */\n head: {\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(12),\n fontWeight: theme.typography.fontWeightMedium\n },\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"body\"` + "`")) + (` or ` + ("`" + `context.table.body`)))) + ((("`" + (`. */\n body: {\n color: theme.palette.text.primary,\n fontSize: theme.typography.pxToRem(13),\n fontWeight: theme.typography.fontWeightRegular\n },\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"footer\"` + ("`" + ` or `))) + (("`" + (`context.table.footer` + "`")) + ((`. */\n footer: {\n borderBottom: 0,\n color: theme.palette.text.secondary,\n fontSize: theme.typography.pxToRem(12)\n },\n\n /* Styles applied to the root element if ` + "`") + (`numeric={true}` + "`"))))))) + ((((((`. */\n numeric: {\n textAlign: 'right',\n flexDirection: 'row-reverse' // can be dynamically inherited at runtime by contents\n\n },\n\n /* Styles applied to the root element if ` + ("`" + `padding=\"dense\"`)) + ("`" + (`. */\n paddingDense: {\n paddingRight: 24\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`padding=\"checkbox\"` + ("`" + `. */\n paddingCheckbox: {\n padding: '0 12px',\n '&:last-child': {\n paddingRight: 12\n }\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`padding=\"none\"` + "`")))) + (((`. */\n paddingNone: {\n padding: 0,\n '&:last-child': {\n padding: 0\n }\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"left\"`)) + ("`" + (`. */\n alignLeft: {\n textAlign: 'left'\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`align=\"center\"` + ("`" + `. */\n alignCenter: {\n textAlign: 'center'\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`align=\"right\"` + "`"))))) + ((((`. */\n alignRight: {\n textAlign: 'right',\n flexDirection: 'row-reverse'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"justify\"`)) + ("`" + (`. */\n alignJustify: {\n textAlign: 'justify'\n }\n };\n};\n\nexports.styles = styles;\n\nfunction TableCell(props) {\n var align = props.align,\n children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n component = props.component,\n sortDirection = props.sortDirection,\n _props$numeric = props.numeric,\n numeric = _props$numeric === void 0 ? false : _props$numeric,\n paddingProp = props.padding,\n scopeProp = props.scope,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"align\", \"children\", \"classes\", \"className\", \"component\", \"sortDirection\", \"numeric\", \"padding\", \"scope\", \"variant\"]);\n return _react.default.createElement(_TableContext.default.Consumer, null, function (table) {\n return _react.default.createElement(_Tablelvl2Context.default.Consumer, null, function (tablelvl2) {\n var _classNames;\n\n var Component;\n\n if (component) {\n Component = component;\n } else {\n Component = tablelvl2 && tablelvl2.variant === 'head' ? 'th' : 'td';\n }\n\n var scope = scopeProp;\n\n if (!scope && tablelvl2 && tablelvl2.variant === 'head') {\n scope = 'col';\n }\n\n var padding = paddingProp || (table && table.padding ? table.padding : 'default');\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.head, variant ? variant === 'head' : tablelvl2 && tablelvl2.variant === 'head'), (0, _defineProperty2.default)(_classNames, classes.body, variant ? variant === 'body' : tablelvl2 && tablelvl2.variant === 'body'), (0, _defineProperty2.default)(_classNames, classes.footer, variant ? variant === 'footer' : tablelvl2 && tablelvl2.variant === 'footer'), (0, _defineProperty2.default)(_classNames, classes[\"align\".concat((0, _helpers.capitalize)(align))], align !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes.numeric, numeric), (0, _defineProperty2.default)(_classNames, classes[\"padding\".concat((0, _helpers.capitalize)(padding))], padding !== 'default'), _classNames), classNameProp);\n var ariaSort = null;\n\n if (sortDirection) {\n ariaSort = sortDirection === 'asc' ? 'ascending' : 'descending';\n }\n\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className,\n \"aria-sort\": ariaSort,\n scope: scope\n }, other), children);\n });\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableCell.propTypes = {\n /**\r\n * Set the text-align on the table cell content.\r\n *\r\n * Monetary or generally number fields **should be right aligned** as that allows\r\n * you to add them up quickly in your head without having to worry about decimals.\r\n */\n align: _propTypes.default.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n /**\r\n * The table cell contents.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + "`"))) + ((`true` + ("`" + `, content will align to the right.\r\n */\n numeric: (0, _deprecatedPropType.default)(_propTypes.default.bool, 'Instead, use the `)) + ("`" + (`align` + "`")))) + (((` property.'),\n\n /**\r\n * Sets the padding applied to the cell.\r\n * By default, the Table parent component set the value.\r\n */\n padding: _propTypes.default.oneOf(['default', 'checkbox', 'dense', 'none']),\n\n /**\r\n * Set scope attribute.\r\n */\n scope: _propTypes.default.string,\n\n /**\r\n * Set aria-sort direction.\r\n */\n sortDirection: _propTypes.default.oneOf(['asc', 'desc', false]),\n\n /**\r\n * Specify the cell type.\r\n * By default, the TableHead, TableBody or TableFooter parent component set the value.\r\n */\n variant: _propTypes.default.oneOf(['head', 'body', 'footer'])\n} : void 0;\nTableCell.defaultProps = {\n align: 'inherit'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableCell'\n})(TableCell);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableCell.default;\n }\n});\n\nvar _TableCell = _interopRequireDefault(require(\"./TableCell\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = {\n /* Styles applied to the root element. */\n root: {\n display: 'table-header-group'\n }\n};\nexports.styles = styles;\nvar contextValue = {\n variant: 'head'\n};\n\nfunction TableHead(props) {\n var classes = props.classes,\n className = props.className,\n Component = props.component,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Provider, {\n value: contextValue\n }, _react.default.createElement(Component, (0, _extends2.default)({\n className: (0, _classnames.default)(classes.root, className)\n }, other)));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableHead.propTypes = {\n /**\r\n * The content of the component, normally ` + ("`" + `TableRow`)) + ("`" + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType\n} : void 0;\nTableHead.defaultProps = {\n component: 'thead'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableHead'\n})(TableHead);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableHead.default;\n }\n});\n\nvar _TableHead = _interopRequireDefault(require(\"./TableHead\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _Tablelvl2Context = _interopRequireDefault(require(\"../Table/Tablelvl2Context\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n color: 'inherit',\n display: 'table-row',\n height: 48,\n verticalAlign: 'middle',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n '&$selected': {\n backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.04)' // grey[100]\n : 'rgba(255, 255, 255, 0.08)'\n },\n '&$hover:hover': {\n backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.07)' // grey[200]\n : 'rgba(255, 255, 255, 0.14)'\n }\n },\n\n /* Styles applied to the root element if ` + "`"))) + ((`selected={true}` + ("`" + `. */\n selected: {},\n\n /* Styles applied to the root element if `)) + (("`" + `hover={true}`) + ("`" + `. */\n hover: {},\n\n /* Styles applied to the root element if table variant = 'head'. */\n head: {\n height: 56\n },\n\n /* Styles applied to the root element if table variant = 'footer'. */\n footer: {\n height: 56\n }\n };\n};\n/**\r\n * Will automatically set dynamic row height\r\n * based on the material table element parent (head, body, etc).\r\n */\n\n\nexports.styles = styles;\n\nfunction TableRow(props) {\n var classes = props.classes,\n classNameProp = props.className,\n Component = props.component,\n hover = props.hover,\n selected = props.selected,\n other = (0, _objectWithoutProperties2.default)(props, [\"classes\", \"className\", \"component\", \"hover\", \"selected\"]);\n return _react.default.createElement(_Tablelvl2Context.default.Consumer, null, function (tablelvl2) {\n var _classNames;\n\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes.head, tablelvl2 && tablelvl2.variant === 'head'), (0, _defineProperty2.default)(_classNames, classes.footer, tablelvl2 && tablelvl2.variant === 'footer'), (0, _defineProperty2.default)(_classNames, classes.hover, hover), (0, _defineProperty2.default)(_classNames, classes.selected, selected), _classNames), classNameProp);\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n });\n}\n\nprocess.env.NODE_ENV !== \"production\" ? TableRow.propTypes = {\n /**\r\n * Should be valid children such as `)))))) + ((((("`" + (`TableCell` + "`")) + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If ` + ("`" + `true`))) + (("`" + (`, the table row will shade on hover.\r\n */\n hover: _propTypes.default.bool,\n\n /**\r\n * If ` + "`")) + (`true` + ("`" + `, the table row will have the selected shading.\r\n */\n selected: _propTypes.default.bool\n} : void 0;\nTableRow.defaultProps = {\n component: 'tr',\n hover: false,\n selected: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTableRow'\n})(TableRow);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _TableRow.default;\n }\n});\n\nvar _TableRow = _interopRequireDefault(require(\"./TableRow\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center'\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + (`disableGutters={false}` + "`")) + (`. */\n gutters: theme.mixins.gutters(),\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"regular\"`))) + (("`" + (`. */\n regular: theme.mixins.toolbar,\n\n /* Styles applied to the root element if ` + "`")) + ((`variant=\"dense\"` + "`") + (`. */\n dense: {\n minHeight: 48\n }\n };\n};\n\nexports.styles = styles;\n\nfunction Toolbar(props) {\n var children = props.children,\n classes = props.classes,\n classNameProp = props.className,\n disableGutters = props.disableGutters,\n variant = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"children\", \"classes\", \"className\", \"disableGutters\", \"variant\"]);\n var className = (0, _classnames.default)(classes.root, classes[variant], (0, _defineProperty2.default)({}, classes.gutters, !disableGutters), classNameProp);\n return _react.default.createElement(\"div\", (0, _extends2.default)({\n className: className\n }, other), children);\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Toolbar.propTypes = {\n /**\r\n * Toolbar children, usually a mixture of ` + "`"))))) + ((((`IconButton` + ("`" + `, `)) + ("`" + (`Button` + "`"))) + ((` and ` + ("`" + `Typography`)) + ("`" + (`.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * If ` + "`")))) + (((`true` + ("`" + `, disables gutter padding.\r\n */\n disableGutters: _propTypes.default.bool,\n\n /**\r\n * The variant to use.\r\n */\n variant: _propTypes.default.oneOf(['regular', 'dense'])\n} : void 0;\nToolbar.defaultProps = {\n disableGutters: false,\n variant: 'regular'\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiToolbar'\n})(Toolbar);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Toolbar.default;\n }\n});\n\nvar _Toolbar = _interopRequireDefault(require(\"./Toolbar\"));", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.styles = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _withStyles = _interopRequireDefault(require(\"../styles/withStyles\"));\n\nvar _helpers = require(\"../utils/helpers\");\n\nvar styles = function styles(theme) {\n return {\n /* Styles applied to the root element. */\n root: {\n display: 'block',\n margin: 0\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`variant=\"display4\"` + "`"))) + ((`. */\n display4: theme.typography.display4,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"display3\"`)) + (("`" + `. */\n display3: theme.typography.display3,\n\n /* Styles applied to the root element if `) + ("`" + `variant=\"display2\"`)))))))) + ((((((("`" + (`. */\n display2: theme.typography.display2,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"display1\"` + ("`" + `. */\n display1: theme.typography.display1,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"headline\"` + "`")) + (`. */\n headline: theme.typography.headline,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"title\"`)))) + ((("`" + (`. */\n title: theme.typography.title,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"subheading\"` + ("`" + `. */\n subheading: theme.typography.subheading,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"body2\"` + "`")) + (`. */\n body2: theme.typography.body2,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"body1\"`))))) + (((("`" + (`. */\n body1: theme.typography.body1,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"caption\"` + ("`" + `. */\n caption: theme.typography.caption,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"button\"` + "`")) + (`. */\n button: theme.typography.button,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"h1\"`)))) + ((("`" + (`. */\n h1: theme.typography.h1,\n\n /* Styles applied to the root element if ` + "`")) + (`variant=\"h2\"` + ("`" + `. */\n h2: theme.typography.h2,\n\n /* Styles applied to the root element if `))) + (("`" + (`variant=\"h3\"` + "`")) + ((`. */\n h3: theme.typography.h3,\n\n /* Styles applied to the root element if ` + "`") + (`variant=\"h4\"` + "`")))))) + (((((`. */\n h4: theme.typography.h4,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"h5\"`)) + ("`" + (`. */\n h5: theme.typography.h5,\n\n /* Styles applied to the root element if ` + "`"))) + ((`variant=\"h6\"` + ("`" + `. */\n h6: theme.typography.h6,\n\n /* Styles applied to the root element if `)) + ("`" + (`variant=\"subtitle1\"` + "`")))) + (((`. */\n subtitle1: theme.typography.subtitle1,\n\n /* Styles applied to the root element if ` + ("`" + `variant=\"subtitle2\"`)) + ("`" + (`. */\n subtitle2: theme.typography.subtitle2,\n\n /* Styles applied to the root element if ` + "`"))) + ((`variant=\"overline\"` + ("`" + `. */\n overline: theme.typography.overline,\n\n /* Styles applied to the root element if `)) + (("`" + `variant=\"srOnly\"`) + ("`" + `. Only accessible to screen readers. */\n srOnly: {\n position: 'absolute',\n height: 1,\n width: 1,\n overflow: 'hidden'\n },\n\n /* Styles applied to the root element if `))))) + (((("`" + (`align=\"left\"` + "`")) + (`. */\n alignLeft: {\n textAlign: 'left'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"center\"`))) + (("`" + (`. */\n alignCenter: {\n textAlign: 'center'\n },\n\n /* Styles applied to the root element if ` + "`")) + (`align=\"right\"` + ("`" + `. */\n alignRight: {\n textAlign: 'right'\n },\n\n /* Styles applied to the root element if `)))) + ((("`" + (`align=\"justify\"` + "`")) + (`. */\n alignJustify: {\n textAlign: 'justify'\n },\n\n /* Styles applied to the root element if ` + ("`" + `align=\"nowrap\"`))) + (("`" + (`. */\n noWrap: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n },\n\n /* Styles applied to the root element if ` + "`")) + ((`gutterBottom={true}` + "`") + (`. */\n gutterBottom: {\n marginBottom: '0.35em'\n },\n\n /* Styles applied to the root element if ` + "`"))))))) + ((((((`paragraph={true}` + ("`" + `. */\n paragraph: {\n marginBottom: 16\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`color=\"inherit\"` + "`"))) + ((`. */\n colorInherit: {\n color: 'inherit'\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"primary\"`)) + ("`" + (`. */\n colorPrimary: {\n color: theme.palette.primary.main\n },\n\n /* Styles applied to the root element if ` + "`")))) + (((`color=\"secondary\"` + ("`" + `. */\n colorSecondary: {\n color: theme.palette.secondary.main\n },\n\n /* Styles applied to the root element if `)) + ("`" + (`color=\"textPrimary\"` + "`"))) + ((`. */\n colorTextPrimary: {\n color: theme.palette.text.primary\n },\n\n /* Styles applied to the root element if ` + ("`" + `color=\"textSecondary\"`)) + (("`" + `. */\n colorTextSecondary: {\n color: theme.palette.text.secondary\n },\n\n /* Styles applied to the root element if `) + ("`" + `color=\"error\"`))))) + (((("`" + (`. */\n colorError: {\n color: theme.palette.error.main\n },\n\n /* Styles applied to the root element if ` + "`")) + (`inline={true}` + ("`" + `. */\n inline: {\n display: 'inline'\n }\n };\n};\n\nexports.styles = styles;\nvar nextVariants = {\n display4: 'h1',\n display3: 'h2',\n display2: 'h3',\n display1: 'h4',\n headline: 'h5',\n title: 'h6',\n subheading: 'subtitle1'\n};\n\nfunction getVariant(theme, variantProp) {\n var typography = theme.typography;\n var variant = variantProp;\n\n if (!variant) {\n variant = typography.useNextVariants ? 'body2' : 'body1';\n } // complete v2 switch\n\n\n if (typography.useNextVariants) {\n variant = nextVariants[variant] || variant;\n }\n\n return variant;\n}\n\nvar defaultHeadlineMapping = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h5',\n h6: 'h6',\n subtitle1: 'h6',\n subtitle2: 'h6',\n body1: 'p',\n body2: 'p',\n // deprecated\n display4: 'h1',\n display3: 'h1',\n display2: 'h1',\n display1: 'h1',\n headline: 'h1',\n title: 'h2',\n subheading: 'h3'\n};\n\nfunction Typography(props) {\n var _classNames;\n\n var align = props.align,\n classes = props.classes,\n classNameProp = props.className,\n color = props.color,\n componentProp = props.component,\n gutterBottom = props.gutterBottom,\n headlineMapping = props.headlineMapping,\n inline = props.inline,\n internalDeprecatedVariant = props.internalDeprecatedVariant,\n noWrap = props.noWrap,\n paragraph = props.paragraph,\n theme = props.theme,\n variantProp = props.variant,\n other = (0, _objectWithoutProperties2.default)(props, [\"align\", \"classes\", \"className\", \"color\", \"component\", \"gutterBottom\", \"headlineMapping\", \"inline\", \"internalDeprecatedVariant\", \"noWrap\", \"paragraph\", \"theme\", \"variant\"]);\n var variant = getVariant(theme, variantProp);\n var className = (0, _classnames.default)(classes.root, (_classNames = {}, (0, _defineProperty2.default)(_classNames, classes[variant], variant !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes[\"color\".concat((0, _helpers.capitalize)(color))], color !== 'default'), (0, _defineProperty2.default)(_classNames, classes.noWrap, noWrap), (0, _defineProperty2.default)(_classNames, classes.gutterBottom, gutterBottom), (0, _defineProperty2.default)(_classNames, classes.paragraph, paragraph), (0, _defineProperty2.default)(_classNames, classes[\"align\".concat((0, _helpers.capitalize)(align))], align !== 'inherit'), (0, _defineProperty2.default)(_classNames, classes.inline, inline), _classNames), classNameProp);\n var Component = componentProp || (paragraph ? 'p' : headlineMapping[variant] || defaultHeadlineMapping[variant]) || 'span';\n return _react.default.createElement(Component, (0, _extends2.default)({\n className: className\n }, other));\n}\n\nprocess.env.NODE_ENV !== \"production\" ? Typography.propTypes = {\n /**\r\n * Set the text-align on the component.\r\n */\n align: _propTypes.default.oneOf(['inherit', 'left', 'center', 'right', 'justify']),\n\n /**\r\n * The content of the component.\r\n */\n children: _propTypes.default.node,\n\n /**\r\n * Override or extend the styles applied to the component.\r\n * See [CSS API](#css-api) below for more details.\r\n */\n classes: _propTypes.default.object.isRequired,\n\n /**\r\n * @ignore\r\n */\n className: _propTypes.default.string,\n\n /**\r\n * The color of the component. It supports those theme colors that make sense for this component.\r\n */\n color: _propTypes.default.oneOf(['default', 'error', 'inherit', 'primary', 'secondary', 'textPrimary', 'textSecondary']),\n\n /**\r\n * The component used for the root node.\r\n * Either a string to use a DOM element or a component.\r\n * By default, it maps the variant to a good default headline component.\r\n */\n component: _utils.componentPropType,\n\n /**\r\n * If `))) + (("`" + (`true` + "`")) + (`, the text will have a bottom margin.\r\n */\n gutterBottom: _propTypes.default.bool,\n\n /**\r\n * We are empirically mapping the variant property to a range of different DOM element types.\r\n * For instance, subtitle1 to ` + ("`" + `
`)))) + ((("`" + (`.\r\n * If you wish to change that mapping, you can provide your own.\r\n * Alternatively, you can use the ` + "`")) + (`component` + ("`" + ` property.\r\n * The default mapping is the following:\r\n */\n headlineMapping: _propTypes.default.object,\n\n /**\r\n * Controls whether the Typography is inline or not.\r\n */\n inline: _propTypes.default.bool,\n\n /**\r\n * A deprecated variant is used from an internal component. Users don't need\r\n * a deprecation warning here if they switched to the v2 theme. They already\r\n * get the mapping that will be applied in the next major release.\r\n *\r\n * @internal\r\n */\n internalDeprecatedVariant: _propTypes.default.bool,\n\n /**\r\n * If `))) + (("`" + (`true` + "`")) + ((`, the text will not wrap, but instead will truncate with an ellipsis.\r\n */\n noWrap: _propTypes.default.bool,\n\n /**\r\n * If ` + "`") + (`true` + "`")))))) + (((((`, the text will have a bottom margin.\r\n */\n paragraph: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n */\n theme: _propTypes.default.object.isRequired,\n\n /**\r\n * Applies the theme typography styles.\r\n * Use ` + ("`" + `body1`)) + ("`" + (` as the default value with the legacy implementation and ` + "`"))) + ((`body2` + ("`" + ` with the new one.\r\n */\n variant: (0, _utils.chainPropTypes)(_propTypes.default.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'caption', 'button', 'overline', 'srOnly', 'inherit', // deprecated\n 'display4', 'display3', 'display2', 'display1', 'headline', 'title', 'subheading']), function (props) {\n var deprecatedVariants = ['display4', 'display3', 'display2', 'display1', 'headline', 'title', 'subheading'];\n\n if (props.theme.typography.useNextVariants && !props.internalDeprecatedVariant && deprecatedVariants.indexOf(props.variant) !== -1) {\n return new Error('Material-UI: you are using a deprecated typography variant: ' + \"`)) + ("`" + (`\".concat(props.variant, \"` + "`")))) + (((` that will be removed in the next major release.\\n\") + 'Please read the migration guide under https://material-ui.com/style/typography#migration-to-typography-v2.');\n }\n\n return null;\n })\n} : void 0;\nTypography.defaultProps = {\n align: 'inherit',\n color: 'default',\n gutterBottom: false,\n headlineMapping: defaultHeadlineMapping,\n inline: false,\n noWrap: false,\n paragraph: false\n};\n\nvar _default = (0, _withStyles.default)(styles, {\n name: 'MuiTypography',\n withTheme: true\n})(Typography);\n\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function get() {\n return _Typography.default;\n }\n});\n\nvar _Typography = _interopRequireDefault(require(\"./Typography\"));", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar common = {\n black: '#000',\n white: '#fff'\n};\nvar _default = common;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar grey = {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#eeeeee',\n 300: '#e0e0e0',\n 400: '#bdbdbd',\n 500: '#9e9e9e',\n 600: '#757575',\n 700: '#616161',\n 800: '#424242',\n 900: '#212121',\n A100: '#d5d5d5',\n A200: '#aaaaaa',\n A400: '#303030',\n A700: '#616161'\n};\nvar _default = grey;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar indigo = {\n 50: '#e8eaf6',\n 100: '#c5cae9',\n 200: '#9fa8da',\n 300: '#7986cb',\n 400: '#5c6bc0',\n 500: '#3f51b5',\n 600: '#3949ab',\n 700: '#303f9f',\n 800: '#283593',\n 900: '#1a237e',\n A100: '#8c9eff',\n A200: '#536dfe',\n A400: '#3d5afe',\n A700: '#304ffe'\n};\nvar _default = indigo;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar pink = {\n 50: '#fce4ec',\n 100: '#f8bbd0',\n 200: '#f48fb1',\n 300: '#f06292',\n 400: '#ec407a',\n 500: '#e91e63',\n 600: '#d81b60',\n 700: '#c2185b',\n 800: '#ad1457',\n 900: '#880e4f',\n A100: '#ff80ab',\n A200: '#ff4081',\n A400: '#f50057',\n A700: '#c51162'\n};\nvar _default = pink;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar red = {\n 50: '#ffebee',\n 100: '#ffcdd2',\n 200: '#ef9a9a',\n 300: '#e57373',\n 400: '#ef5350',\n 500: '#f44336',\n 600: '#e53935',\n 700: '#d32f2f',\n 800: '#c62828',\n 900: '#b71c1c',\n A100: '#ff8a80',\n A200: '#ff5252',\n A400: '#ff1744',\n A700: '#d50000'\n};\nvar _default = red;\nexports.default = _default;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: ` + ("`" + `Transition`)) + ("`" + (` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [` + "`"))) + ((`CSSTransition` + ("`" + `](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `)) + (("`" + `Transition`) + ("`" + `, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `))))) + (((("`" + (`Transition` + "`")) + (` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ` + ("`" + "`"))) + (("`" + (`jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: ` + "`")) + (`opacity ${duration}ms ease-in-out` + ("`" + `,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {state => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * `)))) + ((("`" + ("`" + "`")) + (`\n *\n * There are 4 main states a Transition can be in:\n * - ` + ("`" + `'entering'`))) + (("`" + (`\n * - ` + "`")) + ((`'entered'` + "`") + (`\n * - ` + "`"))))))))) + ((((((((`'exiting'` + ("`" + `\n * - `)) + ("`" + (`'exited'` + "`"))) + ((`\n *\n * Transition state is toggled via the ` + ("`" + `in`)) + ("`" + (` prop. When ` + "`")))) + (((`true` + ("`" + ` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `)) + ("`" + (`'entering'` + "`"))) + ((` for the duration of the\n * transition and then to the ` + ("`" + `'entered'`)) + ("`" + (` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ` + "`"))))) + (((("`" + ("`" + `jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * \n * {state => (\n * // ...\n * )}\n * \n * \n *
\n * );\n * }\n * `)) + ("`" + ("`" + "`"))) + ((`\n *\n * When the button is clicked the component will shift to the ` + ("`" + `'entering'`)) + ("`" + (` state\n * and stay there for 500ms (the value of ` + "`")))) + (((`timeout` + ("`" + `) before it finally switches\n * to `)) + ("`" + (`'entered'` + "`"))) + ((`.\n *\n * When ` + ("`" + `in`)) + (("`" + ` is `) + ("`" + `false`)))))) + ((((("`" + (` the same thing happens except the state moves from\n * ` + "`")) + (`'exiting'` + ("`" + ` to `))) + (("`" + (`'exited'` + "`")) + (`.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A ` + ("`" + `function`)))) + ((("`" + (` child can be used instead of a React element. This function is\n * called with the current transition status (` + "`")) + (`'entering'` + ("`" + `, `))) + (("`" + (`'entered'` + "`")) + ((`,\n * ` + "`") + (`'exiting'` + "`"))))) + ((((`, ` + ("`" + `'exited'`)) + ("`" + (`, ` + "`"))) + ((`'unmounted'` + ("`" + `), which can be used to apply context\n * specific props to a component.\n *\n * `)) + ("`" + ("`" + "`")))) + (((`jsx\n * \n * {state => (\n * \n * )}\n * \n * ` + "`"))) + (("`" + ("`" + `\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `)) + (("`" + `Transition`) + ("`" + ` component. If you want to \"lazy mount\" the component on the\n * first `))))))) + (((((("`" + (`in={true}` + "`")) + (` you can set ` + ("`" + `mountOnEnter`))) + (("`" + (`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify ` + "`")) + (`unmountOnExit` + ("`" + `.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `)))) + ((("`" + (`'exited'` + "`")) + (` state.\n * Set ` + ("`" + `unmountOnExit`))) + (("`" + (` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the ` + "`")) + (`` + ("`" + ` component mounts.\n * If you want to transition on the first mount set `))))) + (((("`" + (`appear` + "`")) + (` to ` + ("`" + `true`))) + (("`" + (`, and the\n * component will transition in as soon as the ` + "`")) + (`` + ("`" + ` mounts.\n *\n * > Note: there are no specific \"appear\" states. `)))) + ((("`" + (`appear` + "`")) + (` only adds an additional ` + ("`" + `enter`))) + (("`" + (` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless ` + "`")) + ((`addEndListener` + "`") + (` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ` + "`")))))) + ((((("`" + ("`" + `jsx\n * timeout={500}\n * `)) + ("`" + ("`" + "`"))) + ((`\n *\n * or individually:\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ` + "`")))) + ((("`" + ("`" + `\n *\n * - `)) + ("`" + (`appear` + "`"))) + ((` defaults to the value of ` + ("`" + `enter`)) + (("`" + `\n * - `) + ("`" + `enter`))))) + (((("`" + (` defaults to ` + "`")) + (`0` + ("`" + `\n * - `))) + (("`" + (`exit` + "`")) + (` defaults to ` + ("`" + `0`)))) + ((("`" + (`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = _PropTypes.timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a ` + "`")) + (`done` + ("`" + ` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * `))) + (("`" + ("`" + "`")) + ((`jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ` + "`") + ("`" + "`")))))))) + (((((((`\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * ` + ("`" + `isAppearing`)) + ("`" + (` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * ` + "`"))) + ((`isAppearing` + ("`" + ` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `)) + ("`" + (`isAppearing` + "`")))) + (((` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The ` + ("`" + ``)) + ("`" + (` component manages a set of transition components\n * (` + "`"))) + ((`` + ("`" + ` and `)) + ("`" + (`` + "`"))))) + ((((`) in a list. Like with the transition\n * components, ` + ("`" + ``)) + ("`" + (` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * ` + "`"))) + ((`in` + ("`" + ` prop is toggled automatically by the `)) + ("`" + (`` + "`")))) + (((`.\n *\n * Note that ` + ("`" + ``)) + ("`" + (` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * ` + "`"))) + ((`` + ("`" + ` renders a `)) + (("`" + `
`) + ("`" + ` by default. You can change this\n * behavior by providing a `)))))) + ((((("`" + (`component` + "`")) + (` prop.\n * If you use React v16+ and would like to avoid a wrapping ` + ("`" + `
`))) + (("`" + (` element\n * you can pass in ` + "`")) + (`component={null}` + ("`" + `. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of `)))) + ((("`" + (`` + "`")) + (` components, that are toggled ` + ("`" + `in`))) + (("`" + (` and out as they\n * leave. the ` + "`")) + ((`` + "`") + (` will inject specific transition props, so\n * remember to spread them through if you are wrapping the ` + "`"))))) + ((((`` + ("`" + ` as\n * with our `)) + ("`" + (`` + "`"))) + ((` example.\n *\n * While this component is meant for multiple ` + ("`" + `Transition`)) + ("`" + (` or ` + "`")))) + (((`CSSTransition` + ("`" + `\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `)) + ("`" + (`key` + "`"))) + ((` prop of\n * the transition child as you change its content, this will cause\n * ` + ("`" + `TransitionGroup`)) + (("`" + ` to transition the child out and back in.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `) + ("`" + `cloneElement`))))))) + (((((("`" + (` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a ` + "`")) + (`childFactory` + ("`" + `\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given `))) + (("`" + (`this.props.children` + "`")) + (`, return an object mapping key to child.\n *\n * @param {*} children ` + ("`" + `this.props.children`)))) + ((("`" + (`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * ` + "`")) + (`ReactTransitionChildMapping.getChildMapping()` + ("`" + `.\n * @param {object} next next children as returned from\n * `))) + (("`" + (`ReactTransitionChildMapping.getChildMapping()` + "`")) + ((`.\n * @return {object} a key set that contains all keys in ` + "`") + (`prev` + "`"))))) + ((((` and all keys\n * in ` + ("`" + `next`)) + ("`" + (` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of ` + "`"))) + ((`next` + ("`" + `, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `)) + ("`" + (`next` + "`")))) + (((`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}", + "\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;", + "\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.MuiThemeProviderOld = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _brcast = _interopRequireDefault(require(\"brcast\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _themeListener = _interopRequireWildcard(require(\"./themeListener\"));\n\n/* eslint-disable no-underscore-dangle */\n\n/**\r\n * This component takes a ` + ("`" + `theme`)) + ("`" + (` property.\r\n * It makes the ` + "`"))) + ((`theme` + ("`" + ` available down the React tree thanks to React context.\r\n * This component should preferably be used at **the root of your component tree**.\r\n */\nvar MuiThemeProviderOld =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inherits2.default)(MuiThemeProviderOld, _React$Component);\n\n // We are not using the React state in order to avoid unnecessary rerender.\n function MuiThemeProviderOld(props, context) {\n var _this;\n\n (0, _classCallCheck2.default)(this, MuiThemeProviderOld);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(MuiThemeProviderOld).call(this)); // Get the outer theme from the context, can be null\n\n _this.broadcast = (0, _brcast.default)();\n _this.outerTheme = _themeListener.default.initial(context); // Propagate the theme so it can be accessed by the children\n\n _this.broadcast.setState(_this.mergeOuterLocalTheme(props.theme));\n\n return _this;\n }\n\n (0, _createClass2.default)(MuiThemeProviderOld, [{\n key: \"getChildContext\",\n value: function getChildContext() {\n var _ref;\n\n var _this$props = this.props,\n disableStylesGeneration = _this$props.disableStylesGeneration,\n sheetsCache = _this$props.sheetsCache,\n sheetsManager = _this$props.sheetsManager;\n var muiThemeProviderOptions = this.context.muiThemeProviderOptions || {};\n\n if (disableStylesGeneration !== undefined) {\n muiThemeProviderOptions.disableStylesGeneration = disableStylesGeneration;\n }\n\n if (sheetsCache !== undefined) {\n muiThemeProviderOptions.sheetsCache = sheetsCache;\n }\n\n if (sheetsManager !== undefined) {\n muiThemeProviderOptions.sheetsManager = sheetsManager;\n }\n\n return _ref = {}, (0, _defineProperty2.default)(_ref, _themeListener.CHANNEL, this.broadcast), (0, _defineProperty2.default)(_ref, \"muiThemeProviderOptions\", muiThemeProviderOptions), _ref;\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n // Subscribe on the outer theme, if present\n this.unsubscribeId = _themeListener.default.subscribe(this.context, function (outerTheme) {\n _this2.outerTheme = outerTheme; // Forward the parent theme update to the children\n\n _this2.broadcast.setState(_this2.mergeOuterLocalTheme(_this2.props.theme));\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // Propagate a local theme update\n if (this.props.theme !== prevProps.theme) {\n this.broadcast.setState(this.mergeOuterLocalTheme(this.props.theme));\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.unsubscribeId !== null) {\n _themeListener.default.unsubscribe(this.context, this.unsubscribeId);\n }\n } // Simple merge between the outer theme and the local theme\n\n }, {\n key: \"mergeOuterLocalTheme\",\n value: function mergeOuterLocalTheme(localTheme) {\n // To support composition of theme.\n if (typeof localTheme === 'function') {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(this.outerTheme, ['Material-UI: you are providing a theme function property ' + 'to the MuiThemeProvider component:', ' outerTheme} />', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n')) : void 0;\n return localTheme(this.outerTheme);\n }\n\n if (!this.outerTheme) {\n return localTheme;\n }\n\n return (0, _extends2.default)({}, this.outerTheme, localTheme);\n }\n }, {\n key: \"render\",\n value: function render() {\n // TODO move the sheetsManager property to a different component.\n // warning(\n // typeof window !== 'undefined' || this.props.sheetsManager,\n // [\n // 'Material-UI: you need to provide a sheetsManager to the MuiThemeProvider ' +\n // 'when rendering on the server.',\n // 'If you do not, you might experience a memory leak',\n // ].join('\\n'),\n // );\n return this.props.children;\n }\n }]);\n return MuiThemeProviderOld;\n}(_react.default.Component);\n\nexports.MuiThemeProviderOld = MuiThemeProviderOld;\nprocess.env.NODE_ENV !== \"production\" ? MuiThemeProviderOld.propTypes = {\n /**\r\n * You can wrap a node.\r\n */\n children: _propTypes.default.node.isRequired,\n\n /**\r\n * You can disable the generation of the styles with this option.\r\n * It can be useful when traversing the React tree outside of the HTML\r\n * rendering step on the server.\r\n * Let's say you are using react-apollo to extract all\r\n * the queries made by the interface server-side.\r\n * You can significantly speed up the traversal with this property.\r\n */\n disableStylesGeneration: _propTypes.default.bool,\n\n /**\r\n * @ignore\r\n *\r\n * In beta.\r\n */\n sheetsCache: _propTypes.default.object,\n\n /**\r\n * The sheetsManager is used to deduplicate style sheet injection in the page.\r\n * It's deduplicating using the (theme, styles) couple.\r\n * On the server, you should provide a new instance for each request.\r\n */\n sheetsManager: _propTypes.default.object,\n\n /**\r\n * A theme object.\r\n */\n theme: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func]).isRequired\n} : void 0;\n\nif (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? MuiThemeProviderOld.propTypes = (0, _utils.exactProp)(MuiThemeProviderOld.propTypes) : void 0;\n}\n\nMuiThemeProviderOld.childContextTypes = (0, _extends2.default)({}, _themeListener.default.contextTypes, {\n muiThemeProviderOptions: _propTypes.default.object\n});\nMuiThemeProviderOld.contextTypes = (0, _extends2.default)({}, _themeListener.default.contextTypes, {\n muiThemeProviderOptions: _propTypes.default.object\n});\n/* istanbul ignore if */\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__) {\n _utils.ponyfillGlobal.__MUI_STYLES__ = {};\n}\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider) {\n _utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider = MuiThemeProviderOld;\n}\n\nvar _default = _utils.ponyfillGlobal.__MUI_STYLES__.MuiThemeProvider;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.convertHexToRGB = convertHexToRGB;\nexports.rgbToHex = rgbToHex;\nexports.decomposeColor = decomposeColor;\nexports.recomposeColor = recomposeColor;\nexports.getContrastRatio = getContrastRatio;\nexports.getLuminance = getLuminance;\nexports.emphasize = emphasize;\nexports.fade = fade;\nexports.darken = darken;\nexports.lighten = lighten;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n/* eslint-disable no-use-before-define */\n\n/**\r\n * Returns a number whose value is limited to the given range.\r\n *\r\n * @param {number} value The value to be clamped\r\n * @param {number} min The lower boundary of the output range\r\n * @param {number} max The upper boundary of the output range\r\n * @returns {number} A number in the range [min, max]\r\n */\nfunction clamp(value) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(value >= min && value <= max, \"Material-UI: the value provided \".concat(value, \" is out of range [\").concat(min, \", \").concat(max, \"].\")) : void 0;\n\n if (value < min) {\n return min;\n }\n\n if (value > max) {\n return max;\n }\n\n return value;\n}\n/**\r\n * Converts a color from CSS hex format to CSS rgb format.\r\n *\r\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\r\n * @returns {string} A CSS rgb color string\r\n */\n\n\nfunction convertHexToRGB(color) {\n color = color.substr(1);\n var re = new RegExp(\".{1,\".concat(color.length / 3, \"}\"), 'g');\n var colors = color.match(re);\n\n if (colors && colors[0].length === 1) {\n colors = colors.map(function (n) {\n return n + n;\n });\n }\n\n return colors ? \"rgb(\".concat(colors.map(function (n) {\n return parseInt(n, 16);\n }).join(', '), \")\") : '';\n}\n/**\r\n * Converts a color from CSS rgb format to CSS hex format.\r\n *\r\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\r\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\r\n */\n\n\nfunction rgbToHex(color) {\n // Pass hex straight through\n if (color.indexOf('#') === 0) {\n return color;\n }\n\n function intToHex(c) {\n var hex = c.toString(16);\n return hex.length === 1 ? \"0\".concat(hex) : hex;\n }\n\n var _decomposeColor = decomposeColor(color),\n values = _decomposeColor.values;\n\n values = values.map(function (n) {\n return intToHex(n);\n });\n return \"#\".concat(values.join(''));\n}\n/**\r\n * Returns an object with the type and values of a color.\r\n *\r\n * Note: Does not support rgb % values.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {object} - A MUI color object: {type: string, values: number[]}\r\n */\n\n\nfunction decomposeColor(color) {\n if (color.charAt(0) === '#') {\n return decomposeColor(convertHexToRGB(color));\n }\n\n var marker = color.indexOf('(');\n var type = color.substring(0, marker);\n var values = color.substring(marker + 1, color.length - 1).split(',');\n values = values.map(function (value) {\n return parseFloat(value);\n });\n\n if (process.env.NODE_ENV !== 'production') {\n if (['rgb', 'rgba', 'hsl', 'hsla'].indexOf(type) === -1) {\n throw new Error([\"Material-UI: unsupported `)) + (("`" + `\".concat(color, \"`) + ("`" + ` color.\"), 'We support the following formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla().'].join('\\n'));\n }\n }\n\n return {\n type: type,\n values: values\n };\n}\n/**\r\n * Converts a color object with type and values to a string.\r\n *\r\n * @param {object} color - Decomposed color\r\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla'\r\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\r\n * @returns {string} A CSS color string\r\n */\n\n\nfunction recomposeColor(color) {\n var type = color.type;\n var values = color.values;\n\n if (type.indexOf('rgb') !== -1) {\n // Only convert the first 3 values to int (i.e. not alpha)\n values = values.map(function (n, i) {\n return i < 3 ? parseInt(n, 10) : n;\n });\n }\n\n if (type.indexOf('hsl') !== -1) {\n values[1] = \"\".concat(values[1], \"%\");\n values[2] = \"\".concat(values[2], \"%\");\n }\n\n return \"\".concat(color.type, \"(\").concat(values.join(', '), \")\");\n}\n/**\r\n * Calculates the contrast ratio between two colors.\r\n *\r\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\r\n *\r\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} A contrast ratio value in the range 0 - 21.\r\n */\n\n\nfunction getContrastRatio(foreground, background) {\n var lumA = getLuminance(foreground);\n var lumB = getLuminance(background);\n return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n/**\r\n * The relative brightness of any point in a color space,\r\n * normalized to 0 for darkest black and 1 for lightest white.\r\n *\r\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @returns {number} The relative brightness of the color in the range 0 - 1\r\n */\n\n\nfunction getLuminance(color) {\n var decomposedColor = decomposeColor(color);\n\n if (decomposedColor.type.indexOf('rgb') !== -1) {\n var rgb = decomposedColor.values.map(function (val) {\n val /= 255; // normalized\n\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4);\n }); // Truncate at 3 digits\n\n return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n } // else if (decomposedColor.type.indexOf('hsl') !== -1)\n\n\n return decomposedColor.values[2] / 100;\n}\n/**\r\n * Darken or lighten a colour, depending on its luminance.\r\n * Light colors are darkened, dark colors are lightened.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction emphasize(color) {\n var coefficient = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.15;\n return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\n/**\r\n * Set the absolute transparency of a color.\r\n * Any existing alpha values are overwritten.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} value - value to set the alpha channel to in the range 0 -1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction fade(color, value) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in fade(\".concat(color, \", \").concat(value, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n value = clamp(value);\n\n if (color.type === 'rgb' || color.type === 'hsl') {\n color.type += 'a';\n }\n\n color.values[3] = value;\n return recomposeColor(color);\n}\n/**\r\n * Darkens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction darken(color, coefficient) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in darken(\".concat(color, \", \").concat(coefficient, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] *= 1 - coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] *= 1 - coefficient;\n }\n }\n\n return recomposeColor(color);\n}\n/**\r\n * Lightens a color.\r\n *\r\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\r\n * @param {number} coefficient - multiplier in the range 0 - 1\r\n * @returns {string} A CSS color string. Hex input values are returned as rgb\r\n */\n\n\nfunction lighten(color, coefficient) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(color, \"Material-UI: missing color argument in lighten(\".concat(color, \", \").concat(coefficient, \").\")) : void 0;\n if (!color) return color;\n color = decomposeColor(color);\n coefficient = clamp(coefficient);\n\n if (color.type.indexOf('hsl') !== -1) {\n color.values[2] += (100 - color.values[2]) * coefficient;\n } else if (color.type.indexOf('rgb') !== -1) {\n for (var i = 0; i < 3; i += 1) {\n color.values[i] += (255 - color.values[i]) * coefficient;\n }\n }\n\n return recomposeColor(color);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createBreakpoints;\nexports.keys = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\n// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nvar keys = ['xs', 'sm', 'md', 'lg', 'xl']; // Keep in mind that @media is inclusive by the CSS specification.\n\nexports.keys = keys;\n\nfunction createBreakpoints(breakpoints) {\n var _breakpoints$values = breakpoints.values,\n values = _breakpoints$values === void 0 ? {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920\n } : _breakpoints$values,\n _breakpoints$unit = breakpoints.unit,\n unit = _breakpoints$unit === void 0 ? 'px' : _breakpoints$unit,\n _breakpoints$step = breakpoints.step,\n step = _breakpoints$step === void 0 ? 5 : _breakpoints$step,\n other = (0, _objectWithoutProperties2.default)(breakpoints, [\"values\", \"unit\", \"step\"]);\n\n function up(key) {\n var value = typeof values[key] === 'number' ? values[key] : key;\n return \"@media (min-width:\".concat(value).concat(unit, \")\");\n }\n\n function down(key) {\n var endIndex = keys.indexOf(key) + 1;\n var upperbound = values[keys[endIndex]];\n\n if (endIndex === keys.length) {\n // xl down applies to all sizes\n return up('xs');\n }\n\n var value = typeof upperbound === 'number' && endIndex > 0 ? upperbound : key;\n return \"@media (max-width:\".concat(value - step / 100).concat(unit, \")\");\n }\n\n function between(start, end) {\n var endIndex = keys.indexOf(end) + 1;\n\n if (endIndex === keys.length) {\n return up(start);\n }\n\n return \"@media (min-width:\".concat(values[start]).concat(unit, \") and \") + \"(max-width:\".concat(values[keys[endIndex]] - step / 100).concat(unit, \")\");\n }\n\n function only(key) {\n return between(key, key);\n }\n\n function width(key) {\n return values[key];\n }\n\n return (0, _extends2.default)({\n keys: keys,\n values: values,\n up: up,\n down: down,\n between: between,\n only: only,\n width: width\n }, other);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createGenerateClassName;\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`)))))) + ((((("`" + (`\\s])/g;\n\nfunction safePrefix(classNamePrefix) {\n var prefix = String(classNamePrefix);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(prefix.length < 256, \"Material-UI: the class name prefix is too long: \".concat(prefix, \".\")) : void 0; // Sanitize the string as will be used to prefix the generated class name.\n\n return prefix.replace(escapeRegex, '-');\n} // Returns a function which generates unique class names based on counters.\n// When new generator function is created, rule counter is reset.\n// We need to reset the rule counter for SSR for each request.\n//\n// It's inspired by\n// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js\n\n\nfunction createGenerateClassName() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _options$dangerouslyU = options.dangerouslyUseGlobalCSS,\n dangerouslyUseGlobalCSS = _options$dangerouslyU === void 0 ? false : _options$dangerouslyU,\n _options$productionPr = options.productionPrefix,\n productionPrefix = _options$productionPr === void 0 ? 'jss' : _options$productionPr,\n _options$seed = options.seed,\n seed = _options$seed === void 0 ? '' : _options$seed;\n var ruleCounter = 0;\n return function (rule, styleSheet) {\n ruleCounter += 1;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(ruleCounter < 1e10, ['Material-UI: you might have a memory leak.', 'The ruleCounter is not supposed to grow that much.'].join('')) : void 0;\n\n if (dangerouslyUseGlobalCSS && styleSheet && styleSheet.options.name) {\n return \"\".concat(safePrefix(styleSheet.options.name), \"-\").concat(rule.key);\n }\n\n if (process.env.NODE_ENV === 'production') {\n return \"\".concat(productionPrefix).concat(seed).concat(ruleCounter);\n } // Help with debuggability.\n\n\n if (styleSheet && styleSheet.options.classNamePrefix) {\n return \"\".concat(safePrefix(styleSheet.options.classNamePrefix), \"-\").concat(rule.key, \"-\").concat(seed).concat(ruleCounter);\n }\n\n return \"\".concat(rule.key, \"-\").concat(seed).concat(ruleCounter);\n };\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createMixins;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nfunction createMixins(breakpoints, spacing, mixins) {\n var _toolbar;\n\n return (0, _extends3.default)({\n gutters: function gutters() {\n var styles = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return (0, _extends3.default)({\n paddingLeft: spacing.unit * 2,\n paddingRight: spacing.unit * 2\n }, styles, (0, _defineProperty2.default)({}, breakpoints.up('sm'), (0, _extends3.default)({\n paddingLeft: spacing.unit * 3,\n paddingRight: spacing.unit * 3\n }, styles[breakpoints.up('sm')])));\n },\n toolbar: (_toolbar = {\n minHeight: 56\n }, (0, _defineProperty2.default)(_toolbar, \"\".concat(breakpoints.up('xs'), \" and (orientation: landscape)\"), {\n minHeight: 48\n }), (0, _defineProperty2.default)(_toolbar, breakpoints.up('sm'), {\n minHeight: 64\n }), _toolbar)\n }, mixins);\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _isPlainObject = _interopRequireDefault(require(\"is-plain-object\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _createBreakpoints = _interopRequireDefault(require(\"./createBreakpoints\"));\n\nvar _createMixins = _interopRequireDefault(require(\"./createMixins\"));\n\nvar _createPalette = _interopRequireDefault(require(\"./createPalette\"));\n\nvar _createTypography = _interopRequireDefault(require(\"./createTypography\"));\n\nvar _shadows = _interopRequireDefault(require(\"./shadows\"));\n\nvar _shape = _interopRequireDefault(require(\"./shape\"));\n\nvar _spacing = _interopRequireDefault(require(\"./spacing\"));\n\nvar _transitions = _interopRequireDefault(require(\"./transitions\"));\n\nvar _zIndex = _interopRequireDefault(require(\"./zIndex\"));\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nfunction createMuiTheme() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _options$breakpoints = options.breakpoints,\n breakpointsInput = _options$breakpoints === void 0 ? {} : _options$breakpoints,\n _options$mixins = options.mixins,\n mixinsInput = _options$mixins === void 0 ? {} : _options$mixins,\n _options$palette = options.palette,\n paletteInput = _options$palette === void 0 ? {} : _options$palette,\n shadowsInput = options.shadows,\n _options$spacing = options.spacing,\n spacingInput = _options$spacing === void 0 ? {} : _options$spacing,\n _options$typography = options.typography,\n typographyInput = _options$typography === void 0 ? {} : _options$typography,\n other = (0, _objectWithoutProperties2.default)(options, [\"breakpoints\", \"mixins\", \"palette\", \"shadows\", \"spacing\", \"typography\"]);\n var palette = (0, _createPalette.default)(paletteInput);\n var breakpoints = (0, _createBreakpoints.default)(breakpointsInput);\n var spacing = (0, _extends2.default)({}, _spacing.default, spacingInput);\n var muiTheme = (0, _extends2.default)({\n breakpoints: breakpoints,\n direction: 'ltr',\n mixins: (0, _createMixins.default)(breakpoints, spacing, mixinsInput),\n overrides: {},\n // Inject custom styles\n palette: palette,\n props: {},\n // Inject custom properties\n shadows: shadowsInput || _shadows.default,\n typography: (0, _createTypography.default)(palette, typographyInput)\n }, (0, _deepmerge.default)({\n shape: _shape.default,\n spacing: spacing,\n transitions: _transitions.default,\n zIndex: _zIndex.default\n }, other, {\n isMergeableObject: _isPlainObject.default\n }));\n\n if (process.env.NODE_ENV !== 'production') {\n var statesWarning = ['disabled', 'focused', 'selected', 'checked'];\n\n var traverse = function traverse(node, parentKey) {\n var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var key; // eslint-disable-next-line guard-for-in, no-restricted-syntax\n\n for (key in node) {\n var child = node[key];\n\n if (depth === 1) {\n if (key.indexOf('Mui') === 0 && child) {\n traverse(child, key, depth + 1);\n }\n } else if (statesWarning.indexOf(key) !== -1 && Object.keys(child).length > 0) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(false, [\"Material-UI: the ` + "`")) + (`\".concat(parentKey, \"` + ("`" + ` component increases \") + \"the CSS specificity of the `))) + (("`" + (`\".concat(key, \"` + "`")) + (` internal state.\"), 'You can not override it like this: ', JSON.stringify(node, null, 2), '', 'Instead, you need to use the $ruleName syntax:', JSON.stringify((0, _defineProperty2.default)({}, \"&$\".concat(key), child), null, 2), '', 'https://material-ui.com/customization/overrides#internal-states'].join('\\n')) : void 0;\n }\n }\n };\n\n traverse(other.overrides);\n }\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(muiTheme.shadows.length === 25, 'Material-UI: the shadows array provided to createMuiTheme should support 25 elevations.') : void 0;\n return muiTheme;\n}\n\nvar _default = createMuiTheme;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createPalette;\nexports.dark = exports.light = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _indigo = _interopRequireDefault(require(\"../colors/indigo\"));\n\nvar _pink = _interopRequireDefault(require(\"../colors/pink\"));\n\nvar _grey = _interopRequireDefault(require(\"../colors/grey\"));\n\nvar _red = _interopRequireDefault(require(\"../colors/red\"));\n\nvar _common = _interopRequireDefault(require(\"../colors/common\"));\n\nvar _colorManipulator = require(\"./colorManipulator\");\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nvar light = {\n // The colors used to style the text.\n text: {\n // The most important text.\n primary: 'rgba(0, 0, 0, 0.87)',\n // Secondary text.\n secondary: 'rgba(0, 0, 0, 0.54)',\n // Disabled text have even lower visual prominence.\n disabled: 'rgba(0, 0, 0, 0.38)',\n // Text hints.\n hint: 'rgba(0, 0, 0, 0.38)'\n },\n // The color used to divide different elements.\n divider: 'rgba(0, 0, 0, 0.12)',\n // The background colors used to style the surfaces.\n // Consistency between these values is important.\n background: {\n paper: _common.default.white,\n default: _grey.default[50]\n },\n // The colors used to style the action elements.\n action: {\n // The color of an active action like an icon button.\n active: 'rgba(0, 0, 0, 0.54)',\n // The color of an hovered action.\n hover: 'rgba(0, 0, 0, 0.08)',\n hoverOpacity: 0.08,\n // The color of a selected action.\n selected: 'rgba(0, 0, 0, 0.14)',\n // The color of a disabled action.\n disabled: 'rgba(0, 0, 0, 0.26)',\n // The background color of a disabled action.\n disabledBackground: 'rgba(0, 0, 0, 0.12)'\n }\n};\nexports.light = light;\nvar dark = {\n text: {\n primary: _common.default.white,\n secondary: 'rgba(255, 255, 255, 0.7)',\n disabled: 'rgba(255, 255, 255, 0.5)',\n hint: 'rgba(255, 255, 255, 0.5)',\n icon: 'rgba(255, 255, 255, 0.5)'\n },\n divider: 'rgba(255, 255, 255, 0.12)',\n background: {\n paper: _grey.default[800],\n default: '#303030'\n },\n action: {\n active: _common.default.white,\n hover: 'rgba(255, 255, 255, 0.1)',\n hoverOpacity: 0.1,\n selected: 'rgba(255, 255, 255, 0.2)',\n disabled: 'rgba(255, 255, 255, 0.3)',\n disabledBackground: 'rgba(255, 255, 255, 0.12)'\n }\n};\nexports.dark = dark;\n\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n if (!intent[direction]) {\n if (intent.hasOwnProperty(shade)) {\n intent[direction] = intent[shade];\n } else if (direction === 'light') {\n intent.light = (0, _colorManipulator.lighten)(intent.main, tonalOffset);\n } else if (direction === 'dark') {\n intent.dark = (0, _colorManipulator.darken)(intent.main, tonalOffset * 1.5);\n }\n }\n}\n\nfunction createPalette(palette) {\n var _palette$primary = palette.primary,\n primary = _palette$primary === void 0 ? {\n light: _indigo.default[300],\n main: _indigo.default[500],\n dark: _indigo.default[700]\n } : _palette$primary,\n _palette$secondary = palette.secondary,\n secondary = _palette$secondary === void 0 ? {\n light: _pink.default.A200,\n main: _pink.default.A400,\n dark: _pink.default.A700\n } : _palette$secondary,\n _palette$error = palette.error,\n error = _palette$error === void 0 ? {\n light: _red.default[300],\n main: _red.default[500],\n dark: _red.default[700]\n } : _palette$error,\n _palette$type = palette.type,\n type = _palette$type === void 0 ? 'light' : _palette$type,\n _palette$contrastThre = palette.contrastThreshold,\n contrastThreshold = _palette$contrastThre === void 0 ? 3 : _palette$contrastThre,\n _palette$tonalOffset = palette.tonalOffset,\n tonalOffset = _palette$tonalOffset === void 0 ? 0.2 : _palette$tonalOffset,\n other = (0, _objectWithoutProperties2.default)(palette, [\"primary\", \"secondary\", \"error\", \"type\", \"contrastThreshold\", \"tonalOffset\"]);\n\n function getContrastText(background) {\n // Use the same logic as\n // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n var contrastText = (0, _colorManipulator.getContrastRatio)(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n\n if (process.env.NODE_ENV !== 'production') {\n var contrast = (0, _colorManipulator.getContrastRatio)(background, contrastText);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(contrast >= 3, [\"Material-UI: the contrast ratio of \".concat(contrast, \":1 for \").concat(contrastText, \" on \").concat(background), 'falls below the WACG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n')) : void 0;\n }\n\n return contrastText;\n }\n\n function augmentColor(color) {\n var mainShade = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;\n var lightShade = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n var darkShade = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 700;\n\n if (!color.main && color[mainShade]) {\n color.main = color[mainShade];\n }\n\n if (process.env.NODE_ENV !== 'production' && !color.main) {\n throw new Error(['Material-UI: the color provided to augmentColor(color) is invalid.', \"The color object needs to have a ` + ("`" + `main`)))) + ((("`" + (` property or a ` + "`")) + (`\".concat(mainShade, \"` + ("`" + ` property.\")].join('\\n'));\n }\n\n addLightOrDark(color, 'light', lightShade, tonalOffset);\n addLightOrDark(color, 'dark', darkShade, tonalOffset);\n\n if (!color.contrastText) {\n color.contrastText = getContrastText(color.main);\n }\n\n return color;\n }\n\n augmentColor(primary);\n augmentColor(secondary, 'A400', 'A200', 'A700');\n augmentColor(error);\n var types = {\n dark: dark,\n light: light\n };\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(types[type], \"Material-UI: the palette type `))) + (("`" + (`\".concat(type, \"` + "`")) + ((` is not supported.\")) : void 0;\n var paletteOutput = (0, _deepmerge.default)((0, _extends2.default)({\n // A collection of common colors.\n common: _common.default,\n // The palette type, can be light or dark.\n type: type,\n // The colors used to represent primary interface elements for a user.\n primary: primary,\n // The colors used to represent secondary interface elements for a user.\n secondary: secondary,\n // The colors used to represent interface elements that the user should be made aware of.\n error: error,\n // The grey colors.\n grey: _grey.default,\n // Used by ` + "`") + (`getContrastText()` + "`"))))) + ((((` to maximize the contrast between the background and\n // the text.\n contrastThreshold: contrastThreshold,\n // Take a background color and return the color of the text to maximize the contrast.\n getContrastText: getContrastText,\n // Generate a rich color object.\n augmentColor: augmentColor,\n // Used by the functions below to shift a color's luminance by approximately\n // two indexes within its tonal palette.\n // E.g., shift from Red 500 to Red 300 or Red 700.\n tonalOffset: tonalOffset\n }, types[type]), other, {\n clone: false // No need to clone deep\n\n });\n return paletteOutput;\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = createTypography;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\n\nvar caseAllCaps = {\n textTransform: 'uppercase'\n};\nvar defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n/**\r\n * @see @link{https://material.io/design/typography/the-type-system.html}\r\n * @see @link{https://material.io/design/typography/understanding-typography.html}\r\n */\n\nfunction createTypography(palette, typography) {\n var _ref = typeof typography === 'function' ? typography(palette) : typography,\n _ref$fontFamily = _ref.fontFamily,\n fontFamily = _ref$fontFamily === void 0 ? defaultFontFamily : _ref$fontFamily,\n _ref$fontSize = _ref.fontSize,\n fontSize = _ref$fontSize === void 0 ? 14 : _ref$fontSize,\n _ref$fontWeightLight = _ref.fontWeightLight,\n fontWeightLight = _ref$fontWeightLight === void 0 ? 300 : _ref$fontWeightLight,\n _ref$fontWeightRegula = _ref.fontWeightRegular,\n fontWeightRegular = _ref$fontWeightRegula === void 0 ? 400 : _ref$fontWeightRegula,\n _ref$fontWeightMedium = _ref.fontWeightMedium,\n fontWeightMedium = _ref$fontWeightMedium === void 0 ? 500 : _ref$fontWeightMedium,\n _ref$htmlFontSize = _ref.htmlFontSize,\n htmlFontSize = _ref$htmlFontSize === void 0 ? 16 : _ref$htmlFontSize,\n _ref$useNextVariants = _ref.useNextVariants,\n useNextVariants = _ref$useNextVariants === void 0 ? Boolean(_utils.ponyfillGlobal.__MUI_USE_NEXT_TYPOGRAPHY_VARIANTS__) : _ref$useNextVariants,\n _ref$suppressWarning = _ref.suppressWarning,\n suppressWarning = _ref$suppressWarning === void 0 ? false : _ref$suppressWarning,\n allVariants = _ref.allVariants,\n other = (0, _objectWithoutProperties2.default)(_ref, [\"fontFamily\", \"fontSize\", \"fontWeightLight\", \"fontWeightRegular\", \"fontWeightMedium\", \"htmlFontSize\", \"useNextVariants\", \"suppressWarning\", \"allVariants\"]);\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(useNextVariants || suppressWarning, 'Material-UI: you are using the deprecated typography variants ' + 'that will be removed in the next major release.' + '\\nPlease read the migration guide under https://material-ui.com/style/typography#migration-to-typography-v2') : void 0;\n var coef = fontSize / 14;\n\n var pxToRem = function pxToRem(size) {\n return \"\".concat(size / htmlFontSize * coef, \"rem\");\n };\n\n var buildVariant = function buildVariant(fontWeight, size, lineHeight, letterSpacing, casing) {\n return (0, _extends2.default)({\n color: palette.text.primary,\n fontFamily: fontFamily,\n fontWeight: fontWeight,\n fontSize: pxToRem(size),\n // Unitless following http://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n lineHeight: lineHeight\n }, fontFamily === defaultFontFamily ? {\n letterSpacing: \"\".concat(round(letterSpacing / size), \"em\")\n } : {}, casing, allVariants);\n };\n\n var nextVariants = {\n h1: buildVariant(fontWeightLight, 96, 1, -1.5),\n h2: buildVariant(fontWeightLight, 60, 1, -0.5),\n h3: buildVariant(fontWeightRegular, 48, 1.04, 0),\n h4: buildVariant(fontWeightRegular, 34, 1.17, 0.25),\n h5: buildVariant(fontWeightRegular, 24, 1.33, 0),\n h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n body1Next: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n body2Next: buildVariant(fontWeightRegular, 14, 1.5, 0.15),\n buttonNext: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n captionNext: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps)\n }; // To remove in v4\n\n var oldVariants = {\n display4: (0, _extends2.default)({\n fontSize: pxToRem(112),\n fontWeight: fontWeightLight,\n fontFamily: fontFamily,\n letterSpacing: '-.04em',\n lineHeight: \"\".concat(round(128 / 112), \"em\"),\n marginLeft: '-.04em',\n color: palette.text.secondary\n }, allVariants),\n display3: (0, _extends2.default)({\n fontSize: pxToRem(56),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n letterSpacing: '-.02em',\n lineHeight: \"\".concat(round(73 / 56), \"em\"),\n marginLeft: '-.02em',\n color: palette.text.secondary\n }, allVariants),\n display2: (0, _extends2.default)({\n fontSize: pxToRem(45),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(51 / 45), \"em\"),\n marginLeft: '-.02em',\n color: palette.text.secondary\n }, allVariants),\n display1: (0, _extends2.default)({\n fontSize: pxToRem(34),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(41 / 34), \"em\"),\n color: palette.text.secondary\n }, allVariants),\n headline: (0, _extends2.default)({\n fontSize: pxToRem(24),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(32.5 / 24), \"em\"),\n color: palette.text.primary\n }, allVariants),\n title: (0, _extends2.default)({\n fontSize: pxToRem(21),\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24.5 / 21), \"em\"),\n color: palette.text.primary\n }, allVariants),\n subheading: (0, _extends2.default)({\n fontSize: pxToRem(16),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24 / 16), \"em\"),\n color: palette.text.primary\n }, allVariants),\n body2: (0, _extends2.default)({\n fontSize: pxToRem(14),\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(24 / 14), \"em\"),\n color: palette.text.primary\n }, allVariants),\n body1: (0, _extends2.default)({\n fontSize: pxToRem(14),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(20.5 / 14), \"em\"),\n color: palette.text.primary\n }, allVariants),\n caption: (0, _extends2.default)({\n fontSize: pxToRem(12),\n fontWeight: fontWeightRegular,\n fontFamily: fontFamily,\n lineHeight: \"\".concat(round(16.5 / 12), \"em\"),\n color: palette.text.secondary\n }, allVariants),\n button: (0, _extends2.default)({\n fontSize: pxToRem(14),\n textTransform: 'uppercase',\n fontWeight: fontWeightMedium,\n fontFamily: fontFamily,\n color: palette.text.primary\n }, allVariants)\n };\n return (0, _deepmerge.default)((0, _extends2.default)({\n pxToRem: pxToRem,\n round: round,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeightLight: fontWeightLight,\n fontWeightRegular: fontWeightRegular,\n fontWeightMedium: fontWeightMedium\n }, oldVariants, nextVariants, useNextVariants ? {\n body1: nextVariants.body1Next,\n body2: nextVariants.body2Next,\n button: nextVariants.buttonNext,\n caption: nextVariants.captionNext\n } : {}, {\n useNextVariants: useNextVariants\n }), other, {\n clone: false // No need to clone deep\n\n });\n}", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\n// < 1kb payload overhead when lodash/merge is > 3kb.\n// Support for the jss-expand plugin.\nfunction arrayMerge(destination, source) {\n return source;\n}\n\nfunction getStylesCreator(stylesOrCreator) {\n var themingEnabled = typeof stylesOrCreator === 'function';\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)((0, _typeof2.default)(stylesOrCreator) === 'object' || themingEnabled, ['Material-UI: the first argument provided to withStyles() is invalid.', 'You need to provide a function generating the styles or a styles object.'].join('\\n')) : void 0;\n\n function create(theme, name) {\n var styles = themingEnabled ? stylesOrCreator(theme) : stylesOrCreator;\n\n if (!name || !theme.overrides || !theme.overrides[name]) {\n return styles;\n }\n\n var overrides = theme.overrides[name];\n var stylesWithOverrides = (0, _extends2.default)({}, styles);\n Object.keys(overrides).forEach(function (key) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(stylesWithOverrides[key], ['Material-UI: you are trying to override a style that does not exist.', \"Fix the ` + ("`" + `\".concat(key, \"`)) + ("`" + (` key of ` + "`"))) + ((`theme.overrides.\").concat(name, \"` + ("`" + `.\")].join('\\n')) : void 0;\n stylesWithOverrides[key] = (0, _deepmerge.default)(stylesWithOverrides[key], overrides[key], {\n arrayMerge: arrayMerge\n });\n });\n return stylesWithOverrides;\n }\n\n return {\n create: create,\n options: {},\n themingEnabled: themingEnabled\n };\n}\n\nvar _default = getStylesCreator;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable no-restricted-syntax */\nfunction getThemeProps(params) {\n var theme = params.theme,\n name = params.name,\n props = params.props;\n\n if (!theme.props || !name || !theme.props[name]) {\n return props;\n } // Resolve default props, code borrow from React source.\n // https://github.com/facebook/react/blob/15a8f031838a553e41c0b66eb1bcf1da8448104d/packages/react/src/ReactElement.js#L221\n\n\n var defaultProps = theme.props[name];\n var propName;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n}\n\nvar _default = getThemeProps;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _jssGlobal = _interopRequireDefault(require(\"jss-global\"));\n\nvar _jssNested = _interopRequireDefault(require(\"jss-nested\"));\n\nvar _jssCamelCase = _interopRequireDefault(require(\"jss-camel-case\"));\n\nvar _jssDefaultUnit = _interopRequireDefault(require(\"jss-default-unit\"));\n\nvar _jssVendorPrefixer = _interopRequireDefault(require(\"jss-vendor-prefixer\"));\n\nvar _jssPropsSort = _interopRequireDefault(require(\"jss-props-sort\"));\n\n// Subset of jss-preset-default with only the plugins the Material-UI components are using.\nfunction jssPreset() {\n return {\n plugins: [(0, _jssGlobal.default)(), (0, _jssNested.default)(), (0, _jssCamelCase.default)(), (0, _jssDefaultUnit.default)(), // Disable the vendor prefixer server-side, it does nothing.\n // This way, we can get a performance boost.\n // In the documentation, we are using `)) + ("`" + (`autoprefixer` + "`")))) + (((` to solve this problem.\n typeof window === 'undefined' ? null : (0, _jssVendorPrefixer.default)(), (0, _jssPropsSort.default)()]\n };\n}\n\nvar _default = jssPreset;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nfunction mergeClasses() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var baseClasses = options.baseClasses,\n newClasses = options.newClasses,\n Component = options.Component;\n\n if (!newClasses) {\n return baseClasses;\n }\n\n var nextClasses = (0, _extends2.default)({}, baseClasses);\n\n if (process.env.NODE_ENV !== 'production' && typeof newClasses === 'string') {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(false, [\"Material-UI: the value ` + ("`" + `\".concat(newClasses, \"`)) + ("`" + (` \") + \"provided to the classes property of \".concat((0, _utils.getDisplayName)(Component), \" is incorrect.\"), 'You might want to use the className property instead.'].join('\\n')) : void 0;\n return baseClasses;\n }\n\n Object.keys(newClasses).forEach(function (key) {\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(baseClasses[key] || !newClasses[key], [\"Material-UI: the key ` + "`"))) + ((`\".concat(key, \"` + ("`" + ` \") + \"provided to the classes property is not implemented in \".concat((0, _utils.getDisplayName)(Component), \".\"), \"You can only override one of the following: \".concat(Object.keys(baseClasses).join(','), \".\")].join('\\n')) : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(!newClasses[key] || typeof newClasses[key] === 'string', [\"Material-UI: the key `)) + (("`" + `\".concat(key, \"`) + ("`" + ` \") + \"provided to the classes property is not valid for \".concat((0, _utils.getDisplayName)(Component), \".\"), \"You need to provide a non empty string instead of: \".concat(newClasses[key], \".\")].join('\\n')) : void 0;\n\n if (newClasses[key]) {\n nextClasses[key] = \"\".concat(baseClasses[key], \" \").concat(newClasses[key]);\n }\n });\n return nextClasses;\n}\n\nvar _default = mergeClasses;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// Used https://github.com/thinkloop/multi-key-cache as inspiration\nvar multiKeyStore = {\n set: function set(cache, key1, key2, value) {\n var subCache = cache.get(key1);\n\n if (!subCache) {\n subCache = new Map();\n cache.set(key1, subCache);\n }\n\n subCache.set(key2, value);\n },\n get: function get(cache, key1, key2) {\n var subCache = cache.get(key1);\n return subCache ? subCache.get(key2) : undefined;\n },\n delete: function _delete(cache, key1, key2) {\n var subCache = cache.get(key1);\n subCache.delete(key2);\n }\n};\nvar _default = multiKeyStore;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// Share the same values than in\n// https://github.com/cssinjs/jss/blob/master/packages/react-jss/src/ns.js\nvar ns = {\n jss: '64a55d578f856d258dc345b094a2a2b3',\n sheetsRegistry: 'd4bd0baacbc52bbd48bbb9eb24344ecd',\n sheetOptions: '6fc570d6bd61383819d0f9e7407c452d'\n};\nvar _default = ns;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar shadowKeyUmbraOpacity = 0.2;\nvar shadowKeyPenumbraOpacity = 0.14;\nvar shadowAmbientShadowOpacity = 0.12;\n\nfunction createShadow() {\n return [\"\".concat(arguments.length <= 0 ? undefined : arguments[0], \"px \").concat(arguments.length <= 1 ? undefined : arguments[1], \"px \").concat(arguments.length <= 2 ? undefined : arguments[2], \"px \").concat(arguments.length <= 3 ? undefined : arguments[3], \"px rgba(0,0,0,\").concat(shadowKeyUmbraOpacity, \")\"), \"\".concat(arguments.length <= 4 ? undefined : arguments[4], \"px \").concat(arguments.length <= 5 ? undefined : arguments[5], \"px \").concat(arguments.length <= 6 ? undefined : arguments[6], \"px \").concat(arguments.length <= 7 ? undefined : arguments[7], \"px rgba(0,0,0,\").concat(shadowKeyPenumbraOpacity, \")\"), \"\".concat(arguments.length <= 8 ? undefined : arguments[8], \"px \").concat(arguments.length <= 9 ? undefined : arguments[9], \"px \").concat(arguments.length <= 10 ? undefined : arguments[10], \"px \").concat(arguments.length <= 11 ? undefined : arguments[11], \"px rgba(0,0,0,\").concat(shadowAmbientShadowOpacity, \")\")].join(',');\n}\n\nvar shadows = ['none', createShadow(0, 1, 3, 0, 0, 1, 1, 0, 0, 2, 1, -1), createShadow(0, 1, 5, 0, 0, 2, 2, 0, 0, 3, 1, -2), createShadow(0, 1, 8, 0, 0, 3, 4, 0, 0, 3, 3, -2), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nvar _default = shadows;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar shape = {\n borderRadius: 4\n};\nvar _default = shape;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar spacing = {\n // All components align to an 8dp square baseline grid for mobile, tablet, and desktop.\n // https://material.io/design/layout/understanding-layout.html#pixel-density\n unit: 8\n};\nvar _default = spacing;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.CHANNEL = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\n// Same value used by react-jss\nvar CHANNEL = '__THEMING__';\nexports.CHANNEL = CHANNEL;\nvar themeListener = {\n contextTypes: (0, _defineProperty2.default)({}, CHANNEL, function () {}),\n initial: function initial(context) {\n if (!context[CHANNEL]) {\n return null;\n }\n\n return context[CHANNEL].getState();\n },\n subscribe: function subscribe(context, cb) {\n if (!context[CHANNEL]) {\n return null;\n }\n\n return context[CHANNEL].subscribe(cb);\n },\n unsubscribe: function unsubscribe(context, subscriptionId) {\n if (context[CHANNEL]) {\n context[CHANNEL].unsubscribe(subscriptionId);\n }\n }\n};\nvar _default = themeListener;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.isNumber = exports.isString = exports.formatMs = exports.duration = exports.easing = void 0;\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n/* eslint-disable no-restricted-globals */\n// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nvar easing = {\n // This is the most common easing curve.\n easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n // Objects enter the screen at full velocity from off-screen and\n // slowly decelerate to a resting point.\n easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n // The sharp curve is used by objects that may return to the screen at any time.\n sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n}; // Follow https://material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\n\nexports.easing = easing;\nvar duration = {\n shortest: 150,\n shorter: 200,\n short: 250,\n // most basic recommended timing\n standard: 300,\n // this is to be used in complex animations\n complex: 375,\n // recommended when something is entering screen\n enteringScreen: 225,\n // recommended when something is leaving screen\n leavingScreen: 195\n};\nexports.duration = duration;\n\nvar formatMs = function formatMs(milliseconds) {\n return \"\".concat(Math.round(milliseconds), \"ms\");\n};\n\nexports.formatMs = formatMs;\n\nvar isString = function isString(value) {\n return typeof value === 'string';\n};\n\nexports.isString = isString;\n\nvar isNumber = function isNumber(value) {\n return !isNaN(parseFloat(value));\n};\n/**\r\n * @param {string|Array} props\r\n * @param {object} param\r\n * @param {string} param.prop\r\n * @param {number} param.duration\r\n * @param {string} param.easing\r\n * @param {number} param.delay\r\n */\n\n\nexports.isNumber = isNumber;\nvar _default = {\n easing: easing,\n duration: duration,\n create: function create() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['all'];\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _options$duration = options.duration,\n durationOption = _options$duration === void 0 ? duration.standard : _options$duration,\n _options$easing = options.easing,\n easingOption = _options$easing === void 0 ? easing.easeInOut : _options$easing,\n _options$delay = options.delay,\n delay = _options$delay === void 0 ? 0 : _options$delay,\n other = (0, _objectWithoutProperties2.default)(options, [\"duration\", \"easing\", \"delay\"]);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isString(props) || Array.isArray(props), 'Material-UI: argument \"props\" must be a string or Array.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isNumber(durationOption) || isString(durationOption), \"Material-UI: argument \\\"duration\\\" must be a number or a string but found \".concat(durationOption, \".\")) : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isString(easingOption), 'Material-UI: argument \"easing\" must be a string.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(isNumber(delay) || isString(delay), 'Material-UI: argument \"delay\" must be a number or a string.') : void 0;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(Object.keys(other).length === 0, \"Material-UI: unrecognized argument(s) [\".concat(Object.keys(other).join(','), \"]\")) : void 0;\n return (Array.isArray(props) ? props : [props]).map(function (animatedProp) {\n return \"\".concat(animatedProp, \" \").concat(typeof durationOption === 'string' ? durationOption : formatMs(durationOption), \" \").concat(easingOption, \" \").concat(typeof delay === 'string' ? delay : formatMs(delay));\n }).join(',');\n },\n getAutoHeightDuration: function getAutoHeightDuration(height) {\n if (!height) {\n return 0;\n }\n\n var constant = height / 36; // https://www.wolframalpha.com/input/?i=(4+%2B+15+*+(x+%2F+36+)+**+0.25+%2B+(x+%2F+36)+%2F+5)+*+10\n\n return Math.round((4 + 15 * Math.pow(constant, 0.25) + constant / 5) * 10);\n }\n};\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.sheetsManager = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _objectWithoutProperties2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutProperties\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\nvar _hoistNonReactStatics = _interopRequireDefault(require(\"hoist-non-react-statics\"));\n\nvar _utils = require(\"@material-ui/utils\");\n\nvar _jss = require(\"jss\");\n\nvar _reactJssContext = _interopRequireDefault(require(\"./reactJssContext\"));\n\nvar _jssPreset = _interopRequireDefault(require(\"./jssPreset\"));\n\nvar _mergeClasses = _interopRequireDefault(require(\"./mergeClasses\"));\n\nvar _multiKeyStore = _interopRequireDefault(require(\"./multiKeyStore\"));\n\nvar _createMuiTheme = _interopRequireDefault(require(\"./createMuiTheme\"));\n\nvar _themeListener = _interopRequireDefault(require(\"./themeListener\"));\n\nvar _createGenerateClassName = _interopRequireDefault(require(\"./createGenerateClassName\"));\n\nvar _getStylesCreator = _interopRequireDefault(require(\"./getStylesCreator\"));\n\nvar _getThemeProps = _interopRequireDefault(require(\"./getThemeProps\"));\n\n/* eslint-disable no-underscore-dangle */\n// Default JSS instance.\nvar jss = (0, _jss.create)((0, _jssPreset.default)()); // Use a singleton or the provided one by the context.\n//\n// The counter-based approach doesn't tolerate any mistake.\n// It's much safer to use the same counter everywhere.\n\nvar generateClassName = (0, _createGenerateClassName.default)(); // Global index counter to preserve source order.\n// We create the style sheet during at the creation of the component,\n// children are handled after the parents, so the order of style elements would be parent->child.\n// It is a problem though when a parent passes a className\n// which needs to override any child's styles.\n// StyleSheet of the child has a higher specificity, because of the source order.\n// So our solution is to render sheets them in the reverse order child->sheet, so\n// that parent has a higher specificity.\n\nvar indexCounter = -10e10; // Exported for test purposes\n\nvar sheetsManager = new Map(); // We use the same empty object to ref count the styles that don't need a theme object.\n\nexports.sheetsManager = sheetsManager;\nvar noopTheme = {}; // In order to have self-supporting components, we rely on default theme when not provided.\n\nvar defaultTheme = (0, _createMuiTheme.default)({\n typography: {\n suppressWarning: true\n }\n}); // Link a style sheet with a component.\n// It does not modify the component passed to it;\n// instead, it returns a new component, with a `))))))))))) + (((((((((("`" + (`classes` + "`")) + (` property.\n\nvar withStylesOld = function withStylesOld(stylesOrCreator) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return function (Component) {\n var _extends2;\n\n var _options$withTheme = options.withTheme,\n withTheme = _options$withTheme === void 0 ? false : _options$withTheme,\n _options$flip = options.flip,\n flip = _options$flip === void 0 ? null : _options$flip,\n name = options.name,\n styleSheetOptions = (0, _objectWithoutProperties2.default)(options, [\"withTheme\", \"flip\", \"name\"]);\n var stylesCreator = (0, _getStylesCreator.default)(stylesOrCreator);\n var listenToTheme = stylesCreator.themingEnabled || typeof name === 'string' || withTheme;\n indexCounter += 1;\n stylesCreator.options.index = indexCounter;\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(indexCounter < 0, ['Material-UI: you might have a memory leak.', 'The indexCounter is not supposed to grow that much.'].join('\\n')) : void 0;\n\n var WithStyles =\n /*#__PURE__*/\n function (_React$Component) {\n (0, _inherits2.default)(WithStyles, _React$Component);\n\n function WithStyles(props, context) {\n var _this;\n\n (0, _classCallCheck2.default)(this, WithStyles);\n _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(WithStyles).call(this, props, context));\n _this.jss = context[_reactJssContext.default.jss] || jss;\n _this.sheetsManager = sheetsManager;\n _this.unsubscribeId = null;\n var muiThemeProviderOptions = context.muiThemeProviderOptions;\n\n if (muiThemeProviderOptions) {\n if (muiThemeProviderOptions.sheetsManager) {\n _this.sheetsManager = muiThemeProviderOptions.sheetsManager;\n }\n\n _this.sheetsCache = muiThemeProviderOptions.sheetsCache;\n _this.disableStylesGeneration = muiThemeProviderOptions.disableStylesGeneration;\n } // Attach the stylesCreator to the instance of the component as in the context\n // of react-hot-loader the hooks can be executed in a different closure context:\n // https://github.com/gaearon/react-hot-loader/blob/master/src/patch.dev.js#L107\n\n\n _this.stylesCreatorSaved = stylesCreator;\n _this.sheetOptions = (0, _extends3.default)({\n generateClassName: generateClassName\n }, context[_reactJssContext.default.sheetOptions]); // We use || as the function call is lazy evaluated.\n\n _this.theme = listenToTheme ? _themeListener.default.initial(context) || defaultTheme : noopTheme;\n\n _this.attach(_this.theme);\n\n _this.cacheClasses = {\n // Cache for the finalized classes value.\n value: null,\n // Cache for the last used classes prop pointer.\n lastProp: null,\n // Cache for the last used rendered classes pointer.\n lastJSS: {}\n };\n return _this;\n }\n\n (0, _createClass2.default)(WithStyles, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n if (!listenToTheme) {\n return;\n }\n\n this.unsubscribeId = _themeListener.default.subscribe(this.context, function (theme) {\n var oldTheme = _this2.theme;\n _this2.theme = theme;\n\n _this2.attach(_this2.theme); // Rerender the component so the underlying component gets the theme update.\n // By theme update we mean receiving and applying the new class names.\n\n\n _this2.setState({}, function () {\n _this2.detach(oldTheme);\n });\n });\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n // react-hot-loader specific logic\n if (this.stylesCreatorSaved === stylesCreator || process.env.NODE_ENV === 'production') {\n return;\n }\n\n this.detach(this.theme);\n this.stylesCreatorSaved = stylesCreator;\n this.attach(this.theme);\n this.forceUpdate();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.detach(this.theme);\n\n if (this.unsubscribeId !== null) {\n _themeListener.default.unsubscribe(this.context, this.unsubscribeId);\n }\n }\n }, {\n key: \"getClasses\",\n value: function getClasses() {\n if (this.disableStylesGeneration) {\n return this.props.classes || {};\n } // Tracks if either the rendered classes or classes prop has changed,\n // requiring the generation of a new finalized classes object.\n\n\n var generate = false;\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, this.stylesCreatorSaved, this.theme);\n\n if (sheetManager.sheet.classes !== this.cacheClasses.lastJSS) {\n this.cacheClasses.lastJSS = sheetManager.sheet.classes;\n generate = true;\n }\n\n if (this.props.classes !== this.cacheClasses.lastProp) {\n this.cacheClasses.lastProp = this.props.classes;\n generate = true;\n }\n\n if (generate) {\n this.cacheClasses.value = (0, _mergeClasses.default)({\n baseClasses: this.cacheClasses.lastJSS,\n newClasses: this.props.classes,\n Component: Component\n });\n }\n\n return this.cacheClasses.value;\n }\n }, {\n key: \"attach\",\n value: function attach(theme) {\n if (this.disableStylesGeneration) {\n return;\n }\n\n var stylesCreatorSaved = this.stylesCreatorSaved;\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, stylesCreatorSaved, theme);\n\n if (!sheetManager) {\n sheetManager = {\n refs: 0,\n sheet: null\n };\n\n _multiKeyStore.default.set(this.sheetsManager, stylesCreatorSaved, theme, sheetManager);\n }\n\n if (sheetManager.refs === 0) {\n var sheet;\n\n if (this.sheetsCache) {\n sheet = _multiKeyStore.default.get(this.sheetsCache, stylesCreatorSaved, theme);\n }\n\n if (!sheet) {\n sheet = this.createSheet(theme);\n sheet.attach();\n\n if (this.sheetsCache) {\n _multiKeyStore.default.set(this.sheetsCache, stylesCreatorSaved, theme, sheet);\n }\n }\n\n sheetManager.sheet = sheet;\n var sheetsRegistry = this.context[_reactJssContext.default.sheetsRegistry];\n\n if (sheetsRegistry) {\n sheetsRegistry.add(sheet);\n }\n }\n\n sheetManager.refs += 1;\n }\n }, {\n key: \"createSheet\",\n value: function createSheet(theme) {\n var styles = this.stylesCreatorSaved.create(theme, name);\n var meta = name;\n\n if (process.env.NODE_ENV !== 'production' && !meta) {\n // Provide a better DX outside production.\n meta = (0, _utils.getDisplayName)(Component);\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(typeof meta === 'string', ['Material-UI: the component displayName is invalid. It needs to be a string.', \"Please fix the following component: \".concat(Component, \".\")].join('\\n')) : void 0;\n }\n\n var sheet = this.jss.createStyleSheet(styles, (0, _extends3.default)({\n meta: meta,\n classNamePrefix: meta,\n flip: typeof flip === 'boolean' ? flip : theme.direction === 'rtl',\n link: false\n }, this.sheetOptions, this.stylesCreatorSaved.options, {\n name: name || Component.displayName\n }, styleSheetOptions));\n return sheet;\n }\n }, {\n key: \"detach\",\n value: function detach(theme) {\n if (this.disableStylesGeneration) {\n return;\n }\n\n var sheetManager = _multiKeyStore.default.get(this.sheetsManager, this.stylesCreatorSaved, theme);\n\n sheetManager.refs -= 1;\n\n if (sheetManager.refs === 0) {\n _multiKeyStore.default.delete(this.sheetsManager, this.stylesCreatorSaved, theme);\n\n this.jss.removeStyleSheet(sheetManager.sheet);\n var sheetsRegistry = this.context[_reactJssContext.default.sheetsRegistry];\n\n if (sheetsRegistry) {\n sheetsRegistry.remove(sheetManager.sheet);\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n classes = _this$props.classes,\n innerRef = _this$props.innerRef,\n other = (0, _objectWithoutProperties2.default)(_this$props, [\"classes\", \"innerRef\"]);\n var more = (0, _getThemeProps.default)({\n theme: this.theme,\n name: name,\n props: other\n }); // Provide the theme to the wrapped component.\n // So we don't have to use the ` + ("`" + `withTheme()`))) + (("`" + (` Higher-order Component.\n\n if (withTheme && !more.theme) {\n more.theme = this.theme;\n }\n\n return _react.default.createElement(Component, (0, _extends3.default)({}, more, {\n classes: this.getClasses(),\n ref: innerRef\n }));\n }\n }]);\n return WithStyles;\n }(_react.default.Component);\n\n process.env.NODE_ENV !== \"production\" ? WithStyles.propTypes = {\n /**\r\n * Override or extend the styles applied to the component.\r\n */\n classes: _propTypes.default.object,\n\n /**\r\n * Use that property to pass a ref callback to the decorated component.\r\n */\n innerRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])\n } : void 0;\n WithStyles.contextTypes = (0, _extends3.default)((_extends2 = {\n muiThemeProviderOptions: _propTypes.default.object\n }, (0, _defineProperty2.default)(_extends2, _reactJssContext.default.jss, _propTypes.default.object), (0, _defineProperty2.default)(_extends2, _reactJssContext.default.sheetOptions, _propTypes.default.object), (0, _defineProperty2.default)(_extends2, _reactJssContext.default.sheetsRegistry, _propTypes.default.object), _extends2), listenToTheme ? _themeListener.default.contextTypes : {});\n\n if (process.env.NODE_ENV !== 'production') {\n WithStyles.displayName = \"WithStyles(\".concat((0, _utils.getDisplayName)(Component), \")\");\n }\n\n (0, _hoistNonReactStatics.default)(WithStyles, Component);\n\n if (process.env.NODE_ENV !== 'production') {\n // Exposed for test purposes.\n WithStyles.Naked = Component;\n WithStyles.options = options;\n }\n\n return WithStyles;\n };\n};\n/* istanbul ignore if */\n\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__) {\n _utils.ponyfillGlobal.__MUI_STYLES__ = {};\n}\n\nif (!_utils.ponyfillGlobal.__MUI_STYLES__.withStyles) {\n _utils.ponyfillGlobal.__MUI_STYLES__.withStyles = withStylesOld;\n}\n\nvar _default = function _default(styles, options) {\n return _utils.ponyfillGlobal.__MUI_STYLES__.withStyles(styles, (0, _extends3.default)({\n defaultTheme: defaultTheme\n }, options));\n};\n\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nvar zIndex = {\n mobileStepper: 1000,\n appBar: 1100,\n drawer: 1200,\n modal: 1300,\n snackbar: 1400,\n tooltip: 1500\n};\nvar _default = zIndex;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction deprecatedPropType(validator, reason) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function (props, propName, componentName, location, propFullName) {\n var componentNameSafe = componentName || '<>';\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== 'undefined') {\n return new Error(\"The \".concat(location, \" ` + "`")) + (`\").concat(propFullNameSafe, \"` + ("`" + ` of \") + \"`)))) + ((("`" + (`\".concat(componentNameSafe, \"` + "`")) + (` is deprecated. \").concat(reason));\n }\n\n return null;\n };\n}\n\nvar _default = deprecatedPropType;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.capitalize = capitalize;\nexports.contains = contains;\nexports.findIndex = findIndex;\nexports.find = find;\nexports.createChainedFunction = createChainedFunction;\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _warning = _interopRequireDefault(require(\"warning\"));\n\n// It should to be noted that this function isn't equivalent to ` + ("`" + `text-transform: capitalize`))) + (("`" + (`.\n//\n// A strict capitalization should uppercase the first letter of each word a the sentence.\n// We only handle the first word.\nfunction capitalize(string) {\n if (process.env.NODE_ENV !== 'production' && typeof string !== 'string') {\n throw new Error('Material-UI: capitalize(string) expects a string argument.');\n }\n\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nfunction contains(obj, pred) {\n return Object.keys(pred).every(function (key) {\n return obj.hasOwnProperty(key) && obj[key] === pred[key];\n });\n}\n\nfunction findIndex(arr, pred) {\n var predType = (0, _typeof2.default)(pred);\n\n for (var i = 0; i < arr.length; i += 1) {\n if (predType === 'function' && !!pred(arr[i], i, arr) === true) {\n return i;\n }\n\n if (predType === 'object' && contains(arr[i], pred)) {\n return i;\n }\n\n if (['string', 'number', 'boolean'].indexOf(predType) !== -1) {\n return arr.indexOf(pred);\n }\n }\n\n return -1;\n}\n\nfunction find(arr, pred) {\n var index = findIndex(arr, pred);\n return index > -1 ? arr[index] : undefined;\n}\n/**\r\n * Safe chained function\r\n *\r\n * Will only create a new function if needed,\r\n * otherwise will pass back existing functions or null.\r\n *\r\n * @param {function} functions to chain\r\n * @returns {function|null}\r\n */\n\n\nfunction createChainedFunction() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (acc, func) {\n if (func == null) {\n return acc;\n }\n\n process.env.NODE_ENV !== \"production\" ? (0, _warning.default)(typeof func === 'function', 'Material-UI: invalid Argument Type, must only provide functions, undefined, or null.') : void 0;\n return function chainedFunction() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n acc.apply(this, args);\n func.apply(this, args);\n };\n }, function () {});\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction ownerDocument(node) {\n return node && node.ownerDocument || document;\n}\n\nvar _default = ownerDocument;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _ownerDocument = _interopRequireDefault(require(\"./ownerDocument\"));\n\nfunction ownerWindow(node) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n var doc = (0, _ownerDocument.default)(node);\n return doc.defaultView || doc.parentView || fallback;\n}\n\nvar _default = ownerWindow;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.cloneElementWithClassName = cloneElementWithClassName;\nexports.cloneChildrenWithClassName = cloneChildrenWithClassName;\nexports.isMuiElement = isMuiElement;\nexports.setRef = setRef;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _classnames = _interopRequireDefault(require(\"classnames\"));\n\nfunction cloneElementWithClassName(child, className) {\n return _react.default.cloneElement(child, {\n className: (0, _classnames.default)(child.props.className, className)\n });\n}\n\nfunction cloneChildrenWithClassName(children, className) {\n return _react.default.Children.map(children, function (child) {\n return _react.default.isValidElement(child) && cloneElementWithClassName(child, className);\n });\n}\n\nfunction isMuiElement(element, muiNames) {\n return _react.default.isValidElement(element) && muiNames.indexOf(element.type.muiName) !== -1;\n}\n\nfunction setRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction requirePropFactory(componentNameInError) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n var requireProp = function requireProp(requiredProp) {\n return function (props, propName, componentName, location, propFullName) {\n var propFullNameSafe = propFullName || propName;\n\n if (typeof props[propName] !== 'undefined' && !props[requiredProp]) {\n return new Error(\"The property ` + "`")) + (`\".concat(propFullNameSafe, \"` + ("`" + ` of \") + \"`))))) + (((("`" + (`\".concat(componentNameInError, \"` + "`")) + (` must be used on ` + ("`" + `\").concat(requiredProp, \"`))) + (("`" + (`.\"));\n }\n\n return null;\n };\n };\n\n return requireProp;\n}\n\nvar _default = requirePropFactory;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nfunction chainPropTypes(propType1, propType2) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function validate() {\n return propType1.apply(void 0, arguments) || propType2.apply(void 0, arguments);\n };\n}\n\nvar _default = chainPropTypes;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _reactIs = require(\"react-is\");\n\n/**\n * A factory that returns a propTypes validator that only accepts values that\n * are also accepted by React.createElement\n * e.g. \"div\", functional, class components, forwardRef etc.\n *\n * @param {boolean} isRequired If ` + "`")) + (`true` + ("`" + ` returns a validator\n * that will throw if nullish values are passed\n */\nfunction createComponentProp(isRequired) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return function () {\n return null;\n };\n }\n\n return function componentPropType(props, key, componentName, location, propFullName) {\n var prop = props[key];\n var propName = propFullName || key;\n var message;\n\n if (prop == null) {\n if (isRequired) {\n message = \"The \".concat(location, \" `)))) + ((("`" + (`\").concat(propName, \"` + "`")) + (` is marked as required in ` + ("`" + `\").concat(componentName, \"`))) + (("`" + (`, \") + \"but its value is ` + "`")) + ((`\".concat((0, _typeof2.default)(prop), \"` + "`") + (`.\");\n }\n } else if (!(0, _reactIs.isValidElementType)(prop)) {\n var preciseType = (0, _typeof2.default)(prop);\n message = \"Invalid \".concat(location, \" ` + "`")))))) + (((((`\").concat(propName, \"` + ("`" + ` of type `)) + ("`" + (`\").concat(preciseType, \"` + "`"))) + ((` \") + \"supplied to ` + ("`" + `\".concat(componentName, \"`)) + ("`" + (`, expected a component.\");\n }\n\n if (message != null) {\n // change error message slightly on every check to prevent caching when testing\n // which would not trigger console errors on subsequent fails\n return new Error(\"\".concat(message).concat(process.env.NODE_ENV === 'test' ? Date.now() : ''));\n }\n\n return null;\n };\n}\n\nvar componentPropType = createComponentProp(false);\ncomponentPropType.isRequired = createComponentProp(true);\nvar _default = componentPropType;\nexports.default = _default;", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.specialProperty = void 0;\n\nvar _defineProperty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/defineProperty\"));\n\nvar _extends3 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\n// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n// Only exported for test purposes.\nvar specialProperty = \"exact-prop: \\u200B\";\nexports.specialProperty = specialProperty;\n\nfunction exactProp(propTypes) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'production') {\n return propTypes;\n }\n\n return (0, _extends3.default)({}, propTypes, (0, _defineProperty2.default)({}, specialProperty, function (props) {\n var unsupportedProps = Object.keys(props).filter(function (prop) {\n return !propTypes.hasOwnProperty(prop);\n });\n\n if (unsupportedProps.length > 0) {\n return new Error(\"The following properties are not supported: \".concat(unsupportedProps.map(function (prop) {\n return \"` + "`")))) + (((`\".concat(prop, \"` + ("`" + `\");\n }).join(', '), \". Please remove them.\"));\n }\n\n return null;\n }));\n}\n\nvar _default = exactProp;\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getFunctionName = getFunctionName;\nexports.default = void 0;\n// Fork of recompose/getDisplayName with added IE 11 support\n// Simplified polyfill for IE 11 support\n// https://github.com/JamesMGreene/Function.name/blob/58b314d4a983110c3682f1228f845d39ccca1817/Function.name.js#L3\nvar fnNameMatchRegex = /^\\s*function(?:\\s|\\s*\\/\\*.*\\*\\/\\s*)+([^(\\s/]*)\\s*/;\n\nfunction getFunctionName(fn) {\n var match = \"\".concat(fn).match(fnNameMatchRegex);\n var name = match && match[1];\n return name || '';\n}\n\nfunction getDisplayName(Component) {\n if (typeof Component === 'string') {\n return Component;\n }\n\n if (!Component) {\n return undefined;\n }\n\n return Component.displayName || Component.name || getFunctionName(Component) || 'Component';\n}\n\nvar _default = getDisplayName;\nexports.default = _default;", + "/** @license Material-UI v3.0.0-alpha.3\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nexport { default as componentPropType } from './componentPropType';\nexport { default as chainPropTypes } from './chainPropTypes';\nexport { default as exactProp } from './exactProp';\nexport { default as getDisplayName } from './getDisplayName';\nexport { default as ponyfillGlobal } from './ponyfillGlobal';\n", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n/* eslint-disable */\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar _default = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\nexports.default = _default;", + "module.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n", + "function createBroadcast (initialState) {\n var listeners = {};\n var id = 1;\n var _state = initialState;\n\n function getState () {\n return _state\n }\n\n function setState (state) {\n _state = state;\n var keys = Object.keys(listeners);\n var i = 0;\n var len = keys.length;\n for (; i < len; i++) {\n // if a listener gets unsubscribed during setState we just skip it\n if (listeners[keys[i]]) { listeners[keys[i]](state); }\n }\n }\n\n // subscribe to changes and return the subscriptionId\n function subscribe (listener) {\n if (typeof listener !== 'function') {\n throw new Error('listener must be a function.')\n }\n var currentId = id;\n listeners[currentId] = listener;\n id += 1;\n return currentId\n }\n\n // remove subscription by removing the listener function\n function unsubscribe (id) {\n listeners[id] = undefined;\n }\n\n return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }\n}\n\nexport default createBroadcast;\n", + "/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", + "/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `)) + ("`" + (`typeof` + "`"))) + ((` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", + "const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", + "const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property ` + ("`" + `.conversion`)) + (("`" + ` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", + "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", + "require('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nmodule.exports = require('../modules/_core').Math;\n", + "require('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nmodule.exports = require('../modules/_core').Number;\n", + "module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n", + "var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n", + "var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n", + "// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n", + "var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n", + "var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n", + "// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n", + "// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n", + "// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n", + "var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n", + "// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n", + "var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `) + ("`" + `library`))))) + (((("`" + (`\nmodule.exports = $export;\n", + "module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n", + "// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n", + "var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n", + "var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n", + "var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n", + "module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n", + "var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n", + "// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n", + "// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n", + "module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n", + "module.exports = false;\n", + "// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n", + "// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n", + "// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n", + "// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n", + "// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake ` + "`")) + (`null` + ("`" + ` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n", + "var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n", + "var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n", + "var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n", + "// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n", + "var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n", + "// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n", + "exports.f = {}.propertyIsEnumerable;\n", + "var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n", + "var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n", + "module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n", + "var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n", + "// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n", + "var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n", + "var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n", + "'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n", + "var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n", + "module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n", + "var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n", + "// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n", + "// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n", + "// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n", + "// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n", + "var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n", + "// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n", + "// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n", + "// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n", + "// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n", + "// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n", + "// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n", + "// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n", + "// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n", + "// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n", + "// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n", + "// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n", + "// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n", + "// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n", + "// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n", + "// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n", + "// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n", + "// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n", + "'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n", + "// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n", + "// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n", + "// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n", + "// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n", + "// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n", + "// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n", + "// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n", + "var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n", + "var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n", + "'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n", + "'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = camelize;\nvar regExp = /[-\\s]+(.)?/g;\n\n/**\n * Convert dash separated strings to camel cased.\n *\n * @param {String} str\n * @return {String}\n */\nfunction camelize(str) {\n return str.replace(regExp, toUpper);\n}\n\nfunction toUpper(match, c) {\n return c ? c.toUpperCase() : '';\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.supportedValue = exports.supportedProperty = exports.prefix = undefined;\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nvar _supportedProperty = require('./supported-property');\n\nvar _supportedProperty2 = _interopRequireDefault(_supportedProperty);\n\nvar _supportedValue = require('./supported-value');\n\nvar _supportedValue2 = _interopRequireDefault(_supportedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = {\n prefix: _prefix2['default'],\n supportedProperty: _supportedProperty2['default'],\n supportedValue: _supportedValue2['default']\n}; /**\n * CSS Vendor prefix detection and property feature testing.\n *\n * @copyright Oleg Slobodskoi 2015\n * @website https://github.com/jsstyles/css-vendor\n * @license MIT\n */\n\nexports.prefix = _prefix2['default'];\nexports.supportedProperty = _supportedProperty2['default'];\nexports.supportedValue = _supportedValue2['default'];", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar js = ''; /**\n * Export javascript style and css style vendor prefixes.\n * Based on \"transform\" support test.\n */\n\nvar css = '';\n\n// We should not do anything if required serverside.\nif (_isInBrowser2['default']) {\n // Order matters. We need to check Webkit the last one because\n // other vendors use to add Webkit prefixes to some properties\n var jsCssMap = {\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-',\n Webkit: '-webkit-'\n };\n var style = document.createElement('p').style;\n var testProp = 'Transform';\n\n for (var key in jsCssMap) {\n if (key + testProp in style) {\n js = key;\n css = jsCssMap[key];\n break;\n }\n }\n}\n\n/**\n * Vendor prefix string for the current browser.\n *\n * @type {{js: String, css: String}}\n * @api public\n */\nexports['default'] = { js: js, css: css };", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = supportedProperty;\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nvar _camelize = require('./camelize');\n\nvar _camelize2 = _interopRequireDefault(_camelize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar el = void 0;\nvar cache = {};\n\nif (_isInBrowser2['default']) {\n el = document.createElement('p');\n\n /**\n * We test every property on vendor prefix requirement.\n * Once tested, result is cached. It gives us up to 70% perf boost.\n * http://jsperf.com/element-style-object-access-vs-plain-object\n *\n * Prefill cache with known css properties to reduce amount of\n * properties we need to feature test at runtime.\n * http://davidwalsh.name/vendor-prefix\n */\n var computed = window.getComputedStyle(document.documentElement, '');\n for (var key in computed) {\n if (!isNaN(key)) cache[computed[key]] = computed[key];\n }\n}\n\n/**\n * Test if a property is supported, returns supported property with vendor\n * prefix if required. Returns `))) + (("`" + (`false` + "`")) + (` if not supported.\n *\n * @param {String} prop dash separated\n * @return {String|Boolean}\n * @api public\n */\nfunction supportedProperty(prop) {\n // For server-side rendering.\n if (!el) return prop;\n\n // We have not tested this prop yet, lets do the test.\n if (cache[prop] != null) return cache[prop];\n\n // Camelization is required because we can't test using\n // css syntax for e.g. in FF.\n // Test if property is supported as it is.\n if ((0, _camelize2['default'])(prop) in el.style) {\n cache[prop] = prop;\n }\n // Test if property is supported with vendor prefix.\n else if (_prefix2['default'].js + (0, _camelize2['default'])('-' + prop) in el.style) {\n cache[prop] = _prefix2['default'].css + prop;\n } else {\n cache[prop] = false;\n }\n\n return cache[prop];\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = supportedValue;\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _prefix = require('./prefix');\n\nvar _prefix2 = _interopRequireDefault(_prefix);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar cache = {};\nvar el = void 0;\n\nif (_isInBrowser2['default']) el = document.createElement('p');\n\n/**\n * Returns prefixed value if needed. Returns ` + ("`" + `false`)))) + ((("`" + (` if value is not supported.\n *\n * @param {String} property\n * @param {String} value\n * @return {String|Boolean}\n * @api public\n */\nfunction supportedValue(property, value) {\n // For server-side rendering.\n if (!el) return value;\n\n // It is a string or a number as a string like '1'.\n // We want only prefixable values here.\n if (typeof value !== 'string' || !isNaN(parseInt(value, 10))) return value;\n\n var cacheKey = property + value;\n\n if (cache[cacheKey] != null) return cache[cacheKey];\n\n // IE can even throw an error in some cases, for e.g. style.content = 'bar'\n try {\n // Test value as it is.\n el.style[property] = value;\n } catch (err) {\n cache[cacheKey] = false;\n return false;\n }\n\n // Value is supported as it is.\n if (el.style[property] !== '') {\n cache[cacheKey] = value;\n } else {\n // Test value with vendor prefix.\n value = _prefix2['default'].css + value;\n\n // Hardcode test to convert \"flex\" to \"-ms-flexbox\" for IE10.\n if (value === '-ms-flex') value = '-ms-flexbox';\n\n el.style[property] = value;\n\n // Value is supported with vendor prefix.\n if (el.style[property] !== '') cache[cacheKey] = value;\n }\n\n if (!cache[cacheKey]) cache[cacheKey] = false;\n\n // Reset style value.\n el.style[property] = '';\n\n return cache[cacheKey];\n}", + "export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", + "import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n", + "import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n", + "import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n", + "export default function(x) {\n return x === null ? NaN : +x;\n}\n", + "var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n", + "export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n", + "var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n", + "export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n", + "import number from \"./number\";\n\nexport default function(values, p, valueof) {\n if (valueof == null) valueof = number;\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n", + "export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n", + "import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n", + "var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n", + "import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal(range) {\n var index = map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n}\n", + "import {range as sequence} from \"d3-array\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n", + "export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n", + "import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n", + "export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n", + "import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n", + "import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n", + "export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", + "export default function(x) {\n return function() {\n return x;\n };\n}\n", + "import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", + "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", + "import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n", + "export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n", + "import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n", + "import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", + "import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n", + "export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n", + "import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n", + "import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n", + "export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n", + "var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n", + "import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", + "var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n", + "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n", + "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", + "import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n", + "export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n", + "export default function(x) {\n return function() {\n return x;\n };\n}\n", + "export default function(x) {\n return +x;\n}\n", + "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function deinterpolateLinear(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n}\n\nfunction deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n}\n\nfunction reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n}\n\nfunction bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n}\n\n// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\nexport default function continuous(deinterpolate, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n}\n", + "// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n", + "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n", + "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", + "import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n", + "import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", + "import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n", + "export default function(x) {\n return x;\n}\n", + "import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n", + "export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n", + "export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n", + "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", + "import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", + "import {ticks, tickIncrement} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(deinterpolate, reinterpolate);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n}\n", + "import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n}\n", + "export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n", + "import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport constant from \"./constant\";\nimport nice from \"./nice\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction deinterpolate(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n}\n\nfunction reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport default function log() {\n var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n}\n", + "import constant from \"./constant\";\nimport {linearish} from \"./linear\";\nimport {default as continuous, copy} from \"./continuous\";\n\nfunction raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n}\n\nexport default function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n}\n\nexport function sqrt() {\n return pow().exponent(0.5);\n}\n", + "import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n", + "import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n}\n", + "import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n}\n", + "var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n", + "import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n", + "export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n", + "import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n", + "import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n", + "import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n", + "import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n", + "import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n", + "import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n", + "import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n", + "import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n", + "import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n", + "import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n", + "import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n", + "import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n", + "import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n", + "import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n", + "import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n", + "import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n", + "import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n", + "import {bisector, tickStep} from \"d3-array\";\nimport {interpolateNumber as reinterpolate} from \"d3-interpolate\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport {default as continuous, copy, deinterpolateLinear as deinterpolate} from \"./continuous\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, reinterpolate),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n}\n", + "import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\n\nexport default function() {\n return calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n}\n", + "import {linearish} from \"./linear\";\n\nexport default function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n k10 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) * k10;\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], k10 = x0 === x1 ? 0 : 1 / (x1 - x0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n", + "import {linearish} from \"./linear\";\n\nexport default function diverging(interpolator) {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n k10 = 1,\n k21 = 1,\n clamp = false;\n\n function scale(x) {\n var t = 0.5 + ((x = +x) - x1) * (x < x1 ? k10 : k21);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], x2 = +_[2], k10 = x0 === x1 ? 0 : 0.5 / (x1 - x0), k21 = x1 === x2 ? 0 : 0.5 / (x2 - x1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return diverging(interpolator).domain([x0, x1, x2]).clamp(clamp);\n };\n\n return linearish(scale);\n}\n", + "export {\n default as scaleBand,\n point as scalePoint\n} from \"./band\";\n\nexport {\n default as scaleIdentity\n} from \"./identity\";\n\nexport {\n default as scaleLinear\n} from \"./linear\";\n\nexport {\n default as scaleLog\n} from \"./log\";\n\nexport {\n default as scaleOrdinal,\n implicit as scaleImplicit\n} from \"./ordinal\";\n\nexport {\n default as scalePow,\n sqrt as scaleSqrt\n} from \"./pow\";\n\nexport {\n default as scaleQuantile\n} from \"./quantile\";\n\nexport {\n default as scaleQuantize\n} from \"./quantize\";\n\nexport {\n default as scaleThreshold\n} from \"./threshold\";\n\nexport {\n default as scaleTime\n} from \"./time\";\n\nexport {\n default as scaleUtc\n} from \"./utcTime\";\n\nexport {\n default as scaleSequential\n} from \"./sequential\";\n\nexport {\n default as scaleDiverging\n} from \"./diverging\";\n", + "var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n", + "export default function(x) {\n return function constant() {\n return x;\n };\n}\n", + "export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", + "function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n", + "export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n", + "import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n", + "import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n", + "import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n", + "import curveRadial, {curveRadialLinear} from \"./curve/radial\";\nimport line from \"./line\";\n\nexport function lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nexport default function() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n", + "export var slice = Array.prototype.slice;\n", + "import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n", + "export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n", + "var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n", + "import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n", + "export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n", + "var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n", + "var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n", + "import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n", + "export default function() {}\n", + "export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n", + "import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n", + "import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n", + "import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n", + "export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n", + "import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n", + "import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n", + "function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n", + "function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n", + "function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n", + "export default function(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n", + "export default function(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n", + "import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport offsetNone from \"./offset/none\";\nimport orderNone from \"./order/none\";\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nexport default function() {\n var keys = constant([]),\n order = orderNone,\n offset = offsetNone,\n value = stackValue;\n\n function stack(data) {\n var kz = keys.apply(this, arguments),\n i,\n m = data.length,\n n = kz.length,\n sz = new Array(n),\n oz;\n\n for (i = 0; i < n; ++i) {\n for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n si[j] = sij = [0, +value(data[j], ki, j, data)];\n sij.data = data[j];\n }\n si.key = ki;\n }\n\n for (i = 0, oz = order(sz); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n };\n\n return stack;\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none(series, order);\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none(series, order);\n}\n", + "import none from \"./none\";\n\nexport default function(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none(series, order);\n}\n", + "export {default as arc} from \"./arc\";\nexport {default as area} from \"./area\";\nexport {default as line} from \"./line\";\nexport {default as pie} from \"./pie\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial\";\nexport {linkHorizontal, linkVertical, linkRadial} from \"./link/index\";\n\nexport {default as symbol, symbols} from \"./symbol\";\nexport {default as symbolCircle} from \"./symbol/circle\";\nexport {default as symbolCross} from \"./symbol/cross\";\nexport {default as symbolDiamond} from \"./symbol/diamond\";\nexport {default as symbolSquare} from \"./symbol/square\";\nexport {default as symbolStar} from \"./symbol/star\";\nexport {default as symbolTriangle} from \"./symbol/triangle\";\nexport {default as symbolWye} from \"./symbol/wye\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen\";\nexport {default as curveBasis} from \"./curve/basis\";\nexport {default as curveBundle} from \"./curve/bundle\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen\";\nexport {default as curveCardinal} from \"./curve/cardinal\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed\";\nexport {default as curveLinear} from \"./curve/linear\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone\";\nexport {default as curveNatural} from \"./curve/natural\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step\";\n\nexport {default as stack} from \"./stack\";\nexport {default as stackOffsetExpand} from \"./offset/expand\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging\";\nexport {default as stackOffsetNone} from \"./offset/none\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle\";\nexport {default as stackOrderAscending} from \"./order/ascending\";\nexport {default as stackOrderDescending} from \"./order/descending\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut\";\nexport {default as stackOrderNone} from \"./order/none\";\nexport {default as stackOrderReverse} from \"./order/reverse\";\n", + "/*! decimal.js-light v2.5.0 https://github.com/MikeMcl/decimal.js-light/LICENCE */\r\n;(function (globalScope) {\r\n 'use strict';\r\n\r\n\r\n /*\r\n * decimal.js-light v2.5.0\r\n * An arbitrary-precision Decimal type for JavaScript.\r\n * https://github.com/MikeMcl/decimal.js-light\r\n * Copyright (c) 2018 Michael Mclaughlin \r\n * MIT Expat Licence\r\n */\r\n\r\n\r\n // ----------------------------------- EDITABLE DEFAULTS ------------------------------------ //\r\n\r\n\r\n // The limit on the value of ` + "`")) + (`precision` + ("`" + `, and on the value of the first argument to\r\n // `))) + (("`" + (`toDecimalPlaces` + "`")) + ((`, ` + "`") + (`toExponential` + "`"))))))) + ((((((`, ` + ("`" + `toFixed`)) + ("`" + (`, ` + "`"))) + ((`toPrecision` + ("`" + ` and `)) + ("`" + (`toSignificantDigits` + "`")))) + (((`.\r\n var MAX_DIGITS = 1e9, // 0 to 1e9\r\n\r\n\r\n // The initial configuration properties of the Decimal constructor.\r\n Decimal = {\r\n\r\n // These values must be integers within the stated ranges (inclusive).\r\n // Most of these values can be changed during run-time using ` + ("`" + `Decimal.config`)) + ("`" + (`.\r\n\r\n // The maximum number of significant digits of the result of a calculation or base conversion.\r\n // E.g. ` + "`"))) + ((`Decimal.config({ precision: 20 });` + ("`" + `\r\n precision: 20, // 1 to MAX_DIGITS\r\n\r\n // The rounding mode used by default by `)) + ("`" + (`toInteger` + "`"))))) + ((((`, ` + ("`" + `toDecimalPlaces`)) + ("`" + (`, ` + "`"))) + ((`toExponential` + ("`" + `,\r\n // `)) + ("`" + (`toFixed` + "`")))) + (((`, ` + ("`" + `toPrecision`)) + ("`" + (` and ` + "`"))) + ((`toSignificantDigits` + ("`" + `.\r\n //\r\n // ROUND_UP 0 Away from zero.\r\n // ROUND_DOWN 1 Towards zero.\r\n // ROUND_CEIL 2 Towards +Infinity.\r\n // ROUND_FLOOR 3 Towards -Infinity.\r\n // ROUND_HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // ROUND_HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // ROUND_HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // ROUND_HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n //\r\n // E.g.\r\n // `)) + (("`" + `Decimal.rounding = 4;`) + ("`" + `\r\n // `)))))) + ((((("`" + (`Decimal.rounding = Decimal.ROUND_HALF_UP;` + "`")) + (`\r\n rounding: 4, // 0 to 8\r\n\r\n // The exponent value at and beneath which ` + ("`" + `toString`))) + (("`" + (` returns exponential notation.\r\n // JavaScript numbers: -7\r\n toExpNeg: -7, // 0 to -MAX_E\r\n\r\n // The exponent value at and above which ` + "`")) + (`toString` + ("`" + ` returns exponential notation.\r\n // JavaScript numbers: 21\r\n toExpPos: 21, // 0 to MAX_E\r\n\r\n // The natural logarithm of 10.\r\n // 115 digits\r\n LN10: '2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286'\r\n },\r\n\r\n\r\n // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n external = true,\r\n\r\n decimalError = '[DecimalError] ',\r\n invalidArgument = decimalError + 'Invalid argument: ',\r\n exponentOutOfRange = decimalError + 'Exponent out of range: ',\r\n\r\n mathfloor = Math.floor,\r\n mathpow = Math.pow,\r\n\r\n isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n ONE,\r\n BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_SAFE_INTEGER = 9007199254740991,\r\n MAX_E = mathfloor(MAX_SAFE_INTEGER / LOG_BASE), // 1286742750677284\r\n\r\n // Decimal.prototype object\r\n P = {};\r\n\r\n\r\n // Decimal prototype methods\r\n\r\n\r\n /*\r\n * absoluteValue abs\r\n * comparedTo cmp\r\n * decimalPlaces dp\r\n * dividedBy div\r\n * dividedToIntegerBy idiv\r\n * equals eq\r\n * exponent\r\n * greaterThan gt\r\n * greaterThanOrEqualTo gte\r\n * isInteger isint\r\n * isNegative isneg\r\n * isPositive ispos\r\n * isZero\r\n * lessThan lt\r\n * lessThanOrEqualTo lte\r\n * logarithm log\r\n * minus sub\r\n * modulo mod\r\n * naturalExponential exp\r\n * naturalLogarithm ln\r\n * negated neg\r\n * plus add\r\n * precision sd\r\n * squareRoot sqrt\r\n * times mul\r\n * toDecimalPlaces todp\r\n * toExponential\r\n * toFixed\r\n * toInteger toint\r\n * toNumber\r\n * toPower pow\r\n * toPrecision\r\n * toSignificantDigits tosd\r\n * toString\r\n * valueOf val\r\n */\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new this.constructor(this);\r\n if (x.s) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this Decimal is greater than the value of `)))) + ((("`" + (`y` + "`")) + (`,\r\n * -1 if the value of this Decimal is less than the value of ` + ("`" + `y`))) + (("`" + (`,\r\n * 0 if they have the same value\r\n *\r\n */\r\n P.comparedTo = P.cmp = function (y) {\r\n var i, j, xdL, ydL,\r\n x = this;\r\n\r\n y = new x.constructor(y);\r\n\r\n // Signs differ?\r\n if (x.s !== y.s) return x.s || -y.s;\r\n\r\n // Compare exponents.\r\n if (x.e !== y.e) return x.e > y.e ^ x.s < 0 ? 1 : -1;\r\n\r\n xdL = x.d.length;\r\n ydL = y.d.length;\r\n\r\n // Compare digit by digit.\r\n for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n if (x.d[i] !== y.d[i]) return x.d[i] > y.d[i] ^ x.s < 0 ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return xdL === ydL ? 0 : xdL > ydL ^ x.s < 0 ? 1 : -1;\r\n };\r\n\r\n\r\n /*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\n P.decimalPlaces = P.dp = function () {\r\n var x = this,\r\n w = x.d.length - 1,\r\n dp = (w - x.e) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n w = x.d[w];\r\n if (w) for (; w % 10 == 0; w /= 10) dp--;\r\n\r\n return dp < 0 ? 0 : dp;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal divided by ` + "`")) + ((`y` + "`") + (`, truncated to\r\n * ` + "`"))))) + ((((`precision` + ("`" + ` significant digits.\r\n *\r\n */\r\n P.dividedBy = P.div = function (y) {\r\n return divide(this, new this.constructor(y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `)) + ("`" + (`y` + "`"))) + ((`, truncated to ` + ("`" + `precision`)) + ("`" + (` significant digits.\r\n *\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(divide(x, new Ctor(y), 0, 1), Ctor.precision);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is equal to the value of ` + "`")))) + (((`y` + ("`" + `, otherwise return false.\r\n *\r\n */\r\n P.equals = P.eq = function (y) {\r\n return !this.cmp(y);\r\n };\r\n\r\n\r\n /*\r\n * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent).\r\n *\r\n */\r\n P.exponent = function () {\r\n return getBase10Exponent(this);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than the value of `)) + ("`" + (`y` + "`"))) + ((`, otherwise return\r\n * false.\r\n *\r\n */\r\n P.greaterThan = P.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is greater than or equal to the value of ` + ("`" + `y`)) + (("`" + `,\r\n * otherwise return false.\r\n *\r\n */\r\n P.greaterThanOrEqualTo = P.gte = function (y) {\r\n return this.cmp(y) >= 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\n P.isInteger = P.isint = function () {\r\n return this.e > this.d.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\n P.isNegative = P.isneg = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\n P.isPositive = P.ispos = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is 0, otherwise return false.\r\n *\r\n */\r\n P.isZero = function () {\r\n return this.s === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than `) + ("`" + `y`)))))))) + ((((((("`" + (`, otherwise return false.\r\n *\r\n */\r\n P.lessThan = P.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this Decimal is less than or equal to ` + "`")) + (`y` + ("`" + `, otherwise return false.\r\n *\r\n */\r\n P.lessThanOrEqualTo = P.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n };\r\n\r\n\r\n /*\r\n * Return the logarithm of the value of this Decimal to the specified base, truncated to\r\n * `))) + (("`" + (`precision` + "`")) + (` significant digits.\r\n *\r\n * If no base is specified, return log[10](x).\r\n *\r\n * log[base](x) = ln(x) / ln(base)\r\n *\r\n * The maximum error of the result is 1 ulp (unit in the last place).\r\n *\r\n * [base] {number|string|Decimal} The base of the logarithm.\r\n *\r\n */\r\n P.logarithm = P.log = function (base) {\r\n var r,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision,\r\n wpr = pr + 5;\r\n\r\n // Default base is 10.\r\n if (base === void 0) {\r\n base = new Ctor(10);\r\n } else {\r\n base = new Ctor(base);\r\n\r\n // log[-b](x) = NaN\r\n // log[0](x) = NaN\r\n // log[1](x) = NaN\r\n if (base.s < 1 || base.eq(ONE)) throw Error(decimalError + 'NaN');\r\n }\r\n\r\n // log[b](-x) = NaN\r\n // log[b](0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // log[b](1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n external = false;\r\n r = divide(ln(x, wpr), ln(base, wpr), wpr);\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal minus ` + ("`" + `y`)))) + ((("`" + (`, truncated to\r\n * ` + "`")) + (`precision` + ("`" + ` significant digits.\r\n *\r\n */\r\n P.minus = P.sub = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? subtract(x, y) : add(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal modulo `))) + (("`" + (`y` + "`")) + (`, truncated to\r\n * ` + ("`" + `precision`))))) + (((("`" + (` significant digits.\r\n *\r\n */\r\n P.modulo = P.mod = function (y) {\r\n var q,\r\n x = this,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n y = new Ctor(y);\r\n\r\n // x % 0 = NaN\r\n if (!y.s) throw Error(decimalError + 'NaN');\r\n\r\n // Return x if x is 0.\r\n if (!x.s) return round(new Ctor(x), pr);\r\n\r\n // Prevent rounding of intermediate calculations.\r\n external = false;\r\n q = divide(x, y, 0, 1).times(y);\r\n external = true;\r\n\r\n return x.minus(q);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, truncated to ` + "`")) + (`precision` + ("`" + `\r\n * significant digits.\r\n *\r\n */\r\n P.naturalExponential = P.exp = function () {\r\n return exp(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * truncated to `))) + (("`" + (`precision` + "`")) + (` significant digits.\r\n *\r\n */\r\n P.naturalLogarithm = P.ln = function () {\r\n return ln(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\n P.negated = P.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s || 0;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal plus ` + ("`" + `y`)))) + ((("`" + (`, truncated to\r\n * ` + "`")) + (`precision` + ("`" + ` significant digits.\r\n *\r\n */\r\n P.plus = P.add = function (y) {\r\n var x = this;\r\n y = new x.constructor(y);\r\n return x.s == y.s ? add(x, y) : subtract(x, (y.s = -y.s, y));\r\n };\r\n\r\n\r\n /*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\n P.precision = P.sd = function (z) {\r\n var e, sd, w,\r\n x = this;\r\n\r\n if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n e = getBase10Exponent(x) + 1;\r\n w = x.d.length - 1;\r\n sd = w * LOG_BASE + 1;\r\n w = x.d[w];\r\n\r\n // If non-zero...\r\n if (w) {\r\n\r\n // Subtract the number of trailing zeros of the last word.\r\n for (; w % 10 == 0; w /= 10) sd--;\r\n\r\n // Add the number of digits of the first word.\r\n for (w = x.d[0]; w >= 10; w /= 10) sd++;\r\n }\r\n\r\n return z && e > sd ? e : sd;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the square root of this Decimal, truncated to `))) + (("`" + (`precision` + "`")) + ((`\r\n * significant digits.\r\n *\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var e, n, pr, r, s, t, wpr,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n // Negative or zero?\r\n if (x.s < 1) {\r\n if (!x.s) return new Ctor(0);\r\n\r\n // sqrt(-x) = NaN\r\n throw Error(decimalError + 'NaN');\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n external = false;\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+x);\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = digitsToString(x.d);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(n);\r\n e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '1e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new Ctor(n);\r\n } else {\r\n r = new Ctor(s.toString());\r\n }\r\n\r\n pr = Ctor.precision;\r\n s = wpr = pr + 3;\r\n\r\n // Newton-Raphson iteration.\r\n for (;;) {\r\n t = r;\r\n r = t.plus(divide(x, t, wpr + 2)).times(0.5);\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === (n = digitsToString(r.d)).slice(0, wpr)) {\r\n n = n.slice(wpr - 3, wpr + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n if (s == wpr && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the exact result as the\r\n // nines may infinitely repeat.\r\n round(t, pr + 1, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n } else if (n != '9999') {\r\n break;\r\n }\r\n\r\n wpr += 4;\r\n }\r\n }\r\n\r\n external = true;\r\n\r\n return round(r, pr);\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal times ` + "`") + (`y` + "`")))))) + (((((`, truncated to\r\n * ` + ("`" + `precision`)) + ("`" + (` significant digits.\r\n *\r\n */\r\n P.times = P.mul = function (y) {\r\n var carry, e, i, k, r, rL, t, xdL, ydL,\r\n x = this,\r\n Ctor = x.constructor,\r\n xd = x.d,\r\n yd = (y = new Ctor(y)).d;\r\n\r\n // Return 0 if either is 0.\r\n if (!x.s || !y.s) return new Ctor(0);\r\n\r\n y.s *= x.s;\r\n e = x.e + y.e;\r\n xdL = xd.length;\r\n ydL = yd.length;\r\n\r\n // Ensure xd points to the longer array.\r\n if (xdL < ydL) {\r\n r = xd;\r\n xd = yd;\r\n yd = r;\r\n rL = xdL;\r\n xdL = ydL;\r\n ydL = rL;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n r = [];\r\n rL = xdL + ydL;\r\n for (i = rL; i--;) r.push(0);\r\n\r\n // Multiply!\r\n for (i = ydL; --i >= 0;) {\r\n carry = 0;\r\n for (k = xdL + i; k > i;) {\r\n t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n r[k--] = t % BASE | 0;\r\n carry = t / BASE | 0;\r\n }\r\n\r\n r[k] = (r[k] + carry) % BASE | 0;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; !r[--rL];) r.pop();\r\n\r\n if (carry) ++e;\r\n else r.shift();\r\n\r\n y.d = r;\r\n y.e = e;\r\n\r\n return external ? round(y, Ctor.precision) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of ` + "`"))) + ((`dp` + ("`" + `\r\n * decimal places using rounding mode `)) + ("`" + (`rm` + "`")))) + (((` or ` + ("`" + `rounding`)) + ("`" + (` if ` + "`"))) + ((`rm` + ("`" + ` is omitted.\r\n *\r\n * If `)) + (("`" + `dp`) + ("`" + ` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toDecimalPlaces = P.todp = function (dp, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n x = new Ctor(x);\r\n if (dp === void 0) return x;\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n return round(x, dp + getBase10Exponent(x) + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `))))) + (((("`" + (`dp` + "`")) + (` fixed decimal places using rounding mode ` + ("`" + `rounding`))) + (("`" + (`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toExponential = function (dp, rm) {\r\n var str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) {\r\n str = toString(x, true);\r\n } else {\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), dp + 1, rm);\r\n str = toString(x, true, dp + 1);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * ` + "`")) + (`dp` + ("`" + ` fixed decimal places and rounded using rounding mode `)))) + ((("`" + (`rm` + "`")) + (` or ` + ("`" + `rounding`))) + (("`" + (` if ` + "`")) + ((`rm` + "`") + (` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\n P.toFixed = function (dp, rm) {\r\n var str, y,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (dp === void 0) return toString(x);\r\n\r\n checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n y = round(new Ctor(x), dp + getBase10Exponent(x) + 1, rm);\r\n str = toString(y.abs(), false, dp + getBase10Exponent(y) + 1);\r\n\r\n // To determine whether to add the minus sign look at the value before it was rounded,\r\n // i.e. look at ` + "`"))))))) + ((((((`x` + ("`" + ` rather than `)) + ("`" + (`y` + "`"))) + ((`.\r\n return x.isneg() && !x.isZero() ? '-' + str : str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode ` + ("`" + `rounding`)) + ("`" + (`.\r\n *\r\n */\r\n P.toInteger = P.toint = function () {\r\n var x = this,\r\n Ctor = x.constructor;\r\n return round(new Ctor(x), getBase10Exponent(x) + 1, Ctor.rounding);\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this Decimal converted to a number primitive.\r\n *\r\n */\r\n P.toNumber = function () {\r\n return +this;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power ` + "`")))) + (((`y` + ("`" + `,\r\n * truncated to `)) + ("`" + (`precision` + "`"))) + ((` significant digits.\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n * x^y = exp(y*ln(x))\r\n *\r\n * The maximum error is 1 ulp (unit in last place).\r\n *\r\n * y {number|string|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\n P.toPower = P.pow = function (y) {\r\n var e, k, pr, r, sign, yIsInt,\r\n x = this,\r\n Ctor = x.constructor,\r\n guard = 12,\r\n yn = +(y = new Ctor(y));\r\n\r\n // pow(x, 0) = 1\r\n if (!y.s) return new Ctor(ONE);\r\n\r\n x = new Ctor(x);\r\n\r\n // pow(0, y > 0) = 0\r\n // pow(0, y < 0) = Infinity\r\n if (!x.s) {\r\n if (y.s < 1) throw Error(decimalError + 'Infinity');\r\n return x;\r\n }\r\n\r\n // pow(1, y) = 1\r\n if (x.eq(ONE)) return x;\r\n\r\n pr = Ctor.precision;\r\n\r\n // pow(x, 1) = x\r\n if (y.eq(ONE)) return round(x, pr);\r\n\r\n e = y.e;\r\n k = y.d.length - 1;\r\n yIsInt = e >= k;\r\n sign = x.s;\r\n\r\n if (!yIsInt) {\r\n\r\n // pow(x < 0, y non-integer) = NaN\r\n if (sign < 0) throw Error(decimalError + 'NaN');\r\n\r\n // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n } else if ((k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n r = new Ctor(ONE);\r\n\r\n // Max k of 9007199254740991 takes 53 loop iterations.\r\n // Maximum digits array length; leaves [28, 34] guard digits.\r\n e = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n external = false;\r\n\r\n for (;;) {\r\n if (k % 2) {\r\n r = r.times(x);\r\n truncate(r.d, e);\r\n }\r\n\r\n k = mathfloor(k / 2);\r\n if (k === 0) break;\r\n\r\n x = x.times(x);\r\n truncate(x.d, e);\r\n }\r\n\r\n external = true;\r\n\r\n return y.s < 0 ? new Ctor(ONE).div(r) : round(r, pr);\r\n }\r\n\r\n // Result is negative if x is negative and the last digit of integer y is odd.\r\n sign = sign < 0 && y.d[Math.max(e, k)] & 1 ? -1 : 1;\r\n\r\n x.s = 1;\r\n external = false;\r\n r = y.times(ln(x, pr + guard));\r\n external = true;\r\n r = exp(r);\r\n r.s = sign;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal rounded to ` + ("`" + `sd`)) + ("`" + (` significant digits\r\n * using rounding mode ` + "`"))))) + ((((`rounding` + ("`" + `.\r\n *\r\n * Return exponential notation if `)) + ("`" + (`sd` + "`"))) + ((` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n var e, str,\r\n x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n e = getBase10Exponent(x);\r\n str = toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n\r\n x = round(new Ctor(x), sd, rm);\r\n e = getBase10Exponent(x);\r\n str = toString(x, sd <= e || e <= Ctor.toExpNeg, sd);\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of ` + ("`" + `sd`)) + ("`" + (`\r\n * significant digits using rounding mode ` + "`")))) + (((`rm` + ("`" + `, or to `)) + ("`" + (`precision` + "`"))) + ((` and ` + ("`" + `rounding`)) + (("`" + ` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\n P.toSignificantDigits = P.tosd = function (sd, rm) {\r\n var x = this,\r\n Ctor = x.constructor;\r\n\r\n if (sd === void 0) {\r\n sd = Ctor.precision;\r\n rm = Ctor.rounding;\r\n } else {\r\n checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n if (rm === void 0) rm = Ctor.rounding;\r\n else checkInt32(rm, 0, 8);\r\n }\r\n\r\n return round(new Ctor(x), sd, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `) + ("`" + `toExpPos`)))))) + ((((("`" + (`, or a negative exponent equal to or less than ` + "`")) + (`toExpNeg` + ("`" + `.\r\n *\r\n */\r\n P.toString = P.valueOf = P.val = P.toJSON = function () {\r\n var x = this,\r\n e = getBase10Exponent(x),\r\n Ctor = x.constructor;\r\n\r\n return toString(x, e <= Ctor.toExpNeg || e >= Ctor.toExpPos);\r\n };\r\n\r\n\r\n // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n /*\r\n * add P.minus, P.plus\r\n * checkInt32 P.todp, P.toExponential, P.toFixed, P.toPrecision, P.tosd\r\n * digitsToString P.log, P.sqrt, P.pow, toString, exp, ln\r\n * divide P.div, P.idiv, P.log, P.mod, P.sqrt, exp, ln\r\n * exp P.exp, P.pow\r\n * getBase10Exponent P.exponent, P.sd, P.toint, P.sqrt, P.todp, P.toFixed, P.toPrecision,\r\n * P.toString, divide, round, toString, exp, ln\r\n * getLn10 P.log, ln\r\n * getZeroString digitsToString, toString\r\n * ln P.log, P.ln, P.pow, exp\r\n * parseDecimal Decimal\r\n * round P.abs, P.idiv, P.log, P.minus, P.mod, P.neg, P.plus, P.toint, P.sqrt,\r\n * P.times, P.todp, P.toExponential, P.toFixed, P.pow, P.toPrecision, P.tosd,\r\n * divide, getLn10, exp, ln\r\n * subtract P.minus, P.plus\r\n * toString P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf\r\n * truncate P.pow\r\n *\r\n * Throws: P.log, P.mod, P.sd, P.sqrt, P.pow, checkInt32, divide, round,\r\n * getLn10, exp, ln, parseDecimal, Decimal, config\r\n */\r\n\r\n\r\n function add(x, y) {\r\n var carry, d, e, i, k, len, xd, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // If either is zero...\r\n if (!x.s || !y.s) {\r\n\r\n // Return x if y is zero.\r\n // Return y if y is non-zero.\r\n if (!y.s) y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are finite, non-zero numbers with the same sign.\r\n\r\n k = x.e;\r\n e = y.e;\r\n xd = xd.slice();\r\n i = k - e;\r\n\r\n // If base 1e7 exponents differ...\r\n if (i) {\r\n if (i < 0) {\r\n d = xd;\r\n i = -i;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = k;\r\n len = xd.length;\r\n }\r\n\r\n // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n k = Math.ceil(pr / LOG_BASE);\r\n len = k > len ? k + 1 : len + 1;\r\n\r\n if (i > len) {\r\n i = len;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n d.reverse();\r\n for (; i--;) d.push(0);\r\n d.reverse();\r\n }\r\n\r\n len = xd.length;\r\n i = yd.length;\r\n\r\n // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n if (len - i < 0) {\r\n i = len;\r\n d = yd;\r\n yd = xd;\r\n xd = d;\r\n }\r\n\r\n // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n for (carry = 0; i;) {\r\n carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n xd[i] %= BASE;\r\n }\r\n\r\n if (carry) {\r\n xd.unshift(carry);\r\n ++e;\r\n }\r\n\r\n // Remove trailing zeros.\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function checkInt32(i, min, max) {\r\n if (i !== ~~i || i < min || i > max) {\r\n throw Error(invalidArgument + i);\r\n }\r\n }\r\n\r\n\r\n function digitsToString(d) {\r\n var i, k, ws,\r\n indexOfLastWord = d.length - 1,\r\n str = '',\r\n w = d[0];\r\n\r\n if (indexOfLastWord > 0) {\r\n str += w;\r\n for (i = 1; i < indexOfLastWord; i++) {\r\n ws = d[i] + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n str += ws;\r\n }\r\n\r\n w = d[i];\r\n ws = w + '';\r\n k = LOG_BASE - ws.length;\r\n if (k) str += getZeroString(k);\r\n } else if (w === 0) {\r\n return '0';\r\n }\r\n\r\n // Remove trailing zeros of last w.\r\n for (; w % 10 === 0;) w /= 10;\r\n\r\n return str + w;\r\n }\r\n\r\n\r\n var divide = (function () {\r\n\r\n // Assumes non-zero x and k, and hence non-zero result.\r\n function multiplyInteger(x, k) {\r\n var temp,\r\n carry = 0,\r\n i = x.length;\r\n\r\n for (x = x.slice(); i--;) {\r\n temp = x[i] * k + carry;\r\n x[i] = temp % BASE | 0;\r\n carry = temp / BASE | 0;\r\n }\r\n\r\n if (carry) x.unshift(carry);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, r;\r\n\r\n if (aL != bL) {\r\n r = aL > bL ? 1 : -1;\r\n } else {\r\n for (i = r = 0; i < aL; i++) {\r\n if (a[i] != b[i]) {\r\n r = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return r;\r\n }\r\n\r\n function subtract(a, b, aL) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * BASE + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1;) a.shift();\r\n }\r\n\r\n return function (x, y, pr, dp) {\r\n var cmp, e, i, k, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0, yL, yz,\r\n Ctor = x.constructor,\r\n sign = x.s == y.s ? 1 : -1,\r\n xd = x.d,\r\n yd = y.d;\r\n\r\n // Either 0?\r\n if (!x.s) return new Ctor(x);\r\n if (!y.s) throw Error(decimalError + 'Division by zero');\r\n\r\n e = x.e - y.e;\r\n yL = yd.length;\r\n xL = xd.length;\r\n q = new Ctor(sign);\r\n qd = q.d = [];\r\n\r\n // Result exponent may be one less than e.\r\n for (i = 0; yd[i] == (xd[i] || 0); ) ++i;\r\n if (yd[i] > (xd[i] || 0)) --e;\r\n\r\n if (pr == null) {\r\n sd = pr = Ctor.precision;\r\n } else if (dp) {\r\n sd = pr + (getBase10Exponent(x) - getBase10Exponent(y)) + 1;\r\n } else {\r\n sd = pr;\r\n }\r\n\r\n if (sd < 0) return new Ctor(0);\r\n\r\n // Convert precision in number of base 10 digits to base 1e7 digits.\r\n sd = sd / LOG_BASE + 2 | 0;\r\n i = 0;\r\n\r\n // divisor < 1e7\r\n if (yL == 1) {\r\n k = 0;\r\n yd = yd[0];\r\n sd++;\r\n\r\n // k is the carry.\r\n for (; (i < xL || k) && sd--; i++) {\r\n t = k * BASE + (xd[i] || 0);\r\n qd[i] = t / yd | 0;\r\n k = t % yd | 0;\r\n }\r\n\r\n // divisor >= 1e7\r\n } else {\r\n\r\n // Normalise xd and yd so highest order digit of yd is >= BASE/2\r\n k = BASE / (yd[0] + 1) | 0;\r\n\r\n if (k > 1) {\r\n yd = multiplyInteger(yd, k);\r\n xd = multiplyInteger(xd, k);\r\n yL = yd.length;\r\n xL = xd.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xd.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL;) rem[remL++] = 0;\r\n\r\n yz = yd.slice();\r\n yz.unshift(0);\r\n yd0 = yd[0];\r\n\r\n if (yd[1] >= BASE / 2) ++yd0;\r\n\r\n do {\r\n k = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, k.\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * BASE + (rem[1] || 0);\r\n\r\n // k will be how many times the divisor goes into the current remainder.\r\n k = rem0 / yd0 | 0;\r\n\r\n // Algorithm:\r\n // 1. product = divisor * trial digit (k)\r\n // 2. if product > remainder: product -= divisor, k--\r\n // 3. remainder -= product\r\n // 4. if product was < remainder at 2:\r\n // 5. compare new remainder and divisor\r\n // 6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n if (k > 1) {\r\n if (k >= BASE) k = BASE - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiplyInteger(yd, k);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n cmp = compare(prod, rem, prodL, remL);\r\n\r\n // product > remainder.\r\n if (cmp == 1) {\r\n k--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yd, prodL);\r\n }\r\n } else {\r\n\r\n // cmp is -1.\r\n // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n if (k == 0) cmp = k = 1;\r\n prod = yd.slice();\r\n }\r\n\r\n prodL = prod.length;\r\n if (prodL < remL) prod.unshift(0);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL);\r\n\r\n // If product was < previous remainder.\r\n if (cmp == -1) {\r\n remL = rem.length;\r\n\r\n // Compare divisor and new remainder.\r\n cmp = compare(yd, rem, yL, remL);\r\n\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n if (cmp < 1) {\r\n k++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yd, remL);\r\n }\r\n }\r\n\r\n remL = rem.length;\r\n } else if (cmp === 0) {\r\n k++;\r\n rem = [0];\r\n } // if cmp === 1, k will be 0\r\n\r\n // Add the next digit, k, to the result array.\r\n qd[i++] = k;\r\n\r\n // Update the remainder.\r\n if (cmp && rem[0]) {\r\n rem[remL++] = xd[xi] || 0;\r\n } else {\r\n rem = [xd[xi]];\r\n remL = 1;\r\n }\r\n\r\n } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n }\r\n\r\n // Leading zero?\r\n if (!qd[0]) qd.shift();\r\n\r\n q.e = e;\r\n\r\n return round(q, dp ? pr + getBase10Exponent(q) + 1 : pr);\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural exponential of `))) + (("`" + (`x` + "`")) + (` truncated to ` + ("`" + `sd`)))) + ((("`" + (`\r\n * significant digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n * Repeat x = x / 32, k += 5, until |x| < 0.1\r\n * exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n * exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n */\r\n function exp(x, sd) {\r\n var denominator, guard, pow, sum, t, wpr,\r\n i = 0,\r\n k = 0,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n if (getBase10Exponent(x) > 16) throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n\r\n // exp(0) = 1\r\n if (!x.s) return new Ctor(ONE);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n t = new Ctor(0.03125);\r\n\r\n while (x.abs().gte(0.1)) {\r\n x = x.times(t); // x = x / 2^5\r\n k += 5;\r\n }\r\n\r\n // Estimate the precision increase necessary to ensure the first 4 rounding digits are correct.\r\n guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n wpr += guard;\r\n denominator = pow = sum = new Ctor(ONE);\r\n Ctor.precision = wpr;\r\n\r\n for (;;) {\r\n pow = round(pow.times(x), wpr);\r\n denominator = denominator.times(++i);\r\n t = sum.plus(divide(pow, denominator, wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n while (k--) sum = round(sum.times(sum), wpr);\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n }\r\n }\r\n\r\n\r\n // Calculate the base 10 exponent from the base 1e7 exponent.\r\n function getBase10Exponent(x) {\r\n var e = x.e * LOG_BASE,\r\n w = x.d[0];\r\n\r\n // Add the number of digits of the first word of the digits array.\r\n for (; w >= 10; w /= 10) e++;\r\n return e;\r\n }\r\n\r\n\r\n function getLn10(Ctor, sd, pr) {\r\n\r\n if (sd > Ctor.LN10.sd()) {\r\n\r\n\r\n // Reset global state in case the exception is caught.\r\n external = true;\r\n if (pr) Ctor.precision = pr;\r\n throw Error(decimalError + 'LN10 precision limit exceeded');\r\n }\r\n\r\n return round(new Ctor(Ctor.LN10), sd);\r\n }\r\n\r\n\r\n function getZeroString(k) {\r\n var zs = '';\r\n for (; k--;) zs += '0';\r\n return zs;\r\n }\r\n\r\n\r\n /*\r\n * Return a new Decimal whose value is the natural logarithm of ` + "`")) + (`x` + ("`" + ` truncated to `))) + (("`" + (`sd` + "`")) + ((` significant\r\n * digits.\r\n *\r\n * ln(n) is non-terminating (n != 1)\r\n *\r\n */\r\n function ln(y, sd) {\r\n var c, c0, denominator, e, numerator, sum, t, wpr, x2,\r\n n = 1,\r\n guard = 10,\r\n x = y,\r\n xd = x.d,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // ln(-x) = NaN\r\n // ln(0) = -Infinity\r\n if (x.s < 1) throw Error(decimalError + (x.s ? 'NaN' : '-Infinity'));\r\n\r\n // ln(1) = 0\r\n if (x.eq(ONE)) return new Ctor(0);\r\n\r\n if (sd == null) {\r\n external = false;\r\n wpr = pr;\r\n } else {\r\n wpr = sd;\r\n }\r\n\r\n if (x.eq(10)) {\r\n if (sd == null) external = true;\r\n return getLn10(Ctor, wpr);\r\n }\r\n\r\n wpr += guard;\r\n Ctor.precision = wpr;\r\n c = digitsToString(xd);\r\n c0 = c.charAt(0);\r\n e = getBase10Exponent(x);\r\n\r\n if (Math.abs(e) < 1.5e15) {\r\n\r\n // Argument reduction.\r\n // The series converges faster the closer the argument is to 1, so using\r\n // ln(a^b) = b * ln(a), ln(a) = ln(a^b) / b\r\n // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n // later be divided by this number, then separate out the power of 10 using\r\n // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n // max n is 6 (gives 0.7 - 1.3)\r\n while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n x = x.times(y);\r\n c = digitsToString(x.d);\r\n c0 = c.charAt(0);\r\n n++;\r\n }\r\n\r\n e = getBase10Exponent(x);\r\n\r\n if (c0 > 1) {\r\n x = new Ctor('0.' + c);\r\n e++;\r\n } else {\r\n x = new Ctor(c0 + '.' + c.slice(1));\r\n }\r\n } else {\r\n\r\n // The argument reduction method above may result in overflow if the argument y is a massive\r\n // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n x = ln(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(x, pr)) : x;\r\n }\r\n\r\n // x is reduced to a value near 1.\r\n\r\n // Taylor series.\r\n // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n // where x = (y - 1)/(y + 1) (|x| < 1)\r\n sum = numerator = x = divide(x.minus(ONE), x.plus(ONE), wpr);\r\n x2 = round(x.times(x), wpr);\r\n denominator = 3;\r\n\r\n for (;;) {\r\n numerator = round(numerator.times(x2), wpr);\r\n t = sum.plus(divide(numerator, new Ctor(denominator), wpr));\r\n\r\n if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n sum = sum.times(2);\r\n\r\n // Reverse the argument reduction.\r\n if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n sum = divide(sum, new Ctor(n), wpr);\r\n\r\n Ctor.precision = pr;\r\n return sd == null ? (external = true, round(sum, pr)) : sum;\r\n }\r\n\r\n sum = t;\r\n denominator += 2;\r\n }\r\n }\r\n\r\n\r\n /*\r\n * Parse the value of a new Decimal ` + "`") + (`x` + "`"))))) + ((((` from string ` + ("`" + `str`)) + ("`" + (`.\r\n */\r\n function parseDecimal(x, str) {\r\n var e, i, len;\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48;) ++i;\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(len - 1) === 48;) --len;\r\n str = str.slice(i, len);\r\n\r\n if (str) {\r\n len -= i;\r\n e = e - i - 1;\r\n x.e = mathfloor(e / LOG_BASE);\r\n x.d = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first word of the digits array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE;\r\n\r\n if (i < len) {\r\n if (i) x.d.push(+str.slice(0, i));\r\n for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n str = str.slice(i);\r\n i = LOG_BASE - str.length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--;) str += '0';\r\n x.d.push(+str);\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) throw Error(exponentOutOfRange + e);\r\n } else {\r\n\r\n // Zero.\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Round ` + "`"))) + ((`x` + ("`" + ` to `)) + ("`" + (`sd` + "`")))) + (((` significant digits, using rounding mode ` + ("`" + `rm`)) + ("`" + (` if present (truncate otherwise).\r\n */\r\n function round(x, sd, rm) {\r\n var i, j, k, n, rd, doRound, w, xdi,\r\n xd = x.d;\r\n\r\n // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // w: the word of xd which contains the rounding digit, a base 1e7 number.\r\n // xdi: the index of w within xd.\r\n // n: the number of digits of w.\r\n // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n // they had leading zeros)\r\n // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n // Get the length of the first word of the digits array xd.\r\n for (n = 1, k = xd[0]; k >= 10; k /= 10) n++;\r\n i = sd - n;\r\n\r\n // Is the rounding digit in the first word of xd?\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n w = xd[xdi = 0];\r\n } else {\r\n xdi = Math.ceil((i + 1) / LOG_BASE);\r\n k = xd.length;\r\n if (xdi >= k) return x;\r\n w = k = xd[xdi];\r\n\r\n // Get the number of digits of w.\r\n for (n = 1; k >= 10; k /= 10) n++;\r\n\r\n // Get the index of rd within w.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within w, adjusted for leading zeros.\r\n // The number of leading zeros of w is given by LOG_BASE - n.\r\n j = i - LOG_BASE + n;\r\n }\r\n\r\n if (rm !== void 0) {\r\n k = mathpow(10, n - j - 1);\r\n\r\n // Get the rounding digit at index j of w.\r\n rd = w / k % 10 | 0;\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n doRound = sd < 0 || xd[xdi + 1] !== void 0 || w % k;\r\n\r\n // The expression ` + "`"))) + ((`w % mathpow(10, n - j - 1)` + ("`" + ` returns all the digits of w to the right of the\r\n // digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression will give\r\n // 714.\r\n\r\n doRound = rm < 4\r\n ? (rd || doRound) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || doRound || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? w / mathpow(10, n - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n }\r\n\r\n if (sd < 1 || !xd[0]) {\r\n if (doRound) {\r\n k = getBase10Exponent(x);\r\n xd.length = 1;\r\n\r\n // Convert sd to decimal places.\r\n sd = sd - k - 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n x.e = mathfloor(-sd / LOG_BASE) || 0;\r\n } else {\r\n xd.length = 1;\r\n\r\n // Zero.\r\n xd[0] = x.e = x.s = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xd.length = xdi;\r\n k = 1;\r\n xdi--;\r\n } else {\r\n xd.length = xdi + 1;\r\n k = mathpow(10, LOG_BASE - i);\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of w.\r\n xd[xdi] = j > 0 ? (w / mathpow(10, n - j) % mathpow(10, j) | 0) * k : 0;\r\n }\r\n\r\n if (doRound) {\r\n for (;;) {\r\n\r\n // Is the digit to be rounded up in the first word of xd?\r\n if (xdi == 0) {\r\n if ((xd[0] += k) == BASE) {\r\n xd[0] = 1;\r\n ++x.e;\r\n }\r\n\r\n break;\r\n } else {\r\n xd[xdi] += k;\r\n if (xd[xdi] != BASE) break;\r\n xd[xdi--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n\r\n if (external && (x.e > MAX_E || x.e < -MAX_E)) {\r\n throw Error(exponentOutOfRange + getBase10Exponent(x));\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function subtract(x, y) {\r\n var d, e, i, j, k, len, xd, xe, xLTy, yd,\r\n Ctor = x.constructor,\r\n pr = Ctor.precision;\r\n\r\n // Return y negated if x is zero.\r\n // Return x if y is zero and x is non-zero.\r\n if (!x.s || !y.s) {\r\n if (y.s) y.s = -y.s;\r\n else y = new Ctor(x);\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n xd = x.d;\r\n yd = y.d;\r\n\r\n // x and y are non-zero numbers with the same sign.\r\n\r\n e = y.e;\r\n xe = x.e;\r\n xd = xd.slice();\r\n k = xe - e;\r\n\r\n // If exponents differ...\r\n if (k) {\r\n xLTy = k < 0;\r\n\r\n if (xLTy) {\r\n d = xd;\r\n k = -k;\r\n len = yd.length;\r\n } else {\r\n d = yd;\r\n e = xe;\r\n len = xd.length;\r\n }\r\n\r\n // Numbers with massively different exponents would result in a very high number of zeros\r\n // needing to be prepended, but this can be avoided while still ensuring correct rounding by\r\n // limiting the number of zeros to `)) + (("`" + `Math.ceil(pr / LOG_BASE) + 2`) + ("`" + `.\r\n i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n if (k > i) {\r\n k = i;\r\n d.length = 1;\r\n }\r\n\r\n // Prepend zeros to equalise exponents.\r\n d.reverse();\r\n for (i = k; i--;) d.push(0);\r\n d.reverse();\r\n\r\n // Base 1e7 exponents equal.\r\n } else {\r\n\r\n // Check digits to determine which is the bigger number.\r\n\r\n i = xd.length;\r\n len = yd.length;\r\n xLTy = i < len;\r\n if (xLTy) len = i;\r\n\r\n for (i = 0; i < len; i++) {\r\n if (xd[i] != yd[i]) {\r\n xLTy = xd[i] < yd[i];\r\n break;\r\n }\r\n }\r\n\r\n k = 0;\r\n }\r\n\r\n if (xLTy) {\r\n d = xd;\r\n xd = yd;\r\n yd = d;\r\n y.s = -y.s;\r\n }\r\n\r\n len = xd.length;\r\n\r\n // Append zeros to xd if shorter.\r\n // Don't add zeros to yd if shorter as subtraction only needs to start at yd length.\r\n for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n // Subtract yd from xd.\r\n for (i = yd.length; i > k;) {\r\n if (xd[--i] < yd[i]) {\r\n for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n --xd[j];\r\n xd[i] += BASE;\r\n }\r\n\r\n xd[i] -= yd[i];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xd[--len] === 0;) xd.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n // Zero?\r\n if (!xd[0]) return new Ctor(0);\r\n\r\n y.d = xd;\r\n y.e = e;\r\n\r\n //return external && xd.length >= pr / LOG_BASE ? round(y, pr) : y;\r\n return external ? round(y, pr) : y;\r\n }\r\n\r\n\r\n function toString(x, isExp, sd) {\r\n var k,\r\n e = getBase10Exponent(x),\r\n str = digitsToString(x.d),\r\n len = str.length;\r\n\r\n if (isExp) {\r\n if (sd && (k = sd - len) > 0) {\r\n str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n } else if (len > 1) {\r\n str = str.charAt(0) + '.' + str.slice(1);\r\n }\r\n\r\n str = str + (e < 0 ? 'e' : 'e+') + e;\r\n } else if (e < 0) {\r\n str = '0.' + getZeroString(-e - 1) + str;\r\n if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n } else if (e >= len) {\r\n str += getZeroString(e + 1 - len);\r\n if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n } else {\r\n if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n if (sd && (k = sd - len) > 0) {\r\n if (e + 1 === len) str += '.';\r\n str += getZeroString(k);\r\n }\r\n }\r\n\r\n return x.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Does not strip trailing zeros.\r\n function truncate(arr, len) {\r\n if (arr.length > len) {\r\n arr.length = len;\r\n return true;\r\n }\r\n }\r\n\r\n\r\n // Decimal methods\r\n\r\n\r\n /*\r\n * clone\r\n * config/set\r\n */\r\n\r\n\r\n /*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\n function clone(obj) {\r\n var i, p, ps;\r\n\r\n /*\r\n * The Decimal constructor and exported function.\r\n * Return a new Decimal instance.\r\n *\r\n * value {number|string|Decimal} A numeric value.\r\n *\r\n */\r\n function Decimal(value) {\r\n var x = this;\r\n\r\n // Decimal called without new.\r\n if (!(x instanceof Decimal)) return new Decimal(value);\r\n\r\n // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n // which points to Object.\r\n x.constructor = Decimal;\r\n\r\n // Duplicate.\r\n if (value instanceof Decimal) {\r\n x.s = value.s;\r\n x.e = value.e;\r\n x.d = (value = value.d) ? value.slice() : value;\r\n return;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n\r\n // Reject Infinity/NaN.\r\n if (value * 0 !== 0) {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n if (value > 0) {\r\n x.s = 1;\r\n } else if (value < 0) {\r\n value = -value;\r\n x.s = -1;\r\n } else {\r\n x.s = 0;\r\n x.e = 0;\r\n x.d = [0];\r\n return;\r\n }\r\n\r\n // Fast path for small integers.\r\n if (value === ~~value && value < 1e7) {\r\n x.e = 0;\r\n x.d = [value];\r\n return;\r\n }\r\n\r\n return parseDecimal(x, value.toString());\r\n } else if (typeof value !== 'string') {\r\n throw Error(invalidArgument + value);\r\n }\r\n\r\n // Minus sign?\r\n if (value.charCodeAt(0) === 45) {\r\n value = value.slice(1);\r\n x.s = -1;\r\n } else {\r\n x.s = 1;\r\n }\r\n\r\n if (isDecimal.test(value)) parseDecimal(x, value);\r\n else throw Error(invalidArgument + value);\r\n }\r\n\r\n Decimal.prototype = P;\r\n\r\n Decimal.ROUND_UP = 0;\r\n Decimal.ROUND_DOWN = 1;\r\n Decimal.ROUND_CEIL = 2;\r\n Decimal.ROUND_FLOOR = 3;\r\n Decimal.ROUND_HALF_UP = 4;\r\n Decimal.ROUND_HALF_DOWN = 5;\r\n Decimal.ROUND_HALF_EVEN = 6;\r\n Decimal.ROUND_HALF_CEIL = 7;\r\n Decimal.ROUND_HALF_FLOOR = 8;\r\n\r\n Decimal.clone = clone;\r\n Decimal.config = Decimal.set = config;\r\n\r\n if (obj === void 0) obj = {};\r\n if (obj) {\r\n ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'LN10'];\r\n for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n }\r\n\r\n Decimal.config(obj);\r\n\r\n return Decimal;\r\n }\r\n\r\n\r\n /*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `))))))))) + (((((((("`" + (`obj` + "`")) + (` is an object with one or more of the following properties,\r\n *\r\n * precision {number}\r\n * rounding {number}\r\n * toExpNeg {number}\r\n * toExpPos {number}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\n function config(obj) {\r\n if (!obj || typeof obj !== 'object') {\r\n throw Error(decimalError + 'Object expected');\r\n }\r\n var i, p, v,\r\n ps = [\r\n 'precision', 1, MAX_DIGITS,\r\n 'rounding', 0, 8,\r\n 'toExpNeg', -1 / 0, 0,\r\n 'toExpPos', 0, 1 / 0\r\n ];\r\n\r\n for (i = 0; i < ps.length; i += 3) {\r\n if ((v = obj[p = ps[i]]) !== void 0) {\r\n if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n }\r\n\r\n if ((v = obj[p = 'LN10']) !== void 0) {\r\n if (v == Math.LN10) this[p] = new this(v);\r\n else throw Error(invalidArgument + p + ': ' + v);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n // Create and configure initial Decimal constructor.\r\n Decimal = clone(Decimal);\r\n\r\n Decimal['default'] = Decimal.Decimal = Decimal;\r\n\r\n // Internal constant.\r\n ONE = new Decimal(1);\r\n\r\n\r\n // Export.\r\n\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () {\r\n return Decimal;\r\n });\r\n\r\n // Node and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = Decimal;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalScope) {\r\n globalScope = typeof self != 'undefined' && self && self.self == self\r\n ? self : Function('return this')();\r\n }\r\n\r\n globalScope.Decimal = Decimal;\r\n }\r\n})(this);\r\n", + "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.deepmerge = factory());\n}(this, (function () { 'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nreturn deepmerge_1;\n\n})));\n", + "\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = addClass;\n\nvar _hasClass = _interopRequireDefault(require(\"./hasClass\"));\n\nfunction addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + ' ' + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + ' ' + className);\n}\n\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = hasClass;\n\nfunction hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);else return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}\n\nmodule.exports = exports[\"default\"];", + "'use strict';\n\nfunction replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp('(^|\\\\s)' + classToRemove + '(?:\\\\s|$)', 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nmodule.exports = function removeClass(element, className) {\n if (element.classList) element.classList.remove(className);else if (typeof element.className === 'string') element.className = replaceClassName(element.className, className);else element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n};", + "/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n", + "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the ` + ("`" + `throw`))) + (("`" + (` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign ` + "`")) + (`events` + ("`" + ` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n", + "'use strict';\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar ReactIs = require('react-is');\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\n\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\n\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\n\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\n\nvar TYPE_STATICS = {};\nTYPE_STATICS[ReactIs.ForwardRef] = FORWARD_REF_STATICS;\n\nfunction getStatics(component) {\n if (ReactIs.isMemo(component)) {\n return MEMO_STATICS;\n }\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n\n return targetComponent;\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n", + "/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n if (cache.hasOwnProperty(name)) {\n return cache[name]\n }\n\n var hName = name.replace(uppercasePattern, toHyphenLower)\n return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n", + "var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexport var isBrowser = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\" && (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' && document.nodeType === 9;\n\nexport default isBrowser;\n", + "/*!\n * is-plain-object \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true\n && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor,prot;\n\n if (isObjectObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n};\n", + "/*!\n * isobject \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = camelCase;\n\nvar _hyphenateStyleName = require('hyphenate-style-name');\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Convert camel cased property names to dash separated.\n *\n * @param {Object} style\n * @return {Object}\n */\nfunction convertCase(style) {\n var converted = {};\n\n for (var prop in style) {\n converted[(0, _hyphenateStyleName2['default'])(prop)] = style[prop];\n }\n\n if (style.fallbacks) {\n if (Array.isArray(style.fallbacks)) converted.fallbacks = style.fallbacks.map(convertCase);else converted.fallbacks = convertCase(style.fallbacks);\n }\n\n return converted;\n}\n\n/**\n * Allow camel cased property names by converting them back to dasherized.\n *\n * @param {Rule} rule\n */\nfunction camelCase() {\n function onProcessStyle(style) {\n if (Array.isArray(style)) {\n // Handle rules like @font-face, which can have multiple styles in an array\n for (var index = 0; index < style.length; index++) {\n style[index] = convertCase(style[index]);\n }\n return style;\n }\n\n return convertCase(style);\n }\n\n function onChangeValue(value, prop, rule) {\n var hyphenatedProp = (0, _hyphenateStyleName2['default'])(prop);\n\n // There was no camel case in place\n if (prop === hyphenatedProp) return value;\n\n rule.prop(hyphenatedProp, value);\n\n // Core will ignore that property value we set the proper one above.\n return null;\n }\n\n return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n * Generated jss-default-unit CSS property units\n *\n * @type object\n */\nexports['default'] = {\n 'animation-delay': 'ms',\n 'animation-duration': 'ms',\n 'background-position': 'px',\n 'background-position-x': 'px',\n 'background-position-y': 'px',\n 'background-size': 'px',\n border: 'px',\n 'border-bottom': 'px',\n 'border-bottom-left-radius': 'px',\n 'border-bottom-right-radius': 'px',\n 'border-bottom-width': 'px',\n 'border-left': 'px',\n 'border-left-width': 'px',\n 'border-radius': 'px',\n 'border-right': 'px',\n 'border-right-width': 'px',\n 'border-spacing': 'px',\n 'border-top': 'px',\n 'border-top-left-radius': 'px',\n 'border-top-right-radius': 'px',\n 'border-top-width': 'px',\n 'border-width': 'px',\n 'border-after-width': 'px',\n 'border-before-width': 'px',\n 'border-end-width': 'px',\n 'border-horizontal-spacing': 'px',\n 'border-start-width': 'px',\n 'border-vertical-spacing': 'px',\n bottom: 'px',\n 'box-shadow': 'px',\n 'column-gap': 'px',\n 'column-rule': 'px',\n 'column-rule-width': 'px',\n 'column-width': 'px',\n 'flex-basis': 'px',\n 'font-size': 'px',\n 'font-size-delta': 'px',\n height: 'px',\n left: 'px',\n 'letter-spacing': 'px',\n 'logical-height': 'px',\n 'logical-width': 'px',\n margin: 'px',\n 'margin-after': 'px',\n 'margin-before': 'px',\n 'margin-bottom': 'px',\n 'margin-left': 'px',\n 'margin-right': 'px',\n 'margin-top': 'px',\n 'max-height': 'px',\n 'max-width': 'px',\n 'margin-end': 'px',\n 'margin-start': 'px',\n 'mask-position-x': 'px',\n 'mask-position-y': 'px',\n 'mask-size': 'px',\n 'max-logical-height': 'px',\n 'max-logical-width': 'px',\n 'min-height': 'px',\n 'min-width': 'px',\n 'min-logical-height': 'px',\n 'min-logical-width': 'px',\n motion: 'px',\n 'motion-offset': 'px',\n outline: 'px',\n 'outline-offset': 'px',\n 'outline-width': 'px',\n padding: 'px',\n 'padding-bottom': 'px',\n 'padding-left': 'px',\n 'padding-right': 'px',\n 'padding-top': 'px',\n 'padding-after': 'px',\n 'padding-before': 'px',\n 'padding-end': 'px',\n 'padding-start': 'px',\n 'perspective-origin-x': '%',\n 'perspective-origin-y': '%',\n perspective: 'px',\n right: 'px',\n 'shape-margin': 'px',\n size: 'px',\n 'text-indent': 'px',\n 'text-stroke': 'px',\n 'text-stroke-width': 'px',\n top: 'px',\n 'transform-origin': '%',\n 'transform-origin-x': '%',\n 'transform-origin-y': '%',\n 'transform-origin-z': '%',\n 'transition-delay': 'ms',\n 'transition-duration': 'ms',\n 'vertical-align': 'px',\n width: 'px',\n 'word-spacing': 'px',\n // Not existing properties.\n // Used to avoid issues with jss-expand intergration.\n 'box-shadow-x': 'px',\n 'box-shadow-y': 'px',\n 'box-shadow-blur': 'px',\n 'box-shadow-spread': 'px',\n 'font-line-height': 'px',\n 'text-shadow-x': 'px',\n 'text-shadow-y': 'px',\n 'text-shadow-blur': 'px'\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = defaultUnit;\n\nvar _defaultUnits = require('./defaultUnits');\n\nvar _defaultUnits2 = _interopRequireDefault(_defaultUnits);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Clones the object and adds a camel cased property version.\n */\nfunction addCamelCasedVersion(obj) {\n var regExp = /(-[a-z])/g;\n var replace = function replace(str) {\n return str[1].toUpperCase();\n };\n var newObj = {};\n for (var key in obj) {\n newObj[key] = obj[key];\n newObj[key.replace(regExp, replace)] = obj[key];\n }\n return newObj;\n}\n\nvar units = addCamelCasedVersion(_defaultUnits2['default']);\n\n/**\n * Recursive deep style passing function\n *\n * @param {String} current property\n * @param {(Object|Array|Number|String)} property value\n * @param {Object} options\n * @return {(Object|Array|Number|String)} resulting value\n */\nfunction iterate(prop, value, options) {\n if (!value) return value;\n\n var convertedValue = value;\n\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n if (type === 'object' && Array.isArray(value)) type = 'array';\n\n switch (type) {\n case 'object':\n if (prop === 'fallbacks') {\n for (var innerProp in value) {\n value[innerProp] = iterate(innerProp, value[innerProp], options);\n }\n break;\n }\n for (var _innerProp in value) {\n value[_innerProp] = iterate(prop + '-' + _innerProp, value[_innerProp], options);\n }\n break;\n case 'array':\n for (var i = 0; i < value.length; i++) {\n value[i] = iterate(prop, value[i], options);\n }\n break;\n case 'number':\n if (value !== 0) {\n convertedValue = value + (options[prop] || units[prop] || '');\n }\n break;\n default:\n break;\n }\n\n return convertedValue;\n}\n\n/**\n * Add unit to numeric values.\n */\nfunction defaultUnit() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var camelCasedOptions = addCamelCasedVersion(options);\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n for (var prop in style) {\n style[prop] = iterate(prop, style[prop], camelCasedOptions);\n }\n\n return style;\n }\n\n function onChangeValue(value, prop) {\n return iterate(prop, value, camelCasedOptions);\n }\n\n return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports['default'] = jssGlobal;\n\nvar _jss = require('jss');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar propKey = '@global';\nvar prefixKey = '@global ';\n\nvar GlobalContainerRule = function () {\n function GlobalContainerRule(key, styles, options) {\n _classCallCheck(this, GlobalContainerRule);\n\n this.type = 'global';\n\n this.key = key;\n this.options = options;\n this.rules = new _jss.RuleList(_extends({}, options, {\n parent: this\n }));\n\n for (var selector in styles) {\n this.rules.add(selector, styles[selector], { selector: selector });\n }\n\n this.rules.process();\n }\n\n /**\n * Get a rule.\n */\n\n\n _createClass(GlobalContainerRule, [{\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Create and register rule, run plugins.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, style, options) {\n var rule = this.rules.add(name, style, options);\n this.options.jss.plugins.onProcessRule(rule);\n return rule;\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n return this.rules.toString();\n }\n }]);\n\n return GlobalContainerRule;\n}();\n\nvar GlobalPrefixedRule = function () {\n function GlobalPrefixedRule(name, style, options) {\n _classCallCheck(this, GlobalPrefixedRule);\n\n this.name = name;\n this.options = options;\n var selector = name.substr(prefixKey.length);\n this.rule = options.jss.createRule(selector, style, _extends({}, options, {\n parent: this,\n selector: selector\n }));\n }\n\n _createClass(GlobalPrefixedRule, [{\n key: 'toString',\n value: function toString(options) {\n return this.rule.toString(options);\n }\n }]);\n\n return GlobalPrefixedRule;\n}();\n\nvar separatorRegExp = /\\s*,\\s*/g;\n\nfunction addScope(selector, scope) {\n var parts = selector.split(separatorRegExp);\n var scoped = '';\n for (var i = 0; i < parts.length; i++) {\n scoped += scope + ' ' + parts[i].trim();\n if (parts[i + 1]) scoped += ', ';\n }\n return scoped;\n}\n\nfunction handleNestedGlobalContainerRule(rule) {\n var options = rule.options,\n style = rule.style;\n\n var rules = style[propKey];\n\n if (!rules) return;\n\n for (var name in rules) {\n options.sheet.addRule(name, rules[name], _extends({}, options, {\n selector: addScope(name, rule.selector)\n }));\n }\n\n delete style[propKey];\n}\n\nfunction handlePrefixedGlobalRule(rule) {\n var options = rule.options,\n style = rule.style;\n\n for (var prop in style) {\n if (prop.substr(0, propKey.length) !== propKey) continue;\n\n var selector = addScope(prop.substr(propKey.length), rule.selector);\n options.sheet.addRule(selector, style[prop], _extends({}, options, {\n selector: selector\n }));\n delete style[prop];\n }\n}\n\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssGlobal() {\n function onCreateRule(name, styles, options) {\n if (name === propKey) {\n return new GlobalContainerRule(name, styles, options);\n }\n\n if (name[0] === '@' && name.substr(0, prefixKey.length) === prefixKey) {\n return new GlobalPrefixedRule(name, styles, options);\n }\n\n var parent = options.parent;\n\n\n if (parent) {\n if (parent.type === 'global' || parent.options.parent.type === 'global') {\n options.global = true;\n }\n }\n\n if (options.global) options.selector = name;\n\n return null;\n }\n\n function onProcessRule(rule) {\n if (rule.type !== 'style') return;\n\n handleNestedGlobalContainerRule(rule);\n handlePrefixedGlobalRule(rule);\n }\n\n return { onCreateRule: onCreateRule, onProcessRule: onProcessRule };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = jssNested;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar separatorRegExp = /\\s*,\\s*/g;\nvar parentRegExp = /&/g;\nvar refRegExp = /\\$([\\w-]+)/g;\n\n/**\n * Convert nested rules to separate, remove them from original styles.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssNested() {\n // Get a function to be used for $ref replacement.\n function getReplaceRef(container) {\n return function (match, key) {\n var rule = container.getRule(key);\n if (rule) return rule.selector;\n (0, _warning2.default)(false, '[JSS] Could not find the referenced rule %s in %s.', key, container.options.meta || container);\n return key;\n };\n }\n\n var hasAnd = function hasAnd(str) {\n return str.indexOf('&') !== -1;\n };\n\n function replaceParentRefs(nestedProp, parentProp) {\n var parentSelectors = parentProp.split(separatorRegExp);\n var nestedSelectors = nestedProp.split(separatorRegExp);\n\n var result = '';\n\n for (var i = 0; i < parentSelectors.length; i++) {\n var parent = parentSelectors[i];\n\n for (var j = 0; j < nestedSelectors.length; j++) {\n var nested = nestedSelectors[j];\n if (result) result += ', ';\n // Replace all & by the parent or prefix & with the parent.\n result += hasAnd(nested) ? nested.replace(parentRegExp, parent) : parent + ' ' + nested;\n }\n }\n\n return result;\n }\n\n function getOptions(rule, container, options) {\n // Options has been already created, now we only increase index.\n if (options) return _extends({}, options, { index: options.index + 1 });\n\n var nestingLevel = rule.options.nestingLevel;\n\n nestingLevel = nestingLevel === undefined ? 1 : nestingLevel + 1;\n\n return _extends({}, rule.options, {\n nestingLevel: nestingLevel,\n index: container.indexOf(rule) + 1\n });\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n var container = rule.options.parent;\n var options = void 0;\n var replaceRef = void 0;\n for (var prop in style) {\n var isNested = hasAnd(prop);\n var isNestedConditional = prop[0] === '@';\n\n if (!isNested && !isNestedConditional) continue;\n\n options = getOptions(rule, container, options);\n\n if (isNested) {\n var selector = replaceParentRefs(prop, rule.selector\n // Lazily create the ref replacer function just once for\n // all nested rules within the sheet.\n );if (!replaceRef) replaceRef = getReplaceRef(container\n // Replace all $refs.\n );selector = selector.replace(refRegExp, replaceRef);\n\n container.addRule(selector, style[prop], _extends({}, options, { selector: selector }));\n } else if (isNestedConditional) {\n container\n // Place conditional right after the parent rule to ensure right ordering.\n .addRule(prop, null, options).addRule(rule.key, style[prop], { selector: rule.selector });\n }\n\n delete style[prop];\n }\n\n return style;\n }\n\n return { onProcessStyle: onProcessStyle };\n}", + "/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`)))) + ((("`" + (`warning(condition, format, ...args)` + "`")) + (` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = jssPropsSort;\n/**\n * Sort props by length.\n */\nfunction jssPropsSort() {\n function sort(prop0, prop1) {\n return prop0.length - prop1.length;\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n var newStyle = {};\n var props = Object.keys(style).sort(sort);\n for (var prop in props) {\n newStyle[props[prop]] = style[props[prop]];\n }\n return newStyle;\n }\n\n return { onProcessStyle: onProcessStyle };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = jssVendorPrefixer;\n\nvar _cssVendor = require('css-vendor');\n\nvar vendor = _interopRequireWildcard(_cssVendor);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n/**\n * Add vendor prefix to a property name when needed.\n *\n * @param {Rule} rule\n * @api public\n */\nfunction jssVendorPrefixer() {\n function onProcessRule(rule) {\n if (rule.type === 'keyframes') {\n rule.key = '@' + vendor.prefix.css + rule.key.substr(1);\n }\n }\n\n function onProcessStyle(style, rule) {\n if (rule.type !== 'style') return style;\n\n for (var prop in style) {\n var value = style[prop];\n\n var changeProp = false;\n var supportedProp = vendor.supportedProperty(prop);\n if (supportedProp && supportedProp !== prop) changeProp = true;\n\n var changeValue = false;\n var supportedValue = vendor.supportedValue(supportedProp, value);\n if (supportedValue && supportedValue !== value) changeValue = true;\n\n if (changeProp || changeValue) {\n if (changeProp) delete style[prop];\n style[supportedProp || prop] = supportedValue || value;\n }\n }\n\n return style;\n }\n\n function onChangeValue(value, prop) {\n return vendor.supportedValue(prop, value);\n }\n\n return { onProcessRule: onProcessRule, onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _isInBrowser = require('is-in-browser');\n\nvar _isInBrowser2 = _interopRequireDefault(_isInBrowser);\n\nvar _StyleSheet = require('./StyleSheet');\n\nvar _StyleSheet2 = _interopRequireDefault(_StyleSheet);\n\nvar _PluginsRegistry = require('./PluginsRegistry');\n\nvar _PluginsRegistry2 = _interopRequireDefault(_PluginsRegistry);\n\nvar _rules = require('./plugins/rules');\n\nvar _rules2 = _interopRequireDefault(_rules);\n\nvar _observables = require('./plugins/observables');\n\nvar _observables2 = _interopRequireDefault(_observables);\n\nvar _functions = require('./plugins/functions');\n\nvar _functions2 = _interopRequireDefault(_functions);\n\nvar _sheets = require('./sheets');\n\nvar _sheets2 = _interopRequireDefault(_sheets);\n\nvar _StyleRule = require('./rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createGenerateClassName = require('./utils/createGenerateClassName');\n\nvar _createGenerateClassName2 = _interopRequireDefault(_createGenerateClassName);\n\nvar _createRule2 = require('./utils/createRule');\n\nvar _createRule3 = _interopRequireDefault(_createRule2);\n\nvar _DomRenderer = require('./renderers/DomRenderer');\n\nvar _DomRenderer2 = _interopRequireDefault(_DomRenderer);\n\nvar _VirtualRenderer = require('./renderers/VirtualRenderer');\n\nvar _VirtualRenderer2 = _interopRequireDefault(_VirtualRenderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultPlugins = _rules2['default'].concat([_observables2['default'], _functions2['default']]);\n\nvar instanceCounter = 0;\n\nvar Jss = function () {\n function Jss(options) {\n _classCallCheck(this, Jss);\n\n this.id = instanceCounter++;\n this.version = \"9.8.7\";\n this.plugins = new _PluginsRegistry2['default']();\n this.options = {\n createGenerateClassName: _createGenerateClassName2['default'],\n Renderer: _isInBrowser2['default'] ? _DomRenderer2['default'] : _VirtualRenderer2['default'],\n plugins: []\n };\n this.generateClassName = (0, _createGenerateClassName2['default'])();\n\n // eslint-disable-next-line prefer-spread\n this.use.apply(this, defaultPlugins);\n this.setup(options);\n }\n\n _createClass(Jss, [{\n key: 'setup',\n value: function setup() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (options.createGenerateClassName) {\n this.options.createGenerateClassName = options.createGenerateClassName;\n // $FlowFixMe\n this.generateClassName = options.createGenerateClassName();\n }\n\n if (options.insertionPoint != null) this.options.insertionPoint = options.insertionPoint;\n if (options.virtual || options.Renderer) {\n this.options.Renderer = options.Renderer || (options.virtual ? _VirtualRenderer2['default'] : _DomRenderer2['default']);\n }\n\n // eslint-disable-next-line prefer-spread\n if (options.plugins) this.use.apply(this, options.plugins);\n\n return this;\n }\n\n /**\n * Create a Style Sheet.\n */\n\n }, {\n key: 'createStyleSheet',\n value: function createStyleSheet(styles) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var index = options.index;\n if (typeof index !== 'number') {\n index = _sheets2['default'].index === 0 ? 0 : _sheets2['default'].index + 1;\n }\n var sheet = new _StyleSheet2['default'](styles, _extends({}, options, {\n jss: this,\n generateClassName: options.generateClassName || this.generateClassName,\n insertionPoint: this.options.insertionPoint,\n Renderer: this.options.Renderer,\n index: index\n }));\n this.plugins.onProcessSheet(sheet);\n\n return sheet;\n }\n\n /**\n * Detach the Style Sheet and remove it from the registry.\n */\n\n }, {\n key: 'removeStyleSheet',\n value: function removeStyleSheet(sheet) {\n sheet.detach();\n _sheets2['default'].remove(sheet);\n return this;\n }\n\n /**\n * Create a rule without a Style Sheet.\n */\n\n }, {\n key: 'createRule',\n value: function createRule(name) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n // Enable rule without name for inline styles.\n if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n options = style;\n style = name;\n name = undefined;\n }\n\n // Cast from RuleFactoryOptions to RuleOptions\n // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n var ruleOptions = options;\n\n ruleOptions.jss = this;\n ruleOptions.Renderer = this.options.Renderer;\n if (!ruleOptions.generateClassName) ruleOptions.generateClassName = this.generateClassName;\n if (!ruleOptions.classes) ruleOptions.classes = {};\n var rule = (0, _createRule3['default'])(name, style, ruleOptions);\n\n if (!ruleOptions.selector && rule instanceof _StyleRule2['default']) {\n rule.selector = '.' + ruleOptions.generateClassName(rule);\n }\n\n this.plugins.onProcessRule(rule);\n\n return rule;\n }\n\n /**\n * Register plugin. Passed function will be invoked with a rule instance.\n */\n\n }, {\n key: 'use',\n value: function use() {\n var _this = this;\n\n for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n\n plugins.forEach(function (plugin) {\n // Avoids applying same plugin twice, at least based on ref.\n if (_this.options.plugins.indexOf(plugin) === -1) {\n _this.options.plugins.push(plugin);\n _this.plugins.use(plugin);\n }\n });\n\n return this;\n }\n }]);\n\n return Jss;\n}();\n\nexports['default'] = Jss;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PluginsRegistry = function () {\n function PluginsRegistry() {\n _classCallCheck(this, PluginsRegistry);\n\n this.hooks = {\n onCreateRule: [],\n onProcessRule: [],\n onProcessStyle: [],\n onProcessSheet: [],\n onChangeValue: [],\n onUpdate: []\n\n /**\n * Call ` + ("`" + `onCreateRule`))) + (("`" + (` hooks and return an object if returned by a hook.\n */\n };\n }\n\n _createClass(PluginsRegistry, [{\n key: 'onCreateRule',\n value: function onCreateRule(name, decl, options) {\n for (var i = 0; i < this.hooks.onCreateRule.length; i++) {\n var rule = this.hooks.onCreateRule[i](name, decl, options);\n if (rule) return rule;\n }\n return null;\n }\n\n /**\n * Call ` + "`")) + (`onProcessRule` + ("`" + ` hooks.\n */\n\n }, {\n key: 'onProcessRule',\n value: function onProcessRule(rule) {\n if (rule.isProcessed) return;\n var sheet = rule.options.sheet;\n\n for (var i = 0; i < this.hooks.onProcessRule.length; i++) {\n this.hooks.onProcessRule[i](rule, sheet);\n }\n\n // $FlowFixMe\n if (rule.style) this.onProcessStyle(rule.style, rule, sheet);\n\n rule.isProcessed = true;\n }\n\n /**\n * Call `))))) + (((("`" + (`onProcessStyle` + "`")) + (` hooks.\n */\n\n }, {\n key: 'onProcessStyle',\n value: function onProcessStyle(style, rule, sheet) {\n var nextStyle = style;\n\n for (var i = 0; i < this.hooks.onProcessStyle.length; i++) {\n nextStyle = this.hooks.onProcessStyle[i](nextStyle, rule, sheet);\n // $FlowFixMe\n rule.style = nextStyle;\n }\n }\n\n /**\n * Call ` + ("`" + `onProcessSheet`))) + (("`" + (` hooks.\n */\n\n }, {\n key: 'onProcessSheet',\n value: function onProcessSheet(sheet) {\n for (var i = 0; i < this.hooks.onProcessSheet.length; i++) {\n this.hooks.onProcessSheet[i](sheet);\n }\n }\n\n /**\n * Call ` + "`")) + (`onUpdate` + ("`" + ` hooks.\n */\n\n }, {\n key: 'onUpdate',\n value: function onUpdate(data, rule, sheet) {\n for (var i = 0; i < this.hooks.onUpdate.length; i++) {\n this.hooks.onUpdate[i](data, rule, sheet);\n }\n }\n\n /**\n * Call `)))) + ((("`" + (`onChangeValue` + "`")) + (` hooks.\n */\n\n }, {\n key: 'onChangeValue',\n value: function onChangeValue(value, prop, rule) {\n var processedValue = value;\n for (var i = 0; i < this.hooks.onChangeValue.length; i++) {\n processedValue = this.hooks.onChangeValue[i](processedValue, prop, rule);\n }\n return processedValue;\n }\n\n /**\n * Register a plugin.\n * If function is passed, it is a shortcut for ` + ("`" + `{onProcessRule}`))) + (("`" + (`.\n */\n\n }, {\n key: 'use',\n value: function use(plugin) {\n for (var name in plugin) {\n if (this.hooks[name]) this.hooks[name].push(plugin[name]);else (0, _warning2['default'])(false, '[JSS] Unknown hook \"%s\".', name);\n }\n }\n }]);\n\n return PluginsRegistry;\n}();\n\nexports['default'] = PluginsRegistry;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _createRule = require('./utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nvar _linkRule = require('./utils/linkRule');\n\nvar _linkRule2 = _interopRequireDefault(_linkRule);\n\nvar _StyleRule = require('./rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _escape = require('./utils/escape');\n\nvar _escape2 = _interopRequireDefault(_escape);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Contains rules objects and allows adding/removing etc.\n * Is used for e.g. by ` + "`")) + ((`StyleSheet` + "`") + (` or ` + "`")))))) + (((((`ConditionalRule` + ("`" + `.\n */\nvar RuleList = function () {\n\n // Original styles object.\n function RuleList(options) {\n var _this = this;\n\n _classCallCheck(this, RuleList);\n\n this.map = {};\n this.raw = {};\n this.index = [];\n\n this.update = function (name, data) {\n var _options = _this.options,\n plugins = _options.jss.plugins,\n sheet = _options.sheet;\n\n if (typeof name === 'string') {\n plugins.onUpdate(data, _this.get(name), sheet);\n } else {\n for (var index = 0; index < _this.index.length; index++) {\n plugins.onUpdate(name, _this.index[index], sheet);\n }\n }\n };\n\n this.options = options;\n this.classes = options.classes;\n }\n\n /**\n * Create and register rule.\n *\n * Will not render after Style Sheet was rendered the first time.\n */\n\n\n // Used to ensure correct rules order.\n\n // Rules registry for access by .get() method.\n // It contains the same rule registered by name and by selector.\n\n\n _createClass(RuleList, [{\n key: 'add',\n value: function add(name, decl, options) {\n var _options2 = this.options,\n parent = _options2.parent,\n sheet = _options2.sheet,\n jss = _options2.jss,\n Renderer = _options2.Renderer,\n generateClassName = _options2.generateClassName;\n\n\n options = _extends({\n classes: this.classes,\n parent: parent,\n sheet: sheet,\n jss: jss,\n Renderer: Renderer,\n generateClassName: generateClassName\n }, options);\n\n if (!options.selector && this.classes[name]) {\n options.selector = '.' + (0, _escape2['default'])(this.classes[name]);\n }\n\n this.raw[name] = decl;\n\n var rule = (0, _createRule2['default'])(name, decl, options);\n\n var className = void 0;\n\n if (!options.selector && rule instanceof _StyleRule2['default']) {\n className = generateClassName(rule, sheet);\n rule.selector = '.' + (0, _escape2['default'])(className);\n }\n\n this.register(rule, className);\n\n var index = options.index === undefined ? this.index.length : options.index;\n this.index.splice(index, 0, rule);\n\n return rule;\n }\n\n /**\n * Get a rule.\n */\n\n }, {\n key: 'get',\n value: function get(name) {\n return this.map[name];\n }\n\n /**\n * Delete a rule.\n */\n\n }, {\n key: 'remove',\n value: function remove(rule) {\n this.unregister(rule);\n this.index.splice(this.indexOf(rule), 1);\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.index.indexOf(rule);\n }\n\n /**\n * Run `)) + ("`" + (`onProcessRule()` + "`"))) + ((` plugins on every rule.\n */\n\n }, {\n key: 'process',\n value: function process() {\n var plugins = this.options.jss.plugins;\n // We need to clone array because if we modify the index somewhere else during a loop\n // we end up with very hard-to-track-down side effects.\n\n this.index.slice(0).forEach(plugins.onProcessRule, plugins);\n }\n\n /**\n * Register a rule in ` + ("`" + `.map`)) + ("`" + (` and ` + "`")))) + (((`.classes` + ("`" + ` maps.\n */\n\n }, {\n key: 'register',\n value: function register(rule, className) {\n this.map[rule.key] = rule;\n if (rule instanceof _StyleRule2['default']) {\n this.map[rule.selector] = rule;\n if (className) this.classes[rule.key] = className;\n }\n }\n\n /**\n * Unregister a rule.\n */\n\n }, {\n key: 'unregister',\n value: function unregister(rule) {\n delete this.map[rule.key];\n if (rule instanceof _StyleRule2['default']) {\n delete this.map[rule.selector];\n delete this.classes[rule.key];\n }\n }\n\n /**\n * Update the function values with a new data.\n */\n\n }, {\n key: 'link',\n\n\n /**\n * Link renderable rules with CSSRuleList.\n */\n value: function link(cssRules) {\n var map = this.options.sheet.renderer.getUnescapedKeysMap(this.index);\n\n for (var i = 0; i < cssRules.length; i++) {\n var cssRule = cssRules[i];\n var _key = this.options.sheet.renderer.getKey(cssRule);\n if (map[_key]) _key = map[_key];\n var rule = this.map[_key];\n if (rule) (0, _linkRule2['default'])(rule, cssRule);\n }\n }\n\n /**\n * Convert rules to a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n var str = '';\n var sheet = this.options.sheet;\n\n var link = sheet ? sheet.options.link : false;\n\n for (var index = 0; index < this.index.length; index++) {\n var rule = this.index[index];\n var css = rule.toString(options);\n\n // No need to render an empty rule.\n if (!css && !link) continue;\n\n if (str) str += '\\n';\n str += css;\n }\n\n return str;\n }\n }]);\n\n return RuleList;\n}();\n\nexports['default'] = RuleList;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * SheetsManager is like a WeakMap which is designed to count StyleSheet\n * instances and attach/detach automatically.\n */\nvar SheetsManager = function () {\n function SheetsManager() {\n _classCallCheck(this, SheetsManager);\n\n this.sheets = [];\n this.refs = [];\n this.keys = [];\n }\n\n _createClass(SheetsManager, [{\n key: 'get',\n value: function get(key) {\n var index = this.keys.indexOf(key);\n return this.sheets[index];\n }\n }, {\n key: 'add',\n value: function add(key, sheet) {\n var sheets = this.sheets,\n refs = this.refs,\n keys = this.keys;\n\n var index = sheets.indexOf(sheet);\n\n if (index !== -1) return index;\n\n sheets.push(sheet);\n refs.push(0);\n keys.push(key);\n\n return sheets.length - 1;\n }\n }, {\n key: 'manage',\n value: function manage(key) {\n var index = this.keys.indexOf(key);\n var sheet = this.sheets[index];\n if (this.refs[index] === 0) sheet.attach();\n this.refs[index]++;\n if (!this.keys[index]) this.keys.splice(index, 0, key);\n return sheet;\n }\n }, {\n key: 'unmanage',\n value: function unmanage(key) {\n var index = this.keys.indexOf(key);\n if (index === -1) {\n // eslint-ignore-next-line no-console\n (0, _warning2['default'])(false, \"SheetsManager: can't find sheet to unmanage\");\n return;\n }\n if (this.refs[index] > 0) {\n this.refs[index]--;\n if (this.refs[index] === 0) this.sheets[index].detach();\n }\n }\n }, {\n key: 'size',\n get: function get() {\n return this.keys.length;\n }\n }]);\n\n return SheetsManager;\n}();\n\nexports['default'] = SheetsManager;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Sheets registry to access them all at one place.\n */\nvar SheetsRegistry = function () {\n function SheetsRegistry() {\n _classCallCheck(this, SheetsRegistry);\n\n this.registry = [];\n }\n\n _createClass(SheetsRegistry, [{\n key: 'add',\n\n\n /**\n * Register a Style Sheet.\n */\n value: function add(sheet) {\n var registry = this.registry;\n var index = sheet.options.index;\n\n\n if (registry.indexOf(sheet) !== -1) return;\n\n if (registry.length === 0 || index >= this.index) {\n registry.push(sheet);\n return;\n }\n\n // Find a position.\n for (var i = 0; i < registry.length; i++) {\n if (registry[i].options.index > index) {\n registry.splice(i, 0, sheet);\n return;\n }\n }\n }\n\n /**\n * Reset the registry.\n */\n\n }, {\n key: 'reset',\n value: function reset() {\n this.registry = [];\n }\n\n /**\n * Remove a Style Sheet.\n */\n\n }, {\n key: 'remove',\n value: function remove(sheet) {\n var index = this.registry.indexOf(sheet);\n this.registry.splice(index, 1);\n }\n\n /**\n * Convert all attached sheets to a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n return this.registry.filter(function (sheet) {\n return sheet.attached;\n }).map(function (sheet) {\n return sheet.toString(options);\n }).join('\\n');\n }\n }, {\n key: 'index',\n\n\n /**\n * Current highest index number.\n */\n get: function get() {\n return this.registry.length === 0 ? 0 : this.registry[this.registry.length - 1].options.index;\n }\n }]);\n\n return SheetsRegistry;\n}();\n\nexports['default'] = SheetsRegistry;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _linkRule = require('./utils/linkRule');\n\nvar _linkRule2 = _interopRequireDefault(_linkRule);\n\nvar _RuleList = require('./RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable-next-line no-use-before-define */\nvar StyleSheet = function () {\n function StyleSheet(styles, options) {\n var _this = this;\n\n _classCallCheck(this, StyleSheet);\n\n this.update = function (name, data) {\n if (typeof name === 'string') {\n _this.rules.update(name, data);\n } else {\n _this.rules.update(name);\n }\n return _this;\n };\n\n this.attached = false;\n this.deployed = false;\n this.linked = false;\n this.classes = {};\n this.options = _extends({}, options, {\n sheet: this,\n parent: this,\n classes: this.classes\n });\n this.renderer = new options.Renderer(this);\n this.rules = new _RuleList2['default'](this.options);\n\n for (var _name in styles) {\n this.rules.add(_name, styles[_name]);\n }\n\n this.rules.process();\n }\n\n /**\n * Attach renderable to the render tree.\n */\n\n\n _createClass(StyleSheet, [{\n key: 'attach',\n value: function attach() {\n if (this.attached) return this;\n if (!this.deployed) this.deploy();\n this.renderer.attach();\n if (!this.linked && this.options.link) this.link();\n this.attached = true;\n return this;\n }\n\n /**\n * Remove renderable from render tree.\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n if (!this.attached) return this;\n this.renderer.detach();\n this.attached = false;\n return this;\n }\n\n /**\n * Add a rule to the current stylesheet.\n * Will insert a rule also after the stylesheet has been rendered first time.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, decl, options) {\n var queue = this.queue;\n\n // Plugins can create rules.\n // In order to preserve the right order, we need to queue all `)) + ("`" + (`.addRule` + "`"))) + ((` calls,\n // which happen after the first ` + ("`" + `rules.add()`)) + (("`" + ` call.\n\n if (this.attached && !queue) this.queue = [];\n\n var rule = this.rules.add(name, decl, options);\n this.options.jss.plugins.onProcessRule(rule);\n\n if (this.attached) {\n if (!this.deployed) return rule;\n // Don't insert rule directly if there is no stringified version yet.\n // It will be inserted all together when .attach is called.\n if (queue) queue.push(rule);else {\n this.insertRule(rule);\n if (this.queue) {\n this.queue.forEach(this.insertRule, this);\n this.queue = undefined;\n }\n }\n return rule;\n }\n\n // We can't add rules to a detached style node.\n // We will redeploy the sheet once user will attach it.\n this.deployed = false;\n\n return rule;\n }\n\n /**\n * Insert rule into the StyleSheet\n */\n\n }, {\n key: 'insertRule',\n value: function insertRule(rule) {\n var renderable = this.renderer.insertRule(rule);\n if (renderable && this.options.link) (0, _linkRule2['default'])(rule, renderable);\n }\n\n /**\n * Create and add rules.\n * Will render also after Style Sheet was rendered the first time.\n */\n\n }, {\n key: 'addRules',\n value: function addRules(styles, options) {\n var added = [];\n for (var _name2 in styles) {\n added.push(this.addRule(_name2, styles[_name2], options));\n }\n return added;\n }\n\n /**\n * Get a rule by name.\n */\n\n }, {\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Delete a rule by name.\n * Returns `) + ("`" + `true`))))) + (((("`" + (`: if rule has been deleted from the DOM.\n */\n\n }, {\n key: 'deleteRule',\n value: function deleteRule(name) {\n var rule = this.rules.get(name);\n\n if (!rule) return false;\n\n this.rules.remove(rule);\n\n if (this.attached && rule.renderable) {\n return this.renderer.deleteRule(rule.renderable);\n }\n\n return true;\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Deploy pure CSS string to a renderable.\n */\n\n }, {\n key: 'deploy',\n value: function deploy() {\n this.renderer.deploy();\n this.deployed = true;\n return this;\n }\n\n /**\n * Link renderable CSS rules from sheet with their corresponding models.\n */\n\n }, {\n key: 'link',\n value: function link() {\n var cssRules = this.renderer.getRules();\n\n // Is undefined when VirtualRenderer is used.\n if (cssRules) this.rules.link(cssRules);\n this.linked = true;\n return this;\n }\n\n /**\n * Update the function values with a new data.\n */\n\n }, {\n key: 'toString',\n\n\n /**\n * Convert rules to a CSS string.\n */\n value: function toString(options) {\n return this.rules.toString(options);\n }\n }]);\n\n return StyleSheet;\n}();\n\nexports['default'] = StyleSheet;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.create = exports.createGenerateClassName = exports.sheets = exports.RuleList = exports.SheetsManager = exports.SheetsRegistry = exports.toCssValue = exports.getDynamicStyles = undefined;\n\nvar _getDynamicStyles = require('./utils/getDynamicStyles');\n\nObject.defineProperty(exports, 'getDynamicStyles', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_getDynamicStyles)['default'];\n }\n});\n\nvar _toCssValue = require('./utils/toCssValue');\n\nObject.defineProperty(exports, 'toCssValue', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_toCssValue)['default'];\n }\n});\n\nvar _SheetsRegistry = require('./SheetsRegistry');\n\nObject.defineProperty(exports, 'SheetsRegistry', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_SheetsRegistry)['default'];\n }\n});\n\nvar _SheetsManager = require('./SheetsManager');\n\nObject.defineProperty(exports, 'SheetsManager', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_SheetsManager)['default'];\n }\n});\n\nvar _RuleList = require('./RuleList');\n\nObject.defineProperty(exports, 'RuleList', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_RuleList)['default'];\n }\n});\n\nvar _sheets = require('./sheets');\n\nObject.defineProperty(exports, 'sheets', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_sheets)['default'];\n }\n});\n\nvar _createGenerateClassName = require('./utils/createGenerateClassName');\n\nObject.defineProperty(exports, 'createGenerateClassName', {\n enumerable: true,\n get: function get() {\n return _interopRequireDefault(_createGenerateClassName)['default'];\n }\n});\n\nvar _Jss = require('./Jss');\n\nvar _Jss2 = _interopRequireDefault(_Jss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Creates a new instance of Jss.\n */\nvar create = exports.create = function create(options) {\n return new _Jss2['default'](options);\n};\n\n/**\n * A global Jss instance.\n */\nexports['default'] = create();", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createRule = require('../utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// A symbol replacement.\nvar now = Date.now();\n\nvar fnValuesNs = 'fnValues' + now;\nvar fnStyleNs = 'fnStyle' + ++now;\n\nexports['default'] = {\n onCreateRule: function onCreateRule(name, decl, options) {\n if (typeof decl !== 'function') return null;\n var rule = (0, _createRule2['default'])(name, {}, options);\n rule[fnStyleNs] = decl;\n return rule;\n },\n onProcessStyle: function onProcessStyle(style, rule) {\n var fn = {};\n for (var prop in style) {\n var value = style[prop];\n if (typeof value !== 'function') continue;\n delete style[prop];\n fn[prop] = value;\n }\n rule = rule;\n rule[fnValuesNs] = fn;\n return style;\n },\n onUpdate: function onUpdate(data, rule) {\n // It is a rules container like for e.g. ConditionalRule.\n if (rule.rules instanceof _RuleList2['default']) {\n rule.rules.update(data);\n return;\n }\n if (!(rule instanceof _StyleRule2['default'])) return;\n\n rule = rule;\n\n // If we have a fn values map, it is a rule with function values.\n if (rule[fnValuesNs]) {\n for (var prop in rule[fnValuesNs]) {\n rule.prop(prop, rule[fnValuesNs][prop](data));\n }\n }\n\n rule = rule;\n\n var fnStyle = rule[fnStyleNs];\n\n // If we have a style function, the entire rule is dynamic and style object\n // will be returned from that function.\n if (fnStyle) {\n var style = fnStyle(data);\n for (var _prop in style) {\n rule.prop(_prop, style[_prop]);\n }\n }\n }\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _createRule = require('../utils/createRule');\n\nvar _createRule2 = _interopRequireDefault(_createRule);\n\nvar _isObservable = require('../utils/isObservable');\n\nvar _isObservable2 = _interopRequireDefault(_isObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = {\n onCreateRule: function onCreateRule(name, decl, options) {\n if (!(0, _isObservable2['default'])(decl)) return null;\n\n // Cast ` + "`")) + (`decl` + ("`" + ` to `))) + (("`" + (`Observable` + "`")) + (`, since it passed the type guard.\n var style$ = decl;\n\n var rule = (0, _createRule2['default'])(name, {}, options);\n\n // TODO\n // Call ` + ("`" + `stream.subscribe()`)))) + ((("`" + (` returns a subscription, which should be explicitly\n // unsubscribed from when we know this sheet is no longer needed.\n style$.subscribe(function (style) {\n for (var prop in style) {\n rule.prop(prop, style[prop]);\n }\n });\n\n return rule;\n },\n onProcessRule: function onProcessRule(rule) {\n if (!(rule instanceof _StyleRule2['default'])) return;\n var styleRule = rule;\n var style = styleRule.style;\n\n var _loop = function _loop(prop) {\n var value = style[prop];\n if (!(0, _isObservable2['default'])(value)) return 'continue';\n delete style[prop];\n value.subscribe({\n next: function next(nextValue) {\n styleRule.prop(prop, nextValue);\n }\n });\n };\n\n for (var prop in style) {\n var _ret = _loop(prop);\n\n if (_ret === 'continue') continue;\n }\n }\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SimpleRule = require('../rules/SimpleRule');\n\nvar _SimpleRule2 = _interopRequireDefault(_SimpleRule);\n\nvar _KeyframesRule = require('../rules/KeyframesRule');\n\nvar _KeyframesRule2 = _interopRequireDefault(_KeyframesRule);\n\nvar _ConditionalRule = require('../rules/ConditionalRule');\n\nvar _ConditionalRule2 = _interopRequireDefault(_ConditionalRule);\n\nvar _FontFaceRule = require('../rules/FontFaceRule');\n\nvar _FontFaceRule2 = _interopRequireDefault(_FontFaceRule);\n\nvar _ViewportRule = require('../rules/ViewportRule');\n\nvar _ViewportRule2 = _interopRequireDefault(_ViewportRule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar classes = {\n '@charset': _SimpleRule2['default'],\n '@import': _SimpleRule2['default'],\n '@namespace': _SimpleRule2['default'],\n '@keyframes': _KeyframesRule2['default'],\n '@media': _ConditionalRule2['default'],\n '@supports': _ConditionalRule2['default'],\n '@font-face': _FontFaceRule2['default'],\n '@viewport': _ViewportRule2['default'],\n '@-ms-viewport': _ViewportRule2['default']\n\n /**\n * Generate plugins which will register all rules.\n */\n};\nvar plugins = Object.keys(classes).map(function (key) {\n // https://jsperf.com/indexof-vs-substr-vs-regex-at-the-beginning-3\n var re = new RegExp('^' + key);\n var RuleClass = classes[key];\n var onCreateRule = function onCreateRule(name, decl, options) {\n return re.test(name) ? new RuleClass(name, decl, options) : null;\n };\n return { onCreateRule: onCreateRule };\n});\n\nexports['default'] = plugins;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _sheets = require('../sheets');\n\nvar _sheets2 = _interopRequireDefault(_sheets);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _toCssValue = require('../utils/toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Cache the value from the first time a function is called.\n */\nvar memoize = function memoize(fn) {\n var value = void 0;\n return function () {\n if (!value) value = fn();\n return value;\n };\n};\n\n/**\n * Get a style property value.\n */\nfunction getPropertyValue(cssRule, prop) {\n try {\n return cssRule.style.getPropertyValue(prop);\n } catch (err) {\n // IE may throw if property is unknown.\n return '';\n }\n}\n\n/**\n * Set a style property.\n */\nfunction setProperty(cssRule, prop, value) {\n try {\n var cssValue = value;\n\n if (Array.isArray(value)) {\n cssValue = (0, _toCssValue2['default'])(value, true);\n\n if (value[value.length - 1] === '!important') {\n cssRule.style.setProperty(prop, cssValue, 'important');\n return true;\n }\n }\n\n cssRule.style.setProperty(prop, cssValue);\n } catch (err) {\n // IE may throw if property is unknown.\n return false;\n }\n return true;\n}\n\n/**\n * Remove a style property.\n */\nfunction removeProperty(cssRule, prop) {\n try {\n cssRule.style.removeProperty(prop);\n } catch (err) {\n (0, _warning2['default'])(false, '[JSS] DOMException \"%s\" was thrown. Tried to remove property \"%s\".', err.message, prop);\n }\n}\n\nvar CSSRuleTypes = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7\n\n /**\n * Get the CSS Rule key.\n */\n\n};var getKey = function () {\n var extractKey = function extractKey(cssText) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return cssText.substr(from, cssText.indexOf('{') - 1);\n };\n\n return function (cssRule) {\n if (cssRule.type === CSSRuleTypes.STYLE_RULE) return cssRule.selectorText;\n if (cssRule.type === CSSRuleTypes.KEYFRAMES_RULE) {\n var name = cssRule.name;\n\n if (name) return '@keyframes ' + name;\n\n // There is no rule.name in the following browsers:\n // - IE 9\n // - Safari 7.1.8\n // - Mobile Safari 9.0.0\n var cssText = cssRule.cssText;\n\n return '@' + extractKey(cssText, cssText.indexOf('keyframes'));\n }\n\n // Conditionals.\n return extractKey(cssRule.cssText);\n };\n}();\n\n/**\n * Set the selector.\n */\nfunction setSelector(cssRule, selectorText) {\n cssRule.selectorText = selectorText;\n\n // Return false if setter was not successful.\n // Currently works in chrome only.\n return cssRule.selectorText === selectorText;\n}\n\n/**\n * Gets the ` + "`")) + (`head` + ("`" + ` element upon the first call and caches it.\n */\nvar getHead = memoize(function () {\n return document.head || document.getElementsByTagName('head')[0];\n});\n\n/**\n * Gets a map of rule keys, where the property is an unescaped key and value\n * is a potentially escaped one.\n * It is used to identify CSS rules and the corresponding JSS rules. As an identifier\n * for CSSStyleRule we normally use `))) + (("`" + (`selectorText` + "`")) + ((`. Though if original selector text\n * contains escaped code points e.g. ` + "`") + (`:not(#\\\\20)` + "`"))))))) + ((((((`, CSSOM will compile it to ` + ("`" + `:not(# )`)) + ("`" + (`\n * and so CSS rule's ` + "`"))) + ((`selectorText` + ("`" + ` won't match JSS rule selector.\n *\n * https://www.w3.org/International/questions/qa-escapes#cssescapes\n */\nvar getUnescapedKeysMap = function () {\n var style = void 0;\n var isAttached = false;\n\n return function (rules) {\n var map = {};\n // https://github.com/facebook/flow/issues/2696\n if (!style) style = document.createElement('style');\n for (var i = 0; i < rules.length; i++) {\n var rule = rules[i];\n if (!(rule instanceof _StyleRule2['default'])) continue;\n var selector = rule.selector;\n // Only unescape selector over CSSOM if it contains a back slash.\n\n if (selector && selector.indexOf('\\\\') !== -1) {\n // Lazilly attach when needed.\n if (!isAttached) {\n getHead().appendChild(style);\n isAttached = true;\n }\n style.textContent = selector + ' {}';\n var _style = style,\n sheet = _style.sheet;\n\n if (sheet) {\n var cssRules = sheet.cssRules;\n\n if (cssRules) map[cssRules[0].selectorText] = rule.key;\n }\n }\n }\n if (isAttached) {\n getHead().removeChild(style);\n isAttached = false;\n }\n return map;\n };\n}();\n\n/**\n * Find attached sheet with an index higher than the passed one.\n */\nfunction findHigherSheet(registry, options) {\n for (var i = 0; i < registry.length; i++) {\n var sheet = registry[i];\n if (sheet.attached && sheet.options.index > options.index && sheet.options.insertionPoint === options.insertionPoint) {\n return sheet;\n }\n }\n return null;\n}\n\n/**\n * Find attached sheet with the highest index.\n */\nfunction findHighestSheet(registry, options) {\n for (var i = registry.length - 1; i >= 0; i--) {\n var sheet = registry[i];\n if (sheet.attached && sheet.options.insertionPoint === options.insertionPoint) {\n return sheet;\n }\n }\n return null;\n}\n\n/**\n * Find a comment with \"jss\" inside.\n */\nfunction findCommentNode(text) {\n var head = getHead();\n for (var i = 0; i < head.childNodes.length; i++) {\n var node = head.childNodes[i];\n if (node.nodeType === 8 && node.nodeValue.trim() === text) {\n return node;\n }\n }\n return null;\n}\n\n/**\n * Find a node before which we can insert the sheet.\n */\nfunction findPrevNode(options) {\n var registry = _sheets2['default'].registry;\n\n\n if (registry.length > 0) {\n // Try to insert before the next higher sheet.\n var sheet = findHigherSheet(registry, options);\n if (sheet) return sheet.renderer.element;\n\n // Otherwise insert after the last attached.\n sheet = findHighestSheet(registry, options);\n if (sheet) return sheet.renderer.element.nextElementSibling;\n }\n\n // Try to find a comment placeholder if registry is empty.\n var insertionPoint = options.insertionPoint;\n\n if (insertionPoint && typeof insertionPoint === 'string') {\n var comment = findCommentNode(insertionPoint);\n if (comment) return comment.nextSibling;\n // If user specifies an insertion point and it can't be found in the document -\n // bad specificity issues may appear.\n (0, _warning2['default'])(insertionPoint === 'jss', '[JSS] Insertion point \"%s\" not found.', insertionPoint);\n }\n\n return null;\n}\n\n/**\n * Insert style element into the DOM.\n */\nfunction insertStyle(style, options) {\n var insertionPoint = options.insertionPoint;\n\n var prevNode = findPrevNode(options);\n\n if (prevNode) {\n var parentNode = prevNode.parentNode;\n\n if (parentNode) parentNode.insertBefore(style, prevNode);\n return;\n }\n\n // Works with iframes and any node types.\n if (insertionPoint && typeof insertionPoint.nodeType === 'number') {\n // https://stackoverflow.com/questions/41328728/force-casting-in-flow\n var insertionPointElement = insertionPoint;\n var _parentNode = insertionPointElement.parentNode;\n\n if (_parentNode) _parentNode.insertBefore(style, insertionPointElement.nextSibling);else (0, _warning2['default'])(false, '[JSS] Insertion point is not in the DOM.');\n return;\n }\n\n getHead().insertBefore(style, prevNode);\n}\n\n/**\n * Read jss nonce setting from the page if the user has set it.\n */\nvar getNonce = memoize(function () {\n var node = document.querySelector('meta[property=\"csp-nonce\"]');\n return node ? node.getAttribute('content') : null;\n});\n\nvar DomRenderer = function () {\n function DomRenderer(sheet) {\n _classCallCheck(this, DomRenderer);\n\n this.getPropertyValue = getPropertyValue;\n this.setProperty = setProperty;\n this.removeProperty = removeProperty;\n this.setSelector = setSelector;\n this.getKey = getKey;\n this.getUnescapedKeysMap = getUnescapedKeysMap;\n this.hasInsertedRules = false;\n\n // There is no sheet when the renderer is used from a standalone StyleRule.\n if (sheet) _sheets2['default'].add(sheet);\n\n this.sheet = sheet;\n\n var _ref = this.sheet ? this.sheet.options : {},\n media = _ref.media,\n meta = _ref.meta,\n element = _ref.element;\n\n this.element = element || document.createElement('style');\n this.element.setAttribute('data-jss', '');\n if (media) this.element.setAttribute('media', media);\n if (meta) this.element.setAttribute('data-meta', meta);\n var nonce = getNonce();\n if (nonce) this.element.setAttribute('nonce', nonce);\n }\n\n /**\n * Insert style element into render tree.\n */\n\n\n // HTMLStyleElement needs fixing https://github.com/facebook/flow/issues/2696\n\n\n _createClass(DomRenderer, [{\n key: 'attach',\n value: function attach() {\n // In the case the element node is external and it is already in the DOM.\n if (this.element.parentNode || !this.sheet) return;\n\n // When rules are inserted using `)) + ("`" + (`insertRule` + "`")))) + (((` API, after ` + ("`" + `sheet.detach().attach()`)) + ("`" + (`\n // browsers remove those rules.\n // TODO figure out if its a bug and if it is known.\n // Workaround is to redeploy the sheet before attaching as a string.\n if (this.hasInsertedRules) {\n this.deploy();\n this.hasInsertedRules = false;\n }\n\n insertStyle(this.element, this.sheet.options);\n }\n\n /**\n * Remove style element from render tree.\n */\n\n }, {\n key: 'detach',\n value: function detach() {\n this.element.parentNode.removeChild(this.element);\n }\n\n /**\n * Inject CSS string into element.\n */\n\n }, {\n key: 'deploy',\n value: function deploy() {\n if (!this.sheet) return;\n this.element.textContent = '\\n' + this.sheet.toString() + '\\n';\n }\n\n /**\n * Insert a rule into element.\n */\n\n }, {\n key: 'insertRule',\n value: function insertRule(rule, index) {\n var sheet = this.element.sheet;\n var cssRules = sheet.cssRules;\n\n var str = rule.toString();\n if (!index) index = cssRules.length;\n\n if (!str) return false;\n\n try {\n sheet.insertRule(str, index);\n } catch (err) {\n (0, _warning2['default'])(false, '[JSS] Can not insert an unsupported rule \\n\\r%s', rule);\n return false;\n }\n this.hasInsertedRules = true;\n\n return cssRules[index];\n }\n\n /**\n * Delete a rule.\n */\n\n }, {\n key: 'deleteRule',\n value: function deleteRule(cssRule) {\n var sheet = this.element.sheet;\n\n var index = this.indexOf(cssRule);\n if (index === -1) return false;\n sheet.deleteRule(index);\n return true;\n }\n\n /**\n * Get index of a CSS Rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(cssRule) {\n var cssRules = this.element.sheet.cssRules;\n\n for (var _index = 0; _index < cssRules.length; _index++) {\n if (cssRule === cssRules[_index]) return _index;\n }\n return -1;\n }\n\n /**\n * Generate a new CSS rule and replace the existing one.\n */\n\n }, {\n key: 'replaceRule',\n value: function replaceRule(cssRule, rule) {\n var index = this.indexOf(cssRule);\n var newCssRule = this.insertRule(rule, index);\n this.element.sheet.deleteRule(index);\n return newCssRule;\n }\n\n /**\n * Get all rules elements.\n */\n\n }, {\n key: 'getRules',\n value: function getRules() {\n return this.element.sheet.cssRules;\n }\n }]);\n\n return DomRenderer;\n}();\n\nexports['default'] = DomRenderer;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* eslint-disable class-methods-use-this */\n\n/**\n * Rendering backend to do nothing in nodejs.\n */\nvar VirtualRenderer = function () {\n function VirtualRenderer() {\n _classCallCheck(this, VirtualRenderer);\n }\n\n _createClass(VirtualRenderer, [{\n key: 'setProperty',\n value: function setProperty() {\n return true;\n }\n }, {\n key: 'getPropertyValue',\n value: function getPropertyValue() {\n return '';\n }\n }, {\n key: 'removeProperty',\n value: function removeProperty() {}\n }, {\n key: 'setSelector',\n value: function setSelector() {\n return true;\n }\n }, {\n key: 'getKey',\n value: function getKey() {\n return '';\n }\n }, {\n key: 'attach',\n value: function attach() {}\n }, {\n key: 'detach',\n value: function detach() {}\n }, {\n key: 'deploy',\n value: function deploy() {}\n }, {\n key: 'insertRule',\n value: function insertRule() {\n return false;\n }\n }, {\n key: 'deleteRule',\n value: function deleteRule() {\n return true;\n }\n }, {\n key: 'replaceRule',\n value: function replaceRule() {\n return false;\n }\n }, {\n key: 'getRules',\n value: function getRules() {}\n }, {\n key: 'indexOf',\n value: function indexOf() {\n return -1;\n }\n }]);\n\n return VirtualRenderer;\n}();\n\nexports['default'] = VirtualRenderer;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Conditional rule for @media, @supports\n */\nvar ConditionalRule = function () {\n function ConditionalRule(key, styles, options) {\n _classCallCheck(this, ConditionalRule);\n\n this.type = 'conditional';\n this.isProcessed = false;\n\n this.key = key;\n this.options = options;\n this.rules = new _RuleList2['default'](_extends({}, options, { parent: this }));\n\n for (var name in styles) {\n this.rules.add(name, styles[name]);\n }\n\n this.rules.process();\n }\n\n /**\n * Get a rule.\n */\n\n\n _createClass(ConditionalRule, [{\n key: 'getRule',\n value: function getRule(name) {\n return this.rules.get(name);\n }\n\n /**\n * Get index of a rule.\n */\n\n }, {\n key: 'indexOf',\n value: function indexOf(rule) {\n return this.rules.indexOf(rule);\n }\n\n /**\n * Create and register rule, run plugins.\n */\n\n }, {\n key: 'addRule',\n value: function addRule(name, style, options) {\n var rule = this.rules.add(name, style, options);\n this.options.jss.plugins.onProcessRule(rule);\n return rule;\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { indent: 1 };\n\n var inner = this.rules.toString(options);\n return inner ? this.key + ' {\\n' + inner + '\\n}' : '';\n }\n }]);\n\n return ConditionalRule;\n}();\n\nexports['default'] = ConditionalRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FontFaceRule = function () {\n function FontFaceRule(key, style, options) {\n _classCallCheck(this, FontFaceRule);\n\n this.type = 'font-face';\n this.isProcessed = false;\n\n this.key = key;\n this.style = style;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(FontFaceRule, [{\n key: 'toString',\n value: function toString(options) {\n if (Array.isArray(this.style)) {\n var str = '';\n for (var index = 0; index < this.style.length; index++) {\n str += (0, _toCss2['default'])(this.key, this.style[index]);\n if (this.style[index + 1]) str += '\\n';\n }\n return str;\n }\n\n return (0, _toCss2['default'])(this.key, this.style, options);\n }\n }]);\n\n return FontFaceRule;\n}();\n\nexports['default'] = FontFaceRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _RuleList = require('../RuleList');\n\nvar _RuleList2 = _interopRequireDefault(_RuleList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Rule for @keyframes\n */\nvar KeyframesRule = function () {\n function KeyframesRule(key, frames, options) {\n _classCallCheck(this, KeyframesRule);\n\n this.type = 'keyframes';\n this.isProcessed = false;\n\n this.key = key;\n this.options = options;\n this.rules = new _RuleList2['default'](_extends({}, options, { parent: this }));\n\n for (var name in frames) {\n this.rules.add(name, frames[name], _extends({}, this.options, {\n parent: this,\n selector: name\n }));\n }\n\n this.rules.process();\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(KeyframesRule, [{\n key: 'toString',\n value: function toString() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { indent: 1 };\n\n var inner = this.rules.toString(options);\n if (inner) inner += '\\n';\n return this.key + ' {\\n' + inner + '}';\n }\n }]);\n\n return KeyframesRule;\n}();\n\nexports['default'] = KeyframesRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SimpleRule = function () {\n function SimpleRule(key, value, options) {\n _classCallCheck(this, SimpleRule);\n\n this.type = 'simple';\n this.isProcessed = false;\n\n this.key = key;\n this.value = value;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n // eslint-disable-next-line no-unused-vars\n\n\n _createClass(SimpleRule, [{\n key: 'toString',\n value: function toString(options) {\n if (Array.isArray(this.value)) {\n var str = '';\n for (var index = 0; index < this.value.length; index++) {\n str += this.key + ' ' + this.value[index] + ';';\n if (this.value[index + 1]) str += '\\n';\n }\n return str;\n }\n\n return this.key + ' ' + this.value + ';';\n }\n }]);\n\n return SimpleRule;\n}();\n\nexports['default'] = SimpleRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nvar _toCssValue = require('../utils/toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StyleRule = function () {\n function StyleRule(key, style, options) {\n _classCallCheck(this, StyleRule);\n\n this.type = 'style';\n this.isProcessed = false;\n var sheet = options.sheet,\n Renderer = options.Renderer,\n selector = options.selector;\n\n this.key = key;\n this.options = options;\n this.style = style;\n if (selector) this.selectorText = selector;\n this.renderer = sheet ? sheet.renderer : new Renderer();\n }\n\n /**\n * Set selector string.\n * Attention: use this with caution. Most browsers didn't implement\n * selectorText setter, so this may result in rerendering of entire Style Sheet.\n */\n\n\n _createClass(StyleRule, [{\n key: 'prop',\n\n\n /**\n * Get or set a style property.\n */\n value: function prop(name, value) {\n // It's a getter.\n if (value === undefined) return this.style[name];\n\n // Don't do anything if the value has not changed.\n if (this.style[name] === value) return this;\n\n value = this.options.jss.plugins.onChangeValue(value, name, this);\n\n var isEmpty = value == null || value === false;\n var isDefined = name in this.style;\n\n // Value is empty and wasn't defined before.\n if (isEmpty && !isDefined) return this;\n\n // We are going to remove this value.\n var remove = isEmpty && isDefined;\n\n if (remove) delete this.style[name];else this.style[name] = value;\n\n // Renderable is defined if StyleSheet option ` + "`"))) + ((`link` + ("`" + ` is true.\n if (this.renderable) {\n if (remove) this.renderer.removeProperty(this.renderable, name);else this.renderer.setProperty(this.renderable, name, value);\n return this;\n }\n\n var sheet = this.options.sheet;\n\n if (sheet && sheet.attached) {\n (0, _warning2['default'])(false, 'Rule is not linked. Missing sheet option \"link: true\".');\n }\n return this;\n }\n\n /**\n * Apply rule to an element inline.\n */\n\n }, {\n key: 'applyTo',\n value: function applyTo(renderable) {\n var json = this.toJSON();\n for (var prop in json) {\n this.renderer.setProperty(renderable, prop, json[prop]);\n }return this;\n }\n\n /**\n * Returns JSON representation of the rule.\n * Fallbacks are not supported.\n * Useful for inline styles.\n */\n\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var json = {};\n for (var prop in this.style) {\n var value = this.style[prop];\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') json[prop] = value;else if (Array.isArray(value)) json[prop] = (0, _toCssValue2['default'])(value);\n }\n return json;\n }\n\n /**\n * Generates a CSS string.\n */\n\n }, {\n key: 'toString',\n value: function toString(options) {\n var sheet = this.options.sheet;\n\n var link = sheet ? sheet.options.link : false;\n var opts = link ? _extends({}, options, { allowEmpty: true }) : options;\n return (0, _toCss2['default'])(this.selector, this.style, opts);\n }\n }, {\n key: 'selector',\n set: function set(selector) {\n if (selector === this.selectorText) return;\n\n this.selectorText = selector;\n\n if (!this.renderable) return;\n\n var hasChanged = this.renderer.setSelector(this.renderable, selector);\n\n // If selector setter is not implemented, rerender the rule.\n if (!hasChanged && this.renderable) {\n var renderable = this.renderer.replaceRule(this.renderable, this);\n if (renderable) this.renderable = renderable;\n }\n }\n\n /**\n * Get selector string.\n */\n ,\n get: function get() {\n return this.selectorText;\n }\n }]);\n\n return StyleRule;\n}();\n\nexports['default'] = StyleRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _toCss = require('../utils/toCss');\n\nvar _toCss2 = _interopRequireDefault(_toCss);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ViewportRule = function () {\n function ViewportRule(key, style, options) {\n _classCallCheck(this, ViewportRule);\n\n this.type = 'viewport';\n this.isProcessed = false;\n\n this.key = key;\n this.style = style;\n this.options = options;\n }\n\n /**\n * Generates a CSS string.\n */\n\n\n _createClass(ViewportRule, [{\n key: 'toString',\n value: function toString(options) {\n return (0, _toCss2['default'])(this.key, this.style, options);\n }\n }]);\n\n return ViewportRule;\n}();\n\nexports['default'] = ViewportRule;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _SheetsRegistry = require('./SheetsRegistry');\n\nvar _SheetsRegistry2 = _interopRequireDefault(_SheetsRegistry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * This is a global sheets registry. Only DomRenderer will add sheets to it.\n * On the server one should use an own SheetsRegistry instance and add the\n * sheets to it, because you need to make sure to create a new registry for\n * each request in order to not leak sheets across requests.\n */\nexports['default'] = new _SheetsRegistry2['default']();", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = cloneStyle;\n\nvar _isObservable = require('./isObservable');\n\nvar _isObservable2 = _interopRequireDefault(_isObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar isArray = Array.isArray;\nfunction cloneStyle(style) {\n // Support empty values in case user ends up with them by accident.\n if (style == null) return style;\n\n // Support string value for SimpleRule.\n var typeOfStyle = typeof style === 'undefined' ? 'undefined' : _typeof(style);\n\n if (typeOfStyle === 'string' || typeOfStyle === 'number' || typeOfStyle === 'function') {\n return style;\n }\n\n // Support array for FontFaceRule.\n if (isArray(style)) return style.map(cloneStyle);\n\n // Support Observable styles. Observables are immutable, so we don't need to\n // copy them.\n if ((0, _isObservable2['default'])(style)) return style;\n\n var newStyle = {};\n for (var name in style) {\n var value = style[name];\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n newStyle[name] = cloneStyle(value);\n continue;\n }\n newStyle[name] = value;\n }\n\n return newStyle;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _StyleSheet = require('../StyleSheet');\n\nvar _StyleSheet2 = _interopRequireDefault(_StyleSheet);\n\nvar _moduleId = require('./moduleId');\n\nvar _moduleId2 = _interopRequireDefault(_moduleId);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar maxRules = 1e10;\n\n\nvar env = process.env.NODE_ENV;\n\n/**\n * Returns a function which generates unique class names based on counters.\n * When new generator function is created, rule counter is reseted.\n * We need to reset the rule counter for SSR for each request.\n */\n\nexports['default'] = function () {\n var ruleCounter = 0;\n var defaultPrefix = env === 'production' ? 'c' : '';\n\n return function (rule, sheet) {\n ruleCounter += 1;\n\n if (ruleCounter > maxRules) {\n (0, _warning2['default'])(false, '[JSS] You might have a memory leak. Rule counter is at %s.', ruleCounter);\n }\n\n var prefix = defaultPrefix;\n var jssId = '';\n\n if (sheet) {\n prefix = sheet.options.classNamePrefix || defaultPrefix;\n if (sheet.options.jss.id != null) jssId += sheet.options.jss.id;\n }\n\n if (env === 'production') {\n return '' + prefix + _moduleId2['default'] + jssId + ruleCounter;\n }\n\n return prefix + rule.key + '-' + _moduleId2['default'] + (jssId && '-' + jssId) + '-' + ruleCounter;\n };\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = createRule;\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _StyleRule = require('../rules/StyleRule');\n\nvar _StyleRule2 = _interopRequireDefault(_StyleRule);\n\nvar _cloneStyle = require('../utils/cloneStyle');\n\nvar _cloneStyle2 = _interopRequireDefault(_cloneStyle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Create a rule instance.\n */\nfunction createRule() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'unnamed';\n var decl = arguments[1];\n var options = arguments[2];\n var jss = options.jss;\n\n var declCopy = (0, _cloneStyle2['default'])(decl);\n\n var rule = jss.plugins.onCreateRule(name, declCopy, options);\n if (rule) return rule;\n\n // It is an at-rule and it has no instance.\n if (name[0] === '@') {\n (0, _warning2['default'])(false, '[JSS] Unknown at-rule %s', name);\n }\n\n return new _StyleRule2['default'](name, declCopy, options);\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CSS = global.CSS;\n\nvar env = process.env.NODE_ENV;\n\nvar escapeRegex = /([[\\].#*$><+~=|^:(),\"'`)) + ("`" + (`])/g;\n\nexports['default'] = function (str) {\n // We don't need to escape it in production, because we are not using user's\n // input for selectors, we are generating a valid selector.\n if (env === 'production') return str;\n\n if (!CSS || !CSS.escape) {\n return str.replace(escapeRegex, '\\\\$1');\n }\n\n return CSS.escape(str);\n};", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports['default'] = getDynamicStyles;\n/**\n * Extracts a styles object with only props that contain function values.\n */\nfunction getDynamicStyles(styles) {\n var to = null;\n\n for (var key in styles) {\n var value = styles[key];\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n if (type === 'function') {\n if (!to) to = {};\n to[key] = value;\n } else if (type === 'object' && value !== null && !Array.isArray(value)) {\n var extracted = getDynamicStyles(value);\n if (extracted) {\n if (!to) to = {};\n to[key] = extracted;\n }\n }\n }\n\n return to;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _symbolObservable = require('symbol-observable');\n\nvar _symbolObservable2 = _interopRequireDefault(_symbolObservable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = function (value) {\n return value && value[_symbolObservable2['default']] && value === value[_symbolObservable2['default']]();\n};", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = linkRule;\n/**\n * Link rule with CSSStyleRule and nested rules with corresponding nested cssRules if both exists.\n */\nfunction linkRule(rule, cssRule) {\n rule.renderable = cssRule;\n if (rule.rules && cssRule.cssRules) rule.rules.link(cssRule.cssRules);\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar ns = '2f1acc6c3a606b082e5eef5e54414ffb';\nif (global[ns] == null) global[ns] = 0;\n\n// Bundle may contain multiple JSS versions at the same time. In order to identify\n// the current version with just one short number and use it for classes generation\n// we use a counter. Also it is more accurate, because user can manually reevaluate\n// the module.\nexports['default'] = global[ns]++;", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = toCss;\n\nvar _toCssValue = require('./toCssValue');\n\nvar _toCssValue2 = _interopRequireDefault(_toCssValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Indent a string.\n * http://jsperf.com/array-join-vs-for\n */\nfunction indentStr(str, indent) {\n var result = '';\n for (var index = 0; index < indent; index++) {\n result += ' ';\n }return result + str;\n}\n\n/**\n * Converts a Rule to CSS string.\n */\n\nfunction toCss(selector, style) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var result = '';\n\n if (!style) return result;\n\n var _options$indent = options.indent,\n indent = _options$indent === undefined ? 0 : _options$indent;\n var fallbacks = style.fallbacks;\n\n\n indent++;\n\n // Apply fallbacks first.\n if (fallbacks) {\n // Array syntax {fallbacks: [{prop: value}]}\n if (Array.isArray(fallbacks)) {\n for (var index = 0; index < fallbacks.length; index++) {\n var fallback = fallbacks[index];\n for (var prop in fallback) {\n var value = fallback[prop];\n if (value != null) {\n result += '\\n' + indentStr(prop + ': ' + (0, _toCssValue2['default'])(value) + ';', indent);\n }\n }\n }\n } else {\n // Object syntax {fallbacks: {prop: value}}\n for (var _prop in fallbacks) {\n var _value = fallbacks[_prop];\n if (_value != null) {\n result += '\\n' + indentStr(_prop + ': ' + (0, _toCssValue2['default'])(_value) + ';', indent);\n }\n }\n }\n }\n\n for (var _prop2 in style) {\n var _value2 = style[_prop2];\n if (_value2 != null && _prop2 !== 'fallbacks') {\n result += '\\n' + indentStr(_prop2 + ': ' + (0, _toCssValue2['default'])(_value2) + ';', indent);\n }\n }\n\n // Allow empty style in this case, because properties will be added dynamically.\n if (!result && !options.allowEmpty) return result;\n\n indent--;\n result = indentStr(selector + ' {' + result + '\\n', indent) + indentStr('}', indent);\n\n return result;\n}", + "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = toCssValue;\nvar join = function join(value, by) {\n var result = '';\n for (var i = 0; i < value.length; i++) {\n // Remove !important from the value, it will be readded later.\n if (value[i] === '!important') break;\n if (result) result += by;\n result += value[i];\n }\n return result;\n};\n\n/**\n * Converts array values to string.\n *\n * ` + "`"))))) + ((((`margin: [['5px', '10px']]` + ("`" + ` > `)) + ("`" + (`margin: 5px 10px;` + "`"))) + ((`\n * ` + ("`" + `border: ['1px', '2px']`)) + ("`" + (` > ` + "`")))) + (((`border: 1px, 2px;` + ("`" + `\n * `)) + ("`" + (`margin: [['5px', '10px'], '!important']` + "`"))) + ((` > ` + ("`" + `margin: 5px 10px !important;`)) + (("`" + `\n * `) + ("`" + `color: ['red', !important]`)))))) + ((((("`" + (` > ` + "`")) + (`color: red !important;` + ("`" + `\n */\nfunction toCssValue(value) {\n var ignoreImportant = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!Array.isArray(value)) return value;\n\n var cssValue = '';\n\n // Support space separated values via `))) + (("`" + (`[['5px', '10px']]` + "`")) + (`.\n if (Array.isArray(value[0])) {\n for (var i = 0; i < value.length; i++) {\n if (value[i] === '!important') break;\n if (cssValue) cssValue += ', ';\n cssValue += join(value[i], ' ');\n }\n } else cssValue = join(value, ', ');\n\n // Add !important, because it was ignored.\n if (!ignoreImportant && value[value.length - 1] === '!important') {\n cssValue += ' !important';\n }\n\n return cssValue;\n}", + "/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '` + ("`" + `warning(condition, format, ...args)`)))) + ((("`" + (` requires a warning ' +\n 'message argument'\n );\n }\n\n if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n throw new Error(\n 'The warning format should be able to uniquely identify this ' +\n 'warning. Please, use a more descriptive format than: ' + format\n );\n }\n\n if (!condition) {\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch(x) {}\n }\n };\n}\n\nmodule.exports = warning;\n", + "/**\n * lodash (Custom Build) \n * Build: ` + "`")) + (`lodash modularize exports=\"npm\" -o ./` + ("`" + `\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `))) + (("`" + (`TypeError` + "`")) + ((` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various ` + "`") + (`Number` + "`"))))) + ((((` constants. */\nvar NAN = 0 / 0;\n\n/** ` + ("`" + `Object#toString`)) + ("`" + (` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on ` + "`"))) + ((`root` + ("`" + `. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `)) + ("`" + (`global` + "`")))) + (((` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable ` + ("`" + `self`)) + ("`" + (`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [` + "`"))) + ((`toStringTag` + ("`" + `](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `)) + (("`" + `lodash`) + ("`" + ` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `)))))))) + ((((((("`" + (`func` + "`")) + (` until after ` + ("`" + `wait`))) + (("`" + (`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a ` + "`")) + (`cancel` + ("`" + ` method to cancel\n * delayed `)))) + ((("`" + (`func` + "`")) + (` invocations and a ` + ("`" + `flush`))) + (("`" + (` method to immediately invoke them.\n * Provide ` + "`")) + (`options` + ("`" + ` to indicate whether `))))) + (((("`" + (`func` + "`")) + (` should be invoked on the\n * leading and/or trailing edge of the ` + ("`" + `wait`))) + (("`" + (` timeout. The ` + "`")) + (`func` + ("`" + ` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `)))) + ((("`" + (`func` + "`")) + (`\n * invocation.\n *\n * **Note:** If ` + ("`" + `leading`))) + (("`" + (` and ` + "`")) + ((`trailing` + "`") + (` options are ` + "`")))))) + (((((`true` + ("`" + `, `)) + ("`" + (`func` + "`"))) + ((` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the ` + ("`" + `wait`)) + ("`" + (` timeout.\n *\n * If ` + "`")))) + (((`wait` + ("`" + ` is `)) + ("`" + (`0` + "`"))) + ((` and ` + ("`" + `leading`)) + (("`" + ` is `) + ("`" + `false`))))) + (((("`" + (`, ` + "`")) + (`func` + ("`" + ` invocation is deferred\n * until to the next tick, similar to `))) + (("`" + (`setTimeout` + "`")) + (` with a timeout of ` + ("`" + `0`)))) + ((("`" + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`")) + (`_.debounce` + ("`" + ` and `))) + (("`" + (`_.throttle` + "`")) + ((`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + "`") + (`func` + "`"))))))) + ((((((` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke ` + ("`" + `sendMail`)) + ("`" + (` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure ` + "`"))) + ((`batchLog` + ("`" + ` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `)) + ("`" + (`maxWait` + "`")))) + (((` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the ` + ("`" + `maxWait`)) + ("`" + (` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have ` + "`"))) + ((`lastArgs` + ("`" + ` which means `)) + (("`" + `func`) + ("`" + ` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `))))) + (((("`" + (`value` + "`")) + (` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of ` + ("`" + `Object`))) + (("`" + (`. (e.g. arrays, functions, objects, regexes, ` + "`")) + (`new Number(0)` + ("`" + `, and `)))) + ((("`" + (`new String('')` + "`")) + (`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + ((`value` + "`") + (` is an object, else ` + "`")))))) + (((((`false` + ("`" + `.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `)) + ("`" + (`value` + "`"))) + ((` is object-like. A value is object-like if it's not ` + ("`" + `null`)) + ("`" + (`\n * and has a ` + "`")))) + (((`typeof` + ("`" + ` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + (("`" + ` is object-like, else `) + ("`" + `false`))))) + (((("`" + (`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is classified as a `))) + (("`" + (`Symbol` + "`")) + (` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + (` if ` + "`")) + (`value` + ("`" + ` is a symbol, else `))) + (("`" + (`false` + "`")) + ((`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts ` + "`") + (`value` + "`")))))))))) + (((((((((` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n", + "/**\n * lodash (Custom Build) \n * Build: ` + ("`" + `lodash modularize exports=\"npm\" -o ./`)) + ("`" + (`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the ` + "`"))) + ((`TypeError` + ("`" + ` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `)) + ("`" + (`Number` + "`")))) + (((` constants. */\nvar NAN = 0 / 0;\n\n/** ` + ("`" + `Object#toString`)) + ("`" + (` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on ` + "`"))) + ((`root` + ("`" + `. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `)) + ("`" + (`global` + "`"))))) + ((((` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable ` + ("`" + `self`)) + ("`" + (`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [` + "`"))) + ((`toStringTag` + ("`" + `](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `)) + ("`" + (`lodash` + "`")))) + (((` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking ` + ("`" + `func`)) + ("`" + (` until after ` + "`"))) + ((`wait` + ("`" + `\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `)) + (("`" + `cancel`) + ("`" + ` method to cancel\n * delayed `)))))) + ((((("`" + (`func` + "`")) + (` invocations and a ` + ("`" + `flush`))) + (("`" + (` method to immediately invoke them.\n * Provide ` + "`")) + (`options` + ("`" + ` to indicate whether `)))) + ((("`" + (`func` + "`")) + (` should be invoked on the\n * leading and/or trailing edge of the ` + ("`" + `wait`))) + (("`" + (` timeout. The ` + "`")) + ((`func` + "`") + (` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last ` + "`"))))) + ((((`func` + ("`" + `\n * invocation.\n *\n * **Note:** If `)) + ("`" + (`leading` + "`"))) + ((` and ` + ("`" + `trailing`)) + ("`" + (` options are ` + "`")))) + (((`true` + ("`" + `, `)) + ("`" + (`func` + "`"))) + ((` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the ` + ("`" + `wait`)) + (("`" + ` timeout.\n *\n * If `) + ("`" + `wait`))))))) + (((((("`" + (` is ` + "`")) + (`0` + ("`" + ` and `))) + (("`" + (`leading` + "`")) + (` is ` + ("`" + `false`)))) + ((("`" + (`, ` + "`")) + (`func` + ("`" + ` invocation is deferred\n * until to the next tick, similar to `))) + (("`" + (`setTimeout` + "`")) + (` with a timeout of ` + ("`" + `0`))))) + (((("`" + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`")) + (`_.debounce` + ("`" + ` and `))) + (("`" + (`_.throttle` + "`")) + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + ("`" + `func`)))) + ((("`" + (` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke ` + "`")) + (`sendMail` + ("`" + ` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `))) + (("`" + (`batchLog` + "`")) + ((` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any ` + "`") + (`maxWait` + "`")))))) + (((((` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the ` + ("`" + `maxWait`)) + ("`" + (` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have ` + "`"))) + ((`lastArgs` + ("`" + ` which means `)) + ("`" + (`func` + "`")))) + (((` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes ` + ("`" + `func`)) + ("`" + (` at most once per\n * every ` + "`"))) + ((`wait` + ("`" + ` milliseconds. The throttled function comes with a `)) + (("`" + `cancel`) + ("`" + `\n * method to cancel delayed `))))) + (((("`" + (`func` + "`")) + (` invocations and a ` + ("`" + `flush`))) + (("`" + (` method to\n * immediately invoke them. Provide ` + "`")) + (`options` + ("`" + ` to indicate whether `)))) + ((("`" + (`func` + "`")) + (`\n * should be invoked on the leading and/or trailing edge of the ` + ("`" + `wait`))) + (("`" + (`\n * timeout. The ` + "`")) + ((`func` + "`") + (` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last ` + "`")))))))) + (((((((`func` + ("`" + ` invocation.\n *\n * **Note:** If `)) + ("`" + (`leading` + "`"))) + ((` and ` + ("`" + `trailing`)) + ("`" + (` options are ` + "`")))) + (((`true` + ("`" + `, `)) + ("`" + (`func` + "`"))) + ((` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the ` + ("`" + `wait`)) + ("`" + (` timeout.\n *\n * If ` + "`"))))) + ((((`wait` + ("`" + ` is `)) + ("`" + (`0` + "`"))) + ((` and ` + ("`" + `leading`)) + ("`" + (` is ` + "`")))) + (((`false` + ("`" + `, `)) + ("`" + (`func` + "`"))) + ((` invocation is deferred\n * until to the next tick, similar to ` + ("`" + `setTimeout`)) + (("`" + ` with a timeout of `) + ("`" + `0`)))))) + ((((("`" + (`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + "`")) + (`_.throttle` + ("`" + ` and `))) + (("`" + (`_.debounce` + "`")) + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke ` + ("`" + `renewToken`)))) + ((("`" + (` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `))) + (("`" + (`Object` + "`")) + ((`. (e.g. arrays, functions, objects, regexes, ` + "`") + (`new Number(0)` + "`"))))) + ((((`, and ` + ("`" + `new String('')`)) + ("`" + (`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + ("`" + (`value` + "`")))) + (((` is an object, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is object-like. A value is object-like if it's not `)) + (("`" + `null`) + ("`" + `\n * and has a `))))))) + (((((("`" + (`typeof` + "`")) + (` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is object-like, else `)))) + ((("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is classified as a ` + "`")) + ((`Symbol` + "`") + (` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))))) + ((((`true` + ("`" + ` if `)) + ("`" + (`value` + "`"))) + ((` is a symbol, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts ` + "`")))) + (((`value` + ("`" + ` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n", + "var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `)) + ("`" + (`Hash` + "`"))) + ((`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n", + "var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to ` + ("`" + `ListCache`)) + (("`" + `.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n", + "var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `) + ("`" + `MapCache`)))))) + ((((("`" + (`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n", + "var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to ` + "`")) + (`SetCache` + ("`" + `.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n", + "var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `))) + (("`" + (`Stack` + "`")) + (`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n", + "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", + "var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n", + "var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n", + "/**\n * A faster alternative to ` + ("`" + `Function#apply`)))) + ((("`" + (`, this function invokes ` + "`")) + (`func` + ("`" + `\n * with the `))) + (("`" + (`this` + "`")) + ((` binding of ` + "`") + (`thisArg` + "`"))))) + ((((` and the arguments of ` + ("`" + `args`)) + ("`" + (`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The ` + "`"))) + ((`this` + ("`" + ` binding of `)) + ("`" + (`func` + "`")))) + (((`.\n * @param {Array} args The arguments to invoke ` + ("`" + `func`)) + ("`" + (` with.\n * @returns {*} Returns the result of ` + "`"))) + ((`func` + ("`" + `.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n", + "/**\n * A specialized version of `)) + (("`" + `_.every`) + ("`" + ` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `))))))))) + (((((((("`" + (`true` + "`")) + (` if all elements pass the predicate check,\n * else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = arrayEvery;\n", + "/**\n * A specialized version of ` + "`")) + (`_.filter` + ("`" + ` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n", + "var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `)))) + ((("`" + (`_.includes` + "`")) + (` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`target` + ("`" + ` is found, else `))))) + (((("`" + (`false` + "`")) + (`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n", + "/**\n * This function is like ` + ("`" + `arrayIncludes`))) + (("`" + (` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `)))) + ((("`" + (`target` + "`")) + (` is found, else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n", + "var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like ` + "`")) + ((`value` + "`") + (`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable ` + "`")))))) + (((((`arguments.length` + ("`" + ` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n", + "/**\n * A specialized version of `)) + ("`" + (`_.map` + "`"))) + ((` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n", + "/**\n * Appends the elements of ` + ("`" + `values`)) + ("`" + (` to ` + "`")))) + (((`array` + ("`" + `.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `)) + ("`" + (`array` + "`"))) + ((`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n", + "/**\n * A specialized version of ` + ("`" + `_.some`)) + (("`" + ` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `) + ("`" + `true`))))) + (((("`" + (` if any element passes the predicate check,\n * else ` + "`")) + (`false` + ("`" + `.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n", + "var eq = require('./eq');\n\n/**\n * Gets the index at which the `))) + (("`" + (`key` + "`")) + (` is found in ` + ("`" + `array`)))) + ((("`" + (` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else ` + "`")) + (`-1` + ("`" + `.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n", + "var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `))) + (("`" + (`assignValue` + "`")) + ((` and ` + "`") + (`assignMergeValue` + "`"))))))) + ((((((` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n", + "var baseForOwn = require('./_baseForOwn'),\n createBaseEach = require('./_createBaseEach');\n\n/**\n * The base implementation of ` + ("`" + `_.forEach`)) + ("`" + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns ` + "`"))) + ((`collection` + ("`" + `.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nmodule.exports = baseEach;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `)) + ("`" + (`_.every` + "`")))) + (((` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if all elements pass the predicate check,\n * else ` + "`"))) + ((`false` + ("`" + `\n */\nfunction baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n}\n\nmodule.exports = baseEvery;\n", + "var isSymbol = require('./isSymbol');\n\n/**\n * The base implementation of methods like `)) + ("`" + (`_.max` + "`"))))) + ((((` and ` + ("`" + `_.min`)) + ("`" + (` which accepts a\n * ` + "`"))) + ((`comparator` + ("`" + ` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseExtremum;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `)) + ("`" + (`_.filter` + "`")))) + (((` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n", + "/**\n * The base implementation of ` + ("`" + `_.findIndex`)) + ("`" + (` and ` + "`"))) + ((`_.findLastIndex` + ("`" + ` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `)) + (("`" + `-1`) + ("`" + `.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n", + "var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `)))))) + ((((("`" + (`_.flatten` + "`")) + (` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass ` + ("`" + `predicate`))) + (("`" + (` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n", + "var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of ` + "`")) + (`baseForOwn` + ("`" + ` which iterates over `)))) + ((("`" + (`object` + "`")) + (`\n * properties returned by ` + ("`" + `keysFunc`))) + (("`" + (` and invokes ` + "`")) + ((`iteratee` + "`") + (` for each property.\n * Iteratee functions may exit iteration early by explicitly returning ` + "`"))))) + ((((`false` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `)) + ("`" + (`object` + "`"))) + ((`.\n * @returns {Object} Returns ` + ("`" + `object`)) + ("`" + (`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n", + "var baseFor = require('./_baseFor'),\n keys = require('./keys');\n\n/**\n * The base implementation of ` + "`")))) + (((`_.forOwn` + ("`" + ` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `)) + ("`" + (`object` + "`"))) + ((`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nmodule.exports = baseForOwn;\n", + "var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of ` + ("`" + `_.get`)) + (("`" + ` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n", + "var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `) + ("`" + `getAllKeys`)))))))) + ((((((("`" + (` and ` + "`")) + (`getAllKeysIn` + ("`" + ` which uses\n * `))) + (("`" + (`keysFunc` + "`")) + (` and ` + ("`" + `symbolsFunc`)))) + ((("`" + (` to get the enumerable property names and\n * symbols of ` + "`")) + (`object` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `))) + (("`" + (`object` + "`")) + (`.\n * @param {Function} symbolsFunc The function to get the symbols of ` + ("`" + `object`))))) + (((("`" + (`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n", + "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** ` + "`")) + (`Object#toString` + ("`" + ` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `))) + (("`" + (`getTag` + "`")) + (` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the ` + ("`" + `toStringTag`)))) + ((("`" + (`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", + "/**\n * The base implementation of ` + "`")) + (`_.gt` + ("`" + ` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + ((` if ` + "`") + (`value` + "`")))))) + (((((` is greater than ` + ("`" + `other`)) + ("`" + (`,\n * else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nmodule.exports = baseGt;\n", + "/**\n * The base implementation of `)) + ("`" + (`_.hasIn` + "`")))) + (((` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))) + ((`key` + ("`" + ` exists, else `)) + (("`" + `false`) + ("`" + `.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n", + "var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `))))) + (((("`" + (`_.indexOf` + "`")) + (` without ` + ("`" + `fromIndex`))) + (("`" + (` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else ` + "`")) + (`-1` + ("`" + `.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n", + "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n arrayMap = require('./_arrayMap'),\n baseUnary = require('./_baseUnary'),\n cacheHas = require('./_cacheHas');\n\n/* Built-in method references for those with the same name as other `)))) + ((("`" + (`lodash` + "`")) + (` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like ` + ("`" + `_.intersection`))) + (("`" + (`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseIntersection;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + "`")) + ((`Object#toString` + "`") + (` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of ` + "`"))))))) + ((((((`_.isArguments` + ("`" + `.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + ("`" + (` is an ` + "`")))) + (((`arguments` + ("`" + ` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n", + "var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `)) + ("`" + (`_.isEqual` + "`"))) + ((` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed ` + ("`" + `value`)) + (("`" + ` and `) + ("`" + `other`))))) + (((("`" + (` objects.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if the values are equivalent, else `))) + (("`" + (`false` + "`")) + (`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n", + "var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** ` + ("`" + `Object#toString`)))) + ((("`" + (` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of ` + "`")) + (`baseIsEqual` + ("`" + ` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `))) + (("`" + (`baseIsEqual` + "`")) + ((` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed ` + "`") + (`object` + "`")))))) + (((((` and ` + ("`" + `other`)) + ("`" + (` objects.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if the objects are equivalent, else `)) + ("`" + (`false` + "`")))) + (((`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n", + "var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of ` + ("`" + `_.isMatch`)) + ("`" + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + (("`" + `object`) + ("`" + ` is a match, else `))))) + (((("`" + (`false` + "`")) + (`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n", + "/**\n * The base implementation of ` + ("`" + `_.isNaN`))) + (("`" + (` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `)))) + ((("`" + (`value` + "`")) + (` is ` + ("`" + `NaN`))) + (("`" + (`, else ` + "`")) + ((`false` + "`") + (`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n", + "var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match ` + "`")))))))))))) + (((((((((((`RegExp` + ("`" + `\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `)) + ("`" + (`_.isNative` + "`"))) + ((` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`")))) + (((`value` + ("`" + ` is a native function,\n * else `)) + ("`" + (`false` + "`"))) + ((`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n", + "var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + ("`" + `Object#toString`)) + ("`" + (` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify ` + "`"))))) + ((((`toStringTag` + ("`" + ` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `)) + ("`" + (`_.isTypedArray` + "`"))) + ((` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`")))) + (((`value` + ("`" + ` is a typed array, else `)) + ("`" + (`false` + "`"))) + ((`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n", + "var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\n\n/**\n * The base implementation of ` + ("`" + `_.iteratee`)) + (("`" + `.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `) + ("`" + `typeof`)))))) + ((((("`" + (` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nmodule.exports = baseIteratee;\n", + "var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of ` + "`")) + (`_.keys` + ("`" + ` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n", + "/**\n * The base implementation of `))) + (("`" + (`_.lt` + "`")) + (` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + (` if ` + "`")) + (`value` + ("`" + ` is less than `))) + (("`" + (`other` + "`")) + ((`,\n * else ` + "`") + (`false` + "`"))))) + ((((`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nmodule.exports = baseLt;\n", + "var baseEach = require('./_baseEach'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * The base implementation of ` + ("`" + `_.map`)) + ("`" + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nmodule.exports = baseMap;\n", + "var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\n\n/**\n * The base implementation of ` + "`"))) + ((`_.matches` + ("`" + ` which doesn't clone `)) + ("`" + (`source` + "`")))) + (((`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nmodule.exports = baseMatches;\n", + "var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of ` + ("`" + `_.matchesProperty`)) + ("`" + (` which doesn't clone ` + "`"))) + ((`srcValue` + ("`" + `.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n", + "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n baseSortBy = require('./_baseSortBy'),\n baseUnary = require('./_baseUnary'),\n compareMultiple = require('./_compareMultiple'),\n identity = require('./identity');\n\n/**\n * The base implementation of `)) + (("`" + `_.orderBy`) + ("`" + ` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `))))))) + (((((("`" + (`iteratees` + "`")) + (`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nmodule.exports = baseOrderBy;\n", + "/**\n * The base implementation of ` + ("`" + `_.property`))) + (("`" + (` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = baseProperty;\n", + "var baseGet = require('./_baseGet');\n\n/**\n * A specialized version of ` + "`")) + (`baseProperty` + ("`" + ` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nmodule.exports = basePropertyDeep;\n", + "/* Built-in method references for those with the same name as other `)))) + ((("`" + (`lodash` + "`")) + (` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\n\n/**\n * The base implementation of ` + ("`" + `_.range`))) + (("`" + (` and ` + "`")) + (`_.rangeRight` + ("`" + ` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n}\n\nmodule.exports = baseRange;\n", + "var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `))))) + (((("`" + (`_.rest` + "`")) + (` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n", + "var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of ` + ("`" + `setToString`))) + (("`" + (` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The ` + "`")) + (`toString` + ("`" + ` result.\n * @returns {Function} Returns `)))) + ((("`" + (`func` + "`")) + (`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n", + "var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of ` + ("`" + `_.some`))) + (("`" + (` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if any element passes the predicate check,\n * else ` + "`")))))) + (((((`false` + ("`" + `.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nmodule.exports = baseSome;\n", + "/**\n * The base implementation of `)) + ("`" + (`_.sortBy` + "`"))) + ((` which uses ` + ("`" + `comparer`)) + ("`" + (` to define the\n * sort order of ` + "`")))) + (((`array` + ("`" + ` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `)) + ("`" + (`array` + "`"))) + ((`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nmodule.exports = baseSortBy;\n", + "/**\n * The base implementation of ` + ("`" + `_.times`)) + (("`" + ` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `) + ("`" + `iteratee`))))) + (((("`" + (`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n", + "var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various ` + "`")) + (`Number` + ("`" + ` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `))) + (("`" + (`_.toString` + "`")) + (` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n", + "/**\n * The base implementation of ` + ("`" + `_.unary`)))) + ((("`" + (` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n", + "var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of ` + "`")) + (`_.uniqBy` + ("`" + ` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n", + "/**\n * Checks if a `))) + (("`" + (`cache` + "`")) + ((` value for ` + "`") + (`key` + "`")))))))) + (((((((` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if an entry for ` + "`"))) + ((`key` + ("`" + ` exists, else `)) + ("`" + (`false` + "`")))) + (((`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n", + "var isArrayLikeObject = require('./isArrayLikeObject');\n\n/**\n * Casts ` + ("`" + `value`)) + ("`" + (` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nmodule.exports = castArrayLikeObject;\n", + "var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts ` + "`"))) + ((`value` + ("`" + ` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n", + "var isSymbol = require('./isSymbol');\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `)) + ("`" + (`value` + "`"))))) + ((((`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nmodule.exports = compareAscending;\n", + "var compareAscending = require('./_compareAscending');\n\n/**\n * Used by ` + ("`" + `_.orderBy`)) + ("`" + (` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If ` + "`"))) + ((`orders` + ("`" + ` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `)) + ("`" + (`object` + "`")))) + (((`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an ` + ("`" + `Array#sort`)) + ("`" + (` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // ` + "`"))) + ((`object` + ("`" + ` and `)) + (("`" + `other`) + ("`" + `. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nmodule.exports = compareMultiple;\n", + "var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n", + "var isArrayLike = require('./isArrayLike');\n\n/**\n * Creates a `)))))) + ((((("`" + (`baseEach` + "`")) + (` or ` + ("`" + `baseEachRight`))) + (("`" + (` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nmodule.exports = createBaseEach;\n", + "/**\n * Creates a base function for methods like ` + "`")) + (`_.forIn` + ("`" + ` and `)))) + ((("`" + (`_.forOwn` + "`")) + (`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n", + "var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a ` + ("`" + `_.find`))) + (("`" + (` or ` + "`")) + ((`_.findLast` + "`") + (` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n", + "var baseRange = require('./_baseRange'),\n isIterateeCall = require('./_isIterateeCall'),\n toFinite = require('./toFinite');\n\n/**\n * Creates a ` + "`"))))) + ((((`_.range` + ("`" + ` or `)) + ("`" + (`_.rangeRight` + "`"))) + ((` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\nfunction createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of ` + ("`" + `-0`)) + ("`" + (` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n}\n\nmodule.exports = createRange;\n", + "var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various ` + "`")))) + (((`Number` + ("`" + ` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `)) + ("`" + (`values` + "`"))) + ((`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n", + "var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n", + "var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of ` + ("`" + `baseIsEqualDeep`)) + (("`" + ` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `) + ("`" + `baseIsEqual`))))))) + (((((("`" + (` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed ` + "`")) + (`array` + ("`" + ` and `))) + (("`" + (`other` + "`")) + (` objects.\n * @returns {boolean} Returns ` + ("`" + `true`)))) + ((("`" + (` if the arrays are equivalent, else ` + "`")) + (`false` + ("`" + `.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n", + "var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `))) + (("`" + (`Object#toString` + "`")) + (` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of ` + ("`" + `baseIsEqualDeep`))))) + (((("`" + (` for comparing objects of\n * the same ` + "`")) + (`toStringTag` + ("`" + `.\n *\n * **Note:** This function only supports comparing values with tags of\n * `))) + (("`" + (`Boolean` + "`")) + (`, ` + ("`" + `Date`)))) + ((("`" + (`, ` + "`")) + (`Error` + ("`" + `, `))) + (("`" + (`Number` + "`")) + ((`, ` + "`") + (`RegExp` + "`")))))) + (((((`, or ` + ("`" + `String`)) + ("`" + (`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The ` + "`"))) + ((`toStringTag` + ("`" + ` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `)) + ("`" + (`baseIsEqual` + "`")))) + (((` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed ` + ("`" + `object`)) + ("`" + (` and ` + "`"))) + ((`other` + ("`" + ` objects.\n * @returns {boolean} Returns `)) + (("`" + `true`) + ("`" + ` if the objects are equivalent, else `))))) + (((("`" + (`false` + "`")) + (`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to ` + ("`" + `1`))) + (("`" + (` or ` + "`")) + (`0` + ("`" + ` and dates to milliseconds.\n // Invalid dates are coerced to `)))) + ((("`" + (`NaN` + "`")) + (`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n", + "var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of ` + ("`" + `baseIsEqualDeep`))) + (("`" + (` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See ` + "`")) + ((`baseIsEqual` + "`") + (` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed ` + "`"))))))))) + ((((((((`object` + ("`" + ` and `)) + ("`" + (`other` + "`"))) + ((` objects.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if the objects are equivalent, else ` + "`")))) + (((`false` + ("`" + `.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `)) + ("`" + (`Object` + "`"))) + ((` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n", + "/** Detect free variable ` + ("`" + `global`)) + ("`" + (` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", + "var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of ` + "`"))))) + ((((`object` + ("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n", + "var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `)) + ("`" + (`map` + "`"))) + ((`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n", + "var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\n\n/**\n * Gets the property names, values, and compare flags of ` + ("`" + `object`)) + ("`" + (`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of ` + "`")))) + (((`object` + ("`" + `.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nmodule.exports = getMatchData;\n", + "var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `)) + ("`" + (`key` + "`"))) + ((` of ` + ("`" + `object`)) + (("`" + `.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `) + ("`" + `undefined`)))))) + ((((("`" + (`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n", + "var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n", + "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [` + "`")) + (`toStringTag` + ("`" + `](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `))) + (("`" + (`baseGetTag` + "`")) + (` which ignores ` + ("`" + `Symbol.toStringTag`)))) + ((("`" + (` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw ` + "`")) + (`toStringTag` + ("`" + `.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", + "var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `))) + (("`" + (`lodash` + "`")) + ((` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of ` + "`") + (`object` + "`"))))) + ((((`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n", + "var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** ` + ("`" + `Object#toString`)) + ("`" + (` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the ` + "`"))) + ((`toStringTag` + ("`" + ` of `)) + ("`" + (`value` + "`")))) + (((`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the ` + ("`" + `toStringTag`)) + ("`" + (`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n", + "/**\n * Gets the value at ` + "`"))) + ((`key` + ("`" + ` of `)) + (("`" + `object`) + ("`" + `.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n", + "var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `))))))) + (((((("`" + (`path` + "`")) + (` exists on ` + ("`" + `object`))) + (("`" + (`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `)))) + ((("`" + (`path` + "`")) + (` exists, else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n", + "/**\n * Removes ` + "`")) + (`key` + ("`" + ` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `))))) + (((("`" + (`true` + "`")) + (` if the entry was removed, else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for ` + "`")) + (`undefined` + ("`" + ` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `)))) + ((("`" + (`key` + "`")) + (`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for ` + ("`" + `key`))) + (("`" + (` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if an entry for ` + "`")))))) + (((((`key` + ("`" + ` exists, else `)) + ("`" + (`false` + "`"))) + ((`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n", + "var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for ` + ("`" + `undefined`)) + ("`" + (` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash ` + "`")))) + (((`key` + ("`" + ` to `)) + ("`" + (`value` + "`"))) + ((`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n", + "var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if ` + ("`" + `value`)) + (("`" + ` is a flattenable `) + ("`" + `arguments`))))) + (((("`" + (` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if `))) + (("`" + (`value` + "`")) + (` is flattenable, else ` + ("`" + `false`)))) + ((("`" + (`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n", + "/** Used as references for various ` + "`")) + (`Number` + ("`" + ` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `))) + (("`" + (`value` + "`")) + ((` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns ` + "`") + (`true` + "`")))))))) + (((((((` if ` + ("`" + `value`)) + ("`" + (` is a valid index, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n", + "var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`")))) + (((` if the arguments are from an iteratee call,\n * else ` + ("`" + `false`)) + ("`" + (`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n", + "var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))))) + ((((` if ` + ("`" + `value`)) + ("`" + (` is a property name, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n", + "/**\n * Checks if `)) + ("`" + (`value` + "`")))) + (((` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))) + ((`value` + ("`" + ` is suitable, else `)) + (("`" + `false`) + ("`" + `.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n", + "var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `)))))) + ((((("`" + (`func` + "`")) + (` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`func` + ("`" + ` is masked, else `)))) + ((("`" + (`false` + "`")) + (`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n", + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if ` + "`"))))) + ((((`value` + ("`" + ` is a prototype, else `)) + ("`" + (`false` + "`"))) + ((`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n", + "var isObject = require('./isObject');\n\n/**\n * Checks if ` + ("`" + `value`)) + ("`" + (` is suitable for strict equality comparisons, i.e. ` + "`")))) + (((`===` + ("`" + `.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + (("`" + ` if suitable for strict\n * equality comparisons, else `) + ("`" + `false`))))))) + (((((("`" + (`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n", + "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes ` + "`")) + (`key` + ("`" + ` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `))) + (("`" + (`true` + "`")) + (` if the entry was removed, else ` + ("`" + `false`)))) + ((("`" + (`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for ` + "`")) + (`key` + ("`" + `.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `))) + (("`" + (`key` + "`")) + ((` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns ` + "`") + (`true` + "`"))))) + ((((` if an entry for ` + ("`" + `key`)) + ("`" + (` exists, else ` + "`"))) + ((`false` + ("`" + `.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n", + "var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `)) + ("`" + (`key` + "`")))) + (((` to ` + ("`" + `value`)) + ("`" + (`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n", + "var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Removes ` + "`"))) + ((`key` + ("`" + ` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `)) + (("`" + `true`) + ("`" + ` if the entry was removed, else `)))))) + ((((("`" + (`false` + "`")) + (`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for ` + ("`" + `key`))) + (("`" + (`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for ` + "`")) + (`key` + ("`" + ` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `)))) + ((("`" + (`true` + "`")) + (` if an entry for ` + ("`" + `key`))) + (("`" + (` exists, else ` + "`")) + ((`false` + "`") + (`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n", + "var getMapData = require('./_getMapData');\n\n/**\n * Sets the map ` + "`"))))) + ((((`key` + ("`" + ` to `)) + ("`" + (`value` + "`"))) + ((`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n", + "/**\n * Converts ` + ("`" + `map`)) + ("`" + (` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n", + "/**\n * A specialized version of ` + "`")))) + (((`matchesProperty` + ("`" + ` for source values suitable\n * for strict equality comparisons, i.e. `)) + ("`" + (`===` + "`"))) + ((`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n", + "var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of ` + ("`" + `_.memoize`)) + (("`" + ` which clears the memoized function's\n * cache when it exceeds `) + ("`" + `MAX_MEMOIZE_SIZE`)))))))))) + ((((((((("`" + (`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n", + "var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n", + "var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other ` + "`")) + (`lodash` + ("`" + ` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n", + "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `))) + (("`" + (`exports` + "`")) + (`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable ` + ("`" + `module`)))) + ((("`" + (`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension ` + "`")) + (`module.exports` + ("`" + `. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `))) + (("`" + (`process` + "`")) + (` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use ` + ("`" + `util.types`))))) + (((("`" + (` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy ` + "`")) + (`process.binding('util')` + ("`" + ` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n", + "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`))) + (("`" + (`toStringTag` + "`")) + (`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts ` + ("`" + `value`)))) + ((("`" + (` to a string using ` + "`")) + (`Object.prototype.toString` + ("`" + `.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", + "/**\n * Creates a unary function that invokes `))) + (("`" + (`func` + "`")) + ((` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n", + "var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other ` + "`") + (`lodash` + "`")))))) + (((((` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of ` + ("`" + `baseRest`)) + ("`" + (` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n", + "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable ` + "`"))) + ((`self` + ("`" + `. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", + "/** Used to stand-in for `)) + ("`" + (`undefined` + "`")))) + (((` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds ` + ("`" + `value`)) + ("`" + (` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n", + "/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `)) + (("`" + `true`) + ("`" + ` if `))))) + (((("`" + (`value` + "`")) + (` is found, else ` + ("`" + `false`))) + (("`" + (`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n", + "/**\n * Converts ` + "`")) + (`set` + ("`" + ` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n", + "var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `)))) + ((("`" + (`toString` + "`")) + (` method of ` + ("`" + `func`))) + (("`" + (` to return ` + "`")) + ((`string` + "`") + (`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The ` + "`"))))))) + ((((((`toString` + ("`" + ` result.\n * @returns {Function} Returns `)) + ("`" + (`func` + "`"))) + ((`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n", + "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other ` + ("`" + `lodash`)) + ("`" + (` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke ` + "`")))) + (((`identity` + ("`" + ` instead\n * of `)) + ("`" + (`func` + "`"))) + ((` when it's called ` + ("`" + `HOT_COUNT`)) + ("`" + (` or more times in ` + "`"))))) + ((((`HOT_SPAN` + ("`" + `\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n", + "var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n", + "/**\n * Removes `)) + ("`" + (`key` + "`"))) + ((` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if the entry was removed, else ` + "`")))) + (((`false` + ("`" + `.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n", + "/**\n * Gets the stack value for `)) + ("`" + (`key` + "`"))) + ((`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n", + "/**\n * Checks if a stack value for ` + ("`" + `key`)) + (("`" + ` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `) + ("`" + `true`)))))) + ((((("`" + (` if an entry for ` + "`")) + (`key` + ("`" + ` exists, else `))) + (("`" + (`false` + "`")) + (`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n", + "var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack ` + ("`" + `key`)))) + ((("`" + (` to ` + "`")) + (`value` + ("`" + `.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n", + "/**\n * A specialized version of `))) + (("`" + (`_.indexOf` + "`")) + ((` which performs strict equality\n * comparisons of values, i.e. ` + "`") + (`===` + "`"))))) + ((((`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else ` + ("`" + `-1`)) + ("`" + (`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n", + "var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts ` + "`"))) + ((`string` + ("`" + ` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n", + "var isSymbol = require('./isSymbol');\n\n/** Used as references for various `)) + ("`" + (`Number` + "`")))) + (((` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts ` + ("`" + `value`)) + ("`" + (` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n", + "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts ` + "`"))) + ((`func` + ("`" + ` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n", + "/**\n * Creates a function that returns `)) + (("`" + `value`) + ("`" + `.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n", + "var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `)))))))) + ((((((("`" + (`lodash` + "`")) + (` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking ` + ("`" + `func`))) + (("`" + (` until after ` + "`")) + (`wait` + ("`" + `\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `)))) + ((("`" + (`cancel` + "`")) + (` method to cancel\n * delayed ` + ("`" + `func`))) + (("`" + (` invocations and a ` + "`")) + (`flush` + ("`" + ` method to immediately invoke them.\n * Provide `))))) + (((("`" + (`options` + "`")) + (` to indicate whether ` + ("`" + `func`))) + (("`" + (` should be invoked on the\n * leading and/or trailing edge of the ` + "`")) + (`wait` + ("`" + ` timeout. The `)))) + ((("`" + (`func` + "`")) + (` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last ` + ("`" + `func`))) + (("`" + (`\n * invocation.\n *\n * **Note:** If ` + "`")) + ((`leading` + "`") + (` and ` + "`")))))) + (((((`trailing` + ("`" + ` options are `)) + ("`" + (`true` + "`"))) + ((`, ` + ("`" + `func`)) + ("`" + (` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the ` + "`")))) + (((`wait` + ("`" + ` timeout.\n *\n * If `)) + ("`" + (`wait` + "`"))) + ((` is ` + ("`" + `0`)) + (("`" + ` and `) + ("`" + `leading`))))) + (((("`" + (` is ` + "`")) + (`false` + ("`" + `, `))) + (("`" + (`func` + "`")) + (` invocation is deferred\n * until to the next tick, similar to ` + ("`" + `setTimeout`)))) + ((("`" + (` with a timeout of ` + "`")) + (`0` + ("`" + `.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `))) + (("`" + (`_.debounce` + "`")) + ((` and ` + "`") + (`_.throttle` + "`"))))))) + ((((((`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time ` + ("`" + `func`)) + ("`" + (` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke ` + "`"))) + ((`sendMail` + ("`" + ` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `)) + ("`" + (`batchLog` + "`")))) + (((` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any ` + ("`" + `maxWait`)) + ("`" + (` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the ` + "`"))) + ((`maxWait` + ("`" + ` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `)) + (("`" + `lastArgs`) + ("`" + ` which means `))))) + (((("`" + (`func` + "`")) + (` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n", + "/**\n * Performs a\n * [` + ("`" + `SameValueZero`))) + (("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if the values are equivalent, else `)))) + ((("`" + (`false` + "`")) + (`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n", + "var arrayEvery = require('./_arrayEvery'),\n baseEvery = require('./_baseEvery'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if ` + ("`" + `predicate`))) + (("`" + (` returns truthy for **all** elements of ` + "`")) + ((`collection` + "`") + (`.\n * Iteration is stopped once ` + "`")))))) + (((((`predicate` + ("`" + ` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `)) + ("`" + (`true` + "`"))) + ((` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like ` + ("`" + `_.map`)) + ("`" + (`.\n * @returns {boolean} Returns ` + "`")))) + (((`true` + ("`" + ` if all elements pass the predicate check,\n * else `)) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The ` + ("`" + `_.matches`)) + (("`" + ` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `) + ("`" + `_.matchesProperty`))))) + (((("`" + (` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The ` + "`")) + (`_.property` + ("`" + ` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\nfunction every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = every;\n", + "var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `))) + (("`" + (`collection` + "`")) + (`, returning an array of all elements\n * ` + ("`" + `predicate`)))) + ((("`" + (` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike ` + "`")) + (`_.remove` + ("`" + `, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `))) + (("`" + (`_.matches` + "`")) + ((` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The ` + "`") + (`_.matchesProperty` + "`"))))))))) + ((((((((` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The ` + ("`" + `_.property`)) + ("`" + (` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n", + "var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of ` + "`"))) + ((`collection` + ("`" + `, returning the first element\n * `)) + ("`" + (`predicate` + "`")))) + (((` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else ` + ("`" + `undefined`)) + ("`" + (`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The ` + "`"))) + ((`_.matches` + ("`" + ` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `)) + ("`" + (`_.matchesProperty` + "`"))))) + ((((` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The ` + ("`" + `_.property`)) + ("`" + (` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n", + "var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other ` + "`"))) + ((`lodash` + ("`" + ` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `)) + ("`" + (`_.find` + "`")))) + (((` except that it returns the index of the first\n * element ` + ("`" + `predicate`)) + ("`" + (` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else ` + "`"))) + ((`-1` + ("`" + `.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `)) + (("`" + `_.matches`) + ("`" + ` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `)))))) + ((((("`" + (`_.matchesProperty` + "`")) + (` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The ` + ("`" + `_.property`))) + (("`" + (` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n", + "var baseFlatten = require('./_baseFlatten'),\n map = require('./map');\n\n/**\n * Creates a flattened array of values by running each element in ` + "`")) + (`collection` + ("`" + `\n * thru `)))) + ((("`" + (`iteratee` + "`")) + (` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n}\n\nmodule.exports = flatMap;\n", + "var baseGet = require('./_baseGet');\n\n/**\n * Gets the value at ` + ("`" + `path`))) + (("`" + (` of ` + "`")) + ((`object` + "`") + (`. If the resolved value is\n * ` + "`"))))) + ((((`undefined` + ("`" + `, the `)) + ("`" + (`defaultValue` + "`"))) + ((` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for ` + ("`" + `undefined`)) + ("`" + (` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", + "var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if ` + "`")))) + (((`path` + ("`" + ` is a direct or inherited property of `)) + ("`" + (`object` + "`"))) + ((`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + (("`" + ` if `) + ("`" + `path`))))))) + (((((("`" + (` exists, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n", + "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `))) + (("`" + (`value` + "`")) + (`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n", + "var arrayMap = require('./_arrayMap'),\n baseIntersection = require('./_baseIntersection'),\n baseRest = require('./_baseRest'),\n castArrayLikeObject = require('./_castArrayLikeObject');\n\n/**\n * Creates an array of unique values that are included in all given arrays\n * using [` + ("`" + `SameValueZero`)))) + ((("`" + (`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\nvar intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n});\n\nmodule.exports = intersection;\n", + "var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is likely an `))) + (("`" + (`arguments` + "`")) + (` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))))) + (((("`" + (` if ` + "`")) + (`value` + ("`" + ` is an `))) + (("`" + (`arguments` + "`")) + (` object,\n * else ` + ("`" + `false`)))) + ((("`" + (`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n", + "/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is classified as an `))) + (("`" + (`Array` + "`")) + ((` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + "`")))))) + (((((` if ` + ("`" + `value`)) + ("`" + (` is an array, else ` + "`"))) + ((`false` + ("`" + `.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", + "var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `)) + ("`" + (`value` + "`")))) + (((` is array-like. A value is considered array-like if it's\n * not a function and has a ` + ("`" + `value.length`)) + ("`" + (` that's an integer greater than or\n * equal to ` + "`"))) + ((`0` + ("`" + ` and less than or equal to `)) + (("`" + `Number.MAX_SAFE_INTEGER`) + ("`" + `.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `))))) + (((("`" + (`true` + "`")) + (` if ` + ("`" + `value`))) + (("`" + (` is array-like, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n", + "var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `)))) + ((("`" + (`_.isArrayLike` + "`")) + (` except that it also checks if ` + ("`" + `value`))) + (("`" + (`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if ` + "`")))))))) + (((((((`value` + ("`" + ` is an array-like object,\n * else `)) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n", + "var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable ` + ("`" + `exports`)) + ("`" + (`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable ` + "`")))) + (((`module` + ("`" + `. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `)) + ("`" + (`module.exports` + "`"))) + ((`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other ` + ("`" + `lodash`)) + ("`" + (` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if ` + "`"))))) + ((((`value` + ("`" + ` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + ("`" + (` is a buffer, else ` + "`")))) + (((`false` + ("`" + `.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n", + "var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `)) + ("`" + (`Object` + "`"))) + ((` objects, regexes,\n * sets, strings, symbols, and typed arrays. ` + ("`" + `Object`)) + (("`" + ` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `) + ("`" + `===`)))))) + ((((("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns ` + "`")) + (`true` + ("`" + ` if the values are equivalent, else `))) + (("`" + (`false` + "`")) + (`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** ` + ("`" + `Object#toString`)))) + ((("`" + (` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is classified as a `))) + (("`" + (`Function` + "`")) + ((` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`") + (`true` + "`"))))) + ((((` if ` + ("`" + `value`)) + ("`" + (` is a function, else ` + "`"))) + ((`false` + ("`" + `.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `)) + ("`" + (`Object#toString` + "`")))) + (((` avoids issues with the ` + ("`" + `typeof`)) + ("`" + (` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", + "/** Used as references for various ` + "`"))) + ((`Number` + ("`" + ` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `)) + (("`" + `value`) + ("`" + ` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`))))))) + (((((("`" + (`ToLength` + "`")) + (`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is a valid length, else `)))) + ((("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n", + "var isNumber = require('./isNumber');\n\n/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is ` + "`")) + ((`NaN` + "`") + (`.\n *\n * **Note:** This method is based on\n * [` + "`"))))) + ((((`Number.isNaN` + ("`" + `](https://mdn.io/Number/isNaN) and is not the same as\n * global [`)) + ("`" + (`isNaN` + "`"))) + ((`](https://mdn.io/isNaN) which returns ` + ("`" + `true`)) + ("`" + (` for\n * ` + "`")))) + (((`undefined` + ("`" + ` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `)) + ("`" + (`true` + "`"))) + ((` if ` + ("`" + `value`)) + (("`" + ` is `) + ("`" + `NaN`)))))) + ((((("`" + (`, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\nfunction isNaN(value) {\n // An `))) + (("`" + (`NaN` + "`")) + (` primitive is the only value that is not equal to itself.\n // Perform the ` + ("`" + `toStringTag`)))) + ((("`" + (` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n}\n\nmodule.exports = isNaN;\n", + "/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is `))) + (("`" + (`null` + "`")) + ((` or ` + "`") + (`undefined` + "`"))))) + ((((`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + ("`" + (` if ` + "`"))) + ((`value` + ("`" + ` is nullish, else `)) + ("`" + (`false` + "`")))) + (((`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\nfunction isNil(value) {\n return value == null;\n}\n\nmodule.exports = isNil;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + ("`" + `Object#toString`)) + ("`" + (` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if ` + "`"))) + ((`value` + ("`" + ` is classified as a `)) + (("`" + `Number`) + ("`" + ` primitive or object.\n *\n * **Note:** To exclude `))))))))))) + (((((((((("`" + (`Infinity` + "`")) + (`, ` + ("`" + `-Infinity`))) + (("`" + (`, and ` + "`")) + (`NaN` + ("`" + `, which are\n * classified as numbers, use the `)))) + ((("`" + (`_.isFinite` + "`")) + (` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is a number, else `))))) + (((("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n", + "/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of ` + "`")) + (`Object` + ("`" + `. (e.g. arrays, functions, objects, regexes, `)))) + ((("`" + (`new Number(0)` + "`")) + (`, and ` + ("`" + `new String('')`))) + (("`" + (`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if ` + "`")))))) + (((((`value` + ("`" + ` is an object, else `)) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", + "/**\n * Checks if ` + ("`" + `value`)) + ("`" + (` is object-like. A value is object-like if it's not ` + "`")))) + (((`null` + ("`" + `\n * and has a `)) + ("`" + (`typeof` + "`"))) + ((` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`)) + (("`" + ` if `) + ("`" + `value`))))) + (((("`" + (` is object-like, else ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", + "var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `))) + (("`" + (`Object#toString` + "`")) + (` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the ` + ("`" + `Object`)))) + ((("`" + (` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if ` + "`")) + (`value` + ("`" + ` is a plain object, that is, an object created by the\n * `))) + (("`" + (`Object` + "`")) + ((` constructor or one with a ` + "`") + (`[[Prototype]]` + "`"))))))) + ((((((` of ` + ("`" + `null`)) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + ("`" + (`value` + "`")))) + (((` is a plain object, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n", + "var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + "`"))) + ((`Object#toString` + ("`" + ` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `)) + ("`" + (`value` + "`"))))) + ((((` is classified as a ` + ("`" + `String`)) + ("`" + (` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`"))) + ((`true` + ("`" + ` if `)) + ("`" + (`value` + "`")))) + (((` is a string, else ` + ("`" + `false`)) + ("`" + (`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n", + "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** ` + "`"))) + ((`Object#toString` + ("`" + ` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `)) + (("`" + `value`) + ("`" + ` is classified as a `)))))) + ((((("`" + (`Symbol` + "`")) + (` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + ("`" + `true`))) + (("`" + (` if ` + "`")) + (`value` + ("`" + ` is a symbol, else `)))) + ((("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", + "var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if ` + ("`" + `value`))) + (("`" + (` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns ` + "`")) + ((`true` + "`") + (` if ` + "`"))))) + ((((`value` + ("`" + ` is a typed array, else `)) + ("`" + (`false` + "`"))) + ((`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n", + "var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of ` + ("`" + `object`)) + ("`" + (`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n", + "/**\n * Gets the last element of ` + "`")))) + (((`array` + ("`" + `.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `)) + ("`" + (`array` + "`"))) + ((`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n", + "var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n baseMap = require('./_baseMap'),\n isArray = require('./isArray');\n\n/**\n * Creates an array of values by running each element in ` + ("`" + `collection`)) + (("`" + ` thru\n * `) + ("`" + `iteratee`)))))))) + ((((((("`" + (`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * ` + "`")) + (`_.every` + ("`" + `, `))) + (("`" + (`_.filter` + "`")) + (`, ` + ("`" + `_.map`)))) + ((("`" + (`, ` + "`")) + (`_.mapValues` + ("`" + `, `))) + (("`" + (`_.reject` + "`")) + (`, and ` + ("`" + `_.some`))))) + (((("`" + (`.\n *\n * The guarded methods are:\n * ` + "`")) + (`ary` + ("`" + `, `))) + (("`" + (`chunk` + "`")) + (`, ` + ("`" + `curry`)))) + ((("`" + (`, ` + "`")) + (`curryRight` + ("`" + `, `))) + (("`" + (`drop` + "`")) + ((`, ` + "`") + (`dropRight` + "`")))))) + (((((`, ` + ("`" + `every`)) + ("`" + (`,\n * ` + "`"))) + ((`fill` + ("`" + `, `)) + ("`" + (`invert` + "`")))) + (((`, ` + ("`" + `parseInt`)) + ("`" + (`, ` + "`"))) + ((`random` + ("`" + `, `)) + (("`" + `range`) + ("`" + `, `))))) + (((("`" + (`rangeRight` + "`")) + (`, ` + ("`" + `repeat`))) + (("`" + (`,\n * ` + "`")) + (`sampleSize` + ("`" + `, `)))) + ((("`" + (`slice` + "`")) + (`, ` + ("`" + `some`))) + (("`" + (`, ` + "`")) + ((`sortBy` + "`") + (`, ` + "`"))))))) + ((((((`split` + ("`" + `, `)) + ("`" + (`take` + "`"))) + ((`, ` + ("`" + `takeRight`)) + ("`" + (`,\n * ` + "`")))) + (((`template` + ("`" + `, `)) + ("`" + (`trim` + "`"))) + ((`, ` + ("`" + `trimEnd`)) + (("`" + `, `) + ("`" + `trimStart`))))) + (((("`" + (`, and ` + "`")) + (`words` + ("`" + `\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `))) + (("`" + (`_.property` + "`")) + (` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nmodule.exports = map;\n", + "var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as ` + ("`" + `object`)))) + ((("`" + (` and values generated\n * by running each own enumerable string keyed property of ` + "`")) + (`object` + ("`" + ` thru\n * `))) + (("`" + (`iteratee` + "`")) + ((`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The ` + "`") + (`_.property` + "`")))))) + (((((` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n", + "var baseExtremum = require('./_baseExtremum'),\n baseGt = require('./_baseGt'),\n identity = require('./identity');\n\n/**\n * Computes the maximum value of ` + ("`" + `array`)) + ("`" + (`. If ` + "`"))) + ((`array` + ("`" + ` is empty or falsey,\n * `)) + ("`" + (`undefined` + "`")))) + (((` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nmodule.exports = max;\n", + "var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of ` + ("`" + `func`)) + ("`" + (`. If ` + "`"))) + ((`resolver` + ("`" + ` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `)) + (("`" + `func`) + ("`" + `\n * is invoked with the `))))) + (((("`" + (`this` + "`")) + (` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the ` + ("`" + `cache`))) + (("`" + (` property on the memoized\n * function. Its creation may be customized by replacing the ` + "`")) + (`_.memoize.Cache` + ("`" + `\n * constructor with one whose instances implement the\n * [`)))) + ((("`" + (`Map` + "`")) + (`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of ` + ("`" + `clear`))) + (("`" + (`, ` + "`")) + ((`delete` + "`") + (`, ` + "`"))))))))) + ((((((((`get` + ("`" + `, `)) + ("`" + (`has` + "`"))) + ((`, and ` + ("`" + `set`)) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace ` + "`")))) + (((`_.memoize.Cache` + ("`" + `.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `)) + ("`" + (`MapCache` + "`"))) + ((`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n", + "var baseExtremum = require('./_baseExtremum'),\n baseLt = require('./_baseLt'),\n identity = require('./identity');\n\n/**\n * Computes the minimum value of ` + ("`" + `array`)) + ("`" + (`. If ` + "`"))))) + ((((`array` + ("`" + ` is empty or falsey,\n * `)) + ("`" + (`undefined` + "`"))) + ((` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nmodule.exports = min;\n", + "/**\n * This method returns ` + ("`" + `undefined`)) + ("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = noop;\n", + "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n", + "var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\n\n/**\n * Creates a function that returns the value at ` + "`")))) + (((`path` + ("`" + ` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = property;\n", + "var createRange = require('./_createRange');\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `)) + ("`" + (`start` + "`"))) + ((` up to, but not including, ` + ("`" + `end`)) + (("`" + `. A step of `) + ("`" + `-1`)))))) + ((((("`" + (` is used if a negative\n * ` + "`")) + (`start` + ("`" + ` is specified without an `))) + (("`" + (`end` + "`")) + (` or ` + ("`" + `step`)))) + ((("`" + (`. If ` + "`")) + (`end` + ("`" + ` is not specified,\n * it's set to `))) + (("`" + (`start` + "`")) + ((` with ` + "`") + (`start` + "`"))))) + ((((` then set to ` + ("`" + `0`)) + ("`" + (`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nmodule.exports = range;\n", + "var arraySome = require('./_arraySome'),\n baseIteratee = require('./_baseIteratee'),\n baseSome = require('./_baseSome'),\n isArray = require('./isArray'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Checks if ` + "`"))) + ((`predicate` + ("`" + ` returns truthy for **any** element of `)) + ("`" + (`collection` + "`")))) + (((`.\n * Iteration is stopped once ` + ("`" + `predicate`)) + ("`" + (` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like ` + "`"))) + ((`_.map` + ("`" + `.\n * @returns {boolean} Returns `)) + (("`" + `true`) + ("`" + ` if any element passes the predicate check,\n * else `))))))) + (((((("`" + (`false` + "`")) + (`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The ` + ("`" + `_.matches`))) + (("`" + (` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The ` + "`")) + (`_.matchesProperty` + ("`" + ` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `)))) + ((("`" + (`_.property` + "`")) + (` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = some;\n", + "var baseFlatten = require('./_baseFlatten'),\n baseOrderBy = require('./_baseOrderBy'),\n baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nmodule.exports = sortBy;\n", + "/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n", + "/**\n * This method returns ` + ("`" + `false`))) + (("`" + (`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns ` + "`")) + (`false` + ("`" + `.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n", + "var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `))))) + (((("`" + (`func` + "`")) + (` at most once per\n * every ` + ("`" + `wait`))) + (("`" + (` milliseconds. The throttled function comes with a ` + "`")) + (`cancel` + ("`" + `\n * method to cancel delayed `)))) + ((("`" + (`func` + "`")) + (` invocations and a ` + ("`" + `flush`))) + (("`" + (` method to\n * immediately invoke them. Provide ` + "`")) + ((`options` + "`") + (` to indicate whether ` + "`")))))) + (((((`func` + ("`" + `\n * should be invoked on the leading and/or trailing edge of the `)) + ("`" + (`wait` + "`"))) + ((`\n * timeout. The ` + ("`" + `func`)) + ("`" + (` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last ` + "`")))) + (((`func` + ("`" + ` invocation.\n *\n * **Note:** If `)) + ("`" + (`leading` + "`"))) + ((` and ` + ("`" + `trailing`)) + (("`" + ` options are `) + ("`" + `true`))))) + (((("`" + (`, ` + "`")) + (`func` + ("`" + ` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `))) + (("`" + (`wait` + "`")) + (` timeout.\n *\n * If ` + ("`" + `wait`)))) + ((("`" + (` is ` + "`")) + (`0` + ("`" + ` and `))) + (("`" + (`leading` + "`")) + ((` is ` + "`") + (`false` + "`")))))))) + (((((((`, ` + ("`" + `func`)) + ("`" + (` invocation is deferred\n * until to the next tick, similar to ` + "`"))) + ((`setTimeout` + ("`" + ` with a timeout of `)) + ("`" + (`0` + "`")))) + (((`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between ` + ("`" + `_.throttle`)) + ("`" + (` and ` + "`"))) + ((`_.debounce` + ("`" + `.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `)) + ("`" + (`renewToken` + "`"))))) + ((((` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n", + "var toNumber = require('./toNumber');\n\n/** Used as references for various ` + ("`" + `Number`)) + ("`" + (` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts ` + "`"))) + ((`value` + ("`" + ` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n", + "var toFinite = require('./toFinite');\n\n/**\n * Converts `)) + ("`" + (`value` + "`")))) + (((` to an integer.\n *\n * **Note:** This method is loosely based on\n * [` + ("`" + `ToInteger`)) + ("`" + (`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n", + "var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various ` + "`"))) + ((`Number` + ("`" + ` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `)) + (("`" + `root`) + ("`" + `. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `)))))) + ((((("`" + (`value` + "`")) + (` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", + "var baseToString = require('./_baseToString');\n\n/**\n * Converts ` + ("`" + `value`))) + (("`" + (` to a string. An empty string is returned for ` + "`")) + (`null` + ("`" + `\n * and `)))) + ((("`" + (`undefined` + "`")) + (` values. The sign of ` + ("`" + `-0`))) + (("`" + (` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n", + "var baseIteratee = require('./_baseIteratee'),\n baseUniq = require('./_baseUniq');\n\n/**\n * This method is like ` + "`")) + ((`_.uniq` + "`") + (` except that it accepts ` + "`"))))) + ((((`iteratee` + ("`" + ` which is\n * invoked for each element in `)) + ("`" + (`array` + "`"))) + ((` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The ` + ("`" + `_.property`)) + ("`" + (` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n}\n\nmodule.exports = uniqBy;\n", + "var Mexp=require('./postfix_evaluator.js');\r\nMexp.prototype.formulaEval = function () {\r\n\t\"use strict\";\r\n\tvar stack=[],pop1,pop2,pop3;\r\n\tvar disp=[];\r\n\tvar temp='';\r\n\tvar arr=this.value;\r\n\tfor(var i=0;i\"+pop2.value+\"\"+arr[i].show+\"\"+pop1.value+\"\",type:10});\r\n\t\t\telse disp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+\"\"+pop1.value+\"\",type:1});\r\n\t\t}\r\n\t\telse if(arr[i].type===2||arr[i].type===9){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tdisp.push({value:(pop2.type!=1?\"(\":\"\")+pop2.value+(pop2.type!=1?\")\":\"\")+arr[i].show+(pop1.type!=1?\"(\":\"\")+pop1.value+(pop1.type!=1?\")\":\"\"),type:arr[i].type});\r\n\t\t}\r\n\t\telse if(arr[i].type===12){\r\n\t\t\tpop1=disp.pop();\r\n\t\t\tpop2=disp.pop();\r\n\t\t\tpop3=disp.pop();\r\n\t\t\tdisp.push({value:arr[i].show+\"(\"+pop3.value+\",\"+pop2.value+\",\"+pop1.value+\")\",type:12});\r\n\t\t}\r\n\t}\r\n\treturn disp[0].value;\r\n};\r\nmodule.exports=Mexp;", + "var Mexp=require('./math_function.js');\r\n\tfunction inc(arr,val){\r\n\t\tfor(var i=0;i(newAr.length-2)?newAr.length-1:inpStr.length-i);x>0;x--){\r\n\t\t\t\tfor(y=0;yprep)stack.push(elem);\r\n\t\t\t\telse {\r\n\t\t\t\t\twhile(prep>=pre&&!flag||flag&&pre1) {\r\n\t\tthrow(new Mexp.exception(\"Uncaught Syntax error\"));\r\n\t}\r\n\treturn stack[0].value>1000000000000000?\"Infinity\":parseFloat(stack[0].value.toFixed(15));\r\n};\r\nMexp.eval=function(str,tokens,obj){\r\n\tif (typeof tokens===\"undefined\") {\r\n\t\treturn this.lex(str).toPostfix().postfixEval();\r\n\t}\r\n\telse if (typeof obj===\"undefined\") {\r\n\t\tif (typeof tokens.length!==\"undefined\") \r\n\t\t\treturn this.lex(str,tokens).toPostfix().postfixEval();\r\n\t\telse\r\n\t\t\treturn this.lex(str).toPostfix().postfixEval(tokens);\r\n\t}\r\n\telse\r\n\t\treturn this.lex(str,tokens).toPostfix().postfixEval(obj);\r\n};\r\nmodule.exports=Mexp;", + "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", + "// Generated by CoffeeScript 1.12.2\n(function() {\n var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;\n\n if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n module.exports = function() {\n return performance.now();\n };\n } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n module.exports = function() {\n return (getNanoSeconds() - nodeLoadTime) / 1e6;\n };\n hrtime = process.hrtime;\n getNanoSeconds = function() {\n var hr;\n hr = hrtime();\n return hr[0] * 1e9 + hr[1];\n };\n moduleLoadTime = getNanoSeconds();\n upTime = process.uptime() * 1e9;\n nodeLoadTime = moduleLoadTime - upTime;\n } else if (Date.now) {\n module.exports = function() {\n return Date.now() - loadTime;\n };\n loadTime = Date.now();\n } else {\n module.exports = function() {\n return new Date().getTime() - loadTime;\n };\n loadTime = new Date().getTime();\n }\n\n}).call(this);\n\n//# sourceMappingURL=performance-now.js.map\n", + "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the ` + "`")))) + (((`prop-types` + ("`" + ` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `)) + ("`" + (`./factoryWithTypeCheckers.js` + "`"))) + ((`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using ` + ("`" + `prop-types`)) + (("`" + ` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `) + ("`" + `prop-types`))))))) + (((((("`" + (` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n", + "var now = require('performance-now')\n , root = typeof window === 'undefined' ? global : window\n , vendors = ['moz', 'webkit']\n , suffix = 'AnimationFrame'\n , raf = root['request' + suffix]\n , caf = root['cancel' + suffix] || root['cancelRequest' + suffix]\n\nfor(var i = 0; !raf && i < vendors.length; i++) {\n raf = root[vendors[i] + 'Request' + suffix]\n caf = root[vendors[i] + 'Cancel' + suffix]\n || root[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n var last = 0\n , id = 0\n , queue = []\n , frameDuration = 1000 / 60\n\n raf = function(callback) {\n if(queue.length === 0) {\n var _now = now()\n , next = Math.max(0, frameDuration - (_now - last))\n last = next + _now\n setTimeout(function() {\n var cp = queue.slice(0)\n // Clear queue here to prevent\n // callbacks from appending listeners\n // to the current frame's queue\n queue.length = 0\n for(var i = 0; i < cp.length; i++) {\n if(!cp[i].cancelled) {\n try{\n cp[i].callback(last)\n } catch(e) {\n setTimeout(function() { throw e }, 0)\n }\n }\n }\n }, Math.round(next))\n }\n queue.push({\n handle: ++id,\n callback: callback,\n cancelled: false\n })\n return id\n }\n\n caf = function(handle) {\n for(var i = 0; i < queue.length; i++) {\n if(queue[i].handle === handle) {\n queue[i].cancelled = true\n }\n }\n }\n}\n\nmodule.exports = function(fn) {\n // Wrap in a new function to prevent\n // ` + "`")) + (`cancel` + ("`" + ` potentially being assigned\n // to the native rAF function\n return raf.call(root, fn)\n}\nmodule.exports.cancel = function() {\n caf.apply(root, arguments)\n}\nmodule.exports.polyfill = function(object) {\n if (!object) {\n object = root;\n }\n object.requestAnimationFrame = raf\n object.cancelAnimationFrame = caf\n}\n", + "/** @license React v16.8.4\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function ba(a,b,c,d,e,f,g,h){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[c,d,e,f,g,h],k=0;a=Error(b.replace(/%s/g,function(){return l[k++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction x(a){for(var b=arguments.length-1,c=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,d=0;dthis.eventPool.length&&this.eventPool.push(a)}\nfunction hb(a){a.eventPool=[];a.getPooled=ib;a.release=jb}var kb=y.extend({data:null}),lb=y.extend({data:null}),mb=[9,13,27,32],nb=Ra&&\"CompositionEvent\"in window,ob=null;Ra&&\"documentMode\"in document&&(ob=document.documentMode);\nvar pb=Ra&&\"TextEvent\"in window&&!ob,qb=Ra&&(!nb||ob&&8=ob),rb=String.fromCharCode(32),sb={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},tb=!1;\nfunction ub(a,b){switch(a){case \"keyup\":return-1!==mb.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function vb(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var wb=!1;function xb(a,b){switch(a){case \"compositionend\":return vb(b);case \"keypress\":if(32!==b.which)return null;tb=!0;return rb;case \"textInput\":return a=b.data,a===rb&&tb?null:a;default:return null}}\nfunction yb(a,b){if(wb)return\"compositionend\"===a||!nb&&ub(a,b)?(a=eb(),db=cb=bb=null,wb=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1b}return!1}function C(a,b,c,d,e){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new C(a,0,!1,a,null)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new C(b,1,!1,a[1],null)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new C(a,2,!1,a.toLowerCase(),null)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new C(a,2,!1,a,null)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new C(a,3,!1,a.toLowerCase(),null)});[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new C(a,3,!0,a,null)});\n[\"capture\",\"download\"].forEach(function(a){D[a]=new C(a,4,!1,a,null)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new C(a,6,!1,a,null)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new C(a,5,!1,a.toLowerCase(),null)});var rc=/[\\-:]([a-z])/g;function sc(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(rc,\nsc);D[b]=new C(b,1,!1,a,null)});\"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/1999/xlink\")});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(rc,sc);D[b]=new C(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\")});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new C(a,1,!1,a.toLowerCase(),null)});\nfunction tc(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2zd.length&&zd.push(a)}}}var Fd={},Gd=0,Hd=\"_reactListenersID\"+(\"\"+Math.random()).slice(2);\nfunction Id(a){Object.prototype.hasOwnProperty.call(a,Hd)||(a[Hd]=Gd++,Fd[a[Hd]]={});return Fd[a[Hd]]}function Jd(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function Kd(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ld(a,b){var c=Kd(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Kd(c)}}function Md(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Md(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Nd(){for(var a=window,b=Jd();b instanceof a.HTMLIFrameElement;){try{a=b.contentDocument.defaultView}catch(c){break}b=Jd(a.document)}return b}function Od(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Pd(){var a=Nd();if(Od(a)){if(\"selectionStart\"in a)var b={start:a.selectionStart,end:a.selectionEnd};else a:{b=(b=a.ownerDocument)&&b.defaultView||window;var c=b.getSelection&&b.getSelection();if(c&&0!==c.rangeCount){b=c.anchorNode;var d=c.anchorOffset,e=c.focusNode;c=c.focusOffset;try{b.nodeType,e.nodeType}catch(A){b=null;break a}var f=0,g=-1,h=-1,l=0,k=0,m=a,p=null;b:for(;;){for(var t;;){m!==b||0!==d&&3!==m.nodeType||(g=f+d);m!==e||0!==c&&3!==m.nodeType||(h=f+c);3===m.nodeType&&(f+=m.nodeValue.length);\nif(null===(t=m.firstChild))break;p=m;m=t}for(;;){if(m===a)break b;p===b&&++l===d&&(g=f);p===e&&++k===c&&(h=f);if(null!==(t=m.nextSibling))break;m=p;p=m.parentNode}m=t}b=-1===g||-1===h?null:{start:g,end:h}}else b=null}b=b||{start:0,end:0}}else b=null;return{focusedElem:a,selectionRange:b}}\nfunction Qd(a){var b=Nd(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Md(c.ownerDocument.documentElement,c)){if(null!==d&&Od(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ld(c,f);var g=Ld(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Sd={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},Td=null,Ud=null,Vd=null,Wd=!1;\nfunction Xd(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(Wd||null==Td||Td!==Jd(c))return null;c=Td;\"selectionStart\"in c&&Od(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return Vd&&dd(Vd,c)?null:(Vd=c,a=y.getPooled(Sd.select,Ud,a,b),a.type=\"select\",a.target=Td,Qa(a),a)}\nvar Yd={eventTypes:Sd,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument,f;if(!(f=!e)){a:{e=Id(e);f=sa.onSelect;for(var g=0;g=b.length?void 0:x(\"93\"),b=b[0]),c=b),null==c&&(c=\"\"));a._wrapperState={initialValue:uc(c)}}\nfunction de(a,b){var c=uc(b.value),d=uc(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function ee(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)}var fe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction ge(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function he(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?ge(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar ie=void 0,je=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==fe.svg||\"innerHTML\"in a)a.innerHTML=b;else{ie=ie||document.createElement(\"div\");ie.innerHTML=\"\"+b+\"\";for(b=ie.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ke(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(le).forEach(function(a){me.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);le[b]=le[a]})});function ne(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||le.hasOwnProperty(a)&&le[a]?(\"\"+b).trim():b+\"px\"}\nfunction oe(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ne(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var pe=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction qe(a,b){b&&(pe[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?x(\"137\",a,\"\"):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?x(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:x(\"61\")),null!=b.style&&\"object\"!==typeof b.style?x(\"62\",\"\"):void 0)}\nfunction re(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nfunction se(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Id(a);b=sa[b];for(var d=0;dGe||(a.current=Fe[Ge],Fe[Ge]=null,Ge--)}function G(a,b){Ge++;Fe[Ge]=a.current;a.current=b}var He={},H={current:He},I={current:!1},Ie=He;\nfunction Je(a,b){var c=a.type.contextTypes;if(!c)return He;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function J(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Ke(a){F(I,a);F(H,a)}function Le(a){F(I,a);F(H,a)}\nfunction Me(a,b,c){H.current!==He?x(\"168\"):void 0;G(H,b,a);G(I,c,a)}function Ne(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)e in a?void 0:x(\"108\",ic(b)||\"Unknown\",e);return n({},c,d)}function Oe(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||He;Ie=H.current;G(H,b,a);G(I,I.current,a);return!0}\nfunction Pe(a,b,c){var d=a.stateNode;d?void 0:x(\"169\");c?(b=Ne(a,b,Ie),d.__reactInternalMemoizedMergedChildContext=b,F(I,a),F(H,a),G(H,b,a)):F(I,a);G(I,c,a)}var Qe=null,Re=null;function Se(a){return function(b){try{return a(b)}catch(c){}}}\nfunction Te(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Qe=Se(function(a){return b.onCommitFiberRoot(c,a)});Re=Se(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0}\nfunction Ue(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function K(a,b,c,d){return new Ue(a,b,c,d)}\nfunction Ve(a){a=a.prototype;return!(!a||!a.isReactComponent)}function We(a){if(\"function\"===typeof a)return Ve(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===cc)return 11;if(a===ec)return 14}return 2}\nfunction Xe(a,b){var c=a.alternate;null===c?(c=K(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;c.contextDependencies=a.contextDependencies;c.sibling=a.sibling;\nc.index=a.index;c.ref=a.ref;return c}\nfunction Ye(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)Ve(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case Xb:return Ze(c.children,e,f,b);case bc:return $e(c,e|3,f,b);case Yb:return $e(c,e|2,f,b);case Zb:return a=K(12,c,b,e|4),a.elementType=Zb,a.type=Zb,a.expirationTime=f,a;case dc:return a=K(13,c,b,e),a.elementType=dc,a.type=dc,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case $b:g=10;break a;case ac:g=9;break a;case cc:g=11;break a;case ec:g=\n14;break a;case fc:g=16;d=null;break a}x(\"130\",null==a?a:typeof a,\"\")}b=K(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Ze(a,b,c,d){a=K(7,a,d,b);a.expirationTime=c;return a}function $e(a,b,c,d){a=K(8,a,d,b);b=0===(b&1)?Yb:bc;a.elementType=b;a.type=b;a.expirationTime=c;return a}function af(a,b,c){a=K(6,a,null,b);a.expirationTime=c;return a}\nfunction bf(a,b,c){b=K(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function cf(a,b){a.didError=!1;var c=a.earliestPendingTime;0===c?a.earliestPendingTime=a.latestPendingTime=b:cb&&(a.latestPendingTime=b);df(b,a)}\nfunction ef(a,b){a.didError=!1;if(0===b)a.earliestPendingTime=0,a.latestPendingTime=0,a.earliestSuspendedTime=0,a.latestSuspendedTime=0,a.latestPingedTime=0;else{bb?a.earliestPendingTime=a.latestPendingTime=0:a.earliestPendingTime>b&&(a.earliestPendingTime=a.latestPendingTime));c=a.earliestSuspendedTime;0===c?cf(a,b):bc&&cf(a,b)}df(0,a)}function ff(a,b){a.didError=!1;a.latestPingedTime>=b&&(a.latestPingedTime=0);var c=a.earliestPendingTime,d=a.latestPendingTime;c===b?a.earliestPendingTime=d===b?a.latestPendingTime=0:d:d===b&&(a.latestPendingTime=c);c=a.earliestSuspendedTime;d=a.latestSuspendedTime;0===c?a.earliestSuspendedTime=a.latestSuspendedTime=b:cb&&(a.latestSuspendedTime=b);df(b,a)}\nfunction gf(a,b){var c=a.earliestPendingTime;a=a.earliestSuspendedTime;c>b&&(b=c);a>b&&(b=a);return b}function df(a,b){var c=b.earliestSuspendedTime,d=b.latestSuspendedTime,e=b.earliestPendingTime,f=b.latestPingedTime;e=0!==e?e:f;0===e&&(0===a||da&&(a=c);b.nextExpirationTimeToWorkOn=e;b.expirationTime=a}function L(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}\nfunction hf(a){var b=a._result;switch(a._status){case 1:return b;case 2:throw b;case 0:throw b;default:a._status=0;b=a._ctor;b=b();b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)});switch(a._status){case 1:return a._result;case 2:throw a._result;}a._result=b;throw b;}}var jf=(new aa.Component).refs;\nfunction kf(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}\nvar tf={isMounted:function(a){return(a=a._reactInternalFiber)?2===ed(a):!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=lf();d=mf(d,a);var e=nf(d);e.tag=rf;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);of();pf(a,e);qf(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=lf();c=mf(c,a);var d=nf(c);d.tag=\nsf;void 0!==b&&null!==b&&(d.callback=b);of();pf(a,d);qf(a,c)}};function uf(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!dd(c,d)||!dd(e,f):!0}\nfunction vf(a,b,c){var d=!1,e=He;var f=b.contextType;\"object\"===typeof f&&null!==f?f=M(f):(e=J(b)?Ie:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Je(a,e):He);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=tf;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction wf(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&tf.enqueueReplaceState(b,b.state,null)}\nfunction xf(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jf;var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=M(f):(f=J(b)?Ie:H.current,e.context=Je(a,f));f=a.updateQueue;null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kf(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==\ntypeof e.componentWillMount||(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&tf.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(yf(a,f,c,e,d),e.state=a.memoizedState));\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var zf=Array.isArray;\nfunction Af(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;var d=void 0;c&&(1!==c.tag?x(\"309\"):void 0,d=c.stateNode);d?void 0:x(\"147\",a);var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===jf&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}\"string\"!==typeof a?x(\"284\"):void 0;c._owner?void 0:x(\"290\",a)}return a}\nfunction Bf(a,b){\"textarea\"!==a.type&&x(\"31\",\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\")}\nfunction Cf(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=Xe(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,du?(B=q,q=null):B=q.sibling;var w=t(e,q,h[u],k);if(null===w){null===q&&(q=B);break}a&&\nq&&null===w.alternate&&b(e,q);g=f(w,g,u);null===m?l=w:m.sibling=w;m=w;q=B}if(u===h.length)return c(e,q),l;if(null===q){for(;uu?(B=q,q=null):B=q.sibling;var v=t(e,q,w.value,k);if(null===v){q||(q=B);break}a&&q&&null===v.alternate&&b(e,q);g=f(v,g,u);null===m?l=v:m.sibling=v;m=v;q=B}if(w.done)return c(e,q),l;if(null===q){for(;!w.done;u++,w=h.next())w=p(e,w.value,k),null!==w&&(g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);return l}for(q=d(e,q);!w.done;u++,w=h.next())w=A(q,e,u,w.value,k),null!==w&&(a&&null!==w.alternate&&q.delete(null===w.key?u:\nw.key),g=f(w,g,u),null===m?l=w:m.sibling=w,m=w);a&&q.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===Xb&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Vb:a:{l=f.key;for(k=d;null!==k;){if(k.key===l)if(7===k.tag?f.type===Xb:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===Xb?f.props.children:f.props,h);d.ref=Af(a,k,f);d.return=a;a=d;break a}else{c(a,k);break}else b(a,k);k=\nk.sibling}f.type===Xb?(d=Ze(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ye(f.type,f.key,f.props,null,a.mode,h),h.ref=Af(a,d,f),h.return=a,a=h)}return g(a);case Wb:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=bf(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\n\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=af(f,a.mode,h),d.return=a,a=d),g(a);if(zf(f))return v(a,d,f,h);if(hc(f))return R(a,d,f,h);l&&Bf(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:h=a.type,x(\"152\",h.displayName||h.name||\"Component\")}return c(a,d)}}var Df=Cf(!0),Ef=Cf(!1),Ff={},N={current:Ff},Gf={current:Ff},Hf={current:Ff};function If(a){a===Ff?x(\"174\"):void 0;return a}\nfunction Jf(a,b){G(Hf,b,a);G(Gf,a,a);G(N,Ff,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:he(null,\"\");break;default:c=8===c?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=he(b,c)}F(N,a);G(N,b,a)}function Kf(a){F(N,a);F(Gf,a);F(Hf,a)}function Lf(a){If(Hf.current);var b=If(N.current);var c=he(b,a.type);b!==c&&(G(Gf,a,a),G(N,c,a))}function Mf(a){Gf.current===a&&(F(N,a),F(Gf,a))}\nvar Nf=0,Of=2,Pf=4,Qf=8,Rf=16,Sf=32,Tf=64,Uf=128,Vf=Tb.ReactCurrentDispatcher,Wf=0,Xf=null,O=null,P=null,Yf=null,Q=null,Zf=null,$f=0,ag=null,bg=0,cg=!1,dg=null,eg=0;function fg(){x(\"307\")}function gg(a,b){if(null===b)return!1;for(var c=0;c$f&&($f=m)):f=l.eagerReducer===a?l.eagerState:a(f,l.action);g=l;l=l.next}while(null!==l&&l!==d);k||(h=g,e=f);bd(f,b.memoizedState)||(qg=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.eagerReducer=a;c.eagerState=f}return[b.memoizedState,c.dispatch]}\nfunction rg(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};null===ag?(ag={lastEffect:null},ag.lastEffect=a.next=a):(b=ag.lastEffect,null===b?ag.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,ag.lastEffect=a));return a}function sg(a,b,c,d){var e=mg();bg|=a;e.memoizedState=rg(b,c,void 0,void 0===d?null:d)}\nfunction tg(a,b,c,d){var e=ng();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&gg(d,g.deps)){rg(Nf,c,f,d);return}}bg|=a;e.memoizedState=rg(b,c,f,d)}function ug(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function vg(){}\nfunction wg(a,b,c){25>eg?void 0:x(\"301\");var d=a.alternate;if(a===Xf||null!==d&&d===Xf)if(cg=!0,a={expirationTime:Wf,action:c,eagerReducer:null,eagerState:null,next:null},null===dg&&(dg=new Map),c=dg.get(b),void 0===c)dg.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{of();var e=lf();e=mf(e,a);var f={expirationTime:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===\nd||0===d.expirationTime)&&(d=b.eagerReducer,null!==d))try{var l=b.eagerState,k=d(l,c);f.eagerReducer=d;f.eagerState=k;if(bd(k,l))return}catch(m){}finally{}qf(a,e)}}\nvar kg={readContext:M,useCallback:fg,useContext:fg,useEffect:fg,useImperativeHandle:fg,useLayoutEffect:fg,useMemo:fg,useReducer:fg,useRef:fg,useState:fg,useDebugValue:fg},ig={readContext:M,useCallback:function(a,b){mg().memoizedState=[a,void 0===b?null:b];return a},useContext:M,useEffect:function(a,b){return sg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return sg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return sg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=mg();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=mg();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,eagerReducer:a,eagerState:b};a=a.dispatch=wg.bind(null,Xf,a);return[d.memoizedState,a]},useRef:function(a){var b=mg();a={current:a};return b.memoizedState=a},useState:function(a){var b=mg();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,eagerReducer:og,\neagerState:a};a=a.dispatch=wg.bind(null,Xf,a);return[b.memoizedState,a]},useDebugValue:vg},jg={readContext:M,useCallback:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:M,useEffect:function(a,b){return tg(516,Uf|Tf,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return tg(4,Pf|Sf,ug.bind(null,b,a),c)},useLayoutEffect:function(a,b){return tg(4,Pf|Sf,a,b)},\nuseMemo:function(a,b){var c=ng();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&gg(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:pg,useRef:function(){return ng().memoizedState},useState:function(a){return pg(og,a)},useDebugValue:vg},xg=null,yg=null,zg=!1;\nfunction Ag(a,b){var c=K(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function Bg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Cg(a){if(zg){var b=yg;if(b){var c=b;if(!Bg(a,b)){b=De(c);if(!b||!Bg(a,b)){a.effectTag|=2;zg=!1;xg=a;return}Ag(xg,c)}xg=a;yg=Ee(b)}else a.effectTag|=2,zg=!1,xg=a}}function Dg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&18!==a.tag;)a=a.return;xg=a}function Eg(a){if(a!==xg)return!1;if(!zg)return Dg(a),zg=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!xe(b,a.memoizedProps))for(b=yg;b;)Ag(a,b),b=De(b);Dg(a);yg=xg?De(a.stateNode):null;return!0}function Fg(){yg=xg=null;zg=!1}\nvar Gg=Tb.ReactCurrentOwner,qg=!1;function S(a,b,c,d){b.child=null===a?Ef(b,null,c,d):Df(b,a.child,c,d)}function Hg(a,b,c,d,e){c=c.render;var f=b.ref;Ig(b,e);d=hg(a,b,c,d,f,e);if(null!==a&&!qg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),Jg(a,b,e);b.effectTag|=1;S(a,b,d,e);return b.child}\nfunction Kg(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!Ve(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Lg(a,b,g,d,e,f);a=Ye(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e=c)return Sg(a,b,c);b=Jg(a,b,c);return null!==b?b.sibling:null}}return Jg(a,b,c)}}else qg=!1;b.expirationTime=0;switch(b.tag){case 2:d=\nb.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;var e=Je(b,H.current);Ig(b,c);e=hg(null,b,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;lg();if(J(d)){var f=!0;Oe(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;\"function\"===typeof g&&kf(b,d,g,a);e.updater=tf;b.stateNode=e;e._reactInternalFiber=b;xf(b,d,a,c);b=Qg(null,b,d,!0,f,\nc)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);f=b.pendingProps;a=hf(e);b.type=a;e=b.tag=We(a);f=L(a,f);g=void 0;switch(e){case 0:g=Mg(null,b,a,f,c);break;case 1:g=Og(null,b,a,f,c);break;case 11:g=Hg(null,b,a,f,c);break;case 14:g=Kg(null,b,a,L(a.type,f),d,c);break;default:x(\"306\",a,\"\")}return g;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Mg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,\ne=b.elementType===d?e:L(d,e),Og(a,b,d,e,c);case 3:Rg(b);d=b.updateQueue;null===d?x(\"282\"):void 0;e=b.memoizedState;e=null!==e?e.element:null;yf(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)Fg(),b=Jg(a,b,c);else{e=b.stateNode;if(e=(null===a||null===a.child)&&e.hydrate)yg=Ee(b.stateNode.containerInfo),xg=b,e=zg=!0;e?(b.effectTag|=2,b.child=Ef(b,null,d,c)):(S(a,b,d,c),Fg());b=b.child}return b;case 5:return Lf(b),null===a&&Cg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,\ng=e.children,xe(d,e)?g=null:null!==f&&xe(d,f)&&(b.effectTag|=16),Ng(a,b),1!==c&&b.mode&1&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(S(a,b,g,c),b=b.child),b;case 6:return null===a&&Cg(b),null;case 13:return Sg(a,b,c);case 4:return Jf(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Df(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:L(d,e),Hg(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,\nc),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;Ug(b,f);if(null!==g){var h=g.value;f=bd(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!I.current){b=Jg(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var l=h.contextDependencies;if(null!==l){g=h.child;for(var k=l.first;null!==k;){if(k.context===d&&0!==\n(k.observedBits&f)){1===h.tag&&(k=nf(c),k.tag=sf,pf(h,k));h.expirationTime=b&&(qg=!0);a.contextDependencies=null}\nfunction M(a,b){if(Yg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)Yg=a,b=1073741823;b={context:a,observedBits:b,next:null};null===Xg?(null===Wg?x(\"308\"):void 0,Xg=b,Wg.contextDependencies={first:b,expirationTime:0}):Xg=Xg.next=b}return a._currentValue}var $g=0,rf=1,sf=2,ah=3,Pg=!1;function bh(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}\nfunction ch(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function nf(a){return{expirationTime:a,tag:$g,payload:null,callback:null,next:null,nextEffect:null}}function dh(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}\nfunction pf(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=bh(a.memoizedState))}else d=a.updateQueue,e=c.updateQueue,null===d?null===e?(d=a.updateQueue=bh(a.memoizedState),e=c.updateQueue=bh(c.memoizedState)):d=a.updateQueue=ch(e):null===e&&(e=c.updateQueue=ch(d));null===e||d===e?dh(d,b):null===d.lastUpdate||null===e.lastUpdate?(dh(d,b),dh(e,b)):(dh(d,b),e.lastUpdate=b)}\nfunction eh(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=bh(a.memoizedState):fh(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function fh(a,b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=ch(b));return b}\nfunction gh(a,b,c,d,e,f){switch(c.tag){case rf:return a=c.payload,\"function\"===typeof a?a.call(f,d,e):a;case ah:a.effectTag=a.effectTag&-2049|64;case $g:a=c.payload;e=\"function\"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return n({},d,e);case sf:Pg=!0}return d}\nfunction yf(a,b,c,d,e){Pg=!1;b=fh(a,b);for(var f=b.baseState,g=null,h=0,l=b.firstUpdate,k=f;null!==l;){var m=l.expirationTime;md?e:d);Ih.current=null;d=void 0;1c?b:c;0===b&&(Fh=null);$h(a,b)}\nfunction ai(a){for(;;){var b=a.alternate,c=a.return,d=a.sibling;if(0===(a.effectTag&1024)){T=a;a:{var e=b;b=a;var f=U;var g=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:J(b.type)&&Ke(b);break;case 3:Kf(b);Le(b);g=b.stateNode;g.pendingContext&&(g.context=g.pendingContext,g.pendingContext=null);if(null===e||null===e.child)Eg(b),b.effectTag&=-3;mh(b);break;case 5:Mf(b);var h=If(Hf.current);f=b.type;if(null!==e&&null!=b.stateNode)nh(e,b,f,g,h),e.ref!==b.ref&&(b.effectTag|=\n128);else if(g){var l=If(N.current);if(Eg(b)){g=b;e=g.stateNode;var k=g.type,m=g.memoizedProps,p=h;e[Fa]=g;e[Ga]=m;f=void 0;h=k;switch(h){case \"iframe\":case \"object\":E(\"load\",e);break;case \"video\":case \"audio\":for(k=0;k\\x3c/script>\",k=e.removeChild(e.firstChild)):\"string\"===typeof p.is?k=k.createElement(e,{is:p.is}):(k=k.createElement(e),\"select\"===e&&p.multiple&&(k.multiple=!0)):k=k.createElementNS(l,e);e=k;e[Fa]=m;e[Ga]=g;lh(e,b,!1,!1);p=e;k=f;m=g;var t=h,A=re(k,m);switch(k){case \"iframe\":case \"object\":E(\"load\",\np);h=m;break;case \"video\":case \"audio\":for(h=0;hg&&(g=e),h>g&&(g=h),f=f.sibling;b.childExpirationTime=g}if(null!==T)return T;null!==c&&0===(c.effectTag&1024)&&(null===c.firstEffect&&\n(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),1=v)t=0;else if(-1===t||v component higher in the tree to provide a loading indicator or placeholder to display.\"+jc(k))}Nh=!0;m=jh(m,k);h=l;do{switch(h.tag){case 3:h.effectTag|=2048;h.expirationTime=g;g=Ch(h,m,g);eh(h,g);break a;case 1:if(t=m,A=h.type,k=h.stateNode,0===(h.effectTag&64)&&(\"function\"===typeof A.getDerivedStateFromError||null!==k&&\"function\"===typeof k.componentDidCatch&&(null===Fh||!Fh.has(k)))){h.effectTag|=2048;\nh.expirationTime=g;g=Eh(h,t,g);eh(h,g);break a}}h=h.return}while(null!==h)}T=ai(f);continue}}}break}while(1);Kh=!1;Hh.current=c;Yg=Xg=Wg=null;lg();if(e)Lh=null,a.finishedWork=null;else if(null!==T)a.finishedWork=null;else{c=a.current.alternate;null===c?x(\"281\"):void 0;Lh=null;if(Nh){e=a.latestPendingTime;f=a.latestSuspendedTime;g=a.latestPingedTime;if(0!==e&&eb?0:b)):(a.pendingCommitExpirationTime=d,a.finishedWork=c)}}\nfunction sh(a,b){for(var c=a.return;null!==c;){switch(c.tag){case 1:var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Fh||!Fh.has(d))){a=jh(b,a);a=Eh(c,a,1073741823);pf(c,a);qf(c,1073741823);return}break;case 3:a=jh(b,a);a=Ch(c,a,1073741823);pf(c,a);qf(c,1073741823);return}c=c.return}3===a.tag&&(c=jh(b,a),c=Ch(a,c,1073741823),pf(a,c),qf(a,1073741823))}\nfunction mf(a,b){var c=r.unstable_getCurrentPriorityLevel(),d=void 0;if(0===(b.mode&1))d=1073741823;else if(Kh&&!Oh)d=U;else{switch(c){case r.unstable_ImmediatePriority:d=1073741823;break;case r.unstable_UserBlockingPriority:d=1073741822-10*(((1073741822-a+15)/10|0)+1);break;case r.unstable_NormalPriority:d=1073741822-25*(((1073741822-a+500)/25|0)+1);break;case r.unstable_LowPriority:case r.unstable_IdlePriority:d=1;break;default:x(\"313\")}null!==Lh&&d===U&&--d}c===r.unstable_UserBlockingPriority&&\n(0===gi||d=d){a.didError=!1;b=a.latestPingedTime;if(0===b||b>c)a.latestPingedTime=c;df(c,a);c=a.expirationTime;0!==c&&Xh(a,c)}}function Ah(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=lf();b=mf(b,a);a=hi(a,b);null!==a&&(cf(a,b),b=a.expirationTime,0!==b&&Xh(a,b))}\nfunction hi(a,b){a.expirationTimeU&&Sh(),cf(a,b),Kh&&!Oh&&Lh===a||Xh(a,a.expirationTime),ii>ji&&(ii=0,x(\"185\")))}function ki(a,b,c,d,e){return r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){return a(b,c,d,e)})}var li=null,Y=null,mi=0,ni=void 0,W=!1,oi=null,Z=0,gi=0,pi=!1,qi=null,X=!1,ri=!1,si=null,ti=r.unstable_now(),ui=1073741822-(ti/10|0),vi=ui,ji=50,ii=0,wi=null;function xi(){ui=1073741822-((r.unstable_now()-ti)/10|0)}\nfunction yi(a,b){if(0!==mi){if(ba.expirationTime&&(a.expirationTime=b);W||(X?ri&&(oi=a,Z=1073741823,Di(a,1073741823,!1)):1073741823===b?Yh(1073741823,!1):yi(a,b))}\nfunction Ci(){var a=0,b=null;if(null!==Y)for(var c=Y,d=li;null!==d;){var e=d.expirationTime;if(0===e){null===c||null===Y?x(\"244\"):void 0;if(d===d.nextScheduledRoot){li=Y=d.nextScheduledRoot=null;break}else if(d===li)li=e=d.nextScheduledRoot,Y.nextScheduledRoot=e,d.nextScheduledRoot=null;else if(d===Y){Y=c;Y.nextScheduledRoot=li;d.nextScheduledRoot=null;break}else c.nextScheduledRoot=d.nextScheduledRoot,d.nextScheduledRoot=null;d=c.nextScheduledRoot}else{e>a&&(a=e,b=d);if(d===Y)break;if(1073741823===\na)break;c=d;d=d.nextScheduledRoot}}oi=b;Z=a}var Ei=!1;function di(){return Ei?!0:r.unstable_shouldYield()?Ei=!0:!1}function zi(){try{if(!di()&&null!==li){xi();var a=li;do{var b=a.expirationTime;0!==b&&ui<=b&&(a.nextExpirationTimeToWorkOn=ui);a=a.nextScheduledRoot}while(a!==li)}Yh(0,!0)}finally{Ei=!1}}\nfunction Yh(a,b){Ci();if(b)for(xi(),vi=ui;null!==oi&&0!==Z&&a<=Z&&!(Ei&&ui>Z);)Di(oi,Z,ui>Z),Ci(),xi(),vi=ui;else for(;null!==oi&&0!==Z&&a<=Z;)Di(oi,Z,!1),Ci();b&&(mi=0,ni=null);0!==Z&&yi(oi,Z);ii=0;wi=null;if(null!==si)for(a=si,si=null,b=0;b=c&&(null===si?si=[d]:si.push(d),d._defer)){a.finishedWork=b;a.expirationTime=0;return}a.finishedWork=null;a===wi?ii++:(wi=a,ii=0);r.unstable_runWithPriority(r.unstable_ImmediatePriority,function(){Zh(a,b)})}function Dh(a){null===oi?x(\"246\"):void 0;oi.expirationTime=0;pi||(pi=!0,qi=a)}function Gi(a,b){var c=X;X=!0;try{return a(b)}finally{(X=c)||W||Yh(1073741823,!1)}}\nfunction Hi(a,b){if(X&&!ri){ri=!0;try{return a(b)}finally{ri=!1}}return a(b)}function Ii(a,b,c){X||W||0===gi||(Yh(gi,!1),gi=0);var d=X;X=!0;try{return r.unstable_runWithPriority(r.unstable_UserBlockingPriority,function(){return a(b,c)})}finally{(X=d)||W||Yh(1073741823,!1)}}\nfunction Ji(a,b,c,d,e){var f=b.current;a:if(c){c=c._reactInternalFiber;b:{2===ed(c)&&1===c.tag?void 0:x(\"170\");var g=c;do{switch(g.tag){case 3:g=g.stateNode.context;break b;case 1:if(J(g.type)){g=g.stateNode.__reactInternalMemoizedMergedChildContext;break b}}g=g.return}while(null!==g);x(\"171\");g=void 0}if(1===c.tag){var h=c.type;if(J(h)){c=Ne(c,h,g);break a}}c=g}else c=He;null===b.context?b.context=c:b.pendingContext=c;b=e;e=nf(d);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);\nof();pf(f,e);qf(f,d);return d}function Ki(a,b,c,d){var e=b.current,f=lf();e=mf(f,e);return Ji(a,b,c,e,d)}function Li(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Mi(a,b,c){var d=3=Jh&&(b=Jh-1);this._expirationTime=Jh=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=this._didComplete=!1;this._children=null;this._defer=!0}Ni.prototype.render=function(a){this._defer?void 0:x(\"250\");this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new Oi;Ji(a,b,null,c,d._onCommit);return d};\nNi.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};\nNi.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;this._defer&&null!==b?void 0:x(\"251\");if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;null===d?x(\"251\"):void 0;d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;Bi(a,c);b=this._next;this._next=null;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=\nnull,this._defer=!1};Ni.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==a)for(var b=0;b=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};function Qi(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}Gb=Gi;Hb=Ii;Ib=function(){W||0===gi||(Yh(gi,!1),gi=0)};\nfunction Ri(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new Pi(a,!1,b)}\nfunction Si(a,b,c,d,e){var f=c._reactRootContainer;if(f){if(\"function\"===typeof e){var g=e;e=function(){var a=Li(f._internalRoot);g.call(a)}}null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)}else{f=c._reactRootContainer=Ri(c,d);if(\"function\"===typeof e){var h=e;e=function(){var a=Li(f._internalRoot);h.call(a)}}Hi(function(){null!=a?f.legacy_renderSubtreeIntoContainer(a,b,e):f.render(b,e)})}return Li(f._internalRoot)}\nfunction Ti(a,b){var c=2 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var currTime = -1;\n\n var shouldUpdate = function shouldUpdate(now) {\n if (currTime < 0) {\n currTime = now;\n }\n\n if (now - currTime > timeout) {\n callback(now);\n currTime = -1;\n } else {\n raf(shouldUpdate);\n }\n };\n\n raf(shouldUpdate);\n}", + "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport setRafTimeout from './setRafTimeout';\nexport default function createAnimateManager() {\n var currStyle = {};\n\n var handleChange = function handleChange() {\n return null;\n };\n\n var shouldStop = false;\n\n var setStyle = function setStyle(_style) {\n if (shouldStop) {\n return;\n }\n\n if (Array.isArray(_style)) {\n if (!_style.length) {\n return;\n }\n\n var styles = _style;\n\n var _styles = _toArray(styles),\n curr = _styles[0],\n restStyles = _styles.slice(1);\n\n if (typeof curr === 'number') {\n setRafTimeout(setStyle.bind(null, restStyles), curr);\n return;\n }\n\n setStyle(curr);\n setRafTimeout(setStyle.bind(null, restStyles));\n return;\n }\n\n if (_typeof(_style) === 'object') {\n currStyle = _style;\n handleChange(currStyle);\n }\n\n if (typeof _style === 'function') {\n _style();\n }\n };\n\n return {\n stop: function stop() {\n shouldStop = true;\n },\n start: function start(style) {\n shouldStop = false;\n setStyle(style);\n },\n subscribe: function subscribe(_handleChange) {\n handleChange = _handleChange;\n return function () {\n handleChange = function handleChange() {\n return null;\n };\n };\n }\n };\n}", + "import _isPlainObject from \"lodash/isPlainObject\";\nimport _isEqual from \"lodash/isEqual\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction shallowEqual(objA, objB) {\n if (objA === objB) {\n return true;\n }\n\n if (_typeof(objA) !== 'object' || objA === null || _typeof(objB) !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n var bHasOwnProperty = hasOwnProperty.bind(objB);\n\n for (var i = 0; i < keysA.length; i++) {\n var keyA = keysA[i];\n\n if (objA[keyA] === objB[keyA]) {\n continue;\n } // special diff with Array or Object\n\n\n if (_isArray(objA[keyA])) {\n if (!_isArray(objB[keyA]) || objA[keyA].length !== objB[keyA].length) {\n return false;\n } else if (!_isEqual(objA[keyA], objB[keyA])) {\n return false;\n }\n } else if (_isPlainObject(objA[keyA])) {\n if (!_isPlainObject(objB[keyA]) || !_isEqual(objA[keyA], objB[keyA])) {\n return false;\n }\n } else if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction shallowCompare(instance, nextProps, nextState) {\n return !shallowEqual(instance.props, nextProps) || !shallowEqual(instance.state, nextState);\n}\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return shallowCompare(this, nextProps, nextState);\n}\n/* eslint-disable no-param-reassign */\n\n\nfunction pureRenderDecorator(component) {\n component.prototype.shouldComponentUpdate = shouldComponentUpdate;\n}\n\nexport { shallowEqual };\nexport default pureRenderDecorator;", + "import _intersection from \"lodash/intersection\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/* eslint no-console: 0 */\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nvar IN_LINE_PREFIX_LIST = ['-webkit-', '-moz-', '-o-', '-ms-'];\nvar IN_COMPATIBLE_PROPERTY = ['transform', 'transformOrigin', 'transition'];\nexport var getIntersectionKeys = function getIntersectionKeys(preObj, nextObj) {\n return _intersection(Object.keys(preObj), Object.keys(nextObj));\n};\nexport var identity = function identity(param) {\n return param;\n};\n/*\n * @description: convert camel case to dash case\n * string => string\n */\n\nexport var getDashCase = function getDashCase(name) {\n return name.replace(/([A-Z])/g, function (v) {\n return \"-\".concat(v.toLowerCase());\n });\n};\n/*\n * @description: add compatible style prefix\n * (string, string) => object\n */\n\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (IN_COMPATIBLE_PROPERTY.indexOf(name) === -1) {\n return _defineProperty({}, name, value);\n }\n\n var isTransition = name === 'transition';\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var styleVal = value;\n return PREFIX_LIST.reduce(function (result, property, i) {\n if (isTransition) {\n styleVal = value.replace(/(transform|transform-origin)/gim, \"\".concat(IN_LINE_PREFIX_LIST[i], \"$1\"));\n }\n\n return _objectSpread({}, result, _defineProperty({}, property + camelName, styleVal));\n }, {});\n};\nexport var log = function log() {\n var _console;\n\n (_console = console).log.apply(_console, arguments);\n};\n/*\n * @description: log the value of a varible\n * string => any => any\n */\n\nexport var debug = function debug(name) {\n return function (item) {\n log(name, item);\n return item;\n };\n};\n/*\n * @description: log name, args, return value of a function\n * function => function\n */\n\nexport var debugf = function debugf(tag, f) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var res = f.apply(void 0, args);\n var name = tag || f.name || 'anonymous function';\n var argNames = \"(\".concat(args.map(JSON.stringify).join(', '), \")\");\n log(\"\".concat(name, \": \").concat(argNames, \" => \").concat(JSON.stringify(res)));\n return res;\n };\n};\n/*\n * @description: map object on every element in this object.\n * (function, object) => object\n */\n\nexport var mapObject = function mapObject(fn, obj) {\n return Object.keys(obj).reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, fn(key, obj[key])));\n }, {});\n};\n/*\n * @description: add compatible prefix to style\n * object => object\n */\n\nexport var translateStyle = function translateStyle(style) {\n return Object.keys(style).reduce(function (res, key) {\n return _objectSpread({}, res, generatePrefixStyle(key, res[key]));\n }, style);\n};\nexport var compose = function compose() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (!args.length) {\n return identity;\n }\n\n var fns = args.reverse(); // first function can receive multiply arguments\n\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\nexport var getTransitionVal = function getTransitionVal(props, duration, easing) {\n return props.map(function (prop) {\n return \"\".concat(getDashCase(prop), \" \").concat(duration, \"ms \").concat(easing);\n }).join(',');\n};\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format, a, b, c, d, e, f) {\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};", + "function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { warn } from './util';\nvar ACCURACY = 1e-4;\n\nvar cubicBezierFactor = function cubicBezierFactor(c1, c2) {\n return [0, 3 * c1, 3 * c2 - 6 * c1, 3 * c1 - 3 * c2 + 1];\n};\n\nvar multyTime = function multyTime(params, t) {\n return params.map(function (param, i) {\n return param * Math.pow(t, i);\n }).reduce(function (pre, curr) {\n return pre + curr;\n });\n};\n\nvar cubicBezier = function cubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n return multyTime(params, t);\n };\n};\n\nvar derivativeCubicBezier = function derivativeCubicBezier(c1, c2) {\n return function (t) {\n var params = cubicBezierFactor(c1, c2);\n\n var newParams = _toConsumableArray(params.map(function (param, i) {\n return param * i;\n }).slice(1)).concat([0]);\n\n return multyTime(newParams, t);\n };\n}; // calculate cubic-bezier using Newton's method\n\n\nexport var configBezier = function configBezier() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var x1 = args[0],\n y1 = args[1],\n x2 = args[2],\n y2 = args[3];\n\n if (args.length === 1) {\n switch (args[0]) {\n case 'linear':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n\n case 'ease':\n x1 = 0.25;\n y1 = 0.1;\n x2 = 0.25;\n y2 = 1.0;\n break;\n\n case 'ease-in':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 1.0;\n y2 = 1.0;\n break;\n\n case 'ease-out':\n x1 = 0.42;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n\n case 'ease-in-out':\n x1 = 0.0;\n y1 = 0.0;\n x2 = 0.58;\n y2 = 1.0;\n break;\n\n default:\n warn(false, '[configBezier]: arguments should be one of ' + 'oneOf \\'linear\\', \\'ease\\', \\'ease-in\\', \\'ease-out\\', ' + '\\'ease-in-out\\', instead received %s', args);\n }\n }\n\n warn([x1, x2, y1, y2].every(function (num) {\n return typeof num === 'number' && num >= 0 && num <= 1;\n }), '[configBezier]: arguments should be x1, y1, x2, y2 of [0, 1] instead received %s', args);\n var curveX = cubicBezier(x1, x2);\n var curveY = cubicBezier(y1, y2);\n var derCurveX = derivativeCubicBezier(x1, x2);\n\n var rangeValue = function rangeValue(value) {\n if (value > 1) {\n return 1;\n } else if (value < 0) {\n return 0;\n }\n\n return value;\n };\n\n var bezier = function bezier(_t) {\n var t = _t > 1 ? 1 : _t;\n var x = t;\n\n for (var i = 0; i < 8; ++i) {\n var evalT = curveX(x) - t;\n var derVal = derCurveX(x);\n\n if (Math.abs(evalT - t) < ACCURACY || derVal < ACCURACY) {\n return curveY(x);\n }\n\n x = rangeValue(x - evalT / derVal);\n }\n\n return curveY(x);\n };\n\n bezier.isStepper = false;\n return bezier;\n};\nexport var configSpring = function configSpring() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _config$stiff = config.stiff,\n stiff = _config$stiff === void 0 ? 100 : _config$stiff,\n _config$damping = config.damping,\n damping = _config$damping === void 0 ? 8 : _config$damping,\n _config$dt = config.dt,\n dt = _config$dt === void 0 ? 17 : _config$dt;\n\n var stepper = function stepper(currX, destX, currV) {\n var FSpring = -(currX - destX) * stiff;\n var FDamping = currV * damping;\n var newV = currV + (FSpring - FDamping) * dt / 1000;\n var newX = currV * dt / 1000 + currX;\n\n if (Math.abs(newX - destX) < ACCURACY && Math.abs(newV) < ACCURACY) {\n return [destX, 0];\n }\n\n return [newX, newV];\n };\n\n stepper.isStepper = true;\n stepper.dt = dt;\n return stepper;\n};\nexport var configEasing = function configEasing() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var easing = args[0];\n\n if (typeof easing === 'string') {\n switch (easing) {\n case 'ease':\n case 'ease-in-out':\n case 'ease-out':\n case 'ease-in':\n case 'linear':\n return configBezier(easing);\n\n case 'spring':\n return configSpring();\n\n default:\n warn(false, '[configEasing]: first argument should be one of \\'ease\\', \\'ease-in\\', ' + '\\'ease-out\\', \\'ease-in-out\\', \\'linear\\' and \\'spring\\', instead received %s', args);\n }\n }\n\n if (typeof easing === 'function') {\n return easing;\n }\n\n warn(false, '[configEasing]: first argument type should be function or ' + 'string, instead received %s', args);\n return null;\n};", + "import _filter from \"lodash/filter\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport raf, { cancel as caf } from 'raf';\nimport { getIntersectionKeys, mapObject } from './util';\n\nvar alpha = function alpha(begin, end, k) {\n return begin + (end - begin) * k;\n};\n\nvar needContinue = function needContinue(_ref) {\n var from = _ref.from,\n to = _ref.to;\n return from !== to;\n};\n/*\n * @description: cal new from value and velocity in each stepper\n * @return: { [styleProperty]: { from, to, velocity } }\n */\n\n\nvar calStepperVals = function calStepperVals(easing, preVals, steps) {\n var nextStepVals = mapObject(function (key, val) {\n if (needContinue(val)) {\n var _easing = easing(val.from, val.to, val.velocity),\n _easing2 = _slicedToArray(_easing, 2),\n newX = _easing2[0],\n newV = _easing2[1];\n\n return _objectSpread({}, val, {\n from: newX,\n velocity: newV\n });\n }\n\n return val;\n }, preVals);\n\n if (steps < 1) {\n return mapObject(function (key, val) {\n if (needContinue(val)) {\n return _objectSpread({}, val, {\n velocity: alpha(val.velocity, nextStepVals[key].velocity, steps),\n from: alpha(val.from, nextStepVals[key].from, steps)\n });\n }\n\n return val;\n }, preVals);\n }\n\n return calStepperVals(easing, nextStepVals, steps - 1);\n}; // configure update function\n\n\nexport default (function (from, to, easing, duration, render) {\n var interKeys = getIntersectionKeys(from, to);\n var timingStyle = interKeys.reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, [from[key], to[key]]));\n }, {});\n var stepperStyle = interKeys.reduce(function (res, key) {\n return _objectSpread({}, res, _defineProperty({}, key, {\n from: from[key],\n velocity: 0,\n to: to[key]\n }));\n }, {});\n var cafId = -1;\n var preTime;\n var beginTime;\n\n var update = function update() {\n return null;\n };\n\n var getCurrStyle = function getCurrStyle() {\n return mapObject(function (key, val) {\n return val.from;\n }, stepperStyle);\n };\n\n var shouldStopAnimation = function shouldStopAnimation() {\n return !_filter(stepperStyle, needContinue).length;\n }; // stepper timing function like spring\n\n\n var stepperUpdate = function stepperUpdate(now) {\n if (!preTime) {\n preTime = now;\n }\n\n var deltaTime = now - preTime;\n var steps = deltaTime / easing.dt;\n stepperStyle = calStepperVals(easing, stepperStyle, steps); // get union set and add compatible prefix\n\n render(_objectSpread({}, from, to, getCurrStyle(stepperStyle)));\n preTime = now;\n\n if (!shouldStopAnimation()) {\n cafId = raf(update);\n }\n }; // t => val timing function like cubic-bezier\n\n\n var timingUpdate = function timingUpdate(now) {\n if (!beginTime) {\n beginTime = now;\n }\n\n var t = (now - beginTime) / duration;\n var currStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(t)]));\n }, timingStyle); // get union set and add compatible prefix\n\n render(_objectSpread({}, from, to, currStyle));\n\n if (t < 1) {\n cafId = raf(update);\n } else {\n var finalStyle = mapObject(function (key, val) {\n return alpha.apply(void 0, _toConsumableArray(val).concat([easing(1)]));\n }, timingStyle);\n render(_objectSpread({}, from, to, finalStyle));\n }\n };\n\n update = easing.isStepper ? stepperUpdate : timingUpdate; // return start animation method\n\n return function () {\n raf(update); // return stop animation method\n\n return function () {\n caf(cafId);\n };\n };\n});", + "import _isEqual from \"lodash/isEqual\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nimport React, { Component, cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport createAnimateManager from './AnimateManager';\nimport pureRender from './PureRender';\nimport { configEasing } from './easing';\nimport configUpdate from './configUpdate';\nimport { getTransitionVal, identity, translateStyle } from './util';\n\nvar Animate = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Animate, _Component);\n\n function Animate(props, context) {\n var _this;\n\n _classCallCheck(this, Animate);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Animate).call(this, props, context));\n var _this$props = _this.props,\n isActive = _this$props.isActive,\n attributeName = _this$props.attributeName,\n from = _this$props.from,\n to = _this$props.to,\n steps = _this$props.steps,\n children = _this$props.children;\n _this.handleStyleChange = _this.handleStyleChange.bind(_assertThisInitialized(_assertThisInitialized(_this)));\n _this.changeStyle = _this.changeStyle.bind(_assertThisInitialized(_assertThisInitialized(_this)));\n\n if (!isActive) {\n _this.state = {\n style: {}\n }; // if children is a function and animation is not active, set style to 'to'\n\n if (typeof children === 'function') {\n _this.state = {\n style: to\n };\n }\n\n return _possibleConstructorReturn(_this);\n }\n\n if (steps && steps.length) {\n _this.state = {\n style: steps[0].style\n };\n } else if (from) {\n if (typeof children === 'function') {\n _this.state = {\n style: from\n };\n return _possibleConstructorReturn(_this);\n }\n\n _this.state = {\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n };\n } else {\n _this.state = {\n style: {}\n };\n }\n\n return _this;\n }\n\n _createClass(Animate, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props2 = this.props,\n isActive = _this$props2.isActive,\n canBegin = _this$props2.canBegin;\n this.mounted = true;\n\n if (!isActive || !canBegin) {\n return;\n }\n\n this.runAnimation(this.props);\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var isActive = nextProps.isActive,\n canBegin = nextProps.canBegin,\n attributeName = nextProps.attributeName,\n shouldReAnimate = nextProps.shouldReAnimate;\n\n if (!canBegin) {\n return;\n }\n\n if (!isActive) {\n this.setState({\n style: attributeName ? _defineProperty({}, attributeName, nextProps.to) : nextProps.to\n });\n return;\n }\n\n if (_isEqual(this.props.to, nextProps.to) && this.props.canBegin && this.props.isActive) {\n return;\n }\n\n var isTriggered = !this.props.canBegin || !this.props.isActive;\n\n if (this.manager) {\n this.manager.stop();\n }\n\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n\n var from = isTriggered || shouldReAnimate ? nextProps.from : this.props.to;\n this.setState({\n style: attributeName ? _defineProperty({}, attributeName, from) : from\n });\n this.runAnimation(_objectSpread({}, nextProps, {\n from: from,\n begin: 0\n }));\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n\n if (this.unSubscribe) {\n this.unSubscribe();\n }\n\n if (this.manager) {\n this.manager.stop();\n this.manager = null;\n }\n\n if (this.stopJSAnimation) {\n this.stopJSAnimation();\n }\n }\n }, {\n key: \"runJSAnimation\",\n value: function runJSAnimation(props) {\n var _this2 = this;\n\n var from = props.from,\n to = props.to,\n duration = props.duration,\n easing = props.easing,\n begin = props.begin,\n onAnimationEnd = props.onAnimationEnd,\n onAnimationStart = props.onAnimationStart;\n var startAnimation = configUpdate(from, to, configEasing(easing), duration, this.changeStyle);\n\n var finalStartAnimation = function finalStartAnimation() {\n _this2.stopJSAnimation = startAnimation();\n };\n\n this.manager.start([onAnimationStart, begin, finalStartAnimation, duration, onAnimationEnd]);\n }\n }, {\n key: \"runStepAnimation\",\n value: function runStepAnimation(props) {\n var _this3 = this;\n\n var steps = props.steps,\n begin = props.begin,\n onAnimationStart = props.onAnimationStart;\n var _steps$ = steps[0],\n initialStyle = _steps$.style,\n _steps$$duration = _steps$.duration,\n initialTime = _steps$$duration === void 0 ? 0 : _steps$$duration;\n\n var addStyle = function addStyle(sequence, nextItem, index) {\n if (index === 0) {\n return sequence;\n }\n\n var duration = nextItem.duration,\n _nextItem$easing = nextItem.easing,\n easing = _nextItem$easing === void 0 ? 'ease' : _nextItem$easing,\n style = nextItem.style,\n nextProperties = nextItem.properties,\n onAnimationEnd = nextItem.onAnimationEnd;\n var preItem = index > 0 ? steps[index - 1] : nextItem;\n var properties = nextProperties || Object.keys(style);\n\n if (typeof easing === 'function' || easing === 'spring') {\n return _toConsumableArray(sequence).concat([_this3.runJSAnimation.bind(_this3, {\n from: preItem.style,\n to: style,\n duration: duration,\n easing: easing\n }), duration]);\n }\n\n var transition = getTransitionVal(properties, duration, easing);\n\n var newStyle = _objectSpread({}, preItem.style, style, {\n transition: transition\n });\n\n return _toConsumableArray(sequence).concat([newStyle, duration, onAnimationEnd]).filter(identity);\n };\n\n return this.manager.start([onAnimationStart].concat(_toConsumableArray(steps.reduce(addStyle, [initialStyle, Math.max(initialTime, begin)])), [props.onAnimationEnd]));\n }\n }, {\n key: \"runAnimation\",\n value: function runAnimation(props) {\n if (!this.manager) {\n this.manager = createAnimateManager();\n }\n\n var begin = props.begin,\n duration = props.duration,\n attributeName = props.attributeName,\n propsTo = props.to,\n easing = props.easing,\n onAnimationStart = props.onAnimationStart,\n onAnimationEnd = props.onAnimationEnd,\n steps = props.steps,\n children = props.children;\n var manager = this.manager;\n this.unSubscribe = manager.subscribe(this.handleStyleChange);\n\n if (typeof easing === 'function' || typeof children === 'function' || easing === 'spring') {\n this.runJSAnimation(props);\n return;\n }\n\n if (steps.length > 1) {\n this.runStepAnimation(props);\n return;\n }\n\n var to = attributeName ? _defineProperty({}, attributeName, propsTo) : propsTo;\n var transition = getTransitionVal(Object.keys(to), duration, easing);\n manager.start([onAnimationStart, begin, _objectSpread({}, to, {\n transition: transition\n }), duration, onAnimationEnd]);\n }\n }, {\n key: \"handleStyleChange\",\n value: function handleStyleChange(style) {\n this.changeStyle(style);\n }\n }, {\n key: \"changeStyle\",\n value: function changeStyle(style) {\n if (this.mounted) {\n this.setState({\n style: style\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n children = _this$props3.children,\n begin = _this$props3.begin,\n duration = _this$props3.duration,\n attributeName = _this$props3.attributeName,\n easing = _this$props3.easing,\n isActive = _this$props3.isActive,\n steps = _this$props3.steps,\n from = _this$props3.from,\n to = _this$props3.to,\n canBegin = _this$props3.canBegin,\n onAnimationEnd = _this$props3.onAnimationEnd,\n shouldReAnimate = _this$props3.shouldReAnimate,\n onAnimationReStart = _this$props3.onAnimationReStart,\n others = _objectWithoutProperties(_this$props3, [\"children\", \"begin\", \"duration\", \"attributeName\", \"easing\", \"isActive\", \"steps\", \"from\", \"to\", \"canBegin\", \"onAnimationEnd\", \"shouldReAnimate\", \"onAnimationReStart\"]);\n\n var count = Children.count(children);\n var stateStyle = translateStyle(this.state.style);\n\n if (typeof children === 'function') {\n return children(stateStyle);\n }\n\n if (!isActive || count === 0) {\n return children;\n }\n\n var cloneContainer = function cloneContainer(container) {\n var _container$props = container.props,\n _container$props$styl = _container$props.style,\n style = _container$props$styl === void 0 ? {} : _container$props$styl,\n className = _container$props.className;\n var res = cloneElement(container, _objectSpread({}, others, {\n style: _objectSpread({}, style, stateStyle),\n className: className\n }));\n return res;\n };\n\n if (count === 1) {\n return cloneContainer(Children.only(children));\n }\n\n return React.createElement(\"div\", null, Children.map(children, function (child) {\n return cloneContainer(child);\n }));\n }\n }]);\n\n return Animate;\n}(Component), _class2.displayName = 'Animate', _class2.propTypes = {\n from: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n to: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n attributeName: PropTypes.string,\n // animation duration\n duration: PropTypes.number,\n begin: PropTypes.number,\n easing: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n steps: PropTypes.arrayOf(PropTypes.shape({\n duration: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n easing: PropTypes.oneOfType([PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']), PropTypes.func]),\n // transition css properties(dash case), optional\n properties: PropTypes.arrayOf('string'),\n onAnimationEnd: PropTypes.func\n })),\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n isActive: PropTypes.bool,\n canBegin: PropTypes.bool,\n onAnimationEnd: PropTypes.func,\n // decide if it should reanimate with initial from style when props change\n shouldReAnimate: PropTypes.bool,\n onAnimationStart: PropTypes.func,\n onAnimationReStart: PropTypes.func\n}, _class2.defaultProps = {\n begin: 0,\n duration: 1000,\n from: '',\n to: '',\n attributeName: '',\n easing: 'ease',\n isActive: true,\n canBegin: true,\n steps: [],\n onAnimationEnd: function onAnimationEnd() {},\n onAnimationStart: function onAnimationStart() {}\n}, _temp)) || _class;\n\nexport default Animate;", + "import _isNumber from \"lodash/isNumber\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component, Children } from 'react';\nimport { Transition } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport Animate from './Animate';\n\nvar parseDurationOfSingleTransition = function parseDurationOfSingleTransition() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var steps = options.steps,\n duration = options.duration;\n\n if (steps && steps.length) {\n return steps.reduce(function (result, entry) {\n return result + (_isNumber(entry.duration) && entry.duration > 0 ? entry.duration : 0);\n }, 0);\n }\n\n if (_isNumber(duration)) {\n return duration;\n }\n\n return 0;\n};\n\nvar AnimateGroupChild =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(AnimateGroupChild, _Component);\n\n function AnimateGroupChild() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, AnimateGroupChild);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(AnimateGroupChild)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n isActive: false\n };\n\n _this.handleEnter = function (node, isAppearing) {\n var _this$props = _this.props,\n appearOptions = _this$props.appearOptions,\n enterOptions = _this$props.enterOptions;\n\n _this.handleStyleActive(isAppearing ? appearOptions : enterOptions);\n };\n\n _this.handleExit = function () {\n _this.handleStyleActive(_this.props.leaveOptions);\n };\n\n return _this;\n }\n\n _createClass(AnimateGroupChild, [{\n key: \"handleStyleActive\",\n value: function handleStyleActive(style) {\n if (style) {\n var onAnimationEnd = style.onAnimationEnd ? function () {\n style.onAnimationEnd();\n } : null;\n this.setState(_objectSpread({}, style, {\n onAnimationEnd: onAnimationEnd,\n isActive: true\n }));\n }\n }\n }, {\n key: \"parseTimeout\",\n value: function parseTimeout() {\n var _this$props2 = this.props,\n appearOptions = _this$props2.appearOptions,\n enterOptions = _this$props2.enterOptions,\n leaveOptions = _this$props2.leaveOptions;\n return parseDurationOfSingleTransition(appearOptions) + parseDurationOfSingleTransition(enterOptions) + parseDurationOfSingleTransition(leaveOptions);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props3 = this.props,\n children = _this$props3.children,\n appearOptions = _this$props3.appearOptions,\n enterOptions = _this$props3.enterOptions,\n leaveOptions = _this$props3.leaveOptions,\n props = _objectWithoutProperties(_this$props3, [\"children\", \"appearOptions\", \"enterOptions\", \"leaveOptions\"]);\n\n return React.createElement(Transition, _extends({}, props, {\n onEnter: this.handleEnter,\n onExit: this.handleExit,\n timeout: this.parseTimeout()\n }), function () {\n return React.createElement(Animate, _this2.state, Children.only(children));\n });\n }\n }]);\n\n return AnimateGroupChild;\n}(Component);\n\nAnimateGroupChild.propTypes = {\n appearOptions: PropTypes.object,\n enterOptions: PropTypes.object,\n leaveOptions: PropTypes.object,\n children: PropTypes.element\n};\nexport default AnimateGroupChild;", + "import React, { Children } from 'react';\nimport { TransitionGroup } from 'react-transition-group';\nimport PropTypes from 'prop-types';\nimport AnimateGroupChild from './AnimateGroupChild';\n\nfunction AnimateGroup(props) {\n var component = props.component,\n children = props.children,\n appear = props.appear,\n enter = props.enter,\n leave = props.leave;\n return React.createElement(TransitionGroup, {\n component: component\n }, Children.map(children, function (child, index) {\n return React.createElement(AnimateGroupChild, {\n appearOptions: appear,\n enterOptions: enter,\n leaveOptions: leave,\n key: \"child-\".concat(index)\n }, child);\n }));\n}\n\nAnimateGroup.propTypes = {\n appear: PropTypes.object,\n enter: PropTypes.object,\n leave: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.element]),\n component: PropTypes.any\n};\nAnimateGroup.defaultProps = {\n component: 'span'\n};\nexport default AnimateGroup;", + "import Animate from './Animate';\nimport { configBezier, configSpring } from './easing';\nimport { translateStyle } from './util';\nimport AnimateGroup from './AnimateGroup';\nexport { configSpring, configBezier, AnimateGroup, translateStyle };\nexport default Animate;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _addClass = _interopRequireDefault(require(\"dom-helpers/class/addClass\"));\n\nvar _removeClass = _interopRequireDefault(require(\"dom-helpers/class/removeClass\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _addClass.default)(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return (0, _removeClass.default)(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](http://www.nganimate.org/) library, you should use it if you're\n * using CSS transitions or animations. It's built upon the\n * [`))) + (("`" + (`Transition` + "`")) + (`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * ` + ("`" + `CSSTransition`)))) + ((("`" + (` applies a pair of class names during the ` + "`")) + (`appear` + ("`" + `, `))) + (("`" + (`enter` + "`")) + ((`,\n * and ` + "`") + (`exit` + "`"))))) + ((((` states of the transition. The first class is applied and then a\n * second ` + ("`" + `*-active`)) + ("`" + (` class in order to activate the CSSS transition. After the\n * transition, matching ` + "`"))) + ((`*-done` + ("`" + ` class names are applied to persist the\n * transition state.\n *\n * `)) + ("`" + ("`" + "`")))) + (((`jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * \n *
\n * {\"I'll receive my-node-* classes\"}\n *
\n *
\n * \n *
\n * );\n * }\n * ` + ("`" + "`")) + ("`" + (`\n *\n * When the ` + "`"))) + ((`in` + ("`" + ` prop is set to `)) + (("`" + `true`) + ("`" + `, the child component will first receive\n * the class `)))))) + ((((("`" + (`example-enter` + "`")) + (`, then the ` + ("`" + `example-enter-active`))) + (("`" + (` will be added in\n * the next tick. ` + "`")) + (`CSSTransition` + ("`" + ` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `)))) + ((("`" + (`example-enter-active` + "`")) + (`. This is an important trick\n * because it allows us to transition between ` + ("`" + `example-enter`))) + (("`" + (` and\n * ` + "`")) + ((`example-enter-active` + "`") + (` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ` + "`"))))) + (((("`" + ("`" + `css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity: 200ms;\n * }\n * `)) + ("`" + ("`" + "`"))) + ((`\n *\n * ` + ("`" + `*-active`)) + ("`" + (` classes represent which styles you want to animate **to**.\n */\n\n\nvar CSSTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n\n _this.onEnter = function (node, appearing) {\n var _this$getClassNames = _this.getClassNames(appearing ? 'appear' : 'enter'),\n className = _this$getClassNames.className;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, className);\n\n if (_this.props.onEnter) {\n _this.props.onEnter(node, appearing);\n }\n };\n\n _this.onEntering = function (node, appearing) {\n var _this$getClassNames2 = _this.getClassNames(appearing ? 'appear' : 'enter'),\n activeClassName = _this$getClassNames2.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onEntering) {\n _this.props.onEntering(node, appearing);\n }\n };\n\n _this.onEntered = function (node, appearing) {\n var appearClassName = _this.getClassNames('appear').doneClassName;\n\n var enterClassName = _this.getClassNames('enter').doneClassName;\n\n var doneClassName = appearing ? appearClassName + \" \" + enterClassName : enterClassName;\n\n _this.removeClasses(node, appearing ? 'appear' : 'enter');\n\n addClass(node, doneClassName);\n\n if (_this.props.onEntered) {\n _this.props.onEntered(node, appearing);\n }\n };\n\n _this.onExit = function (node) {\n var _this$getClassNames3 = _this.getClassNames('exit'),\n className = _this$getClassNames3.className;\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n addClass(node, className);\n\n if (_this.props.onExit) {\n _this.props.onExit(node);\n }\n };\n\n _this.onExiting = function (node) {\n var _this$getClassNames4 = _this.getClassNames('exit'),\n activeClassName = _this$getClassNames4.activeClassName;\n\n _this.reflowAndAddClass(node, activeClassName);\n\n if (_this.props.onExiting) {\n _this.props.onExiting(node);\n }\n };\n\n _this.onExited = function (node) {\n var _this$getClassNames5 = _this.getClassNames('exit'),\n doneClassName = _this$getClassNames5.doneClassName;\n\n _this.removeClasses(node, 'exit');\n\n addClass(node, doneClassName);\n\n if (_this.props.onExited) {\n _this.props.onExited(node);\n }\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + '-' : '';\n var className = isStringClassNames ? prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? className + '-active' : classNames[type + 'Active'];\n var doneClassName = isStringClassNames ? className + '-done' : classNames[type + 'Done'];\n return {\n className: className,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$getClassNames6 = this.getClassNames(type),\n className = _this$getClassNames6.className,\n activeClassName = _this$getClassNames6.activeClassName,\n doneClassName = _this$getClassNames6.doneClassName;\n\n className && removeClass(node, className);\n activeClassName && removeClass(node, activeClassName);\n doneClassName && removeClass(node, doneClassName);\n };\n\n _proto.reflowAndAddClass = function reflowAndAddClass(node, className) {\n // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n if (className) {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n /* eslint-enable no-unused-expressions */\n\n addClass(node, className);\n }\n };\n\n _proto.render = function render() {\n var props = _extends({}, this.props);\n\n delete props.classNames;\n return _react.default.createElement(_Transition.default, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(_react.default.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, _Transition.default.propTypes, {\n /**\n * The animation classNames applied to the component as it enters, exits or\n * has finished the transition. A single name can be provided and it will be\n * suffixed for each stage: e.g.\n *\n * ` + "`")))) + (((`classNames=\"fade\"` + ("`" + ` applies `)) + ("`" + (`fade-enter` + "`"))) + ((`, ` + ("`" + `fade-enter-active`)) + (("`" + `,\n * `) + ("`" + `fade-enter-done`)))))))))) + ((((((((("`" + (`, ` + "`")) + (`fade-exit` + ("`" + `, `))) + (("`" + (`fade-exit-active` + "`")) + (`, ` + ("`" + `fade-exit-done`)))) + ((("`" + (`,\n * ` + "`")) + (`fade-appear` + ("`" + `, `))) + (("`" + (`fade-appear-active` + "`")) + (`, and ` + ("`" + `fade-appear-done`))))) + (((("`" + (`.\n *\n * **Note**: ` + "`")) + (`fade-appear-done` + ("`" + ` and `))) + (("`" + (`fade-enter-done` + "`")) + (` will _both_ be applied.\n * This allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * ` + ("`" + `.fade-enter-done:not(.fade-appear-done)`)))) + ((("`" + (`. For example, you could apply an\n * epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use ` + "`")) + (`fade-enter-done` + ("`" + ` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * `))) + (("`" + ("`" + "`")) + ((`js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ` + "`") + ("`" + "`")))))) + (((((`\n *\n * If you want to set these classes using CSS Modules:\n *\n * ` + ("`" + "`")) + ("`" + (`js\n * import styles from './styles.css';\n * ` + "`"))) + (("`" + ("`" + `\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * `)) + ("`" + ("`" + "`")))) + (((`js\n * classNames={{ ...styles }}\n * ` + ("`" + "`")) + ("`" + (`\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: _PropTypes.classNamesShape,\n\n /**\n * A ` + "`"))) + ((`` + ("`" + ` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `)) + (("`" + ``) + ("`" + ` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `))))) + (((("`" + (`` + "`")) + (` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the ` + ("`" + `done`))) + (("`" + (` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A ` + "`")) + (`` + ("`" + ` callback fired immediately after the 'exit' class is\n * applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `)))) + ((("`" + (`` + "`")) + (` callback fired immediately after the 'exit-active' is applied.\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A ` + ("`" + ``))) + (("`" + (` callback fired immediately after the 'exit' classes\n * are **removed** and the ` + "`")) + ((`exit-done` + "`") + (` class is added to the DOM node.\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nvar _default = CSSTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = require(\"react-dom\");\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/**\n * The ` + "`"))))))) + ((((((`` + ("`" + ` component is a specialized `)) + ("`" + (`Transition` + "`"))) + ((` component\n * that animates between two children.\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * \n *
I appear first
\n *
I replace the above
\n *
\n * ` + "`")))) + ((("`" + ("`" + `\n */\nvar ReplaceTransition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(ReplaceTransition, _React$Component);\n\n function ReplaceTransition() {\n var _this;\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n _this.handleEnter = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _this.handleLifecycle('onEnter', 0, args);\n };\n\n _this.handleEntering = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return _this.handleLifecycle('onEntering', 0, args);\n };\n\n _this.handleEntered = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return _this.handleLifecycle('onEntered', 0, args);\n };\n\n _this.handleExit = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n return _this.handleLifecycle('onExit', 1, args);\n };\n\n _this.handleExiting = function () {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n return _this.handleLifecycle('onExiting', 1, args);\n };\n\n _this.handleExited = function () {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n return _this.handleLifecycle('onExited', 1, args);\n };\n\n return _this;\n }\n\n var _proto = ReplaceTransition.prototype;\n\n _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n var _child$props;\n\n var children = this.props.children;\n\n var child = _react.default.Children.toArray(children)[idx];\n\n if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n if (this.props[handler]) this.props[handler]((0, _reactDom.findDOMNode)(this));\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n inProp = _this$props.in,\n props = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\"]);\n\n var _React$Children$toArr = _react.default.Children.toArray(children),\n first = _React$Children$toArr[0],\n second = _React$Children$toArr[1];\n\n delete props.onEnter;\n delete props.onEntering;\n delete props.onEntered;\n delete props.onExit;\n delete props.onExiting;\n delete props.onExited;\n return _react.default.createElement(_TransitionGroup.default, props, inProp ? _react.default.cloneElement(first, {\n key: 'first',\n onEnter: this.handleEnter,\n onEntering: this.handleEntering,\n onEntered: this.handleEntered\n }) : _react.default.cloneElement(second, {\n key: 'second',\n onEnter: this.handleExit,\n onEntering: this.handleExiting,\n onEntered: this.handleExited\n }));\n };\n\n return ReplaceTransition;\n}(_react.default.Component);\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n in: _propTypes.default.bool.isRequired,\n children: function children(props, propName) {\n if (_react.default.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n return null;\n }\n} : {};\nvar _default = ReplaceTransition;\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `)) + ("`" + (`Transition` + "`"))) + ((` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [` + ("`" + `CSSTransition`)) + ("`" + (`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of ` + "`"))))) + ((((`Transition` + ("`" + `, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `)) + ("`" + (`Transition` + "`"))) + ((` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: ` + "`")))) + (((`opacity ${duration}ms ease-in-out` + ("`" + `,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {state => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * `)) + ("`" + ("`" + "`"))) + ((`\n *\n * There are 4 main states a Transition can be in:\n * - ` + ("`" + `'entering'`)) + (("`" + `\n * - `) + ("`" + `'entered'`)))))) + ((((("`" + (`\n * - ` + "`")) + (`'exiting'` + ("`" + `\n * - `))) + (("`" + (`'exited'` + "`")) + (`\n *\n * Transition state is toggled via the ` + ("`" + `in`)))) + ((("`" + (` prop. When ` + "`")) + (`true` + ("`" + ` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `))) + (("`" + (`'entering'` + "`")) + ((` for the duration of the\n * transition and then to the ` + "`") + (`'entered'` + "`"))))) + ((((` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n *
\n * \n * {state => (\n * // ...\n * )}\n * \n * \n *
\n * );\n * }\n * ` + "`"))) + (("`" + ("`" + `\n *\n * When the button is clicked the component will shift to the `)) + ("`" + (`'entering'` + "`")))) + (((` state\n * and stay there for 500ms (the value of ` + ("`" + `timeout`)) + ("`" + (`) before it finally switches\n * to ` + "`"))) + ((`'entered'` + ("`" + `.\n *\n * When `)) + (("`" + `in`) + ("`" + ` is `)))))))) + ((((((("`" + (`false` + "`")) + (` the same thing happens except the state moves from\n * ` + ("`" + `'exiting'`))) + (("`" + (` to ` + "`")) + (`'exited'` + ("`" + `.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A `)))) + ((("`" + (`function` + "`")) + (` child can be used instead of a React element. This function is\n * called with the current transition status (` + ("`" + `'entering'`))) + (("`" + (`, ` + "`")) + (`'entered'` + ("`" + `,\n * `))))) + (((("`" + (`'exiting'` + "`")) + (`, ` + ("`" + `'exited'`))) + (("`" + (`, ` + "`")) + (`'unmounted'` + ("`" + `), which can be used to apply context\n * specific props to a component.\n *\n * `)))) + ((("`" + ("`" + "`")) + (`jsx\n * \n * {state => (\n * \n * )}\n * \n * ` + "`")) + (("`" + "`") + (`\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent ` + "`")))))) + (((((`Transition` + ("`" + ` component. If you want to \"lazy mount\" the component on the\n * first `)) + ("`" + (`in={true}` + "`"))) + ((` you can set ` + ("`" + `mountOnEnter`)) + ("`" + (`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify ` + "`")))) + (((`unmountOnExit` + ("`" + `.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `)) + ("`" + (`'exited'` + "`"))) + ((` state.\n * Set ` + ("`" + `unmountOnExit`)) + (("`" + ` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `) + ("`" + ``))))) + (((("`" + (` component mounts.\n * If you want to transition on the first mount set ` + "`")) + (`appear` + ("`" + ` to `))) + (("`" + (`true` + "`")) + (`, and the\n * component will transition in as soon as the ` + ("`" + ``)))) + ((("`" + (` mounts.\n *\n * > Note: there are no specific \"appear\" states. ` + "`")) + (`appear` + ("`" + ` only adds an additional `))) + (("`" + (`enter` + "`")) + ((` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless ` + "`") + (`addEndListener` + "`"))))))) + ((((((` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * timeout={500}\n * ` + "`"))) + (("`" + ("`" + `\n *\n * or individually:\n *\n * `)) + ("`" + ("`" + "`")))) + (((`jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ` + ("`" + "`")) + ("`" + (`\n *\n * - ` + "`"))) + ((`appear` + ("`" + ` defaults to the value of `)) + (("`" + `enter`) + ("`" + `\n * - `))))) + (((("`" + (`enter` + "`")) + (` defaults to ` + ("`" + `0`))) + (("`" + (`\n * - ` + "`")) + (`exit` + ("`" + ` defaults to `)))) + ((("`" + (`0` + "`")) + (`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = _PropTypes.timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a ` + ("`" + `done`))) + (("`" + (` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ` + "`")) + (("`" + "`") + (`jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ` + "`")))))) + ((((("`" + ("`" + `\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `)) + ("`" + (`isAppearing` + "`"))) + ((` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * ` + ("`" + `isAppearing`)) + ("`" + (` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * ` + "`")))) + (((`isAppearing` + ("`" + ` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _ChildMapping = require(\"./utils/ChildMapping\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n /**\n * The `)) + ("`" + (`` + "`"))) + ((` component manages a set of transition components\n * (` + ("`" + ``)) + (("`" + ` and `) + ("`" + ``))))) + (((("`" + (`) in a list. Like with the transition\n * components, ` + "`")) + (`` + ("`" + ` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `))) + (("`" + (`in` + "`")) + (` prop is toggled automatically by the ` + ("`" + ``)))) + ((("`" + (`.\n *\n * Note that ` + "`")) + (`` + ("`" + ` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\n};\n\nvar TransitionGroup =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_assertThisInitialized(_this))); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: {\n isMounting: !this.appeared\n }\n };\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.appeared = true;\n this.mounted = true;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n };\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return children;\n }\n\n return _react.default.createElement(Component, props, children);\n };\n\n return TransitionGroup;\n}(_react.default.Component);\n\nTransitionGroup.childContextTypes = {\n transitionGroup: _propTypes.default.object.isRequired\n};\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `))) + (("`" + (`` + "`")) + ((` renders a ` + "`") + (`
` + "`"))))))))) + ((((((((` by default. You can change this\n * behavior by providing a ` + ("`" + `component`)) + ("`" + (` prop.\n * If you use React v16+ and would like to avoid a wrapping ` + "`"))) + ((`
` + ("`" + ` element\n * you can pass in `)) + ("`" + (`component={null}` + "`")))) + (((`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: _propTypes.default.any,\n\n /**\n * A set of ` + ("`" + ``)) + ("`" + (` components, that are toggled ` + "`"))) + ((`in` + ("`" + ` and out as they\n * leave. the `)) + ("`" + (`` + "`"))))) + ((((` will inject specific transition props, so\n * remember to spread them through if you are wrapping the ` + ("`" + ``)) + ("`" + (` as\n * with our ` + "`"))) + ((`` + ("`" + ` example.\n *\n * While this component is meant for multiple `)) + ("`" + (`Transition` + "`")))) + (((` or ` + ("`" + `CSSTransition`)) + ("`" + (`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the ` + "`"))) + ((`key` + ("`" + ` prop of\n * the transition child as you change its content, this will cause\n * `)) + (("`" + `TransitionGroup`) + ("`" + ` to transition the child out and back in.\n */\n children: _propTypes.default.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: _propTypes.default.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: _propTypes.default.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `)))))) + ((((("`" + (`cloneElement` + "`")) + (` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a ` + ("`" + `childFactory`))) + (("`" + (`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: _propTypes.default.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(TransitionGroup);\n\nexports.default = _default;\nmodule.exports = exports[\"default\"];", + "\"use strict\";\n\nvar _CSSTransition = _interopRequireDefault(require(\"./CSSTransition\"));\n\nvar _ReplaceTransition = _interopRequireDefault(require(\"./ReplaceTransition\"));\n\nvar _TransitionGroup = _interopRequireDefault(require(\"./TransitionGroup\"));\n\nvar _Transition = _interopRequireDefault(require(\"./Transition\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n Transition: _Transition.default,\n TransitionGroup: _TransitionGroup.default,\n ReplaceTransition: _ReplaceTransition.default,\n CSSTransition: _CSSTransition.default\n};", + "\"use strict\";\n\nexports.__esModule = true;\nexports.getChildMapping = getChildMapping;\nexports.mergeChildMappings = mergeChildMappings;\nexports.getInitialChildMapping = getInitialChildMapping;\nexports.getNextChildMapping = getNextChildMapping;\n\nvar _react = require(\"react\");\n\n/**\n * Given ` + "`")) + (`this.props.children` + ("`" + `, return an object mapping key to child.\n *\n * @param {*} children `)))) + ((("`" + (`this.props.children` + "`")) + (`\n * @return {object} Mapping of key to child\n */\nfunction getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) _react.Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * ` + ("`" + `ReactTransitionChildMapping.getChildMapping()`))) + (("`" + (`.\n * @param {object} next next children as returned from\n * ` + "`")) + ((`ReactTransitionChildMapping.getChildMapping()` + "`") + (`.\n * @return {object} a key set that contains all keys in ` + "`"))))) + ((((`prev` + ("`" + ` and all keys\n * in `)) + ("`" + (`next` + "`"))) + ((` in a reasonable order.\n */\n\n\nfunction mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of ` + ("`" + `next`)) + ("`" + (`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in ` + "`")))) + (((`next` + ("`" + `\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nfunction getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\n\nfunction getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!(0, _react.isValidElement)(child)) return;\n var hasPrev = key in prevChildMapping;\n var hasNext = key in nextChildMapping;\n var prevChild = prevChildMapping[key];\n var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = (0, _react.cloneElement)(child, {\n in: false\n });\n } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = (0, _react.cloneElement)(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}", + "\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;\n\nvar PropTypes = _interopRequireWildcard(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nvar _PropTypes = require(\"./utils/PropTypes\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar UNMOUNTED = 'unmounted';\nexports.UNMOUNTED = UNMOUNTED;\nvar EXITED = 'exited';\nexports.EXITED = EXITED;\nvar ENTERING = 'entering';\nexports.ENTERING = ENTERING;\nvar ENTERED = 'entered';\nexports.ENTERED = ENTERED;\nvar EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * By default the `)) + ("`" + (`Transition` + "`"))) + ((` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the components.\n * It's up to you to give meaning and effect to those states. For example we can\n * add styles to a component when it enters or exits:\n *\n * ` + ("`" + "`")) + (("`" + `jsx\n * import Transition from 'react-transition-group/Transition';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `) + ("`" + `opacity ${duration}ms ease-in-out`))))))) + (((((("`" + (`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 0 },\n * entered: { opacity: 1 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * \n * {(state) => (\n *
\n * I'm a fade Transition!\n *
\n * )}\n *
\n * );\n * ` + "`")) + ("`" + ("`" + `\n *\n * As noted the `))) + (("`" + (`Transition` + "`")) + (` component doesn't _do_ anything by itself to its child component.\n * What it does do is track transition states over time so you can update the\n * component (such as by adding styles or classes) when it changes states.\n *\n * There are 4 main states a Transition can be in:\n * - ` + ("`" + `'entering'`)))) + ((("`" + (`\n * - ` + "`")) + (`'entered'` + ("`" + `\n * - `))) + (("`" + (`'exiting'` + "`")) + (`\n * - ` + ("`" + `'exited'`))))) + (((("`" + (`\n *\n * Transition state is toggled via the ` + "`")) + (`in` + ("`" + ` prop. When `))) + (("`" + (`true` + "`")) + (` the component begins the\n * \"Enter\" stage. During this stage, the component will shift from its current transition state,\n * to ` + ("`" + `'entering'`)))) + ((("`" + (` for the duration of the transition and then to the ` + "`")) + (`'entered'` + ("`" + ` stage once\n * it's complete. Let's take the following example:\n *\n * `))) + (("`" + ("`" + "`")) + ((`jsx\n * state = { in: false };\n *\n * toggleEnterState = () => {\n * this.setState({ in: true });\n * }\n *\n * render() {\n * return (\n *
\n * \n * \n *
\n * );\n * }\n * ` + "`") + ("`" + "`")))))) + (((((`\n *\n * When the button is clicked the component will shift to the ` + ("`" + `'entering'`)) + ("`" + (` state and\n * stay there for 500ms (the value of ` + "`"))) + ((`timeout` + ("`" + `) before it finally switches to `)) + ("`" + (`'entered'` + "`")))) + (((`.\n *\n * When ` + ("`" + `in`)) + ("`" + (` is ` + "`"))) + ((`false` + ("`" + ` the same thing happens except the state moves from `)) + (("`" + `'exiting'`) + ("`" + ` to `))))) + (((("`" + (`'exited'` + "`")) + (`.\n *\n * ## Timing\n *\n * Timing is often the trickiest part of animation, mistakes can result in slight delays\n * that are hard to pin down. A common example is when you want to add an exit transition,\n * you should set the desired final styles when the state is ` + ("`" + `'exiting'`))) + (("`" + (`. That's when the\n * transition to those styles will start and, if you matched the ` + "`")) + (`timeout` + ("`" + ` prop with the\n * CSS Transition duration, it will end exactly when the state changes to `)))) + ((("`" + (`'exited'` + "`")) + (`.\n *\n * > **Note**: For simpler transitions the ` + ("`" + `Transition`))) + (("`" + (` component might be enough, but\n * > take into account that it's platform-agnostic, while the ` + "`")) + ((`CSSTransition` + "`") + (` component\n * > [forces reflows](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * > in order to make more complex transitions more predictable. For example, even though\n * > classes ` + "`")))))))) + (((((((`example-enter` + ("`" + ` and `)) + ("`" + (`example-enter-active` + "`"))) + ((` are applied immediately one after\n * > another, you can still transition from one to the other because of the forced reflow\n * > (read [this issue](https://github.com/reactjs/react-transition-group/issues/159#issuecomment-322761171)\n * > for more info). Take this into account when choosing between ` + ("`" + `Transition`)) + ("`" + (` and\n * > ` + "`")))) + (((`CSSTransition` + ("`" + `.\n */\n\nexports.EXITING = EXITING;\n\nvar Transition =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context.transitionGroup; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n var _proto = Transition.prototype;\n\n _proto.getChildContext = function getChildContext() {\n return {\n transitionGroup: null // allows for nested Transitions\n\n };\n };\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n }; // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n var node = _reactDom.default.findDOMNode(this);\n\n if (nextStatus === ENTERING) {\n this.performEnter(node, mounting);\n } else {\n this.performExit(node);\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(node, mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context.transitionGroup ? this.context.transitionGroup.isMounting : mounting;\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node);\n });\n return;\n }\n\n this.props.onEnter(node, appearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(node, appearing);\n\n _this2.onTransitionEnd(node, enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(node, appearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit(node) {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts(); // no exit animation skip right to EXITED\n\n if (!exit) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n return;\n }\n\n this.props.onExit(node);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(node);\n\n _this3.onTransitionEnd(node, timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(node);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(node, timeout, handler) {\n this.setNextCallback(handler);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n this.props.addEndListener(node, this.nextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\"]); // filter props for Transtition\n\n\n delete childProps.in;\n delete childProps.mountOnEnter;\n delete childProps.unmountOnExit;\n delete childProps.appear;\n delete childProps.enter;\n delete childProps.exit;\n delete childProps.timeout;\n delete childProps.addEndListener;\n delete childProps.onEnter;\n delete childProps.onEntering;\n delete childProps.onEntered;\n delete childProps.onExit;\n delete childProps.onExiting;\n delete childProps.onExited;\n\n if (typeof children === 'function') {\n return children(status, childProps);\n }\n\n var child = _react.default.Children.only(children);\n\n return _react.default.cloneElement(child, childProps);\n };\n\n return Transition;\n}(_react.default.Component);\n\nTransition.contextTypes = {\n transitionGroup: PropTypes.object\n};\nTransition.childContextTypes = {\n transitionGroup: function transitionGroup() {}\n};\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A `)) + ("`" + (`function` + "`"))) + ((` child can be used instead of a React element.\n * This function is called with the current transition status\n * ('entering', 'entered', 'exiting', 'exited', 'unmounted'), which can be used\n * to apply context specific props to a component.\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * \n * {(status) => (\n * \n * )}\n * \n * `)) + ("`" + ("`" + "`"))) + ((`\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent ` + ("`" + `Transition`)) + ("`" + (` component. If you want to \"lazy mount\" the component on the\n * first ` + "`")))) + (((`in={true}` + ("`" + ` you can set `)) + ("`" + (`mountOnEnter` + "`"))) + ((`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify ` + ("`" + `unmountOnExit`)) + (("`" + `.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `) + ("`" + `'exited'`)))))) + ((((("`" + (` state.\n * Set ` + "`")) + (`unmountOnExit` + ("`" + ` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * Normally a component is not transitioned if it is shown when the `))) + (("`" + (`` + "`")) + (` component mounts.\n * If you want to transition on the first mount set ` + ("`" + `appear`)))) + ((("`" + (` to ` + "`")) + (`true` + ("`" + `, and the\n * component will transition in as soon as the `))) + (("`" + (`` + "`")) + ((` mounts.\n *\n * > Note: there are no specific \"appear\" states. ` + "`") + (`appear` + "`"))))) + ((((` only adds an additional ` + ("`" + `enter`)) + ("`" + (` transition.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless ` + "`"))) + ((`addEndListener` + ("`" + ` is provided\n *\n * You may specify a single timeout for all transitions like: `)) + ("`" + (`timeout={500}` + "`")))) + (((`,\n * or individually like:\n *\n * ` + ("`" + "`")) + ("`" + (`jsx\n * timeout={{\n * enter: 300,\n * exit: 500,\n * appear: 500,\n * }}\n * ` + "`"))) + (("`" + ("`" + `\n *\n * If the value of `)) + (("`" + `appear`) + ("`" + ` is not set, then the value from enter is taken.\n *\n * If the `))))))) + (((((("`" + (`enter` + "`")) + (` or ` + ("`" + `exit`))) + (("`" + (` value is ` + "`")) + (`null` + ("`" + ` or `)))) + ((("`" + (`undefined` + "`")) + (`, then the timer is set to ` + ("`" + `0`))) + (("`" + (`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = process.env.NODE_ENV !== \"production\" ? _PropTypes.timeoutsShape : {};;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a ` + "`")) + ((`done` + "`") + (` callback. Allows for more fine grained transition end\n * logic. **Note:** Timeouts are still used as a fallback if provided.\n *\n * ` + "`"))))) + (((("`" + ("`" + `jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * `)) + ("`" + ("`" + "`"))) + ((`\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * ` + ("`" + `isAppearing`)) + ("`" + (` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * ` + "`")))) + (((`isAppearing` + ("`" + ` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `)) + ("`" + (`isAppearing` + "`"))) + ((` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func // Name the function so it is clearer in the documentation\n\n} : {};\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = 0;\nTransition.EXITED = 1;\nTransition.ENTERING = 2;\nTransition.ENTERED = 3;\nTransition.EXITING = 4;\n\nvar _default = (0, _reactLifecyclesCompat.polyfill)(Transition);\n\nexports.default = _default;", + "\"use strict\";\n\nexports.__esModule = true;\nexports.classNamesShape = exports.timeoutsShape = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({\n enter: _propTypes.default.number,\n exit: _propTypes.default.number,\n appear: _propTypes.default.number\n}).isRequired]) : null;\nexports.timeoutsShape = timeoutsShape;\nvar classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({\n enter: _propTypes.default.string,\n exit: _propTypes.default.string,\n active: _propTypes.default.string\n}), _propTypes.default.shape({\n enter: _propTypes.default.string,\n enterDone: _propTypes.default.string,\n enterActive: _propTypes.default.string,\n exit: _propTypes.default.string,\n exitDone: _propTypes.default.string,\n exitActive: _propTypes.default.string\n})]) : null;\nexports.classNamesShape = classNamesShape;", + "/** @license React v16.8.4\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.concurrent_mode\"):60111,y=n?Symbol.for(\"react.forward_ref\"):60112,z=n?Symbol.for(\"react.suspense\"):60113,aa=n?Symbol.for(\"react.memo\"):\n60115,ba=n?Symbol.for(\"react.lazy\"):60116,A=\"function\"===typeof Symbol&&Symbol.iterator;function ca(a,b,d,c,e,g,h,f){if(!a){a=void 0;if(void 0===b)a=Error(\"Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.\");else{var l=[d,c,e,g,h,f],m=0;a=Error(b.replace(/%s/g,function(){return l[m++]}));a.name=\"Invariant Violation\"}a.framesToPop=1;throw a;}}\nfunction B(a){for(var b=arguments.length-1,d=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;cP.length&&P.push(a)}\nfunction S(a,b,d,c){var e=typeof a;if(\"undefined\"===e||\"boolean\"===e)a=null;var g=!1;if(null===a)g=!0;else switch(e){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return d(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;h max) {\n validMin = max;\n validMax = min;\n }\n\n return [validMin, validMax];\n}\n/**\n * Calculate the step which is easy to understand between ticks, like 10, 20, 25\n *\n * @param {Decimal} roughStep The rough step calculated by deviding the\n * difference by the tickCount\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Integer} correctionFactor A correction factor\n * @return {Decimal} The step which is easy to understand between two ticks\n */\n\n\nfunction getFormatStep(roughStep, allowDecimals, correctionFactor) {\n if (roughStep.lte(0)) {\n return new _decimal.default(0);\n }\n\n var digitCount = _arithmetic.default.getDigitCount(roughStep.toNumber()); // The ratio between the rough step and the smallest number which has a bigger\n // order of magnitudes than the rough step\n\n\n var digitCountValue = new _decimal.default(10).pow(digitCount);\n var stepRatio = roughStep.div(digitCountValue); // When an integer and a float multiplied, the accuracy of result may be wrong\n\n var stepRatioScale = digitCount !== 1 ? 0.05 : 0.1;\n var amendStepRatio = new _decimal.default(Math.ceil(stepRatio.div(stepRatioScale).toNumber())).add(correctionFactor).mul(stepRatioScale);\n var formatStep = amendStepRatio.mul(digitCountValue);\n return allowDecimals ? formatStep : new _decimal.default(Math.ceil(formatStep));\n}\n/**\n * calculate the ticks when the minimum value equals to the maximum value\n *\n * @param {Number} value The minimum valuue which is also the maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickOfSingleValue(value, tickCount, allowDecimals) {\n var step = 1; // calculate the middle value of ticks\n\n var middle = new _decimal.default(value);\n\n if (!middle.isint() && allowDecimals) {\n var absVal = Math.abs(value);\n\n if (absVal < 1) {\n // The step should be a float number when the difference is smaller than 1\n step = new _decimal.default(10).pow(_arithmetic.default.getDigitCount(value) - 1);\n middle = new _decimal.default(Math.floor(middle.div(step).toNumber())).mul(step);\n } else if (absVal > 1) {\n // Return the maximum integer which is smaller than 'value' when 'value' is greater than 1\n middle = new _decimal.default(Math.floor(value));\n }\n } else if (value === 0) {\n middle = new _decimal.default(Math.floor((tickCount - 1) / 2));\n } else if (!allowDecimals) {\n middle = new _decimal.default(Math.floor(value));\n }\n\n var middleIndex = Math.floor((tickCount - 1) / 2);\n var fn = (0, _utils.compose)((0, _utils.map)(function (n) {\n return middle.add(new _decimal.default(n - middleIndex).mul(step)).toNumber();\n }), _utils.range);\n return fn(0, tickCount);\n}\n/**\n * Calculate the step\n *\n * @param {Number} min The minimum value of an interval\n * @param {Number} max The maximum value of an interval\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @param {Number} correctionFactor A correction factor\n * @return {Object} The step, minimum value of ticks, maximum value of ticks\n */\n\n\nfunction calculateStep(min, max, tickCount, allowDecimals) {\n var correctionFactor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n // dirty hack (for recharts' test)\n if (!Number.isFinite((max - min) / (tickCount - 1))) {\n return {\n step: new _decimal.default(0),\n tickMin: new _decimal.default(0),\n tickMax: new _decimal.default(0)\n };\n } // The step which is easy to understand between two ticks\n\n\n var step = getFormatStep(new _decimal.default(max).sub(min).div(tickCount - 1), allowDecimals, correctionFactor); // A medial value of ticks\n\n var middle; // When 0 is inside the interval, 0 should be a tick\n\n if (min <= 0 && max >= 0) {\n middle = new _decimal.default(0);\n } else {\n // calculate the middle value\n middle = new _decimal.default(min).add(max).div(2); // minus modulo value\n\n middle = middle.sub(new _decimal.default(middle).mod(step));\n }\n\n var belowCount = Math.ceil(middle.sub(min).div(step).toNumber());\n var upCount = Math.ceil(new _decimal.default(max).sub(middle).div(step).toNumber());\n var scaleCount = belowCount + upCount + 1;\n\n if (scaleCount > tickCount) {\n // When more ticks need to cover the interval, step should be bigger.\n return calculateStep(min, max, tickCount, allowDecimals, correctionFactor + 1);\n }\n\n if (scaleCount < tickCount) {\n // When less ticks can cover the interval, we should add some additional ticks\n upCount = max > 0 ? upCount + (tickCount - scaleCount) : upCount;\n belowCount = max > 0 ? belowCount : belowCount + (tickCount - scaleCount);\n }\n\n return {\n step: step,\n tickMin: middle.sub(new _decimal.default(belowCount).mul(step)),\n tickMax: middle.add(new _decimal.default(upCount).mul(step))\n };\n}\n/**\n * Calculate the ticks of an interval, the count of ticks will be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getNiceTickValuesFn(_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n min = _ref4[0],\n max = _ref4[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval = getValidInterval([min, max]),\n _getValidInterval2 = _slicedToArray(_getValidInterval, 2),\n cormin = _getValidInterval2[0],\n cormax = _getValidInterval2[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n var _values = cormax === Infinity ? [cormin].concat(_toConsumableArray((0, _utils.range)(0, tickCount - 1).map(function () {\n return Infinity;\n }))) : _toConsumableArray((0, _utils.range)(0, tickCount - 1).map(function () {\n return -Infinity;\n })).concat([cormax]);\n\n return min > max ? (0, _utils.reverse)(_values) : _values;\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n } // Get the step between two ticks\n\n\n var _calculateStep = calculateStep(cormin, cormax, count, allowDecimals),\n step = _calculateStep.step,\n tickMin = _calculateStep.tickMin,\n tickMax = _calculateStep.tickMax;\n\n var values = _arithmetic.default.rangeStep(tickMin, tickMax.add(new _decimal.default(0.1).mul(step)), step);\n\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFn(_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n min = _ref6[0],\n max = _ref6[1];\n\n var tickCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n // More than two ticks should be return\n var count = Math.max(tickCount, 2);\n\n var _getValidInterval3 = getValidInterval([min, max]),\n _getValidInterval4 = _slicedToArray(_getValidInterval3, 2),\n cormin = _getValidInterval4[0],\n cormax = _getValidInterval4[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return getTickOfSingleValue(cormin, tickCount, allowDecimals);\n }\n\n var step = getFormatStep(new _decimal.default(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n var fn = (0, _utils.compose)((0, _utils.map)(function (n) {\n return new _decimal.default(cormin).add(new _decimal.default(n).mul(step)).toNumber();\n }), _utils.range);\n var values = fn(0, count).filter(function (entry) {\n return entry >= cormin && entry <= cormax;\n });\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n/**\n * Calculate the ticks of an interval, the count of ticks won't be guraranteed,\n * but the domain will be guaranteed\n *\n * @param {Number} min, max min: The minimum value, max: The maximum value\n * @param {Integer} tickCount The count of ticks\n * @param {Boolean} allowDecimals Allow the ticks to be decimals or not\n * @return {Array} ticks\n */\n\n\nfunction getTickValuesFixedDomainFn(_ref7, tickCount) {\n var _ref8 = _slicedToArray(_ref7, 2),\n min = _ref8[0],\n max = _ref8[1];\n\n var allowDecimals = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n // More than two ticks should be return\n var _getValidInterval5 = getValidInterval([min, max]),\n _getValidInterval6 = _slicedToArray(_getValidInterval5, 2),\n cormin = _getValidInterval6[0],\n cormax = _getValidInterval6[1];\n\n if (cormin === -Infinity || cormax === Infinity) {\n return [min, max];\n }\n\n if (cormin === cormax) {\n return [cormin];\n }\n\n var count = Math.max(tickCount, 2);\n var step = getFormatStep(new _decimal.default(cormax).sub(cormin).div(count - 1), allowDecimals, 0);\n\n var values = _toConsumableArray(_arithmetic.default.rangeStep(new _decimal.default(cormin), new _decimal.default(cormax).sub(new _decimal.default(0.99).mul(step)), step)).concat([cormax]);\n\n return min > max ? (0, _utils.reverse)(values) : values;\n}\n\nvar getNiceTickValues = (0, _utils.memoize)(getNiceTickValuesFn);\nexports.getNiceTickValues = getNiceTickValues;\nvar getTickValues = (0, _utils.memoize)(getTickValuesFn);\nexports.getTickValues = getTickValues;\nvar getTickValuesFixedDomain = (0, _utils.memoize)(getTickValuesFixedDomainFn);\nexports.getTickValuesFixedDomain = getTickValuesFixedDomain;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"getTickValues\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getTickValues;\n }\n});\nObject.defineProperty(exports, \"getNiceTickValues\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getNiceTickValues;\n }\n});\nObject.defineProperty(exports, \"getTickValuesFixedDomain\", {\n enumerable: true,\n get: function get() {\n return _getNiceTickValues.getTickValuesFixedDomain;\n }\n});\n\nvar _getNiceTickValues = require(\"./getNiceTickValues\");", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _decimal = _interopRequireDefault(require(\"decimal.js-light\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @fileOverview 一些公用的运算方法\n * @author xile611\n * @date 2015-09-17\n */\n\n/**\n * 获取数值的位数\n * 其中绝对值属于区间[0.1, 1), 得到的值为0\n * 绝对值属于区间[0.01, 0.1),得到的位数为 -1\n * 绝对值属于区间[0.001, 0.01),得到的位数为 -2\n *\n * @param {Number} value 数值\n * @return {Integer} 位数\n */\nfunction getDigitCount(value) {\n var result;\n\n if (value === 0) {\n result = 1;\n } else {\n result = Math.floor(new _decimal.default(value).abs().log(10).toNumber()) + 1;\n }\n\n return result;\n}\n/**\n * 按照固定的步长获取[start, end)这个区间的数据\n * 并且需要处理js计算精度的问题\n *\n * @param {Decimal} start 起点\n * @param {Decimal} end 终点,不包含该值\n * @param {Decimal} step 步长\n * @return {Array} 若干数值\n */\n\n\nfunction rangeStep(start, end, step) {\n var num = new _decimal.default(start);\n var result = [];\n\n while (num.lt(end)) {\n result.push(num.toNumber());\n num = num.add(step);\n }\n\n return result;\n}\n/**\n * 对数值进行线性插值\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} t [0, 1]内的某个值\n * @return {Number} 定义域内的某个值\n */\n\n\nvar interpolateNumber = (0, _utils.curry)(function (a, b, t) {\n var newA = +a;\n var newB = +b;\n return newA + t * (newB - newA);\n});\n/**\n * 线性插值的逆运算\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个范围内时,返回值属于[0, 1]\n */\n\nvar uninterpolateNumber = (0, _utils.curry)(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return (x - a) / diff;\n});\n/**\n * 线性插值的逆运算,并且有截断的操作\n *\n * @param {Number} a 定义域的极点\n * @param {Number} b 定义域的极点\n * @param {Number} x 可以认为是插值后的一个输出值\n * @return {Number} 当x在 a ~ b这个区间内时,返回值属于[0, 1],\n * 当x不在 a ~ b这个区间时,会截断到 a ~ b 这个区间\n */\n\nvar uninterpolateTruncation = (0, _utils.curry)(function (a, b, x) {\n var diff = b - +a;\n diff = diff || Infinity;\n return Math.max(0, Math.min(1, (x - a) / diff));\n});\nvar _default = {\n rangeStep: rangeStep,\n getDigitCount: getDigitCount,\n interpolateNumber: interpolateNumber,\n uninterpolateNumber: uninterpolateNumber,\n uninterpolateTruncation: uninterpolateTruncation\n};\nexports.default = _default;", + "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.memoize = exports.reverse = exports.compose = exports.map = exports.range = exports.curry = exports.PLACE_HOLDER = void 0;\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nvar identity = function identity(i) {\n return i;\n};\n\nvar PLACE_HOLDER = {\n '@@functional/placeholder': true\n};\nexports.PLACE_HOLDER = PLACE_HOLDER;\n\nvar isPlaceHolder = function isPlaceHolder(val) {\n return val === PLACE_HOLDER;\n};\n\nvar curry0 = function curry0(fn) {\n return function _curried() {\n if (arguments.length === 0 || arguments.length === 1 && isPlaceHolder(arguments.length <= 0 ? undefined : arguments[0])) {\n return _curried;\n }\n\n return fn.apply(void 0, arguments);\n };\n};\n\nvar curryN = function curryN(n, fn) {\n if (n === 1) {\n return fn;\n }\n\n return curry0(function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var argsLength = args.filter(function (arg) {\n return arg !== PLACE_HOLDER;\n }).length;\n\n if (argsLength >= n) {\n return fn.apply(void 0, args);\n }\n\n return curryN(n - argsLength, curry0(function () {\n for (var _len2 = arguments.length, restArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n restArgs[_key2] = arguments[_key2];\n }\n\n var newArgs = args.map(function (arg) {\n return isPlaceHolder(arg) ? restArgs.shift() : arg;\n });\n return fn.apply(void 0, _toConsumableArray(newArgs).concat(restArgs));\n }));\n });\n};\n\nvar curry = function curry(fn) {\n return curryN(fn.length, fn);\n};\n\nexports.curry = curry;\n\nvar range = function range(begin, end) {\n var arr = [];\n\n for (var i = begin; i < end; ++i) {\n arr[i - begin] = i;\n }\n\n return arr;\n};\n\nexports.range = range;\nvar map = curry(function (fn, arr) {\n if (Array.isArray(arr)) {\n return arr.map(fn);\n }\n\n return Object.keys(arr).map(function (key) {\n return arr[key];\n }).map(fn);\n});\nexports.map = map;\n\nvar compose = function compose() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n if (!args.length) {\n return identity;\n }\n\n var fns = args.reverse(); // first function can receive multiply arguments\n\n var firstFn = fns[0];\n var tailsFn = fns.slice(1);\n return function () {\n return tailsFn.reduce(function (res, fn) {\n return fn(res);\n }, firstFn.apply(void 0, arguments));\n };\n};\n\nexports.compose = compose;\n\nvar reverse = function reverse(arr) {\n if (Array.isArray(arr)) {\n return arr.reverse();\n } // can be string\n\n\n return arr.split('').reverse.join('');\n};\n\nexports.reverse = reverse;\n\nvar memoize = function memoize(fn) {\n var lastArgs = null;\n var lastResult = null;\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n if (lastArgs && args.every(function (val, i) {\n return val === lastArgs[i];\n })) {\n return lastResult;\n }\n\n lastArgs = args;\n lastResult = fn.apply(void 0, args);\n return lastResult;\n };\n};\n\nexports.memoize = memoize;", + "import _isEqual from \"lodash/isEqual\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\nimport _isArray from \"lodash/isArray\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Area\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Animate from 'react-smooth';\nimport Curve from '../shape/Curve';\nimport Dot from '../shape/Dot';\nimport Layer from '../container/Layer';\nimport LabelList from '../component/LabelList';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, LEGEND_TYPES, getPresentationAttributes, isSsr, filterEventAttributes } from '../util/ReactUtils';\nimport { isNumber, uniqueId, interpolateNumber } from '../util/DataUtils';\nimport { getCateCoordinateOfLine, getValueByDataKey } from '../util/ChartUtils';\n\nvar Area = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Area, _Component);\n\n function Area() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Area);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Area)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n isAnimationFinished: true\n };\n _this.id = uniqueId('recharts-area-');\n\n _this.cachePrevData = function (points, baseLine) {\n _this.setState({\n prevPoints: points,\n prevBaseLine: baseLine\n });\n };\n\n _this.handleAnimationEnd = function () {\n var onAnimationEnd = _this.props.onAnimationEnd;\n\n _this.setState({\n isAnimationFinished: true\n });\n\n if (_isFunction(onAnimationEnd)) {\n onAnimationEnd();\n }\n };\n\n _this.handleAnimationStart = function () {\n var onAnimationStart = _this.props.onAnimationStart;\n\n _this.setState({\n isAnimationFinished: false\n });\n\n if (_isFunction(onAnimationStart)) {\n onAnimationStart();\n }\n };\n\n return _this;\n }\n\n _createClass(Area, [{\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this$props = this.props,\n animationId = _this$props.animationId,\n points = _this$props.points,\n baseLine = _this$props.baseLine;\n\n if (nextProps.animationId !== animationId) {\n this.cachePrevData(points, baseLine);\n }\n }\n }, {\n key: \"renderDots\",\n value: function renderDots(needClip, clipPathId) {\n var _this2 = this;\n\n var isAnimationActive = this.props.isAnimationActive;\n var isAnimationFinished = this.state.isAnimationFinished;\n\n if (isAnimationActive && !isAnimationFinished) {\n return null;\n }\n\n var _this$props2 = this.props,\n dot = _this$props2.dot,\n points = _this$props2.points,\n dataKey = _this$props2.dataKey;\n var areaProps = getPresentationAttributes(this.props);\n var customDotProps = getPresentationAttributes(dot);\n var dotEvents = filterEventAttributes(dot);\n var dots = points.map(function (entry, i) {\n var dotProps = _objectSpread({\n key: \"dot-\".concat(i),\n r: 3\n }, areaProps, customDotProps, dotEvents, {\n dataKey: dataKey,\n cx: entry.x,\n cy: entry.y,\n index: i,\n value: entry.value,\n payload: entry.payload\n });\n\n return _this2.constructor.renderDotItem(dot, dotProps);\n });\n var dotsProps = {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n };\n return React.createElement(Layer, _extends({\n className: \"recharts-area-dots\"\n }, dotsProps), dots);\n }\n }, {\n key: \"renderHorizontalRect\",\n value: function renderHorizontalRect(alpha) {\n var _this$props3 = this.props,\n baseLine = _this$props3.baseLine,\n points = _this$props3.points,\n strokeWidth = _this$props3.strokeWidth;\n var startX = points[0].x;\n var endX = points[points.length - 1].x;\n var width = alpha * Math.abs(startX - endX);\n var maxY = Math.max.apply(null, points.map(function (entry) {\n return entry.y || 0;\n }));\n\n if (isNumber(baseLine)) {\n maxY = Math.max(baseLine, maxY);\n } else if (baseLine && _isArray(baseLine) && baseLine.length) {\n maxY = Math.max(Math.max.apply(null, baseLine.map(function (entry) {\n return entry.y || 0;\n })), maxY);\n }\n\n if (isNumber(maxY)) {\n return React.createElement(\"rect\", {\n x: startX < endX ? startX : startX - width,\n y: 0,\n width: width,\n height: parseInt(maxY + (strokeWidth || 1), 10)\n });\n }\n\n return null;\n }\n }, {\n key: \"renderVerticalRect\",\n value: function renderVerticalRect(alpha) {\n var _this$props4 = this.props,\n baseLine = _this$props4.baseLine,\n points = _this$props4.points,\n strokeWidth = _this$props4.strokeWidth;\n var startY = points[0].y;\n var endY = points[points.length - 1].y;\n var height = alpha * Math.abs(startY - endY);\n var maxX = Math.max.apply(null, points.map(function (entry) {\n return entry.x || 0;\n }));\n\n if (isNumber(baseLine)) {\n maxX = Math.max(baseLine, maxX);\n } else if (baseLine && _isArray(baseLine) && baseLine.length) {\n maxX = Math.max(Math.max.apply(null, baseLine.map(function (entry) {\n return entry.x || 0;\n })), maxX);\n }\n\n if (isNumber(maxX)) {\n return React.createElement(\"rect\", {\n x: 0,\n y: startY < endY ? startY : startY - height,\n width: maxX + (strokeWidth || 1),\n height: parseInt(height, 10)\n });\n }\n\n return null;\n }\n }, {\n key: \"renderClipRect\",\n value: function renderClipRect(alpha) {\n var layout = this.props.layout;\n\n if (layout === 'vertical') {\n return this.renderVerticalRect(alpha);\n }\n\n return this.renderHorizontalRect(alpha);\n }\n }, {\n key: \"renderAreaStatically\",\n value: function renderAreaStatically(points, baseLine, needClip, clipPathId) {\n var _this$props5 = this.props,\n layout = _this$props5.layout,\n type = _this$props5.type,\n stroke = _this$props5.stroke,\n connectNulls = _this$props5.connectNulls,\n isRange = _this$props5.isRange;\n return React.createElement(Layer, {\n clipPath: needClip ? \"url(#clipPath-\".concat(clipPathId, \")\") : null\n }, React.createElement(Curve, _extends({}, this.props, {\n points: points,\n baseLine: baseLine,\n stroke: \"none\",\n className: \"recharts-area-area\"\n })), stroke !== 'none' && React.createElement(Curve, _extends({}, getPresentationAttributes(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: points\n })), stroke !== 'none' && isRange && React.createElement(Curve, _extends({}, getPresentationAttributes(this.props), {\n className: \"recharts-area-curve\",\n layout: layout,\n type: type,\n connectNulls: connectNulls,\n fill: \"none\",\n points: baseLine\n })));\n }\n }, {\n key: \"renderAreaWithAnimation\",\n value: function renderAreaWithAnimation(needClip, clipPathId) {\n var _this3 = this;\n\n var _this$props6 = this.props,\n points = _this$props6.points,\n baseLine = _this$props6.baseLine,\n isAnimationActive = _this$props6.isAnimationActive,\n animationBegin = _this$props6.animationBegin,\n animationDuration = _this$props6.animationDuration,\n animationEasing = _this$props6.animationEasing,\n animationId = _this$props6.animationId;\n var _this$state = this.state,\n prevPoints = _this$state.prevPoints,\n prevBaseLine = _this$state.prevBaseLine; // const clipPathId = _.isNil(id) ? this.id : id;\n\n return React.createElement(Animate, {\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing,\n from: {\n t: 0\n },\n to: {\n t: 1\n },\n key: \"area-\".concat(animationId),\n onAnimationEnd: this.handleAnimationEnd,\n onAnimationStart: this.handleAnimationStart\n }, function (_ref) {\n var t = _ref.t;\n\n if (prevPoints) {\n var prevPointsDiffFactor = prevPoints.length / points.length; // update animtaion\n\n var stepPoints = points.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n\n if (prevPoints[prevPointIndex]) {\n var prev = prevPoints[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread({}, entry, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n\n return entry;\n });\n var stepBaseLine;\n\n if (isNumber(baseLine)) {\n var interpolator = interpolateNumber(prevBaseLine, baseLine);\n stepBaseLine = interpolator(t);\n } else if (_isNil(baseLine) || _isNaN(baseLine)) {\n var _interpolator = interpolateNumber(prevBaseLine, 0);\n\n stepBaseLine = _interpolator(t);\n } else {\n stepBaseLine = baseLine.map(function (entry, index) {\n var prevPointIndex = Math.floor(index * prevPointsDiffFactor);\n\n if (prevBaseLine[prevPointIndex]) {\n var prev = prevBaseLine[prevPointIndex];\n var interpolatorX = interpolateNumber(prev.x, entry.x);\n var interpolatorY = interpolateNumber(prev.y, entry.y);\n return _objectSpread({}, entry, {\n x: interpolatorX(t),\n y: interpolatorY(t)\n });\n }\n\n return entry;\n });\n }\n\n return _this3.renderAreaStatically(stepPoints, stepBaseLine, needClip, clipPathId);\n }\n\n return React.createElement(Layer, null, React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: \"animationClipPath-\".concat(clipPathId)\n }, _this3.renderClipRect(t))), React.createElement(Layer, {\n clipPath: \"url(#animationClipPath-\".concat(clipPathId, \")\")\n }, _this3.renderAreaStatically(points, baseLine, needClip, clipPathId)));\n });\n }\n }, {\n key: \"renderArea\",\n value: function renderArea(needClip, clipPathId) {\n var _this$props7 = this.props,\n points = _this$props7.points,\n baseLine = _this$props7.baseLine,\n isAnimationActive = _this$props7.isAnimationActive;\n var _this$state2 = this.state,\n prevPoints = _this$state2.prevPoints,\n prevBaseLine = _this$state2.prevBaseLine,\n totalLength = _this$state2.totalLength;\n\n if (isAnimationActive && points && points.length && (!prevPoints && totalLength > 0 || !_isEqual(prevPoints, points) || !_isEqual(prevBaseLine, baseLine))) {\n return this.renderAreaWithAnimation(needClip, clipPathId);\n }\n\n return this.renderAreaStatically(points, baseLine, needClip, clipPathId);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props8 = this.props,\n hide = _this$props8.hide,\n dot = _this$props8.dot,\n points = _this$props8.points,\n className = _this$props8.className,\n top = _this$props8.top,\n left = _this$props8.left,\n xAxis = _this$props8.xAxis,\n yAxis = _this$props8.yAxis,\n width = _this$props8.width,\n height = _this$props8.height,\n isAnimationActive = _this$props8.isAnimationActive,\n id = _this$props8.id;\n\n if (hide || !points || !points.length) {\n return null;\n }\n\n var isAnimationFinished = this.state.isAnimationFinished;\n var hasSinglePoint = points.length === 1;\n var layerClass = classNames('recharts-area', className);\n var needClip = xAxis && xAxis.allowDataOverflow || yAxis && yAxis.allowDataOverflow;\n var clipPathId = _isNil(id) ? this.id : id;\n return React.createElement(Layer, {\n className: layerClass\n }, needClip ? React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: \"clipPath-\".concat(clipPathId)\n }, React.createElement(\"rect\", {\n x: left,\n y: top,\n width: width,\n height: parseInt(height, 10)\n }))) : null, !hasSinglePoint ? this.renderArea(needClip, clipPathId) : null, (dot || hasSinglePoint) && this.renderDots(needClip, clipPathId), (!isAnimationActive || isAnimationFinished) && LabelList.renderCallByParent(this.props, points));\n }\n }]);\n\n return Area;\n}(Component), _class2.displayName = 'Area', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,\n type: PropTypes.oneOfType([PropTypes.oneOf(['basis', 'basisClosed', 'basisOpen', 'linear', 'linearClosed', 'natural', 'monotoneX', 'monotoneY', 'monotone', 'step', 'stepBefore', 'stepAfter']), PropTypes.func]),\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n yAxis: PropTypes.object,\n xAxis: PropTypes.object,\n stackId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n legendType: PropTypes.oneOf(LEGEND_TYPES),\n connectNulls: PropTypes.bool,\n activeDot: PropTypes.oneOfType([PropTypes.object, PropTypes.element, PropTypes.func, PropTypes.bool]),\n // dot configuration\n dot: PropTypes.oneOfType([PropTypes.func, PropTypes.element, PropTypes.object, PropTypes.bool]),\n label: PropTypes.oneOfType([PropTypes.func, PropTypes.element, PropTypes.object, PropTypes.bool]),\n hide: PropTypes.bool,\n // have curve configuration\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n baseLine: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n isRange: PropTypes.bool,\n points: PropTypes.arrayOf(PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.array])\n })),\n onAnimationStart: PropTypes.func,\n onAnimationEnd: PropTypes.func,\n animationId: PropTypes.number,\n isAnimationActive: PropTypes.bool,\n animationBegin: PropTypes.number,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']),\n id: PropTypes.string\n}), _class2.defaultProps = {\n stroke: '#3182bd',\n fill: '#3182bd',\n fillOpacity: 0.6,\n xAxisId: 0,\n yAxisId: 0,\n legendType: 'line',\n connectNulls: false,\n // points of area\n points: [],\n dot: false,\n activeDot: true,\n hide: false,\n isAnimationActive: !isSsr(),\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n}, _class2.getBaseValue = function (props, xAxis, yAxis) {\n var layout = props.layout,\n baseValue = props.baseValue;\n\n if (isNumber(baseValue)) {\n return baseValue;\n }\n\n var numericAxis = layout === 'horizontal' ? yAxis : xAxis;\n var domain = numericAxis.scale.domain();\n\n if (numericAxis.type === 'number') {\n var max = Math.max(domain[0], domain[1]);\n var min = Math.min(domain[0], domain[1]);\n\n if (baseValue === 'dataMin') {\n return min;\n }\n\n if (baseValue === 'dataMax') {\n return max;\n }\n\n return max < 0 ? max : Math.max(Math.min(domain[0], domain[1]), 0);\n }\n\n if (baseValue === 'dataMin') {\n return domain[0];\n }\n\n if (baseValue === 'dataMax') {\n return domain[1];\n }\n\n return domain[0];\n}, _class2.getComposedData = function (_ref2) {\n var props = _ref2.props,\n xAxis = _ref2.xAxis,\n yAxis = _ref2.yAxis,\n xAxisTicks = _ref2.xAxisTicks,\n yAxisTicks = _ref2.yAxisTicks,\n bandSize = _ref2.bandSize,\n dataKey = _ref2.dataKey,\n stackedData = _ref2.stackedData,\n dataStartIndex = _ref2.dataStartIndex,\n displayedData = _ref2.displayedData,\n offset = _ref2.offset;\n var layout = props.layout;\n var hasStack = stackedData && stackedData.length;\n var baseValue = Area.getBaseValue(props, xAxis, yAxis);\n var isRange = false;\n var points = displayedData.map(function (entry, index) {\n var value;\n\n if (hasStack) {\n value = stackedData[dataStartIndex + index];\n } else {\n value = getValueByDataKey(entry, dataKey);\n\n if (!_isArray(value)) {\n value = [baseValue, value];\n } else {\n isRange = true;\n }\n }\n\n if (layout === 'horizontal') {\n return {\n x: getCateCoordinateOfLine({\n axis: xAxis,\n ticks: xAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n y: _isNil(value[1]) ? null : yAxis.scale(value[1]),\n value: value,\n payload: entry\n };\n }\n\n return {\n x: _isNil(value[1]) ? null : xAxis.scale(value[1]),\n y: getCateCoordinateOfLine({\n axis: yAxis,\n ticks: yAxisTicks,\n bandSize: bandSize,\n entry: entry,\n index: index\n }),\n value: value,\n payload: entry\n };\n });\n var baseLine;\n\n if (hasStack || isRange) {\n baseLine = points.map(function (entry) {\n if (layout === 'horizontal') {\n return {\n x: entry.x,\n y: !_isNil(_get(entry, 'value[0]')) ? yAxis.scale(_get(entry, 'value[0]')) : null\n };\n }\n\n return {\n x: !_isNil(_get(entry, 'value[0]')) ? xAxis.scale(_get(entry, 'value[0]')) : null,\n y: entry.y\n };\n });\n } else if (layout === 'horizontal') {\n baseLine = yAxis.scale(baseValue);\n } else {\n baseLine = xAxis.scale(baseValue);\n }\n\n return _objectSpread({\n points: points,\n baseLine: baseLine,\n layout: layout,\n isRange: isRange\n }, offset);\n}, _class2.renderDotItem = function (option, props) {\n var dotItem;\n\n if (React.isValidElement(option)) {\n dotItem = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n dotItem = option(props);\n } else {\n dotItem = React.createElement(Dot, _extends({}, props, {\n className: \"recharts-area-dot\"\n }));\n }\n\n return dotItem;\n}, _temp)) || _class;\n\nexport default Area;", + "function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar PREFIX_LIST = ['Webkit', 'Moz', 'O', 'ms'];\nexport var generatePrefixStyle = function generatePrefixStyle(name, value) {\n if (!name) {\n return null;\n }\n\n var camelName = name.replace(/(\\w)/, function (v) {\n return v.toUpperCase();\n });\n var result = PREFIX_LIST.reduce(function (res, entry) {\n return _objectSpread({}, res, _defineProperty({}, entry + camelName, value));\n }, {});\n result[name] = value;\n return result;\n};", + "import _range from \"lodash/range\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\n/**\n * @fileOverview Brush\n */\nimport React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { scalePoint } from 'd3-scale';\nimport { getValueByDataKey } from '../util/ChartUtils';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Text from '../component/Text';\nimport { isNumber } from '../util/DataUtils';\nimport { generatePrefixStyle } from '../util/CssPrefixUtils';\n\nvar Brush = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Brush, _Component);\n\n function Brush(props) {\n var _this;\n\n _classCallCheck(this, Brush);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(Brush).call(this, props));\n\n _this.handleDrag = function (e) {\n if (_this.leaveTimer) {\n clearTimeout(_this.leaveTimer);\n _this.leaveTimer = null;\n }\n\n if (_this.state.isTravellerMoving) {\n _this.handleTravellerMove(e);\n } else if (_this.state.isSlideMoving) {\n _this.handleSlideDrag(e);\n }\n };\n\n _this.handleTouchMove = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleDrag(e.changedTouches[0]);\n }\n };\n\n _this.handleDragEnd = function () {\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: false\n });\n };\n\n _this.handleLeaveWrapper = function () {\n if (_this.state.isTravellerMoving || _this.state.isSlideMoving) {\n _this.leaveTimer = setTimeout(_this.handleDragEnd, _this.props.leaveTimeOut);\n }\n };\n\n _this.handleEnterSlideOrTraveller = function () {\n _this.setState({\n isTextActive: true\n });\n };\n\n _this.handleLeaveSlideOrTraveller = function () {\n _this.setState({\n isTextActive: false\n });\n };\n\n _this.handleSlideDragStart = function (e) {\n var event = e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n\n _this.setState({\n isTravellerMoving: false,\n isSlideMoving: true,\n slideMoveStartX: event.pageX\n });\n };\n\n _this.travellerDragStartHandlers = {\n startX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_assertThisInitialized(_this)), 'startX'),\n endX: _this.handleTravellerDragStart.bind(_assertThisInitialized(_assertThisInitialized(_this)), 'endX')\n };\n _this.state = props.data && props.data.length ? _this.updateScale(props) : {};\n return _this;\n }\n\n _createClass(Brush, [{\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var _this$props = this.props,\n data = _this$props.data,\n width = _this$props.width,\n x = _this$props.x,\n travellerWidth = _this$props.travellerWidth,\n updateId = _this$props.updateId;\n\n if ((nextProps.data !== data || nextProps.updateId !== updateId) && nextProps.data && nextProps.data.length) {\n this.setState(this.updateScale(nextProps));\n } else if (nextProps.width !== width || nextProps.x !== x || nextProps.travellerWidth !== travellerWidth) {\n this.scale.range([nextProps.x, nextProps.x + nextProps.width - nextProps.travellerWidth]);\n this.scaleValues = this.scale.domain().map(function (entry) {\n return _this2.scale(entry);\n });\n this.setState({\n startX: this.scale(nextProps.startIndex),\n endX: this.scale(nextProps.endIndex)\n });\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.scale = null;\n this.scaleValues = null;\n\n if (this.leaveTimer) {\n clearTimeout(this.leaveTimer);\n this.leaveTimer = null;\n }\n }\n }, {\n key: \"getIndex\",\n value: function getIndex(_ref) {\n var startX = _ref.startX,\n endX = _ref.endX;\n var _this$props2 = this.props,\n gap = _this$props2.gap,\n data = _this$props2.data;\n var lastIndex = data.length - 1;\n var min = Math.min(startX, endX);\n var max = Math.max(startX, endX);\n var minIndex = this.constructor.getIndexInRange(this.scaleValues, min);\n var maxIndex = this.constructor.getIndexInRange(this.scaleValues, max);\n return {\n startIndex: minIndex - minIndex % gap,\n endIndex: maxIndex === lastIndex ? lastIndex : maxIndex - maxIndex % gap\n };\n }\n }, {\n key: \"getTextOfTick\",\n value: function getTextOfTick(index) {\n var _this$props3 = this.props,\n data = _this$props3.data,\n tickFormatter = _this$props3.tickFormatter,\n dataKey = _this$props3.dataKey;\n var text = getValueByDataKey(data[index], dataKey, index);\n return _isFunction(tickFormatter) ? tickFormatter(text) : text;\n }\n }, {\n key: \"handleSlideDrag\",\n value: function handleSlideDrag(e) {\n var _this$state = this.state,\n slideMoveStartX = _this$state.slideMoveStartX,\n startX = _this$state.startX,\n endX = _this$state.endX;\n var _this$props4 = this.props,\n x = _this$props4.x,\n width = _this$props4.width,\n travellerWidth = _this$props4.travellerWidth,\n startIndex = _this$props4.startIndex,\n endIndex = _this$props4.endIndex,\n onChange = _this$props4.onChange;\n var delta = e.pageX - slideMoveStartX;\n\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - endX, x + width - travellerWidth - startX);\n } else if (delta < 0) {\n delta = Math.max(delta, x - startX, x - endX);\n }\n\n var newIndex = this.getIndex({\n startX: startX + delta,\n endX: endX + delta\n });\n\n if ((newIndex.startIndex !== startIndex || newIndex.endIndex !== endIndex) && onChange) {\n onChange(newIndex);\n }\n\n this.setState({\n startX: startX + delta,\n endX: endX + delta,\n slideMoveStartX: e.pageX\n });\n }\n }, {\n key: \"handleTravellerDragStart\",\n value: function handleTravellerDragStart(id, e) {\n var event = e.changedTouches && e.changedTouches.length ? e.changedTouches[0] : e;\n this.setState({\n isSlideMoving: false,\n isTravellerMoving: true,\n movingTravellerId: id,\n brushMoveStartX: event.pageX\n });\n }\n }, {\n key: \"handleTravellerMove\",\n value: function handleTravellerMove(e) {\n var _this$setState;\n\n var _this$state2 = this.state,\n brushMoveStartX = _this$state2.brushMoveStartX,\n movingTravellerId = _this$state2.movingTravellerId,\n endX = _this$state2.endX,\n startX = _this$state2.startX;\n var prevValue = this.state[movingTravellerId];\n var _this$props5 = this.props,\n x = _this$props5.x,\n width = _this$props5.width,\n travellerWidth = _this$props5.travellerWidth,\n onChange = _this$props5.onChange,\n gap = _this$props5.gap,\n data = _this$props5.data;\n var params = {\n startX: this.state.startX,\n endX: this.state.endX\n };\n var delta = e.pageX - brushMoveStartX;\n\n if (delta > 0) {\n delta = Math.min(delta, x + width - travellerWidth - prevValue);\n } else if (delta < 0) {\n delta = Math.max(delta, x - prevValue);\n }\n\n params[movingTravellerId] = prevValue + delta;\n var newIndex = this.getIndex(params);\n var startIndex = newIndex.startIndex,\n endIndex = newIndex.endIndex;\n\n var isFullGap = function isFullGap() {\n var lastIndex = data.length - 1;\n\n if (movingTravellerId === 'startX' && (endX > startX ? startIndex % gap === 0 : endIndex % gap === 0) || endX < startX && endIndex === lastIndex || movingTravellerId === 'endX' && (endX > startX ? endIndex % gap === 0 : startIndex % gap === 0) || endX > startX && endIndex === lastIndex) {\n return true;\n }\n\n return false;\n };\n\n this.setState((_this$setState = {}, _defineProperty(_this$setState, movingTravellerId, prevValue + delta), _defineProperty(_this$setState, \"brushMoveStartX\", e.pageX), _this$setState), function () {\n if (onChange) {\n if (isFullGap()) {\n onChange(newIndex);\n }\n }\n });\n }\n }, {\n key: \"updateScale\",\n value: function updateScale(props) {\n var _this3 = this;\n\n var data = props.data,\n startIndex = props.startIndex,\n endIndex = props.endIndex,\n x = props.x,\n width = props.width,\n travellerWidth = props.travellerWidth;\n var len = data.length;\n this.scale = scalePoint().domain(_range(0, len)).range([x, x + width - travellerWidth]);\n this.scaleValues = this.scale.domain().map(function (entry) {\n return _this3.scale(entry);\n });\n return {\n isTextActive: false,\n isSlideMoving: false,\n isTravellerMoving: false,\n startX: this.scale(startIndex),\n endX: this.scale(endIndex)\n };\n }\n }, {\n key: \"renderBackground\",\n value: function renderBackground() {\n var _this$props6 = this.props,\n x = _this$props6.x,\n y = _this$props6.y,\n width = _this$props6.width,\n height = _this$props6.height,\n fill = _this$props6.fill,\n stroke = _this$props6.stroke;\n return React.createElement(\"rect\", {\n stroke: stroke,\n fill: fill,\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n }, {\n key: \"renderPanorama\",\n value: function renderPanorama() {\n var _this$props7 = this.props,\n x = _this$props7.x,\n y = _this$props7.y,\n width = _this$props7.width,\n height = _this$props7.height,\n data = _this$props7.data,\n children = _this$props7.children,\n padding = _this$props7.padding;\n var chartElement = Children.only(children);\n\n if (!chartElement) {\n return null;\n }\n\n return React.cloneElement(chartElement, {\n x: x,\n y: y,\n width: width,\n height: height,\n margin: padding,\n compact: true,\n data: data\n });\n }\n }, {\n key: \"renderTraveller\",\n value: function renderTraveller(travellerX, id) {\n var _this$props8 = this.props,\n y = _this$props8.y,\n travellerWidth = _this$props8.travellerWidth,\n height = _this$props8.height,\n stroke = _this$props8.stroke;\n var lineY = Math.floor(y + height / 2) - 1;\n var x = Math.max(travellerX, this.props.x);\n return React.createElement(Layer, {\n className: \"recharts-brush-traveller\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.travellerDragStartHandlers[id],\n onTouchStart: this.travellerDragStartHandlers[id],\n style: {\n cursor: 'col-resize'\n }\n }, React.createElement(\"rect\", {\n x: x,\n y: y,\n width: travellerWidth,\n height: height,\n fill: stroke,\n stroke: \"none\"\n }), React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY,\n x2: x + travellerWidth - 1,\n y2: lineY,\n fill: \"none\",\n stroke: \"#fff\"\n }), React.createElement(\"line\", {\n x1: x + 1,\n y1: lineY + 2,\n x2: x + travellerWidth - 1,\n y2: lineY + 2,\n fill: \"none\",\n stroke: \"#fff\"\n }));\n }\n }, {\n key: \"renderSlide\",\n value: function renderSlide(startX, endX) {\n var _this$props9 = this.props,\n y = _this$props9.y,\n height = _this$props9.height,\n stroke = _this$props9.stroke;\n return React.createElement(\"rect\", {\n className: \"recharts-brush-slide\",\n onMouseEnter: this.handleEnterSlideOrTraveller,\n onMouseLeave: this.handleLeaveSlideOrTraveller,\n onMouseDown: this.handleSlideDragStart,\n onTouchStart: this.handleSlideDragStart,\n style: {\n cursor: 'move'\n },\n stroke: \"none\",\n fill: stroke,\n fillOpacity: 0.2,\n x: Math.min(startX, endX),\n y: y,\n width: Math.abs(endX - startX),\n height: height\n });\n }\n }, {\n key: \"renderText\",\n value: function renderText() {\n var _this$props10 = this.props,\n startIndex = _this$props10.startIndex,\n endIndex = _this$props10.endIndex,\n y = _this$props10.y,\n height = _this$props10.height,\n travellerWidth = _this$props10.travellerWidth,\n stroke = _this$props10.stroke;\n var _this$state3 = this.state,\n startX = _this$state3.startX,\n endX = _this$state3.endX;\n var offset = 5;\n var attrs = {\n pointerEvents: 'none',\n fill: stroke\n };\n return React.createElement(Layer, {\n className: \"recharts-brush-texts\"\n }, React.createElement(Text, _extends({\n textAnchor: \"end\",\n verticalAnchor: \"middle\",\n x: Math.min(startX, endX) - offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(startIndex)), React.createElement(Text, _extends({\n textAnchor: \"start\",\n verticalAnchor: \"middle\",\n x: Math.max(startX, endX) + travellerWidth + offset,\n y: y + height / 2\n }, attrs), this.getTextOfTick(endIndex)));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props11 = this.props,\n data = _this$props11.data,\n className = _this$props11.className,\n children = _this$props11.children,\n x = _this$props11.x,\n y = _this$props11.y,\n width = _this$props11.width,\n height = _this$props11.height;\n var _this$state4 = this.state,\n startX = _this$state4.startX,\n endX = _this$state4.endX,\n isTextActive = _this$state4.isTextActive,\n isSlideMoving = _this$state4.isSlideMoving,\n isTravellerMoving = _this$state4.isTravellerMoving;\n\n if (!data || !data.length || !isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || width <= 0 || height <= 0) {\n return null;\n }\n\n var layerClass = classNames('recharts-brush', className);\n var isPanoramic = React.Children.count(children) === 1;\n var style = generatePrefixStyle('userSelect', 'none');\n return React.createElement(Layer, {\n className: layerClass,\n onMouseMove: this.handleDrag,\n onMouseLeave: this.handleLeaveWrapper,\n onMouseUp: this.handleDragEnd,\n onTouchEnd: this.handleDragEnd,\n onTouchMove: this.handleTouchMove,\n style: style\n }, this.renderBackground(), isPanoramic && this.renderPanorama(), this.renderSlide(startX, endX), this.renderTraveller(startX, 'startX'), this.renderTraveller(endX, 'endX'), (isTextActive || isSlideMoving || isTravellerMoving) && this.renderText());\n }\n }], [{\n key: \"getIndexInRange\",\n value: function getIndexInRange(range, x) {\n var len = range.length;\n var start = 0;\n var end = len - 1;\n\n while (end - start > 1) {\n var middle = Math.floor((start + end) / 2);\n\n if (range[middle] > x) {\n end = middle;\n } else {\n start = middle;\n }\n }\n\n return x >= range[end] ? end : start;\n }\n }]);\n\n return Brush;\n}(Component), _class2.displayName = 'Brush', _class2.propTypes = {\n className: PropTypes.string,\n fill: PropTypes.string,\n stroke: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number.isRequired,\n travellerWidth: PropTypes.number,\n gap: PropTypes.number,\n padding: PropTypes.shape({\n top: PropTypes.number,\n right: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number\n }),\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n data: PropTypes.array,\n startIndex: PropTypes.number,\n endIndex: PropTypes.number,\n tickFormatter: PropTypes.func,\n children: PropTypes.node,\n onChange: PropTypes.func,\n updateId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n leaveTimeOut: PropTypes.number\n}, _class2.defaultProps = {\n height: 40,\n travellerWidth: 5,\n gap: 1,\n fill: '#fff',\n stroke: '#666',\n padding: {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n },\n leaveTimeOut: 1000\n}, _temp)) || _class;\n\nexport default Brush;", + "import _isFunction from \"lodash/isFunction\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Cartesian Axis\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { shallowEqual } from '../util/PureRender';\nimport { getStringSize } from '../util/DOMUtils';\nimport Layer from '../container/Layer';\nimport Text from '../component/Text';\nimport Label from '../component/Label';\nimport { isSsr, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventsOfChild } from '../util/ReactUtils';\nimport { isNumber, mathSign } from '../util/DataUtils';\n\nvar CartesianAxis =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(CartesianAxis, _Component);\n\n function CartesianAxis() {\n _classCallCheck(this, CartesianAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(CartesianAxis).apply(this, arguments));\n }\n\n _createClass(CartesianAxis, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(_ref, state) {\n var viewBox = _ref.viewBox,\n restProps = _objectWithoutProperties(_ref, [\"viewBox\"]);\n\n // props.viewBox is sometimes generated every time -\n // check that specially as object equality is likely to fail\n var _this$props = this.props,\n viewBoxOld = _this$props.viewBox,\n restPropsOld = _objectWithoutProperties(_this$props, [\"viewBox\"]);\n\n return !shallowEqual(viewBox, viewBoxOld) || !shallowEqual(restProps, restPropsOld) || !shallowEqual(state, this.state);\n }\n /**\n * Calculate the coordinates of endpoints in ticks\n * @param {Object} data The data of a simple tick\n * @return {Object} (x1, y1): The coordinate of endpoint close to tick text\n * (x2, y2): The coordinate of endpoint close to axis\n */\n\n }, {\n key: \"getTickLineCoord\",\n value: function getTickLineCoord(data) {\n var _this$props2 = this.props,\n x = _this$props2.x,\n y = _this$props2.y,\n width = _this$props2.width,\n height = _this$props2.height,\n orientation = _this$props2.orientation,\n tickSize = _this$props2.tickSize,\n mirror = _this$props2.mirror,\n tickMargin = _this$props2.tickMargin;\n var x1, x2, y1, y2, tx, ty;\n var sign = mirror ? -1 : 1;\n var finalTickSize = data.tickSize || tickSize;\n var tickCoord = isNumber(data.tickCoord) ? data.tickCoord : data.coordinate;\n\n switch (orientation) {\n case 'top':\n x1 = x2 = data.coordinate;\n y2 = y + !mirror * height;\n y1 = y2 - sign * finalTickSize;\n ty = y1 - sign * tickMargin;\n tx = tickCoord;\n break;\n\n case 'left':\n y1 = y2 = data.coordinate;\n x2 = x + !mirror * width;\n x1 = x2 - sign * finalTickSize;\n tx = x1 - sign * tickMargin;\n ty = tickCoord;\n break;\n\n case 'right':\n y1 = y2 = data.coordinate;\n x2 = x + mirror * width;\n x1 = x2 + sign * finalTickSize;\n tx = x1 + sign * tickMargin;\n ty = tickCoord;\n break;\n\n default:\n x1 = x2 = data.coordinate;\n y2 = y + mirror * height;\n y1 = y2 + sign * finalTickSize;\n ty = y1 + sign * tickMargin;\n tx = tickCoord;\n break;\n }\n\n return {\n line: {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n },\n tick: {\n x: tx,\n y: ty\n }\n };\n }\n }, {\n key: \"getTickTextAnchor\",\n value: function getTickTextAnchor() {\n var _this$props3 = this.props,\n orientation = _this$props3.orientation,\n mirror = _this$props3.mirror;\n var textAnchor;\n\n switch (orientation) {\n case 'left':\n textAnchor = mirror ? 'start' : 'end';\n break;\n\n case 'right':\n textAnchor = mirror ? 'end' : 'start';\n break;\n\n default:\n textAnchor = 'middle';\n break;\n }\n\n return textAnchor;\n }\n }, {\n key: \"getTickVerticalAnchor\",\n value: function getTickVerticalAnchor() {\n var _this$props4 = this.props,\n orientation = _this$props4.orientation,\n mirror = _this$props4.mirror;\n var verticalAnchor = 'end';\n\n switch (orientation) {\n case 'left':\n case 'right':\n verticalAnchor = 'middle';\n break;\n\n case 'top':\n verticalAnchor = mirror ? 'start' : 'end';\n break;\n\n default:\n verticalAnchor = mirror ? 'end' : 'start';\n break;\n }\n\n return verticalAnchor;\n }\n }, {\n key: \"renderAxisLine\",\n value: function renderAxisLine() {\n var _this$props5 = this.props,\n x = _this$props5.x,\n y = _this$props5.y,\n width = _this$props5.width,\n height = _this$props5.height,\n orientation = _this$props5.orientation,\n axisLine = _this$props5.axisLine,\n mirror = _this$props5.mirror;\n\n var props = _objectSpread({}, getPresentationAttributes(this.props), {\n fill: 'none'\n }, getPresentationAttributes(axisLine));\n\n if (orientation === 'top' || orientation === 'bottom') {\n var needHeight = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n props = _objectSpread({}, props, {\n x1: x,\n y1: y + needHeight * height,\n x2: x + width,\n y2: y + needHeight * height\n });\n } else {\n var needWidth = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n props = _objectSpread({}, props, {\n x1: x + needWidth * width,\n y1: y,\n x2: x + needWidth * width,\n y2: y + height\n });\n }\n\n return React.createElement(\"line\", _extends({\n className: \"recharts-cartesian-axis-line\"\n }, props));\n }\n }, {\n key: \"renderTicks\",\n\n /**\n * render the ticks\n * @param {Array} ticks The ticks to actually render (overrides what was passed in props)\n * @return {ReactComponent} renderedTicks\n */\n value: function renderTicks(ticks) {\n var _this = this;\n\n var _this$props6 = this.props,\n tickLine = _this$props6.tickLine,\n stroke = _this$props6.stroke,\n tick = _this$props6.tick,\n tickFormatter = _this$props6.tickFormatter,\n unit = _this$props6.unit;\n var finalTicks = CartesianAxis.getTicks(_objectSpread({}, this.props, {\n ticks: ticks\n }));\n var textAnchor = this.getTickTextAnchor();\n var verticalAnchor = this.getTickVerticalAnchor();\n var axisProps = getPresentationAttributes(this.props);\n var customTickProps = getPresentationAttributes(tick);\n\n var tickLineProps = _objectSpread({}, axisProps, {\n fill: 'none'\n }, getPresentationAttributes(tickLine));\n\n var items = finalTicks.map(function (entry, i) {\n var _this$getTickLineCoor = _this.getTickLineCoord(entry),\n lineCoord = _this$getTickLineCoor.line,\n tickCoord = _this$getTickLineCoor.tick;\n\n var tickProps = _objectSpread({\n textAnchor: textAnchor,\n verticalAnchor: verticalAnchor\n }, axisProps, {\n stroke: 'none',\n fill: stroke\n }, customTickProps, tickCoord, {\n index: i,\n payload: entry,\n visibleTicksCount: finalTicks.length\n });\n\n return React.createElement(Layer, _extends({\n className: \"recharts-cartesian-axis-tick\",\n key: \"tick-\".concat(i)\n }, filterEventsOfChild(_this.props, entry, i)), tickLine && React.createElement(\"line\", _extends({\n className: \"recharts-cartesian-axis-tick-line\"\n }, tickLineProps, lineCoord)), tick && _this.constructor.renderTickItem(tick, tickProps, \"\".concat(_isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value).concat(unit || '')));\n });\n return React.createElement(\"g\", {\n className: \"recharts-cartesian-axis-ticks\"\n }, items);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props7 = this.props,\n axisLine = _this$props7.axisLine,\n width = _this$props7.width,\n height = _this$props7.height,\n ticksGenerator = _this$props7.ticksGenerator,\n className = _this$props7.className,\n hide = _this$props7.hide;\n\n if (hide) {\n return null;\n }\n\n var _this$props8 = this.props,\n ticks = _this$props8.ticks,\n noTicksProps = _objectWithoutProperties(_this$props8, [\"ticks\"]);\n\n var finalTicks = ticks;\n\n if (_isFunction(ticksGenerator)) {\n finalTicks = ticks && ticks.length > 0 ? ticksGenerator(this.props) : ticksGenerator(noTicksProps);\n }\n\n if (width <= 0 || height <= 0 || !finalTicks || !finalTicks.length) {\n return null;\n }\n\n return React.createElement(Layer, {\n className: classNames('recharts-cartesian-axis', className)\n }, axisLine && this.renderAxisLine(), this.renderTicks(finalTicks), Label.renderCallByParent(this.props));\n }\n }], [{\n key: \"getTicks\",\n value: function getTicks(props) {\n var tick = props.tick,\n ticks = props.ticks,\n viewBox = props.viewBox,\n minTickGap = props.minTickGap,\n orientation = props.orientation,\n interval = props.interval,\n tickFormatter = props.tickFormatter,\n unit = props.unit;\n\n if (!ticks || !ticks.length || !tick) {\n return [];\n }\n\n if (isNumber(interval) || isSsr()) {\n return CartesianAxis.getNumberIntervalTicks(ticks, isNumber(interval) ? interval : 0);\n }\n\n if (interval === 'preserveStartEnd') {\n return CartesianAxis.getTicksStart({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n }, true);\n }\n\n if (interval === 'preserveStart') {\n return CartesianAxis.getTicksStart({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n });\n }\n\n return CartesianAxis.getTicksEnd({\n ticks: ticks,\n tickFormatter: tickFormatter,\n viewBox: viewBox,\n orientation: orientation,\n minTickGap: minTickGap,\n unit: unit\n });\n }\n }, {\n key: \"getNumberIntervalTicks\",\n value: function getNumberIntervalTicks(ticks, interval) {\n return ticks.filter(function (entry, i) {\n return i % (interval + 1) === 0;\n });\n }\n }, {\n key: \"getTicksStart\",\n value: function getTicksStart(_ref2, preserveEnd) {\n var ticks = _ref2.ticks,\n tickFormatter = _ref2.tickFormatter,\n viewBox = _ref2.viewBox,\n orientation = _ref2.orientation,\n minTickGap = _ref2.minTickGap,\n unit = _ref2.unit;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height';\n var result = (ticks || []).slice(); // we need add the width of 'unit' only when sizeKey === 'width'\n\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit)[sizeKey] : 0;\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n\n if (preserveEnd) {\n // Try to guarantee the tail to be displayed\n var tail = ticks[len - 1];\n var tailContent = _isFunction(tickFormatter) ? tickFormatter(tail.value) : tail.value;\n var tailSize = getStringSize(tailContent)[sizeKey] + unitSize;\n var tailGap = sign * (tail.coordinate + sign * tailSize / 2 - end);\n result[len - 1] = tail = _objectSpread({}, tail, {\n tickCoord: tailGap > 0 ? tail.coordinate - tailGap * sign : tail.coordinate\n });\n var isTailShow = sign * (tail.tickCoord - sign * tailSize / 2 - start) >= 0 && sign * (tail.tickCoord + sign * tailSize / 2 - end) <= 0;\n\n if (isTailShow) {\n end = tail.tickCoord - sign * (tailSize / 2 + minTickGap);\n result[len - 1] = _objectSpread({}, tail, {\n isShow: true\n });\n }\n }\n\n var count = preserveEnd ? len - 1 : len;\n\n for (var i = 0; i < count; i++) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value;\n var size = getStringSize(content)[sizeKey] + unitSize;\n\n if (i === 0) {\n var gap = sign * (entry.coordinate - sign * size / 2 - start);\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: gap < 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: entry.coordinate\n });\n }\n\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n\n if (isShow) {\n start = entry.tickCoord + sign * (size / 2 + minTickGap);\n result[i] = _objectSpread({}, entry, {\n isShow: true\n });\n }\n }\n\n return result.filter(function (entry) {\n return entry.isShow;\n });\n }\n }, {\n key: \"getTicksEnd\",\n value: function getTicksEnd(_ref3) {\n var ticks = _ref3.ticks,\n tickFormatter = _ref3.tickFormatter,\n viewBox = _ref3.viewBox,\n orientation = _ref3.orientation,\n minTickGap = _ref3.minTickGap,\n unit = _ref3.unit;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sizeKey = orientation === 'top' || orientation === 'bottom' ? 'width' : 'height'; // we need add the width of 'unit' only when sizeKey === 'width'\n\n var unitSize = unit && sizeKey === 'width' ? getStringSize(unit)[sizeKey] : 0;\n var result = (ticks || []).slice();\n var len = result.length;\n var sign = len >= 2 ? mathSign(result[1].coordinate - result[0].coordinate) : 1;\n var start, end;\n\n if (sign === 1) {\n start = sizeKey === 'width' ? x : y;\n end = sizeKey === 'width' ? x + width : y + height;\n } else {\n start = sizeKey === 'width' ? x + width : y + height;\n end = sizeKey === 'width' ? x : y;\n }\n\n for (var i = len - 1; i >= 0; i--) {\n var entry = result[i];\n var content = _isFunction(tickFormatter) ? tickFormatter(entry.value) : entry.value;\n var size = getStringSize(content)[sizeKey] + unitSize;\n\n if (i === len - 1) {\n var gap = sign * (entry.coordinate + sign * size / 2 - end);\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: gap > 0 ? entry.coordinate - gap * sign : entry.coordinate\n });\n } else {\n result[i] = entry = _objectSpread({}, entry, {\n tickCoord: entry.coordinate\n });\n }\n\n var isShow = sign * (entry.tickCoord - sign * size / 2 - start) >= 0 && sign * (entry.tickCoord + sign * size / 2 - end) <= 0;\n\n if (isShow) {\n end = entry.tickCoord - sign * (size / 2 + minTickGap);\n result[i] = _objectSpread({}, entry, {\n isShow: true\n });\n }\n }\n\n return result.filter(function (entry) {\n return entry.isShow;\n });\n }\n }, {\n key: \"renderTickItem\",\n value: function renderTickItem(option, props, value) {\n var tickItem;\n\n if (React.isValidElement(option)) {\n tickItem = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n tickItem = option(props);\n } else {\n tickItem = React.createElement(Text, _extends({}, props, {\n className: \"recharts-cartesian-axis-tick-value\"\n }), value);\n }\n\n return tickItem;\n }\n }]);\n\n return CartesianAxis;\n}(Component);\n\nCartesianAxis.displayName = 'CartesianAxis';\nCartesianAxis.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n orientation: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),\n // The viewBox of svg\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n mirror: PropTypes.bool,\n tickMargin: PropTypes.number.isRequired,\n minTickGap: PropTypes.number,\n ticks: PropTypes.array,\n tickSize: PropTypes.number,\n stroke: PropTypes.string,\n tickFormatter: PropTypes.func,\n ticksGenerator: PropTypes.func,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])])\n});\nCartesianAxis.defaultProps = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n viewBox: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n // The orientation of axis\n orientation: 'bottom',\n // The ticks\n ticks: [],\n stroke: '#666',\n tickLine: true,\n axisLine: true,\n tick: true,\n mirror: false,\n minTickGap: 5,\n // The width or height of tick\n tickSize: 6,\n tickMargin: 2,\n interval: 'preserveEnd'\n};\nexport default CartesianAxis;", + "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Render a group of error bar\n*/\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Layer from '../container/Layer';\nimport { getPresentationAttributes } from '../util/ReactUtils';\n\nvar ErrorBar =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ErrorBar, _Component);\n\n function ErrorBar() {\n _classCallCheck(this, ErrorBar);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ErrorBar).apply(this, arguments));\n }\n\n _createClass(ErrorBar, [{\n key: \"renderErrorBars\",\n value: function renderErrorBars() {\n var _this$props = this.props,\n offset = _this$props.offset,\n layout = _this$props.layout,\n width = _this$props.width,\n dataKey = _this$props.dataKey,\n data = _this$props.data,\n dataPointFormatter = _this$props.dataPointFormatter,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis,\n others = _objectWithoutProperties(_this$props, [\"offset\", \"layout\", \"width\", \"dataKey\", \"data\", \"dataPointFormatter\", \"xAxis\", \"yAxis\"]);\n\n var props = getPresentationAttributes(others);\n return data.map(function (entry, i) {\n var _dataPointFormatter = dataPointFormatter(entry, dataKey),\n x = _dataPointFormatter.x,\n y = _dataPointFormatter.y,\n value = _dataPointFormatter.value,\n errorVal = _dataPointFormatter.errorVal;\n\n if (!errorVal) {\n return null;\n }\n\n var xMid, yMid, xMin, yMin, xMax, yMax, scale, coordsTop, coordsMid, coordsBot, lowBound, highBound;\n\n if (Array.isArray(errorVal)) {\n var _errorVal = _slicedToArray(errorVal, 2);\n\n lowBound = _errorVal[0];\n highBound = _errorVal[1];\n } else {\n lowBound = highBound = errorVal;\n }\n\n if (layout === 'vertical') {\n scale = xAxis.scale;\n xMid = value;\n yMid = y + offset;\n xMin = scale(xMid - lowBound);\n yMin = yMid + width;\n xMax = scale(xMid + highBound);\n yMax = yMid - width;\n coordsTop = {\n x1: xMax,\n y1: yMin,\n x2: xMax,\n y2: yMax\n };\n coordsMid = {\n x1: xMin,\n y1: yMid,\n x2: xMax,\n y2: yMid\n };\n coordsBot = {\n x1: xMin,\n y1: yMin,\n x2: xMin,\n y2: yMax\n };\n } else if (layout === 'horizontal') {\n scale = yAxis.scale;\n xMid = x + offset;\n yMid = value;\n xMin = xMid - width;\n xMax = xMid + width;\n yMin = scale(yMid - lowBound);\n yMax = scale(yMid + highBound);\n coordsTop = {\n x1: xMin,\n y1: yMax,\n x2: xMax,\n y2: yMax\n };\n coordsMid = {\n x1: xMid,\n y1: yMin,\n x2: xMid,\n y2: yMax\n };\n coordsBot = {\n x1: xMin,\n y1: yMin,\n x2: xMax,\n y2: yMin\n };\n }\n\n return React.createElement(Layer, _extends({\n className: \"recharts-errorBar\",\n key: \"bar-\".concat(i)\n }, props), React.createElement(\"line\", coordsTop), React.createElement(\"line\", coordsMid), React.createElement(\"line\", coordsBot));\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n return React.createElement(Layer, {\n className: \"recharts-errorBars\"\n }, this.renderErrorBars());\n }\n }]);\n\n return ErrorBar;\n}(Component);\n\nErrorBar.propTypes = {\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,\n data: PropTypes.array,\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n layout: PropTypes.string,\n dataPointFormatter: PropTypes.func,\n stroke: PropTypes.string,\n strokeWidth: PropTypes.number,\n width: PropTypes.number,\n offset: PropTypes.number\n};\nErrorBar.defaultProps = {\n stroke: 'black',\n strokeWidth: 1.5,\n width: 5,\n offset: 0,\n layout: 'horizontal'\n};\nexport default ErrorBar;", + "import _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Reference Line\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Label from '../component/Label';\nimport { LabeledScaleHelper, rectWithPoints } from '../util/CartesianUtils';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\nimport { PRESENTATION_ATTRIBUTES } from '../util/ReactUtils';\nimport Rectangle from '../shape/Rectangle';\n\nvar ReferenceArea = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceArea, _Component);\n\n function ReferenceArea() {\n _classCallCheck(this, ReferenceArea);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceArea).apply(this, arguments));\n }\n\n _createClass(ReferenceArea, [{\n key: \"getRect\",\n value: function getRect(hasX1, hasX2, hasY1, hasY2) {\n var _this$props = this.props,\n xValue1 = _this$props.x1,\n xValue2 = _this$props.x2,\n yValue1 = _this$props.y1,\n yValue2 = _this$props.y2,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis;\n var scale = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var p1 = {\n x: hasX1 ? scale.x.apply(xValue1) : scale.x.rangeMin,\n y: hasY1 ? scale.y.apply(yValue1) : scale.y.rangeMin\n };\n var p2 = {\n x: hasX2 ? scale.x.apply(xValue2) : scale.x.rangeMax,\n y: hasY2 ? scale.y.apply(yValue2) : scale.y.rangeMax\n };\n\n if (ifOverflowMatches(this.props, 'discard') && (!scale.isInRange(p1) || !scale.isInRange(p2))) {\n return null;\n }\n\n return rectWithPoints(p1, p2);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n x1 = _this$props2.x1,\n x2 = _this$props2.x2,\n y1 = _this$props2.y1,\n y2 = _this$props2.y2,\n className = _this$props2.className,\n alwaysShow = _this$props2.alwaysShow,\n clipPathId = _this$props2.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var hasX1 = isNumOrStr(x1);\n var hasX2 = isNumOrStr(x2);\n var hasY1 = isNumOrStr(y1);\n var hasY2 = isNumOrStr(y2);\n\n if (!hasX1 && !hasX2 && !hasY1 && !hasY2) {\n return null;\n }\n\n var rect = this.getRect(hasX1, hasX2, hasY1, hasY2);\n\n if (!rect) {\n return null;\n }\n\n var shape = this.props.shape;\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n return React.createElement(Layer, {\n className: classNames('recharts-reference-area', className)\n }, this.constructor.renderRect(shape, _objectSpread({\n clipPath: clipPath\n }, this.props, rect)), Label.renderCallByParent(this.props, rect));\n }\n }], [{\n key: \"renderRect\",\n value: function renderRect(option, props) {\n var rect;\n\n if (React.isValidElement(option)) {\n rect = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n rect = option(props);\n } else {\n rect = React.createElement(Rectangle, _extends({}, props, {\n className: \"recharts-reference-area-rect\"\n }));\n }\n\n return rect;\n }\n }]);\n\n return ReferenceArea;\n}(Component), _class2.displayName = 'ReferenceArea', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x1: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n x2: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y1: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y2: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.oneOfType([PropTypes.func, PropTypes.element])\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#ccc',\n fillOpacity: 0.5,\n stroke: 'none',\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceArea;", + "import _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Reference Dot\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport Dot from '../shape/Dot';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport Label from '../component/Label';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { LabeledScaleHelper } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\n\nvar ReferenceDot = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceDot, _Component);\n\n function ReferenceDot() {\n _classCallCheck(this, ReferenceDot);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceDot).apply(this, arguments));\n }\n\n _createClass(ReferenceDot, [{\n key: \"getCoordinate\",\n value: function getCoordinate() {\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n xAxis = _this$props.xAxis,\n yAxis = _this$props.yAxis;\n var scales = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var result = scales.apply({\n x: x,\n y: y\n }, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.isInRange(result)) {\n return null;\n }\n\n return result;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n x = _this$props2.x,\n y = _this$props2.y,\n r = _this$props2.r,\n alwaysShow = _this$props2.alwaysShow,\n clipPathId = _this$props2.clipPathId;\n var isX = isNumOrStr(x);\n var isY = isNumOrStr(y);\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n\n if (!isX || !isY) {\n return null;\n }\n\n var coordinate = this.getCoordinate();\n\n if (!coordinate) {\n return null;\n }\n\n var cx = coordinate.x,\n cy = coordinate.y;\n var _this$props3 = this.props,\n shape = _this$props3.shape,\n className = _this$props3.className;\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n\n var dotProps = _objectSpread({\n clipPath: clipPath\n }, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n cx: cx,\n cy: cy\n });\n\n return React.createElement(Layer, {\n className: classNames('recharts-reference-dot', className)\n }, this.constructor.renderDot(shape, dotProps), Label.renderCallByParent(this.props, {\n x: cx - r,\n y: cy - r,\n width: 2 * r,\n height: 2 * r\n }));\n }\n }], [{\n key: \"renderDot\",\n value: function renderDot(option, props) {\n var dot;\n\n if (React.isValidElement(option)) {\n dot = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = React.createElement(Dot, _extends({}, props, {\n cx: props.cx,\n cy: props.cy,\n className: \"recharts-reference-dot-dot\"\n }));\n }\n\n return dot;\n }\n }]);\n\n return ReferenceDot;\n}(Component), _class2.displayName = 'ReferenceDot', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n r: PropTypes.number,\n xAxis: PropTypes.shape({\n scale: PropTypes.func\n }),\n yAxis: PropTypes.shape({\n scale: PropTypes.func\n }),\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.oneOfType([PropTypes.func, PropTypes.element]),\n clipPathId: PropTypes.string\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n r: 10,\n fill: '#fff',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceDot;", + "import _some from \"lodash/some\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n/**\n * @fileOverview Reference Line\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Layer from '../container/Layer';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport Label from '../component/Label';\nimport { ifOverflowMatches } from '../util/ChartUtils';\nimport { isNumOrStr } from '../util/DataUtils';\nimport { LabeledScaleHelper, rectWithCoords } from '../util/CartesianUtils';\nimport { warn } from '../util/LogUtils';\n\nvar renderLine = function renderLine(option, props) {\n var line;\n\n if (React.isValidElement(option)) {\n line = React.cloneElement(option, props);\n } else if (_isFunction(option)) {\n line = option(props);\n } else {\n line = React.createElement(\"line\", _extends({}, props, {\n className: \"recharts-reference-line-line\"\n }));\n }\n\n return line;\n};\n\nvar ReferenceLine = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ReferenceLine, _Component);\n\n function ReferenceLine() {\n _classCallCheck(this, ReferenceLine);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(ReferenceLine).apply(this, arguments));\n }\n\n _createClass(ReferenceLine, [{\n key: \"getEndPoints\",\n value: function getEndPoints(scales, isFixedX, isFixedY, isSegment) {\n var _this$props$viewBox = this.props.viewBox,\n x = _this$props$viewBox.x,\n y = _this$props$viewBox.y,\n width = _this$props$viewBox.width,\n height = _this$props$viewBox.height;\n\n if (isFixedY) {\n var _this$props = this.props,\n yCoord = _this$props.y,\n orientation = _this$props.yAxis.orientation;\n var coord = scales.y.apply(yCoord, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.y.isInRange(coord)) {\n return null;\n }\n\n var points = [{\n x: x + width,\n y: coord\n }, {\n x: x,\n y: coord\n }];\n return orientation === 'left' ? points.reverse() : points;\n }\n\n if (isFixedX) {\n var _this$props2 = this.props,\n xCoord = _this$props2.x,\n _orientation = _this$props2.xAxis.orientation;\n\n var _coord = scales.x.apply(xCoord, {\n bandAware: true\n });\n\n if (ifOverflowMatches(this.props, 'discard') && !scales.x.isInRange(_coord)) {\n return null;\n }\n\n var _points = [{\n x: _coord,\n y: y + height\n }, {\n x: _coord,\n y: y\n }];\n return _orientation === 'top' ? _points.reverse() : _points;\n }\n\n if (isSegment) {\n var segment = this.props.segment;\n\n var _points2 = segment.map(function (p) {\n return scales.apply(p, {\n bandAware: true\n });\n });\n\n if (ifOverflowMatches(this.props, 'discard') && _some(_points2, function (p) {\n return !scales.isInRange(p);\n })) {\n return null;\n }\n\n return _points2;\n }\n\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props3 = this.props,\n fixedX = _this$props3.x,\n fixedY = _this$props3.y,\n segment = _this$props3.segment,\n xAxis = _this$props3.xAxis,\n yAxis = _this$props3.yAxis,\n shape = _this$props3.shape,\n className = _this$props3.className,\n alwaysShow = _this$props3.alwaysShow,\n clipPathId = _this$props3.clipPathId;\n warn(alwaysShow === undefined, 'The alwaysShow prop is deprecated. Please use ifOverflow=\"extendDomain\" instead.');\n var scales = LabeledScaleHelper.create({\n x: xAxis.scale,\n y: yAxis.scale\n });\n var isX = isNumOrStr(fixedX);\n var isY = isNumOrStr(fixedY);\n var isSegment = segment && segment.length === 2;\n var endPoints = this.getEndPoints(scales, isX, isY, isSegment);\n\n if (!endPoints) {\n return null;\n }\n\n var _endPoints = _slicedToArray(endPoints, 2),\n _endPoints$ = _endPoints[0],\n x1 = _endPoints$.x,\n y1 = _endPoints$.y,\n _endPoints$2 = _endPoints[1],\n x2 = _endPoints$2.x,\n y2 = _endPoints$2.y;\n\n var clipPath = ifOverflowMatches(this.props, 'hidden') ? \"url(#\".concat(clipPathId, \")\") : undefined;\n\n var props = _objectSpread({\n clipPath: clipPath\n }, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n });\n\n return React.createElement(Layer, {\n className: classNames('recharts-reference-line', className)\n }, renderLine(shape, props), Label.renderCallByParent(this.props, rectWithCoords({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2\n })));\n }\n }]);\n\n return ReferenceLine;\n}(Component), _class2.displayName = 'ReferenceLine', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n xAxis: PropTypes.object,\n yAxis: PropTypes.object,\n isFront: PropTypes.bool,\n alwaysShow: PropTypes.bool,\n ifOverflow: PropTypes.oneOf(['hidden', 'visible', 'discard', 'extendDomain']),\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n segment: PropTypes.arrayOf(PropTypes.shape({\n x: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n y: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n })),\n className: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n shape: PropTypes.func\n}), _class2.defaultProps = {\n isFront: false,\n ifOverflow: 'discard',\n xAxisId: 0,\n yAxisId: 0,\n fill: 'none',\n stroke: '#ccc',\n fillOpacity: 1,\n strokeWidth: 1\n}, _temp)) || _class;\n\nexport default ReferenceLine;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview X Axis\n */\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\nimport { SCALE_TYPES } from '../util/ReactUtils';\n\nvar XAxis = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(XAxis, _Component);\n\n function XAxis() {\n _classCallCheck(this, XAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(XAxis).apply(this, arguments));\n }\n\n _createClass(XAxis, [{\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return XAxis;\n}(Component), _class2.displayName = 'XAxis', _class2.propTypes = {\n allowDecimals: PropTypes.bool,\n allowDuplicatedCategory: PropTypes.bool,\n hide: PropTypes.bool,\n // The name of data displayed in the axis\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unit of data displayed in the axis\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unique id of x-axis\n xAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n domain: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func, PropTypes.oneOf(['auto', 'dataMin', 'dataMax'])])),\n // The key of data displayed in the axis\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n // The width of axis which is usually calculated internally\n width: PropTypes.number,\n // The height of axis, which need to be setted by user\n height: PropTypes.number,\n mirror: PropTypes.bool,\n // The orientation of axis\n orientation: PropTypes.oneOf(['top', 'bottom']),\n type: PropTypes.oneOf(['number', 'category']),\n // Ticks can be any type when the axis is the type of category\n // Ticks must be numbers when the axis is the type of number\n ticks: PropTypes.array,\n // The count of ticks\n tickCount: PropTypes.number,\n // The formatter function of tick\n tickFormatter: PropTypes.func,\n padding: PropTypes.shape({\n left: PropTypes.number,\n right: PropTypes.number\n }),\n allowDataOverflow: PropTypes.bool,\n scale: PropTypes.oneOfType([PropTypes.oneOf(SCALE_TYPES), PropTypes.func]),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n minTickGap: PropTypes.number,\n tickSize: PropTypes.number,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])]),\n reversed: PropTypes.bool\n}, _class2.defaultProps = {\n allowDecimals: true,\n hide: false,\n orientation: 'bottom',\n width: 0,\n height: 30,\n mirror: false,\n xAxisId: 0,\n tickCount: 5,\n type: 'category',\n domain: [0, 'auto'],\n padding: {\n left: 0,\n right: 0\n },\n allowDataOverflow: false,\n scale: 'auto',\n reversed: false,\n allowDuplicatedCategory: true\n}, _temp)) || _class;\n\nexport default XAxis;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Y Axis\n */\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\n\nvar YAxis = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(YAxis, _Component);\n\n function YAxis() {\n _classCallCheck(this, YAxis);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(YAxis).apply(this, arguments));\n }\n\n _createClass(YAxis, [{\n key: \"render\",\n value: function render() {\n return null;\n }\n }]);\n\n return YAxis;\n}(Component), _class2.displayName = 'YAxis', _class2.propTypes = {\n allowDecimals: PropTypes.bool,\n allowDuplicatedCategory: PropTypes.bool,\n hide: PropTypes.bool,\n // The name of data displayed in the axis\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unit of data displayed in the axis\n unit: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n // The unique id of y-axis\n yAxisId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n domain: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func, PropTypes.oneOf(['auto', 'dataMin', 'dataMax'])])),\n // The key of data displayed in the axis\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]),\n // Ticks can be any type when the axis is the type of category\n // Ticks must be numbers when the axis is the type of number\n ticks: PropTypes.array,\n // The count of ticks\n tickCount: PropTypes.number,\n // The formatter function of tick\n tickFormatter: PropTypes.func,\n // The width of axis, which need to be setted by user\n width: PropTypes.number,\n // The height of axis which is usually calculated in Chart\n height: PropTypes.number,\n mirror: PropTypes.bool,\n // The orientation of axis\n orientation: PropTypes.oneOf(['left', 'right']),\n type: PropTypes.oneOf(['number', 'category']),\n padding: PropTypes.shape({\n top: PropTypes.number,\n bottom: PropTypes.number\n }),\n allowDataOverflow: PropTypes.bool,\n scale: PropTypes.oneOfType([PropTypes.oneOf(['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold']), PropTypes.func]),\n tick: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.object, PropTypes.element]),\n axisLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n tickLine: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),\n minTickGap: PropTypes.number,\n tickSize: PropTypes.number,\n interval: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['preserveStart', 'preserveEnd', 'preserveStartEnd'])]),\n reversed: PropTypes.bool\n}, _class2.defaultProps = {\n allowDuplicatedCategory: true,\n allowDecimals: true,\n hide: false,\n orientation: 'left',\n width: 60,\n height: 0,\n mirror: false,\n yAxisId: 0,\n tickCount: 5,\n type: 'number',\n domain: [0, 'auto'],\n padding: {\n top: 0,\n bottom: 0\n },\n allowDataOverflow: false,\n scale: 'auto',\n reversed: false\n}, _temp)) || _class;\n\nexport default YAxis;", + "import EventEmitter from 'events';\nvar eventCenter = new EventEmitter();\n\nif (eventCenter.setMaxListeners) {\n eventCenter.setMaxListeners(10);\n}\n\nexport { eventCenter };\nexport var SYNC_EVENT = 'recharts.syncMouseEvents';", + "import _every from \"lodash/every\";\nimport _find from \"lodash/find\";\nimport _sortBy from \"lodash/sortBy\";\nimport _isFunction from \"lodash/isFunction\";\nimport _range from \"lodash/range\";\nimport _throttle from \"lodash/throttle\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nimport React, { Component, cloneElement, isValidElement, createElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Surface from '../container/Surface';\nimport Layer from '../container/Layer';\nimport Tooltip from '../component/Tooltip';\nimport Legend from '../component/Legend';\nimport Curve from '../shape/Curve';\nimport Cross from '../shape/Cross';\nimport Sector from '../shape/Sector';\nimport Dot from '../shape/Dot';\nimport Rectangle from '../shape/Rectangle';\nimport { findAllByType, findChildByType, getDisplayName, parseChildIndex, getPresentationAttributes, validateWidthHeight, isChildrenEqual, renderByOrder, getReactEventByType, filterEventAttributes } from '../util/ReactUtils';\nimport CartesianAxis from '../cartesian/CartesianAxis';\nimport Brush from '../cartesian/Brush';\nimport { getOffset, calculateChartCoordinate } from '../util/DOMUtils';\nimport { getAnyElementOfObject, hasDuplicate, uniqueId, isNumber, findEntryInArray } from '../util/DataUtils';\nimport { calculateActiveTickIndex, getMainColorOfGraphicItem, getBarSizeList, getBarPosition, appendOffsetOfLegend, getLegendProps, combineEventHandlers, getTicksOfAxis, getCoordinatesOfGrid, getStackedDataOfItem, parseErrorBarsOfAxis, getBandSizeOfAxis, getStackGroupsByAxisId, getValueByDataKey, isCategorialAxis, getDomainOfItemsWithSameAxis, getDomainOfStackGroups, getDomainOfDataByKey, detectReferenceElementsDomain, parseSpecifiedDomain, parseDomainOfCategoryAxis } from '../util/ChartUtils';\nimport { inRangeOfSector, polarToCartesian } from '../util/PolarUtils';\nimport { shallowEqual } from '../util/PureRender';\nimport { eventCenter, SYNC_EVENT } from '../util/Events';\nvar ORIENT_MAP = {\n xAxis: ['bottom', 'top'],\n yAxis: ['left', 'right']\n};\nvar originCoordinate = {\n x: 0,\n y: 0\n};\n\nvar generateCategoricalChart = function generateCategoricalChart(_ref) {\n var chartName = _ref.chartName,\n GraphicalChild = _ref.GraphicalChild,\n _ref$eventType = _ref.eventType,\n eventType = _ref$eventType === void 0 ? 'axis' : _ref$eventType,\n axisComponents = _ref.axisComponents,\n legendContent = _ref.legendContent,\n formatAxisMap = _ref.formatAxisMap,\n defaultProps = _ref.defaultProps,\n propTypes = _ref.propTypes;\n\n var CategoricalChartWrapper =\n /*#__PURE__*/\n function (_Component) {\n _inherits(CategoricalChartWrapper, _Component);\n\n /**\n * Returns default, reset state for the categorical chart.\n * @param {Object} props Props object to use when creating the default state\n * @return {Object} Whole new state\n */\n function CategoricalChartWrapper(_props) {\n var _this;\n\n _classCallCheck(this, CategoricalChartWrapper);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(CategoricalChartWrapper).call(this, _props));\n\n _this.handleLegendBBoxUpdate = function (box) {\n if (box && _this.legendInstance) {\n var _this$state = _this.state,\n dataStartIndex = _this$state.dataStartIndex,\n dataEndIndex = _this$state.dataEndIndex,\n updateId = _this$state.updateId;\n\n _this.setState(_this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n }));\n }\n };\n\n _this.handleReceiveSyncEvent = function (cId, chartId, data) {\n var _this$props = _this.props,\n syncId = _this$props.syncId,\n layout = _this$props.layout;\n var updateId = _this.state.updateId;\n\n if (syncId === cId && chartId !== _this.uniqueChartId) {\n var dataStartIndex = data.dataStartIndex,\n dataEndIndex = data.dataEndIndex;\n\n if (!_isNil(data.dataStartIndex) || !_isNil(data.dataEndIndex)) {\n _this.setState(_objectSpread({\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId\n })));\n } else if (!_isNil(data.activeTooltipIndex)) {\n var chartX = data.chartX,\n chartY = data.chartY,\n activeTooltipIndex = data.activeTooltipIndex;\n var _this$state2 = _this.state,\n offset = _this$state2.offset,\n tooltipTicks = _this$state2.tooltipTicks;\n\n if (!offset) {\n return;\n }\n\n var viewBox = _objectSpread({}, offset, {\n x: offset.left,\n y: offset.top\n }); // When a categotical chart is combined with another chart, the value of chartX\n // and chartY may beyond the boundaries.\n\n\n var validateChartX = Math.min(chartX, viewBox.x + viewBox.width);\n var validateChartY = Math.min(chartY, viewBox.y + viewBox.height);\n var activeLabel = tooltipTicks[activeTooltipIndex] && tooltipTicks[activeTooltipIndex].value;\n\n var activePayload = _this.getTooltipContent(activeTooltipIndex);\n\n var activeCoordinate = tooltipTicks[activeTooltipIndex] ? {\n x: layout === 'horizontal' ? tooltipTicks[activeTooltipIndex].coordinate : validateChartX,\n y: layout === 'horizontal' ? validateChartY : tooltipTicks[activeTooltipIndex].coordinate\n } : originCoordinate;\n\n _this.setState(_objectSpread({}, data, {\n activeLabel: activeLabel,\n activeCoordinate: activeCoordinate,\n activePayload: activePayload\n }));\n } else {\n _this.setState(data);\n }\n }\n };\n\n _this.handleBrushChange = function (_ref2) {\n var startIndex = _ref2.startIndex,\n endIndex = _ref2.endIndex;\n\n // Only trigger changes if the extents of the brush have actually changed\n if (startIndex !== _this.state.dataStartIndex || endIndex !== _this.state.dataEndIndex) {\n var updateId = _this.state.updateId;\n\n _this.setState(function () {\n return _objectSpread({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups({\n props: _this.props,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n updateId: updateId\n }));\n });\n\n _this.triggerSyncEvent({\n dataStartIndex: startIndex,\n dataEndIndex: endIndex\n });\n }\n };\n\n _this.handleMouseEnter = function (e) {\n var onMouseEnter = _this.props.onMouseEnter;\n\n var mouse = _this.getMouseInfo(e);\n\n if (mouse) {\n var nextState = _objectSpread({}, mouse, {\n isTooltipActive: true\n });\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseEnter)) {\n onMouseEnter(nextState, e);\n }\n }\n };\n\n _this.triggeredAfterMouseMove = function (e) {\n var onMouseMove = _this.props.onMouseMove;\n\n var mouse = _this.getMouseInfo(e);\n\n var nextState = mouse ? _objectSpread({}, mouse, {\n isTooltipActive: true\n }) : {\n isTooltipActive: false\n };\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseMove)) {\n onMouseMove(nextState, e);\n }\n };\n\n _this.handleItemMouseEnter = function (el) {\n _this.setState(function () {\n return {\n isTooltipActive: true,\n activeItem: el,\n activePayload: el.tooltipPayload,\n activeCoordinate: el.tooltipPosition || {\n x: el.cx,\n y: el.cy\n }\n };\n });\n };\n\n _this.handleItemMouseLeave = function () {\n _this.setState(function () {\n return {\n isTooltipActive: false\n };\n });\n };\n\n _this.handleMouseMove = function (e) {\n if (e && _isFunction(e.persist)) {\n e.persist();\n }\n\n _this.triggeredAfterMouseMove(e);\n };\n\n _this.handleMouseLeave = function (e) {\n var onMouseLeave = _this.props.onMouseLeave;\n var nextState = {\n isTooltipActive: false\n };\n\n _this.setState(nextState);\n\n _this.triggerSyncEvent(nextState);\n\n if (_isFunction(onMouseLeave)) {\n onMouseLeave(nextState, e);\n }\n };\n\n _this.handleOuterEvent = function (e) {\n var eventName = getReactEventByType(e);\n\n if (eventName && _isFunction(_this.props[eventName])) {\n var mouse = _this.getMouseInfo(e);\n\n var handler = _this.props[eventName];\n handler(mouse, e);\n }\n };\n\n _this.handleClick = function (e) {\n var onClick = _this.props.onClick;\n\n if (_isFunction(onClick)) {\n var mouse = _this.getMouseInfo(e);\n\n onClick(mouse, e);\n }\n };\n\n _this.handleMouseDown = function (e) {\n var onMouseDown = _this.props.onMouseDown;\n\n if (_isFunction(onMouseDown)) {\n var mouse = _this.getMouseInfo(e);\n\n onMouseDown(mouse, e);\n }\n };\n\n _this.handleMouseUp = function (e) {\n var onMouseUp = _this.props.onMouseUp;\n\n if (_isFunction(onMouseUp)) {\n var mouse = _this.getMouseInfo(e);\n\n onMouseUp(mouse, e);\n }\n };\n\n _this.handleTouchMove = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseMove(e.changedTouches[0]);\n }\n };\n\n _this.handleTouchStart = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseDown(e.changedTouches[0]);\n }\n };\n\n _this.handleTouchEnd = function (e) {\n if (e.changedTouches != null && e.changedTouches.length > 0) {\n _this.handleMouseUp(e.changedTouches[0]);\n }\n };\n\n _this.verticalCoordinatesGenerator = function (_ref3) {\n var xAxis = _ref3.xAxis,\n width = _ref3.width,\n height = _ref3.height,\n offset = _ref3.offset;\n return getCoordinatesOfGrid(CartesianAxis.getTicks(_objectSpread({}, CartesianAxis.defaultProps, xAxis, {\n ticks: getTicksOfAxis(xAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.left, offset.left + offset.width);\n };\n\n _this.horizontalCoordinatesGenerator = function (_ref4) {\n var yAxis = _ref4.yAxis,\n width = _ref4.width,\n height = _ref4.height,\n offset = _ref4.offset;\n return getCoordinatesOfGrid(CartesianAxis.getTicks(_objectSpread({}, CartesianAxis.defaultProps, yAxis, {\n ticks: getTicksOfAxis(yAxis, true),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n })), offset.top, offset.top + offset.height);\n };\n\n _this.axesTicksGenerator = function (axis) {\n return getTicksOfAxis(axis, true);\n };\n\n _this.tooltipTicksGenerator = function (axisMap) {\n var axis = getAnyElementOfObject(axisMap);\n var tooltipTicks = getTicksOfAxis(axis, false, true);\n return {\n tooltipTicks: tooltipTicks,\n orderedTooltipTicks: _sortBy(tooltipTicks, function (o) {\n return o.coordinate;\n }),\n tooltipAxis: axis,\n tooltipAxisBandSize: getBandSizeOfAxis(axis)\n };\n };\n\n _this.renderCursor = function (element) {\n var _this$state3 = _this.state,\n isTooltipActive = _this$state3.isTooltipActive,\n activeCoordinate = _this$state3.activeCoordinate,\n activePayload = _this$state3.activePayload,\n offset = _this$state3.offset;\n\n if (!element || !element.props.cursor || !isTooltipActive || !activeCoordinate) {\n return null;\n }\n\n var layout = _this.props.layout;\n var restProps;\n var cursorComp = Curve;\n\n if (chartName === 'ScatterChart') {\n restProps = activeCoordinate;\n cursorComp = Cross;\n } else if (chartName === 'BarChart') {\n restProps = _this.getCursorRectangle();\n cursorComp = Rectangle;\n } else if (layout === 'radial') {\n var _this$getCursorPoints = _this.getCursorPoints(),\n cx = _this$getCursorPoints.cx,\n cy = _this$getCursorPoints.cy,\n radius = _this$getCursorPoints.radius,\n startAngle = _this$getCursorPoints.startAngle,\n endAngle = _this$getCursorPoints.endAngle;\n\n restProps = {\n cx: cx,\n cy: cy,\n startAngle: startAngle,\n endAngle: endAngle,\n innerRadius: radius,\n outerRadius: radius\n };\n cursorComp = Sector;\n } else {\n restProps = {\n points: _this.getCursorPoints()\n };\n cursorComp = Curve;\n }\n\n var key = element.key || '_recharts-cursor';\n\n var cursorProps = _objectSpread({\n stroke: '#ccc',\n pointerEvents: 'none'\n }, offset, restProps, getPresentationAttributes(element.props.cursor), {\n payload: activePayload,\n key: key,\n className: 'recharts-tooltip-cursor'\n });\n\n return isValidElement(element.props.cursor) ? cloneElement(element.props.cursor, cursorProps) : createElement(cursorComp, cursorProps);\n };\n\n _this.renderPolarAxis = function (element, displayName, index) {\n var axisType = element.type.axisType;\n\n var axisMap = _this.state[\"\".concat(axisType, \"Map\")];\n\n var axisOption = axisMap[element.props[\"\".concat(axisType, \"Id\")]];\n return cloneElement(element, _objectSpread({}, axisOption, {\n className: axisType,\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n ticks: getTicksOfAxis(axisOption, true)\n }));\n };\n\n _this.renderXAxis = function (element, displayName, index) {\n var xAxisMap = _this.state.xAxisMap;\n var axisObj = xAxisMap[element.props.xAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n };\n\n _this.renderYAxis = function (element, displayName, index) {\n var yAxisMap = _this.state.yAxisMap;\n var axisObj = yAxisMap[element.props.yAxisId];\n return _this.renderAxis(axisObj, element, displayName, index);\n };\n\n _this.renderGrid = function (element) {\n var _this$state4 = _this.state,\n xAxisMap = _this$state4.xAxisMap,\n yAxisMap = _this$state4.yAxisMap,\n offset = _this$state4.offset;\n var _this$props2 = _this.props,\n width = _this$props2.width,\n height = _this$props2.height;\n var xAxis = getAnyElementOfObject(xAxisMap);\n\n var yAxisWithFiniteDomain = _find(yAxisMap, function (axis) {\n return _every(axis.domain, Number.isFinite);\n });\n\n var yAxis = yAxisWithFiniteDomain || getAnyElementOfObject(yAxisMap);\n var props = element.props || {};\n return cloneElement(element, {\n key: element.key || 'grid',\n x: isNumber(props.x) ? props.x : offset.left,\n y: isNumber(props.y) ? props.y : offset.top,\n width: isNumber(props.width) ? props.width : offset.width,\n height: isNumber(props.height) ? props.height : offset.height,\n xAxis: xAxis,\n yAxis: yAxis,\n offset: offset,\n chartWidth: width,\n chartHeight: height,\n verticalCoordinatesGenerator: props.verticalCoordinatesGenerator || _this.verticalCoordinatesGenerator,\n horizontalCoordinatesGenerator: props.horizontalCoordinatesGenerator || _this.horizontalCoordinatesGenerator\n });\n };\n\n _this.renderPolarGrid = function (element) {\n var _this$state5 = _this.state,\n radiusAxisMap = _this$state5.radiusAxisMap,\n angleAxisMap = _this$state5.angleAxisMap;\n var radiusAxis = getAnyElementOfObject(radiusAxisMap);\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n var cx = angleAxis.cx,\n cy = angleAxis.cy,\n innerRadius = angleAxis.innerRadius,\n outerRadius = angleAxis.outerRadius;\n return cloneElement(element, {\n polarAngles: getTicksOfAxis(angleAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n polarRadius: getTicksOfAxis(radiusAxis, true).map(function (entry) {\n return entry.coordinate;\n }),\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n key: element.key || 'polar-grid'\n });\n };\n\n _this.renderBrush = function (element) {\n var _this$props3 = _this.props,\n margin = _this$props3.margin,\n data = _this$props3.data;\n var _this$state6 = _this.state,\n offset = _this$state6.offset,\n dataStartIndex = _this$state6.dataStartIndex,\n dataEndIndex = _this$state6.dataEndIndex,\n updateId = _this$state6.updateId; // TODO: update brush when children update\n\n return cloneElement(element, {\n key: element.key || '_recharts-brush',\n onChange: combineEventHandlers(_this.handleBrushChange, null, element.props.onChange),\n data: data,\n x: isNumber(element.props.x) ? element.props.x : offset.left,\n y: isNumber(element.props.y) ? element.props.y : offset.top + offset.height + offset.brushBottom - (margin.bottom || 0),\n width: isNumber(element.props.width) ? element.props.width : offset.width,\n startIndex: dataStartIndex,\n endIndex: dataEndIndex,\n updateId: \"brush-\".concat(updateId)\n });\n };\n\n _this.renderReferenceElement = function (element, displayName, index) {\n if (!element) {\n return null;\n }\n\n var _assertThisInitialize = _assertThisInitialized(_assertThisInitialized(_this)),\n clipPathId = _assertThisInitialize.clipPathId;\n\n var _this$state7 = _this.state,\n xAxisMap = _this$state7.xAxisMap,\n yAxisMap = _this$state7.yAxisMap,\n offset = _this$state7.offset;\n var _element$props = element.props,\n xAxisId = _element$props.xAxisId,\n yAxisId = _element$props.yAxisId;\n return cloneElement(element, {\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n xAxis: xAxisMap[xAxisId],\n yAxis: yAxisMap[yAxisId],\n viewBox: {\n x: offset.left,\n y: offset.top,\n width: offset.width,\n height: offset.height\n },\n clipPathId: clipPathId\n });\n };\n\n _this.renderGraphicChild = function (element, displayName, index) {\n var item = _this.filterFormatItem(element, displayName, index);\n\n if (!item) {\n return null;\n }\n\n var graphicalItem = cloneElement(element, item.props);\n var _this$state8 = _this.state,\n isTooltipActive = _this$state8.isTooltipActive,\n tooltipAxis = _this$state8.tooltipAxis,\n activeTooltipIndex = _this$state8.activeTooltipIndex,\n activeLabel = _this$state8.activeLabel;\n var children = _this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n var _item$props = item.props,\n points = _item$props.points,\n isRange = _item$props.isRange,\n baseLine = _item$props.baseLine;\n var _item$item$props = item.item.props,\n activeDot = _item$item$props.activeDot,\n hide = _item$item$props.hide;\n var hasActive = !hide && isTooltipActive && tooltipItem && activeDot && activeTooltipIndex >= 0;\n\n if (hasActive) {\n var activePoint, basePoint;\n\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n activePoint = findEntryInArray(points, \"payload.\".concat(tooltipAxis.dataKey), activeLabel);\n basePoint = isRange && baseLine && findEntryInArray(baseLine, \"payload.\".concat(tooltipAxis.dataKey), activeLabel);\n } else {\n activePoint = points[activeTooltipIndex];\n basePoint = isRange && baseLine && baseLine[activeTooltipIndex];\n }\n\n if (!_isNil(activePoint)) {\n return [graphicalItem].concat(_toConsumableArray(_this.renderActivePoints({\n item: item,\n activePoint: activePoint,\n basePoint: basePoint,\n childIndex: activeTooltipIndex,\n isRange: isRange\n })));\n }\n }\n\n if (isRange) {\n return [graphicalItem, null, null];\n }\n\n return [graphicalItem, null];\n };\n\n var defaultState = _this.constructor.createDefaultState(_props);\n\n var _updateId = 0;\n _this.state = _objectSpread({}, defaultState, {\n updateId: 0\n }, _this.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: _props\n }, defaultState, {\n updateId: _updateId\n })));\n _this.uniqueChartId = _isNil(_props.id) ? uniqueId('recharts') : _props.id;\n _this.clipPathId = \"\".concat(_this.uniqueChartId, \"-clip\");\n\n if (_props.throttleDelay) {\n _this.triggeredAfterMouseMove = _throttle(_this.triggeredAfterMouseMove, _props.throttleDelay);\n }\n\n return _this;\n }\n /* eslint-disable react/no-did-mount-set-state */\n\n\n _createClass(CategoricalChartWrapper, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_isNil(this.props.syncId)) {\n this.addListener();\n }\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n var _this$props4 = this.props,\n data = _this$props4.data,\n children = _this$props4.children,\n width = _this$props4.width,\n height = _this$props4.height,\n layout = _this$props4.layout,\n stackOffset = _this$props4.stackOffset,\n margin = _this$props4.margin;\n var updateId = this.state.updateId;\n\n if (nextProps.data !== data || nextProps.width !== width || nextProps.height !== height || nextProps.layout !== layout || nextProps.stackOffset !== stackOffset || !shallowEqual(nextProps.margin, margin)) {\n var defaultState = this.constructor.createDefaultState(nextProps);\n this.setState(_objectSpread({}, defaultState, {\n updateId: updateId + 1\n }, this.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: nextProps\n }, defaultState, {\n updateId: updateId + 1\n }))));\n } else if (!isChildrenEqual(nextProps.children, children)) {\n // update configuration in chilren\n var hasGlobalData = !_isNil(nextProps.data);\n var newUpdateId = hasGlobalData ? updateId : updateId + 1;\n this.setState(function (prevState) {\n return _objectSpread({\n updateId: newUpdateId\n }, _this2.updateStateOfAxisMapsOffsetAndStackGroups(_objectSpread({\n props: nextProps\n }, prevState, {\n updateId: newUpdateId\n })));\n });\n } // add syncId\n\n\n if (_isNil(this.props.syncId) && !_isNil(nextProps.syncId)) {\n this.addListener();\n } // remove syncId\n\n\n if (!_isNil(this.props.syncId) && _isNil(nextProps.syncId)) {\n this.removeListener();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_isNil(this.props.syncId)) {\n this.removeListener();\n }\n\n if (typeof this.triggeredAfterMouseMove.cancel === 'function') {\n this.triggeredAfterMouseMove.cancel();\n }\n }\n /**\n * Get the configuration of all x-axis or y-axis\n * @param {Object} props Latest props\n * @param {String} axisType The type of axis\n * @param {Array} graphicalItems The instances of item\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMap\",\n value: function getAxisMap(props, _ref5) {\n var _ref5$axisType = _ref5.axisType,\n axisType = _ref5$axisType === void 0 ? 'xAxis' : _ref5$axisType,\n AxisComp = _ref5.AxisComp,\n graphicalItems = _ref5.graphicalItems,\n stackGroups = _ref5.stackGroups,\n dataStartIndex = _ref5.dataStartIndex,\n dataEndIndex = _ref5.dataEndIndex;\n var children = props.children;\n var axisIdKey = \"\".concat(axisType, \"Id\"); // Get all the instance of Axis\n\n var axes = findAllByType(children, AxisComp);\n var axisMap = {};\n\n if (axes && axes.length) {\n axisMap = this.getAxisMapByAxes(props, {\n axes: axes,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n } else if (graphicalItems && graphicalItems.length) {\n axisMap = this.getAxisMapByItems(props, {\n Axis: AxisComp,\n graphicalItems: graphicalItems,\n axisType: axisType,\n axisIdKey: axisIdKey,\n stackGroups: stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n }\n\n return axisMap;\n }\n /**\n * Get the configuration of axis by the options of axis instance\n * @param {Object} props Latest props\n * @param {Array} axes The instance of axes\n * @param {Array} graphicalItems The instances of item\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMapByAxes\",\n value: function getAxisMapByAxes(props, _ref6) {\n var _this3 = this;\n\n var axes = _ref6.axes,\n graphicalItems = _ref6.graphicalItems,\n axisType = _ref6.axisType,\n axisIdKey = _ref6.axisIdKey,\n stackGroups = _ref6.stackGroups,\n dataStartIndex = _ref6.dataStartIndex,\n dataEndIndex = _ref6.dataEndIndex;\n var layout = props.layout,\n children = props.children,\n stackOffset = props.stackOffset;\n var isCategorial = isCategorialAxis(layout, axisType); // Eliminate duplicated axes\n\n var axisMap = axes.reduce(function (result, child) {\n var _child$props = child.props,\n type = _child$props.type,\n dataKey = _child$props.dataKey,\n allowDataOverflow = _child$props.allowDataOverflow,\n allowDuplicatedCategory = _child$props.allowDuplicatedCategory,\n scale = _child$props.scale,\n ticks = _child$props.ticks;\n var axisId = child.props[axisIdKey];\n\n var displayedData = _this3.constructor.getDisplayedData(props, {\n graphicalItems: graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId;\n }),\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n\n var len = displayedData.length;\n\n if (!result[axisId]) {\n var domain, duplicateDomain, categoricalDomain;\n\n if (dataKey) {\n domain = getDomainOfDataByKey(displayedData, dataKey, type);\n\n if (type === 'category' && isCategorial) {\n var duplicate = hasDuplicate(domain);\n\n if (allowDuplicatedCategory && duplicate) {\n duplicateDomain = domain; // When category axis has duplicated text, serial numbers are used to generate scale\n\n domain = _range(0, len);\n } else if (!allowDuplicatedCategory) {\n // remove duplicated category\n domain = parseDomainOfCategoryAxis(child.props.domain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 ? finalDomain : _toConsumableArray(finalDomain).concat([entry]);\n }, []);\n }\n } else if (type === 'category') {\n if (!allowDuplicatedCategory) {\n domain = parseDomainOfCategoryAxis(child.props.domain, domain, child).reduce(function (finalDomain, entry) {\n return finalDomain.indexOf(entry) >= 0 || entry === '' || _isNil(entry) ? finalDomain : _toConsumableArray(finalDomain).concat([entry]);\n }, []);\n } else {\n // eliminate undefined or null or empty string\n domain = domain.filter(function (entry) {\n return entry !== '' && !_isNil(entry);\n });\n }\n } else if (type === 'number') {\n var errorBarsDomain = parseErrorBarsOfAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), dataKey, axisType);\n\n if (errorBarsDomain) {\n domain = errorBarsDomain;\n }\n }\n\n if (isCategorial && (type === 'number' || scale !== 'auto')) {\n categoricalDomain = getDomainOfDataByKey(displayedData, dataKey, 'category');\n }\n } else if (isCategorial) {\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack && type === 'number') {\n // when stackOffset is 'expand', the domain may be calculated as [0, 1.000000000002]\n domain = stackOffset === 'expand' ? [0, 1] : getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n } else {\n domain = getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), type, true);\n }\n\n if (type === 'number') {\n // To detect wether there is any reference lines whose props alwaysShow is true\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType, ticks);\n\n if (child.props.domain) {\n domain = parseSpecifiedDomain(child.props.domain, domain, allowDataOverflow);\n }\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, _objectSpread({}, child.props, {\n axisType: axisType,\n domain: domain,\n categoricalDomain: categoricalDomain,\n duplicateDomain: duplicateDomain,\n originalDomain: child.props.domain,\n isCategorial: isCategorial,\n layout: layout\n })));\n }\n\n return result;\n }, {});\n return axisMap;\n }\n /**\n * Get the configuration of axis by the options of item,\n * this kind of axis does not display in chart\n * @param {Object} props Latest props\n * @param {Array} graphicalItems The instances of item\n * @param {ReactElement} Axis Axis Component\n * @param {String} axisType The type of axis, xAxis - x-axis, yAxis - y-axis\n * @param {String} axisIdKey The unique id of an axis\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @return {Object} Configuration\n */\n\n }, {\n key: \"getAxisMapByItems\",\n value: function getAxisMapByItems(props, _ref7) {\n var graphicalItems = _ref7.graphicalItems,\n Axis = _ref7.Axis,\n axisType = _ref7.axisType,\n axisIdKey = _ref7.axisIdKey,\n stackGroups = _ref7.stackGroups,\n dataStartIndex = _ref7.dataStartIndex,\n dataEndIndex = _ref7.dataEndIndex;\n var layout = props.layout,\n children = props.children;\n var displayedData = this.constructor.getDisplayedData(props, {\n graphicalItems: graphicalItems,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n });\n var len = displayedData.length;\n var isCategorial = isCategorialAxis(layout, axisType);\n var index = -1; // The default type of x-axis is category axis,\n // The default contents of x-axis is the serial numbers of data\n // The default type of y-axis is number axis\n // The default contents of y-axis is the domain of data\n\n var axisMap = graphicalItems.reduce(function (result, child) {\n var axisId = child.props[axisIdKey];\n\n if (!result[axisId]) {\n index++;\n var domain;\n\n if (isCategorial) {\n domain = _range(0, len);\n } else if (stackGroups && stackGroups[axisId] && stackGroups[axisId].hasStack) {\n domain = getDomainOfStackGroups(stackGroups[axisId].stackGroups, dataStartIndex, dataEndIndex);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n } else {\n domain = parseSpecifiedDomain(Axis.defaultProps.domain, getDomainOfItemsWithSameAxis(displayedData, graphicalItems.filter(function (item) {\n return item.props[axisIdKey] === axisId && !item.props.hide;\n }), 'number'), Axis.defaultProps.allowDataOverflow);\n domain = detectReferenceElementsDomain(children, domain, axisId, axisType);\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, _objectSpread({\n axisType: axisType\n }, Axis.defaultProps, {\n hide: true,\n orientation: ORIENT_MAP[axisType] && ORIENT_MAP[axisType][index % 2],\n domain: domain,\n originalDomain: Axis.defaultProps.domain,\n isCategorial: isCategorial,\n layout: layout // specify scale when no Axis\n // scale: isCategorial ? 'band' : 'linear',\n\n })));\n }\n\n return result;\n }, {});\n return axisMap;\n }\n }, {\n key: \"getActiveCoordinate\",\n value: function getActiveCoordinate(tooltipTicks, activeIndex, rangeObj) {\n var layout = this.props.layout;\n var entry = tooltipTicks.find(function (tick) {\n return tick && tick.index === activeIndex;\n });\n\n if (entry) {\n if (layout === 'horizontal') {\n return {\n x: entry.coordinate,\n y: rangeObj.y\n };\n }\n\n if (layout === 'vertical') {\n return {\n x: rangeObj.x,\n y: entry.coordinate\n };\n }\n\n if (layout === 'centric') {\n var _angle = entry.coordinate;\n var _radius = rangeObj.radius;\n return _objectSpread({}, rangeObj, polarToCartesian(rangeObj.cx, rangeObj.cy, _radius, _angle), {\n angle: _angle,\n radius: _radius\n });\n }\n\n var radius = entry.coordinate;\n var angle = rangeObj.angle;\n return _objectSpread({}, rangeObj, polarToCartesian(rangeObj.cx, rangeObj.cy, radius, angle), {\n angle: angle,\n radius: radius\n });\n }\n\n return originCoordinate;\n }\n /**\n * Get the information of mouse in chart, return null when the mouse is not in the chart\n * @param {Object} event The event object\n * @return {Object} Mouse data\n */\n\n }, {\n key: \"getMouseInfo\",\n value: function getMouseInfo(event) {\n if (!this.container) {\n return null;\n }\n\n var containerOffset = getOffset(this.container);\n var e = calculateChartCoordinate(event, containerOffset);\n var rangeObj = this.inRange(e.chartX, e.chartY);\n\n if (!rangeObj) {\n return null;\n }\n\n var _this$state9 = this.state,\n xAxisMap = _this$state9.xAxisMap,\n yAxisMap = _this$state9.yAxisMap;\n\n if (eventType !== 'axis' && xAxisMap && yAxisMap) {\n var xScale = getAnyElementOfObject(xAxisMap).scale;\n var yScale = getAnyElementOfObject(yAxisMap).scale;\n var xValue = xScale && xScale.invert ? xScale.invert(e.chartX) : null;\n var yValue = yScale && yScale.invert ? yScale.invert(e.chartY) : null;\n return _objectSpread({}, e, {\n xValue: xValue,\n yValue: yValue\n });\n }\n\n var _this$state10 = this.state,\n ticks = _this$state10.orderedTooltipTicks,\n axis = _this$state10.tooltipAxis,\n tooltipTicks = _this$state10.tooltipTicks;\n var pos = this.calculateTooltipPos(rangeObj);\n var activeIndex = calculateActiveTickIndex(pos, ticks, tooltipTicks, axis);\n\n if (activeIndex >= 0 && tooltipTicks) {\n var activeLabel = tooltipTicks[activeIndex] && tooltipTicks[activeIndex].value;\n var activePayload = this.getTooltipContent(activeIndex, activeLabel);\n var activeCoordinate = this.getActiveCoordinate(ticks, activeIndex, rangeObj);\n return _objectSpread({}, e, {\n activeTooltipIndex: activeIndex,\n activeLabel: activeLabel,\n activePayload: activePayload,\n activeCoordinate: activeCoordinate\n });\n }\n\n return null;\n }\n /**\n * Get the content to be displayed in the tooltip\n * @param {Number} activeIndex Active index of data\n * @param {String} activeLabel Active label of data\n * @return {Array} The content of tooltip\n */\n\n }, {\n key: \"getTooltipContent\",\n value: function getTooltipContent(activeIndex, activeLabel) {\n var _this$state11 = this.state,\n graphicalItems = _this$state11.graphicalItems,\n tooltipAxis = _this$state11.tooltipAxis;\n var displayedData = this.constructor.getDisplayedData(this.props, this.state);\n\n if (activeIndex < 0 || !graphicalItems || !graphicalItems.length || activeIndex >= displayedData.length) {\n return null;\n } // get data by activeIndex when the axis don't allow duplicated category\n\n\n return graphicalItems.reduce(function (result, child) {\n var hide = child.props.hide;\n\n if (hide) {\n return result;\n }\n\n var _child$props2 = child.props,\n dataKey = _child$props2.dataKey,\n name = _child$props2.name,\n unit = _child$props2.unit,\n formatter = _child$props2.formatter,\n data = _child$props2.data;\n var payload;\n\n if (tooltipAxis.dataKey && !tooltipAxis.allowDuplicatedCategory) {\n // graphic child has data props\n payload = findEntryInArray(data || displayedData, tooltipAxis.dataKey, activeLabel);\n } else {\n payload = displayedData[activeIndex];\n }\n\n if (!payload) {\n return result;\n }\n\n return _toConsumableArray(result).concat([_objectSpread({}, getPresentationAttributes(child), {\n dataKey: dataKey,\n unit: unit,\n formatter: formatter,\n name: name || dataKey,\n color: getMainColorOfGraphicItem(child),\n value: getValueByDataKey(payload, dataKey),\n payload: payload\n })]);\n }, []);\n }\n }, {\n key: \"getFormatItems\",\n value: function getFormatItems(props, currentState) {\n var _this4 = this;\n\n var graphicalItems = currentState.graphicalItems,\n stackGroups = currentState.stackGroups,\n offset = currentState.offset,\n updateId = currentState.updateId,\n dataStartIndex = currentState.dataStartIndex,\n dataEndIndex = currentState.dataEndIndex;\n var barSize = props.barSize,\n layout = props.layout,\n barGap = props.barGap,\n barCategoryGap = props.barCategoryGap,\n globalMaxBarSize = props.maxBarSize;\n\n var _this$constructor$get = this.constructor.getAxisNameByLayout(layout),\n numericAxisName = _this$constructor$get.numericAxisName,\n cateAxisName = _this$constructor$get.cateAxisName;\n\n var hasBar = this.constructor.hasBar(graphicalItems);\n var sizeList = hasBar && getBarSizeList({\n barSize: barSize,\n stackGroups: stackGroups\n });\n var formatedItems = [];\n graphicalItems.forEach(function (item, index) {\n var displayedData = _this4.constructor.getDisplayedData(props, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }, item);\n\n var _item$props2 = item.props,\n dataKey = _item$props2.dataKey,\n childMaxBarSize = _item$props2.maxBarSize;\n var numericAxisId = item.props[\"\".concat(numericAxisName, \"Id\")];\n var cateAxisId = item.props[\"\".concat(cateAxisName, \"Id\")];\n var axisObj = axisComponents.reduce(function (result, entry) {\n var _objectSpread4;\n\n var axisMap = currentState[\"\".concat(entry.axisType, \"Map\")];\n var id = item.props[\"\".concat(entry.axisType, \"Id\")];\n var axis = axisMap && axisMap[id];\n return _objectSpread({}, result, (_objectSpread4 = {}, _defineProperty(_objectSpread4, entry.axisType, axis), _defineProperty(_objectSpread4, \"\".concat(entry.axisType, \"Ticks\"), getTicksOfAxis(axis)), _objectSpread4));\n }, {});\n var cateAxis = axisObj[cateAxisName];\n var cateTicks = axisObj[\"\".concat(cateAxisName, \"Ticks\")];\n var stackedData = stackGroups && stackGroups[numericAxisId] && stackGroups[numericAxisId].hasStack && getStackedDataOfItem(item, stackGroups[numericAxisId].stackGroups);\n var bandSize = getBandSizeOfAxis(cateAxis, cateTicks);\n var maxBarSize = _isNil(childMaxBarSize) ? globalMaxBarSize : childMaxBarSize;\n var barPosition = hasBar && getBarPosition({\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n bandSize: bandSize,\n sizeList: sizeList[cateAxisId],\n maxBarSize: maxBarSize\n });\n var componsedFn = item && item.type && item.type.getComposedData;\n\n if (componsedFn) {\n var _objectSpread5;\n\n formatedItems.push({\n props: _objectSpread({}, componsedFn(_objectSpread({}, axisObj, {\n displayedData: displayedData,\n props: props,\n dataKey: dataKey,\n item: item,\n bandSize: bandSize,\n barPosition: barPosition,\n offset: offset,\n stackedData: stackedData,\n layout: layout,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n onItemMouseLeave: combineEventHandlers(_this4.handleItemMouseLeave, null, item.props.onMouseLeave),\n onItemMouseEnter: combineEventHandlers(_this4.handleItemMouseEnter, null, item.props.onMouseEnter)\n })), (_objectSpread5 = {\n key: item.key || \"item-\".concat(index)\n }, _defineProperty(_objectSpread5, numericAxisName, axisObj[numericAxisName]), _defineProperty(_objectSpread5, cateAxisName, axisObj[cateAxisName]), _defineProperty(_objectSpread5, \"animationId\", updateId), _objectSpread5)),\n childIndex: parseChildIndex(item, props.children),\n item: item\n });\n }\n });\n return formatedItems;\n }\n }, {\n key: \"getCursorRectangle\",\n value: function getCursorRectangle() {\n var layout = this.props.layout;\n var _this$state12 = this.state,\n activeCoordinate = _this$state12.activeCoordinate,\n offset = _this$state12.offset,\n tooltipAxisBandSize = _this$state12.tooltipAxisBandSize;\n var halfSize = tooltipAxisBandSize / 2;\n return {\n stroke: 'none',\n fill: '#ccc',\n x: layout === 'horizontal' ? activeCoordinate.x - halfSize : offset.left + 0.5,\n y: layout === 'horizontal' ? offset.top + 0.5 : activeCoordinate.y - halfSize,\n width: layout === 'horizontal' ? tooltipAxisBandSize : offset.width - 1,\n height: layout === 'horizontal' ? offset.height - 1 : tooltipAxisBandSize\n };\n }\n }, {\n key: \"getCursorPoints\",\n value: function getCursorPoints() {\n var layout = this.props.layout;\n var _this$state13 = this.state,\n activeCoordinate = _this$state13.activeCoordinate,\n offset = _this$state13.offset;\n var x1, y1, x2, y2;\n\n if (layout === 'horizontal') {\n x1 = activeCoordinate.x;\n x2 = x1;\n y1 = offset.top;\n y2 = offset.top + offset.height;\n } else if (layout === 'vertical') {\n y1 = activeCoordinate.y;\n y2 = y1;\n x1 = offset.left;\n x2 = offset.left + offset.width;\n } else if (!_isNil(activeCoordinate.cx) || !_isNil(activeCoordinate.cy)) {\n if (layout === 'centric') {\n var cx = activeCoordinate.cx,\n cy = activeCoordinate.cy,\n innerRadius = activeCoordinate.innerRadius,\n outerRadius = activeCoordinate.outerRadius,\n angle = activeCoordinate.angle;\n var innerPoint = polarToCartesian(cx, cy, innerRadius, angle);\n var outerPoint = polarToCartesian(cx, cy, outerRadius, angle);\n x1 = innerPoint.x;\n y1 = innerPoint.y;\n x2 = outerPoint.x;\n y2 = outerPoint.y;\n } else {\n var _cx = activeCoordinate.cx,\n _cy = activeCoordinate.cy,\n radius = activeCoordinate.radius,\n startAngle = activeCoordinate.startAngle,\n endAngle = activeCoordinate.endAngle;\n var startPoint = polarToCartesian(_cx, _cy, radius, startAngle);\n var endPoint = polarToCartesian(_cx, _cy, radius, endAngle);\n return {\n points: [startPoint, endPoint],\n cx: _cx,\n cy: _cy,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n }\n\n return [{\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n }];\n }\n }, {\n key: \"calculateTooltipPos\",\n value: function calculateTooltipPos(rangeObj) {\n var layout = this.props.layout;\n\n if (layout === 'horizontal') {\n return rangeObj.x;\n }\n\n if (layout === 'vertical') {\n return rangeObj.y;\n }\n\n if (layout === 'centric') {\n return rangeObj.angle;\n }\n\n return rangeObj.radius;\n }\n }, {\n key: \"inRange\",\n value: function inRange(x, y) {\n var layout = this.props.layout;\n\n if (layout === 'horizontal' || layout === 'vertical') {\n var offset = this.state.offset;\n var isInRange = x >= offset.left && x <= offset.left + offset.width && y >= offset.top && y <= offset.top + offset.height;\n return isInRange ? {\n x: x,\n y: y\n } : null;\n }\n\n var _this$state14 = this.state,\n angleAxisMap = _this$state14.angleAxisMap,\n radiusAxisMap = _this$state14.radiusAxisMap;\n\n if (angleAxisMap && radiusAxisMap) {\n var angleAxis = getAnyElementOfObject(angleAxisMap);\n return inRangeOfSector({\n x: x,\n y: y\n }, angleAxis);\n }\n\n return null;\n }\n }, {\n key: \"parseEventsOfWrapper\",\n value: function parseEventsOfWrapper() {\n var children = this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n var tooltipEvents = tooltipItem && eventType === 'axis' ? {\n onMouseEnter: this.handleMouseEnter,\n onMouseMove: this.handleMouseMove,\n onMouseLeave: this.handleMouseLeave,\n onTouchMove: this.handleTouchMove,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd\n } : {};\n var outerEvents = filterEventAttributes(this.props, this.handleOuterEvent);\n return _objectSpread({}, outerEvents, tooltipEvents);\n }\n /**\n * The AxisMaps are expensive to render on large data sets\n * so provide the ability to store them in state and only update them when necessary\n * they are dependent upon the start and end index of\n * the brush so it's important that this method is called _after_\n * the state is updated with any new start/end indices\n *\n * @param {Object} props The props object to be used for updating the axismaps\n * @param {Number} dataStartIndex The start index of the data series when a brush is applied\n * @param {Number} dataEndIndex The end index of the data series when a brush is applied\n * @param {Number} updateId The update id\n * @return {Object} state New state to set\n */\n\n }, {\n key: \"updateStateOfAxisMapsOffsetAndStackGroups\",\n value: function updateStateOfAxisMapsOffsetAndStackGroups(_ref8) {\n var _this5 = this;\n\n var props = _ref8.props,\n dataStartIndex = _ref8.dataStartIndex,\n dataEndIndex = _ref8.dataEndIndex,\n updateId = _ref8.updateId;\n\n if (!validateWidthHeight({\n props: props\n })) {\n return null;\n }\n\n var children = props.children,\n layout = props.layout,\n stackOffset = props.stackOffset,\n data = props.data,\n reverseStackOrder = props.reverseStackOrder;\n\n var _this$constructor$get2 = this.constructor.getAxisNameByLayout(layout),\n numericAxisName = _this$constructor$get2.numericAxisName,\n cateAxisName = _this$constructor$get2.cateAxisName;\n\n var graphicalItems = findAllByType(children, GraphicalChild);\n var stackGroups = getStackGroupsByAxisId(data, graphicalItems, \"\".concat(numericAxisName, \"Id\"), \"\".concat(cateAxisName, \"Id\"), stackOffset, reverseStackOrder);\n var axisObj = axisComponents.reduce(function (result, entry) {\n var name = \"\".concat(entry.axisType, \"Map\");\n return _objectSpread({}, result, _defineProperty({}, name, _this5.getAxisMap(props, _objectSpread({}, entry, {\n graphicalItems: graphicalItems,\n stackGroups: entry.axisType === numericAxisName && stackGroups,\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex\n }))));\n }, {});\n var offset = this.calculateOffset(_objectSpread({}, axisObj, {\n props: props,\n graphicalItems: graphicalItems\n }));\n Object.keys(axisObj).forEach(function (key) {\n axisObj[key] = formatAxisMap(props, axisObj[key], offset, key.replace('Map', ''), chartName);\n });\n var cateAxisMap = axisObj[\"\".concat(cateAxisName, \"Map\")];\n var ticksObj = this.tooltipTicksGenerator(cateAxisMap);\n var formatedGraphicalItems = this.getFormatItems(props, _objectSpread({}, axisObj, {\n dataStartIndex: dataStartIndex,\n dataEndIndex: dataEndIndex,\n updateId: updateId,\n graphicalItems: graphicalItems,\n stackGroups: stackGroups,\n offset: offset\n }));\n return _objectSpread({\n formatedGraphicalItems: formatedGraphicalItems,\n graphicalItems: graphicalItems,\n offset: offset,\n stackGroups: stackGroups\n }, ticksObj, axisObj);\n }\n /* eslint-disable no-underscore-dangle */\n\n }, {\n key: \"addListener\",\n value: function addListener() {\n eventCenter.on(SYNC_EVENT, this.handleReceiveSyncEvent);\n\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners + 1);\n }\n }\n }, {\n key: \"removeListener\",\n value: function removeListener() {\n eventCenter.removeListener(SYNC_EVENT, this.handleReceiveSyncEvent);\n\n if (eventCenter.setMaxListeners && eventCenter._maxListeners) {\n eventCenter.setMaxListeners(eventCenter._maxListeners - 1);\n }\n }\n /**\n * Calculate the offset of main part in the svg element\n * @param {Object} props Latest props\n * @param {Array} graphicalItems The instances of item\n * @param {Object} xAxisMap The configuration of x-axis\n * @param {Object} yAxisMap The configuration of y-axis\n * @return {Object} The offset of main part in the svg element\n */\n\n }, {\n key: \"calculateOffset\",\n value: function calculateOffset(_ref9) {\n var props = _ref9.props,\n graphicalItems = _ref9.graphicalItems,\n _ref9$xAxisMap = _ref9.xAxisMap,\n xAxisMap = _ref9$xAxisMap === void 0 ? {} : _ref9$xAxisMap,\n _ref9$yAxisMap = _ref9.yAxisMap,\n yAxisMap = _ref9$yAxisMap === void 0 ? {} : _ref9$yAxisMap;\n var width = props.width,\n height = props.height,\n children = props.children;\n var margin = props.margin || {};\n var brushItem = findChildByType(children, Brush);\n var legendItem = findChildByType(children, Legend);\n var offsetH = Object.keys(yAxisMap).reduce(function (result, id) {\n var entry = yAxisMap[id];\n var orientation = entry.orientation;\n\n if (!entry.mirror && !entry.hide) {\n return _objectSpread({}, result, _defineProperty({}, orientation, result[orientation] + entry.width));\n }\n\n return result;\n }, {\n left: margin.left || 0,\n right: margin.right || 0\n });\n var offsetV = Object.keys(xAxisMap).reduce(function (result, id) {\n var entry = xAxisMap[id];\n var orientation = entry.orientation;\n\n if (!entry.mirror && !entry.hide) {\n return _objectSpread({}, result, _defineProperty({}, orientation, result[orientation] + entry.height));\n }\n\n return result;\n }, {\n top: margin.top || 0,\n bottom: margin.bottom || 0\n });\n\n var offset = _objectSpread({}, offsetV, offsetH);\n\n var brushBottom = offset.bottom;\n\n if (brushItem) {\n offset.bottom += brushItem.props.height || Brush.defaultProps.height;\n }\n\n if (legendItem && this.legendInstance) {\n var legendBox = this.legendInstance.getBBox();\n offset = appendOffsetOfLegend(offset, graphicalItems, props, legendBox);\n }\n\n return _objectSpread({\n brushBottom: brushBottom\n }, offset, {\n width: width - offset.left - offset.right,\n height: height - offset.top - offset.bottom\n });\n }\n }, {\n key: \"triggerSyncEvent\",\n value: function triggerSyncEvent(data) {\n var syncId = this.props.syncId;\n\n if (!_isNil(syncId)) {\n eventCenter.emit(SYNC_EVENT, syncId, this.uniqueChartId, data);\n }\n }\n }, {\n key: \"filterFormatItem\",\n value: function filterFormatItem(item, displayName, childIndex) {\n var formatedGraphicalItems = this.state.formatedGraphicalItems;\n\n for (var i = 0, len = formatedGraphicalItems.length; i < len; i++) {\n var entry = formatedGraphicalItems[i];\n\n if (entry.item === item || entry.props.key === item.key || displayName === getDisplayName(entry.item.type) && childIndex === entry.childIndex) {\n return entry;\n }\n }\n\n return null;\n }\n }, {\n key: \"renderAxis\",\n\n /**\n * Draw axis\n * @param {Object} axisOptions The options of axis\n * @param {Object} element The axis element\n * @param {String} displayName The display name of axis\n * @param {Number} index The index of element\n * @return {ReactElement} The instance of x-axes\n */\n value: function renderAxis(axisOptions, element, displayName, index) {\n var _this$props5 = this.props,\n width = _this$props5.width,\n height = _this$props5.height;\n return React.createElement(CartesianAxis, _extends({}, axisOptions, {\n className: \"recharts-\".concat(axisOptions.axisType, \" \").concat(axisOptions.axisType),\n key: element.key || \"\".concat(displayName, \"-\").concat(index),\n viewBox: {\n x: 0,\n y: 0,\n width: width,\n height: height\n },\n ticksGenerator: this.axesTicksGenerator\n }));\n }\n /**\n * Draw grid\n * @param {ReactElement} element the grid item\n * @return {ReactElement} The instance of grid\n */\n\n }, {\n key: \"renderLegend\",\n\n /**\n * Draw legend\n * @return {ReactElement} The instance of Legend\n */\n value: function renderLegend() {\n var _this6 = this;\n\n var formatedGraphicalItems = this.state.formatedGraphicalItems;\n var _this$props6 = this.props,\n children = _this$props6.children,\n width = _this$props6.width,\n height = _this$props6.height;\n var margin = this.props.margin || {};\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n var legendHeight = height - (margin.top || 0) - (margin.bottom || 0);\n var props = getLegendProps({\n children: children,\n formatedGraphicalItems: formatedGraphicalItems,\n legendWidth: legendWidth,\n legendHeight: legendHeight,\n legendContent: legendContent\n });\n\n if (!props) {\n return null;\n }\n\n var item = props.item,\n otherProps = _objectWithoutProperties(props, [\"item\"]);\n\n return cloneElement(item, _objectSpread({}, otherProps, {\n chartWidth: width,\n chartHeight: height,\n margin: margin,\n ref: function ref(legend) {\n _this6.legendInstance = legend;\n },\n onBBoxUpdate: this.handleLegendBBoxUpdate\n }));\n }\n /**\n * Draw Tooltip\n * @return {ReactElement} The instance of Tooltip\n */\n\n }, {\n key: \"renderTooltip\",\n value: function renderTooltip() {\n var children = this.props.children;\n var tooltipItem = findChildByType(children, Tooltip);\n\n if (!tooltipItem) {\n return null;\n }\n\n var _this$state15 = this.state,\n isTooltipActive = _this$state15.isTooltipActive,\n activeCoordinate = _this$state15.activeCoordinate,\n activePayload = _this$state15.activePayload,\n activeLabel = _this$state15.activeLabel,\n offset = _this$state15.offset;\n return cloneElement(tooltipItem, {\n viewBox: _objectSpread({}, offset, {\n x: offset.left,\n y: offset.top\n }),\n active: isTooltipActive,\n label: activeLabel,\n payload: isTooltipActive ? activePayload : [],\n coordinate: activeCoordinate\n });\n }\n }, {\n key: \"renderActivePoints\",\n value: function renderActivePoints(_ref10) {\n var item = _ref10.item,\n activePoint = _ref10.activePoint,\n basePoint = _ref10.basePoint,\n childIndex = _ref10.childIndex,\n isRange = _ref10.isRange;\n var result = [];\n var key = item.props.key;\n var _item$item$props2 = item.item.props,\n activeDot = _item$item$props2.activeDot,\n dataKey = _item$item$props2.dataKey;\n\n var dotProps = _objectSpread({\n index: childIndex,\n dataKey: dataKey,\n cx: activePoint.x,\n cy: activePoint.y,\n r: 4,\n fill: getMainColorOfGraphicItem(item.item),\n strokeWidth: 2,\n stroke: '#fff',\n payload: activePoint.payload,\n value: activePoint.value,\n key: \"\".concat(key, \"-activePoint-\").concat(childIndex)\n }, getPresentationAttributes(activeDot), filterEventAttributes(activeDot));\n\n result.push(this.constructor.renderActiveDot(activeDot, dotProps, childIndex));\n\n if (basePoint) {\n result.push(this.constructor.renderActiveDot(activeDot, _objectSpread({}, dotProps, {\n cx: basePoint.x,\n cy: basePoint.y,\n key: \"\".concat(key, \"-basePoint-\").concat(childIndex)\n }), childIndex));\n } else if (isRange) {\n result.push(null);\n }\n\n return result;\n }\n }, {\n key: \"renderClipPath\",\n value: function renderClipPath() {\n var clipPathId = this.clipPathId;\n var _this$state$offset = this.state.offset,\n left = _this$state$offset.left,\n top = _this$state$offset.top,\n height = _this$state$offset.height,\n width = _this$state$offset.width;\n return React.createElement(\"defs\", null, React.createElement(\"clipPath\", {\n id: clipPathId\n }, React.createElement(\"rect\", {\n x: left,\n y: top,\n height: height,\n width: width\n })));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this7 = this;\n\n if (!validateWidthHeight(this)) {\n return null;\n }\n\n var _this$props7 = this.props,\n children = _this$props7.children,\n className = _this$props7.className,\n width = _this$props7.width,\n height = _this$props7.height,\n style = _this$props7.style,\n compact = _this$props7.compact,\n others = _objectWithoutProperties(_this$props7, [\"children\", \"className\", \"width\", \"height\", \"style\", \"compact\"]);\n\n var attrs = getPresentationAttributes(others);\n var map = {\n CartesianGrid: {\n handler: this.renderGrid,\n once: true\n },\n ReferenceArea: {\n handler: this.renderReferenceElement\n },\n ReferenceLine: {\n handler: this.renderReferenceElement\n },\n ReferenceDot: {\n handler: this.renderReferenceElement\n },\n XAxis: {\n handler: this.renderXAxis\n },\n YAxis: {\n handler: this.renderYAxis\n },\n Brush: {\n handler: this.renderBrush,\n once: true\n },\n Bar: {\n handler: this.renderGraphicChild\n },\n Line: {\n handler: this.renderGraphicChild\n },\n Area: {\n handler: this.renderGraphicChild\n },\n Radar: {\n handler: this.renderGraphicChild\n },\n RadialBar: {\n handler: this.renderGraphicChild\n },\n Scatter: {\n handler: this.renderGraphicChild\n },\n Pie: {\n handler: this.renderGraphicChild\n },\n Funnel: {\n handler: this.renderGraphicChild\n },\n Tooltip: {\n handler: this.renderCursor,\n once: true\n },\n PolarGrid: {\n handler: this.renderPolarGrid,\n once: true\n },\n PolarAngleAxis: {\n handler: this.renderPolarAxis\n },\n PolarRadiusAxis: {\n handler: this.renderPolarAxis\n }\n }; // The \"compact\" mode is mainly used as the panorama within Brush\n\n if (compact) {\n return React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height\n }), this.renderClipPath(), renderByOrder(children, map));\n }\n\n var events = this.parseEventsOfWrapper();\n return React.createElement(\"div\", _extends({\n className: classNames('recharts-wrapper', className),\n style: _objectSpread({\n position: 'relative',\n cursor: 'default',\n width: width,\n height: height\n }, style)\n }, events, {\n ref: function ref(node) {\n _this7.container = node;\n }\n }), React.createElement(Surface, _extends({}, attrs, {\n width: width,\n height: height\n }), this.renderClipPath(), renderByOrder(children, map)), this.renderLegend(), this.renderTooltip());\n }\n }], [{\n key: \"getAxisNameByLayout\",\n value: function getAxisNameByLayout(layout) {\n if (layout === 'horizontal') {\n return {\n numericAxisName: 'yAxis',\n cateAxisName: 'xAxis'\n };\n }\n\n if (layout === 'vertical') {\n return {\n numericAxisName: 'xAxis',\n cateAxisName: 'yAxis'\n };\n }\n\n if (layout === 'centric') {\n return {\n numericAxisName: 'radiusAxis',\n cateAxisName: 'angleAxis'\n };\n }\n\n return {\n numericAxisName: 'angleAxis',\n cateAxisName: 'radiusAxis'\n };\n }\n }, {\n key: \"renderActiveDot\",\n value: function renderActiveDot(option, props) {\n var dot;\n\n if (isValidElement(option)) {\n dot = cloneElement(option, props);\n } else if (_isFunction(option)) {\n dot = option(props);\n } else {\n dot = React.createElement(Dot, props);\n }\n\n return React.createElement(Layer, {\n className: \"recharts-active-dot\",\n key: props.key\n }, dot);\n }\n }]);\n\n return CategoricalChartWrapper;\n }(Component);\n\n CategoricalChartWrapper.displayName = chartName;\n CategoricalChartWrapper.propTypes = _objectSpread({\n syncId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n compact: PropTypes.bool,\n width: PropTypes.number,\n height: PropTypes.number,\n data: PropTypes.arrayOf(PropTypes.object),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n stackOffset: PropTypes.oneOf(['sign', 'expand', 'none', 'wiggle', 'silhouette']),\n throttleDelay: PropTypes.number,\n margin: PropTypes.shape({\n top: PropTypes.number,\n right: PropTypes.number,\n bottom: PropTypes.number,\n left: PropTypes.number\n }),\n barCategoryGap: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n barGap: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n barSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n maxBarSize: PropTypes.number,\n style: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultShowTooltip: PropTypes.bool,\n onClick: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseUp: PropTypes.func,\n reverseStackOrder: PropTypes.bool,\n id: PropTypes.string\n }, propTypes);\n CategoricalChartWrapper.defaultProps = _objectSpread({\n layout: 'horizontal',\n stackOffset: 'none',\n barCategoryGap: '10%',\n barGap: 4,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5\n },\n reverseStackOrder: false\n }, defaultProps);\n\n CategoricalChartWrapper.createDefaultState = function (props) {\n var children = props.children,\n defaultShowTooltip = props.defaultShowTooltip;\n var brushItem = findChildByType(children, Brush);\n var startIndex = brushItem && brushItem.props && brushItem.props.startIndex || 0;\n var endIndex = brushItem && brushItem.props && brushItem.props.endIndex || props.data && props.data.length - 1 || 0;\n return {\n chartX: 0,\n chartY: 0,\n dataStartIndex: startIndex,\n dataEndIndex: endIndex,\n activeTooltipIndex: -1,\n isTooltipActive: !_isNil(defaultShowTooltip) ? defaultShowTooltip : false\n };\n };\n\n CategoricalChartWrapper.hasBar = function (graphicalItems) {\n if (!graphicalItems || !graphicalItems.length) {\n return false;\n }\n\n return graphicalItems.some(function (item) {\n var name = getDisplayName(item && item.type);\n return name && name.indexOf('Bar') >= 0;\n });\n };\n\n CategoricalChartWrapper.getDisplayedData = function (props, _ref11, item) {\n var graphicalItems = _ref11.graphicalItems,\n dataStartIndex = _ref11.dataStartIndex,\n dataEndIndex = _ref11.dataEndIndex;\n var itemsData = (graphicalItems || []).reduce(function (result, child) {\n var itemData = child.props.data;\n\n if (itemData && itemData.length) {\n return _toConsumableArray(result).concat(_toConsumableArray(itemData));\n }\n\n return result;\n }, []);\n\n if (itemsData && itemsData.length > 0) {\n return itemsData;\n }\n\n if (item && item.props && item.props.data && item.props.data.length > 0) {\n return item.props.data;\n }\n\n var data = props.data;\n\n if (data && data.length && isNumber(dataStartIndex) && isNumber(dataEndIndex)) {\n return data.slice(dataStartIndex, dataEndIndex + 1);\n }\n\n return [];\n };\n\n return CategoricalChartWrapper;\n};\n\nexport default generateCategoricalChart;", + "/**\n * @fileOverview Area Chart\n */\nimport generateCategoricalChart from './generateCategoricalChart';\nimport Area from '../cartesian/Area';\nimport XAxis from '../cartesian/XAxis';\nimport YAxis from '../cartesian/YAxis';\nimport { formatAxisMap } from '../util/CartesianUtils';\nexport default generateCategoricalChart({\n chartName: 'AreaChart',\n GraphicalChild: Area,\n axisComponents: [{\n axisType: 'xAxis',\n AxisComp: XAxis\n }, {\n axisType: 'yAxis',\n AxisComp: YAxis\n }],\n formatAxisMap: formatAxisMap\n});", + "import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React, { cloneElement, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Text from './Text';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, findAllByType } from '../util/ReactUtils';\nimport { isNumOrStr, isNumber, isPercent, getPercentValue, uniqueId, mathSign } from '../util/DataUtils';\nimport { polarToCartesian } from '../util/PolarUtils';\nvar cartesianViewBoxShape = PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n});\nvar polarViewBoxShape = PropTypes.shape({\n cx: PropTypes.number,\n cy: PropTypes.number,\n innerRadius: PropTypes.number,\n outerRadius: PropTypes.number,\n startAngle: PropTypes.number,\n endAngle: PropTypes.number\n});\n\nvar propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n viewBox: PropTypes.oneOfType([cartesianViewBoxShape, polarViewBoxShape]),\n formatter: PropTypes.func,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n offset: PropTypes.number,\n position: PropTypes.oneOf(['top', 'left', 'right', 'bottom', 'inside', 'outside', 'insideLeft', 'insideRight', 'insideTop', 'insideBottom', 'insideTopLeft', 'insideBottomLeft', 'insideTopRight', 'insideBottomRight', 'insideStart', 'insideEnd', 'end', 'center', 'centerTop', 'centerBottom']),\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n className: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func])\n});\n\nvar defaultProps = {\n offset: 5\n};\n\nvar getLabel = function getLabel(props) {\n var value = props.value,\n formatter = props.formatter;\n var label = _isNil(props.children) ? value : props.children;\n\n if (_isFunction(formatter)) {\n return formatter(label);\n }\n\n return label;\n};\n\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 360);\n return sign * deltaAngle;\n};\n\nvar renderRadialLabel = function renderRadialLabel(labelProps, label, attrs) {\n var position = labelProps.position,\n viewBox = labelProps.viewBox,\n offset = labelProps.offset,\n className = labelProps.className;\n var cx = viewBox.cx,\n cy = viewBox.cy,\n innerRadius = viewBox.innerRadius,\n outerRadius = viewBox.outerRadius,\n startAngle = viewBox.startAngle,\n endAngle = viewBox.endAngle,\n clockWise = viewBox.clockWise;\n var radius = (innerRadius + outerRadius) / 2;\n var deltaAngle = getDeltaAngle(startAngle, endAngle);\n var sign = deltaAngle >= 0 ? 1 : -1;\n var labelAngle, direction;\n\n if (position === 'insideStart') {\n labelAngle = startAngle + sign * offset;\n direction = clockWise;\n } else if (position === 'insideEnd') {\n labelAngle = endAngle - sign * offset;\n direction = !clockWise;\n } else if (position === 'end') {\n labelAngle = endAngle + sign * offset;\n direction = clockWise;\n }\n\n direction = deltaAngle <= 0 ? direction : !direction;\n var startPoint = polarToCartesian(cx, cy, radius, labelAngle);\n var endPoint = polarToCartesian(cx, cy, radius, labelAngle + (direction ? 1 : -1) * 359);\n var path = \"M\".concat(startPoint.x, \",\").concat(startPoint.y, \"\\n A\").concat(radius, \",\").concat(radius, \",0,1,\").concat(direction ? 0 : 1, \",\\n \").concat(endPoint.x, \",\").concat(endPoint.y);\n var id = _isNil(labelProps.id) ? uniqueId('recharts-radial-line-') : labelProps.id;\n return React.createElement(\"text\", _extends({}, attrs, {\n dominantBaseline: \"central\",\n className: classNames('recharts-radial-bar-label', className)\n }), React.createElement(\"defs\", null, React.createElement(\"path\", {\n id: id,\n d: path\n })), React.createElement(\"textPath\", {\n xlinkHref: \"#\".concat(id)\n }, label));\n};\n\nvar getAttrsOfPolarLabel = function getAttrsOfPolarLabel(props) {\n var viewBox = props.viewBox,\n offset = props.offset,\n position = props.position;\n var cx = viewBox.cx,\n cy = viewBox.cy,\n innerRadius = viewBox.innerRadius,\n outerRadius = viewBox.outerRadius,\n startAngle = viewBox.startAngle,\n endAngle = viewBox.endAngle;\n var midAngle = (startAngle + endAngle) / 2;\n\n if (position === 'outside') {\n var _polarToCartesian = polarToCartesian(cx, cy, outerRadius + offset, midAngle),\n _x = _polarToCartesian.x,\n _y = _polarToCartesian.y;\n\n return {\n x: _x,\n y: _y,\n textAnchor: _x >= cx ? 'start' : 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'center') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'centerTop') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'centerBottom') {\n return {\n x: cx,\n y: cy,\n textAnchor: 'middle',\n verticalAnchor: 'end'\n };\n }\n\n var r = (innerRadius + outerRadius) / 2;\n\n var _polarToCartesian2 = polarToCartesian(cx, cy, r, midAngle),\n x = _polarToCartesian2.x,\n y = _polarToCartesian2.y;\n\n return {\n x: x,\n y: y,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n};\n\nvar getAttrsOfCartesianLabel = function getAttrsOfCartesianLabel(props) {\n var viewBox = props.viewBox,\n offset = props.offset,\n position = props.position;\n var x = viewBox.x,\n y = viewBox.y,\n width = viewBox.width,\n height = viewBox.height;\n var sign = height >= 0 ? 1 : -1;\n\n if (position === 'top') {\n return {\n x: x + width / 2,\n y: y - sign * offset,\n textAnchor: 'middle',\n verticalAnchor: sign > 0 ? 'end' : 'start'\n };\n }\n\n if (position === 'bottom') {\n return {\n x: x + width / 2,\n y: y + height + sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'left') {\n return {\n x: x - offset,\n y: y + height / 2,\n textAnchor: 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'right') {\n return {\n x: x + width + offset,\n y: y + height / 2,\n textAnchor: 'start',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideLeft') {\n return {\n x: x + offset,\n y: y + height / 2,\n textAnchor: 'start',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideRight') {\n return {\n x: x + width - offset,\n y: y + height / 2,\n textAnchor: 'end',\n verticalAnchor: 'middle'\n };\n }\n\n if (position === 'insideTop') {\n return {\n x: x + width / 2,\n y: y + sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideBottom') {\n return {\n x: x + width / 2,\n y: y + height - sign * offset,\n textAnchor: 'middle',\n verticalAnchor: 'end'\n };\n }\n\n if (position === 'insideTopLeft') {\n return {\n x: x + offset,\n y: y + sign * offset,\n textAnchor: 'start',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideTopRight') {\n return {\n x: x + width - offset,\n y: y + sign * offset,\n textAnchor: 'end',\n verticalAnchor: 'start'\n };\n }\n\n if (position === 'insideBottomLeft') {\n return {\n x: x + offset,\n y: y + height - sign * offset,\n textAnchor: 'start',\n verticalAnchor: 'end'\n };\n }\n\n if (position === 'insideBottomRight') {\n return {\n x: x + width - offset,\n y: y + height - sign * offset,\n textAnchor: 'end',\n verticalAnchor: 'end'\n };\n }\n\n if (_isObject(position) && (isNumber(position.x) || isPercent(position.x)) && (isNumber(position.y) || isPercent(position.y))) {\n return {\n x: x + getPercentValue(position.x, width),\n y: y + getPercentValue(position.y, height),\n textAnchor: 'end',\n verticalAnchor: 'end'\n };\n }\n\n return {\n x: x + width / 2,\n y: y + height / 2,\n textAnchor: 'middle',\n verticalAnchor: 'middle'\n };\n};\n\nvar isPolar = function isPolar(viewBox) {\n return isNumber(viewBox.cx);\n};\n\nfunction Label(props) {\n var viewBox = props.viewBox,\n position = props.position,\n value = props.value,\n children = props.children,\n content = props.content,\n _props$className = props.className,\n className = _props$className === void 0 ? '' : _props$className;\n\n if (!viewBox || _isNil(value) && _isNil(children) && !isValidElement(content) && !_isFunction(content)) {\n return null;\n }\n\n if (isValidElement(content)) {\n return cloneElement(content, props);\n }\n\n var label;\n\n if (_isFunction(content)) {\n label = content(props);\n\n if (isValidElement(label)) {\n return label;\n }\n } else {\n label = getLabel(props);\n }\n\n var isPolarLabel = isPolar(viewBox);\n var attrs = getPresentationAttributes(props);\n\n if (isPolarLabel && (position === 'insideStart' || position === 'insideEnd' || position === 'end')) {\n return renderRadialLabel(props, label, attrs);\n }\n\n var positionAttrs = isPolarLabel ? getAttrsOfPolarLabel(props) : getAttrsOfCartesianLabel(props);\n return React.createElement(Text, _extends({\n className: classNames('recharts-label', className)\n }, attrs, positionAttrs), label);\n}\n\nLabel.displayName = 'Label';\nLabel.defaultProps = defaultProps;\nLabel.propTypes = propTypes;\n\nvar parseViewBox = function parseViewBox(props) {\n var cx = props.cx,\n cy = props.cy,\n angle = props.angle,\n startAngle = props.startAngle,\n endAngle = props.endAngle,\n r = props.r,\n radius = props.radius,\n innerRadius = props.innerRadius,\n outerRadius = props.outerRadius,\n x = props.x,\n y = props.y,\n top = props.top,\n left = props.left,\n width = props.width,\n height = props.height,\n clockWise = props.clockWise;\n\n if (isNumber(width) && isNumber(height)) {\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n\n if (isNumber(top) && isNumber(left)) {\n return {\n x: top,\n y: left,\n width: width,\n height: height\n };\n }\n }\n\n if (isNumber(x) && isNumber(y)) {\n return {\n x: x,\n y: y,\n width: 0,\n height: 0\n };\n }\n\n if (isNumber(cx) && isNumber(cy)) {\n return {\n cx: cx,\n cy: cy,\n startAngle: startAngle || angle || 0,\n endAngle: endAngle || angle || 0,\n innerRadius: innerRadius || 0,\n outerRadius: outerRadius || radius || r || 0,\n clockWise: clockWise\n };\n }\n\n if (props.viewBox) {\n return props.viewBox;\n }\n\n return {};\n};\n\nvar parseLabel = function parseLabel(label, viewBox) {\n if (!label) {\n return null;\n }\n\n if (label === true) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox\n });\n }\n\n if (isNumOrStr(label)) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n viewBox: viewBox,\n value: label\n });\n }\n\n if (isValidElement(label) || _isFunction(label)) {\n return React.createElement(Label, {\n key: \"label-implicit\",\n content: label,\n viewBox: viewBox\n });\n }\n\n if (_isObject(label)) {\n return React.createElement(Label, _extends({\n viewBox: viewBox\n }, label, {\n key: \"label-implicit\"\n }));\n }\n\n return null;\n};\n\nvar renderCallByParent = function renderCallByParent(parentProps, viewBox) {\n var ckeckPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) {\n return null;\n }\n\n var children = parentProps.children;\n var parentViewBox = parseViewBox(parentProps);\n var explicitChilren = findAllByType(children, Label).map(function (child, index) {\n return cloneElement(child, {\n viewBox: viewBox || parentViewBox,\n key: \"label-\".concat(index)\n });\n });\n\n if (!ckeckPropsLabel) {\n return explicitChilren;\n }\n\n var implicitLabel = parseLabel(parentProps.label, viewBox || parentViewBox);\n return [implicitLabel].concat(_toConsumableArray(explicitChilren));\n};\n\nLabel.parseViewBox = parseViewBox;\nLabel.renderCallByParent = renderCallByParent;\nexport default Label;", + "import _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isNil from \"lodash/isNil\";\nimport _last from \"lodash/last\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Label from './Label';\nimport Layer from '../container/Layer';\nimport { getPresentationAttributes, findAllByType } from '../util/ReactUtils';\nimport { getValueByDataKey } from '../util/ChartUtils';\nvar propTypes = {\n id: PropTypes.string,\n data: PropTypes.arrayOf(PropTypes.object),\n valueAccessor: PropTypes.func,\n clockWise: PropTypes.bool,\n dataKey: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func])\n};\nvar defaultProps = {\n valueAccessor: function valueAccessor(entry) {\n return _isArray(entry.value) ? _last(entry.value) : entry.value;\n }\n};\n\nfunction LabelList(props) {\n var data = props.data,\n valueAccessor = props.valueAccessor,\n dataKey = props.dataKey,\n clockWise = props.clockWise,\n id = props.id,\n others = _objectWithoutProperties(props, [\"data\", \"valueAccessor\", \"dataKey\", \"clockWise\", \"id\"]);\n\n if (!data || !data.length) {\n return null;\n }\n\n return React.createElement(Layer, {\n className: \"recharts-label-list\"\n }, data.map(function (entry, index) {\n var value = _isNil(dataKey) ? valueAccessor(entry, index) : getValueByDataKey(entry && entry.payload, dataKey);\n var idProps = _isNil(id) ? {} : {\n id: \"\".concat(id, \"-\").concat(index)\n };\n return React.createElement(Label, _extends({}, getPresentationAttributes(entry), others, idProps, {\n index: index,\n value: value,\n viewBox: Label.parseViewBox(_isNil(clockWise) ? entry : _objectSpread({}, entry, {\n clockWise: clockWise\n })),\n key: \"label-\".concat(index)\n }));\n }));\n}\n\nLabelList.propTypes = propTypes;\nLabelList.displayName = 'LabelList';\n\nvar parseLabelList = function parseLabelList(label, data) {\n if (!label) {\n return null;\n }\n\n if (label === true) {\n return React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data\n });\n }\n\n if (React.isValidElement(label) || _isFunction(label)) {\n return React.createElement(LabelList, {\n key: \"labelList-implicit\",\n data: data,\n content: label\n });\n }\n\n if (_isObject(label)) {\n return React.createElement(LabelList, _extends({\n data: data\n }, label, {\n key: \"labelList-implicit\"\n }));\n }\n\n return null;\n};\n\nvar renderCallByParent = function renderCallByParent(parentProps, data) {\n var ckeckPropsLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!parentProps || !parentProps.children && ckeckPropsLabel && !parentProps.label) {\n return null;\n }\n\n var children = parentProps.children;\n var explicitChilren = findAllByType(children, LabelList).map(function (child, index) {\n return cloneElement(child, {\n data: data,\n key: \"labelList-\".concat(index)\n });\n });\n\n if (!ckeckPropsLabel) {\n return explicitChilren;\n }\n\n var implicitLabelList = parseLabelList(parentProps.label, data);\n return [implicitLabelList].concat(_toConsumableArray(explicitChilren));\n};\n\nLabelList.renderCallByParent = renderCallByParent;\nLabelList.defaultProps = defaultProps;\nexport default LabelList;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Default Legend Content\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport Surface from '../container/Surface';\nimport Symbols from '../shape/Symbols';\nimport { filterEventsOfChild, LEGEND_TYPES } from '../util/ReactUtils';\nvar SIZE = 32;\nvar ICON_TYPES = LEGEND_TYPES.filter(function (type) {\n return type !== 'none';\n});\n\nvar DefaultLegendContent = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(DefaultLegendContent, _Component);\n\n function DefaultLegendContent() {\n _classCallCheck(this, DefaultLegendContent);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DefaultLegendContent).apply(this, arguments));\n }\n\n _createClass(DefaultLegendContent, [{\n key: \"renderIcon\",\n\n /**\n * Render the path of icon\n * @param {Object} data Data of each legend item\n * @return {String} Path element\n */\n value: function renderIcon(data) {\n var inactiveColor = this.props.inactiveColor;\n var halfSize = SIZE / 2;\n var sixthSize = SIZE / 6;\n var thirdSize = SIZE / 3;\n var color = data.inactive ? inactiveColor : data.color;\n\n if (data.type === 'plainline') {\n return React.createElement(\"line\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n strokeDasharray: data.payload.strokeDasharray,\n x1: 0,\n y1: halfSize,\n x2: SIZE,\n y2: halfSize,\n className: \"recharts-legend-icon\"\n });\n }\n\n if (data.type === 'line') {\n return React.createElement(\"path\", {\n strokeWidth: 4,\n fill: \"none\",\n stroke: color,\n d: \"M0,\".concat(halfSize, \"h\").concat(thirdSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n H\").concat(SIZE, \"M\").concat(2 * thirdSize, \",\").concat(halfSize, \"\\n A\").concat(sixthSize, \",\").concat(sixthSize, \",0,1,1,\").concat(thirdSize, \",\").concat(halfSize),\n className: \"recharts-legend-icon\"\n });\n }\n\n if (data.type === 'rect') {\n return React.createElement(\"path\", {\n stroke: \"none\",\n fill: color,\n d: \"M0,\".concat(SIZE / 8, \"h\").concat(SIZE, \"v\").concat(SIZE * 3 / 4, \"h\").concat(-SIZE, \"z\"),\n className: \"recharts-legend-icon\"\n });\n }\n\n return React.createElement(Symbols, {\n fill: color,\n cx: halfSize,\n cy: halfSize,\n size: SIZE,\n sizeType: \"diameter\",\n type: data.type\n });\n }\n /**\n * Draw items of legend\n * @return {ReactElement} Items\n */\n\n }, {\n key: \"renderItems\",\n value: function renderItems() {\n var _this = this;\n\n var _this$props = this.props,\n payload = _this$props.payload,\n iconSize = _this$props.iconSize,\n layout = _this$props.layout,\n formatter = _this$props.formatter;\n var viewBox = {\n x: 0,\n y: 0,\n width: SIZE,\n height: SIZE\n };\n var itemStyle = {\n display: layout === 'horizontal' ? 'inline-block' : 'block',\n marginRight: 10\n };\n var svgStyle = {\n display: 'inline-block',\n verticalAlign: 'middle',\n marginRight: 4\n };\n return payload.map(function (entry, i) {\n var _classNames;\n\n var finalFormatter = entry.formatter || formatter;\n var className = classNames((_classNames = {\n 'recharts-legend-item': true\n }, _defineProperty(_classNames, \"legend-item-\".concat(i), true), _defineProperty(_classNames, \"inactive\", entry.inactive), _classNames));\n\n if (entry.type === 'none') {\n return null;\n }\n\n return React.createElement(\"li\", _extends({\n className: className,\n style: itemStyle,\n key: \"legend-item-\".concat(i)\n }, filterEventsOfChild(_this.props, entry, i)), React.createElement(Surface, {\n width: iconSize,\n height: iconSize,\n viewBox: viewBox,\n style: svgStyle\n }, _this.renderIcon(entry)), React.createElement(\"span\", {\n className: \"recharts-legend-item-text\"\n }, finalFormatter ? finalFormatter(entry.value, entry, i) : entry.value));\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n payload = _this$props2.payload,\n layout = _this$props2.layout,\n align = _this$props2.align;\n\n if (!payload || !payload.length) {\n return null;\n }\n\n var finalStyle = {\n padding: 0,\n margin: 0,\n textAlign: layout === 'horizontal' ? align : 'left'\n };\n return React.createElement(\"ul\", {\n className: \"recharts-default-legend\",\n style: finalStyle\n }, this.renderItems());\n }\n }]);\n\n return DefaultLegendContent;\n}(Component), _class2.displayName = 'Legend', _class2.propTypes = {\n content: PropTypes.element,\n iconSize: PropTypes.number,\n iconType: PropTypes.oneOf(ICON_TYPES),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n align: PropTypes.oneOf(['center', 'left', 'right']),\n verticalAlign: PropTypes.oneOf(['top', 'bottom', 'middle']),\n payload: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.any,\n id: PropTypes.any,\n type: PropTypes.oneOf(LEGEND_TYPES)\n })),\n inactiveColor: PropTypes.string,\n formatter: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onClick: PropTypes.func\n}, _class2.defaultProps = {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'middle',\n inactiveColor: '#ccc'\n}, _temp)) || _class;\n\nexport default DefaultLegendContent;", + "import _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Legend\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport pureRender from '../util/PureRender';\nimport DefaultLegendContent from './DefaultLegendContent';\nimport { isNumber } from '../util/DataUtils';\nimport { LEGEND_TYPES } from '../util/ReactUtils';\n\nvar defaultUniqBy = function defaultUniqBy(entry) {\n return entry.value;\n};\n\nvar getUniqPaylod = function getUniqPaylod(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n\n return payload;\n};\n\nvar renderContent = function renderContent(content, props) {\n if (React.isValidElement(content)) {\n return React.cloneElement(content, props);\n }\n\n if (_isFunction(content)) {\n return content(props);\n }\n\n return React.createElement(DefaultLegendContent, props);\n};\n\nvar EPS = 1;\nvar ICON_TYPES = LEGEND_TYPES.filter(function (type) {\n return type !== 'none';\n});\n\nvar Legend = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Legend, _Component);\n\n function Legend() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Legend);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Legend)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n boxWidth: -1,\n boxHeight: -1\n };\n return _this;\n }\n\n _createClass(Legend, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateBBox();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateBBox();\n }\n }, {\n key: \"getBBox\",\n value: function getBBox() {\n var _this$state = this.state,\n boxWidth = _this$state.boxWidth,\n boxHeight = _this$state.boxHeight;\n\n if (boxWidth >= 0 && boxHeight >= 0) {\n return {\n width: boxWidth,\n height: boxHeight\n };\n }\n\n return null;\n }\n }, {\n key: \"getDefaultPosition\",\n value: function getDefaultPosition(style) {\n var _this$props = this.props,\n layout = _this$props.layout,\n align = _this$props.align,\n verticalAlign = _this$props.verticalAlign,\n margin = _this$props.margin,\n chartWidth = _this$props.chartWidth,\n chartHeight = _this$props.chartHeight;\n var hPos, vPos;\n\n if (!style || (style.left === undefined || style.left === null) && (style.right === undefined || style.right === null)) {\n if (align === 'center' && layout === 'vertical') {\n var box = this.getBBox() || {\n width: 0\n };\n hPos = {\n left: ((chartWidth || 0) - box.width) / 2\n };\n } else {\n hPos = align === 'right' ? {\n right: margin && margin.right || 0\n } : {\n left: margin && margin.left || 0\n };\n }\n }\n\n if (!style || (style.top === undefined || style.top === null) && (style.bottom === undefined || style.bottom === null)) {\n if (verticalAlign === 'middle') {\n var _box = this.getBBox() || {\n height: 0\n };\n\n vPos = {\n top: ((chartHeight || 0) - _box.height) / 2\n };\n } else {\n vPos = verticalAlign === 'bottom' ? {\n bottom: margin && margin.bottom || 0\n } : {\n top: margin && margin.top || 0\n };\n }\n }\n\n return _objectSpread({}, hPos, vPos);\n }\n }, {\n key: \"updateBBox\",\n value: function updateBBox() {\n var _this$state2 = this.state,\n boxWidth = _this$state2.boxWidth,\n boxHeight = _this$state2.boxHeight;\n var onBBoxUpdate = this.props.onBBoxUpdate;\n\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n var box = this.wrapperNode.getBoundingClientRect();\n\n if (Math.abs(box.width - boxWidth) > EPS || Math.abs(box.height - boxHeight) > EPS) {\n this.setState({\n boxWidth: box.width,\n boxHeight: box.height\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(box);\n }\n });\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n this.setState({\n boxWidth: -1,\n boxHeight: -1\n }, function () {\n if (onBBoxUpdate) {\n onBBoxUpdate(null);\n }\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n content = _this$props2.content,\n width = _this$props2.width,\n height = _this$props2.height,\n wrapperStyle = _this$props2.wrapperStyle,\n paylodUniqBy = _this$props2.paylodUniqBy,\n payload = _this$props2.payload;\n\n var outerStyle = _objectSpread({\n position: 'absolute',\n width: width || 'auto',\n height: height || 'auto'\n }, this.getDefaultPosition(wrapperStyle), wrapperStyle);\n\n return React.createElement(\"div\", {\n className: \"recharts-legend-wrapper\",\n style: outerStyle,\n ref: function ref(node) {\n _this2.wrapperNode = node;\n }\n }, renderContent(content, _objectSpread({}, this.props, {\n payload: getUniqPaylod(paylodUniqBy, payload)\n })));\n }\n }], [{\n key: \"getWithHeight\",\n value: function getWithHeight(item, chartWidth) {\n var layout = item.props.layout;\n\n if (layout === 'vertical' && isNumber(item.props.height)) {\n return {\n height: item.props.height\n };\n }\n\n if (layout === 'horizontal') {\n return {\n width: item.props.width || chartWidth\n };\n }\n\n return null;\n }\n }]);\n\n return Legend;\n}(Component), _class2.displayName = 'Legend', _class2.propTypes = {\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\n wrapperStyle: PropTypes.object,\n chartWidth: PropTypes.number,\n chartHeight: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n iconSize: PropTypes.number,\n iconType: PropTypes.oneOf(ICON_TYPES),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n align: PropTypes.oneOf(['center', 'left', 'right']),\n verticalAlign: PropTypes.oneOf(['top', 'bottom', 'middle']),\n margin: PropTypes.shape({\n top: PropTypes.number,\n left: PropTypes.number,\n bottom: PropTypes.number,\n right: PropTypes.number\n }),\n payload: PropTypes.arrayOf(PropTypes.shape({\n value: PropTypes.any,\n id: PropTypes.any,\n type: PropTypes.oneOf(LEGEND_TYPES)\n })),\n paylodUniqBy: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n formatter: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onClick: PropTypes.func,\n onBBoxUpdate: PropTypes.func\n}, _class2.defaultProps = {\n iconSize: 14,\n layout: 'horizontal',\n align: 'center',\n verticalAlign: 'bottom'\n}, _temp)) || _class;\n\nexport default Legend;", + "import _debounce from \"lodash/debounce\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Wrapper component to make charts adapt to the size of parent * DOM\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport ReactResizeDetector from 'react-resize-detector';\nimport { isPercent } from '../util/DataUtils';\nimport { warn } from '../util/LogUtils';\n\nvar ResponsiveContainer =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(ResponsiveContainer, _Component);\n\n function ResponsiveContainer(props) {\n var _this;\n\n _classCallCheck(this, ResponsiveContainer);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveContainer).call(this, props));\n\n _this.updateDimensionsImmediate = function () {\n if (!_this.mounted) {\n return;\n }\n\n var newSize = _this.getContainerSize();\n\n if (newSize) {\n var _this$state = _this.state,\n oldWidth = _this$state.containerWidth,\n oldHeight = _this$state.containerHeight;\n var containerWidth = newSize.containerWidth,\n containerHeight = newSize.containerHeight;\n\n if (containerWidth !== oldWidth || containerHeight !== oldHeight) {\n _this.setState({\n containerWidth: containerWidth,\n containerHeight: containerHeight\n });\n }\n }\n };\n\n _this.state = {\n containerWidth: -1,\n containerHeight: -1\n };\n _this.handleResize = props.debounce > 0 ? _debounce(_this.updateDimensionsImmediate, props.debounce) : _this.updateDimensionsImmediate;\n return _this;\n }\n /* eslint-disable react/no-did-mount-set-state */\n\n\n _createClass(ResponsiveContainer, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.mounted = true;\n var size = this.getContainerSize();\n\n if (size) {\n this.setState(size);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.mounted = false;\n }\n }, {\n key: \"getContainerSize\",\n value: function getContainerSize() {\n if (!this.container) {\n return null;\n }\n\n return {\n containerWidth: this.container.clientWidth,\n containerHeight: this.container.clientHeight\n };\n }\n }, {\n key: \"renderChart\",\n value: function renderChart() {\n var _this$state2 = this.state,\n containerWidth = _this$state2.containerWidth,\n containerHeight = _this$state2.containerHeight;\n\n if (containerWidth < 0 || containerHeight < 0) {\n return null;\n }\n\n var _this$props = this.props,\n aspect = _this$props.aspect,\n width = _this$props.width,\n height = _this$props.height,\n minWidth = _this$props.minWidth,\n minHeight = _this$props.minHeight,\n maxHeight = _this$props.maxHeight,\n children = _this$props.children;\n warn(isPercent(width) || isPercent(height), \"The width(%s) and height(%s) are both fixed numbers,\\n maybe you don't need to use a ResponsiveContainer.\", width, height);\n warn(!aspect || aspect > 0, 'The aspect(%s) must be greater than zero.', aspect);\n var calculatedWidth = isPercent(width) ? containerWidth : width;\n var calculatedHeight = isPercent(height) ? containerHeight : height;\n\n if (aspect && aspect > 0) {\n // Preserve the desired aspect ratio\n calculatedHeight = calculatedWidth / aspect; // if maxHeight is set, overwrite if calculatedHeight is greater than maxHeight\n\n if (maxHeight && calculatedHeight > maxHeight) {\n calculatedHeight = maxHeight;\n }\n }\n\n warn(calculatedWidth > 0 || calculatedHeight > 0, \"The width(%s) and height(%s) of chart should be greater than 0,\\n please check the style of container, or the props width(%s) and height(%s),\\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\\n height and width.\", calculatedWidth, calculatedHeight, width, height, minWidth, minHeight, aspect);\n return React.cloneElement(children, {\n width: calculatedWidth,\n height: calculatedHeight\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props2 = this.props,\n minWidth = _this$props2.minWidth,\n minHeight = _this$props2.minHeight,\n width = _this$props2.width,\n height = _this$props2.height,\n maxHeight = _this$props2.maxHeight,\n id = _this$props2.id,\n className = _this$props2.className;\n var style = {\n width: width,\n height: height,\n minWidth: minWidth,\n minHeight: minHeight,\n maxHeight: maxHeight\n };\n return React.createElement(\"div\", {\n id: id,\n className: classNames('recharts-responsive-container', className),\n style: style,\n ref: function ref(node) {\n _this2.container = node;\n }\n }, this.renderChart(), React.createElement(ReactResizeDetector, {\n handleWidth: true,\n handleHeight: true,\n onResize: this.handleResize\n }));\n }\n }]);\n\n return ResponsiveContainer;\n}(Component);\n\nResponsiveContainer.displayName = 'ResponsiveContainer';\nResponsiveContainer.propTypes = {\n aspect: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n children: PropTypes.node.isRequired,\n debounce: PropTypes.number,\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n};\nResponsiveContainer.defaultProps = {\n width: '100%',\n height: '100%',\n debounce: 0\n};\nexport default ResponsiveContainer;", + "import _isNil from \"lodash/isNil\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport classNames from 'classnames';\nimport { isNumber, isNumOrStr } from '../util/DataUtils';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, isSsr } from '../util/ReactUtils';\nimport { getStringSize } from '../util/DOMUtils';\nvar BREAKING_SPACES = /[ \\f\\n\\r\\t\\v\\u2028\\u2029]+/;\n\nvar calculateWordWidths = function calculateWordWidths(props) {\n try {\n var words = !_isNil(props.children) ? props.children.toString().split(BREAKING_SPACES) : [];\n var wordsWithComputedWidth = words.map(function (word) {\n return {\n word: word,\n width: getStringSize(word, props.style).width\n };\n });\n var spaceWidth = getStringSize(\"\\xA0\", props.style).width;\n return {\n wordsWithComputedWidth: wordsWithComputedWidth,\n spaceWidth: spaceWidth\n };\n } catch (e) {\n return null;\n }\n};\n\nvar Text =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Text, _Component);\n\n function Text() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Text);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Text)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n wordsByLines: []\n };\n return _this;\n }\n\n _createClass(Text, [{\n key: \"componentWillMount\",\n value: function componentWillMount() {\n this.updateWordsByLines(this.props, true);\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n var needCalculate = this.props.children !== nextProps.children || this.props.style !== nextProps.style;\n this.updateWordsByLines(nextProps, needCalculate);\n }\n }, {\n key: \"updateWordsByLines\",\n value: function updateWordsByLines(props, needCalculate) {\n // Only perform calculations if using features that require them (multiline, scaleToFit)\n if ((props.width || props.scaleToFit) && !isSsr()) {\n if (needCalculate) {\n var wordWidths = calculateWordWidths(props);\n\n if (wordWidths) {\n var wordsWithComputedWidth = wordWidths.wordsWithComputedWidth,\n spaceWidth = wordWidths.spaceWidth;\n this.wordsWithComputedWidth = wordsWithComputedWidth;\n this.spaceWidth = spaceWidth;\n } else {\n this.updateWordsWithoutCalculate(props);\n return;\n }\n }\n\n var wordsByLines = this.calculateWordsByLines(this.wordsWithComputedWidth, this.spaceWidth, props.width);\n this.setState({\n wordsByLines: wordsByLines\n });\n } else {\n this.updateWordsWithoutCalculate(props);\n }\n }\n }, {\n key: \"updateWordsWithoutCalculate\",\n value: function updateWordsWithoutCalculate(props) {\n var words = !_isNil(props.children) ? props.children.toString().split(BREAKING_SPACES) : [];\n this.setState({\n wordsByLines: [{\n words: words\n }]\n });\n }\n }, {\n key: \"calculateWordsByLines\",\n value: function calculateWordsByLines(wordsWithComputedWidth, spaceWidth, lineWidth) {\n var scaleToFit = this.props.scaleToFit;\n return wordsWithComputedWidth.reduce(function (result, _ref) {\n var word = _ref.word,\n width = _ref.width;\n var currentLine = result[result.length - 1];\n\n if (currentLine && (lineWidth == null || scaleToFit || currentLine.width + width + spaceWidth < lineWidth)) {\n // Word can be added to an existing line\n currentLine.words.push(word);\n currentLine.width += width + spaceWidth;\n } else {\n // Add first word to line or word is too long to scaleToFit on existing line\n var newLine = {\n words: [word],\n width: width\n };\n result.push(newLine);\n }\n\n return result;\n }, []);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n dx = _this$props.dx,\n dy = _this$props.dy,\n textAnchor = _this$props.textAnchor,\n verticalAnchor = _this$props.verticalAnchor,\n scaleToFit = _this$props.scaleToFit,\n angle = _this$props.angle,\n lineHeight = _this$props.lineHeight,\n capHeight = _this$props.capHeight,\n className = _this$props.className,\n textProps = _objectWithoutProperties(_this$props, [\"dx\", \"dy\", \"textAnchor\", \"verticalAnchor\", \"scaleToFit\", \"angle\", \"lineHeight\", \"capHeight\", \"className\"]);\n\n var wordsByLines = this.state.wordsByLines;\n\n if (!isNumOrStr(textProps.x) || !isNumOrStr(textProps.y)) {\n return null;\n }\n\n var x = textProps.x + (isNumber(dx) ? dx : 0);\n var y = textProps.y + (isNumber(dy) ? dy : 0);\n var startDy;\n\n switch (verticalAnchor) {\n case 'start':\n startDy = reduceCSSCalc(\"calc(\".concat(capHeight, \")\"));\n break;\n\n case 'middle':\n startDy = reduceCSSCalc(\"calc(\".concat((wordsByLines.length - 1) / 2, \" * -\").concat(lineHeight, \" + (\").concat(capHeight, \" / 2))\"));\n break;\n\n default:\n startDy = reduceCSSCalc(\"calc(\".concat(wordsByLines.length - 1, \" * -\").concat(lineHeight, \")\"));\n break;\n }\n\n var transforms = [];\n\n if (scaleToFit) {\n var lineWidth = wordsByLines[0].width;\n transforms.push(\"scale(\".concat(this.props.width / lineWidth, \")\"));\n }\n\n if (angle) {\n transforms.push(\"rotate(\".concat(angle, \", \").concat(x, \", \").concat(y, \")\"));\n }\n\n if (transforms.length) {\n textProps.transform = transforms.join(' ');\n }\n\n return React.createElement(\"text\", _extends({}, getPresentationAttributes(textProps), {\n x: x,\n y: y,\n className: classNames('recharts-text', className),\n textAnchor: textAnchor\n }), wordsByLines.map(function (line, index) {\n return React.createElement(\"tspan\", {\n x: x,\n dy: index === 0 ? startDy : lineHeight,\n key: index\n }, line.words.join(' '));\n }));\n }\n }]);\n\n return Text;\n}(Component);\n\nText.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n scaleToFit: PropTypes.bool,\n angle: PropTypes.number,\n textAnchor: PropTypes.oneOf(['start', 'middle', 'end', 'inherit']),\n verticalAnchor: PropTypes.oneOf(['start', 'middle', 'end']),\n style: PropTypes.object\n});\nText.defaultProps = {\n x: 0,\n y: 0,\n lineHeight: '1em',\n capHeight: '0.71em',\n // Magic number from d3\n scaleToFit: false,\n textAnchor: 'start',\n verticalAnchor: 'end' // Maintain compat with existing charts / default SVG behavior\n\n};\nexport default Text;", + "import _isArray from \"lodash/isArray\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { isNumOrStr } from '../util/DataUtils';\n\nvar defaultFormatter = function defaultFormatter(value) {\n return _isArray(value) && isNumOrStr(value[0]) && isNumOrStr(value[1]) ? value.join(' ~ ') : value;\n};\n\nvar DefaultTooltipContent = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(DefaultTooltipContent, _Component);\n\n function DefaultTooltipContent() {\n _classCallCheck(this, DefaultTooltipContent);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(DefaultTooltipContent).apply(this, arguments));\n }\n\n _createClass(DefaultTooltipContent, [{\n key: \"renderContent\",\n value: function renderContent() {\n var _this$props = this.props,\n payload = _this$props.payload,\n separator = _this$props.separator,\n formatter = _this$props.formatter,\n itemStyle = _this$props.itemStyle,\n itemSorter = _this$props.itemSorter;\n\n if (payload && payload.length) {\n var listStyle = {\n padding: 0,\n margin: 0\n };\n var items = payload.sort(itemSorter).map(function (entry, i) {\n var finalItemStyle = _objectSpread({\n display: 'block',\n paddingTop: 4,\n paddingBottom: 4,\n color: entry.color || '#000'\n }, itemStyle);\n\n var finalFormatter = entry.formatter || formatter || defaultFormatter;\n var name = entry.name,\n value = entry.value;\n\n if (finalFormatter) {\n var formatted = finalFormatter(value, name, entry, i);\n\n if (Array.isArray(formatted)) {\n var _formatted = _slicedToArray(formatted, 2);\n\n value = _formatted[0];\n name = _formatted[1];\n } else {\n value = formatted;\n }\n }\n\n return React.createElement(\"li\", {\n className: \"recharts-tooltip-item\",\n key: \"tooltip-item-\".concat(i),\n style: finalItemStyle\n }, isNumOrStr(name) ? React.createElement(\"span\", {\n className: \"recharts-tooltip-item-name\"\n }, name) : null, isNumOrStr(name) ? React.createElement(\"span\", {\n className: \"recharts-tooltip-item-separator\"\n }, separator) : null, React.createElement(\"span\", {\n className: \"recharts-tooltip-item-value\"\n }, value), React.createElement(\"span\", {\n className: \"recharts-tooltip-item-unit\"\n }, entry.unit || ''));\n });\n return React.createElement(\"ul\", {\n className: \"recharts-tooltip-item-list\",\n style: listStyle\n }, items);\n }\n\n return null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n wrapperClassName = _this$props2.wrapperClassName,\n contentStyle = _this$props2.contentStyle,\n labelClassName = _this$props2.labelClassName,\n labelStyle = _this$props2.labelStyle,\n label = _this$props2.label,\n labelFormatter = _this$props2.labelFormatter;\n\n var finalStyle = _objectSpread({\n margin: 0,\n padding: 10,\n backgroundColor: '#fff',\n border: '1px solid #ccc',\n whiteSpace: 'nowrap'\n }, contentStyle);\n\n var finalLabelStyle = _objectSpread({\n margin: 0\n }, labelStyle);\n\n var hasLabel = isNumOrStr(label);\n var finalLabel = hasLabel ? label : '';\n var wrapperCN = classNames('recharts-default-tooltip', wrapperClassName);\n var labelCN = classNames('recharts-tooltip-label', labelClassName);\n\n if (hasLabel && labelFormatter) {\n finalLabel = labelFormatter(label);\n }\n\n return React.createElement(\"div\", {\n className: wrapperCN,\n style: finalStyle\n }, React.createElement(\"p\", {\n className: labelCN,\n style: finalLabelStyle\n }, finalLabel), this.renderContent());\n }\n }]);\n\n return DefaultTooltipContent;\n}(Component), _class2.displayName = 'DefaultTooltipContent', _class2.propTypes = {\n separator: PropTypes.string,\n wrapperClassName: PropTypes.string,\n labelClassName: PropTypes.string,\n formatter: PropTypes.func,\n contentStyle: PropTypes.object,\n itemStyle: PropTypes.object,\n labelStyle: PropTypes.object,\n labelFormatter: PropTypes.func,\n label: PropTypes.any,\n payload: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.any,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]),\n unit: PropTypes.any\n })),\n itemSorter: PropTypes.func\n}, _class2.defaultProps = {\n separator: ' : ',\n contentStyle: {},\n itemStyle: {},\n labelStyle: {}\n}, _temp)) || _class;\n\nexport default DefaultTooltipContent;", + "import _isNil from \"lodash/isNil\";\nimport _isFunction from \"lodash/isFunction\";\nimport _uniqBy from \"lodash/uniqBy\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Tooltip\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { translateStyle } from 'react-smooth';\nimport classNames from 'classnames';\nimport DefaultTooltipContent from './DefaultTooltipContent';\nimport { isSsr } from '../util/ReactUtils';\nimport { isNumber } from '../util/DataUtils';\nimport pureRender from '../util/PureRender';\nvar CLS_PREFIX = 'recharts-tooltip-wrapper';\nvar EPS = 1;\n\nvar defaultUniqBy = function defaultUniqBy(entry) {\n return entry.dataKey;\n};\n\nvar getUniqPaylod = function getUniqPaylod(option, payload) {\n if (option === true) {\n return _uniqBy(payload, defaultUniqBy);\n }\n\n if (_isFunction(option)) {\n return _uniqBy(payload, option);\n }\n\n return payload;\n};\n\nvar propTypes = {\n content: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n active: PropTypes.bool,\n separator: PropTypes.string,\n formatter: PropTypes.func,\n offset: PropTypes.number,\n itemStyle: PropTypes.object,\n labelStyle: PropTypes.object,\n wrapperStyle: PropTypes.object,\n contentStyle: PropTypes.object,\n cursor: PropTypes.oneOfType([PropTypes.bool, PropTypes.element, PropTypes.object]),\n coordinate: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number\n }),\n position: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number\n }),\n label: PropTypes.any,\n payload: PropTypes.arrayOf(PropTypes.shape({\n name: PropTypes.any,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.array]),\n unit: PropTypes.any\n })),\n paylodUniqBy: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n isAnimationActive: PropTypes.bool,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear']),\n itemSorter: PropTypes.func,\n filterNull: PropTypes.bool,\n useTranslate3d: PropTypes.bool\n};\nvar defaultProps = {\n active: false,\n offset: 10,\n viewBox: {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0\n },\n coordinate: {\n x: 0,\n y: 0\n },\n cursorStyle: {},\n separator: ' : ',\n wrapperStyle: {},\n contentStyle: {},\n itemStyle: {},\n labelStyle: {},\n cursor: true,\n isAnimationActive: !isSsr(),\n animationEasing: 'ease',\n animationDuration: 400,\n itemSorter: function itemSorter() {\n return -1;\n },\n filterNull: true,\n useTranslate3d: false\n};\n\nvar renderContent = function renderContent(content, props) {\n if (React.isValidElement(content)) {\n return React.cloneElement(content, props);\n }\n\n if (_isFunction(content)) {\n return content(props);\n }\n\n return React.createElement(DefaultTooltipContent, props);\n};\n\nvar Tooltip = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Tooltip, _Component);\n\n function Tooltip() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Tooltip);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Tooltip)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n boxWidth: -1,\n boxHeight: -1\n };\n return _this;\n }\n\n _createClass(Tooltip, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.updateBBox();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.updateBBox();\n }\n }, {\n key: \"updateBBox\",\n value: function updateBBox() {\n var _this$state = this.state,\n boxWidth = _this$state.boxWidth,\n boxHeight = _this$state.boxHeight;\n\n if (this.wrapperNode && this.wrapperNode.getBoundingClientRect) {\n var box = this.wrapperNode.getBoundingClientRect();\n\n if (Math.abs(box.width - boxWidth) > EPS || Math.abs(box.height - boxHeight) > EPS) {\n this.setState({\n boxWidth: box.width,\n boxHeight: box.height\n });\n }\n } else if (boxWidth !== -1 || boxHeight !== -1) {\n this.setState({\n boxWidth: -1,\n boxHeight: -1\n });\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _classNames,\n _this2 = this;\n\n var _this$props = this.props,\n payload = _this$props.payload,\n isAnimationActive = _this$props.isAnimationActive,\n animationDuration = _this$props.animationDuration,\n animationEasing = _this$props.animationEasing,\n filterNull = _this$props.filterNull,\n paylodUniqBy = _this$props.paylodUniqBy;\n var finalPayload = getUniqPaylod(paylodUniqBy, filterNull && payload && payload.length ? payload.filter(function (entry) {\n return !_isNil(entry.value);\n }) : payload);\n var hasPayload = finalPayload && finalPayload.length;\n var _this$props2 = this.props,\n content = _this$props2.content,\n viewBox = _this$props2.viewBox,\n coordinate = _this$props2.coordinate,\n position = _this$props2.position,\n active = _this$props2.active,\n offset = _this$props2.offset,\n wrapperStyle = _this$props2.wrapperStyle;\n\n var outerStyle = _objectSpread({\n pointerEvents: 'none',\n visibility: active && hasPayload ? 'visible' : 'hidden',\n position: 'absolute',\n top: 0\n }, wrapperStyle);\n\n var translateX, translateY;\n\n if (position && isNumber(position.x) && isNumber(position.y)) {\n translateX = position.x;\n translateY = position.y;\n } else {\n var _this$state2 = this.state,\n boxWidth = _this$state2.boxWidth,\n boxHeight = _this$state2.boxHeight;\n\n if (boxWidth > 0 && boxHeight > 0 && coordinate) {\n translateX = position && isNumber(position.x) ? position.x : Math.max(coordinate.x + boxWidth + offset > viewBox.x + viewBox.width ? coordinate.x - boxWidth - offset : coordinate.x + offset, viewBox.x);\n translateY = position && isNumber(position.y) ? position.y : Math.max(coordinate.y + boxHeight + offset > viewBox.y + viewBox.height ? coordinate.y - boxHeight - offset : coordinate.y + offset, viewBox.y);\n } else {\n outerStyle.visibility = 'hidden';\n }\n }\n\n outerStyle = _objectSpread({}, outerStyle, translateStyle({\n transform: this.props.useTranslate3d ? \"translate3d(\".concat(translateX, \"px, \").concat(translateY, \"px, 0)\") : \"translate(\".concat(translateX, \"px, \").concat(translateY, \"px)\")\n }));\n\n if (isAnimationActive && active) {\n outerStyle = _objectSpread({}, outerStyle, translateStyle({\n transition: \"transform \".concat(animationDuration, \"ms \").concat(animationEasing)\n }));\n }\n\n var cls = classNames(CLS_PREFIX, (_classNames = {}, _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-right\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX >= coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-left\"), isNumber(translateX) && coordinate && isNumber(coordinate.x) && translateX < coordinate.x), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-bottom\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY >= coordinate.y), _defineProperty(_classNames, \"\".concat(CLS_PREFIX, \"-top\"), isNumber(translateY) && coordinate && isNumber(coordinate.y) && translateY < coordinate.y), _classNames));\n return React.createElement(\"div\", {\n className: cls,\n style: outerStyle,\n ref: function ref(node) {\n _this2.wrapperNode = node;\n }\n }, renderContent(content, _objectSpread({}, this.props, {\n payload: finalPayload\n })));\n }\n }]);\n\n return Tooltip;\n}(Component), _class2.displayName = 'Tooltip', _class2.propTypes = propTypes, _class2.defaultProps = defaultProps, _temp)) || _class;\n\nexport default Tooltip;", + "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/**\n * @fileOverview Layer\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nvar propTypes = {\n className: PropTypes.string,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nfunction Layer(props) {\n var children = props.children,\n className = props.className,\n others = _objectWithoutProperties(props, [\"children\", \"className\"]);\n\n var layerClass = classNames('recharts-layer', className);\n return React.createElement(\"g\", _extends({\n className: layerClass\n }, others), children);\n}\n\nLayer.propTypes = propTypes;\nexport default Layer;", + "function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/**\n * @fileOverview Surface\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { getPresentationAttributes } from '../util/ReactUtils';\nvar propTypes = {\n width: PropTypes.number.isRequired,\n height: PropTypes.number.isRequired,\n viewBox: PropTypes.shape({\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number\n }),\n className: PropTypes.string,\n style: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node])\n};\n\nfunction Surface(props) {\n var children = props.children,\n width = props.width,\n height = props.height,\n viewBox = props.viewBox,\n className = props.className,\n style = props.style,\n others = _objectWithoutProperties(props, [\"children\", \"width\", \"height\", \"viewBox\", \"className\", \"style\"]);\n\n var svgView = viewBox || {\n width: width,\n height: height,\n x: 0,\n y: 0\n };\n var layerClass = classNames('recharts-surface', className);\n var attrs = getPresentationAttributes(others);\n return React.createElement(\"svg\", _extends({}, attrs, {\n className: layerClass,\n width: width,\n height: height,\n style: style,\n viewBox: \"\".concat(svgView.x, \" \").concat(svgView.y, \" \").concat(svgView.width, \" \").concat(svgView.height),\n version: \"1.1\"\n }), children);\n}\n\nSurface.propTypes = propTypes;\nexport default Surface;", + "import 'core-js/es6/math';\nimport 'core-js/es6/number';\n/* eslint no-proto: 0 */\n\nvar testObject = {};\n\nif (!(Object.setPrototypeOf || testObject.__proto__)) {\n var nativeGetPrototypeOf = Object.getPrototypeOf;\n\n Object.getPrototypeOf = function (object) {\n if (object.__proto__) {\n return object.__proto__;\n }\n\n return nativeGetPrototypeOf.call(Object, object);\n };\n}", + "import './polyfill';\nimport _Surface from './container/Surface';\nexport { _Surface as Surface };\nimport _Layer from './container/Layer';\nexport { _Layer as Layer };\nimport _Legend from './component/Legend';\nexport { _Legend as Legend };\nimport _Tooltip from './component/Tooltip';\nexport { _Tooltip as Tooltip };\nimport _ResponsiveContainer from './component/ResponsiveContainer';\nexport { _ResponsiveContainer as ResponsiveContainer };\nimport _Cell from './component/Cell';\nexport { _Cell as Cell };\nimport _Text from './component/Text';\nexport { _Text as Text };\nimport _Label from './component/Label';\nexport { _Label as Label };\nimport _LabelList from './component/LabelList';\nexport { _LabelList as LabelList };\nimport _Sector from './shape/Sector';\nexport { _Sector as Sector };\nimport _Curve from './shape/Curve';\nexport { _Curve as Curve };\nimport _Rectangle from './shape/Rectangle';\nexport { _Rectangle as Rectangle };\nimport _Polygon from './shape/Polygon';\nexport { _Polygon as Polygon };\nimport _Dot from './shape/Dot';\nexport { _Dot as Dot };\nimport _Cross from './shape/Cross';\nexport { _Cross as Cross };\nimport _Symbols from './shape/Symbols';\nexport { _Symbols as Symbols };\nimport _PolarGrid from './polar/PolarGrid';\nexport { _PolarGrid as PolarGrid };\nimport _PolarRadiusAxis from './polar/PolarRadiusAxis';\nexport { _PolarRadiusAxis as PolarRadiusAxis };\nimport _PolarAngleAxis from './polar/PolarAngleAxis';\nexport { _PolarAngleAxis as PolarAngleAxis };\nimport _Pie from './polar/Pie';\nexport { _Pie as Pie };\nimport _Radar from './polar/Radar';\nexport { _Radar as Radar };\nimport _RadialBar from './polar/RadialBar';\nexport { _RadialBar as RadialBar };\nimport _Brush from './cartesian/Brush';\nexport { _Brush as Brush };\nimport _ReferenceLine from './cartesian/ReferenceLine';\nexport { _ReferenceLine as ReferenceLine };\nimport _ReferenceDot from './cartesian/ReferenceDot';\nexport { _ReferenceDot as ReferenceDot };\nimport _ReferenceArea from './cartesian/ReferenceArea';\nexport { _ReferenceArea as ReferenceArea };\nimport _CartesianAxis from './cartesian/CartesianAxis';\nexport { _CartesianAxis as CartesianAxis };\nimport _CartesianGrid from './cartesian/CartesianGrid';\nexport { _CartesianGrid as CartesianGrid };\nimport _Line from './cartesian/Line';\nexport { _Line as Line };\nimport _Area from './cartesian/Area';\nexport { _Area as Area };\nimport _Bar from './cartesian/Bar';\nexport { _Bar as Bar };\nimport _Scatter from './cartesian/Scatter';\nexport { _Scatter as Scatter };\nimport _XAxis from './cartesian/XAxis';\nexport { _XAxis as XAxis };\nimport _YAxis from './cartesian/YAxis';\nexport { _YAxis as YAxis };\nimport _ZAxis from './cartesian/ZAxis';\nexport { _ZAxis as ZAxis };\nimport _ErrorBar from './cartesian/ErrorBar';\nexport { _ErrorBar as ErrorBar };\nimport _LineChart from './chart/LineChart';\nexport { _LineChart as LineChart };\nimport _BarChart from './chart/BarChart';\nexport { _BarChart as BarChart };\nimport _PieChart from './chart/PieChart';\nexport { _PieChart as PieChart };\nimport _Treemap from './chart/Treemap';\nexport { _Treemap as Treemap };\nimport _Sankey from './chart/Sankey';\nexport { _Sankey as Sankey };\nimport _RadarChart from './chart/RadarChart';\nexport { _RadarChart as RadarChart };\nimport _ScatterChart from './chart/ScatterChart';\nexport { _ScatterChart as ScatterChart };\nimport _AreaChart from './chart/AreaChart';\nexport { _AreaChart as AreaChart };\nimport _RadialBarChart from './chart/RadialBarChart';\nexport { _RadialBarChart as RadialBarChart };\nimport _ComposedChart from './chart/ComposedChart';\nexport { _ComposedChart as ComposedChart };\nimport _Funnel from './numberAxis/Funnel';\nexport { _Funnel as Funnel };\nimport _FunnelChart from './chart/FunnelChart';\nexport { _FunnelChart as FunnelChart };\nimport _Trapezoid from './shape/Trapezoid';\nexport { _Trapezoid as Trapezoid };", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Cross\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { isNumber } from '../util/DataUtils';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes } from '../util/ReactUtils';\n\nvar Cross = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Cross, _Component);\n\n function Cross() {\n _classCallCheck(this, Cross);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Cross).apply(this, arguments));\n }\n\n _createClass(Cross, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n width = _this$props.width,\n height = _this$props.height,\n top = _this$props.top,\n left = _this$props.left,\n className = _this$props.className;\n\n if (!isNumber(x) || !isNumber(y) || !isNumber(width) || !isNumber(height) || !isNumber(top) || !isNumber(left)) {\n return null;\n }\n\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), {\n className: classNames('recharts-cross', className),\n d: this.constructor.getPath(x, y, width, height, top, left)\n }));\n }\n }], [{\n key: \"getPath\",\n value: function getPath(x, y, width, height, top, left) {\n return \"M\".concat(x, \",\").concat(top, \"v\").concat(height, \"M\").concat(left, \",\").concat(y, \"h\").concat(width);\n }\n }]);\n\n return Cross;\n}(Component), _class2.displayName = 'Cross', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n top: PropTypes.number,\n left: PropTypes.number,\n className: PropTypes.string\n}), _class2.defaultProps = {\n x: 0,\n y: 0,\n top: 0,\n left: 0,\n width: 0,\n height: 0\n}, _temp)) || _class;\n\nexport default Cross;", + "import _isArray from \"lodash/isArray\";\nimport _isFunction from \"lodash/isFunction\";\n\nvar _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Curve\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { line as shapeLine, area as shapeArea, curveBasisClosed, curveBasisOpen, curveBasis, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from 'd3-shape';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport { isNumber } from '../util/DataUtils';\nvar CURVE_FACTORIES = {\n curveBasisClosed: curveBasisClosed,\n curveBasisOpen: curveBasisOpen,\n curveBasis: curveBasis,\n curveLinearClosed: curveLinearClosed,\n curveLinear: curveLinear,\n curveMonotoneX: curveMonotoneX,\n curveMonotoneY: curveMonotoneY,\n curveNatural: curveNatural,\n curveStep: curveStep,\n curveStepAfter: curveStepAfter,\n curveStepBefore: curveStepBefore\n};\n\nvar defined = function defined(p) {\n return p.x === +p.x && p.y === +p.y;\n};\n\nvar getX = function getX(p) {\n return p.x;\n};\n\nvar getY = function getY(p) {\n return p.y;\n};\n\nvar getCurveFactory = function getCurveFactory(type, layout) {\n if (_isFunction(type)) {\n return type;\n }\n\n var name = \"curve\".concat(type.slice(0, 1).toUpperCase()).concat(type.slice(1));\n\n if (name === 'curveMonotone' && layout) {\n return CURVE_FACTORIES[\"\".concat(name).concat(layout === 'vertical' ? 'Y' : 'X')];\n }\n\n return CURVE_FACTORIES[name] || curveLinear;\n};\n\nvar Curve = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Curve, _Component);\n\n function Curve() {\n _classCallCheck(this, Curve);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Curve).apply(this, arguments));\n }\n\n _createClass(Curve, [{\n key: \"getPath\",\n\n /**\n * Calculate the path of curve\n * @return {String} path\n */\n value: function getPath() {\n var _this$props = this.props,\n type = _this$props.type,\n points = _this$props.points,\n baseLine = _this$props.baseLine,\n layout = _this$props.layout,\n connectNulls = _this$props.connectNulls;\n var curveFactory = getCurveFactory(type, layout);\n var formatPoints = connectNulls ? points.filter(function (entry) {\n return defined(entry);\n }) : points;\n var lineFunction;\n\n if (_isArray(baseLine)) {\n var formatBaseLine = connectNulls ? baseLine.filter(function (base) {\n return defined(base);\n }) : baseLine;\n var areaPoints = formatPoints.map(function (entry, index) {\n return _objectSpread({}, entry, {\n base: formatBaseLine[index]\n });\n });\n\n if (layout === 'vertical') {\n lineFunction = shapeArea().y(getY).x1(getX).x0(function (d) {\n return d.base.x;\n });\n } else {\n lineFunction = shapeArea().x(getX).y1(getY).y0(function (d) {\n return d.base.y;\n });\n }\n\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(areaPoints);\n }\n\n if (layout === 'vertical' && isNumber(baseLine)) {\n lineFunction = shapeArea().y(getY).x1(getX).x0(baseLine);\n } else if (isNumber(baseLine)) {\n lineFunction = shapeArea().x(getX).y1(getY).y0(baseLine);\n } else {\n lineFunction = shapeLine().x(getX).y(getY);\n }\n\n lineFunction.defined(defined).curve(curveFactory);\n return lineFunction(formatPoints);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n points = _this$props2.points,\n path = _this$props2.path,\n pathRef = _this$props2.pathRef;\n\n if ((!points || !points.length) && !path) {\n return null;\n }\n\n var realPath = points && points.length ? this.getPath() : path;\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props, null, true), {\n className: classNames('recharts-curve', className),\n d: realPath,\n ref: pathRef\n }));\n }\n }]);\n\n return Curve;\n}(Component), _class2.displayName = 'Curve', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n type: PropTypes.oneOfType([PropTypes.oneOf(['basis', 'basisClosed', 'basisOpen', 'linear', 'linearClosed', 'natural', 'monotoneX', 'monotoneY', 'monotone', 'step', 'stepBefore', 'stepAfter']), PropTypes.func]),\n layout: PropTypes.oneOf(['horizontal', 'vertical']),\n baseLine: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n points: PropTypes.arrayOf(PropTypes.object),\n connectNulls: PropTypes.bool,\n path: PropTypes.string,\n pathRef: PropTypes.func\n}), _class2.defaultProps = {\n type: 'linear',\n points: [],\n connectNulls: false\n}, _temp)) || _class;\n\nexport default Curve;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Dot\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\n\nvar Dot = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Dot, _Component);\n\n function Dot() {\n _classCallCheck(this, Dot);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Dot).apply(this, arguments));\n }\n\n _createClass(Dot, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n cx = _this$props.cx,\n cy = _this$props.cy,\n r = _this$props.r,\n className = _this$props.className;\n var layerClass = classNames('recharts-dot', className);\n\n if (cx === +cx && cy === +cy && r === +r) {\n return React.createElement(\"circle\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props, null, true), {\n className: layerClass,\n cx: cx,\n cy: cy,\n r: r\n }));\n }\n\n return null;\n }\n }]);\n\n return Dot;\n}(Component), _class2.displayName = 'Dot', _class2.propTypes = {\n className: PropTypes.string,\n cx: PropTypes.number,\n cy: PropTypes.number,\n r: PropTypes.number\n}, _temp)) || _class;\n\nexport default Dot;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Rectangle\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Animate from 'react-smooth';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\n\nvar getRectangePath = function getRectangePath(x, y, width, height, radius) {\n var maxRadius = Math.min(Math.abs(width) / 2, Math.abs(height) / 2);\n var ySign = height >= 0 ? 1 : -1;\n var xSign = width >= 0 ? 1 : -1;\n var clockWise = height >= 0 && width >= 0 || height < 0 && width < 0 ? 1 : 0;\n var path;\n\n if (maxRadius > 0 && radius instanceof Array) {\n var newRadius = [];\n\n for (var i = 0, len = 4; i < len; i++) {\n newRadius[i] = radius[i] > maxRadius ? maxRadius : radius[i];\n }\n\n path = \"M\".concat(x, \",\").concat(y + ySign * newRadius[0]);\n\n if (newRadius[0] > 0) {\n path += \"A \".concat(newRadius[0], \",\").concat(newRadius[0], \",0,0,\").concat(clockWise, \",\").concat(x + xSign * newRadius[0], \",\").concat(y);\n }\n\n path += \"L \".concat(x + width - xSign * newRadius[1], \",\").concat(y);\n\n if (newRadius[1] > 0) {\n path += \"A \".concat(newRadius[1], \",\").concat(newRadius[1], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width, \",\").concat(y + ySign * newRadius[1]);\n }\n\n path += \"L \".concat(x + width, \",\").concat(y + height - ySign * newRadius[2]);\n\n if (newRadius[2] > 0) {\n path += \"A \".concat(newRadius[2], \",\").concat(newRadius[2], \",0,0,\").concat(clockWise, \",\\n \").concat(x + width - xSign * newRadius[2], \",\").concat(y + height);\n }\n\n path += \"L \".concat(x + xSign * newRadius[3], \",\").concat(y + height);\n\n if (newRadius[3] > 0) {\n path += \"A \".concat(newRadius[3], \",\").concat(newRadius[3], \",0,0,\").concat(clockWise, \",\\n \").concat(x, \",\").concat(y + height - ySign * newRadius[3]);\n }\n\n path += 'Z';\n } else if (maxRadius > 0 && radius === +radius && radius > 0) {\n var _newRadius = Math.min(maxRadius, radius);\n\n path = \"M \".concat(x, \",\").concat(y + ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + xSign * _newRadius, \",\").concat(y, \"\\n L \").concat(x + width - xSign * _newRadius, \",\").concat(y, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width, \",\").concat(y + ySign * _newRadius, \"\\n L \").concat(x + width, \",\").concat(y + height - ySign * _newRadius, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x + width - xSign * _newRadius, \",\").concat(y + height, \"\\n L \").concat(x + xSign * _newRadius, \",\").concat(y + height, \"\\n A \").concat(_newRadius, \",\").concat(_newRadius, \",0,0,\").concat(clockWise, \",\").concat(x, \",\").concat(y + height - ySign * _newRadius, \" Z\");\n } else {\n path = \"M \".concat(x, \",\").concat(y, \" h \").concat(width, \" v \").concat(height, \" h \").concat(-width, \" Z\");\n }\n\n return path;\n};\n\nvar Rectangle = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Rectangle, _Component);\n\n function Rectangle() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Rectangle);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Rectangle)).call.apply(_getPrototypeOf2, [this].concat(args)));\n _this.state = {\n totalLength: -1\n };\n return _this;\n }\n\n _createClass(Rectangle, [{\n key: \"componentDidMount\",\n\n /* eslint-disable react/no-did-mount-set-state */\n value: function componentDidMount() {\n if (this.node && this.node.getTotalLength) {\n try {\n var totalLength = this.node.getTotalLength();\n\n if (totalLength) {\n this.setState({\n totalLength: totalLength\n });\n }\n } catch (err) {// calculate total length error\n }\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n x = _this$props.x,\n y = _this$props.y,\n width = _this$props.width,\n height = _this$props.height,\n radius = _this$props.radius,\n className = _this$props.className;\n var totalLength = this.state.totalLength;\n var _this$props2 = this.props,\n animationEasing = _this$props2.animationEasing,\n animationDuration = _this$props2.animationDuration,\n animationBegin = _this$props2.animationBegin,\n isAnimationActive = _this$props2.isAnimationActive,\n isUpdateAnimationActive = _this$props2.isUpdateAnimationActive;\n\n if (x !== +x || y !== +y || width !== +width || height !== +height || width === 0 || height === 0) {\n return null;\n }\n\n var layerClass = classNames('recharts-rectangle', className);\n\n if (!isUpdateAnimationActive) {\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: layerClass,\n d: getRectangePath(x, y, width, height, radius)\n }));\n }\n\n return React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n to: {\n width: width,\n height: height,\n x: x,\n y: y\n },\n duration: animationDuration,\n animationEasing: animationEasing,\n isActive: isUpdateAnimationActive\n }, function (_ref) {\n var currWidth = _ref.width,\n currHeight = _ref.height,\n currX = _ref.x,\n currY = _ref.y;\n return React.createElement(Animate, {\n canBegin: totalLength > 0,\n from: \"0px \".concat(totalLength === -1 ? 1 : totalLength, \"px\"),\n to: \"\".concat(totalLength, \"px 0px\"),\n attributeName: \"strokeDasharray\",\n begin: animationBegin,\n duration: animationDuration,\n isActive: isAnimationActive,\n easing: animationEasing\n }, React.createElement(\"path\", _extends({}, getPresentationAttributes(_this2.props), filterEventAttributes(_this2.props), {\n className: layerClass,\n d: getRectangePath(currX, currY, currWidth, currHeight, radius),\n ref: function ref(node) {\n _this2.node = node;\n }\n })));\n });\n }\n }]);\n\n return Rectangle;\n}(Component), _class2.displayName = 'Rectangle', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, EVENT_ATTRIBUTES, {\n className: PropTypes.string,\n x: PropTypes.number,\n y: PropTypes.number,\n width: PropTypes.number,\n height: PropTypes.number,\n radius: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),\n isAnimationActive: PropTypes.bool,\n isUpdateAnimationActive: PropTypes.bool,\n animationBegin: PropTypes.number,\n animationDuration: PropTypes.number,\n animationEasing: PropTypes.oneOf(['ease', 'ease-in', 'ease-out', 'ease-in-out', 'linear'])\n}), _class2.defaultProps = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n // The radius of border\n // The radius of four corners when radius is a number\n // The radius of left-top, right-top, right-bottom, left-bottom when radius is an array\n radius: 0,\n isAnimationActive: false,\n isUpdateAnimationActive: false,\n animationBegin: 0,\n animationDuration: 1500,\n animationEasing: 'ease'\n}, _temp)) || _class;\n\nexport default Rectangle;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Sector\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nimport { polarToCartesian, RADIAN } from '../util/PolarUtils';\nimport { getPercentValue, mathSign } from '../util/DataUtils';\n\nvar getDeltaAngle = function getDeltaAngle(startAngle, endAngle) {\n var sign = mathSign(endAngle - startAngle);\n var deltaAngle = Math.min(Math.abs(endAngle - startAngle), 359.999);\n return sign * deltaAngle;\n};\n\nvar getTangentCircle = function getTangentCircle(_ref) {\n var cx = _ref.cx,\n cy = _ref.cy,\n radius = _ref.radius,\n angle = _ref.angle,\n sign = _ref.sign,\n isExternal = _ref.isExternal,\n cornerRadius = _ref.cornerRadius;\n var centerRadius = cornerRadius * (isExternal ? 1 : -1) + radius;\n var theta = Math.asin(cornerRadius / centerRadius) / RADIAN;\n var centerAngle = angle + sign * theta;\n var center = polarToCartesian(cx, cy, centerRadius, centerAngle); // The coordinate of point which is tangent to the circle\n\n var circleTangency = polarToCartesian(cx, cy, radius, centerAngle); // The coordinate of point which is tangent to the radius line\n\n var lineTangency = polarToCartesian(cx, cy, centerRadius * Math.cos(theta * RADIAN), angle);\n return {\n center: center,\n circleTangency: circleTangency,\n lineTangency: lineTangency,\n theta: theta\n };\n};\n\nvar getSectorPath = function getSectorPath(_ref2) {\n var cx = _ref2.cx,\n cy = _ref2.cy,\n innerRadius = _ref2.innerRadius,\n outerRadius = _ref2.outerRadius,\n startAngle = _ref2.startAngle,\n endAngle = _ref2.endAngle;\n var angle = getDeltaAngle(startAngle, endAngle); // When the angle of sector equals to 360, star point and end point coincide\n\n var tempEndAngle = startAngle + angle;\n var outerStartPoint = polarToCartesian(cx, cy, outerRadius, startAngle);\n var outerEndPoint = polarToCartesian(cx, cy, outerRadius, tempEndAngle);\n var path = \"M \".concat(outerStartPoint.x, \",\").concat(outerStartPoint.y, \"\\n A \").concat(outerRadius, \",\").concat(outerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle > tempEndAngle), \",\\n \").concat(outerEndPoint.x, \",\").concat(outerEndPoint.y, \"\\n \");\n\n if (innerRadius > 0) {\n var innerStartPoint = polarToCartesian(cx, cy, innerRadius, startAngle);\n var innerEndPoint = polarToCartesian(cx, cy, innerRadius, tempEndAngle);\n path += \"L \".concat(innerEndPoint.x, \",\").concat(innerEndPoint.y, \"\\n A \").concat(innerRadius, \",\").concat(innerRadius, \",0,\\n \").concat(+(Math.abs(angle) > 180), \",\").concat(+(startAngle <= tempEndAngle), \",\\n \").concat(innerStartPoint.x, \",\").concat(innerStartPoint.y, \" Z\");\n } else {\n path += \"L \".concat(cx, \",\").concat(cy, \" Z\");\n }\n\n return path;\n};\n\nvar getSectorWithCorner = function getSectorWithCorner(_ref3) {\n var cx = _ref3.cx,\n cy = _ref3.cy,\n innerRadius = _ref3.innerRadius,\n outerRadius = _ref3.outerRadius,\n cornerRadius = _ref3.cornerRadius,\n startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var sign = mathSign(endAngle - startAngle);\n\n var _getTangentCircle = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: startAngle,\n sign: sign,\n cornerRadius: cornerRadius\n }),\n soct = _getTangentCircle.circleTangency,\n solt = _getTangentCircle.lineTangency,\n sot = _getTangentCircle.theta;\n\n var _getTangentCircle2 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: outerRadius,\n angle: endAngle,\n sign: -sign,\n cornerRadius: cornerRadius\n }),\n eoct = _getTangentCircle2.circleTangency,\n eolt = _getTangentCircle2.lineTangency,\n eot = _getTangentCircle2.theta;\n\n var outerArcAngle = Math.abs(startAngle - endAngle) - sot - eot;\n\n if (outerArcAngle < 0) {\n return getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n\n var path = \"M \".concat(solt.x, \",\").concat(solt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(soct.x, \",\").concat(soct.y, \"\\n A\").concat(outerRadius, \",\").concat(outerRadius, \",0,\").concat(+(outerArcAngle > 180), \",\").concat(+(sign < 0), \",\").concat(eoct.x, \",\").concat(eoct.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eolt.x, \",\").concat(eolt.y, \"\\n \");\n\n if (innerRadius > 0) {\n var _getTangentCircle3 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: startAngle,\n sign: sign,\n isExternal: true,\n cornerRadius: cornerRadius\n }),\n sict = _getTangentCircle3.circleTangency,\n silt = _getTangentCircle3.lineTangency,\n sit = _getTangentCircle3.theta;\n\n var _getTangentCircle4 = getTangentCircle({\n cx: cx,\n cy: cy,\n radius: innerRadius,\n angle: endAngle,\n sign: -sign,\n isExternal: true,\n cornerRadius: cornerRadius\n }),\n eict = _getTangentCircle4.circleTangency,\n eilt = _getTangentCircle4.lineTangency,\n eit = _getTangentCircle4.theta;\n\n var innerArcAngle = Math.abs(startAngle - endAngle) - sit - eit;\n\n if (innerArcAngle < 0) {\n return \"\".concat(path, \"L\").concat(cx, \",\").concat(cy, \"Z\");\n }\n\n path += \"L\".concat(eilt.x, \",\").concat(eilt.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(eict.x, \",\").concat(eict.y, \"\\n A\").concat(innerRadius, \",\").concat(innerRadius, \",0,\").concat(+(innerArcAngle > 180), \",\").concat(+(sign > 0), \",\").concat(sict.x, \",\").concat(sict.y, \"\\n A\").concat(cornerRadius, \",\").concat(cornerRadius, \",0,0,\").concat(+(sign < 0), \",\").concat(silt.x, \",\").concat(silt.y, \"Z\");\n } else {\n path += \"L\".concat(cx, \",\").concat(cy, \"Z\");\n }\n\n return path;\n};\n\nvar Sector = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Sector, _Component);\n\n function Sector() {\n _classCallCheck(this, Sector);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Sector).apply(this, arguments));\n }\n\n _createClass(Sector, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n cx = _this$props.cx,\n cy = _this$props.cy,\n innerRadius = _this$props.innerRadius,\n outerRadius = _this$props.outerRadius,\n cornerRadius = _this$props.cornerRadius,\n startAngle = _this$props.startAngle,\n endAngle = _this$props.endAngle,\n className = _this$props.className;\n\n if (outerRadius < innerRadius || startAngle === endAngle) {\n return null;\n }\n\n var layerClass = classNames('recharts-sector', className);\n var deltaRadius = outerRadius - innerRadius;\n var cr = getPercentValue(cornerRadius, deltaRadius, 0, true);\n var path;\n\n if (cr > 0 && Math.abs(startAngle - endAngle) < 360) {\n path = getSectorWithCorner({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n cornerRadius: Math.min(cr, deltaRadius / 2),\n startAngle: startAngle,\n endAngle: endAngle\n });\n } else {\n path = getSectorPath({\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n }\n\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: layerClass,\n d: path\n }));\n }\n }]);\n\n return Sector;\n}(Component), _class2.displayName = 'Sector', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n cx: PropTypes.number,\n cy: PropTypes.number,\n innerRadius: PropTypes.number,\n outerRadius: PropTypes.number,\n startAngle: PropTypes.number,\n endAngle: PropTypes.number,\n cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n}), _class2.defaultProps = {\n cx: 0,\n cy: 0,\n innerRadius: 0,\n outerRadius: 0,\n startAngle: 0,\n endAngle: 0,\n cornerRadius: 0\n}, _temp)) || _class;\n\nexport default Sector;", + "var _class, _class2, _temp;\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\n/**\n * @fileOverview Curve\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { symbol as shapeSymbol, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from 'd3-shape';\nimport classNames from 'classnames';\nimport pureRender from '../util/PureRender';\nimport { PRESENTATION_ATTRIBUTES, getPresentationAttributes, filterEventAttributes } from '../util/ReactUtils';\nvar SYMBOL_FACTORIES = {\n symbolCircle: symbolCircle,\n symbolCross: symbolCross,\n symbolDiamond: symbolDiamond,\n symbolSquare: symbolSquare,\n symbolStar: symbolStar,\n symbolTriangle: symbolTriangle,\n symbolWye: symbolWye\n};\nvar RADIAN = Math.PI / 180;\n\nvar getSymbolFactory = function getSymbolFactory(type) {\n var name = \"symbol\".concat(type.slice(0, 1).toUpperCase()).concat(type.slice(1));\n return SYMBOL_FACTORIES[name] || symbolCircle;\n};\n\nvar calculateAreaSize = function calculateAreaSize(size, sizeType, type) {\n if (sizeType === 'area') {\n return size;\n }\n\n switch (type) {\n case 'cross':\n return 5 * size * size / 9;\n\n case 'diamond':\n return 0.5 * size * size / Math.sqrt(3);\n\n case 'square':\n return size * size;\n\n case 'star':\n {\n var angle = 18 * RADIAN;\n return 1.25 * size * size * (Math.tan(angle) - Math.tan(angle * 2) * Math.pow(Math.tan(angle), 2));\n }\n\n case 'triangle':\n return Math.sqrt(3) * size * size / 4;\n\n case 'wye':\n return (21 - 10 * Math.sqrt(3)) * size * size / 8;\n\n default:\n return Math.PI * size * size / 4;\n }\n};\n\nvar Symbols = pureRender(_class = (_temp = _class2 =\n/*#__PURE__*/\nfunction (_Component) {\n _inherits(Symbols, _Component);\n\n function Symbols() {\n _classCallCheck(this, Symbols);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(Symbols).apply(this, arguments));\n }\n\n _createClass(Symbols, [{\n key: \"getPath\",\n\n /**\n * Calculate the path of curve\n * @return {String} path\n */\n value: function getPath() {\n var _this$props = this.props,\n size = _this$props.size,\n sizeType = _this$props.sizeType,\n type = _this$props.type;\n var symbolFactory = getSymbolFactory(type);\n var symbol = shapeSymbol().type(symbolFactory).size(calculateAreaSize(size, sizeType, type));\n return symbol();\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props2 = this.props,\n className = _this$props2.className,\n cx = _this$props2.cx,\n cy = _this$props2.cy,\n size = _this$props2.size;\n\n if (cx === +cx && cy === +cy && size === +size) {\n return React.createElement(\"path\", _extends({}, getPresentationAttributes(this.props), filterEventAttributes(this.props), {\n className: classNames('recharts-symbols', className),\n transform: \"translate(\".concat(cx, \", \").concat(cy, \")\"),\n d: this.getPath()\n }));\n }\n\n return null;\n }\n }]);\n\n return Symbols;\n}(Component), _class2.displayName = 'Symbols', _class2.propTypes = _objectSpread({}, PRESENTATION_ATTRIBUTES, {\n className: PropTypes.string,\n type: PropTypes.oneOf(['circle', 'cross', 'diamond', 'square', 'star', 'triangle', 'wye']),\n cx: PropTypes.number,\n cy: PropTypes.number,\n size: PropTypes.number,\n sizeType: PropTypes.oneOf(['area', 'diameter'])\n}), _class2.defaultProps = {\n type: 'circle',\n size: 64,\n sizeType: 'area'\n}, _temp)) || _class;\n\nexport default Symbols;", + "import _every from \"lodash/every\";\nimport _mapValues from \"lodash/mapValues\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getTicksOfScale, parseScale, checkDomainOfScale, getBandSizeOfAxis } from './ChartUtils';\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {String} axisType The type of axes, x-axis or y-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\n\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height,\n layout = props.layout;\n var ids = Object.keys(axisMap);\n var steps = {\n left: offset.left,\n leftMirror: offset.left,\n right: width - offset.right,\n rightMirror: width - offset.right,\n top: offset.top,\n topMirror: offset.top,\n bottom: height - offset.bottom,\n bottomMirror: height - offset.bottom\n };\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var orientation = axis.orientation,\n domain = axis.domain,\n _axis$padding = axis.padding,\n padding = _axis$padding === void 0 ? {} : _axis$padding,\n mirror = axis.mirror,\n reversed = axis.reversed;\n var offsetKey = \"\".concat(orientation).concat(mirror ? 'Mirror' : '');\n var range, x, y, needSpace;\n\n if (axisType === 'xAxis') {\n range = [offset.left + (padding.left || 0), offset.left + offset.width - (padding.right || 0)];\n } else if (axisType === 'yAxis') {\n range = layout === 'horizontal' ? [offset.top + offset.height - (padding.bottom || 0), offset.top + (padding.top || 0)] : [offset.top + (padding.top || 0), offset.top + offset.height - (padding.bottom || 0)];\n } else {\n range = axis.range;\n }\n\n if (reversed) {\n range = [range[1], range[0]];\n }\n\n var _parseScale = parseScale(axis, chartName),\n scale = _parseScale.scale,\n realScaleType = _parseScale.realScaleType;\n\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread({}, axis, {\n realScaleType: realScaleType\n }));\n\n if (axisType === 'xAxis') {\n needSpace = orientation === 'top' && !mirror || orientation === 'bottom' && mirror;\n x = offset.left;\n y = steps[offsetKey] - needSpace * axis.height;\n } else if (axisType === 'yAxis') {\n needSpace = orientation === 'left' && !mirror || orientation === 'right' && mirror;\n x = steps[offsetKey] - needSpace * axis.width;\n y = offset.top;\n }\n\n var finalAxis = _objectSpread({}, axis, ticks, {\n realScaleType: realScaleType,\n x: x,\n y: y,\n scale: scale,\n width: axisType === 'xAxis' ? offset.width : axis.width,\n height: axisType === 'yAxis' ? offset.height : axis.height\n });\n\n finalAxis.bandSize = getBandSizeOfAxis(finalAxis, ticks);\n\n if (!axis.hide && axisType === 'xAxis') {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.height;\n } else if (!axis.hide) {\n steps[offsetKey] += (needSpace ? -1 : 1) * finalAxis.width;\n }\n\n return _objectSpread({}, result, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var rectWithPoints = function rectWithPoints(_ref, _ref2) {\n var x1 = _ref.x,\n y1 = _ref.y;\n var x2 = _ref2.x,\n y2 = _ref2.y;\n return {\n x: Math.min(x1, x2),\n y: Math.min(y1, y2),\n width: Math.abs(x2 - x1),\n height: Math.abs(y2 - y1)\n };\n};\n/**\n * Compute the x, y, width, and height of a box from two reference points.\n * @param {Object} coords x1, x2, y1, and y2\n * @return {Object} object\n */\n\nexport var rectWithCoords = function rectWithCoords(_ref3) {\n var x1 = _ref3.x1,\n y1 = _ref3.y1,\n x2 = _ref3.x2,\n y2 = _ref3.y2;\n return rectWithPoints({\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n });\n};\nexport var ScaleHelper =\n/*#__PURE__*/\nfunction () {\n _createClass(ScaleHelper, null, [{\n key: \"create\",\n value: function create(obj) {\n return new ScaleHelper(obj);\n }\n }]);\n\n function ScaleHelper(scale) {\n _classCallCheck(this, ScaleHelper);\n\n this.scale = scale;\n }\n\n _createClass(ScaleHelper, [{\n key: \"apply\",\n value: function apply(value) {\n var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref4.bandAware;\n\n if (value === undefined) {\n return undefined;\n }\n\n if (bandAware) {\n var offset = this.bandwidth ? this.bandwidth() / 2 : 0;\n return this.scale(value) + offset;\n }\n\n return this.scale(value);\n }\n }, {\n key: \"isInRange\",\n value: function isInRange(value) {\n var range = this.range();\n var first = range[0];\n var last = range[range.length - 1];\n return first <= last ? value >= first && value <= last : value >= last && value <= first;\n }\n }, {\n key: \"domain\",\n get: function get() {\n return this.scale.domain;\n }\n }, {\n key: \"range\",\n get: function get() {\n return this.scale.range;\n }\n }, {\n key: \"rangeMin\",\n get: function get() {\n return this.range()[0];\n }\n }, {\n key: \"rangeMax\",\n get: function get() {\n return this.range()[1];\n }\n }, {\n key: \"bandwidth\",\n get: function get() {\n return this.scale.bandwidth;\n }\n }]);\n\n return ScaleHelper;\n}();\nScaleHelper.EPS = 1e-4;\nexport var LabeledScaleHelper =\n/*#__PURE__*/\nfunction () {\n _createClass(LabeledScaleHelper, null, [{\n key: \"create\",\n value: function create(obj) {\n return new this(obj);\n }\n }]);\n\n function LabeledScaleHelper(scales) {\n _classCallCheck(this, LabeledScaleHelper);\n\n this.scales = _mapValues(scales, ScaleHelper.create);\n Object.assign(this, this.scales);\n }\n\n _createClass(LabeledScaleHelper, [{\n key: \"apply\",\n value: function apply(coords) {\n var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n bandAware = _ref5.bandAware;\n\n var scales = this.scales;\n return _mapValues(coords, function (value, label) {\n return scales[label].apply(value, {\n bandAware: bandAware\n });\n });\n }\n }, {\n key: \"isInRange\",\n value: function isInRange(coords) {\n var scales = this.scales;\n return _every(coords, function (value, label) {\n return scales[label].isInRange(value);\n });\n }\n }]);\n\n return LabeledScaleHelper;\n}();", + "import _isEqual from \"lodash/isEqual\";\nimport _sortBy from \"lodash/sortBy\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isString from \"lodash/isString\";\nimport _max from \"lodash/max\";\nimport _min from \"lodash/min\";\nimport _isArray from \"lodash/isArray\";\nimport _flatMap from \"lodash/flatMap\";\nimport _isFunction from \"lodash/isFunction\";\nimport _get from \"lodash/get\";\nimport _isNil from \"lodash/isNil\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { getNiceTickValues, getTickValuesFixedDomain } from 'recharts-scale';\nimport * as d3Scales from 'd3-scale';\nimport { stack as shapeStack, stackOrderNone, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle } from 'd3-shape';\nimport { isNumOrStr, uniqueId, isNumber, getPercentValue, mathSign, findEntryInArray } from './DataUtils';\nimport ReferenceDot from '../cartesian/ReferenceDot';\nimport ReferenceLine from '../cartesian/ReferenceLine';\nimport ReferenceArea from '../cartesian/ReferenceArea';\nimport ErrorBar from '../cartesian/ErrorBar';\nimport Legend from '../component/Legend';\nimport { findAllByType, findChildByType, getDisplayName } from './ReactUtils';\nexport var getValueByDataKey = function getValueByDataKey(obj, dataKey, defaultValue) {\n if (_isNil(obj) || _isNil(dataKey)) {\n return defaultValue;\n }\n\n if (isNumOrStr(dataKey)) {\n return _get(obj, dataKey, defaultValue);\n }\n\n if (_isFunction(dataKey)) {\n return dataKey(obj);\n }\n\n return defaultValue;\n};\n/**\n * Get domain of data by key\n * @param {Array} data The data displayed in the chart\n * @param {String} key The unique key of a group of data\n * @param {String} type The type of axis\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain of data\n */\n\nexport var getDomainOfDataByKey = function getDomainOfDataByKey(data, key, type, filterNil) {\n var flattenData = _flatMap(data, function (entry) {\n return getValueByDataKey(entry, key);\n });\n\n if (type === 'number') {\n var domain = flattenData.filter(function (entry) {\n return isNumber(entry) || parseFloat(entry, 10);\n });\n return [Math.min.apply(null, domain), Math.max.apply(null, domain)];\n }\n\n var validateData = filterNil ? flattenData.filter(function (entry) {\n return !_isNil(entry);\n }) : flattenData;\n return validateData.map(function (entry) {\n return isNumOrStr(entry) ? entry : '';\n });\n};\nexport var calculateActiveTickIndex = function calculateActiveTickIndex(coordinate, ticks, unsortedTicks, axis) {\n var index = -1;\n var len = ticks.length;\n\n if (len > 1) {\n if (axis && axis.axisType === 'angleAxis' && Math.abs(Math.abs(axis.range[1] - axis.range[0]) - 360) <= 1e-6) {\n var range = axis.range; // ticks are distributed in a circle\n\n for (var i = 0; i < len; i++) {\n var before = i > 0 ? unsortedTicks[i - 1].coordinate : unsortedTicks[len - 1].coordinate;\n var cur = unsortedTicks[i].coordinate;\n var after = i >= len - 1 ? unsortedTicks[0].coordinate : unsortedTicks[i + 1].coordinate;\n var sameDirectionCoord = void 0;\n\n if (mathSign(cur - before) !== mathSign(after - cur)) {\n var diffInterval = [];\n\n if (mathSign(after - cur) === mathSign(range[1] - range[0])) {\n sameDirectionCoord = after;\n var curInRange = cur + range[1] - range[0];\n diffInterval[0] = Math.min(curInRange, (curInRange + before) / 2);\n diffInterval[1] = Math.max(curInRange, (curInRange + before) / 2);\n } else {\n sameDirectionCoord = before;\n var afterInRange = after + range[1] - range[0];\n diffInterval[0] = Math.min(cur, (afterInRange + cur) / 2);\n diffInterval[1] = Math.max(cur, (afterInRange + cur) / 2);\n }\n\n var sameInterval = [Math.min(cur, (sameDirectionCoord + cur) / 2), Math.max(cur, (sameDirectionCoord + cur) / 2)];\n\n if (coordinate > sameInterval[0] && coordinate <= sameInterval[1] || coordinate >= diffInterval[0] && coordinate <= diffInterval[1]) {\n index = unsortedTicks[i].index;\n break;\n }\n } else {\n var min = Math.min(before, after);\n var max = Math.max(before, after);\n\n if (coordinate > (min + cur) / 2 && coordinate <= (max + cur) / 2) {\n index = unsortedTicks[i].index;\n break;\n }\n }\n }\n } else {\n // ticks are distributed in a single direction\n for (var _i = 0; _i < len; _i++) {\n if (_i === 0 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i > 0 && _i < len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2 && coordinate <= (ticks[_i].coordinate + ticks[_i + 1].coordinate) / 2 || _i === len - 1 && coordinate > (ticks[_i].coordinate + ticks[_i - 1].coordinate) / 2) {\n index = ticks[_i].index;\n break;\n }\n }\n }\n } else {\n index = 0;\n }\n\n return index;\n};\n/**\n * Get the main color of each graphic item\n * @param {ReactElement} item A graphic item\n * @return {String} Color\n */\n\nexport var getMainColorOfGraphicItem = function getMainColorOfGraphicItem(item) {\n var displayName = item.type.displayName;\n var result;\n\n switch (displayName) {\n case 'Line':\n case 'Area':\n case 'Radar':\n result = item.props.stroke;\n break;\n\n default:\n result = item.props.fill;\n break;\n }\n\n return result;\n};\nexport var getLegendProps = function getLegendProps(_ref) {\n var children = _ref.children,\n formatedGraphicalItems = _ref.formatedGraphicalItems,\n legendWidth = _ref.legendWidth,\n legendContent = _ref.legendContent;\n var legendItem = findChildByType(children, Legend);\n\n if (!legendItem) {\n return null;\n }\n\n var legendData;\n\n if (legendItem.props && legendItem.props.payload) {\n legendData = legendItem.props && legendItem.props.payload;\n } else if (legendContent === 'children') {\n legendData = (formatedGraphicalItems || []).reduce(function (result, _ref2) {\n var item = _ref2.item,\n props = _ref2.props;\n var data = props.sectors || props.data || [];\n return result.concat(data.map(function (entry) {\n return {\n type: legendItem.props.iconType || item.props.legendType,\n value: entry.name,\n color: entry.fill,\n payload: entry\n };\n }));\n }, []);\n } else {\n legendData = (formatedGraphicalItems || []).map(function (_ref3) {\n var item = _ref3.item;\n var _item$props = item.props,\n dataKey = _item$props.dataKey,\n name = _item$props.name,\n legendType = _item$props.legendType,\n hide = _item$props.hide;\n return {\n inactive: hide,\n dataKey: dataKey,\n type: legendItem.props.iconType || legendType || 'square',\n color: getMainColorOfGraphicItem(item),\n value: name || dataKey,\n payload: item.props\n };\n });\n }\n\n return _objectSpread({}, legendItem.props, Legend.getWithHeight(legendItem, legendWidth), {\n payload: legendData,\n item: legendItem\n });\n};\n/**\n * Calculate the size of all groups for stacked bar graph\n * @param {Object} stackGroups The items grouped by axisId and stackId\n * @return {Object} The size of all groups\n */\n\nexport var getBarSizeList = function getBarSizeList(_ref4) {\n var globalSize = _ref4.barSize,\n _ref4$stackGroups = _ref4.stackGroups,\n stackGroups = _ref4$stackGroups === void 0 ? {} : _ref4$stackGroups;\n\n if (!stackGroups) {\n return {};\n }\n\n var result = {};\n var numericAxisIds = Object.keys(stackGroups);\n\n for (var i = 0, len = numericAxisIds.length; i < len; i++) {\n var sgs = stackGroups[numericAxisIds[i]].stackGroups;\n var stackIds = Object.keys(sgs);\n\n for (var j = 0, sLen = stackIds.length; j < sLen; j++) {\n var _sgs$stackIds$j = sgs[stackIds[j]],\n items = _sgs$stackIds$j.items,\n cateAxisId = _sgs$stackIds$j.cateAxisId;\n var barItems = items.filter(function (item) {\n return getDisplayName(item.type).indexOf('Bar') >= 0;\n });\n\n if (barItems && barItems.length) {\n var selfSize = barItems[0].props.barSize;\n var cateId = barItems[0].props[cateAxisId];\n\n if (!result[cateId]) {\n result[cateId] = [];\n }\n\n result[cateId].push({\n item: barItems[0],\n stackList: barItems.slice(1),\n barSize: _isNil(selfSize) ? globalSize : selfSize\n });\n }\n }\n }\n\n return result;\n};\n/**\n * Calculate the size of each bar and the gap between two bars\n * @param {Number} bandSize The size of each category\n * @param {sizeList} sizeList The size of all groups\n * @param {maxBarSize} maxBarSize The maximum size of bar\n * @return {Number} The size of each bar and the gap between two bars\n */\n\nexport var getBarPosition = function getBarPosition(_ref5) {\n var barGap = _ref5.barGap,\n barCategoryGap = _ref5.barCategoryGap,\n bandSize = _ref5.bandSize,\n _ref5$sizeList = _ref5.sizeList,\n sizeList = _ref5$sizeList === void 0 ? [] : _ref5$sizeList,\n maxBarSize = _ref5.maxBarSize;\n var len = sizeList.length;\n if (len < 1) return null;\n var realBarGap = getPercentValue(barGap, bandSize, 0, true);\n var result; // whether or not is barSize setted by user\n\n if (sizeList[0].barSize === +sizeList[0].barSize) {\n var useFull = false;\n var fullBarSize = bandSize / len;\n var sum = sizeList.reduce(function (res, entry) {\n return res + entry.barSize || 0;\n }, 0);\n sum += (len - 1) * realBarGap;\n\n if (sum >= bandSize) {\n sum -= (len - 1) * realBarGap;\n realBarGap = 0;\n }\n\n if (sum >= bandSize && fullBarSize > 0) {\n useFull = true;\n fullBarSize *= 0.9;\n sum = len * fullBarSize;\n }\n\n var offset = (bandSize - sum) / 2 >> 0;\n var prev = {\n offset: offset - realBarGap,\n size: 0\n };\n result = sizeList.reduce(function (res, entry) {\n var newRes = _toConsumableArray(res).concat([{\n item: entry.item,\n position: {\n offset: prev.offset + prev.size + realBarGap,\n size: useFull ? fullBarSize : entry.barSize\n }\n }]);\n\n prev = newRes[newRes.length - 1].position;\n\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: prev\n });\n });\n }\n\n return newRes;\n }, []);\n } else {\n var _offset = getPercentValue(barCategoryGap, bandSize, 0, true);\n\n if (bandSize - 2 * _offset - (len - 1) * realBarGap <= 0) {\n realBarGap = 0;\n }\n\n var originalSize = (bandSize - 2 * _offset - (len - 1) * realBarGap) / len;\n\n if (originalSize > 1) {\n originalSize >>= 0;\n }\n\n var size = maxBarSize === +maxBarSize ? Math.min(originalSize, maxBarSize) : originalSize;\n result = sizeList.reduce(function (res, entry, i) {\n var newRes = _toConsumableArray(res).concat([{\n item: entry.item,\n position: {\n offset: _offset + (originalSize + realBarGap) * i + (originalSize - size) / 2,\n size: size\n }\n }]);\n\n if (entry.stackList && entry.stackList.length) {\n entry.stackList.forEach(function (item) {\n newRes.push({\n item: item,\n position: newRes[newRes.length - 1].position\n });\n });\n }\n\n return newRes;\n }, []);\n }\n\n return result;\n};\nexport var appendOffsetOfLegend = function appendOffsetOfLegend(offset, items, props, legendBox) {\n var children = props.children,\n width = props.width,\n height = props.height,\n margin = props.margin;\n var legendWidth = width - (margin.left || 0) - (margin.right || 0);\n var legendHeight = height - (margin.top || 0) - (margin.bottom || 0);\n var legendProps = getLegendProps({\n children: children,\n items: items,\n legendWidth: legendWidth,\n legendHeight: legendHeight\n });\n var newOffset = offset;\n\n if (legendProps) {\n var box = legendBox || {};\n var align = legendProps.align,\n verticalAlign = legendProps.verticalAlign,\n layout = legendProps.layout;\n\n if ((layout === 'vertical' || layout === 'horizontal' && verticalAlign === 'center') && isNumber(offset[align])) {\n newOffset = _objectSpread({}, offset, _defineProperty({}, align, newOffset[align] + (box.width || 0)));\n }\n\n if ((layout === 'horizontal' || layout === 'vertical' && align === 'center') && isNumber(offset[verticalAlign])) {\n newOffset = _objectSpread({}, offset, _defineProperty({}, verticalAlign, newOffset[verticalAlign] + (box.height || 0)));\n }\n }\n\n return newOffset;\n};\nexport var getDomainOfErrorBars = function getDomainOfErrorBars(data, item, dataKey, axisType) {\n var children = item.props.children;\n var errorBars = findAllByType(children, ErrorBar).filter(function (errorBarChild) {\n var direction = errorBarChild.props.direction;\n return _isNil(direction) || _isNil(axisType) ? true : axisType.indexOf(direction) >= 0;\n });\n\n if (errorBars && errorBars.length) {\n var keys = errorBars.map(function (errorBarChild) {\n return errorBarChild.props.dataKey;\n });\n return data.reduce(function (result, entry) {\n var entryValue = getValueByDataKey(entry, dataKey, 0);\n var mainValue = _isArray(entryValue) ? [_min(entryValue), _max(entryValue)] : [entryValue, entryValue];\n var errorDomain = keys.reduce(function (prevErrorArr, k) {\n var errorValue = getValueByDataKey(entry, k, 0);\n var lowerValue = mainValue[0] - Math.abs(_isArray(errorValue) ? errorValue[0] : errorValue);\n var upperValue = mainValue[1] + Math.abs(_isArray(errorValue) ? errorValue[1] : errorValue);\n return [Math.min(lowerValue, prevErrorArr[0]), Math.max(upperValue, prevErrorArr[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(errorDomain[0], result[0]), Math.max(errorDomain[1], result[1])];\n }, [Infinity, -Infinity]);\n }\n\n return null;\n};\nexport var parseErrorBarsOfAxis = function parseErrorBarsOfAxis(data, items, dataKey, axisType) {\n var domains = items.map(function (item) {\n return getDomainOfErrorBars(data, item, dataKey, axisType);\n }).filter(function (entry) {\n return !_isNil(entry);\n });\n\n if (domains && domains.length) {\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n\n return null;\n};\n/**\n * Get domain of data by the configuration of item element\n * @param {Array} data The data displayed in the chart\n * @param {Array} items The instances of item\n * @param {String} type The type of axis, number - Number Axis, category - Category Axis\n * @param {Boolean} filterNil Whether or not filter nil values\n * @return {Array} Domain\n */\n\nexport var getDomainOfItemsWithSameAxis = function getDomainOfItemsWithSameAxis(data, items, type, filterNil) {\n var domains = items.map(function (item) {\n var dataKey = item.props.dataKey;\n\n if (type === 'number' && dataKey) {\n return getDomainOfErrorBars(data, item, dataKey) || getDomainOfDataByKey(data, dataKey, type, filterNil);\n }\n\n return getDomainOfDataByKey(data, dataKey, type, filterNil);\n });\n\n if (type === 'number') {\n // Calculate the domain of number axis\n return domains.reduce(function (result, entry) {\n return [Math.min(result[0], entry[0]), Math.max(result[1], entry[1])];\n }, [Infinity, -Infinity]);\n }\n\n var tag = {}; // Get the union set of category axis\n\n return domains.reduce(function (result, entry) {\n for (var i = 0, len = entry.length; i < len; i++) {\n if (!tag[entry[i]]) {\n tag[entry[i]] = true;\n result.push(entry[i]);\n }\n }\n\n return result;\n }, []);\n};\nexport var isCategorialAxis = function isCategorialAxis(layout, axisType) {\n return layout === 'horizontal' && axisType === 'xAxis' || layout === 'vertical' && axisType === 'yAxis' || layout === 'centric' && axisType === 'angleAxis' || layout === 'radial' && axisType === 'radiusAxis';\n};\n/**\n * Calculate the Coordinates of grid\n * @param {Array} ticks The ticks in axis\n * @param {Number} min The minimun value of axis\n * @param {Number} max The maximun value of axis\n * @return {Array} Coordinates\n */\n\nexport var getCoordinatesOfGrid = function getCoordinatesOfGrid(ticks, min, max) {\n var hasMin, hasMax;\n var values = ticks.map(function (entry) {\n if (entry.coordinate === min) {\n hasMin = true;\n }\n\n if (entry.coordinate === max) {\n hasMax = true;\n }\n\n return entry.coordinate;\n });\n\n if (!hasMin) {\n values.push(min);\n }\n\n if (!hasMax) {\n values.push(max);\n }\n\n return values;\n};\n/**\n * Get the ticks of an axis\n * @param {Object} axis The configuration of an axis\n * @param {Boolean} isGrid Whether or not are the ticks in grid\n * @param {Boolean} isAll Return the ticks of all the points or not\n * @return {Array} Ticks\n */\n\nexport var getTicksOfAxis = function getTicksOfAxis(axis, isGrid, isAll) {\n if (!axis) return null;\n var scale = axis.scale;\n var duplicateDomain = axis.duplicateDomain,\n type = axis.type,\n range = axis.range;\n var offset = (isGrid || isAll) && type === 'category' && scale.bandwidth ? scale.bandwidth() / 2 : 0;\n offset = axis.axisType === 'angleAxis' ? mathSign(range[0] - range[1]) * 2 * offset : offset; // The ticks setted by user should only affect the ticks adjacent to axis line\n\n if (isGrid && (axis.ticks || axis.niceTicks)) {\n return (axis.ticks || axis.niceTicks).map(function (entry) {\n var scaleContent = duplicateDomain ? duplicateDomain.indexOf(entry) : entry;\n return {\n coordinate: scale(scaleContent) + offset,\n value: entry,\n offset: offset\n };\n });\n }\n\n if (axis.isCategorial && axis.categoricalDomain) {\n return axis.categoricalDomain.map(function (entry, index) {\n return {\n coordinate: scale(entry),\n value: entry,\n index: index,\n offset: offset\n };\n });\n }\n\n if (scale.ticks && !isAll) {\n return scale.ticks(axis.tickCount).map(function (entry) {\n return {\n coordinate: scale(entry) + offset,\n value: entry,\n offset: offset\n };\n });\n } // When axis has duplicated text, serial numbers are used to generate scale\n\n\n return scale.domain().map(function (entry, index) {\n return {\n coordinate: scale(entry) + offset,\n value: duplicateDomain ? duplicateDomain[entry] : entry,\n index: index,\n offset: offset\n };\n });\n};\n/**\n * combine the handlers\n * @param {Function} defaultHandler Internal private handler\n * @param {Function} parentHandler Handler function specified in parent component\n * @param {Function} childHandler Handler function specified in child component\n * @return {Function} The combined handler\n */\n\nexport var combineEventHandlers = function combineEventHandlers(defaultHandler, parentHandler, childHandler) {\n var customizedHandler;\n\n if (_isFunction(childHandler)) {\n customizedHandler = childHandler;\n } else if (_isFunction(parentHandler)) {\n customizedHandler = parentHandler;\n }\n\n if (_isFunction(defaultHandler) || customizedHandler) {\n return function (arg1, arg2, arg3, arg4) {\n if (_isFunction(defaultHandler)) {\n defaultHandler(arg1, arg2, arg3, arg4);\n }\n\n if (_isFunction(customizedHandler)) {\n customizedHandler(arg1, arg2, arg3, arg4);\n }\n };\n }\n\n return null;\n};\n/**\n * Parse the scale function of axis\n * @param {Object} axis The option of axis\n * @param {String} chartType The displayName of chart\n * @return {Function} The scale funcion\n */\n\nexport var parseScale = function parseScale(axis, chartType) {\n var scale = axis.scale,\n type = axis.type,\n layout = axis.layout,\n axisType = axis.axisType;\n\n if (scale === 'auto') {\n if (layout === 'radial' && axisType === 'radiusAxis') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n\n if (layout === 'radial' && axisType === 'angleAxis') {\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n\n if (type === 'category' && chartType && (chartType.indexOf('LineChart') >= 0 || chartType.indexOf('AreaChart') >= 0)) {\n return {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n }\n\n if (type === 'category') {\n return {\n scale: d3Scales.scaleBand(),\n realScaleType: 'band'\n };\n }\n\n return {\n scale: d3Scales.scaleLinear(),\n realScaleType: 'linear'\n };\n }\n\n if (_isString(scale)) {\n var name = \"scale\".concat(scale.slice(0, 1).toUpperCase()).concat(scale.slice(1));\n return {\n scale: (d3Scales[name] || d3Scales.scalePoint)(),\n realScaleType: d3Scales[name] ? name : 'point'\n };\n }\n\n return _isFunction(scale) ? {\n scale: scale\n } : {\n scale: d3Scales.scalePoint(),\n realScaleType: 'point'\n };\n};\nvar EPS = 1e-4;\nexport var checkDomainOfScale = function checkDomainOfScale(scale) {\n var domain = scale.domain();\n\n if (!domain || domain.length <= 2) {\n return;\n }\n\n var len = domain.length;\n var range = scale.range();\n var min = Math.min(range[0], range[1]) - EPS;\n var max = Math.max(range[0], range[1]) + EPS;\n var first = scale(domain[0]);\n var last = scale(domain[len - 1]);\n\n if (first < min || first > max || last < min || last > max) {\n scale.domain([domain[0], domain[len - 1]]);\n }\n};\nexport var findPositionOfBar = function findPositionOfBar(barPosition, child) {\n if (!barPosition) {\n return null;\n }\n\n for (var i = 0, len = barPosition.length; i < len; i++) {\n if (barPosition[i].item === child) {\n return barPosition[i].position;\n }\n }\n\n return null;\n};\nexport var truncateByDomain = function truncateByDomain(value, domain) {\n if (!domain || domain.length !== 2 || !isNumber(domain[0]) || !isNumber(domain[1])) {\n return value;\n }\n\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n var result = [value[0], value[1]];\n\n if (!isNumber(value[0]) || value[0] < min) {\n result[0] = min;\n }\n\n if (!isNumber(value[1]) || value[1] > max) {\n result[1] = max;\n }\n\n if (result[0] > max) {\n result[0] = max;\n }\n\n if (result[1] < min) {\n result[1] = min;\n }\n\n return result;\n};\n/* eslint no-param-reassign: 0 */\n\nexport var offsetSign = function offsetSign(series) {\n var n = series.length;\n\n if (n <= 0) {\n return;\n }\n\n for (var j = 0, m = series[0].length; j < m; ++j) {\n var positive = 0;\n var negative = 0;\n\n for (var i = 0; i < n; ++i) {\n var value = _isNaN(series[i][j][1]) ? series[i][j][0] : series[i][j][1];\n /* eslint-disable prefer-destructuring */\n\n if (value >= 0) {\n series[i][j][0] = positive;\n series[i][j][1] = positive + value;\n positive = series[i][j][1];\n } else {\n series[i][j][0] = negative;\n series[i][j][1] = negative + value;\n negative = series[i][j][1];\n }\n /* eslint-enable prefer-destructuring */\n\n }\n }\n};\nvar STACK_OFFSET_MAP = {\n sign: offsetSign,\n expand: stackOffsetExpand,\n none: stackOffsetNone,\n silhouette: stackOffsetSilhouette,\n wiggle: stackOffsetWiggle\n};\nexport var getStackedData = function getStackedData(data, stackItems, offsetType) {\n var dataKeys = stackItems.map(function (item) {\n return item.props.dataKey;\n });\n var stack = shapeStack().keys(dataKeys).value(function (d, key) {\n return +getValueByDataKey(d, key, 0);\n }).order(stackOrderNone).offset(STACK_OFFSET_MAP[offsetType]);\n return stack(data);\n};\nexport var getStackGroupsByAxisId = function getStackGroupsByAxisId(data, _items, numericAxisId, cateAxisId, offsetType, reverseStackOrder) {\n if (!data) {\n return null;\n } // reversing items to affect render order (for layering)\n\n\n var items = reverseStackOrder ? _items.reverse() : _items;\n var stackGroups = items.reduce(function (result, item) {\n var _item$props2 = item.props,\n stackId = _item$props2.stackId,\n hide = _item$props2.hide;\n\n if (hide) {\n return result;\n }\n\n var axisId = item.props[numericAxisId];\n var parentGroup = result[axisId] || {\n hasStack: false,\n stackGroups: {}\n };\n\n if (isNumOrStr(stackId)) {\n var childGroup = parentGroup.stackGroups[stackId] || {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: []\n };\n childGroup.items.push(item);\n parentGroup.hasStack = true;\n parentGroup.stackGroups[stackId] = childGroup;\n } else {\n parentGroup.stackGroups[uniqueId('_stackId_')] = {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: [item]\n };\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, parentGroup));\n }, {});\n return Object.keys(stackGroups).reduce(function (result, axisId) {\n var group = stackGroups[axisId];\n\n if (group.hasStack) {\n group.stackGroups = Object.keys(group.stackGroups).reduce(function (res, stackId) {\n var g = group.stackGroups[stackId];\n return _objectSpread({}, res, _defineProperty({}, stackId, {\n numericAxisId: numericAxisId,\n cateAxisId: cateAxisId,\n items: g.items,\n stackedData: getStackedData(data, g.items, offsetType)\n }));\n }, {});\n }\n\n return _objectSpread({}, result, _defineProperty({}, axisId, group));\n }, {});\n};\n/**\n * get domain of ticks\n * @param {Array} ticks Ticks of axis\n * @param {String} type The type of axis\n * @return {Array} domain\n */\n\nexport var calculateDomainOfTicks = function calculateDomainOfTicks(ticks, type) {\n if (type === 'number') {\n return [Math.min.apply(null, ticks), Math.max.apply(null, ticks)];\n }\n\n return ticks;\n};\n/**\n * Configure the scale function of axis\n * @param {Object} scale The scale function\n * @param {Object} opts The configuration of axis\n * @return {Object} null\n */\n\nexport var getTicksOfScale = function getTicksOfScale(scale, opts) {\n var realScaleType = opts.realScaleType,\n type = opts.type,\n tickCount = opts.tickCount,\n originalDomain = opts.originalDomain,\n allowDecimals = opts.allowDecimals;\n var scaleType = realScaleType || opts.scale;\n\n if (scaleType !== 'auto' && scaleType !== 'linear') {\n return null;\n }\n\n if (tickCount && type === 'number' && originalDomain && (originalDomain[0] === 'auto' || originalDomain[1] === 'auto')) {\n // Calculate the ticks by the number of grid when the axis is a number axis\n var domain = scale.domain();\n var tickValues = getNiceTickValues(domain, tickCount, allowDecimals);\n scale.domain(calculateDomainOfTicks(tickValues, type));\n return {\n niceTicks: tickValues\n };\n }\n\n if (tickCount && type === 'number') {\n var _domain = scale.domain();\n\n var _tickValues = getTickValuesFixedDomain(_domain, tickCount, allowDecimals);\n\n return {\n niceTicks: _tickValues\n };\n }\n\n return null;\n};\nexport var getCateCoordinateOfLine = function getCateCoordinateOfLine(_ref6) {\n var axis = _ref6.axis,\n ticks = _ref6.ticks,\n bandSize = _ref6.bandSize,\n entry = _ref6.entry,\n index = _ref6.index,\n dataKey = _ref6.dataKey;\n\n if (axis.type === 'category') {\n // find coordinate of category axis by the value of category\n if (!axis.allowDuplicatedCategory && axis.dataKey && !_isNil(entry[axis.dataKey])) {\n var matchedTick = findEntryInArray(ticks, 'value', entry[axis.dataKey]);\n\n if (matchedTick) {\n return matchedTick.coordinate + bandSize / 2;\n }\n }\n\n return ticks[index] ? ticks[index].coordinate + bandSize / 2 : null;\n }\n\n var value = getValueByDataKey(entry, !_isNil(dataKey) ? dataKey : axis.dataKey);\n return !_isNil(value) ? axis.scale(value) : null;\n};\nexport var getCateCoordinateOfBar = function getCateCoordinateOfBar(_ref7) {\n var axis = _ref7.axis,\n ticks = _ref7.ticks,\n offset = _ref7.offset,\n bandSize = _ref7.bandSize,\n entry = _ref7.entry,\n index = _ref7.index;\n\n if (axis.type === 'category') {\n return ticks[index] ? ticks[index].coordinate + offset : null;\n }\n\n var value = getValueByDataKey(entry, axis.dataKey, axis.domain[index]);\n return !_isNil(value) ? axis.scale(value) - bandSize / 2 + offset : null;\n};\nexport var getBaseValueOfBar = function getBaseValueOfBar(_ref8) {\n var numericAxis = _ref8.numericAxis;\n var domain = numericAxis.scale.domain();\n\n if (numericAxis.type === 'number') {\n var min = Math.min(domain[0], domain[1]);\n var max = Math.max(domain[0], domain[1]);\n\n if (min <= 0 && max >= 0) {\n return 0;\n }\n\n if (max < 0) {\n return max;\n }\n\n return min;\n }\n\n return domain[0];\n};\nexport var ifOverflowMatches = function ifOverflowMatches(props, value) {\n var alwaysShow = props.alwaysShow;\n var ifOverflow = props.ifOverflow;\n\n if (alwaysShow) {\n ifOverflow = 'extendDomain';\n }\n\n return ifOverflow === value;\n};\nexport var detectReferenceElementsDomain = function detectReferenceElementsDomain(children, domain, axisId, axisType, specifiedTicks) {\n var lines = findAllByType(children, ReferenceLine);\n var dots = findAllByType(children, ReferenceDot);\n var elements = lines.concat(dots);\n var areas = findAllByType(children, ReferenceArea);\n var idKey = \"\".concat(axisType, \"Id\");\n var valueKey = axisType[0];\n var finalDomain = domain;\n\n if (elements.length) {\n finalDomain = elements.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[valueKey])) {\n var value = el.props[valueKey];\n return [Math.min(result[0], value), Math.max(result[1], value)];\n }\n\n return result;\n }, finalDomain);\n }\n\n if (areas.length) {\n var key1 = \"\".concat(valueKey, \"1\");\n var key2 = \"\".concat(valueKey, \"2\");\n finalDomain = areas.reduce(function (result, el) {\n if (el.props[idKey] === axisId && ifOverflowMatches(el.props, 'extendDomain') && isNumber(el.props[key1]) && isNumber(el.props[key2])) {\n var value1 = el.props[key1];\n var value2 = el.props[key2];\n return [Math.min(result[0], value1, value2), Math.max(result[1], value1, value2)];\n }\n\n return result;\n }, finalDomain);\n }\n\n if (specifiedTicks && specifiedTicks.length) {\n finalDomain = specifiedTicks.reduce(function (result, tick) {\n if (isNumber(tick)) {\n return [Math.min(result[0], tick), Math.max(result[1], tick)];\n }\n\n return result;\n }, finalDomain);\n }\n\n return finalDomain;\n};\nexport var getStackedDataOfItem = function getStackedDataOfItem(item, stackGroups) {\n var stackId = item.props.stackId;\n\n if (isNumOrStr(stackId)) {\n var group = stackGroups[stackId];\n\n if (group && group.items.length) {\n var itemIndex = -1;\n\n for (var i = 0, len = group.items.length; i < len; i++) {\n if (group.items[i] === item) {\n itemIndex = i;\n break;\n }\n }\n\n return itemIndex >= 0 ? group.stackedData[itemIndex] : null;\n }\n }\n\n return null;\n};\n\nvar getDomainOfSingle = function getDomainOfSingle(data) {\n return data.reduce(function (result, entry) {\n return [Math.min.apply(null, entry.concat([result[0]]).filter(isNumber)), Math.max.apply(null, entry.concat([result[1]]).filter(isNumber))];\n }, [Infinity, -Infinity]);\n};\n\nexport var getDomainOfStackGroups = function getDomainOfStackGroups(stackGroups, startIndex, endIndex) {\n return Object.keys(stackGroups).reduce(function (result, stackId) {\n var group = stackGroups[stackId];\n var stackedData = group.stackedData;\n var domain = stackedData.reduce(function (res, entry) {\n var s = getDomainOfSingle(entry.slice(startIndex, endIndex + 1));\n return [Math.min(res[0], s[0]), Math.max(res[1], s[1])];\n }, [Infinity, -Infinity]);\n return [Math.min(domain[0], result[0]), Math.max(domain[1], result[1])];\n }, [Infinity, -Infinity]).map(function (result) {\n return result === Infinity || result === -Infinity ? 0 : result;\n });\n};\nexport var MIN_VALUE_REG = /^dataMin[\\s]*-[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var MAX_VALUE_REG = /^dataMax[\\s]*\\+[\\s]*([0-9]+([.]{1}[0-9]+){0,1})$/;\nexport var parseSpecifiedDomain = function parseSpecifiedDomain(specifiedDomain, dataDomain, allowDataOverflow) {\n if (!_isArray(specifiedDomain)) {\n return dataDomain;\n }\n\n var domain = [];\n /* eslint-disable prefer-destructuring */\n\n if (isNumber(specifiedDomain[0])) {\n domain[0] = allowDataOverflow ? specifiedDomain[0] : Math.min(specifiedDomain[0], dataDomain[0]);\n } else if (MIN_VALUE_REG.test(specifiedDomain[0])) {\n var value = +MIN_VALUE_REG.exec(specifiedDomain[0])[1];\n domain[0] = dataDomain[0] - value;\n } else if (_isFunction(specifiedDomain[0])) {\n domain[0] = specifiedDomain[0](dataDomain[0]);\n } else {\n domain[0] = dataDomain[0];\n }\n\n if (isNumber(specifiedDomain[1])) {\n domain[1] = allowDataOverflow ? specifiedDomain[1] : Math.max(specifiedDomain[1], dataDomain[1]);\n } else if (MAX_VALUE_REG.test(specifiedDomain[1])) {\n var _value = +MAX_VALUE_REG.exec(specifiedDomain[1])[1];\n\n domain[1] = dataDomain[1] + _value;\n } else if (_isFunction(specifiedDomain[1])) {\n domain[1] = specifiedDomain[1](dataDomain[1]);\n } else {\n domain[1] = dataDomain[1];\n }\n /* eslint-enable prefer-destructuring */\n\n\n return domain;\n};\n/**\n * Calculate the size between two category\n * @param {Object} axis The options of axis\n * @param {Array} ticks The ticks of axis\n * @return {Number} Size\n */\n\nexport var getBandSizeOfAxis = function getBandSizeOfAxis(axis, ticks) {\n if (axis && axis.scale && axis.scale.bandwidth) {\n return axis.scale.bandwidth();\n }\n\n if (axis && ticks && ticks.length >= 2) {\n var orderedTicks = _sortBy(ticks, function (o) {\n return o.coordinate;\n });\n\n var bandSize = Infinity;\n\n for (var i = 1, len = orderedTicks.length; i < len; i++) {\n var cur = orderedTicks[i];\n var prev = orderedTicks[i - 1];\n bandSize = Math.min((cur.coordinate || 0) - (prev.coordinate || 0), bandSize);\n }\n\n return bandSize === Infinity ? 0 : bandSize;\n }\n\n return 0;\n};\n/**\n * parse the domain of a category axis when a domain is specified\n * @param {Array} specifiedDomain The domain specified by users\n * @param {Array} calculatedDomain The domain calculated by dateKey\n * @param {ReactElement} axisChild The axis element\n * @returns {Array} domains\n */\n\nexport var parseDomainOfCategoryAxis = function parseDomainOfCategoryAxis(specifiedDomain, calculatedDomain, axisChild) {\n if (!specifiedDomain || !specifiedDomain.length) {\n return calculatedDomain;\n }\n\n if (_isEqual(specifiedDomain, _get(axisChild, 'type.defaultProps.domain'))) {\n return calculatedDomain;\n }\n\n return specifiedDomain;\n};", + "function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nimport { isSsr } from './ReactUtils';\nvar stringCache = {\n widthCache: {},\n cacheCount: 0\n};\nvar MAX_CACHE_NUM = 2000;\nvar SPAN_STYLE = {\n position: 'absolute',\n top: '-20000px',\n left: 0,\n padding: 0,\n margin: 0,\n border: 'none',\n whiteSpace: 'pre'\n};\nvar STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'lineHeight', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];\nvar MEASUREMENT_SPAN_ID = 'recharts_measurement_span';\n\nfunction autoCompleteStyle(name, value) {\n if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {\n return \"\".concat(value, \"px\");\n }\n\n return value;\n}\n\nfunction camelToMiddleLine(text) {\n var strs = text.split('');\n var formatStrs = strs.reduce(function (result, entry) {\n if (entry === entry.toUpperCase()) {\n return _toConsumableArray(result).concat(['-', entry.toLowerCase()]);\n }\n\n return _toConsumableArray(result).concat([entry]);\n }, []);\n return formatStrs.join('');\n}\n\nexport var getStyleString = function getStyleString(style) {\n return Object.keys(style).reduce(function (result, s) {\n return \"\".concat(result).concat(camelToMiddleLine(s), \":\").concat(autoCompleteStyle(s, style[s]), \";\");\n }, '');\n};\nexport var getStringSize = function getStringSize(text) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (text === undefined || text === null || isSsr()) {\n return {\n width: 0,\n height: 0\n };\n }\n\n var str = \"\".concat(text);\n var styleString = getStyleString(style);\n var cacheKey = \"\".concat(str, \"-\").concat(styleString);\n\n if (stringCache.widthCache[cacheKey]) {\n return stringCache.widthCache[cacheKey];\n }\n\n try {\n var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);\n\n if (!measurementSpan) {\n measurementSpan = document.createElement('span');\n measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);\n document.body.appendChild(measurementSpan);\n } // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)\n // https://en.wikipedia.org/wiki/Content_Security_Policy\n\n\n var measurementSpanStyle = _objectSpread({}, SPAN_STYLE, style);\n\n Object.keys(measurementSpanStyle).map(function (styleKey) {\n measurementSpan.style[styleKey] = measurementSpanStyle[styleKey];\n return styleKey;\n });\n measurementSpan.textContent = str;\n var rect = measurementSpan.getBoundingClientRect();\n var result = {\n width: rect.width,\n height: rect.height\n };\n stringCache.widthCache[cacheKey] = result;\n\n if (++stringCache.cacheCount > MAX_CACHE_NUM) {\n stringCache.cacheCount = 0;\n stringCache.widthCache = {};\n }\n\n return result;\n } catch (e) {\n return {\n width: 0,\n height: 0\n };\n }\n};\nexport var getOffset = function getOffset(el) {\n var html = el.ownerDocument.documentElement;\n var box = {\n top: 0,\n left: 0\n }; // If we don't have gBCR, just use 0,0 rather than error\n // BlackBerry 5, iOS 3 (original iPhone)\n\n if (typeof el.getBoundingClientRect !== 'undefined') {\n box = el.getBoundingClientRect();\n }\n\n return {\n top: box.top + window.pageYOffset - html.clientTop,\n left: box.left + window.pageXOffset - html.clientLeft\n };\n};\n/**\n * Calculate coordinate of cursor in chart\n * @param {Object} event Event object\n * @param {Object} offset The offset of main part in the svg element\n * @return {Object} {chartX, chartY}\n */\n\nexport var calculateChartCoordinate = function calculateChartCoordinate(event, offset) {\n return {\n chartX: Math.round(event.pageX - offset.left),\n chartY: Math.round(event.pageY - offset.top)\n };\n};", + "import _get from \"lodash/get\";\nimport _isArray from \"lodash/isArray\";\nimport _isNaN from \"lodash/isNaN\";\nimport _isNumber from \"lodash/isNumber\";\nimport _isString from \"lodash/isString\";\nexport var mathSign = function mathSign(value) {\n if (value === 0) {\n return 0;\n }\n\n if (value > 0) {\n return 1;\n }\n\n return -1;\n};\nexport var isPercent = function isPercent(value) {\n return _isString(value) && value.indexOf('%') === value.length - 1;\n};\nexport var isNumber = function isNumber(value) {\n return _isNumber(value) && !_isNaN(value);\n};\nexport var isNumOrStr = function isNumOrStr(value) {\n return isNumber(value) || _isString(value);\n};\nvar idCounter = 0;\nexport var uniqueId = function uniqueId(prefix) {\n var id = ++idCounter;\n return \"\".concat(prefix || '').concat(id);\n};\n/**\n * Get percent value of a total value\n * @param {Number|String} percent A percent\n * @param {Number} totalValue Total value\n * @param {NUmber} defaultValue The value returned when percent is undefined or invalid\n * @param {Boolean} validate If set to be true, the result will be validated\n * @return {Number} value\n */\n\nexport var getPercentValue = function getPercentValue(percent, totalValue) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var validate = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!isNumber(percent) && !_isString(percent)) {\n return defaultValue;\n }\n\n var value;\n\n if (isPercent(percent)) {\n var index = percent.indexOf('%');\n value = totalValue * parseFloat(percent.slice(0, index)) / 100;\n } else {\n value = +percent;\n }\n\n if (_isNaN(value)) {\n value = defaultValue;\n }\n\n if (validate && value > totalValue) {\n value = totalValue;\n }\n\n return value;\n};\nexport var getAnyElementOfObject = function getAnyElementOfObject(obj) {\n if (!obj) {\n return null;\n }\n\n var keys = Object.keys(obj);\n\n if (keys && keys.length) {\n return obj[keys[0]];\n }\n\n return null;\n};\nexport var hasDuplicate = function hasDuplicate(ary) {\n if (!_isArray(ary)) {\n return false;\n }\n\n var len = ary.length;\n var cache = {};\n\n for (var i = 0; i < len; i++) {\n if (!cache[ary[i]]) {\n cache[ary[i]] = true;\n } else {\n return true;\n }\n }\n\n return false;\n};\nexport var interpolateNumber = function interpolateNumber(numberA, numberB) {\n if (isNumber(numberA) && isNumber(numberB)) {\n return function (t) {\n return numberA + t * (numberB - numberA);\n };\n }\n\n return function () {\n return numberB;\n };\n};\nexport var findEntryInArray = function findEntryInArray(ary, specifiedKey, specifiedValue) {\n if (!ary || !ary.length) {\n return null;\n }\n\n return ary.find(function (entry) {\n return entry && _get(entry, specifiedKey) === specifiedValue;\n });\n};\n/**\n * The least square linear regression\n * @param {Array} data The array of points\n * @returns {Object} The domain of x, and the parameter of linear function\n */\n\nexport var getLinearRegression = function getLinearRegression(data) {\n if (!data || !data.length) {\n return null;\n }\n\n var len = data.length;\n var xsum = 0;\n var ysum = 0;\n var xysum = 0;\n var xxsum = 0;\n var xmin = Infinity;\n var xmax = -Infinity;\n\n for (var i = 0; i < len; i++) {\n xsum += data[i].cx;\n ysum += data[i].cy;\n xysum += data[i].cx * data[i].cy;\n xxsum += data[i].cx * data[i].cx;\n xmin = Math.min(xmin, data[i].cx);\n xmax = Math.max(xmax, data[i].cx);\n }\n\n var a = len * xxsum !== xsum * xsum ? (len * xysum - xsum * ysum) / (len * xxsum - xsum * xsum) : 0;\n return {\n xmin: xmin,\n xmax: xmax,\n a: a,\n b: (ysum - a * xsum) / len\n };\n};", + "/* eslint no-console: 0 */\nvar isDev = process.env.NODE_ENV !== 'production';\nexport var warn = function warn(condition, format, a, b, c, d, e, f) {\n if (isDev && typeof console !== 'undefined' && console.warn) {\n if (format === undefined) {\n console.warn('LogUtils requires an error message argument');\n }\n\n if (!condition) {\n if (format === undefined) {\n console.warn('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n console.warn(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n }\n }\n }\n};", + "import _isNil from \"lodash/isNil\";\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport { getPercentValue } from './DataUtils';\nimport { parseScale, checkDomainOfScale, getTicksOfScale } from './ChartUtils';\nexport var RADIAN = Math.PI / 180;\nexport var degreeToRadian = function degreeToRadian(angle) {\n return angle * Math.PI / 180;\n};\nexport var radianToDegree = function radianToDegree(angleInRadian) {\n return angleInRadian * 180 / Math.PI;\n};\nexport var polarToCartesian = function polarToCartesian(cx, cy, radius, angle) {\n return {\n x: cx + Math.cos(-RADIAN * angle) * radius,\n y: cy + Math.sin(-RADIAN * angle) * radius\n };\n};\nexport var getMaxRadius = function getMaxRadius(width, height) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n return Math.min(Math.abs(width - (offset.left || 0) - (offset.right || 0)), Math.abs(height - (offset.top || 0) - (offset.bottom || 0))) / 2;\n};\n/**\n * Calculate the scale function, position, width, height of axes\n * @param {Object} props Latest props\n * @param {Object} axisMap The configuration of axes\n * @param {Object} offset The offset of main part in the svg element\n * @param {Object} axisType The type of axes, radius-axis or angle-axis\n * @param {String} chartName The name of chart\n * @return {Object} Configuration\n */\n\nexport var formatAxisMap = function formatAxisMap(props, axisMap, offset, axisType, chartName) {\n var width = props.width,\n height = props.height;\n var startAngle = props.startAngle,\n endAngle = props.endAngle;\n var cx = getPercentValue(props.cx, width, width / 2);\n var cy = getPercentValue(props.cy, height, height / 2);\n var maxRadius = getMaxRadius(width, height, offset);\n var innerRadius = getPercentValue(props.innerRadius, maxRadius, 0);\n var outerRadius = getPercentValue(props.outerRadius, maxRadius, maxRadius * 0.8);\n var ids = Object.keys(axisMap);\n return ids.reduce(function (result, id) {\n var axis = axisMap[id];\n var domain = axis.domain,\n reversed = axis.reversed;\n var range;\n\n if (_isNil(axis.range)) {\n if (axisType === 'angleAxis') {\n range = [startAngle, endAngle];\n } else if (axisType === 'radiusAxis') {\n range = [innerRadius, outerRadius];\n }\n\n if (reversed) {\n range = [range[1], range[0]];\n }\n } else {\n range = axis.range;\n var _range = range;\n\n var _range2 = _slicedToArray(_range, 2);\n\n startAngle = _range2[0];\n endAngle = _range2[1];\n }\n\n var _parseScale = parseScale(axis, chartName),\n realScaleType = _parseScale.realScaleType,\n scale = _parseScale.scale;\n\n scale.domain(domain).range(range);\n checkDomainOfScale(scale);\n var ticks = getTicksOfScale(scale, _objectSpread({}, axis, {\n realScaleType: realScaleType\n }));\n\n var finalAxis = _objectSpread({}, axis, ticks, {\n range: range,\n radius: outerRadius,\n realScaleType: realScaleType,\n scale: scale,\n cx: cx,\n cy: cy,\n innerRadius: innerRadius,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n return _objectSpread({}, result, _defineProperty({}, id, finalAxis));\n }, {});\n};\nexport var distanceBetweenPoints = function distanceBetweenPoints(point, anotherPoint) {\n var x1 = point.x,\n y1 = point.y;\n var x2 = anotherPoint.x,\n y2 = anotherPoint.y;\n return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));\n};\nexport var getAngleOfPoint = function getAngleOfPoint(_ref, _ref2) {\n var x = _ref.x,\n y = _ref.y;\n var cx = _ref2.cx,\n cy = _ref2.cy;\n var radius = distanceBetweenPoints({\n x: x,\n y: y\n }, {\n x: cx,\n y: cy\n });\n\n if (radius <= 0) {\n return {\n radius: radius\n };\n }\n\n var cos = (x - cx) / radius;\n var angleInRadian = Math.acos(cos);\n\n if (y > cy) {\n angleInRadian = 2 * Math.PI - angleInRadian;\n }\n\n return {\n radius: radius,\n angle: radianToDegree(angleInRadian),\n angleInRadian: angleInRadian\n };\n};\nexport var formatAngleOfSector = function formatAngleOfSector(_ref3) {\n var startAngle = _ref3.startAngle,\n endAngle = _ref3.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return {\n startAngle: startAngle - min * 360,\n endAngle: endAngle - min * 360\n };\n};\n\nvar reverseFormatAngleOfSetor = function reverseFormatAngleOfSetor(angle, _ref4) {\n var startAngle = _ref4.startAngle,\n endAngle = _ref4.endAngle;\n var startCnt = Math.floor(startAngle / 360);\n var endCnt = Math.floor(endAngle / 360);\n var min = Math.min(startCnt, endCnt);\n return angle + min * 360;\n};\n\nexport var inRangeOfSector = function inRangeOfSector(_ref5, sector) {\n var x = _ref5.x,\n y = _ref5.y;\n\n var _getAngleOfPoint = getAngleOfPoint({\n x: x,\n y: y\n }, sector),\n radius = _getAngleOfPoint.radius,\n angle = _getAngleOfPoint.angle;\n\n var innerRadius = sector.innerRadius,\n outerRadius = sector.outerRadius;\n\n if (radius < innerRadius || radius > outerRadius) {\n return false;\n }\n\n if (radius === 0) {\n return true;\n }\n\n var _formatAngleOfSector = formatAngleOfSector(sector),\n startAngle = _formatAngleOfSector.startAngle,\n endAngle = _formatAngleOfSector.endAngle;\n\n var formatAngle = angle;\n var inRange;\n\n if (startAngle <= endAngle) {\n while (formatAngle > endAngle) {\n formatAngle -= 360;\n }\n\n while (formatAngle < startAngle) {\n formatAngle += 360;\n }\n\n inRange = formatAngle >= startAngle && formatAngle <= endAngle;\n } else {\n while (formatAngle > startAngle) {\n formatAngle -= 360;\n }\n\n while (formatAngle < endAngle) {\n formatAngle += 360;\n }\n\n inRange = formatAngle >= endAngle && formatAngle <= startAngle;\n }\n\n if (inRange) {\n return _objectSpread({}, sector, {\n radius: radius,\n angle: reverseFormatAngleOfSetor(formatAngle, sector)\n });\n }\n\n return null;\n};", + "export function shallowEqual(a, b) {\n /* eslint-disable no-restricted-syntax */\n for (var key in a) {\n if ({}.hasOwnProperty.call(a, key) && (!{}.hasOwnProperty.call(b, key) || a[key] !== b[key])) {\n return false;\n }\n }\n\n for (var _key in b) {\n if ({}.hasOwnProperty.call(b, _key) && !{}.hasOwnProperty.call(a, _key)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction shouldComponentUpdate(props, state) {\n return !shallowEqual(props, this.props) || !shallowEqual(state, this.state);\n}\n\nexport default function pureRenderDecorator(component) {\n // eslint-disable-next-line no-param-reassign\n component.prototype.shouldComponentUpdate = shouldComponentUpdate;\n}", + "import _isNil from \"lodash/isNil\";\nimport _isString from \"lodash/isString\";\nimport _isObject from \"lodash/isObject\";\nimport _isFunction from \"lodash/isFunction\";\nimport _isArray from \"lodash/isArray\";\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { isNumber } from './DataUtils';\nimport { shallowEqual } from './PureRender';\nexport var PRESENTATION_ATTRIBUTES = {\n 'aria-current': PropTypes.string,\n // state\n 'aria-details': PropTypes.any,\n 'aria-disabled': PropTypes.any,\n // state\n 'aria-hidden': PropTypes.any,\n // state\n 'aria-invalid': PropTypes.any,\n // state\n 'aria-keyshortcuts': PropTypes.any,\n 'aria-label': PropTypes.any,\n 'aria-roledescription': PropTypes.any,\n // Widget Attributes\n 'aria-autocomplete': PropTypes.any,\n 'aria-checked': PropTypes.any,\n 'aria-expanded': PropTypes.any,\n 'aria-haspopup': PropTypes.any,\n 'aria-level': PropTypes.any,\n 'aria-modal': PropTypes.any,\n 'aria-multiline': PropTypes.any,\n 'aria-multiselectable': PropTypes.any,\n 'aria-orientation': PropTypes.any,\n 'aria-placeholder': PropTypes.any,\n 'aria-pressed': PropTypes.any,\n 'aria-readonly': PropTypes.any,\n 'aria-required': PropTypes.any,\n 'aria-selected': PropTypes.any,\n 'aria-sort': PropTypes.any,\n 'aria-valuemax': PropTypes.any,\n 'aria-valuemin': PropTypes.any,\n 'aria-valuenow': PropTypes.any,\n 'aria-valuetext': PropTypes.any,\n // Live Region Attributes\n 'aria-atomic': PropTypes.any,\n 'aria-busy': PropTypes.any,\n 'aria-live': PropTypes.any,\n 'aria-relevant': PropTypes.any,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': PropTypes.any,\n 'aria-grabbed': PropTypes.any,\n // Relationship Attributes\n 'aria-activedescendant': PropTypes.any,\n 'aria-colcount': PropTypes.any,\n 'aria-colindex': PropTypes.any,\n 'aria-colspan': PropTypes.any,\n 'aria-controls': PropTypes.any,\n 'aria-describedby': PropTypes.any,\n 'aria-errormessage': PropTypes.any,\n 'aria-flowto': PropTypes.any,\n 'aria-labelledby': PropTypes.any,\n 'aria-owns': PropTypes.any,\n 'aria-posinset': PropTypes.any,\n 'aria-rowcount': PropTypes.any,\n 'aria-rowindex': PropTypes.any,\n 'aria-rowspan': PropTypes.any,\n 'aria-setsize': PropTypes.any,\n alignmentBaseline: PropTypes.string,\n angle: PropTypes.number,\n baselineShift: PropTypes.string,\n clip: PropTypes.string,\n clipPath: PropTypes.string,\n clipRule: PropTypes.string,\n color: PropTypes.string,\n colorInterpolation: PropTypes.string,\n colorInterpolationFilters: PropTypes.string,\n colorProfile: PropTypes.string,\n colorRendering: PropTypes.string,\n cursor: PropTypes.string,\n direction: PropTypes.oneOf(['ltr', 'rtl', 'inherit']),\n display: PropTypes.string,\n dominantBaseline: PropTypes.string,\n enableBackground: PropTypes.string,\n fill: PropTypes.string,\n fillOpacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n fillRule: PropTypes.oneOf(['nonzero', 'evenodd', 'inherit']),\n filter: PropTypes.string,\n floodColor: PropTypes.string,\n floodOpacity: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n font: PropTypes.string,\n fontFamily: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n fontSizeAdjust: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n fontStretch: PropTypes.oneOf(['normal', 'wider', 'narrower', 'ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', 'inherit']),\n fontStyle: PropTypes.oneOf(['normal', 'italic', 'oblique', 'inherit']),\n fontVariant: PropTypes.oneOf(['normal', 'small-caps', 'inherit']),\n fontWeight: PropTypes.oneOf(['normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900, 'inherit']),\n glyphOrientationHorizontal: PropTypes.string,\n glyphOrientationVertical: PropTypes.string,\n imageRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'optimizeQuality', 'inherit']),\n kerning: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n letterSpacing: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n lightingColor: PropTypes.string,\n lineHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n markerEnd: PropTypes.string,\n markerMid: PropTypes.string,\n markerStart: PropTypes.string,\n mask: PropTypes.string,\n opacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n overflow: PropTypes.oneOf(['visible', 'hidden', 'scroll', 'auto', 'inherit']),\n pointerEvents: PropTypes.oneOf(['visiblePainted', 'visibleFill', 'visibleStroke', 'visible', 'painted', 'fill', 'stroke', 'all', 'none', 'inherit']),\n shapeRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'crispEdges', 'geometricPrecision', 'inherit']),\n stopColor: PropTypes.string,\n stopOpacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n stroke: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeDasharray: PropTypes.string,\n strokeDashoffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeLinecap: PropTypes.oneOf(['butt', 'round', 'square', 'inherit']),\n strokeLinejoin: PropTypes.oneOf(['miter', 'round', 'bevel', 'inherit']),\n strokeMiterlimit: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeOpacity: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n strokeWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n textAnchor: PropTypes.oneOf(['start', 'middle', 'end', 'inherit']),\n textDecoration: PropTypes.oneOf(['none', 'underline', 'overline', 'line-through', 'blink', 'inherit']),\n textRendering: PropTypes.oneOf(['auto', 'optimizeSpeed', 'optimizeLegibility', 'geometricPrecision', 'inherit']),\n unicodeBidi: PropTypes.oneOf(['normal', 'embed', 'bidi-override', 'inherit']),\n visibility: PropTypes.oneOf(['visible', 'hidden', 'collapse', 'inherit']),\n wordSpacing: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n writingMode: PropTypes.oneOf(['lr-tb', 'rl-tb', 'tb-rl', 'lr', 'rl', 'tb', 'inherit']),\n transform: PropTypes.string,\n role: PropTypes.string,\n focusable: PropTypes.string,\n tabIndex: PropTypes.string,\n style: PropTypes.object,\n width: PropTypes.number,\n height: PropTypes.number,\n dx: PropTypes.number,\n dy: PropTypes.number,\n x: PropTypes.number,\n y: PropTypes.number,\n r: PropTypes.number,\n // The radius of Rectangle\n radius: PropTypes.oneOfType([PropTypes.number, PropTypes.array])\n};\nexport var EVENT_ATTRIBUTES = {\n onClick: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onTouchEnd: PropTypes.func,\n onTouchMove: PropTypes.func,\n onTouchStart: PropTypes.func,\n onTouchCancel: PropTypes.func\n};\nvar REACT_BROWSER_EVENT_MAP = {\n click: 'onClick',\n mousedown: 'onMouseDown',\n mouseup: 'onMouseUp',\n mouseover: 'onMouseOver',\n mousemove: 'onMouseMove',\n mouseout: 'onMouseOut',\n mouseenter: 'onMouseEnter',\n mouseleave: 'onMouseLeave',\n touchcancel: 'onTouchCancel',\n touchend: 'onTouchEnd',\n touchmove: 'onTouchMove',\n touchstart: 'onTouchStart'\n};\nexport var SCALE_TYPES = ['auto', 'linear', 'pow', 'sqrt', 'log', 'identity', 'time', 'band', 'point', 'ordinal', 'quantile', 'quantize', 'utc', 'sequential', 'threshold'];\nexport var LEGEND_TYPES = ['plainline', 'line', 'square', 'rect', 'circle', 'cross', 'diamond', 'star', 'triangle', 'wye', 'none'];\n/**\n * Get the display name of a component\n * @param {Object} Comp Specified Component\n * @return {String} Display name of Component\n */\n\nexport var getDisplayName = function getDisplayName(Comp) {\n if (typeof Comp === 'string') {\n return Comp;\n }\n\n if (!Comp) {\n return '';\n }\n\n return Comp.displayName || Comp.name || 'Component';\n};\n/*\n * Find and return all matched children by type. ` + ("`" + `type`)) + (("`" + ` can be a React element class or\n * string\n */\n\nexport var findAllByType = function findAllByType(children, type) {\n var result = [];\n var types = [];\n\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n\n React.Children.forEach(children, function (child) {\n var childType = child && child.type && (child.type.displayName || child.type.name);\n\n if (types.indexOf(childType) !== -1) {\n result.push(child);\n }\n });\n return result;\n};\n/*\n * Return the first matched child by type, return null otherwise.\n * `) + ("`" + `type`)))))) + ((((("`" + (` can be a React element class or string.\n */\n\nexport var findChildByType = function findChildByType(children, type) {\n var result = findAllByType(children, type);\n return result && result[0];\n};\n/*\n * Create a new array of children excluding the ones matched the type\n */\n\nexport var withoutType = function withoutType(children, type) {\n var newChildren = [];\n var types;\n\n if (_isArray(type)) {\n types = type.map(function (t) {\n return getDisplayName(t);\n });\n } else {\n types = [getDisplayName(type)];\n }\n\n React.Children.forEach(children, function (child) {\n if (child && child.type && child.type.displayName && types.indexOf(child.type.displayName) !== -1) {\n return;\n }\n\n newChildren.push(child);\n });\n return newChildren;\n};\n/**\n * get all the presentation attribute of svg element\n * @param {Object} el A react element or the props of a react element\n * @return {Object} attributes or null\n */\n\nexport var getPresentationAttributes = function getPresentationAttributes(el) {\n if (!el || _isFunction(el)) {\n return null;\n }\n\n var props = React.isValidElement(el) ? el.props : el;\n\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && PRESENTATION_ATTRIBUTES[i]) {\n if (!out) out = {};\n out[i] = props[i];\n }\n }\n\n return out;\n};\n\nvar getEventHandlerOfElement = function getEventHandlerOfElement(originalHandler, props) {\n return function (e) {\n originalHandler(props, e);\n return null;\n };\n};\n/**\n * get all the event attribute of svg element\n * @param {Object} el A react element or the props of a react element\n * @param {Function} newHandler New handler of event\n * @param {Boolean} wrapCallback Wrap callback and return more parameters or not\n * @return {Object} attributes or null\n */\n\n\nexport var filterEventAttributes = function filterEventAttributes(el, newHandler) {\n var wrapCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (!el || _isFunction(el)) {\n return null;\n }\n\n var props = React.isValidElement(el) ? el.props : el;\n\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i]) {\n if (!out) out = {};\n out[i] = newHandler || (wrapCallback ? getEventHandlerOfElement(props[i], props) : props[i]);\n }\n }\n\n return out;\n};\n\nvar getEventHandlerOfChild = function getEventHandlerOfChild(originalHandler, data, index) {\n return function (e) {\n originalHandler(data, index, e);\n return null;\n };\n};\n\nexport var filterEventsOfChild = function filterEventsOfChild(props, data, index) {\n if (!_isObject(props)) {\n return null;\n }\n\n var out = null; // eslint-disable-next-line no-restricted-syntax\n\n for (var i in props) {\n if ({}.hasOwnProperty.call(props, i) && EVENT_ATTRIBUTES[i] && _isFunction(props[i])) {\n if (!out) out = {};\n out[i] = getEventHandlerOfChild(props[i], data, index);\n }\n }\n\n return out;\n};\n/**\n * validate the width and height props of a chart element\n * @param {Object} el A chart element\n * @return {Boolean} true If the props width and height are number, and greater than 0\n */\n\nexport var validateWidthHeight = function validateWidthHeight(el) {\n if (!el || !el.props) {\n return false;\n }\n\n var _el$props = el.props,\n width = _el$props.width,\n height = _el$props.height;\n\n if (!isNumber(width) || width <= 0 || !isNumber(height) || height <= 0) {\n return false;\n }\n\n return true;\n};\nexport var isSsr = function isSsr() {\n return !(typeof window !== 'undefined' && window.document && window.document.createElement && window.setTimeout);\n};\nvar SVG_TAGS = ['a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile', 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColormatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face', 'font-face-format', 'font-face-name', 'font-face-url', 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', 'lineGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'script', 'set', 'stop', 'style', 'svg', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref', 'tspan', 'use', 'view', 'vkern'];\n\nvar isSvgElement = function isSvgElement(child) {\n return child && child.type && _isString(child.type) && SVG_TAGS.indexOf(child.type) >= 0;\n};\n/**\n * Filter all the svg elements of children\n * @param {Array} children The children of a react element\n * @return {Array} All the svg elements\n */\n\n\nexport var filterSvgElements = function filterSvgElements(children) {\n var svgElements = [];\n React.Children.forEach(children, function (entry) {\n if (entry && entry.type && _isString(entry.type) && SVG_TAGS.indexOf(entry.type) >= 0) {\n svgElements.push(entry);\n }\n });\n return svgElements;\n};\nexport var isSingleChildEqual = function isSingleChildEqual(nextChild, prevChild) {\n if (_isNil(nextChild) && _isNil(prevChild)) {\n return true;\n }\n\n if (!_isNil(nextChild) && !_isNil(prevChild)) {\n var _ref = nextChild.props || {},\n nextChildren = _ref.children,\n nextProps = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _ref2 = prevChild.props || {},\n prevChildren = _ref2.children,\n prevProps = _objectWithoutProperties(_ref2, [\"children\"]);\n\n if (nextChildren && prevChildren) {\n // eslint-disable-next-line no-use-before-define\n return shallowEqual(nextProps, prevProps) && isChildrenEqual(nextChildren, prevChildren);\n }\n\n if (!nextChildren && !prevChildren) {\n return shallowEqual(nextProps, prevProps);\n }\n\n return false;\n }\n\n return false;\n};\n/**\n * Wether props of children changed\n * @param {Object} nextChildren The latest children\n * @param {Object} prevChildren The prev children\n * @return {Boolean} equal or not\n */\n\nexport var isChildrenEqual = function isChildrenEqual(nextChildren, prevChildren) {\n if (nextChildren === prevChildren) {\n return true;\n }\n\n if (Children.count(nextChildren) !== Children.count(prevChildren)) {\n return false;\n }\n\n var count = Children.count(nextChildren);\n\n if (count === 0) {\n return true;\n }\n\n if (count === 1) {\n return isSingleChildEqual(_isArray(nextChildren) ? nextChildren[0] : nextChildren, _isArray(prevChildren) ? prevChildren[0] : prevChildren);\n }\n\n for (var i = 0; i < count; i++) {\n var nextChild = nextChildren[i];\n var prevChild = prevChildren[i];\n\n if (_isArray(nextChild) || _isArray(prevChild)) {\n if (!isChildrenEqual(nextChild, prevChild)) {\n return false;\n }\n } else if (!isSingleChildEqual(nextChild, prevChild)) {\n return false;\n }\n }\n\n return true;\n};\nexport var renderByOrder = function renderByOrder(children, renderMap) {\n var elements = [];\n var record = {};\n Children.forEach(children, function (child, index) {\n if (child && isSvgElement(child)) {\n elements.push(child);\n } else if (child && renderMap[getDisplayName(child.type)]) {\n var displayName = getDisplayName(child.type);\n var _renderMap$displayNam = renderMap[displayName],\n handler = _renderMap$displayNam.handler,\n once = _renderMap$displayNam.once;\n\n if (once && !record[displayName] || !once) {\n var results = handler(child, displayName, index);\n\n if (_isArray(results)) {\n elements = [elements].concat(_toConsumableArray(results));\n } else {\n elements.push(results);\n }\n\n record[displayName] = true;\n }\n }\n });\n return elements;\n};\nexport var getReactEventByType = function getReactEventByType(e) {\n var type = e && e.type;\n\n if (type && REACT_BROWSER_EVENT_MAP[type]) {\n return REACT_BROWSER_EVENT_MAP[type];\n }\n\n return null;\n};\nexport var parseChildIndex = function parseChildIndex(child, children) {\n var result = -1;\n Children.forEach(children, function (entry, index) {\n if (entry === child) {\n result = index;\n }\n });\n return result;\n};", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the ` + "`")) + (`prop-types` + ("`" + ` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `))) + (("`" + (`./factoryWithTypeCheckers.js` + "`")) + (`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using ` + ("`" + `prop-types`)))) + ((("`" + (` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using ` + "`")) + (`prop-types` + ("`" + ` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n", + "/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n", + "/**\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\nvar reduceFunctionCall = require(\"reduce-function-call\")\nvar mexp = require(\"math-expression-evaluator\")\n\n/**\n * Constantes\n */\nvar MAX_STACK = 100 // should be enough for a single calc()...\nvar NESTED_CALC_RE = /(\\+|\\-|\\*|\\\\|[^a-z]|)(\\s*)(\\()/g\n\n/**\n * Global variables\n */\nvar stack\n\n/**\n * Expose reduceCSSCalc plugin\n *\n * @type {Function}\n */\nmodule.exports = reduceCSSCalc\n\n/**\n * Reduce CSS calc() in a string, whenever it's possible\n *\n * @param {String} value css input\n */\nfunction reduceCSSCalc(value, decimalPrecision) {\n stack = 0\n decimalPrecision = Math.pow(10, decimalPrecision === undefined ? 5 : decimalPrecision)\n\n // Allow calc() on multiple lines\n value = value.replace(/\\n+/g, \" \")\n\n /**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n */\n function evaluateExpression (expression, functionIdentifier, call) {\n if (stack++ > MAX_STACK) {\n stack = 0\n throw new Error(\"Call stack overflow for \" + call)\n }\n\n if (expression === \"\") {\n throw new Error(functionIdentifier + \"(): '\" + call + \"' must contain a non-whitespace string\")\n }\n\n expression = evaluateNestedExpression(expression, call)\n\n var units = getUnitsInExpression(expression)\n\n // If the expression contains multiple units or CSS variables,\n // then let the expression be (i.e. browser calc())\n if (units.length > 1 || expression.indexOf(\"var(\") > -1) {\n return functionIdentifier + \"(\" + expression + \")\"\n }\n\n var unit = units[0] || \"\"\n\n if (unit === \"%\") {\n // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%):\n // console.log(expression)\n expression = expression.replace(/\\b[0-9\\.]+%/g, function(percent) {\n return parseFloat(percent.slice(0, -1)) * 0.01\n })\n }\n\n // Remove units in expression:\n var toEvaluate = expression.replace(new RegExp(unit, \"gi\"), \"\")\n var result\n\n try {\n result = mexp.eval(toEvaluate)\n }\n catch (e) {\n return functionIdentifier + \"(\" + expression + \")\"\n }\n\n // Transform back to a percentage result:\n if (unit === \"%\") {\n result *= 100\n }\n\n // adjust rounding shit\n // (0.1 * 0.2 === 0.020000000000000004)\n if (functionIdentifier.length || unit === \"%\") {\n result = Math.round(result * decimalPrecision) / decimalPrecision\n }\n\n // Add unit\n result += unit\n\n return result\n }\n\n /**\n * Evaluates nested expressions\n *\n * @param {String} expression\n * @returns {String}\n */\n function evaluateNestedExpression(expression, call) {\n // Remove the calc part from nested expressions to ensure\n // better browser compatibility\n expression = expression.replace(/((?:\\-[a-z]+\\-)?calc)/g, \"\")\n var evaluatedPart = \"\"\n var nonEvaluatedPart = expression\n var matches\n while ((matches = NESTED_CALC_RE.exec(nonEvaluatedPart))) {\n if (matches[0].index > 0) {\n evaluatedPart += nonEvaluatedPart.substring(0, matches[0].index)\n }\n\n var balancedExpr = balanced(\"(\", \")\", nonEvaluatedPart.substring([0].index))\n if (balancedExpr.body === \"\") {\n throw new Error(\"'\" + expression + \"' must contain a non-whitespace string\")\n }\n\n var evaluated = evaluateExpression(balancedExpr.body, \"\", call)\n\n evaluatedPart += balancedExpr.pre + evaluated\n nonEvaluatedPart = balancedExpr.post\n }\n\n return evaluatedPart + nonEvaluatedPart\n }\n\n return reduceFunctionCall(value, /((?:\\-[a-z]+\\-)?calc)\\(/, evaluateExpression)\n}\n\n/**\n * Checks what units are used in an expression\n *\n * @param {String} expression\n * @returns {Array}\n */\n\nfunction getUnitsInExpression(expression) {\n var uniqueUnits = []\n var uniqueLowerCaseUnits = []\n var unitRegEx = /[\\.0-9]([%a-z]+)/gi\n var matches = unitRegEx.exec(expression)\n\n while (matches) {\n if (!matches || !matches[1]) {\n continue\n }\n\n if (uniqueLowerCaseUnits.indexOf(matches[1].toLowerCase()) === -1) {\n uniqueUnits.push(matches[1])\n uniqueLowerCaseUnits.push(matches[1].toLowerCase())\n }\n\n matches = unitRegEx.exec(expression)\n }\n\n return uniqueUnits\n}\n", + "/*\n * Module dependencies\n */\nvar balanced = require(\"balanced-match\")\n\n/**\n * Expose `))) + (("`" + (`reduceFunctionCall` + "`")) + ((`\n *\n * @type {Function}\n */\nmodule.exports = reduceFunctionCall\n\n/**\n * Walkthrough all expressions, evaluate them and insert them into the declaration\n *\n * @param {Array} expressions\n * @param {Object} declaration\n */\n\nfunction reduceFunctionCall(string, functionRE, callback) {\n var call = string\n return getFunctionCalls(string, functionRE).reduce(function(string, obj) {\n return string.replace(obj.functionIdentifier + \"(\" + obj.matches.body + \")\", evalFunctionCall(obj.matches.body, obj.functionIdentifier, callback, call, functionRE))\n }, string)\n}\n\n/**\n * Parses expressions in a value\n *\n * @param {String} value\n * @returns {Array}\n * @api private\n */\n\nfunction getFunctionCalls(call, functionRE) {\n var expressions = []\n\n var fnRE = typeof functionRE === \"string\" ? new RegExp(\"\\\\b(\" + functionRE + \")\\\\(\") : functionRE\n do {\n var searchMatch = fnRE.exec(call)\n if (!searchMatch) {\n return expressions\n }\n if (searchMatch[1] === undefined) {\n throw new Error(\"Missing the first couple of parenthesis to get the function identifier in \" + functionRE)\n }\n var fn = searchMatch[1]\n var startIndex = searchMatch.index\n var matches = balanced(\"(\", \")\", call.substring(startIndex))\n\n if (!matches || matches.start !== searchMatch[0].length - 1) {\n throw new SyntaxError(fn + \"(): missing closing ')' in the value '\" + call + \"'\")\n }\n\n expressions.push({matches: matches, functionIdentifier: fn})\n call = matches.post\n }\n while (fnRE.test(call))\n\n return expressions\n}\n\n/**\n * Evaluates an expression\n *\n * @param {String} expression\n * @returns {String}\n * @api private\n */\n\nfunction evalFunctionCall (string, functionIdentifier, callback, call, functionRE) {\n // allow recursivity\n return callback(reduceFunctionCall(string, functionRE, callback), functionIdentifier, call)\n}\n", + "/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n", + "/** @license React v0.13.6\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';Object.defineProperty(exports,\"__esModule\",{value:!0});var d=null,e=!1,g=3,k=-1,l=-1,m=!1,n=!1;function p(){if(!m){var a=d.expirationTime;n?q():n=!0;r(t,a)}}\nfunction u(){var a=d,b=d.next;if(d===b)d=null;else{var c=d.previous;d=c.next=b;b.previous=c}a.next=a.previous=null;c=a.callback;b=a.expirationTime;a=a.priorityLevel;var f=g,Q=l;g=a;l=b;try{var h=c()}finally{g=f,l=Q}if(\"function\"===typeof h)if(h={callback:h,priorityLevel:a,expirationTime:b,next:null,previous:null},null===d)d=h.next=h.previous=h;else{c=null;a=d;do{if(a.expirationTime>=b){c=a;break}a=a.next}while(a!==d);null===c?c=d:c===d&&(d=h,p());b=c.previous;b.next=c.previous=h;h.next=c;h.previous=\nb}}function v(){if(-1===k&&null!==d&&1===d.priorityLevel){m=!0;try{do u();while(null!==d&&1===d.priorityLevel)}finally{m=!1,null!==d?p():n=!1}}}function t(a){m=!0;var b=e;e=a;try{if(a)for(;null!==d;){var c=exports.unstable_now();if(d.expirationTime<=c){do u();while(null!==d&&d.expirationTime<=c)}else break}else if(null!==d){do u();while(null!==d&&!w())}}finally{m=!1,e=b,null!==d?p():n=!1,v()}}\nvar x=Date,y=\"function\"===typeof setTimeout?setTimeout:void 0,z=\"function\"===typeof clearTimeout?clearTimeout:void 0,A=\"function\"===typeof requestAnimationFrame?requestAnimationFrame:void 0,B=\"function\"===typeof cancelAnimationFrame?cancelAnimationFrame:void 0,C,D;function E(a){C=A(function(b){z(D);a(b)});D=y(function(){B(C);a(exports.unstable_now())},100)}\nif(\"object\"===typeof performance&&\"function\"===typeof performance.now){var F=performance;exports.unstable_now=function(){return F.now()}}else exports.unstable_now=function(){return x.now()};var r,q,w,G=null;\"undefined\"!==typeof window?G=window:\"undefined\"!==typeof global&&(G=global);\nif(G&&G._schedMock){var H=G._schedMock;r=H[0];q=H[1];w=H[2];exports.unstable_now=H[3]}else if(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var I=null,J=function(a){if(null!==I)try{I(a)}finally{I=null}};r=function(a){null!==I?setTimeout(r,0,a):(I=a,setTimeout(J,0,!1))};q=function(){I=null};w=function(){return!1}}else{\"undefined\"!==typeof console&&(\"function\"!==typeof A&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"),\n\"function\"!==typeof B&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\"));var K=null,L=!1,M=-1,N=!1,O=!1,P=0,R=33,S=33;w=function(){return P<=exports.unstable_now()};var T=new MessageChannel,U=T.port2;T.port1.onmessage=function(){L=!1;var a=K,b=M;K=null;M=-1;var c=exports.unstable_now(),f=!1;if(0>=P-c)if(-1!==b&&b<=c)f=!0;else{N||(N=!0,E(V));K=a;M=b;return}if(null!==a){O=!0;try{a(f)}finally{O=!1}}};\nvar V=function(a){if(null!==K){E(V);var b=a-P+S;bb&&(b=8),S=bb?U.postMessage(void 0):N||(N=!0,E(V))};q=function(){K=null;L=!1;M=-1}}exports.unstable_ImmediatePriority=1;exports.unstable_UserBlockingPriority=2;exports.unstable_NormalPriority=3;exports.unstable_IdlePriority=5;exports.unstable_LowPriority=4;\nexports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=g,f=k;g=a;k=exports.unstable_now();try{return b()}finally{g=c,k=f,v()}};exports.unstable_next=function(a){switch(g){case 1:case 2:case 3:var b=3;break;default:b=g}var c=g,f=k;g=b;k=exports.unstable_now();try{return a()}finally{g=c,k=f,v()}};\nexports.unstable_scheduleCallback=function(a,b){var c=-1!==k?k:exports.unstable_now();if(\"object\"===typeof b&&null!==b&&\"number\"===typeof b.timeout)b=c+b.timeout;else switch(g){case 1:b=c+-1;break;case 2:b=c+250;break;case 5:b=c+1073741823;break;case 4:b=c+1E4;break;default:b=c+5E3}a={callback:a,priorityLevel:g,expirationTime:b,next:null,previous:null};if(null===d)d=a.next=a.previous=a,p();else{c=null;var f=d;do{if(f.expirationTime>b){c=f;break}f=f.next}while(f!==d);null===c?c=d:c===d&&(d=a,p());\nb=c.previous;b.next=c.previous=a;a.next=c;a.previous=b}return a};exports.unstable_cancelCallback=function(a){var b=a.next;if(null!==b){if(b===a)d=null;else{a===d&&(d=b);var c=a.previous;c.next=b;b.previous=c}a.next=a.previous=null}};exports.unstable_wrapCallback=function(a){var b=g;return function(){var c=g,f=k;g=b;k=exports.unstable_now();try{return a.apply(this,arguments)}finally{g=c,k=f,v()}}};exports.unstable_getCurrentPriorityLevel=function(){return g};\nexports.unstable_shouldYield=function(){return!e&&(null!==d&&d.expirationTime element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n", + "/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n", + "export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n", + "var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object ` + ("`" + `setimmediate`)) + ("`" + (` was\n// able to install onto. Search each possibility in the same order as the\n// ` + "`"))) + ((`setimmediate` + ("`" + ` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n", + "/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`)) + (("`" + `warning(condition, format, ...args)`) + ("`" + ` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n", + "var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n", + "module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n", + "module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n" + ], + "sourceRoot": "" +}`)))))))))))))) + +func bundleJsMapBytes() ([]byte, error) { + return _bundleJsMap, nil +} + +func bundleJsMap() (*asset, error) { + bytes, err := bundleJsMapBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "bundle.js.map", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd0, 0xf7, 0xf2, 0xa1, 0x8e, 0xb5, 0x7a, 0xcc, 0xd9, 0x76, 0x54, 0x30, 0x90, 0x93, 0xc7, 0x1, 0x62, 0xa7, 0xda, 0x4c, 0x74, 0x3f, 0x7f, 0x6e, 0x42, 0x8c, 0x2d, 0x47, 0x58, 0x3d, 0xbc, 0x3e}} return a, nil } @@ -40727,6 +38571,8 @@ var _bindata = map[string]func() (*asset, error){ "index.html": indexHtml, "bundle.js": bundleJs, + + "bundle.js.map": bundleJsMap, } // AssetDir returns the file names below a certain @@ -40770,8 +38616,9 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "bundle.js": {bundleJs, map[string]*bintree{}}, - "index.html": {indexHtml, map[string]*bintree{}}, + "bundle.js": {bundleJs, map[string]*bintree{}}, + "bundle.js.map": {bundleJsMap, map[string]*bintree{}}, + "index.html": {indexHtml, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/dashboard/assets/.eslintignore b/dashboard/assets/.eslintignore new file mode 100644 index 000000000000..565bf83e7679 --- /dev/null +++ b/dashboard/assets/.eslintignore @@ -0,0 +1,3 @@ +node_modules/* #ignored by default +flow-typed/* +bundle.js diff --git a/dashboard/assets/.eslintrc b/dashboard/assets/.eslintrc index ab7a3a0392f7..923d6f5de937 100644 --- a/dashboard/assets/.eslintrc +++ b/dashboard/assets/.eslintrc @@ -16,71 +16,66 @@ // React syntax style mostly according to https://github.com/airbnb/javascript/tree/master/react { - 'env': { - 'browser': true, - 'node': true, - 'es6': true, + "env": { + "browser": true, + "node": true, + "es6": true }, - 'parser': 'babel-eslint', - 'parserOptions': { - 'sourceType': 'module', - 'ecmaVersion': 6, - 'ecmaFeatures': { - 'jsx': true, + "parser": "babel-eslint", + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 6, + "ecmaFeatures": { + "jsx": true } }, - 'extends': 'airbnb', - 'plugins': [ - 'flowtype', - 'react', + "extends": [ + "eslint:recommended", + "airbnb", + "plugin:flowtype/recommended", + "plugin:react/recommended" ], - 'rules': { - 'no-tabs': 'off', - 'indent': ['error', 'tab'], - 'react/jsx-indent': ['error', 'tab'], - 'react/jsx-indent-props': ['error', 'tab'], - 'react/prefer-stateless-function': 'off', - 'jsx-quotes': ['error', 'prefer-single'], - 'no-plusplus': 'off', - 'no-console': ['error', { allow: ['error'] }], - + "plugins": [ + "flowtype", + "react" + ], + "rules": { + "no-tabs": "off", + "indent": ["error", "tab"], + "react/jsx-indent": ["error", "tab"], + "react/jsx-indent-props": ["error", "tab"], + "react/prefer-stateless-function": "off", + "react/destructuring-assignment": ["error", "always", {"ignoreClassFields": true}], + "jsx-quotes": ["error", "prefer-single"], + "no-plusplus": "off", + "no-console": ["error", { "allow": ["error"] }], // Specifies the maximum length of a line. - 'max-len': ['warn', 120, 2, { - 'ignoreUrls': true, - 'ignoreComments': false, - 'ignoreRegExpLiterals': true, - 'ignoreStrings': true, - 'ignoreTemplateLiterals': true, + "max-len": ["warn", 120, 2, { + "ignoreUrls": true, + "ignoreComments": false, + "ignoreRegExpLiterals": true, + "ignoreStrings": true, + "ignoreTemplateLiterals": true }], // Enforces consistent spacing between keys and values in object literal properties. - 'key-spacing': ['error', {'align': { - 'beforeColon': false, - 'afterColon': true, - 'on': 'value' + "key-spacing": ["error", {"align": { + "beforeColon": false, + "afterColon": true, + "on": "value" }}], // Prohibits padding inside curly braces. - 'object-curly-spacing': ['error', 'never'], - 'no-use-before-define': 'off', // messageAPI - 'default-case': 'off', - - 'flowtype/boolean-style': ['error', 'boolean'], - 'flowtype/define-flow-type': 'warn', - 'flowtype/generic-spacing': ['error', 'never'], - 'flowtype/no-primitive-constructor-types': 'error', - 'flowtype/no-weak-types': 'error', - 'flowtype/object-type-delimiter': ['error', 'comma'], - 'flowtype/require-valid-file-annotation': 'error', - 'flowtype/semi': ['error', 'always'], - 'flowtype/space-after-type-colon': ['error', 'always'], - 'flowtype/space-before-generic-bracket': ['error', 'never'], - 'flowtype/space-before-type-colon': ['error', 'never'], - 'flowtype/union-intersection-spacing': ['error', 'always'], - 'flowtype/use-flow-type': 'warn', - 'flowtype/valid-syntax': 'warn', + "object-curly-spacing": ["error", "never"], + "no-use-before-define": "off", // message types + "default-case": "off" }, - 'settings': { - 'flowtype': { - 'onlyFilesWithFlowAnnotation': true, + "settings": { + "import/resolver": { + "node": { + "paths": ["components"] // import './components/Component' -> import 'Component' + } + }, + "flowtype": { + "onlyFilesWithFlowAnnotation": true } - }, + } } diff --git a/dashboard/assets/.flowconfig b/dashboard/assets/.flowconfig index 8051ae5de50d..9104d62a537d 100644 --- a/dashboard/assets/.flowconfig +++ b/dashboard/assets/.flowconfig @@ -7,3 +7,5 @@ node_modules/jss/flow-typed [options] include_warnings=true +module.system.node.resolve_dirname=node_modules +module.system.node.resolve_dirname=components diff --git a/dashboard/assets/common.jsx b/dashboard/assets/common.jsx index ed2f411fc6a5..f2750ee33bb7 100644 --- a/dashboard/assets/common.jsx +++ b/dashboard/assets/common.jsx @@ -16,43 +16,46 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +import {faHome, faLink, faGlobeEurope, faTachometerAlt, faList} from '@fortawesome/free-solid-svg-icons'; +import {faCreditCard} from '@fortawesome/free-regular-svg-icons'; + type ProvidedMenuProp = {|title: string, icon: string|}; const menuSkeletons: Array<{|id: string, menu: ProvidedMenuProp|}> = [ { id: 'home', menu: { title: 'Home', - icon: 'home', + icon: faHome, }, }, { id: 'chain', menu: { title: 'Chain', - icon: 'link', + icon: faLink, }, }, { id: 'txpool', menu: { title: 'TxPool', - icon: 'credit-card', + icon: faCreditCard, }, }, { id: 'network', menu: { title: 'Network', - icon: 'globe', + icon: faGlobeEurope, }, }, { id: 'system', menu: { title: 'System', - icon: 'tachometer', + icon: faTachometerAlt, }, }, { id: 'logs', menu: { title: 'Logs', - icon: 'list', + icon: faList, }, }, ]; @@ -64,8 +67,26 @@ export const MENU: Map = new Map(menuSkeletons.map(({id, export const DURATION = 200; +export const chartStrokeWidth = 0.2; + export const styles = { light: { color: 'rgba(255, 255, 255, 0.54)', }, }; + +// unit contains the units for the bytePlotter. +export const unit = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; + +// simplifyBytes returns the simplified version of the given value followed by the unit. +export const simplifyBytes = (x: number) => { + let i = 0; + for (; x > 1024 && i < 8; i++) { + x /= 1024; + } + return x.toFixed(2).toString().concat(' ', unit[i], 'B'); +}; + +// hues contains predefined colors for gradient stop colors. +export const hues = ['#00FF00', '#FFFF00', '#FF7F00', '#FF0000']; +export const hueScale = [0, 2048, 102400, 2097152]; diff --git a/dashboard/assets/components/ChartRow.jsx b/dashboard/assets/components/ChartRow.jsx index 1075346fe40a..08da823cf29d 100644 --- a/dashboard/assets/components/ChartRow.jsx +++ b/dashboard/assets/components/ChartRow.jsx @@ -19,7 +19,7 @@ import React, {Component} from 'react'; import type {ChildrenArray} from 'react'; -import Grid from 'material-ui/Grid'; +import Grid from '@material-ui/core/Grid'; // styles contains the constant styles of the component. const styles = { @@ -33,7 +33,7 @@ const styles = { flex: 1, padding: 0, }, -} +}; export type Props = { children: ChildrenArray>, diff --git a/dashboard/assets/components/CustomTooltip.jsx b/dashboard/assets/components/CustomTooltip.jsx index f597c1caf2c8..52d005e54bbe 100644 --- a/dashboard/assets/components/CustomTooltip.jsx +++ b/dashboard/assets/components/CustomTooltip.jsx @@ -18,8 +18,8 @@ import React, {Component} from 'react'; -import Typography from 'material-ui/Typography'; -import {styles} from '../common'; +import Typography from '@material-ui/core/Typography'; +import {styles, simplifyBytes} from '../common'; // multiplier multiplies a number by another. export const multiplier = (by: number = 1) => (x: number) => x * by; @@ -37,18 +37,6 @@ export const percentPlotter = (text: string, mapper: (T => T) = multiplier(1) ); }; -// unit contains the units for the bytePlotter. -const unit = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; - -// simplifyBytes returns the simplified version of the given value followed by the unit. -const simplifyBytes = (x: number) => { - let i = 0; - for (; x > 1024 && i < 8; i++) { - x /= 1024; - } - return x.toFixed(2).toString().concat(' ', unit[i], 'B'); -}; - // bytePlotter renders a tooltip, which displays the payload as a byte value. export const bytePlotter = (text: string, mapper: (T => T) = multiplier(1)) => (payload: T) => { const p = mapper(payload); @@ -70,7 +58,8 @@ export const bytePerSecPlotter = (text: string, mapper: (T => T) = multiplier } return ( - {text} {simplifyBytes(p)}/s + {text} + {simplifyBytes(p)}/s ); }; diff --git a/dashboard/assets/components/Dashboard.jsx b/dashboard/assets/components/Dashboard.jsx index 63c2186ada88..944d50090717 100644 --- a/dashboard/assets/components/Dashboard.jsx +++ b/dashboard/assets/components/Dashboard.jsx @@ -17,14 +17,16 @@ // along with the go-ethereum library. If not, see . import React, {Component} from 'react'; +import {hot} from 'react-hot-loader'; -import withStyles from 'material-ui/styles/withStyles'; +import withStyles from '@material-ui/core/styles/withStyles'; -import Header from './Header'; -import Body from './Body'; +import Header from 'Header'; +import Body from 'Body'; +import {inserter as logInserter, SAME} from 'Logs'; +import {inserter as peerInserter} from 'Network'; import {MENU} from '../common'; import type {Content} from '../types/content'; -import {inserter as logInserter} from './Logs'; // deepUpdate updates an object corresponding to the given update data, which has // the shape of the same structure as the original object. updater also has the same @@ -37,7 +39,6 @@ import {inserter as logInserter} from './Logs'; // of the update. const deepUpdate = (updater: Object, update: Object, prev: Object): $Shape => { if (typeof update === 'undefined') { - // TODO (kurkomisi): originally this was deep copy, investigate it. return prev; } if (typeof updater === 'function') { @@ -88,8 +89,13 @@ const defaultContent: () => Content = () => ({ home: {}, chain: {}, txpool: {}, - network: {}, - system: { + network: { + peers: { + bundles: {}, + }, + diff: [], + }, + system: { activeMemory: [], virtualMemory: [], networkIngress: [], @@ -103,8 +109,8 @@ const defaultContent: () => Content = () => ({ chunks: [], endTop: false, endBottom: true, - topChanged: 0, - bottomChanged: 0, + topChanged: SAME, + bottomChanged: SAME, }, }); @@ -119,7 +125,7 @@ const updaters = { home: null, chain: null, txpool: null, - network: null, + network: peerInserter(200), system: { activeMemory: appender(200), virtualMemory: appender(200), @@ -186,8 +192,8 @@ class Dashboard extends Component { // reconnect establishes a websocket connection with the server, listens for incoming messages // and tries to reconnect on connection loss. reconnect = () => { - // PROD is defined by webpack. - const server = new WebSocket(`${((window.location.protocol === 'https:') ? 'wss://' : 'ws://')}${PROD ? window.location.host : 'localhost:8080'}/api`); + const host = process.env.NODE_ENV === 'production' ? window.location.host : 'localhost:8080'; + const server = new WebSocket(`${((window.location.protocol === 'https:') ? 'wss://' : 'ws://')}${host}/api`); server.onopen = () => { this.setState({content: defaultContent(), shouldUpdate: {}, server}); }; @@ -249,4 +255,4 @@ class Dashboard extends Component { } } -export default withStyles(themeStyles)(Dashboard); +export default hot(module)(withStyles(themeStyles)(Dashboard)); diff --git a/dashboard/assets/components/Footer.jsx b/dashboard/assets/components/Footer.jsx index 20830cbba86e..a5cab08aabe4 100644 --- a/dashboard/assets/components/Footer.jsx +++ b/dashboard/assets/components/Footer.jsx @@ -18,14 +18,19 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import Typography from 'material-ui/Typography'; -import Grid from 'material-ui/Grid'; -import {ResponsiveContainer, AreaChart, Area, Tooltip} from 'recharts'; - -import ChartRow from './ChartRow'; -import CustomTooltip, {bytePlotter, bytePerSecPlotter, percentPlotter, multiplier} from './CustomTooltip'; -import {styles as commonStyles} from '../common'; +import withStyles from '@material-ui/core/styles/withStyles'; +import Typography from '@material-ui/core/Typography'; +import Grid from '@material-ui/core/Grid'; +import ResponsiveContainer from 'recharts/es6/component/ResponsiveContainer'; +import AreaChart from 'recharts/es6/chart/AreaChart'; +import Area from 'recharts/es6/cartesian/Area'; +import ReferenceLine from 'recharts/es6/cartesian/ReferenceLine'; +import Label from 'recharts/es6/component/Label'; +import Tooltip from 'recharts/es6/component/Tooltip'; + +import ChartRow from 'ChartRow'; +import CustomTooltip, {bytePlotter, bytePerSecPlotter, percentPlotter, multiplier} from 'CustomTooltip'; +import {chartStrokeWidth, styles as commonStyles} from '../common'; import type {General, System} from '../types/content'; const FOOTER_SYNC_ID = 'footerSyncId'; @@ -38,6 +43,15 @@ const TRAFFIC = 'traffic'; const TOP = 'Top'; const BOTTOM = 'Bottom'; +const cpuLabelTop = 'Process load'; +const cpuLabelBottom = 'System load'; +const memoryLabelTop = 'Active memory'; +const memoryLabelBottom = 'Virtual memory'; +const diskLabelTop = 'Disk read'; +const diskLabelBottom = 'Disk write'; +const trafficLabelTop = 'Download'; +const trafficLabelBottom = 'Upload'; + // styles contains the constant styles of the component. const styles = { footer: { @@ -53,6 +67,10 @@ const styles = { height: '100%', width: '99%', }, + link: { + color: 'inherit', + textDecoration: 'none', + }, }; // themeStyles returns the styles generated from the theme for the component. @@ -73,18 +91,23 @@ export type Props = { shouldUpdate: Object, }; +type State = {}; + // Footer renders the footer of the dashboard. -class Footer extends Component { - shouldComponentUpdate(nextProps) { +class Footer extends Component { + shouldComponentUpdate(nextProps: Readonly, nextState: Readonly, nextContext: any) { return typeof nextProps.shouldUpdate.general !== 'undefined' || typeof nextProps.shouldUpdate.system !== 'undefined'; } // halfHeightChart renders an area chart with half of the height of its parent. - halfHeightChart = (chartProps, tooltip, areaProps) => ( + halfHeightChart = (chartProps, tooltip, areaProps, label, position) => ( - + {!tooltip || (} />)} - + + + ); @@ -111,6 +134,8 @@ class Footer extends Component { }, topChart.tooltip, {dataKey: topKey, stroke: topColor, fill: topColor}, + topChart.label, + 'insideBottomLeft', )} {this.halfHeightChart( { @@ -120,6 +145,8 @@ class Footer extends Component { }, bottomChart.tooltip, {dataKey: bottomKey, stroke: bottomColor, fill: bottomColor}, + bottomChart.label, + 'insideTopLeft', )}
); @@ -135,37 +162,42 @@ class Footer extends Component { {this.doubleChart( FOOTER_SYNC_ID, CPU, - {data: system.processCPU, tooltip: percentPlotter('Process load')}, - {data: system.systemCPU, tooltip: percentPlotter('System load', multiplier(-1))}, + {data: system.processCPU, tooltip: percentPlotter(cpuLabelTop), label: cpuLabelTop}, + {data: system.systemCPU, tooltip: percentPlotter(cpuLabelBottom, multiplier(-1)), label: cpuLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, MEMORY, - {data: system.activeMemory, tooltip: bytePlotter('Active memory')}, - {data: system.virtualMemory, tooltip: bytePlotter('Virtual memory', multiplier(-1))}, + {data: system.activeMemory, tooltip: bytePlotter(memoryLabelTop), label: memoryLabelTop}, + {data: system.virtualMemory, tooltip: bytePlotter(memoryLabelBottom, multiplier(-1)), label: memoryLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, DISK, - {data: system.diskRead, tooltip: bytePerSecPlotter('Disk read')}, - {data: system.diskWrite, tooltip: bytePerSecPlotter('Disk write', multiplier(-1))}, + {data: system.diskRead, tooltip: bytePerSecPlotter(diskLabelTop), label: diskLabelTop}, + {data: system.diskWrite, tooltip: bytePerSecPlotter(diskLabelBottom, multiplier(-1)), label: diskLabelBottom}, )} {this.doubleChart( FOOTER_SYNC_ID, TRAFFIC, - {data: system.networkIngress, tooltip: bytePerSecPlotter('Download')}, - {data: system.networkEgress, tooltip: bytePerSecPlotter('Upload', multiplier(-1))}, + {data: system.networkIngress, tooltip: bytePerSecPlotter(trafficLabelTop), label: trafficLabelTop}, + {data: system.networkEgress, tooltip: bytePerSecPlotter(trafficLabelBottom, multiplier(-1)), label: trafficLabelBottom}, )} - + Geth {general.version} {general.commit && ( {'Commit '} -
+ {general.commit.substring(0, 8)} diff --git a/dashboard/assets/components/Header.jsx b/dashboard/assets/components/Header.jsx index 43bd2bede2db..063e82d0ad87 100644 --- a/dashboard/assets/components/Header.jsx +++ b/dashboard/assets/components/Header.jsx @@ -18,13 +18,13 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import AppBar from 'material-ui/AppBar'; -import Toolbar from 'material-ui/Toolbar'; -import IconButton from 'material-ui/IconButton'; -import Icon from 'material-ui/Icon'; -import MenuIcon from 'material-ui-icons/Menu'; -import Typography from 'material-ui/Typography'; +import withStyles from '@material-ui/core/styles/withStyles'; +import AppBar from '@material-ui/core/AppBar'; +import Toolbar from '@material-ui/core/Toolbar'; +import IconButton from '@material-ui/core/IconButton'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faBars} from '@fortawesome/free-solid-svg-icons'; +import Typography from '@material-ui/core/Typography'; // styles contains the constant styles of the component. const styles = { @@ -67,9 +67,7 @@ class Header extends Component { - - - + Go Ethereum Dashboard diff --git a/dashboard/assets/components/Logs.jsx b/dashboard/assets/components/Logs.jsx index 57d6328d35f9..3359287d4673 100644 --- a/dashboard/assets/components/Logs.jsx +++ b/dashboard/assets/components/Logs.jsx @@ -18,7 +18,8 @@ import React, {Component} from 'react'; -import List, {ListItem} from 'material-ui/List'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; import escapeHtml from 'escape-html'; import type {Record, Content, LogsMessage, Logs as LogsType} from '../types/content'; @@ -104,9 +105,9 @@ const createChunk = (records: Array) => { // ADDED, SAME and REMOVED are used to track the change of the log chunk array. // The scroll position is set using these values. -const ADDED = 1; -const SAME = 0; -const REMOVED = -1; +export const ADDED = 1; +export const SAME = 0; +export const REMOVED = -1; // inserter is a state updater function for the main component, which inserts the new log chunk into the chunk array. // limit is the maximum length of the chunk array, used in order to prevent the browser from OOM. @@ -166,7 +167,7 @@ export const inserter = (limit: number) => (update: LogsMessage, prev: LogsType) // styles contains the constant styles of the component. const styles = { logListItem: { - padding: 0, + padding: 0, lineHeight: 1.231, }, logChunk: { @@ -251,15 +252,15 @@ class Logs extends Component { // atBottom checks if the scroll position it at the bottom of the container. atBottom = () => { const {container} = this.props; - return container.scrollHeight - container.scrollTop <= - container.clientHeight + container.scrollHeight * requestBand; + return container.scrollHeight - container.scrollTop + <= container.clientHeight + container.scrollHeight * requestBand; }; // beforeUpdate is called by the parent component, saves the previous scroll position // and the height of the first log chunk, which can be deleted during the insertion. beforeUpdate = () => { let firstHeight = 0; - let chunkList = this.content.children[1]; + const chunkList = this.content.children[1]; if (chunkList && chunkList.children[0]) { firstHeight = chunkList.children[0].clientHeight; } diff --git a/dashboard/assets/components/Main.jsx b/dashboard/assets/components/Main.jsx index 0018aaf75fbb..5bb13abd4941 100644 --- a/dashboard/assets/components/Main.jsx +++ b/dashboard/assets/components/Main.jsx @@ -18,11 +18,12 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; +import withStyles from '@material-ui/core/styles/withStyles'; +import Network from 'Network'; +import Logs from 'Logs'; +import Footer from 'Footer'; import {MENU} from '../common'; -import Logs from './Logs'; -import Footer from './Footer'; import type {Content} from '../types/content'; // styles contains the constant styles of the component. @@ -33,7 +34,7 @@ const styles = { width: '100%', }, content: { - flex: 1, + flex: 1, overflow: 'auto', }, }; @@ -54,21 +55,16 @@ export type Props = { send: string => void, }; +type State = {}; + // Main renders the chosen content. -class Main extends Component { +class Main extends Component { constructor(props) { super(props); this.container = React.createRef(); this.content = React.createRef(); } - getSnapshotBeforeUpdate() { - if (this.content && typeof this.content.beforeUpdate === 'function') { - return this.content.beforeUpdate(); - } - return null; - } - componentDidUpdate(prevProps, prevState, snapshot) { if (this.content && typeof this.content.didUpdate === 'function') { this.content.didUpdate(prevProps, prevState, snapshot); @@ -81,6 +77,13 @@ class Main extends Component { } }; + getSnapshotBeforeUpdate(prevProps: Readonly

, prevState: Readonly) { + if (this.content && typeof this.content.beforeUpdate === 'function') { + return this.content.beforeUpdate(); + } + return null; + } + render() { const { classes, active, content, shouldUpdate, @@ -89,9 +92,20 @@ class Main extends Component { let children = null; switch (active) { case MENU.get('home').id: + children =

Work in progress.
; + break; case MENU.get('chain').id: + children =
Work in progress.
; + break; case MENU.get('txpool').id: + children =
Work in progress.
; + break; case MENU.get('network').id: + children = ; + break; case MENU.get('system').id: children =
Work in progress.
; break; diff --git a/dashboard/assets/components/Network.jsx b/dashboard/assets/components/Network.jsx new file mode 100644 index 000000000000..3a52892eede5 --- /dev/null +++ b/dashboard/assets/components/Network.jsx @@ -0,0 +1,529 @@ +// @flow + +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +import React, {Component} from 'react'; + +import Table from '@material-ui/core/Table'; +import TableHead from '@material-ui/core/TableHead'; +import TableBody from '@material-ui/core/TableBody'; +import TableRow from '@material-ui/core/TableRow'; +import TableCell from '@material-ui/core/TableCell'; +import Grid from '@material-ui/core/Grid/Grid'; +import Typography from '@material-ui/core/Typography'; +import {AreaChart, Area, Tooltip, YAxis} from 'recharts'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; +import {faCircle as fasCircle} from '@fortawesome/free-solid-svg-icons'; +import {faCircle as farCircle} from '@fortawesome/free-regular-svg-icons'; +import convert from 'color-convert'; + +import CustomTooltip, {bytePlotter, multiplier} from 'CustomTooltip'; +import type {Network as NetworkType, PeerEvent} from '../types/content'; +import {styles as commonStyles, chartStrokeWidth, hues, hueScale} from '../common'; + +// Peer chart dimensions. +const trafficChartHeight = 18; +const trafficChartWidth = 400; + +// setMaxIngress adjusts the peer chart's gradient values based on the given value. +const setMaxIngress = (peer, value) => { + peer.maxIngress = value; + peer.ingressGradient = []; + peer.ingressGradient.push({offset: hueScale[0], color: hues[0]}); + let i = 1; + for (; i < hues.length && value > hueScale[i]; i++) { + peer.ingressGradient.push({offset: Math.floor(hueScale[i] * 100 / value), color: hues[i]}); + } + i--; + if (i < hues.length - 1) { + // Usually the maximum value gets between two points on the predefined + // color scale (e.g. 123KB is somewhere between 100KB (#FFFF00) and + // 1MB (#FF0000)), and the charts need to be comparable by the colors, + // so we have to calculate the last hue using the maximum value and the + // surrounding hues in order to avoid the uniformity of the top colors + // on the charts. For this reason the two hues are translated into the + // CIELAB color space, and the top color will be their weighted average + // (CIELAB is perceptually uniform, meaning that any point on the line + // between two pure color points is also a pure color, so the weighted + // average will not lose from the saturation). + // + // In case the maximum value is greater than the biggest predefined + // scale value, the top of the chart will have uniform color. + const lastHue = convert.hex.lab(hues[i]); + const proportion = (value - hueScale[i]) * 100 / (hueScale[i + 1] - hueScale[i]); + convert.hex.lab(hues[i + 1]).forEach((val, j) => { + lastHue[j] = (lastHue[j] * proportion + val * (100 - proportion)) / 100; + }); + peer.ingressGradient.push({offset: 100, color: `#${convert.lab.hex(lastHue)}`}); + } +}; + +// setMaxEgress adjusts the peer chart's gradient values based on the given value. +// In case of the egress the chart is upside down, so the gradients need to be +// calculated inversely compared to the ingress. +const setMaxEgress = (peer, value) => { + peer.maxEgress = value; + peer.egressGradient = []; + peer.egressGradient.push({offset: 100 - hueScale[0], color: hues[0]}); + let i = 1; + for (; i < hues.length && value > hueScale[i]; i++) { + peer.egressGradient.unshift({offset: 100 - Math.floor(hueScale[i] * 100 / value), color: hues[i]}); + } + i--; + if (i < hues.length - 1) { + // Calculate the last hue. + const lastHue = convert.hex.lab(hues[i]); + const proportion = (value - hueScale[i]) * 100 / (hueScale[i + 1] - hueScale[i]); + convert.hex.lab(hues[i + 1]).forEach((val, j) => { + lastHue[j] = (lastHue[j] * proportion + val * (100 - proportion)) / 100; + }); + peer.egressGradient.unshift({offset: 0, color: `#${convert.lab.hex(lastHue)}`}); + } +}; + + +// setIngressChartAttributes searches for the maximum value of the ingress +// samples, and adjusts the peer chart's gradient values accordingly. +const setIngressChartAttributes = (peer) => { + let max = 0; + peer.ingress.forEach(({value}) => { + if (value > max) { + max = value; + } + }); + setMaxIngress(peer, max); +}; + +// setEgressChartAttributes searches for the maximum value of the egress +// samples, and adjusts the peer chart's gradient values accordingly. +const setEgressChartAttributes = (peer) => { + let max = 0; + peer.egress.forEach(({value}) => { + if (value > max) { + max = value; + } + }); + setMaxEgress(peer, max); +}; + +// inserter is a state updater function for the main component, which handles the peers. +export const inserter = (sampleLimit: number) => (update: NetworkType, prev: NetworkType) => { + // The first message contains the metered peer history. + if (update.peers && update.peers.bundles) { + prev.peers = update.peers; + Object.values(prev.peers.bundles).forEach((bundle) => { + if (bundle.knownPeers) { + Object.values(bundle.knownPeers).forEach((peer) => { + if (!peer.maxIngress) { + setIngressChartAttributes(peer); + } + if (!peer.maxEgress) { + setEgressChartAttributes(peer); + } + }); + } + }); + } + if (Array.isArray(update.diff)) { + update.diff.forEach((event: PeerEvent) => { + if (!event.ip) { + console.error('Peer event without IP', event); + return; + } + switch (event.remove) { + case 'bundle': { + delete prev.peers.bundles[event.ip]; + return; + } + case 'known': { + if (!event.id) { + console.error('Remove known peer event without ID', event.ip); + return; + } + const bundle = prev.peers.bundles[event.ip]; + if (!bundle || !bundle.knownPeers || !bundle.knownPeers[event.id]) { + console.error('No known peer to remove', event.ip, event.id); + return; + } + delete bundle.knownPeers[event.id]; + return; + } + case 'attempt': { + const bundle = prev.peers.bundles[event.ip]; + if (!bundle || !Array.isArray(bundle.attempts) || bundle.attempts.length < 1) { + console.error('No unknown peer to remove', event.ip); + return; + } + bundle.attempts.splice(0, 1); + return; + } + } + if (!prev.peers.bundles[event.ip]) { + prev.peers.bundles[event.ip] = { + location: { + country: '', + city: '', + latitude: 0, + longitude: 0, + }, + knownPeers: {}, + attempts: [], + }; + } + const bundle = prev.peers.bundles[event.ip]; + if (event.location) { + bundle.location = event.location; + return; + } + if (!event.id) { + if (!bundle.attempts) { + bundle.attempts = []; + } + bundle.attempts.push({ + connected: event.connected, + disconnected: event.disconnected, + }); + return; + } + if (!bundle.knownPeers) { + bundle.knownPeers = {}; + } + if (!bundle.knownPeers[event.id]) { + bundle.knownPeers[event.id] = { + connected: [], + disconnected: [], + ingress: [], + egress: [], + active: false, + }; + } + const peer = bundle.knownPeers[event.id]; + if (!peer.maxIngress) { + setIngressChartAttributes(peer); + } + if (!peer.maxEgress) { + setEgressChartAttributes(peer); + } + if (event.connected) { + if (!peer.connected) { + console.warn('peer.connected should exist'); + peer.connected = []; + } + peer.connected.push(event.connected); + } + if (event.disconnected) { + if (!peer.disconnected) { + console.warn('peer.disconnected should exist'); + peer.disconnected = []; + } + peer.disconnected.push(event.disconnected); + } + switch (event.activity) { + case 'active': + peer.active = true; + break; + case 'inactive': + peer.active = false; + break; + } + if (Array.isArray(event.ingress) && Array.isArray(event.egress)) { + if (event.ingress.length !== event.egress.length) { + console.error('Different traffic sample length', event); + return; + } + // Check if there is a new maximum value, and reset the colors in case. + let maxIngress = peer.maxIngress; + event.ingress.forEach(({value}) => { + if (value > maxIngress) { + maxIngress = value; + } + }); + if (maxIngress > peer.maxIngress) { + setMaxIngress(peer, maxIngress); + } + // Push the new values. + peer.ingress.splice(peer.ingress.length, 0, ...event.ingress); + const ingressDiff = peer.ingress.length - sampleLimit; + if (ingressDiff > 0) { + // Check if the maximum value is in the beginning. + let i = 0; + while (i < ingressDiff && peer.ingress[i].value < peer.maxIngress) { + i++; + } + // Remove the old values from the beginning. + peer.ingress.splice(0, ingressDiff); + if (i < ingressDiff) { + // Reset the colors if the maximum value leaves the chart. + setIngressChartAttributes(peer); + } + } + // Check if there is a new maximum value, and reset the colors in case. + let maxEgress = peer.maxEgress; + event.egress.forEach(({value}) => { + if (value > maxEgress) { + maxEgress = value; + } + }); + if (maxEgress > peer.maxEgress) { + setMaxEgress(peer, maxEgress); + } + // Push the new values. + peer.egress.splice(peer.egress.length, 0, ...event.egress); + const egressDiff = peer.egress.length - sampleLimit; + if (egressDiff > 0) { + // Check if the maximum value is in the beginning. + let i = 0; + while (i < egressDiff && peer.egress[i].value < peer.maxEgress) { + i++; + } + // Remove the old values from the beginning. + peer.egress.splice(0, egressDiff); + if (i < egressDiff) { + // Reset the colors if the maximum value leaves the chart. + setEgressChartAttributes(peer); + } + } + } + }); + } + return prev; +}; + +// styles contains the constant styles of the component. +const styles = { + tableHead: { + height: 'auto', + }, + tableRow: { + height: 'auto', + }, + tableCell: { + paddingTop: 0, + paddingRight: 5, + paddingBottom: 0, + paddingLeft: 5, + border: 'none', + }, +}; + +export type Props = { + container: Object, + content: NetworkType, + shouldUpdate: Object, +}; + +type State = {}; + +// Network renders the network page. +class Network extends Component { + componentDidMount() { + const {container} = this.props; + if (typeof container === 'undefined') { + return; + } + container.scrollTop = 0; + } + + formatTime = (t: string) => { + const time = new Date(t); + if (isNaN(time)) { + return ''; + } + const month = `0${time.getMonth() + 1}`.slice(-2); + const date = `0${time.getDate()}`.slice(-2); + const hours = `0${time.getHours()}`.slice(-2); + const minutes = `0${time.getMinutes()}`.slice(-2); + const seconds = `0${time.getSeconds()}`.slice(-2); + return `${month}/${date}/${hours}:${minutes}:${seconds}`; + }; + + copyToClipboard = (id) => (event) => { + event.preventDefault(); + navigator.clipboard.writeText(id).then(() => {}, () => { + console.error("Failed to copy node id", id); + }); + }; + + peerTableRow = (ip, id, bundle, peer) => { + const ingressValues = peer.ingress.map(({value}) => ({ingress: value || 0.001})); + const egressValues = peer.egress.map(({value}) => ({egress: -value || -0.001})); + + return ( + + + {peer.active + ? + : + } + + + {id.substring(0, 10)} + + + {bundle.location ? (() => { + const l = bundle.location; + return `${l.country ? l.country : ''}${l.city ? `/${l.city}` : ''}`; + })() : ''} + + + + + + {peer.ingressGradient + && peer.ingressGradient.map(({offset, color}, i) => ( + + ))} + + + } /> + Math.max(dataMax, 0)]} /> + + + + + + {peer.egressGradient + && peer.egressGradient.map(({offset, color}, i) => ( + + ))} + + + } /> + Math.min(dataMin, 0), -0.001]} /> + + + + + ); + }; + + render() { + return ( + + + + + + + Node ID + Location + Traffic + + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.knownPeers || Object.keys(bundle.knownPeers).length < 1) { + return null; + } + return Object.entries(bundle.knownPeers).map(([id, peer]) => { + if (peer.active === false) { + return null; + } + return this.peerTableRow(ip, id, bundle, peer); + }); + })} + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.knownPeers || Object.keys(bundle.knownPeers).length < 1) { + return null; + } + return Object.entries(bundle.knownPeers).map(([id, peer]) => { + if (peer.active === true) { + return null; + } + return this.peerTableRow(ip, id, bundle, peer); + }); + })} + +
+
+ + + Connection attempts + + + + + IP + Location + Nr + + + + {Object.entries(this.props.content.peers.bundles).map(([ip, bundle]) => { + if (!bundle.attempts || bundle.attempts.length < 1) { + return null; + } + return ( + + {ip} + + {bundle.location ? (() => { + const l = bundle.location; + return `${l.country ? l.country : ''}${l.city ? `/${l.city}` : ''}`; + })() : ''} + + + {Object.values(bundle.attempts).length} + + + ); + })} + +
+
+
+ ); + } +} + +export default Network; diff --git a/dashboard/assets/components/SideBar.jsx b/dashboard/assets/components/SideBar.jsx index 463d6cb40fb3..301e458d17ab 100644 --- a/dashboard/assets/components/SideBar.jsx +++ b/dashboard/assets/components/SideBar.jsx @@ -18,11 +18,14 @@ import React, {Component} from 'react'; -import withStyles from 'material-ui/styles/withStyles'; -import List, {ListItem, ListItemIcon, ListItemText} from 'material-ui/List'; -import Icon from 'material-ui/Icon'; +import withStyles from '@material-ui/core/styles/withStyles'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemText from '@material-ui/core/ListItemText'; +import Icon from '@material-ui/core/Icon'; import Transition from 'react-transition-group/Transition'; -import {Icon as FontAwesome} from 'react-fa'; +import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import {MENU, DURATION} from '../common'; @@ -48,6 +51,7 @@ const themeStyles = theme => ({ }, icon: { fontSize: theme.spacing.unit * 3, + overflow: 'unset', }, }); @@ -57,9 +61,11 @@ export type Props = { changeContent: string => void, }; +type State = {} + // SideBar renders the sidebar of the dashboard. -class SideBar extends Component { - shouldComponentUpdate(nextProps) { +class SideBar extends Component { + shouldComponentUpdate(nextProps: Readonly, nextState: Readonly, nextContext: any) { return nextProps.opened !== this.props.opened; } @@ -78,7 +84,7 @@ class SideBar extends Component { - + content + .replace(/src.*url(?!.*url.*(\.eot)).*(\.eot)[^;]*;/, '') + .replace(/url(?!.*url.*(\.eot)).*(\.eot)[^,]*,/, '') + .replace(/url(?!.*url.*(\.ttf)).*(\.ttf)[^,]*,/, '') + .replace(/,[^,]*url(?!.*url.*(\.svg)).*(\.svg)[^;]*;/, ';'); diff --git a/dashboard/assets/index.html b/dashboard/assets/index.html index 1211d1521b62..fbfb7f004e14 100644 --- a/dashboard/assets/index.html +++ b/dashboard/assets/index.html @@ -21,6 +21,6 @@
- + diff --git a/dashboard/assets/index.jsx b/dashboard/assets/index.jsx index 4ee567b01bd1..a08911aa8aeb 100644 --- a/dashboard/assets/index.jsx +++ b/dashboard/assets/index.jsx @@ -19,12 +19,15 @@ import React from 'react'; import {render} from 'react-dom'; -import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'; -import createMuiTheme from 'material-ui/styles/createMuiTheme'; +import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'; +import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; import Dashboard from './components/Dashboard'; const theme: Object = createMuiTheme({ + // typography: { + // useNextVariants: true, + // }, palette: { type: 'dark', }, diff --git a/dashboard/assets/package.json b/dashboard/assets/package.json index fb1a68e5b52b..626ed288b827 100644 --- a/dashboard/assets/package.json +++ b/dashboard/assets/package.json @@ -1,48 +1,65 @@ { + "private": true, "dependencies": { - "babel-core": "^6.26.0", - "babel-eslint": "^8.2.1", - "babel-loader": "^7.1.2", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-flow-strip-types": "^6.22.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.6.1", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-0": "^6.24.1", - "babel-runtime": "^6.26.0", - "classnames": "^2.2.5", - "css-loader": "^0.28.9", + "@babel/core": "7.3.4", + "@babel/plugin-proposal-class-properties": "7.3.4", + "@babel/plugin-proposal-function-bind": "7.2.0", + "@babel/plugin-transform-flow-strip-types": "7.3.4", + "@babel/preset-env": "7.3.4", + "@babel/preset-react": "^7.0.0", + "@babel/preset-stage-0": "^7.0.0", + "@fortawesome/fontawesome-free-regular": "^5.0.13", + "@fortawesome/fontawesome-svg-core": "^1.2.15", + "@fortawesome/free-regular-svg-icons": "^5.7.2", + "@fortawesome/free-solid-svg-icons": "^5.7.2", + "@fortawesome/react-fontawesome": "^0.1.4", + "@material-ui/core": "3.9.2", + "@material-ui/icons": "3.0.2", + "babel-eslint": "10.0.1", + "babel-loader": "8.0.5", + "classnames": "^2.2.6", + "color-convert": "^2.0.0", + "css-loader": "2.1.1", "escape-html": "^1.0.3", - "eslint": "^4.16.0", - "eslint-config-airbnb": "^16.1.0", - "eslint-loader": "^2.0.0", - "eslint-plugin-flowtype": "^2.41.0", - "eslint-plugin-import": "^2.8.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.5.1", - "file-loader": "^1.1.6", - "flow-bin": "^0.63.1", - "flow-bin-loader": "^1.0.2", - "flow-typed": "^2.2.3", - "material-ui": "^1.0.0-beta.30", - "material-ui-icons": "^1.0.0-beta.17", + "eslint": "5.15.1", + "eslint-config-airbnb": "^17.0.0", + "eslint-loader": "2.1.2", + "eslint-plugin-flowtype": "3.4.2", + "eslint-plugin-import": "2.16.0", + "eslint-plugin-jsx-a11y": "6.2.1", + "eslint-plugin-node": "8.0.1", + "eslint-plugin-promise": "4.0.1", + "eslint-plugin-react": "7.12.4", + "file-loader": "3.0.1", + "flow-bin": "0.94.0", + "flow-bin-loader": "^1.0.3", + "flow-typed": "^2.5.1", + "js-beautify": "1.9.0", "path": "^0.12.7", - "react": "^16.2.0", - "react-dom": "^16.2.0", - "react-fa": "^5.0.0", - "react-transition-group": "^2.2.1", - "recharts": "^1.0.0-beta.9", - "style-loader": "^0.19.1", + "react": "16.8.4", + "react-dom": "16.8.4", + "react-hot-loader": "4.8.0", + "react-transition-group": "2.6.1", + "recharts": "1.5.0", + "style-loader": "0.23.1", + "terser-webpack-plugin": "^1.2.3", "url": "^0.11.0", - "url-loader": "^0.6.2", - "webpack": "^3.10.0", - "webpack-dev-server": "^2.11.1" + "url-loader": "1.1.2", + "webpack": "4.29.6", + "webpack-cli": "3.2.3", + "webpack-dashboard": "3.0.0", + "webpack-dev-server": "3.2.1", + "webpack-merge": "4.2.1" }, "scripts": { - "build": "NODE_ENV=production webpack", - "stats": "webpack --profile --json > stats.json", - "dev": "webpack-dev-server --port 8081", - "flow": "flow-typed install" - } + "build": "webpack --config webpack.config.prod.js", + "stats": "webpack --config webpack.config.prod.js --profile --json > stats.json", + "dev": "webpack-dev-server --open --config webpack.config.dev.js", + "dash": "webpack-dashboard -- yarn dev", + "install-flow": "flow-typed install", + "flow": "flow status --show-all-errors", + "eslint": "eslint **/*" + }, + "sideEffects": false, + "license": "LGPL-3.0-or-later" } diff --git a/dashboard/assets/types/content.jsx b/dashboard/assets/types/content.jsx index ff82c3572d05..3086d44244bc 100644 --- a/dashboard/assets/types/content.jsx +++ b/dashboard/assets/types/content.jsx @@ -29,7 +29,6 @@ export type Content = { export type ChartEntries = Array; export type ChartEntry = { - time: Date, value: number, }; @@ -51,7 +50,50 @@ export type TxPool = { }; export type Network = { - /* TODO (kurkomisi) */ + peers: Peers, + diff: Array +}; + +export type PeerEvent = { + ip: string, + id: string, + remove: string, + location: GeoLocation, + connected: Date, + disconnected: Date, + ingress: ChartEntries, + egress: ChartEntries, + activity: string, +}; + +export type Peers = { + bundles: {[string]: PeerBundle}, +}; + +export type PeerBundle = { + location: GeoLocation, + knownPeers: {[string]: KnownPeer}, + attempts: Array, +}; + +export type KnownPeer = { + connected: Array, + disconnected: Array, + ingress: Array, + egress: Array, + active: boolean, +}; + +export type UnknownPeer = { + connected: Date, + disconnected: Date, +}; + +export type GeoLocation = { + country: string, + city: string, + latitude: number, + longitude: number, }; export type System = { diff --git a/dashboard/assets/webpack.config.js b/dashboard/assets/webpack.config.common.js similarity index 58% rename from dashboard/assets/webpack.config.js rename to dashboard/assets/webpack.config.common.js index f58d35ad1e38..364c04f9d87b 100644 --- a/dashboard/assets/webpack.config.js +++ b/dashboard/assets/webpack.config.common.js @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,28 +14,25 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -const webpack = require('webpack'); const path = require('path'); module.exports = { - resolve: { - extensions: ['.js', '.jsx'], + target: 'web', + entry: { + bundle: './index', }, - entry: './index', output: { - path: path.resolve(__dirname, ''), - filename: 'bundle.js', + filename: '[name].js', + path: path.resolve(__dirname, ''), + sourceMapFilename: '[file].map', + }, + resolve: { + modules: [ + 'node_modules', + path.resolve(__dirname, 'components'), // import './components/Component' -> import 'Component' + ], + extensions: ['.js', '.jsx'], }, - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - comments: false, - mangle: false, - beautify: true, - }), - new webpack.DefinePlugin({ - PROD: process.env.NODE_ENV === 'production', - }), - ], module: { rules: [ { @@ -45,27 +42,38 @@ module.exports = { { loader: 'babel-loader', options: { - plugins: [ // order: from top to bottom - // 'transform-decorators-legacy', // @withStyles, @withTheme - 'transform-class-properties', // static defaultProps - 'transform-flow-strip-types', - ], presets: [ // order: from bottom to top - 'env', - 'react', - 'stage-0', + '@babel/env', + '@babel/react', + ], + plugins: [ // order: from top to bottom + '@babel/proposal-function-bind', // instead of stage 0 + '@babel/proposal-class-properties', // static defaultProps + '@babel/transform-flow-strip-types', + 'react-hot-loader/babel', ], }, }, - // 'eslint-loader', // show errors not only in the editor, but also in the console + // 'eslint-loader', // show errors in the console ], }, { - test: /font-awesome\.css$/, - use: [ - 'style-loader', - 'css-loader', - path.resolve(__dirname, './fa-only-woff-loader.js'), + test: /\.css$/, + oneOf: [ + { + test: /font-awesome/, + use: [ + 'style-loader', + 'css-loader', + path.resolve(__dirname, './fa-only-woff-loader.js'), + ], + }, + { + use: [ + 'style-loader', + 'css-loader', + ], + }, ], }, { diff --git a/dashboard/assets/webpack.config.dev.js b/dashboard/assets/webpack.config.dev.js new file mode 100644 index 000000000000..288d13fbf2f2 --- /dev/null +++ b/dashboard/assets/webpack.config.dev.js @@ -0,0 +1,35 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +const webpack = require('webpack'); +const merge = require('webpack-merge'); +const WebpackDashboard = require('webpack-dashboard/plugin'); +const common = require('./webpack.config.common.js'); + +module.exports = merge(common, { + mode: 'development', + plugins: [ + new WebpackDashboard(), + new webpack.HotModuleReplacementPlugin(), + ], + // devtool: 'eval', + devtool: 'source-map', + devServer: { + port: 8081, + hot: true, + compress: true, + }, +}); diff --git a/core/rawdb/interfaces.go b/dashboard/assets/webpack.config.prod.js similarity index 53% rename from core/rawdb/interfaces.go rename to dashboard/assets/webpack.config.prod.js index 3bdf55124a03..a047ba5e2192 100644 --- a/core/rawdb/interfaces.go +++ b/dashboard/assets/webpack.config.prod.js @@ -1,4 +1,4 @@ -// Copyright 2018 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,20 +14,28 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rawdb +const TerserPlugin = require('terser-webpack-plugin'); +const merge = require('webpack-merge'); +const common = require('./webpack.config.common.js'); -// DatabaseReader wraps the Has and Get method of a backing data store. -type DatabaseReader interface { - Has(key []byte) (bool, error) - Get(key []byte) ([]byte, error) -} - -// DatabaseWriter wraps the Put method of a backing data store. -type DatabaseWriter interface { - Put(key []byte, value []byte) error -} - -// DatabaseDeleter wraps the Delete method of a backing data store. -type DatabaseDeleter interface { - Delete(key []byte) error -} +module.exports = merge(common, { + mode: 'production', + devtool: 'source-map', + optimization: { + minimize: true, + namedModules: true, // Module names instead of numbers - resolves the large diff problem. + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + sourceMap: true, + terserOptions: { + output: { + comments: false, + beautify: true, + }, + }, + }), + ], + }, +}); diff --git a/dashboard/assets/yarn.lock b/dashboard/assets/yarn.lock index 10277c988235..0fdf5593cddf 100644 --- a/dashboard/assets/yarn.lock +++ b/dashboard/assets/yarn.lock @@ -2,1115 +2,1354 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" - dependencies: - "@babel/highlight" "7.0.0-beta.44" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.4.tgz#921a5a13746c21e32445bf0798680e9d11a6530b" + integrity sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.4" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.3.4" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.3.4" + "@babel/types" "^7.3.4" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -"@babel/generator@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" +"@babel/generator@^7.3.4", "@babel/generator@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" + integrity sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/types" "^7.4.4" jsesc "^2.5.1" - lodash "^4.2.0" + lodash "^4.17.11" source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-function-name@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" + "@babel/types" "^7.0.0" -"@babel/helper-get-function-arity@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== + dependencies: + "@babel/types" "^7.3.0" + esutils "^2.0.0" + +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-create-class-features-plugin@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz#fc3d690af6554cc9efc607364a82d48f58736dba" + integrity sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + +"@babel/helper-define-map@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" + integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== dependencies: - "@babel/types" "7.0.0-beta.44" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/template@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/traverse@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" + "@babel/types" "^7.0.0" -"@babel/types@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" + "@babel/types" "^7.4.4" -"@types/jss@^9.3.0": - version "9.5.0" - resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.0.tgz#65d9b5c61f1e95ad3acd53e9a8b2d2342aa917e8" - dependencies: - csstype "^1.6.0" - -"@types/react-transition-group@^2.0.6": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.7.tgz#2847292d54c5685d982ae5a3ecb6960946689d87" +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.0.40" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.40.tgz#caabc2296886f40b67f6fc80f0f3464476461df9" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + "@babel/types" "^7.0.0" -accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + "@babel/types" "^7.0.0" -acorn-dynamic-import@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" + integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== dependencies: - acorn "^4.0.3" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.4.4" + lodash "^4.17.11" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== dependencies: - acorn "^3.0.4" + "@babel/types" "^7.0.0" -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0, acorn@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" + integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + lodash "^4.17.11" -ajv@^5.0.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" + integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -ajv@^6.0.1, ajv@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2" +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== dependencies: - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + "@babel/types" "^7.4.4" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" +"@babel/helpers@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" + integrity sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +"@babel/parser@^7.0.0", "@babel/parser@^7.3.4", "@babel/parser@^7.4.4", "@babel/parser@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.5.tgz#04af8d5d5a2b044a2a1bffacc1e5e6673544e872" + integrity sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew== -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +"@babel/plugin-proposal-class-properties@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.4.tgz#410f5173b3dc45939f9ab30ca26684d72901405e" + integrity sha512-lUf8D3HLs4yYlAo8zjuneLvfxN7qfKv1Yzbj5vjqaqMJxgJA3Ipwp4VUJ+OrOdz53Wbww6ahwB8UhB2HQyLotA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.3.4" + "@babel/helper-plugin-utils" "^7.0.0" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" +"@babel/plugin-proposal-function-bind@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.2.0.tgz#94dc2cdc505cafc4e225c0014335a01648056bf7" + integrity sha512-qOFJ/eX1Is78sywwTxDcsntLOdb5ZlHVVqUz5xznq8ldAfOVIyZzp1JE2rzHnaksZIhrqMrwIpQL/qcEprnVbw== dependencies: - color-convert "^1.9.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-function-bind" "^7.2.0" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" +"@babel/plugin-proposal-object-rest-spread@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" + integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" +"@babel/plugin-proposal-unicode-property-regex@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" + integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== dependencies: - sprintf-js "~1.0.2" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" -aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" + "@babel/helper-plugin-utils" "^7.0.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== dependencies: - arr-flatten "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" +"@babel/plugin-syntax-function-bind@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.2.0.tgz#68fe85b0c0da67125f87bf239c68051b06c66309" + integrity sha512-/WzU1lLU2l0wDfB42Wkg6tahrmtBbiD8C4H6EGSX0M4GAjzN6JiOpq/Uh8G6GSoR6lPMvhjM0MNiV6znj6y/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +"@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-flatten@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" +"@babel/plugin-transform-async-to-generator@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" + integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== dependencies: - array-uniq "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" +"@babel/plugin-transform-block-scoping@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" + integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.11" -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +"@babel/plugin-transform-classes@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" + integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +"@babel/plugin-transform-destructuring@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" + integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" +"@babel/plugin-transform-dotall-regex@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" + integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" +"@babel/plugin-transform-duplicate-keys@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" + integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +"@babel/plugin-transform-flow-strip-types@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.3.4.tgz#00156236defb7dedddc2d3c9477dcc01a4494327" + integrity sha512-PmQC9R7DwpBFA+7ATKMyzViz3zCaMNouzZMPZN2K5PnbBbtL3AXFYTkDk+Hey5crQq2A90UG5Uthz0mel+XZrA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +"@babel/plugin-transform-for-of@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" +"@babel/plugin-transform-function-name@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== dependencies: - util "0.10.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" +"@babel/plugin-transform-modules-amd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" + integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +"@babel/plugin-transform-modules-commonjs@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" + integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +"@babel/plugin-transform-modules-systemjs@^7.3.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" + integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" -async@^2.1.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== dependencies: - lodash "^4.14.0" + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== + dependencies: + regexp-tree "^0.1.6" -atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" +"@babel/plugin-transform-new-target@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" +"@babel/plugin-transform-object-super@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" + integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.1.0" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +"@babel/plugin-transform-parameters@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" + integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" + integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz#20c8c60f0140f5dd3cd63418d452801cf3f7180f" + integrity sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== + dependencies: + "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-regenerator@^7.3.4": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.2.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" + integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.2.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" + integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/polyfill@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" + integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== + dependencies: + core-js "^2.6.5" + regenerator-runtime "^0.13.2" + +"@babel/preset-env@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" + integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.3.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.3.4" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.3.4" + "@babel/plugin-transform-classes" "^7.3.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.2.0" + "@babel/plugin-transform-dotall-regex" "^7.2.0" + "@babel/plugin-transform-duplicate-keys" "^7.2.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.2.0" + "@babel/plugin-transform-function-name" "^7.2.0" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.2.0" + "@babel/plugin-transform-modules-commonjs" "^7.2.0" + "@babel/plugin-transform-modules-systemjs" "^7.3.4" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.3.4" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.2.0" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.2.0" + browserslist "^4.3.4" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== dependencies: - ast-types-flow "0.0.7" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + +"@babel/preset-stage-0@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz#999aaec79ee8f0a763042c68c06539c97c6e0646" + integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" + integrity sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.1.0", "@babel/template@^7.2.2", "@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.4": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.5.tgz#4e92d1728fd2f1897dafdd321efbff92156c3216" + integrity sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.4.5" + "@babel/types" "^7.4.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.4", "@babel/types@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" + integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== dependencies: - chalk "^1.1.3" esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^8.2.1: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - eslint-scope "~3.7.1" - eslint-visitor-keys "^1.0.0" + lodash "^4.17.11" + to-fast-properties "^2.0.0" -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" +"@fortawesome/fontawesome-common-types@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.1.7.tgz#4336c4b06d0b5608ff1215464b66fcf9f4795284" + integrity sha512-ego8jRVSHfq/iq4KRZJKQeUAdi3ZjGNrqw4oPN3fNdvTBnLCSntwVCnc37bsAJP9UB8MhrTfPnZYxkv2vpS4pg== -babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +"@fortawesome/fontawesome-common-types@^0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.19.tgz#754a0f85e1290858152e1c05700ab502b11197f1" + integrity sha512-nd2Ul/CUs8U9sjofQYAALzOGpgkVJQgEhIJnOHaoyVR/LeC3x2mVg4eB910a4kS6WgLPebAY0M2fApEI497raQ== -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" +"@fortawesome/fontawesome-free-regular@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free-regular/-/fontawesome-free-regular-5.0.13.tgz#eb78c30184e3f456a423a1dcfa0f682f7b50de4a" + integrity sha512-36lz9Idww1L4QaaTcv7GZiOeIP9emJFDUsedvRovI10kmwyd6rN0PKkIjnq0FB4foLhX4Rou8vnbCCmjtqiLug== dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@fortawesome/fontawesome-common-types" "^0.1.7" -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" +"@fortawesome/fontawesome-svg-core@^1.2.15": + version "1.2.19" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.19.tgz#0eca1ce9285c3d99e6e340633ee8f615f9d1a2e0" + integrity sha512-D4ICXg9oU08eF9o7Or392gPpjmwwgJu8ecCFusthbID95CLVXOgIyd4mOKD9Nud5Ckz+Ty59pqkNtThDKR0erA== dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" + "@fortawesome/fontawesome-common-types" "^0.2.19" -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" +"@fortawesome/free-regular-svg-icons@^5.7.2": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.9.0.tgz#b16b325bdcdf51abebc547313cb75c3ef722ca04" + integrity sha512-6ZO0jLhk/Yrso0u5pXeYYSfZiHCNoCF7SgtqStdlEX8WtWD4IOfAB1N+MlSnMo12P5KR4cmucX/K0NCOPrhJwg== dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@fortawesome/fontawesome-common-types" "^0.2.19" -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" +"@fortawesome/free-solid-svg-icons@^5.7.2": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.9.0.tgz#1c73e7bac17417d23f934d83f7fff5b100a7fda9" + integrity sha512-U8YXPfWcSozsCW0psCtlRGKjjRs5+Am5JJwLOUmVHFZbIEWzaz4YbP84EoPwUsVmSAKrisu3QeNcVOtmGml0Xw== dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" + "@fortawesome/fontawesome-common-types" "^0.2.19" -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" +"@fortawesome/react-fontawesome@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.4.tgz#18d61d9b583ca289a61aa7dccc05bd164d6bc9ad" + integrity sha512-GwmxQ+TK7PEdfSwvxtGnMCqrfEm0/HbRHArbUudsYiy9KzVCwndxa2KMcfyTQ8El0vROrq8gOOff09RF1oQe8g== dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + humps "^2.0.1" + prop-types "^15.5.10" -babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" +"@material-ui/core@3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-3.9.2.tgz#41ed1a470e981d199829eb5d9317a671c66a6f7d" + integrity sha512-aukR3mSH3g115St2OnqoeMRtmxzxxx+Mch7pFKRV3Tz3URExBlZwOolimjxKZpG4LGec8HlhREawafLsDzjVWQ== dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@babel/runtime" "^7.2.0" + "@material-ui/system" "^3.0.0-alpha.0" + "@material-ui/utils" "^3.0.0-alpha.2" + "@types/jss" "^9.5.6" + "@types/react-transition-group" "^2.0.8" + brcast "^3.0.1" + classnames "^2.2.5" + csstype "^2.5.2" + debounce "^1.1.0" + deepmerge "^3.0.0" + dom-helpers "^3.2.1" + hoist-non-react-statics "^3.2.1" + is-plain-object "^2.0.4" + jss "^9.8.7" + jss-camel-case "^6.0.0" + jss-default-unit "^8.0.2" + jss-global "^3.0.0" + jss-nested "^6.0.1" + jss-props-sort "^6.0.0" + jss-vendor-prefixer "^7.0.0" + normalize-scroll-left "^0.1.2" + popper.js "^1.14.1" + prop-types "^15.6.0" + react-event-listener "^0.6.2" + react-transition-group "^2.2.1" + recompose "0.28.0 - 0.30.0" + warning "^4.0.1" -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" +"@material-ui/icons@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-3.0.2.tgz#d67a6dd1ec8312d3a88ec97944a63daeef24fe10" + integrity sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g== dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@babel/runtime" "^7.2.0" + recompose "0.28.0 - 0.30.0" -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" +"@material-ui/system@^3.0.0-alpha.0": + version "3.0.0-alpha.2" + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-3.0.0-alpha.2.tgz#096e80c8bb0f70aea435b9e38ea7749ee77b4e46" + integrity sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@babel/runtime" "^7.2.0" + deepmerge "^3.0.0" + prop-types "^15.6.0" + warning "^4.0.1" -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" +"@material-ui/utils@^3.0.0-alpha.2": + version "3.0.0-alpha.3" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz#836c62ea46f5ffc6f0b5ea05ab814704a86908b1" + integrity sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@babel/runtime" "^7.2.0" + prop-types "^15.6.0" + react-is "^16.6.3" -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" +"@most/multicast@^1.2.5": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@most/multicast/-/multicast-1.3.0.tgz#e01574840df634478ac3fabd164c6e830fb3b966" + integrity sha512-DWH8AShgp5bXn+auGzf5tzPxvpmEvQJd0CNsApOci1LDF4eAEcnw4HQOr2Jaa+L92NbDYFKBSXxll+i7r1ikvw== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@most/prelude" "^1.4.0" -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" +"@most/prelude@^1.4.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@most/prelude/-/prelude-1.7.2.tgz#be4ed406518d4c8c220e45c39fa7251365425b73" + integrity sha512-GM5ec7+xpkuXiCMyzhyENgH/xZ8t0nAMDBY0QOsVVD6TrZYjJKUnW1eaI18HHX8W+COWMwWR9c0zoPiBp9+tUg== + +"@octokit/rest@^15.12.1": + version "15.18.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.1.tgz#ec7fb0f8775ef64dc095fae6635411d3fbff9b62" + integrity sha512-g2tecjp2TEtYV8bKAFvfQtu+W29HM7ektmWmw8zrMy9/XCKDEYRErR2YvvhN9+IxkLC4O3lDqYP4b6WgsL6Utw== dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" + before-after-hook "^1.1.0" + btoa-lite "^1.0.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.0" lodash "^4.17.4" + node-fetch "^2.1.1" + universal-user-agent "^2.0.0" + url-template "^2.0.8" -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" +"@types/jss@^9.5.6": + version "9.5.8" + resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.5.8.tgz#258391f42211c042fc965508d505cbdc579baa5b" + integrity sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA== dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + csstype "^2.0.0" + indefinite-observable "^1.0.1" -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" +"@types/prop-types@*": + version "15.7.1" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" + integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg== -babel-loader@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" +"@types/react-transition-group@^2.0.8": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.2.tgz#c48cf2a11977c8b4ff539a1c91d259eaa627028d" + integrity sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA== dependencies: - find-cache-dir "^1.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" + "@types/react" "*" -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" +"@types/react@*": + version "16.8.19" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.19.tgz#629154ef05e2e1985cdde94477deefd823ad9be3" + integrity sha512-QzEzjrd1zFzY9cDlbIiFvdr+YUmefuuRYrPxmkwG0UQv5XF35gFIi7a95m1bNVcFU0VimxSZ5QVGSiBmlggQXQ== dependencies: - babel-runtime "^6.22.0" + "@types/prop-types" "*" + csstype "^2.2.0" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== dependencies: - babel-runtime "^6.22.0" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" - -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== -babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== -babel-plugin-syntax-do-expressions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== -babel-plugin-syntax-function-bind@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== -babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" -babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" -babel-plugin-transform-class-constructor-call@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== dependencies: - babel-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" -babel-plugin-transform-decorators-legacy@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== dependencies: - babel-plugin-syntax-decorators "^6.1.18" - babel-runtime "^6.2.0" - babel-template "^6.3.0" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" -babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== -babel-plugin-transform-do-expressions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" - dependencies: - babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.22.0" +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - babel-runtime "^6.22.0" + mime-types "~2.1.24" + negotiator "0.6.2" -babel-plugin-transform-es2015-block-scoping@^6.23.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== -babel-plugin-transform-es2015-classes@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" + integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" +acorn@^6.0.5, acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== -babel-plugin-transform-es2015-destructuring@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" +agent-base@4, agent-base@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + es6-promisify "^5.0.0" -babel-plugin-transform-es2015-for-of@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" +ajv-keywords@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" +ajv@^6.1.0, ajv@^6.9.1: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: - babel-runtime "^6.22.0" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" +ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -babel-plugin-transform-es2015-modules-umd@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -babel-plugin-transform-es2015-parameters@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + color-convert "^1.9.0" -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: - babel-runtime "^6.22.0" + micromatch "^3.1.4" + normalize-path "^2.1.1" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: - babel-runtime "^6.22.0" + delegates "^1.0.0" + readable-stream "^2.0.6" -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: - babel-runtime "^6.22.0" + sprintf-js "~1.0.2" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" + ast-types-flow "0.0.7" + commander "^2.11.0" -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -babel-plugin-transform-export-extensions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" - dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.22.0" +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -babel-plugin-transform-function-bind@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" - dependencies: - babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.22.0" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: - babel-runtime "^6.22.0" + define-properties "^1.1.2" + es-abstract "^1.7.0" -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" + array-uniq "^1.0.1" -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -babel-plugin-transform-regenerator@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== -babel-plugin-transform-runtime@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" - dependencies: - babel-runtime "^6.22.0" +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" + object-assign "^4.1.1" + util "0.10.3" -babel-preset-env@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-preset-stage-0@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" - dependencies: - babel-plugin-transform-do-expressions "^6.22.0" - babel-plugin-transform-function-bind "^6.22.0" - babel-preset-stage-1 "^6.24.1" - -babel-preset-stage-1@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" - dependencies: - babel-plugin-transform-class-constructor-call "^6.24.1" - babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.24.1" - -babel-preset-stage-2@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-decorators "^6.24.1" - babel-preset-stage-3 "^6.24.1" - -babel-preset-stage-3@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.24.1" - babel-plugin-transform-async-to-generator "^6.24.1" - babel-plugin-transform-exponentiation-operator "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +axobject-query@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" + ast-types-flow "0.0.7" -babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" +babel-eslint@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" -babylon@7.0.0-beta.44: - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" +babel-loader@8.0.5: + version "8.0.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" + integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + util.promisify "^1.0.0" -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@^1.0.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1123,56 +1362,83 @@ base@^0.11.1: batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" +before-after-hook@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" + integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= dependencies: - tweetnacl "^0.14.3" + callsite "1.0.0" -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +big-integer@^1.6.17: + version "1.6.44" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.44.tgz#4ee9ae5f5839fc11ade338fea216b4513454a539" + integrity sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -"binary@>= 0.3.0 < 1": +binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= dependencies: buffers "~0.1.1" chainsaw "~0.1.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bluebird@^3.5.3: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= dependencies: array-flatten "^2.1.0" deep-equal "^1.0.1" @@ -1181,38 +1447,24 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" - define-property "^1.0.0" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" - kind-of "^6.0.2" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" @@ -1222,14 +1474,17 @@ braces@^2.3.0, braces@^2.3.1: brcast@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" + integrity sha512-eI3yqf9YEqyGl9PCNTR46MGvDylGtaHjalcz6Q3fAPnP/PhpKkkve52vFdfGpwp4VUvK6LUr4TQN+2stCrEwTg== brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1239,24 +1494,28 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: safe-buffer "^5.0.1" browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -1264,6 +1523,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1276,34 +1536,48 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" +browserslist@^4.3.4: + version "4.6.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.2.tgz#574c665950915c2ac73a4594b8537a9eba26203f" + integrity sha512-2neU/V0giQy9h3XMPwLhEY3+Ao0uHSwHvU8Q1Ea6AgLVL1sXbX3dzPrJ8NWe5Hi4PoTkCYXOtVR9rfRLI0J/8Q== dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" + caniuse-lite "^1.0.30000974" + electron-to-chromium "^1.3.150" + node-releases "^1.1.23" -browserslist@^2.1.2: - version "2.11.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" - dependencies: - caniuse-lite "^1.0.30000792" - electron-to-chromium "^1.3.30" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof-polyfill@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" + integrity sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8= buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1312,22 +1586,47 @@ buffer@^4.3.0: buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1339,98 +1638,55 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000811" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000811.tgz#19efb9238393d40078332c34485c818d641c4305" - -caniuse-lite@^1.0.30000792: - version "1.0.30000811" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000811.tgz#0b6e40f2efccc27bd3cb52f91ee7ca4673d77d10" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" +camelcase@^5.0.0, camelcase@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chain-function@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" +caniuse-lite@^1.0.30000974: + version "1.0.30000974" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000974.tgz#b7afe14ee004e97ce6dc73e3f878290a12928ad8" + integrity sha512-xc3rkNS/Zc3CmpMKuczWEdY2sZgx09BkAxfvkxlAEBTqcMHeL8QnPqhKse+5sRTi3nrw2pJwToD2WvKn1Uhvww== chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.1.0, chalk@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -1439,279 +1695,336 @@ chalk@^2.1.0, chalk@^2.3.1: change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== dependencies: anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" + async-each "^1.0.1" + braces "^2.3.2" glob-parent "^3.1.0" - inherits "^2.0.1" + inherits "^2.0.3" is-binary-path "^1.0.0" is-glob "^4.0.0" - normalize-path "^2.1.1" + normalize-path "^3.0.0" path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - fsevents "^1.0.0" + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +chrome-trace-event@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - dependencies: - chalk "^1.1.3" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" -classnames@2.2.5, classnames@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" +classnames@^2.2.5, classnames@^2.2.6, classnames@~2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + string-width "^2.1.1" + strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -clone@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: - q "^1.1.2" + mimic-response "^1.0.0" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" - dependencies: - color-name "^1.1.1" - -color-name@^1.0.0, color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.0.0" + color-name "1.1.3" -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" +color-convert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.0.tgz#9851ac61cc0d3898a8a3088650d5bf447bf69d97" + integrity sha512-hzTicsCJIHdxih9+2aLR1tNGZX5qSJGRHDPVwSY26tVrEf55XNajLOBWz2UuWSIergszA09/bqnOiHyqx9fxQg== dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" + color-name "~1.1.4" -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colors@^1.1.2, colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" +colors@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== -commander@^2.11.0: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@^2.11.0, commander@^2.15.1, commander@^2.19.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +compressible@~2.0.16: + version "2.0.17" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" + integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== dependencies: - mime-db ">= 1.33.0 < 2" + mime-db ">= 1.40.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.16" debug "2.6.9" - on-headers "~1.0.1" - safe-buffer "5.1.1" + on-headers "~1.0.2" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: + buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + connect-history-api-fallback@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +convert-source-map@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.6.5: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== -core-js@^2.4.0, core-js@^2.5.0: +core-js@~2.5.1: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^2.0.0" + md5.js "^1.3.4" + ripemd160 "^2.0.1" sha.js "^2.4.0" create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -1720,27 +2033,35 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1754,262 +2075,241 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - -css-loader@^0.28.9: - version "0.28.10" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - cssnano "^3.10.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.1.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" +css-loader@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-2.1.1.tgz#d8254f72e412bb2238bb44dd674ffbef497333ea" + integrity sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w== + dependencies: + camelcase "^5.2.0" + icss-utils "^4.1.0" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.14" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^2.0.6" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^2.0.0" postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" - dependencies: - cssesc "^0.1.0" - fastparse "^1.1.1" - regexpu-core "^1.0.0" + schema-utils "^1.0.0" css-vendor@^0.3.8: version "0.3.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" + integrity sha1-ZCHP0wNM5mT+dnOXL9ARn8KJQfo= dependencies: is-in-browser "^1.0.2" -cssesc@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" - -cssnano@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - dependencies: - clap "^1.0.9" - source-map "^0.5.3" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^1.6.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-1.8.2.tgz#2c0f16da08b99f13fe7fbb242e87d1a19dbe77a7" +csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2: + version "2.6.5" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.5.tgz#1cd1dff742ebf4d7c991470ae71e12bb6751e034" + integrity sha512-JsTaiksRsel5n7XwqPAfB0l3TFKdpjW/kgAELf9vrb5adGA7UCPLajKK5s3nFrcFm3Rkyp/Qkgl73ENc1UY3cA== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= d3-array@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + version "1.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" + integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== d3-collection@1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== d3-color@1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f" + integrity sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw== d3-format@1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562" + integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ== -d3-interpolate@1, d3-interpolate@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" +d3-interpolate@1, d3-interpolate@~1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" + integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w== dependencies: d3-color "1" d3-path@1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + version "1.0.7" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8" + integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA== -d3-scale@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed" +d3-scale@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.1.2.tgz#4e932b7b60182aee9073ede8764c98423e5f9a94" + integrity sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q== dependencies: d3-array "^1.2.0" d3-collection "1" - d3-color "1" d3-format "1" d3-interpolate "1" d3-time "1" d3-time-format "2" -d3-shape@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" +d3-shape@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.3.tgz#3dad9b593e7297adac19b1f34a6821940968d7d6" + integrity sha512-mdrQ+V3jdEAa5k9clSEhCNFtq+pdky25PBGjocUgAI0AUbu/Esq4x6bdFcjkNura87Wqp1pd3dfZh6uJ+XojlA== dependencies: d3-path "1" d3-time-format@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + version "2.1.3" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b" + integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA== dependencies: d3-time "1" d3-time@1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -damerau-levenshtein@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + version "1.0.11" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.11.tgz#1d831a3e25cd189eb256c17770a666368762bbce" + integrity sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" +damerau-levenshtein@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" + integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +debounce@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== + dependencies: + xregexp "4.0.0" + +decimal.js-light@^2.4.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.0.tgz#ca7faf504c799326df94b0ab920424fdfc125348" + integrity sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.2.0: +decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312" +deepmerge@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e" + integrity sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow== -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -2018,25 +2318,20 @@ del@^3.0.0: pify "^3.0.0" rimraf "^2.2.8" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -2044,24 +2339,27 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -2070,10 +2368,12 @@ diffie-hellman@^5.0.0: dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= dns-packet@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -2081,55 +2381,95 @@ dns-packet@^1.3.1: dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= dependencies: buffer-indexof "^1.0.0" doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.2, doctrine@^2.1.0: +doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" -dom-helpers@^3.2.0, dom-helpers@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-helpers@^3.2.1, dom-helpers@^3.3.1, dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: - jsbn "~0.1.0" + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +editorconfig@^0.15.2: + version "0.15.3" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" + integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== + dependencies: + commander "^2.19.0" + lru-cache "^4.1.5" + semver "^5.6.0" + sigmund "^1.0.1" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.34" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed" +electron-to-chromium@^1.3.150: + version "1.3.157" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.157.tgz#6211d69e8c4ee18df8c84e74e8644bcafc09486c" + integrity sha512-vxGi3lOGqlupuogZxJOMfu+Q1vaOlG6XbsblWw8XnUZSr/ptbt3D6jhHT5LJPZuFUpKhbEo1u4QipivSory1Kg== elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2139,154 +2479,171 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -encodeurl@~1.0.1: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" -enhanced-resolve@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" + integrity sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59" + integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~6.1.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" - object-assign "^4.0.1" - tapable "^0.2.7" + tapable "^1.0.0" -errno@^0.1.3: +errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.7.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.39" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" +es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" -es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: - d "1" - es5-ext "~0.10.14" + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" + es6-promise "^4.0.3" escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" - dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-airbnb-base@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" +eslint-config-airbnb-base@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" + integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== dependencies: eslint-restricted-globals "^0.1.1" + object.assign "^4.1.0" + object.entries "^1.0.4" -eslint-config-airbnb@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" +eslint-config-airbnb@^17.0.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz#3964ed4bc198240315ff52030bf8636f42bc4732" + integrity sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw== dependencies: - eslint-config-airbnb-base "^12.1.0" + eslint-config-airbnb-base "^13.1.0" + object.assign "^4.1.0" + object.entries "^1.0.4" -eslint-import-resolver-node@^0.3.1: +eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" -eslint-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.0.0.tgz#d136619b5c684e36531ffc28c60a56e404608f5d" +eslint-loader@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.1.2.tgz#453542a1230d6ffac90e4e7cb9cadba9d851be68" + integrity sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg== dependencies: loader-fs-cache "^1.0.0" loader-utils "^1.0.2" @@ -2294,175 +2651,226 @@ eslint-loader@^2.0.0: object-hash "^1.1.4" rimraf "^2.6.1" -eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" +eslint-module-utils@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" + integrity sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw== dependencies: debug "^2.6.8" - pkg-dir "^1.0.0" + pkg-dir "^2.0.0" -eslint-plugin-flowtype@^2.41.0: - version "2.46.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.1.tgz#c4f81d580cd89c82bc3a85a1ccf4ae3a915143a4" +eslint-plugin-es@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" + integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== dependencies: - lodash "^4.15.0" + eslint-utils "^1.3.0" + regexpp "^2.0.1" -eslint-plugin-import@^2.8.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" +eslint-plugin-flowtype@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.4.2.tgz#55475e10b05fd714d60bceebbbed596cb8706b16" + integrity sha512-sv6O6fiN3dIwhU4qRxfcyIpbKGVvsxwIQ6vgBLudpQKjH1rEyEFEOjGzGEUBTQP9J8LdTZm37OjiqZ0ZeFOa6g== + dependencies: + lodash "^4.17.11" + +eslint-plugin-import@2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" + integrity sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A== dependencies: - builtin-modules "^1.1.1" contains-path "^0.1.0" - debug "^2.6.8" + debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" read-pkg-up "^2.0.0" + resolve "^1.9.0" -eslint-plugin-jsx-a11y@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" +eslint-plugin-jsx-a11y@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" + integrity sha512-cjN2ObWrRz0TTw7vEcGQrx+YltMvZoOEx4hWU8eEERDnBIU00OTq7Vr+jA7DFKxiwLNv4tTh5Pq2GUNEa8b6+w== dependencies: - aria-query "^0.7.0" + aria-query "^3.0.0" array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^2.0.0" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.0.1" -eslint-plugin-react@^7.5.1: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" +eslint-plugin-node@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz#55ae3560022863d141fa7a11799532340a685964" + integrity sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w== dependencies: - doctrine "^2.0.2" - has "^1.0.1" + eslint-plugin-es "^1.3.1" + eslint-utils "^1.3.1" + ignore "^5.0.2" + minimatch "^3.0.4" + resolve "^1.8.1" + semver "^5.5.0" + +eslint-plugin-promise@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2" + integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg== + +eslint-plugin-react@7.12.4: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" + integrity sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= -eslint-scope@^3.7.1, eslint-scope@~3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^4.0.0, eslint-scope@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-utils@^1.3.0, eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^4.16.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" +eslint@5.15.1: + version "5.15.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.1.tgz#8266b089fd5391e0009a047050795b1d73664524" + integrity sha512-NTcm6vQ+PTgN3UBsALw5BMhgO6i5EpIjQF/Xb5tIh3sk9QhrFafujUOczGz4J24JBlzWclSB9Vmx8d+9Z6bFCg== dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" + ajv "^6.9.1" chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^4.0.2" + eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" + espree "^5.0.1" + esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + inquirer "^6.2.2" + js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.11" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^7.0.0" progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" + regexpp "^2.0.1" + semver "^5.5.1" strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" + strip-json-comments "^2.0.1" + table "^5.2.3" + text-table "^0.2.0" -espree@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" + integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + acorn "^6.0.7" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -esutils@^2.0.2: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" +eventemitter3@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -events@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== -eventsource@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== dependencies: - original ">=0.0.5" + original "^1.0.0" evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -2470,6 +2878,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2479,15 +2888,23 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: - is-posix-bracket "^0.1.0" + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -2497,81 +2914,77 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: - fill-range "^2.1.0" + homedir-polyfill "^1.0.1" express@^4.16.2: - version "4.16.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - accepts "~1.3.4" + accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" + body-parser "1.19.0" + content-disposition "0.5.3" content-type "~1.0.4" - cookie "0.3.1" + cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.1" - encodeurl "~1.0.1" + depd "~1.1.2" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.0" + finalhandler "~1.1.2" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" - parseurl "~1.3.2" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.2" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.1" - serve-static "1.13.1" - setprototypeof "1.1.0" - statuses "~1.3.1" - type-is "~1.6.15" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" +external-editor@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" + chardet "^0.7.0" + iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -2582,45 +2995,39 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" -faye-websocket@~0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" +faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" -fbjs@^0.8.1, fbjs@^0.8.16: - version "0.8.16" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" +fbjs@^0.8.1: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2628,82 +3035,85 @@ fbjs@^0.8.1, fbjs@^0.8.16: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.9" + ua-parser-js "^0.7.18" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^2.0.1" -file-loader@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" +file-loader@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== dependencies: loader-utils "^1.0.2" - schema-utils "^0.4.5" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + schema-utils "^1.0.0" -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" +filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= dependencies: commondir "^1.0.1" mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" + make-dir "^2.0.0" + pkg-dir "^3.0.0" find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -2711,150 +3121,185 @@ find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + locate-path "^3.0.0" -flatten@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" -flow-bin-loader@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flow-bin-loader/-/flow-bin-loader-1.0.3.tgz#1b95260437bea24786a5abc022ef3efa02df77c5" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" -flow-bin@^0.63.1: - version "0.63.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.63.1.tgz#ab00067c197169a5fb5b4996c8f6927b06694828" +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== -flow-typed@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.3.0.tgz#0f8604faab60691b885024e16ec0e3256e3b680e" - dependencies: - babel-polyfill "^6.26.0" - colors "^1.1.2" - fs-extra "^5.0.0" - github "0.2.4" - glob "^7.1.2" - got "^7.1.0" - md5 "^2.1.0" +flow-bin-loader@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flow-bin-loader/-/flow-bin-loader-1.0.3.tgz#1b95260437bea24786a5abc022ef3efa02df77c5" + integrity sha512-JgbydYGf7/Di8Jq4Az3+58g8lreabVdzI3IZQFICpQSH+yK8Uhgc1+Os5rnFBUfAQuhx3imUjpfOjaTLlz8M5A== + +flow-bin@0.94.0: + version "0.94.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.94.0.tgz#b5d58fe7559705b73a18229f97edfc3ab6ffffcb" + integrity sha512-DYF7r9CJ/AksfmmB4+q+TyLMoeQPRnqtF1Pk7KY3zgfkB/nVuA3nXyzqgsIPIvnMSiFEXQcFK4z+iPxSLckZhQ== + +flow-typed@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.5.2.tgz#967e83c762a1cbfcd52eebaece1ade77944f1714" + integrity sha512-RrHRmp/Bof1vDG1AqBcwuyxMMoezkl7TxvimA5c6GKZOOb1fkkRZ81S+1qAuvb4rUka5fLlFomKCnpMnCsgP+g== + dependencies: + "@babel/polyfill" "^7.0.0" + "@octokit/rest" "^15.12.1" + colors "^1.3.2" + fs-extra "^7.0.0" + glob "^7.1.3" + got "^8.3.2" + md5 "^2.2.1" mkdirp "^0.5.1" rimraf "^2.6.2" - semver "^5.5.0" - table "^4.0.2" + semver "^5.5.1" + table "^5.0.2" through "^2.3.8" - unzip "^0.1.11" - which "^1.3.0" - yargs "^4.2.0" - -font-awesome@^4.3.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + unzipper "^0.9.3" + which "^1.3.1" + yargs "^12.0.2" -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - for-in "^1.0.1" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + inherits "^2.0.3" + readable-stream "^2.3.6" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + debug "^3.2.6" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fp-ts@^1.0.0, fp-ts@^1.0.1: + version "1.18.2" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.18.2.tgz#b9a7025174e1a59bc43b485b3a0ca6f78e371d01" + integrity sha512-kznerusCuG5dUt0bH6eiQHVp2fstPiSlyzGb//rYgMMxCuromWEoVS0riH++86vyJm9Nv1B+pbe6udDx1tqjfA== fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" +from2@^2.1.0, from2@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" + minipass "^2.2.1" -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -"fstream@>= 0.1.30 < 1": - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - graceful-fs "~3.0.2" - inherits "~2.0.0" - mkdirp "0.5" - rimraf "2" + nan "^2.12.1" + node-pre-gyp "^0.12.0" -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2866,56 +3311,39 @@ gauge@~2.7.3: wide-align "^1.1.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-stream@^3.0.0: +get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -github@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" - dependencies: - mime "^1.2.11" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.3, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2924,39 +3352,43 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global@~4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: - min-document "^2.19.0" - process "~0.5.1" - -globals@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" -globals@^11.1.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" +global@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -2964,85 +3396,93 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" +got@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: - decompress-response "^3.2.0" + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" duplexer3 "^0.1.4" get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" isurl "^1.0.0-alpha5" lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - -handle-thing@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" +handlebars@^4.0.11: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + isarray "2.0.1" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -3051,6 +3491,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -3059,198 +3500,261 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - inherits "^2.0.1" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + minimalistic-assert "^1.0.1" hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - hoist-non-react-statics@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" +hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" - html-entities@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.6.2, http-errors@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" +http-errors@1.7.2, http-errors@~1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: - depd "1.1.1" + depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + version "0.5.0" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" + integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: - http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" + agent-base "4" + debug "3.1.0" -http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" +http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +http-proxy@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -hyphenate-style-name@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" +https-proxy-agent@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" -iconv-lite@0.4.19, iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + +hyphenate-style-name@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -iconv-lite@~0.4.13: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" +icss-utils@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== dependencies: - postcss "^6.0.1" + postcss "^7.0.14" ieee754@^1.1.4: - version "1.1.8" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: - pkg-dir "^2.0.0" + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" + integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== + +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" +indefinite-observable@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/indefinite-observable/-/indefinite-observable-1.0.2.tgz#0a328793ab2385d4b9dca23eaab4afe6936a73f8" + integrity sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA== dependencies: - repeating "^2.0.0" + symbol-observable "1.2.0" indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -3258,121 +3762,176 @@ inflight@^1.0.4: inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" +inquirer@^6.2.2: + version "6.3.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" + integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" + ansi-escapes "^3.2.0" + chalk "^2.4.2" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.11" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^6.4.0" string-width "^2.1.0" - strip-ansi "^4.0.0" + strip-ansi "^5.1.0" through "^2.3.6" -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" +inspectpack@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/inspectpack/-/inspectpack-4.2.1.tgz#8e1893feb5293458c9d587cb2a8ec70be2e79dd4" + integrity sha512-3kraYZ9tfxNYXzBsRTNvluj1oJKlJ6wkD+TZ6Vk9CNI1SZcQ5H/9yskuq1Yzha1Cn/wEX/Qw+g+tSLIP5iGXhg== dependencies: - meow "^3.3.0" + chalk "^2.4.0" + io-ts "^1.0.5" + io-ts-reporters "^0.0.20" + pify "^3.0.0" + semver-compare "^1.0.0" + yargs "^11.0.0" -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" +internal-ip@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invariant@^2.2.0, invariant@^2.2.2: +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +io-ts-reporters@^0.0.20: + version "0.0.20" + resolved "https://registry.yarnpkg.com/io-ts-reporters/-/io-ts-reporters-0.0.20.tgz#2b8cbb6a2bc4562dae6917a3a413fa2c9851a644" + integrity sha512-ZGyPkto96U8exipqA915ZqxIJsaFLavgZIQOEgg4Pa8qgq1Hl9ZKBtN708ZXPzlAGR/jxofrD4QNT8SHowIDVA== + dependencies: + fp-ts "^1.0.1" + io-ts "^1.0.2" + +io-ts@^1.0.2, io-ts@^1.0.5: + version "1.8.6" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.8.6.tgz#43930e025b88bbb317cb193bd9af784322a6fed6" + integrity sha512-0V0gbEfW5FnlEL++hO+j1cbxSvhH3f/i5Puz5AjmN6Q071vJONWTuOHttMSe60gi4DBHBTd2eHbSnHv37ptTnQ== + dependencies: + fp-ts "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" +ipaddr.js@1.9.0, ipaddr.js@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -3381,465 +3940,389 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-in-browser@^1.0.2, is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-retry-allowed@^1.0.0: +is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + has-symbols "^1.0.0" -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -js-base64@^2.1.9: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" +js-beautify@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f" + integrity sha512-P0skmY4IDjfLiVrx+GLDeme8w5G0R1IGXgccVU5HP2VM3lRblH7qN2LTea5vZAxrDjpZBD0Jv+ahpjwVcbz/rw== + dependencies: + config-chain "^1.1.12" + editorconfig "^0.15.2" + glob "^7.1.3" + mkdirp "~0.5.0" + nopt "~4.0.1" -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" +js-yaml@^3.12.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" - esprima "^2.6.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + esprima "^4.0.0" jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-loader@^0.5.4: - version "0.5.7" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json-stable-stringify@^1.0.1: +json5@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json3@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + minimist "^1.2.0" -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jss-camel-case@^6.0.0, jss-camel-case@^6.1.0: +jss-camel-case@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44" + integrity sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ== dependencies: hyphenate-style-name "^1.0.2" -jss-compose@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" - dependencies: - warning "^3.0.0" - jss-default-unit@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" - -jss-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.1.0.tgz#b1ad74ec18631f34f65a2124fcfceb6400610e3d" - -jss-extend@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.2.0.tgz#4af09d0b72fb98ee229970f8ca852fec1ca2a8dc" - dependencies: - warning "^3.0.0" + integrity sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg== jss-global@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" + integrity sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q== jss-nested@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" + integrity sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA== dependencies: warning "^3.0.0" -jss-preset-default@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.3.0.tgz#7bc91b0b282492557d36ed4e5c6d7c8cb3154bb8" - dependencies: - jss-camel-case "^6.1.0" - jss-compose "^5.0.0" - jss-default-unit "^8.0.2" - jss-expand "^5.1.0" - jss-extend "^6.2.0" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-template "^1.0.1" - jss-vendor-prefixer "^7.0.0" - jss-props-sort@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" - -jss-template@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.1.tgz#09aed9d86cc547b07f53ef355d7e1777f7da430a" - dependencies: - warning "^3.0.0" + integrity sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g== jss-vendor-prefixer@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" + integrity sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA== dependencies: css-vendor "^0.3.8" -jss@^9.3.2, jss@^9.3.3: - version "9.8.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.0.tgz#77830def563870103f8671ed31ce3a3d2f32aa2b" +jss@^9.8.7: + version "9.8.7" + resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05" + integrity sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ== dependencies: is-in-browser "^1.1.3" symbol-observable "^1.1.0" warning "^3.0.0" -jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" +jsx-ast-utils@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz#0ee4e2c971fb9601c67b5641b71be80faecf0b36" + integrity sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA== dependencies: array-includes "^3.0.3" -keycode@^2.1.9: - version "2.1.9" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" killable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" - dependencies: - set-getter "^0.1.0" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -3847,170 +4330,150 @@ load-json-file@^2.0.0: strip-bom "^3.0.0" loader-fs-cache@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== dependencies: find-cache-dir "^0.1.1" mkdirp "0.5.1" loader-runner@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== dependencies: - big.js "^3.1.3" + big.js "^5.2.2" emojis-list "^2.0.0" - json5 "^0.5.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" +lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4, lodash@~4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.3.0, lodash@~4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +loglevel@^1.4.1: + version "1.6.3" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" + integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== -lodash@^4.17.4, lodash@^4.2.0: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" -loglevel@^1.4.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= -longest@^1.0.1: +lowercase-keys@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" +lru-cache@^4.0.1, lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: - js-tokens "^3.0.0" + pseudomap "^1.0.2" + yallist "^2.1.2" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" + yallist "^3.0.2" -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" +macos-release@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" + integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + pify "^4.0.1" + semver "^5.6.0" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== dependencies: - pify "^3.0.0" + p-defer "^1.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -"match-stream@>= 0.0.2 < 1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" - -material-ui-icons@^1.0.0-beta.17: - version "1.0.0-beta.35" - resolved "https://registry.yarnpkg.com/material-ui-icons/-/material-ui-icons-1.0.0-beta.35.tgz#f795fafa385918ef7c88ee382e5e5bf4401f008c" - dependencies: - recompose "^0.26.0" - -material-ui@^1.0.0-beta.30: - version "1.0.0-beta.35" - resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-1.0.0-beta.35.tgz#eeac6be307c0469943c7686e5c6bd4eaa6b1b563" - dependencies: - "@types/jss" "^9.3.0" - "@types/react-transition-group" "^2.0.6" - babel-runtime "^6.26.0" - brcast "^3.0.1" - classnames "^2.2.5" - deepmerge "^2.0.1" - dom-helpers "^3.2.1" - hoist-non-react-statics "^2.3.1" - jss "^9.3.3" - jss-camel-case "^6.0.0" - jss-default-unit "^8.0.2" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-vendor-prefixer "^7.0.0" - keycode "^2.1.9" - lodash "^4.2.0" - normalize-scroll-left "^0.1.2" - prop-types "^15.6.0" - react-event-listener "^0.5.1" - react-jss "^8.1.0" - react-popper "^0.8.0" - react-scrollbar-size "^2.0.2" - react-transition-group "^2.2.1" - recompose "^0.26.0" - scroll "^2.0.3" - warning "^3.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" -md5@^2.1.0: +md5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" + integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk= dependencies: charenc "~0.0.1" crypt "~0.0.1" @@ -4019,64 +4482,46 @@ md5@^2.1.0: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.4: - version "3.1.9" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -4090,93 +4535,183 @@ micromatch@^3.1.4: object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" - to-regex "^3.0.1" + to-regex "^3.0.2" miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +mime-db@1.40.0, "mime-db@>= 1.40.0 < 2": + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== dependencies: - mime-db "~1.33.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + mime-db "1.40.0" -mime@^1.2.11, mime@^1.4.1, mime@^1.5.0: +mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.0.3, mime@^2.4.2: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= dependencies: dom-walk "^0.1.0" -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.5: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" +most@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/most/-/most-1.7.3.tgz#406c31a66d73aa16957816fdf96965e27df84f1a" + integrity sha512-mk68SM/ptK8WSo3l03raXcWy02Hl7jbzxVozMuvyYxohn4yteh2THhl3+XABF5cunWE8eXHAsLbv+RCJI5y+jg== + dependencies: + "@most/multicast" "^1.2.5" + "@most/prelude" "^1.4.0" + symbol-observable "^1.0.2" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= multicast-dns@^6.0.1: version "6.2.3" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== dependencies: dns-packet "^1.3.1" thunky "^1.0.2" @@ -4184,21 +4719,23 @@ multicast-dns@^6.0.1: mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.3.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -4206,36 +4743,62 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natives@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.1.tgz#011acce1f7cbd87f7ba6b3093d6cd9392be1c574" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" -neo-async@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +neo-blessed@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/neo-blessed/-/neo-blessed-0.2.0.tgz#30f9495fdd104494402b62c6273a9c9b82de4f2b" + integrity sha512-C2kC4K+G2QnNQFXUIxTQvqmrdSIzGTX1ZRKeDW6ChmvPRw8rTkTEJzbEQHiHy06d36PCl/yMOCjquCRV8SpSQw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-fetch@^2.1.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" + integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== + +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" + integrity sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -4244,7 +4807,7 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" path-browserify "0.0.0" @@ -4258,165 +4821,242 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" + util "^0.11.0" vm-browserify "0.0.4" -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" -nopt@^4.0.1: +node-releases@^1.1.23: + version "1.1.23" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.23.tgz#de7409f72de044a2fa59c097f436ba89c39997f0" + integrity sha512-uq1iL79YjfYC0WXoHbC/z28q/9pOl8kSHaXdWmAAc8No+bDwqkZbzIJz55g/MUsPgSGm9LZ7QSUbzTcH5tz47w== + dependencies: + semver "^5.3.0" + +nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-scroll-left@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa" + integrity sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg== -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-hash@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.entries@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" -obuf@^1.0.0, obuf@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" -on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.3: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opn@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== dependencies: is-wsl "^1.1.0" +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -4425,182 +5065,272 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: - url-parse "1.0.x" + url-parse "^1.4.3" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-name@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" + integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== + dependencies: + macos-release "^2.2.0" + windows-release "^3.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" + safe-buffer "^5.1.1" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path@^0.12.7: version "0.12.7" resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= dependencies: process "^0.11.1" util "^0.10.3" pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -4608,684 +5338,525 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -popper.js@^1.12.9: - version "1.12.9" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.9.tgz#0dfbc2dff96c451bb332edcfcfaaf566d331d5b3" - -portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" - dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" - dependencies: - postcss "^5.0.4" - uniqid "^4.0.0" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" - dependencies: - postcss "^6.0.1" + find-up "^1.0.0" -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + find-up "^2.1.0" -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" + find-up "^3.0.0" -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" +popper.js@^1.14.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" + integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" +portfinder@^1.0.9: + version "1.0.20" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.20.tgz#bea68632e54b2e13ab7b0c4775e9b41bf270e44a" + integrity sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw== dependencies: - postcss "^5.0.5" + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" + postcss "^7.0.5" -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" +postcss-modules-local-by-default@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz#dd9953f6dd476b5fd1ef2d8830c8929760b56e63" + integrity sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA== dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-value-parser "^3.3.1" -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== dependencies: - postcss "^5.0.4" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" +postcss-modules-values@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz#479b46dc0c5ca3dc7fa5270851836b9ec7152f64" + integrity sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w== dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" + icss-replace-symbols "^1.1.0" + postcss "^7.0.6" -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" +postcss-selector-parser@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== dependencies: - flatten "^1.0.2" + cssesc "^3.0.0" indexes-of "^1.0.1" uniq "^1.0.1" -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" - -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" +postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@^6.0.1: - version "6.0.19" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" +postcss@^7.0.14, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.17" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" + integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== dependencies: - chalk "^2.3.1" + chalk "^2.4.2" source-map "^0.6.1" - supports-color "^5.2.0" + supports-color "^6.1.0" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0, prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -private@^0.1.6, private@^0.1.8: +private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@^0.11.1, process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -process@~0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" +prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +prop-types@~15.6.0: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== dependencies: - fbjs "^0.8.16" loose-envify "^1.3.1" object-assign "^4.1.1" -proxy-addr@~2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== dependencies: forwarded "~0.1.2" - ipaddr.js "1.6.0" + ipaddr.js "1.9.0" prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" + safe-buffer "^5.1.2" -"pullstream@>= 0.4.1 < 1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== dependencies: + decode-uri-component "^0.2.0" object-assign "^4.1.0" strict-uri-encode "^1.0.0" querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== -raf@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" -rafl@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" - dependencies: - global "~4.3.0" - -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.0.3, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.1.7: - version "1.2.5" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.2.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.0.tgz#099f067dd5827ce36a29eaf9a6cdc7cbf6216b1e" +react-dom@16.8.4: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.4.tgz#1061a8e01a2b3b0c8160037441c3bf00a0e3bc48" + integrity sha512-Ob2wK7XG2tUDt7ps7LtLzGYYB6DXMCLj0G5fO6WeEICtT4/HdpOi7W/xLzZnR6RCG1tYza60nMdqtxzA8FaPJQ== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" + prop-types "^15.6.2" + scheduler "^0.13.4" -react-event-listener@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.3.tgz#a8b492596ad601865314fcc2c18cb87b6ce3876e" +react-event-listener@^0.6.2: + version "0.6.6" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.6.6.tgz#758f7b991cad9086dd39fd29fad72127e1d8962a" + integrity sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw== dependencies: - babel-runtime "^6.26.0" - fbjs "^0.8.16" + "@babel/runtime" "^7.2.0" prop-types "^15.6.0" - warning "^3.0.0" - -react-fa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-fa/-/react-fa-5.0.0.tgz#d571732856c6cb2c155c46daef018ba67a75b973" - dependencies: - font-awesome "^4.3.0" - prop-types "^15.5.8" + warning "^4.0.1" -react-jss@^8.1.0: - version "8.3.3" - resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.3.3.tgz#677a57569d3e4f5099fcdeafeddd8d2c62ab5977" +react-hot-loader@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.8.0.tgz#0b7c7dd9407415e23eb8246fdd28b0b839f54cb6" + integrity sha512-HY9F0vITYSVmXhAR6tPkMk240nxmoH8+0rca9iO2B82KVguiCiBJkieS0Wb4CeSIzLWecYx3iOcq8dcbnp0bxA== dependencies: - hoist-non-react-statics "^2.3.1" - jss "^9.3.2" - jss-preset-default "^4.3.0" - prop-types "^15.6.0" - theming "^1.3.0" + fast-levenshtein "^2.0.6" + global "^4.3.0" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.11" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.0.2" + source-map "^0.7.3" + +react-is@^16.6.3, react-is@^16.7.0, react-is@^16.8.1: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== + +react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-popper@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.8.2.tgz#092095ff13933211d3856d9f325511ec3a42f12c" +react-resize-detector@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" + integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ== dependencies: - popper.js "^1.12.9" + lodash.debounce "^4.0.8" + lodash.throttle "^4.1.1" prop-types "^15.6.0" + resize-observer-polyfill "^1.5.0" -react-resize-detector@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-1.1.0.tgz#4a9831fa3caad32230478dd0185cbd2aa91a5ebf" - dependencies: - prop-types "^15.5.10" - -react-scrollbar-size@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754" +react-smooth@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.2.tgz#f7a2d932ece8db898646078c3c97f3e9533e0486" + integrity sha512-pIGzL1g9VGAsRsdZQokIK0vrCkcdKtnOnS1gyB2rrowdLy69lNSWoIjCTWAfgbiYvria8tm5hEZqj+jwXMkV4A== dependencies: - babel-runtime "^6.26.0" + lodash "~4.17.4" prop-types "^15.6.0" - react-event-listener "^0.5.1" - stifle "^1.0.2" + raf "^3.4.0" + react-transition-group "^2.5.0" -react-smooth@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.0.tgz#b29dbebddddb06d21b5b08962167fb9eac1897d8" +react-transition-group@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.6.1.tgz#abf4a95e2f13fb9ba83a970a896fedbc5c4856a2" + integrity sha512-9DHwCy0aOYEe35frlEN68N9ut/THDQBLnVoQuKTvzF4/s3tk7lqkefCqxK2Nv96fOh6JXk6tQtliygk6tl3bQA== dependencies: - lodash "~4.17.4" - prop-types "^15.6.0" - raf "^3.2.0" - react-transition-group "^2.2.1" + dom-helpers "^3.3.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" -react-transition-group@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" +react-transition-group@^2.2.1, react-transition-group@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" + integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== dependencies: - chain-function "^1.0.0" - classnames "^2.2.5" - dom-helpers "^3.2.0" - loose-envify "^1.3.1" - prop-types "^15.5.8" - warning "^3.0.0" + dom-helpers "^3.4.0" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" -react@^16.2.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.4.0.tgz#402c2db83335336fba1962c08b98c6272617d585" +react@16.8.4: + version "16.8.4" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.4.tgz#fdf7bd9ae53f03a9c4cd1a371432c206be1c4768" + integrity sha512-0GQ6gFXfUH7aZcjGVymlPOASTuSjlQL4ZtVC5YKH+3JL6bBLCVO21DknzmaPlI90LN253ojj02nsapy+j7wIjg== dependencies: - fbjs "^0.8.16" loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + prop-types "^15.6.2" + scheduler "^0.13.4" read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@^2.2.9: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" + string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" +readable-stream@^3.0.6: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" -recharts-scale@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.3.2.tgz#dac7621714a4765d152cb2adbc30c73b831208c9" - -recharts@^1.0.0-beta.9: - version "1.0.0-beta.10" - resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.0.0-beta.10.tgz#d3cd15df6b7879d5968da3c942b5fcdaf2504fe1" +recharts-scale@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.2.tgz#b66315d985cd9b80d5f7d977a5aab9a305abc354" + integrity sha512-p/cKt7j17D1CImLgX2f5+6IXLbRHGUQkogIp06VUoci/XkhOQiGSzUrsD1uRmiI7jha4u8XNFOjkHkzzBPivMg== dependencies: - classnames "2.2.5" - core-js "2.5.1" - d3-interpolate "^1.1.5" - d3-scale "1.0.6" - d3-shape "1.2.0" - lodash "~4.17.4" - prop-types "^15.6.0" - react-resize-detector "1.1.0" - react-smooth "1.0.0" - recharts-scale "0.3.2" - reduce-css-calc "1.3.0" + decimal.js-light "^2.4.1" -recompose@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30" - dependencies: +recharts@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.5.0.tgz#ecb4f015cec5b1284294954b7906c7c2ec6e25be" + integrity sha512-bsKJRvh4NepPJlXoI4L9oRKhrv59W7fjs6qTqk6le9MFAywe8EYiW/t07RDQHBVIj6icb+UdSFsHxEo8c5AcTg== + dependencies: + classnames "~2.2.5" + core-js "~2.5.1" + d3-interpolate "~1.3.0" + d3-scale "~2.1.0" + d3-shape "~1.2.0" + lodash "~4.17.5" + prop-types "~15.6.0" + react-resize-detector "~2.3.0" + react-smooth "~1.0.0" + recharts-scale "^0.4.2" + reduce-css-calc "~1.3.0" + +"recompose@0.28.0 - 0.30.0": + version "0.30.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" + integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== + dependencies: + "@babel/runtime" "^7.0.0" change-emitter "^0.1.2" fbjs "^0.8.1" hoist-non-react-statics "^2.3.1" + react-lifecycles-compat "^3.0.2" symbol-observable "^1.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6: +reduce-css-calc@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" @@ -5294,159 +5865,159 @@ reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6: reduce-function-call@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= dependencies: balanced-match "^0.4.2" -regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerate-unicode-properties@^8.0.2: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-runtime@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" + integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" private "^0.1.6" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpu-core@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" +regexp-tree@^0.1.6: + version "0.1.10" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.10.tgz#d837816a039c7af8a8d64d7a7c3cf6a1d93450bc" + integrity sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ== -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpu-core@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" -resolve-from@^1.0.0: +resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" +resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -5454,114 +6025,133 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" +rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: - hash-base "^2.0.0" + hash-base "^3.0.0" inherits "^2.0.1" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: - rx-lite "*" + aproba "^1.1.1" -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rxjs@^6.4.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== + dependencies: + tslib "^1.9.0" -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@5.1.2, safe-buffer@>=5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@~1.2.1: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -schema-utils@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" +scheduler@^0.13.4: + version "0.13.6" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.6.tgz#466a4ec332467b31a91b9bf74e5347072e4cd889" + integrity sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ== dependencies: - ajv "^5.0.0" + loose-envify "^1.1.0" + object-assign "^4.1.1" -schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== dependencies: ajv "^6.1.0" + ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -scroll@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.3.tgz#0951b785544205fd17753bc3d294738ba16fc2ab" - dependencies: - rafl "~1.2.1" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + version "1.10.4" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" + integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== dependencies: - node-forge "0.7.1" + node-forge "0.7.5" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -send@0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" - depd "~1.1.1" + depd "~1.1.2" destroy "~1.0.4" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= dependencies: accepts "~1.3.4" batch "0.6.1" @@ -5571,32 +6161,25 @@ serve-index@^1.7.2: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.1" + parseurl "~1.3.3" + send "0.17.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - dependencies: - to-object-path "^0.3.0" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -5606,64 +6189,76 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" -"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.10" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +sigmund@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - dependencies: - readable-stream "~1.0.31" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -5672,12 +6267,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -5686,498 +6283,566 @@ snapdragon@^0.8.1: map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" - use "^2.0.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + +socket.io-client@2.2.0, socket.io-client@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" + integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.3.1" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" +socket.io-parser@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" + integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== dependencies: - hoek "2.x.x" + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" +socket.io@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b" + integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w== + dependencies: + debug "~4.1.0" + engine.io "~3.3.1" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.2.0" + socket.io-parser "~3.3.0" + +sockjs-client@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" + integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== dependencies: - debug "^2.6.6" - eventsource "0.1.6" - faye-websocket "~0.11.0" - inherits "^2.0.1" + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" json3 "^3.3.2" - url-parse "^1.1.8" + url-parse "^1.4.3" sockjs@0.3.19: version "0.3.19" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== dependencies: faye-websocket "^0.10.0" uuid "^3.0.1" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" +source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== dependencies: - source-map "^0.5.6" + buffer-from "^1.0.0" + source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + version "3.0.4" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" + integrity sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA== -spdy-transport@^2.0.18: - version "2.0.20" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: - debug "^2.6.8" - detect-node "^2.0.3" + debug "^4.1.0" + detect-node "^2.0.4" hpack.js "^2.1.6" - obuf "^1.1.1" - readable-stream "^2.2.9" - safe-buffer "^5.0.1" - wbuf "^1.7.2" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" -spdy@^3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" +spdy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" + integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== dependencies: - debug "^2.6.8" - handle-thing "^1.2.5" + debug "^4.1.0" + handle-thing "^2.0.0" http-deceiver "^1.2.7" - safe-buffer "^5.0.1" select-hose "^2.0.0" - spdy-transport "^2.0.18" + spdy-transport "^3.0.0" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" + figgy-pudding "^3.5.1" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2": - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -stifle@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.0.4.tgz#8b3bcdf52419b0a9c79e35adadce50123c1d8e99" +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== dependencies: inherits "~2.0.1" readable-stream "^2.0.2" +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + stream-http@^2.7.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.3.3" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@^1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: - safe-buffer "~5.1.0" + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - is-utf8 "^0.2.0" + ansi-regex "^4.1.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" - dependencies: - loader-utils "^1.0.2" - schema-utils "^0.3.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" +style-loader@0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== dependencies: - has-flag "^2.0.0" + loader-utils "^1.1.0" + schema-utils "^1.0.0" -supports-color@^5.1.0, supports-color@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - -symbol-observable@^1.0.4, symbol-observable@^1.1.0: +symbol-observable@1.2.0, symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" +table@^5.0.2, table@^5.2.3: + version "5.4.0" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.0.tgz#d772a3216e68829920a41a32c18eda286c95d780" + integrity sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw== dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" + ajv "^6.9.1" + lodash "^4.17.11" + slice-ansi "^2.1.0" + string-width "^3.0.0" -table@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + cacache "^11.3.2" + find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -theming@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - brcast "^3.0.1" - is-function "^1.0.1" - is-plain-object "^2.0.1" - prop-types "^15.5.8" + readable-stream "~2.3.6" + xtend "~4.0.1" through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= thunky@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" - -time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + version "1.0.3" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== -timed-out@^4.0.0: +timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= timers-browserify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== dependencies: setimmediate "^1.0.4" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex@^3.0.1: +to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@~2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" -type-is@~1.6.15: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -ua-parser-js@^0.7.9: - version "0.7.18" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" +ua-parser-js@^0.7.18: + version "0.7.20" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" + integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== -uglify-js@^2.8.29: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" + commander "~2.20.0" + source-map "~0.6.1" -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -uglifyjs-webpack-plugin@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" - webpack-sources "^1.0.1" + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -6187,119 +6852,179 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: - macaddress "^0.2.8" + unique-slug "^2.0.0" -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.1.0.tgz#5abfbcc036a1ba490cb941f8fd68c46d3669e8e4" + integrity sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q== + dependencies: + os-name "^3.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" -unzip@^0.1.11: - version "0.1.11" - resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" - dependencies: - binary ">= 0.3.0 < 1" - fstream ">= 0.1.30 < 1" - match-stream ">= 0.0.2 < 1" - pullstream ">= 0.4.1 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.1 < 2" +unzipper@^0.9.3: + version "0.9.15" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.9.15.tgz#97d99203dad17698ee39882483c14e4845c7549c" + integrity sha512-2aaUvO4RAeHDvOCuEtth7jrHFaCKTSXPqUkXwADaLBzGbgZGzUDccoEdJ5lW+3RmfpOZYNx0Rw6F6PUzM6caIA== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== -upath@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" +url-loader@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== dependencies: - loader-utils "^1.0.2" - mime "^1.4.1" - schema-utils "^0.3.0" + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: - prepend-http "^1.0.1" + prepend-http "^2.0.0" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" +url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== dependencies: - querystringify "0.0.x" - requires-port "1.0.x" + querystringify "^2.1.1" + requires-port "^1.0.0" -url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" - dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" -use@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" - dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" -util@0.10.3, util@^0.10.3: +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.0, uuid@^3.0.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-compile-cache@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -6307,179 +7032,242 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vm-browserify@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= dependencies: loose-envify "^1.0.0" -watchpack@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" +warning@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" -wbuf@^1.1.0, wbuf@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" -webpack-dev-middleware@1.12.2: - version "1.12.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" +webpack-cli@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.2.3.tgz#13653549adfd8ccd920ad7be1ef868bacc22e346" + integrity sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q== + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.0" + findup-sync "^2.0.0" + global-modules "^1.0.0" + import-local "^2.0.0" + interpret "^1.1.0" + loader-utils "^1.1.0" + supports-color "^5.5.0" + v8-compile-cache "^2.0.2" + yargs "^12.0.4" + +webpack-dashboard@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack-dashboard/-/webpack-dashboard-3.0.0.tgz#14b2374841efd9b28d0368f07a38bc1af43970e1" + integrity sha512-OtqccZJLR9CPbn86p6iwXWrseh944AkNj0AzrNvC7j4x+yHjmX1dlDpyo1f35GwY6F9eBWpMffUoGeWrFjLNUA== + dependencies: + commander "^2.15.1" + cross-spawn "^6.0.5" + filesize "^3.6.1" + handlebars "^4.0.11" + inspectpack "^4.0.0" + most "^1.7.3" + neo-blessed "^0.2.0" + socket.io "^2.1.1" + socket.io-client "^2.1.1" + +webpack-dev-middleware@^3.5.1: + version "3.7.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" + integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== dependencies: - memory-fs "~0.4.1" - mime "^1.5.0" - path-is-absolute "^1.0.0" - range-parser "^1.0.3" - time-stamp "^2.0.0" + memory-fs "^0.4.1" + mime "^2.4.2" + range-parser "^1.2.1" + webpack-log "^2.0.0" -webpack-dev-server@^2.11.1: - version "2.11.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" +webpack-dev-server@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz#1b45ce3ecfc55b6ebe5e36dab2777c02bc508c4e" + integrity sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw== dependencies: ansi-html "0.0.7" - array-includes "^3.0.3" bonjour "^3.5.0" chokidar "^2.0.0" compression "^1.5.2" connect-history-api-fallback "^1.3.0" - debug "^3.1.0" + debug "^4.1.1" del "^3.0.0" express "^4.16.2" html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" - import-local "^1.0.0" - internal-ip "1.2.0" + http-proxy-middleware "^0.19.1" + import-local "^2.0.0" + internal-ip "^4.2.0" ip "^1.1.5" killable "^1.0.0" loglevel "^1.4.1" opn "^5.1.0" portfinder "^1.0.9" + schema-utils "^1.0.0" selfsigned "^1.9.1" + semver "^5.6.0" serve-index "^1.7.2" sockjs "0.3.19" - sockjs-client "1.1.4" - spdy "^3.4.1" + sockjs-client "1.3.0" + spdy "^4.0.0" strip-ansi "^3.0.0" - supports-color "^5.1.0" - webpack-dev-middleware "1.12.2" - yargs "6.6.0" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.5.1" + webpack-log "^2.0.0" + yargs "12.0.2" -webpack-sources@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.1.tgz#5e923cf802ea2ace4fd5af1d3247368a633489b4" + integrity sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw== + dependencies: + lodash "^4.17.5" + +webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^3.10.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" - dependencies: - acorn "^5.0.0" - acorn-dynamic-import "^2.0.0" +webpack@4.29.6: + version "4.29.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.6.tgz#66bf0ec8beee4d469f8b598d3988ff9d8d90e955" + integrity sha512-MwBwpiE1BQpMDkbnUUaW6K8RFZjljJHArC6tWQJoFm0oQtfoSebtg4Y7/QHnJ/SddtjYLHaKGX64CFjG5rehJw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" - async "^2.1.2" - enhanced-resolve "^3.4.0" - escope "^3.6.0" - interpret "^1.0.0" - json-loader "^0.5.4" - json5 "^0.5.1" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" + micromatch "^3.1.8" mkdirp "~0.5.0" + neo-async "^2.5.0" node-libs-browser "^2.0.0" - source-map "^0.5.3" - supports-color "^4.2.1" - tapable "^0.2.7" - uglifyjs-webpack-plugin "^0.4.6" - watchpack "^1.4.0" - webpack-sources "^1.0.1" - yargs "^8.0.2" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + version "0.7.1" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.1.tgz#d58fa3269f51e480f5af051db7f5c5c1a1092d20" + integrity sha512-EC4YX5LEHtiB1XjaCh6++35jGaFmhT7687pySyCfPX9bB8Quw7+Fpx8gSCpkD78tPjalxuoOm8TtTz8K4dAQEg== dependencies: http-parser-js ">=0.4.0" + safe-buffer ">=5.1.1" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + string-width "^1.0.2 || 2" -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" +windows-release@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" + integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== + dependencies: + execa "^1.0.0" -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -6487,104 +7275,134 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" -xtend@^4.0.0: +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + dependencies: + async-limiter "~1.0.0" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== + +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" + camelcase "^4.1.0" -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: - camelcase "^3.0.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs@12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^3.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" -yargs@^4.2.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" +yargs@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== dependencies: - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" + find-up "^2.1.0" get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^2.4.1" + yargs-parser "^9.0.2" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" +yargs@^12.0.2, yargs@^12.0.4: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" + os-locale "^3.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= diff --git a/dashboard/dashboard.go b/dashboard/dashboard.go index 3ba92ac73eb0..b576293bc92b 100644 --- a/dashboard/dashboard.go +++ b/dashboard/dashboard.go @@ -18,8 +18,10 @@ package dashboard //go:generate yarn --cwd ./assets install //go:generate yarn --cwd ./assets build -//go:generate go-bindata -nometadata -o assets.go -prefix assets -nocompress -pkg dashboard assets/index.html assets/bundle.js +//go:generate yarn --cwd ./assets js-beautify -f bundle.js.map -r -w 1 +//go:generate go-bindata -nometadata -o assets.go -prefix assets -nocompress -pkg dashboard assets/index.html assets/bundle.js assets/bundle.js.map //go:generate sh -c "sed 's#var _bundleJs#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" +//go:generate sh -c "sed 's#var _bundleJsMap#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" //go:generate sh -c "sed 's#var _indexHtml#//nolint:misspell\\\n&#' assets.go > assets.go.tmp && mv assets.go.tmp assets.go" //go:generate gofmt -w -s assets.go @@ -27,16 +29,13 @@ import ( "fmt" "net" "net/http" - "runtime" "sync" "sync/atomic" "time" "io" - "github.com/elastic/gosigar" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rpc" @@ -45,31 +44,29 @@ import ( ) const ( - activeMemorySampleLimit = 200 // Maximum number of active memory data samples - virtualMemorySampleLimit = 200 // Maximum number of virtual memory data samples - networkIngressSampleLimit = 200 // Maximum number of network ingress data samples - networkEgressSampleLimit = 200 // Maximum number of network egress data samples - processCPUSampleLimit = 200 // Maximum number of process cpu data samples - systemCPUSampleLimit = 200 // Maximum number of system cpu data samples - diskReadSampleLimit = 200 // Maximum number of disk read data samples - diskWriteSampleLimit = 200 // Maximum number of disk write data samples + sampleLimit = 200 // Maximum number of data samples ) -var nextID uint32 // Next connection id - // Dashboard contains the dashboard internals. type Dashboard struct { - config *Config + config *Config // Configuration values for the dashboard + + listener net.Listener // Network listener listening for dashboard clients + conns map[uint32]*client // Currently live websocket connections + nextConnID uint32 // Next connection id + + history *Message // Stored historical data - listener net.Listener - conns map[uint32]*client // Currently live websocket connections - history *Message - lock sync.RWMutex // Lock protecting the dashboard's internals + lock sync.Mutex // Lock protecting the dashboard's internals + sysLock sync.RWMutex // Lock protecting the stored system data + peerLock sync.RWMutex // Lock protecting the stored peer data + logLock sync.RWMutex // Lock protecting the stored log data - logdir string + geodb *geoDB // geoip database instance for IP to geographical information conversions + logdir string // Directory containing the log files quit chan chan error // Channel used for graceful exit - wg sync.WaitGroup + wg sync.WaitGroup // Wait group used to close the data collector threads } // client represents active websocket connection with a remote browser. @@ -96,14 +93,14 @@ func New(config *Config, commit string, logdir string) *Dashboard { Version: fmt.Sprintf("v%d.%d.%d%s", params.VersionMajor, params.VersionMinor, params.VersionPatch, versionMeta), }, System: &SystemMessage{ - ActiveMemory: emptyChartEntries(now, activeMemorySampleLimit, config.Refresh), - VirtualMemory: emptyChartEntries(now, virtualMemorySampleLimit, config.Refresh), - NetworkIngress: emptyChartEntries(now, networkIngressSampleLimit, config.Refresh), - NetworkEgress: emptyChartEntries(now, networkEgressSampleLimit, config.Refresh), - ProcessCPU: emptyChartEntries(now, processCPUSampleLimit, config.Refresh), - SystemCPU: emptyChartEntries(now, systemCPUSampleLimit, config.Refresh), - DiskRead: emptyChartEntries(now, diskReadSampleLimit, config.Refresh), - DiskWrite: emptyChartEntries(now, diskWriteSampleLimit, config.Refresh), + ActiveMemory: emptyChartEntries(now, sampleLimit), + VirtualMemory: emptyChartEntries(now, sampleLimit), + NetworkIngress: emptyChartEntries(now, sampleLimit), + NetworkEgress: emptyChartEntries(now, sampleLimit), + ProcessCPU: emptyChartEntries(now, sampleLimit), + SystemCPU: emptyChartEntries(now, sampleLimit), + DiskRead: emptyChartEntries(now, sampleLimit), + DiskWrite: emptyChartEntries(now, sampleLimit), }, }, logdir: logdir, @@ -111,12 +108,10 @@ func New(config *Config, commit string, logdir string) *Dashboard { } // emptyChartEntries returns a ChartEntry array containing limit number of empty samples. -func emptyChartEntries(t time.Time, limit int, refresh time.Duration) ChartEntries { +func emptyChartEntries(t time.Time, limit int) ChartEntries { ce := make(ChartEntries, limit) for i := 0; i < limit; i++ { - ce[i] = &ChartEntry{ - Time: t.Add(-time.Duration(i) * refresh), - } + ce[i] = new(ChartEntry) } return ce } @@ -130,11 +125,12 @@ func (db *Dashboard) APIs() []rpc.API { return nil } // Start starts the data collection thread and the listening server of the dashboard. // Implements the node.Service interface. func (db *Dashboard) Start(server *p2p.Server) error { - log.Info("Starting dashboard") + log.Info("Starting dashboard", "url", fmt.Sprintf("http://%s:%d", db.config.Host, db.config.Port)) - db.wg.Add(2) - go db.collectData() + db.wg.Add(3) + go db.collectSystemData() go db.streamLogs() + go db.collectPeerData() http.HandleFunc("/", db.webHandler) http.Handle("/api", websocket.Handler(db.apiHandler)) @@ -160,7 +156,7 @@ func (db *Dashboard) Stop() error { } // Close the collectors. errc := make(chan error, 1) - for i := 0; i < 2; i++ { + for i := 0; i < 3; i++ { db.quit <- errc if err := <-errc; err != nil { errs = append(errs, err) @@ -206,7 +202,7 @@ func (db *Dashboard) webHandler(w http.ResponseWriter, r *http.Request) { // apiHandler handles requests for the dashboard. func (db *Dashboard) apiHandler(conn *websocket.Conn) { - id := atomic.AddUint32(&nextID, 1) + id := atomic.AddUint32(&db.nextConnID, 1) client := &client{ conn: conn, msg: make(chan *Message, 128), @@ -233,10 +229,21 @@ func (db *Dashboard) apiHandler(conn *websocket.Conn) { } }() - db.lock.Lock() // Send the past data. - client.msg <- deepcopy.Copy(db.history).(*Message) + db.sysLock.RLock() + db.peerLock.RLock() + db.logLock.RLock() + + h := deepcopy.Copy(db.history).(*Message) + + db.sysLock.RUnlock() + db.peerLock.RUnlock() + db.logLock.RUnlock() + + client.msg <- h + // Start tracking the connection and drop at connection loss. + db.lock.Lock() db.conns[id] = client db.lock.Unlock() defer func() { @@ -259,136 +266,6 @@ func (db *Dashboard) apiHandler(conn *websocket.Conn) { } } -// meterCollector returns a function, which retrieves a specific meter. -func meterCollector(name string) func() int64 { - if metric := metrics.DefaultRegistry.Get(name); metric != nil { - m := metric.(metrics.Meter) - return func() int64 { - return m.Count() - } - } - return func() int64 { - return 0 - } -} - -// collectData collects the required data to plot on the dashboard. -func (db *Dashboard) collectData() { - defer db.wg.Done() - - systemCPUUsage := gosigar.Cpu{} - systemCPUUsage.Get() - var ( - mem runtime.MemStats - - collectNetworkIngress = meterCollector("p2p/InboundTraffic") - collectNetworkEgress = meterCollector("p2p/OutboundTraffic") - collectDiskRead = meterCollector("eth/db/chaindata/disk/read") - collectDiskWrite = meterCollector("eth/db/chaindata/disk/write") - - prevNetworkIngress = collectNetworkIngress() - prevNetworkEgress = collectNetworkEgress() - prevProcessCPUTime = getProcessCPUTime() - prevSystemCPUUsage = systemCPUUsage - prevDiskRead = collectDiskRead() - prevDiskWrite = collectDiskWrite() - - frequency = float64(db.config.Refresh / time.Second) - numCPU = float64(runtime.NumCPU()) - ) - - for { - select { - case errc := <-db.quit: - errc <- nil - return - case <-time.After(db.config.Refresh): - systemCPUUsage.Get() - var ( - curNetworkIngress = collectNetworkIngress() - curNetworkEgress = collectNetworkEgress() - curProcessCPUTime = getProcessCPUTime() - curSystemCPUUsage = systemCPUUsage - curDiskRead = collectDiskRead() - curDiskWrite = collectDiskWrite() - - deltaNetworkIngress = float64(curNetworkIngress - prevNetworkIngress) - deltaNetworkEgress = float64(curNetworkEgress - prevNetworkEgress) - deltaProcessCPUTime = curProcessCPUTime - prevProcessCPUTime - deltaSystemCPUUsage = curSystemCPUUsage.Delta(prevSystemCPUUsage) - deltaDiskRead = curDiskRead - prevDiskRead - deltaDiskWrite = curDiskWrite - prevDiskWrite - ) - prevNetworkIngress = curNetworkIngress - prevNetworkEgress = curNetworkEgress - prevProcessCPUTime = curProcessCPUTime - prevSystemCPUUsage = curSystemCPUUsage - prevDiskRead = curDiskRead - prevDiskWrite = curDiskWrite - - now := time.Now() - - runtime.ReadMemStats(&mem) - activeMemory := &ChartEntry{ - Time: now, - Value: float64(mem.Alloc) / frequency, - } - virtualMemory := &ChartEntry{ - Time: now, - Value: float64(mem.Sys) / frequency, - } - networkIngress := &ChartEntry{ - Time: now, - Value: deltaNetworkIngress / frequency, - } - networkEgress := &ChartEntry{ - Time: now, - Value: deltaNetworkEgress / frequency, - } - processCPU := &ChartEntry{ - Time: now, - Value: deltaProcessCPUTime / frequency / numCPU * 100, - } - systemCPU := &ChartEntry{ - Time: now, - Value: float64(deltaSystemCPUUsage.Sys+deltaSystemCPUUsage.User) / frequency / numCPU, - } - diskRead := &ChartEntry{ - Time: now, - Value: float64(deltaDiskRead) / frequency, - } - diskWrite := &ChartEntry{ - Time: now, - Value: float64(deltaDiskWrite) / frequency, - } - sys := db.history.System - db.lock.Lock() - sys.ActiveMemory = append(sys.ActiveMemory[1:], activeMemory) - sys.VirtualMemory = append(sys.VirtualMemory[1:], virtualMemory) - sys.NetworkIngress = append(sys.NetworkIngress[1:], networkIngress) - sys.NetworkEgress = append(sys.NetworkEgress[1:], networkEgress) - sys.ProcessCPU = append(sys.ProcessCPU[1:], processCPU) - sys.SystemCPU = append(sys.SystemCPU[1:], systemCPU) - sys.DiskRead = append(sys.DiskRead[1:], diskRead) - sys.DiskWrite = append(sys.DiskWrite[1:], diskWrite) - db.lock.Unlock() - - db.sendToAll(&Message{ - System: &SystemMessage{ - ActiveMemory: ChartEntries{activeMemory}, - VirtualMemory: ChartEntries{virtualMemory}, - NetworkIngress: ChartEntries{networkIngress}, - NetworkEgress: ChartEntries{networkEgress}, - ProcessCPU: ChartEntries{processCPU}, - SystemCPU: ChartEntries{systemCPU}, - DiskRead: ChartEntries{diskRead}, - DiskWrite: ChartEntries{diskWrite}, - }, - }) - } - } -} - // sendToAll sends the given message to the active dashboards. func (db *Dashboard) sendToAll(msg *Message) { db.lock.Lock() diff --git a/dashboard/geoip.go b/dashboard/geoip.go new file mode 100644 index 000000000000..9ca627d4f994 --- /dev/null +++ b/dashboard/geoip.go @@ -0,0 +1,98 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "net" + "time" + + "github.com/apilayer/freegeoip" +) + +// geoDBInfo contains all the geographical information we could extract based on an IP +// address. +type geoDBInfo struct { + Country struct { + Names struct { + English string `maxminddb:"en" json:"en,omitempty"` + } `maxminddb:"names" json:"names,omitempty"` + } `maxminddb:"country" json:"country,omitempty"` + City struct { + Names struct { + English string `maxminddb:"en" json:"en,omitempty"` + } `maxminddb:"names" json:"names,omitempty"` + } `maxminddb:"city" json:"city,omitempty"` + Location struct { + Latitude float64 `maxminddb:"latitude" json:"latitude,omitempty"` + Longitude float64 `maxminddb:"longitude" json:"longitude,omitempty"` + } `maxminddb:"location" json:"location,omitempty"` +} + +// geoLocation contains geographical information. +type geoLocation struct { + Country string `json:"country,omitempty"` + City string `json:"city,omitempty"` + Latitude float64 `json:"latitude,omitempty"` + Longitude float64 `json:"longitude,omitempty"` +} + +// geoDB represents a geoip database that can be queried for IP to geographical +// information conversions. +type geoDB struct { + geodb *freegeoip.DB +} + +// Open creates a new geoip database with an up-to-date database from the internet. +func openGeoDB() (*geoDB, error) { + // Initiate a geoip database to cross reference locations + db, err := freegeoip.OpenURL(freegeoip.MaxMindDB, 24*time.Hour, time.Hour) + if err != nil { + return nil, err + } + // Wait until the database is updated to the latest data + select { + case <-db.NotifyOpen(): + case err := <-db.NotifyError(): + return nil, err + } + // Assemble and return our custom wrapper + return &geoDB{geodb: db}, nil +} + +// Close terminates the database background updater. +func (db *geoDB) close() error { + db.geodb.Close() + return nil +} + +// Lookup converts an IP address to a geographical location. +func (db *geoDB) lookup(ip net.IP) *geoDBInfo { + result := new(geoDBInfo) + db.geodb.Lookup(ip, result) + return result +} + +// Location retrieves the geographical location of the given IP address. +func (db *geoDB) location(ip string) *geoLocation { + location := db.lookup(net.ParseIP(ip)) + return &geoLocation{ + Country: location.Country.Names.English, + City: location.City.Names.English, + Latitude: location.Location.Latitude, + Longitude: location.Location.Longitude, + } +} diff --git a/dashboard/log.go b/dashboard/log.go index 5d852d60a4db..be7732695c39 100644 --- a/dashboard/log.go +++ b/dashboard/log.go @@ -94,13 +94,13 @@ func (db *Dashboard) handleLogRequest(r *LogsRequest, c *client) { // The last file is continuously updated, and its chunks are streamed, // so in order to avoid log record duplication on the client side, it is // handled differently. Its actual content is always saved in the history. - db.lock.Lock() + db.logLock.RLock() if db.history.Logs != nil { c.msg <- &Message{ - Logs: db.history.Logs, + Logs: deepcopy.Copy(db.history.Logs).(*LogsMessage), } } - db.lock.Unlock() + db.logLock.RUnlock() return case fileNames[idx] == r.Name: idx++ @@ -174,7 +174,7 @@ func (db *Dashboard) streamLogs() { log.Warn("Problem with file", "name", opened.Name(), "err", err) return } - db.lock.Lock() + db.logLock.Lock() db.history.Logs = &LogsMessage{ Source: &LogFile{ Name: fi.Name(), @@ -182,7 +182,7 @@ func (db *Dashboard) streamLogs() { }, Chunk: emptyChunk, } - db.lock.Unlock() + db.logLock.Unlock() watcher := make(chan notify.EventInfo, 10) if err := notify.Watch(db.logdir, watcher, notify.Create); err != nil { @@ -240,10 +240,10 @@ loop: log.Warn("Problem with file", "name", opened.Name(), "err", err) break loop } - db.lock.Lock() + db.logLock.Lock() db.history.Logs.Source.Name = fi.Name() db.history.Logs.Chunk = emptyChunk - db.lock.Unlock() + db.logLock.Unlock() case <-ticker.C: // Send log updates to the client. if opened == nil { log.Warn("The last log file is not opened") @@ -266,7 +266,7 @@ loop: var l *LogsMessage // Update the history. - db.lock.Lock() + db.logLock.Lock() if bytes.Equal(db.history.Logs.Chunk, emptyChunk) { db.history.Logs.Chunk = chunk l = deepcopy.Copy(db.history.Logs).(*LogsMessage) @@ -278,7 +278,7 @@ loop: db.history.Logs.Chunk = b l = &LogsMessage{Chunk: chunk} } - db.lock.Unlock() + db.logLock.Unlock() db.sendToAll(&Message{Logs: l}) case errc = <-db.quit: diff --git a/dashboard/message.go b/dashboard/message.go index 46856b9e6eed..797b210fa839 100644 --- a/dashboard/message.go +++ b/dashboard/message.go @@ -18,7 +18,6 @@ package dashboard import ( "encoding/json" - "time" ) type Message struct { @@ -34,8 +33,7 @@ type Message struct { type ChartEntries []*ChartEntry type ChartEntry struct { - Time time.Time `json:"time,omitempty"` - Value float64 `json:"value,omitempty"` + Value float64 `json:"value"` } type GeneralMessage struct { @@ -55,10 +53,14 @@ type TxPoolMessage struct { /* TODO (kurkomisi) */ } +// NetworkMessage contains information about the peers +// organized based on their IP address and node ID. type NetworkMessage struct { - /* TODO (kurkomisi) */ + Peers *peerContainer `json:"peers,omitempty"` // Peer tree. + Diff []*peerEvent `json:"diff,omitempty"` // Events that change the peer tree. } +// SystemMessage contains the metered system data samples. type SystemMessage struct { ActiveMemory ChartEntries `json:"activeMemory,omitempty"` VirtualMemory ChartEntries `json:"virtualMemory,omitempty"` @@ -70,7 +72,7 @@ type SystemMessage struct { DiskWrite ChartEntries `json:"diskWrite,omitempty"` } -// LogsMessage wraps up a log chunk. If Source isn't present, the chunk is a stream chunk. +// LogsMessage wraps up a log chunk. If 'Source' isn't present, the chunk is a stream chunk. type LogsMessage struct { Source *LogFile `json:"source,omitempty"` // Attributes of the log file. Chunk json.RawMessage `json:"chunk"` // Contains log records. @@ -87,6 +89,7 @@ type Request struct { Logs *LogsRequest `json:"logs,omitempty"` } +// LogsRequest contains the attributes of the log file the client wants to receive. type LogsRequest struct { Name string `json:"name"` // The request handler searches for log file based on this file name. Past bool `json:"past"` // Denotes whether the client wants the previous or the next file. diff --git a/dashboard/peers.go b/dashboard/peers.go new file mode 100644 index 000000000000..334302cc120e --- /dev/null +++ b/dashboard/peers.go @@ -0,0 +1,552 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "container/list" + "strings" + "time" + + "github.com/ethereum/go-ethereum/metrics" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" +) + +const ( + eventBufferLimit = 128 // Maximum number of buffered peer events. + knownPeerLimit = 100 // Maximum number of stored peers, which successfully made the handshake. + attemptLimit = 200 // Maximum number of stored peers, which failed to make the handshake. + + // eventLimit is the maximum number of the dashboard's custom peer events, + // that are collected between two metering period and sent to the clients + // as one message. + // TODO (kurkomisi): Limit the number of events. + eventLimit = knownPeerLimit << 2 +) + +// peerContainer contains information about the node's peers. This data structure +// maintains the metered peer data based on the different behaviours of the peers. +// +// Every peer has an IP address, and the peers that manage to make the handshake +// (known peers) have node IDs too. There can appear more peers with the same IP, +// therefore the peer container data structure is a tree consisting of a map of +// maps, where the first key groups the peers by IP, while the second one groups +// them by the node ID. The known peers can be active if their connection is still +// open, or inactive otherwise. The peers failing before the handshake (unknown +// peers) only have IP addresses, so their connection attempts are stored as part +// of the value of the outer map. +// +// Another criteria is to limit the number of metered peers so that +// they don't fill the memory. The selection order is based on the +// peers activity: the peers that are inactive for the longest time +// are thrown first. For the selection a fifo list is used which is +// linked to the bottom of the peer tree in a way that every activity +// of the peer pushes the peer to the end of the list, so the inactive +// ones come to the front. When a peer has some activity, it is removed +// from and reinserted into the list. When the length of the list reaches +// the limit, the first element is removed from the list, as well as from +// the tree. +// +// The active peers have priority over the inactive ones, therefore +// they have their own list. The separation makes it sure that the +// inactive peers are always removed before the active ones. +// +// The peers that don't manage to make handshake are not inserted into the list, +// only their connection attempts are appended to the array belonging to their IP. +// In order to keep the fifo principle, a super array contains the order of the +// attempts, and when the overall count reaches the limit, the earliest attempt is +// removed from the beginning of its array. +// +// This data structure makes it possible to marshal the peer +// history simply by passing it to the JSON marshaler. +type peerContainer struct { + // Bundles is the outer map using the peer's IP address as key. + Bundles map[string]*peerBundle `json:"bundles,omitempty"` + + activeCount int // Number of the still connected peers + + // inactivePeers contains the peers with closed connection in chronological order. + inactivePeers *list.List + + // attemptOrder is the super array containing the IP addresses, from which + // the peers attempted to connect then failed before/during the handshake. + // Its values are appended in chronological order, which means that the + // oldest attempt is at the beginning of the array. When the first element + // is removed, the first element of the related bundle's attempt array is + // removed too, ensuring that always the latest attempts are stored. + attemptOrder []string + + // geodb is the geoip database used to retrieve the peers' geographical location. + geodb *geoDB +} + +// newPeerContainer returns a new instance of the peer container. +func newPeerContainer(geodb *geoDB) *peerContainer { + return &peerContainer{ + Bundles: make(map[string]*peerBundle), + inactivePeers: list.New(), + attemptOrder: make([]string, 0, attemptLimit), + geodb: geodb, + } +} + +// bundle inserts a new peer bundle into the map, if the peer belonging +// to the given IP wasn't metered so far. In this case retrieves the location of +// the IP address from the database and creates a corresponding peer event. +// Returns the bundle belonging to the given IP and the events occurring during +// the initialization. +func (pc *peerContainer) bundle(ip string) (*peerBundle, []*peerEvent) { + var events []*peerEvent + if _, ok := pc.Bundles[ip]; !ok { + location := pc.geodb.location(ip) + events = append(events, &peerEvent{ + IP: ip, + Location: location, + }) + pc.Bundles[ip] = &peerBundle{ + Location: location, + KnownPeers: make(map[string]*knownPeer), + } + } + return pc.Bundles[ip], events +} + +// extendKnown handles the events of the successfully connected peers. +// Returns the events occurring during the extension. +func (pc *peerContainer) extendKnown(event *peerEvent) []*peerEvent { + bundle, events := pc.bundle(event.IP) + peer, peerEvents := bundle.knownPeer(event.IP, event.ID) + events = append(events, peerEvents...) + // Append the connect and the disconnect events to + // the corresponding arrays keeping the limit. + switch { + case event.Connected != nil: + peer.Connected = append(peer.Connected, event.Connected) + if first := len(peer.Connected) - sampleLimit; first > 0 { + peer.Connected = peer.Connected[first:] + } + peer.Active = true + events = append(events, &peerEvent{ + Activity: Active, + IP: peer.ip, + ID: peer.id, + }) + pc.activeCount++ + if peer.listElement != nil { + _ = pc.inactivePeers.Remove(peer.listElement) + peer.listElement = nil + } + case event.Disconnected != nil: + peer.Disconnected = append(peer.Disconnected, event.Disconnected) + if first := len(peer.Disconnected) - sampleLimit; first > 0 { + peer.Disconnected = peer.Disconnected[first:] + } + peer.Active = false + events = append(events, &peerEvent{ + Activity: Inactive, + IP: peer.ip, + ID: peer.id, + }) + pc.activeCount-- + if peer.listElement != nil { + // If the peer is already in the list, remove and reinsert it. + _ = pc.inactivePeers.Remove(peer.listElement) + } + // Insert the peer into the list. + peer.listElement = pc.inactivePeers.PushBack(peer) + } + for pc.inactivePeers.Len() > 0 && pc.activeCount+pc.inactivePeers.Len() > knownPeerLimit { + // While the count of the known peers is greater than the limit, + // remove the first element from the inactive peer list and from the map. + if removedPeer, ok := pc.inactivePeers.Remove(pc.inactivePeers.Front()).(*knownPeer); ok { + events = append(events, pc.removeKnown(removedPeer.ip, removedPeer.id)...) + } else { + log.Warn("Failed to parse the removed peer") + } + } + if pc.activeCount > knownPeerLimit { + log.Warn("Number of active peers is greater than the limit") + } + return events +} + +// handleAttempt handles the events of the peers failing before/during the handshake. +// Returns the events occurring during the extension. +func (pc *peerContainer) handleAttempt(event *peerEvent) []*peerEvent { + bundle, events := pc.bundle(event.IP) + bundle.Attempts = append(bundle.Attempts, &peerAttempt{ + Connected: *event.Connected, + Disconnected: *event.Disconnected, + }) + pc.attemptOrder = append(pc.attemptOrder, event.IP) + for len(pc.attemptOrder) > attemptLimit { + // While the length of the connection attempt order array is greater + // than the limit, remove the first element from the involved peer's + // array and also from the super array. + events = append(events, pc.removeAttempt(pc.attemptOrder[0])...) + pc.attemptOrder = pc.attemptOrder[1:] + } + return events +} + +// peerBundle contains the peers belonging to a given IP address. +type peerBundle struct { + // Location contains the geographical location based on the bundle's IP address. + Location *geoLocation `json:"location,omitempty"` + + // KnownPeers is the inner map of the metered peer + // maintainer data structure using the node ID as key. + KnownPeers map[string]*knownPeer `json:"knownPeers,omitempty"` + + // Attempts contains the failed connection attempts of the + // peers belonging to a given IP address in chronological order. + Attempts []*peerAttempt `json:"attempts,omitempty"` +} + +// removeKnown removes the known peer belonging to the +// given IP address and node ID from the peer tree. +func (pc *peerContainer) removeKnown(ip, id string) (events []*peerEvent) { + // TODO (kurkomisi): Remove peers that don't have traffic samples anymore. + if bundle, ok := pc.Bundles[ip]; ok { + if _, ok := bundle.KnownPeers[id]; ok { + events = append(events, &peerEvent{ + Remove: RemoveKnown, + IP: ip, + ID: id, + }) + delete(bundle.KnownPeers, id) + } else { + log.Warn("No peer to remove", "ip", ip, "id", id) + } + if len(bundle.KnownPeers) < 1 && len(bundle.Attempts) < 1 { + events = append(events, &peerEvent{ + Remove: RemoveBundle, + IP: ip, + }) + delete(pc.Bundles, ip) + } + } else { + log.Warn("No bundle to remove", "ip", ip) + } + return events +} + +// removeAttempt removes the peer attempt belonging to the +// given IP address and node ID from the peer tree. +func (pc *peerContainer) removeAttempt(ip string) (events []*peerEvent) { + if bundle, ok := pc.Bundles[ip]; ok { + if len(bundle.Attempts) > 0 { + events = append(events, &peerEvent{ + Remove: RemoveAttempt, + IP: ip, + }) + bundle.Attempts = bundle.Attempts[1:] + } + if len(bundle.Attempts) < 1 && len(bundle.KnownPeers) < 1 { + events = append(events, &peerEvent{ + Remove: RemoveBundle, + IP: ip, + }) + delete(pc.Bundles, ip) + } + } + return events +} + +// knownPeer inserts a new peer into the map, if the peer belonging +// to the given IP address and node ID wasn't metered so far. Returns the peer +// belonging to the given IP and ID as well as the events occurring during the +// initialization. +func (bundle *peerBundle) knownPeer(ip, id string) (*knownPeer, []*peerEvent) { + var events []*peerEvent + if _, ok := bundle.KnownPeers[id]; !ok { + now := time.Now() + ingress := emptyChartEntries(now, sampleLimit) + egress := emptyChartEntries(now, sampleLimit) + events = append(events, &peerEvent{ + IP: ip, + ID: id, + Ingress: append([]*ChartEntry{}, ingress...), + Egress: append([]*ChartEntry{}, egress...), + }) + bundle.KnownPeers[id] = &knownPeer{ + ip: ip, + id: id, + Ingress: ingress, + Egress: egress, + } + } + return bundle.KnownPeers[id], events +} + +// knownPeer contains the metered data of a particular peer. +type knownPeer struct { + // Connected contains the timestamps of the peer's connection events. + Connected []*time.Time `json:"connected,omitempty"` + + // Disconnected contains the timestamps of the peer's disconnection events. + Disconnected []*time.Time `json:"disconnected,omitempty"` + + // Ingress and Egress contain the peer's traffic samples, which are collected + // periodically from the metrics registry. + // + // A peer can connect multiple times, and we want to visualize the time + // passed between two connections, so after the first connection a 0 value + // is appended to the traffic arrays even if the peer is inactive until the + // peer is removed. + Ingress ChartEntries `json:"ingress,omitempty"` + Egress ChartEntries `json:"egress,omitempty"` + + Active bool `json:"active"` // Denotes if the peer is still connected. + + listElement *list.Element // Pointer to the peer element in the list. + ip, id string // The IP and the ID by which the peer can be accessed in the tree. + prevIngress float64 + prevEgress float64 +} + +// peerAttempt contains a failed peer connection attempt's attributes. +type peerAttempt struct { + // Connected contains the timestamp of the connection attempt's moment. + Connected time.Time `json:"connected"` + + // Disconnected contains the timestamp of the + // moment when the connection attempt failed. + Disconnected time.Time `json:"disconnected"` +} + +type RemovedPeerType string +type ActivityType string + +const ( + RemoveKnown RemovedPeerType = "known" + RemoveAttempt RemovedPeerType = "attempt" + RemoveBundle RemovedPeerType = "bundle" + + Active ActivityType = "active" + Inactive ActivityType = "inactive" +) + +// peerEvent contains the attributes of a peer event. +type peerEvent struct { + IP string `json:"ip,omitempty"` // IP address of the peer. + ID string `json:"id,omitempty"` // Node ID of the peer. + Remove RemovedPeerType `json:"remove,omitempty"` // Type of the peer that is to be removed. + Location *geoLocation `json:"location,omitempty"` // Geographical location of the peer. + Connected *time.Time `json:"connected,omitempty"` // Timestamp of the connection moment. + Disconnected *time.Time `json:"disconnected,omitempty"` // Timestamp of the disonnection moment. + Ingress ChartEntries `json:"ingress,omitempty"` // Ingress samples. + Egress ChartEntries `json:"egress,omitempty"` // Egress samples. + Activity ActivityType `json:"activity,omitempty"` // Connection status change. +} + +// trafficMap is a container for the periodically collected peer traffic. +type trafficMap map[string]map[string]float64 + +// insert inserts a new value to the traffic map. Overwrites +// the value at the given ip and id if that already exists. +func (m *trafficMap) insert(ip, id string, val float64) { + if _, ok := (*m)[ip]; !ok { + (*m)[ip] = make(map[string]float64) + } + (*m)[ip][id] = val +} + +// collectPeerData gathers data about the peers and sends it to the clients. +func (db *Dashboard) collectPeerData() { + defer db.wg.Done() + + // Open the geodb database for IP to geographical information conversions. + var err error + db.geodb, err = openGeoDB() + if err != nil { + log.Warn("Failed to open geodb", "err", err) + return + } + defer db.geodb.close() + + peerCh := make(chan p2p.MeteredPeerEvent, eventBufferLimit) // Peer event channel. + subPeer := p2p.SubscribeMeteredPeerEvent(peerCh) // Subscribe to peer events. + defer subPeer.Unsubscribe() // Unsubscribe at the end. + + ticker := time.NewTicker(db.config.Refresh) + defer ticker.Stop() + + type registryFunc func(name string, i interface{}) + type collectorFunc func(traffic *trafficMap) registryFunc + + // trafficCollector generates a function that can be passed to + // the prefixed peer registry in order to collect the metered + // traffic data from each peer meter. + trafficCollector := func(prefix string) collectorFunc { + // This part makes is possible to collect the + // traffic data into a map from outside. + return func(traffic *trafficMap) registryFunc { + // The function which can be passed to the registry. + return func(name string, i interface{}) { + if m, ok := i.(metrics.Meter); ok { + // The name of the meter has the format: / + if k := strings.Split(strings.TrimPrefix(name, prefix), "/"); len(k) == 2 { + traffic.insert(k[0], k[1], float64(m.Count())) + } else { + log.Warn("Invalid meter name", "name", name, "prefix", prefix) + } + } else { + log.Warn("Invalid meter type", "name", name) + } + } + } + } + collectIngress := trafficCollector(p2p.MetricsInboundTraffic + "/") + collectEgress := trafficCollector(p2p.MetricsOutboundTraffic + "/") + + peers := newPeerContainer(db.geodb) + db.peerLock.Lock() + db.history.Network = &NetworkMessage{ + Peers: peers, + } + db.peerLock.Unlock() + + // newPeerEvents contains peer events, which trigger operations that + // will be executed on the peer tree after a metering period. + newPeerEvents := make([]*peerEvent, 0, eventLimit) + ingress, egress := new(trafficMap), new(trafficMap) + *ingress, *egress = make(trafficMap), make(trafficMap) + + for { + select { + case event := <-peerCh: + now := time.Now() + switch event.Type { + case p2p.PeerConnected: + connected := now.Add(-event.Elapsed) + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: event.IP.String(), + ID: event.ID.String(), + Connected: &connected, + }) + case p2p.PeerDisconnected: + ip, id := event.IP.String(), event.ID.String() + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: ip, + ID: id, + Disconnected: &now, + }) + // The disconnect event comes with the last metered traffic count, + // because after the disconnection the peer's meter is removed + // from the registry. It can happen, that between two metering + // period the same peer disconnects multiple times, and appending + // all the samples to the traffic arrays would shift the metering, + // so only the last metering is stored, overwriting the previous one. + ingress.insert(ip, id, float64(event.Ingress)) + egress.insert(ip, id, float64(event.Egress)) + case p2p.PeerHandshakeFailed: + connected := now.Add(-event.Elapsed) + newPeerEvents = append(newPeerEvents, &peerEvent{ + IP: event.IP.String(), + Connected: &connected, + Disconnected: &now, + }) + default: + log.Error("Unknown metered peer event type", "type", event.Type) + } + case <-ticker.C: + // Collect the traffic samples from the registry. + p2p.PeerIngressRegistry.Each(collectIngress(ingress)) + p2p.PeerEgressRegistry.Each(collectEgress(egress)) + + // Protect 'peers', because it is part of the history. + db.peerLock.Lock() + + var diff []*peerEvent + for i := 0; i < len(newPeerEvents); i++ { + if newPeerEvents[i].IP == "" { + log.Warn("Peer event without IP", "event", *newPeerEvents[i]) + continue + } + diff = append(diff, newPeerEvents[i]) + // There are two main branches of peer events coming from the event + // feed, one belongs to the known peers, one to the unknown peers. + // If the event has node ID, it belongs to a known peer, otherwise + // to an unknown one, which is considered as connection attempt. + // + // The extension can produce additional peer events, such + // as remove, location and initial samples events. + if newPeerEvents[i].ID == "" { + diff = append(diff, peers.handleAttempt(newPeerEvents[i])...) + continue + } + diff = append(diff, peers.extendKnown(newPeerEvents[i])...) + } + // Update the peer tree using the traffic maps. + for ip, bundle := range peers.Bundles { + for id, peer := range bundle.KnownPeers { + // Value is 0 if the traffic map doesn't have the + // entry corresponding to the given IP and ID. + curIngress, curEgress := (*ingress)[ip][id], (*egress)[ip][id] + deltaIngress, deltaEgress := curIngress, curEgress + if deltaIngress >= peer.prevIngress { + deltaIngress -= peer.prevIngress + } + if deltaEgress >= peer.prevEgress { + deltaEgress -= peer.prevEgress + } + peer.prevIngress, peer.prevEgress = curIngress, curEgress + i := &ChartEntry{ + Value: deltaIngress, + } + e := &ChartEntry{ + Value: deltaEgress, + } + peer.Ingress = append(peer.Ingress, i) + peer.Egress = append(peer.Egress, e) + if first := len(peer.Ingress) - sampleLimit; first > 0 { + peer.Ingress = peer.Ingress[first:] + } + if first := len(peer.Egress) - sampleLimit; first > 0 { + peer.Egress = peer.Egress[first:] + } + // Creating the traffic sample events. + diff = append(diff, &peerEvent{ + IP: ip, + ID: id, + Ingress: ChartEntries{i}, + Egress: ChartEntries{e}, + }) + } + } + db.peerLock.Unlock() + + if len(diff) > 0 { + db.sendToAll(&Message{Network: &NetworkMessage{ + Diff: diff, + }}) + } + // Clear the traffic maps, and the event array, + // prepare them for the next metering. + *ingress, *egress = make(trafficMap), make(trafficMap) + newPeerEvents = newPeerEvents[:0] + case err := <-subPeer.Err(): + log.Warn("Peer subscription error", "err", err) + return + case errc := <-db.quit: + errc <- nil + return + } + } +} diff --git a/dashboard/system.go b/dashboard/system.go new file mode 100644 index 000000000000..5b90a17ef849 --- /dev/null +++ b/dashboard/system.go @@ -0,0 +1,146 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dashboard + +import ( + "runtime" + "time" + + "github.com/elastic/gosigar" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" +) + +// meterCollector returns a function, which retrieves the count of a specific meter. +func meterCollector(name string) func() int64 { + if meter := metrics.Get(name); meter != nil { + m := meter.(metrics.Meter) + return func() int64 { + return m.Count() + } + } + return func() int64 { + return 0 + } +} + +// collectSystemData gathers data about the system and sends it to the clients. +func (db *Dashboard) collectSystemData() { + defer db.wg.Done() + + systemCPUUsage := gosigar.Cpu{} + systemCPUUsage.Get() + var ( + mem runtime.MemStats + + collectNetworkIngress = meterCollector(p2p.MetricsInboundTraffic) + collectNetworkEgress = meterCollector(p2p.MetricsOutboundTraffic) + collectDiskRead = meterCollector("eth/db/chaindata/disk/read") + collectDiskWrite = meterCollector("eth/db/chaindata/disk/write") + + prevNetworkIngress = collectNetworkIngress() + prevNetworkEgress = collectNetworkEgress() + prevProcessCPUTime = getProcessCPUTime() + prevSystemCPUUsage = systemCPUUsage + prevDiskRead = collectDiskRead() + prevDiskWrite = collectDiskWrite() + + frequency = float64(db.config.Refresh / time.Second) + numCPU = float64(runtime.NumCPU()) + ) + + for { + select { + case errc := <-db.quit: + errc <- nil + return + case <-time.After(db.config.Refresh): + systemCPUUsage.Get() + var ( + curNetworkIngress = collectNetworkIngress() + curNetworkEgress = collectNetworkEgress() + curProcessCPUTime = getProcessCPUTime() + curSystemCPUUsage = systemCPUUsage + curDiskRead = collectDiskRead() + curDiskWrite = collectDiskWrite() + + deltaNetworkIngress = float64(curNetworkIngress - prevNetworkIngress) + deltaNetworkEgress = float64(curNetworkEgress - prevNetworkEgress) + deltaProcessCPUTime = curProcessCPUTime - prevProcessCPUTime + deltaSystemCPUUsage = curSystemCPUUsage.Delta(prevSystemCPUUsage) + deltaDiskRead = curDiskRead - prevDiskRead + deltaDiskWrite = curDiskWrite - prevDiskWrite + ) + prevNetworkIngress = curNetworkIngress + prevNetworkEgress = curNetworkEgress + prevProcessCPUTime = curProcessCPUTime + prevSystemCPUUsage = curSystemCPUUsage + prevDiskRead = curDiskRead + prevDiskWrite = curDiskWrite + + runtime.ReadMemStats(&mem) + activeMemory := &ChartEntry{ + Value: float64(mem.Alloc) / frequency, + } + virtualMemory := &ChartEntry{ + Value: float64(mem.Sys) / frequency, + } + networkIngress := &ChartEntry{ + Value: deltaNetworkIngress / frequency, + } + networkEgress := &ChartEntry{ + Value: deltaNetworkEgress / frequency, + } + processCPU := &ChartEntry{ + Value: deltaProcessCPUTime / frequency / numCPU * 100, + } + systemCPU := &ChartEntry{ + Value: float64(deltaSystemCPUUsage.Sys+deltaSystemCPUUsage.User) / frequency / numCPU, + } + diskRead := &ChartEntry{ + Value: float64(deltaDiskRead) / frequency, + } + diskWrite := &ChartEntry{ + Value: float64(deltaDiskWrite) / frequency, + } + db.sysLock.Lock() + sys := db.history.System + sys.ActiveMemory = append(sys.ActiveMemory[1:], activeMemory) + sys.VirtualMemory = append(sys.VirtualMemory[1:], virtualMemory) + sys.NetworkIngress = append(sys.NetworkIngress[1:], networkIngress) + sys.NetworkEgress = append(sys.NetworkEgress[1:], networkEgress) + sys.ProcessCPU = append(sys.ProcessCPU[1:], processCPU) + sys.SystemCPU = append(sys.SystemCPU[1:], systemCPU) + sys.DiskRead = append(sys.DiskRead[1:], diskRead) + sys.DiskWrite = append(sys.DiskWrite[1:], diskWrite) + db.sysLock.Unlock() + + db.sendToAll(&Message{ + System: &SystemMessage{ + ActiveMemory: ChartEntries{activeMemory}, + VirtualMemory: ChartEntries{virtualMemory}, + NetworkIngress: ChartEntries{networkIngress}, + NetworkEgress: ChartEntries{networkEgress}, + ProcessCPU: ChartEntries{processCPU}, + SystemCPU: ChartEntries{systemCPU}, + DiskRead: ChartEntries{diskRead}, + DiskWrite: ChartEntries{diskWrite}, + }, + }) + } + } +} diff --git a/docs/audits/2017-04-25_Geth-audit_Truesec.pdf b/docs/audits/2017-04-25_Geth-audit_Truesec.pdf new file mode 100644 index 0000000000000000000000000000000000000000..702dc99567f3240a94fcfef5d2d8be44b0d167c5 GIT binary patch literal 124427 zcmag_bBr%e@b`(1ZTpPQ7@x6i+qP|=v2EM7ZQHhO@AvoICwDj5-Fy3wPNl25JL#m7 zu71Dzue`7*Edw13%-^HC>o*v7LI9zip(PAAH@&EZwX=yMy{NT;vx%^Yk)5##y^@Qe zvxmJ2y}FDvz4HGUGA7Oj#s>prDDs1OvG61@f2@;+`y>7-E@g0nkZu%Imhb56-x5 z$aLDt6WZzRE2&mK)X8CdKikGFov)Kzqq{-loov6ae!sbFZuze_(GoIq5-YE*`(@N$ z9;I|!wzrNunSOj5^d+yvnzNEf#k??)&FaJqzZ5S~X}?Q10)gK0dXDZsv59&+E#Ppt0xN|2F>&CF z-5;MraFIqbXIT(8x8(?*xI3G`JD>g#mYuay{9qhnusg&uypo3Gt?@+s0Ou@qrzCnB z%>7VO{;|>>Kf~mu`DS9|Eq~97YEmzZD3E{c|LvG{!Lq>V|Mdg`&lI) zAjs5~(6X*vlehwKdXrDd{+hTt++o_B^m-M3hBi@Y|4t`D#PVccx%t6$JAVFCdh*cD zMf0hiUqNKseDEjbWA&u@(5xJNW?q39jJ?jGX(+uOSlf9+{I?05aBBAW?OA2_M$n6W z=hQ=f-vyM0?FR_i+`x6r<~fQ<0F;w)%gwyRPmoaf`98a=|32Z|{eJ7g|MtGEmos=z zzY*|@>#jw5LH-f@vUjjR0t!vt8=khFJB${vGYadT_Fc=Y9{D~rUE8!q^OrmRVMv|@ z2`1n}emgujBfBeN-CHl8%cL3Fv1TxjnW^JwD-40>{lbGR+?iJaC(!99P#vt!kM#8H zam9GkIKKS?rpY?99;CMK_;Se8E18nww*=kco%J2cHD$xS`=iGc&nGEVmZFfm zJ9yr2g)7lk^I9gL4!2$yQ7uCEf9O0Q>vSVo~C2$|; zPtc8}zI4NW%WB#*&61~?zbMCsY=+C&%d@KzVu3~}{Y(2+4ODe4PNT7$9GA-__T{`F zKeYr-X`+K)r-t3AyvsYDPRfPi4LU7!Q@;iwt4^NPBpS))5YB7_yHm6s6Biv~jKngv z;Aqzni4V0=0CEV}kaL~RdZB#8ah&zCPQ=sek~g-=50!2%_=zmz$aheJTe|fKHomEc zEDaUq-NX$}S2tTT97*-Y`S=|?eya?98XJ&8qF*S$7q)O z(ptZU&{fjBz5GI>O%vV=8x=l9la=)#Q2L6JJzCv3Gw2q(WncX07!66yga{dR{U)V@k`i){3i4I-d%sMQpl2IlKxG4h>&uo;l@ zJmqaohtmwWp($o^TSnDVpLG`WCFE+A8SnGx7 zYtoZ}810_`6Yf3VnyHq1A1l+|j%}RR7ObKZ1SQO0OR9JiW z?9DfQe7ZFe2geMPoOPe5yRau9Gh_lt`Be!U%Cn=5TB7lY!?kFzsA@!*@RitsQw>~2&$1Ehw*=W(eH2;wVE!}WTXzdA&> zu;mfV=d;0Q;#C9`F7p)?4AL^Gt*i2lRTaSxmXoYu!;WvwX9o|rP_Se7V$QzSqC-8( z5R%U0jR68n?d4tNVvvV4buZ1V;L1w*d7BD}jA?1to$no5%K z0ZsGS;UU(|{PRHcvceEej%#UYQNR~8buQ~r8k{F(*QzZSsFS4d$x$lxww-+`$D$SR zC{Ahm>RJWet`w;9*Fn?QbkB&)=xJWYa$J<+O0ItC4MQ|1_?tK64T>&jwvu(IM#Lij zE<#KaD;43BGw@Y%h*V2Dg|ed2WdZN2PEU1s@o7w* z7+7(tr$5C|CYdN*QZ;yBk=W?Ls{kDE&k8MMC^QUN@*^#WK4}O>XK6NeR;JT`!D#Nb z7Z#;#15|0qlqwEdGksWg{JZHiWcw)$9Jc(IR5lQ5k~r=R2;=QVlv(hbIOM-Eq)#YT z%n-JoXaKz8vVOeDhKNoFbZpDzBPHA*Lp_o1ILcpZ`bL|F-Y@3O?pnBw*z}6)-Vq(F zSV;J^$~OzC=Qz&y8hh+krv;pblPOs4x~j@W9Q?rR%;^#SM)XK3lcl#nY({f5bW1yE9WdI4zDg9P{t~!D(|d~3a5?!;x3S>9 zL!5m$B@8nX)fSY@Lnx3VWZSbp4S1eepKV>(k*Q>&jWEK(exQKV86u0bpnt-Wk51G# z{!0rYs#HD@m`S5y;6HHv6E^q)*fu>HLk6$d7znNds^Hf0Ja(2c=4{+fCT$CvCnDzZ zg?up@B1G}8rlnDyDzKpzVe<5GKKN@?*3yoGxY~>yvc7;rJLI9}hTYIWT&z8&+2c98HnJ! zjK*ZD4Tu&yO~S+61Wfuh^pTX3hHglaBQ=80B3OkTvSO)}l-*?LW<(*Sa3-3M zre`XVABmGJs9kSSg%Yb`v@-f#9~t;Z0ApF;o*F>zM5-$lNsHjkJ9cj1R!PC7V`-*x zr%K>KJyDL>ors3P3mQ0TG=4_K<3o!u4CLb?Onb~mY~W+Vn_*HmA|+OBLlp3yC=iwB zF_!b&+D%TIT8OJ!-be-s-JrPRX%kGYYg7F+23B@Jru{qV9!8YM4a*Kyx?>5zO4|Lp(b-C!&w9hoGEEOhW{etS+`@V+)oUYudG5EW|Qqg=Z zN^Tmq`yKP0O%+v5;?E%31LBXFareO)C8P2*39 zrd!S!9sZX*EEv+P7^RMX!kLG*v%pgj=ERn=N-QWcuthulSqpG2_8{hD(Ce+tH*rME z6s<6^hO&$myhGQHtw&-g$-!Du3b2KU5M1hNFpNhbP&WbgXL z)h};&uZl143Ale>N9ZcQ?!CXLgVjKqkvj%^9AUv zeE`0a$E?>CtT|L|riuc=M=!J2#QqkNKoHrBv&}w&NSp2i_n+ig!AZuEhTWKi4VzeX zPAQ8%p9QaiOIgV#3VB%;nPb7Rc2JIW?jeaLn#}5voP@U#rd<4ygtVbovaNC?k5#)j zZ*d^w(yL*7&$~Cqs0v37zwt~0o~Boy`d8{UJk)F_Dm;)Y1a)vz%G8}exG!4~sGCeiwDL2({ z9r#-S_mNsG_R;;kQh>)udz_~gct2L5g+WPEXl+1HAqd5Zh@5$M^uW)pvy`-~7k)}_|fz* zVJao_#AqwWQC0x&yzta20S_cZGSD=fFx8Lr;74vsroCk05lt9KFXZ`yIN7vzdDGE* z(;63dVQ?7sU6j|y%mI4^=G9dauIpd=*1tW}3BTkRg22inWM#~Zsb-)P`VNOviYX0D zdI5tF4&eJEkQ-Cekl=KUQ!j8-H~d#lA;FyOaVsI;1`GJkmAm1&L^EUX-g0&0#JjF& z#J!QTDjzqqg9WPjDGx)+s+6`#{-XJF@tI0!R?txlgj;=%t>1Zf;S_pR z+GqK2@3v(BqL-IxW~bY^fy|O0FOVEZu}X*?t7}f6ri7D=%cr`3L^n)6s-)(Ky3OVk z5!o^d#!oc%dg{3<{_PlbnG0HnB@JuW5;KHPOC0p67utgyqGmSSnG}%L+cz!~p>ISU zCHe?cue)&F07I1l3bw%9fS>l+!TZzRf^!$ z>9ORJU|w2RU<1-oQ)rI3cu$xMlC`C7Ag_?hxP~UL5Va32ddNnYhx{f(!_1ln;#VqA z6G;)W0b4(Fq!eyaaP7MZv<_5Ykof!p!=&)^lZMVo*2uXBGI)$f6+t<;_)Q^{`~mRJ zhe@APtqOqA5$LEiv#m-PvAOWdS_9e*dWBe<;fNf3RXoB-6iatx;Isf#Ie3SlTjWw^ zo=4N*dPG=T2RQ19e3L1~N5;%`B4mDj-I>R9>s&9t3D zC!p|KO4Kvwisge0`l~QB7I|l+V{m1pPWwB z*nWPCq?OJ@m3;llF1>v1o$J;?7is3tRUvkDw32=ATaj*2IBPbh88}|ha0b$xc9jTq zJ7LIx2`_T??rBZ$78H7k#RoBeH&#DM6Y|9<&Uw_ZZT45B6nY)286%q(9D=3-~A_) z0l1;#2uk&_W<#d64s8Q7fu{r@I4CcwxhK?xR+X+>#JV^o>f92057Cf{YAJt!Y)G2q zSF7@KFmP1{Gq5vuirFomTM_rA4O_}5NJr6)iZ;Mj+jnL(SmDRJPh$bFruc^?`dE>u zSPx<*mwjhfP8zfqo$CF#HDB(GD76%q&-yT4)ao1rER3WxU1DY?+4tlV57eHMY=Y70eoiL;;FZ-kpo+nnt zF5}h}_yhYFX^m^BLbS*C&U``gS7TI4Y3ts#x0_J0kw22HbxLSBfu(G&xpycFL_IdK zHt9Z#F%zsT+EBV`=$qNWS3uN*3>uaVt5KcOIMczk9aRfhf$NRRrP-xP?g#44F35JV zxVacCF-?V}(khcAMT~HV)Xeg&BlguFjH#p_Y9>ycwojt62~vQ;%Wa5Xym3eiG2|!z zZRjm*#(;?qaG2i&c+}7~VnD`aj~9|G86gbv!x{mO+z*oS!Lc&8IkZJUiVU(R&b9fO zno|8W`7oOP>T$a|lY&m*h+rU4s=^5SClJ#6b3F9{e-+6SrCXy`g|%rwKX8g9kg#nG z$|_^|g@HA!FM~7)rR*Z@H9&U45U=SWN43>!#MbH0SU_i!NTd?!q-qq1u^ z((;Wlqvav+hyy?-zk>+w#aGb9-DvceCrjuKyl|+&jn$W{z@~75sW@Il#ZBxZw@ht9 zmnn8Fz0>ex35NqYXRzz|X^nBvSgI8z1CMO$D5`+Gwp=l~G|k!JO?P3U$XM7p^-~2> z;j$lMVpf29>@47&&H`=>{OvsJ5rBY0pOr#(7Lsv8A zV}~;;+ZF-!i~yop0;TgCW#RHBm`z3r!2{urJDS#L_)}P$+MwPW_^qCTV9dY8-!Ubn zji@M?qYFFW%Gei@?a$qWP$>HnU|?kOE(-&fMO{gW;-hJ}GE#0Bk*r`evB%~V<8kAt z6v0z;bnU~AszNyNL1j_^HfZu27zN%^)q_x;lE#(j*8H1ez(qjrED+V!f`!*-M^FKE z`egi6{Ko1}gdNsk_`~4aXTUfPR{RTw{~$4hfzK^7LH#!J>?kzn^?!Im(xca zL9%3N$jFWN{kx0{&N!-=6phm>okGFUN%FQxuJ%GBtt3H!V2jT?MM91qhL6u~rfvs$ zBosoU?GjEQAymVuJOie*C$T-_FZ4|P^u#bD(_eD#du5X6H$!K&@{j049w5Rej-#3* z@$8Gf1kv{ZQG*d^e~#}rhm7&Yavogd6fLMS4UX)S&YMJt6E8OKMag3=qqdP64I`E* znNCj<0f#Ms3 zn-R_-Imyb#_%09@ZWC*TfdE~`zB|r#{KPOJ%3<-(KP zM(o*nujm;CdCO_`2nU$9&dsTF#xE^}`yAO=KwIxk$5X89N$N= zv?9-1vQHspP$K3mTo7@PJ?cm!LI@nBP`+ihC-qzUlicUb_aK-Y?}_Bo-hC{B8UBWe z-ktvN;$yM=Q$+nUN4@Aims|RN6dUt(U(6?m{CF+t)UoX`XSqH(ph ztN&Eh!?Hoaono=T=cH(AYu0Z{BK*S9m-)Nl>u^P` z$JP2gQBx1YQ9SU$9Fw=#U-XOVG&RTS#pM2GMV7Va6=;XeTknp?;lRnLM{Fed-cLOZ zif`t}L+)E5coMi>4)S$;_|wAz(9#7|6)Ua5%_ zrB}_#OM1qpnU$)9Ijfn%|B0fm+v%5Pie;w_D8v zz3ZDV^JAe-$EHEN>bhIZ>F2D}j-BjwmgobacFg^bPDd}-s~^!ouJT7mmQpR^S!wjl zUp?z3xk5DJMs9AkW2;A>`Jq|}2lm-lZZ0R>l%K;pKFXh#DE8;C&>!Q!e5|~`-`A$c z5?mR)*N7*NqbbLjXs*i(HrGe{hg9$CFXSVZxdWL#+aEsnt>8_*XvL$KFR{hDwl`TT zQ!bZM`>E4kS16xVBZ%MwhaJA)18U%3NQC-lv+%)*47X3HLO*7C`{6u2xQKG3Uy3#R zQK8EoqQ7Y3T_6YJeKo)gG~Rse_}tv}W7NdH%)}q^g|+|QO8)r)rE?GFW2&$vX>_3> z(32zgaubqaMsFdI=_222ME{8lbHj3B^MFitZuK0^cVql|c8&9o?{zB0{B#ot^s<2Q zw21kw+T$l;Z9`>NhY>ssiMwaab+B2v9RZj6Uf?|hgMGPT_))0S*Sn(g^--56SI-(4 z=YzsrvQqsp)|dMyAphG25agzFdtiy;hK)ph{OaSfgF=s0?f=QakHmDG$;C%w{|Jl7 zgeAs$EwDaf3FF3IJKZ@j^>>&?)b+m?^6!^#g@Ft41Rp77@dW_ZCRbJpj*iveKrtgnB zKJ{p`@@@yAJ&fAgcG|uw1EJroKm$2I51V>jtiB$D+uAz5Up&p8DZjaILwB)gbjNt~ zy6}Ij1`m=VrDcnpo^M75#-tEWwI4@rAx4%*F6p78CKcemz~Hk!PW2Cu%^2=dz&%v>rVD&;OkU+lUF5Kfj~)W{3r+S8m2M1oaG0g_ zS5{w}?e|Ch0SfM86%4||5sUPhH(^VD#nUG37Hs6X=S2@+yyiv7ms4N zJken=_u&Sk9}AlqOb=xYfbFW*D+*Jt;fB*&YR=IZ5+J?PeR ziSoswaMN??{P<@DTrp8%K_X=3rD4siLp+Pwc6 z0D(CHgGt%91wm^Sp0veAdsK%f@tKM^w5BX#fLJ}J|yYIXO!yhZQ3UH25XafuHR zdo{G}zXYh7eH-OT{TiMZt;qkkA-6nk=l9h)PAK*`$;EfS)6LQI{yOOQ>DQJhxBz2fYy7|E`~R%}K>-*T z{!b?0f6M$#jO;A`Pkg}tVgl6V3@uHJod3VDfT*3L4gLRg|KlZOpcfRhbJqg=wfsHUkj;uU>~<(ZtEl#nH&b=|3Dn-qFrT$;4TU{y$(r zhhD_pSxm|KKQe)k?Z0rv|MA+JI67OHI1w`Z&jO0P|F!>v7dCkNl5HXq$(x4D+u z=>tXKkib#a)X*u2j>9^*hO3$PgGY#bsIAdC`ZQZcjYg^WiCq zl=BaT(qMrPXKhf{;Df>~8U1wt-*I-&QA`XXF(b>(Yt5k|P{`Iu3_-_4kLCp?WB!DH zcjz}xq{BrRtXXT0bs64$dKstZ$w!nCI!C$hCQ>B3`MwTYZ)&*-^+1pk@`{SsjMQpe zZMW~_8}h2A+p(ES*Mh8VE3b!&M`KYI*<6$jxrM38vUG1Jh|=*&AFa`r(>W|>XO+W9 zivaR5fUKiWvC|r7+lW|iv;mnw?GKUMsQGLZFNez;H?<}Tmd6tZ%HtX`LU5c@C|s2g z7BJj(no_7?0lj}sPii3f>J-!Bi3URsI&skG0 zB#+sUZNws%^cryN<(`=JCx6qvo0(gpXylm7x<>5t^^SsqdZ-ReVcL?vssx=%@pu6^ z)Rr>UWudMCWLsl7qmmvKbl#bqc)s0cU|C)-vvtsyQn^1HbAoAu5g~&?I_65wMa=&u zn-YHb!t%Vv&Rh_6HtnZq8NrKFb|Dk zqZ0dYjRJ;P0)dQr9mJEb!goBhK4e;yN*4C1K4YN;=y7>+mmQZ5%tOnWA1{E|HotJd z{-9~mwY5B_n}g^ifBB4PRMqaX78yGc4;dDNtOi~F^{>Vt$0vG^hdfRZ##-aQDIeP* z8>mKrEoP02XRc|rFhv$ZFihMpWWjg5ypCTo zZa(gG)N1mUv3g>O&dpAs=}hXG{d~hPQAFg5_}W59k_Ba&K>V>e*i}g*m&{E(JA0du zs%UL_!tUzK*#Ai&ARwQ##oCW=qRwGH0aQPJo;(!5>lpkLIx3+7_!xJS3Wx6}8%63F z9-sw8^yTx@zEO~eiML2_83*oHq*qMRsX$lYKLy)Ft3v}j2eU{6T|-Ie(3r7a1dFh) z%NzQ*65^&g0QDp|S6boDFSgnn%tPyUVxUMcdMw1aj+u;9a=)=|HBh~)7-}g}kS58K zAJmiF1~f!!Kg^N^S<`Pq+6}9}AwdwTx}4#_y5w_o@qePhFv6Z&@u4Yi*M|f0SIY^5A5UlIx&=g z$iYxVesxRYzz%(Q|HdebR2^+95fEX)JpNPW(^YDh$3Wnx)0_1r<>rszXHO=U=xu0A z0<(S`cVQ$Imsb)dGEj(AGy~XX({IB&Hu z)HzY9jn68^J2W{UUvkhL2Q;we==8#DVV-t)4|;Im z#+crTXWILUWhnb*q(FaQm}?c(Vo6z2lV1Z!#$B=_dduiasVwfms>{d)`r9 z8^r$d2YXhc9Y^nwH#WtmdKE58sI!Q*<0*av;ByAM5LZ0H%PP(|X4M>`R8bIGv?{5E zeo~R8GM*BHD=368UN^3)ghD+fKa{HZS7Me+0-0@@<}T2PecTn$``IN&YHgSW} z0xuXL?YKmsjc~TDPfZ>gc^dgDUU*EJuI#KsaFAdo8nugxYalumK!l@m%t<9dlK|U0 zoj32=hb>8Hi}cpqKOGz-R$Rozl7Yy^>1+#!u8EFDB-g4GnA`Bgqaeb^e~*o@T9bQB zM5Mcm!Hzl8xI2!StaA#aFEx=iduw5kbQ_g#!F8r{&T0-cr%UaXtzN-(-SuHR z519;4*}>#(NECTkN$?|z9ZCXb$mRKa>8=ZDPVQ?X;7@IDuQ2*6KVyPyXhK^i+ zkUSeqkiokYHPa>+qnr#GSvCJywFoj~F%YBowSx{YMrBYBBx ztaPr64RWq0O7y zgfBsjL#O`AsM;d3#c)e%k!6$%BMOWnQzGHl(45V~ld16`+1wA5X8JB2IU8M2Z^eD| zp%s|}$y7x=+2B!}Iy?(eJn$ln5)$_>K+&k-BfOi3&VJ|G)%ecTT@B+bdmLjju*aOw z3R$6a>Yv>E5Hl!Psek%#sLkQ>uU|ls@aLoKNSDf!Zga7R1#a+nM~2OOck_QzTJb4c zAOFnDe)<19iU9q*``xkUO)5^XgxpG!X1>1}#KGFCi4z9& z;;kIm9X+-L^g9=#U1r5d;jAYr68FDis})>9^0_ic2=V!7@;%CkfVY`zC z7~cU%tUnjT7?EI}*}u7sLU#3@GHpT5O=}JkwXY1oB{gP48ggQUEr&7_&8AG33B^Wp zQjaTWOw;66tJ3np4De~sK8Wq}Nq2=$4@NZOnpZhL0rM7j z``oqKHCcgdi(KOghI9zrXq_&_xpHA(&%zxDjWo*VFn&gcXT74} ze%JexJ&i8SJE!3zG%3r6z6llHwCfB)=i3q3A0tqenX2EpJ(vq9(vU(=coymqz|i2v

%C|-5`w-Zm|nrEd?zM z7VZXnJ;d1*xyz;Rl;=|L2I!B9##RFtPP-HepF8qj5#e=+0f%Q(=(33BvGLPsdnrB1 zAPs4h4TvfGpgc7oCasK-F}^>S;gC#GUA_7Gj{daZT;bFnu-Yv12TO5DwyJn4fy!LS zz^e;KmdGFlBuI9BYEeYqcEjv|!ElKN-pAoOwlx$^80Pb`Ro$lUknX%m^N7|7r!yie z0>}#ts0&PuO))@Q#jhqqHfv%qW>V89;VXdY7f|1o<9R%7#_NPHRl3 zO!Tlc1eGlXqd*U~hLbOpDfS%Or*=8*Y+Us_(6t&BCbV{VWRg=b+SWbBhmYxGIzo|P}LLbaJnk*|mJ&k1Zo8|jY`WbU$1|7J|v^pvgV zQONv4vrvG|M)j10nY|x@LMa2s1m2P5)4t=P$I zsy{@0i-F7Y2->F8G*JAllVnvRVv_0(lRpb8qRi>}0-tAqp8mh*3?t+J&z$-H`{99= zoq_HDl1^FI+3N|J;;m)3TnAl3!M|asW{{=RQF*eRKm2*XL_}aHAlv>}!`xv4wJr27 zB-d(dl;sn2l@qR=lck-;nEO@U4-vIu_7?`)iFOZr?U2#B^UGc-1QgLe{OkZ=!}?%f`MzS|S_vJ) zo@}qHot?XVw|p?0-70VUJ`Q_+e|FwglD7x!7nyHyzkD>^0TX~J1^AF}1jjF3R|%7r z-v4x+8A*btJK1*HfGU`UqmwtkMakFYP`6v(P7mj7*oM|WljAQU&Q!xY1F}a$vWm%o z4}xGmD!z->)>d21AyXGKQw=ohX(LMel$7Q6DZV{94qnX404m2D-pax97HegnoDX{v zn3&|Q=&7O4yPEH9S8b<1Dz`UB#NzxMr!<%_`=vN?EFV>OPBmiPPikI>KzH?@2@l`l zaj%=qAzDnJI-z}fNI1~-uPy?J2!^+hIgpO6O#gChRLSgAXYl_;eBk%{j>i2J+%+7c zo#2P^j3o5ylY7v;kht!<{z*!a$g zEw=rco!Sc6mzDbEBcSZWY@cg+daX}R6HxXgHy!O|Y^2CGN#*#nLn)hn6IuOu6W-?| zF?!!=1Je0$3rOHxzEoIP4e}@=^KHqkr>Tb`2@ghkaemf_`*nw3 z`~9v>`S!aypn$6Z-wY)RI36@GH%JV_r=10%v#tkeJEw*4ab-F4sx;Vz75ffm*vGM3 zdhMc|Eg@blI*=gRH8bPh#Ph@8mKp<1$$9)fwVD--f-lywRk<0W5RmPtR89% z1C|7c{zzg|ouBVW?3<v+B6-oiE2LEnAZxi7JZ{?5&n)QT5DDo!&j!3}9s!9j> z@S~s*?3{xr1ZIV58PR8%6!q=ZX^rH+$wjNFsOPg{1D>YLRzoZp7SIT3U&C&jlBg6x zQG5(M+N_**A1Cn=NGocDKJ~)&1L>esL#|F>uGe!0qd}B~nSV!FKf5$Au9;t1Au;Xl z|C)-bT+mEx_NOk(UJEKT<8g};q~rbb7Q%rLqz)G*yHSjUnNWdY5`%0f3*$tct}iPX z(J8Gxij8jU(L)cLSfK>|L~q{H_lgOW8qBZnbyj@c!1X#=q> zVPF}Zxo=&CR51kKEKyet846u{mt$8^X^W55O}RR1qT)yfTHCB1gy*oSbv z4^#U1o`2qTRfOb!6v(GAXxXA2-+;0{qB%+96UNC|A)L7;JME&XPU385uxt4vK{OQhD3f*FIv(OU=uKc+l73{Eb*ij}&Y?U=1{BSQ!oW^EvS_V1I_^KK=FY7f-R+rx zqUo(@K2xmHHXnuo(RL^0Rw@V9T(VxQG~hgpw->Vg*B%*-B>a`GPCn3eK54@ZfSb}-fw1ty@_pmAV}9HLY;&ySPk}aj$+y%?)AX4(EUJ@A;eWa zX`@h&JUDjoqnTTl!iS?jE)YiMf@qRGsQy{3;>^m&x}!jTVjA2QPp#WKcR#djRY8H# zKa-c4?{3MXga$LD-*LT+LEhg+$o1tOM~NNYl9d(11fcf|)QJiVRy zN@%b-O!kQ9R)rdmtl1!BP!n|!e)NLmX=*DYx7ksAJ!^zAAxFZY!J8}y$7u7{FrbrbI{N zgglscyXhluNisw0bx0D^IREHs3wx$*xg>2hDW!lVc)%&&!Rs@o5Of0Qm1ln|Wvl#Ib}5-tJpmJWFhsW#oL{9>osyOeEBcwvD*h0&UFnPCcxE7P`SJo( zxeK#!^K#D|GlP7S24P$}h|Ic;EyMH5TozufEKKE6v`a9v;`VOo8Zj2-L0)xg5NGLt z1A5H`2T0_bf&b+aZ-^K5pO*#*SVK@nATaPEqi3YFkZ6660qm=10D~K@U6+949N%Ai?i&rpE`D*3B zi`r^^W`_W!&8ZDx3luq(%_q}jdVFCl#8f(ZVLI$_G_=>@==eo&nqjy`Z7r*!Ts4

#rW7ck*D(TCon3>{%aas-^4(q!A zg;2wDu3oUzs%)ebwYx0eBjs^WJLzn=wc2MN>O60vpxx#TOIbAcqSLg0ilN^qFg|`< zy37RU4iys9g$ijFL)EV$#)O`*w7tQ+L_V(1=^fhWX~`sK_XIpC64SN=Pv_ijS)Aj* z-CF7E#xfsmg}#-{tI*9smSoJnhI%uXoDmXJk70>@af)*IEH}!-3JHpjsd{-XJeE-G z!=2vq1KNfM@Nhf5$xh5qvd|6`7&D)i;2FXxJeF$o`GDx;tH$35ClBF+TMvBWFWcF4 zNJA1!)K@l52!P;evkVRBn5w5Cv6_LLzNQSUpN4Rt!v&@psFh9R(P6AAwVb6~q~S+# zZLIH54F(fY@XM6#f)X}s8UQug)rzW!@SE}0wQ@*G)x23~D@Aoe><&wntP(kBY>_z{1#NhAy~Q#f$K6GN3uNRG2yrlqY?68y1GoL9Ly=j z&DNGeST1))GX7vOResV>=p0hlmhmAXvu((E|M0SKj+6xK+yC__W zGVH}rk$UPP?E-CSrBH6T17JJ?^J)9|L57^n{xYGBc@9!Cc<(qN8fsZA(``o}3%$Y= z(!)@wI)5U<=zk-?1r?pv$?%%cX_e6;b;JD!j%L;PV?rubr-tO)u?@qPTrLe7!Xz5f zO7nvL*L{R-+wIrRXT~+W@|A(C*ut6M6X9X}L{0!2IJ1DXx_OhmLUKB^$mSL58N3S( zl=ewWRoU`(nGe&+TL_OU%E+{>pzZ;sLPnz35|}Ta&OiO;NKaeC9n&Gjkes|E_)VF# z&-*=m=rh1(p|ek-I?!vveKhWcEU2T-Ezicu!hi&1Qf;_KkIFLmdV2M}r(&I8H%-eX z{g4$!a61)q11ImSVPa=p@I5X`d@9bvr&XGK+Rnk9Y_aBb*0mBcPh1lo-vXktM{YzZmUMp+fRXUO^IY zMbn8LaR|1&oO4LL`0wS56rZ7>0uDbH2Qu%HS3%-cVU32WpIt?&ZQ@OSZ@aYX-)B!bSevI!=A8(wZOC>v+g45?%(1 z&IQLvUh28OW_qTH&6^{p^=4{y51kdM1X4O_Y??~loOR^*f%PQ=?;(<-q#zlvJ$5We zDe6*6GZP46wNKSJwxMuzPEk1`EpQDjaq}s;Jp~@kzA{!wJ(i*zH29(f8HZZ_vZIe- zBsja&0nJinb~Jz1l~CY4`h>3%D{jC<;AVDL70(JTGNkqLosb}AUz{(` zIBbQwD8XrtGk67oiC!Ce+}5uy!Lk%XKd0~ou%ktSm;I{JkWo3AC^!p~?76>cz#4!k zwyFQF$^EeJo@m6-(tujd*P>PT2F2QMNiC^McJ!6NEDVp;&N-qMg?p2?z^2&G%|#iX zxf%$ZH+a)xXlf=~#f2SX9?!us6u(5Sj@yXSvdoV*zi@26t}!^h5ru9#GESn3&>~sW zo-|RNnJ5_l;$MmlN{`$*f)j~DGlPR(K_kE~luJFDQIMuM&^E;SmT{c;rClkO2cw#7sI4t1LT4I4PP~5Cy~xrkY4XyS zbt1gZck`uR_>~rdhrmjA-g^_5&N&=K`Z3FoAYa|8#~r;0doe^dwMWl6AI)Wg;UFV- zK^BWF{`%#1!HJhF<4#sPPt~vryD`?9Vslj1Zd_J`V-(hBNx!{T=u%f^4rUIG%wyhR zqX5%L?hYIrI_qeJw+sh`$Ok5Ij1F8I+p)o&WP(JQjG8496v5tLR6QeuOXoI~l|ZR^ z6R4QDwLiAy#938XVKzF2x>Qv_hIFHL$`96`=Lq#M;KHW0 zN|ht6m|mXPO{?V}!gy z89y;rlMJg-g!?mB^x6U2Vd!S}h%1FP<7w#(A75Fbc|ckh!Sttd2t!?#^UwR#FCGT_ zvdLK7FGPeUWh!oLiQ2&%#qklJtu>i!$}IJ41;n=n)dgqo zJByojvgTI77UOn#W4GWX@!$H9_%3KD2LE{dHqb6<6e+78 z3gQ;=jX#Q+vVVaz_>NPWm{mgH%uoDV3Og!!tv?Zzo_X?to@QaGd;0gQ(CF}2shoRM zzT1^i;)wsl*m*oEW@|r-NT6TkY;FX9>AIge>-S&tkM`X6zg%CFpbuhir%_ZroaD1R zy^Iifh!cy*IFM$k7~3qPkrl~58HYoQA>C}P6rCzr`P8Eo0@5E1a|S~P!cUX$IJ;8( zxz~kLD1-L%J9JP9H?wX8$L|eE%&wIqw74sv!2k;c&pgzRhWBcF@?4YMe#9U|X#W|x zt|X<865!9uqL-=2PX$Kn)1}$cy+NOzj0S(ZN`E(ZdP84$n$;bERvR zcFAo*CwzR1H|e+^M577i?-5W+^c+uv2vq>#Hw!St*a<0Fnf%-Dd?&bzo@clzGgT04 zUmkWDI!aI)r;}zC)6tnuoGhjD93X&lT_nS5r`Z&w9=WY1z$DzH8wF(IM5j zv9{jQN2dCCq83*YHqR`d*CV=t=W6_vE#Ob%XEZqflDO@Z^<{jNOP;TVZ_kfXzRs=Y zR6V)-=Noi$w(~tl>BDSgxUiM;J;TsHPW_ucu=E=FZsHwlfiU4F%D(lRFZm9W!h=J@I;B)Re^M`>yDVCXQi$6$%EYV|-^m$Ej`FpmtHFqw1nj}b5WtAXcd0Xa z9pPZbJAWE7o;|LtNHEt}*<3O|{SV>m#;*Uhg5j*4;R~r#K33cb4PR3w%7`lm- ze%#B=%Fms$lS-%YW909o^*MVYp8)ADtc#7Aj+5@+%0lF4$LK}D826#Gis9dr5FLHk z+M2vvx_@dV@HtWEVRZF&aDA7D6Md*{>ITOhi>PrTuK(^ZW3~m@Hq`yy^_^mvLonPI zXK8p;J2*0#H{7R>VX7O|%gyVRhriU$?Ef%eHol3ft3dtYV)9Ad@3B7uz`^>r!o~tn zL5eo1l%Mxj{QXPrypH}Wp6UNVka2Gi0W+7=D$&ICZCQl}Q`LXJI zeEJzZ>f`+?wD(}`nyncS8mRDtS3DW-yDU;n|Hl$!+jR< z6x7l!c}7Czg+|!IAZfm zNw0T&JDc784!A3p@pg4cAlT<@PuW4QzaJRBj9&LBkZGs=F|*`-&UXu)ZAn&63+Fn+HdfZrV z3`U$n^ZxkXPipS)^Y|;(&-Uflq()Dk2L3?PI)oT~b7RE+HQ24Vsobsk+QPK_sjJPK z{r&pJ;0MWJ_{8`9w%QXsq|+{W{k1}Mvu3h`lS!~68mN{b=I-nQXXpvgs;N~6}Y|&J{Qm^#WZsJ6|6+{$Gft zeeomz#Q==$e-6O@r|#wW|BLQr{tpTKpLs6~GwXl6`G51?@i^Lcc(K+3 zx~GBfP)Njp``=hCKf9-jiCW8N!!}gK36eYBQWf96#hod9GCfH@z676uxA)`MpZELT zJpZ>-fB!eOr}g+UC^cc%BkP%6tw3So9oD9O)O2x`0RI2o3@3>IvIU-bb9Z^ zmb>05s1>v9)nQkPW89=fJC6Q_l>fn>9tVk4NUqh1w%yK{Xdt+)lepaWf5!J1QkIgl z?iJT>deZSYLdJsQU@YtaIWKZxzOiPOvo<7oq7~i~8xmv3?1QJIL@orL0{Nt(XeQcb z?^3gu$?wRfx)Weeq|cVKWykM{-jzu$56Ws1o}8i8%(!?fZwO;I-C-8vP2bbEZWYUd zfD=&`&NUA#bH2vv6%*@&O%oI07)f&Hf`6U4pPW2+sx@B`*k3f8m~|S5TL8r6KGMhB z7hz~Qn!_9cZGfWZTMLC>lW9>h-Du29Lns=v`q&xp5;MTj#=&{DsB;Fy8$fMuH?<9eo)@}0B87`aM zsivVMo#UQ|z!dWERbOml?5wN;c;vhGybOHc+s6E3u=Wob?)IIjIz5I*W%I1o14Za@ zUvu@WD5wkg+eeHIjPF-V0dckpQCKQiP2go{Um6lcoS@$wp5Ps zXPgzd3eU}sAnSdxQ;v)68d@Ppr>ytyvNCbC#_$Cn+c|vIlf@H+C9Z~S(Nwg~kOxRN zPV5AJNkS~rdi0mqA~+pPI$XkN5MR!r`$U>zfzdW?j2OR%ZQ^>WwG*ttR^2vW60jLC z>v4%3pu_=kH$#!W)XV`hOf`^ZP=mDsdTtsy}HV`E0oi-^!goNWj^xEgXU86p_FSUMxf z%CNFofvICKWer+(=s(&U?a^x3B2y(cM@G12NcK~5hui=Zj{1E?OZiOz#Ts?bQ<4Gp z_~9dis|v3EejObTnk$6X|475)wmgQH^Sxmill6=WXnw?KB z%4DP!t!=?+x6QCE=h8_6IZjc6Q>``3=RSXqtAq%^l8~B!0I6AkHX&j@Cfx%CDB;R6 zCxK~;Gf|^jsA5^P@L)mKMYfLRZIY@@1Ml5kWhfyymYb#Stpy~ghVxLg!w3`+A6gzV zuQ=--1vRzg>N$q^)m7;gLzI#})+m%&|4Snif}tO@{1@Y*vFo6p2rmJ9moLZNOCy(( zCp1a@o@S{thdGk9u^`1WL)flVdcjZ`jjb+!c{m(Sd$nh(&laqMCBp`x-G{H9%MTUvguFeAo>}wo1;FinmbM zn&INXR8-Q6W@cWo??2eHTqsj8rbNTFm_jr8@(Wg*uXq72gO$a2%qR+_Pv>>kLw<7k zlkMiwa(&gy+%#t+bi?7Cq?zl?#6S_WVP$O;f^@J;T{;$g?%PqUU-bPs|$SC(*DMcNF7>6fikGze@FA-F|+ zXCuOj358f}>SE1KFn_kz&PCdUhKBwB$lm3 zHI)f}@8&?lEr?ZkotHOriW)crK-HHA-AoeLs zORUXt*ZOeT{FWfl09Q4UxrwUxOd$_p`dlMErLPtuFSrS{+I(D~15`KN%HLO-ZyrZg z25D2XU_PPi_UQ)aHbzn6rPC}{G%mjVG;=GjoE`Nd|6nh~jo~c|{@!Nc7SY|M1QC`P z@b@7bcR%MO$z{xr0zQSe8i3_J`BWwHVh~TqY_ui$HY~Pozb;CKME*C157XiRFdQI zOEl>)P?frr@ruN{aa`*()^LMQj|E?K3c@93MPM;K%^W1MHUInr+Csr>+B(o{B0Sx2 zI7NI63MNy4MI?06faaYazHc?IM_m5lm{FKk7?dV**5KsIGID_AB^=-%?G0|8oBR*jYnc>z z#uvCm!u(udE5B%Z7uzx=I^emORzHg;w0V|}YK;6y7B#jebjcCaG7{$)^#GC~I`cZj zjbJ;;-*8^EyKft5U&{%)<5g;)MQFoSwLK4Stq@0h?@4GjP`Rf%DcF;hPyTmWVmv|< zjm$`)MMbB_2YjJvQG(woOntSiw1olWUKxoYd`XUrT20EE8y4HO!>d@!J1Yu}lx;X1 z@^_9b>wY7j{Hq3uM&qE}um-y>Np54iRk>~{|HNs5%nH9ko0bLe2s)zSG&+0Og4-x) z0^a=8uH;yG+CSWT5a2!9>KMh+dz;_;YzuiD_gPwbX;j@F3)sq|7Uy46|18Ja;6jOCpl(LaAOz48`o2Q z_xNy5V$!wsI$b~=J4!E;%wL*P$__qa zqLtzx1>9Mq2R%Mp3C7ZtN^n82;bz(OOVtGwo*iME2LsGKqjb~H-aGB*6RO3qU4OOe z%Eu@BzNBUh%UTnq=k_u?IPv~7nV*K?{tb1^VA%Xq0oQF$iEyDo_@#LkQ@FPbp9{f) zTeKAbYx+1NWa;J{cq=|UXzQbFl_{|7a-q05K8DFqS`5ZKrABKAXkrK6S%m4ixhGQF zhx6^1c46;}(Yx*=brmOG=~|B%Hm$)MYy&742!M-zm97$(#iVch5T?&C1JG~}O}a{R z;6L7b3$TeqXZ;V}i+`A05$+d(_pL@Gi2-1AyEIit9)d5dutC({GD<#yE!W!JT%fX* z>J*-m4%zONUVhNDr4TB7&}zl2Tt+t-k@g_^u0Zo=mxNSMC*jH3ITNi|pMt-~PxSTT z(9)hd2K`5dYktjAh!1!b{>wgUP@F^m898G7{+0S=6K@d56JC?{!8;EYUGKG}pgg=f zCeOIELkBLhn*tZ~y&vD}{dNBAf1qp3^RuJD3KP8nW&r-kDn)Z8Fs=id=Yj^nfW)d{Cq|gu!{5<3RW;b*+fZ zzoK&L_T{++WUD^z*J`;Lwr6>sZr<<6s~%QlTU+A4)asQ(Vac+-nRx*)g9{_^SvG)3KK+moc^lld2?~K$YYZ9 zCz7NI&$rq|LjTBmQPUb~Tu%8DXVG#{fXguUUc-DLVXAseb*P zpIO+OluuC}B7yD z@_a`B=||(GUL#z?vG+<{e%>mFS!ZX*H{>Z=Bd4LE;w@NhHA1$|nOn(|$JT%9JbcDv zhYtuGC~z|z4Zw7s%XG+gDMVgo33IcKgeG4dos^ovYdbGC#*415l0~?;BsVy@(8Bve zqfAihgM`P4sy}sXK^@&vMjhB>k^J#NZ9w8woDkew(PKB8aoK=-1+r~#`&zQI<*vmk zQB4YdrTB-y^em=+R+GMUP^UDP=P+4QTA_%v%NaZ))@;2|lgIO3DzQZqdA_#km(#j- zk!_Ro^X%#e{qtTy`Kb8Akq@^mBDrx1i(6E@LSPo~|r{50+jHB&LY3y-I$y zan3Cea6{z?z{ z_@C4I7oXpM@aPFtB6L-RO#$obxqpNRbL^;t?4W+F#-ua$Z4$dNUw~WSMg2_>RIXWiNO1{7w0 z=k_QRg&{NW^M1S%l)b5{(-t^C;XS0f6nbG8{Q0eJ2^R45S@aWja)10jQO(d6ex+Q{ zeVuXnW^Nv$`Pw4f|Goxg>uw*msZnjz#@>*up+TcQg_dM!Q~vDga-JT>-G7A$Cn468KxtZ71?5Zr}) z9_|8T&r|gx`8|r5`+B1$2aP%dr1p{O7oo3aTAbrKa|N`Zr+SoJdhXFHt(;zpPEocg zNZsXr{4l&werv%jos4(aT%!*S(97jpMN3rIHemFCI@Q6#22`B^_6&2)Z2!xa7|s_T z#z+vXwk?oBcnxCSNa!yg3P?fClz5&k>~@PH0M8IKoC8G~^uYw$f%yRh&Q)q}QVdJ( zb=#Z0+(&zdGN?SKwogUv4@K`_4LieC=8l0IMIjrM*#IM|E58wi#*J(YhwrP%?sZmg zzMI+4HpUDT0pkT_{0+etPzD4iznI0BaHU4FmRexnmWNGP+$J8UR9O|C_;=>?I~{Oi z!w-{TA?D05U!NufoP!~uf5M;(>RRJzT`J7lg^GT5YdSktS^xTyUxyB53T$-PvFL!M-%X!`ZzIcr0~Z>~Z+dM5}Woc@(8GZkn%Q5yV1Z#zQ7hm#~CEr2VB}OZNjRnQ!5o(z$U#=G>U{3-#t417Q6nq(b_v~vIh zJtzv04O_uoY5Vk4+m%vxfuHnL4EeoeHn*bL10b;~*VDmKO)bt2iUwFj>u?3`{H*x)GnW+dJ_Gl2f@%wOHS3HRa-m ztrxgl8+{Ncw|O^UQtK^Td(NN%Yj$~yvFgJQPvncf_N~RxLPwKn)hgPtSlMRPjL*6J zc@t%;#pWZMADDuGz3Gn6RB`m=#;nKg=78o-JWxBE2h9L^!A-q_$309}MPc2ZpiAhu z*rO%sNT2s(gD}bvf+nMpWAe6Ow@yitBVoC2m?I5Jo-q(d#^~Bktx=~DtkU(^EZ7Rm z3nk2Jg1q&PrUI@jy_kh$!vbBJ(;=9@2QMdHZb#-FBH4r*sc4hMQ_jT1b!dthW42xm zK+Q8~H(R$3=Ge`X>}~fYU)79m&Yh`^P(Vd7#ex3JUBT08)&sZGo_HeNerxRqjvO+n z)7`?g5Q4e-zuF+HX>xFi|2nOuN@iN($yZ39K?fAi3a zYd-zDFl560SXAl5M-l12vkXb{;`S^DJ9C1X%T1+Vjj zU51c{_OiE7pyHII)Xt<=XCzo@Nz?!E?HdrC6#1M3O)V0W9!Gx?-5C^|B$Y1tv}$2x z>p8VYWuqe>68D5jcVAFNOMjhyE`^b_QSY&fWbKex&rJHt7qza=_t|@v#mMjph zgr4>aA38G^4|)sOyH{S?^%k;#uF#JPFDe7)v0&s+Zcxya1Q!TF!QSlTH5H6C}=ah+RxhnSMv`{pME|1;H<e5AOU`WGzW0Z5(%`$(N2dv9a`)orNB{d1nqdlMDN9+G-#+?YTPq#IB4yg{ z?eqOq%O<-CLEVO6-#$!c(D%(|Pnv)td!c=+zq$W-Vl&>~_Z!brmD?l#0*}{?hK7c> zE(4-XM?jd91gZ~0@US(EIisZj7>I)XsV6av^y{V5>?*fPiW;c56l~TqFTk5~2#?wm zd;^fbz%2>lXa%~2eS9H{SNKXrx(_URhtvvk`Slw<}_?&+!`5=dR3MfEyy{Z zW!x-=Qfq&*3#JcO&_m&uQ@5#BJ>flFiU+p!T*p!U%Q9Tg3(tGE>_Pph7n08=9k>_@o-t zB#|~~E`(x%2F&4FVU9XfPhCIXg^TyT;+0IgB^g}cFE*LRXoG4=a6Wb5izL39!@MZx zJ{iQniJMf5TVpa#9XZ9Gu?Hu%9iufmRbq=%1BcmSpQZpeB&%sB3tZqJKK?~&S`%+7 zf0^p`w;?7lQeajMEmi^?`4W@iR?1#UXAr=Yf}Kw=aGI+E8&eJ~EU({i<&YT{**Vx~ zY`+tKfo2kFEKd!`nihg*OFxAsQ-CpHne3?k0UrutfvwwI7gJuGCwbeMan)2&B8 zX}Evv?EWoShLNbG#DkL)NTu=695<+)R0B%k)it&8mM-k3%2rXWXfj&D=G|aOS>{fv zkDm&|Rnr)78`>0^oDnJfvh|~fH;Br=3u6TXnl&~BCPLVGZE?yGzqQHztn3|c2;izK z}?TT$~cF9WYnq zexGoQpcQ~z2&wC)sZ{q$?JEX#95qgyEsC;7sbLytpQUq95Vz)&RWBXZXzeozh3lG$sa^PPv~0cJ9v3p<&CSd%a5d65=f>Y zx`EHo&*Aty#5Hf!iYTT4QYxz2Bf`dD{AQw8ZHgg6c;RD2Wmc%&C9%FdUH-m3rGU(R zKemY&*m|g|ZlSp}=^}KNm_%VN#rj~I-w-E9?%RE>ax-U7tAwBO$^2`WYIUi1oJbYZ zZaqf|x}$z;9CB~NtlfZHwY$bEx=lT%S@A*L_>mZ`XNCrejtZFVk>lNoLaVmBVyK=A%O_loR z=Rh{e5&^j`D^gj02TA^eN9X!ncc+=I`v)oBW2M4t)_5MU8{kE&ebCe?Thl04?_cB0 z9Z%YzD@=&^CHv4;V~dOv^-=qFsF^b#?DdM)6KfRMteM~Jz3Prv7u`q0K7Uym@B6Xr zCYbMwD`wM);@E0OO`r+0Ds1uZTe^l#>J?OS#i8qv!LrR?#_jWY2P-Qu&XH$h)o49c znW_S%W!W3ppN%;k4)KYo6PXx424jJ1@u>JxmKl~jdt92&W4ZM}rY!IVAlx^SQ6@X7 z6`ycd6VoBd^+6Xs#D=KrS8?Mt(TS~5a>s`wo?9Bp%&BruKg9P{tVA@juW;0w!RlT| zd?^X+uh2|3leH!QF2|Y^DiV%qZA-p%>>WN!D%a>bHo9Vqd@-gWQ?W9f^1SCs+am@Z#Rn>2C1I`(uv@YPqn1&%^ANDfIXcmS!OT!r4u_K+H5) zRJ3xVr9<`;yB5kB5k5w-7|XjLzMlu!2UyT2i_2JSj)t2l>RG}rE81-Z+sc_NFZH>S zaqq;2p)l7p2PGX*|M zK=Za1)vQ;oO?AIK>TRiqjv#@{Y#G5_2T$HqOcjJPWKmIi> zx|1E&St^4l^2lWSMTuE>tZ;_BiktTHye}xLWo3EhPiyE(J;I3pW$`xp5DRhzcpoA= z7U9D~oH*kdJ@li>D@kcpv%wGq2FlI!i*UD*X3%(RBHDN%Qi-|#&MRsJvH0c zyQQY9Q8U=HX*dej!V-UrA zG6qPyayk8w1%RWDzgHTk2BFx+o9FhV&=F;&KS^s+z3ZHMzlA>P+!Oa^Sx{u~#=C=l z*Jf0# zXQyTAnIxXCol-!um#eqp5tkW14pPlhXAEPRcB>#|(J!9dRm{RcaTf9g7Lsq{@x6S$ zR``KjL3oGOQ(hKRvnT$JZyU(qiLu5_Ag`7JRNw@-Ow`Fc6gw)~V zONR@}l<^Z#BaNn2PO|kh4-VU4C&P$-_EVf}6{AD>UP5_7@j+ptyIeiqBzAFNKJk98 zd?7w>DkH5z0L(G;`liDO?xFyeB| zpDoIHIo~wP2eu>htu+U@RM3_g24Q0~wdAWSy&r2#w|o?;AtAhcpcuxiIJ&~C7?*?uy#{tu1nq$`oADi0w_9~!Gb}0M^m4p}g$TTYL>(yW)L;6@KdjTCTW=iT@to+cKbzG}1>7zakS3h??iSq-NKl*&+Ic-Aj^Y>wn`n8Gm z;KEUJP>{jwv*ymV?;S-m6<_Dis<_dA?;=M2X3Mh#%|cmO*V+72o$;HoCg;FcKkPNr z*?Kblbahr&@)~oud~*!0G|41s@Agq57+&%O%s&iTV1nR*N~>_nvL!1HfR_uP51p2U zlpp0b$L?;_=fO zGki!E2z+D&)>CdJi%kn0=e(z8`sNpuu@7mv2h$$}8ziG)q{1r~0iYDqC4hB=Pi0}-2hzZnO4nQ0=8x-RGS;l0O^bW#ybVEx=85$!P zfRvCSO_f6tuY<|7i%2aoK}B3ULIm8SJ(yDTzWBPCw{DY#J>JY@LF+-Ho_Q^4Q)>3m zu!)($js8lpst#Gm&i{>?b3W^8q(=hFwk9(xJg{bJjVgN139hv9f|ayL3j2t@Gz5@h zz8DK6F?D~%Gx9B*wQ)w!RUEOieZ+S-LZ$!v`QpK$F&Ps@v8d^o1*bNAXve6WZ!Bq% zv!UneHo2#sXca0$=0`DZhOk*?F8Mq3zFk?pn80NmU6@d)Ffj?d>7ym~!)S}8j35T_ z?PfX7h{+6d>$8Qn$Xt;#oK|eIk>0ku*-3PIC3>48A|-k}62&ci(9E9g?h*~F;Iw-c zo%-}>ihW!(k2v&q;qqk>NP6s8^!+++cN?&Sz@gS~HFHYR%lA zoQK4y(f*;#{vomgJnbC9{^Dj`kh}YGU4*;)4pqx8hV*{C3nu{q*c+kjpx_?$EWOLd ztM*U5mD$(tn3~t1s!P2~iZ{JVq2q<2&KO|5Tl9(=O?{+^f)8kYPVjGO3A(P*cTia3 zIHP|CqGoWco#k*_XW&hA9R~V><{i8I&M9% z4Ia-{cD=L=1Tl%aoT?{n1U&N4Sg*fgA*N;;HOJ~<5`P8lXdZSm4n;%_L!v49J)sSU zVTdg6iGe4^>@O=0J4Msb$QOHIX@blV82u>a*MaB7OfplC4gg(fmuSKH+J%K=5N4` zFBTgFn81Dyd9SN?yO3d>-oW?|uH7^K{WRWRO|be1HY}>$RZb2AMdW^nh->`2Iy>gR zIM6*ZkFQP;LXA6Z?&!P~goUAbNES=7ymL!x75IJRGHqdND-yx(aiKx0MhU_N7^ zJwlL=K!LJfxF2I7P0`8%`7l(Y+cv$i4~<}s92Jh{hl3@0ggilt5*sZ}Ggth{f|xEa94fEk zVH)Fej0_o9M&fpCAu})Jh}g)^nWCCbF+PPYzLHwYyym-plK4uMq513Qp4)10k%hf1 z5gdvNwzYX_JvO9~*8%o5$?S%1gDIe2N0#Y^9mIC_Z~Y9D=#(S&_j7c%#4nk1hV&x7phY&aya6=7MqkC^&TegB0aq`fXl1BCnlt=P62q zD1ZVv1Qz^^@!@MyUJ0a!+7ND!qVU%2C2Pj`#%J4h(V1`t7TX+a=GhYv4mj%NW9>pQ zhX}wYKl8kY3;@s9SzzI$%L4+JH?Zjr$A0y-WOb0O7RzVabSH!o+9vzMECp6K$8!G( zeQ-RJzQLToLV-j>`<_2$0za^2LCFqNxbD=HL8QTwj7n*ZZJ2ExmN7}zNy!JI5}XW+ zL#yyxMMsg+o+IhO&)i}rs%%?4*xG2!zW9cU4PGAXGG2p<-Klc}A}LXN2+bV~0g&Zf z!BQB0TF={njz(rJ)<+2*J!{DjD61aAs7a~^V*^Z*YylUXBu;5#zJ~Si>jRD#T}W;V zE*>UG?q0S2Z@abU^yt+Mb-p|CIHw4Iu`>*1dEGUKk`ptmCeAe3goA-W7Dl|LYb3A$ z_>Z6>tliZqojT9Cn5B^r)lm|sww_GKE$Kn#+p`@#Q1V^r!+KO#V(tJ>e|qVME?Rj7 zYm>U3$>=3-JJa3P&W-)=6qGpYeIyBI7kW7rt0J`)B<;6vmEZE4A)!;Pe{kT?(SKri z?7YGTL=3MvT-qs@kPPi&wGXrc=)`ZN@D@$d^j7Mvsy;Z5)J8~qNQ%3 z5K?>AJK{m`UmsPc3JCRA)>5!nJ$8Zx!IF$K_P=oLAsy@PtwiGKtU@P7cf?df9luUr zar*bcS|XP8hUJ9L;N^FCQDyiiPycW-1{!a`V`}!eMG0>dZQ1`N-Fp34`{m|wVU<*? zavs1uAhQ+wIxs$3eMRMoXJ~TJOY%c;3{!R@vembPUZwIN(APN2SwsFvVm%wJ%i>EE zbb59h_-RR+x<`cm3L2;BB;1>Jn5dts;41_=vMny3XKfuAyTmm|cq-C8J%3-8>drTL zb;YS%pcuHMn>exJ=OEjh^;?>`)H(PEk{OzznX%ttlbh^vl<6*$)=>AfkAnA*Lgz1Y zjUkOuwLh)7le{Lc0+Vom75;~1hfZm!!{6T~g#%bRTkeRz4m#iyRG_(JUA+chD1xTc z4Ktu#WP`5mi!tzS$;ZOMxdB{VjBX_d^x|dXCy70uvdt%IzYM)843A?*LnDva>JxLyTNzj4{I6h z6jbaD#16V6`erHWHPl)f?V7;7L;#z_vQc(#_8J%t>xOjcwT9KaSmLYU-`$@kZ-17m zdIKyNnS^*y@P-8Keui4~?yh;uA0{EB&jQSml(YW+L?qi|)qrW)K6;b&Qky)MbJS|d z0NGOL=c4$D0>jg1?c82${Dn|yK_Pjps1wFFP|Ve4W&Le+lIM1c^rnpV5rE+p!#$EPn3Isz~7?`H3wJd~XA(O+KNb3vbAY*z|5W&?2A zx4yyLPQ;(xehIX#cpJgYlIzYZAK7{O`95nW(27^^S)OUwnDsN{_;J$NmFhiY*Rxg^ zXg;gqtWd@4xsNSTiS^<{Y-P=^X46dfeGqmm|87Y@MGFnWN;NodZl1Nop#%AfdU`;? z`w$B>cuHE+J%nd)fVY5}54d0sAlR zWdBF=X=X+)#{b-huht%q+hRxRKK&QOCz3pjhxJ4x`J0df(izt2%xr^#r0(Y@fjUV{ zSyiF+FFQom%DZM&_gI#ntaTEglpHbHT`7d~Pp^UiIq=RzLT;*x1F`VG$utCS_tW{K zJKNX&?vrcMfV{!NkNx7UJwQ-SUG#SQ$?Z={B1ltS6AIGPliS;=n)IErcEbNPn3m)% zH3$tC=n8nPbqO2AMwC-P{OS1$WreYVS8fJ}oOv>T$1gqGJmto(@};}>{hU!iVCwEb{bH0itou;YVTL+RwCd;1dxh^wt|du?c(3eQv$5o0`lYsPl6FsPbfqTwLqGrVj~tS(os zI~pEbSL-;^eLs&a?5dEG7v22&_?YxKJ>_`Hr4>gnO30@G6}LR3FzZ$nk`vf1rFok! zgiz)T{~;C9%oDP3_rp+|@2=P@hgpm!L)_P7a*VnO5f0(CzT=D1ZD)kS_WMV6f0awFP`6o0-Lj7#HN6 zdgKOwNrr!m#(g%IP=d*!!@%x5rtGII|4Rysuth9IKni*E!UChmDM1+HE1rho{xfmP zkK_xRcC{!(7NdXn2Qmf`JD=>~xH@BsdSe^x9 zY1DPQ5L5hbjBV!fGBN<=zT0p^`JGdC+7NsJ2Dw4s`Bdapz_rnmG)uJ3Ps_-T$p(E0|hVfL)qEN7`uZ22K|&62S%p=Gv)$t>sS8p-Ji(W%$dZ_*mqwE%Cc{>Wte z>rLw-10{UQK3RVLVhvsRX`+ZaG!#OzflUg%$viGQdFR(XuHallB1=?l=rcnGHy03_ z$6_-dRUaSRwirzArQ#oR(2ojqv!Xc&yEGd5BajT`DANGyA7$)dPsUzXDj7Gi{xZXT zS2hIZ-z`=eM5>vXV6Juw3)Z?CYe(P#N9vQCE}HTk!2Vv@d`L>l+ zuRUikx^pCg>EO38+{&WdA};Fs*QD?r5@5I1%9GQ8PFyad4>T#iUVpKOyWak&h0 z?&giI^|#O_KrZJqbSXEOri~l_jk0$P(kxomgsZx28~v7TTV1wo+qS!G+qP}nR+nv~ zzdD$Rd%t^TV&>0|jIFhH##%cvpTuLfHzlZgk=#^`j(dzbvD;*gB~*|opMv4w)*0=u z{wv%|cB(w&gk$)PUPF~MCpSMNA{R`pD+_WPLJ4Vs70YJuZiFj2=DC33Im($p;U4_H zX@`-g)67uSrp;pi%BJlOr`WcI{_!ep#IbYB`wwkg{pFT3O=8`6v*YV<J2z|4}*w+O)T`G7D1*>T=eIjNF_7>5X4hKup(e7PjN{*nLA&30N@B)cR-2I$h6@tG9P2KR^*CS5Rw|4 zGr+lYliTz#VC10_^ZQM~L&S#iZi23Pa(5`#H9M}KK6Pl4w0IbVD@WD|&F~m3=eabK=x|@pd_ufz z1aa!AV(S@}q)1PoD4EXj25MbN$E`bG+{t^_A7x!)oYs_36+%9zB{{yT8+>1@K3j!$8+3<%Z8vs&dqJ8w zz5(EknDgRF)b*e#^1OmIpU%%?;v#qjPMV^}8@xTDJ=ZUl8>kvO&LG7vupB&IQalk0)XhBXGH69Sr>({Az{AkQKhXkE0u03S6bD+pADzTEY5NPyNeIZLKi{JCIe3mYo z7*zpwcH1dH&t^YEJu!nWp*`H2>Scl!<$pMcgRN3Iwsr{vstGM>oJ7D}QLP9jvcz0r z1-XgJ&ydR3i5^A~pmRi|Gvan)TIZtE5Ia8Jy-YtxqdJ?q{xo+x4j{A7$YHlJ-}?RL zyaB+>1&@Xx!V(8Aj!ldGTXUHd%`?q0JE*Qh9LSb5-#L;B&@GZ|Jcdee%)OBt-@^J_o7YmZi_JlT zCl_;ZVVIT<9+R;{pALi7s0W4J(|F;K*ItXYiPXXsF%r4-t9=qgVj&wTk4G&AmqqWp zKSg{3*1RWA;T*4So|q8<18G(&r=wG<#ga2|sR#x!>Ecbbp#;9XoDdpm(7at)zVLI# z9n;T(U7iv_J^`Ncy}}e^v8#5bE)_%q$D6A2()DvDkmm;VvC*`NT`?}X-@J`caHK7r zzp2eBcq#6X;b$F1T2HtNC5MJh%Y>{LRq*MTFgi&+-;+Nfyw0QBtgrDn00lH!MjVsT zOAFbkOIm5Jr`@JE2o*5|FhVLN^_@IjfQ9)yzTaDPZKL$+-s#r<-yM?BUW(lBpE=Q2Oy5Bv5)P zSHll93ZxU@!ZN|ehBVXuHTD|cLBiI7Vgi|6aoP^O~G1x7lj=Y zil+c{g0s&2x|cooneZ+W+8o+$pZ#4z8HTi*O1wWAK|tq{gacd(dwkzkz-i$ z4XcdeiO#P1V|MtxM^aLt5xm$ffD1>(mg7$bxRT8HkpGl{9u+kel6^QY6*%fuGpv?NmY-X1KmG4@Ncv=9&ucZgW8UtRyDHk^bGC0Lw>l33^UU1f?k z&1xO?pgx4iCCM#xyhfv41v^3(GNdKq+c#^8(ucu%?zQJ~iJ~W<7S9N?YDjep zyr(GQW^U@Xrfy^?C)btx>V09F6wFT>g0=2=HVZoeRABTt8D$Lh8ni~qnUB%TZQRlb zySt2zd3K5Na6Qg-cmD?56vI#UNuptC-TQ-%KAg1h?UhzEGqKhrDblnuAug7?q;>Yp zp5D-Je7K0te(T_mrIx-|=s6oY;osVuzH0eAxguZyV3`)YMHj!{8LG5c~{YB8X+8TFHvY@-YCt9HdJ(49=bvTn_?@{)?l8Z(1I|Tjn9^M8GRhVg=87m)4XpwXG_U*Fft}D!E;W2lms%pr+JMWZ)u+8s9??V_itpspm4X5MQmq*eTQd$}s6I_qnsBd~-#=q6Iu@B6ffTw%S5*%N#+VOBes%VKBG^y=VPy2i*wbC>fGI)|ziiKSJ-egubrE&UvdI}sxow&Prk+YoMHLte<#3l*{GB2#fA|}6KY$)?M zQz`_qCbEPD&dP^pxCm9z*foI1o`_NQiG|a28*2I%ZPBOjU`!6-!?j#6?W_!6fN<__ zMcM+@w#jFx!FAy5p>);X-o|TgA*+l=`jn{)b{B%VF=|_G#P&DUzIkIjuuSYN57t%^ zqC_isCOipoG9lT=3by|Ijy!Iwdpv0QSmnIB7mU7fUuJ;^`4_ax~9AYgp5GjxFER#AXP{ zWUu=wPTOOLomaTNfVJ(XWcV@cju9@6)WC!j)C&Lp;_^-Y5ma|Ii`?lWgDr6GS}sd? zh>QD-2LU#>?zQQ0T!-gYM}q0D1WG^8Ee~4SK^GzvzY{=I?uOl55_tz<7duUXHU=qiDTP$?#}95i5{@|nlZ%!nYrrZzvW3R18#=l_oT~g z)HxI5csiyd;oce4wzQ)JH6dlHA_G!>QK3qRd=z5yp?eq3$iz zm>U|4I_SI837R`O${9Nd*;?D#+8En7L9>5fHMBJ{meY5z{s$G}|NjO6`@i1w&3*U} z!P(lz@t*_9IT#z68#>uK02q0B|5Hbof4K(GZ2v7e9 z7a6J+5xrkf4U#%2_*?n`qfhWH^?slDmj36Z!BPk>O5B70psRndHU68TJNSTK@OtK};Mh|1AyrQd?G%X#=ZAH&-|BXYMEH^;T!a ztY&eB`sOrgf-tfe3M3R<2)`J=2~vG5^>i=J9Sgj zG=ZX}(9|TJooR+Cjm$8zyX}|&hU0pYW2VQ^=XmF1`^$Cb5s!~ntJQ9={}2Zm-sqoF zFbEdLzs~tb!u(6(9}fP9#2(v~!@W#ZmP#Hhtj^))rQ47$dWdK#CV?KU!Sg)gQ4-$h z#neqX&cw<=1@Qx!Nl~xrdgpnYCur-dpqzuR!NG_MbnTOyUkQx!29dS&&8gv zAy*r#k%8ca>MzrhrHjrI`K*M-Lfi(@MGpaNuFP`TmYDRF6EU}8cq75?;uz<#Ro#3e4lQBdu+BN)KL%LzZ>_qz5_mg zKacr7m>+6U;stiGslG`|S#l%?6Xp)7mJMy6*CIJd$Hp%7XbM==!*F4QkR1(-xKntR>syyS9%?DUhu1jLJbF-(Nz}=eXC_ZEgU{4HBsfTji;o!28FxOa z0v1HS4$iW^R68`n#wV-Q3|==e^_n)a@{O9&#BF%hP&zueF4k{oLNB`};7pj9ooks&=}*d3Wvmc|7C$0Af@l|~SV32}Nw5|6~+v~HiIeVaUBN!VT=Ay`Q4a;YYS+B97f3Th$)VTo&%cfuDb8U*u zvBd1|ZOOuNg(f=t!jmAW?(2!|MmgHnkW8r!spitAh8h zl&2bu*gyyY$qPZiA;7xb6BdU~oF)TdBxv}|JugTlCEE5Qx>6<~gt9N{bavn|)9}8+ zl(mp@=dr8IXz-fldSCyPR1ULgB4_cn6N&PZva~KK9F)h1!02wTvyJdiJ*!Ev4BSP( zO)8d@x?~xcbn?gsHInIAZR|_+Nb_Wu^7pz7rvCw$6Uc{UE>wfwKSVaZMoWuDLxcwpr%xVdz#gIVh zRttE5*5hm}xRDjd@QtKy982};PrlEau9~VLXCq5{`s@ziwC^kk`5o=)uo|v}+`>8} z7WhA^IEHKimDXKkv1wHG#|!nNq;4LNiTYE^rnvknILq88>!X^jY$v8h-j3NvKSv4c z?$+E%`adck89JzWt-8=gGi#$g20oR{8A?aG>IjSAH`3K*9hN}r6{Fz7!n_+YcI5uC z@9M2+qAw|Y{344W0&CafflX=oLxxec{A*1~Z#ww^=epHF$?$BFREP7!R}RHqr^_(4 z1S`njAuE2N_##D6MqjKeV~j~V>{#g%XJSssSdJ0SLN)?^Ru!Qiu~9N3?K^+7KPP+C z^KvHemEVmKLhr1QC^?dQEjGAKmJrsawj9&~@TMXH3tlS|x%fA*TaX&rYz+NjjfS-% z;7Tn1+SBzZv8YbPu(jYBrder>E3q6`the=}@4khMxC=11p!aFEUV1!poXGh_N+*k` zf-MFHtF`5|d1hl_iZr8hed1?yWkd&HGyWWYPB(!BJ;z#m8#FbVj#4>+`{syw%VNN` zteR@IuR5$GOgH6k=Vd@0HDmEL6A=Ii{Q)xwx254Uu+XuBgtpNxyT(@ZoB}ZUA8Ru| zj0-g-CmEhLWo%UC6JsDKtwRD8fE2*8{Cm?JR3|p&yiM2zXp4pHuNkbEN>mZe`Bx3p z!JkS4R7WhufEXP)hJF58^3?7?E|TgbVuiXkpFhhSP8kY#TeEQcbnWPfNz^~e;Uw!7 z

    |lB>~4atS0*B!rF6t2S#%AF|>k3vC4N<X{qvo2`|qil;9;VFluo5 zqG>&Yisp=Cx{H4@i-xZaB{>;6tqt6w+jQt8W#YQ73H2;rb#{I_G*2hjDHsj8!Fc#! z(k*B1*Fz{ebD$eoV*L_&G^oOi!dP%8q3pVhgl&8KV+KR2CLMNeQV)QS4rDp1lX4Q! z*O?NzLBlFLikTvZG&1YNWe|SwXTWpQQR8;~TMRUaT83prdc&RUoXBluEfVnNKYADr zuw@=20?IV`-g#zXwWwhjzw0Ab-^zOa@slzB{>en!8&Xyoert=!5RZ`tw2f2ddntWB zgwojwKi$XhJsit6_F2~ibUH8;kUm;R?Lqy($d+$NsqQ9iUv#TH;vB!H&0HIpFNl#G zlOsk6KNv6BN@E%Kk2GBj4bxCu{b2Q-KdMXLCwBzw_y60jvETcr&0rxFkUoX)dkz&x^`@UYK|nJ)Xr{t8(a-fW${Sr`H#*Pqsn` z%3F%2hDO(I_GV0j$x&w|q+lCwUi=q3@n`1}#~3Yc_w~~w1W4Kno7~GT(9Ycq&N5d; zkVG?;=2N`6ec#&oE#HZ|`dceTk_s&|Uded9`gk^c(EL5Q)1lyesQqf!HWgHZLwoV5vNL|JZedp zTe$ik=lImbRIY{+UUtaHYDb90EVkL=Y%yyW^F4A*VxfzU!mO$am}1T{&=F)S?;Lc1 zz^~inh@#b-0!hMq;s?yAIygg$hh1mT%$(7YX*tuNp*b$qciz`edKr$2A^=K3E-|9QG_WSmvgprI){~bJFyk>3 z?H556^@SE(_GH5E5wl2ZOv$_vHcLNBxV)SIP9o~)Ag#xd>rjVr{m$r7wW@NuWZzDm z=%Sd#lyXK~A-!q^%*&6PEW$*mMaTfyXA>h5V5}PvUy02aJ#S`56B+bi22WDRcfxvc zv8a04qp^`LGoum?4E_-N8YI8TX)zJ7`aP=~4~op{cI!$r3>g!AwLgL5VZDqHmxQ-c z3fwN$g(?r#B|1qEKXKr}XHtemlop?rJyOoY;(5L6fzs}=Fl-T9LZrY$=CIN*?uq{} z^h8=`3x1nj)5Q@N)Y02*XE8en$B6@OcwIrtX067HczV_G|C%$uNE86v2tTqC6#%lG z3xpN+9tUgGpno*zH#ye*8wiVKoENHNQA5LHCg#Ef+=%@d`!lkViy*d27Xf|iiobZd z0coGzTq+C!P*6K5&{4{rfRArzP72F~R1r#2JC*DfIYpMig?0aT4ORFy0#W8-bHG%q zQ{YE^IEz2UWJ2o*H`az1FxKt|ZbK9M{2J#2f*LN=|C;YfEqBnAe-stf1qNg)vl%LY zh|$aAThW{4w!nstNtG8^kROcXDY@PY`+aoRz)^yj= z5Xx@|_-tn$uC^YKZ0dX9wVru`n@kx*~lxy+KZAzerCqCG076*6VW%fIa$!b0Uwhc$Omx> zp^HjXzwJK@aU7CD)E^hj#pYj2VxIpPZ4&!l?L)5NFKL(pv3uK*mEMV_^Ak9q6!v@u zDLlNfX$xer@&y+O?)7!FYZ!&7UrRHPMzouj_}u=q{(-h@5)WwV@;%~IAt=cc_)iNc zFMlI<|K5)dW(J`qa}3f#&k);mY*pK2P2~~?+S*OASK40u5~cu11SC@B@UD42BaX(J z+S$sfq2xR})@ahA9*GYcf)2B$Y~Cy*+WBz0qvlP=4#g!`_`H0|$+U&}OH~}|sz!G$ z)Ys}|9`RQT+lp}Ic$M_dEJAWJZDz!wJt?NM6%Ty=9u;MDRPc-JPll4*?&UVmT;P%B zjQ1L6s>gx`VXO%h-iKEFG`1S6QQtm*V-1${zVO|j4xV5mzwcZ7tv0tV)pgGX=urXe z-&N1^apuQ&?U5*g(*zXE3pxfmW*yrN#<5!cq%{wDl-To= zrtsIP_)PU_U++TobE6!pu#eWkge``1+$o>)?b{!1R05r=9l9RvpeKNkd#G*`iu_1K zc)vvs&ga9utMluGFI|sTq2I*L_+Q_yk5@~NJX%2h^VQv>y}Syv^~Vr-USONo=gUe* z;<_Z1hQ#@N4}rJQTlQb&)BT=K^Xr}amWQ^Im@(U)kN0yvI|?NhsTwl3{{ZBmnh-P!BxIG+1(V7AvoUdR!wbtz3oSwmAi8HC%r_g; zUfwO())|QuQhIb{-(ouAN}3TemmjxknKKQEqdJ%`ff<}v1F3(p8Q?_g{U%S@@ezu* zx1j}F5JW2|mERnkIy(G=6JJSP`qQ|w$47dS6 z+*cg=yt{Dwl!lqy;ECVH+{OW!@l?63#oCG5dva6a5?izgQdTuCnutj`e`{_S)K>&W z3F_I}L>3&p!9?O!*TlRIDQ@;dJ%@ibw`MLEH9cRPIjr|YyI@D$A|mNG~f>97pilg44vg(psxKkE)jE_e{E&04k`XR zG#EIuBn@DNF;@XDHqjGnc2p~62ajU|eS?i3ok zE{$gC?MIhwiLkz`o@wv>Q?R>nr-K4i2oO_f`KX$9>t26cu4;4Sl*iWDcE_)3cWU+` z=>V|0rkuo0gC7);r^^fxmS0BFP^=A3ETJfrX`SGn$c~X9-6T$%nflDkW1F@4b(8Qs z6AV_exD69=-5A(AkxKm{JUQbKiiuLfOwB#!mZ|*^xnvOjl(HG>jarxa4h~glSWuQb z2q#DzrJ7(qhqWj`pyE_L422GsN)B<2fnv)&$s!?P#(5=S#^;LggIyV!ynp)SmP^Vl zJ2vyp(`~Jz;YdnhOdrdj+S;qtdhLhgD|IJ*hXM`4=rsSZ+d3<2w0%ZJ?U5p39TNlB z6u?2(tD}ln$j?^~Ze#{V#KVpZ)w(~L$vhcy+!e`gOlJ<;PU0ZFBtB{!d4 z8(wxb%$O={i&pdsh5{dJ#@FMw;)YXBL~nExX)16InFGDFHr9M>v1!d&dByN%^GBs*TKqqb(c78VFv>m_XJCjtD zW6rJvZs6K?^Fb!)jm%Wo3lI?PNu$Qm$t1jixM9=PIW{hba3=8nxB?1}q!XZ-ers7$hk|)x$>N z@XaSwrgIq#@@};a9-qJ}Y2igoR0k$w4AAFfzUKW~l)djrl0W;5N7z;k^T6s~rffG* zc7|eSVNXHP(#v5(eQ@prY)f_}y*b@xO;MLvHi^*bt(?&KFdD9JbL%I$}KMZ)hd9!FPHtk;=&O=|;N*npz zz*5*Q`PGay8BKPG$n#LxQ#~6ow`?(h`>?bf%^oY@1y6CcW;I%kbR^2*!p~wc@aSld zsU#kDpw1;IuS$A+S6C*VCgLDXgP+Yi8^y;M8&Rh{E)&V?N!DAmQy$DGYjGOz2>OxO zvX=?^)V~qbM(~w;l--}kdQ`%jLIJ(1+~bS88Xag+_qQYV&m+DglHudn6~R|n%^Q#> zYLMk>hxuuV+P|P9VYz?kX1|DoG!iH0KTUbY`vfaqaW(Em0&QKkLSeFWE{TVSW{9nr zX!vS0%F-7NA{ocKrc^oT38*^vGwg%0vo%zLaizkQPn<%@YuLou?pooZntgT#cC=#2(&Uc%W1W%l>$7C^*oVZEwGiBi+|Hn% zZ*1sdw`Fl{{3&yh0-9o0Qu8!Bc594*g^%VG6+nf-aqEx1O&ATUx|{ZUKI_zU;#wTa4{hiZm$(^?Uan1Uob$mOf55S&tP*m%zrcH^b=fJ*s6neA#tJ$t1^wvWUsr>-kPwwsQ z>}ff;kfoUb^B9RoJ)m<+PO_NNJ_(}A5S;}kx3!8&>c`Yhupm-lq8p9$bIcyLT%?~s z_rOw1`i{#s+;fr-mYII3@E-YMgDTZ7M-arh`IC7N!q0#o$>}#2DI6!wZwJgqI`4x% z9{Ot5dwos&i`e&?GYbm_zcWRoFEqHW2m{g-v^Hy-mhwaxYSv1#F(oz-1S^uliwX%v z2TBPgh+F(R32L$W8+uJ{GT}_u9E%EO(Z5Q84#|0VAz^r!bQchCCdF*UC?15z@m)h$ z`(-LrlKaNHAWOv9VaKwPz%ITQg!od#w67P`oRUn}6P zdN9bpOkD#`nq4X$)WIZF8*%xO!tyf$b63B5F^(GL%oyGa5~euri&Wx*n1oKg^HsYK z%kUOSDKw8?^%^nWrV?@)i1o3u20 z`X<282+kuei|%>$0zKg+qJba5S87~IhZZ_dZjWgsGXYnO`gA*ofu8eqIh#1}-ZHCC zWR=banjdnn270YLAsq4RV$GIb&JC?T@k+8ZBQ=)|vkvbiYBu~ZE&9AhgwK$v7}qp6 zT%X5xa3|5z1PInfYK;=WC_~|hLWtLyQUh|Fp*uVcvnPF5G!$r zA{Q97#gfF23&{)+|NjgY? z!m3b!e*}=Eu;O~qsh-Z>Juu^)9p)dQm^R{6<_AchX(PBWH*6e=qnf9o@rD$_wxc*F z6AB``#39KBbM`>A6KA11KqK)($sM8593i{dJI4G0Z5NWxvK1C+AiE<{(zFbM6)hhS zj{)4R5G@H~R;lz0_jH8bP0BK=1pTy6C=S0%$5ZJnboJjp9aErcKyD#w6E_mNr~`IB zzx5Mj^Ql)M?9>i7CA6TRY)fjYfx}aAyMQR2bATl{@3N*AD5{F|UxMIi6P%;RLYRlu zH_v?&UFb=`5|8;C+#R6F8Wo{t2@M$LaKDv%Rb@oG+FEW6CVZD0*0FSg9kdAJaHp>` zm8goQ<;(1D2zOA{eQ4W7)oK(Fvc-bC3l;Dv@uCkY)H>i)5o4{YL4fH3R*73*>lhF_ zt!k*=*ZEUKd#FBuBjR=|G!9o-Evfd-4<))FWpOOROe0ejwj-bEL8^%l36jmi%*}g)~2ZIhi{e*+wbOdAdwex5@F}+45 zXKhD*!-)p_o*+m@2lTzMK0qD9o$IV$s1Kg*s&4bLcHwf05bWNWV(hw@u7>ng8Ey-4 z*MNk(%4+ofm(j`%cT$^*)<{K&A*Q=nt^?VfPi;c&FGd|q6$s6XFHxAlN+LgPmh>np zIRlKJm7|k`pgUhH7Ezf|{r!jU!iSiqtg|l%d?~(9$n`#|+b<7{r=Tgl&2!n-`(-WK(Px;$Ej_#?jV)Ky{NNzs}=ZNXwf?xVlMHA%*bXJ#)A82P)f~V?E*h zwYf*830b1)J7a^7gj_$+WtXF@^oHwLXTbsU5yWYb(<-a96ENM+dpR>bn&8WUWNK`$8kS`k0FThP!L%6b~3dff}lrx-s{T+&pCzq^u zG@O_Q!wyy|!ae^k3kl~;Wcp+X3mb?@&CJY%n+!dDdVd%hEM(donYq(6SC7?4_BTJh zDbDfv(w6%Bvh#30n3m=f*5jM;^##X^n4sUs!R6f{E9gj?l#!@6Uvau|?7Pj8675LD zv4Z~P;b!j^;|tcgIg;UYg}2jp4o(-GVN>o~no zGW?Ei_d<6T+=a%DV~a~RoU~mta#>c94ZK*{6mBk(wzxHxK%5*p-{&~taknMa2{)^=e=F#^)+>|eckv30ib#^U8`Z}{G3tFlC#uoWj}Y@$!JC)B z*;`Y%IX}C02+*n0cL1P001YpHUNQ?Fc1M!5=%V(KY&Q^&odZy{8xD1|DFbX~l467p zJvkNfz-Y$*yqE<{)YN7fQ8Vk>a{+syxHju7f;3f*wOh7n1bHH`%$L<7>}h7|ezK0! zBNSl8PU9!WDVTLKQz95!)`(f$XgJ+R=P!a3AH0a65{2MJKZ<|LBx-nr0)wp4b96ve zyqD(iiFkMnd>eE#N!388o7p@*Zb#F|+GSRhxN>m(!nYl>5`S3q&frA(L0#B`Gfb|m zhgj3iG#m#g0%6L7h$`4WV45Lu^rN$?DVOJCh~_98{wy@-`$Gl?G@U-q^vs@JxElC( zzjDHB2RzRnjPa&9;qAK@5Iw3XdMu!(lUQ<)9@jYe-g7FUg@bD(m_~(y7)Hk>3-6Ab z0&PK~dNigz%3k{zR%|*OeFRW(d$>5PvceiEs{i8{LxtI5A~sqbW7xXQoX=o_2Iw@T zr8(SD#zm@KNxg;KF4D;CdZo#&*7y|M9Kdol$U(7yh;HN1Ri7lu8}6{ruJP_>v!WHC z8?NI|YFs38ma6?TysI`s(eL93tO0SwF(hbjm+vscA<)yV0fP z^O`|c0s$vTxdXLJJ9_nJ@L(}lk*c*_1P9J4cH>x^bJjVE$+8al+{IRo7GD{e)+H3O3-&1 zu8+dou5^NrRjT6sAUQv4_YRy3waUljcl63 z66cN#XBlz#VBQ{2VX(c7M_<5rzeT$+&8bY>UV&c&(5wkFMR?W8fjnrFK9yBUd?8uk znWSWqp#e$4JAq!unPy;o8b`;nX*#gyUeWSyQw@5id3KE9=8gLOQmC#YZPq=nLAz&SE5Ii#a>@Jf4TXgpaM_o9P zdS_wA)5bmPoX04%(Ort%sO$Ah!uLZ2nW7%RFmo5FanJ{e8@@f7a#c1jdih8~CmOqF zk@wy;w6wgBNbJ})F$LDPZad+bVa2tTWty_S{_S~M`Op2CFKJhzE7Kx5 zn|W<&Ka)Uc4yW*0hUs}kt{DndulBwrcpHp1<4nm{bd%wlhK`o zr@T7FaC1nB`=I`}KpMSS0a_5p5MaEiLKaGOPp&op6YOf_0SnC40M3GcoWV@n(H#Nx z-hnp*-Qm#4K*gq%4Q5p+q`4;X@6UNCYJ$lic-K&zN*Wdo#-_}U2@b~eI)U9A+mLsJ&d6edX7pu4@YQ_liVBF@GA0K>-g*J;Ikrwv9>vc_DS@yp!ray z&Y<5ffs7HV@cyaH8OiX=fqCbc6=V`BIO09QPWFQY4CXB5E3U+s#6?R6(DKY{y$h2Z zv)Lzg#w^WO0tw|G)?^P|m(bfJV-^7TATmVAyAiNI-HlOaOj%0Z@h6<26>5TAHs#f3 zcDN-MdE(1In(LNn7Q4;6H1o~XcpeRqQ5c%gK^oC(mp4Ss53Pem0$#=gYh(y&_Kq@C z^ym(`Z&|^TK8D>%jpt@YpVB0b@fNLXQ?=`}Wa>Tg-0>$)8nq(oC;EdI5fLyj>$tl- zOdjmhdJ+s)OnQt|LLY#WQCj(mW9muF7#!;K?RU+E(tkbH+gMfblIRbNe+uod2%TH_ zq4p=SyuGD6vtW>JOdnXs^zNdHjXU3Un~YI{4a@A#EUEi{Hn5$|Ri?(N%f~W7lCVxf z$LClM)#5eGyCjdVy=8XUFkCms$j^t~CCeCi9+(kP)Z6$s0b%| zn>v%XH`=L9Zn>$H;I?0aYQ$h}3c{l;KZ%yYvlXhCW4+9W{I2t%_Rt+P@X=%I-^Ur_m!Rx@oVr5DB4v#6QPVcV+DS*&;bJxHn%$I8PhslxS(Q@m0d zLqEz?idW8r@~)-NsgrK!N|EuT3G$Df5l4B_oCLX3?5>i(k~vPCbdw{hm(G>NHmJl* z<1;MI_`R#m$%`zFE;?^-s*|hRX|V_>E=Vsl{JIRK4%w&e@tu|;ve6ERK4)QUcJB&F&GG(p}1{* z%sB<6RWi+O>i%HHH)DRIl=pYyHgoHlZ+vVZ7Qj9n7%v4_+tpjiFWh)3HJ-=Okw2Zl zX^6hJkg%TJ-tJVxWxeic|bqfru`X! z&$b|rFP6~DJ!cD+ZeA)>J?0Px7q$+5AAvtJ|2SaXKMZ;<{f5}HAYUYm7aX~*+}%s> zlRxgtcQjM`I$+|nMvX>Vs*c2v@N6dja6u}q@p+Jrc)wtW_2XxiR1HF4nLy_u)Zhh; zd`+h!IX0NIl9T4=9-))_oecXM0z}cv#~`6hWk=P3g7csFBGkFS{pY}8QBm#1!kL;6 zFdRZICDfz%V;E3{>&vnN)M}s4jlaOo^?D8e(~INyzpG`X=V17+0pLr`k!T_|#IAR$ zH;7*i;aF-Xdh9^mYpEG~frVJFMwr`w`C7xv#LG=Z{5#Hr1Y#EbW0KU$$_{71(8Yag z*|jp^`a=&N-tUeHXR%KAyFSpWATiM)1q=2=yT86%)w(|oU(MtCsrd%KS#EZ?=it;L zA*a_4PdojReT-AW`D$YFtLS9{n-UEdIwiwC}IJvDL4YGMgab4dSxbNm7 zWU#j#j!spRhIhD>h8be`G2qrgFjV5iv{1izN~cbp!5PBjylJ_AXalDU4pVh&eS2=P z;=#{i!Wnbk6XbZx>FHs7*5(EESd7jepEtuVIyl@-yvOF3<#5`&RzeCjMFJ4QrCIQ+ zzoUh%umsTZsdv1`h>zPesW35vL-Hl;S=gp7j<|;ESLJeumR)6ogeHQ~BT)O8|N4CC zci!EyX+*dmUh;$IanoWq$*t3%i+Sq5zSL*BBbiLL0-X{dag!&9pbWm(GesL&mnU6j z(Jq@%sSAR?mCyhSYb-CsV5!jvfJVqqT4kVv8(F@tUc=t?2N*8<=p;n{DnIFUbPrIi zJXD@=jXqW6TVTNre#ADk`i0z#=}2X`%*aKpypL?VmDI9&enXUYr4Zw~>q*wwhqOZm ze0nVXv~dea0^))0O?A$l^oaER$wtsA*Z2bh(j}Xi4+pu&>nlWplYi>Wo+!5`m{jQY zhsf_0xKk4p3o;=k!E<@2;cb38N|FHFrCjEpDK0-4wxJQm#FiJN&G3St3Ouyja%d)s zO+)<6Dr&Sa=HR1{k;OrQ4(wU+f_fGNfXMYp=B@?Q4B2=|(c)Pt-XaPR9v(q|{|+}Ez-eW95u#>y5gCh@)HTnD$b#vGZjj`>4n zg|uyvQZva?7`1KB%Pe9q;I>G^=`G|S0kDlnG`Tcou9KS8_Dv6H+{aa*MivHS6?7b= z=f7RFKLevxwzD~wOnzp{YNBHty!m$_YPDWHj};Uy#0zZ_FjVK7rI9JoIrkqocGCZZ zUWnfh%o!9yv2ExZam=~OaKtu@HYPZ@C1COxT{+RpT2O0d;#P)M()oy8-5!;&)l;6k zYx#<(Eq6H3qYHgqJNa2_oMLKYD&Oj3iu&cmO2Td596H$72Gd>rx{`S%K^xka>RY$1 z1Rus2ubjA~sk0&)EA4x`)<$^hI`ENhxK@oH~ z=`8|vc1}|~y)?W;$K>GwB?YNW}6bLmxuZcTS*S2dNQsFWhp1_vL|84_5wa6-mH)m1fQw6E(k-L1jap4?r z7HAu`p{JSPVpi^u9QcSiD_0rgxe`(G5;IGTbFZjD#oicC2iZo+mRGBxE%sJZQHH>? z(eFFN&zdT1IRCA#t1sImUTg7DJTz>6uEiXj=q+-be|4(Vqw__HrQD^6T0i%Cey+Q+ z-1FfBXbvY|rqa}LJlTJ%7wmY_mU-_d;6++)Po5ay?kwnWF zHL`sWcGG;Lgg{CVDMus5r)Pc1z-h=PHoEqs-JL!pd_$(-TbXc-FZXdHRXa ziZ!URMmzK6=E<|4G@1GPP;YpO)18Lne?UFmYwo(s)8TAAJkIw&Biht%qL%z4UDt+D zZE&rOVS|Rrm zulabX?=IfH#&SD<=A7rLJn0>e=hW;p3{&h)+Xt3Sh85?Wdd)fi=hnCUPFB5d&GAOw z4A2ewh5jf67=|(0I`lpD=ahKHIW4;kTUXS_IY?cX+kkK84?w$%dJ+nID|-_1+5{L( z-t)4Z@VfCir@LzMHI05jJ`2U*Q%1l;ulY_1?A(OCQ+&zicojTd<8;f5Z+zF7;XPvzFdvpM6j-84W)x;t-$;ITzOX3|tQ;ymv@q;7Bets(*w+TTN4 z6Bm4;1_7Mgz4@(x-pI3dTsG6UZIQUK(Hwnl8$TWkAp5?zJ95q@}cEta;;%pJ`uj&n?{wo4;C%omKK7nwB_=h~N3 zH7u2S6DARltlI)T-!Ida-Y>Tgp9M!0m2SJi1!C3B_jZ@~_TT zp32{jhcP{qg6n%XWmpGhcDsw;F{LqsSh>R@1@o6B!;sdC07wjBGgd4K`)cK(PCW^e zOfAv=26-apbIcd}hc@kw!Gw^2cTJP8FPO0a=RW|$Xi5Tg<(!5~fFR}ZBtrr@XrBjU6mpeV19THj;PnaJ4wop(Io1oxGKIl>!xrm! z;SunH=|e6Q=Th#tY#kKqBrb;bIoUr<+yU?-^Sp;tf9;y9w)#>5N1W8=s6v~$Aerlp zIuDHelgJGXoPGZJAYt-L)c4SxxhP-+NgEXF7A8*>wkgP=s5@1*XQ@~oEAiDc2Oi6m zGj1C6bv{+HggI`c63}rprxz6cVU*{6y6Evx@rgiH~)fVp*g$br&P-Y6@ZMLD; zLf!0fY21>GMdm`>f6%(x6oO;(>O}hSBzF5MPcx63FkXXg3k~l@4`e^B^MpDEB6p}N zP7@R9{l$|+K4Me${tk76{ibC)h(oj=_zO1+{&(NCO_tAR)XmM)0!qwe)$a;7zfYH1 zke+B67c$+wP=dUxHopvbP4p!}6rtkp`eGiKvKhfe8{tIeo{_HAhy*^~KOe)Sa?d}8 zRlw{mdS+tH3iArvuT`X{GkOdlTiu4iq;IK+n)xmq8f{chcj)c91#dm;z%%l+kA`85 z!s);SQ){41TCfJD?+@vr+hsXEn*taKwj$~uH6-M3B)_!3)@N~NB~8MQ!Re7!+FXuZ zhhZkq&WzJx_0!uo$yIBBP9%_uHsV#G_7RnUj83y5I=R^fNwT+@jQsQJb=b&Ho6*X< z4TxsLkiraRg4xabLBk5W$OC9#S4feA=Qiz6_06B`9izO@Qem3DqShZ!K6F0x^Sfi3Kr~$r+ zDeeQ;-!)=vYlSBbl9Mc(OHy3(avY{apPQa_;b?V*n9R{BFs;7lm~=EQ(UtPm`Kg>} z3Wm8FH`K;dfw-PWWt42A1`Fn}PeKEK9$LeRv61nl;cgtyRAS^9&_-9Sm0;4`_Yp~! z(nT(Nn!V!AEpIHoNWBv{_ZpVf)kG&p@vM1rRI2>Jwx4I~2XIUMBrTn*91quErkm|y zAs#$gc0q2t0B+V2GJ{2`L^_zk zBX-#Ly{!UNjYUH0uj(^Mni=OyixL-jqUmigh11RkL@G?ri&FChAQ}1%Xur1d^H}@z z%s6`a_GG=<+8TvHTyGM;t0h)L*422fX!^E&`5HfJ14%_OzhhJ(7^jG;g)Lt4>a<(D zOVBGCX^ZMydZ@^*_>uR1b0J|7BHXE*=g@L90v1KHsvBS~sFkzdPu*NtrmKK@X&tM5 z^|wY)Qv|!Z?_bnHWqj5>L_z@{nM3)J+Y|1ca>%FIkK4@kYR8BLv$>rEonwvQ$5@_pH^@B$Se;u#N*Ec(8oo^qnzt=WwC{z z_2kJmEw5BlI_QEgStX@y=6U7C65FL0I7J z;6iEGB?D^A!<1q*q`Wo+yyc0KTSHU615gmCLIlrW01n*`Qpg zuHihH&7a_2{^i#dn6%7VeB5i4Ufoxv%bWvvOz^+-Rx95UzI1^(wyPE^yo8Ip_O_26H3$qAKv3Pes5G5)s+_TO#0wyG+!9wNq!R|+|CV-FJ->!9sF<-%Dq0j z1R_x;?`(*}UAA)@mANMo+uFY6`wo6v65Qw=QhyyM?ywXmXJCHHi~;x;qXsFw3m<3gNn>o?9u@dz4er$S zi%dHR+MAxA34)U9Y=JkZXIwSoBbA@+&${o)aNNT+T$Wg0c=$BsXjs-)sM+3Jii^c6 zl30F037%;6DBmkF3q{Q7wk`s5Nk+kD_8~F~yyXtt#oIF5jEBPGqYavQ%U&p&d@v8*x1E;R-xf{XZbgPAWu$D6R zCGT?ym^WYY3n(~ysc`YZW9MOSOPUP&@v*Ygw;hNclHE2>2KVc?bBm}DguWowWH4dx z7t)B=!h41+&g|&Kpdin^(H2<0&dIwAq8LqhX_10x{Ao_lb8zy zotY>{&93TUxP3?J)VR$YaVe#{F5f3}Y@tEBn?*STT5&!W4La74O{bFxkO9A+i67v5 zdq1N8f5E^&&+z{-EdI|uDopGg|3zrhjSYx3YW-i9D^ote!MtD*u!qO`wgPa8o`*?@ zt3Q6fG^z=sqBN!C_5(KOku|87d*V4i9poW1ekz1!!*-Lx&+Om6Zbt=9ca4K@ZfpKI zt~kp}sN;<1|3_ki^ZlGRSO-b5xrhGxV;9!zJE2z|giHbE_v*?+P8Gtsr=L7Khu!1z zc|rdFAot$vCh0PE(t0U-2R^dk_SCnJR!DlK-=4pAcD@rFQ0CX7mzeAyOQM6{JfaHZ z*v_`viDUszIuJ&5sKrVy0x4wa1_J*tbgyNL?H_c{qt}jrugC?v)&QXe^l{wUBK-kiEwa3O9#_S;@E!>%SJ=}KVIN9C;>48{&w;VP{{Z&Z?cLe(6Kc;jfGxQlTdcXyjncBRKI@7= z7zyW-8Zy3<`vYiZ%d4v^ZIZn8@_LZ|3Q__T2kIa?$Rv ztfhDCNC>V7oec-CZA^ssFec@mc;;ZA`$Reo!Z8K&sCfnEl#$X^+m%Hi+ZUfbJ^dPy zUP(IfnFpN;?4Snk3vq0PiQ{6~G4mla^)4&NjiPNY2x5W$aMUpd?~;hmO&+k`ET)9l zEz{F5g=gg&uwS-RtJ~8mL)4~d;N`o6rBDot!!S;PErDl(8hyZJJQAXIP@?sWVM!AR zK~G?k9$tBvwn^dVm#2hUlqhBF6=>v3gPuJsTl>Bd3U?Hm-0R&?RZP4PEUOWOaO}*! zB80f~^rxab6ZKFGXGB;i{MIicF*8o@v@gg1i%h8V1tw1o?PD!JwkE7x%84eD)JcdX zPeW;q#KK4mWTUXhiKc>n`%;ubw{OuULUdw>)h^iDdMPiG`W7+jA~s3G1UiO|x39t@ z!p%saVy+7@Yy>UIM0eAV4FIs2VN$F{Olq^V@nkEG#c*B^aO2GN8ikIexC%$I?tLlf z`GCzLcVm0D(wZG^DnHY(whedg>1}jp-#`>eYHduw4u-zI$qJ1M3dJu2+V-LyzKtE# zpnuC&FCaf{%4e7Lv(#Xck^NLgSPcInce#`V|1EBvl&E2NkLdytw@wP;-)Am%?%H3| z*R{rV!OdJSRSJKW`a@ z)vYREVF=gvtcFZQt)Zqa)a0*^$dQf~d|%_Wrs+Tw4f$gHM+Y5s=gPqe!ijccu*hHv z8l4ig6(aLomu|E>m{s2;Qw)TMtI8lG=%-BfRW|0vJWYJ8X>oHIAU{S;zD~Mu) zVU0jQ+gXSlU|LvkQxs2PCOL9ht$?vl*Gc+^=U@{Zh6(nB8A zQuMolGS)J7#qrD!S7kdf zm0xjT?AjdZMzz#_7R#~YPk zsmh=JiP2@uoN<&?avGQU)^9g2k5G1k+kLx+Kr5$d^pd>_W2n@G2q{5xU$$UxkmMaB zxBgNG*#dC@ykoEEbQd+&Bf4intrAKnxU5HyzE_%9nzoJ06(6pTSg(9qwf9ocWNlYk5z@!!H;e5nJ43OF zv#mzx*i;FeUqOk>x>OjsvzV2|uAPlV35BxRb4#tzD%muoxF0I+C%~)QY=QMe3`Hzi zVJVj@50J&%ZK=RwW);M+RQuK*!o~&e{6&M{-D5f90p7uNLj1XxpwvcuJUGg=iz zF`C^f^2y_GTof)y$8Gr!@leFMEaamD7EGtDl9l!n<|?svutZ6VTx3sCUqxS+MfhP` zI7jEDl4kBP*)w=m9V7Vn*C~&#h9{oG!Kp%?pppNQ3+vJ{Tc5ZZ!3w&!P)<{6#;WzV zB=@N3ca+89)aCHPv1|6C&8XORzMgc6c!0TOsmsycPpeubblB=?!K~h##}aLwq?Z^lVPpKc@_2BZ z$xPLR6%m8!CGi>WBrUQpLOAmlj1wUHH)Jh|MeW$RO`MQPRi?fk7J zO^yF);Z=mKU^rUDt4jsHQ7kganmj(p$`#&50q>*ccem3!w5sH9%XCHnIt){MF6H=B&Xo+7*Ls<}VKP@+b6bQua=D6XDtDP}|WEq`= z#Pnf^15EV1E6`dm<436*_%*7bEUVHhrW~W_KqfduI%Go!p5AVd#2WOPNNb z!ajJafJb}Xm8yx=^X#EPTDBg7_xRpnInnT6{ntza z<$joh1;LvW>BbpaD~P-FX&Y)MxbemD!8BuXFoGf3k-Kko+~ zEB_p39ZIz0y{79Va}MG{eCo!N7zk4&e}ri(p^tBAMA(*4ZXJh$6rRkk3LGCP>_pYC zH1Id2gmPEFq^peUID`Q#f-?lX1tZFDfV*yus=sXwHmEsAZFF_B?z%zQW{NaN%tw_L z-3@`=q!b<`CQk7dynVq|+m$k<^oEZX-`k=JCPXq}mnwY7S}%KXAKrMG^y@1vK;lZ_ z17v(@={E()nil zuIr>i8pzOnfNu!H9e zm|V}R>?5CX$0)aLxCnRqICkBBpga!9=A%xAhYzmhjZ#-13Nxvz8!J{Ml}ea$qzn4x z8QHW4wkY=1m3WPqI_nB~3sE(JJJmLKNshK13mrW0Kq%sQtTK-BaVOx^j4V4i1?*by z;Z{FTtc7FCgx8#I#|ax|8EMvPG!xrQbWVxFHCX2AHAc-=Ic)=hi)=SKsBwb`QqK9p zL^iycPuc1Cp7O1zW7Y$+{CsEO-m%NR8Ovy4y=6UE4hiSAJIs9kto^psazuH6*$wGmx01uPi=2w>-m0`z~6xG3PmRjd34O%fjIRC z1Uy2^5U}ehAAlFG?n@_(XZRepZ3rv|!0rXlI1s?W+zHZ$b$gY7rfIt5ag0&CoZhe_;)*uUiXEgAE$-4hugck0;mQd*@nQraJc{0x zNx>&@n3+lcMaSZKBXBdezSx*Q?AkAfPW%dspmgyU9N_6)3(NdSf&1ZR@;+tZkmDMd zhgM(#E0XMDvnu0dsx48Pd>&?v0EXhbs{%tRxdk}~U(15k4+TA{ouFXvJli8wBHSFL zY=1w}QdFP#r}mRq`&r+GPp(*ALo#C&XU?k+T$+6nwCw#hnl@)CMVvpEL{zBWDfGTXHfgP;?%vNZp>4n)0(OttTGnQ zeM#6TIz66mI@y6WW8UFMr-xqwC_O-R$eNZ7bWQ_r7VK{inA6+y(Pg&SNunFAsVACd z?DiW}lRc-$5L54*ra3roPLD1xvgm~(vGPyhD4n;`AwXnvNGL~jBXmax6G0XWli?G8>ih6RL8ivO79<{(LU_w{Lq|%(bbC^C$0*sBa!DD~_EdtKC|- zj1DgTRipEm0L(cpq_*%18tW1QX8B~<477$#oQl0Y3WP9@16}Lb^|?e9HSMBZ;l)A7 zBZ3a5Mps3PDcx9v@tTrhcz6l35j(hnkfv3(N@%r$NfAkQST@V9?F5(Z+_xo_ehjoPOMt=1k)|qq4bnt6Y9U0^e8AR2J5) zv_)Tr$ndPxJ=vt>^e3G~-9l{S43Dyx7MGk?YKi84l}fI^EF@D}2Nt~=&nDgHCM|Mh zzb|Dl5JHt_gjl0Su-=L{`+eKsL4E$F81yb#7TR8sA9uG_r7-AKSyMt@ISp1P1kEkf zidFGnjn-cAHR2&z{w|*W@`ve6shMdrvK(iC?dA}n(X}Y(b!*vKkD-t-KX`MX_f!hM z;9y)4YT6CIJne&s^P6xD0B{-PSV9M8#mX7B6+SJBY!=+XKGAirXwf0-X4NrL=-lKs zXw?)A@p=`rs5YpwSv`P>SW(xy%YyYSi#tJ_W}LHkrr;qBsPcfa88>gwD-k`!5(252 znxq(v23>aqCI_r=b!G?iqC7b#&i8YpM^29vHVx7E3FCJ%QnQV z|5#le|9vH$Jr#+c1X`2X)rk-3^x>%zpnv&6r$`*$7i!Q_#0uTCjHF(E_`6C?<45yX z{4;2{YPgeJQ2W}C){jQegG$I(v~@h9d>=#s<4CFO-_<#Cs^6#Gn@_?3ZST>KAGM#~ zFyvo##BR5Vi%}3!=#sBOf%5#cm6spwVr5;)s$yn1K2Tkxn+3AnqdL0r52=p9i`X<- zxw;>pFZ6rzVwSNbM9%YE&*MAtLc2kiE={ij0`_IXKTdSSG|5oFkf#QMM$lG6^K`wH zvYY7Oy6VX9v`}L_r&DLJi1i@~4+mMuCyHsPwB?uBzblzMR|!28 zgK8-Si3BF)0JBSM6-!A;!HbFNZ3X3Q`RVjBYivrR>6~&d)Ow?)qa;DZ1?$+Vcc-gR z(?nOr#^)dMfMM7O(NiE;Pq;;`Ge0M_G3+A-TcK289Al>Sv`s`sdc(G67-!G3+u_hq z4tbDkk^CD2{F5>L+s+>IGFA-o8ZU2oE*}EIrXi*&yILFFOu9vsQVpt!n{2CdAE_nv}F9G9~{wWmM;+E;o&Qz~fTh*+L z`Bb&-09jQ%Xu#O`FC3G=YiIZdb;S&P{BuBhsh+q@)bJ(z?-HkEB=as64qPFq`#F8| zlbi3akJk316TI|yW$r~uD1I{L@n1Hdg~h1iHg9i6Z{ia025l(Qdwdz<_`arvLKAWW zZ`*PR+eBc>5%+?uyMkoyVx@PAty9f~Wd;s1_sCFI8-E|u+5mo9()o4g86h%x*&1sC zT>IlNOfDpH@*ox9>8M42!{%5RY=Vb3B&@Fem-{df2dmvx-okPCG&15mpz*DvXVj4b zkqt_0wj2#yCaiX)8cirEu%D zr#!CJI88LRF#R)4TNIjbUwvVtoHP@$q@86VE&5}e^z>E91MHdYAMYg+IRn*O_2e4Z z_r{3>jH1~9G?qlIcy>=0Mn%Fh8An2nv?S#P3b4I(=^528U9hCl3 zb|Lon6_^~s_~DkX*@I!4AgpI)jI4ZjmIlJKL_TxKx?la_xEp2fx5;Gi9gg5>i>@!Q zKf9f)=YR4Xd1m-!M`b2aduiUFovGj!_EmKS5jolfr^()4IH%25v&D5E8XmMIT_Uyw z8qVg3WI@t##P2-@W%;MwLzZkC>gr!--2A1RJz`2cm5a2j`)^@X+M0;P>RezEo%^XK zzYZnnUq?(==BNiIj*VbUmP#d%+!_HWx*c|c^$F`7C|DNRBK2nM738e*;t&!FKFLI8 zBFP5Bb4;;ABSNw`uQGi1^3vvue>H1WReUby!I!wJAZ)gcdR`8!6f-EQJceZ|lw^4p zzPBfpQ)3Zn`yjad;k*An3q7x7PN}6)!O^h*ZLV4!t>k^hcZ7M3}-wxUaruU}%yjZ7BqS_R{uq386q zin9EG`A^OWCV4LNGXKHlh+(m#tr3HRqodJXwCwr6p@X3j1B1i5Q6VCyua!GIik#;p z|ADhRUq6)B7XN`Y(o8Osqw}&k=ABN~?JZe^oSX`Ce!X!O3y0%36N1_SL%WjrMqyA3 zO+hcnm=wqC5-{ym6Fpwu9fhH1c|THtZPszILyF3q>t>S7PX)D=Qj%;lvm}{M zv^%Q^b|+5~t|{nqP>W;ckfw^5t)^_Z^_rRsox&eo;f6+0el2Z1!O{{?DA>&SLU3_w z;o^2_yUiNu4xRJ;Ysu}UW&VmMbYwCG&*YmY1#kF3b>5yvyZ{Bu=i)@6R6?51e1q!+ zY7MXdWf)vqMAuZ7)i|hUzBpMlI8`|j+$_irmu+xR5-W(qcS1|8nbo!W{;cFlC;?ie zu7EJcTive1vxsYD?p4)K6(@Vc@{FHmb=}dEV`()R8j1J@J7+#dRygkugwnsX9C;1L z5uR1??YP5|vG$CpzT?|i)J>hmB=|b}U94uwKt-O;<05io6GeX7PHn?lKSA<{peH44 zlbqq)pZp5_O^n=v_6ibP&98dAMuO&`4YqUGztx7^3g-$TW37M`& zpR9Ge%_Ypt#3XIIIS{_>X#3A{3r3ScZXVUTqDy*8TCMlk3+dsv1GUh8hm@E|V#)nN z(>xWXTFy$7BDt;8rWJX%fraX#squLwpOS&J8l0-}el;*=Vk*O$rDJWOL1F~9v%(;1 zeG5@CY=JmOsw9L)J?i$AGVz(0J^qo&-aO%PkLHkc$OX5YPV}`(LZuQL9g$=8zDY3s zV4-m(w3@vw#`Hg$>{V*Zee!u)>6{mRk@#cZS;f7DNj0KLr{k)kSVqFTm>R_-xEwXD z&qvdt1ZzFT^pUE+Uufm_Wcm5k-BFNeJ=wDH>e8P|GgJc)v_UsKokS(`C47nlJD>6; zK`q>^(co66f!(WQ`V|~GaOg3Uz|POkQ>!}2wCy5DyEj05)dUZW_1Q3KL=7%GQ}GA1 z+jTdWT{Th9_@9W<3Y9UcT-OfSA|o3I8&a*1|HicnP%W&k3cF&AH%?LHJy)i!w3^m@yC=F34F#k< z=?R{w|By^|8h+Eg*9)P>-^Id-D3l@LN+&fF9mz6?Hm+2q8XriK_Dww~k_}VY1k@{= z2Mc_RQtWhHx3Q&HL^G=_=`U5sr%Ag#$eJ*$cWu%H*5`UZo#G8Lt={P!$Q?7GV>N1d z(0InY_^R}WPSn-`W8cw0J<>5b=H4)YnfY6}u#l&}t)J_nI3v_Z9TZz6G6f;_B82|$ zITFU`<10&~WuNhQ=3mu0`o ztUc7o1{-HGe>>0hn=c>dqn_wElDu}0x_aMoqf$ov3P$=kzEPAqk5KO)w)*Ri>?DauGul%UTa|6Y7$-T zYyR|av$TEb*T_SNZ)er^d>x)Icd2jiI!$jqob8fT2c%AO$&jK^dsA0^=oj#ftJX8S zU_A7c-3PI_wXCt7gUB^LTVT@XbTv%1m&;d(*4WJkHAQo2gpR%~`pd)q?m*MG^Z+Nz zVZ4nl2|EK|$4~X%a5?H|GPs0wK3K4w^jn20BV5IM%PJ$i3EK&iD7J|~6Bdt&K?Bee z=zfR82@@zzGHfLpb(VTE?=7(UiK(!wNGvx&!qj0h&Y|2km7L4%QxPK{qQ64W5N zA6BLVC`1ErmEtz^0g`9Od7Lv7M%qK>lg=#c%I;?mU(QIlPGu>%I&I%TcJp05|6R!b zhp>qMQnu(M0{#=S&>QZMxPKwj5JZ9^Adx4A(@{=@#5WaB2(?Yle0F|PQ_ld*;?K)H_CiRpPB|Ru7BqcL zmwy@uEVr4)k?M88<@c5y#rY=8i_xi%{dTt426hGhIzb78V!i14tWFA{4O=WBu84RT z0!4HLQeh%F$$CMq*U_QcXx=6CLRejKe&1?1%8)ZLcFbL7bg`KXbYgJ%5E1OnF!|Sf zm`O+6UgR3aii|f1ds#_IQ1B?#oFtvX>laWdZ8h9~6B%~;|H<(VEB$|wW9uYuMDFwd zi_8Ox4+l&Z%UKa9AvAhkv^Bra#B5g#O7D+u4s9t*Y|trL&rkj)_fd+CqsH zY5g1O`~5kY0-Fx%=ju$sfAT_~Q&#V~2kXnd?+^9Y4^c$v`B&S%QKJ z&=}y07dJtm_?&_lR`^(Odd<5=!(r@I&qY_~v)_5%`&2W~qNPKdd2#SIaqpgb=8boT z0Z5chD2^d!ngu4VmkUIBPOv6^0ddSnHpc?kU;PLMUhk(=o80=`@{#f`o`#Sqp>4=LVH;4m^gRg+cMGMyhBV`h*`G=fpsN!frkWFkEDNJ|zU3!M|zrjM4l= z!fwojbH6+|F%#5@7W?Z(iKju7hx_{rh;X>5qKYD!EO0b0w7;<@j<5$9-}i50gJn`S?Ys>z4vP^j)NSZ&xBUdS6>Xtm0fBZ&diGJofY2pwt3@z zEbT$FYurdHyx_0zCy(@$>H@TeJc20Hh`5gho7+V^7pqmz9EMcCU|NV9+e_Ppbfzsi zE4x~Pl{1*mkM*4Waf_yBNgwmTi0aD1&ELGq7UqAO3DquOOfF`F%2(eJaw&$^N`4rBuAu0_W@;RTbhG7Vi|>#UjLgv#%^oA7qP{?zKJ zBmL6R_%)LuL&df7n|qf7at5YghGnYe$t6JA2}@9g9^(CNyo1GN9_2(M*mMVY#!_l) ze6{W%!fo%(A$b0{sd;qW_p);>YBmz)7e^-I@izVpKJc+)ul#SG(o>2TOiNqVx zxzjMQ)AtxGgpc&on#$%9)CzGKT?AdZ$-&`y!J~VW_w;rWva&rv zwE|(Yb^6_pUdg?oJ5<_9CVF$J<3N4)Ye|J(2mO`BeM#kI!LGc%|gvdiw*NkI;dn6SoX%>lgh#3;eiq zD)R{cDCZ2vbqlr`>=*2H3-t+=AOVpf^pBu(Pya?|%j$;y^3Ob@H(Rg&C)H1^O=p#I zNg@I!j`&*kQ*FQbPzkW&?`A#g$65&#y$z;)NAHQ&4cFZpvn}LT`U(0aH=uT4WsnTl z1+^3O1M`E_8_E}|Lijv|pESmd(VWr*nrlnymgJ@XsJ7=7-6gb5`VDwu5iT!QK3-zx?GW`V;EEX~vd=kQBn6ZlA5`iblCe@nh%S3Ov z8wZtaF8N6O?(ZhkC$R!b>Kl#=(!&SD><&)?b{)L+{gc{$4Sk#sT3-B@q{EACTm()7u;D~8@eL|>> z%a)ootTUxE*xZN7+3vDgN3H;5nCuu<9 zjfa$r8Vg+qg&qt;h$v)OsgAEp#!LCFfmCuguWixz82Tuuge5y%q<>6_`Ai@X-;ZdF zcXxYnXE7!|$lWkF{@@P>!%z7gG2RX~J1jb3V5^ICxYblre#bN0gUlB*vZq)0M7YO~ z^*|<1=bM(j>nA`fWVf%0efZ)?GeAWgjSFhil*28QJCareS{zMH3h(&K&mT_&52&|J z;AI!J4U{KT?jYh-R6B5`h%G!$%im7K1Q7Ns&V(E0UxoncjJ)GtEAsOkBsJH0S~LXj zLFET}TISmXO8(C7iT8uz6A^MqmcPY5E9#POat-9$3#(A02I|;?d&uw$vsl9$6{n9- zJr>D<(T|5SsD~d9DlDLg7E;EO67j@u?1w}n5gQf>LNOEN-xjRKO|60KP5(aiaNU^dou%mu>EwX!4mUpB*IXgg7ktO&)TRsd z&>rHw_njDXR^gEWZkJjc?A~5eoyHpd845Bu52hD&6r{yY1RhB2=TDnP0P14V%IxT= zlQqaXm;!I)fHzs+W?H_f;uMa6lEbg&fXU-P+}=%f3CKrBCjA?M_!A<0EHi#NZ^$of zoKdh31Cb~C9;o*UFmAe#^*A7KyMCYe1t3i?ly|J^jZm_9Sq!{t1{J*`jGw@1$`Uj~_3TEWw%nzOA`-(fNF zxNb4K<=e=}!pKq@JuUWu%H(hA@A;X~^0mtMhspo7Om0&y9sr$m4kc15a|0z>I``+% zUSr_`)AM**i_u3@l3knUA2U?0CXV_-AYsDm(xVzWb3F76vFusg8iPevEvTjP;~~zr zy=W&Ob?I0GlMvQrM`M0)No9c{+k^hP3HRrT3=|!&z-eWX1S>49)LyF;a-Y&?v%#cj z-N|`7aj(R{v#vIjH=hPjS-zzREVKhGUag%!V1C$gPQvrbilJCSRZum*f*vJZ#?ib| z!Q*&%FTRj^VHv<&K*MAHy>4$uUW_A|%U^JIo*E)WxR-mMEbg+^wD^VFWb(b0VEj!eeb`wvL8A|W$FdumNdqZ>MJB&>6|AYm z7eqNojwMu;2bMp;4Z2TzK~P;e0kHk=Uf8cPP2|n{oJ3 zzBj@(VB+ErOJqYhGpaeXQ}$%;Xw0RJ;i-Ov8zRjby*lG!7b{4%H_#k=--gjR?z@@W>*hih z>9hV$FGcLxQ3?!U%0sPgq3n*L)ozR99*LaiTW|p*=(&TO&OiwQC?N$l6?p0Aw7kjt z-=Xc#eb9*TA7I4f}dvU=uJbZQn$**EN#+8o!G;!zOhj8zG0AhJh2B}WN zS;`=%b6vAVkB(v)A)`aA?1{6Yo!UmzP>}bZ+CF)aysmqAo}%n{Iy~M?4hSPW%5M4o z-TB02vnRUKI4te>CAvQbh#ouUSJ0!!OqryjjS+B+J2q&qL1B0;k^)E}1N~?rb5H|W z8Z~g}zm(kj1Wyh+Y$t~Lh#DlYX^w)E%vSVseEXaZbgyEy!;_VG}{oY^pmCh3E^aqpgD50NZIj& zse||Nf9##`?OG0uWl|36Sju;ur&a~o^u3`0;BKtx>?JRd4vfCokOcyz$0W${f(=*X zIZypUcoS+1ywl6du=)3u3q~+e1!0{Q`Nged<_`BLcF3`Tu&Q%gnn#!>Ne$>XNzVW; z8#zF4qD)lIQqTG9{^QX!sh*O#M@L0+a^%6$-Li&pD!WeY-|G}V8C^8Jc)hoFJC|VDCv{&D3dhnC?TyGOg(U#H&GMA4KBfT)dEkMe?C1Z5$ZBUmmQ3l?#nH zC#ovIk#Z+Bh3F!Tl@ajE+XumR|1CSg|GT?b_;m}{oL(G#gx!$rTb1eY{myn`FT8Sp?7Zy z@cCJH`9-5xJiy;**Cg3@MY$X7D*Quy9j}x~HTuQ~g`7LV>_a7DOi>Z?rmMW+XC4HO z=(k~f3uDh4C@Jai$&XCTtYp(-X@pt!{wgJp#LQ4r95*1BUHjF5Ck-Td8-F|+A5XMi zI8#I5ZGkw64J$cFA;|-CsU;c zo8BvdDg`MCl}_@T(lZUcHM|Xfmi7fvz?br-x6rxhWdcIxu`MjuSDThBT1#!@yr`y< zMJWy*+>0!R4C>1iLWz>~nDq(C&p{~*eD8~R18JUpyVRqKwV7h$D;Hjab z&M8KeCfdSd+cwYG_8Hr@ZQIrv+qP}nwr%^){qO6|*GYA{lTNB1DwW!Mtwo!T3z$5L zm7}f&a*a<9PAAcMBp72jL(Vsofl;9|ZzSP`F<6Yg!^>At&TelL0uLQtbKQ53|D2-R zbh^Ikyd(W}n-uG-veRNUzSg$JNmI^Grr?K0JZGuV_u{ql&~tgzozc#c#NGd;w0glY zii-y4u?^XY&iuyBUa5u{`(>lczI9$p@x`u~z;eM#Ri{x`gO5CweNAhJ%qE=k5sv~0 zERo{`Z~_q8w;xH6;Y%{IZpZ<}-u#L)vQlCzxs&z%_r2jv@E!8(HB%}RbNm7K#r5ET zg55$)YZ?m(nERNTrj!9e#`f`!8LW^?60xhn*H4BYr`+C@VNKsHLBdN2B2y|NvJ{x+ zZ8wAnGfjC_-#W)t+4bY|F6r#bGI=t6%}fTSu<~{;PL-7fxLU!9#+h7_zzYajvCv$H}K;@}%)ndMeq_O1e zKT~x*b^W&nVQ%XoqML(;SFH=F3zp@s<&sJ|4Pz;(Q6dde0R~M{qdK*!uUAuzumc_( z3JHU~s?4NYsDI2C@)rzlZdfNo$f<3>;D|Fqz>BddI0(&@YI#O>9EDr+4M^m{mq$iC zgd}EMQ8j~1X^YufpkyUbMk!D>9I5U8>5LHqs+2-`6;1{8WU)PScL7^AB~g%JlfV;f zaOhl-U5Ml^2K6?(@(u&!;P7PAB-yn`ovbz`(88>lWKS}kq-b$S&*7tS16Uq-RV4eC6s8B0ZOr`ho# zZEbE`rPY$Frx?(cVo=_6-St|;tc z{so&1BYhlZzs@fc)-4-u9l)#CsrZ&Ym+(a!@Ahhr>K%7XBM8g0Hjf}IGQ>K3L8cf` zv5b4-dLm$QLnnF)@R;sG-0BVEWyEt}VuM0aW3Bf{$&>cLIz@Lw!VqqVjXuXL?0V|j zO^5GI&X$(4HsmE>-`T!b^(74WJISxkNPA7@lA0~nJFWJ@sa{F1`;h^IX)QUO4{xri z)*VoGyil*xu|%hFtY@5#Ddq*{rgk;8E02mByf1_s0w;(s@+TEG6{;9Fna8c$FC=eS z2dSbSSY1$4?$n@KF(@p-g>odt0RI&5>NFPyK=qM|DWLiC$3_kdC&#|rWOk4-3?nL{ zoVo!@^BMlRfyS+0BaWP?)siNnvR^})_)P6)Ejb^pVcohrO^9N~?w5$L`KyhZ5J9oq zGt7Yqh4F9b&mb)S-Ogq&pw86z(iZ*f%dSB>(fu;qpK)8o~va!%)uZh;B zH`v?!?du|$?!GG-#MFvrJLs?%=FE9j;9Nd!4eIG=JN z9bg5MEjSzrP5T6gl^Kpv)=x?@4*&UgS{6X@(D^3}PXIwW0!<>LlAZygNH~eQ-<}8_ z#Z#mq90}14k2qoI2HtjYy{CuOx~~5hAkC4na*2NcsNT>0IK_r-=Us5LArNysj6VSl2>jqxEn0C1W?sN)yaEURd&y^){%215bY%FN~sZwT^yby zRw?sEf^s8YhcVrW&d?!BV^-i|0fcC#09ED4KcK1r%xL8w6$9>zEQF2LGs@UKT^6)HDlz7?;|BvQf;!U z`e^f6>KKSER1??qppMyb^u~w0YdA%b^PAZHYOv@5)pqSlg`7~hAWoOdyv~;a0;2W+ zT1Dx~C-`5 zKiFRaq=p+5Y8*nQ4RfQDQ@1!6w~UmDD8v9 z!J-wo4GcTe>H6#uI~edEMFbC=Aj|q@t37dK{K%yKRMGolHd!9g`^u00Q&P-3Q(yQX z>+Wsb`YT0NNGBMAni%Q$muUK=mxq9GNz07vSW-3jvjTPT)aH{vEmG!3cgl|3)k6=- z9K$Vc`g-pH*mbTAkO{H?!^XGLc&szm?ypL{+X^zyF*^wqkdz=}8bCvUII3=umr%0> zX1a5A)AD$eI-44#@B`khr5hE)#R9iPmt)9zwd7jKmsT`l8q*Lk8>eQ7Wz1fBLAOg7 zsqVnju0cpQmmO_dh$Hd{cs3#&Jhx=Am%4xrmKwZeJ209H!17?8ipW5BzL`?)CEl1p znacH@XnZcDV=!z#q<|Q@#jl1qs@E35EOUqud2f3d;wcw7j7uU3QhSlXZC@Um&!vU% z=W1ACTs^L<9M?qh#1(uR70y>3@F9#u*1jj$y>)g;!(_8@MFMR++F=vRbuep%iksRUo9m9Qn;#ODiE4y)$p4cx3e$TvzK3g>Fm!)x$+6v2oAgDDF%*9z^4C8 zd{)BI0~3=ZULS|Wb`E^k7sIfR0F9OkAHI{#Ri807-s{QEqVpU_g$JhYHhAL?Xc3Q2 zMX(f+OB;&tF2qP=J_%L5IHFNPW$OE#qDD4}2Z{J$X_-Q=5@iHTvG|_Rv{A^qUK)V? zs1>U?S$7WeBNUT#oEdF6Bq8R0lmKF7&nUXUcpsp4BwU>^!Yhy$v@c}grE zqRh3+HSaa=n~yQRYpQ3OV)j9dJvz!Yy5V<6#xdxb?grf$R-{D;=DLml56VQc2G zL-*`?V8)Q*bcKm3huwJ{ucw@>wGU4)7Im-$HOu+a`sR^XOS~F9jy>!V2F~!Utiv`q zP8Y@whh3%;iH$@hND|wua5LQJeZO?!NyDI%2or(^0|ax!?g&dm+61d{24R2i>=&4{ zOcsXnVt7Kn)s#s27l|{>VZSs;#JBMG-#vGA`Aw1}*U>YHpu>l9tz2qyX)md6nKLrW z*PPLhMDnA7agI01p_Yst+8Y&}L|qjh*_a30FG!RuYy_#3%q zWb<$ik?Mn#3F&c*`s9@2cnP0$tuig+b_tz)F~Fi;G*aZZQf_g|7I9_@BxCive+V}z zeHha7B7vrb_hjm{^9N)GDv3lf0AiD5F%7ptYJN9HV~I8cyXTr8r)6XMjQ(S*N$*7CrU72|QcypqbgK%`!^Bx$g-d$r>I+aFL-RXYK@rIiuh&pqBpPpwP#s&wmf7=XVA24*f?50Tix5-+d^&P)r-+4h(ft* z6UtKT!irzdsc^7s?0a#@QeaTR2`jS)Yxp$LOG{QrTS{)kHIqv#Eld~2GmB2+1)WW6 z5iT6KJ{DDf48_e1boya=zeIX0)GjI`l#5CZ$I@ZyTD5XQcxnm3`93Y?|7di#!OIS` zkS>$Pkid~H@74Kk_59G?@H{O--Vgr@GP~T7k!iv|kom+K0|pizg^ALnbl87TpBziC z_~1Wf?q;iu!}|$m@&MR`dMAQgK=vI>)U8<)_j8*UVx+ol-B`OH8wCx$1=9z3wV;c1 z&NpG+SVIuIPImzAdff{&SrJ@7fJ?h-)CLWj07`p|-Qh z#(86{>Ne0;+pSvGuj{^6$ySvrh76lDF41b1ZYCVKxLcPSMufQW3PUK{0qk{*>gRTe zz}0bc3wOlE)`*|OM28HC=xnSa^;i@z2;*yA*_RnZE^LOOoit75oOPY}%#769?WJ_4 zYAMpyE0tML@`Pb>{>_}YhPE+~AlY-$8L-p`Hhy1C!OrlhdLB4?hvRoIb>FTJ*YkC{ zYp-RdrGd*phMsgfJPh>6X4!ohB5)-0so>(d#bso*9o|z_*Fh+W>coFi{lLd%d2JSG zyNs^oxX`~0dEo(p(}BQk^Xo{39l1nUR%W%?YHmlUl_v=|3u7+DlSvj>y0d3@aQARs zJvZX&M^XtsorXP9NH?j`qhzHp(A{edJ0kih50{ThW3mZolBF@a1fF4;|-!-Ja|RH~VRDwA(7VnkorzjA}W?h~zp{K;AoEP}&( zC=eax!1>||JfT9TUW;vnT(VMx%l8y} zSU1OM_;X_=y)DjTJ;McgF0*1diD3f3t1wR{S}MP=(DT?X$ppX?*ZUiwMf>g~)zBeP zRbHW_pOSU#UAjgcXG)_C^yq-?S>i6FS?WQ-(Ae{Dp!*>IK%nf_W0xdcCw6CqX*y4S z2~`dDYP^d7?LfK#>YjWzTeag_EZ-CvpM1Ojrf9p# z{HpV`5@jV-JaXl`@(Mlr$8D&++(%2qoVg;`{wTicVq4pv;V8#zmLpW{bEjGu>QJy- zE|sc9z^F?*`7d=Gbv7{);}}BN!^K%O7hV-*K1dyVz9#bH+}PUjKh}DGD{^kgbTB-& zT3*{RA0Rclg_oOMF#A_=p_4=gzJE4L^0v4=Ii>qODXCL@zTcm!2~Q8mwUBA_H3aMV z(s5G%s5$thN13FUjL!bJ*BOQymN=%o0Pg6FD0c67@*&KGn^X(|O&28|CDWKJz5i*- znDmxS%TUPZZz{49BeamvAJ0xKp!9+Q<5Pu21B(S~BS3wcZE3$LNo!?lS%Lj7$w9RK zWUsY_!v<7MRJgXuv~;oU(BBF{n5OAGd!6xldFGVGQfu$QOS5|#KjQKkKGGH=neJ&Q zXutLszL+L_zb8B$4zA@z^j;5Tx5~FqsYq;Ng%(0C5S6ywYZ=}6+z8;ujbiDS=?vT) zxj}Ntkiub%1SLBkTug7TL;1^VPcn{Xnuocs%r6>)fJzJ>r|PP|W&^z zBR~ihDvrA^u;}ML#jP`AySsBDd&|8OJC$Caz0un>lLcT3U3e#63Ya~lZzU3R-GE{c z6*yn(jTV=e-oV1*?!O=uGjJxk1?HX50p?E?X3^gcEj9^kdWW*l3P2POe9giQ}|6S6uI*x}>1YY!WZO?;Ouu)sb#sUA{p_DG>5*KJy2g^b5 zMkrYfIkOS$^;XOmUJDBh|>u7j})a6s}vFx3{0@kKfQMsE>#96^v+lX z`kO=Y>C5T-QW=(fqX^QB_88DVV(|&X@kUktH|QeUMnn}yk~;``djM^A^HtVOX}@nU zGTasU#-EzKO_q*d4l;XZvgUnl`=IhL^b^B}F(Q|UThsENV6hV66nZ<6vB`O5B_I2? z>-a$+YF|Y?cHl&V?aa5&?e#42@8Km~uuqZ!qHx6uIhZ%czL>3ZZN{by9%2rPE(*8ieq`SK))WPQ6-^*SWm_ret1fksL9;g<1Ltw}Dl&d10ny zl}yWJGlE@5!mhg|tL`FFI`Yt*#_kPQ83bx94BgYg%a>b>Z&}aM%v<2l9cADgt6HgY ziKSU>Y6)MKQ98t}^nkut>6XE^=(c$~GGyYR6`XcOb$Q-0DYzBn6Bm2z41V!(aPZXP zU}6;AoVT)+HaFc?l?k~Ed-CMRR>jPtssp8ZcJ-tN+yLc%eq!I^-E2hQkgF;q>;OX%7o1W zh2n>#Wr>%^M9;zxqag#}YY{?z`x*jwisCJk23*STTFOOMpjf*o60PPg{Mbe6R#@xY zWxgt{k>m3E@&#aH-z-?(n(MplVk}&#+j1-|;J(H-c`GF>?`VIwayi9li`8zhtp)It zY#U~`Exey0*so}IH^-ZY@WI|Z%V*2#)5<26md$o<7p}iGrq|+`5?=A_32rCp=ipL~5QKx9$jE;u$T2I#=b-ENchVtvAEH>$@`b3-|d4L%lb+wxGO7 ze2m_Q-=m&7PO^5gw>o?6{i=wi&4V=ae^tY4NP3;2x1OW>ub!v+M72G=L$$!Y>!a^< zB^HO3n#e7vn&&fj!zd)Lrc0mbkK=*Z9XY1N0?Wk$JxblU?Dq6$Ww=qwd>|LJa6~{= zpwtE&d;LNb3Tw$RG#HQe=ftF!&N>@P9!_cPrpCCvkzYxaVG}P@V6!9Wo3V6>!uDs| zAoy7C*fhT~U!yNnC#@e1WVhFLd=g)=pR;_vf$zoV0)kzyxbAmZszCXC@k|Zzh=wb> z5^d3duFqk**Q%pklp~iUnj}w>wR^EnjN7aSLlBLK(3_+lMFLgr7N}L-Ni!2!i+V%^OS%$0=R7psWizky$|(k`rO8;;y;mWAw8l@Lm{X@!W>6&<`Xw ziyR}>6mj8Vnb05*bMgDP_bU5WNW0VPf6hygbV;*sx-h}PwLllDYc`xN?n9#Cbrho= zdkdQOc6kQv^Q?E0XyAVi%kZy4o@D%=jsa@iHhFj+e!q<<-YOdmmf?#vn-YE%( zCKGs26hE9 zEJ40?Q6eszQz>NE?k=@~7Ij!~W{YkOJMXn1G0PvM+(1mxg1~vNRjzY(|blSp4h@bv$ z1}tplgaj{T#@ulue&Bd`RDipF%w||}N}P#7QILYjW!;;ZHji$ zPZ6Ix9EgC7878Cx$EHZw<%>BRi^!EB(jwv$X#q;d;}5=z2oQYo_DWMRvFG{W#PHX( zYq%o({hFg~kF&rrbj-Ya(v7xTM8=R2A46=7@wWgV?Yu?D0&6j1%FsINv&%(DU1tQL z&Iyz~1LZL@caqdm`PEYPdF2o>I&j%E*GxxNLgi4mc-zn$Lh<__$C9I*I+)iau0FgB z8kGl%NS2Y~2TxH=8U!;?M#>+)vDciswy80-!WpZ%g-vrx|sj4|W+Y zFd4Y?a{q>__6}!8*&UK%9qcZW1jE^=DuebhyqCd-~e}= z3GX8UD8TWNP}_cUw3(IHcqv`djUm)eH-5Z)Hh&4I^zp6@I7#5kx7i}b#!?b0p|(alY@Qb$tRHL6eOvQj5_E~ljk*K zTz0m{J(2>U!z1tqXg-1M2C!@S1_JO!cnF8q)$TL(eS(W@Vg-&)u4k&_n{zCCd9Rdd z_w`lkU|{F`V-Gh?b37Wok38NmUUR5Rbwe=@RGmz$LP?++rkbV_*)Q8N>m?e5-1Od3I5t@I(2cbWx6d7}j7SgY zrIj?ccp3R5>L^&ADEl8AWZotC#bszu0wF(AyInK;H4NB!NYFRi*|FTHyYUixpJq5h zd-T(G9PTp&EXXQLJ?dH-w3^d~zip+ISYaZ?@n^+n{^p30I{^bRkhIbohf zqSUexvKk&Dc-Za+g|N}o7#!$O*|=}tV)lh-64A*64`3=3V){BzMe>HT6=M1($ZlhM zPRE6X#U>{dy;d%w%@bwXJk`tLn*Pr3;=v~HMMfn>f;yIes-=g@;#>)+xVS>!<+~t` z=vM@3OUhXBj&Bx8Jb6(aMfJkD%mm89V;yE$7!LcA`Jvs;JRahU#(^ehQUtS26V8VU)669UKsYK zFp;(+9XjD0HDg(?DJtDgxwPSr0+>sVCNmb9$?PruzP(aP7a*6sUUvAj+s)+%OZG5X zukf>|zYj1NGqqfcAt>DSF1?|)Y_r)3@a61R_?z%HYC?c)kr#H4J@)P zrqeZ}N@<;FT=-Su zi+>YzQuUZ~kY*zBHF7?u`$+o`fA>G;3!gGtquH|9%M6E_@CpA5P2nz5C}l082`*gi zKmAuL1i$TM>NUGRW-m(ox_<`{Th=zfa$PFvD-hjHo|eTj**vwwc)R(u8&mJ7Dg+%B5(HE(wmF4Xe9^cz(CNP#)Vx@y+Zt^DRiId>ERTrD7 zk7q$zOTKzh<2cB+Zw5_DbE1qa!)tMfTgWNmb00Vmo4JKS$dYB4IFC zNV0hfkm%#uO3UTp>S=-v(Efy#X|)aokM zqKylbdgB%-PyQ6C6=(%XGofl~h^l_;pAF##wKz0o%VZsbB;VPxhy;=yyXaq1^f9he#4dLYW<&JDST*o_F@bTgfm0F))Av=%L#<;o2z0t(U{^MVRcDWs1;o> zUsz^K_5^~c2D-Z8vgZ_+wkH#udLbnujibi%eN@P0baiz029wQLqGWwZB) z-UL%&)MVx*(nRZRYm|MwecHcL2pJBX+G90FMn)n9laS;cef0zN3vHfy%SE!As)Fm6 zZLV|vVgE2^;O*lcV!NHvoS5@5bf))&p5krORWYVj0ckRC-no?QGCpvjOLa*=y%R4YH zFh>ZkRdtvdi*|20WWy@hJ2y(-5OOc!>a`Mqm2QI`u&;NP)5V%-s_^$SxJ=y%EJ(J~ zm1|kk4DC)|c`@KT93*^St@oF3wp*9(!A6Yrm7u0X*d0Va&Q`x zHMo-%pq@2O)n`XOriw=0VDqtHyOkw(;%3IC$BasN7gb>S9`kNI7q;33aU7Z!YpBQW z-AqaGdQ7&s@H-zwZ1x>b=1Hr9Ei71lsy)WmWOwj-LERtFkBZSsbz&PF?)N{MxgAfI z>k{Z>UxY>66tQbcJHI}9F7&^pJnn@YQf`4~cYBsZ${~O#j0?Tp>{Wu10%Cb`DM~2szGAJ`pIMJs6bjyhkN{s}{@Fs7>1VDftm9 zXpCzF9yDzHCZ0Rc+$VTCcx2sLHDET3Vpe#Wzr;?Bh{ zha_e1DR?;Bb8~Pwrt8@sm_L$`m3YK;6=_-bC$V4zibD05=&-;Ur$<}&?bT%*zT_Qc zET&QYjoGx^z01_Q&&Y808)Qk)wlh=G@25-m-4{l-BXxQ1-er+80Qq)+vugcjz&yWm zk9)@3Hrs@DjTk7B;~7m!%bc=_kRqisJJ&){YQP1}!U`I?bp9@-O^sBx<5~S+SI}mJ zOtwMhFz7F|gi^E%yr#3%%&}$FH=H3Rp6r{WuzBvszeaeg?(4mO-lts^*x9}08?Rh% z2t1PjksBl&J7o=umMz5gt%!au)ygovcO0WS2!YCnZ~ygRn!^SG82KPD-V4D>$LPu# zAu?r6Ly5#R__Mz+=pZ)6Uob_NMnhm>+PKNgQclo!DInm8hGiU+AATGy#!4K_MpZ8b zfd-f?d6r#>CN>qFUUhaEExdjH5{e_y#u(aFC|{c9u3&LI@y5YDf=?E_OJY5HnQRYH z@rdh*)7S~{iBt%afL_X}4cwehHag9=%JhJUd#TL@!@!ud!u?(V@P$j_p|n?my=xN& zlr2F$$kCI2if$dFYR3);f%*E7u;5)Fnt&)`MG`2>3wUePhi_&Wk4Ys)5=)eux;cV4xqWgy=}A`e*vkB%-5Ln`k3tY58ylpfS~5XV;)2!qtuNi z8Djj%F=)=A`kx_Yq(sn|18BN{2?SG-x&xcWfGf1+A&W$dG4cAKEeh*cMq+ew%iP9i zMt{cr#&||@?A*ww_+H^>ox}V+=z9Pkd1lJ=m@dT$bwTj=;YE5TBg44qfb_L&_dqtv zyAdX}(4)9f#?U3oRjCPRZ)M*U`&>DrOk?$8#A*0)4_6V=lj5JEUKJbS$I@|T;o-*- zOCt5~Njvkffo9-8a2mSoK|<|yB_&G3gh@Uk$`3vEVnd7cSROUh@R@zwf1B@tp+^;Hl1MuRHqxoSBFH-mg1+p?7NFk?>7|5OC;u$N*$R}_3TQk{(*k8 zDDu}WtL$U@^K#2oI53{^*)a|}G=7H^G|j7XBuY8t)uzxlp~G7$rDQ@ymDu&E_&G7o zk^S2bTs(uCi{#Zgb5U{zIb~@t!cZf|T|`JiMv}oE5gte^Dw=RP)Q+6Km4bOxAAU*r z7wvDu8U?T6Fv{YmoYk~Q063ul3drq~6k}K$0H9}$8udc!mQ}=5-F0(zt%FL8NrC~> zluOneTjWy?|1jF`@F*9pR6qCXFSIFuSL>tRkhmSZe%e=rd&J3(Jv zcQ=8nQ`}+jOcby$>_kvu*dQ}d?m2jC;*cI-j6;kebp-d>WtKanZXQOcbMDEhI~96= z#5~fSh>#U-1?}GX>GpsoVpGeSxp2hRhHt>gm8bB44g4P9MkVS7Y+fT>o-NhR>DO^x zmUPTkE-$X~c|cbApyr_L#fuFZ`|7j6*n2S;9|_ezA0bbk3_fXWN8SGeH+*cBt|=OebVcni_VDyj_s4OUxsp@mB&G!k<#^AyZX`v@BfIcIz3Pm7^m@ z_U=gYNur=V>zKRQFQiMFA@!lmdKP**bb(TNQQ*?DO?4;Oe3|-*iztu5<3dh3N%*uhi-;52i z4d3O)c26|!u+?|I2|s3`T8n*XY627IyI5xnam^UC;D0q4s;F9PcG|!z%DR>h_bt(c zoy>{Lea^A97+VuR!QZt0M^}Dz*M8qb06Qb!v@^WzvB2h(<;Bk67l2-%jT7LnHv0CA zl-{x3Dfc;ivoF+UEr|2NakN2BP?K!EyFIx#@R}DUP?F|mxQ9ESD_*V5^Nh67O>{vn zXK^n)epB>(m?s@+1}LTkBJ^bf}-jt#~^&h^fbPm&vCAFw;0oa?xznXc`BTZX(t zOV%F3T^YT64~V;6zaGA7Kur2y>?p822#p2DZ54h}pC1q}<|Cc91y}NYa~YLlL1yjX zl>CYTaLaL~!VG()G{<#iP3Nkn1V?m++ZaV!yR=DW7Ef?sI~z@kM6hk`w9D{VAcjDw`stv25s8p z{C>CHHW84jaQeF#Fk?71~t~xiUCe< zXSI?VxQoXn{j6@z$_3R>=lAnk8C~4vv;Y64f|`Eodo`eT*usF3LEtKO8U^9t5?i9ahE+4sh|q zoO#ytxh<=n#*YY?sRACvC9B@9fA1Cyp70&A+qfSfpZ^F3cly(VC2;WscCr3NJxqlyrpgXu6m7CVJM~{ndF+Th5hd_;N-(?&**%T0bPTOv4S8s-ED;*i zOLZy>@YL-K0={XB(zpefs}TU^=%bY{zGo$RW+qe`zkeo+EJ`K7_a*}6v218b{VfR5 zthq$VT%a1vLY(;P)S(^wH%H7>M&Kme$8A_6@pcqh9q4+IP`^r z(CgXHs{!|G6pe*3(Mq453u+=K%_@ZM=8xzCiC}%$HKpxRtwq-nR z8AahSoj2EaKh}XiWT@|Cfr*^&iH}UKTsRBnFoYzr7kcbGiO8T2Fc&Qe)0!JQnVVu* zn_QhqQMy(#Yrw|H&8*k3ibP{m6&Z7~(i!9-TFh@hZbrIAW3O7Xs34g>b*wH3m%Gr% zSerC_tZ*|>aNr7A<{49|`=WoCh1#oNG*mI&>dv@nu)O*pn8I3J9#N~>?!c1T2Zl7t zFwN?mAilTgqzJ890B?A}qZ_xy%t@TU{U(}itNCWiSEVhP8#)v_8bVu^)fln6j)byH z2H&%Q8LQN<$!#y5E$fRpJj`;d)R#03upcORFWfafEnyo{8}c|YNU>@4XD~EE-Geho zx_9`P1xH7^L)8P~+!wW_8fsC?(&A7M2a{*0<}olkLRy9ocEmtY0(~ ze=Rr6M`jksZuizM4Hp_+&He!!DZc7ZcgG$0+ra>qM2H)iRr$3W1@38U$ldtwY__j0 z`Yl8!%MEgg)-=5V&;cEr7}i3)oRqv*Texi&e8`6@0Yp1M1n$E4QI1ZzcLV*wci63K zEAA^P%2x$u?(IkA=Au#E#%v%p?|}CFPuGgD9R>*l2aW zLQ&^U=elO}C*8?7gz_TVb1QAtLD;WN{nOZ^%9Pc(@1oW!R*`~qqo%x;6j*g$@5yQ3 zz%&8c3%vOt2BCICq5FktC*_hnE-cvXAJtc^M7M~#)mj}|izwTe6}?;Zqa$M}=!*s& z6S?A{(>GmtiqNWa1*x<3pA4NBP5_bgbAzOXy!p2ZiI z#@n)id8(>Re3c(ave$fyzO_9r11nM3+YdeW7(L>mxSHr)2Oi5OY)5W!2F|(z&Idnp zR&)k$8N^!Wnp&I%se25r0aZAc{u*hNaa`%@V~`XP61|M&cKFb;1%$_8{mNlxnOzXd zSS-+aPSlBiVOv2^2ZS}FMGpvg^U$xl!rw@(>2(0TI@Vla8g5b~ym%J8c1*|(sQ2^d z*LVie+fk#i*Ik$+JxfEDtxv56RxDULUq1;Y*QX`+qky1yedcVOFznHuFurGwwR_KN zg6g1lx5t=4ij)BxcqB1XPQM3J^U{BOMNdt5{dCx#e~c6R>H})-4&-*ASDJ^gF3t_l zWtW1b8IrzBV6x(hWUQ@iEv;)VqFS0ut*4$07tNisoPY8Z0I#I9XV*7{9e-1JX=ZJ# z%+2@AT2Z6rOPJXz9u6ilIJp+z>SEMB&eaAMmy@SgCDz41G@1(FumpTM<*mb<2UA)O zD-_ocoTn^!7Rw`r_Qsc=Q`Z-p>Z?h&=gOAZmYPO$1KD+>ymx`e7M&E+m~f2!ZfSZth7ZRNQ-Gz=_UI~yR=M+jP){F{sI9C4!n zuP*c$1KqQ>>XN73U@TUEXP3HNqQ>Rs+c}qYz$Y%OVwaq&gNW91yP=a;1;8)Ntb@$! zDVbeZ*nmfmp$2NKf(71VqD|YNA?dv97A9ayK|reZA3P z7W++>5o$EIB_=vD_G|l#)f}<)3YE3-ba4$)F_JD8P549G8NpgD!&ii!+MAm(a_fqC z!2(ZDV-$_b>R4)1lj@F}{!~^0hiyuIsA1ZgoL(`%77t+5;Av1tmTBYGf#GJDXIV72*Ggn9tg?ql(=2ZyUf2X!7@EwevsV}_FH%CAPNh{%m&w&+vN*qAf-Wpk zG9An2=&*P{3sx8?qp<=qfZ0n!3UP%T^|fw zMX?kHu)_$2_qyRzRxfU}-&f>Aevqv;o}n^^Axsl+0MHEG#d%P*etH!_=m1*c0s}jx z-VdP?3`;S0d3Ckrb-5;(m--5z7fa_8hO<2M!DCZkg&zy%AYfjpBGu~ocw(qXP0JaYKqhAYrF=BxZ9^Hs?dqQQd!G7E7JCWL=Xu9*~cxkz>rz68WpHY zUc9LD&u-qGGTL$@Mg_oD%R%|JXC1j^j>e9C<1+6*M5vXQY8s+XgBa;=J!`pK%P?(q zKbt|ks2FZWO>}FtX;aO3>*^3HuHxe4=lv@555IPP8>5@UdmO04E(^8XHps3)p8lR_ z*B?JeW_PwxE~NY(YO~`K9ki5LeVbh|c~w=*HB-C9Vyd~0v+u;C_&Uw0O&Hls2}Koa z60|gFmR15z3?p?(!DKtEACe}$B@YR2;-5-B+g z-c`0DBu9E>9!+V1s+Wt@ELm7(W9?puxr*uh@s3=cIJkv1_*`{!wzLbS?SBvP+UyV) z2bA*)euwd`;N=0~To2=$(>mc$irJFY2pl|^>(AYnkiupXtSOODdqjSVPXKd04g0&z0F9udji6!;|9hF#frdla zXXF_%EmH1Qi&|^3t;4O@__?3XZ$M*k5Bg1R<_l@XK?9KC$O2!}ABMaeVP~o5t{j;x z0ePco%D*9215f!!_8xM5eER1vm;Cl6QNDTmqpasvsWt!per zVw|S^gPXxvYjX-3qdLSGf^*O66hD*vVfvH&y)Nc!S@=^`GFEV?h98yxl&~}RIGCt( z5BQZw>JEPe78X}BMn{k?MSc_K!wG%Q$`Le9$OAV68;2Lrh%rCVwfCdE{x;O;yk-BH z8F=R`1|WoJoOh{ZSB-m%0~64WDBs#FRj~x$N|<$NvXrSLcBM$8k6z{L_cx-kR3d`e zd|t`io*Y(qN~5|4-2#j3RIR96>TY9o;WMtKNCLmOOZxKTV=Yc;zi6Fw=Yc2l;Um-W zx+~PvvFPIjTU&Vv3dZnf)%vC=Nx8$utubv*h3Ub{muX>(3$JBScTshpgZa+&mGV{9 zLKLR2WzYK-R~cca_ohso0rW?4;itUWOs0Zv5sVh0sk{}J8DxZIbXl8j?WEf5GZ}A5 z^W4!{HS_POsm(2k#EnuwiPMR9Bl!}(QXlT@)*b6p_~fWBaVg33sBp`B7j}V&$`*~H zZMkxj#mkV@M9iusjXV`rcy&`M+O#l(<5bkg63tvhbSR(N6QP1u0M#VkXo$)Z>1>yfk z4kRDMe<1s8^9hHAasD63&ItcOc24k%Mct-Cq%UkC*e}Cku>TPqj}?a%r{TB+-N}Gb zJoVp12e19M06TzPLf3G!b%evzz=MGM0r%+l{OtJI32?}85a1v}!;!-N1DO=zKgcAw z?IRHo`MeaqceM+u$D`oMRhx)H*HVUvpGoURzWpg0dgzu{caT?BcTgFgg%OQJJugA? zyyutdrrqe^02^lMa$E8?W;q*SF*7{@zL3{d6Q1Kr7E)PkurG$2=h|%+VVBObp0=N> zJzKhdd#T%1)9!qhrbpy)GzLX8X^FjI_DBMp(j6BpfWBmQ*}1}VAX)TXy)Ak1;^9RO zpTo59JGoqc8;fPegeWx#`>p)ajja$4IrX;_*~$?LM^sX~AN(3f+s% zWo!h~4m6l$NAaf?b6kViXL^=v7^9&8ffXckCiL(OM%dEk^;B${Xc}L+3eX|E4v`7$ zxCzOxEyqp|_TCGrK7D0qBNTkxA#jKHyr%WqT7sAVQXlv}J^!fXs?PT7x(=D{rESaW zIdkjqQZ|FnL(kw1eIo1GJuE z1{|zMx5#r(!ygrM9lkuKI}72}3VqH0E^2lb%VB9T`-nit zx*8_ZYy=&2D|pG#`-o9fPCuv_F0Y@!W9Vj5iIx=UPh|uej=M87>^;46{`l;M+xgwC z%$z*DbMqb{cjL7qvq`ZnJ-MBEqxE0pEe^Q%<;!*j)>`wCl+-k36~Z4C@1Y36#scC zJN4l67OkQlddm395FE$X?n#@9=-zfM{wVI4an15(aR2+yvRJkYtoG*Y((fT-QET|k ziQpni(ZrV^!=ZX!b(vMU#3D!BrW~%`%48uyHH!(obTdKL1o1g;fIfo@flSZ{;(;_s zT%SFggaYQH6cHUHrd5D(u&F7MU<7nyonxAqvbxiBnq;DQj3F7p6Q{v6yu^Usu$OG2 zk3bYuDlLy94KkIxR^LXGWv=LIozHI|k#Jche|2Lp$Pv<2ym| z3G@Fjc1}&2gk2Ub+qP}n>~dF^?YC^(>T;KD+qP}nwmo$Q#QcH0$$TO+_t|GH z!@lohmTai;F?DB>i*4wLI)6z3@8H1A-K*PI3n z+2q~I74l-cGC#(zq`|9+L0R|ZEQL0srxn>92NtbVf#h)C>T29jZ<8tf*%fXJI#F-A z;h2(WrAM|$^y03)h2;kRN$<%H@q2+x>UXh#t4q`Bl6~ux{?@NvtGwlGK?PI~M~fQU z(r=lVSl5ADyCrVqUtB-#Ve!2$A4hgkv$;b zL~1jEmFrnEr0B1ao`6R-{Y>AYx8YGG+1Ktf2&|xj<}K zzqz@YejKd!5PBhY_{A8Tie0*@5sAbRReCUqv!fyVZwVXx++6Z8a07n-wBVcDNk%F( z%i|W+M`^^RnLYR{jo^blqT~y&PBbH^f-n&{!0Li4%sP&sKE3w@ID7DusZbG2`(f{H zKU zAMi?}*cRWQ_pK+$kM8boU?B2UNbdjb%Kw9b{NGSTb~X;?{|l6gMh(> z(vqA{_IX5<*R+?M*r>W-YN(A&JgX`Mw0wVdZF6Q`l?eda-YTEnvdWqRnM8gGKZXep z28Ozx6l9&V!A9c+IxiH6!v<(s2&xAmxsVKCDpY2297lI-3X+gLh=p0EaCnX`tRrCC zk`(Aln61>FDpAP$aQc{_ilE}`yk{2o1Ha={!d~bFeQumOV$c!XrT3UZEtWvV)z=@( zr@h!`cYk5$uJ7ew9gRm zfnEw%=c2x#cv&*?MB>b@j|6)B02f&va2qgg&FJu2G2sJ)1NXaoyOc@K{9FP)T=SId zF3p@Uc>*?8(%%p&h00SAceTpnLL7d(vVl#CKkxdN2AlEm3~vRF%?dg3mJL3ZGMBz9 zAr@r`Pv`Ydte0Y(C<>;5jh8NLw@&}@6}#NQMa;K8!Snge1EnB<Tf< zznv>+Ab8~mxvyB@H$kqza-WkOvD1z}Ys?0E(24HzNsHGX8YV5zs!-2Zr}jE=@R|Vb zLH3tGR3T@%7D54M;Qn^=1@!}SE>M;zCQgvG+rYJ+5DIm-)K=Va#`{G4!PaV6=jJyb zg2M3ljphf?R*1qb>kG-LyhNrh{gKp5*q^QlS~G$tzK8)OnPC^mBA*Av+fKZ3gkr zhy?n~TX@Yx(AO3SPBW%=m`ZFWA?9BCtx)U)7$55L?jX^q%8TMh#p+Y?EpzN#@e8C` zy#xp#eLbGV0Tvr>ywVt^lr()buprJ$#0LN-VNeknL2dlT1Py?x_tWUJGQdfBPGw9L zWK~PCtSL}Wodh_pP~jTA*PyNhU&LQDUo>yHUGZO8>K+~6SiVqv5sH}Z0t~{Klz%~` z2Z{Dc8p4|$Ks7o zioY|H*tZ;CrxSu4|wY0 zz^=S{Bkec5#t`jUTy~@+7dCEfTvLN^$71Dn0qzOk{$9}-dGi&KU52^=OW72RtST4e zHdt8*7&Um6!p^0MX3(4=pFj$ta0J057w$JU<0`!RMKIBB z!j2FDx{+Xrw^Vdmy$Urs!mK?*l7X1-{1yk2u@r1k_4+qFP_@_Op}DoC$1_a}Y)+nM z!V3r=y=x0BFM~QKmJQICedY14d725}N%!akBaaltty`ro#{91taFkj;o83g0P)~W+ z2JYC85}b~bvmQ@MY7Yn^R$-TlJDx~{>kG<@HW`0q0!QfOh-sK z^mFIxyQl()`mgUjHW-TgZRRU64koAEah6@oxf zZMlBWBL#_e`g+TW)(myfy`0m+w>X^n>X;W)vsLMZKk9>*nW>>&pd)Z(oM9ty?AD47 z3w?HF?Vjn2)@xL=oTpE=K|KD3>O#6W%-mvK@v{u*#PMKE>*`XIQ+R3h{<}fCVf1&S z3hFW*y@cks5!AA zHXI+&E*X+e%cbWKEn6^R1T2D}_PE7GBb*zH7L!;3Xz#LzdpYRmJV^@x1a83%{qE_x z>5|a$%Q9z1@_9Z*m)>D_YP}7mtMBHT7yD! zA$a?=p><`+T2vzS@^mWuy@Mt$(?y#xv$bLiA(fb@-5(@P77DoOgV{i@V|RtlY#s#)!t$9gm5`Si)QF3r^D+X_*Y7Zwn-B`nO$c82 zN73Pe=fIPu$j^}zq;eY~_J@hvCf2IB2U+j+)N{RR=s*fi5*R-nc*BRcY!z2t54r0# zzs+yL;^Km7L@WXVCZ~%O{pv^d$~t_eJvGnMd!4Fm%Sv`Gk4OWSUzSnEOh+2O$8MJy zi+GI|AUHsLJ4zSg)4`A%=J)~vJ8>VjyHF}o7I585D(BPhIIdS@_$S;=C_}3!KXOR$~ zVoQO#KyS$c3vKV^u&kQri#NGzt5qeOTy2l%o}q!A%gYtnD+y)Y^mq&X=ZNvB2Lo?w zy6o0}=M#A9i1Txwhb&?joi-ZrNmjtJh48S*adjMI08@I3v6>w0v1Mkwz# z!29q5a~OaJEMq#DKc&TG28li$#8qU#%Yxc`ehh^XqD`^%Ah>YEmzuHMKS-t-6*S`* zQ9E&kTH3G)c2J7voH_~f#Kyn2BvB!#Dy^!_DS9T=hGh#XW=+qd^n%ytXTD6hO4cw#pC-y!+j3Ah3(lAV}Bql6q^b40FLlFHNIWyKZ zU_*0~R>*<1_YP*a1u>QJM2t?7&K}nD$tE|vG-cI28vn;4qtKXIHTmAq5cLK+?t}$9 zLK6H<;}Lh&NT+t9GY?b-ZoeiiF)H}Z0Rx^5|omSyP&N{x-2TYtpY`7`l&sbzfgYk!qRiq9vhl4p?P2R1DOr zPszEV@D*o)Jh2QIv1SDC{DFRGxTgKCuL87$Z>VGYQwQ z9+8k><|?@KU#^16>?YGbj8A&B5iU7g8igOeNv#pqroblacX&EFM8>?YPs>}Vkt%K1 zaa?gdI8*Sfj6iyO0Bx-KpeXym5--A+ReaN9O`frm$yhlSa2Ul7Ur0cn#{=J&=p~{+rczGMvd!M2i^Ojz_onNWx3xMMvk|} ziB`TNXBDn*f@hQex0!|UR5f*Kx~DB{VF zrg!R_!x3_~~$J_8Pnf`uya4*8gV!nQ}bq^GG6aKv%R+fERftpG2 zq8f4sB?g0HiN~G-K~FPZ1CpcCXkt89h9ymbi9+AU|ImZTC4VuD4W&O7@}f1|OGna_ zo_^7$YoTCTxx8J}XjqyP*8BAp(PK0|I$$RBgu5fFQE4KeoNk=8mr@sJ@^EqK>IYjM z4xqZf%@Vp;x8Gk4-x>@n_`cjo|L_I)*aa-7v#!wNqqm*!&P(eFJiI#hAC9-LvG4n8 zO_$^@%+@YS7C0+#jj=@uab7cymORWY*_x8A8>|%}SSR?kvQINEbW7;%t7eyYuP5D9 z<6DX5!2r2bWdH+kyd`B>apRsC{6VK*68$DoWoL$+k|V4ml0~?!RTV(P0CcmbSJVK< zKr(g4iI_B1q(Q1ONhv2sUR%_wy6tCTfq-^DMlKtw?i5i)R3AINba8E)#_;j*28{+k zuzmcVMMcFTa%c~*I#889=V*uLM?cDhZJxvb&$F3Qlkh;Jgy1!>?M4+Hd?f*$4jLv4zjn>aMSx;C6oLdWt2Do?Juzb_ zPg^twTmXR*NZ`2Xdum%sdmB@c+fx+lWEilr(i+~BLX7sYhbXZpv}g*FRpHFGq@nuN z>F@z`f%S{vl2@d)4RDS6jb+AZ?gm6{yH-=^`cbn?5OmJJtsE$^hWqL3W$_ETxCZzk zpFTR{xO=+E9KDY)hVP>}7Zes4S;R(n8`0jdOH*i7qy0u%a=h9^T~_gNb zua_9w)z#Z}ccqfgh*eJUz8wkLYy$3wh_?JS-+WR1U@HE6I{NdeB}kW?cYs$rgR#u%t6LkigV!PKYGUhuuX9t(T99n@RWW;vjIn+e#EKw^u{rVlz%+&tvp#c&_H zU^M(p#^K{*I}UXjIAWU&A+Y$76U%a^z|wQhnJ4KH#xzxQc$^2)(_quu(=dqVxnWF8 zIP+=i#)}qRMXN5q*qWh3(kg*w!iSi2b5t#gbr~`Otvt9JH7+`YZ6+2$xAJ`IC7cP} zaZi1$G>yjbO;tas-FL%18LwXJ3cYSV1CRLc7cyn^^h31(7;5O-AJ2mFWl~@7fsd1} zyTESPTc2-LsLNfl9ltjp4wgDS=dl1JD^=;91a!?yH5m&`u)bo(n!`EhgNSi9$%qPvtom5nO<>u+6*s9!u*x5;!P64BHVu9 zAz=1i`AFe01%ufo} z%W9nMCO%huw)tlMe!j8|Pz#7o-%x0KZb_{Ik9YqknW>Ida1Iats_(O;KMr6HB4G1NsN!4~54Ml%g*>r3;WKvuSt;XQFfjrIBAzyeAI zoX^(og~)!TiKcd23ztVB+$VY_geDXx%D_PWiyS+2uys%16BnTR*1$kpC7JPrLFb#+ zP(Kt;y{lwW>rI7UI$CUGf8YV;U6k%!)7+F8ko`~xmi73f}B(cj^SDWBw5%uVJ4i~?bsn{oY2hUsBNa)TjH~rU*uLSR)j%!$2ggh z+`iU6*3IlFYG%D)Ivc8v#G28@vYMt=0jC&7(h~Eps{|59D4OHxWNc)W&CF%6SKT^t zAbN);K{A@)Y=(20Mn5-v!{}$4%$cwKj$mn1s|zdt4Yd`;G7=w^r~~7;>j51+8Xtm2 z*Kg9roX^=54a(L$Ba~{^wE-dm>Uce~kpUFn4YXG#s||E$^%#hDB~ilj$C48|y0{}q z>fFHH)Ki0c6#lqo;IN^dyjMHtg%5XXbaFDVeEgDXA-phXJu=5#@xp4+cE%Xi;QF%5 z(d@AbTjASr>x6Qj8Yj0bhdFA#{hi|F;M%XlI#reO{McXZWB)2+HQ4*SwR*36S1#D8m2%t< zdcC=3wCJg{Y<=4G`aJVpit)S6q9+=pZimk34`io$Hidk$#e?$%;1mB!?yJQ|N=>W^ zCx%4y;Z!>Ci}6u!t(y*|ybj0G08L|09V4f81U3N1IZh2cXIWU-xevIHNm$jn5B(3u zaJU9vKWCh#s7T&hrZ5w+WDN+yZ{`aNBst_11JRZF3+|*c5p zwrZ{5c@Pca1z0h+k+;!e^YNQr7+>8J?QR7~%!A5`8&OlWncZ-J^dvAsrS)}G;~joj zz-{B(XnayU<+8&mN~Eb!Ad8of=+aEB5sn5eDU76FdG619+*f7a-8q~o_KgYE5RaH5 zZ5S4g`V|!W{xE_*=JEsY+eqs=LkQaS;CSmry^az)q8YDizYBf`y-CRH8{xo`b#_+T z2x|NZAqGYPemYrI>I3duq)HW}xOX%E#@#0T_6Qx&%1Snm9l#?&Q-KlAv8`ilKgH*}SI(>y?ISXgLWGiN>X=A@^{!@|*gwDu^TG6E8bb|?iCD^O0 zk_l6_4ec5r@EJIh65GIecg7wQi=VH~Sny@vM)WFn_zLx}E3DCeedg}2#RrpyvXR;37H;~nide;9HD+pxEUS+MAD;!66c6nZ<`(gqV z`Q2bH{ErH#%rbWOTIm$gzy@j_giWYrg!62ua)f{|svbMO|zE|%3xA4?Z)_UClO zAsr^B+PsLLwxzdgv2d0IP z;}lTb)|384d<0~|!ARW>pI;8mx8Kg+u;%)5vs1p?o|yNCjnz`3<47LcRi2tfeT);p zyj*ZDNW$6Joh%vH41eN7ZPD>prVftsVmC!epsu3b6_SE~a5V;alMx3Hy)pmvb>a2D z-5=e#7+G-=YA+(>ah8i(RXjiva$(Yhpyg>hE`J+b6-mbtR* zNovntlwcX;?}n+3!x1+xA_qidM&|%|a%+IL1Lktq|TK6-MCyiGkz$~nCcfj7(xFU@K zEHP!X^pU(e9yz9t9&^;4w_>hbi^~J-vEQL($fPOAJxdax=iq|^K`l1qV+j1bYa5Nt zQ_Yix5mz=JUet!<1X`5H9O9{7y*T}cr0dAW@cQe7G6XM25|CAJXyx0VQf-=zgjleyS`$m3R_XXY~w=fD#r#r-liN!=8Aw z*F8ENN0z-DK|Op2(M9~@(?FW1mX!U-`Vdxm!Vi70vMRTWWCeD1du>ie|1%-;lDr+H z5W(K2L$FskSo-ymP3i@QLzELQ;Ma!3Lrbku&TY!o2L3-AN>HD}xhSH8V03Y!B!{eW z2k!kONJWdecbq}BwkYNbS*qi)uvhoMB}d&)J;7SYdzCkyJi2BTLIX5BQXwM@f0j#Z z%OeY(l-@N`K{)czHHMh>SH#y0$2H}Yp(uwMr;>V&f##K%252rZB03VSjGCad26QIw zL2M~iBMMVUXBx$n*(*~}b7{)@EBb4IZ-Dwo(>=X%4!mJXY}w=1)ybL!@MP6 zc$$oH&O|Yp&xUD|`TR=KDnfjiL3(jw$A!n=?i+KZ8x;grkdj)Gsz!@`p1I$0Tz;Eb zQ-@q&UkIVK*0fWD`+qmPSonY)CFAp-D2DAMtG@32yF>|$sy;W;y{|2>J-;ks&-(WD z$5#OvpFY_-xjq$ecvZhz{fPpo!^QNm6b+%{z~W2-dZJNvUb^$XP(XWLalpAQe5$P~mj$??6Qpp5bFg$)8#jw*X0q%3EIw2(7BZ*c6eJ+V&nlE|sjx3>risVX zF^2YU0kQf;2Dlek7t9|tLs^Bts?3o5BD)1p zO*QkCHM@GEkT`{zucG3;fb8&j$m`KAQsdgSCCM{mD-(bQ#N%&xHeUHR-Uo*ca+l>P zV=g>!O?}?Lr_}E@LAw=vq_+kgZ%`@!O@G~LI}Gz&^d}s1S$=DA8SMVi#;56=P zHGw+`iR!YgQKcKEACiGS08iP!aZ#3+Xy}KG?91&lcq%_Yeqw!n=vFQ&yx0`*IET}! zOfK82@!&N(;3{AMIiSF-=J?=O{tJLC2MDTvJ|FOoI=@UADNsPTXeV|g^BUGFaI+no z)fFC+L)dCFe-R`Dnw%+5XpwNu%n=C8)Gz;nuk%6<0Tj@Wjq9I^7P1jnJ_~>A^2Elg zS>(T`x)*v_np@NFewaeCC^e>Z9p6uhb|g|?eTzN@>Ak2oj)mhgT8`U>_V|#LO&?1 zT+liqu{Xq52)=&Jxe8W{5ppv*zYdJ7OE$y8zo2fldW`2tX31kXN+)kO5G5vo(6^;yPF;2u^w*P$2+M zV^^u`ytZ6Q^pVqenZDKi|Ek3ur5NHdPp# zGL_?x!L9eCmMM>8oogQF-fw3co+OACS`}K_8gbeYMRvqHme_ec^>DlPWSo%Ez@;N* z&Cm}mt5IvGTwy=0KJ5rjBZ3>{KxFge#6v(!h07m_g>AjRc_7+5*Jyv&>=y+38rGwi zfd%ke-_Usrm11jjifDG!t zOHMEs^@a?^(IFwR#7h-YuzU+K@h{xN5DpZ8;tvkL5Xp-=a?uj3B{g}Lb$E;i4{)9? zWQ{c`7qN^rgpsC>Rw)4N*0T5ozazFBDPL5_ATvs)V)K`nFR*U$UjJcqC z)_)F)FCDi;s0xb@NDNbfb{s_h6Pt+&ydt*wvtQ-B+>YH0sH1<=f$pNE)Mk4UsvbZ| zZ~@+sYgd|w_s`V#Yc=PzAkjtrSX)U$jgMCoeDl6LUPJYMqWeBTay?kLRq< zW)7^r^u64%rkt=s4T}#ux1KuwGJCk}*%e8c7CS(&sMXBhqTQmkR*fl7Rwge&P=tnU zfJmuFL*u5r!R>h!?&F5uC6jHr4q(Yiq9(}_5nJ;h7Zea1c-;GGhca`p86FH%B6WmY zQ3lPBHW6_Kkq-JPbAbAF4%qvtF5&;Sa4DRX#-A+6DOXdV?0WH@+;X}bhbOf%7uy3{ zs3p`8w)$RSTxF&QYG5z?%E~g%-611nIJXKw6>~hCFaz`93zC^r&j*XYqPO++OKzT? zG7shKS_P3kJS%=|jKHi1?@=$Q@PdMlD5)O8jmiS2vY@Sz?6hB4#b|bYdJ^@v`n>S& zFq$!2$9gxb?o!#XAcuq1kHHkutjjC=2dLFl`Ds?Tw({#%ms6|Q`-yH5(W|saB@L-# z?jQ=ig9(M98XX*pF^?ZQw`uFP(@1GB@G4(&ELy;yaTHgrU;Lx-(8*XV3Iy0QBpP+J zp_jx{q1-I$wr>JN^S1YI&o{~W(7@whv@k0m_HJfGg?ac6@7Z_Z-!(s*w$&CvR%!;X zEpHLd*b9$2mpff?ISQ)Mqpg}M{rt*o#Qt_O^x#%Eo=__E73~>oT@JxNM5B8QOYqJz zc&7hRo72JY4-D>h(x827=!pX@>&4cY(9Mu+pNYE?3B`wzgcg$EG5dQPKgzq!lYD+n zVl@3s2!{Z<=6x@5_mn^SdiBrd zv3>&ic}bKX1!9*VaH0Ck|3@eRp3JHJmFkCE4fQIWOKx#J;ey^y^MLvOmvkkFOBdS`+aNonxQ2C5V+?K_?OnvB z^cUy={u3{r<;r89$E!h;l-J-F#e4J%^?T||>mllU^M&|r-XX3hvRNjXL7K!gRohjK zCL8>D8=#&SPl%8_k2>-!7JcG;fOr%^5=m+YnJmOi^S4Px*_dA`D;zO`oRSKei=6?c znc{DDaa1aiaBkQd<}ezO z8|$76k90b+YXL0LE+(Q05cy=7=r!IpVUG4eOB{X}FOV!#jRi(?ai4*!r(e2gltFIM z?}V)_gl_W~S_{AlMI?(T`d?Ygpe5x{$Y^dpyT~P|1;g&Q9b9b2BL8}@?>(Qj233+n zsYfk3L`2sM|9b%|bK+W=QMuLJ=&A#NL(~UHtBt{7?5vx!%wpp=QlZXjYz3M8y?)nX za(T-`ES0m#ip`DNHbISN$(^^QdQRV)e*a9A7<2ye!uWLL)^CG*10zUhG}uD~3>TiP zDFwBzJ&iJ<4ys>#jJJ_!3FyUiw0!+Cva$L%Uny$n1V0i_Y1CWne{_Ke!ZVF*$koK9 zb4;RD$|rSefuj^kS_oIeY|iHee@mokJjtA~nM=oyg6y0kG1%!{*Lv)tVQt2n%CaW(%$Mc$hQYe+nb#~hb z#7erN0L^gf(C0r2^fxwN1AkR@tYx0|G1fMWCt6vv@V?Zw$iB3_$F;No$<3c%D$A;4 zFUAAHJN!w(Q{K#P|MPLL+G1Q&&$`aqyuLXuT*kBECwd%m)#0MQtcDQ_jc2@Pz75|4 zR)>Wc6KD7iGW?k$^4CEDt>6VjGrfPzSB+O~q%>MClRA?K=^_VF^!elt!22(~SFoX= zO4PD8sC%fuQ6IypP{yoD_Tl)ab56~B&Fr0Q6Czw9(=lSv8R(-4W8(4c@t(yxxbYqI z_7(2Q(yI@kw`*ZDor~kIkrJxO(iqhmygu0nNif&`Ebdt8ctEw#Yei9%0hcOFd;C#W zw_z|TbU$6lNe_oc-DF6fzl4^=)~$(s=-|^HP?iJWvlUo^+uFlFWv>%|Gpr6ppxly$g8_jQ~f9o4hm)19%-(yUDtFj(59zR!a zIj6V1d`J1RGsm95TM?EJrVOj*EbKrlMO#WYRwoEovz=93HPo|mB7xL9E@0HrY_G7v z&;RBwP(8ww(*cRZNT)y%4>Rk(;I{zl^;vOL4Foa=dTV%(X`$L4&Dy*1XxSbiv#IrE zbHgXAzO}iRFrYygL)qc2ltuS(yTj$&>Y+%j@o#h4Zd-evM;-|3@pD8ZM0@Ga%1kq8 zKcKi491hC`a(40xzKY((Q{E&kOW1HdZl!W6_-AAPYa3w;+-7fmIK{L( z%)+p1`b~|LYb0?hg*v!AOBUx|$!LWqks=ay<+&HPWvWM@K!yXQ6%?9B)H>zIg zcyGNC3=>hhlKk2~ZW{lc^}N~X`IXYS+-!K!hMA?oe(%$-91k-Y&O!2JgVL%tQEd&+}x}>GKjT_}Qx_G%&E_Bu4r(`a$PMjBWn1jcTBBWql$) z*Y3+~FGp8r3c7ury{|10ySlhcD4^T=Wn1L_gnbs5n>tdd9DWaT9=z}1665&|=4;Cz z%~#pCCK1s(k>azJIa+`9MRT+x_vm}64C^JFJ|p4JIr>$N%A0GOz@IjjgXa6ViOFk} zJp#ccZcGvp%vCCBc$BS<*3`6_xFL0X6&Wm6a_jU8S!ev$ag~zVWVu`S_Jdgk+lm1) zp`i4=$rubCF3Xt_u0O%b{$g>n5#V#?YT(Y%*3kERb9tNZ{Yxr#6{u#IZiXInMG;G!XEeowQVV*^O~CR@idxe zG@AFGn!D1Q9URUwh`!vxu~J)hBNIpmsai2;pPx6bql7j0F@#32T`r1S-5zs8N%h7h zYbFbw<1YJ(S;e^a9B!cK$CTaDUy_Jd{4Dr_9YwXzUV=5XKiI%*BBwZe+HuhNfc%HCa#* zSa(Dm!xD&27k@0G`Oo?!9CwqY6VAQGxn15HglQ-FE{LCV`@uh&Y3W`qhG@9R=ZCzik zHQ4ODB$DO(J+cHQ`Pyo2RL!qvpC}Ku*qg08I2Ic^wf>2wUJJ*VF|3p4ODJ-g#-Z3F zD0^_bQ_m-B6o_St@3zdXuIim$;*m!x7SRfh3%1c+_KUl7hT2ZyrZl&jNyg1^FSO>= zl{C-sE|lwwnThqn8T>K(BP^%rJ-gZwk=q^WJ5uky(NP|LVL5@w1vVdZDy(efQS0G^ zmnp2=pM<;FD%3;sJO*7-x2}Rh9Y?Brjg7d(A5uJ|bZx*7Tfr6JQ0J&upVgFAUsPe$ z)Huh3<(1E<+CU^0g>u8nJ~r;eRTPczTRWG#6;so3hoN8??5ro*{lvHpTl9Wz)OLY~ z-^7~LkQ0C|zgg~dR;&NYQw`2&@v=8}>DzL>GIw0$RlDE3ZR=_CTBqZg#IVIaB*->r zez$TL0^hPXUWsM9q3LUVq)?36J%aYN`(k^gDV$Ye}h46 zxVs2f5uRfa)_0pomGn!Ysz~X`+8~`8eal2^-EH|+oDtDXo6B;<8yyMm`&EB0by$lc zHq-JN&*%FtDL=>Pyk~@F;#C!xo)aaoaB>czRG5b$GoC>TH(W~uJlmd8m)!oLG6 zXp*EJ6o{G!9lsUstVDO>K4KT%_CRa>nEGRlFD}n;@-X;1Q~ekd$Z%@~uIj!C+fd4W z>y7juR0IJ5-(cI&ki=7Uv4Wm+?QFTJ`P8D)Xl_gSss!&EK)F^s=zJ*2&XQ}2)FGp% zF6a;s$`S^6YO{8?k=94a7L)P;r^2SP~~KmsY7V1a0J=BiD1#TLX1LDkRgd zV%aJL6;(wr!>MmQ+q}vG<4T62cyYQso2b8S8UExEvHo+JLVC?K_PY|=oO5YH7rammk*4vyPAcB7hX_-|o z^)}G6utztDQF#fSQoxSqfISJw`I2#R8yt^-<5TrmRC|%L!2k6p%Xka%c=5VNdO_Cz z78w5s#?0EcPlU}6;L{xoVcqF%yi@7WBx%StCw48%N|G0W$F_~9em*weNiL{ z69f7r)((dV?0QwcRLB)j@{McfmepG3kYAV1BNp@A`!QTwr;ipYwSheNsrRO=KSUsf z(4m_Qku$T_2guJ|O&2&e5?&&v4R-xLKSwx<)W)|cT;!`cjOEU4+?I=|emXybV?;a3 zvcPyxXu{^-;1RX@{x_I65AW*8LpuTQbw1|9_<6VeWKzI59BzSHmp0!`L5Lxgdkecw zZo0SJC4Hsci{I)3$4U0%rl44riQk{Vaz(Tnll$Cq!?H(88EY??$C4hOGqE3bN{yFy zWFpx~uF&Ra&g31g4K#2JH>zvZtjdzHr+Yz9WinS2^&NHM_6ZYNM;1V^OW4?PT{&09 zjwrmGbLzgIFwLE|Q!uiu0)3GXfT^X5+~SKQ%URzYw;Cr-b|8dz5OIFGK>m5WKwl&!H> zs#@3Zie7PWy*~%>cAitX&x@AXKp&#M98HUl0Sq2w?^UkZUb{kWACryU=6I~`J7ZN= z54*ysHn@()*SSf2cLNvDI)pw&hsbrlw|m4f0yB55tHo?dUZ8gl`Ool>!#4g|SUhTHMpgBI<}( zI|v$Yli;ipFDps%!=?3wigep~n&&og#hRWYCN8Rf-Sk z??=UUC+YVZVJ%Hzp8c4o-Q3F#(TZ+ub zy*9oM%<;s8i&MKTs$I^ocMAXLouTCMG8y;w*R<)?=O*Tg_pu&lh71ScR=3OK7ijtN z6(vH3>v!Hkwx;~&qfJI|!F)};;^^nd=@jazKc**+eDy5Rkb+J>K=!$B zgC+3e;EMZR=zg>?`Yhmcy{RCq>mARU za!#%>u2k@6irvPpqQqZy7*I$12yv=A{#DIeqLGO?0@N7Gd)qEXRygO)2V&ydl-0DQ<+%hY9rpSicsYIWfj4|zNbDbBgKxv9pyH2!00L%ODna}lmnm>iVSibXiNiw@5@kq8D zn5`4~t~S>*(gq(--PAsX-o&$}f3@@iBq`Y{k4!qPpTay0xz>;d(BngIN0Kx?k zchk38g~hew9gk{f4kg2MK6d6q?VfctEy-tQBL?d-1#=9buYjFs(iiLoqddFKUE;7s z%eLz<$)=g7e&uAUtxG3+`dmqawfc~B?Q3j796;F6jpb{zF?z)1*e3m1nAMu^P;@{S zf0e9yC~)jndjgg(MbN#h#Fuk|ikK`cfs*IiSLfQnrHjKDqc&8&-;mHi(3(ekGMMJkSnDM)&)nmy%7@h$Y=s_06A zPuFZZIQ-WgSq1RfTN0tNX8K0W4`cjJ;~nUY>gDNO?A@`Le3^dEdu&wio$fW@nh*(g z6+;y6QW3IPn#4;Hjq7A$8)MYc5^=I>LLg-Id ztbeOZ&8S14%?Qer5VwIGIxG;}@v#&Op%LrvrYxy`37*Bpjg)wZ;Mzo5YPHgQ{qN*u z+WS2BOaD!0hHt_8%bJ-3wD>EPtL81wlJRoUit z(V?GqhgchZ6B@Y@#mB(K#+&7B?5Jn?aolOBi9 z#nUWfp*1<@qr#sNYf%DaU#wBKL^f&RNBewU^?`VT&^#lECWre=ZAXTTlP`bt=1B(4#Th=M`L_rL6gH`f>34{E`4$p513oMSr)-*#VYZQHi3t=(>I z+qT_qZGXG9ZF_6mw(Wk;Cg_Ia znQ5_b&&6YNJAzT51GA(v-MT(LSn+*hhj^p4D`V#II{38V5`0lq3wsnTy>2D|%!VLg zB05WK{6UtLUZwr=Kqrr|iZ1r|)pNe+&CT+wr^yaa$i#6nln&zNO8w02UiNY#cY=i6 z&Yd}9Fukeo1)bT?B^O(#%=Jd|XjzbY8SxGh`SKg2pHVupnbTy_TKUQ;NO-HAmQsQ3 ziFllK9?RSrJ3Z(SMkZ=-zk1M956a}Oqu)mhZ>g0T;u1^t%T2?%MYUtD`#cgT_KnXF zy%_XmmziH+FNU7x(JU(;13yu{W&AO^NiUOkgnN@`3gVA?^Ls}%=FHlqByujr?Rkji z()S?A47qcRJkp&Z1I2Mh)y0x>lgP=!L26koR)XS5cm&j@;TndBC*6M4XOZECgKp+Z z$#Wn40X+}!U%#`GWGVgHJ%xo@U3;xZWz_Nt9Lp_&sfofX1)qD$ zw1KM2O;2tN@F7XMiv7BBym#kZZ?In9M2Q~d9pB$Le%22XtWWj}w|CnYY57U{Wp`lv zvVo1a^oxd1wE~KDfq!K+Iag==zT$9~jXW>c1Z9FQ$r$B|*O^&?gxH)q6J(E6BpAx`D_qRB$fN;nbDQWg#(cVfq5Q<9A@cS`mJmj#J+u>Ncjq7H4}yJMC%T8ocm8d0cbb`Us5z4F$RoSmkvv(fwdiGstMs?L;=o)M zG}0dmNoGn)YFe#peFKpAy9olTDd!e)snuz_c$~uUu$-L&e_?)RK}1(opiJ#AvPWAs zYMV5ihSo07M=kq{{eW{=M<=`YZjO#R~4?ae}OavnSag%ixO!ixs z>XbZ#hv(!aJY{@8c#>rNWsRw7vHnRd(oa(%?nKT=(ef*vL|kj93jRoi`1%czH1Bo zB-w`xv$o0x)ScQ$g3H1+>wIk-6R#f*sjalN36xKEM|u+*|TQbGF1)Vl-??&-iO}%L)o~?q+G`ew;h>$BuFhLK0;TF z9Fi>xhsB-nI5}fD)|CG z`nd{`sO5mZpN-^`i;>A^4Cuj`jB~vE3zm20f2Y_XDcEX`J@?_OTmu5AYqCS$YPhFi zhAGG#1$cVb4{KZ;nE}iTt5<-d#8Z_Z&>O=%nl=d*gn~ z6C7?$(Uq@Y=pFg0Oomwx$Uppbd@~#1-}M~G5m?=XG4o^pZCYu$o7Kb;5}G~3K(}Hc z_K%Ev>v8i5jh8iGS?j7QRjXw!#n-2&u(oqu|EkP=s&2+{(ve{g%SzT(Hdj`!viYec z_Bl4rCs*f4Z=B_;>?-oX=S}A%UOW1m$bvQjLgD99e_`Ou3lBkDq@MdgoEk(rijrw* z!6;&clIc>Xn7N!J8S=UR_7U-V!ppqKhnx~y_}~ry`J{M zTR;0enKy=aq3<@i)q5Ub6J8xGf2M;XVAe@9tsW{Bl`xW0xS{MACQdJEM2sIeD|l^! z1-<^Ev$vUwsV)KLM)sHnp~ZDQq6@cY@+{$opZ0FToK!iw(^Z^a)Qj^_@SF^#*XLZW z8sH{3cAj7|;i+ZiwCK#tOl6o&nLg;WFzB}1qGY-~U3IsrB9(sSAi2MzJT^kqva$Q1 zc}bGHZ_?xj-}{IL!}jn@;HL-}Jx0iYj-~USI^m~(>}?mdt}5bI#gCAULOWHli{-^q zB})GkyB>lY;wwh*Z1${uB=XHPeI24^L^e^@^;Q2whg0=2nA0o%;hP`^td}JOah_L8 zilUxCks}sEmfOLjL~F<9FW^@a)t)3xrnI#SW$wRYrz(Jk;aNw7lSl)Wc2pw8pVK~^ zY-gHM?vO~M5tF!x5~HJ{Lg$nCnt{Qft3Xo(p$-j9P0Amqy%}HU$}L>AEOe-KT31?X zwO-4Z>9w|W5CqTv+=4=1(XP^7vG*VnLau&awNSIn)3ejtxV-5)nUsXKbJGB>ws)O$ zo#ec9?VN0~nI6ZrJ{npzJjz(a11cmUz0cWe3E-0y(GS_ zZ|oVppTh2pGAX1vU6?*SP}y|CZZ0+By&?oOgnM+KGgMtGSAslLHqv=6SyS{T2Dqy^ zZPiumbzCedYWeJ7JH8qKl}-0KkA&j5H{T>tYj@r)Ac*n+m^*XRK*i=L1`%#OIi(Jz z>4!AFMJrq5VfxuB-bHUW8X-4A{q8Jz#b{vmIA1(Zr)Avu>!9|rcl6Iw_?=NI_8fIA z)~pa3enpXS7wf(|H}xU@(o9jD$281Cp$VXUNrUGd1CSU{IS|Mqr617T;{3m!n4?W$gN1Z zd&SM67}rglPHoUmwLIjypSHPT{;Gn8j?uZUVubGP0Q0x(xIP^NgT6sQ8!^RQA1{xK*`zQ#N&bK-}hgSX;6aOr=K!8L}t^dc( zPUH1)u}&otyg3VD?Vke*Gw`?ZXHLJ7rvh1lJ>DB-11CBnr-1ot?Q5T{bNkkykR~0c zLGbxqZ&pp3;4yj=f=sU3R|l&39W*JOC-3XRFKqgtch7!+F4}chTFYaOK#Bhc)@PgV zAKR~hcAK-H=gZe<*|fWNI6TVU=M5@-B07VM9+)Yx0xS!gZ!F; zF+~QY_jAR9f8)S8>sq~njuj9y-LZV&uLu_{UK^`(F*guiNel%Hkqmn-HxOq*L%I;w z7ksamKDP)l$2Qo$ytfJ6*>9{kVPAjT9!z7c6~5`whd!4w-&7^nD=2{LOFj^p5QzeJ z3^yZs6lWVh^UU*p^bkF$OLg@<33JA;1b((Qpz!a2dLo%#igiQGB4wtQae;1E@=tA- z@(cLkAC#?ik^sBAh-T?7@b;2Fn73oSqG$cNZr^6fh}>}gfI5CPo4RbQ<-HC+efn7~ zIn*J41l&4nFZ51~%~it!k!FZF91IUG8yjm3s2N-#QjnOmuW#%mBETa9@eT!a=r6tD*ia%s-82B`wqwf>%%kRs1 zB<`E~ECkHFP#+OLhD<}x*=u3YGj{k;Jm+cU=>HW$|M%imr0Gr`?(gq1t0z$%N{ zliz8Jj0{!!o)(4cub2DTS=woqo=92U$H0D#5sq5FfMA;(1KDV&Et$@VWa^I0_@g~W z)#>$B%AwM>Ter=A)fjuHOT$kb&Ce&uRK)dC*wk254K1r}@hHC4YOfRW>&g5v6PE{n ziaTHRECVJdtPdIg=%KBuF}KnoxK)ERUzz=|X{KaTs4vKIDXYq%=rzl;2y*=-;M*r1 zDwElVY(VZB*Udjg!zt`2wVU24wVl?R{MyhC;|kT|c=oV<|F<3L3{*Fx6Bb@MwAAJl zE!_l#e&2fqmUP#zrHLMfJJObh^%PGQ9ks8zAzAznT1Kg^lxFpZlXhB#>!xC zN;8E4z&Ts;^SqK41VrANg#rooCSZj6ojl^cukp2pdA^3Nbi!AEM6-s(vJzZO8RCAx z8%9Dv@5G7vVH?WQ#@b2HLFT0MzRMTP&Y}%{svCAM)&hxmn$6f3R*5Bo=>hrmv#kit z39U(Pd)obJvQ@d>KFnm1-dM*m!cf`fS71VL$b)hA%tB|#e=~x7RJD__53T>q7n2J+ z42a^I-@fITWHcwB3l=1k=N%RoN>0L~NZJd7tVcu^MxkVvfs;r3Y^9;nH_S@9*x@3f zVd=Z%k`{%~*hQf_)Fj3?HAvwS?LGQegnc_Dl_ZA#Yh3LAL-EU9{kTJvItwp~MP?%5 z+ae<0Zh4GEV%W>9JhQ!JAEl$T?%$yD**~-*th7xNqh@5ew@f&8k@s>BJ*;Z_K{Q2_ zt}JgwLxi?H>1~9bl9PQp^}dv{9V;a(R}im4ho=_J$|<$3$450!H!{9DFd{OlF? zx3pc7CPJhsqQuQ6x4E_^7lor|CsyhE;k3rgr>N^uf8u4FgPH>$xm5+;xQTFxS37Ia zhVPzt<6Uz6Aw&0tWZ$0}?ErWMVA^M;^birfc3AV1aomdi2>RMeLKp z%5}v8$j0>IBW`bQAoznfuw?>g$VR{a3gZ3t$w2K;@GbZVUvOw+NY}L*VZ--?SdZ%6 z;zFWjHSXs5B(OMnxhFyCtn?3Bp`CF>li%>syhMx&$!UxzIl5oEp;FA|@u<|Cj;f>(C72l7xWw7378q`ZLjk(# zi<{rd{`y2xVt4UKeiY0pjtNx1WOKUbJ|P-iC3_s7x=z?^4+9QY{2u>|?3PCCP8DDK zT$N~wf32V@8ZCKQJ5?%Q^xaTpSZebeaM#sh0SlpSd_j=y8QDJx6_UH*EI<-g$CJr+hbFA#?0CWdLyvM2wG4kmq#+VK z4HCTkS|}wQ->jD!kFza`revb}g0pVXlpmOXM-oc3oXam}bvL0q? zo(1OXxa^pV-i3a%;Au!spzQ5uaW*!*xN$gUWW-~g)mj$QpApx*SeP`scls&BQzHZu zG;LE=HWCV4w$JdHx+#2;p>W3H!qXd=ZQa+=u8 z!AhRw1+ke2kSM=W+!&xeEJ?t7;Iai1F6PQWxx)P*L!mvgH?^{y_+nsi`e6`Sw4j|6 z9-uRYoog8${wCe~X0RArI!)ZdIp9Vd=&rTJe;DA!_L(|{Dz(^!kF=e!fIGETV-ixr zF&6TRuocChd1M&XaoQS0JK~mn$kX92Qnf(~^4XGCl@W$n6W@u7Z!~e6C=kYqi=gZ; zXH73P4>alh)#NW5S-$S)2Q*(*+pITVv}X5chK^X$DA^GeoGaN;hp$FFu9Dc_>6i)H z;)tT+j&hCDBwQ0Nx}Uc!7a`cKKuSpJNVAYx;zWUrYJ0%L+if)1xy;PA1QD$FVP2Kk zWq-KCKU)dtcsxDX-E6R^Dr+ipqyMCy2OJyi#TemNwa~!g_|@H$ny?7qW)So6zqRK{ zP&P$L<;*=jG8B0n6M1)u5DBxm}vi$JQtIAogb9*31{8Z zfdK?V2HV}94#DTeZeoYsGs|(a)e9V@5`2qdKBw9^M5;1mgDd<<%>C+Mv7E6v_pLo9N{?o+M^$xP(DpZ>rXbk zyy@1tbSv}*bM?mJ!u{9&t~HwN4Ta!lClw0S58+FCm7OxM;4K7t8_Q`@wVMEhG3 zrUL4_8B7Ug-vsBz`2uEOV8|l%53WjY)w3VTln$8D^IQ8rK~PIV7`MS_DcUl3!k=Yb z(WT;%=8Y1GqF(cdZ#-9>2JRH&8Uq*N*y3i6Z|Bbp6YPPJo_K7gIBabwLKfXF#f>}d zOYNX$SY>YB(WmJniGfMVf@g-VLkB<@w88_NlYUJ_GCG&Vx`{xmz!0xrEufGfP#{QP zaiI56aW7&Z9^lhpHM5Z`N^D-HsUEOPALYDWI(4~O9hTPtSR9Jmtn}wsT+tmK*~B_@ zqw4OF*URz+`tzjczlX1+^|8{L@-E8VRU1$6KatRsQhvW&RUPpb>q(5-xcCHvjCjAAeuFpD)=bo^H%GdV@wu)|C5)nl>)pPTopd*0Ul*S z=87QGVEE_pPG3@AD4japLqarB4S0_5j+nO$eP%ySZ&H=s&~iPWnH+NL6W#xgf3Yo8&`sxXCM>b>QHQ`WnS4rK;~ z?^;ilssVam78QBIdhzeU?@MFeNEb8%+=DsJi$`S}%z#q=v%><|8P^&7C;H6;;Wfxp zNO%xL5W*jal@?23$^MEE8T`YHZ8+3aYqF{VSp*(zH+F;$3+9Izf1^v9@dER?O9*U~ zyX7T;xbph!0**hhnX*We2Pvap7<#NlGxLYL|{44vtC7WUd(&FuiD}NUJMXNL`NKEgi)v`5$bQ^ zR5R)gkgY)Qz)sL~(6^##v%qmuO#&JH=Day|0Tokq6C7~FP=w(P{NDUCsLlLH5yN5P#{3_!kl-Yp$ zN8Qp-j7ksEixkG?B6^ALaIHoCsq@XQYeTp5gR%{(i)YW*^oeY3ev1@k!HblW=8im1 z{fcbmpzp40nwefJ6$P{ThuTxG&y^&$ zEqjlijWhMFNxfkr_PI$R&tItq3Om`3_w&-8?c=g)zQ?j^o3uVqvTD5VOW*zSG6Cl~ z@lWxV250YqadTllEoK! z8e7Yo6xONE>&hdcJpU}3@thAq&54VPn~&XF=4>5-ZGqNK2@)5J zT{vaQ52%+CLLKHD>yy#P;Jxof$=938Jav7gn#U)Ay8iLf?e;=k>^PlYr)RH;$<3`J zFr^{lG^3;op4W78LhPi*0=Lv8t5bhgfc_NIMDP^z4%QU{!j@%@fsvY+w{+l4K{NW@ zTajK{jGY6wG4gN4oU;`pJ>=B>u$W4&DOTjMh+EP^5htp&9)Z;PMWk5f%z0#yLZ%|Q zPXoDK(&0D!*cbU&zNyvu5BafTcKI=iS$1F#lZlE;qqFl?or4h2?mZ;d4|3P={Ocg7 zz5Fn;B=;6!f~eYompj;_uFQ>$W7G1n#5cBkJ<9E)mZd8Xsn+IFp#S*=;Yy%>$L3L? z=Aq`oX3-}?(SB=fjz@I)3rCB9ueRTo%3`_S%LyVi_tIZvB&HSfH~YiApc5z8CNIa%3e!B1S=Pi5gm%z}=0T5{Ao!Fs_St^|mGclY6FV4N!}9b0ztH47f`YIvuFhsg zcCeo7CJCQF#c$vX(I*fHL@_knH8ceQWdezKgHHGl6?j&T~$9!$nrb*XH0>naKbib zTA1Fra@sU~_scd4i}461eRP&7hqW>4!jNTFNe|l?#Z5q??9@aau-gpI<9K@0Me%Lg zW4b1gnST0aJA~w@U$-B+dNdY;HtWo7 z&%E^@7#&}$=r^lbS#NEsPC`WL78qRwgnAq+MZn_9IfYh2YG-M@PGEZKV4n{lR5ubP1US=$#g{G}=kn!L*_sN& z()sL&0)+Dc|C(kxT4CPa+Hch8{gs%Es-a#?31i(@-ghn{Sdj2?uzHql_B~VCaS9Jt zb~~$wZ6*s~VKPQX6v;YXp0u03;38P?cB@L1NUm_iuTb)GQ~;`~NSrPOb2OL8^vLum zjmY*Peq+Jtvm8hpsj`|?akX0#LQrpO> zA`e;YWezS z)}H7qs(+{u%FiFD!l5zHlp@ePC^FQMjw0e>8MomFL<*tF{h=jd=yyB85hlSSz7F># zV|oj@B|IfuVRT_<10JEh$qq@~r0u6v^@XqNns=H@t565{Be^)e)3*7U1D7u_4KVF! zf}93M0M5jW3>K?*a-ehs)fa#Jl5zI1nKg%->-Z2&oJvK>CykQyw9Ge0v+McUN#qGF z{czd_z1l)mNwM^abi6cBoNw-C0hrZe;l1*(Jd-D(TqG`;fg|^OiM8^@06LS!UE)Ko zF_W)swJ-CZbhghhqWCD0s64FH8y{K zuXdSwot3nluClUk40~M=gQQR*hMTQyWzv(mbpXnMbAx-ytj-wZkL7xdNkvmH@Qs1p z<~p5VhB1#lfqbu|X=$idH_Veq21~hXsmSZR0w!)Bd-e^ic1w|3X?CqL}Ztqfy z5w&r$xad9ol&0_oB})<<1`BZT^Hpa`&%&LCT|Jhi>y^~>A))Va{p!^70in%EYFXnM zg>)V$7Z249HW(NOJ9$~GN|8ceM5*%13j?8tzY$m+>v1ilYHLwj8mAuFJ3Pe_Nsmpk(fBi{de&234f{PnS^=42N$DwK9 z;#wnG*v|b)`G!f-)88JmUZ?o>K3E$lV8hDTER*R)4a>k4UGy}y85bQsM!u_oX(jq3 zKdOJT(k5rx*(6j38&aDn*xcWgvBKQ&h2E2PfM&yOy5W?4SaTN=T2@3WYMz1?&S+zt z)F`cwYGS1%)mF<;%^3|e#G`D1F+np)N|{IJJjD){CW2lNnYRlm!dfuy#>zM>BvP3QkJ1z@*LD#@sd7uSWpw7JT!RP{_4cK=Km|4GVZXAebHr zV(`PgV7Um)pvlOzT;+?WC<)<)ds2OgthEL$ixc<9P5>Ob37gwBWv9H2A0a^8LrkMq zx6A)!JiK_+HwpxDI`( zafJ0@cJ6ls4uPwJngYR%BT9B1vAHyPGGORBQQ82*t8s2yiF(~fu_IVPnKBG=xfqKX z;fz>nYL(`1rC3naL>O@q_qW2nRu)pf`muxZzg@g+8Rx%l$X!NE6Cq0#CP#f~PPWpZ z;0HYsZ_`kX^uU^o_`1O$UBD1RV7f1m*9gR<*n| z)^+@6-Q>r_Q)nIUBKTB7p2})A`~JG`8@9LMqprBrPDo?unGZk8NiqaRJ8ZVqv`5*+ zSGE9q42Z)aA_+qqelFi?Z3nQMHfjGIUPCnhcSHCz7Ur9oOwaAIdWJPX_Kta^Iin&K zcS%I$=K!rHnH7@R0Xr-wH9~hz8|`AQe$yqFCxrg@d27!<&w-}efS9?tSo17_ts4e- zOj%4dQjAobqMU>kjjeW!?&hJ#A8W2yidA&kdV+1(PbxWxyL7+!nCZtv1xHDwd_T$@ zENF6hVOwQY-z-*?Ve;~4orQ^=wx_2xN@P&IFV0FM-=@@a-j14%uD5BqWr*4UG)05p zsh&&-%s%|@{G53B4EPpiEszhR2AItgIf~pMgm1uoAV_UmLQCOObv3jB$JYkSpj)_& zd3N7|chvNO-HPb%p8+%GUOoynoMc$ye3$XR}=S`;$m&4ZS_Fm{@?Peeg zFY+cc_JNyp>m?0fDY8#=5#X$#*P?@;mw=B)rj`=HrM`mU=70DIN~jUY8_S7gc%(F{ z5;`(u>$jzin-v11i5BSCG)ghjP5IvS51c_Pk#;BNwLKY;RVCbx*8zQn0@+}&H?g|sO?yuy#^iYpMA^( zZRhl!=-vteGQ9?hU;V`%((huawz0KHcr{|2ZLkBoJc)dG!=j4v6yB_!jN=4*Cw-|! z9mIB6<;H`Ecsc2k#Dy{+BS~|RqwK2{#Rdf2#yoK(cA+?^ z|IlbO?eEhJ?;^FI!@eehQ?vb`xx>=k$%NK#T-Jo8fe1-H?i$sVb5yaV9Za%B^u6&T zCXFl0RqOuVGb1FC9o>Sy7cEco8UXq|(Z2n=!J9c)ZpyXm-40NtD?EIKC*4z?kGrpl zkDN?Y!ZkZvkE)-G&loKN-dm~v{vtiLH=`LL57khuKXl10NX~Bex8Q{+mh`LQ75Q|A z`iM-G_%`}?y-EoDZRrOB66*aw+Z99^y=2l{?@!>>@7VYugwBk39WV$vP1?xE63nUM zPaC=ouDEC^F=Gs~*k1cx?{{$Rcmrr%QikC#p3V(f<6WQMZ+cnxY};j%Y%15vmM#$K z#XFB9W8fAa;65XLEaEdT&PSC2QqAFYbCb5G5D!X`*8bsLK*Eh+<$D3%3hRligns;L zUd<9T{>6Wh>BpdTdiMt%M7P{TD?`j4KQ>5|*q!~RKu8Z{lzvoNR*sG{j*8mF>S1V{ zLX~o^R&T!^+cZ>r{d?}q%dSmYtHuI)e%@aP_4^OpOrX~YHF|Y)i9JV-X8Q{n- zP)Xq1v$XxrsE4=7vvuthyxiqz_)DVTz3pOB>_6q$2M#2i2c1x}|6XtPM(aQEA~QoB z2i!k=#a+P4rLZO9@YEv&fC6t1xpyoV_g%^sWB-~n8RKpke;C}dV+Xu>%GzO|{iTJX zhqDoLYYrESCaVd0I`XLLzgPjQ)nYeLI%~Z!iWWSS`Tbo@w@4m5u}4qQT(O+%d+*iE{L}ZK+GfffUVnHRcB;Zxln6Ss9L#6U7-v6+2xac_m1(8KIi%Li~;I z?8vX^l~&6vvg}`ON_y(`>i9V-*_uDoS1>u)JmEMKZ9UxFw$I#;Nek@F4FtXJ2Z|3q zJV=O{)7ol;xGkpN(WvO|H`XhDY558IL|lWDbjGlp`0iE|apyA&V(l^YC!d6uYa z`M(d7(0HC?W<6o2A(7+T#hQ^t`HjYeWc&1MqLwoN__pi#M%}>dpI}iJ;x+ygGS`#j z-ize03%LgQAAa&rdw+Ql zc9gHLD>^Cim$h6BE)mDH2_*9IH5=TmUyHEfS({%7S2idTBr7w3<(!t}dKgWje|;^e z^H=mOe2v6Bx;j~MSlE~;hmpKI2Zw~^p0Zo;hM(c!1kK4cQaIphl!54xi8#GhPMzY? z1TXlPy1Tl2W|M*%g+{3O$3|}_P-~|&y+>km9y5`pHrpgMZpW)mc)!ul@Xa zfX>+Zxrom2vemmb64>(LZAjHMet=O+24E^^s!GXugzrL+(;nb=L?tXY*U<^q;%FSI z>jlj=cF?5>9miEVOZYm0x843#j~%sedy2!uPX%9+sAx#9xhJ>h=;z|lG-k-}@TFGg zAUT7$%4NozE@0UTg4zq;X-FCwN>He4)E{}`k>tq(pb9mBVmIg7f7<#w?=Cbp{5K%- zLGw1IhaHcFxOgsc6^Dm8avB9DK#o&E0WMx{T=^DL0)IjygIaoxlFE)aR_~jF|7Bg9 zh+@GhH6zK>@?to2P%i4~INJ3$BWt{~$#n6x-*D1d&_I^fI!O^s!AEnnA}Y11Z}i+tc-qn2y5=}5gM!836{D`2Qx+^(w`$2v0~C&)eFn&uoCp%J2U$lE43DY&FK`OYHkr;>JD8>9Yo z#TkLbFsrJ|PmYc7_a#!GBWGZK146cBNRrA8!X}>>9WB2jIG@?@ApYiflSgnX6dhOfH0k zXz(o)e$!LOrmBJXXC&2#FxJIV1}hoP;AbMo5$k8@5FhdFy%7CR$G+58ALcqOF}D}D z+_MUXs3uWO24#f)mF`}-cO;eYn9m}pfw#xJQ9pLW6D*04X8PQrXWfcA0Zv}FjBS3{ zBLr?i{&zd{7#CIsnCGu@k-YteN63z1>IdqX{VAW-q!ZxXQS!eIRELge|Brb}CQ2ED)y0J?PPcTX%#&8xa#uSfS5l`jM z_4MO;Tn9TX?&Q?mTouOZ=rY(uIx_GtI?nsC?WFjtu{x~kFRA?|myh3So!gxsOIH9S z1$LSgvq;odufs}C8K~$@LIL)Br^7*wXGi`n7(T;@TSH$kqFO{qsJdFK(1TG*gZ)1H zn2jj+p|DVEZ@kUyc!+uMrrfh4=darwpUn+wpSsYP1R&@XSaDKcdr;thsSRr1Jh!5b{ ze|+YZ;xIpB|4xIo?>>xrBBK}4yi*)Tl#tE zSs55gLmz)npbT*{Wbz0gAd3tN8wNJ3l&$og)ufOGBN?0o2?O4j;sh)Qhkf|YPs1-O z_yMx`bJ=~h{ON&rP=s$eq8{$mH!#IV(&M4014Eapkm`oQH2UULxd&l5a!ev~z9{$% z@}o-2T!X^fTla}?zx6Zb;L5w18#QM8Ri1a?n+W*ZCz3u01wNj=dz$^PHu$F9iMpMU zg3il}NIP_KvdZ?WBk{gB$>pLHWff8?#tUdKoata2k=eg{v@+BZ5_9RgXMx#=H7iR3 zK3y$ZIv)0X9yJf=dZ8a}{85!Mn0S@eylZN6%DTEJqv<49U*U!QpL2hcsp#;cf76EO zMSS3f>r372=#WTILX7KB>K-y@XMwVfk+uv*l&XGOQUXYDjWpP9 zMcMmW!Uv^`0v_W*)i(cH!zCidWBfhFXfSgX)Y6_-KcC-rN_PckkPD=UZFkXRwn4LNNO(69Gg5F774glGg~P3lyCv~0h5{{ zzRGs#y-V9l&RMor(5*B^4{yx5Zc-56PV`JvD$}rTnB8%q%eyxzod0yhJc>>AUn6W- z+49;DmfRLO=m)Xfn=!*}9@?W@@NcSUn-|KjYCLufa9i^~dhy#A$Bg zWQudfeqkC>8KtP>ZOd`lR8BOJJ+(j>fUll!J*xQ*|Dy=22_`m$H8|bDaxxQ86nTk{ zuP$KKHhN`gqivH`uwVT6B}{_5A`RjJPcU8sO}DBM9aA=& zfYW^`8G5NK8ohgObxL}5_st}AGdeJcI0WuMkuSZx9=7*>^249r)LHXg)0`o64fFxR;H|3rkH zpqHz_r8i-SHM6yJHZ=r0cihoB6fsGDvPpB`vHQ@X1}`uqQCm-W%yceaeA{i|Xz138 zjY!Zj8NYjkb@KA|4imDo6l7VQpIx^uAEU9FkPI4eRpPQl4!EszC_8!!LZo%2%%PJ@ z`wXU7`d+hiNo1zBahcng4{up^5Tb*D9}`Plj~QJCEq??TDK0}>_|;rVS6OgpJuGt* z)+-^X&b9@UH*}fg?e)g6-dlLvgRe$jiXIL>diPr?=9AUV0_Fa?Cu3P`aKB|{`nwmm zc!!RdEGcVT|5v)(vA24J#A$NzLgGs;BhWcC&=) z-I>vbB52N_XR|@om~6{GHY#hOe{zPFSGTdC4p@{qE>@KE^;csW^3je5A-B|=)Wjtu zqDaICGxV9Sj=V~Shd1zq!c*dNpB8Zd1eYlw?L|oOPVRB89>TXGV_Zmt^AQvKNsXC@ zhlfSbR+eE6`8^d~#Ty^_VfI&TNC(3)mYfC|jGjq53U)H=tc6 znrs2C2{qlN0h2&^t$vDlYp=N?1Cd~&Mq&2NrVi+Z_oeAV;$d&qo9NnK43b=JN$_53 zhS1r=UG^TqVMW2!&v&v&@nVQ)8wVJVyw4&6;JBJB6%ft)pgfyD^x9pEV4jgnlU#OQ zdR$%>(ER?ksQ*P+t!(68doed~B8picnpYA2D|m4ArD3P@YbLQ|BE86it1Ci$)pkJ; zuh-j6&CSkBMOs}`)k_NR|C=Wh zUKd_OsV4y3>P8zGT1>tWD0T29g=k!RspBDRH9vB$EopNOF%%yg&eC=5c$B-~dkl$3 zq+e@#VbGz1j4+hUrzD}#V&F)LiX0CgA*UexZU`wAe|bb6sciLa14)lD7JtQ?A75Vc zO5X|tirmUa=l`;^V+o!$Fc+Y>8>+<=^m$$~$%x!N`z35|d-M`_eV|xcAo>0(su$XO zYh{ph?(e2n1;lOXMi9Q*@uA|*%c(@_URY9_U5qOG`d+tg2`03?%05^MKZb7kM4Czr zRpf4;E&#i{ldA(_UzW$WP3Cvc;8r;DX1KjtPcklDL_xh-GqjTx>n^;(a!n=it||$X zfm(0SCwa5#q6C=*w9hvFiLooeqg$Ky{RYu6s(QzHxOcSAQTPSrL)b@%#^`n`YsByV zV>erhzVD?DIyMq!-18U#nY$UMIgAHfX|5(hm+~_xE7s^$;c*%bMt5@7`~F=* zYr;7S=A{~x`XbXgsg9~Ewo^Yp3ZkYgnhv49)I`q7@-BH>BByJOD`7JxH)WBN-Q=n$ z8g&`>pzX3W0ULeC^Wtu{lAI5q8Wi-l>{8kHBsnWEe9uD0o~-eT7INCY#3qWDY)Br(bnDBnAXI?Abdt0NWz()UqejdrBFUm@J=^)%CafDWY-Xu!S#T#J zEihwu1Gxf2*tj(xfDB+z=ZNXts}f2HuMlM*B-EiCWL93sfh;y_+U8_{ZbWmqN^38T zM5G+t->KTDlaAPc@QE-Zay0>4EZQe5f6Fc{>PkbxK}M3)cl3uFT=CW290Q3LPfwT^ zW2#l3L||P+cNZ2?lt<){iXl$IZPG0^&%7RvYYT2mVm;vNJ$@iOOZe<|H8F0H1@-S< z`Ym~voM&Xwc|`o+Dku{3BSlYWl%Hq8FHUmIfSMsom8yB3;IPWLjnYQTKmpGQ@VX#@ zl*c^&Z-h&{gH-fHY(waJ8F@G3BQU9^s()!DJ2Lk_K0S=o`LoAmwBBr3oW&?0dAv%+ zOQY8=KaFXcdjt!Dg*-{QSxJYkZu74#O8Xj^ql3aWd-jM~Dimg`BNz$qP4$xK$aXTk z_Hj`*L+y>+QaKxSy}4u5NIp%8LkO_P3=tAY2DqGBng4lcacQ2ajp$Ig6063HDrF*M zE?m4lvwH&)@=+agAZGShR$b%n;0#CdZe4u8Y~JCE3?pn|DPAe~`0cN>`LLmw`fa}! zIz8;WV@`-&25=n6${E@g^$j_LDl_j5l7OIXJ#Mo9N#kYvFO65i%GTA)nMuOd z$kj~D%*4UejOl+TU=y?ck92DrL&Jo%PvFZ75cnMcd;zY2f+#n@UHqrJ|F@X#|6c`} zm7SUOziZdA>TsTDYM20$u_CD-SIDU`n>fG!V7_Zs{Vw>aqXVd}t!SnbSywQyVzr_? z>zq{{Pup&~mw~fNPAh3ah&A-0nJC-^&qqxw1zl0YQrE!hF?;#g>>kwL+LBhW)LV3* zdNcngDYL!g06$NJ(#ca~g2~5xl2P@g6=VSQ>=fe6FpY)!yDoNN-mHr-4H)t9?BC4y0xeQsZAp?1Ql_%2-j*A*=IZO6qJrBelk&1Hj?9Pu3bL|!`UlHK z9%EiK!iz*%j-EW0*xEa>r=w04!&2P;v(%9E51HM2y$|3kjPA|9x=vHxVW@mb|Rf| z@lvmR8_U41WZ=@SJN$b%>N1ouFiXxtX^EBkX=|;$I4>S0UCu-)t|MEm8)vxJ;8iKu z`zwYpj!Uf$`zb8cSB}CQnJo(281s&sB_cy|k_t7_^dD_ogkP};ZirE0xuVRB$T*_Z5Rn4i!M; zH2fBi%WjkSZImG2gJM9lzw1D}l+ar`h&4QQ5l7jt=Pp6@T0~H1*TeawjGg-nWhh{eVAR9X2|`pKMh^ zx{aEr7gv?GhdsA8I+zr~CLHfwu=&F|G)fDjs0(ha@#q4uNg)M(W22f8O9XvKeiv@p zosLbQ!h31?4a98;`0;@VmUUgNCCHZhKMFHH-nItkFQh70DqgS+!Y0sg{Az`WB`eRJ zc)XZ`SLa6$vr5ws8437e#&t2REiJ{GeSpyHK+^rA-I*Uh>}1)J_S{`}S^fs6@}=>8 z_>w2&&Mjbv4f9Su|2jsNSHO@i(MMftRkswlBFkzGFDEh(q)4af8tCj}C^S$13Tbl} zItq2?$$$M0e(KNumP@C1xnP-v+4{>OX9V#rvz9kme~URZf(YStj$0@yZFJ06oww}k z)k%}ZqeT$bbn=%*)}f{MpXBavDAID;LjL=KYWnk{7VrESi%>ONa@?N>)E4pl=!O*0 zBUh!6NZik0q6^t-j3ozC%RRfSZI9$xe)oOSDekPBeAGYE;0v(8HlS3%ABWzQqtR=& z?9ZgRYReeL!SU1|{sFU1eSLHCd1?zIi^(F_Q!6Kfrx!_^RKeaooAuevOiu}ghZ-Z( z0)`|t7-#Tyw?QO)K6w}Lj2;)?CiXyA=bP%C1auaTE7zxVJ017#<5D*?+Si_s&3$xC zGTQppuFU!ETO)>Pa-K21{#PSs6%+@!WMSN$K?ex#&R_`ymkI8!0TLv*4o@MVDdLtsBTNtp74F0ISz6@izUuTf z@iVMCi#mk-SzawVlZgrB7>y~TBSQMKtoCoD#QVP4Ynp!R(5%`zK;&!)qg+4|h0-y_ zDB)MJ2pjnq4nF6uWc_6oM^4}0-3*eG=ay#q3?NLXUdKkerbb1JBj2}w&B#sF!7MG- zkZpz%&uNxMxvT6TOL))Sw#jwa9U4j~I4nXG5~kT>6pNMM5J@_|b|}M}eIh>;p4Wwm zG=uD4*d_2wKp;kZ?aBZqhMn@HDSvheQVp#_M~3M1&()77H#@N6$1h-U|0waBd%vR@ z@vq-zbrtrr>qa(Y?Y`&g2H$RzM&lsZHZ)$Onl`F1f{>cutYar#7@%jS-6>eUtEh(# z0Vw7&agFYq@?LUP+u+R+t>#(u&_p8MMDJdR8m5+)5(f3UJf9Fm3Da)5d;R<= zDE?3k?&G&@&KF&7`u%Q6F8_MrRZ~zk4{Dz@T_^0hKttJb6Ssh%<4;6EWJ1C{kYLbC zYu0wT{ox2tp5f?7&r|eEn-(zpLe<*($8sGXAwizxt9B6Y7f+}2VyXcYECqVlc3|5T z%KeHnkQ*UzY$gTs!??Qa3C$DheAQ2kELHNvQPYckj80{cdi(C4p+d2!+052IFW&Fa zHWuA?9)3u4IZCXDyA|qJ465}T5?v8h*r#CRGwZ}?1o}IeWY!WGxL_$BNbM@Uecb;2 zRKCo26V45&y_!4uMy6QvJ|$jJECsZHRAJB#VVIcOG({jDa3RmE9x(M94?8z z&{B1D6v`!pYfL4vc^OtNk&xcQM?aS{KBVPk zL(j~7OGS;Jq;&qevgQY;mO-^nA|@N*Y)z7QJB+aQ={Fpx>&1a%Xa*E|i-y!lJhruC z!k4NN0d*+~P#|eyU zw1aP2&CkEsR^AgR^gZaxvPe-}U!yc1d$T~}bjJ%0W0{`ReKOVz)L@cRqo(ap_<}V! zy_9#fGLgCj>%){q$e`k%R}~evx4NFD^Wtv`zLlFO%&IZ4Ahe+_=lukwa?bT8hF|3^ zDmz`s1bLH;=xffRPI0I9rx;lc3F^Z*Gu+DCGFs;wuYg^az?66zqrJ7+$XrN$4&z$S!cGF3>{9vvHQHq zjlGm^R3mG8m_)ZxoOz)DwJGlGY#PC(4SaW>FbvxPeU+k;-3 zUcGk-Zy9bU(tYTKxX7{P2xi-z5BRfPXSW_39j^1L*S0VL$8_la%j`dZcDYQ}_rtP3 z#hz(H-JaIH@7|lbxVWr*orbqHFJ;qscdecz4!=KnVKFC`82E@bUZ)ssnh=rg#YU+bocP27Xb19 zqy3+t6a*6ZCyU{+iHXOmVq?&zg@B7vHBYEV-&gI5WFD^RTCyr`+uSD8*V4?~mtPnS znakzxu71O)62q}HldK_4gxT@~L>~`fi<0YTbs%o?N1d^bt{dtdBgwKRY}m1XHaK?V_fJIT_+MfK^&JHnTv)r`R#&G zAzCRasWCG#UbG{Bi(xT~%~Z^`)VA=xaJax1QKCuf4Ovdt=|m;Ss4^=VJ?6U^*9rPG zP$Hem*WGj(iNiQcatJysGh%K{+>Rk8oVYr24Nk>KjpaxyKm2Zl!F}p80LPRcb0Non zUqYV6Lk7fwe_0>Sn1(JNLBgCI%1_5=%zr~&6jnC^A?&0pa-%a0DMwMn#$l8LfBDY- zor=COQb`&8?YU_PXV@ci<~e`rmakw)aR?}#%bmRWqnR+Tjfip-@*mYBFgvHEK^1)= z5>pkbDxQZit_L#<(g%+*el9ri7a}5$At;~Is&d!Aw zEg0a4N(Vsk2}7n0)f;%*!OzbXs%nT=P#tm*KWKwu=>abYiB#_&MJaGc!5~HB8pRed zWWg3q93ALDW4^_lAdaC?C=H>?Y5YnrU2AC?LO8|h7s8FX7{XDyg^TApf;EFXnK+B4 z>mG@RE;4~rgjzcKy19;4ea1VC zr^ikYBXmW<_?riM^6@wf^8-nq2MM9_U^Mxw^6y~q1tD7zz&YfF726KcH3PqEL_$1W z%)T0vyU^iJ{8TqIZTiG%GlB#;PimqjvESRP2X9Xp^b1U6NP@p%v5mNY6KaEFF@T5A z-Q*#Ol+t+Gr~~-q49fPh7)I3B%mC8i(Q-7Q>Tf(R1k^Gkkd%z%d?CrnU+D41ka{Cg zl#+8o6AP_KWUA643c{K8M#Y$0_KDNO8xE{-Kt<9zX#6oKHmK0vr`EsZ$an7&RMXp6 zc~N=L*VS#g({+jn%e?U=>bMKM_tet86RUIIZ@bwT3|rNZ>g&4ev(~lp^j5-95qfHJ zCqE^QIn;kvO;)zQaMy~jjd7UjlaPd2Q1t0PU3NXT`sVW1&Flqyp_Jg@+-c|G%2@>H zS327##r|AOy0#JFszS^kl@@8Zur*CS8SGh`a$_*pQeImSepe4zk{U>^Lfq_mElWx6 zNV@tHo?{HW3!Ops$;57E$r?wtRKFbu2O{ZPXOIax*oE4S$_*zGI&EcUY$H|M#HJBv zmL&?lEFO;tNJlRr=zr5<2u?%)vGUTUS;o?3vi$fP2eI=Bovl zX(XN}lDXZO%JTU1{&8SrIOhAy&)&?WvXMD{Nan3S$3ijRu+#`e1!4hpyos1$M5Ne3$KexKnlZ0jnm3ZU z-&iE|ccoEEKdL{=80Vk+P|rH;4@)GY=*U?rCP5;UwDNX2l1O!0CVb4;sg-9Gk3$s~ z`c#}nsAtrF$z)E8fa6pUpsfpjcS5wmxnc~)<&h93&Sa_q73BEYUvXw0s|m`mQD0lDSQ-Nx8>G<{7UC%yv+`qcl)w|pieG1YFN_*?W_fKwaQW=*Bn+{X5vECKMq#1TPykkIg*6jp?PWgg;igs|8rdLgLsc`Ii zW294R?8mWG#8IomPE)#Cc_i1g(c4&8;5i6~BEk6{79-jlY#7LU3hqp(+6;ol(?Iy% zVZVQ^7{3r~_bUK-_SsV3B9*YUrF)L|&E#cLA?1 zovoyy_9+XYHnP*0UmSJhhA$Xok=oxD%~JiH1i2wbaxb~vShlrRptLE6TFvumWbhYt*k(!Ww+)47p&|J3FK2BYOr>t6n!)<#w?PI&37*F2Ka`4;%5>er zvk&KA3vYSakVQ4JC0ovQ&kPvR9OWs?k{G?T9jssQ_(@WNU2=%85l|}B-#&bGAk9k< zsPWx6WU4r&Uu@i8b^&D#9$t-3d39jPPcR~xq}o2#azNXGFo*jh?cryhz6%(2uM;jM2*6=J}_|;|Ju1jhJsAZ4NXti8dpts2S?#=NqX+!2>&e^ zuN@rm7KgL@2b*r1DI+dtXz_xt9;?}vVs)s>^!4R4g0uyV1m_+IkKB4~qE-`BBht}ysor_-C(K96pT zeKpRbblw$gEEaJ@Ir#HBn=2$HSd|t0uO=CRb|A) zR1_NHxZ^%lWilI{t{RQNDj}|Gb;mzolX=rJlfe!98u{Tp^PPD9CZC2`2HaM;)7rx` zc(Y%YFOa0KY0WjR^$2@NqDNxIwr@IE=~5{)Ce_uLyUO;_8M;4r3DH)IEgqYJ`LQYfU3P#l7{97Y+XjQPQI+H4R?S=qEGx;QX|{aYIPM3`|VlWERv2Ry<9)2Y{}69#P0q*fbaf5c!4r5gRhFp>=dq4 zI&LL0*RNly(@(O-+P0J~250k$&fHjJaGgn}n_$c9K*=T4*=|zY+yX9LA59wAm#rHg z*I;4_tC~V;4$c`XFn3daK>DTqIqWOsz$+)|ShJGntq+G8-^H@vi=@zE8E4CrNvHTM zOvL+asPIqgY&$oNtP;CtER5cg`K}v-&H9wX)U?>qW1H5`8_y*nx`a-q0pkXvopOQyijxB1baHADg8U~Cj@%-9Xqm|PcnVQr3Gu?0~zKYXN zsDQ}i!974z*dMbN=1tfRbMuR$@rdFLT_grzXd%WN_R&Q8MNKJGF5 zx?RH$#a5);t!Y9NlS0KN#!RG=YN2ry3hG!oiL38OTaZ7hX`R6Txix*&Rvcs7VN5?z zKPUTj5hvq4MVp;T8GyN%Y9&kQY0bMQ-~`fPB&8fkuA)Y+LQAf4Os3L9rV>Y11MhPp(n2jN%C80!|Mu(wO!KnLsA_en-%BJdU-Lg zS!{4^o-!8v&^~|R-o`K=50+vTm|^u~K6o^eb!#@5#XE?BFm+###6QY}4W>jMV{}y= zC*o1GlH-pSF+lAOPy&~5Aze&Mya#3(xd&Z;CX3nH51Iji*oY1QoDK)E3|Jep%2~10 zziB%6A3t=+FJke0GUia&cv-Z7WH=`B#{#emMpQlu_kIu=n1Z3#9ZI*eK0&m8>2-)f zvMng2nk-o7*{-qI$YXbyvVRv(TCNngW$ezE8`3u-yw78ANASdJ)C87DLYlzhxz0lH%pcKq8Qd%W02{SV)=02On>~kmnR**@zumLo-SOFCYMs=mqf6Iw^LhPXI9%VJ z%UuN>oE~lOM&{p`24gr37ki}o=s7Xg>0fph+0v-Le3F*ZI1G;7Y!2=|eZ9XdCF2&Q zpbmjZk&KLJpCQPWo0Wm9J@Hea)~!S+!^pNDmr%AxaBeds5Z4M1 zR?jrf`JdJ8+SsrBo}IEbc@LS%pcLg&s<_IYnUgyRg>-YDM-&kTE`%g)!eg(!Uynw}IsSy(b5Oe+kxBMGm5`-bzB21*5es@R{7vIEa)Jf8c9r&ii#PBVK=M{u0``qrGkn|*%2 zZPffiB0PbiBghErufi)_jR10rM^i{Ht)2hGG`|-GK{hW6$t+~=h&iN>OH|n1USDec zN|a(e)Qo=LRhS4o&m%?;0HRBo=a}XOJukLVQ0!F$9w~3l)h?mPu6;mFFPRwE#5^4_ zw7YIs*PpJ5jRcs$tnDr8?GX8CEX+7YgyD3;qwYPvkq@X{A5{G;AaOP_!kw&9%YJL-q+@` z#zZr0fbOgLxy2!w===m5xNs|MMbRiXUESExzq;A?>249>B$}*d4FyX3<*;QP?^mhB+(PN>kAXv&fM8 z$qL^fNb3tm-pr-lHRATlw)I6GleF?%v%I4bm~s2TBp?wSO1X{*XaJP*K<@)!&&cb$ zOZfjP(g=u){TG?WP}|myPus=iuR8PhMVk-oZ0ABR`0uT}iG;WGPpknr51 z%Y+r>@Hvdvp{i1{%Av)W$6=A(0WSQ~lTz5x@z|_+Zowd`2No`0v`t9wM!)ktv@Zk| zlZ2RQ`_~ns*O@Kfv?K4gdfw)DCUBDSXFwIJ(-4yws_iu*Q(h!xM`FYhsAHWhYH*Ic z(H~XX?9;nKo?tD~I%ue)ICRrILQtv+H!W=}+wd83_!FMnfa?u)ri@w_p!2sxxgIiK z0zOz;{E2#ULn0WGDZQWwN*?efiQ4+$G~j=WMXE;joFB-(U`;|WXhRdvq^idk_^d2p zTgeNz1LTR!_gve7@}K}6IrXz)YOX+GvJp$_(p|&xepQ-x4iz^Q=e`s0#~M-6v+hH^ zrEKo*a8frCbrFRq#BpX=hT03kp3Io5QjMAo)xr8hk5Uk+4KeX># zXy5G9s@b63Y`)7tT+$8nA=`JII~52|=z|20`~mm=HnDSQl-NwzXPxvZ7S)j9ziLpv k$8{RFviaBl>EUVR?&<4pYlkBsC?qN*h{M97prMHKZ$V%mI{*Lx literal 0 HcmV?d00001 diff --git a/docs/audits/2018-09-14_Clef-audit_NCC.pdf b/docs/audits/2018-09-14_Clef-audit_NCC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1a5c66f178af6dc73289a4575a0d982d411e664e GIT binary patch literal 755237 zcmb5Vbx<5l^fnrth2ZWQ2)?+xI|O%kcXtSc;1&oFT!RxlEG{9q`{KGta99>D@9(>H zzq<0z?ds_|)2DlSs=812^PDsDK|@B4jgy@h?Ze*X*#nvYHIUlP(h*HWghR!~)y~_V znv0K@lS9tI+1tjGL(bX4+eXI5%FWt_Lp#9ThC^T7($U7sn?uXT()+)AIX6$2|0({{ zQgd=hNxAtO0pFg<$s>Tq&2Pe?YT@na;BUnFR`pi-UunYe$;Qjg$J5Hj>updCPd6(q z8*d|yx7RY^koEVL*YbWF^Gze~#YN5g*5T8e#7WKnpCtA_3C+vf)5gLD%^xl%Td{6` z7)SQd7)eip8@h)kvN($V(7@LF0io#*>mhG+Pb-rQ6=@#Izh>_ybG39`alLeXU{-z2 zy8FCjHr12&D)M@B2%des2a}6mIEg%en+g-iqnO-P`cSY^75w6P5FmQ*IDZ@`p z&_c5;|4C=CwMyxsJQrZR`qQzL%xv6Aj54qBiO?qk$ilFyrC>PR$5g^w3lP%kI0Jr{i^jN6JciO)xzBI7Y(Es`|kSvD*sS*1D3B zQ^tR7l?Ck#U-h9~Q?Gkr7}pjOXQl+l;Vnk0_DQ;8Jg=bs{=BQOo6(5jUnejXt-Mu- z=V}QQHbQkL_inDL6G2Y3mSMBA+X-bfIFmWam5mcQ-&aoiQnvS!D8({@ma4D}A!qTw zs6rX3BWF3I4Wk`;0w|FG(t^mk#drIc5x?}XIMEGZCY=GLOS3)dv{uzP2bti;t1nj= z2Q=uyny@fV{gW~+i0Lej_y@u>@pUuniiGHqrxF@gA(1%7gX`%k?JF#l({xR;Ag-F` zOEN=n+=Zept1^ZZhA{5#s!MNQds$y|ipM=xusfZ$zr`);h=HD0{QM> zr*#wN@D#M^U7oEW$KiEUG{&`rm21$9P+FOw{)w0DIG#NkpQaXT3EMU?==5UN<>F*1?+=tp zsq%#9Mn|W?O>mDpBdG6vzb%>#Hp(7^a(+AU{E9NdvVI>KnlD~}6~OG(TKT0X__7dL zWF(5o+@m=3Q=5Q~^8Ck`^-q<+QRPgQb*Y;)-|SfZY~6JmR_wq)Yy$tO#Vr>teC9!9 zneNBje)@T}guZ;lN%~)vb@Ya@xn}d@?(@MOlI+Ewoy!sN*bus6Y!WZwm2|B}VNVrFB|vrOi^%KSRkSrOcN? zdR4UshLCRWF2IqM>p94!Tt5C^$Z3K=_V+OS+ zJ-^Jg6Ef%ZE-|rjtxh0|(TqNTwmX++3Pb83ob!@S*Mvf)QIZHG@V(ZmGx00=~Rz^)Y#Q0unz{@(g ztiM(Bo0_F^*bb%EF;aB|!lu|urh|qjU1%rSPPea0CY*UbeTGN9_{I{zlv>8j&i`Q@ z6y&?&Ik50ckJs$_Nd=TJ!SJV8W{UE?+o-20dk1fq2ov|e$p(4Dyhq_+#cS>!eQw_{ zdLz#{l8+U?a+JE!5Mz>Z=ozRt;UY8hRK=2x3UOBMm@w~erC{kM?iC?e292Y@e>ELA zxQu^3pF}?Le)LMaZ^#G^ul{v7tFQo|;VZL}p{Y1jv8%hNDeFhVN4JBg&D#!=nSbiE2!_n*H1 zbNm#ojii?TKKmn{#P>}fUlJJh8s)#$ITZ;r0}#wV;%nuvy7SX~=@>LcZ|RRF<;8{G zpIyIcX65^b(R`TAw717o7srd{#pTd;sB+l(AsI2f*A#t!mlTO;gKGROY9Fs zoZhTKb}8_ucrxhtwPM~;Ye$p(elk|GkTAk9OBUb?t}}*5M&G4k^;T2%{!Umf$ow$cj!cTM+76Ag z>4*<@^PDfeF-J8RL(8|IBSt9_U$XI#7cn_b=v&oU!0W%i{OUv+7atT6 z%8Y-4xQyY{NqVm1gIrlIWhUK=sxtXK*cS00v1iM-;X4cUNb838bA3CgFRWb&WrA}C zeA~`K*n0PTqO~hQL0P^{AU2PBeg0o+J_@1+fB4Lf>@CweQq zX!3V6Re2r>KGNzEX|Z&Sr6d+R8}h<`g>$NzcA3vaS(Cfj#<4X+8>yp9YBt3K@+Tz? z5Z%yKx*Mc!O*~M*D3w{hK`UqZ4FQWgL8V}nsKM!3H}&@ZrE0#68ae`1F8auBjh}Qq zlsmT<{95)5&dyF>X5JI}LDPm6@TpJI{^G>%XB*>)b}RK7GxWU>A4&$kB5%+ph@jcH zTK}IY^G*5>A9MbPUH|VuS%901|C63HG~ZHVS67#?|9=%Q zuopWjEBVsg4-H}NsI^>@*}neiB*M>M280cWXIA=0**g+&<^3jXRN9P( zeWz@UlSPKV;sqXXHtJEP2Oe^EBxf@1%!72xZ=1QgdooE7oX7F)Fn)0cr6dYQxr|d- z+Wim+tIS6lfMmRHYj&3r`#Ly8cg;kRIh8hpnHB$cSl}bssrjP-3d^vt0aKQ`dy`{v z`a*hMO^&fdOuMfV+-W&sL#QEK=A4N$Hvgo1qeJ=EiDqNxoHN^>?Jh~VXI>kS>_gkb zV63je4RjGmK>xrdE*4bjH^l5{zn7K+g(yf+`()p}Dw$3>nB3%KcbSW7dDzb`8Q(36xx}8a475$+L3#p_pdF;A+)DpI~j%K1^+cLd;3D3$2)-CxpuPu- zlO5ffv&Xw0>!v=`ctoogT4N`-Jf->&8uh&#Hza%%L&>7)otLSe*SCCqf$|yx4t)WE zUS3{b>U&<_GPvjU?Dg5KAnXmAXreS$m=HPbwk`V z>{T9@a%zbRH`LWE20ZQd3NlOXg-$6yJOw|)IBBa0FB3T1IJO0^W|6&fu0aLq+dgyyTFg5Q#}`q)z|k`YT~aTP_dw8 zDCjj@{D#sYoj5Kg)6hL*9)!vtedB2zt_M#mPf4HN6Fhz>Tj*o zn}Qx~8K=kH*mdy9%kQEc6as6P*TRmJy`_SSrJnl3w(8K}*DeD~-1B*a%i9q2XWCmd zi`P^RFf;Lju*$5Z0Y~VwA5^(nwC9te1(-H>kkm{IKFHPlo*>|(UsDA+9Cp;nXGTTX8<418vG6At|r^Kh>k zYWVOkr}$+wrk%*_RnAe_RkOD(j9=*Ze&iZFa(Kp}1QU6&bnLSFE@W`x{#2zP5Gh zQ!!RB*7HUb`^1m(-}CTF6xCB9@23YgQ%{8z6lm^8iTidZ@5y#r&4O%uU@yftJOwbm z2`jr)s2W1ZOA$yx*{v13Lv{k}g-beXL>CF&0dN}aZSN<%* zdWd)CV#*ARN@r*cVZyRf^57XK>K8l0NO(f|kP1T*p5;WqfBAFSQ?-)5d4F5F4KyM= zC9%c*fd(sbIr`L#BK`iM^j%DmBkLK)eHi~*c>G`klks0^NlNvVN*-RT-=ADh_tQ5g z50Ba%m?7Uw3be;_cW)1O?_xRq++xj%Hy)ny$9z>nXSWK#VN}GO^P(G+UH8;_YjJ3E z8Y!3VzqN*iXEnaC+k?9{zUPEGxj|J#Y0id62{+C7V|v6!Rql(TvA%B+Le)~mdR~CU zlpKahPyQO4j6Tj-uupeWW=gMHTH5GzS5e3zqAwdC&xwMm?8m1Y=YmCn-C1*YIuA=x z=XhSp@bC~$(&wOMc;M95%V)>Tu$d)nrLuCQg5@}lpb^Fr^W$B;DA=0wk;tF0S1~LW z*x^?Ts5PSHs<;C`ay)X*9}8U2`OU{CUB|+Sb3;F12%cdzkN;Ufs)W5 z9BNS7Hg^1sPv#0bXd{e{qW(MUFAn6a#^7_n%U#PM=4QLZ$QQ zYzs}Ieo#yScfP;keZ3?rMYb5hJsSO#WRqGaIgMwfkAD&XnV!V7 z7W{lZdyH$2G9z5PPn}lwyPjwtan8va`SWkd&(ZVkXhmA8<`v@E9PjLyOPBep_)ioz zvpix1KpNsg2i9)=jNfJNFkcbN^wrzwasuT{em^YnxJ9v+xpT+lp$d zsQjAF2Hv-T{3EywIia|F` zh`)7_po(9Hp~u1(jjL!Vm`%eAaC;O-ii~R*TaVF_BCtN&ggjoM4C3SpjS|pr=#tww zDa{Tr=yss2O8;g-(B1<3xUggnNk|kIvrk5sV1nQw=35MeLbjfYP!l`sBuHs-fO>WChWH$*7%;dL zqVy<@#f4o=z<&)-kwFG2cijGCm@D)?KQJ=n0Q5l4s9^Wm5z%oOkV0P+ zx_F3LvcmZHk49T0!*A=CNmrJ6x(Fp+?aqTSMB`+Y&%%)PN+_L=)I{Fm!Y~cu}=G zgz`$WJKJ4uBh4OiBZgnJdPiupNEegm8My@RLuUhI2 z_mzPc#?=BN<-+gIxKR>Z?+N!e1r>ee#UR{GdPn9oM=kY)fJ^!a)QnClV5cZ*XrG!- zt0koX*s}bOJ4Zvc`2Emx)NLljYC!iPuHo}v$besEC#%pJ;jGS547lL} z*tx+}KHvSzSs=&V3-#?-(5J2RJ=2|}kdKZYX>&qY_RC)Pcg6-FWZfcbh#9ptok`yoYDP(LVV6U@%>4wam$Jrh!aZ4_IzdR5;dENS58Y z^Kqt4A;h>K*#0YNHQ<#E`v{m~C10U@v~W8?bfMic#Tj;1^d})Hvu2^kguk^TR9v~x zT*o4qPYY?Y4a3fUM*l@?kmJ3m4eCxuEWc~uMxLCeK(##0@3(0)RT%vaAyQyW`7UVS z%O`DcJa|Z?xPjAZsNbeyif8B@9 zpfXz5Hu)Y$CTzT0lQ5of1IB|#=j&c>;~o8;2~M%?&naf{qE%7`k_c$Gi`tl>1jUWj z9reb(C0mNwgocG@r_E?H+JaWlf7IVwa0bWXf2uMP2`Gwo#CjWB9r_9&wu5 z*UlW%V+lV!-#B!X=fTNj9CKTS2!-IXdSL&0P)@Ps<$##zmfph`H(tm&gsJ=XMYZw> zzKWz0W3!xj%+>gsh!JEHuVJmj*6g}ExQcE z0E^#kli8M?()pGGr3Swtmn7Z3+!GE7=phjge-DPUwS{s+&bvd+T{AGpK^Mrpna*D4 z>G`V4k-5wkX4IKT3zXusJxojhME!nOu$UwYJY}efde7ulOf-rM;T?<2SIDy(_F;_S zpV$7l(HCKeY3R{ptpD-D0m5rukuN`raCK*H?vCmMJc-+%-wSkP$f3o^o)t_?vJ_UI?xwe3nmT3uJ~KGpP~_lr&ui*fT4`TWmn{fF%YZYgl3uuXFIkYjpp z8S;h?LmjDOxRx0fA9Ezsn@L-a>?+I5mz__^N2-Y1#MXtKZDDMm|D3y3Y$_De%*pBQ z0#4%4x~e3>5&&F2GtU?yg-`qoCY-sz#k+79L}a%4LoqtB90V0$oVmR5ww%aqxVvh) zoDcVh=GL6mV%5(S<16`zfylndnCHa!q?(HE5<1C9vuy&|EdlN7Y@~-#xWN(y6uMc9 zS#0lCgKs350Y7x(E|Hq3Q^wwb=MRn?;D2h_k>!0t4yClpsUJ8`tyM6i=7!V8Y@Cpq zr&Fh2k7N1+l1gI7;a}D9`(h4%ZPM;XyigNfr0Wxmb7_U{X^b-zd-P)jDBn!P*hm{F z4Z}`EZ4OelnS?WG-9NtdtWROS-7-+uiB7VW5h(w6VecJ@#hQveAX*J{OLMn7lKDm< z$6Lbv$xnO}ftp@pZpKD3FOK)6aY8~aRKc9FYk%EBT(%N6xTJ|i>npU$m_%aKdxB2r{4^hnj#&u<(TL=$PgTfrjU z;K6R_xg(r~G4{=MycziJ+}xVBjM1pphGM(?I$ZkNS(`>1GR(q8w*SySgecC(G6pGA z!*sX;V4*Gpq0rROjh<6Taq+@qJt8S4Nx4!k3#%3c=-c2Xc*Eeu9~tJMG6bQXhH25U znxURS{!PFRwiNdhB&YB7yn~&zy2FBMU{U7ijT)I&U2=D~IDnd=A0xHbq*Uqf-yX1?>SqU8l z-Ya^eml>q7%3QYO!O)^ZQ|cT+IGaA6TAO=?jAbUx6QsSLD#bS}$#6~FAth1mPamIy zBFR$;N#$9EMSn0%5pwZC-wSNAjvL2N)4I^oNnebDRLn+!QGrW!T!}j~e}X0A+~nZI`vUH(3{Px7Y}R}5jv5*W+sLrZ zG9S&6h<#%w=S4s(SJ~3raE?RE9De*3)A&}5Hd@enKD~uZJ@z+T=I#oc;2Ch_MgTu` zPhW6+7P`mw-Sp%aXn5+`Z32!fQrD}-P~uHK4JF;>!EZtj@$=QRce%4z#0yDYJr)&# z`gV<4d#Scq@LH05#ONFdwR`vTL>g;wSGpKShfb$f>p}|f1h_)!aW{$iCwNyCW5>20 zmQPwsSZ`#|^T%z(m;`fMKI-$t4dXrhtyx`f0zz&F}e(!<9+WINo!yT@@C9 zxR#!Hg=nr~&^6WAyy{o(JbQT&nXf?oAM)XHg*Z|_H@*Tlv=n4|q zp89*Hb#>`YBH{(LdBPYH#Pe9ZvUQ?8CZ#ynv?ub6(VyXyYgIYE%sgh?MopCTP9o1d8cYV z8wWv}<@$7p8V|w89a+gI7jKn_?WtH?ZP8{}{6Ho=;}W$n!90!b7Sx~A%@^T8ajaLF zq@nmru*%}8ZN09V-JL5|APK9<06MDLmJC7KX^#0`62_==OlMIL>8!yr>RHky(NtkR ztkd6JL^xL-yP_aHY6!$_l4H1lzeOyaeBUpi)_8Hxca%gshDQPfpG459lvwoN{3PJI zmGlv>tF}i{0ovQ2BRL8h&$yf&8)PY>LNT>8*mo52>H6cmUifIdmV`^AHM*}p*|@rB zxOIGlh0jdLvO^}d$%4cVJ5HO-3gz1~lBW0|YQgl@S@KWtEfgAdJ5lEtEqjlGmHSw`hor-j7$GjDnY zIhQN&k4O97A~|>_!Z}x)3#$6J$0R}!y{~<5nfU zZmna)q`AsMVs|tQ2a&R1tt||CcWDJFZp`ix+rBou3ul+NPC9E7N&SnUZpxGPejbzv z%{L!wV6<70ovn3+p59a9s{Koxu(@X!m^#z#+s5C&^u&~(p5V;_NqKHrv4LJ{k=~id zaYRS>`i=-%lR3w&R7}T!A`%51Y}t*UXn=wI&=v`hvFb1*yu2HxPieMrb!jN!hztFa z+8Lf8Mt`huZBQD*o?$AG(9z#-G};4KmzZwH)K<14*0CAVVBPwPETU2^RjCeW*|*rrADg2cHl#*OU1~>izR0e9-P@XtR0D zi&cW=3Oc>6)ww~i^b$Bi6g`o<#&(-;k?Z@sFH}Y%nj@uChp^moS#vhp4FL}IjRbyM zWIuISbHvpd# zxqk$oSfe%9n}TNN5$h#2CJ`9gwqy zI-_P{y0^JcGt@jHC;sz>fsA+q>_hq(z)?P0Sa|XSK*fNdZ6J6YhsLKq`|0N#k(=JU zQc1I4cwo@DI*n$xUL`EO(}$?ODF+z(2)9;j67J66KHn9%L2Xxja7< z`V{f)ZmFe24ZB?=1FYX6xbAcNo0@3HSv@Q-wNeeU5w&MX#}&O@xvc8&>05VLk$xFd z_A+IfZJo{EH75$5pG3qT-lB?(V?b zkbM>BG|}i6zqR>K@QTtJXaakoE6b~O9`5bFNW?U##$^%QunYE zR-2?EBawPt{tEFrZ7Zu_)zCvU68Vb{HdOo&c%t;?l_-?svjI=kaL#DarJg}CNeYE`%3RU-_7@J0D81G3ur&+#V zjVi<+_tk5ECjh-W5C3Rqtc~f?Lj2<;<31ce4TCZpXZpH5%?Rpx866ZsVT|mn{T;$? z{%7jPJV93VmzdQoNGgZNqK@0;0q&qMD@ES4$!L1GOZ+9$$yb&d0@N;EC3vCFA+b8D z+;l#A8?MI@9a%hh3vi;mtOP`$58W$OwPH(_l)7u?Vz%A}%%U|Axh)lQ0tP5q0@vC@ zw5e@(6oJ5@ra<7U!lG*mHb21ug&fBd_SizHKQ4Pphe`)JS2g^FF4djx*8Jw~-C+U* zIrwMSmv~QAS@;l^G`;MLr}w%(wrAx6ZLoe<{Cz}|b%YtW<+CRGK_lG@bZb%K4Tc1a zf^;HYsi^X&y2}Hp<);%7`!934JPqsAWoMPe43pG?;Jefxo*cl1UMHQB$1`XV&s1$J z#b3{eIi}XYj^mEMn~fd)(8|`^%ZJT|xobKT#_RCm!f2~-{9MHQJezxJ_8SV)2#;sy z+v2|rqBKIwdfAS7%7}4Zd6sseO&XZ<5NC}AA&*~*A-&eP^ZOW}jC~Qhu2#H#_fIG6 z913RdNww~QOFKC!zlqn2^zbJrG|BwDjADc12sIaxT<`=c5;OMLQZ74vMa?5?SMOUH zn(A%{xQd_3W_H7-T)ZdTT-dYxR8?X}Uz+IaDSbE2$@R0jgh+=SZ<^7cF{1 zSX_;EgAC981Ry>{EutF>fvuDsjsf&C)Cpwrva?v)qvmyH%jOg-0HMqCY(_eN<*!vy zc;V6h=V8lVuZw5yOlKuF!=9|^@{*cn0){7*D= zm?QUDy^ewak&w@b^*9AI!zOWb8WHN_Hn?M$tliTnBBjGFdUc4MlR4Jo@61`BHrY<|IcD&w~JT*Rl=K$n{cdzzp~+%k1|w}P0E zsF{fM@ZG4gPqJyF-fI0l5H{6hxkD$UzcdSQ7ziqsG z=~0uiCh^1FK0`gG;Zma~w!yvE zE5KDY_I%GS?qnR)N9tI0-Jwa;rE}-lGcdXejo#*sNyk3tz7dVUX89iF#_hRB;8GlU z2Pz{a@7={$`Ne*XRx#X+`fcMRa)ZSXVWN9rQn#B#^NAR%Hll+gMYIxa4c|{o$%9zx zZN=C{BW{&KC5jPKQHZ2+`d^>sinc^)yv(R4)_#cV>RhqR>PuvGH7_9x?-i`f zePM5r2w>A&ARNW7W+z@c*^#bhDD9}tMjyP*5;(7xKZs;XDX>H_IH9gjLofq$D*uR% z0ZCHnshoH2w4cZzr-4`K8g|eGi-@vqCWz|CX7Tpacx&SN<>w!4yqAt@FI*Q{uDU-f zoRp&E=<-K=5nCtk7ausOJ+#CaqZHQFJHSX<*)<(*0Oza{jChW$_hy}<9SdcO*?L%+ z(Rf6lu4SwYHU^6+gUv;izS-xV&lPHM)_CGDc7Gr{G3AyCDdnzvBLNlYj8&?Ezb{3S z^Wv4#T`o=2*U4CQe2-vH-3*U_T39`y6k8NEQYogZd7%?99<{;ssAY)bl8O)DZ2YZA;Z-^6!mfJOb&4{+v zo+u$BumFD#?*JQH)h;;S!U3D>0?OlAr{Vz8- z|K~nK!wxy|lZ0P&*{AzjdFe6+4d1t^hRT1do;A{HjPB`eZ6M-f2{Fz|P+E>)b0l*) z&1;#N4q-I4DYt#WQ@M!AAD}+`e(gNUbiWuR??=h#7JI!z%h;-W6v)9lr@P;9aKM&?`X9;j&g3!y5*Rnz7z!pm9 z@AZ$h2s||2+#$)6Oz+KtEk?3FhFDPv=oaOQJU$7;B&0>)_(|k$n{pSn2hxWyK4SzH zE8f*ohEQQbzIeqzNiRrt4B$l-m(nmdf*u&}q>@g(f^_Z-O-*s{9lrsp?);YdAk7`a zM|{4KO$c=7;W%00^*4I*BTEWqg;7avc!Eji>llu&w-3hfk!L+DrL?TfL`04VqF4!D zA@sow?{lJq4ubHc>alK+*HF3vIBwfk^C7W>ivt$dAqOF@nlR#=t5bBIMSzdtK_T8D z)t&e(3Z`GaS1CrTJexTbQ}}3MfbL}TKnW{?ooe52~C z4!KBiVt?@O-OPI2k;iY1UXJE}*rC8&7Hux^K3e9*GtQ|^NuD|R)b;W9G`&~A#SFSt zMkBa<5%2p83ShW$d0BM~wT-}1wtGnpiFodnj<#SjymM1YfC#iV)nn(fXC@ilk%j&{ zKJ9IG{rtUjGQ;t;x+%x*1@C6vv}_K6U6XXN{MbDGnuU05tI29wqOS^3u{wX2G!S75_*@{j-7jdf>bUVjQOZ1b5wd z%pp39tMzpyiXs^zPRECvnMguqOPBgea(=zk5XMEQ29e;ozKy}3FF+?b{^iVb5j_}i z!o8PgYSAUejg6NJ$;;4Phr8ws4WpfR&^n$-_O*G%2;G+_k*YVj37+6csftopCSL%s zeFvr=j$j(i>aJ-{Q|P6mm5>>4og@A7d%BGC2D4miH{qcXJyyhw8+_!>IaeyeTlulYuVSF zCG_6UZ}I+sR^YsqvpkB4=9T0TF;cPR!$AqBplV#!~ zL%~b6X(%VsjgLxdo>(EVEomyEHdOLo3artfa3yP)Z9_9E!K>0`uP6d0sjZ}V6TU6z zCkSa|0(UTTDn0t<7`A-F`yu!he*SoYADwMVHFy3lZtf~eL?u;_m(p;^an}QlaDpqP zZS*P|cQjc$cE#I&SZ1|pN?0}SVQu4xBKA7M<~+B=3G?T#lJ}k^0OWFT5f)+e_gcgw z(^C4rIu0n>vEQezAAIc@^$z^%;cS>6d4AXU3@A>=a7yak5b4{^kn!Sc1?EP}tw`4bT@f=p+aKyiT4RYcF>ATBNaiwnE!O-7G@f8gookX-`wb-HRx3kHy1lF*$WOzf9Wfx2b?2lj4;|;8N{NUqJHQTy79v7 zVBu*SMsP%l0X!k7#@$dPxu%|TtgE6sRGTk-)xBrAak?X)3z@7gQEgiZ&FO}!0cOV(^y_af*=x7Q>DZf@M(tBXS8ScIwRe07g z;Mb$*KdqU}+spRPX7PLM2ZIpKM<%_k9?3lZ%4Q-kkPwiUQp58$67yoxIi20Y&>Y4r zMrY*%ybng1S`cXgp89EhgO32qkb*M8n|mzA4OmTLE1xYnGgJ0qf^>DgN1BJ+w>;qb znx!!nG!Xi}O`UmibNENoH2PSG?6IS0mysu4+|UcMaA{yg+YL|A)DP2b`*MbmVfH;f zP7cR!Q1RYwL*t3`*AmzOe-Rp^A9LoTW&AN|uFiM0x=jC=W&Aku;x$qp)k1lb0}Xze zZJY98=G77F0B*6K`M4v5@{Fg)!RJf+zqK|DeX^Zzk#1sYS`GBE4l&i(-Q!cn{lE651KcY1r=>$69%1TKYHi0W*kFl1?R zX-pD+eb;V_4nN}V=UV;Bxms%B&fZ2mw`skfQZ9NH(m5N!xDb0Zaq}LV3ZA&ug(CUJ z2iP=~C9j29Avz(YRKDp~0rZn(>R)3-m2IdChgcP+d1VUOiN06?_^qW+F60UY0Yir6 z(*ES8Mla|I)ne}iFqDSeO*g>v825z-W!K7(6U8g~hMy$oEaUJC+*h};&iGH=D2pvD z7aEL6jss{)emG+te(UK9U<)0uiIdc)+SF+!XN{S0y}hH`;DFi`b=tD;Ko1<>UTfcE znY$d9R9in<8ulaM_xwe##~sMwTQAnua+xgjTm&bklL?%ddDpxvSo#a(JwM>VI!mut zAN|Up%Y7to}VTyP7t!Gprt>l|BUxMgqa^U32vJWThcRmgICI;Vfbelj473a$4)UmkHP# z?*2NN=dWyH2r9uZQuL-gSI*IY?Ef<(qI5?Y#H?TfDnQlxcJ*&erE4aTL#U>G~|nPdh@t#PV1j{iQEre_%6YnAx% z0g&0EjvmNAcoOx|N9--``MU+phg<*rMe~>*C|nJNhk0OE&84|w&bokx%`Ah^=0bD5<&N!lkmeID1pd~u;boZ>a3J{#HCsBLb~r{#kv9w5kZfZ3u?F0ggd z7mKh6{&Z8r;IjSPz+~ST%*h722W)-$`jJC=_eyBdiwP_>RHvj9Lq<~Z?oO& zf$?Dz85g8N7+DQ?->HBsuLXR*VSngOg-;NU>x#l6K&tqTq;dO&-Ghj*ZgdsbAV81n z#kpt;>IPLHcLeAv3I9WFkr>}v4IeJCu_wp0^x!A?rdBEa7C-#j1Pv)AE!t7DZS*G1QVbpC!@8FX~};C?>J8cvI15th8+(KTv-Vhhpg6>?==W%s!Kua*(1 zMdFnElUfkB4EN#>_M4)9ZC@(qL}nW^^WuV!V-Qo{f%L^s2>*n~D!c{g7Xdp~fVro6 zq~=xO`BI5J*+21jU-a?ZiT6#5tT32|J(qLMF92^2bG0ydB;P4a%phU4slN6H74_vp z@pnzTS>#?j* zJG@_gO;o_@W61UNpUVT3(*On=$9;H%BW<_Z$YMqJ$|vu1y6gAKK30P$MyqY(1&$|+ zBk%@#KB)ihAQ{|%JU9O5m>svvi*&2KpiGtp#9{mRjsbjbWXu!i)y}>2wGh}Sh&C#5 z9bk|6M}00rb&HXvzk47{iv^B=sAmBeeV72nmhGoa#0uP{lFC}TPM+1M5$kHEUu82^ zreNbNzwaRoPq^nD+f51<1omf<{s=!8+coUZvxFcSTw+IA6R*2DCS#6|{GUKCCgfCC zy#vMUPjw%8$1E~<7=Ch1@ThBBx#4$9p-50R)Y(%RqxcDr609Sae7nQm(cO63Q&+=l z6RR6lMR4#4d93@U+qcQ8oroaELbaK$RKI*9;iT^F*2FQ5@xCfxfWNHx9NKy+ywf;| zeaxDfpLNx8IVNV#qnwbDxiNTh9QECY5OWv|Nz)tU=vT~dorx|)JFn1mXvfMP7h{KS z=_zJ2vBN4z1{_n6_{AI*0SN5W3g^w2{#+>Z3?OLd4&8rX#>HKWfQBE*rfj5I3v{?B zMh4ycW6L#`aio~+$71oi&DFG+!!Moog9i3&!xVO$A)Re0i0USz-BJ*INR6tN+7auc z>c?x62cvQgS5~-MTz!O*f{u4myJ6--KUwWeOAwc01?ZS#$D)>gPHD~E1mUf+a=41; zVbgU~{+?{v@l9sw+})6dI(vVyHGlb}-R3EjpTCu8g1XJ8=egb09$1qya=rJ1)7I`Q zgJ|U)W{!}J+d7iTGm<^tYQ98jYtc+8Y(NX3l{QNhH;mKGG}+~iQ~o;f?Mj8hjMN?* z;|@fEFO+E)Nru$Kk#aau#+BbXY?3eTUHNuIs`ShP#ckBod5h-oF4d0^NCKpoEtc6B z0XIOMM}6vDJ)LqrNjtOQ=wqhdX@vZ5Ms>*bz#v75&Y5*H>fFxI+_Hi(U<9YRN}T!w zCLlug{?1VP2T#=FS$qTme+mtx!iZDFFPjM0)Wa4`BOA`F<Hf{|iZBMKU6}8D>|)_q?xIplxI(+o52~7zlM|Tp=xOpr)m}&Lc4y7&gSefS z5^!C;;#qDbGCwPzcZArFdjJpaX*~%MX&40I7vBWpjVSI(mxC~j-v<9 z%ZVj_%IZG+J5bk-aqxl18M2MPl_l}|#}PrNZaS)s^CEXZ^3654)3QzYJ|rSY5N{_& zR2hDmMssfu~Q1f%X1MIy?EwEWroX$l3 zZ!}sDwJ5Vg7c>1wNDyY3>kWl1=?&o0If&)G_1E=GUf;g>!>p2OZXi?Bez vxVb!Sgi7UMD_dDRb2Zsn#GLcQ2|IdZl6< zakW_BN1Ij)HEIys4!bpoR_@!GyD-O1{M5!?|0z4fa4(46SMxG0RQA*O6A3Y%#^|rm zWee0XhXm!_#wP*8p(?n z>MDnlQ9#L82&>tU=%EVLlPqxNL z@DZx$QgJ(URp2jTY)#5F*d)Zfx|wl>bTt+`;{!vcE0EywHo7d32|?hi5)^Wq_miQS`A;OvCXi_3fCS-XZ82Sd?@Paz=H$I;1FKksbzaU=5 zi(=Ci**3`<(C)(%EDLf6PRZjsyD?I3I*HuC2pi~Nf_-i+Lic$e^QW`C!3U0&3*YfT z*@f`bKJ3h7N>3Q-fd2Xm)K~W|pnth3MFQ0%`wG1`q3-QmzN#4R4CobU$B{IZ;;X+= zJoivP15?gaIB;5%4rWIr0l&ulS#Z8VkM2PAG)39@JtxKasG_<3d8ZT9g8_OUwd^_B zVn?=G2)}#K<^lCV1+&~yHP){j&84!I=-JDWXQ9ky>hGlN_}JT#zSG7@rfFq8{{a4SMOt2TI>yf-*+mI^d=vhz!QRSs?At9aVDs z!mHItf?p?r&;0`ZC1j|#iNp~5_7DLHsh2>-ZP2%>gl&I<({@dlY zP;on~u#d4_eIp#Y?>{Kr>GBNeSVE@zD)YrI{oVx#ejC`_dIZq@Vmr)Mk)O4Ubr*<+ zFHpaf-dAhE{d8#<0p3B zHK9dx7T!@D!nPrNb;7H#&jsr(MxwtyuWN~jDljVzH;ydM3iWbynzx$s4Mh{OxT1Jh z=ruB^Gsvi%u1j3er>=I`s_WXoA0C)yu|O>J;=j=@SEy-+I=+POH>F%8N7@1Ntz4-? zR;?!7c3g1QU%$YVlMAL>4{5=?Qmp3oR|~eos4_1RLH7qor1Lr14_MV&(D6MWy9EF@ zu2#6O&_i)*y0cq-Ch)_kvL7(HeK!iK!JgKlKL=q#OqCzILTX#;Ts48NkH$iOI_wIm zFR3*>aO=si@Mm;H^&LjFTZ1RwT&x%#h&dN$0WO_qCsFHICBq>ZYxi&GOA*|Hxn!m>MU9B^16$ew%PnE67;W-O?v1H3^$=t^=8&^Mw3}Z-eE;gVA5aS zxrjbs^vW3&WKE}ny}d|>UEvGNK?JI7_BNs8B3g$$6&Us%Hn;w*RldzRcc&~mW%?kK z@fGIe5B+~HslyOCqc;?&4#C-e5C)U4udY z%0`OoR~6Y&)XK$QB#jFM8QW)OdQG^m&^vxoXH?5x;c3t_Om2M_*e75HnK~6SF-7`xa=Wi#C2_9q@%#w+y0 zY{)*l*-jnMU1gt@(gNAv50#>JqMB!OORX+QLo2xx%Xovn zLk^WIg()Y>IYJa3VQ0jAF&}PEp~~EURI?WIfN9J8!U)vqg&0*@RncQ07MLG;@J2zW z6TW68nxF%JhSf~l1r@*DI%oF6_aLFW7;iAYsNhdyZ{;+~1iLS1rPi+Sj!OmAYLv_#_jk1X@&?!&quDg4%Bz&_1Rha`uH!t`}o$du4 zyCH5HUD2l&ECJvgK-g7jq|_Qz8EvN!EbXr=5ZS~)%-ZCzYj$8JGFwY1Ix z2{TK@Q=1Xd=IRRvuKa7+pu@sFVIuuew+HL-oCJ#1g8^i$_7)+%n!2f#Y~s2 z5vQD2TpN>hHa)=^D*v9jq=DK@_{ z`3th^n3ZK{nX_f?ry^@d$?8;z8gr=($wt;p;P8zfS|LS7(wu05jBPN%sb@v`$!8^P z{-(PP5$znvwTc}^ulY$Q!&+54(}7nzDtv+Yi3x;ENKZRTM)3C*s`*F%h7}^3z5D+7Q#}o!c*n!RhfWoR~e5o7Dl(2AC%cQb=Vn| z?jzBu$15~8DwQ!fHA4j21VZSk$Q`y`J;w!g?^)j8CBcAp*cYfJfXdGkSGrGPn=lq= zg#@al&f1WFIe+oFtgp_nt=dL5L^9Gfoz%=sZ@w>ahV731Q4^JYYUfk$6}Q6_#aAey zx=l6Gb#6$=x|ZAv)YF8@>#4)O<#$4a{R(}r&TsF{^k7kv&vlF*u+5*izd|QwsB>6^YGc5efL%>3?l8K|4r%wgB#F<~m^3iG?cQm0KlgrqJr!yGWGdC*+yIEr+`REtlftN9gq z5&>p@>to8vVb~^=dx3F>W#3f!wCfvK>7;SMl=Bmt2-U-H?TvaNCSae{Wre5=b$i23 zCpGMpsN#0m+&To=zul#$N!^XD^ee3NiBTimfyA;Lq2azlBafkO9@GPpZB`2PM>f zGX2ohkub*V0#&`juneQRD-5b@b2mQvolF( zNe`HMa*-nUrpptX7~!)BU7$_Mr#qF>=k+(i6B=3}?t;|4jeIHo#D2gO^v-ybI;NCP z?wBSan>X*!xzFYP=F;c5sR@SrV0SVLOhH`>1#YoN@86q1zYF^U9Z5t;cm$)36eooQ z9Cz6l=sqkJ*rUu2qg$3F zM%cH7nq`zdMuTQrpsNU|<9u5bf!w*`;A8cppjp7S*ys_EUp9Hbe zT;IS>Ng{oLR4_#9Vk_ndpO&XD=36eUkfrYl``(n#}P-z$BV3M|VC{JXGCro+3NYaCcx*aWLM%U{k zVeG>STOF=cT6-RFR(dYIk$Z>H%&4JM7CvQ9xJdT)k`?L}LY;sg6TXJnZO=CR3axCY zGd1sD_b#k$Gs@%@7-1{j-_RM|o8M)1*caG(>o4GiZntFrmI(S4o{Q?C;VG)#zFXey zR~`wwz_b$26_24MqAi)_t-`NJM<&E=tR2E$9xbT6^0(w4|O-I}rhU)4d!fFgN`6q$T$?hxq(l^+y zvCSsXAxMwI`VMu&IDtZkt1_=D+shOBA(8GcpJbP#HEytcbkFE_c@Wi4NY692;&Y{0d*X2T<|Orkwqn z;kp!Thb?DqksFpr_V+ay7y?lusF1dvLOB*0(f?p;>gJbIZLz zAJLRL*Nk=EC@A^o5Wx!d!OrK_G6iuGjgl+ zA-J+{Fhz~6fr?u&?5!#Td|_Xp&MxeDX=RV;;}l-jW_TxB!ocMAfgGSEF1xQfn7}lo z^c6ZxId-?5l*$iogR=^CI*zm*YBJ=GY^Egx(clcbGo+x*LhdSfc&?gz&L8GS`} zqnI++e zHBK<}3{yZiK-7@}mEElZrBQ3qTU*9ilT|VFIrTAK6~Bk(+Mgrw)i_LR8_uQxYQSM2h7LRQDF@9O84Mh@>iJ! zI#o)2bW4ehfw71y@DPA?wn+}_M^-_@x&g(d={luYm2EwAu|`&C_0yVI`RW`4<8`O% z3{>0>nf8Etbq{wh@gQ7#;(=4A7$C*x^wsz`bP?{hL(PIo6y6P`SJm>Mk9#DrW*EOi zmqQ-w>Zu3S3p)`3zWW9<6MBlPwTDoSA>cQ zDSP7SB;*NhKBCtZnA~n=Lbpf=}PdzQg2>Qx0`DSU6PGzSbux z-k?v9A&lRfh=t>zluIEJ>`NE)!Ko-$xX5O_qPYpFMX$JC(4Qa|?g--ZWsa}wAulSC zybH{hSJf-KAx5x47`S(oy#9)(#4fQQPw(+(dE{Q8zr(01UGIe+>^lD)8U28{^$ppW zf{IWhXB4$!XRW4qDUdzwa8Jd^{5z`Cp)8`WF#BXgMDMU)Vj`5v@M?|RC&8)S+$(&^ z?(Y$m-D4dl5XYB&fxcHPbyvpAz$D~+w(L8sZurDd?~Kw)_Z+kAI(x9M5XVR=ZC!S3 zhxmsbD!6x)yk9gU#QC*M$R3#>K|fsX1=?ky&huc>-D08Fo!E3!91*X@j= z*hbs+&S5Ni1A|cR6;cWImCg{-r>9M?Jz&4Zpp+eJ(pvFOya}#T$i2cD+5G_)=`{t$ z{K9^Qyr^KrR#n?yNYL9S!KKH?8B$apXE4SuHTIc=tTjn+-{u!+SPtrR01mt9+-PVB zV8MRCquh5NBsPwzC`#ZTw zD7)LSXXqjn_ByJFbE{_ZEByjF?^o5PoSg8h)pD-=SdrJkku(ch$gV;iQEBo&=Lg?fHa`KjJf+*@EIxC(Ze^@o!BshP|jI(xz3_{>G zrASZyJa--TE5xUUeRi0j^Tv$g+~rZaPtKfS(7k?5$kY*|ld3591#4; z;4rqFR~XHY#xYC>w;PhFz)yt@a_tE6(d#yj$1qIjXjl;AF3elA^PY#Y@^B-fecs~? zotu2irxPJ`zH(;(dNxn?1rm{js%@<*PRa~17u9fI5rG$IdYSU_5x7Y32H8MmZP2hY zaKc!yd#L74J-Xa{ho0?)I=`t0ol*0Lgq(3Ml)gbP$pdfG2|Im|;JZ;ucXByHmdL{0xcg4j0(d#{-pCNYB@)@)+Ode7LoA_k^82i;=QG)+JCMy9Y;{ z_74djn35eReTNKiVb{vi9Tc3`a9#5bi7QB~(RT==8<^?{^8zbsn+BB~c5f|JHr2*K zpAFjAJfON2)U^N!*&9=pEA(cr)CL8h6L$V{celUNjY6Lx{(^AkP1rH%B)rD8T_8nL z*!;l}N>0nX?r^8&R*P%#lBoW}-C z7-3e#j=mg6C{AUT+0bFg(?$!#S(C~%H|%sA5^|V^a<~#WK@Tnq$FqS>w=%&E7}?n$ zJi{t8r>LcCAlUG$`?(-TFq?fWOREZT1BDrxRkmS-Gh|gH+NQPk;?79tO;5cr@9MrS~qOIJBSQ+xAV))K-dxUhpQR_&%5{GBXlHW_l22a zfiGULky<_Q@RD2q!f9nemD6PbbCDg8tTE()k+eZ=2Gky*M3w`Vg#6^wFOW958`9q9 zH@vMsCK$JYUFYiz%RR%`d5~^Ej5`MF7l;LNpLQ$d9q)>S9A8HG3K=$1aVl*b==LHK zJVI5dxDDQ@EZ|;H_su1{2@LlNoivEAqd|pp*c=D05*SH$Xud-yUnA#L22ae1f!MeKDm^c5CY_+;1n3bmm2r}9f_o|N z&|@~TPf@)BQgO_`vIFz6fgb6F-6#1+x)zdzEZ+Fo6;fg9rcExprjZ1!b%mdi&-Fs{ z*6W4YM?HtT^)}F{9Co~pVb{5%)d-e{{R%ZnbO2hm-2B#t(qNL=U*0&7Z+$Tgwz-yK z84+>or&Yc{_S3xX!?g(SdH7hJ9;KH#$vVPF3?2 zQVxjwa)P6|mDX~4Qa9fca_^wlatkAnuvr9Ee}kUL$fxUT2+>_zEtd-nZtux_G$!1RbIfsZ`rYA1;>8 zciVn}*j8sxmKf#!wt*k9pl{H4v%(nc z){EW*-3@n&x*n*w4f>!F@Q0o{>``uHkAvC|`L4O%?M&m&|0$*qoFhgUQ3D<0N*@1{ zDZS28BM)zoV+wG~qaJL`SF!vq+dK59F=ZbchqQWew>a*Bsk9xYQaqwk>7Fbnzdt1D z#}?>r1U>ONlPG=CWjkz4p0fKxLucqzWNL>TW6h%TC-Lkz$a+y>KIK+rykAd(ca@dC zz&M52wQ(w?^Es@deK9CDa***FXf^#%30Hynq4F|cp*v|(CqjS zv$A~KmjYzROsdKXxjim*7Eh`gc3rz_et}s$F;^VrG)Ch*q$MIZ&sCoxkscw&aB5LI z$vl>s2=*1GBIegO5cka^-{z;$ln#uz4PtYojxEwECBHvGCHn#i!$%nXqssWcgUZBx zraLaMGb|QpxW`+VdgfgRrR54M-+H(zWcu%1M7J~&z|MGca1omg8kmjrt)KXvyg*&fq2BH~8VP4>9(%(bF zetO~)c5hi|KNtAva)n*o@%)^B=qT*fI+jley<7*v%*JfD#z|lx12Y@0K)HySR(E!w zVMy@j+R1sqe8)0Kte=H>w^`ZKW$eklKp%I9dS?c;`Y_VArCY(BBQ6k&-%rna9PE7O zb}D&K2)#hgbW>+=w5~jDq_>IY{7OeS{q_U-EJ`)VT@A$GrMx zLi*G@#O;8}k0zv)Iw#*I_*RXo{svjwj#-9|^Lis8%hWThZho7kE@Q+xgpODe-0J)l zqB{%Ho&ATE770G(Ec*e;jmL=XgL*6|e3O6#BT=ER5MgdQr`2t8@?HjfW?m_QGc`+%u_ui#0g+RN@nG6}hg5BmZ= zDhBmQWt82cvnKfV3hW2W$G+%7P<@%B?7o{|f)gRG>IpFxTZeP3-NDIdh1mz%GgcSa ze&lUHWfNv&60)Zx0D6XK24rMP-3*1tQtW71HR*p{pjXeK`uJ~!`_35&caMD|?ST2T zgD+wIC$jAvb8_ifLxuP~O2>1nv}!{C0# zv>^NpJ2ygoO_Mse#$Nj)f|(3=h-y&vMlrc#MVddoX>0f4d=L-r?w0A6Z!oHj za6?%m+(-xPnQUQSpk5YJ^Oyjfw)zE(jEFm6H1(H+oagywrPtx{7_0@kB3GF(yPaKT zf5?M`*7z0ZSwdl{F|5Y5I3bApr(jKbVYKogexNUZmE8mHCe%+|P@TEQ^jaK$yIj`7p8`hG*f>0MSB9Ps4sk)lih+wHylUmf2_hzUMWe+y%Y=6}!Itn0BPvU^`mdG{ zx?yu1+{9wuU>1TQ{bRdCQFU$+- z5@2Gy)=oKwkjc-ygF5LBi&jx5@;l4ueuuJ8XLxme+Bf$sX zWnZ9YnL^!0oXd9-@-8s!2aIZ3WT?KXUg>&uCd5UAeSy{@p842u=vp}vd{sZg&$?v$!329QbE2`1KuYS2TK2InCZwbxe8^fsj* zFsk_*dQvH0Ro6Rd_HbWOTXY`hMVLE7a2utT`+)hB_c^5QEviG}La=qdAa`Ntro2sG zMZ5+O1Z-+C95Axy_i8NU4%?V+>=2P)cvg6JAxNO#huvl10o`5{axP)mh0pkW z$i4u57igW7t%KsN`gYg~qc&k4O9gkz{9-yw{asLw;t;yn2ZHB!J*~&@70P|UWX`!D zsC)ex%!j?P4A`&G>rGN8RO_)|YLs9`Rw-}LmvW(cAh0#!*$xwQnmi^vD4KazQQBBR z$QnLEA$0g~U*U%f2|^!e^k08DYs#!iHIYC;uP{_^>PTe}l->Ey1cr(13-nSxRNqQ1 zyQ`SszyCe_Iz%KGAT|2}v+)Mij#F}UBg7uvd=QY#M%+Vn(j+W{so2;_fKH1y_XYa% z%Tn`(uJr7681%V^eT8m*Le274cBf4+o%e#GnL!GPu^J&y=C3keP%I^t5{o4B&CM=z z-y`gR$?P#=sj(TdJB3mXit~QvPvw#pum}fy;Teo zVFEq0AHKl6%garKLyuIFv6rZ^p@?!H1yP%!z!0-qH6h*h4H|*5BW2=r;>dD-eUm?R%Dr#>1DvC{&xI#fqp4e1$76}++ zmS@B464ZpYT$Z3GXedm$wT#6IslZa_VnmduJI z!A)BdnEHN$u88<{cK1uKbbi_X3Y)w2*0o&ddb1QJqlk|!u#MaY+GS6ui0QzJc|)xi zZCy2gxsZXGUA=JcFq-)bnSMDN&Y{z~vg7Oh0)5s?YIcXD`#iY`oGiY=j^e=t;l!!bRb z1gsH01U)k33(`2?`eAY`BfRz%916k`S6FHtUf<0wyJsU|_e_QC3k;3RCuvKl4nZac ziW=rCv=OD!WR>l&#gpJK9m;;dXlAe#;xClSPGr;AEY^^H z|0^t2Hxw#WHta`&?6XWTq8S)w-iRo(>qj!jdxBR>fMQJ2;XPovbEsH$tB{bbPG(>f z^J#h(jov6L``ww3gqSVj!B^;`(V?~*BF@;nmb2wNU_WMSLxri*6F0_sQLQSoK=*iI z=dGD3sYZhY_iklhVU^KiQ@Z={DNJUf6QZCTv~e^MB+OB56Fg^N0`>75WI8nXz!Y2A zS<^E#IO`_+0h8Mstgzq4Utl|;QABs|Wq*T=I73Tr#!B}P2??$@-XQzP^d+O;Z6kM5 z$WB81qBBG__iRd~8Wi3w9@ssQ{|mf1HF&A3wa9*ws~8f9=*WJ+p&BW!#$c1bBB z2?S8&zM>CpH(L&QQ%&-R6Sf;3<^CP^_FCA@@0LeoN17;lWo-sxl5R00jJ=mESm#q4 zWY@^}2Hjwmw{B8VO&pXMX&dU7T%gj(W42(XuW)K2lgbq#SsMj0FRDdr#{@f0S_+u2 z$X-W#kFO2cC>Ko}yK;stB-NFjvy_o<8A@VP59`9rx58|D(gxY`k)DvhyN$jY2!{3N8h-=N2kWS>dG4J69xZf}JjFq&B)sQzMM zRmqMKdm79ier$!#yX=o6Y}hq4Y*Ogq!o8u%O9yoWqvL^n6?+wX5G>B+zCeUJe2nY+ zlF{c+ze0jPo%##Rz6jy+#OS2^rl&_A60|u(RO{J-P;2@5PL=T~Y3U2h77(dKrK*fU zbam&&EZGm3-04gdl@)Z^6R)5MSvnK+*G!!us#3{p@(w%hD9zw6IVs%-{B}r@_%tmz zODK!jE)hrW3{efJ_e^JE8KH1?1=1sYM&lj%d?n03V}#rkAUDGy{_Pnib6)6x%1l_< z9uI@v+o1|yVB)n}GWSBHd+h~wJK?V|L(;iy*zHdm)^cws#q`(4p?R@>nCbE)c(f|A zS4br?{-@^}Xh3r&2+py~e!%2*Zqt-7FI2i-HwoTo4*LpYw+ItYK|NIsyN|=mzCeUP z^gWphFLp&O^NymJx7uL#0BV^%8l@>GS||4zzE}!(it2t6H$Lbra`VQ~p9}gMmm_|AS zo0)+O^wET}&&PaurJ9$%L8a>t#}KIswQqtm|2zC?P@Q|En=%eb0v#?`WZ&U5L4@@c zl!~K?@ci+7euFkJ)D8>9bs>QxRB=0OZhZsT8-oaYlrjDk>2>XQ*yuJJPFv?~+1-E( z`xWLeiwmHw^BRHTa~aWm?10fNM*^TWOsFy`y1O3{ens|F_d2#}eD>R12ad1^7J597wdHTI(z1OeO5B%tv~5Zb?A9_l1`K5zv61~ubu(q!sY zT%#iXXi}u_upf(oaQAO?(Pc!JYW{OUxo-lEJC;*U-4P8)MET^3vX=%YsZ6=p?XL~H9SHI(t95x%2nmU~8fI1F-vg5=KJwLr$2%LAy`FI8b^ zG8&=^4&VirYDfg>T>waT6ks)C7T+OlPn3@z*%;yEHVkMVhxvkhOG+Zcrp(6VO-LPT zz&04g{P6;1=TL;wJl-I?3&3BXeH<#G^^vZpgYo3%c-VK?+}d+vpIHD#Tt0`jtMD`O zm35doWHrS!cwue^x7-W7bwk86XH~_6OR5q(ga@?4Xy)_|kuR5Yc*NcLapiJGq2+B5G=ZheIh{%ZV@mE7>Uz2x zzm+p521$sqhuu}w0o^4D`&NsYx1eV{6Nhse3yf;Fc3qdXRVIh_q&qHH8jQFNx?q4x z>C5g`1qmPAC6)bv$(={Cpzf8Pi{2V_EuB%m)Y}dRrR%cBarMCfXE?~bLhA)8<*6$E z#HtA~(5{d+7|pt);EyrMO@wf)VqDQT_!_I%eMQ*qJsK{3g%gS>V=aETwx6(beF5*_ z$-F{$Lf~e(S4|x4;H;sHSzk~`uK~F-=ba3=4YwitfYHle?NQb^+|XU*`Z0U$J9M2& zsk)&gy^(zEbH(j2x&3KCg<<5Yj6d3t{I1Xpi(a8266>rp3v{=P$Zu#t_62saa7fQ} zWk078H6Y%i5CJc2HIDZWz4?6%DD*4L;Zuv+j!VGY1)|!qcZT!>CbzF^res@p@$F6% zj77?Rg)Iq>1Wc38G&r@spicJv`6p$4w9$A2Dg*ZP;XSK=+GSpXdCH@<13%K|# zyZ7qIkF$a}BECCJZXel~N`D>pF33EN6!ryne#Vlfn1n~V(s1D}`wCl!n=1#s<0O0Y zvhOgujpH}NnN5fqDr-RDE9_3|wxBmyO-*4$-N}djfXVGID23XtYy3K9&>JJNFL1MZ zJnGeo$@_iUy_R%=zObTIoKfnY1_^ZC3g1yQbL-G1oj6C^*WlcknEbO*Z`o#9M%1ir z_sW7I&<6&0XpkN_>wcncUAJZH@%090jpwffSU}=^9QH7ORyTnWx4}BFx{zh}ClfXM ze8k)<?g|3#;=XVs8qUJ^A{N1441T|-`Ys})zriazj@~b7ln@uy93s4IMS~$yL3>g&W$}^ z_ndl^;R>SSHrQ{^(FT=Ow*FL@&%o8bv{~I+E+zS!rY)t^9T|VXCmi=y<}|0xSndnt zh_bSL8|9+4M>I!k#qF@d+(_Tp^Ep>cW#^>`Vj=_cGM)jujXkd$l0bgh7nr?hK878v zbfT=$t_3ybsxE`HmWZ0w3j0549k079dO>w4d-yoyPQGzJV7?%?Vjg;BcSAoGlhj8E=1L~1Z6pv=9)2%A$tmdeI)doA5EPV+lzFB|6&vLP2#AzYNa zJFF<(38}kmCp!}2z>|A{hDoK?ZHDgdJ_)cz`U+SZ>Z;T`YVW0HRW`l=N;)? zp@?q+RqrhUPmfdCwwP{KOhp@EheJ(%AJ(2~>NxNjq2^9+I$&DV@bIw5vU`{z+*hQ( zfN^BJ4RgMw%?$H~rU8<-kEToZN|U*>hI~%DBWG)~mgr`5;&0ZrtB_u2q zn{D@xaPKKk?bW$Agq`Z+H(n68L#>(8w~mk<5ModCrm$0w(08c2WQ?y?m(Oty--J=! z-y=T5W@aK7U95yHf=K2SGFL(E#-DwVj^KHs8L3y)W#31)T4k<3?a7ELj<-N)Xm~lqlsNM-pVGvfpeDv((7}$XB)BuLW_IWk!UR39Bw9X@@(eaY_pwUI+|gn(L~D$dF(R1K+SfjI|9TS zO*suY5O>Vjr<`YKX9)Wim9zDg<|}ON3&}gkhrcCGn3eX^H}uoO~~xVnrMNnz@^f1t(Ql|J;<+g zp!6N4VE(GzaJNO7rNewh9qP}0>6iB|wH>X*1-h-xmt5Odb{@~9r(#hQ4z!#*)OG`> z{aL4`nmj})_kuK_4)slM-cZTt9B!Xfaj*t*GNf~oKi#D&By{XID*q0BTbC(}swz7Q zDDKYKG4}%VyAMo|gjLJ#FN?wM=}6guirb+fe&Ey#^hPVOZsES7njtR-kL>;i0`5qd z9iT40gL1_mH(}GmH*%o*o{r2bbom1nGg{HN?)7Df1NRlRLg(&=!qCVs$4~?+Y=`*T zLTuM2JE|Czh$?n0=>w~%6Y{XzX{jS3qhYtx9?&0U70zOq8gvpPA#>Ury?qH7aT|2m!7MZ` zh*32P4*RtK8|+}7{T|p^P01eTDKNPQVmTvx>n*kXUgc5q1w|3moB*2!!_3+s;*?i} z_R=O?0lAp&6y^=FFfha!=rX1?;!$97d&)-o3S&79mJN3&B!1Q*((;oM+F^S*q1slL z539*eLY*0Z;NlnP8)iM% zHkG!ZWcBuYYuq2wG4nM20i#%+DdtPNk(dWCzO(zq@X;T1o2oWFyIVjizS8GC40ib< z?tsxOZ|1UVH8F)5yX+m!c*#&cpsP&|J&4|33)K)Q3HVcCUZ5@-{f`x5MW^%78}pxnOH%}L*G zQxdDVLVqz?D)yo5cViXw4KK1G?ST1Kd>A?k9#`47r>tY^I7jWkqbqFCwXQAS{>zzn zeIQx~ld1F-TJ2EBH}f2R5_p~@><5f){zfqDALE|oiDNPTm%@h{#PMS`uzR&1_5&ujvHl3FufX#=`C2ziSLALc7b5aDnzC~Gkh=^Cuf4&W%P1PW zojQ6k` zh9n{O7WM@?&Y|}1rQ(djlaOfLJ9JYM>V%S@8?~e;u~}zW-KL;SoTH4EfLe40mHUji zkS(phz!Y*-VXtU}h1;#8P#qDp^~`ce)7p~Ybv=bI&^}II>HaZfO%NS38|&||eSB8r zkX<}7LN>*BSj{@Pbal2Sif|V@QN?8xhGAfQ7_10YU-ldTOe`hh4w&4zAjD+DM}}Re zhlH)WEU>nf-_OqQq&wM_oeEp&E7VhjI*#S^J`-H8oMCmdsK!#Z?qwKSOW%?%D0=E3 zjp7D|-TChD^t5zgzhvwI>fUoVdRF0RGVDA2|1u2j6BR~kOK(Nl2*H&ie=s}862KNY`4sQ9HAJU4FtO+5GFQ5%!dRj3ov~1feL&0Ta*C*q z6g>goaV%ai^CnR7Fju}Oscy%M?zSsjGHyi()K7I7wyUFG*MD3!-~sIuaXlCFhl_x0 zzu`ck!Y-Ikv4JwwcA%2UC!Jh-#5dF_k=mYR>?Q#j^uM9@8wVQ=nocKx@W3hJ2wy0Q zWmBG;xi+)r#()-Rwm96N1|2xFgM3?WivUk2s`-Zf7R?8$b8e%Gv&*nkYr=j&xA`!V zU?0V>S9Mn%!+yYtz0IiiH2Art`-aucVL#NFBv9Fuf+O(i{(#;O1p8V`pl@@FsoV7& z2i;*}>&-}IcBi`gC_4d|`fxvysxX{m(qot{GXh%vpHHNBC2g5e-?lMe3iN{2i}5K` z_mPe4=pRm?LeK$2SSJkO|5EbvQhN%E)kg5c6xjoCr_LgsFgdRogUO}L+3)m&MFYw4tdQg z0Gmv=ELHRD0F&OP|ANURysP218Z(DM*Q(}h@qa*E2&tsL?0+3(^r{HiFPN0(5(18k z?OL04Zvv*9J7A6mxGb?$*DC^Z)3L%gie}DuL0sFx`F1C;{8&^upbi-9vmq3A*P%T4 z_K`Jtl1c^>;D)NC{DAgUmcr7F*(@JE9p5nkQ{9*%C|No=IBRokPDty+gh|!wkQkq?q1FKOtQQ>=?_b`E2GV032@n ztsl_hEpa4Ak~hsHrc)4R(Xt!g8Yu$Cgq^S%ewnb`GeO;>IVkReZB%U~-f}(_*^UQx z^!W!eEg4<#}B(gR9F^K#>|1~&tL zMyoU$m)Yr?Bex^-@zb*i8Z)QVV^AOUM{cNSjR)$Rv{S z|B@@vebmubZ9qQ%Nf%`!yam`%8sMWEM)3iH2ZYKHgL!(XsG&lSfFGc%H(^iqJ3=X@ zm4*8bZ=bFOCV)Ao=wfQ`u&Obnk(#bA^ef;8=*6V6Gx%%ky!F+7P;dUF4(Xm1b zKjD0uDV_>?xv>AQaM&k4wJ+=&Mz!w+o9l?1e8t@^d$V;x{J5lav+sb4+i;T7 zO0qM?dtHo=PuZkCpbLvqGhI=712DKhLF#6NwF;Yask1Ipm3_gMLccX;nEHvCFggn- za=&15dES|oPDI$rG$O*@q|&v^`I%G+Fu9#QT+)W+$k)ZW%BhF z`Uk$~6IQo2w0V_U-52|lyQnolQB!%Ftsg%4lDNrbVA*j|QN<~tVP65G$^j{9HSg{G zi1VjEj3-H+FuJw8e@}0MG!lXEcu`M;fuO^ccD3nYW~ep>i+FO7 z_euB@I{uMLV_ij-lz8S)b{${oJ{V}W)tq|i=&;v5rrU@6iE4~7T*K^Rq*0bj*b#QY ze5&q>AFgO$X6>g#KARzUNoTUVlPdw%=FOhKbw4_09R=MyA};M11n_2B+^4=3#c?DmNhQR68|iOj;NGy&v+0jYy`h$!Jls98ZVfa_Zf zaQ@>5=(RLZ$FwuW#B>Q5H6rbTL}oIDV)$kw6yAlpFv>K|ZYR?EzM!{0LuJckO0$QP z4bXWxk#`qE`=H$_o54CJ%>b4ZpAgL$xm!3;aTbT26dRDTB=!MK7kjDsDSHym{vvkA zDDHy!m~)4)|H3^gyL$%>VD?k?6DAj0XWcQFWV=0D-V-u&fuvr+B%NX5H#=`E`wK)V zr*|dcQ&kJb&|*!M`;TtGaWSO7804~gNrSv>zL)ue#O*#Rl^}~{Ct)n|89<5s1g(Qm z$AgERTqXd?Wq(4QK&al=v6M*$#Z;-wplU`dka?Fo77FY{!+pTW?x~%SnTV4+eH@WDjAmZo z0kx-gWcTQm0UD|kX@^2v<^Dw{VSsNZ!F|C*cJ5N@jD)36fTi<-zK0_F=W3O{+g$0@ zJo1RCAmvLuZ%(8}SRe^&z5KYpGZBZ59Yq4L3||do$TH z&nlhNHNLj(1-bq()K6z|BaU)6{;IThXJ+zUptSY-?!-PcrcCLD?H z(zAK)Ui&+&HS!e7)Wl{KJC~Ago-BdgjZDUNat_#wOB2vCbBobW5cf*<={1R8(`iEs z`w7W4j?!esFLa`NICMU~P&C8C32hldkKGtBiae2Z8X9pXm5m(FfQqwFbI8ttGoma1 z$Qt9qq)PwYq4kCgQF1+P0%(*8n0obusaLRPDmf*uB{jZHnQFG-RI_S!v1@}=##CA> zpU`>*m6|{G%J%BnX@PY0)O*fGJJy(}lZ>z0$cKD*@B}9MHX4u=gmN>~7{FfIAE#?t=N)N5Ad7 zTg%^daoICPN$dmSi%ab@ElQ8Bd0O`eluReJBbwgT$kQTRQZKAx_I^;eci_!Q2Gk-R zs3bhq5v@sscdD(AFBCSBb>uuhSat_!(#Mp)V4736za_`BbOsT!b4KzB8(SkLb#=GtY1Dm`vE#X*!(QRc zad@nwWtK6=8*0-$IJ|VX`vsE%b=jx|+PcxJMI}3240k){6SmFte6;M|4P8%vSM+9fo)Rt918n$OCroSy1yZpIRmR6A z4Zs;G`vdAvs46?@%AQdT0qKioRC7V!%aa}dd!*L{>taXxhND{(Hq2zuEu9CVk&l{{ z{4sP}Cu`LUHIaN@W_seq+*GFs}QUzoZzjI;v%a#rtMA^peG$1qjZi9Ao?+r(xx1xJ@$c-HxsVxa;t9(FX zf4Mx+1K-I2%%}ml!au^Mh-x`WY#qxpYi1u-DB@Z;|I*9?%kJkIkOBT1c801))lHih zLm8hLx`7e5;F@A=6?C&qvx));`vIA=RoHa;e7$L*0wf=A$b^id?Wt}7HN(&&EZ&8p z`ek}g^F_^D3^5RIh?zna@9i9RMxY5$x(ONj6K2~}r4N1O%L8(LxCyQ9ic3>EjK0E?Y?Emff8(2E-X+KhyyU4z(@F{Zh%f&Lam_T+7U* z*nDi&nCg}x7OIrhrV8jn7biy3@)0#N)V9VGdEQ^SOY9dtpO`U6nHQv`8n+ob_Wla! zmlyd!E4x4GM3C*tI)z;@pW1M->ncaJ=D-PQDxppyeW5Rkx9CqunMuVqPg!>P!W}m1 z;#$7+FP()8juS*p!MB#4>ADwmu0<*zsdVq=HUN*onRwa(qgVqnNpwKk5Q7D&EQ%Qa z7BB{M(d){1gICyBPp|{Vx-9yFEyJ1MQhK#xlR`hX;HWyfuQuoj`6NbfN8O)rayD0h zm)_4UGdvY6kZ;#2_tZ(gJ^>{039H*hT{+W&=*9-qGPpY}sFCd@y~IduT8CVg$~5$~ z##?dIr_zVG=1cEfPeB)2=unEJdyAuRoGET=nm*O_E9rD_ma`laP|xrM+lMUMsgjBQ zU#f}D!C2RR{)DXtYjsEuAQi!#Uw-_8$-7@u3AZP5CDwgF9^1owe33_Z(*Gxzr#KUU zb@qA|a+3xDhsQN0fCuQr|1C@ddNPpz24F`bfI1DN1MByc=J(v1q^aVyJnz!`Jqoy3 zZvZv4-=qH+9R36SQk+BW5r>Or0HrpuuYg29VN{iU#s3q51eAT~?kq)F@^hrWw9m$> zU!4s9^03LD|M@@vaHJ=Tu?A2dUdUTdrM1~ZcIRsX!h9emL8Ns;A6}KT$gcLjtL;9#jMSLR`0AMzeWp+D@0aQnt5&V?7bb9F*pk$@h zikmY0OW}nlmp~ayUHWAK%hk8KroS5Ec*-x<=tf)^%o5Xf;_zrQN{SZ?^ z!%lrP0M8=q2ju=Lskk4*PGy^bD6`Tvx-Hl&Vgd}~^~IJjOrz;G;PW2?DBgjgFX-2y zP609{5=atcegZQoteQ)x`H+(wZ$JUV>aN+ce&cQ%;HZh17o=4I@%W(rM@olXOXd+j z6AAqZy)jiP{o=6W>wdW#i!rn88#cB^huuasoYJ)$uw%Eve!>tt2LiWC4t~uc^BcM- z5?xxlWEpMF06Rd~FBsLD5I5LVbEmi9b`2%mPk1X!*nczXWI%@I+(7q_9UKA0B<+oy zDu%f)97y*0A_K^tC!~LIB$-@UyTFu9!uc3Ys=}Xet71}ACFHG{n>LB9FG55wNKKTaw3sx5la@lL@xg0^}1rpP@O6Ub#{T#_O zO9QeDfaE8nUzWo&;i9{{2p5bjkGV>n zDN45uQl13h_=WumwQEorLyl%H?--EjRrg9BFv8X@3OCZBJM2t`DE)%bjTfaurAjrM z+`gI5h5JNdUj8q_Y=LN=C80a)r>=Y%+1Op!J+a%2^5rN3y#7YrE*RacGfR@jF5lrx%AXZ?h4k8Z8iKcigaW)H;%|Nr@NvE?(im;f58 z0T|uTe}>puG9vNm3t*?OADGw+qBz9u60EPe(suj!1tY5ohwiiPUo7j9Pj(bnz_=8P ze!%@X-gx@Q_-;rcwog9YVTHH8NH*W#X7~{9C*8rbUNx}eU zYxtP&)7+tElm)hNaripDTIiwZda0k2z2E5MvUbV zmMI~Ly04aWeXA4N>ATp!{7IUm*zVBC7^EAL@Ub74Ak~#2zNOU zY`XmxPoX~`D?CuAgMv;r8$jlV{eYM1riC-*Y=<)==u=Ef0+KU2G#)um8UAGs`GAe? zwZ_RumE(OwM?z-nKwT{$&cm>`481it>`(YFCR+9mef&D65=>*s$5U@N!eUB9@yd4g z#WpdMKaK^%px=%xW_M*@NRI?KZXe{NL&rSK5A>nyL{;h-30a&BR+u}k<@TWP9qPwH zWmRM}YftNr!>}Kay)CeN7xJ)E;0D;gDE)x6aj6*mSGt+Dz=`3?gW4*mSX)7zpCgio zQbRvsGK0&*B9a=}yv2`^d!xklUR6YS@tEJI!chVQxbffz_;1zC!ct!td#`|KCaWB|Z+HGr*)3IO4_HKr-Hy0LkS`GGJyQO%^fB~Fk3;TwRZC{3+ zpM2)p2>WpY;!nTer{e^ubKHq*Bk*3oy4y$TCv;E=wGD%dB=mv7bpCQ*FsiwAOKLkx z=+-c~ZIv(N%#otIMgv((N&t_MhI_+CW{j=kbwK=fapp*0D2ZfjlraX>+H~LUj@k!w z98Lk@;9&{U)M6J`)#JzSN=5jX5ya2RP9Ol)`F zOKo>Tv+{0G1E^xQvJ*NQlG;NpShfcIK|9$G=-FJ@f0O<;O834SfccdDg6P(HIjJ<6 zvS)ltQj;+lqiG}yIxC>=ZF0-9`2e8OYUkYFBpP?uGbWX7JzPy+Yw|?N6(%uKppa|N z+0#>DPv|@`vcB4F`e|$&0qzxyCL1=H^sybBvyHe5 z=3{QWhu!^!tzBLhl>qG~x2HT|b>TLosk(m|=*mqBV?><-4B=nHiktS9`6so41vO-pVzL_A?K6-}`7&@-R(LhgEmhWpWU_?(~t z*@es$=Z5(dy{1Imkl`kG2>6xmAMOL{aY3CuH%e-)Xt0f@g{}Io=Cf3RCA6$?5+A{L@N*()qHuv+H_{TCZ%pvAbyufi2a0m zJ5r~|=*kNLZhTa_3o(V!%~#Nc)Qcu{2b6n}gPe5>b9?=+yBL6JQ?}ELg=KHPa7F0I zb`&ms>dOi7)1}VwAnJB2qc74Z{e*1@-bOvGwi)GZtzq9Vy6NJv1V$G%+*CUQG6+EU z0T~!$F#1AAq}9UHy*yC9I%yUo#+iVgLAqC?plOZ0hWtR4OdeLU_Y(UloN!}a zFdwozk~+)D&>6oQ5R>q-2j%mJf1e*Bcer{hJx zri<+g;{!VQmP$>oa9>U$K=UN~1)I{HFT<^s!wxehX-1`|B7mJ!>?FnsFu+t09=d9}lWP+C18%8HT9U*(iuZ*mSpM3ss zX;|f+h*~W(ZDC?JW8<;GywGUYxa3BeDK`|5qboyyV0>Zq0J?1b8c!+W*!xf4d2|L7|xKC9Av-vj7jx4*x`Am-+V zyCv>RTTM&9wIJtth-`ZtcKWnPEB6C=HK(-cVo@Ax2FBV(^mo)+=t^ZJJ3U9TeS^DI z*PFcz$XtlI@Pyo3XD)4H=;W3GE0>2_czU#HO0HsSD&lE#JlKm^AAe7*Kov z{e(BYCm}d$uzQ#8v_btn4#^>+w>{Xp{K)9dCdJ8kn zcbN4S37`nW%@p_@PC{n18qH;Q1@)%+hWckvar#C&^O6Q+x{KJ&hy}edIl`8?@cu#q zI7GOrpVo_b^w&*!v|G^o>7~+6`nen!r?jS!PiUV2by;;xnh+DA>}KjlDNnDh8p+k% zhik+9gd8|kluzVLy0Oj#cs)(@K48mR8@jS7l^atWZdO8#JiSGWKv89OHrJ1h-UrN_ zpwyL0I;-eLQ&)KUF6aw3ox3yfeWo= zMi}#I8HCKl6Ob{1bv#9W!Q{(doRH=^4;Dolb|J#`ZHT>~^QsD4>>lbdpt*dYE1Agt z!}NGfVN8v1j1hVM14_Mi#be@fnwt-O*e%NK49*RvDt(}3x#Rzlkq*<~J|QRSiR^v# z!>)%%0M#Mv2h{J8x^-z~^KtHKUU3VqR4Us^{WeMJ6oqYoLtk2peajD!)xA(tf6(1K zq!N&C9jNu@i+a<9u)q>##uaMjdW&%v)L8_k@FeTUfUO#D=wsYcTQ#Krjm?d%DJ-3` z7uLjnb(zM1T5Qkihkn9jn%}PK|F$-KIjSS}3#Oj&Ui4<4fa>m>Au5ZdPVCX0hBBq# z_!GKqHktl}R~gCfh8%h-mn&OW-Lga05uh_9{eX@syFA(W9`q$3rVe(W9==08M5s9D zW!DQbz&StI4`?R}vA!#0oPDL~+sm!*e}mr8AdJ<8?4|X=7SkKD&p>LY%|g%Da-YQy zkdcDySn_J_%M=87mMFT|-Wqz|w zQbWlP(lzn?Bf6Lpek1)!h;>ffw-?@w0A9#EV&l{dP1p?QVAcSgsz7CJn9r_#F_87L zAu}`Jp*aqmSfT`E!1#vTQy~?mrYn=U1Z1EDyH5QDeIb=>=+kpbcUr{&GH;-{wjsGI z+_~n9Xa*2V_5-^66{@{tmGRah1LCW4lLhAc4qc(N#8$S__CvO#g!_TGZ!x0A74q0g zOB4$mRSsyTqv$B&(x+?u~yV}YZ zr|Jht0l;79py7G>vg4)tw_+QcA}}41kipBNQ?XdenzvI{gmE=s1^1Tz_^-4 z&S#aiX$0j+{YHLuFKKyMLa;S~s0YNjNWIv3NFxEmzUT*x-H#@{Cn7UPD)xXL<-Y6U zN$=uj*pFx>(mE?MU4`7h$l9={bkVPQGWUyg;~?yePKf;jEc+)tyL3ue>Ab*vmN9-STYR#M~pjn_m7`IM!Ht+N#qaN(ZXj4My0k zaPoEfyBqz4bYG!%?5DD^LQ5InZoBDrODfgJQw_Rq*l_9-X*VE!vnvq+n#T>oNr6q& za#~HVcu&N~%gX~Nk>rL3n0@a=!3Sh8FFTt}_1U0D+6%HhOkxKKaO+8{CAIX8+~fn1 z;YdZ>N)50Fk=wD)4OSGDakz^yoVYF#p6v2a;7^b%JrG8gHa5?e`7Pg@l=}svNoQql zvg0O+Ie?tlW^iDI6}t8+6-_43CIFXC_C;UNF}A9-M5N;;5wNoO3A026wUZSQS9Ypf zrKeZd(GPT>rLgprDd1F&Pu-+9aqmA6a zrCgwEZKR`COFH$;fVQZg5#ImE{!Gnvj<2eD<6mMk_*K{es|qibO#C71Q6wR$9t$-e zrXrK-D_?r^ft5K~rQ=~%*^;6>TQfMw?9S%W9j!c}>Rb&w0@ z37B?w!RWRi6|f&0*<-Bwp(j|TYN^Gfm1$uv?@?~P zcybSRmr`ZFU}Af%tyJu$>~1lR>OLI(6KuAz={`%^u&)3M=?(Evk?yUXm2T-8V9kd8 zg6QU!;;3p%ExV6|!`?+^=uem`0F|;Sd$vQ_@ZIW%=i$DDzBh8fu@L2;%c+EK9dfaLCgTsr+>rlr96Hr`#fMr zR%NI1V2rbG6S{Tj2C+v%LS^T4gcC$gNSh;XXiZ{CaE1n)Sizq%AcLMj#cf!2_mNe4 zxjo*e@B_8z`YyF(-YCzCv|V;#ma7Nqxw-U>Nvv$2Str2lH?kiPM?hgzuX2C7?#9T6 zkIH>QZA%9PWzP+l3^??@y>*3I*9*-)2!?~hTupjC8r&zO&N>=jnerWBzq7lEt7Vdk zg}ez5X15kqc5X*?dx{p6z3?tC+@Py)?Dm>*fRp;zAvX6ic_aG?b!DKAm18p79+Ut+ zm;L9zm^isXGKK9-Q}|4rTg%y!gsqeNfNp`8y4inon%VeNSlNLQH_!vtQpd<4&IKR> zGAr|jPDQF(?Fw`!)d(=5FQnT6t^S>4r^U!8+IzTNR=q*J9x`<%^ynLZ;1VaannRqq5+4#adLrKbevXDDvqC-aKWz8E`tM4sDVY@{lVbgNLn|)S z86kVBqBS6m<^^3aHQ#ndxSmFUC$pTD=nFd3V3$^B$WlKLqvaXWZ!=o^-B35*^^xPm;0qTF#LNRPrv>Tt^ z(04U+>rq79PI#|Nib-rFq zj}~%P2t5QT%Kh{(cjCeTmkS8MMGE~1byuS3t}WdZ;HgmAEiCAT7<}!AxmMSb%ICZY z0r7L+unW>_3Yn^{&rPYgAZSg0LT8MnQv1vopHy!Z$Z#RhLg?s$W@XI=PVYs)aF2C- zAXmBb<<&+xiQNiPo9@AE>Dh&WX0ttQY9lGrzBJ`(c0#9~$mDHb+~QgFUVa~>V{b^x7AWyi*cgVo-uTIa3mOa-76NXTtL@=7MyX%@2yDo zyE7OVZ}9x*518EDWHp@!GwlUAiK}X!v^JR@&86EV zpl75W0P}<&?jD4SO{nZ_bYUEt2FHb$;^l@>L=}rL6VW8v%vxSz0)T-ia2~{4PzWEKip1MSP#WT##5i0tC zAC4-VH)~-sE94-AfYic372D8JB6F!Tequ^0!at}`3O|q;3N!A%g(*2Rug=?F%nRAb z`4GdlVaELC%jP$6Plzpped?9;Cez0ALXO%@M9ZBuMjZ$Pn%&+le1|O@8+TQ)zkoZV zRU_Y#j)cVVKK(S6%z(<)Nx4JnlW+zYl!uMWMe-@0C-gCOse5M2U0DQljhUi9VM_DY zc%VpcX?o<+Yym26!JrUp-^O*Do1Y@LhS|Q2 zfSFGGI$<>PZNXuuQ-j@;RT1}u*+K|)Ocp8YVpbnm3N)b$e&|mCX$qC@g(OkNmQO7| zVO6D8%g%Vl%@{a6=+11j0rnFFq}zByx7SMT=k&z*J^`p}Y+%GK=nxj~4S&9$bG?uN zZ-EH=0o^_0H;3Ep0AMeXm)pGpHyCT}WdKW;xTuU5Gub&F>kV?>8nLnbRV5>P?^Uhl zC!|Sm;LfYm%RZ;r`;=F5;2-I(f2kVTDq74a3Z#b)@rlSmZi8Jp;+2fS9;GF#HcZq% z_Kta}dP%lfd{AEFMn9p|KDlXja!-M-k+CA<7px{Oo2UeVL&!IE8H|(eM zsXa_zQ^U8DlJ59=A%|=*&xHe!>AVQY#l-4;Kpk>V!j2|1K2PCxqGN%i&^r#Hc|TB< z<}GvstbQi(geKW@(e)M`1d-hY;P!=m!^S3CrC!_>K65M?K|x+npIO*r(KIFs$l}7RiOCl;__XFpcvG)9J~+O4CgONsCwhlj9raV|Lx% z53q!P+5I*^?gM(ybf`VAifyt#hCLqr8#ZIyVX5l1MzGV7J`jpwBCuoDj8UA1)OzPc zuJjW+P2p+fnk?wLO9n*RMv42!0TZ;TEi@#%R|2p;%0A#+gYi9g9nm)QjA;=rVZweu z*TSUEd=CFyGT|r83q&o>(@I&_;gVdd3IP>-M>d04Rvy7i_R$jT+F)iH-ILH4Iy5p#uIw`H}24gxCRr&?|)K+Wv|-3lLSdljCb_94 z3yiQ&J3v3Oy`hd6yqejM9b`a2NexMe}dW#$8RG$yhXXV-`$;|a15^qe2-fpX_nJU(f|Zse8sL*GUo(=T7$0*$|qf5G?ziL~_p}0e!#Hsg)3{6sZzu`za))H{O6X)dR$k@<(RIN5&5Uq!#Y@r*$nXg61Ga#dQ_4;& zER`Q);HmHnMlp{>N}bsS=%$-8!xV@833Ih9$((7J5od{d{n8!I$C8PzhgNsb<(N&e z9!#np5Pv`_{-5mZ8v;zL9IH4Y)-%nE7*)lOwD*rbMgc0)?00l{4Z@`kuF zQfF8Ky|s%gE-P)rev3K|yMF$tUR`V|QT+*jQBPp!zNVE@hA0M*17SZP28Y{4ue*l5 zGs=K?o8;4m=mx~rNS$F1x|^}=IZJo*hKzEgVuo5uRw1#SJY~925;~U)yJlVHyivj` zRjJrrqAn1*F0|^JBB>whMU!u66Cy5M=BQC&Ym)cxh82b*1H0!Imm=#P<5A@a@rPxf z;dEz14ajWA9VYf%(Cql7((@Vx?CFEC7T8l`56l~73R||w!a&i=2O(~84f#Wy0Ew)7Ofn@(l64o9=^Owqkz%HC7^<<{mS zn?5npE*M!(_)8t*%$g!Itp;Qw=LPd58tX)J-7d?U@WK8ctx(ktsOKRSueHjw!MHns_Np29n- zAJD!SA}5&3?L%t`uzcJv@`MbwrPjV>vx?Zc3c20NQW(u#$X9dxstWh63DQF8@$j{oHqlIwqYXwsU>&R zUg17<47<;|=HmynM|4ek66#Hg;F(8#fM)PtT&@bvTRt`k`%cF%jmg}m&=V*MVnM0w z&QlwJF$?{G{nUTs$svxFTiEdgBkqFz*i;@WO{KeXXl8m(zqS-lGhk;^qNlWVkS;1|aOR#&$4TvX9+zlhjgEh(?r=QXtQ?Ls22`O`B zA){#=VYzyYp-;cWk6L<4Ak0gXZ$|{gCWlIYKu4ic*|RyattT2d8#2P5@Vh2yT>;7G zG|X2$xnR<%y$^LMR(t!ZE(ut$BFf(htbfmI_<9 z%Q7k28r0$O9VT{~tJS#uQ0Gup1}moYyt#UV8VgcJFV&FNoUxdM{-@XDnLJx6><852HD7Ac zp|^Ukxt$AEw|?8rgH5Van#At`9b(_1x+i5$@XAhr0}Be74M0yg)U<`z(gx7Am;EQG zyCk(|?40?nmGM#FOavcLCrwpbADLH5(c-f-THq58;e$f9>Uq3UTGEXX7xlyXSmlaFtwakK)_$vq@S>#rkSr6ip%5k8&u4+&;z>M!JfEr z=v^2fE!`v+TeKm%X_`>oqjAeFI-zJliXZv`Y0y%~Lx)aRK>!W9;x>$K4(+9mn@fYI z-WZT3_l9&3P#OA9&2=}60orIX=0Hi86|TAduR8`{j?smC!xVy-c}pd|Q%DqUK4vyj zqz9xuKwbOTpwmGcz(%aFZn?qy<1iU8tFI@dH-hTi z#OO}x8i0w4G8;Cj;r0OMWQ=QrY|oAJMaCS^MSTaq%g&|#5s+7Sr#c2sJ|(3tLO=4+ z6NI;X+z{)6bT%nZk*1{)!2Da-Z5ubpG=*>`0LU1ZEeKdPdc#R+DvXO2ql}9S4!0}( zf%4P_G_1_Z#m43u>*nHujck!}jBp$bYY3_kK=w7EPY55>Umc=Z{gB2RKB7IPXARp>>+uIag; zdmV(+nkj9j8>~EdGO}N=u{E()yyaYG$2tL-L3JS4in$=}U4$)9*F%y9jNAQyl!u)% z)ae)rp!*Jchp-oH5wuzS$46Q~^AMHupBB*xF$*Sjrt}!`uB>ow{tgp6hxEy2y`2eY z&RG>5oj(v`6lF74G0d%69=#9u37ZYn-(hb$Qvn=`C)FIMO6&owcjvtWjfF;{7oTP=o3bbR*|o6{ut7lpQPQLC*?*z?7!<09Ur_U}*M9tCjhL zE$d4(PA1$vtHPHyY$`1st@D~h%i_5KE&BuJMg^$U>PctKwYPbwOST|D$50khTEJT# zCfj;~&tyNLo-7>+-SMQKB=}At%{@;et&9yY8&yY*A6>-Zx zpHO!CP`YWAfxQkN`#%wPhovga?szv*zfN~PUCX}*tg}hEk1cXh7IqI|MEVJ-x%xF* z8EYc}DJGQJu)5WYa%;}$uBF6_!j*~i16FtY*yj6xRuX))nL527v9%ZZHf?K!dtL?y za9N)NCS7!HE1_CCoOCKqRJlV}bVp*w{MCj#k=@+IVO!1kh6`{e*N`P`~$%;arDK05&V^cC&XV z@_mP@{^@{$p%uN9+!u^$t_Vw=E`a{joN{4qrqK^bHZZCi*A;te0i?%^4zW;oONo8Jaft}Acnf8*-=1}A+azIQq#H%R1YQum}hb*YQVIy}6Yd!I&v`n}4 zkmd_&auCMO?P;3ssWw2b1>p~rRbptfXoWD$rOcCq7mQ{;Dj=1r*>q+JlzEOglfDJ-}VOk6MCjyYJFCm zhEC?L=ZG(ulyb9extA`!|N&TX_ObtJ})Mo zXQ4w2mW=5oS9eHKfp}n~%&Bloi7th4qXAjidqIpAM3>0Qombuopwlz*1tV+i78q|4 z8<)l6^b`^0W}>W2Yc80mJ)o;QEK|2%@t`Or#sWFDBHSBRmX)R3S*o_1 z1qpCLO7;_$I0gVRa~N=YO?0?7Y-CLn)ERHfp0D-Arx#4!a2G-s(XfzKMK>*26`$}I z=8|%h+M$R6ftJny~16&mLtq|Zb0vce!^1egQQ{z%kGfO z0Ox#&eL`B5)V>ujUAyAdXk_;rI?RJgtsY%83~rgjW~thSRgE52YTG7s@=c7FBli>K zk$W%HT(aGA1NUD?W^iAyd2h>vTECgHaN!Odulxl)Z{U~bR1tIyBmuOgl;jQiEoMBW zlB}llKi8Gr&4;HYeZ$l;=ZnlU=80gpl9GF}lb1h0XQh;muwlpbFd$Amu{UgNJ7cKS z-LkumNI9ulvcFV0#f-LFD8D|pJ{kJ8~tsv>#(XBc2 zfx|qy+oYgpGSn9IfSSMSN)gCHoboo#0ZpZS0yKKP5o{i_k(4hb51%kg@$NfaP16xM z>|ImBDUL^9bo(bw=!nz2R$Oyi(6IM z(i!bs2??g}hWY?3dPw@Hrwr8_4GgeiKOmYxrStH<)>NenXQkvP_z_tw6I8Je>W+$O zyJg?7ijfOa@kz_>>aGFwHc|WuZ>fZxOGiB$|Hu2Va+9_J^lb)EQ$l}2_gjQo6X3?S z-~Slkc3)z9h2$O5s)TrH{T#z6aMlRqejqNvRMZDw9Oj|pfJgQLBiie+hkN6u>reEG zeSaiVZid--JUsE@;-6Q-vf~NklmIK~8)71*lDx+ML!lbLoJrUZNbQ39AN69`nVB(w zo*?X8D|~~l;RY`0w*c7(IxAARbyqr$D4Vs3?^w;m=*UK(?;rgDEnC^E98PnU|8#PN z$iPTjFq%7N=*OIVAa>S*Z&b^KbyzZ^%ss+z?eu*qNMsyRqX0 zsLBI!ZXWKsTrfKg64+EB*;HBlk3^z|lR~t1Y!zwu+>OSJ`5drDsxah%JR={tr{49a zVeg$tOtu}+4iswrDpy3(C=%dBf&^Ibgb%m<8qw+2!u^D`8=2)=>=yHMZwU7V>KoJ{1>(&Pd-Bb#5fT1C zp1G76yIE%LR3qIGN}oy~0n(avpsVkrhr6Q3DOgRKgqD|3W2; z%gzC;22iPpo%2}I2fDjJxVT&X@jYOEpzKtk-6~8TQBNz}LtF+}_SEtx+I3!DoDOWO9T$0IBOrh?iRs!X}P=X7rQ~sg-9EyGown{_@;z=uL3WfmCS;_ zYtR@ij3WhNfHjG&(mGZrM7Tpy40X+A>>jAEZ1>3!kY|BmKOqWI+MQRCjGJHp{fMdntsWar$4$;FoPGi)gV`6H zH){`T-{czspStgFNXh;K)l0S-U5}K2_|&k!;CF=8`%@e}hSE)Oq2e~A#}wA(kxp?C z;K|FdKjEdix-b>TU^_yS6jlRupzKF2lsBXX^ETnEFiIy2Vb3tRP-z?LK$%^wtFkA+ zd%h$6fQ$%X_uAVk$GS_Di?tv&%P`P$J&_-SPdGM!v|um|un9mv;Z7;SsTxi{{NV>P zuTkcoX1Y!` zE&TyrdQU~3J_6_?L5IVQQLC;E>k+6Z<_Zyp%>f|C+#<*+-Bk{!cm>^np^mPe%G;EnEB9|E|`1a_yAp3n;EhTg@VQYRo^ zXR^p*xZo|@mF^Yvh~u7XIu7fU*F-k}JNZV;JjpzMw9K?j?%1}k4)+sUy`fTZ`Z3?n zG9U})d0k80Hl$t#)(3=c1AxvzQ0YHGZ}8sitgWgY%`5C$zzg0IT4n5jpnGb!Dfgxx z1G0k7fS-A>J7f|it5;dYWEwbH=k=-fQ>y+>#g+7ZXGnh_QA&v z$i|USTP25%CrLAFPU|rJ!CzgoHS&qL zK1SKA#`sFQk#QzW#|bU*Uhv#p8hUrDhh1qKYIH~?nKA56pcpVs>3}v|sU5^v8SZ)MkuhZ(Ev$LKG@t*{H; zG&d=nVZ$+?UhQ$Syg;8fdJ>%Bb~Z)gSUj1-A#=jd<3_tDQ63i z0oj_s*WD3xgKpLU&QsFTF>VH6mHpfaQJuiLQII+0rnJ9S$imPA8QIa|q}B#e$p2!7 z3CP^hPcWLz2*X*1sM6QI-|$K(DgR)7P^-gmh}J^N4bbf}fQ&9IeIWG@>U5~mwHuC~ zhW>=O(;Xefs=)rcgRzW%-p~mKgv|x3((QQ&(3vQVxPe~5@3(1TD=`=;0%*%k+W~h{ z%l^T$31sLu{dUvt<{1KV)RE7f&_0(sg*)5$u20HNEAw+e#cilN3f$Vc$0z~iejuN^ zkVd<%Y<6r%n7%Wz-M}qo zJJjl@4CZXCx>h+4yhQZ_)^Y#to;1Z(xN|K*(QF|s7GLhrOsY*sCx4hvNUq>tP*p4Y)bn6FnXAS+>0nIe1w2zjk&E5ce9g}@PyGW_4>bexB z?ymC6ZfAc%Cmn%viVC`04y8LZdqbboklNV+=x#?fp~QCQazr0auQfy}uVq)~_3#lH{6kxIu9(pYWfj-g|eyk~7-=nK+i$lkgSx9+R+ zZDqb82EffWT1OM2rw?zg*hI4fCXq991l7IAFzeZx44}ze(5o$k^%kLf@kV5~$sW+j zeW-Isf$TN}&3~J$cj?`sRoOnKt%`j-I&AiLwI2s$^sX?sK{lcBnq_YhJRmtJe z*&hJ|qg$Hrqkv?0PcYg!TU5Ku#_HnK?H6L5Lgq0LEZ5qw2ykeGuoK#WNsVfdtxVuy z=ANb-a-xyB;>G)mo| zAd)&u09=q~6(GQcWY|wgLgh}&kZe8^;3%sw(iXJ)AzfP)C&I;}`2krTmx`j*{F8PC z#@HyEN_j`&okzi-`Y1AFo4Cv;WdD-XT?FpPWTZgP*4pI5Rbpp8h<-x7MyBY;M`iAU zDX9sN9k}R$xTtck>hW9e-UB+(2ti(Gli*DRhNAgYkT|54zL?j|q;QXb9+rwuIV zx}MZY3YOd+nE=fa-#VaM%t(s6t15j4etA;^_Kf75rMF%YI|&~zTuj?Hy3WE6kjZwb zvoPSQR}z|gS71M&>sGKY%VI{Q>ilwv5q6;BE|{t@U5}kilyhmg+3FyawWX%}3FucK z)o)O;jC6+m%mdJ-rCkeiD5KOEBx2HgK43IG~HugaBIl86Ok{;o%#fJNVIJE(<*ML;BjCyTx;>FU;y?bI39rw>M<7 zXsBDd-ZAX%|C0R)$86Awnyt~5oQm@r)st}xcG7Nkm?F&=s?AukQ{g9cm{r3Z&jSGJSlZr?tg{ON>n<|WAcqgsp`&0l8Z&oeFQCL zkL?ps$v5DfValGfp65SqL@jsX{L7zIDOHQaV?0HvyGCuIJCP!AzA{s$d}?9_>{KcP$Z z5w@~PYhwVeTiF+ka*m*+uGZ%|YjIV%qnqN@#7iS!{^YKqreumZ)l^4tsQIv?k1|jB z`L?qGx>o#NFp9BlMXDFJO}3fm22AhygziKLbyY_9ITL_C(?ZxVAM=KMm|58Ur$Jc|(f_YM(8WU8j%$YKhWLXz_B2qEmm+v#etP4fFy3 z33ONkwXFcUhd~L*O&D+J^}bMNIKfzp4h~G+iL?tgBOG!;U4`(kYdDw+`n}}S2_uUe z23H|8qp~f}LO3AVHNsjkeO%fA^9A+`rWD*gOQ^H9!`_r{_5->igs@JSD2{%$0Ts7l zKSo~()f2EIeaz(8Tqm-mZx~hQOt;cY9;fj@nlKArbX7rfY4e*$SpBnmx^+4=DhuwV85Ou+ZJBP6zPX#W&jNj&80Dv~qOG7)-}ZE_#_VS6RJaeMrxg zsw=~s_Rrkz_CTfSIJ9yMb8Sm*qA~6rGHlTo^UFEsjOOldGJuw6LJsKTQc!>Ge2CR0 zz#)R^)(8i-MD0>(a@!O+H);UwKI~8EMa5Ey)k1NzL)jzlg4Hd$%xX?Xe=`5lZFwW6 zrzG}b3CP}VkpNBZ8}0&XCb}>TH^;p){lK!N{XYR7EFt;@BkfE77b?By#INnip&i(L zAqV<~wR;?}8g7;XBxgne?kB9d=KG7e)_^*uCaxdk(^brCo`B6zsJhlbEKisZShb`+ z)FvRQ^gak>lM9J`WlGuI0S=uR1so`J;bzrf?9~%S+J}=J=+d#0?79O4I1Yb9FV^$p zQ}tNFs(EK8P{ds@v3+YtVPigE*K;JmVFJ<*I8H8;n@x)EK*61(U2-3=)tua$gzKmz z;Z=N4leshHmPwv}TaDklG(QNS)+hD>-LoMz!#uOaCdkbUx}`rs@(?PqmTC!b#kaaG z*i6%Ea=T)uMv~CvvOAS!=Q>*xcEQvpM|+h%WDl^zy;0)&#-DL%>%-huq4f&)6M7&W zc6NiTR#3MmHyk0{x5T6~;bCmA)(3L0#Yp#VzXaHCIdilis$s`kS?0za>8+bwky-X9 z9P8lBO?CI7R;2T^WKw#;#CAKf)RofF)!kI;@`A~8_SjXn8xkyp^i*&^q3=jb?br`# zc7v2~Eba}pJngo;wqsd`PgX7rpf#w;39ZLeE=*=saUIwIuepK!f{C5>4Yi{f7QlQ^ z7j~DNZ1DuxyLgDy7Jr9`1KJ0BBDK{=dIL856WVe(mq|TRJL3mqCm*OZ`(KZE)^>4( zC@_ZZ1XLkd8R$87N3Pxr0eODr4Kq|H)nljFe6BM`0C{cf3r1MF3UYiZgFD@mN%4?Q z*vTJooEi7G-Vy6w(Tr49Hj|VxlPfCn z6JoA#Sgl0p6;~5pCUNi3jD<=~8g>V=?gyyk2fF1)nYsR3VH$yEkTc2zjoXf0C#2fU3CL6 zK+)t0Z^=}ZY$ERG*0Qm8QV{F|B(X#s5Aa!hmbJmY*@pKs0DP!*>l>`Vs%xA z%sr;6@q%8TFO~994OUyZt;m3wpTN)u`hBQ#{}=48vKTNsd{0n%h{*o^@vEZf8RH0lgiO*z*P~^iL};0gNGJ2Zlb-8=u3z zl=;@!k*~8Td%!GQdQ7~5&Sn5k-Zw$FU};= z;;pv_OcR-<5~xm{*=C&KE=-GB(8@%Mn}H?l4t!{!v*YB1_9xhuZuE+{F>E6|W(xKD zDS18J)l~YHEdg;3_|OA=SUS*pqmPNw*CTdQ_yClFlxaU?m%Y0-sh_Vl=_v-7%y-1h9GnW~V;2TazJA#sPODs@S$Z+2GH z4n9tIPfzj#szajNuV%!Sm+Sb^>jI@Xp$3iGTh^=$8DN8@K0D`egN{>yGXX>MfRBJ| zS|(8^ED=|(Ig}|;xG5jge8FUxo}seF8bG(jQ%yvqN9?H+)7-`q!*_?#?Q7V{ zh)U0z7x80uVRy;of?oC_oC3A-OaMy{D04w{bEgco2lla)1UTX+z}9r4SW#%5&Y?51 z0|%p_%m?(T8>wS#W?Ry7yzdajfHqvHGaRHh(%qwsBl`g|VGj%U#Kw|Klm-4CCz)s%cnX+lrwuAN*5LR(~eT*ty;U$XOSUPaXI`hrQLXIiDU z52KHxl#HHzmIuV4v6ABbw$ef#S32`Tci1meiEwad`V4Y=8Sjcwu@jB~qDQadZfw@Z z&_jg%4pC) z_cOJ?YxqQ}EDl*AzmRJWNM+#WXqd8z4!QmNjhY|dqXMN~oxao2-eE*#EX;RFXS46y zp*I0>Fkt@?&THy?JVS4EOB(Mm>F~~aHSZ24*^^3lZJUk**$C-drt5{QdtztPl00F3 zaPRM|<{5HQlIcHbJay@TN$4l8Bf{LWPzed|2U6A70x`XZG6E* z{?mqdwVrGhwLOG}+14)(bPOgXA z9-2*lBvavbnlBVd)9*vHqN%kDi+4y=3~uf7f87UVfR$g-Hq1A4VOljiyMdcgBkL=K zvY$}@24Q0)^!1x76r=1HL^ojk#pDR0QZ#9jC#b_VFGc!QXND+sY;=^+KfYi-0;I{9 z*LYgZ)dvfB0ZsUbIMgsq0At!`iss@d&eX_&)|GhDtpGQF>cbaU&~kE>|&t z4G(a{qYILMkhcnpnlxQGk_M(yDC>l5Uy({j+HZO59s#+BO!fn|mv@?A*qgD=)kiwl z3>kaiP4TjOSsKT5U9q*4G>TLTOgFvm50H6X5Ba*VYkaa$r-gv{d2gr_4;7uu?i+wg zr(GnUt#TLi9ulDbQQ3cE1PsVD9zEm%9n?x)+}v52=o(OaTS`r71NHQPduU}DgK@XQ z{Xi`ESJWDZWqZNJeL{N(Wv}Yzg3C=fFyiK0***mObXV1j(H43%mVc@1HfN0E+O-5`j_5b35PalMH~)+caSg_w5BQf;OLP~JbF6zJb}6OtW* zz-*WQhCU()b@q=y_v#G;sL9cpk;@%wEAh~4AYe~^5I_@uBP$EEvHmQHByXVP z4V_Lhbg}zH`UEKZ0ZESs3}nw3pGOkuv&B>*U%)$%79A1n@v&G<9+^*oerln@3jGvW z#!nq`zm0_py#;wf^AM&QSrf{|T?Xjy6^6c`gJM*m)=nLB+9)Xs`|ks$ty=>}b<={c zOjp_}sbfXJ9}H=}_Jp2Ok-AHP*)>bFS0Pb7S^*aP)Io&WIY5;6NV)+?Rr(2O2vV6L zX<9EME7(18H0%y-2yh#f?7ATr{LpU(Vlm3@jXwtHM!%xzTFPmKqA(;v#_ALjq#z z=c20(Sx+>D?BAe4O?+K=He`@xiG4uKhg1gG!*0c9k3|}!i=9u{O>SO3Fznq2lhp~8 z;jksK7xac2;U!&Hob3d5Q%Tzmx)vH$|JII6cOIS122eXmk~$8SzxxedP62e_5S8`8FZVc(_CSGfUjB0A6v|N zFWJu&SGtfJqNf5SN%#@X5tm`$?VB`E4``jGYwVPzv7-d9|5VmO(aEc*Wu`nUJG+3| zsr%&l0frTdVE><%npe?U%SJ9Kl_ zWm(ZqF7*`^PH*Q^AT;C9upXCQ_A+yB$RMCEZe!4&(1UJJ>&M#Fb*Y6Xw2^j)D2D%G z4Rb1~*}@Eteynq1D*lG9CpvSL=}qY!0(|Qw{{&MazQ1d>u;^zO?|PKEc!$x=%lD=3 zUi(8|jR3ZI%Kn1Mm^q9s-SIeMSLekZa6X1ItQ<@Yus@*w7*O3$SY=oUNs-#;rO#Es?)vVe0F%*>Azh(gZ+Z} zm>UM5S`(TtU#$Xtb&-jz12$i{cqx?^daXiMjgfvp_k7vTwlZFqk%nh=B*_~_H=h@> zu8&vex_SaEJlPNU$4!JtpMHxpb{5z*eAzFU*x0;CCsvc{kzCTAIX&5*aP9Nx(JAS6 zX8dGe@P^tqLbq^-R+Iz7yy&uFRWoBqP^}};T6r~8;XYt^ch%)2Q35>Gh+Y>=+#DOX zF18P_0i}r3^S_Yukd(ueCwcFR1Lc?@#tUYp2r9A6Lh@esi2&yc9}vwj=XL^AIc)y0 zx30P^H0%d-^bY&f7QSBTY>q_O0*U!w>!HuWwk*>T5;uyFN{#FdCY7vt23ft?Jf+MHgQ0kfYkObsMQX@3x-tYfLVsoHQ1*4i5c&U1)v7xt8 z*NcB4n;XpIuR=~C_`H&$H_C^mVmTk)JoKE2>6j8aVCH$GE;Hm9xXF&V6Gm;f8dP|$ zpQ8i9`l!kU(ac~J<%dDwVkgJx4QbnDf5MK7*W+?#L+KtZO&%?n*!l+cte3r|dt=zGh^cNs*E>G{{;2^pmqf!?7?)`@kPGo0acIcm- zq3~iO*)JHXn>i7NzdzEmexWB{=_jP!!~V_o$R;$MHvx3%NeI?WzYUL0$gjbh#Z66pnU;wM$pim zNG5;QH)gKJYbB!#46+X&ww;#*q<; z^~qZP8%47ie$%xoSHIO~F^Sq_Q1#R+HxTHTwD%;S<04M3RM>`L&jBge8E#bXoPZ;s zHS0jy1!x}~Wm666L^_i8+b@^`@TTa>&YndbXx%>g15I~eG|M@#YurTj?x5XU6J$T2 zt%2BUhQJB16i|AV8zL?ZbJ5!P32<{xKNk7{QyMJJr7*Pu5$y{aa-Xmj=@WHLCv+$F zFoX>4pOAE7I6I)2ZKMX+C@cfrp*O_Sg!(;(2)Z3R0da5dFtKMk>hBB@m_=+pxt6K) z1I7cT;?2|SEDJR!a!n%aC#(JW(y@dmE+_s*(w}U9%+Zt@6?jyf}P~5#C zX=XOLTA|I~tr9Z7pxoG5A1wDCh6r}v#=FZN(8?-x#^u}}7G1bnE7CS%HwM>%n1R^9`kw~OESQe=8_szrIx7nkx_5&R z-|p-uSPSbyQQ4;-v)7jWg6wbPzNpUd%-bafBwPOAI)wZ{ZZ6}?t%dOZ?c6d?IYrh5 z6F29w4+;&eJxhYZ9Nf4N`%D@60=2Y$%q&(g0o&EuO zjwcg9uOj;cdZ0Sr@)9x<t-gqR!ty#Vwc{a~T_VCLZ=U#}3=WeIl#?iIZlj`gWHAbPybV!o` zv)rQ})LZF=Uv{!UvbgNdofzPp2J8pSbsxrF?5>8&PSRxuCia4E@NnyDE3S#i=e*cK z_6H<`*aHXq7rm*<5TH>qKxint-YYz@Z^qv3)!n!48Tgr zeZm%k#{etb$C+Tya+&N_-3xx$sDSOoq0jzkXUdg+LNbKInm#Kw i-ff#rMWOrm~Ssg`tq$+ zyL>lOagLj1KcTW*yc%6xSD$_#WP%LOS;;B=m3gH=z< zS=k57)qY+T(~3)uyVuWv$#D~QgF1Y`rHki2#VyPOx$PKQ$A@U@pvC}36)Jv0on9~c znPh%CGa=Tn!0mzg8|)UTwf__AX732SnR1{eVqG|`ZB$kk1rV)exS_(?CMY>c&OW|3 z(rS3QWZWRgzVu;0y6_kLYyE{f-J9J*0z4Yjjo&^s2}jnS5C=5EhI%%=($R`TM@juN zAg<0Evc@8HI$!9{JP^PzGO-V+pNj)Tovn0VvAeMYBW_~HEA!jK?bNKYH5<4oPh@ja zbXyls#t#z5lUkJYdX|wY;T*4$JqrXR@_@byBegyNWOujYzBWfdQWq+i>h8=)6!FxlIda10 z*Lq$7MO$=PdV>9gP9f?@FHO9hiGaMwD0{_i=(qwZKa<$-cVBFs~V83V9e zjcbE)!78%d`FDd(Eep}8vTp&NZJLXf=?Q}>YxU9$n&^Ou?iLPJ@ob4OCgcG}cy25H z>wr@3ypOR_uP5#(PDN=J%5u#21Egw7-38=*Mg-(Z5@nNF8=@y(2k>fYUV>`?PFq!Z zz>r!V%gGzru9U1yf zOxSj0bFKnYoG}t~90lkLW{8Rv?<^gji7fJIcrMY02?>S4RSv~ZpccnzQ+U3e&P|NBftfH!nn0i zC)aU0HQoe_#|DhQF)&v^>ANiHnaCv|<6Qhg2Td1DAppmz#@F*e7XePCk`m{FHq_I@ z#7b?MI;0ajN6`V^9ewi*vc%3^GN8+i*N&`}{en63SY?QrbfG=WH!z zIip?(lG83;@YAuQky}FibM((o%0Dpl1)Z=UbgNS6?j}C<0465i?W7LW`gdLl6XpXt zWKNT26EWspq_5M{=5+ETrE{X(%|J%s!Zc5E8w&wk)vK@zMl)xIqRPdd zisb}s*`Lt)Bov(6Hmx%)o(!npus*cM-mA=S9RUl!(k~d@vLbHs+d!Ens&{KfsmufF z$I<{vS%rg9LhJ$%6H*r>GO)C!bHS9)Phe~WBoD4xRu$s1z#wO_(!#xwGRc$V(_`p* z{B>m59ANT2?I9f;BAko23|p(_8dYca${s;3Wt05-f7gbI$BOluUUQ^NKt`&_y+cyb z3i^ARECFr98kFW$V{_a$b9pJ$Ie_EbUaDuU#|zaGEo*?m)T&YyM%D%MrFflCr{9F# zNi=dGCi@2%B0ZM*f$gSg!|e?iKS6?}HnZV&KFj&lfD zJI2>*J{)RCnGK^`&PT!C$#2AQM}OkOCi@91eRg(1|Ck{qQ;4!(FtPI#6ZNh3ny%X= zU2tY5UhsDh?{FAz&3<>hU&Uv%KftjLYBMF-Jj7k74ZrFtjiJnfOH_;W2h0MCn=BAE%0SnFReCmnz2Qi&a|F9)PIhzpfL%(m zfm1A=##)pw#!43+caJ7Tqr9u09GH+K1~4r>&@A@l+@bl{t; zN@i&em)kb1i}8lJ7{Y#>#sWQ;tdQ`pYm67nujgry&IsY28-IK- zfmuV#GHTdQI3{MwkoP*BH1K)#m2KEXOQ-f6COuzLq3 z0?kWM#1C@*1Fd6>WS9QYjVy%wfL?zHwc|AGx!ujI*xKH(e!NQ(RmA{+pVP0A-P=HJ z@XBb}*=-VblxfauCXJ-|^Cx19V1zNx>91SmlkEqX`^3N3njp#Pzls<*DU7Ir&i2i9 zXg=OH^zl!;07iD8;uf5%&I!v^xXTcb8M+z+oMK{Aguz=9_?5ptV5X;1TM2Br@PSO1 zl*~$?zur(Ek=c8PqKKngkU$Tw^e5zWDxrZfbZ&5q>WPk+lPAoJJbY_b>!I5M{J32# zu&NEzElikN^YVimbWICbpMjp{4hK}pSoenQ z#n+ZsE;>|NPhH8LLSNA1yHaQ1C8N!GmPyR_6Z$5O-=Dgn<~Wkz?~PX(CvV9sFrEB z!d(5Z=d_#pZq*&uCRjt0?=FaYe{dU6t8~HXhP&UfNjnqasV_WuE?(qSi4usdLeonCr_ZrK-hriM5N zBNL2deSkPZQfCvMBPCCbk`V7ZF!Vr1#;WSRz*d9HTe7Qq7vyiq_cEPZv?H(tAH}l< z0`q}dWc1ex_OKB@?$tW11#rgZ4lQ!1<1|Q56{NeL$oI5t3=Be*O&d$=h--@?)6^D3 zU#oL`LRShZJcHF6vgt(Wl+Y@Yu&<+6+`yQx$4pY73?@p)yOEs)Ldho3?*}Sw!M_+C zrPJ@r?t+ta8fdEXfPRc}Y4y;S`qXQ8U<7qL29;JbdGUT76D%j#oflrvJN|^zTG7=&C<#^k4t`*Xp)hYrz=Ew@G}$JE z`Gk6puuscm=McqXLZ+a1NQA+CMG@wa=<4nJ?XdsKyv}`NPw2#2z1xtXx0rYzBjPR? z-R7K`J4mKfXm$KP&o^5tcZh9j&c0admYu<5J~!>t5lZX6zLv({` z!{)amdx-Tt25)~wthmEiOl zc1(GTX%al7Ycakc-GZ!O(5m}4r#B=}E0Mlovub;3xm5Zbdj2`ncdeTYnQ$CnUpdzE zuMPoG)i-I??10(WgXe!aKCYr78iz*q?EMW)^U(I__-{AKoO;4kYx(6rytn#DG9u*XKbukU;{2 zn9@&3K}encB%R9Ps8S5W9Y!}@dZ_chmdYBHfgNKO-JdWwhC`j1fiY3q0-tkrm0w>l zzs|^_GApaOL!5-n9B5}Y!yB}BQxFJi$z-51p;Z+>bG(5G2qowQ%HlzKN%iU$?=$s$(5?k31Xw*O|I|<9~t{f9+ zcCw$)4&_5ttHZ?@s9hWG1*@A&*id)55S%ih_nT>1o{*LS)orq)yI~a)2x&$44V#s= z_CGkq!|pH%`{eYA+EF+MH5tty%1XdAuLI^Z5>f5l?S8Z;dD&=7J)Z*JE8!nrZdJ*P z7{t^u`(bwh>w?+%FI=V~0U$n?dmkuu{9-cVasMAbSToi0MAb1wB+y^*Uf3UCY9ganNa-*k5b^1oSjX7|qEd-_Ud?v<>qe zy3R<54C>6tNvPLq=)>B4Kz@xB*nJ>jq%(Yx@D)!Hx;wpY&}`_2u0E6(hZ%0;>sk5O zo(q2OC^K8+?eHD63?8LvX*U_Y7qsax)Kk}OiCLf^Awe=sP3KGtYA(lBsP0)zMI6Jk zjwp-G{r-1``%jSBpI^ti^!My|HnX@8WiS1NqaCZo*l*Z9m#6d-c1ZOo>}cl_wKG1u z73>G>aIfyeuEFrAcY}WXAijue`uTZ;ZA5Q_*-7JMr8)2Ice@}qG**f18NZR;ucybq z(4|Oa|Lr`%=VKVc@59wZ(1GzzbU2=@cI z_=If7nKE}qXrxzW&jne*gQ&SEvYMB%8xnkDK3(I0mF2>LvT59`$;*yIIxxRp&|=D5 zVzJ{|m{1SOYakY~(^k|j6JxTy9ct8}j9b@{kW?w#xt-&h4*6UpzjfoHl22%m0_xoO$7X0}GJI;>vje(9B6SLd zGS<6tmI9x5K}hf|KH1}Ozn~l8p^mL)F7LzT0$rENB7wJ2rb6uw!Cu`($Wgi09(9D7b z;x^QY1x|=cua(i5gykaRV%_1C91X0Q$z}FvM}nD&M-5!FPPdW>Q?lPZ;gigGV-DJx z;Do9iAK=vLJYEQUyeqPc5tTjO)eY8|{J=7yo%D7jcf5Rn9D-B3c`{mMYN1`oi!wKe z1LYOyvg1~m_nzl7f!W`{h+A+v@#4@v5K7O1&ix7Xv) zIxA8!M~)XHAR9^3x^=c^jI8Vv)=8K*;}zHDo8}`@SgzZUW{|=1UoNKy8AzZtMUw-i z{N`~Xe$8%Kg_$6?n`dt@56?lJ@Fe?LL-w5nxepW{;cJ)P+?~{Wn<(sB;|23{9BrH~ zH8mOI;TIL{DJVZ&l(;rn701ij=kx8^^6kcF#@Ha+C8qpUA zyfHlH#3A#y32uKF_}>lwr8xuZg38UrM$7;m?gL`3{BfH=*uO`byJreRU+~h!Cct=X zHKANf8H{NVI~SA8D*_KlIr+836{O<>nn3>u`vK_*Qaf3e9SjArW0fqg5+)XC6+#aB%SZU={uH{U^U|Y(>|d)MKr;#_=b4?3NtTejx{^#iNbNKkC}6U@>devLi_<@BxJ{G^!IEMwkCW- zLU#8I-yz<*u!DqjLR=&?GjGUic2e7(WoOd$Tk~VVz9B79Y8Qj0V>wOW_hDxZ><(=Q zPR-(p!%l^O-6$&e9T94C!|F}Rs#za zw;?@I*d-z8bP_Q?sxA+N$|0_d`n(bec|4updi~oSGJFWhml-vJ#qT@4`vjSEOQouY z9SfG?Hexk~r!%hhE#ss*t>QU&AH%yt7vyF-yu^p zAw$KmVD;cgOgItpbDI7a#(4YbmU zsKihbH&u57EZWTlH8xn?F#ymheG?Y_36ZX_IUa!@n>BV$NipegOd!GejK`+@+zbAu zoj`RxYOO;O znC6l5k)B(PZ_pY@A+~b8e*gg2Kq$ZL?Om&JSn95CwrxBSbAFtW>2x#=mzLbjTkhPg zbHQw808TH$t!tI~a=XG$=phc+SG&st*nEwi9B$|EH)wSO8SbW;8s9*3SH*0#Mn5ii z%V*g=1^R^nAUe{FdoG%U8~{+c1EQSNPUfWR^^rj5jCN0`<0N&=>Sp)g->@rgLux_T znAr98TH&qChL`S>8P0ZpG5jz)nat=%l8_OF-yhJtLA@#l_lJbP8T4VtIeI``Sg5<( z#+xT0256l78+6_aq@z|lt{sUuI)Hii782r66Z$pB^?D7?QJB<|K>dYX3kzuvIl z!o!2w^#{q5uQ5#zbQK5DaCp_1-+C^#J>n;uAQU#O>Vy~ z?OPX~Y&0R>0k-ylZE~yp4KDjB{VRAM=%%%jyZZ^l@C~D8Hb|gXnc#DULME-iT=e;b z{XM&SrF&JN>?gELm;@PFmx>cBG+_LO?(Gk?jho#p_6^u$H105({k9{y1+Qa0bn;+A zdd>^FZvd+I=U178fk^OHYLvNPboP*(eMnV1M6S1!V;@k%N-K|FX60eaU>kj!b(2j(x z#z9TcgsX>&yrDrg)b4xN(7$8gl3*_1kQr8}Eo~0Lw@gO(M$znt5e(W8UEOTLjC0_x zGnRdTEy2xgSF%J|4D!btR#qFRuF?pfR)x14_5-#|d&i2>D0_r^bU54x#C4E5jyCK# z7bN61Sbx1?RPz>jspH<@d*T)O`_biq?hJrBw>l!u$iE3bEc1ZT%^0;*nqPC;QcT0* zTJ?N-K*WsyjYDL_hyt9-NyO+5qs5$*<+CoN!d`>@hU|WqI)gJGHcpJ|p{L8QPnf!! z7v?2v!Lc`3if|iiyFp?vLTuY)v8@9Syx-fg_f+4J4+yvEb zs^AC2tJYXU?XESfJqJJ)=JZnI?|IN0boolS9D*O3XK@F-1G2mrSxkQ{J%+4dA5Z3l zwskdKb1$c8CXnv0fr{JEP7j>e9rP-ft-`V&P*Vsys#X~`)kHh$CDJSI*Mcp!d5$sS zQWAOwVJC)xxCObBMPaky4)!mHJr{%Og`LoL<*%1AY19|8azH zNi4d2M$-cDl?fEVOdC>hZ-}~(H!O&#=1O*gL_#CWnLa%rorzY95h%AiMv^eD*8$tO zwrmft+kFyq)R&^E-C=q%`zV)iofNz72!F!g9gbZcoH7}^v8Frvs+f_19wiV`@MZT{ zoCyTBES3YhsTOKy+mPLW3by^reZmd_vxQ!|o*!AG4#Muz*FfgKJ_#a3wd&%v8Y#w+ zen6K!s1i&Q?D>7FA#>V7=^N6Qg?wb#TPsc%^Xmh06P42SK1$aMB7t~Q*iR_2(K5f? zVcONX%8u>cu%3x`!Hnz%~t3PZO&09^`)>b*=A?u%5iXIlpJ z1G>fsbrqs<-ub!G4(MeMP>s=5cp3}SLV4$Jc2w}Yx*k4RQ%0`@;+J0r9HgHxjePFd zls;}EFF=KT!~Pma7h$xfmBs#if2mM6sq=tOcUsnl0H+7-848 zd_DLHtjoPn6{CksoFG5>YyxMJs_6|zGwP2Zf9=XLa*6s+v8BRv{#r`mp7kk&^A|tQ zvy=Y#3H5uV;>xtlwMTx1of-B5Pl{4rrh=L<$P7lWkok+Nr=PDF;%Q~Ckj z2EzQ;J;7yn|1H1goO{GwFuyi_DRqyEo^A4TSQw?BP#2S&5hWVwx)LNbr!J1%kp366 z?VowMDGA0zqWOl=%=6{h{*%f=f&7UsR4>>HjblI^Phgr9S1o9gH`3c>SDz&dk;a|IBJioV0KEO2d*~uwg zFT}Mh8{!?J8qk@jh9`>S_O~@8a1Qx|4*ce;b_=>ApvrY#d%=9mS0kX(&ny+E9H^qf zuI4AK&+@Nh3+!JVyFDQ6uMhaE!=9G2(tpj@Dtx14(}UsaIcspPwxklg_fFXd^jd$| z=WrYJA7dohuzE-Nt=Ct{OaWIBPf?TLjb3s;ps|#ylC7L8wn8ECqXbMGrQWb3sO-k{ z9OHE4?hws{d>U$f1rpp+Xaa7g^aFZN1XN!gQgtFs?%sl(dqbWu)QMir)#I@H=uduc zr+C3HyE@V{ut3&>32tcUgySpB41};=8jJH#Wp5P4JPL}a-&^rIQ_eMHej-&MB?# zJ46~M+6?ZuRQmg`&hp(*6#5f-ji2nZ%@%RRoDhich59M?o576NJh~YXMwNJO{Puub z^Ry0hBTx*xyD^Prv$x6iLV~UQg)}74sNR0elg}ow4kz~o^JCv3mC6WQ_W72D$|=Ks zctCRDBhto$A?hmoQ(Nr|dIu)d*;O4n?bw9HzF>vf{h;!z(ZgnMaADXF*dqPCi_}Y( zU?-uu+^|K|Twd%RA<5@TexR$kQ~qpOarIT-F#E~bXTXRc&e;1z?4BW2A~v)cVT2O1 zQ^8W&C?EDEdeoRLd6FHtNpPC>KjC*SjvCptPT0L~DeMPqnffH?usd)&gR(QbqiMma zro+g$$3Bvk7Rxv1m#{w|*=Be#V`G;rrr^vkZiwHCb`h$ITQOJ>$AM_1{I${>NF48^Lst&vOi(IW;dCy!N$*xUxjj-?f6K_Dr+27n;h+Et47-tK5}ZksG2`NeDYQ)5-O5~>my5H=x5ugFHokBn zx4j5wWM?JOL5+m(okm?SKQ?v>b)MZrnseMFG@l3b%4Mm4a)b(YPnjsa+)p$g<|oai zx73@htRosKUNE`jHIY!qd7T*?>~{VW8Bs)(wE3MLT70gB&SS-oQp!m=BqjhIzULL+kS#Abl;6GyMr3ssZl3NgYw(oWnK|<$n9a3 z`~+9OcVI^igB)~Znqdt==4AHXP6toemNicmB-bh9HNndY^Xlr9iH?D=c7udgxN$JQ z{(@o0Y{zmycUp#aiK)DxHe2e<2*`|{fC=`JJ4{wxRF}GIK#QsHR@k2t?t+;bKnd8{ zMetus>bG;g>5`QB6FEzR)*cDfd}A4^*hbaMS+7QFRkda8`G=NKCRG>A%B6=X*0k0G zO|Vl@tA8_W zWKH20jA~i3V2Gn%4ZB9q%h#GyA0gO~-kf6ifs-J2qa)PpCM+KMm2TlBq6>F-#(x;1I`iUL-%0&a|-i-S_~Q)|4m^V zxN)FdWA=g-=0wuwyc!{6i8!TAy+2V3*UDA2t)f59-0luTb$gwnRvXEAFmUE(m;ghU zH>lC|!`ou;Yx~{Umj}xE8;F;^2ssBDH5Ut!Mf)=!N_QW%9oHyp;wsbqS82B+1xJCg9p7lcig`oedb(-K}tgTk%!? z*g*oiSlQ;p6G$ZdUbT0?#`oQ-G{4t>fIUrv`rEKg!x|xsim{cQZfnzOg!dEF_*K|q z&+mCYxZ);0oJ|P`>pIHX=Fis~iL*%3whriWZ?jt66Y3$ZPU$!Ai4qbyr`7rU6S|`U z>bB#&SdxvE@!AME+6GEbJ$1$4VsE_J)tHcz)s0;I_sh$8HZblAh|C9CaGUYknVhPW zn~g(M`GyX4m_x>b<~y5FF^BOVVb`^}U^b2bXCH%&pJh)HCPL}Xp*tk^N+-Zt>0foT zJ2jF4gGz# zKansNW5~l!WKLxU{%E~jBc!h!-RVzw%j)RP z{VA{;nQGqK{-@*)kY4Y#K(~Bb%(aE&J56Lkdb_nkT@AbCMgkg}k+tV?!_*m*(Q>=r z9&Y!~qz>C87W7_zsC#$T*Gx_`X3{`TNT*_G+AdAvag0V3j>1pavHmYLQC((7tecp_ z?q(Clgav0(MjIa0XRKRY{(xoo0OPRJJ}#F>FYkt2`@+&Pxhr!*!DM_2`GDL%mqJ^G zn3hYCW3*KKgm}#e_ZplE&uj^cF~tJ3Z7k^PIMY;QCzfB|g1LfCN1Rb6j{OVaJ@PHX z1oPvD8&bV6Kadp#vpf09JT6ei57r1`igIZNU!9Z6E~E@|eZ)NGBmD`D^&opr`$H!n zqGs+hFcVobxWTsBiF!e9%QBb{?k8lDof5-#Ru^r8MaTpy>`$0o-*&#%7wZ@NWf9}t z$!_rF4)qYSh&mbV!dkXIn9(Q9N{ifWmXz_|ROcVYPld-1fsHxDt#p|(UARw z>5Cppcnl(HXCZxHrv(Pw)?-d&|-0u{HQ4?O^P2kZ)P9*2>c8l;eDZBa}M zXe(ZY$W4ag7)TU}6}nJI7BW4#EWKv~;J!n?#6eu!#vZqF=ALnDy59+{KH4n`DxD6e zuR^Qu*bhn{7*r>A-YkQeL;NyxWG26T!L-D+H38YIs=&UwwrHlgmX#rBdgm2g6P7u0QB2|Fq-+r*Hb zDC7<5v;wi`RZiPU);k4qG3*JM`#_yHv=vA2j0D%()%}1oLG>}rk)Cp$N^`3+9ila; z9#sBJz*)2Fydtj?BKUx=hr;ge&8Y%znl~Y?J5?}qnt`kOF%M;T`T=_$7DxI4bBLc@ z?)LE4;f{oKFwErvtEvYTD&3ea>_&nu6rj3oXbl0!7pLD?hR!2vj8916NoBaG^nZ>7 zR2f!P>A=+Bf)3==|IDEHx-KT{bkivFgnz!!4eDx}Uf><>Fds-uqUc@b(YrSQS>|bI z3;HIj+zh$Z+Y{|1+=`k7}5-16?ctQ*Z z#F-I5Ru~80sif(DI-?}i?(ibw4Ox!TD7EH-DF1(9Ze=Ct?{62RGJt#J^hI+Mux(N8 zfaX$arE}A@!#WFSjE(9>g7Xa$(v%L!1=sqIP{&gy0qgD0YppG(3wdcL(CBNkqQ3&3 z!SO(jDBd}`I+#~_nvjr!S8G3D4!5}Ayqq0v92h@1*`^9EWK2Xj4gkWmza)&-H$;v# zrhJ!CR;@{JDywET|G>}}tZb)3!>*4tOca&Sy{bcU;d#y9*|4%USg`IdJ@ed(AChkjjKQmR#Y~Cs!AwnZKaVh(k4s zZO#cV=qZy>RXm7vLyl;OqOA`zX4nLJQhs|ty?a!du8(YOH#teO50t*(RfrXCg|eP7 zb81YMt=t5@6=Vlpr~{IVGX8j5M_+>e2qWsx%%GGOgZ78EU*WNS8`hY*x;xUHUa&Tq zl}vv9f~xj=0<6$$)I0|e=?AP~;;oG(Jq9z+%9#_o6c%o0gem|s!J1O4>D}kap3ujM zqRMcyD=gC1l-XDm(gyyrWz`~9_$>LYIr9m*)ivx(7mwL1Zl<*-w39()bggtBLLuR6 zoLivc7VNr;_nDPDHq|oMX5#DGTrTKc&cg9`aBjIJmIQCcj~}fWyWrKfD*U@6Kdp&$ zEvUQY${zy}7-<9DDCgJ4i6sP6XROz!e1L6E1Vbh-S|gX*R@@_bSVjD?`IVq% z*}dad_DuO{t|yFXyS9t@t`+Qg?^R_Fcau_A34J>X>au4zBd+d|FvB=daW^P+URdMnShC<4mY0`qpMh!{oKIFAV+A$vime!y+-ym63(JP*mI4u}rPD50SiYeF98yt*7P+jFHZ zi}be{^>viAux9jvH1EFVGA*bBoG(9w{R!EbDf`?uOkc~?ofgE%V}s7b{(_$6rhR*p zh0^W$u`(Wl_ymo-^6PPK+!x#SnW6jz4VK-xJq+vDGOJ>U^33KP#$x?rV5=^(uc6m$ zAY3o7x~kewD-}3_B@%eC#RRN!==G`>)c=FJuEK!by&YPDazD|pbo+S@mydaCDa;;o zQ}zk<0-)}V24AkKBAfWT?7&!&1-rClfU+6Q&Sf;G)rOs>!LK(o%nQUaE%x{gR%O}K zTsL%jNDH{6JN+PGgg+2x4Xw~+pUhdAEBc8%AQC}KZ(jm2fhnJg_;%MFTBK0-kd$4V zvbQOo&|yPW)~W*2kBFmim7dv%;s#bYO{s;Fd9BuIhNS5h1Gz~U*)#7!R{gNW`$V-% zZkid%(QCPzE*H>y$NBWaF`%YzF~>;e=~M!!+DM7{|PxO*7E}FLj-k~-KD!oF*WltM)Ysv@c{(sorLow{FzOF~|>jO65 z>)@*4X}@M1O5t_EH*!}U#IY%mo6ur;LmeA5r!=Yx@9L_XZz(C5o#Hoq3e~){($_~vX=$5om*=5Cyxhg`FV!5m6`Kvjw#BfcC^5OC=o*DELhJBr) zhpsn;<3ji&;x_EZG|^DUM8odjLqfLV9gv(+ZBTgzH(7VET=^bvCA$i#X1vI&>%k$UP=L>o@qEsf6RmD)8s$`Cg{n;>@8ghkly z%D%`W&Ne>`?}quYKBA(c2?LJ(UQNvA8`|VieA+E^&9Q!}2JrIkN+4Jz+keZJxe6))Ts$UP#E@S$Ei9JKbPLJwZ%{Gg~zYDZ>}c zS!1XOt1`Y*4!fsiRpx+RwGCA#cy!m()Ec!I6O;%{M$^>n8k^lH1PSrP(ftWMbfxqe zarwI88xpufF3M~e-JE4h9d}O8EV_GYQuYJt$H7h|O;$Z$k)}PMuT3Ey z(AyuOez6!aHQI!pF|+}MzM-*Wy4HA>(Crv5B(z2^*c#Q@gNiFT4IsL7`H~8KpzJKL z+YWDHRQ#Cx04$XYCZ8V0MYPpX(cZpb!c^x2>S#q1;#*^HGY=s>F(v-*uNPe0k&RHj zbD3(lE{JAON%qV5IjX{6#=H8fPq5tEf~LNBfG>I8~hDUi7i|1*7|J3 zMMVB=Np;%e&^$TR*`Q@4ETpt2bn(D;LpZs`WqYI*GG?WuPe|F)0|+vYbgiRZed=+; z3hQ)n-Lf<#0DHMpJQvbu1`&>}Y|GIE@BE-RF4)r1MMhD~#FSot|A)Sw(mNo9g{(ft zY2i|l;8oNI3S0-eVD4;@Ex{GNVHE2;MFU?&ymkQDo$NEn9?)Z?P^X(gZxOSBE7C5Q zZ}})x*he@gn}cy$&E)}e5^IfQIQ3rRd!ZF zqPiv~N^=N~kMV}id{ui@w{NMF;8IbFWW(lCa|U&*?I3N! zYIz6jQXB<7eb+cJt&2O{rv`EX55djYX1hgN--21Bgu0Z=#1A~(;({$TePD#I#+3B| z@U-&-=5_+8wCfh@imUR(W$K`Y+__p{E#5E8<*?IP?Nu}X&33#S)JxH0s}DrZurac) zdH5aTrRlcVMX!RQQc1v{)X3$eKp?saS20ex`tVWMXPbvFU4q?aBL4yHCM<2RJZM%N z3DSc6$R}u>P{m9NhJ6~rOo_cKJxyS&cVw*=f^m0briEqQg^ zOB9HfPk*f{b3X8EgdZ>$e(bJ*Ij^b8dxZ!;VX|prW#`sFyGBdpg3&B5LqVOm4CY@a znPN(a^9>#IEW{p&ASF!|Ji!EI=IbkR;yW%NdiCDW7(W)g$V=GBNPmd1^{ zO9(&x3BCH>#_tH}@Tiw(B{jtl13 zMx~_g>W_D+YHha%+^sy>bn=!~?y{=(oP_pCUpD&))9%-Sc0Iybbe!j$P1nPG2w?Uf>#T-(DurTRBdU!j~MG#n_OjJe73 zf?mm=-_O?*-(*iM19&Q51A2o-;eq2kD4g0PA>(sk=nHBgq0R<0vrgVgKx(S73i;fPK+Y=>)dpOVe98|1ws>) zenL0bc#Bq>Chg7u3<+3I*$al0;G5$R2_x-+yrN#( z_=b*0X&zpK?ze%~=Z5;J9){^KgtOu#h=jzHUoclRL7km;4jO45?#xuWjv2q+P}OMn zv!sYsZ@b4F$o)jjfz`~aYd4A?Vbhy1p2P7CY7uF+)3A`H5oELY3>-kkZD_f$H+)w6 z{diREUDa<$hG55}SC_B$sR?g_LY-`M%vcvyAU}IOFXwEjxtP?Ay zDqb6DjlSRy2R%&Q1ei3bwV-3PfNJJ;6n}j)xR#6C`eDy~x;4P*^5DcUAzQ~c=%G#E zG-c>cCb>^HUhEr&NSm8)Isfv$T-y)KZg#k!LkVbX4P>1)5|~GY`+yEq-u$<0J4@n` z)>3kT+#e6pGJ__X<(d0v;sX}SKA^XUz|I&qdiT>m34Bf=HNpFbZmM07hVD(-ZF>|t zcVU_k&m%DO1xFY~*v~m$$&S5K`UzcS=N@L-)UYRSxh+@j2eMhnJmWLpc4>_SbW^rZ zzun*zxfxY9cVsbL`9*KRSup1&@WQZzip}W*%=^U7I{W*7^iCf0_0mh(Pe?P8Is-0r zs>K9NVURBYFGM%-%NVSYO);6kZ^HeAH_gk=QN#aWNAcza&tGT_a#PYBIPyvwx4{eI zlW9Y8GUrKWEY3hpE$m}by_Jky@$(p_C*;mxgGN#rSSA~+*PAfXj04=D_wfLkYz=$f zi-tWh3NH>z1ugiS`J%rb2A#t4n!zc;sp$YE_ zxI?U?aCYr*9Rl8)39XSQ(&9pMcWyK8mV_kO6uDdE38$E-pK`k=UhWuV@26@;H_V6E z0Xpcd6r3z&KM_p;Nf$3$ebp@f6nbElZwN~++CAb2BmG5wA~(`Vo5jFf5mOv3+CbfB zoT6nk7@|4!;*mBx3-5-Qu|F!N%pNS}*RHm-rhM$sgoHL&f<7S4MQX!CtXMO0g*)Fm z5SCRM{c66&M@X>oBlrP)ug&(dI9uwz_Z{8?UOHE>8(E^o$^=WeZEiLRwq&%3y7NL9 zb{FjXd$+{+`Am{o7(XB(W~sAJ06IbPXxj=nAp@bxFx-rG*k2Rk0`hgvX58VWyX2zyyKgM|Ir%uTG2eQv1HFP|55*kH$LC-HkHNew?^RipnE1T843)He|cFO9S zrPRzm$i@Mqr8i#;H&K4Mrw4hg^#)zv5YA{qeV5!kK0yoHCrT>W!)XzvuVG6$U~;%# zXLYYoxHFfyp>$Q3kQFtZf_6|-=0ja+2TyowHmbs&P6q()0N_YV+mR=4>gr!)A8k%bcV)~5I9uT#d zJ3(cDYFqe+x?-ACGPz+hskdZxY>S2SmxRiGqUvpEWSYFahsx!6M>Dx#v)K~SMwZ>3 z53u_-Ulc!}#uMt#wM2!}7Cg1{M3_j4{5RQjkfq5JPHkN-ICY6;P^WTecQ$!@NL$JQ zul_UAz5K+_G0L|??SwW=L+R3K5`O&#tDVp4K=&z|(ie<&2BxLf<8@0_8fsr8eL-&o zlzT!R^tcMAS|aU&`Ih(G!R`WHb@`(ur$H=R@Pu9xBXw4RklqgKIcrrvVWoT8V{+Q| zWy~Ns-LN^;>e-ZsTchpQGL>MZ_JF!ks6Im!bOsv}eAWeBE|_n*QxNL9@SYXzDaV?z z16?&*#p8zAfY!a_9?n4Aw2%W)SAL55M1SplH)@t0o2=As7|nc+Mk<9eA7dhJLYsrP zAKXyw3IWQoYSt8FAEh?eC#)v8OBG$K<>T-&I|!MnE+F6XD6>0hP>fqo81`(}B$zS6 z3h{~G&|%tpq`G{`3L?83Oh|3NA+ukp<2^yQOB?RAaoi!*$;UJ{gi0y9(atFq?3wvN zKcKaX^jZLx5Y0I_Bg-A;TW*4oI`I?edV1v4W__ZoSW*Ry#C8J8k@jgh;TE;v{w4hK zhPHax$2!FW3nrfzh#=PwLrR_rjx*?r)9l_*w}@aWr*bVKx2h%6ZYcf)ljnZ~2U?&m z>f~b@Nq3|znDTdS!Ivi}&>c}X?#w#PRDaBzDD1cr75;->Ej#u*mAhfS<>EY47lwwt zO~>;WVSmD(ZE1Wg8Kv?&fc9?T{|RT#O4IUlbYA_P8>(h&Tv{#1MWrTh*lXoU4>bhbUGvRw3Gw-G6z(*xjB|@j*%ykBR+QKSs&rm`B7C+i8 zY){xxnyaQKpZ^T2xi+CQ#5R;Wbn{NS;@a&)LOoPBP&q_h5Y>c~F^dm-#-J7?Bt!@K zhTI^NFME)u`Sd~|n0cfn`Mh8?>ttkkE2>Jd;*Z2{d&AlV7Dba$hxJHzmDC9~!)sj* zLpvX!$Gwrhwmo<%h6%f#`;6pF0B$fNlFrfc1HDOCI(bt130Vl0%Ghn*p*udZctTV7 z1ncR0*=yOI-&0bfx|9D4c}7DxV*x&BDg}L%`~c%_UR%XDPNk?`q=3VyVZWfaX$LMf z{?@>*OW_X4PVESrI4aW{%%8uf;#B2?8iuR!FgbFRvhmo^10!z1mVrL4Wdgl5o<|?w zFe9MChMRL9O4A}|`qS##u->Q7Zj5mIDBYyd7%y^L$jA?|NW0MT(zWU)%#7iL_DH_G zE7N5O6Ue{C0*qz@|IAo0gD;hmpSuJl_kmhr7cYwiYO-WCSg;{psitCbiLgmvG9B3` zL>TPL5jHTRA;Nc)`+&bJ1dQBnu^AS|5B|j!EE1bzm(WFfa_`Ah6YwS@`GC&#q0Z>Y zm!sEDT%~a5w@Lu8?}FHbx6ow4SLT3J1WeQl|_(m`;tsc zB#Ld=ad&N!R+kQyG>Gc*gtlh~tTj);^;WsOT1t8AiQk}GRe+26r%_xWwV><+vUZ`U ztI7KE3Q;SsDVO~Lv8@dk|D>kv4kS1(5L->mJkY>gA-}f1jJ&Q1z78QcLoeh9LTjV0 zt5I<%LQ#fcRm3wAH|Qzjz%^s?kN^oTc*uT2)&!wmcUyQrgb5Y?MDD$kb~UT!dhPH0 zVqcT=*dHoSOUmqmyw)bWoJ)dF2dc^e-Tw#G_g>1*yiIWifMs_YcY}W$p>(OV>~6<} z?iDJsACTc&VSnlVWzP#a*+nMzfm(=bl}>W9;&pT7rrGk_1)XWsv|(ghwOnux>l>za z#?LW~nmlvzk^%h=^V`g`{Y>l9Aa;siy`OhL_x?1C8PEwsx4d~hHR2BFl^DO6CXJPa zU6by_$nw6!=$4o@uI;Soqm0236Ke4f=xr9Ew!A3_ErBx(J?=Z?V-zr^N$MIPyf;Uj znIGgQG*ag&qE0QSYg-x#nOb~+`SNx7U*ch~CrS>xO+FCKfX$ct8>V47X;pd$<;-C( z=rQ&vvqF+?3`l|*rIl}(jCwp|gjKrdFieQEN~bxYRl3hS_&&Lq;Xv6Zw3MK(ChkU{ zaJSW7Fp8N?MK5mWTj26O0cI+4SBZG`FT8G8#sqB`t-K92l9#1*2d`P2LGy%u3+mJ+ zwsNvD{`moQc98B=nXo>lp;+^=?8RcFIoN0mE+aj1Dqsu>px|1K*uklH<<3S`v$fN z*bk*&FuJ+v59;OrySbl)K6M5A6Y5h@K6n@v{?n10=}?|HWfr<&bJ}+6UX!wWDoXbF zHhlF7y+clK_wwdHKdDIEuJd&)_5UGFtIVAH%=@)Ecv;Ih(=^P{4Xg03U0TWMD z&D9uxI;k?DZTEtFOqZeGo`{H1*7RmfaL5nDcvn%&4tZ<5vT-!zKA?vQLS2@^NuvqV zn=hD*W-AEPZT)>pLH11iv7k@rHYKUk6d6p6(vmPQ5M2=6w)J*Lu=T0AZ#5)X{eoV& zg)mOB&e-BAt_d0ISuTG<&ky+RiRQ38@5F|L^ou(rt1RU^VTanb#jb$nrM>6{v)Y7{ zGzQxDU-+6{lY#R)Bx69EJyeX8Ipswc?F&}RDt#fnCE668%rN)YJ>1;aU_#eSvK2x{ z0rv4(+#5mDCV|Er`i9Z$mn)yRniDDaSuk<;CBKjpE*oGCwB&Gq4n)CKS1h_CQ5H_M&tjQplxxpNeW^?cSVJLRne5Wr_W@+U^3cbS!rQuZg*@qjufmifIcodiA-aR+R% zS%XT4-Ns0jrX24O-GmW#tr~KiJnW1c(hunHfULT>K6urpnE2cs=C{591-BFPs^ZBx z6EaPp(>FVk3$>mvx>J6`P4;f88VovI0nOV~n42)F9MF)X)QO_; zS2Ow}fsH#%MiT~6*izu?dVQ;eNs_E>V|b%yA8z zrfX4qUhRVUwIwH&xItBMbGr$n`3YM+-*}+9>}iLTBqOoPoX~Gu&K6Tlqz@9{r`-IV)3QR^J z%d4FY?;X@dSvOjvw9QNh&Ng_5Rm#Yy4s@*wbnONSQzQrU5@4z05#zm{YI zGhdQX@o`D{HvWJKOO*ree5#3WMyG{X39hJyD(HZ?3nxqsSy`5Ie&ly<==rZ*?GEsqDgoehH%=Xya;`TMC~ zy^(<@(;L3+MG|i~s$d+eizhmjZp-s=_d!w2Igzrlj>D{#B4L=H$cYtUU&fg-dq7NP zS3P-?exZCPj?68O|1^iRBHXqxe}wB%Z-hC;qm5!&!hVO}srLx`KAtQIPK0QaiR0fP zngN~q+SOZ`-*Jy3{b%CcFPKfMuw!J+rw1VNbN0?XP-upt{qi&vPBc{2?iGGPErRUR znZ7gIsBnj}H%i}GhbF$SeyxWo_jGe$6muDp6@r;0c~&Mrk3VptY|gZLYPmU*!dUFD zb*OGA-$~RRS_eMQx}-dR#jt*WBdJp!=p6<6(7*wIBqHaBr(>GXd?es`hiC?@o}LV_ za!BZM19kKPIb>7XQIt)g)1T*dyx! zT&q8{Dj9$^pQHW4Wk8*#u&KkW_7cZgmLhEAkV1S76w zhD*F16{QD#fZlTiRi?7fu=T}0rrWRu%&*-f4!e$2*}bOBgt(-PLe`zL9LbCH4g0bB zRbI*1tp0Uo;qR-=30o^Xfi(lV_uA>y5oc5S39WCaV-Criwi^!-Llb2-tZqizpwc0$ z%pX5T0-Y)B2eg`?-lXSqY-g-EjTpWjanF8?f^-FMl}v(vB*gWlnzX(*Xz&ims?;Pu_R>No^r3({*``8L4Jhxzp~H444(^A z`UUf`e-5|!elxdsc|4!%1x9bEKZDyk``Dq|fSIMlj=rGx+en?!Li5msbe}s!H(<+c ztMoh8OCDJ)yTKaP%VXf@Bq{7K*vjv>7^iDT>|WS6jBdYdkuDb0)rY+}0h<#UCy*I;(K;hGXg7&X=e0* z>E*_Q+VP;XUnjp=AUhK*=W6U;!n3^dqD=LQR6>2##jeNFTmd*oUzq-poc z+*##!ONoqNk(G_5(!o}k1LOR5@YlPiM01-(6cG7M3^G$>)aon74{a-Cf$(u1GK(YMCD}lN5Fn)N7!I zs%!60dqE$MMAo{cy#p%=tdd1|rq6+GYpo%dkXxaS(y+U)`qFH0B!*0JKfn~F> zZMIyy>!Kc9OK(mO=#8~fc`>5WGk&r#M3YeZ|9~xZ$aYGXk*w1@jA{vGLY>tq zvSx^%AoB=6U}lzHNxV9#N7P^^_7QOx%*VW{0_wV>5c}eo;i*g;_Y1lQQ7VTmn^SL6 zAYqx&JD@2+z;q6$;|B>$P9u23s1>tD5T99p*?$^FAnHG3*8x2dDs|gjW1C<-1}yMG z`I5ddq;2HlW0J5G(dE2g;t{Nb;5k>3G)xl6sIpIJpMW|u2Im&!-taM;+bU={H*~*yN4fzn% zD7{{<CB3pti^X9dJ%8?-6nu_PC4i{)MrB=5FO z=ET{_h24Lm`OX@1oCYbG9qjhV3z7%yI1Ll(x@-$N5h4@Dp?RX#jIVD^AH#sljG2tt zc|!MbN}Yk84o?3!;j#un(JL44d`l3ZvUU3)d&{u056H+0arJfDxTsG10{vN3puJTn zGe{V_mjvtdK#o-sXN4ULO}v%_<3ehXJ7n(=c4K($U(7wQW+ZgJ`GOpt@#YY(%daYV z@r8u3Iwz!;%TB8qc7j9sT$N#6QgPk1MsNbhL^z>Crcv!;uEVPP12Tof@w{b~1n&hS zZwe2Ryiv+!P1_NMsg<1Y-Wz(?8>;NVChR1P1NMM?%jQW&sS7ho0%qBS31|RQZVOsT z2%AcRoh+L$nm!kF?)E9J$Ec>{G#7Lb$FyLnd4^-TO*>nzM^t5C+0P2bW-h@r& zjmD*EoqA6nXE5+ZYym<3bWnEK>Xt3ZnhwZ@6XZT1b4o=m`(k`LRpb^8*&mQ#_;`>L zKOh0&`lGg8(SJ9T{kIS&j7*rG(t%#j;{&YEO-r>*xE#wv1^Dmylmq?sf<8pq&QloFBok7FMg{T8W zvB1n6MD7DRZb0>@K4tz*=Zr2#f@Zc*aT_)aGM5fR&n+BCr!Hhaq5WU#2*;_6G`<#Y zys!CqVRcFWMA({=PpZB*4;PuT=2PVN&n7&J?P(itaUcaw0~J#lqG9|#pT zlnHxkGuODB!2Lt8+I_1C4{s_e6JD5ohw~1bWgq<<_LNXI9m##5XvKc9#T-4p)3{U` ztBB-{Tmc5w07;$%=f;KV<>uhPmY1=krMEx#bacq{jtlt$2Vp$hMw#_GObBnbMr{yI zE&9qISt0_c#ZLyG(D1iAW#ULe|7i)Z{ROpTKOy5V)OlJGdNx`UNS)?)!T(Ea!TC$!Buq>9d7G@{u$ z6tJI=nnc!C#G3|8Xdl}sYGqldl16lR844@;i3| zO^e^{It)@DV6{ZO$>iEYkBcGu0qGWr{!d~5t!($@%Y4CTmi=0=@9yqyXH{`0j_e1t zy)r{&n$beZHbdf(JWwe61@mhkHiF#?cgpVMmxMgctMn)Q*QEr)@srWH{mu1`DAP5a z4P9k4P?iB1aXz<3f)Pg9FUb7ozDGo5ez@?7GF~F^%iS_0@N2vkmttSQz@YbI<^ln! zs-kN%%ug661Zqnab}!fSQx01X_@9tM!Us!>7nut#8=%3zPy+Y88K!y2C3LulZaSA6 z&zRrlW|;gKwSisSCn3u%-a>*gdP6tB`DGsCt@PY}g=!Wk>?b5QW{NVH0@a7nJ*4x& z?wvA)(d|~;vZIy`5gQ{Y8_S;rzi$H7{f3EZOHI%by4P9CPI<|GLOo`vgcAC>pI9pr zeiLptb3pY$( zK=u{ENtT?R*%;Z)TpLAS#8X|=uK^o_=^p|b}>&D>cjyIVqTFgNemH(GT} zeDKGWPM_hj0e?WtHi1drK*eonL=o7?oa*%Z&c>qM0j~hKKu5pKSQhpKJS<8Xzrfs) z;L0uu#+KjkPy6OP$qhZ%Qo&BtQFdU&E$E69)V6qp_w!!;8{r4kC9N)1j(bLw=8>i< zmwhz!n3N?A)`{H>>WKnrX#IU#fp0DNwYHFjl1tyt9oAN=cf*DEfVxd6Qa>J9F3*^t zA5|Fof(}^KTj|V}^efPSwrxg8s7Z8Z!9c}r7;fLlou9YV-QZI0wC)X!W>fU^kg_wM zwH|E%1_tk-1@5BBNY?bjObJKw0l7B>s%n?rgGVHI1x@pjBPUdu4iO)FKqFtNpLyMu za&q=#bFfQ`6t<9C^o6tyKgL&dUP*`nctLy*h>kVo_Hn!s|!u38Fw+k1l@EpenM{yhDyX?em~sW7`Puums#c+7a$u+@nfwN zuYJ11OO?vzdY!P3d*tkSEN5H537xqkea1wm>MglxiwBH*O+inmf?XGhgpB5aDY*qZ z7|fv(^6G{~*)y8I;iWs7;Yib;+9R9?3)+Nb52=|Ca5~lmSYUTnN0X)Nhn;=xH<&|5 zGo zT4r7zpJHi=ZkY02kMvmJ(bZS|%!ECPc{65@ZU*oP%o<`1l7jX1U|6%pJbc=?ay# zVKd^57yVYPK2x#Cz9U!G$MTh#K&clHp*PLKY*>0Xm}rpH^aJQWhMwT-8?vw0Uw3K( z`}Cu33_Bo!R9EXMlnHo~kdM2W+)`m#Rq8@%sU9$x60PC#eT)?00i6P;yvyyI(qj5( zD;j>%A4Uu4Y2;m^x`LPH!-$5_B_^_tL9v2AQ* zU|K|OSDDfsNpN68ll0y@Y?01tH^FE2HOWrlwhD5m7zr)(1NCF(vLExbl)olu?8kr+ zHqgk1)ZJyWQ;P&LDEkR(NW80KvQq!U)uUv^{Tx)mf^C<}vKW)E9ZN5GK{mHqpA)(C z>-9H#QQI4~Vb|q{I~R%iajjfnTE{>K`lwc$N=aB!uut23!4Mm9MH+|7Q*L@;g(5i56kLfg;oi$Jrwq2C5F{q67nl4%o+(D~~p%w}MybcM3h zg;H`9rR?@7e(hz}fm#S4y>X;l=Oo~mM*0(?dvrthVW-G{GJwK1nL!;BoO+FRH|YKu z;Z?8Pu5Q8@eckRG^r}T+K1O?GU=%v+nl=9eoev$=<4Q!-OCS1SUnY} zxCOn`N7#4*(&Mn;#yCU$09$KoSsZp<1|75+-RKq@GQhYB26bwU@l1~dpDN|@f?V_q z(Y@>Dbe0&J@Bt=xFLjNbKOL7@uwqn~9jLekYnVNCQ{lNX43{}Ag7C4ytPB3t_0^&7 ze2F{|?I9s=IP2!&MBSjvF+ktULppS|GJy{J39?li>YV(PT{n;fhLx~CVb&d>(x@wa zZ2RAt7Q}CZzGn&TS~X!vcY_SlJN-yc6X@RB81pXaP~J3-qFvTIUEfPrvJ3iLKG>@TZFE0p5|#I{p7^ zOetG09px>H4tL(AbAvg82z9$R{srClJna?-t&?f=VO?z!tP$7`_|x&uHnO_3 zJD5r6NqEN?4DSVvk=aMbHO6k!h|`Dbm^~n-5bF+gJt9j2cWs&w?=~>>fqySkXECxE zOOJrvIY({ZpK^4+35K2xB+|3}q?Q-h5Sx~`+!Z#YOM#I2Vc>vh3@ zvO85!H|Q~(yoj}oSHlmO) z$0lGmQ)UOeicq~-yyWQ_*qvmyOuvy~6QUa{p$9}P)OCFn%c>Ys6S6lkFr~I2#%P4K z3VpZH1gy2%9nk9|q>c}puSYxDqwGtWz~~1XUmtTX8ABxZ({t(y5hb`;p&U`J$` z%vB@0&XgUiYISqhJDUgeaTGhpG$>Z(+P6|tqEH9@H7Kd-M4>tPi>Fo?*S#i6!-K zd>!@!-g-rq@hVk@CpI;-m*k8jqqI{XGLE%@ywFUi+SDk-e%mt_G6R*hAw5&ad`uTD zw^1Y)4)*0G&ie}|!ew~170jD-oe??q(R@}IXyC+Y=p1FweSe6fJ;{DR;%E^zL#2B$ z=!0mNargyuk0Du^DRHk*F>m^tLCI-R=K$+MOiYnAfM_ha%qP_OggW)>W|Rg7uv{^N z7Ao|Cvy!?(7#x?XZCSVQ9uRXE&Bh$C1&8UVildX#511o+P-iaBNg>;=dgo7yEPrNe z20Ase2`xK^NXT6G4U>N_^s{Ohi=D(%HJLgDn!^q44n(GCYQx@%ws+>|*9YwE(GB^- zuD8$ct#^b!k%a|qY!VZ;@?sWbZhXhpHBnB?!#qvO*faX%U01dL=Eb2h``Bnmyf?u z2s83_9jhlMD7^z(v51~|gLI08gczs5*w}%;8^L$|a20X5$BEEsw8T1a&q}lo_+m~> z&E}li2y+2VgI}t3S+lZ8ty8|uMlMhz0e$^7Fs)+2M!?pz4|*HCv8k{hFdfhP!slz= z?~P3zk0XbnZ?J*K>-B3_*TOzIIiTC2`8CaWq+_>i!Q<}aTB93mU%L)Ocw`%PZ)`E^ zTphqcc@tvo0z)78ub#Sg-p_GVr1s3WPCmeTjcX3d4y{I8yy!#j1LnGGLIGQN&Mc#g zJ&IP&RhDWtsDp*Qu$p8;73B0)nt5j&3v#Ju^3h`A@R8Sr!<`stV8{zLn=Ua_xL54T zo>Jws}2PRT2+fGqW-qcdi?0WV=45rW8t__HorX}C)uLejC6SM)0i@}z2P*($tZN4 zUprL|WL)DLq~l6$Yz)mk4r4E^E>Gmc2lo9vQJ&37Zuv9UvpH!)^R1~^cFPV7cAF>M z2O@^!cX0<=gx?9M$&J+u_Y?Zew$x=y^ohk8I4N->X$x9iHT$Cp2_r4>g%_-+=ceds zE3;;q!Hc#+uT=PgHZ9;x(r9_(bta!L=)GRBujNxZL6_@vVr^On^u0%=Gv}x>YaJNZ zH|#S;E!a`Vn-0pJX92BGtB5XSOTFND_)E5tFIvMoR&QMF26HIiwzA44PY{wow~g#^ z92e};kJfxNA4fADpBZh_TX4|opugxme!STPMYBOI@^9ltITWW#x+wL6Z5wL};)%kx zwJDPXC$BPbc=yA!g6f^?#ie)HKOixVG+ZiOcF*1A=W(M>&vIAom*ON0?3W z5`CdY@&3@?TA;aBM5AuSqP9o5Zjhc*i$C1t-h{X#a6jSr6Exa#vz;cw5^bft>+rf& zJatu*Kg%h6`-c-mgi}<~PuO_5HDBp%8h^(DWP59SYHy8yLn{E`V-(o#+NE(X1M+LR z8j)gJ@N&-kHKTg`zJ3|(2juc$saTd#u3?5=sE#rRO!rWAxjEQpyTl$gaLl>D_NU$p z9T;*9JFpXJ-^T9Gy*PqjXTs0U{RiSaSxhY>WtnrkhTN7i8~61$E@%KyxK(p8H3_yR zb|TL%Kbn1DT}GoQ&37gTj&>g0o3wGI+rixSDQGY0hYXf2imSa*~3YNkE6zv8$@(@9ykPE=hMj?|zxP%y3N1Ts)n>ygM^A$4KtAlcny_b|3hYmK zDKqTu3g*-TEu_j#sI3tgirhYc_ylBt9fe(__iI#{^8x6!GaI2Av>H#(bPlt@2)^af zG3ife`ATggy~wO%-?`(zjc~X-Orjaa%U>rL`Gz}}YQiSJD2+E{rr8r%XRoI+UoaMq zox$VP`d5Yt#uPNW!wAcbpVrsvZL{~wlD7I!s1>0EF>S3tF90whp%T~+Sch-T{@AHL z)m`BmrE%mcBSlSRJ2SMh+Jl~m(*Z61mMCm~iSOst!#hka|2XrKTJOMZn5|q!b_?Zz zc|RC-whv7WxBx(cJ>N~25436r)^CKwoVK|oKkJkv23#*-U{F-c%)r0ig^hb?0+bBvq?D9M$GT2?N6|U$Zcg-0PK165_UTH2bgDv zpf->TdlukGsPK)Vnd<;r%?tqW{%cdpto#FX5I|DrebV*VNMLPUO)eP4{2w(K37v@3ls0#}2m^bV7s^jPQY>%htIA^RBEe%a;XYv0{@%wmIsDf)pDQt5C{IMu z)hIXf=z?KH^PtHA(TnxHh?WSq2ML{@pa>oQ1N?5FL%lm(xh9t)@;!{46W=huc7qh` zhDRzrE&&N6{e)@b`tarELd*P|I#u`qGuF`;Tba;nReVK7?v0|D&mO7x%$*>6_LBtM z;&4CVG=z2EF~JyjrNEw>9q%x|{?j6M3wkxz>6D$uuk-^>f1>Orqwa5m-IZwBPuP)j zO||i;#)u^%dxsgI+~|j}Z!>px#*)U?2hCnE>tV1@oRn?my4j2XOjk747eqH;r7Vn=F6 zS6AOY!FpmII4rvxkoX!xBkh9ub*`O&x^>ZemmO2A^b^)i;J$^)Y2NmQJ<~_WVd{86 z%e$xps{J)yM*Qd-LNSmPs3vV*G?Y&K-4i4IfIsXuve!ko)%Rm;#FPDk`879A$^L7W z3mn~=&vc|0%++1yqxqyWH~8YQP^F)+QF(WTSm=nWf9)3cCyZ_w5|#NjRciMRrZ6iv}=1^@6cKcRmr@0&1;UJFXqTO}*mskP9?hw7`I?jpdizcc*;zvq1V6tZf)LBL}dg;l{yNLXIhq^?1{dHIJX8nIK(XFm>j=7U~c^-H&dPL z4VgJ%rsH=Q#S*%PyYNt`jen5|$Al)5hm2RF*h>OEc-VLK$jky={4fh;+X7E(_ zIs?6+n==)jt}nd>lWRI3u)iKV(vTuPkvD|-dnUX3LVuT*%#Q0Iu}Z|qLl z-I~YmbKwHNen4F0#w)yULv|AMsbyE07xW%vm7x~O-hn5N6v4d_nz4yu#^)&)5+XS@ zcz_9vcm-1BW+f8?#N}@hg$%x{5ftVEeuuqg(mgLJq+I$W{Rv~2u!LOyHqzT17W?d| zSy1mz;Y*j?{lL#L(tiAcQ7sEPjFZ=7%SfaHD-IXz>A@FFuK?C5hMvnVO=wOp$giET zQfL=D35HQfupnN@Y@y0jCgkz`GS_;;POf;KEQJoe^C3HCgl|Yjp2-1Z5M6^eVy-qaD-1LoG1pLyP0qJ)Buu~|5Br9w#+R9?O6{~n zoUeHgdC3RlqCR$5GyGJzZwQdU6+e-7L4J*8p{%8b85mxV)rI&#d`wo~cl&>c(j+D! z^M*HcyMvOuE&|<`N0MMJ?=Zr=LO^PxV9=dOn2>C~Aufs3v3byGz$E-)YmU+{n2&jt zj?~86rB9*O{yvdcU&74h$@D0;8B z1Mq9Ehoj30sUE2edKK=iGYa?Wc-SwPUmLoT%8ak<-U3fT9zcQp0Wnp{7xVIDRNMro zQJ9evMirwF%BF#}l#OCMA)3)zw>6ZT-5**!c9fw%pw{-~4pab`Y=mun>F0KOZ8#b zXc%h4^jwUo=714lW1X6Oxn^3?+}QI?8L?$C?{>ge?a+w}HlG`|6s}w!qb3L3il+vA zdIzVN(ULN5P7-w@A$FaGf8&-H^zIzsERrIh^=B_)%}auXp{FN6bt(WA(@^cQO`inX zo7x@F`;BF9C=hz)R3zZT$bQ00_ezgPL1og6nwdXruD3O3^2zTt3pa>05n?;~`#;Q@ zOhD^=?tr+=QXTC>cTKN>m>c$p95-t`P>X#l#M-vgsemaM!SKdJ9m?FbJAw}y!&LH`yc~oh(gh9}fQdDNzJ!Ein^W?z)He|zDhlSRk z`_B*#Grv56RV~HOK(pq6KJ)N^rD}$t&TJZX8v+S5NPXu;npCNkR}WF z0U^4Wy<~g6vI(hX#`+B@HJ}bRRE%4NTVP?gn4ll9t;DtcVW%NSIcHR`Z`fb!oum{N zyHgbsM)(7{=U!UlYdBh8#+3D}yNHYDh2bM10XH47C$z^)MYy^#i*T!sH<|dgK;{%dNVA6hfE=8Yx~7sjXCk*I8gA#z7t9fH;B+-yN+Z}Pms$u^+J*+G$>|O( z+0jYJ=|iO-kj5o-EV3>s+u!t#t4uB$x!|oF%_)n_*Q}R7r7if=ZVv3m zE$BXPLV_0`$$r2euJ%A3{{XrN-z?Z>9T@t8jB!#Y!sN>^O+ZPdAF%nH2@R((Tx9iQ zWj>%mc!=2RW;~A~krS+*qJhchf|@I+WBm}W(`Pxf5)O!wlen|VdSs+AD^hrFwu8Q) zvPTWCN#L&PJbfqU0g))R%kP$en|?@$Gx>tPO&jWJ3pwQlI|Gb*Trgw24^t$Q4H_`7 z#aAc6QL4kP`)5{(G8{coi-=7KS$GTR>f(}14OFDxU;Kw4av)en&(3h)! z?L+lXpi}bxK7r3Syfm-$pLlU$|KqkgJ~s&-Xy!gr5`NWY_=@i*h{M9~-6~dr+)vUf zwE=K$&&3C;wD5Ng#ym3sJ)09OO6~L;wi|G1@si%Qn^T-hKOn8v%rGienVkG10Z%Zx z*B~vJmmr}|bM)+Ae@}0c{e-)ymUJ%urWv`*yJeSWfk~h@=W|x&4ccpwN>NNvY3eE9 z*lIGP<8XsiDbRzDWzR-6=(M^P6*YH*LEQH}+<$z{gRjLjdm1y+Hl%u?&J&vCHK*Q5 zNWcC7qnZZ0y5yw-T6%0T?3&&i%(uoSP^s;#9DuCio>|~i3);Sch?rtYPOKHPiIobq z$T?}?QiLru3d4n+=G!uN2T7{%fQ+JW>y-Cfxu=T+ENNDWb81G;qs_1RYBg7Am<&8xD=p#&5x_H$(z4iw_VdKv7=#FzgmO3Di~C4@g%J zwK+k$22$x3YG5>5@X}oA?u#R9xGLBqvqFNEN&=Pj|M_~e97}dx+w$LAahed}b+qRI z4+-SE{r}A|=A^8Ut((}u4xb{8i>fG!s$M`Mb8p@~KTVef3(D7owDbqejuNQdiHdaB zR$%vfex(BycR;$AaAqdDuTe&)PxcLZ#jn3TMWwq>wUQ9#^(1wHJ(OI{unnvIghM!K zn-A!094hTOqYR#}rjdkrun*`BGzx1!Ku;`WxSPupGRQ!!+MhEqCxI&TglzS`qYsKM z#5KeDuv@4}WF08E%ys=eS=8G7AY=^lHsNDkg zh6u#MSsGoSoQ_+NYJBA^&N%ginkBdy`}#w!@#S;-GRxc>Y^y<;;np~tX&VjP2c*RO zIOVrqrQpXM8O(*5e!?S<3TIsv#dWUN0H0mQBqaQe&!g9Uf$p)<|BPyotxfxKhqM#M z`68ae!}GBTgL-4G81>^Z|yU=_#E~PYL4Ni-8Q3a^fJL1r@}Y*jm}arWW!Fpjs$nx zhW&t1&EUAyV=C>WHU9V32d+?+3q>)wXr_6 zrS$g$=Ew5x1yw%FT+p4nGx3}zvqP(aN$l(eS%;k;GZ?4|dLU=3ME9mi7>NyY zCY%?9VmC#UOkm%r0Ch;aQZo{!Qezz-Fd;BnCtC{V`!;tvP(HpPSIv>_Wv^v+i;oF$ zRXF>3Ky(AvPHRAhy^XaoDCiq>?u;tvJE~})NXUaqXnw#wqh%+`3HQo&-sqv*#*`XW zk8ogA%X)^Lx+Ay?6!|Tm<5Tqw=HMiSN*kNsvQCl^ao?;60Dlr(OCUa)lsCt~Y?*bk zIk;*^pw@}@`dcTAtPcwrDjrF{pHBJ@gDd+6zjdN*2etChoi6abPv^*fzpl7 z7+%=#FvC0pP+uNFTn@c6#$=|wLHk;y>pwLs*|ExKNPn@MPMBiDO(di1_>Zsfq*UKC zF?vE9zFxrU7)}KJK082QKVW{#$r{w7hJ6+RZ16Fv++lY0b887#CROu4&V0N>OzT0; zu8@4!OK?m36k}bOT;*V?A8;z+sHC#%$~wzhm6pp@nA927+{&Qi_0)cSR0AF!%vKakx%YJ1^xaD4J7WI_yeE|FGK$N5b0BJG6zts|RLN*ZwI z%WH3d>#!zZj?(%L7-?=-g6f@_{oYGD!`{YvgSI|u7-3W8)KY%_i?=EiexUx8o*2wj z)aa(6Bq3&&jBoJJJXOHnNIMFn^~~zoj_B-0m&^#l1LoohsPvou9DZb?r_D*cN<&Qf z*05&+QXMzh&Pb0iVTx&kti&apH8$O2G?*)fSIm{FY%qaZM%$Tfvh&`KMM9=ZfllKW z%t<)ms)SD`rzDKU*rDc!-=_GQQRefCb68Uur}tNA`ypqf4!gb@2}}A0y;F;Fn#CrR zwfR!68MhyBqM|FHPEj;a=-H-}jAywG#}`i2(?h{iNsVduM4G!wX^+%7&C;*k6)BvF zh;^P-6EF6Z?qa3%z*~!{bobXmr*+qI=NyX8YfB2Katlrqnft^1`D)Y0`JNE1_jH;MdtRf+aUAp7o%o zyY0eid_sfM?#JxsIsfGnqM=Q5p3`9$sL66u-eON9A|cE-z&Mh{N$Rzwl(SzfZqkO8 zyumWN zVBDUu6<=My(8ztAsS`%C9~&|*2juLR>E4i zebdspdh!I_f9p0Xeze4n4uApgfXI{G}MepQ^1k3w@Y&bL~Mitfe+Q8_+ zD+LjD!cgO!dXdd==f*8?hH`4q;c0_p~ zgOiG0`GmQut(DMxs~3=8(&-k1NtU8r+-=O3@o1D?(BX{=9m{E` zsR>k>(s$^+O0d&=TQ2SiQ(P-(LoKA~X_!z$W)`ZZ$h_zKOxt@K=t0JVb?Glzp&6@ze5jtKwV7{ zy1HYZGtvesZoypfXn^Wa#$JS#i4B5%gA80!8T&>VX9^h2v;f!}#62NB8iR(jRQ6oZ zjmaD78{~+g!seAX^7h%_lreF$`hZael}5Nd1tW`Lmz$STm3BZ|8*t2)S)&b*!04ZH z+@NEK)Y=Q!^>>MEVG+V^<2+$TV#Wb7R%Nm>YC>yigT!hT=8=K2XGkNV!Z*~Pns-R- z34F%aCZuB!(Yio|3MaZqFSgqvI~jdKXJZao9pRvB+FpSe-u2_jmv%%m8phxwsJ;)z>n~ zO&qv4nWOsK81V~qEM|;8hNA2~Vc1POhrKyFpk9I3Ft^V!LU=VE?3gFZ#hLIG+PI*S z-zt-X-6X^oGA<7Lf)1mlmOZwT1cpAP-yjZO>Tj(}qt(RVm|N&M0F{ z)J(+5Ok3Ge-ofGrmlwiU*~yStP=(;2`lf+;c@@6iEV)&0=*|&H$UN=|HM&rz5AoZL zx2#=#8`R&E9XGYo6DB9Y>Zfq*?Fag{P((EqknNvT%;LU7myaRN(mtBv=1xNLQAb>Q z@=05vN#Gl`dNQFPf!0tmC47NiD-OiRANEEPS4(tzmGm@B3yHo99Ph$}Xr8BqQl>Nx zdS*<)!R|5UmWpqXL;s-?Qu}x4&D~Iq-mXH7xGo-8iuthxb33)xY_aEB04xSNDSd;p z3(99`D?Jeklug5>w`uQBmJJM&N5V5%;;hF zBp>O`?e!O!xh+)kUiL57W6ZX$h*ADK^lE*}aH;L!56-#-!tY4K0+9l%?CeP)VTvSs zQch^!3HxxnO%&{cp_*(k7gL{eRi`J^CeBa{Y@l=56Os=G*<&|zUNd%TY`bOv(c3>E z&($f6B35&TVXYK6;m{{!RF*n*@2E~w@^fo2u+j$V*>Cb_FygM_rMCv1T69hnvktARdw273mFz0j>uGQm>Eo4&(5 zISQ3|aoO3es<<`*ym4dFC;Vu^tZv5~R!d3nExyVFa_^(U=Fw1oJzLC4NObcFwZc-{ z+MVo0`U=kjBW|MgzFVK5Vs&S}#>B&fH~a+L^_&Hb+87#z5%@bcv4B7>tLO z45zt_XpxWx`Gg)MI76+_b?He+UwT4H0P5;`v-IGheqG%_#VwfYiHPg2g5d#FKmVR3 zxg8pWB1$|nsVuT6&2!}nPb}vGH94F!oX+9e0renVGx31Lm?LbIF~CZb<9nEQpmPc3 zh@}r_3FG)F1y#{A^e2-Eq5zJ{hjqF#L?1CNa*baOtEm)+~o5wy%+X>iIJ$x z9b)z|L6b`+MzW^0!+OBxl9&g_k-cYUm01Et%~_EeuNK|uIVR9LT48rc*+Zp|uB>1gWoH{@e*A#dWof>+ zv7c}|vP{#X{^>ZQ`G86yQ4*Ck*}%IoA>lT%vB8#!&u4p6{7>ZL6~6KP2fmO$r;~Vr z|1dAY7?GdcdX_Y4M{XoSns7(lT7?5t@ zoCKGUUqQS+saepGPMipAEVNl)$N1m#^&S1qV0 z)gNPC5%vwH5Y+_kU*<3@?R_)%XstBiKa()@8>A&mO^mzr_tH@=U%yw}0T*@s+|It} z`I_QXdg2iC>r1^=rd0+wo^UmuVtiLjePWM}X(fdUKr2H6KFwN8K7^Swh&+3&E@p)6%6 z1-^HSeAv06;0n*IsymK2^K|I$xG?X|67szlPP~A;(8)ZyQCFDV`xFx zEH9g&UtAbr1MTKeKap6?e2vZoau!AI@S=Cw*|VlN{MY8g$tPH`e!fGD5>&S-&*wN+ zBzQt1>};F9!j_V|42PXA58a7I*f+?)2i03V%I<4FBxoUJ_h9E0Vo-$C@UUZ_O-KuY z{SFDU<>QPyNOK`I2{w=?WQdVE4TQ-N1#SY)pX|VhTaZR9wToZU88b-ubiVNlMpz?j zk{Pn##-}du(*bRHp4n(7c@aWt;zu&ShB#Vfca9{LI$PL2BsD?7ktfNBeyf`E2Q{< zoNF1?eBFlxAI1#(9e$H6mHdzNp}VP9=?9Ezx-;bDPyCM1=>aB8Cv>sr22%_32vWo~ z!Gj?;m>=`zHoo>|*DB*gGP<|nZ}2R}$*M~xu=`q4Es9Yq6UL(K5cgGTcPOI{4-UNL z`kSeQhw2L;!`{5$z?gN$RjGr1anlur*(h_~N+&@N z8*ZS&4tQo%c65s-KJqphr|-k>A(;Hw2H6oP^=MMw;bX#BuN~Ujp|+zscov(Hpa>gu zC^DI*ld^b4*PgLT!)Q3MMQnzz(D&n^#$8Lk@it7Lv|d2w5$NU8!u*(pDtDU;UqxCV zirSH&;xkO4X+cOJnv;y&pcJ=jj$}fLCO9{+@*F5HaL^ji|I&FNJL@&q#1t8{NXW8m zq0$a$vj@Un#XLDlLT-zZeS>)6Qpx?WW5B@_Rer1AE`-sM*dp>rf^(Wg(K}4}tN4hP zuEA=L@&j^00)Ae8Y=itZ)-2AsWP%cJCKz)r41K|f`tJI%WIBVg<6b-v=8oh_*O>nJ+O4=bKIaFUP?)U7We>0&y%pLU?q;J87&tp9JR5zGi2}kx0nI}k{ zj6>JULKXT|*f(f*W#jEq1WPXSjMpCo>M!t;&Fbx>7P>~Qeag8#3C{FU?TXyofv*6K zU!1S;kV!}tzJ(@^Jm5vA*d zlhEGkR@Dn~L?n~baA9UuUTs|Q7ku4yHZPsIgyUcfR7N1%xGIiyiV9V35XlV%Z z;~+&X6uHYlk=!i*bD`NiC>wM@AvKez(1`|_;C2n!H>g8JD*b&_v-_a}b||XY1upPZ zTy|&0R2K~&<7!Sw(8r>%Xdtg(I@E07fxDIM3nMb$k?-a4)2nF^7S*JYpk_g8wvY}e z?Yk@Hkliq00!1wM4z;FG`MUYwc%{-9Z^P{vFo-VcM31gULAQ)Ng+f9$G*F})bAB<)IypFbKcgE{M`)4M1KBOTyKu>NrOX8KD)$a?xurIU4E@^?L-w|t9qK(mC3n-znolc-*41nd zVA3z^VstbCGCqWLhf&h)yd#%|5!iWYqwEZ{7w9=v;BP_($yH3OH<3RP`<>Gy=s1AkD$zJK1dl z>6TewOkYT+T`=ZFW7k4#$HMaBs$z+X22P5`K@VeL25yR>1lb{{9Vl4?Vh` zyu_Qt&8LfVLH!bMN3=9>G)AtoJ>}jIW*Jgr77%e#&@W-5A_du3L7toi)uFlJP@|ud zT}i8CGYg~9;VS)QX8~=iqmY|lNyxS8_Kz#1GvXUT^(Z_gWAEewFA}`#dZ6?LJ)-!R zWom>BJ5@?T?SOaCpMcI#)@VjY#(GE{^L2yt>wNmrx^$Gn5W)Rn6S+aAuH?edIqTmP zw0gi!w2%a!@_7YmQc!(oeAF(xA%x`efXTEQ0ANobS~3l@NV%dz%B~Ny}@5vpj5`z3eTwDb)K;61O%d* zHkJbDil6KnWsFc)3}3-4x@P&johE2PCIGPCA-!7S5iaAq zC^xeh#pK7Unh_@883l5gBdSjsUr@hmm#4VtrK48LdxIg)(LpQ6-o*-B-1RGLt*+&@ zNTLtH%AS;}aEE^_Q#_jS_^kFw_L8#J`+|H;Q?mUcY<2eZM?O#R5VHO80v(Dlv{b-! zF!jaITA$|P4&7Do&ggNLwc;?HcyGq7V?d0`nRrW;^G$q#K6*;4lHuE^h*k==n zorn8?{n!j)cxwaYre4v6U`e^}5E}@US5BuzX@?vJN0SX2_JummD#9%e^Nkc0KVUV} z1~BqbmX)3Zph^$-hHxigHsUbM4)G|C>!<8Ij}VxTvoj3HSBpKGhb`=PsQ>4jDtknv zM|fVwcp_$OFuQ%YvU42*2@LS6a>8il8&k?YBFDLW&+l6*J9LfrPt79z zg!!=qJfKpnGI^~ZKt_ZMP=O&MZ&bL4SK7mRH|f@sny7fI4X0%$tpi; zw^*&~!`4N@wDTSIx1H6GblVf`1YeTX112l3=|uWcCL0*+;?xJq?9fgJmBrplcT^#v zGf&tz*e*Tq^C(Vl343G1yTRz@hEb^uCL>*#+s#Bzsr=j@gnL8U0*IVcA7-PU7w$XEHIZ7^B^rC@Z>`31z$zBKPqnQ@_RdTQE!%HT zm}c(InpGgp#$QJj)sCK^W}=0CwAq^OPOr^ke)tC6oOI;T(bZ9NN@Rl;wEjvc`?vP|N$hclMhxM@OeBt<4=WXiBwMT4+tk<;{M5z!n-FKGP&G zj+tU1z+wUlTPk-%4-fOIOgA?>$>KDZ+$YS(-na(Uy|R@JU)VFhBieI^E<7rX^E$GZ zHSXT^PdvX&GUr-7R*t;+M6I&i@`N19mD*s23r&U?nfTegpU_?am1`=aGnd+>+W#g9 zFVcfQP))?Sc2{GSdukDVN7Kzb)syUHNKvzd7~rP=T%gm%$yM3i?ni=~YLR_MSUNLl z8!q$TR;v$X$-To)`n}L`*s)7|?*JNh;u05V{1K?&| z#YK2f$nAFj=bg{cVuOBlYmyj9MBj88`BT zX}yVFKs`F~qR%L}L#96nJ4ZohGD`R2Ky^D{bu%`i^wlq|EE8rnxIs_7gt}~aHh21b zL$kU;X9Td%fmwdtJ$6ZGKR#h}^X_e_lv}IFPGQ1YJ>4Lq7u0!?8R^a(OyFvEvwFg0 zHLVTm1g25Orc3CpmU15Ig$MBZa5$*+;;PyJEfOn|XfXcG) zlpJy51mD0;6M`;bIo1>dq0GK-u3RIdw{abha7MD$D+(2{3`t8Tt-wFi`Ps zhu!EJ2@djbFVt^ss;DyNMVG$`#zW-3!|!I4?c~WQ69W7bzfa8O327%5!_3{GV<}9a z_>_LasCJ1kqd7Z?pKIz9P!85mD=WS0+y2m zFOUiS4!uuUYI-8vpHyYNVWXTK++c(`^l42Ow?R!3@^Ay(8??5VT~UrLKyNin0z(4aC(KW2`lWX6 z58dFF2|9o;pallCH!gl?1e5S-9PSAXq{2S?yr6q|q6x;~ZV=rt&ekRlUk!o@c1wma zT3F~Cbj)|bt_6d&*V$uq$GXXW!hEeuplgnyH^`5v##@;Rx%T6zMj4e~u+vbva>FbA3uGJ-^Z& zw#5ujaBoQa5TawBWO_(sGgLmIZ?2{k+B0BJnY+a>+zUl7ul|`rsBD+ZO~9>{dxsh} zRAGT=*yqQ1RWa-b%-5cOjr64o{lU*&mqGZ3EJBW*_kw20x_Blun;Ucw6x6u@LUw=5 z8$L$(0i&7MnMkEttGP}L35n+W^#&btpr9@AqoU<&|}aDnum0u zyLa3Koy-f0D825`8e1@)NS-~)P}w`Q?R%7=Q7%@_w1pmJFppQrZxIKri@G*9l8`)i zm(&AMw)kSa^I`Epb(%ne!H^dK>_8L0u+H&{6>)e`Bktjpa33gYxqK^)Zz?->mjn$V zvN!1Yeb_xST6U*eU`BPh50r1crAEhjl}KzbIMaHg%6xmmxNE>Um;gOg!*@!)f%%dg zjTZT#yc#L*4RHgBdotW0T4rCdA;Cvml>C5nN4>?Rwc&RY5^;f@VD1&_0z;)-MtbK1 z37IN=gSJ4}>086jHHIc+b_u(-`~r1LfVB-~%~nQcrgnD7Vzg8YOr_frz*skPx*S&e>KtdxU?us2Aa34nk25!uV|)u8N1baq|uGOL}(9 zL@+xenzAP$uk$FInDqtPNQCt|pf{UYyxBnJT}(A_kw!8B1;1^xGA4LIolUzsCbMfN z=}=CfUO?uKEv}VGr!16qZR{Nw&9x%dxZp$EB;=ZGeh8?j1-(2cmaSSd`qeJ}q$59| z9TxVrN1q@nJ3vYB*-iCMjOm1&z?FUCVaBubYmQ`cKj2?wdETjoVy~Hmu;1Yf9rJW3 z;{F(d@Ozs{V8sD-C~RX;sX?Th;8^a^^9nh!f>s*=Gt)YS<+Na-^b_Wn=XT}Lj|6|p z2cls2=9$6>Gx$+eeB?@cHO<*(yac+g+!t8x4<|b~AqMiG1K%z%b2@w-Y+%{F@CCYu z24&x&9bak+9Xcz$;A|}ll3L_6ijE1K$cK^5I$E|wr&${$b_n|%Ty&b|7)yfA!3$Uq zk>e53oIt3tT%A7WRe=$=U}TN$EVVv6>rs4sM;=^}II}8d;ho?$rt*NE8iw5{Z)JPx*aQrh!hwoApp$lBceq2J$!QKs z?9ec1xQ}?luZEk?U8qQSg6h6Nhi%~G6Z1teFmWaW36$IrtA2|5q%o^FR@Bjq1UuXd zNc#+XY#em=k&y7A7hb5i1v9X+baRB7Sf!BNRRXv-L|1`^@v0{8gqG#SF$iXQXrmq`BOoz6#Wiv&QF$ewm;fktepO^eW!<00e?>Ip!t#|PO9;K1IFA$OeQ6S~F@bskTZ z-awe%aoF#WGi?f6Q&S9W16eul&(|A_H$p%Vb7bp+-g3zsz=euCpzV}sV;5SW|Iut2 zoU{`?p}_>GGY(0|5)m|YO+Dg*IUH?)SCMkn_U zHB&W04t4Y>)E;vggvHnnAauriatBbB$ohQ~iA>|_xpr#=a)bf8}!&;T33 zcc#jf{^5k*glTCTB<>=0nA1)XrmJc(*=!%s&1WOqi8h+AM$ab83v{cC@YKAznGntI z&=c)9c5lr~LNn^h?gb`R*Wa!(ntAEi*yz4N4t_$N&Gh8W)m;;o?sqt)>if-=Zg+<} z#+^b>sU1k`P3xeImDzoHCK!_8r#9$JSt^Z5cAHala}(9T&=+jJXQnHA3o7}1Aa12Y zwmYsyc8kH2k&(SYgCD3Ox3|xD*Vh+)ow1}h-*B|$?Tdb6Ba}|JzCs*AU{587PRBJt zgChGK@~T0E#qW^rduI_x&Axz4jUC21G|4dbcPiZw8hco4%yHJwR45gvAQPMA7$Sl-n+uEGgZdb z8xnl4U3Q@24oL3?x?VE6_xm2pK>7x0-LUuOyZpNMC6S;Dq%w4>3v}8G?7LX`^?vUR zLtSo&h@+xh!Kx}6!7qKEwzmy>HdSi8kxDxfqKel-S>sa)^IJ54DVKgv9koHY$cH@d zxT>@}Bn$x6*EHsH#t##;G-hRk7P_b1SFzH=#aJGh(d+`s3T-4~&LO*MALb1*WDa$e z(odv0QXt!4rotD*1PYm*4m;By6C5IC-(a)pF6m(>@&x<4v3uD!XjAU0+OXr6CSjy= z`N{=Ol~Ls7b{Pt?M_^kAb`cU-%j&P)A?s~Q^A?YO??YlH7?ZGA?{G?@o9;u`LNWVr zo-aFlimp(D#B3uTW#~+CO<>4*1?hfL<7rFhIIQAa6c`x#f<#fE#?Xh{)}|lu3UY)k z+^bD^S+WUaJ?t-GJ?+q^Bxv&kQ*aBm)UeA_X=EAUKhyH{sV~sgCn4QsYK;Xr5?r@c z_z&a56`plkcKp^a=Z&5zmtRvsg70Are7nG0Oa~PU+t1A@xOK1r+8UDM$SKPD6t_sN z>=U`gAaL~qkC>W(sgD{PSA2? zzC=9KB;eK+mOijwkBcFlBI0wh8}1D$iIHd|GZh!3e|S&0={=Q4al(y$QycbBm+q$+ z?7t_BXty;?T`$E zlt`I#$0y7NHTbC=V*U7doG?`(9Ag4qI;s$k8JLXdEkIpu&b3A`Q~kD$4RX5x)UFl! zxv%z_K&`!iIxa2o7Gk=W8|PM2a!Cme5BU1I?=fFti>c>~LT9L!K8D4S`wF?A3fMgu zWskTu-v8iUNuN$)sK};04ErREgUF^E#hD?0%ctUmj3uL6Rdaf#DtC11Ei;itBH&+e z;T4(@60{fkGg_%9)XjlD}p~E&WUycFvIjfaka7PX; zZh&Z$p=q(OXM%BIxa}2JXe&Szr9TD7{K|y5AFywbQ>#$_jjODJ&k3 z3@Xwoge2%iq6_cQU*JV`^Fjnd--vycd}Us`Igy0=R!_)D9;lw+@Ap1GM?zME{Ca~C z?j(4A4QCZ@i8`9hiI0?`>SIHvds^~znOs{;w0v!Pz8Y%o#LI>Q%e+XIeg z4qd0s#kBeH4cb09-Z8_a?D^iOw~sR8fX9ORXe^k;M+jY$!HWWnrE zroydox$o$g;nG{d+eh7g$+HsRumVCXz$b*_v*9i4e|#jX%L2%~!A`d$*aJ{plFx`* zVKFTa_)hhNy^0WF#p01*-#-C6`vHWhq)hn0=`dE#CTatIKo?Y?8nmh+-wyedkL%K~ zpDVg6va+?4h95JO~dsvXekg{G|S@Z$|db`N1m=B^us{U&-6sIWqsyR$kk`sk2Af}tQ26#jtBTn&+V zp2)g4wnjT6A#raPW zcdCv{*z2Zdr=(vy_DD_6P3UCJw~E8Q!BcmoAv8C)#sT|8f zZ`y^Q>UoITg?cW)1S8kdjg`KD?VrDg?3^1QOh-n-?o9Opl>$6Ue6iEvhuv&C<^(c= z13if}-NFSr=uYEQW`j7pQtNj^|HCR+#I@9bq3a){!>9UBgP;e+M+%jEhuN3~mElrd zRKi9@Pqs%tq1FUyr(x1tj;=d}y`6Nyv6A%%{c&2nn#W2$p)0gdSuUzB9*PAUo$=$; z=z+Qu(NOv@JL9&-ZMWw04%6GmiRHZomu$HA*Tak2NfMZ8n~;%cgZLuwLG{f%e~kp5 z$TA^zGBEUkzQm-kPNiXY8P5buX-90t%iYP-*dSvyVD?_FaBq+?RO-~2(zt%nqa9{E zP;m>Y$vWW>#VH@jHX8GBg=CvKn!+(}=92_AHk)9BFAV*F)wH7r+_Z4GeXlv(8^n>3 zN?BI8r{PFo_xe-<9Rtj?B%g1H;*f|<=-1ror??M&0#x&gzYBDuqL6|wyC+;s&=kYI z!|KLhKin7$xQXtB`G$;wNt=<%Jq2Rkv9BVzReK@#>PxJb%Mbe?wqLuC>4)=M zKIYAYBt1@co-eyV@+qVZ3_HbUf@6ZxH|RrbRUGyoX6Up*wxPPWj+~I-ffy2U+~Nhq z(hs%YbIkW`zR%apaIO%$F>u%^u^asknFvX(OXjcBe)Ak z^X&yXSI9UhY|lg5(7mHx;XuV5@YKB0@lM&g>OuDAEv3?3%Wjr1k!}lz z`#@9Yh$a%nI8o-g>evT<xr>{Q5tqoeBJ|tmS3sPjX_#_n2!>1iI{{>l$X9kMpmff zrb%~jkiFtgn6G^iN-7ifX41zwO_(0BLkw!DS%pBlen%48YIo>puk^!CXpzt^6Gy&2 zV6ysS4>FuEy7(wWxLf2qY&m&lSygw&Cp$}C7R(8g)4YfV^)PX+Y|5VL80K(;);_9p zDR8A5F($$Iywa}_8}G%eQfbx0t^>jMV~6s@P+)W$BE53BwGHUf5&YjBIolv=f^Ax& zQ|44nWifg}x27CzJlYQI+5RLrCPSa$#|xpZkah)RgMs%x6pTJF(PbLsJ@yw;YogLht0@LhM;SZ{hW5LE(eTi zOpzp}hf1w5Uw{eo25l@TjumVndUD$Y&s8O#3-)VmiSe<9u9co&^M1xkzrnox279jG zknS3z-%l0pu%+l;p(^799QIDT`TBs>t!3P6*7ECh+j6vD-FKK$GX}h*N7--37Ini< z<;Q@@N}ib$uB=w|ugpNriOeU$l&}RZS29HyP2L0tMP+YrG>1B>L^bylhkK#wrAxz4 z;a!*c(-GE942BF?6W^eN5!9p4anrd8Ji!xjC+yb*hN1elPNioc#0_VZSNab7V_rG8 z*fAiw@ofMuOkbdl2_p7vR1Y@j6wMc^Vx2LIClLsv*^0zuZd|Jx6&!s_J;<^1VZIV!dnGg^QK(kI~+WLcV@ zne894w=?F3w-+!?P}ij8W26P)dHPpwpLDxG2UD7`&R0}6d_cl78#{z(DEHu|Tal34 z2oau_2rp2_8Hj-!;i$quJ%ftV%nKq?1YD6lG_`ltcT1^k&{l>|!1QtQ=`f&2(%!)( zgo-<$y#u&vHgy25>AfR&_Q~5-W3q+Y7u9Cu9WT&3Y@?Xfseigg7{_xGaCA!FpzoaF z?qX<1@%m0#r?i4LNRz~Eo(Q$Nh`m(U-^P4jk^K^mKF}MbfyJGFKS; zsLI`6I-mxFgFvfUd3l&~jp?O3#JzH!f;DX>jjEF1?lM)`p*|bbV*r@t}8@&b*1yVGE4=429V z97ow3v=Z2HbE;DMCv|aQUodaSvgL+Bsrg>cL}GH zY>0h&FnfntMX&d{rm0+^Q!EF%hOgLq{*D!<+K4;g2Xop~>|L1k2xJF-Q8XI_mzrQ^tJ;^XnFQ>Q+&k3e zRQAd?m$^kZLZJ~(Ygg3;9m!m@TZQ_83z39Y!47*tf_MH^8E=f3od4hd{6G8x!-kG2 zBNKj#g~3qavM_@YrtuEn0u5j?_+(`-2`(XdI-jEve!W5a1l0J>q1#(MHC<^7L61r16O8RtuLtY%s#+l8brV5^>%u zjwZj1Mt;3RYr&z-E-rn(Hx_w^rKTe|)C{+^!ca$9g?oc^KdJQf#hx~k%Ow1*_M8K1 zv=|68EsMAa?}H_9FI2?_#@d8A7QrhdULZsw*)3V4h!GI`Bo}(B$N}@Q?j}^vsF&Sm zMJGY_4SE+tsJZ7-di(U0_=c3-ZZWFRflMHT6;%!x&Ag{R&Az?N-!8kh<$+vfJ*UGgHwV{INrr zP@{N4G@}n&^{l!hMA;-XE5Eq7FJLwsp$cD>-Ssl7fTISopDhk3ccsB-f7|P7LMdQs!e#efk#v>&-Is@#T{zOp~l@&TFzkGQ!D(05$3&8 zYJxp&F0)tP1e>_=$e|Bxal4W>?Ct36(h2uM{kC1p30;|UlcBnCaRjn==#&U*@3)k0 zBSsZQ)UaQnk*+FUP0Fd<^DiWLmjn`KATyelubjKV`GCwcV4rs&rQ`CD;7PNvd%4^N zhUlRevqyZ42tQ=^^t^(OQK$8WeeQ`$JqAk8W%CGgS2ob2HI<$#RT!ll;N9StdRfS~ z2%t^1Ku$&cVhY22N3N?NdE`#3@5oAY%AIOZGtdGJS0I^suNry$kkJ$0PtgyE*1Zv8 z*ij5j^9na5c0pD+kW7?0(D{qJcaRU+=AK>-(GJ8V7tP-tC0NJUkMxSo;XD%XI23$B z+ANTsf~a|Oh6K-}kdRl=UqEdq_7bG4bfbR5Z3}}QcvGdiW$MX~;m6g9&k8L8&}iNpDHouY5alp3`O?26 zA=VDr8`Km?UEDY>V#1Rt6elDnyy&5DBGp!Q6<0A5vO1Vj9GHBLxztmEoh;|)jC3c# zLJ#`}%kHDj^K+}%+A)7uu?;+xDZ6n{wa49E+NF+j+h&wal^)Px6ZR}JsE*-U6KJFl zNOaceHPkUkhTT)CxeM_lG1#-GTxq&Ah5VuF zWMF=5L4!clLc%?vx8Mv;zku9in1bWCC-3lCHt9@e^$rc1TqLj6mj|MTHq}_S;;$ctV5YQkgf9 zZ|E*%nSgP50onYkuuqz0**&Lbf<1??Z;<1586NP9Q)k?em1~9BLW|+!+Ge5R7R*)5 zz)s1%e~X?a-AZ}^@foGo_CsfO5pml7!q5jYrIovmE@XxRu)$uLH$=EqVrMsyGYEsx z=ZT0XhdG@Xva4Mrcr}FFK!qK!Kjp?9%h1qi>NmIJK4IQIn?N@IfM!3Qv zDpA=s$dr-&`~}P#$SBx3GwjS2l&0;HeS_~Au<0b#g-v@IDw>J9RMv^)ALJT?{VED-M8xBi4~@0WTAH-s8?+Ai!T%x_sH zYTmZunoYS=K@aF-Ov=JZHKQI`$mfO}ABcyqLZn>FZ0yG$!{L|vgi*{B7Li?52&~vA zEGA3k0loMo6;caF^rKyfD;a6ot#Uq{r$&=<8U7^AA4*| z;n`>)T?aA===g+sNm4nUUR@k8OmM~k`wcQ#c76l3p?zj0z6?%69PJxKH>mc{wPKY7 z4OtUjL1v_(w!JVbuI@|}il^aBo&-DB z6MEN))Vf#<#I7}y;1)pQW*3NRdc=|Lwi2Ziu2UI0dTi(eriSVDnB}s2J^}W>KHSCE zCycOM$_sS{Iou~ZEeVGEV821!BQoYCa(O9^BWVek!ENVz!d#mRl@Uc<0cTh8 z4dQFr-B}BtSs3n<;T+g~{M;v*56IUzNLpCRfZtbfJR*i(5)2r>fUAO7>@B-nqhSB* zNW|AWG>$HHgnJH892XDn14gx<)<>3R73N|V+@e^H?$hN_lnk;1 z^8v$RU^CkO4R`zu8`6L&KeXyZLcw*#jrz)OyVk3XLlrc ztWV(^vy|6*qo0PJ3_hX+@*4YwSysXZ`B~eg zv#2A7olp5HaOqFTXL5+Uf(6 z3baCKbF-y|gp?kA-Jf{CT&s;R){Rxg0Ws3^$ngs}PBso)**)rj#vbPL>k~$|td!B_ z2w|2zFTQJ${1FCgYxIQQt^re1(_EP7bc%=6h&y4v&Z{=C(*Y{o3ljWZbBpvHQae!D z9ywX9UmO=!?x?a*sz|H6GU_#6eBE^&xDOc3`i3IE*j@+S_5^!k22a@8rQxU1oXSBp zBMLGXG!rS3-pwKLpVdtsZ7C0AGoqi2AwrTii}KAl^?)8_gzAK$TKr7y#(cR(pDZ)Q zYU#%wI;$>s-fdfP4m>fP^%J%~ofY4%?THih_V6pr-f$`G;u@vB+DYRZ@e82JWT+&p z79GgG6H$2?KwqMjzQNiX_nlN}&j;{%O$n|2fRQyZIj;p7b{n8Zzdz0cr#INyaL>f4 zoW=!q?pwMc(&%`$N=)b2al19DkT8nhAU43RfgR>57gZr4%vt>2fSYPzHGW>!Or%H{ zqkKZtqD?xRfI7>HBshHGr6v^fgyyLp??|_m$sTD2;e)DV<~#I~Re*+0A$!A$g|NZW zxKf~{{cau09Ns%h(etZxjxu}xALeAG{4YoDkL7fz@gJ^s0zL-XP>5?_KiT&F1N6FO>^5_tmOo$G; z%{4Gubz+Qit4n$)9{N|7A?Uz&X#FzrVN7ZX#@3P0EFLI1^spYx-hDB}P3tm&+P1Xs zC;@JUj#ZJGE1AuWQ?e`aR?yIv8i}pI9Fss%Cn6(E9$lP}{TLH`Gu4Fj1PkyE=eLd? z>{WBJ8=yj$6GpYTaZ+pMiFegK`ZQSh{(v5tKo}S6rNt8OO5iekK4jmZp0w-@IY`$= z@^jgCb%p2#v=u;Y7|CC6*GniG%%w`8ubm zplVl|z%VX*hE(_5Tp&S2vLux|CS)f}*fMmd+zZ%@|CwkBC$W?Byn)2G2STxi2odes z!HUjXGc2ISjuSLg*a@@qjS$!LP-2L#wv&)$o-2%Eo)$|)Y=q}=covH@<$@c}8}fqR zW)sN0GS$VEQgEy+@y8o-IThkO6i!Zfd@|g&<{KoR>2iP@hSNxD)2crt#O=JxFp*)X`;&w=8Y}-MU6SSSSRj$v(&Dzs-Xl_FZQrl z*n7xOodhk*6SmWE;YS)S^!Ag?7k1>KIz`RA8nVsaeS;OfQ1o(Rk+ktWVaBN=A+G0+ zbo`}}wQB9MrU~&A`1gSMC1VZBo~RUm)o5kik4)~6DJkrf$z*amvo{)BCOfP$c#5M- zf2}?$+y`tvX;BKNtuOW@xHB=r$E+>boOl~)*<&fRiH` zp$F8TfXa=^lhM2dr`3wEE27)s%Gt;#jOsYs5ssX=hvtMR#wd+D1iSlvRh&`X?g^Xb zc1L|nif>Y%ADmdKY^H;RFt3m)FMbU3XGK*N5t44Gxr<8ZS7TfHiY5s(4}SHAw>)OZ);z=rH89!b>3jV)?+36 z#G@+REta}!#D`?RLA=KhKUhPN8*D6+(xIEYfWAQw)vI61p5?Dh?Pl#$jdm_}D zArp+baB|e?$`g*u>d;>4J`e)CH!aJ4!hG!kzWBdOnLJ+SLQ!?!p+2}Ori&uZ=h#d@ z$`fg{`9+9TB}ZHSc!f58pNU-bpl)W=A-ATFcDC>?S9?U;_a3rt^OzsorCLx?ox;Au6oNa_s=2$w_}>1^#|J_)!W@l>{^|6_1Y;J= zu~VN#917j<^%@TTH#<$Wn;u{w8!~z*~(%zeDe=<+ri0X}T^&!DoUQ zeZuT7qa!z?#E&wwW!)j%2a0BH=|@!WuvVBptO*Kv1s&osiYY@x+k3>#=LxG=LZ@sC zYr92wTyjIQ6@G``#yN=ZvN&c9p@fq}qj)yO2h65FW29{^E{Z4?TPFJzl2amu8UUzd zSn0$P)AMO=raz#!Ul~#ABm}yz-;u!LdBmMCUwb8j)P}%hZ+zD?pGx0h*A5e|g=*s> zj20O?^6(VImN*JonLxFBAeRS>{MD?W4nGdo2JL`+L0bKoup7;Vgv54(loUj0OT`FZ z)J5RrvXk#!@W2GvPF48E*9X*%0d|@VJx_o$AGRo;&{&Ey(3Ml>Y;Po# z*9qJKzKwq|qwL%eNqOj+Szh*TJz(}FvWt^_#?57-@=Wt^dDPO1FEmC&exzbP&VK?;4N^7BUHjL2j@aHAndML|-dCdt3BUTP{0v z>dkZjLnJ%F9x`o0Hp^aNspQDXM7tYgodX<68*J`AxIhYBi-JR02Lvn|K4XT?C)Bv( zBF}UbYTbMpMbRZk_A(SD4@O&UvVFo(p=m zA9#skYjlI|Z^r%7YipT%YljJAO?Jq{4yq1U*Cc(&~WZzrrQO*X$^;|C5@j1 z0-hCigQ1LFr+A1x_^oR~j2I_GD`AzK_Rfexvy)vn-2vtfUDAX)JGG&IGn|{?8qy8s zYfq;^?T!b@6unub)4V_t%?fX-k>M3PCwJQW6Se>vXGd7>fIYK$!szAo0?2AC1a7xe zDLdZ93m835w<5P>>a@CFMfOxj7FSPUeYhobMrWj_!NGk;WL_G>rwvLn33{gv0#C?v zSL)0vpi>+qWEoxd14c9B08(cl#RDRiLPB=x!Tx|;2ja3(+F(~+!Ccl5X}R((Fsfle zA#!!$aHk)#Dw;tWm(Ff^fzgCjy2+hxtQu6g0%^GG{kh1o7? z5>w=ei*Bx=<+olS)|n=opBhz~Uvqg!A4GJdb>MO)lq+luoGbW*(JFVj(0?iBX3{&) z`TWcAPxcM+lTz{N%HAU3nV?8J5Z^L;4DTGO6w@!Xo_YW;Ab}95*lQ)j?VzRWZ6^OW z_&EbEbcaOzYrSyU4~Sww95ATbjFGNQchJ`^L%%~~ySf{T8=*jsqD0t%@~O9GLR>=$ zvu!OW2{YZ_A?7&L6*c*?JFxf^-yB=ML7N56_B0ddW{f@N`YtGb!l+hmRx~D?)lFAb z-h4Sgj|@3FjV%$M9W=pB7cw8P-x3;tI%kokYufP3(*~cA`KXt2bvj0wXh3=ZOW`|o z;D$N@Hij%FoFwEh9_%NKYVJCM+Q%Lhm-~rG$mI3~q=2Cw(p{6wh z?%aZL3C@I!gm@HpsHsxeI0yJ9^bHf@96X@TwaOgvz8||M?D~s3LI)(PKs$lI-Km)g zWXA36I;}4t4b^3o4ibjXs0XGF+*~C43G;QX`g11G5eRzoo&e5{j8h>B|2`cQmrkQk zf>A$Y@6bYK7BQ9_y5Ez)S7AS3HS?F9R;1A74x}@b`G&A<-rhG(7R=BI9sVPM3(M=2`!NmMlVkohr06U z(J2ysQBC0wh;$}1N9^|9x^(f(fz#_n7tGi1HoHt_noZA&gFg&zz`emgnsr0kUCefQ zJ=hHmOib>`%b8?uKvS|g;kOdly26Cw-Sh=DD54V~iFdzfUfq|1eyd;2`k=>K;R7mqXc|cadNdkbQ$+779(J6GZ8RC`fQRc}3C8 z{cg~vXZqV1a1wHK>IuI!+qV96HRzes+4q{!6Xv(v1w-Fj=Z#^fvD=ZIoBQ~;#xXUTWeQRH9UJ%3t>rGMCOG52!Dwd8 zAF6lyRTZ}@n~>NrU%!M$srXbM+#Ixuv=ipHGOF}0lM44-rNeEa#q^d9Qiz1ey54}Q zUbaR;BCAj6!V6Rv=PI0~VH3JjlD>DqsFq8$p)O`i6@SIB5whKXeL#AqBap68YoD&E zVK=zKkYe!VfP4+K%n6TR2~~y8r?JNK(w}_7Pc_#sJJ&wL-i#Vmy1{pc9GtwVQTmgS z48C`Ijr0?uTZTQUUWukMB#d8|9{qs1@)S1@BUpCtJhmvZqnHkJzzFj(V5y^wH$c$> zNYLc+V;eL;CUqKbw|JP4F8zQBZFr8crVf{(mE8TxS4dVHmPA;ufHxuc?0Xi`T7AH} zg6^L%r|yhNPTB1lX(uezFpIuojTh|rwkGJb`1Kv;Q3a^edg*Y?I%RkA3HuIHj4m}* z7q57b+hsJkPZ-rcoJ2@n?Cw4zA!k!z-=KR)>6P{5Av;3bN!=rULHQ-a;t(N36MjUa zjRvWq2lSLE)Gv;9t2kwCF<^~mm)r(p;oVi##@MQX-Rp$&wNuwXR5LstYc$<%@c4;~ z{Djle(bd^#9LGpIVSY=iBbClt)qfpFX@drqk-ouy+Eu7)BV$H*Y<%jIqPHL}u%pc< zvMRhTZO%j^`#@DptI4-BE~+?fh0ddct0s5oPJ5^>6^-J}XSRbKxt~Oc7+kvG1qGXD%>Fp?w&h>dxI1UwldfMtI9a0Zs2vQ!I_0Vmo zd{1%RVKSP|4Yg56q~~H`9HnebeL%MkBMb+mn!6nW%t~UUoiM-kU8l=&ZP@Fd`?`v{ z_((ioFQ|tjZ8`}2PX_DnOVXUy1=B~>|ALU4RESh^LR&GbP(cU4LQziLbpd_ z77rM`++qyXtx}c!r*pP|w+pwsJcjzJSRYb*wIQeF_BSoEhICIYk$Hmu0+6maBXwV12^AK}SodOZbm5 z9fap*6jV82KKA&p)NzSi3dOLHm3Ze*=qM7;XY5d3X0qH`E<5aG_}n($b~uH&Kys;)x*UPYkXu9YE+%L$KLD*Iv9&4xL5Ou~J@ zejMWLy+D|)LvDUS*&B4Xh}4;Udg!Fz8*+qwgRZy1?tNj^B{6yYZ!H^PQJhl9p0O2a z=Wx|mnNZ5X@jQ*8-l0wp+$dDhe>!XS?hK`!ke`|rJ$?!yvXh{T@5DgGpU}Yv>T&u} zBLSuc{H-N5Fgk@yCKc#ZO z7E-P52Sq%E*kbT}Uf4HSGs1?^sZJ)_O3%(fo8BFIh|Av|7Yn+biUd4>NIzh8tNrxs z&M4Ca$}ik^R5Q~T*d-_4jm5`rxx;+y;ugQWj%K+y7TZ8$m-~*~ybbemfmm9rfy^;0 zxF0Zu;Q2`Pc9kx_<;K4&LN6BMhR8&%%$YV&CNYT8TV@N^Z*&{vusb)iOwA_j2h4A| zUrs6pV%P~clHhzh>>F&C;dS2Br+eFy^PabPLPK77rIcl*=S32vXT*oSeibmfdDz}w=wCX~KGLmyJ}%%^l0JxDO-`wH5>q0T4=yIqzk z7k*;c515?lhDxPkNB1t3c;$WAH)!KT`V6_Qqegc|polwRv!bizbZ?c6)&x8my#WJk zkn9!_)is#9o@^#)CZ<_>?pNlcQ}`MT3ElnAPK5&^ihT~9!WyYElP2WH+%xwQrh@uJ zVd%yJnfS+1;OhhC>zH?_RBNSs*^2B@mJJ<TGc7ViB;l--h^vamnuc?3Ni+YI8oj^c3~!Jha(pF1 zg$uo^KZU5hh3c?_ux3%C0T|=#ig++QDZd-CkI8KKu*I+0@auBtQL7WWvl6OH^Q-t$ zo}Ic`d<#ZcBFap_DcoUi<>a~u>+%k>{ti2XVA;7r%%5W(S=|npoJ>pk!lISkJ-E@X zEoFnV%uNg_#@2=ImTAH~{~P=qV+(!q76W>P(e2CdHL8vgVx?OnWlXUJxkHULR4iI` z_dPfgzTG!U$(%4*^|}_QhM3CknF`r4U9xX*HLh{wd!8fGHJ}gZ;drQhEj4t5$|Nvb zxWnk?j$WzbZL=`$ghzIzKjAda87rUt`t69z0A}ZPrdWHF^ zc%*28$ZGO~PO_&d!hVM?!ARw<>|t-I#0V)|D&dsMW_m50E-Jazg`un}3q~_HX2AYU zd#vpEZnmse<_=x9p&??sN0t6MJDQu(1LnuPwgGnT(;arBHjFE@V|BSBCl4KSCY$c4 zGGR2|pjX&PrKGFMU*iJ=pkqN=p>6fx8ei0rtvjr+O% z^9u8^S58TtRT!ih3?+ftafENM?$3Ie0C62adqLL|8n<;YPVeUwm>Xb7$T_MT%te2h z()n7zH(gi1b8lyYGPn)@s&*+-9L)==>64qJJ?&|UV~9YdR_xVmOG5x@4a zAcT4C-AHFLK!W$(MfwKyrSNA6=ns3n26w83eS;lGWaFv%LqZ@%9-&T`AVGJUVtTjLULjut#|LUy zMsZF89P*ma4W{>IK%0zufE)sSJ^Ha zsOk+RX37s!l*%TcV?dAu_le(NsJ>gJ?5=x5Ph5tCG?oV(|LfyBE|KE2V~#^wiU+LU zKC1$f+t!>lg!_P1&7h7e5j8`qek4@&8}yow8+*rF?(>Ya12vy@f8IN%KoyTUt2kRB zmAymfD^PpiCG^+_24F{)7tkmvnzugTZUwsL67B;=vv%iYoQ>w>YY&aey~B>>apR$8 zmd^SMCQ{}T=G#0<$(jaUUTZ(XNO1PKWM3dX21KBv+}R9tl6UAJ1oaS}H8z(+e>_`) zc*3SWW9sb+1M|TF8RDSU4U}E;!1~OT=?(Evj-r;)JDFQw>(fEq2jB_m$+or2YD~rg zijV2#=93yF0I;_ey;W^#*;_Me3M5#qqo<2~)k9-Kxv14gRaLzJ*2xzISDCqR@^SooB0D*R=xg;1Rq?IeTOzSHxI3X zA(|81=99%_$%PJ{p{|_TJxI{_D13*U7Kb`d1wwZ-z6ttYFQBsqs5Fb#Qg+`W-GHR* zY|Zh<7Ie@AGGvt9yCeNx*Aey`bbUOk`fP;kB+%Do$7T)8*8|<60=2JBOHTj<_H?W# z^l@gW=rqz>u>Ff)p|HjbE#!V*zvu~DBYL4D-9gnQ#accF zRmB}pe;Y^xANDpcFOrQi8`Q~i#j!4)H6C%fLo^K_;tHv6y&~AhW{{v0$Iqp`JRuV^ zsgzgCU5}d2@i|kWcjROp;!*txhqK)28bB(EZgqhcgUgvUUsNKM=7MFL;*O|bh#1`} z;;rcli#uQtl+omb*{O6EBJo4x1|-DlK4HzrY-~f-gehoVcuQ)&L4zF#bDu|*$&L>i zt}}bs0E0k$zk!z8f}Yz3x>aM?aWka1S7cfAKpsC+HU(W~Zrf7W2M&+2y?pBiBm3wV zSv7TSyM?$x=6cG~0j+Qr50u6#N`&vw7(a#9riG`k^JyVgabOz9Kwq+qtoDAKV`nC? zW6`|MeuLf%WsOnK>Y@vaDWZz$OaoKn2Mqi2@L;zovNJNXwFhK>gTj_oo$jZ(ltl~^im#oR2&;c>j z)({?SrCXgl&{}#lvtB7w=f5P-|H6ESZeHdf(?4pfiex>2wbNlgAubk9AhKLQUfkKP z>pE_WaDy(Fz)t8T!t249;7%Bycrd0Eh-!`>ffGk3K@-VIvdnmQ^sZT9m9IPZVfMaU z6H5iKT0f4SJxoD+wgn`yVKp%t{4K**7?cYsZ+wrnz>t&DhQr=3_@062}W=>7?2ElOFnjZmZ^0 z8mncQQn^@#aMr^#77t{vU||5q!}@`&%j-&kWpafmCLaaPKjY!@myL~o(sCcrhDYLz zaI?OE&;&fLFu&z<8n7=jC!LI=c-)F7wEsixA!C*6_c_q?0=BJqqkVJw+3$N#5Yi8r zoN7Iht}k15SJTyw25Cubus{9THFU{NdRP*1Pu>moK_HArp14 zj&MJtx+9L@7YTH&h&y4w#+FE(ur7HdGbH#*tL3u6zt~ZzoU@pw>s5^;xC2Y}9Wp*c zox36}=1R}KK{wb+(0hS>Oc(65PmXQ)P-!Y@gN{;A#}+A_pED#>X$$q+qV;qbsye%6 zCe82|%{S;S66e{gkH+OEA+ccVv|kT2)CaqZhix&LL7<9TG%Uty4vcC!&57nvhn+mA z`4svEQGu={n5#0AV7nqAw&)7^DIifSsZ`7~0B2787)?L)4Psa<^FAMCb8CerYW;v3 zXt;g#r@~zaA|Vm7t_lUEspZ;xez>+DSvGL>wl*KoC3dLidx_bdZizdxkS|+WU`tfn z3Y^d`bo)Iapv*#_(7CKpnKoSL^#3I2D?VVhoWMSF7INl%lAm){c|p<4WiDu|9n!V! zJY+O;&?j`>19gUf&(T)4+qn>a!u(d=x@^9t$Q`ka%2e~*z<$EXmv@a%^|#!Nd|!&O zkcMe7GLh|uOAA6L#2I2M>4dEW+c6WuDRugR6AI@#N`JsS&7jv_mkx7F*Jfwu-ko@DS9J-><8@E_99$y%w5?Xme^?P3Y_d4 zbTEhNm2bmt9pP@zn4WzS7w7^z?lJ~#*lmZ-!AAN4qgyU-V@g$@9$oE6PO)qNPpBDn zOYq8QA+xG5FVs&pCGb+RQz|Nqvz>|M6ygQq=|JTHu`3Vpsgy|1^R5dlI~F)j837 z=>w@ssp*BGGq{mptn?KmU?(+G-_Xem368E0$mEZ~N-8BV+A$=UKrM%zCpE8-!AnTI zeAwx=B=~Sh*f)rm1GP8ogw7ilCQw8JLqFhAGD@cc=xSdWEG&pcMFldOqE5ySG+Cqoj+`*2Ru-_rNM_Ak;F0{;4 zp1eC!ni&%4t0qtdub_FCTJ4x2s~rjcT2RPEhV7+6R5$DgL&BH7n~mfNImQfiH4+Ct(OPXs7Q@vm#zUdfxbO3;uf?Z`0XryN_UkY+BKsaG{hk_L15Xx2q}KKO6X(X zCb)b+0_T@sLM*1#tSN^bqdV8jCeDnJh zltBl6{e&LB_+lGjB07q5udNBm%mcE`=S^x{QQ0-+CeROFK({wZWlBtZTQxA5^V2AHfVs-H<*mN*{Yw@l2y(iq}(>_E3~UZ&CEA+3c&!$k zYW$CWPhps#T~gc~YSW-jJ$lVas@-sT*qP6x{Q;?7VM|tV^g|QUV4twH{4eW05yv%@ z(cK0MJND}eF?PVleg4mX{`5a?Hu-=5^T};5^o?IU1&q`G{O3Edu(!d8(y=DdYtIJp zi7~7HF3fTi=KRT2ZnKe{I1%6|MP#|Msd{s zabcd{bg!AtMeyI^4;Ju)7kq%PH$RMBe9*|PLO&t`uL$Hq;D0ylcL()NME%c~!y8F{ z8{QMK$$)8zaufXe5q}r|r$F`8K+0Dru^z$6wD&{2Kp*9`b4%^ugtPv3L!sF<>9C2` zN!3b$8AzT8CTX_(NYYaK?N@m3D5GT$QYZ+QTGoHzJORZ;+}~W%5~?igqY?UEp*KXo z^!FWVqFsKUp^tjzH`p{B^5>v351LPHuK6@_UF>-x=FrH=#9N}q2S`7BB1aQw@eQH6 z^&jlU)f=+3G>OKoH2*?;s^Dm_p%!J&*2~*U!o(Mt%>|-dZ)}q2@aNXOO1-19W+;R; zn$qvoZT+o$FP2AyYaLP47YKrBzfkXJcoVzJw^$!9^U2Tq2=N6u2XIf~l8YjP{ql~a zu%?U6fM%>tY!7-M$32Rb?onREhqq;QpyaZom{tX~@_b?TiFD8uJ6*{2Fva2rgf}hi zKvAI=`y`eOio_Bzk(0nSBxLQ$o7b=*J;Z+u@z$``94Yk_ya)DIMK4nd3ej?{m z(3nrOei`z?PWX*Xg1;w zo2@n}w@*Eh6H%n%$xYF=xWd^+9JSvmBXyy4|Nr^Y%)HUHZ29UF$H8B|f#~SUNf>>3 z8~K=P7!P1Icoh&7>_Qo-SRvDv5O1hGoue4T+cxDk2YK}~{Bls6HFm0Uol&CzBeT3W z*T4qlxZCgIe8D-~!y>k8YoQ5UEZH z#q7@DyA$~v?wp6_wP59?VuM4xgZzZs{>$0vv6E`$=)>B{rnwd^p&eC>&V@DV9Vi9s zL+GQx^tuiR1|#f|MRiN;^yPH|WJXIpP%9y%)xK-N7*J4PhLr*MEy(yvC`h8g8!#?I zQL11Nt<&GjW;t`>Tn~(8eIjRLXnu4>UhNc*6=2oqf@&5m!{&<)8)}W_9XZWMPL|63 z)tYs$n0p}KxPZ4uTA=z&J@~8oo+#xtrLsDi3tIBl7VfBB1I426pZ*S843%^uHS!i5 z&7{k*iJ*2jKx_|14 zYODL80@SHtXNpCs!$Eac@_KNnGhUSS2HGLLmN@0*5+eG2{3eqNL>roiny(?zOP|Gb zWp&+9TOY;KTHt1ke4AF|jTTpwT38mra0Ns?HpFg-ps}=EgD!PO={h|d8q2mCxvysU zqiu{Qy5=(rf@a15)X^dC2q#AxQ`Po|ws|gNZaF6|cc7??WhiT#o1R)+eD}K{$x)2o z+)=b8EIy`(Uhc2r=g50QE&0A4s`9IM%XtUvpEX-JQmyNH;@)j6>m5ZmjusDVePd&A zvK}a<*U3N+%1Lz^&(Dlu+EDW4p8l%}9Mo^8YJo9lQBHlk?imSg88G-gQ7WvvTqS-H z!J)XAdK9Jb1~s4E+%L5X^8X#wk7M&(>)_8gIu)~_nhx)CO}@sIh>?0CbLj<-D#z$u zUV|#)XyCDw6B!2(5nC#69j|x#ladaUU#WiGFe!D0w*QZ>Ge@u^){(8RRrC@xRH>x( zwDXPb{k#912rx6r)N4n&Q9y#=1cKm%A$p^!Y-59wRI{YP2yb*)s8h)9IF{O8H)3~? zf#hm6D=)N2znh%B(6ofK8m8m0y1$rgv)CZ0d)v3o!7g4%Y_#A&6S}64MXC=^!^@5b zCEdtGEGTKzXLud|Cdv(UN8vR-PhXCtwoRYUP|}VNsN8!V*>o^o@-pQKwTP`gLCYQK zkZI$RcSAFCytcVz8ltfqAs{p@MubsYQy*p=H zVI8X`Xfq?%LbxG(_Z`bpUT2&ZUzA%QS?u4(9CYHGzsIWOm-dWr8SPu8whi%*RK$hC zi`9aJF)k~iDDfH;H{^H#?W!e$dcn!8k1O5CW2d4uoTXm;HfdT(7qE5#xpmSSv?9cH zFLzY!`uv}~)F2xZ7`k78T5!w4%2w6+>aeFBfjY>OvZ87K9x@0_YrBy}=dR$;rb4|) zQ%uQA-H@|DXjc%&&7orKEW9`JOK;Z;ZFKNzG%;SA)E#MjNz+MYB~^X08c7>!Rr|Jm zYS$fU%54ncL@6>~%Pp_A5ndcM=Ui zuK17{mQV6!!8kTv{V1{KaYXeoF6xkq$6KPjNpCW9n>1sgj)MJ|c zC%$Fnaxfv(HgxAA@)q%lh|(x;+m+QAhtz9cq5pQOxrsAcMJ?27>^T;xI^QWcD~ zcSnxAk8U#Ge&Ecd9>*Lr169(Elr+ZqYA&@xw#E?Co-fp%dbMt&WF%YP#Ln|T9i*>l zksUA8^qOI9JuTptN7K}Sv~LDD$K`Y<4O7yM!s?t5stpM0fzre-KRGMJuwpV~?I^Pl zX(?uUqUR)lPJd**kY(qA7HOBcud=#G;f?ASs+=`tGG6GnwHs{NeSm&P_L?u9Zxt%* zj@mZ+-kWK*ZMwm5L(!+h8pChJc3d-jF6)Loa%qxS_we$jtdOx8*4oYsq%&~Y(QxW^ zlC3sz9&h+3YTbInV|Y`v2TB7mkt)!_!nUcv2Do8NAdhacLMoOyoW#iSmA?&? zv12+LIilT#%9{Lo@qc;A2wO%Gr<@JgIw9c#meYL^V8qEvjorv*?orgKe^0XnrvV&D zQ|gJwS;6|U1jOY%P)TD+m!J;A2f{~I%!-))wt<4%w+=+PLb~!*D86p;ck9F5fe48Ql5ufoxsuGh3~IVHDJ^m3*w<&J*3f zHp9FJQ-Wg#4&=PToo%ZQw6EYP*aM|5?V4!@Zk`Tr?7)p|YF_#y4OgYS)yYS9rS3>m zL{7%MeCb35Mox2?M(LZaQkJjav)3llg^nG050W(UR|RyM#nEm7mGM3kDA$s!4JSCA z_CQX1ymxP!x0@h^X|ax;H*hcjtwGKs1HmbP1L-fxI{~3=BjN-trKEnX_J#D)pshKZ z+W^J5Mj4~MVgcMZ>jjkK=C4r3;JQOVOw*ORBd2B12y&Qa9vT zNO;}h-mDEw6|&7Dv;oOU_o5-^Zw-lO&=17LH7+IaU)?u;u%Vd!eMSMkg52%55dN#E zC59@_^-xnM{e_&>LdygLqVabil_l$r!r8Mb62s|1+!r8|$mqbMlqQd=v>>qET6)vi zk*gli(y6F(fmdDg+4`-B#F3$3;3;FU1CJvGUFwA#%N@niexN$h0BeDQLLH<@hPGH8 zY=8_lvhJwaryo> z5mw{Yfl&dJY-06D#OunWVKmAcjT~7e?jU(?&NK@x`asd|Pe&Jcb;`+^PWcn1 z7VL@kplM$|J0;d3f%ia>+e2BA6#Y3*l@fEN?U(7No)!_UA~SFcWbzfUPvli{c6h8( z8$!k@Z?}Tg!i6?~5)T?iJzI!+c5v><$uK=IcMm~zA2!&hh2AJ)yfm)q*IXJ=RP2u2 z4WihoGM_$Fg}?3a+18=D)80qjAkMC*2rwgU8Qi>Lk+c!DiUt^+v+Tw;c=A@m7W9E8%1b6IfyDwBJ^`vFVu#X zlKMgam|8BT`&-I&cG>S8)Ou!H@v7*^O#Th=Vm{2#Aita%S ziJp`|&$d{QVi$5G0o9eF#zXWXAU-@ml9JypB-81NL@ASB@bfSSd?8T*&MJM zfjx+%YreDeaijWqZZdDv(zH?!v}nY7dE$*+UA1~?DB=Au8V#0n`(5M2EgHjjjb19} zPHMiIkph@35O2NLR1@Df0kOrEk%?T&tM(X5Mt+d_+)SE($kBUz>X~Fxg(cIp!GFE zsBCBc2KHU-BB={$H9>elq|Hp-JaWhnu_wR-NgJBMde)-xVk?rX`qa zZ8V_h8|a7Qi01^;4Zu_+2Llaooj~UvQq4HTrs?vmtUPcP>LAKn-X%2(eW&|u8BQGs{3gnB}-+O{s_g=iojFia6} zHYZqbnr^$Js>>Ph+M{e#$3C^+9LRZ-wri>(lR>Rq&4EoS$c$!J5*D#@Ua-9t+y=g* z?54odR@>~!0J*A$mE$Zs-z`+zWh5*)^Of5Nbw@5V@Fj+&ye{1oEBB@brNnOD6sK`X zIG?}Whk}e{IrMoMK4`kkV_}VDwWGX%-URnCVc)9Ejb&vnHPoO;9o`H)e(P%%_rSA| z?HL-AIpo6YK{+rbQ55Pz(Lq{yQzP_AIsf%Le#fH3P27Q|$F#;%wL}@4vFi%lfTz$P zVF;75H#3PFemIZ~5(j|)hL`ex@Y3url)%bUgEkM(WF@XJL%15IG@8jl?8#SBhanZF zaTiDZ4Z$RB>7QfK;@?dN>#65Bi?DHbSod=il*(PFpvaH=Cy>l>Vr&VgqS&%Y1$wsY z%hOu)?hjV$KELtX>v=xv3FRc0jdO6QJNgQZhFD%aZ+O3R*Q&f1G7Y`W5A?#}E^naM z!b#i!{T)uP>L@2+7cmC&f5J@Gz}{Nnr~Db@3OC3AImoAs^DU!<(29}z<3maGhC+Nn zpc_ghMyihl2q^Op%rI@OauyyP2;F{@zH~B_8=Ueykoi%T4K@j(qu&ni?@Ag(x?ZYy z@g@V}e7U1bPUSMu_gkt~UVM)yN=`G9h1ksEbNn9&(;R9Og?CErv$FavgP~=JxssRB zLUd&nJ6x&_;_E`?9R;-upQG64r#2vt%(k_y^P%FaNebb@&LDdJ6cSp?$cS5)9 zJuMBdcSOs(Bf7G*CD-Liu+0qK8(Chiq}nkrUi(FHs2gIew8LB0kwmcwQ`Da{)*IL< zKyiMRL(<|l>=TibHT{y8c%_)xQ&Ff32@EP$0h)x=tv4q_^APmlH^P8I>%lOoEm+T)7b$5Wn-FLLC0D3UCdH`zMs_@CdBs+$qXE-*M7)tr4qBpLQWl`>UJZ)b76uOQ$DqZkBmv#k);Z4SlMq0av}{UX6gY^^VbUGhx!5Pn16`5p#gSs8-0=Pj^*&Xpb^^Az z>tQ~T`SflNXgs-7ed8d3=|@s^mo8+4LzE5!)t)2f3CRulC5A{+Y;=ez>jdfia6|N> z@FqwDm4_9;26X+>rg|d>Ra~1)`-O2RYMU)$vIK25ywRZARgKrcd!X|A!en%4 zw_%%&HE;pH^X)V3OJbCExLPo0HE(3s#F}NwB$X>%z($vfqz>{PDNw?h5PdRRh_Y`K zsVp0I>@~Cst40{s1L0#!OJ|g74KXG${A?(8n`ySR#2lnjb71%V`~%T|4W%z@Ow84> zk0vJXh4Q5x4qDb&pxStYJ1*|XDG_6{T|r5|?4IBj!+{*z@E0ig7+V+l!9J0|mj~)N zZhXGH^&e<*vTnfo)$5sAko$+h#&ux5k=nVDPa3v7QpZO!ek!#d(?S|P+(e>|<(*j? z%lMH*S?d_44t=o|w5E3$Z&Tp|ICnr^Ax$MXH-e9TBVP(`0h@uOaZSeQ5zAVKXdxRS zGMUx1s3;^ctwY`&If}XRur#nck`7ibybGDdahBFp=)-ZD99QZNS{74KI=8snbV7yD zfi95B0IhOzD-2XOV8MDI8wa$D7sZ)Kuo+R-1^OMP5YlAHbCW=CO$_IT=&jJQ14tq< z2H;N`Z;`}>I^Xc#hG{C)k8|L30=IcSQN(hTrZwQPS*YJ@HV$O-l(uSs2y-O0xGt0$ z&~T&C>a;#&C+0u&JyFWi6LxI{v|D(2|EZD|%9owO_k5+2>`#;+CHF=V>q&x&Wt9b1 z?}ZF&GP97j3fh|Ha7%#r4`ZjiJL&|Er)Z|pI>6GpXjk%X$Z-~$HZVGP_}WHGNy2+0 zGs+@iXe3tNPSSp29YRGTz8pk+Xi$06z{f1Jy(zS`A{RPE3F9fp7!4SM`$jXqPmiItOrR!Z%9Vy(=Tiy#0P>yxDEy{j)uCUP9k%dDOC1NAlJL# z{gTo5f%<#A`*_p3IIPX!jycrdNWYdz8Z9eC_b-KEb9TPFYMvGc{qDR z@rXOiat*Y+mY5T=%mutX`++*inKQGG)(@rBnD$jIeYIOQJ5X6r;)8)mRw=LiiguM>GQGc>12;dQsR z*e32gav@i<{%CWh4X=SDaJmEkZOCimq5a9A%D3*Ylb1D+4VlWP9xE&vRBz0!01xVg znl~0mS(x!7KectfKy~ly8WQzN>^juM3vm}PG`Aw96n+~drAs>9m3KobzoFn3805gL}k2fJ@+#I@6>~Y@3)c-aCi&MtK~-Wr6oEob-<)IzEFpE;poLNx3&Kl&WW~XS6*v6>I$iLZ;c#lb;IuC?E^eTchu(w>(X9}&vQ=n9e&~{h zG}>sSdb&%@5C!!>l{>j|%fFnsL~>g17t&e^CR3h#3zl;S^{&}oq@AU!=pFJUqu?9a zAl6D6RA->U^n@oelMW%UW=_-Yk33oD*){?I9Br| zSx4%QY-O-AJdrQDtG3A%!rW1DqtFyXo)bZE&p%-Yu5Il{gwhdQJfHHwQ^1ZMlN+0q@+2Y>^TdN_XVaL zvJxOp-VUU@01ZE*yj|PQQLt|EkYLzUY{U!)pZaNRnr8?e@l z9HiY&n&4rr$-Gb(&erLtnJ9R_1aw6nmOD;Hdy*=M_XjhEUq2lKuTpUmI<^;(t5B1Ii|IKM-}zN?9`Ei z&os1AE!GXW-3gjoxm!`}rvm%(9Vw(5Z=~VC^paM2wdES^mg|l>C*oZv4K0!=R;OVV zyMZV$UMGy!BtuaQ!45c?31z%El}mBdyllYRee?|(L6f*wx#&mIEG)JQrBe0U@PStQ zcZ)7K-oMqcq0Vu9+@x|*01vSyLTBg(mHNdPI-Imf=P7L~_3jsPpw-V_yzasPW5d+8 z8Z1-~`HKvW+^FDeRo+e!7wVjX72sCE_rc8dBRBbW`?pAE!-G?ye%ZDI?j7~AD!j2s8nX1yurVt{@r|DF|wG)@JK-Nk?M`oa248*kV4P^OM zp{pNgP?;^$9}wg9z7Le&iK|M}`^khnoI7GCE41rE4^M&zQ(Anvp*Wyk=5`GR<)!%H zM3 zT#LCkOvHyyDNgihdsgU}E`xaDH0T{*aV1QyeiP>sJEz0+@5q4*)v!X*)IDP26xIba z9PZ@|Wu#_rlBtCCKz0&n^v_6jRS3*oSW3E)e%<%B375^_)z8bfI=64sa`hd|?0IxT zhg=u*;oXtj!=Zg&ey8_Y$cr_HcSr1gvBWg0(cx25%eTg`^u0HvtBL7oo591c5%T3| zctM(rh1xRvdID6BC!3C8ju+C~pp013i4N>eO#9N6L#`HzdKnah@Vnlb#E3QC9@Z!F z6bB#9DQ@5p1}pbMndU?vJ>qIhmpJ|fgWE!n?UhDcBR6GxAVwx=*Dt5WB5OvyOt9N!##>mSk;1 z*lKt`*ZJR122!whj>zj9Cl3@7d1%(iqePm9tQ%tVgY>mpdCorYS`$x(!FnSz1o>?1Zb37T?hHxNm?vxd4kc{O5adD&` z$hPN`Sz~o`m=m0$y@0vQX$vWF*TC3ozf6bRK<-h3LJMsA4DE7KHOOHBRqYmP9~I>8rMbC9x#(Wz{}_Bjy*4 zNY3T7Yw*Et>VkTpme*V%05z46W+=$3HMU8=qs8)ujr}&5lzAzI{a*h-)VDO^7Ug9j zKx{}CNpz4WqI94wRy+iu8>nF2Q0{esmM5L1T3Yf_urI{4S=#tizSsqH%$9XSctdJ; z-QSZNmcWsEfN1XS#pX-P_LIhXIY33J1(Fsm2h7=>SW{~qZ3yQY+Bo7=JOg9C%^gZN z^2=O=ft*e;z^#Xz3EYw164gl|xNE@n?>f0SU3>=&*J?mrlQTFm-C`Q+8+loYw6Pq` zsGgXt$@K-2k2#b`|6`yteZ9aZYTpd+btp6!*TWm*z5|L>DKjv7{jTabY0z-AG6%IG zb_=ysK7!X>KL0?GbDd76`@qUc-DtN!^O)*lxNcc#9eE4ONgf5TBS#h=pStW(dVa5M2uz%lP#=Y-VC=THYNIE|A7Z7=80L19;50HZjP2 z<`z01gPKv_;S_2u?G7AYq0mty)s6hYXIskW&R{shW0~)M3Q)R5Dx^CGz?M1 ze&`fY2m}yv_{UKK=!}d{pTNiqBoEkBAv`--DOFY25YDgab$<#}ongPlpu7=zfcDkM zExel7z8NL&FHW-E$o9tbQ>YgmJboa?cFX%OB^>Q*QM5aGi5uO>P>HC4INjAi z{)6=ZG)A6^>|I#nRD#>$<6_<@%FWIB`nCCVJb(jvjTj2(gP5kf48$F+52W8MZSh)7 zBx*>NFCE!$)QlN@i(Gf_Lv=r`IopvY9U9`w>z(cLW?VI{bE7{aceUd@xJIgmjnqEH zxsYBa`sR>>)TX1i@kXse9kiB%vlVo>oc$YkjmtezL~6)?zROt*SYfWM7eRQPh3uUC7)c@8cEHySGOuxACvbhiDe9LwDq04P@iaY zcMUhA%6vN)?d-@i-^kT@s9dIT;OrwI)g93%dCqn9o!kS~=U-L9UU(y2ZJ&-E|cSJNm8eNvEAOIYg7@{Eg zG@uADCzLg9qMWU!zqEC!8`30MYpn^Wp2y`|`iZ<+`Ww-9$yg0EM2#-k!hIov9-++& zb6$}}dE+tgI*bn@nA^&3S{UJRhc}a? z#)6czkb@){!4r$zynaKj9k}7uKe-WsF;S;zP}!O)rpV=0hZ}VanAhT<(!5Q_NyiJd z3>bE+LM!{bBZRE2>xHI)#pXiAs7Gwoy^tF z(n!L~wKeGgD2Ak5Vk31>#B?&FdTo4ERg~S3^Cw%_+(9ul=5|PVTYnb{E4``O>Q?aZ z?c`-gdQ;Fa+2M7Q1~@nQ(QtQE^JeU&yiOG1U5z}KZ7k$S2d&N)l61brn3@-I%;ai| zy4~q6>g0RL^0xCV)FP^D2(gy&b9&^CbU(QSB5z$Qs1;-E^FVZTEf3dDv?jn#ecS>N zkLgCSj5Q$cq@)<&t)-lsy$)n6XFtG2ZBO*MR7C|-tsA{!7^EW}8%*q()kJ956m zrUJ}c@@4=dn47ENy->c?9K*YO%->9Iz`r}~JCLz9X!?RminGsdr3R%AWWR%kDTxlh zbvwYcMn2pCZY)9>?W=4XjgvQ(-BGjY1hKqr87`~Ki$A8ML590Q-5Vga8KaAacS9{O zPnj(plw>UX)?rYttA$3-EU(T!xJv|IJF>4p>xN!*aI%R`4Z9vl=U#o64$elvv_y5d zkOfa9RGJ}`>cG4=ylo6S8o5hd9X!M`xmK(W-i-(=fv`YR3av7&4XkY_Uq!y$3G1I# zx>G9PGz^{TQu#6gFVT|AdZx)t)7?>P&1hU*Vm&Xuol@A5ZjZF-?z!Q%Sbgh_IGoSlMyZfNxg>elki?yR zgRF&x^f5qnY)H|ugyL$WIS^$ijrLHv%vQs@b+hSo8gk^W;;QO@Iyc&ZZWx?>4han| zoP2G_mkH%vPWE8EYf9@zmeyyrot1jzI(MVA(#v+xH0C83I9ow~-8CO%E-#d3aNV<# zbuOss=R2s``AfT*THs4}C1f5K`xTTltTC6)SIOGg#OY$gyO6G^%k#8?vgBb4_ z?i6dC1X+52Dbb)ATYWZL+|{uI(Y;NQ0jVm~BK#ukuA~bkl@{*2*alUP61g3Mo+#-p zma-47wSr`{h=Y6ipgrP|8%z z42}jfCLDe%vK}~2j&rE-&UJZ2oj%MH*W$=cWb}os0WWupW5xU? zs{VG<;R)<4P99PN5c}l^6(j3`GTHGt%4qvjbL-@XuFlkKNA=vjf}^}Gg2h1s`If! zutQEzs0$^}9Wpb#0hAi$b63C%>8Ft9n(*c7TXE{)M&^@OWvkJY zf}583*4eq#9YtMVdaJsHRF#~Wab^>_LQ{CIE0xm@#Z22cGSm%y;H61x|MGZ8gH$>{ zL7@)P`GI#u3D~9(jF$55C@Qcv)=)`nK9?558O;w6=SwLm*aY}qXhM#-3dxr(TYU^j zDs@AXOPqu9c3S(rRnO@ao5e!y8dqrPqcisA>iIkM`h!uTA{VqG9g>hZSAp_Ec+qs3 zX3EKDSer#8?`RZlkfc#U*P2vxp=NQl*sR7tji4Pc2>2cG@km`n9aYZzI8;I%RFh&D zYj~?XwH@At%w}FbBb&H7Pq~?!UvdZK;U0J!Yqp5eZGUh&DOdjG$ujAQ%I(PcsTxv? zO=sGS9x3TuC^~8PjGs-%aO=I_Ixm3tKqXB?Y6+sJRBT$spsv3B?Mfknj7nT_xdU0> z#^t71a9A5=kKDMg2HlIunX%l(YG)-_pEexd@dAe00DaJ%jlE@TZSQ~vA?NDwzxCr- z5NHcKP-Dl}xjC=>hu5QI6v2TSRdrKEYGGE$oQKMbuVN~L95c{inf`GE4SHN$eI zdw3Vk10~k}XT{mvH6LPH?SXXa9(C(IuY*PG*Fyu>(0TU`?*!5>&Ww)Voj=(u0?GEVXxI z3|8G8wOi%2@<>8Yc`5oBw3SX<;~)1DL1khYNy%D0UIiCo$U;o}|DfINiMCXBB{pPq zfkeDaIlN%YOpK%lRpdq$XecziX@T-a{m1p1|MOq}&qMiyT5=W)%lE&*eCio5GT3Vr zsSVF~5kwu#HqBzc#(+K$w{wY@+2p{#Q&cgYj=VdfHaM@e-yr$mWt;Z{Ein~K7$~1s z?19)Ps#xpVL~+zA$jcUPRE5}ROCngc^3wmoE_o+wJ3?JT=34(qDx_*;-2fY)@#W)n zOJj5gyL;jvDCh998Lm_|u)|9W3h#zeEuOBguGA>3KJq8)h1Bg2LqD``z}fK|(YfS} zZy0Li@@*w8WGcSkByW7f;3z0g)4&KP*{E~?YqJ~E{Sdcf68#5ClJ2ueMzir(?>?7N zfRuEhD9{HUl*CLM>JKdA8!=EwyE5t_StMaVqC*sFgQDL;c@*_vA9RA(b#LjbMi)x6 zz)67C2z7X)p?JQHEMq9em>c-D$8v{A8;d9=#gMvp8X~d75BKkQF|H67RoupUA_SF| z#_D4#Pu?A&p*wh{6FhjMp=;m$7LP9JQp@H4zfkH9Gd8T-r}z|)Pge#emDakeoqXzc z3|S8p4fMa83h!^oi+Pb3U+0OUy|m#C{)x{S-W^5VJb@A-t)1O*BlQXJa6Z_X*X}=)eY_;y^5FOcAsi9M(cYb)Pa_eRU}cx?9Qbaiqp;BVU1X+P!Y@ zc_>WHxh##vP-Jm&pXY?xIe+%+-EiM97UxE_F~? za~?FJ@R14iW+rGY?~WYNpy8>GTr4WM*7wIy2hEpP zk?{jwZ!3%rJ4(?*W3nbyQ_xxaKM)<-Xu!%_$LpU=SmeEsMW3U_jNOcvkxPT((_ggc z5T8JshMSaWLWqtFx;w%MC6STqn_TiTca`@-xskIj&8!Z2DJT6&&zA|? z3*oIxOGQX!CJ@Z((G%rM0vn-eS*4P=*h$VCML%h*l1VLVIUm0r?2$oRiA?8b!O`_V z8d7;D{aj0g&s5ebH$c-!>5!R9ZTWaVF1lp+;ya=WA_DL5&SG&-<^{{@{>ckyl?52Y zNcApmF_B$wjE!;w>YDbVeu<9XXxVYDai`9(BcvLdq8YO!ps-7=3 zE9KQK1vA}|_d;fqlOQ2Y5q#kO50<#2cA-CwBYNT%8>CpJ0?g$AY&AefEehlwL2+3f z)^4PE7fsXhe3gQF#qEtu#AN_zR%YbpPHix44(g74!%ALf=w>vh>A|#zH)^B#)2_hm zzRgYl&bj`M+7ni^%Q<+|O=RLg?P0yNJ;8|91MRISB{pbUG-;7FLp?2q26T56&yFHW zi4lpyvsVQIe|&f&#kdS6jpeh>CjxSWh?5aWJ<{-0k#6)vIN?NEbWvw`+5I$&f2-OcD zg#isse01j%i(CxVQgNPOy^$a0ibiPh62y2n@a9e57ha?wlFPwjP2GuVY24XK zwpe*>&!2O@JK`!KGkLwHXqZH?UHRUTyM&<4Vjg=A+VMOvLn5!Tp@= zE~&l++R>M?44_J3;~p|EU;>}5b>DD}NKYb0RVo4MhOAO)4LWiZhMjw2&2~_zMY+OE z+Ni282(RV{-UG4T42>6^G>jZkYH!W`c_#|zyxIh<8c_~@wt+OWxkbh!Vli0jywr|r zW;nClB5);6RhiQv6=Wta6glim7~W|x#$DlkAkM`#(lqDW#ENCn+@pFI$oV=82gi^~ zqW~b0mpN99E_nKsIWsp6`nm(x`D3xT|q!C^E*Xw)0!vw1Q9)`VWox zj@ZRGs0WHnF9K`&Hf|1m6IU_)3-wwV@Bd{S(3~gd@1|8R9dST6% z&K8&=exZz^1R4^Kg&L{3Dq#QZjVWGDkaoy+B&!6>P{Kz$Qg3G4v^#P|6dgkcwg4XB z+ZXN%cI20SbIKo#nF8nS$rqwqK%2c`P#L(zmemve7w8XmTv|eFU>Cl?xq#zDUH}L! zM=X`(fkm*FslU)C{R7(UT*53f=z#Me^b6q^{KCDeAA^;ouYZ^-F>k3lRLewS5XVA(^uL2WWk#z$R;(Y*N^r{LNJy!?kjr`6PeP|SESSJ6*)mi)6$R%6-O5A?G7(wa0wcoiQ^nW151GOuUdl_idenw zVa=z$4j$GG{Z_jU^@ySI29|S2G}_QoS}u}OT@0K$5Kr_?gr$czo6^9vU$GALiQLls zi-9VB9AlHM7^tBQ`u0FncTj49!H6LWoW0U7WUFOVspWDUBd1`DA94-DKah>WE9KI4 zrBb%w#k(O)Dl}(xDO`OZ@UP+B5ffZ!9-%LIy42Fh)3fLi@Mwl436ystnx({8v>*dp_g4Xj=-{6KvF zi#@V<8BxLb7ue}2tQ%k$gOb;rB8D<>cWd%x6y=G?2U}DbU7D}R0Fgj$zjPwZqAFtT zE}BvX%O?s=gXTWY7zkBB6jrYdZUY1{pv-{tpeKMCN0r=WM_vA|y*(H^<3vw?kJ0J%3ZpTC&CKyyJmatAtCKrC&5 zHp+7E{Z z2IhUuOXxz@7qmJzP>EfN(|&y2;RZNPfZ2gZ>1g=i)SkbPb_ZHsk%h?Q{}-N({@n}N zfLR_{h2_>oaAwBvUdSr=sZGMOVYYQwt*bCq!HT|+dlE(6HA2Q{D`M{8vScr$Ms68Z zZs$2tDHJdRVR$!WWxAk+jfx~jEqR$_$-5z6&X9(=tiDYD{Z?O$+#CqIczI(;Vu~Op z%gWu5x4}tU_RNc8!7~Pdlr%^OT7-Vl!H>ZB1Bl&0we|6aaK`$=$$dYt-pCIP^(rMx zOkmgh#QF>`MyJR|PIXmLsIP*F86Qh$Ovp#7`_dv{^ zq^&OD0<@UUtiJ3pc_5|+BL0gG@w9 z;v9V@BNs|_>UO!dI@ZSUrr*|aIFObRnxQQdb*|&LZ0X!kXgEXAJfT0lG+d_&DTKdT zqYL@Yg@~-AiJ1V{`;V2oBL`yEAZaF*Yc~Y9>G~YmLOO;tF=#CZ=lvm~!TCFRcH=QJ zp|uuFV?*(0TVBh9_QZ`zXg_dvca-FO^&wKdX%$v?P|N!JueuHLmUvNTJq)8Q>D;q% zqKpSlb22{Ri>CrPRIPd!Fb&PwPnIrL{>h)Pq{q)c{-(`D&7YWOAW>%J-N>&r5YpSpt!Bi2vH!_!1sGGZhhOB-vr81`VLgYbO4KkBFiv)~mf*17dM&2kQS}ORA zJ$U9j2f~m_qv<7U94c0li{r@ki17mz(EGw_2Z8wI0StV#9bw_1{pRgxc$pTHC$J|n zUdX8$G!OKK_a|mijDf)=+yDVIC|uP!oMGo9s^4PDOa#flLVc1pGbQqEeo{!uz%$6!Ln4>1LG0s?1JI>jL5 z7~OJw?gWg;aL(Rth^_x@D}Ey5K%PC47k4DO{%Mgq4GA>`e4!M8TVBem)o`IC7jL`l zS>%^)#uTk$WgHYb974Q-!P|b8h7DxBR899 z<*F}*8%a#czK*@@)S4Lg8OTs#fcn6}nLhHs(6K$n@7$SM2%4HCVTsKZD*Xf6Y6Qk0N zFqxu;Jsh4=47s7|g{A;+-bjj}mp7?gC^hekc+~+PiFC3W2JeoVm%fjzhHX(8iWjJR z;AX6mniAv4PFU@&w6;M!!za>@43&?>m`TMRD7s&5(S@J%`zf)Qeov_SWo^HO8oBN^ zhc{OqQxiMV$+8JggJiEpY#8%SB)M}#>Yyaq5g%GTfZrHFIXC2dn(v5iX~9UkgQ#`* zMm6!vdU#1bpZdb3tUJO`K%3XN)SBXCtk&ASP!;kPqNq^chLVvp8DY5eH+e&b6QlCk zNHB5KztkN`ald3Z-JUcUPSCdpGQ;pT7z>rb1f0DPZ>_2kxG2pHJ^v=~Axp)>d z+VTcVaE#&(9P&LMp9eHZQ+tY3ibZYziRh})z*cHNIz_Mpn=E5cXYEvzjKA6hp1-}P z9f~$E5`W05S%|yS-lHiYpyKkjEN^2w7o?-NPQmlsMZ zE-95)>*0cL#zc=&Kagz#U${OWl1j}(0560OCog-IMs9ITi^r}d7C3adZanSPo2kVJ zw-k27`uqfFJR3IKErqUSAP?52Vw>#S%3f*kS!< z=Uv#M7h?CBG@3togX)OM)e6i@UMRi_^GW(zc>h?5U_;N?X+8HF*?5_mHol@Ird*iR zGP{HKKsFpE(p@6dzA_9j38$Y2NF1Q)1~iNc(NVfs)(yEr4UKaQodNj%s2HW;J&?_a z*n*`iHKPDg3vKNaWgkymjh^75XDx*)t{803MX6P~y^$6FyC zcEn}@lyboD9K_Og7ta?auu27qFd!`FQzdRUrh?t?faezVy)^MB3n;{F{x=gYn<$tz zgNhh5jSd+84LKw9dcvRVx{oLz0XZRxO8ifVWTD!2;MJuQ(HYsjLE0jx_3rdoa`g?B zOSwQLK-w)z57i?x6H>nW@hv&APTdhg>(t&xRgad5G>@zd!O|~nonTuIRLvU5+80GP z&-<0vq2}hbcq&O=>r)M2pF-SbP0^pncr)CX@7_DQ)^WO*GSz}OLaFXVMWKaA~QYG~)-H9#e1 zpo98E7-;HEV~7cc7i@Eamz@S1+GyHosp{mnl-V1l9NeM$-%7G!%1cjtqpA?^T4G%_ ztkns4EYICGu1Y)5X(wszEO(CC-AC3^Z$cB39nIA)uVriTpS0{^r`~= zM9icr3O-Td;3$MmNfo%yF}$3cHZxC@bphl|&AJ~>RxqqPT6f)G?xVsVmlUWJOgy{? zs=A%HD2cuC4sN9Ev8qK%^6V2Rt5o`- z+M*|pz8AF!7lbc=amEy0>`fsJZ2xWCK)zU8Xzn}@4(Ew-*G(sc%2~cR+P#qG6S=XQ zQWvK3gUsdJCi9nq5@mhEeAS;bpKmlX6%1yZ4VM(~t;;9yPDo?WpUUa^X{gQ*;axrV zK+)klM;s&9>Abw{y9c7pYFVh}@;cE5(?m$cvAHOA=R)#g(L%#3IevS)EMN7eTxjcJ zbgHLFi*IF#jL$zTX!g30K4qd*gqwbmOOm2Y&7gjF{|eYP9u#U@e2%(6Tm2zJF1R-1 zK(3f7$J0HQZQYi+i|jyn7xGR|&zmE{RN0PPB1y52VVVHscT5_I>}W1?_#TH8st@J* zEvXen(n4vDop(ab^QQ1pJ8y*fQqIzsg{m~Mh|M-*?TO#bjk)eLNg?>oDqkAzgnFQM z0Gz=VSZ=e|NQBi*@StXs@n5ve<}HX$)~MgdJ1SkDjEC!){IY%o)A`(WcZ z?z<>b(n1WdA~J$pcwIdbBlkpk%^n&_hZiR+lJFbgjmrgfP}R%a6XLuP9`p7>Osq)q zS8h#~R~HG4)-UA#X=#oRQkSiXUE08JuiAwZ;pME!*ZkpV@ug9J=$7>hbztsQ1ffP$ z%dZZE?{G`eB{P+@cy(`H>iQk1wau=G8fs@OeCuK=l6K^zJ+v4<(rL4ap?o5512#pGk+{r&#g>?fyPJ$FmES%&0_`)EpJMyH@llNDh3$IpI zgE|)rwOHNIAGrpN)HWI0!D@x0>rd7d!kG)ZZe$vH7VeR+aanvuLk;S=U8pXD9-(#V zxUF0VoEK`<{v<=uHuL1Gb?@jW=k6?pP7G)U?Frnlr`#uE+XqahneaH1E4Pe@aifaT zXp8=IT!MO1c6uC^!P?t?U%*heUVJL5@xlw4Tvp$X?u@1wh74b$Xu{K7w zTk&MMQk}&FC5=HfdwR#wzypBr=Gs~}uRYP!wpZ?!w0Ol6}htuC4i#(MV&A+XU1h#$?!jV!vgkeI+&aCvo!r9P26tCZ78 zD(Ns{iJ6tad!y(uhNPCC!fYSpUs!igi^G85Y-Jp9iA2VW2Jn6alk4y=F13wmN1q0? z;7!=yZ#xkA(%e5#EU*W(qk&slk`8v3FE5n)kSK0wSK}II;gg;Q?~d#*@^-Ls>tWLQ z>}^yx^2?tc!rTWP9US2EZHP~hu%6W(&w}U$F*`Z+vxD+o(cF^iJs^=fQB>O+ya%e8 z?v@9sgUS9sPz-UeAM!mVqAloCSpvDv$GW_Om8{E3>4Db_rS&X+h`uB_5(@bC$hR7)LFO)7dwFYnfj?Xbk8#308?p`n!x%Odjyb_ut z7p33GC4Nz7sC4Xh$gzq$TALe4EOIFiCFNxdI+_a$7s_sV(Zw4b@(P5!J4(IauhiOl zfJmKa|CGv(JlZd3 zP*Q0nx-TSh-9o5NHU|yx6M3>v8fxRXcNHi&ysin|Xgrx-&jYV>E~(Dr-zcs1H;zYi z&|`KNz&K3)aFi08I-pA`!?k1{cVn%|40+7 z0p@SXjki4{lFLMG|?LY+QK@ZdXa;?8=A_fb3;B=qHd_1GMEaiFL8lbv)V6Bk|~aH%k$wU@?r&q zPK8lC_3_CA2pPL$WF=wHgP%l1c z#@a!DPR=&8qJWKHVl-(j7E1c#4kmKc$vK>9T}DSxU<15*p9Zo_UCtdMlbV8cN46@{ zTSJbmS4=U&3yP$Lnq*flHSleiosjHkJa>9?i=aLni+HNs4BDii6v{&FI(RX|JD6r8?}jGZ>=!9-n{8tM@E)jku-y!5_4hbP^lis7 z9w$BPlNfM;7Zgc@ z+I)S-J>@VBHZOv5>avY_p$3BctT~dfeQ6I$)ec(r{`MG}ziaN;5i|zQw);X2>2aZu zZNd9a+deg;Cz_sbh%&r0A~;`z_eS4D9RtSy;Ba4c!m2?$Kx)2Mk%pKW^j_H_^EhZi z2%lZ@a6?qTb%cDQ%4uW=YH#*(T~OZE(L(hLKata%)lkHM8=CzPzZ#C?++fG7OlX5FvOzy_(nYZg z66<4B?13ia-pDk({gfpyYxG7csVZkDo@$JP=}@NY(#@x>qHN6*Toa5o%{L8+0PD?;PDf2c%<%V z2A?_$e%pa6g#bwR44BLYy}a!gjIG!#4yz^m;NWCHVt_rHeLNj4ymHJ?-abABv@ZDD3TTmiTt!|b!B1I zX@Ye_?nDc1)Xjk|czsR9cF{yzVBS|86{gN+Ct%(VmG`3hr7agZnEQotK)M0&c3OsM<9ux}l@(NK zkxmx8bhc=)9{>paw|3m)&h~bgX*>zy&8+}+|Uc>f!f=x zo#?9nEH5!Dc{yMHKrNqX0Z>~emZ`i4YLj4g7r9;xrKF4t8PhJ{paodYPd1{_-wnQy zF9(nPhD3XHmE56qU z=TqxdI!%0|nTWcLQDR45T=6$Zo_hDC#BP-J_~9GbyKzrqjiruDOyRy!hdM1;HDHY9 zTiS`N3w#sIyfnQ_++zJf6lX^ka-GH>4Dge$)GNMuBx%4XIMnh>&70M;ca$dEHmuX3giZ{Is=u zBh~YsP-s8m_XIcN)ZGis%UmR!5@QE-KBZJ(o&D55iaZ63*uJVLH3%2&_&qxajowsd z3J-@s-Rj=z9SAhJNQ^ZMac~r!MGbe%L!02&PrRT={UA_k>UNN?M8z(@B_7r zU98oep%JN7hGS`#or`G-p?WK{9wC1XXTB@Q-6(WLDyN(i9c+VTu`C^RP_yMVkHZ^% z{8q7@_g^TDx%a?I{ShzJ3M`6#MRRt%7gj*^Y`NMquD{T@^iu`4H#wug4jQA#mUX49 zecrg||3DMyRH0@J&EpRZ4=2%E9nP*Gk>d%nNA1 zDOs8ytX@0lhtY0<&dwTbk=PF0Z0%s;C-J1wXT`c1LpP-2x^C*0 zC=RcUuBCqN**SdS(;9bkswyrm738f)Q?57y7upY?j^lej$0p8B~ z^Uly4CEKp74sWr|M&3lZ9T`EhFTLY8uqqgdl(?ggw0aQ{JEh=$FL_%gZV50E=MUHx zT)(P-4FeO@lDLEPTL<-WcGH&|pJeUY%|Z=S*M(xrGi&|~jj$ew>{(vfaRiln1%mO= z-)O3Hip$4a)s?xAtUK!AqAsdK{jB>%1mz7Xru1j7@q0V;H`g99%cs-n|T%s_@Jy0uj6l9tMyNM;t88m!M|lVZTAtR^0jlM7_vahMyxWe^RY$6g zAN&tAn*qlU{@#JySx&@OQV02&@_i+`PG0J~(U%{;ExErP?|UJixc-@8y%(A-jcAx+ z{aX*vHM+27yj!S2T9?hs+c7^6VUoy(W~F`l57gdnU@%j;jYBN7n(g=ip7OPMIZ=>z zL(^>%7O)evg?A`FP$%#Pc-mq*EO;awu{rdOfG-{!0M$k5eV5`!)4l%Zh144LIwOR& zTS7cTCu=+BLT!qMB&tH&j3))<-H@+e`*_af3zJhJb5d9r$altfA$9&vmvb@#rl4Rw z5v2zW8xjq8R4@U8r=fkCN-C9Z%M9o9cddD^HI;8+O5=$#MQ-!a#w2}@r)YDM{0=&i>rQFpBOJu#Y$;yR^sEg^LWdV;Xm@cm08RX#aA~{=A1z98#v+`CwKP!14XX)L}l@F zJ!{WaRe5K?DAJ`PO_x@pg9RaGD3o_c_4GPSN*#ON1=tg%pqCFFx!fn%0$k z)+OnR8^Q8%AL+nw9!N7m0Wl;;=+DLtus^T@QUe9G&*mc9Tnyvd*hOSI;HKyZ_1hBAG7*K_1{tn63183gAR&% zMRU@$*YHDie=5pr!e40JLdR$sWeK$?NuvPo1YQPBoYvbE%G=nE4-(3|qXxbhsvS+B zrVTjinCpo`86ynqg1E=&dNhEvyYqZ{W6<~jb zm3*800x34#PlZkcNRS8I`0{}$L`WF=7OLZhxP@vc_(Hkt7qpx-Z?#MX)C%mV<7eL? zLO;&Hr=3lY>8Ss=h-c=KX2X`=MLIgAy&Q-lRU_Qv=$nfy!EIY7svKHzd5t;33r3@l z3#DI9Wv<4RehP1m?1>`RYrG;ioB!a&Cr0j#l8Rfpl{3xDVhO9n9kk9Uk_crpQi@(@ z8Ao=SixyM@t z8Oxt2+3xigP`$87DvsJ4=>>+?7M44{!FXNp?r7SZZ_7kquN&~&j*B<4$h?+Q+8S-V z2~6DKW=Giz$R{gr@%6yQE@@$UenDy!pAk9B)H%c{Hd)(&E(fI5#(6_EC04h`7gePW zn)17r>^lSVZbj0}l{fH$FlgRy=a;=oN56e=_Cg#eU8j$<@u?-}r`=s}AkQCAlbNu| z+djZxdjdAeE5(%R(CT}F>-=U%VUS+qr<--`ff@y{Ua*)3{6e!}?(^W`%_bd2oL})j zZ{(L<7-Za9tcZn`@{_1}zEB1Z5L!lTH|84~fwj)v1>(K*L8v6sA()QvLb=eEjO6xG zsM&6PXRLLXy-+iH($(D=wV~W>XwFg*Y}D$k$)``; zn029S)2i!i0Jjj8_!K>59VcN>!@02v5^+AwC`BtsP8Mjs(jO)2vY1cG>qIN2KxIY& z-)Ic4tOuyMO@v0`*zIl&y8&fow99gwMquo6lBW@D$iS#HiZP8KuRn^r8LRyQWEI50 zhDM(buS+F-%R7=bgB^W3Td*&T4&KfnMl*PC4Py~i_soGJpm|PYQS6)(sjage<@7SNRkSrxl&R{C!Lo!! zsiE$O2#nNRMUVU$P>BDDX-m!6*kq3QM-tz1_Y=j{acVT)QC6!-XLXIAje_RTCdI-%-D=T5 zNMc1GO27Kkr={Y`naYOp)Gstf{qS-yB9h1!yg4QzHOLo*lgjG$Q^NE-czxhZYEf3a zK(w#ObrlI}4%TCOHk26{w1ggz6blb-mETC4tvymsI|nwjP2RSyMLkgJX3il%rB(7R z1<>uj3;E@EV861hLpyuADaPA9j!vc@@52QWBBMbR?4a7T%ehxM3QUGv8XpDT9Ow!5P?gP+d6%*THfe z)ZB3C9`!W%L0pcb2CKz*H;%CW!hw877up)xy_OBEDMY;k8Sc}ZrI)Q%;GQXSk~9ET zLR$W>m42eLeCMDBZH(=pQFW!CjrW}z`=3TL`Ey$$Mt+=f6g+P{^QTkgc=H9&Tuobo_!n*pi1 zND&>ByCXJ++9-UMAm!kYOI96#IqZD{Pn1)UknkPg#eR;Kq!SP7lK zfK!`pWR|#tK~r5{Gb3n&0;MtsO*74$R}CiCRIvv#w66wBTTi2lqxvk&4oH9IqS?up z+lk~%lg{R%8#Pq zKan<5DV;meJ{Be;L8(f8VNu#nL)S{unc`c`{D~5bf!6s8+Bch=lZW*Je)k=_++u72 zxF|yD;F4Pc8_IhO(5Sn%myRXge{0<}Ky{&rNgI?lNWLk^HnLfD##%?@SBK>9j7qSc zDCQq4UDh#8SO8fMRFkoq;ADe{N?4o41C6RP(z|aE-W$becQ6=V1FCaoZCY5LfQw{G zSyG!%4U$s5B9-q3O@Y)w#rib{J=6o)(EM_mHWwH~Qaem8dxTmvqZ&m?c`;sUdODiE zQ0|0))=Tz0{vA{9ZhJ@N4P^(Jqx*7q8mG$TAdL1GieFHFIxll6X{Ld>`}IGeNfG2F8aVWmUEW5URCfWB3ency2$PUl-5wjWF{KM{+9 z7X92)N-1^kh40(IyCa|8leaww{X5(_8o&#Rq(PnY%>`JLQau}=2ZQ%S$y==lg1TLW zsX~hELP@02505jaIe1YQDt$0yDt1FTTkP~Cm^%%<9^J_(pId%BS``xdP?eIgUszCN22PLw>mO(MKG#KIKL zX3q5PZw8cw8WovYe-7BWK8UGf(&#R@8%0$w@{7<}xnSRh+TAE0)@$y|f>LW3bKT;J zvKC1qwCRL@#-;OHmF>tmC>LSDo1N8AC$c>1?x^vLJT0go&$5vhTjYV9Y^K>dM{a#} zl+~}b!a4vCGEAkMELhu0Qbg_;Kfy%AW-?57?OcW-7|sj$+4PzkMq!$oF_#dZsGY>u zx}zzq=~A7sULR6>h-nLPM@e|cihpzpw4+Pc+*xm~l4!c^_Im|TV((KnDGj~J6B%N( zr11CCVCa!HCi;;Tuz~goH#diKOqbPcCD)LF(hWL8_4$SH`Y@wnol4OwHlzS)D|DVc zs9;ZP(+oTF)MkOkWP1@}njgq`Hz;q@o^KUeH%L#Hf0VHob zGL(v(xzmimS3}TVl|d>ynox0Ho`LE)PQG=MMUj$b%SE=YyLxU*aFHcN=1zta{OJOa zSA2zYHr8=9m&-#p>W3B6UV{c5`+2z~8f++zqxw*~mRNi`a*8G|G*;Q|l&Oi&&bNF5 z7Tz6Mm6rU9U*~ONutSWkq4hGT%d&GPAnmH5D-934phz0jq4hF$zGh`Q&aiB}H=@|;qN+>JG$jN(!t(g~cuOB(_ zsiM?yuCWK>F2Z{w_4#ZR%&H7;?mdCm=nVbRImeAUx_i06w6a(kx9-E6ePgu2BG%OX z((Uq*>kd$HD)M1sP`dr4rRx3V%~9*lzD(}(+9CNH)LM2wRCs^XW3l_g z3u;*uHI(Jc!sYF7<+dw%|BWVC{JjpK+kMnwM|g>rIO3~s`}rRui11#>HsKy-dE3Xp zZ54UN<|(;8!eW)m3#R1b4MV&j4? zV%@C-c~qz!D%~RLPX|lsdViI*M3F(8)t=sOVosAvhwL3R(7y)v*;im!NfET;UC2sk zcl#GL87Xg`4TE>t5SqE4w!GZo16j)L)bVkJv6Z}zlQNIHH^2vN zO)iUuaCY+G17!aRXc?q+L&jesp&ODmi~WDs4j{Lfnh3pA>VHDrI9MC{x0W$ak@{t< z*h15=a;HB;a;Ml1Z5PTCMfU|jb)L(6gYL@xzfiI^4&dzn0;Mh)>Y{vlycegGx6Y0i z^n{wBWT86if3aBQ?JU?`XYzJ<9rUMhK?79b^^8aAWvXmLQ$#L_B50PxIw0J@Hc{WT zZ&`}lw7T)+0Bsb@dv1Kj_G{}+cNvh===S`vA+ruY*7-&;YSWjTmMO?}Ix?jX8GCc# zn9CjIl5=?1!tX`(yjf(WNQ_v#QRC+7re{72C;c?kJlw|cWVCwrCIk7Rj3Omqg^DE3N5!3B4-&wPhl#zGmIU1_meb(6H59bt}JHQPAxv@ z!8z&*-AD_bqC0DDG{asFPfJ}mMY^Nhgu<80JA7ciypcL(rxd*OxD@F{&Di!IQF+^K zn{{3)v-B^Z?lTu;sk)xH=c&l)jTwVZQ2WTzJ4rlgDWSYNVItLT=Cv=>PirW!efsR< zkZK7<9TR3=i${;z>T59jM7cK$8eN83oO`sujyx~aFs3)EM~B>X53j3W@OHn*AfE#y zO<#lvZzB3)>;bcrT8lxsdPq4VHxYh$Q-GjKDr)?0wlNT~!|I!kv-JN1MF)5z$%Ul{ z@1XPw&ncI;-g0i5H!hg2xlkHDleE_2#3J1ssaS>p6)I{i&Hd^|CPSm!!?}acMnf2S zlfJhBC?+!h4Pqt`vp6gCLe}O*OZ$H)*E}y(TPIyeo;N+Hqro)lG>p0rUYUtt?|wzS zg%|}y9b#-YZE)SEaG_KYZ`GzJMI&BWw@q=fo5Xm#mREP31BmB6+P}yY(~hKWsQ1kE zL_EZ-sBm1HKmgszM{+SSU{d(cDAPs-)4xrosZdQfpgsYOz9}^d`AA%({u5;x?ZHdc zoG2HgD>n@e4K#>g-0*0hAOe`hCBD5;6x6>6&BpSe9>C}BsR=k6j+B#81Z?y)DAa`t zQZo?s4Pe!#oG3dAp>aqh3gl%zF;z@Poe@4z<*bZ4@d~wtav`&sSe{=_zFeXM(il|X zKy4^DFD(*YiZQ$delFxA;i9go@Cb6tFPz)&)`7v-WQ!|b{4SwIzPgYp7;=`@fQGoO z&8h4Qr3v|{SH$|f0-t*61FTsiyO9fcpvE(J)!q>pY*h9{UJDyqu6Ki~R{$@DMc)5} zqQjyZ!@hZmC5hV0+$dV!g)4VM@#RRfc9VCW+dY_-D(OZ^#fU@otK1f-9)zhLD8=j1 zHO3{VT1&pwd-#uNm2WjP{t9ni^Pr*z`MQ+VHdXBHHsUs$6NSXos@0~?@262ATaSXG z9%H{WIzY3gX$3oYqwawsXK`vP%~;wvTgKBgin0&M0vq1!JVfJ?SQA{G+PY(Mnoij-`&Cce?sLf-X)O7W5Af!fiy z@1XX>ZEC7e)+gW^i%>e<=N;LF(;p7Rx^1K+Vgzq(i$(jny*K0Qz~_P0d~wN0MbMV{!rP`+F!>hiE{+mNqrA@@Y7USC$FJ1941 z!cf8q+EENCQe_YqCTIUZDX{n)%1OpD8$3}WyWU7b2p>*3E73)@B>gBE=`dB4D1wJA()pVMLNW7iycA zm!^Pxq8VQ2&g2VRlbWT%6J>8Qyt#J~ULXJP+YVhPN?zQV6S+TI+dh@)mlx84U1$t` zw)G*GPA9c3;X-L&6k^2YwKG`he6WJd=#8RYcTggzE!-6}#qP+ktw}Bwdcp1DW$ckU zU(ywW)=1L!=PDj@bJ;AsMcPTgDG-NfxZ(tLH@N1jBkwfjwuBu_6T(0zSM$Dm-rBU0x5ivgwj|R5 z<{*N#5L=gA-M>-AkThDiq`)+X%1FWV$W5g>J$e&skMv))2cuf38(I|d^(&ERIUSsW-19nUt||3QOnAQ>^`U~{-O*e% z+=JgxfA__h?}n0s^5sIKPg;U6L{l%ym30Fjc0VY8658MuVb{myq~uRD&r!K6I@%g5 zk(YWPw1Ez`BCto&o+z{qkK^S@jZJjHCcIBHFTHpH3r;Z#*VT>Z_Ck#_b+x* zTtLK72wU|hiZz=pO7b=t4aOTq%<3t*=n1ji<$WV-HhXcP#l8!xtXqEGXdHr!8@|^b z4SdlSUXW$CP)&dfwRy`9>X-myz%ETfajMIyw!Y zU=-SM7UDQ&Hn0H) zU2kJF$mX0&pC6qwffhX3MDdBd<@LD4SBh*6w!(csDJ9IYhyiH!_v%q=817(YM~KOB@oD&jnl% zRm#+ZdoF<~gPMT#J73Ksl?cgajulFLf;_Ve3q*}$_cZ)XTxMX01K>_TnMvP~GYcSi=K zr0F9oDO*X!F-cGKxt4l*4+);;ObmW@Hh!Q^C|o*1U%b*3ixZ?5sAcn}mU5aic7}2dc5-%xevphcVD0&-cQ+qYit% zq#GS_Wez%ZE_0)F%Em5y(ILFq$Zy_aKz5W1>nH|dTj9+fSuoKg^u19^rT*#^uSMAE zuMST{VN)FB#RIo(WYbg{Se`-Kl|d`9dGp0&bg;_%E!n`^RaQEQ&ns^zw7NM;ivHP8 zLAu6kogJn`2TiTcsaSG1oyIBh3r)jXv%}ghuhf8b11uYBo!9v4mHI*_TQrpowHxLZ z5sA4l71kQd8(H!bv9aAGUlZT?)p_KOs;VWe)LiXCD{>(tC}YQ<^t)IoeamQ?i!fe@ z@+2415DK++%iRkbitpR;amD~W?8yD)MxYbTg082nGF|e?G1JjVz`LV{m-t&$$OUY$ zI=V5FXoPhkkFrWjZ-&}lIARY}$H0}V%EdF|TZbj(a`xqc>h^h%th_Zad4<~9ObTgG zZb(MX;^o%#NOGNutc_h5G{b!jmDH%9kvM?_EX~Z28U^@i$Opz9bzrt>w94`&DZm*$ z^Qf~G9dANAU%uvo_ABECTCwx2G;OJqP+tSKWnIYjn%&N5>O449Y`K~OTU&p=kw zSin;kAPjkPR`)1(WstKS)lH$U%R1u^!@7lVp%hr#y2INPSUm%(F9r5QvIHIF!8jjJS=me+!O$!Ew`lT;_@0Lplm#sa3OE{5b2Ccjo$;FiH0NF zjV8_21gGHG)5V9G>s+kf*cP$N$h#ILHKponV-GYrLz8p^FUgeJ$>EOTKS5i5_7A%S zdtmrh9X8}1I7n+6m&b3|kEDpzotix>&|!Abp%JjWig}6F9Sk!j&84tZsQAT4ybqE`$|;*K16l zyzVH9E7!6^E0BJrywJk?!`YCSMx&GXME#A*;dImqCmoWhhVeDO8mm2D!)s5#+Pcxxjf~&Wk4lZ)-^O=f!%28AWJWVBEp1q*;N4*>v1K&KSy>aA z>dihUuv4wTi|o63aYPuodEw1v*YdV$ zEyQ>pId&A~t+5a(Mbd?uO7iln0R?M=^{ctb?}eP~M6Q#aO3F>gUYW9Vn;Q;)9lxEgl~3EUzs2=w8cF(z2(pZrphZhzkg>-J+|^ObL?}dida(I9Q3ln} z5+WF|hEvmifPVnaQz?X|9HBW?LxZG>q3$S=9?iaSvU9J=6>b2{Kr+8TNjLJ#Jg}uV zNh=VWjC(3Wd;*MLQo}Sj?U(Rx)gYJgUnmbjfa;aug-KpRlov9nmSz<|G*AOlRWFco zBqS=MogIu6jGP9r4{x_Ttp z{edg?37j^d1ElIBG|Qe~Z)0K1tLq7hI?P{*;*XK3&jlh)U3XMFW_i70*|no~#?&Zh zFTQ|pkbM&_G^S-S&+;+4iM<}k2-nG!%xS@Ef8j(@N_IyHmgF66b8kJ^SlK1ZqzW>d zo*+~XNmB@{j2eUx#yJu`QSRr4)-K-%3&{-Q1TqNkjr=l`p^i3ExZtLmC7BatP77W) zvnk1_189hJ0y|VlBQ&uT5Kkj#i*F$(9EfvkGEkko1Jh_WKoQtIL0Q$n*~nl9rYWF> zQd~x`N=b3?twTt^jo;W&9y*XV)sT(@?7Tb`=*T0;RQ~9HMB_T#*C1{iKT$PWtd67m zsp{$-Z$$1zc)*x=rXi%pYM#jAYmy8{Y6Wv(!byQqlLj%V(u>|grSJFZ?)DP@;C>;*GPTRxF z1`#D)D5*G03azaNs#8+nw#glR*nF7`qXSDrcWzMZoGuT&9*8udb;bp%o*RtK$-ALn zo_vAUmWB>?W#agS16dEy@VzZFov?DF!!L)>7y8g=fV${Fs!n?|KS*z+4m+X%q+vyo zTTV~-@K|Cf2JifyuiDbVdK3ba znk^eaN?ORU57b_a;!Y{%vY!)R({i@QH&02^7t<|`3nh<+F7S4C4yqoK?L79QC(1Dp zXlkG&cM!5!(s)pW02Je9k;Ni_E8)B=L z*j&y9RLZ8inAnF}YBMpygZJMNjV(Gjis92V zukE)tu0kNnD_@HbPom7+zazCMB2YM-ev*7d(;HcInI=}#)oL6wgI!cb>W+*PxmS}k zo|+mb!rGEsAlBnPpKux_L~672E*@SBIF{5HMyS zBRzyv_wM>x%ErS(N&UAW1ytH4)B`zM^vm&FwGVfh!`d2Hpq<1Id|ISVN0x^#U~RXy zkQ#8WDAikDC4t)t@<8MRp*x5usJw=vV5VN8!V@|CgT|h`sRLT1xM7Qq=7F3Z>^-EB zo3S0Z?)ye@9P?$zD>xEc7dkk$c_GJL&{k(}Uk_~7JVyTj&Doe?PKQ8j_3k3= zPBwX3;sL5l^VszQh|WZltG4bP>CmO&T3Z6X?*TTT)=K(i5fOQKaXR76ofZ8S-UCGi zA7*WZ+4XQWs|SiOgdGv8B*|5|MiZ*g2v&afWW(&=rjn2@lX$B{KC!OSb975 z+MHP44duczc$Y)T3klvD9^M0a{hM+}|ICE>ZFqN-n}(&eX1rX*Pa9g^$c$#8gsc$( zr55ctfNe`VFoJ_LF=!sWwhqk}K;;Is(R(LIMCSfmiShj>Y7NrN%Ih44yoqh|VsVg( zKj^3u<#%#Q>R@M#FrOm~;-YMOd9L6mIKLxE#UaP&2TW@*`5mSFZPO9@ zv%!V!%`9ywQ`h9aYXMN(v*+U5AoI8oE=1JsQb~cvxc>(j1>9c4hrc;4q^=i==8ll0 zrGW943!37~Q;(6Kg)y5SPrQD^4zgU1oV9kJy%$0?U(l zV23)r^+oESnwD22l($XV3v=alW&a7ucIy{O&z;=;RN;X zzgEtiapFT`5i9KhXf>95R{bPqHIz433~^4B(?9Tbt^`4~$GVOSRI{XE0Z;8Fm)HkF zGdMAcfX1Z1@RQ}NgUlN{uzDvxtSx2NxJ6yapd?$@?q@>mf!eTrQ?oYnJ5fPaGT^0n zl|=FKrNdv)ykG*go$wF*k#Y|dJK*KM+Sgd0(}MCk>_bvf@;noU^A28#Z8-*BFtj^U0rO0XwzK~b3q!wzP>$?n6tMJ}S7X=8PN z9a8pNd3R)I$31YFQHAKLfY-vMiR>uP%tBjDKL<4ZG(PP{EwLo&ewCJj0|ZoX08A-t zDC_jrQ(0>%jd+tsOO%fYe2_4;=j^tqk;s8saK2}fw0}9Mg4cOL`mzftH1}87K!-Q? zM%%d4n4idjOH|8MD;cIXaCQWfVHHgfuRX{@2G#X2=GI2QoqgR=b}h88MPH^J`t6$j z+|X|qwBR*oPG(eUhw?X4J2#Y=;u-|{o`~3Bh%a~K@+!0uI~C&cH>{v|#zBUxdb^mn z^KvN^w_3`(BSU!#mrgqBetZ9(-Xy#rsSDM|dJ{`{b4`&RBfL+<(9W6iZ&B_{^aX&C zTJ0t()S#d>M0D{}MBfmpUXv`Q(2)8-UvoLJG?xOz&ZYV7*T0~WFxRqbx3FSFet07j z@g@VWHyxjz3z5N8N~ozmkzcyQ$BR)dT5*zb%Kr)e5wvQ3G%uV!Zv5>-2cNR;C^ytY zi%;-dDgj852K@5?qz46$($Xp;!~19&+5npyoZV)qn?-SNu8m8&kss#jM0hJR_e%G! z+|bDWjoe=hTD>Y;K2**#4`TrD=g14r6)?8L>e_0XYqa zee5GGc1JnX4h`j6V1~n9SDr%1ML0LYV@gYyjohEj=x<7OLl#&raq!{m@msksif;+x zq#DazD0|mHah*_q)Sw8K3e4sJharOH;o43n?3-4zkf9vBgvX%^R)G4;0qb&QMS`?|9HF)XfF<{d)aS4Ha>X*G0gt09g-dpbOO&eys_n9B$?b zj=J$3d7&M0y!xSK>pKiSsuH_#8SqBAUEegvGiBR{yqN;ok;hfk@5fAFW>bjYCZan~ zEo0s-bXqI*ojVYoNE^#kJ95@w($nas}9L zX|fUPmT_6Bd020xdU;R*TK8=b%r@l6uqqbW|JmDFJvuDvrAkN zed0m9s^N_sy&+~){c=WAm?8kF-k|K808MGRcqFk=&w=U{jN_Xx?BR=^-;L!}uc+lg z{|${&53et3fpaMw|82xDimUF47!g3jc~veg^5%7R@PWvvh#IQCbU|RJ zmehAcM*WbM*Y^k@IJeDF^%pXupBR|55&8}(Q@ zVh_}2Hm4p;v?{gIZe)phbShaHV{r5;c8?a+9hEXoCnwy|2=i2fpRA2t$OQ!vUL-lo z60!|64f2Vc(@9Qru<(LCQ3tQ45Tv9*d1?UE=F38Ql>cSCasua=;AE$6rMe;k)-54* zNA;PWI2&!#M1L}*A!m7YguM9fCCJqi+vJqj&sJz>o_9b5tO=oGq`FooZbuD@feoT+ zq^&^AIfa;C?Djykuc1|2);GoN)PE3}JP?Jbwp3$Fp&i!jz{?vDQ`eM9qpKfXl?0Dv zIO>0)v5Q7mP^UpSq4Gr8!Z0P&!K9Mv01*+n8)_R|8z%7%=7kcB)MT?DPhgs{R2g-T ztG!tdG_AK40WaseLTEd zH29Jx`tUG)1ZAS+Mrrj#0ueL3&Qgg9sPzduV#+YI)f|3TzqkZXHz$!IM~#TVOUA@K zM=EYSyd!7$LYr9BM`6L85#N9Zm!)*xlxU>o_0rT_q`%z{e&x`GrcBb@2Q+`#)lwO{uYMpu_e zrFMvMBlQ`po1*eXLpZ+)$Dkc(N_<6t>*Z^}Jkg{VqDNc*o08JBuBc4t`HP~ZN-?_Bdr$c-Tqs`Fw;X47<#^&ZCsJ>r3Bv>U`i>A6ErV!*!*dw)G?Zbw%p;UBQ$Ona9 zB2o^+Za)Q}A3oqNZU0^D;&e{9+ zLYsX3umMm^9XLJ_ompKECO(m0+t9c15!4MeSelH{_txHA8?-0h5!b@20!B|ExXu<8 z+$H%&1Q77Ld%wJO!Fk1tFS)8uYP)o|#(?Gu7pON@?m~$a^hEMvB$3OgOxP{h7l`gH zuum#8oX*)Nm1ujQR>a)DZZr@p&MmA#`Ld(VAFV=9b|9AuWH%kTZdV{i(9BW-B^t;PLP}@A`9PfeJXZ&^o?hy#)>bff| zT&UV-*QM$BfHbLkGJx9z(YRI0q+lZO3t2`k62j|lxx5`aQOy*b#e(L&N$qD)V|Kcs(bAqyy>a zpvfyW!(lMK@Qt`r5MB?ehu13}#AF%X9l3==T7!!k0V*52@>hSE(a1CAM4k$UnrBpA zsO37NC#a5Wu-Uc&keV&ja`aN1$aQ`WYTm>o)eTLWZZ#?|Q=;-Zep16|v``z9d2aR43<6<&o=+Xi^!X%DW?51GJ^BFZ~Xd*DkJ9kWW}e&T721|Jggh zbZU9iHoSa7-WA~a)=O|pY)8YoI%gZNiAInMB@e`IH__GS8i&gp-{qv`0~M@kKzB<@ zq?u|97iu@qe0Eh$du(3x2`>~@Oo_6+EY~{%id1hQV=GX{Mx^N+0obT#N4leE=WsA} zMkJ=B4_!Uf*26;e9&vx^F3wPmjO+gw?O^f2J;{%N{$ZUocy4mue9>g|UG5J_{Nj!f8w|j?o@S$Hiq=eGms;jTnr5TCzJ*9cZf?b=e*4 z{gCorD7ER76Euplmf&awJmJZPG6x`Sbz)7`)6vNNxR9xM!;f+((#Unsjd(oAh7wLe zb2?Z_j_c)Z-VQYSQgxB*js3@1$T0VHyz%A9HNg7>Ywlx-0exANGfs@ z2fTWf>QLxXm&%7$;NB-W8-P(N&M@Z7l-Py*&@CC#R?fWRTpUlc16u=k=PjxBOTbR_ z+b!KdCk&!CTe~6Vq&x|3K>xtieasS;vw8gJ5{mCOK)q0;cG(R%j>jR=49&)dK3Z_* zJ7Pba9q>l_MnyZSR4imlwfeP@|8`7^er@GkfEcv=m#!9~GXnb0C$O`#1jY`HS!Kll zWo0|@0~rEA!>dOFt70(IG&<)l))QD@M-_g#BPXu4f|X9K#4UU9 zvWG6VHfUPP6v~%94o$mG@<5Jua38CAI-e3DJc!g+Z_hEgknSlZ5jHsJt7IkwjmCv+x$&e5^bk` z4IJ;GwYVtx&P$Ut- zq(qv^YV4VIL9Wq0yv`ilsLonTkeKNk9ALN5*HuxzQfglxt4TU-gBT(fi91NK@>#7Q znfxI1g0YTffqDebrj@e+hZ{C!-BCMiHfT;%+@@fRFYku_5TPW8tfgdLjLe zPZUU->`$pSZptPzXoC!#xEFZM>^R5fmkmWcjP^in({y1|1WiBQphb|Y(@@;0nyMB~ z7l6b)IDaD*A9s31(4OU#H?+rZJ6`_oQv{L8Mm1IQ32UTe+uDuX8v$C)&<)t)8q$t@ zqEuQh7*zN5DPng}|8gCM&k7M=cB1G&u5v!CL<5!GK^^C{In_s7<(y^l3q7jU zb-$EBay7@>pT8$h?!%h0N*;Y3Hf6<7hfAZ2GMoV|Pv{L1p~ejz$ki%%>6;>#69)f$ zalFogPR?>RxdB++q~sdZ>KeD8{kwd zoNILY+kyt-c2#yq&JI9ZKGSzj#PyRmvJz-@P^JK!3F6I)x&fyN;QNGM~D`e)1&)^8%z~@R~(&wp16LjHZne_l4la#cgd-tS+y_O}c8#1_tw(e|b zjpRa5Ja0MM+Zz{0%F2IXr%H!b&{Fdj!`g~n4M}vHfx*{}JV_&3Z8Zx8;1rDU0KXF^ zw}zF`dUDP}nKEY1X#wvxjl}UlpL%HC6rhotc|+1085a58z-Vg3CMMKV?2haOc+`Q8 zqE(u5`^_vXtkn(>y$!A_rTMR}nanhvh~^6!;`yw^*eXH2`sIl+c-tNpvWI{+%4X4x zcNK6%YJi7@xDc&R)c3EUI)wsmb2*S*AGB3j{j!rC-diDU5Jn=x=_X^@k)>1>*nypr zl*v||<%qdJI;<9!lUkM80_i9#D`j6U1(-m;>p@}TMA9V<5BwIX+d@v+fZ~Lt8dHIF z;u}(~yA*g}B0C(Uat>Im9}Nn1P{gENNi&f!T|Y1i-ie^+Xl8J_gH1?}TB?W^FIs-m zUAjC8f%Qs!g6zYE)Rk+9#ysF!+ku=(gSMK!m*I=2jxLmxh}xy2k__bZ5_!48Z;pwK8I)oD+$-6Y@b$kP@+exXrI)zg6a_W;gIOG(Er zv32dc4I9d?IR|6#QmK_1m~CZzxB=~rr!X+Za+)6>(V)CdBSp86joKGA^p{Xg*-!cJ z1pW=uWXkh#LRz{<(FXXHBOodG+=z7eB96!%RAh%t5yMc($2BNhg;HY|@-1G`%9M>- zV)C>BuN4ky9VWKsc?H9qTK+pqro1De*>|`Buf|9IFJvYi2|&vHp6WHx==DO)SeG;4 z^>)wsw#aN|B^g>m=p}OK7olxzC z+G>2rC_1>gP#vrQ4(;y9CIyWyHN37(iy2WW_d=SO?|?{K6CPf065iC=j=cI$8tyl8 zy{1*1;svD03aoM;SDBjlZ72seF-l=WPBlwg&CGB}j7O7oK)%zf_zcU~V$P|9?JQ&^ zdl&lDO@dYrLfNXGv3_!0YLO=or7b__eUDu3+E*G$1X9l?&g0b1G= zLS{LDPRwvgLkn{uu9bkb*KCFw1&xc}$Q};f3{IhD1{G}I8x%={bSpghL7hk4zlLq# z_KpWqF=!bXm?}ppgVQ7(UOv#sNq8!6aylM<1BvK(NF>K-6hb2;Xhyb_f$Lx=!cbx#jbyq1C!D(D)sOXEixhtQk$45G-!MA{v$#cA3ehOgOqxqSV0GqQXM|pF8T8dxxfl7i?L9Xq_w^OG+u%W z-xWP`$jp+8!~?m%${dajW_W6ORA^oELU#Dj=m?vCr!>L#8fc1A57csGF<@5kPS&*876h?Ye)VOTJD&Wx1FK;uV3i9t-o6% z)Uc)P`w|!fkA3)+t?U3iQEk}MMP)VXJh){4 z3G0s7xGD{U3~yo$u*Iz%#1;p+E%J-UjC<(1)J^|mN2?-%mq6H>_t8X!pL0d{KO z|3X;vlh<+0#p;mf1}!bH&ck=C%DN+aBA=g{4%)riVpu6ISN$(w@C)crAE`AF1Gy8l zW}PporYTl-D@VBn{A|j`{xzIl%s?6m=ArJ$0U~8ngY_P2+!0tg4wBbzuO^9%*dS6I z`j~tEd!gC`?*;3Rpw`f{X!t_Oeh-t$>afsPve4>8+_bG~-I)y4EumuV>qLnVp<#4U zVKmaQ!rH=ey-bh-sF&s5a{F)cr6+tL2Lk4KgnF6@oW2QO_gXzr%B!z5C`pTgY9+o< z>)@;7W~tOEy!N|6`EpQo=uNj!jXKR|%4-Krkz3tb3zjjg-a5&5JMzG+w06yX)kW;M z{)sHGgl)X(#U_;$Z8lwiEk~%f-3z(LUpXshIt8)kI(g3FLVlU;_Runs{h;cOZr(v{ zU%te{d00|yH<2xCFXUi`BI+m~YFn6(t@-7K(wg9HNF}xAsPVs0<@(4&%E9MQNXIr0 zFR0cKCIBo5>x(6y^M@Cc+7v}RtVibc_|F}S+CZw$D^|(r;hIL1Y+WasbDFxOj zfPew17f2EgJK=1XOOlN((&xX>bih-xv=+7d>nKEBlaWDQCLyf_;PI+(rT`8!5kNMs zC}#o|H_n}ChK?QrtI2dW$d`NJow*^9xtu|#_n@{CCOkCwLhg?AVZ&#bVBqMif|izn z-Joo@AXjw!wJi(8pfV+p_~b^8lR>L*BI-*(+L}!a2z3y3;CNxOl~b+Yu|w_pLb(V6 zGi*>1pALC6oOoHj-9l+})SDP9`>y}X@@@sc3Z*pX2Wyi{p;-4u{?TCUtG zf1?y@##3QUXr!`nwmV7~CT-eR_7qB~e+c5D!=71Ro!q${QmiNHkw&N>B(ZM@4K{NH~T2afZ&iLJq~2 z@?xi=`A2v=L*)a8$!TW4gOs$8 zz7*6MGV$kAhIJ>XZ*u8x^=t@j!;p(6AHIx7slv@U+}7yv>cMS6QdkWJfb9_yy`2 zk_@u$tgPOPZ2_1HSTFHJDY=q55b}Z4w66|OHjs5pgse8hKqQM-nj1nLmXLmtPh_j> zicWlITCA_OD4!^St81J!*aRFvXX^EcDcOY_C$Y-9B4Ceyh$D3a#L6n?F{PI4aGE_04?496*V9XD7%`$VY|M<>v5sF9og6YQ*)Pve$al*4z_kU3LQPNQ05 zB=x0JX)LuKYwyL0b_n)I^7LU*xUv*pA#=1n*QD8fq?J>nA8xS~Qy&6cD*T z9k^25I&#Y4K#}vC;HJC|R@u7H*xP#zZZz97yuLfUxc~^>j{gp1Ovt7SRuwAO85cKU z@Mm<`kv?7sVxSr9TDdf)W`*-THMbqvU zfs-5tPvSc=JVS^FsGB9XHKDe~OO_1SZ`5k{ey{M_Dx`LDX-D-A9(xa~V_1{v+|rFq zMAt_)mcjfkwj+hMffh_}t}!QWJth6lNTf|(C}$8sohYWr4X)V0qw9DfJA7#0*|1>= z#Xt+nV(s1gFRW^m?uF@w;ihc23L7pB<;VH>k zm>Xq{PTE+3yC8=5^b`v01&dqChdwm<>*fLzFU59B7e7Oi0*xFhTA+`W+7d!hB{5t2OaDDL!^ z$*VMJ6SZ_ z=be#F0VI(%1*(+!Z8YX)(CL?R)fw1zPE5yA2(mC7rGYx80oo9OHGu;q`+eM!FB#jY zn)j0z<-?*}Q%oAGRzD}rPF(FMORCDrl#uOo^t-E7ZG)y<`{X^Tx|Q9$7;Qa~`ShA* zX{%zttWx&=@-K;Ozrp;PvH*(UB{oAD58n6ch+fUfOH)PibZN>e} zC@P7^*21f4-^eci$=hnlNFTWy@^X53iKE*LhMF@h7wugxHBtaN+M}zkt&x|%4~Sdxz-Kf2o^i+!W}pY`LvLnPmmL@9{U-; z<(YiG%t1FMLfhUJGBklkgGl;+jF7>Nj&_ujsq$vYf5mlMr%2>-Ob*sy!iyRBTuWE%-3l!i)L5?jwS8D#S5FO`GK)6%QpN1&3Q+^5Sy9K zS6#pf0Z*~1XB-yLRDl(_0jDRURnq=tZw)jGU^0)rrw`O}pW1Y)ub*~GVn>FQi0M=} zvt=!I=1^7cMkeC!;b@Qs$Q;v@lgj`vR25w1V1VX)l%IOn<_R)4CaGnba1w>|<4*2W zy+J(KqXHd4Ks99x3*jfqWeCt{+$pcb;vSicTu_eQ4bo{qi)TYu$H%}?c1Pjt<#Oi4 zK?JNW6F*UMsc$pIDXzS+ghtJnDPLgP35670nShIShTG)JDnZUddD(YXGz05?o+!%IIlFKd6@E1c%x)rPkapy_ zmy9iS-NUQgj#qAEDqgZIjZY#s=YqkmEI@664f@@YiWQy$^U#Xl+9@z8v7_`eSBYhR zv!%kHorXdBjhyHJT`IWhg`KPk!zaof3TT~YMZsl>kqe52bt2@$F_`vtWvy1+fpr#Y zpcZA!j1F{m-kAS)(V}EGs5J}Sy+798}Q3n{Vu|;mSz>+iL zMGwi^+IZwCJL=_6!Qc2mh=&89%e&^ zT+pcd$jywpeN86hZe%JxuO~0gvAlNG_ERBlz(@+pn8Do2lF_$fQkX$Z5H#L!rVgQC zipgG)A~?ZtW_b*nkt&>ZJx}C}NRpUM)L@69TtA|Jdm>9Ky9m9SWGpf7nu6;Lp6Jr2 zl>jtwfwco-knMXRzX#Dcn=jp`IQ5^46EBn{Fi>40a(f?+?`>NMjZGFxlAj&6f1>PZhE|JVa>4$Xdx_f5+{ni5PH$;6tz<0kc<^mI=mRxQ z=mnO1J5G=HG?a8BHOiiL??M`}4Qw)@32{f(BNyegnWNI5cvf!_P(c?=p$@9Q?(tNq zjUYQ}+Ch!P9Y)Dmx-G8maY2mlTAvFU+i;^2H5A^TGJ*937Vbi3GwU7F(#XNub}o#Q z_yk#d^WwY3sUrZ_12X!`HF<-KdZ3YFH8B1Ms~BQ;WS8Src#GE%T@7jqHtP$;6hH`Q zDbx}A*b{QIQQo`+eYCOunF5>cE}N*RvUYw8)f#6b6Vp{rDN#xG&QBD(uy3$>(=|es z3CplvPvq@G(i$c*pXJaN-1)^D`DHF8kheL@)<0khYzGaL+vPh)mWG|Z+(AiU&8kG# zIpF2YNsP}I;7D;tyrtonpY%p4THomuw?!VvF4tC7U9*=e5UD%(i&a2b*5%XfV%Oj4 zd3RI??ocrbOb?R*jlFgynR$@WfdyIC)<7uFpT@qH=or>q>os$WHbM_kQx_&FAFt_VXnPlmlG*KmT6B}Q7 zJ5V|}vZ86(CpT+#QwMTVS25|G?Lp_;SniF?VGdbqO)&#L>L8IfbR%L%sh!_-GOFEV z9MlE1#EKf)j3Ks4WSTB)~_y|<8mZMwnHr~iA`-MJTzXP=&vuzi5CSXUI)Fg*o z{1>^2B>C3B9_OQ9zL8@K5S3Tni6`2ibEgbccMH;A7!8QZnt4N@e|!GUbQ{U{lt#M} zSmx#MZApEv&2{E0P1G_*L9FKpY^c6LHb4;$_ZO@+B zq8GA5p`z?=(hE&4Z6@|QQ};zv^Eijd{psiuecKD|h?`Gi7wz_uRNl&Y{;oUnSaW4A z-v!jC|FsG`L#krO(y&kMpV4-@en0W-Xkkj?cONLO- z0~jD@>r^(53EW^et1c(X>L-TQK_M5}kHz4g0&D}uRDfw{WF*?=?K#s-8SKbTUk%#% znPwXQmm$FuB_}n!Z!D~G`>A1>8br>3I`^+tUYsjby@X#pC{PD;p%_+uzRJhjWO?sI zqb#TV^|#i1ePZkO39@?%$JQk?Y`ZQwkJg^(R}Ih8Vv(9)8|USq6mMe4c%gYHVGc<0 zXJ-IlvJ`_XwIC9ATugKAuoP^Vc)6zo8TFf3stjJ8H{aGNI!1V)hV>5lA%BX8-b;)Wqvhi?VGH)G0Khq84`NLT;q7W_vyrL1z=WA9Vn;P_!dvz|_G7r||yN z67gy72BU&6q(*LXk+!1b93uwv1w?zw3)q7I==UR)dn_!k?`oS{Ee0`1SgFo{!0X&- z>M&=DPGsE6hiq*MYX;q55_1d~%?H@{psW#F4nxX`fUY)3E#f>?l;g`vHFn}vjjk`` zT+WSJAaeu@^>ltnGB^#2q(Kfipe-ZM2~shpPk9+@->6_JA)B_9nxOGU`OeM{eY*J) zITpVd2`7pndh1v!f#_B3It)rEdx3fcH=UHTR+?J`FoF%`bS*D@bb*l+TUu?64?tJn#03Q28lUd2kP2l~Z$pNwMUDTYis zQ-Y0~cH~`!lWneX;2Di?ru{*N(xpb?8pXKvFvMU#$xq$b#Tt_d}V3( z^4+RxI{@1aqUwgSX@fgG)7?RI(Gu7-wp?R)BcnoD({$jqm4UUH7jkKa>pyY0RiUa| zwXkkLcjiT*s}3CLA=RpYbw{)&NULwoD@K%+F`7ouDkzG@QMF^UE(h^x4t*F=EoAHT zI&EmbZ~^E_r)ua5uYZ0aT{^TCePult+-tIL91D%LX<0Fm~*dKJ5ZA8_{&Ml2Wrsq^HQM^<}<2Cb*~CVp~={q7Mi&6S4-_c zIv|RtX3MvY1#{o!6J5%qU#A?&jO_|+b9f<}Cp2wbof2tVWGUSp)f^fk)pTMj5w0OU z5bH0Zx&%zJQzL&mZaYw?Nv7p!+6u~o@dKz^n$olyNR~8=ZA=Gh%Qq-WjkS|;?+ju( z-W-rE&>GX2>{mm*dCu@atuL?Ak5r!itFfl6@{qcw+mfqQ_=-|^KU>bfbjy_Tjv78N z4_N!kO#(KB7}kmMM~t;%^@EO~%eo`yA)sNV!`l|KMi?9FnqO~VR>8)~EsP5&Zl+?L zlaJI)kkby0qovjZ3~K!AUXk)vOP;Nq(bhF+Q>4}eM&OGgm>gF z6#KNjRIXi@0{iD3)oIUq0Zc8bjLcuiu^xXU;I7b%+pw6ch^|R3;9Ry`ICm%j|RCema2>N9kdgfwe&bm#o3n!_}_re5*TV$W?NTo zpMZ5oonvB$dChhPt9iBp-j>}$?JfE$m5DBD&E-O>l{F@s>2jg-l;u~0;{&xX@F9oj z`^(6d%y_kg&0-<{m|X(U5_8FXqH7!I%r&6_&LtDD***@|t3b6rZ{!pakvhga-==I?B(`J! z(8WrfF9V2&!4E0Usk3b6^{oX;iZAWWZsbx7Xx995{@G+A_COu9^)VF$ zx$RUHx?Xc5^J#c0t&2L0mF*_MmfH)}#QM^l)V6!_o8M-$zf)g-S^|tyZ3U1lfj5d# z%<2zRBY$|U)F;Z9Z8+D~s=v<2!Rt~f3hb!v%gF`YB-Hv3w?e;BRUk8%qB)6K%&w;s z#kWZdZ!VNT1-k{*?X=87of7bAqVf`rfAg+@1r9HJvu~uei0XZvn*9vcQ=iCrGv(MCTb}_sSEuriZPP6X3aIf6O49Uwt!eWNV)Ckwx_OIf}MP=4QWvqihXs4$!*(d z=($}(UMj-I5z|=6EeX)B2HC!YbH{0s7xK$rof?_`72KZBZu$kr`lk=zS-3Pv`w&|L5?Heyh%_}uVv8O1^s(-E$=H+U@ZiN^AbkRsNNY9?dYhb3Mpc3C-# za}?_2l$XfmyO^5i`9)m~VyhfcA2|Cnf}}1K^Y)U8DBuYgi8^aocZ8Rg)&q>FM;jK` z)9lDe8ffisCIkQl8qwUOml3nBgEW1x? z6@;CJ(IG=%3g|%naKCuL9wkWi7NU0*EpO{hMB+HQ9WaLj#Z5<5wHk1^UiG|I zR;t|>*&;p{5%q-E{k33cgQaeWE=bbK*dKhi*jawdxgQQ{MrN}*CQT3oZ{Cl7AsV4H zo+OA09%vIAh{5|nw4$-LuAb?GlIl-SIX;nogwR_t%O5qP>6fKdAA1iFjR00pn4y8V zRDEkutYi=l?J2g|&RguT?uZeBtZibtfYcb5jmBYKD5}$?$lGxYytqAZZUKFv7J_S; z?ep?!Hd9kxPr&#cA+E!uWS#XEJ5xc8?I@M0t(CPo@j|YSc2hCsy5%QJX0) z2ksq8Vtp;Xen+*Lxkv}1g1d!ckwQ-3Q~bQvGHZpVgqM^3>=BhBcWS2T=%G8DLx zU*?h!JI5Idkf=RVRoKCVa9#D~OAoujO7@l00mg-!8&0saMx={mAHW|0a z(`89*l^v){U2|TQ(NlZp994fJ3(TV-76N%lA-KCl+;P{Av~6e(rprr%m)9-sNV-sp zx^4L~hNVLq?*@3BE;$*YoU^yQa$w!^>ad_LA=iI6`k5L_F)|iOfUtuW!Do+kGu*Bm z8_o%^7}B$UNTzZ_HF&00-3xXjuYm!zcVxhCOb>2h9mqK)Xr0A^*KruS*TO+cS|}x8 zcYzAdNK|ZBD|Y0|Kz#VSQJRw}v;wdz0#BqIpIr+rp2k@a3JR6*B2qV$DU2yvC1r^n zOf|ky>SRW4u-dp_?X=y2ez!K)R=6KJ18TQh?4F1cax?{Pt*d8YUYwQ#id_t9$ON4) zXT|Gz{sv+l!hyW4&*VncT!bM;f~PcMLJK+mMb6c3Vl){t*lrfGX@1RM$i7KI9>KQZ z8pXd5Rh34*c-tGq*RtRe-=D80j$WnemQ24(0qlSY6e%kL=RT|8Y(ThxGCddu=dUg! zgVQzpDul!xL`$DyYmVqhOe371bgehQM++MKlG{cR&Y+&4da_AuTr7hOwQmIM~;l*;!1V&xPn!p$|#fO!I*Xu4)4QVtU zr@oO}w5(42U3k4UT-*+SNA8A$M!OkrMC+Hgsp<mR2b&Ps|%UB5Us=WwxxeUDaN3vk|KsC2HHbJ{?K%R-?6S?_Bxyu^4&{0XV zi_q&GAE>R~ebLdub_=!TwS#KFG0GN~M*);Ww@wipsAKL~jDnid(xCR=gzsuL%Y5Xc zVd-fXSH%W+{BC&`vf!QA$qN8IYW^P9xLYn|z%2qXe#1EvNr}uM1q+INdHqj#KWouB=1qz0sLh5Ypy|u2 zgOLGp-8f=NFVu2hV%x%O@v?4cX3l(RH7e+AR0(z=kK@N*2_s|nz} zkg8A9m_-9{dxFH=FGQO~g=@XkQH9v)TO~b_$Ej79R#6?6hJ+CheTz8%C-3xO?nV*D zfA65J-0OHEbcV3G1(~vISmYh1B;k9wNV&!zPR5Dr=?>Jgog+Sc+prSP6G<0RbszXv z&Q-f@I@t~mbwl33nw;Qilr(cHtXC-ML}6W19lyr;66nghA*b;W>y1@YzkWK`F%bXU z!0oG|HEeYNFYXZcMk;5#_w7@Tk;=4^1qODL!3${#&^ndIJeQ7<#~WQ;cp|@azn`?~ z0Ja<9LB`IIod|uU(UoP6TsHuAn60EI()5+PCbu)!CdQ^_=Iw##SVULX$Tu!nxcOVP4>UAqEJDF&-&zv}eeXd@c|v`VTp0Zdua;XZxsy z@I+aDu)wC$=*U&ij!R{owz*M3r(4YR;MDJqy!eCokK7y(ZCt+2T0NBo_K|r-XR*aUF5EImr_Hk)Ael_IA;>vyJwPOV+nxD z6*%Vr@Qv8W^!?(&B!3{?EWGsvQ1wq>Zz+2s6?Y0m+B5>s$Oy4USsiuyVT|&lUf*kv zQGr`yaUkDb2@Ta+gx41bKK}FRo=q}B9iseyiwiyV4>^XY?Rt7Rn5-5Tg&S%_^;0u0 z)JZG(*S{c#IM8^2yu1z@z*L!E9*ClsW~>wH;J;NV`v0MoLUTO>-amvIB6}u{PNM-E z@_gf#u$@naZ-|MD<+l?UfG&Rrnf7X?L%#*b8nNA_Yc;d$Q(bs*(6Pl%tI zKNzq1Mpgv+SicZ`Yfi|(_TP}&byzCZ5FX6T?HgGl&Q3$=KlDWq5jlwlUOFMBa-jY@nnHlsYDmTwEAu6On4%<> zjnK3X(xOX)b|76MwA`vM)y4u&eQm&_c~UTqNad}JVE&Bt(*ZjZ1)Xyi#dd$KR;XMq z7{sVsq{o1^JXWU4@HHs&zcyL7DAHuPb;7n@H$4}fqb`J$Eu=4gh>79YKdJ{K8Je*H z&WTvLiVsJxI3FLrgZG2BlW%niPyFw$F>;-XA(h4x4=vI`UpfU{S({WZ?2gy}*T{g# z&+h%VnWu2-K7BGt6i=I*$^gyYyu1YN@G6JypD5u6y^3P5-4ZuetTWb9o5%zssPJF? zUmizh#)Fqy{x{f39k5-3H#yP|Gj(G01L7kQlKSmnx`_WNcj@fX$hQksZcy)bC@Lrb{+0EI4vdnHe%>5u({27Zt&d3ZOa=0cjQ9_ekbI8LT`o3z?CgYrmBB6N}ws zH#N4^W3AlciUE?C=Mr!@TtTaM^ymSI%WJI@5ZM-Swfi8{zGq09P{B` zd>ajr|A7VvPap-Gl|tbD-v=YU@MbKamcyvB(0CDHV8EgQzMItI`z8ECL?+)8+$#PT ztvueSK%#gx#={4F9=~0n3!&n@7hmy2z`O;00pvLlmO?vI-}%n<=Mzw|F#55KJ_G4@ zgiHbEa==#!R1R_zw;PG;P(sA zB15sOyBL2{fG0@Z_ErlLqetR1uUC44e*nqK7r{srZcTV<0@4Pqtc1~tLj)RUm@{S% zg8Ymq^8QVR1R2`!KrjAA_#3wEHv_BuT_+1^iL;!%mO1hQ2nqo1;E~bt3N7hw;L;DD zgAhysMu)Dd>vLd0S8ER7OGHwrVZZY*osh0Sz+4U>6CVya%ZEP=QW39-yn!|aUm7|O zm=aVfgC_?5M^;+8Fy*}if=4JC9Beh{A9O1xsJx#{(I%hRxL@Jr$=C*3#6J_ILBj{j zh@qW;QyHPycznB-5}+R^2Daq9tV)QxKY_+gL_&XB~kR}w(FcKN-1D%F~k+JLxWKNNX1Ch_QyjI2YCpEyIy9>qF1u);lf(Z8|$3MwWsJkjKBI4l*!20fi+cv#!cW$)x1B-{E2`mzs1&laD;&&L=xa zvK@3lqbGsU1*8*jF?T3!+fKI&aneeB05=*y@zywV?7Bjrj5i>U=~`rLjd&UlMjpYF z@d-TQ2gN4=Y7D6@jmSDqJr20dtK$r3ndv}jp#N()ob@_zgZBfu<%EtemmbJVj36rm z)B||BOwt;nWJfxfe89RR&NBZaZ+br*HFR4zs_{7Rb z%IrePxe+!r;+&RX^OKRTrPNeuwCLa-X?Y#yIlj*>YcSo$8#$ZJTQOKz$kc+$}45PJO6$s-VD~mP%|pp)5)xa=m}2 z>>XV3v{FJFX{loC>ja)r31>$9B-fhpIE#t%ZnM-uZF@bcBGqw?+N6e`NUOR^GEd{5r8tigOAS!}tGJl`@k zY(0ATwkVPa2SrTCO*$zj{eIGUB5yO7S8ozY)z}?e^6toar|J;79}d64)N6G5aBB{j zTVMJ1MoRKNgz!!|Iq@c@wMpHOmj^=obY3))^itrq|X6^GYT1t&@!THaQ=ZC3R@(FV#CGB zS845JnI3Mn4exd$0^cSvx`>pvXx!xLgDpJhvD^8{X$ruz%H!cm9xHtyPQ&F7xF`|$&fcA z18{aYf@wI>-sGfXrlBsRBs__%ec3J^KDA%S6u;RrR4=PB9kg(UN8q^W$54&V0L2BoVntTMjh~HQ<`Vf!Yc6 zRxEQ`o#^;eWEV=|I}eH+8dfW+skBC)zez~GOobqmx1=pEA7?8Hb)kT(pxbyn8K*Kk zB8-Wc>5g2DLh5u!JF1ynfr8N+yl&M*?2S@d26)i;r1ggr2yayIRP6)R6ZC+OlJq~m zME{pb88LMaY~-*3mkA*mC?u6^q6NDIK}Lzlr562SzqklzU5#wOep~H#SK6vqf1+Py_F-pP7$I#Sf9uc-uc%T^85g_Ri_Drz>M!m=ZW}|!iLnW3M1A# zBNTg~e?-kppCAw$q4KQ-@&ALOej;&rd7~BH8~LS^V9IHX3RS-VrUlA-pcForZ`glB z#T~&4d;v#gkYfL;SICGO&I9objI1?msKlD!Ea$z@T@R_loTP?#n!47-r;hn8Y8(EI zs)EP6`>D%EPPZjS@Q}g-*({;qro-#8c5$QN1KD6mg{mwseY3b`mD%ec8;}=sNz43| zST}+CSlbJ^!A{zEHRH~}cv6rV_41WuG-4Y*P%EPW&L_sIH-kB2HmEyFxX`isp$3#=%~g{P5bEvoYe^>roxFhx90jKUM0xov4yODrA$sK zKW3-N0-W1#hlx;9ogSQvNFTD5@k045dN~=Ba&|4zFPr*~ns^`kQ#D-=tj5zp`LO7b z{fgD;vO<8Lj+MBkC8imw5i4ys@^*XBS0?A6X1yECQ234P2B1xOy<0-Q0bAy`E zBuPY8jqLOxl5sWI(XDNGSw+eAFC0v?cU6UNe=uU?+XJDCw1%NKwUrb}-HWAy`a2N8 zSJSb@vMh;LB$Rq?`rCFh?$4#5jZl(F4*(aL zk%e@)pf!%jfjnDE+}nX13ffYVP2}cNuklsv2BziET+tn3(r^-S|IMZIX_w2v&)y!d zZGrPZcdjCHE+Oy$R&oh$c_o*=9GY@XRPjLh*5_fQb`W@=WRj<{+mC!3LQ=O@kXNNW zQH|7f)JV0r$6^?Qz_|k~A4*$|dxC1AxDYuvG&=~C5~04$m2VTUfhwuU@hWn&;Hf0% z8rZ~zi5$R9DG;(i04*mV-0hVS;Envwg&lcUe3mgDm{A?n139tA_6PciOb+<2p16J7 zfuftsVaeAx#TmsN$TLuiojp^NO6_L{^&!3dSoNG0;ma}g3)z!l`a-#RNawI8#&!Wd0Wr*%icVPZrpY>L5=5W`R1bm z$AOIMX!(oR*FVIpmLcgzc1ZP7t{b4Hu~~}7^Aj)R1#^g*P>HFkc(leanYe;BsGiX~ zS|T;Oh495RKcwzR$BakMR&I$}xqTw0dLk#Jq*bU+QRJ|eTy2P;HGK-gqk!>9q=xs2 z7`iwwfgBPJFIUQlojgpq!{oHGoO3cA-OY`v?YJALbjS0pyc_z^cKtFF*A%s}COeQC zLGNge$aeT_=8~u$Fj;*fZ@`%(TZ1VT?}3f>P9u@BpHW_X;8@BP&SZCn>x)@GZ@w2Jy5E&7u-Ue3xM==$!OM6 z+@_W|Ye$+TDs)wsZ@Hk;GW(>8i$X1OIV-d=9XF2#({Qbc4cSjcPUFYyHm0=gG*BOb zP#1C*9kj;&Q^jsfR>1<5-i-iq!MsC&s`w9P2(Mp}lq zQb}7QOz$8OGq_gnjw*LHB13hK8eSfok@rH?sD-%}CJjrMTynFcyByM^WGVm)#QnEi z>Q}PEk8dByRHJY2V^WJ)j#e9B*)QPI45(A#aFS(lGkOEHD<{F+)Khe4a@$_zuRRdo z>5D*wBat%E`dkd=nvv8|XHf0Jd?lZ*Yk5-wE+P4J!>c%gH{hsM3O+p=Wq&AGBTujA zT@4EnO@wz?Cy|&KW@x_J*3$b)(T}kW{==Q;Y~oBXXjHci)M(qobcYdz{cJeFESolUsKwHwJCi-5_EmEA8s;-AG2jPW9 zWGObwvS(`TWmGWRSL-B!{=jB&ewF4RPJ#D<5aAtGXxN$Ylo!PHQ|6Bd_v4 zYNSW!lFhur&R$IH%yReJpwxo>6Nprkjx*C@8-%=1lvtrO+LDvFl|+>JMs~jNjzKw( zEbMUZKt6#C4JQ^A;+0gN_CO*!$qU84nzit{J_*&?>SUEoP|EUpKE8EJ)B`bK1^qE}611lG%fS;s31br4ySmPrq(cGRD^M2zi)s2E6WS#L6Wd9bO;x*-Ot z(xSdpOGQj-PxOyS`-PUcLTum$wne_sowe$qH$r{x$7ohD`d~k0^330iPBxGa^Na&T zhH;$xf*13XnRSJtl-MAKVbYkE-4kubmkK+wfg_1SegAy1bC)0_3jVgd!5EE$mM2gH z54Y&QCEDENjNBVpWH%aKn>D;f=umfrSBKVVEvR-p;f;E}CF_R)Hemp|MuXf}491^D zcOyONEzljg_e2`|S(|TrL@?o%Y3^v!$wZ%2yn?*`_eAD&3WZLlVka402E+|L)D5pk zlMwq0fAznL8fdq30I$M?6R+1)@)#?a8i;Wu;0Nmtxz@*5b8kdk6ExN4d0=t!vIC7D zN;-2@&~tz}n7bj<@I)@OUm0udSYEp|sCZt{olmY%VS2CWc##Ix2DTl*Z2){CXAPvK z#+kOWnF4J^L1uIz+!QE91Woq=vemzkp4N<}4UlB>=`)895M@RtGp1A-L<2I_LBI>$ z*$VHptSg&SU}S*V(MZu;`K`+^7n8?4DY%F(5X%+}?UUVl^ca+h+gPGe%;t&yk!F_I@RkvyxXH$K zoanQqlE@NPPdAwieMFJ^E#z#1D#XU+O>XkY(hKSR*a}AWqdtqWkz^kWFPbT-DB&82 zo*}%WeqO%5GP95)3FXG;S}e(`;Vp7cbQM{P(1OLP42ERJ0|Zj1Aj2Q`oAS+us*;*Q zHKaqO9kKKU&A|-Ddnu9ExL+uC-8Dj4ZQp!qLB5c_16mCms%fi2d3O{_meQ4@gMw27 zdZH+Il|l1mJ=~Wz$rE;bRJRGPAfR2aUd_kffsekYmXyN#=L9p zM($J;Vd3G;D=1+5WSkANEK-Xeg&W>Hg2!zD7*Yy5?;VSi&WTd=-!&H70}TS+X-OM$ zZ#%TiBcMdyDswcUMi9^ElO6gUt)x3pR|ym}rmONL6ikcs5Zb!hD` z!82^C7468!M3N>2sHEH>i%vSL6S-snZ&!z*=KVnnq4nJ=UP$i%t=$v63Iyv&UZ_JB zD^!v;S^PgplJ3OVIeby<*uH}7Dgpp)}AN{aK6C#BgLfy9n4bk&0;#w`*}6icRB zxF|xar$B9jFQg-bRxbk8u9kzRURn7>`I7G;rShRUVzspUCQe;G1Sg8 zEYu41dX@5O5^7uC9ckFmn8zNusU}ZcMec^KLV%T#s<}sn7RgwV)&j|~5~Khh_6E#d z|D5RT98)g*c%!Ie$Cos+{KHvw*5DC)qb5?`wjC0!rT#ISC;HR+tnoSA?d6Uga(j=3 z+77BwPjK#VH??AEBKAP7+8kpt&17`s?4UxNQ*YUgJ_OZ%w<9*)q+H?jE(~(XY&V(1 z^u!dZm^wX?4}n7S((-=GWS3Yc2(PwsAv>eiv!0+Gw4m%KaDgF|B%Tje_Z1lzjc zJrHFAt)pipQ7Gc-dm(SVdE_l}y;~SwZ(mMc6Q6;NcQ`+7k8>lf2*lko`8ElFb;UiT zEp?EE1)^P)*LaO7cLN1@FQiTb=<~~}%jHu$c8D8#s2g6do`Ki6R7vi~7PdqWWW`hZ zw%cewqLrDaVV$*7%$=| zcD#BbJ77N?6|w*d&Pz@gNcnUv=Bu-mRB)>-JTGKsDW1kJP_x7|FSQu9Kr@_>lJuSH zOt#!j1~pGGb549mIsvM7-8pa523o7IZlJ~79gU_^BbmGO59G6@q)3z!4Kn_&LHXra zg>Dz58_~E{X<7g9+S6-ZU1M4(q*VuAWg)90EbVebU5@(12S)`ry2;BkQSjc#FWqM< zZ8V6fc{QLU3G>@sP$GuC5y@!KTqZ1FouZ9?A$tvLWRiErOUx`iQV(Ru;9_3JyPE96 z^4gO4&>99@O{N-HCoB*w2jDqBac$kATL2;cj5|eFtrl#I@kV?tZRJu|40gN(?}hTE zPMbB791N9e$RS3J7qXC%gNYM9Le-&af&3@ zy^Bm`Ua9q!rSjS)ky{-cgWbrh+eFi*|JssV_D|M85*N~ygQjff0qRT(a+u$~5~3q* z(Bzu^<1Gb~CY2hxSJK|dy~R;CnEf*Gxm7mWZaJ=`OoD`UEAh>k7H_J$l1L2DQQ z)nHCsURHn~i0v;3=&=MPS&3jv^@WVjgG(3U8pDnp zok3%bwY>ELd8`Igc_50{=$hhOKI@NtIJjN;jck#B+CrT)KrWUYl`^Avf~MgTX*dnu zk?J04z5`ie3puo+@zAi!+eZ4kT};|0)FJ~U+91w8thy(lyNPJN3z&pHSkl#V+f~uh z8xXh~{DCg#5uv=k1E4H_Z)@a2HUTOzXZXRhh&Ehth4MnpRUfMvS4H+QAJF*`|Q+!5> z)jOKRDh2P4=CLS)7Hlai?oi!?4(|lD2QoZ>w!D8#o$U`+K<$3^LU;o*jB_a`mEPK! z%_9eDV{KO=V4gjAb+tZ>h6k46Dfn3u`k>qJZlG%Xc3y+$uXo5qx;(>s1zKT|Iq&7Q{&vs+!Kx@{yJvR$#MUmP)bBPYVyv)c zD1?z1vFlb-91GPhzZlmvQyj5Dxf$oqUdV-7(eB_ZuY*f?ozS5G4wNdvu*clmTTiGs zMY#gUDAcuFgW7zVJz_6Zr`ro~NHb4>X$HyJfgF`V>vRlP>+yqKz(34zko%4oqQFIK z^h_5n>_Gbf*-PxEl$1eEl=x+u{EbY*(;OgZSdk244S++4TJMxPY}uwq6~~$ z10K0n^IaFAcdCxf(B(F)QGxxgLN_?pfG)eCp$4T;u*vP}0vcfL|5 z^H!uUQpB~{^;0YCcd=RB$ntVzD6Pu`G_%xDt$+JXk0f7fy*8lX(v{>3r;_-s8BjA+ zbTo0PN8EUJM_FTrwp>pp=D;11xM$lh2RZl`P46*p^x5Cg)3q-h;A95Qu9J`uTQ+&p z@P)=%(~nl$ag>qj*>VLHPz?f5IJu)e`qWh)sNIeiP=wch&^FJqU zlM@q!ui@PhF}F29iBzsPX;^ddRPzepLJWSStHC2w>aOJkTUQIS<#N*alm zs+o0HKe6BgwYjwbrKY+$c-LXZLiy6T3^{G!@OFqdZ%ytf{nt$LDz$xRrw!(XTz4!* zpYozDg#vHg2Ele)_;k3PR-6ZNxjDBDzRD92=hLhbq997sz#4-LXxPO@r{Qc@^rusd zoGy=T6#ZE?384E;_h&7@d4gjBituHp&f=#n9kQ z+2cvYon-Vm?+2negY4Q`FZEttXKTgmh$R|%+jB{6pVtZLCqg4)1XH0{t1s0VoHFCw ze_PX_l176zm>->|%5^cMxlsLIdwMj$)v1vq<0p#l1T@kvW3@lQtLbg2?;X_uEyk4C zG`y?;!8?A|VLd2@GEP_GI9)97L>UuI#K~nmjX-PVJ7~~7ugk&N36B4dt}{uj9LAC8 zK2K3c@NDOKdRuk>ZNC=*N}}Xk`G*04APIutoCk!i$V_^EVN5&~=B*~d$<`gU(Jhnr zK07WRpv`9!t&y~yR^u@qO0W=CEeWKmA5%Y+WllAspGTQ3w9j4Wzj1P-Z{cJ3F1 z&D7dBL)eJVm|B~eUg?G+r#B1O3h_Pi&H(H{X_IIBjV-#w0k892?Xl^#f~i7!g&pDC zq#dgj3%4Km7fL$r$@be$Or1!beCJo%8hUy<1)SH1pl--LXwp_&${S?jxF4SLZ=wIYc+0i7{Jdad(jV{#g;XSLn&<#$Q(kC_KPhF%9s6HEu8;Pz1ooBsux!#wVSI-PyHquOPA zGvr{qDuC^p#DT2I^&H-+kPE(2lj}>yno$O~%EePOqixNZ!7`oH(1B8$?)=KPb0RwN zIc=_90hIQL2eKN7HHUXWRBB6EV{n{7IH!`_+$=VVLj#{4Jkg!*MFJ!1Q%njT?g9z{HFL6*^kF)Ykrqd07>(OTNVUYKTss5UDnd9D>qeU(vq&kWP z!K4bSt2uCWAU+SZ$RUzhnPPdd>k$uiLuWCdFZ)D%Alj|!8Oyl$BgK+6p(jeteLyhZ zx--&msj9pZMC27&)P@fpV4)HVFgie|x3j|}SOV#RZ0t?N>eSlGaHPGdS4P8Wgi-Rte&Q>`F{?;pS^cDN1tnfB*SFNkoBh(r2+aP1e7B(rrIyO-1gfmBe`Gz7A3AA~G;FA$_FG)yFNnfJ4!ywtMUtVv z_`51>=*$>$dtU2@(FShje^<T)QeehW(U6;-srF+FM$dT9hBr6a4=>6KqI#r*iVL& z^5US)j+n$9Dbd!oO|Va=!h1tg3iL$f9gG{7wTf>sHGrV()`uv(zJX41?vGU(jc@P4ktvm=X-{XCxgcyg0n*;0}G$ zp;LkPcQpRah(p%;#uNGB_$)6$j@S!^>aOY}vUy5X`18SNyji0#aKR^J==4wIjGxr+ z){_xmkvSdY?tD?3GahO%pZr&DFEEf!D}N#;wWOu~PgZQ?!n&b1{6bZtU*=O|6;(Qr zIURL-C=EP0xAT0W8pm5U6iOZZ`js*}P```~>YAg&@Os72`Q?GqWZZv{(l;naUrwIN zdqZuc?wqq$55D`aANNU7&yKhvE5`IIddpw{Uf0aS>xVnwRUs*>pY=`wF>Vyr9eFZm zQj7+Jof3u@q@+RaZW58vq=8=}_z5@QXoYblYG z65G-0Fd0IJ*A2kojocIIbEe-jFoPG5M6W9^-#*dd)5Ge-0<4}8{GXycb1klq-;oB#D-S7=Jt|E51~E`6n73oIrx;G>)vO|3o7;BXy}~ar?S5Z(2Gv z%9x0CUnb^*nI916ElejzFNo+`lzNtTFm8B5KGQklv_2pcYQ}W#7kZ*Y2P#%7Es}KD zAU8TWhYF@+$hTLd(+;hlc62zLJKz?a3f(w~u8}#M14u{C_}3&@7)}f`G)DDTMQf36 z7N#m(qDaJoD-vS2l>G+0IUZ6vQ0?9&{Ct`E-jNTPn%r*NwhhjTl^F2yE14|1a1F8;Yb3a-*dvp$*i9ox%7Q;zFII<8>r{OC7_zBkwYi z){@84NL)+@2k(jgfV|j18nzL+3u7ZEF~Ds+auW1}^M|1Zn2aivL-+-v_GZyj0v=Iu{V$B(kGRNz;HmZm&u81}0%9IA|z;u0TdZBsr7i3wAVq zQWwhHhZhkh5l)!Y{4p?i=?OGrU6CkrD1E>wlA^*Aw1Ko@p988?XBUyf#9F@FP+PUD zMWaDX-0@V>T*z#C;R?m&gk5=wk;E8@)D3xFOIqhI{I*8J39m?6C|@El)sUW)vTXq2 zt}J-}fzTmEPxqB?>1W~n6)k;zp;g{;Zokurvb>5EZ>m;z#{dsB`IzFesmV$_AJ&Cb z&F!hu5_|#iH$pqj9eE)~OR~IR=YOd&IPoHFn{(dH+NmM9CZb;@Oe% z#=e5kXzUiRk=o7DgiWtmBLvc_2i4cp8fsyyakLVqrEDNU2Z=OA+99r&`l4!-s#^>) zp9{G(0czZa1-Zs0HRbmYG#11TyhyTR_RBWbqE~8HISkvA&n$xDMu=0@!Rgrpxkag{ z`OHITeoIVBX0X#pDmt=;*lyyYy1iP+57bb}0rLrXrTRsjZu;oT4$dF4%YqFyKZGGu!o%y06A3M?8o8IQY=&lA7@ z{Mk@xX#z7Qf|qU3cUL>_Y@fiW-Zpe*6@@7>jl2YK_g7icjB@Azxv^PtnjExoV zfPP0#{7tm=@RpeN1Lp$j=Gt{AX%gUmNTb|;f71@+gWmji2;?{rP7anwv!b6)mU)L% z%b9;CjYu_WyrSlpe}?z(%*hZXAQx2L4UG!!DH+wnx}%zm3uPh3ae8Cb1O0RemM}#k zK1-<@+m1B7j3<4)6R~XM2xlzq@srLpJVq+W^8m93xg(x04sBR#8QPev7la}WUwD3e z%4sYP^HI$MS*H#Da+P<84NqMflei(5?$iKxmV$DRd@vpnQ)RpR1)a?WUM{PsL-LR+ z%|{&DaXZKpu~!I5ZcypBU3+*zZ+Umbim1Gu8B*?GJa14W;Z#9hGacUaM&jzgC!y{r z#$*5*9hg9kB>O7A9BMT>^A=vqopd}toV@Cr#E$s6II#`$KuOiiSSGV0maiK146l=K z@>cAQym*WfTOrFQlib4J21ff zfz^{*7ldhndU8T4K}v8MI4HprDMMo>F{Ei*KEN6*Z3i;}te=wT<*QcRYtJEy#P&>R}1c;oQ;k z+gMy=)=4@aAZxs!Yk~oFPq^!FPO#+>IH)(&Q5d9Q?I5sa#dR^N$Md!Mu#>@FBGF8> z19-L7kgW~*aynnSZ=$?Bz9Dva0&hFBK@&D&CS~mi&LOg_JL*`NbtBt5)b=s%=lBJs zLL3Bycb0nHLjv!KVrdi6G#I368z>P_z`6nNKp`XO5urYV6qtO0%w<+4XcZkoyY>*? zgxPwuDR+J7^-;hFDN1SZ&7sfii(X6R*v>0Ux=)BSr$%p#foX z)(();=BviBgapkM9>F|E;M)#bid~cDy9Odzu(%>Cpmx8C-~Ft}%q%nc+tADfxJ8Zh z-5`}zyq~4WavLW18EDy`*@qaSS1UQs%M=K7NwNzR5r^buI;jJ1#4B(FC+6CymREbp&hL8dlr(xHq!1Q+^|Fpna@-B; z4b^=y#WlPDtUy!0gD19G$P%0VF648xO~$BzD0=}uB9MHPk$n+?xG6Z@B_XlMePBVW zl})CZ4uIEpyFwk*qHG@ml}m@DHfD4W^@-ZBdvUOWnvaQ_H!u#65IebA3(xFd^1E3s zzM*9^ zgB^MCgtTd63)1oO;fWOM6%G+o4W^HMZ-jkA4Dw-}LACmIeD7ABpa?4R%{;}9w{_7l zFt+s%v|4$+uXkW0R;$mKI~qG|Pq~u3q+ivXJ#WFzijTnos_uyH!fX*YmA9Mu+&C*Q zxBp2kGSU=vXD8aVvr2$+M_Qn~%M9LUdH@l~1%*0jX*A{KE5v?VeQ#*y-RP8}Zyl(Q zJ0Nxkt+1JZVY7RO<*p*YdPkY`oCw8@@wJQgI6Ly1FtnRlIQHAOkI^)d3$nz5+zUUv z=|#k27?ke6Q2S`8gx4trO0hhlJ8k@ zgj)CNh4u0t$d+`V8ji1Ts%}|ts4j}IxplVWw9>lC!L?JQRtS|G&U&F&=g~D96Byu- zC}>)FJ3vBkRXc#6eRQ|T>l*JKcq0lt>!Hl)@_AR;3UJpE+r#iV5C;DnjpDN~ni+S# zoS7Qu-$9*on;Cbhsk|24ub?5O8kCc%z-X{gl%Iu1!h;mu1Whx~bVo5uXQ-HTR&Fuz z^S@DoceR~w!@2}SGl{nMjo_2qrnNC0E?L0!wx8BnNFGxuTia&QvFmk;cOKR-p z0tn-0h6J02Q=I0;>Y}0bi8k68&}=GtAvQ;Ye;{}*uN-k<0NkMNjyhCcA)d1(YnaWK z8{*dC49FQHHfO{X@Ot3URCYx6r7h=6P$O*oe1K?o&U|p3gB?-IVaKJ2ajHrTzCf4COP*7cU9Dl{|l*p zPN%SSLRs(FY!3Hi@y%7O9D>=AZ?YsEJrBoTSgr|XS+=NJ1?A;tv#vovH37dRPWlD0 zGI!)hxm2V&v&i#}gWx^dB`%`!7r zdA03Go>5z#~Ynesg3|i#H9YpR=CxG8^hVmXL zUyk{8&oI<6)mGUJ(E%#g@t~4CJ|C>09aMpalw6jIe~_`QeMdZpm~zK_QI^Y5J1g%* z+yl83r<}$m$gP!3n*-HSQ+$6rm)@JukmSjAzjb8!K<&Bme08YZyOe=0ylqJbiX7v> z=)(fKe+9ZAKzP#PMky#gb52TZLp-VE!u18yBDPAl8 z0onj5ixzI(NlvA}%6T2-I8T8Yw&kR|6V^CCFpOVN>bI9_NUd>xaL3Muq7O5>CbBe` zd^)3z20LQZDJxB;+HxQjNK_?js(wHY`;8aXT8LKz1}{o32>uv^mD81o%-UvJBI!m^u`>$5}+2 z8jbXxV5bG)y`$PiZuEnidq`lyD?iZ~^{SW8c9EH4P!h+T78U zbw*tDSY%P{b*e$hXVG^X{!{G-ZIHm$zoabeXI>s6SxS&`4dCQmI!|b59SX zm}zmuR8RDsD9HD?Dz(ZHNm~F>w7;hn>cu3xxAT7Mv?r($K!VwJZuy;sL0R ziMp1p{3URS(AYXC#YS%v)_&NC8#$PXymU!Q-BHVef^PaEU<%GD(V~1dsF`HEjZmoW`cWv|{4XeZc9Zh(rtrMWD7-srB1>$0 zKa-JlL*GoPCdqM+;CxHw;k_XTFSMc+Li>VKaCtdIcp_dushrWltBymB4m4rWky^CEvzJ@5m)^X{*43KHJ&&?hUksDun8YQ1^=ZVZ((B zvaY)w(j&<=gnAM8i-p=G7m9&>WppC72Cwo(DX@iFxVXj2Z6D&bY2mGggNXaoFMYMt zkA%oyG>f8Ai&76?IP+$$yJ4L;rfg?#?17p{?)sKG<=1xgD;PKH{iG_C-tPvom13;R zEm+}eV>pp&Go>PpzNrOJkLTT@q1Hy2O%1B12`hqAAigf~Ku*ITx6k}YZ6o8su}C^l zzHBD@c8ev@0oS*)GY?d;6y&r=M(2(>Q?P8{Nuq<=$#DknKq zY8&|u`W==woGGC1Mj)OXNT!>_XPTz8^47k6;z$K{RB!IZdExcd5G6U^!XGZ7x}Z?7 zx^mJPNvpEoJE}E%UCHpa!ko6`liIVx22lrQv#EH)J5@AdMuj@FZ~7c)^<)QVby1;J zpat~PFlGiU3$d<4M!1}=mGIS6JRyYG8%jC%5=n`j1o$EB_yr|m>r>cJeGtiHsPZSO z9cV^T*Ubv@cEk>{77mme;?CFMZJbDnEB03~Hv7?u6`!|;^+bN?AuH1OyPUljHHe+9 zg}NgQNt(-=kwmGAQ=Nu07Z4lqU5ez(a7$u6#~r0b{awA|d#k}alF(pBGl9@+yrhyd zr%KVjDATHgx--RVR;vTUXL%duyZ!ZwGWER*VU}bV%9+g*B@xWS53&1-Wq2j7?{HG> zL~pbvk-knzUMweWV7j9@TI!WWk$d3O?+u|Cay;z;FM~QdJ28FK6JZ(B(677;Q)_(L zjV!+S8B{r~HmQR*VnEkKJD7%X!3@_IxPC>CmgI>6)P`=E^ftf&)sU$7aPkgXGU*-; z-_ywMH>uRM zHFf2RkwOX?J9Oq_L)5;sRRVu&1Rj)w7u2dOqAkgbdeOm~euFUrcrS?2XV>NWgeu0x zq(!X1#^n?SUoKO_+lyMZ^45ssl6EkkW%5l6Cne9^PQ=!} z1{K7AVkT44M)P;%ORFZh?90nGf>U5S@+7OY3FubydU_+aR5t0z8{?m4@&d0vm4Z8sRD*mm zu8Hq!zFe!sYsb*Vcn5C802l3%F0cbyMW+lyp2jKA%rU2P?vVwi7K}pn()|zuPCp5)&sSFXtdGWAZ2AjnsW7S$fA@oqdt*g zU#q8>8ck(wXdH*lHnvtl!+HhdH;`SS6tIaHs8g{U;+7Y4>Am^keVfS6_#eyKQR}id zZ$ov-&~J&Fiz2DWnRaQ*3TI=Ur#Rugq58F1q=(8Phu==St+gE}MdJOg(btL5@Q&OK zl`_%Edjq)_CqZ=IiCqS{1g4bEUO;Von>0^kvCrL82BlNFO%p!_)ko2lR5bTM^%S{w zGW)x!h=3SaLG8OP8QN5mTT%ao=#Ei9(=7xqAZ6{Mh?@nD0pTSjZfG{f_nEs; z+bdCjMM-0!CW7y+0)&ccfH}bH>4qyxd9ZEXeu-44jbWlsH0~RtD{q~r2F`~&NXbnB ztT@z80LJl^3w12gu7>+3Ct}1r;XRRM=M$l7-qgME9h9>H(l*qx>x&YmNn-LkybWqg zD8flg!%$mVwE-tQ;q?^`sYPC9>sYR>k&5R)ZE%VJRB9~E!B%LQWx%m?hQ#e$*x?;@ z0NI&OQl$|j)q2_u&AEcU2!)0d5AYhE`ku%Vo98vuyqrTSE`w8RoiiEaGsSAq@IXuLn7cWaoTKS13V1f|zv-Mh(U-Gw*wBt>{C?ZH1gIFam_pUwcI0KR z&^n)jSELP#^&bz^bs}e)(H{Sb+n3i}tU-}92rnRw);qj|8;Vhpp$5(3kGnX+>+>|B zMqf~Q2kl~`?KefI23O$v6+*thr&Dnos~Gcx^@cE4X?2qZ?14l^ux@}|eX8b0k*Ml2 zgJ0?-VcifNsHD~ZIZGp^_+dSfwK>~I9M!e7YG1zO4K?@M@@0{Mt8zLM3AF~soMrmF z10@xjrM!*tR4_Hxd4~=7P&J&ssSpjo$!PL*5S59mka3mOS7(iVV;$lR(OM#O)j=JL zTO;B9*pNZBs$zIGf@tc)AF!7508!1G(8`I8`6Xp0>xR4cN9Rl6;9r(CAQtT5dwI~T*es*E{i|v)=n#C!H^60sv zG*d%^Ru^?_0(9xH8i!mEvsyvJ+HFEUyDjStwK*{iidbh_{FMG4-V>QyY)sNB)HY&! z+Hi(e(01^(hGqJM$gHZo5_CZ@i71FEf$D?nLn>F6hg#%KpYpDLdKR2MQxgmLnGdJR zNQNWyv;C4Y0a9-$)%~@4J_=Ozd~8MqDBctK&bVk*>MW>!(ig&eM=7mOCi9vx28w>$ zG2B{iy`j<9z18wE7o!dbit)zkJ-QaLP@*9pj0;mcbC<}3tF{*hWVtiHLDWmYdb^Di3=)k+9%XUb3Ip5gDbBC5Wmi^Ya ziycEb{dl18)}oZ#ZwKoTk#s|&6IMLuD5E0k=TPMZ#9$nAR%mPQ1J^6(hPZIe@;Vjh zDtk8l$Q%E>(3!Ew^-ci3b<0gM${Ru{d$cBtp+C9O#={1_*eGxNeWc#r8kQQcN;3u?o3y0ly?av*JX1~Tq4 zAQ^EK^5(`TYJlUWgY*S24fyRE<=xSE)#?BhcT3^8Awb>>O4cm@c1K^X29$NOnpZ3! zlM2M~j{}Bt%JL{9&Flb{toNpx1cjJV_YeWtCHJtNh$PyP+0CZpnYK_pF2{)i^@u^p zZKl0LrE;f>w#h@?(5zx}kFYh$A@^3H_X__LO-q=~UPd`#jR!iB>P>)8q75I#Y@H)J z?HZEI9eHh`S;L%@Rh|xxENh>u6kAKW!=R?x&{#?NHfzp1LWhRU?2TEA>GAG6m$)S2ZZBQ6a1wpgVQGfP!u{Bwo;f;beeCmKSKD z&jo%EyDs7B8d*0q2i>`et{%jRSW_XIhIdD9tdrJ29x7qAm^en>1DVTp^g0T(_*#z`;fkcjICF*G1J!dn zr5w4giCLodRosrXqq&D;)NSh?o7sRkyiU3kji}%)x>JY5PUUI zjKENLR12ppDt89{-ZrA76p`~IqN>n&Xm2EIgKWNTr~_hm)(ehf$ zANxor>N?0H(JR7{&%iCyj}T+4- zocNF-maI3#&|Kcm5<+b-OAD6u3YcP#ZmYsxx(~*JhV_nG>dRv0XpfKR5MWWbzN|@P z-}38lDIp;Rcpyz< zu9tLvDZFou09w`?@B}5ge=Hy6V=Q8nMh?h)2GMg+9HO{0V8fa`Vevp6_j+6(1)z>K zvbMOPB+@=`thl3Ki;46%kOxc|Qc*_9)JIS6c*fkq>L`Dqj#qs{t-Ni!&Ogh$AusMA zTU-HBbJLcR>G1Ao4$^!q*E=I|F>+57-`1Isxp~6In{+aCd7zd$UN-9b;HE01dHRI? z2|5ijLo$QZa9aHdS+9tTf|cS)L8QXlz=?x3?%ed-Eg9`R*^ zmwQyM$PZ_Wq!0S0NPL)$R9-Pps5jL5%9{~N`m9^>?TRN#xxZpL5zAc$5v#}I!y8IA zS$|u+{g%|idqr+gP(5;3xsAVdR`N3bNf8AdwGd7lv@}{pY9%kyf@zn0xg#SSdDj$H z`{b9-VBJ6~Y|Wm0(DwRerEaJb0A5#KjT%DFy3p)=TfXaAX)URCX_ z@B`^+L2gRRw?1bfZrR_Eu7*uvEMkZE%@zUHH}jP1j%YlP+Fd}5RG0kayaG-RsoW32 zMwPdTDwL*!vK#W|8fo-};q}H6@b}mh&#PQfNS%%M(Zl9bSMx*>>xCm#AyQo?2&-~3 z-OYDr$!5#9(Sy(I5o&S5nfC+qJYW`OpU9`zFgxbn`>jqLOb{UNhI~InS{fQu=donX zk&pwp9elkyNL@#&mu|{RtP<*mj3}hpSx9x%tJwEQI*>GH1t4W~7f2C-aXG)BQFbyG zPXsR+l~*ryLAweW$+iIHwRjJdQ6nfl3sm>fN+lOJnbThuFnBh$>e;9g&cS9>zm_K2QvyFVIO$*(N@6=}E$Mky_ zlwv-|zmBb-HmJyB#1|AZ@fPwV^XljrDs@9DH&j+4uCTh`11A*^=MG$Egp|63=xr`y zj{-hX@@0aRYNP_MT?b-a{6CTNv7pW}LuIfW9JxDsHH?QhwW1`p;e*{aUnF%Q=gdGW z4E3gI@OJ~Y9p#O3Xz{jW#)w>_mmS2_bw@6}||3aIPRURRwhS(FCNCHOlHACgWj`>dNAoYqu zRBt31@mmO~vY#Eb${dMT-6`8r!9kn)pI(Q*StTm?FUB44N zPD%1{Wg0%BD&dAQH{{AZw4O3D(}s^=ZUYjP z87fS+GRimPh}0eBm1<~gR!p|+GyT@)h+;Ps)twe7Z;Qm&qvbtNf^8SuEuIxoJKqg% zHF(tXg6fhSGgfXpVW!X`=|D-vp&xR{aCzw@l1_3yZz)eXw9lPK5c$S;-^rRjDaa28 zd8?7AZA{}%)6LQ92Wn)(9>NycSMAtq0Fb+*7G@`MXAtaI!Rt9+Mw>JRkj*KU)1&lvz)cm1&ZpIS)g>>g;4G5fs$kD);fS#7oPRf2g3g< zX6-eZNbSSDmhd)a0h!BH1hGVjbu?a3E$fcz?Ojic3OO`M<0~&nV_PUC`Hu9m)?0kg zBOumY-O;b8ecs2~n3IF*XwNA^dE0QjfkiaM*SW@7dWDx-4K>bXP~O^_Qivpnb6~d% z@a2x${k$_GsJ;#Oy*EeR4Y{G%jFO4)zBO*i&5SJYZpfPo<)t?WuWP|TCt2COv_Q5p zH3FPxG2CgDI(%!sZ^)@+$8@7Xug={U{g(>Q3cdHih;UuJ5sZ;3e7!v32()M^5xQeOkf6Xbp5i{wgpb8 zq+Abk<Ur|6V}2v<}&(dZQy6uFsd=UWV& zRBkB6;8?1xTsBEE9wCsm9q=H{URpf|*QV4-I?D;~jvD)P@!7f3DCFo4&Kq)a9I4bt zG{^-_O$FW)Szr^gc;8NVeW=%OZI7%oY{>Z*X`Rhsxd-16OrUl}e(BPUtZ9#~l~ruZ zYe#NB{!R!R4gNBH;HUJJ$N@#rLe-!iQECj(;|}57P^*C_aVoZfznc?e-H~%m)Mj?p zGuVD{okE-u{fQi=zjSo=nh{QLTJtNu`iWX#zH3k&+O$~awZNvKx#%0^YmE(3)G#`{ z86rFopP-*FN-z|FTC?%p#$V9Lu_n}zDlu=p^kD;>2bFT%4^f5ihkkYibqYPU0qwP6 zk&R(P7MI6u6`FBo@CfQ%E>6Wt4e~fmkc|x9+~)_CX~GSa76YRdl(iivP|h914k*Sl za&XKvNJ`GeiG!xU?O`9NGcfRhxnEEQ@J~;u~Fn@oxX~mLe?F*eof6% zli{6^#hD^_Z>UC)7#w0=Khr2$U#`~%#c1oAJtr5j?h}wo^Y+UVX+Fc7;f2)JHn$K) z(t+}2;|%Y2tlTkL?9neb%R!EC1h5d%_gtcyaz`MJN zl{y7xPc5dU!MYOi>-#}=v?cMvT#)!<AwX$}aR(_y-80YU2 zeH6%sCWduXARq3?mm0~~?25&Vo6&Kub-c^dMz@)C(YNM9x{^5B4Mf#G6QG+-ZMnNO zZgxk*YT)6$oepi!A8A+qllNBIAI;Rc6MMNKEte)a8jTO%QSK{&*4U12xkEJYpM1;X zOUjBN=v~MyvrGF~)|nbE!<&mINtM9mRA#lvSx+_OZf|lv@M+ zlGS}sC!iX03;U@J{()+Zo+Yfoa51LxHmFo5d3RLb#rBgHnFs4r5uJ&+p|RbOJ2SLih@rldDziYM zh?zzyF~L{L_WIi)kIB(RRn=Jqn#mXrKuH}`#Zs{Rv!hq9(sQb4L)jd{Kk0#yil=B7 z#%9e-o*k$(G_@cTMe~u3Y%1Y_oWzudTZ$x%4`|R&B3Iz?HAsmtpyh%ni=LW&B4P|^ z*lv_{@37dpAbB@reUM@;5vo(oU@B2wuXa0-4~L4T489B#PvVYrlF*je>}W#;W|I(m zA`{68kg6AT9b*D1Q;AoQo&pjbS~!_!PDZgU-3th5G8 zY+=U%Z|6|&sI`ETD6hjk)4>k;@<8VD!)5`kUJ-1Y$8c%CQg>t{hlU@BT=!=I9akHe znac$X^hBe9+lTUHSvSp)q-ayWp{cu!>3;4S~;kuZajQIv1ymyqk_wL}xP4CXPdT@9h zLj`5cZ=vK(YRcBvGQzu~lWiiK+2>_XB*Ld~bM<#-3x<=92sEc$#BpKXA%!RqGT z?a2IUM>I>+HhOcjB>!5>mB9YRB6+fWH%wI6JyYN;C9^&%>LXBN%M^bX~?ZgHHvlum)|vr?~YHL z@?w-uW#Y;Z;-i`;@{y#VQ72ou;l<0tdq>G8H#@W|&P)%ycolh__c>9sF|V&u2~|C( zl&&bPseQ*!_0_yn1V79tQGIt59lV6H#_paAMlrJ=;y|hRh6-+eO>s?!VLIyD4r3wb zrjg^Css*22P{j|FZQs(S%-ms`oF^)~q1W^#I?(7~bR@3>80un2wbZ%I)jqWr-|%Ig zQ}HGlzVtE9q?w)wT>qWjIZu@4;5MA<;Au(pAA3OH1vMgY+g^F63==$L0|y@lWI>ie zDqB8Ux-NK#WAr(FHOMBIT)QpS=XZF0~=*?)A5;{1Kwn$ zl-0p<${>}1#lo612b64)Phi2@$$K`(xyC9C>+h(~tiel$OoovNV(%zokL`Ln7YlE_ z?}^N2j{8E(7F6@%5FPBuX_+ zLbL5C$(L-!ji7F*Vpo5edVsY7)E&_z6*DTtv5V7N+>oI@w9Z9Xpx6S~$)=!48f5Rm z3=|`XWX;$Rh{egegJ|n}eBpd?oCzzFBCwt)hd=CgpmlGZEXtK2hbg#Gv+8bDvz2*Er5EgWhfGMakP3)x2?hM^l=)fC5Q|`;@i~ z_>Sgvi1tzvr_w&`xIO+oUt0192*rgv6yi@6O7n1zQ_c+-I+J`C^C9+1Du;hb!;L%A zjhWG4L-0U4-nyQvIoz`X>xtAZp*Or8@<@$XXNtnRp;~p<@l4d27rynC&MS&SHMqIS z)!I*K=6<$2`ZB`BNu*Em)od*zH`WP4!bgzAoUQaUZB5m_1XdiW)Ei3q%^_E*DHN}o z3-5;bryi|t-gNry@E#}yHX5xOocmv1oGd`y7SW(=gHyk%>!v%^CA+Zt80iH$_hhc) zIH9&x=1lGbIgE$5^E*&|21tk8`t4w9P|glQb8#%Gc2>ft-qc}79lacH#OH#Vew(bJ z{RIWk@FUg}B@)LGY>3B7q8|k1_*ZX3C~EL+{$@Fg8{y^olSG4kwVHZ{LtU7~ddv z9Qi~snt933zBZNZ%ZYK-KMg;9S69nzXu42CZr9GT zb^q;%ND9^wzT77Pb_`1T9bye)Mag`+6`{QP^qDJ$cSkiL@2e?qPo`YzNIuV(gAj z4Pl(3#72Xx%Rx2}kk?{IY|b2tBWOptjX_$n>Lc5ozEkR=^*7lhg_X@&G02l?aCX!) zC~+mcEW9Uu&*DcPEMMLY;asHE%|W$t!S3Y0B8$s8MQQDrcqX?lF|%-Y^xe_ioDkrl z+$Q7Np1{(|eO7{!x|*Pzq!PyMcb&BXSaRhQ9#S}>p>8KK0iV*5hQXEB-G}lfSGjHT zKx_mkjUY)$zCoaN6zLNgA6N6p%{f4M!&;YD@Y7kq(bf5m(Fd73%4KwDgR`hi1152W z9!TB1{Z<+sV0eFMSK*Cu?=Y?E8E@zjVob*$U8{_$~D1%v1SqHj#6V@B5IxlM! zI+GAC7{XfZ^bCU3u6M;m0Yh3kh?c-_pu=#g&jYe{Lg_HG^>z?1EVuLbVn~FFlStM~ z@5oce<}nN0SX)~{dcHgIFrBP)X%Ty@;>HqBlor+K5=UItT35DP(%g2`Y+5Yg?bHd) z7|q@HU{BxQX|%I@{b=x6N_?O?3hxn(OpjP8=##B1y10duyU@y3?r6|@;=1oBMWB(# zapXu6yhh(hY6IKRdl!ECV7odnO$o0HP#2WSY_|=qbA!Z?GG2iftMS$H+!=oxam8<( z$V|=|?upL84M}N65_b@zdtcr-V}7I>HPO$xq3%S^P>5Fd={Oo}^M?0^Dwltz5*X1( zlEw|M!+gISl!Be-R82MMc-3dRbYIDUJ3F*gKg(1n3T;)kuk(htS-qj8>M6+RV zi)Wi-O1|yWO^?$>UQMgc$Csy zIE|zR%*Kr@Ag&dfs)UOI&odi z=hS{Ha0m5uZM`O08z**9YJ1+i3#d14D;uHX=F=b{*6AZm+dG=J`--zlp)gXBccG+$GndvWZ4_+Qa>3Re{j^NHdIhia zPN$dJ|J0A(kr$69&FEl}6+8F*Ku&?G!|-ObDW(llg^oQ>R8yVvn?ZvYMYQ8FWtnW?&*Uw()e&$=o0SKn{!<)8upjc<8Lf$Z{81@UJCRlH1)^U2NAyns^ z5ldm;K&EVZ2d7K?u&I)#Xx89UcuP~k+jtk3Zg z2{O&uXdvef+TYK4j&~+7YvAs72ud!CTwOQMlfFkEg*a_k|ADIN`qH}>bRdBlWC)E$&QL6HJ@^GY{@Wrsh?iOU+)>D?c?o3Q3KBob){x+CB5OSW?I z2NUY#i(6|Ddq+*AJ-XB?=rYX}na!73kLs)(xIR_&rCtz5+%<{W?GKJUQ8F5MEN%T( zRkyE_EkCO|ZHrfA0;%(PxdWUy6X>2&;EeF7|6fq5#Ph=`z1g~zJM8>2iGt$8>$SZ( zx4dmcMia`tAk~e<%;Ovk)`5B|FU`!A($M?+J&tH zMfrL3LTYh3fgRM^2&dY8<|^I^)XCTc(Uv^O@I%_P_yjWIn9zw*V2y>HjZcB)mN9ts z(pa%Q*MSmFf<|nf?*Z1}L1yzr`LLsZnojH65dmU%+&KefmF-ONad)2@>?jv?Iek4jTWbN0ctDY~P@1kK6b-(ojKO*F>T$1!(HU==x=9aoSKi^ zg|Q=ePo!zg$)42*=7I|gJH~KFV`3Bdxl8ZN3@E12ta;10w1zk+*nrF9H>$fMhg-Jo zk^AFGM#qw6EwP}pGi;lfjEx^K79lG;S_9iLv0N>TRA#8<9qJ$=FH?+#F`{X`SowG0 zZN(SH(VXnaxuf4$9jHNC4HoKzY4+9+WRQuRE*?R}`Vu%s2T%jYL3kAd z&}MC3ID64~F;Qe!Zp<6xix{E~tXS9JBXACeU6EhTzN}-FBg-Z5*0y%!R%7Kb?~@|S zXoh`kR34J)NM`}99k0`+l}pD0FGwTHW$YSY)x+JS z7-GCqPvgCy$~h(#`y!T?cOo~ZZQ&iHa{-ax%GDEr-DM8%4W*i>ePbXRW+82a7!sIN z$2K;gchzc+#$T8s={3=A>p?`u0&rR>!MceGN?FDtHsHL)V4DZ<;Z&=;|qfu^jkf4mP&wC;fCDy0gZSs>V6Z5 z2Pb?3#WHB9CNhqx^CD!%cz1l-6V>0Xfg_v1l*D$16ay~vf*d$Pqe@$3of+}g7E<-e zZK;D|)-EoOx>ccL!P!)6SZ*n}bfkJSc%L`oa<3Yh>7-6}wu>remK0Dnkt4DWG>^S8Hp}GJn1h?_Tasv z%3XHAyL>4x+MB!#sLV-`m(L|%V+RZCnVDQ1>O%c;l~>LuS+=RN8>;tOP0^UiWZL|0 zs1cdVVkw3>PLty*s5{jFHOfa!cMYnakei{Z>;O$IN9rKaKqIu?)Z_RNcQ8H#!wcuE z(ReG2a=eZMIfELq%y}KCPGdo>ufL=5F{@;$U;`5k=S;?23l-z-Lg3{cXf~!ym=3t{igx*kU@&(H%ud58Y ziWJvN9}qrJ)v5DjE~>@nJr>Se?Fbt)V}wA+g-Q;^HpZY(2bGmMsj}9sP-dA83uA## zZYv~#5A*Y#E6)zBJDP>Bxr%~$e^!zF)UM@M@ zn~_)->m-9w9=SJ!(aYOr3w1D!OWp&S&C7aFba?M-rtxIfhZgP<)Q+-afHsEuit^S{ zlFhY*4>Th^+E$X8x2_EcRHEI;pf4XOK+ampnRj3l%}|83>Oq;Bk~hv*%bB>S_1##^ z{X3-Mp$g^J^MM)oNvibGn9CM z)aLjA+G#Y+3?}Itdr`aXH3luSSj{7M;Gqv^4QoX7XqKK6dv9w4#GpA}>S2negE@s4 zuSGfsicW1@42y;}Z7o+B%X&pig+{U_+WtVt8IxQ^uoyirx)m`Sywk z0+h6T;~Xn=Yyj&GwL3dl+tSjRTK0`%+=z0bPBl_(jh{16ejvsNYS1Yms0(ws#TBVg zt`&lJd4`<9^4l5}|Bj@fOjAmuRFpLDp=N{Vj_8O`)Jh|sP6^ISg1IhQ-Zs3NV9u*( z4AVzsl2v1Qb!3lePk`x&`8vb}tx19Oh89FsEbk4q%je47w#stW z(yzZShLLRM`Ue6*MonEzpHR>d8c_T%1B-eEx5wO%)`E#`e@ z{6b%1JWyLpXJ_;pgQM<_+;W@(T7IFBVk2h_9zGoAA7FLlt1?pw8@O0Ziy%XM2TC=d z4shKcgw)R)O7-ca=hJw!yw?t|OSSCVaRULyUgP)lYIx^dw+r>5_R9_B>F1={`R1HV zQEuAqLJbAKdTd&1N-v9zPn2)~cT~g3gEU-Fi8F`}{c;fV%xLcxgy{R-=soLC7}0@Z z|83@;MhS1*oH<17Z(zl^?SwogB4f;JKyIrh`NJ(XuKse#9@Y*0?GWYjaCM$^py1n; zb@1COpAnQxzKran!41v!qDKAjRxCRE;R1gEsdVyD*AB6Zfw`LWj@om?ZNi!59CM{UW$#Lozlb+h^y`m8Gu2n&!%3idN970FK?)a zetL7`JD2^qcJdN0y#x*s0+p!M%>e$+IR^k1^ z9a->nEAWC+oC`&}GEV&JSzZ`#sPn5t3ay3oW9~DPGcx+Sm!(}6E-Bx zft0*>p745UO)wS%bw^Ebr1HYAjF=jXRQ?4JZiq5ZEpcJI+Z`EBhS!Z^P`$ha>?OSq z2_;*@iNhO zVVdTJD&n*#J&(Lr?jJEeDVWN=qf(-*$0(Cg=j>tJk;m2$LbD=$&i&He6g~j0MhfGr za@GoL0Cw_OLjiSV>w58XrEk?##j!x|&k5qR*Il1}88dhF0rT5d`ijM3bY zorb*lwv?6)I^Tx(iU?t71gBhZvZ_aWzXLW0FR2o}kRllSx}#Q?Z-J392IVz=OL#+n zM2x-^#eH|2$C88G1} zVckG3{7k58Gv^Y6hT#qtAIRf4ipfYBs@FI~Y--^|me;Jc+6hOlk&?Vb*7J=SMA3k=ItTEX9>MAwed0&Vh6RM)P^-Ng6r?uRV+!pG{LV=`q;&j84dKOv1Pl=G zs4n5CFXnCKbyTOI8vmdgdvAtMnw5($_!shCjg*$dh{(m&p!$y5X?9&0syn%&Z{(gR zwZIHOXsra-)`V>~chpvnm9@g!hq;tTBFs}HqauPS<`9tMj$L>+ENTz;iYvIHVI3kj z)j;%2M+Bk!hANhTQ7R@GK|4xT(#j%<<|eNrCM0br*N!`0nAp!drnN;J+JEJq^-e~{ zN;*+#ZAnHq!8KfLMAj?tDrThmh+sIu8NllLc(`Dw3q^r!UXkcj3<}ZPJrV9u8Z#Uf z+lee+Vv~1AoyxG04Q~fgDU;l0grEVLv~{_CI9ntKHE9m&N}=z$g?FxQ^z;rIfHLA- zsKwP$JXBg?w2v*^P)jdsY6voDN+B@hydo1hXrn?NH773&jHPzpqdaFvM6-tTo&=Rwbr}F2$g#DD z>7>>Dh-a#b(tV&Vp!bpvsRxdv17!?ayKxGPT4TC{HcL9aIOK{qVt{Xz%eltE{jj5J zPc1+jKyMS>o5WX>bh?NHPNZ@(|LP9zszcfMDW#|~J33X3!MSk^UXG-*s7u8x?1<=z z(h7ZcJKs9U^jjtytkMI;#^`3HwWr2ZCLL#z9;kg?_a{Q_t`V0n11zuwYDDhajRqgI z8>t4)e77NwUxzk!%|$tt6y98$que4nCm7YAr2HJCBK3x7i}L1HL#b8PanUa*4WA|+ zWj`mI#BZ{0=&Kt_j2Ob}8i~mmlj93FlqV6Ok?HV$H={NwctK|KK&c}4tA%%#hFx2Q z_lBD5?6{NI=}%rRNgr^aewecD!zd9{+ytJEWvd z$diA-a?<(TQ=YzP;~`az%`^HS0jUs`7ek!hszv zQ<@%JV+(t`Kiw>i#4aV04yG z-4w*ZwuhkDZP9EarFbw~GF`9bCZs3AS`@n!7~jb4`>J;$ztls^TN@Wo3r%6}Xl?3t zc&MbGy63mf|LlmkQ?Zaxm$4X`NKPr+2Wk({eNa;8Tgv(u)Dk;Kl2zX_qM7t`heJ_O zyLj4MRLFxvsN^8ZKW*ECW{Xrq87-~JuwxtE6Zz#r9h-@#HDh6Sq}h?}MCD4#L+Jhq z?~WW^%1gJF8upC5m>!$5z9H`1l|}<7FXb#|T3y~7N)f%{uELuK2jInm;mv~s2g)l} zpw3%j*sWoG?hVX-U#|#>RO~VeWqR)bewNqM)NOQKxGro*Q}r{TXCOe}9wnZfkv@?*>6`c?@qJVZhQTYj|&nj*B#3I%fv8t;si)EHDi<%WNQg`%8Lk;f?zO`f1uV-2yu7}mtq&TLSU97Uk z6n8YoVt+bju-uX@7Jij zcf{*$#ZT0rq%&KkMiQ;tcE_EQaT~qGGzoRZ`I!70=11VX)JHQ`-Aqlz}fC4=*C&bL2NWTRwh7EPq zG)=51##{7lRB4t+f#dR>&~D=2<(Me7_<5(qDM#W zE6t0BVcC+m2kMx@{dnaaJLTW<9>|>=3uT-IP9180Sj_`X9YKp+52~UA*RU$-M1I-P z@M~OsVAQqydmZ9`LD;vEiqJ*_6^$Ty%%JqnR9X5iwF7q4I6^ z)v`@yN0sAB`tYVnx}Jqxcbo7fD4S*?rq5xUXnQT6yndnv=^nB6)!xE2ArV`#c8tQ>BcyFlV6gRGyw`W@38NJCn z)D7|c@903ww8m@=Xmmk1f!GMgvYRtq7)xQb@Yi2araj0v=X1iF0=oe7+^wClLlca* zcc7ExuPBd8l3-$Rs6Vt|6~Hbxq`O_T#P%0S&GbrT5c5~anYZdxHjN&v(Vi$3n0$O? zL}+~yoB1jEe4_e?xw{75Oh_=DC1>)ren&=)K#@t^orV#4MRU&TJGW`b8pU%J@4rx{ ziX$kzI+qQZMK7l&7xPv+xOV7U98!Nps8=iKn4QgQk#r!xbl|MqWd(Ch;}2~^YF+do zS61Y85Tc|-twZ`95h+9m*KGWjMUi}YMaZ=k9or1wIyGRR84bfbC@;gxyV|btFPK08 zUfx}gqyvSv`mxq1mL%sD%o)4xd(#q)`4P%G%!X?3ahJY{o`ze*5J!tn7W+GQ_>xO1$`k|j|{_u{rAPX#asJJ^|3cC?tc0{jma0l&D4JuPf?ukbX z$l_Y4t$ZGBJ$T)nT3$0fs0rFZw`A*-2{x-;`*HpmUEAN{1H+p~bnJga-I3>4NyPWg zXq>1p*b4+6XeRL(s7LPNtt$BGMYXO9d@VC?~%0rLvjJE2H8KkFO}3ShmV&h<86kXqkw&|j1)8?-w8 z%n-oa^7Gyac{kLF8SYr82ZlJ4dQOG@6LoPMUPs5sqw|#aKo;06jnu-#^~H9q4`gX5 zryJrhy!unl>MQ9)ewoYQ;Uy0(vi6AH_^jL=b<)f;|JmI#FO?1N?`X*#styUcJK~~h zO|0){m})EBGo`;A-(YM&SYxT{vl&8!@4TgM;u)O28aJrG34&HkrKzXKKhqp|p zZ{>ZD>2&gSp~m~p!Hy1&EM`RxPbtr96y!;Xwhg{tK{kYzu}32za(9;xXF`65YNfM*lo{7ZcfXECeY zVO^+c6cPQ0_jSIdb*jOJGDC!1yUoleRolO=#X2sI?hDmAz0?=EOp&)CW-Id@aU8*X zdcrllIi3J!7KktZf#RG_sxv%6k+e|q=A#GIp{qn*_o_x4n(={85QmolxMd%?6Al|7 z@Z|*3V+%@Z;o~bJ_ljmBiFsCijv5|;$P;yPwl5w-^+9TDymO5wvh3S~c&Z^{ogjY)gOh}HM|s`}+M3RveHPy61@DP6hw8+myi>dL zET&fo!+S&HK?sprV{HT6>{m&#Dew6^Q}KTN@P4+9`e1?74XwO6QdH918s+_;4>XH&h4fVUcFc7yC>lrr?I76TLRj z{>;oAMKpT|>r<#IqifmL8+IHcYKDewN|&~mHWsYC$>=IChup*#Mm6r)g9xJ z2bw!=JcS;)t`nOomdnP9D1OY%moM?}@aAIgFhtf=Ei%90V)&3Uu2_%@_pY!Yu`m`Alc1 z?&XCRZSx|E-_oA&BlS58(FyrwT{iaVf*IJ3J}A_p4+d7DO^Nxi1=uk#yf@SuB?N4V z%@Hq0$nf6KbOo8>gz8&a%B|s_$P&W}BrSC(TC<0PRZ8E6mx!$aS}>RO5ONXJ1iH$3ru$R+2AM%Zn*Lk=+KgRKgp5S6T59?+>I$G-^r& z{?@5bF-_r#VoyKaBLdZU4qj^Q0{#Hn!aXZXzJP6Sx|&~5h1NaFn-X%A84&FX9MRdU zRA^?rgh_r!A9WL0bJF){mtVS3h)XsOWD?o;1+8-kVEROPljH{Uzl2@%+Y#yvirALO zg#i}%fo28Rjz7E!_zC9>)46v*?M`Hj$Curgz?B6?B~mfOJIa+|($W;YH-Z`fI|R8R zvzbRmpk=8W?8!)Z^@k7Sq>y2393tNuJ%ZW5q@)8S6=P@v*U6ik+r`Eb@cxc)GfHAA zM%I+=_S^1DLel37x|Wc){=eT5o9Qg~kJf|t6z1DRhfkDR;aH6Iz+H(X;J4};6iG$% z5}Z5u!kZnkj;W|KZiIAHdm>#RD2pmk@kUDWip!!<2em}LI`PE)p2iN00U6-HyQAa; zKc)NPg3;EBcZ)pGyyV@h;-xxWgj6!Pp+BJP9%R;_!GgT0U6T&)jubQFR#+WCfo+aK zW^*AId6}H3SM*Z+7=lg>-Wy7}&%}ttq={jv--(h)rM8)qrc(k;_Bj51qKNfLt`rzo zAgG_)aTVJt3*vfUdogHO3%p=^JTcXKM{YHcmX%Yeuh>s8Iy{hTS@70>^(ttfHgy9z z6#DF~$vIP(epG5qNQ~GWt+y=~Z+3U`t>f=cqKbH$8(LY*E=W_wdwdcp#E2Iv zAYx33%{yOiRhQM?lMe^g`e$H7qK*P++0K<;ktJq_3@OWWfyEVM9457BdO?go8W=Ez z7-d269*+M^BieqWNVRQYdqp+W9M96zjPA`@7k$hNp)7f^BMCB<1Etb*T#=g?3o89H zygM2v%2Nz2v25Rk*EsZ(#un{^zA)03Ut=2Z_z%}|uE>Kei&lsGb@-2txRy65TF*r_ z2IL|O*P_*d4X0ORDsM)x<|T2JcW~6`@HID3*Vp$kpm7ktMW5lJ$MO;5l|6n}!|)|q z3JgqDLiGyrCrTO6Az5Cq)-=3;>w!LuUY+WUEug}5poSk;WG+9P0j2v)+d*twfEO7k zc1Ly1&T>@+8WEp<*g?q~!x-cq8EJK*B-1WH&vXOtOm@lHxipBaY(9v32g---zh?zf z-YB0rraM|sP-A?=KUAQzM$E+8^WM?CpymCMW4Otg69h5bEBb0a=eRij#pyHRC+Gg| zX!7>D8d_W@abR04NXr=H*_@zh!2VlY2Yo}0BIah2^O1EU=ODlI#do`*R7C5HM>!hp zc}g7G4b=_sP@X2ndl@O*^bj|YJMu}PlO;Sb;qV_!Kf!l5 zp=3h-ASa6>Cvm=yMubQQ2Mi@YC;ou+o8v`oT$8xK#@zx<8v1d5-EcqH5`=v=%RGg26N;SjBy)S?I;Dp zAlOPEfHcNogxe_ahK!A*C2NGjh96*O60XQV@2fK_eX~ex_k{`!il1l(t@Y#ZVm>|DeIe_P=zf_GYyC48Yc{+U)sfkTW@6&4V-`lCoemMh>qIe<7IFF2;9nDH3YD{|T>`FG2Arjfj(jc=V# z&V{1SL@y&*Fcl7B>AGCBiteSWa ztZp2Ig6fP1rD*5!FsRrv%6nW|-W|nVFgv6RlbAaCF~I#7q5_6D$vCbG??TynW3;6I zUA(kkaAGOs-q7I+BRBV;;&Hej0=XwL6=&{|4g_-6;W2OW=wPvy*mG&CR5tz*r|HMTvm6CeLV6mzW*BSffy8fL~!@d47!gYa_UbfI2qI5&_@Wt0_RRX9KF z_`u$*p)Xj-BrbjElU-P6k?bz7*lJ zPfRU8(NSWU5MgMiAzT&b;@UMKv zSa?&IIdVgK9iF8ZON!|SysGMfE~+AyAgqtqy8j#1!7U(KF4w5SR&h36_id&>ldwhPJy7EJvm}o&4zkIGg3>t z<)UHthQjOpuDNsDjQ~1cOcLsj@`5Tf8aX;K*N%6V7m-Ce@DqiW6?LiUBk~;N4dnGR zze`Su1YI)+_kQ;inTC%-O3U6Z@|Ke!V(jUG8Xm!6{#VF7k3{?_&RvU`8$PcHOwH{kV)7TBP-*9@~ntS z<`587KV9by7*yN2@Ir zw-4(LC4loBR)jh)%9p?hO&rEtb9IZws%z^{hsrnrONtN3zBI=ZSTwaeW0FBe%h37| zB~+&i9ixPG2b4RMjQ5n&SkV0tH)LsLY}k81)ptfW^d1kCYmJagxYUexq~`D?Ws(_) zh1_SP4$}a$u%fo*?O0?`wi!a3I??@F26QUubD-#cmRHNK!(2DzrTlVvJ>ws|6gfRn z?(6Tk>NPVlQd6NGB)WrKt&axF7Co}7M&Sf#7y`9RNgvN2W=kYQLOrS7b`V4@G*~z0 ztnM*Wf+Lmd=)p)yaOMh5PjQkybIJ4!MR>S5`<%@JlWACUHtT|L z>CBvFu3D;-VNkJ_qDU%wwey13o}Y754j%nBa(DEmSwL&m%gergr(H3>AgP0VO;B{m zrFR5-&z`(HGFXGg%t4AJ_lI~DGldPW!>9|24qq9VM^e)HqIcO)PQv9o8b_pNZH(*4 zld&B{HD3~e(bHj6AiJoDaEi?2Le4&cXiViTw!%C|8R7s83C?+QnX_Y>rI^kHDJ7iuiw8*b4xM^&Wa0XRBVf3T1hLi@_i zgit@*1Lyt7f1%90%G;Lg{KJOK=giwUZxJ09W?nQ$-}1f(=^8zn&NSVi*_g(KshWiv z*ME%qzkqi1ha7LzI;Ad@EmMuvPEH!$g|lcz^JDI$-!hsbyeCRNtNBOfflf)D*M6e7 z7Gua}OZ#>fF~!HEffYI^Z(V@sD8idt_{ACC?kLyyL(3*#68&jV^|h=h<+YGYn@mMC zK!mq$%9TIA+z{rhLRnCwiRC3GK4lQ~M72(LWuY!jx6?Ono!L+tC+4GEEVsOanURwB zS48_7xh*ozS48eY`O>z8T$<4E23Fm+tIvWQA*Vkl&IuN)E(81q1NW# zZFhH+P5Jhaxe>#|@whB|$jH5;=TA%t6EJg0ZIEV{%p~xAR$`Q7d7z?K1EUoC%9Y&NN3w9$l_3g#d z;r$Ke$c9u$Tb6xnVMlpR0$PJId6Vj=W`0HHb38`(^oS!iht+RjX5&5^LohGe$iOoP zdDj8M7c$88j2XonItT zCtx5tQhOjL7^S)XCDl+1tb=|af(vQ&x)ei~Lx%T6npm!yQtmXKJgLLnY z)fx?)Uxcx~$lFyfAe0rp<$f)QQ)68jI8d_DGXbcxwv@8`xFIvSXpM8go{d0te45l9 z85UYR)L63FUckF3;GMOj14WMa>^5WVCtZnE?v6Si+7({S+9=7<;YZ)*GvFZITpt8= zLz(b{wnjfp<63CE4`KsxQul(~+ysrD44tHsAJQ>KxuXQ5(sHGPsUoR5so@RbZJ@QE zXPsuo*I3aFcv+>KbrY-wb;p4d2e9sFW=x$iing<-(XLirUT2B!3pHmkxKNw#jY=Ko z%hpWib{KAZx`a}xOUW$Ofx3?C>Oxd7#DLYs6$I_*tKF#ACxq7rDC9K;XQp6BhP}|T zoDDU1jfrL5K)MqCACVp#@w3+L4YeP1>v4FqEm7W-?1}!LuD40kW7V~8>#G%~1@~EY zIy3F|oXRbn-T&%0#+)J|AiOK~J5ve}AcPQqnSRw9FdcZE1xGKOK)z6JCL|q(_V8vG zDwu|Z_eOrXP-Ai6_GSf@x}i>qyB!-MSLURzJ530(p!O(HM-N{|sR*>AREJcO-B4}| z#i;fI1wt1_t-uBYUZ_L7V`r8LSzA-l#_Zv%W04+799Htma-wEz2X64Bga5(#_F+eH2+Y@Yz(aM>=&= zDGOl^ICDk80^{wC|3u$SSN_HKaPFYPo)hon?h}@z$t?-Wb|XK`9h%TC*656zm%_TE zv>v`hQ~i?;>gCC@QVr%&G#l>S))n4dUI0~}(PA~BL5=hv)))^*0HuuxTt564)G0jm zJf5_%=_j(Bzgr6*SrZFRVSch(>5a@|LLPh>lzL4O_0vhc-Kj^K#4YhW^?afjxvuPo zH?7KkiD*YhF?UZWNp;Z3R_e;rA4v0~I(VRJOCC2!O4Sx$g*TTSB^iUtN%nWe_dNzP z-4MOj?qrtXosA-%hlTfvrUMzaSiE#!Llr5Dw>bu+0ca(_vfzn41D#7FtK;N_a#RRJ zV@H6&p0|S6#dLTVY9Oh5Ri!$0Z5ZbTB8^*`l4|16zCV{h+>Oj5OG?mcHAY7XGPQR{ zV=t5wBOtZVf^rFk61b`Njhr_?>pTJhZ6h#afU@t1R)949D?=Ianfa&G^KftGlS-Zaz0%&O5h#3@-qA&!-<+M*H0&17bW2RXy<++W|)S+CX%`10IVOw zgwLgt8{Gl(=z((%sGjp7fR45D&<>ckU;f99bjqySaqoWUklQM>ApX*hs^ed|wpeOI z!mi!EkPkYUPA#vVSDTtTO zE-s?Z8xY3^&J(4zdiEjIeCnB+B86M1E!%Bbp(aybW_+RC)94T}9$0-%PuI&zZ4h%t zIR(z8K$yW43wc1yF`+$w`?`&k&fcJPrswLaoSo?{PD0Wfc9hd((uS8)KuHPT zlyp54WV#~uR<{P79gr@#{$^$iCvpQlUvkBT_Kag-)ervq25BV+@TO}2AWt=tRCnZc zD$qKCk{TWSqFTfIL^(KO$>KT78;OiDg*PcJRKK1jpOK;M?+pd=ZfN#mxGOO7{`C4$ z=CV#C*+S$()rEf5KmXl{8OPQdVM<)+L|#RaFB3*%`#uSReJq%C59A&iXdMQn7NZ^E zUC1p)Hm$t%$KXvz^*Iq)chK+ZVL@!9)*bA!Hd1?`epz>fa|tcCpTN5#AIMe$TrX;j z(+-};P$F6)sPYB5eGl4~(J`qx-~%Sv7r-8)VZ9w2Vpsmtw_a#zYP6hVZJi5!QhbuV z(LX^cS??nO8{#$}!GVhdw_ds3E&Xo(M zH2aYC7yp7H@9Z#;w-!>pIg#h2D2qX`)b7MTKMX~A+$%M@PEKdF2$h!A|dCKClc6evEN5)pD`gl+sX*uiJnet2(Z_MVr z2bGeGT2i<7PP*|g5}!5Q8*w5?%Znf2RK-5+-Em_4l^4o{6h8&sCSALDzV$AJ7h)}1 z&&0tcyjgG78;afA(YThx2Tie?YW9dy3uuR&+QbJcYuCLPf9lSg)eCrM|U;wMk7zhAE+F1 zNG@S@A>S+oxqJoC=_S}6ArA2ga(6xy=0+`5{byIJE#roA+J*M19fPW^0=we$M0!dy ziEvbCx}6buWrx%q>F=O>WES4MOob1RI>37)zw|aqc)#dE;myh=m{yV6-Z3bvn9#;C zW|Crc&3wZt%Z+l)DYKfo47iM)wdT6+H%g;0S8tUisK~dBEQoL*SHz%I#i7nD)+LiC zvY$PSx}%G^0A3N&`XCEBDBJ8oI3!7yxNk&qg2@c&fece! zQ$KjwOV56*Z-x>|!Bo(w_J^93E<}%Y(2RDN z5;Ac@*^%po^w6NiP~Ai(r4LpLccXFqE?$FI59%QIWO=+A?MO;jHnRQ=)T}~uC_;GD zRn`qL=2&6e8g6BCjDeaGlgkUmpjcsPZ!@Lxt=#ags=rWZaZ^1~sVTt16SQQkngx}pKMBNgzR@i#y!7bi z`AN|6Kb|SfnM#~uRPlwfyU?SjRua@)Rslx%4Pc+W??j4Ti$up7QpJmTBj>l~IK0|t zz4EYLAhO-EHdQ;YgHtM=T=a0k*j;nkkpV%fCbpGY$u4j(TK_^(6l+|62WobY=Gz@v z^|{mx8ipafxm6DtP;9B%z(GoM$s1l3+k*16XfcHS( zm>g-E@K95u=+g-t0hEB4N;osU5m$hI#{EOIEPp6BF8N-;~~76wcp497APaI)F3>j^S39i z;agoU&ytD_zR61mgN}WC14csIc{R^Bei)c)3u|&*sC{8hbK*rZB@AzDz=8BgNC&Ht zQpN``pVZ!oTGL1iFLN)~{`}Uxw_;~o%0z=ck+htWhnCQKaQdWcL2uNaOL9%XRVoT4 zCgA!PREgr4K+VkvwmGUCRE-$4L_i|^G~FMx0!a{w*@rGP?Royr`yIA(8j)qG;j=@& zP))b?l02X~J>gqQu%TSMXt;qn3d2o!jT*wL*dP%e7{ z#S@3>IzNy>=>&-$LaKc;)zkrJwY_KKM#)3lhw7$nAsQ10;snULA>(jEYZbWH3f{JE zo&moRy#@&~6Cj~4my#4V$sVYRz|Q-&LL#@7p1!LSn|7FQPt^KruaY;V;e|{~dZVO6 z$0pexY{ccRNO{QeM9y(&BU&K^<))IhsLABo5}P-`EjohHHW#kJhDu@GQBFcY%kC)p zyuPHo`0p>|stF_pNCY5EQZLbKcHYQm)9ty#>)Mo9bLcXIbt-DI4Yp7b(2iBn8$3Frq=z2RX^{c!Q{uIj~*^MgRqsx}jXk2`vE_ zs77Ms#sArmUwVO!v{8kxj&R;}C+m*f^}>)rYeifl#~Dx@{Zx(Eeedxy*+vUKC`x(h zGJK2H!ukA-Uh?O@@Bk?YD=pjOw^z%^R}*jh6g!oDA+KDAmyxzDK-CA2#%xIUQQlZs z+NV-#G#|iP%ZywJra;a!gp3@l?{1*}*TtFrim-M*42pDv@D7syXh0U?Di6u-$ZHAZ ztwTW|$juE5Ho8ASQU~Q|ET{vWo48VH_aMT1AdE0y5~!rQ+_4k|cFy-gzqOObc~V_$ zuhL}&tFTYxy)IsHE)84Lbn7eW8=CHpS`Bj(2~@iuL#|h2KT*Ea%tPy(1Zv$Jmq+B? zQHz$ls*;kiGr~8kY#Y)jLZe6{Z)7kA9C@EePl~JY7=FTHL4N<6tPuS5Gn6O8CC6w+l-sSIxM zdn0=byxg!I-aJnWro+K|AbTM+TDrV+Szu?-4qOkAWrO<746)8_Ehq&$QO?3$mB5fs z3FW0J;k{AA4^5{-9^*hm!aq9d9;j6^FPOty;XV0Bx;HYHyje^Wy7Nt(2o0ECbRcZG z)(rWa!DP0oi{Q7E4ZFG_)e#a_m1OD4-5-^!giges(r8A54p6nzWK;L^Kn?Ocfo!@u zBkH!P;_$ zEj#p$+WZ|NAtoJ%Q8_o@bQN!Z#R+n;0LfrHU_DV(%$?*BAjgX2rBlLNVS{K-omgoT z$@`-NLOytJwl5Q}8^y*!;}g==V@Rd=dhK6OIxK|^YmA)pn#9U(?%Sq3+T8)a=%KO)Pa*f1wfBsJ&<-j z1*xz(``&Ni1+A1oSto!--%i0i;*xxl?h_gRjWTu*J7$YB45pM9S%NB2M&mq}K)Q%Y zx_B6lAj%XM;6yD;A}g>`sj_1B{BT1)#wKlz>v?w)ti8hrsig$Pb27vLtwS1Kmw^Ov z1UymGy?LWHtX9RF>*AVgSLE{P3WPGG|KiW!mclGc7>}pe$z*9^e4z^|-cRGa&~Pf!YB^mB z#-9td;tuK#=WBJ~XY=7vs-$$Gd|4AR^DXkJ6*d%Wx*Lk?Ms&*vs42yn1S9_oxe*6> zjp0?xoS2FuZ_c${h-k7^=4r<8W@-#hvO8#l&ZOUnKjkJES1UMj8hY%9L)K5!WPL7;RH(h6TplV&~T$)v!2D{Klwx=1@)Zf9O{Al(Xhr(8N#Aj)aEcI5I4v`!|W zYHGn96K@ows0RdX4I{p?IM{S|v^{+rV{R#sIi@%uMQHP7mt z)C%PNmrs;NFjTDoqX=_s)O9C$4QN3vO5lb)f0}z!^89?LsjvfS;rVinO|!$!`#tz_ zM@F+q*1j%rEayi9cRR}C!fcD|BntniT5Xqn0EPQ@DhB5$qBBL1HWb*%ok0eoGsYvmN0CN6Q6!RW=K`&@31!c2emKzRxB{`6xQ+FNqPZTZpJcuA(e~AVFo(TRF6Gz%hsJCm z>He(OVNeU+1GNiy<8XMh?UHW^E5dstzs&j(v>XZ+(*@N>)aC`!1H6lwREekgo;;k5 zMPviojq1xxC=WfUk~0peG&@K?V|R!3MXDW1Tta!HRF4-*jsV3DWs0+-^mMm{v-XjZ9VdOqpT!CYv6>6uRG-?D$?E2y!JHOusn&;fiQW1W7PKpraA=KgIQ?S%|X!OOsvbjJmDI|;1LfguiPb5i)> ztf7h`cng%A1sz6uu|jf;JkG*4q_VAt%jgA3HFqbXZn$Vrca*2^=nie)S*sSadiF$q znU!m4(`H|~*5LN@9eq=Y(j47PDSMa1sjnR+wk>V+CcERnOzZgaL}&)IRkl%G=YsG) z5wnB3DxO599>i&HPj(im84Gpr^YB4=8QY~g#yZb{91V9Mzd-BD=ubF_Jz4X4P?7enT^KZjv0IkIJ16<^ z70^HTR`H#`b78M1VrJjOdKyxfOwJfoSE++yrM!hHX{HU_2?=fc?Up{%oZ)fqW5|oq zaJDTk)HE?gEmQqaRf{4mpyp>cH>qBwH_!lf5-xQ^HPd>OO||C^eVkU_3+2mBRgC?F zH&=U8JM?6D4>Tv}bV}2bwQatUX-n>C${FK@K6lJ>!4%dV&4s%?&IUCL^N8RI@eASD z+IUx2ShyzTYs&M$}72p*1i=YpyT?xr~1G0!o-kn4Cz<$+ECH<9k{k^bEgU6 zG!|&XRE7(s6SX6F#}t)Kp6w_G`~C~)><(hReD}l4%Ih`eF^K*vYIEcKcTkCHzEHck zj(jBGC6c6s3r@Q0U6Mhg8hldTQ8J9Cya!6VaJN{^PL8@DlfD4FqmV^$(4cjISMXLC zcKQT8DA*eZB~B|C+kK;U!gdf;q~W~8jDu26Bgmk#cFH2LP3BzUg=i}(x6xYiY)Lrn zYJ1)&@>IuruT7{iA9*)H-W{dQzKyAw5^YB=uHn8w-4x%jNh?%|%|y;r-33^k;%}I% za^j2zM`?3svecm5whU_Eo}9623P9H;S&%6$)JTJu4kXQDD`MuaXQglL_&YA0DT`OZy%X;J{&YJ%Q%4z@9!4O>!3(>M~&%W zS*x>i5po_)V$5FBMxF~z-Odb-Q^Y2FBg^S2D63?(Sgvpd*PcC*-bow2j*~dwa+vd< zk0<&c(O3&=C`EI^NIp98WV(S-=%uyXdminlZ^+s_vpONF^;j0Qq3%zEl@Qxe1m>Tn z#(G&_H%6>Ca{friXLzivb(#z;M}nke&>1u_x?iilJlDpz-VP*nM-xZtoQFzn^QPO3 z*7kS5@|v6E??rc{nV2SD9Vm`Y7K_bsE)#SfxS`N$hv|JuHalZ=TB2PiB3Wpw+kE|E zUITVL)2>nKAeA4Q3rM9>LEw6L=|(3a7FV_HVzy@(O*W}sfI>6iQx{FO%a9#|^Hvtb ze&)alAiv?H;c-^lYt}6{Me&)Sb)Js?B}>ifM0#KEZnAFJ!|)Yj8zs zll?a;a-)8Ug5aL5!8vMGzDM_x6g>oL zOu^P{P&I8(b*UX3YL_FUhbQuho5_-bNzDSJZ_pKmx}$b6c(Gx0v8Pg-W71Zm1=q`I_4GcGbLE1G}j4EzjP;^Mv9V8XQXW?`qM|+_0G#a#!R@YdO zG}OJkwOx4?2I_%gtBghtZ>*`0)S6OlYc}qQOxA!vSl!(rHoQbAYe&t*)9dB+gfF~K z4&iN;49a7)(qig(eWZbR?+S+ZL}rQSRSTXiKVWSKuTxgQh1SF%CczglQ-k_S@?OYt zy8chP-2PW_(*?o02t2!KhkPJZ71WTR)YLr@SW~)DzAOoSOD$wGF&(VK(T-xHpv8dl zEGU=$k&DN1Ni`vd8;!%zL=6+enP=YNJWxn=5Fi?_v?r#zcEo~sXscMWK;+qU1h|of zY~9T}&A|Fr``sKQxCMl8&O249;~9e4BQ2!f{J{fN*d|Vv{GAr$ogMEuKW%W zrHDZP4Rm(J^GFkON0FKDfv5T0()~ozyboJ>qCP;!QK0V1i6)>naT{KkVu*rwUVfWf zvJXUuO);}Y4Bl44i6R0wo!B`^7yCoHZU}!NcO*$`pXXh;=&-Lf!@7ZAje+JZw-S@; zmvIYOH`J-DPn$-9xgS5V0C_VdzEB$Q6CE3A)2$OLQTD$f8lt?Z+=L@wT_B|_z}63A z#B-)-6|5QOpp@A=&&vBFbK+ms%skDD7g6+qA)>l|F-nFv*C~MM$Fy$id4Z&g;cX+h zj>nfDt}Vm5p}cbet-)tBs`GHSV#9l*Xj@ITcdJ9>_YAENR!K2 zZCfBJWArVl=4mlUwf4>qx(jtIngcmL@)Ze)N%qOFh0J97HN*9!+g>kzQUw#un{Btj z_6Eax59*-KrDr1vyq!BP-oGL)O-a#m23U`$={mu=5z2;-wQ3=AD4aS&lVsvd;6~ZY z*7piAw((2!BxBJJWB>tLS`1d*31G*+8)?vIE2{7OA}rYYGP;Pc{|&X{V5RG_yWt~1 z&usv+0du@?J);Aq(4RcJ6M?>sWWw5!b4MA+pmj>+V2Q;i{IA`4 zA`3c`22E4aotc4Cw@}j%3mGkB0c7zy9~O5&^g*BtsHgy(u}Yg{KJbVv{$jQ+Io(o;cc*=vx`+8L~)mP1{La=E-VX3vf% zM(A`5?D+#BF6iz=sp%XvwG-_qMVX_d_IZMcirX$<0Rv)4pe(Z&YvCf^utqBn#BC!~ z0;y`C;58<8qPbzl|H3;LbY{~w=F3TXa@DlW)t;TQOH8uvXpp!g=K)q&)C;PM3SfL7 zd0lXLqR^JJ!;lWq3v6WF&`(z`pmlbS4c8&&6b4rb!FwaWbj{fV8e@4A3kMsQgJ@*w zM)rTsh%6t9+lH0T%Ru4v?%@a0jgvMd%azG~o3V69xd0v-QM**`qK-2}<(SferW)cn zLG4I!BMX}NJDU`$<&5Y0w&1!V2eJvF)t7}=Ushh8Cw?MJ>ctAu>U!T8=jcJ*5kocM zfSb4D`%39R(|z0x6PcpC2lDY!WN4^^bP2VI>s9<6(LkwRFARm(Ah{C#!uUK;G}0$9 z%WGT>s*!YfH>a4k3DCv4RLEBg}%khC!nJHYrolOAFxK$hS zU@4f|MuHusTapUenp89Y^}I!mLCp`yn$H6YNJl>`udzmO+bI_nTqsv?Qfilh&Gm<7 z4$QkA8w$-(Iy794@aEYDYoSKZL1_@Sw8&Lav_adN+I9Ea3+1U}%F-oct#V}Wp8nYA z4H=+@w=Ds$K_{>t$s6TME;~_P(~agVUY+ji%j~~1-I-_qcHE#exEp+VAct{iH9DmG zBi7-UyP$%kF61xaietfA@8z)U5~~2 zY5zY^mxGC17>R}#RX;!;x@eA(AZJ6s9i(?O3bND@vBDIj`~`$RGl=sn(xHeu3C$0#pkq z%$(r&d{By?lh$yy0S**hx^$NCT(#eHjMZ7-=&x_I3DCMGdiP{m57fSyr`x1D4dGio zfD`5NRB4lJ`p^%9QXkb3+Ln>s>>`@hq>AcJ?6ZCh+Bs)EsD|R4##pHNtw+ z|Bdw8lI&_$XTM}aJt*#m60oFbKgMQ!RFU1I5ATlh45hpyZtmO$4{^If9!tFt_d44QYaJq?6(B<) z!ak8f&eV^W{Lr>WIni$qn`|H}Qtmx4iwFQGc2V3NAUn#oB4}8xq?!#&VpDaE-46?# z{+LRv48)Yu{RwhD!CWfl%XvvNdj$9rI|A#C{Lq_;O?53c#+MhTSUbvW0-D-wO23>1 zg1bI`AZHiQ>Yowrv!|LaD)U0^3!c`GyqSZk#VOi}qS3R(lu)3-S9v2Z$O;>zvu&OY zr4ZoLM}&%K$grbaF%FIBRb=3P`=q2}LR`+(7O5cOXK4txM#2izaf0Z`{6?vUS#@SU zt}{fpNB_A{3+yxj-1+a0W;X0lLq53gb+ddQVMEe9m6Bm)X7<^Lj(Njmgc_&gLScEua;O=7uz0)N&qoSiLfp_hDxPS%pG-zb|@@weZU+u zw@NB(*Bd65aI?(NPXcFkv)+fYQ1!GtT(XRzdSzU`t<)#Z<$Sm^QEVTLw zV1{;i(P61ON-vzPS?GqBV8A-@cEWBCB~KpUmGTGa?Q@}AYG1Zlrr6!rjL*9 zVX#oEdkbClz{R(|&s+JKtn?N34o!JTPwHq9_XztYd+Mx1uFumH(pWFRJcjcAnu@Y+2Je7w9Zw z9<4H+sv=7?Np(ZcBUJa5D(4Nvm@IjjalKGC4c%1VE%^&-F6#|=UkV_lJe)*?A=;ct6IL&*YXibB?e9FbADJrd1ln)mQZ`_+w zn=G^9@a`xYMQobkPLW#uL}6awE?7A`eehsF3t9`z&7CReg-j?Da__p((=g%Gr;jR} zV0xqu6eRc2P$6ERRAea!Y!uCF2qHnGWJWy-*e&Rrs_Sy#17# zl6422Dxxt>wKFX5QIK^*SzyHn$_NgX_g&)?5m_qggg7W0Na1A!NV>zzEkeT^2X051 zQ<aPwKz0xC2&O{gT3=DJv~v^oOK;8(qtEBA$2hB29; zwzhK3iC$|34Mb4fCRh*DGGr_*QQ_Ph`Cu)YJa`>%lFg?E<7It<+%KZC=RH-3YpRph z`YW1O7XD=)Mr|Tv4awffQmPtA=T76aK;Ak5qnT3Ozj7nP$sjs#9KyMF*jFEM-EO2K zmmOK~mNPdPfw17xW*`_;doXc;KdjotT8tN;cjXzJ>eKr&A`;AfE$|vu#7d%`qfWS%(w|A9K*d@jfM_h5rJ z)=_GAmeJ73WVx!Wo^%HVJliTXcS2f59bWN51IL+qKdiCyI>{y&)q=PB4XO2G&%w4fi2+4y=GUmmE|#BnJSb+-BgSztYY z#Wavw#!h7%uwmRllkAO^#PzJgpb6IG36N`ZA*?6h8^@((lpwW=F z0`5?wgU(|9D~g?jwO)*ocUd=-)668BzHFwAGy2~f-CiCdxU!!L^&}QvpDW&RxxK}t zNP!n}hO zKp?Ms1AU>EqPhj(8ko9jJqn&Y<#oS78NmryaZuDdF8vHJ1yL zEGQ|BU7`t3a1|?z(|x0+1T#AwaS4m>Ks4(GMe2ws9#hV;AY-;zjzP3EUV%qxO`)WwWW@ zh(%MpST|tI0!jvHIgM1CYB-;OVnsBvC4XMp#t45AqGSxEm|(UP2EPIQ z4T^h*`z1T;g2RcPKEUsQ47$mqM4If4njeeh^dYGTWwtRqa}qzI;=+|hzJL|OBETki+Hk(6fLAfs~F`YA?_@DqVRUhj8y$Tc+smD z$|E??hzqo++C}kq#MfPVAdDL*3T391!0Wf@A3ocjHuL&AWCXJcNgKL_s>o&=UTv`yDbK9qe!E()XB zI!uw5?T#@wXf3>MeuVmCkhP!@i1NpRv|7%p0{*bnPlHqYB^tJJq=(R!5}KI#agRVY`o7DRq#Y5L6ch z8R+RWxK|e`19yEqP!+|uNRzI+N2O9P@SZ4&(<5)8hLu_F6XZJ$FR3hPz1d1k4a&Nq z=~(_T60o_aYA>rhefV%Xvuy-G>%uu^;v4f0>wzKwr@yOWE`;-``#fdc(QWSj_kVOp z$P&Mf5$iufc6bQ6EA0tFp-{StR-Lp9p1_X5Q5wP)VPyCbk`Ijdz8COvZ9zO%6G{4* zk>mF*;r}WW27#~KkQ#w$b|JL{?FpQ|Lh;@jTaRD2*p2PC-y<^WRQPx0v*K)f2nd;Y$QLF*EUBGd>Ufq4cYV1#n!c>-U}g7I7H zE76nCV$9hASPE3EJ}(OKmt9xRBzhpC7Sa+OF(Eq@82eLXN(<4lAkP<9f*`B|pWQ!o z2RUGsYJl=nZ3gQ^KapR#PzJ3x(2KQQV0yzFq0`cIa!kpHTX1J;vI{cQIqqFnOMIixM2D-GIFT+6F4j(VEs{M0g>0ElXqY53e_eItDD-djjOyDG^A_`vLr%CYFM`lB6#rX;DmivJ4Zx zF5moQ!8sC8NFW0Qe9zw>`E$03L7{kZ0Z*{Lq0WvJ7RA3`nMP34Avq`V%HSX_Pkr>LDToYHyzOFzb5htiT**z}pv)>Ume}H^-l|%8| zhfj*S$rj5vEYO|*1k|ycVRq|kfPyWM4EmM;v?|3fW>Y6f`hEVvG*SWVkwLB-B#8{a|Pipue!~AOb;YdU#o3wD~?Z(02AtWF_=<4H*@1{~h_<2OKu6M$)s^ zJqGmvsdjIS31d5**8suz1nfYwQN4#dRYRQ&q-u81x|rVO2H-Ff?}KpxTGiuEQnLI7 zY_Il^aWsku0#t+T*8ShWXaEaHVT?vC#sIt-Dg0NFlb;utsllyuD;930Vo|2l z2xB3Tc>|>9Z^lpmo@q9b>vl{pntlS(dr(Zzi9Fx^jt(3k89P5q#;q%_&md=xswB67 zmdlgdVQd$0Spdcjj9SJAgGTIvL>P=M<^}l56IY>B3w%yq8Cis|rhcIff!4teSOJm3 zB2vmmzX?>zUmHjzc5VxaK?6RwI6r}vHR=r|35G59yLz6VE?4sTSJx}92E!y%tZBVp zztfae(n`k*M){0>4BrOu0hA{rIYLzLjp7BQ<_EOv#8-vJNb7f~!U@{Bd*LoL+%y=C zm_LDE-BoRY-PQ2vEJi=vB^f{SL67ryl#e3{>E52A44=Jr2Q_q_luq&sT2-!#`xSZy zpdrb3I;~rE0<~uc;3FB^`5y8bM`014sULJ-X0iZo+YYpbc7V4hrM=9}-lBA~9T3wA zr30H+!~k8gV!y)%XcQ^byhZiJIiV%EepCCuRZIS!2@J3q8=pRadt6|w2Y(A6Eu$n6 zs(@}HBU)p|cGy5I!44cVnI?Cgh$wM0Ap8#F1^mi(H^sJ^4!7S?GH6fWi6c$>ga$o%mBzd=cTWHtsNYRt!2hiH6WeNU3BXkx< z`_>K|=177%O^Obj!eo5`s>+i^q160&XTv~g8)#=D;iOny{Fj~&V_R^6NS;yON9aui<4nwrP@W+?xegQv9YAyvU)bA>f3sDE~?mZLC3?v(_ibzjOS&F|0 zOmam`LQL)n=xcs7Hp5%xgzVyk@dAD|^_jpMP$!G>M!x6o>X0vDr*fM-(?wh10;Fdk z#RSG&dp0G|1P`$4*#xncHiCO-|MNfY!%L$Zv^W8R!swRb|CPq-L?BK20RONR4zF2C zdOlERK`7$}ob5=7mqjAA!-hx#6l*}OT_(WN7=fWVpWHwS6G|LBR`aVX^lyt65AP54 z#Me7;?TQ4`66_aX{18#l6A-wPLjSi4KIj=?v}8M|glcpcYj-mw)Du(;tm-Xc_&gK+ z#nhJc71*8Cq_5`gzuUL}V2VwhYaEoy&|5&hDbVe4$5i>+quj6z-v-h`KFs;Q$mI0` zre|k5z%8E{(<(~q9LX&XOyohT?gNmXV{|B5CZLfH7@Ywgz$h9N2D32IBZXQ()Q7mh z1?UWd;lsp)lmvGWf<4Dw7x~E7nf`-Rp5@>xcOIR<=n|B8oX{%10h<>fR3M`vNE1mp zy))(nch+HKBv01*J*HW~9K!{c(|4i(tpRL8J~RFXDP7Y;eK$Zw03DS1tR>@^)Z@3w z8EQ2Fr&GXI715sacepZ;K*3D;5qk%pz;C7o>EB1G^o|TKMntv#KSGmH>i;h-nO}*5 z`Bx?43YcnCmdy`$4(kbMBPc$aXNum+FLY=TgjRr&lQNa|ZIF%H)tFKZPr!6W zO7_D*8zs@>JOD#$QmmGIW4(lodoVr$@ppyN3@T&RQh-sX4gA4u!sx1Ns;B+IyP&9^ z3s_eb%AjQ`+huoJ#Uf$|9w6yu@(6*sCR|yxe*hZt2L=dAuZHzPpcKqQ6DPodkTH8A zpkd&EdI6Lc!1Rped!C{7sl_Kfo0rl4@f%f? zKr@-%B$r}bze&wYaZC-l!&dSBbzPc?cSIUsO|gSB1`e795SlMQy%@mIA!xlgJrXh5 z=wisP0T(mLn2wzSvzuC&9_>D;8`vxD zW>bYVLiRLD`~>d3h7s?CK@wVrD$kjmptiQ*71~STtZS8j2d;HXiHKR0BYis++E4{3 zs2JY$W6qxXR1hWHezWf9->GuhJPxX|Ihdb-1f&e3ot5vbu^d$@P+!}6TF0h1YM5@< zw)6xxUopm-;xx1S=7s6+?zepaGLh0Apyi<3#4v8Zm4yzTY&|C+(D%TUpt2Vj8!>~a zC*!24!YJ7jSP&>=WI?`bo_Gh4Lf$}1^2NZF&km;VC)KxPo~vYJgu2 z(1;1z5*}p{+TqdhC$OQRtN?%{{0)3NC$0Bk;6g3hH#Dr zwS6u<@cBT^dKLv2{4hoCW##BGDc%kBQ+ofY>{yTs*}5OG=Au29CaXM#sqS(6|&v? z0Jb<3bS??D;<3i?t=}Y<@dGv%ZDjKnHNN_RFLDCi81^T{EOJK)Zi+BH7GRwXaAF0R zru4-PAp<&JJ%Ni`=wt(!>?L=Yazhd4&>n!VvUh`xKG<7jR7qgeUY)?Kp-h`|*{i)f z_o-5|=@0|zGj@9>VpR}Ic>G3mB%(K%FPF5KT<+x+ghmITqU@EF5oJgv+M9uNQfN<* zcmx!#SeJ2Xih4MIH$4Xk)TEW>)lnyCBk&$-lFObY8jq0_MyH(@a1;WJ*@!a+#7d*Q z_W287sR6wvnnWBWEs6U}VWlR7M5_*vJ(W=6U6^^lqXC{kv1*!oM?27|IdzKRJ%JvF z>fqo9ErVq4iQsoA$mZYEE!}DmHr);6U>*f+19wsEmhQxa(Xkrf07&PHdE9{mCX|eW zy{jnDrtqqw0@HKggOMgx4n0p01IhC@n=YIWk*)rucRD0>cW6DqKeaSS-=vcAFM6nH zJ;5r2X?cYQDSKh*e*%*`$X5Yz z{@u54LqQ|H38N37o#2uXZDqAo_lXp30#I7OS6`3chWg+lxqQ?jdq=5!c+=7XvAgWbLbU5*I7psTp?>9WFKgkqmtaM7eRm+XAKC_5OWg!%&QTf;CZh~D zFm;1Wq|OK%dD{w}V1%}V@FAdl9K2R2L&(bOo3=oW+XIe85u>(JUBHiY zuT%mp4dv930cq6})Z)8x7e?;yg3&{OFxFEj@ccTI-cD*+QU}_fXo2(FpIDjH!37XY z`v(DeQdhXx=w?ItGy9N0IuzK`g*TsgXCObDH!0PVEPb9hiyrzI*fV_h*CYlqZsa3wNQDd z9fJdM!YcfJ0c!>dKCqhw{jFdA{KYtjD)=hB_QrjSdNShfs@##43oUDE@>)+|`u>L8 zeE6>}H+g52P~@;OOr5{Om4V8yv~cdEQ**>D--@wUMWGI&S|P<+OSBrmsK^^R-!xgz z$4hls2h+3P$o>T_eu&f?i>xkl`H@22;wD{h7=Y?!H4)!MQ?UDa`1U{=HfZcc?YG7e zz+@orhV&n$t%_Hl#SCfkUPzgKYZQ?oZp4m7OTvD+kahs7W=D~zeUtju2N7rI?txlT zHeytI)m4eIzcm4n8*!XPS|%KksHI_acq5~l@S@CHx>Sd}oFEM~=$1CDsy0OL)Jf%M z&SO)BIew^3ld{~Xm7l0R*|wnijSF}?9H4haTPIG6EKGJN?+8y)@jQ-JiTbUl>iE)b zB6ZL$Exd-!Q`g24?o z*`UQ9ky4HtfH9OC@^}Sz7A2j;J;b`nx##f6h4Q80BxzIM zlkP8yai=@T7^KNML?|xHn&MVr4&&UYyb1VvZbw7oIwh_6LJrE%SZ*a*s9ItYqT$~t z6=aUXnu58k9o7xeF-fHz(>YIxsKy2;hRzk7sBnv=0i{OpbuHwD+6pO0!yHnvMDmjV z35?}H$#g;-h~v+LG~wyY*O$UL0qn@Wv6 z*gk5iO?E?WCG<;|4=txpX5T3tNaNmgQeT<&@-5Q)rG5WG+~00FyT%GN^II^6=7sd{ zgd8_gFpH zS2Ii%i}XUy=cHA=;B_#UH>M|nzYDo$#_pJGVjv;+&WKxI2h!JqhEtq6a6MN{=l9DE zc}-Q)$pD844pZ>95^iKU6BUQHbm7x@8di%0rEbUrAkq>Vi@bqEbON;8zS<QM^xambnX%GX0>8`$$Lr2)u+N2%je01!3YwV}i158&S z-2)j===QA0>qbX0JxtyUS!1b#UcCx3x&)_3Q(h=1d7vS5QuW#jd66DokmXz`q&}M> zQKQ68S0+*iVl_(_p268J=@9Fsabnh+Hx%E&DKRwKqr5GO-^zQS6fMmRt@8ETjg zq&JT6^+PQTDh95&Pw<0_g`s?B)CV7SM z1G&6vk;g;Iw7^W-2=xmVY9He*@M^8cNBy>@=0Hu?J-3y?2|ta1$yVG8MJ?*p*4EMT zhGAi)G1P+{wJB>6AZmGFWi~9U3tTtq#9;ZY?skLd9jHn5Mu?+JWB1Fn3~Y=5%%YUS zUZ^!)LqjvRVB<7SNUn&AuG+sfr&cHFSAki9_mVRRk_$R=^8I zTu_RZ6?LkmuKEVqQlp&o3bNjBi5a> zktF-4GY+@Hb#~%l#YQ&FH6l4UKai7czDK3p! z5PfO7tuUA93Jn)d9dtPzIGA2uDEC{qzCd4~hnH6`6khxUc^?Rs?nI`i`$CNbL^PVx zLiy6*zSR?xVXmcC84omF1;2&)9lXYE{Wco5Bgai?jPk7o5)?Dld=n`Qgldjt!(zT*C2cpZg5k4W&v6<4tO)-=|Tl?~0T`{q*81Eo9n`7>DuV)h?E=`tNA zQFOGKtVAQvm1t4rQGoDz&>I0**d$U;S|3i~!R^~m;G5UsoJPuK%xquevmLmc<{rgn z;q!=rN%KT>I9Rbe5hu4_xrI?#E?^#yN2$GTuaMZ{Or{`fY>80a`^_?1 z+tcVZ)THVFcY~{7a=OAnC9x*Yb9xlib%$c7ye~wZu)%;~A)n?FAu#IofpjGn@X7+5 zb5RjQeNtTIANW*C-tM>^D`Tf<_emB^K^AaDI~W3A|tc1a&;^`9!ey@6G2J!QE! zWK_;uCgxMayxbYVEL7GV>0o%D#8pXy%e$xqGWk*u!(`*QfURFJBZ$-;^-IM~wfM#$ zyllyB<>yurv7c@rTf3n^>X%kG)#6+S)*ZRdBk!;pVF#+?nXdf}r6)nPYr~snx`4%W zS`DEy37`rtF6WM}QdIz-U6z-g$a0nu!U}|ad?WM(R=mj+(_PcSDdvG31R|MO77f-auTMhoiv{L zM(r+cDa*H?uH3W5OyT)*N9}$0Fadm&}wLnncb4PUP$2(B@)0s!%ruOTbLc3f++>B(x~2^~X*) zT)_K4L|616;cZac0BmIN>ULxRC8eUQ6DdQwC=$Ag0yg0HLV6?6>Q_TGSZ>*3XLVq2 zlnFGnY!4wNpXHWns@v~;^u>vRR9<$QGw3)6hS8z+LRZDYi88jxhV)|IvY(m^+HpG0 z4N$?MEbErb=fLgBPh?;!RmZCX)jjV`<6HLCq%kiP>Dus@o@VP4y63bE*^LNY$P2ka z_3_al&m;m38U%$n$XSoH5g~g=z*tLo57d@r@xIlU&G7K@XL&nD4l>FLskRuR=EG#E zuov=XGiX@Hv`Ut#DN9H91Gx(T+8VMw5d(JJ!lJQ0bE7Oz>2QoIpo0Y!!wKsST3;UI zj0Ea3oNR2e9c~omZ^>LLh-P^4BD}7a+BG)hTd2~;ru(d_P*3VssUoi!l*ZW5WF5@F z_8XGjQTwWg6i0+qwyWO};fWrK8{W)v&8K>-%{Ci%Z!nfz$b|ILr7a8mQ}>sSjk2mMqJ#3b#TPOHLY+0rVQHdsqa6oo*JBfC zlFi0ARGVpLOpMpik<_PAN#k@+lwI!7+G`05xE80X6EJ@wzs$)~Xlr!NwqlJ;wBrY%hSQp55xG|C%4V73bOkv&7EiI`s2k6p;N1l=1`2xDb)|B(N zZXSQ1Jy!5_aWLN36aAAk!rJg~vgoH2@`W^O?$n7B0#%QI?Ct$QuB$9$w*)ml&2D{a z82k(EkLX?zCN{(mbw@3xd+Sr|oE>EEj$?tmXwi)-!`$Nzwd+=%HZwlDi_ub-QuP_-5_qzCb!_xPPy0`Oex>UYz**J6@2+Cu&f)hw-d8zLEVi=dxG($ zNcBKY=AbeAiA2_9zNLe}>m9$QRD}6afV2}t&5^=Jad&hVZ0g#fDg|?jK_xluH!Y+; zkw;b{ZiX($P0TbxU>o4Qk!m(~hPuj{Hch_pIv_!{dT->?D5%pOs3eOBP8$ev-dF7qksj7-Jz#)H1uu5KeY8-JlCd6OT2E=#v|tli?Gg!i{Do&0L9rY4v7M zETTO!$nUb(m;CA=fLoKk@ga3XnIupQVU@CJjNb zASu-x7&?$Th<+d5>Ed}e!DfoM2h!t4J=s3rbe%1NoeyHlc4Slt+GP@*mlVr;A#2RX zSCY;edOAiJHjug@pMimwE*uf^Fb9xom9@QTAvHrtVHRnA3do61Xl`6Z?< zyu;e+`l@O67DI_0Jf~dFLz1kPA8IDPn9d!|V1cEFm&u0ONdIu2{zRcU2-zpofKV0C zo`!%gR6~^qTujMv1_NVTpP&ZrqcbFkswxY5Oao-y5myJ8Oy{FgBasW#;oXq^ReRTh zNDA6@h{FKvWC@h(u4uoCSMo{jEu zA{}j_w?}lcv zepdaVw$J5-j2H5P5DI#=S^BxRjGF8Qx~yJL8YOY^ehF|Rh089!t2d}n)p)1MFI4}> zDg3By3hLDo^0wHXRua_;`4*A9=Ktxia{qFMn+o?B6+B>r4&l=p-6*tJ4QKFSoy|Mh z<4HHItzXD_4;BVrQ$^jvs)0p<9gW4~I<{I}Pxry=^=$C& z=wUh|!jBF&wsxoGRXuisTT&k`F<1JIh?tP5%?$2*&}SQ^?x@O?@MKcz&IWg(gg5C9 z$`$g&dDi^Ou^&j)!MX$Xl}K8%_~|xo8GNXvgMX@vJZF9ld2vKjlMzS@N# zMq^cYIX7_ER@00 zI=2TxPa(~Sm1hqO(x&DPRqh092OU>DDn6VY7dmNj-9xdt zolIe3Zf4IAP~C^vrae%HG9Oz>vSYVWs~r+t)He;2F#J?Dcc+V^N*=L&pjK%wnDW!k z)zOH^cA-`qij5Mw>nx4a{MnlI7o^(+F9KyYnte&&hNTWf1IpW_BO4tnO9xsi@I;)z zYj>YE$dy)f_;%U@QBX)-dZa(qR=EL|g5Jo2>R`fq`MTaXBd$q4kOKs?`mfl)##Fg* z$&_wnF8ZrA^wbzW1d}YVK?w{$*tVdg>cxqCAu=_X+SVV!cu`9ZL~kTXr!Cod#A&ds z7m8C;f9!HRXJetaW+*~89WFFqu7TSH9Mk14Bg%FoOPWifFdfU9`dlo$E=Eb+kQc6p zhTCOIvme@fSY9YcdC8N;i_&E!*0PqjYPL{2!4E8Ld28NQ$Yw|BgKq5{*4A$AmqQo= z`uL6lwTsT~8*l^TE~rS|Q5DI(z9Vj1nB%tcYSU?NCmNy-K%nrtfFAA0V0EAlY^zIW zpBkfb9jwe&FO<7*TzHOCizDY6s=92RJFsAS3^VQSfHp(k)w-$ri9ob`k2!n&BckOm>%)vRC! zOZ5gld!qxz16{_W>FPLBQo2DlK&mso^ChKUzw6S0hSZLM4^uhLXdPNng-2+>wKnr9L!38kQY56&g=Y=YKfn@ zQ|9`WTB{+Py(0)&1)U|#134ynslkZs@*%K;Iyb9Z)`hO(L_c!{h>NI+{vqd(4PL%b zTZ${K+7D)R*_|-*(mlxUKoL@BB3YAg{m%vKF6LpJ15?j0HDhPSh{ z)ZB-@=K7U}sGnk)QpSJswz<%BUk_&`8>9c> zO?4cI9qeX_WaVuyb-OttjL{f02SQyDulTwjC`kJNM>I@nq54j4qAl+z4T@#ac2pZ; zHNZsbm|4`gn?18K@i-HVE>Bf&Kt(K zEUlH6)PqEKNf%NzeMWiw8vX~mKoRMmpu!uRN+#~y@k{QumGwgT(1A$_qAOIH9Scm| zE5VLZP6JsZyX~OtJgW|`T82Orp=B}V1fCY&kPjh2!}e7`_l~;jJx+>8QlF@b(ugYJ zJ5{j;%ex~LR9dI~9-1+su37JBO6DD6EsQfMcpFYgKrhG|dz1`b42m|JY!E43JR6%) zj?N2qdPjjVe06 zRO^qz!|LU)u+CLX3r&r%HMYD)BdITE1)A~=6);aPs|M%;cc7!m1EDo~X3$oYCl}{} zJJ~o;RdwtHWie{sZ!MYozAluAKB&Gf)LNVz1ACz)Gf%QkxivBDOM9Y}vkGWupmp{#YP3bMljcMR?~JF!uxAn1GDK?2Yf+RhZOcxZ zL^cN5tDs>!%4-#Y+h9-NYoAj+fSMeZiG z0laiVR;}`l(&Td^2EGXk|?9*>O5yQ7&0uc07&t8~0l{u^1yPB|S> zQvQ!B$gBb%s7iV5wVFG-J~dBvy-XDs>Qt={TuSX!+!*Q`*`@7@)3V$!Z;g57jJ&fT zG00G+yd!Rq?i!5G-oml=~L+#FwJg-{n5*D8+@$GaGgF z{}*qo&!;X!Z7xODsd=jGNvScu+>S>|JL>r2ZqKS^*C)K;*>pF=9%8G@eF@}@8U#vC6tR>i2Icnx}L(1TXw>PZsoen%P-XxuK_Z>tPBYbS51 z-Jg~7wv4N!TV9u8#ZC7@)>y7dg*G0}Xs1iHiqNWG=oUB0;^8}n&?7iH!!bPPlMGdj zh@U9D^L{z;){Zz1b9{Lqt$!V*Wb?y$J-DODfgCoVO_SOokjR;0W4Zwm?vk}>Hvdn& z{M39FLLCn)kJI=YB@3_Gi;CsNCWr=N$;64`jqFJvRI1t36LCH!?~c60K;BU?H>C}} zt7N>=sUXE|x-GUxtSY`+qVPnKF*3#F8I+63p{;zf@DFA(1@DfsYXTZ8Y*S5{FIWp4(sz3D)0QN?}MzFXcZekXQo?RG;xb4WHnSNxG>Xp8E~nniW~f1|X8 zj%%~gfJ4+XhIL2o^@GOyS;O11b@wFdRqfoek{Zkq2sdRUn*(`R6xyo& zOsXc`=kF{HBHZNALK+@4#S6t|bUxJwBc*oU`?J>PK=nN5{vPd3@?IB&U z-S8&=PsA`)FW}?LL6xl+*Gk1+LH$Aj-UxSI8e>4yO<%^yrn(l$ce;IWVpX0J_*!2j z2z5||qhp2B=cWC!E0u!Bz6`mmYA z)$=9So$)u1W3UWLv5Ky8t06(i5#$eWf0C8a^_F;}c6i`TM&w-KTvITA`cKS9v48_L&g{nI$S_y`Dn04$D0h!g z<~5DVMOsvs%R$KCcovlE8nmo_rjJnT2_2~Nc_t<@xc$?V&@$4!k-5xjpJ9perl?)f z>)Pi0*6P!=%f@jBSF{3bxjHMB8p+eNbKRz;PJQ_rrMx>Dw-P05{`Dk18lZFsO2_z( zmbY$I1^R6r)ErF?vXtJUVOK!;%j@1(@U+>1l8)Cngg3k1;q3zOjZ!x1$7IK=OXz@1 zM{Vl|E!2M8*AT3hMzp=Cz9_;EYN**|%!;djtw~CU%)1IVQgtzHOnl4Ram#x=EclKl z*t6!JIpT|5rq-3g$`6W)Ijse)&BJ-t0NjCVM?NVk?^4HxXLGqQ$tK>uz<9dLeB_SV zeyOxhR&L~W574TFaiKHb<=H(sQ^+(Xo^LC_^_6Rc%>j%HIj})nt|<>#X=%MzklcOF z>VZ0C@DO;C^=S^MxnIah;f|6lo2J?Z4F=EAza4b2x%M$;kEW@%1sDR7$5_aO3fFj_ z01d3|;|H3+|LV7~Zn~36=teedj!8jVW;v%#!Pq{j?J0vE-XxXaTYeOqTd@dY;$4F6 zb6kh#=A9E|lN7WrdGdT7ZQGmkVBLYyRXNi;eUY!J+8JJm;wQ&gb*L_S@vWh;prkYi zt%Ots;sHEIT``q%B2Q%{*^H~)5L5wKaQ_G18~NoQ$6T)LY6NB869Ze>FQj-}yoI91 z8TF+fut5PT`#=t~&{o6bW-sq=iy3_(pLS5iqMh0P#H$^+2c)~BoMQBHrs2)&oZ`B5 z9N8eHg{%hI7-0Tvx*N(4VqXfG0XApw!Bic*IURo?LzkpOUr4e8bL}D3P~wG9 z6te8~<4~Rcg6m;C5tVH~QQBxut}awu3?)<@pdcGDPxmUq;xz^h*42c%BS#u&v|jZ7 zk8=w1VbdkN7pgiW9q+O%ubmj)Nq0lJ3sPFnOSzl5;kp0Tb<%V@2F#!_# z^nwhCgEapj+NT1z#75Vd{<ZgxPRLD(lTE;_si(!r3H{%J}y zDHq84j#`*$HXujbHx!!H;H|aOq}d9{owmBICX_E1a+va_T&l&Catcb`h;*Vf#wVU` zn#!q`A|%!4Z@1n@)Uaiphr7<1l~(lRn9EVL`KGaeWd<$5*Ym4Ci9f*FVmTpEP@@sv zReTjPg*IBALhh*P(g9OQ7XXMrcfSJtmI#mO?nqCm(pGxsEZp`?x{==d&Bb&gzP*tt z%^UOXcCRkCh74FjO{|6wc>w!%*HMKgQ(K-DF@)uxakd3nHaW z_Ke=bXksp~U%;m|2yJEt@SDWa^9w>*4$}$O`*o=v8sYQ0FZlsIJ)B!BX&r_@iGg zqdt9w1D?_N>Y~RzEvT^{(#0f4-rNsOWiz@!JyErU1fpGr+4(lEvMFt-+IG8o5y|^- z%+#fGuKFKjFbWm!M9hRF<|Oa|a`2uT$}uk$wq4t+eH8XWDW+bQ$&4<{v&f!zl-DH? z??o@t2+;lNWkI!yz$llz7s{7+*NqHWrR519`b-Ux%U--HM2oQBg|C}7dXTg(Bu$@L z-qj5!r|jEKgN$H08!xUgSOqwsU4VA`NWJvS zMzH?vT1QULLmkxFpqJBym#x6gvOLmFve_7XBQ23AYK8r&52fC!~EGrWX23c%m zr1wd9B+l(S%q4f!qK%`tO6p0gtJryP0SXq=RMvDdyLZ5yPw&VF|KPpC!sx4x7&T8i zNu|Ge$}kAMPK{(H0w+Bg&I6$)CNfh=-AHj4a1P||;#L63x(OtidQlb?!u}ECFnR}! zXip?v=kVnHWHu8|~7FW5JKR|?$C@^Q20|{F!SYT%U605?1*n7cKtU@8m`nV?oz{Vp zQjxbn$=g)3$Cg@fQvreIr^tRjTx4@qseC`rSq&W;pwDQ`6pPNVFCFu%9Y7bB)Cz*#7!Tl z+As~{jLk|yPDEIFu$j%nNANO|r$2zH1Ec{d+d}nB`xM3jC9fbfbLO&=@V+R8u|f5;oBdIDjXS;dBdAeeTL$XWi4ASkavC!Vg2ec0?{v z(n8RaDu{_ss+2} z3q^5RB}nQ*dLp2DzznvXB&gKz9;l7N3yyXwsebBR0)GdFkHhF?IdD2dQh*(C$(*!R z0q&vz(jlWV8(IoIrlKylx9Qc&bY7X)J!u73tC&lmx3)1mrKjTJQtnJ#U-INPk+WoEC%2E1sC{M~C(^-SOQJU^+{7%kvs zOwPb&Sk7CF;Eq5~q<%&nCMW`~Gmx`8L8kOP$zu&nXUfgSV9l5!v`PkbDDlgd)4Lzw zWyS`tk^Tp&E?qHmJp(3pcpRfk5z$RYep*WlO3l}fUAtd$nA7QIb*T}Pg*t}*?6j4X znh&RHVks_^Tsq&qE}YDn4bruL@ufcbjV^K9!F;ve`Q{w{am^HF$6G3N16Aj_+e~7T z&BHfO6vsar-Y%TuMWjgIu(NmQ8{{e5$-UCJSZ45PrV|{$igdOEc?@--eCyguzjb(F z2CJJ0?~WYeNw;?$OKrY(;upGQh%RJ6aTdJ>c3pV$>DiPES=BzKXg&=LgEd&-&dCl$ z|C7cD73V)e7QfAGoo`)s0@w995q7#Vwd_vWoRMddj1t*4VBOUd`9h|&bT=AgDoWqu zL_F7G^lDA*GnjVW(OYkhzQGM?6vTa4rh1i&^A3ys3i?Xj>?k=NeOeZcGRcE2z{U@4%3T$l=veP$jx` zRM!*aV164RiW3i%cagCKwG6Fkj}X`^cjSx`-bw`39u4kZ-5W*8oSORHvI40m5n`_6 zI*?-`B4H*YJo{}dsIyR{&&>ii(gmYr8BS9J9m?~^#sb{sBTLs(l68{ne08!;%n(|n zx{R+QBUu^Jgtno~4WY3x(t2}>0`3A}yq+650JKia8=2j(GR8N8v!NwM5~*Q!dkdLn z5)bNPoH*b5GES&Zl<(#}WE#T-rGE*CMEFFWF7!ux25JBTUbIg3uC++`4x=^^M%rCPL7Di^URSmXOI~H&2ur#Rk{?$HYt2Q;)rW zfLns3>J5!jX_81p4-$3&Vsdzc@5(a{=Wixhsk1nlFN8_v%Q;a2mHVp1Zl?$ewdf&1 zB%*y_bx9xsePav7ZPXjtq@EIxhD)DMzhM%mZ|#5yQBoaW#-$)}SwV`o&?P`?2ql2{ zFHT+ra+|NXx^W;nWD?58t>0N)6G!D-YP$jE8!+A{b&>|meNZQ0is)y2(E4fPim3wE zS)t}?TG1tIc)4K1TjqV2BC@mk@DDhX?B7|7cp$o}2$gMR;!1#XGY|i5$Q@+RI1^ia zBUf2c%aWhH+roa$l}!GDCPpKtlAumO)%F>LKTja4MluEDMPM=xgvB+@hAVU(%+PoB$dhX15E; z5Y&Dk`lyJU`zao!m}WK09pQ9JBQ8*0UbM)!)caLG-rXXi+N7a+<*kTWJcYWWC2kwj z)n`8C*~co4nhIpPM4RmZ2T;;7n?}pblNH_A}Q z=qRnBQ-0v^iK$j)*pUjzA6K1e1jCyNz>WO!Uzns(;K*yVKH}G*q?=>o`cN)9 z!mICpAimUP(x14}jd_V*X}TLC&0C zxb@IxR1{=zcZAeI+CWB(+9RmkejwJn4GMLTo*T5PI#j#AqfI6f2XbJC#_^AqO(QLD zf`aaddZ3Os^F$Uk8u2p;I{@RG(z(W)RKFa1z_X^ZBMk>NL{{Z>e1@04Ov%`+my`x+ zFrlp)i|=E)Y2gF4!&`)=s}DuVs7TXor&tK}f_80MpB8pgBfJNS2;4T&3Nvo*r;XDc zs73kHercxVt++Q*SzWm|ovUa%v*5Iu(}^1p9|?#x#az=23`uAP$*2|&5DM*{8Zc%n z5qD3{9od+S;47LpRHkMMccbPJ*6F=o7;dVS^gu)xrLEq;Y%$_75RZ<>wBATj0784If zHCZ?0(`M2Z?=Ox;i*Z8X1%+DVo(^c;WkbWK4JHJ!gP9}ED&)*UdCAC@ z;-}uPII`a8p=qwCq+BzL%dC@hJBJ$NLoTMX^xFqS#oRJxxh|9%(dI~-zTnYEaNA(} z9od`~v|fqSz~@}sdeyq$NOyxM0+YSrO&c@<;ypAHV@JIeM1YGPPJM>J-t*(#VPYry z2)?5#NT+DjfF=Z1E*ZC;FO*uR)ub(}J9C>k4Y(tZOv3wx*~(byS*qZ;0XtGIX{%1Y zYjHfMfeZ)Yp(c2BBVsfQj!uIQKauN&roW*oVfECo33)OXm*YZy_zQnY+FDm0 zo5*M%Vhu$>`)MwemFU&J83aN#M)yE7+|rpNflH83bAJ|J9w1fzyu z=yyG}4;-uT`Vup|K1v7gjVz}ZWJ_ZNDsPg_DwHE@XkGkp)fLXUKLVnW9B_j80E;=m z7@l7BG=g(WaVIthYW^;>Hh(85dbkm8fyiyd48>tKF`VQA#`s%~PP`VE&fASJtAM&AyE%4@Fnhl(H3z6J-V245?o?Jx1)pkk6}uz$b3vQ?5TVXQQuSZR ziH!cv%-9pJ1lw+uo5Ejc6+=}>u##kGL^>SF<^Vf~rZeRyF=g#Y7uJQ6gk~GwF4>Tz z4uNB4h#SD;moh?sv|;41uAjA-F-_`yR|2I)>C=mT@nFMj5p%a1P#Y}qLK-)xbkZ2F z@~Ib}i0KeecjT=Q($;XG`yl25X?ZV{FYz9reN}zZiP+g7vV%+6D8QBP-~5oj(x5nP zME@|6Ds-TqAu;UtQ`$VNF*JO5A+>Y)Ng7Q(yoM+hOFck65auFDj#xYfp+NuyF}rvm zx+KVaRfWPX&fv~U8$c5aTH`hI!(VI=!RRKRDQdQ%P++8TA{251&CF=LoDytbhV==! zBk-FP%t!R`*+5e%q|tKnt!KW%8{!S< z2o|JLqc@n$f?fRykT}57VM_rmqcT%CKWUXFxB-TSa8B6eFQcDg7-?nwSJc`uAI&9p zC%IZE2K+98|NQguJuz$KdPBkgf~%n`I#M^}jehcSm0!N~+FY<3mf(FLvh7U)(2S^% zQ?SjH-IC6bBn@9@w`NKD|<02<95UG|un8zG8lrQa^=zv>Ved*C+K9P4r zE{IEW)K!v}2TZ$qgGh1vZ%Z&$Y8*t)4RD+s8J2B0z0m;dL^Ea088xv7`~U05o}Ce6 zU|)zQ!y_y63#gulmX{gA8!;+L!?q+{SB1e}w7T&AR?TlK%;FDi6pY^#a@ufVHs1q|x<3ub&J~I1LV( zGErU^*W)*jt3G9sL%5t#(TyIz)BA8tY$T9!Ukirf{LR%nN{a&n+b<_8tk5$g9^g}_ ziax0K0?n~A5r^Y9GZ5r;lZYZ{jY7t|6F6u>(YS<$eMVr)&X8TeH>Epv(7Gohx#}hT zF0`njwHT?m{P;IK)x~>0pqlnT%DYq1u`R{Cox8$MJ-oa6cW2o;JI!T*2RD{s8zHBhA{cG)G+2nwJ{Rg zZ@fj=mML-h+^^DMH{d;I=Fq!8qLcOIMv)i5Mm$SqV2a+QS7`(6+rDyEiIE?RVu%$& zMW+Tk|hCl3cxg>@-S)ADsTfW z&(<;Rm;p*g?8E~o@oxQ*=-}NZ)XqSS*i>k|us#6>8MUrXlzsHTFm7PJq6sH~tQjDY z?u$g13l9$8$e3Ij>!@2Rpp%mrJjb_d4C z6%Z|cYNS2a8ZGklAu!5s;KOj@Oe@iFU>Pr9F0(mfR%ik(U{Arl0ESG;G({bGV9gRh zwF(mT#O;|j#s&Lftd1M7!I_uj%%kwi|H1Twv~xWHFa^8;SISJRpMAz!jKT+KS!Kk* z?TM9Xh3&s9ZrVeF3}~MU+W;#RW-`$h6wE4dR-j)X4ZoWMrKPF3RQ&{&eP(d1hD{0h z1qm2-qfI?QmUM6vGuF{Eoj9*<2C#v(&t>_E&OQ>oW*nLph{nBxv?}HaDSU=a_;?Bd zzV$n%&;1dPu_L|Mm1@n~4%FRqZOD_BvBUNjAZ-8>R6qif(uipQjclC2;5`(wf+fs1 z4q595dYZRx(ok!}106LEkj3)!=42Je((Ryp+d&*)=Wru2wv|9`z8at& z#-$OF4Z=|?7K3T)8?4Oy=bzt3Nxyv%RH0@5FA!G)?6@d#NB9BKY~T`|+Z!DDv!id& zGz8FmeJs2luMyM5rS1p^Sz3&pRN?|+)<8FuFR4vv-xGwF%EUvJ@P1y1c52S-70}pS zC1P$F5Yhk)Nk}#ei8mJEQAnkLM5r1-5BjY^{Qb|*4>Y!Ah+z)?{1-&cOQU4w+aF?_ z^ly>0P`>;OiDq3^EWV!-$&qzOs3a|3i&QQW3#L|rN-et8ja=HltRxfd-Fca0sCz8Y zh1Ab(3@y$^VAZ95{{=-%-~N``RNXXOq<#xUY9FtL=o*W}aP9yHUkbJ;s{25i`h0#w zy9+f5N!@!F?FyT#=E~h^BKRks!5fiBNXY4@45VP+rk3?W z-$Z{x%76+qjP9ot=o?WL(lq&@;%$NXtE_CVxdF{6AkCXZ2+{>p(Jw?#kQTF~AO=J* zUMvok*ir{qp(pr`D<_5a-E3lq#Eg1L<%y7@dR~)P-K(MJBTZvRjDV4o2ChbxWW@(5 ziPv$8mbS{J(&)8G$Edp)t0bn3PEc*TumsT|3{D207r+sdk{E=<>ZkAcM#*LTC}=wF z(I%V+x;2gF?xmKO0XLe{c1;xh5rn0EfVP8Pk0uc-CN-LGz?Wd8xi(~vdgvP6y<`Ah`*L)5LxtGB!6afs25qF}9XY5jgNpGo-^hL~E$tXy z#(J7uqxkC%q0vS8Jls2OULBH|E0~arE+AgpNXZ3rU2chxb5Kv%HCUOQpz^ zOIImU(n8TaZi}>q_-zl6kBNckQZ<^pNNN&n4~*&_Km}XLFz?7s71A(o%{84{%m}XF z3t3tpj0Dn%B~1xk7^=^qL1iQfSSpm&>1f2#O`D%~6QTjcDh_vy4JX@1bV`LA6k(GuU zlvLPg;+L33q>h*ZcVbIgK8){qh-<=j!i` zkdoYD1Ff&`DB0#(oNt|;-QOO_GEKV8pV!lY9YdA0Bh0t7SY4Beiom4#1mFLDlaY)! zGfl*oR#OmOy9(WP0@Y_`FM_(Ge#=z~P>nrHZB{Sz&rgO1nl($M~+ zD1%AjWMl_OhvKX8NrV`fjBP(V;E>&r%1O%+)8t9P(=HE$u@_}o+4OM>z`p)bq@;!V zB^EYf|FrcxPRP2UN7=#4CF@$?ER*Z$d!PP5fv?{|bX(1i@~N+iNOj%|?}mP`Dyx2c z8D8J+9!$w|KYW|!2jR0fN^#C)AJ*@TD?os0iB_e&M3L5g{$atSU3;4E(fl@*%Ox8@W|d zL<@^Tqn|j{yRhRF1>ain%@Ps&(oCiL41l8 zjA(DFc;dg`MzmzLJjgq<$mMlK(MprjAG%}kFSWW+zg($SDFW9fLyxIeRBiCe;DwXH z#Z7}E2e=XNy2o*sb$xru{_j8kuU|wuUuY7Q(9~YP878Ae8Yg@=_NyIn!b@IyLbYIa zFj(FL8YjZV_;T6^m+~r?RS|eY2v2N?bbuTct z9r)>mA_x;Jtt$gi=_KK;Mh9Z4Lpf+4NqiLCy!~IOIx&ogx9T4#2Q@sF9A1N^@;cnv zOgGdT>H!d`Z6z)~73GM`ASwhoUmg75bzw+cxf}BOCex%SM~9r7`ob_rhqTiRr9Arr zAk-Yt=3C0U-Hf3JS)L|J`E$Qp4x)gSg$q5@ptQeFEJf4B2Msml@4IpTg51TwfBQzQ zS5M0gZ}O*3hmMRxSZ#8F-$GiBmw~Rm0gVttd?3tiJ6zY1rA|{d&hSL}l3GNLD-BV^ zcW5KG{dh<2<5C59BMG|@oPu*A{zPq1@eQJWjS^-5FDPgI$Xd&ymc*SKtslZ92=+id zpXLIB3r)M|X6sPfE}S6B+jcPs1B4u=UQMP=)z^1qJy3GWHioInHgZ*p*f!LK!Yi#M zh^M2v7}jU^X5Rnk-bMkCX;K8eVsSRQ+06cYB!3j@)ZxT}+X3EghS&1S2qCV>t@h*;JVka_VdLM{V zQw*kHK26~gh-y9Hm_YWVgr8n0y0z&_%ct(_m$$v?KpkG3MK&2S8{XfMbfKg|XgIW$ zn+|{pKd3`m&O&Wts9Ukz1jMJlVp;WD{bJSMQQNuqAoSZdhQvoKrHr!|YKg8)JkM|tt#LZMo^?~pyrZ{EC;7$-C@&FCfGwd zt#T%gN@8?S!5y_F^Bma7>ZkNESvSyO&i(77Uy30s(6Cndg}i2jY*Tqt6)A=B;$vUj z#cdMpJH6paTr=jL=`nJtL@%=rH91+R#pgOiQ^7Klst3U3-4RUE*nU&qTICN4L*5x zJ-v6UKIl%q*(6ZnW(p_gti=m+Nn!!+RZ|j z3Kfg_VN=YQ_8c4pj%Vqh@o%VKQeYBOlv=8QC`aoET0WblC$+xqj_4)Q(0KHrNW?Mw zKNw7llFh0!!-b1r(EhO8n8M73X<)2Qx|s`V(pmkZh;F1L@3>Mf|0Puy48uEJ^x)nl z-RaJ^lqlPME;TBuO^mBsBe=-Nx=qFv>?l<=+*5fgb)gjLs{W->#;hIm&KT0KIz+!z zCmRRI=><(;0~kyhu@wCfEyOLZ1)>;DJCvy--^)!BF<=L}l88{wY3EonCNP!cxW}h1 z`=if+9Q>dyqwii`Fq;Ti>2pS6AIOm!8m%fCxe<>ev0Q)h&wtg)t$t#<#J?aK zuCy7Iba}*X$RX7ovBI2m7H_LfXGz{2rS6x7HL8nLr-`XGaIUGU)qhZt<1;_<5)nvl z)=}yXStp9NTxC&n=x)t?n}&2CrzFaqM(65dbc*&jvcw)5vGtL)0Y{flYE}KgUQq#d z3FU=ske;r!8X>xe5A21lFJ#ysn#b3ZO!jww5)DHHL1?C^PzU|uHVILNXA@;PAyi7> zg>-zCYZHa4_X*AoPeDo=WJ>}p4d~{=D)0m@7(;OrV`MrP4aO57mlsMdjikssQVnZ; zGCb;pu>i3l@5F`X{aTdQXT~zI{>BSgWzZ6ffEp&S>b?*M$KY*%U#by>;s>ypYDm{UwvH+}R0ss-aj4 z;zs)Kpqz>|9R_T0X8b2gtB3aCY#!e1Kz4ISbl8z67m)Ljor3aG8)6Of6PeMu1kX!A zDz~h(H;Eh2bK&$iRT@s?SYnHj-o#@110hZn*8!?~tH5pN&)@bL{!R~!%p3~k$^(`Y z{YqCp$P|2pL=Dsm3p(ES8e)bRj>?`IWm2+$jpHN2?`nXa>D6YB^%L z^dW6iMpi;l%9{A3@Ttf4j|*i3)so2Fw9bg90>6OXPl- zHrTliP3uB_8P{8yBTQix-@`H;P;2=$J6#b`4xIzNuu5R}wejDLl1=?yOfcPa3L&jJcECc|P=)@Kk{`0w~BLB-Bme80%m)8k8*fwVIJ&~Kir5WT?(yuaoX}M42f;E4v?W9H{ z$DP3ZaRW?q5%Q5DaU*1E}rVF5AnyqZzfA z+#l_Bh)~jv{L-Bp3P^}bta$)C9=uTgW*Jsp@2iEi0$P>>YN9-x7|x&0A>fRzJ8<+M z9iEvBr`;IFx;Hy$lV5s%)~RsE3LhM(dUdRYSWh7rn4iek{7j#ImGnO~-QtQhSazf7 zOO$STTl+r@@*(#?5zq^`pmIzpWz|-cLrY|Hkh7nZW5l+%_a|{_q-vPTYk2;NLhC5uhU@Z%wf;#B!Tfdv#OTxxVEUXq zp?QZ}7v~?SR=S}rQjDhsuOX!qedt#}%PpBu-4qOVhsF#2G>m7(W~gQ4Xc^39(l;`f zUSI)l*Zjo_1ZxOS)I#rbFc7`PLc3iTE`GrS@ja+sG6P8`R=#(}mpd8!QP*Jbi4)9n#VeP~NZ_upm=)XBTju&NPB{Q%-F&n1A8iLDKixm2gfe<}%8w zOhJ~L0bSE)H7LBlG?3ybaG*|InX?YB86uzF>}M@6q(YyaSoUrxvF<6n4Luyl7=v=? z-b(T~H#i>hiE{W8TE{tkz3A)3*?f5-Mmozqwo^$kS=M}VqTHKFY2sd{9O4kdYi~k( zoy7}j&H$Z!ka2rwKZW%~;dNrts_3NlgEQ>#8b9Ytkcs5pN)Tg9coT*bhkBqEuWo*d z%;6D9v7WSs4dt#yXbIbxP8(~C*om}g%+IIc(q7*x*keMCju4rg^*bS-+|KW`aJMxu1 z<<|3}RgHpFKgXrPb`G+G>E2LMwVgM5l&reTLtdj9=(Hi9y_BY=Jxw6*n z!O52+$pWtU3bFu+6!(XU4J8Mu+#p?ikmqued;%;`wYF5ZhV?=}mCJVOW!C5)k))3} z{R7@2pLSF38ZW$n6YRx=^6n@krdAyVe%d7{k(TU^Vl)guu0}5tSi^|e3t3*qv!v0- zlQqwPrGi(VLG8SF1KBD^8LT107H^THgI+-A zzz#2I=Db zY1sP6*ryFdODCBrP|t1IO;bn@pw0=%^%*hqU~{5l)jd3r#?8(WP4QVBJi+yaLFRCf z8_t8G0iLpR9H=VtLe249b%4+9#kESJs)Lp!koPY@>#GuC!)D-4O%7zx(Z7358T`#|!Vu*VRULI|!Mc$SrZwE_#&Fa7*YUJL? zRJ`F2UZYdd!F&6}_86!ea`FUC%amz!97k}P-UiZ-rA$R=F@c?H?to)4kWjouV7Nh; z8uR9a8|4CZXlthP%Y?!9Y9`DVGLzmi3hj4IEH!3xomP7yZ;%dciZ;P3S|i(Gk#r+d z$(3H3`I$z}x1C&WAemK4jJy;24wRk8dnk@HGjdb$PHsWi^Oi!3-COQRbH?9=YQ(S- zWo?~!+lj0ja*9iy8;Eu4k}~k68(4S5!E>wO&zc!JiA15!c{boA$6h^C$V|3{leR-$0BIwb|`BS_qkCBX2{L^s*WmKk}|8$ofWin47GT0JJ_JasFwS^9-6$;v@4 zRIMx6Q8g%35se+k&P;c`32I@T=nYui2&qLRYVByuhi2?+Z=_Z_ z1oGA%=$y~DN$x-f4B%}ahqs^V5DKhJj~@WMXGXMEFFxDj-E<&zN6v!OAPo`U+}nk~ z4l6;S4yu)LzkPD%yOBvJ+V04MVA9we5MFN?L|~!=PQ^B4umoBR5=5Ic(9!jUx~9;B z9#9iYfwvC!j=UsOIZNF&AZe3Kts~MP4YQ7FdbtAo?TFZs-3b;aUCn>iIkGp)QjerT zf7<39Uc>9PW~S46KG4i*X!_;VFM&6v-LqvEaM4rHE=h;CBG9P5_>KtswMZCF~@|AtDukejSkdy=NIIQGqqYmP9ZWk`rkKx_>LL> zdBxa)KIoBTn*)RW7HqPdwDZp=;@qC%T;@+Y-`f$hL5);4WUL7Hsy&3eLfV-=?DJ2g zycx6I3>UEp?ob@giaeM~L%9)uqflwxVVwa=K4bQbT={8p=Qn1iTzU#%7hPc7khjW8 zo1*)y4d4Kln%$@=gq0VGM(m8_+Ddpg)bTHC@)EtyjZ_jO4>HY#Iu`V*eFa(cRJb>)3@<-&lGg|LAFs{IU7+g=3+C0RG$1 zUju>s5q~+#@+x{X)2HRnI)&(2lo=z)1&#c!k3-@a}A-L5^PZAMDARaMzKY%x7CYXV&-z=3potUxZAkf2Yxoi&j^X|17!Dr zV`u8?gOEW+g`c*IpnNx|E~Xb2puh(MNTq5^Pn2g`vB^0kBDFy+FUokKiSH0fh}daR zdHmvIHLpSGs4?e@H)Z1abHrwS5~DbXq_n2#8xjMZ`aHllKxRJJP8^{qkkwCdgzhM7 zy3pv<;cfC7SPItW`@O$^bWExP$;J1DnY_M`{vLViB9j;BM<_==RqjT%h`)6iexMr3 z(?Z%0erSq{YG`bXG4J_N4#iU==BFL z(7>h6LpVF|>SbdyGI-5zH>zJA3YuxQ2oxbQ)+Qr}3v=yhO1+V;4gsM0d=vmhR!AZ% zj6_Dg`kIL(RglY`%LtWZ$PytTxiyg zJrIIiM;(dYSVxT`0RfLHIu5jR%N& zWKRo`To=%3`HY3MsRIXQbD7dI12@Xa;}YdilZMy zhq()7YDQJIU~ND&HLBV|3o@639!>T?|NQcp2itg=yE9JyFPLE(?BFkTN4%{d4Fi#H zT{jS8?BU&!8&#n>goM{iOT_eactJ`Uym9 zCD>3(x-^)|3MbX_LR4pHRyD`Yxn4o&m>(44Alyo6ZI|2XEw&ke(e;H~ z$&r>yfI7!hG0_EPvcT<{0zF4)xmriabwVd%$7NWp0Ev{RU$Tv9L(<$zkR-+;|HR;f zJ&`JPM|5RrB>5jD{j_U>>344wR^O;u8fkHL*innY1A;9wR>$D=DL&+y!w0HdH)K|BYS*X6 zVZ~{da{z9>D8~>b7LEcNut(eXR(WA>#dxoNw;}fKNn#vo5!9CQFPtAw;7m)Cf{Ci4 zbcmRkYI>oxirbF}Z!W&V$l#g3{k)bg6}GILRTHs#=yC@3XAhzPf|*d3`U&{1Ir<+Man20k>( zmn?vq%Ns?XyKKX2SioEN=$9#LeR+ej$>;_+g5kx2vog@>1*zl`pBG}Rk%pR0MbFU4 zM#{u}3=1)p)fP*O4`uiuQ2+P@m<=`PIM4LQfyBrLajqxwLmyp|1`8TMwZ(y*e!q~V zNf{_N0SpIecx|hwup^p4jro4Q(O4b`tBE(dc+Q0{)U*|JS8nMlkG+0~BoZH%d zA;&J~<0=o)>m>pUh6eBrO(`o#?6%lo{4}W>qNZWZ3$PM#5y9E@b)tu^QNRUizomqt zyGIv;v#4+*6ZMS zm9~QHx(Pt~nygRo$XBF#+?4y;Jy?}|^7^+I-siP#;?jDZH=-iLo0b4o3j&ocPBI75 zavMZSbO5ToP)T8Zf`f4^cf@U^F zwI&sIS9@o%PgRALoLophP1K&G*$Z?)IKZu|HlI~oTNu9j(%mOO#f_yMNZ$w=rfa^X z>3UrugPW2Tid;ujuPaPYh9z4^1Thu-LIm@aYfiI-t8FwL>;SwwvPVM8bW%b6boQ%0 zkW2CmlCZ{R1?J0?$zOdSX(X`~LNbQ#+$-%ay40tuU}9ITSV_20J|%Ie#T5QQnN`E>V6RB-yF3OicbTBBGAtm+qUj?)p+KRop#CO1-d zgy9Qq`iFao#BQ#G_d@xS@dBDV^_vbwC~vxw=TmNQYk>b`&vz(cti?eC)t7Nw>c1e` zkjwle5n>_N*81H5ub?*A1)me&AQ}Y_j(&5Rb_3%byD++e6q(yoD$~#%>R`ZC?m}kvQnjoZ zun_7cFHk)*U>Zn&qmX>WA&Gd*-9#8y!kQW#5W`7ya$6KQg+Tw=kUL|bNc?WYor3bta+M)q2Ql#2T#5h8-?&t^p z5IKw0hMLioQn8Di$Sv^j_6;DY%*%x>gZcfG@WFOza$~{@4@6b|sq4A!*A|Vb}!zHpH*gC!iBc8k^@ZDXcrV zK)s@9)*w1kye~=4THOOB!?WrPD?GB+l7iH2p}VkB0C>m{ea<3f_l5H)uI4*(+YvN& zV9mHt%b!CT^qL(x_`pjKuWcvb0X9ZLUOehllu?1m-O#F1a+5oAFb5kTx+`ZRuMnvV zu#py|g3RbbbS4poy;A8n;Os7gcSlztOqo#h++4zS(k&F4fEeG;WH$7hseEWN;JN8F z-^#iJW-L;eDJB(P&I8*OWZjV&gSM1+ z;AzR*WjF%}H*$xiXjt7C4xCLoJ91q^T9-R4qNwn7MF1#ti0};f5HkVew z+q~0n5W52=wQ^z*qpio3#V+Qe!G)q7L&+Blb^KReO##@2QFu4>lkrkHs}RUxlF7V+ z7f7NW{f`eHg^Q^s@@(jVd2&ppShokYaU0G|_IXhy)ptBnWJydiGD2gM~Nng#KfE)3xtN~Fj++8{&2A`D)n=E{CBeG%RR zVS?n1dqWhFZ-lt^u-?cI-ChZ;43zFaUkyN8ac}S_KTsQ+Ut`Zz_mrC#tuOI z-RY+RjyK|1mW7@v2UK^@fPF^dKxEU27F$N@|9~05fsFkqdjWIlez1_H65@*z6wv)~ zsuAi!hESko0ZXbuVlbZWhWs*B1g%~b^%>4e-F_P^Q)b*j?;d4drRL-+Na{jPxIrx~ z*F(}``4rY2SOaiQjMa+~fSzN5^FWQlc%6T{h0YGV))u@MGK-Hc6J8h6;B{ofUa=&k z6KFTV0GxiOi=*StJ+(80?@Mq@;yf4|CYw zb`y=Vd+>$sQXpp>yQDmE;g~})h2#jSCJpb3YJVY}6lt*wQf*><>qPa5eDy3-QD|0^ z(CDI&@_QlLsI*1{(1;2VGeL#d#fAr3+A0>$yW0My>!UrG<|Z?J>V-VJ1PuqoD#c5; z(7?t@c7y{xys=bL-SPo1Hef@J!k#~u#voRms3)KWs6rb^dCf$XIR?I9z9geT3G36@ zL0;!34f7tU*+*s0BKANUf~x?%&M^xFS>X%{wYqy@nY^(QBoPo^eAP-D|d|5M}8lMP`LI%z!4}@=I7zr9Jwiz{4Bu<$)jugc^Yptv% zdGyTiqH(mz#w-t5pTNBB#C=vh>F`F{z2zpEXt53y3><)C|11 zpBN&gshv8^EN0Gfv(M*(4r$iw+;nt2=SqBgqJ|C`Op`KJ@|^7zo`~tDra;WF^1z&HPT` zd03*Ev}+=RJ_Bbg`i{`H z&V5iF;G8FLlCdF*3fj~yR3lS{J5mVb=?0AQfIn-JXvitV&Xae9iIK*e)hz`KEZE12 zEQKAlY>g6^*Pa2d4N*6Jp-kr(SfsHE65j9CDK{EW5j$!-@rKm$(%{Tk#B$8~0c^G8 zY}J{!8i_HyXmB7r_|RgZsP9xSKA7X&1#Ag_44LBoOti~Lk}y%J15h|bwNkZw$X>E6 z5bIV4bxAl#O&ud`T@o4O#Txb#sXnw{E7al}Y{6mOfH7pp&kXg%b||A;>WGc=jFi%9bPX9*0apc|$ddE&R(O9g?X2AD?g-&Fz0v~QWhLht*Ap=YQ_Zk~ zRBxfC$U;kmIxSM6hCC0XRmW4I3d5U_wi(Ng+8de3Rpyo2TqSv0kg4~#D^Y+>%J|CF zCo<#uaFEo6TrvS+6q~v&35?GIuSz`-m7g!|TTs18J2-9NKnMsea|3v_ameKpzr2uD z;Kh;9`f9ScrR4?6FZ5AfgQV5LG19im1FL*_A;0uqz|f{-4aI>yQX+Lnjx>$tWv8i+ z#``ViNZtoxCgE}b`X&^0OL9lz3$dP%vZv;wuihKqx}`<(hVIHqFaa4+;{s+c^4*K5q+WgnQ5ZseB)^+T(li@hs0EDv=@ZX8992M99L z@#K?oaa!R$P>ZbB^g%V8D6gE)-|QMoaZ&Zrm1zfTUN{Ql4m6dJu;}6ZF(pEmh4n_} z(QSnCt|)~Y{=^gvQHmXT)J0m(8$$JHGZ-hSptTu5$CuL3H@=6?gZZZpPE=!68`Eq4 z;AAU<;TBKw6#3nk!!|TZoP6OHwN$;v^o<-6XrzpJ)Bp|@N`tlWZ1E(TE>J|jA(-hDu)?Eg^jEivhBE0A+*%M zrBaSqyijuN6IgA8c#(YS(Ks8SbBGHiTtkw0dEs@j(qyPt{JRZQ@fEvqi3Y|zKTU7h zP&m7Wjg%blqVUoIchE{TxShnkatxV2=n;IkBR5z`OOzXGUUgAwYzxRNF4P8)=r62) zF>4UNTd_OB*3n_5F)u&`Y_%&js=$-cPZSz<99l1zh3XxB@?vUUNS{-ha+UNGPh89= zZ`7*w#meaL)7c@smKa~|h@Iuqnm4US^Gbh&cSml0fVc0!L(P^ca0a^zsGaZV$+;Fo zbHIvJoJ>P?9py%C``(xnZQa2J)%Ts?y^&ug#?zdHHz)L}J=6n{1yj+)D9J;c>V$v& zM#da%wNqm5;04>_O?5+DtZIpQ?OSxnZZI$%9Nq)DZpVCUxpN*t1?N$E-Pts7<QFBf&0UBNt-Q4Y zxekjGXd`Bvv^X$&a5|5TR6;W5GB54?Xn^KIK9?YE6vzrGt!9E6I6x2=q6$U5Ta$g= zH0^wvIyjJFKg7nipwj1*ANFlS*HI04tLzu1$}efRa2|*bA`KIhjOm~TQw{KXz(Q(} zr<5aSW&v`nq1S=to`W##_*%M zo<#SwYJkf@_P$jJ)D<|-pil@qiaJh_TMxCj_=l>OV?=ytgQw=3VCOU97D^t3Inl2+ zamQo!3(&&aS==-KM$A%C&qMLi!Pc%3#AB3qLu}EHflO>(s^g%xAgmiu11ZxV4El*N zzkYY2Xcz0u*gA2>>{7NXhIdC9-=SezqV0#H19Jc7u+oi8#pMxcaZkWrbYV`hTrcEJ zchItBw8kgAe-Iy2^hDkYrJS~MtG$@E1@DeJQ*{FoucLFaNRofLeia{}F zjSFgCg48Z&UM-<9joHj>1``t7(U;>g)~d~s=Hy@j<|R)g-AILOevn$d4oLK+ehP6% zY=e+?E&X$B*{0!^GI(={`9fJ5v@I=5jz0nK1QFeQ@j~2Y(Xd=zh|_+h#12#)4BDhI zxIaZnt=}hLgSgsh(!v?n5B=~LY$#g&8)@J`3CTz`^v-`2Mp5!P$j*aY(yCnDJ2a?e z($YPV;4&cDfe~yUxRHr?lk3K--vBS2O6rbUpV`H)B<&w&221<`T4zbs)p-u6ytyry^ppty)>CHS`V;I#zdaT z`*2vR`F=H83jvHu>bE0PVav|d860%7g-6y6un$TKr5|l|FvX6%ux=<_3|ayg>gPNN z4fGR&l(dlc3q)E|3gm@v5h$-_{6fF2UeI!bzdXj--DU8Cq&i^*HA$~zi`Y3Kn73~9 zc2YzOF=Y55K5}^@Cl}Z)IRlI&!P&=pP14cT6|Q7#N9+U4ei_1cBelFW%(+^|-841R zI#QsOu?(jy|Fv*)qU}Q2h`}mbLUZVl3vIw=`uRI1oUan@lV)F3N*e8r@|`0AG)BVc z>Z@JRC)yoI3#8_F6fytAM#a^278Mt2nvFf9gV$=BPDh*_(XuSBj*oiUscU94ezyU~ zYt|yG>ROp>uep(`lEtIFU9|_=NbLh5!3FP!Ir23!cH(8vi*p7Y@uT>14De3bJn9At@D7GzhA>CzY znAPf9(_n8k)eZRsbmUGi@ZxW=CfV8hhT1-Sd9%gkj0fIULgqg~PSd^8S{h9})9Y+0 z22;XPb#-pk_Te7uh65&5ng+aoE|f{Ub4OFLbe*WTSQtG|V6aurOj{tbhG2>L@?cS@ zgN!0U!)!;Yvm~(de0ewIvyak#Wg`hxXN+JBy1X08xqo&&SP>8t<(k7qFVrKy+V=2z zN+M#DvmJS}V`!tU?@@r$W!HNB9X-jPIF zW~Jg3mK#D(;GTFn<9b0fh!Wf=Df?<4s138n>fy~{3ckfhej~%|WGV(%sxPI(ORFnN zDueWY)nV!&7w)jxvBvH|5!>6Y5ajiloWaa_!xsvL{H3^j@j*_Cp6_}#BsB2Mts~-ZU$r*^>P^>>REpyfq?e(6^ZP5OKNCh7dT5l0il1&Osqd5U_ zFDTxQLn*LofD0zpCcTgi3Mp*}P__SHt3F6c3ptXZT}&NBhx<#}9qBnpYvH=A5r}a_ z>IF=~O(!NnZlbLBP>88Qs0ZTiD5YkCC6!}@!SukOQg@Ut4%Ijda;@GI<(e~S-6a84 zOGi2tw1GCTJ~ycx?UR)op-<2g*B;kOw&tFmj06t8k;-#s_Um%PRvV(mG(>kq^I0%lkzGBCggBV)9T8^C6h$M2bpLUb*|ZY$&c+ZEt6D^CU@5$re!qpkIc zvXW@*g5;VyD~pU{Vq#&gGwx{0tv1GVGNQVLPq`QJOD!i!c02$&lzQC6__Xkye`_`D2|s+qB&y}ljvC^SP!(?Sq{3p)?8jUbi7fDQU^OF_G|jE-2mPT znNMF5Bu#@g;mt}YINEL?H-p(}M=DpJ`Q@zQdlA}=65D{5IUA|CA3$oVVFPX`G5z{d zXy?E~8GN#@>WS2R?mqDJd~|i!47}J)3ikQi={41}Wcuo&nCg?WDGXxwba+>;a&`$` zoefII$iantl+W~dU?%Bn?#1?5cWG|Ou#mK>nn@ZEd9WUc6Wg+0g{8v{js`{}FW~-5 zzz1Vb6wqk~GC4!&1uVEsT_DjP;N${YMw_rA^hCO5u;K@Y^|yf)Fuo0}Ae9^BWkVtw zO?W@YrV&nscSpI@keY2P^nyT~M=&J~Zw$(foF{@9-y_#;W#EiKUKhBbW|U`6aJ!ruL>d&Jnb>%TIh2IX9Gx72)lzhUixfycPmpkog>x z^9SSv0~l?Mu}h_4z`LXG?Ij+cfS23-{-(q{q*s(L2elV_*+O|E)*)Ti4a{g?7nyti z(oB8j1I`_|WT0-b1>XCYw&xZUSP#Ut1@OA6ob=$194ZIu5v{X5% zFVu?$I67)~fhgXd*{hu)dPTX)V&UJY8q5VU@H)SMH??JXKfp+t!g7XzI{1MK-9UXo z-_}U3d{aQyrhg#g9Na+E{JU*UPO^j01357>|5L6mFNo=M^6toBt~s7I;5m3Pqouq~ z79S`hKv&bD`f##T+|(EPaBf7JiFrchC5h;S87L~XXlf5yO2L(#$c+vs8hu+}Zc8^A zhF`=!kvBxO-fKUhPBP8fjcgU3tXIxzUhY;DYZU$RM#!zPb^jph!c^Cr*pgSL+$dMI zNK-(Hm$I_6`Zy8|?1h|*^DwN=jFPfJ0*p>C^ku-r_oq^1@H%jTEA|OkP4;rlpY4ut zYA~r;v{&kmEKQnd^YzjBwz2#0q5j0mV1=r5Gc3Zh3*UUpvU8|=VvqA$CPUyk|6{6yZ!-4VB6TVgJ# zMhEBjV7E3QcSoPLF%(<+ei~%8Txu1F#yyZj473isGL_fi=|ou|d+>5kf|9cLmlAd0 z7(~rD*rOO_)b^;ugH6QIpr+gabR%D~@OIiTEGL0jdUW8Gfn+kWZ5@<5ThtkZ{812H8A$Q8i>*@6V6N07o23!*Wdn{Y(hWlcob zk|`yay-M)j$S?K7AuX|99w4q^JdoR1eDh*DuTM~kHDEY28ka%dkDRPbY#VGy4ywlH zL>|n_ml-8#WzLV`_OVwE``t{hE6M5ATv_9aizi;vJA5HcFGKFy>%imfFOsVKQVjZ;; zWgjK9T4pv8``iNRS+GG-y(qgDq0vTYUrd*Q@m&M@J{I|}R6ycYwb0?3R8A12%rrmnkGdNKXRNIkN zOef*L=-|m1%{JpRI@~Dj);0|dN2a_?$G|yg0q=(5m|~4OF(uUwSa!((N0k9aaw&gL znyoUocsu}I1xnVl&4`UiIqhaUs^)|=JJ+0>!M(Y~FAcu?Ws%(#qzfk1^%k*S>l2yH z+|CP)5j4CxweGiLY3Kqsa!FU0V&>=UhY04W3MAbqb}|$)9jUopgD>qma;BySWm78t z)S7W~ir(_lhf+Vg5+lCZeZ{^%umeCy~6?}^f$T$r!i7U3TQAIQCsMdk(o z)4gX=gTx1$(|_NKgbskzC>QlA_~g~fWHs5diS zLZ8tnF@gj9bRIzEwlNY=?R+Tfh)?8bp55J~$V4>CW&ln>au=!FIzkeT9&-Ji+W2NGRy|8E4or6Hy34`h%?=~ z1wZg(lefhh$7%0#(lI$65fL$}}FH?L~|a^cyQW zGFj$pE2wktgjeE*ay61;(3EP{`xt9e02@dc8$}yh)#q#`TdzCH`kqoIQ*}sx)>FKI z5E7#H0I}|96a&91(_oHc@4qC^|8!^?$0ogi!4Qidc{?ihu)P#&FfeqzGIi0a7 z0r!p|Nk`t&(mY-$SA~eiaAa^6$8hY(#Qc&YlFb=DgqUyva+oYqB=n&#vs2jP99h7cM_Ax#Hz2kG=$ABuh;SJkxtOM^C27v_|@p~Rv( zRzzDi!&Oq}BGuMSiE2A@Xj(~mXJTM<1nP#eOi8YLL$eErQ)1EgKvRdKZti?SB^?hw z)SBMNi<&@WJ1YFC=dbS~?}l>I8oX`ftfF>G=CX`ysyt7Cq(M$PMA#7I_J%6z1!a%l zj*~Xc6ah3nF)NpV_!H$jC#BF@Wl)_Jfcdk$8}hj^Xl_)=E(m*@SR24X@rHa~!- zunvv;{M7eA@qL`dHgEQGzEuZ!ABc?_^f5>c;FD;IlYvkL=6CnTBwO7HeP?8P>SS^u zhibg;l&pCUB0`t%tW2*a6WD2V*B56sa|1%C(Rxts|AM!{5q7w^6&FlLhBtA=2TEP~ z+(hcjP08}6Sa;C4{wG(il(W8Hd-%-l7l@46T0n}O5;$O){*ERt-nbL_tYNHuPufxfsXm=E-N6F5TKPsXyZ-L90kDo zQz!b_NCPiv_>{g#50xPgX|h&EJPJqLmh&Q;w6Y%Uk*XS3T0Vq3f2MQC%gabiB*rR;OMJ+I1Lmu}9*DylDur zoN;Lt?~8h_tAIP$ z-pG2*DvJtC$xe91T{BW^QwIH|4p>~;c0}m6r#)Dj`m_P<$~M;%_bhs@fvFx5TENP|OnBkwcNCkQ(-QYaq7QMz(;baB~ke<<7hasUFR4+4AKJ zMfOq3(ny^z5^Cc4! zYvDkWe2{SzNFqK(qg2l{y1TE)kwWC)6l#jkWtbOoQ8K(!v~07Aq^aFD1h=19cvI}z z(8nvQHs9R$M4gw1TMU6zlXFXA2bTf%Fp*%f*o4%>~YU%PbEaZ)A`9oa(|Xl-KYIytHDd?E8J9Hj&R-W;ArfvKTlV{6v1~Jzdar%p*59 zSGYBItjATLemT6BS$etiBzT!aC}~I4*TC$^O}V(7A#Z!wy$|05fo?=wTKs)#xBC z8UIP%9gQ(&@jbi=cq3PD%1b3uoXp{MTuoqGNZXa_r=D95>jSt8LlS+t8dOY$(gq$fexVCtU~uw&Cueo?bj>U2I&p9;Tzb^t&|j(ZwI9syhIMEH?k4u!bW)O0Q8Cwzr~f5>hN%(?EN7X zY*Pv$yV5*-%qzw4wuqcNnM%L(#hdVE!vVYuLsA`@Z=^2@q7Ty@$hTdIL(a7c2hsuX z0Q6Ku_K|{}9#XhiC#glOg+HH;RNQD7*(s!|dCA3UWMv)v^DD zy!#Rwqg9G4`yNP!wh8Z!Tyl%LQ?yz8R(;wncgFOgsXbHrb6fti zZePgzR=CTf4iG<_)bO7+{hBm#&H?Y)~$N{_uGVX8I zCU1WX-hml~;k}Vx8iSIyMl`*V@Rs-lHNQ5kv>O(QQ(`)eC|xUH$U@ZK?C70R_}gLp zJL7fIj9FiZpad!A@@ds`o~*po*@0Ru(jqqNG~|J<%9l4Xn>l#|ZMnmV7lK>32Xfh@ zaw0e82h0v(B;CkVvR;OoRA_l^=J2*#{@PH^SSbg6qmuy*dB@&7QI;Q+J4Nl^`t$;;?%5@Qz{0b4oNq#J<`;MF$P9RpJbFVTNiTf z=XZ_t=})A}SWAQT0#!SO?scs#tTri+QotGujGRF_Q=s;Aa_$Wis+tM|g*vGExbrV^ z<3Pcy?@D<)+}+6j3*sgRcqt}BCd!Sq*^#?fr8Q^#Fx26H8U1e5PB|K>f;{1DSKol= zm=WSp!z#;&Gx)!%ON_~krk)dTn%}8&O#Lcm&)&o5+rfNwAfx-z5{;n3^c=LivTh)2 z&QPZ0s;NoAxC7Tlb+f0l8O;{A1`gCR#=T4q-L@mEAzGwf$o7$iTxqd6;AHBfnr zn84X+8`&r)N}4C4pwI@iIe0oN>F02Q)Ns1Oxj?QpQ08=h zC{hzG0OKe_J&-+}Qq>_;QZ{&j>s)Loe3!LL&vCP*E%OQf*yE{DR@F!yBBPoqbo@V% zJ_odw|2(w|))%BZ7!e7IW<`clk}DsJfSOCD?Q|Qe4qpFN9UNf8YX``1J73cNbq+vv z#lSk&U@PH7zH<-F$w9`FxnI+uGrR}VE+Qv8*G$z&gK{&0d?Iq{kq2n2Z5gc*(>yGP z9qFJdcUppX$AQ(!`eU|wqqvpOR!=m%Db;aOGqxdyA80<$(N@D_TER7W*oPa%&6Icg z!WcPsc|?bl_ChTO?s2g_pdpGY3A^}4?Q!+-YyefzaL@~Ru$8RTwSejrQJi9UB8$E~ zaM=!>ZCKmOFJL2cjZfuh15q~XJK(m*w(|nt)|M00Y&okpRuY56jbCcFP@Asrg*~Mv zCP$hTI}y70e#oVY;I;c?H2Fcv6gAZ#V>{}wA{N;P2W}v6N4fKlOlQ57?gEGJk;-zYeTZ`c?e4Ixxvv zIXkj1LL=7Ff^y^l6AZPWE~MVx_h5Cj&wyKb`pZ&x)Oy78Yqs2!sMusW6VeMM&W=$YHZ)WfARTAmhuqts9h#IwLg_IPEZV03wBm zPm!fS7aFjf4@Vz9?YNx7KR2?Mf*2oBfnM9vPNeaLT!n-e$GW^+M;^KL42-KNw@61t z^`?e>=}>HwMedH8wckw4Blkmh4PFChSg##9kdq3HD!fi66dTqZ*fk+7ZM_gejG9Q@ zQO09vOhF?xSN9NXra8&m8}t`)E(?vuRNl%>80eC_kUlHC7~pDK$dU|V_35ECm%NW2 z?Jf(BDpIS#$A+@f*e@fMy9mvxfhoj#GvNanNrtvYoQ(8fCLiz~sAcOFc#-Q_PQOJ_ zcn_qz3$0OlsO`~thT(}aqPM&Bz_Y13^0FZ1YUhc(iCS9AORq~*V-GT)3wb{X2;nVT zjifmBo0DJ{${}UZ7-nyGiX=K3b*5JbwX+@_7||-RTsz}JTzU1QE|dT;h{=9+&>sP} zbmJf2Naq!_I`ER)N&Jm0v0tr;HRiQv*<_<_#0+3+qEP;e0!HS<t$m?vUjo&T z;@CO{f~)L~;@U!E=&W4t9%S*+!^*9$H(A0~!3wfbTqsqL z47tWzPJ81EIi;W?yTk{z!wNy)Z}MI!>R|um?KTC}Ya!D#)O7>2KR9)vn=4Onf%Q~i zZB;E~v=mw`5@}AebVBq(WW*ZCz8#28i%ljP?8vJIBX$bbt;Mj?HIcf5_NShDhv<1p zQ*r+KLX@l9o8mA+bVC5xO%hLJ+2zhfXyiF%5R(mVaUG~)hEe;&wnU0qq3$EOP(sb1 zP8nRzFE4(vNp8puqAJ&Mlw$Yfp$gFtgF;;hgDr3D5!4icu8^!7aK+k9lbHpOW=l&G zpavVteb8=I9;q2~!O7SLFj(s5ft@xOYZi3yyij!qw}*tIv(rG`f6EMhak<>?29IKNCG zEabwWuT5n5HqpZLmjk4O&axMrEujzH_!lzHTkWEOZ-$ARG0-EMf2xnKbA?xfD{E}V z4s>TA(TdAy;0@g~7-ScfKyCCo_>EKAL;|c@V_@&LDUk+-E z^s4D9kPc)rvOYl$8K6P;ps`(AZxGd~a99syUG#N+ZsXC7$W4{KkW(kB6Yqj5lbW3ReA^qf ztBxB9ZyO2^lZMwB>bg|_9x!$wg~gySx0sp~B;K4gH*&E-p$2(Bov6MMRD61I+suKYu0udoAZ=K^s#O&>#M>O9 zb!4VCkteU_F=EoJ(RK1Id$m#iLVoEHBWY7-F53zT z&`R9V50!=&*>Z-+f9Xnbrv15~yDCO9|`EEyT;Kuf< z0g0(?-O0ZfieYU3Yj;G@l%GxEg(Bp#_ftohZ#Zc?X3~wBAj?JNG)kco5Q+kCKq*OC z9;$X4?1697zfg*~QhW6T#r}i21-ywMy%58`G!jl9cY|DT%*>9wcxUmdpogKvh~rrE5AK;1PF}K2S@n z0d`n%6JgD%#WzZl?&Gi6R$4Ybt3nb5sUDLL#Vl60dWj8VLEKTTrjx9Qbx|WKq#{7p zsApIC(yfjn8h3d+j_5v0-BEMxdvM|PTnyhD3WnEnf;aLedC=FI=9?VYFfzO+%7<+3 ziddsZ3NlO%>xNt{mbSc5*CxT^1m4IJGhisq1>H!(DHGT8a}D@`@EAp?SKi4gkGiPC zg_PrRy1Yy&!uwH+Vn9dghMXV6n;mPB)T(eWLF@)nUgoa~RE+zC<=haL7+LOaBb|(; z5VEgKsT*SE1aF6Ph&4YvIv=qYif*xCnu^gN*sH0c!4r9n5>n?pCPiJdo-I^C>bDS` zMAQ)q6>7!4yUOrFWu+xm1qOFNUA3@~AG&xSu~Q44w)o=K2p3ZoyCKI1Xf8k}ry4x( zpP0tDA%;9@qX9{JSxIC*et!@{l916HWweU&rM7mYx2eF@8+{N-tiwv|=RzuG6-vWq zqySi65O&PlK?u}M`SiOOifZD$aQC+ z)In3{%@>i&+Q{#k`xlxo5r^DHIgw;&=Z&Jm%tl~kx+g2GM%Ep1tD&?NuXi&y*lCx% zJAz5tS`6{2Q!!l|UQoMKQF*aE(bi?Quwv(k67R@bK}<^wD)R?04+tlQe4%{V?&gw6 zWjnUr3i1zrUs1QURyLE|f3Z#=LE}Dljbh zZTIB3r}BZS!fKA3Ry3!cPgmPXw8$8bw7PasYv1*0PSDQ7Bdcw=9$w)~T{1JaqYiQ2 zIWZYaMhzRv+u;#pHpiiGCsi|6gKFSV>W18EZ<-B1var(`leQ+nYz}Cf{=zg?YDb?u zhK$r5brdtIQEh1g2;xnFRKta$J9Z|tSVbCRTLOBZ!3O?n7jc9;#h?#zZW-)kH$dWm znv2-v7?-A~717k}h*s}Jb6F201lA<%hzgU2K~A>*OftAR>UyE{saitkBrSqgk;=n6 z6*kCy@5$Iyn884?Hzv5&wvb=yCQ54*khRM84yTk*4^&?_kD4k;=PGhjy9cU|?;=q2 z)$xMYX8@GDAr78oZobOFv)7gjEg#+k(VC$-P(?2NK!|C8^#aLfg>*7Nl5RsW0MLwW zXnZEGiHOkLxC}3af>cn{yHMn?OjBOQM&-6Q7}|Ltda~Me&h6rOma{xHgWQP~EkutD zZ^izgBMEEr57cnawa+)pH}Iz6ZXl-vpwwd~$;6}Ru_pig?Q=^6pVlan9UWlYQ8^o; zT&P)`Q;ksRm454tEGUwSRs?SPZ64@=RX5G84Gm}xVx&RLc(qVNWT8~f`JDt9rr?_i z12pm`Zl`%7_S`f!*NdmzgX19XC504+V7JHTrt@gL-RiYh|m&skIrrRv>*Fe~uR z!YCMft<|FF*gGwEEUQljzEH=gu9H%%9j4d$iVb~XyG^CNjl59Nrow;b>_W+B-MhX4 zBo#&FMbQ`XAeyueXlxL~*qRR43B!9MzszInl*;0Dr2<}$AVJ-c(^_eE4kcwTGS#Ua zd7(!3ow260KiXaSSJo$B{*Xq|h%DRu+5@%E8(>Er#)S0e!X$S}jy}=#M(XB9V|A@} z2WF%J&*7v4H9Y^lF#>prMZh~Jsc#h3+lpNGPQHH5xAYfN-H^A0Sr1tBl$Xa&Q)lV) z2b#zsRTa7JsgW03PBlCMTcdPOyot1&G-$9l?8v&InaY2uLG&9pjBis$pYg+runvgn zyA2Aeqw0M^FXSFClVqHYSa+uebLR+6^Fn^ z2WR-Mvhg3GEVx+Cs4=0jhih`PU>zk=J>chp%4c`s*sS#JAKYWf@~%B2i^ zp}A#HC&<{gWw0Ul@{%C8$c@7jSNyio(pUC@BFt=MhVvTn$8$|%>{ z#Gz`Qz%E`Lh{3#*9q0R~;NTu!;{ioV3Q`U=PaJ^}wY++q#v|gic@pqODkf@U#7l9) zB`^90mA8ocg|r+@*HGtES$CwVhWC3m$3UeoMr<6{9qC)CJOg*s_0_MN_eOE74P_Fd z>EMP3YKnBv-i;cGvO3CDAGO#-N9 z>$lR~3>XRH-FentT<>;A8eV8rN;1!O>Y$WUGwUvlj>q%8opi4ei%D zqu^dhaf)dNctTK&Kqq})$rKwMA|o3j%%F0b|MJ?|z|^0-JHiY>yLKvO!4ynx;RPva zAq^mMR@}ijhE$y!cz2W}y<4Oz*!#H@n;koZ4r93q?V$U4=LLfpsZI+Z(lXxk{GAhO%Dqrhv8>g8=8zsnGUubij!;w@ zjWn^XtQAm(7%}BCVnH3`c`nhC>vK0?gDmhK$hbHc)vq35FcV1C$od3sB!c7s-Po)K=;Ot;9x55o&bR z_YWx57iw9#cZ*!I57H1Hm%gOaaW zM+YBwlNTE)?~XWoB5me|ZE1F4Ih$m`mus#R56)19wl^70ivrCGONT+JpgC27qa31Z zx)3+u0Y+^P^%JQc`U}qF6y&Io)85P+#(Y!y;dMO#s`rN>c1H%79YCf8JbDJ6Isc9P zP>&T-=T^+1YJVH&JbQsasE)(4;TqzCTgJ>`*m%;Hq$=Tv$dh2-x1EkP@`t9UPhH+8Ds}QFsqjtE2-Txnl=^H=Z>Xav_7o$XRo88xoL)gjiokdLUg| z%m5S6h}E?Ldz=E+1@c|TnrkBDm1uBgODyerLtX(S4eJ`IT=o_-*_!_6vEnzjC@hL8_^lq<{U2(tN=*u6i<6Q$kA0vt~DNDC8}( z-qDR-&cDGEhT9QMfY(;gH9}Etpn10&K*WL+eG5uCvGKjF$BiTZ^TJZkev^kRK)p~q z)LhlThH3VH!y6wr$S((ZQ31&NM^K3fu2}=)#=TIsV1#BL^UI_DtFNO7V^DR9$0^DG*O4)1RY1;~b`3@apC6iZk1$3X_= z)1{!gn^KI~J&?2OG(7Ac8I{_JwD+yQP=cK3kjOIB2L>e`B-IaTA)_r)*_B5Gj{|8K zW|Rj~6Jis2A!-|1Px?!BIR?z=R}^ZIK?P|s;!r(f4fe^gH>z9?LYh(b6dF?Js11em zMs#v%sZ*)cyO`O=hVlk9)*G7RapdMIF)`)9E=Ssbs6oFNF+{ZN@apS}nYY7xBfrE) zf%GF2GT<-zintlykvE`9i}5hgA35(wH5EuK@U{!UyeUM1;ktl5DG2M19IK=;tDQPb zDz2`;%U#W-4hqP?%NyRbRa2qaQQg@e26WSXKu%E&XnDjbg=WWq)BCVqC^v_h5620q zm_HNwPT4(CXl(}u)5?ptAg_f7?}4I&+rD@U2x`hbP4fVGYlZ@e3lFF7Q6V+2&%IEN zFIxgA;0zC=Oc0Dpq(ofrZcL2Vcn;v|lAQRE`I0*>8&0F|y2k{AYj6$3N;Fj=T1DdM z0d|jGs88hCHfdSKg6eL2u)C#R=%d;?*G%!bi(lR(x&Z>uYFB05U6p+KAwqZbiO#UP z5D}qXBqYW$g7-$&!KYT;$gLw1_{))nkT7QBjg00HXvWZ%clNusUAW%>>i?(fToUXE zb!^-BDDDt!XQn^nsm^QEoqzYOwYP`}2v^5GJ0(DX5JG&yYgVLmsV;H>5=^Iy35QAD zklSd|u#eFTzoD753>8jqZb+YiAik^;=cugTH8_yQjtRINuy(t0TU6Cbf#Wl z`aUsNiF`hclqhV0*({LXRhp{^<2!IpfrET|*mT?}O7U};G~X%a`yVqJ7&4^%gL@9I zZgY5b&&4cIrC!KN{;e|h_61*Dom1nQ#~0FTaNwi``h{+=ixpT2PGtZT`68w?7D$Ky z)c^$;WqBhP&d|`E@cJn@FqKe(ZbS+Yw()h($fRN%Trs7wKB+r$swWp5?rDUuDxPid z1Zi1canwcUgUnSdsVMDUa$sLG(*($|n&e)NG8#QaXAkkAWLYc6-1hNbC)=_*W zpp>t16{GAB57c4thX_`AQ%V_ohNo#d3a=bdNVft*d;HF&cK64p3(43EPqGiFH*baX+`u@=w5Q23*Uo6Nk~kZor_1IxBEh<-f@NZK(1La#&yl0 z(#n>@xRa*livhKFj;Oi{X3hoG+?=&uldzC434AeS{gOF1a#xL0> zK4Q}LnX!`#g|pwaqdQ&gGUK`GJCT+U+6Pvmo!glt6Foh4q4eMFOta#qCd?#$h1SKT z(2WjoL;DA^`TRmHot-VG@_x};@a`zfeN| z&G$NQn@*%$x)k0W-QuShK73^~#K&V(ojCP;_7ziQF}nCSve)=vY(-?_K(z-qC7fDQq$(g5MNAmsh3rjf`RFH9 z?JU^%`5R%sr8UR}udb9|zwM^@g=~Aj6$WkI+r^q%HJk_r1x=_uMeZpf1?(B_#dgmafJ)ikFYnKBoirU`=e@xho4sT+Eq%5kAZlS=sGfXn90J5O z2f4-J)>Ow6C< z-H=b}NL#F~b%5+@CfkLQkl=~5u2+L5@*&gWXF`X5{&OLzQopgGTfVHLv3GvYmL;&1;X`*;9z}B0SnO5{h7V1ZM zVeK;^V%K8gh_s__Qu@_}G&PSb*%A4mC7Tuwx*IWNik8dYiw+s?d?Eo4Tw75# z8yxvyc-}}$_~@3zdFU1$GwTxBL9J)TQDzH>UXCZJF6Du2%VgU}6KzfBZg|n5fDVWB zLe-!vBs%4SF#5R>Q=wKtsbk*|i0_*`*{=IW|9Rgm?Pd2J;AdN>2jC!TU&zuW|%iJwd-B1E8&KGz9{+5%EmLu z;zrwcCB0keZy;5-g4A<)%hu^}YwxAeKG_7_wyheYy<|h4nzuC>~qs`qI}G$;ZuOS$AYSW^EqR z_ReHl>=+kd&p`a9h7vDiH}S{Ci$r=4NtHx z(=GTCsuj@S>I)f6bz{jp3Jf*QW{KUHdm(!Tl3FCuqtakMw(~}wL6(-@hPQi`er!hG z9hncC?JNb8uP=X!Bf$l}k^I^9?U1C&3zDeMr8@0Chu&1S20FKJwC`wMIWwxDy%NvMybuLdBf`tCjNZ zs2$pG6F}`&x7SFYAnK;|Z68Gf9Z|Z_wk6pHF0Bot8)A6IKEs8HB__pUMciGa^vaFw zPEk4=Uiw3?n!P(y?nwVq4N%=6E-1LlO!HhQi%^EL6R}I64<*73=*fVciJvGm2WVY? zioxu=YzE^uy^xL{BpRx$C@#5@K+a^dfO7|=xB$d&7G@?t0QX9r~iI?eEUM$X|h>0OQzlfv({4Pw;T2dhA-O2(z&qP z(^d;4kt-*1XWWG|H*UeH{RW(W%%i>zO|IV!ru`_~7jhp+XVpe+rdb#P^=s)@Czl(! zngC4@^g{z!m4J0ew+bSv0Ww;jz#gtWgUQ3eLcYOZnB)SXm?@-I(mhAYl$Bb(kh2iE zb}T`4Gk?OyL7{3@O-aW=!@xwMoUj91PpEpB7rLc&JaO#Ch9}rZhax?PXKXU@8)#n) zyQecf#S#e#-F+k7jZB!cCEi|Iyy^>SHDgjYl;-p4tq4Rk)QXB>H8y&qIDpXVR?=Gz z1dCxzpU4Af(s*Jujp9T6V%&Im57aK~n|M-Fs3#>(z@Z7Hn{^3eTZ?Q27VSHcpW%>( z8A;7@?VhxZ1{=YHp%0YC)$1#-#tSMFxx5?7WnyX5V&LQihWF}FgnyunX_OUH_eEro zxi!k_Cr!Z~zM`t2Z#T*d*U)M^h#F(9LuHu15IStW?M0}`mW8E*-~vf!pvlN(YKnTY zoDrjUupWp>MjBpB`cNm?Qgj`awq*{wYxY0?`M`8w34U^{kw5>pScpP~*5BX!jn^hY z11Y2>fZol1p$`U_v~(y`UwAPohOFq@1K}Bqm=c>W)fS^D=DVX?RCrM%qK`j0r--#j zbg(IXxa9avyGp>1Xfpg+F(u1*p>HBmL+d9l!QL^Dmm=N>A4D29Ao&_$5&sS=o0>Pk zv?wT*sswoC5j?DacEq5aN`*I^-g`EAo zG1r%uIVn`S2+k{Rs~55ym(xe+Xp z7=@4p)*G=zhSo2eLG^J;u#c&1$XXgZv=h+$zdHY_CXhP;9-EfWb;4`YJ;R_BHy z5lt+OW@^4s1m_X6eFDE}C?}bPlenU4p+f$cb@t2l93 zcQ9Ika~%oNCbS>cid=U@&~o)=>y@Up2Vr%b@b7?hg5T3CBbp7-13GeEC{2egkrtB& z)yZx!$gNJZ&G@=CCb{}S6lfkR`>#29QZ+d3ydzD6td+;-1%V!Mu*4m4Mo(I%1*teB zVur#C`Kk~d)USsqL8bL;!bQnxP(@&>t?&`Z@6E`$fxB98a=eB);U^I|95e=G%nvVD^A59BZ{1?(HvJI7GThfL%*4~^pgx#>#|ORlGm&-~WiQP+;StMLs??$a~iy z7cBoHHD5FUvuS(+tO1-kvL7M~3b7vpF&MZ|X~`8@bN$Ie$d@G1ba)TMWae{+4ho69 zz?s(%BY}hBfzU}2&R==izysnpn{We|YDp|k%Bf%S5a5Y41k#vn+60zD#UiVRlrG?R zIssn)38!{RjIJWUf$mO-vbs+AfS3O=eux7Jv8L!Q8gT=^$ReT&N$D-6P|1MfJRAB& z!%E{WTuVU*#Q0-oyQ5oz@LIL-x>$hw6BCnim`k2Wnvqv&csfZ-lM79uzxf1c9i%=x zDlyg6i{W?p`ukBjITEMTKCzC&c4dH0d!d&SD>{b_1TC+}nZ-^$1_8+6L_W|Zt=6TH z)0FbdoQ$IunbNcKqG*>n(amB4$8U5?`#-i81`Zy#=C^8|L3g4=Ni!q!_1HA5hHdF4!uQ&AME$lLlAunl=3_?*o7&m#t=y2`hb4$btW zhi+pIjIYVvPCJmQ0j%M^9$$uf1o6;EIL{L365t$fpC-|xP^4M#lQ=Ig3$^c{PVBL|I*`-BOsHyMb zSc?0#CvqcSS{CHCicXxovR=UUa@}OE4C%D>14A_^lXQecwth%^X+apMxZeM@n%=$? zGYh_u5h!Vmm0r9#(Dg#B;NW%DkYYR)D0Z8PFv^Z9!yFVNC(W3)v@);(_CPM_Q4JKi z;#Z59ITiN_3<<$G$Mw9g8Y<0cJ#Q3wv|==1W7V9zDX%&T?~Z&{L0-GtoP2&y>=x*W z^nj(c3#}Pr1DTA6o(NCddip?5YNkglX57GgAUy+GA)!Es$RZrp3n`vQo1pnDL$h5| z9$`1A8|tvj=bs{f8rm%*Pd^hjfT&KamN2 zpfa?{_JQSX%WHyzWL0sgm+RB`Et$`R4qs+Q8u5knFJv70hl*O; z8eU$V5o=DRZpdSD(#RmZ8dNbyKH$BPDSc~D8biGKs@9Z4R4k=Fk>f&|JGSQJvnF62 z)i6S@3_b4yJVy=6B5`##@xC zcHYPa1+C_eNMaOlM7oi#fhcE}tt#S!$wJ-@J!FVXSxK{(jxmW$T0_!icb~}rh0Mt- zw9;xtz;+c_+xkMPfIG7p?^4lUFhe=K8`2g)%T$_jQlA`_vD6LWfwKQgR3qYhM35H# zPD7LMK=s0%lFQqkLN8=pK;8JN&dt8IMIs)#YIaZLO~RC~jO=HvGT1=a4k?}v`p$?O$NLU&ll2(gf_x^p+d+gm6fA14@9Sl zurw8^jpD+LE;3*ubtOwGKw5DUcy<{(D@|5>NN!c;)8QZ1x*G z4CYP^n3J6nt=s~hR50bJivE)*`nm%RpCrRI=Ax33i}Uu0bSI=CMR|1(z${?oy^zZK z5VgFjGKb?C4N-J0IM_qBaPP>CH)$M5Pg?iq!MW1J7T%5wK2?VBezoErXdvGkDU+8N zM@#@Ly`^Uh>hc&e37BNDky1HUJt-*$Qc0|wFxhu zhY$9?Ix<`+5>?*#Gf1yfOiE@UIG<>1h2)xbjz_ZQV2vLDC#`dhX?LVSg+`M%Z3LXd zDLRX$%NY+Bz8~buY*tR)YjNu7@#6<_%~%QGMH?J=Tv){LL?hkW1OKXxJdkrSNB7o7 zv5(P$v!Y}F`9f-0IQ3~$ir;vUGiv?-);Z4Nv2-;H={2Quv9y zT}_vHBa0?sQEN1rTOSy&4e7(DLpdK9R@Ta{aDf`=7fLQZBS5Y!?76`T>km&(2AOan zjCit1r;t%|#Wyq84Ro0E**Z-RM1wQP$~y2LC?skVR@XDK(ktFzyZ{x}8D7_1Qsp$B zOV&4PfnH%uWBI%hY5gh?ydZNL^xFvwgo_kjFX4$%6nJ+OR}+(!7$#I>IzYa>_yneV zbS=56AOHE_0bPa^Jq=WAz|L1EQq6v{VTQIRDbXn*9w4kcV5*c5+lwDC`3x)hY$_ui*fN^$b)LqtRj;V zV;|&}_8VdAp;bd+Ep&5D)(a_`0Rb~bwq$EOM9k2KdLRr3G_L`d*L_cLI5~H?em|-o zK5wK+W2n-T9_(zHc;+wklg!~|%Qs1Nl!eY=495*Q?@Q~d0X4@ah@Bmu$Z8s%hGwiP z`Fbx?th)(aExnk+9 z6fek;(yNI@-W$WP3*rw3QjBeduo5?f0h2bFetdoddG5?inRyp-dI+cC;x<8uu48S1 zC-A{((m_H?(~=Qgd-z7!MtKv^gKE*@f4yhL%RGv-Je ziKc-Gr~vZ&ST75|lvXTUuzy`{|Ojd8iJAl%%10gl)emD1!1AOG<1q`tx=7n6@Qc7(GR6~o%#AuWELNWMyf~axgKT>ZDq9u}Y8vm|adrH@p zeG61)S$v>xG@4Yu|3dC>g60b=G(?l;3GO$-b#>Qlx+;6K;7YG?ynxF;LCgrkTXFtl zJX@6uDV-k#mNxT>FRvzP`t(5R6)6%kP13ZrPdFDT-XOovB4UZ%esS!%?-L0&pbySI zMZ6#K$>uQ_Pk2LVyfiEc+Rnyd$aC~>M~)u*V9NJcc<_w0)G}Woqf4&-B3tys)uMKK zMn2UOVoZ=n#VShIq9h#B!`H1q8XR_joM~Y_kfeE-6ry7X)-`k#Zh(7>fDznB`hgyy zvpII8_8{8oJU{Oz=Bv(@f1$lr({}V7(LL0<_AM!WOxcth;8iI&y@H&SnccuNw*ooW zUC4bd(Dh`kMgXFd8!EOy`qiMW;q%P3PqoSxQqy7mJadMX>UxP#i>>YMTaAj499W|vZ$dr=BIHfSl$g3^| zWdgOksAa7yg}N36qnwJcp@+1U-WiEdGbidJy$c+%z7TcWk?js`94?O%3u$AE*^$SJ zq1CuTwc))`QQi$XiA!VDRwSJ+Fg>XVIzczO#2sEcn5Z9vwc@+=4%S$Zc0=5YH>Y{M zSea-hc=2$Qe@8Yju_u}^GU>61D-+0^1|`l7syn4ZG+!sT7rNz5zC2=MPM-0J{69Uc z07e^0yQ6F;(h|hOlGg85$g8!3*TDRZ^bV+N)tQHRR8lZz7~TVE(kcUsJ-jQfO@a-# zMkbH-iwSj*_CQYh4N*m=g!15Z*uu+$Y^EH9?ut6G`&dxY`nZ)cZO9i!;58)Qb|L^G zru*e}59&e*&WbX~Db-1oayqOYsC5gi&)|3fDZCyxXRXa5?ds+ea3;u6=*2DHRR zW>~Ua$XtFpEudLgr1I+ih*>^&d3U4lZu&zr;A2j{O)jRK18vfhuX{m}$z?jyb5~iD z>gAaMHrWEn)q^-mX-u`1A=w7Jh#%5$>bHnFtPAUnEFv*YiioQN=3^}7CH(M0I;9qw zda`?|O9f_#@9d`cFYI|xY2xuvV=Prz9=E9poKr*BgyS7Id|B6uR74K`PXc6fa& zRLmR*FDT75sJ(3!D;msBVtI-`flS7NGBPUN2ppJa8=m}DWTLHw08Mw*S;G7uu z57sB5Q#vaDX6m9fvF;fGMw)_B$U-w(k}rCovx5kjS$KDJ>x>~IhY4-XUPBxa)Y z+1ZopOyS-q`VaPW0~s)ii)^ulba<>@+6Xh+G3p!plzAY%XPRc!v|YjZ0mZw3>D&;8 zb2eoh#?@T(QRsv7MBwqCyFLhJ1)8(zrDJ}Pa(&DUD% zUqt2JsBJL!=s0Sv8;t`crG%k1jyvBAFc;PA`?M-`RfU@6?VwIgeixs#pF-)0D(t%d4M7 zyW6y++)*8qc@u~`0hQgyj^VwL;cxe!$p`t9Z3ni>ChgKZK#uyNm5i)#`hgS@YD%T@ zy}%pg&^4LXvhW_J+lBTuP4GgsSS$*XZFW?nPYup@Vo=xEx~duS(`w;0tZSjoc1Ok+ zp*hwWoWyTEv;t1hcmo}J-4AgqD107bBh`WGK6S#D+IIHSWiMouI_0Hri9Oe)`$J#D z>xC{QFVgE1G38M&cCxDOUiNt*$AJ09nT6`TYSY@cLCL8oS8||{B>56;2x~;xKzwaG zH;)Ceg*^s|aYn8?`rB5Yhl;bcABifh;REG!2tji~#6;5gl|ZGzL^{aXl-Q6lY-m60 zs8AQ3B`^;^S+fh7(tE|yR?R+VG9W|=^*~P8SRW&^*&|Rwakf5kw(UY5@D42w5PJef zC!sR=lkbjLYIxCu^KYq|x+zMZZNOK4Lt3i9kP)NuWcqO-h2ygnq48gH75OTIw8wAX zSqLRQ0qX6{sVPjQK#I1ILjfDbf8@yyHQFJj4PPkc30gah9qIHRNga(B$Y4}SDFfwC zuAK~>>EPTzE+t?E>Fsdh%qyLzcVJC~;;2IAF=M zTYqXudWsKg%eo`4F~}Q5(L)Jqj_w4d*|5qa^p+*8e)fo#((8zDf8EDDQHPFKsA1L4 zL{?frx8O$7+`m@ZMdq`RMioTwR#Zov>lJAY|2j8fKm(L_r2KPq9^&w6~!)wHb zS6d!{|QKYXCYseky_pX`zFzrVdpKwjEDxoWhaJ$`p-)lZA3Q(C-P+C@*q zH`BELz3dJ(XOI*6H8ZCd7?H?n!Gc?LMV z9+fDLvx`b85sI<7zT|6!%#&??R1;4asOQO&frmP6g?KxWGulbToD|uH`18{ z;p3;GZXkod7*P@TiM&E9ji7ED#p#!FG^W&hM`Q@idkx|J*%r&!9Ec)b$QJW42zYx< zNUV9KU0k=F=abgpT5z!&UBm?G`Sp#?21NWQKufD8;v*$`vLW0?Ikb!4EG z;Kl5`P@?@6VQNY%5j>zXqbppt?lIG}l2@;#VhhO0$NfOl_FnN7QGIDU!X=dUnFESO z=!0`X=7k(EN*e=BPHi*;Y36&Ow0-M6#};TZ`+^0quFne@<${JDwWbazWa6_O@Fu1d zWXd?~Z3Qk`kqEQSNgG^9ZfNCHaG)`R6D5!cYhu+>4Q%Pwpw%y=_|O=&DaMoQ;OG~; z8v7gR!sxr$+~kyF*I;Mb6D8Mt6A}GWnFC$B%+*XU+fbAQb;{sQ^c1U`L0GsAnj3{5OvVo&fUHIoT4;@4m zAy^_hv({w?h7J2Lm-g#h) zE%))A^!QHX&aIBix&Yzco#K-%A^r``m1rZ*h)WpXK?X1FwxQe$=oH_#i=i6SS0p{@ z7jjXK7e|LD-&|sX*Eh-FwX1`Y()%VL`eAqjY3;CXU>Y}ul8ujgohSgDb=UGt9>=Mf zEX}i~nmMYjtmhPkdi>5d0IPCzu`Svx^LiAm zPn3*wgN!$ex<+HS$b~&vqx(Xsg!5gpb<;MiMBPxV3z@K#HWNryVGYqf-BH{UXrqCc za;3|WQW9#|FBI1rl<|UaIxw95b6$TT7w3sD*r`gFYUTdLiE=y!UdB>*eGJ94)vFs> z%Q-&m0|w#!t~(7czPr>1atkv(sf!3NJDhsrthsuv^hO!&t*Fn5g*Wdf!0SNN7GQU8 zq~Qi(;#e!ObKHEjfG_klR<#3>{bB6}77>}?-4P#cl9X1!R%srA=p~#xaz|WR*MCr* zMX}wP@-LulNyl_>*-j0+IQ9D2k%jB0a5>r@Qm}`19;ui7gd=y>&%PYU#bZMM8eyCG>j*c4jURN^=Xsq6{N)n}(|SU5ck19a6Y2(93w9)^Ys z4iB>`Y5&`ihr?50+8>^TBoNfG`$7g2pb=FJ@7#mP6>;w8Xt-@-Og3e;&vQaEWjpi? zY_$z{zuxQ&PQ$twk@y7lz51DLh(uM)PK#XRe+#(` z0%h)$T4gurZ~)H<^EbYIXL})}OAxSj=R_Xelcw*=|9KSv=mzVFycdRFn3x4WMywoY zI*~iruy}^J+1jL}ty}7@-i?ewiQ=jvUWCjMn-e%)$+$RmJizs4v;Q6BA3c%Fe|}^s z0vHnyumA3#3e#K65dZoLgQY}bP|}G|7^5c8VmHOE{Aew^>qMUTgT^7TQQD@BTZqzb z$nR0f%V0%XRt2?=o+jOpO6y}j@OnKXyxwIBj)Vttm_B&Z2EWxg+;wZYej8(?U6=*Q zljZ3sx1QCB=9*M*Y-UKOy}CyC>n0XRK@4_dcMb!sJhlLo?wFJs4Xs`KBb*n|D*7FzXP&WB zmJ!w+&1J4y49siwJnsPnMK}!-+wYofvf)2O#ZXr%ebV5Ca&8T!Lo>tc2N+2kYs$s_ zR%M}8kqiT`{HF=LDoMTva*L6C@||F)K9mp6se%*bgbovJ0^RVsi39Hsmm^Q)lr+|` z2W^}L-S~%>K7Jv0d7(MEXQqv#3HDCB2UKZ}AX9olM#O3q6!{M>vV&kdnaJ%?iEXIIzpWwK*|}Q4cQG}uAre&qoj3WJgBULfmyE=^c^exkw?uA$)gm-0| z9-3bb3$H6sdAq>a0mG{WhLhvMc0s-|jE)W~gPdIBYD-&@HU|or=}PK`{KybAOkMlH z18c!)fgL5f2k&ZEUvHL|49WLK)-%yw%FJ91HXa`tWPJb(KsRZ9rjD9<)-PJ2^hK>_ zkq#4Wi*s0BPcDP;H00gUoV8%$4{sh*MPo<{Z#?xI=|ZT9X)({uS2JTHcMt*GkWQw0 zsaGy;^?)4Hl<*kgurgUu2JM2340w*Ap}9b;Ou@GsU>X1nn56q)wgYMbnYaE0GJNkG zIScjxd(q^`r23Z(y%K>S3o+GgznN@5!j;dXf-sRJVl6`E8@THgafe0|Tzvdq#q>%j zZWXns!x(nRaKqPcCPCRU=q@&FThn}lb^#d~y$Av0q(dz>z_tMG4`W<7r1IQ1kmF@f zpuCHc#x>nn(xsUm!0b!8i&iWnC0Efqi0)oAcREjSH4d{d4l@QsGatpdA%hu!0f9z4 zZXk_dOidbH#>$dioExyj0i%I5}a1jE=(It<-ic*aoU?jE50&y0XNM6^{}-b3nJqNKH5Az-$pnfhS78|{u9hZVerEO z_!~E*KLczmDz#CNqya-)>-9V4b$Zh_w&-l92c+?vs1}Xx zoBR~Zbjkc5Aib$jrFmX%{eH?fY`zFhe#DMauisHkA;~tt+@erXQ*z8;=TYKhxr1bg zI~aLACikwU|lP9RiTEEaT_ghsNN30EuQrKM#1Z-eLwqC&G|NQ-hgTvoz zt_>^3tO3dX0J>1_xJ3@HvI&QAK&qMF-8rY8%=YkUt^W@&89HQPY{dXdHGs&6AeP2B zY+y^?L2_6UGWn4TM8T{$?%zyy03y4oh;tvX%6)*e#TsOt01cs#-vVi-PPS`UIYE%2 zzJiQzP)CI3z5EgweI}7qPWpn?cWrBC61*uS?)XL*fQ)hrSRi7h&i&#tG*4o}h%@^F zX+z&OO#y$>!k!nE@$XL>>jEjOt_fDHrFq`z1h&=n<-@-*LHMvrb%9Pw*7GkGoRXcR z7JPvic~9_$ktqeKeAErb&Myn3`2}J0NiGmvV=EkwHMjNKH2B$1E({cq0Se{u+b2)>dnb2ANF#e0 z?*SqldO{sKmY`K9C`865_#~7FW4(9VAzIepjE^qZkl52ZRR&WSLraAhV}Q{)QaS1r z%Xl9Ub=iOWu`B*w4~#yn_Ax}^+kkuK+K3#batUp^Sfm5^8Eq(Qgt!+1WZF^#pWqjJ ze^Azn-z^CsW){W`WHsKex*v^_i~%PUvRc2*>3im8 z4J~6*b7oc^L)w4)z7cahx*N6y>rnCtowUvg8I|3XB#%F64m9=P1R0{HnjF=iym>6+ zfTjvS-^18te?A<{1d+Mq0OQ#C02eu8F(}$QM;Gt~8vu=+9Q`&MurB4lfQ;ID&)k?U zp3x5KH=;Pn(JdnwJHwwqq0%X4nAYL=LUMnCI>%IRL=26|K*piG7)`M@^I1~Mo8 zswsENUA8)|>$ll?ucCyM+X3xGRcV!J2h+?xCSth}-tV&CU<4c`T=GVf{|QEAyfsHA zzIbdc2PlVU&ZI1lHnwCM+IO3vwblLhApmQb%6O(on2rO4R?zGl7tzg3e>sc%8$hqN zk{4rHHnW|dzD3E;&cTd}f$6&gB+a@?=0#O4L-N~zA6tVmeS9H`-F{buz8_1unG$l7 z@Br>~DB!g8f-xXFp!H>3u5NSeXn*|vlQ~6iJMHZD7pXGhw%=a~pslvAXW5ech% z%U9q0WP5P2y@mAX!Tg8iIbvpQE#tG-@ok~XHhe- zTqw90pb3aPfnSHS+%+F2s4x#a`s@j!Gj{Cl%o>KD(=I-p1+5{X9d!4E+Q&2ZBPcM| zOV~jJ;azG`%gm&0>HD_@H@(|)pk`MEeEhD{JA=rrKr0n>-a)1`qO;AdeshgM=BD|X zs*TS3C6=ivmSqRgP+kg%Xg+2GW6kak;@^8)wTu~}?F@$qiDH3iT=lDCh%Ow}3vCCC z?j%ZfKE}MV*nc}DU1^4`L(*wH3(p@(1vpS2_z!-}vETVG3Tf0Vx>=Ch~eOMMlfoerG_LLD@3Ko#*8nT0v{ICK8X2ke?xB z=dcI(OvmNRfDWV2m~L-Fo}i=r^5J|_kQ|v)VLU)>_0-vitI@{}qyuD}FQfj+BHkQR z=?he-MM%@9MW`@(u*h0RM&Iwf0H55G!h{&c1v6$2P!$;M{gKMJ_(O5# zw+-NE81}ZZ|PnVR^Z>QGNuQCITT+{9g-u2tu*6-m; zq|Zc>p1{*U9$?D2N5F)oR!!K3x$Br!zT%}^cQ_RfMdVoj2CDS!2`>OlyD8NLnyL*I zjg=Od3O|3>&AAHZw6sDoQ}I47-C13vv^Pk>=-y~%1XjgVf&ps1mv6~&6y5jOMWeDC z=m=Yk>7NYkOuBsWAVbL1odg|FK^d*j-=4vcZAP_k*EE&lED&wYyg$|vxf2j|kXwm= zgVwe*SC3(|$rh;G)8Sr?x@k{PCu0l>-IM4u_8|SZfY}daX;AhG{dyN9-`*hi0r5Ys z3~3~#!g9c9i(SCSumN;SRlMndFnUI;G(k7mT>UH6XESl-b%1+pB}dQdROvI+exy9d z0Oiz1Y3)t{Kn?oZ>ShBDs zyXVg?=VzkuUKE*CGcI6ep1Ft8A!LVV2&Rd)-)*^7rjO>BUq%K%)f&*Q8TA}RYpeVd zjM6pxYA5GyZ&mdj3^MN;NVGY{Q z7N|iR#vh5F^FcQo?E>k;wAixL@v03@z;^%k5NrgBHMGQmGJpqJfv!DkLm(Df;~}pfoQ?(Kch$X{IG4mGv~3(q-Rccv7Ss9=kMlRzx*my zOa20njWubS#4Lkpq8>RQR%3gudbC=e3x|=JxppJ=hDCCEV1Y`ta%`V=Rc7RbO71`d zV~$g^EaQQx+A1yb7mOvkCHdd~{J%(=&hT_mMDwj>77Of@T8jn37`2&`FV;|{%2M(G zb5Ni=EjD_5U>YQ%HC4czNb8zYM%8cF?w|QZ)mzVOW6`UrStRXmTVocbv`<>zLmkpbHhOUomr7az;3pDRG z5xHl2Krdsay$=p2VO++_1sphj;SvfC0r>-iY>a>Yj{kB|@YC<#O_4!Ue-If`L9&Kz z``su(Tg--tg7SW*dYj(AB zAA7WIBb4u30qT}PYYae>egGevfw3V=1zG7Lh=$fo1X0Y{b&xR)ha_Qq1J;}EpY-FO zn8x<0gFq=(ny@vh11S~r#HV#hukHYQAte(bciyqgikOORpt1aU1PR8>W1jM&>b!0Z0IzdHd2kXaM`H&V+0Vj3{ElV#Wm@;mlQO~U0B*oa(K3t%QN||0t1Scm- zY5phZ%4i;fgLcI;^SiPmgP&})9#gFwM!wcDBlW6q8i|#mb)-|$RTDX7RFdppfOXTP zOLHVgzurV1`OO!1%nv&^Y%$@euK9HDX(8*lKw6$9a62L< z-sZ5`cA((}Y(1El|2tu8=v@Pww1eP1BX+$FAW zS6o%u00pO#)1rQukYf^f4V8mgmUJxYkbX|K49KFv=t<>gUk1j0L+^8eq{_0vmFiSf zzRvP(`uot1X_$wVkj$=SI8&8ae%T+ zor_su4fx}?o1gx@bFEexWZaFRumfBD#}d{l5a<>jj63+_<*UnM!jJR5RSbn6;Cg`E z#OhL-Oz_~LjYo3-<~D`-F>+FWrzBd*4FXKa6X@ncS?%t(&xM^V7swFDo2cD)}Yw3&pH*Ep=sA&0c#DPpd@;!kE8KBT*8Q~tyLS2b`h4BflVUiqq z5mv@7xEafI4iF1QIsj5FV5@oevdP*uslJ!8AkA-eW*%Q+RF@JG6RuqSjr{^BZ3HAX zC#SS(31rF7P60w_usmm$ zcA!pc+wU6JHOLJmBE`%TxGNV}^`AzJu6O|`v$|ii@Y$nC`}pk_>iIkC)eZm*kZ&Mm zF8tg89xRkK344gvbm^oW5MM^7rKFuu)ic^@2do)ooQC=$ssrSYGA@ugDI?adOuxsZ ze2k^Et=I2lw*+*977`UBy9>lz(ORv9^9Ug=gdxAP#dQ-^`A4i#hN?TQ5z;5|udMYE+ zfiQgA@6>~q2^$B6$Q-9x z0Cu#84kyPjR!`ZfmZb1*{rY=pU+i`^aiRSKT#UHJDL6tckQ~z-_csx+?Y!;CI7k!d zs{lLncfhKfk2y`fXj(t{XohYGUcXt-@O$Zr0WqNQVEA^x2Vp7a%CAz?_Zg8kux4XE zrODhfkpOHS$ir6-i2k-H{dow4a?-fIXChxG-3_qDG{52FY7uCBj#g^`Q!kWdAU~LJ zF2)U%pyOL@Z~%KpppBaWJWD?#DAGnX!iZ>9oA@R^?Pt5iH@Sd{{dbM8$)vve2HXN| z(bccG=X{B!Gpz?cp?2&XAYxJZ(MyNKVvKzlK%@vQ_35^X9OocM=@EGcs`jKB z)h;fO)><+)$KP@6eg8R)*INR!Bt3w-{&zX71bZS_dfUj4r4?jF`0L2=R>3lvjEiG-*`D_CoR%+2x zz~pFq9oes<%SZ>3jv7>wIIej*pL9>a)j7pN4Vw;q2aYqbflNkME61hDmwd>uI+;<< zJILm@ru0xc?>~NiWWF-QltLFwJMAECwye5$*_$`DKR}uZwQDW1*6Bpqb8f4@I zM3>BhcD?~Vg<#D)jC)};*1h!`;Fef0^Iud0&t4eCd;Y#El6ujwaFH}h(z(X>HWeci z55Vj^^G>^=pGoFfLeoXw1MnSY;xaQ0>%#%Nd;n0(1^hc&KlxcpzBX#XUbDIZQ;cA_ zbD2VBiTuU4LZFQy8Or47p%Z9WIjiynC?*8{(gvUo!Z;`%)Cy>#GF}s}q#A3cmHYQ< z!DQ!YH@jrcef+@V0d{HnFR*5RkNd$$DW1a?iZgUo-vgI`GsyLR%t zl$lUVpY4x~%Te&C9kfp6{{l-%{cszM?R3Dcu~)5IbUwU}N0Dc^7*|xExw1OD1KZB` z!XmMrBe1&$8_3t$aVlnV^o@2H+gJz4{Edz$N1fIbV5=TL^_b7VNVBhXM#4Bi#ZQ&7 zf|FlHEt(d#CqO~Tz|j|4l+iZLxccC2FQ{~l>B#K@ev1*X;&VRw4@8Mz+(5>JPFmdx zT;z+-XwVJXn@o3YQzmTlk6wLlfE6EKzF}18a2aMr_&5Y0`X@Rn3Hc8@M#yo>NMkzz&70uu2J2p)vaX;vT6&Y zp3E0y!8930_s0ui{1+f?8TqgXj8#b8lL4Heh*ETnU&u~7zz?PfS|{@mBtj=3ouvRt z^_=v=0Ba<8IThGOJ%FCKcLX6Y=D@Il+~XdtJPHZOf5Q{%hN*&wN}f9kAYoM z>;M)iZ5wyaLEWIdfK6XuN2d{8#UaRYGmRzyJ7*t2srphT*>DsMxn?!)xwHpJ)m#MF zyPY6E+K@YlZc^E_mCxj?8(Gx*sY69F(96sFu$4V{xH@} z7lnKL&N%hUeaZa~N(fi9p5Nrw-*>5DGY$snaxY_&^W725#|AQMd~iM|>F~yFrdeP= zen&O@h;Y~jDeB|rRcQ0lz9PdISr0K)A`%@ySxub0z0?O|CuM+D9FW=DH~qq>hM0dk zWCyF{@cqu3k82)XT6r*pZv%|-K7k)plQPas?Fb7{1m1sZ0yS05K2yG?5I)b{K-<8@ z7;VZ$9~c*i#xDt{1!5`uDrcvsIBD|*D8HA)oBvn@N;9HLX=q4W&MD&$$so}x_iq+6 z3N`ieW+Y!qz(j=a2@)O1vqy>*soaNs{Wgti-(m?O0_)59nYSB63f?QJLR4IWBILLI z&OmV6Ao+C)^HqBIc0kCB%$KS8%+P35YWp3Fam9H2yoH~pXb^M*T+)C-Nh#O|zl5pq z4y>>_ln+k_*n#JwKEM|H%FO(0Sr(Vl&=5!34s0ebOC?8RS#$}*OU578a)7%hfNR{D z;hb1<9eRPU%w-;qX@*I~*o;tS*WW&J(lo6}%p&=~RukFZUZR9;ITapF05UM-<0$Y2 z{H!AYg>8OuIK1N>#*Bp>%%J&&*Q$QTufIT2WyYJY5YiYKpvF_I$p+Gs^OgdN!j&}! z2I>bRfb17Q;{Yp0Sr->yOFsHqK7Sh~_4jlM!TmcwBmGx?p3OEt>-@#VL{`Z^`S6Ep zPa*bPNIo0-CURQl^-v^FQa3Hc%rH=Q%Uitvu8!6MT=G#vMiPcqj zS=PMJms1NeWGXNxYp1?`nA43S5q3)&Dq8tjm?tftmiNZ)hOWBdQb6^LEWC}Ofq!TR z#A(t4=`upY#H5^`G)VAIbGlJV)j@+d+dE3(A54Q+OPI92_+?rilZ5w1rt}uOG?cUD zq*Hyf-)uKnvnEB>b|s$Ml#k&D`8qRR{BP+#z3q@Dt#($ z>{W4};7{AYuWpCaQT3O3(5De$6;Kw3c7CqS#dO)in%^TJ`xs_lumnKra~Al`1naFH#xJ~!WfnbROQ z4MA@Ak}td{iBv}43wb?UT32tB!%6}Cf%17DZtA^I@}2EY@>PN0MJ>#CL!NLjUtEC5 z;J#*Xcz0xzho*j#liQ?Xve=M!{QM9vv=6+A)(tHb(|OA9K;AS=-DdO1yLjRK$w;It zZe+)J=+S)YxpA?M!2)(Jg}Ng@?jkLA&`xF1FV>eoQJdbcNFy#6P@L?)BWGB5gpsuA ze`I=qca%A&PhKc3=Eug8tslmW1ks!uS;tAm-WDjzywJRBBlNw&vUi44H(mc zyb$Gj=Y{lVcyfwKt@%bIjX_vL6OgM`*>}F;=$a39kGHF|DKBI+fakTk8(}bnw&qJB zG{OPA-VbHGViwD2lh`(RqJDyndgLwhi29|Q!&B_K;n>s-c@SJ0*@V|S5GJLw;RSuW zk&iQ^$aJp$&LtAOC!({d2uYGJD^x3*uQ$N!RB$10y@(pF(<7L2(h3Js!IUr8*5pl9 z^P>C<+3?ma(E_M0GJPZ-bNNL1qMl9;v~~neHhmfF$M-hiEmkQV4m^Ax=w(8iIr7-YA?q@=R-K z>MZLUS{Up*AaB%$^|W_*?ORwi2rQDG;EQwNk~+dzlIb7t$ui6WtOp{J^TB6bqFsbM zT9Lm_08iw?*_)4KGtaCLZ*jpzrO|V!JNl(dZOdkeQK-Q(@N5!YD6(rT=o7lF6?2Gz zG2rCuTy!JjPFL5GEr;pBuIFI&4(*Nn>LtjHm1OHNCUM2xk-NFlaP5XScE>MWny)JW zMskrM1_#61Py3~Zg@tHG+$gaIGz*#^kW0QCF^VL>+NVz}|M(_}QL)SxWCH1X4G1~JUH3-%rPfIael zU$={X8;r-OvREMB9eF3&X25fbyncum?Dhb>H?qkF{aw6XP_=7l9`oIhmwKT2u`co@ z-0l(z{K1Cn6J`E)YXus9Rd{uEzz%i1)hF-(f|M*QA^su)BF1Yi3bn|Q3QgOeT)nCy zcIxFJfDO44V+izp4nzA{|DvsbR!pHtK2GWP2m4={SMbs1h0J3@}Ptu^q+T z*D$0Xe3&D=e#=s6ThBp0)k;3|?Ft+*)m#%7-hZO6<_M0u%8vrRrY zTu8vMtb=2W_(1qe!%MHTOcJM@+}M4i7%*!~zCM1679bM?`i0nB)$VwlJ-kMa^^{No zQ#^ogcbiLR62vyl17`Mv^+rnfx6;~h$<;#<@Olqa>H{(GD{NKE@tTU|GtEJ9S`?jb ztzS1EI7j1j87z%HJCRGYp&^2LO)SK+5jQB*q8SR`JH(uGYm)4U6ZvIHG>ngGptLLu z{8qIX<#-`Cgr#M*=pv#+!${eNT${KFtbB25z_Lmq2nHV2xJa;paqwfo6|YU=GUtsrb7L+l7{rbSzUlq~-W_F^0U8wuuMfw<>(_DNz0rTZxLl&s<(fy2QLM)b#&W%p zo{Fm{^8E%iCt|?J|3+O7e8-YEU#DoMbDTx?kKo$%c4ect7j^coUtJprjn6-s=BMzP?lo<|SZxpU7n*o$oV_s;w|J`@}~4pGW~% zH0q=n3`WCF#7e|o_}&!U9b^xso6?`!yK14%Qv{p=5YHzZTxu3v;E* zT3+-7{w{a69l1d$aOSzi^qIZu|~})yxJydPX2g>Xa_QYo%C=F-41%8 zCPYoc%ApvW48sGbCuA;=ArB>!6U4atV1$36SaAg4z4PRnV+vq{$vDiqF&FydS`XAt zE{CWK;O2 zx^?|R*%@l}6YV#MN;wXt@NP)M2(8M%AhN@o7TyCfA{8NK+@TopjRe4YAiA?9rexHbRA5DSQTVvu%;P)I~Nb`YuFn3M1DaPqF*)o=(7G;aW;BZ-8skow|%dky5 zNckRhNT%6Thm~94vQ|2f31bGVNBo2uNM*0AIka#iEpf$3FZf!!Sf_@R8!Bbgz&Z6N zK^c4y7!Smi9B3X9jIcRQ!_pcoK1w!3b!~=;586 zU*|^#LN{Rxycx&dV-HI~%n4v(;jWwB2XL)^XYw4QHwzsVW)tYK~F%0ZiE6lWQ6NL3~a=la*gQ(dB z6WnGj?#OGsp=D{oK3)~(cMa{1e6ZOv$8=~jQcO(8jyTGycs>(F%d*OG(FAtA@Iq;< zx?RS9!^rv!#tVG=V%e#kCy(|3OIA&=n34EG8BRWAPVpvdmPlCv80u3A3e4%bAYQWv=P6?Sa;Y<^3 zATel$KJAh`J!eOrKbfk?^FSVVX1r9pSXfrsjI6-BqpvFS_j)mCfzc1fWfbNDTJp~h znfq{-n&(ZU}q=-Z84?hK-0Dm0zqH_c;TcI0zy($)y)hdKEn zWrvMRi3=Hy6ScWAX-i{(%@lqkn-au%wKQ$kg%|ZeE)rRzBVBkC6^B>L>9pB02{M7Q zPeiS0x9}R!F>Tsw1KE#bvm5Ecsa_H^nC7B0FW^-MkS;(uUGMe*3)^`|ZekGdV5%%H zms7z%G1>CACWCU8m{NxILoEQhVxw9ca)AsD&%4cKe1}>wK49HIHndcO$u%x1*setn zDU5`JjEg!QjKkxLY^rdL!H(QDjC#*d@C_ocK0Dch%qfUL?23W`)fEM{qSMTWtB)6| z>ibzT+6yWkjA`*Mi;~lz&Y%W8%iD7F5J~t1Im52`PIGyvAkz9e4Xiu*oO4pmGrKdS z)Tj{Rt07ycvNd2X)$k@0h;fb+u}>Qs^GIa zR-Uv+#c@Rv){>mP3CP-Px>EkG75!CP*qE<^;?_Ym0(_&tb&S5+s79YQe&YS8gueRWl!Y0GNGjj2>t75>I%>aPxMX1d?bx3Cf^*0 z0n>a^>0zlwi49Pf4skXSB5vZp0_(XzGhL0~Q)Lnzwd^izXgW^~jR4vHMq@qVsxoEnibx8kYa(bf<1rG4Rp?3Ry@2H;a_;Ezi1_^pfOWVK|~AcHZ;ro#9?P%XL78&*~l zLG_$xcsHamVrIe8O})a((3CZkt40lwJ43#wv2r!g1xB4^-I1Dxbj_19G?9)0Xg>Na z(29I~3ZxU3@>Nx-*fw|%)CrVBChdcqyO%c-9LTU7G!!-Y#=F*uFxw6A9a{y!poHE;KAVt!9n^2QaplaxtWc{diltRiF_d!#L}vO9vY1I;;WzV zj`y-qyWj5}MFMS#<Jd+@4<>^-k#GLkm^+qN%S_bWV=NDpfx-()l;e}eS?5~=W-65~d^+I~} zY^&B3LseWb0WoVfm6O}0cfL2$H6x!yu;JAZ0ky>spmf<|Q-U^Et~vv? znGl`F2N5K-fk3*Dzl_DA20#XLkRh!Iy)?*cf^Bi!Subg>pUT~Ze+b|!V zr@_l&tLzC(mPd0q^_4)3L~K2*I6yDJ^Dhvz97)JKKlr&$M&!Z^B^Pj45M+!HPL+vg zb67X%=$yzaBG6bg*#pFwF+^f)&Ko7053EpGX(Cyp+h0526&#KyP5Hiq2V{Jb1^1>5XcO>B34VbzB zwHU_#Qi!h}Xx%pC&Je5~_&|WJEPfDL;U$m_Ni${v4gWT*x+=1wjsKgZgcQuGw)t~M zI7VABobUpBNX%k(#8{VhnSACk(`rW%!gqFWgyj`Q$(1nKx^)wIpUBgavc`nCU?5kd z|B;H`$b^F$L==bB&8ri5jgee>7#|`Bl)j1eAcI03WdA|SaxEF5K41*h8>OW=-=X#* z04{Zsq82Ce9S~^!RxDIQx8gSKjqFc95h9H#B>8F$z;UA$cSGo;v}szqlX$v{2`7E< z0Lk<-=VK)@#-%cV58%NADVXgR-xeWg6qn&bCj5@Ahu1^L;We1}gI#NCD|JT>L^hz) zwRi{2RzNR(>ZdsJZ$z_zbPCB9D$^aF0m}o$ z?sm$!171*eqcaTv&HeyWrvrFa97=DkL(KbXP91VyAl@Id37ns`pAfOQV28i~j5$N` zbYIWM9dqZ zM(}oWbk!Y%;evAqI9V|E9dTkbp1&3+6t)4E-cq8lMv0ic#q{fj3_LjzU>9)G8s8!) zA*<(1h*@pOjlg7Mze=s-3RJYj1KHH@>NZZ?EcxaL6)Bwpp`s`$C9TzWGQkYVYG(0Ott zG9h$}1mXs0G)T_t<-|1*^DZAf7%9z)Gq@l6B zv=F=?a|*&I#J+$$iA6p25s?UtAa7J&-RST#0hrTl`0I*YfaR2cb$dB6Rbtc~pLzok zjq_zHnlu`V7#@4Z0olRXIM$iNKd_6SgspM*CQjDUJa09A66f~opY1N-@ zM(V9f19(iq@34rNI?Acj!W=>dp>D`!hx5xclwV^Ob2AX$8=2DYtV$#M)JPDK=>vcFL3>B)mi+nW0Q zSXnO==@^2&Z!oN%!d43vx_;9D{AOH~4KKpIj5I6HM1Q*hqXe)t)fg-=eY*Wlem-N@ z{4iZC&Cxjp{QOCN7qBGbU}dDcUBfe=V0;2M>zEyFb!i6sfegqe2!&>Vvf748LzEWx z0O<`-BEhOMSvkM9$|&s(7(h<4vgpJ1&_3|+oPWc30flntF!ilw^xXvJsGjZFfZ;x- zjx5|fyo=5GE&@lE4xiTR0hGzfhzvV@0CBQWR&-q26a2(dK*<6h+D~R;(ltkbQVn3}06KNS zNWWQh>aqd1dZ5&B!boq?ibSc*egWn1TPRSj9MM~wJEZ6D6g+Qfp#pz?+kGezS@_=# z7>j_VHmqjpb-fVyHh>Qb1%r?hw?Q?;txP(4;gph@N<3$qpqz1PtLv*G+Dq@-dM)LTQdG+0N~NN$RHB(1fF@r zzsi;jG!Ee~t>IkcHC^_xB&(VGWAm=&^}RNAtIi@zjv)fY=s^MqFb?e844D@jQz# z`EB3_4yK{FsWY7k(j*dNdHyDXBq5fam9PryJkR;+2g<>ZEd!Ko;qh0WMo8iHWC-sc}pqj2pljBO${Vg=Mvvwzdh6-x()A+j*{B z71y8=d=J11oIwGFB_svYZ1_anGh(3ZzkPEEho%D*5)H~7C7MURCtyG7n>UnV=%CT% zUQkN6?m!jJ!Z-#0bc8UH(s>t9z1+|+Y&<#Ujvk%C5Jejp4bTQKCt6kp05k_@z1RT6 zic6~wA$Od{6z$~*pz2_051`}6BuD#KM!Lu8ii;42lLoY@%yE`j)LM@?lM;+O(C%gw zwYm8=E6}W9G(dHM)NF1`&`q>Fa}RZcaR;a@Gmo06LgejNoKyaI0MD>9hfqz5Mq8M= zfUdw!;NP)gVKe3cw8a{LxB-(X06D|>gAsvq=%h<@`37#j@~#G5n|@*aj&@=GbzKgS z@0Lw89h!IGVMO7d;2XEbJ(U9m<v=h;;ImDteD{fro!*@4$)-jgTTyH*dj?AP$Ji$&5wiBLaOch zFo_nhDS9JY8coO~XZsw$bMnl0PG^?IL=Ccb2XLhf1&fuE?Gq=wFz$fe>{7z`gL%k3!kE<$G=n@a`Z=)&FqIFcK#6J#X=p@bh`j)+0)>B5mrw4Qu&084$cRsR z1M25)OWGS6CKGo6n^C>2qN=_z4b*Cp{S!EOK*_ue?N2lzA2T@smmU$ylb|V@nFoXdMa28JM`(0hV>Ok~ zC!0sU`)59xHeYvk2y-+E%O183cut2cLF`%z^&Na5T1crEu-)?*0yc7*+Q;c}gqSyR zEMZxF;=GYj0kjKPr8Y8)Rt71^$@&2O#)2X;nrd>}DiAf(!&9iRuSfbbuys-OADnI0*rSbUIb0R1Z%5nW`O zE+TG#G9g%%wv~c-s5lMx1Q;?XYd&;|17!Tl_yl}DhYzLs9CJlvZ~i|0n1$Nm+haLPjhYsTNT3#0(`d z^SZ~`ar^`f5D17g`2`Lix3R87znD7i{JiC6GORSh??Aq+awMVYAk1We`4#xY1pu8- z!J17rQc)lncYyvvsm2gDOJR63HroYE#e@o9r*@I`&-=eH|d?}-_wS@#g zYbq*wCr8xITkqs|dsMG-)k)i3ZVr8-FH z_UD(msqg{P3XEX`SY1$EBDr)K&^9}OujFt{pi5a|XbfneYv=>`8WogPw6C=RS&hQD z1D3KJF6in28f^k}9y@^V8$qdV5o{Cvq8;IT{`OiD1pJ&-#djx#;d=nXX4d&vcAV!4HrZ&Y8C;m>H-!GLnRm(Cw%jU~nH2x&sANX^iE4Sj_<#4M0W-B&Lxd*|y&{ z;d~Q@Kq*rJkW}yi%&x%uu{3UN7p=ixZR-fQ1AIm)QC1iWd0)mhTp$gKsfTgY!5}h) zX$&d(3BJ?*P-+Z~P(~`}u>ffT8Z^4=ar0?INzNzmwU+(O)FdJ5Z#Vq3mU>A6(grY0 z0i-2AXv}2o^f&k=1$Pi*NF1`gY`Y!6xl_hS2rZrGc?lUefTLqsX+&vN#PZ$0J#Ysb zQ&%L67FM|)KT$U;xT;}a16$_y+e%!`;&XSxR^kc#z7LeH#%UI;GLRu)v)sVWiEiRZ zv_BXHFtSLoLl#gi2C(uCqj%p`wJPBTGQd{{W9Veds9V1?maL#=pxxFX?I1?J4KN)e zP)D({7ovdyR#J5&+D!usMiG!xltH}xE}*0o+)?IQh#Y<-xBRw=Nly=i&E5l|l<@7K z?N@hRTG|i4HH-sHQtR7kLNowZp(rFl;+fyjUgn5_LB%2}_pM$MKVh5vr={E9+ z${IWMH)%XH#P3?-OP77bMb%DQ?0~KurMHS6m=&fA{sop*^%I*&s0(0h{{g;uh7Ah# zGfnL#w6J`S-*}Y%eTGp@ojVtiB76mWFv0xRQ1Z1vs~N@(7`>mWn2D#VF2)O3$sbj^ z%J+lLAp4|v{%qoSQ0^^+sRCWVyo~f&jW{wFWQgCi1>|!hNs?*4%>_pckwA%bMAqa2k;YiP}bz-XX%A08elaGJO?CLjl;$P zkQyoD4$|^tSbbv=KAy&jR0B-pIxCd6wwKC;KezxTYkJIe_x_u={L}Q4y|H;xx!5qr z2hb^pLOY~0+e2yj=TDA-tDR%sJzWE=72AN{D1kzkbaY|9O_yRl^B7mfD2~BivFq5HH+Pt)k~!NybP!fm`QL@GX;J9dwsKmK<;W0`l>(pz_7@^hIv@ zp5RB+%nD70CTmN?bur0;LwKB;EFJ7Qm4oh&|I$1Gft#siO;AHBj?&t z+5lIK04#Oeh7`aUWLKr@cOr@IR+K9tlhFmwp)*#@8SlWKv0)&zov;PDNVq8~8sfKg|vbTPCv=uf{6{{Tsq@RU2^DcW;N$jHAk zK7qR{gnJg7kp+X@VN<9J*hqb>1sZb{NGo{!P9$<-PLRB$N4%nZ42cW4oG)n86sFuE z&F@H8n_zy%Tm7iK<)#}JNOZ%?3&~H19!C9P7@wel#YmV&!HQqraTt(~L!l()6 zFv12nl>>!8rD*qgjnAc*cMyH=+w5eLz)kjW_urnKAcOi2NZ&vss%TXn;WPA?$J=Rv_v)QS?vJnh<+|3 zk}mV15=30TD{czz;z;RJ@EY(Nuq2;SYn{Dj*6kruReBc%9wbbi8AI(AbXw_Sz4ZMq z;1f({!AMamKMC9d-at8g)HpeMYf~7*xdX2ikkM6i7%@PKl_vG#e}J{Va`dyo!jPW7 z|0Fz3?OK&sB|6g_9>2Z(PjZY**`i-x^rd`Hz!4|qGtwZ*jGF*8$IY{LVP1=Ocp@AG3;rzhp@LZta@szQU-jHzv*%-?il#E22W+l$6AHc;blx5`NvAJ}m?9bns^T>Gx8jI#`+_C1DbWuyoFK0Knw(o7qEs4OhtYZ z+=CJIleU321#K3IHqq5GfHZuXsq@g)DIQ0G(IJJz9oQPP6qF_+Jv4m%ooC|o{iQMb zVoW;9!6Xi!cV%6`14Dr29TIEKo_YOErVlsJ16>gis0~%DmPEr7D zD5x#X>U;f8zx8CRZIKQ!Iq(D~?*^S`j1b5Nr!@dRvuGyzqcl*~3dPi5pX(@Iz(Tnn0cCmX&Hoij zL+wffsC|MlAgVWzZifc2SOuQ&B6)Ak@t(yZRZzC)Py9mumy)C+e!&9R6%W8n!vVYy zfEg$wJ!TqaG|y{+F7S&nO-kn)b>0XC#81tO2c#5O3=(UX-7?wJJlhzq9T35R(&0qu z|NNy`sG9=QYW?l00sjA*km+Ba3SZNLFCc*@Qxh(aN1TbkHXsUn10n=~ZrjuF=()+t z5x4`Ifs||+t!0px)f~UGXvZ|HCNvO_YP3ss!2jX*dPy!a3^W4ExB>ir$h;|hezAZi z=@8ukTYgY*2+F8}kolM@n;H86sIV32iyddQNot(0VG7cbu5Ge45XR)kG*yTH#q#iP zSCBn~&~L-o98{i`tg?PG-OlfPo|jIz`ox;J&+0Rd=mnA~gyS%bU)Ty}0Qb}sHNdA_ z?P-)3Bep{OmMXhky8+gj(Y@4=yMH*>;mu%5qyaAAG6{f!rp|mM6zJF3eA@_|G5?uRFwUms^IopK{;XV<9}!{BH9e70%!}+*v7<{3&7L`94oT{ zYyuP`E4ElZ49E0AyKR7KVm932XkAS%@xw-`#SVNi-^s0}<`zO?d*#FQk*qKPt400* zUQ!ybC)CWO^2IbZC#VYCkpZj)htXk^L837`V7No6`%y1|Je0b6xfWAkB|RuZ0!?4+ zf&x&RwgH!4P?##FgdX4gocWVw`vXW|yp|7bCyj@Pt;q%`8kDOh=n^?Yrv1RUK%Qbe zKw&jli41q31_8zm&~N6&jW^0x4yE#51sO5B7jW_4yD2QclORD48KqPGRatw!MUH<>>WmeXqga>b7^A>=)Q zCpo=~AnLGae8S~s^m{H-Tn^MQnf1kt8BXjtq&7k-HAS#!sc7h)_# zmxxw_d&#NTK1A$}D3r8zx1Ga+h^sV=76nON$W;~BZd?stNm}JgY(cJ=;g*v2q$fXl z&dqrkPbA3|WvZna11F2AM(u%2T!c0)kV~4_0ZBnO@QY#3B{jNq6^c%Z`+hHiEwTf` z>G!7Esx)%L^cM69JP!+rPA(&cR!F(!k;s=SL>f;Cu4X*)7(?wWbD*)#ZHje$}PX5ENUzr1RJAmOVZGg&2hChvzdganNmOdJ3G=;bt)Il6>^QtRP9>D8#%)*$Z2vf)l`LSb+-s#y)idGU3DYx;}*3a@O6NA!d!Gu5iVePylTwL z>y~Gb``W;@w>vU*O**!6EEaNj?i>o!)ule9$r@7Vq7LA z-N?6i@IxAZ;H5X*AHWUP7dVmY6li{62=@Yw=v&>ue<2-1d20*MG)E_`sMB&Hqnb2# z4JWG2EF;$4J&{*FLo=|D;-)|KrDeTycVvx|8HITRlCpluHjiM`Jcl1VJ^x!NeQ zYzwhQ0rlI$QjJZ5^jivn?y6)vo+<&E1Q43c$P;NXLd#Hu z`iosaMx^okAgO~q(&%-YEU6>c4`hp-t~F>IQbQQ`xgrm$YX|VBns}mI1dD50H$@9e z&2&}igD0|{Ug0CH>*H>`f;}G$)os`t+25cEm~?UglQ*U$r-~wRJAMaI zQEBxFbTaa+7cRs5KtDZhjUMP(+OA+vEP>tDE|NOPP6RdK2x=MuOswDp%xiLz@)W7g zA9$NA#kq*;@jI#bIFyMjL;J)>gV76aUWfyz-X&cd_fyX>ync!0g$($~OE2+$PTJZc z_@fMgA|(y-o*z(C%%OUSOiX3p$f*W*mA;JJU+zwVQ44w1=L_l8gED(S%#I=u1M)&% z0_B55>mt@K`fzVI^C7G|a8Pjgl{Hv6Jp~GO=S`^_;)<_a3_h&6#1jV?M-$Iy^1j*~zLKiP&7r5B> zoh>d6O8_h1EJz<52&Y9_LTxrXwE%N2Nl7HD+NQV9D}D zGkxnZaP#RwcY^7$9ihH_P^fDuh$a;Iog(T`lrJL{d4CwRCX7hUqhI(uC-8n~ICY&U zDzD_tU~=Q0pcDz$7@*w)t1cUwub_1{L<~N@Wz*~x`Q#wO2_W~l@_wf{F*7N=J94tg z$6af-_4E8LEYk|CC!$(-squE8IzGhA@EdZP%LkvJb?xCe5ARP*cP69_q1MQ8X3X@N zO#m@&6i;IRLd^_m6h3HXWxac`i%NJml&_HBB5OHQCR7q$laMXphVt<-Xbl}`aII^c)3>B%>;Q}7+LP|=VEp|^5A0qK-}5d1rC zghYp&8Oz~(0#CO|$zX)jv;c5&i=Rjh@fKTYUH>7~7QwBo)*eXvjUTCzu>ka2zEexhpA_9gOjKBi1PJPB6>~DstUIk#|SLRNI1LW38nj5Nfh!J7XGP#vrT!t6AXHO#oXxQuF0VyQ@>E3Vk6HphekUL6A#1FgXaBL@$)t zKdgGh5t~_n#gJYM4{8A~^y!1>T|FMWISxgNiB-azFCRUSto^hc#Ey6Tvg5Zg4f*l` zfVdwW1vqvuWXufS%Qtf7bKzK@Z$qR3Wo*U3Ajs7uye=Hyh^bTBa^tKrC1Rq3RZqPr zZkv;p4G`UeTCH%EDer;OBWBvuur6rYlJWV>^sreAs+2#lY30;egWBbU8^RA%Q_zzN zNagmHbOAnOQOZ}8iI>u%IFYO0i)En2Vco!(1&)z~F)kSDgYk#+iCCjD!65}J0V}X- z=OX0=YC-BqGOX~5e30o0)*Wf|A~Yp+sFasJg%=cCRMg?)u6hdK8mi@ia|2EUQmO;| zDE{>WPx6U;MeYe<7*fVaZG*TThPZ*`vcQ>eg+w%$xAB&HNs-y(KL9UNYzZmdI{}M2U+bOqjN(aqPC=~Y2XZ) z^-0fR`6Q-=@{Lq?hCk61YsQG&ke(?t8b3nW0RIp&!NKZw_ygIOsAjgJp=S9Cb|{|6 zsT*GIim<_$%57^fy64FI@e1s+9TBHyYJ=9S;-6q0 zd@%c)8~R7&I-vm~x)+Su6Kg+$mw5%u<&{S z7wjN>+VB(Z> zNA8A&HgZ)(s)WArhh(4y=o@?7eaVHFI^{yRy#Wvd$#g5@4$cssdTqk^S&Ds-W z&T#uT>V=IXYyqc1W~73w(T1tTPYYzxnoaYRD`AsX$i0 z89vwONc3uJ-glt3O+U8-)l*RLii?yq$OX12E+ACz?EuFKKaukZq99CyIVcZXm)dgIP3<{^Wtb%``+dQ`;zeFl6JBK>t z%)MeghZDIm04c65L@zoAbE~ARJ966`T5ryPs>uO%F|h%!uu=*`gu=S?N#Xr0?}oBS z>R7|g2&)qqLg^VeH}F{@y>$Yjr;}mz0;3`eH^@7uW6>R3F4eU~*n2hRMEaZ3V&kB) zB5;<|UoMh5$X7D`p!N~#2C|sO!eM`c+^h>FIiL`=Yy{P5kR9NH>pwgFrLA$p)qhAC}wWG=M%Y84zJmg z)SuwA1IC<_0lHHK#v=4Ua2&$vVjgVN-XQmeVnXq3V&b8Olk^@#iGnJ~xe9%=sdq%R(H|5Q9c-IeZ`GR8LfjD+iLQqaAzDR7 zjl=9j1}~s>?+B{v7;sj9Pn1m~haF>@KaraY!3l6_>`-gl=R%3LYB^F?2OXV4poc6| zcyHvBo@9pBeI~FUSpZLK?Z`AkXl}3mM@hP22FZ+$><9~GiC9Kwjl&*dd^4i}jQ11q zH8mrQep8sbVNjhe#Nj=VlOnWg5t1wuOK`V1f|Rt7P86s{7rD;$OjNFdU&z&r2^ksl z%<_&TF=HpF)S!6%&~PPFUT0_n#)gPHU*9NB3==7r7=~BJ0Eqho>jrE_N$p{e2~r|L z%f{k&gbS(54K2H9?q)kLF_*jf_(CWZX&9?L*61!FQj}b4w(8` z+8r^zq~R2W_tORhb8{!WH}Xjx5os9{K&?F5kaEh3wU`xhu z*8y@08%lg&i0C1VSfc!PcWC|2zM3bODJhGJZeWVvh)!_>C=KQECNe#?1?!D`Fo$Tm zw2oN6GRC7`5H58`=mj+WNyhj^^`gBuLZ{&Ewaid+X9?@Uh}{5Jb)D3&X9-QO4bOS{R-fuBB$ z$_LXYJh>xABs9PISYCQq+}xU6SsG-S3@<@*1_^KSpwR|rSy~lK1a*)Hj6kSXSs4zb zrh0jetgM0`h)L13RlJVy+I3*Rv<~l%a!vtXm+3vcT!616vsB^rI{XL1nu@ZRm5Mn4 zCkA>V7s=54EKKCO5H?4+au38Xg!ZFzaHBC`zvawZa(7ISO_sz+(6lb|2ArO$k+uUg z9?~kTDf;3zg5S};kwIrs)_e&1fq1Z=)q5dbVraEwCYrH<1~y<&By}O2F%jeSKS^0r zlX*7zYPlM2f!r*}ES{`cMBA|r8=%4tydtFSs918g~bT~=b9K>WGM88!o>3a{CD zgV0SsMhNPzRWNnM4%4%5cNoIl*9}8B#aoI$au_&Lo5x&{AUO zFefkcg}sE|>kHX@G%0g+%4=>d*o^|@f|RsS{ic3G z9jYoVRj=WNI#Kshb*OySEt1jTW9f9Eo%>GYbPlawpOtFd3-_C^uy3eO z=AB<%49gogKB*=rG93>&iRddSoQ~h~H^T`&(>3Wals&IcNaF;38#ck#a&Tp_k_!e- zUh<1A(DZz8kq$3hKP4%Mhv;KErz>pQIOI z?a~CAK{}#MyhY9pdBh5uSHGoZABBY1tbD0OuK&$!ih5CPBPkF~mwTbK0lPZW zUJPPbjf={Os?9iTFaD1*V&RFXXPFyqV0<|8}8z6X0TP zz_&g;`ofIXk?Tld$%wAOn!T+Ds@}1t2rogJEJdjVyb0OBJIGZ9`g}QI_!#0EQSUOi z(aMBQ?jn*r7Y{Y#`uW?OC!bmtTqT#!z($SO6Irw##*#=&h+|_m;HOihbiJh*y36%y zUVo#Q)-Ga9bV&mwzK-F*`LWmz_XnbIt}>UaW=w>+nM%rgp%h)CqPH>)>tR|k*3Yu< z$gYK^CMwDN2C$c^zme($Z<0EoCZz}7n%W(?!@^XY^_lZ5nyqogOudnFFw$Z>ZmPHK z7iE!FYnuB3Iu&N-M>~9USf9Y{sz@ED%4E}Gy?`6VV_+Oh!_%+tfjqEz%kX*$*8_#M zU+jTs##e~(0X0GoL`Q9C}<&W5b0ku-Rlcc9#e)pL3QV$g6>k+xUY-6np) znS@q|3(@sVb(!;|>H{(@VZ&d@99(F%_fXAX5;H#*g*pg*V{yES;I<*I_`g+!9sTRz zz-^~HQ(O}(#WW*gpQv7rG%5`*ST~QQ1WkK@Tr9!@#Ocu!SCN?`%qK9M!#bv`28ik& z7%S#;7xMU*?k==mQYICn3HFoXZ{(9Kr0`=>0#81Hb0s2@F65JH7b~(jt3p%-?A<&s zlwcIJL`9`??GynYB%>^cwk6{<}Fs|t1i%$BA5N_ZTiA5Zs5X3ZDMjY#ZvB!Uaog`b;k7|;jsh^MJPkUa8} zvg+fBacZFM=+pLsmhpvq*=pv};2?{)kSfC-N}L}A<-yp?=Wn+)hLYEVQER_E!mSMt z;OW?$@g-3Z!4woCJq)Mc6MrLTG|x61Sg6` zF;&}sm6+G~b)YvYslg;Rehd*&bxa+sJMwE7(0XGQR67euKfi!#M$at1WwDwjHdiXUuk}Bc#*hi61X142oeafIYfogolo#!V& ziJ|B(hZ8w|kk0`2Ep;J#LCZ3|oBQGXfgcK}^zeYrC^vQqU}coxllBcip?w5V;d z7SQ|d6UzbPnd2fs`g>OsQBVfHFm2pE( zG?p_i4^+*TGmHhhfX{i!o0JBQpFNCjBU1yb1Fm53P3h2OWYHQa$M>BhwjSp(E!=XRdE zkcIIKi8TK7{VE2SSd+XvQWNUp5mAMT#RvaHiQWk34qB53B8hssr<<-L zFP_|yp;Tze|AA-@u2ARbjTqPDv2;LkU6AfM&+K!og8T9%ZJxbwt&AG$?$?K-$Ga; zkP}0BS-(hS!jX4FX61*LnlV9gB6#qBbrB79iZS1BWcT{kSq`|xC8p{+qTJu}Kv<*j z#z-;os>al(%ZvjtzN96rg(R}9mE;n?DAYk(W8O)ns4H*P7=q(B??788#Skl;W{QEc zPxV49Go+zQ;q^-;;Z4nMWGCt-ORGCh`?m32znuUVNzT!Dck6-PcPA%zl0Fa)`WFsm zf>pkxh4-T~Z`5uu9+2+lu)LBC)9@e;;s87&IX#$?5{OX@rV~BE7s92LMqWpy+9_gM zR-bD_DkHQycs5DoX1V)BX)Y!>c%5=87hef%X1Q`7h!RDt$t>*!=6hM&xn8OAMDzmF z#|YKFfi%7d-BB6awGbW3u<|Xo)N7$W7*b6i#Ze2ec@)d$+7W~HOHX;m5!(_UVjUcK z)yf;GT^OT_*EtXDR0i*c;s{`kF0ExC!poWxR`15Xffd1QtT=)mmqfif$IuhG(+bTL z#I&p?0qAt8r}qHfbtnll5Ka>jz_m}9rs?;0l zil*(@w{a+dF~abg8vj2~YSP3SB{@(mK@8H3(q5L9GIZd=+hJrfhEE;{{bJ%~QfPV6 z0C75(JY$E#05wq%i%4lZid^+s+8v=R@cyk=4mH~E%}25>;By8NtjCIe8J8BLF%Wmq zkx-|N=&Cb{x}WzOC%cgey&yLQ)3Qcl!5*td?16Lw)Y%v$sLr!s=inF8$UtK$QMoz= zu2q@EyDp+2fcCc$Ws2lRsDl}sl&FmZ$heQZR3p!7 zUorcP8CZ8fehef}Wt6icz$-3f-H_oPd8-$efD&qOP>i6DC!%IpjV=_R>ZLpNF_KQ? z{qNEkCMg3KcPq&pDtNud`+=O-psj5UH}S!_aSOQ{a(fBd@5!lf_SWL0W;<}Mf`r*< z0dzzV%9|~~hR8a%aGte*m!YG%1=FQ(q$34wjUzRX*Vwi^c%hEZmK76Iu`UNFJI~6y zBYPfNeM!ezip%%vGn6i5;s4bo$61TYdMAV5q%pfn$N)k1^0L}L>9DQ;}ZNMZc zgxVr7FUYz9LWW3b>O+VreHFnmE-?*lh!Ef{mu-VKycfx*y&}~_Mo?_3Mt9oFg7|FP zYe$}i`mzG!x1p0l#sOhf9={F=hG$*YF2@R*kqr`R(L5_jTB3IX*% zPO(Z&d>X1tc0+Zk)q$Kup;5W^z>Je>p}W1I=3>L?fzEb_)oZgsT7(@ri_$pVcyJRX zukorxiVL!u3$-0t-=ze`03=c{SP$g14sAJY9_<5jb&8#Eqpmd~XWVyY^o}q6Z`UOo zGJya&8dfF+B-QNAp52ZNR>`|ueP?trvvL>sc(G#YX!$Q>ZM^A1TDOy-(tY3NE2NKi zWICg?=@{;_{RoV{d%NvIIxAm6cu6!NnBq&NwO+{2`KAcT0MK75D;;wJ7T`$f^$QZ| zL$Nc}iAZp?bb3B50n@A4XawbXAR2+uEv>;P8UX_(rV=(7sU{DE;RAUETa?4D5H}+7 zM3jh53@yC2N+9`i7GZ&O10xg8ev8O%VWf#Wn0DlPQ5uD=dNM@8eudJ~_Q^pWxJFRVio(dtI;0P__4A2MoM9tuI&%dunAAE(*w2gHm>iE}^^%$;IW?(MXH%g7y zpbw+RPm$R=090R7%#qRi62aaGAU68dec_O6h@A4~o!56_!{PCOY2$!-04ZQjUx$$l(U=DtJe3ic4cW zrMODzw`f?y9C~21;#1aqey$MJ%N?+t#^mIU99phj} z4ZO9!J8}Yo=B{nbna-|QSDzB@$R35p{GRfc$eR+Jz@- zldYZe(Vgh%p;p_ol$PGn>ln$N}oU&A6nR7;rWw;N21H3TfSM zuvt=kk07U!7P6uaQpHRW4BU&`!8>2mfmAly4fqL$UE>J8UZi?V`xV$sgc0^O< zB@=TpFIh}Ek$WRs?7L%aHub=`e)1ZAeIcAfX{)?;m)NhdV#zM#lZH#AG32TZ&O&Ty z)q!#e|3E4>G<#S{UOErv(xSA(hV-9 zR&kA3%Gx5_D8)-_8eph0;E7rS1Mw)%hP*&WS~)OWHqKV z1xN{uu2`BUsJ^p$R&5~;)_}ZGs@xCW+dxc%-)t;aWo~32Fs{i5qjpGz(@E5Pu{P|6 zjFeMW!|&mBGhf~=>)m#EAXN>y80GMKrx94Q%v*Mp;c24Tl;IcWT;cUJ7`z~#9ON7Y zSj!nRoy2t(p1^C>p>S!*jB@)AoPp~NJU4KzWeapIP+TU1{gxQ7KM))B(wGxdt-i!d z1z_EPTSajCEr4*E!WSIY8`%XW@IfIc+@1ribQgF}z++C$F5(-`*{%%<&J}8ZKDj zv-zM6O6|EyV9iPf%D&k;=0(hljbbcX z`Q`oEN4MAm;qOUXi+NXHzGi$mZiK(lw0}R}?Mt0@>DQ{uj^fK9XDKyX4oYGU@xeCc z0%;(>w^9wzLo`Dnie+%&fjU&UilOGh4CIN6+`n`qP}J2^85k}NMnD^-4Vv5Zop$J%4BY6&GpE@jVL1e<3^vF zEu>t2v;!L6#`^qJ&I1wP5iLW-T{@9eQ|Zk*QU_@OL~ESPK(5Q+R0P$tZ_Zx$Y4nBL z;FQ;ec2qJSG=CvFS6*ypc{|e(4at)iat8MTz`P}8aF$H@z2Z1?=8c>q(`ReJ80Veh zx644O=uCBloDu78XPVcbgqW73lXjHxLpIB_f~z!Gz3~aw8~LECDQU|P@(j@R7{m?4 zxL#>65Zj|>SIXMn9%R0}Vx|Dz#RX(A!np$ntQXFV(t6dtxPgEZrN;f(hDA@UjE}s4 zz8ROftc66Z4XMvHX*=>-pl@C#S_u5%dYIBupS^KSar&>l}w~Yt9N8RCQ>GOjc#`p1MXCKAg4`vR};8OFzaV#gY>~d zPPk?dtwu;;$HE(1fL3!KqYc8Sw6`>>!5s!E&qQn8v4z&}-P@PxpzOM$+atD$et`(( zzDKL+)mc2|?T-)S3~zeS41=NSJYTE>DwLzKGZWBCJn1LgW!;e9xRTaIf%dtWF$V9A ztfYspzsclTw)0yHNCpmO66%hyijZJPy}WEk&icckj~jWG2&A=Y8|ci!J8iHdXJF+F ztFDR#AoZ8xT`1LT;riKWsV>YF+eX+>LW|PSnDnNT54a{KQ_%yZc*`Nmj0CSL$XlGB z9*8|a5%XcHW=Iz7X1csPO3m)zil)oV)bvA4SCGYv%`*>ksbZvhr7lG0VrT>O0znwS z6u^58z~0CuE6Mo})Rw+ZcqFVzng&A_-W?_2KqAK4xfNUOO`(MVqg6NUNa5o98O!hI5MrKExRFat%YV@Y1Ke0NG~K(V!m2{Z}6+8fQQGK zu|e!2R09Z52WbyL%YO6OKYP>bqm<-Scq4rv^WR4g+}9S@JAEQN4DEwMH})IslvX9y zC#_;QMcy5C02*U~D5iZ+WJ+ylQ#U`+lJYamM9#vjlzjkTuAuWX)zCoM^LJ{KuexJGs<302M#aM zouRNhYJ0i9T~aNc`493|?1dEL#UEkyQw`!2bq7@;Z+s|cO;){MZ+wjyUts$>ZZk;4c zyCK(i(8w5_5>%fX3{*SwWSgXur88)FXAsdXh}{9x07bhPhsa2hb4S(fpY&6Ox;&sj z=%2h~AUqJh07!Q;yq*V=N(;k#piXhUBwH#+Ny3}4=!|C}C(` z$+lC9pea>Qt9BsQX!4FG#C4=uY7TCsf|&>iuTD_pjsw9|C$aipV7LZOlT*rRXce4# zaRrvO9MI-6y{w$0(#}mzbXE5vzKx_5vwG(JLYA#5TsUV9`>Cr8Y3X5Be)<5>t^?UR z&{%9ns!<&91hCD7xlw#fCTEIOUNsY5oLGBdLq8Fy+~(rITQX-_WUs{@j}{1{&PunPyy4jKNd*asaurket#c?C+~kEFR+c2 zxWKe=eGBd&^4!dgJSbzDA-w$nD3aV+6sH6mNEh^yAK&N-3ceb|X`F>Lth6j*{42tsbN{?z^-?E zOPvnUL7{Z~iPY??fZcDmD_BC^$fb~IrbSbt#kx@H#*JuMr!!iiR)#UbaUL-H zp)Qo&V-Ta4GB|m(Obo^oq?SVx96XbSi-vhWADvek(bz^Y%kt?^*8Dh(WObHem#jvjSuJ?#wR^Cn#-J zlmrD|KO#|5OM}5c<_2_4p>!SW3)^kPz4H2n@=fPy3d}?b>K8wKmUf~N8_=1jq3X<2 zU(PXr|2l02Ngd?T@^8X9O*nySiQGG&usdo?K_bA{0@O;Hd1DE7)S-=ynzE)Qeu6NC zeIlb9mbMNrZBW%U?aemWQB~~b)eGQRT~2uQ5N^~a>201;-DsoUIt3@vu!WX^B{ixx zRm%<;PfkVCJ`It>sT$aRX@mp0XouF*H>eB>A*LfK!GU!7ct_W(gri(W!D|fhiPVdj z7ik&X1jM@9_U>e;JJRSWcRE5lCv-F$S(|DW>7*dGYJ(u{l&^_~?@;ZTM3gLhZeV>U%?O`dT5k=L!Jp$Zf?qhnh6YELoF|)af4QW7D?JPamst6wpiM) z-zfC0&T#O$20796sQFVZud|JzCfpu)FO(^dUaZa4Q6v0c#gFA+Ib~vK}a#B5ec@1X0)py|Puc;P)(Qx*K(_)4(*cF$mF-(E(0HR7@+RF_x^!1k z)n3T8DPlYGK@HR=QtA^B6|-nIOA6q1P-5pN%DN#x857#HmVvoU@r)YwGR@U+!Y{H3 zoTlT2LhYK@8(8JtQ9ahboy&MDMQ}ATrnAWyzm(s?N z;q~B;?rQ38 zP#)CpbE%Ly1ZsV~>_?vH3p)UB*2GHkGCy!`aXL{QT-WAl1y5JXY7E1SfG6TMLF?K3 z!=cVX+?!V3$bsXMc;xzhPcfqdUXYRoxhtn!rkRw%6D(4(Q1Wib2nsYaG|Q{8RZ@AY z8G}5{q1+C1(=j5KM}Hi^8%5ycIEfl&GDhm1TUK7E3nRZ_QC`P3Z?R_ZUdV>`R$*xk zB7n`G0&8q{#FJgq>7PX|BNNtKU_g#fR?`E#`Vo@pN#RU9oziPMJED!~wa37XcpBF|fKyPyg3|(gO2KerIsLA}4H|yEWojTOIUS?W9W}Pc z)%op%yuT5xRe%e5tWPietJczW_r@BV)LYwH7G8@u<60B%%k?g50 zfwu|+Qqn?ty~>&1^4yMCJ>ZQ9c zlx3}Q(qb2{cck6C3%LZgylsZ0D+w986oDFsSk!3y+&luc+k?5f@r4?&p1hgn$0Et* zwi)!PZd5srt#*Y*lum1tCB@`MdO|)KBT7egJJT-=(k@&gsk5t5V_0v1En~uvbNLg=yVj@49K9p79}2+^%E~O#;885%_M0ld zEN{cFr-|$P->8j|^3J6gG|qa`hI;<4h#GiEPDZ>Qdl?|-fG(F;Ie#0khyUTOIq8h^M}v_)yjG+W(tra zT{woeExbP>X;5MYI+$fmo(<4oF_V@v`-MKc&oWy(8gu#{DyQ8Pdm*2U9qmWhq%{m5 zPx^&oEM4xmtXaj42kAh(+)2GmP(m>&oQ{sOQkpdfSQhgCIWg4cPuf1Xy?UTJr4un> zM(;#}YCnJDPH^o%GQG!zQtDp#ik!JQK-O~1xx6i$PTR6NKXVr7LLVYc6}0Z{fxE8p zLTaf8N?Z8K%5C&rzX{f^-wHfZKW_}Dt2#Xd!&}}$y`k|tSb&Dt&sE4vP6oU;@=0^A z;)hJl>UcP`p`qcrDEaNu0#NPC>99D9SV}m}T!QL;8pwP2Kt^Emext17)?`Q7k;46> zY){_gt0JjSE>s78YUL3yq-JZe2f}W|&6$>tODv`Yb%VVR)ADV|gWB@)CnYf2D8`ao zGna%ns)tAHb6DwWHtLK*$+{sG+vJcbg5NR&b6K~Ya3i103Xqgb`XX{ObAio-fa-v` z(7(<;AS04W@}exT|9v1oGM1`%zYKE0`U2UZIspo9ChnXRgHsg(>*l_YE+;fJqEc-@ zFt(rD4ssYYvYa1#G*s%KKI_f7c{V$@><_6p@V0yxqGr+(ALKx)A!m1;7#%N!Zb6%? zyP#^-z$)((eFUZab4e6btv1AMj?>9BR9IBd8J8;OWf6(dUFiCMqwXF zBdVN?XO6h*_8O*+<{n5BVjw!#sKM*{*g$mZ_C(&J5N-4*4rLJMJsx4((1*y-19EDF zz3?Dq@a0lBWQr5K=GsKA*S3qp>Q{L$U^2v$Gh42>y#^b+WC2~hkz)|V3>&Gx)f!!7 zi+2H^)BAx!?ZOzf1=4&HE$W3d@1VKPfy*&eIH=ASLE&8p9fG&s9g^&Bc%6w~h}M!6 zj}4-3fUlu~P__scvYNk)_Twbubf;=L;ZUbps!0?#(wza(#Nqwv zhPBU?IRSX@i4l~ z@wp#Ld;~6c>%A5TJuqXHMfw(*B0z9N^NQ|ZhG=~5{ z^&mWcd+=34OeWWK>AnH+&7OdVOyY;4k86c<+|oF&Ewh74^t-e&dOdlb`zolA04*>g zGDcyv)qs@b0LJg7Frnww7nIRa2aQ+;z~w4{e$A^>7u*&~s24!6nW6dwm6!KY3Mh}C zY67xio1r*8Ab{REK(?(}Yvz-6y&Vrm@ANo<^Cgs|eR&^b3ab@60H1)$VP(dP)$o!@ zp3|hAAeHKOG9YQkSOB6JPe4a{XHzKEg=}>oFpaT;lBi2*gxy_a0loH_&l* z<>?f|ZF+h`ELy4A0kY77!T^%duYkx%sO1TyXak`{4=*8JBC`SS08GDlUyF^yHeZUx zXbDir&w`GHI`;^v)?m|)-x23JIW;l(NyShk*bEdcFh%!-l#H2>DKBkvf~qxrM;*Ui z#;~GA2~VJHbgkkkE!t;CFJ7vieS4QMhi ztA^1F-@>T#AoSH%yzrjtoo1vP7UI_05&1Ck0|6gY*QsaD__Z_oU9% zem?RA7~pG5gGB&jQ_w0OF;WfkTg;yI_;$REu*bC?cqAn zfL`j%ZT0EE9GQX^jzBli*aWZDBtt9H z!q;Bd%>hw|0*#R^KaE{8z@UQf`b`J5=>6!e{pCX@fBQQs-``qjMn<-H)WVeSH(hrE zJvSI(P-}9+JR?e#XIx3k@bdFJfHk1>m_-iX9~;n>g+eD}h#F_cFoiKUL@eO#;M$EW ztr_Qauqem=J6BpcB{4uLllRr~l&?HM=9FGHfgMt_nB>rp19+qi3MVIHYks?(49q~@ zKn@;CY0G$fsEi7H{&wx?|C>PLHcpCX@cIOF1$;I^8S|KjZ)Ds+CTlNq3}by)4+X*a z1m=(XW~K-ky%H$UaeM>XEDLap*oidjb09^9=3@B*^~uaFi^Qv`WMthUBZ~}xp##B4 zY~Sg6$r#!IwFajwD=T~tmoLCSUli*GJQaJQ8#xY;i$xq$okOGK>vvKR@n6UP&rXDn z{crri8}LxJJ7LUf9hX%JZkX*q>i{(Nhy!fru~s4a{RBMYSF^H;>FUJ$jey?d2yF)u z;g_BDq4C85CKMWJ|d5Mx@j!Uw}e!cVIW8hlNj?tMwe-m zEC7(?of_i2bOQui47tvSNN8&2Vma|0cji3+c?#kWT^KMUG{CMM;Cj(!)ftDFTnR81;smbEp`bP8bdbqOrZcP;%7YlK z&=zZ6?@b?J-H;lJ7|d(MGU$ORX%(QqbJH?}Q5CO5l#fAy$Q>n5kqUB&T-!1Fb1}?bjYM-8bO|vBo7@>o81z7T9?+aZ6r=~mNOKqE0UWUL8r^rhK-0&G&nv^OqkwXN5RJlQ(-4kVMlGD%=s-Uvm+hvsH@#zy=z}Op&iJ%lP*HT!<(A(tX)Qls-z&BZ0haQ z8Q$FNN}1FXta96Wp%y-iABj%-u=2K|j?%uQda+92_cScM3dVywG9ro?>`Y5wtHA3< zA-osLlLoe>#mYi;DX82KcTmDit0bGm0&8R~Ky6LY?>;y8ciJR1$XE+_59H*n_Gi-_ zNv>cifJXL2)4N%5K>X5Gp`M-D4`hJeHW(HE<;oR|Q^Auv$`t}Ad5sMI1dR%>yG`)= z_4pfUUqovQAubCT)q;0NSs+29=hF}5!9@~^2XAhAgSt@a;$CrhKW9YL721G7eV(iN zpnMur=gCOjk-L=84Ddy2@(IAqF}6ZyZjgH65p;QRiONe+#4J~(?udT2ldw+Vb(sxh zEW+Ab9~RKVg0%XIz%yp`FB$1EFJFO&ye9>I&vpZAZXv_Wox_a#9& zPdO!sr0ODGV#*phPe5B&rol!`IOUOXM{dqK4a{ILO)$Js+7o3&`Bm!5Rcm>cF```e z%N~fn6qPk6_;4}kK3EUbVLW;Kj=?Hkj1<4f$jeWS}kAZ!V3fi?)O6+a$rz@?6nQ`z3WH$ktq_PJvhO zw;wvs5;p$h%qtjRb~tsD1K)=@Arj3kXJau3v5dbQYG%$F1FuxiHbwX`3ri}dKS zcNxIw#+uO?&KF7$3A8#wPahZyG8b8pqiSg!W>Ch4Cn*TM9ZrL?H?nut>9KdeUG0L~ zvLJ`ULZk6(hRm^EsLKb#YF#K{2hi$W?%+}qHjVP-LaqxKF$Q$-qN&b6U>4f29>}(n zHVG8&uYf6#tQ*j`gpv@jM2vKBW`hHfEF$e1k9mnT)SX+ueqL@U z92h^EQQiYF#-K4)84OSzRbX1>h5mIP47r`psaxA67c9L{Ti&#+$TjU$xlTLqa$~?k z^pe99xicR1XGPKQ9caL;*qWf)-F%-~{m2D^QfR1jo4{2nVs$Dg!Hx_tk;RPxXg9c?24{wJ z=@F35?9lZzK{)d@3$__}HBxt!3sKoISnFcre+Xh(ucRCKWOmk`yw;R$1l)J2J5q(9 zVFJ=#HnNyzgm*{gltY_bF+wNyVRs4OJ&@OFd1#|mGkJjUzt)3*%oF@^5lh6s=AML2 zXH0OL_C{9I`yZv%CVPhpJK?f6d@>28rT3iks(K240h27Hk1N&Lq@WonV=nB<9%ZK8{Qoyh1pnr zG?(qJHlbe|fcHk`@@6vz-kN+Q8EUi)^zRF`?{O+x-h6_FXZ=hhl3Wc2`J^Au1ED=B zuHW$dCZeycVXtdPnsrk=q6=<2vVH=GHFNX@RBC|MPB|{pfGz6=ynhuEnH9OLUgSWF7S!GzU-z>=^_5s-X!9#$;xI`$BWvCE^et#bY=1aR9zAlA)Ll0z+U48tFeh2xxoe+U)i+F@Om*Rya(bx z)@?tfAGuJwWxP$chaU=5*K=Tbj^K;q%hu1me zMC!7%tGH`TjZF%1TQ$nj{_>Oo(o`;gEGq9ZcT~Yf>i2;+((7i-Tan-Pl1TrVtS(wgohU1 zj51z|a*I=%=kFO~*|E2zs0w`SH=Ur>Z{DD^DqdWU7y8W5{IyJs3vY$Gae{H$kjp7) zZB`RI(|z$`gVI>~w4iA$Y*m`obT*#V&4aol&rv}8q?f{ri>f4dp5WDCeIWdZplK}c zrxd%mU|)Yn4jZlDI@;Y%abcp|9gW=^vBu_j)JuI}-4TbfQqelgR3;_RJ%n`!?FjGk zZ6jbFk?H~q&IO#NzT41qg)hy=q72R)M17$S+i!$Ns&}5iOPZ~cZsbeMnrQ95k<-G(!k-uI7%H0s1t8~R)I@)O+Q=LXVVP_!bgS1_HfI< zM@p3RL;ncdt*N*WC3kH&j8q{oLXEgQQ69re%;bRuhZ+mRRI(xc5^1PP8bMPS%t&NX zx{#9x6LLsX1TCYOrjWRyI112e3G^bu%hw6y1zF359O0n)h)%GmIM~?KiFAda>7Ayy ze4a*0p12_=0`Gv8QE-~&MCpgQA_DIKX9QlSaGnGyX`wc#r|0q>V}(+~dVos7)h{Oo zL{6f4b2xH>gO&v*F{$(Qi zAE>;&o{Q6GPFk#iouyCoOY7+RIFl5~AeNPttI?Dv@`^MwYo&EZ&BPJFDpL94ID+Fwkv5b6h-Vb`9j)xT7m9KD{z|EzVxd@@OrlQf%Fw~vNZUs7RzFlV+}x41wH~0C)#p+G1BHFk;@!vxUC~RUBIQjz_15f# zkmh$Ar)~|;asODJYuD<@DJ94_x~SFx4T>B;RDsY9c(GV|J!?WXNojkrPS^`s3uu%r zC3PVp<}LDG$U3@>3~jy<&StD@40t=n4&<`XF*Yh=zlq7$M$(P)7VQRdXyB9~^9}Dw zwI6`(%+?G)ql{=QQJIb}UvPuyefPYqMh9D(Y6ng;Rw+ImoHitwKURN3I)l7`{^RAA zB{=8!PQ;d(C7UQ6o3fGW?LR!Y0l$U?=NCE_sVTRqT{24Hx7Tlb`HiT2^o27Ar7^y- zBY10D=JR-9RZiaA?tY`x!f_6bj_&(;fmofR1Uu5dgXVCxOkQ47?}1vE`Rrs*_sffFKY*q4WCau#>XGVlO^lBubwgj( zXj7}IbzcQZoWtC6S;#7ucr~G zyDluR&V^CSHU|qS*u+oI?^{3xn8UM88Q$XcPbS)``@di#wEiBh|v>jNe2rYmIulhS*v0 zM8+tk;UT09)CuU>KUsf&+`wXix^Q6UR^JTB^KhPshKJT^x%;?aTvm&h)mV^EX6X&W z+@}EEswuD8Z%{X65DA*A)r@n4iQ*2jCt}alsTNv&d~xKuf$jGWcErsa@XkFSZkC4E zcJw<68}b_v@cIP?%FE7|z9cweFW`4CtP&KrAHr$;KWK<{k8jjQEQ@ zmESJD0rNRMHm)>uU=~zx?&w={0F9+!WcnQfG4kNOkxzc>LO|>0jaM0^uicq|dZ1{C ziWjl04lQ3UME7V-sd_Z*Tv=mQql~Tan&>3fCP3YhgCXl$2ZM)YP;gWDk#r&xRHfls zhu57fu>-RET19^G%v0{7>LPnrC=b{)e5gAz=L%Y#RJN5I%dUm!u%M3{sr|$mtF@kv zKr>meXk2#0W{N}1#Y{TF%?2T#5BT`;0RI5uYr8~fMV2B;S+gzn|ONs!! z5m_*u4Xb$+H!`hLl!Gl&buIer8`+Z3NN=HK4g42l%-_g*$!onnIe=hq>vjL#(FZh{ zp!NDxc{RUa^lV4G#Z*n@Fj1!rCh>#WKC;1XWQjb;DXlwAQd@IZD=*}%gIs3s|5zqN z&|=Ku8@T|`C3kfUH68`{&kOiz8aTb-C!Cr0z^E_J?a1sfdDFj8FC4L;NJ3$uxtx|a zUbVdXqIKZk$mvR6ZIV=1Oz@)4MR{_e=#;5C;pM&wsU9PNcSpaqU^vBOKhH!%Yj z-W_=}nzZ<9p%yckHe}2HHnPS$adj#;RW;Bj@d>^iy>Ld)LrjUVwgpymK()q`&y`sX z^RqCr9w_hka-Q%emPpx2Qib2`$1d$ix5DoLt3)pY#!F!_A z#Fal~Fu;^DY1-e2;i#N67ZIdNwFC$7a6gPj%p=rKL;l9kwsVQWT<8O&BLvOtlJI83 z2ds`m)t$SLCqhJ7xI(2PrWjL1wZPuJ^9&I3hAdH@og?sIg&14O*@ z0wl&$L}ryFF0t<`z`)757+Wx`t%Yof3(WY6$P8KD=kj5R+<>R=rNpVVWX`GJk#nGy zC60l-cD}qQ;1hj(x-zX?CYWibu;MAm+6ot#41km$*sgFIRuI$Bu!3y;LGA;AdZ!oE zY*@MKO6%{)YuVHk##iK$Z4ebBR?U;<9;k3dSu%k#*-5RMdvWv&>5D1XAPdB-P=L5w z{{zMT8dWQA_1a?)@?J=l$Vp&|kR4j7cG*?H9l7~!5vF&)Itc9!9t2s>g;Xv}J8I}I zn;3P3_dq(Ev}QsgQh)!n?KzAXUQOeT+V@Q?h1X<0sklWiqy>P6PtztdIYx|9`sIz7YNF?*wqqUc{;1b7p#hgXBRBlOV;L|sjrf!!qnvje2IUg)3bZfa^IBHflq zKXS3K%GCm0$e565l$YIsG+E7odj$}^%G;_;3+d7co&F%wa4+Nm4`~T~Ld`@3?ua>2 z^$}gITvuQ|8!P8|nj%}wTx$`3S~Ju_Ts==7!XVnjY14X!SKM()8j)>up|n^l+HC=- z-c0GU{COec8_@h(4pWHnj`GrwZ^WFW9Og~RYYb-f+W$c8nkm<%Q>adBJgcVjoE%C>cYZ%AcwT=Th>qgMd7bh^g?|}NtaYhP>I*CPMFQ4 z^IgtZj%=k}Ai|uL9OY3%i9$z9I3K`!l_X`sB9SdsF`ZBpYSE{o0;x3mwEmbgG}gY@ z(AXJ1bR1rjhEjD@-_XGmjlo}He@_F;`23yO&1h%@x_wSlGWcZMKxf6(=-*QktRtK^ zve68(Sfko`B1c*+YVXKC(bR9;BB(CcNjB ziMbcf8~L0$pVC+yruqh(m5Sm@-4R*_ss1@c?tl(!y2-237a|H$*1FN=bhYFZ5by@h+)#l}%LL(1)lCC9nRgTo;zSr(&NVi9S-I0z5fY;VsIU zY7Uy&zKuXsWcq{=0q>6L?^?JN;F?XpEZ&XsAePa>G3SRj8;oEkXT|bvse`(TGbDgv zBVb~%4r+_ABR4&yF&ZOxCP72ZJb9o$=o+e!MLSgQCKNLtABf;WC#Qew8h~S4U5kD` zzz4vsgj>PDx_XqzE_Y#Rnw?3o@qmABc5AT6${c`dLV)B-F4c6?1ycEYG)VLGwFg_wLZTm#l^V`W1 z8oHe#WG4m8xPZE&zl}h6Z%KIFNa9(t-IR1ApUfT+w62rD^$QITOWje5;C0*;+Xc02 zT3MadSQHm&w-eS4=$Np!UhS1^BrqOwIAbCfs{7bmY(5D~bc%8XZ~!(R zwL*1$i9u+xg*5DmGB@)=2aePlWk0w41RnxdQT%Dp!ZN0g_SOmXD&TBOL99n_s*tRN zrl1ZowO@o?$osw6QOrU+yie3NO|Q~r6^hbWxEuLc0}1_RsBjkjcIt_e1gLUEvCya# z&ipu7Yb^)({Ub`&uRTMYwYhPR4PYHoPz>kCC!lemtl?j%1!K0N?zl@v-7O%7=!M#9 z>T7xR`Y53bdU!YV+1a95I8eRA0N%f@sDm;^6?u=Cv>GioeGG|%Sth`Hpm|Fp1?~%U zRi|DBr9^|;1`P2O*946eH&xq_$_9;--mO_1))9|XzgGt_$YKV0<`Q13-{FH2Z73>H zt@i**c#T0J$xmCud!P=bZYfCZ9RG<&wIQE0;*OkdGm7i*{dA@FLi*6^I@+bAXpmcR z+i&NSsaI^v)%PB#vkj^j3%Sgph}fpISF82yA`K5bWm{mvTS-iT=#@V{$^5V()zq^? z(0WD=tX~I2-U~Er>`~^t-vuR{j92x=qV>1?9Rg|_zOS~a%PTk!#CVgJ*(|(9zQv4f z_K6noxupL>K@q|^p*I%<5IY+VsLD0@9ipFXL8j^DMZRH>Uv3dKyvM1%np%%s!uv#Q z?v$4}vib^k=Zdb?)p()m>#Pmf>}mfP_&C8=#?ts(5S5BzMCcB>qSsx?`#pFrC!+tW zSUn*hWZm-sr9}UXKjcX>a%EL@*a_N@Cmp4A3BWFmo7Jcyx&*Ih{%_>PN+8Wn z%HW50N0a~xl?|sZ^*jmZ6R|1Ns9=v$f4bF@5}CfXp%0LoPg=Gpg^*zYrbZ#|2$KP= z(-?a+8bEnv1z5|1UtQbuIxL9lJv7&62S_EF`wS^d5*XFqC-Si`l~N&7(jv+JwnIGyCGx#(kLE%Kuz@CwH#^J15pxbIE&%s z%R6G%zdU&(D{6oQ+PJ^;rq%~6?+a-&p<#BbF*>=yDs9qlN)@&A7q5oL@#bm_P27-E zwKN{V-u8H%SeySwOH7L3-ltE}5$tt70rt8RW*XOlLd9Tp>OE2N$E2ly8Gl`jnKA~i zmo@R^pk$eVs)_Czr(zmRc%KLp)XA(D_iDa~1R?3W#?^v7HbO6G{WKFjQvI1|JMIOD?`UChz4Dtqc>R?rK1XE?k%gW)v; zU94B7PDau~71O3w34?#CUner35Ha2r7O{pf!OZVYC^yQJZG@%*`O^9VrhB{)ml#Jb zV1H7hQx;I&-LEQP*Yw%n75%!ZS`*aHhju3u?_P-;N6jTdGpR$?Ltl0 zWZL6kzLY%EqS(1Yubz}tfjg=%WBy23{R(;H|FvW{QcO}_efNm&v_%p2 z$I0se9?_Q6E`Zq18&0l)me|KIHh`>E6w}`K(Jf$dFtFO^6bxuoz1(&)Zr?b$q zXGm+(@UWs}uY_X1=-$*8f`HFf3OfGUcCoLYT#)vAw!%p2Ks zF&dX`1vh+UqJY#5ePJySJNpk%>lpoYjsHYGnI0LB(}T{L!Qc#SN4o5`^5_7*YfO>W zkSE8l9V9P?35%4zonZ10LujNE&8i9X)B9FyWSP$Y6Kv^qPJX?S-&>cK{Z*cI6IRUf zXG0&Lq@+os2*BA8RH0tT%egFW9GD1d@i9|Hsc4ZOkCr!chtydNe1`Q2lAJ(;#dUzw z)hv(;&YmETbph{gOv;+_gtgT5V9+@Jv9k&y*Fzm*7!^gMKsIzkwT)t##uY&cJD(_P zSHy4zDLrPm0I{4TO7Ctcxf9OaGjcWGK*K_0y6qtQemNo-ITNXHv5(Gd$Q#2EGl@r( z&nZ-oAR6us6@#oMY9?afx4{~|_UJa$A3K^67iS0R#Q(h-peThe@=!Z+J-8aV29m+< z+`+q}m7&2|_3+M0ic-V60WVxtWwK0w=oLUn_29#SNJHXmvor_UPqUIzQCC@S)L>^_ zGpMtX>Sf9Qm77aNYle7DP^w0oi`sy{v)mPHjA_uJZpd3opm6}rijw+a_ykO?UdTH` zp#93E0=4mJqo6Mk&FFpE((2=ylKetmzOGRIqyQRvu!|6QJ*vJCJI#(j*FU;!Kf%s9 z#xRllLJh~-7UfMF(2O6lF5q+CmKP}_)l(W`o`ia!df;XyL@G%&mhT7u4ezAbEY!J* zPA{+DE0>p{0PlfX2JR2G8=%(8y8wKlogT>;}W5gwF@u~Wv4i`elDKF>*Wo; zG;OehPVGk3!^xzcZfJ8k#aqdRqEN;c%iH*bM|UWJE5TH(sEd(L*0JIB_Eo7>ume>W zSzVR2*2DvIh)qg94;J|WsJtXo0Nd-`^wBGa_dpSw4+VtSWwKb-3w``#C%y~yeh>@X zYHNvJKy%CP9{v%9HPtIY?}6;o;pkf73Gc$oYz^;$^tqvFVU*-D z0_>vpg|hVwjpmEoKTa=h({~(f2&dJGdXrmta~|Gj!}~<2s5TlJ6A`>9cN^Cns-j3L zN^Az+Hks#b(h+_D3f>)MO$BfKCaA1MB8f@8C~qC)yag{hkTUo+L9ufaX&yW35To8I z8L1lvFW^-lPc*C;hp_60$%@wr>yEgIDY`-J!<&s>c-027JT$xy)F#6*4DXC&GgILO zRT79tS~XMe;YHml$^C>EGK8U8$Jp}2bu!waulq!K&|rjGm0n}qIAe?R(gU>_!mFgd z#+CgGWDFuBMfGkzWSWs85uF4;>|JP^tU>f(Ur zZ21i5A=ZNxQU_^Xd~(Kv{ul*9k737*<>JrsX_|NIKPln9bh!PRi=aGdjh{L4xc&lqlYvO zz5um^HCYBhKIp>CQ|!pQIjLaUUs!JxEvo|b3RX&*%_z!)v3sK`uO}Q@ z0#^+3{#KH?`9(hImC{yZ8a6j#05fJEfCFvQtDTs@dIfOOSpkt!P_<&*^Y-gO+v7mK zy&9M=DNEJHp>*2L6XmuyX!wSeTeSzux&g0nQ|Du~Af}nkD3NmmdUrXP8IgVi1Za95 zoHzOarI`{hl;k=KyUoyfqk1RJ6!*b357SdY+HDW=iFBAj9fB?^JJq(Wc9e~BC)26b zFG6ZOYk(X{ASEp{^BhW-iup+vsm}JUo;NhSxp_+JNOA^vqdv(yBX{N^*4Kkqf|o=Ox`I1z={qqh6X3CuRRY?f@2@BFi_KqIFZ2P* zNg|zI#^gZjsa%NkL>7(zzk!5r0 zMM{%j#i^EO^G@*FT@d_~&T?*#^hqpSfMw%pfw5=+rY3FW&8;D(q$f)K{mgNAf7SCR zsln3SNV)pg%4y)5-t3TyQ}jlCr#41Oesaxcjf1{W-S=Lm3U!pv+=n-cS?fJ?5)G)* z2}b;0h;l;fg@90VA{k!%(jr@IA?Gg;ik@bu=kFa4VGV6S4IrvoM#c{hatEr63*@O< zwB9ZqOHobJDbQ|gsI8-WjZ~<7*~a47T0tp5QI6qSt(ifSSqrbTvR1CTUgXz*l#^2_ zP(5Wk)qEp;2%BJLg{1Q;H|4#N1~QR2XkD{{yBadBN$Q5;MLANJ+?p2Ct;5@K+_}<^ z^-zX>cv`By3Rvgxg{qCYWJO7FB;k$C-a%B)n{Cp#UsZ7}ua6xlOR(Ns4b>~!Er83E z7t&R-uv4+z{s3-OK(Q7@%Y3cbxuZVLG-7wukj@u+lH%5+qnTFn0v0E?q0kG&u){ga zV4n;%lh~l~C3=mgRQJfxTL(^%RT-510}#Wz4OW}zC7JM!O&l~D#XX45O-!9_6t78q zpEdl4?pQv{HSNj`D z<}bnPs0#}3Aoq_RE>5zWz{V2bZ7&VVg?)M>-hN|c>M3}z>V?`dhDF1guriOjyF`){ z{pCvsnG2||mhlYLZ2>U0Tiy-ja5XgQ+aio-=PJ^s&mi!~WKfLF#M+_OGPwO9bw{02 znYdcq&bTJ7ScD7x^OGE|w%8AzfY+R^RE9e!-zb}EMu*Dkh7UF46A-dy7wtxMIJ^fm zVv|D))d519QeEVQn7WjcGuu$pg(G$Q-Q`bj>6WkI9(ToG2t9KdB`xn)v&1Rt4xHSe zbXkB@TM|r1DfL1hLG%G@teOa@4I6p?xYP}KcaywTagw}@c7wwTuy_MhJQi||w!_(l zBqr+kt)XLS*vTCl4~Pv(KT)336tm#$wDzEexE|~qnBtJqrH<*cOzxCM8o#CWx4pz~ z1gAy4>NYrxPmnEeIdRA>nMb?iOwA9FHmO?!BklktsXlFhbd9Wvv1WOB_PAk1!+F6I znPr@U_1g2F;7WB^Kfnhd%NVO3g*Lq{)%8|Ts0V6z#T#)b0qJhjY0NAel4i=06|Th+ zr-?P-p*~S^ttmrS1MsFrY^&q9{tq(IfxJI?%wp7(yMY=B8T1=}FT80jlE~Tt-&(;P zk?rN`14U_B$@3XrLzF>j_oCd&Kv}zhCDBKJ4NR;8-UGFL#=n%B0r_QgAgFI0lrHkK zAkj?D|Bq=Nn#*-KN2udUL`;%hR8K@ZRwiogW zA!wd^X<^%&`j!+n!JFR$bd|IKu|Z1BTjC_VkkhriQ7@>G>VXssuz;_~-M75ImQ`G3 zbI==jR* zTaDz0H}wWtQ507>-c$bMrK&e;K_+iFS1&B=987|Yx9=)vp-8RFu})@MgfnfsP(y0H zA4%$zRqytRd@@Nv)_Hm?$ys15uGDIY=oe`>OfD%8ldO`4nnlqIxqnRA>GZTg4zz)3 z@;uoV0#$D6nK|b19$xC6Ri+ zN%E8dLEs+!fxca7>yhVH}reUMLM+?!hnLZrjeSO|DdV=A0V++Xl4-k;GZ8);8Qu2 z0tL4-uOF=6eNz|eM!g4p7H>T6j{f!JAo~&}roV;PZ%vD1fOcTLLdnJj?=b)65LMX*$G6MjEx2Z>RZuwBWMPnhsWUD(f5qnRqRAJ74%_2Z{(AjFcnI+ z(k;n9{|CxM5Jy8vRaP(k1TIpM>NFW`jeLt4tgyb2#Wdl)O&^7fD8X9aa{<=zN)P6akN zQu4vzWd?d7D$r|;zq9g$I(23e@f%sc$Z7Y=VJ%Sl%mvhKWO!jx+Q9(^BQ^x$4vG?| zmNu{^D5p56o*- zk;-{@aTI9XxvhiL4J4f#KQc>dh@PeANu&3%q1Z(uLA`u4W=P-w|Wp!6k%uN8?K-8V7NvEaFx_HsphI$F-?X5t}Pin*>jdlTHsMJ5ln>33cZ19Ml|bHY`fzz7ai< zfa)q*w~4$!UKK(cz>!I{^XO6v=Jn)aeL0G~A%p(WZt8a8>0S{BFDQOrkrNMM=!tEH z5oCX-8FthpId2^fZ|?hfOM?bQq56-`?Nzt?H(qa|x*J;i`kDtNO$w(UZ2W(r z-n=iB@H}rNkoE%Iy8C@KStG?}YT0Bv(z7CDU!Rsn(guU|H-oIOLGjW+b(Bf`um9`8 zJa~8H#H)6T7px=?jVgDj3q^-s(Gp3iPjiOfsH+m>I?ze|)dxT)JL?NM%R<9wmbaTS z?$yY9p&xmYA;E@I!j#~AAx}*8o+vJqwDcTmw2wxrci})vTYJBnpbir)#)Jtr0AiEv z$OsQxI|+|T)f9o*XxLDm)ZH^rDy|@Xs^$EPKzI+-`blsIBIl6Q&yAy^yrd{=T*S_B zFpvdm|N66`oUVYD4?ZG?AtNgsw*)QnKG6Sq$3TD=vhWbmJH-8aSkL;(qci8 zWBq~X=)+6D0N4KNd|kj&0#;4)Ap;K#m@lJLv*I6!R$v>GnXyt$+yJ*#=D7Z#T$#as zV?92sf@2$8({rG_#QpM!oeR;u2@Dl>^xX?`d_KH$f05HEya#eX@=D~C*MK8fCk|e& zGI*jCrTvmVWDjT0y0hRDjp2rd^oX51&FTN`Z}di}?Z;ltCQ9^ym(CSft|v~=Mlp4@ z%Jy=!c*rQL!(%Q%8Zfqwgaw)oUhNY0*c6FQEIZN@fM({dtQsvKo#=&3Hi!0+_%+nz z27%S~i8APIPEtXlEf&H3BUmeTN4dccTI-9$0Saj^XsM_KB#k+F@Z7V(QZS<2M8nO2ed?M@v}+Pytp^hDY2 zX6L;&63^WkTr4ZVLJIWa^IW!EL(5CNdgO&X)5CM7WJQ7Gl)Al-i>1_5h*POz(^_r; z!s$JrXS`t(GQfq+Xl$)%0q=5I<@~|WV6c2lY?k|e0smHkjsu)weEiPc%giY?Zd49^20rE- zHM>!t>pYi@>`-NOOuT?Ob><6AiClz&jRVT6BX=P$f)I6?NP$sV?BeBxG;h!d3b$5m zXi}9c_xFylK+ZVmaOwJ zD4|T8qXf8>YJgH_DWm2<;~XWw5?-yCZdQiW1yXy~t)wcDo6hvO((DH^LVI~!jOpHO zsp;Sq^Uain(g!C7fa)lar(^8M)0m-651tJ4 zf9wGv=|;ZA)NOf*Po=JNd$t~IOTsj)iDomw4qsd#w#9#$wWmWXq)u-2Vg*VqMu?9*j?7$ES6s$)$uhc!(v~<08FjEFZhBI7A z%?y>xrNNXTJZb?MtfZeAv;zIr*t0g8;q zgZw~t>sN0DDs~>;BvRZ+;}61kx79Q~U{r&54qz@+F-rx{e&^9t?}0q9Rt%ybtIV{qp}xDgKD{r08JOmx4+$l3h#joqqyBUR$=l-h+RaIRRXnU z%NrI&jezo27j?$PQn?4hfJ@VBQ&J!GgHNLs zwG|Fj)w_ewJ3W)jvwp<5NJ$q;F~7QAM_H#=scnZHjhu#|sf38xP$r#YA^Vtersw|Yj*^+MzVtvCvi73La)HH|z`i0kd#T0r#}}FaA>F;a`gV*FjUK!g`VrLe!#l(K;i6e4nwUp6 zWL~JW8a(n2`fW&iJu8w z)(v37-M8Y7hN|jt_TC5jI0|gY8ekcn>DMCDvc?BeR|opQh(W_rv=`_QxR%E-*+({H zzl7Ei3Ds!_>}Uv5(x8|gP-Zh4)6T|guo1BC$g^J3^Z-Jw_U!SrtK}ux@!?6kJ3#;j zc6f8ApUNyY{aJ29!4Tw}w%;IA9fr^@;uwa0@Lq$7;@7J~$2n?~U?gNRv$i(diHKOox+oM;HNV zjUW)h@}xPKN$Gb`sDq4@Lt_?84LD?gG@oLhATd&Gbz@!IT{fy)yyY z@5We2S$P7Vn!8QW7d^h93TIrXo*D^K)87 zS~C3#IKMKr49M$ehYea^@6Dxh9w=4dm$zH9Go6s>Der}RvQC57e}#223SFFWKFi_n zToN!dLTntToW9Zm-h~Hec5s>WiV|r7jm$aQ;zoz8dXUVegNz%1@@ZeGtsOJ<{sX00 zy~hyhuXaQ)F4&NT%$|k zFiwm``D_i%135M;w}BY&NUF)sbf~0SKI6_H+8!M)J862+3wb61-Vaiu!t1S_VjX2p zgKo&3aA*dY!>bD>uaPTk^My43*|EQB3_QuFItVZ1s!Dy+Z=iM*aOX=TT__r*n>Xo5 z{m=+E-{sDU@>yzV45C#FT@obC0&ZgtEGP7+UWhI$jfF^Sg*AuRo(!*7R^6xzoZg`& z)tLsWyBQ}+DuA?^-B`;+5*Xg3pp`1Rv|a2gEV-Pptj!H+ z;GlIZU4oJi@kG}AU*~rgeYI8MK-a7X@Iyj!c6`t~UH`M%HMJ?oQZ8hYBH04nF@|an zBuB{fn-{7E?gpo1DJM5FtKIsYry`-L5U8d#CRxG2;|uleA1;DJC6p>JT~J=F=8d{Y zH*vDOCK-`F;rl2yN?`RkB|k+wwjpYB+a*h9h$3g8nv*O}<^0$H?4nFT~HCl}LTSxwb?OEA(Kb39$e1Hl&>4U=y30(koz^M;w(50q(y+%7%8QxPJWlivR%l;FJnZD=*k6NsXlyUutad?9#$|4oh2N+=GVP}Gic`>exo%BH6P zWC@r$*#N6cNOg0p%@9qiJ3wxEgR|L8w2ID@x?>oh$X0NMvB-Hn&8g1=#tE@;cT`qX zn|=^h!|dq?8JaHm!viOK@27JQSM!Of^2Xa_9yF( z$~sY^AkaENo5G4iYwbl_v)ms@R~=f%4ZMy9dFeAJ%FQE@+tKjtVwnnaG9$LSBNunj zm_SowncnGd;dH8>-`=F+@9uOV#SsRk*_64Xwj~$Jj?6Jp-LN3XAd&{v)aga!{ePU6 zk!#WiG2;#8@^5HeB(m|$twit|0)p4=?HidGE?NQm1m(eo&4|yq;JwhNRtMC@7ZC~F z6tIr*3%NjnRx>WOl2}88cOg55_xr)?wI(TB4sd~W-Jy2GE!4U7s z3`Om^{pgd}Z6|mgJ16oZJJ7sas@qq6k0TV`Tw!1@3Nq1GUixbE&F8ta31Mxw8PLhM zr{jGmCWj}@OFxhi#?;ua_Hx4$solh*f^5S<=9qv!I#ILau9fm?V>dH5lpEdQC1iuP zS#&GOOSX%Yw2;{npjZ$W-6^OGloL2#a`tBSe!X|o=PVbip$+9TmeA61S<<+QL>&kE z3;iUr1+6h$+oq(M2zE6PBFiZzw0Q8>|e2ikAk zzQ}ct30@D~!)r+WMlSE{6|s!??^V~VcUX5+uZ9JorpCG22OYfoZ!gz|^37|)m!lP6 z*UC(&*7_jEhe0h6vj)82<#tj7CmK`NPXa>KKKiUPbWkJ>Y9|;EOlq_>ULW2k^6C)f zU^1fvdmWL4wS+f2AN)6{#xEDVNS#(Ok>Wsh@yV z$b2JsZR-Ug48U|>PCP6z4S~=F)Gelt!-7lZugd(RyN0eCGT#;{{lXR0xVN5O{7OEJ&Tf!T z=DX6Mx^`eE8je%yxt}QUe$Hs>Dkv$b*x>4Lpw_#WKBvv%^}w5fzJuSmV4nPptur)` zdjF*QY0n+y?l?}-)`roibTT*_TV9ZoE|gmL3V~>#J(tQrLGF(7ktAq!7+nc4<%4TL zk{)y;On@{7QRLFQ!y0q916^vR&dJ5Z$-oRL$Ceby)P2*)>` zHc$2*R&ndvZhL?v$8n0684O*=g76kr_eGZSLJBoTSXK?7#bn^{;D+4emDZVz5zpxI z*&Ot_fY0S?xKQd*fHfE>I6v*9? zPVgVEX~`T36_)_4%|C#7eNgP*(!Ay@Fv=c?kcG4+LcojG3Z-ZIo|uR)_;1!Ct%X!xmlD!Bt{^{#eV=F^D{eASoNk{21R{iE9*dEb-pMo z@f2A7ype+FVowy^dJ!yCKO-j9#KIR!4d4Jei$G+c$x6!{2=m+K@fv1$HOEu4@IH|T zvfU^~4r}qSYK?`s?-F;E+L|1Eh^;(^o17mO(mZ5<)2(O;&8Zr?7BzsKbW>pgvj+uT zykWvTK32X!&T ztC>E*zp#1mK9HBF^etH1-XEmT1S_3j-LP^a!%d(VBX4KX^9Q5ShH^)cZW=UZpvcWf zPvi}2^&6mz0);uRoW*XdD3whvs255-eDF&V9Y&uR0|kwK>03F`rnW^oYNEyK8Vk(qPWziZh3cDaqi!}0}AKTv?w9eJ2jS{Hd30S3I78iyB@`Wl2Y6j~L~ zKLchX2iE^Yb-ge=bar@|-EGes`4TVHkk&|{D&ayF(~kg4>q^&7oq`VU zj`Z1{ay=F#{$|g`fwYis>162OYPZG6Ga1IzdrZ?0%rzz)=)J9~|*^ma;tS#hZh7OD%FP8id zlxem*DNsH7!lR}F7g^ASh@~iYOrzhi5iZszS{k^BS5EsTEt#9VE)*IKfEbf~TVW~J zZ&n2=yMd0*MqMQG;Y*&h1&fp;vQefBHRJ$h(E`;&n^Jc~cm*04;!ZQPTkE^ZyQ6m8 zpKC;VRhiEka`3GSr5TuWrDYp7g-Nr}k5Ay1pPbn!ghQDs6bT}+9a?S>WdRb2PxQ}rgGM3yZt~EB+gEfUr54eC zBIefc8rc?Oc75xHV)LN&(@gXzCkb$Rzz#-g%q(&Yd*>|*-2uX&cr+~U|6||D2fgLo z0pp(gRp|ufbgaY4K#=u9)|{UZQECECVAm?*j;tN|K@@2*ap6tv5sX%nY0SO_b1%{` zfo8aPr-qQqlei&0R!CViL*(eRkfL}v7;0j zqiM_X9?coNG{p;<-5XjOfxhbu#5Kt@?E#3qs+}Lric~Xgz%CPr70`ooW%d*37r{v5(*|%xQ;&%}L9X()bx0Xw;0-4&07gJqH)LNT zgN*tOuNQWT^L~K34bUGpBXKk}y-17?hSUQ&xJbwA)CKjzxddIujAXN@W2#lai1k3* zO;kG)ZBj-*$xskYsoftyd@5dVRbRlbwE%kjO`<)LG$h8r2}MX1M}x_3y|-UGiqMQejnqk;rowu+F>{1;+0AhsbmT z*1XI5M7YYK)g40t9f_o4E9pknJiI!4XQeq|&Cl`27-az6qob%vKlj<_OSy{f=6~1c~+I zPvr6)n)WyKK#s7IezkjALt1(5MwXLl zM#FR?RY)DUuTb8!f_dPwM!f}yDj~)B4Njiazc#5L)69YN5!klJC`T&U+dshOBqP>b z?i+co8{|>7@H)wh({DFmOj%0rqo>vljP~RKQg`IN%;g;o>|Sn2kC9s__2qOAtzIX^ zcHZeGzLl^eeNeTV3DnHM@Nxk(Gs%TAo9SS9emy3ciO|3VxYPZC91hTwtE8zTJK=$F zT%17AfwE9zIEY3U+?c0qCt^R=nr}m}vTJ1z}sv)0h>hX(CNnnqCk6L<~f z@F+d)1YUn82~RCjy^{j$rWC9@GOqoHozeKShTCmz_D$(E8*<;k%qeJo?;N?}@Fo-I zjd&+JbeYQGH6|_Y4VE`j&Mzkjl5nw>k?S3%V#a=`JBq%!iz#~<)#*2?_?8{%rLhl~ zXb99a6T5q~zzeYx_yb)xOTb<5P^2)jc){BuE4R}QR%zyT=6HT2MIz(Hz~D9{&g7*~PHncKjL+ZRItbwpHPOOrbleDS>34)MXr2-&FSP-r zQV?no{07cjcFbYav_m&$peR2#7^XrGwv5gNs_C#}>cN+S|8?l7?L(be58<1U{k z@-1GX2Q6t^VojsiA@f37a|6LNmy$e}2&N;x0Hq`*oXJKp&VTM8rM7nD$LgVF3WN2x zO@}F_KyRe6H1?O_ZHN5xKVJrS(_L<)ZU%3pF~zjLFmhm1Ql##P#+8=o*|%b8z)6XF zqH2_Pa{W-{x(6dKODCS(5oLl@17ltO`60xj%87e^BYLKwNhf}5 zd#w9*V%$J@4}^74PE}<`L6p1kOt{$)MKmHhnJ6zqP)y6o zOESle3|@R0eHpnX7J~hhF1!b_B*ZDGpvdi`et})q$Z-JyFfgtZick%#Y2Gs0K2Q_n zq{XK*HHH+qU?c_QNoroSv{fv#G{ag}eAqX_Kg%n#9cb23cy)B)-I3!D-X0(zC5Uke zG;9g$fjD&!4LzcPpRojH$KS-F9i`L!?4$%0dtt@Xgo?e889!g`U|z``xnI~ect21{ z>Vf`+7MqM;#o_^0zX%K~$krWXNJ-TFQ#?6z5o4s_-I0g4pncRTLgmbX*ntxiYSHv! z?-h%>Ce=_4Ha@HyV4k+VdYQUeo^1xKC9FF#2oCRL8|u&I*`&lh(aNZWx0!(u`_2r= z9pT)vL{co8L|N~%iApILC=H5dqC!kl(5@Q=O}z$_5FF};^p>S1^vSbqW2WPRix!nc zSievc-lapkMr(n2pNe*KL=CVLA|hzjwr1diuBFr+S(!8u-J`s`#MUnB21p@-kx|g91r{Nh ziCtu&uWK5pgQx|N^V`Vn46hACBRx#!`$2j`xCLwkmRFApJXN+K?qHSnr$!7(RF)V6 zsN4%#^P|zEzgiE`Ngq<)4cRx4GghA^d^P0mSS8)aC(Trr7Y8l+CfLSu%Rxy$GD>nG z%@@e){{Y@VA-`~ept>*>w@2>C%@b(d?Yty?w3bHhh49(ot+Qb7&9iCY=kE`LZdvtI zRW}NSsV=XLC`ut|D-o|NuL~Yi+^Xt^OmLFcd56lZ>IB4;bfZ)V0}I|I)>F_zeHB=D zWSc-+J4mbkZu1&qb}e7Y!B11l-IR6t-B#(=F;fS zk?SImWdlZ(JBOaXN!OB4AB+Ngo6Jj)x+4!VN~2S?!W!{0RTN$i9ZDV4f_R^5 zd0ihHNy^2rN~ZT2gi2)}h%0TN%?;D=x?y4HJ4>lJHt;WdfsLfN#y z$DoMS$;xM-SN$E(p)|c|LUs|1+%O=?uA{fzD7{phLJWCWy-x_}8o-XZBP#(KofZWQ zpkr{r^s1szi~L|nXfupV(HGk=#?v?Cu;El4Tj!Dc?UX?X9LFBs1L3Ven>!$&YO=w4 zfKOyWU2H>26H;uOoAHfj1nr3!S5ErubWE4mClj_CgWNtCWCkk8a7|jlGql)- zJl`WNn?-4RAs1)a|DDGJ()(-$Q1%@{j8xCBypXqbz^gfo21J6gz2ORxk>uneb%tO- z9RNn86D-vP53DDeS7yxx)sUjqpKiOO*_N3kXLbP72sz4m0t3&eQ-2hqgAlCScA^9V zp)s$eV6G+LGN?OpR)@CwZIT+hR8Ks<(51+)rF)RY5CYpUA*3i z1)hoIK-37NXE<9;w#*jqoi&4PQbe1yE=hCMd)~ zeTjKJ70WCkFa0>Y8`3UDPMg80Gq}7PO75S$(-S;0FR#8EMY~W6>WT*18j;RSVg{JJ z8%i%`i;}i#L)bS-IdPRrJ735rD;679&a_HqJxCi!F^p`6kruMLvh3vbZM{KuBr|sy zX{|1OdG~(X3J*k8>j80@ysNnY5AgZSQJLe34{07q;K5I1Yg`8oarN$tdst?2$lJ$XjiAl|54%Ets zW%a}=`t88AGNi6zDPfQecK=o}v%}_X6w3Ul_9fSEFXTLKAu_ti%8H_XI1*MqZy8kr zvg)Azx-KGc=K2L~Y=RTHi6X7z#mHGDp*g%>$0xPuTlWrBvq7M*rXhE`zEK83vLz9u z+vQu*02}aTD@im%svwCF6w?Ji0XG+ZgN$lNIWNhBmtdHlAJ6Lko+v>FDN zZ1)bb!WMEP7!)53VvraA%lQP}=m?`bO;I3woZ=sFUckpRkaA*h!s(6^m=hDFZm7n^ z%%SoU*M&F10VK7824xAwkn2diUYakwyijed*ZEYghJ$D6Icm70TCwpti1N*|I#W+% zL6dTbiRjD>cK5U9Me2@ROF-*(j$0$?7q+BwFVwe$wXU+Sq1!sgq{`rrTgVuP>QeO?jsLiNFZXWUu(%snZ)|sAo}(r&mLyn}Rmz4bk%)H|iSQY>~27 z8Q0jdUdU?8Ng`f2rB5&&buix$cjPxcct?{Fpi(&TFSIPO-Y!JnL6FlMi=Y z5(y~1`2r!{@kZPlZ|wzKe-Xo81+qT_8F+B!;8~DWpQNw`zoTbH9JsyI{U8b#oG9>V7)Rb{0E(nR(V&?nyfd-9G2k!M+0#47DpvdJT=c^S7f^FgWJfg;5PWLX_5oRQ^CsV-o>xrr|Yez zDx|>*^$T;viCKMa+2-`)&1r z^)|^A*b$u*()88jd$3$!NWgg`EAF3>3KkaGu@&p>u?(RN{{vBCXc*mS@XrzJelE$D zJb9u2>92mEO^OjTmOUM=|A`ur{UR}duUElqAg#zJ2US(CMdJ0O!FD0`Rn`OP@TqFr z0A5$~U{*gqxuGO%LF?K8sxvxO;uP~lKkg@gF|CgdDVpEOj7A$`I!2BuBIPY~93VF9 z;Lie&Fv(ft0@1l2Y>z!rqO~^WXn>Dzg|!mm@Lzy=NJ=(Kk>e*h#ir+;C^nQHlLS@Y zY23ul)%x0y*S$%@&ZS(RwhR4T17jw~La8rxa4cNfcF;J!;H^2#ij6#v+LZ65ua%my z`AbPR@=5Q5f<~Nfbm%hZOYal8JL&=^aXTgD=qu0SZoN>VW|-hcfp|~tii-i?x+D6% zI;>W!`@wKX*$xzSd*TN{zq=guwA_YN&kZ`n&cw`1Yb3oeMin;X&A0GcbM0b|G@m60 zmqxshPnzi=jgj4E>$9Is2vC!h2X#;@Fduk|PMt$_=1}knNbrx;hOJD_iLv({F<5s* zV8ROfnH{B@>g^OCd z0#J9@R2=2nI*=K#{>S9?L!0U>T zUfNY@5FU4y^=3Arfz<@;r|;^0imsWz+)C00;V1=lq%D4$Cc~yjVjdEn(~>M6v3|PARB}v~tQ+D$py}g& zz$d&(s1s-S>_~$QY0VMt%!u2-H;Q(yRS9Y=w>YZ`d1IOmWD`PT#G(QngWn9u`H^v8 zx8tvkCo(4PzEwPV}eCUMNpGzTh2B_6tF#`uW_B41_}Kt_f63 z5K*KVU5wxxXvsJ`fKqwCU#pZ#5&loPaa+OKrzcW7kKf7L{T8s9GRmS$p2$lWq}A>j zB#4Gw#j2zm`J_9p@WK(5{P;1j8tlLcPvyq+bN0n@I-?@SlQ2(|$}@gYsci;t<&k$o zo>k*X)-xJNsE%nOhI-K_in4@U+jS_mAw96&?1@rgRss?EEG8(Yet@j0uLC)n6gy_` zOLGOTEd_aoXpoovqu%(MDCoQa)n2)S-^N5xfDYS&1v#<9IKNxOyv?x^K8lY#_eF>` zJbxPyQ;*@}9!?v;#5Xu|E9Zqwr;ygwclW)-VRaMi28I~a-vngj&>KKb{rm6CW9l_y z#~8Mp23(Z?ME@wHwAHCH|Hv!r4(vA65k>3UT@bQ+Fz>&Rbrw&P9STNE>xoVZuMH6D zhEj2}DW-aacp>eOMVR23MZQ!)ns_V|cT+ zQ7rZ4zIJ-uLYNVGi5`VF-nYA?G@04x^t2nboPGr$yc%byjzxHP6d%xS$l>K%Zc0ih zgY*G?w?U*KbcFV*Hzeh*5U9*4FXXbyC&^B)4u1>Lz#ZhI&EG)x#$>KB@O}#k`ne$mBb)i<5Nuv?#4vkbJ{Y-KjvSUf(uuOR=Avl*Uz`LQ} z_$ko*#&mhHcw*N|PM!-{(5w?lZd`VmNe@jNF z@yao;LIrebUx)ydw7S34HS&wo4j1ytm}&~$(ZwjxK?To<*-_xD`A`?Lt0j^gMFL)PETn;aLW>ayOJL8Ai49os!J|k1ayP3)Ps{ zbU0_!jA0~U-O)cjpOjaQK}eY#bg{@!#H^qzN_E!dbCziJBK|8V<49!cT8h@CfD=e+ z!F)1_8}hgVVyDkAW!MQF90aPKD9X2XJItNoI#LXcpU5<9#n9){8TfvW`X%~=3J&21 zN(0kN%W9+$qS9gAk@K*$>`*|(e-LYc{$GghgIua;hCS2DhJJurmobWD9b%ji%IlBc zHNo!4M4+GafiD>_aB>gojXVpZV)TXZ)|4f4hZM*b(Eeu%YZ}1fhV#onnsx-k2=zkY z?bJmx3~Op5mPXbM+22rr=Bxtjd5bM68nh@2jY8cWxv075hyZ^4ssV0UT@TD*&Hummv!iSp_Eid z6B?CW-gZ5GEO`$^Av`3IhznGw7%?q!BGWLXbrPZE);HKjcp;8RN*fi@P@G}VFix}G zNXHGtE32-N7O8Ev3#FirF~p)td7b6pofduqhY6HU3>3w#=S?*H7u0)cif~b-QE!pz zF#@r1cCvLhcD+*R` zZoVLM`%T3Ywb5v0o?4)1}8VMyz?G5YDBfVDG0kyPZirnKfN zL)G>3*;Lqp^2*-~vR&S<%;%KLp$Kj-*+Gi&QAZ6j3oQYmn0qydJcgsr1`n0Ont2-3{1jc}|&l0rmp; z2;yugG-nKGwH@%OscQfvZ21 zcR`GxqKlf9cZ7)6EmtC9rRaDpwdc>25cVS=Zh77A~yt} zO*kzeP zS!?62OT}8_Co;<*uS{2P&m+~6i8RQ94)Px+J!r`e|n(rdqe zD}%3@M`ri)z^$NcX`d*uK96OlY6;%E>4!dw2#Ta4Q-7js=3b-1DOaMKCvqBtm({t= zKw!1?72oGXIaYxV)fcMKE_ARrJ&`%u2Ct=cRbW`QI%$|*sJ*6!oS^tV1Z zBc-1vMo`QQMy8pRf@WWY7|#Z$s>s0Mp!&ijO>)MtY(1l>QxsH_ zy_wAU_L>LDZ{(Az1;cTkxEiI{|bhabZ|~gg57PbZL;w zkg}#P14>zA?N;horDY6spi&c90J=#j)7WvP!s(^K@X4&WheIlDAssx!W=N#M^xQV01R z0?-_1wUGj4ynZqPwrjf%C&b#lMW1qPpU5o%<<|>kyKc;mQ`CtV05L&b95Zv(9Qf5n zcn@U9LoRYM?V6{f4lc~xyh}`Uke}I2&-S}0ncoHAYR4b|4g5y2Gb<*j5a_HL0&&86F@DQ))b9TM2fVkX^hg6)!ez1 zX5Bzqah6Wdx**jPlk-A$GL!mJhIl?u^+K@78vGM^+dVY5zoI|_17If-`il-@kd@2@ zDz(UqmGWR@b$4ZbqMU?-)|REv zVGW|&f;akSTrlj9pzJV<0ATNps`BChMjUR5&kjL`P zS^Yw$T#D+mLv^{1B-gG%QWvr}fhtuy28uWqkQ-|K^z(y=(Za!L-`Rk7tVf8YiK<@c z0c(P^ux`j8+9NeMTU21zlnAo(U8pVXH$jl>J2bx;@t0w$;M|M3)UMh~Z^ja+^?`F;Y0O{-ovaP{1 z0Yk&4R7?JRBC}MaE&qhgq8tfwc)JYklM9uXN1{Qhl3Q;gHM-633`+M#nFc%qXCeF-N;NzDP#sTTM`DnY27R;!W+ZB} zWi_i9)(61U>(dadpia{FDFwW(l0os5q0!LcjVmfIB5+W2 zi-Ig@qL{ps$}Dd?V(Jm~GrgiF}JkA}lHXSmb^hSOoJg#3zW| z^V@{w<5C^?qLx`lkuu0j2Bk6j!~0R=Hn$h-$TP0+<`PBT=nZZ{9fTKZ!f3?PT#PJ$wu6vNn zz>*1UXM7?p#>|aoq=eTqIP%sr+EF6lypsh+c)i=U?@`i?e9JF~5^_2wv4k$I)j{G0 zyeAQg+j5cW&Cg;ZdxZ2lsV-!zdB!EvDAWl3(sen2ZYhjCsi*%^JnOIx>3Yk{#1aLR zE>>f7y^w`8Pf%LB7zQ^rkcK>fLo1vk)dTzBxK)}^+|dhpuZXByrQ>q)7JK)Jem1w= zGDlm!Cz$F&0&QD&KwF6k9nKnY@X{b%{6OvgE;>hQxN<)k*a6ZF{K{dZ&Td5ZvZyat{XFPc;~koGJfsHB!G;MHTk4J+ zP0&`CVZ9Ma!|PObKiQ#t%e^u6=}b=}SyRqH0kabG+<~;zte2+?tTd*d8&NLinCY_` zz!&0_Do;+VgL%VII6d)&I>;xfP190d%M}z!Mdqj}XN7h>$1K*SV8AvM;}4Bd8GW%% zkz}P}7+u;!9W*_vOA)A}1J<0heoSt?-jsCxb}q_Zfkq~64X!6`=t}C1j2!t#-iXOe z3@RDgF(eX=c`YzUIeOn1L@(cyh|lpxCgC78CLOAGR|Olay@1b+8NN7Ebe?2XK|PT3 zF|-)SP}`nVOHtnul(>QAa$@s64tBIfqZj(F@iav!yvc~f5MvwRJy5;e*nWw1mra*^ zBl7!srJI)(+kunsi}2)*I^?_+v%DD$o;OnL0;xT>hmlGrXu%9V=ys=E8|Xr3z9M8| zRpfl2J3>KfH^`fzM9j#M8rO$87-tOL9jzI8)d9f?C3!;tya`p@NT&rv6Gd*iseVD? z{X23su4}K4hoE@bU|iJyK#`hkIO3?}BL*|4y$~0&M!U8GNjo(d-gpV`jy;i&oqkSr3#+kxdbMEjty~ws9D2#|zcv`OczC zNqx^Z-DpGZT4etN#|m+kt3}m8%C3uN8E)iN(;y?2;mv%FkI3~mNV-upY8=Z89Hwlv zI8!`Rv2WF6+{pIUJ;5=LPL|CuVOovMqX){T*`USIMUoRg5UcwFTp^;=4l+2$Z*~y8 zkZ~0BN$60jW>SZQJ{F{;h4goDWnvd0x)z351)jiLh4a`{S4J}m@u3fd-pE%NjX0zB!wfx@(ND9?F%Hti0hJ|9mMn~afI$DJ73VUFo8EGT#%%_ zf1$2yn%fj=UP>LlfS!=8HNC)%r#2p(J8;sFG+oOs%j@wxo*={sEgSF7b-t-BA{k4_+cVN^)}_-ihxFN)Qvzwv!V(5wR&Ob>Q58r&#W$ zpeq{>^^m=9=Z&1<^@1&ytPFP`6@DOJ!8dg9bFqG@0?&Pe`B+vIc%aIWmQ6Axv7!d+ zBtAesW`#Qf#k;_xffs&??a}OmY$#t@f!0}+oew%Myf}$Ux{*)X2+-UZj@Bdp!d2#Gpxs){I9zD@s}IrQ&>1cbdU&j9~Y{Jvw3nyhP6V=WakD-d7YGAh`C{$O3oDnV>_4vM!uNTWuL)lqc~8?k!z@@~i+4|(}x zYk_@TupxGM%}cvczLiBA()!^wa}TOv3wU?ri9Bh1I-zoHC)PIni`XY{+XqUIIZLz$ zGL}{Ig-BD8mXr+N$(!k(4AB?RMlpI=IO1f+O(msQuQjn^y;2G@ktFSqBy+d0b?IzWwM@92byxcc3yQ(hSOjT`7INaj5V6}ZjTUIBVdYB#bQR^ z81byz6stvFz?63Y*WJ}LCicfttX6DC8GWpisLe<<$Bkz_%8S?=)l8rP%cewaL#4J^ z@aQ(nyCIgP(7bD5Z`OmE228mvo2&v6`I zNbeGq1T(326`*Z-0@80JwU<-#c7o&)+6)_DW+(+!q4fpS%l+FA-2b%+P^3$3u%jD+ z`V?;zrM>bsGR?V!*H9sWEkd+6XbEbV5#!`ZTB4o&h5REzmJ!d#zRb9^`Y({$XZ;Lk zv&kW*_aHSx@xOrc!?aUBENR(zP6vdA;UK#(D90tBYFiMhAAW+i{_lQIkBLk3rsf%2 z2Xfq5H8X{T$;8Yw>5VL;o6>4PL87f@6#U^T3l%oxtt71HsI#ydfDA-wI+cb(Vv&xE zXqhhKQmk?7O(aTnBTWIQacJt@-Y+#O=#@QC`qg~qh|Z+j1gl=g3q`6Q%SnIvN2pEK zF&aA}P9SY{89&n{wina6E@Yo|$U|CF*nEi7!(Os#nxPJIHl-5ciPQBAHVLV=pw!nO zO8~9jHAT_s0Y`xcpmvOenTr}TfSf$Yw?i|a7Kk!^Uo-2Xd8v#Wi}3({{u7zKl~JMt z9c;q{g*r&XV9w?YL+u&R|0w^C+)|RZnjmj6fDLP389<@5+Pn~-GhNFg%)#lg2O_61 zv}NHb4=-tFxqkBk4HAU9o?s0-8JzmQPt<& zdISa-HR1HUx!9E;5xyO{s(_YuCERC?vM|@epU5~Pv~he1E9xQ4>h_6#@T8kT(kLw| zfSnt`TDTW#p}lt}ybg93*mCMRuHX4+ogkADF)_^>*x`SoS%!G5DKZl$gvt zV22(3+l4#W*Mgl4-iW$^M&m>#wo_wn`WU=g(m}rnigmH)m7f3mKM%|V@_%BEIm-RT ze?>|f6o;KjB7P6l^afW=;oXs&O+4ur`SPAGQhLCK!FduSbx; zM9@dz#SAz^2btju(zy+y9=J<8%UZ7sU9Y(dCIgY(>LI zOM!WoiB73p+atB;=kQKH&~Jh0C(U4eB3j0_r4eHK_~Av1{zp>%hVn=IlaE9$KiaX~ zfbh>dN+asV(YDCPvGm>Q7ZgnfVGgCmxrN#?d@>up0D}fjGWVGLBr@2+ZcD$ACtIM! zt$}Eg4A7jGH{v!vXdXp~SPvvO8GH(^B-XLR-qHMcCbv1+Cr~*6C6?USV=1M5jY|sp|8~F}zlY-am&s0JD zCpMr$qd}m}@0hfP$b61rAQBOwz22?n8O)(_%Vm3OJW5Qf;&8jP0cksz@KFepn7 zkwL7~l()6O3)X3-<|yq8d7fBWyEXwYLKVs-vH-6az&;UjP?zo*x$!eSkHiRO+kPs2 zP#4oCq?Q*eV>JwQM-l5qWo4zRtU*VY*#J+(_mgdfeozH!cIW-3xw-H#AJ7C?w zEWdiG7Q~O%^Cz8nLqC48#%=vrfJklMGSLOr4SYCfVgR~$MCxD+k5b8+l6s+-l2k0j zu`EnJvhJu;sOJZ(fNNoF6n-EIED&w*v!&Eefr$Gc4(<6Hv%}y2v|I5$ZfO!*|3RS^ zCCKYEm}WHtB5(KX8@xNRPay|ho0TYtTbWGKCd!rv9&krfL-W=H7EwF2m6Ghuz5HHP;;-#&p ziyz2H5+&>OfeocdQfY+)e6)d#y-_Y+Y@CVz=pGxA<~737P%*r@KLpHxhPtD~q@b~2 zV`kR3j{+`@575pu4aNeY!!2vg9T75WA)_j&1K#7Dzg|e6(E^XE3A=-765f9!RWoK~ zu`uB&miO$&1~U?&?x_CJPv&8G4Pv#q{<5TfB5BDNKrTfOZ}tFv4|1WdhA(mfpxwvF zD9Q81>W|@mqp6{e8+hH|pmlT;PvqAWr7Nt(&`%!bnBpV915eNqBYA#f$@ZZ)73k zdO=&|ay(M;l6OPYyR>Y;NpuB7^pgU;kUNXeydnp&Fws_EXTc5q5NT5k z(w5a~^HKUO|8BsLBY$H|M5xli7;!lpLoYCyA4nS7>qVp}H0XYbD=EFWNM(D$7YgV@)4m#oC-VV!i{JQILX}Mk=Ph<=qjMgpf(S zAE^vXuxC2n$T&WcAf}_p^&5;}bFSdMkp*?D37Q{QDQ~gP`c1tM`VqE?XD8M5C4m}z z><#&({wK74giEUW8*Yi%4LCB4m`q0?wrL>2JYJu(x83LtZB*Ml>Sl0QXwu zfkNz!G_)~KL?ft4BD;?pZx3Q5;SI*@cyGk zlxs)C2YDb|DFzBF@N`_9dOpXNsEtJn3bn{f*yYW@fy#$4QZ0tlPUP`WtBm$U1r}WP zDyxwHPUPtuX$?HN4yasrhM&k)VYcVtr3)h$><|Il1}DBJc;vW z+2R8#3AfKGvnftQ@Dx(B62!)4G)t-O18G`} z3}+E-N@cOu=|m>xz*~C{b*2VgnGMj3xX)is-bl$X1!Mp1h$rIBn%njljFANsr<>nM z>+@wNf)=ABwp)OS2)&W!W}44$?8L6KDS+k#qu=^0S<5N**k?2dHWpm_=@a`DQo z`>GHZy}%eWB8`%gPbq;UbMj-10A2m9EBKuXu4zGbk zafb~^*0!`58U2*1N}(RW zdCH?Qa8jEQYHpD*s_mc^ZgNIB?b-AcJv+p3QN@kC)l5Vsgg2>`_MNtT#vqv!5vad)0Cq@a zv{(cUrtfIoPvp8u&IZK^RA`G-C#v2^uR~{D8a6F*;}Ni6DDM+_Op78zW4?hG?5GBF z@@qp4q@V+|+F9PCjRR{tUr0Anxi|;asqe9fYWPGR|C6`I$g+)2;oXrRZid$np`~mI zX!JeEJrH#RiH=oP=Tuqw57rB*o>K)^`0`vmGaV&K51y_iRARg{zz?uCA^91N`u(uTga7*m6iStm2bz0 z^<9EOEixBRTDLZvL*;82l?U)NG!(+;+9G0cj!xFOx|An!Z(UlKun5wbW8cRS@kAE0 z4bpF|2wN1tnD|CoHMUVOc2U9IN^oqKPo@cLwUA&ueQNfcWV3;E5 zLVXLdF%x4mbgQ5^V%7Zyco718wHAzgG_fX^=UB@;5L+Ffo(>BYdG2_mzTByMAOqOu z;jryQT-Bm$95vqm)-V0gGyvsso&ShlVR;obVybu+y@+_T^3zZfS zo4x)-p{2fDxj$WxG(Mky_AN|L^~N zqb;A)W+hDL{Qm-xA;uAtc%bllfB66YkjknAUd~5_cSpD}%E`I}UboVNKjl3T*Zhr~ zsKge1xRr% zR4m?NUyr8(cF$i0I0OGc_|zh5IJ{;k_$1+=dzkBgXkNuu9hf`B z%yUu?RE=nn@czTF%F89m@ZP9TRwLY_%4J(e9a_I$Iq*Q$F9)ll6T=#+R$U!7N9sXKznH)gv;D!m=-hn+X1cCKZmtwHJSmSSdfd3V&F za&;VhFIj7tNC~xTER?#{SDN~YMka$RwfZeY$MeBubM3rkSx?>kA;w8|(T04|Z+1z`_VkXQDDC2% zfAShJh$Na1tZy#wj+`T)CEgrK;WaM)LS%LSfcJAXg{Mlycopy-2!Yb3CHfZ6-oSYQ zmGk=uFg9gGtaWyyCUe4poK2p*T6RLY>|y!jh4Kg+rI5Dl zf_uwg46R(9)y3N5JPIwXqy_TA>}N=G^5r>}Dn*ep zh*=g|KMeY9enxcnyu%w&;mRSvg|6_n=H0V@qt;iKHBw2d@L8IBLq9~VFRzxZTtYzb zdSk5A2cj$tTxqQY<)+|dPDj#(@+4kOVT64@vZ(6MJIGwtdb zRj6L(;d2{`Vw@=(&b)zOiJG-YMo#j!wm)VfGQT>8omZhANDqNBtoJjqgD{G6hSJ}^ z_2Ss#trJY3t+vrbCOCIAhKUZ-G2r^kXK}RP-H{V6q-0)5)XzWxE!+!{GXSkyg;J}+ zAIkn8s67KSl`7EvRc?C9k;3)Vm5TLi4@rA1TZqx&LBEy-Z?B;c>+gXX)NkZM09w)r zeW@NnMp{(Z(byhW%CfEj{00OFBV-ucfPb71EOV{Epw?tRFcfO_>CkdFH=4KZ+7J6B z-#?yZNS%1S^^TO&A=_)-Laii%+8fG~olqTJ(%L2_(Z7(_6^pbV zOf0Bl8|}7l)Yc`@i_svp&VgwuZ&be~T~Q)4DJuNcvYiO04-&^0s%`4s%y1cfX#JkC zNAKy|i~V$foENg@7Gg39Z@gc7dw36|_X{nn5T5mu=wi;SZOFI8uZKpvS1u+8=$z$) zPhi6|Q>~nwTo7w_VYSLG#1tDuHwv!}C)FWp3hIXXBp+>U8^lXBeTkQQNFZ-r2sZ;c z-nSXKE|$PL{e0mAIhGK*n)jD(f(k|11G$KU#!;upHMJM)p8W z7TdDmHrtI-(2kJasRXaN0rJ|xU#J}=d-D*@ONTX4vLFjO$ScS}y~hRKOhVuewFBw& zL(57?xg5%H$%2ZfUtR%&~khqRQsqbb)?wGF06s;Ud+ zxi*;BXOGmpr1O*0H*YWSL>9;wh10L@iSR`$C({Nl zy?i#jaXxM|W|ZC=xn9-}?`PZgMwZhHoutL75m!SmR)3?8Pw%T~EvP7OB|#D1s2!9V zt7&v6yu7so1{LJp(F|XA#G;eYStNC+yVLtXwT{c!#CwBP_sVU*j{BfgJGIs-7l3i8f?G(aHc5S_di^2v!O{pFFgMXWRK67G}K`g#j>4U`;nCFwv%E~>qd z1B7=HzNp+rBg~qXcSB@HSogi@6{=@B#Syy$AJ>^%{>sQPNYcGNseH6jG(IEE9t~z4 z$XSx|rcMUMD{{>?J@UIgIH&xTbR(bqo`?feO5}Q?fVX<53Dg6%=eVt!!Q&DUUQfX( zX+ut_keJM?u69D#xkcL%mlTF}RYNNKkDjR2@I+pR32#5&t%B*Vp|QZ~pv=qRZ8IEbo?HXMLt#Fv)a^I-VfuH}NNstGk=Ut# zfxe>@tBDE{yH4{M{f2A=(;yYI%(#ck#hMDJJ4#J9KqRpp)9_JI^eb|Tq`-;aL;Teh zueUV4k?s`@#?VT^yc)XnAA4Wpf-Y^!pKh&Gv~UJ>7zV&0jte9Nz!TnkH~|)2TbaQyg@9q83prBGNm#~8)-3b zO6~dBN;h_Q(8}pPIN~sh|2(@kGd5Z_KXF+4EhS%GSz+Nu!f2kG? ziS$<4g+g=K!OP(9vwAY}wt+YFZS~4aF|GUrC*aiqcp;yp23J$e7P4N0yxmZ~5Q7Oh z%Xs+B>%6COcceu_hqaC+QzWQ^>}tt9pX zo*;})x(H!*nTAQFq`KVSk|v*@a^iRNY=lY8Ca|1%(~YbYk!>JvyOS3Fg-q;_H>aJT z-dNrPX^;MYy520ua#+{4{m)kHCS(zjMSBkL@PNB-|9|fob5gb?$3X%aYl<{YRTM=P zhBvB8)!zc6<%Wzjdb0queww|`30@o( zcA(vXf_CL}Is(S<c8VZse#3O8h6(KHC_tj+v}^&R{{-*Xc)aCZ57NIBLC6LW8dV zPdzA}XQS%#Hqc36N?8r7-St1e5yzaL%|+9D#Z>eQY5k$4JRmv&1JbQz z-I2aA>pP3p2`-Qf%6g%1dB;+K8o@;9gCUg$h(ch!MBj1%-$=zGl)B?dF-`{<&VUdL zYyy-6jjivnpw$k|HR~HHAU0c8Cr0ME@86L%0%4~!H5tvb#+sAU4OM+@a)?vCRD`S#gt|KLyb_ltDpdj82GretM?ULa z!={CF<%kyIpuJFYdF84iZSJh|5GG146LH~LD#B+qNH=OV^c$K|H9=7Et>4HlCT*#% zA6*=s7E-6gcA+tUtWKIIbxMt9{(Ylc-{Fmhe2wl~^|zm4H7t1~Z^%vz?N=tvP(9%l z9Q|*kPJXag8hPt`H1WtKTgu&$Lo&3=HK4}VRh|3)Rwn~$d=XRc7oFaSkAOCDVI_1Sv_r#spp~`Z z<^B?RnUzjf^Qab(NBOv@v;qng)NejYq%?v{y-?JnVx;Lr!)lmZ$n^G&=#J9xIhs!j zN9@KAUc#w_2ck8DR5rZc0QSi)U#c(48%z+VI5&X%%Y!Ue*}bna@$ShtY9(nT%iB_L z*-+jKwHjLRIa?5FD~Zg!5za=GpF+tOql9n7tXfOm zkQe@h#we~N+pcAh%0IwWT#@>RHu}k|3^SABbIBN-#aNF0Gr@cywKqahg`5Zp(VABt zh@n85?wZ6(b*tZo`k42m%9RjT&2Vu@dW65Qi8K8YuOBZC&8?iq%< zup{mZsh;&ZO~ZRn#Eug1?ufuAw0^w?>Zg?k6U}l%sRlA3t>ZJi#KwZ#ICsQcR~nr< zc{6$dX5>=RjiM1YP+Es%U!G^Z`a|9w*=4yZfZmvfbq>WHl-Gy$zvbK5Ujm$JxHc*jKz*8Pzm+R!+kZV`a zxLSJ5PoIrTOjFyD?S?a;^zq2`!e}v-h1?sN&tDb-G-KmZJ+&ZiTiB7`s+2~P4X=S7 zG0P)7c_ZaG&_Q$WetB(k@G?V@dZ5a6+Eqy@hiqd}?uP7599qp3HIhO_{S&Zd+L9lS zqA`4Nn}Qz216jdHr5K}a3*ocMUO?S&VPN#C-(hUg)`)reMyTl=9tjsME9N?kFVTHK z&m?klWDj-zgCs82J3GbIZ$7 z2AtP>`tSxAKqX!+oXUhz`-;fW2KbqHNfdTuYIt-5+r@5RH%`g$$(oMlZq=1_*@F!w z^Dd7f)JIEP_TWZzW8&+IsrLiUJKdjwsym3Ly#`U5vm%CC-~U7@HG7^z_A05Ce$E_G z06TI{=}>!F@W^HQrzH1MN_8^0^yx9xz^J4%^hQjae6RsI$^ef;Y^*gX)Ir!-X<2=d z+I+{*oyZ*k@UmHaszKjPOpW2&%B7&b}Je{!?JYaNK z2*co$wAAp@w;~C%fkyT;se>G;StxCJVV*{ZQV+D`CNk?BC*_dyGcTkUXWpuUwiC$L zQ&r(aj0DhD*4(Wrrq|26BO0hQ#=vCF3)#es_wa%uX%Hog^oW&Sbc{k+3i?mU9 zAm0+#BfXIiCelTFYa4e2OXKjfcTzXhLU7F~+IpWYZ}EOWSiR5ofoOK3HFe4y8_eug zUfRCYK^SFF?mCm$cAVOM{`QUnA2Q~kka!tpG6irT4(uqh<2byUQ*mB@py@^QZsc;$ zH3H$aMG?FL>!-PJ&wGNT4vOM_87fb@WdoXPXmB3LnF--x4g{CCHsL4bF7JWT%YSyD zfa(-cxs=HheG@svKx;Gz%zzB`#JkiT8O4+~8D$MvsL$f{-YK$$?m~#V9;Ag=JyR$y zn2DJo^X!4R?NS<#^x1YaKbj-&j#@0;Y$A2Fo2U;;3!~vl^Nn2r200@TN9Yd75R?R` zd``bZOdxJUp|w}_lK@g{aI-vfB2SMYCxOC9>Hy_f>XSP%OrwRKvi8%!j?wxB@@|NI z?9vz)Q(iw>29CS(?r8G1s@qV!dD9BO%Q1o*dGC-Y#s#A85-^Qu2Oa1B;uBSYnk6Pq z%3Qz~xX&~qN7b>Y-XJNp)^^aS##V)q%6$tw>sd9$I-j_ab3lqPdE=Wfw#wEfjr>b}4s?YhLQa_R?Sg8H$wE6VpEY6ser; z;|tNGU`550t4m2j8Ta4OlM;u6tb*31})T)!<$>9tQ*(mU7c$~12UmQP;-(?5nkx3u8MW$iCF#d zR9}L*V&<+`v2ls?mPG0O`c6^FPxbiqP8e z9bL-SI3|SHQ7FoPuZ#N+J$cQ648+Jg&dhfzLCk$e@?I!U)?N1_&r#nigyc;}+JOsD zP`dDeoWJpD-IJ!&&Zri0PA>2CPJ;koFV3`3c2x7hgsVB#kAl}vM8bQZ>CMZ*b46WV zI+VN@GN109ik#`qQx$F>SOL&g%l&lU$-1+6U^HQuHyy=&jIA$@IV9YLWw znGxrg`!wydLeXTqWJeC*6e%jWR8(Q8^2r zh9z-B&MTl%mm@Yk$P;D}JJh1~g4wu&qn3XDMcY~}BHY6^TOaFr0 zzWE)Ste_3Cz0S7bN%=gg$1QGg@5n19q^&h2+SS65n^q<@>ZVV8Cu>znubpS@U+AzS zJtSyXt0Nv8_0#U1_&m^+wJB|BZc%Pebf^Y1B;+j%waC!On-XK1(LoCUc9!)*>PG?6 zX8IaTio9%Fm-j+>(itGM)eVS_2q&XEsy>|&B1iwkyZkWPK|VMr@q2SNO*;W+ar*a( z@*v(m$`ZWmJB?Dryn62of*VlUL5rXtxbw-V{+l3MfXWT<+cKhMS`CY~>LA@3>aPpCJ{#&k zhv6r(HjO;UONFKQ5=pl1tAlan8yQhjhZ#z}!cm+-4`4nAv?b2vPi8w$s!upnhjn_-unwSQg8wXRj>10!Qd*JyJKM8 z5snkASj09q$1`x_+;QbDl$|G_)`H7gQOM^00IKGK7gBmvwA!^!KAj`I(A~USUz%8+ z<&ayOI~5n4l1?OBYLRZKUyvIQ!Ii4usC1(iS8C1Z#2A9$K@Qx24%N7*)z2?j!g?Y` z5-(+*(##ryIDXuYyt-W8Wo-PWfbXH#r~>Cx9;jBm%UR4zX{cKjYzyqM zqJ~HPY)$fPYE+8C3%Rb&voy6ntM3NJNt1U+Iuq!ddnlwDodkEaXGbhD2pc;^t5IQ8^fN8>~zH`f~}X>#*vh~kA>4u007<u=PavwP)AJPly^t^2-L+gpYxuClen;7?Z(wiZx9=H;fd4a zY)6SiL0fVSbt%`m0o`~c)uq?wq{J@NcS0+# zW0>WT3U+P#MzJ^0sQmD<)E=EM6v)kHe&1STBoNeSuA@*O@?_lrwIgTmuY{b?OJPI!$9d-}-4OrLJYgjq3~d2B2uJ16 zt}V>A;gP|x#uK`cZ49)USUC;d(JmJ74PKxEV?T!l_S2PO`oSA%hoG(A+|4v&BN}!d z@Iwa_&h`Eu`VL@yL;CKHx;EKEju;S~1vUUMD8hOo3I|%eQ;6Nb^{b8RKzy?cRW$c`18;o=r(U<;PESdCwg%&~3&?{M%oLfOLFQQz;z)W}7<#=vV(tE;nO5xP$zJWZAvI8<)u9Z(Xm<%Z9?8{U^#5at0U0C6QEfmmj!EdxGblWFUP@+7VlymP}f?{OXh)@Od9=GzHx8kZ-l zhGrt|@!IOEhhqRFa&vn3MlPj+>al8$qW|B9v34{E1!t7Rl4ZW`9WkhT0rROu9m@j_w#jAl9JdGF9qCiT zi;1e-WYbQi*bR6xpTz*|R5^`?xHu5b4e0-7*E<%!^q5zEpTE=7chTbj3#Ft zU$A2?ID`BKa*7!WLw#j>V$tQR zAS!qV@$g;0yyP@%=~JUA8`jVDA1z_Z?M8a%Y$Ko)o247eyCXXTyvucQ<_2`LtgHk2 z4l)F3`HzW;u@NIQJI4C0Yr=1q6#8~IvAba-jF#X9tR}(IQ|}twZklasH*%i94iRie zr4GiERM8z--Rw$Poi8hk?k=gWR!mSjm17`pxt23@-N1&JsHY7XOOv(v%3&2C0^kHS zmqm`k&?aNK5&-C2PqR*|xly;i{9Nri=TCezcI`$!Iom^)pKE7F5POhH+z_@8+I2+= z%MEEE9kE?}kUB`u8pL3fvb7p)xhbw4V3#G$*lsTAW;0&zs3UzZY&FxB#z9x8W+0Sgo8gqAwm0IL*|$aPD$>)5l%?xC9d9a&d_ciCcZl9Ni)Ml2|j2GyX= zhDqlwkz{Q41RW;PDhm8*kq`*9;BVw}IpXX{G|KA4qQDF(2WmBZx+OqKe>*rh-o21J zYLMf$^5~FN4#s$zF}w%reu@dFLv7{Pcn?JBHBFVWzEmzYYB$wz8JC6?8O7*(A< zjQgIwcVGf-sViECTPchF_mIZa5}8cl*#uk?lZ z6i39YdYHFR*z#`3tE1p`VKsH;{S;s?ae)`4q(RZuAYnNDmM1iaX*hS3y}o3p11{nn zUno>p`<}=rbM+atG+UqzTssi42eL0fqen#rCb~vhe(UT|7B;XO^_9K8SgHkxEzGWL zDxj}%q=^e;niZK}z7=`}W-oQ*Xm2@Fr;`a}s8A1=QpScG& z?s)*(2$U%i_W2ps{)aThSbaBgSqoHS>SwNnExYZv#sLD;>AXDV0E{qX?&zeKu2I+pH>90Lak;d=pqI?BAzikf;?5r+XXT z$P)EbNLr-NQf^>ZC!Q!zS{E*Bq)$NA9D@x+zL4%1a;yL)`6+}vOJSX8PCUAD6n*E= zO}=@`fYLHph~|$R53q%op2m7sGWPt5QFeWdDO@Gm=*2X0hp2_r%stxD@Qcce@e-GH z2jrhM!%Hez0%AoJll8*|C{!p{exeOu+zX>K6V`PHX$89i+_#f4uy<}p=t6nYW(%#8 zYKC6dRKV`hdLfLFG=ob@8mRMk0&5k{8U%>CFRW+l{=E@aktK6_OiSNk7OaN??}ifW zf;PqKSOC&kz_~zF)9H{jGToXC)T@SbM+RZIHnw(!La(m5Vm2t+!NikUv_VeeoZyx; zUtbAzM}{PjyLy2UAax)aNjbfHBW)RoMwBwhQAjYxS6&w%FVtqp_b0R%H2c)1rS}55 z7CyGRR-1tvreL+TLtTiKO%bkbr0U=YGeE<8pcH1m_pOy`d;UeO6h+b?%>;4{nbe|H zZbq@}Jb@TM@ymEw;kHXUsunxO6)N3UWN7lr7`RzUX}u6lK)FtEBgya|7=@IyBmE?4 zGZN&;I#|zxQDX{hkf(8=VW*NYT^X+o(2VLu>})W| zZcoNa4Ib1M!>2BRC?)}_Mh#3n2}w6npwnGf^m_2fA>nSofsE9kX z94IB$uO{&tLwu^xG5J7zFeJ2eUU>DC=pV*<-l(J*zWl^NSZTSsGz*!}M6(c67Z9xH ziwbgXzo(HjC<)DAo~1{}35s%qjJ!&ll3g7T+bHjJ$D#x<&2qXfewSOi#L+cJzHg-e z466Cyj&sc92hj)GD7%NivPb#wBh?W4&Z`72RBU%q$vh_gZ zb&$M$$LHghdfj@`dce3VJmaLadgHW-^^c+Mh*>4H8DOB|T*zx{3W}tKDkd%DC1@9m z#T*r)lFkvBz?d7cxPYGFqxcKNUiSuj%18eIsup2hH6%yp*C8)8|xSNAz=O6Z3=0n)%@W{^$R<_VwRB@C-3r z|F@Vo>;74fP&Y&+NlR2jDw7hh*MAmCy%1U!r5$;m<4bCu>|1gvZ*X2SDv*PRK9{zY zirM|Z0cV`5_GCj$;6XVTihkH_Y1#Y`DsL@*qloQsB#G=;hSlq#ihOV(YqidMRibnT z%e$i~?3{uPm1mXoCvuf^Bdh@Er7ph8f191Ezp}beX;-mCC%>(LERS5Ln2cNvjx3L7 z6kBXJQWk~)lD49vn1~FXN9h0+9p)X;+Dgl_F3^H)+)=}Qql0<&M3E%#Jew-`OBQb4 z3(-cHZpMzQ1wNIy#d@OXU|6L2(S|YqWS-%ZJHp^YtAi~ScVlq#j-%3NQ*0Niq!g)h z-oB@;?=LnX8s@Eo9_8{sN^+?OxjH2&rw{F3ai}|z)GGiaVg-VI3&8Rx7Xorv5Pdw~ z3v{h9#0_C~r17V`Hez|xs~qu*@+3axpz^la>V+tGN7ElQp61iow$HXq4um@pnubVo#i)bdAWnD?{8s} zO<8}X4-9A*_i#%&X`;Rb4?xx(QH0R^JY{+5>0oyZMuX_Lki!zREU-$&1rAPcIZ!H> zU6${@;`1$O2VS`KLOIX> zkR-n4UMM;9o`BJ|Wk4pP?uIgUdcL--__Dmz5BW9WyPHNARXX|$S1TeFDkaB9`|(zE!Nqb2WP!m&NL}> zfxN+?4OJU&=4)%Z{AAPU)(dHLpCTcZ=3ansyl6~yd0=7r$$L_fJnNL0S8Km zeimNOX@hgdjLhsvUjSMUeo7tOVmMG*gP(D)TpcmuOl@U;VWTKTW=DfI4KiaGK^}%* z%hO@vM23bdR#%1wN)gJ-ZlxRfiM%v)Sv%Q>=;}9pgxU1uhWY6mwGguJ70zap(L}}# zq$pJ}ukh=?yuwqJay}5>df^zBwBe*2!bu+C+)=xg>Q`#s=t{!%dVtp^c~iVu!f>5g z%mqgnR$s!Ai>oKMnqF&Dh*!U5U{^pZR z2O!cZBPVsTP+vdMXq0n)Z}c-_57ZK2vNYM$v?w>N#%_}rUBBxM|(mP4#J#R#qRvNVwNt7|z(2~46a!u3;eC&mi2+qn&?Z1#G z{nXDE`2YRqd;f8z|Nr?99#MMJ-ybwxv%@hMCa8GhO~9MN2J!thVz3N01HXOnWxH6` zMgKu*&Vx&(UFAoP{_}sn{rE(@ z^J|t4@v6)Z^Eb@}XZ)}TUqKoei2AA`j*0Q^i+nX%Q3lFJV-%TnrI7AD@g~ zFd6mi97B`0!&J6w2qZW!NHOiu?A*M7hwutb5U%_D}1LbxtUfEbcAHHE*TSJn)aV_+Q*SvV_D`+eLVT@~)p81mr zza#F3c{0De=15(%uRsdo!H$%b%H(jQ8h4#@-iif;0p|XBd!Zy~FOTgaihjuwz4>u&;InXxLk8ev>-v2Xq3&1TB-A(DkuM za7?n8bii)tq&)0bMms4oKJnj?pL+4j0exL+wUAG~GE?>WX>lZI=t#hBIv$>|*1}sZ z%*+pGI=6O#w{}0UVO5rQm)-ER(rGI`eZn@8gij+_wa^%eA3*M&QZgFQDIklRYyg>F&HB!F~S&6?ehT@wx^Tdj0wID;_>jWhV+E zGb;|&t(s>6LRAY};F^n?H{-|Rsx1lkI z>d&fn!OAjzgBy^LR`Zp&c?RbzSR>|_^V9|9$P>>a<&8XlEsYjeW{>rg;Ah(8zG3qj zW87~~=hYTC&eYVrXPcj}!$eOc$nLc?3Xga6gvkeG6*a30O}3B!NWXtUH=c*xSb)M^ z&Wq+Pl>@p-H>!2upx7gI#tc9*Wi|LBf_cX3=)p>fvCoqQQ=-Wr!FKIEnK& zgBX}OLZn?V@6xnNov8!Tbk!&U<{x3-p?B~?N z6VK@hqnJA!KWK3@3JZ~{Qd1IGKKc?O94c=vyVDsG{&MGo>^IEQS+k@!O#g@OoaaZ* zNQC`>I<$msIKwg0Z7ukQaaeeIhi)W;nk^=grtbuvVlm`gSk)Lr49q0pExU`-Bye?a zbUk2p(J+a_m8>pqBaz)Pw7a&0@~p=HiX=hx6K0d3=iTk#ld!`Gb9SMy#LT7pUDXHs z0TcZ-C##CxP3!aQ^7iQ)=H1>N4K?>}H9_M<0@35VY=_zA1~nJTMH~Z%?CFI_KVVBy zs^vtyNi*yW(oXw?=+>R~Q2j>3usba#A-xd#0W0kD&Z^c;_O`bv3RfGF6<1`Wu1fo> zTZ%FSP(nYTekjz5fKW|ZQlHoMy`e!0s95hdi9fuS1TTLK`vqI8dJsfapqAb5^2yFj zD9W4=696^g^(xy077TaTr!^tIyIwN&Vox-oMR7uB4xy%NQP5gXv`Zs+LuXLLmu8|t zXwI%_z=@YXQ0mm_2DBe^kk+X&brQU=CEO?c@tCT@JzcWjFi$fmhKkc# z>3(ejb|dy-KOnXSDh|nH)Oj5VdIz!}(7Psnu?oTvTj_3(G9fb=U6lo+o9+Ts=bL5! zg(F}>#vC1j9b&kk`YEovWMt3yM>&#*!sy0qLxhasrc;Z7C5%4Mg`%kG65g=ucKAK_(_yhVltmuYN{2Xw6h>IWH88OBLQ6xsFN z9tau(Ipq;iWoF!~Y(GC2M_`A3MiF)lSTf4MhxH)APv^>hLfirIeA^Z8T}a#!35TGb_msxGTgLLxfv+&dF9TG<^^4h zv#m~*>R6`nYD3~jehIzeu+qH>m*+k4EBg&m4Or<$zJ{IQ7k2j?hkn4=La$95Ze!1M z^IzH{q+Ku%f9h6hAeK+-^|K~8F@SqVH7_`gsZl+IFnev1+$ZdyU`;=bVB%y5loszjHeEMQ-ic|cbwp{{|82aQ!xE5BF+ zqjqkXmt~V?X93mQJ@-rtyrNb14eH7w%$Uep8;XmH<<6`SXV4-4hF&`5+=yCLx(*k$ z&t!v!yhC)OIa{4h238#0z*Z70M(78$)x$nsojy|78HytAhI#r!S49tft(?p{Y6m)= z?y~9yjbOmem$It6H4L`Lp~?m*6eu$fho~!zn>cHIH=JCi3|5c_cBgGP_wmqPaMW_O z7d?Km0T1bn%XA6OwIl)i<+zUL_7x=9E4AJ!Ys+35nFI=TgWm#qkJLIFp>y&{mjuJ~ z1!RgLl}0w&Q5z-@z>YE(tZtX?VfR7Y34A^IEQI=w1WhgG`H4hhv|M+{()ygFnw;Uy+m=_8xLH0=?6Wf8Ho`y(Ojl)Snb&-3Z4WG1VA6%2YmM5($iMVp{W17^D@-HfJmz-ET)2i*VR(sJk> z<`;~)wUfq*AkJ;4N@s|c{RLSpp&~kROE*%G#`RGKEtJlJVwB;_I1lJ5 zu#nzU_N=zw${g@fGO}}25TDIPh!|Uy7YC(PCW82e?g8O-2JicP0?t;2+OhrE#km{$ z1rfEYOI*4M9@!rD4OaSiEwbYV!mdLZb{F#=u=V03Xp}KB#}MTDu1_D3s~MmgGAXRqKP9unlnhVT6+s-U3X1!M ztyX##8E%*X#OPStoO3g>ipS7`*%6y%71b|KDC}>2Dh<*X(EP)0=WDr4fFRQxo(5WO z3wj(;Sm!15bY8ayDm|Mhse}dfRj9L7N1o`RfjF^{IkGN<4sjs?@q7&_8h!=Xu$IOI#pM7}Os5Fu||XC84EwKtH=0>Z&2m zHCYSZKG&Y*XIo9s#!RTl-2aAdIg*-55@ZipgS}Ht?iY-#euN=(XEsKq zn^W$6Q`&-lL`X=NZXG*~Bq1A@lzu=AlT?P_Vdthi5(3mKC&YX$Gt zi45$iq#JTLLSb$iuXKZzCNNgZe!#3@@N@$u(6c!Sc7uq85x1a~iswwLtn?hY$x1=l zs~Zakg?gv1D=ccvifh26E?uyZld6Iur}UMhU$Gp*Hw#3>dBMCLC86Mbj0b6Jq=KIqh4_Ut~mVU80b zeasUflQszo*=`8dAd&M}{lHYhK$p^>{+-tR4-1{<>9;a{`hYgW2&)N#?!hRe3k zZDJ3oQ)Q{Q&UkxgO9peI+W|co2z!Q=5jp|7gh1qK-!@NUpev(>;M7{s2nIW4fk_g^~uuQ+0KBcnYH3T8EQ->2`J^vcj%5Xf9$?rKT|n3s(0TOc0j|)^}26-T@8W)=d1Nig3?@BeHvPWcJ#HC**~^$Soi(m5%T24Ei&7 z*RY5piPk(N$V>7ri=;u02lP%L;i?|Dbch+EUju=N|ZdA{AyAxAkqY8f?&@VOs`?+AG z1sKnL{&Z7!RA3jT83uPs=*jmNWOi)0w8hc#(Z)=I8sG4n(0jNycBA+dzI$z2oSrZv z!Gn%Ia6&vWsoWga*EyCZ!FB}u0V(}ZYsj3?rmipP7mRiu%YfZeoFlz{vI&uXz+3lW zZ-m8(=wt>ng+Om(%JT=*;M4H#*G&Rm1uN=ghp*w<4?JE!&<7SYa0L8b4^j3`8WMYW zL%wy@PSti#?4a?dc(<^h5Et2(jZK0+J;T|%?4KBJv|o@BQ8=cTqV5dHJHL|m171b7 zikeBI#s)jlvePPSd^0e3R%V0Vkp*?u`%%Z~g$Ww^Af+udtAb>p73Jr5BpbJf`-FKf zMt5qpnt4Z8GGg${L1Baanh78K#5^P0)58gFncxGQ_2p0Kio2nAHVCP6U*~OTO>i~; z4c&rAs#i~z9hD+32HlgG^e4nEIKo=xp0K2a`*Mrv4L@jZRlUNsx@bhFwN5w@Y=0pk z2Id7lha75+JX$huG(ne;zn-_;U^1#z?%Q;&;7-qndq>ITYK)dw3e~eWiaw!@5m7TZ zktN*<5@-Rk1EbhL=bEJIZ&wqyhsZvPpV0Ax!W(B+uPasR_q!P9grN`gl6Bd~dBy9( zM4FIZ{en1;>NYDoh;#Q+UKimzN@cH7saqs#M(n_d8t6zoAyrBi&UTN7<$cd#piVqz!c0E!37GPPv5+y8#QN zpD-C=C3LEYEtbh=JXmJ~d6(Zm@?n?nku`oMa}9@^V7t(cyk$#T;{%X05X)SncR=@w zSY2Ic;a98I`cgJu2jl+>T}G%??-kIJG5A^~;#$0f1P?oW1-UN}s=>>7zTF@d;9^Z$ z)~E&)01-FkTa0Fz7l&mb+CQY zgzD^x$_1&7NAa~hVS|k6XgivbHz$u^|6d@}pn1BrYAyqi@9@$?o(g~Z#p@&{wJoXy) z9X@he=^l4Rs%M6pbpoJzeu=~L*Ldg?>TQ|zWddDvG9i`+_5(WPLG4NizwCMs_7mzh z@a{30vQIsXvFEs=bY5cK9=bO(!|s`lm6=qm)tLu61-~GnO~g2-nZg)4*7eCga7mw- z5!!XWpW`~n0Y=AIjQlN!}mjwT(;7_v(? zL~Mt;fALVXXiz+^>boOm=(3A?%<~E$sAoz&|*0LULB=afE1~iIOpB>K8pAP9v}%Qiz+ylC%kN{~0xj4?SVIse}rj zn3@OfeE5Wo2J{--&L@;-yYPVCaa8v2Y%Vf^vR67V^nsqFk$TUl9g9gw5E$t@IO1hrh+hSmF!A6&${d(^9h}++YpyzSLscdGPxlhgAP}yvysk( zvS;eIBRr^mSf?hNyb=AO>p)2j`a>Jt9UQ5g4ZaQy9YD#io5@8pLEY20nJiCba zHNxGa==gcUwiZ|AR80$?GIp224(I7e|A{4OPX2Y6@L-`CJE49CO|Qquq&MS!mND!* zwAH}gD^yEQduiCxrx$EiTSq8dU7SnvxSve);S=7axN<7Dn_4VYa^8TgW*#Wbn{6IH z=drT6F!Olog3J+|3-PikASY*tVl+vPcIW{tmB9Q>9`tERpdls?+++WMvpJvO&#=eA zM>^#!`~L!acElp-ddV8ab8k7y&Y*6 zCIZcG6pd^YG9lKH8Oj0ap-}tzGArL>$g;!s6~yRDy=G5-av{>o?aj}=t0>DxbF{`1 zV%U|6!BzALX&+E~ZGFZRhGlkIcvp}GsvnnaNPbJ=1+j*V3bL<0K*a#Pn#q@S)7gb^ zfh4XD;OBnCafDz#AOk+swStEtM6<#^4kf+u331AV(_dh>$W>+74|r#@6_$%-Sx?3d zZ9}rOd0v;(tens)fr`$3p8bewXUJOioOgLZ24ATZ;;`e1m@x529g`=d3s5U_D9N|u z$(Rsl`VHMsU)`7VG$-eX%}j0|VriX`Qth&}=Z1d&jOX1_*XMI(=S@GM*O0g+VA)CC zE}y3dC+`R3rBYF*(p?ChBC2*?l48O%Q7=h(LIz-nB+lddxFlqzz`*i^j0Bx7UuKXg z0Lqt_(CvIWUxQ1xTc&NE=`7gty*ggi{8@+zdODOpSm&D+SiP zzmZV@X!Vxai{zIPNpR_i8JAF53wjP;*!4{4e&n14H!8}0K>dI#pe@;HBnec1xOJ~@ z_^)Bkj(TYNT`z;F24+abPuLY9C&0}%hqfY(+$Ns~G~|V_8aK;f5?p{RR5h0+1EZPt zb;{IX(0NRS>o+~2vmvRm2uSx}8mr|Yq>d!j3v>@Y_dsqIdd z)YNS^CNNwTrZo)ohBc{;{6Y7M2otKyj@(z+et{EI7#qRcV9u~E>P#VCG6fPm;|%(hW|pWcPP2c zZd(qDtcBQyjHF*U7o!@j!vswt+%}d6G%V+fTVarKOu;$3AUFN-3GZwwoF+yG=0t_x zf;8W>6ee{hxX-8X+Y?f#9>AdC_Ic;YCODaf{eZ?Ed>Z3X_TOwh%ky@4Cfnv!aRcc9 zKyOSbyECgKRQdslXDZCyYm*s@6=`k*LO5A^qC2B7dtAwk(qhRdIX8hoj|p1U!q5jg zk%H=aZJ&3GmUCFv)j$GEU?xz|14Cbsx3~wGg6Q+kut?|yfh?sSkhNQ= z>k>cLUdwJyUI+sNb8jjR8P~~|Ikl0SdDRnQ6M-{BS91nv6Vf8y@Xn~3)1lp7!4^Qe zt~sX<CxmQ5y1O%Yx1UL!KB;L@=O=PFFS3B4v zjxu?$|5(uY0jf4EgSZd+tO+^L_=4E#Z|se%-G|#Ng5;*5Dg1<#h}7CNnvmD=vmI1x z+pbD5?;8m&X{L8L$-JSrCJ3jE(7v6}O2;@O?u4%ID}A+J#}E^eSJ)58OQj;rl0rLN z1F&o3K@qmlt+~uNEk=Pj=0jIBD6n6NA-3WsTv>n+`=xEKm#{^1ev`0IQf7qkj1q}?4Rh+)bJGB5d z?yhP(Vuz>1nkasGs1k3+nJoon0_AK%W;t(&iIa*6<7Kk50o6Occv+Ctg>owZM?LF7 zLC($R9^j-aeF41*)bXM7f7snJN`mc4_5(8C!VT+W5JjA7IzCj9-^45~l>58UYv%qi zqd(-FyHM=|-euBEau7pl&P!WJxo(wlL=(dE2Xr?Iu8@()K2JnLJo)et=Lco12lu`kXzo2IUk_H8AI6Z|j|o3uZoD#(Yo;OR9%N_8IH+&_zDX@cAb)JqF{Y!Y-M z*d}0&WY?E@K-Z;!zb;jx=P$aA%sVj1r=ZpkX3|4YB=AO=^UaqVYGR=_pat20hgfg( z4LKUGEVnE*mn~4El`^Mv2RLDo6_Zd_6;QG>RhWT_x}ZDLfvtB8Fd7B7JPzmqY^k-< zNaIvr6w|3Flv$9dawf(x1Ppj1$jMJRrl(sB-98U&>N+s)~i%Fl}bWSg9l14M0K1UE<>4J zh&E>G%iB>5Ie!6JjF(DZR2eM^s%wAR{SS!durM1pCh*IR+^$0x(SL&AOvn;DYg@QqCv<8ngg zjZo)mW7%oiB&4wfDQ!@y3q+?HRWON=y~!i09FX=bmFgIFR)b8yXoQ{l{sX%FAGi#^ z2kcGAKu!)0Nc2_ejE58mW|ag_q$&M?j(gt!b=hZ~+*}A2ZqT;}qW6O1$+p6-Vd#@#L%as96H25G zM|41e!zWJ7fkZ)!A?5dIT#8taS7A4SAXl%HR^}a#d&n zVp?j*8`1%mh%c&adwHLBp85r3x&}KGmATe#VFcdZijvoZ88zn;%KA{YIG+M!FkLM)$Ug zf6jl*+6ALqdL|RL2B)Mm5qAdHVmT0gh;zY)zGcSABf$^SNA?B#Dn~cs<1~#?g;rw% zh9&Gf{KFmqsJLsBQ5V*eFn;O*@#{lf8Fl}W33ODY->?~Vu!DLHS1$C0y>07&evU5G zQT?-7V_MlNySt<8A=_m{F0u{TjXR_^@$YW4UHa5l=s-I2>?)JNoCwy8 zb0@Sd5?Z6{4SQ-B?=`9ns9yM(vaTNIscx|=B&dBt4IH5|qDU3&tjdI+9anDHr`sz1 zgwn95VI`)k@D2GX14S_wm)YB6NN|)@l>@po0d-BWkw(#*z&oS)1*iP;GUp#tB;*11 zKV$gaQ2u~vmr&_8!|otv0#_Vbofn*p=H2)UlTZ37+}U1kMt8_6r9^_GOLlUei_ar_ zgIZ46FQ-NO%W~fI{0mhtT`i8XUwzq+&Y3{PrBn{6o#3eZ)oKmS%HCXFs1@K~2<al)%=n+R1YMNE_OLrlFGdyH{n1t&QfOg2AEJc;X--T!xIXkT4lz^ zw|B!#Yxn}XiBKx*Z)NxVd}KTBGr!oO=axcU(uuevA=S?u=z?UEsh@5F(#O|kUTU)^ zAqMdUT}ur6sO~8|v6o*meO)Mu>AaH7@h6?}wsx)w@D5uDtYJ(x<6u(v7{(~7zj?zC z!X&`u-Z<}yCfbvf$_1mDK85{l&6n9LV#4>t;s{h6kb0ClemON{_{6>+VHe7q+(svj zF@CDkcBbKQz?vD{1BRPL|H-DIDY;$Qk^6vl5U3MfLsMR3LUVbcX3}XqGzxxNimlLu znR@PUSw{?a*~ik?N3f+NAAUny&AeR}VgD$yvVV4*|2LYSu!^!ddNS&|lh03_=YV=D zQfJsF*ig?YCy99b4aq9O2F6s`qYAJ-Mm{nmb%**A(Y)nCJi+eD(*zR~c0)31v>`-z z%%^zjz@GntUh0A@zYI9+lm`h`KFm)*B|@;}mUEm9H=W3P!_g{&4TuiAeQ(z3WZ$6| zu|r*clffNIG!9}K#|?RzU6t;n559Utj3r(=E{ya8x_Jrqi6lUd>>PKKc|%?UEHCpC z73W=@h~`U!8?0is%C2vf-O<~G%!0_r4&Cqq)yUsSw}@R38yj@N=0ocVbsTtfwN>+c zrUx(RqPo7I|E5|ao>`d#%#uKn4EgYi^8u!S>mET-oAgr5q?Xj zM3l~%&PcytUuN%zIwLuzU6;~?+KK~uUlvp%X{&!~U}1Oh-dft>G@p<0hUk#?Z~7409rKJd0!J6j(=JFF-?@6|1dRM(xa=pi z9F5%7!6mTd|i7abI5!{o+bCjJTwa_6mZ{Ua>xfnHr2oiyG2M0N-v)T%JeI^;>oQb*tNgZI(;|n z7eq6ubQ(GfZKKlNNMnMzBm}V`!&%VQy|&c4or;8bw@;Xde`(6;X!P5WtwTdXx*WoH z=*?9MV}s;mlzOT3YJNZ~4`KM{BVEUhu9*r#`UR8GUsgWUHbk3u@|h1TkkJ#`vh?3p zu~_B=Y3WlI%Y~Xx%|AqXWi@eOm4vtnFmK53LrI&_lQ-MuNtpUMpn+Ja%pNP-+j~qP zJ8E)66mu?4E~U2i88v2kD3h`mbZ(-r-U?y_%F~=tj<5^yCLU$Z3A2ZD)P#4jA&dmC z8-77XC-${SWqMb|^Eo<~1EcqjJUZpt;Ft-rg-RrNw`OvA!4$uH3!u6|rLyzoDiSiV zFecEEq+c-Xb6viLhCdFSPuWM@4f`^NEvYjb0HLl?#rsE0NS9-{ z*`bF>p|0qy!$~)t;5+%U8=@MJ2%Eyj?{^4{b{w%`;E5L9@?j+?*3)ouM)erv196 z9URZ%h47(ac29ma_Y|v7$BZ&AT#$@v`BN@_1z2_#V6<1TTcsy56e10lGIJYqU)GSq z4fC+KpTj;M*g_iF6Q^UmQ1vE^luSx4Hx8AWykM%|2y|89Jcq)saN-4%O>d(Pb!9WR z2E$IwNa+Xku4^?NYeb08t#>9gAb-O=?H+?rTjq>3_zk`;P!*GolWaM;Gj1MK~BY23iwKplVuty=wou}{>gJ~?z+pX?`OWPv(gY?h8q zFd>fV3s$&SgH$|Ru>esJC%My>Q+@SGnM|A6Nx0`-YIkg zN?*_oR>E5uEQtxNvp*a1Oh##wZ6l8G##WK-1M0(BC}pnu&bZOW;oc^4!Sx_1;Y8YQ z7zd9*=gRafWYwh8>x_@+<<}g1a8UzrjR4RMy+WsrT7M_hgM*5p8r@v*@$Ic{Hh5RJ z1w&-l*l<&1FjHiay`u_R9gcI!O7iGOv+X^5NpLiv2OdxlPxkuA&|U5$VHOL45w~C$ z^Y7L9AFel`TEfW^SKX?r-6#QpfO@$w3FT#jLY{*e?hsKC5&w1@nW4- znH#WKkkXS_FAK6xgzuskMe!5TJ)yRoWbgA?B0nH?@+ieAR+|gYQ{`=}&NTA=HrDKG zQ=NfE!-2GmK2O5|uWc8Ux&uDf!s)? zboRO;?t;zgy4v58Py6r39(K6vPTo!642#+!W;OR@H=nYU-q_a#X}GW(-<{_ha@4Jh zI3g(0XPotl72$-RP^Y1=+}3Gk4(J3IcB;2E!;*Bw)oi3xX_ljRVCR%5>c(4xvKWbG z#GABC&`L*`w zC;Qc$Ybki#W7TpS!MxF*>drl-YxqH zrw}QCc^y}P@qBhz$leCAp#4c|a~^t%!mG9;-GK!9f~?i5%+>O}s>KA?<$U^pU50bZ z?WiDSIuBM`l`5-u?!Ej`sSt1GZavOn=@MgOshA;r7{uJgF|@hkBJMyBigjts*Fr&5jQ^-G6yN7Ov~Z6k2nQ zG*_QnWT^E3PB4I%vGDuBB)Ie0@;#y6G|S%1E2n(*>q&4zE4yC*4PC=w&78rd+^#4< z9fP|ghW1KY%&~zyjfRRoVV`!dMP)nRba%xJWHgHh(isLe#*eUOGFKVxNSos*#KwUM ztC)Z*!_ykX&@o{T7&M=YSD5YHOn1yXAs^g=>WWg;_Vz9lruiSx@484`dDJLbIW27l zZ-p%w9~^k)Qma7Sj!%A|6qgq)R}aP(W$DqUv>jU?(1k_e>KHlDK@&qE*-yxg|F9e2 ztaLwYWWw~?6W;9=c4BUR)EssvFEn5h{92p|v5$eFFR1eewZi~p+ud(Q6WW3gACTn{ zsn;^7zNAmnJ$(0$^vxi)e}r5*Su1xMn)~7dZ^b7kx`Mo{j%IQ~^B^JdB6G4srw6}T zzF5IXo2UuAKk^T#vcFvrnYY6W%qc}f|O~C#Xw!l+zUBFZAV^F!_0|}0tg`qEKn#Uh6&C-RL0Qj4ZX5PI3Z7+%hKsk$>{+( z7%lsR-zmqoGLKHnen9UqhTUa|sRvzG5~y9-`ILRKx?nqm3vt8lk~&32Qw;k7?@BE@ zUyM_n`#oCAenQTKDXAI~cabVB0dgvNqV>8@sTkdK>3+6}hZpoRRUyMm-{$dKg^zM4 zoUG4?i#YBhl)X96KFkX(JyCpeQZqw4nv7JnKM8`NdR4oi!^mwJq>Ho6aDtYB!NtDG zn|tJ))|B%PH=K6w2Ewv?=pXifXlfaqu%WvZVueoqVN|HMa33fm4tGW^**0C`Y0kNn z-2m!>bCzZ;b4#cEiN;YOW#6GOZm6?7OT+eDA_-VA**!${gf>hffsNKe$6Jw1Ey{hM zhQ{XlG|1VQYz#Ea2eMH^TQ#dg0nC(|CmXc8Aq^JlWq7P&6KKflaYC&mR0g}NO`1u= zm^C!Wl}$tAB9+-2=KK zM2M4D;j>%Ko%8B)LKm2LH93Ht`)mjxraCE?BFS!X7dfC<|MBsd%Y0ydY1I)=Ti*8MqQzaUGk#@kv02%Bs=1IBe?dKmf+-H|NyYPJ6yg&mgN ze}=dV_GLP4?TsVdNInVUD|sdN6FMP;iX|$$xBipR;}ygr52(Wl^=d9zRKU)}gMht* zE-u@N%L6`Ghl5)AmOtj7Bb*m22L(&zo8 zd-7(jxyN8ZZhQtZaGRAnl_WSRHbFP>3z%Z{Bf}%SZ*vE6q+PJ@>LR0?XUqPp!%ja; zM^1L=G7@iQSe~5QM9Aorz=t|3N=tX>D4lT49Y!21;Kr`;Dmn z&e6@8)JFaf;F))y?CxP$E$T40%uYxLmRdg#_D|gq+A+ShWpcxBfsU9^I}K2}+hR!2 zk$A&Dj>hz^x^B?PW)e8-_(ZKO4W1UH7Kj3*M17j6hujC`W~flPo~V_t10g%b9#wZ} zR8cDZZ`cjjYF5g%ya2Vd`PpYzvTX>zRIm#LguW~4r6n2G|p@;)NDE^ zu<3(8W&YQUxK&BLPe{qi-ffuaVGL31;dM6u1q}CW@P+K>V&qQ!JR$j{Z|nR*<&U~> z=VOaJw@`iook)4SZgqZdo-={_8uIi7D@@0my-ywKeVvgB*qvg&pNS%@G81yJA&K3*vhuS zgIfxSK9K)MjndLCJ3gFif7 zT$Rxtgjb(D4DyUH%8fnZZz zZ-7WGiM@}kmGnf8g%Yp9C6l>sE)2K6Szzk`J>6({X+je=!6~qs9MDh)!t1I_*O)2I zhWmsqQ(aD|_&zN}2PG2}ZWn!`bVx;I0tES&N6ma$m=83^b1unVjx(Am`i7}ZZ{h8G ztH;bRvSAzU6L$XNYJSot(WdYlMl-KKm3no4uTag~YAa6IfDn5-#}efzC)+u# zO;-w{>Ow7FKVDx|rZ&@?ad2CiKRXos)rN5%YF0NPH_r7l9q0`$L*j*<&zdia+Jxx> zH;iI_2Se(rOZN(hXOugj0avJQ!<-_giJ1_~;_}G`e^>Yiy{hbff)@5%`(&wHFg1`< zjE46Xw~Zd`JYVhuHn3^6O(9kq+im1t!9zVBP~JP2K7;lD5bgSi5P+gt zFLAB|I~Dd7oS8Lle%ZC@vNMsC{f1};Y^ltacN6+HNgNKZ>r{b_e`nF2^+c|JHh1B$cz(f$CW3HY98rSmk0Zl z;&4Bam)6VNmcpA`*?hY$vTj(t^p$BDV`_P|qYR;9+Fvx;;oPj{$Cg`&&d7Wlo~-N# z%+_hLHG>L1ee1Kb7l>YNYgP~=W+i7UCJC|PJlPTpbd}zzy=o?#CIlM-$Rhqi1gdbb z8N*=y=wOwE_AU+W7f_ecp1f}I(Azg*vF|XOgfFv#xNH`}U{UZ&zhP9<{2=T{M}6sI z(Wv?tikDVVlnP`#2_M!&c%nYqh?=|VhPhSmd983C&=o(%4=yboc6You!u;pI;rGHF zG2@JnpU}Z8!%v@fcfR*QT$x94-(Baz3kJS~$(DDfl-)y*NawIv#a*y3tLv$C zSnN?I-+fp0dV~x9)5_?ir>RMIB*v#tEaC+{J`Z*FuE1{Z1Ji<3{X)?!i#krqR?y1J zU*YytT(}R|iIAI-t9c^o%pkp7PT`#<8xSmvDu(i4=Tukjr{v=&=;FE$3C^8K@PQ4| zbfN0KK&{~+Ax;KgmPjXiK~EsT{;N(z*dyJj<`d;rxlW*;+Zf$^)=Loc<_+j$LsO0F zrK3awzCxIHm}NGoxCWK%&LgnR7&R^wQMm*Gofof-x;d`o4LOl)=~b|vB!anytfl#B zP?*?muDK-)0X>H5%}?KM;q_6xSS7)hYcrar|vtiw*T4f_d`OE1P>%9WklRKl+9 z=IN{%BW$U@T1Jb-%gm-_=y%=9Wl=b=HK0d<3zrp9lpv`y9~hinrj~+6Da6L zI{PxYFN9+&q-9LjjAiK**KB6n!UJ;IH&l(rdRJ7V4=CHPWuz53Gv(Rw;vwtskl?^2 zw^toMpaW*q9!*+^x(-vwE;Hb&#`UHcc8IU6G_Qp2^Vy|QXhVget6v@Nug08$+m9G4YU1T=lvSE^dxu}y>IgE zdW#vUW<8qfqk9dvD}+TA;hFCL22aBn)?s z;0)A_a4&&cU)fL-6UG%d;GM}zw^7KBA#AR*)Jp;*ugWd@f_gc;9mi>&cNQpnxi`f6 zRCL4A?95s=We@j)w<@x;PuZ46En@-I&9e?Exb7(q44n=u^=Avptn_(@U>k|ep34p% z$kQh@j>?wVvo|0A`E7a1{eo`uk~%X+&(;*16VbO&i*%KQ=v~>)1x<)1-fy!(quNrZ zPq4Jjo(>aYrUFABNc)E9F}MnM8v_Xj)m7z$obQs_`hrXj#I}wX!lFrIzFN_KVd0bWAu%Z|YlnuF6AJ?id!s41iWiF(wSyN&NB-lWLSH1c40X6AT z$NDnH;oACq8dhM$E!gU)--k4J-S~Jq)C&^lP?pDntGfPW5}MHyM)<9YyTet5htwR{ zQX7cngZhh_Si;jV^Eo%!+fHwo8uJRGVQ2N9=XG>5>H(^UoMk70R%3!g&I{qUNt=j^Pp3rl6*##G zWlGN?6Fr3d2x+X9?P+5Z+LxaQy(*dxJ!%t3lQ)(bay#~df7^`K@hwUrMRt)7l+tHe zWyx-l^?=pYy$VqqGtHalqs?TCegbxPheg7O@7f1ePRVK%=Xg3FBaFTjUx1o{12%Ls>Kt@!k6SzQk9eNWI ziw#uVg1_iy3d1f`8E=FM-L^tB<$y?$dbL|WDw*fo5DkAnA$-D4co6ra+Tm9!{6JQM z8C|OQQB)GV#7gcH(xh3%x!RUNOcS!l0&b4JJ|I!gP_M511K(bH+AXT=@FzxCD!%Cy z3n$G;aG^HE!aU{y@vTJTB4VQ!xxM*>c<>S4!IL_1sO9;wLI?CFd#RT$@dIRUxd5Zu zK=*yhPEAeovh$NbC8)YV-3R=O7X_@PpxY3$5++s=7-}Hhgz1IPPSYi!g`Urf*^PF{ zb8z`&1P)N4GFr0dlfm? zlt)-A$VntwAJkDWsX?>rN6E;$>!4_vRc(^xY5G!w9s(4n^X0`xjhw=R|ykv2F*v&B|E(!f%TSf@9>ACF;t9jg>yVA z#m49)yQih{^uYE<`gFN7CAdrFgdE%C;k#`O-P0z?XNQIb*>m8#{*BRcXh@AaUPl)W z;!0molSlp#GRipSnc=o<=TA@QXe{*_SXgvZT#SXw8L80)wZl;73V%vsS_Fseqs#%d zL<+weqsENGB{e*;*r7pz{m4g$8LiUcTrmH*6V<(v5T1{Gc3uW9jPitoL zui5I|E({X~)OoQ?mMZ`Bg-F1gSNI8WdZD_v-E1;sF+{;l?u#O9A-bqUN~&d|X*So@ zdq)m>5Z4)ZvZV<~Y_54jaY zUFd|(r*X0B;xqzwkIXisJ9I2X7`=Dco6tBss8 z#o{!Z!EwSGA5OEMkai5D#f>VC)c66}L&~cT$X8ULdK!DN(|Smty(gnHIT`5pv!qU! zqZs>kBSUKdUwXlCqs2=t@mA(An3mEpbU6w;kZ1T?QTI#^QeW1}GayAAU_A2XV zM^)wp>yu9WoWQZ>f}%o6*$+7Jh<}%K<4Uq)6J!Ub8WzNKp$o07<>-AmNvN&|{A*9q zIjj9AK(5O`N@0hgdL1^@Iav?; zFN0h3VcX(~JR}H>=tDBf`i4!BtfWF-@Y6{EW^cR@E``Bxn2;?zPZ-Ty8&ud#5}_L@ zu^4SEZ&>Rx2LPdao)C5-?iF{zJnc4rsNR*(a_Q*r5{JSM)LA+^tS6)1C&<(JfCturj5{=(jX!DQa`ot91o(urq{2NPwUwTDf>kK{1v?I}OT@f@r1g>p_=50d=$oklx0x{f`#KBy zh3YuD`NOjC`j_P1tpx)kY(e~XHN&6|JB>xzjCWz*p%=hN9S_m3!*p0qFgq~xfga$C zqBSVq36q43v~N_00l%WEO!LhU!6$0km@gE)*SQHykNO!fcPYW6Fu^A zX3FS<#;0_S+x)n_gnhRrBup0=dLS2g)O}nr3KB+odgT`|F5Aq2Asbym)i^V6=zJN! zsmBL@NKZzc%oC#%s@etHx_{4NEc8z29KFK6!_GYB?p~xZ>r3lkjv=>`K!kf8lF;w0 z_^$Eceq-9AoKC6q1A4>^c0)N<=x_Jh_V%zs(*|2GGzgytD$Xj8urzD$ zfg9n$TDY5fp|t6B!xoAfm;Zlsy-A|oI;>>d_bA>Fu211&Jg@T`ne*@dwIV=Cq?{f5 z#0CU{6$pYA8Nss4?3KI^sFeYFrBp>H(9RDTt7K0NEXbqj3iCeK(WGUZS3%764t+^e z>2!^zeb%>Bto_nlbjF&@AUS6(eyWt@sY_Zkt)9jLek*~1(vo=@4m zn^8LJ1hOB{9WHtlV=sQW%~1EFi~E70XN8@woj2p0FlvqTe&3t+pzqL~k+RR2g0jvz z`5~(aZ|K;mFSOda7je!H>h3v=Cv5bVCpDKcb>pU^WzvVVb~`VD^xLc3VYVV{EJj8& z=mTR33!70F;qrY-aYr06jVLVEVoqWj>ge4?qYK)Wb*xu5jS~7pW*`)zOH^MQb z&}q!L(#+~pp&Obwv5~H-^2^o+_n1*&K3=eztwV3r2!jsnUO1@m17=+hDn9FEv<|5q zCK=tK+pH1xIZITCtK-~j-2&BZL9#EJLDxQ?w%KzJZ-`Wd!&F_qIPUHD^ec4%M%;pi zi&#q=Z^%xZ3U%wU>?dqg(tSsj?okxKkKY3O4!!CE>ScAE#k0amMMpMW>PB8;0CciZ z(T;qs%vO;DX**nr9o~#o;N~&I*p1{xiHWf=Y}u|P5BC9Qk#^>Xuy=1r_oKaG^W=O* zwHfcb1m7Dv1GBW9`Jrx!NxMm{+^KpN?D@fu513)=-UQ6OcFO8)i~vO~;KjniG0wPd zI<9O=NTBZp*^{WK*^x`i-cgYsG@oziumtO2)Y_6Z(Wz$BF~J|w zzwlWP=wuJ-R6SSGxk#(@y0}?Bd_Wy!wv|kD$ZH()eXrVkL5#D)X0NkexHEiyNR_;y zUMY!P4!^JOEOXdrhnZ#gLRh4GJKC4-7m3k!-T4OOjg=oAeP1x-b(&*^!{vOVSek6e;KRd%s5JLtpz48RQ25cejfEnVaSkJKt z-7bWa!CvStxl5&OvDw+`ej#tL;}|H7jp~ESYBG{?6Mm6YEvJS24X8UH!g6BD_P?NV zj+6eVG%A!=r#X|zP&^3gLT=jkykaaEyuL5YzGMx@8{xk~;||-()!wivd78$Keo=+c z8p1)6eS>|#l&o?uMETPuWYyMJ>>re2+b11W;(@T|p5ThpDi!yJgHo1hz>gcCETGPF zh=0V6C~t(aoS(w9R0D<*E~UT@MY{of_nWa&G*>bQe}EkTO5G4?vFo#g1H7!Hpq|^Z zN1YH_q(;*4YdGqKE!;YhD$ml_3-CbP4VQ>4<1KGG0RV1ijq!0l9$@ zwxHHcQ_|K0T|?{-HorG?AZ^l?osF1NMEqc|t}yfk?NylH&hw$?kx+hMoRxipv|-PG zN^RSqq0)b~-g3W?4jR_Eg#uMu`Cz8_H%Oy-ivGZ4`h!Uz`+%NFoN-i?OFrL_u|Vqd0XtRllE-V1en8`NuzQ<^h0cb046;8k^bS$>Pjy1 zNS2T>smxqwl^>=lo{-rw>*{*_^VAJ<<=zJsJu#oH@$K#}BrW z=)S}DBd-V>=?=+w=ooU@UEO=YyxM&2|AX!YOwygg`~%Wjn2_M$jBp=jcDJCFh;Ta0 z6INE&jwIWPm@OGFc|%@kQ`YLzsKVI74_*xzRd(2Wqt{}fs#?B$Ka~WGxCJvOW8ht? zyL(-B0E$3$zx)TKpD>||UhgNh`HWXvm~VA*fqA(VMXxGysYuNo8K56959T_fZBys$ z1k-HTYcAf<9s-q4)k1f4^1qF8Bwh0qBmzVQ;zcjCt7)XuE*D9y!VqjZmCR zM(W<+#0{&AS5uAjG#4K$4EK(d%o}uZXF96;1M}NTPRa`!w3Uj5sbpU2&JQs?_y8Bg zYXG)BXRjMS@JOEQf8(p}kdvK#yEQ!*>Hg5<*u3{+ho#yj5!R+Fdtx;F!0-Qn8Vq#D zD2?>!;#?@)JIVqf#gGb8SmsKJW0gB;d&QKnm)BDP>Hq$q$)4n zmA24)o3`R*z}35t9?{lFBHxC7LG2zb5sNh0OvnaTixvud??k_$9uKCZ&V_V`Pb}9+ zzhSGu($dha29PJu7!t;A9?-W9VfRcE%GgqkAoGL1+XhQ@OBK{>#K=xjq_1w#)GtWD z3wAc(uf|Ku24~VjS{vft)({zks!Fa`BQXahRJma^%lb6K{bd((NZBbmVq|wB@qpu9 zT;qk706I@*MBEMYwQE^YXI_MLa=}5rtI`k1R0|>pHYcB68O#q}BA_lOL^b+WV@{BL za*Wc5Tl7HD%O~itebkcRvQZTjmR8{%`6Ge!C6PPiR(su;?^&KLn3Lc8x9KD zC1pHyrS8Z#XBe$74X8Y%c|icI3*7ODwp|2eHW~!=LiA=nrR$eht00e+<<#Mc zh&no3Xai=_;r#H9Q&SfxtSK6IUlp_9dT6#G_+{?#?YJ(HT@mw4nrGG-+@M2 zMnvXY3sDsyiUb-4yi)bX!3lam-4VS88k30fe&Y8lFWCa1-U3vrvM)~BZjPLr%q5Acz02>!9y2Y>_$e2TGwR2~tw_)tG`bId<05md7U5sh8 z=8e8wu3#T*dMnWc<2nOxs|uQ|G#pD(#33=8;_sLOZwh;Iie}M~d4OByoZs z2c(yD_;G`mCBP5$Z0eN-Mwc{6x>yzoqj=eqZM_7$bvgTYM^wDMR04wP=DH;$$vojx zX~oic>@0UZ@B{76AH2a$`US)8`mxlRi$K@XFbHQF{e~rSj=QOO;z911bIid3oz_ZS z{kdEJ$C@GBft|#ig6yhSx;I+*Jx$9tWnU3zdG?Lc#<-wkRMV`&{M&Mud51mpLuu6; zpwD$4v+U9hqgwZu;`J^oI`mw+hV%n=5tadZ^<&qI)SSaJDs#i=mRAbN=fne0)>$b( zxJ0S$2W)SeI3DCIvr}bup*Oq>u???Js$?#0sXB6cUjrVn-8_&R76vlDVG)I^!}@HA zI7ZpY>;{=#M%I+8lUbS!?6FL5NIoUjh(dPq$qxn{=&-;@3q&)Wa;Vqn+-GYTb32lr zP@8f|=Q?CIg5e4>W{_{7?Mi6A{{eN;*gq20B$GDGZczz}q(Qo~dWKp8iOwnbK@0H@ zsISio5RHG>S(cF9n33$}_J%nl3k);Xh=RoJVK_GvU=%diX^KHOGdGgdHCc)5gTwtZ z^%G#?q$Jt}(fB-=2kd0MP(F-|?hAnCv0FHe3cQh|@5U`d{7^RnO=ZK=p7< zGGblwjRG5TmdrrGV?!1nIqA37%L%Tsl9LSs6oAer^?FX|w`OJ{nz<6* zuN#~b_OS9BapiVNWo70aOuytqMx2G536GeF1>?*@^)4_~*b(lmH2ryrco|`3 z;`Bybg{=xxVlEVlnNrAmq2$vtq32D3{iREV6>ZgELsWCbI?_P(bcT5TPA>i1djS1C zV{ve$fZvEwN?x0_M2t^ARks_3Huav7OKMXesT-)CG50WX%ci=ycc9257P^``=`)@g zn{tk*^%gtd?{xG5en@c=4kccDFx?l76?mfvacwh+Fowu#`-2tq6_Ezo#-eyY$NxcdxBhRg^p zHp*iX3z^TnWlWjGtO02PQ9Z0Xy0bMks#8M~K=;Bb}?P^W=`aJHpCHn-R(PE(2-JuFN}uu0DnswCxUCB zRquEGBQJ%%k$Yi9%Rlnjo?z-*u^Vbea_~c9ip!1JFVHISy1S~HT>8w1oI8kS3^Qd! zn5i=`%DEx0R)*F)iJ`g$Bsk@2So48!L_{MNa|m)tJKsG4eLAEmDwnau-0CFjg{n?U z+^2*lS1IOkJH1npFBihbimcc;E?4t0UptsqH?Em`Mfg&0Q`QY}`-y#q-=cu4gy}=+ zB|GxUR%qkI(J5rq6`^G>pkiK67E){jm{JyNLQmv=TxDj`33c^ZcKmI~FCYCoy1HSK zZ+!!Vp#nM$4r~(#`F^yBh}VXi&u=+=!r=~Wb$9|3!SUI>;-o04Fs6%elv{q- zHZhHbRNV~vK={NW^Qum^Wv~lhFXR%DGzNlc7|}_!;nioATEs;!)?p8FNo72j$`JNO zSOaO3HLqq2OflR@^}MMHTEkbt%?v8NQOd-KL$vjgooLX0#G3m9QC*_pWXu$`yo?V$ zP|P_6T$$KVX`MM~QHxZ@hdo3&$S9^Ci_eC{K z1^sv+#$=H1h(rZLQo-fjkOzB08#~Dzb4oJQj9hP=dmzlVXgY&e6bPBH%eo`F9W?Ii zYYXEjcyI@x6P2{Y+R6Epkw>u`A}zHe)5+K;L%%Rpb^r@0tXAcN5eDwN)fiuOzQtg!d0)!W%g} z5goufM~DCL=fzH#7`1l9gh?8;SYB&^P!}yg-W&ZfFjiWeHnHX6DOHwsgMK^^(@_y- zw2h8 zN@@ohFG-72|G-QobsYB;+n|2gG1Nr*tuDqtPztpdiiC<$wD8K>k}F^~10``58Jnk1 zD&>vZ0J6D9qT`#5g^k>AR9+f$D$BhY;cc21N?}!lt6}j#LwNC~mAj+nSqoUXLuHT9 zgBL$q#86L~J;xqgeX+l9G#W8{{%Kr*y{HLwf>_Fk9#z zwFoEs-OAafwIP?(Okx$7qkW{Nb%P>_p%w*Pt_f{=m(PCtEk;c0fzlE`GBcFQ3|C&- zSy8?m)CSf~&{D@5wA-90`sMY7u%=9WAN!5kYuxbPVn7}$c#t!^3t8?Nf@!C?x8XIS zE^ie)kRAb9No<2}$3S4blyoCgF&rl^`cvT>W*l5q0z=7iKV{5@*XJK_q1vx zrKK33d?PlY$V@ap<9&h& z?ZFF*OTG}fW-@_wNhy4FV$vz*4m3b;VjIh;fdXR<)!;(WhwMRfrrjQn?}4_i-2C74 zMdw>!x*rYB-Tg)F;VIkhbC+sAqQTJ(-bh2#5k0y`ztO=9$CmL38&51E%UDtQ%M zr!YIBP9TwT#d7rk*cPBzjoky0XRo&i)$$?3sRSTE#<9*~jN;TW7R?Uu*i zBVz$!>f-oxG&)E_YZD#IQ_?J(MdIr(Vsm zEE_V9e{e|DE`u-FjRf-2gx{zOC0s7zBeBY{sRWFkd2YJmu$R`0>3aAn+tDesdx~Rnc zrur8UsbPuwzAr@kgXS@Cc&X@F6Ql=h$VTy(1}JY0HJB+l*rh?K8}c$NX%{a}l$g!% z@?I!kGG;253|5EguP-X^j@oFPa;I^M za1k2nLb@uVsyoYX8dk)fC?E2Qh>gJ^0q=lhDC{??dd|VhONE<^EtfAZWWjrf;3!ny zE(m2Cg4AXPpG;l^nC3F*KADSi^1zog)|0x zuDHAhqOhR#9#VP2Z8%I!ub?of7Qu^Rr8@GZ=Xe6<)6< z2(Q8VskUYlI4x`C@3(PRPaEo)OSECimu zvm?)ENW+#ztjiBz&%L3+jnWiq@MaEACDlGVPQrVjal#Uvk=n&_uX@^0^I6-pdW6rw zs#Bf212I-hb7G<-Ppyb?pj2>$OF^;Sy>SUlE9OI2CgblCw2XRfn}#qITjYUf(C_8OIVMW2 z$9JISD(~@{O5I(r!h9pXR|Qzw;5rii9kCZmEnM2dN?fw~>0F~dxTf7Rv~R?``h%TU zHb941Z#57z%Dhna)v%+h4wI`96tCaPx&z)h3?=gti25~r>G1JF8g^)%YeU7B1L?l9 zE}(8MiAZ9OnS2`L6x;ZmU2cf+TN=d`UJp5lxhoOg8~LSosz_@?1!F+PHq;k#Cge^v zau!Lt`<6ip!BegeL~TQwGVtWIP?ue)PsE{F+gHY!DIXp47HoaOK^|X_vjGR{mfK`q$ukFSei)+%1OEVgjl2o0~4&R0q~i1?w80$Q>urqP+9efz;m%@uCc@ zKF*qC3={aNUL(9a(!+#Ceyft10pkTn1w6PL-Rg$7^*P&FIH%&C9z~Jy7t(uyR$~pd z_&0@)SIy}W4JX?j5&1@Kala|NCR-JW;#+1ZeZIu~7qyjp^G11{B|voyg}S3OvBn5Z zl(&#z^;8qx*}JDh&qc#N4*oE3ux^gSkcmzjx?S(-W z*o7va>4&D8Qus+3r8s?21@3IBg1R9#eJjZjeRLXP>TLVF{od!d%GbvGA3;>~ag&Ks zxOYm_a{gKG&lF?-d{R!`cXaDoxmq<2`e9ztoh!DL>^WV^^MzE96SeeNzJ=<1+H<>T z|3p86C_hgB)^miaJ@BM3`oEBF2s+RTtCJQ9tYsy47fQ}AeU}cAYmce^=Fj|8{|iMY z8jU*C+H-rj(E_j=B~Rqz7SLQePhNjIEiylBS%ddN`O--dv`&Md(rCaw03`2@9E71U z3}NjliOC(E`HgJN@YWirVaofHd3o~cWew0dUKO1#lvH(8I8;pKSAXp-SQiXQ2a25R z30D&30jru}uz=CH1-kvMr%Cc?HAR%7_vKcTz-CDubgLd-CjcKDgQjaHE1sPd8$c7y|{?oL0g zzc{gTWmP@5Z3QJo+DG!~ej$jz@wt-ZhG>VKco8R+qG z>tQqfK>60-sNc3H-KbwC+n*Sg@;dS1T2)$)a(9$6=rf@bS!;vU8#{~qaF8QFP$Dp> zt06;d3*|sp)|yqP%kUaAPfK-#2yQw%YOQ%RXtG*f4g#xF3(={e$QTiFSMhtlEjYn` zv$`RTve!r=Hc}x16HVS6zc&r0QlpVRaW%5Va*ns1^oygO4`c`Sj`&rg`eovl;f^$y z&{p5`ffsO26`_R=(TyD5L2G#OLISW3U3BuIII+9!XfGVPdmt1A^;wZSe?A2LMigbf zT(!~MX>{am&KJ_Ip?_!CP&G*E6diVS>)Tf9VQ+X{hmQV#99F=gy$%wWL1E z>NQQUUcm2YGcvBi_X3xEm|lLO6iP2l%BQJDFY_siI)f;6m7@@8Gh}ml^!buh>Cv9bV?s{q|yKRZw@Nft)ts+W_jxWLdro zsn@rS-#m@6nfh}U5A{IJuSTnSIwQ1P+0l)p3ssw|eZfmagnTeIA%W(`OE|9FLaebie!8$pYlnWIPu2Kbli3m;Q+;aY0x22Z~1aumdv%F z)`3~54$IgMzfDGS1S?2MgO>B^5N|pUEULB5EC*B%(0v~85*){fWD`&vd@zHvJA@cu zrEbXmrPA8WSu&t9z*M`t3~uC?-Yo&GPk@1wihGyOzg;C@Nu_gtmm0FE%a>#2#3>53 z2%D}<>NUC>+7@dg;N6h73QJ>$Qh43H3;u09MD6|`sJz%>d0nD|_d>}f&T?pJs!+S} zXwH`%sM=qb9OxJFEz^TYx{#?DG7l|X-I5p1u9h8OfY_mN9XI28mu#BC$|#4P;fI6n z+D*>9_l30#&(zaa-47@H+l*d7?cAP^9E><0@;_xRr}pE8vi9VT%Ch1t`K4Y0|KUhI z5blp?g|@xDRI#=Te%?`4?I5S1VqCn4U8wq0Ozj7}cw~yDMMT>jMO`luXOJ^X$=M&q zx;MIut659Ca6O6AGaJc`SA!Ip(+j1p+f`u2zJ&PUT-{I8%`WC0g_Y~?T4$JGKE;~0 z%J9a7<_+z4WL{W2Lhb6?F5&SR)4WhLV7!nQhkB~5-%<>);)X~pXg2%&PKY_c;Xat6 zvJMjHid869EVyl9M{WPE!Zx3i%`{`%qIoX3N+68f^(c{@;w=$hI}(#2N(5vzEQD1S zb*2Y3ZBr*m)(y0?UMFt7P@OMbZVu~0`LM;)JFld+$-9>K4^(ZjhiPwU67^zRHt@(- z^O*|r1)Eg7;U&KGG6oU>nazb+(^GI20L8B1meZGcI-D^twhwf0~R*5LMqi@DXXx_7)a`@)f?cih_ zRB93JMAkT7Y~;16x&%yw7HkXBP~K&8u}c_hRRq;i>d~A1Nn5sE@aCfhmbV8 zVaXbsFHlnrm5O^$&9lF(_svK zpq5Fek(VUzQI@xI7t(N&aV$mU5(ST>G;CJ^pQz>8*$t8$opDW=T2+7C5i!+hIvx_e z5iXRd!wb~bTlN*akfu{NW-5cRE1#ylULa{Kv`VGbW;{m?cGT7|VJY=v52xC~VN`nRq@?ItbZq zDYQx9Bc=w8y}|3PmMXNPW|RnZhbiVbvNEvCx&d87NZ7b0;@G3qvhFB--DzG}y>kp! zT2S=yGGC#gY8=}G!OBW3b=6OKgIHWU=5Es)#m!}TwE>)QW!ZcjvGHp!U`_y-?MU_D zQEUYFUxJj2#QI&K$@-VX)S{( zA%^8gc@4UXHmu$jLn54*a~%zTnbnEnqGZh-xS?HWzAdj2fcr~|Or*BRT`f${E^6RcT{2rtGuWdDR3cjqGZ?lmaEF152UAj0q!2t8oH1 zt&oUYYw{t>Oy<)qMplF)_lM!h#21aa;!)oU=<#5}&9wmlmuL zM?}7*cfOIHAGBNnA$4GmAnt$|lbi|J%84lm&WWfUIp3B>;kDEpTK%@C5O?HMgGJHd zT!<9(g8hnpbfT-|Bhm{#C_xV@^PGlJO@Y9KNj@sRSW;nbh zd7SefhykxUoI3rV|M~yI@2IR+&M5reX^dZ_&`y+|;Kjj})^El6a`Ic`z=xbEwfOpu zI^nc62`n{VCmjVUl=8`ky1deLT@*B@baxbzk%Ne0{vOtr#DS--1Xg{_O{+AA3>6W zJ_ovzuSjM9@-o$rIvTCu#&dUMM}&9$ik!am(`bGo#t}=TiYJ;YYc$%?&r1V%*%ygl z_&=ZAPLHMKzGN|?z%=oqP#1D=fylVqkKOj?53GmCeL^+~N=p$Al(nRFX3t_J=SZ=vEua-)v&&T^c@7;oaKZw8Lx=xBiU` zJW8@nO8wH&;|B_1pp)PQa}Wd=?>xdfGj}@nFW707hg3&3dQ`-b5fyVtQTjmrT41yN z3!j!b5NoYo@q7dYT zsOa&6%4%#sWK_rxm?gP+qVfr`Fo8=pMF;*`vJc3#O6pae%-)pd*~JL&mWK=CNl3lf zlbF$us#5Ag$)+#KOg2XtP3S3mL1tpg&ip5I+BZM=bn-woyJ2d_BNrpR-+NFx><47H z_()+bb_|g}(1gNH-+V$GL}9`Tp<|}_!P&^apr&BL!xNEd(@2U4;p{`tWdPyPXa5s-rFjbkmBU)XPc$P?^*4U~RCSHFR^{?HBb z`NL%NgrC$YRO+nKv(uk>1_KcvABd?I%roXm#+Ld+6$dG6(5Hq$v^vEX8Rmz)JD6{G z$XE!~!DSS&;i5j(9!+d(5188jb(y#v(6Pd5C|)qRbob8)cRw(-I&JG~hu(Av)qP`S z_ZbL(pitEXsA>y-xw{hB;W_k}q1AG~@d9Y*7o-gWedcbY+dTMz97ej0=K*WPTr4d+ z$w2VHvt61|kL52~q5}=MR}T^p8B}tS4k+s` z({y0&vX=L~g!_OjI4hg_oV2=z?aEu&52*LvHL|4|&M4oba@bu5dBSSeW{fUQ8{B#j zN703AkyX_QEHX<7@?$fL_DsE@8A`{O$%*QaynY`Oc7JZ)!Vg zv92aSQi}T2C$p5A@(rVCZ$l_OKls4=KVgKacPqtdyYn3kWi#Rlq5RO~PUr*~_EpNf zx0ESb3)$C~@@fK;9Q+Sx$OLL*pCnNGChcV;(_}zTm zbMOnfyTV1VWl~&t<%iEPIVZ$ANS#puX>LdIhf&2v&IdH81MIZRN>4d?{v(R-$Q}&9%31?+AB>`TjW8@WM4eg!zPcPDU<9kvuQ}MnSoOk+vY!4R?1; zhE6j1!FKBQ(gO~AE6km#k%qSx?&Qkb`$f5HhfGe5@dLvtvh$L)^aHvnRciYH^p=@1 zv4}h1U7sy+rq?P?t+sx7pHz8n`)W>7Y8RZ0k2x@>rN?uBLv}hK>OiROU8{u>`xQ&8_n`QPVOrdyJ#BjG*+yxQt1BToCeTLh^ zy_}ph%xM+0J1*!=+H9`&GM=($R>lu;vDg%DEa?I96o6e@RooX1A@sK56FRR|`f6#J zhM^29=WFf;RJRMJS@v4g(o?~n)BgwjX3Vpgvfo1bx3^$fj8ia%4<4{4(+Y1^9a_=O zs&13`bXI3W(&J;Jy>q??G`<8x`h4%K-yfQHU5*EIzgJ*=3&gQB>knhvj88tHQ%HNr zrJXjHA2R-{%ns=al>W@bA!~j7p#}Sb(Z#FgM|B1~g(uwT*VxGiybA_)!kqf$yfNuk zQcB7nD06!fBJ*oW?|?HQh-qVhJ*AkJP6tG9R3Bl>OpE7xa=4se()ZI zupf{GAgCTut?mYA_@S#Ed`)!b2`%GZ;~G`TVG5n*spdO;)RD4@>d;pa=6y?68b36# z55vH3XeU#*sfLT)eTu`bxC`RN0w;)xI4i}}I6WX?C_g)z`3P6e5#*;Fk7?ZVKFZwm=h zK=t0BCgzfXKa6fCOauAd>4<6LJi`6Qsnr|0sRHU>I{V5v<;D>*DzO>=`D2Hn-t1T~ z=mu!RzC%ZCsqHx~-;ziC(S4{eY5s-gC@(;BS%1P&*vXt9M^V+h| z`?bAQSf^C>c3Zn%zCIxF4=ZW%$&|?o#j$HjPxNgcg~)#`6!*yTgEusWo0FPPh(`c) zhw!k^4^y9ROO?LEZ#s0@Kdl3rd6qP(P;2OhA9t@PyW4lkx0e>Qn|RrqKk%K}0WGx) zQu@OB3eqVsf53kW`vKW#0<|YiL$}L&ez|$q0zV;B8R0C}BHdof4@@TW^#QpE7^=FP z88(n&EWR1T(5{(DN8|^7_xl6da$vXBwJ_MVBW^#_PG7(q?3BDpIfEY)Q#)XD z#jQ|Fw|wqxWZ~YB&x0fCZn=6@%AV@DA-ZW&FIB3WJCncl%~y38TJVR}V-Hw%z8c-U zUlMi?;wb-w1TLg9%Wrbu^lX0cQiZTzFxq+DSE!dM(+VrS)#75p13q-Gbf=lpxw5-$ z%ei4bXmdHCBMR(YnnZi|67Yk8pC^iLp3;+st!ZM+{J@^<4fBq4Pas}hkgxJF?{Xsf zLiyBN26u-n_I*Cz|Y2)%@DI2e_%+A$`@<~ zncP72($vYIgB(B1fNK2y0iB*J?9$p}q5i-|Nu}Q~iQQGRGN~0Zx#jjS(nfsP7icE+ zVN7b7+rRb@ewd;BglPnyG`;4-w@o9NCp1y)hAsW7?ODfRZ=1=Z*s|}?%MujEuqV4i z8`);~r0Lk^{DD&D2bT!`1;g&6AM-uSLa=)xIPAL34`>JZrUP_fLb^tdA837HKOpm4 zsia-$zSzJIq$c-?C{}2fY!B7@Lp({iiCtfiakS$=udax+4oe<&{THm;(JDjOj01+* z)MSRVz)NJrN82UhWUCK_gs&wyX;0Kq1ROWf$JR;}ya<~fsn+UW%&&1)Hk+Rx{QpV*xLlLXcWMu^DF z0U68lc@D(6erq(zE2h|k3dH1yX$k*8iDUWH1p8OvWqg#E_45r$^WJCfPx;Fb7~Z*V z$UD5H(pse! z_(pDx<{g^SY|&yYzr1wAH=+Qb;q44B4yPEKDDQ>xWyE4PE0taq&T6nD#7S$DP@|6@ zV(K^geS|vb&ROJsGogalZNl09>@sn1PcJh7KTy-b?(|b;UlQ^DNX8J}6a5zX)NXk( z$f4#4mJb#eT+PM$gFBifffqYP@a_I(QevS^`N?M3etZ3U~1dDJ;dccQL^Pl#Qm21hBrk`?jwmY zf^_~Es!*;@h1j92hu7Z7Azs?zHH0HhwRmgv18KvnFLE_Bj1b-SGlsGlcR?!a4N?cu z0YQHgI)dufU@>j)jVuRtBQxJmI$y?t3%?CtvF)! z@Jxm#4eyS;)&QE(zVce6zB*Cf3&nWpb-R~3Rf8n6+It0*yCF}EMQ#j<+qW3pT@;8J zypb9?XOaM9#uWrgo54keBBa;;s8upSLqTk+erk zO!5xHN_Das<{$>I7clq1R=Il#2mqU3RqQwnHt+L9=Z zmUM7bUg%a975K&phY?s0GKq~PfeBZ>(C38T2_NTM=l=3yQM^9tLb=b%Cc+$&sL7Fz zr-rx>fO#KYkT+c=UGJz1re#3Akh1=a`&vT^cK(gWifpL|LMLd96-k%efS3)#S*LgY zHq6xY%V&HR+d-4EQo7%cB_M+esMPKcCPA?#_Kn)ASR+k3Iy>;X?*`r-d7U1#x%7h&0~I&Yi4ct;FgOT~hiYVhLk@845nDzh6>V2X>iXLhrhPQ- z19o|s?;IrFNWT>tDn?fwSM~|E1WH@LJ`afkEvL~)w-i?DhP;m^Qgdqqd9LQ(zl#P3 zY9!k*W=rd;lT4QhWoxIr`9Eh+!8R)26G(9$NQ(Ko-t8iEFPRRO{%<&eId}JiD7!II1)QRZ*sFwGE)E6C~(PUaI&RWo)$-m{meeVzC&_=1OhV2nMu`vq^bVn((&W)8H zb$J_0ZyW5QBV&dtorv?m(*9!9QHgvEb^`fCKST|eQnz6>CQVnf2P5?c7AgrsX`lgY zJ9mIf`GG94g+^#yD0nlvWb8YEBPiLR&{8XujL>U};9MZe*h9^5+6BsWSzQ~hsyn(0 zYYKp!o$5}0Qg}Z*j(gpXMX)1XUfc!->K0y2G&>W+YuEwmAP0F+mSmMwZ^6wtZ)68% zk+XgVysqux%CrJ)YBw^ZE2>K*Z@%^U5asU3*g^7EchAGKV0Q+PR~!bX3d(u`Jz6Pr zKXQswQuEEJRNamnN%Q?Hcs(o^Uf)?0*ZDh8egHY%_{annh6)y)BK>; zG0Qb`FVu|Snv4tIj3NQCzQ2s10d`4176>KQCvo@B8!?5FmoL$lX+!dvN7GK=x{jmJ znj0DRa5$k-n8aKtvmZ5JP{?AOROg`?B*MF+^7=$jH2A6C1~2zF_~nKC@ki|HBs(zr8pwPhJu_$>MxoY!cXN-tJ7Uwj<$jnLlh#~!!3(zy@$ zL@w1@3$P?xUm8F#(*fk($XwQwm=TJNI{nm{3B&`na(`m|BKEtkgg1}K>$Qqwx~e9(!!5H!4_uHzz~;&Q3b zf#~$URJfXrQz90=+H&3Ma-$^ag4!xFC(0~Q;Sxq&e5(tkT0jllld54GzNKTR!-hOy z7N-R58FObi;aHlPd3tMFLEJ~E!kapbXq^Eut zug;WZTi!;}vT%-^yZh2M_*NGkUguFaGGkr_GxdPEl9=Ahg#~7^z#V%4pEgSa^K}ET z(nZ#!;zcQli&R4YD$b{YGCU!#w(BO`NKui?dy z2L4xIG#v3 z?!<-WjX05Ov?Vxl4}?b~O|#rk6FKu+`mKSd4J9i!#)@rpLNhPxju?m$CB)4i)5#n{4I1&_j6# z^=6H(fLm;2!a{h0+qZ_3fDMy=dQGnQr7NaOVKt#_e>=y)NGyw&O|x`F(hDc`6=ZLU zPfiD34wLaNsMe;`9n~^9vQ-;v8s0yIN#MOuzO>h%>9UU5?g{STb0EDUXu3C*6x;CK zocThu)IqhYqd_)Kv5d?J$=t&os^Rrc#v)5=p{C+t#AxqjbIPr2cpyV;(#8g`pDX1~ zH7d6j**zbkuwLV_5q>^RlZLpXXvfnxwHD3~VAV7#XGgXeXw2+J+l*75z>WqBSza#q zn`8segdKI8RDmA&LLCUYXF1fc)`M}b$#(@)wvG+epcdT2;Yl-%Z;)Hn_;MAOuc-(d z5M7|kWE^s9$_NeP!WvLbm3v_&WvJmxUGgYfImspw9L+o5GKE2TutuC| zs9pYv3_|>LoPb7;CLO3VXV9;BA>$sM2t+3@q7{E9aCswjO56xq13X~eN_lC0J0cZF zE@)0@&7HAXu!ocXfnrfLB-K|d0WSrCpbdE7s-+N4uSEg>Z0|LM744nh@o9!c%%V#z z8_Kt=2`cNu5R+7T)&oTY56+d>Ht)`IS^&H|YEIdLW}j42TTd$H0BtMSmU5O?)oY)xnWm8pyIvCt7!?!mxHK6X{!oyW`l2& z{~b8Hhtk=-a+0Pubw=uj?0a~T*xzVt6xeU+W$@m}((5QV#3glC(_nSo8<_{lp*=;eqN zra+t|Z^+1aPOcFJz}A*G)uk&B?fG{LxHBF|t&R_@sEpjifG&d)Y^PeucSJUx;_hEq zcQ6g9-34MB1n>JMXn&!6SYA$(kJJ>gZ@npX1DdGJkA_o6-KJ9owD%V>_za=|ojr6$u0wIQ><99B1X@ud-HSP!Hp2Mv|WtL<}YMTdd+LgvybDWqk#vvYm= zfIF;{mGlTu`?^nNRBYPPhjU$st%3qy%vOOmEH?N!WUBxT>xHy?&{n~E?~vc(smePc zxItqxFssqPOAX-7eqMNY)F#5a5G}Aw#+x~a#lm|{yOYvqOHiikOjs&%As{a zAeD;2<{HI)p}H|+k6HTf9PN)!F+Y)CW+$Vzdz$T6r;T|jLn<1oQL50heU_2s8%Yx- z)F#8bp`3e#x3M#}CQwCwtBdhQ1bZycDPM1F5x2|^R0H6C)zpRiiIr>o4!K7BZ`4@Y zEcHUI`ZWkUSZ%&Sebopt-0N*NZ)6g`Y5~7iEC1ENyeCej?#N2hdf^>KQWxX3eDWTs z=4(|%q6An|+OWL(Zx{0USkWplM}DwFvzvh);8!bUwx1{`#r21d7pV)Wo%>Fd(!eA* zy~oLc#2uukPlt4d!FS%iFQb9~3%SD$y*?y)mL5s^LqSQU z=#Mi>bfw2ft~ch2yE=Cu*L@6jW-iDwqmf1!;w&d`=w z$nirk1{~^vIyrS!vij05l*=?Qk{0qyD@z)dq`X>AVhr@fP&Y*J8tNNPrn^EClT)*G zAy3$e8fui9RPyH63ptX*%K#S*+!qGUgS4(aZ^)ME40r~U?8XDPbZ=xnU00G9`&79N zh8hu(x}oecXqqjB)&#p5QeqcMPCF-_Svk3JEF`8-!@nbH0MdjeNmK^|JnGs7E|f_U z2m@agQrLMf)HK4mDkX(LfTIOAML!+=M07f&u9mBb4NR3i0XHH;nG+NCfYeHR+4JwV z7Z3keO(!Hstf~ETp+~v-*m!xPw>#lX{Rt-0F|W0fdWzJS5aDdNc|dH8dRAmk(2=~3 zC!7uIFXW~ZFM40Rnhp*>a8rQ17kYf@WnfX&H^<~{7eA0j*+UhXEU90Lz^O;H-B1hU zPbcSBs@c=^LM+rG*XORQL*@RhS2w9F)SSAmTHf#f`Ncs6+!j?>Ao*kjlC=CUx9^H6 zVptEv%mf+(QiW3f!f-NI_;CY96Txz+tUs`i?wbCF3|dQ@lC?;IxKC*!7m79*pU|eu zhLe@H&?2ONTOW$-M1cgEPK&8hlgDkmk;`JB+3@b58Fg|{;DyM!yxke#09MrvkDN$T z4zD-)PYo3FvpO^<1jJJZSorWx-}W|jF~hpNJF1xF*?T#Jtd)wRcL94sge(P8uO3lT z<_4;a}z&l+wbi->CX{ z6G_Dmo^HD%`Vk+pZ>#1_OQfLou782fEYTgiDkr0ZIoT28`=}EQC|}?*TN@y}3JE(` zMuIcK8I&)S*2^#_tutl^mEttm9h89Q7oojv7_d=3_EA!01} zGEcp}P-={*~94M-_mjAX9B8agX1&m6CcSk9nKNyk9 zCBUJw+)N?wh4Lj$Q(8w(f|*Qf#8?D)4}=??G%;~Xa`S|kUjIgvzqD8aSgGc~iaikh ziT91$y5!|k-#bp$PDECqvFe?y84MDWCskm2ej_K_;VrB8v;hrt!+Ib`0BB3Bo6f|) zQ}#FVORnZE@06~OLM54~yCaVfNlP0~qS3Eyaa4#K3~g$ADckZw=P3I`NrIwfF*9Z0 zRcMxNieLvz=t{r!=j_K|b1Scaou$Z_xFp0jMZYV|RWgw;rs3OQ#c%zh#J)MS&v{FyJ; z5Ft*!7HYn9oy*(dFJ3pi-x;MAN@X*ht^ys2JyNX#J7O}cavhk>NwAv|;k}Vxy1WYS zOm4x8^T|-mGm_ZB~5S8 zn>&%id-NUafzbmx+eUYCceD=iRgZ&BF;h1XeRc{^75lA63b>bUT^22!snGMy=e3nibe%3h=!4U;wZ zPQ8%fAoI2gthM1ssP8ITDwFI#8i*U?x>CsBW+phOngv^vTo=TPr>vX>M_Yww>Qm1 zfeo=N2Cu_%^HpA>h2>S!LM=;Q2dxh63vQ)UhaIIA_uVsz^jMR@pWjdtsTp=V@MJBe z;6qsQ*1=k+vjcDHi09$XLKW1Pm-mTsJ*3mi>EvIowsg8F?~WP`=yNMl@xCLsI&8=d z9MUNI=&PqJu2BM|$cpHL_Y4=YjDq5NDFZ}JrJ!+ z<(CuaMixuV7z(^!8K4&GRClf%f!ZmUhfd_(Q5(u~Z@n8)vGHy%kk4wF`xKjEVwjuy z{io3szMtDdE-n`P?@yRw1SI8&zr$I3?sWVF^;TxzIpYu;pGd=*JgmNt@jxB7KN=#2 z+Ww|HB=3RJK(VPc9W(#-;&XW`X`y;;?t4sY`CX6ila3J`Dv9g=MMN~vXdbu(cNEDE z-WTfJuuoU`ZHh0ufCT1qftLRly|)?=ql9W$)9-fF?)9}A7F%wWXlEalaU=0u%?x?Av# z>ht!IE~#yXZbU6IpBHLAQ)R5y%&2Auf1$eJt^rX9P${_-0*2#>LaQ6zJHe&W2H-Wm z^hWsn(u_7l(l~?;o_x6>4{^v#?xTZ;fYbs1jjIP(Giun2yI_=bqtK#)YbW{C{q%~W za9}-9Cz^loP?}6<2C;jHZC_icePGPLl2V6mg^An^m6xcvZG*KbHSoyv`8P8rDUDdd zms}djmT?2l3h+kBOeNOi^z4_c|3tK|@|ub>2-*d_yy|l!4M$K~Jh`&P!;9&I_e5x< z_q;Tc-rI;z*$oU{Hp&SlUL{5;m1&CJnFn|d*oB;2MLaMXR zLYi)!$}{D8B0uyNeredisK9m7!A=aI?nqa1GNvRWh++qU7izV**{^b|y_OQzCt&Mv zvPr3h)8p<+b%;XS9aRB-D=XD1Yx|f7-HM`IKpz20k|}C$8hImXoDa$Cvj}`VLss@4 zOB|FO>ynjK4}c3+C`4Iz)Mn7D*P(v5Y5E+&hMLQiNN?FwQlv71oPT#B$-hmWm28uz zUSy=B-zc$mXbm2-4%|jCs_w{l6r0EPgx{KC^4wl?ps>znBbS%Ms*{fjJNlE7bNgzv z)n;=YPg~0lIs=}qz=$zw;hjT~xq!u{WtM_XiAZy-BH_v_Y;&??}m5nyo16t z7HT5tO?_oXs?IRHY1td_9xzi})`-};b>NrzE)8NK`n)u9Pz~t3;u>04h8`%TL(sfc z-~|y9^~G$2Pvjtk24gzi<^;5P!Fi%6_l@Ti1-`M{;f>S-RgUX*!yEOcZ`EF7c}=5b zj`1&}6Lw3aLU&|L=hoHT!a`=D$N^b&3)P5X&mz?`8xS*nhjl}lWP7jC@anqB>$FU} zxlj@@xB$(VcoU5V1_IUK0Za-`YrFZ1UCO)Wo8L-1-w zBGm^pqEAX|N8X?$4RaD+XNhFfB@_m_4HyBi1jZ6hVAh94WNnysp=#j9`bupgtuA9b zr09Yf5>fSILQ^;WIUcL>yDb_U#4i`bp=lqQU@ED^j8VUjJ{aw7uvvg6Z-|^>lGj(r~UI@8nDWCe&J&9YyS%kF+)6kaKHWtJ1e|o+ydTu;t5% z(rSkeWVJ$L4@8trO9Q)xMiErKg*2PqEw>C&d$7l@<-L&E%mks@Rj#2yzHQTT$H0v| zun@UZ2tK_7=B#`qT_~v-1LMZIl{MQ1uswVOj`LiT)HZparXk_NR5m;dfkBCMY@G+8&4W>4`@imj`*7xsm=CR>oxeVb{E zvb=51ofkL}B9Q_1U%|8%-hfs;4`r)CSqFIv6xwVRCfn^$ZbF6kK+br`G;Sao5Wa9w zp-|`mZ=^Yf*20BX=f(mo?}ZXT(QGJpjI7%O!PE8+)WT$foI>!bZ&-C}%-Tm<+d@rb zF7q+tQ=GTuvgqf_$kiE-T*4wLvesyVB&0H^>a9S$SEsA3ZY=rS5xbz0lLRJptgF>TCnB;S&_<**~e zB+wY+t3%skPJCK|?FH;Swl1&qrUb5h}0F zxH+WheM$(1S?~U8{9CLWbD!9;Gs~~kDCu<=3a)O#a zb@#v|7v3kDe*e2o0UcT`K8~YCJ90-Ja%g9*1}AJ_#9ItIYL&T$TweWJc)N~91UZrh z)oK}*FR$|{c)N7sg~<<8bK_C^@-mJ{HE@6qw1@|)F?Z!ZyoqpAhI+PCa9hekEneOq zEvr!|ShXRr?r5sGPB2s*J5=Zr#*MW5bw1WUrY!ZtsTG6f#PCM73Vq&Js?&rkW1vSi zJ!>It^5q;vsMq15#D=D9sg7jKOU?vTg}v;B7#F0WTbD14ae|V+KK(s|kODukhSYH7ZE@VdIQYv=2m^!QC8m1kUgwoMKo+MKTk7)G+ zY2#HPHAXU)Ab32c9Z@vWmVM@Emy$koLYP<>?7flJ4@A<{!4*DmRoH+|EjOcRJoM2j zrF4%Svj$bu9*Xn z3}G=<(6zge7czmI(}maN1u>yp%j!ZYxrK&T?^<4rh9$BiJz8k=x*4B@xrfEVdjKzQ zl7yQ(B^wQLdQsL5;RPvmMN%>i^xMw2ofO{44iD-`#&p+_0*om_Tac0#(%6o+q3Y^^ zCqlEMCbFVV#?xix6bxc-6fydb(5{fCein(6n!G#G`+!zs3$@iWj{S+M?rPwALVn9| zg4_e)P)X|mX$UQ>v@}^a;9v=7jUqAUHe^qXz2t~Ox;-M5Hfeh7?bcur21Zug zqOkfrkGQrDq<*+gA@e{rcm^e+s!OKUReH+> z)XZ@cihFOu>4U!F#zzjM2PW^-Y8)Awd544>W#CD(nkxbrTMU=*>1@N;kZ}=cc%`F4 zdww>nYUg7W7Q!cg@_y)_Q3x&A139s^ygD#{8tntNb05gjmqK6eQTh|OReK{#%!^G^ zm*a3`C!H6`q{|#g_steF_28v5;MT3NiS@S=CirOVsRbi3;x1n9=tEZ=-6)CHts6JV z7waKtXUMe3R-pipM;ODKJuP6PRQhKv%t7@)Vl|ZHT_}D_UA>Ww9UAttawnZy7&i(^ z9mJ(mATJ;(uVnzHUX{C}YP6cT_sf{oTKOBPUd{$kL@NxdDW^2?L?Alu-^hh!(K2$5 zDc}jOf~<#yY74F?q;q+wGuj@gEnyWxR&8O$`l7;(RLCVA#Vr5C1r~6E7*IEq;Dc{U zx4f9`s-H_K3Tm1Q**Ty!LUbkSsjORtg><5M=$gCqQxC4tiK%vZH{|1U(pJ_6cDAqs z?toN-H7=pGa9o28=ru^1He)1Q+;xr{S$Mv54vm0#%OGnIJ|ACOH+3?o)IT*5 z@QzuGDIcICs?=p_+e*C6ENMocg@$)2>tKhn9_hz`U&s%$QO3fW2A=I4U`AGX^9me zr22>o-+?k)2%ue%zEj%d!|3Z98HA%tuUWH4T9Jb%EbE^rCm@CDg7cD0C6GnWtY2`T z_QZ**V#}P$nW@;h8!1-fD{XnGUKtA3(@LT@LLaRYnbhyKGPCm#-Y(D{$jL5pm%f=I zf!h~%#OrvqBhzHO2!(GcHWhpV_svUL*52haG1|j=BenC@WoX_<)@IOFKo5|(0q3Oc zPvP{Kytq<9>8C~6;Y~AK7E$r=y6q3K|3nSST#c01k<$~}WPK}{4>NH=%reSZmL{1< z-GMVkm0ca&IlcWWaz1OS7BV^kZB3RwYD?YuLYfC^g<&3RrmIf%PGt8&rt)9SuFDmb+s64t#Yo*z z4VwpN+Hl)Jd?!)f4JBgoDBm~&;4bMNDDBq5t_mG=eH=!yJF1KA747BK&sS{5Cf3?g ziG!+;55$Cb`lw?Sau3u2(9HwkCGepn1Jm#t26>=19Zyx2w;CF_ly^hZkk}m{f!(yAKv&={ zWW|UY*@kMtf|LIp7&v}%>ahEgaQowhl7?K)-?u9ZfR4%+`@k^5m zHn#pk{c;Y!V26w(o72w5cjUquwAH+F>IhtOdmtmn6zg)Avs(t-$RkKegItdktyU1D z{+I5LwuYFfxdDt=qSbZV|6HAd^8$XB`gZqU3ab-856DB>f$TEXj;zuL}Ia;@`@guz8j;xF#bqP|k8B?Iy6#25VCciD#-tPz)MHBIniDe# zupT^oZj2U zXM?=qP_*U>i5Y-vyAR~_02+;~MUeFE@7BTsX|pvk?cS7R9lF1G7S_RrvX*D_Rwj!y z^_a4SEyyYu|>Q!W`tTn{dfEP?NvhXPV4W+oKnN-3QY>unITg!Q%X(0G6 zmD>@8fO;fdC>rTh+S0;n$yX=M%nK!Fbb#iJgIj)SGk|lf^&sa5(8y3VU~-`L7!q@~ zqkc(mo)WV>;l*+*cSn=Tnq@CZ*q(=6FQ+FJr?GSs5{nM;@W3tm1392TBiH5CaR4(j zM^dIDL8fA>p-WwnH%*(kv?pj^_@t*rs8@#YMt!H_Ht-ub_2Vsj>aCnkqQK)UZ-{Fk zhqqlkd*|TAe^t4rxsXmRsW3}=X6vg#y2%zOnM?`X6Re~%Co%M4$-j1t8Zjhc{iIy! zfMbR!Zm6Kzv7%;^22J`9YtHqi->AM+Yk*XehTF*Qzms|szcy9q;-gx9xXkTtqzkVx zoXk)8*Q3vc9~8|Xol4LOd}gH(T)TCkq}W?uX&d#0yzkzYvZMBI&)lW>vsLX%^G0c{ zW2xysDJne!a)LFn05%Z9YJSp)q!fKjFg9$(=$r? z#b}J&oDRQ{rV+FTgtQ!wS;D#f-L5g$0zoq@$E~m$;}>!~ls3IJJNd!&PH$vcdGJ|Y z0w~qhUH{$;8@a=~P|IN6DKsakX=boWx{(@vw4ASrN6qMXayyuutf2aMt~q9mRGmrm z!`D}8J$>&VX)SpAMC~&ue{3i*PjbSwrRD9cp@Z_{@2riQ!sVc*1bpC~6kTZ{g&-PF z=OKnGkqLG|2&ygrg$y`Aa|SBaCmX>Yf-Fj#7}UAP_Zky@zYAVZoXWeQzb$oNVyRru z@zE1H+VjS|UoO67`5uTb4|JRB?k)(N?i~ABS@bXk5X%1@Rb4N|<%oJ0M|3kADXXCuA@vRGj_XFnR|oNc{$Rn>5IAAle#17aR1@WNgU51+)e$F%n*r#!ycY!|RUV2WrFc z4vxrmrAumE`~%f3VWw2p`bjxBr`S~QLREKecV#s1$mb>oRJf5PmRl&iY=63BLQz~k z&mbEr1H_Hc9nd;+dP#5Q>UVmb&X7UH8yWrLK6J#OE)Kh{2X~Xxa1UV9<4SPM;V>2> zEu0JGyYhZ@W=xXKei7;@{X#Z3Xmqxi52y9$lM37Z))RxUytd!k12WmsU`K2}H;cY! zkvhmCwq@65&@3;cD*|oF{nak!{zJ+YWTO}~j(|IPBlo-h@od4}(Juq7zPPZ)rywq% zRqFhm6g11EzdS*=V)-3C6wU+HD|6d-)30)rjI7iE-wmj-cb7;weGm|8mI3HrJDM3m zPvt^&X$;=h!HJT}Y_x)R%`{T7H!_zl)2LAw%1yN;!aN!3fn29jzvX<`WWl`!G?$_U z`K61z(7a+Vc{A8AcD@DmK<#fDgxH;yQexZ=PRY%MlJD8<1JxFX+;p%VxDyW3v8>le zbM~uV=!q2as}mDOie@zHM^B`3iFac_m&2Sbr+jO47v7qVg;KU|!AcqA7DqlsBUugH z-Ka@^6A3Brgio+(5t~}^{CmDEvNslIUgDX)P*Xw+G1{5RH9%svf-^LDT6^2H@Mdh-ftxRsI;Ak7kxvSToPjK{ zAnw5J%w<-4#Q8S1=7riPeNdPZjK^( z>^TD|jLg-wHRj9#T{obUf)`hhncJ9+W`b$ku!7?94Kn8FszgQ{FL|avf{pCFP&Wzv zVK9jXTsom7U*nNiAO1%A`-H?%y1Wg0y9_4pjO!n{!$+9BNzksa>4v{aUDTY?B4r+zwaDb|F8;T^`RCmBCX-DOCD@@AI zRV{eu5rG|H8?q-dD(I+EO=OLs$gFKB-Xb)*Ud7U)fUyt;I{iDUwRq}eqMJ2M>P`?} z$kq;REQxOn1SWNms<~KfaoB)Bb)LbFmKFe&aH1TPqp*^H{ga603g0~Pb|F8EgX#wP z3_tMd_PUceb+Dt>4qc_S)q@@$kW&FBhN@TF>M1FZq1_ghGaN8Urwlfvsf9LI()+TC z(1|9+wISm=(&A=PJ?-I6`A*(?7%-g<@6=)gA{ zlm>K&q6|~~x#Ixi<3vlNkW389P0Y~P%okqW8KmY?Bh1}~65GOXGt!0EYiHnPn}l+2 zWG0J1~#4Oup zV5MSlpGc1}w_i$|d326dg0(MDX&ru9lt{O{6BYIWDyiQM%3i1%QM}M-Ni7CvM(Asu z%{=Kw^cQI4t+NtG8qG&k*nn>(LAvgj%-aO`w@fFHdZMg9=c!_=^sjwdzd6R>L}({% zdYD@@#5F4*8^c2Np9OIs#24V5x?+0kxMC& zTXlcd^P7Re<62r&Kl{)50lpK1OsdPB7h(fjP1~o7n@@I&|4o_e6Qe)On<7j*F1?54J$%tww|D64+R)gF_wX3cbD#-U~&0ixV1O zhSvbcV0aJYt}uArQ=_CTU~y!U=JZ0oAPnyuyu`3D)e>VsPT;chU$u48PqyyD4 zn-|}apMLG3{h5PeFK6H5Ggy=SiMajS0g(C7)S!5~$vQIifj!KG6e* zY0of6g99}uGnt0B2eI>nRghl}@}+N&%Xg&K$`!kH@P){Nynk|=8&rKRaB5)(Bc&Tk zltZP!=>YXY`kc~YY@q6%a1#MmP2L?j3__#3rEGK9Q{FU2kdhX%HzT+HB9b%`V27v^ zWpxAEDuqwoFmUS^lrIMvYLqq|B4-1^G)87pl&_shoOD2uG>FD!*)u$}Z8!-7S8^`* zyOBW{j?-gL%UeScr-a5)L$OfWxOWqj)in(S)%;|I<3iJr*fw7~ksTXQHGwFvCvhVH zIq96$2H9jN09X&?E$n=F@!B@f-i;3MZYW!$p*6I8^`9J*2~yHR2m~3BOxC_@VzTN8 z?~WX9{c;rp4HX<;9vuvs+$h$@xcrn@iOxGrRYUsxohwivP)9A z_0b*C()xUJS>7F`!f=+_Y;)8L4d~>ucCJ2XT7@gUZ8I(DJez>F7rLx<%V&5=2h7N8 z&UA@yq{D8dOr!DfN2zXxE0VlgkSwW&09~3eDKSj@*8_;7bOz@LUioFQF9rB;If|kaGduZqV|I@`Zxk zx60yqN*&aG|Fd-?jo^#PL}Hcm?X+vo zdhJt%gIe9pB|06kO;HR62$&K-LCz_K)X6y$3@6I6%DDlGCe5Or1Y(SJPzvh)f;z%e zCYCgUDs*No3pl~isql3(BhA^$wjb)mcuoxLAiutacW&Tds@B#|Qdj|MHvo$a(8lHU zpKUQtBxK!@Jrz%$$}DfgeP46}c`uZd9TC6ksQS`q|3x;V!V`To_($nf>>N1ID){U) zCEuPQX2PndH|j?HAN@qt-B88~b~ChMvp#+WCr^}|d0A`4YG>f3R1|w5^V#9b9vaqc z&V!YblGx611MFVg9bMcMse zFV8r|LJx^Z>*5Q%2kQ7TI}(x9K4uVExjS;IgB$`g)uHu}SR%YTs!4k91PiJ`5Uj~` zvKqHRUp1y)`89d#$kis6r8;d?H5%6(AECTsCTkYwE%{K2cec-U{Gm!)X`UrS)(+HB z#a-PIJ7ZqW#|E-{%&}@ITQixfIe6uc+AtbqhS(9=4-rzf$>pFNBZ63Zd-K(jcj&t7 z0Te44qja;jNS4?QWy7$e#*7RJGOK-x;BP#S0n25XD3yzmRM=l0r?fWI<&!yj&dN>W zWGWc-E)>-p7x+W(Z^k+Vd9kb++tEyGi2h`4E<53H&ZfW&Ox?(^1?XyER<@4ZN5|_J zXRt?i@E%9^puE*Em1&nw)P$3n_N5Kbt|Za6tG%myp48YOs2UB*DKgOTio=@|FTgry zbh~=>gJ$0KwH8Y}eGIu@m3tt!fJhrN;c6?8l0)nU@b1*^G7{eWCw6LsSFj^Hs0XW# z)HjWz2dgG$ASEs292`^^m6tj&d$MX8@{V%%9kf*lb{@2CHRSN4pj3kc9R)ZvSQkX<_*)J*84_gr<5LMqR<^VBJqB7%lo~W6zmn9@E*w6G_+AQ z+azokDS-od`V2H879%#L=L{xdpC|^4oY3^jtC}nXHZatl%m3 zKs6|Hl#ByJ8ktd7d8d#DwRq=fW~gmBb2<2doOD?92_nF&fd(7UI?*&FYp>10bqsuCT zqsz(lm6W{ZgaPGls3zF!N}4yl9ga{p_5|;aTK246O);d%j4jJro4io%Sib*|s^5j! zER8;q>Sf7+Y**^H(-t_XA89*kk$BEdHK?gD%BKc8wx~WxR}r-46Y(rOH@>{>wSy*J zGuMSv*nVf?MG@^2dLa))@rkN}6DLrc?glc*Lt%_<8A4&y+4~E2hX9_6JAp5hPi#SJ95K8PH5(6zg#2M-yHGw4=L*A)Wkh^j zLajl`$Z~MUG)ojQR3M5vB+Fn|jxu4nY-WvKdUU7IC+REx^ z$xU#$#k@ab=Z!S8zHw>bA_%yn7{Tx8w@`WM0hP;RdFu#g*ZhsB8E7u8l-DcA!NmU6 z!Ql6e{O_qF!9%fdB<;-nE>tUqHq;kg zFLKw7@pYLGWcX0tHQG(9s6FzsJctFQkG1frPc&?)2Aqza}v4mTvKlX9n(#?i9islXj zx80Z?5C1kfxD}0(4U%cuOe@eHEGqw z$VLNnr>NTyIy3^EG4K*OUy$AsvdXujcRH_GZrPbshHEtOvlqRcI`GG!isrnjn4FGs?x}ylZ8}d_mXk2_*x!#T^ z)-JIR03YLl=(HkiKy>gJI5DvYcn_3o=vR3;_Q~lTYH}`=cQ6xzrf)n_bK5;UVSNH@ zznoM?IGLzKyB3$z7T+-lmknf0ro8l|;1n&lPi-g~aEPAG){jbxnHIhxx`S_t35B)F z&z7kj5xMk@jlHuAmL4c}c-#?N>QW%H$<3{Ja(-H_5AYwr6DuIirLOMREhJYjAS4VH zd4k47(}Z@JAaz>^&q}m-{nR8FuZQizJ7SI@jZ%(WLhO;G^@6vhW4K#HtN>oWzzDB_ zd@)r6^+0&((r`A)%N$8e5_xxodjxIj7An?EURR->$O8MMheht_;My11GlHe=h)hXq zjX@pk2M$k^l%>6Qe1uA6k=C;i<=qiufi&G^B{eg-&+h~nA2{a%FLor-4Z*qR`USCl zL|PqozWt!k!QSP_I}U_Vl-9sIRNVQ`A1q+B1^suU^rN3;Y~9OFTCgMk3$itMUUJ4K zsBBIGyRalL#_EBXNQy8psbRfxvAs;WPvqfe(AX;5)?kN(b+WbrI=H0TBywiSgAJ9v zAcA+$Y*W#|`(DGF>*Xn5ic;)k@&(yNJ;8a>VnvnZvJ;EZRAWTBXZQrJpvu{(0c}G& zMcKPD^hCA{H(g7sM+wG<6#I4B3$hteFZE}kQjn3$F5@RkO58(v8`Oka9rFFjiFCK* zMSNPTp9_eMG4$hs2cp;e`C*YZKI}3j}B~QjwB|5=-|d?Qx2kPBWEm~-Urx*s=hlS z6Vmvsr+I5yO+BnHfD-C>YhKzD+hb1jFa5H<{q@d2?TMqoAiu_l2GhH0v_1UIj72+u zEyKyJb;QH!%H%e67F{=Bt{$z%__;V;3!riX+6#Xuxyr<_NF>Bz0c^-Mc4!l9s&YW@ zH+X=kt^LqyDbyje4F+TLiZm{;QjFzgRVYd6WTZr|g?LBR@gT}5>x@u^D3|Qq{8Jam zFSblu7igglC)c)ZKU+fb>~B1fo%d?QNMdP8EwD1mwR7Bv>6JRr$*O-%k!L^2yQ3Nu zI%M4ytvYG*)hE0=YGxg$8!EWUNEw4q9Auo-mxX zd?hX;#H(WYUG+of&hH)8HAy2^{dH8?hf5-IN> zH_ActGlZ0_XYPnoyF1Wh_7Jnj=5;xpc2e%lavx} z5+_?b(AYqsDk3uyKa6NFGn2x9+k@MxMXa-h?~}=!*cxDy>5i(`$I89uT*Ld$G#uU= znet1U3ax$&doQu3;6x2iFkZA@XLF z)4Y|JHqH`~JHwM#=Q3jF4V2T4To8aprjnK*UlyZ`n8K@uE=Cm@IRMogglepeB`@A9 z?~aW2K#LQsAOZ;_?f7?~s^GQERl$fnytVULU=PF%ip%-DxDqwRPlu@H}}ZN+gH$b?WXK5 zZlLf$^m=z*VRch*Sz~k0R=)YZkwu=f>7dmZgQ+<;ZH4yyPl-vWL=IMTBcCTCD`OH3 z!e4?m-_)Qvo{f0cuXc2mKz+l+IB8;7?zH2nRtHrpvXvZUV{M7l-v+mzp&2S&K>ZxH zExS4r;6jR0;uHLBE_JC>a=As`QkFB9$X_5u>`fSD!~;r!Ogny}e4t6XUOL7bH7sBU z<`;xpBCU~+w6~mdb^oIn40xNJ+O$;;OwklKr83BMVq47&-#OO;>_o@%Oa}wm_#b7T zM(ia_q{U99Dl%5lqw3los7A%@Fd2E>EJf1!+VVi%L^hX0F|OGl@fc?X_c`l_at)KAC29SNBp$hv{rC>N~y7TUCLv4)hhBU~0} zC^j0koEZ=EeMHWzQKKYn(;RT?o|K4)^MjhTo3uNfp(>cGA}-{2>(GAiIh(e;KZfzJ zP2SH0b&zEyDr?TsVzY)m6un<19*C@g$p45fb&l20s6cJA(A!t+GRHY^{gQMb$^;Vj zFJisH#iT00|A@(dLW@4fe3s8v0%p=H=Z13hH8i&VhBx~wEuZ=|n0iuPDDR(-q^Lo3 zmg)ypPn5PlrOwd()WH$z*5N{_YYlOE5lCC${L!@43ngXjf#-9SwYJ5@L&ffB5?+HM z3-*dN{%C=v9}V(2SZQmxc)G(JAL0b-1`+BayvB5?Cg~kzIJkRZJQfl@ngKe}VHQ zg!7AqItxpm(^iEypLepqq`uXToT4Jf#ewi<AH35k31$ zm^4XkS6fKe%3Uin$IKa)U{~WAlJsV8RJj_%=#Z7wrj=LE^Fr+TwxherrsdGtDRW}w z=7LA4MfQ4l-9Q!Itl)}ey+Hg~2Re6Nt(qVd3wAF%tU2Ie5RQWj<&=Cwdf-5f7VYa# z_S6ihO}LKU$&~?AVXfrMcLN^X21V_Vgoy}9aNk3^(L3cYrlCvS5%Q!hpUsWDNgI7` z)KPc>9b;X%RjqP6VC{%bft>3@96bNv@3@UOQX^OXGP|q+U`ShG4{_>4mHS_sc=MKBnN*$>7dOPn7I)4eBboVy2j?faz5d zeLm`E#|&wKE9jxfFh~kVh@~5S}YDpjiN{4C$K^Yx8q0*XF}9?Z{cLM zz%_{IgEOoR+|j?)+CK-&3Kv zzTcDwq>rh;=@a&0JXdu@MNiI>wr)VC}|X^!=P!q z0P&?&UU0Iqtbfg39jq+n=c+U|Tl@=Pv~gEY+6bK7$0pW}1ch4kX1Kr&gYl|dZ_gN# z^D|E5x-ugHt3&p3R+j7eI(#1>S1LOKr<@@=Gj&W0=LY=T7nyYcd1HrX3;6`JE;zmK zDsPXEgyzP}VAWj>a_wNYe!0t}W#<@133SEr?~d+r4X;}&cn@EbIvBaJp%VqYi5Jvy zbIRG_g_Q0=l5By9X*syvFFSS zJWetm-7Q zxTfb8oR1n&hX}B9MeRS0?1>l@p{+sDvk%0L3?4`y3)-6Evg#E{b>3V9lRD_uf&6gP zJ(;F+`I#6s2X><4mQ{*4D0?yoVG^a)07JD?gK1Lo?ugb~v3-pb9X4=!+6=50Nws{6TfFXUPU? zO=XsMPLxl;=`;0c@h9q3Gaw>1-)%t*=-kB}H&wte3Yt1oMd*$U@IhO*KjqHYV0m+@ z7^uoVN+5DQyV7n!L8L@nyc72p)Eg;j)-E4ddLG-meN@u zEtUZZN(VvEW8G6-V zu;V4FIy|UOa(EykUeM@r&12Qe@!h1nP;zN4!;7UZul-bUAfwZon00NOari?oBe_9H!w- zaSNGG41Gvb?#_k9lz506ay><{)70O!mtbQp?y8_8+^G5b#$%`oln_K}Ijm3Mrf^83 zz`7%y877=JN+zuXN@oep2MORx-O*jJc|U#EgHiROThLYm*l44rw;{u5(CQRIwK~}= zfk!ScH_|?kE|L3Arb*3(d2^ZRftaVuOZ2E^LeT?}XPGRJ0&=wk(i%|S^)O^j<2#VG z0BsdCwE#jNg_g9ypjFlStgsq?gLOmsAb}#F1-JP0S%Xsq_A!u=C<;X9Lp06e1G5hH zs^1iKPHh7lROLM_uw_dP+CW=9C-$6;ADDc24;1z1(-6%t9vZBz`~=o+WCsw9!E`5) zui@Q_-O-Tpv4!tUZstnj1Kl~JRE)T!9Q;t7oDvT)en$w+qxhdFH2MxvJ3Zb&MoqDO z2i6^F;h;6X!)v$|P_bBcU#c;@(XB${=6thKqtaKKfZslo7Nn#>epv+ac!#Fdh(KkW zly^sZr_gXL%IiUN>PU-(SAXMyM*s8)s7^(oQursZLq}Vi8F_P6i(nzHVzk#60@AW1 zZU8qD(p+%q{-)yIx_2WJW}zK1bSmEBJxY0NLLo1xmf)u|6R0ks6O(L%+>!fgrC}B$ zH&=s$-L$~4tR=k>!*D@a9c#e6M%EoMZS;)kI?hmA^jQ%Iillm7^gzY1P86}3PLp)3 znv?4rIkg5ctthYMDJIN9C%%vhB5^~X-Bk1I2-1n`#7N%D<(&9-e6?R z`#noq&hZ;|q{9P^-K=?kd<^mJV_YbQ&#=_6iYp&}gUKf<+{j$!$S!EBymBcZ*eHg> zHtpg@7Q1U9Q?}lnBef3NjgnF`293N#-}P3fdAAM=r5^ItZ*)Q#-_ur;s}gVIC`v%J zQvGsKREu|@miwH=?0g_4=ux(4a3I2M$ZEp8*v@emJ`Qkc&N;dQy4(02Wf18J`fduI;qq$Kar2P1C>GO&=Z?US`{ zM=D`wGdnUSB5fLEE^GlCENm)(P@p9?=P{|CoCgTsYKax8;g|73Cd)ap$UyzPKI`jX zybh@@a^1-30SGrGlc!A5z*Y4?Je0RVMu+?+O;bETtDtcy{gu=-t~UzopzUxzj)mx? zkTyYEll4O8GM67i!&^$ej64CGtsS&a+d|9PYW4yd<@lW=Ew;${DCnI=9^OO?Th5ASkEcj7GDwN3@_dUDli{o6ZHp7aW0&^eg6;m zZLHu#9@-(TE(5b&+8NlG3%ob_4`j}u&4zzZC44KUvR@FUHoR#VP-#?PRwW|oLWbfT zeWkS<5mlxr#k5hV2f{8un+^ZOqu&Fa=AVE9l(Pls_gPIz3Rn-s(LVClLK5+1021qa zydVY~Xfvo7kWZ;(eI-aq3t{&_bE~g!jZU7k867tCEHGp8c@19`7&pFA@=3EntdS_{ z+c138^@Pb6v7~c!tC!&(bzqDF^s-OM__9k!}!;b!%&k4NIs_5}z zd&mo-Gl!P(2P*QwIjTJy}%X- z#OlC$fRM0cWn=(=GvArQxgoz$f#%&I;r+zqi!~ZvEwCXxGiaXdUS3`h91T7R8$1v* zC=p&pcs&U%IOVq^hh1rue|YJvkz`bn5~J%%E&3u90-94krmVpjJ$Wtp8`&e67k6JI zRBeGc`tHb6mQ6|Ti4Lx_iyahb8W*y6yMtR=>^zW}8PM%h5_e>0f<}X`SgfYlr5y!f z$8JP(2Yqy`(crZ3oo>A#1{rueFhXnza(z#%&xNXca;BeK6);04bs~uhI|^k?8ZMXG zeHt8~@T&PBKbXw>r->Q45!18a-H}seXdLd{c54_-%$wmo5Oz7VDO*1rR<5&acrRo& zaU(;cWhGl{=tqknFqhc4a1? zKW@Z&qG(R*h4-g3Om&a0iTS^vD8Q7yxx$M#B^E=e?dOBsucHQx1mSJd^Moi^cW~Jm z>i~O;=kP&vkSt(#z_vAThnWp%Gx^4;9Rp6x>B@M5J(Nf4Lb0FnFqZ+CMH?E2u07z*oy^!bp`IeXmS7L)O4*P$P z+mnrrO%Z7{T* z=vNljLSyqL|3%cZGEL+vKL7O+g3^D%GrVv{xzr1V7hlO2ILaRw-Wk$zbi61n>)k-A zl034}_h`pJ&BzC{!W~7fjT;k;)t0ycmWL$K<;tm#qQ#?M`i>`}RX}q7S!H<_I01e# zcA;dm<>-e_6{|0+QHj(I=ow16+DfqNJSxE645))VsR1;{cUzdzpgz$CJP}FG)mYs~ z7CB5a&DKJBM+?NEvbt(S(1=zm?}py7iqcjkxY7*vcvE0vG z4e>!lT3W^({JYxx#M56<>fP@`D%QS6&(oA6_CjX#VGqOWacmzj2qnVP|U zAWDJBr85loL>le`X9D?xG$YVDWYO{P8N>!aUJzg4MQ*04w0+B$_vr7vARbD?aHGEc zB=50e9zgBhb&szpHQ0_tN`?@r8}b-!X_Qo?x^G8p{2$&6B_-BPS}hq=jVl;iDDQ^S zQlQ!9l@!NT-sJ2+5##MVQ6aq-)^ggF7ht=x|5Mj?%NAA{59BxvYiHCt7tK~bIlPgo zc|bS3e$bKk8&V0T4e3s7NViblVYR;k?Q|Lg`sa=8b!tB9#>a(fSd>nq#lDe!7Zkf= zZwqQ2Tp-Ejg{uraLDPgVDfB>7m7{>``|@heu_8JEH)?rdty2V#GJpPUyGmQJ;21)X z;5_pMIG54j_(S!Ez&TVybol6BGu}m2YP~8=`yVbIw+Eg++_}J z_IVg1Nl|%24!k?^s&M5ra0->96vT9MdD{dQiddbysNg~)tR5s3u}_30frOJWoNY;t zN-D4+2YX^p9s8g%Yd0yv<-L#_K)w4iVlzbpx2fxZouHi8dB(2Xk<$3EtOV?DMJq|LCJLdg(;P5Tujy{a1B7ty5;<#roew}i!Z2U>A8!^nK#AB+bRPoX`vRb%Qx`a zQpqcp(3Co%W_Uw* z%hI|`P7&2B^aKM7>_RE`8pK)Cf@&CtcjKeWd!W=dODa*}-GQ8UR|QatzDU~-?XBKb zyNtNiYX^Fu4mI;Rg*_3M0ABsOpzscIjs^|SB|3~fpO(8LS5M&OPNA^6907FW7Ge)n zu{bkjO-rC|WPJX2HexQy=H@M64aW{TTwy~a@5^~^>mG?WvI4wSEEPFD+|$p+j1p3J zl;&}L?B(Z^vht%?=BW=fElV#Z)Fkyx9a*1X;xX>!o6M*6sV0jQRA z&Nbc9kAV`(hUOlr#OTtWs(=wY3#7Z!P_Nhh+p=D$N!R+>WOT>mF9FXbBE+ z2h$6d@s56ux2@I&F$Q^D22yP?)nEbxx)8i`M+PX7vzoT|L5Q7W_!U9?_JukD^Me)S zcCWa+c9It~wL*cHmrsx2&DmJ+wwYWg7SXS$!s|gMmbQzE9B8p2`w=wEul<0dFxnWM z;rxP9YjZF^lG^&S`1eFc|6N8$t}a3K9k&8Q4%P3xeCr@vBORwL2degpwCv@T_d-co z)8Q%j%^UUx-kc80TX)nE$1@QbMa)}xTf94PUS^XWp>=li*%(4M#I5%>ReB!pr$(*s z_S08nYa}0xwc+(^1#umO8`;sba^WC3J#xn9X<-NK39$=gBH4WAEW*a8}ZUUSt}kiBo_BQ?8_BO$!&S`oL>gRKEr zH&CCU;%ah=;r3g%y$Yes522aokyw{7Lzt3Ge3li7owdxyz;Yp z4HaFSUUMMBSqP|$WD{W&x2ZBH1tsMmT9q`c89G3<75LNMxS=;onuf|p9Obo$!02zv z4P`RS!^Y8hfs&5?N z!^cj~7qB~W&yIC=weI47y%T(>pj5V&nOCh5#{*AOOQmken{LoSw<&(2pLdCAn>L#b zxw%LhrYCJ7{SW=?Ivj`#*34VWOU3EQV5it8a*t7HGeXY7631hN*LgiD2el~4eN|v) z15r0V>h7pjPx}b33$yU@ai8YmMy>4dj-ersX~{V~{{^Ihebq~Y$o0=i%|?qL-!aHz zVny`mHkvj+55Tq2Jdh0|1vFQRq)W04OV3nSJLruJ4S|;T<41SmI@ULeQPdHTwhU++ zY8Jt$h7GwF4_+sWDK7)XC{G?xp_Q<}kg!6ng}kG!>+zQn1_3{qz>!xyX&Di?P{cc= zKJsK{e7VCLFW*p>w9pgFlqPHO%A3}*gBl<==|uyx9nN^Z2g1EZ$nsD;s{Ccc+TYiQo;sO$X%ZpDza%(u7O`;s1?awCPh=Tq962xgUo z66vULpjIk%n_ri1$LmZIMm9qWHD%u4K~6s=#pHPFOE=`n z93Sj^Sv{4g;eTR$b$E>--pCV%LGF2Jwk!{D)qUSkf&|FHKWNq*TH&p`mGI_;+>0%( z12`J$g0gjJ9;0Ltl#BL2C- zC3K*rK;4nILqkhUCOT=G*%(G`!s}}JjXn$^vJb6Gz);;f0@g8jK^*S_?Xs|*-z4rp zx1-G3p{?fa=nAC15PJc&`=Bd_)I!L57MzR`5D(M}_Q;eJm=_X}H2aOTTxl8$S)qKz z+z`K(E7|ryM&<6vI0kZ7$Kl(t|4d6ime&HikOy{)Rz-X|s|9!dc_7-&b<{1Mt%k&; zDcb|75Hy-gvgU<(rlmWf!i_93Kedsz+Ss=trGAAc^;g8eS-H$L2d6DRbv zBLmy;b~KU7oC$MhQw);2knsV{am*-GS}{=1^8|SzHdC8#oFz4A%-{t%+Ggk*p`IBg zHjG1b=Ry{jM`A!r=pa;Ml3-)tPFbfv;ezHj8n(G7m#wV^^Jr~&H^Y39`I25+b5qYU&FCz<5Q<;7Hdma#1{0*|~HSb3H8~vV!^U26g?mL~Uf_NQLsb143*Y1zn{}OYElAIb$&x#mK2ufd7V>7e`+-<12moxW^<#8eLC}lwY8mx}jnrR_QXz z_~5793so_k0%(oKQXq-E_yDfoAnvxJ=su%b({pPR;z)hLre;0{yJsd2J0qJ9U<>;J zuY9%wzA%+=8`){by{DZAM#;_i30o}P0~|WOf$Y3~U{Vh>xWOSd9^%&5Iro*FK}z-m zqD;>3Mwzl}^pk$ILM^=y2pX9Fgti!{Q*>zW1t`p5cz?8Gs{e#|fx=9NL&v2uJ!SF> zL>Yy-e|j>5i8MW#Y}x6__<$kZ^e>Q#g&OxYbhe1`z-h}s=@(>TDb#BSnW>8SH&8v; zv$+&Yv7u-Z(t${Lp-bsuwng}v$ue5GlZOX3H#0#45k;0pU6g54$;tA&7WB^Y1*5X3 zjL*AL;Cez~K2Vt{)Rl|AixE29xD~#dLJPdrUhK)HXJxM1NXFdzR@FA>Vk6={n5R#A zEus%r)7&9rLa3K=fdnb5+n}n}0#}oYW~YmE!&%eGNXG-6Ta$b5?-SA>g}Q4YV`Rk) zn!mtrMrf&5r}<(^<^wbi`vs%iLzj`>f-p2VjURkgQDyI@seiYS$) zI=a}|eNgG10``Cg2_mfh$|wm{#w--=%s3Aih5`v{sLWu3H2Jln5y}JGD%jL0zKiKRf~!#u0~tk+kSb# zgvbYRn_gkh{_@1yNl$B2eu^6Q1Ew6i#*w$RVjVLEM!5xBtwz&Ecw32wU4;FBx9W?% z$FGeoMjIrdoLi9kx*cj5ppMDZH%zm0FNf?vwY#8$_r^}Yi1fM&?!kOQ`Xbye6+{>Z zIfEIM21#9r&M(5}xH8hj9>f&>zT3?hZJ~VHqBz&2L)QH7^56pW^;pg2(>mB6$X~vfyQ9np=?bsVae~B5iTW~5p^CJO zu&_H1KD%bnyK3m(=K{@V5p1;q&DBv?r>s#K+9_C4e}C*o|Qe7o$B;cADL-R zQU^IG3Guv^V(AhFI_35%2^j561_@%9ZZc@&{x~c7)-ev{+o# zmd?;C`w8y~D!Y4pVYkD##(0pt;xC!rtt*O)d$GYuKlDVqZu)|_GEsKreO~vG;1TS7 z`vFx(=|mJ5#YoS~RZg6W@MxidAurf&)Z4a0$ALCEmHj(Zx$Z=(xD=gtX8j76F4fJ; zw>j+a6UVm7adw#)$HUajuO5iH2DyV|5{K#+rZ?|}G)*w`EoYf0ak?C^OQg~T6%O6e-Uk)7&_=_6470<8`7o2D zeL@tYBSU3>;g!plX98GebAyl4ZazH#+w>DrcHT_Gwfbeg=j<(Ea96JsY(J=OIC1Hz!QjcE~1u zi8K1%(&7}oz^Sp`&5>$ojk~vFV8kuhO6mcAp|`=fhWP@iq&ufeb!?m3b;^nIE#`k% zZ>KxVg!F{SZRTySu${`7K?O3klDkP;PLKaCAkK^RBzZ9tKHuUE&QFLwLe4K(VxfBs zXv3#Y&}bh%Xk+zz5}=D$QTm3Ho-4YfW9mb9%zc6Sm&1;Gt@KzHUUtAjpiT9ae#t>^CaN2Z;huE#EYc4TicZ8!H6WNvC=r=q{7$!GNeNjeC1pPNwET zrddqS9l~$u!Wi(I;j!uM2Vfe!FKZPn;bGTd<^d%i z;kwf|%!MC7s_n{3=$V(Gc?%6kEvX+F9dI}2Of3j>rU7T&t(u5h;s@z zkLAW*K9M6bcXG{An#!cyx?1!bR91H~M;czJ4=A}`V4Fv8ybjqxz)Sqf%$0Btbmwvk zRXgds{LI$WIX|51$;Nh_kk7R^j&)5o4Qo(oK4`I?&^`(EYUjB+Q|VO>7;y`x)Z8*r z<(yrpTbVsCBd|q$!PWMNh(s6_)~pz}^zBoF2lOnXt8KYcUD>ob3jvrKxL{iDOdKJn zfd4U*4fBS)cv4BTjA$q(72r{Za?jMl`Ekc`#LXKqqHayX@{k=T$2VORHy~K zTiG+cdxf{|lNoCq?I?_9hJLR=4}q(8DXa_Hn%p+9irOzp!akWjAbV6JeP!J_w{M%g z?9elULtPc)SAslnlWmoobE?M_=}kbrQ2J}nGgkE+E(V>f{RTaEkTYu3?EOy!QSbZT zEN15w%Sp}gWyqY$xM4iphrW?Ys4f}s5>qnpPDExNII{l&Q4I4fDS7A4gU*FY5inNR>^6`DV}g|@NetFuh>SH_FjFW=yJg=BUigHQo-qN+oD8no;;!c>uSyuWK-S@qz2g@P!|x$%O^R`HxEqZ+uWnQ!4#w6 zl3{ON|IvZM-jcYWM!m<2l-+GNKA3^}gxYYZvoND6jCL+KDE)-`Y_NC8!4|l*u%s78 zoG%m7cBI0DGCt6&C#yJ^C-h~8e4u7qUEc2aM^RD!1Enu`7yAg;yCpdx>@lH^m%N^S z5kpjI7j#Hrvm6GZ>75pU9VAe7M;;_2k%6SloSo*m$)0vDcWzgGLUICZiwd1eHT`fu z(TDeZLc_INvimX(VAAeTs{?zhOnUqM%9mR|9=Y~=cOfQdq}N{hrGKRF&@1O(mD%6x3LQKM=kTEyRLBSAmk0PkzG+%(5Rx@PBCFRT4Qdsn+MTthjXm{?B?O^ zoC9Ua%^+r{KEYK;9_JvHYE|+99c!e%ukrNVZomWQ#jwA?OYc>t;l`7id{_+ZTYV#* zW%3JFnv;5{omWdYzUVgB=H!66ehO+15L8@-Ko6{`axXBAYc|S7`aEcr<~s?!+yc2=2c3t z&n8;g9ou<;n-ul~(mbHL9@MOOaw88uS^o|D1(P~gbVI!wnPFks{6r}PVlow- z+ezVd^%BJn=!kAwsp48Y*)DruKJcq8g=~#ypP#=1P8@~Jn8JnR(mL`t!z^Tp)HJ3U=Xh|+A z*n8^ppas4`F1V}Oo-#b_x`m`CB%>k@G=1-?+%#e5oZ`PmLLM$ znfTYNnfQds7e!go-Y3hu{xGD3`GR@VcgOr*%OgF9>BByb(Fxm7`A~22Iai_lNwJXH z>5?xSyW_+WNZD2yt^-cS(^_D^V08OxDb5Byl`*zXIq}x$cEB2#=O0u@8=sqg=fSK08zWg8q?qeJgOCz0t8)ow|cOL}y z-K_!lY)=`r7i6Cn(p=Sq{ep%v*-^?W_bSqebFC(2)H1wbQa50UGz0V`|L2ZsU`=c{Xr!NKiT|t`wtHc zFRS5k4VGy8qlU<%w)|{sS5qfjygGrPdBH-iLQb z?dgoe)|S_&rbulfJ47$2ZMB{ev)Jnf;5?N5fYF*45BFpv4Na|^E1bq8zB5^Nw`ZCS z?4=Er1Tz?CV)}$tF5HYE^Rf;yo?_6n9T*1c?jrkZ91`y(k1|A7BJ74qtv9SHYg8$- zE|Rhjbg7-Dfu4C2?SFF7e0s~`BilDjBcFvTgzK;I>TmA3mi>lFouHw;Z*rZOBG_Ow z+%K@5GncAFTJuGF`2}^vaj9lHU1hPxg5HHXx3 z;Ze074Bul{+yy5ixpacIJGwYiWJ7i#y`f%po9pLz zFse)c0gr`{+Pi;CIh8i~*&8!U|uD~!mgX)85zQYg4 z7peJD!<^|MvNt-@o>yql2`VKw(w)5UU|MnJGJ(lxv-Q?s9>R?hLCv^(A`X);af!}c z1J&3utl~FJ4Y<(?S$Y%I#BS&Vs#o?CMsK1z)1SUH#Z*C@5x7rC1<P(2)qG2$Q{rNQ+CrS&n z`}Sqt;~_JrP^iicqnVpXN*#8ir9NN~k^KcmI`{reEA#LN*c&5&{R!V_e39;2y~^-l z=ow$05Z%}s(sEh4^PoM(^_0*Ls0(H>Hmm@9Am;*yc|hN*!vyP$d%W4vhzAzoE2^MX zB7E`zE0&g|T`bsv#4z5l>%ICp zNy{WV1QY)*8O@CJYdE_txC7-1AX7+GvP0x6 z%!@Bm{(glbEwJpyQ8UJN7?e&19d<*azVumOltQ^$Zj>bA!~ykY$kQubvJzF zfwdACac))+x_}{jE0I!n!pehG;xCZ)1GR0>I-(bV39l&4#fT?#{NS#EkfUv2Wg+M^I7Nv`tg7eGtzSWwo-YJ$pKAbhc5g> zb%Ig$Y(eBf`XsxXwBR>%`Y&9nXHS*n*69gbY#iP^!X3cWg{+&?1ODiJL7mAPFSot% zfF)_!fvwZR?0BRcXT%_Dx(hsrTl4~R(Jh}$j>AR4u}lEFhk&KnT~oPXb_D~kO7$Q+ zrPJbMKcFkcdG~6)Z2=kI-5!{v3%SHjwpInDerV=353QfSbo=DFP00;k2b}71C__!! zMCb=Ju7b{)1XCsTl?CDi6m|GikwO2&-!|QF^<$W9b#^56J z4O8|mNW3#Q0CeOp!P@_Ad95CdTs1{%W>w-65KjWJTEy}I2mwdq8} z)F({a_Y}?+nd_A%kNW`k1*2K6Er&XDAn3_--MtfCYFBbR9dbqRtNHLtGG4_96U9!L z@|};>(EGdPzg~62DCUZiYLEG4OOlSR`Ka&{4*U2)?qDiAA7fZZH;igC@bnsP>Hmxh zAe|2U3;e0u#C&0zt@Z$RFUSb{0b2z$C=1G!y_8GiZBK}5zz$=*9WoEva6K#e1)?dQ zBCqyd%_TiKCCX57B$J+?gVKYTl9W5E)RN68i8s*HaQ zcd9rCOelMy>gAl5E;EiUnpL$p4m%=~#uQ+l(UkhDWyLjWbzTs)pw`IDH#oMf4!$jf zS2$*)pC57+MnW${II)McWFOdih_+fvuh6(1g95gUGKK8U39(Cy8w}N3^rWUWKvs1^ z&WwjLKM_pSnxWSAb&dq&7P~xfspAzg{7_Ou2BVkUdIrE5TUjZ_qiEipG4yp6|un=wrD&VKnp90NCATSm_D4_>wl<13ub0 z>_*LLFYovfTpUjW2f7`+ zYeTmxGJmqQfTA$Rd~JztJjem96oro3FOZOw?499Br=WS@t>j_9;D3SiaH&*gU+3uS z1LwA;J|Ll@P!~6jtJsAfxi6T+x9Z6_^`Ub?aigQ<%mcd%53(}ygt3)wM}xXH1WQkP z!zE3dR!#6*x_Z{9rsIP5!o6eQKg!M^F&Om=M}LVY7!ffnr*GM-i4m;HkDE?~{TJ2K~GdPlOCdq<&k)=gSXjjVi#Sj}eta^|woPe^lR!4Wrq|7%;kDHJdd&O_=N_q&O5-r%>&Tj`+GryHL{JnvZOclZ5#VGuNyb z#?FHeS9cKCVFZ&FaThAhX$`4~fmBt4eLk?Yk@kew%VIA%I>6?GGeH6QcF!S5W<1&F z7x>o+8`5iYU}x1OUjb+}3L|cy<*W3uw|=FZlKC5Z`wIIV06s@DS51FC1{9a&f;Pd)~ckO@b(t0pVBBD7~KZusFJFB=EX)p^t8&mjm^yQz-c_5oq?x9vTFgGoSxc><2}2mVtC_3F#Sj!oI_NHUYJxQP?9rQToE@ zmS%=9TOI7R;G9RDW&a92E(0nKo`nJ3@reh~?tq-U;{3&|w(LFZ zwc24$%?vQ&7Np4X?lxP*O=jaDy+WP$>fVOs76@wYADL_~@w-JI#A5Ij>;Wx#9LVv< z=w#H9><;|2V_?KB*d9A)q}k4GclxVkKVerlS2Km(V`yM^Mr7)Si!NvQLP2W1g2D(J=oOpF#>H#7>Qv@s)%<{l z#?`$0l@Z5OOKzRDprlW}sQ@2pe|%E7MP()!lkRn;}%%OWCz|t{6F=@z9w;)l4rRBGzb_jmGf+ zA>n?)k&7CY)o8NTOBY+GcFt0hW(4kLfXd;*-0Zcw>*dLh3NA@b4|DW z%qm(=buW~@VBh9D%nDyzc1>0H?l>LFNvDp)Y7BwbiHSWY>Y_0Ry$-ULZZm{*I!^pMHAU(Ul$b5BXk%Ll$|aiBKNiFB{s`{ z?gMedfizeun-9fg_9|w%4_HZV7b$n<%@m?xO}K$dThOSjkkHMr>$&v-4NCDXCq3X- zunSU@w>1mivGf3y|J6y3x82jV9I!x@zuyU`Yfj?Sht*n#3SWH+*GIYyvOP z(67`wtk9XrCZ`y5*)y+&zMzqA<|agjtDGlK%!4Y^f-w-|%Q#S3>766-z^^l@mf6jC zKXB$|f}vkfH-xUzNILX%dM~k+Idyme!^yH?gcRXjDtw&3=>l4GDCYk?#$t zraz%$sO;X_XAl0?at8k zg?PZKP_nth%w(Zb&uu<&V|ifEJ~dQv10U62_NjiamDK)Q2Wbyk?Dz%py$#Cv?dha< z8o-0r*!PZ-@d-HGvTT#{CS_gFDKhZtWUiNl-o|r6U0c|@Mu+t5O*wNd?4D(oBQspy=mA;of1qCZcMcchLeEX%+W@HzGSwaTjbanGb4h zFwR+_GyX;T6Ou0{z$i2J-3AeHD`QlJAYk9XmLC%-0ZthYX)7N4AsIdP@~I}ey^g#Can%0e9* z0ed5XISd_TT#TjLfQ}h>K{;Uo+Qf=c#c`eoG}EY}6Yzk>Gl3b+ z5JvL=C1iGhcU)9xD4oeNMPMg&J)3?&$^$0i&YC<8a>`qWf(Kb>pu8{0Jl?(=J-i;L z?0;=duqPx1eTR?AFS`Q;>|Pnv)}Y6n2hH{g4O+wA#>e};%f<%@Mm}M*OBfew?V0RV zH%Fno!mK4wjM$aYPIri+^6V4XGbIR2$>~pm>aHlQP1W-!nbf zMR?CF+-?I`mjilC2UHHgUG2>!IwGx(ez3cl^9ePSdLW}pI@KXqMd$P*(*_ zch{edY`G2U4%7_#<|VuRkEMw)FVv(Cgs9zd5Lgf>LY4?*Y7pqB~ zZ%BFdg546tz(3sfBJ#o8!hOMLmR zGixh)uokpKL!j1dn=ETToj|iSJ;H8?UQnk%Ct}JnSEpQ9*KBmyP_BNUeDG#0KUQpQ z;QIHDNUu<%;4~wp4Vi!7+LR}ZVrkuT=DxBTgvgOFzd)nHI8+mJ?&=&5`060ST&ydc zT;|Pgx~t+|nk=2{r4$aR&!VtwsN(JU5RM1w$gi*gmDyJ)duMa`_-cc#PHm9F;+{#5 zuHGfBE<4I`Gh~#eSj}^91r9bBqlCNOyqf_6JG0ZG4!bMb&Kv9y2;bq%YVaARLhaSE zyX+790rmNzdZ6A&*D~-RW(4UMjBf6BgX*TKVeb^p@4uqV4rfNy$$+}H7KjEkrx$Eu z8!j{Mt99jIL*8c8iqr?xQ&*SvPTETwP$CO(pU@h0cE3v9hUNn!Y6`z#Ga6M^b$ZPt zyqR~(d%y;7_yT+i#c>(QY#>(hh4P*WzW$*vv;@t3=mG8RP-jpU*qGwK|p z#Ff#erV}=!JJdY0z&Vm*D@eVXZ6ibWW7GQGqOv>t=D|OE9I4~I9*|*!t|GOkO*xLV z)N=UeE6ju#>DL?}n-O?`H|HpHLo$k+<_wrJYp~S^?Nqjd&=1%Oc6M&L;HKlzncf39 zHdw0jLaKXR8e*x`YbF2a2{KHM=Xb*h%hqpv zi|I#x84|r&w2t%*`k6_jyT+q*K2vEphiD<UHk@vY~!z?qudAltm}t;OVefQ zQjg4h9^lL2nrG8NnH%(Dsa!1t^9`exmt(;0OrUDJo5KfjxO4$`NF$Zl4yUIYuagf+ zkoJTq2JA$6ZMwp*!*-HBm-a$Gp$1lJ_r&7$)rlnoO52eu!Z7O;t2pGoEJ30TMl*L# z5E+>p^L)3_avxZRuh1SKwbmTz7Ap_f=#`gUFsXBB5mP~&yebpsd3mRE@A0-7MZ@K*Zy3cUcHjwx zZMAs-yCXT=Q`sAugKi;fACyh7U+x@d+&%auV~sTV(Gj2e?68qT}7Dwo_~rnQXb1A?!vB zkMJ8!rc7GiZAbs`wq?!{%825_$ueh$5$|%rMtZ|17p%p(Z5w?o*)SA9|Gr=p>qi%J zBB|ttsaW$W_YU2WX%R4FRh2Y(%E)iMNPWYk&W8_{@3Q%6!#wC}Ip!5qmC3FkRmA<3A-^zyl zfbI$7r0vFrm97oqLAJlW!q5MGdun&x5ob;xd4PwdaNvK^7o_6}X>iSpQzai@e`G)5 zmqh0X<<>09?b0LMevtcwv|r)GP@rRQ=0VsG$S9Z8Yii^@Gdyr@BJ2mG5lZc436WX>~ zc0sz2)T{d#>*v9g_Y)X5kuq)zb;n0>K4@V(bH9-v8U(H8H$CUmH9)H7fE;lI_Z;~I z*)XFI;;3eBn0$SWSlgTA* zQpNQxNv$v0d=%2d%kF6%(y0~cCyXqw(j0EW#BhI2r~KNXyHBKEm7_oE1LiFX2ddfy zsdM4g)hM6f+LHsdx|~K-6@o$))?zV66xjo7jJ{^XAY(077f6%O1G3^q>iGoJa%hF> zH-~+PM&LGfFRJvxWhFi%Zr}$7R_ZKkP!NF`U`{|i!Roa#%_b|qit=3D7GXp!Xi+Me z+541AyVICtr%fhqf#QBf6eG+qQ<##Mo!k&y(yn;#H#RK~R)?stX|>aC=HwC!ka(2r z^X>z>L=);QndG(xR6k!XeJa` z9hwLaoOCPufb8B;)|`wWy_&l%GVBNBvFz6Xp`(-Z)88~|iW}IB%-(=>iLy^AdVrYh zt592v1|z27;%G~clS>uYd~WDx?RnWMnDmib+zD}mWWR>{3`#tp1)J3q+8x!3+}NqC_pzQ{;Q4@V0S3BJuCgh5aIObN z=>z?wWqi^G%IwysaJN1V=w%ejCTF8JJgGw@a+z@j4F}bB3aX z2`ZdXR%w0?k>YN~7M!|W3$awT29E$mHX&wtYosj)%E$-mu!CJgKpqH#lW%5vE z+Su|5DZ+Kdq0)s@N;*zJ%*QYXW=jUVPvEg=-+VnfpLA%Vp!+HCn4kkX>T)6-qv}$F zS9$Q?)TMndkZB#R5RW%@_4mQp;uF%Mq>hWAn?)h<;L|Dp6Ov7!6(F_kkO#ULJfM|? zen5>g2jVrd!2+``0o%Ryb-UVsd4;8EcV_FYrNSB3hulk71puiMw1z)bM~);HxfOM)FnD4qssPSOxB`FS+$?5WP^eN^}6)OjHcx zwJqRJ`c)61BMq#noBV_hmX_c;^})mYeUMSZ;MxNc{L%4}y*1#2sR0e>6QUilp0*7O z+6puHla`jtU0$J6U!_yaW%s0fA9y-9>^F=s!#`3l?x}CgVYm;dw+c4_))C&U8OsU# z4s}-e1OdmX++Jan2VuTY^hyK*W(JF4uGPvBw&?wFz;-D2Q4PDJ3|~tm!fmK=!764r z1L};u6oU>a4>Fhk1vd5Uu!2rgfZfef$>$DjIZ`RCQN~Fd4-yVRnF}_nss9xTgKY4m zhfpf~fF5HK>dL9hUp|-$yyX+a1n||h2 zZqP|yjID=#hvq`|PG*UVJKF*`YI~t1?GQR=o1%!f?#Y`Td_W@b9hN+V*^KZY+{PPU zkpn5B=H^gW7TTxs_0R^%B+DVjEo=@QrCfbU7tAqC(s$@lAF`upRe9$h4{)R+?uJoq z?5}I*!%p{t{WHyh1(gHV_3#Vavb%Fr_N>&p9cYIgGUwVUl>KO9#9ErQ3q>=z5cM{G zisU}X+~^g~=sbf1s_Jdy8+b}L!f%*&=>tF|Q5AP}U2Y!8eL&CYk&2sJcE5T_a(!AW z`~hhW9a;X&Ov$E|Zt{oHvmxFP)qpJ}T_2^>ZdDHF4}16vH1ek#xz-QdrOE@Q{gHOV zB%W!6M-o(c`Y7!2B&N$gA$?G|%%q(H|2mUnxOdd)=Vdz_{$Td5ZuP!l6r0JDajR9k|Uh!n=0*sO|0L+Tx#X=O+VC`SiAlSZHP=6dj%Hn{#$9?9rFqu z$C$dVktWT7Y(5*l8~+!wKB;$GjW6(o z%|~NPRzBFkh~L&uHZNFeZek@+*zqvJaNgBvVA~n891>W zl%ODd5Fg+bPS|hechI|>(sfM+U~dRIw+WKkJzl;Hue{RT)98cvfRy3^`ML=z(a_=64#1u91nvWBI-%ZW zuDK&GS<~X>hBzNk_tkZ(tGTq9uiaT*@F;yYYgIG8n_A^UhliZ2>nxXc$qPF7bTMva z)VlTot*BMHLvG_!*fmvZ7i35-_YNme?~HZIrB!-u6f-EM=53k@cmr2Bzygw-V5TbS(u8n1cG7LFN40IcHM=-)n06c^C10VhhJT2!KJD2wtU*0ygMN5hMcu_ zN(t8vYa>&Ftg%ZUm|eguWv?Qkaw3a|KsKJkzBYX~#^D1jWTi*7 z1^u8_>9`P8#-TuV?Ref;Mf(iFzhkjiE-xR^%@~e zn#eU7M0MJuDzz5gUmaBrNS0);7Y6&63mR%pTPb3aTbeLg`@ z9X6sqVcw>9H92ughpT|SiSj!%{vnkCrtCxul$NbiX06I!uvxcDl-CUn#RtMZ);M2vG+)~S_W`#;y&`n-K z^3zhW^m*V)5ZniHj@-r~GoM|vF&=|N?b~?fBYrKXZTS_F1G#Hpq*Jjzux$oKn5e^0 z=Ub9u&haxmVFQSnH=U(>B2)@3+tmE(oLbI1sv{5Rjq9Z+`b!Ip;I(&GI+Hfv-+$G3Zd+2nt;XsDG9DNA?0rQz9)UkxplQFlL`nDTJ zH@_G{nA@f1b#!^9lRoS_jN)^IrNWx}=aVqZ2Ah@vT2UPevK4i1F;CgezYQevVv}5 zKVWJ|W4wenxlUt*FW82A=d50W&FdYW>?9kcflKVSeUkAOe1L}=?gLKq zp{>r_+O)Y9y6hK>a$k5b(PeePPh6LI5a|cJRj>4!b+OZ_S#d86mi_Pa;1gy@@sPBp zjuVg_E#zx~wzZiH62ur*T`dGB6S{LZs16?1URD>RrT(coyJ6D0xkqYO4tTGhkmSLT zpXkosXwiYo4~nL@8vey?8vEv9z7P2B`Z?4FHhC9uK?luDm3lYXGB4E z3d71cVaIciJ}-Ngs>m7*Q}z?K%&5@ercon2hwaMEC$~>n_t5F}u-B7~lP~)Lrw|`~ zA`|RO`m~G5iQ8y=8Ba(0q@TX;2qk@)0vt3D!KrflC5R7jF;gx(^kXup^VJv5M;1oh ze3LEXK5+jn4`9?e@v5jNH0w~8Z|cXIU_WV;`+$6ss4VvfsT}l1^b=Bfg&qT~a57kS zZ=&)6=}ir+Y6D#~huZ0^bQ?DhV((wzBd4Pb@nG58UQy0uDc7wGNcQpb3>xKrg^ z65!>)NL#S7#x=mNZtAc;|9im+V%Ip29~;Q-Y=th+WCj>zozh9P%d)RWdq87i>PrWx zD8rZ5P%SI6Y3)47elcHlz;2J3-4W1TwUeC)jGEmrx@C_KMc%Ll^z1_RL8lcbbXowF ztv{^`&usSrPN>pP$mrp_+nIT}F()u1bac63b4o{pYFn&u52o@#%se?g;9W3f*Sm$C z-I3ZcoqO6icqSSL^pGE^G>^$jcW2~MQ?qixDChmYvab%5sUTP@=c`gK3oS(=nNdJZ zS%e}+Iu_Qrz1zS@40%WGOnzamUXTei$!s`tgXo3*)aodz(<=>XdUg+Qe1+}zKaD$? z-T*e~U9Q<+UgkLS2IB?X8@RQ3z3>@JW>x5Qa~W4sCb z1*6%A+b)ucntDXB}!+yc&78^$ZY9^E9ZI&*lmQTp!Ug=jgyR;K!w2`E~U|!~qR;dix z%__rQ9^g3`c%tMT3*d;+e8Py+K3h_&9{%+8*)L4u6JCuXZ=(a7S1ipHQgDNp4`_Dj z;0HvBu&)m8cg#MZvBZ2_5asAp7o6A4UgsXDEj>N_f@U3IWZ1IMl$FjGKszk;(tV1~ z`|L=sPv0i5i=semu_bxK6kWcMf(lcMJ|CL-KwAiV$G!_1I99vWh8+g;fDc_|zhF~W z^{WZ{6?3>pl^wNM`<=bA#t2f_b@jPfmJU zw3ewE&qnbZ&bKF*A#$I)+zEKFin7Caw#KYmi7YR5P%s3lEWE`qnu>-zByjTb}vSS8I^SzcrZ?(yBVHv7KCO( zMtVClYd~pWuh1bLVVBG4cDt}!53+BNrLj=4#MMs6NA^0Xpspu1Z7It^a8*%OoW4jt zU>DUKa3M)j7;!=%*pO{kq3N~cvZ>H zWcICL?^*>suz}ZLar&^QtNjYoXEAxh zUD*vXlGrT@?t!Z{vHc6jyOkbI-EJD;2OQ#RsT?C6X)|DYsKZP?p%4rHT6)C|VFtVI~JCra@zq#FS97)i+PY2<;6`xf{PJ^N1T z<4Q1maz1Fti1452IFdu;)`?=s8nE4N<%tC^WsR`Y; zy+SGj{jwKwd^Kiu6@fo*L|fG)CwLq}U)%)3o4nUTP0j4@}l*p~*Nc z)|^iK4!R2keNg%iaVe$FFzpdZp?iyq>?g#u!~Tr{Z#m8>s;)7I-Lr_H56mf+z_BN+ z@L-&!r-#2nSJpg#v!)HY*G=)D!j0xUQABz2XI06%0nBj}O`D7?_~Eq$P-&Hmy)R1- zm;HdOmnf{(M*8(&icxVtjBJ5-V@EnCmbeMx&A~c@kq=NO4@mF|+422fsA->%^z@#m zxCJq=uzU9Gdfj`ZYp0X?J>o8SDKqR$w@GizpT22=ugJp-W}FTVgI?7@E~;S4MEy#Hq3A%P!--Ia|2&+A&IZdNLc zc8;XLiTNu1*6#oR-~X2vy3?|-vY)WhYonsU zcf`2{Q5bOxw(Y+&_KkFAd%n)mIm#R`ZDi&((wkwU!(rc{OY#UKrxotkRbrh?5(8E3 zg7gXCeB3RaIbP_k$rDDixyLNhz9NnBqrxN2lfC9$Rb>^U!;``tmP~y>Y%f$RN!4xZ zR0Ep~mw!yM9?V0o#5a@nqonkv6+pMKxL5H1TbsmKM zgvr-~9a9(S4hbm3J0bSVfiUiH890L`1LA*c3UCCRg;7N_|B%RKd)I0pbP(pQ+>J%LPpjd7~Nl$dw zq0IgE=8aF2NNuI^fI2NM`rof;5;NNj*`{sM9b(pygxO!O3bVddUc4cS3T7_XUd)=B zKCloFP7F2TEW*I1A4n^cI)%WOAiU@DSwC3GgBHyRsc?n2#`$+^%OJ!+#Uo}K3ZVX4F@C2$4@y5^)obJ= z=@)&(Em-w&lod91fY)io`XJH|Xlg6t~{lc8-USrS=R;bHW3=DxCuJ zVcGJ4j^+bqiSr;S{0cYZ9o^z8{}U&d)O<^6^cis;^63M%k5$~`!9fqCVaUDQEU!+B zyw6eZv%aw(Ys&uu*Xz@CdA-?V;H3qOK3WeR;FjinT8{_RS=PC0(_y!~Lo^S@TRkBY zh5tv_nIu-O!^n32R#8jHblTahr^dDa=|3j|q$J9JWCsD^f*lBg9aK-sH~VgDey~3w znN!yC-F}-F5{yb%RLsEdkQOOis@$@&oFg3u&K+T;`QI$mniM*{_7KAFzte@Zv>(k!HBUjF^BtrkW&t z2et7~J42V9nJE@014xkeXCWsTpavSl+=SW=w>saL^`T(y!A_am^HYXz6g#!ME!P!R z>5;r)I{ht=HNiGPe#^GrOy3gB^a+U)%HDYbx)im1?*HS9ei%5Y&!ZW^yzn96#ahoy zFa6=@wNWIwFDOd2m8eC(#>7^s1Fk%bG4kmXs^&M{W-`@M@GyM7KVWNeO-}hahdjPd z_Y91<1sy;M31Ii93>~eT5a}nRLrGl&K?fEOh=n`Vx6!5flARy>%|JR?;Ydn!o1&oG z-eIk@k>ORpk)P8rsm>?VWk$C#24qziS!Ju+6E)weqHOF{=N*nq>SjWw8oBYRP_wxq zbuZlAb0%62WBHmA3j2cCNWWgD$ANYd%Kn6%#<(y$+A(91J z=b)Pz1FA`|ES&f}Aq6M*QqJ2fP1qyM$$xx){Te_2lijv||NZxi5IQZBpC`dp6BC^4 zyy0K^D^!=+`@P{W5-2*D0SX&HlMvK(h5C;zr6lCy#BX4@KWSD9w)_>9sdi94b)F9L zV7kPbKocl^e~Ts(`UyXj)n z5@UkC*&DhaKhiT1Nk%>u=OUV=Pey2~BzQ>VJ4kc}YMnK>y^KfPT>A{xg}hE)NsQ^u zv@5zM(3=!}LflrVL=ei(pszF!Fv_kEaEG*R;bh#IcvNFgOcg&ModEXPLPNn=V!w!( z(2(}T5g`8dqbM6x_P#~ z-@9yU0)O)L0cjahDg6042A;56D@^m)zI}sU6(nrn0=m=8`Cj$|{>HdNohM|Wd#X)# z968xt$-BWn7;zyvt}>pzG{Nuz>?b5x57l;7cBhdhq;+=|d4t~UDIDv9veoXV6I*r1 zIfcI9t=ubJgXi}hs`M>nOQ?nDIM_aGEat^ht$lvxY-@a}>{b8GinZZU<_Z6eZdme4_hCoA z|H_cX2G9et3jwN!&_|gX9j`r%bZ%Raz92;+oJyksS*aLt{L|VI_t%r~NoCr=PDoHu z>R5Np4rL?z*pVl6tF_W+?9gz~Mo3`vS2|E}8`?O5{I;1K6h`Xnv}(xwXkyF;dYfl&^+hmB2eIqMDGk|>p) z*Ckal4D!G0mnQnP6Z32690SR5RoE^aK1N+3|P2gY>NtHthV43An*w zrz-A{iU7`zN2MEA>Gr6w-yy1Ywa@L7&5Tc0C=TtSyEEP!G@=CTa)){A%FxYT$Bi;Ucb=j+ zAzPK9I#`W#O5x6az)SbCV}an-Fk9`M^)${%f^&_+&=+jQe0FGs{>2^)+4Z=;fv$)_ zt%;R86YM4YfL<*E_bMhQlzxm^izcnp4Y%ISN1}{!Pd>bWBZ{@u4#)-MDmG6up*RQI z!#;(4!pf?_)1EaOM)~}f8z=m!fxoAW#vIe(n^V}+Q8#S;f8t>7p9_2Z!2J3H8b(xDU3=+SXZDz9l}*W9 zu*$T;^XsAe=Fnt@F%5zG@cEuQd2Y~~D}$SUoL+CJv8b;$%oWRB+*m~RJq zao+sYp zwON$*tvrVv|uyCFdh2jZ6Grbm7zRGI+o9bgfsa1fZReP z72RPc0PXVAPdtrghJ-w|O#<~N{eZdc64!wS-tRe3^&j7RB1QI`uX@2*p@g0X!f?76 zyk$S3$DDAh7^o^ew_(6;860{alC$1mDi{K#=jx#TM%e z*%By&5j*HV`O>B=ul~lZ`2P2Q{yE070geeAM~40{m|7K+BdHtxCt`{v4ddKzadpHf zEcJnWf+e)F8Y&Yq3c?Ed?~d3s=Pb}dl!^rl{`*G1X>5LJw~R(bA60KaC|AD1$;%v4 zefqZfq_HcA-mjb|qI*fpJynblrql$s^-oGC9ab5u8wGv;yBUP zw3=fyrY7ZOb}pu!_~jGP<3pQbXB-Z! z*aebNB7l(oWIaJSIL*PIk@`eCW7WV(tzvUNiEk;!!2HS+OygR`nf;@DnICxouBlBf zM{y69DU-37A2?7eENc}KDHvJP4>mB54w6uO-y?*rv^Ko03rN8$DGBfN}Tus#8I21(gDt47`-t<)!4 zmFz$+b(h~ASa?JoqItRqqb-_tUm^`uNKVA4^G1B>vLepLe^TkJ;Gc{RZ=^|w#`F$- z;ALnFrljA94ej!#fkI^-9Jw_77uxC~R?iW28T&I?38o*2OQi7z{QTifjnt=ZLVkr$ z)gDZA)eoP@;n8@XH!VpGt9J>$fR@+TUWyY=>QSi_zpMx1{ln5m`F!i1WO?zSq%O2G zhA*W045I!JmP3DDKax^|U)QTJpAU4l0oB_A`u#7uy9pQ|*-uEsO{#6OWU5c@?@+UB z(4x$qAB6cY>3$1T)`Bi_0so|St7)-eDzouKt&~(!$Q9PG4&42z4e_dx?IfqF7)>>S zX-vL8AZv+Ism`*yf^GsHAzM7q#?vS!Frt48TL)xxzSmQO-B<-5+vjemEd#4Q%(OJg z&3E1%zR<4SHaJhY!pn@(af2fwSRpW6Z;&kXMMH^NLpZr%@PYCn;-Jl_!FdaZOC!mQ zMlWQC#XmN$N^-Ngn3=*iDBAWp3#mFp%1tLYP>=m!X3_^T4y#gF52Sx)R;I_sI9do% z;XF2s9&7>oKH#2b-Hlj-+HxlKsN z^Ru z!8wmVwqdoy{gFymo0(jULV|%MxUm_M2NlEvlsXqVa|O!-<;xtev<%x*U{;VZiSXV* z9*fFdhPytzkSO^3)8!7Nu1CEx&^8w|CJCgcEK9!CW7zM1FgvUi~{?DP_U z4muW6I(GFti2EQl%{BBsxaNQ}u=IhrGqT6k3ca7JJ3n;?z99^&3*l8H4^Hqcj;PEh zyt3J1az02g=?s`}T7q{anJ^7w(FbBWpt8?;YI-h>jOpTIdThuQ)yGBWV3xAeOtR7Z zjqvaNT?Ww6tW7q{mvaBiWmPv=_SJv#e299tf?sfFQ|WFQ$W_%}xT5Bpl})UKs#||A zL}5sa2Ng0F!32hpftJ~VZjBexg8E}~t9ll05&nYd+bgin>T@4{bbL{|g{`;+ncfK} zQm(ju&-6m}6SA}^`%-0eGZZQF30p%`y_Q3=qReEpZ-Q>fG#1(J=x;`C=HOL`4@8NF zNQsx3Say170>tQ&E2w(mgTHk`egxUt*M6Q8%^HK2k~4Sc3(mc(Mjp!kmoZ+t0WhSW z(C+KkZP(D5xSN2dA9nlA1^@A*!Ul*Dhu_yM_$a_J-fS6QgN%5{C!{k$_0m%F4Li=H2~^F%&*eT?($f)(g17+()SJW!?=J=GPp|-95uae9{L}*21YWew=1U zLLS!A2tQ#S`GGn;7>n*B*ckD2%0RzfaNi8I3dTUFbQ~I$IUx79D(nw!v02T_yd=!f zbVBBTvQLzpZBE7U*+mhyknMv3eHWuf%LH1LsvPi-rb_nqDt27;=DZxmg*{gqK#yhP zBvxeo8*5^$A~zUdYuUnjAnum&Dh01zHJ4r-CUfrDej|M&h%G>PagxONCHd5sC~goJ zOgO6&tRP?nNbm*{*-xl11Qq|UnrI`joQ8to)_`8fg=S$*0lPJsp@>rgZ^&-BaJT%R z+aa;qae!Vh*H=NMGO9_A{W~JqOxa25od6f~>U+y1C_QQ zcQA*VK(lnqLpuHMJ2=9a%~U!C^q(bRle+wC*HAwuY1hY`CHiq)!ixxo9P4 zkkZhF`9O}Pnz7Ns2jj$PR%{{I5VzSK1*Oh}mxSt($1t3P>KH6yEOu-xPe#W#v;#q9i=on?)0IqMAo&(X8Bfd&yF&6``7ejZD~Z$D5jI)sG&vB1jKt|{ltDX4o;|imHjH8)7(&>+j9^Mo zn@<9!DJA%X8J3}rnXoOS>98sqaTmr``LPsow_x?QTj*tGDJ?I;V{gm2Dl3vxb>+cS$TbQ>cciob& zzhWxT{0ZHDFLkr$g;N?3cZ;UfYD%(fZH?)i*t}M^@bIMxE>}xGAeL3?7+mNzC3*W= z_7f&w#%J4JoPp9W7#0=25t@M*nj|hwyv{-#Pl<+pz!sUe)mC)wGxiw073vYjd=1P` zxj7bLZrLrng>OPy3*Gw(a|0(-wkehUi^Z)!xJ--+Nv_n2!D#Z6%B$LWHx2fLTwtdv{F)mD{H@$Lrm$7wxj%~p8iVu$W&mZKWseh972@bp za&MGx6JwFK3fx&>>=FnK`Zj!rA0LNRr@t z8*pDRzcnq7c52%~nBx@OX~7w4q}QO&DEH=$Hm|m!c7W5_r%c;x3pUbIv1mCgm)nIcXpvlgSrsYrvYPi*_fp z+{}7Z-Hp)?C~E(NSjpWVdWX>~m!i9WsrD9n3o*N^6n(;Eb8f?iUakMxJueWY#yEQG zWGmBfRKcR(f#--V4f$7vy?)HK^W%-3$H zmx^Jn^mHl{D*Xk+&E%)t?%(wDm{4DUJ|L<~ZSRM!30Alr^bV6#m+hrek)sP41;@o@ zt?7x%jF`o2u{dAmx_e}QY?z-)Z-qJ|D2rM&E^zwW3(=?`;+ae~oneC0m0de~Aln^8 z8d$Z~1d#BHKPqy;=%vFhweAh;k=lK*mi$C{z>QftGuVpGeVim@@MMYCFhpQJ&gG%N zU49--m5x8A@DoTg?TcWGlsWFeCh5m$IxdFS&FY3-#0H!o1aGv!ELv>kR z>Qp}`FWNNS11kFgy-)^rR>f1F93yD4|E0Uge!|*Ar^8hy&!;k*PN>f_3#l|g zDye19+mR+j_<>vzf>yhXEMv2%mX+u`%(q5fAx_i@vNJjoh+wGq0gZ-2WSL;}XbpL1 zv)sPlm7f||S#z_e^ww~8GCyE*sfVZHwax7LNdrsDlcXKb8LB=t}}ei^9HPzivjn zp0n&eV=X(458+RgM@tgAoNOkxK!UR@xK9{K^OA&Q$5*+Td_G_lGcYQ(Q4r~EExxT7 z_9u+b4?9I%#XYR7;vA5X{et=0c(K$5hoEbjD03PMTV%ja{p>fcn>}Dl&54kvVpl>f zlOd|GA21ylg;oW(M|1y(%vtWxT(s1zcl&!sCh0orBpA*A23o;VVbX0Qgj`0bLD(?nBQF6#okb|DjZ(<6J1_f`> z5_CJ*G_)C|I6)ld4X2T|B)>Cb?Vw*823kB4SZM7#fC<%2N z?_c%4a{LD27mQ|~#tmhUmm=NXORJ`g)a8I#(}RlRRAoHdC%Y$!V839#Hf|p3>a8(c zurr|yyTPR!H0)&unw+}WB(4d3B3p9`&7HH87Ry!FfiV)gGh&BU$~%SlYqk-_5=Fr2GmY|5a-bg5`0Bo_5=D* z5!7ylm7Z;bB*dW!RNMvQM66pdpxY;)XPo#3QXfz;pOy(*XYj#I(6=rOeZdaCw%=i| zBjEKEVShqaZxzN*mpf~Y;^y=P=}=HNyB!dm!PGMfk+qPGo_PL@+>o7P$ZgAd!_@Tb zhk?v4fk;dD49v$HmVFu)^igH1=!8Bv#ZPx2P`ZPbg=nXELqph>`IJhYgaOA3fSXyZ z&QTPXoHD%9xY2?6t7W~o)`^)RDB&Tqj>%{G4k-lMd(%KE)EX_A;Mr#gTE}1$F^Q!*`Fs{Rj z?${RUyGGg_Eb4v1WMf*n`(;ORjiI+3h5djvCCnx!n{DQ9G!AzPVWW;r41OcJ1?v9E zFmG7JI!Im@qy1_pse?_QctSVEl22ddsr0}|*%zzX{T zYXkq`ag_Z_f4+;=vY)V1``Nq+-Sr)n)62S{X!fT@ZQdD#oNbVDw_HxxR_hI;RV8s= z*csUse!={fvuuBQ_h%1;8yl1L`q!&p!`2}P+6P_-OTAN*dBf}mwfewu3}JWn>sSO+|9t(2lS>? zzwRz>=sbTBaZx<5bo0TUA%jD(Z)FnTB_aMabj{lhvbRP!w$|@M_c4u%dqTZ!vf7}l zKZjTon4uV?A;FU|BqTBt82W;3RqPC~R3X>?Wh>`5@K@YrA7vbNC*Cv-Y;L}OLf-{} z`j50SIF_Tk)=20*y>Hm2KJU<4QZW&oS)Passgyk%)>Ya%cDqJ9$^|En zSSP4-(rJt6Z^D%GuO~D-E0w{s>^mXSHcB@06e`R!J99^Jbjw;Jnw`+79;GtD6X^ON zeD7XV*$+6S(zP$?4XT`ks^So3|QUoe`v5fkb>i-f9~Tq8X* z^Ea$P|Lhtm?A|BC_a5y~nF~g@EEPi?-$?Ti?Rt063udDn>>RIYRt+m7{rA-80Sy{J zq}`P}r#Ve%-@IT{n_+NvXrikR^7?%offqE)X~ykx!lABK^ zz2!b&Iv87TCZE~gf-2OV>?dpu&uK;IIYJ2g6w3vh(HfaAyrz~*USveOwwD97dwN05 zFdO_bpT@%YsSTr<0a&THnybvyL9O9vu3HIx!4@&Mm+g#JIw6nRbDh5X2T$nfeyLp$ zP#r>aCd|O+soxFRo>}(Uij~`~r~PO}p|9pt$el9kPv{U$KE|JPt6^&)jX5y+9GEqG+3OKNciu<>RT=3Abc%Z~bbeiN zon38Z7R=5|s53@FpI%Qwq(33&rz))N(>n;tRB)~8qeMRD6Q`{q3CYCZ<0 zx~|4zJBZ$8K2R!?IqOJfQ-Qqr|B+nRa={##umrZ!STNb+*|=fy2|YIpbsTu;wZVVl zJHDZTT=(a#`pGNSBoJy-nS}ao(5W6<=w{sOro1Fn_w0d^KG3K;g-C# z%MFe1L0v_j(*)x7xEHLf-Ecj|>gTvKs{Vp0b#E$avH$J(-*p|>xpc{|6R;3g80K== zI~KaxA=2-VZE@{1M(E0pQ>wV!Jb*Gef_j4}EpXfyp9-=g1PLjZzz7>?=vC@87&lO%8wqLI-#}Ubn+2x@umMV8J`AEJ)ZYy_ zo{;R^XENFRGF(JLChsiUKH+a2 zd#N3NS=`fqBf(a3Ls2ZJVW4%(F68WBGoh-S(3qLjHgMS6Onf;(;TOzrW#1WFGiN=@ z<+Bu`F0kwmNNCoHBkYaB7^;opsrnOTGYz~Hr3G$yG^)|s9|*OirN9wX-i#-FoRtfs zooSvMrsXeZ+U2mS!3HOVT`<3tNxiZHm^ zb($doN%!ZPQ0W(pZu)OSZBD&F-Gulb1RS3*+ez6CO9Lr;&fJ<{RE@A=%MF;UXx}4! zmHAY6ufcZ;pPVn4r3CldHoniix!-?cfppcF)f(i3BMtct_1vIN6*DUvW^}ti1Z9hf zKUK|~uccHS=VU%1MnK848Nf+a70G<+4co!<2N50=aCV-4>xnt3We)OJ9|dmVq+ z)7;*$4PagG%P_1@X=aT0-C=(F4`Y$knf)@%&d+6e=o{Fqa*b1U&owi&h(wcN*9E;` z&TIp5y36hn1?hGxbXh2xWq%Yjy3dqL@|mMPmeK<`A4HHLfHMDbI5Q!#Hp=h#$gMQo zl`?k}$e9x)A4sPe=AJo$?7(8eG^+BNlFG%Pp;u4CD{(>k*qjr%2V?Ep3NTB&9 z!O`mlF9M4u)$Z>Fx`9 z(<9P-NU!WU07XK)MhssETVS&4^K7z@$AH~zb^9>9(hvBfju`c-@N9Odf6}pFW>Ve~ z7iwohrj|Vi_H}1wq%kCagSB%$*E!N#4_?b5z5T|c4>SZWm zTO-U5lx`Pd;F00 zj{yEa0lyzLfvm}X!qIv<5OjC^YGf<@f+>Et8B1kjMO$GuN}6EbrvM#YFZi>y;XQq2 z=jE-?*+C@x1@rX;HrJZtOaKtKrVEbkH|WYBIpfg%D3fB$?HlTHpq9&+etx@c!Hc+} z%7)dfk+9$Ns>=2`OMe@iD*FNTE}`nnl-;FTa2xFc`O-_qAlaYG>bj{333AZcPM9Xk z^%JXW>SMy5fGz9?)CTdx*x*W^aNz0?7fd$2Cs|<=aH01)V5&?l+zVFKt-F`)$Gs5t~+yO6MnMll7GH;PO0fXU`Je+?#wB}R6TbeK7B$| zbD6tCDAio{KlUp|y>uho%qPrsA5h!Q8DWj^irqGNhxx64GxOp%6pj~(F$}x9yx@#s z985_@aTYYrNT;>Qe!@;cIFdHfbI%3r>2!D^#sdP;4QRIjBD2c;A{U`M4B=QF(AcJ5 zH>=RcS%}5G!+brCrPIVp&sr9aPU@82*x`P`-$sn}i`qwNnH{Hi^d{mCn9v5^-15(I zE<;?^FPNNiXPCmBfmfI8m?VKQ)tsI%EkMt3xMw1nc_Z8#@-gGGfe|#HS&wwO1_}I$ z@F&dBU`D&+74|8JOnKjM=F7bhMqQ1xQ4JX4NZ&9y{WlGS&R*Sp;zo9yBiRp_F_tWl zqq2LP6?X3MlzXFmYfMtwZ12;cMiuW1mivI8#*bjp$G!l<7E@ewb2anFQf?NEOgP z#~2aeR5~4`mafcC(1xX;vS!H@5$x>n%L_)3ubHCP_?3_+U{%RaL}Qaxvr@bcVADEkE?%$2sV*CKLsv_nn%&l`67G~*B_Dwks)VH-uUT>FY9wE7l_ zUbDXyf0gr=2XvsgS}gP~*674pf+wt};dAPh?%n@>PY03xf>q7QGp%RWd@kH2fqoM9 zPOcU-%rE=ca>}8rX80N{whi;O5e2xXZ&K#gnF-F^-q3KO)EXf|5p^{(k9(tNGWRc~ zCB^IUF%ML<)`BOQuV!7re#0;? zrDq1miye`5!DJ$>AJOz}TNVF}o-~B-U}qExD|>d?VY_D_JYbhTe66zFvtQwpbcJ6q zswL)%tnDDUHbB0+n;gIFfStM;3RF5_n3hVTV0T!mBRs;cAWo-R-SGhX6UK#f6j`Cj z_?RZxu<$803>TcODs?yDknYWu4H0+2QXP`;!0~Cyp1oTnWH$}*htX|8=NwQwc0#TN z^;Q9Y>wqrz%1yD2E}cHP3plE6Sk>HvrtsDhs<+ttO!XUfV(GkgRBzY%;gwe^vtf1X z!k;ttvd^BGT-gEp30p9DUg@XIfSt?H$Qgo^en6i)lgc1n=|60cBv5;@Uog7)$OBZv zak3MJ&Lb!u7CsPmbv!r$)z(C5rswnbc=t$7EezOdeK&wb5QVD_w$KwhlR3#LA^$8uMv4sAiRhy9cI~I#2pgWx3 zn7)Adbjpk!m?+o@XEQRkqXoi(r{WA3n8U1pE{Lt}ZjdY3?=EQB=^nA=PuR^ObEyiZ z-aU+RlV!ON=<6j=KW0M4T0m{Pdjn+$MzsZPzz74Xx*?n-kl#1TJ+R20RUuj~-M}Bq zc9OvS_CU8oNZmtuBa?kw-a1P@3aJX7R)yPLhH7GQrBu2|{Dw1rGPVqRTh)qc5SfW; z6XbBatGZ0=9&xT|kdQ|Bf^{2Q2&wR#w}dM-gsyhn8?4*C;x}Ziu5>pEydmy4UlTrP zkvAt^;b4(J(Oe&}+PC!+8}W~rNGmAE))w?F>vV?^?TxYG@mNk+d*fZy)r8wH-Bg|Z z2Y4)FaK?X8(BED4zDQ}pXnjIsm{L1bA*<#^r&qNPs4MKxwl1}o?bU6B8`0t6GT2U* zsMsp)jUh>>C-i`nvaJYqB(^G3@g#WViLK0b5ST`n-lX)!o=_fQVts7P>0TSwk77w^ zTxT~TShtkB(og7+EOj;7dK;~JxGOtncJz?bKh`oF35^sRQd0H-$19qCkI!GD%q2oH zZlrG8OC|f9QxY2ZxL}0k z^fv5Rin7=6=ISc6z9Xi6?PhaxmGi((hdVd8Lo#WsA%*?P)Kb|b%v2(_?FDDQI1`mr zC1H|Ibi8HKuTNOt%`?)KJ_}pFh~tOd{$Vk7Mw|Q8fJ>FJeeq#Y<$%q%%iNW1q>-k| zIc-I6lpmUq{oHhAq1Ei_-dXb}oY9!caZ5bc>(Sz~xr1q^F6spndBiAHSy}1VVwF{SSTJ6?^{DRTV6=>Pl!09?~a1HYbV}(4Dtmc%j z4h445tF#`lRKp=qn@?;Wy$`&0`yBAMLk84TC>lB4!Y|17w-@BBkyOoIHOcL!I3=+v zeAfC0MzL`!e{6TcfSorQP_`=mg2|_W`%2dk%FeYevR^P?$2j9%P4|ah=^keb`vDCO zz}}0|6sNTzA-?_#>R?IT!;0$$D#Ng@^b1Be-*uy8_OP7CTNK(+=zxiK-MD=K#&XR~ z50v_b`Kg&!+&m|v&#K@!VGnphBU(~doWh&MOh`lq_5-$Gcz|SDR|nKwDueVaUC^8+ zCZCNkw!LNj6KgJ&N#Lx=(?}bFAnGUsZZ;bAp}b9QJYl24>?Vr978b5wCY)7k27a_7ip%Iajno@6lWeR)chh z(aj706gJk;D-zRWxNsrtCv2s7ZGyUUCt@8STo1(EVW|z*uX!c({F-BExF0BI>goF3 zZ^r$IT|E00kMRvFTEkIIyeo#BG|bBVh#N*R4)I7`yEf-SM4bgK?+eaZt##;xTdc+n zY&JLIF>@}d>Jo^42da>eTgsG8HsA20J9#)aVcUi7Gm`2?e!qdUY~jY(vU@?R>|tJj z*V4Jm$!1Iu&^(7#8%_cZOY#F{dCTHnTIWJ$61;{2?hEGQH81ZZUV4M--h&U+c*~&N7mQwiT6|uJII`<)Pc+RtPOeJN)CmVX zN^jUaP{tIOd&8&vGEjK&h}@lTZe)nWaW5tavQKcD;6C6t%nid@?zC6vABKyt?S}3j zFq*k36RPVqRV62=NT37Ce!y%*fm&ytYt%Y}XZv4T{{_?7|2U&mR{b+>+3YOblD0D( zaIWh4-DeP_ceJic{Dub08EzT7P+fKxAW29VdkR*y*}wYrnjPI~ix%im*H6V;6C&O1*h7g{^8e`cIT4TWAbV zs?7jpD2apw?ccDXKKO;Q&pCG=^788oMlqk2MVO05W%tH>6XJ&ARU9z6TGuhnDlOc( zTl5a|TbV#hUBZ8MYaJ}O;!J;`G7qxG0JS1 zoQ}IS3tIY1$!7=72Z;ZH+F0%>aYAdBNfzQL@eQXkV_J-!m;JAX3HFI9oN!8X_T77F za=1yhehyTJb6qV;vomUm>=elzrp>wtC3W|=bxlt~Gv0YTn(4a$86IHg{_JROLYfw5 zwkmGJvO5yMK2uixgEZsrkbA?<+}DOWvQ}|kuA7|RAz#-_U9Ql-%sb0^{mWv-f6myp z3zQuUB%oD#hqH+b>K}o|T;Y=IG?S3|L13f}G+rxpqP%$c!%p{5_yZb9q5NPU+sW#_ zS5P>=v{eO4U+|BW3B>EQp)i**%Pchv`vH0RP+{{(CG3Wn#WQVsqL5~nj;y7wDVCR= z@aaIK7_N)7;}Eg4QAw`aC&Y3{r8=v&LrcC-CP0-|)I54Fewg)t_%Zwiv+SAH8|2`) zqCBWJ>~?t)(nj2M@r11o@7J9Yv`NBFR#Kqea(6+e1V9aD*>m!sD?+lLP^ZX@t{E0f zCMmY8)zMgtxj-MdZu-P_C>@K^3Tmk01-;jtuU+sf`&^ls4Sm>Umv|H&QFCSNABL4- zb|8hEDuUay#~1X`ap1}*wy$;OG)&D-*o^Qr-AHE>fa2W2A$v}LTyS1?@Y0hhMyGSE z7viO-7@v?8QiZMkQ8sfLBa4?AXWvlg2kH|3TZe*$(aeBo0WLsX(3g#YcA4s8OEF<| zIU$A0itbEPal<)eKtgw;2TI@2X$OazcNj$H6`Wua+)qS=U*b|EflS}Cu?A(1q8l3Y z=0rK#R`0|$J-}Xeqr%b$=D-an?U{O&{X@${!bm@%18EQD4?9B@2_BZ;o)p!U1=4)eTZgz5rI?_|OhAB+TL@P-z?5XM}Bv zuno*0zNKJnHg34N#cj0mCXps;{ z>ji&1ydiu7+xWzl*4+_-QEkQZ^hRKxu>!gso`l3e-q3xnl*>3bP8MixBw(r&9yEA# zgD#H&X}~rBvX(meO}qF8Rn*#)W+8_=&lwpUyhA5gDF$PKZCpR-$o!a*{nS6vgd23V z7$QwxNq@CLhttZY?r?_mzTRpjp4J9NZU`fdQaAS5`AGusDbMkRHZ zijzVxr4#N08Z3l5rpPic`;=nVwxJLFt&IhuQdQ5>DC8xf9=_H;y+OPzAy#DAJ%-<` zt4!uy7aZyHIH`2M_9dDyKY-mC+CKaD$8|#Q`f2SSFatIh63tQ{k{wmOp-6Lnhd6;0 zsUr`cfV4GNBKhfYSP9D+1yJ=mIu|6T2JKpGm>zX8R+_fzxc?n&7jzwO*qaxo zD;2k4zRvC%ew);?N4B>~D*Fj`5p{v}SB=5i`+q{mCCXsAP`}y(fAA-gH;h(JC4BaG zkGEO#AYqLxTCp2+WbvB6CH+H>jD%eA&&aZ2GwDDBbrnh0j=(MN1L<|mF;DDM0+ z%`Juf0FIvApU4+e)VdU0znDSAdR;Ji%tHfE$6=vexC}_bG}#0CyuH$yQz@MuV2IeC zbMk(Nr9PE`E_3%SpTM38%~3z1e9|llk@Q6PbfJy2;(7}0fUgr;zQc&hwj7Fl^>RDfNE=U4JEB6CBu}jr?&5f#%;FK8ltaROBsBsve zj#0)vpO%7A_v;fno#al@eYnxJ9uqQ%!+t<*p*NPc*-8&Kbgb}&$S6qL#J#MoPH=0` zqfQ~8FfH16Zu6P@IQTq~7``@&7nrYe6@Zt%wi`25=#SThf5Uz}tE!M&CzkjDym^V= z(PgY2c~y&qbYo^H#>oPkNeU`(tF3k7{^wX^)IMPpag}azNe`Bt>u^#i8%8sB@I?Ad zuxT7l4wT-Z>VQb7u+?m{K@xW6ux;i2^?|=!;ea|*55sl&zFPqAFb&sTBCvbUm%6*y zn!M{heFO6l1kxv~h;t_GrQJ0`7tGiBZK&JCWhVp)nFrBB^)_x$9}YMhg^l?n;cqr= zyrEwCPlo>G+UOaHTQD1?5Ou2|!&f@sAFH+>V+wm<`D%&}B%d z^BwH0QT>vCOYC z2*wsYVRjp+OdI={O%k~EwC$@|q2mj4nb8_W~hzPMhV`_`v@IiVmS zS*5uh(80tv2bMCQwtm^G`vs$0?mbcZV*h2>QuZ3@6KWukP6MejE>xM&oNm;N8Z7^b zS6;J7&f9{F(54`s@IxPuS0ScOcQI0*Vb5U1n-l|cUY!Rn=xtRcH}R2>04p}3tI-=#8;RGF*^k`NnU)GQ5RL&rL5 zkjg0gr-42bT%{s9v|)0VBgj&hsm}T((kafex6%i?g{rEi_44alM>AukzF^+ZgGvV* zW!lv|9UAEyMz`D<1N$13ax)XUOt(JZ2X2bG=%q!PTN_OnpW%W-O?y+u`;6t1!bHQfC^)IN~U(8jD zSKbadJ?y%CCMUjBrp@+*db(0qAIe**{#>(q!RVG#R4k#-`lmfOnd#E)3%cftbe*%7 zOhQT|em`{Ez^atdQPZVfX99-ngoXrw-H#SFX*;*WnuKo z?pZ4nYN0nGmzZyTJegaeI3H#9w6*jTrY-ui^@w&%cK1XrZXPHM%*Wh?7b>|LcHIq@ z`)6+PK#6Rzw!e>0WtTq7_2Y9NF#AZL(zldNUv&M4@3E*)*xJ-J=9ekTVQ--}^u^at z=rqrKjpo*N8V}*7h`V5ZEc>@$pK_sLJ8qG%?Ck;DOJ*C(>XepS%}V;{4LaKZ&O!^Z zenz}VuhF_-bc+S0bujQWt67^hq3!&Dxo8#YIIl=Iionn1DT6yqR^yiYRN89iImbpq zMs$ujX>M-Nv5@<7X&npjLs0rdPSq;; zC#`^Q|53ZrUobz!(((8S#u8*tY!mh;ba_`rXc?969Y7|e2pKFkjAjnmp{|zY4Fz}h zC$w)qr0c?(u&xx^Fj=wnL!Ae0$s1NbxMlc6ortWRX%T5z1y%hl&K} zOBUk=lTrFHMBh3t_b0<630|Zu_X(L=K*g;YZj8S;E;HO4_G8>Ese2f5=Zp!}R2m;Hq8itGrUzWLdF6KRzDiKbC%M4L@_p73LI zKAAU)UT(I4_Bk$vOM+p}1D_K~bLj$FzAyU)TmFpH{xT(2c6Uca6`K|HbHcLEY=sJ$&wDC& zqiQyqZ$n$WZc~3EPag5R%#)`oeT6FtQ$0`U-Mvy*lXa>m&cZ(ByA? z1bhsoAF!rY-?ZEw+K1bHB643as(Cw|)Y=rtg>i&W5STMij z8G5L{sff{pxq=B9lo5Ww4jEtbhBf)3jlu4&l4SFML?xt7Ji%fJd-h7)P;#ltFwf>< z%d9o#PUgsdLR~=Ey_;f69M98)JcP>E8}{qwdtGfz&Tz+NUqybv+UZ|hMp^0J0tNfW zD09GH?IaGsW&fx++F^eEg2}2ci6G4AXW3oZGJ#N|Sv_Io?Mp?ZYTTa99y{i*qBxIkK3%%Bwf-3ulWRw*aCLFM@ji4m7 z(&F{MP#cdiE3*l?eaM45Pgp83QdJqVg(_333>VS-4qf95JG-f;M!n~W?|UN2b1*2Q6i`(=%4xu|$`J04M=77I-j-bwj(ghs~hJ?5YcbKdgUywTO z1-ka1t+5QGX7z;nAW-Mt!7NoJA+y96^Z=aF$B?4C_NECb_YIp>O@gX+oU;iutCV-j z{eX7)OLt4I-)C-ihbdQ|tCW3Q5f_}(Pk)R-I-omwt;D(Yfjt0(-%TKLVKp7li*uB| ztlg*W6P&$XZf;nRoMJ0A`B2BXAi+jKLe_g$ zLeVVa6RJ$pghw?NYhNW@VPhh32vYJq86U8REI0|9PUi8gVQV8aG?gZCCVF7 z#%=g^IZ`Lo`GmS8>&Aq;{=x+#iziW|2Odz>cBw$cGV#X{9dO#p?)+oOxb33iYS;R% z5MM`@+rTQ^)h~qmJc1cJVe`cz*NmggZ{)VsVsGyt5d}#21eNSVxZ$mFzF-UAS-Xz`y_xs**zEt}61 zcEt7AS99ugjzbzW{BSQ6#atefi2a^o(fenI{BB84*iu-pV!NFzs&Eo2;x5?VYO$lPZE?v5N@ z93%Syy^{)dA04T5Z#Xnzo?5(Mz8=5Dn<>iv*T@>>I5|CG{Sr2|O;%kplsyL&n9)69 zLLdr@aHf;SSHPV@Z$v(snL45Ni1ePhT19S>M^VTR@VTB*i-6RO(0o>#gy`2rP7d$oeh8Buv1={D#W)j>huJj9MVc)M*_1&xZMHYqGUF|+$)D*{X1d{n~i1 z?DZ+2+wMr1D8~sg3R0QsjWSwE66knQ=79D%GCJF)EQnUa1Vt{`hTFzvRB|dwpN1`! z69~^l^bS*M&Y6cjEjQa!snG$^D@M*ej;sIpE<2LDAynokjM^N8om_gZ>dyUyyh;-4 z)hAjCD_-ecFMgei0x1LIjpSlQ&z!7^HHeh|19?vnw6(#4cq3iIgp4Y8n2!_Bm3_4p z&wH*E~Lvr{K}V z!F(FL?aHs+%te`PIE6qFLY@5z(knb0Io{Cj*ppAlXdKU!DP%=l~l&>TQDg3gyd8zwd6sK#f|j?$DxP%MEdiT z`F1cpIBr7L+SO#i{*vR2)a3gb`BgFVoayej;Cem3bB4S1Y$m?Knmo=35Vy!M!#J;WxLmzZkuh zeL_b&@;Hm_(6uBaFf9xF6Z-b1)ENYD0i7ILJI&?=lh3&66!=WgVRy`+Pi2Dsf%0ARv$M-RxF5>ytPGZ66OPJ>CP!}vrUmbEo)vaVJ~ zbPMrrI>tPtgHJ>X!b3lD@zFxP6u}Qas+QdZeh%L6QKYp;9c$1&G z#6I}b7p!8&9Hh4T(ZnelWf*_-4eLUG z31yG}LXR15iEJzTfL`{aFq&oc*2K}fCt$TvzD_t@Nu+AaNdJzF`sYPTyY*+y&=~_FeBeUw{R(I3LhVv=VUTb1BTv| zw;RecZZGK7amZd<1o&+|T@vD}-eI!oHo;KaHQD1mJ{kQ+T~63i(e1D1F46Nn`!pl& zg84eL2dHgV?1R<7iJiE-p#4fJPmxu)rxZ!>;tJVMST}1eS+cX$&dc`1^ocu+Y98H? zx(husG^EE#Pz4*C?;3;wFtw)WTS6|~54kd=PH=r&HEvx+L?U1b(a&Fz64 z@1V`x1I_2hT-myzW;3nSpx2b3TN1kO)!OuJ$~$cJu%0^2)(7Bzv#EBP?E$@0PU=j! z>0)*v*{8>CnA+4=g~;r#x}X|xI?w}nBPBE+At|fFX!oh64gUP^j?6wpc!t@|C%3K& zE%phs%R%OrN9dJ|hru?f56G z>f>cm9}Yl#&TyORVc+tGyUor`Vb-;dF13j%OVvN&Oqkbw^E6V-(T&~k`yCqbKo}iZ z)oG+UbtH^WenPCc)V-?ZgIFdcgp1q!gzh_$I#oJ81kE^Mzd*$;=#FyW)tkLRzyw@Y zbvt24Ef=J#JF8xbbC0&{Sp>U51GB&hokQ1|A_4z7>`(ZQHAblGgf#0DI^HBu-cI=r z=w3Xj_#7(Zl&>W_L4VsDB~fHNUPN7#+3PS(z(o4(0cUEvj`=W6=DOqjSR)A@(z-!! z01{#wD?OV){JH-63E4Dgd!z8no-x%6qkXgP{0jN<0i02IK+wFl;H#AZy+fpfdU0RUj^TJZ!h{*> z9w-j6d!0wJ?~uUj{Rb8aP+5fxvX-~ptxXa%=Okoy`+~+wq5dAnk|Cd5f)l_Kg}RUv zWr)l@B5aU;3yTL+hLCj#n-K0N)Gd@c!3qwsIl7aO z!8|bZ1zl8!I`d&pwb2(y=thVaWGPW$7G^bfqyVQ>I4t%=Its31Z044saS1iYXh+zB zMnPfctIGD^+pzdg|Jui6LO!NR7U?{ zx6_!w5QKDZ(Y?Vh_a#H^d=s3Td)%dP@GPT?1>B9pspVoV^Cd@2x8?EeU8AO*&+5=q!ZR(XregXM0VWQ@Qmc zY->ST^apkJ6iw4Fa$V&ca=uYf-ep_O^}0y#pi_$Q33F@+>f+{t`*3Sq5bk~Vemu~* ztirnq3c9!Sn9#OzAVWONOFC%%U~BScdZ^d@vnfd!`aqv+m7Q8s@opd|!P}m{g&1$B zvHfs+b0pZk0&<_wE(Ep1t#sXZ<`T{-3zfED=5@f%hoC!|kUqMe&^aqq>aD7CvL@ov zpWO->-983-$##SdcU&Sqw-EU$9i$6!92(?l=!*7uwFxmqD)xl>N6t#NCUklejEEqd zN5&#@I~g>v>UWKoZz&#vCqy?&%ilz)&gs2{q+LYBNiKPM=X+-UlcQUH4ho-<}n16YN5;r!Bo81}MU?eAPW8 zus>%rXVuj{af9ShSU*wvXy;_8Fya<$1DG9L(7lZ#x;s9+g z1ChN6-XfwZFG%-tkuJGp3AV!j(#MJOykIr`GrkS0k4AW%0NXq75Y<>gr0FW0V3>sh z-SM%?eFu&9nA6q}?5R$k+6nW35tQc5(}W}0>xKN5&Xiw1pm89mStnPq>ScMKKu?kk zO}}ATQ^$n_Y@o~+j8a~-C>6WV942mKfmrddYa1`<1|#4+2?jlV7{z`yj~C3>?)rs& zIZcSG$uQOt=}-8_pav@fylz%y=-gtslFtYFt*a<=&A6(LZL^)+VKQp05cau_U(M5x zvqj>K960UsHR3QkM)PBgpUS>qeu}b|*x-s}=Q$+A#=l{6$whdR%WQI|V`toi-P!sD zKb3CPua=TU2@+z%-D+0453}&wK24Px>IBa1W>^`j3?Ewh3AI7g@3`a84PubMWGd_% z_UpDoPan31+`p2adyw1IvJn1Va;H|58c6sGZK_+bOkMHPS?;=+|L?!fe8HWp8OcKj)?gh4;rP;2<4C0#UTRYW-8IO+qy}P;IKcIHIyW z$>q8h_6e)@1g80AFFcEAP4XR9n8N|Wr~)-%mBKblLTuX`I^7{c)>t#_SrCGq7?@vQ zFv4;GOlpl4blW8f8lX2y`5I`gD&9a2Gv}N}*c0jxcO8A$ZPUnRsEhCoqnYa?P$&Au zkLTz%2`R=mG=>CqYKVmaV@Q6_&MUsYV1CT~oaVFcHDn!6b!kRlu!TOo6Lup#vRnTz z=u9cnR~`A*n+fDl_6tTeZv=umfjj8l8Dv7{)^FIp>!H+^qy8}L*@&+64f|vI>rf{G z(j^WPrj}gsxWo3{xpGNyZJ+gRUNAcj35rg@graCI`p`*AX2WFFcrZT(W$Es+jNjYO zkbb~+1)r{JR^1^Zdz>LlX2E=oHyG+zMd&pcu1H#}PZZucs3X+~81dRz&=*V`hzRU> zankeC-m??g8@5V~6DX`c0t+hA`JTFy{e(70!@sNBCG0?g$CqVSTwuR;IsqKh#e&Lw zk5Q2Qg!(72_xP3cj^A0%_y)Gh<_$aOF0z^#zEb)Hqgzh(A|316I>Kn>=O(KMG&H6% z6V`AErUlt0`0h$uh2`?O2=`M8DtfULJrIZ)Zr5PL*|ZXXH!B<|-6+9{zj!&7nS zc=IM;6rPZLLUsIxN@E&!<7>ppXgl0p>t zXfmwVzx+lj($L7Lz|@SdGKxcuf(v<*aA zj-XauR)MO29@C(#fE8wIXD!7Ltrvc^Frd4TOhP6pZ)iNpc=*=k2eUjP-Y&l*&Jq3& zwJCRY*WIPtT*>DX5j%vmvzhUY1YFoKYq>9|J0-+ToC3E+l90e8C5{(!gW0@DsC_09 z{5JnV_s~S7A29Xdl@S%5EjDmFda8GRdyqbllEx*2OgsECjz5YYkQlnu-L{>rm_X4* z_yI8}P~9>-s_?TWFf$4}r_659XY_zxj9GS91x>(y$$rBA*jzpaoySQdE|a&w{MdrD zd4$caT(El~s=pp5xV4rTMYyfIgY4bfOwlGDP@I$Ph%ykjEQzw}0R&cM1@kdj$}FpdWt~<#E>~J6Xx?KX7}! z4)hHf$b}O~KyzB32~&(f#cc?m5L;jAZdMI_3gUnmNvY$6P|VB?Oo#&&82W-OmpP}2 zvU+i_Yd5T<6Gqm&Q6-r?%RQapfKK1?)63GivBZRG?yi#?!czgwQ>2&d r2y&<+1 zcCWE*v2Z!0(y~S0uNiqCF!k#Z!C`N)xh*pJe8LZ=j($zP%I?t<6FdZp^aC1Wf%?gx zvhzkjLI?i1D+IrFU|F0batT0tj7id19{dwYpBqjU^r3r*lwN{5F)OLvx7ztqxDv=DnOri#|$Z%b*4FgzAR$Yn)gK7&@h2FrJ57 zv1Q-o=f2@D)?LQ0IU$1+)Y(FBff4L6fdduMeZyu&E8`-~8f{$&NJ8!B16sV5{#5m{ZD86PWSwt3jws-EZzXI9!ogIW8s(J8y!7mQ|0 zQth}K{-Tnuac4Mi~?#Hy(FV^Br~FuJ)k;%}p3r8^;#J&|}8iJ#D++;zR2=cm-Y&_?bA6W@?NAr+NIxUL)tnc}!U zy)aFvRuhDm6w-$H!A_~KIQRG_LJ z4GF%2qUIYmBaU=X`7^5MDX=J*5H8XWSY^B)eb^m~U}s_yWuMSX3nHxEw#)iy0A70` z`vs$$Z#Ra$vpMK(PQE@F_7hgsZDBlaM$Ym8|>GXf^}fgHh+jlFHD8v`>TQ8u_Y z?8nL0+S&t|*}dGjo00v5&9%>LSGGQ6xU2R9edvlHX=dk?3H_dgv7#F#i!LNcL-|Uc zuiaXd0<5qNF`uyOON}CW?n#I^?|mJ5a^WBgbsOCudZi?cS$sgZM?`aPg;M&JK$CmH zvW{C$`O&zM>>5ITdBf_}Y%b^79Uv)g|HytqB4i3%HR*hl<=@4Tjl3t zeB!0Y0f~%AWyG8EbBHvd?bVRV9b$updjM_E^+uy;ozew0k2>Ej%dS!4hppX&X|8uj z*_sWgRPYqGO-^>RDSbhH3ur%uI(uVCux?2}x6to!T07KUCv0c2jrx79!~wkuN$N}x zr$Sie#d+QJ6F6DTZ?DB;e=Z5j+&-YX(`sEZo{YAjc=53r-7p#PG7D9qsLLLowh3nR zgpu4Q;iPK0`6*(iVLl-Fle%TIx!42;0@*KE%`~-8$J>T(dmte}nKx`Uf76Sqxmv*P zg+!6QVSmiw6DlLwl#5MS_K>Zq8%ksFHpSs(=#fghSG4!sZ%B1G0cW{&LY2^+gpfeU zE9@IKpLpd`CvXP4z8VQJhA-%L1*o6X&?$%3J_|n0=Z5*Q#Mu;9n?)VzyOEHQ`~|(i zIm#>}r^Y_2&`tvTPr|-ozit7$BX8JFK)uzOR3>?d@# z1v>_<(mf+*0u?O#1*4lM5u{?nhJCE=*mN&ilRnVx)<6==?Ws{QA?xU}VO47{_`7?w z_bbBwFM(53KVgWtkfVyey23lWxLx@U4MswpB_B4rI59v~gsRI0qnhtTLiGveO83~O z>|+>TFd3ay9Hi+x!%c7}!Z*DC)?W(qA^dOlcJlQMg$uG!hOoc6`axAYD0e_VAp2fA zlC7OsBus}+1Gqy}1Gb9RN{jSXG1eyZ0~*~_m->I|+A8+_6Ls4#Id#<@c3%yfN}4*H zPU_h?=?fYRV*U|P-lL#{heM#`1G<+~>dgCS9Y!TcXs_5PqKtz;b5X5oSfb+T`%lyv z;mLEXOJOr-6@DMM|23++~<+JolPE#lB~e~&fvgl>wFx^20e z)l6Vtqv9@@A9Jf3R8yDqexGTd(w|U&4q?67(h6-v%C}si>=SzU4|Z=enL6svb!CG} z+OSpHW`3277Yh1)8^DQLOcM)3SSP<6o~^JATL~?uxp^4PUH&#JGj1KwZHZD>mGT;= z*f(ukM^D&p;WonN(58&nFseB>g=(~J*!ydrGi-Uki(e1Sf&*~RxMIGe%;fZ; z3>$d;+6Q)*^x$kWMwc)f+lyv8P%!Tv>eaI*RPh5jwlis`p-y$Se)4u0*_;aUs7*Rm za_Po)x#@FyrHIA`ydWQI=%LbYhkcr!7u5UphW)x$%_|ei&Vz?hj_+kZVQ4=a#C6YO zn7y`F<`e3<)9h%ymF>n}6Vm-*-!PharbsGfR(7|$g}thrurXguNV&7z!RJ36KD}3@ z(ip-6QyuPZA8s8#ERnVX<_B__!QW*wbeY{{FEiw%8Y=DEqIDl|%_5?t=L(^hVTJMEBm&Qk30Xp3tQxt#jkI?CjIJ zlRyhm@e?`{SSnkU6}M^S`<$m=$3T*i3cJ`pJJ$Y8z`{c60J&gW##kZ94)XMo7TSQ8 zXU9Hwi%pT#0(IvgY9FxU8)3LrnH`xu3Xxo{Cy8^jonmcn5e!>}{W=lGBBMvIp3OZqb z%X%1H8d{sq`E#MRlaor@DBpS`7P9A|i687XGyni|oYgnf1&7LU1!Y68<@PY}w=k8xjzh9PvEvu* zQN=e(Hr>x?HVN!3y;B2SbAY?$zhIj5+QAN0v%>NTSK&nThW#a+R;jb>Oqm%zaxJFy zb3#K4Ec~z=qpG+G!UURHO8f~uUN4nKFzogCbAMDSs9!Vj$=8^^u&?TG56ZiaawlgC zbr6`#cP+F2R2EilsHN|ul}yd-4RUL@3-@nG`-7d$1e42Y8a~yTGVEky!w&Itv$Kk} zE3Z-Fg3V=Z+}Z|Am#|&BS~`vVfX0TP?pB)_I0;$)w2_myz}A2+f^Zdi+)Wae?s}g$ z*ioM?fGevtsXeSt$=o5Wy7jA5GfmNIKwQUKFX0brQ*%NNjnZ1}Howg|%PGbOWCWMp z7B}o&yl0Ehv|Q>RdNy02S&GG5C>M9AG|)El2XYO_)$V$>6q+M73B;q)@J>iug1YQs zX6xXDDfwlaX&`!8CeZ{peig}(tB8{anTuxGol$R?9V~r$WP0a@W!GnhI!>@Z9nF3v z()SHa-LHi*=sLRWDIj|(lsi=M6oRX>Dnr8jTpaj2Y(6zZDzn*jr98~5bl4B*Pz@F1 zw4_J(JTRIcTd=ydWWKK2&*!=8#oqlyj)rWlV6mpfsDIBkk7?rv(mX<3O*W&Sn?z=i zXmifE*fz2vInQ(#$)S%XRDf5Op!%!)=sZb}n zey{b0eZw|~mYX}_hkZ6nIa0uVLsV~7;a-DfhT7QNXpxqCz;-!LLQF={gxzgae7F~C zHZ3!Vr#>&jjxd^R+=jG5c8Ssm#!3)ap>dT#@HLx&djF5-2pVw{9JehHCE zUsXo)0Ai!2Mk_o$1JxhM>nWq?%BTms{5nGg<#IsE7-Ee%R697hKfF=fnU=zBrq$Z| zjO6at0Lwr$zdWEekVX&t>d!Hu;GEIZute?NhXSPNVf@HMdJYbbbj~o-=WSh)N8D0vG7V&+s1}f z&9yezX?~S%4+Jxws`(Q+TZ70^x9OhVqi4bx#s3e)w^*{1Q8yh|_=3@lr2I53W-_W% zf^>%Xl;Q!MqF+0hDRbv(vX2GdkgshH5w^|%lAw2IK`H$Ob&sg-Uh8lFZ4X>^bV7X= z*k|eld#gBp{0*f-JreE@kMjiCuoH^M$i3j`IZxiGX}2MBfVAyn!nChZ+kL;V@x$Jnb_eOs>4Gl* zpqm>eNB34yuGMz%-!M7NWcNBC;k@0?bN40OPm}-yM?2U7TG<9`!86l3P=CmaKg&F4 z3c4|w@PZyGAJaN)n08I!WRrv%^S|`1(4Ww=ORz85iMI0f^v?@6lR6e;YIh-{j^M=0 z>7P&N4RKPtYEOwdDM0pe{GQM-kJRn5>QkGL6HEx-FxgDx7V35@rn@_InavYMmANL> zQfhx>6GRJb!EPzl8}JJITi6NVtddhGIcI0kKdL+t*@1cX zQ^U(wVn(VkKcUh2P*=xy<7Yl!g|c9>nXB3nwkQ0I=5TwCK;b8<+B@o$i;69i$l55M z=FVAZYedNr=1cSm@vv2MXA}2PJfquzCQswTc|N?krVds6f>n%0g{*a6+4yo#BG#LH zqTh5SnCG%ngt_m;1Rf+(_674(zv(<>0Xdi)>? z{D9aJsZ8+3T;V5?;G?;%p9Nc+DYH+y_u|euM&=-8ejq9aN$x^g%#r1zzp42_{S*fX z=CxJF63$O~HJ;oD%n@!*s`iyT3k`pZ?{jDHHxMsF>MBBKTjH@l7mQ}^Sdxliui~Ce zAi*Po>T*Js$E9xe+)X6=NNYx#k2#Zih0F4=EOwE~!ZNu)VW{ov7=&8Ju8#d#aql_U&~Af^koI9 zJF4!5R3^+C_674}&4^bCS9qRsRCsIqgp{AMc36lDl1%7@DLV5{SZB|zp-RU|GP1z% zlbtkoNKSziH&iEp!`_jv&II%)^qjBkOl`~V;VY%DdFO`t?OeKns#v3uj{m3bYqEC0 zTKT!>haYD`ZPpp-qw4_~9i-AgM>rORgxt|=);4TT+v6yFxhXf=H{5H@^MH9C4(hf; zKWpN6G$bwLf)O??fW_L8?xp~we`fPC-p2uJ8@OY8O;xBa*%<-U?c;z{q118Uq2mIE zz1#~`vyr_Wp`Ubnna7ztAu3CyCR#3eGKYlR$lx3+r3`FFajs>@iy8L7nM$TadqE2Y zyhe#^qyg7B=cOde{|>3Gx+<;^PHm<{dO#HNLQ|J5kTF@1aYR)s6T>&`@MY;v-FLj3 zEap{K#+>HRxi+Fa{yfZWD8DC<(@-{?F=*~$AYbi|8sRjv1CCMLK7u=0__;jzWvOg9 z84Ypb0%WWP*278d5ivX)wmW&l;*?>nAi^tc!+zZk^5+VEwVeK}{&t6|mX>m5wB^#X z@Q@Ekh?0DHoWI5Rv%S|laxIq&w$-*7?%B1wI{5rA^Wt=f1GX6Eb&+%!x!FV(VJ%~~ zl=*EQn1x9HuO@j>7KLYKa6)nkk?S4H9p8t989Wb|ClAQY9>@1RG4+El7|k4r;ohTX zhGG)NEjyt;w!&9aw3V390d%8e)3fx__L_>P%1s!XazaO6*_X=~57K$k_$v;_7j!99 zxR*)R6*Q=5Azv{0%pJTG+U{|VynO#7yCSKRC!7nc=3;s46K7HOY`ML|wuUw}Lu#!f zH+WkA;}0E>`AZtd%IRFxGV|XjavjKaclFPD%6ma?!{pOtJe#{)fKyU@H` zLp~W@Rc+SlH%cz+53Rdz;H_cmp}#k5TcMLqyUlA!uwf&upa-<5FsKSy!OV=cCfvr_ zK=LVj+LE2X5+}hCisrMtiaYej+D@^3t)M(M2z&M}LdU}RHDgqCn|6+nvXdx1_nf2q z3AH3p=L{0`e(yrA;trULSz#xNGOY#Ep6_R{-7r=9L0w8^L@B#Q70iTI;RkA`b9JfA zpN=g0lQUo0FdsXLO5L(=2?{?U!86!byLEIEPK}sGezrm>0-{@+>51Hcu;5Y6F=ka{r9P9f$EP77{#*pH{MA^4M1Khn7}75-MPu z-3)&xWD^^*42_oE{RSlPY;dGqFu&zpG*V$I`#-z|?`Q1TdLVm)w6%imQ{pPkP<{Aog6gbPNq*dX^FufFE+@AtS4N)mG+=mi^MpjLGCY zRAfJF$IEjf-#~p}qX%o}MSGt0r5;aY!-V;3$4WA@@F!}QFW3fKW8@pxYK@^aMu*Ti zLT@vKZB*PTfPVC3R<9-N|XQ1D$rLX?rH@wer0x`VDI`463xi zEqcE9q65q2g3W2&6YoSFcIOMS&mz_nx+Euc&#|#J;<`c$L?ndirAU>}bOldu#PozrSj*ua76Btkm ztn_4?D@QAC!+!1LgO+~{Z7m4zF^)0^?2maOzD3TmTfUznKOvzjr7z=Ycu!2HR`>;@ zns-7#)gp}W(RJ7z4Q^kL%V$7g*jvHeh81y!9wV;Z#Cf4`mt)?(sbNx?6WWdF{CjiM zrzMeu>V81Se5h-@`qZ)@eEa+hHm4*@-6r%4FDRxavQJcdxnuBOMmYJc*;BkwKh^uh z#9`=LDDE^dAu}?p$N}@S+)H?$s<@B5O)*oI8`OUUZr9dTClh9xv`~w`ieS8|h_5Tl z+p0fM3)>a=#azKW;G9-Ck_jEAs%S+VPnejHRTsV1Hm4Ih0KvXjjea?6HKBvV2{lnr z_o$o)12`>#BalXmk%kV8YI%DY$b7P@|8Zv7vly};&_i8P886CC6A(`jexv+Uo+*;J z`i}>#KF80H>lplJerreWn8tU{J+||FRi~cX^5h$ zD*1qU9~SDK(i#MV-5p!9Uoc;%=Rw^*ty__0r>lnj31gh0?w*;@7zxu1PiQ0+>N1}n zbuoM~K;ai`OPl&x+*uAIE9e$gbTw~K>q!xA@6bypOsI>nQNGRH-#*~5;u-O)JWXCr zPN>HVbjdLDrFh_WtA=#_hXJ2mi-mdgsR-@MkCDJUmY`d zkP*R`EoC}^zymiB1h)s^AfJ>~=Xr3*!`0vaPA zgb}r_Q?lX4`t&N5K=sscilr5h6%SEFEmU4cmkRb6m>=6vG@cJs zyX3>R!`!D$a1O(q^68B|e2OEAAa^^JIgiScKnclxLZ79QT8l}Z^2@%YlN>&f_i4kt zUdW>KTAaNVDNtb>QcS+*LhG+8I@u;ntNLFcZfe;X2 z+hgbl_us2ln!iG zJKW}-XsFwh&C~4GS_k_R=BKY>XH6*eFy4s~4!#{U&4oWLmb`-knWm{GFEIIB7sTny zw7HEFc0eOhb~>h5(*hijNf?Ka;z=J}&=C^qSPOmbNr)~7a`ugJSd#UJ{I*jV@94Qf zuc;JXEq5&5G~6e$Wx!0wsn+i5Heu@ig#2V=ubF_hKuyM1s;OPbm>EQruWa|;nJ^Kf z6Ke3iUumXrS3K3)!WE0c%VO{nw}He);N!l|kV z&*zifVQ^Zo69*q$%{rrXUWO=pj@_+$nQ5K*HYZcd=q^8XHdK@6e0qe`KG~ z%L8IhnPN*_%}}!*;nDPt$l8;?N__;`omzY(6ZmD#HvTt47ro9tD#vrUEbZkg;C%-24zDV63@_W0Q(q!jV=oT1*J z6Eh$eA`iP$Qopy&!hXUQ1NL{=N7;_cyrS#JIq!^SZ5F<)Hk#Lq^j5=Y{)FSa7%D5f z!!#{E_g_*h3$>8y>8!U}__1~m0wNLpL?v>{c`}*jQoJLxnLOZUYi~WZM`2HOlsGVGJQbsI(~??%7mQvt zSJzb{u7M~l13Y%(fUPX|-&O4_TaypmTUEJWG#jI|R<@wGFJqO${X|rQMKWP4m^-!+ zwhQwEdBg|i6>%Y#)huJ|4MnSX+cdFVl@4fp-3@~j;1lNQE~v8&nA&iXOF}O9yu&DF zQAwrFS|&aKYyu`p#ZTzEKUDT-mOXP-?j#QL6LeH^xuLAOf!vwT zAt5V#(I~-IZq+zn{=Y17Y{J$jz>9J>It2 zH>A%<-J{8PYFLa2uNSuv##ZL5Oj4X(O3)vVqSHq!cx_39>I}k3)}yr@ zr=30fV&`9*DL2ILAtCFWURd8QaKUKr*+rjT-jicb(3voEwG%q}L1lYGm58H5!VG68 zG()}~uJC$xtAwbgDM5Rw>}{xd%IOAMo4ERNBTdUs!_s}cq0)5Cp}{iDdgC%{i{U;X zLZ$ZDE?Lw7f@9`iVbxr|I`kH&5%`qJhS4nB`w)gFT3!A++>wwe4_`lFUO_E&sh+&B zD$tA?f8r66EE13t*U5nN#$ktG0r+Rk&!eac>~vETrY}FBHI|?Dw9II3%zaG8_bclg%4K3?j-tU>rVPk(v;oK9bz~M)`%J zS575CoVkD=QreaFTiGY1q>$xvYR#t0QYPe(CqK1ezIGZA_GPd1-%Oyilzu`-MW{qt zE4{Lt%g6tgHZQI1e(#c_2@Ju}`hZ60ppHMy?>evcrMC9u6LKI_HFk^jqVXiussR7H zL%Sxzc9~>rJl|*am&$ayb%XlrK>GKz6hp2gOl|&kaqNPB*4L|H;ZWprhaY;+4bc;Q zGn;Rx>PhJ6<*EMk)B|dg(0tF;eYL>vXdHwCwJ z+N;&j2ifqhtnC}b+6dPu;d2vWN>^PD$kZ^hwug`%W4?blGb+2x4chL2+f~kf2VP&K z1t~oXBR80zc0JcBlAQL^lh3cvfq-Wtx9jxr5#_vmIA1fqNMFza4Tz^S(pwF^_X+6- zlFMtkjq-n)e{D5&05kAM- zXkF|R^!te$03$AtrrA#R#SEwo{f`q6*y$)~x=%>EuWoh5={KX@@>UM$h^DaZ+t6J} z=*qXfF1jt~##*S}`c-9e;E9B&@&MTrL|fta%F05&nss}o#v`H@oa%CJR`wj_ggxsP zSWxHwH)sHt-<_7o)KDLWgz5e#q?JHjyW{b*zQAU(zMggyi)J9e##)0-6M#wFS9TsJsm%=4qkH`X@n%Qy25M-x_KJRr`D%1l(nT1nP?%RUA3gsoq$+*vtI z&JCx_?CL$wPA_Df1h`A3yd&6kf1jwHFKY>A`2{mx;EM@~FcS|sU<>?u1kIH*e~vbybfDrkjI6Z|4%rDA6Q~K(9S-O-lTvrb&!Qj+s|h-C-=M3XvM=d*l$r!Q&6Kx2`366z zO(1Qd+03S;FD7I4{9d3RyT~xyjv6H3OjI}n!3DkWKJ2^1N7cHC*-gc7XJwvd*>Pa) zD<{FtNR&9?q?EW@l`hECEpXM3^GeByGV1d`A#s>|yzGAVsPW_UoCvp_T~M!}g)nVp z@;M_jqfPR;V2XU5I;HMy;ugd7`X}^#45-F3EBsTdK>{5|Re+%{*b>Ie9d3_X!;OmJ zenJlVMb;j$z8s9d@Z(yD2mChH19ifOMl+-Od%VOz#ck-kS7FOz@zDtqydk8@JfWi} zRA#KByPKOxAmkSIHthxT^gGmRY^FEKUQ6-uKrFf_%7wtnPMF_>>7ULbE~pMdN^97$ z(aJ^zRbc~JG#hA4LMlH!?1s-t;OD~rgudDYbse2?yu_-JuuPGY@Ede`%2OzNnDBU} z2@D8IKOke9!aitDRpz_R(|u{OpU|P5_aqp?hTQ>_goLqScQm-cX2shehCRCWfe^T# z$a$l(mzT&siRgwkjOH3yR9&#GX&c2a9RtWy{|6-AA#poT*$iR6r(e|2ZP+qjP3xom zKsQH4fYocDP648D-}>8eoaF z(WwRPZ4^@?Zr&ynw1t$&0c*`>0iT}bKuMFCwtYfF(NKx7Rd|9kBoGc#I8ePdZ0YXe z%T{m5nUBle-&(M3VjX^_Rd5j)(w1Fz9(kdb2czobvTfCS0F%oTro7zHJ?uJj+=5L{ z5BmW-=5wNIvE!=AzI-g5std*)=ay@}8tHBO;|9&ZxlqRw9g|^J)DrBk%>N$p0nww& z=hKPcUX5bmJ)x0vsB_5#bX)=wdNc4V)a|pPR=>%4UAo*DsS75o=Hw9ek6DOfyfz4D z4{dQD&`^4)qk5v6{#u3AyyDYa^uEBXCbNu3!fInBAE?Z8n~#&~`zA>=Q}O(O!*lIrch4kLLg-@kqm=Z$u>d5irX+h=ADYLW0*#Gjk7UD zbxGXVL1$ovvvqW0hdIj#y%zF7F2Xw8tp@nVMMo0G7rS5;tIKk&UXeezy`a%B$rHKl zPh!i2~|<#mNl`*x}!x6Edl5#{~UZOxu?GiIT@ZdxL_v z9>D8er;)s2^r9F;Tza@e(1ZjQl>CGp7yeFXn-xpgbNlffR)I$8^hKpK*ukG@MRC+_qQPw!#2Ci;F(~0Q*NgZv${oIA&s8YZ_C@=>j*@ zhSmaTz>Xk1~ z`dqo}=$v&;i(rLbjnVsc3-Atp>QTFcr;jL&88B>ZX`irW*wSp}c*mcT6Oghh7ep;! z$4Bo*p1Mq{ntHE;vOq`X?-?GbXJfjQN6s?cVG4J$Xz0Ghmpd0IZ8~TQq~>VDRy$W_ zj+M=NHS9A(K4EHZy`@1TsR{2{h&xQ-XLBE3!kP-cb@pZk(hd&j8jvq{F*uy#kqg;hQ zP$YSCM%!XyV!o>6)=_77X-)1R6=rKF)a{Jtye+RT2qg4X>DeYp!uXyi zbfwJKI+ik@x~e41{O5wv?X#_Gz0at!`8hV7HKPaAkRc4KG+EWj^XHn=h5BtX;u}R} z)|SZ|>Jy}LzV^(KMVtS^+NO~;9KRemTI~5TmqJ?=$I_EPO&08kXH(0Z` z9y>DHlA>~#jg94mE{*dwj!28#i5qwd=0JMnyd1Ho%1)NTJq^()q#qAdbJ=%B(ZK|K zrnK7w8mWQ0V_3XC^%3V~I-Y7WdO)tXny)9LhDiLmb}~Jg zJJjSNeNWuuRgyq@r1PMO^nsuDSRlVW(w#5zzC;{3O8tQ0*6|r`4}`%zsAMUCK)QEIH|& zbuY+%0W-~^s(f>I1qt5vqUJ#98#W^bz!rPHUsG&XnPeYx&E`vmt?k{2)AEqOP#Wn6 zbgcz86E>s1MKSCK)nK2XnkPx`&_PsT z%hB;IZGUc73Qic!a9=7r*Q&xi4%!JFBBAa%_O$C&D!`Q56q37{VE;scN_XRw36!-N zJ)v$6R7}dS8*C+kItx3U=>e0`J+in{8L~T&WqfQ}LE^|W=FHbP=sR!`CuN!nu4_vkBC?Ljn4fg>Z z^?1!;k6Y-gw6*zE^>5Id35Az*Eikw2;|xan0X@gawfd{6{L`Zb)2FJ-1OCuRp!y_E z%On#f5+16y13!*Y4IRD}% z{IsoC=voc8yyG1Vduq&ROg_FLYm7dDsIhVg)1m6u;ntD4K?fG#5}gSa*U`pTVAHJQ z$^~`Wg&kMiQ=8_|J0$}{P9d@P)F}}++0Gb8g3%=}&ehF%f$U>bv$5t#xi>en{uk)1T`JaUiX5jX>{I4ghYc?B}6SCP@>Qt!g|H4kY=+{q3w~`$bGScx$Nbo-Yuygar4f-yDaCHpl`eOR7 z+$W@_p}Kdf!hM)P_BFQ9eD07wEo3Ymc9bBY`{I!Pgx_>4soVa$*k-~Sq7R4XVqNt+g8iy<%6ZjMEC-n5bWw7H4UJPl%%vn#^X1&Vf57toGw8#G& z>6{%=+)Ok)NpeGcoBqAB;iU^E%%tZ52|Ky>6Y7jLB-EsO#5&Q)0~!Q`eawO1w;)pc zfzfP1tYkD#kt#eLus4Ce!Wtq5MO&q@Ib3FbEIVZa^Va*_U5iyRT4Zn_s4Zj4IReCPwQeXwnxnz5&E%S(>-Z>1WNz1J){0^~20yU?EMJ zd7$SG$6n9u3srS$_^~)8uh11eHLF>IPWv?>E$tWBGOr;ZY_4xdv1G0msI(0k6ofdT zRXu0INXUKz*y}88sPE=aZ+7SJBup?>zxn}#DAN&c>|MUtl(_;R}q1%--L6F&3tpXUCUb z%E0KdHpp@u&>0Wp%o|@}{f>3p6Ne4kHZ$bCAXhyQHNh^((K~*Hz)UVs(z>h@szDxd z!N{S~Cp1tBmAGk(n-HSXd-p(jn?`hC?~qULIUo&LYEN@PW|kdXQ+vX3d}h++kN5L2 zhZk%{>DT$`Rq9@QMMC#q@%0Jo2Tc{xJ>J zB8wJH!YYyzGLVG2W!JB9yFr9+Sj94Gx}esURYkkoZK=JGF=s@3;c=NgfM5c?P^x~z z)@2=+^&AhigBJn2kyP0a=!Jb!@n0%k(_%u_PptYU#A}dR-vcsQg?p-g!>U%lW?k<` z<+T<21WHtYLT_q7*mZ*i*TE(sC-W$m4O^zD2>XhlSw$_@giv0fnp3bSFp9^shZYT|`v z`MlGk1G;NNDl4I7@2qg2DoD%Ns1@c#TVYz0qPJ9(+?8D`ks4G?h~UYhNV_nzgKH_j<}c)~YY z9#l5@t$M82vSyQ74e6_+oTYD&aDjsv{_cOEgQnVZVZ1Bjt zkjp+cgkzBrcfsWIvn_Nv{X{C#Gm&YbJOQ)ZsEPknQK;lEV}`52z~!ad*oYBodhKDEor>sqdEfb<*B&JKw)$8VvgZ?etRD zTDu!=Oo;t4GW3Lwf&BIkxHO+`;ZT>2qS==&E24Jf$NSgwV-r?-!cV)NvR7xbM$BjX zz(y_6kaj2j7;5Z42I2`blv5kHc`fjat|ZKo;t6%WWM8%EUSKt8Wp0#AdNNPiR>dVZ z6UeniazM}ShkdnhH#J0do9qSiwNnhJe<+%2?%N+GFhx}Q38z_d4szHX+hLDe*?k#z zs2z~HrL$yUvmX<_P%>&TFg<&jEN}icA#-31#R(}Fs5=5_B+LY^npE=(CL``RYRAma4f_d0#P$q#&1-Kp-2-Lkb;8N%YKZP&RX84DR9|q0(F<0( z;p7%;3vR=F?L|XU_hy*H`beOBm3}}&{jzf!b*fZ|hCfMP?7!^4r37$0#HYinnqG<(FEVxQkOW z4jS0I$>rMto!mercrfg>yfadc9bQOJ0%n@|FgF+41NHEV#L(NBydf@d*LoY7GsdtV zP>J)ss0-IxrF zbWOL)w%NK}v9Ld;b%aV7Vc4CGk}$2$=TJ7J)H|xYtto#N>H2vpW!fUr0&9@;{}s;X zS3=;l?8eY^#{8*qgxP?twR9ox@BjQiJ}1GpO9FN2WX(O>Gy)R%*@6Gvpy#lKvuMB; zZ8JkcjQ1`!gk`r5bOCV+E?S3xPJGDm~F6I zyhxzh2mNFfQmW&uEUZ1h`K}8 zbRp6Z%Z-m7{5B2qTi;(@CnqPQ*FYt^^EtD16Q)XCnY=^&<0pH|iQx&=eptViyb$Zd zpxR`~DPaf>y_o-0us#i#bZ!bnB%`Log*_{1)l1RNWw_twgcx{!f z!7Gfo4MQBe1$WEYw>TKiKcvZrvLLY%{;kT`~4;t)=ZmEO| zrBLQdrerj_xyJvBk`Hf5UcaPXpQ{4WIyP#iKX-k&+fTLV97;Z+TM?krUMo8rHb~Gt zlHL6qH`wkw=K`d+y6lT#uSvULzg~*Zk9!%!O_v3|2gcuOe8^H@>C}W+rETT3{2JNnpfnNG74;nN1Y(Dnh=QuLV+I0XfaxCL!pPzlrZ`)}J9 z-^a-E^#S#9pi)u8j@1Pl7x1@I%o}OO9?VX;Ot59c{e);9S=~AYJ?l8I(~+8$9}I)v zr;9>Apo0%o%C)+=PuYa22#-bHp}{hR4R`i6Ufd_t#Zq`j03%qp>8x$}y=@|>}+qiL#HWFcPIYmG{*$(5$sR+qkl&+cICt- zK`bl@8tK5&2Wmeo^_o(4$}$|2@WuDGAQA$N@CX#evS5L$e8T;$-iXJh?A30%Jzy%> z%frk!bf=E8k2oimH>hD%dP^1db`>?t*9YWYYS|~>+$W0`Bz!XvHY2Xro4_#a_XqTm zXsJs%H%Ez?7Ra3?p&N8s3f#(h;j9U+Pr?2I(?W8Fx#A3sF^QyAM*0EU%YSC#cPTPk2fn4E4&+()!rsgx_a$xC>|Bphf=rN7%t!t^e)yf~E z;QRm>)fP-s^)}dko;f#1yu$kgIwDXg$6@7mNE0R(@zCxt)#XS&>_()eR}YK&26=Qa zYEeCt4_yG%p2n2*sT=G7Fgpm%ma|8tca%0E`Ap0t^pwJej?z_je$Lq?32hxVsvE*@ zhIFacww2J3qMwlc+xeE%$+%uS-y5ihohJ<=ZlEvxNX590CPu+c7*!5<-J&8g23M-yX}7c?v+9A>xFhH7^vTPI8>m{;kO?G&4vv76&UaKfgR%%Cg6pQv`pZKfmIXc3|)Tri*%BluCx#h=l z4cu=qxtz;ip}VOA_Rg_hp))k7luD)hpnwUh%dnnthvgnyZ^pw+=|!^xMe(^w22H+M zw?vk=9JiF**=j;O73oii11@zYE6}T}!@s`!E5Pu_3aU1Go8Efni;K5+ppW($CgacNVK5A=) z)tSa7t9J|q(^zF2@=LOoset2q%yUr^z585r&?uH(@9&?Tx|+lRG2l?wFu!x|EGo6;Y{*h=t=vjo>Dv1gl(X1Y zLl%KN0BB~Q>!RMEaR%V{n9vzdNN^1^><6SkrA{@#?x00NT%16~E$H3MKo4tHJMZ2% zVLICZZ@QP=2g6y&u?aOZZ|<8RA)z45*8z1&q3$;2#TG6E#mb?b=aO#F=@<}YrtJ97 z1PoA%>Iuy|)N$_+$5_v=F_?s#o_`@U4@C3I_SzKaUU6$y40(jZ`vV6mZ9^v>Y!jN! z%XKu4&pBWw_kmnKaR*X;7G(3F9|^uP9NF5L8?0{nm+A()CYbLt?!7{eo=BZQi6M^^ zL~dNBMV$~sEjttI$@yrWB@!bT7+~lNYB9-oU2MpDYwj^?9h~qg#R}){4yAcfeOpLo zIV7}uJdx+{W#%W=*QsGIp0f%+HNX7!f;ur)$ue^?`spZ10v$IwWq0Wf`aG9# z8*{~)pm9a`6FDoT6lpC}irhqLLgvhrqCxQ+baDWshGb{qz)oqXul*qVk&K_U9{~S@ zx}kHThRfz_&874%d+#c?|px2EBwnLLI>KAfGh!@1D7Uqt2kPV}9vIu)Ng_N)V zx);tedLo(%ybKbLT>GfeQ0E;gW5GywdPM>TE9{e#1uMK; zfvjF9In*|-wKoYFwv_Z7k4%CJ;3v%!}B=d3nkHE+pSUD4X zgR1vnGi)|a$UYgV<9ETX?|x%{!dos|NN!t)-G>O9ZO(rx@B`CospUB64K~|rh6{aq z_f+@^d4*hIGYOJCUGO~tuUDvZuI{Vt&abyjN3#LCXjJZM8za~oI-_=fXG7<#tPhP- z!w-9u-}R?qr)us{ubU;FS>u8oz2GLVEt3bTb(}liEHZr@--;aBPpC64b)v+03hnI( zj&PtwwxQ#rt$Jlt&wwJDF7re`uFlvPrU!U&2RH|sP|S-v?y$oGqkNk}Wo5WhD_Iw4 zPvo*}cb}O>_m@G=Ncam(0nFXnviFyAd-MbT7hzWuR64UQd#Yyw+7+FxC84`deu31M zn|Z69b3OW|dw(PCKzb0+h<5eI?Dk@93ZE_%%{*=&$*VnD4sKFNAv{4ERES0=>$W3}{v2JfKG{MhByvNP$h zm@b%7%OW@Iv$*3uqSQ|lWIv&UtkmU+BoNK>^M5$iWxKOo1m?#KZ3}6f&5M@~n2;Sa zy6{ivqASulA~x*WLJ~5Mg8hKj8Psv%p<8DpjFrD&b#o|G*w)<%g6w0559l}yb(*nV zOzgvc$>~Cq(PYGlUNujPfO}cLW^_Xb9H^AqWYo6I_Rvh}%*Yekx!vHrT$_KjmU)bv zQokUoF*mWjA$`^ZOvv{({1Z6Ua2IQBAJn!MJjn1a)GtSiJy&FiQLUMWc%SEnDCI1d zZl5C>Dmgv9J^Mt|GrSY0wE!qy64LwbFlC>Q{o!R-e++Pwfb~t?JYjZqA&frT(w+m# zIUay!7tGh0qo~Yqe;VNgY|LaE*Ak-l4L0_iE}C-g2ysN2VDofB$kHKf#6;KA!WmBid`>aa~a7jfD`p72sU zEyU-{@>}m1ZgavLVVW8bba(hTVTWcP8uRCTw+ojK_6(AN`Ffz&PDAy4df7b%D|>du z@WRv+a$RwRVX4dh-GXtKwm){ls6N-XOLlVr$DR{34^-NM1{H+N`bU?Jn?A0ha9>-7 zzF}&}R|+W#y{w`$^&lbhb84WT#)9ha zFHabQDr@ujo5mR!%?5hwPuN$HJB>7f7OpZUbP%Of$U&9)%UymZknym$eJz+3GN^Qj zvcEavQ=wsgg59#x)Ea2!f(rwgHZ>CHB_tSG{uPEe6Iod#B850bZ z$&#SDEnOI=eh9wI0XiMK~Go+nH$SaPI2~3h~asG zmY39aM~gLAtNfw)`tb!*3$z58$Go$5Vv1G&`2}ICWS&_lWd6%faWY-*4f`?Mexx#g ztKRPXGYP#d}@^h`)p;|1oejIfV%_sYqhL6lP2FuHkoP3o-rQiYh# zBsj3Vz;CAg5mwtkY?LN%f`{;7zhJ&L#A#Nybgw&^1lbR0FtgOuDDg}DeiO8UC-Na^ zX)Q&l{i$gy8%3>=!$>(T%W;{HJy;e!o=~4bD)rii_|;B<-E1y5Y%VdFu)oc`fKsSx zdGg*udBQw@3;VQN`&d3teLj(mIBjdL__g*&)oCmjOm$wiqKePexZeA(@t{5#tEjK8 zpB!+0joM^(HeIUhok&A}!aM^H`$TK#MD!P1Lrni2M!CHA26X~%Y>r|Q8TR(71G>XV z>ez2qIT_2<9n)q%xga@ndrXA6?X9}IAxZXxj%0s8_vu3QIfG$ON5~il^8?r%V5Q{C z>SY-u zblhq5CYbg{8QfqVpM$!3 z)!bkHF~jBw*(JuuA2i0*_ERvqfd^fOeZkLmLMo};xwnqbJ0yc5tSAo_L)(QIHS^3J zf*&Ba_QSfA@O5sr@=BZ(*n-J$UW0(TDo1~b+s3gYVSb=df~{uLpYmQX+~IuyFBC`4 z9354~w$Zoj_rAj@HT~N2^eu}#MbE~D%x+<)HW9ZWGXvqw+Mu`E{<2w8wJ%uBs?1yi zVHwbL{T`E=Tpo~aCAF`Xq{z}>b8FczkQgcK>xd35lmXuaepTrgjBfaMAuj*N4fH0A zeLP|Nn)6Ewh5<6%JgSbc8w$;BI*4*1v&@DzN%+VNL3ic}iB3vo)>wAWz?qQ6j97sO z)O)cnENA(ffzE_6G7Ckqytza#oNkG*+6XOoOv(W-3shBnf*RRuCrG3;>%wAw+|Th` z?nq}ABKhgppRLdgXD}}m%|7)xTWVe;AJGTwDD8MP>~$eIMpJPcj$*0awR3?V zX9~~HrFKtr%cQbB{6&cx`H8)Bz=9-+dTn>qZ-1N(Lgp+)$Qy>+a2!-m)yU3@ zijC9+3-lGTG$NH1k+Nr=CA-z#HqP%OxvP%;eH~| zuZGr!=0TE_qHirK`-0IdGdM)eY7}%kpkaP1^c6aj@{OrFH`4QSL_{lY!+z~dicmJ4 zyBYQ1w+T!70joP6;#8@JU|`P<996%gxRcOkY@$?*7$7?_@H=dcI*&s0U88SyIWn4% zj7yXcXrw_ZHKpb(6*>tZ*oGx~!ce^%6smVsm)-LMCS;aQPk2JLfVx&5dic+TVK-`c zhr7?U6z9$7Hw=)I2G;|_&e7%vD$VJsqH7&!+s;@>h%tGEt6SCWhHmJDPD_<5{Dg>= zI=(cj^yiHAMwbn%S{sC#PlIqmLZ#9EniZ!9BsgX9`x90>u1lB}(pqsDSndPaoLFO6 zy{tc#d+FuP4|`p8zSPO*XJ;^g%zr9Y+jAf%KG5nFp``X&-15I*vv6gRJagxRZ-ajQ z#q4JPo(Whu6BwmK-;ldJs3^x*s5o8y-j^^*_`(wj{eZR|sPx47IdbNaVK2* z)Ip$#y46j(AQ~C+DZcrPkk!~X-Gr5cA4*Ruj-(p%7 zU=^D{Jw^8eR(DFqe)VS}q%2V2uh1_|aAN)Eb^Iiydri?DQV(Q|(jVat zwReN1#$FTB7+#RfC+l_e0@Spw$!#X$e4^^#v{2oM0JN(6`4&jWeSgyWgZPM4u7X zC6!FWGC|+#7f7{3^-_ybg$rLys3NqX3(%({s6D{=X|&e9Me8S=Psb2h29-tqwS=C~ z+TC#?OAy;^LR$G9VsnAJysNbjNPcq4hJm6L;O;*YoWQ{UzrY!)pfg6vZc}?f6euKy zjQK4)jK4LaH;iU30Ybg5RCAN637C_}KA`0fb(g=Zc9D*Iswx{!K6XA;M&}sqa0W2T zW}F1tkO>*u?htW6e-2NC#xUPA50V|XzyfRwNV;vB_GVaS#{un#v{rrNFX3z(!OBwUIU5*3> zu&|%7FLD$@`52!6l&PI3N zqijO6O7#fsSZJ!%44RBG?17y{w}luxBcWHd!oOj4V;qr+8{O}H0l);e38>o>8fKJ= zkg^+vF@f!+vR^P?`+%HO!d1iGtgK7=eK;KYf^Ikwazta4(XNuP3hIEZ#JSHvW$it( zSM`NjYRnU*(V{DxR@&ccF+R~%h-LPs1h~EazNP9_7$(4IzE2oE9PifWse@1F@^TZY zRT_x|)7A{^_q11&7@e4^ifT zZBKP(V8*MJIivC`+{F@An2<0l$DDaQ$Z}!=O_wqOKXG8_3znT$U{2sB1gSM-sQ(2L zGEmlfeb`OIC`Ur9*)Nb%hPq^9Gl7nek&UB!hc*YO(>$E{N4Cp^VSmC~KC8JmT2W4( zF>l6Or>@wLuP3On_(x;!x4x~AZ*5Ds`s{^!K)T#rGZ#^#xsA!0#S_{(EbtNTR#h=w zC*1bu3%bqq!ENnB&gg~g174Y|<_6VK)!V+BYi|uVp=Era4kisDpg4=1=F>V?GuJ%t z(7H9A(EbX&&Ds|e!+yZXnw^14vnBC4zZvc)^nQ1#jS|6bu7iuk~<77<3unI4({SMunSYgAiDwnjSSY?CYLX>(hRYvjE#@*r}M`k+w7&kWDA>LV3 zSy`cUl3<9)DmtKJ0mA4E^K;IFNT9{a?v~R#BzhvG84SCQF9{5`VLxDPha2!$LFsR5 zTHA6{@J-0)b(FO=2b|A|5c_>XKPX3h+iQUJ^m-h z)leO*uKCe=!6dMNFGnH~f%zcNwovx*T1e2Q!A?Czs}p8s-~-9?bGQVur@tcofVKsw z6TX73gGK^fEy@yidO+GK)JB2LjAOeA*7hsBvbvOsxKEnibShh$t3ujqwYx#{9wL*J zsXqIKODAoLbQ6`^&|!@^6h7#%>kmLr){%C=D(4x1VYef|zM5i-W! zQxC1DLUXcnDmx(xopz>5^p|GcJtro_?}mQBYUj#&zfWuX!Gxup^5p^!C2l+En8|O? ztPHae<^yuOkiR?mhTTE531L5=4nNd}oUJ1afeD$r1V-GzTQ;YdC@?1FoGw{ime0l0 zQ=W*c@Fi};XiqgES;hDq(D*d_Jn@zKW3&%(rVDT$m0d0&kLx|vPu zgrnTDiM|U5^VkbixuXQNykKk!NONp?w)9;-ze7TG!acxFd9%f+h1BBTFnL7OWZFqJ znNEYIyYb@19kR1hh~KTJb$ z^{PFBS2Il=Xh+(1uexJnU>TFd?Hi>=fS}(&H62lUn|}5}LPW zWlSh`U}bfrn;9EH)__%~k!vbC$~_TXLFRGSVCHxL32ymlR-)U6F5y6(4y2Y@Sa`#c z3Hu!;hYIs3<>-cKHX(szzCIupR4To4*s)Y5Fl0r#vD_QHGAg^hJwbF$N=N(b{ba^K za}M3bs|#{dui~_R{oW(RCNQB(H+n*+r%+u|ou4yq?QEvP4O?I6Qe~Lux0xeUxBgU2 zE?LU&F2GHdUrfTNu+fV)Z^Cr{w*wm7ch0stN;bffkV3X9snHw6fsL@m?lC2EJ(IN) z5~`Eh-3u`;SVdFj$NW?7zr0IjcpzY0~SZ3N|*eQ&$R|jOjs#NN7lwnwjxX$<7NPmYIAt6~U zd)6kHsZ(Fm9+_|;Q0t!d$aLfmi5K{D%X{&jK5^FYXx#^FtzNSgd&4C=Z;0PvGOB$Z z-E5E0$4STgxFH-L5qg)|^TZ^0!+SH*a&kgwJ`Tjh7G^g>_iJxXH(}RPcP|Fw()A%aku>%dQ@wTZ)ey&Y>*qmSM!v@hT2A`SH|%=Oc)2j zt6%Pr%`JgT7cX)7Vk`A->>dy{A+{Rha6?527rW?Fvbfnv>*`3t5EuRxo5W9be zoScvujMOP-wAIv_0QU>3B%F1B3M!Q$?}W{Ok+q^|Eu^_xS#~M|_ODFwULh(-rR$A! z#~9h|7_d76El55b-+;8}$+rWd3H3^{4dn(kZm8NG-QEcHjb{6i-7n(59lTq zTUr0hGL8vY*L-c`zM!WDh12nJE?tbbD7Pd1g*fM`s2}pzjK5^vF_OYDgtWDYHhokuc9r!6WO1H|yj3ZsI(_(4H24QvlfnDCf5hlNUGPU#Zfy&wQ0~GZ=mgHJ&Hj9zU@#` zqTmC*w_$jN>Xbg^s5CMaJq~!~aLT9M)mJNCnjuS_<1uxZ`7efzUtcTw#4>%$B)a3;! z$NylSU5H5cJf#U)QG9`#3W$5z!`H4!@ab4p11fDn=h{G@Ag*dZHl*&lmi>g$+Z~s~ z{fFM^afbFzZ}hyu99w}(Z!G(_2HA5JRpp7eN<~^NJqs=tskqJbgvpdw5LR+tJLkH! zwk43VE~KQnnS)GuHT)O*7qCR;@qpR-=mwA_+ecDlr^m|ft(13&l?|-t0G%L%363Hs zV%bhnp2w=*@BP{b*5p2*a}3$(!e#fCN)zIR&@4Hmafg~#sPv>^w@=94jHZiR(0iVt zuJ9bqmUR{rFy1QTYpHjrGbVL6`ZS%+_u+n`KbRoPd^GvvPz_!~(gC&V*4MH+*?mI- z<)kLS)aO7;OZM^X_-&mS5+OEi6zZ=3#64_@Rpx}g z#SV3kco}`0(6@LEp~}JUCo>1smO!PORy*Rg3dFkzck{YY+Wnqt#L0jc*6}zlknY2A ziL5w6bp}sQAKoXjok81Gn=^hgw_jgymi5BTRA4l20q0U#YwLg-c4SQ>)}x4OA4I{U z_J+-c%}n+ckMY(!61H1*KqqTZyR3)s*51d&g-+=F74AK~nF3_Ay_H~I0MrpmiLEU| zBviH4C?6=N>X1AWd0Lfjl!kcLE;mfIPMc#;TxD3za&?Dgct9c>3hSu@>5l5|sJgk2 z3tGY!Uxwve8v6BcTX zbd~M$IyS_+nPw12ny1fearD=ME>WB{$FH8RYmk=c1JR9Oo-J6qNGL)=Ugx~Sl!5!2 z!@fqcIDfEb+M^+k<=xOG9ldA$J^=?35Mz-Z@RrSLK25%pVjcm|P}5WCobHXeAi{vo z@UaM#m0y$K%mM?J0M#qhD+_yclb-Lrfu&zRAbY1GY<79Nr6@J(MeEut9!qpo(Y#tI zf%#y;+FGq)wfoyazvd10Cp5%~u(^ug%os8tL1XxW+L^z`7D6^u3v7kO4MfX?ehEQ&gptR?Eh946W6@vW<-|fH%n}+W@xJ_tAKuRNXW-ABi zKr;y^fq0%|d*F#~dXFOUH!v^u5fm{p+bev3gG`mAQY|YRNyt%Czh<*A^aVW;61W<84{kbO1rseuLn(XwT@;JYI@ zzfIj&xf~``ImcRxjGbK3b)fCW{W`VI7E1DxyERf_Pe?pL_L&jGj=upW>k8M7UFa&7 zYLcrP&;;kdZOLJSoF#H#e@Z?V8sb!*2NGJFGod?St+khX`D4r#+M(P=KG5IV(0&hO zxEXeX%htin9Zs0u>Dh>~dqSL?x&oy12Q(+8jt5DCPF-_etHv#_V7Eg|uhQ(1Foq~r z@Pb|lC3U7zlrs@>5}bvl*g0c&hZ;qwGu?#UQImw#l%LS&`k;PHB!VWwwp&-_9S33I`GZl4^#|w zrRRV*3ACM*i+<$|>Recii`!)&afN%`!5x-)d!aci>GrR-UM8=O$|PhVHBf06#M}$> zW1HJYD{V3J@rG?rYsWuy&u{bj_&qt-dBIGCfmn*R$J~=(LT3dhG;RVF)ywW^OoBU0 z>-o4lh=jbfV&{3nEMP&U>-Bq9-W15BB&}a7eWCew0-yGV{8$%|U!jY>>=D9Nwhn#g z(gdo>Iy@ofLF#T$e_F@hupf4AVUM_ht<#_J+7M>|0$mdqJs|y=DI zl7QUgTX*9QX`6-fJuQQTTnJ>To{&nAy2h9|d3;Z4MY;p$1+fI8X$}lv4k9EZCJ`9b z7IeImy84}W^O%qz5bRHw6(*%`c9!yCceD92mdzXuP35v`$Oj8L!+UHMZ(jM8aC^dE za*=&lRo0IsDnUYGwhm~`*+6%v%f7P`S-yf2(V-3aYeTKptpTsyG6AdHY=o|_?zaoX z1?OzItP?qb*evPvh4+A(bGT8pzm$+2zvOjkiZ+NASS<~20B1pwJlga~psOSo2i$6p zL+`@|vNNzwbx@BaGy;gYCyWJmr`&2Ve7=haPwo@^h??U5x!8AD==mDVssP6IXR(o52zIG$ZmV;J}gveMmM~& zIqYdJ{@U~+S0nuS8Us(m-=KW}=mQD;Tp!AW)nyM@E9!Mgi@h0NwuK|C`FehA>r!rS ziH7VIWL3@$qb7`J{{o|&Z?UiMQ>Wd=;=ss zaGTcyWJTC7SDmnGX+9keZRsvzK45dTt)Om;^qQvwy)%7jnT*z&RCXY4J2=-W{mt?; zKh|t+X#4^8iSM~0N|z@gu1;X+3u@im-?+-i=}d4la!1?^8cFsP1QpaeDBL&$;=6{lTf#Vz)jd{H&)quv2V!9lNZvg zUgX+u5^9@H$XO++bdu&g$NNc09FBFYR^fu*8W4YZOV^ntVRYfa^Juo9rVr}sV{>~| z&k!Np!4dLQny00N%a-xjeT0ow1%|w!eh=K+5z?xW!1?|f%36bfr`6eethj? zGpiBU-F`377T~>mQ%vjzi7@I!*=`O|_JUQ_O9or2UP>W7>s_!vA?I@|Y&Ac_cK%rV z^nqNffrw*Q+1`+x-|m_x?E}x7G16pcrnz=s!_G#(* z_Q}^~cPv&%!w7&b8E z4Y@+qg|VmxyFnNe{IOpkp-!mYJkekKLmM^$gCX}5(ZQv4X7foYax1PYd@_p^wGkqP zwRDhuDT)Mc6$tkMziA^<86;JN#zGe*A?5rth2^~*Cvb8QT5FA{}*xh+-%R^`nMYO?{YtDjg>g6~Hq3XgJ3<-_MvRN3>=Q-yyhSaUSqt2G!}9^7m}e%WHV^^bUJiCA=`Vn!=85p_&$DwTL@Cb7mTWJGXz2>5bO5@b(DU={8$IydD>nwhDmPs zmc7FCJZ0tfDphY=@(rh`en7@bb2{x%_LY@#4~k;m=AV4F9m2d6w;#Vk4Q;ZuO0mtB zXAvrH!+bq;;4GqrKCgm#>7&vQNRraI!*Z(B;njrk^bY7&a;a2Fr8|^ zj-tanmEfcnRdV}1Ia_c$v~tr3v1@d0rbV8>Hz6j=>YVyh z7mQ|32cgczo6udJC81vQ3w+l_gxU>&up3+@fz5RhcftHvrV>!6L&I(_B7x#lnHN}D zwUHdZVTcNMyT}Q(@5tI+#4QOX;H)V8f>F)beW*35oNJ=OFJkl z{et;1r)3Ib$Q}0iIc6bYzeCUPwb*)ZlH!~~P_X1U><5gd+jQuO%G^TSsM*v&Q=v2E zqKwPz0+W(oV6thwR&UQR`h83;>>K857x1L6LUH#3I1e`}{0Zsw5(&SI?0)T4Oi|^4 zY10~^;nvl&k&ogVCZF&9smpYDn}O_8`zLfrRM@H?qbMeLy$+gRFsfy;Ep=IIuU?WJ zCqVWSI@z&*cWChhRq&{OAcq~885)~WLx?6!r?_A=^YFU^&ttI6$f33qgTh1I;VWw|*@0k=!T&US#wS>Vn{*B($@ z%S73MyHf`mEdLby}^UWO6~LOmH{;&QE_5coL5n zcf$I7hWr)IBTnp=r?1f+63*ojCx4yYtMm)$Cp1t1b$y=bAUOHv{!L?tHyC61Jslge z4H>c-IgwXbNt^H$H-$!&m$}KT-^{+#g*sGy(b}2~xA91)lH@)h*Fvk-C(4)opHU%) zN?R?X&mA)Mblmi2HrXAFs9k-4x(qk>e6SZRP|R_E6(NlOPM-m?@Vs>tWe%(#mOrr zG%zKxU`I4dqM7+|LJIr*+5_Q6E9!InPwKSJQx0hIQwMax8g?&kt88CmFd;pVyIL!5 zL60LyrQMc2(PJ7^;wH4VI{6!R44R8q_;m(6wR7|^qci?(Sf|kk0V>^VJY`QegZ&9_ zy{haSW{}-GL7Y?a5?h;GPQ3pD>rNYlo$u-MeBRbw7i59@gkEYhtj1RSDNPYS^n~o5 zh@@Et!2r~^_Vz2;59o9rVcy{~`K|%TO)9X{E)}=n2g?A!xhxubo*J~6BK(O~k8hxh z`o}Nw;|#Tdk+ooL2d2G>WSFPEr@jv8AZ6RB#iiZ18__MyY`9J{uplaLOjYB4S8-W%1YGt{7LefH5!Cpx0UkXB?($eOYns49=@5=GGT_TxZI>J zdneo*Qg%}5vSs%=#&3?YO<#S1WK-%Y@efx`NJvPTM)rhxhuu?mtEqSg8|-e9OB3ff z(G9Xd8tQn6+)C4gu0K5Chxg-PXME!_%8+0kaFD<-evs6K;<^Iqqhu7a9teB?EyY*l zqv8_N4k0_{c|@Vi2hs>g9Ko)#i!rH6c9s1ObrPU5`d1I%yE1`#3HuXzL>j7hEDt;P zWXf(-S?M&e2Tb{T&Ev4QLVRf_><8o#0;SicAkG`ZNpJ=u`vG-Lpt|5u=|2>`36oWz z;uds|t#FrOUhXvk1Bdhzw%oj#4CypgPy6w``#A?HZbO5j!0{4cH}XJJOmOfQsH{JG z@Qw#c!q}k~n2dQV(&*yw40|TF2!heIoyETo4f4B~i% zFuP>?_l9k_UY!+j-kQt+_CbQf^PDCqRJR;10RGd@6vmLXj2#uI0n_JSG*0Q&ouqPN z?jSP`8IXVmzrp5j4$qsR_H$2AC%YS> z+M_s>&Ted-bdQ*%c)oCCox2>F1zSx~zb+RyC*Bt*GaXd{E#D3k2YT1lY$NBV{+ z#~x;bZBkQE?A6tM1*4qg1I9XfFk`qq3jnusDY-A0kBz`fZIB6i9;zjQ-<17;E)dI} zXT_D~{1}{4eT6!!QkO2Na}q2>6t@M4CYNPiypEI*b$j5wBg$*njXHN{1n=i zBcKVskNAN6l2ocjYI`L=P5&|<3~Va$KtJtje;DnmbZxv_5R%21@Qu>9ctv5uc43(SvU3XIU1G;vMu#a4!tt#o--u@WH9>^%B%$;_?JZ1$CQ09%A zM<>i46lr&Z>{vsBUHb(YLFbO@y3CM0iV)_=+9;o9W6E8!(>8D#6rUcbYOq(UWgSlu z?iR-rx$=P|AE0VewUe3H|6%une0fz*(}12SEexYTyKByO1; z=qm7v_RJC7IB>0iH#T7hPl>w3D0#ui_Mz?3%o#oO41KPOKcMR#QgK07G1XqJQhK14 z>1>Ok#C?OwmS~R&`tOF?%V*~=WN-AB?1IH_Fc#z=HC#n9#k3DN?(nsxbcZ6J6D+qI zIZc>mc0wEhsW=#u%X(Bsiji&PJs$@dwiS)nY9v2>->WU;1}2*Wuj;Aj?7HZ0wZ4q4 zD{m_3gdA3eIw2LrXGaJLm|uVGg!m}3BXe>hety1_JYWVlIAJ_$X-50!Vj%V zO-|_i6l(X0OE;8A!uWbX#cf!J-hr+8biD$4?lti119s-%-Bo4(;$T|XTSdTrJy6@v zkKt~Yo%fYPr{dN9fOMD&+t#DS>e8d^o&t%u!kYmY-5s@?=kyx9$5H&zEBX1zX z0YY4c$%;Wm62^ajqAQ!jY`_=IsH^7NKCh-D{DHD^NFhup4NW>Hp=+m58dO>+<;9%4 zKV+-20OLSvdY(|dl)NkzZ8out@nCGi(idzD&-LZWhKnGm-5zFdxS=bHWp3FsHE)i+ z)s*sbGgVs36Ta8QHu%)9xsJ@@Z<4r`O7`7+d{*5ATqfCp5w~ES>)C9k zI0H?vCnE9!PyL9&D}AQ_F>5@+($blFBmZM zI`)gzZGFcM$$Y@?R^}XsQ<%#?=DUiYkU?MSIR5TdNfo7O1*HaTcZljQTLG3hR6~y^Ae$3sm)~6GKJFM-P2|CrS9lN+s*y^;gj4n0q-b88Zp^E(aYclc# zmHahv1}i^3zMV0M+>x#06bvvKr64RPHo+ug6W?}KG~GV~ z*NGag_LND>lz~ZE;UyOxHx_E~PP?=Wnh-<&0(b2sI^-Squ`2G=Zx6_hcru+LVlUtf z3k$ZVJHcrg5h6=2$FNMqY}uJ?Q=|g6rFffCn09(Vo)c`5jd1VSAlq(Jun1q^R=v7- zl3Ml-1#Iu@XgnR1!n7?6a*L;sfvO*W)*5#%#@4?BdMp#sn|sxDJAr4gB_{&R$E|^F z^0LdrubU5Gg$?wy5Y!0)yIVIHgJP~vwDLH4cE1<-*m>?4#M))Qjb01UV&HXW?R?z+ zk(-bFC3nq8*R8Yo!aWuY+`7~62>F0*87MO4>7E`H%QY8>%Yh*hGTHqFM$`Sd?{52f z{8PBOef|z>|2`*144w9=>eEaQ_}O{aF5pjYB9Oa<1ZqZ;Enjx_m(aTzaS7H0s$+V{ zjI@&x?&ykY3u3wQeLW?2)22EbL;D4WeI7xln24N5w*;gEqujt8Xh3rYtkJG(at*q{ zen7WvRQHvcG|jnugr9R0BOKYv@e6D(`I?wE?Cn#zEnD`skqs#{h3#78*~>~#(LNE! zf0EHzMWTB*+HUmC_VohOAU+BIOjcUs=r6YsSIT9f8c?%YX759iK9g09`8eaW3_pKB zj3)PPnGt$|-)lviv$&)$&@<_osfxT1MY%9>*v~J7@(V#v?x(>x)AQA8SfS@GVap22^P}}s+Vuau4bI* zPc7hIg?pw`1G8hvI#`PQBL~RN-Dj5Z30tM4whoQv!j91P!)$m26D3Kpb+9NzT0IB7 z%_%lj>q-UGNLqS!!m2+$`KYhwQK01GfGp)AYVLKkRN4!2KKvJ0gW%N>qey)<@0v(; z)mJN|F{H@; z_K4fTT00Gdy+YSGt(!GKCVp(fcs~s`ds#)h+p5ZHJ;7;j7j50@U?7h>ACi$1PGF2X zEa&^KC+5*_be#po4UM@VYCj$@aF4YgChn zzF-u)6?!#kGqydn5@xyKJMlw)%m|+4()Q$@R3XD(KhORv5@IWu_|+lUuoXIe405g1 zY9JSEq4l@sK0k}44FcPhLVBXMJnFPLvV*^h*EVCdq!wMN`1dgMKCFzf`BLP)jU=BIJ z&LF4k+0RIV?<7CqP$L`*G28~L{k7WiuLC+vkgeYIjCdKRZHW^Dw!_vg3;^hK;_nNg4>{Ldz21^3Hhn-`fAKU z{o##9FNa`R`31=b%+?m$?CAAna9CX5{DRRdJ%G~R;UIUj@5-WwJfY((+=OA94Ff$S z5KM`*3r4e)K2(}h*?lTY_OVe1OdMZoPQ{b6+>T>HReynLXMbm{hhfUVCG1mQ7i`OL zehYQk;+$J2FEb1s@K!%nJ^Qh#ULqc?udlK!JDY%xVLxCeOh0TMD!cD~ z$-Z=X!mD6Ly3g}a(B70iO}qOP@;IjLl{tX)HD=ak(meZXIk0LywRNA6hc>On-J~+= zS?R5Y0~)WB{hAGqX`8t|mM-E3+QZQd`#qKJR9{tVAikfF5(<^M^RP#l_A4!-#jwy- zDrL@QCUdgJ)ErGPp}sz_IW6>Dxj7jNkL}XMc8^yp@q|%rULdB>eaJ=bmXfc$T*!wE zf>t-p;SV=6)*77oAG3Q{O#pG=~6 z+ft4QBQIkKUA~=q!O?7e>^W3^ybBkW*b~;Y&B^GLQFJv!s>WGYRogJuW>0r#8(S8C z;qB-=$isnt$xt=9a9(CY+fj~D-k|#yfHO(N?sWw9(2|Oru-jqgepH5I_hRyWdcX^6 z2XJ9QRUC|~TM9fdnl0G!e;=C)y%s-DgZuRzqM4=u&Bu`-!H5S5IC#-q%X5Re&s5&D zVZ^mlczslKd%_>r%wTUz)8|S3*?8qXpeyBaZ`E^ji-c4P?Cnn*&Tq{=1axs$2s>VN zbh$$^*2eONRce)H3x(|MQQ1Oq!K>MpJ6jDY2*%>JpWK^^GA3it936BwLjKjCx(;%dWQ|IG{C!+yec zvfYDoMv|P4E-sDS&@eCAiQ}RQgKEoZn(tVm1G#7h^RAPu>6o*2-~)CC8?1Py7bGB{onujKarokU$knz?C-nhn2*--#0Bf0 zbu6FTy(zp-6mucdD{9_chUxD+JykYYG;bF?RVlmsuGN1BseL`mgmGLi7;(7>4=PjM zmEB||?;2XqM!fubN;YkIu5y%I6Tc!H7i>Kk_G3%^wbIpTZjMO$^#P;#H&eS&#lRDv zW6x5n2khj+OHe20MoVE|!{~<1XyIxC9>%*f-yt1mWKZD7ZkJ*}Hp1=@&47%>2=gqn zs_=c=)OYOIE9|JsNycOpy0b&e$wK}GM!Hd!k&epcEqkUOm$(yl&V^kY?oNa_s8VT9_-Us_ z7QWi((pZDhP&4Y;Lg>I|be2a6v6Q_5fG!DBrpeewU1@TI&M>#i*fkSj`U%R$@$;wL zHY(i3k_+R|4NDQa4dMnHIAoi}WVC^NXX|nw=xQug#oZbC?GDlKucg@5!38U=rS{JB zpx^6Y@qO3I`TBqn?%DPEwFcmAHR@(4fR7jSAv584KAafruYF_=b%+14t)DSG#YTN1 zT&$n%=VbhVAAh1`t)Mi_uUgX-iVUT1lx8+h?V;st$?$4Sl|Eq$&{@gk(K#*EH|{~M z`?m@ zgb2ekDSK|EZp1#i>xJK7Y|lIis;;{DM%-KM59mqJwDZZRIOUdyrQZYdu@M)c-U+f; zW>*ywy0!@_k+hl>LBuMo{qthP{>Kea-##l-q_KntrI_mP>q8 zgHbK@1A5?3-Kp`ibIE|^HVt4Fs#*a~CS=`haTb;g_FKJA$hncQvq7Vh-}P0Htks15 zfRicOM!9vRVb)oOd83%6wS2aCb6+FO{D90S>@uLWRMDSZOXc~bO4~4Be>rhAvN+ti z&Jo<+f1p;Cq2r2jA;w7Fn2IONEd@}g;>lHKf_dH7Ol}xq6A7Aq*wP!eup6dKp3wDp ze;fZ`vRQABvx?Pi!)8-v#Oz$g(addq{L~lAC<-&qAhdRpuc=F`8jPt7`H8f@5c$0- z;>x25W8y9tz4Y0j&La-|m`_M2p}&1XTB_7to4J1q>6kWkxnNYw?Kn_zM@N}%hH+#I z`vLW0t^6#+nR9>6uyPyi0qaJ%?Y_c2-FV}^U{o7XUAIB@oZ-$L{lCGuLn~&@s94oF zNu4orp$_xmy;j}V0`+)eCp3ORf9YL&@e-o9``qg^JfZU^I{tRt^v%Iq6hB_5df9Ry zF7wmjv6ho8S8xm`H)+&DH1a_S{L~Znq=$8L!B%Bg2>jV8?RrAF_Fnb_cAUn?pEk=H zrkZ_`jYxmOg_iK#ybkwt?>)bt$oWj z6R5M~G;s#myKBNgQyT37TdF>aK5e|aus-N_zeGr6Z%_5-%D=$lm;uV;cimm|x*VSjA~!Kj7@ z5_THOuunC_L5KZ-oxvE*9`-RZ+*qUPKFH0l=L%%tdu^X$~n?tAXIL-_v&mm@e`>5JpmO21%! z%su8P<36B~uD^hG_6)e6Xq>gLSP&XlH6b>|C2(+mkDKUP{V%Xf``=x&l0F-6I2IT7 z4f}OXgib{@%S|iV+7{{o6AOgOR5Y3=8%H&JeX*TkdbhMsUn4;@Zb^@Gk{X`_f%0B#Z+QPxS?Lu0CemD$2O) zF=IuaaI8%u#{O0{{WpqVaOxn<;p&9BDww~?O#>(lR9459#P_2a^mK;u>10lk(Ab`Ki$=LmBda`rTw z?1_3^@Ka@g+ab*ZI3(c3M!KW#4JLf;XjtJnR}R_b285r`)(5o<=F%IR^u~&?d#u@< z478&Gw}152IDb}y{rU-S1*0RPZA>e3BQ_4{GXM}c5xGA#|kTL!8yx67db%BD+wkw^QR6tPTvw&Q;ex$eU`z=839oEc@02ljsL?B$?{A~ET-la^kn52TsOH@8HZvn{ zUnZ4pECG(c@s8@jJanc!maFR%xiT@r4?%MLiDx57`T!;7jDo8-=F+K~yF zNC&Fhf^V8#VXX^vW9lR%0Qd?WZzvfi5Ti_Q-t(aXTi+iyEAVw7IkRm737xlOy}lv| zt)~OBFcRJBt@x4ywaVuiDqrANHJxXdD7ZKQR$E&TP-z#$Ft$>wiw%%#oftt{$=NGR zLdFR0_i@^PgGTK5d`us7CqX2*QHdXafhmYJGoS@xg=EjXBe2R@i9n5!!dBMfCX$fw zq4a*eAhSr==Ndo1cQ3fgR$AM@LM}w}S5w)qoDV zP{)5|$K4d7J@`aC>=0&*vWm0)!{r>lW-NWeQtkd^YnlV>8UTycF8KoET~I9S)Ts0v zzak+cHo7?5xx*Ct8?B)16bkPPWWGVZ223WS$XtP9u60xx{qT-dOi;&B^}3dPo;di4oMIz-0w3N<6V)656n(&NZ62+3x&*=u5R*W< z>=%q;nW_3{M(4d=^b}RRLQwVty74DneX^-@Pw(Wi3z;{{r@3hfBEv$<#1qJH=Nu2* zCv-{;wF}G^e`P;~IiyO`_EzF^Soh$7`E(QGt zm5wLP@y_|)F|U_JhW!bRJ2_5a1%|x?uCd~p))y3mpN;7sbyxFX{3c}j9kSWk6^~MjNFd=BDjh#UsM~V$l5qHC+UJ%E<(!Jl4&*j?hq~4)*0u{e% zlyPFF15KY&nH~P4u}i&lUq2Ywh5d%j>abtByLe`L8danp&|zL`MhcbfFvDq!X7z&2 zstW}^;1lBtyJr+lZwG$E4>tiq{T1&P`iBuRelSAyhPeYlWzycDJGApP{rD$}W<$f7 zZz(z_m)Su`<{id@`bg1Y&vl&qKqMFL3ngt1p+l=%CRuC20LOS9?yupmST)$QI|X)h zll_3X&Kqi@QPAgyzxa+srTxJj>Ws&Rm**00Iv#{vF!^lO`upiLl z8>YrnSfvta214L&sU$2S(k;|My-U15Fi~y==Za1^^vp>BRN8`GBN@1=AXlJ3pNt>S zoyM@wOQ?urby;!0bj1ooADHWmq%O-JR{NNhI0Uc_Xu1W3S z;twR`ht4Sj759LlV!$a?*~^_t--hz3RKdJVuORx@v4DF#ga= zXqCF{$mHz>7jkbCsc(xqKhTTh_Uw@Kf!TIP1vNAR-TODhRju=rg?#)$Vk56GXU`=+ z=!Tw9>(Iu5uW!?11u9+8<7!`^niAh69OinVKEWMs@A5$J3#RGloa}1dZMd9QcU$Ev29k}4;;6Uh?T9-< zm86f`Jm$o*Khz2wFlQy9UMA;Vt3R51Nl_{LAU)4U@~cbwOcWa)|wTp#~A~$VPCnuh>?P zt`IEfSFR?N{i5I)A9`^Y7cQ8IpGz;53^|2AJ#n~yEZBLYq3K~y^27zm0`|`Q86^O5 zls4^)50}}qwb1pyI#giZ^27Ah1LnjJ?3eXt;?^cs>ot%1cs9q+#oWW*Wm11YY1NtG z{SDhOSJ%t7AS#ohjkpf~3+Da?+sVrL{NNs^@h<<-ooHG#nMe8ycEE6(gN1RK_1rb` zB~;iaMK$b}EymY|N8$}l5SMYJyq}FY{>i|{hJ|{M3wr;xlDcsNVH4Oh)~f9P0@vsS zIhxJrG~C+tCQkqInab+&(GkZZ>Cz9#Nzjzp%$nE$ELKZC<8-%UXE{v`_GUx?y%+%lb*ZhzNS>VRqPEUxR#CtUGNu5cy&)tZfqA2@7 z`i>A=C?-yi&oPakfgu}$5hhO)Lk8!Rr|YVr9>^Q-x;$(aN!%!-E5a{`TBra!!HE`# z?-GkCp=j;B<_|cU+(n{ohEDEeCtkF{nmK-~aE=^B+VqLMRzl)|F6=0asot=6%*k;P zh3}C2bRuj9VzZL!Gxi_VpO9j3eoow~`)I6?eCY>~n))J0J@Fio-8gP^l+64_6P zY{pxu(`fm@F6HZ8Q|9!QC$z)#DKDkNZmb*jSiLV`ge~8c>Nm_`#Lhy0LB>IeT@Ql% z*)EcI(F;}WhEdI3G1X-rKgwxX*>#Rk4U_A)Iy|n33D~>aeP*l;6)5+DAB||b`>Mio z8;zHX>lcvPwUisOc%U#}r5;`2^M@Ek&uVTkmmWc#VN*Jl#EHHsmt1WAfR04K39-md zd*R?){GS*6YY&Aw2AyK=Rh}J%150mKvcdp6i>_0rhDG@y-Jd!=VDH8?7%DsM&vHgP zW9VN%{XD3|nugs0aCbvlLiG8Nzt4%YV%afRQIPGb2j%k-m{1p4_Tc73DT z2DhhGc{(q}+DAg>*(+}u0@`$xBkHcat?bGe$^Fjc3T7aJRpY!L%jybWE6H% zwL$#pJR&ZNL+KVVE`uj@c|&OA;9v zuw#kWZC06;le&UmAx+irYC5cdVeUw=;A})RmRfdKSLjjHii#Y_7j+?GWMy_H5biY( zIiOcG*=Wb0F>C3PYwp4%H87enSytFk=Wv2QXig~*3o5$voXw}u)=f6r0k810L|$ITVurU%H0XRS4%2; zM~?9%y<+8Dh^nYxGxhU+)Gy%JV9b27VmTm1{)8lz0#%umm<%As@4R4S1ZY7<-MYgHf^qSU9D_Hi$ zYEVl<-^!Wm2rigm6u*D1Ma?CS*;EuoGNfHFL(1%}mYh$m0=!U{qI3~GKECSRho<}i z{Zf@XjH~3yqow$~55`{Wh`V7@`>K`Mx~BEB*FMu8f;EN+Aoo)~j|E~MX6^{7wUCXij1f1(sK7t@ulHS}=QKX88b7_8A9QmGd|XPQ3m8eZlHYd-b19kJIZylSnEshZ|6)V{*m0K)J_@?Y5*_JZ8wuWHk{ zWpAU)gW6xg6r$Ty=H?Q0`$41< ze+d3;7A^C6#+GuNH=^1a01-w?O4!W@gfghpseyKe@2-_d-(mI?!d}Iw zPNzP^U`U?Y)w(<&B`s_`5^3H%zz@mv3;FE30lH-_>~+N0rq>-vlU7{?6b{5c0)R(XV$6o7i2Jo zT8Buwu@RQ1jFf%>b)BI$v?*Q7z^bf1NTK2`*f5wOk5*`o`LIOH53(O{_CvbRUv^Fp zD6YpZF%7iA4N@{}2*A4E<%F72cP_NULKo(G zBAFGnfH5oJY(#;Y83#X%r9EI)DxqFOk--Tz)r@^KHt|5XwZI=&mq=XGLoF@AH&oX6 zx2oc>$7UkEr#Jj*-}LdhDZpIN31(qhZXFKE19Ps1eM{F^l=l&!JL1BAz{eIUs>e7= zPhre~6@RGhr@BKv5Cx7=!Aopv@7MB&;ReQVEU2eph_pktaguiTiESOQmZ44zK@z93 z^mdY{NOm#Za9$7pi@j45BM6Kt7z29b7Z5|Iur(V=FoO_!)_o?n@r3D|9_6WQ!UxKZ zOAoifgbU?*RMApoelYT{A}<)(b2uM57c?ZB`j|m}DN_@JD3mVf&Ln^FLzgOS~SA?8*xHk=x(vdripvIfQ}HovfBc)aT;&O;1Ki!&dH&_ ztzPJjpJzK%kg60hZjNI#U7a6Xn}Kd@$Z_?6&88c<)eX9?x{lQh!zZKyaU{pkdruvm zz#r`EftK2WzBm||3WlB=nsh`Rw_k7y*%hoR!;Y}0I5&trr04Bxyf#!E_Ri_EUjXU3 zP7=B?a$sJT1CGU4S?Ihb-oqlu#W1)kqYIj-{nKvi2X*WLm<^K}RLc<6>i zzk+E$>t-P~q&JBEX$Obh3$x7Wz~7BjIax8M?CG!X<;@*mK<;`@u{D?h`=9!K+57N@ z+3o4aT1)KHw;R(2Y|XF(6?Z|63$Qj-`uw1g`~o&B^Qfludf$fK!d`=YL5D%QLZef# z^BMaJBaqxXVi7&_i;naRDlQfDzvCDn+>Y{q^Z?;Z6QDPq|2y-&7xY>`*gqP5RM%wXgANhR zABb#Mm5OLuaL2WKsordVOsF9wx!L^D9bUc84Yz6e* z6XqL^D&w{#=?k_4y2G=&#|Yb6h8^n)`+|&QsfL-xb56iG9dt@o=_hpB0d<-H^!dS9 zne1L>3w_{RoUpFb;m|?{*52*&hFzGLC$SO70rzMZFE}t+9q2TTkLjN`tKR3q4{kM3 znG??aYSTqM0GOm~Xr8KAm3hMC&;PK6D`D$bb&Kg4T(!)c&2 z|LXqXMlN(`tc)^Pr46?E*Kf<`@HUa(g3X2;n> zT>I#{ouQ@KKEyiPD(wyxoWLu+Pc|+%ZzoOo(=u=>z+gb7rAT(@4HSO&YFOU5T0$>>ALF%35iFU6Ve_L_J{f!_A0xq3wNHT3MdM* zvR=+x-1BsB7XKk{5WiOc4o%0Q^M^`{hZdNR5B#gotu8BctF@Se!>mw#Z9$wv*>_l1VfkA`8QhqHI0ghicEE%kppN}#uAef@_9?i#u6-eA zL0Z7pC&H$4XP|pSU1sWoemWWL4VkV9C*KCstiT1^!LArp_U_vrT0tkAC;q18^7Z-z zS?MyPJMSvSzrsZBRx_xw4jO=Zj8KX~>TeeX23Lz0l=UZO*pCa!_ za>I1U*#I9+`UBpH?7!LreW^_Nv+M2iB%nV`hsKbGzQef**jpo8=xAwrg1w`E*yFS1GW){NbpQj?^7Ls(m39k{IjMOb9~# zx<3I44nt_R;`nvT)&+Vrx!Q-8z-8el^h9&p(;&JTK) zFZ*@b=VHHG`X47~(D_{GJIp?x2ejehe6K3)Ud5a);jaD7W8)eTRumx&pOyXM9pz z1Dn@yb-`NoyCB_(Y01#$ESUr1Sw}ZoT&u}d0;Nw!K4IOabq%beVcEyK1xB}l9%xe7 z*j|+l9?$7OM$TZaCh&UQw3{F5kN`8uUeIVg)N9Hx8zcWE-m7BRCsVhdvgIm@bz#$T zXt(Yh{S6zDGIfjPZ*9!2AC>KW91sSfO z(n$KT9H(XWLvx92LpC>zM~{1*=7BU07%R<_#B%2z<{QTJ0BHmjo}(F>9Eu6{6S@Zr zDs%U;yQ<0$8Z_AtXuF2k&?e+u3c(N50qdXnAf%dcyV z_+eTEF!TkT*=lrJ$pko@cRS9|alXHyPdq`zR#%xs!1+N>&5vn*9?-cOupW~?9?tjC$DCDfe7j&L!NLF=m3r+2jUtw;60d_p{2gfs7MZ3z5 zoFqVMgc;sn6hA-Y{;@awt?h$apA@?02<)+>Acb9Mh(tbGhB*cyy^0+0mlH3joss%& z52~VDTT50dFO)NVAVLV!Pg>nSsj!s60n-cSaX&=3+K3!|vHJ*&Y82 zQ~U$J8)&2QsPbtm8ex8*TgvWg(FWUAXzs)A9zxR(JB{c86H|oRD2n2Y81RFR)R!>A zDC3c?cMUr}pxisM73*Lt7^rBw*vX{qwiVeASmNsX*)0P%yBxx8=X^lz5Rg%? z!gGn9du+;nz#RHxaGX}oIHLF0AC&H9p(k`Ofl805^hEIR8n6JepU_cM=X;f6UhLrq z-2>QPP~qMRR^dj2_`xep>=CvCjF^S{F=Z8Jzyi+|;(ocDH)nJ+gF^LPRDJkAWAqLO|>*W;jKU#hulkAK|M zXEtHqA%;NWbY;jmH2z?CNN(=4*kEPhI*o7*s=AbWL%ClSTIX8`V_#tkP5-$tMH)!? zx3_xrS?e-~8mTSkH|b8=XA2OMKTST2M{X zZdMU`Le^YrRv>O@?7$oymh2)G%=>e@QE@+f}7Kss-L7X2l#dt%fzECOOX<4m+oSaJP z(iw`)wHK4BXk#s*r%&j>NY70;h+DAZT_4h^$VANRf@&^MDe9ZXt1JWo&4gIPMnaB^*K@aHd z*QmzyWcoAhU3NkR>CZd#?26QJaQyg3en>M9tZKG;VRPE09Dl$aG5wgL7yMJ|RWLk9 z81^X`%JT`!Jx-zygVetimlHd2e_+HIs4xeRKqiJjw}Cb1`WvBlFgRgHn!gl!+1c$H zadAq>8AH0M7sR;+dU|`YM|aI_N(MP$AILcfA<>pm22aW#n36@=9r~OJ)K6li!;Vky z5BNY~XSwzX8Dxalu*dKq9-IB&&?x>av?@I%=;8!oJi#-p)xwqObCaZf5V1DZHQpNPzhR8W#1~;E2AK{URo>9p3Eg?wj-M`ffyeO%hP+@0 zshX#5x$C198WD!t2Kt^s!t|VR`AypK(9F0$Gsy|Sp)4gj;>;(DT0e}37xXU{HsikstQT7ue z1?jU!3H<|S!5>CCP;obmtyu9eorrXe54U2O`h>}6Mn~CQ^g!GVlhxY@rwO`ms?6aX#92la^PopXvm-gGB~FN92OI-G zaYBj>&&`~SkpwF40ZYB>sO&Rk@?^a13(~NFvq{A&?^ugC118f(^d=uTYSDFa zeZi>aO`uSJUL(C*`aec-vJQZ;7kya6|0Du}u%t1(}GV4?F{ zE6a#`KIzvFtz2(QG`08Zl1JSL;j(_NqKc;pzhE3z-$otblQDXGq+PJ8 z)g@v<9rk~CFSrg0|F3_S3nv^duf#PC1L6bGPeqAvK#fc7okFtiz#$9@*E&V2cdChL z&9ENGB8HX#o>bfqu(6m8eG^ezIfxypzOycjsyo0gL+Mr=(q#k%(>05}Ngd>%0b1Yp zq7bly^Z&}NF%sixz7g9`plQvck-J^Rcq#Jk$ohbmwLqwDJpubTbCHr33ak75BG#)2 zCE{tpdZLs`#yE*~1+M}6XL;Qy32k1`VjiS6rz-MB6_Xu75?R4FDJ`HVf{N17IWv-W z3Ds#cyk5ZlLY_lb4m-q}Gv}A86tPd>`%hA6UE$QKdiO&b+YVU#k(5PozUXmqaXFvB z0)_HH|7vwrQ#b#U&g;sdf-E{OLKIPEvzS(<9=ggcV7qRL4*MNX3Gcpzlyu5k~J zJ_o{OkjBDP@;U9$Yuo(>7m+1pkSDE0lzz)ZLqaLE#r)b)^5F)b7PQVYmBcbWVx5u{ z`H^-R?g=gXA9q^SkG7XOYe{o5x2)eM!YDg8b;t=FymPn4qj&4#%0 z;tfh|zx3sp2bu~&KzUnu^U)ndx7FF*qox?#8C2boUWByx%VxycG`Q_|fs|WYx+4pG z-U$j{&C(89q;A(QXRF572~Fo{pzSNF`Rz7wsVy8g&%Ke;2s_hcpRK4$GD-BQog6fl zag8e;gq9cA65a!~VbR&93J7ArYcqk@xa1SHqE~|*d+gaz<+g!4UFxK8y%9m`D6pZAY1^yMVx%IeqpK#%lnXUu1O-}Ym|CbF z_CQ@)N~}=V zA-=JAq4-qpM)?9eP56RG_?j&z-h8n> zka4gFD#-Eyg2-i*V;Wr))bL-3H!_nIw^KnS-fT22kf(M%-1N~e0=B!YzIt_OLF#w$xT}sn8ZMHt*dSI z&6wgN;9?A%)E(8&AaXgat!Bw+tGqjM0!+26TB-lWWd&i~5f2>sNs6pBIIeRWyoZfK zt(RYW>$bZ!u}CYpCbX7004JWw2)E80Mn zkhq((2u|$K%PJMU%J8RNDL6}AicaDSCX=&el}vJEB5GrmRr`R;zOl;(Yl1Es&YZB(i5zTd=0& z4pqCoQ{9;CM{~|}Jz>Wfx6DipRh%PS*bg{8|1R+q+H~Y8&_V91=1c!B`#L`UTAn-M z)aEQ~&|m6!xRFmyUN9zdZs3sK4&z(HVQ+W3U|V#z+QY5;o(?fV&K-L1j(suSozgzK zC}mS0So%N*eAriYeoUOJitmVXtTtLhW-V|pO5_JiOVKZwj=Ofv8T$|W&lSNY(5JWs z8`J!m$w|aD_~_-2|37$X-Y~U+yyO$HW^BQR`hQ&E!ileYwj|PP8ZO8sN9uOHZMio!);1tD6_%3_Jc5()0F>sdtEkP#J-TUH?gcb)*vqd&064cWO@c z9wGl(s_)P%AE3@zKCya5vwd_7$dx0BL@W)-hpaCula?2ZHIFMKs7cm6yZ;Zo{deHaEDc|yaYk`tIv1Kf6mGDe zG7RgCTIq2*-H+mQopD&ZaG6UP{EQPE1Y^F#KJ99np_MmkRF4y~3{C2L9mt6w7>lj6 z9XX;%yas0n8t^!@oIHLY?^FZM5iw-BeB=))>@Q%6t3Wt%pBC#G7!!Br#>YU`J`?o!)DO6`J9eqgVwODl8C)ZAua8@&#w}=^~lI;z7xWTk!zRW-BC%8jNZlLr9 z9m<5vxyn9ndBzy_j170KHiLA_e<{MHo+;DxC$>B6@Hb6?`tihEW&1FaKV+ZEa&-B_tVq*Wt*hn^c(811p_uJQ7Nx9!_W*aXPf<`46^7fkwl)0w9`WuE~M z7;yu+Jtou{UfCC2b${`@A3Gt25n=jl)s8zk6lW%6&!y@Qm`{75z;IKdaJ%>s?j3SL zu(DRMx=TuChP5!CFs1Mt>sHyk=PG+gOZJ+3r`7{TZ_ZvXZZa%6j{dbXeZgE?kNu*{ zDV+WJ-c7_0nREo2`hv}e4|NWE`{*YlSyCU+nN%l}4AaJVP~j|lDlN}+P>8OAKA~d})TN5!BG~&URQ!Y~ zG4B|zY_DRKn^7m+J2d(#HERvh_2u$I*@0@7TY9DT%M|k{P6j2n2y=16jj;F9D6z#% zKbNehge*qjC!`*P9ZMmvZw>bj*+dvwGc}j z{+mLghgS8xWy*LlJ^2MwpPt4V_O_1S@iDmg35O2ph1?Ov>_9jJBtPI4@k8Eu`~HTh z0lT5Xz2K_c40T_@7UNv*1bbdIVRT3b4K$}0Mvj_X)a)rU15!? z03wP`pk6up0*$e=dgq-?exSF8-U?fgvvv`MWgT`bhoXmjN4Sa*y{3Mc37q)@PDEsD zwx2KszIKM8TWkL>jV zXO)KZxkg@b2P8{UXC_1IV8HN)(H)p_TTuH9b(*4$E$LT%zo6XsepMx7r?{E}OCE?D zrEIc4?DXWPDo;qO_c;2--eO)g?t@3tr#-lNUP!Z^a$&lhAKC(lNk?29T8kn5-H~|M z9Rd}%y2TDVRICsml~@Dft6iy6oK{j_Fd6sV_X@|~ml~gfcD|#gMHbcEu3_Qy`#kiDZZ^(+$NkKcnDkR7fkBh zAwVh4ILbZ74$=HTVat9(x)W5q_Q|PJ5OHnWffihb(eR?&te?j_ zEDk$fpX}3EatYZD@ew8V`2jwjXF>d-E%AglEvRTZ!gV~!%Jk>lVjo!5P$K!RBTClV zc)Za&s-H0R?L$wMo<4^-wlB+m!&a#o3w5zit&E?uDrrG&jSY2~-QUyRsE0`3;nnm; zm1!XD6RWw@M&@-t6qzW1{kQFbj;7=j>YdxHS2puX20ySqCHoDN+FK4~zuY3X?)bx4 zxf8a`eeR{28!m^v=RlEuz>1m@{BVY;=rJr8jAHIsmr6^jXoG)>p1yxT&r3^XoElA9 zEbMZde5RD#^ww;b9j0OL*WLaY`VK!GQ<2V<*k#WXw)`;T+zI=wYY_F4O_OKwh$rkX z7}eavFZJ?sK3VU`4`a9v=q%DtuY%F}$`3y(?t;mQE~?at2=nz?Y@JMVdce%bRAw^z zmjR6AEnwEVGgV1CHLGS}fBu-(81XJzkQ{Iavl zV}}QIvA5Pd{vP%d`f0X-C8r2SXMf13`2~zkw)c%LDRegWRrW$vj7F=diTdy+fdLYJ zNOO6^j)8OG8Ts_uD%kCzH^_Hv{ZeMO&8y-0k}Hhz?kGoVneF2){7*#rb|$G^T`Bht zby*A!tSn|~zz?Z=6me__tX|Fpyr-u<&RnI(eo$-C`-IKY47lj(L@~-#w+kk9A~8&} zuOf`2$`2Xkcm<-Z{DN(!ET2tn&fxHeWf_$@A(J1!O_jGcXVzVoGZT~@ORn?-=9O}#uSSqt!SlI@ zyJ2ho1LlEAsBWJ1;|Y8)xylgmhMEhg)Sc`+$e`-{Ky~a8)u7V+ z3|G|C@%e@%&)s{H59nM3c8XziVf9(zEQdz53szH2yq{i$?qovUT1R>1;fBdJaMh?+ z*~`s;Df0vBfkUO0j4Jw7=$08h#d5)FmM^a}AdsyCxW_7<(C90|R|UCHBRBKWWb=a0 zB3-3op{B^)Q`IuwpldG*o2JWy8oHDGkm%1FY8Ragw{iI(N0jRz{)DN}T(=;5ol&0- zZu*RLFZfIQg_k%xe0cE4POnG&GvaQTtdw@OEjHX`vLRhUR@S-_l|#*;fIvm6QY~9m6ke=x3|JlG7PFX?ylB(eJVzQANcAQ z(6hZ#d1JDl%Y2qm78BI;pPB`Jp#DsMLcKz$?DuJUO2G$P8kpy%U(MkSZEzqGl{+tc zcc4`G2Dy!pt);N9W0?Hltb`vje!gJVtr_>Qp-Sgc!G4Z0X^_$e7KJUaY$hnRP8-MtdStM-) z_Eg#zFqNjiU+HmEV8{GMcNbo6__KB3{q?I{uqr&tLw9Py?9efXl9`QW)M2$lIqS&% z!jK2qmZ^T`%8I6W+S+MP*;e+3E_^|qbxP<>-|J4kfE6~S2;ITgwroERjJOM?4m{L2 z%HWblnKpeNvfE(Ur`yw)TsJ2(m<^?8CjWriHz4h!(rst{5Z}*^w?psWq^U1vbd;I- zp|a-@u?yCgORP;jCWUhm5jIetff|@#3+>$DkoqKWl=|FZ?zE*f+$}xAy1j{p z-j>Fgm!_jzCv(S$&#w0J12#^27JqN(f;k^v?a(a;;<)nawZVCh>CYwG{eZG301dk@ z7v0dk#z6PzOtaPK`|WAA2h@dtI-WnOx@gM}%~)nY7fQTYwEE{owvi`ogk?`P&<8nS zpP&Li)Tp}781@6Y{0KXZyPA6vJF1K>IDZfLOFs?v8EB~zV?_SYDmhTfY+WmdZHQ{U zene!-3$@j)O+}F1!=UqCy-((~DK}L$e7~oEH&W zNSPf;4hf*A1`y96^=6Y zaVAf-vJfvc^@5pG;)_k8dloC7;~Z|-5BO&u_?)PZN35dEZ|t%9jts#`n;!co# zVAMJaG^-0zp@7+)#a8iXn)jCB-O)cMh&XQJWphZtQH399Vl09QLtl`>k~+qj-Mt3o zeJRWV^aa^1lpCjK{=s%#C&#*OX7deOBiXbS)1nDIJ{-gEnWPO zfydJk`Pc=Gv_YLg5xQnl-ECcg&5DqH?$jLAwTLIZS=Yz#y03V#i6{r=66=B4t^;*U043LJzgtNgFy@(CzgMaJ^qMr%##2PHuHg+0 z#|g(%bw_pRWHvRlA?7HGa#LMP+;fipkUr#*$_-|k1a-n&$hL>_L-w@Bx9g2_-C!vQOc;+?kQ^?q>E@AQz}WJ-I`Mf{fT3yG6CQK(KaJytz6mIt zXd23yo*$-T9MCN;QfJqN^_h~(OiM*lJx`jb&u~x0-IHR zL)f!P0NoGhUN5t{x>Xj#`2i!MbYQyG1=~l*P)cu6;ZKzPfDt|cX}Dd9M|fPSz|aTI z^9?TcuRdGVr=jQWJ94t%JQFt|W_qQyi1c*vH?-KHP7~7D#rFNp4zR#<(gpRZ=(A*8 zWuVvE8ASU6dZJWz8hP12f5leT_+f>uCGAO5yB`_2_M~9c?P~mx_WXuk)dh7z(wz0R zy=!Z2125>Yb*a<0xNf1+38cymQraL-or&nw)jalu9}-VxFl!50FxN&Sd)k-ZR+!IQ zR+D^rkilw*6JH=(hH}kz$H^0NO90fhf5o9IxinCz>;vla$UYt(72Y!T?5ylS#TC-n zTI6euksqx8yJH+M5dx@G_cX@7veL^DP2Fyp?V3t&>teFlQq+Cq;|w#=Wk;;YNxYcz zP!T_5B1=+!xd(Wwv#fcgLlJe zDwpD85?jLA2|?nb-?bWR%0tI@#g`(i0ZwnQV^iymtxxf-M!i zhsmbXE9i-ykk`YM!!&9%Fex zCSx@sE6B~n&!^`bf6hG6t!EGDx&`o>!#ZI2Lwq|@4@}DnjIaw<7|^Uh$90KxyY>ru zE0t6-T6TVjxQPm0bUO)IapEs~3+nNMeftX-e`ua`_v^aUq>r6>!y3e1W)x*R2XY_1 zeyz`uS0HsgFya<8#MwoIX6Dn`zpDhpzQaFkuaimxD*MeegVtkdx$uRAWnzk#D$>P$bYN`+(%T zx}Ef$o!DnT){)b%&kx$e!0I-zK?7>8!d)LUb6Mbodxv>E(y+`@ogb_NU!!T(YZGM z?nypn^j)Y6%Mx0qD1@4=2-lLk5M=C`cH?rf+(11+U?z&L$pm^cii-IIIdyrs>^DTY zjXLZOtF9O8jYHp|hpnaZ&9Wy%$`AN}QN~dem?40;xp8FH`)6wC>KW46>yRLq3wbE( zmJ_{Jx4Mzq?Lgfhzz-){ghpiCGh%0dL2fQr)+ggm+5hRF^F!Jw%Z5+bWkIO5VnCY@%ya?E2^e94q;=$l zI+f-Rm7Pla@34(eakPJ>+g$?tv4Pdh(+aJ$>e4wbi#E~hLcb%*@p71LUt}Z}*9D{v z5`dRFa~x`%K%Y3~I#9(Hj15%Q(!@vDpnDx;6n{dpZS0o{p}$NGd3KB+GEt$1m?S*l z?2NO~ls%`7sBcDxRKIiJC&UN|n^VNK`MEls`ad8A;K!J|k1}nXdGglg;!=?Gw&lNe za^M8YsFXI{HkTL7{G5^@XDxQz#FSjzS9-Y?l7bwVU^1P0!W=9LI{V-UI=cmVK=w6# zgSws_!}id;#M-tOa!7RB#i}H2C)i$rfvcne4kBzVxOSKLn5{o#rik%8pp6CUxEdN) zs(>G~sX-wxROSgwV!U-A*@=J&k^2o5<@vxCpdq0A&`$7zDS_TC8FBqu%sax9%U(Po zie58K1UDb<(@xR@8YDuKwn97&wgG`Z(r5!EFBsl+b2m;=YsN{jL%{)g7ei6*PBoLb zkVZ%NA$H^iv-O{rNuaXqANa$td(D%nfr@*;QrjUA*AjQulaKAtjW$uH?F41pHjMW~ z_qLl0_S?N?P&)ri?<1!#NEsV0r4+9Y;j23S5Z$eV14h_yJcCxhhiPE<3`p8md%y)9 zn4nI{(Drmv`5_AnFX(s$)xdeByD!ln5`?rjYFuuFjDp`$oWHbIT2$Nv~gke zDX<*KPCV=lHA7JG3MZp=2YM_U&0SYABkiG?YM9aG4*Y91{2J*mIQ@5xEL=+9`JQbs@NFM_YeJ}MF#HPW{s9)XnZRdw{qyx4}?mD__p;elkS}B2!9TW_M-4u*N z5kJHsreJoMjgC;S_Vvd-Ez|=!P#n`dL(ZQsq(cRil zXdObmMlSZ1^@ld!6Gk;-gCpDs1j#Ax=(5AC@SysH^U0};Z2U0p1u!{X&|Yp%m-O*3 z80{3kquFJ>7S-L35?KrcGE;SmT1bB%c#U!zH$0IUi=IgTE3U%YAi)m~E;=IW@q#vE zh$#?_bBf>Bvg3s~=HYe>G_V8oifPNw-EQ+kMV~ODr_sXf&KOdsHwQ-8z>iiusG_q4 z4gY#vlmoKbpsd*ifTh(AdC;JGA25gOpw8+zy_(O!9`hWeu!W+vyF#l-p2C8f1_-lV z^M+bg;ZzNs)Q}iIWaJMF{esbxVRob&myq4o4flqK&PCMa^yghlKV~D5yQ(f2(LVNB z#hnv!RtMV<=FA8dB8jxI5ZDUmeLZ0$^9xqgY!#EPVx94dl6K}6vr~V)S_jz)G2FPQ zk$pg;u28QMaq^cRG*+ZOprK~i@g-I+TOTnel!>7P%d?(s-u0yB=>k)m44Tj{@{USc zty>2M);1}fmm4HU+R2gHR-1u}^hMiqk?Qy%@8?45=>HuH5KOgw(*l-@E+75tchgFm#DGJR;0?|ST%y7|Fe zDv`5s*;?R)2$Rd{;@KSF4|H^Xh+Wi*QDs8wUn_Bp*?((__<@cuJ5b#&XhZk0$EEumQYTTlLte<9MOp^gr3!t4AL5y*N{q&W*$Qbf zbQGW(YMU1y*ZQH$tZ9%_H}9xz?V~>=#qY78 zT1uLzm)x`gyDK6Ml+PjfHX~-1rs<8vTnmOT=KJ$BP3x7*wNTguhV+3wA4)z9=GfC$ z*UfG$en=$4*42)mX%$efRy)$dvN1-R-fa1Xj?b_!;XDgz=jt^#aN9;6(B)kq1E6_< z-j9*RFOV}0@-e;@8PnbLR~Vw%c^P#f?;{+a3O) zJ6ZP(re)W}`UBM|k)EQpxe35r}#1_fRE{?E66Y@1Lgb}*9-^lu`thg(4IKtqzJ z)JU5vvR$m#>j_SNoDt+T6}O(lt-XVKAnG2PV?)v!+6m6R>o+oYx{0CLeZ?&|LwRq6 z(!w{={p9RSiTqaEQ`EE91I{C?Gnla`IZ^T?B zpTssKqiq;Q`s6)O)ywopDqgc`(esV^@BlFlvt~1ozAi(*5$+yx=E1IPmkXwFAHc3; zNQ17^?P_2KAt6Of?*MAb+}c1fyb&3NhCWKNU4Z!V3y}4YVlCmkv8)TF^SVbZLKiQt z>EI}^A=@;cjN=Ve`vo=z9Obs@B8maagS(9()CD*81YG$jO8IRQ!ZpKGb+Fv z7eJg`>p;IjztS-RPTK`3(N<>?-Phz&%uW` zMRuUHzFyXykEV1z-(O@#FI3+6xl++ZDn0d$v>0Z4RB*RpaH_&pmj`MI)hrzhN>{_&)cxYMhDcX%}jsd0M6bLo9>2kyE?pa6BVS<=Ofhg z3$enU5?lFp50|{)YSi!kA+x645iMLDR_F2(h2XHZ*|)E|-&slmj*-(^L$Mdib4DIy z$`d;@oM{|UUU<#lY~E7%8lcf{me+A6<1nq>3D zJj2U^k<^94nxU8S(J!L((#Cgyb0KB*vf3dw#9EnNiYE~#LgY{{TDR4H zi;?7L4{zi={&ph;zpqX{we0%0IclBXDEZ?%ZL+QN55^Le+Yuv+pTkO&7k4qZ#=}Pe zqy~M`^F^z+CLeV5lt9xBXaI3Qj=vjB6iQ<2gC6+=Nrq@;;w<(1HCK6$(R3|V%E5$F z1NBnD`ue1uHrP>ZkQenp>$Tye^>)AD_O>0hOB3sg3hq*uwPtw(E#_-TnchRw^9ws_ z!BJ_I*`}<~lXXKb1DFkZ*i=D_xpwx?XPW(3U3cxnd)ZlC0Fu_!@1W(1t5pT&BfcD| zuKi?tfM=SOvU-a%Dj+V>Wnj|QHskctJ7_drwRQw83+ zDldH_ygMpsOol7mVNDY~kPqA;ChLX>@(m-fS9ZKnn}qvLqAq<`R$WyRE@0usCwq7# z|JsG>f_w>9gZVd(1T7^(Q+RqAB0lT~mnWg)2W%z$7l5L;lkJt{Esp4gN=wP<|CP7H zznff5xuXtyS?`tDVMT)$pf(Gn@pv(FgytnK{7?o$SP#^xBZn(GvG_sl>$4IgkatJg z6KFH9$UDD6njx%eccVUR>EW@c;KTD$>2B~I$S#Asy`}($wZxq*fHJdKhz3$xLo41Zh?XZbgt^1mX&ICLc}P_x}o2Wh|*>z<`zIPMqAzk(JZBn zSnRS;-xJmy;qXaYg=?AuVqVAiAUJZtFcuB;>WZ{h|wDz5`BVmcOHy|fbv>;Rv5dXu)Xn9xI%+;p8j<@<%Bval zGpXL#;Tv_9#-dhPwMYw%hQcJZ~mCZy58#KfWu(~xrN`iGOsNSY{$)*iVRvb?-yhOBf2AUM65(c=Z2!ogVs zPRbk0>T83giuBS!h#3u%)~)AKb;+;-gY=g`ggwHGucag}dx1Be*9%S8`DiG~c(klL zYWrf5zfx&fNOhOBtQ&IQytJ(OLjB$7Ol{~6e3lD4y;_&s*u?EsJ0dRS0JFkg>_6*( zlQwfBE5Q>p^49eR*KK#Kl)9mqS9ob=$yi>_1M|uNyf-qX5oP4g`0RJ`nOct>*yWKz zf=H#Qn^9lRR0A8yh1@6xs_O;OCJm8REbES}5@_s%8nN+Nyv;jeH^c-L-kvCvI-Vhh zXG1A4`v$zQRBkil#w2-n6wdly6bbcV%7&y|zj~lLc&^5_Xd6`V7Hy<@C#Ad#wPr4rp@4~tv7wGxOA1Az_PK3h=8@v}v zyXdsbmCI2fMeqH1QDH;$Je6M^(hXI~OoHM!G9`B`MTgZGwA83n`?`bio>y3&EdmyO zrW44SX_8Y7QTl_&)uOF;NnsNn77!2fh*p z1u2z^WgTp~C(7?sG<^E5scM(LHWa_sz%DWyg@(5-y0;6-yCHT&%R4WNT7&BIQ)1tZ3 zx{?;kM{3RJA5ryVve`NKfvOvwr>wrjg$9+9QqJFbC7Rz?B+s4e@{v_F-O#7&ZPZT2 zC8w(CF&e}Z@SBY3-Oz&KcAdaSn`l=w%4nIF0>zz*ciywmwA|rr*vp;Je*Hq0nb!y@ z6{}aNHOFo?2{mnFp_(wS!z-`;kuANG;R~fS^cWwlH6D?;B{}VWp_bJO^K`n|+2w@n z3K)NpxjLc85`+`E+ELmN*J)`jXmITv-U#_Z?i@gjH?W1b>t$Zo2I~%d(TfnX@*=Wf^?E$?TLMop1A8((F z4)Hf0h*A(u7jWG!xN;9fP0JhmicjZP!PW3US{G4;+$BI=M)1|XE(Cdjx8Alytgr&sj>sruvm7RAERL~Vg6s*_-)z$2aNZ~DO zOQGdV?^d0w$cEA|L@0KmFvAhFm!lf+H(M$MTwQdiryZDR!T?x?1eh^?&!s>3gmbYV^umyg4+HTF<-pW$sG>;T&- zB{_3m7EW*AM(Tmu>Rg?Q25}wv3T7|7xVaCM5+m$CyftMEEV6FEIXmfA8Mt#&Oo&d_ z3ngLu<;1kf7bafq9hi1xyJ!o;;Kx19JDapy11&bc8qYyGlJ?r59+{pa#mgf%(AdHBQW6oOZ~({ehg< zs%ZvhDed%y8`&y8YrQ`hvCHOq4GL?dYAwdtlI}vurITRuH3~R)7gL9rgQ?7=-u`J3X!_i%-xxC8E4)XK0|Q%L|#(TZ+-a>zAU#-%7HIrEbV0YqsRtSueJJGdgtRi-!6{CJ`+RR!;j<<&@+3i7<2XniM(shp7mOJ$USIw%npPOS4y z>cBga=tLZPL;vWMXh3nP{~4;tFy@w)T9Fq6uOu4Rg&faCWHH~#o+WW~`md1g+!Hrf%APczZ0=9T|V4F0fXZ2x^%QV^oAXBagPq@rJ%tcdf&X;tZTG%_7566$KakiDL!jZRbvRJmk+cvDF<)39P9{78TUj8ccw7u3OeM6mA2C?mA#o!lC4>>f-fdH~aT>)#&^ zvr{bjzK>Uc@d@k9hbAv_C{th_MclGm}*3af7Wers5_#`N}G16(G|ND$kBfxzv3k% z&}Q^B-W8qP`Gu>oBM(NvyCxW%hqTBNTVRN{AK%DOC8&MV&}TlwtC)&CQL2UYhWduS z5kp$%9O2ziG;r2RDIiGKP1_WA`9#D(rKJ?$ZN9Z;FHq%bpde~kNI9$*(iQWDa9pUy zMaVTSnyi!>!~>;H{$9n^BJdsd|5Z}9;8R5Oz!%B}d}wQe7{e!TisV4XRiUj(@(;SZ zD&cG?_drvAF+)&w*-2}w4~nEg3~$mf(<$prcELCSarb>N6S`q}(jJI;k+k+gs17Ay zMvbO*;{255x|j4!CG@sa1HQ~a8zrKu*>JiHdU$i_Wiv+>C-XfUw!wIRUVMU{y_zHp zE&_;Y4)J(=2u@rt=0HZudlWz4`mH+)&M12U$6xQMl7brLym7x$pCMy|ce_N6*Mgb$ z($EgTaP0W)kG$WG zWpx1d8$~uMPk^Pv(;|#Gc5_38jvkkyW3>7vc1o_dSn43BLL3I{QjSzQro1%qH$sQdY#!*K3GzGG(ihTLK|_3b zb@1fHC4u)s$)|H|<)+ES4nkp|rc5xKYa;?AH1Afp|%V*W9YN{cjr5o8qNS6oO%m`*&Z2#U7npaMr$TTN5 zAr7wEWS;07$Q%8j^?59DzvJB>Z&W#6QJnI+ct1RzrmR%IvffCC6CH?CsHNmAnw&c+pz@VV(?vB>vbxH`%P*W(=7IlL z{O3Qvh;~rk{Oz+$zu3h>B@FtFoHVh8;l<i zCdS0wVPE3tdr{ftp`_uR#_CwFD<>7$74d7)N6XUc()&Pl0O*v2b!eQC*4CKD>W+Xh0JDlD_M%ud9wc#-t`sz zUg2or!(?DDh$69<^@2EMt*Gn)z&I{*NC`o_EV+h)+YB1>aQF+PjVovav9Y~}@kQGh zFNrBIMf(Lrrp%pdMZ47Jjr`zm!(Zg1@ty}xpS`F-UO}rIGRssBWwi}r{E!#w5HM3u zf{6IhO+J`Uu+ajG0C`x?IUy{mGhopKZwD9ah(`W2b~M~SdFL)GpO#I zivnd#u>t$hdvMu z0A%nhc_Wr7Y%Oqj>joM%5GJmizC|h3d6u{HJdwUtQZ8O5=B8~acqQWl#m2ZRDGC^m z2r<=gAjVI{a(K7A7p@9JP0HHLnt#-zT9is7Q`sG{DGZwXm@5^NBCk_ucn?(7aVpE3 z;>!6HSQoGoTsK9^$7+Y(w;P;FI8du()3zR%3 zS`#XrvT38=h5qx8%Xa8m(kQj$>pLT&xZcr$+GL_bB=PactqupOoDSjWi$HikoRz*1 zr|6`O7vuJr!j$F{VCSS@6{Zr>_O4o3Nageq;5GDE-l^MZUDC2_Yoln@;+2QfSQFHo zNu^H_;eDX#HH{-cZDIb^gLok(0j69{kwI2T^-(pF+h;vV{>&=bW3aRtf9<3p}z%@BAG!===lOZQr#EmDAn!p(1yr=a_(qGsWr*?==f`n!rNhi z9b!Qp6rfchop?ss4vkNc?fTwVRK`Cw@9zCW49H9lGPDSqO$^SZQwu!JD(`{ttmMUj zMFAa0@LyW1yiQ#&^q0m3@?OgDdYfNxGIpS{b{nEom3)Sdg47*gukmU<1r?!&*1>MV zrAqMH>k@OBoeuJiLgV{PRB9`9@E4SG1IDl5q_p@5M4D?-GHwSoVG)|*Wm9Rg=5Idm z_={Nw!y_uLp_PuJv~2Q&=jzPzIWUugSNik6H z9w^GsjVpZAeok7%tAhRfMj95>BY@BXYrFKSIC(de9ekv0Sdp(9X5?Br%2ge-;x}sB z>XoNbCvPd;4YK?RwGLrT ztz0NAL)5};OUW5g1!2w-&gx`d9Eubg%?y69FF*m;|d?$5kp;6$Z%m0p018B#_$2J zmp(s`b9&q)yj7G zkX3FQk~@f`Zb+vLKWWv3k7Ov8VOTk7WCLuuDiG@j5g%RbIQc?aDl^^hCqQ7CaIlZ^ za-0cD>FM_sMOQD?{F3TN+N?9NsiY|DRWFgdqmgCiQDj0=b66#d!MS?YAdN2F1BWM4JrW$8!aY#CFIPo}RksmVFVIEo zj(qMN+IPA|c(Y?(oPKsAvuTuGUdGPyG9491TLY$VuuQIQ8fMiHHD=VqO%Fsu(bTR7 zGsLt}d3R*PlhRv4IIoV*uuD9!>G12ero z>Si~AI1cxTl569b;nn9uE{!*X`i1<8&z(wZfEwd1E2bwgSR)ay(JqBk$dN{t0I zVUcY{_hi(~HZ^h7JyBV6{s%#}C|J7=v!m=YgLbLVuhiewyqXU4fD}h!QJSJS)$KNv zP&br(^-52O-sD44kDqMF!n1CmxvrF=^%nQwG_Vszp*dXDO;GZBXzhvoiswLeBGVa! zv?Be_w3-9iE~I6YhPPAMTnQ3XYTA%76IhqK``cjzY#ayH9d)&kcxzoNucn39&HnQ4 zsM9YxR|~-!Lu?zu$Bwup*Gw-@(2H-x%v=zAA__s;Iz;7-cs{TK^ zlyY~}IqhuZw-S*=T0^iwku<1cS2xSRi%R{b1$F^rGXQSFOChjzytu7qL%A;j-iA2% z)V`!7-RPK=ZYOmh118EkZhQdZrnn8{ll2s(C9yRP`kUu*dUZJx~|U z7iXt}vdDQM3og4RU7fGc3~(;wCsPNi;_Lf4*#v7Bmvge|MwFD>7shVnLLiBi>cDiP z1`GNuxeD2U2}JR>!G@wbtxp=Ae=CB-!LA}0RAZ29JCu|=1SqZ!jwfnSF3XYAiUzGx z32n~<^ogJ>i>MbPuH870KCrYg$`ePTZK_U#O0HiE(mq@-Yb#6vc|8ZjmevA|26!P` zI5VA~P1Ybg(^w##aGZLriK_TYGZHrt13|~ep^L;^6(h#|X3)W5Cn3m$-UlXHo`J!$ zP{+7DQFc(nt8r0M19Lgia{}k+D0kUnoxp~KOt+(E@fznE#B(2)tUGET%=gn&n9D_TC?`*haX4j*zytXyALlvNHCVZbu#~u*-}sm`z?k>dftEHiVIbh}CDMn>x+L zYAm2?Igm>KUajzZ*BLyg0`-a938N`+MvG9R&@?EP3v`EqjOs6BfR<&BP8ykK8Yu)j z%)JoC9GXwcL@xUhyPSdw@M^eSTnWmqCsE3Pui8#rU7={-h}x7k>qd#1qr*sYNV<{1 z2GClg@LV)FySAv_W0CL2h;x-AD@vx?C6~RcA5kYU7jrVErz7PI1?H5t6sepdv@7Kz96a|9_zTr_@?M$proYyAqw||A zeIpzFV(aP{cp6k9-4opoqll6To( z?hJV%HS*Cdo6m5ugoswi6DTZHjYQy_3}xQl{iDOdG=bMr!)3~7s3Hx}%; z2ydrb3+a7IOaE08Wd>#-i`)%0gupG#Re>2~SZORI+>up^7D6ufe(jmrj|1w~G>_%+`ZcU5WU!A+V z+Zf&hwH2_vrd9B(S#cd(-W`pc+EA$486PuBVcy7mW(^10Y6V7;<#phNx+8}bXf%fE z+sY*TSV>LUc9}SwL7u6G%uz_&HhrR0nW0H~B+jucH3i3Fo?IIHQP%5=46cvFKKaD_eqr)g4`{1(m$XXJP?vCmOkXAIOV@n2ax z`StFf5Sv3nw4$_$K3N5HzJ#j%{tgD!|A(`dfc9%Lj|rN^0O$9B6-}Ll4&&Dc2Ix6c zPaQp$GHfirHFKA_YBo!=DrF9n3HRYkJy3-5+2-EWQace`V zk_a7FgVCr8Y+x)b-q%xCLxs1l3t=Jo;N15~J{#uDeV;E>lW|%2+`)*&pVbYQmoMbD zP|+H^H1}XHI75d68OV3=8hr_sD#>edEx_!NZnCq`*Y5Kd9O1T0ucB@@SZ3d&7IT}UV>Mf_d-@Dw59JaS8TzU zRe5(*9ejr``ethcn_RVs%*$QazmaixHpi|qb3P*0uO&9HBl|rxYBX|*?J8--fwkB- zqQSZAm$EM}BXo8FNAC9rGPKei!-y*{4N+cwV52D;!VQwPW{-(Q^VKdu+{jw=-gh-x z>e>f{DTWDaE#yoI8dIIB;HV`ouXhsN2%|tLbU@=Pt^e+>+JQ5E%XVh`KIH`VAwkRb zLMdszYwL5$DP4%D*MinYMnlpQWexIk*b@c?a?0nV+n;`E3E=@6K+jDePIIy(W@NV-ry zqVs}wV=6siAmrO>up>j{h+VPc@9y~kcMJf9x=>V@>td1AY8pHGL^RxK@^Kr55#;S( z1|oMv_HDNv-J#Mb#MbWZq9ma zhDI;z25_|Doc)#%r%Wg|SvSPqPV;$fM0Zh9tR0p2OO$5A-W|Lwc~fNuw<5bB1o^6<{Xi16ZInU=7#ycbH!p2+C5M6oq~II|JEA)F`0He8o%r$V(#S0NZy z7g31t)_@74U)Jki2tyIpX}2Co7V8zlyQA8CH^jHbFtqYAe9C*F!FZI;bPm zTvplbSES9OlP?tY*#6dL>q#6~y?+g{2da98-lMLQZh84yco(w3T&$DUK@!|%oxs)$ zHDN~`KboYuXfDWnF2t-6q+=2lJR1o1+8sW+Bd3edel`Na7BJSh!9O&HK~e{~$O&>A zYvk%{esJZt1FENho=DF@8rvztn zXe(rn1L;86A8D(=+#4cpBL{tZAUY#x*=DbS2}}z+Q9e1hIPp=;C%o*=Qo9>PA;J;T zR@vr+7ub*$yxQLzjU2NUNesf4b?eL>bPvSHVy$#ik0d7fQftHxL@Z8PM^tz*;bL;E z4m-kclt$B{&e$b4AASD)&EJX4$X8z!+@6$koG-+O ze=ni!o!P1n=L1>DQNSp2t4p)P{e5&#OJGM;rv}uLjCQ#T>4j)=i1AoO#Co-&SjU|j z+7YuNXkKVl-pbW4m6tn*LLD@`)4E)wld6Xe?}iNSK=Yxf$mRXYZy(;Xilrg8OA+75 zI5|k;7G8HVhz&ouKXOA!$ihWS%*S3}rH0L zO5G7w7Mh!<${Vo`jEY^ro?ysPDP7Bvn3N9VVcn1}4LQDq7V0UP5a$+R(J#Fy#CAI3 zA{T84%z)}gcSMOo`@mdAS#DNT(uZyVyjZFSVh#}?R&%0MnNQ1?mrWn?I)%IRy-;+R>*pv? zCdTmQ*^w90?}WxX#3MJb+NPm8uUGS_-1U72Qj0dk4R8~DCsUw9 z=7Lkc$x7}Ml@te1g#z(^qTK^{;SI^=H4()m`|Q-V&E6;pnJ)VYOi>lkpAn}e8Yp@o z=T&5xl8E17#7RsZlzX6LWDb`@rJ&@kp*fJ}?V(+TP`lWYeg5ruVwI1NrlTURsl8Eh zS=QzD81DBI?KB7KVDobgOmQO3R$CT(`b{~=q0-`6rPYSjIv|!3&Xh*~=Cf0*?b1J4 zGo>)}-I3XDnR^n*hQ->X)xCDs4H@tzC}}aahfu?<0-Z>x3@OSzP*ZmL3bn=O$vb%; zi1j0)63Cgmd)%Rt)}DTetL`C6WCS;b~K+`x=-XWPiU;gTV$-m>34#0i{D6ZTG~{F_hNuuFp&2`-$ebU z`_?L#1`4Z7;V$+)f$lscnol@=(q2rKUGoT&L370BPqQM)UOn^dKqx5g0m&>sY~^`==VhFyzHH8 zM|W~0HH~Hi-We@r8GRSA!`b56k*dv}LDr0&(u$+pfl8tsMODx5!s?ZAl)#Ow1RtG{ zwo1UQ$sb-;o2oq!tdKg>Bk6FaAv&m-tiZt)wA!ruYlBl(2Xg2|fz=M3(~y)Ke$;M( zD6Y=}iH4hOxw8!H22@xNL>qv_T(qnl$_P#g{I=mqE#mutMyQaZL6?~3a-e3JMdjA3 zlOlL?B^D`nWHbpHEw?Jr1H`mAwY`wpbZbs%)4wiiby&PbT8D?+U$!7H8?%sfBfsLj zlYL3_z^LGkW--k{;*Kaq#jG~Nt8aIzwDzx><%tesV(b^HSKmGhe!8OjRG!j z3DZuzNAyOyAPyQih*)QRK#xeexnh8s)YP-xh{jRIe*dT5wR8Kxw0OoE9LPL&mrRt^e+!PXH!_o6hBdVC zDp2gyjg22Wash}fBdfIBXC+QU1bn-J^Dno7q`27YVPG0e?Q^N;fwbOi*r=I-s%HWA z$*U(yN*4s6wZNd-^u*ZYH>w4L`d(h(S>b@H%+{YnETg2^q9{RBTQ$ z?80sj`{N5a8oIk9eGIB$HL#r_NJ$H&h}?)A6^sl(1H$Q6UQp)fqU1~zR?nB0YChwq zu{@2Heu8ouPi4gy??&Q={uqE`<*tz@cEE7HT5RAvDAa{0A8A#GE6pvUm8(lVQq0;h=HKA@;V9|Ur%u*)_NhG#}5M3G}7=U=m@5q zkPG@Ib&#Va`=rtGYu-p2Ui|=5PL<)bDk-a8=xZt5$l=E&zNs>|$XX0os}#c%c?p;_ z-Xn+(Q~AGKnW1#s6c%dX)`CGyO7DJ>a|7&YRw#y{LR(g{(5$%G zf{d{d@PW{rGMLhGxOSI$%$MiX{vTgwl3+KiBip%G@s{8w)6IHn@&{G>pZ;?qKuM&s zYGP+xKoCfRAP6>kAVWI0bx-SNlqJ3ImtJgz@cIb~ktR&$yF(uPS9CL^b*sRRa(gMW zVb>m&)c@6IbsiFaE078 z+z^*3DF-m&)$Lx$r6m!5w?@!9h_dE+EVOU%l%rt$q1QVKr_=68ZzFAW0!J`##{|Dd zTx4Y#9oUMO3G!&$PNLTGKy6o=cg&TBg&ODWEgd%)3+OBmIfkN6*=yJbLIb9pC^F@z zo-;j+ddAV6ELzKEq?i{pS{FwH7X)7*jF-$P=c=Nm(gu+^NKfP&R;iq^Ix~t;*J*C# z*bO4FF&;xpGxV>=*paqGG`hw*&kBo8E#n9-WGP!+no_DDOL0Vp3~M1qg@qz@zSY8$ znh31*lpq^nAw3w88ZNM6wKQ>R!7tR@$m2GmtHn633HHJeYs^{Ejch-no7KO(WGU3J zKEY>OnpyJH7mmia&^;{Jj#51?a#mThW3q;G1DrUJvW72{WZ<9m8V8ES&KJpuFia%C zN|W>c8`%cGi3p^vPLq8=V8&jluCrc<@0JFkU6f5g1l7Yk6CMTmq?^cma(P3K8;Kk9 z9H^C-o7W=Ag$#=7dX2oCn+}`?zez zDHmVuRMPZZzv1~n6d5~Sjo@Y35<4cHC?(@iQ;pVXug^B7KaiOyT+et<=NCW|RaDWA zSjtvA2e%qH)&Ic`HJTA#gVYD2g+y0pz@dY4s#dLkf4h<2C^wRCK+7cI%``(i)l_R>dZKP-aK;QEAJ@Kd=NbCrjnM zP@ZIHlGeo&8j1c9-p(s_gndXOf=Vd$srGCq8dKO&Nu&m9HH;Ck{=rY9g5%MRKG?Mi zn$s>SNQ=2$rg8m_2wJ7BDFD?0{9v%MWEV<};gq0xRYltY`;fOYfDKgh$%-HcYvUag zcF>wP&}da{d3ypeF_~qHwIh00X!HKj9G@oZJl9$#5RmhlgW*iTj`y-2D7BNQ}nuZEWIV<-!u6lGRb;c$FNO=e8g+*(0CLspq9;ryWP)pjH zUnvQ%o`ToQ@vMg(F$ha@77|G*cn-F}x&zt)Co{_aWv(jhl=VO)AP_o7V9YP|QM@<` z9Ef+|gvrLF4&0Ov_OfhPZ=`PC*&vM?8Q!Sy(={e}pUBl!d3A}U#x3)Kk4UmpF=n`U z&yz$aAT48f^PU{66Pb|0DhZQwqg)2o?~y8?SQQ zXf2OsO9L23DHXRZbr9tYnq_JnykUzz6xIzy=xiK;h8u%3AGmrU4^%Mt)`1YUI$s5A zVJ}2C3oXqnH80Kg41$z2=zAkemvm?{-fF_kfd>;ikvSo0-MxaOUkN9oV6S5M@VzfA8aAl)B~VTf^wQa98o+^Su!`Eza)*WgS%)P)#Ar15x4 z=DkN?_bDKCNBV7OOdlOI_`|GT@E6D&5;PJi;q{7TaPH9OzYAGTzg-V)Zad@;Tb%z4 zqhBaudm)4@(f*(5$RNwP5dB&-)upF3i{seMuRF3!kY9?f@Td>DAg;r5=gWn%4+b|Y z4FjfJP_;0y$>w7oz>Ub+ z)C$BVK+V(3x+5GlydTZ2K-Hc}+i3$YWY0xzJp@#zoA8En{!UqKL-^`-;OleV;-<_U zrNC~BPL+B=5RVdf!wFEg0cJzU+s0O*IoT)SOS{Rrp(Hp>yHA^DyQ(;CdLy57`b0i@ zE-?c0Ht;V~aVPTHIcWKkwdHgVBA9v33s@Vh;~*u)a@-cv@Urd*Q-kLCSzddZrw1!` zNBULdw09%Plp4GYEu2ADGMNn4sHmkP*RKY7X#;3d#AarZC5{0dhz4|7Y;A8hx5}cK zvnp+6Lr(u$rfau!pM0pflJ1GDFh7n4?+g=Q9T&@t%yp&i$SknSm8}(TQw~hYK$bJt zt@&U|HkRQxlA$3CnLCKYzukfqQ-aUW&dV50l5+uc>C__%X_6#0V69OcD0*>1VOZVM z$lIOIC@7V)kUdt-#wxtLSPh(8vs$qum-}5WPHGUU-cDTJ9kp(}BOvNJXOWlxlzSn| z`Pa8_nF3R*@Mh(d+@`P;xi6 zI~n31Z)7Q*I!Ie>mZMj0tw=i@sBf8%f4fkH7jTOPLHZM^k^6L{HIpcgzFu$`>V{f> zZcWNq^3QRH9VMn1cydQBt+-Pq-UP>HuXjTXWqTpl;-K+J>g*p)Ag&4zqg?>n(4Qc=Jr_=}(JGsrbTdJ2=^Er93!1e+S6r!EcD2#( z;60H20a}+VT-_wK2-X^dLLFpJVvif1DLObC6T1Ng-W};A*c8|us!+8fcW%-SFXR~C z-J+GNOOdxaT*%X4hH;@yn~^6ErbDR06F3MWg(iP$>nd)wwVW5ihD3|kum`MHKGvO7iyjSZn6bQ?xA3}rqRWT+~F^+8=M$cJs8LaQ925|2eJpV^O^=p z*&=m5gS-9Boxk!?!R5mnxUZQU2Qp3SJ&+4x?o^*T$ci#JoVE~u+X8;;!lxS9fQ?b0 zwM++c^oDlvI&6t^AT@(nkni|(J^&&ZjILgc26izM>Vb?H-JeezsFM>JpREoDvX?`n zb4PAGEZ6~x@W5KXkuv}g^ZxQq*cM?<3%}I=YI0BTC0I( z!DI+UV0Lv4vIENt(f6cfY$JRzu2SDv(1BVMW-3vhO3#BS=K~PsFmKBHqB^)$Z9wVu z6g$$l@j|){QlYl$85*A;cZM+Qle6xDXvuxR;z&J^6F6w?81VKjbSX?lqR;}iz z>Vb3^4CK5xQa!~kZ=?dEUV))LK~a+g&ZVkrJNJP)Y+n`Yz4boZd*W^s)pY~}YPgz~ zt6es?_fnPvMO!~MltyqlK)FtR)#!=rR(a>tf_t&S;oSaCb&FFxs*N&XO zQ(5?f@=j9{amni*Z=M{~uI`rx%B#Os)pXg6&KJsN2&$lqk`^Rpk*_cX`Q$<=#T>kX zn1DDkAAe?Zr-3qc8jE1YXyEMX4t2VtPVoL-^>4n~_&bG~BMS?;g^p0YQ!yl2r%Wsi z5l`fDF0?suj@>&LxUD_BASEq?g9WU*a?__+q1)g32#UYi~kOGWjmUly1bZK?2UI#7q z+=_$o6Mbl`%to=g$ZZ8UV8gltcLRGb=He_h-<*YYL$j;iwfNRSUOBhH(QlChukpsHIpX-*I;(UcTtjsAXKhYH#5Q8V!6+00sFsze%VqvyePGU!Hx`^$ZcGa3+f3o zZlm%dKLLkkyr7_O0R99v|hRw?*8Uo$PgIX z`aEya^xz3H`qG6ARiG`?HhV8_72L>1NOWj7n%Kd6;^57R4XHcA@StIF(KmTeWWohtosQZ4v|UdTh7)=o4^xA5Q)Ty&b?epaCHNtT>EOeY;Ik-5jG`_ zo>!?{IFx6tSTDG|fpHc#+{_?Er|{rLng??9k(TrgwbN(aa$`+y$S-Wd>)EVmV4hjr zcoQrx32?n(E{wR52_?`9Ae~84P?M8rW*GE95p#_)iFUBT_HW(V0)9US zFjoihYkLXjq0>(yO4&@0v8*=!%BL0~;lq&j4U^>@dhTor-ayO7#Vw%zn_c^%y;AWWfd z$k&gUj zXE52(KR%cN&F?0LSKEcPd59gPN6h`tjLuak=iQ%3<>p8j<6mV?InxTBRI`u)a~5kh z>GGf+1!9^OplSnJkL$j8xiYCt$@&*L=_*er<-NVx89uj}7AbC_+L$}4%4@C!s(Esr z+))RDnO3{VLEH_mW)+kt7fO5k6`IIRpZ&v-0_XO3UgwqMWovMhi<4nIP-=b-=Rxh_ zj~!T{7s}=4hL+T0!@i3;U$GwEg>X;_?a~F{b(pa15$n#81&ksEQzj4D2+fguG;%{m zmMBn%43#EI-RS{D>!s z8H^w=ovv6VEtFzRr{-53jT4nL!ht%$F#8;_20^gW)scDuU!gcjjXRl3Ilwb>leYa$ zfXnZH>#AVLv@HAI1kx^0)Cm>DCR#k{g3JRsY%yi+jzOq)awfQrh9{ca8k`uXOmqFl z52sWpX29bz4oiq2haM2)UU_W--b2tKbw^bJ*E?dt6vlvFv02Gls3pU0%WAp_)^=_` z(egkJAkdl&RZxtbDNXddP+sEjT(u%Mm)C-+I8-=Ld2^$%l5&(3UMGtu`fGICAFD5c zj~FYrXglh`bB{Wdw>>_)*%cpK8^kBYl;g~0^erYLtqvLhs6bc0tw|Q&Vm1)8TEdTH zfxQw>-W{1s$FS)rmD}qB7!qWyw-``soDD`6DQ|IdChLycPkwe52DNqXZVh=i6kqRi8_$-x`zGfsGpCV?qy9S9ZyD|B~;CDQqC8 zQuOpQ*qL03=V#%G3crx=@SuUTHQ4<&1Z19UgevukoYFwED-xPPH30x`G}uAIioXpy zsRKO=oQ5wa;wn8z-s(6eQ`WXub!8m$F*9kretAT-S;1hJ5_LJ6O{O#pOFyf;S3d&<08Xl&o0>^lLEcRz;*9s2LmgSVaRj0`cthumd^5nNgS_cdFi{Tx-mM&B;cP-((Uk z-rVfte4?hxFeSA}7Yv%-IEb&y#Joz&hkmJ%K@HC}`IIzQL!4;J`CSW3eYIAyogCgB z*$z&sreyBUN23YT4#cEa+Ekbqli#d6a^d_bHhVO94K`r&I*|`bK^^u$t7y55mANHz z1$p)1H!|8{Il5^asHVVNo{ov#$S2*5FOBlHN4BWBGZgBMY&7KzE8p-F&e+iD?I7=D zf#!k4_FrlNh(^5AD!BnZCQ{~ufDUL<>k|&-SO9JH9q$GeGZ|Ivh0>nQ2i&ek%k|l~ zguM;y0eJ$_aD=aY*<*{E1nMA*B{6M&zlv-4*t2LMI2Q@r49=3 z+{$2krI@+t;6(A_UI#EPEDI^%3GB>dTqrk1fv$nfJUiQTXdA2RLRQyQo*$EHgX!Sl z?O>jpqi*C|*cr5DBA+d*_nsi>M!v-h-jqYcR0o1Zh#RKl0^b|i=|DOKCFuplrm|j0 z7YnV+X1qt|qfT`;J7P-XMyBP%OnbOftzLge=Bl8L!~JwB&W5}waDkRGjLtt>E<-}L z4|d>p3;vCqT8l=gGjX;+*10(ozd+Wb-5oiadH_Uf2k;%SN3FDp6{%$pSm27&8=*`pSE?&Gkf-{S?xvEyg>w zCp4%6JBT)O!pQgMoquPhd7;#s(FE^UZqDmjs5>t|wN@X939zMv#x^Om1yjM|pKN+~ zqC9C-j$F*KZDlV9V{6LYk&%$)9Gm@T@xIxIUBN#rp8!5O&j8+ z(bv^fsYO4ve9F@42vkEOs7#CG-BC@7&8)`wP+RhRvG#==WVK=TlBL0a<;d8 zRM+fNP);;wML^wLiVLq3IWZGr%eA4bN^z)(h6?X52S{N3 z#S@vsl-BVHi(>!*yLtvMNNNz4>f8^6RilHRI68Q@_zO9i;xt+J6vJwI3fy`0fksTL z0p2#RS4S)MLb{uLmC;~Y{k zO{KOIF67`3t=-H@q0w?iv+i)At4cV3x17F)0;_vBDar<%m_oXoGuiOx7Zpf>(CyuXcH!Sog0x}zkVQ^dAGn-Y_T z^Z9p%YU^oq{cGn3(@1b0$W=yYbi2GieL`Hbsx}K5qS4B0Mw}iJn@}!DNv6>3><&y= zQbS6H0mC4BL0rs%Iy`&G6&-LYTq$CAq5+E1(~7bm-mW&h*`5H7mpcGfsFYYN14g|M z7J<+Wc#Dmk)Zx58PdWzX{X2?F^BS)3{%U{DZgs?NDA&~D4%d+2y`;W}`a>=#r5t4b zkNRm^Q)+sYeK@=uGL1=1H%!90_gWYiG~mq~4(cFXJBTr7^sOxzsj2UV+G&U%J1~vS z=R2mzZ4X$;c^Y;?(?xEkN?@0!;B~+Yav-l*2A6UgkYdHSENMHk{-l*PQ%uCv%YtI6 zgZR%^G)khv#sw+#`M2o^_+}?FLvcDh-x*Z13;5KZ7I1Fr20QXy6?veRue}D=o=rC! zt{?+A9xO^q5k*&PB_pNcF~kEIoIoRWk-AEjN#0n@fgGQtO=Y?NT1;n0hZ|YWEJi_F zJ4$^CZab29Lw@y7nx0Ob@~KC?WUTf; zj;?yw34GkK2KF;amS#tWE6^~V)S2maadkM5DKqXD=oT_0bu4fvi*j)lJ~_x930fom z)S=6_^43xZ<%G8P7K{o;u0pn!$huG-G+Kt{oH)20-HQ_C-BE4#CsmXx`=i_9A_WE^ zd3V%7-w>>FThwf^fpUp2Ta2Z3&)=a8vf!G>x6Hm>>+GtAA#c6^aM6ZcE^n?-Px=etIEszSI6Ppk* zC5Ro!H;~(rpx`2+rfc?ca^ECEZ{#by3Ju!TYu&2__9P$F9r+z-Xy55M=>}dd0G@I5 zK)5t%&8j--Ew5>m7wTmvtAo3&@1sl|WPKpR_NZWQqG(`@Iw~ZjyHUdSl*}_}WhKOv zmCEqJ4H?Ws^NV%ityEV`4b(ntgaz=3O6e$SyjKP29k3pV5X>jn41`=_BvB%coe@>y zPrR!KFZf2*wX`Xy$x1H^qWtobaK4dOZHZQ#=?6H(crxPg4dALmNyj9bwmP}m$nAFumE<7ULPR)D1( zU{?QTCJOP=qU>x@&T+ozs{%BItSKGaa56t&At%Pm9+LvsMCZg z7a-~dILgE6EgLD9o8f&628q-iIjxG+_#D3Y*@k6^MdNlz|6qJmhFYA-`v&83SxVi zy%t_j>}}Af5L0lmajGnwPvC`IzOcCjRtcx)kR?axjeO7*MGF?+#fj`zi4o8V+Hrr; zIa34l%Qh!=z^QL~sjt+NdA7VQMunDlTF|@))E(uGUKv@|I#az(1f}X0Vi}H?bQZ~C zoqpC&dE%0H#OfTMHiS0Uq=IeRey!3=2zEr_p}9dB6qMTwg2pAiRvD{aM7qJz z_dvKRY4soQ8mMwgm!a7wFXX)qR)92WIdZ*iJs7Kox+AT@bKz5GUeNKu310R{!Fwa0 z{7FSZb7xTG>X5+My3E?uj!1++%e|LMG9@XFx*PBoBPgmBsUH6q>ls-o*%99$g!Zf9 zFjS^#V&?=qa>XOs&UO|sUK!qeAtFdg3+ahO(E%z0DLD5*oygo1G`3KxFFATG)R2j; z7WAJ7GJGdSs+Dz>08H!vtJ%aG=$8mxdVw?Cn zQf!(G^&B2hh^PeOj*OEi2c(qCq>kle7=smLeFa@LJqP5$hCI|Cqk!$OBO@hftuHKr z3>-K+9)hF}a%VGWc3fb8jsjSme)B|TO`&lJq`k-H_9g;3pMU>jIu2p%z->?tJDeVvAjl!y2AMy{MgH>)+fr16ox6hpZ~)9X{;v32-rfhqpI2_ zaOa7fu|k2$EnsJ}v>8ezQc+;^Q0R`BWrUV4E|uGJ;WY^s6zU-AU($?@pKZH;n0#2% zk_)A2SiGyh_i7EA!)%JIJF+I76fX@7ip3cmy+E}nqgvg;AO1^qd3Y3RE{LKPHslF0 zXtTv{hAS|OOz4ooD@cv(>GF0qPs`Vtk@c3kqlC!3b83MrC$!jX5n_BYjvD0n6y@F1 zhPq%o7_Y&fzLEV_+FZs}TW5+XXDI#Ka|ZBv+k9mjWvY5PcSL4f-bSlv*LQe{7sc9< zM-k<%_oUFcCGan5(JEj);eoVEdM$x-nqjKX1MzodE>tU-l?1B#Uwe2g!SzvJ8sLdC z0oKvRb%IfhR6~*nN}>65cJ0edS%|)W2TVkzG=Z&{aK;&(h%*WnQa9FO88U#;%VKTF zkr98`l#WDRBaY*^QB2LA3T>6kvw~v15lx#WD!#j-#Dws&vSI3hbU4yRsvA_rj&y|X8}dk3XjQ z7q|^O6S5oGpnhKq-r4AYSv#v?((R1mM1B}XTGvSEfW}&2GC}a($R}Mu2yLR2g=ww_ zb)l5S?^MUgsy_cJHAR`fQ(f}`7f1}Jydt~bPed09>6#Gs(GL1<(2!chiQs6u;wcw7 zq0a32MwZb%a?+Ml^aiKkj$%8)>Oz}Vh%wSsVFi5qxPVhq`qmn9^?`ImIT@UH{wb5N**oP0uSR#9ry{cFtoMwl(F zo3%}dM(;o!=nI(@!+^SK4Yk(RFl`4+>###Vv6FITg#}F5fYbvy6O^{&Ob7L@1M$`4TnkD1rh?L6beNF|$G}H@q6r96QP+iDE z8#}=h7RtP4#RlDJA0cGNL>KJ7uH>lFx8 z{Pgb=`J{JCNW;9NgIx;jR411g{&ZzXdUU#xlDyPbTD^^!vVvV2I#D=HXSV{41mw)f z&pE>cQiB{Ul)5VW#z^&!AIsgDffMaPtwDxyv6&pYnq{$xcK|0eoQ^bR9B z)rHb;9GlAP6o}U_ZlHqu@t!CZHWvfna`9hMoxcTzcTlU(6O@tba5R8n{zP+~(a;=10;-TQB&Rmv6u!=|;XK zA8&%TYS-fk@;1AApazrK{1QnGtrE1FD$bLGMk8}l(bp^javd~$>yEhYN?K5T&a`0}pltN9uvxj);F}m zU1kN5>s?ggO)G$ulvDVmPt#jXy_dB{mYp#%&DnjZ5kr{3idXj(&6Q_%=-1&}bLMt8quTzA4FqH>4^;5e9 zTht&gIgkO1w0I_{PN;mA{u@+DL7v~2M$J=YwsWY9JrMV_;})-N-U#Dh;h2 zLX18*Z3-Le6D8KeAu*qbTrU}gm-3{xE)>=EJ)sS+egRBCV8J$&?MBeFawVC9Q3WE9 z7oe6Qb$SNTu>@?FJQ1GS`kFiF6jZS$6kbS|A@B4ZjRkD-SzgvAHxycv8kEJZkBc+` z@_uG{FM(5V%EhOhN)5{5zPuUD*gLMT1Dk?)p_sv(VTM>aMspir!@l_ab8e^6t*A}ApzaH4(Evw3a!D9TbYZ!?Bt?Hxj|j;fa(+(+hal{?~WWEFfY3+G;`#j^Y3hCp_S_b z*i`Kjt__{HABf2*G&ieov$jkQCyU^G&|Ds(3s0&?asns9iXAP-aVv9{b@+aTlg93fs|^4 zPC>JI$c7;S1#c@QAAtfnd!$n8;lP3JC6V~x8z9hx;2bp-pqB$@v6>z5J0e32ZT2=m#nZ}LpK+pJ zp*8+i(r>Zx>;qVFM!N2aUkX(79NdGrqnL}N(KS!DBlulR#0)UCq|oUzKiYKJq>s=8 z#a@4QkcG;z9G=a^D?v(H$Z2*_H1Je3*mZhJa-cR{cNesPux88Ei9DtS?SsIj1vA>g z)3`#(+b)#qYJGVPcX=J5>8g&%@NQ@n`rY)FZ;ehKdr{pBMR^A#yYZz%bQ*j1tAS7# z(mm1>MgtSN?H6h=GvtD3;oOnzd_DDwqCMo1I!2$FZXi00>O$pRjpm9xRQI>ZyCcI5O1MU* z?8g9`o`HAlagduyl%tjZrO!IOD}EzK!qBKPsV0mtGTiqY)j{>tfYgpF&LKARP2_Z- zaw?ZXKIHDGea&~4x9{ORPb6Ka8nrBOcD~0@3jM)5`uBbP-gdzAz~^=k>#GiQp*FTh zWy;Iwho|vU6nPKyH(qEgOgqsjIcv4aHbm18tzywpvD8eOY@t{f=ABnA6Jw-#@a~AP zEwshU7!5XKiwYc}zd?k|(i^loTbfJ84YZ72EHqX-R8sTGT&Rlw@O4c#LnQtLy1;RQ z4h&}GDwK1-a=IP`YfDiS30cLm5pm@5(Y@Y?(Y3VpaKB>;&Q>F2?ucv*G$&|%KmAHP zCUBt?kx>Sk;ZAw+Y+?@+AooC#>jvraQlapAuerPz@=3kvFAr%f(_$(yIJ_Ie;e|$h zMG~#&qjBMcj1Qphkgl4=GX=M1cSJgUXw}yC;@NRtJJQZL7IHbSdFwP-RrrxkiKkHt zjW{lb=m3nRq|G)&piKSLgG;4fh4*(PT_{fyFRB6NH13GH1=C-B5)bh}I6Y8SG%G1@ z#UbP+PoPC1Wi>*jP)gfi18hr^k(go3pi=19vNFK=!i7?iC_GjWA}|d*pcaw3^17gK z`hk#$X(Y2FBB5wHQjIs{Wj7gOZxq{NH-fw)m9bAw!dN*El=6F{^wPj$n!lH~8Vo9! z@2pW~I~<>0=TXbGBfUmw(-|2%6gwU4K&cUFt*&UhSU12TcBBkrYb1AfpumpWc(bey zwb=71Dtn={0s*;VaZ0r;22?RoWz1zmDVMiU&3M#u;az0?sD6W{4w49w${&a|!}UgV z<)O6>+BMzx``_WlQ$cs{p3m+mE$DT=qf(mX7o~|x3#A`m0*XmyLMo9t*zdc(5z($R zM&PNHJnQAe^0shNMZ7$`s~hRTdA8Hj`12dJZ~9fC`ZC8Ti`KDkN2z*AV;Ny}&D%yS z>q6{`@|75Ad8sO}TjS*2QC)9OqeT4_)r4)4k`}5l^em!O(p#anC3eJ^AT7xpcsXIA zBv)69q%K6X|BF){i5#Jt-3FUSc_XIs&{&~tBxYhm+(_&|Hd|?FHe6X?+GzuPqyC#D zf~ashEdzTV7!3~OY>e|Cc;xarICvf;+Iph!i7*s)duP(6B!^xwioKCFR$An8*{hQL zSQNZo{rW%-wd@Sna6-iu2Y-Bl9N^_OucD-u&D-_=H)MjZym_hL%#(EkToI#G#=>xZ zkX;75mILd7qHLFlBvz1x;Aw7XEAL_9QaKMt>_`Q>ec9f&|MG$JP@{c=2KYd8bO8##q{ z+xR$Ezd-;t-6rpW7>e1^ygc5ozQ?m!^6toP#SZ3-Z&D*x_yp08{Dqu}^B{U(qHdl$RY77;awfCVlX4#sNeg$icv+=+(!G#=&0RC+~$UqSq8kTZTwQ z0NpVn@d@0$1?hX@CW!8Z`^91;BWTgL2a*?Bf>)_@SFkbH7YJ>k;eb;zj$J8f`9v%I zfdZz}cs~*}kDf*9j?kSYL0n^{8c2c5x&xYy1;Vk{5$e_Wx6p;ydnD`XGv1;g#*xXp zA@A1>ZR8pn2FrSZG=Y5rDOt;tXaj+nMkHi#uVipEIuQ0Rjh2omTg*q>(mS$ax=1=5 z-is1~>&*|uh$633B~^0NrKU+bypfg&EvY7`uEv4A-J~e3S=6?i8ZkK~BU;M1BWFJt z#qxUIAtUB=mb@3rlMV^eMp@JHU{}!P-H~wUlTOp#kA+YD(!@D7eG-#LH!HrV=E}hgt&htdmIowx0Sh)wHdVS~O61lvD_jH#-Gv)9Jv)o6EkA|?*3iE|k>4wbq#7i<@hz-7pcg?| z1CMbTux8+f!3WZ2r7d2aCAg7|_m&q$xmKgc<5MILt%Vx8%id5K4BE0%3dvNA7H1!JEF3hy8KUwIv5I3?8n=+XTfxtuHFWP5ns zyae{7G;$AQoWUWcHLklfEoNkt_d*ubT(q$Tj<9kymEur0+?5pZ(S(G?pGK?&3k)4a819o~AW^(4DkA}75a zN$pP#_CC3zI-l&Tk=RM2SFCI(1udt{Qk&$?qXymh1t5lSiN;vI)Pyc^=>dakag@m9knuo;0M9pXZr?0M&Sb?6Ww zmiIt(D4gfT%jO9&y+dC6|BdRD|Ik{MtM71ti?8^5AW9nA7`_Jk;N4N=_=&)giy=LD z7fRiCDDXQhQ?^KQ8)?e6Awz4+w&ZGr)*)+plIwT`8X%k-|t=-V3G z(LBjJTe~jCXjh~gD9wdZHs{yY!|J96I9PLCu@~|`5j6N zirH7Crsz^pRo*CmA}p!2Oe!-i^V!a)sI5pUB5(tFqeHd5pepPDH!bJNQM$yYRJ>#~ zG}15j(H$AGsnL3tFN!Oxvv9x1aU)ktK>bPzlFV+H^=FFx(KL?{JKL7#Eovz_!6Vx{`ua4kEv3OtlJI@|S z1AvBzK6`s=eK+4Jqg(#^#+8nEUPSrfB=B6raU;+2cnzpDV*c{d3}ROm zJ%PBRKZ`cJmCNuFQOwnOl*&M^p*4Ws1n`Ijz^dj!@W9;O2_$BdOt+?NV79r5sq&&w z2jRM*d4ps`nKBhK8_ly`l=TzEDKgJ`aQuNVACT+#eU_M6jC+!IN93QRr87arTLB5o zE$Ib(&O;E8=8ineAJ$w2bt2QD@Xi+0oSaZUhe9N|dEiE-pG5SeXzOn1;FRn@goL5Z zZ9yie!EREHh8wbFq-pR{F+!gmu@AuQk!ttJYEL-bAtYy-WdrU{h>Vfx5>TEj>xHbm z50aG92$Cx`$_XXzAT@AvYDQ$qwRu=+iwF7$DPc)oQqB~L_6_5J2>p#6_4TbPE(ect z7s@MAs`)+_Z)8YCkO_5Pu_M-QrF8=n9SAQ8X8HxIchEfm7E1b@4jl!4F)WJdfwJyM zTS{u3@lUEY0mcBoK(vlD-F2vWkK2JaWHG%eGrZHXZh;iLJrC-RtaXngI<`y2tAg3j z9Z44o&0Yg7DJXckzfH_wa{{-2LE*mKN@Ypx8#rId-~6-6>|rE^Wk&cw#J8aNoP%c; zqkKNP@kX+e8MQY+WQ_Jv+{+s=)=NvIE0yRqylLDUSxg;@ayzCF9y_K)=Ho9KZ7JBfIdnMN!*aO>%4L5)bl9d?BXF{X36_T?q>&e84E#i zDq^MXz_L%$D?|!btajdqHq<;=-YmC>jU>>(f%`-rY?LKW%!!OW@?=}}m!piV#1U$+qiDN2%!fl6HA~>3)E%Wqc;ikRp>6Et_^@Vd#X1J* zWkEb&-Z4Q(Wq2(n)FRIwi71 zlvC_D*&j|Gx)+Ip9;oi>a~bUqg8_M4v2_a*~Dt=fEV?2V$yg$Av}&4zE++|NL~D8CO6&Kqyobr1>xbM2Z7;Go`E> za*iU6P8X^8g>Pco7+$@^14XQ-(8{Xv?C!&4;M_po$0Wi24NbSp_CkccP^M0Q+;uRl zG}eQ4L*$91@xt;l=KFp_R9>GIfaSf@&mJEbopqHE66JRtM*DVz>Xm?cR5A`W%Sr0y(%#)8N_Z zS>Gehv*av#s?v{-LN|v|Sz-U9w}tr$ej63S*|>`{QVwkFV)dGlC-Om@rz9Lk6kd?- zaMKEO338^JOSHyZAbD{fBHM=fcqfnTsIAQfw5>0rDQH9i}4ZgdI`742~0O4i|WGM#7x7GB>A1A$u|nG zQI!dlxJG#M8W#!_v;)jY&M_PUuW!L=Zo{w#GK@1Nw6rx9QLNY#bnGgVA@F1F+^-CIqW!;f80^c|_%f&yHlosjFdZX34GvYYWRRcd&tp*F_NymA$n?B~P(!MidcVMj5y-LxQ zfk*AU#|^0tLr)ZKJ*!*ZYUGy@79k3?J(qeh-DIS(ex%{x*1L-XM;?d%Db^|uL zH(ySD-N;#-2dT!s+?P98-W{1E^~pIUC8S}LGEb_Z$?svN&+2t57d@e9@OhX^Jv3^3*|va zG{iPu=B4ILcxijcWt4PN(Iq;5A_)m172Q(YVKEe0jyZ5tzHn!CcF1)LJXNr+Yr96F1Y zdLW7{ZCp|i(`>a{f2)h@uJB#)hU;Bmx5i4{QNyV}483{(p9aXTMabK7EYu*^3{-iY z9ukbUwiN$FsR3y99X2IVETu*44vH8zBh-3ZJB}BU-42=HXv$etbf_2g^X;D9C?Q_kmI0=mger<&(z2jEuhP>(r+N>}o+opbgIRM_| z-frYt1DPI1n8lgrGV!5R-(aQ!#;89_eNH| zR}d*@WiKZ!|JzyLm6jhAmw|rEHvTlf&jeXXH;P7Pg{Z$J*G@|X)--m|s-+pGx`;`6 zumey<#l32mald21a6{|vT{paactw`fmC%zzQYvY2yK?p#ix`iueeY; z`h5BfK@K@sSQXfS5tX(##d22$*aHJdy^%HN_d}t5cAx+|aRJvw9H??USeYs?D3TY) zt)vU(E$zEw1>Qdm=X|^AKw3;4*i>v>qZ?nXgVC?Z#dCPQ{3^We_!N`4h4(;pcBIzp z(Ehfn%?8W6BiE9UvuYuEBCul+ybgRpwc51GtQTvidG-_6A@7E~L7FEW_F6Xk3T5@n zCY0?$d9ohOO%yGg5kAjioXXwMh+Peg!NxV>3}MxL^I(zb8ef?~(`(mS-3HMw6m7Y1 z*BXQ9@Xzq3iM@~sLJxsPTd1vV_xZ_tAy-fBj)-aY5STXeVjyW7h~j^FZQpNVqAAiy zAym5&spOzo7;-wUxWFdwjw)yFabUgnGd*d(p#_R0Y>FpcltS+BrR*9c^+~P@M_um? z6}90T!Xq}?k}QU_{oVYrBWa4|b|GFtJIlBM(_Wfkd<-vW&HcjueBF+8(RA_-tWayh zUUn!imzIWFG;XDHZ>SApvQBlP89MLJ-;wY_lAqN@u1Cfm$ORMpWgP-krxbWvCnhgs zOFO_MzJO}bfb$>T4P`}zL1W4FP$j&HMc9&Xq3mTqAxI61A=bZt=)X?n6;1GZVmS?A zz~Zxbc6dQL|AlNpRH$c0l1V$%=RL~ZkemFVd5kb}xlc1yrl+Bxj#O0OAosU)Feq<5 zTJ8gbcSl|OASK`asNz0rMi<@X$vs`<_LccIoi$+e_GFO(eEjAW*^I0u^kkc1w@%L;!vt8)Ej=V3_of+&2M6A2Z z2E>&=B?*TFb)ydiTokjm&6BSl7_Y>B#%k4+T(gNlgIzw0Hm0@NLuVM2}* zIwk#Uec8!Q;7C=)Bh>@-Vmg7W55z_*b~!7Rc83?NUC8?aevUm-qpMr1($Y!7Jdq!u z$|^5X>k&NR+#1oqU&zh?Z-+goZETizm2@MYbXgl-ugZwFAI|2$dJoPX?_%=b!fvszQGm_{rs<=>hT3k+ zSPUg$by-W+3#pweY0{Q$XXO~obR=SY|6^8`}Zon5JUI}U&n>w!@803Z4t_MJ9@&d*Axjq|M=VGV+cQSk>ShUI=3RrxB)#Y!-zgmn%@_2zq2#e7jg#(G&)du z4F}mrjY-P8BmEP!nhI3y790gGV5PapAf-`}$%9}U59)!OV4;EUC$O_+7>22)0F^6n ze!xJFU53${h=S=)#t$3Pyx^s3%Bw9JU68Sb_d-7DX(4GuDdBbX2<$qF)E%|JImo0W zZ;pr8b)FY8Zx5+{f?3G060E_xBhqdbb5_TkF6G&uw%3WW^MF}KS7w;N87+eywStti zkP}-_{fdcJ%oVJ|IMF|+BF?np+)3b?>w?#nnV>v5sI5C68zE)PVy4fU=RZ*#Hd9D$ z=cjtvUSYpvR&8GIg=`pTO>;vSTr`1gn{RW?sJo z!%()@b$16#Ax694Z~yMU|Ks0IRLGvTQCULK^3CT;+=0ykrSnu5TW~>Oe3-0G3~q$Q zk?+QvQXq(Vhr5|h;OAZB%uQ+#-QgrAJb5D*d3;6swyR6!C61H#LKZQ(Yvf?Z(ZJj7 zcvi>m)pk!{gvSEKDpqEMEN$REWp%cABS#Am7E!4#;JF`*&h0IJ8?v`R!*`T7_0QH6 z)oWw8PetIM@A5@_CfNCpx~5z^a-*P9okjU<_UD2f+k!$JWWPdNx^#JMYH;iJV?!Rt zlSZ3{*Q0!3kG3H9K*owJz~NTH``h5mrQ+ytBMWMJ3R;6ER)AaC?#YL^Bk#_KwGP>9 zCjRroeK}Z{;M)VB8wdmE_0WC?5fQ!s56jp=+e;;inG-*Nn)nGpUob8353eFrro;`A zYYDA|=M%W9=CuQ|5)&_^){*M$Bbs^*22^uxD6k`!PNDTqel`bSxIzQm7s91L^CI1d z)d7ngHr!UQkfp?iBq3&4qo2MhtQ(@O;pO6@;YGgKAP+$-IX@6JBWgGTwN;e#%nMnjJZ0 zLCdD7>J+(Ia#X_&RUaO7&g4@5i3S~|un~)B$d`5|aWy3j@3pNCx^i-eJLAArCHz4A#Av$A` zm7~KCr0XU8N&vuH2xx^o;X8MvM~BvV3$0vhV#7A97w|ccS^0`i#lZ|`KG{+2K#sW3 zmQAvRB5W_NEiXWvBxzZLYo21d4)5HN`^BLVdDiv2|1!_UA`jGF;8C8m!6(C+yk>Zi zdm)SI#?sKHy*%6{#zLg-sBU&XPhzdenvdBCEam_gGeymf+SdR1LFC@*+5uw>q{e|T z5+w@FVLnkBfzVpol*-vMFn8<2x*->UpqX}>e#Ri+3?y#fIrNRZ$Od%v^$bfYtgKs8tsKF=ooYd>vq^SiybDteTS+{BgM!= zZ=*2@-cX*^*kEpeA=xCbKiIZkz{>WD?fM1}9LesOEBgUE+NEb!T2%2^_70<&XDpHR zD^q0YKRe*~ea|l-$r8A``Y4%CZsc)NqC3pP-ZrlA%VU~tRdak%*bm4!8>-=d=p6!< zU-N8V#KFe9odpXsx5*Ff8|o-|p=joQ0A({uRkqm*e_#nC+y|^%>TX%-t{BPAofJFF z(|&Xbs-MlNbjF_ipg-a16OPl%LTBie?rE_vpx5&ty?6gf_soYs7>aH%x*1k#<)e!0 zI`oKtv~ZYDh$yM{3F+LDk;h3C?y%IhSTm5Jt1{0stA0Udk5&WJS}qv(BX(N#{RLfM zf!gB&(%HC{AMA1ugkm5KmyVxdEkEdEd0JN@eTR9kIao`{^xeM0(=0&kuv9i4Ky@$5 zu-hA8*W!G7ht9p${*2w;X{0!A0FJ#TZjhMVc?gKixfSQ?a z=p7RLX6O#1n)@DMZxSeUM}K~Z=Q8`WLHA-yZI>f)m6vhgEW$37H@W8o-pss|{HIN3 zvhNF+mLTUxX0^riqA4CXB^dSt>S&-MY}i{6njqW@jb3y^Z(witL>24KU8uvo!;ZyQ zW9r0s69;i4d7*hv%+Rf%qejfiMZ+*}s0N`t(Of#g; z$jQou+VMJdg8hVjdd3siIZ#67DjcY^3p#EntKJQET`ND3(~0mMda0e%am*~nm`hL` zV$dbd{{itlP`kxlx_MC9tIHFyvP66Z&Aqf%OP8AbK@)jHv(iH?yT||i!B7BpV8jjl zsTW|~BeAmdcr|{A*MCD@q{`I0v2w<4EuVL~%G2Jo^nmVl5oYEu-Ay|F;0*f<$f9DX z^;q7o9^G{UaPP>I_%L@9vt;iw_6M!1P+^5EM#j?pB#qU=Law75t6sL;8~!$H!b0CD z?h-T|%Z>V~XYN}bV-KkOI$XVdVm7tE^-ODdd$dP;LQUf4Cw2ecajr=+~q z;lv;K59uf55<{t%>VA0j$$mh+XkS)k+#c%>)(_G>a{YvM^}f68e1jrCkS3S?fLnO z>Q%b;BKw2I{{k|jg{qsWbgx3@hwqMPVc%c|9Qr1;G3?q4KctuPGUNFN)E%+Nk4}p{ zKX~m>0G~i$zoeV^z!MB~Aq(h7OUh0zMRA$np^T}O3$hk&1LFcmcYbjEs(k`_npQ=pT1+LVF_1=WR}VWMD=vk+NJ9 z_D$XqDO~lTMTXo$o>1rKUV!C@%p>}P@wCzyq8>0mL!CGqx{Yf=>bDNar|MHodRU7Y zy)WkNNe3+}V3pBtyZeL9i6X%0wV>e%?;W{GLc^S#C(I^69?-bK-3RT;(480XLzVVg ziU-n>OS=@Y!{5w1vi}j_{p}nG$>st1VT|>FPJkt@5hy)|A55uR*&0hA!LG6jFPrjU zE_6Sk6ZQi-wnCjGGvW&A>dGF_%G6e1y@o;>DnE?hJfJt{!p^5nG6h1IQ#XE?j&r~^ zO;@XYwWlP05WD-14OTHN4C*yLcu;~LekX~*aI!~`z4^h8rS!xKH%tYXa-EX? zb$}v=Hzhq_mLSOo&P>&z)qa_EP^I6nB~3npQGB(MH_gHB0k*Io&}o}XD9bbdCE_#f z>Z}jp3-ww09JI@0c?t}iya2o#%2vn(`u{a`#!3##PK7f*-Y6Fsk_ulg*~kNGG_`Ry z#5O@_=rt|r3LM|kOhrHc#(c=VuNKTEPB%YJC6MqJwU9U|SJ#&*IqaGLr!!Cm2ZG`` zpT7JrL*>m0Lbdgro3R*+mc#j7-1qN*fdHYjYK3|eWL^^GE)-?l#|JGNj#Mt+{$}AK z#2r{ID^P%u37WV@;5VOcl%u}cQd$MP847AT0X}3$6bKqecFSx0OEEJ|z&mZoa|_Vu zd*$`p8sPDv7fLa+9q2KL=L7^Dwhg-@Z+@ipmc@E52MD%CKos;sxG)fkj0(6}aFWgN zZpfr4G+tR=ztj!Z10&ZjbuUDi>sm$LA}=_tn-TH^6d(J{-Du$?Yys;T;CuqV)BuVA!?cSc7hlZ=7lirvv~x&bs?p>BgYL2RaJiWB7) z2;N*nKrTawI<*pZgj2PcV~c2*o@=E<-yOy2dA4FI7pb0^4`=_5ZaHli_f)<=cnmmK zxi*xAY^1D4aKa5Qt9dEqLV1UYA81)p4V4ms6Ejf<8`5n+a|n;5d<-~^?UM(J?N7$e z4dumo=MMP96+&0}-P}&SCPHCawWBeL)do3h6L-vviU}CcMK2~z4~aio!w&gqd7>1k zV*$iAO>M=Ufru%{p_(gC#EdM(Nq0Q~V<(S|$6)rwCdF@TuP;`i0Vx}!MQi49~`bx)d>bwi%Z#IvtHm@^pQ zQ6L&Dp!auVs-^n%6ukJV$PKyr18o8V8Xy{s7g}K2RNL$K1l5l0Zg4AWNApG^%h71kx3*l| zZ7gr5dh|eVI=+!cU}9ic)y7Z4S+6PL0)9sb5~;{?I^$(al-mnHJiFL{QzJ z;MS3_ZXm%@H}{5^QPW)|gM4nG^fX7^YLKsp(^c9J4wQb+*`a9yZz^Z6SE5+-`4X+_ zs`kmb>gFuU1#E<#m{mUyqk)r3cp;|#&?af+J0oa(0Z2&;#g`IYPSq0LviT|zln*|U z8{XWQwR(ad9tE>WDiyX+tB>zW5MQqr^Hi)mygC#ei0^PPs$Hzi7~R6vzL+ls-Ux@| z7Os^V{>0AQrZvs5A@9?G)~O0bQGu)tXfjV=UiztkpNcHDSSR9(4Gh$)y7HAOa68S8 z+XV8wT%2~rkRRng zknMUY$^=T(HjSe5cdF^`0 z1}P#FtQIkKgLOX(wZbuX{32+Am=Cx>6F<|A3>6x0qyDW9L%Rk<-7+}KQScrprM}{FbIbCMW%H@w2TK1jVLm!AINF56yCb3uXqP`G z@1uETOhgA9%>&^tK!(sM%~U?d^xuQ|3Q)IXQC9W$=zCgvvw} zOntr)`zR=7Ps&L30%NclMNztk+v|&z)5|@$a+0uyqX^6{Q22jXLURp`<4gDr%lDfE z0d)t=u6Lm6iW~;ai0luH8~MS@N`2t^f#I|;M+=F1gx=F3JGDf8<%bG12K+zauvfe9 z_6pe2GM!zNj3<JjH&sfH`LC{tep{G7+%c{O~1Aqj;31?0RGmR2z%hIlOb^2`MSC zIb!MBn?Kk}Z-`C%ZVYFn69)N%Ax_v!UyvReYV8qm3{!dDig`niVe{@LDWJm)bZC14 zB8Q<>kzD-xU}ksm<5}W~2+k0uEMDOc*n31D&{Ddvda*O2ejGfst_^~48smE8KpTu1tXVcvi> zDC<&$`%P?0x0J~2btg~QrZjw+mai%NC5{RE2{AKmeAS9mll(9(f53V<_jHZ)^@Cq{ ziu@XyR~rpf+!t^?A4AMKfQ6}dxgZy-_%!pPVZVore0S^9HCH+U2doKx7)3tW14HoP z4^GuK$Pzs(qpa>pZNKA(Kh_^&TqJly(_~QlsRZdBPxc2BOdHJ8`YEX$1)%3k8t6n@ zy-;o^hL)q@l4I?tsI|YL-<;&Y?zAlQ@5BxM;OudO(JZ%XN@s1W>`p?zfM%9p@28EWo8R{bcV28TPaDKYWo)i=zaHri zI#1XSnD446J(+yyzo=5#HGvn>;kl~YMslxven26aFBH9UxR@o*uC;!2frzKGP4Nx? z=wn>sOy_~_#ZCS|r{ZYn1G4SHBoV`Tp8ek$qu7iz7s)<#=7LD5ImlI;TI6^CAE>cbpGN87P_9&vhD>HgA28* zP5B|uXK?%iI&j#hvw*s!^8?*4s{67BWR3#NT{h4O(3wo|Lo4P9(arEZ?yDDa^@p%$ z+d=3%L{qkgp_7fV?LS<*4jYO<&eC4(n z27@mk%SBSDpR#`%p?h6MrQa~R#h%!5(;*UZe&-hUEUvtv*Jw#?UJv?@277FaiMSg^ zx9<$Z3>EHKQyKQ)cZk)=egz%PVed|F*fkD*_~p#+4IP1?cI5)HTe`$RkPcm5T-5jFg-xgJIcp|Aac=e70Fkp z46nm{AVNzd^`cy5nWFFqlM)+@S|)d(I@7D{e3*(KOgh4TLPkW`y|A`q8d!ge!=MW zgDIZWu7^pt&!U}4pf6yEe=v;-*Au{PIvC~)<2>MreH&Ow=TAU+*FJnOcrSZg1iSrn7e=}Bmo#+T(#L+YvjidR@sR>a{+C3 zheLKP+aKHqxxqaAVP}(C=MTGKT=wh@{eV%0ZK`Qa`LH#fieGs__YOf_#l%qsnxaIN z8%8to5TOz=w3zW5?ksMtoRB0JvfU;qI}=R35N;ix9j&6lHjn7ythn(WA#EIpn+U1s;b z@B`l#iL4vuVUrnn%yG4tl$FwRP0Bu?`)s7g*-+tHxbH2X}X< zS)c`@*}xBSNYy-XDCgT-;XAUC5#{!wGTS<4tJ;_sidqJF&=54d_Empq1^(Wl=RBo$ zS%pgY)Nk_xZD=7+Xa{2aZGa2i!?yXsuiN^-FK2lS=rQ9!=@-;P0qZx|SLcudHpj`s z2V|>QWD&5mESx)$-3!@dKcHO%;`m^>b8KVd&J;ujlR&e7aU0Lq?%6gs6= zxYrxX9aZv!yY~v!%>7n@1_-X!w?i>!*6R7e+&1hdY^D9}3}3o;i4n8Ybe9GcenO6r zO2sJ*JKl~T_+oL{PneIo_txBqqq$(Odq;Xdxn9VccesB~8@UFaFV=fq*N=}cU{r5{ z4>I?qsTetz=6`k`L0-_kA3{X7zUPN*{6+W)@d>bh z(A2}uhG&1kVARFyvmcNNx`@E9+!ZZMC)naR4JjN&z>-?Yu{c%tWBnty#VC^j}opNgeT*I_)+ z2VjDkCcYtiSbgiXBx(?^qL(hrLY^>XoM}8%Dh_7Hm@sq9@CifwMLM`@d$BQOlVagM zAl_1Hv)8{=f`L)q#cv3+mZ{=JQ+9 zzl>S@kR5rjpHSN%&RBKGlCIKns0D6Uc%Lw6&iF}=;?B0!WJgR%l;jSmDx!nr2dgRE zPsm)!D8=pgwG@9KVmAJgJ+RT)K;vm*JK{{GyD%}~njP!~Jqr1V-k9oopCr;BKV&yLfPO)` zfRMRlrMrKCADnH}Ri$@jTV|A3w@ z1P7dZrX6&j$4B`$F$fK@-z84c(~#44)rzy^BfI15WN_JU?{CJJ=n0%=mf@!4vk~ zD;lR|G&Z_JOz{P|E73*IwWL71y8^)v2`Ju>5hT=_B6Qd4@F@wf0~L2e`X~tjT3E}) z%$(KYu|}B_+Jm89?3s{xl*?+zgq@JxFxR~5^p`SvNYZ%!JlQ1s0e@x-#$0*=-ILr& z8ixCc=svgwXkOr>=JqE_&crGXAkbyc8&b*6U0P7+S|1S;li@tQL-*sFIIji3?M20e zV;L?2C1219x3OLQsGcB?d(Wl9PsnrtcGtYBx+h5ZA(w^8en9Lu(-(Dv&!Qzz; zRNMvo^o;(jDMfZp9>RPeB11(_K!iW^rd(yUR`NxS8|I^szzJ?y@6ylld_tlZbPv1K z8FX>ZX5ailfAWI*DTyg23wK_b&kwmbrZBa}oFdD5x$3DOT}^Z?b9 zR#YN%b~7r@b72ERADFKoN?po$d_w8Wc4a@I8y%oBsjT!`kMSAI4`2v_nPPXXLzZQ; z24m<>YZfYMK|2(vDGkWh330qW@r6EJH8Zu4E&-V-disE7SQz?(3^1}ccLUu+CH|n1 zzad8~BCM?mJs+p=b!9(c7jV$u8X;h;axSL~RN8``#sc<30MhL`{E#`>8?pmqpn5210+!*~;_5-?f2Q@(s)O@qk zXtm5hg)L|jT!;c{j>*^|jXxO^zkqe#bNUZD8w%pSO*$6(bTXR2WDOY_nnwD>PFheu z>A}f~6EdO57hed4Rfg8UU>S*W2kjfq=WKp-Q3ksE6dkxw(x-unThPpxkcO=EEQAur zrKq&EOOZEpNmIDEIa;Q)+yaMiPntcTVTy|w@#c_cK+low6VlK&0Kz^v|2lUh^)Y)Il%bjb;ZnW@*sBBz>eYc?bE*?QtEFHVje>`9p zAtniiGy@+3H0CkNej<#>Fohs*_6Sk?e*egYS!*Rw`hwX2LXg)~5_Fexq34k08?tt* zusPxfJ-L4uNSG|XVLlaY*q3s);d%U@k*M6Pc|M`tz_pc(&%Rs-VvuZ~e!)*YopIZe zPVU^W**U%JrqVYUba8v}5@Z*p?|f~2WC<;(5v^MT4P!kYiO>H5q`K3 z@P?!&6gC-C==w{3$RYJFAQmT;HMC0q#q^#Za@(8iziH10v^{~-{h=G=@wu;QpVB!y-poR~s7J}A69oCRtKfNeT@gQE zWzxsEPRNl%smmka65Y|{y%uaLupcP3*q$BK zu3Z5A3Z_eqY=fw9a|AClppFx2`+c|$^1;}_#z@*>s9yB(Di`El~S9z5GbZjht)+S6Z&>|lPf!PiH}ak zz(4GC&h)w|<^|a$%+rMQQYWPMhltB9S)p&x^XRbqq0f;{7vcwQT&%bYw$vCC#8oGz zW_+6eeD?|K;Q1mzMLRix+Y7D3eL&ks=d#MF+3*|hW(j4`k~Y>JwtY!_YHMhDExpw3`~ zbeFm@7G}RHbHnIn5*w-?udnXu2A*UHbDu1j{@m~IN}V9@pVxzJFweSyCZ+1g#X_=C z8?_omUeK#Tp<Lx5}Jb(Fvm&$zw)g0;s z0IXuuHu=FG{e)3XtJ>JV+fl4OtpzQg&@cnjr6n1&RHi|TtGV85x4}^Dk|sK9EYzpt zEdI)o@r|e!(?V@fq6EeTe&~Szg6`;s`gx_@JlEk5Hb2}8MJ?xI(x%7pYJ+H;eq!zy z{Hu{mtv9EX!|qMQmhytF1KqFVPrU_nBl?vTeL(|q1~=mRR-sE${(vh^t?V$Xm{4)` z!>%(S1)q2U)h`&;Txo#HvcRyLe&Gkdp{Dc$8cUjc9A>Ya1GC5#VK?MiT>@2ZvaxY1 zPD6L@4_e{@aafu)`K)}9-FKU!4ZD{3hBhd|Cg!H&+Y0>f|LHon#JY7|+5YcV+$JP( zY-jbqV|R=ykdi2$FS`f`6MTUn_)3uO4x`&2Jy%pE5ZZF_K0gzh&nME%NA}8SR>A$+ z%Th7)*q8`w+mF59mY-QNIWdSR{7dsLg5(;_k3ihY?y9K3v(|ker5C3wlD8fxS;- zAkH@C&$(9k1Dt$K=pXhLYTj;=eZ%PH^8*&cIIh^K7NgJ8DE)*?Sp4m!x?A?d9>{?E zg8A5qyHreLbL!3?6EgZ^EDz{JlALx6KjL&u;Z6rVk;|Kr-3rBWqOl2>cU8GyH1mcf z+I7`%17`|cd*~SSggVz)k@2>P$J@8DGv31u`vvp0v0JEKjH7gnv=d}qI2CzAce`M2 z`;vlmdXfo?{Rw|p*qjZ5-K9O)ag-Fk5t<=NyFlWMaQ)8&YB$^vZZK-D7?Zg8JtPb5;0SBs1}h?Cb0&sMAh820A%A2Sp6qTV}Q1! zCr;A++T)u{%@@k2u1i9j^Ba&o+hT%BpUCSsr7^fglo!B*eZf=a6SnS+X`4ghQ~Hds zuSolb2y?wA#2Lj|asiVI`nS|48js(jqlzZ3ra8mfdv*K+hML(RR0^%^UhE=!6eo!H zgkH)TVL5ezxReR(?rZx2j^{hB5b?@R5SH`{MmIY)vc~MY3nv-3=wxoHVH?! zh4$@16CC4pfUM6Gc_t#nWRmq1eRK;+|KJYutuMBO+UjJzMa%5m(?SCC#6c~jjK-*8U$<)y+d?k z3y>Zm-r86ppNMKv#AdzWC^H4g+R_9Va^wCTq8qRi&`Y|3D|M%ULVrTz`BDj(npM_= zMtTO&7mVo&d#Z``A*$2w6aBiwWHpW;<=#s5cuwt0%;F2Wa*eFj*4Yx&UdK5PHQOk9 zI){~+d1V!Me~}5eJ#wG0!3|yno_zXfjO=l6VZTFGvRW)N{RFr9<)-$}J47?~=rmiM zPyo|5JJ_BmD-%xa7PC7Y(Suo9L|u?vux8d!w5!YJvWLRA+HW|yXl1&CC$-C|vwVEQ ziB(f~6|PZI7lvSe>w-~jDsu(oSTc*bup`TTpycX%XVY6(5zT}=vM!i!-QW^xO6AM# zK1s;Y$~W{vMA%t*u`;0>$}_?F#}9C%6U7|%c4wo5axcWAB%(3Lv0ElM2e*aOu6}^6 z`dPn`Udx0-P;ndP>)E&biM~}O!Dgi6nJE2)9aI z60%<~s<{*`wQ&vT934(Vxt}P9Z(wd$hB=-UvuUOm%D!NJD)tv@2Xp9daq`EUtDKM^ zU|S+HnN%nV_CJ3P?kB1YXnL(J!Wc{M4E3(kdP?$8+ywLRBV5w zW2bdjN$_O{*e@8>KD0^*s~-a0y~ZXu&3Z$xwU!zy1lgnNVnQ);AJ9`(QXBArZk&$< z^CJ5Nqng*WLiKqi3kG_FpqVAS;kV}2@O!Lt#L;P^T!jz1YxbAkQQ4ezhE*NBMFthS9S*FeqZS)j4GYRAuLlw zbn`vq2h2}7B~x>~^CoE6_%Zrg*$-IFaj`}fREE9R6w%n8aBU~(U~WO+-?{sMgp|vM zZEWsib}Qv-j5+m+Wp*&<>jN6-h21t;WxU1N1fs68Uoc<0e?Tg8q_VsJm4x`vus2L9asQ83%F0Hhin`Z|faF7ZZsEA3 zFPIo0Uo&$rdk$lfV6@V#x^Q-bMv3SfS5`~6@NewEX0_vqd)b%t)*9NC{RwMPd_rm1 z9nWY28Ddao!)Dd_2-F$Xp|dZGtvDHBUWgzB#6H1d#;`BoZ#|tKAeu;JKp9OKpGa`^ zHS8O<4lrs^XLg}D+8GI}y*v?~4Kz>XjchkF;wEy+D6%)4GD@!8G(PP3aD{|JuX1>n``_-9> zWZLY4_8WPspBXrYs*;_JlE9-1;XWaz-R+fQKIyvrs0qxV6t2hcfCzKf-O~G$WeXB= z5E%9o+Qx{fG{i2w8+5Y;s!;j`sS6;^cy;%TDG5fLRpx|T)eCj*7zmwKNNkBJE&ES! zc9P0YgL1F&G;v?qxWO+=oj_Js`eFAzcM`ssUnu>6jw{B~hdwYF z8|ZQ#)W3LI=96eY4aI~M`WrIHL!BpMVE@!wQ0US81+(|uP;iUIO*E;LobcjnpyD=U zOapFiZ&(t0q!sQHGDEX9(dVmrZ}K$fa#M3qH)7xvlI>x(lhe}eqcA^F`_#IM)j&Fm z&_%=jg2X)1-|Xpv)H#;<^`b$4H0XE~1#N5#4VJNh z1ZT1;en4e1(ES?AMGN(}NMMF3JJ1c>8xjx`F1@{O2Ang{aG#Jl0#u)NFq^bsR`N;E zBOEAwLpwBsIYVCAJ=j5lTl8f=AlsG{<_6TVN40DXh4~4ZOZN?wbq?!#8HbXA?zdi0 z!wUSE!GbY`5HJaD@sj<7+Fv7COYb?X>**%h=P2)jKI{eizws>?;LN58EtMC{*78et zyF1)5Yi??NAe$Zj>15LfvxT%X6#-^j`M|74==u)#g~P1T;ahr1A)QmWGRZdE2qQsy zr)jktchvIsS~LCV%*^!wp3qA?pi&O9<1)}c;*|T_Z`f(vTzcmHv#ymeWr$A{sJIOq zEO9BY(w!ti&s(&9{e*vLg;Hlc#Jlmv66Q{6g@Mv97-2KML7vb|oWD2he)kEr^5YJ> zNXw0?Kfp%MJnmf8KdPMf6In1oRok!;iaEOnT_p)CW`X?&NV|pVQfsAuva61SYzu`Q zD1AX4D&VX@NN2PnA!jjvfL`0c*VDXUr#q40&By9~LMlJhcG3Oo?&t`6b=!~;2X>dw zNB1taAJ8RQ10}UY(7Alw1V*w*Z&ntZMXKewGA1=t>@s~XOwO$;e2>x9` z9eSQu_7fUK;J4_VE!1orriK$`fZeURHyCd3rd!;ple`wHaKm#*%d}9~jNs}HJKNVn z*9Jp(nlJmneC(se<@VMy$hrRr?i1P(pmwQFx*dfCjF`et$Z!|xDwj5oPyEktCz~4? z<{=C=;SPl1pqQ|jpQwUY3AzW!Uz+;yG5b5DJp$)&rg}04NO!s8gt#hNBB;~oNieK~ zCaIqvV2W(kFTbFtRXR^4gauOAMjBP3x%G~rYNEjz!+wDIVIL~CdZecV^o{mFzrJ9E z(UgaqFlzLdQYoFk1HE;MAK!J7hAEtq z>aSCB`S^*ty1g7AWvAi#m|uS?rM_WJ;=h?N!(RLEggfj{NI*i(Ch!2akuh+B9&f0b zB0Nhk9mVlaOh^Zm9cdR#6%n6hd|H)&bP}@YWF;JsLgVXQEV-?Y1Z+=>RZ}a+^n@3r zic4LUm|Dn7z&4Q{nAykHrYl~vRj$_)>#omIO zZs8VS*%wqgKQ?nkeoi+=?Hn}&la&R#UgnCf)7dl7qa2MKn%2Q|Zna8l8E=u0k@zRdF_?C=6^ivpwZPj_#msYaEP8 z==(-+pD?24jzOjMw+zom_zBY(eI9Pg&@D_%R#u@9Gkw6cY-1CPy$NIDXSu?)%4rS? zbL+yecfOJPl&nzQ3+c`HtSh_3w%DVL*A_(_6%YG{sR2U)i#xjH&Z!80LffK~y4@BT zf0#ki@*~^38!nV7@m#E{EE)||_XquevhXoc0(iYW1K!Ln1M}&?Kb@G)tt|-q(^VSZ zkx=#lanTj_o3EQmcog?*s`CXyoNzlsgRxb)BO9c!g)k9{23EBDcuk-YN0S5Mk3hYu zo*O8YW-Ql;lrEs2RLSo7k%M*Hw9#pSiTg8&V&kQ8o zq-iK-qr{Z9CU~-jaonAuCMTqkNyQ5p#o7GoZ)E{bO%lV{u%+b76vN*7{52hD>T^Ty zfI!$D$`^h5{s~7q{b@;0z7tunu|(KHGNbu5XpuvIY%-eroNusYsDD}64lJ;VY1bYry;r?=8Q zd1%5oIWJiDn+;7?HTg<6E|ISnOu2bg!$|MSY0k6Aen6K;h{o*!-IzWJUKbPT2gHg< zWqvu*TM>o`${tI!Ax#DL6{6wSF`D_lCG&#w+sldK30<|z?2wPKf){cJk7%27mlsSJ zgL^`6q(PNc=sxNI{x|tNU{)N6(BZ~6pI`06dEAFm1S)MoHzoShdn9rVO58emqAvr| z+Sn2ONyHAE=YkOpl)Pa-wzjK@yRo5nWd`;GaAq;-;evq zPUeVPkb=8n*t8c5nvnMxzXQ727pj4|3U^b531hXhC*TGhA_%C{UWProt#E;3tjskK zL{=hdj|ln}emxHU37KO+o!c|0B?nX!Qse-I4ZtP=e$S2}Si3`j%UjF*gn3j1cJfrM zb1f%}4)hhPGuLw7pq7m7(#)%e-C#Wlj2mG;U~h5!cTFB_U9OLm`+>Yu1=>8X#cyW; zi-d75fG)OdNZA415m!~%50wN;T2)SHiPkbkm@B-yUB_mJzKAclr)F zS6?IigzV>p>XRzNj@wRxBfh%0;`lPCPDHbp==&o8j988i)zW$ARpG(3p9TTzyFr$h^7Mru+=c{)x8@-4iO!Mm!Ie zDl=QK&C*FPNHYR0m&k@9_H565?O*_VEr2m&PI~B4UCyHAxKjA6ob zGG836t}gKVJsqO0r4_nh8~$9JVK?*FVV^#ILM$BA6_sqTCkX7foE{(dP8lp=( z>4v(kw1n~5_}sl7WVpoUk#RaO>~m0MY=I zeZeT^@l(Cg%PFQbN%(`GD7%*j-=H_)0oPs-@}NIS0t?8pUoc;1V+l_4jtF_s5%!hQ z6OKdw+3oHYNPf;eP)a|crN(q&8cH5?yCw@4jAnUs5Gwg?yUOenRVJecoGT~2&#LU6 zhBu>x5R=gjn^7m(p)Tn{=SJEL$|WCrkotit$_jE`vRb?kjpyrT`iUG5It^LbNQrWf zRI_Psfj(g|!?eI_Ua}J$N7ZZSg+9IF*BI`}b(@C=X2X6!T|ycUJ$%?5%SgbBZN9&q zkui6rkMn3CUb#WgT(t(8lUZ}Iwh7(FV7SxINyz%2;o*f7;LpftW zm~8^Qt`OVw->?g-9?>eh7b(K-flJv>*p<+^9bGyW33kJ@)$T6=3KBBZS_K4vFBDDI zLI+fa1gLHi%WoZ!nUqvAG^*iEXPwM?;_D~$dQqu3qGh)+n-J4xcS9U7!w`^AG-%vg zF`AlC2S)x`tz6~q7DYHThWAV1|2{Bi8R&!lxIyfwoP=RN zV7c24mB!hYa91|{@ z-Afkkkirx8{a5J>l1XSzPZ(WhH@@8bjNCe#4;a-9y63k>6=o1XFLRXnKzNA~8{d`8 z@R)>%+Gsva5v+SUVQ#noFnZ{>2gG2SEo;^XWvA(@3d^C9zTsq~%227TP1hV?&t$-_pYV(JDV6&lhP~oA zSu;7!k6kd*Js&XaZOFqspxMMAt0rFPG^;kdgac5-_pPPVw9SUQ!J}q|2o-HHx!0)` zlwSsh-HxJFU&1|2CtlA8!qa;W=z=*^ zw+ak9?w$$wG%EA4VRZ8nEU8{_TwccGaC+ysShl%H}VsVZ0CW)=Z-D=W6aJ47=+#ye3|muaLsn!xVS%O9X4tW%+mu&!|BdzN`3?t=YV=K%I@d{P|# zDhceaFa3bDIf(lv70-kvVRSiRWsS*ahRn~%o+f^WQOzT5P`&!jI)ZM;cJftSPRJxq zYHJkk{y2+qm9}AJF_j2+ohByW4hqa*rWj91bAdP)JHf3t;cTfj`hpR@E$-ZH9b8o%W)f$cPi>Cz~F!^-iQ^k$`huJ%< zXrvqFm)s1*B+P?iW&fq(B)BIC_7kEYRJR=uyPA?Pio2O_LwdT_9Ak!!k(~s)JPCy3 zo)F!%BNU6auXQAQlyOf$K7Jr%$h;f62U1DkQQKtng2{*t*?jIYbdp1YL#sXgiK2&F z(pMR#nfq*9%kTl6Ij8cj+MI+;ffdg#fc$!IPP1EnwM9fZJHcZJIcZKAE^zpgr0J8!KUm_7+pV^owPcA zUWLzd=8=zmw*C$shfuAd3F-P_O;Gp?M$^@yrKi+#h&AldWkJ_c6h{6=87&{mWSHaY z1G3&Al`*O8pZa1JjE)86bihh?jjQZlVlKO}FW7-8xCJ#;%uc(?0G;v!_uZirxvB7* zor=@@^^HFMXTsExmnv?k2lpp%<|>Z_uK~2lz>dO$l=X+TQx%6y>oft?3jYN%3p-%h zd671B0}p)d1GRp=VTIu@4LcJd=?3LwKOo&5>KrwP{{8Puao&?4J23POlW})jRJ!+Y z%8tDY`vJLE8)_{V!WiMgJiHIYFG%b9wZB|Nz2z;E8KXiU$PWq|>6RVyVL~kK3;I+c z)H$I8JNL~*GrEV;y?#deg3P;wGgoy*vvlTqVSmC;R`FyXtH`1lV-pG47=!c^V$r2e zYzR6{!GyG~K*ep?AM>usmbq*E&{0`kp2(A7&_2fTry$sOWkP0sfuS!*aY0>|dP2wl zG9kg9H~duAtc~;A-Yj4OJ+pQ6gw5w1z_pa|6J*aUBrxJOOrd+bSo5j>0J~=y{rHKf z8fo||!_2yU5~_+@#vZVu(09s^;F0t=IuzmonUXEJB8d9R<@ToNB!u}uc#zWYbjqx&PD0BYpr`>=Y7PzavkvM~4JiKr8CjLwfnV-) zCto@!cRJICtyvn)sIhUFZ-{6#(;k0!j3Eik#7$tp%RRFPq(@4f@FeU+aZPX+gxAut z&EXCgO-0zwU^Y13P|*h}iE(0haa`n01lD8J{LTfv%NRK4le{mNk;Meo9sH#evMVHC zFX`GwxvdSjAIKGXiBsq7tI(R5&^!Vawju2aG(jY|ZM-DdoKEy@+572a^2=VtnaahC zkUNA=IKBtMh<+rYYM&6NO6rUc?EkRKasmhkR8>ycY&r>OiF@~q>^Rq9XIsb(y4na_ zA#%>-C*L^mfU`m5C4A6W2LT#kPs-1YxE zq}LIa_RMk%q#dEy)(FJ z|C38imkF95)jnXVlWFE+$Ekpwju7sJ`Yn?$Y28j_0k_rS0<^pjs6nOfc=2dzC%@He z$Ne}|{NU78%ZCeGS5>yNd4oyl8%8mwXvqH9#qDc7BxKrQvwENw(d=?YZ?_c4>_uh| zn4j{_KB+UL*{0Kovr!H96H<1t`$l53sqbRKi7}W?mX>`Y1 z!k#g>nUJa38`f={`z?^>Q)jUIlB~in*x#a8Nu4Ma^m>XjKs=F)e=z&>TC@3&j%30# z@B{ug?7OY_P%Z4aZUI#;7|k4%q+%|V&Nx{AsaM;+;RvHKmwmj-M5ftNn4ijSi;Vj; z2K<+4Nrt-K z)S?{5he>aK!;a{4xhcg)7?IC?`PKT|DAk#P6e7)UYN(9`3l`=l(q6&LalA6Kdm;&V znrSKr)DFYG$3ovCH6f8$TF!=1%qxbaZsX~$8WM~pD*b?NoRiv(LC~GcYMfI__UEy14;b_GPyWu8K3s zpo$JS4VToZqxM10ezZn6OisLy7h&#^Xj^ob1qtgJ&I8gsrDDKV(@j=5uDCeBC#jY3CcFnaw`3|1cw|Dh8)zx4l4qqBaMY%}4L{67C|6u<0~jP3p%U$u?Kp z;(Aq-2{a=s^njiqfJ!r1rl_v0D~7UrcZT#0YYu49EpvC8LihSz*)P}%ZDVrfzwBQQ zd#T|xt|uB%)b_}3Rv05kSaRl&nV%ZXwpic>hl-np_DxrP0J zt!*axQ=gW-%B?Z+fF0%ZI4j+#nK@kp?uOCrZ;i|4B>Hj#>|bMxPN)-uFv@47k3qNP zVu}_@MtF}Pif&uMBPsbh;VymWC#>dd51fp8E3B$ap`Wn5Xgz(5-!evdCN~$1Y9Fm| z9HlB=O>=EFia(JDy!hd7Y(SYky+{HZog?dl$)_h=q;BubMPCzUMsdQ#{r%opRr}RFNkW$YQ%7k{Y&qds@D_t1Gc}ecT!>30n>%j;@)Au zuHW(>OCS~u^e~h07Z}U001QF%zFSdAHGw`=72X3bSFC0Q!EJ{B5}mli2s3D50grD6 zeM&qn>kXX=QJ-}7QM@G{eUjzBg^HQVXxa$ ziw^sSQEh%}JxvdN4G=W|C#*e~1F`Dbf@RBD#ci0JxMZU;d{t%K;F<(0)r&?SaD;g} zc(JEFVvNiEMETYoSd-DV=Ds+lW~oD9HS1!?$L>gO%|aC?rV;*x25h8iGeUPia@chj zxU6!+Qftv?)3WrMN;isx{RzE77h$}oGWo0x>D#0f%M<#zv)t6|`F+xo9)8vruTLv%(jwW-i6EI5tahsNzOV5~fq1kh+Ar=G?H;-(-(# zbcgw|zYIrGDYdDj&bbXIsf;_hqkEzEga~IcY70ri@5$-`z1!M4qXSgB%M~U}C0#IC z)zydUpJB&^l6_jQTk-FZf)K7T#%2g+5>ja!CMRApFLkD)s@_${(dC4UbSbv(uc0LH zjgl}0b3jIMsWjqg16_=7q?}^ku$4+1fPFns&tT9LQkKhx`7y7(h3bzCJ42ZX6hYWe7~;H@i>{2W za*u;_!m6g(nR3L{fjx^o6yris%*6?5+wT6?V(lhYJ(5∓6IPzlZpho!}#%yVv-E zN~35c(%^=f&rHZvmv0Y9dxpx=T`Ck$yEwT#k>di)Zu+il*KAF&k>lVm6t#@NOPdj$ z=|s!doojNR5Mv3u5#Y+UCAn*-L6nX9Eha)DophM39JT~u&LaB>vtJo18?Q!h3yFl8 z=x`?M4&8AD)dlpCjxS>Zv*SqLFd5amfa+aoWjE|+0!qq$LVFxk+{$6MPsrX$_iV*- z3g_4QTTpfRMj1+og!T!F@d=HVK;=05$|}Bq30Q8$c`?fkx}XdE5BI*(-P>jYQT(uP zn5^PwOQg6KcY2UkvfNKt!$YZ++l>si2-dabzFX`rFv;N_PRn1d2C?=ztkoSQAV}8CozK;STc?d8$&{Hi_97+uu_31)~@z)xti( z2yRxlEz4d_4(PF{{PHLs&^g-ti%ML(&tM`O6=wcOU?esncH)5C6_0-mHQUFcm2U={ zfJ3OxCycNuIbsYpNc@Cw9*7ex5VtdIu1N4WwA=@D7Z_Am$XY8oVnM>pDuIgIP(x`q zT%(EmoJr^z3jBp9bYCV^Z)C6ZPqwj;K;KsvkmQA!27=aBcSf>yL&{a=13AjE4er0? zI6L<=VVu(g+VlZ>4z0tJWGE+e+?MOs|8|fNmJD}e6ZBH^iSYKjoVZOr% zn4b!|p}Ngw*ohgLKwcDX^r?`X&d}w) zwv|(70MJ*k@_=(9$?b5J{-s&&Okn@(?80qM zk+xApIf;fgHx$C`x(^9G+4h3o-T;+n(o&ynZ?g!=Z+0`hp{9peI{H>~$9@y?+Y3ak z|CqITY5j!z5M`N=KrNWb6IvHk!VKTgwe_%bFfZ&I=Id|A9i=ZtD%{1QaObBsvP|#* z<_HD#qNhOu1uORhvRBa-&yYWzlX`7JL&3?7=Vo&4vkMW_>pU|AT%)N9s zf@bH&!;$@h(aqw8YBQ~LPyd^c$&yy)3H3?3xo+4!Nd$YI-i5GXe#|Rgp??(h@&rIEHecDHaJj9sFDztv9s&qWhoD4J?x8-68RXYyu?GZ>vhC z3dkhq<)*6yHlrO`t~FCj2)YL~!~TSZ#-MtEK&2Z&B7yt2BJP5GO@^@xP@Oj~_WZi0 zUg_?)kiMYB2%Iwp&}nK6lg87-euqe>-AUc6;2srmR88lAz9G5^!@la2PN>zv6wywl zpU~k5>cl|k|JE7_L>4moZ_ub0f>~ z&rv%PXl+VAVOz^wp(Q;P#=Ufvwh-Ss)k!gUD$j;1a|)_~iZ^Ua<57UgsP~1XTxKft zgdS?JT*j*V7FB*d7k%<$7mR9d^@n{=_T0b#_8dk^@d@2g4|TjK3pro&gn5N+n2+6A zAvZIa$*8tP;WkAwdWV!tE0_&9$tVeo9kBaSbIR=rb0$#dKf-y8%qb(>X)bq&YP^Eh z8q&j57wG*p_oe;-M;Fhwl|6?g?HR_`tizPDmvaSbT%hjAu(yGbKzSsi5A?g){=>p_ zi^UBqF#nmU+zEBZp^jN}7MWuGjWd=i+Awu6HyzBK#+0%r4fx*EFR~xdVO3&_g-+L; zuxnN3jq<54$!S7qa8+EF)`Y~7oG3n^>$_5Sq+dr0kBFYA>^s7C5YB~Y@K@QGBAYFv zLB`NKL@^!K$Tq}0?9NhQ$3*4p1J=8^mNoy=_2lQ+R}@_~jA}aaQg`o9>(QAD`H8;j zEO4x`g_6}2vYikW-T7=;wNlN(x8;x z6aCchFN}xm7tGg2W2Dl8%I=dJHiv0i4@j4>&}oU&J*NltY~k)u7i^=RdCTsQJr{e2 zXlDP6qHeZU6%sm7rLnw`daNzjJcwAeeTLIdFBnNR3&d|L*xfOFZNN?D6Q)1>8+V?U z9Q9hUGN>o_35`l=Y?qnPrDl}KtddtF7m8XjwTw7hlL@qH50rgEyN>~%RU+Q6Z9@Q5iAU(Nxzb(#A0;OlOw4eS}az z8o-8EM(K>>KlN2nzE3Hh$irCLg}z@;seL@o=qL&T{ znRLds&4d+P+;McW`Y}>!j!Qj`+zAaR z#-Sd2>sdGwa!Vv%pHO9Vk=t~&w`7Lt`~-Y2n5=s41nRY&Az?bk8`_|{ozSMs;KaaJ z-96@L0`FnTe!+b0j&rD&y-m53Kns@rgpL(Zr|CLKCNqwe4sr){5SJbMrZQ-ug&+Zw z@Pz0#BP!I17LcHeOv3ENJYgd&OqG^&LwS6a#_QJ$=Ewf%Pm_x8R%M*ohuvOE2|r=( z2ZEg^Xv&^(kc4F$OXQ9rEandan5;CU0 zU@kR-N-wK)FCCP9f<+h1k9}()a15qXV?!PONXYu<8xH$y4b=umJKr%-_Y>-(@!N#( ztBjAL=I5M<=-DlptmcM1etRa1SpR(Pwl#y7PxRZ?B6IsFg9Ol@o;AD}?JYZ{@ zPSfIZiyhqTC|CAI`6Xwb(x&j}08VFVRj`oa~Rz*Bs zP6GaJL@yMz5|wX|q0H`Jv!~H#<;ZfCCaY;mGx z&ER%GcShMrIUHT~3}5yLyC$XXXm&wkc=WdM1Lm*+6OfMMK=Hri9AVQk65LgH=(Zy1{U>1A1WOZh@G(WQjol7lc zzhJ)3CMkZKvaa;sRW_qIZp{NF&K*UQQCg*CPF84cdWi?jT0X@vg-%bl(^87D<9CQ= z>G+|}7(s%b8nu9L8Tu1un-n!To))dxJ`Q`XAiKkSosb_?TA3Ne!l8?wzk%y~lI%p$ z%wvdcEM?N}j3)Cyv6-V4+qgteu~gdpfpZa6adJ zwA>fW$N%j8EwBpLzL^kXt`T`c4X#D9_UgpTH$mHvMVkU$&_PIHZHUk{JtSl$;SQr4 zFQ7;r|BxTokck@~I-&j{)NyTKxA&94!E$xE;HVa=%MWd~(=@x^1&7)N8k!!V8XJAw z4?E)yXxY73aKP>s_+MNj%9<{ z%rTOL?JLXC!PZklTVh8QgG87;#{9BBA%zGLt6pwT zZIh4*C}YJ!Q7rr0pkdP%bABt&pODM>=>-!ct?^!(C>lS07gTFzcv2QU@l|jflzc)*Qyd=*jEdmIHMrIL3+^z~ z)Ci$3{GhVCW8dHylSaQjp!<`cvUZtl(tGp;NnmOw`vJX64XWO0rDwMZ3Gw~u>W-;_ zWRuF+gq-s4}y4!Q}FnYP;l7c1D;kig<^D!Rix|XO=){ z)aH`GihQ}w=eTl1rRicC?`;7x@_E|8=&;rEhO?%~V<02D-*=}M!Veg|JJUjz1x(x; zmpY<1j9$*ypso-VzNFocn0b~~-_Xv-GR6eJ@I@^o*CL#-++lvq>wTd*1FPcMePe>X zO{bX}xj{=oSVtbZlS-Bs5-)qfY?pyL^F&@surIs&z0xlj-Qov8r7%^dkD2dD=ZH02JjJ_ZV*#UQl5tbc_P-lV7Yh|L$KWv59MS71A6#+-=!5yNVx49(m|E8!+ z=+9-?d&5?QM}V3cZv;a+&S1rDnBVrIajE01BThT$UTBTe3sN`PQ$4FdUJR9L_6U;f zCv+Nuun8D@ZB(<02NU)UtDA1H6;Xr0ucL(taeQ9T0TQYQBvw}2Dq=ujcW8q?x@E!+ zoK*uZ&M_wF#k$q~fPd{fti4U&qF!`{+z(NW6vwI;uv75v28bAgvvd#NAl3cZ38CkFqbAT;|eT zhAui+HO~~x;9`sXgw8FYjuVE7(WN)RSil|j$A+CnoJ!B$Fb2*sP%lXRL!F}@h?`NG zijMR<^cfntR}F#f(j;U-@(xiAXv2j%27?5{942&xdO&Sw%6MKE<9nb>aUJ{?KrM{4 z&I4`{K7zRX|E{2nOV8Jm1bHMjAo*gg`4B&-LLu3GR2+=L8-WNTJ<~`weFeaCC9nn1b~HjO-UgHK229q;Cf@N5S%QVLzdByv`yln9d|kh!=i`{V_d0 zsI$JLpGLJYM;L$e1(Q|w0gQXu-0RX5=#~s~ zAqqHIIbeUx*Rh(_9Pndal0AB4#XXgQ&8p@EIPpO0Wt2^mdBNZAqhcyGCl?GYcS>%_lCg29r6%zxgH%9c8p4`3Dg>;7sC(g6)$F}H$hxnpcCXc7{)zeBPL zblVR-b9TGwfQ1|1Lh=(ip+(ZRq_cb8=X+$nV83-1Z?={*>^-7WQAzhg79v+{$i2HXikP_=C zD!rBcPlxV+X1YDZ!@Vs-9}rIkYoxg_V8c|vL?5O%Tg2&rpE#XzpHRn`#xgTyF3)hr zY8TO|zr(4{sP4(w>f)ssu>VQGm^-Bos1kp_Fh+#B*>d?+40as*>x8co#%}D!%+3wl2GH$OyQqz5_!hXmCG}u@UX~s+w8H z<>rLQx?uG(_TzHG(!@KL{hXmiz3rqT6qyb+8{WM_HjZpbkCD#I#I0nd}GrZAZ0{k8p2BM0n1tz1LotYpxHeIofcVk+u;jl&p6qv*9YB$ zjgf9PU+{B!<5Jv}X}MW(mivNHE%SJ&oefKO%&?R!@)yi1AymBL7K={?*oBPO$-ZH~ zwpG&~)Ab>LAXV(V?+0k7P*(dV;jwz8-+E=RA25SH!sv+AB_l5h^b*-Gh-w5A+MNws z$xZ@oSY=T8C+Nga>Fv-&6AZDE;NdC0zF@xg$g|Y0>`8a>Zf5MFZ)hBfa%`X(x_lG_o&wDi);s3 zWgl={ZUUxLopUnU+b(23U~avzWi9DB1&`+OCt)|Z8JK(~KuG(?y&YxR|8jk#$~{m?<39%CV>kdqRfWTE$>f3r5{y#%u-!jzD>_tdhyqeXp}Xg5|kx@0YS+pY@hgr zNv`A^R3cya8nRz7!e)^1keuv|)}Qe=SWLc_Uybw8Ba~Ye!+bG)oryCtbpz- zicJM?{xO%_;Mrg`!ykU5LW3A7%$F zzqa$keL!QELwIE3;WAF(Uo+# zBE0FBrX?ckshqqe0jo zEwf9Iwv!jM>p^7fR<^xP?2-8!2qiIRiVh1>R_?e?Sz^CrK4I&DW8JYp&>K_o{(-Qc zFpYoad5SZTVzryeJB()8(+(ADU1i!xK3qhD`-z;$+N8$arxSH8ctdsI49PqfHjKPg20@;Ad9Go2!|bBfPia*egN-V_`lRp+Ml&B=@~6iO;>R1$YpJ|o zcB4_|?e*lFerDZ&JL$Z`6lt!Eq9S(htQqxA5=;C*?YTr~rf(X4w++Teh5LXcL-lr) zHmqE~M?&joqg19-7nsKoBFpFmn7l@j15RH<%@N&M1cB;G+pu3d8%9`Hgp;qdYA18e z<`ZJ`ux6}AuYB4?NU&$3+5_bbJhX9`-Bp7y6C5({Fq(Onrqpo_QA+pQA)uvlz}yT( z9n;pE(Yydkf-CJvzhHjMBXkJ6sxu4g7;47SvQx@8=oyOAAn^ zCGzVIizK*~tuh-%w{%xmSGMlX3`xjj4E6)I+;+j_-Dy^Se3)3_+PlF17OJ>P)B%|` zXwF#!Sfk1TtumIRnDR8Ej&mgV@RPz%81A`K19ILNhkF|11)ERomBJ@*W5y^}bZLzq z2rg(|v|UYnjmZQr73HTc7{wChWF=%~g$`_GpALG!oN_=IdvGh=ho@9!isc0(%(u46 z9`_G+ic4iK7~Qg7gY-RmdMyogq8}Lc19pSw3OmqoEOeK3G`V-k*K~;xeM?APXvDKE z{tad$vRz5{-DRk>TT7tRLj6DHyfuZZP1vaZ19#&aac~d3g#4;?GJ5oVt?mw*PUoNis@RDYTD&24t zqjxH*mOl+L2`C)Jb#gW4L?GF6IgvZwXiIJsQ8ZN*n0ej-+)5|w_~RCBio`1${qlhEPt>AC0^PX+2{ehY zv)lCsoh?J83sjFBLq*$6QutUe;RahGbNEiRiKapK0gmLtP{{?eBNjN08FKXCks2TI z1-aKmVXntjnM8fu7-e}=l5OOLmdG@%c7LkRwKaBO#li(DZo~ezYq_mWBQ{^GE#lc& zn1bDE$Z?2M4+^ngBy zsIcjx6rA&Cm7BJOH*7u0$}ooy_CDgV!i^A3yOh0-^y%{7{0xv*SU?a09!am$Cj)HRAS$6}M96T&K) zvNrNA8qs7EvU+z9P`EkZeuJuw>7$)ibizCHFr&~9;qNcH1!&7j*l7`Ngl21?(M z62}aWNp$rOE9RJL1wG-1t7g=vK1;?S64u!s;y=XmPx$RfqgS!mJ!oozPAKd^Ra;PN zj_{N>)LgR!sPG(sn3wUCxA%-jE%}%9@MXpz8*c zkXISr&{v(MwjDzM;~-~36bC77P@Y~FrSHq!@XW_3e!v7)@xyC}WaoYXq~&_XLVs#O zpY#%@tw2t=z*zy+c|sS-xULs>jOItv`bdJGdtvX7FvQM3;r704xIKg-H&AH{W`zaV zRvzIg#2m#sAr~KOM_@-&b@6Isj3fz;bA_P~oWnbwrYSow2TS)wc-argwH6BVlC-kV z3?^HzU_aqR$gp{3&nhe5YtLZ^M%=)}Mkw{&7IS@_33Pwh57;o_yw(l*UpiIJFa?>9 zg>q{v%>_3CP3VzxOwe~Aet>RFu*n-*g zPLCVcf~^y6_qme-;Rkewu3ytSsyVy66qoe|j5BTYLUWq_*Q_34+jS*iX3SIZ2V@|? zV^cP*UD=EfV>@VUKft&#*qJe*IyA9E|7KhPYKICLy!Byg1C>sK11Jev{uBMyG$4D% zL(DqQf+WF03@m-18-Dz$b*>hJ6zB5lKk+_6L}JIm}m;i7j?1Lvd9tQ)zx%AB0Hb?r%<= zi4|wP2JQz+o8y-=gU8+M0*jk9RrG+lnxDWhK7JK(BvbFZ_ZgUMT5nR(M|KPYmnafjXh7)P`M#*3Iyf}ShMFovMv}Z#|bNI zvF8v9!d=wo>l4!CTi!`u}HJF=>ak2U1`7Rm*q8XG~Q%lH$z0IdP6 zZKNNNVaj4?-{jZ5$H@e4?vVY0e2pt(m=J2GH6~P?Yc-*tFvZHG$-W7@ZJY0%()|FZ zM#ouk&rjOna-1%RYM!-9yL0+m;j>*#|G0F@ncrG4n*Zxqs4CrE$yVSZd&aHH1W6F3&IAp#ry0z;Vl}@1Yp4kwXcfbz4kp+WJQ}rN za*&;HP&-SOZajblvK;mUx;}1(rg`Md5_nqE3GK3X;W-jWf+H)xb-}2XIW^Rdm(b_Z z>0Au|1JsPMXx@0bbmKB45ShHA{8YBhxgfuqM-HC*wSAZ~U3w5V=+p(+r<9@Rc3l!^ zMY5mJI3;Idu?sEqte~*>z<{mnPJ9ESnyO@CJ@Egb>)!Awv@3vB)DINgbXHc=tLLljDpbHBe`+3;x^>RpgOdB z3@px7ey$08-(P=1Y_aUqaQCkp5Dj~E+Yo;{>}|NP>*G_9sn9!|thU^14!3Ym8{LF& z=-6WQ*J8oG6Cy3%fvv$#!gjP)5>C051a7mn)dJdOe#aKxVQSQ!i78c&f^biT9`KV^D7B*+8|8Ew!5OFSFq-8mGN@y4q1SfM zDpdSHj_uTDb{9Z(E1x*C`xhitB1O~!bdI7T=@cF~Uoe?$U07Gc-FBxDR*{bbVr7*z zwi&vJ?B0a-9}g;p ze!$v!uHHzq2HQJCGk4L|>NG?`LiTfdnzgE&5HCyV z?VDslM-j}6z)HJde)?~`Bf3>fk-F*$9z8tSUogVE2o&<*FdLlWr`*M&nspLD&E;2{ z$~S{~3cS8H8)aMm8?NfCeauTL*3T2Nfj+sSl3V+^@R%QEC`en;VGYcWXg{Jj{^G1^K+p@Ql@^DX24VGC)5RnI{q!TIhy-Sow7H|FS+?0=6U;3GNUpH zzZl)Z{e*2TgfhqAa<117Jtp)(b%iI&h-fQD(bybCUod**=sKEU(_1E4-Xg(h5$q?_ zFSidZ_O_K@o*svLBfe!qK#8^2(z8YS4nHU4&65=9qHo=E2yW_rr# z-IkQ-k>73@#c~TFHI1)6?9PoySlN8SEbKs?DKn}Xq2uRPJ~wPewYVzNX1jB4gyvQd z8{$Ct+hcK&?s#48Qi=z(wxKT7y_8stN#R-+%em&jYZRWa)aq(1&aA_}I*AS94RurO zBpnV=F3RR!AFJ?zez({h6;>^zM|$yY>dZ+UW;~kF_S)>{sz{{GgNa`mnO-n&`!Psh zw^pU4mvCQwE7jo}x(lLz>H6YD$7Tn2~(Je%#U8U`*M^_Gf<3Kbi)PEa3R8xyzrQ$5(ffpL$JE|P zcUvRhr!66U!{$@}8|q@#DWV5v-0<#=Cv;M=`zz#p%i|RlwNTVbungXrFIozr|H&NV z1$l~3(S&Fwm-@vf&=bt%3EK*P<4#U4SwVnZ;~4f0TLaDzp)z`w-CJTzV3u-auKCaFV=BrakrS9xYBdco@EPAn^Bb&GWqQQQ)@l(*6r ztQ+cPfMzwy(kLdYCv=4dDs?#QX>QpBVon!IM&ldM$0oQ9*=Z*UabjN3(NpToG+2yj z`(n>T%WcDCG?!?RQHHsy@~ggvyLc?d2V|wk@FbCq%LnA^Mnb)jXr!w< z?rxkU=o?12Y*dFjCf9`}ehzn*fiFMygmc}XW~9pe>!cY&f;bOaP>_7hoG~z9=6CMX zuWZ_z)Dv34sM3q7q~ofYkkD;6F_=m2_$$rAL zMjg6g&*y9o8fgl1t59>@ra7#xI6}n*mUtjTU79)MS^)x2H9r4E%~*lCKu;;PhhCEy zp$FvD0)pnSnz`wy?hRB?@PKud#_6_XlUc7Al^Ymo3sz;<(OMKaHH+Grro-NX-q0|k znOaTcyUMkz!9I=@PL4k|7ZG|aw9>O(-QJ|hn%(OcVu@g1k!Yo*7V^w2ngc_hV#*Dd zw2EEo2ATO@Z_bRqAY0&|;vtRZZ7klW9rh>8E-9t2_B!MYLh2e}3$?Ag2XSSzW7x`B zn@i{HZrkq|M0Xr^-UdatMhu|OAe5OE`w%+dd4#9z*|<+{q3h{-v-O@l_&vWrFyaQz zv|dBi?|tmqo{rs<{e)c$T2nXZ+}|X-`$=Ti2fabt3r1yEvgdhC$UGnR1G--XgSLyx z^*1o)ZrBZ{+nNXR_wfNWt&4(I8o4{&qX`NSQf znw#Ik?!jJlA)yi5FZ`dMU`@UoD2Cm&TMEpJs{DGxey!=TG8VUC6mX1zKmLSns(JidzR&!^ZFwow1%1mz>0`&- zzZg1kaCO-zn&s+B`pXQ`Y)|rAC$RE9fOh~Xms)asapPNx=)a6cZ`fGw>OAa|(kLMt zZT$Lz5vG$Xl`3y0-TCIv@m1KLaN6ZuE|0j}BL+L02W7utzV1zfR}%?!JZb2xlalZe2lEZ<@v$p?X`at>?Xto#+xb`)#N*aKMmjs-KC`BJD)~Xz+O~}@QqrZ&IcgY3_^i*~}RbWOKQTvM-pQqM4`()l%-im7VJu;67p7A{8{b%+`DgjV7(|6Sn&1?4Wf0 zamp~WraO#kDHLyv8&x{N%dtAYJz%TD8*PTYvRQPlunnVG4i}QqiAK!%G7XVq%L{sI zmgUk11EA-17g{owSM~$uwQvKJtI*>K+VIPM!RVGtFQnERV&|~lJLN)~Q~CjCWSg69 z^XsWKI%LG<_AI`Re~oUnKEKDICc%zCC5?S~!5A-QlT)V_EZqh}nSyyD6-^IZrS6Xr zG@NqD-O_>4ETs;lE?P+%@J1{n`-!w`5GMjio!B`2+6dqsR+4})v zX;2(5x0i`Q9?k6%hkJ_`x!2Rp3J-iu9@PNLRAUk<$nZT0- zydK#v*j#G0tlQP&a^l1iuYoaToAl^9lN%*vm{JG9?+06f#lgz0k{4E351;0<$_Ty*BlvlUd5i#hhQ(? zhg~QBg1*5lWId>=`+f@vI*nmJVCvLRaJgp_c-Nvh-RJ5OA7_se&;TEB>oT{8dQqOj z4;Z(Y2n%t&)>S-gj37>L^0=F zae`f|fM8^V%_5!gE(Fn7Q;mRxrCcX?c5T5N8|xS*2_ zsZ3~x-Bk}mr~UC9)4D-}D8TWyDMY8GO-Lag&=C+SHC^eh8=14|%D`lFU{*Pxu7;8a zw!m}{g&)vWp2+GTXS-wPc7IKF;QH}EyE4@A&7nKkkdW#58+zIlDymg=uWU8}Gq1Q4 zIt_t}$FSHji6oHWvU6zf22*O-#bKsTL-k4OFrP4@xQ~Ca(@kOb{(`XUAzv^@(LFY_ zOq`xDzTfs1 z?gLt-l#(I(NFzX`wA|!}@LZ*M!Ec=+gpY~iTwiP9U%K=g(%AfX33m`M0ZXGU2TTWt z+Wzld&G{{`%-%h~FE8ZoIpCC`zdTi@ZF#}gmkalkOV3UbVJ%ibJbQZa}zLYmD0+G+{d2xX7SrD-@kx=vtce!(_zEoDVh`4KjnOj}r*Sk%fI=DEwP z`+B?auFWEC!4b0aI+DM@;D`7ViXXZM| zOXzeFPWKvRe?S~S4x#G+5_-joj&$b_B#@D?AJ8rWmBo)?*DoMJe^Tii&ezF`3y#BX zTPC#YL|gVJ%$f?+hGn4V{y!2lnExl7!x_>sIY_sL?kJkg5oq^sR+UWhV0MKd+);JG ztOgM_cKsprZwC$%{xXk;{eq#+Jy`W`Bx@^(r|Pi2p^v0VZJZ5yp&tJWkadrRZ?&^K z--JrOV5`&K4Ygqth1sP@(4qJVO2p3HYDe6bx7ON-@m2Q`mm4W$cX9*WRc4^q^9UPZlkRFB35+T)G%tV8qi2wFOQl~=xi|w4 zjAmF3AHi9r^3|X6n!RN6fQ|$P(qdMSoyVj|FeLMU`8t=j8l{~w{A}BCYf-qLF!oU4 zQ=cuP4_y^SN9%>=ramwAn(Co%5rlKA* z+wA%3y-qe2PJ-)jlYm3@6LeUG+E*ZD$1IYNmlRLv4Ld25x%yhV6K-b8FOh=2wUh8;E(ybaLK_;??q-&* zi|ypp-uZ%F$|to}g)^$jH;`Q|aR0@rgEXKLEA_Rv)Ws?Rud-2~LA#zF_oXvK}fwFzk%`vTMHJexPjafi^~Fj@Obv zk%ims0)hQlZw_y^Atj|bg5V8j)P2ERQG}D%z&z}^l#1`^7)n2&q1q@~%gdp9ql^5y zR{e&enY$(>twNa_j{R4Fm>Uk`{m`DeW3!)nqt9^goswW{&%JRLNGTxBwxB2bP z=Ah^5%w#6wE|{;E?o`RL9r-@5=bF`uTkxO8z!`hTyG^gxeLxKrLq6q>IUDIM8859# zL2j68NZ^L{fp=4OceV2U-)X!j)WAY*pulP@w<~9Nl%Gn>fu_2A zSKFOC3iD2?!gU~_8+sEGO#)JbRXmmoa{K_=uJfG0Xx47zR*iD!ju?ftUmVaU36azSIqimg3_+^R7iDDwk3gi~#le+%P_wSrIPIj*hCOdq*JR27aP zXa6l_XF|M@7vy+JgiS|-j$1A}gN)Ko$e0I}hBvz4J&F0X=)&D*H~5W1C+s4Kx?|%O)XP4hxghIQVWvo^qISaj^~VTyzWf30sOj!P{cwihgAqz?D1SUT8E~ z%wE-}YQ_iEIlyfKuDI+5g>KL#5n;!DH~go5;|skI(HD3TWG>y;m`>nstRJ9$ zs@yckvhyN*eku)%U5(gVe|f>^;oaIJyoKa#_Yr=FDAppG=o6S7bqKS0nMrpgZ-}Dp ztwaT<2;B%FojxD-C!7+q)>@rz6OXtyl>@py7GbM@x`l>>zjTt6I2&v>L>YP-&{1g0 zrCrKkmpT3Sggj~<>8Mb4!gtAP1~>L|5#@OcgsIO-?EymC0vi*`Af< zloR@bx-LROx>Jg^xE=E;#RJwx&N+L;`C=d6dmK20e!y0^6*`E|#RJfz3qAW2_m_?t;ZI0BO(JDkZv7&qQC)H$&__6=cEu68kpmOx-?F<& z;ReSd{u-0WhMd-!7YECJ!dCBG3nrb*j-qGT81x6R+mMs?V1ygvIBFOj?dZ&@pJ>>cB zn+Zm;OU1H>H!H?!9MRuT5Q;k5FFQvM!Dkha>myRO6}%X~mDx|2FnT!*;k z(VeQWUoc-A%!b_%e>HI#pM*Tt4f_G({Xpe}UD>DE<8&(giHsd8YPTylOqsw>$bCUH z!-;fMK@}XZ%J%xYJNp4!dPVp`^HU*Vb4RppIJ_lZAkE2*+_IsPGXvPh z_4oSBJ8Tc1{o}Ih#+U=;z9HKIpmL+flCFzILQEm-Pw17)xUpHQ`5`pjoZg{jZ$>W%;6IF- z32>!q4oHI|L_ynV-FVpB1lobz!2jLgmmLo(lc2KuCWi@GH>U|6u;%LWbi98;iHnkLXTRpx|FgAm4;R(99)Oh^l$vmMaM9;(uFhh1~0?&JLvmb^h{ zD8fCu`NUYHw;WHH_Cj#IvU#E@y3t70+!vetcAzyUoB*`;EuAfUrDN_M5W5=9=($SA z5XW-9{%xC^eVDR2w5$x?A$=66PEco_sMI99d>^@ZA ziY$8qWF%zmKr_{*F)%&>R5nSL-CMK$J|mAN_5nR7Bo!fLPvD7!PE+|tabKDxfh&F@&Cr!_HJl5U zeHure;y{%H>iqIGhn**%E`oeANHene>nC)6=McWSkQN*~-sVQlCzSYa_BY;!{VVN?yaNF&0F5JA23n z)VHx^E=%inP7|n66*(cpDAcRTdSiwO(;+U{Tsj&uL*D3NSFp)oP3dy*MT zPJ;KeTHqS?zOQn!2R#jYk$uCgD{!3rw((=U7LB$xzp6!rt^O6pCmPUl57vbT;lie`WG z^7-Wnrm0l2!aOOm519A|Omv49VjByu+eO+&`PN9IitPBo{zQ*z&(118pF6y3a zdWg(~@tmHB0`t(`>Tw^qHS&(y7i?wP$T?`YM?=r$nZRJ$0)N0S?I%a)_|sfw>f~9v zcF+sv>tXjcowB=WjPG*^I@NhXtpVrR`dB=459WkD(hlUHf~f7UWSB=4+M}9ZFd22f zC+uE{QB|_~U_vu`KsV;ePN|hW{y9I#l`%@cV1CReAz*i9Lw1Hn+pS0QJ`xpXq_y>s z5c__Ih{Hi}EQdNRlLVR_30anVAsst4ZzVuZ^I-Q?Wi1p%JnX2TnPutbrjY&PFQ3pc zjOr&y(TsSVls`rT3Ht$Cs#=J$yZgwWBe$|&FseBk+;uTb>aS7FavyN2#Je0SJdU3I zz&_w6@(Ci-j8-fL-2;y71oWu zY55t(B8ytbX7Pk|9Nhgh?BUJ@zka+>6mzi9I?iMcG7Xyq@2|;E9kA|>M;}IZNAeG! zFH!i0qiCcryJ5~Ke#W`DQZHzEGd3_3S9m6LH*P0%7xeiK;3YhZ8zih^nZeSVr;~4L z59+LI5iG0A>3tK@Pgv<*;811iA34DbcZ&^+T||?mLMZt%XHS9&jz|XTT44jTawxT( zlW4k2n$$vK8*gY6R`XS%-t0rd9~!aJFBsLb$^vy%@%GsHTIK^L2t%1Nu2pkAXxKgV zD*FZVQ%?G!&bz9LYlCnBIntldnLF%XtaerUO29hFenMw2I?FW_Dw~YvpnG&*aCD1w z{qjox#@*oioCcEpfDVyZd@TCPD&jElI^X7WP&BiXOT*R-vktS&?H7ijZm>Pn$Kn@v za^gx%WY<60(DfknoY^S9-7fn@LfKPgz-Z>R0t90L@Ga-{5)(P*>wbYct+!yLD z%9NU3WcE}p#80ut?-)eeVzQuYnA?M0_xS<3l^b?moKHqsl6J`z%N5K2g8GP-3mF`9h*|Rp)eHVrO+7LQpRBNAI z7?dF}?$n7qb_S6{7n98n68h~bav&QHqv4oPw`4?gUUgCJ4UxNn$TtrvmaPf8Es9APeCzr%d1 zEtFb=i?BZyBIgF_KySp)a+>a6j1bfWFiEgky`h^ZWN)LD&QGnkX>TZpuiP98(JM75 zZhtwy<%_gGAj%rvnsIoO368qu(w{rbx7;5syQ_p1ZLyo+l2E>WKzH0iW%^>1m9CrQ zi8HG54LwgJwVemLb8QpKy-{*$Dtjj9W9WOlP%wY0> z{n|+i27=s%&gyTSgP|pucK(wvRsnUUMlj2df8sY(as6IQ+>Ng zq#w}50Pa4y@=0Uzaugc?AKSJ9t6FCs>vmr1*l?MX*s`C{7Qk@T=~cuHyWLai3--rm zF5d_jbkC?O-6gFb;7la<-D9r7`*SX1%6`DkYS(kxN~hQvdAIZhqno=kpni_kLfPo5 zI~vuWD7@>U4Mo$qa1Xc=po%Y;Z~MDnjEAlNEMqxQY#|;nJ6V_t{?3%lQd6`Cv7^TW z)Cuw`@R8iw_0{a?v0>D5gMgxFZ)JDghlE~);w@-Ts3nHVFOT$@N^;DvxulCgUnS(s zotX#Cx9p7ap|7TOz&0&bna30v>GJy+Tuv%JVI9wUDwc`01v5i)N@c@lbiVD(19sh6 zRn?jJ0k*2$c~#AQ{aNXGPLi)T?AK^0l^-d)`J?kC&jtzDv-ivynHhaU{UPFW$tG0$3F~Ol`~|h< zgx|*1LUCJi;&I95Ld_+agv4B>mFa~BBzOR#W%7jm-B~!Xgsp4>YV5&Hfp3_veJoEZ zd8%|bN0N|Zw|srTMBRzE^-*%@9-4>UHlXwqYFnVvl`7r%Z`f;`FZloKdbh(mcAnYx z-BJ7@EZdSThq045`G;`Er~~XbWf5Nd$*2=0TUyG1^ ztnLk?n|G)|ol^<-uY0%uLzx8~faP9Rbh74sB9EMU+en}@3X6S8-Md-EE}Nv2c|*fR4@lo9T@LPW=ivxRuUR)7ts=M~DHIxwcwGC!d~Na72Z z&ze0cByjGe(#dIHe$3M!!h68gS0ngAvC5tWi5t#g6%M#f!}VYa>|D4}_5*77pk6Zt zuUj)=hR_>Ew>iV-J(>YCHJ zM#9HJ!j4Dp-3%9`PKi}8%_{ppYlQ%XcZwkWhJ0-ZjP}R{7YLEvxq8^^qrG8%i?xo) zC??gf6E{Qlj;fdsoR22B=5Xg=ftp+p#rP$Ld#PP9k&bmEA@l7MInjpZB?eO{Sbh^U zx)k9;DIt2jq{~svQyL^>QUfzxPx^wahyr=WZsn2wO@a>#r2r3TZQ?)7JOpuMzy#V( zRJmX^!v&VgkB#DH+sTf0&dT3l%z>j}$580FW?^r;y+V~xatKtI1%U8Wo6BIV$}^zHz1!ZB*_yY3aLj3+@BvrW)ACM<5h8nTW?47;y_SML@bX z-V$*UteqzzpBKzPYv)<)Y>ic%uh06mJ7pixJ>-F{O5$rZIywikACQY^6}BQLgvHtn z-G3na0dqqi>@Zb#cN+11?og85J5L{wHX)>rhn+bj3E6cP={v-#GK|c{5}|W_B;$(B zP+h3p8`*(CV^oaaO79v5^c$i%kfu@T-X=$auX=^uf#CsZaX=?rWzP$XBxFGj z+pO(=K;P5z>ovlqheM|&EB%Bz6;SEFm2T+X1UE{+4piI)t$*eW*ZAp?VH3s&Ip7~h za#uc=?wmVN+~m|#2oIzq##Cu3?iCSWql#*BLIwn>Scoc)doGU6^6)+j$t>`DZKigk;0%>db{>fjkp!+ys_qk`Sg;X`nNzq*8C~4mqVN-Pu_dy8T^+-CJPBQ3hy8>S zJ?vFgub}M!^;IIHLYEto8y-j?z%Kh7&&#%{9acEY$BN6T8tDccZ|J#B zAqtk=_lQaONN5ISPDr6aU7FKZfgVkb<~!;y&1Dg0%q0OLgqhn0=H%c&y-KOL^P@Oz znsB9eCnTQ-Y^>Z{fktt5o*3Pv4*I^Peb?A%94d=-hnP62NbUEz!$|fvPGC;d4g704 zDSegG?D5J;4)S(Fa-sAqGwj#Ok-9OgIag0CenE7E-CO5XM(-~n>MlpW;Li&CoYfHq z7~^q7kuhl*Zw}~U3evbO)Lf?{?*WZp8gy@T0apM|f`s2QN*>Vj9#B14S3RV)+F&}pQ%Epb36;+Re5*JB*;ff!X`_q<-&|KO6U zU2Eq+s4Q(B@WF32hD-tjm8zbQ-Xit#zl?H5c7@+Cn&q}8e|dRS*&c{)<0K!@y&MSh z<~cRTS#+lx33*!D5^i%5@hbqG&n)J)m4nTy|!;?!gm z*#Hw$SXWFRNiLRGoI;SO(FAtRHd9B*yt0h*xuu6wvAT{#sU;UQh=Fs&{i&`Yidm zYT=IolhXxjc{~qM_IL|O&u$^xShF@zH^ASXcmTgsX|YA3PzQPGxXk=iW#`rc6IzM~ zbY)rgiI0$Fm-$wez9ADFshGD)pCi4U^)eE3&{2B&6tJyl%mtYCDmjI+f!u(D9*kTS z%pEyVEE56!jaFA6{z%QS8{=gsVTNYdzJYA0ids|quEe+B6235d>T)}4r$ZKnQN1fkb~RC+^w0|v|4l4biRCnWHd!cVBz#4yaD zJsm=OLPCaQI>ZH|n)eJyUD@>h3UR_Y+LIm5Ph&?bJhxt;OCD%;??-;zHl}KGK+ENt zVb^hyz2psf;z8O({rTG2yNVC@0SyH}Wgs5eZW+*TYxR4>a$)j0n+;tAEW3Maq5m27 z6H@O|Cq$$54$kxL4@5o~LaUi4@0Cs8o8P86dCgPN zes0{<1GX5J$LzCleC;NU2s@x271XI9Wb5vcfRM0XFq&EKQYUHwyFM)mIiGQ)<)pmeVfenKbfQdg-P zm@y$v7zej57~Q<&OX|hl9-cKqPkE)r2f277@65$8uqnqf_%eukPRMqY z)Z`tp)A$EJ@(8wqm?! zlmu;q^>{!wx+#oK3F%lYwLH7e15oRwM&fc*1=T_cE+y!;S*(Y}?e9v zU}i|6M$nUu5t$0TkRe`oO>~ApNh#`eTV8(X=jz9T!IWdUjp2 zQg(EcenKl3VOJUE?jI5;JK1lTuX9tq)cUJ*kbdu$McEISjofbfSX+Z~V=)QX9oY}) zl|Lw>pV}h#mID*$RdS%DeKT*_8PXJtiiV%r%=+$Zk4NksChsn(LQT)UUIAu>akj z=Iu5W`=662HVW9am3}}U#FRQNIaXJTL_%g{fuRrd%(T>T`LMcGF4Kb-Vu=Z658bp>KAgSVf~|PC z59okKlN%QVdtYp+2$YqLm%i)9jP;i%S!)S8=Px1QRaZ|LPFR& z_~5U%yGF7Z**Pwqeqb|aJCadIDa_3-h z=|WaSBI;t#63I<>tmNx%%yd^(#yF2VRh5Lfprc#Fv29HD8|Ldv^IR2z^p@d)>U}sS zBb!@FxUE!S&i;M5g9KWU3C8`ufi!5T^tt)IZe*{&=4+mxmu{7K2TE<|oS8GhbxVJa zO85>^%5)Qki%Mr5IlaoLHSAedmR^{a2c$;J?pk?zCH4dM6S|3n9=*67*n?@Ba33%$ zq;Qjy3eSl!evL|i8x+lo5;;1nxjXubG--bI-*g9!hgb6nn#MN zO0L_o!3=vV<$_$w#Mj2MhrJGMZ(lZ}>97mtzR>>m%4nLSceOXCb+Hz7!H%4DSVec= zcu`pfPT4oeLW3bT8*5A51)2CoWe>c+W}(4#v|Bm}DT)8^mc88RK)%IeA;*ykIi+qm zyWBhMD0-{HU6R$U>|QMyRSUC-f#&oK%f)kx(JjX54QC)+*ORgc;&hpz-8DYgf&SQn zi7o*f{fF)yjL_rEd;_Z+cBi@|unD)jisfz{Ea-L?WVuva_AH{1kj9%u6ji%m&DmF7 zAH?MnP^XnG^#i(ZgRcz}jxs(x`zHamq~hb#Ny^kG(MTfkrJNYZ>T_giL0fBfp zHW$oYSWi`QfiwXiT8iuk%mp|ULR~oM?5IyLv3Q>m(1TsX}-c zN};=+Lc%H+pEtdcHWIWppgtJVluu8cNctu7YvP2w7*ijkIx{2tdz{Q7|8U+TD~=xQVdzbSLNC#-Hdk2rsq>Ma(V zTU6iSx_NO-7t%0rd`_69(k|Gq8?y7kjwzUUN}ke*@EtKiDT=+5W!AekAx+nOZt%;d zi%;Ab9_5fXnRJqEx=$F*W}0NQY1*O{ijz$S!+t_q7Y_XRc-ni4mH7apLfIGW*BCXZ zbLS4fo;MhYH%?>RAic12HYOEgj-2lEeN>0Mp>%MjNnLcZ4|gJyJG3^~jJnqAY_s+s zRkR3BA9XLjffBtRq{U)gg^ICt zRpWut1W(1L2hOzk2~kX0G(3Wh6Fq?L9E*gRIvg;eX+oKoaBVL5VRA*$>!(36j)-0^ zRQ4T0#=hsLT|ivWBBBQY=Q>^zY^WqqSSi8-()g8*kSTHfSPq$vlM_ERuod7yW|Vhz zP>&~(U{E2_cQ|2FuTq+3?zjp&y-N11`3C0eynuxC28gBGSV(Y7!#6NLji#%IqBGpy zk|np5@q|;3jhji=k}13ebHk{XO;BcRHAM{>IMX{m-VoO)hdARuhDdYZ*JE-o7|lFi z?k~6c*)!+t4#nefy`WAiHN+dqEyKKB-7~}FVn?p7%RDn!H>2jKTsgE%ZkSA_=c7pX znL*Dp>LkRkc|$!5aTGDeu)HB4ITfVNY&T|4?l!8hSqRRYcfcP+SUg-z)jdQ8<5ChwhFbyVT5PCz5 z5>%H9M>>AjB>3yD4HQNo1Bs;lw=qz69Ol>`n`PuL7o=+IXjMXW<3-Oi#fgTcaQ|&j9 zE+e%a4(=dk7%9F1`5k9na#H`JHlvRT2`!?>4qdg7ikmDu0TXPM2??~lA&pLIm(^gm zPDyY{)UR)dW`uHD@t$U?bh8KhuNXulK^yeJLaFqCvU{6@3A|RTxEtojeiK=PI%|B; zy=MNyegC$UH?*>enDtC1beDfg=*xsJ=(b9zbF};y(-e%m331||5Z#z)*l3}4DUJk> ziIC8s>@CXC6W7p#w%f8Z?)jbGnkl=na2}Gvvkgmo38n$ z{G5C!`GDRbMFF^7yjpw35((rcqHcKWh5s_X2a3|xVUH7ZqEsb^17_BVnvAOLM9cfbXr!Ss6%bCJ+DN^sRLh<5tsVPCU3{1z;w?DR_M2lPHPe|x-3+y{F_wUhmZ z`C1=BDrQJ!7~=6FOrV8+13j=0l_w<9+E~KZ_LD#n%6>vdcBpQ)sdR&?Cd4k`AY72F z;!QBWlS)u!lyU6E4`oD&GCMS?DV6;%OZWU7dn+T(Nx5`4BPe~~tlIMH8Y;gJ`9Rf- zeJ_(yzWUI$)OH|iL%yvkaUyh*$tDR|T6n_fm0$9}$jYX#XT$D@8R0v`-GMkK2l#Do zQ8pn1`xEl9-XitqsfXGcTv0~pd~XfCpdnbOpKR>144vvFYu-`%9kjYRXfZJq=arGp z^d#&zOxslprH@TzLTr_h5atcI5mm{Uqbi~YYJ$h9(Cdcz*2PMx^u@A&Sz&I}w>F)) z?@)_?gFOx@CZIUB{Y37G3?OG5McK$ycVJHMH8CM3*}qq63}LT#sFuL>X_><{xA4@ z9^!!>y*pWWAu9t{@2W~yI!%~i=7!0oYyMI(+@rSbhJ-1U&jaeZ;N!1$qInXsiy6Hy zlw9zhYlv%f^rWqlGp&I6fCQeT*7~?{Af?@HI^V$m`*4A8wJA#kJXLd{X!RFsDRE|U zcq;fuBp9nv>l11tp;CP<5myRG$W0Qk-;l2fk5XJXvoi$+YrI^ss}FTR%ULQ@YlRzb zjV>SY(BF`bAp4b1XS^ijZUA+;U~=lQIH=yjRn;}xI_Ame4s83D!E)x@1!scyWgz*6 z`PMz9QpZ+VAIZp{44QA4-zAEbTte11xw_<7@`gGexa>1#^5Z(^E+*BXyWyxN(RG<- z($JF$^r>jRL+>DzN`A|3sOSS1ezn;PRy8L%Y!A5DjZu-1D+^Kmfb>bJIE|B2?5zp8 zC=B)k>b6VOLFeZ%+Ezc`Q*k>ar^Ylxbw5+tz4N0#7xn|{S&p!>|FSK*Wh2rqlyBXC z0_`_(D4C6PB+ACU^ z@-4d@S_pG1s|gwhzNe>#zC$<3N^RI2c2CuqfR85o0loS|Y9}wyJtbuV*_Zu>(an2w zpxWUrb0*rl_%uagP0Scb_^7(@y^*sPn3;dtt6(w2UPfmy3b-f4s1*^+A8HjT?h2P_R$bQ49=GhCW9r>WgGsga67i2%7vqGpevnlpw z&Ett>PsX#A#jjgzj&#FrfWY~8n}pBfJm62q0Ort4RfavPd$C1???_Vyb0-Yu%+8<> z)+)VW>%iC^)J92Ur?^RAa89x8$Qr@)t{U&&yJ8{wp&?X7*)wnUe%hbjZFzI*C4(o6u_|O$fW!$E6dUQ0|#u(8nxt z1KQzT0JV&!P~L7SZ}pIX$>91Ar#GSR(A9OQ?sQdczYk{X+lKl>)S1k!N_+aBV17&H z4VvR$Qa$)EC4%>30u_)FIUob-rinWtOkge*=@*PSOuuFbP+lU41IANWZxmy z7ApS3s!>Xx1o~_=-4Q(&npgNt5!zaa^3q(xeZgkahA4IQA8&B<`^n~p+)X8oTB>ZE zP(OB+m|R>aKctThaZZImHh3!cSfB&Cqo%TxNlIt^vW=hM_99D5?+Xl=Kc! z&E}ck9`D-(oHp2hW(0acj1NRl0adui#JH&B%U7TH_=fo{{XnSRwpex-<4rKK3;Pq| zbEXlqdW_o#y9sn}xbZCB$VXBjdfi-^f7z;0h5D8IhB(WbDzXLjiW2$=HVK}6mVUrb z8w1pdL19NV9_HMA98Z|9y|Btcn|VNEkS5UlW!H6kK(ZyRa||pzAqf*EpBrR&ps=M* z0D!@y4Wfqzp0Kk5e016Ahn5Q?RU5K1)oLV2hBtvzg)ryZW);VXc11#N zgm^>OJD@uLl-*mBO_(Y24I|7A!&323%Ki`MMdLIyR&=eI@B_w4W6L%1G-Qlb*9vOU)AXw6?eg^hAU?8 zTe=v%b~H~!oQ#|hcgz0OUdoRS}y^NN;ldg{eUjhE3B_9L(f76zN1l( z6J^Ouud`t$qBc||UmNw6`-bF`=v7rQ2y6o|oQ2EFN=#PY-jIf(|66w}=bne#HMR3vZJWY~HkbXcz1W?B>g6_Tz*`2d&FkgSE8cnnrB~)D8O-=_Suv{wf zm-JC%?fEr!p&{)BwIgI~?J!|ULgktu`wdZzwGtg{squB(ixl0oaqa**kPV$;VVtr4 zyT)U}>~VF;r?AvfbnFGoRl3!bQw+cheqxoOe$KXK#!wq032C}7_+_9M>I{yIdyQ)3 z^<;FrAsNN`J8NZUaJ>K$GJA8UvF+sry>EhuoiD?hRbvZj5_ExxyJ4vAJ3+cH8kAkX zI|()z&jUT6?oV>Yy_Tud`kJtRVEjC?Gr@!fU6`i5Q2GkTJSQt1dLIbIG~M|nE&DJx zXoAa8@>JoV^n&|DrRzX82cCzJ`-Wk6QZ5y{R@rQz2X_GtM`}aPEg*W5rOeK-z*#?a zDz&4)x!!|cZoq=*h-%!xbH41~M~)k%k?T2N!#oVEwB+xg<$+b{gcWxCFbS@56e(>X zESsoi0&?1x7=>X?z@EiJ=L4q<+HbRYk;zwzj3l+9tVwK2fkOjJzyg<*0^$nz~L#^g| zOw<7*o;?$G-xPR4BgRncl;p zIYm$B2sZ~=o)E<$w!zA6sEY7|v8QjKwi9Y>A!N>qE39wq1%|B43)SPuQoDc7gkTpf zLf#Q$9?a>%ux8f<&|dk5S~iJG4GfjXDlm%JV@rU)uF#kx-*PxepepKoYxpfVno zo8wqY^ARSwJ)QN0noT>+aC=f4FU<%T%sb*zr616gP|+@hnV_Ey_X(ZpVl}9evb)2D z1f%>BPLVxfi46P0-AVfghC18_tY_;>Q%bZNm#j*r< z$b8}lPPTjMN0m-rw2M(?hu)GJ_HZ*=R(4vENVV2ee#Qng|1Cj02%&4;UXHQ@=K+}e zP7I_Hgdu_ONtvDGK4HF|s?k?TJ+9X#4~U^x*19E|QMTpf+&A~p9MF||EHk~z0ztat z8?7eg7ibe(aAJh(IRHjBf(X!a=8UgjFio&dhZ)7Sg}b*r2m0}X#t?v9KR3E~B-{jp z*?fIKgWgbGhOO$ponb;u8*6YobQp(N9~EgX(3(JvD;yYU13iW!b*W+p0BbSiKB3`e z`*HgN&WDE4;HL&9Q2K%i5z~(`3Tn zYbG|xWoU|;SgZz(E>D6lH^_d#Y=v^dvuthbA43{;F6>&z8+xB3a9uHj1=KfV3?sko z`a7ilA$EGjkF&i;ZzCJ43PX2o9Ozvnp)S+xWR?UUhnBuUl)&qT>YjHChD^}xNa)KK zFX&BVP@U41-80f8IQ!ybkkS^i{xD9R7C_GC9C~twpaarObPVZRox9`9U{`*SU{p}o zMlL<-ayD3n%A=aU<#w7%yD zbT$nf+fRa3%ytLT!+t>Pn`v|{9jb6;gm`>7FV=oSy)<`9jN&?TU~d?X>>YY~2rvsD!kINp#rwesC zER4kIo=!J4JbJS9)`2-#036psPZwnv3(2DF2V{XpVe1_etQ^%&Lf^i9!HJFNw>7JO z`|DY`K{`-z7t|;+LeSXDKD$+VVW2K(Y)K&&%RSqCjZE43u-Y*RUr_pjZr{-A&ENvN zu86K`xi^G=6B9X|A1Tf~V78T?$onm!t&7Tag2HUT31*P81`(|b^B5t@&f(V4rQ8Sn zqfMfuXnD<~H>sMyR|?NAngwY@9alVRC%Xp?qMO?#zJb5!os1&%?Q&bRCS<&&1s@PT zsZ%KQ2Wx;f6~hv!xCOakQL0;WDm|NUog!L@bS{ne4Zoc30r}0cb9Oi5ahwAz3|_9o z^989r;9_%!Ir#t{Usu)7VNTgT5P7wV8y<=WT zyBl_0MGRJ2i_&*U=|Y{G68v@MD^qF3fIl!!2qTJ43<*>H zzSD3)MyDc%VuiCYlPM!)<51r~+L*HDathdgRhm6d_5(WOm7O_PrQ0+KC#6t0;Y62u zAVZ%_aV9pvHd)&}37J;BpdFS8l&!k5nX-fX0*2@Iq%Jg*QQA>?y&BNjS3FiW{~nOz zLr^E^p-cGE4%UZ>kBg=dQ{8!r%H1;@8SP z!zWv&2@9DJ>lqmOf~e?^wKClmUR@}Eg`e;<^Yz(}nY-YtTw01@?+woCkuG6XcavCj zu|u$9o$1d5@=ADgnemow{mlxcD)){Y7yWj;As>23v1My0+&+XMJ}r* zLPYPNB}gRK7%8HRDZu)ZdixIIRw<~B3hw!w<`nJ=a+fev8nUt`k3{RMn5(RLsN;YY zK7nJ_k=>lh_l|mf*JHtc-L|scI&>`{x%`jJhW&v3F@v|0QwDUUqg|EVA$H7|NsUmK zDdbLXd&1<@dw8VcK~}goWtkAy%nI6|PiR10IptggE}aQ9Id!>VR9j8!s(v@L$Ucqb zfbI^H+GPyHdFVRQb+%s6s+Kx4ZTj34`{;f{bfd>&B`g?9w^?<6Aqn(rh3|-N4{45u z`P0UPSjylM_h@p#=FI7eD1lYi_}T`UUw4t+>K>LvYe>8^mve#5Bdd=2(-RcWSv&cfAdwFk5rL0wH8 zhXKg=T3Hv&FS(^&DrT;Qs0ZcOIJ#CYUH_d!GD2Kch~YwZK47bB^Edx8-$>rsuX zWb6OFAlHc)^4cNY*yK$vb zwv)YDnlFN-$>9Z);n;FiVfZP#2l~{lqtt;~;XV&C%y@lKMgPYY=pAZ58D;30!|paT z5;CiU{escV2(^}eDemP};M`fE@B>o35XTr(bIjpMAd=B+UND+vFCR`|M+J*GpZi#W zil5N>fxEXSK)2(XfWoq$uztlg0^(2avLA&CWl z!Pyy&>pmIvE=$;RFG4C|gWjVC)!BH9(SA%q-{)bZx?n0H(@E!#%Qdi0oo?P$dLzd# z(e1ps)=z@_EmLC)P8DQkHK%x`8$5JwT9@X87+Twd zMNl1Ww6$@9yPjY{gC5*n0>Rzg-45g6e{}toi%fKfPNl>NQ zeuw*2@C2JVKJ{V#R5hnv!nXNuDb#ygXcY_DDAta}7F*&F=|H*prKbZon$$S>pXb*g zJY>h{VLzSDJXmu^(O>5?KX!}tE@P3}9&=!r%d(I-5}#)jmW48%jfXhHi>tBV97 zYo%9|MEOvaU#a#7{TO$x8-M}z0idvHF;_*R&}VA)_@g(@eds@2)b?bwb9P2` zfm-iV{@T4BT^|T9TJq$r89o&hEdj(Q#L|=d&G1F(LN3aUZRBzue8$XLv~_&grLeafdHK^fGd{S0KHd*SbtdPUGibuL5#;eq;N6#v1M z^iJSHk9;6+#25PL-ZlNxDSaQQoUvk;Zu zzIBiM4WS*COT9&^IZNlh0REz}CoW zgx2<*3f7ua(&9}((bsj)m_^%@9*wum253dVn4$$w+?INkV1P3YR#7qCq=N^1?qGHZr3sULS;toS}Da<3eti?1maJcj7I2Z>8Q;~`8Bm%MO!EbJP zET4y^k=9ug9*OsHysi|V@eAh}&*lUpL0BYA>_W&}@Nr+CEHpx$c`f<*6bi>m)*5e( zEb5Fi4#swS!fj})Sbs=Pv8N2XHFwp2KPvBwF65$VMfVf6GHF3dL3HTkDU61#QUC0p z{r6V5Y4Rr0hKd%R(9kTK{=s|?$ag4;k@iF-`L|vvT=ySNywgZ#M!S6qA^~+?tx(&4 z?)QiBB4~_P=Xi7jt1`tGxIMhd%!vlFG#|>pId?}*r4`7R1?^l7X$M?RO@Cf zw%U&jBL}eAwU{^aArQDoIY_*PZV{I`c>1@2bhocC?oj?^actv!Uop0}dE~gG76Uh& zRHe>Qo59$XZU-UWc?-vUa1hR}hqLLcn&eL?caCaj>^SMgwC$=kaXfu)X$R{o*`sCl zrG~@xXaTio$6v~mE8oEK*~+=RBjh&Q#$9zYcC5GSEf__FiB9Gyd7#xS`|+ydSYoIQ?XXV$5N@75&45axO( zY}-Ty_?ar8tBu`R)Ja^@ixlIuv5tJXRA{Yr?n0ktvEKpT{u}Onx)>0shoeP%-;l`0 zSQnvUx5Hk@qq4lx!7+T@w`sON212_?$REEBs+2lAfuq^X`WCu|?HKSdk<(^0D#l_q zZiHiRe*I z3|3am2sx+V`UA$UUm|G3+66cONiJL3Dr!PXL>|2DSBQ%NYO5rTf#+1=b$~--Cd*x8 zDlk8F3gx$HxO^))B2&Y}2nDbBd`$z{2ii!LAKQt2>zn@W-Mnj%5HEsHx1si(sm_2m zdn#ZIhaG!#(aM=RT6XXhl&V8WSVsZ?1^%p7OO~gup_mBXeW8^vjtTE?Po+=S&!QIB8XSNx2zP2BKwy3FnA_i}&>gmE3jqu-jaOp-fn9`bzc}#UN4)PtwcfZG=7MfPw}gNPsYPxJ zzvVpcErh|W39o>a2wYzYP8UJh(SP4EHlT;Nm+dt-x5JzbkH``uz&Qcu{SKrdp)Qpy z&R#jQ*vZ^GM@h=dUnfqJu#F1dAhYZ4)}z&WbKJkJ-8kzEi$ST^wVAFy>A}DD!rD%H z2Gg;&1|sp;Qk=IHat;V8tZckQgO;OY@;ty8a!dUj6X2DG(y+tI@CY=yUGGQQ50CMj z5Ex&g!sBK5dsAf>>uVAouc8FilqHjC*|r(@wpOXfn=kkdGNe~0+Ds!4PJ(%!H6>%u zP0pD2oCLUN7V1fzW;u>CAxKSOCXe`KEl5j~Pc6R1=E^0!b+qsPIUT#!XfI-+vU+S;sOVjh-UbG6-qIVuf^R&Wj|IBTpSE?t@>J8T~dPC0(-&% z&-wePE{Jop-w!?lmZTIWb(JQg=Uwg6w19%SP#+x}46&B@_c(Ttr zUM}uAtYC4#`)UE$KpIaI=~-RLy?d015Y$h9yYJ|7##dkQ^B;V{E0WXVm?yf<_lDwv zc?fpmFKoAB&4wV22hFO0dLH|MmZRIs372(?ui4~0$74Q1ZPn+_MhcdVzT6J&!c_p3 zaR}G7E9?kq2enAJAQ5hZWJh(-YG&1AAW~_@^`nfk6b{nXS%SRiV=2NV94U=9WSSKlVCp;uhW{L7mAU!DS zI#`2nNUzi~c3c9Ta%a$SS&pxgvkyQk$WddL6sM5d{Nr~a1~r!0j<-4Ji#BxmZI)^$ z6brwmA)D+Cj6?6YcQ2FZ)g#AzdPi;%OqI;F1N>ZQ@0lL%0tKG(;`A{3_0w+>@LLqjxlf=hc)yWeMNpr%w=`8Ctd}Uw`mKjDdRIy6!%}9FndA~~!CwVL_4n$i52jr$Va*n}eq|+20tg#RDqRGbUR)u?%Xq8?8`&$t=rbGnC?p$C+@#y2V zjEf;>%K0kh1uHNnBHIT&%R^cIgaZslZ z@(ym*qhH*xULHBxstF|?9qj;CIYFTo?##ur{*TWP+?g{h+VRH-#*#z=xg$*SKEfQ} zUJ0+re04M+4Q`d7$t7J%auOy~z+nozy}0O{`>KLvzwHD;z@YZ@xkx)Hn-P)wigUPV zqb!tgZ#jt@;X7{Z+z_r4$DGTAFprB6)ZEXZ(6wl(vR%HoEjl(_n=u&(Rj_DLgSmOi z(|(0xsAYX9VsIhZJ_v+p3i_o_eV$4C<^Fy#P}5oDE7to*)>hFiFZ#vEuy}FwTX6h* z`@!(7sK6)CADAGKyuvbw<=NUc;H@KRUH=?$2mGswW-xvd~9P zl&k&-n3Kv@E0NK;FK79EQ@5`tDM*^?Ew=Kkm65-K1V*FSjV!MuW8M^C3&iUpQcj-3 z-gU(tbVJp}1npD-&^fjgr~=Trq>YE_d4J1QWYrlsSU{8)?R11@9PwR#Cy3F%FX{4!NAt8P4Qmp7PYe?kK2RFm0p;%kmkbuF1f-gz(>}nfmNkD8_(pWW^B^TwlT0s z0?@Eqz8~kOivR9Xv zG}Wz)8#82*l@&DqQkYRX!LVjYqCT~skWJI>roo#v<(o`+B`Us>R6Z?U9B%zL$|;I= zO7KO1h*;H?E5o@~$_(yrRdj#0bOf(~UX)Y*AKU9Si#~5_DS=cOE$@9p>B6Fe z^YPnZmm&7J8gUs`m?3 zfp@#cXNml!|D0CBB=yZ7wML(YuD+YkHtK^sD%jsfRxx(X;!IxlSQJL3Z9?o$@Gu;SIvj zcN8`P*D~WEL8Gi8GNmwoIHfT#_bl`F6Y0>Phv(LSU@Y5%_*1{kYW5q2>u6ZF6FUow3)j{RzjaZ) zs68!fX%MaZ0wN^rvY zdZQBjhe;ls=dj9R-Do=S=O>!G<9^ww?cYFfB9KoXZt46chQQ0Wc|$=%Mxx5pf(BnZ ze2xwH0ssEL7v$s}jma88`p$z8pA5(GV5Fws$_Yt522R;M(VX`;li%~B*hhg$=Z~$_ zHsvn^!o^-l>RrR+e?PH|$fX`0F6#jY?7bnhAA*KIT{f@998*1_V5Eh7dA`&N6$a(~ z%%O|%5+t-u-%FUfK0s@=hTuYCr?_q^pq}gksUV8#$EiUsl7COWd|;rG3F9K;7d}-j zY@)@|nOA#-94#53+$hGv^vF9?3p0z4W>>$P;oL? z!Lt$23C#6w;PD}qbTt-Vmk0&evEwt{4*Yu-rM2@!}wgAKJ00zDU(uS&X!49~)8ZIv;7O z2%XL5H_4>}?L$v9&<}TJ7A%$@O+m!coKz+;Sons}+?7Dy%t35~Zj^Zw)DAp>oGWm#yg)w`mt2N}wRI0AJ04&VLLZxoe`=0SL#ds_NX2_B-&Ao^cQ-DI2nqRf>O+{5qCSwTwP z=f5wJSdji0iVS)w;T`&~p<+73bO+d6tEJUgt)d`~PnjryWlwuj*&+CcwXd4K_R(-^ zI)+ncqS=f;zd)o4yPij%!{597EKj}MAS>mfVsbjl{skyTKU(!ym{*C;OYsP^StyzC zlRXc`N5EjjYKZji6y6iRh}X+8{f&=hN4`ic~(-C81x=CZ-2T>YGXpveIBql}&e{6rufm>E7ph>=?E)z~`uOY5G#F+~>qa}=B z2`jM?D5;2_GgEiw5bvJ`UOlQ670I;>4#rueK4rf!yD^A%8`vry9m1fxpq#Kf0Tgn8KTb^=^>QXrkfhL{YLtpO2C~Uxq=L3H8up0>4PGpy zAo72qij#v3VHP%hgO_Te z)y|+jM_U#aC0g1QEn9IAcl8chdcWj`@#SIVJqt3T8b@k@R!MRF--z>_)R-!a1#M6s zy=|Y7P7kET4V}lF%7}xunN%!=T}4=a0GOCwlG*tMDwEL$A}B}7VmlZ)l}v!FnP1cF z;eENCo+~es)}D?VUAuDY(m`-)Cw7oeUZrL+sPGMmBH6G?$JlTPT@~1_!$E)&VQ9xU z2_9oQkoqEc1*(fy=8O(~vN)BkX1Lrev?0Wa3Xy7K?}cpyG8NceI8;FcX#qDZ!|bs~ z=PmLJFebbKqx4z)il;GfYxEyv1_Y%ofj+pC0=XmQv?*E-Y!I7^H|=`HfU=h*Ga(PPbLHEyjLItR^}5zS)lhS z#|R;MfB{z3P+nZ*N0ZW#2m1(e&oxiiSO@vC7bS-Z;;JqQ#lHx=k3fN22$vl7piP4U z1jp!H^vWSx|Dn*qAKsv|gt&?t)^oyKtd|6ohE_P#`afuOoL>Bj0uQ(Hzvk`J7%eg+ z9ZHa%AlVJ#H>;n5*68CdP&@rn z*sIdx)wMa0Sb)l&KiyOupOA<<<73O!GYm#K7|O7ei{6%--XZUPUok`}dXiNK>8%!C z7`YmBp(lhtauu!r=#vJO5|S&N#@w!C`Q!znWc)SexD;PPx%<6~CstedcYymPas5dvlH#JLPSGXjZL3F7!ssm61zaD-cJHN->N7Du{tuI`wy`$99oZ~zx) zM31!CI^b!#p`aFUGU^G+8gg1i)8QP+>V47+N@pisXgH^dZ@od1sWDz z`2z)paV!uCX{eOBz{&#MjiBCd0moSd3qPM^BPGq*5y9R$Yo^w))86R%^^pXFIE1hh ze+CXJi*lvr1u9mbg+18K_cQzHK1fv6!B%IP6V52RDamrIjEc4vUG_FE!GCaOz`Fy6`b%-9-dn2=@8Z?{K1eZqwA> z?#oc@^*ZFDbm62;>`i-B&Kp&)NA(2!0*U{rr|4>D9tFbWAvh9fV_nJKm4BPY$eR^! z=@RI9x2~JehphoWp)=k=o;wqIsL01o=6n*Ur_@a5^b2Z$jlRb4U3IHPKmqNz(+BwH zh34GuLn9=*j{0w^L)58IO(Qc$(1N@*vHlEnuH=;zqrejz;)+n*oSenX)QeWT`4tJN zaI(o0Phel!5VsScnis@?-GO=*38VFjwD~vd_!1x2bj4h`5?Gmhh^iBcbqnY8G1Z!QCl6|!CY4` zvxr*a+d_B~SxIIZ0hb+d!8(4op>WlCOAx|S4DOvNtOUgz6n|i;6xt^>=J=oM+5yAC zs!_c66ObxFmdeH1RlMSg8xxzlbO=cvj0TCPD-)zvRr`Qr84TLQ(nXzu2y@)Au3nj& zZ~%xkDTC7l$$AB>!H1j5#I55sb+)$9UXIb3zt*Z*bl7~9g@Tqg*#vg8&HNcs0r7~~c7I$bRs zsBD&$VurLw_jGInRMA%oc&%jBI$mRJnLm^Jt4RCHCZNXVDV(ZT?uXl2ekkJQ6b0EE zBLafsUk?1iJ==9$Yl)Nf_bpvo#BI`05wHBc>Tj4O8VS?Xf2}7K*t2KDgGVFSLEkR* z$`4m*xN6;RjrCybi66ZCmS(cvk~_s~`d`IN{*k?FTu*z&$_~Sjg0(W)cpm_1S`BYh!1% zLe{pM&sCyq_0TAF4M&320HSs>2vnhlx5Bj;9ql;r6zv*Bu~u07T!8s8$>XmpE_dHN z?!uRuX%^{a9p5hlo%rSt$D2?1RA#fS$Zi?kn6Z7o4O&mgpXB?K+Vr;M6FY z+^%M3AuEBt7=}WdMz5WTxB>!sUV--#LpnQw>&%ip%Xg!9fC9p^oQFgj26k$w((bZ$ z!&Kj1N655s)OPI-lc!7U6|f~gny&JM3!m%$z-*54DdxlZZ#=g(ejJwF+}Be^;+c!& z@2qZmW!#YMj1q@%TPOttXIomdNY%ERC{5o}zPD9X-SL{C@5p-Hqi zNL|B_?6HEC-AB@zG~f3AGP7&UZ#epPlYj0o_{jwX@*m-82}k7|;#@7E>g~`Y++>7a zPQ5WsbLIL!=I~4fc1rV2%yey}D*lF6@p*!upB~+PK8W<&wU4lP^iqKo;s z>%$O=lHv_=(+th!(l_k#MHtg}-YPfTp82jx5&9>C4S$9Ag=QZZ&(c?{PL)_^ZA1|G z%yiBRdZJ%go$Q@%y_OJ(3AaUG1m2}^#hYuTiXT@|Alw{n&mj32J`rBjo402hqvPT| z0wmJVz7US>b{jTJVfSTd%Hv#%}`xT%(uxf$SS~o>L|0- zXLB)&@`RP((x58E+lz&}(40N;vAy7i3U>l%gs;$%;G&#;+CaeAo@##-XVeT@%ShdIVojU_5Fwvpc zaOJZS`g&eX&J5q>uP-TEVRRzHP;T3&Q75CD8S{h>Gz09OI?Ak&n?5uGiC#^6uXi^8 z7BY=@@t$j*MWE=dAVzz4f^=GPmgs=*3k>4|&s(j zC>ii-j+|--gdN2f7DRbNC9o%b9Z_+)iD;)-X#h&{f;u&5sS3_{7AgLj)zJMXsxE;$ z{d(kod7lMSYY+YkuvwR5n-{lR=ECG+F}?-9Gi#+RNaMMfF3jYrrxKl33q1q|VAwIY zjh7bJ9KHM3P(cc&v&qTrCdSAUfDHmxTbC5cIa;pMM;Uq45iHaL5wt$9aLFpJs8mgI zOlh^*dm{ovfmD4x_97uyBg4{pK6Re@s!@PMg-mH}0YjDaNJs^juIV6e0N885)O)_% zDU}@KfknRHeHpGGX`wFK9OZc7y(jSk>_YrFdwy2?CmzN5L zZe#v=2xPS2!pXTw-_gbLzFC;tgemWDE9Nv2!HepuPzW_0IGB$cykQ|CY$L zPwm8%WZzj!lEHgk3PHdvo42i&NHn)t^feRW{`{K+=p)=ZY<-0rU(vPJH=xXew4tCpi##!1eu(J(?~rE5uAm4)hd3WZ6R;47cgOH z{yP~4?#0^%sU?o?HE;WG+XNh@tU*uQTW}Ttp;6VOtYw>;?K+V7Ink#gTuSy&pvP#| zkR5F6NanhDcm?fNoRmnDdBGT@-~)a3b(PYK2?SejZ*aV3?vcorH`OUB?1&u-CChwY=#gwcr@pr%DlS!)Z03wJ zkoWG-$`2fiRS2HZCB8nQGS{2C4#we7?={znsn->CP1_>#_-lQtv+GXUu|da?qKkhk zwBMt2!fooNBq~zyyN(3iITJY9#tu{Ae$5z z8EJY11;Q$z0JA1A7(7?#{jpMAqGMrxAeHDn`osSvLf+l*f!_2Qkm=DLV>v)=wbnK4 zGAw36j(Fy$_^b55`EPls4Ywy;scqf=DqEUGA3UJyX=!lXR7=zrQnqEr1AA0{Xk#3* zO49b*ypS|aTGfZZ{?u2P4iT74;yGV2>_EoMSj77$E=T6NUV{MxfJeX`0r(QM2d^!i zjnOv_#m4KV2_tHcc&P8u6^1YCWyBR5w&bF}Gq9G)>`#_3gdI~LoGgI3K@-)k3TNW| zInp9hbt=~ES`w?G_5CUOKCEJtMnRL!I!HK={uPaC4b@8{Q_!CES2GGZ z6$`;4=DpNyC!x5Z0>Ikjo-Lto_Z!%fureH+$3tIDUt|)+CD~X7Q>+j5Mga4MIf>um zqOCLYP`<0I1h&@VtOkqIu3KhO|5a}NF?o`V zGx&E0NTZ76CKmrXX1UCv(HTn}At(m4ny5CR*sqA1(;pbiLbxOT)Oo?-s-nfa6OM6WpRlY7Hd+>mS6etS>xC>IwyUt= zqXt5ju`vp$y>Qs4(2L^e1~uxn%Kw4-?siVae-k`PDJr|tPL29lWn8TN;}upH#aXR& zr5ky(rQD+`cwOH<4Hi39HTC4{j`|XvY9i`lgI`?AafnY+&vYGKa)YOVbZ( zv);lEK^4VR0`lHY%2?{!NVX~}$ZWFGXhd!Ig@&6f`-N?KIOp%-E^OlIF)SZZ$~sg) zz9C7ZJt4_vw;^owl29g1@x39~&M1YguPL?2v24Jbpb4q8uk6F#waz=OpoQb*1N&JE zBM$>wa4|xU3vS$nR86F!!i82Fg>$0oB91=+uQmc|@7CqV`CP*DpPdlrko?Ers@CC~ z-v@g1v|k}L|0$>ZX|*cYX8A3v%56{u6>pcJvpOGz%p>85{Hrp+V&?Z2*@ZDrcCuYg+Wol=DG%zYhQ}?-XMcd5K3BF=2u!{?c zZAar#{}&~TWs@BOE)h_e39+Qngl3GA>1X$Oc>_EM{gL!=P|ox=-jO?4{ZZt#@Snj& zfnc^f6X6X0_RM&zi9HQH=;z?-Ax+N1B7nyLQ1=rrc~h!tP;nRVYHLSh{;vravH9|o zbhno9raJXn&_IqBL)l7(xNV&-uU%T_5zC4H_rj~#9MK=kYh_ya`x5!`d1e}&3n}$~ z$*3wi`aj_2#7;6?#7Wm}!iBiSy5mrP?n5a*ZS>o8SdIldUPuh3IVRSuy)bPP602Xv z{1e}kVYFBg_^qMwwlMz7I|z2ZO9o~Mf4&;f>jwWU)R@6;xc~vIz7*q-qkmo0{V)js ziq8OfJ|Mz9x_`>cMz7)G^1Fv@1=HV6^zzg&q7LLDPMp@qvhjR24E>%YCaY3`>{yMG&oFR4qWxrsYmJ5`!rpGEhrASh z|57s&s1gB98{a>|AJ;t^IH*$N3de`zNLoe1`U98YN0`2l{bTG3br0QpFQ|B{X|*IN zJ60u#$Z(3#u1cZwU5xI5{rOttJHI-V?s=EYuDn4^;fhJFkQ=0%pUNPQ!h-u-8)RLe z@5YF1AJ<#lw&;$&Y?;5bG_KDN$(n`m)21UW47?BK@-Dqd9?m|0jor z&=TUNiI@5p>fr)`iEr{)SG+V-9veZ5%?e(HwQl>Fsteix+W^Wnk@#-$=>C_|+}sh- z46e3K@@P1Z^@Ju3X*bfJ$UhQT>`o3hZC`yDHbWAoJ3b`S8GWK@Z>pg?x}8YvewY^N zRNs))&=S)e<^Jtd=rVDb=kC<_j$PMPUB&xz36!X^OtU|XrlZ`5veOUgG54jk6L-R& zyt#R=cx_zn9+0b-+kkhmXJf$eAi_|G)vAiTrs2q!Y~q#u+=0HDWF}|Ui*>%FQFr5y z_bOUyBHsSc6Tzhivt`C3HWLdlb>>WIeDE&})A0V$={g{Q@msEs+dU?F&V-H<-1cxWpj?x~c!s)SmD<-ZHZzhtp*&#Uqe~EF zTCV+(2b~7l-XC+ip0HGxo_?5mU^%Ks(-^0lOVF@x_Mxco&N0|X7K$h7Haf?KAs`z8 zc=w}+!9&5NZcC)c5rfUPTHpKirBoU~ElDdKd~aw?|K&7fBU9*onJ8#XeaA`QGe)M* z_IKnp&M-?idJZz`I|#09;^FkBSprT`XKvz-%RudGWNx~V^oF7u3>KX2;zys*nDuny zZk@j$c_^Y^edmVRP#dT)aCiB?-5cvd8dRCMe zMzG+9oA9NE;s!W?PXHSlSsP;2fLDOet_#s_h=zkBspZjNYB5AG?iGN0s5(H*3Jw!l z(*s_dUl-(FevF%rh8q}N@!jo*hQ`Ffy`J%nZ{#|<6y8|s6lNa#LNG1TQKzzoKn6y9Q#nj+Sp>_YI=iWlt2eGjeS&w!7Qk8h8t~k}(&n z5w(#Ccip0W!Um*+3jQkLFpzrWU-r4O4Wd=%P1H5VX%{*$$b91~1rBj{gZJU0)^xSm zHK%WKW(Y@7yV*po+Y*qe*x8VuHHas^9X(%mWkOs@m;b6;;WC8A&1_QXx}6@nZy`^t zr@1@bdS65&{e{ulT?SsRESe5t+r>Yg)VS)xXeiP}_-wvYp-9F#03R=h9f0kX_iqSZ zuQ-2G4T3CshyGtrJ2}5XRaMLn3Lj>m5g!)ZEouOgqjjqE#mcZ;&Omz3^Iou<=S6sa zw6`yN2l4~;67-oAXTp;ZHbhfHVd8@Oo@OkA$Xs-mQOjHO&oAuC6x5;iMQy2Y-6O_b z6y6gzgCVy>om>p)P$dw$^%RbQ6RdtlXs`3=0P>Q&H@QrC&|q0lR_ZQ9DfG~VeG|0no3`phj4xiImNI-n@1HmoPAKjg zrgj=tRbk0CbQEkAV;UwR6dUaQXke*a>O5lcM?*`!ry_-FC7RP91UEau9`>^Mra~lq zYfSXDCnZ5bJ?*_nnx#clsxm4_Z)o755~)}m|0rf!%eXUaS^i}Ir|f16^;ma0m2eB<1738LVaw{azjoUSg3zeSH*-w{ zC>}KB7;0_%`^cNXn+(KE{Uh}}p1vu20R@4oFh=I|+b9nWwA&}U43_jI0 zbz2x2qLz`wRz*#>Cz;u%4S(y;2^Wliks!NNznl>v^oFU-MM(V~S=Pixl-5i%LUA?^ z<1}bxl3BNW?DTjgi@(JkcIN}i%q#u1U%%`l*hX;%vLA1G&`Q4m6f)v6VhRqoMh z-TAzNUk$u*(VRl@-X(um_j={K{mrQLH7VFu5UlfUi5a5T8!^_rG`7&(9n0rjK|#9K z3%3cZFEIV8VC#5yOlQYiSEu)7GH=o$nC{2>zC{~9+!oS-G<6bBJ`oRS$v0p>6>KoQ zOHKL?3#{HwW_weMTL^h3adWXjev_(uHc-#-`2qT|fY{Lbu01V{QjZ6*MbyeRkYV5j zrH4_CBhQ(0@=F88s5oB0&SN((juKe>j8ZTxV$I$|TZh^tn4ToD^RSN0eZ2|?nkMcM zVzSOLj(muQLV2fiBBK@E4kMX^tc|A@UXLKL_5Se+*=VA`OS`+r)qM*m#Hq$-DDYw3 z9`^H5>x*8UxyX4l>OAV3wvX#gfh+k0l2yrdmb&FY7&Kr~rs;OP=lFm^&hAwiCtkL@ zz1WR(?c0E6fLdB|zL$m}rwtWnw^_6%KiKg}{2}rd!@V4R0>&p*6qi z4x#>y@&l8kg6IloIO|UiM*%N&nrT$8W+((reeeE>5KYWJnesN@nvGTS8!^QwYg!7= z#N|R6$)0<0$FrDMwPI$*dkc}!=2+T)F;S;AT&NxkDZ{=G9fNL zB1+G}H)=1C$BgjAHS9$2Dfidbkcph(onEB&FMML<6}5X5+j|t4Xv7SiJznF|4y;?q z)row1`$YyXnfO=ui){+}j;~HOB+^-|jC7h;Dk5tFw1vWEO zN3ljC-?A(*-}rlcwmB4T1GA0W-=tUNl15sCG6io?C|00cLgmfm(&br+H6oaf&v;ka zT0t)$iRqqXQhzKW6)zEAz>1OyT%k%RW2jpQ$&9m^!seFdVyl;^W$O{dBj4zUe+J~v z0J+2M1MgQSbl-0!kgJvvgDM=X5b($uYN3goRkTlZXWX_X(hbT)KCTC@a zC3`?t)0H^4E9vtJo`MZ+p+I{(TJFk0v}1H3thAI6Z95F5=o@_0GGm$cVuSS6Oxdq` z+9k?Ar2nB@$jT568|*G~+b9t#Qq8=dgbckXz~Ky2_f;~#f@#mQF?USV6XH^GEOXd` z1QXHc`N5`o$N3Sk^S6v>1Z~zoXD(XdooIST2b0exJ`!Pcm3(+jyA9T;x4xppItA1W z_BOM8g6A!gwFpPQ2=qMuXh*=nGo;B|RL%$dybwJCI>um?Aiy4;?+RIk{!tTT=Ecbg zVU_Tf6(q@>DeRBBer~A$(6PVM z9X<3?py+0NrU~hk>0#WalmwJ4DVQi1+nIoT`gJPoorz%xhFor22u=i*omn1u4$IHk z6&IJ_D@u#v%HLx+ToS+2ay*PA&I%8(*m4n^Xo03W#u@1pjl~mY*Hd+k9Z2y1gYC#U zv23>xbb4@6&-wtGRE@R_+3xu{JVsT>*}i$(OFTk|rG{w8!$D5;$66$cL0=zz6I-Hv zr(5n)M#0Uzv2X&FTZ@SHy<+Y=jf8|g&Cxp8O!b4a*!1}2^W*CC{WGDGkPOk(&cqqy zWNK*p-<7?Q6(S2ODUkHP3qC$32}>K0sS}fgjUmWX%+%Q4#FRvfo1LP8f8)6`}!WGCP9wxLf1DKm**Z( z3-~6^7nqR-6LnuG8zSsWex}D&9___P0;z+7lO{=8v7f!~LT_Jqb*gbkdI+p>HKx&} zgE}1)8!D@|yL2!^M2gaBw$?4{iJ^4cHc*LD@)|v;=5yL9)#ghMsn^)x?TEEx1#CaH zQTd6xYMQSt8?6Z>p1F$*2obKrOkmktQYH(<#bX6pqdC#>mLaP+#kEzfC=3W;DLtHS zW~#$|T;O+LR}=nt%y?|%CdW|NwYu4oZoQOeXXXscy+W>KrD~UC|JJv=~UfgQt;PwO+ z3_+y$&Gl#04SjZpu}+kAamx91go(JUfie0~?@3P|L`1^Z9}m%skD@&lcOpu$vd&k= zr`8qndtEl?RBj}C5Wkg`ApdvGS-Ji%HD_n$Wc~k&&OaJM!E5K{C;lNcXrb>fK@xR? ze{Fl-MIc}z?lv`u7L*?8x2+`^q4kZWg7$*by|#@72Qi|6CZh86u{pEj*L`k>NAd?= z^Lz99wp}J(Z|dW#R74$tk22T@azk{nSTez2H+BH;_dIXE_c+|W^^x^~mFdR(PUn5v zF^X>Y`B57=)cr|`W^UB-K7GMpr?h=;ws6s$d6U!i{&XS8GN29R@HP%l`gs={oX{cF z3|nh2NZj09cjAy}ru^}^f8^(jB?3!!{^mwGXPzhkNbNe}$Q8Icahtf<-cE`x4;v~i z_`px}Ek$$v{LmNtxOij|{4&Y{%8zO={matKX~{|Lc#N#)>&MFD9R#_3W-zmthXa3e zFIK#i)=j2F;8K|{NNPdv-SnK(u*ayxlukOvmf~JSEzI;oJ)jwvh6O5~7QsnA*J~(3 z(J~pKo@M~uvdJnE*UZ|1N>T&%k2-8cf67{r1nV{Op(zWB%8-0%&e)>f31>rvmshI8 z+;fAF8o^b^M!KGhS$f9IcHac88k}I`s=C^Do8Nz~+z1P6CIg|ehO|Zl-CiI4)5UEl zwH&AtlLM7{0K5$t^fqLu{+eX4&Y3dzO{SM^{o+J>3EGR~cUGJ+h4yfQn)ro1;bA(! zD(BvqL#1W)w;r{etuN1Nm+>z(g|e4E<{jG)cGhTTcRSS~sG&~``x#@oE>%#UkX}lP z-QcOUH4(lzrp^Jo&}c)y{flxzC+3aU0Smm2OPD5^>E%qK0j@x_jb9}4VN729>}p+p zywJB@wtq9Bh7&{`0ve0M6JcEJBy?J8FhI zO3+#LEyUqEtC(VxLG(A7KerodCQzoK750c|3PVk+fQ}8qGuUw6`t_nVMp+g(2IQK4 zj&Ei%x45q2Le_&~LLt4Jcv&hTmi*e>v7Hy4%oGg<-F#b2O=KsQhVMK}LAIs(-czXR zSz=ZNnJM1NJ6e}AX)jI@BGWP2AZop9n5KQN0~q<-I!;B1V;!#~&8wDBnCxHuOMQcb z7<$1${V7ALrj588J?e4<+_$=$_NwH}3;TO(w1uIK)eIqr#J+Kv(SPgv%HlB_#h8FSHegX zxe`kCVu+X$h@4|7ah@y0TX`f3cCf?gTmsDg{0W+X4xwFeL>sU~OLC;G?O7Xi?MR)y z_nzT6|0%ER_4OPw)Fs})bP(g4B3{g$x6y12)7nDd-{5_3fkhr0qZ=iG(MsGaL-`)uyqZ z1E>RS{lZy-=GmJ;mv(Dcx6mmjm(m=6Q5|lb4TMf0VnVimucaSw?vS0?Y&WbY%uc^h z2Kf9`YDGw-s+dfn>2+1+&cL_GjPraJ&oiBt! zlDgn(?qx-{Ft6XsibMPaO zF2OO{FpsH;MA>g)@&xr?lqZ0(GCJ!rnU)==G&1X3F&{wDK7XQH(zX)O9KcEPkGxX2 zd}F|16!}Ou{&FE&sSzf;vf57KC<)~AnxkJEIgY=36%95~tZFfwM-}bY!nQM>TB#7j zI-=inM)Iu75YZ19OoUMn3&=m7_p-f)=bqjr7b`yq8WlRCg%*Dca6SbXvng}NE0e%5 zIN&50=%fh~{SRaB7%NKDY>O`2YcJcjZQHhOdoSCzZQHhO+t%CX-JAQ)%XfdAPI{)1 zuFOulQ)5=u7}Yw3A6*7KlP4Mape;5pqX&Jg8DvgDQo0Z5*q7 zU;?W=jSZ94?4W-~nao;NVMSG@ejwZszMWCJ*nuCppX?Z{}0Yu7FrtMG+vf zOJxQ}oJ1u$X3!^gAu7|Xxmn)Qi~+?NWU2I3RH=xM!^IMwx&0FT7WmYw#4uss-SnVV z4C$&0*dtmLfo(=-Ij;vROnT3~;mP`B8N50|Al@mnp7Gy0jAEOT;_94@!to@sPeKaD zw~+z3HB*sF?|%M?gllMgL>b=njJdO3J#vfj3say-uH#xfUM}%-lCwj?w1U~ZWa9)Y zX!>1PE_FPm0XT^;;bHVR6~Hq#eN&<|c9@)%lMnr`3GMUP8VvS1S#ICa;)#Tws*s5;n`2R)V?lWfd@O zd8vj-V}`R(_#69@b}mR@RFigYI;w>;w9qf~Bm~dAXIx>rH6>BQVsFcy$ABD%JC@O8 zg7%PCW6+RMd8u>A`vWtoW7LG#PVegWG13VK4+PSO7CRmkgN0IFZTlFF<-+waWN2-m z^I{Z>8`~gT55AMt~13;sd(GCoV07!kR& z*H3^?>`{9)tLE7n11jQ1Me6gX7RxaQ_Ioaxu#em1gJ+x>w!5#tFm(s%i!J?@`6|4o zn#YZ4-8$-p`1Vo|Gb51=MK4#`eP#_HAAHFq#)Ey-No$0ZD4vQ0w46Kkx`~C??SUPX zWafa8(6WL%k$ZBqqp2NlRSlVuTYNT|zO!uy!olLsD?~-q=|$BJEdo_-9{mdEpiTqp zeM9coxvfc!It}t?umJwho*%VG0SV>se`6xzxxeMDulfcO<-5z5u8c$n7bv$aqE=Tx(Yg@F&rS72% z0MgZnz{V?%O7u74{>&GXFWuo(1Qq+WbS--=gFKuQO#0dZvb%m@GL^uX$H4EIadxH6 zqTE?I>trVbe(~YbPtG;6=! zAgAfnH72q+R=2$1wLQZ7Ikr;QNHd%lZ6(Q!4T7oknU)NPL7jC~!*K{Zw%=N=ZCqVS2bo57W+&{6W}R-=;zT-aM|SiO?PxW0syfOQXJAvb`&MLV-lnBEaj;H3I5<8^P>7;nL)nNDAI+i5M-j#r&(pF@>zNZt zLgWySb4YSwt1D?bwii=Tt+r6v9o8NBE+ZLF<`rig4aGl`npElt<1EW#IwJtBG+_x{ zaeC*SpL42no{W>kBhx@&-Y&Ba9sgt3~Pv9?6PX!By)!&k@*k1<3swSlpCJKcnx zj||?V(B>%?mu?imCDo*Uij~D)lR@c}HvDR00>oO_+8zbs47ur?k#NVXrsw~Op_rR< zi8f$Uf>#7`o&4c{DIYSH#WIBzB`3QD(hQE49gYpX4E9lf_ooka8iJpue}o3RcuYwi zL1l~=+2!^@J=bjFLlth(q~GCH0-9iiV$1D9u0*%#D(Kene)jL7XGXq{WspMc5021# zUCpbn68aQ%pwWnnbLstj^+5@@7F700&p62Bxc*(B&*vQHXk+wI8Zk)e`$SU~kpQ%jx2(+qOJKRPWpZF z%MCZjvpiRNY8VzqFtc(PxfxRJ(d)YB$+%IMKV$O(Ts_NNVH_8$ z%lPIlwrqy6<)}u|6z7Xybs<6@8Gk8p1E0S2Ch7jB^sM~ggVApVKUtB`e+BMQsZXmW-RB>lwzk&C6;CB=o%sl$(Q5fs_xhQUN! zazF!{D~;%LW-Yya34Iu*W>Eo|TZSRmQT|ISX>>R`MdA$%i{BeHs9x1{g(B>^AQG9n znMdV=l{8qQOP!#WHn91j!>pHv`QCg0wxzRTqYSe9?j4Ur+0g#3TkUN-yhpEV8xwRs zAOOIjlW?k5EhW+h2sK=yy#RXiLT4uH+?T-v1I^sbhn82PN?dME%@OdMZml?Y~ z_x<=n8^p`sQYL9t6?ko6QW7fw{J%r|nT6_-@jkd_}z| z?m0Q?ytEyz#+4~Bg^#vSbXnV5B%Y_qD%5t&K8stdVCfqw8zL!8n>B|Vln8k_p3YXn zDI(0quyl`x$(-G(R%>t~t#3NU-QymAe$g9p3KgXqk2zBl-V=4nSQA33ru~N|NeZ7x zqAPRH%M)*@8g^_PFs;i%13NEtDSe*XQcV5o!{8~=Y+;!;!TofMJ6Gzj*w(jw9gNvY z%B#NUg%uh_v{lK|87TiAY=8c>!rLB;PpI+VdCn&{dQOwx0Ifdrq1G?Yc^~8n9nt#YxQ`~9nzM5e7v1Pg%5q5HLh(uWs8*&J1bDMayODTysfExlp4mC6p5)mdn(Zq zQ9nB)f^RQnR9lC`J&d^_($c0ExMA!-lk8k1rs?7}P_YNT#kG&OEbj-`E^l z$Rph08kEo(Xuzt2w$IrtKG)-I zC;OK{8OVL@eFEmt{m$Q>(>bG$^0{5d+pU>d827P!l_w9m=jnWFy0KYhnX_YNwXPBdYQHq|sp?C<9HX5~1&`C@9k5Gf9zrOsX;UE-3@K*q0b;53o>nMF z3V#L~)QuJ^q|%S`b+d~qcjtC}Lekwp2~GBzspX^b#0@HR{j6O4$c^=!opRVG)NqOx zX$7vOFTIg;b@kF9t%_zi0W8lW|K?#KHKiQp6(^@aycO+1@V*AZx5pcb5mT^-t7dni zKn|3$qIL1B#Koo#&!MAr!X*bMu=->#1n?}jHN+sg^Y8+`%LjL!UA(%eNyN4` znb~c-xc$;@3JrAaU-w5cFsIv_7}T;GP7cc5A`7%WhQfI8K7vKxxE~jC)!fD@4MRi) zCQ&H@B2W9&;KHf%lNqD7{!Mq}67-vO+#0AjU+Uw)SF(4um_DZ8ykWL;QI6W!AHi|> zFGR5EABe%s$z+!MmrWVVMo>A}?_5Iwf;ixe`ahe=&`i5o$7l)}a=LcsY}YCQ6>P~0 z4W>>Z%L4KZ6(e5oi?J1aDl&hYKi8?XD6o(x3ZvF7cx7!#eLqT43*Xrr&np+(Tk$B; z|6I^^1ei%DXOzC3_fE#!*-kCx@l6N79_pRSzbk#DlH#(Wz*Y`B3z$(Na@_MWb*x_{ ze3+`u;I(0o(Mm6?N;c^_4=4`TS#adN118bx%0c#v4BIhZFrPtPiwBmR%h@{cg+_gz zZRP%+`vFconwR`%=#iP_e-e6RU}0eX@1e(G^>JHbHkj_yfAQw(_%a-NZ-@lQxJ}|7 zP>!a}oAx1yEGb_;Bnb&>7mpGfIr_TEngu}x?Ht_VoMe@fANAzCA50fd#aT(RMC6vm zOco8VQhu_FTPJNGSX~s@dKd4vH{&Haze>61(X&5N-&Tq^RW>sht$MDQzwcWqk0h0T z%lYP)%5%6&i4PRfwY^KXG6fYtOJ>i9Iyw+&%>vum%L1cSaI9x%OWT8ZZ2#0Z@!EL! z$*-v}4sS0HH@$44MO#j^A`4}Gx?;IkUg~-G+J1r;E)PGXji`MeyT%rrd=}y`S6l>3 z>TR?ko@}qLbKQC?a&L7FdN0Kajb`&fEUii(C)RF$Uc=52?b736!O?Hh{ zja+fer+9|!jm=Xr*0*A>X&MYLg) z-)9eqpszTW&A|8kwQ>6i&z2-bun(%4GHh@6oB7GQm-*WTjX|)nKHHV zRM)(2RT$sFzck~hHZ&V&8+`btdRkN0^0aKG0U*_8hayRg<2kX7%P6`gcsAP3lKFOK zcbHPgwfQIy&?MT~M9qfBnsPTA;^#?`aj|sf6oOBGsul#RvZLh~D(c=1f#HNZ8{77@ zg(bW+L0F#)gxIZtBg}9!&cvS~8=yJ)Q2NAu!(Cra3$(Ol~axMu-9bQrb1ery#B zQ^Mz48Jfo*1CWC~s!!*}7rttLWZsSjnAGYlQ}mpbt??qE*mNu0Sw$1g?dP{cg2G^* zWxEEs8$SN0XE!QLq|!;<<-J83#@k0H#XQs#&Nj1KW-c_gUiNvO=npE6H_8MCfV5E> zI>?EA7+j87WU$X%+^Dt0zgkVKQ+*1~b&}OC{$ix#bQwM0u5JL6wQ#A1Z11fnXI){z zpxbYjIT1!x`u>&VH7FLZVHMi3zJZOC7w{`wMbQoKf@bcAdY>dRA&*2`QYq{`N5fVg zIE(}>u!@VbuXP~$SXB8Tsv$^&2j`2NG*4x#t3FCcT|N%GR=-56ndBXzIPA^4M6ypD zm&*zUfggpw9Um)Di}o6ajEpJk+rru2m08W`oxqPj|Da9wGGbF-DW#iSloRpE17>V@xU zn>EzvX?JAThOta?b~vBzAqV%WLnAr}Fcc1C+}2mTrW0MTunhAD+EHTTnXbFZx%){5 z2fDZ2?yBRlT7u(b-F9c1?t=K$1*+5@;o3Sk=HDm8ex>Q zwtGPOYfL&4>0Hi3x3g5N99&}tnl_gkCptO!@_u#!RoEB$n!|tM=D%PY&s9yxt-+z{ za%zc7i48NY1MO^AI~ZU%dHDC?oT(qJqy{l|v@IHz3pFV#G8Kz+$`vB6Q-m#}Isu1H zR{^##)nm!F?Kzbzw)41l=)jw@DMaB9?n~09A4?6@Za0)YhN%-HBP{)wR1>LJNZqc# zff`x+0LPn*U#5Fa_A&vqk&mpW*G;bNQ#Hel7N|I{>)i%eIm^D+)jv2Rlb8``%Ysui z8lFLxpsL&nv)|X4^hFg`Jj!Lfjt2RrX%F7`IC>CS`6NkI**Z(!!IEkROy!ma}hmFQe548h4vBEUjwOxxR1k935hL|LHGS82%^zf{~Sl<-hxjX{J9DcBiYAjD{>Dqr$+*@ZC=_T*O$(yNlhCAwcYV;Q1ACer7rhpkar+= zZ%4!(4L7bGCgA%!6?X5Hjy*d(;5$`^Ff~KN_Rr@;)a&yF{0n^1m_NX$Bk(aEAD~o% z#AxCD)gp2yNDXje2vytHbuJ%7eiy@4)1MTe87RAdN-vtJB)?4yu~s=knA|0qC$o~7^O=)| zWnOeBG->m^?XRy$VG^-5C-4dR%vP z=Fw(AV{&Njg6koD7bd`SU338YZV85)cBH}=w~@}vrJUeK=biRD$eGqW#^Og(^ufky zq*#hOM2vTAioUDx{pQ57MOwLyxF8d*QO9+_%W-N|>hv2rBa&%caHfeBp>3xgi-of# z@fAdbvuBxT^mo}5p~g1pObbMGI_Z%WUC5nY$eaHv>!4Gz2&(bT-NK){wL|DgB#sxH zd7YVWT*1G0Qomo9H`XXNXV9JoVR!#|cf~Pl46Zug`bW+`hXab*x=`&#>&pl7ZS+K4 zi#1LR(=j;dyoF~O-%yxJO5r23h6v(N*e^@PZkodT6I%~&+`^P{sY*~_BSn7V1dF_y zVmsES2^AOT4$5l43>^Xxq|2Bl88gvul!LPT`-aMtf~|cl6XLZnMY3&Oo2*R;z8{(o z!ohfW$i#%|rTJ%_#YRsH9oNNo@awgNs=Gnvn7OHwMzd4X;&WoR9%6eMGQEFuIBT}* zBa5T>bcTksn9_trVzXRc(g`*~MbQy!krpf;5m&mzs19Ka;VXV;vDdiwVDmPN&`3E5 zcugP1^BIz=53(JRv*P1D`wZICM@BFDP*R8Fzw%mOxePXn8LN;SRI~ zWH}%#MnDU{f5-mtFBV0911qNZggFKJ8NiCm2&E7Jb3h|>69RN4+@wm4DQlamO6Q5e=v~xt3HGbCoyJ5~eKGoTSUilu6zdH~3k4juW!?ewh z1l40YzZU-9Rybx?+4HxgALAo-0s67pRaRui7_u?gFthf5dyQ;JN&M`u7TFca4{_yQL)WGQYVy!wdSvUs*<*hOulq~ z@x%|sv7^|i@?S|a>H;JN3tScd<9{P)*g@}|Jz*+;bkTGXO@CYIbn^7l;{x zJ%!8xJpV}gYfRDOzW(i~tB=+N5)r9&Fc#J61obpO+-3I7sjYoQC-FTV=%k&{4RVu&tji%U2A2|`^_`~y|pHQg;5s` zH*}TP1(c?!<{EHwEWFw{wNJd;C18C4=VeV%xaEuq2OkEC!oVtI7`tomf zn(CG9uRcez{u-EoB`#-+W2~Ozm?+%g(d7-R7GMj5kEYP8<{KCs=)$v2Ad_S&roJ18C&Ej zBF_SK$5(LDmg z{;6B2fFOIkLgBl8y;Liwo9oj%k8WS*2zKJ+rrg9Onq}*CGAg;lVTonb&hc5(7cLC{ zmOig6&bBz?AD&CFSaUl~dbVDT=?N%ZZq>>UZ}YY8yLa~{%CpIfz9$Rq${IsvlgqKv zMz63mBq;$4VO<)iK-vqu0)fv$IS4C0#bLcY7Z$a{T+mwF>=#{K#q92n1wz@Lj{s2- z{_Lp{h-rD4m8iWpz2Mj#4wF=OQ!{q#DXP(isL|X%n+hvGX9&!@G2}k?WQs-Z(@s)3 z@>-)|$Dd#f;jDiv^4(20&1FsGeifWyBQ73kSt78f{vjK9?1`)qfy<&}qclzJTsAa- z+Zi`e8#sK#eRp}ozzJ?~2xilRJn!|A?GMdexN1$TzVVrUhBN1L_N)Q0c@|(R?Ro}E zUu-)F#50zCQULM?ta6JH_rQ1AQ7oVvtW&P=R^lnf5xl*Rrqq&jg1w5`bRA$W`x;pW zP&y%WP_brK3gh3?S3ujr-KIdICn>6qpZ%Z3B->pCB`V@_tJn9x$Y4A51R+f2ya9XF z#pS4on@{yUKrQnDDL3_x&q*y0(AHe@Z{N{Hk3epBnndYXf!f9cK9}ufUT= zxzB*|-d%d_!Ya$5!pnmP95zK2pU1Uu{qNC6&4F6JUz5K8_*ZTA{|QoA|3~#y3>+*R z{~e?bYf9M>vBC7bs-3~BSH1%OO9*V}T-RpLcyV8As7MG!s#AZ*eNyM)m z&QFE?c|S)UNBo>2M!q9USG%KIyT|&RX+!Hb^7Vp8gT%VLbEq z(V2gojm=9iUbx?5@#3!6+2f?QXnVN2pUj09H1CB6iW%t}9XJKat=px*%3r2rkF-Bo z;GrB?N7N+2=6Uz=FWmfne#82Ft}hQCm}gxmu*Tk&)x0rA%;A(KtO7;cA!ZR&816qU zZ`MVmmOZbD3jv~;xHeJ5j+v`itOb6dyR@ekuj|kqW=cKQ^d2c-$S_vR`3KY;ii+*&U+acjs-IVwgGgE4Hx}AhRr8#CgI9Qz=wc*U&OoB%i9lhbaV+;x$s=~v z@2VU#GnvU$q(3$;n&111=)0+m2G3Jna9RQ`RRNF>Qg$-0OHO>tTCvD2ePK_umDnvF zY;6xq9j48e(Cs)Gd`R9C8qSasJE~^}DN_|COn3x7-=$AJE#BnS!386t%G5SXLnE4dR8 zecn&W9_?d5oYk7UTc=gAI|tjxfEF^TP=gZIe7Ku88~@9#Qu*W*j5Z{kcwI_rLV6Hd zaKE@Tt@(@-ZiF*$H;BNbow~e~g%Of+Kt$uEX{Lgb=8Br^a~-|-W-NyT5b8ZcMo95d zI`15lpitqKukv?VKVK9Z6V0DGF+048a?eEnkw7}=Zv&K6l-$X4E{M?!iJ~PAfs@M} z{FC(lkyS%w0KF=nbSb57X%xJV91fn-ie3OvhHl97H;m+;#+Ikdg~c7DtZ!E%8yq>6 zB;CIbWLs!^Vmv-LzG@Ismh$tq{^<|e!<0NJ?2B>!D|%t}j47fpAKl^b#JVimLFO>7 zJFx|dQ(3X;nC&0?5fo~2NpDRB27Odv)#|puwBhHR^zf}pTJvYLTdW_iH%F%UyR2C9 zX3W&9$=lrfc|_xkDe5!N$}ThjNu+klro$>$R?)MyD5wmzAa8AOk1`Bwb5IkNF;Rlo&H9u%+EbwtLj_~o=8xegu&o46X{8y|j*|=^Yz^o991ft1 zM^_8j0ai;KU1Vj~^>Y#`UpSH=?)4A&eQoXtwB4B^({mUwQe&vXYEH~O*S zXRwzMZP<{lmmP47zlzoCS~qs|TdshZ%RMyKKp z+bo~sJa`ravt`t%JhW zr;>63R81fL$OOo6$Ilsv6CTr4EXip#pk$oPnTY~j;6Nv#DO6qjghXO>7OgGzlG_40UM)<<>@9qLRmco^MV8PmU;mXv1Bcuve1$)E z+&@maec^k90;B4@>knDrEyI6;`PdZz=(Lfi9K>UX3-avt7<8d>VPFhDA2~Apk6&Rzcc+v zKKs*tYj3gBA?uZU2o~azlc$cgFuQSqBJm1~C}d#guE2BWb)M+!{upd{bv?7mqg1-^ zG}D59(+LID+!8Iq3&71;Lp+!D}Ws$r)%V^FagRqfuObt|kpamZyle-|~J{>5%IF6Dt*5d%)N&}0hZwW5RX#N5 zbu2}vwEv@i7$jQhhg5K*jXX}NLD@6S3Y%k@c!S~;D%1xY+RFeljS36}H{P;#z9M$( ztB&_$TI(r!Miu;Lg`-_+i%82p8=IIScgEreAW*K~2mBHp8t{KQdp5@ZQACQKo%O#v z`(};t1R^%L?pd`Xc=F6oBn5?ilM$SKEsu+nI|0Syi-R18SL~Bl8GnEjTL{ORMW+j)w!PWDRaY8OG%&zbnH?;eElK3rXXLvi`! zoLEVSwtdZH00(SmbQDpC&Dc8WSptx{-tGp;n7$u-#n-1emR(se-kL!*c3BGmoXUzd zx+z9JC}#R)a!cYGxxYETwZ@(Jj&F0Yq+A;;XxHUtQ_tm1^+>TyQ%g@%bMc}amecH6 zNjF|{m%s1t_Y8w^=QK5`zCw41v^ShQzmDHW&-G>p&}GpwSsnY<1uY&~;lrI8+@#HH z9_EVWl`Mbjzw;tX-}iU=KSy*J;lC-AeJ$0FVBb`#N$Fr5JY>tyV?D7Ba*Bi7 zqs%>D@-AITYzlAJ!<0f#ax6ICn8juNY1|dKZ#*Lxgdm)3>JT2W3k>;;tL-xyD20R-%N0ee z=MX|9Y1l>0fU%2s3hehH-FxjZt+`ma`exVKSk?#zfV40%EIRivJd&sTXsboNo?dh^}{Pn#A@fy1W*BKPZW702hY+PkZGfnP`#C}KmEUx7S+1_OaeqDd=AX0UTMUh^^)q$^BYY&#Y zJjrms=w3r6{^oGc)bO4%YsrW(i18>V7jm5_%5uzAGz1m?u`I?9C92_<0{rzRu(kYs z?Zl-!EY!R!7Mm`f4W|X6RwkA@veuP&+lYhR&sX zQ_`%i4FOVx9r||*uy4IoMIRa)Yyt;z;;dO+Ux%ZMSS;6OYL_y9*}vq6MAF=0<%6U^ zw_mqx_+S^K=z{;n9ecl|u(Rx}D6U2Pk}_B^q@KHjH|mb%Z&JEYTZ}~m2#Vcn7O!DI?XhOrX9F&Gs_rbZa5J6P}eVHI2M0WrBcc#>JD1BtTWvF zXpfrZRr*B?g4Fob%?whzlVe!dR%#--bF)jv$+eel1kVZ_zjhV2|EW@)zN)PBNU6sy zeb4I&=9CLAF%9Y6S@kPg-2~h}(wJeq2cVsHaD!*+;LeO*4Ahec{N;x!)U~&X1or`4 z-3JOt7I>8#tuY%?E~`|}qw{J)=@BAYRG~hB#iRwXm7&J4RjP3k=|F7AcXxF&|Ky+d zKjPT?r?FLu=uLQU@d+PiqJVwhHCIb7t%YaLl>kJ51xo8Qp=kO4eh5P?ElF3e$%zj| zfe!Fytd8E|mK2Y8q@dcZm3)lg#n%>>mnmnazk2I96do@gW<;G;Yitv+579c3*&GBG z>l751=KPkYl#uYC!dHFvWOhdY_+vk4qjojICigjizVj&SkI=M~_YG=u7QfpvZhTrt z;joynvWXNxeG~-v%^jqcP&8Cji>%AdqHY?XFt%y3gmveWH;=PiHm=*WtbBrTZALVr zCiY|{Z5^$a#QyFWTro70@m*Bd(B6J=zf5uzrK>etDV*nALjFZqY9g`$$?-Y*i96IP zY&a%5{#LjKDXm7^G~XAOhXQcSp&hwCQuyOiXdR`o>giXa|5qMHj8aN^jSlxd>>NHv z>mb0k{O~LRYo#<5F1BuqeSosDlAIZt61QS_ro0-!v8)DqxBXcoJmg})3;FpXKwqpu zr9j1;%=|Y`(&5}Py<4aL9ff+C1V%4F#&CHe=lua)stiXhXT&U%kayIc;eA;~2KDP4 zuNQb0<-q*^f;CwGKdkY;nRrZW^#3=Wp0bC%37xu}p{0qDGo6x)q4R&8i`qHb{J+D0 z-Nk316BM*_*P{Ptl7W>T>ff$ICu893XyLB)UrDxqSO06&p;I(*vU71XGI9FH2o!O5 z7E^NmM+f|OY(W2S5EA%j$H)NxA06<2ZU2W9m}R1*V2i^5@%2i<4#)x)$RQewz(a8^ z_A&qRqd2PTr6$>gXHGwu#_(CHoUywL|8cK+eyE4YWNT?0T@C(S!ll5$8P~9hFQaPV zPY#SpP5MNLXiyvdH`6O$j+oL4f@76Afs;L%^OX}op5;SyZ)FDenm5?G*Bw;+y-CD^ zG!wdk8&lXZ?@v+)W--jm4RMDh+yynJiKE+qhrYj1cK=Negw87a#73fXNV)L<(ddX1 zZyRHHCjf6z)nSt?CON92c&jj5aM2|UWzRqpEjx@V4#fFN%|Uo|wkk6USkXSZ!ARX^c+WU^mZz=xh|%y@&MOGu(0gs!#XV%Pjb68(2$Ob4DR^#D}Yicc`CiF$A3-k8H)Kp*T6ErS--6hmVaDS zm$M3olR8=3r6aq?8&5|PB=mj)(Y`-^th!QjkNH*s^Bw;4b7B7@)Za|LfuVaj5rWoO=2zdFXuv zhOcdORNMQ@*xJkUySK;s8!(;%j`)3!xklYf+xra{3(o%v?VV%c($-f0C8UGnU246O z;c#S?q~FO2^2fV2a~FZ3pc+GyqLk(Bc=PZ4FzxKaxf@r(%o=qES>55WiMo-hEv6z4da3pbi6NQ5olFDY8)s1$OlPH zKMkGKSbJ*^^{@Qp`=ePJ`9Kkd_{UdMPy`ZY_Wx4fEz*F88m550lSj@GVc!9$1`28GDgoVy+Y!BOF2rLB75=}OmJe)orZyYRlfF0r2@I3i)o4V*UKfjLZk z-01|4I%N`tcNG}jj2P)fu0RgQBCJ4pQJ=6FH^UIh3nK@w;dcn$kyoiuhu6&x=vRv% zGGdTRnlBv4AD+1-i2NCWsUx}r=Nn0p>c=6x0Y-IQ-66IlTMDUh9ZS-I0u(8n14ZP= zjbN=-Gvb3b?G(}&8xpDxsR_T~ghPOW9EAU{)OHHm)={Gi%ks$Lw1Qmza6IRscsYuN9*F>OndsH=Q!l%}>0 zIk*8k?RZ!$xxpmwwnx42xH*iW*0>NOE$>DA6wN{!M2b9tdTDY4l0kFowmjRgeyQoT za1xuJVq`{j1G4-LB9d{&4qm`NNj-mqTwMWgd zG}z>FrbyIp1DmefcW0?p&+1y# ze`N~fpx9}4gCv@pIh`|VN~9f)@e}c`4CX)Y(wdLHC)2UX2?Z-cbU6bt?l!Tsu@dTS zGFpfcK0z#x*cm0B3bhGB!6OKr!UziW|0QYh~`@OaLVhX_G569 zUh~Gfjtf+tw!8gtu7cB_HoSYV5y$!D>{AG_Jk4WCB-7nQYyuWf+-iuKna-Xxx}o*k zvivb6F`SXfuU1DnjZAHrMi)Kp+Lbtle5jwwDN1u$=OEFpM2b0P)Uq)n?_^1^*0)Vu z-&)HROjB@@=9BUm8Vl)aAP(q8FjQ|kG<*`zM@+ZSJLz)?1-5GgGX8GZYShMGUp_=n zM35jq`d*hY*1mB4wNe!~&J(-j%#xHP7!fqC2)Ow)Km(pa=^@_I^W<8UZ-{#=6ugEA zz~X<>>d@_@i>im8UPZA2`2ANt4Q{LGA`%~d@Uo9DAT8*zAdhi76=Q@s8YAvV0JLRB z3M+y}69xXDIa4Onb0E!+Hg3!HWZCCLfY)Mhh(BaX`ikC;;FsCT5itnt8bQ%DB6e%% zAwFLZJ)_V}8%9K4fam6nEX>d-(2^AnJ&~EzT-ZvLQMfUYph;Aeo_!%l>kZe7&AM9! zw!PwaSC90bAFJq>bdP)j3CVa2kuf`7k^NLnDOrRJD`=naC_4T@bnCVzW{a&*P~-g| zAt=P#t0!&JlTqN&I97j%0z9ZJ&XC03{U|4=2hrqU-xrh#>cexPa29~kC>ZAN{owSF%6G7#z(9eDL!nyjHo}nm+iS0 z*e#DOok9;#73nZ#sJYx}o&<3Ebu63fp42bvmuwO67k zhnL$MI%r&*@)`6g+{sk#Ov%(9vWP`cnl?C`6CE%UE4?JZU%g1YkLzh-lh;cx7FeXK z6$^yc8FG;Rlui~C37Dfh)WUAnq8N2k(MWTbTdtNHWvIyg#J*Pz3NOs>c_^GzTqhys>%cl~iQD+R6AIzKlZc`@)Inl6fBNt83 zvq+iyC@gzr;%oglr3fx8`ttbLOI8N6tTKi|n=mvV=I4t-{eM_dircRMcAzw$gl$bYuovC6;Nr)`&2}F;8z*=LnpgKF*}8 zD0u1*#a?=fxOXRvlzCBfNB1b|zOb;hDo9ltWhX~6R|u*+YT-Z|Z8r;d$uZ@kUu^R~ zE(Xk}%R%_uC^P&}s(kC33jyK1NXZBelp}5`crXAc*f{x&v5(CT_O=pr(A&%)I$}*x z-acfwaL`c(3iY^LPGwQX z#5@ulf#axbbXmdFmeuSuh^}s!q?oQbdBsYei#oWdQP_2IV{F5fmz!{PVI|UYExPJ+ zVepoeQ97-Z$CwPs0Qn?hU6mLZEij-H#F!ihDKpp@nffGejUSh(sVo`zxN2QAqOJ08 za3{xk{gOK!gL#a0z~#UZ<0ohTP3nmu^qzjP-3hJFmPHKKajl)RqC0!O<$%mALkL~B z-{M9jauOlg%{76pf^|>wy34O=E8pd+si{rE0n3l0CWTQgc#VIZ7o$7x}0H z>`LnrOj0wi;&^Yu0brmG{Ihc=AaD3IwptOTqa@tq``ltNZ9xp#l#aZMNC3&g}2fo1;T+z$pBSCve}vJQ znHm3ox#Df?$r$YRe;B>&5L00F;u`=gunTQ16M2`_>+Jm8)qhQ5h2!XzNTEo$T=^TF z?k{njS4VLIc|;L8Z;__2<`LlnU%PwqPvr5F$2-Nhl*;ZgAKqfF%BX&-A5HrQ&zH<^ z@Av5FWUcR~RlD~W8LI54qBww>)nqQ8?`mqV_t(S>^G|+Ww4VRdXSZd&ckkDo(TAtZ zUXN66EPW?;JL|WQw#vt4mwMqWkDWonq{4ATT<+sRDhzvIG;ea2Tjl&@>Z2o|@x<6I zSzFhr-&=3or=9wjg+@07?p}(XVi1gabny#h=>QIZV5xA*JN-l7z4{z2US#R6IX@BQE_e|nu{ zG9(eQ-jbudhISnN2B9d%B-4w0cuF{Bd*nl@hHdwHR%4%B}4;1=YpnMr2 zVxk~PmIe9q3wPL>lva_;{kmCR!kEiFE+u4q2(luQo2jxCCM}F|CT%{AShRMtEq1l` zln>Vy_8cwpqU2dbTF#zva*74c3I z`;%aYb7}VsGG);KBayCgnkOYCM1D{hy@ab26Cf+X@gD&z znN9PmNBZVet0&TCW%AVxAa4FU@ev3;!ytVId&<8=1maFAgjX^ra0$}rWV-g6{d^2C zh>TYrzVcYb$7Lqs`a-e6V;vlAh?@xZHA|?XoN!*VQ8YG4jZ-;u8*`=%>f%M$s}X8UQIttzCg` zP2b#mTW1Bl^6>QdK_jm97j(s&R0Fe6#gDv`5Mh_4^sYpOw8;w5_cqB&Tx&L~gJhJ* znH|MIGipW5mDoyWB5zN=y&ov+n|QL*j*@yzK;=|dUEON7NFYpRZ?c-lb9`qzn(l90 zG_<_72+@5wwYFxjk=Cj6V9B82>TdoY#=a>y6llvbw(Z>5wr$?nwrx8%wr$(CZQHh! zNl(qkyqd0>{y)F_)Lv^Z(Cm=6Ee)QCs3;#rkit!t5jEf&*hb}OQ7|`V{KP!BsyM(_ z2Z2?GIu4dw`3T3QD)Uo|7TU&DZW*C?(-s-wljQUbr)K(A-df%xWzFcxNKeaF+cUVQ ztu`dfP2>lvSv#>dugkTu!j=XYSUV=kZV_SotstV61S=o-<-E5CC}R^DZrzR+EeL8m zLXxU*CcQ=E!O$q?^iWR}A<|Dnni<3v6B(3YLP#X}pz5q`_EAt#FOFi!h)pTf5tx>J zE0uRGLDVXpw8x5s!1iBo1}LzQnN?7wHVHs@$}TDlKx$g()r0aEzMrr+! zpx@qZMM)po!J=*age8iwpHvI{$+Aw(^KIMD?yvF0j+2^*ru2?Bi)OY1Wd}an36Gy(LzFm5ZTPzH~tI<=;4j+A60)r-V4?R_3G#EY{@xH zeBzbUjKK#C@KPyR*5@X%Ei64spdhx|0WMtKdtk}@mkVxJC$2dq19~&OpK|%*+2Lp* zrN$PSCdn!P8a(;=7-%W{z`G=L>_%j-SRc(7DF9e)xZ2B9b0vSu^zC5+n0vonq7-N9 z41CIm+O19uKpD3@s}e-M9(KH{AwWbI8y@zu&j{8Q0^rPE|s=|+`r z*H!kpCn)Tz4yg`C>a?8m=U(QD5t&-pr8Zbl7&4xn$js1FJ~;_@ZWPIGBzDw=u|%XO z3nvzf7-B@=|zRQM$q(v1tk> z-$U<~)=w@^l1U~{y(hyUXzAv1X8xV-^4N&pUe`*x{!a2VxUmTNs!@9#Yx7qDy*I-U zhkTlm*m(^|qzPPT2B=d97=Dn{wruFFb&`!VBLDW)6sc0=r0ttrn!ML+4SgPa>W?V$ zzk?O&(h2%YVAA-Ds+y?1U#S|4qp^t=he~qEx&wXkxthKK)>HAU9(CNJQWz|D7entN zYQtINUbN~W*Kf7*7F(X(8dD%te+g6_P19-Hwz)V3Fo$;5U(X8MB4-yDE)4k8zr!`t zFc_PQGc7cwW~x`kXiAu8vcOQlMp=MK!(P55c+HSicfeL(XH9n)5YAI%@j&XZ-NtzJ zx8{f?6e}m(btQGUMt_y;&1=a-K1Q6VCl2(aqp2^t|ZBV8SG!xH+M z6*f~$jDGElp812UAUJNOlWa=|?G-+wz#9~Jf| z39IBHgWVP?00WN#r!W`Obs)oif@H6bT`9gZKxZej-BEV7u+}qy6zP(=gU(wKv@oQSVHl=^I>uIxKmczRiJe$#zp5Ko3Dni+r zAdYh*HW$sLx>i;6CvBTo`Km1A&#)q*Nz9Yh<2^VuN@USYrtD12GjXtJo6uTXr$tn= z)FiFxw^c?B{#j$zlN(e>A*Bp>_~m&Ng5%ejI0fyAiIiN<_{y!;I-oj~pM*bqq`z3s ze$o_t3m`=fh{2a#`~kSZ5?+{&cNQx>f&~~%l%WR%=aE^bw1-#b$!?_Eb(TB{&&1X4Lz@Qr4$2 z?NR?2YV+-!)rdPbP&bAaf?3aKf=os)1ko=Kk>AS-964*kIgl|Dd9Ie6k7g2voQn1; z@hr_~wvPZ@dw3G)O=h>u!lAGa5RC#=2F$%K%VF`>@BL#%w6*s_#w>l`E~6p7?Ak}l zRhWNc*Nkj}xjwlz3~1xF@s<1tX4+wG0?)NEoPo1ziznEGhpS#@Z&;L%Tn@~Y8*;_@ z;qtrBT6e4E%Yv9bjv#Ql?y~Swg>LJ3$OYqX40JEu!+m1Vs81ZaTvTmnk1(PxXAjgI z5P=6Y@EL?#sIQAjQ&ky1j}(_o@tg>DDEy7Vl!e3DsL&BSIpgFs+swJTh7$?7W@mlA z@=`f&Y0^P}V>v zDvsjiBCPDFFkuGQ{TTX2105}-KGaPPK6 z_avRo<@JwrmTM*VcI;Zc`6cggwNG37dsDc~gFvxEjH6JnafI3nYSdgunE6;&kK=8+TCm9Ht&y|i?+Q)P zTT~}<5ASBUlWSL*_D7bE2DHzTk3$_hObaFme4KV0)p)B0KeW#dgW`^Lzt&b|MY&_s z6&}7tD)h#cb>DSfs;8KC5O-ADflJq#taC@!XsgPfsq2(RGTarI@y3LLf2Z&NEQ_W5 ztu6!>?U~w%Rv2uKvv)kwtfG~t7Q9!H5~=4A)=8yC&G5N1fU-^PH$gDC6p3OK#;BU^HTK5@>8+LSSGZH87G+xjNF2RI*Vo7;t_uE?Gx43Fko|gq5R731thjmRwp40bc zz_h=z=yLB@kG7o>o(Rh3IWc$>)NGnE)7qgnf!h}64=SUQl>b9gRZeuHrdcIpJR*&w zs3CzODjZ_U_< z+Y*4O`G7X`>zyZFAmjQg*185P53)gAA@t2I3Y$Rs*3Alcr_OZCD@o!;!QOK?yrXq1 z>(J}4N*!xEJ(xh%RQi7A7i`bRsY-8W8KZS*pc3d{D+ocSWwgAXKrnt-A5|#|3f@nv zXYG&#D|wqoGmWBZk<-$x`lnptY=}8f>d$J`cTu#USFdomo61#O?Rs(Kw{lp245!5P zX|4-e-4GT0%dQM3zNMsI63?Vw_R4=y00hkn7Ypru*f9Ju{a+5;BnREi>ngsvN??F=u#@<+fXvCW2g73 zKK9b{%JvlShV|c2GXEp_J{v3J|9v$rQl79uWhY_?Z)FPqTJUm>)>}OjW8Fi z&*L8m*g5IGw4WygA;!Ddt}jKO6V{ z&-usQ?fn!L{Rn>h>Qp^HKXw5OzRmPX$$_tq&AY0gCK+khTh?lt=EE6W2~YpluA|Y# zXzS3YaueQ2Vpdg}&38CtRRx(q-j}^QpyuxsaHjS7_@C&Nxn%>&KVZ<1OW_JeVJjxLqIqyPwQgZ zn`^1)Z{5GlFlMp#4Y^4VGAP1=1#Y&-VdFkR^KKO|okDvbS<}^vOt9-n-ur8|{@oHg z`-@3~dAvuJO&02BB=d@Y%7cMHdvI=)K$d6i{#6_&H`>~ATR(%;xuZ3R1$oU4T7KGC$TPb*xX?lj5ZU7zv+7Z>Dcqz<P{XT_qI-XXhq~4MK{Ba9U>3 zi>G&t2e`Z7UvKs2F#H>_xP`V@H16~~T6T;#Gy-espUwMMP5JZrr}W**b%%d z18-QAD=;NeN!V~!y(7>Q3UK(VDZcQno7l*@t*-*e>~snPeqb^J;IAWRVU6K?u$ODa$Rrl>bxph$$CCr z0dGA&segQ5Uq&u&ejdTQyguPsWJlJ?AyjWJMs~KNu4?do_kOhpdGRv3;*TGidQG3L zpO21joajzB<2z!9aH$uU`1cm$rePLSh@#sCAnR)YfBGEPKB2+@t)q)j4b-x#Gz^cM8xDy!V6~ux0CB(W)#NPQpZF4( zG!4g2l>FnbkrjVO3xlboEy;f(#IQ#1;cW2I(Td!BZ~WB0eHei^Ce$U33ND0S87gXu zb({5pE%N?8lb}dQav&?}q}}=Z`O9TC!lAVTup_o|yHtN_=fIPe-Y;g%k5?H3KRq4A z$a4kR!}mS|@nky}-|_YZ0nl}E^UDws$;0o60r&)sEN@VzH|>F??@K3ijMu^5Jj~$x z2vZa(VXH;$BP*Jae=SOEl*f&zvF%xT7R|E-ys0ly%8Yz3kto;qj%&R$9)fo$lReWe;Z z7On^K8pM_i-Thv?4W;=W4sB#0fIeB)TCR+#hzI~BiyTeR(_)GxMj;s7n`n2|t~4%$ zOp44`Q%)bnQKSEc6C6Ty0ns)C-_b0><^Elb%yeM$poWl}^b)OnO0=P%|B2>>8#Ed| zOc*s+L$8fxlcfvY%$^cTDq3iYgt zK#q>7r}KQ6H`EEH0ghto$#@`P)NI5D*>T0XH0(Gz=rU_C4! zyW*X@N&AOe$DcZ9ay>o3^$#-LerPz<++!&U{Na|`r50&Bfq;?4(&mGPR*g-9@{MfS z(lV|veKD^4&}^<&d$2q0v95ZEmkf`ns%0O2ow8m4n@+{UPE_Ke%o})aUPU;|*pQ|$ ztun_faNnon0*WF54&FUVx*S0+h2z1HvC@EG8j^2Dv;We>5$-=Ymq&~?$wwN5Pcux$~g&c&k~ zA8H7`ZP(6Is)F${RBNLY$C}cbCNNV;JED|ro^P;!G$GHY`k3??uziVI9^*lV`= zR4k@C47s$KTPbzR%?27ddzh?G9WAb+UEhUL@?9wvwvBhkUieh>vDw!Rsmy@bCTf+L z(2yjZ{y28MRb;5*-CxHC4r@_myI;cksC{qnrX-0gV|ch*!zl?2eT_9QnQM`Di^j9Xc$Jz2a!AyPz}Uw2xca|1INqKy?oUOn98RH6kkqbLrWRBd zAM4H4K0>}hIVH{5cW&u(npk{&QF-={IIM4yn0oO%1R#}~x59NrKEipfk$tx{6XM1f z&{}YgudMwY_Q|$;3CG+DGnO}N#Or64JmT0Pg@W8^1%;-)^Q|_IZE;LP>{o?myIS0v^Kj-kf|2rDz}?gD;+A9 zI#YfRJ!Tk)IA;yjlqbrYJT`<=*%TFZmGX^br=uHga|J=-2GVvr!nE; z;NhT2oKxQe>|9JF`(Ph;GBXx^v5hbp=(=7mf);KCEj2Q+Yj0+BZ#LcLmRF7DC85Ms8cWVrI|J%LNjw{+ zZ?uM?1VySJO~Z*!r1PHlbp~D18*71K!X~yc26jOW1WK-B62pk9DT;r3S9@#l*^!+q z$l2{dK>Ap!1)Qv-+htcd9Pjp!HH_hmI2~ zRlAWO%GoU4b&&3_S5boEYY^(J57|T=c{Kqjl$K#cA3VnjFgl43Vy-)y5A*p^LiVf+ zd!Y~xL^h-^EX;=_z)>BlZ8YFeIf)Npt}mR0`1nCEe6uRrH~-uu{+sFc$TX$P%#w>f zCqaiPqO%q&{vPq+EZTE`ue=KDTc~i4z4UkU{<72ri+0#KA6IwSxg5{BkM#(z0I16< zt)*J_!mt<}TRxd;doQDvi$zXLaK4zOeNQ||D7~GQZaQP>Usc|*Z@hp!0QGs`P|(=v*Ib88C9Z6d;dBm z&{iDFf8H(eZ$ydL6|PYm&rr1jlLKvC<@8W&DWwx^4$om9HcL*57QJWAKt z70-zZu;jj)xN8BG;IE~$2~n^x8CmsWkl@{~NqY#|8U^3xbplefTX{yLxFpko`Iy_=pH9;fU;fY&vqTq@f_Z{2? zytbA>C|fr4%N!|9jqky|3ZJ%btLOXj^O-o|=3bep-EfE@zzM&}VD6(El_~C_*x^@R zzlIC<(#3v{e>1SzTHDG(WUE@&dBZuOm0vZIRdm|rN<_Y8|G0s;!vJra86U!>g`Dv?Qt#?Lr+${M{P1T->BfM{YiV~qI& zP)_`5fxP!O42B7+Q*Htdx;MQtAHm3aCZKYb0QvWg$?qGafKQp?{!W1Jp0wH)`zYCN zwb|*n()S4E9mlWX^6NCH#C`bk-t{GFjPl;|$-Qzcs%E>Wh12&fi;2}|HQDYQP5jWw zH%d6p`|Y$z;4~)aciDYvn}Zs}ZAz%NR6j2&s;kYts4v#X;e(ZzAz`S9f&tddNuA*Y zmCcA23!j}_LAxW#va=bp|%m0tSPtK9-*J#O#%RW5X;g7yYIBchFvzhS)o(pIX`G3T?b%K z&Wb=sR8@M_f3AIt9kEmYJ1oieYeM+{))6r>GX95z{YYafo~Q-3`-I{hbn*B{F3FOz z?!YR^Heqt=D6m*89mnPB@;!D1o*#%<{3)`rBReoFJx+rk`Ohn$aA0h5OoR@~=NSps ztLntF{u_jEuSclu%x&{}=I8wm=-SH>?sw1I%)?vF&W{Y;Ob=omE)^iuFPhxo+lhKC zIjKSUbyzN0wWAc==o(ZUjU1Ka?A?Q$Z}(laRl=dKr1*|j_`e`5r4vc&G=Q90#m3!s z6Z7R6C}j}I6ND_S9W9u1pc|e~zHl{fF5rKuw)zs>AJmH`8O&+&nJ3BDsT*oj(EV>L z*&6_~{d$a#zj*(m8}VOQa!*^NQMJV2ouq+U&zZx21@Ql1Nj0s=D36{`smc<$oG+{| zhcI{NZmeey`Z82K&ujbIawJGSc#UKyKX+)*iE)mUG%9QTH;ufrbTnHQf!<&1Y2Glv$SGHd<6h2!Pr^4cBg zr;JEO-(CE~EVuW(ZoAx9U;tF6AaQOkOWT1hOIVSrc$j()XzXYXA$9aSswTg={*=;( zg@xti<(jo%2x(LTmz@@JIes$9{3_8P4G!Z_6#>!Ux~AWFt;nS{B-tqeKNHAEAi5z@ zA#)%4Z`Xj$_GyDQD5^=eH3JP=swr#`9tWq%c^}gUDoSsQ zBUEd^nhpImW;%C*HGQrpgFn+Uj|3}>a`!*J3pcCpjm2l~D~e&3jqzY#hgsm(LAEA+ zGhE>s{Xp`zh~z4pim)27FAV^!(=IKZQpAv*Bp$fxKa&yk zu;5>fg7DeSWa)^)9FRF}rO&u$r@858MP%`5mbqDX>7KlAfYoo_bM|^{;@~j7&CK!d zvbn2A_KvI}&CpClxVmh0b+e{fS11{fRburnyIG?bF+}hzTRRw0Dh}ptD|yU>Chg$B zTjd?GHze~Ok>HKKx7s-+zz;3N{J;t*#qz>%Mg?U0kd08+2w`fO*;X+tE{R-|nAjz2)4NkFb&#S&)-{@F5fDL1C9aGJ|)zd*UB@$<67T$TcQkj|rZ}mr5 ztK!G~sw0-g_NS|@>5pi6M5sGhoC?Pmf+yC36Kdj^59>A|?IwY2ej1eBsOJL5XEb}? zoTcDgbh+Jmj~5cJl2@j=&kM2N`uC0NAn|}0UZr*2Xu3r(j7s;893>S(uK&myUCF5w z2OSjRR2s&RDn{+XQ6*YzhYYEYipY1zQ`yl&>-nvMcSJWSJMLOFwDPs+4sG4|v7Xg2usnx0dZo~ZTgsPqB@hoQ%c{gRWO1~a_*eXf=+Ja3LMBw1 zG_eiCu}hO(jE>|Lp*U!DD)`W@6g;=Q$rR>JiVLgcTNtn!F<)Rp+u}O%`->5qD zD*%rGRFEn14G>RL)U3c5mD{KT`zq=QE?KNMY~hq7=A6Gcc)xYFxQ8}^7of%HtgN@z z-hT9a!Y8TQ!2dTZ55xbAK4)b8k2bz8Y_WKvw!3Q8Mewj-Hbh+9d*r&7xZ~zJaMlhE z^r%8i+~*GQ3)T+y27S zf-6*x7W>9bA;B=Mh z-JLY5{6*CtKEMetuc1FlYd^yiGZ7GsV1AlC6qwL@G=fD55DWs))+y4_bbOzWFLDlV z7rp@XD19ZLv_b-^BE4ST$Pfsu2@jh35sVSYDs(w$*n%DJEBA7uGdX;R!CE@ZMv1&y z=-48ncZHd^Z|_ejWE9Tv^E!o2l)hlkU!PtI;~9)WHgBJ04--i%4U%tc*mpi|yyhtw z{GK#D#~nJy9m9)t^s4)e-QBw#)t2mXOi-Ea>kl>fKGROGA{6>scVR02N#(hM-EjY=V`SR`joMn|73^Zg}EFwhQ2b>|#uqUUJBa?BA65xB@n%cV1 z#Yynw6-{>{)`;Up4q&$}gUS?37Y}2r@}ix8OlRJn z6v!<*DKowM+E&KddinlPj~E5KYz6Cmcw@EVF}zoyQWV?-)cWVaza#&REtN`MBw&1I zQfZy^-cU2Ym%gIHN@Gr=^KZ?Ex!p=IP#%5TR>yLaFkT7ZY%}0eZk0KZ_=~X7KV7_> zA_Kz&F=mob&$3H>f6z6`|QWR7ahv0T5~dM!F6?17*pDJ{{8C8M$x8d z?DH~S&DmAw9Fx+JeTIgBHW8|S3gQbb;>gKWX9g6qsvt}erFIsV6?m6`9;vovo)%uO zm;8W3JQa7D5|GJ{O*B9|1!)L`Xm^%W2JecDQX5$wIV`y(cW�)&21umJ?XH`Mk@vHbgI=#R=PAUu#{Xc!U(|ZV%s&-_)lr5g`Bz|xvj8T1lwMYH|;gR@i@)PQTrabS-8gBExv8K?N0vzoCeJ=oECc51C4T!{FjlE z!x9stM#XFa7HJlD2r#0;rRE0&rd8I`(5y_3Jc~=+NIZj6>+`JK7~I-sqS{{`DfGkJH2fIxY)?N{--NghKKokazRAA``@^0LkLNzopg zsf=^*2Q&#pj3gQ2q)|^N7+mo}^D>`qyJOS{2^2+g-d+AQBpc*_y*{%^M#+~A4uU~y z0(@XtIslB~)Ok4;LCj)Y)RYpZlZg{3V`nNmJZ-7qY<&fU>vglKCTA-w>cwqnVaIlO z>pt{EZS5a|rAjSYIFSw7TdmADiS6ZMf0hT1QrkZ?%r4I!&f9Rnk&=#A#i)h=b-0F* zf*aLG?-~%ET5q}0fo+u5N0iQ89MElJ5qZlM1>}O3P0DNLV_)sOm6zvglI|O*5r7Wk zrnbV>8g2e4#g&bi^Q#zr#9qfVE=k$eC2XUGrB#hY*KA` zf;=!^*QFySUAK25!9LJjh9Fsk$06i^su#3-V2b9Kr=-0ZSeTLt4oTnJ*oM-(`^*A6 z2&S?Y^RDJ>Zt5-<%^R>w^WM~>7~|=d^qGuk!2T_4G-b4zSDRKQ)W>s?!Mm$vw>5jd zWUc8aX=2SMZ2{PnX$keBS&W68vvbI!QgXtxPmdHry1XSi{9H=5e2qF-B&YL#3R;A|Ego`o% zwCpdNZ{#T<4{k=flN%Lh!Eo$A&vAwr4hHQsKJMKU1DmHZ>j=R;CJ50byB~X2rk0CG zrN=^5{ysB%Fzu~)NZOly)Ll9`wA=B%Xlv{w5SqQ2xl}%BQJOjL-Ze#c;(g407<(}O z*}2^?hi0Sc`xVB#4zrVucZAQ0p6;w3-Edw`T#vh+VS9Fu!I-NwR#1{$Eur7}w6U>c zFiD|+S{EqsG$NL>^_@d4su&>bzj8S|3L0u4`c27S3)q3w{M)B&igYD$2X?mK4~}0I zVkLRNbi5{FHJ@34!)*FAt9ZnP&oRaM6e%5TO^AaV&6-qY(~bDqd1vD|sFWTD0mW+y z_qi!P6{gow)QXaHsJE=FXJHk(YLRKNMEtkUCQOrOGxl#+T_BGil)Ki%=4!*=uA#@? zY*+)&*)rA8F4+VgUM}d~DsXBr>{mx}E0w1JE=#0#^^0rje%;`TWRCLRv;;}M`V*y- zorV(-qL!CTv!wxCcxNT{@>5|aB7BmeoNh!r_!$QtY*GHsVtJ>q!J#NoVspr+szoms zh_lVHo`SuTY9;p53{icIWNPXCbg^tMSa8TPqp7i<%@J_r!pGi*1~ZhDS|*_$^dy#M zO`6FS6rC1EMz+NdHc#;5R#${cjF{<4{V<;W{B#?1koXKu~Lrd!OJ-svN2Z9A>k>o&l*c4|sfy&g*0byd(ijZfV3br`wfStdCRVbfO~iE_{-Y z=3SqA!){OzZz_v@*AG@=Ls5_zX#0x7!W_WGDg%pJbaj%edvYr9O#ehsz7lw0hA_pS zRdKJZ+7ylUXijK0C{JoDCW~5M*wI=^!?!h*sY8;N=`-8&A)wNYsiJL>vtChVM ziB}Vj?{+-W%fzQv((aJm`@4TyBlXnX9mZ%g4mg+Fu)#A&4#lj@K-3Q+Xb0y7(OqOj zVl;X2@7V_;_M4x9bS^8EbXuLpurJaArmwrV7t8dlOdA&sBdG2A_hr`MBi`j9hFWTm z1Y{|7e3}qK1G{(fz96S59rv?yzpqBF*3r1y?0RfJUeCy|B-9_&ah;5eNUW1K=nep_ zhqtIrNbJOz;2o&aOoc1q;aJ98B1{{f^pB7&1Jc8sZnrfuQgA<+g4sES@vuBD%{28L z_%J+)ZJZ959;ox}K~il!@jzwuDk9`+37g26z|AF9v4s(;z84=@q!g8yHwEOGZiI}) ztT+5hVb;t!Njtu%Q3sSt-Vyrz&Vk8`>O30~pyvyatxbKs=F0`R7qOF0Up?VD6ZP}mgK1n-5Y6?26>v=!NI z6#nZx=0X75~1#2TSkM#EhI|T4f>^#SzP==-tcRfWU>Gy|{tApDsK;j=^5w0J7|d z9lb!Gcn04oOwV-R394uzV?Q{?9uwV(H|7znmr{r0aGe*piXSLq&R=XV>)|h_V4xz@ zuG~BJUB`W!!1+x>Ou1E>nWtbx0r-;(w<8e-(}h@8rs}$_x?~vr-wgK?MV9vzjkgPWwg< zmlz2PrU!nz+{UX+Ftids2Ny3WNp_1UUT8B6Fojma@95FR-Id$2?VQm6+Mka9@X-3R zNh7DYz#3CAm8e>FOyb-jC~fgNU$Y+k5wgV^FBpweLiVtc-*6Z9G!py!rdFuDNj{Ui zH9@rq<)k4!gRJXma{Xl$q*~I0bgM1W!v1BFy>#DboyklMQ-d6_4ofs;# zB~tkqmX+^BUr29R4R@2Rjh&O-UPzVlWj{Zv24B^ywcFv`z1wyp<^mvd)`{aWa|94#NnJ%88!k(v`+`VO;nNTAJaqrSjyJlyiQ4> zr-zQav$m*q>IWW$u!MY|^ZsnT_C0>o$q(G?-r zrfvIAK&Ile+35XT{gS=H1&o;SJ$mv}jWB|j)EBM%F_Yv714w#&1{CwU#N<}WLJRV_ zwBX70(XE3f2lfkfEKshFma36dBTW|s5%RtDcIAC<=?Iqy7tNv~FUN*CUMkcahlOBM zCibKLu_-JrEbfli^U4U)C7~o1nS0lN4xYIyEbR~NqphzFIYV>XPRX|>6f->B%E?0s z4Bj*e<>0p@*x2_;=S{8y{Qp*KLIXrMSdKgm1vuXQ3s`5wtk*`i$V`U(PZGJKJ@Hzf z@CwK*4$55<(D<|8(Q>4F2M=_3!{^w54yZoe^}kK*%dNcDP-i?1#nASTK1k?9(Y-5C zcqSSIPOpUF-+F)BQc>Z}oqfhji-s@U;K9w6URq%tXsoy)cT_}IFey{cWSxyZ*_Xtbo1X<~?WsBzY0M z86pLjwN{zG)n#V-NxBv3h#FQkj#cp{LTx;ymuf_fXf|cGQBs;wzADE;2wL4XX_&Y!L=1^sFoM8BNZ7p>ay9|WP8cL;c*F5R-=c#6>m)?tMA1WI)THB7(l3}iD1=V#673k75{>0aT z3TDtiaN3^V!0Z@44(?jAJVl`0JsWg@{_1@y`_+xuYmMLK1vIpL56-ier8K%^?|Vn{ z@W0LGHN4r~D8V(R;HFf=TzUKo_yKR)Jyz0KX&p#Ti}38MBWcR2N`%|MI8HGb{!km% z;uTJNDgCSM44Q*YNZl|$Rk|CeleRBG%Cggp$SkG2n5%x&dR7XK7*zajsAsZiHCNV3 zknZ&=+PO+r6dK9x|Fa+ndrLd5_JWb)+ud_H7Q8d<6&KIFmeKm}$ zVp846{wz~`$z@@6KWilIvWz}&^0ASMi^GJtv9RtAQK{NRwr~&rnWm0JH>V&604#I7 z+-RJ~=pm67aw?c1}#Os&|!9@@I{zOZg4jLRh5aL{(GG? z70$cQt}d{N^Xby8z{%7-_B2mgp~{?U5s}B~$No~COcaEP*eapm9Oz@8+T?1TRmEh} zS-C=Z6C;RG40k?r-+V9zW^+Yz2eS0d#zrTEcmxn({oa>gj7RT9&pY zGi8N=#4W3NMLNdP^(kUr8&%J2$|lEt+U-tZo-Pt~>Q=(2MM0-bEmUt^K%H{p{*`R9 z(Mmx8_xk=FNKSwjR)bPP_7?z)!#-Y>Et`Bx6YGf@n6~ys45;hXhb8Z6+AeV7MaoQ{ zh!^ZeL$KniT#2!rtP!A&H~g~#aQL&resI3K_SqUqtgPQpoQUXsz zjIc$k(s>fNd?C=yVjhKAUL}LrTPCbWb0@#$&ZCghK#7fGZiDNL7osnbF za;LHyMF@{WFJbhp+}Wc^k9-fF94m&q%!l6=aq2IXj0e$z%^fqxfy)~MMRX z@-GGwF(Gf})0NsJ1ozP-f=)5qnq7i@8%%v{NVI|F`FN#A$))Rq>L_EbTA<^d1 z#G5>vQv7N76Mo(>v4N(*=#EMor`hmhk~x8q**tuzQBmlg2fJ*nqR+rAS8oyvq}vQF zDwr#It}MqaMz+gNo&b~S5FQ?9*inW=e%Y{eqwju^nzd~(0r5H)I zai#jUiXp)bRxDrwTl~$1Ay|#9*{I9>Cbn55SGDItCKt0HbIgit{IYWz%)XkwE_>If zF?)4!7mva3PCQ`-r|3kGHkU#xj}z!>Y?-FT1#7ktg~8UB%d}cJZER7e{?;kSZQxf{ zuQ>yy9C8i2BH}ac=nfLdH>1`2+7~3ZJx1XgFlVK!Cx7$XEt?W9zAGowFyCBOfakU7U zHDBkSnj34ahvp&W`^oNeRXP|Er?<9KRnuA<&mr>YwT){UkLPLqk9y&mQhUI-%li?W zuI;ah$(iWUHG5 z^Et%!jiuQSF@k$33FOO--!qgQbiEdON0em%Igwx9)9%Hi?Bf;<|Niyu6#Xqcf$R}y zom|rbm*PL?5*?x)H2RY7RvtbB`qoSw3C~P-tc;{L7GgTAk4y5+;+}azMqWGl{wx<@ z_>SrR8_o!NHJMJ}6&BOI9N|jDbuU?*&~}FoNBvFniSv4$BF6=*^N`gN9>TUQL8qGT zDG!r|yb~h8$ElX-W&#M~V>h2W;YdkL2>8!TWvclgJH2a~uoz9UfYN+qOMpC!LOM+qP}n zwmWvRv%X#R*Is|EgLOF1-0#Kt}iF*>8|o>_>~fk zW`=43L9}1qNM$jFyI@$cd~kEKF$_4ssAfoH^U2VReJNYgmyUtRJ}B+RjByHVf@@Ig? zVkKO3_7=;8BtlH0avaV(dzsalFp;x^ernvqLe6+}BZcYy19l7;)HXMMW{*dOr^kvO z*aLCblR%Y0l!;FxOBtEoQi@Lt@C}PZM*&la?ba7>k(UPrI{{Qs8-myWmUJ2Nt!Oz>w>&CnQB|kriUkd8{!x z6Y=>_tM_sbLtgwtp7+j80>;jgvE^vAEXOn#`Uqp31Bg0Ts&;W|4Ni2@?bq_P8CP7A zY{p~d>DKVq^br_6H3}Rsd(Qr+>W+X5ySY(697T^k${A&=UQdNTwDBi~B&PKThK(X) zcZcUJt-_8SjuxZ$#toAZWj3zeI&x+mjM<0-K6utKOnJaiO{U>U2Mscj-UD9U`fjFE zi-(1kdWt@vMLIb!1?|zZOQ(6)XJV=u%$8F}5^D3b+Wb4N(^e@*(tIAicBwhA##hsK zHp6N!Ut9E>KnXa?o52ke}B5X|5TtBrpSLE^Z|+m1zSDk?Z00jTDB_8g(ESo;+ zKi;%o-6>Cf>1yOhaT!+D_>Yzn|3i)mbc;eoI#bz0`Jxrr`=iAkYl!^^9oukiBcyD+ zxd$el`55^ox%9jLckzRc5$zY*Ymo}rEK7K+{bzw7ZAjh=&;R)uq4o8KKUlep;pCx? zIJyKyxg$>mT0wpJ@!Mz)a9hDVkuo&2DwdPt2krayQD<{FQCt`MaNGQ&!b6f@ugQzl z_x;RG9FuC3rL37SN7PJaKxd!@A>WCI?1kS=^93k#*T)U-~rs-U2aG4GXO?3@9*n8+3wGpe+ zA>C!OgW1U+2lBl?=X8&oSX0|jEgENCdD}~=K{; znHbsupeb0D>z*GaISw)sF}Nr>SRs$irk3`ANllbHl`)8++L{8W>+$Q5m4q7}c`QiE z;6Fd+#`k?TTZaMU>(d7Iny5wz1p)Y!bZ$V$ zo?bggGM*N83uZ@GpZFq3E|zPT3(K-43UD41Oir{XPwt@}y;YuPBw{LFILTu1+a>7f zT$r8WUs_wBjg8LAXI9{g$fr7w8_C#uxu04pq7CL$UN(-ItOp zq|=u47ohiNt&7q|jQ+Whjo*~zCVjBg5){JArn%b!VC92NPcq%sP5k1wkCGyHv-+pX zZj_*K&L!1?i+H=H7hX7_3Z|wVJuiFD{ar4eAD#917DZvQNT;rL-N(#$m6@?b)SUH8 zt8C1*yXyF&x@oCX6QfhSIp|h?U z_c@J6LjT5V545d@$?1wtUtN6fNGAi8^Y_(-$rKU3gq}K85Qpui_4w33vqo0mXqMlW z9E)#oCvZdC!d~T=1{jRH?gjgEd$I)Ys%>>xfk(A2y8*^AOC1}Co{rceXqI#R05|Y; zg|IG(l59Cox0)pv?Wv`XB_(y*aM>n__L4VG``pr>b(uY@Yba+t66`6sPey~^A5Y?Y z6VL0T3$JnAq@avW{)PKq+<>;E=SBsSn?TUDl#bzbYw~MR6UaZq6xKuO5U+xHTEZdZ z|1Nf)+=v?AVT~pc;Ig7}s0}2y&rG9vr;1mkyWP&gJSp;*anv_yW6q&EGK#x0wl*WA zyN4`zO{U*3*Ii<&w83lKz*_<4#+;(!a6v2DJXWlDzU5nKs)l}IN%Bp@Dwkg{QQmYO z3Db73GRCb#Uf4h-6GPaEjx<)MR2tYneD8nOD$i>(4BCL76jc+0DU7?_>AMWEf%YKH z&67taas1ma0S9sru?;0b!(bjn1jp)P#%dadZ>?l)bX`8QtO>~uL2nl3@YrJz7n69< z{J`7sfndcT3`Y)WL~{NGlZRx6J(5Whh1%#2`6!{v2Bp6~(WhtFDnBVIOEKsKvshuF z*&{{%lUL&ZN>No|x~o6;^hjI4*hYksX#@n`(;pfkNA>s~B#Y_%V7^GI&epc}8wRk0 zTqB0UBrXoDA2J}*~5O;OgV49*!s2oG|Z)BZacaaQ+a zDRh+{flBP2g6aa+XG`0XN-7oEl6Nb(IX7IBLNzr-$@`J=iN)Px#pBkn%&o|(<>(w5 zqZLa@dZ}d;Uv`{qOC1zKs;d5|WNw(E4vOhJr8Cs#ze!Z@zIZ**W&pLDY4 zF?-5`#`=A{)I`v0okK1FnX9sk1?(!B);Z#`7D>H}+~RErIlP-%*t{Ln16r0u;=khR zy|=UFt4ol*!y$P=-1si8*ax+$Bagrpebk%iI_Swy$|F6)j{oryr|eADpB|PtC=?0{ z+_TG>9`@?q%VU88gIh{vnWinR!(q8p5s}-VF6)8otJSP3Yy2pbqY(p_A6@*{87hLa z0J%wjdICYrF?#rsH*ABMW<4set21}Pu5+51=OmxOye4q?ULxU-7Pv?|b@(l<=%{DZ zZhN?p`@J!xBkSktLJR6XAe zwU^jEbOhF`6U7_TzN@}FSJp3ue3?sLBX04-N5v{(_nJ}3!|<9GYeKtw%Nmj%SyFvX z-Y>Q;KC1{f|GxA4o?3I9ZZ9qdEougJ3f=&P5v4`V#ihxxeY9mi3W*ex7gbQt@}|hC zD?->S24qbE0ieUv=~mRPZPDpBXYFD=rvmk?)vy{_5u?)j)GJyTN@hdb^Dunl&by@x z^r_>J5K|jm0I>0*G0F%JaWlC)U20AdyGib9Lus?#8(Wy_($x=yNq)}7IqgJ;%gY0% z<#4GQTR%hu^eom-B)J3XQO7QJO2Ai7MwZ{~LM3u6{Djr7EJgD6C*Tf3vG*Q?cqt=pyT8m<> zv~#m0Dkc3=vzNGMG@@*h7TzGB^^W>Ia<2m33CLFXB$S-(yKOb58dU!j zka&_vmeZ~%#aNXJVS33n6oKYF^F2ML-}nk3=V;5e@fT>4509`cS^c{eTEM55sThm4 zY6VN7Da7=4c8-NXH7$(pt@8CMjo7`{RTm)?eGr)ySYw$E%~Mmbatc%OBznXpIjVzl zB===3Ykyt4MeP4`)#+yes&qQ-OFd;;W~5BwaEJH(5&8{Em77%hKRn2p|5x)JGXuka zE7$149<$SF`|-ECi(?8px6=C)nXogk%X?>}30GV#lgb&LF!bQZtBRt%u11&;#4di~ zr5M#cQ7LV#$l5Y}m(reoP`50kTv>mO$=*ziNPi)aiMD(;Cmq8-GJk*l%SpM%|Gpz{ z>iR&}mlJm%`@tLk-7dV}er`;-$rV4s`?L9~7V_&@C2z!R%=8@B$YXB4e>^L>sk5!L z_(=$z$m17E8ca^^q^KvVUhP-z)*a>X5 zr|m;%#%<&@x_s7bAg``+HuzV69_5Vmhj;me1rN8KYZOf35J$l?H#xq(iAv;@SCUdC zcWwqVBPBsf+lhpX-yW1v6H~8i$L1wDD&szMf*H>85LZ$Wzl+edee52YTCl*Y=oBKF zU#lW1Blr&7LvF}5hP1q6;N-Bkw5pAZCQ{e&A%%?%OtsCjEt~$VoIvC5W@h_-z8Du7 zqDY}5l}`$G;kqPKN0C%wpwy#A@*luvm1Uo)7oQSz&U^?2=3r)zaJ|{%N3fx1AITqT zp`sq0$FD=DB=x=!9YPjWlHcb5Q!QIhSGu~}dD2VYA zUot!02P4qTUoBdyuWyAdKh@}U%=t^x7UVP$9bI)0*cfcs_qNUEvJl?~phhOrX@hKN zCmq)}wrbqk-GuWiT zkfe4X&I$M8i|QD)9k|JXy3(ff;ee!3_JeD&04b?%wx-KGv=!5nZlXe@&l~WmsSGqQ7yPm2QAKoeiflET#b}DX z0JW-dT!=}Uf_*T=oV#svYw>77|zaeWw0Z6R=4B+L#&QHJ}a%A2g1jW&o8 z7VsBvoWWal-2hzO09soqT9cU+1Dp7+*)~(f2-<~x$&FtgU=CAKj&1Yjj?L0lOM%u4 zBG*bP>%X(KgK2#{;T zTri3tc76M55H(|S;&pi~+#;r{Y>4*JBCYF*{A+3&;WCcDUB5Y7rTSy;xX0%DO52-Q zB#Ui$le5*(8e%6Yrl8Kvxs{JtI*574W?1Zvz#g>hSQW?DVIP`8J~+}b20ye~KpQKV zl)!6u$M@axb;nO81TiOC-uIK+el64&%C#5E@fq;3Hu-pAg35IqMKXl04c&24o6PN{2B8a4 zN7(-U=ynd{Oq?J8n`&{8Y%Wu6DnsLUyTsF44N2Wna;-d}($D^Fa&FWeaHq?iepw_c zHOzV>GZE<478|UZXy>KZ)R2nP^C!qkZ~ZoEXAcOCa!+f3blu2glxSS2fPaKKVzpw` zI0L6;guK4s&hZ(IV!Hs%$@#Nt!(}Y~0m%&oyU-TfOWh?^e8Q!LH%Hg@5j}IBM(tN? zG?Cm`o!tS_MED^Sc^)Qp4dsDEf-a45AiZlLS{RK{5@<9gXBwC2Uwkexw7!c}38~!A zX^l>j2{kOdq-@0^<4jd7t!zSS+q!og*_>h2cbRzF;DJ{$%Foo;gVFtzqyz4X4!(wd zxCRiP5JB+(KD*U1Ygd$9Cw)wGoSdeA4_cmiGcj**?>F;Cf5Q(l?Crxmni(Sp5sjCF z=MP`;D4BvRDo@NrFA#?bkdLLrLT1w=tIapG^{~aRI@z?Ck0?jf)Rze~|1oc4HY7dw zVE!%WfqJSlXGZHvrdkRP)Ca-O57+xO^@{puGP4xEYQ!#$dV9u}jg$;dXz8W4SU$)t zj63gj+_?p9sr{E3gh3YNZJNQqLdhmqPIMsXiU`H-7-My$(8Vzqy}=m+i25bCW5;q_ z@#MV7uIJU~0C|q@&4y*I?a2dg7iTr+IQZFtwkd;+W-`rY7BuCtbpn({GIwfCnW|oi zrh>8EtbpiOuxGvOd??Juu{R8xxXFFHNDG*rya<_3Cm*IOt=^rOLJ`nZ?@W<8NYj2)VyD08J z+q@=We^XKJE#-@8u#ksXV`Y3?23So92>LrLwB!Lm2fa?SKu$KZDs+Zx)wR$a!gWg( z&uP=B>g`D`4e{+wYv_&W%c{ex1s{;qXDl>MLBNO_;7YYkU}nO!;0bP?0|YUN1JlBp z;yB$gTRVbnhfD>5y>80TEzk6j5zvrJiNi>eps38MR?Wvyknp%qD_o+G-29I;C_uR% zCskyC4Mz+S3WwIMsiGVDGy3a`#tKw3I}qQ@xlyWredXa)k68ovG&l=z)Px%k8*$HL zc+%}j&!+7Q*I!gS6-T*;1c}Ow#sZP)fN-jt$j@bnHNP%Y@5HA%l&j#f0&;wG4J+=1 z%Cx=V)L+)O0@?cI$;F468!4TVjBSRD)_t9rN~^P-^Y(&6`Z^r@^U=v^Fu%h#3uWq39 zXt0JLat@*5;e&rV(g=Z!h7M^^66(kW+R{D;AJ~FZoTIiy8c~j#r2Zwgjn9cjK~zsX z#=f$PmV!(>%YpCWd}uD)_L6v0OTW#5A*x8dLbzK~?wj1&Mk*PcU}HlS+gx4T9c!g5PZ8y@>xAg4<5Br$)309s9D(pNH}^&VLc zN;VILWSP83KHqb+;UvD{qN-=83t@a6KGoox+Q#g z>JYu?{b{iP!Nz0o={=ydosB}!5xq(yV1D?M3y=zFMg`#3_hc#+NIIQ>-n;R*BriAc zlr2N`3XvCS@vtUyG=BO$Fg0?nfDl93a1Rvcn}B{>9E;DyPu%_`a<1Hua^_2l81OeNzgJ32pz(4XZBbMKK98y^ZL(d{QQ0eL zDt2vtYc9S9a1qj50O$TQm91u4H!b*SPsDyVT{VGGQZN6GX(cHA*;>igQKbV$tnx|= zH$QuQ@VJW#f=+X{&x5mEJbN8m#}2EkoO67C+EGsO8EuS_o4pl3`M+iQLnVLW9Mjex zqg$?JCij%fk6=MirVN|+Ufh?I^0(W}@JKN`})SyDE$01v<_0U%zW;UkOG^Migi9dz~ zQqoLmeXFk+g~k8n%Y8F1xjgSlqth?RxzM+L1G3jY-?&UcD$ysi`1*VE_#Nu!-S+k7 z)>F5T;&(T6B!Zr_i$mP?c{cC^_D#6)(H!9awfzz(=HIqrTZmcE_btbtN!kp3dkdTo zaM1l2VCs0wu1`yWmG2&e(xETvMs2OC?grK*Xg~B!a!L=%>GsL49)*s2cMMI4`Ps`C zUiRD`%`9Zfj!C3+YbyKKW-yOY2EJUHp%+uh1!D7m+*YLde!CUg9A_rK*)i2x!#H)@ ziU1!g484Lc8hxUi>=xH3kGAQ4y1q5UpS0wh3)KBirt7+) zB~n(IlkF1O>s$HfWkd+0SZzzLoMZ&r+5Cr3zqn~*Yl-2X_|@AppNr_-V7$qw`&GB)sL>1D_<1scKdhf=vPkBkN?J=rHn8A zw^FLCho3b?{dd9Hu45Io1`?>jR}k&<-US;-P*&HC#VMgbz8=KC*D|t)qB%;~c}!^W zu|J|9J=86{$gMRuan7J_W38owfTIq4*cp9@>3S^(lBP@ztUK3Z$urV%-LYlfgoT6_ z1D_S-m!sd?GPRxhdsCGlY;_yD8qKs%IG3`A>0PSRf@kQ9h^^=I)s1k_<4#8<`-t?a zUw_+N!=+y4vucN=;z+OA8K^d@*L-M4A-1nr`DxuJv75-Dl?n2 zO+1UdTlzLI(5H-52sM!5Fc8j3?es_*-9VW^__@lO{Ob>hqH$%H+}t2tqfbZv0oE<^~d^;fbw&*;pSLzdlnnz*HVgt;sWs?3ev7y z2R6XnS$P=j^53d#7V zpT`v>5rp}QvjM%WagM2oVqqYH3P!g>g zsnf%n`JSwGrq_X}IVFeNIF7{CxJ`hIorBUp+i-esMK2PD=%Wkior2*e-5n?jrr(Ax z0xN0X$igo?mrh=kr5iMB2)S|yzkS5namC^5wy9}3%N37GPgw*=q@4< zQSoVhIDzSp6``8utWg}?Y^~tMsT&{OFP(Af0$Agzk;zvNmpsBt>T$2^JU2xd)!ek2 zH=A1hEk9f9W(oUYom)o8bFzl#xXw556FeHo_@yEW9}hmy;Gz8e*cn_!uNg#9Hpw{L z4(BO-(qm;@xT3~zk-a1Xu$zZ(KV|(>RiXed%}TRQ2|59@D&VJYI>e>9%DF~Mu}ux! z{K5@f`}+d2)(h=$`Q81f>v)w5c%2K_vqykaVXE%-=l2`1XZeLOKLjsnneA=tvW0y? zCc#BBH&utR#kFHR7h&UISGf3Dl1Lf2`-Q4%00pNezerPA?n0L7$oWQ1h;}2ji{Sp5MLlo4@9NJXQP2-Q*9pJ^FGn(5J{A=JPxkTt!Q5DzdbhY1tH)FEKlI@ ze|Xo$0lv#^>=S=g{4JUo1*Jb+CV~X1Q5v*IV^qk_+O)yT{*8k8(ojH2_|(aWvd&Gk zmvbFE-aFxqG)-gI>ZGLryL@Oj=f}$}U!@Kt8H#r|ZQiZbjL&ZcU{K_!WAkW|YX9xB z$?=?AqhTrPUtV6(Ni)&Y(+nn0H;$6DxDtA&RmdByd7XRDn(d(=hW@yt=6)q%%n67Mp&7J;I!F2_o!58 z20vly%|T66)y9QREh`MDKgZg|>r!pYHCiV(96DAWZA`fh)bSimID1H zBC5L5bYz+xxJHut;!>do>!MVVTE(VQx#?4RzHZV6B`->R_NV4Hiy(1#5ETb4kTF-L zz@-d;=RV%9y4McjXqlGVc%Esk2~>SaO?4D*q=4-QYQaWT5&!Fj6yrrkQ(NB%g2tB7Fi`jW zlCUjLRQvS0lrW9Ij?;5#jBp#tW0#llS9aCOJnuYs+wUoZbAFLAcN2IaQE}=f)o@7#jXv&1rS;L5(0Gc3&m&)i($hoO0IXB{ig5BhNG}a-ULjx(K}kn0!yjwl>W$o?7)A zo<$)Tmf2*DHRsEnC2BYg5(z#suN=*)KC&;FU8Av>lwF9BA5~Wbf~E zwLxVt;$gCq*#UB+LmIhZs!BXj;z(DLK6jdA9CC;9 zo<9vSf;ki-uFn%nasIwsR@3FA~LYX6A_Y2O)k+tUF-GNoxQ#S5L6 z6D7a^89_L|){lx7`Z?WFeWFi1dA!Dd6;O&b>PdWA=++M&$Gj3w+%Pta zeM19TNtSo-MHaCbp&Rwn{4nfg<)igA_V4xny)jNU;|*;7ePt+^HNZU%;9B;%w?a;+ zg3@mzq>!(&@NC5 zY(vi=Ov*(Xd5?0Weu4xZAc83euAw_|+S4_2mr|C=7chO~P(-Uu)v!L;yl&bYtO|r( zLEZR^AO%00e*FbD38p+tfoG zl%(Y|1fWh+?3@tUoO>EANf1VPy&u2~xquWnMOQ#Na0ML-LL*mU&jA2QyAAo1`H6y; z#jQh(E5!-BwHpC=WRvvOVWlY?lx9zL&Sj`L|E2y1`SF3|dfGCw@l1sGQ96@-fbJ}r z!GPWLfw$|wY-kU^xDcq(=fF&fFO?Cm#+zHnI@zc}46_ZY^Xq~ z=jEKNG|@M=YveZYd^c>*_W@j<0T&OCagUPdT_dGUZYLg#q&C$w4dj%d^uF+Swh{-_ zcDuLUCngx>6l7;UIV<&SM-7khqauU7Q>bhOTU|_(T%FyqL62prB65%-F(exNT^=H* z103_Zxkx*{)6{WlnTAOMx(kR)+@n~rtyVNc956(op~4rYxEtYlAQpoUnD=-YRk^fV zhJNbDFtmD6p+@85NLZnyc+Y+hTvkuSKOR&c-XxYOW;PCAs1yhp%^|ng_O2?WGd}lk zvrRXhr(q;y1+sg8M)z{5_HyqLh=2R&^FLL0YAPjWfW(o&XpJDnkH+cVLY8TK2eLP68>dbWnOj(-!(^qsjRnmr+UdQoR8%Djyo_O`gG zn{maB^!5eeI9w3~3A@2$HDX7>d98qFx0*HNj;N(tN3cXyss!jY9ayjOF8~p=Jt=;G zsm0E<7qc|JHF^AA(^3mn5jF$rLc`ct^K_sbqPX{86K;=GYo4;4vfo17BiLS(ON z48kdbu|-}HalcEPueIgVq`Qu4%GNb9Dn^aIJTQ?}A8>I}6#OCOa77x9;s~HsI9XO$ zhg`BzWcsb|i6>90@=YG%4Nh>BC6b?=Z6zDRcPq8|6gS3mUGx?Q8#T`%>E!)A7Ppf{ zA?nsoZEU)7ob1=-z=wv9>9UGPntfMP1y|9QVK#iu->GD5Lt&kQh+3M#OODn0%H_&i zBl50*ll*8Wtcmq9k!J=8WW{^e7m(xL66Zt%%1x@BxV@&*=jxipxt6!(n^v@SSIWEE zs7?6tjymwf#4e9aY5BsIM_IIZRT>gZ-E0(XqRBRfGgXOu=mKfbTpOtTEM zZRE0wHPb+mT8EDNW@-%fKaiM8>TzH%r)hMSu{_h|oNb#YOIk91jI{aDHq2B*iuJ85 zq)XvhY!B)(F4n$THs?cBBeF*mkQc@;()bC&j5KNl^m0?!Xh#Ucwc(D6A*CnwZZY*z z?MqS8e+wgrSTiUUUJQJto}Qum@&+7t#B`IKZw|WYcf=r2<6E8(+%}0rrz6?$UjH;~ zXN?ZZb-KS6)c8bRGTgxzA1n}y`pAM%ArV~H^Q}KwL5|n{hTE$UzOGp7uv_NQ#DG? ztB)Ay=ftqF2n-8ZO95hcfdpY5V$1}Ai$fY4kWNzj$!(m6-c#1b1W+%{1QTdzb{brN zRn{vo>4fCQg0&K#+LTcH$`iI_0r=Vu3R1VdlR`WPI#{i`{i?WLG#<$;fJ}VBY0qtxlwY_1r8MOz()#OcfH0!drUwx{V_$0E&yR~ zv$koZr;j#gPJGnm-{zZB|EvfFU_nl6WoD2*H2?l$npBgv6Z%`UH$aSntkNe%4XPM#ChgQX z#2kXUD>>(umO@$OWsLQJRc216&+#Uulb@dmJz#M&+%DXHyw7wI5?^PLR~y&y*Z4a1 zniIgbC7d(VCMkszWU7pqhu9TH^@}{xN5vD-;~h!hnbxyk%gK3b&993j0*TaU1yeuq+)z& z(pT_;s8NP{n*3vA7|{;$`Kjy0eW}6JE^{9yT}kM@t*^D4CB!QFRD*QQQ;^TYWuj0* z6GrG=uZOka`gxy}i??68MhE)4Y~qN7Vyd^dUV1SyYU;X3`A&-)ttG6?zaEL34cu}- zj$Pw`II-K^@+n{re{Uf>6+dJFDYe%^KZDY`I-hPvQ`rF=$0Je6#n}qDOz_Tl;7PdO zTvw(aJ|h%Z4<|*@+~~(wv*2D=WFpcu!JPUxOJP_$io-EG04*ZZ7gkfq^06CVViGCJ z!JDaw=h6Ho!8{x#Y;I;SO6>Qc)6asK3?$rXzOEAl&CeX z=%44tWNcm=~$-QWPtzr?`lc#9xMK~xoOqNQ|aB|936Et ztQtC6F-1`Itp{`tvKm+n$@82LTotPlhTxi!n24*{>fbR3uuth{HtmJS=`a&al^oFf zo0zc247#!h^7H@90ESSM3yMzuz-wBKBFloFzMaVG4PT{7YH{1d%+LU$uqV&hJe>`%;S>TlV`3pQ4Xf9QZ&YJ#{GC@FbJP79ym3Ek%d zBbZ>Ei1fXLZi+r_d>bV~_xC#ZhopOUMiElG{@Xpf!ny8Wy)(_nlezcss75Xlm2bDn1a3iIt98S~bhx ztLXK^UIbpj^O@d^&tBoZ;*gwq&S}XZs|1poOoyT2!79R8H_#FWJWk*swHrrhdaj#O zvh^n)$Q1?pn5JgfWg}KMIzXhL@v%s{j#qd?#=bW%URGwIDDv^AF%)|KCn`P7{9z%e z0<%EYl52WM)K@GsV^7^COT@GrG^jPwco#G8gYU=aITP=@gw1X_bpjcT8G^Bzh#`yE$N1aln^-cP`4iyc;8+T%l|ak{;$f8Sy-6a z{@>eJ6V62ZX6uhQXBNIO*VU@Ir1Fb zsX7^7rrNS!zZI*rgR^5O0xoEeYQS2Cmed7cBwA8ygkUQgCRSRGq6=qR@yQasDZa=3 zjGlVNkN&SZC*}XDbHvig$}gVY8P zm3Hl4&fQATNkPibH}5*S>k&r=c2{#d%-xr!haU8_O-P7+YG)z4WPqRX$DTW$QVbY; zrgjU@f7&ikG8IttUB>E=a+Od3(0~`4jOzM@<7_enOih0({ry7$>DwCxvN%X*J1=0} zIgfa*%MjOF18$Pt^4oyaeVC?PcU4C_WoYJbs(%!o9p#JIb2_TYZF^Yc4zRp=bE1dE zDnbK7u%R6F?g})`itVqgZtf38f{=!GRr<9k|kbL_)|Y4w3wAmwWf9HVzqLz)^rvA1Y2z5f1QaH>cYjt z31RgX^v2RuSh)wZ`7;}O)A#e#)YCiT?*$FYcqgd$;<{9<8adfp8&;zZk230JM3L%> zL$mE+tU@(-T^;}S1VS6V1^%*ANwg+q;b&U5(@`#T-#BAgpmc$MPsk+jV7M6mjhxq6 z+g8QlGe7Y>8qs)8;T}7E2RS=}njSxUpdfCdmqCR~?n3A4CVrNomp>bGi_}6LiO3=v zkYZr~$7t10c=)E;ul8yAWU38W=Ix9uiP@CFe7`X=y#nuaF)TXM_DqhmcwCP;;5Q>n zcmS=)N(hBRG(qVONPJ!7k;{ggFEsz+7NFvD&s=2*AyFJ|{Q1LoClo3%X)H&)c?BuN zM9qd{f<;w`IgX)CDqHD$h`$ss)~$|Qm%F3H!FVZ}QkEVh*-@lIrB&K0LIvGHyz^lz zF7jP~6gMGqRmBDe*bEFp2dpswK-v|`CCW9S? zSk#)PK=&~DV4NfV8sP5eV&HHrlO0xr zsUxC-6+AF|nK4Ohnu0>@Wnm$-OqT3Q;U$MPHqJ_~J2o3Ydr2liPVFNqjK?JwoNd7S zFv%+m(IpN_-a1=yO!v4>z2GnPY)eI*)+s#``>1cPIDh!}I*-+HLYN)Yf6ubV%pf7J zW8MV%!>;uHRGD#W*plEvd4_G|TD}4lnL@=OS%(0NdKEmmBK|!|@hbNAkDx%=KD{bgvNTx^@jMCQ(g97P76 zu9CuhU}}qD3hRoHe$v*mqT|I>cG=8)-lWHbe)y}?2NK9z1Oy>D`KByVWqsP*|t~&BfBEMgdo|jJ1H+k zbW*-d^Nny+_}d~D%)pJ(_F;}l`0N%Yu}faL1Q_Q}<`6|xg)Y(7__4_-Hq5p>{Y>O7 zl}nRtyhTk4{iRyCGod^At-g4S_V>)3Vr%J`?gV77S@lqW}E%AlyV_@mqWX!#}C((Likw7y+tE zR5grt%uDJA%d4$+_U3ERt3}f7(bN_vKQrGhO%B(Mrx2L%+sd)T4hqh;nravg^n;jQ>pvv#}jBPv~5<2$6hW+w$uSaZp1d%>T9aM#C*{d^*Xk z0fnhj?s*_-R;bg6`e3n5!A~KQ{=-zeR@KYC-&oO-F*M9p77&}WmpeTsOw+X64&Ja~ zu}14~xqL<1p{>rtpLkZSQu9u$T2^E$Nm%{c+pedz@8K|4fSy)7I4_Hww&CJrp;h}> zVPReE&yT*F|TILiLG3TJhg5LTC|@ z6(!zJN6c?W1n&w&l@GmbbHPQQS#4z%mgITy*7xzCdy8* zHcOF`XBrBdDg#o{s^~`TpWDB99li#67YkRz&h*GftN<`38WJ3QFb}QJ-SD<)UV?6X zgO;%5-BnOrWe4j+d{^w|CJHy|;vG&N@!e;Jdw6-)dGC-L1wIER@XI?GWb<}@-XJ?T z!iF2Z4U}@NOXo!W#o^aBUADw6b#DxGETyJsP90L0vR0&b7m&&pUJI&AR5KzkF`uib z2Xkd$_#M!aZv0PYhJ6#(cfQ*l2`CG1$0Xo%C^*>$ocwwJc4Z>M;b-1QrwUm%;MH!s z;#C~m8w0rwl<|wal>kWL1r%&~TZ$Z5=^;$Wg-Bqs89@J(Q+`4fr}WioBc2*n_BS-@ zD!x@dU_GW?#2n8B7pv?W9(P-&s(wZJ z!nJQ;V4u4$BwZeSTD8gWaXLO3u*Zg%$2gBX7b(9V)L6P|rvQ;bYiAHxJAn-D>2gT! zN1{Q6G9R#r zTRjpOXaICl<8DHGIkWf(sg7G}^RG#Tk_)OxE1B{aTj}NPl9VkpeW*Fr6@5&l$EDGT z-=0wbC$!^_T%C!>&heWiUR~oj^ zZkuHfuBwe7Mrb@MrWXa}zekcKc~=)DUwz0e!AnOBIjR%wu<^;#Ptg@lmu0(qF;^Xb z5Jo&4Q#K%4-Y9Y)r4pF_4`c5TBuc<#VU}&%wr$&ZW!rvL^~$zw+qP}nwymk|Sxk4# zzvx{qGItp_F3$N5nBD%=s=Peon6j#?Zued?{8p_wLh@4yQMo0D>k{5(npk4HAPq?IF$-NO9qC2@H zCQR@k>PZgu4W*;$Bg}TXm?dqfQ$7<#QvVbFN7TiHXbDRVoNM75Ha$icmn$6uwkw># zi)ND-)(6HBn4N#G{5br&1kpb#33f38$s-9u%{q2xXQK}%8Vy4ptwS;S)lm3iQ_CFfAdZ*(jT9PM06DJ;5O`wUk8#LO*`fM{@=T9~o*5ixTeRfq(%#A`UGGe_#2~%6_ z!`rO0w=JTL$$fk;HX@1x@P}+zyXVdJ>aG2lisb1nSk;J3FK;LHo7e}Afyp3H^Y(7C{$ZO`X{+m@*=zs_ zG?e(@%4OUcL4ed4zL|g zZK++nC$o@}As)mz>(!B=xrm9K*}OKow9 zB0M4GgJi}OW_(FSxE#8>tv%gvE1K9l(}1^-lVkXpod;K3nTLn zK!r^1+7{Vq0V3DmMdt$m$EV)YGp7k&Qdp1xHS<6L+hagh>5&p6vFbV+Fju8Cl0`F! zLDzIifL|e`E_A)kPyXyMklfu@4)hRuDNdf+lowM&%X%QOz_2vqJKD)tGQV(;=A-rq2zdIlJZr;n)1uukm^AgcjXvtyf7 z#LX^*+^+uafZ_mkn3Sd-K$Vez^oQS1LIVfqYUJF0t$yM8f~(0uu>8u{*$kj(k<#*X zhi8B6oM0Y)8BHA?X-tQ$K#8Q#*p1RZgpJlekXz3BVLFgRYMYBatRC;=6F_CC11FVl znBGAnreIy;sl=1`0*i0{PP+(rDYvhhQ_1ge8&k2S|4@e)lrdkZ$%wq)T>JYuyhP=Z z{Tj0K1<#lDRPrBIGi(h17aS=QEA#)tk#=cGI~}sYb)Tr8!m|kb-;^g(kMR{#vD^KV zKAMf&nl>jgO|)X zy+G{=jP7IeVHNR~*?Il>^3k*7|Gpw$>imv@zG6j>&8ube`MOxB{e1SQbvXNpA3Bys zdUpt;$+h5GnXtX{IRRiJ*_AGBOu+^YbRk z=JO-JPZQ*Z*i%IApehkBA0`QCppexAfmVb~4a1^`b>OA`zWJ$n_V9r0n#iTv?B32g z2W97gQEA`q?(uyEPT7<)|LK==YY#{sXPBRecIz>L4-HR6w540Oxv#qS6y9W$Z%KpM z*<9pGhkf{q!(F)5NqI%3O0quA{>u?xbik7|dHAiA(?SD#C*eFZFPN;r%m4ZPDE$yq zVhI!eE(Hzl{`Xp*g0gqMiU~bXrU6hqXqcQLP;H!crc$hmSqwSEL?D{d2v?(qZ-Ii^l-C@P<&sm?byWK4EwWcx0#<)D$bejNW{O^ z*F!8kIx^1KkO(49mhMyePHW=Q?dT)7yl|Z=Hw=W)@=8K$d?Hj4&A{04(V`2z#A%z$x^3RLu4v zp~#w5Z)prQxErDCL)PIa3QtvA4_HtDMts4oK&oMm{d(a1^Z-lconB-_ybyMKQ1h|W z@wah=Re(V+Kt-lzoo((w!zWx%vA4ywwX_-A8TU7M(_LHTJjKubsUV#!5u8CIJsgap72P7+jht}{t}i}j z7o<7w+zr|_A~;4V1w6^fDcJGabSLt&^k|cYlj67+5Cp{iwED^jd)qlo?MF^Srf37Y zc(eE9c>_?_3N748+^18YQb7@zvcoa2GAF$!_XkPXz^SwcgNMczm_$%j@R=nWLH8!_ zB=a3mu@3yXL^Fw+-Ax&3LqcDMBIDfr>`rH zU-OqiEt1q4TqdRzv4Fd9&K`)I%B`oW*~tz#5n(qUI2xc~OGH_~=j>mZr*rev^8EZp zv#qcRYd+m_{TN4a8ewClN-;Nb8_&XPBR^Q(%WZtaDQSMU83b~b|Cq6`US^=1VeY;O4OuW?}Y@ts=Ca}~Rs>N$tG7fsfv%XyDDvE4W68p_%vVVg-r@>p4>e zs@(r|fLLx_a6&Hn;dvsLvL_K1a8v$%&aIIpz{_;``x2Nhe!4)ERAvT$ z6^84XvMMNI3tcEiM!Y?0%akCizCN^RzS#$v&!Bgh4#?9o6>l6xl3Q7<#b83(J-*u#0Q#Tn3BIN03AY^ zUi?8q@v*P8>u6+ZD@!*QZL*pmqjJ!V9BPV9fO2uE;rpip7dFCa1Wz=e`CeKdg}n|4 zW|KsL>;{LyUyib?>MscWKb~;$z{Fh*0Ff#<<@q_Q(h~q6DM*M6z`R4#MQ}jCO_{Y? z4xLF$fyTVcc}d?>i5p-$Fpw3^d3?~pT{+P0hFH4(YQ5FJ2=CcLmuv0Z9)kZ!%BhUd zKgg@Qy@4i-sPw|+iuKA?P*E>JdrvC#IyMSeCq>jJ9IbT`FmoKYq0!oNx57!I)%Q2= zX8BH5k4J>l2rGx2$&Qp};A*yN6QfX@p$nEQy?U(p_tlr=FTm{6flYgC72?hnH!?ZZ zKb8LFTTGXxFm=`Ht_1zdIj1ZaUa|U?Ri`4?+qL%=bRHm#2hmiF zOgZp?TgH~tB+*k=LY-6FT4XZ@${x*sI|j=JQ?5E8kl`B2z?T(A;cQEi^Ubae z%!o1b5eEU_`=#`l}?`OFF5n0%fc{cTyF z1NKags|SbJ_OYd_xI?(u^|WGU^P+(=)RP0gR)+Q5iyAII6~|L2*IGySdLLl^pQh(0 z!NNcwLUKgz$DScdL1Rv9TK<$Hdm#i~gZRcPvRp$eb1PXcPOCvQgZt)86Wm{q$|bkKoeFy&(IaFemiuKYr~@xqveM$uLYFZmsQtHr=_mp{ zw;kM7!4Js1EYpkq5HDP(?VRPB?n#djqQ!5{)I9`|;%!)23dAh)DT<@hDTr65q%o&1 zY*cFTLNJtd{0J@q5_K1Voi zLPPjHAN*Wd$(jGDS^U3w+!&cz|K}aA3VR|RyY2UmcZ#n-zY|klR@T{KX(#t@V?96& zixZqXENkG~8z7cI(ABCiPKVheR@VP7FiGCgMLs&{FLe&=d&%*={$CLP=`U!GuW!TB z>3-q{+SMo5?e*uZCx_1Gb0X*Q{>-Q87hDeppxs6PU(`A4U+P>|g8P@SV23xtJbtxH z#Zk)9%FgZq%&vFv3VA+U*u^3Kz2z>iNYioXZ-STqRpu`3p3&TUus))B^ehx(xZ ztrrbYnRH~xr7o@?V!|_NVj2J-_ao;R8e|38buifnU8!)!w|Ly)%MZ%O+3k|@AFSb} z{XO9c*4YRQRVl~;8L5{6L_WQ}>FaD(AH2VE>0v?n0Rj?qkW5r;4x5|Yq zlJxe$ z2sDBbxokpR?9Taz`(|v1^d}0w!BD@_1p^3$tu;_0bVvq4AA@Y64cQ=&stMMt#aNn= z4HeyJ-aAET01l+Kje&f1L)z9k#1(St4@i-?yBJpf;gz7Z9wGl=1=7GG@EahO5bJ^~ zC?ce2Nq2Bo{x%&J%813Yxh`_TkoK~Raw*2fkAf8P=c(o+UQK^8jmg<{Ss0wr0p5{X zJX>0?wu)}`Vp!&L;bbX*lfmB`E%;-|GQ<0HXY*yy$q%J|H@||F-C^l6mBwW4NCSi( zpRyG~OM*oz3tNuvp?07Ugv<%SlCG2jIx8d>yO|f&NmsQpjQ?@os5{`>I3balj!N!_ zzwd1O8~_<5xIyiRbqlSe&Ldq=eWBI+*pSoNNM7fe>WBVShM5b}c8``)fkcxEx2ysb zvFynQy)Z3Vv9=SEO~jE#6p3f_r~^{{=H=JK`tEH9RuCq}y%tFQtRa?Kaz4c*%&v;h z(d}Fvbx;0Hr5hyH8t$6BeHIkX{o7$1c3!fHw# z)$a5*QkG?=kP-G3)$FYVpJaE9TCF%J{LHZg%cVLy!7Hi>6bbc(I#<|rbAj22Hx=oi zRBCthgK|sK+m<%iXKcbUa;&{{EuxT06J7N)rflt&-nG^>msIUW;*#E<7*Dv+w+K4lj>L z@Z90%NrP?@9zVzfgQQO6UYA~r>*~(ZVF$kWBFWaVuLXOSN~c#d$XVNn_&=IPDlQDA z+cJW=pvPTl3yV#7vQenynJ!|hEL?vVOjrH&k|mI+6EYLa8xGnC+23W&D@{AU5qqUY zd|W}@3{W5q8s-NSS&69g3M+q%7idE_gyA-0-?GJC*(%Zgcws*ISuNpSp8|uf`*~QO*aqe}F0ydjhtpZ~wwiAd_6HJG(jVhXWSAq{ zvDs~PhKmS>=lHTBai-=+ggQ`x6Ih?=FVDzqjL+q@L)D1CpR@Bowh<%DoT;M0z$6P1 zaL*ziTD+=r9+DL+l9xGA>=kVn+%jxzHOvVTR$fg3wm$5)Y=HEfWR^2_TDqJ! z9lYb`Bc%;|1WXBVtOH%5NSC{6ya|iiDCeO=*dZ(6alnEbu#PgEX$!O z!Ng0?1ZEs(;ym+l68@s;BxN3pZ|Q!`+I*yhXh$fz3+eQz#J)cj=V3`}(v}$gp)T!6 zbKId=**t(w5%+leOwcab%ZoBLMY=XD8%dp#idqxvN8UE@zMe)Zav;D@mciM{3r1|0 zFo?pjU?3Whz{YqTUH1xnXYS2m;GGd=i{X-uu+r!~KYgsj2(ZWA!={J>ny0S_gb`(sLh$J<&e$FN{_5*veesV8_YpqovjoH8+BZ(q{Kf#&UpOCi@ zV;J=0k;UmJ-gr~5lNJNoV?vAQQ7GZ`OHHXZFUq8w&-(ZTH_e0qaow*5HKR@S?zB2k z7NyOjs1wdr#@5-9I*Pem6Q(H<$^v;SuMm?sgU5F5j@x}itT2Cvb9Q3M4abeqB-`T{ z*x&Usm-HGBRqxs|?U63{0}R%kWow75%{dacV7xEG=a3-rpriQ^1P)xDAa!U5^|%ff zEXvngf>VguMsK?Id7p{oRa1wFYSG}|sQEzGW2CQVP?E-ExN8GP6zx5D?8s(I?Y7zV z@$~RaQ8t)|w`cip{Z4A9i?ptml<`cQl>LaqejIl*;0`G35ax0EFW_>m;7RyW@|7=# zzZ37#+#j+aQkJ@Ll|hJPz>WIEGG5-&^1t>h%AFbT)-W12oKO1JO75`O`hTchoqnuc z*3138a9Lh-AMDb<_M!?7rYIX}_;Ib|Po&DZmd;ww8Pru4nIx^IvR0~H4(0ZWn$m&8 z&Q{z_Iy-Z5Rt!%BSs9+7s;AFZ%re>`aCw)_%df5tsfe^}=_=WFU`JigT7ZjxTnVbklogBx#`fzBWX#O)!uEezSu-;*{V&ws*8iG9tkuej?_K{( zP1xKNk}Q^vb4lU~_x6QA0N`J>%+uKs)^KDY8AWzS29SSt_Fzn|{If>c@orZ9P;%z< zr7n20dr;;**-hi{{sOZ5@~ZLE{c*DJ)Z+7+m6iQ1%6`(cr4r~Ad38X4GyFj>&+ovr zz|Ycr2A$^Z18-e?Q-beZsTYH~)#1UL=S-lD{-a>3&aceoG{*2iDyOdv!tx4R3ZOXl zz*LlZyjwz_au$AwUG>7fxU<0jZUyztz2%*KY@HnWcZ1#vP2lo))7a?P%e4Vo8I`av z;O6^tOvdLE+>p&luE;wb258j;(7@JD&o_fJv1q-my#JkYx=%KzIJRNaEAzYj@a-!^ zib5^Ft^RS3E6Ajp2G2TExy$Es&peWPIIw|nZuzFty9OTIDxpUBQz;}1AC3;Qm6_%A zQD3?X{>eh-$s&*&+^xhzRfTarRDfbHtzv~iINP*%7hwO42xpF$<1doJ60->G}ZM_omfeuV;w2aFCg~2twp**FNZ+Fc2k#W96cu@0v$P!6rQ9W#8CiG+r!rbsQ0so7t5>6_)^n z^`}T3!AMu3*hk`+%j(*(@4WbKS+`ae&A>1$M|*I* zj1Sj3KtkWyQ!E3gPK4`M9##Npl&9j!L#6?;{W3K9tFZGnLdI4zn%H}2CsS1RdUke69fZ8Ud~r3zJL>lO-U|6ZBWwd*aY3Y9^s zR%6_|sS_Xu+Nb#kCu!MH>(<6P1=6hiam9bBmzZ4os&GZtW1J~{QrKCoh!Jza#dop5 z@wHggql{XVeh_wB-@+`d;yj-40FO5}l(~Tq}yMaDIj>8IEJ1 zAttnWg-#luP)+U-bu{nqP`*1*^ns$bBXE;wp&V73p5(84fO@lVSF_mn1fH{1K`v0j zT~To+&O*C~-KA2)j#w|cLHUom>T6bT6FY;`ZJk=_f#s)YIgk!Y2FnYVB!}_KJlmiHhd!TiTy*0QC+pYNQASgO034CT z<~WOl=Qf9G1slAqQ$gMRFvSF!)NZ&NJ6)ebm)pZMzGo6Xh3(+?;kK=u)H@@bhnmc8 zQ=d_1xP{;iLwvls8F$5BIpFLBL~*Wrqoc%y7&4|A`rKdzZX(asoX_91Dcj>$nv29 z;CIFT>d`yqA;$G}I2$4*sMp*embmGj80lg*7GHrJ1nJRI*=e zPP*r=d&(UV?$0jRb|o>6IbNf_%!%#pF%#Cwu{`n#9}g@`Riil4;YGsyK#fXH5z0n@ zhZm1Tr{EGsyF8Q>iXR;PSkhSl44Y}b9S?)bdvGR}3F(KXPBFw6nLV-#O%>Ib6?BP1 z!Gd0}Oyvstgvk)rh3CPD01lFZBncmiF)&}Nxt#C8m4bkczMd|hz!H@4d75#!%YV;N zQf;ax!RDZB5EAPNPr3GPX#dIgVGr@GVE0`7=`~^BDo%s&BW3l*~pH9K$RFP&drY4~Co6U7tyS98LzF-xELuWUNLa zg|a0u{B>xUa=0IklU?X1g(eWWPVm?^6`=!(;7r<|Br~_18y~m_#p0@MYqsL?rx=w zf-_#To+kD`bAJpC5r8o-t?jFs4iA!ZZj(jUNhQACC!6<1;4|Y4Ba8*3{8ckE(vtUor?^q|Rh(sJazqNjfIqPH4@w@13g9 z_WMzzr1PemYO_i<;bV;}57Hd@4-Ng`Sfd0yb><<>F`Vvvw3e+=*8E7xlP&~3v{Ibr z*R6fAUD$3FHk|EiDX7rFGh=UBm>Ek9c zJ_y}2M3m@#b&EX*M&wLSLO~^`*GO@+NI|neD@&7yiPZkId4bE{F4jYTM_XFk_SA7r zJldRTSnq58MiRQ8wPMnLKeN~topkAqe*smzgF+uk%D1IU!H>>UMJVfz>|UtUk%3C) zl9f6u&lEmCU+bPs*itExsOfD|L~)(8To^ucjPOA$A;wzG;b3kI8b;4Af&z`Z5vrc3 zajgoJ*B5GHoIu)2UQz4#WsiJs&PlsVqvA$uwF~Tn$)%xrgVQO0YLwk{ujlr6Tqc>U zQ(WGyv&Yru8q#aOD1aK`{3)f-7m;wXlZr3|)>9%!Ctat4y#|)+kp`BAt{LAm@boKrJ z(RP%P_J>n0+I-ba zPnXEIo{s0UTX`M@ThZ$&Nw82K=oBQ6DTJ=SQWR@+ixEJs zP+M;~sI%*9-o~pA{9GAIF%sB7D1gs}FL~ejIp&YoUp@Q}LjgPE|79p(WMJX^pQni; zwW;_GHkj_0-+(1kh;JuTvl5&1YZ+TxuZhFlC9!VjjO*js6?#A*6w-|~3+`qSM3TFh z7zKK$#4>(`vE?4chX#+b9x0FBmA39iYR=Lg)cBak>K`|stQ7p6ACU9UDDsCzvZOq? zye@Cg)oHz%pNHB}ewHS8f})s~Q86!-9KMykvU<wREW@&2CKtdcW>gzVcRt&CiuQrF4xk+9Rh5StUlHGj@E70e z!$TPqQ69pgg(B(cc_=UlZWb4>S35J=;QQe_hY?S7-rVg*$@`=WoJ;04JR25|-=g>? z<8Kqctx&@C&In}jkHUu!RWtv+$cc4~qyf$I6ZABkC5?L$$E_(UuMhdW zoenLzMYP}5RGx*bGs;Y%%F>J6Tm`u4!{=2A*Rr$+fQaioD%nv8*Ib-y64TMU9rbUy z*2EB0tNCcAGenrDjB+fFQ;)6YQm_h_-N_BS%?KsAbj_=I)4Py??^1PA?Cu5CjdNjZfu;bBUG zuvbF|NZf4F1pcmLY0kQG&3SZ}vEIGHr9$Ztx!SUGSujDQLfc}>zj{DntdkuM&189) zX+^_P(AbB+1Vp&K*zR>#hxH`Ms=Qn*c!n)meK(|gQEb0 zlXPTienxXTo9#fRNYl-;aDCO(HZM`dPp>+=L$m6rpPb#E3KjPOt;Bj$b1Tl@7&=^% zHym6OPCH)}d3J8RB~&Zn8Vp8KxEOwPohD@q*K6N*1lhCvDz-CRom2v3BV0xFjL|6P z8P}rKWm8k$V0+6#>&n)^Xu}2i?6@mhC8^#CZTuL{R?~F*p>B3hZdi-Xg{RG5 z^Auk1oYUSjO{9;a-7>67a{$@l)xJL)6dPSSN?K-f>e9R>WeT!2U%9MGc2TY!xkvnR zlL)M~i@&crbQ^KKGD+?t(u6_m)Zqyw%6+$`Cr1NbBVgVTRQV%#5$_N*(<@} zpYk5pIzrlvh_fa*-Wg5xl+4R#BL{Bh%CKF)QcLaMx9dGPUV%;A@00EX&0Fo|Wo3ws z>xSWsbh{4Me2tBLNc&Vp*HlbvK+Ynewz^c?h<|Gl`mnX)fXJl{2PS`-6<8ZnLCm$C z7q+QAWo^dR`{b5<@{};&BR95iE1;UGVa??ZER9asqFM=GX3V`uCUMgrx!te-_6Fno zyn@3F0>S*J`oi*msV__%jQob54$oXz&PSTF%mAG!C z(7=4`_u%tVg#Xe#m%6U>@fUPR6;Xyp#FZL8n{R`H`2W=reVR->+q~Im&^od4&g5`7 zRm4a9vGLYBmY`P4L+gP;*86<2+gZIosF|4AgV(CM+w(CU*iGVY`Fywu2SdX z^`SxUacnzP4LjP%uN<=b(fLNDr2D1CP5>wRyh7021!XL0wEf#mj?gO7YSj$V;p_hV zh+@pcSYY~5ru#hHD}nuK{^jX>5jBP=eoDWZ{`oxK%Wof2d>!srmLmS9 zaTf6|p8D|N`>y+Z^xKfjkgPxEx+0al=zp>#u@(~}%5m_k*VZPBmyy}rKXJojFRa1c zu*g^ka55cL$b;09C^(RS%~*0a={hKilz!-5E=eOU8cl~)KZ7k1imcdw9lb$)g`qx$ z6))>l)3ggv#4-IdZWb$**0996p5&F>!Ze9S_CO6oHPUoV zm=o{S=)EeyrCL)tE7mq@r$G*;h)y=ia2}Su%vKZ3h_;a1LE=bmFmA_EeTfE&tu`f^ zs{6&h(E<&)1LX$?f9IAu@QnE5sMXdne+sw;OS`

    lO z-IGC2sq47{R4VQSS$TMwAR3p{+byiF*7wETQ)|lhQ`?A<{4l#o}=E zw-QvF3EZb|QL3b2j=+@!dzv=p6)fw;Tp8fM5)nFKNSiwXcLK$>0Q^r zO5n4FLZJIkzYAqA9$$9nrESzVQ<5m0Od*(}3hVd{dsd~sQfdyuUpJo*oi9k@wFbnl zI;JnJU=Sc$IFS}*DU^ChoS?y)0XPcTT#0c-s?Kl)BGh9$KZG6wsB&cZDsk`^N}htU7f>SZZAVtL1`z6c@0+LCDR{5L8%8Q~*`^}ru(@Y@1CjO^caKPcG{8rCZeB?9Lg!YcE zO4N?7w^!F|NpWV5$(r*df)&U$kQaOe7nuzj`&J>`oU;{N&F4#Xa=b0-BEmKhdzHnj zI#;;^uaIa4(-Ny+|H8^08qRYmi9RbiO1K@eX3V6Hu!M+`i96FB?@UONApi_A+uXQL zZWaDHQGDMCQzkrm`#B;&zCjB=F$5szyGtH?8ew&t>7`J`h)WyN@&vNSi=@IuONx-I zl8{ivB-*zV-DCZbt6vAuQFchd@X9W^C}Cm)A=h0n)Zg4=B4shK3*nGqCED{t5!xOY z{d@dL`W~vJk=i*`)u7^$vjP)0|6z2VqaorK0@8q3ZpZWMRwW0CE+TD(S@OBL(jU?-j+}wIOUR8g*ci!2b^&ug?Rhe zisGQMgyx0W$mJ8Cyd_~bbh#;|MUg9ZBmW*2j)K~;Pv>CTd6Di)TiTpDn}jY!s9!NH zWO4uX*QCiQBYF{3vIT8KW}==lT3X3l)h+Ae7DYD=Lb^)*nK#T{8o)JB(>j#QDmHt* zkslAYp2;o%q&K+^!|h!&irLo24?Df(Gv)$SBsAhB)TS&QC-`Wm(7^Ni3$Z!s8%x zdunZ+OIkUa%^G27-r_+=CAF1R;Z${(H-WUfS|+!Z^z<%_Nl;q9p9tn5OB7=o%q$@% zI-G?;H?Ei}Y}x`=juGac=PZ?e(%EKKHP%(jeazW1s#;?c08j;sd8jijp;9VxBd4`7 zat`-lraE*ahidVtpt9raguH*d1XUQ;v?L8iQx$czBgvW+o4^j+mZq@1$__LxE1nE` z-V+{ZH-m#RBCG+3J@VNRUfMLN>)x&UaF1P41dAinT|iu8r;#fxK*&LRy)a&d;K1C( z9yaS9rY{&R3?`@Y$aDcpwM%xtUSu-~b%3h)%1tDePEWv+T=fnnYw{t&$zY3ra^jSO zkxA&b`E}koX-x5rLEe@!HqV3mqNtSgoAge$bbaUpT z?3P0HF{bm(wm>F2cH|wij81u^!;YHd*~r)?(CYvu#|;z@jG6^9!hI@PV_@=!{BdaG zEY0<$2Xx~s*gVXt{WeMWt&}zQ?ha8NRClQ4)Sjq(R1YoH`=5HX$nGSmK7i6PH23&I zrumgKrLU$LV5$-Gn@bF3pd0vMj6PEuvz7%v@(@Pk>`oilIa3GCmYyaB!@6Z)ZMZm- ze9Z*g5GyA~7h+NLk#s9U)6<7Ab_Q7deF3X>OVMp<~5f>lp39wecrZ z$D-V5`j_3N;yFI)L%iw5ckhOu84G+DjSkmNx;L5SZ6y1cJ&wFL8X{>#+Yo455@>uK z0pgWja7K{_^4gSHQgPomWH-xpFC^*^-YE@tjSs1fmX96C)FbFmeC?Kl%hKtk>Y&ry zviqz?_ZFScE~5`zTS~q+t3HfSL!X;7q-(@YBQl|G)W*2g z@b$-9EXuilcOE8!_w!5*)?R0P-tZ~?bCCa2BmIA3fiN<$Gyl&)eM&>JW`hl( z`$hd0K6I}eppP3x$9Hr7UF}hy+J(-GVqW^&Tf#CJOG&y=1u*=@TAGP-gPnSck8w=o zJz=uqk$&}coR9HZ^!Dh@nN)OFjCttmk@tE|*TLk^;V+kC`}3Y^RsN^;}h)*|T^Q3Gn$2WLeYI z6DUNm{nO#&c0`LX5xF0Ouu?vUuEVCj(poWiwk@$u`*cEkgcAOgN_Dp77Xb@_R@~Jw6`xJ_QiAtP@)WE2kNYQuu2lP^^D0~0fX>k zH`@kw#b6;TKx>v#rdAKsV3!YF&0yXiZm_M^S!1Tk;~g*;i_I)9-^Et0O3T7se0G4) z-OsBj8wmnBa)Isl=cO~~S{wZpASRs}cMK7uuOiMAAweaW;p*L~J!WUHIB~=+R z2wHfUrv*vzX#ZJ&4$KZYmppTl)f8R%zTQvka$j|zcsZr=95~U>w#lj|`cDoMm(7%V6NT-fb|B~&=eS=?x(wb!Bb+3A%Ie*6(3`*{q2w z&mp9BbfD#4eTsBH%1Du5?PnI!o>7o8;D<)yhK;e-Z@ABA_!NBiV|mPI2G*rEe#1=5 z8F%5lzt>j1Hax@nTG+#GJgu2M$z*fKmu#4R25RO5?$_wixt!!6YJ3}^R$%kG?rLlX z_Q96e9`N1g-Y1+n^L{7jvsrVm>QQqGQk_pYazkfMM?^q^EX1U-7U~H0HAubWNkNPE z$M*t|Fgq?by1#ld8qo46nOId)6~?{LR+N`eiG&|}bczg3Bx&jE9iP~DeK-bj;$bcw zZdqw)(c5qT#^)6Xq`1}!J+WO=>+U7 zyr?~Dv$#^gL>l-0$!b}N!?4cp9O8B%Ar!np;*Mf!y#vV^5S3{jn#5Bh z8+ysq+<%6}*e(gM;i&$8oFVQF*tI6$r(@LfFpe7vQ}(UQh?C{uJ9DQXfBI>#8TVn2 z-2UdcTRcK{mx&>O-r5Hrzd-wm2=o=28`Sw}FtGu04j`hv?CcQM3qLlqr5wuMN6#rI(mHdNn-I@1^UGS#tKj25u-#Rd2s^+4R zjiDC?MPRxkTL)OGj!Ctg3xuz$sCr&D(B1S?#{-SU_m?BNyX8)FJxK*z&DR%D$ByW@ z*(c&Ah05AwXEd7-D@p3OMg`gKkgPUJkJOal)^ZB(bU(R>QrMm@emUV}VlqDW!m?rD zmt$l2=mP8}rpQWgug7T>zG_1{D)X!z?dHcRh+Pj}4QiKG)4-i+O4Hch6%ZZyvkZdy z*j>M&Sf)gk1h3=fqKPZQ`qJw5nQ8GistLz9kUy@s)N%5%YVCVZe~tizmOkC60Wz42 z%WYiRD@U)(t(GGe4JtT&K!Xa@Ys$prRm1T_zpV?}m)pm$##XCwMtCJ8UzN|xb5lR) zgTj{0!K32wyp)$;M5w6M8^4-{v6_o>$IoR68u_CNiMJFHL%LoGv`SIMJBf`9DfleT zCd-RYRdSxe$x?H+u~wb!TDr#3($kN7zI1EEGNs->pRbTV+xb-Ty2}}p46MO2q82hi zIwir*k4`_N39H$%b-4u-3s3M?p}V((Bu`qTt;TdMmapE6B&EkXCTCDw33jQ*E4(zuySD4uQ5UVJj7!ALNIrlLJvUr& zd{#bL6jC3fQdw7*QlD0V@z988y+Q^Y12eIyb0OhXx;#hP%)bw3%0>PIZVFTnZ3Jx@+ZbyOCS{`aqA zA5!{^b?oa58dt5$Xe5D}U;?0qxMV9CK2sl>wrXK7$3ECu0Cu8;aZKqPohh3@4~k?l z2QVd}6-TP7emE&}ZW1N`7!X>hI!s&O4`t5*N7yFg8?F^BWAS5U5TzqVqJFlf<6m&; zh4>~sV5=l|8EQ%%wc3QpKLEU%$YO==R?A`n^M!q6rG>@UoRCHHi9re3Y-jbj1tA7i z_ZUHrE;y=Y)GK~$8ArgMC@eUnvDKtSW_?bwP0lPX;pNwa8hfar;t1_Peczvt+TsLV>c8Z66>dvjnkyU zw)TmKVbB|-tt_%$k4g!;=ZVgV9>$bbLdzVYn00Iy)SUoQEY$0HD=Z}fuVFt}zoP{XqZUw#5m?7S1yL?Dn7MMyf2mdCpGofeIN9jgH82%&{m#P;q* z-37Xzw(ApoA3Z*w9@}KC@B5`gN$=Zn)K=z695o?prR>GYmIuj|i5RGFOb zD^e;p@b{0R-%d|%^H$K<&pUTE`td=Yp6{KmzWmc{+0c*k6;cU4{VxV^p$M>%efFIt zc+-=nw};8ntJ8ePC+p0Oq?aSm9!bi1AXVJFX|t;bTMteCkMFT}k(ZCg@3TVA3%ukp zx1+noNm`g2xw0mcuTRVN!#1&`GrK3ZrnmB}JV)oZMqhuR{NC!DqREH%v^>B4lkKXb zd&fH!ojjS;y4ujf9G#^))03nqQ_Z|-+0LUX+ie}4rAd#~Wr5ZM+oe(kjM#46Dn`=? zTL>Y!7%RphFZ>=%EsZwxqE6nMQQ-J{W)A1f#Bh1$tnB(n!wHC~c_yfeg%hEWRiO1) z3}I*vqhN5LBxN$m_gC@>`4ahYcMdPcs=mH7w)oxQ0jyw&QRuXsD)d*=oH+@6K*gp2 z5O4w@oFy!z&Dh=MJKuU+RJit^oi%M~QjuV~z!>lIckQ!)~dd#CN*Q(SoP)>!kCk0Ac@ z`B6b5%&-rFhb$Q}1OEH&-sUEveoIfF2&9Ur`&IQ^0%kB`fCSJhP0*M43V$AK*V}#D z+hJkWO4E^JtJsk@9AdD*FQJqqeCV{Xq@B*OD-Yi6Y?(Sb|FqZHeSbJ2Wu#|dm3p=A zE~Pejhu=dFYYZQ2&nnEk7ifLwF(+3Y!4#P5fuD4qh=`HuCL;Qlkr|*z#O9agW79%p zqs;9oK>k4}^Br-3^JiLr;8g{4s!3>Vug*a#rqqrO6eZ$T2Tj{}_C2{u8_b&U!`Li}bV2*DK( zm+8LXG&c%t!3_y=08brbx%7ft@3;S?z>(&zr|Isw;WS4)A2S+$ty}{vNw6oZaTSFm zTVIjH$l^CF|JXwuBU?O{#1rEh{aiiylSjm{PMyt%;l?&Ao-*>7K!J-*m=cTto>Z(h z2CyP_5ZQ|zj7?UjJ^T9sV)Y16JCqydyu>~u=J73)rr z+fp=r)6-QWMR*F5s<6}_0wIBLbtT3rf65OGg~C`TS|5LxZ?{Z<)*Y`I}OUFrLn`iRPoa*2u_ zX;txe<=M@LC*n}Mz|oZfqVk{D0Rq&6h}m)YW9xXY;n*nr0^=Ym9BP6;%LQE#60ryF z`8^(TFP)=)e~G1WUoCjLx|vxkP>D>dZz)G^eoT^A%c5dwt%(qkNIky@MBm$^l3k{MViWwANTJeV4b|6o+y*A z$-*rD?#$@U_YrSbR-PNQI@6{jW6$SB=LYLin>KfbEZG27-3YbGs0aEqtt;8u(zJ&) zq~)#C!?x?V97sVz@BD5`v+G|}#bJ^^KLid(H7JRcbu?}hpl+tW8r-hcXDZ#`dx&<9 zDXx`EK2Yh25j%;rr4x7jLVm|?_iXg_(OSjFZa+Q_O zw+GaJ!a3=8ncElU1Ny=Df1qBhhTcj5D;lJ~Pr9Q)^{p z9!AF6c*eB`*YZ>Y+nHwqD+nX;lij^bS=u6F)lOBy2M)!?EIn)tRm3C_;r$4YLh0A6 z;hb_o+xaX#b!^58b$-}_mR59k?R{OeD?nJ3vrF0JKdznG<;w8U*wyDO+h!)^#K@WD z`rzps!cm0hk``4%%4r*_qU$J!2Sx!JC+1=NN_XBBy~DhMK5YoevlCe>75#`r^g)5} z0PI8E{npImyCoym^afX&jv7J8j^JnwMGD8|OErV{YXNg0DSp#gmS^_zjtj@gP3Yyr z0}O6d*p`uiTBsMdJ-_CpRBomN7(qQ{v#Zo4|_1JeBm zD4kcpQ&tC91~>gL^%}=l8-Qr?qM8Jr0S6fUFWcJC6s#k66~SAMK39d;awqk8zMP-+ z?CA+7V3dc+>zCvG`)+Op^0&X74Cd@H`Sb+Nx*O0KuL0GUDNx&ssaiw}D$k5{_4wG` z9m|;3Dwst&o8U9_Nz&Q!&8KG~yNIL67F*i1y(6E7>@UgjD!?uZswr!clOlnW~P$A z_Dlx`@abx|5n7di6HGZ?McRR*lhd-evgt=B!{jF&n>Zi zwW8?WnX4Y{@hhIb&~)$J_k6=p{IRZ1fkx{-9~N@XAVObiKwsbX3pxr9^Kp&a@Do(> z*dZNJE+X;oXrcOyN-JEz5w|PWV=rBK?oKU9OCiuAS)zQKL9?B}e zZMNz~)sjtBi-mk2TUvd|$)=kfO?zk}#3GiwJYHO$Zq38@U1fiL9`G3{@_F&dqU|%s z?lsT4LKn2vEg;|Dq;GaRho<)tzl$c?v)JI~8w18}a~)yE$|djDfS+kWi) zj#Kb%%jON8TF)OJCe7?hrnO_Qfg=mm*?M?Kj9VBBcup91ME0O4;O*h9MRHhou=<-M zu+FI`p0ns1U;P<~rH+!eNdH*!~m&Y@(mq*n!+kWcKj!E}^?oOKX z0Nt&~%@T#WwIQKvV{m$bG&35x7C8p2>SZk`|C?^Ftb&RFx-?R|=Kvsro9hpRI{EkX z06NiOwCC|wKHvN&K9=d-+zT&&a5@g4P`b_`flol7tx)z6_`{3s z|GIXczttnJ0&vNtNZ~<$^eDHDv4NgaJNP3e5wm>W(sG#OvCGBuyEcxnCrXu1?Ik*c zJ{X9qfM5Lt2e{SQI)31}6A!nddx7m4nj+l9v~IW8Ql{&%x3WCHRShRQ49gwmw^sYt zTNHa&^2+(eH!3e$<0qM;R&B%Hs-?^4mf**@<@oJ@*L!1?yH_Nx#9PXzvq!hb#QO`4 zd%mqnHpA_v56xSgsMH6z8p}S9tz8RSe7-7lO99tplP#DRHh+z4a|NLCYKYIQQPnm$ z^jfC{8D&QmzVF4SO`Yz3*6r|?eylU;$m8Xy9XqbXSyXZs{fbm zq-PYOZ#vwj#Npk4SM`=DyY)mc^lV2cVN<{xYQoBU3h>=7AjLt0QdRvR2Wp$!{dLIw z)Q0EMYrmn^jkV7&z_BHgRZ3ht z#l4-%z_umQp>BwZ@QP3Uj;k7}rI#iOA?j0!J7jnf2~dqRyGF8H6E(~i_)nym9k}Xo z310fnbJ@jq6zb2T%y)8qm+*#bl3+I4i4y9V8tRP`@IcB;U(UmbcpHNDN5vx1d!=|f zKYkiMX&RleYKV&pVI`GL6;kSh+rfQNw4$NIx4E|OC2~GLNxw>VpTOD_Gt_-+ZST$bM{QNG`N)8wv{iAVvyca>WDt_ut=hwVQ9Z{w?`Kq4 zbWM0ZIY%b;r&d?`Vq>yWiO*13(9p-lP+8Vc*wd{^O{wHZao$1~oS)MBT@H=qNH9$x zQoWjmS3}{L@I+8@=|wq3N6K_6YE~NiSmX_lYP+nOx>w{6aIo`3{r^p&F>!GIAI+MQ zi=p#>@o4`=rZEcrH?$ceBg;Q%Gm%6uX(cm^u-SsEGsF&vBjfh7Gl^q1m^QRy9P}{% z1P&95bekC)`GO({P?{Q05K2cY4}TnX_rd@i*|Lhb+^YRJd3&*2$vCNt%k922|th z=^^!-M}cf~wkE*{Mf1au6QVs81ZrwD#TQdxJql*2p+tmLByGR!Y7qvJU`?GYyq%ku zEn^liCkrK|-|T4O5UN2eeUXia-0#OWs% zvmz-YQ^V%>l0|zZxf}tHq}~(+lo?721u0_pDfRFpOAnRdTtZbBU>`;Dl=C(kh1YE7 z@d!eZ%vKL**uPfGVeH~P;j-)78k0Z_>MQQ-@cgRfej_FSu z$iQ0G2Mwv*nf+-aK?}zdUl22f)esJJTlELNv=)+5qV_|u{b2~LteY>xHL(wZP5*j) zqWg3N=yO~wH2g&-YDgM3mH~&}zI7yDLpIisb_S5P40W{3b4J?p``oc!Q)jN=F9TRv zuz3Zh298g#PMfM}|!ftH#%k{t^MlL|`)3T0YnkQ$+x%+GY-( z6na3fHQNvIx!`h6=k>WTwz{j9dYCk+jc0vX+ir#(#?1h>Gc^2-h)(zU_KW>-P&kD8 zQXh?E08Aa$qV>sIMY!}%NWbK27xkm3j6||T&DhY>2U!2>m`h-Tvn$FQDv>8AHN{% z{QRlYw;^G3TD$CT{&9UKe%P?wMP-q~14tt7Uxw$Pv_>k-g^8Szlu*cv=GC*cHI;Q*;Hl)RTCv~3G<4j7z3{ykaCm}mR`85_vJ1qh z1@;(b?G>|Pe#x)WBf1cNoRq{CU1gu?t5=+^&pze*J!WKZIRLJ=-6BLmRcW4%-|Zt6)NxTDeqPB<~J-od~~ zletqSVq1~VwO)Ga!nH^*Yr0-}6SG`cjlF9Ln#CiwbYuTuHb+6DB>J_x0~CRsLN_He zt|@09!tpEFUE@6{w+va{(RpNfQJJK8Uc;B3X9NSH#ig%DjM&uRg<4ywdHT@PKH}Uy zbR9lFocJ73Z}~#snvVB%a**l$o6U^#Uj+XD@n*)#_>W0MM#lOE2KvUvhYwEwKU$8>kT2jZLh+fR`HeGt#~FVR%o4m#NAB~&BvJzc_KFC?y~p5* z^dSAkT?hu;wZa2J5)z84OE>!a)o1(r$2t4*8!4E1i-ZM;HIxSC78bO{2FCmQ6$cpE zTPT=08RZ7p8%T&**&9H{ClnxN>laq(>FHOcrf63t=_T71mlP;w zX(r?$Bxz-7sib5S>?dcb6>g=bWK{gyb>Ia#PfpO1Q;X3kUysX*(T)IfM$%!O^WlM! ziHRo{@o~NRk6CCweLv40Lv|KhnS6I#uTPqn@4RYLckWTrKG?t*om-0Y-^w8h@+mig7zt-83ov`D3n+hh{5=6S7t51%2IUcO#)J4~#{b}et^ZqaUC z;l|`Vauz5g_3TR;htX~rLQk-5w8B(THaRBx>iO)+?iHTV7KY< ze#!n8`D*$&aei@=yW%@&8nj-o?5I+s*X;i2pRw`kBzJvresPt#xjf6={5`+1ytTZ6 zxiz1>pfjt$TVuGkfC|lCL!*IAp0SBr;tt)iXQktTh(_x3Fh0+1UuCH(K!)xXqJ|MPYA&k0wgaWZyD3Mio` zKsDl&zQw}fKyD>A)~9o1Z0Vv#;w&~JAudW5=*V1viG#ZgCJX9AC{zravHiCdv>9x+ z(NV4g3&T5mzl(qRw|Y2U8H=MHx;f1r_`v1Spg{rbyLElPtv!x>DY{$n^2O3hmUh(o z{9t28$8jUw0q!!xXQgd5y3wgq{alm63jNPQ16c%#xz@X*TR* zqR7+@&}HdIKncI>ZDmnJ_>-nyIr*N=P0=DD3E}h_F;iz7wQecXkanTTCI%?plfnV_ur-x(uxSn8fCR~h5{5L;7 zJSM{6P&#P$V0{)#u;WQIM8Rzz3ehgcw=7sT_=@u_J5&`O zL2=Z7V%6>{t5koMYL?+sEKw^~TnjQD(BvyfBvge2{{p$6;B1Rs@`2+4;LoAA23<7; z(1>8QW9dTT86~mtdUnloXZJTTGD{??0D87gt{D zf4@Ozy%+-N*}UL<*^Fzpg^RhwmE@1vr{!3BQpBjYWWt$4we68+iWHvR+7C&KlP0(L znt61A{y@%zV%R zE{xj2S?_XTU~5z=r$G+>+s3=hL!yi*^HFo04!^J)I*YxD$x7UTsEfi8abmi*- z4~aRRzB9UXu81unvyBlHR-lLQv4RP5!W*Mt;h$2t0iuN{u5?-*s_@KS#JN% zJb_UHWN9d#9UC0hVR8yyexy(GCs7ga^V!PF98H4a4fpEDZ?(%@4^MIp6UoPll!~GF z%(%utISK6--JB~^IA#U6f$4o!`#oX!bDlTHJ#{=qwkYniWqdlkv1nm9huvUUB#*8D7mWHddE95#cblb^eM(yP9r)c9B0RTm}uxIuUGiOJ4&5g&3g=+ zFn>3dWf?DR<>>TG#ug^hzUYP46596TJ&=;s*l2yByazb+T#@jAxyT1`AMNl<#f(w^ zyYT%BsQGWg$NCTbi%#NzZ4d)Y=naoZY!-_sLL=oa^P%PeC?Ud-3c)CT zL_RbTP=zQ?Gv{}_t3@mVfrcTgfzBcht0G2`qZDKZNOkJ@4g!0O9%LwZNoLuKpoX>n zj-ql`P}f-5vetsP!4#zH1dw-qkT1|%qC9AVv7^#K{VfBCT^7wycv;IA+ah}(;Nd@Q zrvG=Gm>K?~!Q#wp|L`)`N!+pwVn7+Y@rl%SWiXRoZXpP4LJ6+HZt?-Zj#Dj{5Z@Qs z@y$HwR3L=x^P4H-6i~R9oYz9~wwR!k_A}~Ak+zW|j;cbKN$boOU58N+O z4f6y*dM%p&R=Iya&yuPcuq&w_kn{9IXCwnDU|mchS1*i++pFhrd> z4HiSiX|Cn8U#bktTy){<(F8C2c#luC&S|ntHQR+rL+STQMiH!H^kZnV09AZzEYUH= zD2-IN*JGdI^9+r!l`6*$gCOF~N&#{i6wV%^0(q?wij(vx18XPw-c10i{>*9^7-r6N z=@#oag-~R?VKJ;?V6(_N5vn-nf^BIwUCYAH^en#@Ue3qit-{6G#HM$LLHbS&x;?%C z>GI{#3VgFhANIeC*1u%e|IJgy_z#0VorHPYAOe)o8y_gTE@SCt%ckMp6)%`F9hPi-7_GaohgNHHKem?T{J9ocnsHXnDy>yeVie3=ut8Z&6M|%!D9%Gh@|) zIHBoB-mCuitk-Z~TYvq%I4P7@AqCG~94lOoW7+Jqb@nE#@`(8Z-9wSxxlIy9E^KS>wT$$BwL!;y-uZBz3@ByGOg2Z^%gaL0&4={A$G( zy2D%9tVLEp?s$baY*1bVHd7V6VYM>A8^YZY@2K`gh9|?-5b23^MNjDTCL=>$UtR%u zkB3Z+Qfq@LLw!G1ARyxetV(!MSLiRhauxqw1epGl*Af%QKLCx6!sOq54Wau1)l0fW z5yoO2S};9tF~Rk`4U3*LP02l2j{mYi(`IL6yBsG#af@j#eWI?Onk> zMwBj-(3vBeXaahdxCtAIKC42q@ja%}jf>d$%+Q%jLbPnjTPenZK7{p5LA+tck#YAh zulfoflJM-xb3)JG2p_e!N|1tWGkbkmJsW#oieeIk;KLC%W|{gjR@?P;*9bqe2yX(k{!4rzq?(Dl;XATlTX!!*D1^WdGGR1 zaCa_M+zd%RQ5;2FIfUe2!^NuG)mzRvI2Yp^cGsy7#O^#d?zO@eEs}IRn){7tpqrn< z;(L|7ZvYvCnB{+Wi~l9n|L+$0KW}lu^nblN{BL+d;&NC-^XF=i1TD{~9R9?KegF`r z!&Q(dAi;Hi5!iZRAc^NW@Nv5;tAU3CF;7>b8Q_V8#40zg?Ilkj=je=}P#C z47ebm;&1;x1QtYzT?tkrePwO#+tmL zu%tLa{jng?8-P(L62;m$3)D~V_J1yNF5k@#=7W3+_>xN+kUY%@DB9*6YZfe4%K-ZU zD{@{u!9~cfL@g0LcwPDKQfpwh44W5D1y$a~w>d$=6L7hozf3l-~ zUnw6jY}Sie1bBE{A97@%RSGaK0lCoDotiX(rwX}di(MC3f9E_rt(BlUF-^Mk=F~Bx zmAnZWoKhSMBPxg|BasSw72+xgJPJNaI@_Z-h(QuZMi3PSQ@AF_AG@AZ*WnfEjrn0F z@{rdNibO;pL8U4JL6XMvB-yr~CoU-Fl&rnzMk!o$j9!biU(<$MlWg-(=Z7ApWbunt+@@9>IT)&BccqZ%%&hQC2%-wgh^o z4>I=-l(?F|S|Qw|!YuU+X0!6E-x69j?eN9J)hl;$FP!I~VU6ed(mFfW$UUbwg1HpH zcwM-qJf(T~xUiL^Qg!jqCcTqhukVxTA#|8xkpfjxQc7%DZlRs5jtL#H}zZ@XXbK{KqYny?jE3r21C^|7qDjZrKJu3jPIs!elQkuOu{HEmJ-ooX^6R|zMk9dGNZbldIKAkdMo5Lk2@k%T@ zv1ObX9iGN;g~ce(h@L}HV`9#yqcD75i7_$w*xb$zARWH zO0!oM3Ry`J>5qk@6u(gt8-qT)g|s4PeUx>pDL#Jk&d4l+1|% zAI*n`_X|)#6_|~NCGW#4*j`sklu*rfrY9&VDT@zoR9oo6waFk8=ucmT(6e)Kz=tk{ zx0B-Cq_Lu67i}J}VHy#q(E98$Jrcx5^tFX86z}HVNpY|Hd-&{RO)`oGxUqD*hp@-3 z8cjCPQM^7~o_A85Q7~Z07p63zMaGD7njIxhoy-dc2fmYjlgT*7(%CcJPsCaAiUli<9BcvO?Ebt`)?q3Fo0q;vC(+&Mo*24YM-MJ3u%yYk<4$O9Zy8%V4_{kSCvNKRiK?z^IZ4j) zRl6v?zol;+e*4?kZ{(+z5|#INlT%<~OVZIn4)Q2)VrYZBQ;*py+egCl8Im)ET zjEpnqj9OXUqEGQcB|B+Su`#-IuT}_VYTY4q1(jFY)L;FEcV#7L=B&^y4>d-u%a0;y z5n5mG@tSY>f*EHeB1y9zTHXX75Xj*QyC1nMjBKL-53YL>hdSB19ax+Pw$P{D#)r}M z^j}6=ADC4md0u3bnR&de>?$_akT9JG3u+24qgT;U`}#&chhUIsM|E~@k(yLBYlK-c zGpHG6?5Ef1R-RCf#!s=#E0-gjMqV+DXH{jiXef?S%g>kQd}>88!s1D@P@G{J-O2MV zGu8{|W3FML)N$7Xa);%UH%<*{r=oFbH#WSte`k|CxlpSvEibQ5euy(&6WdN1JWTn{ zvLQ?bSXiH*#RS`If@^vKV@F0&Ia>-ax-zhe>Iso>H-M|2D83jK*?9fNvCtGdM-|XB z`Msgn>#S>YI?=`@u9`=9HG5aut_k~B@SIu*`p?6#!ogvqy%3(a1jL3A11^?t8%5^>E( z6iOIN(!H8C-BaaJB+v*I8@?B`7Gd2*cW2MC)MQ!RAqRIk1hxYX@Gh4QkgRl)^5sGT zLIqKa2LG9HBoT>xus9+{MqT;2*J9z2mqDdjP!;zrlyEM#P?WxGdXizpfKjq?DA_!B z`V##Jen!UnV(}NY7Vmgf1=A&WlCJkC>&o9VF0cPb8Il5ms4_Q?*zr`~PyssHr6|9lW*?)GTm z`{Zo>&d<0GBKU$%<$TTjJDY+3=QO`sEN_$%iNk`H`=NI$&NU$BIut7tq(l99;VE7! z)<1Vr?iVa&Fq9(46WB`;fMxKD0{X@oz-n4sJiEdTHO>oFv7sL7h*hRN{qUkozA@9c z^Us44$B9Ld(JfUsydJ_bJ5T#w0s^P7?DkVfWZR1O`rkRSeZ`1`QWWT}`^-ey=(P}t zA@F%Bkw%eGkyVjdzr9V09NA~{VHy6SBvd;zrw2+fd}(iY>{*7w{txc`pmJ$_#1-QV zL8NG56TlvfnBP#{Ip0)N)CSbvNGU4uB3MO@SgDBveE9D9f435g%mgweB-{ksK^84IAdrr6_dvb8^Mki-Stj`au{H~>S0?6DjB}_9W=MB7N=0L7EGA&dF z5n5A>_!oD8y5kIuIqP+K_{ zPUFpt!C7AjeYiyl^1cMEVU9xl=CwXVYhH`m@hj^{7K@(2c^cyR+r(zjJotLqIqk}xN>kaxqm_}@C4YVRHqgEH+a)W$kBbKTwYtZN zW_7wDK8n`OG!5Lr^HuYWZJf&k^SJ5`PZ%|JKgp)`p$=0`4>`^j`8U~A1ygKG#DRK@ zBJ=eU>|7veRoWhx)vz7JMN4{=%x0PBr>Z{YVEO7j9@(Uiig!quK5gn`L)aO^hEBMo zX<6QCXnclmE+jCH5&ugOxEAKnJzT%{)jpoDm#)mX!cKNN%q=5sc}s>>=Ii$Sq+5b( zt^&-7Y;1j)6DMv$0EJ)9{OgOo-uhk6nVARI_}KHduF%lDj{i}3w1jTb-VafwTWuJi z@Dx#3(oGs&Yz?;5@d4VU+0?4fknJ=5#~44LJJQMPze7m>QO$tqA6%x9zP|n*Kfz4@ z&&vlq08A9{@xS?F#(&}6{x|euWMg6b?;6{f+1UP3AiCnVu-6*%==#6|*aittDij8C zCjks3ao^oHQA80yDi-%=9}prK$l51O%9qxtA^Dr&iAUf{xvobTwJB_oTq)a-S&Ygs z*XC64+EB`ENubDGRJLSSkmq(<@X8cc=G->yTze6aj?Qr8%sh&1`#x;@c75o4;C8`d zK^X+gLv{Ld1QUIsE>EtHfg2n%-%8KW=Vg4H8P$C<@BT!}k1|6y-C)Q;MN4&*eP~F!mTR6W3hgjYQ z^}Mk3HhGr3ZWGYU0VQlfzbl6IgR4LwN)tz+h?U}vEwJ>4FD3!_K>0VM3jK_~1$gkCFMM~H)n3~2rdWDH}0@Nj0+Nsuv%+B+HE z8RWYITid?#8iyGyH-6#qL?!KKrqEZdVh!BEe@!K;T3E<-5l#|+$$44z{SED0u=Vq+ zu7H^W_q5wru4Tep9{PD--oVz@!NJzHppSyTuYArDw8b1mcQKzEm@q5<;T@Pj?Eu34 z_7Q<_oyRBbgB$mCtYmvgGpV-W`yu>ZIq-|}knA@wUKahFxc9cUUVHIi3sSa3`v=hM{zz=v7cj5N6FiFMMM!0b`Seop4HZ050-~<$Jv#*~ zCIMHV!tI*(pP~l{zIrKu3LFPIm`Fc=uTeDJV~9LM3BQZ=7OSzluEN{ewxLq`Nwggh zdey6KLW?Or^80{+MwvI^dtmVg@JJ1_)~Xn=q>0OyAvBJl2_+fCFrk`JF+(kp7!i|# z1!!_)GpRs0y>ipWf>IfCipSQrp1*A4{1*BWo)sy3(N~FB)gzgm*7E88rMgKNJGtL& zdf(*QbroGDT63wWUyGcxrfWKxQCi@Mud*{H7@-n-vuF zgDUK}9Nr5&3J18AI_z7 zF!xd-T=CE^D6a4b31CE^Dal;FFDpL}tFyK+GQN*-Q=E;vdv-md4PL!X@ALhc9mOtx zd_RcKGnQ7aECsO7f>#1x$?gEqJN$+?Yq4#}n?@gwy(7tm4L=wqC&RO={4YU4VNe! zpCj<@u{VA0QGH*3Ad_?sGOo!Cb>iRi8E_amdKFz}?+UxT=57uB5hlPVmiM<9dVd zs{&#EZk*U-p0H556c3#dHX;xs$j{T8r#CC5t3uybb?}7~e7vTqA5^gs6@wsxc za^o5a9U~jjkF78{Q>73-Y(|JR!BFYuHAtfFW`$i$Dlvm^8G@dkJHn%Kk51m=M;W}d z_n5Z>`31f2!1i{^Sj&fvB>uPr3dv8BVnAHxVR^=A(gEVP%8taIyAy6MFnV0iH*n=u zO{S7d^WkTl!6mmwBW}n`cdx4)pI={K9&=hnv8#DW=aKi0-Ld96uHG>$b3?SKNL&lT ztsyK3EwSSLd^4URumsA&4(rZLSb>P;cjEo|K`>&1}YdWBGse2wpaasyqWX?9`cSqiNb$>cVq&(R!p7h3TDM zQ^DfRSjkp-xf{N(o;zdWR;**+y=70?tFrxpW0HVt+L|eT{{v|I?C+i@cAp0vo$3uP zS?_ClF(qw8q9*fd?nP#IR)J;B%eJt+oeSpbw_-E-Xx!J5gw&|!njLOomWr31&J$tG zi($=PI~AEJo6%LJ(G(?Jq$ad$Dm}0 zovmQ@Y-XO7j|Ynv9p))CFlaZ=I{uSl&0tx~O7<4?@M`?X;BmK>ys+Vqx?g~v-Abpl zNr~KUmLX=ZMxtIlLu##sO35-iWMYrzZ4_=bt;usHFJN5kDDwI25RPCS1ZB(A1aL|x zTJ7@lPe!qkTxt+lOfvvcUW7k5|qmc~Nw!;I+Q_QkmkvuSeKv#!VE zpq(q7j2u1OSPXTNV)dSv|6ybMT(l$^3UBhMXntRbcb40sIG)e9=ZTNu zS`(lSxWKK-VZgzKCyQiBqlYbow~>_UTCT#xwvj2=BKzCIpVM2(b`$rOHbf-R6mE5o zTJ;om*-J*ttMRva!n>RNtcZvoK^olJL)^1j$VkCG{6IlL6 zau8Cd89*i`g<5BJ2@BC1a+UjQ(1PK+VbPEE`KXAw3NnW?cRf2bH9bA@nQr%zw^cDZ z-`cm!@!|FL;oc~(gcd7PD z`tYox6fx-ah_8hsIsUWO^X_*oZOJhCHBP)m8TvOv*n_G>_}e5ezWAh9JbdBCD~+>^ zm8nE|3zp>3lV@b^u_s4wk2<|izy|3Q+^s&LUN}d-dpL)r4=dqb!QR~T$}`&fSe0g$ zbW5LY*^_niWqpO-p2fX7-p9YQN~wIwHj|33=8sd*u&Pyq1~in=E?LYs8es%`Ir;VK z+*TB~H0QSDYKg=v3cVt8R!sYi9{p!`r6m~KnVP!M)Vws*+ID@eJ0e9}Dn*h!NtU9m zvrR5zieg%de!9upIYjU=ofuEs)&`<>-95)zxxWr^Lu-@PTd_T4 zrw?EA0N^dlc^7pPGIZ}|!}Z3u6qk^*9(t%F`5Ieuu=#=Vqq{QncSQ6TertEPlL}APGa-B#qawKlW!|F}`BtNo%SlEve97rG`{00G z8OFOFTeg5z=u-i21gtqot|TV=c3BOeijU%&F*NV5ZBYkB(LU^(`8Byd2a`+~loPt0 zzL{gSfI0||=h54b_%6}D4!(eGszb5|bA%mHz*FGiC?Jl=MoeF%;}UM6M$j4VYijfO znIzg5! zr7ZvN*XOFaV!s^rPeFSi7N+pRF@RpGAwNHqUBk^#Bc^QATaND`UiT;r4CSPwIRCmt zt?bOIgVYY{O}7s2?tp-ln*-!e=ua8{E~-AN($0KOfv47U8<$8RD2iJ@05DJ#`Cowl zIP9tcaUp(u?6Kh45JR^T90c@f$rSwDAet2M3*iiUQ|&(9gp=YF;b2H`2xy!pM>~zj z%}j8_U7pGrYlooCX))D`s%}yoV4)04a8izk)J?ckIqtI?^T6T`@h99lFNuFLlbO9nhC5}xX%KZV6-FOsw?nE0>6M2Wr$_<z^T=|oB zB=Q`AxBKc=J^_p%G#LU{YX!MnjGbzv93=xEVcpgaU7IT8bpHT!TV>#%=hp?NaGqKv zfaim$mKj_pX?2cQM-L_Wzj3&mq17;ClBR0`ui>9u*|vgHoxli7Y8GTa5ICW3_k}Z! z6A2m#_b>nyaolcmOC1=CDD@kBL40R?ydpF8Wr^?rvbdB3?Gl37=C8Nyz@pUv+JHuz z1+*H@ZlK~1^*H|e=naNV-vH4vX94%ux;MctlB=i5|CaJcIiFqQwWAl3Bkug&n0W1k ze2bZi?aU4x-HQLY3hEPVq0=Mhxax!STmM+!R3#usrJBqabJA2jPhW){RF%~DgCxV@ zxm76Tsp<3?*j8lhPkL-Q?vOuhK7u+g1TQYT(Dl;*H_QRt(r!=B^gAA}rPEiY!r{>>O)H6(x>mHFB?StMK(c__)eVClz)YkM4?$4_hxw)p@RbH&l zqI`hnvEpnJtQoH$3cTv@*!qkymz1t_of$ThbBnw)LtIbZt3Lo#&p0yw4ypc!`h~ z_Sz#ETfAvB8bz4XB^%6G(*=tQ*<4~PK6%6%tLh8lMOHkWCR#viss?Zy{(x(s)k4dH zP~-;mRHcg6-34ekg5ic;uI!9}NYPf*AYt_y`Wli;OmZJCv)B@@K#&zR>-?TNH&3fu zJ1@5CPGGn;6=ZoM#%##Wc5A&X!%rplL=<}35%EKJkrg?Q+;v= zBkh2AUnRRa9@hEYt#dQziizX=5?l!77a<4Tccn^j0_Hjup?@0 zfG^-hgeW1#6lA5PWyK(43mmk*PODdAVx$#$ujsQb0Gp^GaVjgp^Ib%KiwbWaCbCc zbH1kU^s3jVp!VV!TV&!;SKVIK)jYIb+?Zm1T6`FmZ_}fSzN~fi$Z4n)kkL-5;^?bd z$goFWwr$(CZJT%HPfl`nvj3Z# zjATB{WXz}e(7)b#>!IVSbx}AZZ095%R>MHbaEyxml1jv{28S>)>HQ0OD^SHs20=dOF$D}?IeNfZML$^1v7^4wQ1-CNqdwNtGr0o4)xYP|ZD zB6X@28pTB~_7!Q(Q7+ibQDTNH2jbt-%#NJdnwZC zzzu0V(2M@i-&m@(GWgYO}M`3B1L>r zy)FoLy9I52@7nMO&)x`6%L4-BW*#=m$OZlzewh6=qooX#91Cw(kAHT#bWp|^F?rl+ zA4yXL)J+w?kllhkrSjXpUYXH74pF)tWQQHZFCCug?oEb{7zauzXnMCP+1H(^!gT^8 z+jgB@3{}NLsdGrk+H@fMUk?DC4}+r(pNvjyi`HROLjTw#QxB8$lOz{Y9yTHYC)P?0 zbqm!mWJuG2Vw;W*b|i}CB`@G0N*w9yw-4?Ikq}0T^OwPa9N^y9(m4KxUqW%#A--NG z9q_WZud-jifX+pjlL^yRf&p>BE4^I-qUfS?82kb50`&;voA?7LE7v%`zXW}EXbTnY z2b0}P^|k&E=??&H8waQ=8tI=2!pBcSDhU2V?d{#p^(L#ka_Xl?lZ<+~YyoQ$Rvky+ zK<$15@){Hub~nfCrsD?+@+pz-KGnYsokdsqvi$cRY6$Il-`N3oxUNif2d&B?Ua32M z{mA3Hy?ouVx%u>@WM&0?_hEJ>I(ByE{r>C;H1D_dOR(4)Hyro#Xg~fh zk?PVBLznjOd^11p&A8;9h5Z{8D5Z#pgCp4qksB~Xt`}2`%F6Q|n>g;=Dq_?H!Q^7n zm5Vj51R0NT-5S5>cU)_F$S{e;s|P&Ir;ZF3#EBF6%m{l$ZB0x~Uqx*q>1p?~r$BhK zTT1fFEo|>^MDP&r@878_BjE290e%UWd0bMn%Cm#2^u%N6=XF}h4HESS3u|XJX9ow9 zBk$O^lt{zESMdqG7Z@rNymlI6<~_-S^s91%nxt~nf9Nvo`m6|adNe##m*?5tfr6xC zR$AEijfTR|oKA%F#^l5#vEU6eCs(;}J6cqk?DX}3h5NH3awkAs~q6Ejb}=u9WK%v zBAsMUGIE$}g8WA^R1+7K72*9^y2xGk+UZ|@Qp*aM*x88523(#8IpiIo;2)tIJQMeL7iR1n zBM^LwyLhrqT1w;szX@>?NF7zc#K?;_skv3ZEIUNf^0)YhIsMh6Ufv24D}t$FcXzR4 zv}MAKeUvz{DpvaTRCKhobbPecOizh z^ueW#w7kL+NeP+7N>nWtzh#eXoh74A(O)G+vWepPVqw5~=jTQ*Q{WZ^uhqtcJNgNM zRi{Z5&yV>L3EFLI zAOA(Q*>qXonJ-YUYOsx@-wCImJU{VTt3&2S{=LLvIJ@bcRxuKH2*SS{Y4z9Uv6-EK z+i{_vVI(W2X`KyB?A}HK5&Ua`_ai+%yF*T%l*egvqmLH6E#t<_rw)GNEYrqSFr&Zt zSv;Jj@XOOF**rS@+9T8ItSl<3tZXWV=iikk;-0s@RaWh-woXm6%se<1f=p$CAqseh z)f>RS)l|A{(=AxWLxFLlI|-)IL1AB?Mj{zxMuE`ittq$E#37-0JkJs@Icq$_wIGT# z@t(%tJp$^l=4En$uy=`d=+%p8WArbhjeq@tH-^fBik>cHd_z?*b_HPy48q&{XTCE? z;7n7LK6uKEcELR!bNNCCM(18nN1->Ao`KhgT}Vk>qU~PT^)j*X%O~sh`bx<`r z>FMDr(7^+3W9jLYB=Mi|EsT6Uf8pt%dcd9Ta>b4Wz<)!a{8bN|pvGb=nX+*+Pu=WPk#& zaLbcVk0zH0hFHJ(tc9GhW}x|&w}_FP5b}8&;~v-wGvArcbv0cR(EUP1nrVLxgUrP$Y6#IbfnNbQpJWr z)dS6l`JvqPFa5do*t;`-j^VdrVfVHsWMhV(e#SqhdV}yefo}`V{b=$HAK;$W?xX|ZVB15$#p|+O_}(>Eqle>-#8+In@x$1-ERez zkQ__lU2?L`PS@T4Jx+g5`*Rn37rAqM1ANnmxle>jyB_3OXdUWSpsuIXnFA;3IBP`C+dU-d5x`|8igd=6Pe;B#d!qr2K3T@ZVrX4BFdq_kQcK z2kb=d;eFfM*$xc+0a)x5hZwPwzdSVndhHg)LnFZM$PEov(5AbugNQC{b=Qbe+QUN% zAT2|Jf3O3Y=$n1Gqca{^b>l!vKAd&qfNGcEgTD>o9x}j-A&X6n2BTRH!mf z4?Q+-J%gzbSTqNt&F5tC9}%bkjavwCP{eBhRspVDWWX07W~dNWHpe&yPyu5GJlkY1 zKUp^i`9R!r#^~YevjV#Sb!)b3y#rz$wlK6rafQJJqSNhb1+byB6s7KdJd47e$FPhxWQr`LBaeNqWhNZ12l&(^xX^44r*T4TwG%ku!{EGQJ~;&-!}9i zV&8V>-^*@2Azt^<8*Q8ugByg#bCxrPnazfbefm0xyccZ%x}_ZA%oR8R`ESnQgM~cOjnc zt4t{O6Vn}M;40B$D;aT>7&<>L1zL%1NM77jLAB<=R?HFSvWWSXzJG{*7pN&UrYLTp zu;nsMYNjIm6KtK3J;g0z9F=i4Cz}??`dK6+MqGCfV?wKptHsM2)|N)i)zd-Xxz1e+<&X# z|ChG)|DUjD`VYX~NS|Z4@At!iJ${;FG@f-Bz8%n@^FUQeo-Vxn0|%B_3+=N_*%!ic-YXtd>O4T^-& zI1_*{2*g}dTDb%^Ul@2AvKUlO3c5HwCNurKC|~$59C#Yugn`n8ose8cdCqC)t7Hps zu^AWtiFoYIv!|>3>*tMY?>8@|K~NkDt^iPw78ew5qS;MFP`Z&FtWD+yZ_Dj)0C~PI zYJODT+u2;$7xlj``O2EX3^N=uB|RB0(4jrXX_UOU3vZ*QJ$4izpD;ITqw`tdyz4BH ziW3-Nv6YAUYSmP%Z=}Msbe%3XUIyNG#vS=={~K-4P_%>u&RT>BM0{ZpxEjknEuH|J z4rt@J5D^L_Bw|nGm?5apWiiAtA*YZtEv+*K8Cu~0&<#5TB(xn}1ZsjH+L?_+7z7r8 zm2XfzfFyzgl~aUHwh+5t?+9%)UdQMKFD6g^L??5E|%abowZes%>4%{&< zT;c3qRiz(T>gXj(q^eZ&h(5~+>&hoK7S@ILb2P_w-{+tF*O#jvq>Bz91}?vMZx}Jk z6bv4`yzwKIO5a_LTgx(A^E==uk6+L1eAkyNck-ogxV|*>*TO^!A0W2dqtFz-gxi2Aa! zFg|&IZR$kYfj<7Ni9ggMOjODh02r_X)wmsXa%Ku`I=Xp+h7Vl!o{W;y3NgmLHst5; zJFMkW?sH!V@{!;+?1FNZfMTaFDTo{;g7hhAJb2{D(0K~ycd|84x!KK})2c5sUC%4` z2MQdu zSo~7%vx~3qKC@M`c|+meTThOyU1MOyLjth5OE!Red@eh>?4~8sj#i$FAxyeu^TU+R zRZU&k+0?n&*izIl8mF};(dH~+&zh6Jpc4p5h1$WA`>P#|N(Ugn?%ZJQumJ0KZjSLr zwWV!*@r?E&zZxA+XV&jVb-?5v)UjDiVPA1(GXb*vfqhH|`|d?QDA&)qlI0HW_nOYX zM_o{DS1?1ezV~T`M?S8eFYWMOsf#Osa$#d-u2oClRnot=r~fdOL$SBjKr5%67ckW! zL%JhhF~gV5J5B|(!SEna7a-=RdQ5bEz=&pzyjyj|9p zx2$ZP&PY*@z6ST<$hk@i%k`a5VdH0VF1!9Y4H265Ua{Ez2&wRL;Uh;N2zm_fSJuzg zE*+3JAZCyLjrPpsIcN|87hH_+=Noz&4AQaZlSpGRLc6@*fUsuqFjbpU0GYr@lp(9f zFbj6Es<6PLSyyAV4`nrHSI^kWPl%Y2U0%l4{+-+0;F_B+vbiEn?bN2`Uitf(!RE9+ z(xD@J^Yk=ekx6adqW&gbv1$zJ^}|Hh+~sc6*K1$xWDR|oYkAKchgdv2z(Pw#yp}D+ zEk;)k@wdBauToSL&L(1=QPATKnJ3B% zlPvoc1JAZ`*tBseT#3fQQY$4X)GN3nc7nUROSfa*hlnh*Y|FuMyPYaNEUaA!VH3v3 z?w9`gwtXhosL36@m$HlqU4ha<=Oo$yRG9_oo=G{1@!GIUxqeuB3i-ZK*C#rUs&wA+ z5lZq$L^;z_I=G!tIl{iC|4ak9%hvA3X_q+`T^>ziRQfdc2A99r_af7K-jdJNy;z}& zV$5mz_+Wox9n1A+PhWkwj9>J{D}!#?$no_P{MK^gD|>AG)?(rMZ$*#qn)})4W@io; zHiT32Hg(F{=6d>>b)3$Tdnxld3E0&TkpH~7VT<+JKsT#O0COKvEShIehYS5ri^V0IRo}7m>mr<%vIgJ6;X-A>$DnuGF`BjI%rR z59-8>2emI(l{5#I-)ZSHWhz>J#4&dpLB%%DbN7G+lQ%bYXmwe}Oc- zQ1uhbXVv|{59z&u^u$_)KYt}Sx z!Suwwi{%J=MCaA0QaAm6;h=Tm`x;L>qh8_KAP+CM zb%P-Tszvhq2c-K6zK%%}$CI+MlFkOlr)to8yVt^c;4YOB6NY%Zv0oG-l$jir)UlTv ze`I%4q5cS+ZyyOYHJOo!DaVD*W7Y-DgNVUMNd`1;`96PqOI2b?U$(p6ZIRvZ`*nP> z24iXre+RT4bJ&WqXa^paiG3x#&R^FQp8|P+q3(@>&B=8LbE$yh&olTKA}&ZBoVU}x z8KveT0FK5RSzb;lhUv^78p9<3m-nzyV`&bE6Zy&apG6Z7$<2xG85c!uQUMs7yh%nR zPGxjl>tGUin13ta{rsiT?FM7goi3{S3djuOMy9fP(E1L)Rwlo|!pqun@ilr%K9I28 z?Rwqw-`VtXv-)^CnVyxA&)wMaw6K{BPf0lp)blPm=4iB+DhxT-#=6Q^WxQsiU{M*S zw5b|-t1&wKVRjrmeAFHv7--4fLT%VP@>yb-+XzdsQ)&E??M7){fDM@4=d`Qqe2C7t z<-hc``N_GV^{cS;^pqIS9;Le>QoYn`0^g*5_@6 zU|k3CRbtfEV=QBjNolfWZca{hStkJN0Hc|hsTr9*$!qP}y_XVo71XM*Z7!) z5|V9BRV*jqj>YG(TjFQsx86cAQb4OVNpW9RFH{OF_>yqUX=PHn%{Dbljp+k<{`8 za|1859|9{n<1brh%YMh7xdotIj2LXOHGwh%VyhnEqyVQ%!|4IA^O*GAym@jmxSW|p zr1^8p)@prqeL==fXQE08&9>!gyjwVYLgx_pNrRLkbKS=Kg-1`0pLNSK9x@gzlIvLi zZ}AxV)s`M3K8vc^M5HwM$OqU|vt~Nrdbn`6t6E73$I4YY#yYj$u}*VFD?0wePEf#J<=-Vw`ZeHw7@GA=JDhJ%eXszOfY8g($^db@PlXCbVtF8V0xWai08<%aL zKJJ~lIr`yaXOd1H9kZM@LiLV?Blv5}O+8!un@gP1F8^0n9?1d~d`4E6yU+SU35|yW zCC>W4y|!*`#jKMlJyf*v$Mv_P_;%@UfzMFtW!#ch=+f*UT|CteT@Xzd3WSBKz_vpX z+B-m7HK>0}OgRUOW=I>mjG_s~+1g84j9K8`JGddx%7jr5A0OjuYGkcdWjDwYtY>W_ ze@qY9inlUrAe*byHIwL8>j%N{ov+~JXWhZ1o{bE2Pk03oOds+yP}OO$K=xFcyafnU zLV&)7donH>hmS^B9b=aH83wWkc>6yCu>A$Li&dJx*3xBBNc13ho?Sx4*UkoP`l z-=J%({2&$Q>%aI`!-4j zPqaArR_c_&#b5Oh-dwuX@y&InYv)~`5Z)ju{tN2hLbsch(AFuwQ@&GN`kTK4WuW{t zmgO7Nr35h>K2on_K{=E(P1|t9QyZ@}#NwlIP!?`;)Jh>!Zy2WF%D4LBwn0G^p*0qk)(&MJD*O+-ZXKz)z%7R{N*K`ZC zulg|?F#u)XQ@%z(VRY$LxVhNT;jEOPidx`>tlNrPD=WV*LMxDxtp~kduRN!0Z^DVP zT8xNTyNqUyIU0ssyTHG=qHSZ^cyE)B5rd-M z+ai_vt1(CJw+7kq1=QLh*F*StI9T47IEVBMoNR=I6p&52wRQ{F>g-xk)h?^AL9wH4 z?ao!nJeU04Vzb=G3f|GyP|VHIO3N^9Hg{Z|IOZH)BJb}ZJ)&kozNh2ny2$8~OGXwc z_|nKurJ9|ss<8d5c#_3sk`!iT_*WU+X0>Fyes?50+vL<1l;;;VM6$8q-%40c$SkyLtvg_`D zPhRM*qA&%qLh?pCOmWBC=|7vwACyepBY>-Hv4=_bDS3uE7KOc_ysq4WvZ zsMHdg9|rwg2YuW_LaJPtkS_90vrinzMD%u?@j{+ zjzT`D5AU*`qa)*-;oT)Cy@9bOCu`!uS!%A2kA&F1MO>}jcvkex%Uuo2b5SP*NgmIX zZi#kb%s-1_vc+dEp)a`lUy6zzo#Y;UG4oz+58YOWTVFV1V!d)OUbEc@7wXtfhLJFBHo6HE7e@je-Td6vnUjFg^%E3(nQ-AB0h8+~;F z^@iUZ?}{%HMm};Whl>!)wU{1NE0sdtXEN>bsmr;x`X9&zH@l9mG|$ zvW|X?Jchcbk#MJ9ODfPLnM{_0P_o`M&9>MyoeJd>jNH$)Mm28P{JqutJHnL?_Jn^j zOrR?*!XLuaW*3nX-v@mvzZ=ZL@!T&WC@8fd_9lAa92T!n&;~NiGxKzyD?mPvpJ9erq;sV5C z@LB5~vh&0g82px-%8Q?K??j#@4 z3wdLbp$EpB-XV{l)+ZCh0B#^xA7?{PICAe@>>~#9j+dbn9BUyiO-G1O3Azn_@#}FC z`sajb^w%K}O7b6ws2&Heh0jQg?^38*wF`NFBb@g=I2`$Av~r7hCCuxT!_xT7YlnJR zSO%^q#Szf7KM#I@iLU?Mia)eSOQpNvrj%{mE28(qRffZsKJfQwrMoFLGJ}~UV1~EDO z;P)2aXbZ?p8zQ?z=;Gx;4>Yn-y;Sd*`&kV#=7?yJLxNqQ<)QSDdPu(%NYK|s2MY!j zX2WVCIP6>6RB+yPctM_3?@JSCBrA{nj+%}tROncx0~hL?VxO{}9FQcbp11ybd4Jy|nHw=<3TJHS(DACql_Wl9<9u3ch= zYeN2Y`Cb8vH@!ua=nmG1suo?JtaSo9Foh4p7+v5r!vs}|Nq>lx9(!*~LiYRDC55mp zC0CiZJGwt4)ymv;>Z3g7j^&;W^IcEk`SFDT9z}V4hH2K!s7Y2(dbSNVM|lSPH|kaU z0s9x2I@iMQzl7~f|8M>-#{b~`GTwiBzkYAwpMHOTef|8M;!^q;3j6^8)XAU(|JyhI zmyqXw0(~|HrvIyWgq`_6rtGTKAr&&kQ*Lhbz|m4|0NDtN2p|y-;)2>3*_kj9^zZ)R z^!gxS#A0Apwe@WGLvS2`qxFdoGbEig_AV8sY^;glDcsIIA>*`26C8=+|%-x*`~bFI)zmA^sL008Gs9f^QaTutRfFu4H7eEVzBGXkU%ZyOB9ChO50)*2E31x%KV9cLh;{KF`58NL+OHoyD&A<3%S5e6$TgrMk5c|Efc1LE9x80hG zaq2KVN!#zd>(V;{+WoGHGNsFbT(NRw%$YQ3t(9dEFRWvw|ug zF2^U4E9j;Hd-*@JbJb&dPwR@xFA5U2~^nTnfK0Omzh$o7!LpQYsSQ!`a z^UHXT80UTJ#6jf-dlPxk_G?9n+E@ap-%`h+e(~6te3-wQMZcXrRn%NVts72-@SJd4_~1-%x}WnAmL9N=4NEIb-@!oj|~hUx@k->eNJG$Xw6L{ zMUPZ!nlMDJ2ScOFx5Y%Wh}GQESZ^;2sFj3Li&;|C73QX>q$bx~hSxDOR-MONPHma0 zwuH)QR!*&^`eH1?j;%*m()6xQH^hJUeU4fq1Ye`F>cECBV<{?6Rqry^9U1u+o@ z%BZ#KJ|SB`z4hQV{p()*1@UdSb1ETr-BSLua?t#l<%>y$M>RI_eB2hXPyr?F%}IZo zTQ~ieIg726`_J`@>J>EEc_^z#C@Je?k^Bn_^eH@Rq5#hv6-2#dhy=@F&zN(9L-w1n zVboKfdloQWnUe-7PAImaBnJd4r#dQUT^r6{%Uh7ww*lP7XEU>VORwjfmmIh+q5+sX zO+p_=vy-e07Q-?UJlOQ^@4f5KRFesja1udE?SJ}77M4osiRX_7B-kDzeQR*58w6~T zK+!%ela`Fa^Q(J^dV*Fo)W1he^;PZmD`Rgt#^LSFE1SMoZM_Wam7I&F*nHZH?Y!)Z zi$Yf2-(Q8(FI6!&HFT7%%O>n)E|*GgddM^BM$=^#MV}viw-yhe3-uK;(hZ5j1l1E{ zk;^pfl`M7jbXf81q#`A@<#+fw=e2hitr%avWz+*VB?k{s55tWk4#||a`@zico641A z=wDK!HETILJvqFcpi$6$qwM{o#z94{$>q;N(bxOR&CImHJ=WuUl^)UyEPjcdcrYenWVMUH9DmTLO~pB2iewvC{e`q4)e^ zSnCHH-AO)9HOZ2pXWDA!D0Y_R_Vn|fljCn=**sG=AvH18hW{H-JJL(hOU`^28GA3? zdSsdjDwE_F4to=XV^P_E?k`|EN=b$TTi(3K1n@Rc1Ue}mQEX5Ax~=EYcY{G$UgqB# zYt47sx6}2fr@)APQQaq!;bvFas2D}OUndA3BI@QRe_3!?LacYd?S z?-#?Fvyx`rynfx{Ok+JS)q^P90+_SIPNNTDq5Km5QGlQ%d+9FpJhXTCnsE!9fDAs?q9Ch_pG=G4we4 z*~P^lZs{-YHR(YYEzefXKm(qgvM|*mDl1q{zaX0O$Tbd!G&@XZn;$gE$5RyukB2<4 zZV(Tv16*Ux-k_VF;DXdS>CjPWFEnj}(PM?qtr`zUH{bmnoy_9#g>pyqBX*6R)q3f2 zti>XXR;quatQ}WMp{<&g*UA@d>Efq^F8VSDpD5b3Csc&T@Uw7K!U| zmGd_2r>vXZ*DWoP=#4Md@$abie`%jNhK+J_wr6)6jG=t4f*xst1WN7eeN?U5>Y>0@ z8j^HN5pYRKte?L_tRnft;O}NtlU{H8wLy4UIArq3@eZ(UXnCR4V@Jlf+wQX!suCnP znu(sWu}PwTKbJy^k~&m$8b0{OC<%VDNpO24_9pxKHK!r7bm(?GoDs;$ zeuL3V3D%S*;l5}yo@vS`- z_7*ka+(W#>-NW9Ll&LszB6)ujcxc`As1i@4;f1v0bQ6C{WoRA8N{pc!Dro{f=Afho zBo(sRN0nh%Abg&ZuAw5CA;JZhENlhg#FK}#O%2#y)G4YJ zzO=whR4pWRj$DQ&TR`aqf-6L9j!^{#d=pH8k4nI<5M9Rw`AEnDLQJ0_06Ye$!a5a{ zcdL<@VOmId7Amj`^92uNMlBJ#&sZRb0&xCU3^w0h1^6<_7Xuee7BG$yWEy59_!{BC3Cj#Qc}*%aw_~EQi?6WdJG} z2P_-;?pHR;`6}wHToI>39|d4Ny7B2K>I^^vqgTksF40RP$+Zpx0$84MB9Lt|1GsJF z+SN}qu`d(+kZ^BWdyxCqvS{>n!~4%5%M>n{_L;kjf0LgH@F9HTW9eJ4AoQ@KIqWsU z(~}IjMwSvkJTUKAL7)e+aaXpV9`uv7)oQqGhBn*Zy1}XKdQ|`yv^tu1wiMU~zNv>h z01Z^MYh)*|wO+`Fn#61y@;R}vatl*S^2S2&GP)%YwcCK4m`cJyuDxE=5nYv8<4ye$ z2+duvMrWCUNppj0|6>>G4PbBPDh0d>Plzg{InE(5N53gTG|0uN5#gy=`?O*R=yrPJ z{kh!WN<@Z?Ehn-?8B>5ZI3_vbN-X3m9}o=@MefqH;6s?nvv8TnH`s_%{uwXGzQ!K8 zL#L2&xvJwi#Cotf3`8p=2c|Fbtc&e;23WMk#B9Ulg?=k&L3wYS5a$T5Np+Qm&Wh1r zfNsO&^Z!=m{y$ky|5N&Jq;Iaj_xt?~fba_dfc*o;{on5WU$EW(RL?BTtSs#R7jGvc z2jhRPuDJGs)=^$>zx9bj!1EVC5)!cs6~IF#5P$(xBzaI1fs%ni!`1aS1{pvAV$z9y z=87=SK9}K+=;mE4U#0TsX7f`mnrT`Lja~GVOZV9LDam&6>E`8H=H@Lmi)k&*j(6*A ze%T=ebjrf?9NFzwCt3G2yKe4zef{le1{OpDK@|1!&kMhjeID6*uCC<=SEuW@b=(x- zM|L52Kn);B9duU{w>5i}UeWUbI9O#Se)Aq>;P zkYnJb-Hv(O&DjDtg%M=2xwv+GGX4GJ=Yl*y*^>Wa4}jYg^9e^l2->RzLY|77=~=8r z8a&DbNXxg6#>@`UH{W+vSkm z*}SBd%?ZoP-AFknX2vL)QoSI~WcF4GiS-gnJ}+cWbHLBm)iqORX97}}x+yi1XI9#2XMe;2)I2;Ks0NmT-ZE%i!;?Mx}a6h^Lkjdf^y2U-Yo>2ogT$C2=&e z!Mv+ikg*U!2QU_8<0pmD0thL+#Sl427DBz~zqbS2d{Rt=C_Cdbisc6?Bwq_TowbXX zCsY)NTbV$|p|S>IO?Vh+-dR6n@gh|Ox{r)vxf5rFJ2`p7u3k|?=zN#Z>~awMBsvF? z8KSlIjePk-=ZCmlIKCN7lSt%%9wbUJ9GF>SZ^$w(G_FKJ$b?xk zr12tY22?3gaLfRSJ$0H-R2k2tl3wwRJsRQkc)es(9|fd6B3|B{d~!L{Gm`3)%ciJb z71JdgZ>*U|RBx=~%l2gY{4sn#mbbhEpO$Z@r1zb_SG))8XI-Hv&cDcCmoLBRDDS^8 zR0Lt3$4_|u&I1BRNWnv`B{BsX1hleAfVCco{YV)8kV(@YPibW=GBXZ`?RutLGkGm& z&iAqTAFXd*^sxhg@ zDpydJ!mg_Jx2MoVvG}nx*0?%_O}!+Km(o4Y#|yafnxdtY6Kuv$r6boxKXvuW(m80D zP%DI<=v$t*JFp+H{=sobP;t${6oiu{4#dQQ6Cxl9&W0jBX@EmQBnVjl6yxMpBH)Yy zSHy70v zX&$tyUCkUV#I6LcdN=!9$nB?&^rs=Vv}n+d$PTRS?(N6zEjol#nV!U{8y+{Q@2!vb zR__yD-adjpsy;?N)V>tHEWhSIC^o7Z&1#X&10Cxde{q{)G-5U6wdgf!H3ZT4TX&k2v>P2I6dJf#BZV&5 zk4qHJi&B#4+Q88A1Q#7-(-E7>|YC2bqbl}_tfRp zRn*nbsdA`rXt_1rsq7CASOyl{u zR$VT^UWhq~JCQr1JE=QKd~{@T*(nqo7f`@7X*pFwSTHXt7qsqI`!!@pvrK`gA>~NmPTWY?k4|qPMOMG8xAvX1MpOkFry0HXGHY!%w zIHHh}DUoh%X4%vAU3rQ1km;&k>&%)&vWipve&O!ztnMx=FZ{RT_o@SZ@;hPxr-6-g z(b959_7xMHy{M{TCBw3%4BArRhM?Pt(q!meN=m>dLtdCbYA;%CF=>7-AD!YG?7<8~ zQs)7`UMuI{?(Rgmj z-tB@0st6T+Kyhf!K@+MtFQg^+>`!;c>(I+YsqPI+CU@`F0sqon}%WkQIqNu(^9|VK9PtFy_oR(}fEPTPlS~5?=*D1yu#(1S%^EE0#0M zh04-!nWf^G&Oy|p*uVl2Fbi6ZsKt0eQwj=Ij)!gYX=WH)>iU((d-=rm?o(CC6!8!I zj<|8xeI-8(?DxI;ZspFxU8C>wFL!|`th*cg(LP5(K=UX@8n0MKA0D}+AWX!g!Id`0 zC)#*V_&PhJ4{!lUz@1aM7S&uysWwPcxLm30r+gw?2(ik7e2)7O~uwvqgP3B-<>4f?FPyfrr0<^j*A?!}Q?ZvO{_1sE*uV znR-!7V))7k%BYJNhY^?&n9-bAj#MXxQ_UFnE8`qIIjl&ac7=O^DNu4MV-gg}K*0i_ zV1B1NNIOUe6eKbz7eVg>Qu%-WIfoH$&|@G+gBJ%Xg~n*9#zm44L|Z9Dlh`JZR1upw zE0`@9EJ!XSmd4AV71awAoFY3QcNj54OJ`@|Cs2yO1`tStixBa_?E;RFBD17fx?OiY?_op=Wcw7)6N`hR;2E#N+ zp!_QD8zG>8S)%fnPqv7lVq})8+u3VJS9!WCou<*jE#SVEq~R}HZFJtfp8NKn@!1SI z!$5-J18Oh};JfUo7^NW3DTGkqK}00HhG-g=A;v{G1dKW4y)#M8Ip^xK$SIKIh!6$y zV0RtHgK#KCeWYWOiR67uwtMle!3@`%bk@}N&n0_&(C;1sYDsl@Go~v{ zF8|{tyhFwdQd%oX-67*1ZS31`Ll5J0JTORm2p zy+CHZ6s1U|n5CpmDMU$3Ii@5_sy)qt7F33r9haD)a42;a@&I!0J3Ls^S&C97$OI%I z9K*_yF#^LninN5t)KSK4N`FdXDn2cd5#6w6h#)hv9g=R}Q-~>F$WVD($)LU*NtH{r zr$Wg@ol})tLz1{)0Ehr(saBr_e_l5%4~?@|6sx_jdcOpXIf?^3(Yt#v~qN1ojxbp1}fIjV6O8)Z(N z32liB%2YdGMSs2S`Q$dr=t?NQe)7}6(s1|4W0gI;vcrhL%*#$1BZ@{dGAt8^8ye_0 zfWC3BOoJO@NX2BP{KLPD7_tn+sP^YFavv7k3d9O4ncD~l#aVB|aWUyXvkR-=qu+n! zA7K{KU2EZYh{psj_Oeo&{Tb@~7x`C_hahwN&nEeoPlEnn8N`3Fwah`ZE7qi28r|Au376^q#>>k_AeVO0-lD8VJJ~aFqhX9YCW{l6X8xW$co!)FRZP%SMKsDl=I# z(TA7>g!9F})~>eJ9-(DjL)uE@>S$wnqjw{I6Tg+%j_y!1sPUxy{t2|DE&l zms2wbcvHALjrT(WqwadwLt?Y}^;07xRJdxU& zQk;;QFsr7k8wp;wT&rAHy{^H+_)v0nB0ss1I=1Fd^TWY}C3SuY2mvD|cK9DCm}-iA zait_xWgR2x3kocX4OOSMGvWF7f=Q9FxdT^v zzHb_~b&cTVf=TFy=dp%1ofEDO$ORBI>on6B33%$Vjriz#!g zkdfCqD<`=oRVWwZ?)|p%-x9F)ouM6!C}UmxNQ*=?^kMf~riu_YrKZG{NK8sm%QY4| z7r_=?OL1qp5M6t19J3TZUHEO8~sTZn?HOd-mPj#dO z5Bk;mNoA|aJm@8gaxFru)+zAE4AZHOH9JIh3HGS(P~s=Wj>V42P0)|kj>WGXvl9l$ z(M6)#Df9)QSaui>_zxzTEu=rlB$IWHn{ViE*kUn9XO_sQ%0Rfy5%SZ;@dI-Cf6!zp zPGu#aBqM-|>b|B;i0$G8Q^awqoqTw-sw-|YHbD*WzXS5ZoL&AieX%>|Vm9zPo_j+8 zr*3^(Iyw@-!KAlTEvCTdp8Ij=&D7skg>cBnH5$VU)N|zU#&{NtPznlzNx~=|AWwm@ z3cf=ifRXEC94BhABM^UMUaYv@uubQAMP0($%#g2frly6`-{z)JQwV znwl$S-T8-XaaEsg+-zlSMqS%{HlD65I^5-h^_g5X&kQqZaHC=`Kyhmkld_+R8Nd~V zy@NNlSh#vu%81Oc#KPKAcGLt$iL7La#!592XRhF^K(wKa37ex}^^ox=v$C|$qGfM# zrP$EGVcq3Mxyu$}alW>)&zj58TU~p+I(EtI9^};%8+=`d-;`UM-K5`~xBGP4j=2}qrWdVQMmO1-h+TT%5kSg zp5$R>R7y?HRZlmcbuzgb+sfrk;mqO8c4tLSY7=GB&zDE3r=Zb@99Gm{w>ocv(GaB( zqamk7r%|P$h)}c95DaK_?@L)an6jmDZ|7)QkQYn#`RC2!S?e2DSGnYC( zo}S(NfqMRok3w<#6ZP@0siuvlkK+`h1~ws##lT1sH5y1j*@>oQCj2r4IG{4B_ zCbhoRu-bbZZQ{@VOnVST9q{fJKF@bjOI6u{3#nq(O>j(o&wD5Qq* zBDdgxNdy4ed^`a+Y)Y-N5QLycem9`#03I&df}*{=Gm2Q=mmlsQ6NjdoHpU3yV znjH>+l!))zEnic%xX-&psA9b$9=*)O@?_P!k593ys)@A5E{0jXG<2hEuBJwAGric$ z1g|^5d_2HD8M0q7m&HT9)5$AXT14S{5k^FC7FL*9;$(_;p`@gQB8ds9ia7>S=i->+ z>!}VL$HEiuNt2WmrzKl{4yb^`PwKiI@yP->b-1IG0K_A~K$)1@ncIIxRt0D)f)vh^0q3j72wOn z7sMBd7tj~f7DwV2nHCY(uXK0#&JY{%3#QV&uhBicMr`oiyj)JAx6c`^FsZ!Wbpq8k z9B)tACJSso#6kHAsY53CkL*dXwv5gAom(p&$Cq%5+`X}H$aUprg0fE^NNcp=t=^Dj z zFL5B{Uw1N0{(E(N8{pAIE7BsOi5Ql_Cm$lt4sG%vgA|ZE-ylCk@7r>muh?sV#V21& zBK`}Pvriw%R=88O=mJMFkcET#M1&KOLtdUrJ$9`LqVHJg#QyFk=mMz0q1pyXI_NGq zDQSkUTk71uplj{^ZM?&K8v%3={F$oqCL<_ z!pO1Gq3&W`CkGj&qtdjA{0?Wf0t?-P;v!G%#aqeTSm$$q9c^P`6i0xSkr%GFSpJ4v zn}u8|7-Wj@On@K3Y)v6Hv_K)!0l7L75gI*i<8-A?H&fIqjpY6;VVgX8@OdF$jlsJF zy~Pk$0Je`jT<&eZ1S7(_15z+3B9=!t39AU(#9T$;MB#-0L2_q$5Ijm2FX|i1jIRO` zP|pBZ6N}REy}a@q5g0trmdRm-1Rs0-z4}dsK4p%*R=;)6Pgr^2asz$r@}Z)^vNjLN z|Mn;47~M33M|mjd>8xfKBmaGmP1LtM%_-=)-^cE&istHO5N$5_uA{)2 zC$=XfygAgaF)88n9IZw{J^^P|nWzT%Bhh^W{TO`OJqW zdFiY(ii&mfq9tt_`h7Z&;^iq34~6AKI>o@GqA+T;ucZuF(kPG-8_xl&{uua zhJ8fXIK~*`i(6zd*z~CrD7N5e`#z^te0w)$| z@a9cN3k0{sWI&Wq zF|3IwvP`f^eTfnaB|0o7Og4fptR^f@A1ano|vc|$s0H8sgBs6|Np=`Qw43TKb?3CL8a57;i6M$2jv10@r6T;<+`!)wZYG+kIK_`Oi^BQCJsI${u$+FX{ z3O7CDx8@hUD5sJ6&Xg!coFwO!GP=iDRF@>SE4iN&rAsM*g`%CdA1jH1)I-9*NOFO~ zULu5~FrhF(DIqe!5~+oiAk+KIg3>=~_?rfwHL}HwkXX__P9@P|1;pOfuIK13`}y{r zv1RaIrS9_QZkqnxSER)EJo8G(dN;j%b1{jYWZN@TJ&**Fbf}C+FV-@=wX}d3vrkJ- z_*`G48|2nj}_8Lw>V@dc-+M>{U#EHJDH* zBU-QYAJKck(WI=v>jGYC2o^=Vc+_zOY@XxqWD_*WA-WQ|5JQx1g_|&fxpcQS1>i+! zKn{8^#slY2!t=0w&=_KZPe;3dc7IXilYd`zJ~+0eQ+(b^(EE~qk=)}a8*zFR1&=}K z;)4ornf_718X!eKDxSiyf(yjaX}?$N}RQzQZRZDo^^^{^e?MJzCbJ zm%YVwx51hhyw2JLe)9aNC-1cWkCKy*hvt8AQ!@mTx?9#7lwIR zR!=hR58>a{)0n@@H(Ehw=f<4%q01Jrh7gwuZ-nrs&3q=c&&w{U&-RBwbW4@I$Ck)A z!~A`G>HQ7g_BBIKKkD6<@#ysZB1S*=9{CkxvQJI@b7*_#QGT4Xbop#c9P8fg=$rOQ z9#D6D5}BQy z1W^!(mjD2~w?!HT>+xa!%X-DKnnUK<>GQft*T8=Dwgvs;tV93K^$deRN4)zubGRgs zr!M^`+|P;TB^RUTk$*;ZLGUXJfTN0kN)Yot8~nB;0JpNP|gEdZ~JTgcn| zCM0zx9lPjhExA|B2V0V~AxbY-;SoQm| zijpW~yFD$B_y)vQ8zcq(G_`c?c%2qt;*3u`Cl~WLOi#RHzz7LwIG@> zFIVVMEpx2!9NF*(|GhRUe#d-5ob%)d+Bq|F{B`2|@U;i|0VkQD?v^3&@(TM2_aY&W z@M*p5&I#IC;3-K6D5lYPXejjq@f0#={!XK#}I11hS=>xVEM=&5c|7$xXAX?+|O z#3KaqnVdO}RW^;WgPA;y_2iFZ`?|>u1AN+RI((*F+H59$CSnKkF2my)9N#mE_MI9n zuS8%XOOhApfK^-(P;2o_H)(sYex!H;#k|A=X);ph5al}IIz47$lvD|+DqxFrjrgF< z9LsnRnwVv^VCAw#6Y9qFhU|5oi?FA#r=q8Tr$}T$^GgX@pKi-gD(B@Sh`AZ(Uddjr z=v)Il(O7)ONKWTVe*>y=8bejll1;)XHn)t*^=Xb}hUc+mdNJ7Wqoh)^jCE|0 zQF`*p09(y3c*j3Zlql9cULWd`8YsQ=X`>p5QT^Gv1mg~cC{UqjBeWjL(?uk~5;rfrU;p9lF41H$@%oBME4YUVukci;cApuPmT&y8B_S3!d zplN3Xd<`D1ws&2}<<(tB;73TdbFG_d?8*}CKa3W8Ywo6Yx~UBU#kYx)!19ePpEmbG zk3}ipNJejkH^}D{tq1#Bd(0asm3uD3htVI4mB()jOn~(=?lVn5qH&PG>CeJVPXSyW zbGuB9jyjcC_@;9Fj#M$i4TJGJI};gI zg~1sxp_vsP=NZG0@sgW~?Zj<4Ur*O$Y27^BdwiM;wOVk@m6e#LnhI*zA(%R)r>3J@ zg-c!Zvo5oDUZC*YDiV82h~zOSnrT!>Y8L7Tm89Cb>N7RQI)mMaL2B75j^2Mw;3U(i z>?%PlkVW|6pg?RHA;C!{;)^Bf3sehirOqX=CDBE=65Q!7gx63Tv%l^e(=2rgl5rtU z1f!_XR9N^c%J)8|XJh~uFY{hb{144@Il#f8E1lj#DwlDy-9PgCFzOz8cX~3oVXJ;q z&V42`wOigc+zB=7(rj+0WYv{w>jCu#ZeHj-wLmTvB#Pns2KT9UZ{WzKiuX#L@f?#t zk4*t93uqkyJJPNTflmK#S!q>LGjcW3E#%yZ zt|Yf|cv5(BIkG(&QESN!#x+DsWk(t*`*-te>8aYI&(p`dzCD*)Ig*!kwVrkkb$cSg zwyzyJn^cJISJb?k_Z=&;R?X!G|hfuU=XQ zS4d$DM)(lW0$4D+=)A&vQbvTz7^)^yL@2{PjFdpcL$UY#!eF=yO*Uk&xs*rnTEMXs2A=w}+K!)OwoFr#~{ za5kgeX60Yy_cc|I5 z8hve3g&?azG2{+N8DM77B+?zTeK}GRUMH2GF)TsEjK(7Q^I)QYRrec|F<7xVVS&LC zhY*J(hCqi{akT3VZJDyLhs%e_?$s#`g8dY>*{g`jyfG;ICI+jezofJ z?C*SL<@yXA4Bofh*M0#*F1v(76=lVH)x@E>s(DQx)#U1Zht|N=*uGDDq+iHd+oRJ) z*M?6`ngj22Zg-R*LC^}sAx6v9x0YBx|7d*}=PhOxE(L{Fs^WwMPJkIMY$xR>LL`oI z2J#*t>94(qa)oe(9tAl9x)@Ligdjmfc#=7BC4}OzB@)ZdXpbP*5mFIqonBaI?Xw_T zz3ra2PaZmF~0NXl?ILezHSe3i=u~=ul`@W}b^ys<^k}>e56H@~6L<{?r zHDg3mgWUf@W;8G54U4o%_`xPfvXdVkmZ{OSxbYg*lJ?(mBZKEvC!4BK-PG` zwf=+^cb8hyTUk}JsNzyp7`@XebL!K7{)w@3`L;E9ML`=JyA*cB(seN7ed#Jkv9mm-nHy zurO2yVhB8Ldo&h)p;yH#Op}Or3?Bpk?6B3|&95u)rIudb=jI>P`g?WfHlCOFlP7h; zCD+mQ-(MW;cH71cpOx*pymGT~*la6cCo}3uu7lk5ugVS3mV>_Q-{l)fIh73C*w;%{LOtmG87b#nqJtv#q%`nAW<@6Bn^2maGv3 z{4IF0Ew_#hGO1I1+9>xgK@fkKEL@l}!qU*`_sG=)q=_dJlP9ej;MV=DabWD4-AknaT8~inOsK3uk>D+4W~Gm zr?o%@(CDVilC8wA_c*UNE~V<=)NwtkN7aBB{*WdqwqoB zIM94F+dgPxKt+pZeJU@9wf%hHYHmMP8oRupq21qkzpr^vwOinKNNdv{5q@g?FNk&} zclyP{CgE%SyikYm#zf|==mcpW%({Zf1%0XZ3V$#FbVKth0t5x~Z4}ffl!=N9AIc>s zWI4-mmwYUuuu4nHD^ald5eoY3448NoN3c-Pm)+v36Gkfmz!qk!Zq3|kC{MX$ZDlsc z?x0l3swHcm@XDWcM**+{w7LQaZoeT7wgmRbQ{6^QnLbnw(r}T#?RKXh)9-Rg#aU#} z>LJgOpRl}hdbDg8UC+RuKA%FL$)8T2Q=i9zp4gwf^agpVg8i+jqzH_AsgR?a@v6gC z{yDFx3)sb6Md3wbh4I6AF}(>tBv}?bo~F&9e1-nNj?-VOV5R747-Z1V@>MfU=bT7y z#<%cU(^&tp=DN1fxJyAC5Sj{@F1UNwK(R)_t=jy4zR-5fTyfIbmd%i1d(FtGz1dJ> ze5V)yL?g=hAvWEWm8LiOJNK(wfV?w zxCqVMEb8U{mwPu*c(;=O`?FhV!3?p5ut<&aBV!b)?ENP{$~KNbH=MuDG3DB#@J5U% z#h`#lA=6BvN_;D8EuABcBf*X2-sm8Bh&o(6BAgvLFn3PqFP4Xja81NvCY~v&s!q-3 zu2qkZchaAu*D@&V2QE=!iSN{3Pn}0`+V>Q6R`YJ3YICV_m(;*rse)K=eE>{!Z?Z8n zkOZ%JD^-+!03t2`V7rD?x?u)15i16M{(TLQv@e3p}c?DCdx@k?W8y=_k^fB=u`J7rpL z5RVw%Ms53deF46LZfJwYbUze4rTFe#Wj=FxWmn>sw+^rQ@*VYVu(!7IJ*5`*x=GIq zw>3ZdEo*zc&X#X`SRM|3QpFHxm(tt8^#1sFMEkUVr()(&hGS?Qc&@kQl6c?kAbFqq zU`y%adm4t1a5F(c`xM@fEYx(IKVpB)c8eqVViCHo%jT|&-mE{8C%EZ{Mcw!Eu?Vvz zHV+Q^@O^!J)gJH^?|yVYVfQKh$=4B_=@P16Mqa>j0I%t4QL6*ny^Cy`-OR{LjM7X= z%_su>IWaV%ZO`HT(YL+CdiJBS(LN#k=ycsJiXQ8YHsga>K}LQdeGTOI&uY2pBqjN7 z(-d4>y4%vGx6ay>A}s`n?HM@ErY3*qNp}TZg@je$EsjBGnDr1X?A2n<4{r}#$`kD# z0nKDqR1E2P6%yqK&A>q%*AI5;QW^}2Otx^W!8FxM)XJucHSAplxg|q>rURL!`gZLp zti8}$TypYIH?jBdh__!qC;Jr`^e{!_3NoJBTx5)-SdrWxHO{tF(6DC`K84#HwNm%A+B&Y94~Oi9X8MO+6`K{!$`Txe?q z2z`cQtu^L%V(#rcno+GOSI|ox-$TcIeza0;$yM>Zc$7Qx-9p6SVUqQydPm+0A%ZD# zwKTzWbUWl3xANQh5Ms4qcXR(IMd1Odb68+^0WdYG!1mlI<3gI5nOXjJ<7^SXi#zcC z9!7io8DJoO_`tSn%e19WH=CbtiB`K*e`JpVBFTsNo$TW{M~DFOOMF17zVeqno@Bt6 z_447DE>q-I_4l*p!87;Ob1-Bua*rk8`-aXF|MRtJpk;g0< z-eh8b$MoiXoteWo^jpL?9y-Ry={DN4bq*sfs&4F22F05UFxyuumNxV^|<^&<6RY57_u6&6#0j7{}n2oNVi_6o|cjJ zzH|b2l4Y_d110zA@mOT?mHs#M=x1jZwlD~^a!=~n=E3>+8Q>8=*y46anbNvse{Qk!S!hgSBCkLYTNDO<~v zwdsZS_6=TaXXyC!4Bgn&^vw8-L6x>P4Bm1 zwZ*v*^4)8#fuLxW!JIOiSnepO;q&7Qn#uO>4_lMSQC{hj52u{Rj=*@Y{U za~4dRgR2~$(&EB3#4)QBjg1`;{M(_2tJtreR4y>%^09^EliQxCtz2he?71sf+DCAL!kM&`Dn%MLtA=^Kboql zlx1olX;Uy|t51yix$dxCmdD12R`+)fO>8CgU8n}{0STABFu?8&? zF;Q@s3rv!4ANIp@SLeXq=RmtHZ|&>A8W-@z8w>!-7Z>h5vb5sqZO{Y9*XE~AFdS*{ zjEdIT@20})-9-P=yO)=a&yRbHx5XA-@F-AOTwL5cK(gXu*!H|iSj&>h<;8R7{sn6W zch}a|(dAnQH?`{iAcjwXg2LeQGe?fQzw8GEh458SV_P$A9%%xlmDAy?kAC`a{s)+` z$Y~a)&b!fM{>T{Xn+vPEzzwb)9_r9`z{TEpR&fNm4;Bo_3|R0c1bWd|Q~a>fSHaMj zFfO1@bJsSm&TVbUdLny8v&$FPVy=Mw+CtLMX(gSd$lZfQLTYO~H$EeWH$cd^g6N$* zF*SgpE-g=ov2Ws0zsl9*{Imwx3Y~Fr1R3=ZCw$;o**5|VxxCUe z86aoZj!v8!CpShLNGXP)pfkK@OpjSf17+?AHNnRY3;YDX*#$|}=AqU0GSj5MN8u!p&XWf)fQtUwd+WZz18*UON4DyIO~u!6 zB);{Ms%r1E>>xbKTi4jAmwWDH-dm&-9eAi3d>){&nZl}D zK#t=mtwG4pd*5j2i2nQhyay2#Lb^du?+KPCh~ihmA%*8rOU;qm%TYFoiqOM@)Fbbr-~OVXxpu!SYm32|{G4 zY8LnM0wT*Od$(n(UI&r1>gMm%reMH76wtJxJr>7PIdp)-qjYFjk7yN7<+r6%X#0m^VOA4vt8T802h%@m#26-Ra()?5a(tQZZHAQd&=lGzCN`d)35^6s z3|bhxipxkaPnyjhNDu=e1{EQOaG;)&hhk?R171H?%2-R!(v-u!;A|28)u@I42c*~T z>g=>IdvSAnArUga3)hhINp&M$u5KoR@(fha^HU3A$_Y4r5A$)b6ZhM02|jM%_{`!} zk8R%D4DcwMKn}pbiUfXq$0jzgH?$D5pbI+S*>95ZpP-~q zO&n*uu3ZYe!PN+mz)>EGf6#oSouHh2AHQ^ARJ&p{fpzJh)$c6(c4>Gn3bgHX&0oP6PK@Z#AVQT^Z?u62yg)eNomrsr0m-e)$P ztfbakpgq0-v*iGx@N2!zKtU*Y8Mu+5iE$&r9LNBoG%J1OvvclLbx3X*#&@r!}1hu%LyqvV!Pi2ff=?9rsW~5|osQp*OSO{!u2>_ir zEriR`d|lLXI|N2}pG>bkreCPRPcrS_vGOx7sjHWl)d>7K(`-la$`n*_6 z5Ew+f*H3eTpc!Ixft=*kLs9`Us_%M1GQm#Tz&L~-S*$87A>ta^D|%=G>sS6R6C+Jr zvH`Y>2it)k+)E%3E~vta(JMlCw5$>6p>$*#)-_FOz#^{@GoeLKBl%jDQK0d0RZ*bP zgGJ`z(M1gB!qM-bGY){q0x?Al$3igwTft(97{*6u<%Qa!K=XCjdkf1mEW6^RbU}&a z<8c!nczZfSjC@iW5UYPv*dG-OA{agp11J0!!v2NNfH5&p;!~bS{eXC&Ehv%rux%jOJWx*m`RoRXWz|s>0SZu%cTD=^*kt_^qdu**NLAi zco%%1C3jTQ0FGG>;h#$M*oxrUZDHJ~vmk11H|v~$;LF+p%Wd13zc}7uRMCNcc&2u>V~uy=Et~Z$4_TK%Z>{Zi0#`+-J@(sh z7yI-oaNcgH3b1zA{Yh}tm>!u`L#O=S)F%oY7_5JF$zwBR(+DO6SC7lh2e};WlbQxR z(X}v#8e8-_PP%)bCy{Vr`)Z*_%T(N)gT$La7cEHtC7GZ0EKtkk;3^_)3z3J0XeFJ{ zJKJ{6iTu7g9XM_%hq+U;N91Zh&BB;!KnLc?UF>@As{Yl5mCtt`eCNz=Ia);UyO#hG z&;BLxv@oDw{Q+X$Xnf)=&3fO)dF9bVTzlnFjc7&FvU@?x?D)&>onL02!n{)!^0Bmj z&EGy&oMXQ6x()Buxs5nQuXJ@RMnczbSRS~0R`uwg1f57y&<*Q!Gap+V@cHWCciFgr z6(04zys)a9b=k%s3j4uwp7-6~0$tO)n<3>Ur^e0~esbJx+$Y5gK*aAfVMYwM%wwA# zc4V&hTCMg;u7*FJb-itNPmnLHDS|04{(gTn7@Wh%#OBmo`O$IJpu}aXSXvEhulpCA z51O+DzTDfwIEUQ-B!nd{Dtm_Qx`I>K+o^gmIMb@Z@nmgt*VBWK08D^d~qOV;;1xe1o8zHF?ZTQ472(pM-y8mD-UB4%>4;$ zS&wuxkYK)FP=b9K&u2=B3)OIiH$@w0Xo!w35(-4z$(XIJ7Lda)>=I;`(l5~hJ5uj; zNBy#wzP7bDpy0Z*;4ahn+PXjA<)qP`wSXE2QBZ`M+YDaABaT+p73CJKw-a#qM=IM? zAqTp7$3+&6R!#Ct+dJ~X2Hvzkht%j2c1`F~NW#dRb5^ro@wL&x$sp6HP);|_$X!zH z{Y5{Ut4@YyX8%v@qmCa5Lr`~eEKYt3o-}>NCngU2N8QTX+G_u~LA}_MJw?{@Ot6{3 z`PD9*YeT~cr)585ePpAyYuI=DzK$&d?c;s?=?-$;#t-Sy4cq`5omW>A*qWLGRC^hY zgB9!-Ti-3&zd{7jGvFCja-tA8y0aUen+3w^BW4jWF`QT)7xc1m-7k|=!G`1v{+tF^ zo80f5!zpcDv}R*$B1f#I`|YEhJCw+cJkF@t&0g64-q#$oW0U>DDd*JQfq&%Vp8ON) z6>`2t&a6+BiXuJ~^{yOz7cHn~JGiItW&j876erhhp9)%3^k&LjSZJZ!j-gujU6bvB zXeR@xcBK5K*gAYHry5ItA<#+&UeNn`)NZ60N5DZGxRlrV+NZ=-?5X2n!PKjr7ca-E zlOsiFX*K9+ynC#xA+_b{pYq&K65_pg@!V=0xQo%Oht~!(ZWPr!*J)x5c2(oL!qY>` zQ6N~_lqbQb4?XHJ2)nfqW)*n$7G?zB&U&pALoDu$(FAD2y+E44RPMlY+#${maMNjC zFLc|{E|Y3C8`-XfL9_Wl&TGgcMlnBZu|2HJa&FG2HQctH*z2uu1q*EQase9d9rW$3 zORtd2V>5ej^XO&CStK^R3+>lbB{bFYB!Q=Oi1s`@Rg+9Rk&^x${}?HBqX-RYDfXAz z_l~IOT$*k;Sx1^%9vp2D7y_u%dL0ThJP(2k=o&$_sf}lTlIvl%j=RNopMXNZ*EYDTq=xEd}Fx$)sF-v?HF9aCs?O)bYS=Znaw*fIv3 zHY(Q;H(dN+wON=Nj&;0&K5u)_$QW&$ij3NY)DhQ5j-A1246Wo~q81lv%R29ewbEQo za^%aHW-2za+dV3OJ*(59G}!I<@%)FEyq>JY&VkeLy(upGKpokF?ljjP=EZ4=glSBv z>7D3C9?$CBOU1T2o|eO9H|vMXdz`!W#Adk`Vzj97TV2mi&hd~MWGYj%$xaR<9zQWS zy71~QoE&5C(IFAoS0T3v@_S@@F>c@4!M*dni-6=9aK|>_RSUYPoX@}pN4{0W3vYff zm}z%t?+&M@5pnl7YT1Hia@&{JeSs?S!ix+)repm4n$Pr7a*-wH@eQpOUIJj$`saL@O z&){vhC}O{-jr$HfxX~y3wCrn(C&O=!0D~(rbx$x;M~a1KFk@2`{1(Fxu=ciHOoRQ% zd3^5O(nLo)l%C$APr(KWyW9OlcX&(o6NFB8h644d7`2KNL0L?AZP0pV&wA5)Hv3+h z$&bLuOM4g|qf{ac$eCIci{Mwy`@#>s-`Ce}-ij1+h$SXgy>?iCi<2L2=V}b(PGIju zye{7b)S_a*x20j{GwvHrLi!;t==#Tl9_q~9_Zpmv9?39^ybh={F)e}$>ie1buNyU< zn|pSIOnoifpQ?z;@rylV?5zAB9m<cf>v|IRnup6E2R zlm)Oh-d+oezkl6Ca+p-;Nc(_4%TZ5i1|A7NnCpt>>}C9B9AXryQxG%S0dMJf!%4M6 zYk47Wn;BxZZJP{o)GaI-;E(S(C#5h;{FXta6d-p7t%iuH{A$3YMQB@iT#Ud@5bl*C zZpA8X`c%~?*z7fG2GfFbNh1?UrN9$ylvasFn5TChGoF+@E=D`BL;V{{_Dhb6wfL zgcWdXSedry;Svua)v_&!dc&#G7*UTwm7++3UV%sWe$=XSXmO||6;LqL8D-6alLErp z4zf0{S7tMer5-G-Qp0}+q)alT-yT!=F^a>z_wY(+9FPH=5Immrgyy@^Cj#L{?{z5y zle))qW);)-=EuV4p^wn?{jMR3h>kVXMVxmAL}ZOs z%|%prT6e`lMD@MaIXqmj6?XDM!yO&1ynG|*{EWTfCepwQogucxj1{`I-;w0oydf?) zw7=xz)!`8ro<3X)M%g`;IGpW)ryTKZx;brtu`w6 z{qvC=mNJ@eI6ks5T5LN0qKKDULz)SQm)b*GaAJR<)!_5e_C)vZ7DBHH&HG}Dy-$c> z1_>~wFh@lY-8u->nwi--;$bl8L>H?y`msdZmn#_e3d*d%=1x4mBsS%TBg170NA-wy z!de8t>`MNb=h0uZ`u^r1{>MT7<^%8L;p1y{c7d^a6D}P{Qorz-LF7FD4VJ_Hzjpcm zx0#NS?f=Bt9{$3E_hQWT0RsGRLihc*P5+CKj+v2xf%X4K;9+23`M(IZ*WS=}%B$%o z=RFrIz|Cfa<)nlpH6%{~DOiLg{?UN`8j68S37XMy7}4CdB&4Jr?t`j*{*xuOFWqIs@Zei z{*2RHX0~|nc#qyShqruwF7#d6qh0m)e4poFqHki*&j2ABeJr6kF|`HhmhCY(xYiNq}tF^@`Js_^z}*^*j&*n zxyiKV&C;p&q$S^x1fP$+#s{;fu%YQwYqrfF(2nRBi@I~d`S0X!(j8^g!^`{K@t|vj zXojV0pf17PGd<9|Zl@@nGc{&8A$Y}(v;ASJYUMR?$s_6RzJEOR+%yW^eU7ZBvrP}P zj~CY$$aBo1ETYvjftcI7-J+nUl(+I$QR|3uC* zaNz7}qnQ$)&OWL*8-Jxgo=(mLf?0fOczjyJX8IbsUcmDAeYBjU1A072I~!x}l+{$# zfIy0IVIQuadPy4xHSdr9An?#$cAFQWvc=F{KM_HO2Vof@Q?3-j^ zmO6)I(#%v1+E*7_X;^M>3c`ZHnrv}0W#{)|u40uwe`Nma^re2JX1z-pXzd}qZvW0Y zIoQ(IKDX_q(GDuU`8tqIeTul@Q5nrpqyCgjr3u-Jl1a6A!0?&~`G}IK)6n9J%&jy% zWF2w)xjH_4mRq)rz0yh6*46kod)K|AQp?T6tXRv5RLedhWpYT0cGZ^BVVkjSJ*O$1 zq9K)8JjrA1ipY5UiY~u9>P!h>Ch*&Kz06s+qsMQbHLd>(Nd2G2$BiFFm>8M3wPu#>yJ+sg3Y&h8dnjHXx7s$A?+e_6{US(>|vt-2(G_YJZVj2li$S(d&8Wd@vW&dcGyp$KgcRd6rK)u^Zdy_ucyq?e3S>yHj-lE%=sDW!yIN+W z;|1zEqd>4)Cs(~yX@TwW`In{3Q0z@^_@jCsf46M|_VRagt2dXM{k5O|-w-o3yU)Pt zs9OTCmi8c=&IG%7A1b8!KzKXWibgdOGcXora6vq9bk@Lo(lU^-W7Oih`k0oUy4N&~ zLu)fBpIn8_c7qbMDy`zo_35uz&N6Fr<>S;_%_Vz{*>8J$Yw?xG;XZWDt`DX$6<9iN zabw*-iCS&zkg=3kH)9SnbR^L-({Aqg*f@xa%<1uV)TPNG7c`y41oBQ3T9JAsR5oZd z&2nZ#UnYN3^T;{S_w-~=fEwUI)?ax=dEL6|yi&b3eqWI3irJ;SspRU6mKGI&_6|v1 zqWldYlM=tzI&nX?(i}v1st>$N5lorW!_&sbat`7@ak-H0D zy){aknlI`RypLP4yklpvQ`u_x>uRl&~ zK_ShJ%*It9C{d=^htFp%i)e$>q*`&8S^ySkWhWHDqU8!KRCx-3(NZ1K%owVsQKr)d z;#3T>r$i9{!`NBHR1&q@7I$}dcXw#qVdL)ZH16*1H10HwySr=SH12HN-MRcXxw$#X z$;o;7l9g0eJ=9Cpsxjwiuh#=3ZKY@x^3ZhvT>h;2lUpat&|zV{J|M>A?61-~DL!si>P-vh&mD&hUlbbg(*WAtCptR#pVv*D-vS z-YBhBEJ)oLjp4&K%8%ZXc$L32CKS0D5i1 zP$lCHUC>z*6iPMJYZvh{PEf+LHb+b-E&E27Z`XM_+ii2hd_#D{g?URu5?gm)s#f)_ zG&Eu^97|y}n7mLhVy;sM80z=W9h4$WO3Vk$bvkdlaQb^Gi>3~^A-iU$j?h3xTBdS( zYvvOsUajE1boq3UI$MojN=*z_J~Hi;MgNBAIl!C>FU~B_PDQ0tijttfp13!`4_blge zcXps2mpl=n&Y!cMAi-_b9I99qk3wuQr;A3b$iMp$sw?%ETWV}KXZcFDI*$3$yk80e zdZJ@N@t~SXMZ`qS5JpZ+#DDW>$d6(C!dS+3q`#ykVuCV@4L1>&WK+~cV@n%Ob4$BO z+f0L|N6nlVmu2)cN3>L_oM=jaw;3WsCaDPIx4)Rr6uXiv3V5*d@HpSwEuNV){CefR z`VF{u+`RSNQ3l@G&k(IGxV?U#q%KddK)p`?T?KS&bu)7q1CS3C41NFG=jMQIR`aN$Q%3vhs#Rvy!K0PuNbbPjpU1OrWORTJf5Rr?48_2}%8i zxo2i8oj3FElUIQkOO-#J9Cps#VDgxRHdiyuOKlz_!o_AT8VjS)iSew7t6n1VVz;#) zUwdtyPvUN^zR>1Jz(#RaA64B215~Aker3W`Uq286K*PW~-5~=-0T*pmyguDj6EYap zxHg;rTn=wx#VecDQ#>9XV-T|q_&qMwDU#B8?)7(+Xcr6ecRH|w(Za09K~3YUB0|G^ zsFG|{>eZ;5OMQ>4JVTwqp>=>~S~hjTxP?5>Qj%>bGk6XiEw)=E898 zVdYV1)w(u07DhD)QTItr*55O$_b{l4(hOwGcdzL^3w$Avj&S^DG-DQnsb#Ao?`I?x2 zf*%QqFUz&)xYAN+Id}~PgNkX6Ps8+2i6>MPP0aZ0Ju;CNhG|d4b7t|^ z=GW819QGEEllzky-7=}3UwY%NUP)zP()e0q(+x4U(7)h8xru z=dsIs-tOdV5g-#q8fX((LZDm?#KNSK%tzD$5i+%ZrR0*x>O9NCQ&}Um@z~bYL*ac7 ze_puZI}1zsGq)x_ztR-i@d`2%_4=KE!)NB|{PeZ8mHu`g5BR?e^9U1aYqlJJc+2~E z&(y%rOye#&p6s>vfUaNGbkB4r*71)NBVVzHAx~Sz!u$QU;>}ND`pnUjJZSfj{^WZ! z+<(CO-iY?kyv$&ADiuZ5N%&~8@0NHBA|^r2h1Ov_e1{&V?+EwS zLf8E5Wf_;?+#f#=1(A^b)Vne@v-kIfB+lVBk7v&3LCD$SOh44t8peZ}%DIxtd>sWU zef^FO8^kp@OBDG{FREouL{xu$w|)Af;>I5GS=WG+eW3V-43#TWm;H&qrL z2PX%82OkHI%YHo$olA;yO{V~zkjTX$8lLC)7u^qnYlZljbIB;-8L z!bI9S8V*cN>3PV}%pWI$erMN-U)6(vhy%ZRF+od7;tQWw^Ukl1P2&KkHj9GBn{(`l zJmT#d+RqRr&D9=4!`00-8`>Hg#=n!*TY?>q0R>W9Td$>ur&W6$Zk*|R8(I1ePAy=b z-JmZ}7Y0USV4arAuM8}~%9QIy4y+92C>e3dinUbHCpR zJRGjfI^GDYbmb6TDf4pG@dnKDqaM#4^UX_Y zR#h%EpLMuFyZwoCKr?xZ?H^m*WTl-{ppbwOaZ? zbx|IG;1Ym-IBiZIGo=6=E`s?3Uy99xR?U|(+^bQ}CY^@%4sB9EvHgBe$i?R#;rH4Z zUmu`EK$Fn&^5~X$(zpiF^I|}J5PTb&R$rdF8QZ~U55WFgojE&(!8t1rH91I9kv)uv zaIPEZ?d9qoN=g;rZh;tJz!Gx=Io#;!o+Ac5YF=beFj@*TALNs#=hvVv)2Q7$=wcJy3VG!iTo2Ol3k_LGV)F|Fc+(wx)3{^n%l zhr{Bx(8k7LPj@i_&mAlCIckaDe|Vzd_*dT7BmEhJf52O18ULm0UkP?a%ga#z)jFZC zZ`sR_XMCj*bdQe9cboP#=ojT*C!H_oLC-JMhQ19}md&Yw4aJfY1314zW7}!}&x1s@hh{&ig0a z{@C7yi`fsoUci@(ryn4I{tlTvAQ^LFI`|hiHTjX}^!DMqh5Av&vgXIZ6Z1n_wp`u| z;GAM8W>h=;dVv6eQitBxs8f$U>v~&iNuS&ouVA>gnWaHWPp&HcA^Hp<(udTkI^;8e zrsjbm-%mr&vVrO`x@|gKsBzC5liv6T+HyPXa=4rEBfXQo{CCt`BAm0S211z%Und2K zzNa(zFa3+zsoGo{*o(T1c2;e)#}{J%=NNODucd|Td(Wzhy{@)tvj}(`6u5I(&(WVve9x%77xl3-#7RyK zVNVgMN-N-JoZR+XU6eOCd0cx7_n&!n=gH)x%NcuO+Ti;qY}}>IRAfmzJ7$y!6QvS+7OD0E;7O*-?dkcxq_qYTSPC27hA5skl z;3$}7$;S>`Zv+)UQ{k$21<^L1-zFrTbngb9XSsTH)hO2vK)Q|V6DCa7jFC6Ya-1W1 z1tyX3ys%)?es>365E&h+P_8Cx^UL)-K2e5d(^oI`HsE;CB5XbH%eo}zZ**s zE@qjwM}wgT0|(dUTFaK<>S%83L5}0pq!_SwXqH2Q5!s4}VaIkON3kC|$UqcH4hXYv zV`*&UFHW3T3_DPK} zBfUf)pMmAD2|mI9;K5l;8t7ZIKlcDd#8 z$m>3WA_>BuDH2Ame=}EkQm6ey*N(+v52ihD&1{g2TD0f_N#W$ zMDF3MkBnT?>BA*XqQTrO@f;a<)SbG383cL{U=~W*ME(wN#8i}yu_R70yS2jY$dYA|0-5OD2k^Pli2^X81$G3vukbm3V8mh^`XpC!AkGx|0V#RURIN z@k9(CxY(9Kj{|XE$h?dFQ_31^kDQ5E(uy2*6&%A}pim7m5Ht55Q}*Uz)5AJ6u%hXw zIwV^xxZ6+29IC3skXWBCS)Ovr*4i9|W z-Wgk86z88@%Q!D;6h`4?29#ik?07#22*YqNqV^DBdTpxuq%e%Y62FyIH*R_~sVF*# zwRa>e`@xs6zrJu3;ocwGc@}oKBxTZqPK*l98w@j(F~3TvF|Nr+{@6)zu%W^*s?JG|Z@x0%46L$hU3p$|K&>e`-58Q6-2D8Wos)4J&!w!YD&zl7Up{wGB z)^|vFg7xUHE?Pa{%5aoKg#a1OxYy{1>cYHQo5cM};;i@!P~!Wh(b||g41_pwf#|A{ zLZQzRFo&Av`pa zNnnDZ#E2Lyd`T!gB^x>cQGMzVvTzA|gzza@JV@BWR}cb)DEmnQj6To<(R`9)2+CXF z{oeD%@|4Axb(|3YtU+xcuyD++v-?=Q8(0+YTtW9j&4Fepvv=ZSx#UVPkP8G#o_Tap z{3yY`MB)R%NO#45r0HhCtC&R_iRrP%a*nZsUqFfzKt!BaBuH>Xs?gtQLBZ2TV%wX8 z*jf!E8JqMOKyOp&@7mJmxe0M;4*EhQ9)#6lYT^7qU7d!1V8MVo99x+x*@z3IN}9qO zMbuDl$|i2C0)=*wdX(fNipLp6~nGob6Nfh$w+98o_ZR4GGJ zyy`I^a*K^c$(GFfk(4NccCpei1YqV#K#foPUN~2-x*oIg&2uu$&j~Yh=DFR9;l$;0 z1mMhs)2P6SXpTo!(HrpG7LRlO==X2er#2#9UR=~YXcIOxj!v|ihJ5HxhY%uF+J(p; z9uqgX>F@(9;zg`9Gl3yomVhtNG6X>aLiZz>bL0c0x5%z-iz|-Ff5t0Th)5G3NUQ(2 zXKfn?1hf4duYwe_yLGp~_s>7tcF!7lja4jvAY!VnR)z53jy1GGXA%0?b#om>YF{?+ zUhr6A%de3lyYl3;bVGad6WsQJjtc)c$LBxKWvSk@xN`2J`zJ(C1B!leL5$kR?x^><&(RJz5@mH zkrDkv3ss#!9Ed*)& zLp#ldvVge>fS?q0pNkrBz;EeF!yJbdhXv>Ui#N#li88D;+d6(-C?^rJ+rJbIH8@~$ z^Evsw_&gn^q?h!(CXtm4*#%vSg&Oq3j)NMEsKz4}-?U=!y&t#%O^ZKS@mpM*Giv+V zL+x+-I!z+!p1GYf@>F`*2d^MO42RYf#X~@@3+KQ|XCNb1!_B;(O3;$RLwGWjW`ejV zR!a`lu%Ue+iIxf3^{@OMJ(DuAq)(avJOnxHRBOu8=cQeLTUqJ0s3NxJs?ZZ+VSQ_s zjR0fVDnFDoN;O*Kk|qdfPn71;{%fOXxw_SmKTL?>Z_Lb~yFP!IR}HX?M6gUr4~<7x zAYxcDm)N;&1FwV*gWsrkY*6xE3(E4tPE;*)S1dg3E#q955U!}&*897zlT|I?Rpo*l zA$zEIT@bw8`v`adu@-SEwV<9vMm{?iVM3>Ccbfj88rn8ZIXGXDiKvvFzdpq%3~@B} zUpYfk|LmqqNZ!@QMb%IKy(&zH-$HHM58i^iS8+nDyD@ii&^g2{!UtU!9ALQ4D$+#1 zhY2w=_CyP7R?4QTvjDkdwzOW#I_%Wy{uHZ?X0Ld?RMZQ@J|6esR{Em##0yF@JIoj* z$aGTxM78wu%vu%&euPE)hzW8nw|2K?T{8LbpZHyvK zwAj81yXOrQHY`zQdLx?){In6LHA|*td)=&bRa`NN!B1Zuk9&2BoB}t@k$EGtNL!ym zbN;M5l+r+9U>)2ZJNA0sPDWgx!WP;mr-mG(bKV{=Ts?_gB>Im6MJsj>_|GRCfvbp{ z?$An5yH6H_@@HfgdKOT((+EfET}SYm{Y{Z)JvhJ2!_|Q`t12+*u)g`RFs%XNwesab zPtq3fK7V?x3S^T2X6rqSbAG6-pFWk!`at03OQg^gEs`8hvjo)wrgxKWCf7%MlvLI1IN@faLUqDA`ya3_?K-MuSqN~Er=tOzKQObh` z0M+%+Bv+c0?W*^51B-7U1SF9?oH%aXx*Y#*7h4(GR@9E+2L&Y~e607ol=@{s!XHQmZ&CtVre$PoC!dySI!GBGO=QtemxsB? zk5gJNm=|eRp{OV2fF3JS%)*we6+?bbX{JYJ12qHR9L z$V`f(C~iinz}_hQ5Amao=rr0tE9wXeSz?o7L0#_d#^JQOh@H+knmY(amQA+0eyAH* zx8td86{ohTvM=z9sf%Q$w9!M}XqPN?QMnM(Ynd5`zyM<1Dj2!=DRgX)hg!RC#WQ{% z!YNrQU+KF!m4aX!WmSz-kzs1LB3_1B7{cVB`n$N#(z~LI=P3n)Thxq`^Dz!ym*GA# z@y|fJ$8;?f*373VOR{OT&0$f-G3Ewh$qh4zX)$dB#eQ*xA5Z_<7+D*%iVZ%pKC=TT z5j`I%wwp+N^WZw{mH$K&TcytLjtVrM*qA@Xrv{TOsajQVOQJu zg#Oskd0?s8&2!SkJ;t&PhuE{(tnfC}I-rf+IC0CtYgZ)?Cwpgsb7_Notq8Y3MHUzc zS*Wa4%a?9-W_xq0RNGXo?n)(8V=DFb$`BY3WL7M*iNA0%(YCQaHy9!_CUu%OZPQm< zeUorRmf6u)YTk_dVe_}Y61JIc$4;l_@Cf&Zv|wr~4+hl`c0xCCSU^RdA3WQ3_er~N z%}o@YRN7w&FN%{JP?Ob+>yk)M6GcyKD)>}nh4$sWC-3`Sa$5B*kSukVZ*yDn$*a@kq}61i7}pK3Rg?FAlFfl+VPqTb#nn1x*cls!wq1Qf$8TJrVsHR?<)U%s4E;<3z`Y}_*q1rIkh}xg6 z(u9gRcBPjK^G`T>OifE|*QtypFH(kgTlQRrEnzb|J>ODfd3>Il`H%KA(M`B3x`R4De2rbhu;$eV(nh z2E7)tMzVqQSz$}4zijF!#(ifxNrYTd1>}H3D%$C9AyPR`Lzg$HWX)*uHL24Br5au9 zyek3kF14K(<~dQ_v4k0C^5+)mpQR3|HhaQ*8$*EJd{5OX4p@NTUZ}tCIN|NPj-~%a z*Y!r)k;j7?l82#>HnX%n_=_@pYDa`Wuk0rum$c=(qC3hf?{TKW`8dI~8H|o+&$7&s z7vVibz9#A!(!5X&^ebUO`!fO3^H96g&=oXWbA5BZ(s@a}1{Z_>9A1g`n~YGZYoLF9 zW3)dHSTm0>-l{hDM<;Ag9-(A;@AX3xgPscY2B0R3DJ@PzjdH*39Fp*P0V!i$@~-gR zLKLp{0+zQkw1hAeb^5$y8ygvA9;w3zqzAfy_^Z1<#Px7~O(ufLbK0#w8DaxXujo5d zehBk$4Aq`PF%06A@Whc4{s%xEH>&=$pwFb;Th|a`gXNY^6-4<9{DxSzNQ5(`(?KxD^sJQ8}IN5HieDP&2EbqXnB_ za4IN$gzRJeduzy(;H2PfI+d5VvmNN8%CbQ}O;vU7q_sqsu^<9dYTN$-0tDFfJ6)pW z`=}O4&X2eo4|c=GJfi=?DsoN~n3nD48zTyV#poE5dkZ~)R`D!Zy9qQh4iIf{^;LIN ze%q7_-Ek?mEz_+_@h`r_L_?yQZF}p&X%+fZm57a_ztKYlcKk{iPW#yr$tEy$H;f!G zGA31(sw$akVV=ugB#!)5f?E3AHiM@*;YB`i!=gx_`LBH6x$8|opTCHKe)mAxd_;vm&5=0D3NA0;zyL8by-pjaBBO)i$b;zO_Aa% z%(}OdU1qwvRFP71Vw_^)rf!BxIXohOulye=@|`c5`7;f5s$9Ox?=MF}qDNlJ?Oi5; za=p{0WVv3pX?o@Kw4Wy9rWdljjR%&r^hb-ymVs%`4pH+}B`I>3mh`}Lv{G%@vR^ra z$cOLA!>d$W#pCl1^HXM)14p{6KJHxVn2l8mjzEOVjs98B#K zO|OJ<%}RP%_}hlv=59GO0gl~wk8(SLE+*|>*szkc+6 zd_K;`%SQy6{7ERb9?K^6^f#vx7fy9FO0{T^*}2$6p8Kr=o<>ZGjZkFf+DGS28g)5$=e5pU49wp5uu5I#s>kE%Yyau1OYr*%f4bg#5MJ{lW4ni2If! z72HsVkXH-tjd11h8oH@^lpl737>=8R7#_Ma^7WR#fxv#F?)iCzqu7)GfmdvVGfW?i zmG~#i-=&uIJEDM5C10*LJZ=^%`iV#W_9Sw+{mDuG`O>w^0-hB>r=Ko08+?J)p?Gd{A_z>rj*EzXo=UeEj4U$HtPT?nzL1XwY~f zA&frs{N#;S#z)%_TY{*eO=euvM_b&G(ls@1f3NVj1g-Gr0@Ff59$3vqC7=D*iVNp0 za7`wdmqr_C!+L^NT5fUJc?1=tIwn@w7Z!jE1wkDC)PBBU=2%-R>E7TdEc(Xz^}8vS zu4%x7@ER3OSTrQ}f1?_>?vIEW!b21N-X=t=?=v`(28djH84SOngt-xi%;JFT4SUrg zJVr)+RjYhF+e_QqfP zy05J@V1HfiY+kU2kxFn)@lEx}XU!g}d?(8s5yupw=L25Lq|#(vJ73oCT7kULl2qB_ zmKB-ksqVD1OlcgIp(2zlS!wF&hu8vG^b$ZOzml%%RKezI0o`)te>CfRYQCd1<;?l{5B#FQzwB__O%)_%nT|o8-7qXg0dEXB>b!S<4d*8ZI3Vhz&=}7L)#WV?&=S z)b_gDzJgm>`Ha0j9eX>r#EOarP2)u6*S=>*3#!{^K(jIf9x5OAtDxry7r^KWpT?Gp zuiX1(6u%>}(EDR9I`yTVpzrf3VK8GOB*MGUN=u-1>1!=$+A>4aIX-W+`fUeJab6Pb z)zm~LCq(Q!etj_h&}=nh7>R-Horbn8{4!Z~&YQ5$-NkKTv1;yFi~l~L`}CxfyLe-6 zt;}8UHOKrMNSJ?VYPO@^+RkIto3}dkE(0|UheHE%)I5Q=(eu1Cg`bP9i^pBw;oRZP;rJo@ zU+gSqZbMtDXYOsAbU{ca(d*5+-8l^~4{NLpqhd)vLP=5qNJ+t#ul{V`{8!Jq|^+{aCv zGvY9aDTRyltZ)g&j7g}C%w5>f#MAg{k{9Y32}Yeq4Xg6s?#r0RYxM1#h72u=Z&cwf zHj&M@GvDAwK!&)USg*DJrn0Nca$44s?Mk-TUn+# z6Nd5!$z`e!ppMbC%Le~DMD%RVB=gvwG;i4|D79?Fjhm;H0SBZQA5ef27=Qa z?W^;v9s)KlBiVVp2UXV%Tx-PHVaT}@XRcYp;-uvH8K_WQmE*G>=8IW6zE=970@Sa0PD(1GebJ20VWx(Y9El>s4Xo1TU_9nJ#gTg zcWpSaTNwULudtl07WG~_GmqI4XzIFXLiuCCCS69`Zf3f4^IjCbG_+!+t{xYDjXixe|+`ud1>_&lU^j}v_1z~YD z;n%4!`B~i$pB?4S3k;tQa-+)H_gmq0bf4CxUsk$==sxyix2o*sL>-Y=R3$ z!Rm)n^YzEPKu_mDzqkG#+YI;UJDWZ`w;M3W=xPmSY?Ue`@0fH3G%X`n&o7}h%rDGP zOi9gm&ELoVmjWJv7w`8WG(%eN_K(a_j{3nJE_t03c7a+#*(x`bgBpDWq7CMl2o;fx zm=ke3R!SdBLu9AxHcgQ_#Wl*UNvmJEuDe9-Vf@}JQ z70YM351X%ougV{7{we{I0U`m~0SbWgn%>f1f|%=n;+M7~m&68(%F@c3Fcp4J%{y+z zrolurtZ9p!uXhA#(3;Db_V2n}5&Uu3UQ}uKR;V_2EIqObxCr`sxt|UYRMYkJt!S9r z7gP%Xaz6h2S_T(fg&Zk<;8%pM;;nqzCdA>cP8msn}i%eNC>wGzobD%; z+sbJ5y3*4TKKo4;(he{3@8D#Jx(n*+z!AsW*@FLva`7Zr3 ze%lDdo~%tZWR9>vJGJ8+(9qYZu63xstl3f()Dbig)b{)RD*6CCwOxW}In`Y%$t>5P zlWAO`^HTOcZ{=`w0P@)f_^iEkE9bT>emvwqpAu{`Rub{r2v*Sfi9R=&PAudaDlM`* zco^E`ZyufT3Z3ykhwL8~t&QHN+^FhGxi1D^a;+aIb#|vbLl_0R6+;xs-bb0tHf!C& z+MUC(tH*}|)C!%|OVwX1{#9I72&xyW@2jV%TUIcs>DP2{6r;3a5Z zL{8f5kucvo+MMzFpP&SpFHrqM&CTX)QB~^WhoS0)==H>Z7lkLhRF0NGrO~D6PXrGk zNY?q6;s;=m5*#Fj(4#Fo(rI^aK<1u^b4l62y#({f>>NRbY11V*h$4HChg9y^bBCnU zFD(C4ZdG|)j`QcICP6umwo}WV$#7cq8K(G&s5vaFr*)Q`uxOzTv1;#g!`t5$>L-8K zwI@rW+!nL@DL~hL?S+1I=9t&+^J5gM5A56KFO!e;7UZ}h{4S>fJN}PL&wG64k_-?bpm(+@@eGinZr`hQ6>Cosijokg8B zA$D5IzX$EK6dH|fVP8e*+XlkL4HMI7$TM)@qQmpvVhUAjxxMN0o^t$Ki|$JuKU+QU z2STrn`&TaigRtlAU*MfPk4-8;|LrUz^pJg@hwPN7VXT03kA@2J4i4ax_HM zf6M+&=KL4*?S{hsG-gO_<4qZdEme> z>89zJ=xS(c=!K6sV`WeIB&bKR+6uysNV=#e?9tQ9`)b}nlOGcT$fuE3%mD&|o0x*8 z30DzB_xud#0a%Y^JIf7UVU|R67PjG=5?SnWpK?gh(lnN)>u8gmsH(`!hNuahZ=lbs%GZsWNsdvAZ@+IOpy??1olA5067hTtouL}? zba1@E%}Ujr=UVR_|C$GEpfNf>cy#ccY4$35_EdgB8@&SFK08KDmY-tnj_`^-p7dYa zo1k|t8G4~<_1uv~xrt}rEmuMWZZvNUyS8N$1LPj>eO$O#uX@nF1ns1Hr~L^$c8DOH zsE<%9O9VFspLEz*e^7X6)A}&DZ|iRu`*kGbAO<<~hT+thYgg3LftHsnV6~WuY|&A+)5oj}edKg_rz~|cvAFRW z_Li?Ms$^nkczbjVyuPdL&Mxe?xHY)61l=+J{fPH%y?SuWdn5Glzt#N)GV=i|Y4@}z ztXj_z(f#idtT3kx@%#pR#SR_2$6NG?yzqGCTzO%U|kzZVpuZTA{BPz_}xd`}2cSgVde)<=d`ATy? z_zrzh{R7;&v4V4LaVtyQO+(hUTK@5$&b)4R0w-~X8T@bfnI4ep2l8!=+AaTQnKQY~ zh|>g7$Qu#Ii)_knw=VUEB69V{2xD4WOC2?&9t$?i%jO?h@|$P&FhLHu4LNkh~IV{By>omxXMV1!!=T z9;K#>H=>I*TkfjtPeF%=a@?HfJ->fxnf~Iof~X@knLA* zod4vet#+?ZcnAntoO>&5H`S2vdtB@@`7BFQf35r$vwyIyXk9$Rzj5z`zk5UKGlRSJ z;YFXGg=e_9oIi~6Jf~AJcbvVmY+#=!amZ4MGgzoN`FB1SYcs-`lEt0{pEdbyYzxl* z_NeS@+l9zzYOMs91nQgNOo|4}ahi&hCUn5#I} zI9HCP8^KJ8W{-xCo{YAID+=7hD%o7+d_nlgEeKPMP9x&-sAeNHeBQfPu67%6rmJiG zX>{66J63rU!*%(-!4Ci=O-=YeUG}WsA^2d}&B{!_2pg2DnJyeid`I8m!P8USAmw-) ztKw~G&45cT*k89J`Q0P_1G&AO$Xh@5vu1nNCDy#AjG)%Err_B*(b0 zxh0^m;NYaz;Jn=4S8OMqnR}~!3q$R5rYtI>#2c262nu|o&acMt?aX4NfP9ISfpg}G za?YG<>ZnLV%4mq}HdWcGj$X}Q!U1v@!V;q`(Lu<)E_ojr{9o2Tk0(3oi{39D%G!yy zKLU$;?RVcG+TSO#M!%A1XGRP~0$vk-;~%`e<`bXgFh@#Zo>o=Q+SUYff0&Ll7au$+ zzkI#~dsT|&{;hLlDGy)}c)@Kv*nS_i>wj;5SwHX~yaA*;ZK0GV7jO#Ks$Na^j`O4+ zxLAK$)?Ixqy)$P9y)?1}7=61AeZaLkR5iBZN5#bTG9?k{%iR)dCuMV z!=TwK&35T)+DqU_<#PYpo6}KjYx&l{nob$9{|vJU*lUy{k7YzLiaL0JqP5EM5~vKx zPqAf*;-S%03MW}*1x~p@Zr~!1Xo^`2lt*Q!GN3p5Z1SuQ)pM5YnhqvBdKx}cXF2MP zTyBpIf8oF3V+QIxNM~fC*Dler9h8kJ1^V({|5j(gtAvSOW>D2|lIu!m^|Hmi$uhOG zy&JOSRc&<7_pCOW_~)ASR%me7zTn`G*8(hv=+Ap=)o%%@hp_Uyn_t=?t3>9m$1a`Xt%b~hu>{LR2KG< zh=L_*8eG|bjQmXP8)TKy8U}V4xp0O{byf=ec5p)EOni@d=VY(?KRYu15b@E0^hZ7)GsJ$tc{%l zrBqnCpEx{BxmOP62DP>CDU;FHQR#YN9E-2NkNU>OM(Lw*E>y~7Pe;^(2jw0liL@Ud zhx=Nw7hd5C5!&-8V`1M7$qSP1Ps$aW&^SN&Mb{r|Po4u<$pJ*;gjP}%Jp1#DhCgZ* zuQOj#z}CzvU(MR3e%&cTD%*Tob>E&m$E_(3Sh2!C>>MKJvlBl+#L^}#xN$w~TQfkg zf`}0Vw}zHr(_?-f*b4XS_++6c&S0U%I9*qmnv@)?ZO za)_PknmkmE1%rnML23Ys0u>Poyb#8DuxyYN^f37Mz!;2xuyW2I1%%+B)i*u*1MdOk z%$VfzPU0gkQVK@35>%u>Nb=z4Ejg)3UngkMury2;+>pSK&-;7ZI{Ue#zwys0SQY_d z_Yf5(8y{j)Fz^gq*KjibzO4&b6=ayel0p_fik$^>P;SsN*kUkP$C6YLJQ9L1d?+HZ zAiZZWrkO~o0|)|5RQv}o z66|yn#Zc@5cYg9`Y1yS`$C&|G>!>yHwXoolu~-y}{E*noKAtuJOc1tT)DVUKr7nm6{3FN zXj5n?Irv6MQC7WrS*GDXSphUV)HvwoadVOUC^}UpE9|G#tW+pmVC}&LL}B;Gfq=R$GdC6BSqhf35a+w(`dR>v! z<3gxfs#l?}uuh}|QPQi^gb%zQ4~Y}{E0ak9?g}QsQ1r4W5F#O@$kzXXNW~?cI{=a2 z5UCDa!j4;*vO+^V3&|X;rzp83yO+)bQYfT#91Xjf7c#{eYXVE&l*UdqX`Lc`o1{^a za(W9a!yt9c9S0*eiDCwJJOrp90Ai3AEKZ4q5oCBQg#s5Tv>*>UYA_fHzVVNinh}(i zq5NO}`Fdd>g%hc_P~Wkba3oKOI0{Q}3E;Yn0-=bbJR{+s3Ggw-BxcQmF0kp~mZP?G zNR1lFnl3N93c8_kNzij$0pp%^{JD56{{Jd7l~(d9Yu2Mbcq z54uR2s1xMFO)-np0c+6+tBl!8W86Csu521Ecr*nvLeO$EXErlB5f)xNNeUG)taA_r zG#m#fIgu0+CNxrc{kA&jx8f%Q_{!K2HQdUi)bx9W%|sB~6qJNuc9gUcFe0mCDHZsJ zRJW4zoMU~`Eg5>t%d-9ZbOru1_n?u=!$*VqZe{+8;`ghkOkDMXC z6Ezl>d9;Q^;JOztvBJE8Z&?u@cw|-QLTzz?;8*tu^(;?kd#o~8pl`72@-uYu|NZCS z&tKK}n2fm1)CeBQ=j~K3Jz;lBJ|vtTPlSWln$2i2S`c)_#$Od`fsMj>%T>H-e7R!J zy5_a+&{>WB7$<2Cxpv<%Su+Qt3{;Y;wV!pkymZ1bN&mS@LHz-~ZM|WB&h~J`u9Rw zuvqq?PvLuLcaB8NaaXA2_d5AXSDW&==eK&Ol@oP&Q5Xq$K1C)98NK~c5v=;WA$3cn zTN<<_Rj-Ix5vx#><4QuVjFXozz%uz;*$}kZ%*^Y`CB6UP_X$u`YtHO zNs<2nzOUy_wPq}Rt{e<`OjY`cu3&DX3wuB;YFMr!=xGXT@W#R?cdSArYYPi{&EhSW zcDl>)%cwD8PQOA8dCLH7;Azf~jZi)imJMA#@`j~2Ham(%Ky?s-z4^L3#%bU~?B^0R zz>j5NCiEu7GAlFg+B>#6DI` z2aUsCp9{u#{ensL<^kmmpFNcIRm1tw*xpFBFAhQb&^>w&pUJ6 zi+8{+$vOv0d;?R|Uu6ZoI`M(J8mv2DqqrX_J`5f7X)Y6jZX9x?-B0I(J^WXsF}zh) ze1Vln=4zhWE2<;)o~7Q5b~3nj+u@(*H^a-jYc5Oy0ugcvu&m7CW&@03MGFTM0U5%_ zzQ@SCJI3M-)`56PiI>p40w86JzdNfaAFm0SI>qt*D^fn0x|Fg~i75XYlfo#=kp>DB z{f&%7HtN>`L9TK@f5b)qX2w>GLaf3dVo)()n%B=9W0$xKXm zG`WrsZFf@=`9kuWC>=-j^to5TWo)Qub{_2vZheJN1(2<3Kz?qDP*M$CxH;V$E10b z^t1t45X_55MKJB|4&Zegot300?qjg#3+g4^$l|++2={d`L9!;9c3nH_cLtAePoz3M zg&j4xrchs@^+ml1O#(aULowM@(p>mjK8qoZ+F{`ne-fIq3{fn56$ed@9MvNydB-6u zm(yq?7^~1kl!qTlhZ`#!fkPGz*gDFRaq0zXOGUj=%tvsSQ`WRz#8f`EfddxVorTh3 zR%EB?OyYHSmE_|xi|c38M^4H>N(g}Ep4*GNq;+nr>f_}<3tM-oWF@j6&D(b}MeY+M z{g42(F;DnK7tsYK+y2dyCbN?-5zoDPo@Z#%#leuG^PD)N-TpmDrM0YVP{W?7_bZ8F zg<6X%xUmNXe}XWTh#QGm0B`IZguW+#qb3a40M~4N2@$y`XrHr><{P--a$wT-ac0Nb z4@q6@4V%g2f9|OSm@E|dSZClPy}S_fKFw|#IAK~v%rdU}_q?M(?~&uMb<(_@u+w3#T?qEYlMOtdgA8PcHgM zgei3vb`QV{yppUBDD3=SVjdJ$|1rB`JEL#>kl2d3qcwDP(}==#k4#LC>V*4j{6_oU zK*l|13J1O4`3ac634o@v4QzBvCC6T3_+@Iu7Q-*Q6X5~SQIJ>e+Wy#il71CcL{Hiq<4XE4N%$GtS+!c5LaN6hIC(M zP&!_8E4kj>BgGdLb5zjd+uw1fJGJmh z2`Hck`us-IpgEsQgSp3XlIQNJTrQ)j#_A;V{wvMIKraRUt*#s+;C{cD1uSuQ1p9qw zWc{V!w`4RZOa9Z>PwIr!OU^eAf9oO-{m zi`eb2eeD=2Zi2CX%?0;y;qW>RH2xfee|I%ci^k~hB@Xmut*X%5ztR@#T3$}Sx=;1X zgZGy)I;*rrZ>+JQw3(Zbo>rsE29q(SExhX{Bm9d=J77l}EhsTL$+N=!@dvCFoID+? zIT>j9XS)sVqrRf>4#pxrkVPu5hV{uy_rcT!{Um!e?tc&rcaqA3Wjg>5NThd#vL$ot zkkQe%d~rFHLT?`Lv+2q~vcXETC88G-kg|ONE-A~&!zcSwGQVV1bjv-#G9>r{dXFaF zEGlY7j!D7ZF=|>HI!5`Q6>dvYsE73i`OWM>vg;lz$%a3b6+crpkB(B^x+DXfObUl0 zP9EQrGDKQCI3!$g74kd;S`qxzM*g|o$G~#X=WH?`()5^l?x9LMZNsyE_9Gk>U)XWPZ;+X z%+_l-99NARFIU@{?b?iC+!6mUeq(zTZ|m+2E*YGZq}lhU0&}Yf)wAarmJg2m9K!AB z$u4}=ljiU^B}@EQbm?@-0O;m%ephWyP*1(AYZu+ zXv4}FkHUkjAHdR1Gds(Jub02yPkV2_ir@PtMNOdUjB|yc1n)53taDxM8ZzY`NoU9k zj>eDvK;`}*gj`#KM=qp}WJckT{*$wqmA{T0>!)Y$>Vy#|{rH7FE|dL(u&%a0tn$2-$w4dg5%n+C7~JFsL``{w zJyO|=nqk3&r=LjdKO`|GEd{G4y?LWJBA}zo1_g6TA71nCeiVHdr`56J zsiJth6}tI~icI}EzXHcj`;s88yRvxy`g3llEq_?)BT@Ei7|O5nEnu-E`7GMtv(+f8 zjstOBu?O)Dnk*ar@*Tn5IGb-jRMMxh5xZq>44;$4-wH)Fz%E6OF1{zZk~*5vVB1+p z*D*sFw>|@11$P(FH3_mXQf4niZ4xo44kQ~w4Cao$u|;s6xj6c2;72l`X2TJ_q|I62 zQ6W~vZR4L3%*TMHd!nQ4q7@gTL61z?##0eq4fP`rTLsN;)Yy_xM1j-Ix+8Q5dh>3?>Y&tH zlaYhFUz_pZ2fXu`%l98>soyr0|F!Cxp~GeZ@9xuN)do@si@wH<#wzfRK3VmA7Q*`1 zoP%{~)>WTu0y}ACIN1RDs8N18ll|;J*wUoc7`YGZpn#*Y6kVocrCbOpjoc{S`gmFD z_CuNjRiL(-cXJGcCta$lc)TX|M4fd=U81hI#j7OSXuKiyy{DrZZ@aoAlKmfWDed2I z>EFN527V%v&py%M?41;9a7wF;&l%>-OK(8R*VP$!SXP0F&SfrAt<~e~w^l38oE1H;Y^8p24-C0y zs>(fM_@B^E;eVo^|9fsE=szVoT3H13TNJN%S=`^>VPcT|c(6~}xLA9_JZvnT|E^r2 zj`$#Pp?^O7%Gb>X2!T54!JL8G%;F*sSgD66j9CoycjW}L@c=42S;B03 zAM_n7G+7l9O^&ui3SePA9yyc7#Z7Dsap%l|8VGh^oe;_nho5Oa=>q@U(vXQ%tH{(% z!{g4NB(1WY^9}I)VPBbKZ?yz^gK0dPy{5@EoQ>4<8~OTH)4nSdg9&K(WZ9}VjX={a z#M&*1u6Y6ws~VAuE#JdZq@-eGT=iUy`>O>wioJoQBcIS<96-xKORSd2M|zD%s!R+_ z7)X|q)9xL_Fe(n=GQo>Xz=W>!xRWlW;9mlW8MxT6`1@+3>J`SQ4B>PGf-lq_>2|bR zGgCa)i<}@GN~I8a1|*~mWqH;9v@%Rz!3=Mtk+lG80;iR?SxGvUr*h(vZ3xy=>)v3f zvQY%pXe>qIB#4Zi#Ql(KucX-8z@eThyRgXQhtx;xnqL-U>Rt3#gpqDMgzc`%Y99Du z@Z=;M0qSPbR&`yh+*ixkC^I@t;u9Q$bc{rfoM$JwoR%`dpO&r3n)io4>8Kn6Qg-*RmGH1(FQH3-Kv z2Rx=m{*NOCEX1qjD5XVf%$kv=CYy(_NY>|hEKqky*Wkua3H7hpHl}P7aNHaGSkP9D zpEB3R9m}JZuHdQ^<@ha!nC~F}C-$S7Ir3My*hnGlFC*;r`~fzkyu5n9B0g%(f+fBU zE^*UT6RRR0dlas_3SV5XDl`Zw+zQi{2D>xhc$r?F{i$4~1VunBH}!B1d4+>#K8&AN zJzW+bvVW%a#!!6u>q@+0k5O!ddg9z=Q*n+Ma>~P~$E&SpO5rtup*7RsT|QF&8UXlW z-GxI^}c#m7>4xo?WE7M!8DJLDy<>J~rc1y>Y8bXhnNaEq*ZXO5bEP zg%r^ik(t{)T__1Mw!<`@$zm!$h}?=2`K}o#T;}Q+)ViZ0c^IcYoRwQ}RgaP{qT0AA zlCe}^5>9t5B{KinAb+6Z`+^p7otYM(!zeq`2XAR}(t->>Y$&h)1mVv!N(EE_@Wb*?hc*R8E8pn*Yo9XgXeD zzr!|h+bp{S|Luinr|;t25787%7kAA!CsQ3!qoFFHQR{1tGR-Qgy}~brpNRt6xh@U{ zJBGcTTFh+xQ+U<+#I|BLexeBpb7t}Q#GB{n7JsM3+HFo8?_;LaBav+%@Xj3zTOci# zxNoQ8i;M77-o^&=qman3`Q&(*zN`YK*A&e@uu-2*x#xcpMw8_hx5#Qdv#gWn6@S`SHixX`s=WXMAnneuM% z$2Z?qg5qxRCJr+#eUSPX%M=D3V^Bc;4JoYOb3~-7Fw4LJ{@_A=5nuKBrIb%|nsJ;S`$1^5pmwa;!KBt7m0F}|H3q-R1lw=*Jp zgO{`leoxo!&kx$olTGf;UvYxDKeaQDxec?Ze9@Lm`HK#A%aK`^}G{H_%d z9A0%3`hh=soI%N3IJa+z-?VXDJx6P#ECI>UeKkoJ&$&*geXn*GhkH}e(!sXvOy&2( zt!^>$F(;ns!jFJ;@`Wp!;kEH=#pYjJ&#?-2+@?i)DUCPPBNU~Xl^WVj!%5?3m7_W( zFrpeTf*2Sy_PW73DrZDh(L_T`LyIZK`>6Rv9~z^Tt3;c`TY=S{S-r${Q$THOdQ5v~K`jpD zy20*e>@*|XN>Lom+Vbk}wzcIh9p#>e+EhW~pA=a~C5%*Q=&X5TPHL3iLMd!`t%)a> zBCD?xEuOf;PShlEpNkCEW5`I*6J-OM`=4|)NB6~Uq$XT?W`Ss;YZ z#48Ax;b>68EJR#<;ae%;ua_w{acN5%slhIZTFoG_}QdC^O-S_8j>*&2&Ym^UXx!?E>ONPM5$R z&oPO7B=>gX#Y~u3jXx##x;S9)s|-v`Fo@KbDlJyDS8RRG7MQ7+rlvX34N%cxWxzIKAiNt)<5Vnd(Z{_G;qT3LqPJ$?LYGBbX>>SMe5^ODIO3{45AmWq-j`^1rP5OR(D@w04;BdX?T!j-kGNWIodeRP-D?aJqizS)kW^tK|LsGO;!)q6lT zYvt?@Uds)N**_Er-C4Ny%%y0x(VONu`QgdR%kw))316hQ@0hioL;V^H$6ZZlq=0x~ z)JG@tEu&#Vd7fFh zImx%!Z-lrRW+>R|=aohGr}J=c!;L@4Yo~Fv&9o)Kbj46XoW#7CUC$L|wzPPE zTn5@^14^(_Ar`82X&{d)el^H{>1ErZm4T+9T;gn>4nI`p+Jt7lGp)a&f*5|u`|r|N zSXku0NMl1?8(W~Rt1FE8Z_%s^RCBR)W&Ycf^-zLe%Lqb+tZZxqL4qJ5TM)>~#@fo- zR?HS^EhH`>Vrl)L&Hw)!ra(OhKO1~uVNu{;uZ5U}nL(!ihxC>ZlKfZYEjnfNYD%BH z@2G)h(zDtJkDge8uY*QMBvGxqKxDu}^}|a&O)b3?*5@K);q1;oNt-(Ol(e#=@a@$6 z@dFRXiWy(G7!R$7$tm4@w>vpDvb#N(+pPBAH`}DO()9NaPpYMXLzJi|da^r9?7R6j zg(92aLYAh$u63y5Y!=vpT^WIA=U_HCz~;^x->W7;35dyQQbrdYJ@pmS?l1|6bfnsg zUihgy+-IjoAK5*^J(cohRWi1Nk-FEgZfLIY1n-7sRglp?+H}DetF4yC--=1I{aXh7 zRuC_xPQG**BY^bwmWceduYo)V1#p?PP82N)>EgXC{dG+}jJsk%ANs;Muw6kj&KfRwiPuw{B) zSGrqu^X0onsRT!eyF*jfSIuz^lU^DvGnQ?B0eO{_ztnE5zeU!>e2{uk!SRZ$hk|Lw zT23vw**C}gOK>;jKrsM|3c24^OdIB#Q_WLdl{cj!(xf2A%OCJVSw&(a@@E$Qw zLm3QKRGKMfR?051gAh~AjN%q-x!p`h#EiXcKI9(`sTupoZnEyyTf#SwL~?ub4q5LM zzrXVbuGaWa)aacFyXh&e|LJIDLnwEs#`Y0kdw-GcwIqt|dGrexZHZZG0V<8=eO;XQ zp0k?u#Y|YY{?xYL6T&VMR5=sQ{Tn(SOmSP>=|*gqMaE_hdc!YbwfhCRi6Psl&(pY9 z)ttk^?y1d@Tg>u4ik|mbaU?U;bZeXY_Hu*`-8rLAkC!eSa-$?s#%y6X`%76=aCFf} zHoTJR@#0#m1yc4NVNvcKL#AiR$Gz=Zh~68bxb AccountRangeMaxResults { + maxResults = AccountRangeMaxResults + } + + for i := 0; i < maxResults && it.Next(); i++ { + if preimage := st.GetKey(it.Key); preimage != nil { + addr := &common.Address{} + addr.SetBytes(preimage) + result.Accounts[common.BytesToHash(it.Key)] = addr + } else { + result.Accounts[common.BytesToHash(it.Key)] = nil + } + } + + if it.Next() { + result.Next = common.BytesToHash(it.Key) + } + + return result, nil +} + +// AccountRangeMaxResults is the maximum number of results to be returned per call +const AccountRangeMaxResults = 256 + +// AccountRange enumerates all accounts in the latest state +func (api *PrivateDebugAPI) AccountRange(ctx context.Context, start *common.Hash, maxResults int) (AccountRangeResult, error) { + var statedb *state.StateDB + var err error + block := api.eth.blockchain.CurrentBlock() + + if len(block.Transactions()) == 0 { + statedb, err = api.computeStateDB(block, defaultTraceReexec) + if err != nil { + return AccountRangeResult{}, err + } + } else { + _, _, statedb, err = api.computeTxEnv(block.Hash(), len(block.Transactions())-1, 0) + if err != nil { + return AccountRangeResult{}, err + } + } + + trie, err := statedb.Database().OpenTrie(block.Header().Root) + if err != nil { + return AccountRangeResult{}, err + } + + return accountRange(trie, start, maxResults) +} + // StorageRangeResult is the result of a debug_storageRangeAt API call. type StorageRangeResult struct { Storage storageMap `json:"storage"` @@ -512,11 +582,11 @@ func (api *PrivateDebugAPI) getModifiedAccounts(startBlock, endBlock *types.Bloc } triedb := api.eth.BlockChain().StateCache().TrieDB() - oldTrie, err := trie.NewSecure(startBlock.Root(), triedb, 0) + oldTrie, err := trie.NewSecure(startBlock.Root(), triedb) if err != nil { return nil, err } - newTrie, err := trie.NewSecure(endBlock.Root(), triedb, 0) + newTrie, err := trie.NewSecure(endBlock.Root(), triedb) if err != nil { return nil, err } diff --git a/eth/api_backend.go b/eth/api_backend.go index f24e94f2cd13..7770fb57bd19 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -18,6 +18,7 @@ package eth import ( "context" + "errors" "math/big" "github.com/ethereum/go-ethereum/accounts" @@ -25,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -38,13 +40,14 @@ import ( // EthAPIBackend implements ethapi.Backend for full nodes type EthAPIBackend struct { - eth *Ethereum - gpo *gasprice.Oracle + extRPCEnabled bool + eth *Ethereum + gpo *gasprice.Oracle } // ChainConfig returns the active chain configuration. func (b *EthAPIBackend) ChainConfig() *params.ChainConfig { - return b.eth.chainConfig + return b.eth.blockchain.Config() } func (b *EthAPIBackend) CurrentBlock() *types.Block { @@ -56,57 +59,119 @@ func (b *EthAPIBackend) SetHead(number uint64) { b.eth.blockchain.SetHead(number) } -func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) { +func (b *EthAPIBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { // Pending block is only known by the miner - if blockNr == rpc.PendingBlockNumber { + if number == rpc.PendingBlockNumber { block := b.eth.miner.PendingBlock() if block != nil { return block.Header(), nil } } // Otherwise resolve and return the block - if blockNr == rpc.LatestBlockNumber { + if number == rpc.LatestBlockNumber { return b.eth.blockchain.CurrentBlock().Header(), nil } - return b.eth.blockchain.GetHeaderByNumber(uint64(blockNr)), nil + return b.eth.blockchain.GetHeaderByNumber(uint64(number)), nil +} + +func (b *EthAPIBackend) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.HeaderByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + header := b.eth.blockchain.GetHeaderByHash(hash) + if header == nil { + return nil, errors.New("header for hash not found") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { + return nil, errors.New("hash is not currently canonical") + } + return header, nil + } + return nil, errors.New("invalid arguments; neither block nor hash specified") } func (b *EthAPIBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { return b.eth.blockchain.GetHeaderByHash(hash), nil } -func (b *EthAPIBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) { +func (b *EthAPIBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { // Pending block is only known by the miner - if blockNr == rpc.PendingBlockNumber { + if number == rpc.PendingBlockNumber { block := b.eth.miner.PendingBlock() return block, nil } // Otherwise resolve and return the block - if blockNr == rpc.LatestBlockNumber { + if number == rpc.LatestBlockNumber { return b.eth.blockchain.CurrentBlock(), nil } - return b.eth.blockchain.GetBlockByNumber(uint64(blockNr)), nil + return b.eth.blockchain.GetBlockByNumber(uint64(number)), nil +} + +func (b *EthAPIBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + return b.eth.blockchain.GetBlockByHash(hash), nil } -func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error) { +func (b *EthAPIBackend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.BlockByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + header := b.eth.blockchain.GetHeaderByHash(hash) + if header == nil { + return nil, errors.New("header for hash not found") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { + return nil, errors.New("hash is not currently canonical") + } + block := b.eth.blockchain.GetBlock(hash, header.Number.Uint64()) + if block == nil { + return nil, errors.New("header found, but block body is missing") + } + return block, nil + } + return nil, errors.New("invalid arguments; neither block nor hash specified") +} + +func (b *EthAPIBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { // Pending state is only known by the miner - if blockNr == rpc.PendingBlockNumber { + if number == rpc.PendingBlockNumber { block, state := b.eth.miner.Pending() if block != nil { return state, block.Header(), nil } } // Otherwise resolve the block number and return its state - header, err := b.HeaderByNumber(ctx, blockNr) - if header == nil || err != nil { + header, err := b.HeaderByNumber(ctx, number) + if err != nil { return nil, nil, err } + if header == nil { + return nil, nil, errors.New("header not found") + } stateDb, err := b.eth.BlockChain().StateAt(header.Root) return stateDb, header, err } -func (b *EthAPIBackend) GetBlock(ctx context.Context, hash common.Hash) (*types.Block, error) { - return b.eth.blockchain.GetBlockByHash(hash), nil +func (b *EthAPIBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.StateAndHeaderByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + header, err := b.HeaderByHash(ctx, hash) + if err != nil { + return nil, nil, err + } + if header == nil { + return nil, nil, errors.New("header for hash not found") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { + return nil, nil, errors.New("hash is not currently canonical") + } + stateDb, err := b.eth.BlockChain().StateAt(header.Root) + return stateDb, header, err + } + return nil, nil, errors.New("invalid arguments; neither block nor hash specified") } func (b *EthAPIBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { @@ -134,7 +199,7 @@ func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *sta vmError := func() error { return nil } context := core.NewEVMContext(msg, header, b.eth.BlockChain(), nil) - return vm.NewEVM(context, state, b.eth.chainConfig, *b.eth.blockchain.GetVMConfig()), vmError, nil + return vm.NewEVM(context, state, b.eth.blockchain.Config(), *b.eth.blockchain.GetVMConfig()), vmError, nil } func (b *EthAPIBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { @@ -177,8 +242,13 @@ func (b *EthAPIBackend) GetPoolTransaction(hash common.Hash) *types.Transaction return b.eth.txPool.Get(hash) } +func (b *EthAPIBackend) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { + tx, blockHash, blockNumber, index := rawdb.ReadTransaction(b.eth.ChainDb(), txHash) + return tx, blockHash, blockNumber, index, nil +} + func (b *EthAPIBackend) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) { - return b.eth.txPool.State().GetNonce(addr), nil + return b.eth.txPool.Nonce(addr), nil } func (b *EthAPIBackend) Stats() (pending int, queued int) { @@ -217,6 +287,14 @@ func (b *EthAPIBackend) AccountManager() *accounts.Manager { return b.eth.AccountManager() } +func (b *EthAPIBackend) ExtRPCEnabled() bool { + return b.extRPCEnabled +} + +func (b *EthAPIBackend) RPCGasCap() *big.Int { + return b.eth.config.RPCGasCap +} + func (b *EthAPIBackend) BloomStatus() (uint64, uint64) { sections, _, _ := b.eth.bloomIndexer.Sections() return params.BloomBitsBlocks, sections diff --git a/eth/api_test.go b/eth/api_test.go index 47b062a40c46..1e7c489c3295 100644 --- a/eth/api_test.go +++ b/eth/api_test.go @@ -17,21 +17,178 @@ package eth import ( + "bytes" + "fmt" + "math/big" "reflect" + "sort" "testing" "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/crypto" ) var dumper = spew.ConfigState{Indent: " "} +func accountRangeTest(t *testing.T, trie *state.Trie, statedb *state.StateDB, start *common.Hash, requestedNum int, expectedNum int) AccountRangeResult { + result, err := accountRange(*trie, start, requestedNum) + if err != nil { + t.Fatal(err) + } + + if len(result.Accounts) != expectedNum { + t.Fatalf("expected %d results. Got %d", expectedNum, len(result.Accounts)) + } + + for _, address := range result.Accounts { + if address == nil { + t.Fatalf("null address returned") + } + if !statedb.Exist(*address) { + t.Fatalf("account not found in state %s", address.Hex()) + } + } + + return result +} + +type resultHash []*common.Hash + +func (h resultHash) Len() int { return len(h) } +func (h resultHash) Swap(i, j int) { h[i], h[j] = h[j], h[i] } +func (h resultHash) Less(i, j int) bool { return bytes.Compare(h[i].Bytes(), h[j].Bytes()) < 0 } + +func TestAccountRange(t *testing.T) { + var ( + statedb = state.NewDatabase(rawdb.NewMemoryDatabase()) + state, _ = state.New(common.Hash{}, statedb) + addrs = [AccountRangeMaxResults * 2]common.Address{} + m = map[common.Address]bool{} + ) + + for i := range addrs { + hash := common.HexToHash(fmt.Sprintf("%x", i)) + addr := common.BytesToAddress(crypto.Keccak256Hash(hash.Bytes()).Bytes()) + addrs[i] = addr + state.SetBalance(addrs[i], big.NewInt(1)) + if _, ok := m[addr]; ok { + t.Fatalf("bad") + } else { + m[addr] = true + } + } + + state.Commit(true) + root := state.IntermediateRoot(true) + + trie, err := statedb.OpenTrie(root) + if err != nil { + t.Fatal(err) + } + + t.Logf("test getting number of results less than max") + accountRangeTest(t, &trie, state, &common.Hash{0x0}, AccountRangeMaxResults/2, AccountRangeMaxResults/2) + + t.Logf("test getting number of results greater than max %d", AccountRangeMaxResults) + accountRangeTest(t, &trie, state, &common.Hash{0x0}, AccountRangeMaxResults*2, AccountRangeMaxResults) + + t.Logf("test with empty 'start' hash") + accountRangeTest(t, &trie, state, nil, AccountRangeMaxResults, AccountRangeMaxResults) + + t.Logf("test pagination") + + // test pagination + firstResult := accountRangeTest(t, &trie, state, &common.Hash{0x0}, AccountRangeMaxResults, AccountRangeMaxResults) + + t.Logf("test pagination 2") + secondResult := accountRangeTest(t, &trie, state, &firstResult.Next, AccountRangeMaxResults, AccountRangeMaxResults) + + hList := make(resultHash, 0) + for h1, addr1 := range firstResult.Accounts { + h := &common.Hash{} + h.SetBytes(h1.Bytes()) + hList = append(hList, h) + for h2, addr2 := range secondResult.Accounts { + // Make sure that the hashes aren't the same + if bytes.Equal(h1.Bytes(), h2.Bytes()) { + t.Fatalf("pagination test failed: results should not overlap") + } + + // If either address is nil, then it makes no sense to compare + // them as they might be two different accounts. + if addr1 == nil || addr2 == nil { + continue + } + + // Since the two hashes are different, they should not have + // the same preimage, but let's check anyway in case there + // is a bug in the (hash, addr) map generation code. + if bytes.Equal(addr1.Bytes(), addr2.Bytes()) { + t.Fatalf("pagination test failed: addresses should not repeat") + } + } + } + + // Test to see if it's possible to recover from the middle of the previous + // set and get an even split between the first and second sets. + t.Logf("test random access pagination") + sort.Sort(hList) + middleH := hList[AccountRangeMaxResults/2] + middleResult := accountRangeTest(t, &trie, state, middleH, AccountRangeMaxResults, AccountRangeMaxResults) + innone, infirst, insecond := 0, 0, 0 + for h := range middleResult.Accounts { + if _, ok := firstResult.Accounts[h]; ok { + infirst++ + } else if _, ok := secondResult.Accounts[h]; ok { + insecond++ + } else { + innone++ + } + } + if innone != 0 { + t.Fatalf("%d hashes in the 'middle' set were neither in the first not the second set", innone) + } + if infirst != AccountRangeMaxResults/2 { + t.Fatalf("Imbalance in the number of first-test results: %d != %d", infirst, AccountRangeMaxResults/2) + } + if insecond != AccountRangeMaxResults/2 { + t.Fatalf("Imbalance in the number of second-test results: %d != %d", insecond, AccountRangeMaxResults/2) + } +} + +func TestEmptyAccountRange(t *testing.T) { + var ( + statedb = state.NewDatabase(rawdb.NewMemoryDatabase()) + state, _ = state.New(common.Hash{}, statedb) + ) + + state.Commit(true) + root := state.IntermediateRoot(true) + + trie, err := statedb.OpenTrie(root) + if err != nil { + t.Fatal(err) + } + + results, err := accountRange(trie, &common.Hash{0x0}, AccountRangeMaxResults) + if err != nil { + t.Fatalf("Empty results should not trigger an error: %v", err) + } + if results.Next != common.HexToHash("0") { + t.Fatalf("Empty results should not return a second page") + } + if len(results.Accounts) != 0 { + t.Fatalf("Empty state should not return addresses: %v", results.Accounts) + } +} + func TestStorageRangeAt(t *testing.T) { // Create a state where account 0x010000... has a few storage entries. var ( - state, _ = state.New(common.Hash{}, state.NewDatabase(ethdb.NewMemDatabase())) + state, _ = state.New(common.Hash{}, state.NewDatabase(rawdb.NewMemoryDatabase())) addr = common.Address{0x01} keys = []common.Hash{ // hashes of Keys of storage common.HexToHash("340dd630ad21bf010b4e676dbfa9ba9a02175262d1fa356232cfde6cb5b47ef2"), diff --git a/eth/api_tracer.go b/eth/api_tracer.go index f7c92d18231c..83edc757164a 100644 --- a/eth/api_tracer.go +++ b/eth/api_tracer.go @@ -201,7 +201,7 @@ func (api *PrivateDebugAPI) traceChain(ctx context.Context, start, end *types.Bl // Fetch and execute the next block trace tasks for task := range tasks { - signer := types.MakeSigner(api.config, task.block.Number()) + signer := types.MakeSigner(api.eth.blockchain.Config(), task.block.Number()) // Trace all the transactions contained within for i, tx := range task.block.Transactions() { @@ -295,7 +295,7 @@ func (api *PrivateDebugAPI) traceChain(ctx context.Context, start, end *types.Bl break } // Finalize the state so any modifications are written to the trie - root, err := statedb.Commit(true) + root, err := statedb.Commit(api.eth.blockchain.Config().IsEIP158(block.Number())) if err != nil { failed = err break @@ -460,7 +460,7 @@ func (api *PrivateDebugAPI) traceBlock(ctx context.Context, block *types.Block, } // Execute all the transaction contained within the block concurrently var ( - signer = types.MakeSigner(api.config, block.Number()) + signer = types.MakeSigner(api.eth.blockchain.Config(), block.Number()) txs = block.Transactions() results = make([]*txTraceResult, len(txs)) @@ -501,7 +501,7 @@ func (api *PrivateDebugAPI) traceBlock(ctx context.Context, block *types.Block, msg, _ := tx.AsMessage(signer) vmctx := core.NewEVMContext(msg, block.Header(), api.eth.blockchain, nil) - vmenv := vm.NewEVM(vmctx, statedb, api.config, vm.Config{}) + vmenv := vm.NewEVM(vmctx, statedb, api.eth.blockchain.Config(), vm.Config{}) if _, _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())); err != nil { failed = err break @@ -526,13 +526,7 @@ func (api *PrivateDebugAPI) traceBlock(ctx context.Context, block *types.Block, func (api *PrivateDebugAPI) standardTraceBlockToFile(ctx context.Context, block *types.Block, config *StdTraceConfig) ([]string, error) { // If we're tracing a single transaction, make sure it's present if config != nil && config.TxHash != (common.Hash{}) { - var exists bool - for _, tx := range block.Transactions() { - if exists = (tx.Hash() == config.TxHash); exists { - break - } - } - if !exists { + if !containsTx(block, config.TxHash) { return nil, fmt.Errorf("transaction %#x not found in block", config.TxHash) } } @@ -567,7 +561,7 @@ func (api *PrivateDebugAPI) standardTraceBlockToFile(ctx context.Context, block // Execute transaction, either tracing all or just the requested one var ( - signer = types.MakeSigner(api.config, block.Number()) + signer = types.MakeSigner(api.eth.blockchain.Config(), block.Number()) dumps []string ) for i, tx := range block.Transactions() { @@ -578,6 +572,7 @@ func (api *PrivateDebugAPI) standardTraceBlockToFile(ctx context.Context, block vmConf vm.Config dump *os.File + writer *bufio.Writer err error ) // If the transaction needs tracing, swap out the configs @@ -592,16 +587,19 @@ func (api *PrivateDebugAPI) standardTraceBlockToFile(ctx context.Context, block dumps = append(dumps, dump.Name()) // Swap out the noop logger to the standard tracer + writer = bufio.NewWriter(dump) vmConf = vm.Config{ Debug: true, - Tracer: vm.NewJSONLogger(&logConfig, bufio.NewWriter(dump)), + Tracer: vm.NewJSONLogger(&logConfig, writer), EnablePreimageRecording: true, } } // Execute the transaction and flush any traces to disk - vmenv := vm.NewEVM(vmctx, statedb, api.config, vmConf) + vmenv := vm.NewEVM(vmctx, statedb, api.eth.blockchain.Config(), vmConf) _, _, _, _, err = core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.Gas())) - + if writer != nil { + writer.Flush() + } if dump != nil { dump.Close() log.Info("Wrote standard trace", "file", dump.Name()) @@ -621,6 +619,17 @@ func (api *PrivateDebugAPI) standardTraceBlockToFile(ctx context.Context, block return dumps, nil } +// containsTx reports whether the transaction with a certain hash +// is contained within the specified block. +func containsTx(block *types.Block, hash common.Hash) bool { + for _, tx := range block.Transactions() { + if tx.Hash() == hash { + return true + } + } + return false +} + // computeStateDB retrieves the state database associated with a certain block. // If no state is locally available for the given block, a number of blocks are // attempted to be reexecuted to generate the desired state. @@ -747,7 +756,7 @@ func (api *PrivateDebugAPI) traceTx(ctx context.Context, message core.Message, v tracer = vm.NewStructLogger(config.LogConfig) } // Run the transaction with tracing enabled. - vmenv := vm.NewEVM(vmctx, statedb, api.config, vm.Config{Debug: true, Tracer: tracer}) + vmenv := vm.NewEVM(vmctx, statedb, api.eth.blockchain.Config(), vm.Config{Debug: true, Tracer: tracer}) ret, gas, _, failed, err := core.ApplyMessage(vmenv, message, new(core.GasPool).AddGas(message.Gas())) if err != nil { @@ -786,8 +795,13 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree if err != nil { return nil, vm.Context{}, nil, err } + + if txIndex == 0 && len(block.Transactions()) == 0 { + return nil, vm.Context{}, statedb, nil + } + // Recompute transactions up to the target index. - signer := types.MakeSigner(api.config, block.Number()) + signer := types.MakeSigner(api.eth.blockchain.Config(), block.Number()) for idx, tx := range block.Transactions() { // Assemble the transaction call message and return if the requested offset @@ -797,7 +811,7 @@ func (api *PrivateDebugAPI) computeTxEnv(blockHash common.Hash, txIndex int, ree return msg, context, statedb, nil } // Not yet the searched for transaction, execute on top of the current state - vmenv := vm.NewEVM(context, statedb, api.config, vm.Config{}) + vmenv := vm.NewEVM(context, statedb, api.eth.blockchain.Config(), vm.Config{}) if _, _, _, _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { return nil, vm.Context{}, nil, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) } diff --git a/eth/backend.go b/eth/backend.go index 2a9d56c5c144..83e05e96a88e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -26,6 +26,7 @@ import ( "sync/atomic" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" @@ -46,6 +47,7 @@ import ( "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" @@ -54,17 +56,18 @@ import ( type LesServer interface { Start(srvr *p2p.Server) Stop() + APIs() []rpc.API Protocols() []p2p.Protocol SetBloomBitsIndexer(bbIndexer *core.ChainIndexer) + SetContractBackend(bind.ContractBackend) } // Ethereum implements the Ethereum full node service. type Ethereum struct { - config *Config - chainConfig *params.ChainConfig + config *Config // Channel for shutting down the service - shutdownChan chan bool // Channel for shutting down the Ethereum + shutdownChan chan bool // Handlers txPool *core.TxPool @@ -99,6 +102,14 @@ func (s *Ethereum) AddLesServer(ls LesServer) { ls.SetBloomBitsIndexer(s.bloomIndexer) } +// SetClient sets a rpc client which connecting to our local node. +func (s *Ethereum) SetContractBackend(backend bind.ContractBackend) { + // Pass the rpc client to les server if it is enabled. + if s.lesServer != nil { + s.lesServer.SetContractBackend(backend) + } +} + // New creates a new Ethereum object (including the // initialisation of the common Ethereum object) func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { @@ -109,16 +120,22 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if !config.SyncMode.IsValid() { return nil, fmt.Errorf("invalid sync mode %d", config.SyncMode) } - if config.MinerGasPrice == nil || config.MinerGasPrice.Cmp(common.Big0) <= 0 { - log.Warn("Sanitizing invalid miner gas price", "provided", config.MinerGasPrice, "updated", DefaultConfig.MinerGasPrice) - config.MinerGasPrice = new(big.Int).Set(DefaultConfig.MinerGasPrice) + if config.Miner.GasPrice == nil || config.Miner.GasPrice.Cmp(common.Big0) <= 0 { + log.Warn("Sanitizing invalid miner gas price", "provided", config.Miner.GasPrice, "updated", DefaultConfig.Miner.GasPrice) + config.Miner.GasPrice = new(big.Int).Set(DefaultConfig.Miner.GasPrice) + } + if config.NoPruning && config.TrieDirtyCache > 0 { + config.TrieCleanCache += config.TrieDirtyCache + config.TrieDirtyCache = 0 } + log.Info("Allocated trie memory caches", "clean", common.StorageSize(config.TrieCleanCache)*1024*1024, "dirty", common.StorageSize(config.TrieDirtyCache)*1024*1024) + // Assemble the Ethereum object - chainDb, err := CreateDB(ctx, config, "chaindata") + chainDb, err := ctx.OpenDatabaseWithFreezer("chaindata", config.DatabaseCache, config.DatabaseHandles, config.DatabaseFreezer, "eth/db/chaindata/") if err != nil { return nil, err } - chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.ConstantinopleOverride) + chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul) if _, ok := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !ok { return nil, genesisErr } @@ -127,28 +144,31 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { eth := &Ethereum{ config: config, chainDb: chainDb, - chainConfig: chainConfig, eventMux: ctx.EventMux, accountManager: ctx.AccountManager, - engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.MinerNotify, config.MinerNoverify, chainDb), + engine: CreateConsensusEngine(ctx, chainConfig, &config.Ethash, config.Miner.Notify, config.Miner.Noverify, chainDb), shutdownChan: make(chan bool), networkID: config.NetworkId, - gasPrice: config.MinerGasPrice, - etherbase: config.Etherbase, + gasPrice: config.Miner.GasPrice, + etherbase: config.Miner.Etherbase, bloomRequests: make(chan chan *bloombits.Retrieval), bloomIndexer: NewBloomIndexer(chainDb, params.BloomBitsBlocks, params.BloomConfirms), } - log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId) + bcVersion := rawdb.ReadDatabaseVersion(chainDb) + var dbVer = "" + if bcVersion != nil { + dbVer = fmt.Sprintf("%d", *bcVersion) + } + log.Info("Initialising Ethereum protocol", "versions", ProtocolVersions, "network", config.NetworkId, "dbversion", dbVer) if !config.SkipBcVersionCheck { - bcVersion := rawdb.ReadDatabaseVersion(chainDb) if bcVersion != nil && *bcVersion > core.BlockChainVersion { return nil, fmt.Errorf("database version is v%d, Geth %s only supports v%d", *bcVersion, params.VersionWithMeta, core.BlockChainVersion) - } else if bcVersion != nil && *bcVersion < core.BlockChainVersion { - log.Warn("Upgrade blockchain database version", "from", *bcVersion, "to", core.BlockChainVersion) + } else if bcVersion == nil || *bcVersion < core.BlockChainVersion { + log.Warn("Upgrade blockchain database version", "from", dbVer, "to", core.BlockChainVersion) + rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } - rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } var ( vmConfig = vm.Config{ @@ -156,9 +176,15 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { EWASMInterpreter: config.EWASMInterpreter, EVMInterpreter: config.EVMInterpreter, } - cacheConfig = &core.CacheConfig{Disabled: config.NoPruning, TrieCleanLimit: config.TrieCleanCache, TrieDirtyLimit: config.TrieDirtyCache, TrieTimeLimit: config.TrieTimeout} + cacheConfig = &core.CacheConfig{ + TrieCleanLimit: config.TrieCleanCache, + TrieCleanNoPrefetch: config.NoPrefetch, + TrieDirtyLimit: config.TrieDirtyCache, + TrieDirtyDisabled: config.NoPruning, + TrieTimeLimit: config.TrieTimeout, + } ) - eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, eth.chainConfig, eth.engine, vmConfig, eth.shouldPreserve) + eth.blockchain, err = core.NewBlockChain(chainDb, cacheConfig, chainConfig, eth.engine, vmConfig, eth.shouldPreserve) if err != nil { return nil, err } @@ -173,19 +199,24 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if config.TxPool.Journal != "" { config.TxPool.Journal = ctx.ResolvePath(config.TxPool.Journal) } - eth.txPool = core.NewTxPool(config.TxPool, eth.chainConfig, eth.blockchain) + eth.txPool = core.NewTxPool(config.TxPool, chainConfig, eth.blockchain) - if eth.protocolManager, err = NewProtocolManager(eth.chainConfig, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, config.Whitelist); err != nil { + // Permit the downloader to use the trie cache allowance during fast sync + cacheLimit := cacheConfig.TrieCleanLimit + cacheConfig.TrieDirtyLimit + checkpoint := config.Checkpoint + if checkpoint == nil { + checkpoint = params.TrustedCheckpoints[genesisHash] + } + if eth.protocolManager, err = NewProtocolManager(chainConfig, checkpoint, config.SyncMode, config.NetworkId, eth.eventMux, eth.txPool, eth.engine, eth.blockchain, chainDb, cacheLimit, config.Whitelist); err != nil { return nil, err } + eth.miner = miner.New(eth, &config.Miner, chainConfig, eth.EventMux(), eth.engine, eth.isLocalBlock) + eth.miner.SetExtra(makeExtraData(config.Miner.ExtraData)) - eth.miner = miner.New(eth, eth.chainConfig, eth.EventMux(), eth.engine, config.MinerRecommit, config.MinerGasFloor, config.MinerGasCeil, eth.isLocalBlock) - eth.miner.SetExtra(makeExtraData(config.MinerExtraData)) - - eth.APIBackend = &EthAPIBackend{eth, nil} + eth.APIBackend = &EthAPIBackend{ctx.ExtRPCEnabled(), eth, nil} gpoParams := config.GPO if gpoParams.Default == nil { - gpoParams.Default = config.MinerGasPrice + gpoParams.Default = config.Miner.GasPrice } eth.APIBackend.gpo = gasprice.NewOracle(eth.APIBackend, gpoParams) @@ -209,18 +240,6 @@ func makeExtraData(extra []byte) []byte { return extra } -// CreateDB creates the chain database. -func CreateDB(ctx *node.ServiceContext, config *Config, name string) (ethdb.Database, error) { - db, err := ctx.OpenDatabase(name, config.DatabaseCache, config.DatabaseHandles) - if err != nil { - return nil, err - } - if db, ok := db.(*ethdb.LDBDatabase); ok { - db.Meter("eth/db/chaindata/") - } - return db, nil -} - // CreateConsensusEngine creates the required type of consensus engine instance for an Ethereum service func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainConfig, config *ethash.Config, notify []string, noverify bool, db ethdb.Database) consensus.Engine { // If proof-of-authority is requested, set it up @@ -257,9 +276,18 @@ func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainCo func (s *Ethereum) APIs() []rpc.API { apis := ethapi.GetAPIs(s.APIBackend) + // Append any APIs exposed explicitly by the les server + if s.lesServer != nil { + apis = append(apis, s.lesServer.APIs()...) + } // Append any APIs exposed explicitly by the consensus engine apis = append(apis, s.engine.APIs(s.BlockChain())...) + // Append any APIs exposed explicitly by the les server + if s.lesServer != nil { + apis = append(apis, s.lesServer.APIs()...) + } + // Append all the local APIs and return return append(apis, []rpc.API{ { @@ -299,7 +327,7 @@ func (s *Ethereum) APIs() []rpc.API { }, { Namespace: "debug", Version: "1.0", - Service: NewPrivateDebugAPI(s.chainConfig, s), + Service: NewPrivateDebugAPI(s), }, { Namespace: "net", Version: "1.0", @@ -434,7 +462,7 @@ func (s *Ethereum) StartMining(threads int) error { log.Error("Etherbase account unavailable locally", "err", err) return fmt.Errorf("signer missing: %v", err) } - clique.Authorize(eb, wallet.SignHash) + clique.Authorize(eb, wallet.SignData) } // If mining is started, we can disable the transaction rejection mechanism // introduced to speed sync times. @@ -469,22 +497,31 @@ func (s *Ethereum) EventMux() *event.TypeMux { return s.eventMux } func (s *Ethereum) Engine() consensus.Engine { return s.engine } func (s *Ethereum) ChainDb() ethdb.Database { return s.chainDb } func (s *Ethereum) IsListening() bool { return true } // Always listening -func (s *Ethereum) EthVersion() int { return int(s.protocolManager.SubProtocols[0].Version) } +func (s *Ethereum) EthVersion() int { return int(ProtocolVersions[0]) } func (s *Ethereum) NetVersion() uint64 { return s.networkID } func (s *Ethereum) Downloader() *downloader.Downloader { return s.protocolManager.downloader } +func (s *Ethereum) Synced() bool { return atomic.LoadUint32(&s.protocolManager.acceptTxs) == 1 } +func (s *Ethereum) ArchiveMode() bool { return s.config.NoPruning } // Protocols implements node.Service, returning all the currently configured // network protocols to start. func (s *Ethereum) Protocols() []p2p.Protocol { - if s.lesServer == nil { - return s.protocolManager.SubProtocols + protos := make([]p2p.Protocol, len(ProtocolVersions)) + for i, vsn := range ProtocolVersions { + protos[i] = s.protocolManager.makeProtocol(vsn) + protos[i].Attributes = []enr.Entry{s.currentEthEntry()} } - return append(s.protocolManager.SubProtocols, s.lesServer.Protocols()...) + if s.lesServer != nil { + protos = append(protos, s.lesServer.Protocols()...) + } + return protos } // Start implements node.Service, starting all internal goroutines needed by the // Ethereum protocol implementation. func (s *Ethereum) Start(srvr *p2p.Server) error { + s.startEthEntryUpdate(srvr.LocalNode()) + // Start the bloom bits servicing goroutines s.startBloomHandlers(params.BloomBitsBlocks) diff --git a/eth/bloombits.go b/eth/bloombits.go index c7bb561402ef..9a31997d6002 100644 --- a/eth/bloombits.go +++ b/eth/bloombits.go @@ -102,7 +102,7 @@ func NewBloomIndexer(db ethdb.Database, size, confirms uint64) *core.ChainIndexe db: db, size: size, } - table := ethdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) + table := rawdb.NewTable(db, string(rawdb.BloomBitsIndexPrefix)) return core.NewChainIndexer(db, table, backend, size, confirms, bloomThrottling, "bloombits") } diff --git a/eth/config.go b/eth/config.go index 0e8cf82b54a3..221b24add8b9 100644 --- a/eth/config.go +++ b/eth/config.go @@ -25,11 +25,11 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/miner" "github.com/ethereum/go-ethereum/params" ) @@ -43,17 +43,19 @@ var DefaultConfig = Config{ DatasetsInMem: 1, DatasetsOnDisk: 2, }, - NetworkId: 11, - LightPeers: 100, - DatabaseCache: 512, - TrieCleanCache: 256, - TrieDirtyCache: 256, - TrieTimeout: 60 * time.Minute, - MinerGasFloor: 8000000, - MinerGasCeil: 8000000, - MinerGasPrice: big.NewInt(80 * params.GWei), - MinerRecommit: 3 * time.Second, - + NetworkId: 11, + LightPeers: 100, + UltraLightFraction: 75, + DatabaseCache: 512, + TrieCleanCache: 256, + TrieDirtyCache: 256, + TrieTimeout: 60 * time.Minute, + Miner: miner.Config{ + GasFloor: 8000000, + GasCeil: 8000000, + GasPrice: big.NewInt(80 * params.GWei), + Recommit: 3 * time.Second, + }, TxPool: core.DefaultTxPoolConfig, GPO: gasprice.Config{ Blocks: 20, @@ -68,14 +70,21 @@ func init() { home = user.HomeDir } } - if runtime.GOOS == "windows" { - DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "AppData", "Ethash") + if runtime.GOOS == "darwin" { + DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "Library", "Ethash") + } else if runtime.GOOS == "windows" { + localappdata := os.Getenv("LOCALAPPDATA") + if localappdata != "" { + DefaultConfig.Ethash.DatasetDir = filepath.Join(localappdata, "Ethash") + } else { + DefaultConfig.Ethash.DatasetDir = filepath.Join(home, "AppData", "Local", "Ethash") + } } else { DefaultConfig.Ethash.DatasetDir = filepath.Join(home, ".ethash") } } -//go:generate gencodec -type Config -field-override configMarshaling -formats toml -out gen_config.go +//go:generate gencodec -type Config -formats toml -out gen_config.go type Config struct { // The genesis block, which is inserted if the database is empty. @@ -85,32 +94,36 @@ type Config struct { // Protocol options NetworkId uint64 // Network ID to use for selecting peers to connect to SyncMode downloader.SyncMode - NoPruning bool + + NoPruning bool // Whether to disable pruning and flush everything to disk + NoPrefetch bool // Whether to disable prefetching and only load state on demand // Whitelist of required block number -> hash values to accept Whitelist map[uint64]common.Hash `toml:"-"` // Light client options - LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests - LightPeers int `toml:",omitempty"` // Maximum number of LES client peers + LightServ int `toml:",omitempty"` // Maximum percentage of time allowed for serving LES requests + LightIngress int `toml:",omitempty"` // Incoming bandwidth limit for light servers + LightEgress int `toml:",omitempty"` // Outgoing bandwidth limit for light servers + LightPeers int `toml:",omitempty"` // Maximum number of LES client peers + + // Ultra Light client options + UltraLightServers []string `toml:",omitempty"` // List of trusted ultra light servers + UltraLightFraction int `toml:",omitempty"` // Percentage of trusted servers to accept an announcement + UltraLightOnlyAnnounce bool `toml:",omitempty"` // Whether to only announce headers, or also serve them // Database options SkipBcVersionCheck bool `toml:"-"` DatabaseHandles int `toml:"-"` DatabaseCache int - TrieCleanCache int - TrieDirtyCache int - TrieTimeout time.Duration - - // Mining-related options - Etherbase common.Address `toml:",omitempty"` - MinerNotify []string `toml:",omitempty"` - MinerExtraData []byte `toml:",omitempty"` - MinerGasFloor uint64 - MinerGasCeil uint64 - MinerGasPrice *big.Int - MinerRecommit time.Duration - MinerNoverify bool + DatabaseFreezer string + + TrieCleanCache int + TrieDirtyCache int + TrieTimeout time.Duration + + // Mining options + Miner miner.Config // Ethash options Ethash ethash.Config @@ -133,10 +146,15 @@ type Config struct { // Type of the EVM interpreter ("" for default) EVMInterpreter string - // Constantinople block override (TODO: remove after the fork) - ConstantinopleOverride *big.Int -} + // RPCGasCap is the global gas cap for eth-call variants. + RPCGasCap *big.Int `toml:",omitempty"` + + // Checkpoint is a hardcoded checkpoint which can be nil. + Checkpoint *params.TrustedCheckpoint `toml:",omitempty"` + + // CheckpointOracle is the configuration for checkpoint oracle. + CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` -type configMarshaling struct { - MinerExtraData hexutil.Bytes + // Istanbul block override (TODO: remove after the fork) + OverrideIstanbul *big.Int } diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 2d7cc18fd3bf..74f6d7b3dce3 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -25,7 +25,7 @@ import ( "sync/atomic" "time" - ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/trie" ) var ( @@ -45,20 +46,20 @@ var ( MaxReceiptFetch = 256 // Amount of transaction receipts to allow fetching per request MaxStateFetch = 384 // Amount of node state values to allow fetching per request - MaxForkAncestry = 3 * params.EpochDuration // Maximum chain reorganisation - rttMinEstimate = 2 * time.Second // Minimum round-trip time to target for download requests - rttMaxEstimate = 120 * time.Second // Maximum round-trip time to target for download requests - rttMinConfidence = 0.1 // Worse confidence factor in our estimated RTT value - ttlScaling = 30 // Constant scaling factor for RTT -> TTL conversion - ttlLimit = 10 * time.Minute // Maximum TTL allowance to prevent reaching crazy timeouts + rttMinEstimate = 2 * time.Second // Minimum round-trip time to target for download requests + rttMaxEstimate = 120 * time.Second // Maximum round-trip time to target for download requests + rttMinConfidence = 0.1 // Worse confidence factor in our estimated RTT value + ttlScaling = 3 // Constant scaling factor for RTT -> TTL conversion + ttlLimit = 10 * time.Minute // Maximum TTL allowance to prevent reaching crazy timeouts qosTuningPeers = 5 // Number of peers to tune based on (best peers) qosConfidenceCap = 10 // Number of peers above which not to modify RTT confidence qosTuningImpact = 0.25 // Impact that a new tuning target has on the previous value - maxQueuedHeaders = 32 * 1024 // [eth/62] Maximum number of headers to queue for import (DOS protection) - maxHeadersProcess = 2048 // Number of header download results to import at once into the chain - maxResultsProcess = 2048 // Number of content download results to import at once into the chain + maxQueuedHeaders = 32 * 1024 // [eth/62] Maximum number of headers to queue for import (DOS protection) + maxHeadersProcess = 2048 // Number of header download results to import at once into the chain + maxResultsProcess = 2048 // Number of content download results to import at once into the chain + maxForkAncestry uint64 = params.ImmutabilityThreshold // Maximum chain reorganisation (locally redeclared so tests can reduce it) reorgProtThreshold = 48 // Threshold number of recent blocks to disable mini reorg protection reorgProtHeaderDelay = 2 // Number of headers to delay delivering to cover mini reorgs @@ -75,37 +76,40 @@ var ( errUnknownPeer = errors.New("peer is unknown or unhealthy") errBadPeer = errors.New("action from bad peer ignored") errStallingPeer = errors.New("peer is stalling") + errUnsyncedPeer = errors.New("unsynced peer") errNoPeers = errors.New("no peers to keep download active") errTimeout = errors.New("timeout") errEmptyHeaderSet = errors.New("empty header set by peer") errPeersUnavailable = errors.New("no peers available or all tried for download") errInvalidAncestor = errors.New("retrieved ancestor is invalid") errInvalidChain = errors.New("retrieved hash chain is invalid") - errInvalidBlock = errors.New("retrieved block is invalid") errInvalidBody = errors.New("retrieved block body is invalid") errInvalidReceipt = errors.New("retrieved receipt is invalid") - errCancelBlockFetch = errors.New("block download canceled (requested)") - errCancelHeaderFetch = errors.New("block header download canceled (requested)") - errCancelBodyFetch = errors.New("block body download canceled (requested)") - errCancelReceiptFetch = errors.New("receipt download canceled (requested)") errCancelStateFetch = errors.New("state data download canceled (requested)") - errCancelHeaderProcessing = errors.New("header processing canceled (requested)") errCancelContentProcessing = errors.New("content processing canceled (requested)") + errCanceled = errors.New("syncing canceled (requested)") errNoSyncActive = errors.New("no sync active") errTooOld = errors.New("peer doesn't speak recent enough protocol version (need version >= 62)") ) type Downloader struct { + // WARNING: The `rttEstimate` and `rttConfidence` fields are accessed atomically. + // On 32 bit platforms, only 64-bit aligned fields can be atomic. The struct is + // guaranteed to be so aligned, so take advantage of that. For more information, + // see https://golang.org/pkg/sync/atomic/#pkg-note-BUG. + rttEstimate uint64 // Round trip time to target for download requests + rttConfidence uint64 // Confidence in the estimated RTT (unit: millionths to allow atomic ops) + mode SyncMode // Synchronisation mode defining the strategy used (per sync cycle) mux *event.TypeMux // Event multiplexer to announce sync operation events - genesis uint64 // Genesis block number to limit sync to (e.g. light client CHT) - queue *queue // Scheduler for selecting the hashes to download - peers *peerSet // Set of active peers from which download can proceed - stateDB ethdb.Database + checkpoint uint64 // Checkpoint block number to enforce head against (e.g. fast sync) + genesis uint64 // Genesis block number to limit sync to (e.g. light client CHT) + queue *queue // Scheduler for selecting the hashes to download + peers *peerSet // Set of active peers from which download can proceed - rttEstimate uint64 // Round trip time to target for download requests - rttConfidence uint64 // Confidence in the estimated RTT (unit: millionths to allow atomic ops) + stateDB ethdb.Database // Database to state sync into (and deduplicate via) + stateBloom *trie.SyncBloom // Bloom filter for fast trie node existence checks // Statistics syncStatsChainOrigin uint64 // Origin block number where syncing started at @@ -124,6 +128,7 @@ type Downloader struct { synchronising int32 notified int32 committed int32 + ancientLimit uint64 // The maximum block number which can be regarded as ancient data. // Channels headerCh chan dataPack // [eth/62] Channel receiving inbound block headers @@ -201,19 +206,19 @@ type BlockChain interface { InsertChain(types.Blocks) (int, error) // InsertReceiptChain inserts a batch of receipts into the local chain. - InsertReceiptChain(types.Blocks, []types.Receipts) (int, error) + InsertReceiptChain(types.Blocks, []types.Receipts, uint64) (int, error) } // New creates a new downloader to fetch hashes and blocks from remote peers. -func New(mode SyncMode, stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn) *Downloader { +func New(checkpoint uint64, stateDb ethdb.Database, stateBloom *trie.SyncBloom, mux *event.TypeMux, chain BlockChain, lightchain LightChain, dropPeer peerDropFn) *Downloader { if lightchain == nil { lightchain = chain } - dl := &Downloader{ - mode: mode, stateDB: stateDb, + stateBloom: stateBloom, mux: mux, + checkpoint: checkpoint, queue: newQueue(), peers: newPeerSet(), rttEstimate: uint64(rttMaxEstimate), @@ -253,13 +258,15 @@ func (d *Downloader) Progress() ethereum.SyncProgress { defer d.syncStatsLock.RUnlock() current := uint64(0) - switch d.mode { - case FullSync: + switch { + case d.blockchain != nil && d.mode == FullSync: current = d.blockchain.CurrentBlock().NumberU64() - case FastSync: + case d.blockchain != nil && d.mode == FastSync: current = d.blockchain.CurrentFastBlock().NumberU64() - case LightSync: + case d.lightchain != nil: current = d.lightchain.CurrentHeader().Number.Uint64() + default: + log.Error("Unknown downloader chain/mode combo", "light", d.lightchain != nil, "full", d.blockchain != nil, "mode", d.mode) } return ethereum.SyncProgress{ StartingBlock: d.syncStatsChainOrigin, @@ -307,14 +314,6 @@ func (d *Downloader) UnregisterPeer(id string) error { } d.queue.Revoke(id) - // If this peer was the master peer, abort sync immediately - d.cancelLock.RLock() - master := id == d.cancelPeer - d.cancelLock.RUnlock() - - if master { - d.cancel() - } return nil } @@ -324,9 +323,9 @@ func (d *Downloader) Synchronise(id string, head common.Hash, td *big.Int, mode err := d.synchronise(id, head, td, mode) switch err { case nil: - case errBusy: + case errBusy, errCanceled: - case errTimeout, errBadPeer, errStallingPeer, + case errTimeout, errBadPeer, errStallingPeer, errUnsyncedPeer, errEmptyHeaderSet, errPeersUnavailable, errTooOld, errInvalidAncestor, errInvalidChain: log.Warn("Synchronisation failed, dropping peer", "peer", id, "err", err) @@ -361,6 +360,12 @@ func (d *Downloader) synchronise(id string, hash common.Hash, td *big.Int, mode if atomic.CompareAndSwapInt32(&d.notified, 0, 1) { log.Info("Block synchronisation started") } + // If we are already full syncing, but have a fast-sync bloom filter laying + // around, make sure it does't use memory any more. This is a special case + // when the user attempts to fast sync a new empty network. + if mode == FullSync && d.stateBloom != nil { + d.stateBloom.Close() + } // Reset the queue, peer set and wake channels to clean any internal leftover state d.queue.Reset() d.peers.Reset() @@ -415,7 +420,8 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I if err != nil { d.mux.Post(FailedEvent{err}) } else { - d.mux.Post(DoneEvent{}) + latest := d.lightchain.CurrentHeader() + d.mux.Post(DoneEvent{latest}) } }() if p.version < 62 { @@ -424,7 +430,7 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I log.Debug("Synchronising with the network", "peer", p.id, "eth", p.version, "head", hash, "td", td, "mode", d.mode) defer func(start time.Time) { - log.Debug("Synchronisation terminated", "elapsed", time.Since(start)) + log.Debug("Synchronisation terminated", "elapsed", common.PrettyDuration(time.Since(start))) }(time.Now()) // Look up the sync boundaries: the common ancestor and the target block @@ -461,12 +467,49 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I if d.mode == FastSync && pivot != 0 { d.committed = 0 } + if d.mode == FastSync { + // Set the ancient data limitation. + // If we are running fast sync, all block data older than ancientLimit will be + // written to the ancient store. More recent data will be written to the active + // database and will wait for the freezer to migrate. + // + // If there is a checkpoint available, then calculate the ancientLimit through + // that. Otherwise calculate the ancient limit through the advertised height + // of the remote peer. + // + // The reason for picking checkpoint first is that a malicious peer can give us + // a fake (very high) height, forcing the ancient limit to also be very high. + // The peer would start to feed us valid blocks until head, resulting in all of + // the blocks might be written into the ancient store. A following mini-reorg + // could cause issues. + if d.checkpoint != 0 && d.checkpoint > maxForkAncestry+1 { + d.ancientLimit = d.checkpoint + } else if height > maxForkAncestry+1 { + d.ancientLimit = height - maxForkAncestry - 1 + } + frozen, _ := d.stateDB.Ancients() // Ignore the error here since light client can also hit here. + // If a part of blockchain data has already been written into active store, + // disable the ancient style insertion explicitly. + if origin >= frozen && frozen != 0 { + d.ancientLimit = 0 + log.Info("Disabling direct-ancient mode", "origin", origin, "ancient", frozen-1) + } else if d.ancientLimit > 0 { + log.Debug("Enabling direct-ancient mode", "ancient", d.ancientLimit) + } + // Rewind the ancient store and blockchain if reorg happens. + if origin+1 < frozen { + var hashes []common.Hash + for i := origin + 1; i < d.lightchain.CurrentHeader().Number.Uint64(); i++ { + hashes = append(hashes, rawdb.ReadCanonicalHash(d.stateDB, i)) + } + d.lightchain.Rollback(hashes) + } + } // Initiate the sync using a concurrent header and content retrieval algorithm d.queue.Prepare(origin+1, d.mode) if d.syncInitHook != nil { d.syncInitHook(origin, height) } - fetchers := []func() error{ func() error { return d.fetchHeaders(p, origin+1, pivot) }, // Headers are always retrieved func() error { return d.fetchBodies(origin + 1) }, // Bodies are retrieved during normal and fast sync @@ -499,7 +542,7 @@ func (d *Downloader) spawnSync(fetchers []func() error) error { // it has processed the queue. d.queue.Close() } - if err = <-errc; err != nil { + if err = <-errc; err != nil && err != errCanceled { break } } @@ -530,6 +573,9 @@ func (d *Downloader) cancel() { func (d *Downloader) Cancel() { d.cancel() d.cancelWg.Wait() + + d.ancientLimit = 0 + log.Debug("Reset ancient limit to zero") } // Terminate interrupts the downloader, canceling all pending operations. @@ -562,7 +608,7 @@ func (d *Downloader) fetchHeight(p *peerConnection) (*types.Header, error) { for { select { case <-d.cancelCh: - return nil, errCancelBlockFetch + return nil, errCanceled case packet := <-d.headerCh: // Discard anything not from the origin peer @@ -577,6 +623,10 @@ func (d *Downloader) fetchHeight(p *peerConnection) (*types.Header, error) { return nil, errBadPeer } head := headers[0] + if (d.mode == FastSync || d.mode == LightSync) && head.Number.Uint64() < d.checkpoint { + p.log.Warn("Remote head below checkpoint", "number", head.Number, "hash", head.Hash()) + return nil, errUnsyncedPeer + } p.log.Debug("Remote head header identified", "number", head.Number, "hash", head.Hash()) return head, nil @@ -664,30 +714,32 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) localHeight = d.lightchain.CurrentHeader().Number.Uint64() } p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight) - if localHeight >= MaxForkAncestry { + + // Recap floor value for binary search + if localHeight >= maxForkAncestry { // We're above the max reorg threshold, find the earliest fork point - floor = int64(localHeight - MaxForkAncestry) - - // If we're doing a light sync, ensure the floor doesn't go below the CHT, as - // all headers before that point will be missing. - if d.mode == LightSync { - // If we dont know the current CHT position, find it - if d.genesis == 0 { - header := d.lightchain.CurrentHeader() - for header != nil { - d.genesis = header.Number.Uint64() - if floor >= int64(d.genesis)-1 { - break - } - header = d.lightchain.GetHeaderByHash(header.ParentHash) + floor = int64(localHeight - maxForkAncestry) + } + // If we're doing a light sync, ensure the floor doesn't go below the CHT, as + // all headers before that point will be missing. + if d.mode == LightSync { + // If we dont know the current CHT position, find it + if d.genesis == 0 { + header := d.lightchain.CurrentHeader() + for header != nil { + d.genesis = header.Number.Uint64() + if floor >= int64(d.genesis)-1 { + break } + header = d.lightchain.GetHeaderByHash(header.ParentHash) } - // We already know the "genesis" block number, cap floor to that - if floor < int64(d.genesis)-1 { - floor = int64(d.genesis) - 1 - } + } + // We already know the "genesis" block number, cap floor to that + if floor < int64(d.genesis)-1 { + floor = int64(d.genesis) - 1 } } + from, count, skip, max := calculateRequestSpan(remoteHeight, localHeight) p.log.Trace("Span searching for common ancestor", "count", count, "from", from, "skip", skip) @@ -702,7 +754,7 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) for finished := false; !finished; { select { case <-d.cancelCh: - return 0, errCancelHeaderFetch + return 0, errCanceled case packet := <-d.headerCh: // Discard anything not from the origin peer @@ -718,7 +770,7 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) } // Make sure the peer's reply conforms to the request for i, header := range headers { - expectNumber := from + int64(i)*int64((skip+1)) + expectNumber := from + int64(i)*int64(skip+1) if number := header.Number.Int64(); number != expectNumber { p.log.Warn("Head headers broke chain ordering", "index", i, "requested", expectNumber, "received", number) log.Error("Head headers broke chain ordering", "index", i, "requested", expectNumber, "received", number) @@ -789,7 +841,7 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) for arrived := false; !arrived; { select { case <-d.cancelCh: - return 0, errCancelHeaderFetch + return 0, errCanceled case packer := <-d.headerCh: // Discard anything not from the origin peer @@ -884,12 +936,13 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) } } // Start pulling the header chain skeleton until all is done + ancestor := from getHeaders(from) for { select { case <-d.cancelCh: - return errCancelHeaderFetch + return errCanceled case packet := <-d.headerCh: // Make sure the active peer is giving us the skeleton headers @@ -916,7 +969,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) getHeaders(from) continue case <-d.cancelCh: - return errCancelHeaderFetch + return errCanceled } } // Pivot done (or not in fast sync) and no more headers, terminate the process @@ -925,7 +978,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) case d.headerProcCh <- nil: return nil case <-d.cancelCh: - return errCancelHeaderFetch + return errCanceled } } headers := packet.(*headerPack).headers @@ -945,7 +998,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) // chain errors. if n := len(headers); n > 0 { // Retrieve the current head we're at - head := uint64(0) + var head uint64 if d.mode == LightSync { head = d.lightchain.CurrentHeader().Number.Uint64() } else { @@ -954,6 +1007,12 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) head = full } } + // If the head is below the common ancestor, we're actually deduplicating + // already existing chain segments, so use the ancestor as the fake head. + // Otherwise we might end up delaying header deliveries pointlessly. + if head < ancestor { + head = ancestor + } // If the head is way older than this batch, delay the last few headers if head+uint64(reorgProtThreshold) < headers[n-1].Number.Uint64() { delay := reorgProtHeaderDelay @@ -970,7 +1029,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) select { case d.headerProcCh <- headers: case <-d.cancelCh: - return errCancelHeaderFetch + return errCanceled } from += uint64(len(headers)) getHeaders(from) @@ -982,7 +1041,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64) getHeaders(from) continue case <-d.cancelCh: - return errCancelHeaderFetch + return errCanceled } } @@ -1041,7 +1100,7 @@ func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header) ( capacity = func(p *peerConnection) int { return p.HeaderCapacity(d.requestRTT()) } setIdle = func(p *peerConnection, accepted int) { p.SetHeadersIdle(accepted) } ) - err := d.fetchParts(errCancelHeaderFetch, d.headerCh, deliver, d.queue.headerContCh, expire, + err := d.fetchParts(d.headerCh, deliver, d.queue.headerContCh, expire, d.queue.PendingHeaders, d.queue.InFlightHeaders, throttle, reserve, nil, fetch, d.queue.CancelHeaders, capacity, d.peers.HeaderIdlePeers, setIdle, "headers") @@ -1067,7 +1126,7 @@ func (d *Downloader) fetchBodies(from uint64) error { capacity = func(p *peerConnection) int { return p.BlockCapacity(d.requestRTT()) } setIdle = func(p *peerConnection, accepted int) { p.SetBodiesIdle(accepted) } ) - err := d.fetchParts(errCancelBodyFetch, d.bodyCh, deliver, d.bodyWakeCh, expire, + err := d.fetchParts(d.bodyCh, deliver, d.bodyWakeCh, expire, d.queue.PendingBlocks, d.queue.InFlightBlocks, d.queue.ShouldThrottleBlocks, d.queue.ReserveBodies, d.bodyFetchHook, fetch, d.queue.CancelBodies, capacity, d.peers.BodyIdlePeers, setIdle, "bodies") @@ -1091,7 +1150,7 @@ func (d *Downloader) fetchReceipts(from uint64) error { capacity = func(p *peerConnection) int { return p.ReceiptCapacity(d.requestRTT()) } setIdle = func(p *peerConnection, accepted int) { p.SetReceiptsIdle(accepted) } ) - err := d.fetchParts(errCancelReceiptFetch, d.receiptCh, deliver, d.receiptWakeCh, expire, + err := d.fetchParts(d.receiptCh, deliver, d.receiptWakeCh, expire, d.queue.PendingReceipts, d.queue.InFlightReceipts, d.queue.ShouldThrottleReceipts, d.queue.ReserveReceipts, d.receiptFetchHook, fetch, d.queue.CancelReceipts, capacity, d.peers.ReceiptIdlePeers, setIdle, "receipts") @@ -1124,7 +1183,7 @@ func (d *Downloader) fetchReceipts(from uint64) error { // - idle: network callback to retrieve the currently (type specific) idle peers that can be assigned tasks // - setIdle: network callback to set a peer back to idle and update its estimated capacity (traffic shaping) // - kind: textual label of the type being downloaded to display in log mesages -func (d *Downloader) fetchParts(errCancel error, deliveryCh chan dataPack, deliver func(dataPack) (int, error), wakeCh chan bool, +func (d *Downloader) fetchParts(deliveryCh chan dataPack, deliver func(dataPack) (int, error), wakeCh chan bool, expire func() map[string]int, pending func() int, inFlight func() bool, throttle func() bool, reserve func(*peerConnection, int) (*fetchRequest, bool, error), fetchHook func([]*types.Header), fetch func(*peerConnection, *fetchRequest) error, cancel func(*fetchRequest), capacity func(*peerConnection) int, idle func() ([]*peerConnection, int), setIdle func(*peerConnection, int), kind string) error { @@ -1140,7 +1199,7 @@ func (d *Downloader) fetchParts(errCancel error, deliveryCh chan dataPack, deliv for { select { case <-d.cancelCh: - return errCancel + return errCanceled case packet := <-deliveryCh: // If the peer was previously banned and failed to deliver its pack @@ -1211,12 +1270,23 @@ func (d *Downloader) fetchParts(errCancel error, deliveryCh chan dataPack, deliv setIdle(peer, 0) } else { peer.log.Debug("Stalling delivery, dropping", "type", kind) + if d.dropPeer == nil { // The dropPeer method is nil when `--copydb` is used for a local copy. // Timeouts can occur if e.g. compaction hits at the wrong time, and can be ignored peer.log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", pid) } else { d.dropPeer(pid) + + // If this peer was the master peer, abort sync immediately + d.cancelLock.RLock() + master := pid == d.cancelPeer + d.cancelLock.RUnlock() + + if master { + d.cancel() + return errTimeout + } } } } @@ -1289,7 +1359,7 @@ func (d *Downloader) fetchParts(errCancel error, deliveryCh chan dataPack, deliv // queue until the stream ends or a failure occurs. func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) error { // Keep a count of uncertain headers to roll back - rollback := []*types.Header{} + var rollback []*types.Header defer func() { if len(rollback) > 0 { // Flatten the headers and roll them back @@ -1321,7 +1391,7 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er for { select { case <-d.cancelCh: - return errCancelHeaderProcessing + return errCanceled case headers := <-d.headerProcCh: // Terminate header processing if we synced up @@ -1370,12 +1440,11 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er } // Otherwise split the chunk of headers into batches and process them gotHeaders = true - for len(headers) > 0 { // Terminate if something failed in between processing chunks select { case <-d.cancelCh: - return errCancelHeaderProcessing + return errCanceled default: } // Select the next chunk of headers to import @@ -1384,11 +1453,10 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er limit = len(headers) } chunk := headers[:limit] - // In case of header only syncing, validate the chunk immediately if d.mode == FastSync || d.mode == LightSync { // Collect the yet unknown headers to mark them as uncertain - unknown := make([]*types.Header, 0, len(headers)) + unknown := make([]*types.Header, 0, len(chunk)) for _, header := range chunk { if !d.lightchain.HasHeader(header.Hash(), header.Number.Uint64()) { unknown = append(unknown, header) @@ -1419,7 +1487,7 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er for d.queue.PendingBlocks() >= maxQueuedHeaders || d.queue.PendingReceipts() >= maxQueuedHeaders { select { case <-d.cancelCh: - return errCancelHeaderProcessing + return errCanceled case <-time.After(time.Second): } } @@ -1433,7 +1501,6 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er headers = headers[limit:] origin += uint64(limit) } - // Update the highest block number we know if a higher one is found. d.syncStatsLock.Lock() if d.syncStatsChainHeight < origin { @@ -1511,7 +1578,7 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { stateSync := d.syncState(latest.Root) defer stateSync.Cancel() go func() { - if err := stateSync.Wait(); err != nil && err != errCancelStateFetch { + if err := stateSync.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled { d.queue.Close() // wake up Results } }() @@ -1539,7 +1606,8 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { // If sync failed, stop select { case <-d.cancelCh: - return stateSync.Cancel() + stateSync.Cancel() + return errCanceled default: } } @@ -1569,7 +1637,7 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error { stateSync = d.syncState(P.Header.Root) defer stateSync.Cancel() go func() { - if err := stateSync.Wait(); err != nil && err != errCancelStateFetch { + if err := stateSync.Wait(); err != nil && err != errCancelStateFetch && err != errCanceled { d.queue.Close() // wake up Results } }() @@ -1639,7 +1707,7 @@ func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *state blocks[i] = types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles) receipts[i] = result.Receipts } - if index, err := d.blockchain.InsertReceiptChain(blocks, receipts); err != nil { + if index, err := d.blockchain.InsertReceiptChain(blocks, receipts, d.ancientLimit); err != nil { log.Debug("Downloaded item processing failed", "number", results[index].Header.Number, "hash", results[index].Header.Hash(), "err", err) return errInvalidChain } @@ -1649,13 +1717,24 @@ func (d *Downloader) commitFastSyncData(results []*fetchResult, stateSync *state func (d *Downloader) commitPivotBlock(result *fetchResult) error { block := types.NewBlockWithHeader(result.Header).WithBody(result.Transactions, result.Uncles) log.Debug("Committing fast sync pivot as new head", "number", block.Number(), "hash", block.Hash()) - if _, err := d.blockchain.InsertReceiptChain([]*types.Block{block}, []types.Receipts{result.Receipts}); err != nil { + + // Commit the pivot block as the new head, will require full sync from here on + if _, err := d.blockchain.InsertReceiptChain([]*types.Block{block}, []types.Receipts{result.Receipts}, d.ancientLimit); err != nil { return err } if err := d.blockchain.FastSyncCommitHead(block.Hash()); err != nil { return err } atomic.StoreInt32(&d.committed, 1) + + // If we had a bloom filter for the state sync, deallocate it now. Note, we only + // deallocate internally, but keep the empty wrapper. This ensures that if we do + // a rollback after committing the pivot and restarting fast sync, we don't end + // up using a nil bloom. Empty bloom is fine, it just returns that it does not + // have the info we need, so reach down to the database instead. + if d.stateBloom != nil { + d.stateBloom.Close() + } return nil } diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 1a42965d39bc..b23043b1c003 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -26,8 +26,9 @@ import ( "testing" "time" - ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" @@ -36,7 +37,7 @@ import ( // Reduce some of the parameters to make the tester faster. func init() { - MaxForkAncestry = uint64(10000) + maxForkAncestry = 10000 blockCacheItems = 1024 fsHeaderContCheck = 500 * time.Millisecond } @@ -56,6 +57,11 @@ type downloadTester struct { ownReceipts map[common.Hash]types.Receipts // Receipts belonging to the tester ownChainTd map[common.Hash]*big.Int // Total difficulties of the blocks in the local chain + ancientHeaders map[common.Hash]*types.Header // Ancient headers belonging to the tester + ancientBlocks map[common.Hash]*types.Block // Ancient blocks belonging to the tester + ancientReceipts map[common.Hash]types.Receipts // Ancient receipts belonging to the tester + ancientChainTd map[common.Hash]*big.Int // Ancient total difficulties of the blocks in the local chain + lock sync.RWMutex } @@ -70,10 +76,17 @@ func newTester() *downloadTester { ownBlocks: map[common.Hash]*types.Block{testGenesis.Hash(): testGenesis}, ownReceipts: map[common.Hash]types.Receipts{testGenesis.Hash(): nil}, ownChainTd: map[common.Hash]*big.Int{testGenesis.Hash(): testGenesis.Difficulty()}, + + // Initialize ancient store with test genesis block + ancientHeaders: map[common.Hash]*types.Header{testGenesis.Hash(): testGenesis.Header()}, + ancientBlocks: map[common.Hash]*types.Block{testGenesis.Hash(): testGenesis}, + ancientReceipts: map[common.Hash]types.Receipts{testGenesis.Hash(): nil}, + ancientChainTd: map[common.Hash]*big.Int{testGenesis.Hash(): testGenesis.Difficulty()}, } - tester.stateDb = ethdb.NewMemDatabase() + tester.stateDb = rawdb.NewMemoryDatabase() tester.stateDb.Put(testGenesis.Root().Bytes(), []byte{0x00}) - tester.downloader = New(FullSync, tester.stateDb, new(event.TypeMux), tester, nil, tester.dropPeer) + + tester.downloader = New(0, tester.stateDb, trie.NewSyncBloom(1, tester.stateDb), new(event.TypeMux), tester, nil, tester.dropPeer) return tester } @@ -120,6 +133,9 @@ func (dl *downloadTester) HasFastBlock(hash common.Hash, number uint64) bool { dl.lock.RLock() defer dl.lock.RUnlock() + if _, ok := dl.ancientReceipts[hash]; ok { + return true + } _, ok := dl.ownReceipts[hash] return ok } @@ -129,6 +145,10 @@ func (dl *downloadTester) GetHeaderByHash(hash common.Hash) *types.Header { dl.lock.RLock() defer dl.lock.RUnlock() + header := dl.ancientHeaders[hash] + if header != nil { + return header + } return dl.ownHeaders[hash] } @@ -137,6 +157,10 @@ func (dl *downloadTester) GetBlockByHash(hash common.Hash) *types.Block { dl.lock.RLock() defer dl.lock.RUnlock() + block := dl.ancientBlocks[hash] + if block != nil { + return block + } return dl.ownBlocks[hash] } @@ -146,6 +170,9 @@ func (dl *downloadTester) CurrentHeader() *types.Header { defer dl.lock.RUnlock() for i := len(dl.ownHashes) - 1; i >= 0; i-- { + if header := dl.ancientHeaders[dl.ownHashes[i]]; header != nil { + return header + } if header := dl.ownHeaders[dl.ownHashes[i]]; header != nil { return header } @@ -159,6 +186,12 @@ func (dl *downloadTester) CurrentBlock() *types.Block { defer dl.lock.RUnlock() for i := len(dl.ownHashes) - 1; i >= 0; i-- { + if block := dl.ancientBlocks[dl.ownHashes[i]]; block != nil { + if _, err := dl.stateDb.Get(block.Root().Bytes()); err == nil { + return block + } + return block + } if block := dl.ownBlocks[dl.ownHashes[i]]; block != nil { if _, err := dl.stateDb.Get(block.Root().Bytes()); err == nil { return block @@ -174,6 +207,9 @@ func (dl *downloadTester) CurrentFastBlock() *types.Block { defer dl.lock.RUnlock() for i := len(dl.ownHashes) - 1; i >= 0; i-- { + if block := dl.ancientBlocks[dl.ownHashes[i]]; block != nil { + return block + } if block := dl.ownBlocks[dl.ownHashes[i]]; block != nil { return block } @@ -185,7 +221,7 @@ func (dl *downloadTester) CurrentFastBlock() *types.Block { func (dl *downloadTester) FastSyncCommitHead(hash common.Hash) error { // For now only check that the state trie is correct if block := dl.GetBlockByHash(hash); block != nil { - _, err := trie.NewSecure(block.Root(), trie.NewDatabase(dl.stateDb), 0) + _, err := trie.NewSecure(block.Root(), trie.NewDatabase(dl.stateDb)) return err } return fmt.Errorf("non existent block: %x", hash[:4]) @@ -196,6 +232,9 @@ func (dl *downloadTester) GetTd(hash common.Hash, number uint64) *big.Int { dl.lock.RLock() defer dl.lock.RUnlock() + if td := dl.ancientChainTd[hash]; td != nil { + return td + } return dl.ownChainTd[hash] } @@ -252,7 +291,7 @@ func (dl *downloadTester) InsertChain(blocks types.Blocks) (i int, err error) { } // InsertReceiptChain injects a new batch of receipts into the simulated chain. -func (dl *downloadTester) InsertReceiptChain(blocks types.Blocks, receipts []types.Receipts) (i int, err error) { +func (dl *downloadTester) InsertReceiptChain(blocks types.Blocks, receipts []types.Receipts, ancientLimit uint64) (i int, err error) { dl.lock.Lock() defer dl.lock.Unlock() @@ -260,11 +299,25 @@ func (dl *downloadTester) InsertReceiptChain(blocks types.Blocks, receipts []typ if _, ok := dl.ownHeaders[blocks[i].Hash()]; !ok { return i, errors.New("unknown owner") } - if _, ok := dl.ownBlocks[blocks[i].ParentHash()]; !ok { - return i, errors.New("unknown parent") + if _, ok := dl.ancientBlocks[blocks[i].ParentHash()]; !ok { + if _, ok := dl.ownBlocks[blocks[i].ParentHash()]; !ok { + return i, errors.New("unknown parent") + } + } + if blocks[i].NumberU64() <= ancientLimit { + dl.ancientBlocks[blocks[i].Hash()] = blocks[i] + dl.ancientReceipts[blocks[i].Hash()] = receipts[i] + + // Migrate from active db to ancient db + dl.ancientHeaders[blocks[i].Hash()] = blocks[i].Header() + dl.ancientChainTd[blocks[i].Hash()] = new(big.Int).Add(dl.ancientChainTd[blocks[i].ParentHash()], blocks[i].Difficulty()) + + delete(dl.ownHeaders, blocks[i].Hash()) + delete(dl.ownChainTd, blocks[i].Hash()) + } else { + dl.ownBlocks[blocks[i].Hash()] = blocks[i] + dl.ownReceipts[blocks[i].Hash()] = receipts[i] } - dl.ownBlocks[blocks[i].Hash()] = blocks[i] - dl.ownReceipts[blocks[i].Hash()] = receipts[i] } return len(blocks), nil } @@ -282,6 +335,11 @@ func (dl *downloadTester) Rollback(hashes []common.Hash) { delete(dl.ownHeaders, hashes[i]) delete(dl.ownReceipts, hashes[i]) delete(dl.ownBlocks, hashes[i]) + + delete(dl.ancientChainTd, hashes[i]) + delete(dl.ancientHeaders, hashes[i]) + delete(dl.ancientReceipts, hashes[i]) + delete(dl.ancientBlocks, hashes[i]) } } @@ -409,13 +467,13 @@ func assertOwnForkedChain(t *testing.T, tester *downloadTester, common int, leng if tester.downloader.mode == LightSync { blocks, receipts = 1, 1 } - if hs := len(tester.ownHeaders); hs != headers { + if hs := len(tester.ownHeaders) + len(tester.ancientHeaders) - 1; hs != headers { t.Fatalf("synchronised headers mismatch: have %v, want %v", hs, headers) } - if bs := len(tester.ownBlocks); bs != blocks { + if bs := len(tester.ownBlocks) + len(tester.ancientBlocks) - 1; bs != blocks { t.Fatalf("synchronised blocks mismatch: have %v, want %v", bs, blocks) } - if rs := len(tester.ownReceipts); rs != receipts { + if rs := len(tester.ownReceipts) + len(tester.ancientReceipts) - 1; rs != receipts { t.Fatalf("synchronised receipts mismatch: have %v, want %v", rs, receipts) } } @@ -1049,20 +1107,15 @@ func testBlockHeaderAttackerDropping(t *testing.T, protocol int) { {errUnknownPeer, false}, // Peer is unknown, was already dropped, don't double drop {errBadPeer, true}, // Peer was deemed bad for some reason, drop it {errStallingPeer, true}, // Peer was detected to be stalling, drop it + {errUnsyncedPeer, true}, // Peer was detected to be unsynced, drop it {errNoPeers, false}, // No peers to download from, soft race, no issue {errTimeout, true}, // No hashes received in due time, drop the peer {errEmptyHeaderSet, true}, // No headers were returned as a response, drop as it's a dead end {errPeersUnavailable, true}, // Nobody had the advertised blocks, drop the advertiser {errInvalidAncestor, true}, // Agreed upon ancestor is not acceptable, drop the chain rewriter {errInvalidChain, true}, // Hash chain was detected as invalid, definitely drop - {errInvalidBlock, false}, // A bad peer was detected, but not the sync origin {errInvalidBody, false}, // A bad peer was detected, but not the sync origin {errInvalidReceipt, false}, // A bad peer was detected, but not the sync origin - {errCancelBlockFetch, false}, // Synchronisation was canceled, origin may be innocent, don't drop - {errCancelHeaderFetch, false}, // Synchronisation was canceled, origin may be innocent, don't drop - {errCancelBodyFetch, false}, // Synchronisation was canceled, origin may be innocent, don't drop - {errCancelReceiptFetch, false}, // Synchronisation was canceled, origin may be innocent, don't drop - {errCancelHeaderProcessing, false}, // Synchronisation was canceled, origin may be innocent, don't drop {errCancelContentProcessing, false}, // Synchronisation was canceled, origin may be innocent, don't drop } // Run the tests and check disconnection status @@ -1561,9 +1614,45 @@ func TestRemoteHeaderRequestSpan(t *testing.T) { if failed { res := strings.Replace(fmt.Sprint(data), " ", ",", -1) exp := strings.Replace(fmt.Sprint(tt.expected), " ", ",", -1) - fmt.Printf("got: %v\n", res) - fmt.Printf("exp: %v\n", exp) + t.Logf("got: %v\n", res) + t.Logf("exp: %v\n", exp) t.Errorf("test %d: wrong values", i) } } } + +// Tests that peers below a pre-configured checkpoint block are prevented from +// being fast-synced from, avoiding potential cheap eclipse attacks. +func TestCheckpointEnforcement62(t *testing.T) { testCheckpointEnforcement(t, 62, FullSync) } +func TestCheckpointEnforcement63Full(t *testing.T) { testCheckpointEnforcement(t, 63, FullSync) } +func TestCheckpointEnforcement63Fast(t *testing.T) { testCheckpointEnforcement(t, 63, FastSync) } +func TestCheckpointEnforcement64Full(t *testing.T) { testCheckpointEnforcement(t, 64, FullSync) } +func TestCheckpointEnforcement64Fast(t *testing.T) { testCheckpointEnforcement(t, 64, FastSync) } +func TestCheckpointEnforcement64Light(t *testing.T) { testCheckpointEnforcement(t, 64, LightSync) } + +func testCheckpointEnforcement(t *testing.T, protocol int, mode SyncMode) { + t.Parallel() + + // Create a new tester with a particular hard coded checkpoint block + tester := newTester() + defer tester.terminate() + + tester.downloader.checkpoint = uint64(fsMinFullBlocks) + 256 + chain := testChainBase.shorten(int(tester.downloader.checkpoint) - 1) + + // Attempt to sync with the peer and validate the result + tester.newPeer("peer", protocol, chain) + + var expect error + if mode == FastSync || mode == LightSync { + expect = errUnsyncedPeer + } + if err := tester.sync("peer", nil, mode); err != expect { + t.Fatalf("block sync error mismatch: have %v, want %v", err, expect) + } + if mode == FastSync || mode == LightSync { + assertOwnChain(t, tester, 1) + } else { + assertOwnChain(t, tester, chain.len()) + } +} diff --git a/eth/downloader/events.go b/eth/downloader/events.go index 64905b8f2ac7..25255a3a72e5 100644 --- a/eth/downloader/events.go +++ b/eth/downloader/events.go @@ -16,6 +16,10 @@ package downloader -type DoneEvent struct{} +import "github.com/ethereum/go-ethereum/core/types" + +type DoneEvent struct { + Latest *types.Header +} type StartEvent struct{} type FailedEvent struct{ Err error } diff --git a/eth/downloader/fakepeer.go b/eth/downloader/fakepeer.go index 59832facaaa3..3ec90bc9ef08 100644 --- a/eth/downloader/fakepeer.go +++ b/eth/downloader/fakepeer.go @@ -141,7 +141,7 @@ func (p *FakePeer) RequestBodies(hashes []common.Hash) error { func (p *FakePeer) RequestReceipts(hashes []common.Hash) error { var receipts [][]*types.Receipt for _, hash := range hashes { - receipts = append(receipts, rawdb.ReadReceipts(p.db, hash, *p.hc.GetBlockNumber(hash))) + receipts = append(receipts, rawdb.ReadRawReceipts(p.db, hash, *p.hc.GetBlockNumber(hash))) } p.dl.DeliverReceipts(p.id, receipts) return nil diff --git a/eth/downloader/statesync.go b/eth/downloader/statesync.go index 0675a91cdc0f..b422557d58c8 100644 --- a/eth/downloader/statesync.go +++ b/eth/downloader/statesync.go @@ -59,6 +59,7 @@ type stateSyncStats struct { // syncState starts downloading state with the given root hash. func (d *Downloader) syncState(root common.Hash) *stateSync { + // Create the state sync s := newStateSync(d, root) select { case d.stateSyncStart <- s: @@ -239,7 +240,7 @@ type stateTask struct { func newStateSync(d *Downloader, root common.Hash) *stateSync { return &stateSync{ d: d, - sched: state.NewStateSync(root, d.stateDB), + sched: state.NewStateSync(root, d.stateDB, d.stateBloom), keccak: sha3.NewLegacyKeccak256(), tasks: make(map[common.Hash]*stateTask), deliver: make(chan *stateReq), @@ -301,7 +302,7 @@ func (s *stateSync) loop() (err error) { return errCancelStateFetch case <-s.d.cancelCh: - return errCancelStateFetch + return errCanceled case req := <-s.deliver: // Response, disconnect or timeout triggered, drop the peer if stalling @@ -310,7 +311,23 @@ func (s *stateSync) loop() (err error) { // 2 items are the minimum requested, if even that times out, we've no use of // this peer at the moment. log.Warn("Stalling state sync, dropping peer", "peer", req.peer.id) - s.d.dropPeer(req.peer.id) + if s.d.dropPeer == nil { + // The dropPeer method is nil when `--copydb` is used for a local copy. + // Timeouts can occur if e.g. compaction hits at the wrong time, and can be ignored + req.peer.log.Warn("Downloader wants to drop peer, but peerdrop-function is not set", "peer", req.peer.id) + } else { + s.d.dropPeer(req.peer.id) + + // If this peer was the master peer, abort sync immediately + s.d.cancelLock.RLock() + master := req.peer.id == s.d.cancelPeer + s.d.cancelLock.RUnlock() + + if master { + s.d.cancel() + return errTimeout + } + } } // Process all the received blobs and check for stale delivery delivered, err := s.process(req) @@ -425,9 +442,7 @@ func (s *stateSync) process(req *stateReq) (int, error) { default: return successful, fmt.Errorf("invalid state node %s: %v", hash.TerminalString(), err) } - if _, ok := req.tasks[hash]; ok { - delete(req.tasks, hash) - } + delete(req.tasks, hash) } // Put unfulfilled tasks back into the retry queue npeers := s.d.peers.Len() diff --git a/eth/downloader/testchain_test.go b/eth/downloader/testchain_test.go index 0b5a2142576f..f410152f5b00 100644 --- a/eth/downloader/testchain_test.go +++ b/eth/downloader/testchain_test.go @@ -24,9 +24,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -34,7 +34,7 @@ import ( var ( testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddress = crypto.PubkeyToAddress(testKey.PublicKey) - testDB = ethdb.NewMemDatabase() + testDB = rawdb.NewMemoryDatabase() testGenesis = core.GenesisBlockForTesting(testDB, testAddress, big.NewInt(1000000000)) ) @@ -45,7 +45,7 @@ var testChainBase = newTestChain(blockCacheItems+200, testGenesis) var testChainForkLightA, testChainForkLightB, testChainForkHeavy *testChain func init() { - var forkLen = int(MaxForkAncestry + 50) + var forkLen = int(maxForkAncestry + 50) var wg sync.WaitGroup wg.Add(3) go func() { testChainForkLightA = testChainBase.makeFork(forkLen, false, 1); wg.Done() }() diff --git a/eth/enr_entry.go b/eth/enr_entry.go new file mode 100644 index 000000000000..d9e7b95784a2 --- /dev/null +++ b/eth/enr_entry.go @@ -0,0 +1,61 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package eth + +import ( + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/forkid" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" +) + +// ethEntry is the "eth" ENR entry which advertises eth protocol +// on the discovery network. +type ethEntry struct { + ForkID forkid.ID // Fork identifier per EIP-2124 + + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` +} + +// ENRKey implements enr.Entry. +func (e ethEntry) ENRKey() string { + return "eth" +} + +func (eth *Ethereum) startEthEntryUpdate(ln *enode.LocalNode) { + var newHead = make(chan core.ChainHeadEvent, 10) + sub := eth.blockchain.SubscribeChainHeadEvent(newHead) + + go func() { + defer sub.Unsubscribe() + for { + select { + case <-newHead: + ln.Set(eth.currentEthEntry()) + case <-sub.Err(): + // Would be nice to sync with eth.Stop, but there is no + // good way to do that. + return + } + } + }() +} + +func (eth *Ethereum) currentEthEntry() *ethEntry { + return ðEntry{ForkID: forkid.NewID(eth.blockchain)} +} diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 9bd42dc6fdb1..4ce8f6b0998c 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -110,7 +110,6 @@ type Fetcher struct { notify chan *announce inject chan *inject - blockFilter chan chan []*types.Block headerFilter chan chan *headerFilterTask bodyFilter chan chan *bodyFilterTask @@ -150,7 +149,6 @@ func New(getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBloc return &Fetcher{ notify: make(chan *announce), inject: make(chan *inject), - blockFilter: make(chan chan []*types.Block), headerFilter: make(chan chan *headerFilterTask), bodyFilter: make(chan chan *bodyFilterTask), done: make(chan common.Hash), @@ -687,7 +685,7 @@ func (f *Fetcher) forgetHash(hash common.Hash) { // Remove all pending announces and decrement DOS counters for _, announce := range f.announced[hash] { f.announces[announce.origin]-- - if f.announces[announce.origin] == 0 { + if f.announces[announce.origin] <= 0 { delete(f.announces, announce.origin) } } @@ -698,7 +696,7 @@ func (f *Fetcher) forgetHash(hash common.Hash) { // Remove any pending fetches and decrement the DOS counters if announce := f.fetching[hash]; announce != nil { f.announces[announce.origin]-- - if f.announces[announce.origin] == 0 { + if f.announces[announce.origin] <= 0 { delete(f.announces, announce.origin) } delete(f.fetching, hash) @@ -707,7 +705,7 @@ func (f *Fetcher) forgetHash(hash common.Hash) { // Remove any pending completion requests and decrement the DOS counters for _, announce := range f.fetched[hash] { f.announces[announce.origin]-- - if f.announces[announce.origin] == 0 { + if f.announces[announce.origin] <= 0 { delete(f.announces, announce.origin) } } @@ -716,7 +714,7 @@ func (f *Fetcher) forgetHash(hash common.Hash) { // Remove any pending completions and decrement the DOS counters if announce := f.completing[hash]; announce != nil { f.announces[announce.origin]-- - if f.announces[announce.origin] == 0 { + if f.announces[announce.origin] <= 0 { delete(f.announces, announce.origin) } delete(f.completing, hash) diff --git a/eth/fetcher/fetcher_test.go b/eth/fetcher/fetcher_test.go index 3d4f0d1e592b..83172c5348f4 100644 --- a/eth/fetcher/fetcher_test.go +++ b/eth/fetcher/fetcher_test.go @@ -27,14 +27,14 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) var ( - testdb = ethdb.NewMemDatabase() + testdb = rawdb.NewMemoryDatabase() testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") testAddress = crypto.PubkeyToAddress(testKey.PublicKey) genesis = core.GenesisBlockForTesting(testdb, testAddress, big.NewInt(1000000000)) @@ -244,7 +244,7 @@ func verifyImportEvent(t *testing.T, imported chan *types.Block, arrive bool) { select { case <-imported: t.Fatalf("import invoked") - case <-time.After(10 * time.Millisecond): + case <-time.After(20 * time.Millisecond): } } } diff --git a/eth/filters/bench_test.go b/eth/filters/bench_test.go index c5f681e024b9..fc7e6f5273ce 100644 --- a/eth/filters/bench_test.go +++ b/eth/filters/bench_test.go @@ -17,7 +17,6 @@ package filters import ( - "bytes" "context" "fmt" "testing" @@ -65,9 +64,9 @@ const benchFilterCnt = 2000 func benchmarkBloomBits(b *testing.B, sectionSize uint64) { benchDataDir := node.DefaultDataDir() + "/geth/chaindata" - fmt.Println("Running bloombits benchmark section size:", sectionSize) + b.Log("Running bloombits benchmark section size:", sectionSize) - db, err := ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } @@ -77,7 +76,7 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { } clearBloomBits(db) - fmt.Println("Generating bloombits data...") + b.Log("Generating bloombits data...") headNum := rawdb.ReadHeaderNumber(db, head) if headNum == nil || *headNum < sectionSize+512 { b.Fatalf("not enough blocks for running a benchmark") @@ -112,16 +111,16 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { rawdb.WriteBloomBits(db, uint(i), sectionIdx, sectionHead, comp) } //if sectionIdx%50 == 0 { - // fmt.Println(" section", sectionIdx, "/", cnt) + // b.Log(" section", sectionIdx, "/", cnt) //} } d := time.Since(start) - fmt.Println("Finished generating bloombits data") - fmt.Println(" ", d, "total ", d/time.Duration(cnt*sectionSize), "per block") - fmt.Println(" data size:", dataSize, " compressed size:", compSize, " compression ratio:", float64(compSize)/float64(dataSize)) + b.Log("Finished generating bloombits data") + b.Log(" ", d, "total ", d/time.Duration(cnt*sectionSize), "per block") + b.Log(" data size:", dataSize, " compressed size:", compSize, " compression ratio:", float64(compSize)/float64(dataSize)) - fmt.Println("Running filter benchmarks...") + b.Log("Running filter benchmarks...") start = time.Now() mux := new(event.TypeMux) var backend *testBackend @@ -129,7 +128,7 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { for i := 0; i < benchFilterCnt; i++ { if i%20 == 0 { db.Close() - db, _ = ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + db, _ = rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") backend = &testBackend{mux, db, cnt, new(event.Feed), new(event.Feed), new(event.Feed), new(event.Feed)} } var addr common.Address @@ -141,42 +140,26 @@ func benchmarkBloomBits(b *testing.B, sectionSize uint64) { } } d = time.Since(start) - fmt.Println("Finished running filter benchmarks") - fmt.Println(" ", d, "total ", d/time.Duration(benchFilterCnt), "per address", d*time.Duration(1000000)/time.Duration(benchFilterCnt*cnt*sectionSize), "per million blocks") + b.Log("Finished running filter benchmarks") + b.Log(" ", d, "total ", d/time.Duration(benchFilterCnt), "per address", d*time.Duration(1000000)/time.Duration(benchFilterCnt*cnt*sectionSize), "per million blocks") db.Close() } -func forEachKey(db ethdb.Database, startPrefix, endPrefix []byte, fn func(key []byte)) { - it := db.(*ethdb.LDBDatabase).NewIterator() - it.Seek(startPrefix) - for it.Valid() { - key := it.Key() - cmpLen := len(key) - if len(endPrefix) < cmpLen { - cmpLen = len(endPrefix) - } - if bytes.Compare(key[:cmpLen], endPrefix) == 1 { - break - } - fn(common.CopyBytes(key)) - it.Next() - } - it.Release() -} - var bloomBitsPrefix = []byte("bloomBits-") func clearBloomBits(db ethdb.Database) { fmt.Println("Clearing bloombits data...") - forEachKey(db, bloomBitsPrefix, bloomBitsPrefix, func(key []byte) { - db.Delete(key) - }) + it := db.NewIteratorWithPrefix(bloomBitsPrefix) + for it.Next() { + db.Delete(it.Key()) + } + it.Release() } func BenchmarkNoBloomBits(b *testing.B) { benchDataDir := node.DefaultDataDir() + "/geth/chaindata" - fmt.Println("Running benchmark without bloombits") - db, err := ethdb.NewLDBDatabase(benchDataDir, 128, 1024) + b.Log("Running benchmark without bloombits") + db, err := rawdb.NewLevelDBDatabase(benchDataDir, 128, 1024, "") if err != nil { b.Fatalf("error opening database at %v: %v", benchDataDir, err) } @@ -188,14 +171,14 @@ func BenchmarkNoBloomBits(b *testing.B) { clearBloomBits(db) - fmt.Println("Running filter benchmarks...") + b.Log("Running filter benchmarks...") start := time.Now() mux := new(event.TypeMux) backend := &testBackend{mux, db, 0, new(event.Feed), new(event.Feed), new(event.Feed), new(event.Feed)} filter := NewRangeFilter(backend, 0, int64(*headNum), []common.Address{{}}, nil) filter.Logs(context.Background()) d := time.Since(start) - fmt.Println("Finished running filter benchmarks") - fmt.Println(" ", d, "total ", d*time.Duration(1000000)/time.Duration(*headNum+1), "per million blocks") + b.Log("Finished running filter benchmarks") + b.Log(" ", d, "total ", d*time.Duration(1000000)/time.Duration(*headNum+1), "per million blocks") db.Close() } diff --git a/eth/filters/filter_system_test.go b/eth/filters/filter_system_test.go index e71080b1ab5e..93cb43123f70 100644 --- a/eth/filters/filter_system_test.go +++ b/eth/filters/filter_system_test.go @@ -85,7 +85,7 @@ func (b *testBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*type func (b *testBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { if number := rawdb.ReadHeaderNumber(b.db, hash); number != nil { - return rawdb.ReadReceipts(b.db, hash, *number), nil + return rawdb.ReadReceipts(b.db, hash, *number, params.TestChainConfig), nil } return nil, nil } @@ -95,7 +95,7 @@ func (b *testBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types if number == nil { return nil, nil } - receipts := rawdb.ReadReceipts(b.db, hash, *number) + receipts := rawdb.ReadReceipts(b.db, hash, *number, params.TestChainConfig) logs := make([][]*types.Log, len(receipts)) for i, receipt := range receipts { @@ -161,7 +161,7 @@ func TestBlockSubscription(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -218,7 +218,7 @@ func TestPendingTxFilter(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -278,7 +278,7 @@ func TestPendingTxFilter(t *testing.T) { func TestLogFilterCreation(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -327,7 +327,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -354,7 +354,7 @@ func TestInvalidLogFilterCreation(t *testing.T) { func TestInvalidGetLogsRequest(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -384,7 +384,7 @@ func TestLogFilter(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) @@ -503,7 +503,7 @@ func TestPendingLogsSubscription(t *testing.T) { var ( mux = new(event.TypeMux) - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) logsFeed = new(event.Feed) diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index 396a03d611c6..eafa19cdfa22 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -29,7 +29,6 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/params" ) @@ -51,7 +50,7 @@ func BenchmarkFilters(b *testing.B) { defer os.RemoveAll(dir) var ( - db, _ = ethdb.NewLDBDatabase(dir, 0, 0) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") mux = new(event.TypeMux) txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) @@ -110,7 +109,7 @@ func TestFilters(t *testing.T) { defer os.RemoveAll(dir) var ( - db, _ = ethdb.NewLDBDatabase(dir, 0, 0) + db, _ = rawdb.NewLevelDBDatabase(dir, 0, 0, "") mux = new(event.TypeMux) txFeed = new(event.Feed) rmLogsFeed = new(event.Feed) @@ -139,6 +138,7 @@ func TestFilters(t *testing.T) { }, } gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(1, common.HexToAddress("0x1"), big.NewInt(1), 1, big.NewInt(1), nil)) case 2: receipt := types.NewReceipt(nil, false, 0) receipt.Logs = []*types.Log{ @@ -148,6 +148,8 @@ func TestFilters(t *testing.T) { }, } gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(2, common.HexToAddress("0x2"), big.NewInt(2), 2, big.NewInt(2), nil)) + case 998: receipt := types.NewReceipt(nil, false, 0) receipt.Logs = []*types.Log{ @@ -157,6 +159,7 @@ func TestFilters(t *testing.T) { }, } gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(998, common.HexToAddress("0x998"), big.NewInt(998), 998, big.NewInt(998), nil)) case 999: receipt := types.NewReceipt(nil, false, 0) receipt.Logs = []*types.Log{ @@ -166,6 +169,7 @@ func TestFilters(t *testing.T) { }, } gen.AddUncheckedReceipt(receipt) + gen.AddUncheckedTx(types.NewTransaction(999, common.HexToAddress("0x999"), big.NewInt(999), 999, big.NewInt(999), nil)) } }) for i, block := range chain { diff --git a/eth/gen_config.go b/eth/gen_config.go index 2777aa9e83fb..bc4b55b120fa 100644 --- a/eth/gen_config.go +++ b/eth/gen_config.go @@ -7,15 +7,14 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/gasprice" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/params" ) -var _ = (*configMarshaling)(nil) - // MarshalTOML marshals as TOML. func (c Config) MarshalTOML() (interface{}, error) { type Config struct { @@ -23,22 +22,23 @@ func (c Config) MarshalTOML() (interface{}, error) { NetworkId uint64 SyncMode downloader.SyncMode NoPruning bool - LightServ int `toml:",omitempty"` - LightPeers int `toml:",omitempty"` - SkipBcVersionCheck bool `toml:"-"` - DatabaseHandles int `toml:"-"` + NoPrefetch bool + Whitelist map[uint64]common.Hash `toml:"-"` + LightServ int `toml:",omitempty"` + LightIngress int `toml:",omitempty"` + LightEgress int `toml:",omitempty"` + LightPeers int `toml:",omitempty"` + UltraLightServers []string `toml:",omitempty"` + UltraLightFraction int `toml:",omitempty"` + UltraLightOnlyAnnounce bool `toml:",omitempty"` + SkipBcVersionCheck bool `toml:"-"` + DatabaseHandles int `toml:"-"` DatabaseCache int + DatabaseFreezer string TrieCleanCache int TrieDirtyCache int TrieTimeout time.Duration - Etherbase common.Address `toml:",omitempty"` - MinerNotify []string `toml:",omitempty"` - MinerExtraData hexutil.Bytes `toml:",omitempty"` - MinerGasFloor uint64 - MinerGasCeil uint64 - MinerGasPrice *big.Int - MinerRecommit time.Duration - MinerNoverify bool + Miner miner.Config Ethash ethash.Config TxPool core.TxPoolConfig GPO gasprice.Config @@ -46,28 +46,32 @@ func (c Config) MarshalTOML() (interface{}, error) { DocRoot string `toml:"-"` EWASMInterpreter string EVMInterpreter string + RPCGasCap *big.Int `toml:",omitempty"` + Checkpoint *params.TrustedCheckpoint `toml:",omitempty"` + CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` } var enc Config enc.Genesis = c.Genesis enc.NetworkId = c.NetworkId enc.SyncMode = c.SyncMode enc.NoPruning = c.NoPruning + enc.NoPrefetch = c.NoPrefetch + enc.Whitelist = c.Whitelist enc.LightServ = c.LightServ + enc.LightIngress = c.LightIngress + enc.LightEgress = c.LightEgress enc.LightPeers = c.LightPeers + enc.UltraLightServers = c.UltraLightServers + enc.UltraLightFraction = c.UltraLightFraction + enc.UltraLightOnlyAnnounce = c.UltraLightOnlyAnnounce enc.SkipBcVersionCheck = c.SkipBcVersionCheck enc.DatabaseHandles = c.DatabaseHandles enc.DatabaseCache = c.DatabaseCache + enc.DatabaseFreezer = c.DatabaseFreezer enc.TrieCleanCache = c.TrieCleanCache enc.TrieDirtyCache = c.TrieDirtyCache enc.TrieTimeout = c.TrieTimeout - enc.Etherbase = c.Etherbase - enc.MinerNotify = c.MinerNotify - enc.MinerExtraData = c.MinerExtraData - enc.MinerGasFloor = c.MinerGasFloor - enc.MinerGasCeil = c.MinerGasCeil - enc.MinerGasPrice = c.MinerGasPrice - enc.MinerRecommit = c.MinerRecommit - enc.MinerNoverify = c.MinerNoverify + enc.Miner = c.Miner enc.Ethash = c.Ethash enc.TxPool = c.TxPool enc.GPO = c.GPO @@ -75,6 +79,9 @@ func (c Config) MarshalTOML() (interface{}, error) { enc.DocRoot = c.DocRoot enc.EWASMInterpreter = c.EWASMInterpreter enc.EVMInterpreter = c.EVMInterpreter + enc.RPCGasCap = c.RPCGasCap + enc.Checkpoint = c.Checkpoint + enc.CheckpointOracle = c.CheckpointOracle return &enc, nil } @@ -85,22 +92,23 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { NetworkId *uint64 SyncMode *downloader.SyncMode NoPruning *bool - LightServ *int `toml:",omitempty"` - LightPeers *int `toml:",omitempty"` - SkipBcVersionCheck *bool `toml:"-"` - DatabaseHandles *int `toml:"-"` + NoPrefetch *bool + Whitelist map[uint64]common.Hash `toml:"-"` + LightServ *int `toml:",omitempty"` + LightIngress *int `toml:",omitempty"` + LightEgress *int `toml:",omitempty"` + LightPeers *int `toml:",omitempty"` + UltraLightServers []string `toml:",omitempty"` + UltraLightFraction *int `toml:",omitempty"` + UltraLightOnlyAnnounce *bool `toml:",omitempty"` + SkipBcVersionCheck *bool `toml:"-"` + DatabaseHandles *int `toml:"-"` DatabaseCache *int + DatabaseFreezer *string TrieCleanCache *int TrieDirtyCache *int TrieTimeout *time.Duration - Etherbase *common.Address `toml:",omitempty"` - MinerNotify []string `toml:",omitempty"` - MinerExtraData *hexutil.Bytes `toml:",omitempty"` - MinerGasFloor *uint64 - MinerGasCeil *uint64 - MinerGasPrice *big.Int - MinerRecommit *time.Duration - MinerNoverify *bool + Miner *miner.Config Ethash *ethash.Config TxPool *core.TxPoolConfig GPO *gasprice.Config @@ -108,6 +116,9 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { DocRoot *string `toml:"-"` EWASMInterpreter *string EVMInterpreter *string + RPCGasCap *big.Int `toml:",omitempty"` + Checkpoint *params.TrustedCheckpoint `toml:",omitempty"` + CheckpointOracle *params.CheckpointOracleConfig `toml:",omitempty"` } var dec Config if err := unmarshal(&dec); err != nil { @@ -125,12 +136,33 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.NoPruning != nil { c.NoPruning = *dec.NoPruning } + if dec.NoPrefetch != nil { + c.NoPrefetch = *dec.NoPrefetch + } + if dec.Whitelist != nil { + c.Whitelist = dec.Whitelist + } if dec.LightServ != nil { c.LightServ = *dec.LightServ } + if dec.LightIngress != nil { + c.LightIngress = *dec.LightIngress + } + if dec.LightEgress != nil { + c.LightEgress = *dec.LightEgress + } if dec.LightPeers != nil { c.LightPeers = *dec.LightPeers } + if dec.UltraLightServers != nil { + c.UltraLightServers = dec.UltraLightServers + } + if dec.UltraLightFraction != nil { + c.UltraLightFraction = *dec.UltraLightFraction + } + if dec.UltraLightOnlyAnnounce != nil { + c.UltraLightOnlyAnnounce = *dec.UltraLightOnlyAnnounce + } if dec.SkipBcVersionCheck != nil { c.SkipBcVersionCheck = *dec.SkipBcVersionCheck } @@ -140,6 +172,9 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.DatabaseCache != nil { c.DatabaseCache = *dec.DatabaseCache } + if dec.DatabaseFreezer != nil { + c.DatabaseFreezer = *dec.DatabaseFreezer + } if dec.TrieCleanCache != nil { c.TrieCleanCache = *dec.TrieCleanCache } @@ -149,29 +184,8 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.TrieTimeout != nil { c.TrieTimeout = *dec.TrieTimeout } - if dec.Etherbase != nil { - c.Etherbase = *dec.Etherbase - } - if dec.MinerNotify != nil { - c.MinerNotify = dec.MinerNotify - } - if dec.MinerExtraData != nil { - c.MinerExtraData = *dec.MinerExtraData - } - if dec.MinerGasFloor != nil { - c.MinerGasFloor = *dec.MinerGasFloor - } - if dec.MinerGasCeil != nil { - c.MinerGasCeil = *dec.MinerGasCeil - } - if dec.MinerGasPrice != nil { - c.MinerGasPrice = dec.MinerGasPrice - } - if dec.MinerRecommit != nil { - c.MinerRecommit = *dec.MinerRecommit - } - if dec.MinerNoverify != nil { - c.MinerNoverify = *dec.MinerNoverify + if dec.Miner != nil { + c.Miner = *dec.Miner } if dec.Ethash != nil { c.Ethash = *dec.Ethash @@ -194,5 +208,14 @@ func (c *Config) UnmarshalTOML(unmarshal func(interface{}) error) error { if dec.EVMInterpreter != nil { c.EVMInterpreter = *dec.EVMInterpreter } + if dec.RPCGasCap != nil { + c.RPCGasCap = dec.RPCGasCap + } + if dec.Checkpoint != nil { + c.Checkpoint = dec.Checkpoint + } + if dec.CheckpointOracle != nil { + c.CheckpointOracle = dec.CheckpointOracle + } return nil } diff --git a/eth/handler.go b/eth/handler.go index f6fb24a88a49..9fb80ba89502 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -29,7 +29,6 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/downloader" @@ -43,6 +42,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" ) const ( @@ -58,13 +58,9 @@ const ( ) var ( - daoChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the DAO handshake challenge + syncChallengeTimeout = 15 * time.Second // Time allowance for a node to reply to the sync progress challenge ) -// errIncompatibleConfig is returned if the requested protocols and configs are -// not compatible (low protocol version restrictions and high requirements). -var errIncompatibleConfig = errors.New("incompatible configuration") - func errResp(code errCode, format string, v ...interface{}) error { return fmt.Errorf("%v - %v", code, fmt.Sprintf(format, v...)) } @@ -75,17 +71,17 @@ type ProtocolManager struct { fastSync uint32 // Flag whether fast sync is enabled (gets disabled if we already have blocks) acceptTxs uint32 // Flag whether we're considered synchronised (enables transaction processing) - txpool txPool - blockchain *core.BlockChain - chainconfig *params.ChainConfig - maxPeers int + checkpointNumber uint64 // Block number for the sync progress validator to cross reference + checkpointHash common.Hash // Block hash for the sync progress validator to cross reference + + txpool txPool + blockchain *core.BlockChain + maxPeers int downloader *downloader.Downloader fetcher *fetcher.Fetcher peers *peerSet - SubProtocols []p2p.Protocol - eventMux *event.TypeMux txsCh chan core.NewTxsEvent txsSub event.Subscription @@ -106,14 +102,13 @@ type ProtocolManager struct { // NewProtocolManager returns a new Ethereum sub protocol manager. The Ethereum sub protocol manages peers capable // with the Ethereum network. -func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, networkID uint64, mux *event.TypeMux, txpool txPool, engine consensus.Engine, blockchain *core.BlockChain, chaindb ethdb.Database, whitelist map[uint64]common.Hash) (*ProtocolManager, error) { +func NewProtocolManager(config *params.ChainConfig, checkpoint *params.TrustedCheckpoint, mode downloader.SyncMode, networkID uint64, mux *event.TypeMux, txpool txPool, engine consensus.Engine, blockchain *core.BlockChain, chaindb ethdb.Database, cacheLimit int, whitelist map[uint64]common.Hash) (*ProtocolManager, error) { // Create the protocol manager with the base fields manager := &ProtocolManager{ networkID: networkID, eventMux: mux, txpool: txpool, blockchain: blockchain, - chainconfig: config, peers: newPeerSet(), whitelist: whitelist, newPeerCh: make(chan *peer), @@ -121,55 +116,45 @@ func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, ne txsyncCh: make(chan *txsync), quitSync: make(chan struct{}), } - // Figure out whether to allow fast sync or not - if mode == downloader.FastSync && blockchain.CurrentBlock().NumberU64() > 0 { - log.Warn("Blockchain not empty, fast sync disabled") - mode = downloader.FullSync - } - if mode == downloader.FastSync { - manager.fastSync = uint32(1) - } - // Initiate a sub-protocol for every implemented version we can handle - manager.SubProtocols = make([]p2p.Protocol, 0, len(ProtocolVersions)) - for i, version := range ProtocolVersions { - // Skip protocol version if incompatible with the mode of operation - if mode == downloader.FastSync && version < eth63 { - continue + if mode == downloader.FullSync { + // The database seems empty as the current block is the genesis. Yet the fast + // block is ahead, so fast sync was enabled for this node at a certain point. + // The scenarios where this can happen is + // * if the user manually (or via a bad block) rolled back a fast sync node + // below the sync point. + // * the last fast sync is not finished while user specifies a full sync this + // time. But we don't have any recent state for full sync. + // In these cases however it's safe to reenable fast sync. + fullBlock, fastBlock := blockchain.CurrentBlock(), blockchain.CurrentFastBlock() + if fullBlock.NumberU64() == 0 && fastBlock.NumberU64() > 0 { + manager.fastSync = uint32(1) + log.Warn("Switch sync mode from full sync to fast sync") + } + } else { + if blockchain.CurrentBlock().NumberU64() > 0 { + // Print warning log if database is not empty to run fast sync. + log.Warn("Switch sync mode from fast sync to full sync") + } else { + // If fast sync was requested and our database is empty, grant it + manager.fastSync = uint32(1) } - // Compatible; initialise the sub-protocol - version := version // Closure for the run - manager.SubProtocols = append(manager.SubProtocols, p2p.Protocol{ - Name: ProtocolName, - Version: version, - Length: ProtocolLengths[i], - Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := manager.newPeer(int(version), p, rw) - select { - case manager.newPeerCh <- peer: - manager.wg.Add(1) - defer manager.wg.Done() - return manager.handle(peer) - case <-manager.quitSync: - return p2p.DiscQuitting - } - }, - NodeInfo: func() interface{} { - return manager.NodeInfo() - }, - PeerInfo: func(id enode.ID) interface{} { - if p := manager.peers.Peer(fmt.Sprintf("%x", id[:8])); p != nil { - return p.Info() - } - return nil - }, - }) } - if len(manager.SubProtocols) == 0 { - return nil, errIncompatibleConfig + // If we have trusted checkpoints, enforce them on the chain + if checkpoint != nil { + manager.checkpointNumber = (checkpoint.SectionIndex+1)*params.CHTFrequency - 1 + manager.checkpointHash = checkpoint.SectionHead } - // Construct the different synchronisation mechanisms - manager.downloader = downloader.New(mode, chaindb, manager.eventMux, blockchain, nil, manager.removePeer) + // Construct the downloader (long sync) and its backing state bloom if fast + // sync is requested. The downloader is responsible for deallocating the state + // bloom when it's done. + var stateBloom *trie.SyncBloom + if atomic.LoadUint32(&manager.fastSync) == 1 { + stateBloom = trie.NewSyncBloom(uint64(cacheLimit), chaindb) + } + manager.downloader = downloader.New(manager.checkpointNumber, chaindb, stateBloom, manager.eventMux, blockchain, nil, manager.removePeer) + + // Construct the fetcher (short sync) validator := func(header *types.Header) error { return engine.VerifyHeader(blockchain, header, true) } @@ -177,13 +162,30 @@ func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, ne return blockchain.CurrentBlock().NumberU64() } inserter := func(blocks types.Blocks) (int, error) { - // If fast sync is running, deny importing weird blocks + // If sync hasn't reached the checkpoint yet, deny importing weird blocks. + // + // Ideally we would also compare the head block's timestamp and similarly reject + // the propagated block if the head is too old. Unfortunately there is a corner + // case when starting new networks, where the genesis might be ancient (0 unix) + // which would prevent full nodes from accepting it. + if manager.blockchain.CurrentBlock().NumberU64() < manager.checkpointNumber { + log.Warn("Unsynced yet, discarded propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash()) + return 0, nil + } + // If fast sync is running, deny importing weird blocks. This is a problematic + // clause when starting up a new network, because fast-syncing miners might not + // accept each others' blocks until a restart. Unfortunately we haven't figured + // out a way yet where nodes can decide unilaterally whether the network is new + // or not. This should be fixed if we figure out a solution. if atomic.LoadUint32(&manager.fastSync) == 1 { - log.Warn("Discarded bad propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash()) + log.Warn("Fast syncing, discarded propagated block", "number", blocks[0].Number(), "hash", blocks[0].Hash()) return 0, nil } - atomic.StoreUint32(&manager.acceptTxs, 1) // Mark initial sync done on any fetcher import - return manager.blockchain.InsertChain(blocks) + n, err := manager.blockchain.InsertChain(blocks) + if err == nil { + atomic.StoreUint32(&manager.acceptTxs, 1) // Mark initial sync done on any fetcher import + } + return n, err } manager.fetcher = fetcher.New(blockchain.GetBlockByHash, validator, manager.BroadcastBlock, heighter, inserter, manager.removePeer) @@ -192,6 +194,39 @@ func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, ne return manager, nil } +func (pm *ProtocolManager) makeProtocol(version uint) p2p.Protocol { + length, ok := protocolLengths[version] + if !ok { + panic("makeProtocol for unknown version") + } + + return p2p.Protocol{ + Name: protocolName, + Version: version, + Length: length, + Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { + peer := pm.newPeer(int(version), p, rw) + select { + case pm.newPeerCh <- peer: + pm.wg.Add(1) + defer pm.wg.Done() + return pm.handle(peer) + case <-pm.quitSync: + return p2p.DiscQuitting + } + }, + NodeInfo: func() interface{} { + return pm.NodeInfo() + }, + PeerInfo: func(id enode.ID) interface{} { + if p := pm.peers.Peer(fmt.Sprintf("%x", id[:8])); p != nil { + return p.Info() + } + return nil + }, + } +} + func (pm *ProtocolManager) removePeer(id string) { // Short circuit if the peer was already removed peer := pm.peers.Peer(id) @@ -303,22 +338,22 @@ func (pm *ProtocolManager) handle(p *peer) error { // after this will be sent via broadcasts. pm.syncTransactions(p) - // If we're DAO hard-fork aware, validate any remote peer with regard to the hard-fork - if daoBlock := pm.chainconfig.DAOForkBlock; daoBlock != nil { - // Request the peer's DAO fork header for extra-data validation - if err := p.RequestHeadersByNumber(daoBlock.Uint64(), 1, 0, false); err != nil { + // If we have a trusted CHT, reject all peers below that (avoid fast sync eclipse) + if pm.checkpointHash != (common.Hash{}) { + // Request the peer's checkpoint header for chain height/weight validation + if err := p.RequestHeadersByNumber(pm.checkpointNumber, 1, 0, false); err != nil { return err } // Start a timer to disconnect if the peer doesn't reply in time - p.forkDrop = time.AfterFunc(daoChallengeTimeout, func() { - p.Log().Debug("Timed out DAO fork-check, dropping") + p.syncDrop = time.AfterFunc(syncChallengeTimeout, func() { + p.Log().Warn("Checkpoint challenge timed out, dropping", "addr", p.RemoteAddr(), "type", p.Name()) pm.removePeer(p.id) }) // Make sure it's cleaned up if the peer dies off defer func() { - if p.forkDrop != nil { - p.forkDrop.Stop() - p.forkDrop = nil + if p.syncDrop != nil { + p.syncDrop.Stop() + p.syncDrop = nil } }() } @@ -356,8 +391,8 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err != nil { return err } - if msg.Size > ProtocolMaxMsgSize { - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) + if msg.Size > protocolMaxMsgSize { + return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, protocolMaxMsgSize) } defer msg.Discard() @@ -474,41 +509,33 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Metadium: it's non-blocking now go func() error { - // If no headers were received, but we're expending a DAO fork check, maybe it's that - if len(headers) == 0 && p.forkDrop != nil { - // Possibly an empty reply to the fork header checks, sanity check TDs - verifyDAO := true - - // If we already have a DAO header, we can check the peer's TD against it. If - // the peer's ahead of this, it too must have a reply to the DAO check - if daoHeader := pm.blockchain.GetHeaderByNumber(pm.chainconfig.DAOForkBlock.Uint64()); daoHeader != nil { - if _, td := p.Head(); td.Cmp(pm.blockchain.GetTd(daoHeader.Hash(), daoHeader.Number.Uint64())) >= 0 { - verifyDAO = false - } - } - // If we're seemingly on the same chain, disable the drop timer - if verifyDAO { - p.Log().Debug("Seems to be on the same side of the DAO fork") - p.forkDrop.Stop() - p.forkDrop = nil - return nil + // If no headers were received, but we're expencting a checkpoint header, consider it that + if len(headers) == 0 && p.syncDrop != nil { + // Stop the timer either way, decide later to drop or not + p.syncDrop.Stop() + p.syncDrop = nil + + // If we're doing a fast sync, we must enforce the checkpoint block to avoid + // eclipse attacks. Unsynced nodes are welcome to connect after we're done + // joining the network + if atomic.LoadUint32(&pm.fastSync) == 1 { + p.Log().Warn("Dropping unsynced node during fast sync", "addr", p.RemoteAddr(), "type", p.Name()) + return errors.New("unsynced node cannot serve fast sync") } } // Filter out any explicitly requested headers, deliver the rest to the downloader filter := len(headers) == 1 if filter { - // If it's a potential DAO fork check, validate against the rules - if p.forkDrop != nil && pm.chainconfig.DAOForkBlock.Cmp(headers[0].Number) == 0 { - // Disable the fork drop timer - p.forkDrop.Stop() - p.forkDrop = nil + // If it's a potential sync progress check, validate the content and advertised chain weight + if p.syncDrop != nil && headers[0].Number.Uint64() == pm.checkpointNumber { + // Disable the sync drop timer + p.syncDrop.Stop() + p.syncDrop = nil // Validate the header and either drop the peer or continue - if err := misc.VerifyDAOHeaderExtraData(pm.chainconfig, headers[0]); err != nil { - p.Log().Debug("Verified to be on the other side of the DAO fork, dropping") - return err + if headers[0].Hash() != pm.checkpointHash { + return errors.New("checkpoint hash mismatch") } - p.Log().Debug("Verified to be on the same side of the DAO fork") return nil } // Otherwise if it's a whitelisted block, validate against the set @@ -598,7 +625,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { transactions, uncles = pm.fetcher.FilterBodies(p.id, transactions, uncles, time.Now()) } if len(transactions) > 0 { - signer := types.MakeSigner(pm.chainconfig, pm.blockchain.CurrentBlock().Number()) + signer := types.MakeSigner(pm.blockchain.Config(), pm.blockchain.CurrentBlock().Number()) for _, txs := range transactions { pm.txpool.ResolveSenders(signer, txs) } @@ -774,6 +801,9 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { if err := msg.Decode(&request); err != nil { return errResp(ErrDecode, "%v: %v", msg, err) } + if err := request.sanityCheck(); err != nil { + return err + } // Metadium: it's non-blocking now go func() error { @@ -845,7 +875,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { // Metadium: it's non-blocking now go func() error { - signer := types.MakeSigner(pm.chainconfig, pm.blockchain.CurrentBlock().Number()) + signer := types.MakeSigner(pm.blockchain.Config(), pm.blockchain.CurrentBlock().Number()) txs := types.TxExs2Txs(signer, txexs, metaminer.IsPartner(p.ID().String())) for i, tx := range txs { // Validate and mark the remote transaction diff --git a/eth/handler_test.go b/eth/handler_test.go index 9fffd9581198..0f1672fd4498 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -27,46 +27,17 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" ) -// Tests that protocol versions and modes of operations are matched up properly. -func TestProtocolCompatibility(t *testing.T) { - // Define the compatibility chart - tests := []struct { - version uint - mode downloader.SyncMode - compatible bool - }{ - {61, downloader.FullSync, true}, {62, downloader.FullSync, true}, {63, downloader.FullSync, true}, - {61, downloader.FastSync, false}, {62, downloader.FastSync, false}, {63, downloader.FastSync, true}, - } - // Make sure anything we screw up is restored - backup := ProtocolVersions - defer func() { ProtocolVersions = backup }() - - // Try all available compatibility configs and check for errors - for i, tt := range tests { - ProtocolVersions = []uint{tt.version} - - pm, _, err := newTestProtocolManager(tt.mode, 0, nil, nil) - if pm != nil { - defer pm.Stop() - } - if (err == nil && !tt.compatible) || (err != nil && tt.compatible) { - t.Errorf("test %d: compatibility mismatch: have error %v, want compatibility %v", i, err, tt.compatible) - } - } -} - // Tests that block headers can be retrieved from a remote chain based on user queries. func TestGetBlockHeaders62(t *testing.T) { testGetBlockHeaders(t, 62) } func TestGetBlockHeaders63(t *testing.T) { testGetBlockHeaders(t, 63) } @@ -344,11 +315,15 @@ func testGetNodeData(t *testing.T, protocol int) { // Fetch for now the entire chain db hashes := []common.Hash{} - for _, key := range db.Keys() { - if len(key) == len(common.Hash{}) { + + it := db.NewIterator() + for it.Next() { + if key := it.Key(); len(key) == common.HashLength { hashes = append(hashes, common.BytesToHash(key)) } } + it.Release() + p2p.Send(peer.app, 0x0d, hashes) msg, err := peer.app.ReadMsg() if err != nil { @@ -367,7 +342,7 @@ func testGetNodeData(t *testing.T, protocol int) { t.Errorf("data hash mismatch: have %x, want %x", hash, want) } } - statedb := ethdb.NewMemDatabase() + statedb := rawdb.NewMemoryDatabase() for i := 0; i < len(data); i++ { statedb.Put(hashes[i].Bytes(), data[i]) } @@ -449,79 +424,125 @@ func testGetReceipt(t *testing.T, protocol int) { } } -// Tests that post eth protocol handshake, DAO fork-enabled clients also execute -// a DAO "challenge" verifying each others' DAO fork headers to ensure they're on -// compatible chains. -func TestDAOChallengeNoVsNo(t *testing.T) { testDAOChallenge(t, false, false, false) } -func TestDAOChallengeNoVsPro(t *testing.T) { testDAOChallenge(t, false, true, false) } -func TestDAOChallengeProVsNo(t *testing.T) { testDAOChallenge(t, true, false, false) } -func TestDAOChallengeProVsPro(t *testing.T) { testDAOChallenge(t, true, true, false) } -func TestDAOChallengeNoVsTimeout(t *testing.T) { testDAOChallenge(t, false, false, true) } -func TestDAOChallengeProVsTimeout(t *testing.T) { testDAOChallenge(t, true, true, true) } - -func testDAOChallenge(t *testing.T, localForked, remoteForked bool, timeout bool) { - // Reduce the DAO handshake challenge timeout - if timeout { - defer func(old time.Duration) { daoChallengeTimeout = old }(daoChallengeTimeout) - daoChallengeTimeout = 500 * time.Millisecond - } - // Create a DAO aware protocol manager +// Tests that post eth protocol handshake, clients perform a mutual checkpoint +// challenge to validate each other's chains. Hash mismatches, or missing ones +// during a fast sync should lead to the peer getting dropped. +func TestCheckpointChallenge(t *testing.T) { + tests := []struct { + syncmode downloader.SyncMode + checkpoint bool + timeout bool + empty bool + match bool + drop bool + }{ + // If checkpointing is not enabled locally, don't challenge and don't drop + {downloader.FullSync, false, false, false, false, false}, + {downloader.FastSync, false, false, false, false, false}, + + // If checkpointing is enabled locally and remote response is empty, only drop during fast sync + {downloader.FullSync, true, false, true, false, false}, + {downloader.FastSync, true, false, true, false, true}, // Special case, fast sync, unsynced peer + + // If checkpointing is enabled locally and remote response mismatches, always drop + {downloader.FullSync, true, false, false, false, true}, + {downloader.FastSync, true, false, false, false, true}, + + // If checkpointing is enabled locally and remote response matches, never drop + {downloader.FullSync, true, false, false, true, false}, + {downloader.FastSync, true, false, false, true, false}, + + // If checkpointing is enabled locally and remote times out, always drop + {downloader.FullSync, true, true, false, true, true}, + {downloader.FastSync, true, true, false, true, true}, + } + for _, tt := range tests { + t.Run(fmt.Sprintf("sync %v checkpoint %v timeout %v empty %v match %v", tt.syncmode, tt.checkpoint, tt.timeout, tt.empty, tt.match), func(t *testing.T) { + testCheckpointChallenge(t, tt.syncmode, tt.checkpoint, tt.timeout, tt.empty, tt.match, tt.drop) + }) + } +} + +func testCheckpointChallenge(t *testing.T, syncmode downloader.SyncMode, checkpoint bool, timeout bool, empty bool, match bool, drop bool) { + // Reduce the checkpoint handshake challenge timeout + defer func(old time.Duration) { syncChallengeTimeout = old }(syncChallengeTimeout) + syncChallengeTimeout = 250 * time.Millisecond + + // Initialize a chain and generate a fake CHT if checkpointing is enabled var ( - evmux = new(event.TypeMux) - pow = ethash.NewFaker() - db = ethdb.NewMemDatabase() - config = ¶ms.ChainConfig{DAOForkBlock: big.NewInt(1), DAOForkSupport: localForked} - gspec = &core.Genesis{Config: config} - genesis = gspec.MustCommit(db) + db = rawdb.NewMemoryDatabase() + config = new(params.ChainConfig) ) - blockchain, err := core.NewBlockChain(db, nil, config, pow, vm.Config{}, nil) + (&core.Genesis{Config: config}).MustCommit(db) // Commit genesis block + // If checkpointing is enabled, create and inject a fake CHT and the corresponding + // chllenge response. + var response *types.Header + var cht *params.TrustedCheckpoint + if checkpoint { + index := uint64(rand.Intn(500)) + number := (index+1)*params.CHTFrequency - 1 + response = &types.Header{Number: big.NewInt(int64(number)), Extra: []byte("valid")} + + cht = ¶ms.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: response.Hash(), + } + } + // Create a checkpoint aware protocol manager + blockchain, err := core.NewBlockChain(db, nil, config, ethash.NewFaker(), vm.Config{}, nil) if err != nil { t.Fatalf("failed to create new blockchain: %v", err) } - pm, err := NewProtocolManager(config, downloader.FullSync, DefaultConfig.NetworkId, evmux, new(testTxPool), pow, blockchain, db, nil) + pm, err := NewProtocolManager(config, cht, syncmode, DefaultConfig.NetworkId, new(event.TypeMux), new(testTxPool), ethash.NewFaker(), blockchain, db, 1, nil) if err != nil { t.Fatalf("failed to start test protocol manager: %v", err) } pm.Start(1000) defer pm.Stop() - // Connect a new peer and check that we receive the DAO challenge + // Connect a new peer and check that we receive the checkpoint challenge peer, _ := newTestPeer("peer", eth63, pm, true) defer peer.close() - challenge := &getBlockHeadersData{ - Origin: hashOrNumber{Number: config.DAOForkBlock.Uint64()}, - Amount: 1, - Skip: 0, - Reverse: false, - } - if err := p2p.ExpectMsg(peer.app, GetBlockHeadersMsg, challenge); err != nil { - t.Fatalf("challenge mismatch: %v", err) - } - // Create a block to reply to the challenge if no timeout is simulated - if !timeout { - blocks, _ := core.GenerateChain(¶ms.ChainConfig{}, genesis, ethash.NewFaker(), db, 1, func(i int, block *core.BlockGen) { - if remoteForked { - block.SetExtra(params.DAOForkBlockExtra) + if checkpoint { + challenge := &getBlockHeadersData{ + Origin: hashOrNumber{Number: response.Number.Uint64()}, + Amount: 1, + Skip: 0, + Reverse: false, + } + if err := p2p.ExpectMsg(peer.app, GetBlockHeadersMsg, challenge); err != nil { + t.Fatalf("challenge mismatch: %v", err) + } + // Create a block to reply to the challenge if no timeout is simulated + if !timeout { + if empty { + if err := p2p.Send(peer.app, BlockHeadersMsg, []*types.Header{}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } else if match { + if err := p2p.Send(peer.app, BlockHeadersMsg, []*types.Header{response}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } + } else { + if err := p2p.Send(peer.app, BlockHeadersMsg, []*types.Header{{Number: response.Number}}); err != nil { + t.Fatalf("failed to answer challenge: %v", err) + } } - }) - if err := p2p.Send(peer.app, BlockHeadersMsg, []*types.Header{blocks[0].Header()}); err != nil { - t.Fatalf("failed to answer challenge: %v", err) } - time.Sleep(100 * time.Millisecond) // Sleep to avoid the verification racing with the drops - } else { - // Otherwise wait until the test timeout passes - time.Sleep(daoChallengeTimeout + 500*time.Millisecond) } - // Verify that depending on fork side, the remote peer is maintained or dropped - if localForked == remoteForked && !timeout { - if peers := pm.peers.Len(); peers != 1 { - t.Fatalf("peer count mismatch: have %d, want %d", peers, 1) - } - } else { + // Wait until the test timeout passes to ensure proper cleanup + time.Sleep(syncChallengeTimeout + 100*time.Millisecond) + + // Verify that the remote peer is maintained or dropped + if drop { if peers := pm.peers.Len(); peers != 0 { t.Fatalf("peer count mismatch: have %d, want %d", peers, 0) } + } else { + if peers := pm.peers.Len(); peers != 1 { + t.Fatalf("peer count mismatch: have %d, want %d", peers, 1) + } } } @@ -550,7 +571,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) { var ( evmux = new(event.TypeMux) pow = ethash.NewFaker() - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() config = ¶ms.ChainConfig{} gspec = &core.Genesis{Config: config} genesis = gspec.MustCommit(db) @@ -559,7 +580,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) { if err != nil { t.Fatalf("failed to create new blockchain: %v", err) } - pm, err := NewProtocolManager(config, downloader.FullSync, DefaultConfig.NetworkId, evmux, new(testTxPool), pow, blockchain, db, nil) + pm, err := NewProtocolManager(config, nil, downloader.FullSync, DefaultConfig.NetworkId, evmux, new(testTxPool), pow, blockchain, db, 1, nil) if err != nil { t.Fatalf("failed to start test protocol manager: %v", err) } diff --git a/eth/helper_test.go b/eth/helper_test.go index b18a02baf955..1482e99c4e10 100644 --- a/eth/helper_test.go +++ b/eth/helper_test.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -49,11 +50,11 @@ var ( // newTestProtocolManager creates a new protocol manager for testing purposes, // with the given number of blocks already known, and potential notification // channels for different events. -func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, *ethdb.MemDatabase, error) { +func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, ethdb.Database, error) { var ( evmux = new(event.TypeMux) engine = ethash.NewFaker() - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = &core.Genesis{ Config: params.TestChainConfig, Alloc: core.GenesisAlloc{testBank: {Balance: big.NewInt(1000000)}}, @@ -65,8 +66,7 @@ func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func if _, err := blockchain.InsertChain(chain); err != nil { panic(err) } - - pm, err := NewProtocolManager(gspec.Config, mode, DefaultConfig.NetworkId, evmux, &testTxPool{added: newtx}, engine, blockchain, db, nil) + pm, err := NewProtocolManager(gspec.Config, nil, mode, DefaultConfig.NetworkId, evmux, &testTxPool{added: newtx}, engine, blockchain, db, 1, nil) if err != nil { return nil, nil, err } @@ -78,7 +78,7 @@ func newTestProtocolManager(mode downloader.SyncMode, blocks int, generator func // with the given number of blocks already known, and potential notification // channels for different events. In case of an error, the constructor force- // fails the test. -func newTestProtocolManagerMust(t *testing.T, mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, *ethdb.MemDatabase) { +func newTestProtocolManagerMust(t *testing.T, mode downloader.SyncMode, blocks int, generator func(int, *core.BlockGen), newtx chan<- []*types.Transaction) (*ProtocolManager, ethdb.Database) { pm, db, err := newTestProtocolManager(mode, blocks, generator, newtx) if err != nil { t.Fatalf("Failed to create protocol manager: %v", err) diff --git a/eth/peer.go b/eth/peer.go index 5e2f97d20395..76c7f9b351ab 100644 --- a/eth/peer.go +++ b/eth/peer.go @@ -83,7 +83,7 @@ type peer struct { rw p2p.MsgReadWriter version int // Protocol version negotiated - forkDrop *time.Timer // Timed connection dropper if forks aren't validated in time + syncDrop *time.Timer // Timed connection dropper if sync progress isn't validated in time head common.Hash td *big.Int @@ -209,6 +209,7 @@ func (p *peer) MarkTransaction(hash common.Hash) { // SendTransactions sends transactions to the peer and includes the hashes // in its transaction hash set for future reference. func (p *peer) SendTransactions(txs types.Transactions) error { + // Mark all the transactions as known, but ensure we don't overflow our limits for _, tx := range txs { p.knownTxs.Put(tx.Hash(), true) } @@ -224,6 +225,7 @@ func (p *peer) SendTransactions(txs types.Transactions) error { func (p *peer) AsyncSendTransactions(txs []*types.Transaction) { select { case p.queuedTxs <- txs: + // Mark all the transactions as known, but ensure we don't overflow our limits for _, tx := range txs { p.knownTxs.Put(tx.Hash(), true) } @@ -242,6 +244,7 @@ func (p *peer) resendPendingTxs(txs map[common.Address]types.Transactions) { // SendNewBlockHashes announces the availability of a number of blocks through // a hash notification. func (p *peer) SendNewBlockHashes(hashes []common.Hash, numbers []uint64) error { + // Mark all the block hashes as known, but ensure we don't overflow our limits for _, hash := range hashes { p.knownBlocks.Put(hash, true) } @@ -259,6 +262,7 @@ func (p *peer) SendNewBlockHashes(hashes []common.Hash, numbers []uint64) error func (p *peer) AsyncSendNewBlockHash(block *types.Block) { select { case p.queuedAnns <- block: + // Mark all the block hash as known, but ensure we don't overflow our limits p.knownBlocks.Put(block.Hash(), true) default: p.Log().Debug("Dropping block announcement", "number", block.NumberU64(), "hash", block.Hash()) @@ -267,6 +271,7 @@ func (p *peer) AsyncSendNewBlockHash(block *types.Block) { // SendNewBlock propagates an entire block to a remote peer. func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error { + // Mark all the block hash as known, but ensure we don't overflow our limits p.knownBlocks.Put(block.Hash(), true) return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, td}) } @@ -276,6 +281,7 @@ func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error { func (p *peer) AsyncSendNewBlock(block *types.Block, td *big.Int) { select { case p.queuedProps <- &propEvent{block: block, td: td}: + // Mark all the block hash as known, but ensure we don't overflow our limits p.knownBlocks.Put(block.Hash(), true) default: p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash()) @@ -422,8 +428,8 @@ func (p *peer) readStatus(network uint64, status *statusData, genesis common.Has if msg.Code != StatusMsg { return errResp(ErrNoStatusMsg, "first msg has code %x (!= %x)", msg.Code, StatusMsg) } - if msg.Size > ProtocolMaxMsgSize { - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) + if msg.Size > protocolMaxMsgSize { + return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, protocolMaxMsgSize) } // Decode the handshake and make sure everything matches if err := msg.Decode(&status); err != nil { diff --git a/eth/protocol.go b/eth/protocol.go index aafdb8f4d723..2ca6ae6fb3b2 100644 --- a/eth/protocol.go +++ b/eth/protocol.go @@ -36,15 +36,15 @@ const ( ) // ProtocolName is the official short name of the protocol used during capability negotiation. -var ProtocolName = "meta" +var protocolName = "meta" // ProtocolVersions are the supported versions of the eth protocol (first is primary). -var ProtocolVersions = []uint{eth64, eth63, eth62} +var ProtocolVersions = []uint{eth64, eth63} // ProtocolLengths are the number of implemented message corresponding to different protocol versions. -var ProtocolLengths = []uint64{23, 22, 8} +var protocolLengths = map[uint]uint64{eth64: 23, eth63: 22, eth62: 8} -const ProtocolMaxMsgSize = 100 * 1024 * 1024 // Maximum cap on the size of a protocol message +const protocolMaxMsgSize = 100 * 1024 * 1024 // Maximum cap on the size of a protocol message // eth protocol message codes const ( @@ -187,6 +187,19 @@ type newBlockData struct { TD *big.Int } +// sanityCheck verifies that the values are reasonable, as a DoS protection +func (request *newBlockData) sanityCheck() error { + if err := request.Block.SanityCheck(); err != nil { + return err + } + //TD at mainnet block #7753254 is 76 bits. If it becomes 100 million times + // larger, it will still fit within 100 bits + if tdlen := request.TD.BitLen(); tdlen > 100 { + return fmt.Errorf("too large block TD: bitlen %d", tdlen) + } + return nil +} + // blockBody represents the data content of a single block. type blockBody struct { Transactions []*types.Transaction // Transactions contained within a block diff --git a/eth/protocol_test.go b/eth/protocol_test.go index aa43dfa9204e..e817d673a6f0 100644 --- a/eth/protocol_test.go +++ b/eth/protocol_test.go @@ -64,7 +64,7 @@ func testStatusMsgErrors(t *testing.T, protocol int) { }, { code: StatusMsg, data: statusData{uint32(protocol), 999, td, head.Hash(), genesis.Hash()}, - wantError: errResp(ErrNetworkIdMismatch, "999 (!= 1)"), + wantError: errResp(ErrNetworkIdMismatch, "999 (!= %d)", DefaultConfig.NetworkId), }, { code: StatusMsg, data: statusData{uint32(protocol), DefaultConfig.NetworkId, td, head.Hash(), common.Hash{3}}, diff --git a/eth/sync.go b/eth/sync.go index 0979ec50ed78..0a0ad9d26a6b 100644 --- a/eth/sync.go +++ b/eth/sync.go @@ -185,23 +185,13 @@ func (pm *ProtocolManager) synchronise(peer *peer) { if atomic.LoadUint32(&pm.fastSync) == 1 { // Fast sync was explicitly requested, and explicitly granted mode = downloader.FastSync - } else if currentBlock.NumberU64() == 0 && pm.blockchain.CurrentFastBlock().NumberU64() > 0 { - // The database seems empty as the current block is the genesis. Yet the fast - // block is ahead, so fast sync was enabled for this node at a certain point. - // The only scenario where this can happen is if the user manually (or via a - // bad block) rolled back a fast sync node below the sync point. In this case - // however it's safe to reenable fast sync. - atomic.StoreUint32(&pm.fastSync, 1) - mode = downloader.FastSync } - if mode == downloader.FastSync { // Make sure the peer's total difficulty we are synchronizing is higher. if pm.blockchain.GetTdByHash(pm.blockchain.CurrentFastBlock().Hash()).Cmp(pTd) >= 0 { return } } - // Run the sync cycle, and disable fast sync if we've went past the pivot block if err := pm.downloader.Synchronise(peer.id, pHead, pTd, mode); err != nil { return @@ -210,8 +200,17 @@ func (pm *ProtocolManager) synchronise(peer *peer) { log.Info("Fast sync complete, auto disabling") atomic.StoreUint32(&pm.fastSync, 0) } - atomic.StoreUint32(&pm.acceptTxs, 1) // Mark initial sync done - if head := pm.blockchain.CurrentBlock(); head.NumberU64() > 0 { + // If we've successfully finished a sync cycle and passed any required checkpoint, + // enable accepting transactions from the network. + head := pm.blockchain.CurrentBlock() + if head.NumberU64() >= pm.checkpointNumber { + // Checkpoint passed, sanity check the timestamp to have a fallback mechanism + // for non-checkpointed (number = 0) private networks. + if head.Time() >= uint64(time.Now().AddDate(0, -1, 0).Unix()) { + atomic.StoreUint32(&pm.acceptTxs, 1) + } + } + if head.NumberU64() > 0 { // We've completed a sync cycle, notify all peers of new state. This path is // essential in star-topology networks where a gateway node needs to notify // all its out-of-date peers of the availability of a new block. This failure diff --git a/eth/tracers/internal/tracers/evmdis_tracer.js b/eth/tracers/internal/tracers/evmdis_tracer.js index 2790e0fd527c..bb19777aba91 100644 --- a/eth/tracers/internal/tracers/evmdis_tracer.js +++ b/eth/tracers/internal/tracers/evmdis_tracer.js @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// evmdisTracer returns sufficent information from a trace to perform evmdis-style +// evmdisTracer returns sufficient information from a trace to perform evmdis-style // disassembly. { stack: [{ops: []}], diff --git a/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json b/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json index b8a4cdd23359..d1c8ac913c54 100644 --- a/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json +++ b/eth/tracers/testdata/call_tracer_inner_create_oog_outer_throw.json @@ -65,7 +65,7 @@ "value": "0x0" } ], - "error": "invalid jump destination (PUSH1) 0", + "error": "evm: invalid jump destination", "from": "0xe4a13bc304682a903e9472f469c33801dd18d9e8", "gas": "0x435c8", "gasUsed": "0x435c8", diff --git a/eth/tracers/testdata/call_tracer_throw.json b/eth/tracers/testdata/call_tracer_throw.json index 60d4d1071d02..d66f1ffa61de 100644 --- a/eth/tracers/testdata/call_tracer_throw.json +++ b/eth/tracers/testdata/call_tracer_throw.json @@ -50,7 +50,7 @@ }, "input": "0xf88b8206668504a817c8008303d09094c212e03b9e060e36facad5fd8f4435412ca22e6b80a451a34eb8000000000000000000000000000000000000000000000027fad02094277c000029a0692a3b4e7b2842f8dd7832e712c21e09f451f416c8976d5b8d02e8c0c2b4bea9a07645e90fc421b63dd755767fd93d3c03b4ec0c4d8fafa059558d08cf11d59750", "result": { - "error": "invalid jump destination (PUSH1) 2", + "error": "evm: invalid jump destination", "from": "0x70c9217d814985faef62b124420f8dfbddd96433", "gas": "0x37b38", "gasUsed": "0x37b38", diff --git a/eth/tracers/tracer.go b/eth/tracers/tracer.go index 9d6701868c72..c0729fb1d8a0 100644 --- a/eth/tracers/tracer.go +++ b/eth/tracers/tracer.go @@ -390,7 +390,7 @@ func New(code string) (*Tracer, error) { return 1 }) tracer.vm.PushGlobalGoFunction("isPrecompiled", func(ctx *duktape.Context) int { - _, ok := vm.PrecompiledContractsByzantium[common.BytesToAddress(popSlice(ctx))] + _, ok := vm.PrecompiledContractsIstanbul[common.BytesToAddress(popSlice(ctx))] ctx.PushBoolean(ok) return 1 }) diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go index b435b1694bd8..69eb80a5c53a 100644 --- a/eth/tracers/tracers_test.go +++ b/eth/tracers/tracers_test.go @@ -31,10 +31,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/tests" @@ -121,7 +121,7 @@ type callTracerTest struct { } func TestPrestateTracerCreate2(t *testing.T) { - unsigned_tx := types.NewTransaction(1, common.HexToAddress("0x00000000000000000000000000000000deadbeef"), + unsignedTx := types.NewTransaction(1, common.HexToAddress("0x00000000000000000000000000000000deadbeef"), new(big.Int), 5000000, big.NewInt(1), []byte{}) privateKeyECDSA, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader) @@ -129,7 +129,7 @@ func TestPrestateTracerCreate2(t *testing.T) { t.Fatalf("err %v", err) } signer := types.NewEIP155Signer(big.NewInt(1)) - tx, err := types.SignTx(unsigned_tx, signer, privateKeyECDSA) + tx, err := types.SignTx(unsignedTx, signer, privateKeyECDSA) if err != nil { t.Fatalf("err %v", err) } @@ -155,6 +155,7 @@ func TestPrestateTracerCreate2(t *testing.T) { GasPrice: big.NewInt(1), } alloc := core.GenesisAlloc{} + // The code pushes 'deadbeef' into memory, then the other params, and calls CREATE2, then returns // the address alloc[common.HexToAddress("0x00000000000000000000000000000000deadbeef")] = core.GenesisAccount{ @@ -167,7 +168,8 @@ func TestPrestateTracerCreate2(t *testing.T) { Code: []byte{}, Balance: big.NewInt(500000000000000), } - statedb := tests.MakePreState(ethdb.NewMemDatabase(), alloc) + statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), alloc) + // Create the tracer, the EVM environment and run it tracer, err := New("prestateTracer") if err != nil { @@ -240,7 +242,7 @@ func TestCallTracer(t *testing.T) { GasLimit: uint64(test.Context.GasLimit), GasPrice: tx.GasPrice(), } - statedb := tests.MakePreState(ethdb.NewMemDatabase(), test.Genesis.Alloc) + statedb := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc) // Create the tracer, the EVM environment and run it tracer, err := New("callTracer") diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go index 23a480033133..4a2d2d5babe9 100644 --- a/ethclient/ethclient.go +++ b/ethclient/ethclient.go @@ -61,6 +61,16 @@ func (ec *Client) Close() { // Blockchain Access +// ChainId retrieves the current chain ID for transaction replay protection. +func (ec *Client) ChainID(ctx context.Context) (*big.Int, error) { + var result hexutil.Big + err := ec.c.CallContext(ctx, &result, "eth_chainId") + if err != nil { + return nil, err + } + return (*big.Int)(&result), err +} + // BlockByHash returns the given full block. // // Note that loading full blocks requires two requests. Use HeaderByHash @@ -241,12 +251,13 @@ func (ec *Client) TransactionCount(ctx context.Context, blockHash common.Hash) ( func (ec *Client) TransactionInBlock(ctx context.Context, blockHash common.Hash, index uint) (*types.Transaction, error) { var json *rpcTransaction err := ec.c.CallContext(ctx, &json, "eth_getTransactionByBlockHashAndIndex", blockHash, hexutil.Uint64(index)) - if err == nil { - if json == nil { - return nil, ethereum.NotFound - } else if _, r, _ := json.tx.RawSignatureValues(); r == nil { - return nil, fmt.Errorf("server returned transaction without signature") - } + if err != nil { + return nil, err + } + if json == nil { + return nil, ethereum.NotFound + } else if _, r, _ := json.tx.RawSignatureValues(); r == nil { + return nil, fmt.Errorf("server returned transaction without signature") } if json.From != nil && json.BlockHash != nil { setSenderFromServer(json.tx, *json.From, *json.BlockHash) diff --git a/ethclient/ethclient_test.go b/ethclient/ethclient_test.go index 3e8bf974c23d..3576d4870e66 100644 --- a/ethclient/ethclient_test.go +++ b/ethclient/ethclient_test.go @@ -17,13 +17,24 @@ package ethclient import ( + "context" + "errors" "fmt" "math/big" "reflect" "testing" + "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" ) // Verify that Client implements the ethereum interfaces. @@ -150,3 +161,177 @@ func TestToFilterArg(t *testing.T) { }) } } + +var ( + testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddr = crypto.PubkeyToAddress(testKey.PublicKey) + testBalance = big.NewInt(2e10) +) + +func newTestBackend(t *testing.T) (*node.Node, []*types.Block) { + // Generate test chain. + genesis, blocks := generateTestChain() + + // Start Ethereum service. + var ethservice *eth.Ethereum + n, err := node.New(&node.Config{}) + n.Register(func(ctx *node.ServiceContext) (node.Service, error) { + config := ð.Config{Genesis: genesis} + config.Ethash.PowMode = ethash.ModeFake + ethservice, err = eth.New(ctx, config) + return ethservice, err + }) + + // Import the test chain. + if err := n.Start(); err != nil { + t.Fatalf("can't start test node: %v", err) + } + if _, err := ethservice.BlockChain().InsertChain(blocks[1:]); err != nil { + t.Fatalf("can't import test blocks: %v", err) + } + return n, blocks +} + +func generateTestChain() (*core.Genesis, []*types.Block) { + db := rawdb.NewMemoryDatabase() + config := params.AllEthashProtocolChanges + genesis := &core.Genesis{ + Config: config, + Alloc: core.GenesisAlloc{testAddr: {Balance: testBalance}}, + ExtraData: []byte("test genesis"), + Timestamp: 9000, + } + generate := func(i int, g *core.BlockGen) { + g.OffsetTime(5) + g.SetExtra([]byte("test")) + } + gblock := genesis.ToBlock(db) + engine := ethash.NewFaker() + blocks, _ := core.GenerateChain(config, gblock, engine, db, 1, generate) + blocks = append([]*types.Block{gblock}, blocks...) + return genesis, blocks +} + +func TestHeader(t *testing.T) { + backend, chain := newTestBackend(t) + client, _ := backend.Attach() + defer backend.Stop() + defer client.Close() + + tests := map[string]struct { + block *big.Int + want *types.Header + wantErr error + }{ + "genesis": { + block: big.NewInt(0), + want: chain[0].Header(), + }, + "first_block": { + block: big.NewInt(1), + want: chain[1].Header(), + }, + "future_block": { + block: big.NewInt(1000000000), + want: nil, + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + ec := NewClient(client) + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) + defer cancel() + + got, err := ec.HeaderByNumber(ctx, tt.block) + if tt.wantErr != nil && (err == nil || err.Error() != tt.wantErr.Error()) { + t.Fatalf("HeaderByNumber(%v) error = %q, want %q", tt.block, err, tt.wantErr) + } + if got != nil && got.Number.Sign() == 0 { + got.Number = big.NewInt(0) // hack to make DeepEqual work + } + if !reflect.DeepEqual(got, tt.want) { + t.Fatalf("HeaderByNumber(%v)\n = %v\nwant %v", tt.block, got, tt.want) + } + }) + } +} + +func TestBalanceAt(t *testing.T) { + backend, _ := newTestBackend(t) + client, _ := backend.Attach() + defer backend.Stop() + defer client.Close() + + tests := map[string]struct { + account common.Address + block *big.Int + want *big.Int + wantErr error + }{ + "valid_account": { + account: testAddr, + block: big.NewInt(1), + want: testBalance, + }, + "non_existent_account": { + account: common.Address{1}, + block: big.NewInt(1), + want: big.NewInt(0), + }, + "future_block": { + account: testAddr, + block: big.NewInt(1000000000), + want: big.NewInt(0), + wantErr: errors.New("header not found"), + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + ec := NewClient(client) + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) + defer cancel() + + got, err := ec.BalanceAt(ctx, tt.account, tt.block) + if tt.wantErr != nil && (err == nil || err.Error() != tt.wantErr.Error()) { + t.Fatalf("BalanceAt(%x, %v) error = %q, want %q", tt.account, tt.block, err, tt.wantErr) + } + if got.Cmp(tt.want) != 0 { + t.Fatalf("BalanceAt(%x, %v) = %v, want %v", tt.account, tt.block, got, tt.want) + } + }) + } +} + +func TestTransactionInBlockInterrupted(t *testing.T) { + backend, _ := newTestBackend(t) + client, _ := backend.Attach() + defer backend.Stop() + defer client.Close() + + ec := NewClient(client) + ctx, cancel := context.WithCancel(context.Background()) + cancel() + tx, err := ec.TransactionInBlock(ctx, common.Hash{1}, 1) + if tx != nil { + t.Fatal("transaction should be nil") + } + if err == nil { + t.Fatal("error should not be nil") + } +} + +func TestChainID(t *testing.T) { + backend, _ := newTestBackend(t) + client, _ := backend.Attach() + defer backend.Stop() + defer client.Close() + ec := NewClient(client) + + id, err := ec.ChainID(context.Background()) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if id == nil || id.Cmp(params.AllEthashProtocolChanges.ChainID) != 0 { + t.Fatalf("ChainID returned wrong number: %+v", id) + } +} diff --git a/ethdb/.gitignore b/ethdb/.gitignore deleted file mode 100644 index f725d58d14f7..000000000000 --- a/ethdb/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. -# -# If you find yourself ignoring temporary files generated by your text editor -# or operating system, you probably want to add a global ignore instead: -# git config --global core.excludesfile ~/.gitignore_global - -/tmp -*/**/*un~ -*un~ -.DS_Store -*/**/.DS_Store - diff --git a/ethdb/interface.go b/ethdb/batch.go similarity index 53% rename from ethdb/interface.go rename to ethdb/batch.go index af13557798cf..e261415bff9d 100644 --- a/ethdb/interface.go +++ b/ethdb/batch.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -16,37 +16,31 @@ package ethdb -// Code using batches should try to add this much data to the batch. -// The value was determined empirically. +// IdealBatchSize defines the size of the data batches should ideally add in one +// write. const IdealBatchSize = 100 * 1024 -// Putter wraps the database write operation supported by both batches and regular databases. -type Putter interface { - Put(key []byte, value []byte) error -} - -// Deleter wraps the database delete operation supported by both batches and regular databases. -type Deleter interface { - Delete(key []byte) error -} - -// Database wraps all database operations. All methods are safe for concurrent use. -type Database interface { - Putter - Deleter - Get(key []byte) ([]byte, error) - Has(key []byte) (bool, error) - Close() - NewBatch() Batch -} - // Batch is a write-only database that commits changes to its host database -// when Write is called. Batch cannot be used concurrently. +// when Write is called. A batch cannot be used concurrently. type Batch interface { - Putter - Deleter - ValueSize() int // amount of data in the batch + KeyValueWriter + + // ValueSize retrieves the amount of data queued up for writing. + ValueSize() int + + // Write flushes any accumulated data to disk. Write() error - // Reset resets the batch for reuse + + // Reset resets the batch for reuse. Reset() + + // Replay replays the batch contents. + Replay(w KeyValueWriter) error +} + +// Batcher wraps the NewBatch method of a backing data store. +type Batcher interface { + // NewBatch creates a write-only database that buffers changes to its host db + // until a final write is called. + NewBatch() Batch } diff --git a/ethdb/database.go b/ethdb/database.go index d36464d1e2ec..959f49240a15 100644 --- a/ethdb/database.go +++ b/ethdb/database.go @@ -14,420 +14,132 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !js - +// Package ethdb defines the interfaces for an Ethereum data store. package ethdb import ( - "fmt" - "strconv" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/params" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/errors" - "github.com/syndtr/goleveldb/leveldb/filter" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" - "github.com/syndtr/goleveldb/leveldb/util" -) - -const ( - writePauseWarningThrottler = 1 * time.Minute -) + "io" -var OpenFileLimit = 64 - -// Metadium: db stats -// (reads, read bytes, writes, written bytes, lookups, deletes) -var ( - _stats_enabled = false - _r_count, _r_bytes, _w_count, _w_bytes, _l_count, _d_count uint64 + //"github.com/ethereum/go-ethereum/ethdb/rocksdb" ) -type LDBDatabase struct { - fn string // filename for reporting - db *leveldb.DB // LevelDB instance - - compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction - compReadMeter metrics.Meter // Meter for measuring the data read during compaction - compWriteMeter metrics.Meter // Meter for measuring the data written during compaction - writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction - writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction - diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read - diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written - - quitLock sync.Mutex // Mutex protecting the quit channel access - quitChan chan chan error // Quit channel to stop the metrics collection before closing the database - - log log.Logger // Contextual logger tracking the database path -} - -// TODO: returns either leveldb or rocksdb based on configuration -func NewDatabase(file string, cache int, handles int) (Database, error) { - if params.UseRocksDb != 0 { - return NewRDBDatabase(file, cache, handles) - } else { - return NewLDBDatabase(file, cache, handles) - } -} - -// NewLDBDatabase returns a LevelDB wrapped object. -func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error) { - logger := log.New("database", file) - - // Ensure we have some minimal caching and file guarantees - if cache < 16 { - cache = 16 - } - if handles < 16 { - handles = 16 - } - logger.Info("Allocated cache and file handles", "cache", cache, "handles", handles) - - // Open the db and recover any potential corruptions - db, err := leveldb.OpenFile(file, &opt.Options{ - OpenFilesCacheCapacity: handles, - BlockCacheCapacity: cache / 2 * opt.MiB, - WriteBuffer: cache / 4 * opt.MiB, // Two of these are used internally - Filter: filter.NewBloomFilter(10), - }) - if _, corrupted := err.(*errors.ErrCorrupted); corrupted { - db, err = leveldb.RecoverFile(file, nil) - } - // (Re)check for errors and abort if opening of the db failed - if err != nil { - return nil, err - } - return &LDBDatabase{ - fn: file, - db: db, - log: logger, - }, nil -} - -// Path returns the path to the database directory. -func (db *LDBDatabase) Path() string { - return db.fn -} - -// Put puts the given key / value to the queue -func (db *LDBDatabase) Put(key []byte, value []byte) error { - if _stats_enabled { - atomic.AddUint64(&_w_count, 1) - atomic.AddUint64(&_w_bytes, uint64(len(key) + len(value))) - } - return db.db.Put(key, value, nil) -} +// KeyValueReader wraps the Has and Get method of a backing data store. +type KeyValueReader interface { + // Has retrieves if a key is present in the key-value data store. + Has(key []byte) (bool, error) -func (db *LDBDatabase) Has(key []byte) (bool, error) { - if _stats_enabled { - atomic.AddUint64(&_l_count, 1) - } - return db.db.Has(key, nil) + // Get retrieves the given key if it's present in the key-value data store. + Get(key []byte) ([]byte, error) } -// Get returns the given key if it's present. -func (db *LDBDatabase) Get(key []byte) ([]byte, error) { - dat, err := db.db.Get(key, nil) - if _stats_enabled { - atomic.AddUint64(&_r_count, 1) - atomic.AddUint64(&_r_bytes, uint64(len(key) + len(dat))) - } - if err != nil { - return nil, err - } - return dat, nil -} +// KeyValueWriter wraps the Put method of a backing data store. +type KeyValueWriter interface { + // Put inserts the given value into the key-value data store. + Put(key []byte, value []byte) error -// Delete deletes the key from the queue and database -func (db *LDBDatabase) Delete(key []byte) error { - if _stats_enabled { - atomic.AddUint64(&_d_count, 1) - } - return db.db.Delete(key, nil) + // Delete removes the key from the key-value data store. + Delete(key []byte) error } -func (db *LDBDatabase) NewIterator() iterator.Iterator { - return db.db.NewIterator(nil, nil) +// Stater wraps the Stat method of a backing data store. +type Stater interface { + // Stat returns a particular internal stat of the database. + Stat(property string) (string, error) } -// NewIteratorWithPrefix returns a iterator to iterate over subset of database content with a particular prefix. -func (db *LDBDatabase) NewIteratorWithPrefix(prefix []byte) iterator.Iterator { - return db.db.NewIterator(util.BytesPrefix(prefix), nil) +// Compacter wraps the Compact method of a backing data store. +type Compacter interface { + // Compact flattens the underlying data store for the given key range. In essence, + // deleted and overwritten versions are discarded, and the data is rearranged to + // reduce the cost of operations needed to access them. + // + // A nil start is treated as a key before all keys in the data store; a nil limit + // is treated as a key after all keys in the data store. If both is nil then it + // will compact entire data store. + Compact(start []byte, limit []byte) error } -func (db *LDBDatabase) Close() { - // Stop the metrics collection to avoid internal database races - db.quitLock.Lock() - defer db.quitLock.Unlock() - - if db.quitChan != nil { - errc := make(chan error) - db.quitChan <- errc - if err := <-errc; err != nil { - db.log.Error("Metrics collection failed", "err", err) - } - db.quitChan = nil - } - err := db.db.Close() - if err == nil { - db.log.Info("Database closed") - } else { - db.log.Error("Failed to close database", "err", err) - } +// KeyValueStore contains all the methods required to allow handling different +// key-value data stores backing the high level database. +type KeyValueStore interface { + KeyValueReader + KeyValueWriter + Batcher + Iteratee + Stater + Compacter + io.Closer } -func (db *LDBDatabase) LDB() *leveldb.DB { - return db.db -} +// AncientReader contains the methods required to read from immutable ancient data. +type AncientReader interface { + // HasAncient returns an indicator whether the specified data exists in the + // ancient store. + HasAncient(kind string, number uint64) (bool, error) -// Meter configures the database metrics collectors and -func (db *LDBDatabase) Meter(prefix string) { - // Initialize all the metrics collector at the requested prefix - db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil) - db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil) - db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil) - db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil) - db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil) - db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil) - db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil) + // Ancient retrieves an ancient binary blob from the append-only immutable files. + Ancient(kind string, number uint64) ([]byte, error) - // Create a quit channel for the periodic collector and run it - db.quitLock.Lock() - db.quitChan = make(chan chan error) - db.quitLock.Unlock() + // Ancients returns the ancient item numbers in the ancient store. + Ancients() (uint64, error) - go db.meter(3 * time.Second) + // AncientSize returns the ancient size of the specified category. + AncientSize(kind string) (uint64, error) } -// meter periodically retrieves internal leveldb counters and reports them to -// the metrics subsystem. -// -// This is how a stats table look like (currently): -// Compactions -// Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB) -// -------+------------+---------------+---------------+---------------+--------------- -// 0 | 0 | 0.00000 | 1.27969 | 0.00000 | 12.31098 -// 1 | 85 | 109.27913 | 28.09293 | 213.92493 | 214.26294 -// 2 | 523 | 1000.37159 | 7.26059 | 66.86342 | 66.77884 -// 3 | 570 | 1113.18458 | 0.00000 | 0.00000 | 0.00000 -// -// This is how the write delay look like (currently): -// DelayN:5 Delay:406.604657ms Paused: false -// -// This is how the iostats look like (currently): -// Read(MB):3895.04860 Write(MB):3654.64712 -func (db *LDBDatabase) meter(refresh time.Duration) { - // Create the counters to store current and previous compaction values - compactions := make([][]float64, 2) - for i := 0; i < 2; i++ { - compactions[i] = make([]float64, 3) - } - // Create storage for iostats. - var iostats [2]float64 - - // Create storage and warning log tracer for write delay. - var ( - delaystats [2]int64 - lastWritePaused time.Time - ) - - var ( - errc chan error - merr error - ) - - // Iterate ad infinitum and collect the stats - for i := 1; errc == nil && merr == nil; i++ { - // Retrieve the database stats - stats, err := db.db.GetProperty("leveldb.stats") - if err != nil { - db.log.Error("Failed to read database stats", "err", err) - merr = err - continue - } - // Find the compaction table, skip the header - lines := strings.Split(stats, "\n") - for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { - lines = lines[1:] - } - if len(lines) <= 3 { - db.log.Error("Compaction table not found") - merr = errors.New("compaction table not found") - continue - } - lines = lines[3:] +// AncientWriter contains the methods required to write to immutable ancient data. +type AncientWriter interface { + // AppendAncient injects all binary blobs belong to block at the end of the + // append-only immutable table files. + AppendAncient(number uint64, hash, header, body, receipt, td []byte) error - // Iterate over all the table rows, and accumulate the entries - for j := 0; j < len(compactions[i%2]); j++ { - compactions[i%2][j] = 0 - } - for _, line := range lines { - parts := strings.Split(line, "|") - if len(parts) != 6 { - break - } - for idx, counter := range parts[3:] { - value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) - if err != nil { - db.log.Error("Compaction entry parsing failed", "err", err) - merr = err - continue - } - compactions[i%2][idx] += value - } - } - // Update all the requested meters - if db.compTimeMeter != nil { - db.compTimeMeter.Mark(int64((compactions[i%2][0] - compactions[(i-1)%2][0]) * 1000 * 1000 * 1000)) - } - if db.compReadMeter != nil { - db.compReadMeter.Mark(int64((compactions[i%2][1] - compactions[(i-1)%2][1]) * 1024 * 1024)) - } - if db.compWriteMeter != nil { - db.compWriteMeter.Mark(int64((compactions[i%2][2] - compactions[(i-1)%2][2]) * 1024 * 1024)) - } - - // Retrieve the write delay statistic - writedelay, err := db.db.GetProperty("leveldb.writedelay") - if err != nil { - db.log.Error("Failed to read database write delay statistic", "err", err) - merr = err - continue - } - var ( - delayN int64 - delayDuration string - duration time.Duration - paused bool - ) - if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { - db.log.Error("Write delay statistic not found") - merr = err - continue - } - duration, err = time.ParseDuration(delayDuration) - if err != nil { - db.log.Error("Failed to parse delay duration", "err", err) - merr = err - continue - } - if db.writeDelayNMeter != nil { - db.writeDelayNMeter.Mark(delayN - delaystats[0]) - } - if db.writeDelayMeter != nil { - db.writeDelayMeter.Mark(duration.Nanoseconds() - delaystats[1]) - } - // If a warning that db is performing compaction has been displayed, any subsequent - // warnings will be withheld for one minute not to overwhelm the user. - if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 && - time.Now().After(lastWritePaused.Add(writePauseWarningThrottler)) { - db.log.Warn("Database compacting, degraded performance") - lastWritePaused = time.Now() - } - delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() - - // Retrieve the database iostats. - ioStats, err := db.db.GetProperty("leveldb.iostats") - if err != nil { - db.log.Error("Failed to read database iostats", "err", err) - merr = err - continue - } - var nRead, nWrite float64 - parts := strings.Split(ioStats, " ") - if len(parts) < 2 { - db.log.Error("Bad syntax of ioStats", "ioStats", ioStats) - merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) - continue - } - if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { - db.log.Error("Bad syntax of read entry", "entry", parts[0]) - merr = err - continue - } - if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { - db.log.Error("Bad syntax of write entry", "entry", parts[1]) - merr = err - continue - } - if db.diskReadMeter != nil { - db.diskReadMeter.Mark(int64((nRead - iostats[0]) * 1024 * 1024)) - } - if db.diskWriteMeter != nil { - db.diskWriteMeter.Mark(int64((nWrite - iostats[1]) * 1024 * 1024)) - } - iostats[0], iostats[1] = nRead, nWrite - - // Sleep a bit, then repeat the stats collection - select { - case errc = <-db.quitChan: - // Quit requesting, stop hammering the database - case <-time.After(refresh): - // Timeout, gather a new set of stats - } - } - - if errc == nil { - errc = <-db.quitChan - } - errc <- merr -} - -func (db *LDBDatabase) NewBatch() Batch { - return &ldbBatch{db: db.db, b: new(leveldb.Batch)} -} - -type ldbBatch struct { - db *leveldb.DB - b *leveldb.Batch - size int -} + // TruncateAncients discards all but the first n ancient data from the ancient store. + TruncateAncients(n uint64) error -func (b *ldbBatch) Put(key, value []byte) error { - if _stats_enabled { - atomic.AddUint64(&_w_count, 1) - atomic.AddUint64(&_w_bytes, uint64(len(key) + len(value))) - } - b.b.Put(key, value) - b.size += len(value) - return nil + // Sync flushes all in-memory ancient store data to disk. + Sync() error } -func (b *ldbBatch) Delete(key []byte) error { - if _stats_enabled { - atomic.AddUint64(&_d_count, 1) - } - b.b.Delete(key) - b.size += 1 - return nil +// Reader contains the methods required to read data from both key-value as well as +// immutable ancient data. +type Reader interface { + KeyValueReader + AncientReader } -func (b *ldbBatch) Write() error { - return b.db.Write(b.b, nil) +// Writer contains the methods required to write data to both key-value as well as +// immutable ancient data. +type Writer interface { + KeyValueWriter + AncientWriter } -func (b *ldbBatch) ValueSize() int { - return b.size +// AncientStore contains all the methods required to allow handling different +// ancient data stores backing immutable chain data store. +type AncientStore interface { + AncientReader + AncientWriter + io.Closer } -func (b *ldbBatch) Reset() { - b.b.Reset() - b.size = 0 +// Database contains all the methods required by the high level database to not +// only access the key-value data store but also the chain freezer. +type Database interface { + Reader + Writer + Batcher + Iteratee + Stater + Compacter + io.Closer } func EnableStats(b bool) { - _stats_enabled = b + //rocksdb.EnableStats(b) + return } func Stats(device string) (disk_r_count, disk_r_bytes, disk_w_couhnt, disk_w_bytes, r_count, r_bytes, w_count, w_bytes, l_count, d_count uint64) { - var diskStats metrics.DiskStats - metrics.ReadProcDiskStats(device, &diskStats) - return uint64(diskStats.ReadCount), uint64(diskStats.ReadBytes), uint64(diskStats.WriteCount), uint64(diskStats.WriteBytes), _r_count, _r_bytes, _w_count, _w_bytes, _l_count, _d_count + //return rocksdb.Stats(device) + return 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } diff --git a/ethdb/database_js.go b/ethdb/database_js.go deleted file mode 100644 index ba6eeb5a237d..000000000000 --- a/ethdb/database_js.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build js - -package ethdb - -import ( - "errors" -) - -var errNotSupported = errors.New("ethdb: not supported") - -type LDBDatabase struct { -} - -// NewLDBDatabase returns a LevelDB wrapped object. -func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error) { - return nil, errNotSupported -} - -// Path returns the path to the database directory. -func (db *LDBDatabase) Path() string { - return "" -} - -// Put puts the given key / value to the queue -func (db *LDBDatabase) Put(key []byte, value []byte) error { - return errNotSupported -} - -func (db *LDBDatabase) Has(key []byte) (bool, error) { - return false, errNotSupported -} - -// Get returns the given key if it's present. -func (db *LDBDatabase) Get(key []byte) ([]byte, error) { - return nil, errNotSupported -} - -// Delete deletes the key from the queue and database -func (db *LDBDatabase) Delete(key []byte) error { - return errNotSupported -} - -func (db *LDBDatabase) Close() { -} - -// Meter configures the database metrics collectors and -func (db *LDBDatabase) Meter(prefix string) { -} - -func (db *LDBDatabase) NewBatch() Batch { - return nil -} diff --git a/ethdb/database_test.go b/ethdb/database_test.go deleted file mode 100644 index 382fedbf9eff..000000000000 --- a/ethdb/database_test.go +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !js - -package ethdb_test - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "strconv" - "sync" - "testing" - - "github.com/ethereum/go-ethereum/ethdb" -) - -func newTestLDB() (*ethdb.LDBDatabase, func()) { - dirname, err := ioutil.TempDir(os.TempDir(), "ethdb_test_") - if err != nil { - panic("failed to create test file: " + err.Error()) - } - db, err := ethdb.NewLDBDatabase(dirname, 0, 0) - if err != nil { - panic("failed to create test database: " + err.Error()) - } - - return db, func() { - db.Close() - os.RemoveAll(dirname) - } -} - -var test_values = []string{"", "a", "1251", "\x00123\x00"} - -func TestLDB_PutGet(t *testing.T) { - db, remove := newTestLDB() - defer remove() - testPutGet(db, t) -} - -func TestMemoryDB_PutGet(t *testing.T) { - testPutGet(ethdb.NewMemDatabase(), t) -} - -func testPutGet(db ethdb.Database, t *testing.T) { - t.Parallel() - - for _, k := range test_values { - err := db.Put([]byte(k), nil) - if err != nil { - t.Fatalf("put failed: %v", err) - } - } - - for _, k := range test_values { - data, err := db.Get([]byte(k)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if len(data) != 0 { - t.Fatalf("get returned wrong result, got %q expected nil", string(data)) - } - } - - _, err := db.Get([]byte("non-exist-key")) - if err == nil { - t.Fatalf("expect to return a not found error") - } - - for _, v := range test_values { - err := db.Put([]byte(v), []byte(v)) - if err != nil { - t.Fatalf("put failed: %v", err) - } - } - - for _, v := range test_values { - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte(v)) { - t.Fatalf("get returned wrong result, got %q expected %q", string(data), v) - } - } - - for _, v := range test_values { - err := db.Put([]byte(v), []byte("?")) - if err != nil { - t.Fatalf("put override failed: %v", err) - } - } - - for _, v := range test_values { - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte("?")) { - t.Fatalf("get returned wrong result, got %q expected ?", string(data)) - } - } - - for _, v := range test_values { - orig, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - orig[0] = byte(0xff) - data, err := db.Get([]byte(v)) - if err != nil { - t.Fatalf("get failed: %v", err) - } - if !bytes.Equal(data, []byte("?")) { - t.Fatalf("get returned wrong result, got %q expected ?", string(data)) - } - } - - for _, v := range test_values { - err := db.Delete([]byte(v)) - if err != nil { - t.Fatalf("delete %q failed: %v", v, err) - } - } - - for _, v := range test_values { - _, err := db.Get([]byte(v)) - if err == nil { - t.Fatalf("got deleted value %q", v) - } - } -} - -func TestLDB_ParallelPutGet(t *testing.T) { - db, remove := newTestLDB() - defer remove() - testParallelPutGet(db, t) -} - -func TestMemoryDB_ParallelPutGet(t *testing.T) { - testParallelPutGet(ethdb.NewMemDatabase(), t) -} - -func testParallelPutGet(db ethdb.Database, t *testing.T) { - const n = 8 - var pending sync.WaitGroup - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - err := db.Put([]byte(key), []byte("v"+key)) - if err != nil { - panic("put failed: " + err.Error()) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - data, err := db.Get([]byte(key)) - if err != nil { - panic("get failed: " + err.Error()) - } - if !bytes.Equal(data, []byte("v"+key)) { - panic(fmt.Sprintf("get failed, got %q expected %q", []byte(data), []byte("v"+key))) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - err := db.Delete([]byte(key)) - if err != nil { - panic("delete failed: " + err.Error()) - } - }(strconv.Itoa(i)) - } - pending.Wait() - - pending.Add(n) - for i := 0; i < n; i++ { - go func(key string) { - defer pending.Done() - _, err := db.Get([]byte(key)) - if err == nil { - panic("get succeeded") - } - }(strconv.Itoa(i)) - } - pending.Wait() -} diff --git a/ethdb/dbtest/testsuite.go b/ethdb/dbtest/testsuite.go new file mode 100644 index 000000000000..dce2ba2a1f74 --- /dev/null +++ b/ethdb/dbtest/testsuite.go @@ -0,0 +1,315 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dbtest + +import ( + "bytes" + "reflect" + "sort" + "testing" + + "github.com/ethereum/go-ethereum/ethdb" +) + +// TestDatabaseSuite runs a suite of tests against a KeyValueStore database +// implementation. +func TestDatabaseSuite(t *testing.T, New func() ethdb.KeyValueStore) { + t.Run("Iterator", func(t *testing.T) { + tests := []struct { + content map[string]string + prefix string + order []string + }{ + // Empty databases should be iterable + {map[string]string{}, "", nil}, + {map[string]string{}, "non-existent-prefix", nil}, + + // Single-item databases should be iterable + {map[string]string{"key": "val"}, "", []string{"key"}}, + {map[string]string{"key": "val"}, "k", []string{"key"}}, + {map[string]string{"key": "val"}, "l", nil}, + + // Multi-item databases should be fully iterable + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "", + []string{"k1", "k2", "k3", "k4", "k5"}, + }, + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "k", + []string{"k1", "k2", "k3", "k4", "k5"}, + }, + { + map[string]string{"k1": "v1", "k5": "v5", "k2": "v2", "k4": "v4", "k3": "v3"}, + "l", + nil, + }, + // Multi-item databases should be prefix-iterable + { + map[string]string{ + "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", + "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", + }, + "ka", + []string{"ka1", "ka2", "ka3", "ka4", "ka5"}, + }, + { + map[string]string{ + "ka1": "va1", "ka5": "va5", "ka2": "va2", "ka4": "va4", "ka3": "va3", + "kb1": "vb1", "kb5": "vb5", "kb2": "vb2", "kb4": "vb4", "kb3": "vb3", + }, + "kc", + nil, + }, + } + for i, tt := range tests { + // Create the key-value data store + db := New() + for key, val := range tt.content { + if err := db.Put([]byte(key), []byte(val)); err != nil { + t.Fatalf("test %d: failed to insert item %s:%s into database: %v", i, key, val, err) + } + } + // Iterate over the database with the given configs and verify the results + it, idx := db.NewIteratorWithPrefix([]byte(tt.prefix)), 0 + for it.Next() { + if len(tt.order) <= idx { + t.Errorf("test %d: prefix=%q more items than expected: checking idx=%d (key %q), expecting len=%d", i, tt.prefix, idx, it.Key(), len(tt.order)) + break + } + if !bytes.Equal(it.Key(), []byte(tt.order[idx])) { + t.Errorf("test %d: item %d: key mismatch: have %s, want %s", i, idx, string(it.Key()), tt.order[idx]) + } + if !bytes.Equal(it.Value(), []byte(tt.content[tt.order[idx]])) { + t.Errorf("test %d: item %d: value mismatch: have %s, want %s", i, idx, string(it.Value()), tt.content[tt.order[idx]]) + } + idx++ + } + if err := it.Error(); err != nil { + t.Errorf("test %d: iteration failed: %v", i, err) + } + if idx != len(tt.order) { + t.Errorf("test %d: iteration terminated prematurely: have %d, want %d", i, idx, len(tt.order)) + } + db.Close() + } + }) + + t.Run("IteratorWith", func(t *testing.T) { + db := New() + defer db.Close() + + keys := []string{"1", "2", "3", "4", "6", "10", "11", "12", "20", "21", "22"} + sort.Strings(keys) // 1, 10, 11, etc + + for _, k := range keys { + if err := db.Put([]byte(k), nil); err != nil { + t.Fatal(err) + } + } + + { + it := db.NewIterator() + got, want := iterateKeys(it), keys + if err := it.Error(); err != nil { + t.Fatal(err) + } + it.Release() + if !reflect.DeepEqual(got, want) { + t.Errorf("Iterator: got: %s; want: %s", got, want) + } + } + + { + it := db.NewIteratorWithPrefix([]byte("1")) + got, want := iterateKeys(it), []string{"1", "10", "11", "12"} + if err := it.Error(); err != nil { + t.Fatal(err) + } + it.Release() + if !reflect.DeepEqual(got, want) { + t.Errorf("IteratorWithPrefix(1): got: %s; want: %s", got, want) + } + } + + { + it := db.NewIteratorWithPrefix([]byte("5")) + got, want := iterateKeys(it), []string{} + if err := it.Error(); err != nil { + t.Fatal(err) + } + it.Release() + if !reflect.DeepEqual(got, want) { + t.Errorf("IteratorWithPrefix(1): got: %s; want: %s", got, want) + } + } + + { + it := db.NewIteratorWithStart([]byte("2")) + got, want := iterateKeys(it), []string{"2", "20", "21", "22", "3", "4", "6"} + if err := it.Error(); err != nil { + t.Fatal(err) + } + it.Release() + if !reflect.DeepEqual(got, want) { + t.Errorf("IteratorWithStart(2): got: %s; want: %s", got, want) + } + } + + { + it := db.NewIteratorWithStart([]byte("5")) + got, want := iterateKeys(it), []string{"6"} + if err := it.Error(); err != nil { + t.Fatal(err) + } + it.Release() + if !reflect.DeepEqual(got, want) { + t.Errorf("IteratorWithStart(2): got: %s; want: %s", got, want) + } + } + }) + + t.Run("KeyValueOperations", func(t *testing.T) { + db := New() + defer db.Close() + + key := []byte("foo") + + if got, err := db.Has(key); err != nil { + t.Error(err) + } else if got { + t.Errorf("wrong value: %t", got) + } + + value := []byte("hello world") + if err := db.Put(key, value); err != nil { + t.Error(err) + } + + if got, err := db.Has(key); err != nil { + t.Error(err) + } else if !got { + t.Errorf("wrong value: %t", got) + } + + if got, err := db.Get(key); err != nil { + t.Error(err) + } else if !bytes.Equal(got, value) { + t.Errorf("wrong value: %q", got) + } + + if err := db.Delete(key); err != nil { + t.Error(err) + } + + if got, err := db.Has(key); err != nil { + t.Error(err) + } else if got { + t.Errorf("wrong value: %t", got) + } + }) + + t.Run("Batch", func(t *testing.T) { + db := New() + defer db.Close() + + b := db.NewBatch() + for _, k := range []string{"1", "2", "3", "4"} { + if err := b.Put([]byte(k), nil); err != nil { + t.Fatal(err) + } + } + + if has, err := db.Has([]byte("1")); err != nil { + t.Fatal(err) + } else if has { + t.Error("db contains element before batch write") + } + + if err := b.Write(); err != nil { + t.Fatal(err) + } + + { + it := db.NewIterator() + if got, want := iterateKeys(it), []string{"1", "2", "3", "4"}; !reflect.DeepEqual(got, want) { + t.Errorf("got: %s; want: %s", got, want) + } + it.Release() + } + + b.Reset() + + // Mix writes and deletes in batch + b.Put([]byte("5"), nil) + b.Delete([]byte("1")) + b.Put([]byte("6"), nil) + b.Delete([]byte("3")) + b.Put([]byte("3"), nil) + + if err := b.Write(); err != nil { + t.Fatal(err) + } + + { + it := db.NewIterator() + if got, want := iterateKeys(it), []string{"2", "3", "4", "5", "6"}; !reflect.DeepEqual(got, want) { + t.Errorf("got: %s; want: %s", got, want) + } + it.Release() + } + }) + + t.Run("BatchReplay", func(t *testing.T) { + db := New() + defer db.Close() + + want := []string{"1", "2", "3", "4"} + b := db.NewBatch() + for _, k := range want { + if err := b.Put([]byte(k), nil); err != nil { + t.Fatal(err) + } + } + + b2 := db.NewBatch() + if err := b.Replay(b2); err != nil { + t.Fatal(err) + } + + if err := b2.Replay(db); err != nil { + t.Fatal(err) + } + + it := db.NewIterator() + if got := iterateKeys(it); !reflect.DeepEqual(got, want) { + t.Errorf("got: %s; want: %s", got, want) + } + it.Release() + }) + +} + +func iterateKeys(it ethdb.Iterator) []string { + keys := []string{} + for it.Next() { + keys = append(keys, string(it.Key())) + } + sort.Strings(keys) + return keys +} diff --git a/ethdb/iterator.go b/ethdb/iterator.go new file mode 100644 index 000000000000..419e9bdfc21f --- /dev/null +++ b/ethdb/iterator.go @@ -0,0 +1,66 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package ethdb + +// Iterator iterates over a database's key/value pairs in ascending key order. +// +// When it encounters an error any seek will return false and will yield no key/ +// value pairs. The error can be queried by calling the Error method. Calling +// Release is still necessary. +// +// An iterator must be released after use, but it is not necessary to read an +// iterator until exhaustion. An iterator is not safe for concurrent use, but it +// is safe to use multiple iterators concurrently. +type Iterator interface { + // Next moves the iterator to the next key/value pair. It returns whether the + // iterator is exhausted. + Next() bool + + // Error returns any accumulated error. Exhausting all the key/value pairs + // is not considered to be an error. + Error() error + + // Key returns the key of the current key/value pair, or nil if done. The caller + // should not modify the contents of the returned slice, and its contents may + // change on the next call to Next. + Key() []byte + + // Value returns the value of the current key/value pair, or nil if done. The + // caller should not modify the contents of the returned slice, and its contents + // may change on the next call to Next. + Value() []byte + + // Release releases associated resources. Release should always succeed and can + // be called multiple times without causing error. + Release() +} + +// Iteratee wraps the NewIterator methods of a backing data store. +type Iteratee interface { + // NewIterator creates a binary-alphabetical iterator over the entire keyspace + // contained within the key-value database. + NewIterator() Iterator + + // NewIteratorWithStart creates a binary-alphabetical iterator over a subset of + // database content starting at a particular initial key (or after, if it does + // not exist). + NewIteratorWithStart(start []byte) Iterator + + // NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset + // of database content with a particular key prefix. + NewIteratorWithPrefix(prefix []byte) Iterator +} diff --git a/ethdb/leveldb/leveldb.go b/ethdb/leveldb/leveldb.go new file mode 100644 index 000000000000..378d4c3cd236 --- /dev/null +++ b/ethdb/leveldb/leveldb.go @@ -0,0 +1,490 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// +build !js + +// Package leveldb implements the key-value database layer based on LevelDB. +package leveldb + +import ( + "fmt" + "strconv" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/errors" + "github.com/syndtr/goleveldb/leveldb/filter" + "github.com/syndtr/goleveldb/leveldb/opt" + "github.com/syndtr/goleveldb/leveldb/util" +) + +const ( + // degradationWarnInterval specifies how often warning should be printed if the + // leveldb database cannot keep up with requested writes. + degradationWarnInterval = time.Minute + + // minCache is the minimum amount of memory in megabytes to allocate to leveldb + // read and write caching, split half and half. + minCache = 16 + + // minHandles is the minimum number of files handles to allocate to the open + // database files. + minHandles = 16 + + // metricsGatheringInterval specifies the interval to retrieve leveldb database + // compaction, io and pause stats to report to the user. + metricsGatheringInterval = 3 * time.Second +) + +// Database is a persistent key-value store. Apart from basic data storage +// functionality it also supports batch writes and iterating over the keyspace in +// binary-alphabetical order. +type Database struct { + fn string // filename for reporting + db *leveldb.DB // LevelDB instance + + compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction + compReadMeter metrics.Meter // Meter for measuring the data read during compaction + compWriteMeter metrics.Meter // Meter for measuring the data written during compaction + writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction + writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction + diskSizeGauge metrics.Gauge // Gauge for tracking the size of all the levels in the database + diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read + diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written + memCompGauge metrics.Gauge // Gauge for tracking the number of memory compaction + level0CompGauge metrics.Gauge // Gauge for tracking the number of table compaction in level0 + nonlevel0CompGauge metrics.Gauge // Gauge for tracking the number of table compaction in non0 level + seekCompGauge metrics.Gauge // Gauge for tracking the number of table compaction caused by read opt + + quitLock sync.Mutex // Mutex protecting the quit channel access + quitChan chan chan error // Quit channel to stop the metrics collection before closing the database + + log log.Logger // Contextual logger tracking the database path +} + +// New returns a wrapped LevelDB object. The namespace is the prefix that the +// metrics reporting should use for surfacing internal stats. +func New(file string, cache int, handles int, namespace string) (*Database, error) { + // Ensure we have some minimal caching and file guarantees + if cache < minCache { + cache = minCache + } + if handles < minHandles { + handles = minHandles + } + logger := log.New("database", file) + logger.Info("Allocated cache and file handles", "cache", common.StorageSize(cache*1024*1024), "handles", handles) + + // Open the db and recover any potential corruptions + db, err := leveldb.OpenFile(file, &opt.Options{ + OpenFilesCacheCapacity: handles, + BlockCacheCapacity: cache / 2 * opt.MiB, + WriteBuffer: cache / 4 * opt.MiB, // Two of these are used internally + Filter: filter.NewBloomFilter(10), + DisableSeeksCompaction: true, + }) + if _, corrupted := err.(*errors.ErrCorrupted); corrupted { + db, err = leveldb.RecoverFile(file, nil) + } + if err != nil { + return nil, err + } + // Assemble the wrapper with all the registered metrics + ldb := &Database{ + fn: file, + db: db, + log: logger, + quitChan: make(chan chan error), + } + ldb.compTimeMeter = metrics.NewRegisteredMeter(namespace+"compact/time", nil) + ldb.compReadMeter = metrics.NewRegisteredMeter(namespace+"compact/input", nil) + ldb.compWriteMeter = metrics.NewRegisteredMeter(namespace+"compact/output", nil) + ldb.diskSizeGauge = metrics.NewRegisteredGauge(namespace+"disk/size", nil) + ldb.diskReadMeter = metrics.NewRegisteredMeter(namespace+"disk/read", nil) + ldb.diskWriteMeter = metrics.NewRegisteredMeter(namespace+"disk/write", nil) + ldb.writeDelayMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/duration", nil) + ldb.writeDelayNMeter = metrics.NewRegisteredMeter(namespace+"compact/writedelay/counter", nil) + ldb.memCompGauge = metrics.NewRegisteredGauge(namespace+"compact/memory", nil) + ldb.level0CompGauge = metrics.NewRegisteredGauge(namespace+"compact/level0", nil) + ldb.nonlevel0CompGauge = metrics.NewRegisteredGauge(namespace+"compact/nonlevel0", nil) + ldb.seekCompGauge = metrics.NewRegisteredGauge(namespace+"compact/seek", nil) + + // Start up the metrics gathering and return + go ldb.meter(metricsGatheringInterval) + return ldb, nil +} + +// Close stops the metrics collection, flushes any pending data to disk and closes +// all io accesses to the underlying key-value store. +func (db *Database) Close() error { + db.quitLock.Lock() + defer db.quitLock.Unlock() + + if db.quitChan != nil { + errc := make(chan error) + db.quitChan <- errc + if err := <-errc; err != nil { + db.log.Error("Metrics collection failed", "err", err) + } + db.quitChan = nil + } + return db.db.Close() +} + +// Has retrieves if a key is present in the key-value store. +func (db *Database) Has(key []byte) (bool, error) { + return db.db.Has(key, nil) +} + +// Get retrieves the given key if it's present in the key-value store. +func (db *Database) Get(key []byte) ([]byte, error) { + dat, err := db.db.Get(key, nil) + if err != nil { + return nil, err + } + return dat, nil +} + +// Put inserts the given value into the key-value store. +func (db *Database) Put(key []byte, value []byte) error { + return db.db.Put(key, value, nil) +} + +// Delete removes the key from the key-value store. +func (db *Database) Delete(key []byte) error { + return db.db.Delete(key, nil) +} + +// NewBatch creates a write-only key-value store that buffers changes to its host +// database until a final write is called. +func (db *Database) NewBatch() ethdb.Batch { + return &batch{ + db: db.db, + b: new(leveldb.Batch), + } +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the leveldb database. +func (db *Database) NewIterator() ethdb.Iterator { + return db.db.NewIterator(new(util.Range), nil) +} + +// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of +// database content starting at a particular initial key (or after, if it does +// not exist). +func (db *Database) NewIteratorWithStart(start []byte) ethdb.Iterator { + return db.db.NewIterator(&util.Range{Start: start}, nil) +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + return db.db.NewIterator(util.BytesPrefix(prefix), nil) +} + +// Stat returns a particular internal stat of the database. +func (db *Database) Stat(property string) (string, error) { + return db.db.GetProperty(property) +} + +// Compact flattens the underlying data store for the given key range. In essence, +// deleted and overwritten versions are discarded, and the data is rearranged to +// reduce the cost of operations needed to access them. +// +// A nil start is treated as a key before all keys in the data store; a nil limit +// is treated as a key after all keys in the data store. If both is nil then it +// will compact entire data store. +func (db *Database) Compact(start []byte, limit []byte) error { + return db.db.CompactRange(util.Range{Start: start, Limit: limit}) +} + +// Path returns the path to the database directory. +func (db *Database) Path() string { + return db.fn +} + +// meter periodically retrieves internal leveldb counters and reports them to +// the metrics subsystem. +// +// This is how a LevelDB stats table looks like (currently): +// Compactions +// Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB) +// -------+------------+---------------+---------------+---------------+--------------- +// 0 | 0 | 0.00000 | 1.27969 | 0.00000 | 12.31098 +// 1 | 85 | 109.27913 | 28.09293 | 213.92493 | 214.26294 +// 2 | 523 | 1000.37159 | 7.26059 | 66.86342 | 66.77884 +// 3 | 570 | 1113.18458 | 0.00000 | 0.00000 | 0.00000 +// +// This is how the write delay look like (currently): +// DelayN:5 Delay:406.604657ms Paused: false +// +// This is how the iostats look like (currently): +// Read(MB):3895.04860 Write(MB):3654.64712 +func (db *Database) meter(refresh time.Duration) { + // Create the counters to store current and previous compaction values + compactions := make([][]float64, 2) + for i := 0; i < 2; i++ { + compactions[i] = make([]float64, 4) + } + // Create storage for iostats. + var iostats [2]float64 + + // Create storage and warning log tracer for write delay. + var ( + delaystats [2]int64 + lastWritePaused time.Time + ) + + var ( + errc chan error + merr error + ) + + // Iterate ad infinitum and collect the stats + for i := 1; errc == nil && merr == nil; i++ { + // Retrieve the database stats + stats, err := db.db.GetProperty("leveldb.stats") + if err != nil { + db.log.Error("Failed to read database stats", "err", err) + merr = err + continue + } + // Find the compaction table, skip the header + lines := strings.Split(stats, "\n") + for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { + lines = lines[1:] + } + if len(lines) <= 3 { + db.log.Error("Compaction leveldbTable not found") + merr = errors.New("compaction leveldbTable not found") + continue + } + lines = lines[3:] + + // Iterate over all the leveldbTable rows, and accumulate the entries + for j := 0; j < len(compactions[i%2]); j++ { + compactions[i%2][j] = 0 + } + for _, line := range lines { + parts := strings.Split(line, "|") + if len(parts) != 6 { + break + } + for idx, counter := range parts[2:] { + value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) + if err != nil { + db.log.Error("Compaction entry parsing failed", "err", err) + merr = err + continue + } + compactions[i%2][idx] += value + } + } + // Update all the requested meters + if db.diskSizeGauge != nil { + db.diskSizeGauge.Update(int64(compactions[i%2][0] * 1024 * 1024)) + } + if db.compTimeMeter != nil { + db.compTimeMeter.Mark(int64((compactions[i%2][1] - compactions[(i-1)%2][1]) * 1000 * 1000 * 1000)) + } + if db.compReadMeter != nil { + db.compReadMeter.Mark(int64((compactions[i%2][2] - compactions[(i-1)%2][2]) * 1024 * 1024)) + } + if db.compWriteMeter != nil { + db.compWriteMeter.Mark(int64((compactions[i%2][3] - compactions[(i-1)%2][3]) * 1024 * 1024)) + } + // Retrieve the write delay statistic + writedelay, err := db.db.GetProperty("leveldb.writedelay") + if err != nil { + db.log.Error("Failed to read database write delay statistic", "err", err) + merr = err + continue + } + var ( + delayN int64 + delayDuration string + duration time.Duration + paused bool + ) + if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { + db.log.Error("Write delay statistic not found") + merr = err + continue + } + duration, err = time.ParseDuration(delayDuration) + if err != nil { + db.log.Error("Failed to parse delay duration", "err", err) + merr = err + continue + } + if db.writeDelayNMeter != nil { + db.writeDelayNMeter.Mark(delayN - delaystats[0]) + } + if db.writeDelayMeter != nil { + db.writeDelayMeter.Mark(duration.Nanoseconds() - delaystats[1]) + } + // If a warning that db is performing compaction has been displayed, any subsequent + // warnings will be withheld for one minute not to overwhelm the user. + if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 && + time.Now().After(lastWritePaused.Add(degradationWarnInterval)) { + db.log.Warn("Database compacting, degraded performance") + lastWritePaused = time.Now() + } + delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() + + // Retrieve the database iostats. + ioStats, err := db.db.GetProperty("leveldb.iostats") + if err != nil { + db.log.Error("Failed to read database iostats", "err", err) + merr = err + continue + } + var nRead, nWrite float64 + parts := strings.Split(ioStats, " ") + if len(parts) < 2 { + db.log.Error("Bad syntax of ioStats", "ioStats", ioStats) + merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) + continue + } + if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { + db.log.Error("Bad syntax of read entry", "entry", parts[0]) + merr = err + continue + } + if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { + db.log.Error("Bad syntax of write entry", "entry", parts[1]) + merr = err + continue + } + if db.diskReadMeter != nil { + db.diskReadMeter.Mark(int64((nRead - iostats[0]) * 1024 * 1024)) + } + if db.diskWriteMeter != nil { + db.diskWriteMeter.Mark(int64((nWrite - iostats[1]) * 1024 * 1024)) + } + iostats[0], iostats[1] = nRead, nWrite + + compCount, err := db.db.GetProperty("leveldb.compcount") + if err != nil { + db.log.Error("Failed to read database iostats", "err", err) + merr = err + continue + } + + var ( + memComp uint32 + level0Comp uint32 + nonLevel0Comp uint32 + seekComp uint32 + ) + if n, err := fmt.Sscanf(compCount, "MemComp:%d Level0Comp:%d NonLevel0Comp:%d SeekComp:%d", &memComp, &level0Comp, &nonLevel0Comp, &seekComp); n != 4 || err != nil { + db.log.Error("Compaction count statistic not found") + merr = err + continue + } + db.memCompGauge.Update(int64(memComp)) + db.level0CompGauge.Update(int64(level0Comp)) + db.nonlevel0CompGauge.Update(int64(nonLevel0Comp)) + db.seekCompGauge.Update(int64(seekComp)) + + // Sleep a bit, then repeat the stats collection + select { + case errc = <-db.quitChan: + // Quit requesting, stop hammering the database + case <-time.After(refresh): + // Timeout, gather a new set of stats + } + } + + if errc == nil { + errc = <-db.quitChan + } + errc <- merr +} + +// batch is a write-only leveldb batch that commits changes to its host database +// when Write is called. A batch cannot be used concurrently. +type batch struct { + db *leveldb.DB + b *leveldb.Batch + size int +} + +// Put inserts the given value into the batch for later committing. +func (b *batch) Put(key, value []byte) error { + b.b.Put(key, value) + b.size += len(value) + return nil +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *batch) Delete(key []byte) error { + b.b.Delete(key) + b.size++ + return nil +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *batch) ValueSize() int { + return b.size +} + +// Write flushes any accumulated data to disk. +func (b *batch) Write() error { + return b.db.Write(b.b, nil) +} + +// Reset resets the batch for reuse. +func (b *batch) Reset() { + b.b.Reset() + b.size = 0 +} + +// Replay replays the batch contents. +func (b *batch) Replay(w ethdb.KeyValueWriter) error { + return b.b.Replay(&replayer{writer: w}) +} + +// replayer is a small wrapper to implement the correct replay methods. +type replayer struct { + writer ethdb.KeyValueWriter + failure error +} + +// Put inserts the given value into the key-value data store. +func (r *replayer) Put(key, value []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Put(key, value) +} + +// Delete removes the key from the key-value data store. +func (r *replayer) Delete(key []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Delete(key) +} diff --git a/ethdb/database_js_test.go b/ethdb/leveldb/leveldb_test.go similarity index 62% rename from ethdb/database_js_test.go rename to ethdb/leveldb/leveldb_test.go index b4c12ae0bc57..421d9b4693f4 100644 --- a/ethdb/database_js_test.go +++ b/ethdb/leveldb/leveldb_test.go @@ -1,4 +1,4 @@ -// Copyright 2014 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,12 +14,27 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build js - -package ethdb_test +package leveldb import ( + "testing" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/dbtest" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/storage" ) -var _ ethdb.Database = ðdb.LDBDatabase{} +func TestLevelDB(t *testing.T) { + t.Run("DatabaseSuite", func(t *testing.T) { + dbtest.TestDatabaseSuite(t, func() ethdb.KeyValueStore { + db, err := leveldb.Open(storage.NewMemStorage(), nil) + if err != nil { + t.Fatal(err) + } + return &Database{ + db: db, + } + }) + }) +} diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go deleted file mode 100644 index 727f2f7ca35d..000000000000 --- a/ethdb/memory_database.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -import ( - "errors" - "sync" - - "github.com/ethereum/go-ethereum/common" -) - -/* - * This is a test memory database. Do not use for any production it does not get persisted - */ -type MemDatabase struct { - db map[string][]byte - lock sync.RWMutex -} - -func NewMemDatabase() *MemDatabase { - return &MemDatabase{ - db: make(map[string][]byte), - } -} - -func NewMemDatabaseWithCap(size int) *MemDatabase { - return &MemDatabase{ - db: make(map[string][]byte, size), - } -} - -func (db *MemDatabase) Put(key []byte, value []byte) error { - db.lock.Lock() - defer db.lock.Unlock() - - db.db[string(key)] = common.CopyBytes(value) - return nil -} - -func (db *MemDatabase) Has(key []byte) (bool, error) { - db.lock.RLock() - defer db.lock.RUnlock() - - _, ok := db.db[string(key)] - return ok, nil -} - -func (db *MemDatabase) Get(key []byte) ([]byte, error) { - db.lock.RLock() - defer db.lock.RUnlock() - - if entry, ok := db.db[string(key)]; ok { - return common.CopyBytes(entry), nil - } - return nil, errors.New("not found") -} - -func (db *MemDatabase) Keys() [][]byte { - db.lock.RLock() - defer db.lock.RUnlock() - - keys := [][]byte{} - for key := range db.db { - keys = append(keys, []byte(key)) - } - return keys -} - -func (db *MemDatabase) Delete(key []byte) error { - db.lock.Lock() - defer db.lock.Unlock() - - delete(db.db, string(key)) - return nil -} - -func (db *MemDatabase) Close() {} - -func (db *MemDatabase) NewBatch() Batch { - return &memBatch{db: db} -} - -func (db *MemDatabase) Len() int { return len(db.db) } - -type kv struct { - k, v []byte - del bool -} - -type memBatch struct { - db *MemDatabase - writes []kv - size int -} - -func (b *memBatch) Put(key, value []byte) error { - b.writes = append(b.writes, kv{common.CopyBytes(key), common.CopyBytes(value), false}) - b.size += len(value) - return nil -} - -func (b *memBatch) Delete(key []byte) error { - b.writes = append(b.writes, kv{common.CopyBytes(key), nil, true}) - b.size += 1 - return nil -} - -func (b *memBatch) Write() error { - b.db.lock.Lock() - defer b.db.lock.Unlock() - - for _, kv := range b.writes { - if kv.del { - delete(b.db.db, string(kv.k)) - continue - } - b.db.db[string(kv.k)] = kv.v - } - return nil -} - -func (b *memBatch) ValueSize() int { - return b.size -} - -func (b *memBatch) Reset() { - b.writes = b.writes[:0] - b.size = 0 -} diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go new file mode 100644 index 000000000000..346edc438160 --- /dev/null +++ b/ethdb/memorydb/memorydb.go @@ -0,0 +1,344 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package memorydb implements the key-value database layer based on memory maps. +package memorydb + +import ( + "errors" + "sort" + "strings" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" +) + +var ( + // errMemorydbClosed is returned if a memory database was already closed at the + // invocation of a data access operation. + errMemorydbClosed = errors.New("database closed") + + // errMemorydbNotFound is returned if a key is requested that is not found in + // the provided memory database. + errMemorydbNotFound = errors.New("not found") +) + +// Database is an ephemeral key-value store. Apart from basic data storage +// functionality it also supports batch writes and iterating over the keyspace in +// binary-alphabetical order. +type Database struct { + db map[string][]byte + lock sync.RWMutex +} + +// New returns a wrapped map with all the required database interface methods +// implemented. +func New() *Database { + return &Database{ + db: make(map[string][]byte), + } +} + +// NewWithCap returns a wrapped map pre-allocated to the provided capcity with +// all the required database interface methods implemented. +func NewWithCap(size int) *Database { + return &Database{ + db: make(map[string][]byte, size), + } +} + +// Close deallocates the internal map and ensures any consecutive data access op +// failes with an error. +func (db *Database) Close() error { + db.lock.Lock() + defer db.lock.Unlock() + + db.db = nil + return nil +} + +// Has retrieves if a key is present in the key-value store. +func (db *Database) Has(key []byte) (bool, error) { + db.lock.RLock() + defer db.lock.RUnlock() + + if db.db == nil { + return false, errMemorydbClosed + } + _, ok := db.db[string(key)] + return ok, nil +} + +// Get retrieves the given key if it's present in the key-value store. +func (db *Database) Get(key []byte) ([]byte, error) { + db.lock.RLock() + defer db.lock.RUnlock() + + if db.db == nil { + return nil, errMemorydbClosed + } + if entry, ok := db.db[string(key)]; ok { + return common.CopyBytes(entry), nil + } + return nil, errMemorydbNotFound +} + +// Put inserts the given value into the key-value store. +func (db *Database) Put(key []byte, value []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + if db.db == nil { + return errMemorydbClosed + } + db.db[string(key)] = common.CopyBytes(value) + return nil +} + +// Delete removes the key from the key-value store. +func (db *Database) Delete(key []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + if db.db == nil { + return errMemorydbClosed + } + delete(db.db, string(key)) + return nil +} + +// NewBatch creates a write-only key-value store that buffers changes to its host +// database until a final write is called. +func (db *Database) NewBatch() ethdb.Batch { + return &batch{ + db: db, + } +} + +// NewIterator creates a binary-alphabetical iterator over the entire keyspace +// contained within the memory database. +func (db *Database) NewIterator() ethdb.Iterator { + return db.NewIteratorWithStart(nil) +} + +// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of +// database content starting at a particular initial key (or after, if it does +// not exist). +func (db *Database) NewIteratorWithStart(start []byte) ethdb.Iterator { + db.lock.RLock() + defer db.lock.RUnlock() + + var ( + st = string(start) + keys = make([]string, 0, len(db.db)) + values = make([][]byte, 0, len(db.db)) + ) + // Collect the keys from the memory database corresponding to the given start + for key := range db.db { + if key >= st { + keys = append(keys, key) + } + } + // Sort the items and retrieve the associated values + sort.Strings(keys) + for _, key := range keys { + values = append(values, db.db[key]) + } + return &iterator{ + keys: keys, + values: values, + } +} + +// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset +// of database content with a particular key prefix. +func (db *Database) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + db.lock.RLock() + defer db.lock.RUnlock() + + var ( + pr = string(prefix) + keys = make([]string, 0, len(db.db)) + values = make([][]byte, 0, len(db.db)) + ) + // Collect the keys from the memory database corresponding to the given prefix + for key := range db.db { + if strings.HasPrefix(key, pr) { + keys = append(keys, key) + } + } + // Sort the items and retrieve the associated values + sort.Strings(keys) + for _, key := range keys { + values = append(values, db.db[key]) + } + return &iterator{ + keys: keys, + values: values, + } +} + +// Stat returns a particular internal stat of the database. +func (db *Database) Stat(property string) (string, error) { + return "", errors.New("unknown property") +} + +// Compact is not supported on a memory database, but there's no need either as +// a memory database doesn't waste space anyway. +func (db *Database) Compact(start []byte, limit []byte) error { + return nil +} + +// Len returns the number of entries currently present in the memory database. +// +// Note, this method is only used for testing (i.e. not public in general) and +// does not have explicit checks for closed-ness to allow simpler testing code. +func (db *Database) Len() int { + db.lock.RLock() + defer db.lock.RUnlock() + + return len(db.db) +} + +// keyvalue is a key-value tuple tagged with a deletion field to allow creating +// memory-database write batches. +type keyvalue struct { + key []byte + value []byte + delete bool +} + +// batch is a write-only memory batch that commits changes to its host +// database when Write is called. A batch cannot be used concurrently. +type batch struct { + db *Database + writes []keyvalue + size int +} + +// Put inserts the given value into the batch for later committing. +func (b *batch) Put(key, value []byte) error { + b.writes = append(b.writes, keyvalue{common.CopyBytes(key), common.CopyBytes(value), false}) + b.size += len(value) + return nil +} + +// Delete inserts the a key removal into the batch for later committing. +func (b *batch) Delete(key []byte) error { + b.writes = append(b.writes, keyvalue{common.CopyBytes(key), nil, true}) + b.size += 1 + return nil +} + +// ValueSize retrieves the amount of data queued up for writing. +func (b *batch) ValueSize() int { + return b.size +} + +// Write flushes any accumulated data to the memory database. +func (b *batch) Write() error { + b.db.lock.Lock() + defer b.db.lock.Unlock() + + for _, keyvalue := range b.writes { + if keyvalue.delete { + delete(b.db.db, string(keyvalue.key)) + continue + } + b.db.db[string(keyvalue.key)] = keyvalue.value + } + return nil +} + +// Reset resets the batch for reuse. +func (b *batch) Reset() { + b.writes = b.writes[:0] + b.size = 0 +} + +// Replay replays the batch contents. +func (b *batch) Replay(w ethdb.KeyValueWriter) error { + for _, keyvalue := range b.writes { + if keyvalue.delete { + if err := w.Delete(keyvalue.key); err != nil { + return err + } + continue + } + if err := w.Put(keyvalue.key, keyvalue.value); err != nil { + return err + } + } + return nil +} + +// iterator can walk over the (potentially partial) keyspace of a memory key +// value store. Internally it is a deep copy of the entire iterated state, +// sorted by keys. +type iterator struct { + inited bool + keys []string + values [][]byte +} + +// Next moves the iterator to the next key/value pair. It returns whether the +// iterator is exhausted. +func (it *iterator) Next() bool { + // If the iterator was not yet initialized, do it now + if !it.inited { + it.inited = true + return len(it.keys) > 0 + } + // Iterator already initialize, advance it + if len(it.keys) > 0 { + it.keys = it.keys[1:] + it.values = it.values[1:] + } + return len(it.keys) > 0 +} + +// Error returns any accumulated error. Exhausting all the key/value pairs +// is not considered to be an error. A memory iterator cannot encounter errors. +func (it *iterator) Error() error { + return nil +} + +// Key returns the key of the current key/value pair, or nil if done. The caller +// should not modify the contents of the returned slice, and its contents may +// change on the next call to Next. +func (it *iterator) Key() []byte { + if len(it.keys) > 0 { + return []byte(it.keys[0]) + } + return nil +} + +// Value returns the value of the current key/value pair, or nil if done. The +// caller should not modify the contents of the returned slice, and its contents +// may change on the next call to Next. +func (it *iterator) Value() []byte { + if len(it.values) > 0 { + return it.values[0] + } + return nil +} + +// Release releases associated resources. Release should always succeed and can +// be called multiple times without causing error. +func (it *iterator) Release() { + it.keys, it.values = nil, nil +} diff --git a/swarm/network/common.go b/ethdb/memorydb/memorydb_test.go similarity index 74% rename from swarm/network/common.go rename to ethdb/memorydb/memorydb_test.go index 15b2e2060437..dba18ad3062b 100644 --- a/swarm/network/common.go +++ b/ethdb/memorydb/memorydb_test.go @@ -14,17 +14,19 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package network +package memorydb import ( - "fmt" - "strings" + "testing" + + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/dbtest" ) -func LogAddrs(nns [][]byte) string { - var nnsa []string - for _, nn := range nns { - nnsa = append(nnsa, fmt.Sprintf("%08x", nn[:4])) - } - return strings.Join(nnsa, ", ") +func TestMemoryDB(t *testing.T) { + t.Run("DatabaseSuite", func(t *testing.T) { + dbtest.TestDatabaseSuite(t, func() ethdb.KeyValueStore { + return New() + }) + }) } diff --git a/ethdb/norocksdb.go b/ethdb/rocksdb/norocksdb.go similarity index 100% rename from ethdb/norocksdb.go rename to ethdb/rocksdb/norocksdb.go diff --git a/ethdb/rocksdb_database.go b/ethdb/rocksdb/rocksdb.go similarity index 64% rename from ethdb/rocksdb_database.go rename to ethdb/rocksdb/rocksdb.go index 3310d4590a21..4743ba2876b7 100644 --- a/ethdb/rocksdb_database.go +++ b/ethdb/rocksdb/rocksdb.go @@ -1,7 +1,7 @@ // rocksdb_database.go // +build rocksdb -package ethdb +package rocksdb // #include // #include "rocksdb/c.h" @@ -12,6 +12,16 @@ import ( "runtime" "sync/atomic" "unsafe" + + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/metrics" +) + +// Metadium: db stats +// (reads, read bytes, writes, written bytes, lookups, deletes) +var ( + _stats_enabled = false + _r_count, _r_bytes, _w_count, _w_bytes, _l_count, _d_count uint64 ) type RDBDatabase struct { @@ -39,7 +49,7 @@ func b2c(b []byte) *C.char { } } -func NewRDBDatabase(file string, cache int, handles int) (*RDBDatabase, error) { +func New(file string, cache int, handles int, namespace string) (*RDBDatabase, error) { var cerr *C.char opts := C.rocksdb_options_create() @@ -140,28 +150,41 @@ func (db *RDBDatabase) Delete(key []byte) error { return nil } -/* -func (db *RDBDatabase) NewIterator() iterator.Iterator { +func (db *RDBDatabase) NewIterator() ethdb.Iterator { return nil } -func (db *RDBDatabase) NewIteratorWithPrefix(prefix []byte) iterator.Iterator { +func (db *RDBDatabase) NewIteratorWithStart(start []byte) ethdb.Iterator { return nil } -*/ -func (db *RDBDatabase) Close() { +func (db *RDBDatabase) NewIteratorWithPrefix(prefix []byte) ethdb.Iterator { + return nil +} + +func (db *RDBDatabase) Stat(property string) (string, error) { + return "", errors.New("Not implemented") +} + +func (db *RDBDatabase) Compact(start []byte, limit []byte) error { + cs, cl := b2c(start), b2c(limit) + C.rocksdb_compact_range(db.db, cs, C.size_t(len(start)), cl, C.size_t(len(limit))) + return nil +} + +func (db *RDBDatabase) Close() error { C.rocksdb_options_destroy(db.opts) C.rocksdb_writeoptions_destroy(db.wopts) C.rocksdb_readoptions_destroy(db.ropts) C.rocksdb_close(db.db) + return nil } func (db *RDBDatabase) Meter(prefix string) { return } -func (db *RDBDatabase) NewBatch() Batch { +func (db *RDBDatabase) NewBatch() ethdb.Batch { b := C.rocksdb_writebatch_create() bb := &rdbBatch{db: db.db, b: b, wopts: db.wopts} runtime.SetFinalizer(bb, func(bb *rdbBatch) { @@ -214,3 +237,43 @@ func (b *rdbBatch) Reset() { C.rocksdb_writebatch_clear(b.b) b.size = 0 } + +// Replay replays the batch contents. +func (b *rdbBatch) Replay(w ethdb.KeyValueWriter) error { + return errors.New("Not implemented") + //return b.b.Replay(&replayer{writer: w}) +} + +// replayer is a small wrapper to implement the correct replay methods. +type replayer struct { + writer ethdb.KeyValueWriter + failure error +} + +// Put inserts the given value into the key-value data store. +func (r *replayer) Put(key, value []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Put(key, value) +} + +// Delete removes the key from the key-value data store. +func (r *replayer) Delete(key []byte) { + // If the replay already failed, stop executing ops + if r.failure != nil { + return + } + r.failure = r.writer.Delete(key) +} + +func EnableStats(b bool) { + _stats_enabled = b +} + +func Stats(device string) (disk_r_count, disk_r_bytes, disk_w_couhnt, disk_w_bytes, r_count, r_bytes, w_count, w_bytes, l_count, d_count uint64) { + var diskStats metrics.DiskStats + metrics.ReadProcDiskStats(device, &diskStats) + return uint64(diskStats.ReadCount), uint64(diskStats.ReadBytes), uint64(diskStats.WriteCount), uint64(diskStats.WriteBytes), _r_count, _r_bytes, _w_count, _w_bytes, _l_count, _d_count +} diff --git a/ethdb/table.go b/ethdb/table.go deleted file mode 100644 index 28069c078ed2..000000000000 --- a/ethdb/table.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -type table struct { - db Database - prefix string -} - -// NewTable returns a Database object that prefixes all keys with a given -// string. -func NewTable(db Database, prefix string) Database { - return &table{ - db: db, - prefix: prefix, - } -} - -func (dt *table) Put(key []byte, value []byte) error { - return dt.db.Put(append([]byte(dt.prefix), key...), value) -} - -func (dt *table) Has(key []byte) (bool, error) { - return dt.db.Has(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Get(key []byte) ([]byte, error) { - return dt.db.Get(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Delete(key []byte) error { - return dt.db.Delete(append([]byte(dt.prefix), key...)) -} - -func (dt *table) Close() { - // Do nothing; don't close the underlying DB. -} diff --git a/ethdb/table_batch.go b/ethdb/table_batch.go deleted file mode 100644 index ae83e79ced14..000000000000 --- a/ethdb/table_batch.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2014 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package ethdb - -type tableBatch struct { - batch Batch - prefix string -} - -// NewTableBatch returns a Batch object which prefixes all keys with a given string. -func NewTableBatch(db Database, prefix string) Batch { - return &tableBatch{db.NewBatch(), prefix} -} - -func (dt *table) NewBatch() Batch { - return &tableBatch{dt.db.NewBatch(), dt.prefix} -} - -func (tb *tableBatch) Put(key, value []byte) error { - return tb.batch.Put(append([]byte(tb.prefix), key...), value) -} - -func (tb *tableBatch) Delete(key []byte) error { - return tb.batch.Delete(append([]byte(tb.prefix), key...)) -} - -func (tb *tableBatch) Write() error { - return tb.batch.Write() -} - -func (tb *tableBatch) ValueSize() int { - return tb.batch.ValueSize() -} - -func (tb *tableBatch) Reset() { - tb.batch.Reset() -} diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index 9f3d7237e9b8..f9284722cf83 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -23,7 +23,7 @@ import ( "errors" "fmt" "math/big" - "net" + "net/http" "regexp" "runtime" "strconv" @@ -41,7 +41,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/rpc" - "golang.org/x/net/websocket" + "github.com/gorilla/websocket" ) const ( @@ -200,21 +200,21 @@ func (s *Service) loop() { path := fmt.Sprintf("%s/api", s.host) urls := []string{path} - if !strings.Contains(path, "://") { // url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779) + // url.Parse and url.IsAbs is unsuitable (https://github.com/golang/go/issues/19779) + if !strings.Contains(path, "://") { urls = []string{"wss://" + path, "ws://" + path} } // Establish a websocket connection to the server on any supported URL var ( - conf *websocket.Config conn *websocket.Conn err error ) + dialer := websocket.Dialer{HandshakeTimeout: 5 * time.Second} + header := make(http.Header) + header.Set("origin", "http://localhost") for _, url := range urls { - if conf, err = websocket.NewConfig(url, "http://localhost/"); err != nil { - continue - } - conf.Dialer = &net.Dialer{Timeout: 5 * time.Second} - if conn, err = websocket.DialConfig(conf); err == nil { + conn, _, err = dialer.Dial(url, header) + if err == nil { break } } @@ -284,7 +284,7 @@ func (s *Service) readLoop(conn *websocket.Conn) { for { // Retrieve the next generic network packet and bail out on error var msg map[string][]interface{} - if err := websocket.JSON.Receive(conn, &msg); err != nil { + if err := conn.ReadJSON(&msg); err != nil { log.Warn("Failed to decode stats server message", "err", err) return } @@ -399,12 +399,12 @@ func (s *Service) login(conn *websocket.Conn) error { login := map[string][]interface{}{ "emit": {"hello", auth}, } - if err := websocket.JSON.Send(conn, login); err != nil { + if err := conn.WriteJSON(login); err != nil { return err } // Retrieve the remote ack or connection termination var ack map[string][]string - if err := websocket.JSON.Receive(conn, &ack); err != nil || len(ack["emit"]) != 1 || ack["emit"][0] != "ready" { + if err := conn.ReadJSON(&ack); err != nil || len(ack["emit"]) != 1 || ack["emit"][0] != "ready" { return errors.New("unauthorized") } return nil @@ -441,7 +441,7 @@ func (s *Service) reportLatency(conn *websocket.Conn) error { "clientTime": start.String(), }}, } - if err := websocket.JSON.Send(conn, ping); err != nil { + if err := conn.WriteJSON(ping); err != nil { return err } // Wait for the pong request to arrive back @@ -463,7 +463,7 @@ func (s *Service) reportLatency(conn *websocket.Conn) error { "latency": latency, }}, } - return websocket.JSON.Send(conn, stats) + return conn.WriteJSON(stats) } // blockStats is the information to report about individual blocks. @@ -514,7 +514,7 @@ func (s *Service) reportBlock(conn *websocket.Conn, block *types.Block) error { report := map[string][]interface{}{ "emit": {"block", stats}, } - return websocket.JSON.Send(conn, report) + return conn.WriteJSON(report) } // assembleBlockStats retrieves any required metadata to report a single block @@ -557,7 +557,7 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats { Number: header.Number, Hash: header.Hash(), ParentHash: header.ParentHash, - Timestamp: header.Time, + Timestamp: new(big.Int).SetUint64(header.Time), Miner: author, GasUsed: header.GasUsed, GasLimit: header.GasLimit, @@ -628,7 +628,7 @@ func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error { report := map[string][]interface{}{ "emit": {"history", stats}, } - return websocket.JSON.Send(conn, report) + return conn.WriteJSON(report) } // pendStats is the information to report about pending transactions. @@ -658,7 +658,7 @@ func (s *Service) reportPending(conn *websocket.Conn) error { report := map[string][]interface{}{ "emit": {"pending", stats}, } - return websocket.JSON.Send(conn, report) + return conn.WriteJSON(report) } // nodeStats is the information to report about the local node. @@ -713,5 +713,5 @@ func (s *Service) reportStats(conn *websocket.Conn) error { report := map[string][]interface{}{ "emit": {"stats", stats}, } - return websocket.JSON.Send(conn, report) + return conn.WriteJSON(report) } diff --git a/graphql/graphiql.go b/graphql/graphiql.go new file mode 100644 index 000000000000..864ebf57df21 --- /dev/null +++ b/graphql/graphiql.go @@ -0,0 +1,120 @@ +// The MIT License (MIT) +// +// Copyright (c) 2016 Muhammed Thanish +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package graphql + +import ( + "bytes" + "fmt" + "net/http" +) + +// GraphiQL is an in-browser IDE for exploring GraphiQL APIs. +// This handler returns GraphiQL when requested. +// +// For more information, see https://github.com/graphql/graphiql. +type GraphiQL struct{} + +func respond(w http.ResponseWriter, body []byte, code int) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Header().Set("X-Content-Type-Options", "nosniff") + w.WriteHeader(code) + _, _ = w.Write(body) +} + +func errorJSON(msg string) []byte { + buf := bytes.Buffer{} + fmt.Fprintf(&buf, `{"error": "%s"}`, msg) + return buf.Bytes() +} + +func (h GraphiQL) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + respond(w, errorJSON("only GET requests are supported"), http.StatusMethodNotAllowed) + return + } + w.Header().Set("Content-Type", "text/html") + w.Write(graphiql) +} + +var graphiql = []byte(` + + + + + + + + + + + +

    Loading...
    + + + +`) diff --git a/graphql/graphql.go b/graphql/graphql.go new file mode 100644 index 000000000000..ddd928dff12c --- /dev/null +++ b/graphql/graphql.go @@ -0,0 +1,1055 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package graphql provides a GraphQL interface to Ethereum node data. +package graphql + +import ( + "context" + "errors" + "time" + + "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/filters" + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" +) + +var ( + errBlockInvariant = errors.New("block objects must be instantiated with at least one of num or hash") +) + +// Account represents an Ethereum account at a particular block. +type Account struct { + backend ethapi.Backend + address common.Address + blockNrOrHash rpc.BlockNumberOrHash +} + +// getState fetches the StateDB object for an account. +func (a *Account) getState(ctx context.Context) (*state.StateDB, error) { + state, _, err := a.backend.StateAndHeaderByNumberOrHash(ctx, a.blockNrOrHash) + return state, err +} + +func (a *Account) Address(ctx context.Context) (common.Address, error) { + return a.address, nil +} + +func (a *Account) Balance(ctx context.Context) (hexutil.Big, error) { + state, err := a.getState(ctx) + if err != nil { + return hexutil.Big{}, err + } + return hexutil.Big(*state.GetBalance(a.address)), nil +} + +func (a *Account) TransactionCount(ctx context.Context) (hexutil.Uint64, error) { + state, err := a.getState(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(state.GetNonce(a.address)), nil +} + +func (a *Account) Code(ctx context.Context) (hexutil.Bytes, error) { + state, err := a.getState(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(state.GetCode(a.address)), nil +} + +func (a *Account) Storage(ctx context.Context, args struct{ Slot common.Hash }) (common.Hash, error) { + state, err := a.getState(ctx) + if err != nil { + return common.Hash{}, err + } + return state.GetState(a.address, args.Slot), nil +} + +// Log represents an individual log message. All arguments are mandatory. +type Log struct { + backend ethapi.Backend + transaction *Transaction + log *types.Log +} + +func (l *Log) Transaction(ctx context.Context) *Transaction { + return l.transaction +} + +func (l *Log) Account(ctx context.Context, args BlockNumberArgs) *Account { + return &Account{ + backend: l.backend, + address: l.log.Address, + blockNrOrHash: args.NumberOrLatest(), + } +} + +func (l *Log) Index(ctx context.Context) int32 { + return int32(l.log.Index) +} + +func (l *Log) Topics(ctx context.Context) []common.Hash { + return l.log.Topics +} + +func (l *Log) Data(ctx context.Context) hexutil.Bytes { + return hexutil.Bytes(l.log.Data) +} + +// Transaction represents an Ethereum transaction. +// backend and hash are mandatory; all others will be fetched when required. +type Transaction struct { + backend ethapi.Backend + hash common.Hash + tx *types.Transaction + block *Block + index uint64 +} + +// resolve returns the internal transaction object, fetching it if needed. +func (t *Transaction) resolve(ctx context.Context) (*types.Transaction, error) { + if t.tx == nil { + tx, blockHash, _, index := rawdb.ReadTransaction(t.backend.ChainDb(), t.hash) + if tx != nil { + t.tx = tx + blockNrOrHash := rpc.BlockNumberOrHashWithHash(blockHash, false) + t.block = &Block{ + backend: t.backend, + numberOrHash: &blockNrOrHash, + } + t.index = index + } else { + t.tx = t.backend.GetPoolTransaction(t.hash) + } + } + return t.tx, nil +} + +func (t *Transaction) Hash(ctx context.Context) common.Hash { + return t.hash +} + +func (t *Transaction) InputData(ctx context.Context) (hexutil.Bytes, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(tx.Data()), nil +} + +func (t *Transaction) Gas(ctx context.Context) (hexutil.Uint64, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return 0, err + } + return hexutil.Uint64(tx.Gas()), nil +} + +func (t *Transaction) GasPrice(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + return hexutil.Big(*tx.GasPrice()), nil +} + +func (t *Transaction) Value(ctx context.Context) (hexutil.Big, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return hexutil.Big{}, err + } + return hexutil.Big(*tx.Value()), nil +} + +func (t *Transaction) Nonce(ctx context.Context) (hexutil.Uint64, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return 0, err + } + return hexutil.Uint64(tx.Nonce()), nil +} + +func (t *Transaction) To(ctx context.Context, args BlockNumberArgs) (*Account, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + to := tx.To() + if to == nil { + return nil, nil + } + return &Account{ + backend: t.backend, + address: *to, + blockNrOrHash: args.NumberOrLatest(), + }, nil +} + +func (t *Transaction) From(ctx context.Context, args BlockNumberArgs) (*Account, error) { + tx, err := t.resolve(ctx) + if err != nil || tx == nil { + return nil, err + } + var signer types.Signer = types.HomesteadSigner{} + if tx.Protected() { + signer = types.NewEIP155Signer(tx.ChainId()) + } + from, _ := types.Sender(signer, tx) + + return &Account{ + backend: t.backend, + address: from, + blockNrOrHash: args.NumberOrLatest(), + }, nil +} + +func (t *Transaction) Block(ctx context.Context) (*Block, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + return t.block, nil +} + +func (t *Transaction) Index(ctx context.Context) (*int32, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + if t.block == nil { + return nil, nil + } + index := int32(t.index) + return &index, nil +} + +// getReceipt returns the receipt associated with this transaction, if any. +func (t *Transaction) getReceipt(ctx context.Context) (*types.Receipt, error) { + if _, err := t.resolve(ctx); err != nil { + return nil, err + } + if t.block == nil { + return nil, nil + } + receipts, err := t.block.resolveReceipts(ctx) + if err != nil { + return nil, err + } + return receipts[t.index], nil +} + +func (t *Transaction) Status(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + ret := hexutil.Uint64(receipt.Status) + return &ret, nil +} + +func (t *Transaction) GasUsed(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + ret := hexutil.Uint64(receipt.GasUsed) + return &ret, nil +} + +func (t *Transaction) CumulativeGasUsed(ctx context.Context) (*hexutil.Uint64, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + ret := hexutil.Uint64(receipt.CumulativeGasUsed) + return &ret, nil +} + +func (t *Transaction) CreatedContract(ctx context.Context, args BlockNumberArgs) (*Account, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil || receipt.ContractAddress == (common.Address{}) { + return nil, err + } + return &Account{ + backend: t.backend, + address: receipt.ContractAddress, + blockNrOrHash: args.NumberOrLatest(), + }, nil +} + +func (t *Transaction) Logs(ctx context.Context) (*[]*Log, error) { + receipt, err := t.getReceipt(ctx) + if err != nil || receipt == nil { + return nil, err + } + ret := make([]*Log, 0, len(receipt.Logs)) + for _, log := range receipt.Logs { + ret = append(ret, &Log{ + backend: t.backend, + transaction: t, + log: log, + }) + } + return &ret, nil +} + +type BlockType int + +// Block represents an Ethereum block. +// backend, and numberOrHash are mandatory. All other fields are lazily fetched +// when required. +type Block struct { + backend ethapi.Backend + numberOrHash *rpc.BlockNumberOrHash + hash common.Hash + header *types.Header + block *types.Block + receipts []*types.Receipt +} + +// resolve returns the internal Block object representing this block, fetching +// it if necessary. +func (b *Block) resolve(ctx context.Context) (*types.Block, error) { + if b.block != nil { + return b.block, nil + } + if b.numberOrHash == nil { + latest := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + b.numberOrHash = &latest + } + var err error + b.block, err = b.backend.BlockByNumberOrHash(ctx, *b.numberOrHash) + if b.block != nil && b.header == nil { + b.header = b.block.Header() + if hash, ok := b.numberOrHash.Hash(); ok { + b.hash = hash + } + } + return b.block, err +} + +// resolveHeader returns the internal Header object for this block, fetching it +// if necessary. Call this function instead of `resolve` unless you need the +// additional data (transactions and uncles). +func (b *Block) resolveHeader(ctx context.Context) (*types.Header, error) { + if b.numberOrHash == nil && b.hash == (common.Hash{}) { + return nil, errBlockInvariant + } + var err error + if b.header == nil { + if b.hash != (common.Hash{}) { + b.header, err = b.backend.HeaderByHash(ctx, b.hash) + } else { + b.header, err = b.backend.HeaderByNumberOrHash(ctx, *b.numberOrHash) + } + } + return b.header, err +} + +// resolveReceipts returns the list of receipts for this block, fetching them +// if necessary. +func (b *Block) resolveReceipts(ctx context.Context) ([]*types.Receipt, error) { + if b.receipts == nil { + hash := b.hash + if hash == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + hash = header.Hash() + } + receipts, err := b.backend.GetReceipts(ctx, hash) + if err != nil { + return nil, err + } + b.receipts = []*types.Receipt(receipts) + } + return b.receipts, nil +} + +func (b *Block) Number(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + + return hexutil.Uint64(header.Number.Uint64()), nil +} + +func (b *Block) Hash(ctx context.Context) (common.Hash, error) { + if b.hash == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + b.hash = header.Hash() + } + return b.hash, nil +} + +func (b *Block) GasLimit(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(header.GasLimit), nil +} + +func (b *Block) GasUsed(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(header.GasUsed), nil +} + +func (b *Block) Parent(ctx context.Context) (*Block, error) { + // If the block header hasn't been fetched, and we'll need it, fetch it. + if b.numberOrHash == nil && b.header == nil { + if _, err := b.resolveHeader(ctx); err != nil { + return nil, err + } + } + if b.header != nil && b.header.Number.Uint64() > 0 { + num := rpc.BlockNumberOrHashWithNumber(rpc.BlockNumber(b.header.Number.Uint64() - 1)) + return &Block{ + backend: b.backend, + numberOrHash: &num, + hash: b.header.ParentHash, + }, nil + } + return nil, nil +} + +func (b *Block) Difficulty(ctx context.Context) (hexutil.Big, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Big{}, err + } + return hexutil.Big(*header.Difficulty), nil +} + +func (b *Block) Timestamp(ctx context.Context) (hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return 0, err + } + return hexutil.Uint64(header.Time), nil +} + +func (b *Block) Nonce(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Nonce[:]), nil +} + +func (b *Block) MixHash(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.MixDigest, nil +} + +func (b *Block) TransactionsRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.TxHash, nil +} + +func (b *Block) StateRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.Root, nil +} + +func (b *Block) ReceiptsRoot(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.ReceiptHash, nil +} + +func (b *Block) OmmerHash(ctx context.Context) (common.Hash, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return common.Hash{}, err + } + return header.UncleHash, nil +} + +func (b *Block) OmmerCount(ctx context.Context) (*int32, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + count := int32(len(block.Uncles())) + return &count, err +} + +func (b *Block) Ommers(ctx context.Context) (*[]*Block, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + ret := make([]*Block, 0, len(block.Uncles())) + for _, uncle := range block.Uncles() { + blockNumberOrHash := rpc.BlockNumberOrHashWithHash(uncle.Hash(), false) + ret = append(ret, &Block{ + backend: b.backend, + numberOrHash: &blockNumberOrHash, + header: uncle, + }) + } + return &ret, nil +} + +func (b *Block) ExtraData(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Extra), nil +} + +func (b *Block) LogsBloom(ctx context.Context) (hexutil.Bytes, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Bytes{}, err + } + return hexutil.Bytes(header.Bloom.Bytes()), nil +} + +func (b *Block) TotalDifficulty(ctx context.Context) (hexutil.Big, error) { + h := b.hash + if h == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Big{}, err + } + h = header.Hash() + } + return hexutil.Big(*b.backend.GetTd(h)), nil +} + +// BlockNumberArgs encapsulates arguments to accessors that specify a block number. +type BlockNumberArgs struct { + // TODO: Ideally we could use input unions to allow the query to specify the + // block parameter by hash, block number, or tag but input unions aren't part of the + // standard GraphQL schema SDL yet, see: https://github.com/graphql/graphql-spec/issues/488 + Block *hexutil.Uint64 +} + +// NumberOr returns the provided block number argument, or the "current" block number or hash if none +// was provided. +func (a BlockNumberArgs) NumberOr(current rpc.BlockNumberOrHash) rpc.BlockNumberOrHash { + if a.Block != nil { + blockNr := rpc.BlockNumber(*a.Block) + return rpc.BlockNumberOrHashWithNumber(blockNr) + } + return current +} + +// NumberOrLatest returns the provided block number argument, or the "latest" block number if none +// was provided. +func (a BlockNumberArgs) NumberOrLatest() rpc.BlockNumberOrHash { + return a.NumberOr(rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber)) +} + +func (b *Block) Miner(ctx context.Context, args BlockNumberArgs) (*Account, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + return &Account{ + backend: b.backend, + address: header.Coinbase, + blockNrOrHash: args.NumberOrLatest(), + }, nil +} + +func (b *Block) TransactionCount(ctx context.Context) (*int32, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + count := int32(len(block.Transactions())) + return &count, err +} + +func (b *Block) Transactions(ctx context.Context) (*[]*Transaction, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + ret := make([]*Transaction, 0, len(block.Transactions())) + for i, tx := range block.Transactions() { + ret = append(ret, &Transaction{ + backend: b.backend, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(i), + }) + } + return &ret, nil +} + +func (b *Block) TransactionAt(ctx context.Context, args struct{ Index int32 }) (*Transaction, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + txs := block.Transactions() + if args.Index < 0 || int(args.Index) >= len(txs) { + return nil, nil + } + tx := txs[args.Index] + return &Transaction{ + backend: b.backend, + hash: tx.Hash(), + tx: tx, + block: b, + index: uint64(args.Index), + }, nil +} + +func (b *Block) OmmerAt(ctx context.Context, args struct{ Index int32 }) (*Block, error) { + block, err := b.resolve(ctx) + if err != nil || block == nil { + return nil, err + } + uncles := block.Uncles() + if args.Index < 0 || int(args.Index) >= len(uncles) { + return nil, nil + } + uncle := uncles[args.Index] + blockNumberOrHash := rpc.BlockNumberOrHashWithHash(uncle.Hash(), false) + return &Block{ + backend: b.backend, + numberOrHash: &blockNumberOrHash, + header: uncle, + }, nil +} + +// BlockFilterCriteria encapsulates criteria passed to a `logs` accessor inside +// a block. +type BlockFilterCriteria struct { + Addresses *[]common.Address // restricts matches to events created by specific contracts + + // The Topic list restricts matches to particular event topics. Each event has a list + // of topics. Topics matches a prefix of that list. An empty element slice matches any + // topic. Non-empty elements represent an alternative that matches any of the + // contained topics. + // + // Examples: + // {} or nil matches any topic list + // {{A}} matches topic A in first position + // {{}, {B}} matches any topic in first position, B in second position + // {{A}, {B}} matches topic A in first position, B in second position + // {{A, B}}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + Topics *[][]common.Hash +} + +// runFilter accepts a filter and executes it, returning all its results as +// `Log` objects. +func runFilter(ctx context.Context, be ethapi.Backend, filter *filters.Filter) ([]*Log, error) { + logs, err := filter.Logs(ctx) + if err != nil || logs == nil { + return nil, err + } + ret := make([]*Log, 0, len(logs)) + for _, log := range logs { + ret = append(ret, &Log{ + backend: be, + transaction: &Transaction{backend: be, hash: log.TxHash}, + log: log, + }) + } + return ret, nil +} + +func (b *Block) Logs(ctx context.Context, args struct{ Filter BlockFilterCriteria }) ([]*Log, error) { + var addresses []common.Address + if args.Filter.Addresses != nil { + addresses = *args.Filter.Addresses + } + var topics [][]common.Hash + if args.Filter.Topics != nil { + topics = *args.Filter.Topics + } + hash := b.hash + if hash == (common.Hash{}) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + hash = header.Hash() + } + // Construct the range filter + filter := filters.NewBlockFilter(b.backend, hash, addresses, topics) + + // Run the filter and return all the logs + return runFilter(ctx, b.backend, filter) +} + +func (b *Block) Account(ctx context.Context, args struct { + Address common.Address +}) (*Account, error) { + if b.numberOrHash == nil { + _, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + } + return &Account{ + backend: b.backend, + address: args.Address, + blockNrOrHash: *b.numberOrHash, + }, nil +} + +// CallData encapsulates arguments to `call` or `estimateGas`. +// All arguments are optional. +type CallData struct { + From *common.Address // The Ethereum address the call is from. + To *common.Address // The Ethereum address the call is to. + Gas *hexutil.Uint64 // The amount of gas provided for the call. + GasPrice *hexutil.Big // The price of each unit of gas, in wei. + Value *hexutil.Big // The value sent along with the call. + Data *hexutil.Bytes // Any data sent with the call. +} + +// CallResult encapsulates the result of an invocation of the `call` accessor. +type CallResult struct { + data hexutil.Bytes // The return data from the call + gasUsed hexutil.Uint64 // The amount of gas used + status hexutil.Uint64 // The return status of the call - 0 for failure or 1 for success. +} + +func (c *CallResult) Data() hexutil.Bytes { + return c.data +} + +func (c *CallResult) GasUsed() hexutil.Uint64 { + return c.gasUsed +} + +func (c *CallResult) Status() hexutil.Uint64 { + return c.status +} + +func (b *Block) Call(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (*CallResult, error) { + if b.numberOrHash == nil { + _, err := b.resolve(ctx) + if err != nil { + return nil, err + } + } + result, gas, failed, err := ethapi.DoCall(ctx, b.backend, args.Data, *b.numberOrHash, nil, vm.Config{}, 5*time.Second, b.backend.RPCGasCap()) + status := hexutil.Uint64(1) + if failed { + status = 0 + } + return &CallResult{ + data: hexutil.Bytes(result), + gasUsed: hexutil.Uint64(gas), + status: status, + }, err +} + +func (b *Block) EstimateGas(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (hexutil.Uint64, error) { + if b.numberOrHash == nil { + _, err := b.resolveHeader(ctx) + if err != nil { + return hexutil.Uint64(0), err + } + } + gas, err := ethapi.DoEstimateGas(ctx, b.backend, args.Data, *b.numberOrHash, b.backend.RPCGasCap()) + return gas, err +} + +type Pending struct { + backend ethapi.Backend +} + +func (p *Pending) TransactionCount(ctx context.Context) (int32, error) { + txs, err := p.backend.GetPoolTransactions() + return int32(len(txs)), err +} + +func (p *Pending) Transactions(ctx context.Context) (*[]*Transaction, error) { + txs, err := p.backend.GetPoolTransactions() + if err != nil { + return nil, err + } + ret := make([]*Transaction, 0, len(txs)) + for i, tx := range txs { + ret = append(ret, &Transaction{ + backend: p.backend, + hash: tx.Hash(), + tx: tx, + index: uint64(i), + }) + } + return &ret, nil +} + +func (p *Pending) Account(ctx context.Context, args struct { + Address common.Address +}) *Account { + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + return &Account{ + backend: p.backend, + address: args.Address, + blockNrOrHash: pendingBlockNr, + } +} + +func (p *Pending) Call(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (*CallResult, error) { + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + result, gas, failed, err := ethapi.DoCall(ctx, p.backend, args.Data, pendingBlockNr, nil, vm.Config{}, 5*time.Second, p.backend.RPCGasCap()) + status := hexutil.Uint64(1) + if failed { + status = 0 + } + return &CallResult{ + data: hexutil.Bytes(result), + gasUsed: hexutil.Uint64(gas), + status: status, + }, err +} + +func (p *Pending) EstimateGas(ctx context.Context, args struct { + Data ethapi.CallArgs +}) (hexutil.Uint64, error) { + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + return ethapi.DoEstimateGas(ctx, p.backend, args.Data, pendingBlockNr, p.backend.RPCGasCap()) +} + +// Resolver is the top-level object in the GraphQL hierarchy. +type Resolver struct { + backend ethapi.Backend +} + +func (r *Resolver) Block(ctx context.Context, args struct { + Number *hexutil.Uint64 + Hash *common.Hash +}) (*Block, error) { + var block *Block + if args.Number != nil { + number := rpc.BlockNumber(uint64(*args.Number)) + numberOrHash := rpc.BlockNumberOrHashWithNumber(number) + block = &Block{ + backend: r.backend, + numberOrHash: &numberOrHash, + } + } else if args.Hash != nil { + numberOrHash := rpc.BlockNumberOrHashWithHash(*args.Hash, false) + block = &Block{ + backend: r.backend, + numberOrHash: &numberOrHash, + } + } else { + numberOrHash := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + block = &Block{ + backend: r.backend, + numberOrHash: &numberOrHash, + } + } + // Resolve the header, return nil if it doesn't exist. + // Note we don't resolve block directly here since it will require an + // additional network request for light client. + h, err := block.resolveHeader(ctx) + if err != nil { + return nil, err + } else if h == nil { + return nil, nil + } + return block, nil +} + +func (r *Resolver) Blocks(ctx context.Context, args struct { + From hexutil.Uint64 + To *hexutil.Uint64 +}) ([]*Block, error) { + from := rpc.BlockNumber(args.From) + + var to rpc.BlockNumber + if args.To != nil { + to = rpc.BlockNumber(*args.To) + } else { + to = rpc.BlockNumber(r.backend.CurrentBlock().Number().Int64()) + } + if to < from { + return []*Block{}, nil + } + ret := make([]*Block, 0, to-from+1) + for i := from; i <= to; i++ { + numberOrHash := rpc.BlockNumberOrHashWithNumber(i) + ret = append(ret, &Block{ + backend: r.backend, + numberOrHash: &numberOrHash, + }) + } + return ret, nil +} + +func (r *Resolver) Pending(ctx context.Context) *Pending { + return &Pending{r.backend} +} + +func (r *Resolver) Transaction(ctx context.Context, args struct{ Hash common.Hash }) (*Transaction, error) { + tx := &Transaction{ + backend: r.backend, + hash: args.Hash, + } + // Resolve the transaction; if it doesn't exist, return nil. + t, err := tx.resolve(ctx) + if err != nil { + return nil, err + } else if t == nil { + return nil, nil + } + return tx, nil +} + +func (r *Resolver) SendRawTransaction(ctx context.Context, args struct{ Data hexutil.Bytes }) (common.Hash, error) { + tx := new(types.Transaction) + if err := rlp.DecodeBytes(args.Data, tx); err != nil { + return common.Hash{}, err + } + hash, err := ethapi.SubmitTransaction(ctx, r.backend, tx) + return hash, err +} + +// FilterCriteria encapsulates the arguments to `logs` on the root resolver object. +type FilterCriteria struct { + FromBlock *hexutil.Uint64 // beginning of the queried range, nil means genesis block + ToBlock *hexutil.Uint64 // end of the range, nil means latest block + Addresses *[]common.Address // restricts matches to events created by specific contracts + + // The Topic list restricts matches to particular event topics. Each event has a list + // of topics. Topics matches a prefix of that list. An empty element slice matches any + // topic. Non-empty elements represent an alternative that matches any of the + // contained topics. + // + // Examples: + // {} or nil matches any topic list + // {{A}} matches topic A in first position + // {{}, {B}} matches any topic in first position, B in second position + // {{A}, {B}} matches topic A in first position, B in second position + // {{A, B}}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + Topics *[][]common.Hash +} + +func (r *Resolver) Logs(ctx context.Context, args struct{ Filter FilterCriteria }) ([]*Log, error) { + // Convert the RPC block numbers into internal representations + begin := rpc.LatestBlockNumber.Int64() + if args.Filter.FromBlock != nil { + begin = int64(*args.Filter.FromBlock) + } + end := rpc.LatestBlockNumber.Int64() + if args.Filter.ToBlock != nil { + end = int64(*args.Filter.ToBlock) + } + var addresses []common.Address + if args.Filter.Addresses != nil { + addresses = *args.Filter.Addresses + } + var topics [][]common.Hash + if args.Filter.Topics != nil { + topics = *args.Filter.Topics + } + // Construct the range filter + filter := filters.NewRangeFilter(filters.Backend(r.backend), begin, end, addresses, topics) + return runFilter(ctx, r.backend, filter) +} + +func (r *Resolver) GasPrice(ctx context.Context) (hexutil.Big, error) { + price, err := r.backend.SuggestPrice(ctx) + return hexutil.Big(*price), err +} + +func (r *Resolver) ProtocolVersion(ctx context.Context) (int32, error) { + return int32(r.backend.ProtocolVersion()), nil +} + +// SyncState represents the synchronisation status returned from the `syncing` accessor. +type SyncState struct { + progress ethereum.SyncProgress +} + +func (s *SyncState) StartingBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.StartingBlock) +} + +func (s *SyncState) CurrentBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.CurrentBlock) +} + +func (s *SyncState) HighestBlock() hexutil.Uint64 { + return hexutil.Uint64(s.progress.HighestBlock) +} + +func (s *SyncState) PulledStates() *hexutil.Uint64 { + ret := hexutil.Uint64(s.progress.PulledStates) + return &ret +} + +func (s *SyncState) KnownStates() *hexutil.Uint64 { + ret := hexutil.Uint64(s.progress.KnownStates) + return &ret +} + +// Syncing returns false in case the node is currently not syncing with the network. It can be up to date or has not +// yet received the latest block headers from its pears. In case it is synchronizing: +// - startingBlock: block number this node started to synchronise from +// - currentBlock: block number this node is currently importing +// - highestBlock: block number of the highest block header this node has received from peers +// - pulledStates: number of state entries processed until now +// - knownStates: number of known state entries that still need to be pulled +func (r *Resolver) Syncing() (*SyncState, error) { + progress := r.backend.Downloader().Progress() + + // Return not syncing if the synchronisation already completed + if progress.CurrentBlock >= progress.HighestBlock { + return nil, nil + } + // Otherwise gather the block sync stats + return &SyncState{progress}, nil +} diff --git a/swarm/fuse/fuse_root.go b/graphql/graphql_test.go similarity index 72% rename from swarm/fuse/fuse_root.go rename to graphql/graphql_test.go index b2262d1c5a0d..40b13187f496 100644 --- a/swarm/fuse/fuse_root.go +++ b/graphql/graphql_test.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,22 +14,15 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build linux darwin freebsd - -package fuse +package graphql import ( - "bazil.org/fuse/fs" -) - -var ( - _ fs.Node = (*SwarmDir)(nil) + "testing" ) -type SwarmRoot struct { - root *SwarmDir -} - -func (filesystem *SwarmRoot) Root() (fs.Node, error) { - return filesystem.root, nil +func TestBuildSchema(t *testing.T) { + // Make sure the schema can be parsed and matched up to the object model. + if _, err := newHandler(nil); err != nil { + t.Errorf("Could not construct GraphQL handler: %v", err) + } } diff --git a/graphql/schema.go b/graphql/schema.go new file mode 100644 index 000000000000..525b9e1e5a88 --- /dev/null +++ b/graphql/schema.go @@ -0,0 +1,320 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package graphql + +const schema string = ` + # Bytes32 is a 32 byte binary string, represented as 0x-prefixed hexadecimal. + scalar Bytes32 + # Address is a 20 byte Ethereum address, represented as 0x-prefixed hexadecimal. + scalar Address + # Bytes is an arbitrary length binary string, represented as 0x-prefixed hexadecimal. + # An empty byte string is represented as '0x'. Byte strings must have an even number of hexadecimal nybbles. + scalar Bytes + # BigInt is a large integer. Input is accepted as either a JSON number or as a string. + # Strings may be either decimal or 0x-prefixed hexadecimal. Output values are all + # 0x-prefixed hexadecimal. + scalar BigInt + # Long is a 64 bit unsigned integer. + scalar Long + + schema { + query: Query + mutation: Mutation + } + + # Account is an Ethereum account at a particular block. + type Account { + # Address is the address owning the account. + address: Address! + # Balance is the balance of the account, in wei. + balance: BigInt! + # TransactionCount is the number of transactions sent from this account, + # or in the case of a contract, the number of contracts created. Otherwise + # known as the nonce. + transactionCount: Long! + # Code contains the smart contract code for this account, if the account + # is a (non-self-destructed) contract. + code: Bytes! + # Storage provides access to the storage of a contract account, indexed + # by its 32 byte slot identifier. + storage(slot: Bytes32!): Bytes32! + } + + # Log is an Ethereum event log. + type Log { + # Index is the index of this log in the block. + index: Int! + # Account is the account which generated this log - this will always + # be a contract account. + account(block: Long): Account! + # Topics is a list of 0-4 indexed topics for the log. + topics: [Bytes32!]! + # Data is unindexed data for this log. + data: Bytes! + # Transaction is the transaction that generated this log entry. + transaction: Transaction! + } + + # Transaction is an Ethereum transaction. + type Transaction { + # Hash is the hash of this transaction. + hash: Bytes32! + # Nonce is the nonce of the account this transaction was generated with. + nonce: Long! + # Index is the index of this transaction in the parent block. This will + # be null if the transaction has not yet been mined. + index: Int + # From is the account that sent this transaction - this will always be + # an externally owned account. + from(block: Long): Account! + # To is the account the transaction was sent to. This is null for + # contract-creating transactions. + to(block: Long): Account + # Value is the value, in wei, sent along with this transaction. + value: BigInt! + # GasPrice is the price offered to miners for gas, in wei per unit. + gasPrice: BigInt! + # Gas is the maximum amount of gas this transaction can consume. + gas: Long! + # InputData is the data supplied to the target of the transaction. + inputData: Bytes! + # Block is the block this transaction was mined in. This will be null if + # the transaction has not yet been mined. + block: Block + + # Status is the return status of the transaction. This will be 1 if the + # transaction succeeded, or 0 if it failed (due to a revert, or due to + # running out of gas). If the transaction has not yet been mined, this + # field will be null. + status: Long + # GasUsed is the amount of gas that was used processing this transaction. + # If the transaction has not yet been mined, this field will be null. + gasUsed: Long + # CumulativeGasUsed is the total gas used in the block up to and including + # this transaction. If the transaction has not yet been mined, this field + # will be null. + cumulativeGasUsed: Long + # CreatedContract is the account that was created by a contract creation + # transaction. If the transaction was not a contract creation transaction, + # or it has not yet been mined, this field will be null. + createdContract(block: Long): Account + # Logs is a list of log entries emitted by this transaction. If the + # transaction has not yet been mined, this field will be null. + logs: [Log!] + } + + # BlockFilterCriteria encapsulates log filter criteria for a filter applied + # to a single block. + input BlockFilterCriteria { + # Addresses is list of addresses that are of interest. If this list is + # empty, results will not be filtered by address. + addresses: [Address!] + # Topics list restricts matches to particular event topics. Each event has a list + # of topics. Topics matches a prefix of that list. An empty element array matches any + # topic. Non-empty elements represent an alternative that matches any of the + # contained topics. + # + # Examples: + # - [] or nil matches any topic list + # - [[A]] matches topic A in first position + # - [[], [B]] matches any topic in first position, B in second position + # - [[A], [B]] matches topic A in first position, B in second position + # - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position + topics: [[Bytes32!]!] + } + + # Block is an Ethereum block. + type Block { + # Number is the number of this block, starting at 0 for the genesis block. + number: Long! + # Hash is the block hash of this block. + hash: Bytes32! + # Parent is the parent block of this block. + parent: Block + # Nonce is the block nonce, an 8 byte sequence determined by the miner. + nonce: Bytes! + # TransactionsRoot is the keccak256 hash of the root of the trie of transactions in this block. + transactionsRoot: Bytes32! + # TransactionCount is the number of transactions in this block. if + # transactions are not available for this block, this field will be null. + transactionCount: Int + # StateRoot is the keccak256 hash of the state trie after this block was processed. + stateRoot: Bytes32! + # ReceiptsRoot is the keccak256 hash of the trie of transaction receipts in this block. + receiptsRoot: Bytes32! + # Miner is the account that mined this block. + miner(block: Long): Account! + # ExtraData is an arbitrary data field supplied by the miner. + extraData: Bytes! + # GasLimit is the maximum amount of gas that was available to transactions in this block. + gasLimit: Long! + # GasUsed is the amount of gas that was used executing transactions in this block. + gasUsed: Long! + # Timestamp is the unix timestamp at which this block was mined. + timestamp: Long! + # LogsBloom is a bloom filter that can be used to check if a block may + # contain log entries matching a filter. + logsBloom: Bytes! + # MixHash is the hash that was used as an input to the PoW process. + mixHash: Bytes32! + # Difficulty is a measure of the difficulty of mining this block. + difficulty: BigInt! + # TotalDifficulty is the sum of all difficulty values up to and including + # this block. + totalDifficulty: BigInt! + # OmmerCount is the number of ommers (AKA uncles) associated with this + # block. If ommers are unavailable, this field will be null. + ommerCount: Int + # Ommers is a list of ommer (AKA uncle) blocks associated with this block. + # If ommers are unavailable, this field will be null. Depending on your + # node, the transactions, transactionAt, transactionCount, ommers, + # ommerCount and ommerAt fields may not be available on any ommer blocks. + ommers: [Block] + # OmmerAt returns the ommer (AKA uncle) at the specified index. If ommers + # are unavailable, or the index is out of bounds, this field will be null. + ommerAt(index: Int!): Block + # OmmerHash is the keccak256 hash of all the ommers (AKA uncles) + # associated with this block. + ommerHash: Bytes32! + # Transactions is a list of transactions associated with this block. If + # transactions are unavailable for this block, this field will be null. + transactions: [Transaction!] + # TransactionAt returns the transaction at the specified index. If + # transactions are unavailable for this block, or if the index is out of + # bounds, this field will be null. + transactionAt(index: Int!): Transaction + # Logs returns a filtered set of logs from this block. + logs(filter: BlockFilterCriteria!): [Log!]! + # Account fetches an Ethereum account at the current block's state. + account(address: Address!): Account! + # Call executes a local call operation at the current block's state. + call(data: CallData!): CallResult + # EstimateGas estimates the amount of gas that will be required for + # successful execution of a transaction at the current block's state. + estimateGas(data: CallData!): Long! + } + + # CallData represents the data associated with a local contract call. + # All fields are optional. + input CallData { + # From is the address making the call. + from: Address + # To is the address the call is sent to. + to: Address + # Gas is the amount of gas sent with the call. + gas: Long + # GasPrice is the price, in wei, offered for each unit of gas. + gasPrice: BigInt + # Value is the value, in wei, sent along with the call. + value: BigInt + # Data is the data sent to the callee. + data: Bytes + } + + # CallResult is the result of a local call operation. + type CallResult { + # Data is the return data of the called contract. + data: Bytes! + # GasUsed is the amount of gas used by the call, after any refunds. + gasUsed: Long! + # Status is the result of the call - 1 for success or 0 for failure. + status: Long! + } + + # FilterCriteria encapsulates log filter criteria for searching log entries. + input FilterCriteria { + # FromBlock is the block at which to start searching, inclusive. Defaults + # to the latest block if not supplied. + fromBlock: Long + # ToBlock is the block at which to stop searching, inclusive. Defaults + # to the latest block if not supplied. + toBlock: Long + # Addresses is a list of addresses that are of interest. If this list is + # empty, results will not be filtered by address. + addresses: [Address!] + # Topics list restricts matches to particular event topics. Each event has a list + # of topics. Topics matches a prefix of that list. An empty element array matches any + # topic. Non-empty elements represent an alternative that matches any of the + # contained topics. + # + # Examples: + # - [] or nil matches any topic list + # - [[A]] matches topic A in first position + # - [[], [B]] matches any topic in first position, B in second position + # - [[A], [B]] matches topic A in first position, B in second position + # - [[A, B]], [C, D]] matches topic (A OR B) in first position, (C OR D) in second position + topics: [[Bytes32!]!] + } + + # SyncState contains the current synchronisation state of the client. + type SyncState{ + # StartingBlock is the block number at which synchronisation started. + startingBlock: Long! + # CurrentBlock is the point at which synchronisation has presently reached. + currentBlock: Long! + # HighestBlock is the latest known block number. + highestBlock: Long! + # PulledStates is the number of state entries fetched so far, or null + # if this is not known or not relevant. + pulledStates: Long + # KnownStates is the number of states the node knows of so far, or null + # if this is not known or not relevant. + knownStates: Long + } + + # Pending represents the current pending state. + type Pending { + # TransactionCount is the number of transactions in the pending state. + transactionCount: Int! + # Transactions is a list of transactions in the current pending state. + transactions: [Transaction!] + # Account fetches an Ethereum account for the pending state. + account(address: Address!): Account! + # Call executes a local call operation for the pending state. + call(data: CallData!): CallResult + # EstimateGas estimates the amount of gas that will be required for + # successful execution of a transaction for the pending state. + estimateGas(data: CallData!): Long! + } + + type Query { + # Block fetches an Ethereum block by number or by hash. If neither is + # supplied, the most recent known block is returned. + block(number: Long, hash: Bytes32): Block + # Blocks returns all the blocks between two numbers, inclusive. If + # to is not supplied, it defaults to the most recent known block. + blocks(from: Long!, to: Long): [Block!]! + # Pending returns the current pending state. + pending: Pending! + # Transaction returns a transaction specified by its hash. + transaction(hash: Bytes32!): Transaction + # Logs returns log entries matching the provided filter. + logs(filter: FilterCriteria!): [Log!]! + # GasPrice returns the node's estimate of a gas price sufficient to + # ensure a transaction is mined in a timely fashion. + gasPrice: BigInt! + # ProtocolVersion returns the current wire protocol version number. + protocolVersion: Int! + # Syncing returns information on the current synchronisation state. + syncing: SyncState + } + + type Mutation { + # SendRawTransaction sends an RLP-encoded transaction to the network. + sendRawTransaction(data: Bytes!): Bytes32! + } +` diff --git a/graphql/service.go b/graphql/service.go new file mode 100644 index 000000000000..f64075680634 --- /dev/null +++ b/graphql/service.go @@ -0,0 +1,103 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package graphql + +import ( + "fmt" + "net" + "net/http" + + "github.com/ethereum/go-ethereum/internal/ethapi" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rpc" + "github.com/graph-gophers/graphql-go" + "github.com/graph-gophers/graphql-go/relay" +) + +// Service encapsulates a GraphQL service. +type Service struct { + endpoint string // The host:port endpoint for this service. + cors []string // Allowed CORS domains + vhosts []string // Recognised vhosts + timeouts rpc.HTTPTimeouts // Timeout settings for HTTP requests. + backend ethapi.Backend // The backend that queries will operate onn. + handler http.Handler // The `http.Handler` used to answer queries. + listener net.Listener // The listening socket. +} + +// New constructs a new GraphQL service instance. +func New(backend ethapi.Backend, endpoint string, cors, vhosts []string, timeouts rpc.HTTPTimeouts) (*Service, error) { + return &Service{ + endpoint: endpoint, + cors: cors, + vhosts: vhosts, + timeouts: timeouts, + backend: backend, + }, nil +} + +// Protocols returns the list of protocols exported by this service. +func (s *Service) Protocols() []p2p.Protocol { return nil } + +// APIs returns the list of APIs exported by this service. +func (s *Service) APIs() []rpc.API { return nil } + +// Start is called after all services have been constructed and the networking +// layer was also initialized to spawn any goroutines required by the service. +func (s *Service) Start(server *p2p.Server) error { + var err error + s.handler, err = newHandler(s.backend) + if err != nil { + return err + } + if s.listener, err = net.Listen("tcp", s.endpoint); err != nil { + return err + } + go rpc.NewHTTPServer(s.cors, s.vhosts, s.timeouts, s.handler).Serve(s.listener) + log.Info("GraphQL endpoint opened", "url", fmt.Sprintf("http://%s", s.endpoint)) + return nil +} + +// newHandler returns a new `http.Handler` that will answer GraphQL queries. +// It additionally exports an interactive query browser on the / endpoint. +func newHandler(backend ethapi.Backend) (http.Handler, error) { + q := Resolver{backend} + + s, err := graphql.ParseSchema(schema, &q) + if err != nil { + return nil, err + } + h := &relay.Handler{Schema: s} + + mux := http.NewServeMux() + mux.Handle("/", GraphiQL{}) + mux.Handle("/graphql", h) + mux.Handle("/graphql/", h) + return mux, nil +} + +// Stop terminates all goroutines belonging to the service, blocking until they +// are all terminated. +func (s *Service) Stop() error { + if s.listener != nil { + s.listener.Close() + s.listener = nil + log.Info("GraphQL endpoint closed", "url", fmt.Sprintf("http://%s", s.endpoint)) + } + return nil +} diff --git a/interfaces.go b/interfaces.go index be783440629c..1ff31f96b6a6 100644 --- a/interfaces.go +++ b/interfaces.go @@ -144,9 +144,9 @@ type FilterQuery struct { // Examples: // {} or nil matches any topic list // {{A}} matches topic A in first position - // {{}, {B}} matches any topic in first position, B in second position - // {{A}, {B}} matches topic A in first position, B in second position - // {{A, B}, {C, D}} matches topic (A OR B) in first position, (C OR D) in second position + // {{}, {B}} matches any topic in first position AND B in second position + // {{A}, {B}} matches topic A in first position AND B in second position + // {{A, B}, {C, D}} matches topic (A OR B) in first position AND (C OR D) in second position Topics [][]common.Hash } diff --git a/internal/build/azure.go b/internal/build/azure.go index 086dff2c4a8a..786284265082 100644 --- a/internal/build/azure.go +++ b/internal/build/azure.go @@ -22,7 +22,7 @@ import ( "net/url" "os" - "github.com/Azure/azure-storage-blob-go/2018-03-28/azblob" + "github.com/Azure/azure-storage-blob-go/azblob" ) // AzureBlobstoreConfig is an authentication and configuration struct containing @@ -45,7 +45,11 @@ func AzureBlobstoreUpload(path string, name string, config AzureBlobstoreConfig) return nil } // Create an authenticated client against the Azure cloud - credential := azblob.NewSharedKeyCredential(config.Account, config.Token) + credential, err := azblob.NewSharedKeyCredential(config.Account, config.Token) + if err != nil { + return err + } + pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{}) u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net", config.Account)) @@ -67,7 +71,11 @@ func AzureBlobstoreUpload(path string, name string, config AzureBlobstoreConfig) // AzureBlobstoreList lists all the files contained within an azure blobstore. func AzureBlobstoreList(config AzureBlobstoreConfig) ([]azblob.BlobItem, error) { - credential := azblob.NewSharedKeyCredential(config.Account, config.Token) + credential, err := azblob.NewSharedKeyCredential(config.Account, config.Token) + if err != nil { + return nil, err + } + pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{}) u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net", config.Account)) @@ -95,7 +103,11 @@ func AzureBlobstoreDelete(config AzureBlobstoreConfig, blobs []azblob.BlobItem) return nil } // Create an authenticated client against the Azure cloud - credential := azblob.NewSharedKeyCredential(config.Account, config.Token) + credential, err := azblob.NewSharedKeyCredential(config.Account, config.Token) + if err != nil { + return err + } + pipeline := azblob.NewPipeline(credential, azblob.PipelineOptions{}) u, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net", config.Account)) diff --git a/internal/build/env.go b/internal/build/env.go index b553e0ed8068..a3017182e3c1 100644 --- a/internal/build/env.go +++ b/internal/build/env.go @@ -20,7 +20,10 @@ import ( "flag" "fmt" "os" + "regexp" + "strconv" "strings" + "time" ) var ( @@ -35,17 +38,17 @@ var ( // Environment contains metadata provided by the build environment. type Environment struct { - Name string // name of the environment - Repo string // name of GitHub repo - Commit, Branch, Tag string // Git info - Buildnum string - IsPullRequest bool - IsCronJob bool + Name string // name of the environment + Repo string // name of GitHub repo + Commit, Date, Branch, Tag string // Git info + Buildnum string + IsPullRequest bool + IsCronJob bool } func (env Environment) String() string { - return fmt.Sprintf("%s env (commit:%s branch:%s tag:%s buildnum:%s pr:%t)", - env.Name, env.Commit, env.Branch, env.Tag, env.Buildnum, env.IsPullRequest) + return fmt.Sprintf("%s env (commit:%s date:%s branch:%s tag:%s buildnum:%s pr:%t)", + env.Name, env.Commit, env.Date, env.Branch, env.Tag, env.Buildnum, env.IsPullRequest) } // Env returns metadata about the current CI environment, falling back to LocalEnv @@ -53,10 +56,15 @@ func (env Environment) String() string { func Env() Environment { switch { case os.Getenv("CI") == "true" && os.Getenv("TRAVIS") == "true": + commit := os.Getenv("TRAVIS_PULL_REQUEST_SHA") + if commit == "" { + commit = os.Getenv("TRAVIS_COMMIT") + } return Environment{ Name: "travis", Repo: os.Getenv("TRAVIS_REPO_SLUG"), - Commit: os.Getenv("TRAVIS_COMMIT"), + Commit: commit, + Date: getDate(commit), Branch: os.Getenv("TRAVIS_BRANCH"), Tag: os.Getenv("TRAVIS_TAG"), Buildnum: os.Getenv("TRAVIS_BUILD_NUMBER"), @@ -64,10 +72,15 @@ func Env() Environment { IsCronJob: os.Getenv("TRAVIS_EVENT_TYPE") == "cron", } case os.Getenv("CI") == "True" && os.Getenv("APPVEYOR") == "True": + commit := os.Getenv("APPVEYOR_PULL_REQUEST_HEAD_COMMIT") + if commit == "" { + commit = os.Getenv("APPVEYOR_REPO_COMMIT") + } return Environment{ Name: "appveyor", Repo: os.Getenv("APPVEYOR_REPO_NAME"), - Commit: os.Getenv("APPVEYOR_REPO_COMMIT"), + Commit: commit, + Date: getDate(commit), Branch: os.Getenv("APPVEYOR_REPO_BRANCH"), Tag: os.Getenv("APPVEYOR_REPO_TAG_NAME"), Buildnum: os.Getenv("APPVEYOR_BUILD_NUMBER"), @@ -84,14 +97,22 @@ func LocalEnv() Environment { env := applyEnvFlags(Environment{Name: "local", Repo: "ethereum/go-ethereum"}) head := readGitFile("HEAD") - if splits := strings.Split(head, " "); len(splits) == 2 { - head = splits[1] + if fields := strings.Fields(head); len(fields) == 2 { + head = fields[1] } else { + // In this case we are in "detached head" state + // see: https://git-scm.com/docs/git-checkout#_detached_head + // Additional check required to verify, that file contains commit hash + commitRe, _ := regexp.Compile("^([0-9a-f]{40})$") + if commit := commitRe.FindString(head); commit != "" && env.Commit == "" { + env.Commit = commit + } return env } if env.Commit == "" { env.Commit = readGitFile(head) } + env.Date = getDate(env.Commit) if env.Branch == "" { if head != "HEAD" { env.Branch = strings.TrimPrefix(head, "refs/heads/") @@ -107,6 +128,21 @@ func firstLine(s string) string { return strings.Split(s, "\n")[0] } +func getDate(commit string) string { + if commit == "" { + return "" + } + out := RunGit("show", "-s", "--format=%ct", commit) + if out == "" { + return "" + } + date, err := strconv.ParseInt(strings.TrimSpace(out), 10, 64) + if err != nil { + panic(fmt.Sprintf("failed to parse git commit date: %v", err)) + } + return time.Unix(date, 0).Format("20060102") +} + func applyEnvFlags(env Environment) Environment { if !flag.Parsed() { panic("you need to call flag.Parse before Env or LocalEnv") diff --git a/internal/build/util.go b/internal/build/util.go index a41ecfbed3a9..a1f4567776bf 100644 --- a/internal/build/util.go +++ b/internal/build/util.go @@ -68,13 +68,14 @@ func RunGit(args ...string) string { cmd := exec.Command("git", args...) var stdout, stderr bytes.Buffer cmd.Stdout, cmd.Stderr = &stdout, &stderr - if err := cmd.Run(); err == exec.ErrNotFound { - if !warnedAboutGit { - log.Println("Warning: can't find 'git' in PATH") - warnedAboutGit = true + if err := cmd.Run(); err != nil { + if e, ok := err.(*exec.Error); ok && e.Err == exec.ErrNotFound { + if !warnedAboutGit { + log.Println("Warning: can't find 'git' in PATH") + warnedAboutGit = true + } + return "" } - return "" - } else if err != nil { log.Fatal(strings.Join(cmd.Args, " "), ": ", err, "\n", stderr.String()) } return strings.TrimSpace(stdout.String()) @@ -143,41 +144,15 @@ func CopyFile(dst, src string, mode os.FileMode) { // so that go commands executed by build use the same version of Go as the 'host' that runs // build code. e.g. // -// /usr/lib/go-1.11/bin/go run build/ci.go ... +// /usr/lib/go-1.12.1/bin/go run build/ci.go ... // -// runs using go 1.11 and invokes go 1.11 tools from the same GOROOT. This is also important +// runs using go 1.12.1 and invokes go 1.12.1 tools from the same GOROOT. This is also important // because runtime.Version checks on the host should match the tools that are run. func GoTool(tool string, args ...string) *exec.Cmd { args = append([]string{tool}, args...) return exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), args...) } -// ExpandPackagesNoVendor expands a cmd/go import path pattern, skipping -// vendored packages. -func ExpandPackagesNoVendor(patterns []string) []string { - expand := false - for _, pkg := range patterns { - if strings.Contains(pkg, "...") { - expand = true - } - } - if expand { - cmd := GoTool("list", patterns...) - out, err := cmd.CombinedOutput() - if err != nil { - log.Fatalf("package listing failed: %v\n%s", err, string(out)) - } - var packages []string - for _, line := range strings.Split(string(out), "\n") { - if !strings.Contains(line, "/vendor/") { - packages = append(packages, strings.TrimSpace(line)) - } - } - return packages - } - return patterns -} - // UploadSFTP uploads files to a remote host using the sftp command line tool. // The destination host may be specified either as [user@]host[: or as a URI in // the form sftp://[user@]host[:port]. diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 8898ca041f4d..0d69b16df433 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -29,9 +29,11 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/accounts/scwallet" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" @@ -43,8 +45,7 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/util" + "github.com/tyler-smith/go-bip39" ) const ( @@ -191,13 +192,7 @@ func NewPublicAccountAPI(am *accounts.Manager) *PublicAccountAPI { // Accounts returns the collection of accounts this node manages func (s *PublicAccountAPI) Accounts() []common.Address { - addresses := make([]common.Address, 0) // return [] instead of nil if empty - for _, wallet := range s.am.Wallets() { - for _, account := range wallet.Accounts() { - addresses = append(addresses, account.Address) - } - } - return addresses + return s.am.Accounts() } // return genesis.json if available @@ -228,15 +223,9 @@ func NewPrivateAccountAPI(b Backend, nonceLock *AddrLocker) *PrivateAccountAPI { } } -// ListAccounts will return a list of addresses for accounts this node manages. +// listAccounts will return a list of addresses for accounts this node manages. func (s *PrivateAccountAPI) ListAccounts() []common.Address { - addresses := make([]common.Address, 0) // return [] instead of nil if empty - for _, wallet := range s.am.Wallets() { - for _, account := range wallet.Accounts() { - addresses = append(addresses, account.Address) - } - } - return addresses + return s.am.Accounts() } // rawWallet is a JSON representation of an accounts.Wallet interface, with its @@ -304,6 +293,9 @@ func (s *PrivateAccountAPI) DeriveAccount(url string, path string, pin *bool) (a func (s *PrivateAccountAPI) NewAccount(password string) (common.Address, error) { acc, err := fetchKeystore(s.am).NewAccount(password) if err == nil { + log.Info("Your new key was generated", "address", acc.Address) + log.Warn("Please backup your key file!", "path", acc.URL.Path) + log.Warn("Please remember your password!") return acc.Address, nil } return common.Address{}, err @@ -328,7 +320,14 @@ func (s *PrivateAccountAPI) ImportRawKey(privkey string, password string) (commo // UnlockAccount will unlock the account associated with the given address with // the given password for duration seconds. If duration is nil it will use a // default of 300 seconds. It returns an indication if the account was unlocked. -func (s *PrivateAccountAPI) UnlockAccount(addr common.Address, password string, duration *uint64) (bool, error) { +func (s *PrivateAccountAPI) UnlockAccount(ctx context.Context, addr common.Address, password string, duration *uint64) (bool, error) { + // When the API is exposed by external RPC(http, ws etc), unless the user + // explicitly specifies to allow the insecure account unlocking, otherwise + // it is disabled. + if s.b.ExtRPCEnabled() && !s.b.AccountManager().Config().InsecureUnlockAllowed { + return false, errors.New("account unlock with HTTP access is forbidden") + } + const max = uint64(time.Duration(math.MaxInt64) / time.Second) var d time.Duration if duration == nil { @@ -367,11 +366,7 @@ func (s *PrivateAccountAPI) signTransaction(ctx context.Context, args *SendTxArg // Assemble the transaction and sign with the wallet tx := args.toTransaction() - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - return wallet.SignTxWithPassphrase(account, passwd, tx, chainID) + return wallet.SignTxWithPassphrase(account, passwd, tx, s.b.ChainConfig().ChainID) } // SendTransaction will create a transaction from the given arguments and @@ -389,7 +384,7 @@ func (s *PrivateAccountAPI) SendTransaction(ctx context.Context, args SendTxArgs log.Warn("Failed transaction send attempt", "from", args.From, "to", args.To, "value", args.Value.ToInt(), "err", err) return common.Hash{}, err } - return submitTransaction(ctx, s.b, signed) + return SubmitTransaction(ctx, s.b, signed) } // SignTransaction will create a transaction from the given arguments and @@ -420,18 +415,6 @@ func (s *PrivateAccountAPI) SignTransaction(ctx context.Context, args SendTxArgs return &SignTransactionResult{data, signed}, nil } -// signHash is a helper function that calculates a hash for the given message that can be -// safely used to calculate a signature from. -// -// The hash is calulcated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). -// -// This gives context to the signed message and prevents signing of transactions. -func signHash(data []byte) []byte { - msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - return crypto.Keccak256([]byte(msg)) -} - // Sign calculates an Ethereum ECDSA signature for: // keccack256("\x19Ethereum Signed Message:\n" + len(message) + message)) // @@ -450,12 +433,12 @@ func (s *PrivateAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr c return nil, err } // Assemble sign the data with the wallet - signature, err := wallet.SignHashWithPassphrase(account, passwd, signHash(data)) + signature, err := wallet.SignTextWithPassphrase(account, passwd, data) if err != nil { log.Warn("Failed data sign attempt", "address", addr, "err", err) return nil, err } - signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + signature[crypto.RecoveryIDOffset] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper return signature, nil } @@ -470,15 +453,15 @@ func (s *PrivateAccountAPI) Sign(ctx context.Context, data hexutil.Bytes, addr c // // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_ecRecover func (s *PrivateAccountAPI) EcRecover(ctx context.Context, data, sig hexutil.Bytes) (common.Address, error) { - if len(sig) != 65 { - return common.Address{}, fmt.Errorf("signature must be 65 bytes long") + if len(sig) != crypto.SignatureLength { + return common.Address{}, fmt.Errorf("signature must be %d bytes long", crypto.SignatureLength) } - if sig[64] != 27 && sig[64] != 28 { + if sig[crypto.RecoveryIDOffset] != 27 && sig[crypto.RecoveryIDOffset] != 28 { return common.Address{}, fmt.Errorf("invalid Ethereum signature (V is not 27 or 28)") } - sig[64] -= 27 // Transform yellow paper V from 27/28 to 0/1 + sig[crypto.RecoveryIDOffset] -= 27 // Transform yellow paper V from 27/28 to 0/1 - rpk, err := crypto.SigToPub(signHash(data), sig) + rpk, err := crypto.SigToPub(accounts.TextHash(data), sig) if err != nil { return common.Address{}, err } @@ -491,6 +474,48 @@ func (s *PrivateAccountAPI) SignAndSendTransaction(ctx context.Context, args Sen return s.SendTransaction(ctx, args, passwd) } +// InitializeWallet initializes a new wallet at the provided URL, by generating and returning a new private key. +func (s *PrivateAccountAPI) InitializeWallet(ctx context.Context, url string) (string, error) { + wallet, err := s.am.Wallet(url) + if err != nil { + return "", err + } + + entropy, err := bip39.NewEntropy(256) + if err != nil { + return "", err + } + + mnemonic, err := bip39.NewMnemonic(entropy) + if err != nil { + return "", err + } + + seed := bip39.NewSeed(mnemonic, "") + + switch wallet := wallet.(type) { + case *scwallet.Wallet: + return mnemonic, wallet.Initialize(seed) + default: + return "", fmt.Errorf("Specified wallet does not support initialization") + } +} + +// Unpair deletes a pairing between wallet and geth. +func (s *PrivateAccountAPI) Unpair(ctx context.Context, url string, pin string) error { + wallet, err := s.am.Wallet(url) + if err != nil { + return err + } + + switch wallet := wallet.(type) { + case *scwallet.Wallet: + return wallet.Unpair([]byte(pin)) + default: + return fmt.Errorf("Specified wallet does not support pairing") + } +} + // PublicBlockChainAPI provides an API to access the Ethereum blockchain. // It offers only methods that operate on public data that is freely available to anyone. type PublicBlockChainAPI struct { @@ -502,6 +527,11 @@ func NewPublicBlockChainAPI(b Backend) *PublicBlockChainAPI { return &PublicBlockChainAPI{b} } +// ChainId returns the chainID value for transaction replay protection. +func (s *PublicBlockChainAPI) ChainId() *hexutil.Big { + return (*hexutil.Big)(s.b.ChainConfig().ChainID) +} + // BlockNumber returns the block number of the chain head. func (s *PublicBlockChainAPI) BlockNumber() hexutil.Uint64 { header, _ := s.b.HeaderByNumber(context.Background(), rpc.LatestBlockNumber) // latest header should always be available @@ -511,8 +541,8 @@ func (s *PublicBlockChainAPI) BlockNumber() hexutil.Uint64 { // GetBalance returns the amount of wei for the given address in the state of the // given block number. The rpc.LatestBlockNumber and rpc.PendingBlockNumber meta // block numbers are also allowed. -func (s *PublicBlockChainAPI) GetBalance(ctx context.Context, address common.Address, blockNr rpc.BlockNumber) (*hexutil.Big, error) { - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) +func (s *PublicBlockChainAPI) GetBalance(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (*hexutil.Big, error) { + state, _, err := s.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, err } @@ -536,8 +566,8 @@ type StorageResult struct { } // GetProof returns the Merkle-proof for a given account and optionally some storage keys. -func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Address, storageKeys []string, blockNr rpc.BlockNumber) (*AccountResult, error) { - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) +func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash) (*AccountResult, error) { + state, _, err := s.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, err } @@ -585,13 +615,43 @@ func (s *PublicBlockChainAPI) GetProof(ctx context.Context, address common.Addre }, state.Error() } -// GetBlockByNumber returns the requested block. When blockNr is -1 the chain head is returned. When fullTx is true all -// transactions in the block are returned in full detail, otherwise only the transaction hash is returned. -func (s *PublicBlockChainAPI) GetBlockByNumber(ctx context.Context, blockNr rpc.BlockNumber, fullTx bool) (map[string]interface{}, error) { - block, err := s.b.BlockByNumber(ctx, blockNr) - if block != nil { - response, err := s.rpcOutputBlock(block, true, fullTx) - if err == nil && blockNr == rpc.PendingBlockNumber { +// GetHeaderByNumber returns the requested canonical block header. +// * When blockNr is -1 the chain head is returned. +// * When blockNr is -2 the pending chain head is returned. +func (s *PublicBlockChainAPI) GetHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (map[string]interface{}, error) { + header, err := s.b.HeaderByNumber(ctx, number) + if header != nil && err == nil { + response := s.rpcMarshalHeader(header) + if number == rpc.PendingBlockNumber { + // Pending header need to nil out a few fields + for _, field := range []string{"hash", "nonce", "miner"} { + response[field] = nil + } + } + return response, err + } + return nil, err +} + +// GetHeaderByHash returns the requested header by hash. +func (s *PublicBlockChainAPI) GetHeaderByHash(ctx context.Context, hash common.Hash) map[string]interface{} { + header, _ := s.b.HeaderByHash(ctx, hash) + if header != nil { + return s.rpcMarshalHeader(header) + } + return nil +} + +// GetBlockByNumber returns the requested canonical block. +// * When blockNr is -1 the chain head is returned. +// * When blockNr is -2 the pending chain head is returned. +// * When fullTx is true all transactions in the block are returned, otherwise +// only the transaction hash is returned. +func (s *PublicBlockChainAPI) GetBlockByNumber(ctx context.Context, number rpc.BlockNumber, fullTx bool) (map[string]interface{}, error) { + block, err := s.b.BlockByNumber(ctx, number) + if block != nil && err == nil { + response, err := s.rpcMarshalBlock(block, true, fullTx) + if err == nil && number == rpc.PendingBlockNumber { // Pending blocks need to nil out a few fields for _, field := range []string{"hash", "nonce", "miner"} { response[field] = nil @@ -604,10 +664,10 @@ func (s *PublicBlockChainAPI) GetBlockByNumber(ctx context.Context, blockNr rpc. // GetBlockByHash returns the requested block. When fullTx is true all transactions in the block are returned in full // detail, otherwise only the transaction hash is returned. -func (s *PublicBlockChainAPI) GetBlockByHash(ctx context.Context, blockHash common.Hash, fullTx bool) (map[string]interface{}, error) { - block, err := s.b.GetBlock(ctx, blockHash) +func (s *PublicBlockChainAPI) GetBlockByHash(ctx context.Context, hash common.Hash, fullTx bool) (map[string]interface{}, error) { + block, err := s.b.BlockByHash(ctx, hash) if block != nil { - return s.rpcOutputBlock(block, true, fullTx) + return s.rpcMarshalBlock(block, true, fullTx) } return nil, err } @@ -623,7 +683,7 @@ func (s *PublicBlockChainAPI) GetUncleByBlockNumberAndIndex(ctx context.Context, return nil, nil } block = types.NewBlockWithHeader(uncles[index]) - return s.rpcOutputBlock(block, false, false) + return s.rpcMarshalBlock(block, false, false) } return nil, err } @@ -631,7 +691,7 @@ func (s *PublicBlockChainAPI) GetUncleByBlockNumberAndIndex(ctx context.Context, // GetUncleByBlockHashAndIndex returns the uncle block for the given block hash and index. When fullTx is true // all transactions in the block are returned in full detail, otherwise only the transaction hash is returned. func (s *PublicBlockChainAPI) GetUncleByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) (map[string]interface{}, error) { - block, err := s.b.GetBlock(ctx, blockHash) + block, err := s.b.BlockByHash(ctx, blockHash) if block != nil { uncles := block.Uncles() if index >= hexutil.Uint(len(uncles)) { @@ -639,7 +699,7 @@ func (s *PublicBlockChainAPI) GetUncleByBlockHashAndIndex(ctx context.Context, b return nil, nil } block = types.NewBlockWithHeader(uncles[index]) - return s.rpcOutputBlock(block, false, false) + return s.rpcMarshalBlock(block, false, false) } return nil, err } @@ -655,7 +715,7 @@ func (s *PublicBlockChainAPI) GetUncleCountByBlockNumber(ctx context.Context, bl // GetUncleCountByBlockHash returns number of uncles in the block for the given block hash func (s *PublicBlockChainAPI) GetUncleCountByBlockHash(ctx context.Context, blockHash common.Hash) *hexutil.Uint { - if block, _ := s.b.GetBlock(ctx, blockHash); block != nil { + if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { n := hexutil.Uint(len(block.Uncles())) return &n } @@ -663,8 +723,8 @@ func (s *PublicBlockChainAPI) GetUncleCountByBlockHash(ctx context.Context, bloc } // GetCode returns the code stored at the given address in the state for the given block number. -func (s *PublicBlockChainAPI) GetCode(ctx context.Context, address common.Address, blockNr rpc.BlockNumber) (hexutil.Bytes, error) { - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) +func (s *PublicBlockChainAPI) GetCode(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { + state, _, err := s.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, err } @@ -675,8 +735,8 @@ func (s *PublicBlockChainAPI) GetCode(ctx context.Context, address common.Addres // GetStorageAt returns the storage from the state at the given address, key and // block number. The rpc.LatestBlockNumber and rpc.PendingBlockNumber meta block // numbers are also allowed. -func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.Address, key string, blockNr rpc.BlockNumber) (hexutil.Bytes, error) { - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) +func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.Address, key string, blockNrOrHash rpc.BlockNumberOrHash) (hexutil.Bytes, error) { + state, _, err := s.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, err } @@ -686,41 +746,100 @@ func (s *PublicBlockChainAPI) GetStorageAt(ctx context.Context, address common.A // CallArgs represents the arguments for a call. type CallArgs struct { - From common.Address `json:"from"` + From *common.Address `json:"from"` To *common.Address `json:"to"` - Gas hexutil.Uint64 `json:"gas"` - GasPrice hexutil.Big `json:"gasPrice"` - Value hexutil.Big `json:"value"` - Data hexutil.Bytes `json:"data"` + Gas *hexutil.Uint64 `json:"gas"` + GasPrice *hexutil.Big `json:"gasPrice"` + Value *hexutil.Big `json:"value"` + Data *hexutil.Bytes `json:"data"` } -func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr rpc.BlockNumber, timeout time.Duration) ([]byte, uint64, bool, error) { +// account indicates the overriding fields of account during the execution of +// a message call. +// Note, state and stateDiff can't be specified at the same time. If state is +// set, message execution will only use the data in the given state. Otherwise +// if statDiff is set, all diff will be applied first and then execute the call +// message. +type account struct { + Nonce *hexutil.Uint64 `json:"nonce"` + Code *hexutil.Bytes `json:"code"` + Balance **hexutil.Big `json:"balance"` + State *map[common.Hash]common.Hash `json:"state"` + StateDiff *map[common.Hash]common.Hash `json:"stateDiff"` +} + +func DoCall(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides map[common.Address]account, vmCfg vm.Config, timeout time.Duration, globalGasCap *big.Int) ([]byte, uint64, bool, error) { defer func(start time.Time) { log.Debug("Executing EVM call finished", "runtime", time.Since(start)) }(time.Now()) - state, header, err := s.b.StateAndHeaderByNumber(ctx, blockNr) + state, header, err := b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, 0, false, err } // Set sender address or use a default if none specified - addr := args.From - if addr == (common.Address{}) { - if wallets := s.b.AccountManager().Wallets(); len(wallets) > 0 { + var addr common.Address + if args.From == nil { + if wallets := b.AccountManager().Wallets(); len(wallets) > 0 { if accounts := wallets[0].Accounts(); len(accounts) > 0 { addr = accounts[0].Address } } + } else { + addr = *args.From + } + // Override the fields of specified contracts before execution. + for addr, account := range overrides { + // Override account nonce. + if account.Nonce != nil { + state.SetNonce(addr, uint64(*account.Nonce)) + } + // Override account(contract) code. + if account.Code != nil { + state.SetCode(addr, *account.Code) + } + // Override account balance. + if account.Balance != nil { + state.SetBalance(addr, (*big.Int)(*account.Balance)) + } + if account.State != nil && account.StateDiff != nil { + return nil, 0, false, fmt.Errorf("account %s has both 'state' and 'stateDiff'", addr.Hex()) + } + // Replace entire state if caller requires. + if account.State != nil { + state.SetStorage(addr, *account.State) + } + // Apply state diff into specified accounts. + if account.StateDiff != nil { + for key, value := range *account.StateDiff { + state.SetState(addr, key, value) + } + } } // Set default gas & gas price if none were set - gas, gasPrice := uint64(args.Gas), args.GasPrice.ToInt() - if gas == 0 { - gas = math.MaxUint64 / 2 + gas := uint64(math.MaxUint64 / 2) + if args.Gas != nil { + gas = uint64(*args.Gas) } - if gasPrice.Sign() == 0 { - gasPrice = new(big.Int).SetUint64(defaultGasPrice) + if globalGasCap != nil && globalGasCap.Uint64() < gas { + log.Warn("Caller gas above allowance, capping", "requested", gas, "cap", globalGasCap) + gas = globalGasCap.Uint64() + } + gasPrice := new(big.Int).SetUint64(defaultGasPrice) + if args.GasPrice != nil { + gasPrice = args.GasPrice.ToInt() + } + + value := new(big.Int) + if args.Value != nil { + value = args.Value.ToInt() + } + + var data []byte + if args.Data != nil { + data = []byte(*args.Data) } // Create new call message - msg := types.NewMessage(addr, args.To, 0, args.Value.ToInt(), gas, gasPrice, args.Data, false) + msg := types.NewMessage(addr, args.To, 0, value, gas, gasPrice, data, false) // Setup context so it may be cancelled the call has completed // or, in case of unmetered gas, setup a context with a timeout. @@ -735,7 +854,7 @@ func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr defer cancel() // Get a new instance of the EVM. - evm, vmError, err := s.b.GetEVM(ctx, msg, state, header) + evm, vmError, err := b.GetEVM(ctx, msg, state, header) if err != nil { return nil, 0, false, err } @@ -753,42 +872,56 @@ func (s *PublicBlockChainAPI) doCall(ctx context.Context, args CallArgs, blockNr if err := vmError(); err != nil { return nil, 0, false, err } + // If the timer caused an abort, return an appropriate error message + if evm.Cancelled() { + return nil, 0, false, fmt.Errorf("execution aborted (timeout = %v)", timeout) + } return res, gas, failed, err } // Call executes the given transaction on the state for the given block number. -// It doesn't make and changes in the state/blockchain and is useful to execute and retrieve values. -func (s *PublicBlockChainAPI) Call(ctx context.Context, args CallArgs, blockNr rpc.BlockNumber) (hexutil.Bytes, error) { - result, _, _, err := s.doCall(ctx, args, blockNr, 5*time.Second) +// +// Additionally, the caller can specify a batch of contract for fields overriding. +// +// Note, this function doesn't make and changes in the state/blockchain and is +// useful to execute and retrieve values. +func (s *PublicBlockChainAPI) Call(ctx context.Context, args CallArgs, blockNrOrHash rpc.BlockNumberOrHash, overrides *map[common.Address]account) (hexutil.Bytes, error) { + var accounts map[common.Address]account + if overrides != nil { + accounts = *overrides + } + result, _, _, err := DoCall(ctx, s.b, args, blockNrOrHash, accounts, vm.Config{}, 5*time.Second, s.b.RPCGasCap()) return (hexutil.Bytes)(result), err } -// EstimateGas returns an estimate of the amount of gas needed to execute the -// given transaction against the current pending block. -func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (hexutil.Uint64, error) { +func DoEstimateGas(ctx context.Context, b Backend, args CallArgs, blockNrOrHash rpc.BlockNumberOrHash, gasCap *big.Int) (hexutil.Uint64, error) { // Binary search the gas requirement, as it may be higher than the amount used var ( lo uint64 = params.TxGas - 1 hi uint64 cap uint64 ) - if uint64(args.Gas) >= params.TxGas { - hi = uint64(args.Gas) + if args.Gas != nil && uint64(*args.Gas) >= params.TxGas { + hi = uint64(*args.Gas) } else { - // Retrieve the current pending block to act as the gas ceiling - block, err := s.b.BlockByNumber(ctx, rpc.PendingBlockNumber) + // Retrieve the block to act as the gas ceiling + block, err := b.BlockByNumberOrHash(ctx, blockNrOrHash) if err != nil { return 0, err } hi = block.GasLimit() } + if gasCap != nil && hi > gasCap.Uint64() { + log.Warn("Caller gas above allowance, capping", "requested", hi, "cap", gasCap) + hi = gasCap.Uint64() + } cap = hi // Create a helper to check if a gas allowance results in an executable transaction executable := func(gas uint64) bool { - args.Gas = hexutil.Uint64(gas) + args.Gas = (*hexutil.Uint64)(&gas) - _, _, failed, err := s.doCall(ctx, args, rpc.PendingBlockNumber, 0) + _, _, failed, err := DoCall(ctx, b, args, blockNrOrHash, nil, vm.Config{}, 0, gasCap) if err != nil || failed { return false } @@ -806,12 +939,19 @@ func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (h // Reject the transaction as invalid if it still fails at the highest allowance if hi == cap { if !executable(hi) { - return 0, fmt.Errorf("gas required exceeds allowance or always failing transaction") + return 0, fmt.Errorf("gas required exceeds allowance (%d) or always failing transaction", cap) } } return hexutil.Uint64(hi), nil } +// EstimateGas returns an estimate of the amount of gas needed to execute the +// given transaction against the current pending block. +func (s *PublicBlockChainAPI) EstimateGas(ctx context.Context, args CallArgs) (hexutil.Uint64, error) { + blockNrOrHash := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + return DoEstimateGas(ctx, s.b, args, blockNrOrHash, s.b.RPCGasCap()) +} + // ExecutionResult groups all structured logs emitted by the EVM // while replaying a transaction in debug mode as well as transaction // execution status, the amount of gas used and the return value @@ -836,7 +976,7 @@ type StructLogRes struct { Storage *map[string]string `json:"storage,omitempty"` } -// formatLogs formats EVM returned structured logs for json output +// FormatLogs formats EVM returned structured logs for json output func FormatLogs(logs []vm.StructLog) []StructLogRes { formatted := make([]StructLogRes, len(logs)) for index, trace := range logs { @@ -873,14 +1013,11 @@ func FormatLogs(logs []vm.StructLog) []StructLogRes { return formatted } -// RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are -// returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain -// transaction hashes. -func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { - head := b.Header() // copies the header once - fields := map[string]interface{}{ +// RPCMarshalHeader converts the given header to the RPC output . +func RPCMarshalHeader(head *types.Header) map[string]interface{} { + return map[string]interface{}{ "number": (*hexutil.Big)(head.Number), - "hash": b.Hash(), + "hash": head.Hash(), "parentHash": head.ParentHash, "nonce": head.Nonce, "mixHash": head.MixDigest, @@ -891,16 +1028,24 @@ func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]inter "difficulty": (*hexutil.Big)(head.Difficulty), "extraData": hexutil.Bytes(head.Extra), "rewards": hexutil.Bytes(head.Rewards), - "size": hexutil.Uint64(b.Size()), + "size": hexutil.Uint64(head.Size()), "gasLimit": hexutil.Uint64(head.GasLimit), "gasUsed": hexutil.Uint64(head.GasUsed), "fees": (*hexutil.Big)(head.Fees), - "timestamp": (*hexutil.Big)(head.Time), + "timestamp": hexutil.Uint64(head.Time), "transactionsRoot": head.TxHash, "receiptsRoot": head.ReceiptHash, "minerNodeId": hexutil.Bytes(head.MinerNodeId), "minerNodeSig": hexutil.Bytes(head.MinerNodeSig), } +} + +// RPCMarshalBlock converts the given block to the RPC output which depends on fullTx. If inclTx is true transactions are +// returned. When fullTx is true the returned block contains full transaction details, otherwise it will only contain +// transaction hashes. +func RPCMarshalBlock(block *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { + fields := RPCMarshalHeader(block.Header()) + fields["size"] = hexutil.Uint64(block.Size()) if inclTx { formatTx := func(tx *types.Transaction) (interface{}, error) { @@ -908,10 +1053,10 @@ func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]inter } if fullTx { formatTx = func(tx *types.Transaction) (interface{}, error) { - return newRPCTransactionFromBlockHash(b, tx.Hash()), nil + return newRPCTransactionFromBlockHash(block, tx.Hash()), nil } } - txs := b.Transactions() + txs := block.Transactions() transactions := make([]interface{}, len(txs)) var err error for i, tx := range txs { @@ -921,8 +1066,7 @@ func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]inter } fields["transactions"] = transactions } - - uncles := b.Uncles() + uncles := block.Uncles() uncleHashes := make([]common.Hash, len(uncles)) for i, uncle := range uncles { uncleHashes[i] = uncle.Hash() @@ -932,9 +1076,17 @@ func RPCMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]inter return fields, nil } -// rpcOutputBlock uses the generalized output filler, then adds the total difficulty field, which requires +// rpcMarshalHeader uses the generalized output filler, then adds the total difficulty field, which requires // a `PublicBlockchainAPI`. -func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { +func (s *PublicBlockChainAPI) rpcMarshalHeader(header *types.Header) map[string]interface{} { + fields := RPCMarshalHeader(header) + fields["totalDifficulty"] = (*hexutil.Big)(s.b.GetTd(header.Hash())) + return fields +} + +// rpcMarshalBlock uses the generalized output filler, then adds the total difficulty field, which requires +// a `PublicBlockchainAPI`. +func (s *PublicBlockChainAPI) rpcMarshalBlock(b *types.Block, inclTx bool, fullTx bool) (map[string]interface{}, error) { fields, err := RPCMarshalBlock(b, inclTx, fullTx) if err != nil { return nil, err @@ -945,7 +1097,7 @@ func (s *PublicBlockChainAPI) rpcOutputBlock(b *types.Block, inclTx bool, fullTx // RPCTransaction represents a transaction that will serialize to the RPC representation of a transaction type RPCTransaction struct { - BlockHash common.Hash `json:"blockHash"` + BlockHash *common.Hash `json:"blockHash"` BlockNumber *hexutil.Big `json:"blockNumber"` From common.Address `json:"from"` Gas hexutil.Uint64 `json:"gas"` @@ -954,7 +1106,7 @@ type RPCTransaction struct { Input hexutil.Bytes `json:"input"` Nonce hexutil.Uint64 `json:"nonce"` To *common.Address `json:"to"` - TransactionIndex hexutil.Uint `json:"transactionIndex"` + TransactionIndex *hexutil.Uint64 `json:"transactionIndex"` Value *hexutil.Big `json:"value"` V *hexutil.Big `json:"v"` R *hexutil.Big `json:"r"` @@ -985,9 +1137,9 @@ func newRPCTransaction(tx *types.Transaction, blockHash common.Hash, blockNumber S: (*hexutil.Big)(s), } if blockHash != (common.Hash{}) { - result.BlockHash = blockHash + result.BlockHash = &blockHash result.BlockNumber = (*hexutil.Big)(new(big.Int).SetUint64(blockNumber)) - result.TransactionIndex = hexutil.Uint(index) + result.TransactionIndex = (*hexutil.Uint64)(&index) } return result } @@ -1048,7 +1200,7 @@ func (s *PublicTransactionPoolAPI) GetBlockTransactionCountByNumber(ctx context. // GetBlockTransactionCountByHash returns the number of transactions in the block with the given hash. func (s *PublicTransactionPoolAPI) GetBlockTransactionCountByHash(ctx context.Context, blockHash common.Hash) *hexutil.Uint { - if block, _ := s.b.GetBlock(ctx, blockHash); block != nil { + if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { n := hexutil.Uint(len(block.Transactions())) return &n } @@ -1065,7 +1217,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionByBlockNumberAndIndex(ctx conte // GetTransactionByBlockHashAndIndex returns the transaction for the given block hash and index. func (s *PublicTransactionPoolAPI) GetTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) *RPCTransaction { - if block, _ := s.b.GetBlock(ctx, blockHash); block != nil { + if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { return newRPCTransactionFromBlockIndex(block, uint64(index)) } return nil @@ -1081,16 +1233,16 @@ func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockNumberAndIndex(ctx co // GetRawTransactionByBlockHashAndIndex returns the bytes of the transaction for the given block hash and index. func (s *PublicTransactionPoolAPI) GetRawTransactionByBlockHashAndIndex(ctx context.Context, blockHash common.Hash, index hexutil.Uint) hexutil.Bytes { - if block, _ := s.b.GetBlock(ctx, blockHash); block != nil { + if block, _ := s.b.BlockByHash(ctx, blockHash); block != nil { return newRPCRawTransactionFromBlockIndex(block, uint64(index)) } return nil } // GetTransactionCount returns the number of transactions the given address has sent for the given block number -func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, address common.Address, blockNr rpc.BlockNumber) (*hexutil.Uint64, error) { +func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, address common.Address, blockNrOrHash rpc.BlockNumberOrHash) (*hexutil.Uint64, error) { // Ask transaction pool for the nonce which includes pending transactions - if blockNr == rpc.PendingBlockNumber { + if blockNr, ok := blockNrOrHash.Number(); ok && blockNr == rpc.PendingBlockNumber { nonce, err := s.b.GetPoolNonce(ctx, address) if err != nil { return nil, err @@ -1098,7 +1250,7 @@ func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, addr return (*hexutil.Uint64)(&nonce), nil } // Resolve block number and use its state to ask for the nonce - state, _, err := s.b.StateAndHeaderByNumber(ctx, blockNr) + state, _, err := s.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) if state == nil || err != nil { return nil, err } @@ -1107,25 +1259,32 @@ func (s *PublicTransactionPoolAPI) GetTransactionCount(ctx context.Context, addr } // GetTransactionByHash returns the transaction for the given hash -func (s *PublicTransactionPoolAPI) GetTransactionByHash(ctx context.Context, hash common.Hash) *RPCTransaction { +func (s *PublicTransactionPoolAPI) GetTransactionByHash(ctx context.Context, hash common.Hash) (*RPCTransaction, error) { // Try to return an already finalized transaction - if tx, blockHash, blockNumber, index := rawdb.ReadTransaction(s.b.ChainDb(), hash); tx != nil { - return newRPCTransaction(tx, blockHash, blockNumber, index) + tx, blockHash, blockNumber, index, err := s.b.GetTransaction(ctx, hash) + if err != nil { + return nil, err + } + if tx != nil { + return newRPCTransaction(tx, blockHash, blockNumber, index), nil } // No finalized transaction, try to retrieve it from the pool if tx := s.b.GetPoolTransaction(hash); tx != nil { - return newRPCPendingTransaction(tx) + return newRPCPendingTransaction(tx), nil } + // Transaction unknown, return as such - return nil + return nil, nil } // GetRawTransactionByHash returns the bytes of the transaction for the given hash. func (s *PublicTransactionPoolAPI) GetRawTransactionByHash(ctx context.Context, hash common.Hash) (hexutil.Bytes, error) { - var tx *types.Transaction - // Retrieve a finalized transaction, or a pooled otherwise - if tx, _, _, _ = rawdb.ReadTransaction(s.b.ChainDb(), hash); tx == nil { + tx, _, _, _, err := s.b.GetTransaction(ctx, hash) + if err != nil { + return nil, err + } + if tx == nil { if tx = s.b.GetPoolTransaction(hash); tx == nil { // Transaction not found anywhere, abort return nil, nil @@ -1196,11 +1355,7 @@ func (s *PublicTransactionPoolAPI) sign(addr common.Address, tx *types.Transacti return nil, err } // Request the wallet to sign the transaction - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - return wallet.SignTx(account, tx, chainID) + return wallet.SignTx(account, tx, s.b.ChainConfig().ChainID) } // SendTxArgs represents the arguments to sumbit a new transaction into the transaction pool. @@ -1219,10 +1374,6 @@ type SendTxArgs struct { // setDefaults is a helper function that fills in default values for unspecified tx fields. func (args *SendTxArgs) setDefaults(ctx context.Context, b Backend) error { - if args.Gas == nil { - args.Gas = new(hexutil.Uint64) - *(*uint64)(args.Gas) = 90000 - } if args.GasPrice == nil { price, err := b.SuggestPrice(ctx) if err != nil { @@ -1255,15 +1406,38 @@ func (args *SendTxArgs) setDefaults(ctx context.Context, b Backend) error { return errors.New(`contract creation without any data provided`) } } + // Estimate the gas usage if necessary. + if args.Gas == nil { + // For backwards-compatibility reason, we try both input and data + // but input is preferred. + input := args.Input + if input == nil { + input = args.Data + } + callArgs := CallArgs{ + From: &args.From, // From shouldn't be nil + To: args.To, + GasPrice: args.GasPrice, + Value: args.Value, + Data: input, + } + pendingBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.PendingBlockNumber) + estimated, err := DoEstimateGas(ctx, b, callArgs, pendingBlockNr, b.RPCGasCap()) + if err != nil { + return err + } + args.Gas = &estimated + log.Trace("Estimate gas usage automatically", "gas", args.Gas) + } return nil } func (args *SendTxArgs) toTransaction() *types.Transaction { var input []byte - if args.Data != nil { - input = *args.Data - } else if args.Input != nil { + if args.Input != nil { input = *args.Input + } else if args.Data != nil { + input = *args.Data } if args.To == nil { return types.NewContractCreation(uint64(*args.Nonce), (*big.Int)(args.Value), uint64(*args.Gas), (*big.Int)(args.GasPrice), input) @@ -1271,8 +1445,8 @@ func (args *SendTxArgs) toTransaction() *types.Transaction { return types.NewTransaction(uint64(*args.Nonce), *args.To, (*big.Int)(args.Value), uint64(*args.Gas), (*big.Int)(args.GasPrice), input) } -// submitTransaction is a helper function that submits tx to txPool and logs a message. -func submitTransaction(ctx context.Context, b Backend, tx *types.Transaction) (common.Hash, error) { +// SubmitTransaction is a helper function that submits tx to txPool and logs a message. +func SubmitTransaction(ctx context.Context, b Backend, tx *types.Transaction) (common.Hash, error) { if err := b.SendTx(ctx, tx); err != nil { return common.Hash{}, err } @@ -1293,7 +1467,6 @@ func submitTransaction(ctx context.Context, b Backend, tx *types.Transaction) (c // SendTransaction creates a transaction for the given argument, sign it and submit it to the // transaction pool. func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args SendTxArgs) (common.Hash, error) { - // Look up the wallet containing the requested signer account := accounts.Account{Address: args.From} @@ -1316,15 +1489,27 @@ func (s *PublicTransactionPoolAPI) SendTransaction(ctx context.Context, args Sen // Assemble the transaction and sign with the wallet tx := args.toTransaction() - var chainID *big.Int - if config := s.b.ChainConfig(); config.IsEIP155(s.b.CurrentBlock().Number()) { - chainID = config.ChainID - } - signed, err := wallet.SignTx(account, tx, chainID) + signed, err := wallet.SignTx(account, tx, s.b.ChainConfig().ChainID) if err != nil { return common.Hash{}, err } - return submitTransaction(ctx, s.b, signed) + return SubmitTransaction(ctx, s.b, signed) +} + +// FillTransaction fills the defaults (nonce, gas, gasPrice) on a given unsigned transaction, +// and returns it to the caller for further processing (signing + broadcast) +func (s *PublicTransactionPoolAPI) FillTransaction(ctx context.Context, args SendTxArgs) (*SignTransactionResult, error) { + // Set some sanity defaults and terminate on failure + if err := args.setDefaults(ctx, s.b); err != nil { + return nil, err + } + // Assemble the transaction and obtain rlp + tx := args.toTransaction() + data, err := rlp.EncodeToBytes(tx) + if err != nil { + return nil, err + } + return &SignTransactionResult{data, tx}, nil } // SendRawTransaction will add the signed transaction to the transaction pool. @@ -1334,7 +1519,7 @@ func (s *PublicTransactionPoolAPI) SendRawTransaction(ctx context.Context, encod if err := rlp.DecodeBytes(encodedTx, tx); err != nil { return common.Hash{}, err } - return submitTransaction(ctx, s.b, tx) + return SubmitTransaction(ctx, s.b, tx) } // SendRawTransactions will add the signed transactions to the transaction pool. @@ -1347,7 +1532,7 @@ func (s *PublicTransactionPoolAPI) SendRawTransactions(ctx context.Context, enco hashes = append(hashes, common.Hash{}) continue } - hash, err := submitTransaction(ctx, s.b, tx) + hash, err := SubmitTransaction(ctx, s.b, tx) if err == nil { hashes = append(hashes, hash) } else { @@ -1375,7 +1560,7 @@ func (s *PublicTransactionPoolAPI) Sign(addr common.Address, data hexutil.Bytes) return nil, err } // Sign the requested hash with the wallet - signature, err := wallet.SignHash(account, signHash(data)) + signature, err := wallet.SignText(account, data) if err == nil { signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper } @@ -1511,6 +1696,45 @@ func (api *PublicDebugAPI) GetBlockRlp(ctx context.Context, number uint64) (stri return fmt.Sprintf("%x", encoded), nil } +// TestSignCliqueBlock fetches the given block number, and attempts to sign it as a clique header with the +// given address, returning the address of the recovered signature +// +// This is a temporary method to debug the externalsigner integration, +// TODO: Remove this method when the integration is mature +func (api *PublicDebugAPI) TestSignCliqueBlock(ctx context.Context, address common.Address, number uint64) (common.Address, error) { + block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) + if block == nil { + return common.Address{}, fmt.Errorf("block #%d not found", number) + } + header := block.Header() + header.Extra = make([]byte, 32+65) + encoded := clique.CliqueRLP(header) + + // Look up the wallet containing the requested signer + account := accounts.Account{Address: address} + wallet, err := api.b.AccountManager().Find(account) + if err != nil { + return common.Address{}, err + } + + signature, err := wallet.SignData(account, accounts.MimetypeClique, encoded) + if err != nil { + return common.Address{}, err + } + sealHash := clique.SealHash(header).Bytes() + log.Info("test signing of clique block", + "Sealhash", fmt.Sprintf("%x", sealHash), + "signature", fmt.Sprintf("%x", signature)) + pubkey, err := crypto.Ecrecover(sealHash, signature) + if err != nil { + return common.Address{}, err + } + var signer common.Address + copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) + + return signer, nil +} + // PrintBlock retrieves a block and returns its pretty printed form. func (api *PublicDebugAPI) PrintBlock(ctx context.Context, number uint64) (string, error) { block, _ := api.b.BlockByNumber(ctx, rpc.BlockNumber(number)) @@ -1541,33 +1765,22 @@ func NewPrivateDebugAPI(b Backend) *PrivateDebugAPI { return &PrivateDebugAPI{b: b} } -// ChaindbProperty returns leveldb properties of the chain database. +// ChaindbProperty returns leveldb properties of the key-value database. func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) { - ldb, ok := api.b.ChainDb().(interface { - LDB() *leveldb.DB - }) - if !ok { - return "", fmt.Errorf("chaindbProperty does not work for memory databases") - } if property == "" { property = "leveldb.stats" } else if !strings.HasPrefix(property, "leveldb.") { property = "leveldb." + property } - return ldb.LDB().GetProperty(property) + return api.b.ChainDb().Stat(property) } +// ChaindbCompact flattens the entire key-value database into a single level, +// removing all unused slots and merging all keys. func (api *PrivateDebugAPI) ChaindbCompact() error { - ldb, ok := api.b.ChainDb().(interface { - LDB() *leveldb.DB - }) - if !ok { - return fmt.Errorf("chaindbCompact does not work for memory databases") - } for b := byte(0); b < 255; b++ { log.Info("Compacting chain database", "range", fmt.Sprintf("0x%0.2X-0x%0.2X", b, b+1)) - err := ldb.LDB().CompactRange(util.Range{Start: []byte{b}, Limit: []byte{b + 1}}) - if err != nil { + if err := api.b.ChainDb().Compact([]byte{b}, []byte{b + 1}); err != nil { log.Error("Database compaction failed", "err", err) return err } diff --git a/internal/ethapi/backend.go b/internal/ethapi/backend.go index e23ee03b1555..73b6c89ceaaf 100644 --- a/internal/ethapi/backend.go +++ b/internal/ethapi/backend.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/bloombits" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -44,22 +45,29 @@ type Backend interface { ChainDb() ethdb.Database EventMux() *event.TypeMux AccountManager() *accounts.Manager + ExtRPCEnabled() bool + RPCGasCap() *big.Int // global gas cap for eth_call over rpc: DoS protection - // BlockChain API + // Blockchain API SetHead(number uint64) - HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) - BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) - StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error) - GetBlock(ctx context.Context, blockHash common.Hash) (*types.Block, error) - GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error) - GetTd(blockHash common.Hash) *big.Int + HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) + HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) + HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error) + BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) + BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) + BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error) + StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) + StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) + GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) + GetTd(hash common.Hash) *big.Int GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header) (*vm.EVM, func() error, error) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription - // TxPool API + // Transaction pool API SendTx(ctx context.Context, signedTx *types.Transaction) error + GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) GetPoolTransactions() (types.Transactions, error) GetPoolTransaction(txHash common.Hash) *types.Transaction GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) @@ -67,6 +75,13 @@ type Backend interface { TxPoolContent() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) SubscribeNewTxsEvent(chan<- core.NewTxsEvent) event.Subscription + // Filter API + BloomStatus() (uint64, uint64) + GetLogs(ctx context.Context, blockHash common.Hash) ([][]*types.Log, error) + ServiceFilter(ctx context.Context, session *bloombits.MatcherSession) + SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription + SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription + ChainConfig() *params.ChainConfig CurrentBlock() *types.Block } diff --git a/internal/jsre/deps/web3.js b/internal/jsre/deps/web3.js index 5421961073ac..471d951d9f81 100644 --- a/internal/jsre/deps/web3.js +++ b/internal/jsre/deps/web3.js @@ -2231,7 +2231,7 @@ var toTwosComplement = function (number) { * Checks if the given string is strictly an address * * @method isStrictAddress - * @param {String} address the given HEX adress + * @param {String} address the given HEX address * @return {Boolean} */ var isStrictAddress = function (address) { @@ -2242,7 +2242,7 @@ var isStrictAddress = function (address) { * Checks if the given string is an address * * @method isAddress - * @param {String} address the given HEX adress + * @param {String} address the given HEX address * @return {Boolean} */ var isAddress = function (address) { @@ -2262,7 +2262,7 @@ var isAddress = function (address) { * Checks if the given string is a checksummed address * * @method isChecksumAddress - * @param {String} address the given HEX adress + * @param {String} address the given HEX address * @return {Boolean} */ var isChecksumAddress = function (address) { @@ -2285,7 +2285,7 @@ var isChecksumAddress = function (address) { * Makes a checksum address * * @method toChecksumAddress - * @param {String} address the given HEX adress + * @param {String} address the given HEX address * @return {String} */ var toChecksumAddress = function (address) { @@ -3003,7 +3003,7 @@ var ContractFactory = function (eth, abi) { if (callback) { - // wait for the contract address adn check if the code was deployed + // wait for the contract address and check if the code was deployed this.eth.sendTransaction(options, function (err, hash) { if (err) { callback(err); @@ -6743,7 +6743,7 @@ var transferToAddress = function (eth, from, to, value, callback) { * @method deposit * @param {String} from * @param {String} to - * @param {Value} value to be transfered + * @param {Value} value to be transferred * @param {String} client unique identifier * @param {Function} callback, callback */ diff --git a/internal/jsre/jsre.go b/internal/jsre/jsre.go index b06b8e6281c4..51e186525e04 100644 --- a/internal/jsre/jsre.go +++ b/internal/jsre/jsre.go @@ -32,8 +32,8 @@ import ( ) var ( - BigNumber_JS = deps.MustAsset("bignumber.js") - Web3_JS = deps.MustAsset("web3.js") + BignumberJs = deps.MustAsset("bignumber.js") + Web3Js = deps.MustAsset("web3.js") ) /* diff --git a/swarm/fuse/swarmfs_fallback.go b/internal/testlog/testlog.go similarity index 53% rename from swarm/fuse/swarmfs_fallback.go rename to internal/testlog/testlog.go index 4864c8689c27..c5a6114d16aa 100644 --- a/swarm/fuse/swarmfs_fallback.go +++ b/internal/testlog/testlog.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,38 +14,33 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !linux,!darwin,!freebsd - -package fuse +// Package testlog provides a log handler for unit tests. +package testlog import ( - "errors" -) + "testing" -var errNoFUSE = errors.New("FUSE is not supported on this platform") - -func isFUSEUnsupportedError(err error) bool { - return err == errNoFUSE -} - -type MountInfo struct { - MountPoint string - StartManifest string - LatestManifest string -} + "github.com/ethereum/go-ethereum/log" +) -func (self *SwarmFS) Mount(mhash, mountpoint string) (*MountInfo, error) { - return nil, errNoFUSE +// Logger returns a logger which logs to the unit test log of t. +func Logger(t *testing.T, level log.Lvl) log.Logger { + l := log.New() + l.SetHandler(Handler(t, level)) + return l } -func (self *SwarmFS) Unmount(mountpoint string) (bool, error) { - return false, errNoFUSE +// Handler returns a log handler which logs to the unit test log of t. +func Handler(t *testing.T, level log.Lvl) log.Handler { + return log.LvlFilterHandler(level, &handler{t, log.TerminalFormat(false)}) } -func (self *SwarmFS) Listmounts() ([]*MountInfo, error) { - return nil, errNoFUSE +type handler struct { + t *testing.T + fmt log.Format } -func (self *SwarmFS) Stop() error { +func (h *handler) Log(r *log.Record) error { + h.t.Logf("%s", h.fmt.Format(r)) return nil } diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 02ad5ef043c8..a0e7a5460c28 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -18,23 +18,24 @@ package web3ext var Modules = map[string]string{ - "accounting": Accounting_JS, - "admin": Admin_JS, - "chequebook": Chequebook_JS, - "clique": Clique_JS, - "ethash": Ethash_JS, - "debug": Debug_JS, - "eth": Eth_JS, - "miner": Miner_JS, - "net": Net_JS, - "personal": Personal_JS, - "rpc": RPC_JS, - "shh": Shh_JS, - "swarmfs": SWARMFS_JS, - "txpool": TxPool_JS, + "accounting": AccountingJs, + "admin": AdminJs, + "chequebook": ChequebookJs, + "clique": CliqueJs, + "ethash": EthashJs, + "debug": DebugJs, + "eth": EthJs, + "miner": MinerJs, + "net": NetJs, + "personal": PersonalJs, + "rpc": RpcJs, + "shh": ShhJs, + "swarmfs": SwarmfsJs, + "txpool": TxpoolJs, + "les": LESJs, } -const Chequebook_JS = ` +const ChequebookJs = ` web3._extend({ property: 'chequebook', methods: [ @@ -65,7 +66,7 @@ web3._extend({ }); ` -const Clique_JS = ` +const CliqueJs = ` web3._extend({ property: 'clique', methods: [ @@ -111,7 +112,7 @@ web3._extend({ }); ` -const Ethash_JS = ` +const EthashJs = ` web3._extend({ property: 'ethash', methods: [ @@ -139,7 +140,7 @@ web3._extend({ }); ` -const Admin_JS = ` +const AdminJs = ` web3._extend({ property: 'admin', methods: [ @@ -281,7 +282,7 @@ web3._extend({ }); ` -const Debug_JS = ` +const DebugJs = ` web3._extend({ property: 'debug', methods: [ @@ -295,6 +296,12 @@ web3._extend({ call: 'debug_getBlockRlp', params: 1 }), + new web3._extend.Method({ + name: 'testSignCliqueBlock', + call: 'debug_testSignCliqueBlock', + params: 2, + inputFormatters: [web3._extend.formatters.inputAddressFormatter, null], + }), new web3._extend.Method({ name: 'setHead', call: 'debug_setHead', @@ -320,11 +327,6 @@ web3._extend({ name: 'chaindbCompact', call: 'debug_chaindbCompact', }), - new web3._extend.Method({ - name: 'metrics', - call: 'debug_metrics', - params: 1 - }), new web3._extend.Method({ name: 'verbosity', call: 'debug_verbosity', @@ -522,7 +524,7 @@ web3._extend({ }); ` -const Eth_JS = ` +const EthJs = ` web3._extend({ property: 'eth', methods: [ @@ -555,6 +557,32 @@ web3._extend({ params: 1, inputFormatter: [web3._extend.formatters.inputTransactionFormatter] }), + new web3._extend.Method({ + name: 'fillTransaction', + call: 'eth_fillTransaction', + params: 1, + inputFormatter: [web3._extend.formatters.inputTransactionFormatter] + }), + new web3._extend.Method({ + name: 'getHeaderByNumber', + call: 'eth_getHeaderByNumber', + params: 1 + }), + new web3._extend.Method({ + name: 'getHeaderByHash', + call: 'eth_getHeaderByHash', + params: 1 + }), + new web3._extend.Method({ + name: 'getBlockByNumber', + call: 'eth_getBlockByNumber', + params: 2 + }), + new web3._extend.Method({ + name: 'getBlockByHash', + call: 'eth_getBlockByHash', + params: 2 + }), new web3._extend.Method({ name: 'getRawTransaction', call: 'eth_getRawTransactionByHash', @@ -592,7 +620,7 @@ web3._extend({ }); ` -const Miner_JS = ` +const MinerJs = ` web3._extend({ property: 'miner', methods: [ @@ -646,7 +674,7 @@ web3._extend({ }); ` -const Net_JS = ` +const NetJs = ` web3._extend({ property: 'net', methods: [], @@ -659,7 +687,7 @@ web3._extend({ }); ` -const Personal_JS = ` +const PersonalJs = ` web3._extend({ property: 'personal', methods: [ @@ -695,6 +723,16 @@ web3._extend({ params: 2, inputFormatter: [web3._extend.formatters.inputTransactionFormatter, null] }), + new web3._extend.Method({ + name: 'unpair', + call: 'personal_unpair', + params: 2 + }), + new web3._extend.Method({ + name: 'initializeWallet', + call: 'personal_initializeWallet', + params: 1 + }) ], properties: [ new web3._extend.Property({ @@ -705,7 +743,7 @@ web3._extend({ }) ` -const RPC_JS = ` +const RpcJs = ` web3._extend({ property: 'rpc', methods: [], @@ -718,7 +756,7 @@ web3._extend({ }); ` -const Shh_JS = ` +const ShhJs = ` web3._extend({ property: 'shh', methods: [ @@ -738,7 +776,7 @@ web3._extend({ }); ` -const SWARMFS_JS = ` +const SwarmfsJs = ` web3._extend({ property: 'swarmfs', methods: @@ -762,7 +800,7 @@ web3._extend({ }); ` -const TxPool_JS = ` +const TxpoolJs = ` web3._extend({ property: 'txpool', methods: [], @@ -789,7 +827,7 @@ web3._extend({ }); ` -const Accounting_JS = ` +const AccountingJs = ` web3._extend({ property: 'accounting', methods: [ @@ -832,3 +870,28 @@ web3._extend({ ] }); ` + +const LESJs = ` +web3._extend({ + property: 'les', + methods: + [ + new web3._extend.Method({ + name: 'getCheckpoint', + call: 'les_getCheckpoint', + params: 1 + }), + ], + properties: + [ + new web3._extend.Property({ + name: 'latestCheckpoint', + getter: 'les_latestCheckpoint' + }), + new web3._extend.Property({ + name: 'checkpointContractAddress', + getter: 'les_getCheckpointContractAddress' + }), + ] +}); +` diff --git a/les/api.go b/les/api.go new file mode 100644 index 000000000000..bbef771f0445 --- /dev/null +++ b/les/api.go @@ -0,0 +1,80 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "errors" + + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var ( + errNoCheckpoint = errors.New("no local checkpoint provided") + errNotActivated = errors.New("checkpoint registrar is not activated") +) + +// PrivateLightAPI provides an API to access the LES light server or light client. +type PrivateLightAPI struct { + backend *lesCommons +} + +// NewPrivateLightAPI creates a new LES service API. +func NewPrivateLightAPI(backend *lesCommons) *PrivateLightAPI { + return &PrivateLightAPI{backend: backend} +} + +// LatestCheckpoint returns the latest local checkpoint package. +// +// The checkpoint package consists of 4 strings: +// result[0], hex encoded latest section index +// result[1], 32 bytes hex encoded latest section head hash +// result[2], 32 bytes hex encoded latest section canonical hash trie root hash +// result[3], 32 bytes hex encoded latest section bloom trie root hash +func (api *PrivateLightAPI) LatestCheckpoint() ([4]string, error) { + var res [4]string + cp := api.backend.latestLocalCheckpoint() + if cp.Empty() { + return res, errNoCheckpoint + } + res[0] = hexutil.EncodeUint64(cp.SectionIndex) + res[1], res[2], res[3] = cp.SectionHead.Hex(), cp.CHTRoot.Hex(), cp.BloomRoot.Hex() + return res, nil +} + +// GetLocalCheckpoint returns the specific local checkpoint package. +// +// The checkpoint package consists of 3 strings: +// result[0], 32 bytes hex encoded latest section head hash +// result[1], 32 bytes hex encoded latest section canonical hash trie root hash +// result[2], 32 bytes hex encoded latest section bloom trie root hash +func (api *PrivateLightAPI) GetCheckpoint(index uint64) ([3]string, error) { + var res [3]string + cp := api.backend.localCheckpoint(index) + if cp.Empty() { + return res, errNoCheckpoint + } + res[0], res[1], res[2] = cp.SectionHead.Hex(), cp.CHTRoot.Hex(), cp.BloomRoot.Hex() + return res, nil +} + +// GetCheckpointContractAddress returns the contract contract address in hex format. +func (api *PrivateLightAPI) GetCheckpointContractAddress() (string, error) { + if api.backend.oracle == nil { + return "", errNotActivated + } + return api.backend.oracle.config.Address.Hex(), nil +} diff --git a/les/api_backend.go b/les/api_backend.go index 753139623526..e01e1be98bd2 100644 --- a/les/api_backend.go +++ b/les/api_backend.go @@ -18,6 +18,7 @@ package les import ( "context" + "errors" "math/big" "github.com/ethereum/go-ethereum/accounts" @@ -39,8 +40,9 @@ import ( ) type LesApiBackend struct { - eth *LightEthereum - gpo *gasprice.Oracle + extRPCEnabled bool + eth *LightEthereum + gpo *gasprice.Oracle } func (b *LesApiBackend) ChainConfig() *params.ChainConfig { @@ -52,39 +54,99 @@ func (b *LesApiBackend) CurrentBlock() *types.Block { } func (b *LesApiBackend) SetHead(number uint64) { - b.eth.protocolManager.downloader.Cancel() + b.eth.handler.downloader.Cancel() b.eth.blockchain.SetHead(number) } -func (b *LesApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error) { - if blockNr == rpc.LatestBlockNumber || blockNr == rpc.PendingBlockNumber { +func (b *LesApiBackend) HeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Header, error) { + if number == rpc.LatestBlockNumber || number == rpc.PendingBlockNumber { return b.eth.blockchain.CurrentHeader(), nil } - return b.eth.blockchain.GetHeaderByNumberOdr(ctx, uint64(blockNr)) + return b.eth.blockchain.GetHeaderByNumberOdr(ctx, uint64(number)) +} + +func (b *LesApiBackend) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.HeaderByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + header, err := b.HeaderByHash(ctx, hash) + if err != nil { + return nil, err + } + if header == nil { + return nil, errors.New("header for hash not found") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { + return nil, errors.New("hash is not currently canonical") + } + return header, nil + } + return nil, errors.New("invalid arguments; neither block nor hash specified") } func (b *LesApiBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error) { return b.eth.blockchain.GetHeaderByHash(hash), nil } -func (b *LesApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error) { - header, err := b.HeaderByNumber(ctx, blockNr) +func (b *LesApiBackend) BlockByNumber(ctx context.Context, number rpc.BlockNumber) (*types.Block, error) { + header, err := b.HeaderByNumber(ctx, number) if header == nil || err != nil { return nil, err } - return b.GetBlock(ctx, header.Hash()) + return b.BlockByHash(ctx, header.Hash()) } -func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error) { - header, err := b.HeaderByNumber(ctx, blockNr) - if header == nil || err != nil { +func (b *LesApiBackend) BlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + return b.eth.blockchain.GetBlockByHash(ctx, hash) +} + +func (b *LesApiBackend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.BlockByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + block, err := b.BlockByHash(ctx, hash) + if err != nil { + return nil, err + } + if block == nil { + return nil, errors.New("header found, but block body is missing") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(block.NumberU64()) != hash { + return nil, errors.New("hash is not currently canonical") + } + return block, nil + } + return nil, errors.New("invalid arguments; neither block nor hash specified") +} + +func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error) { + header, err := b.HeaderByNumber(ctx, number) + if err != nil { return nil, nil, err } + if header == nil { + return nil, nil, errors.New("header not found") + } return light.NewState(ctx, header, b.eth.odr), header, nil } -func (b *LesApiBackend) GetBlock(ctx context.Context, blockHash common.Hash) (*types.Block, error) { - return b.eth.blockchain.GetBlockByHash(ctx, blockHash) +func (b *LesApiBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error) { + if blockNr, ok := blockNrOrHash.Number(); ok { + return b.StateAndHeaderByNumber(ctx, blockNr) + } + if hash, ok := blockNrOrHash.Hash(); ok { + header := b.eth.blockchain.GetHeaderByHash(hash) + if header == nil { + return nil, nil, errors.New("header for hash not found") + } + if blockNrOrHash.RequireCanonical && b.eth.blockchain.GetCanonicalHash(header.Number.Uint64()) != hash { + return nil, nil, errors.New("hash is not currently canonical") + } + return light.NewState(ctx, header, b.eth.odr), header, nil + } + return nil, nil, errors.New("invalid arguments; neither block nor hash specified") } func (b *LesApiBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error) { @@ -127,6 +189,10 @@ func (b *LesApiBackend) GetPoolTransaction(txHash common.Hash) *types.Transactio return b.eth.txPool.GetTransaction(txHash) } +func (b *LesApiBackend) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { + return light.GetTransaction(ctx, b.eth.odr, txHash) +} + func (b *LesApiBackend) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error) { return b.eth.txPool.GetNonce(ctx, addr) } @@ -187,6 +253,14 @@ func (b *LesApiBackend) AccountManager() *accounts.Manager { return b.eth.accountManager } +func (b *LesApiBackend) ExtRPCEnabled() bool { + return b.extRPCEnabled +} + +func (b *LesApiBackend) RPCGasCap() *big.Int { + return b.eth.config.RPCGasCap +} + func (b *LesApiBackend) BloomStatus() (uint64, uint64) { if b.eth.bloomIndexer == nil { return 0, 0 diff --git a/les/api_test.go b/les/api_test.go new file mode 100644 index 000000000000..660af8eeecb9 --- /dev/null +++ b/les/api_test.go @@ -0,0 +1,516 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "context" + "errors" + "flag" + "io/ioutil" + "math/rand" + "os" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/simulations" + "github.com/ethereum/go-ethereum/p2p/simulations/adapters" + "github.com/ethereum/go-ethereum/rpc" + "github.com/mattn/go-colorable" +) + +// Additional command line flags for the test binary. +var ( + loglevel = flag.Int("loglevel", 0, "verbosity of logs") + simAdapter = flag.String("adapter", "exec", "type of simulation: sim|socket|exec|docker") +) + +func TestMain(m *testing.M) { + flag.Parse() + log.PrintOrigins(true) + log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + // register the Delivery service which will run as a devp2p + // protocol when using the exec adapter + adapters.RegisterServices(services) + os.Exit(m.Run()) +} + +// This test is not meant to be a part of the automatic testing process because it +// runs for a long time and also requires a large database in order to do a meaningful +// request performance test. When testServerDataDir is empty, the test is skipped. + +const ( + testServerDataDir = "" // should always be empty on the master branch + testServerCapacity = 200 + testMaxClients = 10 + testTolerance = 0.1 + minRelCap = 0.2 +) + +func TestCapacityAPI3(t *testing.T) { + testCapacityAPI(t, 3) +} + +func TestCapacityAPI6(t *testing.T) { + testCapacityAPI(t, 6) +} + +func TestCapacityAPI10(t *testing.T) { + testCapacityAPI(t, 10) +} + +// testCapacityAPI runs an end-to-end simulation test connecting one server with +// a given number of clients. It sets different priority capacities to all clients +// except a randomly selected one which runs in free client mode. All clients send +// similar requests at the maximum allowed rate and the test verifies whether the +// ratio of processed requests is close enough to the ratio of assigned capacities. +// Running multiple rounds with different settings ensures that changing capacity +// while connected and going back and forth between free and priority mode with +// the supplied API calls is also thoroughly tested. +func testCapacityAPI(t *testing.T, clientCount int) { + // Skip test if no data dir specified + if testServerDataDir == "" { + return + } + for !testSim(t, 1, clientCount, []string{testServerDataDir}, nil, func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool { + if len(servers) != 1 { + t.Fatalf("Invalid number of servers: %d", len(servers)) + } + server := servers[0] + + serverRpcClient, err := server.Client() + if err != nil { + t.Fatalf("Failed to obtain rpc client: %v", err) + } + headNum, headHash := getHead(ctx, t, serverRpcClient) + minCap, freeCap, totalCap := getCapacityInfo(ctx, t, serverRpcClient) + testCap := totalCap * 3 / 4 + t.Logf("Server testCap: %d minCap: %d head number: %d head hash: %064x\n", testCap, minCap, headNum, headHash) + reqMinCap := uint64(float64(testCap) * minRelCap / (minRelCap + float64(len(clients)-1))) + if minCap > reqMinCap { + t.Fatalf("Minimum client capacity (%d) bigger than required minimum for this test (%d)", minCap, reqMinCap) + } + freeIdx := rand.Intn(len(clients)) + + clientRpcClients := make([]*rpc.Client, len(clients)) + for i, client := range clients { + var err error + clientRpcClients[i], err = client.Client() + if err != nil { + t.Fatalf("Failed to obtain rpc client: %v", err) + } + t.Log("connecting client", i) + if i != freeIdx { + setCapacity(ctx, t, serverRpcClient, client.ID(), testCap/uint64(len(clients))) + } + net.Connect(client.ID(), server.ID()) + + for { + select { + case <-ctx.Done(): + t.Fatalf("Timeout") + default: + } + num, hash := getHead(ctx, t, clientRpcClients[i]) + if num == headNum && hash == headHash { + t.Log("client", i, "synced") + break + } + time.Sleep(time.Millisecond * 200) + } + } + + var wg sync.WaitGroup + stop := make(chan struct{}) + + reqCount := make([]uint64, len(clientRpcClients)) + + // Send light request like crazy. + for i, c := range clientRpcClients { + wg.Add(1) + i, c := i, c + go func() { + defer wg.Done() + + queue := make(chan struct{}, 100) + reqCount[i] = 0 + for { + select { + case queue <- struct{}{}: + select { + case <-stop: + return + case <-ctx.Done(): + return + default: + wg.Add(1) + go func() { + ok := testRequest(ctx, t, c) + wg.Done() + <-queue + if ok { + count := atomic.AddUint64(&reqCount[i], 1) + if count%10000 == 0 { + freezeClient(ctx, t, serverRpcClient, clients[i].ID()) + } + } + }() + } + case <-stop: + return + case <-ctx.Done(): + return + } + } + }() + } + + processedSince := func(start []uint64) []uint64 { + res := make([]uint64, len(reqCount)) + for i := range reqCount { + res[i] = atomic.LoadUint64(&reqCount[i]) + if start != nil { + res[i] -= start[i] + } + } + return res + } + + weights := make([]float64, len(clients)) + for c := 0; c < 5; c++ { + setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), freeCap) + freeIdx = rand.Intn(len(clients)) + var sum float64 + for i := range clients { + if i == freeIdx { + weights[i] = 0 + } else { + weights[i] = rand.Float64()*(1-minRelCap) + minRelCap + } + sum += weights[i] + } + for i, client := range clients { + weights[i] *= float64(testCap-freeCap-100) / sum + capacity := uint64(weights[i]) + if i != freeIdx && capacity < getCapacity(ctx, t, serverRpcClient, client.ID()) { + setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) + } + } + setCapacity(ctx, t, serverRpcClient, clients[freeIdx].ID(), 0) + for i, client := range clients { + capacity := uint64(weights[i]) + if i != freeIdx && capacity > getCapacity(ctx, t, serverRpcClient, client.ID()) { + setCapacity(ctx, t, serverRpcClient, client.ID(), capacity) + } + } + weights[freeIdx] = float64(freeCap) + for i := range clients { + weights[i] /= float64(testCap) + } + + time.Sleep(flowcontrol.DecParamDelay) + t.Log("Starting measurement") + t.Logf("Relative weights:") + for i := range clients { + t.Logf(" %f", weights[i]) + } + t.Log() + start := processedSince(nil) + for { + select { + case <-ctx.Done(): + t.Fatalf("Timeout") + default: + } + + _, _, totalCap = getCapacityInfo(ctx, t, serverRpcClient) + if totalCap < testCap { + t.Log("Total capacity underrun") + close(stop) + wg.Wait() + return false + } + + processed := processedSince(start) + var avg uint64 + t.Logf("Processed") + for i, p := range processed { + t.Logf(" %d", p) + processed[i] = uint64(float64(p) / weights[i]) + avg += processed[i] + } + avg /= uint64(len(processed)) + + if avg >= 10000 { + var maxDev float64 + for _, p := range processed { + dev := float64(int64(p-avg)) / float64(avg) + t.Logf(" %7.4f", dev) + if dev < 0 { + dev = -dev + } + if dev > maxDev { + maxDev = dev + } + } + t.Logf(" max deviation: %f totalCap: %d\n", maxDev, totalCap) + if maxDev <= testTolerance { + t.Log("success") + break + } + } else { + t.Log() + } + time.Sleep(time.Millisecond * 200) + } + } + + close(stop) + wg.Wait() + + for i, count := range reqCount { + t.Log("client", i, "processed", count) + } + return true + }) { + t.Log("restarting test") + } +} + +func getHead(ctx context.Context, t *testing.T, client *rpc.Client) (uint64, common.Hash) { + res := make(map[string]interface{}) + if err := client.CallContext(ctx, &res, "eth_getBlockByNumber", "latest", false); err != nil { + t.Fatalf("Failed to obtain head block: %v", err) + } + numStr, ok := res["number"].(string) + if !ok { + t.Fatalf("RPC block number field invalid") + } + num, err := hexutil.DecodeUint64(numStr) + if err != nil { + t.Fatalf("Failed to decode RPC block number: %v", err) + } + hashStr, ok := res["hash"].(string) + if !ok { + t.Fatalf("RPC block number field invalid") + } + hash := common.HexToHash(hashStr) + return num, hash +} + +func testRequest(ctx context.Context, t *testing.T, client *rpc.Client) bool { + var res string + var addr common.Address + rand.Read(addr[:]) + c, _ := context.WithTimeout(ctx, time.Second*12) + err := client.CallContext(c, &res, "eth_getBalance", addr, "latest") + if err != nil { + t.Log("request error:", err) + } + return err == nil +} + +func freezeClient(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID) { + if err := server.CallContext(ctx, nil, "debug_freezeClient", clientID); err != nil { + t.Fatalf("Failed to freeze client: %v", err) + } + +} + +func setCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID, cap uint64) { + params := make(map[string]interface{}) + params["capacity"] = cap + if err := server.CallContext(ctx, nil, "les_setClientParams", []enode.ID{clientID}, []string{}, params); err != nil { + t.Fatalf("Failed to set client capacity: %v", err) + } +} + +func getCapacity(ctx context.Context, t *testing.T, server *rpc.Client, clientID enode.ID) uint64 { + var res map[enode.ID]map[string]interface{} + if err := server.CallContext(ctx, &res, "les_clientInfo", []enode.ID{clientID}, []string{}); err != nil { + t.Fatalf("Failed to get client info: %v", err) + } + info, ok := res[clientID] + if !ok { + t.Fatalf("Missing client info") + } + v, ok := info["capacity"] + if !ok { + t.Fatalf("Missing field in client info: capacity") + } + vv, ok := v.(float64) + if !ok { + t.Fatalf("Failed to decode capacity field") + } + return uint64(vv) +} + +func getCapacityInfo(ctx context.Context, t *testing.T, server *rpc.Client) (minCap, freeCap, totalCap uint64) { + var res map[string]interface{} + if err := server.CallContext(ctx, &res, "les_serverInfo"); err != nil { + t.Fatalf("Failed to query server info: %v", err) + } + decode := func(s string) uint64 { + v, ok := res[s] + if !ok { + t.Fatalf("Missing field in server info: %s", s) + } + vv, ok := v.(float64) + if !ok { + t.Fatalf("Failed to decode server info field: %s", s) + } + return uint64(vv) + } + minCap = decode("minimumCapacity") + freeCap = decode("freeClientCapacity") + totalCap = decode("totalCapacity") + return +} + +var services = adapters.Services{ + "lesclient": newLesClientService, + "lesserver": newLesServerService, +} + +func NewNetwork() (*simulations.Network, func(), error) { + adapter, adapterTeardown, err := NewAdapter(*simAdapter, services) + if err != nil { + return nil, adapterTeardown, err + } + defaultService := "streamer" + net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ + ID: "0", + DefaultService: defaultService, + }) + teardown := func() { + adapterTeardown() + net.Shutdown() + } + return net, teardown, nil +} + +func NewAdapter(adapterType string, services adapters.Services) (adapter adapters.NodeAdapter, teardown func(), err error) { + teardown = func() {} + switch adapterType { + case "sim": + adapter = adapters.NewSimAdapter(services) + // case "socket": + // adapter = adapters.NewSocketAdapter(services) + case "exec": + baseDir, err0 := ioutil.TempDir("", "les-test") + if err0 != nil { + return nil, teardown, err0 + } + teardown = func() { os.RemoveAll(baseDir) } + adapter = adapters.NewExecAdapter(baseDir) + /*case "docker": + adapter, err = adapters.NewDockerAdapter() + if err != nil { + return nil, teardown, err + }*/ + default: + return nil, teardown, errors.New("adapter needs to be one of sim, socket, exec, docker") + } + return adapter, teardown, nil +} + +func testSim(t *testing.T, serverCount, clientCount int, serverDir, clientDir []string, test func(ctx context.Context, net *simulations.Network, servers []*simulations.Node, clients []*simulations.Node) bool) bool { + net, teardown, err := NewNetwork() + defer teardown() + if err != nil { + t.Fatalf("Failed to create network: %v", err) + } + timeout := 1800 * time.Second + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + servers := make([]*simulations.Node, serverCount) + clients := make([]*simulations.Node, clientCount) + + for i := range clients { + clientconf := adapters.RandomNodeConfig() + clientconf.Services = []string{"lesclient"} + if len(clientDir) == clientCount { + clientconf.DataDir = clientDir[i] + } + client, err := net.NewNodeWithConfig(clientconf) + if err != nil { + t.Fatalf("Failed to create client: %v", err) + } + clients[i] = client + } + + for i := range servers { + serverconf := adapters.RandomNodeConfig() + serverconf.Services = []string{"lesserver"} + if len(serverDir) == serverCount { + serverconf.DataDir = serverDir[i] + } + server, err := net.NewNodeWithConfig(serverconf) + if err != nil { + t.Fatalf("Failed to create server: %v", err) + } + servers[i] = server + } + + for _, client := range clients { + if err := net.Start(client.ID()); err != nil { + t.Fatalf("Failed to start client node: %v", err) + } + } + for _, server := range servers { + if err := net.Start(server.ID()); err != nil { + t.Fatalf("Failed to start server node: %v", err) + } + } + + return test(ctx, net, servers, clients) +} + +func newLesClientService(ctx *adapters.ServiceContext) (node.Service, error) { + config := eth.DefaultConfig + config.SyncMode = downloader.LightSync + config.Ethash.PowMode = ethash.ModeFake + return New(ctx.NodeContext, &config) +} + +func newLesServerService(ctx *adapters.ServiceContext) (node.Service, error) { + config := eth.DefaultConfig + config.SyncMode = downloader.FullSync + config.LightServ = testServerCapacity + config.LightPeers = testMaxClients + ethereum, err := eth.New(ctx.NodeContext, &config) + if err != nil { + return nil, err + } + server, err := NewLesServer(ethereum, &config) + if err != nil { + return nil, err + } + ethereum.AddLesServer(server) + return ethereum, nil +} diff --git a/les/balance.go b/les/balance.go new file mode 100644 index 000000000000..a36a997cf3ad --- /dev/null +++ b/les/balance.go @@ -0,0 +1,381 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +const ( + balanceCallbackQueue = iota + balanceCallbackZero + balanceCallbackCount +) + +// balanceTracker keeps track of the positive and negative balances of a connected +// client and calculates actual and projected future priority values required by +// prque.LazyQueue. +type balanceTracker struct { + lock sync.Mutex + clock mclock.Clock + stopped bool + capacity uint64 + balance balance + timeFactor, requestFactor float64 + negTimeFactor, negRequestFactor float64 + sumReqCost uint64 + lastUpdate, nextUpdate, initTime mclock.AbsTime + updateEvent mclock.Timer + // since only a limited and fixed number of callbacks are needed, they are + // stored in a fixed size array ordered by priority threshold. + callbacks [balanceCallbackCount]balanceCallback + // callbackIndex maps balanceCallback constants to callbacks array indexes (-1 if not active) + callbackIndex [balanceCallbackCount]int + callbackCount int // number of active callbacks +} + +// balance represents a pair of positive and negative balances +type balance struct { + pos, neg uint64 +} + +// balanceCallback represents a single callback that is activated when client priority +// reaches the given threshold +type balanceCallback struct { + id int + threshold int64 + callback func() +} + +// init initializes balanceTracker +func (bt *balanceTracker) init(clock mclock.Clock, capacity uint64) { + bt.clock = clock + bt.initTime = clock.Now() + for i := range bt.callbackIndex { + bt.callbackIndex[i] = -1 + } + bt.capacity = capacity +} + +// stop shuts down the balance tracker +func (bt *balanceTracker) stop(now mclock.AbsTime) { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.stopped = true + bt.updateBalance(now) + bt.negTimeFactor = 0 + bt.negRequestFactor = 0 + bt.timeFactor = 0 + bt.requestFactor = 0 + if bt.updateEvent != nil { + bt.updateEvent.Stop() + bt.updateEvent = nil + } +} + +// balanceToPriority converts a balance to a priority value. Higher priority means +// first to disconnect. Positive balance translates to negative priority. If positive +// balance is zero then negative balance translates to a positive priority. +func (bt *balanceTracker) balanceToPriority(b balance) int64 { + if b.pos > 0 { + return ^int64(b.pos / bt.capacity) + } + return int64(b.neg) +} + +// reducedBalance estimates the reduced balance at a given time in the fututre based +// on the current balance, the time factor and an estimated average request cost per time ratio +func (bt *balanceTracker) reducedBalance(at mclock.AbsTime, avgReqCost float64) balance { + dt := float64(at - bt.lastUpdate) + b := bt.balance + if b.pos != 0 { + factor := bt.timeFactor + bt.requestFactor*avgReqCost + diff := uint64(dt * factor) + if diff <= b.pos { + b.pos -= diff + dt = 0 + } else { + dt -= float64(b.pos) / factor + b.pos = 0 + } + } + if dt != 0 { + factor := bt.negTimeFactor + bt.negRequestFactor*avgReqCost + b.neg += uint64(dt * factor) + } + return b +} + +// timeUntil calculates the remaining time needed to reach a given priority level +// assuming that no requests are processed until then. If the given level is never +// reached then (0, false) is returned. +// Note: the function assumes that the balance has been recently updated and +// calculates the time starting from the last update. +func (bt *balanceTracker) timeUntil(priority int64) (time.Duration, bool) { + var dt float64 + if bt.balance.pos != 0 { + if bt.timeFactor < 1e-100 { + return 0, false + } + if priority < 0 { + newBalance := uint64(^priority) * bt.capacity + if newBalance > bt.balance.pos { + return 0, false + } + dt = float64(bt.balance.pos-newBalance) / bt.timeFactor + return time.Duration(dt), true + } else { + dt = float64(bt.balance.pos) / bt.timeFactor + } + } else { + if priority < 0 { + return 0, false + } + } + // if we have a positive balance then dt equals the time needed to get it to zero + if uint64(priority) > bt.balance.neg { + if bt.negTimeFactor < 1e-100 { + return 0, false + } + dt += float64(uint64(priority)-bt.balance.neg) / bt.negTimeFactor + } + return time.Duration(dt), true +} + +// getPriority returns the actual priority based on the current balance +func (bt *balanceTracker) getPriority(now mclock.AbsTime) int64 { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.updateBalance(now) + return bt.balanceToPriority(bt.balance) +} + +// estimatedPriority gives an upper estimate for the priority at a given time in the future. +// If addReqCost is true then an average request cost per time is assumed that is twice the +// average cost per time in the current session. If false, zero request cost is assumed. +func (bt *balanceTracker) estimatedPriority(at mclock.AbsTime, addReqCost bool) int64 { + bt.lock.Lock() + defer bt.lock.Unlock() + + var avgReqCost float64 + if addReqCost { + dt := time.Duration(bt.lastUpdate - bt.initTime) + if dt > time.Second { + avgReqCost = float64(bt.sumReqCost) * 2 / float64(dt) + } + } + return bt.balanceToPriority(bt.reducedBalance(at, avgReqCost)) +} + +// updateBalance updates balance based on the time factor +func (bt *balanceTracker) updateBalance(now mclock.AbsTime) { + if now > bt.lastUpdate { + bt.balance = bt.reducedBalance(now, 0) + bt.lastUpdate = now + } +} + +// checkCallbacks checks whether the threshold of any of the active callbacks +// have been reached and calls them if necessary. It also sets up or updates +// a scheduled event to ensure that is will be called again just after the next +// threshold has been reached. +// Note: checkCallbacks assumes that the balance has been recently updated. +func (bt *balanceTracker) checkCallbacks(now mclock.AbsTime) { + if bt.callbackCount == 0 { + return + } + pri := bt.balanceToPriority(bt.balance) + for bt.callbackCount != 0 && bt.callbacks[bt.callbackCount-1].threshold <= pri { + bt.callbackCount-- + bt.callbackIndex[bt.callbacks[bt.callbackCount].id] = -1 + go bt.callbacks[bt.callbackCount].callback() + } + if bt.callbackCount != 0 { + d, ok := bt.timeUntil(bt.callbacks[bt.callbackCount-1].threshold) + if !ok { + bt.nextUpdate = 0 + bt.updateAfter(0) + return + } + if bt.nextUpdate == 0 || bt.nextUpdate > now+mclock.AbsTime(d) { + if d > time.Second { + // Note: if the scheduled update is not in the very near future then we + // schedule the update a bit earlier. This way we do need to update a few + // extra times but don't need to reschedule every time a processed request + // brings the expected firing time a little bit closer. + d = ((d - time.Second) * 7 / 8) + time.Second + } + bt.nextUpdate = now + mclock.AbsTime(d) + bt.updateAfter(d) + } + } else { + bt.nextUpdate = 0 + bt.updateAfter(0) + } +} + +// updateAfter schedules a balance update and callback check in the future +func (bt *balanceTracker) updateAfter(dt time.Duration) { + if bt.updateEvent == nil || bt.updateEvent.Stop() { + if dt == 0 { + bt.updateEvent = nil + } else { + bt.updateEvent = bt.clock.AfterFunc(dt, func() { + bt.lock.Lock() + defer bt.lock.Unlock() + + if bt.callbackCount != 0 { + now := bt.clock.Now() + bt.updateBalance(now) + bt.checkCallbacks(now) + } + }) + } + } +} + +// requestCost should be called after serving a request for the given peer +func (bt *balanceTracker) requestCost(cost uint64) { + bt.lock.Lock() + defer bt.lock.Unlock() + + if bt.stopped { + return + } + now := bt.clock.Now() + bt.updateBalance(now) + fcost := float64(cost) + + if bt.balance.pos != 0 { + if bt.requestFactor != 0 { + c := uint64(fcost * bt.requestFactor) + if bt.balance.pos >= c { + bt.balance.pos -= c + fcost = 0 + } else { + fcost *= 1 - float64(bt.balance.pos)/float64(c) + bt.balance.pos = 0 + } + bt.checkCallbacks(now) + } else { + fcost = 0 + } + } + if fcost > 0 { + if bt.negRequestFactor != 0 { + bt.balance.neg += uint64(fcost * bt.negRequestFactor) + bt.checkCallbacks(now) + } + } + bt.sumReqCost += cost +} + +// getBalance returns the current positive and negative balance +func (bt *balanceTracker) getBalance(now mclock.AbsTime) (uint64, uint64) { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.updateBalance(now) + return bt.balance.pos, bt.balance.neg +} + +// setBalance sets the positive and negative balance to the given values +func (bt *balanceTracker) setBalance(pos, neg uint64) error { + bt.lock.Lock() + defer bt.lock.Unlock() + + now := bt.clock.Now() + bt.updateBalance(now) + bt.balance.pos = pos + bt.balance.neg = neg + bt.checkCallbacks(now) + return nil +} + +// setFactors sets the price factors. timeFactor is the price of a nanosecond of +// connection while requestFactor is the price of a "realCost" unit. +func (bt *balanceTracker) setFactors(neg bool, timeFactor, requestFactor float64) { + bt.lock.Lock() + defer bt.lock.Unlock() + + if bt.stopped { + return + } + now := bt.clock.Now() + bt.updateBalance(now) + if neg { + bt.negTimeFactor = timeFactor + bt.negRequestFactor = requestFactor + } else { + bt.timeFactor = timeFactor + bt.requestFactor = requestFactor + } + bt.checkCallbacks(now) +} + +// setCallback sets up a one-time callback to be called when priority reaches +// the threshold. If it has already reached the threshold the callback is called +// immediately. +func (bt *balanceTracker) addCallback(id int, threshold int64, callback func()) { + bt.lock.Lock() + defer bt.lock.Unlock() + + bt.removeCb(id) + idx := 0 + for idx < bt.callbackCount && threshold < bt.callbacks[idx].threshold { + idx++ + } + for i := bt.callbackCount - 1; i >= idx; i-- { + bt.callbackIndex[bt.callbacks[i].id]++ + bt.callbacks[i+1] = bt.callbacks[i] + } + bt.callbackCount++ + bt.callbackIndex[id] = idx + bt.callbacks[idx] = balanceCallback{id, threshold, callback} + now := bt.clock.Now() + bt.updateBalance(now) + bt.checkCallbacks(now) +} + +// removeCallback removes the given callback and returns true if it was active +func (bt *balanceTracker) removeCallback(id int) bool { + bt.lock.Lock() + defer bt.lock.Unlock() + + return bt.removeCb(id) +} + +// removeCb removes the given callback and returns true if it was active +// Note: should be called while bt.lock is held +func (bt *balanceTracker) removeCb(id int) bool { + idx := bt.callbackIndex[id] + if idx == -1 { + return false + } + bt.callbackIndex[id] = -1 + for i := idx; i < bt.callbackCount-1; i++ { + bt.callbackIndex[bt.callbacks[i+1].id]-- + bt.callbacks[i] = bt.callbacks[i+1] + } + bt.callbackCount-- + return true +} diff --git a/les/benchmark.go b/les/benchmark.go new file mode 100644 index 000000000000..42eeef10f3b8 --- /dev/null +++ b/les/benchmark.go @@ -0,0 +1,354 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "fmt" + "math/big" + "math/rand" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" +) + +// requestBenchmark is an interface for different randomized request generators +type requestBenchmark interface { + // init initializes the generator for generating the given number of randomized requests + init(h *serverHandler, count int) error + // request initiates sending a single request to the given peer + request(peer *peer, index int) error +} + +// benchmarkBlockHeaders implements requestBenchmark +type benchmarkBlockHeaders struct { + amount, skip int + reverse, byHash bool + offset, randMax int64 + hashes []common.Hash +} + +func (b *benchmarkBlockHeaders) init(h *serverHandler, count int) error { + d := int64(b.amount-1) * int64(b.skip+1) + b.offset = 0 + b.randMax = h.blockchain.CurrentHeader().Number.Int64() + 1 - d + if b.randMax < 0 { + return fmt.Errorf("chain is too short") + } + if b.reverse { + b.offset = d + } + if b.byHash { + b.hashes = make([]common.Hash, count) + for i := range b.hashes { + b.hashes[i] = rawdb.ReadCanonicalHash(h.chainDb, uint64(b.offset+rand.Int63n(b.randMax))) + } + } + return nil +} + +func (b *benchmarkBlockHeaders) request(peer *peer, index int) error { + if b.byHash { + return peer.RequestHeadersByHash(0, 0, b.hashes[index], b.amount, b.skip, b.reverse) + } else { + return peer.RequestHeadersByNumber(0, 0, uint64(b.offset+rand.Int63n(b.randMax)), b.amount, b.skip, b.reverse) + } +} + +// benchmarkBodiesOrReceipts implements requestBenchmark +type benchmarkBodiesOrReceipts struct { + receipts bool + hashes []common.Hash +} + +func (b *benchmarkBodiesOrReceipts) init(h *serverHandler, count int) error { + randMax := h.blockchain.CurrentHeader().Number.Int64() + 1 + b.hashes = make([]common.Hash, count) + for i := range b.hashes { + b.hashes[i] = rawdb.ReadCanonicalHash(h.chainDb, uint64(rand.Int63n(randMax))) + } + return nil +} + +func (b *benchmarkBodiesOrReceipts) request(peer *peer, index int) error { + if b.receipts { + return peer.RequestReceipts(0, 0, []common.Hash{b.hashes[index]}) + } else { + return peer.RequestBodies(0, 0, []common.Hash{b.hashes[index]}) + } +} + +// benchmarkProofsOrCode implements requestBenchmark +type benchmarkProofsOrCode struct { + code bool + headHash common.Hash +} + +func (b *benchmarkProofsOrCode) init(h *serverHandler, count int) error { + b.headHash = h.blockchain.CurrentHeader().Hash() + return nil +} + +func (b *benchmarkProofsOrCode) request(peer *peer, index int) error { + key := make([]byte, 32) + rand.Read(key) + if b.code { + return peer.RequestCode(0, 0, []CodeReq{{BHash: b.headHash, AccKey: key}}) + } else { + return peer.RequestProofs(0, 0, []ProofReq{{BHash: b.headHash, Key: key}}) + } +} + +// benchmarkHelperTrie implements requestBenchmark +type benchmarkHelperTrie struct { + bloom bool + reqCount int + sectionCount, headNum uint64 +} + +func (b *benchmarkHelperTrie) init(h *serverHandler, count int) error { + if b.bloom { + b.sectionCount, b.headNum, _ = h.server.bloomTrieIndexer.Sections() + } else { + b.sectionCount, _, _ = h.server.chtIndexer.Sections() + b.headNum = b.sectionCount*params.CHTFrequency - 1 + } + if b.sectionCount == 0 { + return fmt.Errorf("no processed sections available") + } + return nil +} + +func (b *benchmarkHelperTrie) request(peer *peer, index int) error { + reqs := make([]HelperTrieReq, b.reqCount) + + if b.bloom { + bitIdx := uint16(rand.Intn(2048)) + for i := range reqs { + key := make([]byte, 10) + binary.BigEndian.PutUint16(key[:2], bitIdx) + binary.BigEndian.PutUint64(key[2:], uint64(rand.Int63n(int64(b.sectionCount)))) + reqs[i] = HelperTrieReq{Type: htBloomBits, TrieIdx: b.sectionCount - 1, Key: key} + } + } else { + for i := range reqs { + key := make([]byte, 8) + binary.BigEndian.PutUint64(key[:], uint64(rand.Int63n(int64(b.headNum)))) + reqs[i] = HelperTrieReq{Type: htCanonical, TrieIdx: b.sectionCount - 1, Key: key, AuxReq: auxHeader} + } + } + + return peer.RequestHelperTrieProofs(0, 0, reqs) +} + +// benchmarkTxSend implements requestBenchmark +type benchmarkTxSend struct { + txs types.Transactions +} + +func (b *benchmarkTxSend) init(h *serverHandler, count int) error { + key, _ := crypto.GenerateKey() + addr := crypto.PubkeyToAddress(key.PublicKey) + signer := types.NewEIP155Signer(big.NewInt(18)) + b.txs = make(types.Transactions, count) + + for i := range b.txs { + data := make([]byte, txSizeCostLimit) + rand.Read(data) + tx, err := types.SignTx(types.NewTransaction(0, addr, new(big.Int), 0, new(big.Int), data), signer, key) + if err != nil { + panic(err) + } + b.txs[i] = tx + } + return nil +} + +func (b *benchmarkTxSend) request(peer *peer, index int) error { + enc, _ := rlp.EncodeToBytes(types.Transactions{b.txs[index]}) + return peer.SendTxs(0, 0, enc) +} + +// benchmarkTxStatus implements requestBenchmark +type benchmarkTxStatus struct{} + +func (b *benchmarkTxStatus) init(h *serverHandler, count int) error { + return nil +} + +func (b *benchmarkTxStatus) request(peer *peer, index int) error { + var hash common.Hash + rand.Read(hash[:]) + return peer.RequestTxStatus(0, 0, []common.Hash{hash}) +} + +// benchmarkSetup stores measurement data for a single benchmark type +type benchmarkSetup struct { + req requestBenchmark + totalCount int + totalTime, avgTime time.Duration + maxInSize, maxOutSize uint32 + err error +} + +// runBenchmark runs a benchmark cycle for all benchmark types in the specified +// number of passes +func (h *serverHandler) runBenchmark(benchmarks []requestBenchmark, passCount int, targetTime time.Duration) []*benchmarkSetup { + setup := make([]*benchmarkSetup, len(benchmarks)) + for i, b := range benchmarks { + setup[i] = &benchmarkSetup{req: b} + } + for i := 0; i < passCount; i++ { + log.Info("Running benchmark", "pass", i+1, "total", passCount) + todo := make([]*benchmarkSetup, len(benchmarks)) + copy(todo, setup) + for len(todo) > 0 { + // select a random element + index := rand.Intn(len(todo)) + next := todo[index] + todo[index] = todo[len(todo)-1] + todo = todo[:len(todo)-1] + + if next.err == nil { + // calculate request count + count := 50 + if next.totalTime > 0 { + count = int(uint64(next.totalCount) * uint64(targetTime) / uint64(next.totalTime)) + } + if err := h.measure(next, count); err != nil { + next.err = err + } + } + } + } + log.Info("Benchmark completed") + + for _, s := range setup { + if s.err == nil { + s.avgTime = s.totalTime / time.Duration(s.totalCount) + } + } + return setup +} + +// meteredPipe implements p2p.MsgReadWriter and remembers the largest single +// message size sent through the pipe +type meteredPipe struct { + rw p2p.MsgReadWriter + maxSize uint32 +} + +func (m *meteredPipe) ReadMsg() (p2p.Msg, error) { + return m.rw.ReadMsg() +} + +func (m *meteredPipe) WriteMsg(msg p2p.Msg) error { + if msg.Size > m.maxSize { + m.maxSize = msg.Size + } + return m.rw.WriteMsg(msg) +} + +// measure runs a benchmark for a single type in a single pass, with the given +// number of requests +func (h *serverHandler) measure(setup *benchmarkSetup, count int) error { + clientPipe, serverPipe := p2p.MsgPipe() + clientMeteredPipe := &meteredPipe{rw: clientPipe} + serverMeteredPipe := &meteredPipe{rw: serverPipe} + var id enode.ID + rand.Read(id[:]) + + clientPeer := newPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "client", nil), clientMeteredPipe) + serverPeer := newPeer(lpv2, NetworkId, false, p2p.NewPeer(id, "server", nil), serverMeteredPipe) + serverPeer.sendQueue = newExecQueue(count) + serverPeer.announceType = announceTypeNone + serverPeer.fcCosts = make(requestCostTable) + c := &requestCosts{} + for code := range requests { + serverPeer.fcCosts[code] = c + } + serverPeer.fcParams = flowcontrol.ServerParams{BufLimit: 1, MinRecharge: 1} + serverPeer.fcClient = flowcontrol.NewClientNode(h.server.fcManager, serverPeer.fcParams) + defer serverPeer.fcClient.Disconnect() + + if err := setup.req.init(h, count); err != nil { + return err + } + + errCh := make(chan error, 10) + start := mclock.Now() + + go func() { + for i := 0; i < count; i++ { + if err := setup.req.request(clientPeer, i); err != nil { + errCh <- err + return + } + } + }() + go func() { + for i := 0; i < count; i++ { + if err := h.handleMsg(serverPeer, &sync.WaitGroup{}); err != nil { + errCh <- err + return + } + } + }() + go func() { + for i := 0; i < count; i++ { + msg, err := clientPipe.ReadMsg() + if err != nil { + errCh <- err + return + } + var i interface{} + msg.Decode(&i) + } + // at this point we can be sure that the other two + // goroutines finished successfully too + close(errCh) + }() + select { + case err := <-errCh: + if err != nil { + return err + } + case <-h.closeCh: + clientPipe.Close() + serverPipe.Close() + return fmt.Errorf("Benchmark cancelled") + } + + setup.totalTime += time.Duration(mclock.Now() - start) + setup.totalCount += count + setup.maxInSize = clientMeteredPipe.maxSize + setup.maxOutSize = serverMeteredPipe.maxSize + clientPipe.Close() + serverPipe.Close() + return nil +} diff --git a/les/bloombits.go b/les/bloombits.go index aea0fcd5f480..a98524ce2e69 100644 --- a/les/bloombits.go +++ b/les/bloombits.go @@ -46,9 +46,10 @@ const ( func (eth *LightEthereum) startBloomHandlers(sectionSize uint64) { for i := 0; i < bloomServiceThreads; i++ { go func() { + defer eth.wg.Done() for { select { - case <-eth.shutdownChan: + case <-eth.closeCh: return case request := <-eth.bloomRequests: diff --git a/les/checkpointoracle.go b/les/checkpointoracle.go new file mode 100644 index 000000000000..5494e3d6d9d5 --- /dev/null +++ b/les/checkpointoracle.go @@ -0,0 +1,155 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "sync/atomic" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/params" +) + +// checkpointOracle is responsible for offering the latest stable checkpoint +// generated and announced by the contract admins on-chain. The checkpoint is +// verified by clients locally during the checkpoint syncing. +type checkpointOracle struct { + config *params.CheckpointOracleConfig + contract *checkpointoracle.CheckpointOracle + + running int32 // Flag whether the contract backend is set or not + getLocal func(uint64) params.TrustedCheckpoint // Function used to retrieve local checkpoint +} + +// newCheckpointOracle returns a checkpoint registrar handler. +func newCheckpointOracle(config *params.CheckpointOracleConfig, getLocal func(uint64) params.TrustedCheckpoint) *checkpointOracle { + if config == nil { + log.Info("Checkpoint registrar is not enabled") + return nil + } + if config.Address == (common.Address{}) || uint64(len(config.Signers)) < config.Threshold { + log.Warn("Invalid checkpoint registrar config") + return nil + } + log.Info("Configured checkpoint registrar", "address", config.Address, "signers", len(config.Signers), "threshold", config.Threshold) + + return &checkpointOracle{ + config: config, + getLocal: getLocal, + } +} + +// start binds the registrar contract and start listening to the +// newCheckpointEvent for the server side. +func (reg *checkpointOracle) start(backend bind.ContractBackend) { + contract, err := checkpointoracle.NewCheckpointOracle(reg.config.Address, backend) + if err != nil { + log.Error("Oracle contract binding failed", "err", err) + return + } + if !atomic.CompareAndSwapInt32(®.running, 0, 1) { + log.Error("Already bound and listening to registrar") + return + } + reg.contract = contract +} + +// isRunning returns an indicator whether the registrar is running. +func (reg *checkpointOracle) isRunning() bool { + return atomic.LoadInt32(®.running) == 1 +} + +// stableCheckpoint returns the stable checkpoint which was generated by local +// indexers and announced by trusted signers. +func (reg *checkpointOracle) stableCheckpoint() (*params.TrustedCheckpoint, uint64) { + // Retrieve the latest checkpoint from the contract, abort if empty + latest, hash, height, err := reg.contract.Contract().GetLatestCheckpoint(nil) + if err != nil || (latest == 0 && hash == [32]byte{}) { + return nil, 0 + } + local := reg.getLocal(latest) + + // The following scenarios may occur: + // + // * local node is out of sync so that it doesn't have the + // checkpoint which registered in the contract. + // * local checkpoint doesn't match with the registered one. + // + // In both cases, server won't send the **stable** checkpoint + // to the client(no worry, client can use hardcoded one instead). + if local.HashEqual(common.Hash(hash)) { + return &local, height.Uint64() + } + return nil, 0 +} + +// verifySigners recovers the signer addresses according to the signature and +// checks whether there are enough approvals to finalize the checkpoint. +func (reg *checkpointOracle) verifySigners(index uint64, hash [32]byte, signatures [][]byte) (bool, []common.Address) { + // Short circuit if the given signatures doesn't reach the threshold. + if len(signatures) < int(reg.config.Threshold) { + return false, nil + } + var ( + signers []common.Address + checked = make(map[common.Address]struct{}) + ) + for i := 0; i < len(signatures); i++ { + if len(signatures[i]) != 65 { + continue + } + // EIP 191 style signatures + // + // Arguments when calculating hash to validate + // 1: byte(0x19) - the initial 0x19 byte + // 2: byte(0) - the version byte (data with intended validator) + // 3: this - the validator address + // -- Application specific data + // 4 : checkpoint section_index (uint64) + // 5 : checkpoint hash (bytes32) + // hash = keccak256(checkpoint_index, section_head, cht_root, bloom_root) + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, index) + data := append([]byte{0x19, 0x00}, append(reg.config.Address.Bytes(), append(buf, hash[:]...)...)...) + signatures[i][64] -= 27 // Transform V from 27/28 to 0/1 according to the yellow paper for verification. + pubkey, err := crypto.Ecrecover(crypto.Keccak256(data), signatures[i]) + if err != nil { + return false, nil + } + var signer common.Address + copy(signer[:], crypto.Keccak256(pubkey[1:])[12:]) + if _, exist := checked[signer]; exist { + continue + } + for _, s := range reg.config.Signers { + if s == signer { + signers = append(signers, signer) + checked[signer] = struct{}{} + } + } + } + threshold := reg.config.Threshold + if uint64(len(signers)) < threshold { + log.Warn("Not enough signers to approve checkpoint", "signers", len(signers), "threshold", threshold) + return false, nil + } + return true, signers +} diff --git a/les/backend.go b/les/client.go similarity index 70% rename from les/backend.go rename to les/client.go index d0db71019e90..b367681f3768 100644 --- a/les/backend.go +++ b/les/client.go @@ -19,12 +19,12 @@ package les import ( "fmt" - "sync" - "time" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/bloombits" @@ -40,94 +40,100 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/discv5" + "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" - rpc "github.com/ethereum/go-ethereum/rpc" + "github.com/ethereum/go-ethereum/rpc" ) type LightEthereum struct { lesCommons - odr *LesOdr - relay *LesTxRelay - chainConfig *params.ChainConfig - // Channel for shutting down the service - shutdownChan chan bool - - // Handlers - peers *peerSet + reqDist *requestDistributor + retriever *retrieveManager + odr *LesOdr + relay *lesTxRelay + handler *clientHandler txPool *light.TxPool blockchain *light.LightChain serverPool *serverPool - reqDist *requestDistributor - retriever *retrieveManager bloomRequests chan chan *bloombits.Retrieval // Channel receiving bloom data retrieval requests - bloomIndexer *core.ChainIndexer - - ApiBackend *LesApiBackend + bloomIndexer *core.ChainIndexer // Bloom indexer operating during block imports + ApiBackend *LesApiBackend eventMux *event.TypeMux engine consensus.Engine accountManager *accounts.Manager - - networkId uint64 - netRPCService *ethapi.PublicNetAPI - - wg sync.WaitGroup + netRPCService *ethapi.PublicNetAPI } func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { - chainDb, err := eth.CreateDB(ctx, config, "lightchaindata") + chainDb, err := ctx.OpenDatabase("lightchaindata", config.DatabaseCache, config.DatabaseHandles, "eth/db/chaindata/") if err != nil { return nil, err } - chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.ConstantinopleOverride) + chainConfig, genesisHash, genesisErr := core.SetupGenesisBlockWithOverride(chainDb, config.Genesis, config.OverrideIstanbul) if _, isCompat := genesisErr.(*params.ConfigCompatError); genesisErr != nil && !isCompat { return nil, genesisErr } log.Info("Initialised chain configuration", "config", chainConfig) peers := newPeerSet() - quitSync := make(chan struct{}) - leth := &LightEthereum{ lesCommons: lesCommons{ - chainDb: chainDb, - config: config, - iConfig: light.DefaultClientIndexerConfig, + genesis: genesisHash, + config: config, + chainConfig: chainConfig, + iConfig: light.DefaultClientIndexerConfig, + chainDb: chainDb, + peers: peers, + closeCh: make(chan struct{}), }, - chainConfig: chainConfig, eventMux: ctx.EventMux, - peers: peers, - reqDist: newRequestDistributor(peers, quitSync), + reqDist: newRequestDistributor(peers, &mclock.System{}), accountManager: ctx.AccountManager, engine: eth.CreateConsensusEngine(ctx, chainConfig, &config.Ethash, nil, false, chainDb), - shutdownChan: make(chan bool), - networkId: config.NetworkId, bloomRequests: make(chan chan *bloombits.Retrieval), bloomIndexer: eth.NewBloomIndexer(chainDb, params.BloomBitsBlocksClient, params.HelperTrieConfirmations), + serverPool: newServerPool(chainDb, config.UltraLightServers), } - - leth.relay = NewLesTxRelay(peers, leth.reqDist) - leth.serverPool = newServerPool(chainDb, quitSync, &leth.wg) leth.retriever = newRetrieveManager(peers, leth.reqDist, leth.serverPool) + leth.relay = newLesTxRelay(peers, leth.retriever) leth.odr = NewLesOdr(chainDb, light.DefaultClientIndexerConfig, leth.retriever) - leth.chtIndexer = light.NewChtIndexer(chainDb, leth.odr, params.CHTFrequencyClient, params.HelperTrieConfirmations) + leth.chtIndexer = light.NewChtIndexer(chainDb, leth.odr, params.CHTFrequency, params.HelperTrieConfirmations) leth.bloomTrieIndexer = light.NewBloomTrieIndexer(chainDb, leth.odr, params.BloomBitsBlocksClient, params.BloomTrieFrequency) leth.odr.SetIndexers(leth.chtIndexer, leth.bloomTrieIndexer, leth.bloomIndexer) + checkpoint := config.Checkpoint + if checkpoint == nil { + checkpoint = params.TrustedCheckpoints[genesisHash] + } // Note: NewLightChain adds the trusted checkpoint so it needs an ODR with // indexers already set but not started yet - if leth.blockchain, err = light.NewLightChain(leth.odr, leth.chainConfig, leth.engine); err != nil { + if leth.blockchain, err = light.NewLightChain(leth.odr, leth.chainConfig, leth.engine, checkpoint); err != nil { return nil, err } + leth.chainReader = leth.blockchain + leth.txPool = light.NewTxPool(leth.chainConfig, leth.blockchain, leth.relay) + + // Set up checkpoint oracle. + oracle := config.CheckpointOracle + if oracle == nil { + oracle = params.CheckpointOracles[genesisHash] + } + leth.oracle = newCheckpointOracle(oracle, leth.localCheckpoint) + // Note: AddChildIndexer starts the update process for the child leth.bloomIndexer.AddChildIndexer(leth.bloomTrieIndexer) leth.chtIndexer.Start(leth.blockchain) leth.bloomIndexer.Start(leth.blockchain) + leth.handler = newClientHandler(config.UltraLightServers, config.UltraLightFraction, checkpoint, leth) + if leth.handler.ulc != nil { + log.Warn("Ultra light client is enabled", "trustedNodes", len(leth.handler.ulc.keys), "minTrustedFraction", leth.handler.ulc.fraction) + leth.blockchain.DisableCheckFreq() + } // Rewind the chain in case of an incompatible config upgrade. if compat, ok := genesisErr.(*params.ConfigCompatError); ok { log.Warn("Rewinding chain to upgrade configuration", "err", compat) @@ -135,42 +141,26 @@ func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error) { rawdb.WriteChainConfig(chainDb, genesisHash, chainConfig) } - leth.txPool = light.NewTxPool(leth.chainConfig, leth.blockchain, leth.relay) - if leth.protocolManager, err = NewProtocolManager(leth.chainConfig, light.DefaultClientIndexerConfig, true, config.NetworkId, leth.eventMux, leth.engine, leth.peers, leth.blockchain, nil, chainDb, leth.odr, leth.relay, leth.serverPool, quitSync, &leth.wg); err != nil { - return nil, err - } - leth.ApiBackend = &LesApiBackend{leth, nil} + leth.ApiBackend = &LesApiBackend{ctx.ExtRPCEnabled(), leth, nil} gpoParams := config.GPO if gpoParams.Default == nil { - gpoParams.Default = config.MinerGasPrice + gpoParams.Default = config.Miner.GasPrice } leth.ApiBackend.gpo = gasprice.NewOracle(leth.ApiBackend, gpoParams) - return leth, nil -} -func lesTopic(genesisHash common.Hash, protocolVersion uint) discv5.Topic { - var name string - switch protocolVersion { - case lpv1: - name = "LES" - case lpv2: - name = "LES2" - default: - panic(nil) - } - return discv5.Topic(name + "@" + common.Bytes2Hex(genesisHash.Bytes()[0:8])) + return leth, nil } type LightDummyAPI struct{} // Etherbase is the address that mining rewards will be send to func (s *LightDummyAPI) Etherbase() (common.Address, error) { - return common.Address{}, fmt.Errorf("not supported") + return common.Address{}, fmt.Errorf("mining is not supported in light mode") } // Coinbase is the address that mining rewards will be send to (alias for Etherbase) func (s *LightDummyAPI) Coinbase() (common.Address, error) { - return common.Address{}, fmt.Errorf("not supported") + return common.Address{}, fmt.Errorf("mining is not supported in light mode") } // Hashrate returns the POW hashrate @@ -195,7 +185,7 @@ func (s *LightEthereum) APIs() []rpc.API { }, { Namespace: "eth", Version: "1.0", - Service: downloader.NewPublicDownloaderAPI(s.protocolManager.downloader, s.eventMux), + Service: downloader.NewPublicDownloaderAPI(s.handler.downloader, s.eventMux), Public: true, }, { Namespace: "eth", @@ -207,6 +197,11 @@ func (s *LightEthereum) APIs() []rpc.API { Version: "1.0", Service: s.netRPCService, Public: true, + }, { + Namespace: "les", + Version: "1.0", + Service: NewPrivateLightAPI(&s.lesCommons), + Public: false, }, }...) } @@ -219,44 +214,63 @@ func (s *LightEthereum) BlockChain() *light.LightChain { return s.blockchai func (s *LightEthereum) TxPool() *light.TxPool { return s.txPool } func (s *LightEthereum) Engine() consensus.Engine { return s.engine } func (s *LightEthereum) LesVersion() int { return int(ClientProtocolVersions[0]) } -func (s *LightEthereum) Downloader() *downloader.Downloader { return s.protocolManager.downloader } +func (s *LightEthereum) Downloader() *downloader.Downloader { return s.handler.downloader } func (s *LightEthereum) EventMux() *event.TypeMux { return s.eventMux } // Protocols implements node.Service, returning all the currently configured // network protocols to start. func (s *LightEthereum) Protocols() []p2p.Protocol { - return s.makeProtocols(ClientProtocolVersions) + return s.makeProtocols(ClientProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { + if p := s.peers.Peer(peerIdToString(id)); p != nil { + return p.Info() + } + return nil + }) } // Start implements node.Service, starting all internal goroutines needed by the -// Ethereum protocol implementation. +// light ethereum protocol implementation. func (s *LightEthereum) Start(srvr *p2p.Server) error { log.Warn("Light client mode is an experimental feature") + + // Start bloom request workers. + s.wg.Add(bloomServiceThreads) s.startBloomHandlers(params.BloomBitsBlocksClient) - s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.networkId) + + s.netRPCService = ethapi.NewPublicNetAPI(srvr, s.config.NetworkId) + // clients are searching for the first advertised protocol in the list protocolVersion := AdvertiseProtocolVersions[0] s.serverPool.start(srvr, lesTopic(s.blockchain.Genesis().Hash(), protocolVersion)) - s.protocolManager.Start(s.config.LightPeers) return nil } // Stop implements node.Service, terminating all internal goroutines used by the // Ethereum protocol. func (s *LightEthereum) Stop() error { + close(s.closeCh) + s.peers.Close() + s.reqDist.close() s.odr.Stop() + s.relay.Stop() s.bloomIndexer.Close() s.chtIndexer.Close() s.blockchain.Stop() - s.protocolManager.Stop() + s.handler.stop() s.txPool.Stop() s.engine.Close() - s.eventMux.Stop() - - time.Sleep(time.Millisecond * 200) + s.serverPool.stop() s.chainDb.Close() - close(s.shutdownChan) - + s.wg.Wait() + log.Info("Light ethereum stopped") return nil } + +// SetClient sets the rpc client and binds the registrar contract. +func (s *LightEthereum) SetContractBackend(backend bind.ContractBackend) { + if s.oracle == nil { + return + } + s.oracle.start(backend) +} diff --git a/les/client_handler.go b/les/client_handler.go new file mode 100644 index 000000000000..7fdb1657194c --- /dev/null +++ b/les/client_handler.go @@ -0,0 +1,403 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "math/big" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/params" +) + +// clientHandler is responsible for receiving and processing all incoming server +// responses. +type clientHandler struct { + ulc *ulc + checkpoint *params.TrustedCheckpoint + fetcher *lightFetcher + downloader *downloader.Downloader + backend *LightEthereum + + closeCh chan struct{} + wg sync.WaitGroup // WaitGroup used to track all connected peers. + syncDone func() // Test hooks when syncing is done. +} + +func newClientHandler(ulcServers []string, ulcFraction int, checkpoint *params.TrustedCheckpoint, backend *LightEthereum) *clientHandler { + handler := &clientHandler{ + checkpoint: checkpoint, + backend: backend, + closeCh: make(chan struct{}), + } + if ulcServers != nil { + ulc, err := newULC(ulcServers, ulcFraction) + if err != nil { + log.Error("Failed to initialize ultra light client") + } + handler.ulc = ulc + log.Info("Enable ultra light client mode") + } + var height uint64 + if checkpoint != nil { + height = (checkpoint.SectionIndex+1)*params.CHTFrequency - 1 + } + handler.fetcher = newLightFetcher(handler) + handler.downloader = downloader.New(height, backend.chainDb, nil, backend.eventMux, nil, backend.blockchain, handler.removePeer) + handler.backend.peers.notify((*downloaderPeerNotify)(handler)) + return handler +} + +func (h *clientHandler) stop() { + close(h.closeCh) + h.downloader.Terminate() + h.fetcher.close() + h.wg.Wait() +} + +// runPeer is the p2p protocol run function for the given version. +func (h *clientHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error { + trusted := false + if h.ulc != nil { + trusted = h.ulc.trusted(p.ID()) + } + peer := newPeer(int(version), h.backend.config.NetworkId, trusted, p, newMeteredMsgWriter(rw, int(version))) + peer.poolEntry = h.backend.serverPool.connect(peer, peer.Node()) + if peer.poolEntry == nil { + return p2p.DiscRequested + } + h.wg.Add(1) + defer h.wg.Done() + err := h.handle(peer) + h.backend.serverPool.disconnect(peer.poolEntry) + return err +} + +func (h *clientHandler) handle(p *peer) error { + if h.backend.peers.Len() >= h.backend.config.LightPeers && !p.Peer.Info().Network.Trusted { + return p2p.DiscTooManyPeers + } + p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) + + // Execute the LES handshake + var ( + head = h.backend.blockchain.CurrentHeader() + hash = head.Hash() + number = head.Number.Uint64() + td = h.backend.blockchain.GetTd(hash, number) + ) + if err := p.Handshake(td, hash, number, h.backend.blockchain.Genesis().Hash(), nil); err != nil { + p.Log().Debug("Light Ethereum handshake failed", "err", err) + return err + } + // Register the peer locally + if err := h.backend.peers.Register(p); err != nil { + p.Log().Error("Light Ethereum peer registration failed", "err", err) + return err + } + serverConnectionGauge.Update(int64(h.backend.peers.Len())) + + connectedAt := mclock.Now() + defer func() { + h.backend.peers.Unregister(p.id) + connectionTimer.Update(time.Duration(mclock.Now() - connectedAt)) + serverConnectionGauge.Update(int64(h.backend.peers.Len())) + }() + + h.fetcher.announce(p, p.headInfo) + + // pool entry can be nil during the unit test. + if p.poolEntry != nil { + h.backend.serverPool.registered(p.poolEntry) + } + // Spawn a main loop to handle all incoming messages. + for { + if err := h.handleMsg(p); err != nil { + p.Log().Debug("Light Ethereum message handling failed", "err", err) + p.fcServer.DumpLogs() + return err + } + } +} + +// handleMsg is invoked whenever an inbound message is received from a remote +// peer. The remote connection is torn down upon returning any error. +func (h *clientHandler) handleMsg(p *peer) error { + // Read the next message from the remote peer, and ensure it's fully consumed + msg, err := p.rw.ReadMsg() + if err != nil { + return err + } + p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) + + if msg.Size > ProtocolMaxMsgSize { + return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) + } + defer msg.Discard() + + var deliverMsg *Msg + + // Handle the message depending on its contents + switch msg.Code { + case AnnounceMsg: + p.Log().Trace("Received announce message") + var req announceData + if err := msg.Decode(&req); err != nil { + return errResp(ErrDecode, "%v: %v", msg, err) + } + if err := req.sanityCheck(); err != nil { + return err + } + update, size := req.Update.decode() + if p.rejectUpdate(size) { + return errResp(ErrRequestRejected, "") + } + p.updateFlowControl(update) + + if req.Hash != (common.Hash{}) { + if p.announceType == announceTypeNone { + return errResp(ErrUnexpectedResponse, "") + } + if p.announceType == announceTypeSigned { + if err := req.checkSignature(p.ID(), update); err != nil { + p.Log().Trace("Invalid announcement signature", "err", err) + return err + } + p.Log().Trace("Valid announcement signature") + } + p.Log().Trace("Announce message content", "number", req.Number, "hash", req.Hash, "td", req.Td, "reorg", req.ReorgDepth) + h.fetcher.announce(p, &req) + } + case BlockHeadersMsg: + p.Log().Trace("Received block header response message") + var resp struct { + ReqID, BV uint64 + Headers []*types.Header + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + if h.fetcher.requestedID(resp.ReqID) { + h.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers) + } else { + if err := h.downloader.DeliverHeaders(p.id, resp.Headers); err != nil { + log.Debug("Failed to deliver headers", "err", err) + } + } + case BlockBodiesMsg: + p.Log().Trace("Received block bodies response") + var resp struct { + ReqID, BV uint64 + Data []*types.Body + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgBlockBodies, + ReqID: resp.ReqID, + Obj: resp.Data, + } + case CodeMsg: + p.Log().Trace("Received code response") + var resp struct { + ReqID, BV uint64 + Data [][]byte + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgCode, + ReqID: resp.ReqID, + Obj: resp.Data, + } + case ReceiptsMsg: + p.Log().Trace("Received receipts response") + var resp struct { + ReqID, BV uint64 + Receipts []types.Receipts + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgReceipts, + ReqID: resp.ReqID, + Obj: resp.Receipts, + } + case ProofsV2Msg: + p.Log().Trace("Received les/2 proofs response") + var resp struct { + ReqID, BV uint64 + Data light.NodeList + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgProofsV2, + ReqID: resp.ReqID, + Obj: resp.Data, + } + case HelperTrieProofsMsg: + p.Log().Trace("Received helper trie proof response") + var resp struct { + ReqID, BV uint64 + Data HelperTrieResps + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgHelperTrieProofs, + ReqID: resp.ReqID, + Obj: resp.Data, + } + case TxStatusMsg: + p.Log().Trace("Received tx status response") + var resp struct { + ReqID, BV uint64 + Status []light.TxStatus + } + if err := msg.Decode(&resp); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ReceivedReply(resp.ReqID, resp.BV) + deliverMsg = &Msg{ + MsgType: MsgTxStatus, + ReqID: resp.ReqID, + Obj: resp.Status, + } + case StopMsg: + p.freezeServer(true) + h.backend.retriever.frozen(p) + p.Log().Debug("Service stopped") + case ResumeMsg: + var bv uint64 + if err := msg.Decode(&bv); err != nil { + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + p.fcServer.ResumeFreeze(bv) + p.freezeServer(false) + p.Log().Debug("Service resumed") + default: + p.Log().Trace("Received invalid message", "code", msg.Code) + return errResp(ErrInvalidMsgCode, "%v", msg.Code) + } + // Deliver the received response to retriever. + if deliverMsg != nil { + if err := h.backend.retriever.deliver(p, deliverMsg); err != nil { + p.responseErrors++ + if p.responseErrors > maxResponseErrors { + return err + } + } + } + return nil +} + +func (h *clientHandler) removePeer(id string) { + h.backend.peers.Unregister(id) +} + +type peerConnection struct { + handler *clientHandler + peer *peer +} + +func (pc *peerConnection) Head() (common.Hash, *big.Int) { + return pc.peer.HeadAndTd() +} + +func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool) error { + rq := &distReq{ + getCost: func(dp distPeer) uint64 { + peer := dp.(*peer) + return peer.GetRequestCost(GetBlockHeadersMsg, amount) + }, + canSend: func(dp distPeer) bool { + return dp.(*peer) == pc.peer + }, + request: func(dp distPeer) func() { + reqID := genReqID() + peer := dp.(*peer) + cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) + peer.fcServer.QueuedRequest(reqID, cost) + return func() { peer.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse) } + }, + } + _, ok := <-pc.handler.backend.reqDist.queue(rq) + if !ok { + return light.ErrNoPeers + } + return nil +} + +func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool) error { + rq := &distReq{ + getCost: func(dp distPeer) uint64 { + peer := dp.(*peer) + return peer.GetRequestCost(GetBlockHeadersMsg, amount) + }, + canSend: func(dp distPeer) bool { + return dp.(*peer) == pc.peer + }, + request: func(dp distPeer) func() { + reqID := genReqID() + peer := dp.(*peer) + cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) + peer.fcServer.QueuedRequest(reqID, cost) + return func() { peer.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse) } + }, + } + _, ok := <-pc.handler.backend.reqDist.queue(rq) + if !ok { + return light.ErrNoPeers + } + return nil +} + +// downloaderPeerNotify implements peerSetNotify +type downloaderPeerNotify clientHandler + +func (d *downloaderPeerNotify) registerPeer(p *peer) { + h := (*clientHandler)(d) + pc := &peerConnection{ + handler: h, + peer: p, + } + h.downloader.RegisterLightPeer(p.id, ethVersion, pc) +} + +func (d *downloaderPeerNotify) unregisterPeer(p *peer) { + h := (*clientHandler)(d) + h.downloader.UnregisterPeer(p.id) +} diff --git a/les/clientpool.go b/les/clientpool.go new file mode 100644 index 000000000000..6773aab551f8 --- /dev/null +++ b/les/clientpool.go @@ -0,0 +1,609 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "io" + "math" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" +) + +const ( + negBalanceExpTC = time.Hour // time constant for exponentially reducing negative balance + fixedPointMultiplier = 0x1000000 // constant to convert logarithms to fixed point format + connectedBias = time.Minute * 5 // this bias is applied in favor of already connected clients in order to avoid kicking them out very soon + lazyQueueRefresh = time.Second * 10 // refresh period of the connected queue +) + +var ( + clientPoolDbKey = []byte("clientPool") + clientBalanceDbKey = []byte("clientPool-balance") +) + +// clientPool implements a client database that assigns a priority to each client +// based on a positive and negative balance. Positive balance is externally assigned +// to prioritized clients and is decreased with connection time and processed +// requests (unless the price factors are zero). If the positive balance is zero +// then negative balance is accumulated. Balance tracking and priority calculation +// for connected clients is done by balanceTracker. connectedQueue ensures that +// clients with the lowest positive or highest negative balance get evicted when +// the total capacity allowance is full and new clients with a better balance want +// to connect. Already connected nodes receive a small bias in their favor in order +// to avoid accepting and instantly kicking out clients. +// Balances of disconnected clients are stored in posBalanceQueue and negBalanceQueue +// and are also saved in the database. Negative balance is transformed into a +// logarithmic form with a constantly shifting linear offset in order to implement +// an exponential decrease. negBalanceQueue has a limited size and drops the smallest +// values when necessary. Positive balances are stored in the database as long as +// they exist, posBalanceQueue only acts as a cache for recently accessed entries. +type clientPool struct { + db ethdb.Database + lock sync.Mutex + clock mclock.Clock + stopCh chan chan struct{} + closed bool + removePeer func(enode.ID) + + queueLimit, countLimit int + freeClientCap, capacityLimit, connectedCapacity uint64 + + connectedMap map[enode.ID]*clientInfo + posBalanceMap map[enode.ID]*posBalance + negBalanceMap map[string]*negBalance + connectedQueue *prque.LazyQueue + posBalanceQueue, negBalanceQueue *prque.Prque + posFactors, negFactors priceFactors + posBalanceAccessCounter int64 + startupTime mclock.AbsTime + logOffsetAtStartup int64 +} + +// clientPeer represents a client in the pool. +// Positive balances are assigned to node key while negative balances are assigned +// to freeClientId. Currently network IP address without port is used because +// clients have a limited access to IP addresses while new node keys can be easily +// generated so it would be useless to assign a negative value to them. +type clientPeer interface { + ID() enode.ID + freeClientId() string + updateCapacity(uint64) +} + +// clientInfo represents a connected client +type clientInfo struct { + address string + id enode.ID + capacity uint64 + priority bool + pool *clientPool + peer clientPeer + queueIndex int // position in connectedQueue + balanceTracker balanceTracker +} + +// connSetIndex callback updates clientInfo item index in connectedQueue +func connSetIndex(a interface{}, index int) { + a.(*clientInfo).queueIndex = index +} + +// connPriority callback returns actual priority of clientInfo item in connectedQueue +func connPriority(a interface{}, now mclock.AbsTime) int64 { + c := a.(*clientInfo) + return c.balanceTracker.getPriority(now) +} + +// connMaxPriority callback returns estimated maximum priority of clientInfo item in connectedQueue +func connMaxPriority(a interface{}, until mclock.AbsTime) int64 { + c := a.(*clientInfo) + pri := c.balanceTracker.estimatedPriority(until, true) + c.balanceTracker.addCallback(balanceCallbackQueue, pri+1, func() { + c.pool.lock.Lock() + if c.queueIndex != -1 { + c.pool.connectedQueue.Update(c.queueIndex) + } + c.pool.lock.Unlock() + }) + return pri +} + +// priceFactors determine the pricing policy (may apply either to positive or +// negative balances which may have different factors). +// - timeFactor is cost unit per nanosecond of connection time +// - capacityFactor is cost unit per nanosecond of connection time per 1000000 capacity +// - requestFactor is cost unit per request "realCost" unit +type priceFactors struct { + timeFactor, capacityFactor, requestFactor float64 +} + +// newClientPool creates a new client pool +func newClientPool(db ethdb.Database, freeClientCap uint64, queueLimit int, clock mclock.Clock, removePeer func(enode.ID)) *clientPool { + pool := &clientPool{ + db: db, + clock: clock, + connectedMap: make(map[enode.ID]*clientInfo), + posBalanceMap: make(map[enode.ID]*posBalance), + negBalanceMap: make(map[string]*negBalance), + connectedQueue: prque.NewLazyQueue(connSetIndex, connPriority, connMaxPriority, clock, lazyQueueRefresh), + negBalanceQueue: prque.New(negSetIndex), + posBalanceQueue: prque.New(posSetIndex), + freeClientCap: freeClientCap, + queueLimit: queueLimit, + removePeer: removePeer, + stopCh: make(chan chan struct{}), + } + pool.loadFromDb() + go func() { + for { + select { + case <-clock.After(lazyQueueRefresh): + pool.lock.Lock() + pool.connectedQueue.Refresh() + pool.lock.Unlock() + case stop := <-pool.stopCh: + close(stop) + return + } + } + }() + return pool +} + +// stop shuts the client pool down +func (f *clientPool) stop() { + stop := make(chan struct{}) + f.stopCh <- stop + <-stop + f.lock.Lock() + f.closed = true + f.saveToDb() + f.lock.Unlock() +} + +// connect should be called after a successful handshake. If the connection was +// rejected, there is no need to call disconnect. +func (f *clientPool) connect(peer clientPeer, capacity uint64) bool { + f.lock.Lock() + defer f.lock.Unlock() + + // Short circuit is clientPool is already closed. + if f.closed { + return false + } + // Dedup connected peers. + id, freeID := peer.ID(), peer.freeClientId() + if _, ok := f.connectedMap[id]; ok { + clientRejectedMeter.Mark(1) + log.Debug("Client already connected", "address", freeID, "id", peerIdToString(id)) + return false + } + // Create a clientInfo but do not add it yet + now := f.clock.Now() + posBalance := f.getPosBalance(id).value + e := &clientInfo{pool: f, peer: peer, address: freeID, queueIndex: -1, id: id, priority: posBalance != 0} + + var negBalance uint64 + nb := f.negBalanceMap[freeID] + if nb != nil { + negBalance = uint64(math.Exp(float64(nb.logValue-f.logOffset(now)) / fixedPointMultiplier)) + } + // If the client is a free client, assign with a low free capacity, + // Otherwise assign with the given value(priority client) + if !e.priority { + capacity = f.freeClientCap + } + // Ensure the capacity will never lower than the free capacity. + if capacity < f.freeClientCap { + capacity = f.freeClientCap + } + e.capacity = capacity + + e.balanceTracker.init(f.clock, capacity) + e.balanceTracker.setBalance(posBalance, negBalance) + f.setClientPriceFactors(e) + + // If the number of clients already connected in the clientpool exceeds its + // capacity, evict some clients with lowest priority. + // + // If the priority of the newly added client is lower than the priority of + // all connected clients, the client is rejected. + newCapacity := f.connectedCapacity + capacity + newCount := f.connectedQueue.Size() + 1 + if newCapacity > f.capacityLimit || newCount > f.countLimit { + var ( + kickList []*clientInfo + kickPriority int64 + ) + f.connectedQueue.MultiPop(func(data interface{}, priority int64) bool { + c := data.(*clientInfo) + kickList = append(kickList, c) + kickPriority = priority + newCapacity -= c.capacity + newCount-- + return newCapacity > f.capacityLimit || newCount > f.countLimit + }) + if newCapacity > f.capacityLimit || newCount > f.countLimit || (e.balanceTracker.estimatedPriority(now+mclock.AbsTime(connectedBias), false)-kickPriority) > 0 { + // reject client + for _, c := range kickList { + f.connectedQueue.Push(c) + } + clientRejectedMeter.Mark(1) + log.Debug("Client rejected", "address", freeID, "id", peerIdToString(id)) + return false + } + // accept new client, drop old ones + for _, c := range kickList { + f.dropClient(c, now, true) + } + } + // client accepted, finish setting it up + if nb != nil { + delete(f.negBalanceMap, freeID) + f.negBalanceQueue.Remove(nb.queueIndex) + } + if e.priority { + e.balanceTracker.addCallback(balanceCallbackZero, 0, func() { f.balanceExhausted(id) }) + } + f.connectedMap[id] = e + f.connectedQueue.Push(e) + f.connectedCapacity += e.capacity + totalConnectedGauge.Update(int64(f.connectedCapacity)) + if e.capacity != f.freeClientCap { + e.peer.updateCapacity(e.capacity) + } + clientConnectedMeter.Mark(1) + log.Debug("Client accepted", "address", freeID) + return true +} + +// disconnect should be called when a connection is terminated. If the disconnection +// was initiated by the pool itself using disconnectFn then calling disconnect is +// not necessary but permitted. +func (f *clientPool) disconnect(p clientPeer) { + f.lock.Lock() + defer f.lock.Unlock() + + if f.closed { + return + } + address := p.freeClientId() + id := p.ID() + // Short circuit if the peer hasn't been registered. + e := f.connectedMap[id] + if e == nil { + log.Debug("Client not connected", "address", address, "id", peerIdToString(id)) + return + } + f.dropClient(e, f.clock.Now(), false) +} + +// dropClient removes a client from the connected queue and finalizes its balance. +// If kick is true then it also initiates the disconnection. +func (f *clientPool) dropClient(e *clientInfo, now mclock.AbsTime, kick bool) { + if _, ok := f.connectedMap[e.id]; !ok { + return + } + f.finalizeBalance(e, now) + f.connectedQueue.Remove(e.queueIndex) + delete(f.connectedMap, e.id) + f.connectedCapacity -= e.capacity + totalConnectedGauge.Update(int64(f.connectedCapacity)) + if kick { + clientKickedMeter.Mark(1) + log.Debug("Client kicked out", "address", e.address) + f.removePeer(e.id) + } else { + clientDisconnectedMeter.Mark(1) + log.Debug("Client disconnected", "address", e.address) + } +} + +// finalizeBalance stops the balance tracker, retrieves the final balances and +// stores them in posBalanceQueue and negBalanceQueue +func (f *clientPool) finalizeBalance(c *clientInfo, now mclock.AbsTime) { + c.balanceTracker.stop(now) + pos, neg := c.balanceTracker.getBalance(now) + pb := f.getPosBalance(c.id) + pb.value = pos + f.storePosBalance(pb) + if neg < 1 { + neg = 1 + } + nb := &negBalance{address: c.address, queueIndex: -1, logValue: int64(math.Log(float64(neg))*fixedPointMultiplier) + f.logOffset(now)} + f.negBalanceMap[c.address] = nb + f.negBalanceQueue.Push(nb, -nb.logValue) + if f.negBalanceQueue.Size() > f.queueLimit { + nn := f.negBalanceQueue.PopItem().(*negBalance) + delete(f.negBalanceMap, nn.address) + } +} + +// balanceExhausted callback is called by balanceTracker when positive balance is exhausted. +// It revokes priority status and also reduces the client capacity if necessary. +func (f *clientPool) balanceExhausted(id enode.ID) { + f.lock.Lock() + defer f.lock.Unlock() + + c := f.connectedMap[id] + if c == nil || !c.priority { + return + } + c.priority = false + if c.capacity != f.freeClientCap { + f.connectedCapacity += f.freeClientCap - c.capacity + totalConnectedGauge.Update(int64(f.connectedCapacity)) + c.capacity = f.freeClientCap + c.peer.updateCapacity(c.capacity) + } +} + +// setConnLimit sets the maximum number and total capacity of connected clients, +// dropping some of them if necessary. +func (f *clientPool) setLimits(count int, totalCap uint64) { + f.lock.Lock() + defer f.lock.Unlock() + + f.countLimit = count + f.capacityLimit = totalCap + if f.connectedCapacity > f.capacityLimit || f.connectedQueue.Size() > f.countLimit { + now := mclock.Now() + f.connectedQueue.MultiPop(func(data interface{}, priority int64) bool { + c := data.(*clientInfo) + f.dropClient(c, now, true) + return f.connectedCapacity > f.capacityLimit || f.connectedQueue.Size() > f.countLimit + }) + } +} + +// requestCost feeds request cost after serving a request from the given peer. +func (f *clientPool) requestCost(p *peer, cost uint64) { + f.lock.Lock() + defer f.lock.Unlock() + + info, exist := f.connectedMap[p.ID()] + if !exist || f.closed { + return + } + info.balanceTracker.requestCost(cost) +} + +// logOffset calculates the time-dependent offset for the logarithmic +// representation of negative balance +func (f *clientPool) logOffset(now mclock.AbsTime) int64 { + // Note: fixedPointMultiplier acts as a multiplier here; the reason for dividing the divisor + // is to avoid int64 overflow. We assume that int64(negBalanceExpTC) >> fixedPointMultiplier. + logDecay := int64((time.Duration(now - f.startupTime)) / (negBalanceExpTC / fixedPointMultiplier)) + return f.logOffsetAtStartup + logDecay +} + +// setPriceFactors changes pricing factors for both positive and negative balances. +// Applies to connected clients and also future connections. +func (f *clientPool) setPriceFactors(posFactors, negFactors priceFactors) { + f.lock.Lock() + defer f.lock.Unlock() + + f.posFactors, f.negFactors = posFactors, negFactors + for _, c := range f.connectedMap { + f.setClientPriceFactors(c) + } +} + +// setClientPriceFactors sets the pricing factors for an individual connected client +func (f *clientPool) setClientPriceFactors(c *clientInfo) { + c.balanceTracker.setFactors(true, f.negFactors.timeFactor+float64(c.capacity)*f.negFactors.capacityFactor/1000000, f.negFactors.requestFactor) + c.balanceTracker.setFactors(false, f.posFactors.timeFactor+float64(c.capacity)*f.posFactors.capacityFactor/1000000, f.posFactors.requestFactor) +} + +// clientPoolStorage is the RLP representation of the pool's database storage +type clientPoolStorage struct { + LogOffset uint64 + List []*negBalance +} + +// loadFromDb restores pool status from the database storage +// (automatically called at initialization) +func (f *clientPool) loadFromDb() { + enc, err := f.db.Get(clientPoolDbKey) + if err != nil { + return + } + var storage clientPoolStorage + err = rlp.DecodeBytes(enc, &storage) + if err != nil { + log.Error("Failed to decode client list", "err", err) + return + } + f.logOffsetAtStartup = int64(storage.LogOffset) + f.startupTime = f.clock.Now() + for _, e := range storage.List { + log.Debug("Loaded free client record", "address", e.address, "logValue", e.logValue) + f.negBalanceMap[e.address] = e + f.negBalanceQueue.Push(e, -e.logValue) + } +} + +// saveToDb saves pool status to the database storage +// (automatically called during shutdown) +func (f *clientPool) saveToDb() { + now := f.clock.Now() + storage := clientPoolStorage{ + LogOffset: uint64(f.logOffset(now)), + } + for _, c := range f.connectedMap { + f.finalizeBalance(c, now) + } + i := 0 + storage.List = make([]*negBalance, len(f.negBalanceMap)) + for _, e := range f.negBalanceMap { + storage.List[i] = e + i++ + } + enc, err := rlp.EncodeToBytes(storage) + if err != nil { + log.Error("Failed to encode negative balance list", "err", err) + } else { + f.db.Put(clientPoolDbKey, enc) + } +} + +// storePosBalance stores a single positive balance entry in the database +func (f *clientPool) storePosBalance(b *posBalance) { + if b.value == b.lastStored { + return + } + enc, err := rlp.EncodeToBytes(b) + if err != nil { + log.Error("Failed to encode client balance", "err", err) + } else { + f.db.Put(append(clientBalanceDbKey, b.id[:]...), enc) + b.lastStored = b.value + } +} + +// getPosBalance retrieves a single positive balance entry from cache or the database +func (f *clientPool) getPosBalance(id enode.ID) *posBalance { + if b, ok := f.posBalanceMap[id]; ok { + f.posBalanceQueue.Remove(b.queueIndex) + f.posBalanceAccessCounter-- + f.posBalanceQueue.Push(b, f.posBalanceAccessCounter) + return b + } + balance := &posBalance{} + if enc, err := f.db.Get(append(clientBalanceDbKey, id[:]...)); err == nil { + if err := rlp.DecodeBytes(enc, balance); err != nil { + log.Error("Failed to decode client balance", "err", err) + balance = &posBalance{} + } + } + balance.id = id + balance.queueIndex = -1 + if f.posBalanceQueue.Size() >= f.queueLimit { + b := f.posBalanceQueue.PopItem().(*posBalance) + f.storePosBalance(b) + delete(f.posBalanceMap, b.id) + } + f.posBalanceAccessCounter-- + f.posBalanceQueue.Push(balance, f.posBalanceAccessCounter) + f.posBalanceMap[id] = balance + return balance +} + +// addBalance updates the positive balance of a client. +// If setTotal is false then the given amount is added to the balance. +// If setTotal is true then amount represents the total amount ever added to the +// given ID and positive balance is increased by (amount-lastTotal) while lastTotal +// is updated to amount. This method also allows removing positive balance. +func (f *clientPool) addBalance(id enode.ID, amount uint64, setTotal bool) { + f.lock.Lock() + defer f.lock.Unlock() + + pb := f.getPosBalance(id) + c := f.connectedMap[id] + var negBalance uint64 + if c != nil { + pb.value, negBalance = c.balanceTracker.getBalance(f.clock.Now()) + } + if setTotal { + if pb.value+amount > pb.lastTotal { + pb.value += amount - pb.lastTotal + } else { + pb.value = 0 + } + pb.lastTotal = amount + } else { + pb.value += amount + pb.lastTotal += amount + } + f.storePosBalance(pb) + if c != nil { + c.balanceTracker.setBalance(pb.value, negBalance) + if !c.priority && pb.value > 0 { + c.priority = true + c.balanceTracker.addCallback(balanceCallbackZero, 0, func() { f.balanceExhausted(id) }) + } + } +} + +// posBalance represents a recently accessed positive balance entry +type posBalance struct { + id enode.ID + value, lastStored, lastTotal uint64 + queueIndex int // position in posBalanceQueue +} + +// EncodeRLP implements rlp.Encoder +func (e *posBalance) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, []interface{}{e.value, e.lastTotal}) +} + +// DecodeRLP implements rlp.Decoder +func (e *posBalance) DecodeRLP(s *rlp.Stream) error { + var entry struct { + Value, LastTotal uint64 + } + if err := s.Decode(&entry); err != nil { + return err + } + e.value = entry.Value + e.lastStored = entry.Value + e.lastTotal = entry.LastTotal + return nil +} + +// posSetIndex callback updates posBalance item index in posBalanceQueue +func posSetIndex(a interface{}, index int) { + a.(*posBalance).queueIndex = index +} + +// negBalance represents a negative balance entry of a disconnected client +type negBalance struct { + address string + logValue int64 + queueIndex int // position in negBalanceQueue +} + +// EncodeRLP implements rlp.Encoder +func (e *negBalance) EncodeRLP(w io.Writer) error { + return rlp.Encode(w, []interface{}{e.address, uint64(e.logValue)}) +} + +// DecodeRLP implements rlp.Decoder +func (e *negBalance) DecodeRLP(s *rlp.Stream) error { + var entry struct { + Address string + LogValue uint64 + } + if err := s.Decode(&entry); err != nil { + return err + } + e.address = entry.Address + e.logValue = int64(entry.LogValue) + e.queueIndex = -1 + return nil +} + +// negSetIndex callback updates negBalance item index in negBalanceQueue +func negSetIndex(a interface{}, index int) { + a.(*negBalance).queueIndex = index +} diff --git a/les/clientpool_test.go b/les/clientpool_test.go new file mode 100644 index 000000000000..225f828ec623 --- /dev/null +++ b/les/clientpool_test.go @@ -0,0 +1,180 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "fmt" + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestClientPoolL10C100Free(t *testing.T) { + testClientPool(t, 10, 100, 0, true) +} + +func TestClientPoolL40C200Free(t *testing.T) { + testClientPool(t, 40, 200, 0, true) +} + +func TestClientPoolL100C300Free(t *testing.T) { + testClientPool(t, 100, 300, 0, true) +} + +func TestClientPoolL10C100P4(t *testing.T) { + testClientPool(t, 10, 100, 4, false) +} + +func TestClientPoolL40C200P30(t *testing.T) { + testClientPool(t, 40, 200, 30, false) +} + +func TestClientPoolL100C300P20(t *testing.T) { + testClientPool(t, 100, 300, 20, false) +} + +const testClientPoolTicks = 500000 + +type poolTestPeer int + +func (i poolTestPeer) ID() enode.ID { + return enode.ID{byte(i % 256), byte(i >> 8)} +} + +func (i poolTestPeer) freeClientId() string { + return fmt.Sprintf("addr #%d", i) +} + +func (i poolTestPeer) updateCapacity(uint64) {} + +func testClientPool(t *testing.T, connLimit, clientCount, paidCount int, randomDisconnect bool) { + rand.Seed(time.Now().UnixNano()) + var ( + clock mclock.Simulated + db = rawdb.NewMemoryDatabase() + connected = make([]bool, clientCount) + connTicks = make([]int, clientCount) + disconnCh = make(chan int, clientCount) + disconnFn = func(id enode.ID) { + disconnCh <- int(id[0]) + int(id[1])<<8 + } + pool = newClientPool(db, 1, 10000, &clock, disconnFn) + ) + pool.setLimits(connLimit, uint64(connLimit)) + pool.setPriceFactors(priceFactors{1, 0, 1}, priceFactors{1, 0, 1}) + + // pool should accept new peers up to its connected limit + for i := 0; i < connLimit; i++ { + if pool.connect(poolTestPeer(i), 0) { + connected[i] = true + } else { + t.Fatalf("Test peer #%d rejected", i) + } + } + // since all accepted peers are new and should not be kicked out, the next one should be rejected + if pool.connect(poolTestPeer(connLimit), 0) { + connected[connLimit] = true + t.Fatalf("Peer accepted over connected limit") + } + + // randomly connect and disconnect peers, expect to have a similar total connection time at the end + for tickCounter := 0; tickCounter < testClientPoolTicks; tickCounter++ { + clock.Run(1 * time.Second) + //time.Sleep(time.Microsecond * 100) + + if tickCounter == testClientPoolTicks/4 { + // give a positive balance to some of the peers + amount := uint64(testClientPoolTicks / 2 * 1000000000) // enough for half of the simulation period + for i := 0; i < paidCount; i++ { + pool.addBalance(poolTestPeer(i).ID(), amount, false) + } + } + + i := rand.Intn(clientCount) + if connected[i] { + if randomDisconnect { + pool.disconnect(poolTestPeer(i)) + connected[i] = false + connTicks[i] += tickCounter + } + } else { + if pool.connect(poolTestPeer(i), 0) { + connected[i] = true + connTicks[i] -= tickCounter + } + } + pollDisconnects: + for { + select { + case i := <-disconnCh: + pool.disconnect(poolTestPeer(i)) + if connected[i] { + connTicks[i] += tickCounter + connected[i] = false + } + default: + break pollDisconnects + } + } + } + + expTicks := testClientPoolTicks/2*connLimit/clientCount + testClientPoolTicks/2*(connLimit-paidCount)/(clientCount-paidCount) + expMin := expTicks - expTicks/10 + expMax := expTicks + expTicks/10 + paidTicks := testClientPoolTicks/2*connLimit/clientCount + testClientPoolTicks/2 + paidMin := paidTicks - paidTicks/10 + paidMax := paidTicks + paidTicks/10 + + // check if the total connected time of peers are all in the expected range + for i, c := range connected { + if c { + connTicks[i] += testClientPoolTicks + } + min, max := expMin, expMax + if i < paidCount { + // expect a higher amount for clients with a positive balance + min, max = paidMin, paidMax + } + if connTicks[i] < min || connTicks[i] > max { + t.Errorf("Total connected time of test node #%d (%d) outside expected range (%d to %d)", i, connTicks[i], min, max) + } + } + + // a previously unknown peer should be accepted now + if !pool.connect(poolTestPeer(54321), 0) { + t.Fatalf("Previously unknown peer rejected") + } + + // close and restart pool + pool.stop() + pool = newClientPool(db, 1, 10000, &clock, func(id enode.ID) {}) + pool.setLimits(connLimit, uint64(connLimit)) + + // try connecting all known peers (connLimit should be filled up) + for i := 0; i < clientCount; i++ { + pool.connect(poolTestPeer(i), 0) + } + // expect pool to remember known nodes and kick out one of them to accept a new one + if !pool.connect(poolTestPeer(54322), 0) { + t.Errorf("Previously unknown peer rejected after restarting pool") + } + pool.stop() +} diff --git a/les/commons.go b/les/commons.go index 21fb25714afc..ad3c5aef3d75 100644 --- a/les/commons.go +++ b/les/commons.go @@ -19,24 +19,54 @@ package les import ( "fmt" "math/big" + "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/discv5" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" ) +func errResp(code errCode, format string, v ...interface{}) error { + return fmt.Errorf("%v - %v", code, fmt.Sprintf(format, v...)) +} + +func lesTopic(genesisHash common.Hash, protocolVersion uint) discv5.Topic { + var name string + switch protocolVersion { + case lpv2: + name = "LES2" + default: + panic(nil) + } + return discv5.Topic(name + "@" + common.Bytes2Hex(genesisHash.Bytes()[0:8])) +} + +type chainReader interface { + CurrentHeader() *types.Header +} + // lesCommons contains fields needed by both server and client. type lesCommons struct { + genesis common.Hash config *eth.Config + chainConfig *params.ChainConfig iConfig *light.IndexerConfig chainDb ethdb.Database - protocolManager *ProtocolManager + peers *peerSet + chainReader chainReader chtIndexer, bloomTrieIndexer *core.ChainIndexer + oracle *checkpointOracle + + closeCh chan struct{} + wg sync.WaitGroup } // NodeInfo represents a short summary of the Ethereum sub-protocol metadata @@ -51,7 +81,7 @@ type NodeInfo struct { } // makeProtocols creates protocol descriptors for the given LES versions. -func (c *lesCommons) makeProtocols(versions []uint) []p2p.Protocol { +func (c *lesCommons) makeProtocols(versions []uint, runPeer func(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error, peerInfo func(id enode.ID) interface{}) []p2p.Protocol { protos := make([]p2p.Protocol, len(versions)) for i, version := range versions { version := version @@ -60,15 +90,10 @@ func (c *lesCommons) makeProtocols(versions []uint) []p2p.Protocol { Version: version, Length: ProtocolLengths[version], NodeInfo: c.nodeInfo, - Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - return c.protocolManager.runPeer(version, p, rw) - }, - PeerInfo: func(id enode.ID) interface{} { - if p := c.protocolManager.peers.Peer(fmt.Sprintf("%x", id[:8])); p != nil { - return p.Info() - } - return nil + Run: func(peer *p2p.Peer, rw p2p.MsgReadWriter) error { + return runPeer(version, peer, rw) }, + PeerInfo: peerInfo, } } return protos @@ -76,45 +101,46 @@ func (c *lesCommons) makeProtocols(versions []uint) []p2p.Protocol { // nodeInfo retrieves some protocol metadata about the running host node. func (c *lesCommons) nodeInfo() interface{} { - var cht params.TrustedCheckpoint - sections, _, _ := c.chtIndexer.Sections() - sections2, _, _ := c.bloomTrieIndexer.Sections() - - if !c.protocolManager.lightSync { - // convert to client section size if running in server mode - sections /= c.iConfig.PairChtSize / c.iConfig.ChtSize + head := c.chainReader.CurrentHeader() + hash := head.Hash() + return &NodeInfo{ + Network: c.config.NetworkId, + Difficulty: rawdb.ReadTd(c.chainDb, hash, head.Number.Uint64()), + Genesis: c.genesis, + Config: c.chainConfig, + Head: hash, + CHT: c.latestLocalCheckpoint(), } +} - if sections2 < sections { +// latestLocalCheckpoint finds the common stored section index and returns a set +// of post-processed trie roots (CHT and BloomTrie) associated with the appropriate +// section index and head hash as a local checkpoint package. +func (c *lesCommons) latestLocalCheckpoint() params.TrustedCheckpoint { + sections, _, _ := c.chtIndexer.Sections() + sections2, _, _ := c.bloomTrieIndexer.Sections() + // Cap the section index if the two sections are not consistent. + if sections > sections2 { sections = sections2 } - if sections > 0 { - sectionIndex := sections - 1 - sectionHead := c.bloomTrieIndexer.SectionHead(sectionIndex) - var chtRoot common.Hash - if c.protocolManager.lightSync { - chtRoot = light.GetChtRoot(c.chainDb, sectionIndex, sectionHead) - } else { - idxV2 := (sectionIndex+1)*c.iConfig.PairChtSize/c.iConfig.ChtSize - 1 - chtRoot = light.GetChtRoot(c.chainDb, idxV2, sectionHead) - } - cht = params.TrustedCheckpoint{ - SectionIndex: sectionIndex, - SectionHead: sectionHead, - CHTRoot: chtRoot, - BloomRoot: light.GetBloomTrieRoot(c.chainDb, sectionIndex, sectionHead), - } + if sections == 0 { + // No checkpoint information can be provided. + return params.TrustedCheckpoint{} } + return c.localCheckpoint(sections - 1) +} - chain := c.protocolManager.blockchain - head := chain.CurrentHeader() - hash := head.Hash() - return &NodeInfo{ - Network: c.config.NetworkId, - Difficulty: chain.GetTd(hash, head.Number.Uint64()), - Genesis: chain.Genesis().Hash(), - Config: chain.Config(), - Head: chain.CurrentHeader().Hash(), - CHT: cht, +// localCheckpoint returns a set of post-processed trie roots (CHT and BloomTrie) +// associated with the appropriate head hash by specific section index. +// +// The returned checkpoint is only the checkpoint generated by the local indexers, +// not the stable checkpoint registered in the registrar contract. +func (c *lesCommons) localCheckpoint(index uint64) params.TrustedCheckpoint { + sectionHead := c.chtIndexer.SectionHead(index) + return params.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: sectionHead, + CHTRoot: light.GetChtRoot(c.chainDb, index, sectionHead), + BloomRoot: light.GetBloomTrieRoot(c.chainDb, index, sectionHead), } } diff --git a/les/costtracker.go b/les/costtracker.go new file mode 100644 index 000000000000..81da04566007 --- /dev/null +++ b/les/costtracker.go @@ -0,0 +1,516 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "math" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" +) + +const makeCostStats = false // make request cost statistics during operation + +var ( + // average request cost estimates based on serving time + reqAvgTimeCost = requestCostTable{ + GetBlockHeadersMsg: {150000, 30000}, + GetBlockBodiesMsg: {0, 700000}, + GetReceiptsMsg: {0, 1000000}, + GetCodeMsg: {0, 450000}, + GetProofsV2Msg: {0, 600000}, + GetHelperTrieProofsMsg: {0, 1000000}, + SendTxV2Msg: {0, 450000}, + GetTxStatusMsg: {0, 250000}, + } + // maximum incoming message size estimates + reqMaxInSize = requestCostTable{ + GetBlockHeadersMsg: {40, 0}, + GetBlockBodiesMsg: {0, 40}, + GetReceiptsMsg: {0, 40}, + GetCodeMsg: {0, 80}, + GetProofsV2Msg: {0, 80}, + GetHelperTrieProofsMsg: {0, 20}, + SendTxV2Msg: {0, 16500}, + GetTxStatusMsg: {0, 50}, + } + // maximum outgoing message size estimates + reqMaxOutSize = requestCostTable{ + GetBlockHeadersMsg: {0, 556}, + GetBlockBodiesMsg: {0, 100000}, + GetReceiptsMsg: {0, 200000}, + GetCodeMsg: {0, 50000}, + GetProofsV2Msg: {0, 4000}, + GetHelperTrieProofsMsg: {0, 4000}, + SendTxV2Msg: {0, 100}, + GetTxStatusMsg: {0, 100}, + } + // request amounts that have to fit into the minimum buffer size minBufferMultiplier times + minBufferReqAmount = map[uint64]uint64{ + GetBlockHeadersMsg: 192, + GetBlockBodiesMsg: 1, + GetReceiptsMsg: 1, + GetCodeMsg: 1, + GetProofsV2Msg: 1, + GetHelperTrieProofsMsg: 16, + SendTxV2Msg: 8, + GetTxStatusMsg: 64, + } + minBufferMultiplier = 3 +) + +const ( + maxCostFactor = 2 // ratio of maximum and average cost estimates + bufLimitRatio = 6000 // fixed bufLimit/MRR ratio + gfUsageThreshold = 0.5 + gfUsageTC = time.Second + gfRaiseTC = time.Second * 200 + gfDropTC = time.Second * 50 + gfDbKey = "_globalCostFactorV6" +) + +// costTracker is responsible for calculating costs and cost estimates on the +// server side. It continuously updates the global cost factor which is defined +// as the number of cost units per nanosecond of serving time in a single thread. +// It is based on statistics collected during serving requests in high-load periods +// and practically acts as a one-dimension request price scaling factor over the +// pre-defined cost estimate table. +// +// The reason for dynamically maintaining the global factor on the server side is: +// the estimated time cost of the request is fixed(hardcoded) but the configuration +// of the machine running the server is really different. Therefore, the request serving +// time in different machine will vary greatly. And also, the request serving time +// in same machine may vary greatly with different request pressure. +// +// In order to more effectively limit resources, we apply the global factor to serving +// time to make the result as close as possible to the estimated time cost no matter +// the server is slow or fast. And also we scale the totalRecharge with global factor +// so that fast server can serve more requests than estimation and slow server can +// reduce request pressure. +// +// Instead of scaling the cost values, the real value of cost units is changed by +// applying the factor to the serving times. This is more convenient because the +// changes in the cost factor can be applied immediately without always notifying +// the clients about the changed cost tables. +type costTracker struct { + db ethdb.Database + stopCh chan chan struct{} + + inSizeFactor float64 + outSizeFactor float64 + factor float64 + utilTarget float64 + minBufLimit uint64 + + gfLock sync.RWMutex + reqInfoCh chan reqInfo + totalRechargeCh chan uint64 + + stats map[uint64][]uint64 // Used for testing purpose. + + // TestHooks + testing bool // Disable real cost evaluation for testing purpose. + testCostList RequestCostList // Customized cost table for testing purpose. +} + +// newCostTracker creates a cost tracker and loads the cost factor statistics from the database. +// It also returns the minimum capacity that can be assigned to any peer. +func newCostTracker(db ethdb.Database, config *eth.Config) (*costTracker, uint64) { + utilTarget := float64(config.LightServ) * flowcontrol.FixedPointMultiplier / 100 + ct := &costTracker{ + db: db, + stopCh: make(chan chan struct{}), + reqInfoCh: make(chan reqInfo, 100), + utilTarget: utilTarget, + } + if config.LightIngress > 0 { + ct.inSizeFactor = utilTarget / float64(config.LightIngress) + } + if config.LightEgress > 0 { + ct.outSizeFactor = utilTarget / float64(config.LightEgress) + } + if makeCostStats { + ct.stats = make(map[uint64][]uint64) + for code := range reqAvgTimeCost { + ct.stats[code] = make([]uint64, 10) + } + } + ct.gfLoop() + costList := ct.makeCostList(ct.globalFactor() * 1.25) + for _, c := range costList { + amount := minBufferReqAmount[c.MsgCode] + cost := c.BaseCost + amount*c.ReqCost + if cost > ct.minBufLimit { + ct.minBufLimit = cost + } + } + ct.minBufLimit *= uint64(minBufferMultiplier) + return ct, (ct.minBufLimit-1)/bufLimitRatio + 1 +} + +// stop stops the cost tracker and saves the cost factor statistics to the database +func (ct *costTracker) stop() { + stopCh := make(chan struct{}) + ct.stopCh <- stopCh + <-stopCh + if makeCostStats { + ct.printStats() + } +} + +// makeCostList returns upper cost estimates based on the hardcoded cost estimate +// tables and the optionally specified incoming/outgoing bandwidth limits +func (ct *costTracker) makeCostList(globalFactor float64) RequestCostList { + maxCost := func(avgTimeCost, inSize, outSize uint64) uint64 { + cost := avgTimeCost * maxCostFactor + inSizeCost := uint64(float64(inSize) * ct.inSizeFactor * globalFactor) + if inSizeCost > cost { + cost = inSizeCost + } + outSizeCost := uint64(float64(outSize) * ct.outSizeFactor * globalFactor) + if outSizeCost > cost { + cost = outSizeCost + } + return cost + } + var list RequestCostList + for code, data := range reqAvgTimeCost { + baseCost := maxCost(data.baseCost, reqMaxInSize[code].baseCost, reqMaxOutSize[code].baseCost) + reqCost := maxCost(data.reqCost, reqMaxInSize[code].reqCost, reqMaxOutSize[code].reqCost) + if ct.minBufLimit != 0 { + // if minBufLimit is set then always enforce maximum request cost <= minBufLimit + maxCost := baseCost + reqCost*minBufferReqAmount[code] + if maxCost > ct.minBufLimit { + mul := 0.999 * float64(ct.minBufLimit) / float64(maxCost) + baseCost = uint64(float64(baseCost) * mul) + reqCost = uint64(float64(reqCost) * mul) + } + } + + list = append(list, requestCostListItem{ + MsgCode: code, + BaseCost: baseCost, + ReqCost: reqCost, + }) + } + return list +} + +// reqInfo contains the estimated time cost and the actual request serving time +// which acts as a feed source to update factor maintained by costTracker. +type reqInfo struct { + // avgTimeCost is the estimated time cost corresponding to maxCostTable. + avgTimeCost float64 + + // servingTime is the CPU time corresponding to the actual processing of + // the request. + servingTime float64 + + // msgCode indicates the type of request. + msgCode uint64 +} + +// gfLoop starts an event loop which updates the global cost factor which is +// calculated as a weighted average of the average estimate / serving time ratio. +// The applied weight equals the serving time if gfUsage is over a threshold, +// zero otherwise. gfUsage is the recent average serving time per time unit in +// an exponential moving window. This ensures that statistics are collected only +// under high-load circumstances where the measured serving times are relevant. +// The total recharge parameter of the flow control system which controls the +// total allowed serving time per second but nominated in cost units, should +// also be scaled with the cost factor and is also updated by this loop. +func (ct *costTracker) gfLoop() { + var ( + factor, totalRecharge float64 + gfLog, recentTime, recentAvg float64 + + lastUpdate, expUpdate = mclock.Now(), mclock.Now() + ) + + // Load historical cost factor statistics from the database. + data, _ := ct.db.Get([]byte(gfDbKey)) + if len(data) == 8 { + gfLog = math.Float64frombits(binary.BigEndian.Uint64(data[:])) + } + ct.factor = math.Exp(gfLog) + factor, totalRecharge = ct.factor, ct.utilTarget*ct.factor + + // In order to perform factor data statistics under the high request pressure, + // we only adjust factor when recent factor usage beyond the threshold. + threshold := gfUsageThreshold * float64(gfUsageTC) * ct.utilTarget / flowcontrol.FixedPointMultiplier + + go func() { + saveCostFactor := func() { + var data [8]byte + binary.BigEndian.PutUint64(data[:], math.Float64bits(gfLog)) + ct.db.Put([]byte(gfDbKey), data[:]) + log.Debug("global cost factor saved", "value", factor) + } + saveTicker := time.NewTicker(time.Minute * 10) + + for { + select { + case r := <-ct.reqInfoCh: + relCost := int64(factor * r.servingTime * 100 / r.avgTimeCost) // Convert the value to a percentage form + + // Record more metrics if we are debugging + if metrics.EnabledExpensive { + switch r.msgCode { + case GetBlockHeadersMsg: + relativeCostHeaderHistogram.Update(relCost) + case GetBlockBodiesMsg: + relativeCostBodyHistogram.Update(relCost) + case GetReceiptsMsg: + relativeCostReceiptHistogram.Update(relCost) + case GetCodeMsg: + relativeCostCodeHistogram.Update(relCost) + case GetProofsV2Msg: + relativeCostProofHistogram.Update(relCost) + case GetHelperTrieProofsMsg: + relativeCostHelperProofHistogram.Update(relCost) + case SendTxV2Msg: + relativeCostSendTxHistogram.Update(relCost) + case GetTxStatusMsg: + relativeCostTxStatusHistogram.Update(relCost) + } + } + // SendTxV2 and GetTxStatus requests are two special cases. + // All other requests will only put pressure on the database, and + // the corresponding delay is relatively stable. While these two + // requests involve txpool query, which is usually unstable. + // + // TODO(rjl493456442) fixes this. + if r.msgCode == SendTxV2Msg || r.msgCode == GetTxStatusMsg { + continue + } + requestServedMeter.Mark(int64(r.servingTime)) + requestServedTimer.Update(time.Duration(r.servingTime)) + requestEstimatedMeter.Mark(int64(r.avgTimeCost / factor)) + requestEstimatedTimer.Update(time.Duration(r.avgTimeCost / factor)) + relativeCostHistogram.Update(relCost) + + now := mclock.Now() + dt := float64(now - expUpdate) + expUpdate = now + exp := math.Exp(-dt / float64(gfUsageTC)) + + // calculate factor correction until now, based on previous values + var gfCorr float64 + max := recentTime + if recentAvg > max { + max = recentAvg + } + // we apply continuous correction when MAX(recentTime, recentAvg) > threshold + if max > threshold { + // calculate correction time between last expUpdate and now + if max*exp >= threshold { + gfCorr = dt + } else { + gfCorr = math.Log(max/threshold) * float64(gfUsageTC) + } + // calculate log(factor) correction with the right direction and time constant + if recentTime > recentAvg { + // drop factor if actual serving times are larger than average estimates + gfCorr /= -float64(gfDropTC) + } else { + // raise factor if actual serving times are smaller than average estimates + gfCorr /= float64(gfRaiseTC) + } + } + // update recent cost values with current request + recentTime = recentTime*exp + r.servingTime + recentAvg = recentAvg*exp + r.avgTimeCost/factor + + if gfCorr != 0 { + // Apply the correction to factor + gfLog += gfCorr + factor = math.Exp(gfLog) + // Notify outside modules the new factor and totalRecharge. + if time.Duration(now-lastUpdate) > time.Second { + totalRecharge, lastUpdate = ct.utilTarget*factor, now + ct.gfLock.Lock() + ct.factor = factor + ch := ct.totalRechargeCh + ct.gfLock.Unlock() + if ch != nil { + select { + case ct.totalRechargeCh <- uint64(totalRecharge): + default: + } + } + globalFactorGauge.Update(int64(1000 * factor)) + log.Debug("global cost factor updated", "factor", factor) + } + } + recentServedGauge.Update(int64(recentTime)) + recentEstimatedGauge.Update(int64(recentAvg)) + + case <-saveTicker.C: + saveCostFactor() + + case stopCh := <-ct.stopCh: + saveCostFactor() + close(stopCh) + return + } + } + }() +} + +// globalFactor returns the current value of the global cost factor +func (ct *costTracker) globalFactor() float64 { + ct.gfLock.RLock() + defer ct.gfLock.RUnlock() + + return ct.factor +} + +// totalRecharge returns the current total recharge parameter which is used by +// flowcontrol.ClientManager and is scaled by the global cost factor +func (ct *costTracker) totalRecharge() uint64 { + ct.gfLock.RLock() + defer ct.gfLock.RUnlock() + + return uint64(ct.factor * ct.utilTarget) +} + +// subscribeTotalRecharge returns all future updates to the total recharge value +// through a channel and also returns the current value +func (ct *costTracker) subscribeTotalRecharge(ch chan uint64) uint64 { + ct.gfLock.Lock() + defer ct.gfLock.Unlock() + + ct.totalRechargeCh = ch + return uint64(ct.factor * ct.utilTarget) +} + +// updateStats updates the global cost factor and (if enabled) the real cost vs. +// average estimate statistics +func (ct *costTracker) updateStats(code, amount, servingTime, realCost uint64) { + avg := reqAvgTimeCost[code] + avgTimeCost := avg.baseCost + amount*avg.reqCost + select { + case ct.reqInfoCh <- reqInfo{float64(avgTimeCost), float64(servingTime), code}: + default: + } + if makeCostStats { + realCost <<= 4 + l := 0 + for l < 9 && realCost > avgTimeCost { + l++ + realCost >>= 1 + } + atomic.AddUint64(&ct.stats[code][l], 1) + } +} + +// realCost calculates the final cost of a request based on actual serving time, +// incoming and outgoing message size +// +// Note: message size is only taken into account if bandwidth limitation is applied +// and the cost based on either message size is greater than the cost based on +// serving time. A maximum of the three costs is applied instead of their sum +// because the three limited resources (serving thread time and i/o bandwidth) can +// also be maxed out simultaneously. +func (ct *costTracker) realCost(servingTime uint64, inSize, outSize uint32) uint64 { + cost := float64(servingTime) + inSizeCost := float64(inSize) * ct.inSizeFactor + if inSizeCost > cost { + cost = inSizeCost + } + outSizeCost := float64(outSize) * ct.outSizeFactor + if outSizeCost > cost { + cost = outSizeCost + } + return uint64(cost * ct.globalFactor()) +} + +// printStats prints the distribution of real request cost relative to the average estimates +func (ct *costTracker) printStats() { + if ct.stats == nil { + return + } + for code, arr := range ct.stats { + log.Info("Request cost statistics", "code", code, "1/16", arr[0], "1/8", arr[1], "1/4", arr[2], "1/2", arr[3], "1", arr[4], "2", arr[5], "4", arr[6], "8", arr[7], "16", arr[8], ">16", arr[9]) + } +} + +type ( + // requestCostTable assigns a cost estimate function to each request type + // which is a linear function of the requested amount + // (cost = baseCost + reqCost * amount) + requestCostTable map[uint64]*requestCosts + requestCosts struct { + baseCost, reqCost uint64 + } + + // RequestCostList is a list representation of request costs which is used for + // database storage and communication through the network + RequestCostList []requestCostListItem + requestCostListItem struct { + MsgCode, BaseCost, ReqCost uint64 + } +) + +// getMaxCost calculates the estimated cost for a given request type and amount +func (table requestCostTable) getMaxCost(code, amount uint64) uint64 { + costs := table[code] + return costs.baseCost + amount*costs.reqCost +} + +// decode converts a cost list to a cost table +func (list RequestCostList) decode(protocolLength uint64) requestCostTable { + table := make(requestCostTable) + for _, e := range list { + if e.MsgCode < protocolLength { + table[e.MsgCode] = &requestCosts{ + baseCost: e.BaseCost, + reqCost: e.ReqCost, + } + } + } + return table +} + +// testCostList returns a dummy request cost list used by tests +func testCostList(testCost uint64) RequestCostList { + cl := make(RequestCostList, len(reqAvgTimeCost)) + var max uint64 + for code := range reqAvgTimeCost { + if code > max { + max = code + } + } + i := 0 + for code := uint64(0); code <= max; code++ { + if _, ok := reqAvgTimeCost[code]; ok { + cl[i].MsgCode = code + cl[i].BaseCost = testCost + cl[i].ReqCost = 0 + i++ + } + } + return cl +} diff --git a/les/distributor.go b/les/distributor.go index f90765b624b4..62abef47dc9a 100644 --- a/les/distributor.go +++ b/les/distributor.go @@ -14,27 +14,31 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( "container/list" "sync" "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) // requestDistributor implements a mechanism that distributes requests to // suitable peers, obeying flow control rules and prioritizing them in creation // order (even when a resend is necessary). type requestDistributor struct { - reqQueue *list.List - lastReqOrder uint64 - peers map[distPeer]struct{} - peerLock sync.RWMutex - stopChn, loopChn chan struct{} - loopNextSent bool - lock sync.Mutex + clock mclock.Clock + reqQueue *list.List + lastReqOrder uint64 + peers map[distPeer]struct{} + peerLock sync.RWMutex + loopChn chan struct{} + loopNextSent bool + lock sync.Mutex + + closeCh chan struct{} + wg sync.WaitGroup } // distPeer is an LES server peer interface for the request distributor. @@ -61,22 +65,26 @@ type distReq struct { canSend func(distPeer) bool request func(distPeer) func() - reqOrder uint64 - sentChn chan distPeer - element *list.Element + reqOrder uint64 + sentChn chan distPeer + element *list.Element + waitForPeers mclock.AbsTime + enterQueue mclock.AbsTime } // newRequestDistributor creates a new request distributor -func newRequestDistributor(peers *peerSet, stopChn chan struct{}) *requestDistributor { +func newRequestDistributor(peers *peerSet, clock mclock.Clock) *requestDistributor { d := &requestDistributor{ + clock: clock, reqQueue: list.New(), loopChn: make(chan struct{}, 2), - stopChn: stopChn, + closeCh: make(chan struct{}), peers: make(map[distPeer]struct{}), } if peers != nil { peers.notify(d) } + d.wg.Add(1) go d.loop() return d } @@ -104,13 +112,18 @@ func (d *requestDistributor) registerTestPeer(p distPeer) { // distMaxWait is the maximum waiting time after which further necessary waiting // times are recalculated based on new feedback from the servers -const distMaxWait = time.Millisecond * 10 +const distMaxWait = time.Millisecond * 50 + +// waitForPeers is the time window in which a request does not fail even if it +// has no suitable peers to send to at the moment +const waitForPeers = time.Second * 3 // main event loop func (d *requestDistributor) loop() { + defer d.wg.Done() for { select { - case <-d.stopChn: + case <-d.closeCh: d.lock.Lock() elem := d.reqQueue.Front() for elem != nil { @@ -133,6 +146,7 @@ func (d *requestDistributor) loop() { send := req.request(peer) if send != nil { peer.queueSend(send) + requestSendDelay.Update(time.Duration(d.clock.Now() - req.enterQueue)) } chn <- peer close(chn) @@ -148,7 +162,7 @@ func (d *requestDistributor) loop() { wait = distMaxWait } go func() { - time.Sleep(wait) + d.clock.Sleep(wait) d.loopChn <- struct{}{} }() break loop @@ -177,8 +191,6 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { checkedPeers := make(map[distPeer]struct{}) elem := d.reqQueue.Front() var ( - bestPeer distPeer - bestReq *distReq bestWait time.Duration sel *weightedRandomSelect ) @@ -186,9 +198,18 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { d.peerLock.RLock() defer d.peerLock.RUnlock() - for (len(d.peers) > 0 || elem == d.reqQueue.Front()) && elem != nil { + peerCount := len(d.peers) + for (len(checkedPeers) < peerCount || elem == d.reqQueue.Front()) && elem != nil { req := elem.Value.(*distReq) canSend := false + now := d.clock.Now() + if req.waitForPeers > now { + canSend = true + wait := time.Duration(req.waitForPeers - now) + if bestWait == 0 || wait < bestWait { + bestWait = wait + } + } for peer := range d.peers { if _, ok := checkedPeers[peer]; !ok && peer.canQueue() && req.canSend(peer) { canSend = true @@ -200,9 +221,7 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { } sel.update(selectPeerItem{peer: peer, req: req, weight: int64(bufRemain*1000000) + 1}) } else { - if bestReq == nil || wait < bestWait { - bestPeer = peer - bestReq = req + if bestWait == 0 || wait < bestWait { bestWait = wait } } @@ -221,7 +240,7 @@ func (d *requestDistributor) nextRequest() (distPeer, *distReq, time.Duration) { c := sel.choose().(selectPeerItem) return c.peer, c.req, 0 } - return bestPeer, bestReq, bestWait + return nil, nil, bestWait } // queue adds a request to the distribution queue, returns a channel where the @@ -235,7 +254,11 @@ func (d *requestDistributor) queue(r *distReq) chan distPeer { if r.reqOrder == 0 { d.lastReqOrder++ r.reqOrder = d.lastReqOrder + r.waitForPeers = d.clock.Now() + mclock.AbsTime(waitForPeers) } + // Assign the timestamp when the request is queued no matter it's + // a new one or re-queued one. + r.enterQueue = d.clock.Now() back := d.reqQueue.Back() if back == nil || r.reqOrder > back.Value.(*distReq).reqOrder { @@ -281,3 +304,8 @@ func (d *requestDistributor) remove(r *distReq) { r.element = nil } } + +func (d *requestDistributor) close() { + close(d.closeCh) + d.wg.Wait() +} diff --git a/les/distributor_test.go b/les/distributor_test.go index 8c7621f26b35..00d43e1d6bd3 100644 --- a/les/distributor_test.go +++ b/les/distributor_test.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( @@ -23,6 +21,8 @@ import ( "sync" "testing" "time" + + "github.com/ethereum/go-ethereum/common/mclock" ) type testDistReq struct { @@ -121,7 +121,7 @@ func testRequestDistributor(t *testing.T, resend bool) { stop := make(chan struct{}) defer close(stop) - dist := newRequestDistributor(nil, stop) + dist := newRequestDistributor(nil, &mclock.System{}) var peers [testDistPeerCount]*testDistPeer for i := range peers { peers[i] = &testDistPeer{} diff --git a/les/enr_entry.go b/les/enr_entry.go new file mode 100644 index 000000000000..c2a92dd999fa --- /dev/null +++ b/les/enr_entry.go @@ -0,0 +1,32 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "github.com/ethereum/go-ethereum/rlp" +) + +// lesEntry is the "les" ENR entry. This is set for LES servers only. +type lesEntry struct { + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` +} + +// ENRKey implements enr.Entry. +func (e lesEntry) ENRKey() string { + return "les" +} diff --git a/les/execqueue.go b/les/execqueue.go index 614721bf0dd8..e0c88a990f07 100644 --- a/les/execqueue.go +++ b/les/execqueue.go @@ -44,7 +44,7 @@ func (q *execQueue) loop() { func (q *execQueue) waitNext(drop bool) (f func()) { q.mu.Lock() - if drop { + if drop && len(q.funcs) > 0 { // Remove the function that just executed. We do this here instead of when // dequeuing so len(q.funcs) includes the function that is running. q.funcs = append(q.funcs[:0], q.funcs[1:]...) @@ -84,6 +84,13 @@ func (q *execQueue) queue(f func()) bool { return ok } +// clear drops all queued functions +func (q *execQueue) clear() { + q.mu.Lock() + q.funcs = q.funcs[:0] + q.mu.Unlock() +} + // quit stops the exec queue. // quit waits for the current execution to finish before returning. func (q *execQueue) quit() { diff --git a/les/fetcher.go b/les/fetcher.go index 2615f69df946..df76c56d703d 100644 --- a/les/fetcher.go +++ b/les/fetcher.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -41,9 +40,8 @@ const ( // ODR system to ensure that we only request data related to a certain block from peers who have already processed // and announced that block. type lightFetcher struct { - pm *ProtocolManager - odr *LesOdr - chain *light.LightChain + handler *clientHandler + chain *light.LightChain lock sync.Mutex // lock protects access to the fetcher's internal state variables except sent requests maxConfirmedTd *big.Int @@ -52,11 +50,16 @@ type lightFetcher struct { syncing bool syncDone chan *peer - reqMu sync.RWMutex // reqMu protects access to sent header fetch requests - requested map[uint64]fetchRequest - deliverChn chan fetchResponse - timeoutChn chan uint64 - requestChn chan bool // true if initiated from outside + reqMu sync.RWMutex // reqMu protects access to sent header fetch requests + requested map[uint64]fetchRequest + deliverChn chan fetchResponse + timeoutChn chan uint64 + requestTriggered bool + requestTrigger chan struct{} + lastTrustedHeader *types.Header + + closeCh chan struct{} + wg sync.WaitGroup } // fetcherPeerInfo holds fetcher-specific information about each active peer @@ -106,53 +109,54 @@ type fetchResponse struct { } // newLightFetcher creates a new light fetcher -func newLightFetcher(pm *ProtocolManager) *lightFetcher { +func newLightFetcher(h *clientHandler) *lightFetcher { f := &lightFetcher{ - pm: pm, - chain: pm.blockchain.(*light.LightChain), - odr: pm.odr, + handler: h, + chain: h.backend.blockchain, peers: make(map[*peer]*fetcherPeerInfo), deliverChn: make(chan fetchResponse, 100), requested: make(map[uint64]fetchRequest), timeoutChn: make(chan uint64), - requestChn: make(chan bool, 100), + requestTrigger: make(chan struct{}, 1), syncDone: make(chan *peer), + closeCh: make(chan struct{}), maxConfirmedTd: big.NewInt(0), } - pm.peers.notify(f) + h.backend.peers.notify(f) - f.pm.wg.Add(1) + f.wg.Add(1) go f.syncLoop() return f } +func (f *lightFetcher) close() { + close(f.closeCh) + f.wg.Wait() +} + // syncLoop is the main event loop of the light fetcher func (f *lightFetcher) syncLoop() { - requesting := false - defer f.pm.wg.Done() + defer f.wg.Done() for { select { - case <-f.pm.quitSync: + case <-f.closeCh: return - // when a new announce is received, request loop keeps running until - // no further requests are necessary or possible - case newAnnounce := <-f.requestChn: + // request loop keeps running until no further requests are necessary or possible + case <-f.requestTrigger: f.lock.Lock() - s := requesting - requesting = false var ( rq *distReq reqID uint64 syncing bool ) - if !f.syncing && !(newAnnounce && s) { + if !f.syncing { rq, reqID, syncing = f.nextRequest() } + f.requestTriggered = rq != nil f.lock.Unlock() if rq != nil { - requesting = true - if _, ok := <-f.pm.reqDist.queue(rq); ok { + if _, ok := <-f.handler.backend.reqDist.queue(rq); ok { if syncing { f.lock.Lock() f.syncing = true @@ -168,11 +172,11 @@ func (f *lightFetcher) syncLoop() { } f.reqMu.Unlock() // keep starting new requests while possible - f.requestChn <- false + f.requestTrigger <- struct{}{} }() } } else { - f.requestChn <- false + f.requestTrigger <- struct{}{} } } case reqID := <-f.timeoutChn: @@ -183,9 +187,9 @@ func (f *lightFetcher) syncLoop() { } f.reqMu.Unlock() if ok { - f.pm.serverPool.adjustResponseTime(req.peer.poolEntry, time.Duration(mclock.Now()-req.sent), true) + f.handler.backend.serverPool.adjustResponseTime(req.peer.poolEntry, time.Duration(mclock.Now()-req.sent), true) req.peer.Log().Debug("Fetching data timed out hard") - go f.pm.removePeer(req.peer.id) + go f.handler.removePeer(req.peer.id) } case resp := <-f.deliverChn: f.reqMu.Lock() @@ -198,12 +202,12 @@ func (f *lightFetcher) syncLoop() { } f.reqMu.Unlock() if ok { - f.pm.serverPool.adjustResponseTime(req.peer.poolEntry, time.Duration(mclock.Now()-req.sent), req.timeout) + f.handler.backend.serverPool.adjustResponseTime(req.peer.poolEntry, time.Duration(mclock.Now()-req.sent), req.timeout) } f.lock.Lock() if !ok || !(f.syncing || f.processResponse(req, resp)) { resp.peer.Log().Debug("Failed processing response") - go f.pm.removePeer(resp.peer.id) + go f.handler.removePeer(resp.peer.id) } f.lock.Unlock() case p := <-f.syncDone: @@ -212,7 +216,7 @@ func (f *lightFetcher) syncLoop() { f.checkSyncedHeaders(p) f.syncing = false f.lock.Unlock() - f.requestChn <- false + f.requestTrigger <- struct{}{} // f.requestTriggered is always true here } } } @@ -227,7 +231,6 @@ func (f *lightFetcher) registerPeer(p *peer) { f.lock.Lock() defer f.lock.Unlock() - f.peers[p] = &fetcherPeerInfo{nodeByHash: make(map[common.Hash]*fetcherTreeNode)} } @@ -261,7 +264,7 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { if fp.lastAnnounced != nil && head.Td.Cmp(fp.lastAnnounced.td) <= 0 { // announced tds should be strictly monotonic p.Log().Debug("Received non-monotonic td", "current", head.Td, "previous", fp.lastAnnounced.td) - go f.pm.removePeer(p.id) + go f.handler.removePeer(p.id) return } @@ -280,8 +283,10 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { fp.nodeCnt = 0 fp.nodeByHash = make(map[common.Hash]*fetcherTreeNode) } + // check if the node count is too high to add new nodes, discard oldest ones if necessary if n != nil { - // check if the node count is too high to add new nodes, discard oldest ones if necessary + // n is now the reorg common ancestor, add a new branch of nodes + // check if the node count is too high to add new nodes locked := false for uint64(fp.nodeCnt)+head.Number-n.number > maxNodeCount && fp.root != nil { if !locked { @@ -292,7 +297,7 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { // if one of root's children is canonical, keep it, delete other branches and root itself var newRoot *fetcherTreeNode for i, nn := range fp.root.children { - if rawdb.ReadCanonicalHash(f.pm.chainDb, nn.number) == nn.hash { + if rawdb.ReadCanonicalHash(f.handler.backend.chainDb, nn.number) == nn.hash { fp.root.children = append(fp.root.children[:i], fp.root.children[i+1:]...) nn.parent = nil newRoot = nn @@ -325,6 +330,7 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { fp.nodeByHash[n.hash] = n } } + if n == nil { // could not find reorg common ancestor or had to delete entire tree, a new root and a resync is needed if fp.root != nil { @@ -344,7 +350,10 @@ func (f *lightFetcher) announce(p *peer, head *announceData) { fp.lastAnnounced = n p.lock.Unlock() f.checkUpdateStats(p, nil) - f.requestChn <- true + if !f.requestTriggered { + f.requestTriggered = true + f.requestTrigger <- struct{}{} + } } // peerHasBlock returns true if we can assume the peer knows the given block @@ -381,7 +390,7 @@ func (f *lightFetcher) peerHasBlock(p *peer, hash common.Hash, number uint64, ha // // when syncing, just check if it is part of the known chain, there is nothing better we // can do since we do not know the most recent block hash yet - return rawdb.ReadCanonicalHash(f.pm.chainDb, fp.root.number) == fp.root.hash && rawdb.ReadCanonicalHash(f.pm.chainDb, number) == hash + return rawdb.ReadCanonicalHash(f.handler.backend.chainDb, fp.root.number) == fp.root.hash && rawdb.ReadCanonicalHash(f.handler.backend.chainDb, number) == hash } // requestAmount calculates the amount of headers to be downloaded starting @@ -411,25 +420,13 @@ func (f *lightFetcher) requestedID(reqID uint64) bool { // to be downloaded starting from the head backwards is also returned func (f *lightFetcher) nextRequest() (*distReq, uint64, bool) { var ( - bestHash common.Hash - bestAmount uint64 + bestHash common.Hash + bestAmount uint64 + bestTd *big.Int + bestSyncing bool ) - bestTd := f.maxConfirmedTd - bestSyncing := false + bestHash, bestAmount, bestTd, bestSyncing = f.findBestRequest() - for p, fp := range f.peers { - for hash, n := range fp.nodeByHash { - if !f.checkKnownNode(p, n) && !n.requested && (bestTd == nil || n.td.Cmp(bestTd) >= 0) { - amount := f.requestAmount(p, n) - if bestTd == nil || n.td.Cmp(bestTd) > 0 || amount < bestAmount { - bestHash = hash - bestAmount = amount - bestTd = n.td - bestSyncing = fp.bestConfirmed == nil || fp.root == nil || !f.checkKnownNode(p, fp.root) - } - } - } - } if bestTd == f.maxConfirmedTd { return nil, 0, false } @@ -437,72 +434,132 @@ func (f *lightFetcher) nextRequest() (*distReq, uint64, bool) { var rq *distReq reqID := genReqID() if bestSyncing { - rq = &distReq{ - getCost: func(dp distPeer) uint64 { - return 0 - }, - canSend: func(dp distPeer) bool { - p := dp.(*peer) - f.lock.Lock() - defer f.lock.Unlock() - - fp := f.peers[p] - return fp != nil && fp.nodeByHash[bestHash] != nil - }, - request: func(dp distPeer) func() { - go func() { - p := dp.(*peer) - p.Log().Debug("Synchronisation started") - f.pm.synchronise(p) - f.syncDone <- p - }() - return nil - }, - } + rq = f.newFetcherDistReqForSync(bestHash) } else { - rq = &distReq{ - getCost: func(dp distPeer) uint64 { - p := dp.(*peer) - return p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) - }, - canSend: func(dp distPeer) bool { + rq = f.newFetcherDistReq(bestHash, reqID, bestAmount) + } + return rq, reqID, bestSyncing +} + +// findBestRequest finds the best head to request that has been announced by but not yet requested from a known peer. +// It also returns the announced Td (which should be verified after fetching the head), +// the necessary amount to request and whether a downloader sync is necessary instead of a normal header request. +func (f *lightFetcher) findBestRequest() (bestHash common.Hash, bestAmount uint64, bestTd *big.Int, bestSyncing bool) { + bestTd = f.maxConfirmedTd + bestSyncing = false + + for p, fp := range f.peers { + for hash, n := range fp.nodeByHash { + if f.checkKnownNode(p, n) || n.requested { + continue + } + // if ulc mode is disabled, isTrustedHash returns true + amount := f.requestAmount(p, n) + if (bestTd == nil || n.td.Cmp(bestTd) > 0 || amount < bestAmount) && (f.isTrustedHash(hash) || f.maxConfirmedTd.Int64() == 0) { + bestHash = hash + bestTd = n.td + bestAmount = amount + bestSyncing = fp.bestConfirmed == nil || fp.root == nil || !f.checkKnownNode(p, fp.root) + } + } + } + return +} + +// isTrustedHash checks if the block can be trusted by the minimum trusted fraction. +func (f *lightFetcher) isTrustedHash(hash common.Hash) bool { + // If ultra light cliet mode is disabled, trust all hashes + if f.handler.ulc == nil { + return true + } + // Ultra light enabled, only trust after enough confirmations + var agreed int + for peer, info := range f.peers { + if peer.trusted && info.nodeByHash[hash] != nil { + agreed++ + } + } + return 100*agreed/len(f.handler.ulc.keys) >= f.handler.ulc.fraction +} + +func (f *lightFetcher) newFetcherDistReqForSync(bestHash common.Hash) *distReq { + return &distReq{ + getCost: func(dp distPeer) uint64 { + return 0 + }, + canSend: func(dp distPeer) bool { + p := dp.(*peer) + f.lock.Lock() + defer f.lock.Unlock() + + if p.onlyAnnounce { + return false + } + fp := f.peers[p] + return fp != nil && fp.nodeByHash[bestHash] != nil + }, + request: func(dp distPeer) func() { + if f.handler.ulc != nil { + // Keep last trusted header before sync + f.setLastTrustedHeader(f.chain.CurrentHeader()) + } + go func() { p := dp.(*peer) - f.lock.Lock() - defer f.lock.Unlock() + p.Log().Debug("Synchronisation started") + f.handler.synchronise(p) + f.syncDone <- p + }() + return nil + }, + } +} - fp := f.peers[p] - if fp == nil { - return false - } +// newFetcherDistReq creates a new request for the distributor. +func (f *lightFetcher) newFetcherDistReq(bestHash common.Hash, reqID uint64, bestAmount uint64) *distReq { + return &distReq{ + getCost: func(dp distPeer) uint64 { + p := dp.(*peer) + return p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) + }, + canSend: func(dp distPeer) bool { + p := dp.(*peer) + f.lock.Lock() + defer f.lock.Unlock() + + if p.onlyAnnounce { + return false + } + fp := f.peers[p] + if fp == nil { + return false + } + n := fp.nodeByHash[bestHash] + return n != nil && !n.requested + }, + request: func(dp distPeer) func() { + p := dp.(*peer) + f.lock.Lock() + fp := f.peers[p] + if fp != nil { n := fp.nodeByHash[bestHash] - return n != nil && !n.requested - }, - request: func(dp distPeer) func() { - p := dp.(*peer) - f.lock.Lock() - fp := f.peers[p] - if fp != nil { - n := fp.nodeByHash[bestHash] - if n != nil { - n.requested = true - } + if n != nil { + n.requested = true } - f.lock.Unlock() - - cost := p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) - p.fcServer.QueueRequest(reqID, cost) - f.reqMu.Lock() - f.requested[reqID] = fetchRequest{hash: bestHash, amount: bestAmount, peer: p, sent: mclock.Now()} - f.reqMu.Unlock() - go func() { - time.Sleep(hardRequestTimeout) - f.timeoutChn <- reqID - }() - return func() { p.RequestHeadersByHash(reqID, cost, bestHash, int(bestAmount), 0, true) } - }, - } + } + f.lock.Unlock() + + cost := p.GetRequestCost(GetBlockHeadersMsg, int(bestAmount)) + p.fcServer.QueuedRequest(reqID, cost) + f.reqMu.Lock() + f.requested[reqID] = fetchRequest{hash: bestHash, amount: bestAmount, peer: p, sent: mclock.Now()} + f.reqMu.Unlock() + go func() { + time.Sleep(hardRequestTimeout) + f.timeoutChn <- reqID + }() + return func() { p.RequestHeadersByHash(reqID, cost, bestHash, int(bestAmount), 0, true) } + }, } - return rq, reqID, bestSyncing } // deliverHeaders delivers header download request responses for processing @@ -520,6 +577,7 @@ func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) boo for i, header := range resp.headers { headers[int(req.amount)-1-i] = header } + if _, err := f.chain.InsertHeaderChain(headers, 1); err != nil { if err == consensus.ErrFutureBlock { return true @@ -544,15 +602,17 @@ func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) boo // downloaded and validated batch or headers func (f *lightFetcher) newHeaders(headers []*types.Header, tds []*big.Int) { var maxTd *big.Int + for p, fp := range f.peers { if !f.checkAnnouncedHeaders(fp, headers, tds) { p.Log().Debug("Inconsistent announcement") - go f.pm.removePeer(p.id) + go f.handler.removePeer(p.id) } if fp.confirmedTd != nil && (maxTd == nil || maxTd.Cmp(fp.confirmedTd) > 0) { maxTd = fp.confirmedTd } } + if maxTd != nil { f.updateMaxConfirmedTd(maxTd) } @@ -640,22 +700,66 @@ func (f *lightFetcher) checkSyncedHeaders(p *peer) { p.Log().Debug("Unknown peer to check sync headers") return } - n := fp.lastAnnounced - var td *big.Int - for n != nil { - if td = f.chain.GetTd(n.hash, n.number); td != nil { + var ( + node = fp.lastAnnounced + td *big.Int + ) + if f.handler.ulc != nil { + // Roll back untrusted blocks + h, unapproved := f.lastTrustedTreeNode(p) + f.chain.Rollback(unapproved) + node = fp.nodeByHash[h.Hash()] + } + // Find last valid block + for node != nil { + if td = f.chain.GetTd(node.hash, node.number); td != nil { break } - n = n.parent + node = node.parent } - // now n is the latest downloaded header after syncing - if n == nil { + // Now node is the latest downloaded/approved header after syncing + if node == nil { p.Log().Debug("Synchronisation failed") - go f.pm.removePeer(p.id) - } else { - header := f.chain.GetHeader(n.hash, n.number) - f.newHeaders([]*types.Header{header}, []*big.Int{td}) + go f.handler.removePeer(p.id) + return } + header := f.chain.GetHeader(node.hash, node.number) + f.newHeaders([]*types.Header{header}, []*big.Int{td}) +} + +// lastTrustedTreeNode return last approved treeNode and a list of unapproved hashes +func (f *lightFetcher) lastTrustedTreeNode(p *peer) (*types.Header, []common.Hash) { + unapprovedHashes := make([]common.Hash, 0) + current := f.chain.CurrentHeader() + + if f.lastTrustedHeader == nil { + return current, unapprovedHashes + } + + canonical := f.chain.CurrentHeader() + if canonical.Number.Uint64() > f.lastTrustedHeader.Number.Uint64() { + canonical = f.chain.GetHeaderByNumber(f.lastTrustedHeader.Number.Uint64()) + } + commonAncestor := rawdb.FindCommonAncestor(f.handler.backend.chainDb, canonical, f.lastTrustedHeader) + if commonAncestor == nil { + log.Error("Common ancestor of last trusted header and canonical header is nil", "canonical hash", canonical.Hash(), "trusted hash", f.lastTrustedHeader.Hash()) + return current, unapprovedHashes + } + + for current.Hash() == commonAncestor.Hash() { + if f.isTrustedHash(current.Hash()) { + break + } + unapprovedHashes = append(unapprovedHashes, current.Hash()) + current = f.chain.GetHeader(current.ParentHash, current.Number.Uint64()-1) + } + return current, unapprovedHashes +} + +func (f *lightFetcher) setLastTrustedHeader(h *types.Header) { + f.lock.Lock() + defer f.lock.Unlock() + f.lastTrustedHeader = h } // checkKnownNode checks if a block tree node is known (downloaded and validated) @@ -682,7 +786,7 @@ func (f *lightFetcher) checkKnownNode(p *peer, n *fetcherTreeNode) bool { } if !f.checkAnnouncedHeaders(fp, []*types.Header{header}, []*big.Int{td}) { p.Log().Debug("Inconsistent announcement") - go f.pm.removePeer(p.id) + go f.handler.removePeer(p.id) } if fp.confirmedTd != nil { f.updateMaxConfirmedTd(fp.confirmedTd) @@ -747,6 +851,7 @@ func (f *lightFetcher) updateMaxConfirmedTd(td *big.Int) { if f.lastUpdateStats != nil { f.lastUpdateStats.next = newEntry } + f.lastUpdateStats = newEntry for p := range f.peers { f.checkUpdateStats(p, newEntry) @@ -769,16 +874,17 @@ func (f *lightFetcher) checkUpdateStats(p *peer, newEntry *updateStatsEntry) { p.Log().Debug("Unknown peer to check update stats") return } + if newEntry != nil && fp.firstUpdateStats == nil { fp.firstUpdateStats = newEntry } for fp.firstUpdateStats != nil && fp.firstUpdateStats.time <= now-mclock.AbsTime(blockDelayTimeout) { - f.pm.serverPool.adjustBlockDelay(p.poolEntry, blockDelayTimeout) + f.handler.backend.serverPool.adjustBlockDelay(p.poolEntry, blockDelayTimeout) fp.firstUpdateStats = fp.firstUpdateStats.next } if fp.confirmedTd != nil { for fp.firstUpdateStats != nil && fp.firstUpdateStats.td.Cmp(fp.confirmedTd) <= 0 { - f.pm.serverPool.adjustBlockDelay(p.poolEntry, time.Duration(now-fp.firstUpdateStats.time)) + f.handler.backend.serverPool.adjustBlockDelay(p.poolEntry, time.Duration(now-fp.firstUpdateStats.time)) fp.firstUpdateStats = fp.firstUpdateStats.next } } diff --git a/les/flowcontrol/control.go b/les/flowcontrol/control.go index 8ef4ba511fc4..490013677c63 100644 --- a/les/flowcontrol/control.go +++ b/les/flowcontrol/control.go @@ -18,166 +18,412 @@ package flowcontrol import ( + "fmt" "sync" "time" "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/log" ) -const fcTimeConst = time.Millisecond +const ( + // fcTimeConst is the time constant applied for MinRecharge during linear + // buffer recharge period + fcTimeConst = time.Millisecond + // DecParamDelay is applied at server side when decreasing capacity in order to + // avoid a buffer underrun error due to requests sent by the client before + // receiving the capacity update announcement + DecParamDelay = time.Second * 2 + // keepLogs is the duration of keeping logs; logging is not used if zero + keepLogs = 0 +) +// ServerParams are the flow control parameters specified by a server for a client +// +// Note: a server can assign different amounts of capacity to each client by giving +// different parameters to them. type ServerParams struct { BufLimit, MinRecharge uint64 } +// scheduledUpdate represents a delayed flow control parameter update +type scheduledUpdate struct { + time mclock.AbsTime + params ServerParams +} + +// ClientNode is the flow control system's representation of a client +// (used in server mode only) type ClientNode struct { - params *ServerParams - bufValue uint64 - lastTime mclock.AbsTime - lock sync.Mutex - cm *ClientManager - cmNode *cmNode + params ServerParams + bufValue int64 + lastTime mclock.AbsTime + updateSchedule []scheduledUpdate + sumCost uint64 // sum of req costs received from this client + accepted map[uint64]uint64 // value = sumCost after accepting the given req + connected bool + lock sync.Mutex + cm *ClientManager + log *logger + cmNodeFields } -func NewClientNode(cm *ClientManager, params *ServerParams) *ClientNode { +// NewClientNode returns a new ClientNode +func NewClientNode(cm *ClientManager, params ServerParams) *ClientNode { node := &ClientNode{ - cm: cm, - params: params, - bufValue: params.BufLimit, - lastTime: mclock.Now(), + cm: cm, + params: params, + bufValue: int64(params.BufLimit), + lastTime: cm.clock.Now(), + accepted: make(map[uint64]uint64), + connected: true, + } + if keepLogs > 0 { + node.log = newLogger(keepLogs) } - node.cmNode = cm.addNode(node) + cm.connect(node) return node } -func (peer *ClientNode) Remove(cm *ClientManager) { - cm.removeNode(peer.cmNode) +// Disconnect should be called when a client is disconnected +func (node *ClientNode) Disconnect() { + node.lock.Lock() + defer node.lock.Unlock() + + node.connected = false + node.cm.disconnect(node) +} + +// BufferStatus returns the current buffer value and limit +func (node *ClientNode) BufferStatus() (uint64, uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + if !node.connected { + return 0, 0 + } + now := node.cm.clock.Now() + node.update(now) + node.cm.updateBuffer(node, 0, now) + bv := node.bufValue + if bv < 0 { + bv = 0 + } + return uint64(bv), node.params.BufLimit +} + +// OneTimeCost subtracts the given amount from the node's buffer. +// +// Note: this call can take the buffer into the negative region internally. +// In this case zero buffer value is returned by exported calls and no requests +// are accepted. +func (node *ClientNode) OneTimeCost(cost uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.cm.clock.Now() + node.update(now) + node.bufValue -= int64(cost) + node.cm.updateBuffer(node, -int64(cost), now) +} + +// Freeze notifies the client manager about a client freeze event in which case +// the total capacity allowance is slightly reduced. +func (node *ClientNode) Freeze() { + node.lock.Lock() + frozenCap := node.params.MinRecharge + node.lock.Unlock() + node.cm.reduceTotalCapacity(frozenCap) } -func (peer *ClientNode) recalcBV(time mclock.AbsTime) { - dt := uint64(time - peer.lastTime) - if time < peer.lastTime { +// update recalculates the buffer value at a specified time while also performing +// scheduled flow control parameter updates if necessary +func (node *ClientNode) update(now mclock.AbsTime) { + for len(node.updateSchedule) > 0 && node.updateSchedule[0].time <= now { + node.recalcBV(node.updateSchedule[0].time) + node.updateParams(node.updateSchedule[0].params, now) + node.updateSchedule = node.updateSchedule[1:] + } + node.recalcBV(now) +} + +// recalcBV recalculates the buffer value at a specified time +func (node *ClientNode) recalcBV(now mclock.AbsTime) { + dt := uint64(now - node.lastTime) + if now < node.lastTime { dt = 0 } - peer.bufValue += peer.params.MinRecharge * dt / uint64(fcTimeConst) - if peer.bufValue > peer.params.BufLimit { - peer.bufValue = peer.params.BufLimit + node.bufValue += int64(node.params.MinRecharge * dt / uint64(fcTimeConst)) + if node.bufValue > int64(node.params.BufLimit) { + node.bufValue = int64(node.params.BufLimit) } - peer.lastTime = time + if node.log != nil { + node.log.add(now, fmt.Sprintf("updated bv=%d MRR=%d BufLimit=%d", node.bufValue, node.params.MinRecharge, node.params.BufLimit)) + } + node.lastTime = now } -func (peer *ClientNode) AcceptRequest() (uint64, bool) { - peer.lock.Lock() - defer peer.lock.Unlock() +// UpdateParams updates the flow control parameters of a client node +func (node *ClientNode) UpdateParams(params ServerParams) { + node.lock.Lock() + defer node.lock.Unlock() - time := mclock.Now() - peer.recalcBV(time) - return peer.bufValue, peer.cm.accept(peer.cmNode, time) + now := node.cm.clock.Now() + node.update(now) + if params.MinRecharge >= node.params.MinRecharge { + node.updateSchedule = nil + node.updateParams(params, now) + } else { + for i, s := range node.updateSchedule { + if params.MinRecharge >= s.params.MinRecharge { + s.params = params + node.updateSchedule = node.updateSchedule[:i+1] + return + } + } + node.updateSchedule = append(node.updateSchedule, scheduledUpdate{time: now + mclock.AbsTime(DecParamDelay), params: params}) + } +} + +// updateParams updates the flow control parameters of the node +func (node *ClientNode) updateParams(params ServerParams, now mclock.AbsTime) { + diff := int64(params.BufLimit - node.params.BufLimit) + if diff > 0 { + node.bufValue += diff + } else if node.bufValue > int64(params.BufLimit) { + node.bufValue = int64(params.BufLimit) + } + node.cm.updateParams(node, params, now) } -func (peer *ClientNode) RequestProcessed(cost uint64) (bv, realCost uint64) { - peer.lock.Lock() - defer peer.lock.Unlock() +// AcceptRequest returns whether a new request can be accepted and the missing +// buffer amount if it was rejected due to a buffer underrun. If accepted, maxCost +// is deducted from the flow control buffer. +func (node *ClientNode) AcceptRequest(reqID, index, maxCost uint64) (accepted bool, bufShort uint64, priority int64) { + node.lock.Lock() + defer node.lock.Unlock() - time := mclock.Now() - peer.recalcBV(time) - peer.bufValue -= cost - rcValue, rcost := peer.cm.processed(peer.cmNode, time) - if rcValue < peer.params.BufLimit { - bv := peer.params.BufLimit - rcValue - if bv > peer.bufValue { - peer.bufValue = bv + now := node.cm.clock.Now() + node.update(now) + if int64(maxCost) > node.bufValue { + if node.log != nil { + node.log.add(now, fmt.Sprintf("rejected reqID=%d bv=%d maxCost=%d", reqID, node.bufValue, maxCost)) + node.log.dump(now) } + return false, maxCost - uint64(node.bufValue), 0 } - return peer.bufValue, rcost + node.bufValue -= int64(maxCost) + node.sumCost += maxCost + if node.log != nil { + node.log.add(now, fmt.Sprintf("accepted reqID=%d bv=%d maxCost=%d sumCost=%d", reqID, node.bufValue, maxCost, node.sumCost)) + } + node.accepted[index] = node.sumCost + return true, 0, node.cm.accepted(node, maxCost, now) +} + +// RequestProcessed should be called when the request has been processed +func (node *ClientNode) RequestProcessed(reqID, index, maxCost, realCost uint64) uint64 { + node.lock.Lock() + defer node.lock.Unlock() + + now := node.cm.clock.Now() + node.update(now) + node.cm.processed(node, maxCost, realCost, now) + bv := node.bufValue + int64(node.sumCost-node.accepted[index]) + if node.log != nil { + node.log.add(now, fmt.Sprintf("processed reqID=%d bv=%d maxCost=%d realCost=%d sumCost=%d oldSumCost=%d reportedBV=%d", reqID, node.bufValue, maxCost, realCost, node.sumCost, node.accepted[index], bv)) + } + delete(node.accepted, index) + if bv < 0 { + return 0 + } + return uint64(bv) } +// ServerNode is the flow control system's representation of a server +// (used in client mode only) type ServerNode struct { + clock mclock.Clock bufEstimate uint64 + bufRecharge bool lastTime mclock.AbsTime - params *ServerParams + params ServerParams sumCost uint64 // sum of req costs sent to this server pending map[uint64]uint64 // value = sumCost after sending the given req + log *logger lock sync.RWMutex } -func NewServerNode(params *ServerParams) *ServerNode { - return &ServerNode{ +// NewServerNode returns a new ServerNode +func NewServerNode(params ServerParams, clock mclock.Clock) *ServerNode { + node := &ServerNode{ + clock: clock, bufEstimate: params.BufLimit, - lastTime: mclock.Now(), + bufRecharge: false, + lastTime: clock.Now(), params: params, pending: make(map[uint64]uint64), } + if keepLogs > 0 { + node.log = newLogger(keepLogs) + } + return node } -func (peer *ServerNode) recalcBLE(time mclock.AbsTime) { - dt := uint64(time - peer.lastTime) - if time < peer.lastTime { - dt = 0 - } - peer.bufEstimate += peer.params.MinRecharge * dt / uint64(fcTimeConst) - if peer.bufEstimate > peer.params.BufLimit { - peer.bufEstimate = peer.params.BufLimit +// UpdateParams updates the flow control parameters of the node +func (node *ServerNode) UpdateParams(params ServerParams) { + node.lock.Lock() + defer node.lock.Unlock() + + node.recalcBLE(mclock.Now()) + if params.BufLimit > node.params.BufLimit { + node.bufEstimate += params.BufLimit - node.params.BufLimit + } else { + if node.bufEstimate > params.BufLimit { + node.bufEstimate = params.BufLimit + } } - peer.lastTime = time + node.params = params } -// safetyMargin is added to the flow control waiting time when estimated buffer value is low -const safetyMargin = time.Millisecond - -func (peer *ServerNode) canSend(maxCost uint64) (time.Duration, float64) { - peer.recalcBLE(mclock.Now()) - maxCost += uint64(safetyMargin) * peer.params.MinRecharge / uint64(fcTimeConst) - if maxCost > peer.params.BufLimit { - maxCost = peer.params.BufLimit +// recalcBLE recalculates the lowest estimate for the client's buffer value at +// the given server at the specified time +func (node *ServerNode) recalcBLE(now mclock.AbsTime) { + if now < node.lastTime { + return } - if peer.bufEstimate >= maxCost { - return 0, float64(peer.bufEstimate-maxCost) / float64(peer.params.BufLimit) + if node.bufRecharge { + dt := uint64(now - node.lastTime) + node.bufEstimate += node.params.MinRecharge * dt / uint64(fcTimeConst) + if node.bufEstimate >= node.params.BufLimit { + node.bufEstimate = node.params.BufLimit + node.bufRecharge = false + } + } + node.lastTime = now + if node.log != nil { + node.log.add(now, fmt.Sprintf("updated bufEst=%d MRR=%d BufLimit=%d", node.bufEstimate, node.params.MinRecharge, node.params.BufLimit)) } - return time.Duration((maxCost - peer.bufEstimate) * uint64(fcTimeConst) / peer.params.MinRecharge), 0 } +// safetyMargin is added to the flow control waiting time when estimated buffer value is low +const safetyMargin = time.Millisecond + // CanSend returns the minimum waiting time required before sending a request // with the given maximum estimated cost. Second return value is the relative // estimated buffer level after sending the request (divided by BufLimit). -func (peer *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { - peer.lock.RLock() - defer peer.lock.RUnlock() +func (node *ServerNode) CanSend(maxCost uint64) (time.Duration, float64) { + node.lock.RLock() + defer node.lock.RUnlock() - return peer.canSend(maxCost) + now := node.clock.Now() + node.recalcBLE(now) + maxCost += uint64(safetyMargin) * node.params.MinRecharge / uint64(fcTimeConst) + if maxCost > node.params.BufLimit { + maxCost = node.params.BufLimit + } + if node.bufEstimate >= maxCost { + relBuf := float64(node.bufEstimate-maxCost) / float64(node.params.BufLimit) + if node.log != nil { + node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d true relBuf=%f", node.bufEstimate, maxCost, relBuf)) + } + return 0, relBuf + } + timeLeft := time.Duration((maxCost - node.bufEstimate) * uint64(fcTimeConst) / node.params.MinRecharge) + if node.log != nil { + node.log.add(now, fmt.Sprintf("canSend bufEst=%d maxCost=%d false timeLeft=%v", node.bufEstimate, maxCost, timeLeft)) + } + return timeLeft, 0 } -// QueueRequest should be called when the request has been assigned to the given +// QueuedRequest should be called when the request has been assigned to the given // server node, before putting it in the send queue. It is mandatory that requests -// are sent in the same order as the QueueRequest calls are made. -func (peer *ServerNode) QueueRequest(reqID, maxCost uint64) { - peer.lock.Lock() - defer peer.lock.Unlock() +// are sent in the same order as the QueuedRequest calls are made. +func (node *ServerNode) QueuedRequest(reqID, maxCost uint64) { + node.lock.Lock() + defer node.lock.Unlock() - peer.bufEstimate -= maxCost - peer.sumCost += maxCost - peer.pending[reqID] = peer.sumCost + now := node.clock.Now() + node.recalcBLE(now) + // Note: we do not know when requests actually arrive to the server so bufRecharge + // is not turned on here if buffer was full; in this case it is going to be turned + // on by the first reply's bufValue feedback + if node.bufEstimate >= maxCost { + node.bufEstimate -= maxCost + } else { + log.Error("Queued request with insufficient buffer estimate") + node.bufEstimate = 0 + } + node.sumCost += maxCost + node.pending[reqID] = node.sumCost + if node.log != nil { + node.log.add(now, fmt.Sprintf("queued reqID=%d bufEst=%d maxCost=%d sumCost=%d", reqID, node.bufEstimate, maxCost, node.sumCost)) + } } -// GotReply adjusts estimated buffer value according to the value included in +// ReceivedReply adjusts estimated buffer value according to the value included in // the latest request reply. -func (peer *ServerNode) GotReply(reqID, bv uint64) { +func (node *ServerNode) ReceivedReply(reqID, bv uint64) { + node.lock.Lock() + defer node.lock.Unlock() - peer.lock.Lock() - defer peer.lock.Unlock() - - if bv > peer.params.BufLimit { - bv = peer.params.BufLimit + now := node.clock.Now() + node.recalcBLE(now) + if bv > node.params.BufLimit { + bv = node.params.BufLimit } - sc, ok := peer.pending[reqID] + sc, ok := node.pending[reqID] if !ok { return } - delete(peer.pending, reqID) - cc := peer.sumCost - sc - peer.bufEstimate = 0 + delete(node.pending, reqID) + cc := node.sumCost - sc + newEstimate := uint64(0) if bv > cc { - peer.bufEstimate = bv - cc + newEstimate = bv - cc + } + if newEstimate > node.bufEstimate { + // Note: we never reduce the buffer estimate based on the reported value because + // this can only happen because of the delayed delivery of the latest reply. + // The lowest estimate based on the previous reply can still be considered valid. + node.bufEstimate = newEstimate + } + + node.bufRecharge = node.bufEstimate < node.params.BufLimit + node.lastTime = now + if node.log != nil { + node.log.add(now, fmt.Sprintf("received reqID=%d bufEst=%d reportedBv=%d sumCost=%d oldSumCost=%d", reqID, node.bufEstimate, bv, node.sumCost, sc)) + } +} + +// ResumeFreeze cleans all pending requests and sets the buffer estimate to the +// reported value after resuming from a frozen state +func (node *ServerNode) ResumeFreeze(bv uint64) { + node.lock.Lock() + defer node.lock.Unlock() + + for reqID := range node.pending { + delete(node.pending, reqID) + } + now := node.clock.Now() + node.recalcBLE(now) + if bv > node.params.BufLimit { + bv = node.params.BufLimit + } + node.bufEstimate = bv + node.bufRecharge = node.bufEstimate < node.params.BufLimit + node.lastTime = now + if node.log != nil { + node.log.add(now, fmt.Sprintf("unfreeze bv=%d sumCost=%d", bv, node.sumCost)) + } +} + +// DumpLogs dumps the event log if logging is used +func (node *ServerNode) DumpLogs() { + node.lock.Lock() + defer node.lock.Unlock() + + if node.log != nil { + node.log.dump(node.clock.Now()) } - peer.lastTime = mclock.Now() } diff --git a/les/flowcontrol/logger.go b/les/flowcontrol/logger.go new file mode 100644 index 000000000000..428d7fbf22c9 --- /dev/null +++ b/les/flowcontrol/logger.go @@ -0,0 +1,65 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flowcontrol + +import ( + "fmt" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +// logger collects events in string format and discards events older than the +// "keep" parameter +type logger struct { + events map[uint64]logEvent + writePtr, delPtr uint64 + keep time.Duration +} + +// logEvent describes a single event +type logEvent struct { + time mclock.AbsTime + event string +} + +// newLogger creates a new logger +func newLogger(keep time.Duration) *logger { + return &logger{ + events: make(map[uint64]logEvent), + keep: keep, + } +} + +// add adds a new event and discards old events if possible +func (l *logger) add(now mclock.AbsTime, event string) { + keepAfter := now - mclock.AbsTime(l.keep) + for l.delPtr < l.writePtr && l.events[l.delPtr].time <= keepAfter { + delete(l.events, l.delPtr) + l.delPtr++ + } + l.events[l.writePtr] = logEvent{now, event} + l.writePtr++ +} + +// dump prints all stored events +func (l *logger) dump(now mclock.AbsTime) { + for i := l.delPtr; i < l.writePtr; i++ { + e := l.events[i] + fmt.Println(time.Duration(e.time-now), e.event) + } +} diff --git a/les/flowcontrol/manager.go b/les/flowcontrol/manager.go index 28cc6f0fe763..d6d0b1adde5a 100644 --- a/les/flowcontrol/manager.go +++ b/les/flowcontrol/manager.go @@ -14,211 +14,449 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package flowcontrol implements a client side flow control mechanism package flowcontrol import ( + "fmt" + "math" "sync" "time" "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" ) -const rcConst = 1000000 +// cmNodeFields are ClientNode fields used by the client manager +// Note: these fields are locked by the client manager's mutex +type cmNodeFields struct { + corrBufValue int64 // buffer value adjusted with the extra recharge amount + rcLastIntValue int64 // past recharge integrator value when corrBufValue was last updated + rcFullIntValue int64 // future recharge integrator value when corrBufValue will reach maximum + queueIndex int // position in the recharge queue (-1 if not queued) +} + +// FixedPointMultiplier is applied to the recharge integrator and the recharge curve. +// +// Note: fixed point arithmetic is required for the integrator because it is a +// constantly increasing value that can wrap around int64 limits (which behavior is +// also supported by the priority queue). A floating point value would gradually lose +// precision in this application. +// The recharge curve and all recharge values are encoded as fixed point because +// sumRecharge is frequently updated by adding or subtracting individual recharge +// values and perfect precision is required. +const FixedPointMultiplier = 1000000 + +var ( + capacityDropFactor = 0.1 + capacityRaiseTC = 1 / (3 * float64(time.Hour)) // time constant for raising the capacity factor + capacityRaiseThresholdRatio = 1.125 // total/connected capacity ratio threshold for raising the capacity factor +) -type cmNode struct { - node *ClientNode - lastUpdate mclock.AbsTime - serving, recharging bool - rcWeight uint64 - rcValue, rcDelta, startValue int64 - finishRecharge mclock.AbsTime +// ClientManager controls the capacity assigned to the clients of a server. +// Since ServerParams guarantee a safe lower estimate for processable requests +// even in case of all clients being active, ClientManager calculates a +// corrigated buffer value and usually allows a higher remaining buffer value +// to be returned with each reply. +type ClientManager struct { + clock mclock.Clock + lock sync.Mutex + enabledCh chan struct{} + stop chan chan struct{} + + curve PieceWiseLinear + sumRecharge, totalRecharge, totalConnected uint64 + logTotalCap, totalCapacity float64 + logTotalCapRaiseLimit float64 + minLogTotalCap, maxLogTotalCap float64 + capacityRaiseThreshold uint64 + capLastUpdate mclock.AbsTime + totalCapacityCh chan uint64 + + // recharge integrator is increasing in each moment with a rate of + // (totalRecharge / sumRecharge)*FixedPointMultiplier or 0 if sumRecharge==0 + rcLastUpdate mclock.AbsTime // last time the recharge integrator was updated + rcLastIntValue int64 // last updated value of the recharge integrator + // recharge queue is a priority queue with currently recharging client nodes + // as elements. The priority value is rcFullIntValue which allows to quickly + // determine which client will first finish recharge. + rcQueue *prque.Prque } -func (node *cmNode) update(time mclock.AbsTime) { - dt := int64(time - node.lastUpdate) - node.rcValue += node.rcDelta * dt / rcConst - node.lastUpdate = time - if node.recharging && time >= node.finishRecharge { - node.recharging = false - node.rcDelta = 0 - node.rcValue = 0 +// NewClientManager returns a new client manager. +// Client manager enhances flow control performance by allowing client buffers +// to recharge quicker than the minimum guaranteed recharge rate if possible. +// The sum of all minimum recharge rates (sumRecharge) is updated each time +// a clients starts or finishes buffer recharging. Then an adjusted total +// recharge rate is calculated using a piecewise linear recharge curve: +// +// totalRecharge = curve(sumRecharge) +// (totalRecharge >= sumRecharge is enforced) +// +// Then the "bonus" buffer recharge is distributed between currently recharging +// clients proportionally to their minimum recharge rates. +// +// Note: total recharge is proportional to the average number of parallel running +// serving threads. A recharge value of 1000000 corresponds to one thread in average. +// The maximum number of allowed serving threads should always be considerably +// higher than the targeted average number. +// +// Note 2: although it is possible to specify a curve allowing the total target +// recharge starting from zero sumRecharge, it makes sense to add a linear ramp +// starting from zero in order to not let a single low-priority client use up +// the entire server capacity and thus ensure quick availability for others at +// any moment. +func NewClientManager(curve PieceWiseLinear, clock mclock.Clock) *ClientManager { + cm := &ClientManager{ + clock: clock, + rcQueue: prque.New(func(a interface{}, i int) { a.(*ClientNode).queueIndex = i }), + capLastUpdate: clock.Now(), + stop: make(chan chan struct{}), } + if curve != nil { + cm.SetRechargeCurve(curve) + } + go func() { + // regularly recalculate and update total capacity + for { + select { + case <-time.After(time.Minute): + cm.lock.Lock() + cm.updateTotalCapacity(cm.clock.Now(), true) + cm.lock.Unlock() + case stop := <-cm.stop: + close(stop) + return + } + } + }() + return cm } -func (node *cmNode) set(serving bool, simReqCnt, sumWeight uint64) { - if node.serving && !serving { - node.recharging = true - sumWeight += node.rcWeight - } - node.serving = serving - if node.recharging && serving { - node.recharging = false - sumWeight -= node.rcWeight +// Stop stops the client manager +func (cm *ClientManager) Stop() { + stop := make(chan struct{}) + cm.stop <- stop + <-stop +} + +// SetRechargeCurve updates the recharge curve +func (cm *ClientManager) SetRechargeCurve(curve PieceWiseLinear) { + cm.lock.Lock() + defer cm.lock.Unlock() + + now := cm.clock.Now() + cm.updateRecharge(now) + cm.curve = curve + if len(curve) > 0 { + cm.totalRecharge = curve[len(curve)-1].Y + } else { + cm.totalRecharge = 0 } +} - node.rcDelta = 0 - if serving { - node.rcDelta = int64(rcConst / simReqCnt) +// SetCapacityRaiseThreshold sets a threshold value used for raising capFactor. +// Either if the difference between total allowed and connected capacity is less +// than this threshold or if their ratio is less than capacityRaiseThresholdRatio +// then capFactor is allowed to slowly raise. +func (cm *ClientManager) SetCapacityLimits(min, max, raiseThreshold uint64) { + if min < 1 { + min = 1 } - if node.recharging { - node.rcDelta = -int64(node.node.cm.rcRecharge * node.rcWeight / sumWeight) - node.finishRecharge = node.lastUpdate + mclock.AbsTime(node.rcValue*rcConst/(-node.rcDelta)) + cm.minLogTotalCap = math.Log(float64(min)) + if max < 1 { + max = 1 } + cm.maxLogTotalCap = math.Log(float64(max)) + cm.logTotalCap = cm.maxLogTotalCap + cm.capacityRaiseThreshold = raiseThreshold + cm.refreshCapacity() } -type ClientManager struct { - lock sync.Mutex - nodes map[*cmNode]struct{} - simReqCnt, sumWeight, rcSumValue uint64 - maxSimReq, maxRcSum uint64 - rcRecharge uint64 - resumeQueue chan chan bool - time mclock.AbsTime +// connect should be called when a client is connected, before passing it to any +// other ClientManager function +func (cm *ClientManager) connect(node *ClientNode) { + cm.lock.Lock() + defer cm.lock.Unlock() + + now := cm.clock.Now() + cm.updateRecharge(now) + node.corrBufValue = int64(node.params.BufLimit) + node.rcLastIntValue = cm.rcLastIntValue + node.queueIndex = -1 + cm.updateTotalCapacity(now, true) + cm.totalConnected += node.params.MinRecharge + cm.updateRaiseLimit() } -func NewClientManager(rcTarget, maxSimReq, maxRcSum uint64) *ClientManager { - cm := &ClientManager{ - nodes: make(map[*cmNode]struct{}), - resumeQueue: make(chan chan bool), - rcRecharge: rcConst * rcConst / (100*rcConst/rcTarget - rcConst), - maxSimReq: maxSimReq, - maxRcSum: maxRcSum, - } - go cm.queueProc() - return cm +// disconnect should be called when a client is disconnected +func (cm *ClientManager) disconnect(node *ClientNode) { + cm.lock.Lock() + defer cm.lock.Unlock() + + now := cm.clock.Now() + cm.updateRecharge(cm.clock.Now()) + cm.updateTotalCapacity(now, true) + cm.totalConnected -= node.params.MinRecharge + cm.updateRaiseLimit() } -func (self *ClientManager) Stop() { - self.lock.Lock() - defer self.lock.Unlock() +// accepted is called when a request with given maximum cost is accepted. +// It returns a priority indicator for the request which is used to determine placement +// in the serving queue. Older requests have higher priority by default. If the client +// is almost out of buffer, request priority is reduced. +func (cm *ClientManager) accepted(node *ClientNode, maxCost uint64, now mclock.AbsTime) (priority int64) { + cm.lock.Lock() + defer cm.lock.Unlock() - // signal any waiting accept routines to return false - self.nodes = make(map[*cmNode]struct{}) - close(self.resumeQueue) + cm.updateNodeRc(node, -int64(maxCost), &node.params, now) + rcTime := (node.params.BufLimit - uint64(node.corrBufValue)) * FixedPointMultiplier / node.params.MinRecharge + return -int64(now) - int64(rcTime) } -func (self *ClientManager) addNode(cnode *ClientNode) *cmNode { - time := mclock.Now() - node := &cmNode{ - node: cnode, - lastUpdate: time, - finishRecharge: time, - rcWeight: 1, +// processed updates the client buffer according to actual request cost after +// serving has been finished. +// +// Note: processed should always be called for all accepted requests +func (cm *ClientManager) processed(node *ClientNode, maxCost, realCost uint64, now mclock.AbsTime) { + if realCost > maxCost { + realCost = maxCost } - self.lock.Lock() - defer self.lock.Unlock() + cm.updateBuffer(node, int64(maxCost-realCost), now) +} + +// updateBuffer recalulates the corrected buffer value, adds the given value to it +// and updates the node's actual buffer value if possible +func (cm *ClientManager) updateBuffer(node *ClientNode, add int64, now mclock.AbsTime) { + cm.lock.Lock() + defer cm.lock.Unlock() - self.nodes[node] = struct{}{} - self.update(mclock.Now()) - return node + cm.updateNodeRc(node, add, &node.params, now) + if node.corrBufValue > node.bufValue { + if node.log != nil { + node.log.add(now, fmt.Sprintf("corrected bv=%d oldBv=%d", node.corrBufValue, node.bufValue)) + } + node.bufValue = node.corrBufValue + } } -func (self *ClientManager) removeNode(node *cmNode) { - self.lock.Lock() - defer self.lock.Unlock() +// updateParams updates the flow control parameters of a client node +func (cm *ClientManager) updateParams(node *ClientNode, params ServerParams, now mclock.AbsTime) { + cm.lock.Lock() + defer cm.lock.Unlock() - time := mclock.Now() - self.stop(node, time) - delete(self.nodes, node) - self.update(time) + cm.updateRecharge(now) + cm.updateTotalCapacity(now, true) + cm.totalConnected += params.MinRecharge - node.params.MinRecharge + cm.updateRaiseLimit() + cm.updateNodeRc(node, 0, ¶ms, now) } -// recalc sumWeight -func (self *ClientManager) updateNodes(time mclock.AbsTime) (rce bool) { - var sumWeight, rcSum uint64 - for node := range self.nodes { - rc := node.recharging - node.update(time) - if rc && !node.recharging { - rce = true - } - if node.recharging { - sumWeight += node.rcWeight - } - rcSum += uint64(node.rcValue) +// updateRaiseLimit recalculates the limiting value until which logTotalCap +// can be raised when no client freeze events occur +func (cm *ClientManager) updateRaiseLimit() { + if cm.capacityRaiseThreshold == 0 { + cm.logTotalCapRaiseLimit = 0 + return + } + limit := float64(cm.totalConnected + cm.capacityRaiseThreshold) + limit2 := float64(cm.totalConnected) * capacityRaiseThresholdRatio + if limit2 > limit { + limit = limit2 + } + if limit < 1 { + limit = 1 } - self.sumWeight = sumWeight - self.rcSumValue = rcSum - return + cm.logTotalCapRaiseLimit = math.Log(limit) } -func (self *ClientManager) update(time mclock.AbsTime) { - for { - firstTime := time - for node := range self.nodes { - if node.recharging && node.finishRecharge < firstTime { - firstTime = node.finishRecharge - } +// updateRecharge updates the recharge integrator and checks the recharge queue +// for nodes with recently filled buffers +func (cm *ClientManager) updateRecharge(now mclock.AbsTime) { + lastUpdate := cm.rcLastUpdate + cm.rcLastUpdate = now + // updating is done in multiple steps if node buffers are filled and sumRecharge + // is decreased before the given target time + for cm.sumRecharge > 0 { + sumRecharge := cm.sumRecharge + if sumRecharge > cm.totalRecharge { + sumRecharge = cm.totalRecharge } - if self.updateNodes(firstTime) { - for node := range self.nodes { - if node.recharging { - node.set(node.serving, self.simReqCnt, self.sumWeight) - } - } - } else { - self.time = time + bonusRatio := float64(1) + v := cm.curve.ValueAt(sumRecharge) + s := float64(sumRecharge) + if v > s && s > 0 { + bonusRatio = v / s + } + dt := now - lastUpdate + // fetch the client that finishes first + rcqNode := cm.rcQueue.PopItem().(*ClientNode) // if sumRecharge > 0 then the queue cannot be empty + // check whether it has already finished + dtNext := mclock.AbsTime(float64(rcqNode.rcFullIntValue-cm.rcLastIntValue) / bonusRatio) + if dt < dtNext { + // not finished yet, put it back, update integrator according + // to current bonusRatio and return + cm.rcQueue.Push(rcqNode, -rcqNode.rcFullIntValue) + cm.rcLastIntValue += int64(bonusRatio * float64(dt)) return } + lastUpdate += dtNext + // finished recharging, update corrBufValue and sumRecharge if necessary and do next step + if rcqNode.corrBufValue < int64(rcqNode.params.BufLimit) { + rcqNode.corrBufValue = int64(rcqNode.params.BufLimit) + cm.sumRecharge -= rcqNode.params.MinRecharge + } + cm.rcLastIntValue = rcqNode.rcFullIntValue } } -func (self *ClientManager) canStartReq() bool { - return self.simReqCnt < self.maxSimReq && self.rcSumValue < self.maxRcSum +// updateNodeRc updates a node's corrBufValue and adds an external correction value. +// It also adds or removes the rcQueue entry and updates ServerParams and sumRecharge if necessary. +func (cm *ClientManager) updateNodeRc(node *ClientNode, bvc int64, params *ServerParams, now mclock.AbsTime) { + cm.updateRecharge(now) + wasFull := true + if node.corrBufValue != int64(node.params.BufLimit) { + wasFull = false + node.corrBufValue += (cm.rcLastIntValue - node.rcLastIntValue) * int64(node.params.MinRecharge) / FixedPointMultiplier + if node.corrBufValue > int64(node.params.BufLimit) { + node.corrBufValue = int64(node.params.BufLimit) + } + node.rcLastIntValue = cm.rcLastIntValue + } + node.corrBufValue += bvc + diff := int64(params.BufLimit - node.params.BufLimit) + if diff > 0 { + node.corrBufValue += diff + } + isFull := false + if node.corrBufValue >= int64(params.BufLimit) { + node.corrBufValue = int64(params.BufLimit) + isFull = true + } + if !wasFull { + cm.sumRecharge -= node.params.MinRecharge + } + if params != &node.params { + node.params = *params + } + if !isFull { + cm.sumRecharge += node.params.MinRecharge + if node.queueIndex != -1 { + cm.rcQueue.Remove(node.queueIndex) + } + node.rcLastIntValue = cm.rcLastIntValue + node.rcFullIntValue = cm.rcLastIntValue + (int64(node.params.BufLimit)-node.corrBufValue)*FixedPointMultiplier/int64(node.params.MinRecharge) + cm.rcQueue.Push(node, -node.rcFullIntValue) + } } -func (self *ClientManager) queueProc() { - for rc := range self.resumeQueue { - for { - time.Sleep(time.Millisecond * 10) - self.lock.Lock() - self.update(mclock.Now()) - cs := self.canStartReq() - self.lock.Unlock() - if cs { - break - } - } - close(rc) +// reduceTotalCapacity reduces the total capacity allowance in case of a client freeze event +func (cm *ClientManager) reduceTotalCapacity(frozenCap uint64) { + cm.lock.Lock() + defer cm.lock.Unlock() + + ratio := float64(1) + if frozenCap < cm.totalConnected { + ratio = float64(frozenCap) / float64(cm.totalConnected) } + now := cm.clock.Now() + cm.updateTotalCapacity(now, false) + cm.logTotalCap -= capacityDropFactor * ratio + if cm.logTotalCap < cm.minLogTotalCap { + cm.logTotalCap = cm.minLogTotalCap + } + cm.updateTotalCapacity(now, true) } -func (self *ClientManager) accept(node *cmNode, time mclock.AbsTime) bool { - self.lock.Lock() - defer self.lock.Unlock() +// updateTotalCapacity updates the total capacity factor. The capacity factor allows +// the total capacity of the system to go over the allowed total recharge value +// if clients go to frozen state sufficiently rarely. +// The capacity factor is dropped instantly by a small amount if a clients is frozen. +// It is raised slowly (with a large time constant) if the total connected capacity +// is close to the total allowed amount and no clients are frozen. +func (cm *ClientManager) updateTotalCapacity(now mclock.AbsTime, refresh bool) { + dt := now - cm.capLastUpdate + cm.capLastUpdate = now - self.update(time) - if !self.canStartReq() { - resume := make(chan bool) - self.lock.Unlock() - self.resumeQueue <- resume - <-resume - self.lock.Lock() - if _, ok := self.nodes[node]; !ok { - return false // reject if node has been removed or manager has been stopped + if cm.logTotalCap < cm.logTotalCapRaiseLimit { + cm.logTotalCap += capacityRaiseTC * float64(dt) + if cm.logTotalCap > cm.logTotalCapRaiseLimit { + cm.logTotalCap = cm.logTotalCapRaiseLimit } } - self.simReqCnt++ - node.set(true, self.simReqCnt, self.sumWeight) - node.startValue = node.rcValue - self.update(self.time) - return true + if cm.logTotalCap > cm.maxLogTotalCap { + cm.logTotalCap = cm.maxLogTotalCap + } + if refresh { + cm.refreshCapacity() + } } -func (self *ClientManager) stop(node *cmNode, time mclock.AbsTime) { - if node.serving { - self.update(time) - self.simReqCnt-- - node.set(false, self.simReqCnt, self.sumWeight) - self.update(time) +// refreshCapacity recalculates the total capacity value and sends an update to the subscription +// channel if the relative change of the value since the last update is more than 0.1 percent +func (cm *ClientManager) refreshCapacity() { + totalCapacity := math.Exp(cm.logTotalCap) + if totalCapacity >= cm.totalCapacity*0.999 && totalCapacity <= cm.totalCapacity*1.001 { + return } + cm.totalCapacity = totalCapacity + if cm.totalCapacityCh != nil { + select { + case cm.totalCapacityCh <- uint64(cm.totalCapacity): + default: + } + } +} + +// SubscribeTotalCapacity returns all future updates to the total capacity value +// through a channel and also returns the current value +func (cm *ClientManager) SubscribeTotalCapacity(ch chan uint64) uint64 { + cm.lock.Lock() + defer cm.lock.Unlock() + + cm.totalCapacityCh = ch + return uint64(cm.totalCapacity) } -func (self *ClientManager) processed(node *cmNode, time mclock.AbsTime) (rcValue, rcCost uint64) { - self.lock.Lock() - defer self.lock.Unlock() +// PieceWiseLinear is used to describe recharge curves +type PieceWiseLinear []struct{ X, Y uint64 } - self.stop(node, time) - return uint64(node.rcValue), uint64(node.rcValue - node.startValue) +// ValueAt returns the curve's value at a given point +func (pwl PieceWiseLinear) ValueAt(x uint64) float64 { + l := 0 + h := len(pwl) + if h == 0 { + return 0 + } + for h != l { + m := (l + h) / 2 + if x > pwl[m].X { + l = m + 1 + } else { + h = m + } + } + if l == 0 { + return float64(pwl[0].Y) + } + l-- + if h == len(pwl) { + return float64(pwl[l].Y) + } + dx := pwl[h].X - pwl[l].X + if dx < 1 { + return float64(pwl[l].Y) + } + return float64(pwl[l].Y) + float64(pwl[h].Y-pwl[l].Y)*float64(x-pwl[l].X)/float64(dx) +} + +// Valid returns true if the X coordinates of the curve points are non-strictly monotonic +func (pwl PieceWiseLinear) Valid() bool { + var lastX uint64 + for _, i := range pwl { + if i.X < lastX { + return false + } + lastX = i.X + } + return true } diff --git a/les/flowcontrol/manager_test.go b/les/flowcontrol/manager_test.go new file mode 100644 index 000000000000..9d2f88763614 --- /dev/null +++ b/les/flowcontrol/manager_test.go @@ -0,0 +1,125 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package flowcontrol + +import ( + "math/rand" + "testing" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" +) + +type testNode struct { + node *ClientNode + bufLimit, capacity uint64 + waitUntil mclock.AbsTime + index, totalCost uint64 +} + +const ( + testMaxCost = 1000000 + testLength = 100000 +) + +// testConstantTotalCapacity simulates multiple request sender nodes and verifies +// whether the total amount of served requests matches the expected value based on +// the total capacity and the duration of the test. +// Some nodes are sending requests occasionally so that their buffer should regularly +// reach the maximum while other nodes (the "max capacity nodes") are sending at the +// maximum permitted rate. The max capacity nodes are changed multiple times during +// a single test. +func TestConstantTotalCapacity(t *testing.T) { + testConstantTotalCapacity(t, 10, 1, 0) + testConstantTotalCapacity(t, 10, 1, 1) + testConstantTotalCapacity(t, 30, 1, 0) + testConstantTotalCapacity(t, 30, 2, 3) + testConstantTotalCapacity(t, 100, 1, 0) + testConstantTotalCapacity(t, 100, 3, 5) + testConstantTotalCapacity(t, 100, 5, 10) +} + +func testConstantTotalCapacity(t *testing.T, nodeCount, maxCapacityNodes, randomSend int) { + clock := &mclock.Simulated{} + nodes := make([]*testNode, nodeCount) + var totalCapacity uint64 + for i := range nodes { + nodes[i] = &testNode{capacity: uint64(50000 + rand.Intn(100000))} + totalCapacity += nodes[i].capacity + } + m := NewClientManager(PieceWiseLinear{{0, totalCapacity}}, clock) + for _, n := range nodes { + n.bufLimit = n.capacity * 6000 + n.node = NewClientNode(m, ServerParams{BufLimit: n.bufLimit, MinRecharge: n.capacity}) + } + maxNodes := make([]int, maxCapacityNodes) + for i := range maxNodes { + // we don't care if some indexes are selected multiple times + // in that case we have fewer max nodes + maxNodes[i] = rand.Intn(nodeCount) + } + + var sendCount int + for i := 0; i < testLength; i++ { + now := clock.Now() + for _, idx := range maxNodes { + for nodes[idx].send(t, now) { + } + } + if rand.Intn(testLength) < maxCapacityNodes*3 { + maxNodes[rand.Intn(maxCapacityNodes)] = rand.Intn(nodeCount) + } + + sendCount += randomSend + failCount := randomSend * 10 + for sendCount > 0 && failCount > 0 { + if nodes[rand.Intn(nodeCount)].send(t, now) { + sendCount-- + } else { + failCount-- + } + } + clock.Run(time.Millisecond) + } + + var totalCost uint64 + for _, n := range nodes { + totalCost += n.totalCost + } + ratio := float64(totalCost) / float64(totalCapacity) / testLength + if ratio < 0.98 || ratio > 1.02 { + t.Errorf("totalCost/totalCapacity/testLength ratio incorrect (expected: 1, got: %f)", ratio) + } + +} + +func (n *testNode) send(t *testing.T, now mclock.AbsTime) bool { + if now < n.waitUntil { + return false + } + n.index++ + if ok, _, _ := n.node.AcceptRequest(0, n.index, testMaxCost); !ok { + t.Fatalf("Rejected request after expected waiting time has passed") + } + rcost := uint64(rand.Int63n(testMaxCost)) + bv := n.node.RequestProcessed(0, n.index, testMaxCost, rcost) + if bv < testMaxCost { + n.waitUntil = now + mclock.AbsTime((testMaxCost-bv)*1001000/n.capacity) + } + n.totalCost += rcost + return true +} diff --git a/les/freeclient.go b/les/freeclient.go deleted file mode 100644 index 5ee607be8fb7..000000000000 --- a/les/freeclient.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package les implements the Light Ethereum Subprotocol. -package les - -import ( - "io" - "math" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/common/prque" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rlp" -) - -// freeClientPool implements a client database that limits the connection time -// of each client and manages accepting/rejecting incoming connections and even -// kicking out some connected clients. The pool calculates recent usage time -// for each known client (a value that increases linearly when the client is -// connected and decreases exponentially when not connected). Clients with lower -// recent usage are preferred, unknown nodes have the highest priority. Already -// connected nodes receive a small bias in their favor in order to avoid accepting -// and instantly kicking out clients. -// -// Note: the pool can use any string for client identification. Using signature -// keys for that purpose would not make sense when being known has a negative -// value for the client. Currently the LES protocol manager uses IP addresses -// (without port address) to identify clients. -type freeClientPool struct { - db ethdb.Database - lock sync.Mutex - clock mclock.Clock - closed bool - - connectedLimit, totalLimit int - - addressMap map[string]*freeClientPoolEntry - connPool, disconnPool *prque.Prque - startupTime mclock.AbsTime - logOffsetAtStartup int64 -} - -const ( - recentUsageExpTC = time.Hour // time constant of the exponential weighting window for "recent" server usage - fixedPointMultiplier = 0x1000000 // constant to convert logarithms to fixed point format - connectedBias = time.Minute // this bias is applied in favor of already connected clients in order to avoid kicking them out very soon -) - -// newFreeClientPool creates a new free client pool -func newFreeClientPool(db ethdb.Database, connectedLimit, totalLimit int, clock mclock.Clock) *freeClientPool { - pool := &freeClientPool{ - db: db, - clock: clock, - addressMap: make(map[string]*freeClientPoolEntry), - connPool: prque.New(poolSetIndex), - disconnPool: prque.New(poolSetIndex), - connectedLimit: connectedLimit, - totalLimit: totalLimit, - } - pool.loadFromDb() - return pool -} - -func (f *freeClientPool) stop() { - f.lock.Lock() - f.closed = true - f.saveToDb() - f.lock.Unlock() -} - -// connect should be called after a successful handshake. If the connection was -// rejected, there is no need to call disconnect. -// -// Note: the disconnectFn callback should not block. -func (f *freeClientPool) connect(address string, disconnectFn func()) bool { - f.lock.Lock() - defer f.lock.Unlock() - - if f.closed { - return false - } - e := f.addressMap[address] - now := f.clock.Now() - var recentUsage int64 - if e == nil { - e = &freeClientPoolEntry{address: address, index: -1} - f.addressMap[address] = e - } else { - if e.connected { - log.Debug("Client already connected", "address", address) - return false - } - recentUsage = int64(math.Exp(float64(e.logUsage-f.logOffset(now)) / fixedPointMultiplier)) - } - e.linUsage = recentUsage - int64(now) - // check whether (linUsage+connectedBias) is smaller than the highest entry in the connected pool - if f.connPool.Size() == f.connectedLimit { - i := f.connPool.PopItem().(*freeClientPoolEntry) - if e.linUsage+int64(connectedBias)-i.linUsage < 0 { - // kick it out and accept the new client - f.connPool.Remove(i.index) - f.calcLogUsage(i, now) - i.connected = false - f.disconnPool.Push(i, -i.logUsage) - log.Debug("Client kicked out", "address", i.address) - i.disconnectFn() - } else { - // keep the old client and reject the new one - f.connPool.Push(i, i.linUsage) - log.Debug("Client rejected", "address", address) - return false - } - } - f.disconnPool.Remove(e.index) - e.connected = true - e.disconnectFn = disconnectFn - f.connPool.Push(e, e.linUsage) - if f.connPool.Size()+f.disconnPool.Size() > f.totalLimit { - f.disconnPool.Pop() - } - log.Debug("Client accepted", "address", address) - return true -} - -// disconnect should be called when a connection is terminated. If the disconnection -// was initiated by the pool itself using disconnectFn then calling disconnect is -// not necessary but permitted. -func (f *freeClientPool) disconnect(address string) { - f.lock.Lock() - defer f.lock.Unlock() - - if f.closed { - return - } - e := f.addressMap[address] - now := f.clock.Now() - if !e.connected { - log.Debug("Client already disconnected", "address", address) - return - } - - f.connPool.Remove(e.index) - f.calcLogUsage(e, now) - e.connected = false - f.disconnPool.Push(e, -e.logUsage) - log.Debug("Client disconnected", "address", address) -} - -// logOffset calculates the time-dependent offset for the logarithmic -// representation of recent usage -func (f *freeClientPool) logOffset(now mclock.AbsTime) int64 { - // Note: fixedPointMultiplier acts as a multiplier here; the reason for dividing the divisor - // is to avoid int64 overflow. We assume that int64(recentUsageExpTC) >> fixedPointMultiplier. - logDecay := int64((time.Duration(now - f.startupTime)) / (recentUsageExpTC / fixedPointMultiplier)) - return f.logOffsetAtStartup + logDecay -} - -// calcLogUsage converts recent usage from linear to logarithmic representation -// when disconnecting a peer or closing the client pool -func (f *freeClientPool) calcLogUsage(e *freeClientPoolEntry, now mclock.AbsTime) { - dt := e.linUsage + int64(now) - if dt < 1 { - dt = 1 - } - e.logUsage = int64(math.Log(float64(dt))*fixedPointMultiplier) + f.logOffset(now) -} - -// freeClientPoolStorage is the RLP representation of the pool's database storage -type freeClientPoolStorage struct { - LogOffset uint64 - List []*freeClientPoolEntry -} - -// loadFromDb restores pool status from the database storage -// (automatically called at initialization) -func (f *freeClientPool) loadFromDb() { - enc, err := f.db.Get([]byte("freeClientPool")) - if err != nil { - return - } - var storage freeClientPoolStorage - err = rlp.DecodeBytes(enc, &storage) - if err != nil { - log.Error("Failed to decode client list", "err", err) - return - } - f.logOffsetAtStartup = int64(storage.LogOffset) - f.startupTime = f.clock.Now() - for _, e := range storage.List { - log.Debug("Loaded free client record", "address", e.address, "logUsage", e.logUsage) - f.addressMap[e.address] = e - f.disconnPool.Push(e, -e.logUsage) - } -} - -// saveToDb saves pool status to the database storage -// (automatically called during shutdown) -func (f *freeClientPool) saveToDb() { - now := f.clock.Now() - storage := freeClientPoolStorage{ - LogOffset: uint64(f.logOffset(now)), - List: make([]*freeClientPoolEntry, len(f.addressMap)), - } - i := 0 - for _, e := range f.addressMap { - if e.connected { - f.calcLogUsage(e, now) - } - storage.List[i] = e - i++ - } - enc, err := rlp.EncodeToBytes(storage) - if err != nil { - log.Error("Failed to encode client list", "err", err) - } else { - f.db.Put([]byte("freeClientPool"), enc) - } -} - -// freeClientPoolEntry represents a client address known by the pool. -// When connected, recent usage is calculated as linUsage + int64(clock.Now()) -// When disconnected, it is calculated as exp(logUsage - logOffset) where logOffset -// also grows linearly with time while the server is running. -// Conversion between linear and logarithmic representation happens when connecting -// or disconnecting the node. -// -// Note: linUsage and logUsage are values used with constantly growing offsets so -// even though they are close to each other at any time they may wrap around int64 -// limits over time. Comparison should be performed accordingly. -type freeClientPoolEntry struct { - address string - connected bool - disconnectFn func() - linUsage, logUsage int64 - index int -} - -func (e *freeClientPoolEntry) EncodeRLP(w io.Writer) error { - return rlp.Encode(w, []interface{}{e.address, uint64(e.logUsage)}) -} - -func (e *freeClientPoolEntry) DecodeRLP(s *rlp.Stream) error { - var entry struct { - Address string - LogUsage uint64 - } - if err := s.Decode(&entry); err != nil { - return err - } - e.address = entry.Address - e.logUsage = int64(entry.LogUsage) - e.connected = false - e.index = -1 - return nil -} - -// poolSetIndex callback is used by both priority queues to set/update the index of -// the element in the queue. Index is needed to remove elements other than the top one. -func poolSetIndex(a interface{}, i int) { - a.(*freeClientPoolEntry).index = i -} diff --git a/les/freeclient_test.go b/les/freeclient_test.go deleted file mode 100644 index e95abc7aad01..000000000000 --- a/les/freeclient_test.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. -package les - -import ( - "fmt" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/ethdb" -) - -func TestFreeClientPoolL10C100(t *testing.T) { - testFreeClientPool(t, 10, 100) -} - -func TestFreeClientPoolL40C200(t *testing.T) { - testFreeClientPool(t, 40, 200) -} - -func TestFreeClientPoolL100C300(t *testing.T) { - testFreeClientPool(t, 100, 300) -} - -const testFreeClientPoolTicks = 500000 - -func testFreeClientPool(t *testing.T, connLimit, clientCount int) { - var ( - clock mclock.Simulated - db = ethdb.NewMemDatabase() - pool = newFreeClientPool(db, connLimit, 10000, &clock) - connected = make([]bool, clientCount) - connTicks = make([]int, clientCount) - disconnCh = make(chan int, clientCount) - ) - peerId := func(i int) string { - return fmt.Sprintf("test peer #%d", i) - } - disconnFn := func(i int) func() { - return func() { - disconnCh <- i - } - } - - // pool should accept new peers up to its connected limit - for i := 0; i < connLimit; i++ { - if pool.connect(peerId(i), disconnFn(i)) { - connected[i] = true - } else { - t.Fatalf("Test peer #%d rejected", i) - } - } - // since all accepted peers are new and should not be kicked out, the next one should be rejected - if pool.connect(peerId(connLimit), disconnFn(connLimit)) { - connected[connLimit] = true - t.Fatalf("Peer accepted over connected limit") - } - - // randomly connect and disconnect peers, expect to have a similar total connection time at the end - for tickCounter := 0; tickCounter < testFreeClientPoolTicks; tickCounter++ { - clock.Run(1 * time.Second) - - i := rand.Intn(clientCount) - if connected[i] { - pool.disconnect(peerId(i)) - connected[i] = false - connTicks[i] += tickCounter - } else { - if pool.connect(peerId(i), disconnFn(i)) { - connected[i] = true - connTicks[i] -= tickCounter - } - } - pollDisconnects: - for { - select { - case i := <-disconnCh: - pool.disconnect(peerId(i)) - if connected[i] { - connTicks[i] += tickCounter - connected[i] = false - } - default: - break pollDisconnects - } - } - } - - expTicks := testFreeClientPoolTicks * connLimit / clientCount - expMin := expTicks - expTicks/10 - expMax := expTicks + expTicks/10 - - // check if the total connected time of peers are all in the expected range - for i, c := range connected { - if c { - connTicks[i] += testFreeClientPoolTicks - } - if connTicks[i] < expMin || connTicks[i] > expMax { - t.Errorf("Total connected time of test node #%d (%d) outside expected range (%d to %d)", i, connTicks[i], expMin, expMax) - } - } - - // a previously unknown peer should be accepted now - if !pool.connect("newPeer", func() {}) { - t.Fatalf("Previously unknown peer rejected") - } - - // close and restart pool - pool.stop() - pool = newFreeClientPool(db, connLimit, 10000, &clock) - - // try connecting all known peers (connLimit should be filled up) - for i := 0; i < clientCount; i++ { - pool.connect(peerId(i), func() {}) - } - // expect pool to remember known nodes and kick out one of them to accept a new one - if !pool.connect("newPeer2", func() {}) { - t.Errorf("Previously unknown peer rejected after restarting pool") - } - pool.stop() -} diff --git a/les/handler.go b/les/handler.go deleted file mode 100644 index 19ccbcd2b602..000000000000 --- a/les/handler.go +++ /dev/null @@ -1,1250 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package les implements the Light Ethereum Subprotocol. -package les - -import ( - "encoding/binary" - "encoding/json" - "fmt" - "math/big" - "net" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/mclock" - "github.com/ethereum/go-ethereum/consensus" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/discv5" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/trie" -) - -const ( - softResponseLimit = 2 * 1024 * 1024 // Target maximum size of returned blocks, headers or node data. - estHeaderRlpSize = 500 // Approximate size of an RLP encoded block header - - ethVersion = 63 // equivalent eth version for the downloader - - MaxHeaderFetch = 192 // Amount of block headers to be fetched per retrieval request - MaxBodyFetch = 32 // Amount of block bodies to be fetched per retrieval request - MaxReceiptFetch = 128 // Amount of transaction receipts to allow fetching per request - MaxCodeFetch = 64 // Amount of contract codes to allow fetching per request - MaxProofsFetch = 64 // Amount of merkle proofs to be fetched per retrieval request - MaxHelperTrieProofsFetch = 64 // Amount of merkle proofs to be fetched per retrieval request - MaxTxSend = 64 // Amount of transactions to be send per request - MaxTxStatus = 256 // Amount of transactions to queried per request - - disableClientRemovePeer = false -) - -func errResp(code errCode, format string, v ...interface{}) error { - return fmt.Errorf("%v - %v", code, fmt.Sprintf(format, v...)) -} - -type BlockChain interface { - Config() *params.ChainConfig - HasHeader(hash common.Hash, number uint64) bool - GetHeader(hash common.Hash, number uint64) *types.Header - GetHeaderByHash(hash common.Hash) *types.Header - CurrentHeader() *types.Header - GetTd(hash common.Hash, number uint64) *big.Int - State() (*state.StateDB, error) - InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) - Rollback(chain []common.Hash) - GetHeaderByNumber(number uint64) *types.Header - GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) - Genesis() *types.Block - SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription -} - -type txPool interface { - AddRemotes(txs []*types.Transaction) []error - Status(hashes []common.Hash) []core.TxStatus -} - -type ProtocolManager struct { - lightSync bool - txpool txPool - txrelay *LesTxRelay - networkId uint64 - chainConfig *params.ChainConfig - iConfig *light.IndexerConfig - blockchain BlockChain - chainDb ethdb.Database - odr *LesOdr - server *LesServer - serverPool *serverPool - clientPool *freeClientPool - lesTopic discv5.Topic - reqDist *requestDistributor - retriever *retrieveManager - - downloader *downloader.Downloader - fetcher *lightFetcher - peers *peerSet - maxPeers int - - eventMux *event.TypeMux - - // channels for fetcher, syncer, txsyncLoop - newPeerCh chan *peer - quitSync chan struct{} - noMorePeers chan struct{} - - // wait group is used for graceful shutdowns during downloading - // and processing - wg *sync.WaitGroup -} - -// NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable -// with the ethereum network. -func NewProtocolManager(chainConfig *params.ChainConfig, indexerConfig *light.IndexerConfig, lightSync bool, networkId uint64, mux *event.TypeMux, engine consensus.Engine, peers *peerSet, blockchain BlockChain, txpool txPool, chainDb ethdb.Database, odr *LesOdr, txrelay *LesTxRelay, serverPool *serverPool, quitSync chan struct{}, wg *sync.WaitGroup) (*ProtocolManager, error) { - // Create the protocol manager with the base fields - manager := &ProtocolManager{ - lightSync: lightSync, - eventMux: mux, - blockchain: blockchain, - chainConfig: chainConfig, - iConfig: indexerConfig, - chainDb: chainDb, - odr: odr, - networkId: networkId, - txpool: txpool, - txrelay: txrelay, - serverPool: serverPool, - peers: peers, - newPeerCh: make(chan *peer), - quitSync: quitSync, - wg: wg, - noMorePeers: make(chan struct{}), - } - if odr != nil { - manager.retriever = odr.retriever - manager.reqDist = odr.retriever.dist - } - - removePeer := manager.removePeer - if disableClientRemovePeer { - removePeer = func(id string) {} - } - - if lightSync { - manager.downloader = downloader.New(downloader.LightSync, chainDb, manager.eventMux, nil, blockchain, removePeer) - manager.peers.notify((*downloaderPeerNotify)(manager)) - manager.fetcher = newLightFetcher(manager) - } - - return manager, nil -} - -// removePeer initiates disconnection from a peer by removing it from the peer set -func (pm *ProtocolManager) removePeer(id string) { - pm.peers.Unregister(id) -} - -func (pm *ProtocolManager) Start(maxPeers int) { - pm.maxPeers = maxPeers - - if pm.lightSync { - go pm.syncer() - } else { - pm.clientPool = newFreeClientPool(pm.chainDb, maxPeers, 10000, mclock.System{}) - go func() { - for range pm.newPeerCh { - } - }() - } -} - -func (pm *ProtocolManager) Stop() { - // Showing a log message. During download / process this could actually - // take between 5 to 10 seconds and therefor feedback is required. - log.Info("Stopping light Ethereum protocol") - - // Quit the sync loop. - // After this send has completed, no new peers will be accepted. - pm.noMorePeers <- struct{}{} - - close(pm.quitSync) // quits syncer, fetcher - if pm.clientPool != nil { - pm.clientPool.stop() - } - - // Disconnect existing sessions. - // This also closes the gate for any new registrations on the peer set. - // sessions which are already established but not added to pm.peers yet - // will exit when they try to register. - pm.peers.Close() - - // Wait for any process action - pm.wg.Wait() - - log.Info("Light Ethereum protocol stopped") -} - -// runPeer is the p2p protocol run function for the given version. -func (pm *ProtocolManager) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error { - var entry *poolEntry - peer := pm.newPeer(int(version), pm.networkId, p, rw) - if pm.serverPool != nil { - entry = pm.serverPool.connect(peer, peer.Node()) - } - peer.poolEntry = entry - select { - case pm.newPeerCh <- peer: - pm.wg.Add(1) - defer pm.wg.Done() - err := pm.handle(peer) - if entry != nil { - pm.serverPool.disconnect(entry) - } - return err - case <-pm.quitSync: - if entry != nil { - pm.serverPool.disconnect(entry) - } - return p2p.DiscQuitting - } -} - -func (pm *ProtocolManager) newPeer(pv int, nv uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - return newPeer(pv, nv, p, newMeteredMsgWriter(rw)) -} - -// handle is the callback invoked to manage the life cycle of a les peer. When -// this function terminates, the peer is disconnected. -func (pm *ProtocolManager) handle(p *peer) error { - // Ignore maxPeers if this is a trusted peer - // In server mode we try to check into the client pool after handshake - if pm.lightSync && pm.peers.Len() >= pm.maxPeers && !p.Peer.Info().Network.Trusted { - return p2p.DiscTooManyPeers - } - - p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) - - // Execute the LES handshake - var ( - genesis = pm.blockchain.Genesis() - head = pm.blockchain.CurrentHeader() - hash = head.Hash() - number = head.Number.Uint64() - td = pm.blockchain.GetTd(hash, number) - ) - if err := p.Handshake(td, hash, number, genesis.Hash(), pm.server); err != nil { - p.Log().Debug("Light Ethereum handshake failed", "err", err) - return err - } - - if !pm.lightSync && !p.Peer.Info().Network.Trusted { - addr, ok := p.RemoteAddr().(*net.TCPAddr) - // test peer address is not a tcp address, don't use client pool if can not typecast - if ok { - id := addr.IP.String() - if !pm.clientPool.connect(id, func() { go pm.removePeer(p.id) }) { - return p2p.DiscTooManyPeers - } - defer pm.clientPool.disconnect(id) - } - } - - if rw, ok := p.rw.(*meteredMsgReadWriter); ok { - rw.Init(p.version) - } - // Register the peer locally - if err := pm.peers.Register(p); err != nil { - p.Log().Error("Light Ethereum peer registration failed", "err", err) - return err - } - defer func() { - if pm.server != nil && pm.server.fcManager != nil && p.fcClient != nil { - p.fcClient.Remove(pm.server.fcManager) - } - pm.removePeer(p.id) - }() - // Register the peer in the downloader. If the downloader considers it banned, we disconnect - if pm.lightSync { - p.lock.Lock() - head := p.headInfo - p.lock.Unlock() - if pm.fetcher != nil { - pm.fetcher.announce(p, head) - } - - if p.poolEntry != nil { - pm.serverPool.registered(p.poolEntry) - } - } - - stop := make(chan struct{}) - defer close(stop) - go func() { - // new block announce loop - for { - select { - case announce := <-p.announceChn: - p.SendAnnounce(announce) - case <-stop: - return - } - } - }() - - // main loop. handle incoming messages. - for { - if err := pm.handleMsg(p); err != nil { - p.Log().Debug("Light Ethereum message handling failed", "err", err) - return err - } - } -} - -var reqList = []uint64{GetBlockHeadersMsg, GetBlockBodiesMsg, GetCodeMsg, GetReceiptsMsg, GetProofsV1Msg, SendTxMsg, SendTxV2Msg, GetTxStatusMsg, GetHeaderProofsMsg, GetProofsV2Msg, GetHelperTrieProofsMsg} - -// handleMsg is invoked whenever an inbound message is received from a remote -// peer. The remote connection is torn down upon returning any error. -func (pm *ProtocolManager) handleMsg(p *peer) error { - // Read the next message from the remote peer, and ensure it's fully consumed - msg, err := p.rw.ReadMsg() - if err != nil { - return err - } - p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) - - costs := p.fcCosts[msg.Code] - reject := func(reqCnt, maxCnt uint64) bool { - if p.fcClient == nil || reqCnt > maxCnt { - return true - } - bufValue, _ := p.fcClient.AcceptRequest() - cost := costs.baseCost + reqCnt*costs.reqCost - if cost > pm.server.defParams.BufLimit { - cost = pm.server.defParams.BufLimit - } - if cost > bufValue { - recharge := time.Duration((cost - bufValue) * 1000000 / pm.server.defParams.MinRecharge) - p.Log().Error("Request came too early", "recharge", common.PrettyDuration(recharge)) - return true - } - return false - } - - if msg.Size > ProtocolMaxMsgSize { - return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) - } - defer msg.Discard() - - var deliverMsg *Msg - - // Handle the message depending on its contents - switch msg.Code { - case StatusMsg: - p.Log().Trace("Received status message") - // Status messages should never arrive after the handshake - return errResp(ErrExtraStatusMsg, "uncontrolled status message") - - // Block header query, collect the requested headers and reply - case AnnounceMsg: - p.Log().Trace("Received announce message") - if p.requestAnnounceType == announceTypeNone { - return errResp(ErrUnexpectedResponse, "") - } - - var req announceData - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - - if p.requestAnnounceType == announceTypeSigned { - if err := req.checkSignature(p.ID()); err != nil { - p.Log().Trace("Invalid announcement signature", "err", err) - return err - } - p.Log().Trace("Valid announcement signature") - } - - p.Log().Trace("Announce message content", "number", req.Number, "hash", req.Hash, "td", req.Td, "reorg", req.ReorgDepth) - if pm.fetcher != nil { - pm.fetcher.announce(p, &req) - } - - case GetBlockHeadersMsg: - p.Log().Trace("Received block header request") - // Decode the complex header query - var req struct { - ReqID uint64 - Query getBlockHeadersData - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "%v: %v", msg, err) - } - - query := req.Query - if reject(query.Amount, MaxHeaderFetch) { - return errResp(ErrRequestRejected, "") - } - - hashMode := query.Origin.Hash != (common.Hash{}) - first := true - maxNonCanonical := uint64(100) - - // Gather headers until the fetch or network limits is reached - var ( - bytes common.StorageSize - headers []*types.Header - unknown bool - ) - for !unknown && len(headers) < int(query.Amount) && bytes < softResponseLimit { - // Retrieve the next header satisfying the query - var origin *types.Header - if hashMode { - if first { - first = false - origin = pm.blockchain.GetHeaderByHash(query.Origin.Hash) - if origin != nil { - query.Origin.Number = origin.Number.Uint64() - } - } else { - origin = pm.blockchain.GetHeader(query.Origin.Hash, query.Origin.Number) - } - } else { - origin = pm.blockchain.GetHeaderByNumber(query.Origin.Number) - } - if origin == nil { - break - } - headers = append(headers, origin) - bytes += estHeaderRlpSize - - // Advance to the next header of the query - switch { - case hashMode && query.Reverse: - // Hash based traversal towards the genesis block - ancestor := query.Skip + 1 - if ancestor == 0 { - unknown = true - } else { - query.Origin.Hash, query.Origin.Number = pm.blockchain.GetAncestor(query.Origin.Hash, query.Origin.Number, ancestor, &maxNonCanonical) - unknown = (query.Origin.Hash == common.Hash{}) - } - case hashMode && !query.Reverse: - // Hash based traversal towards the leaf block - var ( - current = origin.Number.Uint64() - next = current + query.Skip + 1 - ) - if next <= current { - infos, _ := json.MarshalIndent(p.Peer.Info(), "", " ") - p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", query.Skip, "next", next, "attacker", infos) - unknown = true - } else { - if header := pm.blockchain.GetHeaderByNumber(next); header != nil { - nextHash := header.Hash() - expOldHash, _ := pm.blockchain.GetAncestor(nextHash, next, query.Skip+1, &maxNonCanonical) - if expOldHash == query.Origin.Hash { - query.Origin.Hash, query.Origin.Number = nextHash, next - } else { - unknown = true - } - } else { - unknown = true - } - } - case query.Reverse: - // Number based traversal towards the genesis block - if query.Origin.Number >= query.Skip+1 { - query.Origin.Number -= query.Skip + 1 - } else { - unknown = true - } - - case !query.Reverse: - // Number based traversal towards the leaf block - query.Origin.Number += query.Skip + 1 - } - } - - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + query.Amount*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, query.Amount, rcost) - return p.SendBlockHeaders(req.ReqID, bv, headers) - - case BlockHeadersMsg: - if pm.downloader == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received block header response message") - // A batch of headers arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Headers []*types.Header - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - if pm.fetcher != nil && pm.fetcher.requestedID(resp.ReqID) { - pm.fetcher.deliverHeaders(p, resp.ReqID, resp.Headers) - } else { - err := pm.downloader.DeliverHeaders(p.id, resp.Headers) - if err != nil { - log.Debug(fmt.Sprint(err)) - } - } - - case GetBlockBodiesMsg: - p.Log().Trace("Received block bodies request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Hashes []common.Hash - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather blocks until the fetch or network limits is reached - var ( - bytes int - bodies []rlp.RawValue - ) - reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxBodyFetch) { - return errResp(ErrRequestRejected, "") - } - for _, hash := range req.Hashes { - if bytes >= softResponseLimit { - break - } - // Retrieve the requested block body, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { - if data := rawdb.ReadBodyRLP(pm.chainDb, hash, *number); len(data) != 0 { - bodies = append(bodies, data) - bytes += len(data) - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendBlockBodiesRLP(req.ReqID, bv, bodies) - - case BlockBodiesMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received block bodies response") - // A batch of block bodies arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Data []*types.Body - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgBlockBodies, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case GetCodeMsg: - p.Log().Trace("Received code request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []CodeReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - data [][]byte - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxCodeFetch) { - return errResp(ErrRequestRejected, "") - } - for _, req := range req.Reqs { - // Retrieve the requested state entry, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, err := pm.blockchain.State() - if err != nil { - continue - } - account, err := pm.getAccount(statedb, header.Root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - code, _ := statedb.Database().TrieDB().Node(common.BytesToHash(account.CodeHash)) - - data = append(data, code) - if bytes += len(code); bytes >= softResponseLimit { - break - } - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendCode(req.ReqID, bv, data) - - case CodeMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received code response") - // A batch of node state data arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Data [][]byte - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgCode, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case GetReceiptsMsg: - p.Log().Trace("Received receipts request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Hashes []common.Hash - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - receipts []rlp.RawValue - ) - reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxReceiptFetch) { - return errResp(ErrRequestRejected, "") - } - for _, hash := range req.Hashes { - if bytes >= softResponseLimit { - break - } - // Retrieve the requested block's receipts, skipping if unknown to us - var results types.Receipts - if number := rawdb.ReadHeaderNumber(pm.chainDb, hash); number != nil { - results = rawdb.ReadReceipts(pm.chainDb, hash, *number) - } - if results == nil { - if header := pm.blockchain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { - continue - } - } - // If known, encode and queue for response packet - if encoded, err := rlp.EncodeToBytes(results); err != nil { - log.Error("Failed to encode receipt", "err", err) - } else { - receipts = append(receipts, encoded) - bytes += len(encoded) - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendReceiptsRLP(req.ReqID, bv, receipts) - - case ReceiptsMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received receipts response") - // A batch of receipts arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Receipts []types.Receipts - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgReceipts, - ReqID: resp.ReqID, - Obj: resp.Receipts, - } - - case GetProofsV1Msg: - p.Log().Trace("Received proofs request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []ProofReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - proofs proofsData - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxProofsFetch) { - return errResp(ErrRequestRejected, "") - } - for _, req := range req.Reqs { - // Retrieve the requested state entry, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, err := pm.blockchain.State() - if err != nil { - continue - } - var trie state.Trie - if len(req.AccKey) > 0 { - account, err := pm.getAccount(statedb, header.Root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - trie, _ = statedb.Database().OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) - } else { - trie, _ = statedb.Database().OpenTrie(header.Root) - } - if trie != nil { - var proof light.NodeList - trie.Prove(req.Key, 0, &proof) - - proofs = append(proofs, proof) - if bytes += proof.DataSize(); bytes >= softResponseLimit { - break - } - } - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendProofs(req.ReqID, bv, proofs) - - case GetProofsV2Msg: - p.Log().Trace("Received les/2 proofs request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []ProofReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - lastBHash common.Hash - statedb *state.StateDB - root common.Hash - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxProofsFetch) { - return errResp(ErrRequestRejected, "") - } - - nodes := light.NewNodeSet() - - for _, req := range req.Reqs { - // Look up the state belonging to the request - if statedb == nil || req.BHash != lastBHash { - statedb, root, lastBHash = nil, common.Hash{}, req.BHash - - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, _ = pm.blockchain.State() - root = header.Root - } - } - } - if statedb == nil { - continue - } - // Pull the account or storage trie of the request - var trie state.Trie - if len(req.AccKey) > 0 { - account, err := pm.getAccount(statedb, root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - trie, _ = statedb.Database().OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) - } else { - trie, _ = statedb.Database().OpenTrie(root) - } - if trie == nil { - continue - } - // Prove the user's request from the account or stroage trie - trie.Prove(req.Key, req.FromLevel, nodes) - if nodes.DataSize() >= softResponseLimit { - break - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendProofsV2(req.ReqID, bv, nodes.NodeList()) - - case ProofsV1Msg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received proofs response") - // A batch of merkle proofs arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Data []light.NodeList - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgProofsV1, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case ProofsV2Msg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received les/2 proofs response") - // A batch of merkle proofs arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Data light.NodeList - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgProofsV2, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case GetHeaderProofsMsg: - p.Log().Trace("Received headers proof request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []ChtReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - proofs []ChtResp - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxHelperTrieProofsFetch) { - return errResp(ErrRequestRejected, "") - } - trieDb := trie.NewDatabase(ethdb.NewTable(pm.chainDb, light.ChtTablePrefix)) - for _, req := range req.Reqs { - if header := pm.blockchain.GetHeaderByNumber(req.BlockNum); header != nil { - sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, req.ChtNum*pm.iConfig.ChtSize-1) - if root := light.GetChtRoot(pm.chainDb, req.ChtNum-1, sectionHead); root != (common.Hash{}) { - trie, err := trie.New(root, trieDb) - if err != nil { - continue - } - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], req.BlockNum) - - var proof light.NodeList - trie.Prove(encNumber[:], 0, &proof) - - proofs = append(proofs, ChtResp{Header: header, Proof: proof}) - if bytes += proof.DataSize() + estHeaderRlpSize; bytes >= softResponseLimit { - break - } - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendHeaderProofs(req.ReqID, bv, proofs) - - case GetHelperTrieProofsMsg: - p.Log().Trace("Received helper trie proof request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []HelperTrieReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - auxBytes int - auxData [][]byte - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxHelperTrieProofsFetch) { - return errResp(ErrRequestRejected, "") - } - - var ( - lastIdx uint64 - lastType uint - root common.Hash - auxTrie *trie.Trie - ) - nodes := light.NewNodeSet() - for _, req := range req.Reqs { - if auxTrie == nil || req.Type != lastType || req.TrieIdx != lastIdx { - auxTrie, lastType, lastIdx = nil, req.Type, req.TrieIdx - - var prefix string - if root, prefix = pm.getHelperTrie(req.Type, req.TrieIdx); root != (common.Hash{}) { - auxTrie, _ = trie.New(root, trie.NewDatabase(ethdb.NewTable(pm.chainDb, prefix))) - } - } - if req.AuxReq == auxRoot { - var data []byte - if root != (common.Hash{}) { - data = root[:] - } - auxData = append(auxData, data) - auxBytes += len(data) - } else { - if auxTrie != nil { - auxTrie.Prove(req.Key, req.FromLevel, nodes) - } - if req.AuxReq != 0 { - data := pm.getHelperTrieAuxData(req) - auxData = append(auxData, data) - auxBytes += len(data) - } - } - if nodes.DataSize()+auxBytes >= softResponseLimit { - break - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendHelperTrieProofs(req.ReqID, bv, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}) - - case HeaderProofsMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received headers proof response") - var resp struct { - ReqID, BV uint64 - Data []ChtResp - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgHeaderProofs, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case HelperTrieProofsMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received helper trie proof response") - var resp struct { - ReqID, BV uint64 - Data HelperTrieResps - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgHelperTrieProofs, - ReqID: resp.ReqID, - Obj: resp.Data, - } - - case SendTxMsg: - if pm.txpool == nil { - return errResp(ErrRequestRejected, "") - } - // Transactions arrived, parse all of them and deliver to the pool - var txs []*types.Transaction - if err := msg.Decode(&txs); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - reqCnt := len(txs) - if reject(uint64(reqCnt), MaxTxSend) { - return errResp(ErrRequestRejected, "") - } - pm.txpool.AddRemotes(txs) - - _, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - - case SendTxV2Msg: - if pm.txpool == nil { - return errResp(ErrRequestRejected, "") - } - // Transactions arrived, parse all of them and deliver to the pool - var req struct { - ReqID uint64 - Txs []*types.Transaction - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - reqCnt := len(req.Txs) - if reject(uint64(reqCnt), MaxTxSend) { - return errResp(ErrRequestRejected, "") - } - - hashes := make([]common.Hash, len(req.Txs)) - for i, tx := range req.Txs { - hashes[i] = tx.Hash() - } - stats := pm.txStatus(hashes) - for i, stat := range stats { - if stat.Status == core.TxStatusUnknown { - if errs := pm.txpool.AddRemotes([]*types.Transaction{req.Txs[i]}); errs[0] != nil { - stats[i].Error = errs[0].Error() - continue - } - stats[i] = pm.txStatus([]common.Hash{hashes[i]})[0] - } - } - - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - - return p.SendTxStatus(req.ReqID, bv, stats) - - case GetTxStatusMsg: - if pm.txpool == nil { - return errResp(ErrUnexpectedResponse, "") - } - // Transactions arrived, parse all of them and deliver to the pool - var req struct { - ReqID uint64 - Hashes []common.Hash - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - reqCnt := len(req.Hashes) - if reject(uint64(reqCnt), MaxTxStatus) { - return errResp(ErrRequestRejected, "") - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - - return p.SendTxStatus(req.ReqID, bv, pm.txStatus(req.Hashes)) - - case TxStatusMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received tx status response") - var resp struct { - ReqID, BV uint64 - Status []txStatus - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - - p.fcServer.GotReply(resp.ReqID, resp.BV) - - default: - p.Log().Trace("Received unknown message", "code", msg.Code) - return errResp(ErrInvalidMsgCode, "%v", msg.Code) - } - - if deliverMsg != nil { - err := pm.retriever.deliver(p, deliverMsg) - if err != nil { - p.responseErrors++ - if p.responseErrors > maxResponseErrors { - return err - } - } - } - return nil -} - -// getAccount retrieves an account from the state based at root. -func (pm *ProtocolManager) getAccount(statedb *state.StateDB, root, hash common.Hash) (state.Account, error) { - trie, err := trie.New(root, statedb.Database().TrieDB()) - if err != nil { - return state.Account{}, err - } - blob, err := trie.TryGet(hash[:]) - if err != nil { - return state.Account{}, err - } - var account state.Account - if err = rlp.DecodeBytes(blob, &account); err != nil { - return state.Account{}, err - } - return account, nil -} - -// getHelperTrie returns the post-processed trie root for the given trie ID and section index -func (pm *ProtocolManager) getHelperTrie(id uint, idx uint64) (common.Hash, string) { - switch id { - case htCanonical: - idxV1 := (idx+1)*(pm.iConfig.PairChtSize/pm.iConfig.ChtSize) - 1 - sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, (idxV1+1)*pm.iConfig.ChtSize-1) - return light.GetChtRoot(pm.chainDb, idxV1, sectionHead), light.ChtTablePrefix - case htBloomBits: - sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, (idx+1)*pm.iConfig.BloomTrieSize-1) - return light.GetBloomTrieRoot(pm.chainDb, idx, sectionHead), light.BloomTrieTablePrefix - } - return common.Hash{}, "" -} - -// getHelperTrieAuxData returns requested auxiliary data for the given HelperTrie request -func (pm *ProtocolManager) getHelperTrieAuxData(req HelperTrieReq) []byte { - if req.Type == htCanonical && req.AuxReq == auxHeader && len(req.Key) == 8 { - blockNum := binary.BigEndian.Uint64(req.Key) - hash := rawdb.ReadCanonicalHash(pm.chainDb, blockNum) - return rawdb.ReadHeaderRLP(pm.chainDb, hash, blockNum) - } - return nil -} - -func (pm *ProtocolManager) txStatus(hashes []common.Hash) []txStatus { - stats := make([]txStatus, len(hashes)) - for i, stat := range pm.txpool.Status(hashes) { - // Save the status we've got from the transaction pool - stats[i].Status = stat - - // If the transaction is unknown to the pool, try looking it up locally - if stat == core.TxStatusUnknown { - if block, number, index := rawdb.ReadTxLookupEntry(pm.chainDb, hashes[i]); block != (common.Hash{}) { - stats[i].Status = core.TxStatusIncluded - stats[i].Lookup = &rawdb.TxLookupEntry{BlockHash: block, BlockIndex: number, Index: index} - } - } - } - return stats -} - -// downloaderPeerNotify implements peerSetNotify -type downloaderPeerNotify ProtocolManager - -type peerConnection struct { - manager *ProtocolManager - peer *peer -} - -func (pc *peerConnection) Head() (common.Hash, *big.Int) { - return pc.peer.HeadAndTd() -} - -func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, skip int, reverse bool) error { - reqID := genReqID() - rq := &distReq{ - getCost: func(dp distPeer) uint64 { - peer := dp.(*peer) - return peer.GetRequestCost(GetBlockHeadersMsg, amount) - }, - canSend: func(dp distPeer) bool { - return dp.(*peer) == pc.peer - }, - request: func(dp distPeer) func() { - peer := dp.(*peer) - cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) - peer.fcServer.QueueRequest(reqID, cost) - return func() { peer.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse) } - }, - } - _, ok := <-pc.manager.reqDist.queue(rq) - if !ok { - return light.ErrNoPeers - } - return nil -} - -func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip int, reverse bool) error { - reqID := genReqID() - rq := &distReq{ - getCost: func(dp distPeer) uint64 { - peer := dp.(*peer) - return peer.GetRequestCost(GetBlockHeadersMsg, amount) - }, - canSend: func(dp distPeer) bool { - return dp.(*peer) == pc.peer - }, - request: func(dp distPeer) func() { - peer := dp.(*peer) - cost := peer.GetRequestCost(GetBlockHeadersMsg, amount) - peer.fcServer.QueueRequest(reqID, cost) - return func() { peer.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse) } - }, - } - _, ok := <-pc.manager.reqDist.queue(rq) - if !ok { - return light.ErrNoPeers - } - return nil -} - -func (d *downloaderPeerNotify) registerPeer(p *peer) { - pm := (*ProtocolManager)(d) - pc := &peerConnection{ - manager: pm, - peer: p, - } - pm.downloader.RegisterLightPeer(p.id, ethVersion, pc) -} - -func (d *downloaderPeerNotify) unregisterPeer(p *peer) { - pm := (*ProtocolManager)(d) - pm.downloader.UnregisterPeer(p.id) -} diff --git a/les/handler_test.go b/les/handler_test.go index 43be7f41b11d..aad8d18e45c0 100644 --- a/les/handler_test.go +++ b/les/handler_test.go @@ -24,13 +24,13 @@ import ( "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/downloader" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/params" @@ -47,13 +47,14 @@ func expectResponse(r p2p.MsgReader, msgcode, reqID, bv uint64, data interface{} } // Tests that block headers can be retrieved from a remote chain based on user queries. -func TestGetBlockHeadersLes1(t *testing.T) { testGetBlockHeaders(t, 1) } func TestGetBlockHeadersLes2(t *testing.T) { testGetBlockHeaders(t, 2) } +func TestGetBlockHeadersLes3(t *testing.T) { testGetBlockHeaders(t, 3) } func testGetBlockHeaders(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, downloader.MaxHashFetch+15, protocol, nil) + server, tearDown := newServerEnv(t, downloader.MaxHashFetch+15, protocol, nil, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + + bc := server.handler.blockchain // Create a "random" unknown hash for testing var unknown common.Hash @@ -115,10 +116,10 @@ func testGetBlockHeaders(t *testing.T, protocol int) { []common.Hash{bc.CurrentBlock().Hash()}, }, // Ensure protocol limits are honored - /*{ - &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 1}, Amount: limit + 10, Reverse: true}, - bc.GetBlockHashesFromHash(bc.CurrentBlock().Hash(), limit), - },*/ + //{ + // &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 1}, Amount: limit + 10, Reverse: true}, + // []common.Hash{}, + //}, // Check that requesting more than available is handled gracefully { &getBlockHeadersData{Origin: hashOrNumber{Number: bc.CurrentBlock().NumberU64() - 4}, Skip: 3, Amount: 3}, @@ -160,28 +161,30 @@ func testGetBlockHeaders(t *testing.T, protocol int) { var reqID uint64 for i, tt := range tests { // Collect the headers to expect in the response - headers := []*types.Header{} + var headers []*types.Header for _, hash := range tt.expect { headers = append(headers, bc.GetHeaderByHash(hash)) } // Send the hash request and verify the response reqID++ - cost := server.tPeer.GetRequestCost(GetBlockHeadersMsg, int(tt.query.Amount)) - sendRequest(server.tPeer.app, GetBlockHeadersMsg, reqID, cost, tt.query) - if err := expectResponse(server.tPeer.app, BlockHeadersMsg, reqID, testBufLimit, headers); err != nil { + + cost := server.peer.peer.GetRequestCost(GetBlockHeadersMsg, int(tt.query.Amount)) + sendRequest(server.peer.app, GetBlockHeadersMsg, reqID, cost, tt.query) + if err := expectResponse(server.peer.app, BlockHeadersMsg, reqID, testBufLimit, headers); err != nil { t.Errorf("test %d: headers mismatch: %v", i, err) } } } // Tests that block contents can be retrieved from a remote chain based on their hashes. -func TestGetBlockBodiesLes1(t *testing.T) { testGetBlockBodies(t, 1) } func TestGetBlockBodiesLes2(t *testing.T) { testGetBlockBodies(t, 2) } +func TestGetBlockBodiesLes3(t *testing.T) { testGetBlockBodies(t, 3) } func testGetBlockBodies(t *testing.T, protocol int) { - server, tearDown := newServerEnv(t, downloader.MaxBlockFetch+15, protocol, nil) + server, tearDown := newServerEnv(t, downloader.MaxBlockFetch+15, protocol, nil, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + + bc := server.handler.blockchain // Create a batch of tests for various scenarios limit := MaxBodyFetch @@ -214,8 +217,9 @@ func testGetBlockBodies(t *testing.T, protocol int) { var reqID uint64 for i, tt := range tests { // Collect the hashes to request, and the response to expect - hashes, seen := []common.Hash{}, make(map[int64]bool) - bodies := []*types.Body{} + var hashes []common.Hash + seen := make(map[int64]bool) + var bodies []*types.Body for j := 0; j < tt.random; j++ { for { @@ -240,28 +244,28 @@ func testGetBlockBodies(t *testing.T, protocol int) { } } reqID++ + // Send the hash request and verify the response - cost := server.tPeer.GetRequestCost(GetBlockBodiesMsg, len(hashes)) - sendRequest(server.tPeer.app, GetBlockBodiesMsg, reqID, cost, hashes) - if err := expectResponse(server.tPeer.app, BlockBodiesMsg, reqID, testBufLimit, bodies); err != nil { + cost := server.peer.peer.GetRequestCost(GetBlockBodiesMsg, len(hashes)) + sendRequest(server.peer.app, GetBlockBodiesMsg, reqID, cost, hashes) + if err := expectResponse(server.peer.app, BlockBodiesMsg, reqID, testBufLimit, bodies); err != nil { t.Errorf("test %d: bodies mismatch: %v", i, err) } } } // Tests that the contract codes can be retrieved based on account addresses. -func TestGetCodeLes1(t *testing.T) { testGetCode(t, 1) } func TestGetCodeLes2(t *testing.T) { testGetCode(t, 2) } +func TestGetCodeLes3(t *testing.T) { testGetCode(t, 3) } func testGetCode(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil) + server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + bc := server.handler.blockchain var codereqs []*CodeReq var codes [][]byte - for i := uint64(0); i <= bc.CurrentBlock().NumberU64(); i++ { header := bc.GetHeaderByNumber(i) req := &CodeReq{ @@ -274,60 +278,84 @@ func testGetCode(t *testing.T, protocol int) { } } - cost := server.tPeer.GetRequestCost(GetCodeMsg, len(codereqs)) - sendRequest(server.tPeer.app, GetCodeMsg, 42, cost, codereqs) - if err := expectResponse(server.tPeer.app, CodeMsg, 42, testBufLimit, codes); err != nil { + cost := server.peer.peer.GetRequestCost(GetCodeMsg, len(codereqs)) + sendRequest(server.peer.app, GetCodeMsg, 42, cost, codereqs) + if err := expectResponse(server.peer.app, CodeMsg, 42, testBufLimit, codes); err != nil { t.Errorf("codes mismatch: %v", err) } } +// Tests that the stale contract codes can't be retrieved based on account addresses. +func TestGetStaleCodeLes2(t *testing.T) { testGetStaleCode(t, 2) } +func TestGetStaleCodeLes3(t *testing.T) { testGetStaleCode(t, 3) } + +func testGetStaleCode(t *testing.T, protocol int) { + server, tearDown := newServerEnv(t, core.TriesInMemory+4, protocol, nil, false, true, 0) + defer tearDown() + bc := server.handler.blockchain + + check := func(number uint64, expected [][]byte) { + req := &CodeReq{ + BHash: bc.GetHeaderByNumber(number).Hash(), + AccKey: crypto.Keccak256(testContractAddr[:]), + } + cost := server.peer.peer.GetRequestCost(GetCodeMsg, 1) + sendRequest(server.peer.app, GetCodeMsg, 42, cost, []*CodeReq{req}) + if err := expectResponse(server.peer.app, CodeMsg, 42, testBufLimit, expected); err != nil { + t.Errorf("codes mismatch: %v", err) + } + } + check(0, [][]byte{}) // Non-exist contract + check(testContractDeployed, [][]byte{}) // Stale contract + check(bc.CurrentHeader().Number.Uint64(), [][]byte{testContractCodeDeployed}) // Fresh contract +} + // Tests that the transaction receipts can be retrieved based on hashes. -func TestGetReceiptLes1(t *testing.T) { testGetReceipt(t, 1) } func TestGetReceiptLes2(t *testing.T) { testGetReceipt(t, 2) } +func TestGetReceiptLes3(t *testing.T) { testGetReceipt(t, 3) } func testGetReceipt(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil) + server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + + bc := server.handler.blockchain // Collect the hashes to request, and the response to expect - hashes, receipts := []common.Hash{}, []types.Receipts{} + var receipts []types.Receipts + var hashes []common.Hash for i := uint64(0); i <= bc.CurrentBlock().NumberU64(); i++ { block := bc.GetBlockByNumber(i) hashes = append(hashes, block.Hash()) - receipts = append(receipts, rawdb.ReadReceipts(server.db, block.Hash(), block.NumberU64())) + receipts = append(receipts, rawdb.ReadRawReceipts(server.db, block.Hash(), block.NumberU64())) } // Send the hash request and verify the response - cost := server.tPeer.GetRequestCost(GetReceiptsMsg, len(hashes)) - sendRequest(server.tPeer.app, GetReceiptsMsg, 42, cost, hashes) - if err := expectResponse(server.tPeer.app, ReceiptsMsg, 42, testBufLimit, receipts); err != nil { + cost := server.peer.peer.GetRequestCost(GetReceiptsMsg, len(hashes)) + sendRequest(server.peer.app, GetReceiptsMsg, 42, cost, hashes) + if err := expectResponse(server.peer.app, ReceiptsMsg, 42, testBufLimit, receipts); err != nil { t.Errorf("receipts mismatch: %v", err) } } // Tests that trie merkle proofs can be retrieved -func TestGetProofsLes1(t *testing.T) { testGetProofs(t, 1) } func TestGetProofsLes2(t *testing.T) { testGetProofs(t, 2) } +func TestGetProofsLes3(t *testing.T) { testGetProofs(t, 3) } func testGetProofs(t *testing.T, protocol int) { // Assemble the test environment - server, tearDown := newServerEnv(t, 4, protocol, nil) + server, tearDown := newServerEnv(t, 4, protocol, nil, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) - var ( - proofreqs []ProofReq - proofsV1 [][]rlp.RawValue - ) + bc := server.handler.blockchain + + var proofreqs []ProofReq proofsV2 := light.NewNodeSet() - accounts := []common.Address{testBankAddress, acc1Addr, acc2Addr, {}} + accounts := []common.Address{bankAddr, userAddr1, userAddr2, signerAddr, {}} for i := uint64(0); i <= bc.CurrentBlock().NumberU64(); i++ { header := bc.GetHeaderByNumber(i) - root := header.Root - trie, _ := trie.New(root, trie.NewDatabase(server.db)) + trie, _ := trie.New(header.Root, trie.NewDatabase(server.db)) for _, acc := range accounts { req := ProofReq{ @@ -335,133 +363,123 @@ func testGetProofs(t *testing.T, protocol int) { Key: crypto.Keccak256(acc[:]), } proofreqs = append(proofreqs, req) - - switch protocol { - case 1: - var proof light.NodeList - trie.Prove(crypto.Keccak256(acc[:]), 0, &proof) - proofsV1 = append(proofsV1, proof) - case 2: - trie.Prove(crypto.Keccak256(acc[:]), 0, proofsV2) - } + trie.Prove(crypto.Keccak256(acc[:]), 0, proofsV2) } } // Send the proof request and verify the response - switch protocol { - case 1: - cost := server.tPeer.GetRequestCost(GetProofsV1Msg, len(proofreqs)) - sendRequest(server.tPeer.app, GetProofsV1Msg, 42, cost, proofreqs) - if err := expectResponse(server.tPeer.app, ProofsV1Msg, 42, testBufLimit, proofsV1); err != nil { - t.Errorf("proofs mismatch: %v", err) + cost := server.peer.peer.GetRequestCost(GetProofsV2Msg, len(proofreqs)) + sendRequest(server.peer.app, GetProofsV2Msg, 42, cost, proofreqs) + if err := expectResponse(server.peer.app, ProofsV2Msg, 42, testBufLimit, proofsV2.NodeList()); err != nil { + t.Errorf("proofs mismatch: %v", err) + } +} + +// Tests that the stale contract codes can't be retrieved based on account addresses. +func TestGetStaleProofLes2(t *testing.T) { testGetStaleProof(t, 2) } +func TestGetStaleProofLes3(t *testing.T) { testGetStaleProof(t, 3) } + +func testGetStaleProof(t *testing.T, protocol int) { + server, tearDown := newServerEnv(t, core.TriesInMemory+4, protocol, nil, false, true, 0) + defer tearDown() + bc := server.handler.blockchain + + check := func(number uint64, wantOK bool) { + var ( + header = bc.GetHeaderByNumber(number) + account = crypto.Keccak256(userAddr1.Bytes()) + ) + req := &ProofReq{ + BHash: header.Hash(), + Key: account, } - case 2: - cost := server.tPeer.GetRequestCost(GetProofsV2Msg, len(proofreqs)) - sendRequest(server.tPeer.app, GetProofsV2Msg, 42, cost, proofreqs) - if err := expectResponse(server.tPeer.app, ProofsV2Msg, 42, testBufLimit, proofsV2.NodeList()); err != nil { - t.Errorf("proofs mismatch: %v", err) + cost := server.peer.peer.GetRequestCost(GetProofsV2Msg, 1) + sendRequest(server.peer.app, GetProofsV2Msg, 42, cost, []*ProofReq{req}) + + var expected []rlp.RawValue + if wantOK { + proofsV2 := light.NewNodeSet() + t, _ := trie.New(header.Root, trie.NewDatabase(server.db)) + t.Prove(account, 0, proofsV2) + expected = proofsV2.NodeList() + } + if err := expectResponse(server.peer.app, ProofsV2Msg, 42, testBufLimit, expected); err != nil { + t.Errorf("codes mismatch: %v", err) } } + check(0, false) // Non-exist proof + check(2, false) // Stale proof + check(bc.CurrentHeader().Number.Uint64(), true) // Fresh proof } // Tests that CHT proofs can be correctly retrieved. -func TestGetCHTProofsLes1(t *testing.T) { testGetCHTProofs(t, 1) } func TestGetCHTProofsLes2(t *testing.T) { testGetCHTProofs(t, 2) } +func TestGetCHTProofsLes3(t *testing.T) { testGetCHTProofs(t, 3) } func testGetCHTProofs(t *testing.T, protocol int) { config := light.TestServerIndexerConfig - frequency := config.ChtSize - if protocol == 2 { - frequency = config.PairChtSize - } waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { - expectSections := frequency / config.ChtSize for { cs, _, _ := cIndexer.Sections() - bs, _, _ := bIndexer.Sections() - if cs >= expectSections && bs >= expectSections { + if cs >= 1 { break } time.Sleep(10 * time.Millisecond) } } - server, tearDown := newServerEnv(t, int(frequency+config.ChtConfirms), protocol, waitIndexers) + server, tearDown := newServerEnv(t, int(config.ChtSize+config.ChtConfirms), protocol, waitIndexers, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + + bc := server.handler.blockchain // Assemble the proofs from the different protocols - header := bc.GetHeaderByNumber(frequency - 1) + header := bc.GetHeaderByNumber(config.ChtSize - 1) rlp, _ := rlp.EncodeToBytes(header) key := make([]byte, 8) - binary.BigEndian.PutUint64(key, frequency-1) + binary.BigEndian.PutUint64(key, config.ChtSize-1) - proofsV1 := []ChtResp{{ - Header: header, - }} proofsV2 := HelperTrieResps{ AuxData: [][]byte{rlp}, } - switch protocol { - case 1: - root := light.GetChtRoot(server.db, 0, bc.GetHeaderByNumber(frequency-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.ChtTablePrefix))) - - var proof light.NodeList - trie.Prove(key, 0, &proof) - proofsV1[0].Proof = proof - - case 2: - root := light.GetChtRoot(server.db, (frequency/config.ChtSize)-1, bc.GetHeaderByNumber(frequency-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.ChtTablePrefix))) - trie.Prove(key, 0, &proofsV2.Proofs) - } + root := light.GetChtRoot(server.db, 0, bc.GetHeaderByNumber(config.ChtSize-1).Hash()) + trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.ChtTablePrefix))) + trie.Prove(key, 0, &proofsV2.Proofs) // Assemble the requests for the different protocols - requestsV1 := []ChtReq{{ - ChtNum: frequency / config.ChtSize, - BlockNum: frequency - 1, - }} requestsV2 := []HelperTrieReq{{ Type: htCanonical, - TrieIdx: frequency/config.PairChtSize - 1, + TrieIdx: 0, Key: key, AuxReq: auxHeader, }} // Send the proof request and verify the response - switch protocol { - case 1: - cost := server.tPeer.GetRequestCost(GetHeaderProofsMsg, len(requestsV1)) - sendRequest(server.tPeer.app, GetHeaderProofsMsg, 42, cost, requestsV1) - if err := expectResponse(server.tPeer.app, HeaderProofsMsg, 42, testBufLimit, proofsV1); err != nil { - t.Errorf("proofs mismatch: %v", err) - } - case 2: - cost := server.tPeer.GetRequestCost(GetHelperTrieProofsMsg, len(requestsV2)) - sendRequest(server.tPeer.app, GetHelperTrieProofsMsg, 42, cost, requestsV2) - if err := expectResponse(server.tPeer.app, HelperTrieProofsMsg, 42, testBufLimit, proofsV2); err != nil { - t.Errorf("proofs mismatch: %v", err) - } + cost := server.peer.peer.GetRequestCost(GetHelperTrieProofsMsg, len(requestsV2)) + sendRequest(server.peer.app, GetHelperTrieProofsMsg, 42, cost, requestsV2) + if err := expectResponse(server.peer.app, HelperTrieProofsMsg, 42, testBufLimit, proofsV2); err != nil { + t.Errorf("proofs mismatch: %v", err) } } +func TestGetBloombitsProofsLes2(t *testing.T) { testGetBloombitsProofs(t, 2) } +func TestGetBloombitsProofsLes3(t *testing.T) { testGetBloombitsProofs(t, 3) } + // Tests that bloombits proofs can be correctly retrieved. -func TestGetBloombitsProofs(t *testing.T) { +func testGetBloombitsProofs(t *testing.T, protocol int) { config := light.TestServerIndexerConfig waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { for { - cs, _, _ := cIndexer.Sections() - bs, _, _ := bIndexer.Sections() bts, _, _ := btIndexer.Sections() - if cs >= 8 && bs >= 8 && bts >= 1 { + if bts >= 1 { break } time.Sleep(10 * time.Millisecond) } } - server, tearDown := newServerEnv(t, int(config.BloomTrieSize+config.BloomTrieConfirms), 2, waitIndexers) + server, tearDown := newServerEnv(t, int(config.BloomTrieSize+config.BloomTrieConfirms), protocol, waitIndexers, false, true, 0) defer tearDown() - bc := server.pm.blockchain.(*core.BlockChain) + + bc := server.handler.blockchain // Request and verify each bit of the bloom bits proofs for bit := 0; bit < 2048; bit++ { @@ -480,66 +498,64 @@ func TestGetBloombitsProofs(t *testing.T) { var proofs HelperTrieResps root := light.GetBloomTrieRoot(server.db, 0, bc.GetHeaderByNumber(config.BloomTrieSize-1).Hash()) - trie, _ := trie.New(root, trie.NewDatabase(ethdb.NewTable(server.db, light.BloomTrieTablePrefix))) + trie, _ := trie.New(root, trie.NewDatabase(rawdb.NewTable(server.db, light.BloomTrieTablePrefix))) trie.Prove(key, 0, &proofs.Proofs) // Send the proof request and verify the response - cost := server.tPeer.GetRequestCost(GetHelperTrieProofsMsg, len(requests)) - sendRequest(server.tPeer.app, GetHelperTrieProofsMsg, 42, cost, requests) - if err := expectResponse(server.tPeer.app, HelperTrieProofsMsg, 42, testBufLimit, proofs); err != nil { + cost := server.peer.peer.GetRequestCost(GetHelperTrieProofsMsg, len(requests)) + sendRequest(server.peer.app, GetHelperTrieProofsMsg, 42, cost, requests) + if err := expectResponse(server.peer.app, HelperTrieProofsMsg, 42, testBufLimit, proofs); err != nil { t.Errorf("bit %d: proofs mismatch: %v", bit, err) } } } -func TestTransactionStatusLes2(t *testing.T) { - db := ethdb.NewMemDatabase() - pm := newTestProtocolManagerMust(t, false, 0, nil, nil, nil, db) - chain := pm.blockchain.(*core.BlockChain) - config := core.DefaultTxPoolConfig - config.Journal = "" - txpool := core.NewTxPool(config, params.TestChainConfig, chain) - pm.txpool = txpool - peer, _ := newTestPeer(t, "peer", 2, pm, true) - defer peer.close() +func TestTransactionStatusLes2(t *testing.T) { testTransactionStatus(t, 2) } +func TestTransactionStatusLes3(t *testing.T) { testTransactionStatus(t, 3) } + +func testTransactionStatus(t *testing.T, protocol int) { + server, tearDown := newServerEnv(t, 0, protocol, nil, false, true, 0) + defer tearDown() + server.handler.addTxsSync = true + + chain := server.handler.blockchain var reqID uint64 - test := func(tx *types.Transaction, send bool, expStatus txStatus) { + test := func(tx *types.Transaction, send bool, expStatus light.TxStatus) { reqID++ if send { - cost := peer.GetRequestCost(SendTxV2Msg, 1) - sendRequest(peer.app, SendTxV2Msg, reqID, cost, types.Transactions{tx}) + cost := server.peer.peer.GetRequestCost(SendTxV2Msg, 1) + sendRequest(server.peer.app, SendTxV2Msg, reqID, cost, types.Transactions{tx}) } else { - cost := peer.GetRequestCost(GetTxStatusMsg, 1) - sendRequest(peer.app, GetTxStatusMsg, reqID, cost, []common.Hash{tx.Hash()}) + cost := server.peer.peer.GetRequestCost(GetTxStatusMsg, 1) + sendRequest(server.peer.app, GetTxStatusMsg, reqID, cost, []common.Hash{tx.Hash()}) } - if err := expectResponse(peer.app, TxStatusMsg, reqID, testBufLimit, []txStatus{expStatus}); err != nil { + if err := expectResponse(server.peer.app, TxStatusMsg, reqID, testBufLimit, []light.TxStatus{expStatus}); err != nil { t.Errorf("transaction status mismatch") } } - signer := types.HomesteadSigner{} // test error status by sending an underpriced transaction - tx0, _ := types.SignTx(types.NewTransaction(0, acc1Addr, big.NewInt(10000), params.TxGas, nil, nil), signer, testBankKey) - test(tx0, true, txStatus{Status: core.TxStatusUnknown, Error: core.ErrUnderpriced.Error()}) + tx0, _ := types.SignTx(types.NewTransaction(0, userAddr1, big.NewInt(10000), params.TxGas, nil, nil), signer, bankKey) + test(tx0, true, light.TxStatus{Status: core.TxStatusUnknown, Error: core.ErrUnderpriced.Error()}) - tx1, _ := types.SignTx(types.NewTransaction(0, acc1Addr, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, testBankKey) - test(tx1, false, txStatus{Status: core.TxStatusUnknown}) // query before sending, should be unknown - test(tx1, true, txStatus{Status: core.TxStatusPending}) // send valid processable tx, should return pending - test(tx1, true, txStatus{Status: core.TxStatusPending}) // adding it again should not return an error + tx1, _ := types.SignTx(types.NewTransaction(0, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) + test(tx1, false, light.TxStatus{Status: core.TxStatusUnknown}) // query before sending, should be unknown + test(tx1, true, light.TxStatus{Status: core.TxStatusPending}) // send valid processable tx, should return pending + test(tx1, true, light.TxStatus{Status: core.TxStatusPending}) // adding it again should not return an error - tx2, _ := types.SignTx(types.NewTransaction(1, acc1Addr, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, testBankKey) - tx3, _ := types.SignTx(types.NewTransaction(2, acc1Addr, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, testBankKey) + tx2, _ := types.SignTx(types.NewTransaction(1, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) + tx3, _ := types.SignTx(types.NewTransaction(2, userAddr1, big.NewInt(10000), params.TxGas, big.NewInt(100000000000), nil), signer, bankKey) // send transactions in the wrong order, tx3 should be queued - test(tx3, true, txStatus{Status: core.TxStatusQueued}) - test(tx2, true, txStatus{Status: core.TxStatusPending}) + test(tx3, true, light.TxStatus{Status: core.TxStatusQueued}) + test(tx2, true, light.TxStatus{Status: core.TxStatusPending}) // query again, now tx3 should be pending too - test(tx3, false, txStatus{Status: core.TxStatusPending}) + test(tx3, false, light.TxStatus{Status: core.TxStatusPending}) // generate and add a block with tx1 and tx2 included - gchain, _ := core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), db, 1, func(i int, block *core.BlockGen) { + gchain, _ := core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), server.db, 1, func(i int, block *core.BlockGen) { block.AddTx(tx1) block.AddTx(tx2) }) @@ -548,36 +564,90 @@ func TestTransactionStatusLes2(t *testing.T) { } // wait until TxPool processes the inserted block for i := 0; i < 10; i++ { - if pending, _ := txpool.Stats(); pending == 1 { + if pending, _ := server.handler.txpool.Stats(); pending == 1 { break } time.Sleep(100 * time.Millisecond) } - if pending, _ := txpool.Stats(); pending != 1 { + if pending, _ := server.handler.txpool.Stats(); pending != 1 { t.Fatalf("pending count mismatch: have %d, want 1", pending) } + // Discard new block announcement + msg, _ := server.peer.app.ReadMsg() + msg.Discard() // check if their status is included now - block1hash := rawdb.ReadCanonicalHash(db, 1) - test(tx1, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.TxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 0}}) - test(tx2, false, txStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.TxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 1}}) + block1hash := rawdb.ReadCanonicalHash(server.db, 1) + test(tx1, false, light.TxStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 0}}) + + test(tx2, false, light.TxStatus{Status: core.TxStatusIncluded, Lookup: &rawdb.LegacyTxLookupEntry{BlockHash: block1hash, BlockIndex: 1, Index: 1}}) // create a reorg that rolls them back - gchain, _ = core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), db, 2, func(i int, block *core.BlockGen) {}) + gchain, _ = core.GenerateChain(params.TestChainConfig, chain.GetBlockByNumber(0), ethash.NewFaker(), server.db, 2, func(i int, block *core.BlockGen) {}) if _, err := chain.InsertChain(gchain); err != nil { panic(err) } // wait until TxPool processes the reorg for i := 0; i < 10; i++ { - if pending, _ := txpool.Stats(); pending == 3 { + if pending, _ := server.handler.txpool.Stats(); pending == 3 { break } time.Sleep(100 * time.Millisecond) } - if pending, _ := txpool.Stats(); pending != 3 { + if pending, _ := server.handler.txpool.Stats(); pending != 3 { t.Fatalf("pending count mismatch: have %d, want 3", pending) } + // Discard new block announcement + msg, _ = server.peer.app.ReadMsg() + msg.Discard() + // check if their status is pending again - test(tx1, false, txStatus{Status: core.TxStatusPending}) - test(tx2, false, txStatus{Status: core.TxStatusPending}) + test(tx1, false, light.TxStatus{Status: core.TxStatusPending}) + test(tx2, false, light.TxStatus{Status: core.TxStatusPending}) +} + +func TestStopResumeLes3(t *testing.T) { + server, tearDown := newServerEnv(t, 0, 3, nil, true, true, testBufLimit/10) + defer tearDown() + + server.handler.server.costTracker.testing = true + + var ( + reqID uint64 + expBuf = testBufLimit + testCost = testBufLimit / 10 + ) + header := server.handler.blockchain.CurrentHeader() + req := func() { + reqID++ + sendRequest(server.peer.app, GetBlockHeadersMsg, reqID, testCost, &getBlockHeadersData{Origin: hashOrNumber{Hash: header.Hash()}, Amount: 1}) + } + for i := 1; i <= 5; i++ { + // send requests while we still have enough buffer and expect a response + for expBuf >= testCost { + req() + expBuf -= testCost + if err := expectResponse(server.peer.app, BlockHeadersMsg, reqID, expBuf, []*types.Header{header}); err != nil { + t.Errorf("expected response and failed: %v", err) + } + } + // send some more requests in excess and expect a single StopMsg + c := i + for c > 0 { + req() + c-- + } + if err := p2p.ExpectMsg(server.peer.app, StopMsg, nil); err != nil { + t.Errorf("expected StopMsg and failed: %v", err) + } + // wait until the buffer is recharged by half of the limit + wait := testBufLimit / testBufRecharge / 2 + server.clock.(*mclock.Simulated).Run(time.Millisecond * time.Duration(wait)) + + // expect a ResumeMsg with the partially recharged buffer value + expBuf += testBufRecharge * wait + if err := p2p.ExpectMsg(server.peer.app, ResumeMsg, expBuf); err != nil { + t.Errorf("expected ResumeMsg and failed: %v", err) + } + } } diff --git a/les/helper_test.go b/les/helper_test.go deleted file mode 100644 index b46d41f174c8..000000000000 --- a/les/helper_test.go +++ /dev/null @@ -1,445 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// This file contains some shares testing functionality, common to multiple -// different files and modules being tested. - -package les - -import ( - "crypto/rand" - "math/big" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/event" - "github.com/ethereum/go-ethereum/les/flowcontrol" - "github.com/ethereum/go-ethereum/light" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/params" -) - -var ( - testBankKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - testBankAddress = crypto.PubkeyToAddress(testBankKey.PublicKey) - testBankFunds = big.NewInt(1000000000000000000) - - acc1Key, _ = crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") - acc2Key, _ = crypto.HexToECDSA("49a7b37aa6f6645917e7b807e9d1c00d4fa71f18343b0d4122a4d2df64dd6fee") - acc1Addr = crypto.PubkeyToAddress(acc1Key.PublicKey) - acc2Addr = crypto.PubkeyToAddress(acc2Key.PublicKey) - - testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") - testContractAddr common.Address - testContractCodeDeployed = testContractCode[16:] - testContractDeployed = uint64(2) - - testEventEmitterCode = common.Hex2Bytes("60606040523415600e57600080fd5b7f57050ab73f6b9ebdd9f76b8d4997793f48cf956e965ee070551b9ca0bb71584e60405160405180910390a160358060476000396000f3006060604052600080fd00a165627a7a723058203f727efcad8b5811f8cb1fc2620ce5e8c63570d697aef968172de296ea3994140029") - testEventEmitterAddr common.Address - - testBufLimit = uint64(100) -) - -/* -contract test { - - uint256[100] data; - - function Put(uint256 addr, uint256 value) { - data[addr] = value; - } - - function Get(uint256 addr) constant returns (uint256 value) { - return data[addr]; - } -} -*/ - -func testChainGen(i int, block *core.BlockGen) { - signer := types.HomesteadSigner{} - - switch i { - case 0: - // In block 1, the test bank sends account #1 some ether. - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(10000), params.TxGas, nil, nil), signer, testBankKey) - block.AddTx(tx) - case 1: - // In block 2, the test bank sends some more ether to account #1. - // acc1Addr passes it on to account #2. - // acc1Addr creates a test contract. - // acc1Addr creates a test event. - nonce := block.TxNonce(acc1Addr) - - tx1, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), acc1Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, testBankKey) - tx2, _ := types.SignTx(types.NewTransaction(nonce, acc2Addr, big.NewInt(1000), params.TxGas, nil, nil), signer, acc1Key) - tx3, _ := types.SignTx(types.NewContractCreation(nonce+1, big.NewInt(0), 200000, big.NewInt(0), testContractCode), signer, acc1Key) - testContractAddr = crypto.CreateAddress(acc1Addr, nonce+1) - tx4, _ := types.SignTx(types.NewContractCreation(nonce+2, big.NewInt(0), 200000, big.NewInt(0), testEventEmitterCode), signer, acc1Key) - testEventEmitterAddr = crypto.CreateAddress(acc1Addr, nonce+2) - block.AddTx(tx1) - block.AddTx(tx2) - block.AddTx(tx3) - block.AddTx(tx4) - case 2: - // Block 3 is empty but was mined by account #2. - block.SetCoinbase(acc2Addr) - block.SetExtra([]byte("yeehaw")) - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001") - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, nil, data), signer, testBankKey) - block.AddTx(tx) - case 3: - // Block 4 includes blocks 2 and 3 as uncle headers (with modified extra data). - b2 := block.PrevBlock(1).Header() - b2.Extra = []byte("foo") - block.AddUncle(b2) - b3 := block.PrevBlock(2).Header() - b3.Extra = []byte("foo") - block.AddUncle(b3) - data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002") - tx, _ := types.SignTx(types.NewTransaction(block.TxNonce(testBankAddress), testContractAddr, big.NewInt(0), 100000, nil, data), signer, testBankKey) - block.AddTx(tx) - } -} - -// testIndexers creates a set of indexers with specified params for testing purpose. -func testIndexers(db ethdb.Database, odr light.OdrBackend, iConfig *light.IndexerConfig) (*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer) { - chtIndexer := light.NewChtIndexer(db, odr, iConfig.ChtSize, iConfig.ChtConfirms) - bloomIndexer := eth.NewBloomIndexer(db, iConfig.BloomSize, iConfig.BloomConfirms) - bloomTrieIndexer := light.NewBloomTrieIndexer(db, odr, iConfig.BloomSize, iConfig.BloomTrieSize) - bloomIndexer.AddChildIndexer(bloomTrieIndexer) - return chtIndexer, bloomIndexer, bloomTrieIndexer -} - -func testRCL() RequestCostList { - cl := make(RequestCostList, len(reqList)) - for i, code := range reqList { - cl[i].MsgCode = code - cl[i].BaseCost = 0 - cl[i].ReqCost = 0 - } - return cl -} - -// newTestProtocolManager creates a new protocol manager for testing purposes, -// with the given number of blocks already known, potential notification -// channels for different events and relative chain indexers array. -func newTestProtocolManager(lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database) (*ProtocolManager, error) { - var ( - evmux = new(event.TypeMux) - engine = ethash.NewFaker() - gspec = core.Genesis{ - Config: params.TestChainConfig, - Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, - } - genesis = gspec.MustCommit(db) - chain BlockChain - ) - if peers == nil { - peers = newPeerSet() - } - - if lightSync { - chain, _ = light.NewLightChain(odr, gspec.Config, engine) - } else { - blockchain, _ := core.NewBlockChain(db, nil, gspec.Config, engine, vm.Config{}, nil) - gchain, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, blocks, generator) - if _, err := blockchain.InsertChain(gchain); err != nil { - panic(err) - } - chain = blockchain - } - - indexConfig := light.TestServerIndexerConfig - if lightSync { - indexConfig = light.TestClientIndexerConfig - } - pm, err := NewProtocolManager(gspec.Config, indexConfig, lightSync, NetworkId, evmux, engine, peers, chain, nil, db, odr, nil, nil, make(chan struct{}), new(sync.WaitGroup)) - if err != nil { - return nil, err - } - if !lightSync { - srv := &LesServer{lesCommons: lesCommons{protocolManager: pm}} - pm.server = srv - - srv.defParams = &flowcontrol.ServerParams{ - BufLimit: testBufLimit, - MinRecharge: 1, - } - - srv.fcManager = flowcontrol.NewClientManager(50, 10, 1000000000) - srv.fcCostStats = newCostStats(nil) - } - pm.Start(1000) - return pm, nil -} - -// newTestProtocolManagerMust creates a new protocol manager for testing purposes, -// with the given number of blocks already known, potential notification -// channels for different events and relative chain indexers array. In case of an error, the constructor force- -// fails the test. -func newTestProtocolManagerMust(t *testing.T, lightSync bool, blocks int, generator func(int, *core.BlockGen), odr *LesOdr, peers *peerSet, db ethdb.Database) *ProtocolManager { - pm, err := newTestProtocolManager(lightSync, blocks, generator, odr, peers, db) - if err != nil { - t.Fatalf("Failed to create protocol manager: %v", err) - } - return pm -} - -// testPeer is a simulated peer to allow testing direct network calls. -type testPeer struct { - net p2p.MsgReadWriter // Network layer reader/writer to simulate remote messaging - app *p2p.MsgPipeRW // Application layer reader/writer to simulate the local side - *peer -} - -// newTestPeer creates a new peer registered at the given protocol manager. -func newTestPeer(t *testing.T, name string, version int, pm *ProtocolManager, shake bool) (*testPeer, <-chan error) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - - peer := pm.newPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) - - // Start the peer on a new thread - errc := make(chan error, 1) - go func() { - select { - case pm.newPeerCh <- peer: - errc <- pm.handle(peer) - case <-pm.quitSync: - errc <- p2p.DiscQuitting - } - }() - tp := &testPeer{ - app: app, - net: net, - peer: peer, - } - // Execute any implicitly requested handshakes and return - if shake { - var ( - genesis = pm.blockchain.Genesis() - head = pm.blockchain.CurrentHeader() - td = pm.blockchain.GetTd(head.Hash(), head.Number.Uint64()) - ) - tp.handshake(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash()) - } - return tp, errc -} - -func newTestPeerPair(name string, version int, pm, pm2 *ProtocolManager) (*peer, <-chan error, *peer, <-chan error) { - // Create a message pipe to communicate through - app, net := p2p.MsgPipe() - - // Generate a random id and create the peer - var id enode.ID - rand.Read(id[:]) - - peer := pm.newPeer(version, NetworkId, p2p.NewPeer(id, name, nil), net) - peer2 := pm2.newPeer(version, NetworkId, p2p.NewPeer(id, name, nil), app) - - // Start the peer on a new thread - errc := make(chan error, 1) - errc2 := make(chan error, 1) - go func() { - select { - case pm.newPeerCh <- peer: - errc <- pm.handle(peer) - case <-pm.quitSync: - errc <- p2p.DiscQuitting - } - }() - go func() { - select { - case pm2.newPeerCh <- peer2: - errc2 <- pm2.handle(peer2) - case <-pm2.quitSync: - errc2 <- p2p.DiscQuitting - } - }() - return peer, errc, peer2, errc2 -} - -// handshake simulates a trivial handshake that expects the same state from the -// remote side as we are simulating locally. -func (p *testPeer) handshake(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash) { - var expList keyValueList - expList = expList.add("protocolVersion", uint64(p.version)) - expList = expList.add("networkId", uint64(NetworkId)) - expList = expList.add("headTd", td) - expList = expList.add("headHash", head) - expList = expList.add("headNum", headNum) - expList = expList.add("genesisHash", genesis) - sendList := make(keyValueList, len(expList)) - copy(sendList, expList) - expList = expList.add("serveHeaders", nil) - expList = expList.add("serveChainSince", uint64(0)) - expList = expList.add("serveStateSince", uint64(0)) - expList = expList.add("txRelay", nil) - expList = expList.add("flowControl/BL", testBufLimit) - expList = expList.add("flowControl/MRR", uint64(1)) - expList = expList.add("flowControl/MRC", testRCL()) - - if err := p2p.ExpectMsg(p.app, StatusMsg, expList); err != nil { - t.Fatalf("status recv: %v", err) - } - if err := p2p.Send(p.app, StatusMsg, sendList); err != nil { - t.Fatalf("status send: %v", err) - } - - p.fcServerParams = &flowcontrol.ServerParams{ - BufLimit: testBufLimit, - MinRecharge: 1, - } -} - -// close terminates the local side of the peer, notifying the remote protocol -// manager of termination. -func (p *testPeer) close() { - p.app.Close() -} - -// TestEntity represents a network entity for testing with necessary auxiliary fields. -type TestEntity struct { - db ethdb.Database - rPeer *peer - tPeer *testPeer - peers *peerSet - pm *ProtocolManager - // Indexers - chtIndexer *core.ChainIndexer - bloomIndexer *core.ChainIndexer - bloomTrieIndexer *core.ChainIndexer -} - -// newServerEnv creates a server testing environment with a connected test peer for testing purpose. -func newServerEnv(t *testing.T, blocks int, protocol int, waitIndexers func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer)) (*TestEntity, func()) { - db := ethdb.NewMemDatabase() - cIndexer, bIndexer, btIndexer := testIndexers(db, nil, light.TestServerIndexerConfig) - - pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, nil, db) - peer, _ := newTestPeer(t, "peer", protocol, pm, true) - - cIndexer.Start(pm.blockchain.(*core.BlockChain)) - bIndexer.Start(pm.blockchain.(*core.BlockChain)) - - // Wait until indexers generate enough index data. - if waitIndexers != nil { - waitIndexers(cIndexer, bIndexer, btIndexer) - } - - return &TestEntity{ - db: db, - tPeer: peer, - pm: pm, - chtIndexer: cIndexer, - bloomIndexer: bIndexer, - bloomTrieIndexer: btIndexer, - }, func() { - peer.close() - // Note bloom trie indexer will be closed by it parent recursively. - cIndexer.Close() - bIndexer.Close() - } -} - -// newClientServerEnv creates a client/server arch environment with a connected les server and light client pair -// for testing purpose. -func newClientServerEnv(t *testing.T, blocks int, protocol int, waitIndexers func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer), newPeer bool) (*TestEntity, *TestEntity, func()) { - db, ldb := ethdb.NewMemDatabase(), ethdb.NewMemDatabase() - peers, lPeers := newPeerSet(), newPeerSet() - - dist := newRequestDistributor(lPeers, make(chan struct{})) - rm := newRetrieveManager(lPeers, dist, nil) - odr := NewLesOdr(ldb, light.TestClientIndexerConfig, rm) - - cIndexer, bIndexer, btIndexer := testIndexers(db, nil, light.TestServerIndexerConfig) - lcIndexer, lbIndexer, lbtIndexer := testIndexers(ldb, odr, light.TestClientIndexerConfig) - odr.SetIndexers(lcIndexer, lbtIndexer, lbIndexer) - - pm := newTestProtocolManagerMust(t, false, blocks, testChainGen, nil, peers, db) - lpm := newTestProtocolManagerMust(t, true, 0, nil, odr, lPeers, ldb) - - startIndexers := func(clientMode bool, pm *ProtocolManager) { - if clientMode { - lcIndexer.Start(pm.blockchain.(*light.LightChain)) - lbIndexer.Start(pm.blockchain.(*light.LightChain)) - } else { - cIndexer.Start(pm.blockchain.(*core.BlockChain)) - bIndexer.Start(pm.blockchain.(*core.BlockChain)) - } - } - - startIndexers(false, pm) - startIndexers(true, lpm) - - // Execute wait until function if it is specified. - if waitIndexers != nil { - waitIndexers(cIndexer, bIndexer, btIndexer) - } - - var ( - peer, lPeer *peer - err1, err2 <-chan error - ) - if newPeer { - peer, err1, lPeer, err2 = newTestPeerPair("peer", protocol, pm, lpm) - select { - case <-time.After(time.Millisecond * 100): - case err := <-err1: - t.Fatalf("peer 1 handshake error: %v", err) - case err := <-err2: - t.Fatalf("peer 2 handshake error: %v", err) - } - } - - return &TestEntity{ - db: db, - pm: pm, - rPeer: peer, - peers: peers, - chtIndexer: cIndexer, - bloomIndexer: bIndexer, - bloomTrieIndexer: btIndexer, - }, &TestEntity{ - db: ldb, - pm: lpm, - rPeer: lPeer, - peers: lPeers, - chtIndexer: lcIndexer, - bloomIndexer: lbIndexer, - bloomTrieIndexer: lbtIndexer, - }, func() { - // Note bloom trie indexers will be closed by their parents recursively. - cIndexer.Close() - bIndexer.Close() - lcIndexer.Close() - lbIndexer.Close() - } -} diff --git a/les/metrics.go b/les/metrics.go index c282a62a1aed..9ef8c365180c 100644 --- a/les/metrics.go +++ b/les/metrics.go @@ -22,46 +22,91 @@ import ( ) var ( - /* propTxnInPacketsMeter = metrics.NewMeter("eth/prop/txns/in/packets") - propTxnInTrafficMeter = metrics.NewMeter("eth/prop/txns/in/traffic") - propTxnOutPacketsMeter = metrics.NewMeter("eth/prop/txns/out/packets") - propTxnOutTrafficMeter = metrics.NewMeter("eth/prop/txns/out/traffic") - propHashInPacketsMeter = metrics.NewMeter("eth/prop/hashes/in/packets") - propHashInTrafficMeter = metrics.NewMeter("eth/prop/hashes/in/traffic") - propHashOutPacketsMeter = metrics.NewMeter("eth/prop/hashes/out/packets") - propHashOutTrafficMeter = metrics.NewMeter("eth/prop/hashes/out/traffic") - propBlockInPacketsMeter = metrics.NewMeter("eth/prop/blocks/in/packets") - propBlockInTrafficMeter = metrics.NewMeter("eth/prop/blocks/in/traffic") - propBlockOutPacketsMeter = metrics.NewMeter("eth/prop/blocks/out/packets") - propBlockOutTrafficMeter = metrics.NewMeter("eth/prop/blocks/out/traffic") - reqHashInPacketsMeter = metrics.NewMeter("eth/req/hashes/in/packets") - reqHashInTrafficMeter = metrics.NewMeter("eth/req/hashes/in/traffic") - reqHashOutPacketsMeter = metrics.NewMeter("eth/req/hashes/out/packets") - reqHashOutTrafficMeter = metrics.NewMeter("eth/req/hashes/out/traffic") - reqBlockInPacketsMeter = metrics.NewMeter("eth/req/blocks/in/packets") - reqBlockInTrafficMeter = metrics.NewMeter("eth/req/blocks/in/traffic") - reqBlockOutPacketsMeter = metrics.NewMeter("eth/req/blocks/out/packets") - reqBlockOutTrafficMeter = metrics.NewMeter("eth/req/blocks/out/traffic") - reqHeaderInPacketsMeter = metrics.NewMeter("eth/req/headers/in/packets") - reqHeaderInTrafficMeter = metrics.NewMeter("eth/req/headers/in/traffic") - reqHeaderOutPacketsMeter = metrics.NewMeter("eth/req/headers/out/packets") - reqHeaderOutTrafficMeter = metrics.NewMeter("eth/req/headers/out/traffic") - reqBodyInPacketsMeter = metrics.NewMeter("eth/req/bodies/in/packets") - reqBodyInTrafficMeter = metrics.NewMeter("eth/req/bodies/in/traffic") - reqBodyOutPacketsMeter = metrics.NewMeter("eth/req/bodies/out/packets") - reqBodyOutTrafficMeter = metrics.NewMeter("eth/req/bodies/out/traffic") - reqStateInPacketsMeter = metrics.NewMeter("eth/req/states/in/packets") - reqStateInTrafficMeter = metrics.NewMeter("eth/req/states/in/traffic") - reqStateOutPacketsMeter = metrics.NewMeter("eth/req/states/out/packets") - reqStateOutTrafficMeter = metrics.NewMeter("eth/req/states/out/traffic") - reqReceiptInPacketsMeter = metrics.NewMeter("eth/req/receipts/in/packets") - reqReceiptInTrafficMeter = metrics.NewMeter("eth/req/receipts/in/traffic") - reqReceiptOutPacketsMeter = metrics.NewMeter("eth/req/receipts/out/packets") - reqReceiptOutTrafficMeter = metrics.NewMeter("eth/req/receipts/out/traffic")*/ - miscInPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets", nil) - miscInTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic", nil) - miscOutPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets", nil) - miscOutTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic", nil) + miscInPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/total", nil) + miscInTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/total", nil) + miscInHeaderPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/header", nil) + miscInHeaderTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/header", nil) + miscInBodyPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/body", nil) + miscInBodyTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/body", nil) + miscInCodePacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/code", nil) + miscInCodeTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/code", nil) + miscInReceiptPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/receipt", nil) + miscInReceiptTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/receipt", nil) + miscInTrieProofPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/proof", nil) + miscInTrieProofTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/proof", nil) + miscInHelperTriePacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/helperTrie", nil) + miscInHelperTrieTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/helperTrie", nil) + miscInTxsPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/txs", nil) + miscInTxsTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/txs", nil) + miscInTxStatusPacketsMeter = metrics.NewRegisteredMeter("les/misc/in/packets/txStatus", nil) + miscInTxStatusTrafficMeter = metrics.NewRegisteredMeter("les/misc/in/traffic/txStatus", nil) + + miscOutPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/total", nil) + miscOutTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/total", nil) + miscOutHeaderPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/header", nil) + miscOutHeaderTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/header", nil) + miscOutBodyPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/body", nil) + miscOutBodyTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/body", nil) + miscOutCodePacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/code", nil) + miscOutCodeTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/code", nil) + miscOutReceiptPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/receipt", nil) + miscOutReceiptTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/receipt", nil) + miscOutTrieProofPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/proof", nil) + miscOutTrieProofTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/proof", nil) + miscOutHelperTriePacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/helperTrie", nil) + miscOutHelperTrieTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/helperTrie", nil) + miscOutTxsPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/txs", nil) + miscOutTxsTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/txs", nil) + miscOutTxStatusPacketsMeter = metrics.NewRegisteredMeter("les/misc/out/packets/txStatus", nil) + miscOutTxStatusTrafficMeter = metrics.NewRegisteredMeter("les/misc/out/traffic/txStatus", nil) + + miscServingTimeHeaderTimer = metrics.NewRegisteredTimer("les/misc/serve/header", nil) + miscServingTimeBodyTimer = metrics.NewRegisteredTimer("les/misc/serve/body", nil) + miscServingTimeCodeTimer = metrics.NewRegisteredTimer("les/misc/serve/code", nil) + miscServingTimeReceiptTimer = metrics.NewRegisteredTimer("les/misc/serve/receipt", nil) + miscServingTimeTrieProofTimer = metrics.NewRegisteredTimer("les/misc/serve/proof", nil) + miscServingTimeHelperTrieTimer = metrics.NewRegisteredTimer("les/misc/serve/helperTrie", nil) + miscServingTimeTxTimer = metrics.NewRegisteredTimer("les/misc/serve/txs", nil) + miscServingTimeTxStatusTimer = metrics.NewRegisteredTimer("les/misc/serve/txStatus", nil) + + connectionTimer = metrics.NewRegisteredTimer("les/connection/duration", nil) + serverConnectionGauge = metrics.NewRegisteredGauge("les/connection/server", nil) + clientConnectionGauge = metrics.NewRegisteredGauge("les/connection/client", nil) + + totalCapacityGauge = metrics.NewRegisteredGauge("les/server/totalCapacity", nil) + totalRechargeGauge = metrics.NewRegisteredGauge("les/server/totalRecharge", nil) + totalConnectedGauge = metrics.NewRegisteredGauge("les/server/totalConnected", nil) + blockProcessingTimer = metrics.NewRegisteredTimer("les/server/blockProcessingTime", nil) + + requestServedMeter = metrics.NewRegisteredMeter("les/server/req/avgServedTime", nil) + requestServedTimer = metrics.NewRegisteredTimer("les/server/req/servedTime", nil) + requestEstimatedMeter = metrics.NewRegisteredMeter("les/server/req/avgEstimatedTime", nil) + requestEstimatedTimer = metrics.NewRegisteredTimer("les/server/req/estimatedTime", nil) + relativeCostHistogram = metrics.NewRegisteredHistogram("les/server/req/relative", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostHeaderHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/header", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostBodyHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/body", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostReceiptHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/receipt", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostCodeHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/code", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostProofHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/proof", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostHelperProofHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/helperTrie", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostSendTxHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/txs", nil, metrics.NewExpDecaySample(1028, 0.015)) + relativeCostTxStatusHistogram = metrics.NewRegisteredHistogram("les/server/req/relative/txStatus", nil, metrics.NewExpDecaySample(1028, 0.015)) + + globalFactorGauge = metrics.NewRegisteredGauge("les/server/globalFactor", nil) + recentServedGauge = metrics.NewRegisteredGauge("les/server/recentRequestServed", nil) + recentEstimatedGauge = metrics.NewRegisteredGauge("les/server/recentRequestEstimated", nil) + sqServedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/served", nil) + sqQueuedGauge = metrics.NewRegisteredGauge("les/server/servingQueue/queued", nil) + + clientConnectedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/connected", nil) + clientRejectedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/rejected", nil) + clientKickedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/kicked", nil) + clientDisconnectedMeter = metrics.NewRegisteredMeter("les/server/clientEvent/disconnected", nil) + clientFreezeMeter = metrics.NewRegisteredMeter("les/server/clientEvent/freeze", nil) + clientErrorMeter = metrics.NewRegisteredMeter("les/server/clientEvent/error", nil) + + requestRTT = metrics.NewRegisteredTimer("les/client/req/rtt", nil) + requestSendDelay = metrics.NewRegisteredTimer("les/client/req/sendDelay", nil) ) // meteredMsgReadWriter is a wrapper around a p2p.MsgReadWriter, capable of @@ -73,17 +118,11 @@ type meteredMsgReadWriter struct { // newMeteredMsgWriter wraps a p2p MsgReadWriter with metering support. If the // metrics system is disabled, this function returns the original object. -func newMeteredMsgWriter(rw p2p.MsgReadWriter) p2p.MsgReadWriter { +func newMeteredMsgWriter(rw p2p.MsgReadWriter, version int) p2p.MsgReadWriter { if !metrics.Enabled { return rw } - return &meteredMsgReadWriter{MsgReadWriter: rw} -} - -// Init sets the protocol version used by the stream to know which meters to -// increment in case of overlapping message ids between protocol versions. -func (rw *meteredMsgReadWriter) Init(version int) { - rw.version = version + return &meteredMsgReadWriter{MsgReadWriter: rw, version: version} } func (rw *meteredMsgReadWriter) ReadMsg() (p2p.Msg, error) { diff --git a/les/odr.go b/les/odr.go index 9def05a67608..136ecf4df4c6 100644 --- a/les/odr.go +++ b/les/odr.go @@ -18,7 +18,9 @@ package les import ( "context" + "time" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/light" @@ -84,10 +86,9 @@ const ( MsgBlockBodies = iota MsgCode MsgReceipts - MsgProofsV1 MsgProofsV2 - MsgHeaderProofs MsgHelperTrieProofs + MsgTxStatus ) // Msg encodes a LES message that delivers reply data for a request @@ -109,19 +110,23 @@ func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err erro }, canSend: func(dp distPeer) bool { p := dp.(*peer) - return lreq.CanSend(p) + if !p.onlyAnnounce { + return lreq.CanSend(p) + } + return false }, request: func(dp distPeer) func() { p := dp.(*peer) cost := lreq.GetCost(p) - p.fcServer.QueueRequest(reqID, cost) + p.fcServer.QueuedRequest(reqID, cost) return func() { lreq.Request(reqID, p) } }, } - + sent := mclock.Now() if err = odr.retriever.retrieve(ctx, reqID, rq, func(p distPeer, msg *Msg) error { return lreq.Validate(odr.db, msg) }, odr.stop); err == nil { // retrieved from network, store in db req.StoreResult(odr.db) + requestRTT.Update(time.Duration(mclock.Now() - sent)) } else { log.Debug("Failed to retrieve data from network", "err", err) } diff --git a/les/odr_requests.go b/les/odr_requests.go index 0f2e5dd9ecd4..3c4dd7090fc0 100644 --- a/les/odr_requests.go +++ b/les/odr_requests.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( @@ -68,6 +66,8 @@ func LesRequest(req light.OdrRequest) LesOdrRequest { return (*ChtRequest)(r) case *light.BloomRequest: return (*BloomRequest)(r) + case *light.TxStatusRequest: + return (*TxStatusRequest)(r) default: return nil } @@ -166,11 +166,13 @@ func (r *ReceiptsRequest) Validate(db ethdb.Database, msg *Msg) error { receipt := receipts[0] // Retrieve our stored header and validate receipt content against it - header := rawdb.ReadHeader(db, r.Hash, r.Number) - if header == nil { + if r.Header == nil { + r.Header = rawdb.ReadHeader(db, r.Hash, r.Number) + } + if r.Header == nil { return errHeaderUnavailable } - if header.ReceiptHash != types.DeriveSha(receipt) { + if r.Header.ReceiptHash != types.DeriveSha(receipt) { return errReceiptHashMismatch } // Validations passed, store and return @@ -190,14 +192,7 @@ type TrieRequest light.TrieRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) func (r *TrieRequest) GetCost(peer *peer) uint64 { - switch peer.version { - case lpv1: - return peer.GetRequestCost(GetProofsV1Msg, 1) - case lpv2: - return peer.GetRequestCost(GetProofsV2Msg, 1) - default: - panic(nil) - } + return peer.GetRequestCost(GetProofsV2Msg, 1) } // CanSend tells if a certain peer is suitable for serving the given request @@ -222,38 +217,22 @@ func (r *TrieRequest) Request(reqID uint64, peer *peer) error { func (r *TrieRequest) Validate(db ethdb.Database, msg *Msg) error { log.Debug("Validating trie proof", "root", r.Id.Root, "key", r.Key) - switch msg.MsgType { - case MsgProofsV1: - proofs := msg.Obj.([]light.NodeList) - if len(proofs) != 1 { - return errInvalidEntryCount - } - nodeSet := proofs[0].NodeSet() - // Verify the proof and store if checks out - if _, _, err := trie.VerifyProof(r.Id.Root, r.Key, nodeSet); err != nil { - return fmt.Errorf("merkle proof verification failed: %v", err) - } - r.Proof = nodeSet - return nil - - case MsgProofsV2: - proofs := msg.Obj.(light.NodeList) - // Verify the proof and store if checks out - nodeSet := proofs.NodeSet() - reads := &readTraceDB{db: nodeSet} - if _, _, err := trie.VerifyProof(r.Id.Root, r.Key, reads); err != nil { - return fmt.Errorf("merkle proof verification failed: %v", err) - } - // check if all nodes have been read by VerifyProof - if len(reads.reads) != nodeSet.KeyCount() { - return errUselessNodes - } - r.Proof = nodeSet - return nil - - default: + if msg.MsgType != MsgProofsV2 { return errInvalidMessageType } + proofs := msg.Obj.(light.NodeList) + // Verify the proof and store if checks out + nodeSet := proofs.NodeSet() + reads := &readTraceDB{db: nodeSet} + if _, _, err := trie.VerifyProof(r.Id.Root, r.Key, reads); err != nil { + return fmt.Errorf("merkle proof verification failed: %v", err) + } + // check if all nodes have been read by VerifyProof + if len(reads.reads) != nodeSet.KeyCount() { + return errUselessNodes + } + r.Proof = nodeSet + return nil } type CodeReq struct { @@ -332,32 +311,13 @@ type HelperTrieResps struct { // describes all responses, not just a single one AuxData [][]byte } -// legacy LES/1 -type ChtReq struct { - ChtNum, BlockNum uint64 - FromLevel uint -} - -// legacy LES/1 -type ChtResp struct { - Header *types.Header - Proof []rlp.RawValue -} - // ODR request type for requesting headers by Canonical Hash Trie, see LesOdrRequest interface type ChtRequest light.ChtRequest // GetCost returns the cost of the given ODR request according to the serving // peer's cost table (implementation of LesOdrRequest) func (r *ChtRequest) GetCost(peer *peer) uint64 { - switch peer.version { - case lpv1: - return peer.GetRequestCost(GetHeaderProofsMsg, 1) - case lpv2: - return peer.GetRequestCost(GetHelperTrieProofsMsg, 1) - default: - panic(nil) - } + return peer.GetRequestCost(GetHelperTrieProofsMsg, 1) } // CanSend tells if a certain peer is suitable for serving the given request @@ -365,7 +325,11 @@ func (r *ChtRequest) CanSend(peer *peer) bool { peer.lock.RLock() defer peer.lock.RUnlock() - return peer.headInfo.Number >= r.Config.ChtConfirms && r.ChtNum <= (peer.headInfo.Number-r.Config.ChtConfirms)/r.Config.ChtSize + if r.Untrusted { + return peer.headInfo.Number >= r.BlockNum && peer.id == r.PeerId + } else { + return peer.headInfo.Number >= r.Config.ChtConfirms && r.ChtNum <= (peer.headInfo.Number-r.Config.ChtConfirms)/r.Config.ChtSize + } } // Request sends an ODR request to the LES network (implementation of LesOdrRequest) @@ -379,21 +343,7 @@ func (r *ChtRequest) Request(reqID uint64, peer *peer) error { Key: encNum[:], AuxReq: auxHeader, } - switch peer.version { - case lpv1: - var reqsV1 ChtReq - if req.Type != htCanonical || req.AuxReq != auxHeader || len(req.Key) != 8 { - return fmt.Errorf("Request invalid in LES/1 mode") - } - blockNum := binary.BigEndian.Uint64(req.Key) - // convert HelperTrie request to old CHT request - reqsV1 = ChtReq{ChtNum: (req.TrieIdx + 1) * (r.Config.ChtSize / r.Config.PairChtSize), BlockNum: blockNum, FromLevel: req.FromLevel} - return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []ChtReq{reqsV1}) - case lpv2: - return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []HelperTrieReq{req}) - default: - panic(nil) - } + return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []HelperTrieReq{req}) } // Valid processes an ODR request reply message from the LES network @@ -402,49 +352,28 @@ func (r *ChtRequest) Request(reqID uint64, peer *peer) error { func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error { log.Debug("Validating CHT", "cht", r.ChtNum, "block", r.BlockNum) - switch msg.MsgType { - case MsgHeaderProofs: // LES/1 backwards compatibility - proofs := msg.Obj.([]ChtResp) - if len(proofs) != 1 { - return errInvalidEntryCount - } - proof := proofs[0] - - // Verify the CHT - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], r.BlockNum) - - value, _, err := trie.VerifyProof(r.ChtRoot, encNumber[:], light.NodeList(proof.Proof).NodeSet()) - if err != nil { - return err - } - var node light.ChtNode - if err := rlp.DecodeBytes(value, &node); err != nil { - return err - } - if node.Hash != proof.Header.Hash() { - return errCHTHashMismatch - } - // Verifications passed, store and return - r.Header = proof.Header - r.Proof = light.NodeList(proof.Proof).NodeSet() - r.Td = node.Td - case MsgHelperTrieProofs: - resp := msg.Obj.(HelperTrieResps) - if len(resp.AuxData) != 1 { - return errInvalidEntryCount - } - nodeSet := resp.Proofs.NodeSet() - headerEnc := resp.AuxData[0] - if len(headerEnc) == 0 { - return errHeaderUnavailable - } - header := new(types.Header) - if err := rlp.DecodeBytes(headerEnc, header); err != nil { - return errHeaderUnavailable - } + if msg.MsgType != MsgHelperTrieProofs { + return errInvalidMessageType + } + resp := msg.Obj.(HelperTrieResps) + if len(resp.AuxData) != 1 { + return errInvalidEntryCount + } + nodeSet := resp.Proofs.NodeSet() + headerEnc := resp.AuxData[0] + if len(headerEnc) == 0 { + return errHeaderUnavailable + } + header := new(types.Header) + if err := rlp.DecodeBytes(headerEnc, header); err != nil { + return errHeaderUnavailable + } - // Verify the CHT + // Verify the CHT + // Note: For untrusted CHT request, there is no proof response but + // header data. + var node light.ChtNode + if !r.Untrusted { var encNumber [8]byte binary.BigEndian.PutUint64(encNumber[:], r.BlockNum) @@ -457,7 +386,6 @@ func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error { return errUselessNodes } - var node light.ChtNode if err := rlp.DecodeBytes(value, &node); err != nil { return err } @@ -467,13 +395,12 @@ func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error { if r.BlockNum != header.Number.Uint64() { return errCHTNumberMismatch } - // Verifications passed, store and return - r.Header = header - r.Proof = nodeSet - r.Td = node.Td - default: - return errInvalidMessageType } + // Verifications passed, store and return + r.Header = header + r.Proof = nodeSet + r.Td = node.Td // For untrusted request, td here is nil, todo improve the les/2 protocol + return nil } @@ -557,10 +484,48 @@ func (r *BloomRequest) Validate(db ethdb.Database, msg *Msg) error { return nil } +// TxStatusRequest is the ODR request type for transaction status +type TxStatusRequest light.TxStatusRequest + +// GetCost returns the cost of the given ODR request according to the serving +// peer's cost table (implementation of LesOdrRequest) +func (r *TxStatusRequest) GetCost(peer *peer) uint64 { + return peer.GetRequestCost(GetTxStatusMsg, len(r.Hashes)) +} + +// CanSend tells if a certain peer is suitable for serving the given request +func (r *TxStatusRequest) CanSend(peer *peer) bool { + return peer.version >= lpv2 +} + +// Request sends an ODR request to the LES network (implementation of LesOdrRequest) +func (r *TxStatusRequest) Request(reqID uint64, peer *peer) error { + peer.Log().Debug("Requesting transaction status", "count", len(r.Hashes)) + return peer.RequestTxStatus(reqID, r.GetCost(peer), r.Hashes) +} + +// Valid processes an ODR request reply message from the LES network +// returns true and stores results in memory if the message was a valid reply +// to the request (implementation of LesOdrRequest) +func (r *TxStatusRequest) Validate(db ethdb.Database, msg *Msg) error { + log.Debug("Validating transaction status", "count", len(r.Hashes)) + + // Ensure we have a correct message with a single block body + if msg.MsgType != MsgTxStatus { + return errInvalidMessageType + } + status := msg.Obj.([]light.TxStatus) + if len(status) != len(r.Hashes) { + return errInvalidEntryCount + } + r.Status = status + return nil +} + // readTraceDB stores the keys of database reads. We use this to check that received node // sets contain only the trie nodes necessary to make proofs pass. type readTraceDB struct { - db trie.DatabaseReader + db ethdb.KeyValueReader reads map[string]struct{} } diff --git a/les/odr_test.go b/les/odr_test.go index ac81fbcf02fd..97217e94886a 100644 --- a/les/odr_test.go +++ b/les/odr_test.go @@ -38,9 +38,8 @@ import ( type odrTestFn func(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte -func TestOdrGetBlockLes1(t *testing.T) { testOdr(t, 1, 1, odrGetBlock) } - -func TestOdrGetBlockLes2(t *testing.T) { testOdr(t, 2, 1, odrGetBlock) } +func TestOdrGetBlockLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetBlock) } +func TestOdrGetBlockLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetBlock) } func odrGetBlock(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { var block *types.Block @@ -56,15 +55,14 @@ func odrGetBlock(ctx context.Context, db ethdb.Database, config *params.ChainCon return rlp } -func TestOdrGetReceiptsLes1(t *testing.T) { testOdr(t, 1, 1, odrGetReceipts) } - -func TestOdrGetReceiptsLes2(t *testing.T) { testOdr(t, 2, 1, odrGetReceipts) } +func TestOdrGetReceiptsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrGetReceipts) } +func TestOdrGetReceiptsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrGetReceipts) } func odrGetReceipts(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { var receipts types.Receipts if bc != nil { if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { - receipts = rawdb.ReadReceipts(db, bhash, *number) + receipts = rawdb.ReadReceipts(db, bhash, *number, config) } } else { if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { @@ -78,13 +76,12 @@ func odrGetReceipts(ctx context.Context, db ethdb.Database, config *params.Chain return rlp } -func TestOdrAccountsLes1(t *testing.T) { testOdr(t, 1, 1, odrAccounts) } - -func TestOdrAccountsLes2(t *testing.T) { testOdr(t, 2, 1, odrAccounts) } +func TestOdrAccountsLes2(t *testing.T) { testOdr(t, 2, 1, true, odrAccounts) } +func TestOdrAccountsLes3(t *testing.T) { testOdr(t, 3, 1, true, odrAccounts) } func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { dummyAddr := common.HexToAddress("1234567812345678123456781234567812345678") - acc := []common.Address{testBankAddress, acc1Addr, acc2Addr, dummyAddr} + acc := []common.Address{bankAddr, userAddr1, userAddr2, dummyAddr} var ( res []byte @@ -108,9 +105,8 @@ func odrAccounts(ctx context.Context, db ethdb.Database, config *params.ChainCon return res } -func TestOdrContractCallLes1(t *testing.T) { testOdr(t, 1, 2, odrContractCall) } - -func TestOdrContractCallLes2(t *testing.T) { testOdr(t, 2, 2, odrContractCall) } +func TestOdrContractCallLes2(t *testing.T) { testOdr(t, 2, 2, true, odrContractCall) } +func TestOdrContractCallLes3(t *testing.T) { testOdr(t, 3, 2, true, odrContractCall) } type callmsg struct { types.Message @@ -129,7 +125,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai statedb, err := state.New(header.Root, state.NewDatabase(db)) if err == nil { - from := statedb.GetOrNewStateObject(testBankAddress) + from := statedb.GetOrNewStateObject(bankAddr) from.SetBalance(math.MaxBig256) msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), 100000, new(big.Int), data, false)} @@ -145,8 +141,8 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai } else { header := lc.GetHeaderByHash(bhash) state := light.NewState(ctx, header, lc.Odr()) - state.SetBalance(testBankAddress, math.MaxBig256) - msg := callmsg{types.NewMessage(testBankAddress, &testContractAddr, 0, new(big.Int), 100000, new(big.Int), data, false)} + state.SetBalance(bankAddr, math.MaxBig256) + msg := callmsg{types.NewMessage(bankAddr, &testContractAddr, 0, new(big.Int), 100000, new(big.Int), data, false)} context := core.NewEVMContext(msg, header, lc, nil) vmenv := vm.NewEVM(context, state, config, vm.Config{}) gp := new(core.GasPool).AddGas(math.MaxUint64) @@ -159,46 +155,78 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai return res } +func TestOdrTxStatusLes2(t *testing.T) { testOdr(t, 2, 1, false, odrTxStatus) } +func TestOdrTxStatusLes3(t *testing.T) { testOdr(t, 3, 1, false, odrTxStatus) } + +func odrTxStatus(ctx context.Context, db ethdb.Database, config *params.ChainConfig, bc *core.BlockChain, lc *light.LightChain, bhash common.Hash) []byte { + var txs types.Transactions + if bc != nil { + block := bc.GetBlockByHash(bhash) + txs = block.Transactions() + } else { + if block, _ := lc.GetBlockByHash(ctx, bhash); block != nil { + btxs := block.Transactions() + txs = make(types.Transactions, len(btxs)) + for i, tx := range btxs { + var err error + txs[i], _, _, _, err = light.GetTransaction(ctx, lc.Odr(), tx.Hash()) + if err != nil { + return nil + } + } + } + } + rlp, _ := rlp.EncodeToBytes(txs) + return rlp +} + // testOdr tests odr requests whose validation guaranteed by block headers. -func testOdr(t *testing.T, protocol int, expFail uint64, fn odrTestFn) { +func testOdr(t *testing.T, protocol int, expFail uint64, checkCached bool, fn odrTestFn) { // Assemble the test environment - server, client, tearDown := newClientServerEnv(t, 4, protocol, nil, true) + server, client, tearDown := newClientServerEnv(t, 4, protocol, nil, nil, 0, false, true) defer tearDown() - client.pm.synchronise(client.rPeer) + + client.handler.synchronise(client.peer.peer) test := func(expFail uint64) { - for i := uint64(0); i <= server.pm.blockchain.CurrentHeader().Number.Uint64(); i++ { + // Mark this as a helper to put the failures at the correct lines + t.Helper() + + for i := uint64(0); i <= server.handler.blockchain.CurrentHeader().Number.Uint64(); i++ { bhash := rawdb.ReadCanonicalHash(server.db, i) - b1 := fn(light.NoOdr, server.db, server.pm.chainConfig, server.pm.blockchain.(*core.BlockChain), nil, bhash) + b1 := fn(light.NoOdr, server.db, server.handler.server.chainConfig, server.handler.blockchain, nil, bhash) ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - defer cancel() - b2 := fn(ctx, client.db, client.pm.chainConfig, nil, client.pm.blockchain.(*light.LightChain), bhash) + b2 := fn(ctx, client.db, client.handler.backend.chainConfig, nil, client.handler.backend.blockchain, bhash) + cancel() eq := bytes.Equal(b1, b2) exp := i < expFail if exp && !eq { - t.Errorf("odr mismatch") + t.Fatalf("odr mismatch: have %x, want %x", b2, b1) } if !exp && eq { - t.Errorf("unexpected odr match") + t.Fatalf("unexpected odr match") } } } - // temporarily remove peer to test odr fails + // expect retrievals to fail (except genesis block) without a les peer - client.peers.Unregister(client.rPeer.id) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed + client.handler.backend.peers.lock.Lock() + client.peer.peer.hasBlock = func(common.Hash, uint64, bool) bool { return false } + client.handler.backend.peers.lock.Unlock() test(expFail) + // expect all retrievals to pass - client.peers.Register(client.rPeer) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed - client.peers.lock.Lock() - client.rPeer.hasBlock = func(common.Hash, uint64, bool) bool { return true } - client.peers.lock.Unlock() + client.handler.backend.peers.lock.Lock() + client.peer.peer.hasBlock = func(common.Hash, uint64, bool) bool { return true } + client.handler.backend.peers.lock.Unlock() test(5) + // still expect all retrievals to pass, now data should be cached locally - client.peers.Unregister(client.rPeer.id) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed - test(5) + if checkCached { + client.handler.backend.peers.Unregister(client.peer.peer.id) + time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed + test(5) + } } diff --git a/les/peer.go b/les/peer.go index 678384f0eb46..ab5b30a6571a 100644 --- a/les/peer.go +++ b/les/peer.go @@ -14,33 +14,58 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( "errors" "fmt" "math/big" + "math/rand" + "net" "sync" + "sync/atomic" "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/les/flowcontrol" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) var ( - errClosed = errors.New("peer set is closed") - errAlreadyRegistered = errors.New("peer is already registered") - errNotRegistered = errors.New("peer is not registered") - errInvalidHelpTrieReq = errors.New("invalid help trie request") + errClosed = errors.New("peer set is closed") + errAlreadyRegistered = errors.New("peer is already registered") + errNotRegistered = errors.New("peer is not registered") ) -const maxResponseErrors = 50 // number of invalid responses tolerated (makes the protocol less brittle but still avoids spam) +const ( + maxRequestErrors = 20 // number of invalid requests tolerated (makes the protocol less brittle but still avoids spam) + maxResponseErrors = 50 // number of invalid responses tolerated (makes the protocol less brittle but still avoids spam) +) + +// capacity limitation for parameter updates +const ( + allowedUpdateBytes = 100000 // initial/maximum allowed update size + allowedUpdateRate = time.Millisecond * 10 // time constant for recharging one byte of allowance +) + +const ( + freezeTimeBase = time.Millisecond * 700 // fixed component of client freeze time + freezeTimeRandom = time.Millisecond * 600 // random component of client freeze time + freezeCheckPeriod = time.Millisecond * 100 // buffer value recheck period after initial freeze time has elapsed +) + +// if the total encoded size of a sent transaction batch is over txSizeCostLimit +// per transaction then the request cost is calculated as proportional to the +// encoded size instead of the transaction count +const txSizeCostLimit = 0x4000 const ( announceTypeNone = iota @@ -50,47 +75,156 @@ const ( type peer struct { *p2p.Peer - rw p2p.MsgReadWriter version int // Protocol version negotiated network uint64 // Network ID being on - announceType, requestAnnounceType uint64 + announceType uint64 + + // Checkpoint relative fields + checkpoint params.TrustedCheckpoint + checkpointNumber uint64 id string headInfo *announceData lock sync.RWMutex - announceChn chan announceData - sendQueue *execQueue + sendQueue *execQueue + + errCh chan error + + // responseLock ensures that responses are queued in the same order as + // RequestProcessed is called + responseLock sync.Mutex + responseCount uint64 + invalidCount uint32 poolEntry *poolEntry hasBlock func(common.Hash, uint64, bool) bool responseErrors int + updateCounter uint64 + updateTime mclock.AbsTime + frozen uint32 // 1 if client is in frozen state - fcClient *flowcontrol.ClientNode // nil if the peer is server only - fcServer *flowcontrol.ServerNode // nil if the peer is client only - fcServerParams *flowcontrol.ServerParams - fcCosts requestCostTable -} + fcClient *flowcontrol.ClientNode // nil if the peer is server only + fcServer *flowcontrol.ServerNode // nil if the peer is client only + fcParams flowcontrol.ServerParams + fcCosts requestCostTable -func newPeer(version int, network uint64, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { - id := p.ID() + trusted bool + onlyAnnounce bool + chainSince, chainRecent uint64 + stateSince, stateRecent uint64 +} +func newPeer(version int, network uint64, trusted bool, p *p2p.Peer, rw p2p.MsgReadWriter) *peer { return &peer{ - Peer: p, - rw: rw, - version: version, - network: network, - id: fmt.Sprintf("%x", id[:8]), - announceChn: make(chan announceData, 20), + Peer: p, + rw: rw, + version: version, + network: network, + id: peerIdToString(p.ID()), + trusted: trusted, + errCh: make(chan error, 1), + } +} + +// peerIdToString converts enode.ID to a string form +func peerIdToString(id enode.ID) string { + return fmt.Sprintf("%x", id.Bytes()) +} + +// freeClientId returns a string identifier for the peer. Multiple peers with the +// same identifier can not be connected in free mode simultaneously. +func (p *peer) freeClientId() string { + if addr, ok := p.RemoteAddr().(*net.TCPAddr); ok { + if addr.IP.IsLoopback() { + // using peer id instead of loopback ip address allows multiple free + // connections from local machine to own server + return p.id + } else { + return addr.IP.String() + } } + return p.id +} + +// rejectUpdate returns true if a parameter update has to be rejected because +// the size and/or rate of updates exceed the capacity limitation +func (p *peer) rejectUpdate(size uint64) bool { + now := mclock.Now() + if p.updateCounter == 0 { + p.updateTime = now + } else { + dt := now - p.updateTime + r := uint64(dt / mclock.AbsTime(allowedUpdateRate)) + if p.updateCounter > r { + p.updateCounter -= r + p.updateTime += mclock.AbsTime(allowedUpdateRate * time.Duration(r)) + } else { + p.updateCounter = 0 + p.updateTime = now + } + } + p.updateCounter += size + return p.updateCounter > allowedUpdateBytes +} + +// freezeClient temporarily puts the client in a frozen state which means all +// unprocessed and subsequent requests are dropped. Unfreezing happens automatically +// after a short time if the client's buffer value is at least in the slightly positive +// region. The client is also notified about being frozen/unfrozen with a Stop/Resume +// message. +func (p *peer) freezeClient() { + if p.version < lpv3 { + // if Stop/Resume is not supported then just drop the peer after setting + // its frozen status permanently + atomic.StoreUint32(&p.frozen, 1) + p.Peer.Disconnect(p2p.DiscUselessPeer) + return + } + if atomic.SwapUint32(&p.frozen, 1) == 0 { + go func() { + p.SendStop() + time.Sleep(freezeTimeBase + time.Duration(rand.Int63n(int64(freezeTimeRandom)))) + for { + bufValue, bufLimit := p.fcClient.BufferStatus() + if bufLimit == 0 { + return + } + if bufValue <= bufLimit/8 { + time.Sleep(freezeCheckPeriod) + } else { + atomic.StoreUint32(&p.frozen, 0) + p.SendResume(bufValue) + break + } + } + }() + } +} + +// freezeServer processes Stop/Resume messages from the given server +func (p *peer) freezeServer(frozen bool) { + var f uint32 + if frozen { + f = 1 + } + if atomic.SwapUint32(&p.frozen, f) != f && frozen { + p.sendQueue.clear() + } +} + +// isFrozen returns true if the client is frozen or the server has put our +// client in frozen state +func (p *peer) isFrozen() bool { + return atomic.LoadUint32(&p.frozen) != 0 } func (p *peer) canQueue() bool { - return p.sendQueue.canQueue() + return p.sendQueue.canQueue() && !p.isFrozen() } func (p *peer) queueSend(f func()) { @@ -143,6 +277,25 @@ func (p *peer) waitBefore(maxCost uint64) (time.Duration, float64) { return p.fcServer.CanSend(maxCost) } +// updateCapacity updates the request serving capacity assigned to a given client +// and also sends an announcement about the updated flow control parameters +func (p *peer) updateCapacity(cap uint64) { + p.responseLock.Lock() + defer p.responseLock.Unlock() + + p.fcParams = flowcontrol.ServerParams{MinRecharge: cap, BufLimit: cap * bufLimitRatio} + p.fcClient.UpdateParams(p.fcParams) + var kvList keyValueList + kvList = kvList.add("flowControl/MRR", cap) + kvList = kvList.add("flowControl/BL", cap*bufLimitRatio) + p.queueSend(func() { p.SendAnnounce(announceData{Update: kvList}) }) +} + +func (p *peer) responseID() uint64 { + p.responseCount += 1 + return p.responseCount +} + func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) error { type req struct { ReqID uint64 @@ -151,31 +304,82 @@ func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) return p2p.Send(w, msgcode, req{reqID, data}) } -func sendResponse(w p2p.MsgWriter, msgcode, reqID, bv uint64, data interface{}) error { +// reply struct represents a reply with the actual data already RLP encoded and +// only the bv (buffer value) missing. This allows the serving mechanism to +// calculate the bv value which depends on the data size before sending the reply. +type reply struct { + w p2p.MsgWriter + msgcode, reqID uint64 + data rlp.RawValue +} + +// send sends the reply with the calculated buffer value +func (r *reply) send(bv uint64) error { type resp struct { ReqID, BV uint64 - Data interface{} + Data rlp.RawValue } - return p2p.Send(w, msgcode, resp{reqID, bv, data}) + return p2p.Send(r.w, r.msgcode, resp{r.reqID, bv, r.data}) +} + +// size returns the RLP encoded size of the message data +func (r *reply) size() uint32 { + return uint32(len(r.data)) } func (p *peer) GetRequestCost(msgcode uint64, amount int) uint64 { p.lock.RLock() defer p.lock.RUnlock() - cost := p.fcCosts[msgcode].baseCost + p.fcCosts[msgcode].reqCost*uint64(amount) - if cost > p.fcServerParams.BufLimit { - cost = p.fcServerParams.BufLimit + costs := p.fcCosts[msgcode] + if costs == nil { + return 0 + } + cost := costs.baseCost + costs.reqCost*uint64(amount) + if cost > p.fcParams.BufLimit { + cost = p.fcParams.BufLimit + } + return cost +} + +func (p *peer) GetTxRelayCost(amount, size int) uint64 { + p.lock.RLock() + defer p.lock.RUnlock() + + costs := p.fcCosts[SendTxV2Msg] + if costs == nil { + return 0 + } + cost := costs.baseCost + costs.reqCost*uint64(amount) + sizeCost := costs.baseCost + costs.reqCost*uint64(size)/txSizeCostLimit + if sizeCost > cost { + cost = sizeCost + } + + if cost > p.fcParams.BufLimit { + cost = p.fcParams.BufLimit } return cost } // HasBlock checks if the peer has a given block func (p *peer) HasBlock(hash common.Hash, number uint64, hasState bool) bool { + var head, since, recent uint64 p.lock.RLock() + if p.headInfo != nil { + head = p.headInfo.Number + } + if hasState { + since = p.stateSince + recent = p.stateRecent + } else { + since = p.chainSince + recent = p.chainRecent + } hasBlock := p.hasBlock p.lock.RUnlock() - return hasBlock != nil && hasBlock(hash, number, hasState) + + return head >= number && number >= since && (recent == 0 || number+recent+4 > head) && hasBlock != nil && hasBlock(hash, number, hasState) } // SendAnnounce announces the availability of a number of blocks through @@ -184,52 +388,59 @@ func (p *peer) SendAnnounce(request announceData) error { return p2p.Send(p.rw, AnnounceMsg, request) } -// SendBlockHeaders sends a batch of block headers to the remote peer. -func (p *peer) SendBlockHeaders(reqID, bv uint64, headers []*types.Header) error { - return sendResponse(p.rw, BlockHeadersMsg, reqID, bv, headers) +// SendStop notifies the client about being in frozen state +func (p *peer) SendStop() error { + return p2p.Send(p.rw, StopMsg, struct{}{}) } -// SendBlockBodiesRLP sends a batch of block contents to the remote peer from -// an already RLP encoded format. -func (p *peer) SendBlockBodiesRLP(reqID, bv uint64, bodies []rlp.RawValue) error { - return sendResponse(p.rw, BlockBodiesMsg, reqID, bv, bodies) +// SendResume notifies the client about getting out of frozen state +func (p *peer) SendResume(bv uint64) error { + return p2p.Send(p.rw, ResumeMsg, bv) } -// SendCodeRLP sends a batch of arbitrary internal data, corresponding to the -// hashes requested. -func (p *peer) SendCode(reqID, bv uint64, data [][]byte) error { - return sendResponse(p.rw, CodeMsg, reqID, bv, data) +// ReplyBlockHeaders creates a reply with a batch of block headers +func (p *peer) ReplyBlockHeaders(reqID uint64, headers []*types.Header) *reply { + data, _ := rlp.EncodeToBytes(headers) + return &reply{p.rw, BlockHeadersMsg, reqID, data} } -// SendReceiptsRLP sends a batch of transaction receipts, corresponding to the -// ones requested from an already RLP encoded format. -func (p *peer) SendReceiptsRLP(reqID, bv uint64, receipts []rlp.RawValue) error { - return sendResponse(p.rw, ReceiptsMsg, reqID, bv, receipts) +// ReplyBlockBodiesRLP creates a reply with a batch of block contents from +// an already RLP encoded format. +func (p *peer) ReplyBlockBodiesRLP(reqID uint64, bodies []rlp.RawValue) *reply { + data, _ := rlp.EncodeToBytes(bodies) + return &reply{p.rw, BlockBodiesMsg, reqID, data} } -// SendProofs sends a batch of legacy LES/1 merkle proofs, corresponding to the ones requested. -func (p *peer) SendProofs(reqID, bv uint64, proofs proofsData) error { - return sendResponse(p.rw, ProofsV1Msg, reqID, bv, proofs) +// ReplyCode creates a reply with a batch of arbitrary internal data, corresponding to the +// hashes requested. +func (p *peer) ReplyCode(reqID uint64, codes [][]byte) *reply { + data, _ := rlp.EncodeToBytes(codes) + return &reply{p.rw, CodeMsg, reqID, data} } -// SendProofsV2 sends a batch of merkle proofs, corresponding to the ones requested. -func (p *peer) SendProofsV2(reqID, bv uint64, proofs light.NodeList) error { - return sendResponse(p.rw, ProofsV2Msg, reqID, bv, proofs) +// ReplyReceiptsRLP creates a reply with a batch of transaction receipts, corresponding to the +// ones requested from an already RLP encoded format. +func (p *peer) ReplyReceiptsRLP(reqID uint64, receipts []rlp.RawValue) *reply { + data, _ := rlp.EncodeToBytes(receipts) + return &reply{p.rw, ReceiptsMsg, reqID, data} } -// SendHeaderProofs sends a batch of legacy LES/1 header proofs, corresponding to the ones requested. -func (p *peer) SendHeaderProofs(reqID, bv uint64, proofs []ChtResp) error { - return sendResponse(p.rw, HeaderProofsMsg, reqID, bv, proofs) +// ReplyProofsV2 creates a reply with a batch of merkle proofs, corresponding to the ones requested. +func (p *peer) ReplyProofsV2(reqID uint64, proofs light.NodeList) *reply { + data, _ := rlp.EncodeToBytes(proofs) + return &reply{p.rw, ProofsV2Msg, reqID, data} } -// SendHelperTrieProofs sends a batch of HelperTrie proofs, corresponding to the ones requested. -func (p *peer) SendHelperTrieProofs(reqID, bv uint64, resp HelperTrieResps) error { - return sendResponse(p.rw, HelperTrieProofsMsg, reqID, bv, resp) +// ReplyHelperTrieProofs creates a reply with a batch of HelperTrie proofs, corresponding to the ones requested. +func (p *peer) ReplyHelperTrieProofs(reqID uint64, resp HelperTrieResps) *reply { + data, _ := rlp.EncodeToBytes(resp) + return &reply{p.rw, HelperTrieProofsMsg, reqID, data} } -// SendTxStatus sends a batch of transaction status records, corresponding to the ones requested. -func (p *peer) SendTxStatus(reqID, bv uint64, stats []txStatus) error { - return sendResponse(p.rw, TxStatusMsg, reqID, bv, stats) +// ReplyTxStatus creates a reply with a batch of transaction status records, corresponding to the ones requested. +func (p *peer) ReplyTxStatus(reqID uint64, stats []light.TxStatus) *reply { + data, _ := rlp.EncodeToBytes(stats) + return &reply{p.rw, TxStatusMsg, reqID, data} } // RequestHeadersByHash fetches a batch of blocks' headers corresponding to the @@ -269,36 +480,13 @@ func (p *peer) RequestReceipts(reqID, cost uint64, hashes []common.Hash) error { // RequestProofs fetches a batch of merkle proofs from a remote node. func (p *peer) RequestProofs(reqID, cost uint64, reqs []ProofReq) error { p.Log().Debug("Fetching batch of proofs", "count", len(reqs)) - switch p.version { - case lpv1: - return sendRequest(p.rw, GetProofsV1Msg, reqID, cost, reqs) - case lpv2: - return sendRequest(p.rw, GetProofsV2Msg, reqID, cost, reqs) - default: - panic(nil) - } + return sendRequest(p.rw, GetProofsV2Msg, reqID, cost, reqs) } // RequestHelperTrieProofs fetches a batch of HelperTrie merkle proofs from a remote node. -func (p *peer) RequestHelperTrieProofs(reqID, cost uint64, data interface{}) error { - switch p.version { - case lpv1: - reqs, ok := data.([]ChtReq) - if !ok { - return errInvalidHelpTrieReq - } - p.Log().Debug("Fetching batch of header proofs", "count", len(reqs)) - return sendRequest(p.rw, GetHeaderProofsMsg, reqID, cost, reqs) - case lpv2: - reqs, ok := data.([]HelperTrieReq) - if !ok { - return errInvalidHelpTrieReq - } - p.Log().Debug("Fetching batch of HelperTrie proofs", "count", len(reqs)) - return sendRequest(p.rw, GetHelperTrieProofsMsg, reqID, cost, reqs) - default: - panic(nil) - } +func (p *peer) RequestHelperTrieProofs(reqID, cost uint64, reqs []HelperTrieReq) error { + p.Log().Debug("Fetching batch of HelperTrie proofs", "count", len(reqs)) + return sendRequest(p.rw, GetHelperTrieProofsMsg, reqID, cost, reqs) } // RequestTxStatus fetches a batch of transaction status records from a remote node. @@ -307,17 +495,10 @@ func (p *peer) RequestTxStatus(reqID, cost uint64, txHashes []common.Hash) error return sendRequest(p.rw, GetTxStatusMsg, reqID, cost, txHashes) } -// SendTxStatus sends a batch of transactions to be added to the remote transaction pool. -func (p *peer) SendTxs(reqID, cost uint64, txs types.Transactions) error { - p.Log().Debug("Fetching batch of transactions", "count", len(txs)) - switch p.version { - case lpv1: - return p2p.Send(p.rw, SendTxMsg, txs) // old message format does not include reqID - case lpv2: - return sendRequest(p.rw, SendTxV2Msg, reqID, cost, txs) - default: - panic(nil) - } +// SendTxStatus creates a reply with a batch of transactions to be added to the remote transaction pool. +func (p *peer) SendTxs(reqID, cost uint64, txs rlp.RawValue) error { + p.Log().Debug("Sending batch of transactions", "size", len(txs)) + return sendRequest(p.rw, SendTxV2Msg, reqID, cost, txs) } type keyValueEntry struct { @@ -340,12 +521,14 @@ func (l keyValueList) add(key string, val interface{}) keyValueList { return append(l, entry) } -func (l keyValueList) decode() keyValueMap { +func (l keyValueList) decode() (keyValueMap, uint64) { m := make(keyValueMap) + var size uint64 for _, entry := range l { m[entry.Key] = entry.Value + size += uint64(len(entry.Key)) + uint64(len(entry.Value)) + 8 } - return m + return m, size } func (m keyValueMap) get(key string, val interface{}) error { @@ -394,6 +577,8 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis defer p.lock.Unlock() var send keyValueList + + // Add some basic handshake fields send = send.add("protocolVersion", uint64(p.version)) send = send.add("networkId", p.network) send = send.add("headTd", td) @@ -401,24 +586,60 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis send = send.add("headNum", headNum) send = send.add("genesisHash", genesis) if server != nil { - send = send.add("serveHeaders", nil) - send = send.add("serveChainSince", uint64(0)) - send = send.add("serveStateSince", uint64(0)) - send = send.add("txRelay", nil) + // Add some information which services server can offer. + if !server.config.UltraLightOnlyAnnounce { + send = send.add("serveHeaders", nil) + send = send.add("serveChainSince", uint64(0)) + send = send.add("serveStateSince", uint64(0)) + + // If local ethereum node is running in archive mode, advertise ourselves we have + // all version state data. Otherwise only recent state is available. + stateRecent := uint64(core.TriesInMemory - 4) + if server.archiveMode { + stateRecent = 0 + } + send = send.add("serveRecentState", stateRecent) + send = send.add("txRelay", nil) + } send = send.add("flowControl/BL", server.defParams.BufLimit) send = send.add("flowControl/MRR", server.defParams.MinRecharge) - list := server.fcCostStats.getCurrentList() - send = send.add("flowControl/MRC", list) - p.fcCosts = list.decode() + + var costList RequestCostList + if server.costTracker.testCostList != nil { + costList = server.costTracker.testCostList + } else { + costList = server.costTracker.makeCostList(server.costTracker.globalFactor()) + } + send = send.add("flowControl/MRC", costList) + p.fcCosts = costList.decode(ProtocolLengths[uint(p.version)]) + p.fcParams = server.defParams + + // Add advertised checkpoint and register block height which + // client can verify the checkpoint validity. + if server.oracle != nil && server.oracle.isRunning() { + cp, height := server.oracle.stableCheckpoint() + if cp != nil { + send = send.add("checkpoint/value", cp) + send = send.add("checkpoint/registerHeight", height) + } + } } else { - p.requestAnnounceType = announceTypeSimple // set to default until "very light" client mode is implemented - send = send.add("announceType", p.requestAnnounceType) + // Add some client-specific handshake fields + p.announceType = announceTypeSimple + if p.trusted { + p.announceType = announceTypeSigned + } + send = send.add("announceType", p.announceType) } + recvList, err := p.sendReceiveHandshake(send) if err != nil { return err } - recv := recvList.decode() + recv, size := recvList.decode() + if p.rejectUpdate(size) { + return errResp(ErrRequestRejected, "") + } var rGenesis, rHash common.Hash var rVersion, rNetwork, rNum uint64 @@ -452,45 +673,86 @@ func (p *peer) Handshake(td *big.Int, head common.Hash, headNum uint64, genesis if int(rVersion) != p.version { return errResp(ErrProtocolVersionMismatch, "%d (!= %d)", rVersion, p.version) } + if server != nil { - // until we have a proper peer connectivity API, allow LES connection to other servers - /*if recv.get("serveStateSince", nil) == nil { - return errResp(ErrUselessPeer, "wanted client, got server") - }*/ if recv.get("announceType", &p.announceType) != nil { + // set default announceType on server side p.announceType = announceTypeSimple } p.fcClient = flowcontrol.NewClientNode(server.fcManager, server.defParams) } else { - if recv.get("serveChainSince", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot serve chain") + if recv.get("serveChainSince", &p.chainSince) != nil { + p.onlyAnnounce = true + } + if recv.get("serveRecentChain", &p.chainRecent) != nil { + p.chainRecent = 0 + } + if recv.get("serveStateSince", &p.stateSince) != nil { + p.onlyAnnounce = true } - if recv.get("serveStateSince", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot serve state") + if recv.get("serveRecentState", &p.stateRecent) != nil { + p.stateRecent = 0 } if recv.get("txRelay", nil) != nil { - return errResp(ErrUselessPeer, "peer cannot relay transactions") + p.onlyAnnounce = true } - params := &flowcontrol.ServerParams{} - if err := recv.get("flowControl/BL", ¶ms.BufLimit); err != nil { + + if p.onlyAnnounce && !p.trusted { + return errResp(ErrUselessPeer, "peer cannot serve requests") + } + + var sParams flowcontrol.ServerParams + if err := recv.get("flowControl/BL", &sParams.BufLimit); err != nil { return err } - if err := recv.get("flowControl/MRR", ¶ms.MinRecharge); err != nil { + if err := recv.get("flowControl/MRR", &sParams.MinRecharge); err != nil { return err } var MRC RequestCostList if err := recv.get("flowControl/MRC", &MRC); err != nil { return err } - p.fcServerParams = params - p.fcServer = flowcontrol.NewServerNode(params) - p.fcCosts = MRC.decode() + p.fcParams = sParams + p.fcServer = flowcontrol.NewServerNode(sParams, &mclock.System{}) + p.fcCosts = MRC.decode(ProtocolLengths[uint(p.version)]) + + recv.get("checkpoint/value", &p.checkpoint) + recv.get("checkpoint/registerHeight", &p.checkpointNumber) + + if !p.onlyAnnounce { + for msgCode := range reqAvgTimeCost { + if p.fcCosts[msgCode] == nil { + return errResp(ErrUselessPeer, "peer does not support message %d", msgCode) + } + } + } } - p.headInfo = &announceData{Td: rTd, Hash: rHash, Number: rNum} return nil } +// updateFlowControl updates the flow control parameters belonging to the server +// node if the announced key/value set contains relevant fields +func (p *peer) updateFlowControl(update keyValueMap) { + if p.fcServer == nil { + return + } + // If any of the flow control params is nil, refuse to update. + var params flowcontrol.ServerParams + if update.get("flowControl/BL", ¶ms.BufLimit) == nil && update.get("flowControl/MRR", ¶ms.MinRecharge) == nil { + // todo can light client set a minimal acceptable flow control params? + p.fcParams = params + p.fcServer.UpdateParams(params) + } + var MRC RequestCostList + if update.get("flowControl/MRC", &MRC) == nil { + costUpdate := MRC.decode(ProtocolLengths[uint(p.version)]) + for code, cost := range costUpdate { + p.fcCosts[code] = cost + } + } +} + // String implements fmt.Stringer. func (p *peer) String() string { return fmt.Sprintf("Peer %s [%s]", p.id, @@ -576,8 +838,10 @@ func (ps *peerSet) Unregister(id string) error { for _, n := range peers { n.unregisterPeer(p) } + p.sendQueue.quit() p.Peer.Disconnect(p2p.DiscUselessPeer) + return nil } } diff --git a/les/peer_test.go b/les/peer_test.go new file mode 100644 index 000000000000..db74a052c14c --- /dev/null +++ b/les/peer_test.go @@ -0,0 +1,302 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "math/big" + "net" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" +) + +const protocolVersion = lpv2 + +var ( + hash = common.HexToHash("deadbeef") + genesis = common.HexToHash("cafebabe") + headNum = uint64(1234) + td = big.NewInt(123) +) + +func newNodeID(t *testing.T) *enode.Node { + key, err := crypto.GenerateKey() + if err != nil { + t.Fatal("generate key err:", err) + } + return enode.NewV4(&key.PublicKey, net.IP{}, 35000, 35000) +} + +// ulc connects to trusted peer and send announceType=announceTypeSigned +func TestPeerHandshakeSetAnnounceTypeToAnnounceTypeSignedForTrustedPeer(t *testing.T) { + id := newNodeID(t).ID() + + // peer to connect(on ulc side) + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + trusted: true, + rw: &rwStub{ + WriteHook: func(recvList keyValueList) { + recv, _ := recvList.decode() + var reqType uint64 + err := recv.get("announceType", &reqType) + if err != nil { + t.Fatal(err) + } + if reqType != announceTypeSigned { + t.Fatal("Expected announceTypeSigned") + } + }, + ReadHook: func(l keyValueList) keyValueList { + l = l.add("serveHeaders", nil) + l = l.add("serveChainSince", uint64(0)) + l = l.add("serveStateSince", uint64(0)) + l = l.add("txRelay", nil) + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", testCostList(0)) + return l + }, + }, + network: NetworkId, + } + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatalf("Handshake error: %s", err) + } + if p.announceType != announceTypeSigned { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeAnnounceTypeSignedForTrustedPeersPeerNotInTrusted(t *testing.T) { + id := newNodeID(t).ID() + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + rw: &rwStub{ + WriteHook: func(recvList keyValueList) { + // checking that ulc sends to peer allowedRequests=noRequests and announceType != announceTypeSigned + recv, _ := recvList.decode() + var reqType uint64 + err := recv.get("announceType", &reqType) + if err != nil { + t.Fatal(err) + } + if reqType == announceTypeSigned { + t.Fatal("Expected not announceTypeSigned") + } + }, + ReadHook: func(l keyValueList) keyValueList { + l = l.add("serveHeaders", nil) + l = l.add("serveChainSince", uint64(0)) + l = l.add("serveStateSince", uint64(0)) + l = l.add("txRelay", nil) + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", testCostList(0)) + return l + }, + }, + network: NetworkId, + } + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatal(err) + } + if p.announceType == announceTypeSigned { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeDefaultAllRequests(t *testing.T) { + id := newNodeID(t).ID() + + s := generateLesServer() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("announceType", uint64(announceTypeSigned)) + l = l.add("allowedRequests", uint64(0)) + return l + }, + }, + network: NetworkId, + } + + err := p.Handshake(td, hash, headNum, genesis, s) + if err != nil { + t.Fatal(err) + } + + if p.onlyAnnounce { + t.Fatal("Incorrect announceType") + } +} + +func TestPeerHandshakeServerSendOnlyAnnounceRequestsHeaders(t *testing.T) { + id := newNodeID(t).ID() + + s := generateLesServer() + s.config.UltraLightOnlyAnnounce = true + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("announceType", uint64(announceTypeSigned)) + return l + }, + WriteHook: func(l keyValueList) { + for _, v := range l { + if v.Key == "serveHeaders" || + v.Key == "serveChainSince" || + v.Key == "serveStateSince" || + v.Key == "txRelay" { + t.Fatalf("%v exists", v.Key) + } + } + }, + }, + network: NetworkId, + } + + err := p.Handshake(td, hash, headNum, genesis, s) + if err != nil { + t.Fatal(err) + } +} +func TestPeerHandshakeClientReceiveOnlyAnnounceRequestsHeaders(t *testing.T) { + id := newNodeID(t).ID() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + + l = l.add("announceType", uint64(announceTypeSigned)) + + return l + }, + }, + network: NetworkId, + trusted: true, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err != nil { + t.Fatal(err) + } + + if !p.onlyAnnounce { + t.Fatal("onlyAnnounce must be true") + } +} + +func TestPeerHandshakeClientReturnErrorOnUselessPeer(t *testing.T) { + id := newNodeID(t).ID() + + p := peer{ + Peer: p2p.NewPeer(id, "test peer", []p2p.Cap{}), + version: protocolVersion, + rw: &rwStub{ + ReadHook: func(l keyValueList) keyValueList { + l = l.add("flowControl/BL", uint64(0)) + l = l.add("flowControl/MRR", uint64(0)) + l = l.add("flowControl/MRC", RequestCostList{}) + l = l.add("announceType", uint64(announceTypeSigned)) + return l + }, + }, + network: NetworkId, + } + + err := p.Handshake(td, hash, headNum, genesis, nil) + if err == nil { + t.FailNow() + } +} + +func generateLesServer() *LesServer { + s := &LesServer{ + lesCommons: lesCommons{ + config: ð.Config{UltraLightOnlyAnnounce: true}, + }, + defParams: flowcontrol.ServerParams{ + BufLimit: uint64(300000000), + MinRecharge: uint64(50000), + }, + fcManager: flowcontrol.NewClientManager(nil, &mclock.System{}), + } + s.costTracker, _ = newCostTracker(rawdb.NewMemoryDatabase(), s.config) + return s +} + +type rwStub struct { + ReadHook func(l keyValueList) keyValueList + WriteHook func(l keyValueList) +} + +func (s *rwStub) ReadMsg() (p2p.Msg, error) { + payload := keyValueList{} + payload = payload.add("protocolVersion", uint64(protocolVersion)) + payload = payload.add("networkId", uint64(NetworkId)) + payload = payload.add("headTd", td) + payload = payload.add("headHash", hash) + payload = payload.add("headNum", headNum) + payload = payload.add("genesisHash", genesis) + + if s.ReadHook != nil { + payload = s.ReadHook(payload) + } + size, p, err := rlp.EncodeToReader(payload) + if err != nil { + return p2p.Msg{}, err + } + return p2p.Msg{ + Size: uint32(size), + Payload: p, + }, nil +} + +func (s *rwStub) WriteMsg(m p2p.Msg) error { + recvList := keyValueList{} + if err := m.Decode(&recvList); err != nil { + return err + } + if s.WriteHook != nil { + s.WriteHook(recvList) + } + return nil +} diff --git a/les/protocol.go b/les/protocol.go index 0b24f5aedb64..5fdf32b74a6a 100644 --- a/les/protocol.go +++ b/les/protocol.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -25,8 +24,6 @@ import ( "math/big" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/rlp" @@ -34,19 +31,19 @@ import ( // Constants to match up protocol versions and messages const ( - lpv1 = 1 lpv2 = 2 + lpv3 = 3 ) // Supported versions of the les protocol (first is primary) var ( - ClientProtocolVersions = []uint{lpv2, lpv1} - ServerProtocolVersions = []uint{lpv2, lpv1} + ClientProtocolVersions = []uint{lpv2, lpv3} + ServerProtocolVersions = []uint{lpv2, lpv3} AdvertiseProtocolVersions = []uint{lpv2} // clients are searching for the first advertised protocol in the list ) // Number of implemented message corresponding to different protocol versions. -var ProtocolLengths = map[uint]uint64{lpv1: 15, lpv2: 22} +var ProtocolLengths = map[uint]uint64{lpv2: 22, lpv3: 24} const ( NetworkId = 1 @@ -55,7 +52,7 @@ const ( // les protocol message codes const ( - // Protocol messages belonging to LPV1 + // Protocol messages inherited from LPV1 StatusMsg = 0x00 AnnounceMsg = 0x01 GetBlockHeadersMsg = 0x02 @@ -64,14 +61,9 @@ const ( BlockBodiesMsg = 0x05 GetReceiptsMsg = 0x06 ReceiptsMsg = 0x07 - GetProofsV1Msg = 0x08 - ProofsV1Msg = 0x09 GetCodeMsg = 0x0a CodeMsg = 0x0b - SendTxMsg = 0x0c - GetHeaderProofsMsg = 0x0d - HeaderProofsMsg = 0x0e - // Protocol messages belonging to LPV2 + // Protocol messages introduced in LPV2 GetProofsV2Msg = 0x0f ProofsV2Msg = 0x10 GetHelperTrieProofsMsg = 0x11 @@ -79,8 +71,27 @@ const ( SendTxV2Msg = 0x13 GetTxStatusMsg = 0x14 TxStatusMsg = 0x15 + // Protocol messages introduced in LPV3 + StopMsg = 0x16 + ResumeMsg = 0x17 ) +type requestInfo struct { + name string + maxCount uint64 +} + +var requests = map[uint64]requestInfo{ + GetBlockHeadersMsg: {"GetBlockHeaders", MaxHeaderFetch}, + GetBlockBodiesMsg: {"GetBlockBodies", MaxBodyFetch}, + GetReceiptsMsg: {"GetReceipts", MaxReceiptFetch}, + GetCodeMsg: {"GetCode", MaxCodeFetch}, + GetProofsV2Msg: {"GetProofsV2", MaxProofsFetch}, + GetHelperTrieProofsMsg: {"GetHelperTrieProofs", MaxHelperTrieProofsFetch}, + SendTxV2Msg: {"SendTxV2", MaxTxSend}, + GetTxStatusMsg: {"GetTxStatus", MaxTxStatus}, +} + type errCode int const ( @@ -138,6 +149,14 @@ type announceData struct { Update keyValueList } +// sanityCheck verifies that the values are reasonable, as a DoS protection +func (a *announceData) sanityCheck() error { + if tdlen := a.Td.BitLen(); tdlen > 100 { + return fmt.Errorf("too large block TD: bitlen %d", tdlen) + } + return nil +} + // sign adds a signature to the block announcement by the given privKey func (a *announceData) sign(privKey *ecdsa.PrivateKey) { rlp, _ := rlp.EncodeToBytes(announceBlock{a.Hash, a.Number, a.Td}) @@ -146,9 +165,9 @@ func (a *announceData) sign(privKey *ecdsa.PrivateKey) { } // checkSignature verifies if the block announcement has a valid signature by the given pubKey -func (a *announceData) checkSignature(id enode.ID) error { +func (a *announceData) checkSignature(id enode.ID, update keyValueMap) error { var sig []byte - if err := a.Update.decode().get("sign", &sig); err != nil { + if err := update.get("sign", &sig); err != nil { return err } rlp, _ := rlp.EncodeToBytes(announceBlock{a.Hash, a.Number, a.Td}) @@ -218,9 +237,3 @@ type CodeData []struct { } type proofsData [][]rlp.RawValue - -type txStatus struct { - Status core.TxStatus - Lookup *rawdb.TxLookupEntry `rlp:"nil"` - Error string -} diff --git a/les/randselect.go b/les/randselect.go index 1cc1d3d3e0ea..8efe0c94d397 100644 --- a/les/randselect.go +++ b/les/randselect.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( diff --git a/les/request_test.go b/les/request_test.go index c9c18519828c..69b57ca31705 100644 --- a/les/request_test.go +++ b/les/request_test.go @@ -28,7 +28,7 @@ import ( "github.com/ethereum/go-ethereum/light" ) -var testBankSecureTrieKey = secAddr(testBankAddress) +var testBankSecureTrieKey = secAddr(bankAddr) func secAddr(addr common.Address) []byte { return crypto.Keccak256(addr[:]) @@ -36,25 +36,22 @@ func secAddr(addr common.Address) []byte { type accessTestFn func(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest -func TestBlockAccessLes1(t *testing.T) { testAccess(t, 1, tfBlockAccess) } - func TestBlockAccessLes2(t *testing.T) { testAccess(t, 2, tfBlockAccess) } +func TestBlockAccessLes3(t *testing.T) { testAccess(t, 3, tfBlockAccess) } func tfBlockAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { return &light.BlockRequest{Hash: bhash, Number: number} } -func TestReceiptsAccessLes1(t *testing.T) { testAccess(t, 1, tfReceiptsAccess) } - func TestReceiptsAccessLes2(t *testing.T) { testAccess(t, 2, tfReceiptsAccess) } +func TestReceiptsAccessLes3(t *testing.T) { testAccess(t, 3, tfReceiptsAccess) } func tfReceiptsAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { return &light.ReceiptsRequest{Hash: bhash, Number: number} } -func TestTrieEntryAccessLes1(t *testing.T) { testAccess(t, 1, tfTrieEntryAccess) } - func TestTrieEntryAccessLes2(t *testing.T) { testAccess(t, 2, tfTrieEntryAccess) } +func TestTrieEntryAccessLes3(t *testing.T) { testAccess(t, 3, tfTrieEntryAccess) } func tfTrieEntryAccess(db ethdb.Database, bhash common.Hash, number uint64) light.OdrRequest { if number := rawdb.ReadHeaderNumber(db, bhash); number != nil { @@ -63,9 +60,8 @@ func tfTrieEntryAccess(db ethdb.Database, bhash common.Hash, number uint64) ligh return nil } -func TestCodeAccessLes1(t *testing.T) { testAccess(t, 1, tfCodeAccess) } - func TestCodeAccessLes2(t *testing.T) { testAccess(t, 2, tfCodeAccess) } +func TestCodeAccessLes3(t *testing.T) { testAccess(t, 3, tfCodeAccess) } func tfCodeAccess(db ethdb.Database, bhash common.Hash, num uint64) light.OdrRequest { number := rawdb.ReadHeaderNumber(db, bhash) @@ -83,17 +79,18 @@ func tfCodeAccess(db ethdb.Database, bhash common.Hash, num uint64) light.OdrReq func testAccess(t *testing.T, protocol int, fn accessTestFn) { // Assemble the test environment - server, client, tearDown := newClientServerEnv(t, 4, protocol, nil, true) + server, client, tearDown := newClientServerEnv(t, 4, protocol, nil, nil, 0, false, true) defer tearDown() - client.pm.synchronise(client.rPeer) + client.handler.synchronise(client.peer.peer) test := func(expFail uint64) { - for i := uint64(0); i <= server.pm.blockchain.CurrentHeader().Number.Uint64(); i++ { + for i := uint64(0); i <= server.handler.blockchain.CurrentHeader().Number.Uint64(); i++ { bhash := rawdb.ReadCanonicalHash(server.db, i) if req := fn(client.db, bhash, i); req != nil { ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - defer cancel() - err := client.pm.odr.Retrieve(ctx, req) + err := client.handler.backend.odr.Retrieve(ctx, req) + cancel() + got := err == nil exp := i < expFail if exp && !got { @@ -105,18 +102,5 @@ func testAccess(t *testing.T, protocol int, fn accessTestFn) { } } } - - // temporarily remove peer to test odr fails - client.peers.Unregister(client.rPeer.id) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed - // expect retrievals to fail (except genesis block) without a les peer - test(0) - - client.peers.Register(client.rPeer) - time.Sleep(time.Millisecond * 10) // ensure that all peerSetNotify callbacks are executed - client.rPeer.lock.Lock() - client.rPeer.hasBlock = func(common.Hash, uint64, bool) bool { return true } - client.rPeer.lock.Unlock() - // expect all retrievals to pass test(5) } diff --git a/les/retrieve.go b/les/retrieve.go index d77cfea74e07..d17a02e1ae89 100644 --- a/les/retrieve.go +++ b/les/retrieve.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package les import ( @@ -80,8 +78,8 @@ type sentReq struct { // after which delivered is set to true, the validity of the response is sent on the // valid channel and no more responses are accepted. type sentReqToPeer struct { - delivered bool - valid chan bool + delivered, frozen bool + event chan int } // reqPeerEvent is sent by the request-from-peer goroutine (tryRequest) to the @@ -97,6 +95,7 @@ const ( rpHardTimeout rpDeliveredValid rpDeliveredInvalid + rpNotDelivered ) // newRetrieveManager creates the retrieve manager @@ -151,7 +150,7 @@ func (rm *retrieveManager) sendReq(reqID uint64, req *distReq, val validatorFunc req.request = func(p distPeer) func() { // before actually sending the request, put an entry into the sentTo map r.lock.Lock() - r.sentTo[p] = sentReqToPeer{false, make(chan bool, 1)} + r.sentTo[p] = sentReqToPeer{delivered: false, frozen: false, event: make(chan int, 1)} r.lock.Unlock() return request(p) } @@ -175,6 +174,17 @@ func (rm *retrieveManager) deliver(peer distPeer, msg *Msg) error { return errResp(ErrUnexpectedResponse, "reqID = %v", msg.ReqID) } +// frozen is called by the LES protocol manager when a server has suspended its service and we +// should not expect an answer for the requests already sent there +func (rm *retrieveManager) frozen(peer distPeer) { + rm.lock.RLock() + defer rm.lock.RUnlock() + + for _, req := range rm.sentReqs { + req.frozen(peer) + } +} + // reqStateFn represents a state of the retrieve loop state machine type reqStateFn func() reqStateFn @@ -217,7 +227,7 @@ func (r *sentReq) stateRequesting() reqStateFn { go r.tryRequest() r.lastReqQueued = true return r.stateRequesting - case rpDeliveredInvalid: + case rpDeliveredInvalid, rpNotDelivered: // if it was the last sent request (set to nil by update) then start a new one if !r.lastReqQueued && r.lastReqSentTo == nil { go r.tryRequest() @@ -279,7 +289,7 @@ func (r *sentReq) update(ev reqPeerEvent) { r.reqSrtoCount++ case rpHardTimeout: r.reqSrtoCount-- - case rpDeliveredValid, rpDeliveredInvalid: + case rpDeliveredValid, rpDeliveredInvalid, rpNotDelivered: if ev.peer == r.lastReqSentTo { r.lastReqSentTo = nil } else { @@ -345,12 +355,13 @@ func (r *sentReq) tryRequest() { }() select { - case ok := <-s.valid: - if ok { - r.eventsCh <- reqPeerEvent{rpDeliveredValid, p} - } else { - r.eventsCh <- reqPeerEvent{rpDeliveredInvalid, p} + case event := <-s.event: + if event == rpNotDelivered { + r.lock.Lock() + delete(r.sentTo, p) + r.lock.Unlock() } + r.eventsCh <- reqPeerEvent{event, p} return case <-time.After(softRequestTimeout): srto = true @@ -358,12 +369,13 @@ func (r *sentReq) tryRequest() { } select { - case ok := <-s.valid: - if ok { - r.eventsCh <- reqPeerEvent{rpDeliveredValid, p} - } else { - r.eventsCh <- reqPeerEvent{rpDeliveredInvalid, p} + case event := <-s.event: + if event == rpNotDelivered { + r.lock.Lock() + delete(r.sentTo, p) + r.lock.Unlock() } + r.eventsCh <- reqPeerEvent{event, p} case <-time.After(hardRequestTimeout): hrto = true r.eventsCh <- reqPeerEvent{rpHardTimeout, p} @@ -379,15 +391,37 @@ func (r *sentReq) deliver(peer distPeer, msg *Msg) error { if !ok || s.delivered { return errResp(ErrUnexpectedResponse, "reqID = %v", msg.ReqID) } + if s.frozen { + return nil + } valid := r.validate(peer, msg) == nil - r.sentTo[peer] = sentReqToPeer{true, s.valid} - s.valid <- valid + r.sentTo[peer] = sentReqToPeer{delivered: true, frozen: false, event: s.event} + if valid { + s.event <- rpDeliveredValid + } else { + s.event <- rpDeliveredInvalid + } if !valid { return errResp(ErrInvalidResponse, "reqID = %v", msg.ReqID) } return nil } +// frozen sends a "not delivered" event to the peer event channel belonging to the +// given peer if the request has been sent there, causing the state machine to not +// expect an answer and potentially even send the request to the same peer again +// when canSend allows it. +func (r *sentReq) frozen(peer distPeer) { + r.lock.Lock() + defer r.lock.Unlock() + + s, ok := r.sentTo[peer] + if ok && !s.delivered && !s.frozen { + r.sentTo[peer] = sentReqToPeer{delivered: false, frozen: true, event: s.event} + s.event <- rpNotDelivered + } +} + // stop stops the retrieval process and sets an error code that will be returned // by getError func (r *sentReq) stop(err error) { diff --git a/les/server.go b/les/server.go index 2fa0456d695d..7e11833fb664 100644 --- a/les/server.go +++ b/les/server.go @@ -14,106 +14,150 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( "crypto/ecdsa" - "encoding/binary" - "math" - "sync" + "time" - "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/core" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/les/flowcontrol" "github.com/ethereum/go-ethereum/light" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/discv5" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" ) type LesServer struct { lesCommons - fcManager *flowcontrol.ClientManager // nil if our node is client only - fcCostStats *requestCostStats - defParams *flowcontrol.ServerParams + archiveMode bool // Flag whether the ethereum node runs in archive mode. + handler *serverHandler lesTopics []discv5.Topic privateKey *ecdsa.PrivateKey - quitSync chan struct{} -} -func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { - quitSync := make(chan struct{}) - pm, err := NewProtocolManager(eth.BlockChain().Config(), light.DefaultServerIndexerConfig, false, config.NetworkId, eth.EventMux(), eth.Engine(), newPeerSet(), eth.BlockChain(), eth.TxPool(), eth.ChainDb(), nil, nil, nil, quitSync, new(sync.WaitGroup)) - if err != nil { - return nil, err - } + // Flow control and capacity management + fcManager *flowcontrol.ClientManager + costTracker *costTracker + defParams flowcontrol.ServerParams + servingQueue *servingQueue + clientPool *clientPool + + freeCapacity uint64 // The minimal client capacity used for free client. + threadsIdle int // Request serving threads count when system is idle. + threadsBusy int // Request serving threads count when system is busy(block insertion). +} +func NewLesServer(e *eth.Ethereum, config *eth.Config) (*LesServer, error) { + // Collect les protocol version information supported by local node. lesTopics := make([]discv5.Topic, len(AdvertiseProtocolVersions)) for i, pv := range AdvertiseProtocolVersions { - lesTopics[i] = lesTopic(eth.BlockChain().Genesis().Hash(), pv) + lesTopics[i] = lesTopic(e.BlockChain().Genesis().Hash(), pv) + } + // Calculate the number of threads used to service the light client + // requests based on the user-specified value. + threads := config.LightServ * 4 / 100 + if threads < 4 { + threads = 4 } - srv := &LesServer{ lesCommons: lesCommons{ + genesis: e.BlockChain().Genesis().Hash(), config: config, - chainDb: eth.ChainDb(), + chainConfig: e.BlockChain().Config(), iConfig: light.DefaultServerIndexerConfig, - chtIndexer: light.NewChtIndexer(eth.ChainDb(), nil, params.CHTFrequencyServer, params.HelperTrieProcessConfirmations), - bloomTrieIndexer: light.NewBloomTrieIndexer(eth.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency), - protocolManager: pm, + chainDb: e.ChainDb(), + peers: newPeerSet(), + chainReader: e.BlockChain(), + chtIndexer: light.NewChtIndexer(e.ChainDb(), nil, params.CHTFrequency, params.HelperTrieProcessConfirmations), + bloomTrieIndexer: light.NewBloomTrieIndexer(e.ChainDb(), nil, params.BloomBitsBlocks, params.BloomTrieFrequency), + closeCh: make(chan struct{}), }, - quitSync: quitSync, - lesTopics: lesTopics, + archiveMode: e.ArchiveMode(), + lesTopics: lesTopics, + fcManager: flowcontrol.NewClientManager(nil, &mclock.System{}), + servingQueue: newServingQueue(int64(time.Millisecond*10), float64(config.LightServ)/100), + threadsBusy: config.LightServ/100 + 1, + threadsIdle: threads, } + srv.handler = newServerHandler(srv, e.BlockChain(), e.ChainDb(), e.TxPool(), e.Synced) + srv.costTracker, srv.freeCapacity = newCostTracker(e.ChainDb(), config) - logger := log.New() + // Set up checkpoint oracle. + oracle := config.CheckpointOracle + if oracle == nil { + oracle = params.CheckpointOracles[e.BlockChain().Genesis().Hash()] + } + srv.oracle = newCheckpointOracle(oracle, srv.localCheckpoint) - chtV1SectionCount, _, _ := srv.chtIndexer.Sections() // indexer still uses LES/1 4k section size for backwards server compatibility - chtV2SectionCount := chtV1SectionCount / (params.CHTFrequencyClient / params.CHTFrequencyServer) - if chtV2SectionCount != 0 { - // convert to LES/2 section - chtLastSection := chtV2SectionCount - 1 - // convert last LES/2 section index back to LES/1 index for chtIndexer.SectionHead - chtLastSectionV1 := (chtLastSection+1)*(params.CHTFrequencyClient/params.CHTFrequencyServer) - 1 - chtSectionHead := srv.chtIndexer.SectionHead(chtLastSectionV1) - chtRoot := light.GetChtRoot(pm.chainDb, chtLastSectionV1, chtSectionHead) - logger.Info("Loaded CHT", "section", chtLastSection, "head", chtSectionHead, "root", chtRoot) + // Initialize server capacity management fields. + srv.defParams = flowcontrol.ServerParams{ + BufLimit: srv.freeCapacity * bufLimitRatio, + MinRecharge: srv.freeCapacity, } - bloomTrieSectionCount, _, _ := srv.bloomTrieIndexer.Sections() - if bloomTrieSectionCount != 0 { - bloomTrieLastSection := bloomTrieSectionCount - 1 - bloomTrieSectionHead := srv.bloomTrieIndexer.SectionHead(bloomTrieLastSection) - bloomTrieRoot := light.GetBloomTrieRoot(pm.chainDb, bloomTrieLastSection, bloomTrieSectionHead) - logger.Info("Loaded bloom trie", "section", bloomTrieLastSection, "head", bloomTrieSectionHead, "root", bloomTrieRoot) + // LES flow control tries to more or less guarantee the possibility for the + // clients to send a certain amount of requests at any time and get a quick + // response. Most of the clients want this guarantee but don't actually need + // to send requests most of the time. Our goal is to serve as many clients as + // possible while the actually used server capacity does not exceed the limits + totalRecharge := srv.costTracker.totalRecharge() + maxCapacity := srv.freeCapacity * uint64(srv.config.LightPeers) + if totalRecharge > maxCapacity { + maxCapacity = totalRecharge } - - srv.chtIndexer.Start(eth.BlockChain()) - pm.server = srv - - srv.defParams = &flowcontrol.ServerParams{ - BufLimit: 300000000, - MinRecharge: 50000, + srv.fcManager.SetCapacityLimits(srv.freeCapacity, maxCapacity, srv.freeCapacity*2) + srv.clientPool = newClientPool(srv.chainDb, srv.freeCapacity, 10000, mclock.System{}, func(id enode.ID) { go srv.peers.Unregister(peerIdToString(id)) }) + srv.clientPool.setPriceFactors(priceFactors{0, 1, 1}, priceFactors{0, 1, 1}) + + checkpoint := srv.latestLocalCheckpoint() + if !checkpoint.Empty() { + log.Info("Loaded latest checkpoint", "section", checkpoint.SectionIndex, "head", checkpoint.SectionHead, + "chtroot", checkpoint.CHTRoot, "bloomroot", checkpoint.BloomRoot) } - srv.fcManager = flowcontrol.NewClientManager(uint64(config.LightServ), 10, 1000000000) - srv.fcCostStats = newCostStats(eth.ChainDb()) + srv.chtIndexer.Start(e.BlockChain()) return srv, nil } +func (s *LesServer) APIs() []rpc.API { + return []rpc.API{ + { + Namespace: "les", + Version: "1.0", + Service: NewPrivateLightAPI(&s.lesCommons), + Public: false, + }, + } +} + func (s *LesServer) Protocols() []p2p.Protocol { - return s.makeProtocols(ServerProtocolVersions) + ps := s.makeProtocols(ServerProtocolVersions, s.handler.runPeer, func(id enode.ID) interface{} { + if p := s.peers.Peer(peerIdToString(id)); p != nil { + return p.Info() + } + return nil + }) + // Add "les" ENR entries. + for i := range ps { + ps[i].Attributes = []enr.Entry{&lesEntry{}} + } + return ps } // Start starts the LES server func (s *LesServer) Start(srvr *p2p.Server) { - s.protocolManager.Start(s.config.LightPeers) + s.privateKey = srvr.PrivateKey + s.handler.start() + + s.wg.Add(1) + go s.capacityManagement() + if srvr.DiscV5 != nil { for _, topic := range s.lesTopics { topic := topic @@ -122,266 +166,101 @@ func (s *LesServer) Start(srvr *p2p.Server) { logger.Info("Starting topic registration") defer logger.Info("Terminated topic registration") - srvr.DiscV5.RegisterTopic(topic, s.quitSync) + srvr.DiscV5.RegisterTopic(topic, s.closeCh) }() } } - s.privateKey = srvr.PrivateKey - s.protocolManager.blockLoop() -} - -func (s *LesServer) SetBloomBitsIndexer(bloomIndexer *core.ChainIndexer) { - bloomIndexer.AddChildIndexer(s.bloomTrieIndexer) } // Stop stops the LES service func (s *LesServer) Stop() { - s.chtIndexer.Close() - // bloom trie indexer is closed by parent bloombits indexer - s.fcCostStats.store() - s.fcManager.Stop() - go func() { - <-s.protocolManager.noMorePeers - }() - s.protocolManager.Stop() -} - -type requestCosts struct { - baseCost, reqCost uint64 -} - -type requestCostTable map[uint64]*requestCosts - -type RequestCostList []struct { - MsgCode, BaseCost, ReqCost uint64 -} - -func (list RequestCostList) decode() requestCostTable { - table := make(requestCostTable) - for _, e := range list { - table[e.MsgCode] = &requestCosts{ - baseCost: e.BaseCost, - reqCost: e.ReqCost, - } - } - return table -} + close(s.closeCh) -type linReg struct { - sumX, sumY, sumXX, sumXY float64 - cnt uint64 -} - -const linRegMaxCnt = 100000 + // Disconnect existing sessions. + // This also closes the gate for any new registrations on the peer set. + // sessions which are already established but not added to pm.peers yet + // will exit when they try to register. + s.peers.Close() -func (l *linReg) add(x, y float64) { - if l.cnt >= linRegMaxCnt { - sub := float64(l.cnt+1-linRegMaxCnt) / linRegMaxCnt - l.sumX -= l.sumX * sub - l.sumY -= l.sumY * sub - l.sumXX -= l.sumXX * sub - l.sumXY -= l.sumXY * sub - l.cnt = linRegMaxCnt - 1 - } - l.cnt++ - l.sumX += x - l.sumY += y - l.sumXX += x * x - l.sumXY += x * y -} - -func (l *linReg) calc() (b, m float64) { - if l.cnt == 0 { - return 0, 0 - } - cnt := float64(l.cnt) - d := cnt*l.sumXX - l.sumX*l.sumX - if d < 0.001 { - return l.sumY / cnt, 0 - } - m = (cnt*l.sumXY - l.sumX*l.sumY) / d - b = (l.sumY / cnt) - (m * l.sumX / cnt) - return b, m -} - -func (l *linReg) toBytes() []byte { - var arr [40]byte - binary.BigEndian.PutUint64(arr[0:8], math.Float64bits(l.sumX)) - binary.BigEndian.PutUint64(arr[8:16], math.Float64bits(l.sumY)) - binary.BigEndian.PutUint64(arr[16:24], math.Float64bits(l.sumXX)) - binary.BigEndian.PutUint64(arr[24:32], math.Float64bits(l.sumXY)) - binary.BigEndian.PutUint64(arr[32:40], l.cnt) - return arr[:] -} - -func linRegFromBytes(data []byte) *linReg { - if len(data) != 40 { - return nil - } - l := &linReg{} - l.sumX = math.Float64frombits(binary.BigEndian.Uint64(data[0:8])) - l.sumY = math.Float64frombits(binary.BigEndian.Uint64(data[8:16])) - l.sumXX = math.Float64frombits(binary.BigEndian.Uint64(data[16:24])) - l.sumXY = math.Float64frombits(binary.BigEndian.Uint64(data[24:32])) - l.cnt = binary.BigEndian.Uint64(data[32:40]) - return l -} - -type requestCostStats struct { - lock sync.RWMutex - db ethdb.Database - stats map[uint64]*linReg -} + s.fcManager.Stop() + s.clientPool.stop() + s.costTracker.stop() + s.handler.stop() + s.servingQueue.stop() -type requestCostStatsRlp []struct { - MsgCode uint64 - Data []byte + // Note, bloom trie indexer is closed by parent bloombits indexer. + s.chtIndexer.Close() + s.wg.Wait() + log.Info("Les server stopped") } -var rcStatsKey = []byte("_requestCostStats") - -func newCostStats(db ethdb.Database) *requestCostStats { - stats := make(map[uint64]*linReg) - for _, code := range reqList { - stats[code] = &linReg{cnt: 100} - } - - if db != nil { - data, err := db.Get(rcStatsKey) - var statsRlp requestCostStatsRlp - if err == nil { - err = rlp.DecodeBytes(data, &statsRlp) - } - if err == nil { - for _, r := range statsRlp { - if stats[r.MsgCode] != nil { - if l := linRegFromBytes(r.Data); l != nil { - stats[r.MsgCode] = l - } - } - } - } - } - - return &requestCostStats{ - db: db, - stats: stats, - } +func (s *LesServer) SetBloomBitsIndexer(bloomIndexer *core.ChainIndexer) { + bloomIndexer.AddChildIndexer(s.bloomTrieIndexer) } -func (s *requestCostStats) store() { - s.lock.Lock() - defer s.lock.Unlock() - - statsRlp := make(requestCostStatsRlp, len(reqList)) - for i, code := range reqList { - statsRlp[i].MsgCode = code - statsRlp[i].Data = s.stats[code].toBytes() - } - - if data, err := rlp.EncodeToBytes(statsRlp); err == nil { - s.db.Put(rcStatsKey, data) +// SetClient sets the rpc client and starts running checkpoint contract if it is not yet watched. +func (s *LesServer) SetContractBackend(backend bind.ContractBackend) { + if s.oracle == nil { + return } + s.oracle.start(backend) } -func (s *requestCostStats) getCurrentList() RequestCostList { - s.lock.Lock() - defer s.lock.Unlock() - - list := make(RequestCostList, len(reqList)) - //fmt.Println("RequestCostList") - for idx, code := range reqList { - b, m := s.stats[code].calc() - //fmt.Println(code, s.stats[code].cnt, b/1000000, m/1000000) - if m < 0 { - b += m - m = 0 - } - if b < 0 { - b = 0 +// capacityManagement starts an event handler loop that updates the recharge curve of +// the client manager and adjusts the client pool's size according to the total +// capacity updates coming from the client manager +func (s *LesServer) capacityManagement() { + defer s.wg.Done() + + processCh := make(chan bool, 100) + sub := s.handler.blockchain.SubscribeBlockProcessingEvent(processCh) + defer sub.Unsubscribe() + + totalRechargeCh := make(chan uint64, 100) + totalRecharge := s.costTracker.subscribeTotalRecharge(totalRechargeCh) + + totalCapacityCh := make(chan uint64, 100) + totalCapacity := s.fcManager.SubscribeTotalCapacity(totalCapacityCh) + s.clientPool.setLimits(s.config.LightPeers, totalCapacity) + + var ( + busy bool + freePeers uint64 + blockProcess mclock.AbsTime + ) + updateRecharge := func() { + if busy { + s.servingQueue.setThreads(s.threadsBusy) + s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge, totalRecharge}}) + } else { + s.servingQueue.setThreads(s.threadsIdle) + s.fcManager.SetRechargeCurve(flowcontrol.PieceWiseLinear{{0, 0}, {totalRecharge / 10, totalRecharge}, {totalRecharge, totalRecharge}}) } - - list[idx].MsgCode = code - list[idx].BaseCost = uint64(b * 2) - list[idx].ReqCost = uint64(m * 2) - } - return list -} - -func (s *requestCostStats) update(msgCode, reqCnt, cost uint64) { - s.lock.Lock() - defer s.lock.Unlock() - - c, ok := s.stats[msgCode] - if !ok || reqCnt == 0 { - return } - c.add(float64(reqCnt), float64(cost)) -} - -func (pm *ProtocolManager) blockLoop() { - pm.wg.Add(1) - headCh := make(chan core.ChainHeadEvent, 10) - headSub := pm.blockchain.SubscribeChainHeadEvent(headCh) - go func() { - var lastHead *types.Header - lastBroadcastTd := common.Big0 - for { - select { - case ev := <-headCh: - peers := pm.peers.AllPeers() - if len(peers) > 0 { - header := ev.Block.Header() - hash := header.Hash() - number := header.Number.Uint64() - td := rawdb.ReadTd(pm.chainDb, hash, number) - if td != nil && td.Cmp(lastBroadcastTd) > 0 { - var reorg uint64 - if lastHead != nil { - reorg = lastHead.Number.Uint64() - rawdb.FindCommonAncestor(pm.chainDb, header, lastHead).Number.Uint64() - } - lastHead = header - lastBroadcastTd = td - - log.Debug("Announcing block to peers", "number", number, "hash", hash, "td", td, "reorg", reorg) - - announce := announceData{Hash: hash, Number: number, Td: td, ReorgDepth: reorg} - var ( - signed bool - signedAnnounce announceData - ) - - for _, p := range peers { - switch p.announceType { - - case announceTypeSimple: - select { - case p.announceChn <- announce: - default: - pm.removePeer(p.id) - } - - case announceTypeSigned: - if !signed { - signedAnnounce = announce - signedAnnounce.sign(pm.server.privateKey) - signed = true - } - - select { - case p.announceChn <- signedAnnounce: - default: - pm.removePeer(p.id) - } - } - } - } - } - case <-pm.quitSync: - headSub.Unsubscribe() - pm.wg.Done() - return + updateRecharge() + + for { + select { + case busy = <-processCh: + if busy { + blockProcess = mclock.Now() + } else { + blockProcessingTimer.Update(time.Duration(mclock.Now() - blockProcess)) } + updateRecharge() + case totalRecharge = <-totalRechargeCh: + totalRechargeGauge.Update(int64(totalRecharge)) + updateRecharge() + case totalCapacity = <-totalCapacityCh: + totalCapacityGauge.Update(int64(totalCapacity)) + newFreePeers := totalCapacity / s.freeCapacity + if newFreePeers < freePeers && newFreePeers < uint64(s.config.LightPeers) { + log.Warn("Reduced free peer connections", "from", freePeers, "to", newFreePeers) + } + freePeers = newFreePeers + s.clientPool.setLimits(s.config.LightPeers, totalCapacity) + case <-s.closeCh: + return } - }() + } } diff --git a/les/server_handler.go b/les/server_handler.go new file mode 100644 index 000000000000..16249ef1ba27 --- /dev/null +++ b/les/server_handler.go @@ -0,0 +1,950 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "encoding/binary" + "encoding/json" + "errors" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" +) + +const ( + softResponseLimit = 2 * 1024 * 1024 // Target maximum size of returned blocks, headers or node data. + estHeaderRlpSize = 500 // Approximate size of an RLP encoded block header + ethVersion = 63 // equivalent eth version for the downloader + + MaxHeaderFetch = 192 // Amount of block headers to be fetched per retrieval request + MaxBodyFetch = 32 // Amount of block bodies to be fetched per retrieval request + MaxReceiptFetch = 128 // Amount of transaction receipts to allow fetching per request + MaxCodeFetch = 64 // Amount of contract codes to allow fetching per request + MaxProofsFetch = 64 // Amount of merkle proofs to be fetched per retrieval request + MaxHelperTrieProofsFetch = 64 // Amount of helper tries to be fetched per retrieval request + MaxTxSend = 64 // Amount of transactions to be send per request + MaxTxStatus = 256 // Amount of transactions to queried per request +) + +var ( + errTooManyInvalidRequest = errors.New("too many invalid requests made") + errFullClientPool = errors.New("client pool is full") +) + +// serverHandler is responsible for serving light client and process +// all incoming light requests. +type serverHandler struct { + blockchain *core.BlockChain + chainDb ethdb.Database + txpool *core.TxPool + server *LesServer + + closeCh chan struct{} // Channel used to exit all background routines of handler. + wg sync.WaitGroup // WaitGroup used to track all background routines of handler. + synced func() bool // Callback function used to determine whether local node is synced. + + // Testing fields + addTxsSync bool +} + +func newServerHandler(server *LesServer, blockchain *core.BlockChain, chainDb ethdb.Database, txpool *core.TxPool, synced func() bool) *serverHandler { + handler := &serverHandler{ + server: server, + blockchain: blockchain, + chainDb: chainDb, + txpool: txpool, + closeCh: make(chan struct{}), + synced: synced, + } + return handler +} + +// start starts the server handler. +func (h *serverHandler) start() { + h.wg.Add(1) + go h.broadcastHeaders() +} + +// stop stops the server handler. +func (h *serverHandler) stop() { + close(h.closeCh) + h.wg.Wait() +} + +// runPeer is the p2p protocol run function for the given version. +func (h *serverHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) error { + peer := newPeer(int(version), h.server.config.NetworkId, false, p, newMeteredMsgWriter(rw, int(version))) + h.wg.Add(1) + defer h.wg.Done() + return h.handle(peer) +} + +func (h *serverHandler) handle(p *peer) error { + // Reject light clients if server is not synced. + if !h.synced() { + return p2p.DiscRequested + } + p.Log().Debug("Light Ethereum peer connected", "name", p.Name()) + + // Execute the LES handshake + var ( + head = h.blockchain.CurrentHeader() + hash = head.Hash() + number = head.Number.Uint64() + td = h.blockchain.GetTd(hash, number) + ) + if err := p.Handshake(td, hash, number, h.blockchain.Genesis().Hash(), h.server); err != nil { + p.Log().Debug("Light Ethereum handshake failed", "err", err) + return err + } + defer p.fcClient.Disconnect() + + // Disconnect the inbound peer if it's rejected by clientPool + if !h.server.clientPool.connect(p, 0) { + p.Log().Debug("Light Ethereum peer registration failed", "err", errFullClientPool) + return errFullClientPool + } + // Register the peer locally + if err := h.server.peers.Register(p); err != nil { + h.server.clientPool.disconnect(p) + p.Log().Error("Light Ethereum peer registration failed", "err", err) + return err + } + clientConnectionGauge.Update(int64(h.server.peers.Len())) + + var wg sync.WaitGroup // Wait group used to track all in-flight task routines. + + connectedAt := mclock.Now() + defer func() { + wg.Wait() // Ensure all background task routines have exited. + h.server.peers.Unregister(p.id) + h.server.clientPool.disconnect(p) + clientConnectionGauge.Update(int64(h.server.peers.Len())) + connectionTimer.Update(time.Duration(mclock.Now() - connectedAt)) + }() + + // Spawn a main loop to handle all incoming messages. + for { + select { + case err := <-p.errCh: + p.Log().Debug("Failed to send light ethereum response", "err", err) + return err + default: + } + if err := h.handleMsg(p, &wg); err != nil { + p.Log().Debug("Light Ethereum message handling failed", "err", err) + return err + } + } +} + +// handleMsg is invoked whenever an inbound message is received from a remote +// peer. The remote connection is torn down upon returning any error. +func (h *serverHandler) handleMsg(p *peer, wg *sync.WaitGroup) error { + // Read the next message from the remote peer, and ensure it's fully consumed + msg, err := p.rw.ReadMsg() + if err != nil { + return err + } + p.Log().Trace("Light Ethereum message arrived", "code", msg.Code, "bytes", msg.Size) + + // Discard large message which exceeds the limitation. + if msg.Size > ProtocolMaxMsgSize { + clientErrorMeter.Mark(1) + return errResp(ErrMsgTooLarge, "%v > %v", msg.Size, ProtocolMaxMsgSize) + } + defer msg.Discard() + + var ( + maxCost uint64 + task *servingTask + ) + p.responseCount++ + responseCount := p.responseCount + // accept returns an indicator whether the request can be served. + // If so, deduct the max cost from the flow control buffer. + accept := func(reqID, reqCnt, maxCnt uint64) bool { + // Short circuit if the peer is already frozen or the request is invalid. + inSizeCost := h.server.costTracker.realCost(0, msg.Size, 0) + if p.isFrozen() || reqCnt == 0 || reqCnt > maxCnt { + p.fcClient.OneTimeCost(inSizeCost) + return false + } + // Prepaid max cost units before request been serving. + maxCost = p.fcCosts.getMaxCost(msg.Code, reqCnt) + accepted, bufShort, priority := p.fcClient.AcceptRequest(reqID, responseCount, maxCost) + if !accepted { + p.freezeClient() + p.Log().Error("Request came too early", "remaining", common.PrettyDuration(time.Duration(bufShort*1000000/p.fcParams.MinRecharge))) + p.fcClient.OneTimeCost(inSizeCost) + return false + } + // Create a multi-stage task, estimate the time it takes for the task to + // execute, and cache it in the request service queue. + factor := h.server.costTracker.globalFactor() + if factor < 0.001 { + factor = 1 + p.Log().Error("Invalid global cost factor", "factor", factor) + } + maxTime := uint64(float64(maxCost) / factor) + task = h.server.servingQueue.newTask(p, maxTime, priority) + if task.start() { + return true + } + p.fcClient.RequestProcessed(reqID, responseCount, maxCost, inSizeCost) + return false + } + // sendResponse sends back the response and updates the flow control statistic. + sendResponse := func(reqID, amount uint64, reply *reply, servingTime uint64) { + p.responseLock.Lock() + defer p.responseLock.Unlock() + + // Short circuit if the client is already frozen. + if p.isFrozen() { + realCost := h.server.costTracker.realCost(servingTime, msg.Size, 0) + p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) + return + } + // Positive correction buffer value with real cost. + var replySize uint32 + if reply != nil { + replySize = reply.size() + } + var realCost uint64 + if h.server.costTracker.testing { + realCost = maxCost // Assign a fake cost for testing purpose + } else { + realCost = h.server.costTracker.realCost(servingTime, msg.Size, replySize) + } + bv := p.fcClient.RequestProcessed(reqID, responseCount, maxCost, realCost) + if amount != 0 { + // Feed cost tracker request serving statistic. + h.server.costTracker.updateStats(msg.Code, amount, servingTime, realCost) + // Reduce priority "balance" for the specific peer. + h.server.clientPool.requestCost(p, realCost) + } + if reply != nil { + p.queueSend(func() { + if err := reply.send(bv); err != nil { + select { + case p.errCh <- err: + default: + } + } + }) + } + } + switch msg.Code { + case GetBlockHeadersMsg: + p.Log().Trace("Received block header request") + if metrics.EnabledExpensive { + miscInHeaderPacketsMeter.Mark(1) + miscInHeaderTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeHeaderTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Query getBlockHeadersData + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "%v: %v", msg, err) + } + query := req.Query + if accept(req.ReqID, query.Amount, MaxHeaderFetch) { + wg.Add(1) + go func() { + defer wg.Done() + hashMode := query.Origin.Hash != (common.Hash{}) + first := true + maxNonCanonical := uint64(100) + + // Gather headers until the fetch or network limits is reached + var ( + bytes common.StorageSize + headers []*types.Header + unknown bool + ) + for !unknown && len(headers) < int(query.Amount) && bytes < softResponseLimit { + if !first && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + // Retrieve the next header satisfying the query + var origin *types.Header + if hashMode { + if first { + origin = h.blockchain.GetHeaderByHash(query.Origin.Hash) + if origin != nil { + query.Origin.Number = origin.Number.Uint64() + } + } else { + origin = h.blockchain.GetHeader(query.Origin.Hash, query.Origin.Number) + } + } else { + origin = h.blockchain.GetHeaderByNumber(query.Origin.Number) + } + if origin == nil { + atomic.AddUint32(&p.invalidCount, 1) + break + } + headers = append(headers, origin) + bytes += estHeaderRlpSize + + // Advance to the next header of the query + switch { + case hashMode && query.Reverse: + // Hash based traversal towards the genesis block + ancestor := query.Skip + 1 + if ancestor == 0 { + unknown = true + } else { + query.Origin.Hash, query.Origin.Number = h.blockchain.GetAncestor(query.Origin.Hash, query.Origin.Number, ancestor, &maxNonCanonical) + unknown = query.Origin.Hash == common.Hash{} + } + case hashMode && !query.Reverse: + // Hash based traversal towards the leaf block + var ( + current = origin.Number.Uint64() + next = current + query.Skip + 1 + ) + if next <= current { + infos, _ := json.MarshalIndent(p.Peer.Info(), "", " ") + p.Log().Warn("GetBlockHeaders skip overflow attack", "current", current, "skip", query.Skip, "next", next, "attacker", infos) + unknown = true + } else { + if header := h.blockchain.GetHeaderByNumber(next); header != nil { + nextHash := header.Hash() + expOldHash, _ := h.blockchain.GetAncestor(nextHash, next, query.Skip+1, &maxNonCanonical) + if expOldHash == query.Origin.Hash { + query.Origin.Hash, query.Origin.Number = nextHash, next + } else { + unknown = true + } + } else { + unknown = true + } + } + case query.Reverse: + // Number based traversal towards the genesis block + if query.Origin.Number >= query.Skip+1 { + query.Origin.Number -= query.Skip + 1 + } else { + unknown = true + } + + case !query.Reverse: + // Number based traversal towards the leaf block + query.Origin.Number += query.Skip + 1 + } + first = false + } + reply := p.ReplyBlockHeaders(req.ReqID, headers) + sendResponse(req.ReqID, query.Amount, p.ReplyBlockHeaders(req.ReqID, headers), task.done()) + if metrics.EnabledExpensive { + miscOutHeaderPacketsMeter.Mark(1) + miscOutHeaderTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetBlockBodiesMsg: + p.Log().Trace("Received block bodies request") + if metrics.EnabledExpensive { + miscInBodyPacketsMeter.Mark(1) + miscInBodyTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeBodyTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Hashes []common.Hash + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + var ( + bytes int + bodies []rlp.RawValue + ) + reqCnt := len(req.Hashes) + if accept(req.ReqID, uint64(reqCnt), MaxBodyFetch) { + wg.Add(1) + go func() { + defer wg.Done() + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + if bytes >= softResponseLimit { + break + } + body := h.blockchain.GetBodyRLP(hash) + if body == nil { + atomic.AddUint32(&p.invalidCount, 1) + continue + } + bodies = append(bodies, body) + bytes += len(body) + } + reply := p.ReplyBlockBodiesRLP(req.ReqID, bodies) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutBodyPacketsMeter.Mark(1) + miscOutBodyTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetCodeMsg: + p.Log().Trace("Received code request") + if metrics.EnabledExpensive { + miscInCodePacketsMeter.Mark(1) + miscInCodeTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeCodeTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Reqs []CodeReq + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + var ( + bytes int + data [][]byte + ) + reqCnt := len(req.Reqs) + if accept(req.ReqID, uint64(reqCnt), MaxCodeFetch) { + wg.Add(1) + go func() { + defer wg.Done() + for i, request := range req.Reqs { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + // Look up the root hash belonging to the request + header := h.blockchain.GetHeaderByHash(request.BHash) + if header == nil { + p.Log().Warn("Failed to retrieve associate header for code", "hash", request.BHash) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + // Refuse to search stale state data in the database since looking for + // a non-exist key is kind of expensive. + local := h.blockchain.CurrentHeader().Number.Uint64() + if !h.server.archiveMode && header.Number.Uint64()+core.TriesInMemory <= local { + p.Log().Debug("Reject stale code request", "number", header.Number.Uint64(), "head", local) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + triedb := h.blockchain.StateCache().TrieDB() + + account, err := h.getAccount(triedb, header.Root, common.BytesToHash(request.AccKey)) + if err != nil { + p.Log().Warn("Failed to retrieve account for code", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(request.AccKey), "err", err) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + code, err := triedb.Node(common.BytesToHash(account.CodeHash)) + if err != nil { + p.Log().Warn("Failed to retrieve account code", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(request.AccKey), "codehash", common.BytesToHash(account.CodeHash), "err", err) + continue + } + // Accumulate the code and abort if enough data was retrieved + data = append(data, code) + if bytes += len(code); bytes >= softResponseLimit { + break + } + } + reply := p.ReplyCode(req.ReqID, data) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutCodePacketsMeter.Mark(1) + miscOutCodeTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetReceiptsMsg: + p.Log().Trace("Received receipts request") + if metrics.EnabledExpensive { + miscInReceiptPacketsMeter.Mark(1) + miscInReceiptTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeReceiptTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Hashes []common.Hash + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + var ( + bytes int + receipts []rlp.RawValue + ) + reqCnt := len(req.Hashes) + if accept(req.ReqID, uint64(reqCnt), MaxReceiptFetch) { + wg.Add(1) + go func() { + defer wg.Done() + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + if bytes >= softResponseLimit { + break + } + // Retrieve the requested block's receipts, skipping if unknown to us + results := h.blockchain.GetReceiptsByHash(hash) + if results == nil { + if header := h.blockchain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { + atomic.AddUint32(&p.invalidCount, 1) + continue + } + } + // If known, encode and queue for response packet + if encoded, err := rlp.EncodeToBytes(results); err != nil { + log.Error("Failed to encode receipt", "err", err) + } else { + receipts = append(receipts, encoded) + bytes += len(encoded) + } + } + reply := p.ReplyReceiptsRLP(req.ReqID, receipts) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutReceiptPacketsMeter.Mark(1) + miscOutReceiptTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetProofsV2Msg: + p.Log().Trace("Received les/2 proofs request") + if metrics.EnabledExpensive { + miscInTrieProofPacketsMeter.Mark(1) + miscInTrieProofTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeTrieProofTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Reqs []ProofReq + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + // Gather state data until the fetch or network limits is reached + var ( + lastBHash common.Hash + root common.Hash + ) + reqCnt := len(req.Reqs) + if accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) { + wg.Add(1) + go func() { + defer wg.Done() + nodes := light.NewNodeSet() + + for i, request := range req.Reqs { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + // Look up the root hash belonging to the request + var ( + header *types.Header + trie state.Trie + ) + if request.BHash != lastBHash { + root, lastBHash = common.Hash{}, request.BHash + + if header = h.blockchain.GetHeaderByHash(request.BHash); header == nil { + p.Log().Warn("Failed to retrieve header for proof", "hash", request.BHash) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + // Refuse to search stale state data in the database since looking for + // a non-exist key is kind of expensive. + local := h.blockchain.CurrentHeader().Number.Uint64() + if !h.server.archiveMode && header.Number.Uint64()+core.TriesInMemory <= local { + p.Log().Debug("Reject stale trie request", "number", header.Number.Uint64(), "head", local) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + root = header.Root + } + // If a header lookup failed (non existent), ignore subsequent requests for the same header + if root == (common.Hash{}) { + atomic.AddUint32(&p.invalidCount, 1) + continue + } + // Open the account or storage trie for the request + statedb := h.blockchain.StateCache() + + switch len(request.AccKey) { + case 0: + // No account key specified, open an account trie + trie, err = statedb.OpenTrie(root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "root", root, "err", err) + continue + } + default: + // Account key specified, open a storage trie + account, err := h.getAccount(statedb.TrieDB(), root, common.BytesToHash(request.AccKey)) + if err != nil { + p.Log().Warn("Failed to retrieve account for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(request.AccKey), "err", err) + atomic.AddUint32(&p.invalidCount, 1) + continue + } + trie, err = statedb.OpenStorageTrie(common.BytesToHash(request.AccKey), account.Root) + if trie == nil || err != nil { + p.Log().Warn("Failed to open storage trie for proof", "block", header.Number, "hash", header.Hash(), "account", common.BytesToHash(request.AccKey), "root", account.Root, "err", err) + continue + } + } + // Prove the user's request from the account or stroage trie + if err := trie.Prove(request.Key, request.FromLevel, nodes); err != nil { + p.Log().Warn("Failed to prove state request", "block", header.Number, "hash", header.Hash(), "err", err) + continue + } + if nodes.DataSize() >= softResponseLimit { + break + } + } + reply := p.ReplyProofsV2(req.ReqID, nodes.NodeList()) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutTrieProofPacketsMeter.Mark(1) + miscOutTrieProofTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetHelperTrieProofsMsg: + p.Log().Trace("Received helper trie proof request") + if metrics.EnabledExpensive { + miscInHelperTriePacketsMeter.Mark(1) + miscInHelperTrieTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeHelperTrieTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Reqs []HelperTrieReq + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + // Gather state data until the fetch or network limits is reached + var ( + auxBytes int + auxData [][]byte + ) + reqCnt := len(req.Reqs) + if accept(req.ReqID, uint64(reqCnt), MaxHelperTrieProofsFetch) { + wg.Add(1) + go func() { + defer wg.Done() + var ( + lastIdx uint64 + lastType uint + root common.Hash + auxTrie *trie.Trie + ) + nodes := light.NewNodeSet() + for i, request := range req.Reqs { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + if auxTrie == nil || request.Type != lastType || request.TrieIdx != lastIdx { + auxTrie, lastType, lastIdx = nil, request.Type, request.TrieIdx + + var prefix string + if root, prefix = h.getHelperTrie(request.Type, request.TrieIdx); root != (common.Hash{}) { + auxTrie, _ = trie.New(root, trie.NewDatabase(rawdb.NewTable(h.chainDb, prefix))) + } + } + if request.AuxReq == auxRoot { + var data []byte + if root != (common.Hash{}) { + data = root[:] + } + auxData = append(auxData, data) + auxBytes += len(data) + } else { + if auxTrie != nil { + auxTrie.Prove(request.Key, request.FromLevel, nodes) + } + if request.AuxReq != 0 { + data := h.getAuxiliaryHeaders(request) + auxData = append(auxData, data) + auxBytes += len(data) + } + } + if nodes.DataSize()+auxBytes >= softResponseLimit { + break + } + } + reply := p.ReplyHelperTrieProofs(req.ReqID, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutHelperTriePacketsMeter.Mark(1) + miscOutHelperTrieTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case SendTxV2Msg: + p.Log().Trace("Received new transactions") + if metrics.EnabledExpensive { + miscInTxsPacketsMeter.Mark(1) + miscInTxsTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeTxTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Txs []*types.Transaction + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + reqCnt := len(req.Txs) + if accept(req.ReqID, uint64(reqCnt), MaxTxSend) { + wg.Add(1) + go func() { + defer wg.Done() + stats := make([]light.TxStatus, len(req.Txs)) + for i, tx := range req.Txs { + if i != 0 && !task.waitOrStop() { + return + } + hash := tx.Hash() + stats[i] = h.txStatus(hash) + if stats[i].Status == core.TxStatusUnknown { + addFn := h.txpool.AddRemotes + // Add txs synchronously for testing purpose + if h.addTxsSync { + addFn = h.txpool.AddRemotesSync + } + if errs := addFn([]*types.Transaction{tx}); errs[0] != nil { + stats[i].Error = errs[0].Error() + continue + } + stats[i] = h.txStatus(hash) + } + } + reply := p.ReplyTxStatus(req.ReqID, stats) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutTxsPacketsMeter.Mark(1) + miscOutTxsTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + case GetTxStatusMsg: + p.Log().Trace("Received transaction status query request") + if metrics.EnabledExpensive { + miscInTxStatusPacketsMeter.Mark(1) + miscInTxStatusTrafficMeter.Mark(int64(msg.Size)) + defer func(start time.Time) { miscServingTimeTxStatusTimer.UpdateSince(start) }(time.Now()) + } + var req struct { + ReqID uint64 + Hashes []common.Hash + } + if err := msg.Decode(&req); err != nil { + clientErrorMeter.Mark(1) + return errResp(ErrDecode, "msg %v: %v", msg, err) + } + reqCnt := len(req.Hashes) + if accept(req.ReqID, uint64(reqCnt), MaxTxStatus) { + wg.Add(1) + go func() { + defer wg.Done() + stats := make([]light.TxStatus, len(req.Hashes)) + for i, hash := range req.Hashes { + if i != 0 && !task.waitOrStop() { + sendResponse(req.ReqID, 0, nil, task.servingTime) + return + } + stats[i] = h.txStatus(hash) + } + reply := p.ReplyTxStatus(req.ReqID, stats) + sendResponse(req.ReqID, uint64(reqCnt), reply, task.done()) + if metrics.EnabledExpensive { + miscOutTxStatusPacketsMeter.Mark(1) + miscOutTxStatusTrafficMeter.Mark(int64(reply.size())) + } + }() + } + + default: + p.Log().Trace("Received invalid message", "code", msg.Code) + clientErrorMeter.Mark(1) + return errResp(ErrInvalidMsgCode, "%v", msg.Code) + } + // If the client has made too much invalid request(e.g. request a non-exist data), + // reject them to prevent SPAM attack. + if atomic.LoadUint32(&p.invalidCount) > maxRequestErrors { + clientErrorMeter.Mark(1) + return errTooManyInvalidRequest + } + return nil +} + +// getAccount retrieves an account from the state based on root. +func (h *serverHandler) getAccount(triedb *trie.Database, root, hash common.Hash) (state.Account, error) { + trie, err := trie.New(root, triedb) + if err != nil { + return state.Account{}, err + } + blob, err := trie.TryGet(hash[:]) + if err != nil { + return state.Account{}, err + } + var account state.Account + if err = rlp.DecodeBytes(blob, &account); err != nil { + return state.Account{}, err + } + return account, nil +} + +// getHelperTrie returns the post-processed trie root for the given trie ID and section index +func (h *serverHandler) getHelperTrie(typ uint, index uint64) (common.Hash, string) { + switch typ { + case htCanonical: + sectionHead := rawdb.ReadCanonicalHash(h.chainDb, (index+1)*h.server.iConfig.ChtSize-1) + return light.GetChtRoot(h.chainDb, index, sectionHead), light.ChtTablePrefix + case htBloomBits: + sectionHead := rawdb.ReadCanonicalHash(h.chainDb, (index+1)*h.server.iConfig.BloomTrieSize-1) + return light.GetBloomTrieRoot(h.chainDb, index, sectionHead), light.BloomTrieTablePrefix + } + return common.Hash{}, "" +} + +// getAuxiliaryHeaders returns requested auxiliary headers for the CHT request. +func (h *serverHandler) getAuxiliaryHeaders(req HelperTrieReq) []byte { + if req.Type == htCanonical && req.AuxReq == auxHeader && len(req.Key) == 8 { + blockNum := binary.BigEndian.Uint64(req.Key) + hash := rawdb.ReadCanonicalHash(h.chainDb, blockNum) + return rawdb.ReadHeaderRLP(h.chainDb, hash, blockNum) + } + return nil +} + +// txStatus returns the status of a specified transaction. +func (h *serverHandler) txStatus(hash common.Hash) light.TxStatus { + var stat light.TxStatus + // Looking the transaction in txpool first. + stat.Status = h.txpool.Status([]common.Hash{hash})[0] + + // If the transaction is unknown to the pool, try looking it up locally. + if stat.Status == core.TxStatusUnknown { + lookup := h.blockchain.GetTransactionLookup(hash) + if lookup != nil { + stat.Status = core.TxStatusIncluded + stat.Lookup = lookup + } + } + return stat +} + +// broadcastHeaders broadcasts new block information to all connected light +// clients. According to the agreement between client and server, server should +// only broadcast new announcement if the total difficulty is higher than the +// last one. Besides server will add the signature if client requires. +func (h *serverHandler) broadcastHeaders() { + defer h.wg.Done() + + headCh := make(chan core.ChainHeadEvent, 10) + headSub := h.blockchain.SubscribeChainHeadEvent(headCh) + defer headSub.Unsubscribe() + + var ( + lastHead *types.Header + lastTd = common.Big0 + ) + for { + select { + case ev := <-headCh: + peers := h.server.peers.AllPeers() + if len(peers) == 0 { + continue + } + header := ev.Block.Header() + hash, number := header.Hash(), header.Number.Uint64() + td := h.blockchain.GetTd(hash, number) + if td == nil || td.Cmp(lastTd) <= 0 { + continue + } + var reorg uint64 + if lastHead != nil { + reorg = lastHead.Number.Uint64() - rawdb.FindCommonAncestor(h.chainDb, header, lastHead).Number.Uint64() + } + lastHead, lastTd = header, td + + log.Debug("Announcing block to peers", "number", number, "hash", hash, "td", td, "reorg", reorg) + var ( + signed bool + signedAnnounce announceData + ) + announce := announceData{Hash: hash, Number: number, Td: td, ReorgDepth: reorg} + for _, p := range peers { + p := p + switch p.announceType { + case announceTypeSimple: + p.queueSend(func() { p.SendAnnounce(announce) }) + case announceTypeSigned: + if !signed { + signedAnnounce = announce + signedAnnounce.sign(h.server.privateKey) + signed = true + } + p.queueSend(func() { p.SendAnnounce(signedAnnounce) }) + } + } + case <-h.closeCh: + return + } + } +} diff --git a/les/serverpool.go b/les/serverpool.go index 52b54b371fec..37621dc63481 100644 --- a/les/serverpool.go +++ b/les/serverpool.go @@ -14,7 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package les implements the Light Ethereum Subprotocol. package les import ( @@ -116,8 +115,6 @@ type serverPool struct { db ethdb.Database dbKey []byte server *p2p.Server - quit chan struct{} - wg *sync.WaitGroup connWg sync.WaitGroup topic discv5.Topic @@ -126,26 +123,27 @@ type serverPool struct { discNodes chan *enode.Node discLookups chan bool + trustedNodes map[enode.ID]*enode.Node entries map[enode.ID]*poolEntry timeout, enableRetry chan *poolEntry adjustStats chan poolStatAdjust - connCh chan *connReq - disconnCh chan *disconnReq - registerCh chan *registerReq - knownQueue, newQueue poolEntryQueue knownSelect, newSelect *weightedRandomSelect knownSelected, newSelected int fastDiscover bool + connCh chan *connReq + disconnCh chan *disconnReq + registerCh chan *registerReq + + closeCh chan struct{} + wg sync.WaitGroup } // newServerPool creates a new serverPool instance -func newServerPool(db ethdb.Database, quit chan struct{}, wg *sync.WaitGroup) *serverPool { +func newServerPool(db ethdb.Database, ulcServers []string) *serverPool { pool := &serverPool{ db: db, - quit: quit, - wg: wg, entries: make(map[enode.ID]*poolEntry), timeout: make(chan *poolEntry, 1), adjustStats: make(chan poolStatAdjust, 100), @@ -153,10 +151,13 @@ func newServerPool(db ethdb.Database, quit chan struct{}, wg *sync.WaitGroup) *s connCh: make(chan *connReq), disconnCh: make(chan *disconnReq), registerCh: make(chan *registerReq), + closeCh: make(chan struct{}), knownSelect: newWeightedRandomSelect(), newSelect: newWeightedRandomSelect(), fastDiscover: true, + trustedNodes: parseTrustedNodes(ulcServers), } + pool.knownQueue = newPoolEntryQueue(maxKnownEntries, pool.removeEntry) pool.newQueue = newPoolEntryQueue(maxNewEntries, pool.removeEntry) return pool @@ -166,8 +167,8 @@ func (pool *serverPool) start(server *p2p.Server, topic discv5.Topic) { pool.server = server pool.topic = topic pool.dbKey = append([]byte("serverPool/"), []byte(topic)...) - pool.wg.Add(1) pool.loadNodes() + pool.connectToTrustedNodes() if pool.server.DiscV5 != nil { pool.discSetPeriod = make(chan time.Duration, 1) @@ -176,9 +177,15 @@ func (pool *serverPool) start(server *p2p.Server, topic discv5.Topic) { go pool.discoverNodes() } pool.checkDial() + pool.wg.Add(1) go pool.eventLoop() } +func (pool *serverPool) stop() { + close(pool.closeCh) + pool.wg.Wait() +} + // discoverNodes wraps SearchTopic, converting result nodes to enode.Node. func (pool *serverPool) discoverNodes() { ch := make(chan *discv5.Node) @@ -205,7 +212,7 @@ func (pool *serverPool) connect(p *peer, node *enode.Node) *poolEntry { req := &connReq{p: p, node: node, result: make(chan *poolEntry, 1)} select { case pool.connCh <- req: - case <-pool.quit: + case <-pool.closeCh: return nil } return <-req.result @@ -217,7 +224,7 @@ func (pool *serverPool) registered(entry *poolEntry) { req := ®isterReq{entry: entry, done: make(chan struct{})} select { case pool.registerCh <- req: - case <-pool.quit: + case <-pool.closeCh: return } <-req.done @@ -229,7 +236,7 @@ func (pool *serverPool) registered(entry *poolEntry) { func (pool *serverPool) disconnect(entry *poolEntry) { stopped := false select { - case <-pool.quit: + case <-pool.closeCh: stopped = true default: } @@ -276,6 +283,7 @@ func (pool *serverPool) adjustResponseTime(entry *poolEntry, time time.Duration, // eventLoop handles pool events and mutex locking for all internal functions func (pool *serverPool) eventLoop() { + defer pool.wg.Done() lookupCnt := 0 var convTime mclock.AbsTime if pool.discSetPeriod != nil { @@ -337,8 +345,10 @@ func (pool *serverPool) eventLoop() { } case node := <-pool.discNodes: - entry := pool.findOrNewNode(node) - pool.updateCheckDial(entry) + if pool.trustedNodes[node.ID()] == nil { + entry := pool.findOrNewNode(node) + pool.updateCheckDial(entry) + } case conv := <-pool.discLookups: if conv { @@ -355,31 +365,39 @@ func (pool *serverPool) eventLoop() { } case req := <-pool.connCh: - // Handle peer connection requests. - entry := pool.entries[req.p.ID()] - if entry == nil { - entry = pool.findOrNewNode(req.node) - } - if entry.state == psConnected || entry.state == psRegistered { - req.result <- nil - continue - } - pool.connWg.Add(1) - entry.peer = req.p - entry.state = psConnected - addr := &poolEntryAddress{ - ip: req.node.IP(), - port: uint16(req.node.TCP()), - lastSeen: mclock.Now(), + if pool.trustedNodes[req.p.ID()] != nil { + // ignore trusted nodes + req.result <- &poolEntry{trusted: true} + } else { + // Handle peer connection requests. + entry := pool.entries[req.p.ID()] + if entry == nil { + entry = pool.findOrNewNode(req.node) + } + if entry.state == psConnected || entry.state == psRegistered { + req.result <- nil + continue + } + pool.connWg.Add(1) + entry.peer = req.p + entry.state = psConnected + addr := &poolEntryAddress{ + ip: req.node.IP(), + port: uint16(req.node.TCP()), + lastSeen: mclock.Now(), + } + entry.lastConnected = addr + entry.addr = make(map[string]*poolEntryAddress) + entry.addr[addr.strKey()] = addr + entry.addrSelect = *newWeightedRandomSelect() + entry.addrSelect.update(addr) + req.result <- entry } - entry.lastConnected = addr - entry.addr = make(map[string]*poolEntryAddress) - entry.addr[addr.strKey()] = addr - entry.addrSelect = *newWeightedRandomSelect() - entry.addrSelect.update(addr) - req.result <- entry case req := <-pool.registerCh: + if req.entry.trusted { + continue + } // Handle peer registration requests. entry := req.entry entry.state = psRegistered @@ -393,10 +411,13 @@ func (pool *serverPool) eventLoop() { close(req.done) case req := <-pool.disconnCh: + if req.entry.trusted { + continue + } // Handle peer disconnection requests. disconnect(req, req.stopped) - case <-pool.quit: + case <-pool.closeCh: if pool.discSetPeriod != nil { close(pool.discSetPeriod) } @@ -412,7 +433,6 @@ func (pool *serverPool) eventLoop() { disconnect(req, true) } pool.saveNodes() - pool.wg.Done() return } } @@ -470,9 +490,40 @@ func (pool *serverPool) loadNodes() { "response", fmt.Sprintf("%v/%v", time.Duration(e.responseStats.avg), e.responseStats.weight), "timeout", fmt.Sprintf("%v/%v", e.timeoutStats.avg, e.timeoutStats.weight)) pool.entries[e.node.ID()] = e - pool.knownQueue.setLatest(e) - pool.knownSelect.update((*knownEntry)(e)) + if pool.trustedNodes[e.node.ID()] == nil { + pool.knownQueue.setLatest(e) + pool.knownSelect.update((*knownEntry)(e)) + } + } +} + +// connectToTrustedNodes adds trusted server nodes as static trusted peers. +// +// Note: trusted nodes are not handled by the server pool logic, they are not +// added to either the known or new selection pools. They are connected/reconnected +// by p2p.Server whenever possible. +func (pool *serverPool) connectToTrustedNodes() { + //connect to trusted nodes + for _, node := range pool.trustedNodes { + pool.server.AddTrustedPeer(node) + pool.server.AddPeer(node) + log.Debug("Added trusted node", "id", node.ID().String()) + } +} + +// parseTrustedNodes returns valid and parsed enodes +func parseTrustedNodes(trustedNodes []string) map[enode.ID]*enode.Node { + nodes := make(map[enode.ID]*enode.Node) + + for _, node := range trustedNodes { + node, err := enode.Parse(enode.ValidSchemes, node) + if err != nil { + log.Warn("Trusted node URL invalid", "enode", node, "err", err) + continue + } + nodes[node.ID()] = node } + return nodes } // saveNodes saves known nodes and their statistics into the database. Nodes are @@ -509,10 +560,10 @@ func (pool *serverPool) setRetryDial(entry *poolEntry) { entry.delayedRetry = true go func() { select { - case <-pool.quit: + case <-pool.closeCh: case <-time.After(delay): select { - case <-pool.quit: + case <-pool.closeCh: case pool.enableRetry <- entry: } } @@ -578,10 +629,10 @@ func (pool *serverPool) dial(entry *poolEntry, knownSelected bool) { go func() { pool.server.AddPeer(entry.node) select { - case <-pool.quit: + case <-pool.closeCh: case <-time.After(dialTimeout): select { - case <-pool.quit: + case <-pool.closeCh: case pool.timeout <- entry: } } @@ -622,14 +673,14 @@ type poolEntry struct { lastConnected, dialed *poolEntryAddress addrSelect weightedRandomSelect - lastDiscovered mclock.AbsTime - known, knownSelected bool - connectStats, delayStats poolStats - responseStats, timeoutStats poolStats - state int - regTime mclock.AbsTime - queueIdx int - removed bool + lastDiscovered mclock.AbsTime + known, knownSelected, trusted bool + connectStats, delayStats poolStats + responseStats, timeoutStats poolStats + state int + regTime mclock.AbsTime + queueIdx int + removed bool delayedRetry bool shortRetry int diff --git a/les/servingqueue.go b/les/servingqueue.go new file mode 100644 index 000000000000..8842cf9e9d55 --- /dev/null +++ b/les/servingqueue.go @@ -0,0 +1,378 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "sort" + "sync" + "sync/atomic" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/common/prque" +) + +// servingQueue allows running tasks in a limited number of threads and puts the +// waiting tasks in a priority queue +type servingQueue struct { + recentTime, queuedTime, servingTimeDiff uint64 + burstLimit, burstDropLimit uint64 + burstDecRate float64 + lastUpdate mclock.AbsTime + + queueAddCh, queueBestCh chan *servingTask + stopThreadCh, quit chan struct{} + setThreadsCh chan int + + wg sync.WaitGroup + threadCount int // number of currently running threads + queue *prque.Prque // priority queue for waiting or suspended tasks + best *servingTask // the highest priority task (not included in the queue) + suspendBias int64 // priority bias against suspending an already running task +} + +// servingTask represents a request serving task. Tasks can be implemented to +// run in multiple steps, allowing the serving queue to suspend execution between +// steps if higher priority tasks are entered. The creator of the task should +// set the following fields: +// +// - priority: greater value means higher priority; values can wrap around the int64 range +// - run: execute a single step; return true if finished +// - after: executed after run finishes or returns an error, receives the total serving time +type servingTask struct { + sq *servingQueue + servingTime, timeAdded, maxTime, expTime uint64 + peer *peer + priority int64 + biasAdded bool + token runToken + tokenCh chan runToken +} + +// runToken received by servingTask.start allows the task to run. Closing the +// channel by servingTask.stop signals the thread controller to allow a new task +// to start running. +type runToken chan struct{} + +// start blocks until the task can start and returns true if it is allowed to run. +// Returning false means that the task should be cancelled. +func (t *servingTask) start() bool { + if t.peer.isFrozen() { + return false + } + t.tokenCh = make(chan runToken, 1) + select { + case t.sq.queueAddCh <- t: + case <-t.sq.quit: + return false + } + select { + case t.token = <-t.tokenCh: + case <-t.sq.quit: + return false + } + if t.token == nil { + return false + } + t.servingTime -= uint64(mclock.Now()) + return true +} + +// done signals the thread controller about the task being finished and returns +// the total serving time of the task in nanoseconds. +func (t *servingTask) done() uint64 { + t.servingTime += uint64(mclock.Now()) + close(t.token) + diff := t.servingTime - t.timeAdded + t.timeAdded = t.servingTime + if t.expTime > diff { + t.expTime -= diff + atomic.AddUint64(&t.sq.servingTimeDiff, t.expTime) + } else { + t.expTime = 0 + } + return t.servingTime +} + +// waitOrStop can be called during the execution of the task. It blocks if there +// is a higher priority task waiting (a bias is applied in favor of the currently +// running task). Returning true means that the execution can be resumed. False +// means the task should be cancelled. +func (t *servingTask) waitOrStop() bool { + t.done() + if !t.biasAdded { + t.priority += t.sq.suspendBias + t.biasAdded = true + } + return t.start() +} + +// newServingQueue returns a new servingQueue +func newServingQueue(suspendBias int64, utilTarget float64) *servingQueue { + sq := &servingQueue{ + queue: prque.New(nil), + suspendBias: suspendBias, + queueAddCh: make(chan *servingTask, 100), + queueBestCh: make(chan *servingTask), + stopThreadCh: make(chan struct{}), + quit: make(chan struct{}), + setThreadsCh: make(chan int, 10), + burstLimit: uint64(utilTarget * bufLimitRatio * 1200000), + burstDropLimit: uint64(utilTarget * bufLimitRatio * 1000000), + burstDecRate: utilTarget, + lastUpdate: mclock.Now(), + } + sq.wg.Add(2) + go sq.queueLoop() + go sq.threadCountLoop() + return sq +} + +// newTask creates a new task with the given priority +func (sq *servingQueue) newTask(peer *peer, maxTime uint64, priority int64) *servingTask { + return &servingTask{ + sq: sq, + peer: peer, + maxTime: maxTime, + expTime: maxTime, + priority: priority, + } +} + +// threadController is started in multiple goroutines and controls the execution +// of tasks. The number of active thread controllers equals the allowed number of +// concurrently running threads. It tries to fetch the highest priority queued +// task first. If there are no queued tasks waiting then it can directly catch +// run tokens from the token channel and allow the corresponding tasks to run +// without entering the priority queue. +func (sq *servingQueue) threadController() { + for { + token := make(runToken) + select { + case best := <-sq.queueBestCh: + best.tokenCh <- token + case <-sq.stopThreadCh: + sq.wg.Done() + return + case <-sq.quit: + sq.wg.Done() + return + } + <-token + select { + case <-sq.stopThreadCh: + sq.wg.Done() + return + case <-sq.quit: + sq.wg.Done() + return + default: + } + } +} + +type ( + // peerTasks lists the tasks received from a given peer when selecting peers to freeze + peerTasks struct { + peer *peer + list []*servingTask + sumTime uint64 + priority float64 + } + // peerList is a sortable list of peerTasks + peerList []*peerTasks +) + +func (l peerList) Len() int { + return len(l) +} + +func (l peerList) Less(i, j int) bool { + return l[i].priority < l[j].priority +} + +func (l peerList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + +// freezePeers selects the peers with the worst priority queued tasks and freezes +// them until burstTime goes under burstDropLimit or all peers are frozen +func (sq *servingQueue) freezePeers() { + peerMap := make(map[*peer]*peerTasks) + var peerList peerList + if sq.best != nil { + sq.queue.Push(sq.best, sq.best.priority) + } + sq.best = nil + for sq.queue.Size() > 0 { + task := sq.queue.PopItem().(*servingTask) + tasks := peerMap[task.peer] + if tasks == nil { + bufValue, bufLimit := task.peer.fcClient.BufferStatus() + if bufLimit < 1 { + bufLimit = 1 + } + tasks = &peerTasks{ + peer: task.peer, + priority: float64(bufValue) / float64(bufLimit), // lower value comes first + } + peerMap[task.peer] = tasks + peerList = append(peerList, tasks) + } + tasks.list = append(tasks.list, task) + tasks.sumTime += task.expTime + } + sort.Sort(peerList) + drop := true + for _, tasks := range peerList { + if drop { + tasks.peer.freezeClient() + tasks.peer.fcClient.Freeze() + sq.queuedTime -= tasks.sumTime + sqQueuedGauge.Update(int64(sq.queuedTime)) + clientFreezeMeter.Mark(1) + drop = sq.recentTime+sq.queuedTime > sq.burstDropLimit + for _, task := range tasks.list { + task.tokenCh <- nil + } + } else { + for _, task := range tasks.list { + sq.queue.Push(task, task.priority) + } + } + } + if sq.queue.Size() > 0 { + sq.best = sq.queue.PopItem().(*servingTask) + } +} + +// updateRecentTime recalculates the recent serving time value +func (sq *servingQueue) updateRecentTime() { + subTime := atomic.SwapUint64(&sq.servingTimeDiff, 0) + now := mclock.Now() + dt := now - sq.lastUpdate + sq.lastUpdate = now + if dt > 0 { + subTime += uint64(float64(dt) * sq.burstDecRate) + } + if sq.recentTime > subTime { + sq.recentTime -= subTime + } else { + sq.recentTime = 0 + } +} + +// addTask inserts a task into the priority queue +func (sq *servingQueue) addTask(task *servingTask) { + if sq.best == nil { + sq.best = task + } else if task.priority > sq.best.priority { + sq.queue.Push(sq.best, sq.best.priority) + sq.best = task + } else { + sq.queue.Push(task, task.priority) + } + sq.updateRecentTime() + sq.queuedTime += task.expTime + sqServedGauge.Update(int64(sq.recentTime)) + sqQueuedGauge.Update(int64(sq.queuedTime)) + if sq.recentTime+sq.queuedTime > sq.burstLimit { + sq.freezePeers() + } +} + +// queueLoop is an event loop running in a goroutine. It receives tasks from queueAddCh +// and always tries to send the highest priority task to queueBestCh. Successfully sent +// tasks are removed from the queue. +func (sq *servingQueue) queueLoop() { + for { + if sq.best != nil { + expTime := sq.best.expTime + select { + case task := <-sq.queueAddCh: + sq.addTask(task) + case sq.queueBestCh <- sq.best: + sq.updateRecentTime() + sq.queuedTime -= expTime + sq.recentTime += expTime + sqServedGauge.Update(int64(sq.recentTime)) + sqQueuedGauge.Update(int64(sq.queuedTime)) + if sq.queue.Size() == 0 { + sq.best = nil + } else { + sq.best, _ = sq.queue.PopItem().(*servingTask) + } + case <-sq.quit: + sq.wg.Done() + return + } + } else { + select { + case task := <-sq.queueAddCh: + sq.addTask(task) + case <-sq.quit: + sq.wg.Done() + return + } + } + } +} + +// threadCountLoop is an event loop running in a goroutine. It adjusts the number +// of active thread controller goroutines. +func (sq *servingQueue) threadCountLoop() { + var threadCountTarget int + for { + for threadCountTarget > sq.threadCount { + sq.wg.Add(1) + go sq.threadController() + sq.threadCount++ + } + if threadCountTarget < sq.threadCount { + select { + case threadCountTarget = <-sq.setThreadsCh: + case sq.stopThreadCh <- struct{}{}: + sq.threadCount-- + case <-sq.quit: + sq.wg.Done() + return + } + } else { + select { + case threadCountTarget = <-sq.setThreadsCh: + case <-sq.quit: + sq.wg.Done() + return + } + } + } +} + +// setThreads sets the allowed processing thread count, suspending tasks as soon as +// possible if necessary. +func (sq *servingQueue) setThreads(threadCount int) { + select { + case sq.setThreadsCh <- threadCount: + case <-sq.quit: + return + } +} + +// stop stops task processing as soon as possible and shuts down the serving queue. +func (sq *servingQueue) stop() { + close(sq.quit) + sq.wg.Wait() +} diff --git a/les/sync.go b/les/sync.go index 1ac645585203..1214fefcaf13 100644 --- a/les/sync.go +++ b/les/sync.go @@ -18,62 +18,169 @@ package les import ( "context" + "errors" "time" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/log" ) -// syncer is responsible for periodically synchronising with the network, both -// downloading hashes and blocks as well as handling the announcement handler. -func (pm *ProtocolManager) syncer() { - // Start and ensure cleanup of sync mechanisms - //pm.fetcher.Start() - //defer pm.fetcher.Stop() - defer pm.downloader.Terminate() +var errInvalidCheckpoint = errors.New("invalid advertised checkpoint") - // Wait for different events to fire synchronisation operations - //forceSync := time.Tick(forceSyncCycle) - for { - select { - case <-pm.newPeerCh: - /* // Make sure we have peers to select from, then sync - if pm.peers.Len() < minDesiredPeerCount { - break - } - go pm.synchronise(pm.peers.BestPeer()) - */ - /*case <-forceSync: - // Force a sync even if not enough peers are present - go pm.synchronise(pm.peers.BestPeer()) - */ - case <-pm.noMorePeers: - return - } - } -} +const ( + // lightSync starts syncing from the current highest block. + // If the chain is empty, syncing the entire header chain. + lightSync = iota + + // legacyCheckpointSync starts syncing from a hardcoded checkpoint. + legacyCheckpointSync + + // checkpointSync starts syncing from a checkpoint signed by trusted + // signer or hardcoded checkpoint for compatibility. + checkpointSync +) -func (pm *ProtocolManager) needToSync(peerHead blockInfo) bool { - head := pm.blockchain.CurrentHeader() - currentTd := rawdb.ReadTd(pm.chainDb, head.Hash(), head.Number.Uint64()) - return currentTd != nil && peerHead.Td.Cmp(currentTd) > 0 +// validateCheckpoint verifies the advertised checkpoint by peer is valid or not. +// +// Each network has several hard-coded checkpoint signer addresses. Only the +// checkpoint issued by the specified signer is considered valid. +// +// In addition to the checkpoint registered in the registrar contract, there are +// several legacy hardcoded checkpoints in our codebase. These checkpoints are +// also considered as valid. +func (h *clientHandler) validateCheckpoint(peer *peer) error { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + defer cancel() + + // Fetch the block header corresponding to the checkpoint registration. + cp := peer.checkpoint + header, err := light.GetUntrustedHeaderByNumber(ctx, h.backend.odr, peer.checkpointNumber, peer.id) + if err != nil { + return err + } + // Fetch block logs associated with the block header. + logs, err := light.GetUntrustedBlockLogs(ctx, h.backend.odr, header) + if err != nil { + return err + } + events := h.backend.oracle.contract.LookupCheckpointEvents(logs, cp.SectionIndex, cp.Hash()) + if len(events) == 0 { + return errInvalidCheckpoint + } + var ( + index = events[0].Index + hash = events[0].CheckpointHash + signatures [][]byte + ) + for _, event := range events { + signatures = append(signatures, append(event.R[:], append(event.S[:], event.V)...)) + } + valid, signers := h.backend.oracle.verifySigners(index, hash, signatures) + if !valid { + return errInvalidCheckpoint + } + log.Warn("Verified advertised checkpoint", "peer", peer.id, "signers", len(signers)) + return nil } -// synchronise tries to sync up our local block chain with a remote peer. -func (pm *ProtocolManager) synchronise(peer *peer) { - // Short circuit if no peers are available +// synchronise tries to sync up our local chain with a remote peer. +func (h *clientHandler) synchronise(peer *peer) { + // Short circuit if the peer is nil. if peer == nil { return } - // Make sure the peer's TD is higher than our own. - if !pm.needToSync(peer.headBlockInfo()) { + latest := h.backend.blockchain.CurrentHeader() + currentTd := rawdb.ReadTd(h.backend.chainDb, latest.Hash(), latest.Number.Uint64()) + if currentTd != nil && peer.headBlockInfo().Td.Cmp(currentTd) < 0 { return } + // Recap the checkpoint. + // + // The light client may be connected to several different versions of the server. + // (1) Old version server which can not provide stable checkpoint in the handshake packet. + // => Use hardcoded checkpoint or empty checkpoint + // (2) New version server but simple checkpoint syncing is not enabled(e.g. mainnet, new testnet or private network) + // => Use hardcoded checkpoint or empty checkpoint + // (3) New version server but the provided stable checkpoint is even lower than the hardcoded one. + // => Use hardcoded checkpoint + // (4) New version server with valid and higher stable checkpoint + // => Use provided checkpoint + var checkpoint = &peer.checkpoint + var hardcoded bool + if h.checkpoint != nil && h.checkpoint.SectionIndex >= peer.checkpoint.SectionIndex { + checkpoint = h.checkpoint // Use the hardcoded one. + hardcoded = true + } + // Determine whether we should run checkpoint syncing or normal light syncing. + // + // Here has four situations that we will disable the checkpoint syncing: + // + // 1. The checkpoint is empty + // 2. The latest head block of the local chain is above the checkpoint. + // 3. The checkpoint is hardcoded(recap with local hardcoded checkpoint) + // 4. For some networks the checkpoint syncing is not activated. + mode := checkpointSync + switch { + case checkpoint.Empty(): + mode = lightSync + log.Debug("Disable checkpoint syncing", "reason", "empty checkpoint") + case latest.Number.Uint64() >= (checkpoint.SectionIndex+1)*h.backend.iConfig.ChtSize-1: + mode = lightSync + log.Debug("Disable checkpoint syncing", "reason", "local chain beyond the checkpoint") + case hardcoded: + mode = legacyCheckpointSync + log.Debug("Disable checkpoint syncing", "reason", "checkpoint is hardcoded") + case h.backend.oracle == nil || !h.backend.oracle.isRunning(): + if h.checkpoint == nil { + mode = lightSync // Downgrade to light sync unfortunately. + } else { + checkpoint = h.checkpoint + mode = legacyCheckpointSync + } + log.Debug("Disable checkpoint syncing", "reason", "checkpoint syncing is not activated") + } + // Notify testing framework if syncing has completed(for testing purpose). + defer func() { + if h.syncDone != nil { + h.syncDone() + } + }() + start := time.Now() + if mode == checkpointSync || mode == legacyCheckpointSync { + // Validate the advertised checkpoint + if mode == checkpointSync { + if err := h.validateCheckpoint(peer); err != nil { + log.Debug("Failed to validate checkpoint", "reason", err) + h.removePeer(peer.id) + return + } + h.backend.blockchain.AddTrustedCheckpoint(checkpoint) + } + log.Debug("Checkpoint syncing start", "peer", peer.id, "checkpoint", checkpoint.SectionIndex) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() - pm.blockchain.(*light.LightChain).SyncCht(ctx) - pm.downloader.Synchronise(peer.id, peer.Head(), peer.Td(), downloader.LightSync) + // Fetch the start point block header. + // + // For the ethash consensus engine, the start header is the block header + // of the checkpoint. + // + // For the clique consensus engine, the start header is the block header + // of the latest epoch covered by checkpoint. + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + if !checkpoint.Empty() && !h.backend.blockchain.SyncCheckpoint(ctx, checkpoint) { + log.Debug("Sync checkpoint failed") + h.removePeer(peer.id) + return + } + } + // Fetch the remaining block headers based on the current chain header. + if err := h.downloader.Synchronise(peer.id, peer.Head(), peer.Td(), downloader.LightSync); err != nil { + log.Debug("Synchronise failed", "reason", err) + return + } + log.Debug("Synchronise finished", "elapsed", common.PrettyDuration(time.Since(start))) } diff --git a/les/sync_test.go b/les/sync_test.go new file mode 100644 index 000000000000..b02c3582f09d --- /dev/null +++ b/les/sync_test.go @@ -0,0 +1,232 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "fmt" + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/params" +) + +// Test light syncing which will download all headers from genesis. +func TestLightSyncingLes2(t *testing.T) { testCheckpointSyncing(t, 2, 0) } +func TestLightSyncingLes3(t *testing.T) { testCheckpointSyncing(t, 3, 0) } + +// Test legacy checkpoint syncing which will download tail headers +// based on a hardcoded checkpoint. +func TestLegacyCheckpointSyncingLes2(t *testing.T) { testCheckpointSyncing(t, 2, 1) } +func TestLegacyCheckpointSyncingLes3(t *testing.T) { testCheckpointSyncing(t, 3, 1) } + +// Test checkpoint syncing which will download tail headers based +// on a verified checkpoint. +func TestCheckpointSyncingLes2(t *testing.T) { testCheckpointSyncing(t, 2, 2) } +func TestCheckpointSyncingLes3(t *testing.T) { testCheckpointSyncing(t, 3, 2) } + +func testCheckpointSyncing(t *testing.T, protocol int, syncMode int) { + config := light.TestServerIndexerConfig + + waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 1 && bts >= 1 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + // Generate 512+4 blocks (totally 1 CHT sections) + server, client, tearDown := newClientServerEnv(t, int(config.ChtSize+config.ChtConfirms), protocol, waitIndexers, nil, 0, false, false) + defer tearDown() + + expected := config.ChtSize + config.ChtConfirms + + // Checkpoint syncing or legacy checkpoint syncing. + if syncMode == 1 || syncMode == 2 { + // Assemble checkpoint 0 + s, _, head := server.chtIndexer.Sections() + cp := ¶ms.TrustedCheckpoint{ + SectionIndex: 0, + SectionHead: head, + CHTRoot: light.GetChtRoot(server.db, s-1, head), + BloomRoot: light.GetBloomTrieRoot(server.db, s-1, head), + } + if syncMode == 1 { + // Register the assembled checkpoint as hardcoded one. + client.handler.checkpoint = cp + client.handler.backend.blockchain.AddTrustedCheckpoint(cp) + } else { + // Register the assembled checkpoint into oracle. + header := server.backend.Blockchain().CurrentHeader() + + data := append([]byte{0x19, 0x00}, append(registrarAddr.Bytes(), append([]byte{0, 0, 0, 0, 0, 0, 0, 0}, cp.Hash().Bytes()...)...)...) + sig, _ := crypto.Sign(crypto.Keccak256(data), signerKey) + sig[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + if _, err := server.handler.server.oracle.contract.RegisterCheckpoint(bind.NewKeyedTransactor(signerKey), cp.SectionIndex, cp.Hash().Bytes(), new(big.Int).Sub(header.Number, big.NewInt(1)), header.ParentHash, [][]byte{sig}); err != nil { + t.Error("register checkpoint failed", err) + } + server.backend.Commit() + + // Wait for the checkpoint registration + for { + _, hash, _, err := server.handler.server.oracle.contract.Contract().GetLatestCheckpoint(nil) + if err != nil || hash == [32]byte{} { + time.Sleep(100 * time.Millisecond) + continue + } + break + } + expected += 1 + } + } + + done := make(chan error) + client.handler.syncDone = func() { + header := client.handler.backend.blockchain.CurrentHeader() + if header.Number.Uint64() == expected { + done <- nil + } else { + done <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expected, header.Number) + } + } + + // Create connected peer pair. + _, err1, _, err2 := newTestPeerPair("peer", protocol, server.handler, client.handler) + select { + case <-time.After(time.Millisecond * 100): + case err := <-err1: + t.Fatalf("peer 1 handshake error: %v", err) + case err := <-err2: + t.Fatalf("peer 2 handshake error: %v", err) + } + + select { + case err := <-done: + if err != nil { + t.Error("sync failed", err) + } + return + case <-time.NewTimer(10 * time.Second).C: + t.Error("checkpoint syncing timeout") + } +} + +func TestMissOracleBackend(t *testing.T) { testMissOracleBackend(t, true) } +func TestMissOracleBackendNoCheckpoint(t *testing.T) { testMissOracleBackend(t, false) } + +func testMissOracleBackend(t *testing.T, hasCheckpoint bool) { + config := light.TestServerIndexerConfig + + waitIndexers := func(cIndexer, bIndexer, btIndexer *core.ChainIndexer) { + for { + cs, _, _ := cIndexer.Sections() + bts, _, _ := btIndexer.Sections() + if cs >= 1 && bts >= 1 { + break + } + time.Sleep(10 * time.Millisecond) + } + } + // Generate 512+4 blocks (totally 1 CHT sections) + server, client, tearDown := newClientServerEnv(t, int(config.ChtSize+config.ChtConfirms), 3, waitIndexers, nil, 0, false, false) + defer tearDown() + + expected := config.ChtSize + config.ChtConfirms + + s, _, head := server.chtIndexer.Sections() + cp := ¶ms.TrustedCheckpoint{ + SectionIndex: 0, + SectionHead: head, + CHTRoot: light.GetChtRoot(server.db, s-1, head), + BloomRoot: light.GetBloomTrieRoot(server.db, s-1, head), + } + // Register the assembled checkpoint into oracle. + header := server.backend.Blockchain().CurrentHeader() + + data := append([]byte{0x19, 0x00}, append(registrarAddr.Bytes(), append([]byte{0, 0, 0, 0, 0, 0, 0, 0}, cp.Hash().Bytes()...)...)...) + sig, _ := crypto.Sign(crypto.Keccak256(data), signerKey) + sig[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + if _, err := server.handler.server.oracle.contract.RegisterCheckpoint(bind.NewKeyedTransactor(signerKey), cp.SectionIndex, cp.Hash().Bytes(), new(big.Int).Sub(header.Number, big.NewInt(1)), header.ParentHash, [][]byte{sig}); err != nil { + t.Error("register checkpoint failed", err) + } + server.backend.Commit() + + // Wait for the checkpoint registration + for { + _, hash, _, err := server.handler.server.oracle.contract.Contract().GetLatestCheckpoint(nil) + if err != nil || hash == [32]byte{} { + time.Sleep(100 * time.Millisecond) + continue + } + break + } + expected += 1 + + // Explicitly set the oracle as nil. In normal use case it can happen + // that user wants to unlock something which blocks the oracle backend + // initialisation. But at the same time syncing starts. + // + // See https://github.com/ethereum/go-ethereum/issues/20097 for more detail. + // + // In this case, client should run light sync or legacy checkpoint sync + // if hardcoded checkpoint is configured. + client.handler.backend.oracle = nil + + // For some private networks it can happen checkpoint syncing is enabled + // but there is no hardcoded checkpoint configured. + if hasCheckpoint { + client.handler.checkpoint = cp + client.handler.backend.blockchain.AddTrustedCheckpoint(cp) + } + + done := make(chan error) + client.handler.syncDone = func() { + header := client.handler.backend.blockchain.CurrentHeader() + if header.Number.Uint64() == expected { + done <- nil + } else { + done <- fmt.Errorf("blockchain length mismatch, want %d, got %d", expected, header.Number) + } + } + + // Create connected peer pair. + _, err1, _, err2 := newTestPeerPair("peer", 2, server.handler, client.handler) + select { + case <-time.After(time.Millisecond * 100): + case err := <-err1: + t.Fatalf("peer 1 handshake error: %v", err) + case err := <-err2: + t.Fatalf("peer 2 handshake error: %v", err) + } + + select { + case err := <-done: + if err != nil { + t.Error("sync failed", err) + } + return + case <-time.NewTimer(10 * time.Second).C: + t.Error("checkpoint syncing timeout") + } +} diff --git a/les/test_helper.go b/les/test_helper.go new file mode 100644 index 000000000000..79cf323d62db --- /dev/null +++ b/les/test_helper.go @@ -0,0 +1,558 @@ +// Copyright 2016 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// This file contains some shares testing functionality, common to multiple +// different files and modules being tested. + +package les + +import ( + "context" + "crypto/rand" + "math/big" + "testing" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/contracts/checkpointoracle/contract" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/les/flowcontrol" + "github.com/ethereum/go-ethereum/light" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/params" +) + +var ( + bankKey, _ = crypto.GenerateKey() + bankAddr = crypto.PubkeyToAddress(bankKey.PublicKey) + bankFunds = big.NewInt(1000000000000000000) + + userKey1, _ = crypto.GenerateKey() + userKey2, _ = crypto.GenerateKey() + userAddr1 = crypto.PubkeyToAddress(userKey1.PublicKey) + userAddr2 = crypto.PubkeyToAddress(userKey2.PublicKey) + + testContractAddr common.Address + testContractCode = common.Hex2Bytes("606060405260cc8060106000396000f360606040526000357c01000000000000000000000000000000000000000000000000000000009004806360cd2685146041578063c16431b914606b57603f565b005b6055600480803590602001909190505060a9565b6040518082815260200191505060405180910390f35b60886004808035906020019091908035906020019091905050608a565b005b80600060005083606481101560025790900160005b50819055505b5050565b6000600060005082606481101560025790900160005b5054905060c7565b91905056") + testContractCodeDeployed = testContractCode[16:] + testContractDeployed = uint64(2) + + testEventEmitterCode = common.Hex2Bytes("60606040523415600e57600080fd5b7f57050ab73f6b9ebdd9f76b8d4997793f48cf956e965ee070551b9ca0bb71584e60405160405180910390a160358060476000396000f3006060604052600080fd00a165627a7a723058203f727efcad8b5811f8cb1fc2620ce5e8c63570d697aef968172de296ea3994140029") + + // Checkpoint registrar relative + registrarAddr common.Address + signerKey, _ = crypto.GenerateKey() + signerAddr = crypto.PubkeyToAddress(signerKey.PublicKey) +) + +var ( + // The block frequency for creating checkpoint(only used in test) + sectionSize = big.NewInt(512) + + // The number of confirmations needed to generate a checkpoint(only used in test). + processConfirms = big.NewInt(4) + + // The token bucket buffer limit for testing purpose. + testBufLimit = uint64(1000000) + + // The buffer recharging speed for testing purpose. + testBufRecharge = uint64(1000) +) + +/* +contract test { + + uint256[100] data; + + function Put(uint256 addr, uint256 value) { + data[addr] = value; + } + + function Get(uint256 addr) constant returns (uint256 value) { + return data[addr]; + } +} +*/ + +// prepare pre-commits specified number customized blocks into chain. +func prepare(n int, backend *backends.SimulatedBackend) { + var ( + ctx = context.Background() + signer = types.HomesteadSigner{} + ) + for i := 0; i < n; i++ { + switch i { + case 0: + // deploy checkpoint contract + registrarAddr, _, _, _ = contract.DeployCheckpointOracle(bind.NewKeyedTransactor(bankKey), backend, []common.Address{signerAddr}, sectionSize, processConfirms, big.NewInt(1)) + // bankUser transfers some ether to user1 + nonce, _ := backend.PendingNonceAt(ctx, bankAddr) + tx, _ := types.SignTx(types.NewTransaction(nonce, userAddr1, big.NewInt(10000), params.TxGas, nil, nil), signer, bankKey) + backend.SendTransaction(ctx, tx) + case 1: + bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) + userNonce1, _ := backend.PendingNonceAt(ctx, userAddr1) + + // bankUser transfers more ether to user1 + tx1, _ := types.SignTx(types.NewTransaction(bankNonce, userAddr1, big.NewInt(1000), params.TxGas, nil, nil), signer, bankKey) + backend.SendTransaction(ctx, tx1) + + // user1 relays ether to user2 + tx2, _ := types.SignTx(types.NewTransaction(userNonce1, userAddr2, big.NewInt(1000), params.TxGas, nil, nil), signer, userKey1) + backend.SendTransaction(ctx, tx2) + + // user1 deploys a test contract + tx3, _ := types.SignTx(types.NewContractCreation(userNonce1+1, big.NewInt(0), 200000, big.NewInt(0), testContractCode), signer, userKey1) + backend.SendTransaction(ctx, tx3) + testContractAddr = crypto.CreateAddress(userAddr1, userNonce1+1) + + // user1 deploys a event contract + tx4, _ := types.SignTx(types.NewContractCreation(userNonce1+2, big.NewInt(0), 200000, big.NewInt(0), testEventEmitterCode), signer, userKey1) + backend.SendTransaction(ctx, tx4) + case 2: + // bankUser transfer some ether to signer + bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) + tx1, _ := types.SignTx(types.NewTransaction(bankNonce, signerAddr, big.NewInt(1000000000), params.TxGas, nil, nil), signer, bankKey) + backend.SendTransaction(ctx, tx1) + + // invoke test contract + data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001") + tx2, _ := types.SignTx(types.NewTransaction(bankNonce+1, testContractAddr, big.NewInt(0), 100000, nil, data), signer, bankKey) + backend.SendTransaction(ctx, tx2) + case 3: + // invoke test contract + bankNonce, _ := backend.PendingNonceAt(ctx, bankAddr) + data := common.Hex2Bytes("C16431B900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002") + tx, _ := types.SignTx(types.NewTransaction(bankNonce, testContractAddr, big.NewInt(0), 100000, nil, data), signer, bankKey) + backend.SendTransaction(ctx, tx) + } + backend.Commit() + } +} + +// testIndexers creates a set of indexers with specified params for testing purpose. +func testIndexers(db ethdb.Database, odr light.OdrBackend, config *light.IndexerConfig) []*core.ChainIndexer { + var indexers [3]*core.ChainIndexer + indexers[0] = light.NewChtIndexer(db, odr, config.ChtSize, config.ChtConfirms) + indexers[1] = eth.NewBloomIndexer(db, config.BloomSize, config.BloomConfirms) + indexers[2] = light.NewBloomTrieIndexer(db, odr, config.BloomSize, config.BloomTrieSize) + // make bloomTrieIndexer as a child indexer of bloom indexer. + indexers[1].AddChildIndexer(indexers[2]) + return indexers[:] +} + +func newTestClientHandler(backend *backends.SimulatedBackend, odr *LesOdr, indexers []*core.ChainIndexer, db ethdb.Database, peers *peerSet, ulcServers []string, ulcFraction int) *clientHandler { + var ( + evmux = new(event.TypeMux) + engine = ethash.NewFaker() + gspec = core.Genesis{ + Config: params.AllEthashProtocolChanges, + Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, + GasLimit: 100000000, + } + oracle *checkpointOracle + ) + genesis := gspec.MustCommit(db) + chain, _ := light.NewLightChain(odr, gspec.Config, engine, nil) + if indexers != nil { + checkpointConfig := ¶ms.CheckpointOracleConfig{ + Address: crypto.CreateAddress(bankAddr, 0), + Signers: []common.Address{signerAddr}, + Threshold: 1, + } + getLocal := func(index uint64) params.TrustedCheckpoint { + chtIndexer := indexers[0] + sectionHead := chtIndexer.SectionHead(index) + return params.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: sectionHead, + CHTRoot: light.GetChtRoot(db, index, sectionHead), + BloomRoot: light.GetBloomTrieRoot(db, index, sectionHead), + } + } + oracle = newCheckpointOracle(checkpointConfig, getLocal) + } + client := &LightEthereum{ + lesCommons: lesCommons{ + genesis: genesis.Hash(), + config: ð.Config{LightPeers: 100, NetworkId: NetworkId}, + chainConfig: params.AllEthashProtocolChanges, + iConfig: light.TestClientIndexerConfig, + chainDb: db, + oracle: oracle, + chainReader: chain, + peers: peers, + closeCh: make(chan struct{}), + }, + reqDist: odr.retriever.dist, + retriever: odr.retriever, + odr: odr, + engine: engine, + blockchain: chain, + eventMux: evmux, + } + client.handler = newClientHandler(ulcServers, ulcFraction, nil, client) + + if client.oracle != nil { + client.oracle.start(backend) + } + return client.handler +} + +func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Database, peers *peerSet, clock mclock.Clock) (*serverHandler, *backends.SimulatedBackend) { + var ( + gspec = core.Genesis{ + Config: params.AllEthashProtocolChanges, + Alloc: core.GenesisAlloc{bankAddr: {Balance: bankFunds}}, + GasLimit: 100000000, + } + oracle *checkpointOracle + ) + genesis := gspec.MustCommit(db) + + // create a simulation backend and pre-commit several customized block to the database. + simulation := backends.NewSimulatedBackendWithDatabase(db, gspec.Alloc, 100000000) + prepare(blocks, simulation) + + txpoolConfig := core.DefaultTxPoolConfig + txpoolConfig.Journal = "" + txpool := core.NewTxPool(txpoolConfig, gspec.Config, simulation.Blockchain()) + if indexers != nil { + checkpointConfig := ¶ms.CheckpointOracleConfig{ + Address: crypto.CreateAddress(bankAddr, 0), + Signers: []common.Address{signerAddr}, + Threshold: 1, + } + getLocal := func(index uint64) params.TrustedCheckpoint { + chtIndexer := indexers[0] + sectionHead := chtIndexer.SectionHead(index) + return params.TrustedCheckpoint{ + SectionIndex: index, + SectionHead: sectionHead, + CHTRoot: light.GetChtRoot(db, index, sectionHead), + BloomRoot: light.GetBloomTrieRoot(db, index, sectionHead), + } + } + oracle = newCheckpointOracle(checkpointConfig, getLocal) + } + server := &LesServer{ + lesCommons: lesCommons{ + genesis: genesis.Hash(), + config: ð.Config{LightPeers: 100, NetworkId: NetworkId}, + chainConfig: params.AllEthashProtocolChanges, + iConfig: light.TestServerIndexerConfig, + chainDb: db, + chainReader: simulation.Blockchain(), + oracle: oracle, + peers: peers, + closeCh: make(chan struct{}), + }, + servingQueue: newServingQueue(int64(time.Millisecond*10), 1), + defParams: flowcontrol.ServerParams{ + BufLimit: testBufLimit, + MinRecharge: testBufRecharge, + }, + fcManager: flowcontrol.NewClientManager(nil, clock), + } + server.costTracker, server.freeCapacity = newCostTracker(db, server.config) + server.costTracker.testCostList = testCostList(0) // Disable flow control mechanism. + server.clientPool = newClientPool(db, 1, 10000, clock, nil) + server.clientPool.setLimits(10000, 10000) // Assign enough capacity for clientpool + server.handler = newServerHandler(server, simulation.Blockchain(), db, txpool, func() bool { return true }) + if server.oracle != nil { + server.oracle.start(simulation) + } + server.servingQueue.setThreads(4) + server.handler.start() + return server.handler, simulation +} + +// testPeer is a simulated peer to allow testing direct network calls. +type testPeer struct { + peer *peer + + net p2p.MsgReadWriter // Network layer reader/writer to simulate remote messaging + app *p2p.MsgPipeRW // Application layer reader/writer to simulate the local side +} + +// newTestPeer creates a new peer registered at the given protocol manager. +func newTestPeer(t *testing.T, name string, version int, handler *serverHandler, shake bool, testCost uint64) (*testPeer, <-chan error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() + + // Generate a random id and create the peer + var id enode.ID + rand.Read(id[:]) + peer := newPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), net) + + // Start the peer on a new thread + errCh := make(chan error, 1) + go func() { + select { + case <-handler.closeCh: + errCh <- p2p.DiscQuitting + case errCh <- handler.handle(peer): + } + }() + tp := &testPeer{ + app: app, + net: net, + peer: peer, + } + // Execute any implicitly requested handshakes and return + if shake { + // Customize the cost table if required. + if testCost != 0 { + handler.server.costTracker.testCostList = testCostList(testCost) + } + var ( + genesis = handler.blockchain.Genesis() + head = handler.blockchain.CurrentHeader() + td = handler.blockchain.GetTd(head.Hash(), head.Number.Uint64()) + ) + tp.handshake(t, td, head.Hash(), head.Number.Uint64(), genesis.Hash(), testCostList(testCost)) + } + return tp, errCh +} + +// close terminates the local side of the peer, notifying the remote protocol +// manager of termination. +func (p *testPeer) close() { + p.app.Close() +} + +func newTestPeerPair(name string, version int, server *serverHandler, client *clientHandler) (*testPeer, <-chan error, *testPeer, <-chan error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() + + // Generate a random id and create the peer + var id enode.ID + rand.Read(id[:]) + + peer1 := newPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), net) + peer2 := newPeer(version, NetworkId, false, p2p.NewPeer(id, name, nil), app) + + // Start the peer on a new thread + errc1 := make(chan error, 1) + errc2 := make(chan error, 1) + go func() { + select { + case <-server.closeCh: + errc1 <- p2p.DiscQuitting + case errc1 <- server.handle(peer1): + } + }() + go func() { + select { + case <-client.closeCh: + errc1 <- p2p.DiscQuitting + case errc1 <- client.handle(peer2): + } + }() + return &testPeer{peer: peer1, net: net, app: app}, errc1, &testPeer{peer: peer2, net: app, app: net}, errc2 +} + +// handshake simulates a trivial handshake that expects the same state from the +// remote side as we are simulating locally. +func (p *testPeer) handshake(t *testing.T, td *big.Int, head common.Hash, headNum uint64, genesis common.Hash, costList RequestCostList) { + var expList keyValueList + expList = expList.add("protocolVersion", uint64(p.peer.version)) + expList = expList.add("networkId", uint64(NetworkId)) + expList = expList.add("headTd", td) + expList = expList.add("headHash", head) + expList = expList.add("headNum", headNum) + expList = expList.add("genesisHash", genesis) + sendList := make(keyValueList, len(expList)) + copy(sendList, expList) + expList = expList.add("serveHeaders", nil) + expList = expList.add("serveChainSince", uint64(0)) + expList = expList.add("serveStateSince", uint64(0)) + expList = expList.add("serveRecentState", uint64(core.TriesInMemory-4)) + expList = expList.add("txRelay", nil) + expList = expList.add("flowControl/BL", testBufLimit) + expList = expList.add("flowControl/MRR", testBufRecharge) + expList = expList.add("flowControl/MRC", costList) + + if err := p2p.ExpectMsg(p.app, StatusMsg, expList); err != nil { + t.Fatalf("status recv: %v", err) + } + if err := p2p.Send(p.app, StatusMsg, sendList); err != nil { + t.Fatalf("status send: %v", err) + } + p.peer.fcParams = flowcontrol.ServerParams{ + BufLimit: testBufLimit, + MinRecharge: testBufRecharge, + } +} + +type indexerCallback func(*core.ChainIndexer, *core.ChainIndexer, *core.ChainIndexer) + +// testClient represents a client for testing with necessary auxiliary fields. +type testClient struct { + clock mclock.Clock + db ethdb.Database + peer *testPeer + handler *clientHandler + + chtIndexer *core.ChainIndexer + bloomIndexer *core.ChainIndexer + bloomTrieIndexer *core.ChainIndexer +} + +// testServer represents a server for testing with necessary auxiliary fields. +type testServer struct { + clock mclock.Clock + backend *backends.SimulatedBackend + db ethdb.Database + peer *testPeer + handler *serverHandler + + chtIndexer *core.ChainIndexer + bloomIndexer *core.ChainIndexer + bloomTrieIndexer *core.ChainIndexer +} + +func newServerEnv(t *testing.T, blocks int, protocol int, callback indexerCallback, simClock bool, newPeer bool, testCost uint64) (*testServer, func()) { + db := rawdb.NewMemoryDatabase() + indexers := testIndexers(db, nil, light.TestServerIndexerConfig) + + var clock mclock.Clock = &mclock.System{} + if simClock { + clock = &mclock.Simulated{} + } + handler, b := newTestServerHandler(blocks, indexers, db, newPeerSet(), clock) + + var peer *testPeer + if newPeer { + peer, _ = newTestPeer(t, "peer", protocol, handler, true, testCost) + } + + cIndexer, bIndexer, btIndexer := indexers[0], indexers[1], indexers[2] + cIndexer.Start(handler.blockchain) + bIndexer.Start(handler.blockchain) + + // Wait until indexers generate enough index data. + if callback != nil { + callback(cIndexer, bIndexer, btIndexer) + } + server := &testServer{ + clock: clock, + backend: b, + db: db, + peer: peer, + handler: handler, + chtIndexer: cIndexer, + bloomIndexer: bIndexer, + bloomTrieIndexer: btIndexer, + } + teardown := func() { + if newPeer { + peer.close() + b.Close() + } + cIndexer.Close() + bIndexer.Close() + } + return server, teardown +} + +func newClientServerEnv(t *testing.T, blocks int, protocol int, callback indexerCallback, ulcServers []string, ulcFraction int, simClock bool, connect bool) (*testServer, *testClient, func()) { + sdb, cdb := rawdb.NewMemoryDatabase(), rawdb.NewMemoryDatabase() + speers, cPeers := newPeerSet(), newPeerSet() + + var clock mclock.Clock = &mclock.System{} + if simClock { + clock = &mclock.Simulated{} + } + dist := newRequestDistributor(cPeers, clock) + rm := newRetrieveManager(cPeers, dist, nil) + odr := NewLesOdr(cdb, light.TestClientIndexerConfig, rm) + + sindexers := testIndexers(sdb, nil, light.TestServerIndexerConfig) + cIndexers := testIndexers(cdb, odr, light.TestClientIndexerConfig) + + scIndexer, sbIndexer, sbtIndexer := sindexers[0], sindexers[1], sindexers[2] + ccIndexer, cbIndexer, cbtIndexer := cIndexers[0], cIndexers[1], cIndexers[2] + odr.SetIndexers(ccIndexer, cbIndexer, cbtIndexer) + + server, b := newTestServerHandler(blocks, sindexers, sdb, speers, clock) + client := newTestClientHandler(b, odr, cIndexers, cdb, cPeers, ulcServers, ulcFraction) + + scIndexer.Start(server.blockchain) + sbIndexer.Start(server.blockchain) + ccIndexer.Start(client.backend.blockchain) + cbIndexer.Start(client.backend.blockchain) + + if callback != nil { + callback(scIndexer, sbIndexer, sbtIndexer) + } + var ( + speer, cpeer *testPeer + err1, err2 <-chan error + ) + if connect { + cpeer, err1, speer, err2 = newTestPeerPair("peer", protocol, server, client) + select { + case <-time.After(time.Millisecond * 100): + case err := <-err1: + t.Fatalf("peer 1 handshake error: %v", err) + case err := <-err2: + t.Fatalf("peer 2 handshake error: %v", err) + } + } + s := &testServer{ + clock: clock, + backend: b, + db: sdb, + peer: cpeer, + handler: server, + chtIndexer: scIndexer, + bloomIndexer: sbIndexer, + bloomTrieIndexer: sbtIndexer, + } + c := &testClient{ + clock: clock, + db: cdb, + peer: speer, + handler: client, + chtIndexer: ccIndexer, + bloomIndexer: cbIndexer, + bloomTrieIndexer: cbtIndexer, + } + teardown := func() { + if connect { + speer.close() + cpeer.close() + } + ccIndexer.Close() + cbIndexer.Close() + scIndexer.Close() + sbIndexer.Close() + b.Close() + } + return s, c, teardown +} diff --git a/les/txrelay.go b/les/txrelay.go index 7a02cc837e67..49195161b71c 100644 --- a/les/txrelay.go +++ b/les/txrelay.go @@ -17,10 +17,12 @@ package les import ( + "context" "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" ) type ltrInfo struct { @@ -28,36 +30,42 @@ type ltrInfo struct { sentTo map[*peer]struct{} } -type LesTxRelay struct { +type lesTxRelay struct { txSent map[common.Hash]*ltrInfo txPending map[common.Hash]struct{} ps *peerSet peerList []*peer peerStartPos int lock sync.RWMutex + stop chan struct{} - reqDist *requestDistributor + retriever *retrieveManager } -func NewLesTxRelay(ps *peerSet, reqDist *requestDistributor) *LesTxRelay { - r := &LesTxRelay{ +func newLesTxRelay(ps *peerSet, retriever *retrieveManager) *lesTxRelay { + r := &lesTxRelay{ txSent: make(map[common.Hash]*ltrInfo), txPending: make(map[common.Hash]struct{}), ps: ps, - reqDist: reqDist, + retriever: retriever, + stop: make(chan struct{}), } ps.notify(r) return r } -func (self *LesTxRelay) registerPeer(p *peer) { +func (self *lesTxRelay) Stop() { + close(self.stop) +} + +func (self *lesTxRelay) registerPeer(p *peer) { self.lock.Lock() defer self.lock.Unlock() self.peerList = self.ps.AllPeers() } -func (self *LesTxRelay) unregisterPeer(p *peer) { +func (self *lesTxRelay) unregisterPeer(p *peer) { self.lock.Lock() defer self.lock.Unlock() @@ -66,7 +74,7 @@ func (self *LesTxRelay) unregisterPeer(p *peer) { // send sends a list of transactions to at most a given number of peers at // once, never resending any particular transaction to the same peer twice -func (self *LesTxRelay) send(txs types.Transactions, count int) { +func (self *lesTxRelay) send(txs types.Transactions, count int) { sendTo := make(map[*peer]types.Transactions) self.peerStartPos++ // rotate the starting position of the peer list @@ -113,35 +121,36 @@ func (self *LesTxRelay) send(txs types.Transactions, count int) { for p, list := range sendTo { pp := p ll := list + enc, _ := rlp.EncodeToBytes(ll) reqID := genReqID() rq := &distReq{ getCost: func(dp distPeer) uint64 { peer := dp.(*peer) - return peer.GetRequestCost(SendTxMsg, len(ll)) + return peer.GetTxRelayCost(len(ll), len(enc)) }, canSend: func(dp distPeer) bool { - return dp.(*peer) == pp + return !dp.(*peer).onlyAnnounce && dp.(*peer) == pp }, request: func(dp distPeer) func() { peer := dp.(*peer) - cost := peer.GetRequestCost(SendTxMsg, len(ll)) - peer.fcServer.QueueRequest(reqID, cost) - return func() { peer.SendTxs(reqID, cost, ll) } + cost := peer.GetTxRelayCost(len(ll), len(enc)) + peer.fcServer.QueuedRequest(reqID, cost) + return func() { peer.SendTxs(reqID, cost, enc) } }, } - self.reqDist.queue(rq) + go self.retriever.retrieve(context.Background(), reqID, rq, func(p distPeer, msg *Msg) error { return nil }, self.stop) } } -func (self *LesTxRelay) Send(txs types.Transactions) { +func (self *lesTxRelay) Send(txs types.Transactions) { self.lock.Lock() defer self.lock.Unlock() self.send(txs, 3) } -func (self *LesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { +func (self *lesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash) { self.lock.Lock() defer self.lock.Unlock() @@ -164,7 +173,7 @@ func (self *LesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback } } -func (self *LesTxRelay) Discard(hashes []common.Hash) { +func (self *lesTxRelay) Discard(hashes []common.Hash) { self.lock.Lock() defer self.lock.Unlock() diff --git a/les/ulc.go b/les/ulc.go new file mode 100644 index 000000000000..b97217e79663 --- /dev/null +++ b/les/ulc.go @@ -0,0 +1,54 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "errors" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +type ulc struct { + keys map[string]bool + fraction int +} + +// newULC creates and returns an ultra light client instance. +func newULC(servers []string, fraction int) (*ulc, error) { + keys := make(map[string]bool) + for _, id := range servers { + node, err := enode.Parse(enode.ValidSchemes, id) + if err != nil { + log.Warn("Failed to parse trusted server", "id", id, "err", err) + continue + } + keys[node.ID().String()] = true + } + if len(keys) == 0 { + return nil, errors.New("no trusted servers") + } + return &ulc{ + keys: keys, + fraction: fraction, + }, nil +} + +// trusted return an indicator that whether the specified peer is trusted. +func (u *ulc) trusted(p enode.ID) bool { + return u.keys[p.String()] +} diff --git a/les/ulc_test.go b/les/ulc_test.go new file mode 100644 index 000000000000..9112bf928c18 --- /dev/null +++ b/les/ulc_test.go @@ -0,0 +1,143 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package les + +import ( + "crypto/rand" + "fmt" + "net" + "testing" + "time" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestULCAnnounceThresholdLes2(t *testing.T) { testULCAnnounceThreshold(t, 2) } +func TestULCAnnounceThresholdLes3(t *testing.T) { testULCAnnounceThreshold(t, 3) } + +func testULCAnnounceThreshold(t *testing.T, protocol int) { + // todo figure out why it takes fetcher so longer to fetcher the announced header. + t.Skip("Sometimes it can failed") + var cases = []struct { + height []int + threshold int + expect uint64 + }{ + {[]int{1}, 100, 1}, + {[]int{0, 0, 0}, 100, 0}, + {[]int{1, 2, 3}, 30, 3}, + {[]int{1, 2, 3}, 60, 2}, + {[]int{3, 2, 1}, 67, 1}, + {[]int{3, 2, 1}, 100, 1}, + } + for _, testcase := range cases { + var ( + servers []*testServer + teardowns []func() + nodes []*enode.Node + ids []string + ) + for i := 0; i < len(testcase.height); i++ { + s, n, teardown := newServerPeer(t, 0, protocol) + + servers = append(servers, s) + nodes = append(nodes, n) + teardowns = append(teardowns, teardown) + ids = append(ids, n.String()) + } + c, teardown := newLightPeer(t, protocol, ids, testcase.threshold) + + // Connect all servers. + for i := 0; i < len(servers); i++ { + connect(servers[i].handler, nodes[i].ID(), c.handler, protocol) + } + for i := 0; i < len(servers); i++ { + for j := 0; j < testcase.height[i]; j++ { + servers[i].backend.Commit() + } + } + time.Sleep(1500 * time.Millisecond) // Ensure the fetcher has done its work. + head := c.handler.backend.blockchain.CurrentHeader().Number.Uint64() + if head != testcase.expect { + t.Fatalf("chain height mismatch, want %d, got %d", testcase.expect, head) + } + + // Release all servers and client resources. + teardown() + for i := 0; i < len(teardowns); i++ { + teardowns[i]() + } + } +} + +func connect(server *serverHandler, serverId enode.ID, client *clientHandler, protocol int) (*peer, *peer, error) { + // Create a message pipe to communicate through + app, net := p2p.MsgPipe() + + var id enode.ID + rand.Read(id[:]) + + peer1 := newPeer(protocol, NetworkId, true, p2p.NewPeer(serverId, "", nil), net) // Mark server as trusted + peer2 := newPeer(protocol, NetworkId, false, p2p.NewPeer(id, "", nil), app) + + // Start the peerLight on a new thread + errc1 := make(chan error, 1) + errc2 := make(chan error, 1) + go func() { + select { + case <-server.closeCh: + errc1 <- p2p.DiscQuitting + case errc1 <- server.handle(peer2): + } + }() + go func() { + select { + case <-client.closeCh: + errc1 <- p2p.DiscQuitting + case errc1 <- client.handle(peer1): + } + }() + + select { + case <-time.After(time.Millisecond * 100): + case err := <-errc1: + return nil, nil, fmt.Errorf("peerLight handshake error: %v", err) + case err := <-errc2: + return nil, nil, fmt.Errorf("peerFull handshake error: %v", err) + } + return peer1, peer2, nil +} + +// newServerPeer creates server peer. +func newServerPeer(t *testing.T, blocks int, protocol int) (*testServer, *enode.Node, func()) { + s, teardown := newServerEnv(t, blocks, protocol, nil, false, false, 0) + key, err := crypto.GenerateKey() + if err != nil { + t.Fatal("generate key err:", err) + } + s.handler.server.privateKey = key + n := enode.NewV4(&key.PublicKey, net.ParseIP("127.0.0.1"), 35000, 35000) + return s, n, teardown +} + +// newLightPeer creates node with light sync mode +func newLightPeer(t *testing.T, protocol int, ulcServers []string, ulcFraction int) (*testClient, func()) { + _, c, teardown := newClientServerEnv(t, 0, protocol, nil, ulcServers, ulcFraction, false, false) + return c, teardown +} diff --git a/light/lightchain.go b/light/lightchain.go index 8e2734c2d943..02b90138a2d5 100644 --- a/light/lightchain.go +++ b/light/lightchain.go @@ -14,6 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . +// Package light implements on-demand retrieval capable state and chain objects +// for the Ethereum Light Client. package light import ( @@ -35,7 +37,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "github.com/hashicorp/golang-lru" + lru "github.com/hashicorp/golang-lru" ) var ( @@ -50,6 +52,7 @@ type LightChain struct { hc *core.HeaderChain indexerConfig *IndexerConfig chainDb ethdb.Database + engine consensus.Engine odr OdrBackend chainFeed event.Feed chainSideFeed event.Feed @@ -57,26 +60,24 @@ type LightChain struct { scope event.SubscriptionScope genesisBlock *types.Block - mu sync.RWMutex - chainmu sync.RWMutex - bodyCache *lru.Cache // Cache for the most recent block bodies bodyRLPCache *lru.Cache // Cache for the most recent block bodies in RLP encoded format blockCache *lru.Cache // Cache for the most recent entire blocks + chainmu sync.RWMutex // protects header inserts quit chan struct{} - running int32 // running must be called automically - // procInterrupt must be atomically called - procInterrupt int32 // interrupt signaler for block processing - wg sync.WaitGroup + wg sync.WaitGroup - engine consensus.Engine + // Atomic boolean switches: + running int32 // whether LightChain is running or stopped + procInterrupt int32 // interrupts chain insert + disableCheckFreq int32 // disables header verification } // NewLightChain returns a fully initialised light chain using information // available in the database. It initialises the default Ethereum header // validator. -func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus.Engine) (*LightChain, error) { +func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus.Engine, checkpoint *params.TrustedCheckpoint) (*LightChain, error) { bodyCache, _ := lru.New(bodyCacheLimit) bodyRLPCache, _ := lru.New(bodyCacheLimit) blockCache, _ := lru.New(blockCacheLimit) @@ -100,8 +101,8 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus. if bc.genesisBlock == nil { return nil, core.ErrNoGenesis } - if cp, ok := trustedCheckpoints[bc.genesisBlock.Hash()]; ok { - bc.addTrustedCheckpoint(cp) + if checkpoint != nil { + bc.AddTrustedCheckpoint(checkpoint) } if err := bc.loadLastState(); err != nil { return nil, err @@ -117,228 +118,227 @@ func NewLightChain(odr OdrBackend, config *params.ChainConfig, engine consensus. return bc, nil } -// addTrustedCheckpoint adds a trusted checkpoint to the blockchain -func (self *LightChain) addTrustedCheckpoint(cp *params.TrustedCheckpoint) { - if self.odr.ChtIndexer() != nil { - StoreChtRoot(self.chainDb, cp.SectionIndex, cp.SectionHead, cp.CHTRoot) - self.odr.ChtIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) +// AddTrustedCheckpoint adds a trusted checkpoint to the blockchain +func (lc *LightChain) AddTrustedCheckpoint(cp *params.TrustedCheckpoint) { + if lc.odr.ChtIndexer() != nil { + StoreChtRoot(lc.chainDb, cp.SectionIndex, cp.SectionHead, cp.CHTRoot) + lc.odr.ChtIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - if self.odr.BloomTrieIndexer() != nil { - StoreBloomTrieRoot(self.chainDb, cp.SectionIndex, cp.SectionHead, cp.BloomRoot) - self.odr.BloomTrieIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) + if lc.odr.BloomTrieIndexer() != nil { + StoreBloomTrieRoot(lc.chainDb, cp.SectionIndex, cp.SectionHead, cp.BloomRoot) + lc.odr.BloomTrieIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - if self.odr.BloomIndexer() != nil { - self.odr.BloomIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) + if lc.odr.BloomIndexer() != nil { + lc.odr.BloomIndexer().AddCheckpoint(cp.SectionIndex, cp.SectionHead) } - log.Info("Added trusted checkpoint", "chain", cp.Name, "block", (cp.SectionIndex+1)*self.indexerConfig.ChtSize-1, "hash", cp.SectionHead) + log.Info("Added trusted checkpoint", "block", (cp.SectionIndex+1)*lc.indexerConfig.ChtSize-1, "hash", cp.SectionHead) } -func (self *LightChain) getProcInterrupt() bool { - return atomic.LoadInt32(&self.procInterrupt) == 1 +func (lc *LightChain) getProcInterrupt() bool { + return atomic.LoadInt32(&lc.procInterrupt) == 1 } // Odr returns the ODR backend of the chain -func (self *LightChain) Odr() OdrBackend { - return self.odr +func (lc *LightChain) Odr() OdrBackend { + return lc.odr } // loadLastState loads the last known chain state from the database. This method // assumes that the chain manager mutex is held. -func (self *LightChain) loadLastState() error { - if head := rawdb.ReadHeadHeaderHash(self.chainDb); head == (common.Hash{}) { +func (lc *LightChain) loadLastState() error { + if head := rawdb.ReadHeadHeaderHash(lc.chainDb); head == (common.Hash{}) { // Corrupt or empty database, init from scratch - self.Reset() + lc.Reset() } else { - if header := self.GetHeaderByHash(head); header != nil { - self.hc.SetCurrentHeader(header) + if header := lc.GetHeaderByHash(head); header != nil { + lc.hc.SetCurrentHeader(header) } } // Issue a status log and return - header := self.hc.CurrentHeader() - headerTd := self.GetTd(header.Hash(), header.Number.Uint64()) - log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0))) + header := lc.hc.CurrentHeader() + headerTd := lc.GetTd(header.Hash(), header.Number.Uint64()) + log.Info("Loaded most recent local header", "number", header.Number, "hash", header.Hash(), "td", headerTd, "age", common.PrettyAge(time.Unix(int64(header.Time), 0))) return nil } // SetHead rewinds the local chain to a new head. Everything above the new // head will be deleted and the new one set. -func (bc *LightChain) SetHead(head uint64) { - bc.mu.Lock() - defer bc.mu.Unlock() +func (lc *LightChain) SetHead(head uint64) error { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() - bc.hc.SetHead(head, nil) - bc.loadLastState() + lc.hc.SetHead(head, nil, nil) + return lc.loadLastState() } // GasLimit returns the gas limit of the current HEAD block. -func (self *LightChain) GasLimit() uint64 { - return self.hc.CurrentHeader().GasLimit +func (lc *LightChain) GasLimit() uint64 { + return lc.hc.CurrentHeader().GasLimit } // Reset purges the entire blockchain, restoring it to its genesis state. -func (bc *LightChain) Reset() { - bc.ResetWithGenesisBlock(bc.genesisBlock) +func (lc *LightChain) Reset() { + lc.ResetWithGenesisBlock(lc.genesisBlock) } // ResetWithGenesisBlock purges the entire blockchain, restoring it to the // specified genesis state. -func (bc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { +func (lc *LightChain) ResetWithGenesisBlock(genesis *types.Block) { // Dump the entire block chain and purge the caches - bc.SetHead(0) + lc.SetHead(0) - bc.mu.Lock() - defer bc.mu.Unlock() + lc.chainmu.Lock() + defer lc.chainmu.Unlock() // Prepare the genesis block and reinitialise the chain - rawdb.WriteTd(bc.chainDb, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) - rawdb.WriteBlock(bc.chainDb, genesis) + rawdb.WriteTd(lc.chainDb, genesis.Hash(), genesis.NumberU64(), genesis.Difficulty()) + rawdb.WriteBlock(lc.chainDb, genesis) - bc.genesisBlock = genesis - bc.hc.SetGenesis(bc.genesisBlock.Header()) - bc.hc.SetCurrentHeader(bc.genesisBlock.Header()) + lc.genesisBlock = genesis + lc.hc.SetGenesis(lc.genesisBlock.Header()) + lc.hc.SetCurrentHeader(lc.genesisBlock.Header()) } // Accessors // Engine retrieves the light chain's consensus engine. -func (bc *LightChain) Engine() consensus.Engine { return bc.engine } +func (lc *LightChain) Engine() consensus.Engine { return lc.engine } // Genesis returns the genesis block -func (bc *LightChain) Genesis() *types.Block { - return bc.genesisBlock +func (lc *LightChain) Genesis() *types.Block { + return lc.genesisBlock } -// State returns a new mutable state based on the current HEAD block. -func (bc *LightChain) State() (*state.StateDB, error) { - return nil, errors.New("not implemented, needs client/server interface split") +func (lc *LightChain) StateCache() state.Database { + panic("not implemented") } // GetBody retrieves a block body (transactions and uncles) from the database // or ODR service by hash, caching it if found. -func (self *LightChain) GetBody(ctx context.Context, hash common.Hash) (*types.Body, error) { +func (lc *LightChain) GetBody(ctx context.Context, hash common.Hash) (*types.Body, error) { // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := self.bodyCache.Get(hash); ok { + if cached, ok := lc.bodyCache.Get(hash); ok { body := cached.(*types.Body) return body, nil } - number := self.hc.GetBlockNumber(hash) + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - body, err := GetBody(ctx, self.odr, hash, *number) + body, err := GetBody(ctx, lc.odr, hash, *number) if err != nil { return nil, err } // Cache the found body for next time and return - self.bodyCache.Add(hash, body) + lc.bodyCache.Add(hash, body) return body, nil } // GetBodyRLP retrieves a block body in RLP encoding from the database or // ODR service by hash, caching it if found. -func (self *LightChain) GetBodyRLP(ctx context.Context, hash common.Hash) (rlp.RawValue, error) { +func (lc *LightChain) GetBodyRLP(ctx context.Context, hash common.Hash) (rlp.RawValue, error) { // Short circuit if the body's already in the cache, retrieve otherwise - if cached, ok := self.bodyRLPCache.Get(hash); ok { + if cached, ok := lc.bodyRLPCache.Get(hash); ok { return cached.(rlp.RawValue), nil } - number := self.hc.GetBlockNumber(hash) + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - body, err := GetBodyRLP(ctx, self.odr, hash, *number) + body, err := GetBodyRLP(ctx, lc.odr, hash, *number) if err != nil { return nil, err } // Cache the found body for next time and return - self.bodyRLPCache.Add(hash, body) + lc.bodyRLPCache.Add(hash, body) return body, nil } // HasBlock checks if a block is fully present in the database or not, caching // it if present. -func (bc *LightChain) HasBlock(hash common.Hash, number uint64) bool { - blk, _ := bc.GetBlock(NoOdr, hash, number) +func (lc *LightChain) HasBlock(hash common.Hash, number uint64) bool { + blk, _ := lc.GetBlock(NoOdr, hash, number) return blk != nil } // GetBlock retrieves a block from the database or ODR service by hash and number, // caching it if found. -func (self *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) { +func (lc *LightChain) GetBlock(ctx context.Context, hash common.Hash, number uint64) (*types.Block, error) { // Short circuit if the block's already in the cache, retrieve otherwise - if block, ok := self.blockCache.Get(hash); ok { + if block, ok := lc.blockCache.Get(hash); ok { return block.(*types.Block), nil } - block, err := GetBlock(ctx, self.odr, hash, number) + block, err := GetBlock(ctx, lc.odr, hash, number) if err != nil { return nil, err } // Cache the found block for next time and return - self.blockCache.Add(block.Hash(), block) + lc.blockCache.Add(block.Hash(), block) return block, nil } // GetBlockByHash retrieves a block from the database or ODR service by hash, // caching it if found. -func (self *LightChain) GetBlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { - number := self.hc.GetBlockNumber(hash) +func (lc *LightChain) GetBlockByHash(ctx context.Context, hash common.Hash) (*types.Block, error) { + number := lc.hc.GetBlockNumber(hash) if number == nil { return nil, errors.New("unknown block") } - return self.GetBlock(ctx, hash, *number) + return lc.GetBlock(ctx, hash, *number) } // GetBlockByNumber retrieves a block from the database or ODR service by // number, caching it (associated with its hash) if found. -func (self *LightChain) GetBlockByNumber(ctx context.Context, number uint64) (*types.Block, error) { - hash, err := GetCanonicalHash(ctx, self.odr, number) +func (lc *LightChain) GetBlockByNumber(ctx context.Context, number uint64) (*types.Block, error) { + hash, err := GetCanonicalHash(ctx, lc.odr, number) if hash == (common.Hash{}) || err != nil { return nil, err } - return self.GetBlock(ctx, hash, number) + return lc.GetBlock(ctx, hash, number) } // Stop stops the blockchain service. If any imports are currently in progress // it will abort them using the procInterrupt. -func (bc *LightChain) Stop() { - if !atomic.CompareAndSwapInt32(&bc.running, 0, 1) { +func (lc *LightChain) Stop() { + if !atomic.CompareAndSwapInt32(&lc.running, 0, 1) { return } - close(bc.quit) - atomic.StoreInt32(&bc.procInterrupt, 1) + close(lc.quit) + atomic.StoreInt32(&lc.procInterrupt, 1) - bc.wg.Wait() + lc.wg.Wait() log.Info("Blockchain manager stopped") } // Rollback is designed to remove a chain of links from the database that aren't // certain enough to be valid. -func (self *LightChain) Rollback(chain []common.Hash) { - self.mu.Lock() - defer self.mu.Unlock() +func (lc *LightChain) Rollback(chain []common.Hash) { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() for i := len(chain) - 1; i >= 0; i-- { hash := chain[i] - if head := self.hc.CurrentHeader(); head.Hash() == hash { - self.hc.SetCurrentHeader(self.GetHeader(head.ParentHash, head.Number.Uint64()-1)) + if head := lc.hc.CurrentHeader(); head.Hash() == hash { + lc.hc.SetCurrentHeader(lc.GetHeader(head.ParentHash, head.Number.Uint64()-1)) } } } // postChainEvents iterates over the events generated by a chain insertion and // posts them into the event feed. -func (self *LightChain) postChainEvents(events []interface{}) { +func (lc *LightChain) postChainEvents(events []interface{}) { for _, event := range events { switch ev := event.(type) { case core.ChainEvent: - if self.CurrentHeader().Hash() == ev.Hash { - self.chainHeadFeed.Send(core.ChainHeadEvent{Block: ev.Block}) + if lc.CurrentHeader().Hash() == ev.Hash { + lc.chainHeadFeed.Send(core.ChainHeadEvent{Block: ev.Block}) } - self.chainFeed.Send(ev) + lc.chainFeed.Send(ev) case core.ChainSideEvent: - self.chainSideFeed.Send(ev) + lc.chainSideFeed.Send(ev) } } } @@ -354,28 +354,25 @@ func (self *LightChain) postChainEvents(events []interface{}) { // // In the case of a light chain, InsertHeaderChain also creates and posts light // chain events when necessary. -func (self *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { +func (lc *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) { + if atomic.LoadInt32(&lc.disableCheckFreq) == 1 { + checkFreq = 0 + } start := time.Now() - if i, err := self.hc.ValidateHeaderChain(chain, checkFreq); err != nil { + if i, err := lc.hc.ValidateHeaderChain(chain, checkFreq); err != nil { return i, err } // Make sure only one thread manipulates the chain at once - self.chainmu.Lock() - defer func() { - self.chainmu.Unlock() - time.Sleep(time.Millisecond * 10) // ugly hack; do not hog chain lock in case syncing is CPU-limited by validation - }() + lc.chainmu.Lock() + defer lc.chainmu.Unlock() - self.wg.Add(1) - defer self.wg.Done() + lc.wg.Add(1) + defer lc.wg.Done() var events []interface{} whFunc := func(header *types.Header) error { - self.mu.Lock() - defer self.mu.Unlock() - - status, err := self.hc.WriteHeader(header) + status, err := lc.hc.WriteHeader(header) switch status { case core.CanonStatTy: @@ -388,51 +385,56 @@ func (self *LightChain) InsertHeaderChain(chain []*types.Header, checkFreq int) } return err } - i, err := self.hc.InsertHeaderChain(chain, whFunc, start) - self.postChainEvents(events) + i, err := lc.hc.InsertHeaderChain(chain, whFunc, start) + lc.postChainEvents(events) return i, err } // CurrentHeader retrieves the current head header of the canonical chain. The // header is retrieved from the HeaderChain's internal cache. -func (self *LightChain) CurrentHeader() *types.Header { - return self.hc.CurrentHeader() +func (lc *LightChain) CurrentHeader() *types.Header { + return lc.hc.CurrentHeader() } // GetTd retrieves a block's total difficulty in the canonical chain from the // database by hash and number, caching it if found. -func (self *LightChain) GetTd(hash common.Hash, number uint64) *big.Int { - return self.hc.GetTd(hash, number) +func (lc *LightChain) GetTd(hash common.Hash, number uint64) *big.Int { + return lc.hc.GetTd(hash, number) } // GetTdByHash retrieves a block's total difficulty in the canonical chain from the // database by hash, caching it if found. -func (self *LightChain) GetTdByHash(hash common.Hash) *big.Int { - return self.hc.GetTdByHash(hash) +func (lc *LightChain) GetTdByHash(hash common.Hash) *big.Int { + return lc.hc.GetTdByHash(hash) } // GetHeader retrieves a block header from the database by hash and number, // caching it if found. -func (self *LightChain) GetHeader(hash common.Hash, number uint64) *types.Header { - return self.hc.GetHeader(hash, number) +func (lc *LightChain) GetHeader(hash common.Hash, number uint64) *types.Header { + return lc.hc.GetHeader(hash, number) } // GetHeaderByHash retrieves a block header from the database by hash, caching it if // found. -func (self *LightChain) GetHeaderByHash(hash common.Hash) *types.Header { - return self.hc.GetHeaderByHash(hash) +func (lc *LightChain) GetHeaderByHash(hash common.Hash) *types.Header { + return lc.hc.GetHeaderByHash(hash) } // HasHeader checks if a block header is present in the database or not, caching // it if present. -func (bc *LightChain) HasHeader(hash common.Hash, number uint64) bool { - return bc.hc.HasHeader(hash, number) +func (lc *LightChain) HasHeader(hash common.Hash, number uint64) bool { + return lc.hc.HasHeader(hash, number) +} + +// GetCanonicalHash returns the canonical hash for a given block number +func (bc *LightChain) GetCanonicalHash(number uint64) common.Hash { + return bc.hc.GetCanonicalHash(number) } // GetBlockHashesFromHash retrieves a number of block hashes starting at a given // hash, fetching towards the genesis block. -func (self *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { - return self.hc.GetBlockHashesFromHash(hash, max) +func (lc *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash { + return lc.hc.GetBlockHashesFromHash(hash, max) } // GetAncestor retrieves the Nth ancestor of a given block. It assumes that either the given block or @@ -440,56 +442,53 @@ func (self *LightChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []c // number of blocks to be individually checked before we reach the canonical chain. // // Note: ancestor == 0 returns the same block, 1 returns its parent and so on. -func (bc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { - bc.chainmu.Lock() - defer bc.chainmu.Unlock() - - return bc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) +func (lc *LightChain) GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) { + return lc.hc.GetAncestor(hash, number, ancestor, maxNonCanonical) } // GetHeaderByNumber retrieves a block header from the database by number, // caching it (associated with its hash) if found. -func (self *LightChain) GetHeaderByNumber(number uint64) *types.Header { - return self.hc.GetHeaderByNumber(number) +func (lc *LightChain) GetHeaderByNumber(number uint64) *types.Header { + return lc.hc.GetHeaderByNumber(number) } // GetHeaderByNumberOdr retrieves a block header from the database or network // by number, caching it (associated with its hash) if found. -func (self *LightChain) GetHeaderByNumberOdr(ctx context.Context, number uint64) (*types.Header, error) { - if header := self.hc.GetHeaderByNumber(number); header != nil { +func (lc *LightChain) GetHeaderByNumberOdr(ctx context.Context, number uint64) (*types.Header, error) { + if header := lc.hc.GetHeaderByNumber(number); header != nil { return header, nil } - return GetHeaderByNumber(ctx, self.odr, number) + return GetHeaderByNumber(ctx, lc.odr, number) } // Config retrieves the header chain's chain configuration. -func (self *LightChain) Config() *params.ChainConfig { return self.hc.Config() } - -func (self *LightChain) SyncCht(ctx context.Context) bool { - // If we don't have a CHT indexer, abort - if self.odr.ChtIndexer() == nil { - return false - } - // Ensure the remote CHT head is ahead of us - head := self.CurrentHeader().Number.Uint64() - sections, _, _ := self.odr.ChtIndexer().Sections() +func (lc *LightChain) Config() *params.ChainConfig { return lc.hc.Config() } - latest := sections*self.indexerConfig.ChtSize - 1 - if clique := self.hc.Config().Clique; clique != nil { +// SyncCheckpoint fetches the checkpoint point block header according to +// the checkpoint provided by the remote peer. +// +// Note if we are running the clique, fetches the last epoch snapshot header +// which covered by checkpoint. +func (lc *LightChain) SyncCheckpoint(ctx context.Context, checkpoint *params.TrustedCheckpoint) bool { + // Ensure the remote checkpoint head is ahead of us + head := lc.CurrentHeader().Number.Uint64() + + latest := (checkpoint.SectionIndex+1)*lc.indexerConfig.ChtSize - 1 + if clique := lc.hc.Config().Clique; clique != nil { latest -= latest % clique.Epoch // epoch snapshot for clique } if head >= latest { - return false + return true } // Retrieve the latest useful header and update to it - if header, err := GetHeaderByNumber(ctx, self.odr, latest); header != nil && err == nil { - self.mu.Lock() - defer self.mu.Unlock() + if header, err := GetHeaderByNumber(ctx, lc.odr, latest); header != nil && err == nil { + lc.chainmu.Lock() + defer lc.chainmu.Unlock() // Ensure the chain didn't move past the latest block while retrieving it - if self.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() { - log.Info("Updated latest header based on CHT", "number", header.Number, "hash", header.Hash(), "age", common.PrettyAge(time.Unix(header.Time.Int64(), 0))) - self.hc.SetCurrentHeader(header) + if lc.hc.CurrentHeader().Number.Uint64() < header.Number.Uint64() { + log.Info("Updated latest header based on CHT", "number", header.Number, "hash", header.Hash(), "age", common.PrettyAge(time.Unix(int64(header.Time), 0))) + lc.hc.SetCurrentHeader(header) } return true } @@ -498,38 +497,48 @@ func (self *LightChain) SyncCht(ctx context.Context) bool { // LockChain locks the chain mutex for reading so that multiple canonical hashes can be // retrieved while it is guaranteed that they belong to the same version of the chain -func (self *LightChain) LockChain() { - self.chainmu.RLock() +func (lc *LightChain) LockChain() { + lc.chainmu.RLock() } // UnlockChain unlocks the chain mutex -func (self *LightChain) UnlockChain() { - self.chainmu.RUnlock() +func (lc *LightChain) UnlockChain() { + lc.chainmu.RUnlock() } // SubscribeChainEvent registers a subscription of ChainEvent. -func (self *LightChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { - return self.scope.Track(self.chainFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription { + return lc.scope.Track(lc.chainFeed.Subscribe(ch)) } // SubscribeChainHeadEvent registers a subscription of ChainHeadEvent. -func (self *LightChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { - return self.scope.Track(self.chainHeadFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription { + return lc.scope.Track(lc.chainHeadFeed.Subscribe(ch)) } // SubscribeChainSideEvent registers a subscription of ChainSideEvent. -func (self *LightChain) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { - return self.scope.Track(self.chainSideFeed.Subscribe(ch)) +func (lc *LightChain) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription { + return lc.scope.Track(lc.chainSideFeed.Subscribe(ch)) } // SubscribeLogsEvent implements the interface of filters.Backend // LightChain does not send logs events, so return an empty subscription. -func (self *LightChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { - return self.scope.Track(new(event.Feed).Subscribe(ch)) +func (lc *LightChain) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription { + return lc.scope.Track(new(event.Feed).Subscribe(ch)) } // SubscribeRemovedLogsEvent implements the interface of filters.Backend // LightChain does not send core.RemovedLogsEvent, so return an empty subscription. -func (self *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { - return self.scope.Track(new(event.Feed).Subscribe(ch)) +func (lc *LightChain) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { + return lc.scope.Track(new(event.Feed).Subscribe(ch)) +} + +// DisableCheckFreq disables header validation. This is used for ultralight mode. +func (lc *LightChain) DisableCheckFreq() { + atomic.StoreInt32(&lc.disableCheckFreq, 1) +} + +// EnableCheckFreq enables header validation. +func (lc *LightChain) EnableCheckFreq() { + atomic.StoreInt32(&lc.disableCheckFreq, 0) } diff --git a/light/lightchain_test.go b/light/lightchain_test.go index d45c0656d928..70d2e70c189d 100644 --- a/light/lightchain_test.go +++ b/light/lightchain_test.go @@ -52,10 +52,10 @@ func makeHeaderChain(parent *types.Header, n int, db ethdb.Database, seed int) [ // chain. Depending on the full flag, if creates either a full block chain or a // header only chain. func newCanonical(n int) (ethdb.Database, *LightChain, error) { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := core.Genesis{Config: params.TestChainConfig} genesis := gspec.MustCommit(db) - blockchain, _ := NewLightChain(&dummyOdr{db: db, indexerConfig: TestClientIndexerConfig}, gspec.Config, ethash.NewFaker()) + blockchain, _ := NewLightChain(&dummyOdr{db: db, indexerConfig: TestClientIndexerConfig}, gspec.Config, ethash.NewFaker(), nil) // Create and inject the requested chain if n == 0 { @@ -69,13 +69,13 @@ func newCanonical(n int) (ethdb.Database, *LightChain, error) { // newTestLightChain creates a LightChain that doesn't validate anything. func newTestLightChain() *LightChain { - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gspec := &core.Genesis{ Difficulty: big.NewInt(1), Config: params.TestChainConfig, } gspec.MustCommit(db) - lc, err := NewLightChain(&dummyOdr{db: db}, gspec.Config, ethash.NewFullFaker()) + lc, err := NewLightChain(&dummyOdr{db: db}, gspec.Config, ethash.NewFullFaker(), nil) if err != nil { panic(err) } @@ -122,10 +122,10 @@ func testHeaderChainImport(chain []*types.Header, lightchain *LightChain) error return err } // Manually insert the header into the database, but don't reorganize (allows subsequent testing) - lightchain.mu.Lock() + lightchain.chainmu.Lock() rawdb.WriteTd(lightchain.chainDb, header.Hash(), header.Number.Uint64(), new(big.Int).Add(header.Difficulty, lightchain.GetTdByHash(header.ParentHash))) rawdb.WriteHeader(lightchain.chainDb, header) - lightchain.mu.Unlock() + lightchain.chainmu.Unlock() } return nil } @@ -344,7 +344,7 @@ func TestReorgBadHeaderHashes(t *testing.T) { defer func() { delete(core.BadHashes, headers[3].Hash()) }() // Create a new LightChain and check that it rolled back the state. - ncm, err := NewLightChain(&dummyOdr{db: bc.chainDb}, params.TestChainConfig, ethash.NewFaker()) + ncm, err := NewLightChain(&dummyOdr{db: bc.chainDb}, params.TestChainConfig, ethash.NewFaker(), nil) if err != nil { t.Fatalf("failed to create new chain manager: %v", err) } diff --git a/light/nodeset.go b/light/nodeset.go index 6f25219c1305..3662596785c7 100644 --- a/light/nodeset.go +++ b/light/nodeset.go @@ -60,6 +60,15 @@ func (db *NodeSet) Put(key []byte, value []byte) error { return nil } +// Delete removes a node from the set +func (db *NodeSet) Delete(key []byte) error { + db.lock.Lock() + defer db.lock.Unlock() + + delete(db.nodes, string(key)) + return nil +} + // Get returns a stored node func (db *NodeSet) Get(key []byte) ([]byte, error) { db.lock.RLock() @@ -106,7 +115,7 @@ func (db *NodeSet) NodeList() NodeList { } // Store writes the contents of the set to the given database -func (db *NodeSet) Store(target ethdb.Putter) { +func (db *NodeSet) Store(target ethdb.KeyValueWriter) { db.lock.RLock() defer db.lock.RUnlock() @@ -115,11 +124,11 @@ func (db *NodeSet) Store(target ethdb.Putter) { } } -// NodeList stores an ordered list of trie nodes. It implements ethdb.Putter. +// NodeList stores an ordered list of trie nodes. It implements ethdb.KeyValueWriter. type NodeList []rlp.RawValue // Store writes the contents of the list to the given database -func (n NodeList) Store(db ethdb.Putter) { +func (n NodeList) Store(db ethdb.KeyValueWriter) { for _, node := range n { db.Put(crypto.Keccak256(node), node) } @@ -138,6 +147,11 @@ func (n *NodeList) Put(key []byte, value []byte) error { return nil } +// Delete panics as there's no reason to remove a node from the list. +func (n *NodeList) Delete(key []byte) error { + panic("not supported") +} + // DataSize returns the aggregated data size of nodes in the list func (n NodeList) DataSize() int { var size int diff --git a/light/odr.go b/light/odr.go index 900be05440cc..907712ede74f 100644 --- a/light/odr.go +++ b/light/odr.go @@ -14,8 +14,6 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// Package light implements on-demand retrieval capable state and chain objects -// for the Ethereum Light Client. package light import ( @@ -124,19 +122,25 @@ func (req *BlockRequest) StoreResult(db ethdb.Database) { // ReceiptsRequest is the ODR request type for retrieving block bodies type ReceiptsRequest struct { OdrRequest - Hash common.Hash - Number uint64 - Receipts types.Receipts + Untrusted bool // Indicator whether the result retrieved is trusted or not + Hash common.Hash + Number uint64 + Header *types.Header + Receipts types.Receipts } // StoreResult stores the retrieved data in local database func (req *ReceiptsRequest) StoreResult(db ethdb.Database) { - rawdb.WriteReceipts(db, req.Hash, req.Number, req.Receipts) + if !req.Untrusted { + rawdb.WriteReceipts(db, req.Hash, req.Number, req.Receipts) + } } // ChtRequest is the ODR request type for state/storage trie entries type ChtRequest struct { OdrRequest + Untrusted bool // Indicator whether the result retrieved is trusted or not + PeerId string // The specified peer id from which to retrieve data. Config *IndexerConfig ChtNum, BlockNum uint64 ChtRoot common.Hash @@ -149,9 +153,11 @@ type ChtRequest struct { func (req *ChtRequest) StoreResult(db ethdb.Database) { hash, num := req.Header.Hash(), req.Header.Number.Uint64() - rawdb.WriteHeader(db, req.Header) - rawdb.WriteTd(db, hash, num, req.Td) - rawdb.WriteCanonicalHash(db, hash, num) + if !req.Untrusted { + rawdb.WriteHeader(db, req.Header) + rawdb.WriteTd(db, hash, num, req.Td) + rawdb.WriteCanonicalHash(db, hash, num) + } } // BloomRequest is the ODR request type for retrieving bloom filters from a CHT structure @@ -177,3 +183,20 @@ func (req *BloomRequest) StoreResult(db ethdb.Database) { rawdb.WriteBloomBits(db, req.BitIdx, sectionIdx, sectionHead, req.BloomBits[i]) } } + +// TxStatus describes the status of a transaction +type TxStatus struct { + Status core.TxStatus + Lookup *rawdb.LegacyTxLookupEntry `rlp:"nil"` + Error string +} + +// TxStatusRequest is the ODR request type for retrieving transaction status +type TxStatusRequest struct { + OdrRequest + Hashes []common.Hash + Status []TxStatus +} + +// StoreResult stores the retrieved data in local database +func (req *TxStatusRequest) StoreResult(db ethdb.Database) {} diff --git a/light/odr_test.go b/light/odr_test.go index 3da7b3055e3d..debd5544c312 100644 --- a/light/odr_test.go +++ b/light/odr_test.go @@ -79,7 +79,7 @@ func (odr *testOdr) Retrieve(ctx context.Context, req OdrRequest) error { case *ReceiptsRequest: number := rawdb.ReadHeaderNumber(odr.sdb, req.Hash) if number != nil { - req.Receipts = rawdb.ReadReceipts(odr.sdb, req.Hash, *number) + req.Receipts = rawdb.ReadRawReceipts(odr.sdb, req.Hash, *number) } case *TrieRequest: t, _ := trie.New(req.Id.Root, trie.NewDatabase(odr.sdb)) @@ -99,7 +99,7 @@ func (odr *testOdr) IndexerConfig() *IndexerConfig { type odrTestFn func(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) -func TestOdrGetBlockLes1(t *testing.T) { testChainOdr(t, 1, odrGetBlock) } +func TestOdrGetBlockLes2(t *testing.T) { testChainOdr(t, 1, odrGetBlock) } func odrGetBlock(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { var block *types.Block @@ -115,14 +115,14 @@ func odrGetBlock(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc return rlp, nil } -func TestOdrGetReceiptsLes1(t *testing.T) { testChainOdr(t, 1, odrGetReceipts) } +func TestOdrGetReceiptsLes2(t *testing.T) { testChainOdr(t, 1, odrGetReceipts) } func odrGetReceipts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { var receipts types.Receipts if bc != nil { number := rawdb.ReadHeaderNumber(db, bhash) if number != nil { - receipts = rawdb.ReadReceipts(db, bhash, *number) + receipts = rawdb.ReadReceipts(db, bhash, *number, bc.Config()) } } else { number := rawdb.ReadHeaderNumber(db, bhash) @@ -137,7 +137,7 @@ func odrGetReceipts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, return rlp, nil } -func TestOdrAccountsLes1(t *testing.T) { testChainOdr(t, 1, odrAccounts) } +func TestOdrAccountsLes2(t *testing.T) { testChainOdr(t, 1, odrAccounts) } func odrAccounts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc *LightChain, bhash common.Hash) ([]byte, error) { dummyAddr := common.HexToAddress("1234567812345678123456781234567812345678") @@ -161,7 +161,7 @@ func odrAccounts(ctx context.Context, db ethdb.Database, bc *core.BlockChain, lc return res, st.Error() } -func TestOdrContractCallLes1(t *testing.T) { testChainOdr(t, 1, odrContractCall) } +func TestOdrContractCallLes2(t *testing.T) { testChainOdr(t, 1, odrContractCall) } type callmsg struct { types.Message @@ -250,8 +250,8 @@ func testChainGen(i int, block *core.BlockGen) { func testChainOdr(t *testing.T, protocol int, fn odrTestFn) { var ( - sdb = ethdb.NewMemDatabase() - ldb = ethdb.NewMemDatabase() + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(sdb) ) @@ -264,7 +264,7 @@ func testChainOdr(t *testing.T, protocol int, fn odrTestFn) { } odr := &testOdr{sdb: sdb, ldb: ldb, indexerConfig: TestClientIndexerConfig} - lightchain, err := NewLightChain(odr, params.TestChainConfig, ethash.NewFullFaker()) + lightchain, err := NewLightChain(odr, params.TestChainConfig, ethash.NewFullFaker(), nil) if err != nil { t.Fatal(err) } diff --git a/light/odr_util.go b/light/odr_util.go index 073f0d64296b..2c820d40c783 100644 --- a/light/odr_util.go +++ b/light/odr_util.go @@ -28,7 +28,7 @@ import ( "github.com/ethereum/go-ethereum/rlp" ) -var sha3_nil = crypto.Keccak256Hash(nil) +var sha3Nil = crypto.Keccak256Hash(nil) func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*types.Header, error) { db := odr.Database() @@ -60,7 +60,7 @@ func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*typ } } if number >= chtCount*odr.IndexerConfig().ChtSize { - return nil, ErrNoTrustedCht + return nil, errNoTrustedCht } r := &ChtRequest{ChtRoot: GetChtRoot(db, chtCount-1, sectionHead), ChtNum: chtCount - 1, BlockNum: number, Config: odr.IndexerConfig()} if err := odr.Retrieve(ctx, r); err != nil { @@ -69,6 +69,16 @@ func GetHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64) (*typ return r.Header, nil } +// GetUntrustedHeaderByNumber fetches specified block header without correctness checking. +// Note this function should only be used in light client checkpoint syncing. +func GetUntrustedHeaderByNumber(ctx context.Context, odr OdrBackend, number uint64, peerId string) (*types.Header, error) { + r := &ChtRequest{BlockNum: number, ChtNum: number / odr.IndexerConfig().ChtSize, Untrusted: true, PeerId: peerId, Config: odr.IndexerConfig()} + if err := odr.Retrieve(ctx, r); err != nil { + return nil, err + } + return r.Header, nil +} + func GetCanonicalHash(ctx context.Context, odr OdrBackend, number uint64) (common.Hash, error) { hash := rawdb.ReadCanonicalHash(odr.Database(), number) if (hash != common.Hash{}) { @@ -114,7 +124,7 @@ func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint // Retrieve the block header and body contents header := rawdb.ReadHeader(odr.Database(), hash, number) if header == nil { - return nil, ErrNoHeader + return nil, errNoHeader } body, err := GetBody(ctx, odr, hash, number) if err != nil { @@ -127,8 +137,8 @@ func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint // GetBlockReceipts retrieves the receipts generated by the transactions included // in a block given by its hash. func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (types.Receipts, error) { - // Retrieve the potentially incomplete receipts from disk or network - receipts := rawdb.ReadReceipts(odr.Database(), hash, number) + // Assume receipts are already stored locally and attempt to retrieve. + receipts := rawdb.ReadRawReceipts(odr.Database(), hash, number) if receipts == nil { r := &ReceiptsRequest{Hash: hash, Number: number} if err := odr.Retrieve(ctx, r); err != nil { @@ -145,7 +155,7 @@ func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, num genesis := rawdb.ReadCanonicalHash(odr.Database(), 0) config := rawdb.ReadChainConfig(odr.Database(), genesis) - if err := core.SetReceiptsData(config, block, receipts); err != nil { + if err := receipts.DeriveFields(config, block.Hash(), block.NumberU64(), block.Transactions()); err != nil { return nil, err } rawdb.WriteReceipts(odr.Database(), hash, number, receipts) @@ -157,13 +167,33 @@ func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, num // block given by its hash. func GetBlockLogs(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) ([][]*types.Log, error) { // Retrieve the potentially incomplete receipts from disk or network - receipts := rawdb.ReadReceipts(odr.Database(), hash, number) + receipts, err := GetBlockReceipts(ctx, odr, hash, number) + if err != nil { + return nil, err + } + // Return the logs without deriving any computed fields on the receipts + logs := make([][]*types.Log, len(receipts)) + for i, receipt := range receipts { + logs[i] = receipt.Logs + } + return logs, nil +} + +// GetUntrustedBlockLogs retrieves the logs generated by the transactions included in a +// block. The retrieved logs are regarded as untrusted and will not be stored in the +// database. This function should only be used in light client checkpoint syncing. +func GetUntrustedBlockLogs(ctx context.Context, odr OdrBackend, header *types.Header) ([][]*types.Log, error) { + // Retrieve the potentially incomplete receipts from disk or network + hash, number := header.Hash(), header.Number.Uint64() + receipts := rawdb.ReadRawReceipts(odr.Database(), hash, number) if receipts == nil { - r := &ReceiptsRequest{Hash: hash, Number: number} + r := &ReceiptsRequest{Hash: hash, Number: number, Header: header, Untrusted: true} if err := odr.Retrieve(ctx, r); err != nil { return nil, err } receipts = r.Receipts + // Untrusted receipts won't be stored in the database. Therefore + // derived fields computation is unnecessary. } // Return the logs without deriving any computed fields on the receipts logs := make([][]*types.Log, len(receipts)) @@ -211,7 +241,7 @@ func GetBloomBits(ctx context.Context, odr OdrBackend, bitIdx uint, sectionIdxLi } else { // TODO(rjl493456442) Convert sectionIndex to BloomTrie relative index if sectionIdx >= bloomTrieCount { - return nil, ErrNoTrustedBloomTrie + return nil, errNoTrustedBloomTrie } reqList = append(reqList, sectionIdx) reqIdx = append(reqIdx, i) @@ -232,3 +262,23 @@ func GetBloomBits(ctx context.Context, odr OdrBackend, bitIdx uint, sectionIdxLi return result, nil } } + +// GetTransaction retrieves a canonical transaction by hash and also returns its position in the chain +func GetTransaction(ctx context.Context, odr OdrBackend, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error) { + r := &TxStatusRequest{Hashes: []common.Hash{txHash}} + if err := odr.Retrieve(ctx, r); err != nil || r.Status[0].Status != core.TxStatusIncluded { + return nil, common.Hash{}, 0, 0, err + } else { + pos := r.Status[0].Lookup + // first ensure that we have the header, otherwise block body retrieval will fail + // also verify if this is a canonical block by getting the header by number and checking its hash + if header, err := GetHeaderByNumber(ctx, odr, pos.BlockIndex); err != nil || header.Hash() != pos.BlockHash { + return nil, common.Hash{}, 0, 0, err + } + if body, err := GetBody(ctx, odr, pos.BlockHash, pos.BlockIndex); err != nil || uint64(len(body.Transactions)) <= pos.Index || body.Transactions[pos.Index].Hash() != txHash { + return nil, common.Hash{}, 0, 0, err + } else { + return body.Transactions[pos.Index], pos.BlockHash, pos.BlockIndex, pos.Index, nil + } + } +} diff --git a/light/postprocess.go b/light/postprocess.go index dd1b74a7bebe..083dcfceb202 100644 --- a/light/postprocess.go +++ b/light/postprocess.go @@ -41,9 +41,6 @@ type IndexerConfig struct { // The block frequency for creating CHTs. ChtSize uint64 - // A special auxiliary field represents client's chtsize for server config, otherwise represents server's chtsize. - PairChtSize uint64 - // The number of confirmations needed to generate/accept a canonical hash help trie. ChtConfirms uint64 @@ -64,8 +61,7 @@ type IndexerConfig struct { var ( // DefaultServerIndexerConfig wraps a set of configs as a default indexer config for server side. DefaultServerIndexerConfig = &IndexerConfig{ - ChtSize: params.CHTFrequencyServer, - PairChtSize: params.CHTFrequencyClient, + ChtSize: params.CHTFrequency, ChtConfirms: params.HelperTrieProcessConfirmations, BloomSize: params.BloomBitsBlocks, BloomConfirms: params.BloomConfirms, @@ -74,8 +70,7 @@ var ( } // DefaultClientIndexerConfig wraps a set of configs as a default indexer config for client side. DefaultClientIndexerConfig = &IndexerConfig{ - ChtSize: params.CHTFrequencyClient, - PairChtSize: params.CHTFrequencyServer, + ChtSize: params.CHTFrequency, ChtConfirms: params.HelperTrieConfirmations, BloomSize: params.BloomBitsBlocksClient, BloomConfirms: params.HelperTrieConfirmations, @@ -84,8 +79,7 @@ var ( } // TestServerIndexerConfig wraps a set of configs as a test indexer config for server side. TestServerIndexerConfig = &IndexerConfig{ - ChtSize: 64, - PairChtSize: 512, + ChtSize: 512, ChtConfirms: 4, BloomSize: 64, BloomConfirms: 4, @@ -95,7 +89,6 @@ var ( // TestClientIndexerConfig wraps a set of configs as a test indexer config for client side. TestClientIndexerConfig = &IndexerConfig{ ChtSize: 512, - PairChtSize: 64, ChtConfirms: 32, BloomSize: 512, BloomConfirms: 32, @@ -104,18 +97,11 @@ var ( } ) -// trustedCheckpoints associates each known checkpoint with the genesis hash of the chain it belongs to -var trustedCheckpoints = map[common.Hash]*params.TrustedCheckpoint{ - params.MainnetGenesisHash: params.MainnetTrustedCheckpoint, - params.TestnetGenesisHash: params.TestnetTrustedCheckpoint, - params.RinkebyGenesisHash: params.RinkebyTrustedCheckpoint, -} - var ( - ErrNoTrustedCht = errors.New("no trusted canonical hash trie") - ErrNoTrustedBloomTrie = errors.New("no trusted bloom trie") - ErrNoHeader = errors.New("header not found") - chtPrefix = []byte("chtRoot-") // chtPrefix + chtNum (uint64 big endian) -> trie root hash + errNoTrustedCht = errors.New("no trusted canonical hash trie") + errNoTrustedBloomTrie = errors.New("no trusted bloom trie") + errNoHeader = errors.New("header not found") + chtPrefix = []byte("chtRootV2-") // chtPrefix + chtNum (uint64 big endian) -> trie root hash ChtTablePrefix = "cht-" ) @@ -126,7 +112,6 @@ type ChtNode struct { } // GetChtRoot reads the CHT root associated to the given section from the database -// Note that sectionIdx is specified according to LES/1 CHT section size. func GetChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.Hash) common.Hash { var encNumber [8]byte binary.BigEndian.PutUint64(encNumber[:], sectionIdx) @@ -135,7 +120,6 @@ func GetChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead common.Hash) c } // StoreChtRoot writes the CHT root associated to the given section into the database -// Note that sectionIdx is specified according to LES/1 CHT section size. func StoreChtRoot(db ethdb.Database, sectionIdx uint64, sectionHead, root common.Hash) { var encNumber [8]byte binary.BigEndian.PutUint64(encNumber[:], sectionIdx) @@ -154,7 +138,7 @@ type ChtIndexerBackend struct { // NewChtIndexer creates a Cht chain indexer func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64) *core.ChainIndexer { - trieTable := ethdb.NewTable(db, ChtTablePrefix) + trieTable := rawdb.NewTable(db, ChtTablePrefix) backend := &ChtIndexerBackend{ diskdb: db, odr: odr, @@ -162,7 +146,7 @@ func NewChtIndexer(db ethdb.Database, odr OdrBackend, size, confirms uint64) *co triedb: trie.NewDatabaseWithCache(trieTable, 1), // Use a tiny cache only to keep memory down sectionSize: size, } - return core.NewChainIndexer(db, ethdb.NewTable(db, "chtIndex-"), backend, size, confirms, time.Millisecond*100, "cht") + return core.NewChainIndexer(db, rawdb.NewTable(db, "chtIndexV2-"), backend, size, confirms, time.Millisecond*100, "cht") } // fetchMissingNodes tries to retrieve the last entry of the latest trusted CHT from the @@ -234,9 +218,7 @@ func (c *ChtIndexerBackend) Commit() error { } c.triedb.Commit(root, false) - if ((c.section+1)*c.sectionSize)%params.CHTFrequencyClient == 0 { - log.Info("Storing CHT", "section", c.section*c.sectionSize/params.CHTFrequencyClient, "head", fmt.Sprintf("%064x", c.lastHash), "root", fmt.Sprintf("%064x", root)) - } + log.Info("Storing CHT", "section", c.section, "head", fmt.Sprintf("%064x", c.lastHash), "root", fmt.Sprintf("%064x", root)) StoreChtRoot(c.diskdb, c.section, c.lastHash, root) return nil } @@ -276,7 +258,7 @@ type BloomTrieIndexerBackend struct { // NewBloomTrieIndexer creates a BloomTrie chain indexer func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uint64) *core.ChainIndexer { - trieTable := ethdb.NewTable(db, BloomTrieTablePrefix) + trieTable := rawdb.NewTable(db, BloomTrieTablePrefix) backend := &BloomTrieIndexerBackend{ diskdb: db, odr: odr, @@ -287,7 +269,7 @@ func NewBloomTrieIndexer(db ethdb.Database, odr OdrBackend, parentSize, size uin } backend.bloomTrieRatio = size / parentSize backend.sectionHeads = make([]common.Hash, backend.bloomTrieRatio) - return core.NewChainIndexer(db, ethdb.NewTable(db, "bltIndex-"), backend, size, 0, time.Millisecond*100, "bloomtrie") + return core.NewChainIndexer(db, rawdb.NewTable(db, "bltIndex-"), backend, size, 0, time.Millisecond*100, "bloomtrie") } // fetchMissingNodes tries to retrieve the last entries of the latest trusted bloom trie from the diff --git a/light/trie.go b/light/trie.go index ab4e18b43eec..e512bf6f9562 100644 --- a/light/trie.go +++ b/light/trie.go @@ -67,7 +67,7 @@ func (db *odrDatabase) CopyTrie(t state.Trie) state.Trie { } func (db *odrDatabase) ContractCode(addrHash, codeHash common.Hash) ([]byte, error) { - if codeHash == sha3_nil { + if codeHash == sha3Nil { return nil, nil } if code, err := db.backend.Database().Get(codeHash[:]); err == nil { @@ -141,7 +141,7 @@ func (t *odrTrie) GetKey(sha []byte) []byte { return nil } -func (t *odrTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *odrTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) error { return errors.New("not implemented, needs client/server interface split") } diff --git a/light/trie_test.go b/light/trie_test.go index 5b5fce31d9a5..4919f89641eb 100644 --- a/light/trie_test.go +++ b/light/trie_test.go @@ -25,17 +25,17 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" ) func TestNodeIterator(t *testing.T) { var ( - fulldb = ethdb.NewMemDatabase() - lightdb = ethdb.NewMemDatabase() + fulldb = rawdb.NewMemoryDatabase() + lightdb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(fulldb) ) diff --git a/light/txpool.go b/light/txpool.go index 767a797bdcec..11a0e76ae01e 100644 --- a/light/txpool.go +++ b/light/txpool.go @@ -19,6 +19,7 @@ package light import ( "context" "fmt" + "math/big" "sync" "time" @@ -67,7 +68,7 @@ type TxPool struct { mined map[common.Hash][]*types.Transaction // mined transactions by block hash clearIdx uint64 // earliest block nr that can contain mined tx info - homestead bool + istanbul bool // Fork indicator whether we are in the istanbul stage. } // TxRelayBackend provides an interface to the mechanism that forwards transacions @@ -309,8 +310,10 @@ func (pool *TxPool) setNewHead(head *types.Header) { txc, _ := pool.reorgOnNewHead(ctx, head) m, r := txc.getLists() pool.relay.NewHead(pool.head, m, r) - pool.homestead = pool.config.IsHomestead(head.Number) - pool.signer = types.MakeSigner(pool.config, head.Number) + + // Update fork indicator by next pending block number + next := new(big.Int).Add(head.Number, big.NewInt(1)) + pool.istanbul = pool.config.IsIstanbul(next) } // Stop stops the light transaction pool @@ -378,7 +381,7 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error } // Should supply enough intrinsic gas - gas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, pool.homestead) + gas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, true, pool.istanbul) if err != nil { return err } @@ -390,81 +393,81 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error // add validates a new transaction and sets its state pending if processable. // It also updates the locally stored nonce if necessary. -func (self *TxPool) add(ctx context.Context, tx *types.Transaction) error { +func (pool *TxPool) add(ctx context.Context, tx *types.Transaction) error { hash := tx.Hash() - if self.pending[hash] != nil { + if pool.pending[hash] != nil { return fmt.Errorf("Known transaction (%x)", hash[:4]) } - err := self.validateTx(ctx, tx) + err := pool.validateTx(ctx, tx) if err != nil { return err } - if _, ok := self.pending[hash]; !ok { - self.pending[hash] = tx + if _, ok := pool.pending[hash]; !ok { + pool.pending[hash] = tx nonce := tx.Nonce() + 1 - addr, _ := types.Sender(self.signer, tx) - if nonce > self.nonce[addr] { - self.nonce[addr] = nonce + addr, _ := types.Sender(pool.signer, tx) + if nonce > pool.nonce[addr] { + pool.nonce[addr] = nonce } // Notify the subscribers. This event is posted in a goroutine // because it's possible that somewhere during the post "Remove transaction" // gets called which will then wait for the global tx pool lock and deadlock. - go self.txFeed.Send(core.NewTxsEvent{Txs: types.Transactions{tx}}) + go pool.txFeed.Send(core.NewTxsEvent{Txs: types.Transactions{tx}}) } // Print a log message if low enough level is set - log.Debug("Pooled new transaction", "hash", hash, "from", log.Lazy{Fn: func() common.Address { from, _ := types.Sender(self.signer, tx); return from }}, "to", tx.To()) + log.Debug("Pooled new transaction", "hash", hash, "from", log.Lazy{Fn: func() common.Address { from, _ := types.Sender(pool.signer, tx); return from }}, "to", tx.To()) return nil } // Add adds a transaction to the pool if valid and passes it to the tx relay // backend -func (self *TxPool) Add(ctx context.Context, tx *types.Transaction) error { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) Add(ctx context.Context, tx *types.Transaction) error { + pool.mu.Lock() + defer pool.mu.Unlock() data, err := rlp.EncodeToBytes(tx) if err != nil { return err } - if err := self.add(ctx, tx); err != nil { + if err := pool.add(ctx, tx); err != nil { return err } //fmt.Println("Send", tx.Hash()) - self.relay.Send(types.Transactions{tx}) + pool.relay.Send(types.Transactions{tx}) - self.chainDb.Put(tx.Hash().Bytes(), data) + pool.chainDb.Put(tx.Hash().Bytes(), data) return nil } // AddTransactions adds all valid transactions to the pool and passes them to // the tx relay backend -func (self *TxPool) AddBatch(ctx context.Context, txs []*types.Transaction) { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) AddBatch(ctx context.Context, txs []*types.Transaction) { + pool.mu.Lock() + defer pool.mu.Unlock() var sendTx types.Transactions for _, tx := range txs { - if err := self.add(ctx, tx); err == nil { + if err := pool.add(ctx, tx); err == nil { sendTx = append(sendTx, tx) } } if len(sendTx) > 0 { - self.relay.Send(sendTx) + pool.relay.Send(sendTx) } } // GetTransaction returns a transaction if it is contained in the pool // and nil otherwise. -func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction { +func (pool *TxPool) GetTransaction(hash common.Hash) *types.Transaction { // check the txs first - if tx, ok := tp.pending[hash]; ok { + if tx, ok := pool.pending[hash]; ok { return tx } return nil @@ -472,13 +475,13 @@ func (tp *TxPool) GetTransaction(hash common.Hash) *types.Transaction { // GetTransactions returns all currently processable transactions. // The returned slice may be modified by the caller. -func (self *TxPool) GetTransactions() (txs types.Transactions, err error) { - self.mu.RLock() - defer self.mu.RUnlock() +func (pool *TxPool) GetTransactions() (txs types.Transactions, err error) { + pool.mu.RLock() + defer pool.mu.RUnlock() - txs = make(types.Transactions, len(self.pending)) + txs = make(types.Transactions, len(pool.pending)) i := 0 - for _, tx := range self.pending { + for _, tx := range pool.pending { txs[i] = tx i++ } @@ -487,14 +490,14 @@ func (self *TxPool) GetTransactions() (txs types.Transactions, err error) { // Content retrieves the data content of the transaction pool, returning all the // pending as well as queued transactions, grouped by account and nonce. -func (self *TxPool) Content() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) { - self.mu.RLock() - defer self.mu.RUnlock() +func (pool *TxPool) Content() (map[common.Address]types.Transactions, map[common.Address]types.Transactions) { + pool.mu.RLock() + defer pool.mu.RUnlock() // Retrieve all the pending transactions and sort by account and by nonce pending := make(map[common.Address]types.Transactions) - for _, tx := range self.pending { - account, _ := types.Sender(self.signer, tx) + for _, tx := range pool.pending { + account, _ := types.Sender(pool.signer, tx) pending[account] = append(pending[account], tx) } // There are no queued transactions in a light pool, just return an empty map @@ -503,20 +506,20 @@ func (self *TxPool) Content() (map[common.Address]types.Transactions, map[common } // RemoveTransactions removes all given transactions from the pool. -func (self *TxPool) RemoveTransactions(txs types.Transactions) { - self.mu.Lock() - defer self.mu.Unlock() +func (pool *TxPool) RemoveTransactions(txs types.Transactions) { + pool.mu.Lock() + defer pool.mu.Unlock() var hashes []common.Hash - batch := self.chainDb.NewBatch() + batch := pool.chainDb.NewBatch() for _, tx := range txs { hash := tx.Hash() - delete(self.pending, hash) + delete(pool.pending, hash) batch.Delete(hash.Bytes()) hashes = append(hashes, hash) } batch.Write() - self.relay.Discard(hashes) + pool.relay.Discard(hashes) } // RemoveTx removes the transaction with the given hash from the pool. diff --git a/light/txpool_test.go b/light/txpool_test.go index ce77573efd81..0996bd7c9cc0 100644 --- a/light/txpool_test.go +++ b/light/txpool_test.go @@ -26,9 +26,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -81,8 +81,8 @@ func TestTxPool(t *testing.T) { } var ( - sdb = ethdb.NewMemDatabase() - ldb = ethdb.NewMemDatabase() + sdb = rawdb.NewMemoryDatabase() + ldb = rawdb.NewMemoryDatabase() gspec = core.Genesis{Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}} genesis = gspec.MustCommit(sdb) ) @@ -100,7 +100,7 @@ func TestTxPool(t *testing.T) { discard: make(chan int, 1), mined: make(chan int, 1), } - lightchain, _ := NewLightChain(odr, params.TestChainConfig, ethash.NewFullFaker()) + lightchain, _ := NewLightChain(odr, params.TestChainConfig, ethash.NewFullFaker(), nil) txPermanent = 50 pool := NewTxPool(params.TestChainConfig, lightchain, relay) ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) diff --git a/log/format.go b/log/format.go index 7902b296e6e9..a1b5dac62953 100644 --- a/log/format.go +++ b/log/format.go @@ -14,10 +14,11 @@ import ( ) const ( - timeFormat = "2006-01-02T15:04:05-0700" - termTimeFormat = "01-02|15:04:05.000" - floatFormat = 'f' - termMsgJust = 40 + timeFormat = "2006-01-02T15:04:05-0700" + termTimeFormat = "01-02|15:04:05.000" + floatFormat = 'f' + termMsgJust = 40 + termCtxMaxPadding = 40 ) // locationTrims are trimmed for display to avoid unwieldy log lines. @@ -175,7 +176,7 @@ func logfmt(buf *bytes.Buffer, ctx []interface{}, color int, term bool) { fieldPaddingLock.RUnlock() length := utf8.RuneCountInString(v) - if padding < length { + if padding < length && length <= termCtxMaxPadding { padding = length fieldPaddingLock.Lock() @@ -189,7 +190,7 @@ func logfmt(buf *bytes.Buffer, ctx []interface{}, color int, term bool) { buf.WriteByte('=') } buf.WriteString(v) - if i < len(ctx)-2 { + if i < len(ctx)-2 && padding > length { buf.Write(bytes.Repeat([]byte{' '}, padding-length)) } } diff --git a/swarm/storage/mock/mem/mem_test.go b/metrics/cpu.go similarity index 57% rename from swarm/storage/mock/mem/mem_test.go rename to metrics/cpu.go index adcefaabb41d..3278d81616a3 100644 --- a/swarm/storage/mock/mem/mem_test.go +++ b/metrics/cpu.go @@ -14,23 +14,23 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package mem +package metrics -import ( - "testing" +import "github.com/elastic/gosigar" - "github.com/ethereum/go-ethereum/swarm/storage/mock/test" -) - -// TestGlobalStore is running test for a GlobalStore -// using test.MockStore function. -func TestGlobalStore(t *testing.T) { - test.MockStore(t, NewGlobalStore(), 100) +// CPUStats is the system and process CPU stats. +type CPUStats struct { + GlobalTime int64 // Time spent by the CPU working on all processes + GlobalWait int64 // Time spent by waiting on disk for all processes + LocalTime int64 // Time spent by the CPU working on this process } -// TestImportExport is running tests for importing and -// exporting data between two GlobalStores -// using test.ImportExport function. -func TestImportExport(t *testing.T) { - test.ImportExport(t, NewGlobalStore(), NewGlobalStore(), 100) +// ReadCPUStats retrieves the current CPU stats. +func ReadCPUStats(stats *CPUStats) { + global := gosigar.Cpu{} + global.Get() + + stats.GlobalTime = int64(global.User + global.Nice + global.Sys) + stats.GlobalWait = int64(global.Wait) + stats.LocalTime = getProcessCPUTime() } diff --git a/swarm/storage/feed/query_test.go b/metrics/cpu_syscall.go similarity index 63% rename from swarm/storage/feed/query_test.go rename to metrics/cpu_syscall.go index 9fa5e29800d5..e245453e824f 100644 --- a/swarm/storage/feed/query_test.go +++ b/metrics/cpu_syscall.go @@ -14,25 +14,22 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package feed +// +build !windows + +package metrics import ( - "testing" + "syscall" + + "github.com/ethereum/go-ethereum/log" ) -func getTestQuery() *Query { - id := getTestID() - return &Query{ - TimeLimit: 5000, - Feed: id.Feed, - Hint: id.Epoch, +// getProcessCPUTime retrieves the process' CPU time since program startup. +func getProcessCPUTime() int64 { + var usage syscall.Rusage + if err := syscall.Getrusage(syscall.RUSAGE_SELF, &usage); err != nil { + log.Warn("Failed to retrieve CPU time", "err", err) + return 0 } -} - -func TestQueryValues(t *testing.T) { - var expected = KV{"hint.level": "25", "hint.time": "1000", "time": "5000", "topic": "0x776f726c64206e657773207265706f72742c20657665727920686f7572000000", "user": "0x876A8936A7Cd0b79Ef0735AD0896c1AFe278781c"} - - query := getTestQuery() - testValueSerializer(t, query, expected) - + return int64(usage.Utime.Sec+usage.Stime.Sec)*100 + int64(usage.Utime.Usec+usage.Stime.Usec)/10000 //nolint:unconvert } diff --git a/swarm/pss/handshake_none.go b/metrics/cpu_windows.go similarity index 82% rename from swarm/pss/handshake_none.go rename to metrics/cpu_windows.go index a09674be3971..fb29a52a82c1 100644 --- a/swarm/pss/handshake_none.go +++ b/metrics/cpu_windows.go @@ -14,14 +14,10 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build nopsshandshake +package metrics -package pss - -const ( - IsActiveHandshake = false -) - -func NewHandshakeParams() interface{} { - return nil +// getProcessCPUTime returns 0 on Windows as there is no system call to resolve +// the actual process' CPU time. +func getProcessCPUTime() int64 { + return 0 } diff --git a/metrics/exp/exp.go b/metrics/exp/exp.go index 325a193c77a6..55820f1aab2f 100644 --- a/metrics/exp/exp.go +++ b/metrics/exp/exp.go @@ -9,6 +9,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/metrics/prometheus" ) type exp struct { @@ -42,6 +43,7 @@ func Exp(r metrics.Registry) { // http.HandleFunc("/debug/vars", e.expHandler) // haven't found an elegant way, so just use a different endpoint http.Handle("/debug/metrics", h) + http.Handle("/debug/metrics/prometheus", prometheus.Handler(r)) } // ExpHandler will return an expvar powered metrics handler. diff --git a/metrics/gauge.go b/metrics/gauge.go index 0fbfdb86033b..b6b2758b0d13 100644 --- a/metrics/gauge.go +++ b/metrics/gauge.go @@ -6,6 +6,8 @@ import "sync/atomic" type Gauge interface { Snapshot() Gauge Update(int64) + Dec(int64) + Inc(int64) Value() int64 } @@ -65,6 +67,16 @@ func (GaugeSnapshot) Update(int64) { panic("Update called on a GaugeSnapshot") } +// Dec panics. +func (GaugeSnapshot) Dec(int64) { + panic("Dec called on a GaugeSnapshot") +} + +// Inc panics. +func (GaugeSnapshot) Inc(int64) { + panic("Inc called on a GaugeSnapshot") +} + // Value returns the value at the time the snapshot was taken. func (g GaugeSnapshot) Value() int64 { return int64(g) } @@ -77,6 +89,12 @@ func (NilGauge) Snapshot() Gauge { return NilGauge{} } // Update is a no-op. func (NilGauge) Update(v int64) {} +// Dec is a no-op. +func (NilGauge) Dec(i int64) {} + +// Inc is a no-op. +func (NilGauge) Inc(i int64) {} + // Value is a no-op. func (NilGauge) Value() int64 { return 0 } @@ -101,6 +119,16 @@ func (g *StandardGauge) Value() int64 { return atomic.LoadInt64(&g.value) } +// Dec decrements the gauge's current value by the given amount. +func (g *StandardGauge) Dec(i int64) { + atomic.AddInt64(&g.value, -i) +} + +// Inc increments the gauge's current value by the given amount. +func (g *StandardGauge) Inc(i int64) { + atomic.AddInt64(&g.value, i) +} + // FunctionalGauge returns value from given function type FunctionalGauge struct { value func() int64 @@ -118,3 +146,13 @@ func (g FunctionalGauge) Snapshot() Gauge { return GaugeSnapshot(g.Value()) } func (FunctionalGauge) Update(int64) { panic("Update called on a FunctionalGauge") } + +// Dec panics. +func (FunctionalGauge) Dec(int64) { + panic("Dec called on a FunctionalGauge") +} + +// Inc panics. +func (FunctionalGauge) Inc(int64) { + panic("Inc called on a FunctionalGauge") +} diff --git a/metrics/influxdb/influxdb.go b/metrics/influxdb/influxdb.go index c4ef927234d5..6619915fdba3 100644 --- a/metrics/influxdb/influxdb.go +++ b/metrics/influxdb/influxdb.go @@ -91,6 +91,7 @@ func (r *reporter) makeClient() (err error) { URL: r.url, Username: r.username, Password: r.password, + Timeout: 10 * time.Second, }) return diff --git a/metrics/metrics.go b/metrics/metrics.go index 2a2b804e7c96..8ab4e28f2c79 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -15,24 +15,41 @@ import ( ) // Enabled is checked by the constructor functions for all of the -// standard metrics. If it is true, the metric returned is a stub. +// standard metrics. If it is true, the metric returned is a stub. // // This global kill-switch helps quantify the observer effect and makes // for less cluttered pprof profiles. -var Enabled bool = false +var Enabled = false -// MetricsEnabledFlag is the CLI flag name to use to enable metrics collections. -const MetricsEnabledFlag = "metrics" -const DashboardEnabledFlag = "dashboard" +// EnabledExpensive is a soft-flag meant for external packages to check if costly +// metrics gathering is allowed or not. The goal is to separate standard metrics +// for health monitoring and debug metrics that might impact runtime performance. +var EnabledExpensive = false + +// enablerFlags is the CLI flag names to use to enable metrics collections. +var enablerFlags = []string{"metrics", "dashboard"} + +// expensiveEnablerFlags is the CLI flag names to use to enable metrics collections. +var expensiveEnablerFlags = []string{"metrics.expensive"} // Init enables or disables the metrics system. Since we need this to run before // any other code gets to create meters and timers, we'll actually do an ugly hack // and peek into the command line args for the metrics flag. func init() { for _, arg := range os.Args { - if flag := strings.TrimLeft(arg, "-"); flag == MetricsEnabledFlag || flag == DashboardEnabledFlag { - log.Info("Enabling metrics collection") - Enabled = true + flag := strings.TrimLeft(arg, "-") + + for _, enabler := range enablerFlags { + if !Enabled && flag == enabler { + log.Info("Enabling metrics collection") + Enabled = true + } + } + for _, enabler := range expensiveEnablerFlags { + if !EnabledExpensive && flag == enabler { + log.Info("Enabling expensive metrics collection") + EnabledExpensive = true + } } } } @@ -44,41 +61,56 @@ func CollectProcessMetrics(refresh time.Duration) { if !Enabled { return } + refreshFreq := int64(refresh / time.Second) + // Create the various data collectors + cpuStats := make([]*CPUStats, 2) memstats := make([]*runtime.MemStats, 2) diskstats := make([]*DiskStats, 2) for i := 0; i < len(memstats); i++ { + cpuStats[i] = new(CPUStats) memstats[i] = new(runtime.MemStats) diskstats[i] = new(DiskStats) } // Define the various metrics to collect - memAllocs := GetOrRegisterMeter("system/memory/allocs", DefaultRegistry) - memFrees := GetOrRegisterMeter("system/memory/frees", DefaultRegistry) - memInuse := GetOrRegisterMeter("system/memory/inuse", DefaultRegistry) - memPauses := GetOrRegisterMeter("system/memory/pauses", DefaultRegistry) - - var diskReads, diskReadBytes, diskWrites, diskWriteBytes Meter - var diskReadBytesCounter, diskWriteBytesCounter Counter - if err := ReadDiskStats(diskstats[0]); err == nil { - diskReads = GetOrRegisterMeter("system/disk/readcount", DefaultRegistry) - diskReadBytes = GetOrRegisterMeter("system/disk/readdata", DefaultRegistry) - diskReadBytesCounter = GetOrRegisterCounter("system/disk/readbytes", DefaultRegistry) - diskWrites = GetOrRegisterMeter("system/disk/writecount", DefaultRegistry) - diskWriteBytes = GetOrRegisterMeter("system/disk/writedata", DefaultRegistry) + var ( + cpuSysLoad = GetOrRegisterGauge("system/cpu/sysload", DefaultRegistry) + cpuSysWait = GetOrRegisterGauge("system/cpu/syswait", DefaultRegistry) + cpuProcLoad = GetOrRegisterGauge("system/cpu/procload", DefaultRegistry) + cpuThreads = GetOrRegisterGauge("system/cpu/threads", DefaultRegistry) + cpuGoroutines = GetOrRegisterGauge("system/cpu/goroutines", DefaultRegistry) + + memPauses = GetOrRegisterMeter("system/memory/pauses", DefaultRegistry) + memAllocs = GetOrRegisterMeter("system/memory/allocs", DefaultRegistry) + memFrees = GetOrRegisterMeter("system/memory/frees", DefaultRegistry) + memHeld = GetOrRegisterGauge("system/memory/held", DefaultRegistry) + memUsed = GetOrRegisterGauge("system/memory/used", DefaultRegistry) + + diskReads = GetOrRegisterMeter("system/disk/readcount", DefaultRegistry) + diskReadBytes = GetOrRegisterMeter("system/disk/readdata", DefaultRegistry) + diskReadBytesCounter = GetOrRegisterCounter("system/disk/readbytes", DefaultRegistry) + diskWrites = GetOrRegisterMeter("system/disk/writecount", DefaultRegistry) + diskWriteBytes = GetOrRegisterMeter("system/disk/writedata", DefaultRegistry) diskWriteBytesCounter = GetOrRegisterCounter("system/disk/writebytes", DefaultRegistry) - } else { - log.Debug("Failed to read disk metrics", "err", err) - } + ) // Iterate loading the different stats and updating the meters for i := 1; ; i++ { location1 := i % 2 location2 := (i - 1) % 2 + ReadCPUStats(cpuStats[location1]) + cpuSysLoad.Update((cpuStats[location1].GlobalTime - cpuStats[location2].GlobalTime) / refreshFreq) + cpuSysWait.Update((cpuStats[location1].GlobalWait - cpuStats[location2].GlobalWait) / refreshFreq) + cpuProcLoad.Update((cpuStats[location1].LocalTime - cpuStats[location2].LocalTime) / refreshFreq) + cpuThreads.Update(int64(threadCreateProfile.Count())) + cpuGoroutines.Update(int64(runtime.NumGoroutine())) + runtime.ReadMemStats(memstats[location1]) + memPauses.Mark(int64(memstats[location1].PauseTotalNs - memstats[location2].PauseTotalNs)) memAllocs.Mark(int64(memstats[location1].Mallocs - memstats[location2].Mallocs)) memFrees.Mark(int64(memstats[location1].Frees - memstats[location2].Frees)) - memInuse.Mark(int64(memstats[location1].Alloc - memstats[location2].Alloc)) - memPauses.Mark(int64(memstats[location1].PauseTotalNs - memstats[location2].PauseTotalNs)) + memHeld.Update(int64(memstats[location1].HeapSys - memstats[location1].HeapReleased)) + memUsed.Update(int64(memstats[location1].Alloc)) if ReadDiskStats(diskstats[location1]) == nil { diskReads.Mark(diskstats[location1].ReadCount - diskstats[location2].ReadCount) diff --git a/metrics/opentsdb.go b/metrics/opentsdb.go index df7f152ed2eb..3fde55454ba9 100644 --- a/metrics/opentsdb.go +++ b/metrics/opentsdb.go @@ -10,7 +10,7 @@ import ( "time" ) -var shortHostName string = "" +var shortHostName = "" // OpenTSDBConfig provides a container with configuration parameters for // the OpenTSDB exporter diff --git a/metrics/prometheus/collector.go b/metrics/prometheus/collector.go new file mode 100644 index 000000000000..8350fa2aaf31 --- /dev/null +++ b/metrics/prometheus/collector.go @@ -0,0 +1,115 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package prometheus + +import ( + "bytes" + "fmt" + "strconv" + "strings" + + "github.com/ethereum/go-ethereum/metrics" +) + +var ( + typeGaugeTpl = "# TYPE %s gauge\n" + typeCounterTpl = "# TYPE %s counter\n" + typeSummaryTpl = "# TYPE %s summary\n" + keyValueTpl = "%s %v\n\n" + keyQuantileTagValueTpl = "%s {quantile=\"%s\"} %v\n\n" +) + +// collector is a collection of byte buffers that aggregate Prometheus reports +// for different metric types. +type collector struct { + buff *bytes.Buffer +} + +// newCollector createa a new Prometheus metric aggregator. +func newCollector() *collector { + return &collector{ + buff: &bytes.Buffer{}, + } +} + +func (c *collector) addCounter(name string, m metrics.Counter) { + c.writeGaugeCounter(name, m.Count()) +} + +func (c *collector) addGauge(name string, m metrics.Gauge) { + c.writeGaugeCounter(name, m.Value()) +} + +func (c *collector) addGaugeFloat64(name string, m metrics.GaugeFloat64) { + c.writeGaugeCounter(name, m.Value()) +} + +func (c *collector) addHistogram(name string, m metrics.Histogram) { + pv := []float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999} + ps := m.Percentiles(pv) + c.writeSummaryCounter(name, m.Count()) + for i := range pv { + c.writeSummaryPercentile(name, strconv.FormatFloat(pv[i], 'f', -1, 64), ps[i]) + } +} + +func (c *collector) addMeter(name string, m metrics.Meter) { + c.writeGaugeCounter(name, m.Count()) +} + +func (c *collector) addTimer(name string, m metrics.Timer) { + pv := []float64{0.5, 0.75, 0.95, 0.99, 0.999, 0.9999} + ps := m.Percentiles(pv) + c.writeSummaryCounter(name, m.Count()) + for i := range pv { + c.writeSummaryPercentile(name, strconv.FormatFloat(pv[i], 'f', -1, 64), ps[i]) + } +} + +func (c *collector) addResettingTimer(name string, m metrics.ResettingTimer) { + if len(m.Values()) <= 0 { + return + } + ps := m.Percentiles([]float64{50, 95, 99}) + val := m.Values() + c.writeSummaryCounter(name, len(val)) + c.writeSummaryPercentile(name, "0.50", ps[0]) + c.writeSummaryPercentile(name, "0.95", ps[1]) + c.writeSummaryPercentile(name, "0.99", ps[2]) +} + +func (c *collector) writeGaugeCounter(name string, value interface{}) { + name = mutateKey(name) + c.buff.WriteString(fmt.Sprintf(typeGaugeTpl, name)) + c.buff.WriteString(fmt.Sprintf(keyValueTpl, name, value)) +} + +func (c *collector) writeSummaryCounter(name string, value interface{}) { + name = mutateKey(name + "_count") + c.buff.WriteString(fmt.Sprintf(typeCounterTpl, name)) + c.buff.WriteString(fmt.Sprintf(keyValueTpl, name, value)) +} + +func (c *collector) writeSummaryPercentile(name, p string, value interface{}) { + name = mutateKey(name) + c.buff.WriteString(fmt.Sprintf(typeSummaryTpl, name)) + c.buff.WriteString(fmt.Sprintf(keyQuantileTagValueTpl, name, p, value)) +} + +func mutateKey(key string) string { + return strings.Replace(key, "/", "_", -1) +} diff --git a/metrics/prometheus/prometheus.go b/metrics/prometheus/prometheus.go new file mode 100644 index 000000000000..9ad5ec7e9929 --- /dev/null +++ b/metrics/prometheus/prometheus.go @@ -0,0 +1,68 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// Package prometheus exposes go-metrics into a Prometheus format. +package prometheus + +import ( + "fmt" + "net/http" + "sort" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" +) + +// Handler returns an HTTP handler which dump metrics in Prometheus format. +func Handler(reg metrics.Registry) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Gather and pre-sort the metrics to avoid random listings + var names []string + reg.Each(func(name string, i interface{}) { + names = append(names, name) + }) + sort.Strings(names) + + // Aggregate all the metris into a Prometheus collector + c := newCollector() + + for _, name := range names { + i := reg.Get(name) + + switch m := i.(type) { + case metrics.Counter: + c.addCounter(name, m.Snapshot()) + case metrics.Gauge: + c.addGauge(name, m.Snapshot()) + case metrics.GaugeFloat64: + c.addGaugeFloat64(name, m.Snapshot()) + case metrics.Histogram: + c.addHistogram(name, m.Snapshot()) + case metrics.Meter: + c.addMeter(name, m.Snapshot()) + case metrics.Timer: + c.addTimer(name, m.Snapshot()) + case metrics.ResettingTimer: + c.addResettingTimer(name, m.Snapshot()) + default: + log.Warn("Unknown Prometheus metric type", "type", fmt.Sprintf("%T", i)) + } + } + w.Header().Add("Content-Type", "text/plain") + w.Header().Add("Content-Length", fmt.Sprint(c.buff.Len())) + w.Write(c.buff.Bytes()) + }) +} diff --git a/miner/miner.go b/miner/miner.go index 5218c12107d3..ab97b0c03855 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -19,10 +19,12 @@ package miner import ( "fmt" + "math/big" "sync/atomic" "time" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" @@ -39,6 +41,18 @@ type Backend interface { TxPool() *core.TxPool } +// Config is the configuration parameters of mining. +type Config struct { + Etherbase common.Address `toml:",omitempty"` // Public address for block mining rewards (default = first account) + Notify []string `toml:",omitempty"` // HTTP URL list to be notified of new work packages(only useful in ethash). + ExtraData hexutil.Bytes `toml:",omitempty"` // Block extra data set by the miner + GasFloor uint64 // Target gas floor for mined blocks. + GasCeil uint64 // Target gas ceiling for mined blocks. + GasPrice *big.Int // Minimum gas price for mining a transaction + Recommit time.Duration // The time interval for miner to re-create mining work. + Noverify bool // Disable remote mining solution verification(only useful in ethash). +} + // Miner creates blocks and searches for proof-of-work values. type Miner struct { mux *event.TypeMux @@ -52,13 +66,13 @@ type Miner struct { shouldStart int32 // should start indicates whether we should start after sync } -func New(eth Backend, config *params.ChainConfig, mux *event.TypeMux, engine consensus.Engine, recommit time.Duration, gasFloor, gasCeil uint64, isLocalBlock func(block *types.Block) bool) *Miner { +func New(eth Backend, config *Config, chainConfig *params.ChainConfig, mux *event.TypeMux, engine consensus.Engine, isLocalBlock func(block *types.Block) bool) *Miner { miner := &Miner{ eth: eth, mux: mux, engine: engine, exitCh: make(chan struct{}), - worker: newWorker(config, engine, eth, mux, recommit, gasFloor, gasCeil, isLocalBlock), + worker: newWorker(config, chainConfig, engine, eth, mux, isLocalBlock), canStart: 1, } go miner.update() diff --git a/miner/stress_clique.go b/miner/stress_clique.go index 7e19975aec2f..7f5db2e520b0 100644 --- a/miner/stress_clique.go +++ b/miner/stress_clique.go @@ -69,7 +69,7 @@ func main() { if err != nil { panic(err) } - defer node.Stop() + defer node.Close() for node.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) @@ -199,10 +199,12 @@ func makeSealer(genesis *core.Genesis) (*node.Node, error) { DatabaseHandles: 256, TxPool: core.DefaultTxPoolConfig, GPO: eth.DefaultConfig.GPO, - MinerGasFloor: genesis.GasLimit * 9 / 10, - MinerGasCeil: genesis.GasLimit * 11 / 10, - MinerGasPrice: big.NewInt(1), - MinerRecommit: time.Second, + Miner: Config{ + GasFloor: genesis.GasLimit * 9 / 10, + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: time.Second, + }, }) }); err != nil { return nil, err diff --git a/miner/stress_ethash.go b/miner/stress_ethash.go index 044ca9a21834..7d4a7d24f7dd 100644 --- a/miner/stress_ethash.go +++ b/miner/stress_ethash.go @@ -69,7 +69,7 @@ func main() { if err != nil { panic(err) } - defer node.Stop() + defer node.Close() for node.Server().NodeInfo().Ports.Listener == 0 { time.Sleep(250 * time.Millisecond) @@ -179,10 +179,12 @@ func makeMiner(genesis *core.Genesis) (*node.Node, error) { TxPool: core.DefaultTxPoolConfig, GPO: eth.DefaultConfig.GPO, Ethash: eth.DefaultConfig.Ethash, - MinerGasFloor: genesis.GasLimit * 9 / 10, - MinerGasCeil: genesis.GasLimit * 11 / 10, - MinerGasPrice: big.NewInt(1), - MinerRecommit: time.Second, + Miner: Config{ + GasFloor: genesis.GasLimit * 9 / 10, + GasCeil: genesis.GasLimit * 11 / 10, + GasPrice: big.NewInt(1), + Recommit: time.Second, + }, }) }); err != nil { return nil, err diff --git a/miner/tx_prefetch.go b/miner/tx_prefetch.go index 218f1a62660a..8c0732dc868e 100644 --- a/miner/tx_prefetch.go +++ b/miner/tx_prefetch.go @@ -41,7 +41,7 @@ func tx_prefetch(w *worker, to *TxOrderer, numWorkers int) { } from, err := types.Sender( - types.MakeSigner(w.config, header.Number), tx) + types.MakeSigner(w.chainConfig, header.Number), tx) if err != nil { log.Error("Prefetch", "tx -> sender", err) continue @@ -52,7 +52,7 @@ func tx_prefetch(w *worker, to *TxOrderer, numWorkers int) { tx.GasPrice(), tx.Data(), false) ictx, cancel := context.WithTimeout(ctx, time.Second) vmCtx := core.NewEVMContext(msg, header, w.chain, nil) - evm := vm.NewEVM(vmCtx, state, w.config, vmCfg) + evm := vm.NewEVM(vmCtx, state, w.chainConfig, vmCfg) go func() { <-ictx.Done() diff --git a/miner/unconfirmed.go b/miner/unconfirmed.go index 50104656c6ca..d23449d766ac 100644 --- a/miner/unconfirmed.go +++ b/miner/unconfirmed.go @@ -86,7 +86,7 @@ func (set *unconfirmedBlocks) Insert(index uint64, hash common.Hash) { // Display a log for the user to notify of a new mined block unconfirmed header := set.chain.GetHeaderByNumber(index) go metaminer.LogBlock(header.Number.Int64(), hash) - log.Info("🔨 mined potential block", "number", index, "hash", hash, "elapsed", common.PrettyDuration(time.Since(time.Unix(header.Time.Int64(), 0)))) + log.Info("🔨 mined potential block", "number", index, "hash", hash, "elapsed", common.PrettyDuration(time.Since(time.Unix(int64(header.Time), 0)))) } // Shift drops all unconfirmed blocks from the set which exceed the unconfirmed sets depth diff --git a/miner/worker.go b/miner/worker.go index 9c7fe466fa80..9bd1100870c7 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -123,13 +123,11 @@ type intervalAdjust struct { // worker is the main object which takes care of submitting new work to consensus engine // and gathering the sealing result. type worker struct { - config *params.ChainConfig - engine consensus.Engine - eth Backend - chain *core.BlockChain - - gasFloor uint64 - gasCeil uint64 + config *Config + chainConfig *params.ChainConfig + engine consensus.Engine + eth Backend + chain *core.BlockChain // Subscriptions mux *event.TypeMux @@ -182,15 +180,14 @@ type worker struct { // compare and swap lock for mining thread var busyMining int32 -func newWorker(config *params.ChainConfig, engine consensus.Engine, eth Backend, mux *event.TypeMux, recommit time.Duration, gasFloor, gasCeil uint64, isLocalBlock func(*types.Block) bool) *worker { +func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus.Engine, eth Backend, mux *event.TypeMux, isLocalBlock func(*types.Block) bool) *worker { worker := &worker{ config: config, + chainConfig: chainConfig, engine: engine, eth: eth, mux: mux, chain: eth.BlockChain(), - gasFloor: gasFloor, - gasCeil: gasCeil, isLocalBlock: isLocalBlock, localUncles: make(map[common.Hash]*types.Block), remoteUncles: make(map[common.Hash]*types.Block), @@ -214,6 +211,7 @@ func newWorker(config *params.ChainConfig, engine consensus.Engine, eth Backend, worker.chainSideSub = eth.BlockChain().SubscribeChainSideEvent(worker.chainSideCh) // Sanitize recommit interval if the user-specified one is too short. + recommit := worker.config.Recommit if recommit < minRecommitInterval { log.Warn("Sanitizing miner recommit interval", "provided", recommit, "updated", minRecommitInterval) recommit = minRecommitInterval @@ -358,7 +356,7 @@ func (w *worker) newWorkLoop(recommit time.Duration) { case <-timer.C: // If mining is running resubmit a new work cycle periodically to pull in // higher priced transactions. Disable this overhead for pending blocks. - if w.isRunning() && (w.config.Clique == nil || w.config.Clique.Period > 0) { + if w.isRunning() && (w.chainConfig.Clique == nil || w.chainConfig.Clique.Period > 0) { // Short circuit if no new transaction arrives. if atomic.LoadInt32(&w.newTxs) == 0 { timer.Reset(recommit) @@ -507,6 +505,10 @@ func (w *worker) mainLoop() { // already included in the current mining block. These transactions will // be automatically eliminated. if !w.isRunning() && w.current != nil { + // If block is already full, abort + if gp := w.current.gasPool; gp != nil && gp.Gas() < params.TxGas { + continue + } w.mu.RLock() coinbase := w.coinbase w.mu.RUnlock() @@ -517,11 +519,17 @@ func (w *worker) mainLoop() { txs[acc] = append(txs[acc], tx) } txset := types.NewTransactionsByPriceAndNonce(w.current.signer, txs) + tcount := w.current.tcount w.commitTransactions(txset, coinbase, nil, nil, nil) - w.updateSnapshot() + // Only update the snapshot if any new transactons were added + // to the pending block + if tcount != w.current.tcount { + w.updateSnapshot() + } } else { - // If we're mining, but nothing is being processed, wake on new transactions - if w.config.Clique != nil && w.config.Clique.Period == 0 { + // If clique is running in dev mode(period is 0), disable + // advance sealing here. + if w.chainConfig.Clique != nil && w.chainConfig.Clique.Period == 0 { w.commitNewWork(nil, false, time.Now().Unix()) } else if !metaminer.IsPoW() && !isBusyMining() && metaminer.AmPartner() { w.commitNewWork(nil, false, time.Now().Unix()) @@ -620,6 +628,11 @@ func (w *worker) resultLoop() { logs []*types.Log ) for i, receipt := range task.receipts { + // add block location fields + receipt.BlockHash = hash + receipt.BlockNumber = block.Number() + receipt.TransactionIndex = uint(i) + receipts[i] = new(types.Receipt) *receipts[i] = *receipt // Update the block hash in all logs since it is now available and not when the @@ -667,7 +680,7 @@ func (w *worker) makeCurrent(parent *types.Block, header *types.Header) error { return err } env := &environment{ - signer: types.NewEIP155Signer(w.config.ChainID), + signer: types.NewEIP155Signer(w.chainConfig.ChainID), state: state, ancestors: mapset.NewSet(), family: mapset.NewSet(), @@ -748,7 +761,7 @@ func (w *worker) updateSnapshot() { func (w *worker) commitTransaction(tx *types.Transaction, coinbase common.Address) ([]*types.Log, error) { snap := w.current.state.Snapshot() - receipt, _, err := core.ApplyTransaction(w.config, w.chain, &coinbase, w.current.gasPool, w.current.state, w.current.header, tx, &w.current.header.GasUsed, w.current.header.Fees, *w.chain.GetVMConfig()) + receipt, err := core.ApplyTransaction(w.chainConfig, w.chain, &coinbase, w.current.gasPool, w.current.state, w.current.header, tx, &w.current.header.GasUsed, w.current.header.Fees, *w.chain.GetVMConfig()) if err != nil { w.current.state.RevertToSnapshot(snap) return nil, err @@ -821,8 +834,8 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin from, _ := types.Sender(w.current.signer, tx) // Check whether the tx is replay protected. If we're not in the EIP155 hf // phase, start ignoring the sender until we do. - if tx.Protected() && !w.config.IsEIP155(w.current.header.Number) { - log.Trace("Ignoring reply protected transaction", "hash", tx.Hash(), "eip155", w.config.EIP155Block) + if tx.Protected() && !w.chainConfig.IsEIP155(w.current.header.Number) { + log.Trace("Ignoring reply protected transaction", "hash", tx.Hash(), "eip155", w.chainConfig.EIP155Block) txs.Pop() continue @@ -944,8 +957,8 @@ func (w *worker) commitTransactionsSimple(txs *TxOrderer, coinbase common.Addres from, _ := types.Sender(w.current.signer, tx) // Check whether the tx is replay protected. If we're not in the EIP155 hf // phase, start ignoring the sender until we do. - if tx.Protected() && !w.config.IsEIP155(w.current.header.Number) { - log.Trace("Ignoring reply protected transaction", "hash", tx.Hash(), "eip155", w.config.EIP155Block) + if tx.Protected() && !w.chainConfig.IsEIP155(w.current.header.Number) { + log.Trace("Ignoring reply protected transaction", "hash", tx.Hash(), "eip155", w.chainConfig.EIP155Block) txs.Pop() continue @@ -1030,7 +1043,7 @@ func (w *worker) ancestorTimes(num *big.Int) []int64 { continue } if bh := w.chain.GetHeaderByNumber(uint64(bn)); bh != nil { - ts[i] = bh.Time.Int64() + ts[i] = int64(bh.Time) } } return ts @@ -1128,9 +1141,7 @@ func (w *worker) commitTransactionsEx(num *big.Int, interrupt *int32, tstart tim break } } - log.Debug("Block %d: %d ms elapsed, %d processed, %d rounds.\n", - num.Int64(), time.Since(tstart).Nanoseconds()/1000000, - len(committedTxs), round) + log.Debug("Block", "number", num.Int64(), "elapsed", time.Since(tstart).Nanoseconds()/1000000, "txs", len(committedTxs), "round", round) return false } @@ -1172,11 +1183,11 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) return } } + if parent.Time() >= uint64(timestamp) { + timestamp = int64(parent.Time() + 1) + } if metaminer.IsPoW() { - if parent.Time().Cmp(new(big.Int).SetInt64(timestamp)) >= 0 { - timestamp = parent.Time().Int64() + 1 - } // this will ensure we're not going off too far in the future if now := time.Now().Unix(); timestamp > now+1 { wait := time.Duration(timestamp-now) * time.Second @@ -1188,9 +1199,9 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) header := &types.Header{ ParentHash: parent.Hash(), Number: num, - GasLimit: core.CalcGasLimit(parent, w.gasFloor, w.gasCeil), + GasLimit: core.CalcGasLimit(parent, w.config.GasFloor, w.config.GasCeil), Extra: w.extra, - Time: big.NewInt(timestamp), + Time: uint64(timestamp), Fees: big.NewInt(0), } // Only set the coinbase if our consensus engine is running (avoid spurious block rewards) @@ -1206,12 +1217,12 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) return } // If we are care about TheDAO hard-fork check whether to override the extra-data or not - if daoBlock := w.config.DAOForkBlock; daoBlock != nil { + if daoBlock := w.chainConfig.DAOForkBlock; daoBlock != nil { // Check whether the block is among the fork extra-override range limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange) if header.Number.Cmp(daoBlock) >= 0 && header.Number.Cmp(limit) < 0 { // Depending whether we support or oppose the fork, override differently - if w.config.DAOForkSupport { + if w.chainConfig.DAOForkSupport { header.Extra = common.CopyBytes(params.DAOForkBlockExtra) } else if bytes.Equal(header.Extra, params.DAOForkBlockExtra) { header.Extra = []byte{} // If miner opposes, don't let it use the reserved extra-data @@ -1226,7 +1237,7 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64) } // Create the current work task and check any fork transitions needed env := w.current - if w.config.DAOForkSupport && w.config.DAOForkBlock != nil && w.config.DAOForkBlock.Cmp(header.Number) == 0 { + if w.chainConfig.DAOForkSupport && w.chainConfig.DAOForkBlock != nil && w.chainConfig.DAOForkBlock.Cmp(header.Number) == 0 { misc.ApplyDAOHardFork(env.state) } // Accumulate the uncles for the current block @@ -1321,9 +1332,9 @@ func (w *worker) refreshPending(locked bool) { header := &types.Header{ ParentHash: parent.Hash(), Number: num, - GasLimit: core.CalcGasLimit(parent, w.gasFloor, w.gasCeil), + GasLimit: core.CalcGasLimit(parent, w.config.GasFloor, w.config.GasCeil), Extra: w.extra, - Time: big.NewInt(time.Now().Unix()), + Time: uint64(time.Now().Unix()), Fees: big.NewInt(0), } header.Coinbase = w.coinbase @@ -1351,7 +1362,7 @@ func (w *worker) commit(uncles []*types.Header, interval func(), update bool, st *receipts[i] = *l } s := w.current.state.Copy() - block, err := w.engine.Finalize(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) + block, err := w.engine.FinalizeAndAssemble(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) if err != nil { return err } @@ -1395,7 +1406,7 @@ func (w *worker) commitEx(uncles []*types.Header, interval func(), update bool, *receipts[i] = *l } s := w.current.state.Copy() - block, err := w.engine.Finalize(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) + block, err := w.engine.FinalizeAndAssemble(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts) if err != nil { return err } diff --git a/miner/worker_test.go b/miner/worker_test.go index 7c8f167a12d7..1604e988dd9f 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/consensus/clique" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -51,6 +52,12 @@ var ( // Test transactions pendingTxs []*types.Transaction newTxs []*types.Transaction + + testConfig = &Config{ + Recommit: time.Second, + GasFloor: params.GenesisGasLimit, + GasCeil: params.GenesisGasLimit, + } ) func init() { @@ -79,7 +86,7 @@ type testWorkerBackend struct { func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, n int) *testWorkerBackend { var ( - db = ethdb.NewMemDatabase() + db = rawdb.NewMemoryDatabase() gspec = core.Genesis{ Config: chainConfig, Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, @@ -88,7 +95,7 @@ func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine switch engine.(type) { case *clique.Clique: - gspec.ExtraData = make([]byte, 32+common.AddressLength+65) + gspec.ExtraData = make([]byte, 32+common.AddressLength+crypto.SignatureLength) copy(gspec.ExtraData[32:], testBankAddress[:]) case *ethash.Ethash: default: @@ -133,7 +140,7 @@ func (b *testWorkerBackend) PostChainEvents(events []interface{}) { func newTestWorker(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, blocks int) (*worker, *testWorkerBackend) { backend := newTestWorkerBackend(t, chainConfig, engine, blocks) backend.txPool.AddLocals(pendingTxs) - w := newWorker(chainConfig, engine, backend, new(event.TypeMux), time.Second, params.GenesisGasLimit, params.GenesisGasLimit, nil) + w := newWorker(testConfig, chainConfig, engine, backend, new(event.TypeMux), nil) w.setEtherbase(testBankAddress) return w, backend } @@ -142,7 +149,7 @@ func TestPendingStateAndBlockEthash(t *testing.T) { testPendingStateAndBlock(t, ethashChainConfig, ethash.NewFaker()) } func TestPendingStateAndBlockClique(t *testing.T) { - testPendingStateAndBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testPendingStateAndBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testPendingStateAndBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -174,7 +181,7 @@ func TestEmptyWorkEthash(t *testing.T) { testEmptyWork(t, ethashChainConfig, ethash.NewFaker()) } func TestEmptyWorkClique(t *testing.T) { - testEmptyWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testEmptyWork(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -224,7 +231,7 @@ func testEmptyWork(t *testing.T, chainConfig *params.ChainConfig, engine consens for i := 0; i < 2; i += 1 { select { case <-taskCh: - case <-time.NewTimer(time.Second).C: + case <-time.NewTimer(2 * time.Second).C: t.Error("new task timeout") } } @@ -291,7 +298,7 @@ func TestRegenerateMiningBlockEthash(t *testing.T) { } func TestRegenerateMiningBlockClique(t *testing.T) { - testRegenerateMiningBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testRegenerateMiningBlock(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testRegenerateMiningBlock(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { @@ -356,7 +363,7 @@ func TestAdjustIntervalEthash(t *testing.T) { } func TestAdjustIntervalClique(t *testing.T) { - testAdjustInterval(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, ethdb.NewMemDatabase())) + testAdjustInterval(t, cliqueChainConfig, clique.New(cliqueChainConfig.Clique, rawdb.NewMemoryDatabase())) } func testAdjustInterval(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine) { diff --git a/mobile/bind.go b/mobile/bind.go index d6e621a258fd..90ecdf82c414 100644 --- a/mobile/bind.go +++ b/mobile/bind.go @@ -19,27 +19,30 @@ package geth import ( + "errors" "math/big" "strings" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" ) -// Signer is an interaface defining the callback when a contract requires a +// Signer is an interface defining the callback when a contract requires a // method to sign the transaction before submission. type Signer interface { Sign(*Address, *Transaction) (tx *Transaction, _ error) } -type signer struct { +type MobileSigner struct { sign bind.SignerFn } -func (s *signer) Sign(addr *Address, unsignedTx *Transaction) (signedTx *Transaction, _ error) { - sig, err := s.sign(types.HomesteadSigner{}, addr.address, unsignedTx.tx) +func (s *MobileSigner) Sign(addr *Address, unsignedTx *Transaction) (signedTx *Transaction, _ error) { + sig, err := s.sign(types.EIP155Signer{}, addr.address, unsignedTx.tx) if err != nil { return nil, err } @@ -73,6 +76,35 @@ type TransactOpts struct { opts bind.TransactOpts } +// NewTransactOpts creates a new option set for contract transaction. +func NewTransactOpts() *TransactOpts { + return new(TransactOpts) +} + +// NewKeyedTransactor is a utility method to easily create a transaction signer +// from a single private key. +func NewKeyedTransactOpts(keyJson []byte, passphrase string) (*TransactOpts, error) { + key, err := keystore.DecryptKey(keyJson, passphrase) + if err != nil { + return nil, err + } + keyAddr := crypto.PubkeyToAddress(key.PrivateKey.PublicKey) + opts := bind.TransactOpts{ + From: keyAddr, + Signer: func(signer types.Signer, address common.Address, tx *types.Transaction) (*types.Transaction, error) { + if address != keyAddr { + return nil, errors.New("not authorized to sign this account") + } + signature, err := crypto.Sign(signer.Hash(tx).Bytes(), key.PrivateKey) + if err != nil { + return nil, err + } + return tx.WithSignature(signer, signature) + }, + } + return &TransactOpts{opts}, nil +} + func (opts *TransactOpts) GetFrom() *Address { return &Address{opts.opts.From} } func (opts *TransactOpts) GetNonce() int64 { return opts.opts.Nonce.Int64() } func (opts *TransactOpts) GetValue() *BigInt { return &BigInt{opts.opts.Value} } diff --git a/mobile/common.go b/mobile/common.go index 047d8e1f65c7..d7e0457261a0 100644 --- a/mobile/common.go +++ b/mobile/common.go @@ -25,6 +25,7 @@ import ( "strings" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" ) // Hash represents the 32 byte Keccak256 hash of arbitrary data. @@ -228,3 +229,13 @@ func (a *Addresses) Set(index int, address *Address) error { func (a *Addresses) Append(address *Address) { a.addresses = append(a.addresses, address.address) } + +// EncodeToHex encodes b as a hex string with 0x prefix. +func EncodeToHex(b []byte) string { + return hexutil.Encode(b) +} + +// DecodeFromHex decodes a hex string with 0x prefix. +func DecodeFromHex(s string) ([]byte, error) { + return hexutil.Decode(s) +} diff --git a/mobile/context.go b/mobile/context.go index f1fff9011471..76b4c54642a6 100644 --- a/mobile/context.go +++ b/mobile/context.go @@ -24,7 +24,7 @@ import ( "time" ) -// Context carries a deadline, a cancelation signal, and other values across API +// Context carries a deadline, a cancellation signal, and other values across API // boundaries. type Context struct { context context.Context diff --git a/mobile/geth.go b/mobile/geth.go index e3e2e905da37..edcbfdbdbe55 100644 --- a/mobile/geth.go +++ b/mobile/geth.go @@ -131,6 +131,7 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { MaxPeers: config.MaxPeers, }, } + rawStack, err := node.New(nodeConf) if err != nil { return nil, err @@ -188,6 +189,12 @@ func NewNode(datadir string, config *NodeConfig) (stack *Node, _ error) { return &Node{rawStack}, nil } +// Close terminates a running node along with all it's services, tearing internal +// state doen too. It's not possible to restart a closed node. +func (n *Node) Close() error { + return n.node.Close() +} + // Start creates a live P2P node and starts running it. func (n *Node) Start() error { return n.node.Start() diff --git a/mobile/interface.go b/mobile/interface.go index ac0c26088a7b..d5200d5b1b82 100644 --- a/mobile/interface.go +++ b/mobile/interface.go @@ -42,26 +42,82 @@ func NewInterface() *Interface { return new(Interface) } -func (i *Interface) SetBool(b bool) { i.object = &b } -func (i *Interface) SetBools(bs []bool) { i.object = &bs } -func (i *Interface) SetString(str string) { i.object = &str } -func (i *Interface) SetStrings(strs *Strings) { i.object = &strs.strs } -func (i *Interface) SetBinary(binary []byte) { b := common.CopyBytes(binary); i.object = &b } -func (i *Interface) SetBinaries(binaries [][]byte) { i.object = &binaries } -func (i *Interface) SetAddress(address *Address) { i.object = &address.address } -func (i *Interface) SetAddresses(addrs *Addresses) { i.object = &addrs.addresses } -func (i *Interface) SetHash(hash *Hash) { i.object = &hash.hash } -func (i *Interface) SetHashes(hashes *Hashes) { i.object = &hashes.hashes } -func (i *Interface) SetInt8(n int8) { i.object = &n } -func (i *Interface) SetInt16(n int16) { i.object = &n } -func (i *Interface) SetInt32(n int32) { i.object = &n } -func (i *Interface) SetInt64(n int64) { i.object = &n } -func (i *Interface) SetUint8(bigint *BigInt) { n := uint8(bigint.bigint.Uint64()); i.object = &n } -func (i *Interface) SetUint16(bigint *BigInt) { n := uint16(bigint.bigint.Uint64()); i.object = &n } -func (i *Interface) SetUint32(bigint *BigInt) { n := uint32(bigint.bigint.Uint64()); i.object = &n } -func (i *Interface) SetUint64(bigint *BigInt) { n := bigint.bigint.Uint64(); i.object = &n } -func (i *Interface) SetBigInt(bigint *BigInt) { i.object = &bigint.bigint } -func (i *Interface) SetBigInts(bigints *BigInts) { i.object = &bigints.bigints } +func (i *Interface) SetBool(b bool) { i.object = &b } +func (i *Interface) SetBools(bs *Bools) { i.object = &bs.bools } +func (i *Interface) SetString(str string) { i.object = &str } +func (i *Interface) SetStrings(strs *Strings) { i.object = &strs.strs } +func (i *Interface) SetBinary(binary []byte) { b := common.CopyBytes(binary); i.object = &b } +func (i *Interface) SetBinaries(binaries *Binaries) { i.object = &binaries.binaries } +func (i *Interface) SetAddress(address *Address) { i.object = &address.address } +func (i *Interface) SetAddresses(addrs *Addresses) { i.object = &addrs.addresses } +func (i *Interface) SetHash(hash *Hash) { i.object = &hash.hash } +func (i *Interface) SetHashes(hashes *Hashes) { i.object = &hashes.hashes } +func (i *Interface) SetInt8(n int8) { i.object = &n } +func (i *Interface) SetInt16(n int16) { i.object = &n } +func (i *Interface) SetInt32(n int32) { i.object = &n } +func (i *Interface) SetInt64(n int64) { i.object = &n } +func (i *Interface) SetInt8s(bigints *BigInts) { + ints := make([]int8, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, int8(bi.Int64())) + } + i.object = &ints +} +func (i *Interface) SetInt16s(bigints *BigInts) { + ints := make([]int16, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, int16(bi.Int64())) + } + i.object = &ints +} +func (i *Interface) SetInt32s(bigints *BigInts) { + ints := make([]int32, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, int32(bi.Int64())) + } + i.object = &ints +} +func (i *Interface) SetInt64s(bigints *BigInts) { + ints := make([]int64, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, bi.Int64()) + } + i.object = &ints +} +func (i *Interface) SetUint8(bigint *BigInt) { n := uint8(bigint.bigint.Uint64()); i.object = &n } +func (i *Interface) SetUint16(bigint *BigInt) { n := uint16(bigint.bigint.Uint64()); i.object = &n } +func (i *Interface) SetUint32(bigint *BigInt) { n := uint32(bigint.bigint.Uint64()); i.object = &n } +func (i *Interface) SetUint64(bigint *BigInt) { n := bigint.bigint.Uint64(); i.object = &n } +func (i *Interface) SetUint8s(bigints *BigInts) { + ints := make([]uint8, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, uint8(bi.Uint64())) + } + i.object = &ints +} +func (i *Interface) SetUint16s(bigints *BigInts) { + ints := make([]uint16, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, uint16(bi.Uint64())) + } + i.object = &ints +} +func (i *Interface) SetUint32s(bigints *BigInts) { + ints := make([]uint32, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, uint32(bi.Uint64())) + } + i.object = &ints +} +func (i *Interface) SetUint64s(bigints *BigInts) { + ints := make([]uint64, 0, bigints.Size()) + for _, bi := range bigints.bigints { + ints = append(ints, bi.Uint64()) + } + i.object = &ints +} +func (i *Interface) SetBigInt(bigint *BigInt) { i.object = &bigint.bigint } +func (i *Interface) SetBigInts(bigints *BigInts) { i.object = &bigints.bigints } func (i *Interface) SetDefaultBool() { i.object = new(bool) } func (i *Interface) SetDefaultBools() { i.object = new([]bool) } @@ -74,22 +130,30 @@ func (i *Interface) SetDefaultAddresses() { i.object = new([]common.Address) } func (i *Interface) SetDefaultHash() { i.object = new(common.Hash) } func (i *Interface) SetDefaultHashes() { i.object = new([]common.Hash) } func (i *Interface) SetDefaultInt8() { i.object = new(int8) } +func (i *Interface) SetDefaultInt8s() { i.object = new([]int8) } func (i *Interface) SetDefaultInt16() { i.object = new(int16) } +func (i *Interface) SetDefaultInt16s() { i.object = new([]int16) } func (i *Interface) SetDefaultInt32() { i.object = new(int32) } +func (i *Interface) SetDefaultInt32s() { i.object = new([]int32) } func (i *Interface) SetDefaultInt64() { i.object = new(int64) } +func (i *Interface) SetDefaultInt64s() { i.object = new([]int64) } func (i *Interface) SetDefaultUint8() { i.object = new(uint8) } +func (i *Interface) SetDefaultUint8s() { i.object = new([]uint8) } func (i *Interface) SetDefaultUint16() { i.object = new(uint16) } +func (i *Interface) SetDefaultUint16s() { i.object = new([]uint16) } func (i *Interface) SetDefaultUint32() { i.object = new(uint32) } +func (i *Interface) SetDefaultUint32s() { i.object = new([]uint32) } func (i *Interface) SetDefaultUint64() { i.object = new(uint64) } +func (i *Interface) SetDefaultUint64s() { i.object = new([]uint64) } func (i *Interface) SetDefaultBigInt() { i.object = new(*big.Int) } func (i *Interface) SetDefaultBigInts() { i.object = new([]*big.Int) } func (i *Interface) GetBool() bool { return *i.object.(*bool) } -func (i *Interface) GetBools() []bool { return *i.object.(*[]bool) } +func (i *Interface) GetBools() *Bools { return &Bools{*i.object.(*[]bool)} } func (i *Interface) GetString() string { return *i.object.(*string) } func (i *Interface) GetStrings() *Strings { return &Strings{*i.object.(*[]string)} } func (i *Interface) GetBinary() []byte { return *i.object.(*[]byte) } -func (i *Interface) GetBinaries() [][]byte { return *i.object.(*[][]byte) } +func (i *Interface) GetBinaries() *Binaries { return &Binaries{*i.object.(*[][]byte)} } func (i *Interface) GetAddress() *Address { return &Address{*i.object.(*common.Address)} } func (i *Interface) GetAddresses() *Addresses { return &Addresses{*i.object.(*[]common.Address)} } func (i *Interface) GetHash() *Hash { return &Hash{*i.object.(*common.Hash)} } @@ -98,6 +162,38 @@ func (i *Interface) GetInt8() int8 { return *i.object.(*int8) } func (i *Interface) GetInt16() int16 { return *i.object.(*int16) } func (i *Interface) GetInt32() int32 { return *i.object.(*int32) } func (i *Interface) GetInt64() int64 { return *i.object.(*int64) } +func (i *Interface) GetInt8s() *BigInts { + val := i.object.(*[]int8) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetInt64(int64(v))}) + } + return bigints +} +func (i *Interface) GetInt16s() *BigInts { + val := i.object.(*[]int16) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetInt64(int64(v))}) + } + return bigints +} +func (i *Interface) GetInt32s() *BigInts { + val := i.object.(*[]int32) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetInt64(int64(v))}) + } + return bigints +} +func (i *Interface) GetInt64s() *BigInts { + val := i.object.(*[]int64) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetInt64(v)}) + } + return bigints +} func (i *Interface) GetUint8() *BigInt { return &BigInt{new(big.Int).SetUint64(uint64(*i.object.(*uint8)))} } @@ -110,6 +206,38 @@ func (i *Interface) GetUint32() *BigInt { func (i *Interface) GetUint64() *BigInt { return &BigInt{new(big.Int).SetUint64(*i.object.(*uint64))} } +func (i *Interface) GetUint8s() *BigInts { + val := i.object.(*[]uint8) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetUint64(uint64(v))}) + } + return bigints +} +func (i *Interface) GetUint16s() *BigInts { + val := i.object.(*[]uint16) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetUint64(uint64(v))}) + } + return bigints +} +func (i *Interface) GetUint32s() *BigInts { + val := i.object.(*[]uint32) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetUint64(uint64(v))}) + } + return bigints +} +func (i *Interface) GetUint64s() *BigInts { + val := i.object.(*[]uint64) + bigints := NewBigInts(len(*val)) + for i, v := range *val { + bigints.Set(i, &BigInt{new(big.Int).SetUint64(v)}) + } + return bigints +} func (i *Interface) GetBigInt() *BigInt { return &BigInt{*i.object.(**big.Int)} } func (i *Interface) GetBigInts() *BigInts { return &BigInts{*i.object.(*[]*big.Int)} } @@ -120,9 +248,7 @@ type Interfaces struct { // NewInterfaces creates a slice of uninitialized interfaces. func NewInterfaces(size int) *Interfaces { - return &Interfaces{ - objects: make([]interface{}, size), - } + return &Interfaces{objects: make([]interface{}, size)} } // Size returns the number of interfaces in the slice. @@ -131,11 +257,13 @@ func (i *Interfaces) Size() int { } // Get returns the bigint at the given index from the slice. +// Notably the returned value can be changed without affecting the +// interfaces itself. func (i *Interfaces) Get(index int) (iface *Interface, _ error) { if index < 0 || index >= len(i.objects) { return nil, errors.New("index out of bounds") } - return &Interface{i.objects[index]}, nil + return &Interface{object: i.objects[index]}, nil } // Set sets the big int at the given index in the slice. diff --git a/mobile/interface_test.go b/mobile/interface_test.go new file mode 100644 index 000000000000..4bd1af47aa1d --- /dev/null +++ b/mobile/interface_test.go @@ -0,0 +1,90 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package geth + +import ( + "fmt" + "math/big" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" +) + +func TestInterfaceGetSet(t *testing.T) { + var tests = []struct { + method string + input interface{} + expect interface{} + }{ + {"Bool", true, true}, + {"Bool", false, false}, + {"Bools", &Bools{[]bool{false, true}}, &Bools{[]bool{false, true}}}, + {"String", "go-ethereum", "go-ethereum"}, + {"Strings", &Strings{strs: []string{"hello", "world"}}, &Strings{strs: []string{"hello", "world"}}}, + {"Binary", []byte{0x01, 0x02}, []byte{0x01, 0x02}}, + {"Binaries", &Binaries{[][]byte{{0x01, 0x02}, {0x03, 0x04}}}, &Binaries{[][]byte{{0x01, 0x02}, {0x03, 0x04}}}}, + {"Address", &Address{common.HexToAddress("deadbeef")}, &Address{common.HexToAddress("deadbeef")}}, + {"Addresses", &Addresses{[]common.Address{common.HexToAddress("deadbeef"), common.HexToAddress("cafebabe")}}, &Addresses{[]common.Address{common.HexToAddress("deadbeef"), common.HexToAddress("cafebabe")}}}, + {"Hash", &Hash{common.HexToHash("deadbeef")}, &Hash{common.HexToHash("deadbeef")}}, + {"Hashes", &Hashes{[]common.Hash{common.HexToHash("deadbeef"), common.HexToHash("cafebabe")}}, &Hashes{[]common.Hash{common.HexToHash("deadbeef"), common.HexToHash("cafebabe")}}}, + {"Int8", int8(1), int8(1)}, + {"Int16", int16(1), int16(1)}, + {"Int32", int32(1), int32(1)}, + {"Int64", int64(1), int64(1)}, + {"Int8s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Int16s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Int32s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Int64s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Uint8", NewBigInt(1), NewBigInt(1)}, + {"Uint16", NewBigInt(1), NewBigInt(1)}, + {"Uint32", NewBigInt(1), NewBigInt(1)}, + {"Uint64", NewBigInt(1), NewBigInt(1)}, + {"Uint8s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Uint16s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Uint32s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"Uint64s", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + {"BigInt", NewBigInt(1), NewBigInt(1)}, + {"BigInts", &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}, &BigInts{[]*big.Int{big.NewInt(1), big.NewInt(2)}}}, + } + + args := NewInterfaces(len(tests)) + + callFn := func(receiver interface{}, method string, arg interface{}) interface{} { + rval := reflect.ValueOf(receiver) + rval.MethodByName(fmt.Sprintf("Set%s", method)).Call([]reflect.Value{reflect.ValueOf(arg)}) + res := rval.MethodByName(fmt.Sprintf("Get%s", method)).Call(nil) + if len(res) > 0 { + return res[0].Interface() + } + return nil + } + + for index, c := range tests { + // In theory the change of iface shouldn't effect the args value + iface, _ := args.Get(index) + result := callFn(iface, c.method, c.input) + if !reflect.DeepEqual(result, c.expect) { + t.Errorf("Interface get/set mismatch, want %v, got %v", c.expect, result) + } + // Check whether the underlying value in args is still zero + iface, _ = args.Get(index) + if iface.object != nil { + t.Error("Get operation is not write safe") + } + } +} diff --git a/mobile/primitives.go b/mobile/primitives.go index 5c6617fa475e..7e1ab26ef039 100644 --- a/mobile/primitives.go +++ b/mobile/primitives.go @@ -21,6 +21,8 @@ package geth import ( "errors" "fmt" + + "github.com/ethereum/go-ethereum/common" ) // Strings represents s slice of strs. @@ -52,3 +54,63 @@ func (s *Strings) Set(index int, str string) error { func (s *Strings) String() string { return fmt.Sprintf("%v", s.strs) } + +// Bools represents a slice of bool. +type Bools struct{ bools []bool } + +// Size returns the number of bool in the slice. +func (bs *Bools) Size() int { + return len(bs.bools) +} + +// Get returns the bool at the given index from the slice. +func (bs *Bools) Get(index int) (b bool, _ error) { + if index < 0 || index >= len(bs.bools) { + return false, errors.New("index out of bounds") + } + return bs.bools[index], nil +} + +// Set sets the bool at the given index in the slice. +func (bs *Bools) Set(index int, b bool) error { + if index < 0 || index >= len(bs.bools) { + return errors.New("index out of bounds") + } + bs.bools[index] = b + return nil +} + +// String implements the Stringer interface. +func (bs *Bools) String() string { + return fmt.Sprintf("%v", bs.bools) +} + +// Binaries represents a slice of byte slice +type Binaries struct{ binaries [][]byte } + +// Size returns the number of byte slice in the slice. +func (bs *Binaries) Size() int { + return len(bs.binaries) +} + +// Get returns the byte slice at the given index from the slice. +func (bs *Binaries) Get(index int) (binary []byte, _ error) { + if index < 0 || index >= len(bs.binaries) { + return nil, errors.New("index out of bounds") + } + return common.CopyBytes(bs.binaries[index]), nil +} + +// Set sets the byte slice at the given index in the slice. +func (bs *Binaries) Set(index int, binary []byte) error { + if index < 0 || index >= len(bs.binaries) { + return errors.New("index out of bounds") + } + bs.binaries[index] = common.CopyBytes(binary) + return nil +} + +// String implements the Stringer interface. +func (bs *Binaries) String() string { + return fmt.Sprintf("%v", bs.binaries) +} diff --git a/mobile/shhclient.go b/mobile/shhclient.go index a069c9bd4042..90a8b83c39f9 100644 --- a/mobile/shhclient.go +++ b/mobile/shhclient.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/mobile/types.go b/mobile/types.go index 443d07ea9329..b9c44c25d7a9 100644 --- a/mobile/types.go +++ b/mobile/types.go @@ -109,7 +109,7 @@ func (h *Header) GetDifficulty() *BigInt { return &BigInt{h.header.Difficulty} } func (h *Header) GetNumber() int64 { return h.header.Number.Int64() } func (h *Header) GetGasLimit() int64 { return int64(h.header.GasLimit) } func (h *Header) GetGasUsed() int64 { return int64(h.header.GasUsed) } -func (h *Header) GetTime() int64 { return h.header.Time.Int64() } +func (h *Header) GetTime() int64 { return int64(h.header.Time) } func (h *Header) GetExtra() []byte { return h.header.Extra } func (h *Header) GetMixDigest() *Hash { return &Hash{h.header.MixDigest} } func (h *Header) GetNonce() *Nonce { return &Nonce{h.header.Nonce} } @@ -180,7 +180,7 @@ func (b *Block) GetDifficulty() *BigInt { return &BigInt{b.block.Difficu func (b *Block) GetNumber() int64 { return b.block.Number().Int64() } func (b *Block) GetGasLimit() int64 { return int64(b.block.GasLimit()) } func (b *Block) GetGasUsed() int64 { return int64(b.block.GasUsed()) } -func (b *Block) GetTime() int64 { return b.block.Time().Int64() } +func (b *Block) GetTime() int64 { return int64(b.block.Time()) } func (b *Block) GetExtra() []byte { return b.block.Extra() } func (b *Block) GetMixDigest() *Hash { return &Hash{b.block.MixDigest()} } func (b *Block) GetNonce() int64 { return int64(b.block.Nonce()) } @@ -197,8 +197,18 @@ type Transaction struct { tx *types.Transaction } -// NewTransaction creates a new transaction with the given properties. +// NewContractCreation creates a new transaction for deploying a new contract with +// the given properties. +func NewContractCreation(nonce int64, amount *BigInt, gasLimit int64, gasPrice *BigInt, data []byte) *Transaction { + return &Transaction{types.NewContractCreation(uint64(nonce), amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} +} + +// NewTransaction creates a new transaction with the given properties. Contracts +// can be created by transacting with a nil recipient. func NewTransaction(nonce int64, to *Address, amount *BigInt, gasLimit int64, gasPrice *BigInt, data []byte) *Transaction { + if to == nil { + return &Transaction{types.NewContractCreation(uint64(nonce), amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} + } return &Transaction{types.NewTransaction(uint64(nonce), to.address, amount.bigint, uint64(gasLimit), gasPrice.bigint, common.CopyBytes(data))} } diff --git a/node/api.go b/node/api.go index e6aac96baf45..0ccc3bf341fb 100644 --- a/node/api.go +++ b/node/api.go @@ -20,12 +20,10 @@ import ( "context" "fmt" "strings" - "time" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/crypto" metaapi "github.com/ethereum/go-ethereum/metadium/api" - "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/rpc" @@ -52,7 +50,7 @@ func (api *PrivateAdminAPI) AddPeer(url string) (bool, error) { return false, ErrNodeStopped } // Try to add the url as a static peer and return - node, err := enode.ParseV4(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { return false, fmt.Errorf("invalid enode: %v", err) } @@ -68,7 +66,7 @@ func (api *PrivateAdminAPI) RemovePeer(url string) (bool, error) { return false, ErrNodeStopped } // Try to remove the url as a static peer and return - node, err := enode.ParseV4(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { return false, fmt.Errorf("invalid enode: %v", err) } @@ -83,7 +81,7 @@ func (api *PrivateAdminAPI) AddTrustedPeer(url string) (bool, error) { if server == nil { return false, ErrNodeStopped } - node, err := enode.ParseV4(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { return false, fmt.Errorf("invalid enode: %v", err) } @@ -99,7 +97,7 @@ func (api *PrivateAdminAPI) RemoveTrustedPeer(url string) (bool, error) { if server == nil { return false, ErrNodeStopped } - node, err := enode.ParseV4(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { return false, fmt.Errorf("invalid enode: %v", err) } @@ -318,151 +316,6 @@ func (api *PublicAdminAPI) MetadiumNodes(node string, timeout int) interface{} { return metaapi.GetMiners(node, timeout) } -// PublicDebugAPI is the collection of debugging related API methods exposed over -// both secure and unsecure RPC channels. -type PublicDebugAPI struct { - node *Node // Node interfaced by this API -} - -// NewPublicDebugAPI creates a new API definition for the public debug methods -// of the node itself. -func NewPublicDebugAPI(node *Node) *PublicDebugAPI { - return &PublicDebugAPI{node: node} -} - -// Metrics retrieves all the known system metric collected by the node. -func (api *PublicDebugAPI) Metrics(raw bool) (map[string]interface{}, error) { - // Create a rate formatter - units := []string{"", "K", "M", "G", "T", "E", "P"} - round := func(value float64, prec int) string { - unit := 0 - for value >= 1000 { - unit, value, prec = unit+1, value/1000, 2 - } - return fmt.Sprintf(fmt.Sprintf("%%.%df%s", prec, units[unit]), value) - } - format := func(total float64, rate float64) string { - return fmt.Sprintf("%s (%s/s)", round(total, 0), round(rate, 2)) - } - // Iterate over all the metrics, and just dump for now - counters := make(map[string]interface{}) - metrics.DefaultRegistry.Each(func(name string, metric interface{}) { - // Create or retrieve the counter hierarchy for this metric - root, parts := counters, strings.Split(name, "/") - for _, part := range parts[:len(parts)-1] { - if _, ok := root[part]; !ok { - root[part] = make(map[string]interface{}) - } - root = root[part].(map[string]interface{}) - } - name = parts[len(parts)-1] - - // Fill the counter with the metric details, formatting if requested - if raw { - switch metric := metric.(type) { - case metrics.Counter: - root[name] = map[string]interface{}{ - "Overall": float64(metric.Count()), - } - - case metrics.Meter: - root[name] = map[string]interface{}{ - "AvgRate01Min": metric.Rate1(), - "AvgRate05Min": metric.Rate5(), - "AvgRate15Min": metric.Rate15(), - "MeanRate": metric.RateMean(), - "Overall": float64(metric.Count()), - } - - case metrics.Timer: - root[name] = map[string]interface{}{ - "AvgRate01Min": metric.Rate1(), - "AvgRate05Min": metric.Rate5(), - "AvgRate15Min": metric.Rate15(), - "MeanRate": metric.RateMean(), - "Overall": float64(metric.Count()), - "Percentiles": map[string]interface{}{ - "5": metric.Percentile(0.05), - "20": metric.Percentile(0.2), - "50": metric.Percentile(0.5), - "80": metric.Percentile(0.8), - "95": metric.Percentile(0.95), - }, - } - - case metrics.ResettingTimer: - t := metric.Snapshot() - ps := t.Percentiles([]float64{5, 20, 50, 80, 95}) - root[name] = map[string]interface{}{ - "Measurements": len(t.Values()), - "Mean": t.Mean(), - "Percentiles": map[string]interface{}{ - "5": ps[0], - "20": ps[1], - "50": ps[2], - "80": ps[3], - "95": ps[4], - }, - } - - default: - root[name] = "Unknown metric type" - } - } else { - switch metric := metric.(type) { - case metrics.Counter: - root[name] = map[string]interface{}{ - "Overall": float64(metric.Count()), - } - - case metrics.Meter: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), - } - - case metrics.Timer: - root[name] = map[string]interface{}{ - "Avg01Min": format(metric.Rate1()*60, metric.Rate1()), - "Avg05Min": format(metric.Rate5()*300, metric.Rate5()), - "Avg15Min": format(metric.Rate15()*900, metric.Rate15()), - "Overall": format(float64(metric.Count()), metric.RateMean()), - "Maximum": time.Duration(metric.Max()).String(), - "Minimum": time.Duration(metric.Min()).String(), - "Percentiles": map[string]interface{}{ - "5": time.Duration(metric.Percentile(0.05)).String(), - "20": time.Duration(metric.Percentile(0.2)).String(), - "50": time.Duration(metric.Percentile(0.5)).String(), - "80": time.Duration(metric.Percentile(0.8)).String(), - "95": time.Duration(metric.Percentile(0.95)).String(), - }, - } - - case metrics.ResettingTimer: - t := metric.Snapshot() - ps := t.Percentiles([]float64{5, 20, 50, 80, 95}) - root[name] = map[string]interface{}{ - "Measurements": len(t.Values()), - "Mean": time.Duration(t.Mean()).String(), - "Percentiles": map[string]interface{}{ - "5": time.Duration(ps[0]).String(), - "20": time.Duration(ps[1]).String(), - "50": time.Duration(ps[2]).String(), - "80": time.Duration(ps[3]).String(), - "95": time.Duration(ps[4]).String(), - }, - } - - default: - root[name] = "Unknown metric type" - } - } - }) - return counters, nil -} - // PublicWeb3API offers helper utils type PublicWeb3API struct { stack *Node diff --git a/node/config.go b/node/config.go index db41b3074238..f668712b8499 100644 --- a/node/config.go +++ b/node/config.go @@ -27,7 +27,9 @@ import ( "sync" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/external" "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/accounts/scwallet" "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" @@ -80,13 +82,22 @@ type Config struct { // is created by New and destroyed when the node is stopped. KeyStoreDir string `toml:",omitempty"` + // ExternalSigner specifies an external URI for a clef-type signer + ExternalSigner string `toml:"omitempty"` + // UseLightweightKDF lowers the memory and CPU requirements of the key store // scrypt KDF at the expense of security. UseLightweightKDF bool `toml:",omitempty"` + // InsecureUnlockAllowed allows user to unlock accounts in unsafe http environment. + InsecureUnlockAllowed bool `toml:",omitempty"` + // NoUSB disables hardware wallet monitoring and connectivity. NoUSB bool `toml:",omitempty"` + // SmartCardDaemonPath is the path to the smartcard daemon's socket + SmartCardDaemonPath string `toml:",omitempty"` + // IPCPath is the requested location to place the IPC endpoint. If the path is // a simple file name, it is placed inside the data directory (or on the root // pipe path on Windows), whereas if it's a resolvable path name (absolute or @@ -151,6 +162,29 @@ type Config struct { // private APIs to untrusted users is a major security risk. WSExposeAll bool `toml:",omitempty"` + // GraphQLHost is the host interface on which to start the GraphQL server. If this + // field is empty, no GraphQL API endpoint will be started. + GraphQLHost string `toml:",omitempty"` + + // GraphQLPort is the TCP port number on which to start the GraphQL server. The + // default zero value is/ valid and will pick a port number randomly (useful + // for ephemeral nodes). + GraphQLPort int `toml:",omitempty"` + + // GraphQLCors is the Cross-Origin Resource Sharing header to send to requesting + // clients. Please be aware that CORS is a browser enforced security, it's fully + // useless for custom HTTP clients. + GraphQLCors []string `toml:",omitempty"` + + // GraphQLVirtualHosts is the list of virtual hostnames which are allowed on incoming requests. + // This is by default {'localhost'}. Using this prevents attacks like + // DNS rebinding, which bypasses SOP by simply masquerading as being within the same + // origin. These attacks do not utilize CORS, since they are not cross-domain. + // By explicitly checking the Host-header, the server will not allow requests + // made against the server with a malicious host domain. + // Requests using ip address directly are not affected + GraphQLVirtualHosts []string `toml:",omitempty"` + // Logger is a custom logger to use with the p2p.Server. Logger log.Logger `toml:",omitempty"` @@ -213,6 +247,15 @@ func (c *Config) HTTPEndpoint() string { return fmt.Sprintf("%s:%d", c.HTTPHost, c.HTTPPort) } +// GraphQLEndpoint resolves a GraphQL endpoint based on the configured host interface +// and port parameters. +func (c *Config) GraphQLEndpoint() string { + if c.GraphQLHost == "" { + return "" + } + return fmt.Sprintf("%s:%d", c.GraphQLHost, c.GraphQLPort) +} + // DefaultHTTPEndpoint returns the HTTP endpoint used by default. func DefaultHTTPEndpoint() string { config := &Config{HTTPHost: DefaultHTTPHost, HTTPPort: DefaultHTTPPort} @@ -234,6 +277,12 @@ func DefaultWSEndpoint() string { return config.WSEndpoint() } +// ExtRPCEnabled returns the indicator whether node enables the external +// RPC(http, ws or graphql). +func (c *Config) ExtRPCEnabled() bool { + return c.HTTPHost != "" || c.WSHost != "" || c.GraphQLHost != "" +} + // NodeName returns the devp2p node identifier. func (c *Config) NodeName() string { name := c.name() @@ -381,7 +430,7 @@ func (c *Config) parsePersistentNodes(w *bool, path string) []*enode.Node { if url == "" { continue } - node, err := enode.ParseV4(url) + node, err := enode.Parse(enode.ValidSchemes, url) if err != nil { log.Error(fmt.Sprintf("Node URL %s: %v\n", url, err)) continue @@ -435,24 +484,52 @@ func makeAccountManager(conf *Config) (*accounts.Manager, string, error) { return nil, "", err } // Assemble the account manager and supported backends - backends := []accounts.Backend{ - keystore.NewKeyStore(keydir, scryptN, scryptP), - } - if !conf.NoUSB { - // Start a USB hub for Ledger hardware wallets - if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + var backends []accounts.Backend + if len(conf.ExternalSigner) > 0 { + log.Info("Using external signer", "url", conf.ExternalSigner) + if extapi, err := external.NewExternalBackend(conf.ExternalSigner); err == nil { + backends = append(backends, extapi) } else { - backends = append(backends, ledgerhub) + return nil, "", fmt.Errorf("error connecting to external signer: %v", err) } - // Start a USB hub for Trezor hardware wallets - if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) - } else { - backends = append(backends, trezorhub) + } + if len(backends) == 0 { + // For now, we're using EITHER external signer OR local signers. + // If/when we implement some form of lockfile for USB and keystore wallets, + // we can have both, but it's very confusing for the user to see the same + // accounts in both externally and locally, plus very racey. + backends = append(backends, keystore.NewKeyStore(keydir, scryptN, scryptP)) + if !conf.NoUSB { + // Start a USB hub for Ledger hardware wallets + if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + } else { + backends = append(backends, ledgerhub) + } + // Start a USB hub for Trezor hardware wallets (HID version) + if trezorhub, err := usbwallet.NewTrezorHubWithHID(); err != nil { + log.Warn(fmt.Sprintf("Failed to start HID Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + } + // Start a USB hub for Trezor hardware wallets (WebUSB version) + if trezorhub, err := usbwallet.NewTrezorHubWithWebUSB(); err != nil { + log.Warn(fmt.Sprintf("Failed to start WebUSB Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + } + } + if len(conf.SmartCardDaemonPath) > 0 { + // Start a smart card hub + if schub, err := scwallet.NewHub(conf.SmartCardDaemonPath, scwallet.Scheme, keydir); err != nil { + log.Warn(fmt.Sprintf("Failed to start smart card hub, disabling: %v", err)) + } else { + backends = append(backends, schub) + } } } - return accounts.NewManager(backends...), ephemeral, nil + + return accounts.NewManager(&accounts.Config{InsecureUnlockAllowed: conf.InsecureUnlockAllowed}, backends...), ephemeral, nil } var warnLock sync.Mutex diff --git a/node/config_test.go b/node/config_test.go index b81d3d612025..00c24a239123 100644 --- a/node/config_test.go +++ b/node/config_test.go @@ -38,14 +38,22 @@ func TestDatadirCreation(t *testing.T) { } defer os.RemoveAll(dir) - if _, err := New(&Config{DataDir: dir}); err != nil { + node, err := New(&Config{DataDir: dir}) + if err != nil { t.Fatalf("failed to create stack with existing datadir: %v", err) } + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } // Generate a long non-existing datadir path and check that it gets created by a node dir = filepath.Join(dir, "a", "b", "c", "d", "e", "f") - if _, err := New(&Config{DataDir: dir}); err != nil { + node, err = New(&Config{DataDir: dir}) + if err != nil { t.Fatalf("failed to create stack with creatable datadir: %v", err) } + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } if _, err := os.Stat(dir); err != nil { t.Fatalf("freshly created datadir not accessible: %v", err) } @@ -57,8 +65,12 @@ func TestDatadirCreation(t *testing.T) { defer os.Remove(file.Name()) dir = filepath.Join(file.Name(), "invalid/path") - if _, err := New(&Config{DataDir: dir}); err == nil { + node, err = New(&Config{DataDir: dir}) + if err == nil { t.Fatalf("protocol stack created with an invalid datadir") + if err := node.Close(); err != nil { + t.Fatalf("failed to close node: %v", err) + } } } diff --git a/node/defaults.go b/node/defaults.go index a0f53a1e1fb1..8e308bfc3c2a 100644 --- a/node/defaults.go +++ b/node/defaults.go @@ -28,21 +28,25 @@ import ( ) const ( - DefaultHTTPHost = "localhost" // Default host interface for the HTTP RPC server - DefaultHTTPPort = 8588 // Default TCP port for the HTTP RPC server - DefaultWSHost = "localhost" // Default host interface for the websocket RPC server - DefaultWSPort = 8590 // Default TCP port for the websocket RPC server + DefaultHTTPHost = "localhost" // Default host interface for the HTTP RPC server + DefaultHTTPPort = 8588 // Default TCP port for the HTTP RPC server + DefaultWSHost = "localhost" // Default host interface for the websocket RPC server + DefaultWSPort = 8598 // Default TCP port for the websocket RPC server + DefaultGraphQLHost = "localhost" // Default host interface for the GraphQL server + DefaultGraphQLPort = 8599 // Default TCP port for the GraphQL server ) // DefaultConfig contains reasonable default settings. var DefaultConfig = Config{ - DataDir: DefaultDataDir(), - HTTPPort: DefaultHTTPPort, - HTTPModules: []string{"net", "web3"}, - HTTPVirtualHosts: []string{"localhost"}, - HTTPTimeouts: rpc.DefaultHTTPTimeouts, - WSPort: DefaultWSPort, - WSModules: []string{"net", "web3"}, + DataDir: DefaultDataDir(), + HTTPPort: DefaultHTTPPort, + HTTPModules: []string{"net", "web3"}, + HTTPVirtualHosts: []string{"localhost"}, + HTTPTimeouts: rpc.DefaultHTTPTimeouts, + WSPort: DefaultWSPort, + WSModules: []string{"net", "web3"}, + GraphQLPort: DefaultGraphQLPort, + GraphQLVirtualHosts: []string{"localhost"}, P2P: p2p.Config{ ListenAddr: ":8589", MaxPeers: 25, @@ -56,11 +60,20 @@ func DefaultDataDir() string { // Try to place the data folder in the user's home dir home := homeDir() if home != "" { - if runtime.GOOS == "darwin" { + switch runtime.GOOS { + case "darwin": return filepath.Join(home, "Library", "Ethereum") - } else if runtime.GOOS == "windows" { - return filepath.Join(home, "AppData", "Roaming", "Ethereum") - } else { + case "windows": + // We used to put everything in %HOME%\AppData\Roaming, but this caused + // problems with non-typical setups. If this fallback location exists and + // is non-empty, use it, otherwise DTRT and check %LOCALAPPDATA%. + fallback := filepath.Join(home, "AppData", "Roaming", "Ethereum") + appdata := windowsAppData() + if appdata == "" || isNonEmptyDir(fallback) { + return fallback + } + return filepath.Join(appdata, "Ethereum") + default: return filepath.Join(home, ".metadium") } } @@ -68,6 +81,27 @@ func DefaultDataDir() string { return "" } +func windowsAppData() string { + v := os.Getenv("LOCALAPPDATA") + if v == "" { + // Windows XP and below don't have LocalAppData. Crash here because + // we don't support Windows XP and undefining the variable will cause + // other issues. + panic("environment variable LocalAppData is undefined") + } + return v +} + +func isNonEmptyDir(dir string) bool { + f, err := os.Open(dir) + if err != nil { + return false + } + names, _ := f.Readdir(1) + f.Close() + return len(names) > 0 +} + func homeDir() string { if home := os.Getenv("HOME"); home != "" { return home diff --git a/node/node.go b/node/node.go index 99b121fcf245..57f2a868f552 100644 --- a/node/node.go +++ b/node/node.go @@ -27,13 +27,14 @@ import ( "sync" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/internal/debug" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/rpc" - "github.com/prometheus/prometheus/util/flock" + "github.com/prometheus/tsdb/fileutil" ) // Node is a container on which services can be registered. @@ -42,8 +43,8 @@ type Node struct { config *Config accman *accounts.Manager - ephemeralKeystore string // if non-empty, the key directory that will be removed by Stop - instanceDirLock flock.Releaser // prevents concurrent use of instance directory + ephemeralKeystore string // if non-empty, the key directory that will be removed by Stop + instanceDirLock fileutil.Releaser // prevents concurrent use of instance directory serverConfig p2p.Config server *p2p.Server // Currently running P2P networking layer @@ -121,6 +122,29 @@ func New(conf *Config) (*Node, error) { }, nil } +// Close stops the Node and releases resources acquired in +// Node constructor New. +func (n *Node) Close() error { + var errs []error + + // Terminate all subsystems and collect any errors + if err := n.Stop(); err != nil && err != ErrNodeStopped { + errs = append(errs, err) + } + if err := n.accman.Close(); err != nil { + errs = append(errs, err) + } + // Report any errors that might have occurred + switch len(errs) { + case 0: + return nil + case 1: + return errs[0] + default: + return fmt.Errorf("%v", errs) + } +} + // Register injects a new service into the node's stack. The service created by // the passed constructor must be unique in its type with regard to sibling ones. func (n *Node) Register(constructor ServiceConstructor) error { @@ -197,7 +221,7 @@ func (n *Node) Start() error { return convertFileLockError(err) } // Start each of the services - started := []reflect.Type{} + var started []reflect.Type for kind, service := range services { // Start the next service, stopping all previous upon failure if err := service.Start(running); err != nil { @@ -223,10 +247,14 @@ func (n *Node) Start() error { n.services = services n.server = running n.stop = make(chan struct{}) - return nil } +// Config returns the configuration of node. +func (n *Node) Config() *Config { + return n.config +} + func (n *Node) openDataDir() error { if n.config.DataDir == "" { return nil // ephemeral @@ -238,7 +266,7 @@ func (n *Node) openDataDir() error { } // Lock the instance directory to prevent concurrent use by another instance as well as // accidental use of the instance directory as a database. - release, _, err := flock.New(filepath.Join(instdir, "LOCK")) + release, _, err := fileutil.Flock(filepath.Join(instdir, "LOCK")) if err != nil { return convertFileLockError(err) } @@ -578,11 +606,31 @@ func (n *Node) EventMux() *event.TypeMux { // OpenDatabase opens an existing database with the given name (or creates one if no // previous can be found) from within the node's instance directory. If the node is // ephemeral, a memory database is returned. -func (n *Node) OpenDatabase(name string, cache, handles int) (ethdb.Database, error) { +func (n *Node) OpenDatabase(name string, cache, handles int, namespace string) (ethdb.Database, error) { if n.config.DataDir == "" { - return ethdb.NewMemDatabase(), nil + return rawdb.NewMemoryDatabase(), nil } - return ethdb.NewDatabase(n.config.ResolvePath(name), cache, handles) + return rawdb.NewDB(n.config.ResolvePath(name), cache, handles, namespace) +} + +// OpenDatabaseWithFreezer opens an existing database with the given name (or +// creates one if no previous can be found) from within the node's data directory, +// also attaching a chain freezer to it that moves ancient chain data from the +// database to immutable append-only files. If the node is an ephemeral one, a +// memory database is returned. +func (n *Node) OpenDatabaseWithFreezer(name string, cache, handles int, freezer, namespace string) (ethdb.Database, error) { + if n.config.DataDir == "" { + return rawdb.NewMemoryDatabase(), nil + } + root := n.config.ResolvePath(name) + + switch { + case freezer == "": + freezer = filepath.Join(root, "ancient") + case !filepath.IsAbs(freezer): + freezer = n.config.ResolvePath(freezer) + } + return rawdb.NewDBWithFreezer(root, cache, handles, freezer, namespace) } // ResolvePath returns the absolute path of a resource in the instance directory. @@ -606,11 +654,6 @@ func (n *Node) apis() []rpc.API { Namespace: "debug", Version: "1.0", Service: debug.Handler, - }, { - Namespace: "debug", - Version: "1.0", - Service: NewPublicDebugAPI(n), - Public: true, }, { Namespace: "web3", Version: "1.0", diff --git a/node/node_example_test.go b/node/node_example_test.go index ee06f4065c37..57b18855f1ed 100644 --- a/node/node_example_test.go +++ b/node/node_example_test.go @@ -46,6 +46,8 @@ func ExampleService() { if err != nil { log.Fatalf("Failed to create network node: %v", err) } + defer stack.Close() + // Create and register a simple network service. This is done through the definition // of a node.ServiceConstructor that will instantiate a node.Service. The reason for // the factory method approach is to support service restarts without relying on the diff --git a/node/node_test.go b/node/node_test.go index f833cd688037..c464771cd807 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -46,6 +46,8 @@ func TestNodeLifeCycle(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Ensure that a stopped node can be stopped again for i := 0; i < 3; i++ { if err := stack.Stop(); err != ErrNodeStopped { @@ -88,6 +90,8 @@ func TestNodeUsedDataDir(t *testing.T) { if err != nil { t.Fatalf("failed to create original protocol stack: %v", err) } + defer original.Close() + if err := original.Start(); err != nil { t.Fatalf("failed to start original protocol stack: %v", err) } @@ -98,6 +102,8 @@ func TestNodeUsedDataDir(t *testing.T) { if err != nil { t.Fatalf("failed to create duplicate protocol stack: %v", err) } + defer duplicate.Close() + if err := duplicate.Start(); err != ErrDatadirUsed { t.Fatalf("duplicate datadir failure mismatch: have %v, want %v", err, ErrDatadirUsed) } @@ -109,6 +115,8 @@ func TestServiceRegistry(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of unique services and ensure they start successfully services := []ServiceConstructor{NewNoopServiceA, NewNoopServiceB, NewNoopServiceC} for i, constructor := range services { @@ -141,6 +149,8 @@ func TestServiceLifeCycle(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of life-cycle instrumented services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -191,6 +201,8 @@ func TestServiceRestarts(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Define a service that does not support restarts var ( running bool @@ -239,6 +251,8 @@ func TestServiceConstructionAbortion(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Define a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -286,6 +300,8 @@ func TestServiceStartupAbortion(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -339,6 +355,8 @@ func TestServiceTerminationGuarantee(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of good services services := map[string]InstrumentingWrapper{ "A": InstrumentedServiceMakerA, @@ -414,6 +432,8 @@ func TestServiceRetrieval(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + if err := stack.Register(NewNoopService); err != nil { t.Fatalf("noop service registration failed: %v", err) } @@ -449,6 +469,8 @@ func TestProtocolGather(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of services with some configured number of protocols services := map[string]struct { Count int @@ -505,6 +527,8 @@ func TestAPIGather(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() + // Register a batch of services with some configured APIs calls := make(chan string, 1) makeAPI := func(result string) *OneMethodAPI { diff --git a/node/service.go b/node/service.go index 19c0ee5e619a..5c1b079561ae 100644 --- a/node/service.go +++ b/node/service.go @@ -17,9 +17,11 @@ package node import ( + "path/filepath" "reflect" "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/p2p" @@ -39,15 +41,31 @@ type ServiceContext struct { // OpenDatabase opens an existing database with the given name (or creates one // if no previous can be found) from within the node's data directory. If the // node is an ephemeral one, a memory database is returned. -func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int) (ethdb.Database, error) { +func (ctx *ServiceContext) OpenDatabase(name string, cache int, handles int, namespace string) (ethdb.Database, error) { if ctx.config.DataDir == "" { - return ethdb.NewMemDatabase(), nil + return rawdb.NewMemoryDatabase(), nil } - db, err := ethdb.NewDatabase(ctx.config.ResolvePath(name), cache, handles) - if err != nil { - return nil, err + return rawdb.NewDB(ctx.config.ResolvePath(name), cache, handles, namespace) +} + +// OpenDatabaseWithFreezer opens an existing database with the given name (or +// creates one if no previous can be found) from within the node's data directory, +// also attaching a chain freezer to it that moves ancient chain data from the +// database to immutable append-only files. If the node is an ephemeral one, a +// memory database is returned. +func (ctx *ServiceContext) OpenDatabaseWithFreezer(name string, cache int, handles int, freezer string, namespace string) (ethdb.Database, error) { + if ctx.config.DataDir == "" { + return rawdb.NewMemoryDatabase(), nil } - return db, nil + root := ctx.config.ResolvePath(name) + + switch { + case freezer == "": + freezer = filepath.Join(root, "ancient") + case !filepath.IsAbs(freezer): + freezer = ctx.config.ResolvePath(freezer) + } + return rawdb.NewDBWithFreezer(root, cache, handles, freezer, namespace) } // ResolvePath resolves a user path into the data directory if that was relative @@ -67,6 +85,12 @@ func (ctx *ServiceContext) Service(service interface{}) error { return ErrServiceUnknown } +// ExtRPCEnabled returns the indicator whether node enables the external +// RPC(http, ws or graphql). +func (ctx *ServiceContext) ExtRPCEnabled() bool { + return ctx.config.ExtRPCEnabled() +} + // ServiceConstructor is the function signature of the constructors needed to be // registered for service instantiation. type ServiceConstructor func(ctx *ServiceContext) (Service, error) diff --git a/node/service_test.go b/node/service_test.go index a7ae439e0a90..63004a51ab58 100644 --- a/node/service_test.go +++ b/node/service_test.go @@ -39,7 +39,7 @@ func TestContextDatabases(t *testing.T) { } // Request the opening/creation of a database and ensure it persists to disk ctx := &ServiceContext{config: &Config{Name: "unit-test", DataDir: dir}} - db, err := ctx.OpenDatabase("persistent", 0, 0) + db, err := ctx.OpenDatabase("persistent", 0, 0, "") if err != nil { t.Fatalf("failed to open persistent database: %v", err) } @@ -50,7 +50,7 @@ func TestContextDatabases(t *testing.T) { } // Request th opening/creation of an ephemeral database and ensure it's not persisted ctx = &ServiceContext{config: &Config{DataDir: ""}} - db, err = ctx.OpenDatabase("ephemeral", 0, 0) + db, err = ctx.OpenDatabase("ephemeral", 0, 0, "") if err != nil { t.Fatalf("failed to open ephemeral database: %v", err) } @@ -67,6 +67,7 @@ func TestContextServices(t *testing.T) { if err != nil { t.Fatalf("failed to create protocol stack: %v", err) } + defer stack.Close() // Define a verifier that ensures a NoopA is before it and NoopB after verifier := func(ctx *ServiceContext) (Service, error) { var objA *NoopServiceA diff --git a/p2p/dial.go b/p2p/dial.go index 075a0f93680a..8dee5063f1d5 100644 --- a/p2p/dial.go +++ b/p2p/dial.go @@ -17,7 +17,6 @@ package p2p import ( - "container/heap" "errors" "fmt" "net" @@ -29,9 +28,10 @@ import ( ) const ( - // This is the amount of time spent waiting in between - // redialing a certain node. - dialHistoryExpiration = 30 * time.Second + // This is the amount of time spent waiting in between redialing a certain node. The + // limit is a bit higher than inboundThrottleTime to prevent failing dials in small + // private networks. + dialHistoryExpiration = inboundThrottleTime + 5*time.Second // Discovery lookups are throttled and can only run // once every few seconds. @@ -65,23 +65,23 @@ func (t TCPDialer) Dial(dest *enode.Node) (net.Conn, error) { } // dialstate schedules dials and discovery lookups. -// it get's a chance to compute new tasks on every iteration +// It gets a chance to compute new tasks on every iteration // of the main loop in Server.run. type dialstate struct { maxDynDials int ntab discoverTable netrestrict *netutil.Netlist self enode.ID + bootnodes []*enode.Node // default dials when there are no peers + log log.Logger + start time.Time // time when the dialer was first used lookupRunning bool dialing map[enode.ID]connFlag lookupBuf []*enode.Node // current discovery lookup results randomNodes []*enode.Node // filled from Table static map[enode.ID]*dialTask - hist *dialHistory - - start time.Time // time when the dialer was first used - bootnodes []*enode.Node // default dials when there are no peers + hist expHeap } type discoverTable interface { @@ -91,15 +91,6 @@ type discoverTable interface { ReadRandomNodes([]*enode.Node) int } -// the dial history remembers recent dials. -type dialHistory []pastDial - -// pastDial is an entry in the dial history. -type pastDial struct { - id enode.ID - exp time.Time -} - type task interface { Do(*Server) } @@ -126,20 +117,23 @@ type waitExpireTask struct { time.Duration } -func newDialState(self enode.ID, static []*enode.Node, bootnodes []*enode.Node, ntab discoverTable, maxdyn int, netrestrict *netutil.Netlist) *dialstate { +func newDialState(self enode.ID, ntab discoverTable, maxdyn int, cfg *Config) *dialstate { s := &dialstate{ maxDynDials: maxdyn, ntab: ntab, self: self, - netrestrict: netrestrict, + netrestrict: cfg.NetRestrict, + log: cfg.Logger, static: make(map[enode.ID]*dialTask), dialing: make(map[enode.ID]connFlag), - bootnodes: make([]*enode.Node, len(bootnodes)), + bootnodes: make([]*enode.Node, len(cfg.BootstrapNodes)), randomNodes: make([]*enode.Node, maxdyn/2), - hist: new(dialHistory), } - copy(s.bootnodes, bootnodes) - for _, n := range static { + copy(s.bootnodes, cfg.BootstrapNodes) + if s.log == nil { + s.log = log.Root() + } + for _, n := range cfg.StaticNodes { s.addStatic(n) } return s @@ -154,9 +148,6 @@ func (s *dialstate) addStatic(n *enode.Node) { func (s *dialstate) removeStatic(n *enode.Node) { // This removes a task so future attempts to connect will not be made. delete(s.static, n.ID()) - // This removes a previous dial timestamp so that application - // can force a server to reconnect with chosen peer immediately. - s.hist.remove(n.ID()) } func (s *dialstate) newTasks(nRunning int, peers map[enode.ID]*Peer, now time.Time) []task { @@ -167,7 +158,7 @@ func (s *dialstate) newTasks(nRunning int, peers map[enode.ID]*Peer, now time.Ti var newtasks []task addDial := func(flag connFlag, n *enode.Node) bool { if err := s.checkDial(n, peers); err != nil { - log.Trace("Skipping dial candidate", "id", n.ID(), "addr", &net.TCPAddr{IP: n.IP(), Port: n.TCP()}, "err", err) + s.log.Trace("Skipping dial candidate", "id", n.ID(), "addr", &net.TCPAddr{IP: n.IP(), Port: n.TCP()}, "err", err) return false } s.dialing[n.ID()] = flag @@ -196,7 +187,7 @@ func (s *dialstate) newTasks(nRunning int, peers map[enode.ID]*Peer, now time.Ti err := s.checkDial(t.dest, peers) switch err { case errNotWhitelisted, errSelf: - log.Warn("Removing static dial candidate", "id", t.dest.ID, "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}, "err", err) + s.log.Warn("Removing static dial candidate", "id", t.dest.ID, "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}, "err", err) delete(s.static, t.dest.ID()) case nil: s.dialing[id] = t.flags @@ -246,7 +237,7 @@ func (s *dialstate) newTasks(nRunning int, peers map[enode.ID]*Peer, now time.Ti // This should prevent cases where the dialer logic is not ticked // because there are no pending events. if nRunning == 0 && len(newtasks) == 0 && s.hist.Len() > 0 { - t := &waitExpireTask{s.hist.min().exp.Sub(now)} + t := &waitExpireTask{s.hist.nextExpiry().Sub(now)} newtasks = append(newtasks, t) } return newtasks @@ -271,7 +262,7 @@ func (s *dialstate) checkDial(n *enode.Node, peers map[enode.ID]*Peer) error { return errSelf case s.netrestrict != nil && !s.netrestrict.Contains(n.IP()): return errNotWhitelisted - case s.hist.contains(n.ID()): + case s.hist.contains(string(n.ID().Bytes())): return errRecentlyDialed } return nil @@ -280,7 +271,7 @@ func (s *dialstate) checkDial(n *enode.Node, peers map[enode.ID]*Peer) error { func (s *dialstate) taskDone(t task, now time.Time) { switch t := t.(type) { case *dialTask: - s.hist.add(t.dest.ID(), now.Add(dialHistoryExpiration)) + s.hist.add(string(t.dest.ID().Bytes()), now.Add(dialHistoryExpiration)) delete(s.dialing, t.dest.ID()) case *discoverTask: s.lookupRunning = false @@ -296,7 +287,7 @@ func (t *dialTask) Do(srv *Server) { } err := t.dial(srv, t.dest) if err != nil { - log.Trace("Dial error", "task", t, "err", err) + srv.log.Trace("Dial error", "task", t, "err", err) // Try resolving the ID of static nodes if dialing failed. if _, ok := err.(*dialError); ok && t.flags&staticDialedConn != 0 { if t.resolve(srv) { @@ -314,7 +305,7 @@ func (t *dialTask) Do(srv *Server) { // The backoff delay resets when the node is found. func (t *dialTask) resolve(srv *Server) bool { if srv.ntab == nil { - log.Debug("Can't resolve node", "id", t.dest.ID, "err", "discovery is disabled") + srv.log.Debug("Can't resolve node", "id", t.dest.ID, "err", "discovery is disabled") return false } if t.resolveDelay == 0 { @@ -330,13 +321,13 @@ func (t *dialTask) resolve(srv *Server) bool { if t.resolveDelay > maxResolveDelay { t.resolveDelay = maxResolveDelay } - log.Debug("Resolving node failed", "id", t.dest.ID, "newdelay", t.resolveDelay) + srv.log.Debug("Resolving node failed", "id", t.dest.ID, "newdelay", t.resolveDelay) return false } // The node was found. t.resolveDelay = initialResolveDelay t.dest = resolved - log.Debug("Resolved node", "id", t.dest.ID, "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}) + srv.log.Debug("Resolved node", "id", t.dest.ID, "addr", &net.TCPAddr{IP: t.dest.IP(), Port: t.dest.TCP()}) return true } @@ -385,49 +376,3 @@ func (t waitExpireTask) Do(*Server) { func (t waitExpireTask) String() string { return fmt.Sprintf("wait for dial hist expire (%v)", t.Duration) } - -// Use only these methods to access or modify dialHistory. -func (h dialHistory) min() pastDial { - return h[0] -} -func (h *dialHistory) add(id enode.ID, exp time.Time) { - heap.Push(h, pastDial{id, exp}) - -} -func (h *dialHistory) remove(id enode.ID) bool { - for i, v := range *h { - if v.id == id { - heap.Remove(h, i) - return true - } - } - return false -} -func (h dialHistory) contains(id enode.ID) bool { - for _, v := range h { - if v.id == id { - return true - } - } - return false -} -func (h *dialHistory) expire(now time.Time) { - for h.Len() > 0 && h.min().exp.Before(now) { - heap.Pop(h) - } -} - -// heap.Interface boilerplate -func (h dialHistory) Len() int { return len(h) } -func (h dialHistory) Less(i, j int) bool { return h[i].exp.Before(h[j].exp) } -func (h dialHistory) Swap(i, j int) { h[i], h[j] = h[j], h[i] } -func (h *dialHistory) Push(x interface{}) { - *h = append(*h, x.(pastDial)) -} -func (h *dialHistory) Pop() interface{} { - old := *h - n := len(old) - x := old[n-1] - *h = old[0 : n-1] - return x -} diff --git a/p2p/dial_test.go b/p2p/dial_test.go index f41ab77524d9..de8fc4a6e3e6 100644 --- a/p2p/dial_test.go +++ b/p2p/dial_test.go @@ -20,10 +20,13 @@ import ( "encoding/binary" "net" "reflect" + "strings" "testing" "time" "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/netutil" @@ -67,10 +70,10 @@ func runDialTest(t *testing.T, test dialtest) { new := test.init.newTasks(running, pm(round.peers), vtime) if !sametasks(new, round.new) { - t.Errorf("round %d: new tasks mismatch:\ngot %v\nwant %v\nstate: %v\nrunning: %v\n", + t.Errorf("ERROR round %d: got %v\nwant %v\nstate: %v\nrunning: %v", i, spew.Sdump(new), spew.Sdump(round.new), spew.Sdump(test.init), spew.Sdump(running)) } - t.Log("tasks:", spew.Sdump(new)) + t.Logf("round %d new tasks: %s", i, strings.TrimSpace(spew.Sdump(new))) // Time advances by 16 seconds on every round. vtime = vtime.Add(16 * time.Second) @@ -88,8 +91,9 @@ func (t fakeTable) ReadRandomNodes(buf []*enode.Node) int { return copy(buf, t) // This test checks that dynamic dials are launched from discovery results. func TestDialStateDynDial(t *testing.T) { + config := &Config{Logger: testlog.Logger(t, log.LvlTrace)} runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, nil, nil, fakeTable{}, 5, nil), + init: newDialState(enode.ID{}, fakeTable{}, 5, config), rounds: []round{ // A discovery query is launched. { @@ -153,7 +157,7 @@ func TestDialStateDynDial(t *testing.T) { &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, new: []task{ - &waitExpireTask{Duration: 14 * time.Second}, + &waitExpireTask{Duration: 19 * time.Second}, }, }, // In this round, the peer with id 2 drops off. The query @@ -223,10 +227,13 @@ func TestDialStateDynDial(t *testing.T) { // Tests that bootnodes are dialed if no peers are connectd, but not otherwise. func TestDialStateDynDialBootnode(t *testing.T) { - bootnodes := []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), + config := &Config{ + BootstrapNodes: []*enode.Node{ + newNode(uintID(1), nil), + newNode(uintID(2), nil), + newNode(uintID(3), nil), + }, + Logger: testlog.Logger(t, log.LvlTrace), } table := fakeTable{ newNode(uintID(4), nil), @@ -236,7 +243,7 @@ func TestDialStateDynDialBootnode(t *testing.T) { newNode(uintID(8), nil), } runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, nil, bootnodes, table, 5, nil), + init: newDialState(enode.ID{}, table, 5, config), rounds: []round{ // 2 dynamic dials attempted, bootnodes pending fallback interval { @@ -259,25 +266,24 @@ func TestDialStateDynDialBootnode(t *testing.T) { { new: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, }, // No dials succeed, 2nd bootnode is attempted { done: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, new: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(2), nil)}, + &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, + &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, }, // No dials succeed, 3rd bootnode is attempted { done: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(2), nil)}, + &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, new: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, @@ -288,21 +294,19 @@ func TestDialStateDynDialBootnode(t *testing.T) { done: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(3), nil)}, }, - new: []task{ - &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, - }, + new: []task{}, }, // Random dial succeeds, no more bootnodes are attempted { + new: []task{ + &waitExpireTask{3 * time.Second}, + }, peers: []*Peer{ {rw: &conn{flags: dynDialedConn, node: newNode(uintID(4), nil)}}, }, done: []task{ &dialTask{flags: dynDialedConn, dest: newNode(uintID(1), nil)}, &dialTask{flags: dynDialedConn, dest: newNode(uintID(4), nil)}, - &dialTask{flags: dynDialedConn, dest: newNode(uintID(5), nil)}, }, }, }, @@ -324,7 +328,7 @@ func TestDialStateDynDialFromTable(t *testing.T) { } runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, nil, nil, table, 10, nil), + init: newDialState(enode.ID{}, table, 10, &Config{Logger: testlog.Logger(t, log.LvlTrace)}), rounds: []round{ // 5 out of 8 of the nodes returned by ReadRandomNodes are dialed. { @@ -430,7 +434,7 @@ func TestDialStateNetRestrict(t *testing.T) { restrict.Add("127.0.2.0/24") runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, nil, nil, table, 10, restrict), + init: newDialState(enode.ID{}, table, 10, &Config{NetRestrict: restrict}), rounds: []round{ { new: []task{ @@ -444,16 +448,18 @@ func TestDialStateNetRestrict(t *testing.T) { // This test checks that static dials are launched. func TestDialStateStaticDial(t *testing.T) { - wantStatic := []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), - newNode(uintID(4), nil), - newNode(uintID(5), nil), + config := &Config{ + StaticNodes: []*enode.Node{ + newNode(uintID(1), nil), + newNode(uintID(2), nil), + newNode(uintID(3), nil), + newNode(uintID(4), nil), + newNode(uintID(5), nil), + }, + Logger: testlog.Logger(t, log.LvlTrace), } - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, wantStatic, nil, fakeTable{}, 0, nil), + init: newDialState(enode.ID{}, fakeTable{}, 0, config), rounds: []round{ // Static dials are launched for the nodes that // aren't yet connected. @@ -495,7 +501,7 @@ func TestDialStateStaticDial(t *testing.T) { &dialTask{flags: staticDialedConn, dest: newNode(uintID(5), nil)}, }, new: []task{ - &waitExpireTask{Duration: 14 * time.Second}, + &waitExpireTask{Duration: 19 * time.Second}, }, }, // Wait a round for dial history to expire, no new tasks should spawn. @@ -511,6 +517,9 @@ func TestDialStateStaticDial(t *testing.T) { // If a static node is dropped, it should be immediately redialed, // irrespective whether it was originally static or dynamic. { + done: []task{ + &waitExpireTask{Duration: 19 * time.Second}, + }, peers: []*Peer{ {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, {rw: &conn{flags: staticDialedConn, node: newNode(uintID(3), nil)}}, @@ -518,67 +527,24 @@ func TestDialStateStaticDial(t *testing.T) { }, new: []task{ &dialTask{flags: staticDialedConn, dest: newNode(uintID(2), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(4), nil)}, }, }, }, }) } -// This test checks that static peers will be redialed immediately if they were re-added to a static list. -func TestDialStaticAfterReset(t *testing.T) { - wantStatic := []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - } - - rounds := []round{ - // Static dials are launched for the nodes that aren't yet connected. - { - peers: nil, - new: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(2), nil)}, - }, - }, - // No new dial tasks, all peers are connected. - { - peers: []*Peer{ - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: staticDialedConn, node: newNode(uintID(2), nil)}}, - }, - done: []task{ - &dialTask{flags: staticDialedConn, dest: newNode(uintID(1), nil)}, - &dialTask{flags: staticDialedConn, dest: newNode(uintID(2), nil)}, - }, - new: []task{ - &waitExpireTask{Duration: 30 * time.Second}, - }, - }, - } - dTest := dialtest{ - init: newDialState(enode.ID{}, wantStatic, nil, fakeTable{}, 0, nil), - rounds: rounds, - } - runDialTest(t, dTest) - for _, n := range wantStatic { - dTest.init.removeStatic(n) - dTest.init.addStatic(n) - } - // without removing peers they will be considered recently dialed - runDialTest(t, dTest) -} - // This test checks that past dials are not retried for some time. func TestDialStateCache(t *testing.T) { - wantStatic := []*enode.Node{ - newNode(uintID(1), nil), - newNode(uintID(2), nil), - newNode(uintID(3), nil), + config := &Config{ + StaticNodes: []*enode.Node{ + newNode(uintID(1), nil), + newNode(uintID(2), nil), + newNode(uintID(3), nil), + }, + Logger: testlog.Logger(t, log.LvlTrace), } - runDialTest(t, dialtest{ - init: newDialState(enode.ID{}, wantStatic, nil, fakeTable{}, 0, nil), + init: newDialState(enode.ID{}, fakeTable{}, 0, config), rounds: []round{ // Static dials are launched for the nodes that // aren't yet connected. @@ -606,28 +572,37 @@ func TestDialStateCache(t *testing.T) { // entry to expire. { peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(1), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(2), nil)}}, }, done: []task{ &dialTask{flags: staticDialedConn, dest: newNode(uintID(3), nil)}, }, new: []task{ - &waitExpireTask{Duration: 14 * time.Second}, + &waitExpireTask{Duration: 19 * time.Second}, }, }, // Still waiting for node 3's entry to expire in the cache. { peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(1), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(2), nil)}}, + }, + }, + { + peers: []*Peer{ + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(1), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(2), nil)}}, }, }, // The cache entry for node 3 has expired and is retried. { + done: []task{ + &waitExpireTask{Duration: 19 * time.Second}, + }, peers: []*Peer{ - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(1), nil)}}, - {rw: &conn{flags: dynDialedConn, node: newNode(uintID(2), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(1), nil)}}, + {rw: &conn{flags: staticDialedConn, node: newNode(uintID(2), nil)}}, }, new: []task{ &dialTask{flags: staticDialedConn, dest: newNode(uintID(3), nil)}, @@ -638,9 +613,13 @@ func TestDialStateCache(t *testing.T) { } func TestDialResolve(t *testing.T) { + config := &Config{ + Logger: testlog.Logger(t, log.LvlTrace), + Dialer: TCPDialer{&net.Dialer{Deadline: time.Now().Add(-5 * time.Minute)}}, + } resolved := newNode(uintID(1), net.IP{127, 0, 55, 234}) table := &resolveMock{answer: resolved} - state := newDialState(enode.ID{}, nil, nil, table, 0, nil) + state := newDialState(enode.ID{}, table, 0, config) // Check that the task is generated with an incomplete ID. dest := newNode(uintID(1), nil) @@ -651,8 +630,7 @@ func TestDialResolve(t *testing.T) { } // Now run the task, it should resolve the ID once. - config := Config{Dialer: TCPDialer{&net.Dialer{Deadline: time.Now().Add(-5 * time.Minute)}}} - srv := &Server{ntab: table, Config: config} + srv := &Server{ntab: table, log: config.Logger, Config: *config} tasks[0].Do(srv) if !reflect.DeepEqual(table.resolveCalls, []*enode.Node{dest}) { t.Fatalf("wrong resolve calls, got %v", table.resolveCalls) diff --git a/p2p/discover/common.go b/p2p/discover/common.go new file mode 100644 index 000000000000..3c080359fdf8 --- /dev/null +++ b/p2p/discover/common.go @@ -0,0 +1,57 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package discover + +import ( + "crypto/ecdsa" + "net" + + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/netutil" +) + +type UDPConn interface { + ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) + WriteToUDP(b []byte, addr *net.UDPAddr) (n int, err error) + Close() error + LocalAddr() net.Addr +} + +// Config holds Table-related settings. +type Config struct { + // These settings are required and configure the UDP listener: + PrivateKey *ecdsa.PrivateKey + + // These settings are optional: + NetRestrict *netutil.Netlist // network whitelist + Bootnodes []*enode.Node // list of bootstrap nodes + Unhandled chan<- ReadPacket // unhandled packets are sent on this channel + Log log.Logger // if set, log messages go here +} + +// ListenUDP starts listening for discovery packets on the given UDP socket. +func ListenUDP(c UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv4, error) { + return ListenV4(c, ln, cfg) +} + +// ReadPacket is a packet that couldn't be handled. Those packets are sent to the unhandled +// channel if configured. +type ReadPacket struct { + Data []byte + Addr *net.UDPAddr +} diff --git a/p2p/discover/node.go b/p2p/discover/node.go index 8d4af166bba4..a7d9ce7368c0 100644 --- a/p2p/discover/node.go +++ b/p2p/discover/node.go @@ -25,7 +25,6 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/secp256k1" "github.com/ethereum/go-ethereum/p2p/enode" ) @@ -64,7 +63,7 @@ func (e encPubkey) id() enode.ID { // recoverNodeKey computes the public key used to sign the // given hash from the signature. func recoverNodeKey(hash, sig []byte) (key encPubkey, err error) { - pubkey, err := secp256k1.RecoverPubkey(hash, sig) + pubkey, err := crypto.Ecrecover(hash, sig) if err != nil { return key, err } diff --git a/p2p/discover/table.go b/p2p/discover/table.go index ef0c08afce8b..4bddb0142cbe 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -23,7 +23,6 @@ package discover import ( - "crypto/ecdsa" crand "crypto/rand" "encoding/binary" "fmt" @@ -34,7 +33,6 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/netutil" @@ -55,15 +53,17 @@ const ( bucketIPLimit, bucketSubnet = 2, 24 // at most 2 addresses from the same /24 tableIPLimit, tableSubnet = 10, 24 - maxFindnodeFailures = 5 // Nodes exceeding this limit are dropped - refreshInterval = 30 * time.Minute - revalidateInterval = 10 * time.Second - copyNodesInterval = 30 * time.Second - seedMinTableTime = 5 * time.Minute - seedCount = 30 - seedMaxAge = 5 * 24 * time.Hour + refreshInterval = 30 * time.Minute + revalidateInterval = 10 * time.Second + copyNodesInterval = 30 * time.Second + seedMinTableTime = 5 * time.Minute + seedCount = 30 + seedMaxAge = 5 * 24 * time.Hour ) +// Table is the 'node table', a Kademlia-like index of neighbor nodes. The table keeps +// itself up-to-date by verifying the liveness of neighbors and requesting their node +// records when announcements of a new record version are received. type Table struct { mutex sync.Mutex // protects buckets, bucket content, nursery, rand buckets [nBuckets]*bucket // index of known nodes by distance @@ -71,6 +71,7 @@ type Table struct { rand *mrand.Rand // source of randomness, periodically reseeded ips netutil.DistinctNetSet + log log.Logger db *enode.DB // database of known nodes net transport refreshReq chan chan struct{} @@ -83,14 +84,13 @@ type Table struct { nodeAddedHook func(*node) // for testing } -// transport is implemented by the UDP transport. -// it is an interface so we can test without opening lots of UDP -// sockets and without generating a private key. +// transport is implemented by the UDP transports. type transport interface { - self() *enode.Node - ping(enode.ID, *net.UDPAddr) error - findnode(toid enode.ID, addr *net.UDPAddr, target encPubkey) ([]*node, error) - close() + Self() *enode.Node + RequestENR(*enode.Node) (*enode.Node, error) + lookupRandom() []*enode.Node + lookupSelf() []*enode.Node + ping(*enode.Node) (seq uint64, err error) } // bucket contains nodes, ordered by their last activity. the entry @@ -101,7 +101,7 @@ type bucket struct { ips netutil.DistinctNetSet } -func newTable(t transport, db *enode.DB, bootnodes []*enode.Node) (*Table, error) { +func newTable(t transport, db *enode.DB, bootnodes []*enode.Node, log log.Logger) (*Table, error) { tab := &Table{ net: t, db: db, @@ -111,6 +111,7 @@ func newTable(t transport, db *enode.DB, bootnodes []*enode.Node) (*Table, error closed: make(chan struct{}), rand: mrand.New(mrand.NewSource(0)), ips: netutil.DistinctNetSet{Subnet: tableSubnet, Limit: tableIPLimit}, + log: log, } if err := tab.setFallbackNodes(bootnodes); err != nil { return nil, err @@ -123,12 +124,11 @@ func newTable(t transport, db *enode.DB, bootnodes []*enode.Node) (*Table, error tab.seedRand() tab.loadSeedNodes() - go tab.loop() return tab, nil } func (tab *Table) self() *enode.Node { - return tab.net.self() + return tab.net.Self() } func (tab *Table) seedRand() { @@ -149,47 +149,38 @@ func (tab *Table) ReadRandomNodes(buf []*enode.Node) (n int) { tab.mutex.Lock() defer tab.mutex.Unlock() - // Find all non-empty buckets and get a fresh slice of their entries. - var buckets [][]*node + var nodes []*enode.Node for _, b := range &tab.buckets { - if len(b.entries) > 0 { - buckets = append(buckets, b.entries) + for _, n := range b.entries { + nodes = append(nodes, unwrapNode(n)) } } - if len(buckets) == 0 { - return 0 + // Shuffle. + for i := 0; i < len(nodes); i++ { + j := tab.rand.Intn(len(nodes)) + nodes[i], nodes[j] = nodes[j], nodes[i] } - // Shuffle the buckets. - for i := len(buckets) - 1; i > 0; i-- { - j := tab.rand.Intn(len(buckets)) - buckets[i], buckets[j] = buckets[j], buckets[i] - } - // Move head of each bucket into buf, removing buckets that become empty. - var i, j int - for ; i < len(buf); i, j = i+1, (j+1)%len(buckets) { - b := buckets[j] - buf[i] = unwrapNode(b[0]) - buckets[j] = b[1:] - if len(b) == 1 { - buckets = append(buckets[:j], buckets[j+1:]...) - } - if len(buckets) == 0 { - break + return copy(buf, nodes) +} + +// getNode returns the node with the given ID or nil if it isn't in the table. +func (tab *Table) getNode(id enode.ID) *enode.Node { + tab.mutex.Lock() + defer tab.mutex.Unlock() + + b := tab.bucket(id) + for _, e := range b.entries { + if e.ID() == id { + return unwrapNode(e) } } - return i + 1 + return nil } -// Close terminates the network listener and flushes the node database. -func (tab *Table) Close() { - tab.closeOnce.Do(func() { - if tab.net != nil { - tab.net.close() - } - // Wait for loop to end. - close(tab.closeReq) - <-tab.closed - }) +// close terminates the network listener and flushes the node database. +func (tab *Table) close() { + close(tab.closeReq) + <-tab.closed } // setFallbackNodes sets the initial points of contact. These nodes @@ -215,124 +206,6 @@ func (tab *Table) isInitDone() bool { } } -// Resolve searches for a specific node with the given ID. -// It returns nil if the node could not be found. -func (tab *Table) Resolve(n *enode.Node) *enode.Node { - // If the node is present in the local table, no - // network interaction is required. - hash := n.ID() - tab.mutex.Lock() - cl := tab.closest(hash, 1) - tab.mutex.Unlock() - if len(cl.entries) > 0 && cl.entries[0].ID() == hash { - return unwrapNode(cl.entries[0]) - } - // Otherwise, do a network lookup. - result := tab.lookup(encodePubkey(n.Pubkey()), true) - for _, n := range result { - if n.ID() == hash { - return unwrapNode(n) - } - } - return nil -} - -// LookupRandom finds random nodes in the network. -func (tab *Table) LookupRandom() []*enode.Node { - var target encPubkey - crand.Read(target[:]) - return unwrapNodes(tab.lookup(target, true)) -} - -// lookup performs a network search for nodes close to the given target. It approaches the -// target by querying nodes that are closer to it on each iteration. The given target does -// not need to be an actual node identifier. -func (tab *Table) lookup(targetKey encPubkey, refreshIfEmpty bool) []*node { - var ( - target = enode.ID(crypto.Keccak256Hash(targetKey[:])) - asked = make(map[enode.ID]bool) - seen = make(map[enode.ID]bool) - reply = make(chan []*node, alpha) - pendingQueries = 0 - result *nodesByDistance - ) - // don't query further if we hit ourself. - // unlikely to happen often in practice. - asked[tab.self().ID()] = true - - for { - tab.mutex.Lock() - // generate initial result set - result = tab.closest(target, bucketSize) - tab.mutex.Unlock() - if len(result.entries) > 0 || !refreshIfEmpty { - break - } - // The result set is empty, all nodes were dropped, refresh. - // We actually wait for the refresh to complete here. The very - // first query will hit this case and run the bootstrapping - // logic. - <-tab.refresh() - refreshIfEmpty = false - } - - for { - // ask the alpha closest nodes that we haven't asked yet - for i := 0; i < len(result.entries) && pendingQueries < alpha; i++ { - n := result.entries[i] - if !asked[n.ID()] { - asked[n.ID()] = true - pendingQueries++ - go tab.findnode(n, targetKey, reply) - } - } - if pendingQueries == 0 { - // we have asked all closest nodes, stop the search - break - } - select { - case nodes := <-reply: - for _, n := range nodes { - if n != nil && !seen[n.ID()] { - seen[n.ID()] = true - result.push(n, bucketSize) - } - } - case <-tab.closeReq: - return nil // shutdown, no need to continue. - } - pendingQueries-- - } - return result.entries -} - -func (tab *Table) findnode(n *node, targetKey encPubkey, reply chan<- []*node) { - fails := tab.db.FindFails(n.ID(), n.IP()) - r, err := tab.net.findnode(n.ID(), n.addr(), targetKey) - if err == errClosed { - // Avoid recording failures on shutdown. - reply <- nil - return - } else if err != nil || len(r) == 0 { - fails++ - tab.db.UpdateFindFails(n.ID(), n.IP(), fails) - log.Trace("Findnode failed", "id", n.ID(), "failcount", fails, "err", err) - if fails >= maxFindnodeFailures { - log.Trace("Too many findnode failures, dropping", "id", n.ID(), "failcount", fails) - tab.delete(n) - } - } else if fails > 0 { - tab.db.UpdateFindFails(n.ID(), n.IP(), fails-1) - } - - // Grab as many nodes as possible. Some of them might not be alive anymore, but we'll - // just remove those again during revalidation. - for _, n := range r { - tab.addSeenNode(n) - } - reply <- r -} - func (tab *Table) refresh() <-chan struct{} { done := make(chan struct{}) select { @@ -343,7 +216,7 @@ func (tab *Table) refresh() <-chan struct{} { return done } -// loop schedules refresh, revalidate runs and coordinates shutdown. +// loop schedules runs of doRefresh, doRevalidate and copyLiveNodes. func (tab *Table) loop() { var ( revalidate = time.NewTimer(tab.nextRevalidateTime()) @@ -405,9 +278,8 @@ loop: close(tab.closed) } -// doRefresh performs a lookup for a random target to keep buckets -// full. seed nodes are inserted if the table is empty (initial -// bootstrap or discarded faulty peers). +// doRefresh performs a lookup for a random target to keep buckets full. seed nodes are +// inserted if the table is empty (initial bootstrap or discarded faulty peers). func (tab *Table) doRefresh(done chan struct{}) { defer close(done) @@ -417,11 +289,7 @@ func (tab *Table) doRefresh(done chan struct{}) { tab.loadSeedNodes() // Run self lookup to discover new neighbor nodes. - // We can only do this if we have a secp256k1 identity. - var key ecdsa.PublicKey - if err := tab.self().Load((*enode.Secp256k1)(&key)); err == nil { - tab.lookup(encodePubkey(&key), false) - } + tab.net.lookupSelf() // The Kademlia paper specifies that the bucket refresh should // perform a lookup in the least recently used bucket. We cannot @@ -430,9 +298,7 @@ func (tab *Table) doRefresh(done chan struct{}) { // sha3 preimage that falls into a chosen bucket. // We perform a few lookups with a random target instead. for i := 0; i < 3; i++ { - var target encPubkey - crand.Read(target[:]) - tab.lookup(target, false) + tab.net.lookupRandom() } } @@ -442,13 +308,13 @@ func (tab *Table) loadSeedNodes() { for i := range seeds { seed := seeds[i] age := log.Lazy{Fn: func() interface{} { return time.Since(tab.db.LastPongReceived(seed.ID(), seed.IP())) }} - log.Trace("Found seed node in database", "id", seed.ID(), "addr", seed.addr(), "age", age) + tab.log.Trace("Found seed node in database", "id", seed.ID(), "addr", seed.addr(), "age", age) tab.addSeenNode(seed) } } -// doRevalidate checks that the last node in a random bucket is still live -// and replaces or deletes the node if it isn't. +// doRevalidate checks that the last node in a random bucket is still live and replaces or +// deletes the node if it isn't. func (tab *Table) doRevalidate(done chan<- struct{}) { defer func() { done <- struct{}{} }() @@ -459,7 +325,17 @@ func (tab *Table) doRevalidate(done chan<- struct{}) { } // Ping the selected node and wait for a pong. - err := tab.net.ping(last.ID(), last.addr()) + remoteSeq, err := tab.net.ping(unwrapNode(last)) + + // Also fetch record if the node replied and returned a higher sequence number. + if last.Seq() < remoteSeq { + n, err := tab.net.RequestENR(unwrapNode(last)) + if err != nil { + tab.log.Debug("ENR request failed", "id", last.ID(), "addr", last.addr(), "err", err) + } else { + last = &node{Node: *n, addedAt: last.addedAt, livenessChecks: last.livenessChecks} + } + } tab.mutex.Lock() defer tab.mutex.Unlock() @@ -467,16 +343,16 @@ func (tab *Table) doRevalidate(done chan<- struct{}) { if err == nil { // The node responded, move it to the front. last.livenessChecks++ - log.Debug("Revalidated node", "b", bi, "id", last.ID(), "checks", last.livenessChecks) + tab.log.Debug("Revalidated node", "b", bi, "id", last.ID(), "checks", last.livenessChecks) tab.bumpInBucket(b, last) return } // No reply received, pick a replacement or delete the node if there aren't // any replacements. if r := tab.replace(b, last); r != nil { - log.Debug("Replaced dead node", "b", bi, "id", last.ID(), "ip", last.IP(), "checks", last.livenessChecks, "r", r.ID(), "rip", r.IP()) + tab.log.Debug("Replaced dead node", "b", bi, "id", last.ID(), "ip", last.IP(), "checks", last.livenessChecks, "r", r.ID(), "rip", r.IP()) } else { - log.Debug("Removed dead node", "b", bi, "id", last.ID(), "ip", last.IP(), "checks", last.livenessChecks) + tab.log.Debug("Removed dead node", "b", bi, "id", last.ID(), "ip", last.IP(), "checks", last.livenessChecks) } } @@ -520,22 +396,27 @@ func (tab *Table) copyLiveNodes() { // closest returns the n nodes in the table that are closest to the // given id. The caller must hold tab.mutex. -func (tab *Table) closest(target enode.ID, nresults int) *nodesByDistance { +func (tab *Table) closest(target enode.ID, nresults int, checklive bool) *nodesByDistance { // This is a very wasteful way to find the closest nodes but // obviously correct. I believe that tree-based buckets would make // this easier to implement efficiently. close := &nodesByDistance{target: target} for _, b := range &tab.buckets { for _, n := range b.entries { - if n.livenessChecks > 0 { - close.push(n, nresults) + if checklive && n.livenessChecks == 0 { + continue } + close.push(n, nresults) } } return close } +// len returns the number of nodes in the table. func (tab *Table) len() (n int) { + tab.mutex.Lock() + defer tab.mutex.Unlock() + for _, b := range &tab.buckets { n += len(b.entries) } @@ -641,11 +522,11 @@ func (tab *Table) addIP(b *bucket, ip net.IP) bool { return true } if !tab.ips.Add(ip) { - log.Debug("IP exceeds table limit", "ip", ip) + tab.log.Debug("IP exceeds table limit", "ip", ip) return false } if !b.ips.Add(ip) { - log.Debug("IP exceeds bucket limit", "ip", ip) + tab.log.Debug("IP exceeds bucket limit", "ip", ip) tab.ips.Remove(ip) return false } @@ -754,8 +635,7 @@ func deleteNode(list []*node, n *node) []*node { return list } -// nodesByDistance is a list of nodes, ordered by -// distance to target. +// nodesByDistance is a list of nodes, ordered by distance to target. type nodesByDistance struct { entries []*node target enode.ID diff --git a/p2p/discover/table_test.go b/p2p/discover/table_test.go index b5622e3a2718..895c284b270b 100644 --- a/p2p/discover/table_test.go +++ b/p2p/discover/table_test.go @@ -52,7 +52,7 @@ func testPingReplace(t *testing.T, newNodeIsResponding, lastInBucketIsResponding transport := newPingRecorder() tab, db := newTestTable(transport) defer db.Close() - defer tab.Close() + defer tab.close() <-tab.initDone @@ -117,7 +117,7 @@ func TestBucket_bumpNoDuplicates(t *testing.T) { prop := func(nodes []*node, bumps []int) (ok bool) { tab, db := newTestTable(newPingRecorder()) defer db.Close() - defer tab.Close() + defer tab.close() b := &bucket{entries: make([]*node, len(nodes))} copy(b.entries, nodes) @@ -144,7 +144,7 @@ func TestTable_IPLimit(t *testing.T) { transport := newPingRecorder() tab, db := newTestTable(transport) defer db.Close() - defer tab.Close() + defer tab.close() for i := 0; i < tableIPLimit+1; i++ { n := nodeAtDistance(tab.self().ID(), i, net.IP{172, 0, 1, byte(i)}) @@ -161,7 +161,7 @@ func TestTable_BucketIPLimit(t *testing.T) { transport := newPingRecorder() tab, db := newTestTable(transport) defer db.Close() - defer tab.Close() + defer tab.close() d := 3 for i := 0; i < bucketIPLimit+1; i++ { @@ -198,11 +198,11 @@ func TestTable_closest(t *testing.T) { transport := newPingRecorder() tab, db := newTestTable(transport) defer db.Close() - defer tab.Close() + defer tab.close() fillTable(tab, test.All) // check that closest(Target, N) returns nodes - result := tab.closest(test.Target, test.N).entries + result := tab.closest(test.Target, test.N, false).entries if hasDuplicates(result) { t.Errorf("result contains duplicates") return false @@ -259,7 +259,7 @@ func TestTable_ReadRandomNodesGetAll(t *testing.T) { transport := newPingRecorder() tab, db := newTestTable(transport) defer db.Close() - defer tab.Close() + defer tab.close() <-tab.initDone for i := 0; i < len(buf); i++ { @@ -309,7 +309,7 @@ func TestTable_addVerifiedNode(t *testing.T) { tab, db := newTestTable(newPingRecorder()) <-tab.initDone defer db.Close() - defer tab.Close() + defer tab.close() // Insert two nodes. n1 := nodeAtDistance(tab.self().ID(), 256, net.IP{88, 77, 66, 1}) @@ -341,7 +341,7 @@ func TestTable_addSeenNode(t *testing.T) { tab, db := newTestTable(newPingRecorder()) <-tab.initDone defer db.Close() - defer tab.Close() + defer tab.close() // Insert two nodes. n1 := nodeAtDistance(tab.self().ID(), 256, net.IP{88, 77, 66, 1}) @@ -368,294 +368,32 @@ func TestTable_addSeenNode(t *testing.T) { checkIPLimitInvariant(t, tab) } -func TestTable_Lookup(t *testing.T) { - tab, db := newTestTable(lookupTestnet) +// This test checks that ENR updates happen during revalidation. If a node in the table +// announces a new sequence number, the new record should be pulled. +func TestTable_revalidateSyncRecord(t *testing.T) { + transport := newPingRecorder() + tab, db := newTestTable(transport) + <-tab.initDone defer db.Close() - defer tab.Close() - - // lookup on empty table returns no nodes - if results := tab.lookup(lookupTestnet.target, false); len(results) > 0 { - t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results) - } - // seed table with initial node (otherwise lookup will terminate immediately) - seedKey, _ := decodePubkey(lookupTestnet.dists[256][0]) - seed := wrapNode(enode.NewV4(seedKey, net.IP{127, 0, 0, 1}, 0, 256)) - seed.livenessChecks = 1 - fillTable(tab, []*node{seed}) - - results := tab.lookup(lookupTestnet.target, true) - t.Logf("results:") - for _, e := range results { - t.Logf(" ld=%d, %x", enode.LogDist(lookupTestnet.targetSha, e.ID()), e.ID().Bytes()) - } - if len(results) != bucketSize { - t.Errorf("wrong number of results: got %d, want %d", len(results), bucketSize) - } - if hasDuplicates(results) { - t.Errorf("result set contains duplicate entries") - } - if !sortedByDistanceTo(lookupTestnet.targetSha, results) { - t.Errorf("result set not sorted by distance to target") - } - // TODO: check result nodes are actually closest -} + defer tab.close() -// This is the test network for the Lookup test. -// The nodes were obtained by running testnet.mine with a random NodeID as target. -var lookupTestnet = &preminedTestnet{ - target: hexEncPubkey("166aea4f556532c6d34e8b740e5d314af7e9ac0ca79833bd751d6b665f12dfd38ec563c363b32f02aef4a80b44fd3def94612d497b99cb5f17fd24de454927ec"), - targetSha: enode.HexID("5c944ee51c5ae9f72a95eccb8aed0374eecb5119d720cbea6813e8e0d6ad9261"), - dists: [257][]encPubkey{ - 240: { - hexEncPubkey("2001ad5e3e80c71b952161bc0186731cf5ffe942d24a79230a0555802296238e57ea7a32f5b6f18564eadc1c65389448481f8c9338df0a3dbd18f708cbc2cbcb"), - hexEncPubkey("6ba3f4f57d084b6bf94cc4555b8c657e4a8ac7b7baf23c6874efc21dd1e4f56b7eb2721e07f5242d2f1d8381fc8cae535e860197c69236798ba1ad231b105794"), - }, - 244: { - hexEncPubkey("696ba1f0a9d55c59246f776600542a9e6432490f0cd78f8bb55a196918df2081a9b521c3c3ba48e465a75c10768807717f8f689b0b4adce00e1c75737552a178"), - }, - 246: { - hexEncPubkey("d6d32178bdc38416f46ffb8b3ec9e4cb2cfff8d04dd7e4311a70e403cb62b10be1b447311b60b4f9ee221a8131fc2cbd45b96dd80deba68a949d467241facfa8"), - hexEncPubkey("3ea3d04a43a3dfb5ac11cffc2319248cf41b6279659393c2f55b8a0a5fc9d12581a9d97ef5d8ff9b5abf3321a290e8f63a4f785f450dc8a672aba3ba2ff4fdab"), - hexEncPubkey("2fc897f05ae585553e5c014effd3078f84f37f9333afacffb109f00ca8e7a3373de810a3946be971cbccdfd40249f9fe7f322118ea459ac71acca85a1ef8b7f4"), - }, - 247: { - hexEncPubkey("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), - hexEncPubkey("312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069db"), - hexEncPubkey("38643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aac"), - hexEncPubkey("8dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df73"), - hexEncPubkey("8b58c6073dd98bbad4e310b97186c8f822d3a5c7d57af40e2136e88e315afd115edb27d2d0685a908cfe5aa49d0debdda6e6e63972691d6bd8c5af2d771dd2a9"), - hexEncPubkey("2cbb718b7dc682da19652e7d9eb4fefaf7b7147d82c1c2b6805edf77b85e29fde9f6da195741467ff2638dc62c8d3e014ea5686693c15ed0080b6de90354c137"), - hexEncPubkey("e84027696d3f12f2de30a9311afea8fbd313c2360daff52bb5fc8c7094d5295758bec3134e4eef24e4cdf377b40da344993284628a7a346eba94f74160998feb"), - hexEncPubkey("f1357a4f04f9d33753a57c0b65ba20a5d8777abbffd04e906014491c9103fb08590e45548d37aa4bd70965e2e81ddba94f31860348df01469eec8c1829200a68"), - hexEncPubkey("4ab0a75941b12892369b4490a1928c8ca52a9ad6d3dffbd1d8c0b907bc200fe74c022d011ec39b64808a39c0ca41f1d3254386c3e7733e7044c44259486461b6"), - hexEncPubkey("d45150a72dc74388773e68e03133a3b5f51447fe91837d566706b3c035ee4b56f160c878c6273394daee7f56cc398985269052f22f75a8057df2fe6172765354"), - }, - 248: { - hexEncPubkey("6aadfce366a189bab08ac84721567483202c86590642ea6d6a14f37ca78d82bdb6509eb7b8b2f6f63c78ae3ae1d8837c89509e41497d719b23ad53dd81574afa"), - hexEncPubkey("a605ecfd6069a4cf4cf7f5840e5bc0ce10d23a3ac59e2aaa70c6afd5637359d2519b4524f56fc2ca180cdbebe54262f720ccaae8c1b28fd553c485675831624d"), - hexEncPubkey("29701451cb9448ca33fc33680b44b840d815be90146eb521641efbffed0859c154e8892d3906eae9934bfacee72cd1d2fa9dd050fd18888eea49da155ab0efd2"), - hexEncPubkey("3ed426322dee7572b08592e1e079f8b6c6b30e10e6243edd144a6a48fdbdb83df73a6e41b1143722cb82604f2203a32758610b5d9544f44a1a7921ba001528c1"), - hexEncPubkey("b2e2a2b7fdd363572a3256e75435fab1da3b16f7891a8bd2015f30995dae665d7eabfd194d87d99d5df628b4bbc7b04e5b492c596422dd8272746c7a1b0b8e4f"), - hexEncPubkey("0c69c9756162c593e85615b814ce57a2a8ca2df6c690b9c4e4602731b61e1531a3bbe3f7114271554427ffabea80ad8f36fa95a49fa77b675ae182c6ccac1728"), - hexEncPubkey("8d28be21d5a97b0876442fa4f5e5387f5bf3faad0b6f13b8607b64d6e448c0991ca28dd7fe2f64eb8eadd7150bff5d5666aa6ed868b84c71311f4ba9a38569dd"), - hexEncPubkey("2c677e1c64b9c9df6359348a7f5f33dc79e22f0177042486d125f8b6ca7f0dc756b1f672aceee5f1746bcff80aaf6f92a8dc0c9fbeb259b3fa0da060de5ab7e8"), - hexEncPubkey("3994880f94a8678f0cd247a43f474a8af375d2a072128da1ad6cae84a244105ff85e94fc7d8496f639468de7ee998908a91c7e33ef7585fff92e984b210941a1"), - hexEncPubkey("b45a9153c08d002a48090d15d61a7c7dad8c2af85d4ff5bd36ce23a9a11e0709bf8d56614c7b193bc028c16cbf7f20dfbcc751328b64a924995d47b41e452422"), - hexEncPubkey("057ab3a9e53c7a84b0f3fc586117a525cdd18e313f52a67bf31798d48078e325abe5cfee3f6c2533230cb37d0549289d692a29dd400e899b8552d4b928f6f907"), - hexEncPubkey("0ddf663d308791eb92e6bd88a2f8cb45e4f4f35bb16708a0e6ff7f1362aa6a73fedd0a1b1557fb3365e38e1b79d6918e2fae2788728b70c9ab6b51a3b94a4338"), - hexEncPubkey("f637e07ff50cc1e3731735841c4798411059f2023abcf3885674f3e8032531b0edca50fd715df6feb489b6177c345374d64f4b07d257a7745de393a107b013a5"), - hexEncPubkey("e24ec7c6eec094f63c7b3239f56d311ec5a3e45bc4e622a1095a65b95eea6fe13e29f3b6b7a2cbfe40906e3989f17ac834c3102dd0cadaaa26e16ee06d782b72"), - hexEncPubkey("b76ea1a6fd6506ef6e3506a4f1f60ed6287fff8114af6141b2ff13e61242331b54082b023cfea5b3083354a4fb3f9eb8be01fb4a518f579e731a5d0707291a6b"), - hexEncPubkey("9b53a37950ca8890ee349b325032d7b672cab7eced178d3060137b24ef6b92a43977922d5bdfb4a3409a2d80128e02f795f9dae6d7d99973ad0e23a2afb8442f"), - }, - 249: { - hexEncPubkey("675ae65567c3c72c50c73bc0fd4f61f202ea5f93346ca57b551de3411ccc614fad61cb9035493af47615311b9d44ee7a161972ee4d77c28fe1ec029d01434e6a"), - hexEncPubkey("8eb81408389da88536ae5800392b16ef5109d7ea132c18e9a82928047ecdb502693f6e4a4cdd18b54296caf561db937185731456c456c98bfe7de0baf0eaa495"), - hexEncPubkey("2adba8b1612a541771cb93a726a38a4b88e97b18eced2593eb7daf82f05a5321ca94a72cc780c306ff21e551a932fc2c6d791e4681907b5ceab7f084c3fa2944"), - hexEncPubkey("b1b4bfbda514d9b8f35b1c28961da5d5216fe50548f4066f69af3b7666a3b2e06eac646735e963e5c8f8138a2fb95af15b13b23ff00c6986eccc0efaa8ee6fb4"), - hexEncPubkey("d2139281b289ad0e4d7b4243c4364f5c51aac8b60f4806135de06b12b5b369c9e43a6eb494eab860d115c15c6fbb8c5a1b0e382972e0e460af395b8385363de7"), - hexEncPubkey("4a693df4b8fc5bdc7cec342c3ed2e228d7c5b4ab7321ddaa6cccbeb45b05a9f1d95766b4002e6d4791c2deacb8a667aadea6a700da28a3eea810a30395701bbc"), - hexEncPubkey("ab41611195ec3c62bb8cd762ee19fb182d194fd141f4a66780efbef4b07ce916246c022b841237a3a6b512a93431157edd221e854ed2a259b72e9c5351f44d0c"), - hexEncPubkey("68e8e26099030d10c3c703ae7045c0a48061fb88058d853b3e67880014c449d4311014da99d617d3150a20f1a3da5e34bf0f14f1c51fe4dd9d58afd222823176"), - hexEncPubkey("3fbcacf546fb129cd70fc48de3b593ba99d3c473798bc309292aca280320e0eacc04442c914cad5c4cf6950345ba79b0d51302df88285d4e83ee3fe41339eee7"), - hexEncPubkey("1d4a623659f7c8f80b6c3939596afdf42e78f892f682c768ad36eb7bfba402dbf97aea3a268f3badd8fe7636be216edf3d67ee1e08789ebbc7be625056bd7109"), - hexEncPubkey("a283c474ab09da02bbc96b16317241d0627646fcc427d1fe790b76a7bf1989ced90f92101a973047ae9940c92720dffbac8eff21df8cae468a50f72f9e159417"), - hexEncPubkey("dbf7e5ad7f87c3dfecae65d87c3039e14ed0bdc56caf00ce81931073e2e16719d746295512ff7937a15c3b03603e7c41a4f9df94fcd37bb200dd8f332767e9cb"), - hexEncPubkey("caaa070a26692f64fc77f30d7b5ae980d419b4393a0f442b1c821ef58c0862898b0d22f74a4f8c5d83069493e3ec0b92f17dc1fe6e4cd437c1ec25039e7ce839"), - hexEncPubkey("874cc8d1213beb65c4e0e1de38ef5d8165235893ac74ab5ea937c885eaab25c8d79dad0456e9fd3e9450626cac7e107b004478fb59842f067857f39a47cee695"), - hexEncPubkey("d94193f236105010972f5df1b7818b55846592a0445b9cdc4eaed811b8c4c0f7c27dc8cc9837a4774656d6b34682d6d329d42b6ebb55da1d475c2474dc3dfdf4"), - hexEncPubkey("edd9af6aded4094e9785637c28fccbd3980cbe28e2eb9a411048a23c2ace4bd6b0b7088a7817997b49a3dd05fc6929ca6c7abbb69438dbdabe65e971d2a794b2"), - }, - 250: { - hexEncPubkey("53a5bd1215d4ab709ae8fdc2ced50bba320bced78bd9c5dc92947fb402250c914891786db0978c898c058493f86fc68b1c5de8a5cb36336150ac7a88655b6c39"), - hexEncPubkey("b7f79e3ab59f79262623c9ccefc8f01d682323aee56ffbe295437487e9d5acaf556a9c92e1f1c6a9601f2b9eb6b027ae1aeaebac71d61b9b78e88676efd3e1a3"), - hexEncPubkey("d374bf7e8d7ffff69cc00bebff38ef5bc1dcb0a8d51c1a3d70e61ac6b2e2d6617109254b0ac224354dfbf79009fe4239e09020c483cc60c071e00b9238684f30"), - hexEncPubkey("1e1eac1c9add703eb252eb991594f8f5a173255d526a855fab24ae57dc277e055bc3c7a7ae0b45d437c4f47a72d97eb7b126f2ba344ba6c0e14b2c6f27d4b1e6"), - hexEncPubkey("ae28953f63d4bc4e706712a59319c111f5ff8f312584f65d7436b4cd3d14b217b958f8486bad666b4481fe879019fb1f767cf15b3e3e2711efc33b56d460448a"), - hexEncPubkey("934bb1edf9c7a318b82306aca67feb3d6b434421fa275d694f0b4927afd8b1d3935b727fd4ff6e3d012e0c82f1824385174e8c6450ade59c2a43281a4b3446b6"), - hexEncPubkey("9eef3f28f70ce19637519a0916555bf76d26de31312ac656cf9d3e379899ea44e4dd7ffcce923b4f3563f8a00489a34bd6936db0cbb4c959d32c49f017e07d05"), - hexEncPubkey("82200872e8f871c48f1fad13daec6478298099b591bb3dbc4ef6890aa28ebee5860d07d70be62f4c0af85085a90ae8179ee8f937cf37915c67ea73e704b03ee7"), - hexEncPubkey("6c75a5834a08476b7fc37ff3dc2011dc3ea3b36524bad7a6d319b18878fad813c0ba76d1f4555cacd3890c865438c21f0e0aed1f80e0a157e642124c69f43a11"), - hexEncPubkey("995b873742206cb02b736e73a88580c2aacb0bd4a3c97a647b647bcab3f5e03c0e0736520a8b3600da09edf4248991fb01091ec7ff3ec7cdc8a1beae011e7aae"), - hexEncPubkey("c773a056594b5cdef2e850d30891ff0e927c3b1b9c35cd8e8d53a1017001e237468e1ece3ae33d612ca3e6abb0a9169aa352e9dcda358e5af2ad982b577447db"), - hexEncPubkey("2b46a5f6923f475c6be99ec6d134437a6d11f6bb4b4ac6bcd94572fa1092639d1c08aeefcb51f0912f0a060f71d4f38ee4da70ecc16010b05dd4a674aab14c3a"), - hexEncPubkey("af6ab501366debbaa0d22e20e9688f32ef6b3b644440580fd78de4fe0e99e2a16eb5636bbae0d1c259df8ddda77b35b9a35cbc36137473e9c68fbc9d203ba842"), - hexEncPubkey("c9f6f2dd1a941926f03f770695bda289859e85fabaf94baaae20b93e5015dc014ba41150176a36a1884adb52f405194693e63b0c464a6891cc9cc1c80d450326"), - hexEncPubkey("5b116f0751526868a909b61a30b0c5282c37df6925cc03ddea556ef0d0602a9595fd6c14d371f8ed7d45d89918a032dcd22be4342a8793d88fdbeb3ca3d75bd7"), - hexEncPubkey("50f3222fb6b82481c7c813b2172e1daea43e2710a443b9c2a57a12bd160dd37e20f87aa968c82ad639af6972185609d47036c0d93b4b7269b74ebd7073221c10"), - }, - 251: { - hexEncPubkey("9b8f702a62d1bee67bedfeb102eca7f37fa1713e310f0d6651cc0c33ea7c5477575289ccd463e5a2574a00a676a1fdce05658ba447bb9d2827f0ba47b947e894"), - hexEncPubkey("b97532eb83054ed054b4abdf413bb30c00e4205545c93521554dbe77faa3cfaa5bd31ef466a107b0b34a71ec97214c0c83919720142cddac93aa7a3e928d4708"), - hexEncPubkey("2f7a5e952bfb67f2f90b8441b5fadc9ee13b1dcde3afeeb3dd64bf937f86663cc5c55d1fa83952b5422763c7df1b7f2794b751c6be316ebc0beb4942e65ab8c1"), - hexEncPubkey("42c7483781727051a0b3660f14faf39e0d33de5e643702ae933837d036508ab856ce7eec8ec89c4929a4901256e5233a3d847d5d4893f91bcf21835a9a880fee"), - hexEncPubkey("873bae27bf1dc854408fba94046a53ab0c965cebe1e4e12290806fc62b88deb1f4a47f9e18f78fc0e7913a0c6e42ac4d0fc3a20cea6bc65f0c8a0ca90b67521e"), - hexEncPubkey("a7e3a370bbd761d413f8d209e85886f68bf73d5c3089b2dc6fa42aab1ecb5162635497eed95dee2417f3c9c74a3e76319625c48ead2e963c7de877cd4551f347"), - hexEncPubkey("528597534776a40df2addaaea15b6ff832ce36b9748a265768368f657e76d58569d9f30dbb91e91cf0ae7efe8f402f17aa0ae15f5c55051ba03ba830287f4c42"), - hexEncPubkey("461d8bd4f13c3c09031fdb84f104ed737a52f630261463ce0bdb5704259bab4b737dda688285b8444dbecaecad7f50f835190b38684ced5e90c54219e5adf1bc"), - hexEncPubkey("6ec50c0be3fd232737090fc0111caaf0bb6b18f72be453428087a11a97fd6b52db0344acbf789a689bd4f5f50f79017ea784f8fd6fe723ad6ae675b9e3b13e21"), - hexEncPubkey("12fc5e2f77a83fdcc727b79d8ae7fe6a516881138d3011847ee136b400fed7cfba1f53fd7a9730253c7aa4f39abeacd04f138417ba7fcb0f36cccc3514e0dab6"), - hexEncPubkey("4fdbe75914ccd0bce02101606a1ccf3657ec963e3b3c20239d5fec87673fe446d649b4f15f1fe1a40e6cfbd446dda2d31d40bb602b1093b8fcd5f139ba0eb46a"), - hexEncPubkey("3753668a0f6281e425ea69b52cb2d17ab97afbe6eb84cf5d25425bc5e53009388857640668fadd7c110721e6047c9697803bd8a6487b43bb343bfa32ebf24039"), - hexEncPubkey("2e81b16346637dec4410fd88e527346145b9c0a849dbf2628049ac7dae016c8f4305649d5659ec77f1e8a0fac0db457b6080547226f06283598e3740ad94849a"), - hexEncPubkey("802c3cc27f91c89213223d758f8d2ecd41135b357b6d698f24d811cdf113033a81c38e0bdff574a5c005b00a8c193dc2531f8c1fa05fa60acf0ab6f2858af09f"), - hexEncPubkey("fcc9a2e1ac3667026ff16192876d1813bb75abdbf39b929a92863012fe8b1d890badea7a0de36274d5c1eb1e8f975785532c50d80fd44b1a4b692f437303393f"), - hexEncPubkey("6d8b3efb461151dd4f6de809b62726f5b89e9b38e9ba1391967f61cde844f7528fecf821b74049207cee5a527096b31f3ad623928cd3ce51d926fa345a6b2951"), - }, - 252: { - hexEncPubkey("f1ae93157cc48c2075dd5868fbf523e79e06caf4b8198f352f6e526680b78ff4227263de92612f7d63472bd09367bb92a636fff16fe46ccf41614f7a72495c2a"), - hexEncPubkey("587f482d111b239c27c0cb89b51dd5d574db8efd8de14a2e6a1400c54d4567e77c65f89c1da52841212080b91604104768350276b6682f2f961cdaf4039581c7"), - hexEncPubkey("e3f88274d35cefdaabdf205afe0e80e936cc982b8e3e47a84ce664c413b29016a4fb4f3a3ebae0a2f79671f8323661ed462bf4390af94c424dc8ace0c301b90f"), - hexEncPubkey("0ddc736077da9a12ba410dc5ea63cbcbe7659dd08596485b2bff3435221f82c10d263efd9af938e128464be64a178b7cd22e19f400d5802f4c9df54bf89f2619"), - hexEncPubkey("784aa34d833c6ce63fcc1279630113c3272e82c4ae8c126c5a52a88ac461b6baeed4244e607b05dc14e5b2f41c70a273c3804dea237f14f7a1e546f6d1309d14"), - hexEncPubkey("f253a2c354ee0e27cfcae786d726753d4ad24be6516b279a936195a487de4a59dbc296accf20463749ff55293263ed8c1b6365eecb248d44e75e9741c0d18205"), - hexEncPubkey("a1910b80357b3ad9b4593e0628922939614dc9056a5fbf477279c8b2c1d0b4b31d89a0c09d0d41f795271d14d3360ef08a3f821e65e7e1f56c07a36afe49c7c5"), - hexEncPubkey("f1168552c2efe541160f0909b0b4a9d6aeedcf595cdf0e9b165c97e3e197471a1ee6320e93389edfba28af6eaf10de98597ad56e7ab1b504ed762451996c3b98"), - hexEncPubkey("b0c8e5d2c8634a7930e1a6fd082e448c6cf9d2d8b7293558b59238815a4df926c286bf297d2049f14e8296a6eb3256af614ec1812c4f2bbe807673b58bf14c8c"), - hexEncPubkey("0fb346076396a38badc342df3679b55bd7f40a609ab103411fe45082c01f12ea016729e95914b2b5540e987ff5c9b133e85862648e7f36abdfd23100d248d234"), - hexEncPubkey("f736e0cc83417feaa280d9483f5d4d72d1b036cd0c6d9cbdeb8ac35ceb2604780de46dddaa32a378474e1d5ccdf79b373331c30c7911ade2ae32f98832e5de1f"), - hexEncPubkey("8b02991457602f42b38b342d3f2259ae4100c354b3843885f7e4e07bd644f64dab94bb7f38a3915f8b7f11d8e3f81c28e07a0078cf79d7397e38a7b7e0c857e2"), - hexEncPubkey("9221d9f04a8a184993d12baa91116692bb685f887671302999d69300ad103eb2d2c75a09d8979404c6dd28f12362f58a1a43619c493d9108fd47588a23ce5824"), - hexEncPubkey("652797801744dada833fff207d67484742eea6835d695925f3e618d71b68ec3c65bdd85b4302b2cdcb835ad3f94fd00d8da07e570b41bc0d2bcf69a8de1b3284"), - hexEncPubkey("d84f06fe64debc4cd0625e36d19b99014b6218375262cc2209202bdbafd7dffcc4e34ce6398e182e02fd8faeed622c3e175545864902dfd3d1ac57647cddf4c6"), - hexEncPubkey("d0ed87b294f38f1d741eb601020eeec30ac16331d05880fe27868f1e454446de367d7457b41c79e202eaf9525b029e4f1d7e17d85a55f83a557c005c68d7328a"), - }, - 253: { - hexEncPubkey("ad4485e386e3cc7c7310366a7c38fb810b8896c0d52e55944bfd320ca294e7912d6c53c0a0cf85e7ce226e92491d60430e86f8f15cda0161ed71893fb4a9e3a1"), - hexEncPubkey("36d0e7e5b7734f98c6183eeeb8ac5130a85e910a925311a19c4941b1290f945d4fc3996b12ef4966960b6fa0fb29b1604f83a0f81bd5fd6398d2e1a22e46af0c"), - hexEncPubkey("7d307d8acb4a561afa23bdf0bd945d35c90245e26345ec3a1f9f7df354222a7cdcb81339c9ed6744526c27a1a0c8d10857e98df942fa433602facac71ac68a31"), - hexEncPubkey("d97bf55f88c83fae36232661af115d66ca600fc4bd6d1fb35ff9bb4dad674c02cf8c8d05f317525b5522250db58bb1ecafb7157392bf5aa61b178c61f098d995"), - hexEncPubkey("7045d678f1f9eb7a4613764d17bd5698796494d0bf977b16f2dbc272b8a0f7858a60805c022fc3d1fe4f31c37e63cdaca0416c0d053ef48a815f8b19121605e0"), - hexEncPubkey("14e1f21418d445748de2a95cd9a8c3b15b506f86a0acabd8af44bb968ce39885b19c8822af61b3dd58a34d1f265baec30e3ae56149dc7d2aa4a538f7319f69c8"), - hexEncPubkey("b9453d78281b66a4eac95a1546017111eaaa5f92a65d0de10b1122940e92b319728a24edf4dec6acc412321b1c95266d39c7b3a5d265c629c3e49a65fb022c09"), - hexEncPubkey("e8a49248419e3824a00d86af422f22f7366e2d4922b304b7169937616a01d9d6fa5abf5cc01061a352dc866f48e1fa2240dbb453d872b1d7be62bdfc1d5e248c"), - hexEncPubkey("bebcff24b52362f30e0589ee573ce2d86f073d58d18e6852a592fa86ceb1a6c9b96d7fb9ec7ed1ed98a51b6743039e780279f6bb49d0a04327ac7a182d9a56f6"), - hexEncPubkey("d0835e5a4291db249b8d2fca9f503049988180c7d247bedaa2cf3a1bad0a76709360a85d4f9a1423b2cbc82bb4d94b47c0cde20afc430224834c49fe312a9ae3"), - hexEncPubkey("6b087fe2a2da5e4f0b0f4777598a4a7fb66bf77dbd5bfc44e8a7eaa432ab585a6e226891f56a7d4f5ed11a7c57b90f1661bba1059590ca4267a35801c2802913"), - hexEncPubkey("d901e5bde52d1a0f4ddf010a686a53974cdae4ebe5c6551b3c37d6b6d635d38d5b0e5f80bc0186a2c7809dbf3a42870dd09643e68d32db896c6da8ba734579e7"), - hexEncPubkey("96419fb80efae4b674402bb969ebaab86c1274f29a83a311e24516d36cdf148fe21754d46c97688cdd7468f24c08b13e4727c29263393638a3b37b99ff60ebca"), - hexEncPubkey("7b9c1889ae916a5d5abcdfb0aaedcc9c6f9eb1c1a4f68d0c2d034fe79ac610ce917c3abc670744150fa891bfcd8ab14fed6983fca964de920aa393fa7b326748"), - hexEncPubkey("7a369b2b8962cc4c65900be046482fbf7c14f98a135bbbae25152c82ad168fb2097b3d1429197cf46d3ce9fdeb64808f908a489cc6019725db040060fdfe5405"), - hexEncPubkey("47bcae48288da5ecc7f5058dfa07cf14d89d06d6e449cb946e237aa6652ea050d9f5a24a65efdc0013ccf232bf88670979eddef249b054f63f38da9d7796dbd8"), - }, - 254: { - hexEncPubkey("099739d7abc8abd38ecc7a816c521a1168a4dbd359fa7212a5123ab583ffa1cf485a5fed219575d6475dbcdd541638b2d3631a6c7fce7474e7fe3cba1d4d5853"), - hexEncPubkey("c2b01603b088a7182d0cf7ef29fb2b04c70acb320fccf78526bf9472e10c74ee70b3fcfa6f4b11d167bd7d3bc4d936b660f2c9bff934793d97cb21750e7c3d31"), - hexEncPubkey("20e4d8f45f2f863e94b45548c1ef22a11f7d36f263e4f8623761e05a64c4572379b000a52211751e2561b0f14f4fc92dd4130410c8ccc71eb4f0e95a700d4ca9"), - hexEncPubkey("27f4a16cc085e72d86e25c98bd2eca173eaaee7565c78ec5a52e9e12b2211f35de81b5b45e9195de2ebfe29106742c59112b951a04eb7ae48822911fc1f9389e"), - hexEncPubkey("55db5ee7d98e7f0b1c3b9d5be6f2bc619a1b86c3cdd513160ad4dcf267037a5fffad527ac15d50aeb32c59c13d1d4c1e567ebbf4de0d25236130c8361f9aac63"), - hexEncPubkey("883df308b0130fc928a8559fe50667a0fff80493bc09685d18213b2db241a3ad11310ed86b0ef662b3ce21fc3d9aa7f3fc24b8d9afe17c7407e9afd3345ae548"), - hexEncPubkey("c7af968cc9bc8200c3ee1a387405f7563be1dce6710a3439f42ea40657d0eae9d2b3c16c42d779605351fcdece4da637b9804e60ca08cfb89aec32c197beffa6"), - hexEncPubkey("3e66f2b788e3ff1d04106b80597915cd7afa06c405a7ae026556b6e583dca8e05cfbab5039bb9a1b5d06083ffe8de5780b1775550e7218f5e98624bf7af9a0a8"), - hexEncPubkey("4fc7f53764de3337fdaec0a711d35d3a923e72fa65025444d12230b3552ed43d9b2d1ad08ccb11f2d50c58809e6dd74dde910e195294fca3b47ae5a3967cc479"), - hexEncPubkey("bafdfdcf6ccaa989436752fa97c77477b6baa7deb374b16c095492c529eb133e8e2f99e1977012b64767b9d34b2cf6d2048ed489bd822b5139b523f6a423167b"), - hexEncPubkey("7f5d78008a4312fe059104ce80202c82b8915c2eb4411c6b812b16f7642e57c00f2c9425121f5cbac4257fe0b3e81ef5dea97ea2dbaa98f6a8b6fd4d1e5980bb"), - hexEncPubkey("598c37fe78f922751a052f463aeb0cb0bc7f52b7c2a4cf2da72ec0931c7c32175d4165d0f8998f7320e87324ac3311c03f9382a5385c55f0407b7a66b2acd864"), - hexEncPubkey("f758c4136e1c148777a7f3275a76e2db0b2b04066fd738554ec398c1c6cc9fb47e14a3b4c87bd47deaeab3ffd2110514c3855685a374794daff87b605b27ee2e"), - hexEncPubkey("0307bb9e4fd865a49dcf1fe4333d1b944547db650ab580af0b33e53c4fef6c789531110fac801bbcbce21fc4d6f61b6d5b24abdf5b22e3030646d579f6dca9c2"), - hexEncPubkey("82504b6eb49bb2c0f91a7006ce9cefdbaf6df38706198502c2e06601091fc9dc91e4f15db3410d45c6af355bc270b0f268d3dff560f956985c7332d4b10bd1ed"), - hexEncPubkey("b39b5b677b45944ceebe76e76d1f051de2f2a0ec7b0d650da52135743e66a9a5dba45f638258f9a7545d9a790c7fe6d3fdf82c25425c7887323e45d27d06c057"), - }, - 255: { - hexEncPubkey("5c4d58d46e055dd1f093f81ee60a675e1f02f54da6206720adee4dccef9b67a31efc5c2a2949c31a04ee31beadc79aba10da31440a1f9ff2a24093c63c36d784"), - hexEncPubkey("ea72161ffdd4b1e124c7b93b0684805f4c4b58d617ed498b37a145c670dbc2e04976f8785583d9c805ffbf343c31d492d79f841652bbbd01b61ed85640b23495"), - hexEncPubkey("51caa1d93352d47a8e531692a3612adac1e8ac68d0a200d086c1c57ae1e1a91aa285ab242e8c52ef9d7afe374c9485b122ae815f1707b875569d0433c1c3ce85"), - hexEncPubkey("c08397d5751b47bd3da044b908be0fb0e510d3149574dff7aeab33749b023bb171b5769990fe17469dbebc100bc150e798aeda426a2dcc766699a225fddd75c6"), - hexEncPubkey("0222c1c194b749736e593f937fad67ee348ac57287a15c7e42877aa38a9b87732a408bca370f812efd0eedbff13e6d5b854bf3ba1dec431a796ed47f32552b09"), - hexEncPubkey("03d859cd46ef02d9bfad5268461a6955426845eef4126de6be0fa4e8d7e0727ba2385b78f1a883a8239e95ebb814f2af8379632c7d5b100688eebc5841209582"), - hexEncPubkey("64d5004b7e043c39ff0bd10cb20094c287721d5251715884c280a612b494b3e9e1c64ba6f67614994c7d969a0d0c0295d107d53fc225d47c44c4b82852d6f960"), - hexEncPubkey("b0a5eefb2dab6f786670f35bf9641eefe6dd87fd3f1362bcab4aaa792903500ab23d88fae68411372e0813b057535a601d46e454323745a948017f6063a47b1f"), - hexEncPubkey("0cc6df0a3433d448b5684d2a3ffa9d1a825388177a18f44ad0008c7bd7702f1ec0fc38b83506f7de689c3b6ecb552599927e29699eed6bb867ff08f80068b287"), - hexEncPubkey("50772f7b8c03a4e153355fbbf79c8a80cf32af656ff0c7873c99911099d04a0dae0674706c357e0145ad017a0ade65e6052cb1b0d574fcd6f67da3eee0ace66b"), - hexEncPubkey("1ae37829c9ef41f8b508b82259ebac76b1ed900d7a45c08b7970f25d2d48ddd1829e2f11423a18749940b6dab8598c6e416cef0efd47e46e51f29a0bc65b37cd"), - hexEncPubkey("ba973cab31c2af091fc1644a93527d62b2394999e2b6ccbf158dd5ab9796a43d408786f1803ef4e29debfeb62fce2b6caa5ab2b24d1549c822a11c40c2856665"), - hexEncPubkey("bc413ad270dd6ea25bddba78f3298b03b8ba6f8608ac03d06007d4116fa78ef5a0cfe8c80155089382fc7a193243ee5500082660cb5d7793f60f2d7d18650964"), - hexEncPubkey("5a6a9ef07634d9eec3baa87c997b529b92652afa11473dfee41ef7037d5c06e0ddb9fe842364462d79dd31cff8a59a1b8d5bc2b810dea1d4cbbd3beb80ecec83"), - hexEncPubkey("f492c6ee2696d5f682f7f537757e52744c2ae560f1090a07024609e903d334e9e174fc01609c5a229ddbcac36c9d21adaf6457dab38a25bfd44f2f0ee4277998"), - hexEncPubkey("459e4db99298cb0467a90acee6888b08bb857450deac11015cced5104853be5adce5b69c740968bc7f931495d671a70cad9f48546d7cd203357fe9af0e8d2164"), - }, - 256: { - hexEncPubkey("a8593af8a4aef7b806b5197612017951bac8845a1917ca9a6a15dd6086d608505144990b245785c4cd2d67a295701c7aac2aa18823fb0033987284b019656268"), - hexEncPubkey("d2eebef914928c3aad77fc1b2a495f52d2294acf5edaa7d8a530b540f094b861a68fe8348a46a7c302f08ab609d85912a4968eacfea0740847b29421b4795d9e"), - hexEncPubkey("b14bfcb31495f32b650b63cf7d08492e3e29071fdc73cf2da0da48d4b191a70ba1a65f42ad8c343206101f00f8a48e8db4b08bf3f622c0853e7323b250835b91"), - hexEncPubkey("7feaee0d818c03eb30e4e0bf03ade0f3c21ca38e938a761aa1781cf70bda8cc5cd631a6cc53dd44f1d4a6d3e2dae6513c6c66ee50cb2f0e9ad6f7e319b309fd9"), - hexEncPubkey("4ca3b657b139311db8d583c25dd5963005e46689e1317620496cc64129c7f3e52870820e0ec7941d28809311df6db8a2867bbd4f235b4248af24d7a9c22d1232"), - hexEncPubkey("1181defb1d16851d42dd951d84424d6bd1479137f587fa184d5a8152be6b6b16ed08bcdb2c2ed8539bcde98c80c432875f9f724737c316a2bd385a39d3cab1d8"), - hexEncPubkey("d9dd818769fa0c3ec9f553c759b92476f082817252a04a47dc1777740b1731d280058c66f982812f173a294acf4944a85ba08346e2de153ba3ba41ce8a62cb64"), - hexEncPubkey("bd7c4f8a9e770aa915c771b15e107ca123d838762da0d3ffc53aa6b53e9cd076cffc534ec4d2e4c334c683f1f5ea72e0e123f6c261915ed5b58ac1b59f003d88"), - hexEncPubkey("3dd5739c73649d510456a70e9d6b46a855864a4a3f744e088fd8c8da11b18e4c9b5f2d7da50b1c147b2bae5ca9609ae01f7a3cdea9dce34f80a91d29cd82f918"), - hexEncPubkey("f0d7df1efc439b4bcc0b762118c1cfa99b2a6143a9f4b10e3c9465125f4c9fca4ab88a2504169bbcad65492cf2f50da9dd5d077c39574a944f94d8246529066b"), - hexEncPubkey("dd598b9ba441448e5fb1a6ec6c5f5aa9605bad6e223297c729b1705d11d05f6bfd3d41988b694681ae69bb03b9a08bff4beab5596503d12a39bffb5cd6e94c7c"), - hexEncPubkey("3fce284ac97e567aebae681b15b7a2b6df9d873945536335883e4bbc26460c064370537f323fd1ada828ea43154992d14ac0cec0940a2bd2a3f42ec156d60c83"), - hexEncPubkey("7c8dfa8c1311cb14fb29a8ac11bca23ecc115e56d9fcf7b7ac1db9066aa4eb39f8b1dabf46e192a65be95ebfb4e839b5ab4533fef414921825e996b210dd53bd"), - hexEncPubkey("cafa6934f82120456620573d7f801390ed5e16ed619613a37e409e44ab355ef755e83565a913b48a9466db786f8d4fbd590bfec474c2524d4a2608d4eafd6abd"), - hexEncPubkey("9d16600d0dd310d77045769fed2cb427f32db88cd57d86e49390c2ba8a9698cfa856f775be2013237226e7bf47b248871cf865d23015937d1edeb20db5e3e760"), - hexEncPubkey("17be6b6ba54199b1d80eff866d348ea11d8a4b341d63ad9a6681d3ef8a43853ac564d153eb2a8737f0afc9ab320f6f95c55aa11aaa13bbb1ff422fd16bdf8188"), - }, - }, -} - -type preminedTestnet struct { - target encPubkey - targetSha enode.ID // sha3(target) - dists [hashBits + 1][]encPubkey -} - -func (tn *preminedTestnet) self() *enode.Node { - return nullNode -} + // Insert a node. + var r enr.Record + r.Set(enr.IP(net.IP{127, 0, 0, 1})) + id := enode.ID{1} + n1 := wrapNode(enode.SignNull(&r, id)) + tab.addSeenNode(n1) -func (tn *preminedTestnet) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ([]*node, error) { - // current log distance is encoded in port number - // fmt.Println("findnode query at dist", toaddr.Port) - if toaddr.Port == 0 { - panic("query to node at distance 0") - } - next := toaddr.Port - 1 - var result []*node - for i, ekey := range tn.dists[toaddr.Port] { - key, _ := decodePubkey(ekey) - node := wrapNode(enode.NewV4(key, net.ParseIP("127.0.0.1"), i, next)) - result = append(result, node) - } - return result, nil -} + // Update the node record. + r.Set(enr.WithEntry("foo", "bar")) + n2 := enode.SignNull(&r, id) + transport.updateRecord(n2) -func (*preminedTestnet) close() {} -func (*preminedTestnet) ping(toid enode.ID, toaddr *net.UDPAddr) error { return nil } - -// mine generates a testnet struct literal with nodes at -// various distances to the given target. -func (tn *preminedTestnet) mine(target encPubkey) { - tn.target = target - tn.targetSha = tn.target.id() - found := 0 - for found < bucketSize*10 { - k := newkey() - key := encodePubkey(&k.PublicKey) - ld := enode.LogDist(tn.targetSha, key.id()) - if len(tn.dists[ld]) < bucketSize { - tn.dists[ld] = append(tn.dists[ld], key) - fmt.Println("found ID with ld", ld) - found++ - } - } - fmt.Println("&preminedTestnet{") - fmt.Printf(" target: %#v,\n", tn.target) - fmt.Printf(" targetSha: %#v,\n", tn.targetSha) - fmt.Printf(" dists: [%d][]encPubkey{\n", len(tn.dists)) - for ld, ns := range tn.dists { - if len(ns) == 0 { - continue - } - fmt.Printf(" %d: []encPubkey{\n", ld) - for _, n := range ns { - fmt.Printf(" hexEncPubkey(\"%x\"),\n", n[:]) - } - fmt.Println(" },") + tab.doRevalidate(make(chan struct{}, 1)) + intable := tab.getNode(id) + if !reflect.DeepEqual(intable, n2) { + t.Fatalf("table contains old record with seq %d, want seq %d", intable.Seq(), n2.Seq()) } - fmt.Println(" },") - fmt.Println("}") } // gen wraps quick.Value so it's easier to use. diff --git a/p2p/discover/table_util_test.go b/p2p/discover/table_util_test.go index e61c9e6fc559..2292055e160d 100644 --- a/p2p/discover/table_util_test.go +++ b/p2p/discover/table_util_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -22,8 +22,11 @@ import ( "fmt" "math/rand" "net" + "sort" "sync" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" ) @@ -38,7 +41,8 @@ func init() { func newTestTable(t transport) (*Table, *enode.DB) { db, _ := enode.OpenDB("") - tab, _ := newTable(t, db, nil) + tab, _ := newTable(t, db, nil, log.Root()) + go tab.loop() return tab, db } @@ -94,6 +98,7 @@ func fillTable(tab *Table, nodes []*node) { type pingRecorder struct { mu sync.Mutex dead, pinged map[enode.ID]bool + records map[enode.ID]*enode.Node n *enode.Node } @@ -103,33 +108,52 @@ func newPingRecorder() *pingRecorder { n := enode.SignNull(&r, enode.ID{}) return &pingRecorder{ - dead: make(map[enode.ID]bool), - pinged: make(map[enode.ID]bool), - n: n, + dead: make(map[enode.ID]bool), + pinged: make(map[enode.ID]bool), + records: make(map[enode.ID]*enode.Node), + n: n, } } -func (t *pingRecorder) self() *enode.Node { - return nullNode +// setRecord updates a node record. Future calls to ping and +// requestENR will return this record. +func (t *pingRecorder) updateRecord(n *enode.Node) { + t.mu.Lock() + defer t.mu.Unlock() + t.records[n.ID()] = n } -func (t *pingRecorder) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ([]*node, error) { - return nil, nil -} +// Stubs to satisfy the transport interface. +func (t *pingRecorder) Self() *enode.Node { return nullNode } +func (t *pingRecorder) lookupSelf() []*enode.Node { return nil } +func (t *pingRecorder) lookupRandom() []*enode.Node { return nil } +func (t *pingRecorder) close() {} -func (t *pingRecorder) ping(toid enode.ID, toaddr *net.UDPAddr) error { +// ping simulates a ping request. +func (t *pingRecorder) ping(n *enode.Node) (seq uint64, err error) { t.mu.Lock() defer t.mu.Unlock() - t.pinged[toid] = true - if t.dead[toid] { - return errTimeout - } else { - return nil + t.pinged[n.ID()] = true + if t.dead[n.ID()] { + return 0, errTimeout } + if t.records[n.ID()] != nil { + seq = t.records[n.ID()].Seq() + } + return seq, nil } -func (t *pingRecorder) close() {} +// requestENR simulates an ENR request. +func (t *pingRecorder) RequestENR(n *enode.Node) (*enode.Node, error) { + t.mu.Lock() + defer t.mu.Unlock() + + if t.dead[n.ID()] || t.records[n.ID()] == nil { + return nil, errTimeout + } + return t.records[n.ID()], nil +} func hasDuplicates(slice []*node) bool { seen := make(map[enode.ID]bool) @@ -146,14 +170,21 @@ func hasDuplicates(slice []*node) bool { } func sortedByDistanceTo(distbase enode.ID, slice []*node) bool { - var last enode.ID - for i, e := range slice { - if i > 0 && enode.DistCmp(distbase, e.ID(), last) < 0 { - return false - } - last = e.ID() + return sort.SliceIsSorted(slice, func(i, j int) bool { + return enode.DistCmp(distbase, slice[i].ID(), slice[j].ID()) < 0 + }) +} + +func hexEncPrivkey(h string) *ecdsa.PrivateKey { + b, err := hex.DecodeString(h) + if err != nil { + panic(err) + } + key, err := crypto.ToECDSA(b) + if err != nil { + panic(err) } - return true + return key } func hexEncPubkey(h string) (ret encPubkey) { @@ -167,11 +198,3 @@ func hexEncPubkey(h string) (ret encPubkey) { copy(ret[:], b) return ret } - -func hexPubkey(h string) *ecdsa.PublicKey { - k, err := decodePubkey(hexEncPubkey(h)) - if err != nil { - panic(err) - } - return k -} diff --git a/p2p/discover/udp.go b/p2p/discover/v4_udp.go similarity index 52% rename from p2p/discover/udp.go rename to p2p/discover/v4_udp.go index df9a3065fa09..a8f7101b0594 100644 --- a/p2p/discover/udp.go +++ b/p2p/discover/v4_udp.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -20,8 +20,10 @@ import ( "bytes" "container/list" "crypto/ecdsa" + crand "crypto/rand" "errors" "fmt" + "io" "net" "sync" "time" @@ -29,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/netutil" "github.com/ethereum/go-ethereum/rlp" ) @@ -45,28 +48,35 @@ var ( errClosed = errors.New("socket closed") ) -// Timeouts const ( respTimeout = 500 * time.Millisecond expiration = 20 * time.Second bondExpiration = 24 * time.Hour + maxFindnodeFailures = 5 // nodes exceeding this limit are dropped ntpFailureThreshold = 32 // Continuous timeouts after which to check NTP ntpWarningCooldown = 10 * time.Minute // Minimum amount of time to pass before repeating NTP warning driftThreshold = 10 * time.Second // Allowed clock drift before warning user + + // Discovery packets are defined to be no larger than 1280 bytes. + // Packets larger than this size will be cut at the end and treated + // as invalid because their hash won't match. + maxPacketSize = 1280 ) // RPC packet types const ( - pingPacket = iota + 1 // zero is 'reserved' - pongPacket - findnodePacket - neighborsPacket + p_pingV4 = iota + 1 // zero is 'reserved' + p_pongV4 + p_findnodeV4 + p_neighborsV4 + p_enrRequestV4 + p_enrResponseV4 ) // RPC request structures type ( - ping struct { + pingV4 struct { senderKey *ecdsa.PublicKey // filled in by preverify Version uint @@ -76,8 +86,8 @@ type ( Rest []rlp.RawValue `rlp:"tail"` } - // pong is the reply to ping. - pong struct { + // pongV4 is the reply to pingV4. + pongV4 struct { // This field should mirror the UDP envelope address // of the ping packet, which provides a way to discover the // the external address (after NAT). @@ -89,22 +99,37 @@ type ( Rest []rlp.RawValue `rlp:"tail"` } - // findnode is a query for nodes close to the given target. - findnode struct { + // findnodeV4 is a query for nodes close to the given target. + findnodeV4 struct { Target encPubkey Expiration uint64 // Ignore additional fields (for forward compatibility). Rest []rlp.RawValue `rlp:"tail"` } - // reply to findnode - neighbors struct { + // neighborsV4 is the reply to findnodeV4. + neighborsV4 struct { Nodes []rpcNode Expiration uint64 // Ignore additional fields (for forward compatibility). Rest []rlp.RawValue `rlp:"tail"` } + // enrRequestV4 queries for the remote node's record. + enrRequestV4 struct { + Expiration uint64 + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + + // enrResponseV4 is the reply to enrRequestV4. + enrResponseV4 struct { + ReplyTok []byte // Hash of the enrRequest packet. + Record enr.Record + // Ignore additional fields (for forward compatibility). + Rest []rlp.RawValue `rlp:"tail"` + } + rpcNode struct { IP net.IP // len 4 for IPv4 or 16 for IPv6 UDP uint16 // for discovery protocol @@ -119,6 +144,17 @@ type ( } ) +// packetV4 is implemented by all v4 protocol messages. +type packetV4 interface { + // preverify checks whether the packet is valid and should be handled at all. + preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error + // handle handles the packet. + handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) + // packet name and type for logging purposes. + name() string + kind() byte +} + func makeEndpoint(addr *net.UDPAddr, tcpPort uint16) rpcEndpoint { ip := net.IP{} if ip4 := addr.IP.To4(); ip4 != nil { @@ -129,7 +165,7 @@ func makeEndpoint(addr *net.UDPAddr, tcpPort uint16) rpcEndpoint { return rpcEndpoint{IP: ip, UDP: uint16(addr.Port), TCP: tcpPort} } -func (t *udp) nodeFromRPC(sender *net.UDPAddr, rn rpcNode) (*node, error) { +func (t *UDPv4) nodeFromRPC(sender *net.UDPAddr, rn rpcNode) (*node, error) { if rn.UDP <= 1024 { return nil, errors.New("low port") } @@ -157,31 +193,16 @@ func nodeToRPC(n *node) rpcNode { return rpcNode{ID: ekey, IP: n.IP(), UDP: uint16(n.UDP()), TCP: uint16(n.TCP())} } -// packet is implemented by all protocol messages. -type packet interface { - // preverify checks whether the packet is valid and should be handled at all. - preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error - // handle handles the packet. - handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) - // name returns the name of the packet for logging purposes. - name() string -} - -type conn interface { - ReadFromUDP(b []byte) (n int, addr *net.UDPAddr, err error) - WriteToUDP(b []byte, addr *net.UDPAddr) (n int, err error) - Close() error - LocalAddr() net.Addr -} - -// udp implements the discovery v4 UDP wire protocol. -type udp struct { - conn conn +// UDPv4 implements the v4 wire protocol. +type UDPv4 struct { + conn UDPConn + log log.Logger netrestrict *netutil.Netlist priv *ecdsa.PrivateKey localNode *enode.LocalNode db *enode.DB tab *Table + closeOnce sync.Once wg sync.WaitGroup addReplyMatcher chan *replyMatcher @@ -189,7 +210,7 @@ type udp struct { closing chan struct{} } -// pending represents a pending reply. +// replyMatcher represents a pending reply. // // Some implementations of the protocol wish to send more than one // reply packet to findnode. In general, any neighbors packet cannot @@ -215,50 +236,27 @@ type replyMatcher struct { // errc receives nil when the callback indicates completion or an // error if no further reply is received within the timeout. - errc chan<- error + errc chan error + + // reply contains the most recent reply. This field is safe for reading after errc has + // received a value. + reply packetV4 } type replyMatchFunc func(interface{}) (matched bool, requestDone bool) +// reply is a reply packet from a certain node. type reply struct { - from enode.ID - ip net.IP - ptype byte - data packet - + from enode.ID + ip net.IP + data packetV4 // loop indicates whether there was // a matching request by sending on this channel. matched chan<- bool } -// ReadPacket is sent to the unhandled channel when it could not be processed -type ReadPacket struct { - Data []byte - Addr *net.UDPAddr -} - -// Config holds Table-related settings. -type Config struct { - // These settings are required and configure the UDP listener: - PrivateKey *ecdsa.PrivateKey - - // These settings are optional: - NetRestrict *netutil.Netlist // network whitelist - Bootnodes []*enode.Node // list of bootstrap nodes - Unhandled chan<- ReadPacket // unhandled packets are sent on this channel -} - -// ListenUDP returns a new table that listens for UDP packets on laddr. -func ListenUDP(c conn, ln *enode.LocalNode, cfg Config) (*Table, error) { - tab, _, err := newUDP(c, ln, cfg) - if err != nil { - return nil, err - } - return tab, nil -} - -func newUDP(c conn, ln *enode.LocalNode, cfg Config) (*Table, *udp, error) { - udp := &udp{ +func ListenV4(c UDPConn, ln *enode.LocalNode, cfg Config) (*UDPv4, error) { + t := &UDPv4{ conn: c, priv: cfg.PrivateKey, netrestrict: cfg.NetRestrict, @@ -267,59 +265,217 @@ func newUDP(c conn, ln *enode.LocalNode, cfg Config) (*Table, *udp, error) { closing: make(chan struct{}), gotreply: make(chan reply), addReplyMatcher: make(chan *replyMatcher), + log: cfg.Log, } - tab, err := newTable(udp, ln.Database(), cfg.Bootnodes) + if t.log == nil { + t.log = log.Root() + } + tab, err := newTable(t, ln.Database(), cfg.Bootnodes, t.log) if err != nil { - return nil, nil, err + return nil, err } - udp.tab = tab + t.tab = tab + go tab.loop() - udp.wg.Add(2) - go udp.loop() - go udp.readLoop(cfg.Unhandled) - return udp.tab, udp, nil + t.wg.Add(2) + go t.loop() + go t.readLoop(cfg.Unhandled) + return t, nil } -func (t *udp) self() *enode.Node { +// Self returns the local node. +func (t *UDPv4) Self() *enode.Node { return t.localNode.Node() } -func (t *udp) close() { - close(t.closing) - t.conn.Close() - t.wg.Wait() +// Close shuts down the socket and aborts any running queries. +func (t *UDPv4) Close() { + t.closeOnce.Do(func() { + close(t.closing) + t.conn.Close() + t.wg.Wait() + t.tab.close() + }) +} + +// ReadRandomNodes reads random nodes from the local table. +func (t *UDPv4) ReadRandomNodes(buf []*enode.Node) int { + return t.tab.ReadRandomNodes(buf) +} + +// LookupRandom finds random nodes in the network. +func (t *UDPv4) LookupRandom() []*enode.Node { + if t.tab.len() == 0 { + // All nodes were dropped, refresh. The very first query will hit this + // case and run the bootstrapping logic. + <-t.tab.refresh() + } + return t.lookupRandom() +} + +func (t *UDPv4) LookupPubkey(key *ecdsa.PublicKey) []*enode.Node { + if t.tab.len() == 0 { + // All nodes were dropped, refresh. The very first query will hit this + // case and run the bootstrapping logic. + <-t.tab.refresh() + } + return unwrapNodes(t.lookup(encodePubkey(key))) +} + +func (t *UDPv4) lookupRandom() []*enode.Node { + var target encPubkey + crand.Read(target[:]) + return unwrapNodes(t.lookup(target)) +} + +func (t *UDPv4) lookupSelf() []*enode.Node { + return unwrapNodes(t.lookup(encodePubkey(&t.priv.PublicKey))) +} + +// lookup performs a network search for nodes close to the given target. It approaches the +// target by querying nodes that are closer to it on each iteration. The given target does +// not need to be an actual node identifier. +func (t *UDPv4) lookup(targetKey encPubkey) []*node { + var ( + target = enode.ID(crypto.Keccak256Hash(targetKey[:])) + asked = make(map[enode.ID]bool) + seen = make(map[enode.ID]bool) + reply = make(chan []*node, alpha) + pendingQueries = 0 + result *nodesByDistance + ) + // Don't query further if we hit ourself. + // Unlikely to happen often in practice. + asked[t.Self().ID()] = true + + // Generate the initial result set. + t.tab.mutex.Lock() + result = t.tab.closest(target, bucketSize, false) + t.tab.mutex.Unlock() + + for { + // ask the alpha closest nodes that we haven't asked yet + for i := 0; i < len(result.entries) && pendingQueries < alpha; i++ { + n := result.entries[i] + if !asked[n.ID()] { + asked[n.ID()] = true + pendingQueries++ + go t.lookupWorker(n, targetKey, reply) + } + } + if pendingQueries == 0 { + // we have asked all closest nodes, stop the search + break + } + select { + case nodes := <-reply: + for _, n := range nodes { + if n != nil && !seen[n.ID()] { + seen[n.ID()] = true + result.push(n, bucketSize) + } + } + case <-t.tab.closeReq: + return nil // shutdown, no need to continue. + } + pendingQueries-- + } + return result.entries +} + +func (t *UDPv4) lookupWorker(n *node, targetKey encPubkey, reply chan<- []*node) { + fails := t.db.FindFails(n.ID(), n.IP()) + r, err := t.findnode(n.ID(), n.addr(), targetKey) + if err == errClosed { + // Avoid recording failures on shutdown. + reply <- nil + return + } else if len(r) == 0 { + fails++ + t.db.UpdateFindFails(n.ID(), n.IP(), fails) + t.log.Trace("Findnode failed", "id", n.ID(), "failcount", fails, "err", err) + if fails >= maxFindnodeFailures { + t.log.Trace("Too many findnode failures, dropping", "id", n.ID(), "failcount", fails) + t.tab.delete(n) + } + } else if fails > 0 { + // Reset failure counter because it counts _consecutive_ failures. + t.db.UpdateFindFails(n.ID(), n.IP(), 0) + } + + // Grab as many nodes as possible. Some of them might not be alive anymore, but we'll + // just remove those again during revalidation. + for _, n := range r { + t.tab.addSeenNode(n) + } + reply <- r } -func (t *udp) ourEndpoint() rpcEndpoint { - n := t.self() +// Resolve searches for a specific node with the given ID and tries to get the most recent +// version of the node record for it. It returns n if the node could not be resolved. +func (t *UDPv4) Resolve(n *enode.Node) *enode.Node { + // Try asking directly. This works if the node is still responding on the endpoint we have. + if rn, err := t.RequestENR(n); err == nil { + return rn + } + // Check table for the ID, we might have a newer version there. + if intable := t.tab.getNode(n.ID()); intable != nil && intable.Seq() > n.Seq() { + n = intable + if rn, err := t.RequestENR(n); err == nil { + return rn + } + } + // Otherwise perform a network lookup. + var key enode.Secp256k1 + if n.Load(&key) != nil { + return n // no secp256k1 key + } + result := t.LookupPubkey((*ecdsa.PublicKey)(&key)) + for _, rn := range result { + if rn.ID() == n.ID() { + if rn, err := t.RequestENR(rn); err == nil { + return rn + } + } + } + return n +} + +func (t *UDPv4) ourEndpoint() rpcEndpoint { + n := t.Self() a := &net.UDPAddr{IP: n.IP(), Port: n.UDP()} return makeEndpoint(a, uint16(n.TCP())) } +// Ping sends a ping message to the given node. +func (t *UDPv4) Ping(n *enode.Node) error { + _, err := t.ping(n) + return err +} + // ping sends a ping message to the given node and waits for a reply. -func (t *udp) ping(toid enode.ID, toaddr *net.UDPAddr) error { - return <-t.sendPing(toid, toaddr, nil) +func (t *UDPv4) ping(n *enode.Node) (seq uint64, err error) { + rm := t.sendPing(n.ID(), &net.UDPAddr{IP: n.IP(), Port: n.UDP()}, nil) + if err = <-rm.errc; err == nil { + seq = seqFromTail(rm.reply.(*pongV4).Rest) + } + return seq, err } // sendPing sends a ping message to the given node and invokes the callback // when the reply arrives. -func (t *udp) sendPing(toid enode.ID, toaddr *net.UDPAddr, callback func()) <-chan error { - req := &ping{ - Version: 4, - From: t.ourEndpoint(), - To: makeEndpoint(toaddr, 0), // TODO: maybe use known TCP port from DB - Expiration: uint64(time.Now().Add(expiration).Unix()), - } - packet, hash, err := encodePacket(t.priv, pingPacket, req) +func (t *UDPv4) sendPing(toid enode.ID, toaddr *net.UDPAddr, callback func()) *replyMatcher { + req := t.makePing(toaddr) + packet, hash, err := t.encode(t.priv, req) if err != nil { errc := make(chan error, 1) errc <- err - return errc + return &replyMatcher{errc: errc} } // Add a matcher for the reply to the pending reply queue. Pongs are matched if they // reference the ping we're about to send. - errc := t.pending(toid, toaddr.IP, pongPacket, func(p interface{}) (matched bool, requestDone bool) { - matched = bytes.Equal(p.(*pong).ReplyTok, hash) + rm := t.pending(toid, toaddr.IP, p_pongV4, func(p interface{}) (matched bool, requestDone bool) { + matched = bytes.Equal(p.(*pongV4).ReplyTok, hash) if matched && callback != nil { callback() } @@ -328,47 +484,92 @@ func (t *udp) sendPing(toid enode.ID, toaddr *net.UDPAddr, callback func()) <-ch // Send the packet. t.localNode.UDPContact(toaddr) t.write(toaddr, toid, req.name(), packet) - return errc + return rm +} + +func (t *UDPv4) makePing(toaddr *net.UDPAddr) *pingV4 { + seq, _ := rlp.EncodeToBytes(t.localNode.Node().Seq()) + return &pingV4{ + Version: 4, + From: t.ourEndpoint(), + To: makeEndpoint(toaddr, 0), + Expiration: uint64(time.Now().Add(expiration).Unix()), + Rest: []rlp.RawValue{seq}, + } } // findnode sends a findnode request to the given node and waits until // the node has sent up to k neighbors. -func (t *udp) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ([]*node, error) { - // If we haven't seen a ping from the destination node for a while, it won't remember - // our endpoint proof and reject findnode. Solicit a ping first. - if time.Since(t.db.LastPingReceived(toid, toaddr.IP)) > bondExpiration { - t.ping(toid, toaddr) - // Wait for them to ping back and process our pong. - time.Sleep(respTimeout) - } +func (t *UDPv4) findnode(toid enode.ID, toaddr *net.UDPAddr, target encPubkey) ([]*node, error) { + t.ensureBond(toid, toaddr) // Add a matcher for 'neighbours' replies to the pending reply queue. The matcher is // active until enough nodes have been received. nodes := make([]*node, 0, bucketSize) nreceived := 0 - errc := t.pending(toid, toaddr.IP, neighborsPacket, func(r interface{}) (matched bool, requestDone bool) { - reply := r.(*neighbors) + rm := t.pending(toid, toaddr.IP, p_neighborsV4, func(r interface{}) (matched bool, requestDone bool) { + reply := r.(*neighborsV4) for _, rn := range reply.Nodes { nreceived++ n, err := t.nodeFromRPC(toaddr, rn) if err != nil { - log.Trace("Invalid neighbor node received", "ip", rn.IP, "addr", toaddr, "err", err) + t.log.Trace("Invalid neighbor node received", "ip", rn.IP, "addr", toaddr, "err", err) continue } nodes = append(nodes, n) } return true, nreceived >= bucketSize }) - t.send(toaddr, toid, findnodePacket, &findnode{ + t.send(toaddr, toid, &findnodeV4{ Target: target, Expiration: uint64(time.Now().Add(expiration).Unix()), }) - return nodes, <-errc + return nodes, <-rm.errc +} + +// RequestENR sends enrRequest to the given node and waits for a response. +func (t *UDPv4) RequestENR(n *enode.Node) (*enode.Node, error) { + addr := &net.UDPAddr{IP: n.IP(), Port: n.UDP()} + t.ensureBond(n.ID(), addr) + + req := &enrRequestV4{ + Expiration: uint64(time.Now().Add(expiration).Unix()), + } + packet, hash, err := t.encode(t.priv, req) + if err != nil { + return nil, err + } + // Add a matcher for the reply to the pending reply queue. Responses are matched if + // they reference the request we're about to send. + rm := t.pending(n.ID(), addr.IP, p_enrResponseV4, func(r interface{}) (matched bool, requestDone bool) { + matched = bytes.Equal(r.(*enrResponseV4).ReplyTok, hash) + return matched, matched + }) + // Send the packet and wait for the reply. + t.write(addr, n.ID(), req.name(), packet) + if err := <-rm.errc; err != nil { + return nil, err + } + // Verify the response record. + respN, err := enode.New(enode.ValidSchemes, &rm.reply.(*enrResponseV4).Record) + if err != nil { + return nil, err + } + if respN.ID() != n.ID() { + return nil, fmt.Errorf("invalid ID in response record") + } + if respN.Seq() < n.Seq() { + return n, nil // response record is older + } + if err := netutil.CheckRelayIP(addr.IP, respN.IP()); err != nil { + return nil, fmt.Errorf("invalid IP in response record: %v", err) + } + return respN, nil } // pending adds a reply matcher to the pending reply queue. // see the documentation of type replyMatcher for a detailed explanation. -func (t *udp) pending(id enode.ID, ip net.IP, ptype byte, callback replyMatchFunc) <-chan error { +func (t *UDPv4) pending(id enode.ID, ip net.IP, ptype byte, callback replyMatchFunc) *replyMatcher { ch := make(chan error, 1) p := &replyMatcher{from: id, ip: ip, ptype: ptype, callback: callback, errc: ch} select { @@ -377,15 +578,15 @@ func (t *udp) pending(id enode.ID, ip net.IP, ptype byte, callback replyMatchFun case <-t.closing: ch <- errClosed } - return ch + return p } // handleReply dispatches a reply packet, invoking reply matchers. It returns // whether any matcher considered the packet acceptable. -func (t *udp) handleReply(from enode.ID, fromIP net.IP, ptype byte, req packet) bool { +func (t *UDPv4) handleReply(from enode.ID, fromIP net.IP, req packetV4) bool { matched := make(chan bool, 1) select { - case t.gotreply <- reply{from, fromIP, ptype, req, matched}: + case t.gotreply <- reply{from, fromIP, req, matched}: // loop will handle it return <-matched case <-t.closing: @@ -395,7 +596,7 @@ func (t *udp) handleReply(from enode.ID, fromIP net.IP, ptype byte, req packet) // loop runs in its own goroutine. it keeps track of // the refresh timer and the pending reply queue. -func (t *udp) loop() { +func (t *UDPv4) loop() { defer t.wg.Done() var ( @@ -448,11 +649,12 @@ func (t *udp) loop() { var matched bool // whether any replyMatcher considered the reply acceptable. for el := plist.Front(); el != nil; el = el.Next() { p := el.Value.(*replyMatcher) - if p.from == r.from && p.ptype == r.ptype && p.ip.Equal(r.ip) { + if p.from == r.from && p.ptype == r.data.kind() && p.ip.Equal(r.ip) { ok, requestDone := p.callback(r.data) matched = matched || ok // Remove the matcher if callback indicates that all replies have been received. if requestDone { + p.reply = r.data p.errc <- nil plist.Remove(el) } @@ -496,13 +698,13 @@ var ( headSpace = make([]byte, headSize) // Neighbors replies are sent across multiple packets to - // stay below the 1280 byte limit. We compute the maximum number + // stay below the packet size limit. We compute the maximum number // of entries by stuffing a packet until it grows too large. maxNeighbors int ) func init() { - p := neighbors{Expiration: ^uint64(0)} + p := neighborsV4{Expiration: ^uint64(0)} maxSizeNode := rpcNode{IP: make(net.IP, 16), UDP: ^uint16(0), TCP: ^uint16(0)} for n := 0; ; n++ { p.Nodes = append(p.Nodes, maxSizeNode) @@ -511,39 +713,40 @@ func init() { // If this ever happens, it will be caught by the unit tests. panic("cannot encode: " + err.Error()) } - if headSize+size+1 >= 1280 { + if headSize+size+1 >= maxPacketSize { maxNeighbors = n break } } } -func (t *udp) send(toaddr *net.UDPAddr, toid enode.ID, ptype byte, req packet) ([]byte, error) { - packet, hash, err := encodePacket(t.priv, ptype, req) +func (t *UDPv4) send(toaddr *net.UDPAddr, toid enode.ID, req packetV4) ([]byte, error) { + packet, hash, err := t.encode(t.priv, req) if err != nil { return hash, err } return hash, t.write(toaddr, toid, req.name(), packet) } -func (t *udp) write(toaddr *net.UDPAddr, toid enode.ID, what string, packet []byte) error { +func (t *UDPv4) write(toaddr *net.UDPAddr, toid enode.ID, what string, packet []byte) error { _, err := t.conn.WriteToUDP(packet, toaddr) - log.Trace(">> "+what, "id", toid, "addr", toaddr, "err", err) + t.log.Trace(">> "+what, "id", toid, "addr", toaddr, "err", err) return err } -func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) (packet, hash []byte, err error) { +func (t *UDPv4) encode(priv *ecdsa.PrivateKey, req packetV4) (packet, hash []byte, err error) { + name := req.name() b := new(bytes.Buffer) b.Write(headSpace) - b.WriteByte(ptype) + b.WriteByte(req.kind()) if err := rlp.Encode(b, req); err != nil { - log.Error("Can't encode discv4 packet", "err", err) + t.log.Error(fmt.Sprintf("Can't encode %s packet", name), "err", err) return nil, nil, err } packet = b.Bytes() sig, err := crypto.Sign(crypto.Keccak256(packet[headSize:]), priv) if err != nil { - log.Error("Can't sign discv4 packet", "err", err) + t.log.Error(fmt.Sprintf("Can't sign %s packet", name), "err", err) return nil, nil, err } copy(packet[macSize:], sig) @@ -556,25 +759,24 @@ func encodePacket(priv *ecdsa.PrivateKey, ptype byte, req interface{}) (packet, } // readLoop runs in its own goroutine. it handles incoming UDP packets. -func (t *udp) readLoop(unhandled chan<- ReadPacket) { +func (t *UDPv4) readLoop(unhandled chan<- ReadPacket) { defer t.wg.Done() if unhandled != nil { defer close(unhandled) } - // Discovery packets are defined to be no larger than 1280 bytes. - // Packets larger than this size will be cut at the end and treated - // as invalid because their hash won't match. - buf := make([]byte, 1280) + buf := make([]byte, maxPacketSize) for { nbytes, from, err := t.conn.ReadFromUDP(buf) if netutil.IsTemporaryError(err) { // Ignore temporary read errors. - log.Debug("Temporary UDP read error", "err", err) + t.log.Debug("Temporary UDP read error", "err", err) continue } else if err != nil { // Shut down the loop for permament errors. - log.Debug("UDP read error", "err", err) + if err != io.EOF { + t.log.Debug("UDP read error", "err", err) + } return } if t.handlePacket(from, buf[:nbytes]) != nil && unhandled != nil { @@ -586,24 +788,24 @@ func (t *udp) readLoop(unhandled chan<- ReadPacket) { } } -func (t *udp) handlePacket(from *net.UDPAddr, buf []byte) error { - packet, fromKey, hash, err := decodePacket(buf) +func (t *UDPv4) handlePacket(from *net.UDPAddr, buf []byte) error { + packet, fromKey, hash, err := decodeV4(buf) if err != nil { - log.Debug("Bad discv4 packet", "addr", from, "err", err) + t.log.Debug("Bad discv4 packet", "addr", from, "err", err) return err } fromID := fromKey.id() if err == nil { err = packet.preverify(t, from, fromID, fromKey) } - log.Trace("<< "+packet.name(), "id", fromID, "addr", from, "err", err) + t.log.Trace("<< "+packet.name(), "id", fromID, "addr", from, "err", err) if err == nil { packet.handle(t, from, fromID, hash) } return err } -func decodePacket(buf []byte) (packet, encPubkey, []byte, error) { +func decodeV4(buf []byte) (packetV4, encPubkey, []byte, error) { if len(buf) < headSize+1 { return nil, encPubkey{}, nil, errPacketTooSmall } @@ -617,16 +819,20 @@ func decodePacket(buf []byte) (packet, encPubkey, []byte, error) { return nil, fromKey, hash, err } - var req packet + var req packetV4 switch ptype := sigdata[0]; ptype { - case pingPacket: - req = new(ping) - case pongPacket: - req = new(pong) - case findnodePacket: - req = new(findnode) - case neighborsPacket: - req = new(neighbors) + case p_pingV4: + req = new(pingV4) + case p_pongV4: + req = new(pongV4) + case p_findnodeV4: + req = new(findnodeV4) + case p_neighborsV4: + req = new(neighborsV4) + case p_enrRequestV4: + req = new(enrRequestV4) + case p_enrResponseV4: + req = new(enrResponseV4) default: return nil, fromKey, hash, fmt.Errorf("unknown type: %d", ptype) } @@ -635,9 +841,43 @@ func decodePacket(buf []byte) (packet, encPubkey, []byte, error) { return req, fromKey, hash, err } -// Packet Handlers +// checkBond checks if the given node has a recent enough endpoint proof. +func (t *UDPv4) checkBond(id enode.ID, ip net.IP) bool { + return time.Since(t.db.LastPongReceived(id, ip)) < bondExpiration +} -func (req *ping) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { +// ensureBond solicits a ping from a node if we haven't seen a ping from it for a while. +// This ensures there is a valid endpoint proof on the remote end. +func (t *UDPv4) ensureBond(toid enode.ID, toaddr *net.UDPAddr) { + tooOld := time.Since(t.db.LastPingReceived(toid, toaddr.IP)) > bondExpiration + if tooOld || t.db.FindFails(toid, toaddr.IP) > maxFindnodeFailures { + rm := t.sendPing(toid, toaddr, nil) + <-rm.errc + // Wait for them to ping back and process our pong. + time.Sleep(respTimeout) + } +} + +// expired checks whether the given UNIX time stamp is in the past. +func expired(ts uint64) bool { + return time.Unix(int64(ts), 0).Before(time.Now()) +} + +func seqFromTail(tail []rlp.RawValue) uint64 { + if len(tail) == 0 { + return 0 + } + var seq uint64 + rlp.DecodeBytes(tail[0], &seq) + return seq +} + +// PING/v4 + +func (req *pingV4) name() string { return "PING/v4" } +func (req *pingV4) kind() byte { return p_pingV4 } + +func (req *pingV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { if expired(req.Expiration) { return errExpired } @@ -649,12 +889,14 @@ func (req *ping) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey e return nil } -func (req *ping) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (req *pingV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { // Reply. - t.send(from, fromID, pongPacket, &pong{ + seq, _ := rlp.EncodeToBytes(t.localNode.Node().Seq()) + t.send(from, fromID, &pongV4{ To: makeEndpoint(from, req.From.TCP), ReplyTok: mac, Expiration: uint64(time.Now().Add(expiration).Unix()), + Rest: []rlp.RawValue{seq}, }) // Ping back if our last pong on file is too far in the past. @@ -672,30 +914,36 @@ func (req *ping) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) t.localNode.UDPEndpointStatement(from, &net.UDPAddr{IP: req.To.IP, Port: int(req.To.UDP)}) } -func (req *ping) name() string { return "PING/v4" } +// PONG/v4 + +func (req *pongV4) name() string { return "PONG/v4" } +func (req *pongV4) kind() byte { return p_pongV4 } -func (req *pong) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { +func (req *pongV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { if expired(req.Expiration) { return errExpired } - if !t.handleReply(fromID, from.IP, pongPacket, req) { + if !t.handleReply(fromID, from.IP, req) { return errUnsolicitedReply } return nil } -func (req *pong) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (req *pongV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { t.localNode.UDPEndpointStatement(from, &net.UDPAddr{IP: req.To.IP, Port: int(req.To.UDP)}) t.db.UpdateLastPongReceived(fromID, from.IP, time.Now()) } -func (req *pong) name() string { return "PONG/v4" } +// FINDNODE/v4 + +func (req *findnodeV4) name() string { return "FINDNODE/v4" } +func (req *findnodeV4) kind() byte { return p_findnodeV4 } -func (req *findnode) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { +func (req *findnodeV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { if expired(req.Expiration) { return errExpired } - if time.Since(t.db.LastPongReceived(fromID, from.IP)) > bondExpiration { + if !t.checkBond(fromID, from.IP) { // No endpoint proof pong exists, we don't process the packet. This prevents an // attack vector where the discovery protocol could be used to amplify traffic in a // DDOS attack. A malicious actor would send a findnode request with the IP address @@ -707,49 +955,83 @@ func (req *findnode) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromK return nil } -func (req *findnode) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (req *findnodeV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { // Determine closest nodes. target := enode.ID(crypto.Keccak256Hash(req.Target[:])) t.tab.mutex.Lock() - closest := t.tab.closest(target, bucketSize).entries + closest := t.tab.closest(target, bucketSize, true).entries t.tab.mutex.Unlock() // Send neighbors in chunks with at most maxNeighbors per packet - // to stay below the 1280 byte limit. - p := neighbors{Expiration: uint64(time.Now().Add(expiration).Unix())} + // to stay below the packet size limit. + p := neighborsV4{Expiration: uint64(time.Now().Add(expiration).Unix())} var sent bool for _, n := range closest { if netutil.CheckRelayIP(from.IP, n.IP()) == nil { p.Nodes = append(p.Nodes, nodeToRPC(n)) } if len(p.Nodes) == maxNeighbors { - t.send(from, fromID, neighborsPacket, &p) + t.send(from, fromID, &p) p.Nodes = p.Nodes[:0] sent = true } } if len(p.Nodes) > 0 || !sent { - t.send(from, fromID, neighborsPacket, &p) + t.send(from, fromID, &p) } } -func (req *findnode) name() string { return "FINDNODE/v4" } +// NEIGHBORS/v4 -func (req *neighbors) preverify(t *udp, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { +func (req *neighborsV4) name() string { return "NEIGHBORS/v4" } +func (req *neighborsV4) kind() byte { return p_neighborsV4 } + +func (req *neighborsV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { if expired(req.Expiration) { return errExpired } - if !t.handleReply(fromID, from.IP, neighborsPacket, req) { + if !t.handleReply(fromID, from.IP, req) { return errUnsolicitedReply } return nil } -func (req *neighbors) handle(t *udp, from *net.UDPAddr, fromID enode.ID, mac []byte) { +func (req *neighborsV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { } -func (req *neighbors) name() string { return "NEIGHBORS/v4" } +// ENRREQUEST/v4 -func expired(ts uint64) bool { - return time.Unix(int64(ts), 0).Before(time.Now()) +func (req *enrRequestV4) name() string { return "ENRREQUEST/v4" } +func (req *enrRequestV4) kind() byte { return p_enrRequestV4 } + +func (req *enrRequestV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { + if expired(req.Expiration) { + return errExpired + } + if !t.checkBond(fromID, from.IP) { + return errUnknownNode + } + return nil +} + +func (req *enrRequestV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { + t.send(from, fromID, &enrResponseV4{ + ReplyTok: mac, + Record: *t.localNode.Node().Record(), + }) +} + +// ENRRESPONSE/v4 + +func (req *enrResponseV4) name() string { return "ENRRESPONSE/v4" } +func (req *enrResponseV4) kind() byte { return p_enrResponseV4 } + +func (req *enrResponseV4) preverify(t *UDPv4, from *net.UDPAddr, fromID enode.ID, fromKey encPubkey) error { + if !t.handleReply(fromID, from.IP, req) { + return errUnsolicitedReply + } + return nil +} + +func (req *enrResponseV4) handle(t *UDPv4, from *net.UDPAddr, fromID enode.ID, mac []byte) { } diff --git a/p2p/discover/v4_udp_lookup_test.go b/p2p/discover/v4_udp_lookup_test.go new file mode 100644 index 000000000000..bc1cdfb089ab --- /dev/null +++ b/p2p/discover/v4_udp_lookup_test.go @@ -0,0 +1,220 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package discover + +import ( + "crypto/ecdsa" + "fmt" + "net" + "reflect" + "sort" + "testing" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestUDPv4_Lookup(t *testing.T) { + t.Parallel() + test := newUDPTest(t) + + // Lookup on empty table returns no nodes. + targetKey, _ := decodePubkey(lookupTestnet.target) + if results := test.udp.LookupPubkey(targetKey); len(results) > 0 { + t.Fatalf("lookup on empty table returned %d results: %#v", len(results), results) + } + + // Seed table with initial node. + fillTable(test.table, []*node{wrapNode(lookupTestnet.node(256, 0))}) + + // Start the lookup. + resultC := make(chan []*enode.Node, 1) + go func() { + resultC <- test.udp.LookupPubkey(targetKey) + test.close() + }() + + // Answer lookup packets. + for done := false; !done; { + done = test.waitPacketOut(func(p packetV4, to *net.UDPAddr, hash []byte) { + n, key := lookupTestnet.nodeByAddr(to) + switch p.(type) { + case *pingV4: + test.packetInFrom(nil, key, to, &pongV4{Expiration: futureExp, ReplyTok: hash}) + case *findnodeV4: + dist := enode.LogDist(n.ID(), lookupTestnet.target.id()) + nodes := lookupTestnet.nodesAtDistance(dist - 1) + test.packetInFrom(nil, key, to, &neighborsV4{Expiration: futureExp, Nodes: nodes}) + } + }) + } + + // Verify result nodes. + results := <-resultC + t.Logf("results:") + for _, e := range results { + t.Logf(" ld=%d, %x", enode.LogDist(lookupTestnet.target.id(), e.ID()), e.ID().Bytes()) + } + if len(results) != bucketSize { + t.Errorf("wrong number of results: got %d, want %d", len(results), bucketSize) + } + if hasDuplicates(wrapNodes(results)) { + t.Errorf("result set contains duplicate entries") + } + if !sortedByDistanceTo(lookupTestnet.target.id(), wrapNodes(results)) { + t.Errorf("result set not sorted by distance to target") + } + if !reflect.DeepEqual(results, lookupTestnet.closest(bucketSize)) { + t.Errorf("results aren't the closest %d nodes", bucketSize) + } +} + +// This is the test network for the Lookup test. +// The nodes were obtained by running lookupTestnet.mine with a random NodeID as target. +var lookupTestnet = &preminedTestnet{ + target: hexEncPubkey("5d485bdcbe9bc89314a10ae9231e429d33853e3a8fa2af39f5f827370a2e4185e344ace5d16237491dad41f278f1d3785210d29ace76cd627b9147ee340b1125"), + dists: [257][]*ecdsa.PrivateKey{ + 251: { + hexEncPrivkey("29738ba0c1a4397d6a65f292eee07f02df8e58d41594ba2be3cf84ce0fc58169"), + hexEncPrivkey("511b1686e4e58a917f7f848e9bf5539d206a68f5ad6b54b552c2399fe7d174ae"), + hexEncPrivkey("d09e5eaeec0fd596236faed210e55ef45112409a5aa7f3276d26646080dcfaeb"), + hexEncPrivkey("c1e20dbbf0d530e50573bd0a260b32ec15eb9190032b4633d44834afc8afe578"), + hexEncPrivkey("ed5f38f5702d92d306143e5d9154fb21819777da39af325ea359f453d179e80b"), + }, + 252: { + hexEncPrivkey("1c9b1cafbec00848d2c174b858219914b42a7d5c9359b1ca03fd650e8239ae94"), + hexEncPrivkey("e0e1e8db4a6f13c1ffdd3e96b72fa7012293ced187c9dcdcb9ba2af37a46fa10"), + hexEncPrivkey("3d53823e0a0295cb09f3e11d16c1b44d07dd37cec6f739b8df3a590189fe9fb9"), + }, + 253: { + hexEncPrivkey("2d0511ae9bf590166597eeab86b6f27b1ab761761eaea8965487b162f8703847"), + hexEncPrivkey("6cfbd7b8503073fc3dbdb746a7c672571648d3bd15197ccf7f7fef3d904f53a2"), + hexEncPrivkey("a30599b12827b69120633f15b98a7f6bc9fc2e9a0fd6ae2ebb767c0e64d743ab"), + hexEncPrivkey("14a98db9b46a831d67eff29f3b85b1b485bb12ae9796aea98d91be3dc78d8a91"), + hexEncPrivkey("2369ff1fc1ff8ca7d20b17e2673adc3365c3674377f21c5d9dafaff21fe12e24"), + hexEncPrivkey("9ae91101d6b5048607f41ec0f690ef5d09507928aded2410aabd9237aa2727d7"), + hexEncPrivkey("05e3c59090a3fd1ae697c09c574a36fcf9bedd0afa8fe3946f21117319ca4973"), + hexEncPrivkey("06f31c5ea632658f718a91a1b1b9ae4b7549d7b3bc61cbc2be5f4a439039f3ad"), + }, + 254: { + hexEncPrivkey("dec742079ec00ff4ec1284d7905bc3de2366f67a0769431fd16f80fd68c58a7c"), + hexEncPrivkey("ff02c8861fa12fbd129d2a95ea663492ef9c1e51de19dcfbbfe1c59894a28d2b"), + hexEncPrivkey("4dded9e4eefcbce4262be4fd9e8a773670ab0b5f448f286ec97dfc8cf681444a"), + hexEncPrivkey("750d931e2a8baa2c9268cb46b7cd851f4198018bed22f4dceb09dd334a2395f6"), + hexEncPrivkey("ce1435a956a98ffec484cd11489c4f165cf1606819ab6b521cee440f0c677e9e"), + hexEncPrivkey("996e7f8d1638be92d7328b4770f47e5420fc4bafecb4324fd33b1f5d9f403a75"), + hexEncPrivkey("ebdc44e77a6cc0eb622e58cf3bb903c3da4c91ca75b447b0168505d8fc308b9c"), + hexEncPrivkey("46bd1eddcf6431bea66fc19ebc45df191c1c7d6ed552dcdc7392885009c322f0"), + }, + 255: { + hexEncPrivkey("da8645f90826e57228d9ea72aff84500060ad111a5d62e4af831ed8e4b5acfb8"), + hexEncPrivkey("3c944c5d9af51d4c1d43f5d0f3a1a7ef65d5e82744d669b58b5fed242941a566"), + hexEncPrivkey("5ebcde76f1d579eebf6e43b0ffe9157e65ffaa391175d5b9aa988f47df3e33da"), + hexEncPrivkey("97f78253a7d1d796e4eaabce721febcc4550dd68fb11cc818378ba807a2cb7de"), + hexEncPrivkey("a38cd7dc9b4079d1c0406afd0fdb1165c285f2c44f946eca96fc67772c988c7d"), + hexEncPrivkey("d64cbb3ffdf712c372b7a22a176308ef8f91861398d5dbaf326fd89c6eaeef1c"), + hexEncPrivkey("d269609743ef29d6446e3355ec647e38d919c82a4eb5837e442efd7f4218944f"), + hexEncPrivkey("d8f7bcc4a530efde1d143717007179e0d9ace405ddaaf151c4d863753b7fd64c"), + }, + 256: { + hexEncPrivkey("8c5b422155d33ea8e9d46f71d1ad3e7b24cb40051413ffa1a81cff613d243ba9"), + hexEncPrivkey("937b1af801def4e8f5a3a8bd225a8bcff1db764e41d3e177f2e9376e8dd87233"), + hexEncPrivkey("120260dce739b6f71f171da6f65bc361b5fad51db74cf02d3e973347819a6518"), + hexEncPrivkey("1fa56cf25d4b46c2bf94e82355aa631717b63190785ac6bae545a88aadc304a9"), + hexEncPrivkey("3c38c503c0376f9b4adcbe935d5f4b890391741c764f61b03cd4d0d42deae002"), + hexEncPrivkey("3a54af3e9fa162bc8623cdf3e5d9b70bf30ade1d54cc3abea8659aba6cff471f"), + hexEncPrivkey("6799a02ea1999aefdcbcc4d3ff9544478be7365a328d0d0f37c26bd95ade0cda"), + hexEncPrivkey("e24a7bc9051058f918646b0f6e3d16884b2a55a15553b89bab910d55ebc36116"), + }, + }, +} + +type preminedTestnet struct { + target encPubkey + dists [hashBits + 1][]*ecdsa.PrivateKey +} + +func (tn *preminedTestnet) node(dist, index int) *enode.Node { + key := tn.dists[dist][index] + ip := net.IP{127, byte(dist >> 8), byte(dist), byte(index)} + return enode.NewV4(&key.PublicKey, ip, 0, 5000) +} + +func (tn *preminedTestnet) nodeByAddr(addr *net.UDPAddr) (*enode.Node, *ecdsa.PrivateKey) { + dist := int(addr.IP[1])<<8 + int(addr.IP[2]) + index := int(addr.IP[3]) + key := tn.dists[dist][index] + return tn.node(dist, index), key +} + +func (tn *preminedTestnet) nodesAtDistance(dist int) []rpcNode { + result := make([]rpcNode, len(tn.dists[dist])) + for i := range result { + result[i] = nodeToRPC(wrapNode(tn.node(dist, i))) + } + return result +} + +func (tn *preminedTestnet) closest(n int) (nodes []*enode.Node) { + for d := range tn.dists { + for i := range tn.dists[d] { + nodes = append(nodes, tn.node(d, i)) + } + } + sort.Slice(nodes, func(i, j int) bool { + return enode.DistCmp(tn.target.id(), nodes[i].ID(), nodes[j].ID()) < 0 + }) + return nodes[:n] +} + +var _ = (*preminedTestnet).mine // avoid linter warning about mine being dead code. + +// mine generates a testnet struct literal with nodes at +// various distances to the network's target. +func (tn *preminedTestnet) mine() { + // Clear existing slices first (useful when re-mining). + for i := range tn.dists { + tn.dists[i] = nil + } + + targetSha := tn.target.id() + found, need := 0, 40 + for found < need { + k := newkey() + ld := enode.LogDist(targetSha, encodePubkey(&k.PublicKey).id()) + if len(tn.dists[ld]) < 8 { + tn.dists[ld] = append(tn.dists[ld], k) + found++ + fmt.Printf("found ID with ld %d (%d/%d)\n", ld, found, need) + } + } + fmt.Printf("&preminedTestnet{\n") + fmt.Printf(" target: hexEncPubkey(\"%x\"),\n", tn.target[:]) + fmt.Printf(" dists: [%d][]*ecdsa.PrivateKey{\n", len(tn.dists)) + for ld, ns := range tn.dists { + if len(ns) == 0 { + continue + } + fmt.Printf(" %d: {\n", ld) + for _, key := range ns { + fmt.Printf(" hexEncPrivkey(\"%x\"),\n", crypto.FromECDSA(key)) + } + fmt.Printf(" },\n") + } + fmt.Printf(" },\n") + fmt.Printf("}\n") +} diff --git a/p2p/discover/udp_test.go b/p2p/discover/v4_udp_test.go similarity index 71% rename from p2p/discover/udp_test.go rename to p2p/discover/v4_udp_test.go index 3d53c9309995..b4e024e7ef29 100644 --- a/p2p/discover/udp_test.go +++ b/p2p/discover/v4_udp_test.go @@ -23,13 +23,10 @@ import ( "encoding/binary" "encoding/hex" "errors" - "fmt" "io" "math/rand" "net" - "path/filepath" "reflect" - "runtime" "sync" "testing" "time" @@ -37,7 +34,10 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rlp" ) @@ -59,7 +59,7 @@ type udpTest struct { pipe *dgramPipe table *Table db *enode.DB - udp *udp + udp *UDPv4 sent [][]byte localkey, remotekey *ecdsa.PrivateKey remoteaddr *net.UDPAddr @@ -73,91 +73,103 @@ func newUDPTest(t *testing.T) *udpTest { remotekey: newkey(), remoteaddr: &net.UDPAddr{IP: net.IP{10, 0, 1, 99}, Port: 30303}, } + test.db, _ = enode.OpenDB("") ln := enode.NewLocalNode(test.db, test.localkey) - test.table, test.udp, _ = newUDP(test.pipe, ln, Config{PrivateKey: test.localkey}) + test.udp, _ = ListenV4(test.pipe, ln, Config{ + PrivateKey: test.localkey, + Log: testlog.Logger(t, log.LvlTrace), + }) + test.table = test.udp.tab // Wait for initial refresh so the table doesn't send unexpected findnode. <-test.table.initDone return test } func (test *udpTest) close() { - test.table.Close() + test.udp.Close() test.db.Close() } // handles a packet as if it had been sent to the transport. -func (test *udpTest) packetIn(wantError error, ptype byte, data packet) error { - return test.packetInFrom(wantError, test.remotekey, test.remoteaddr, ptype, data) +func (test *udpTest) packetIn(wantError error, data packetV4) { + test.t.Helper() + + test.packetInFrom(wantError, test.remotekey, test.remoteaddr, data) } // handles a packet as if it had been sent to the transport by the key/endpoint. -func (test *udpTest) packetInFrom(wantError error, key *ecdsa.PrivateKey, addr *net.UDPAddr, ptype byte, data packet) error { - enc, _, err := encodePacket(key, ptype, data) +func (test *udpTest) packetInFrom(wantError error, key *ecdsa.PrivateKey, addr *net.UDPAddr, data packetV4) { + test.t.Helper() + + enc, _, err := test.udp.encode(key, data) if err != nil { - return test.errorf("packet (%d) encode error: %v", ptype, err) + test.t.Errorf("%s encode error: %v", data.name(), err) } test.sent = append(test.sent, enc) if err = test.udp.handlePacket(addr, enc); err != wantError { - return test.errorf("error mismatch: got %q, want %q", err, wantError) + test.t.Errorf("error mismatch: got %q, want %q", err, wantError) } - return nil } // waits for a packet to be sent by the transport. -// validate should have type func(*udpTest, X) error, where X is a packet type. -func (test *udpTest) waitPacketOut(validate interface{}) (*net.UDPAddr, []byte, error) { - dgram := test.pipe.waitPacketOut() - p, _, hash, err := decodePacket(dgram.data) +// validate should have type func(X, *net.UDPAddr, []byte), where X is a packet type. +func (test *udpTest) waitPacketOut(validate interface{}) (closed bool) { + test.t.Helper() + + dgram, ok := test.pipe.receive() + if !ok { + return true + } + p, _, hash, err := decodeV4(dgram.data) if err != nil { - return &dgram.to, hash, test.errorf("sent packet decode error: %v", err) + test.t.Errorf("sent packet decode error: %v", err) + return false } fn := reflect.ValueOf(validate) exptype := fn.Type().In(0) - if reflect.TypeOf(p) != exptype { - return &dgram.to, hash, test.errorf("sent packet type mismatch, got: %v, want: %v", reflect.TypeOf(p), exptype) - } - fn.Call([]reflect.Value{reflect.ValueOf(p)}) - return &dgram.to, hash, nil -} - -func (test *udpTest) errorf(format string, args ...interface{}) error { - _, file, line, ok := runtime.Caller(2) // errorf + waitPacketOut - if ok { - file = filepath.Base(file) - } else { - file = "???" - line = 1 + if !reflect.TypeOf(p).AssignableTo(exptype) { + test.t.Errorf("sent packet type mismatch, got: %v, want: %v", reflect.TypeOf(p), exptype) + return false } - err := fmt.Errorf(format, args...) - fmt.Printf("\t%s:%d: %v\n", file, line, err) - test.t.Fail() - return err + fn.Call([]reflect.Value{reflect.ValueOf(p), reflect.ValueOf(&dgram.to), reflect.ValueOf(hash)}) + return false } -func TestUDP_packetErrors(t *testing.T) { +func TestUDPv4_packetErrors(t *testing.T) { test := newUDPTest(t) defer test.close() - test.packetIn(errExpired, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: 4}) - test.packetIn(errUnsolicitedReply, pongPacket, &pong{ReplyTok: []byte{}, Expiration: futureExp}) - test.packetIn(errUnknownNode, findnodePacket, &findnode{Expiration: futureExp}) - test.packetIn(errUnsolicitedReply, neighborsPacket, &neighbors{Expiration: futureExp}) + test.packetIn(errExpired, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4}) + test.packetIn(errUnsolicitedReply, &pongV4{ReplyTok: []byte{}, Expiration: futureExp}) + test.packetIn(errUnknownNode, &findnodeV4{Expiration: futureExp}) + test.packetIn(errUnsolicitedReply, &neighborsV4{Expiration: futureExp}) } -func TestUDP_pingTimeout(t *testing.T) { +func TestUDPv4_pingTimeout(t *testing.T) { t.Parallel() test := newUDPTest(t) defer test.close() + key := newkey() toaddr := &net.UDPAddr{IP: net.ParseIP("1.2.3.4"), Port: 2222} - toid := enode.ID{1, 2, 3, 4} - if err := test.udp.ping(toid, toaddr); err != errTimeout { + node := enode.NewV4(&key.PublicKey, toaddr.IP, 0, toaddr.Port) + if _, err := test.udp.ping(node); err != errTimeout { t.Error("expected timeout error, got", err) } } -func TestUDP_responseTimeouts(t *testing.T) { +type testPacket byte + +func (req testPacket) kind() byte { return byte(req) } +func (req testPacket) name() string { return "" } +func (req testPacket) preverify(*UDPv4, *net.UDPAddr, enode.ID, encPubkey) error { + return nil +} +func (req testPacket) handle(*UDPv4, *net.UDPAddr, enode.ID, []byte) { +} + +func TestUDPv4_responseTimeouts(t *testing.T) { t.Parallel() test := newUDPTest(t) defer test.close() @@ -191,7 +203,7 @@ func TestUDP_responseTimeouts(t *testing.T) { p.errc = nilErr test.udp.addReplyMatcher <- p time.AfterFunc(randomDuration(60*time.Millisecond), func() { - if !test.udp.handleReply(p.from, p.ip, p.ptype, nil) { + if !test.udp.handleReply(p.from, p.ip, testPacket(p.ptype)) { t.Logf("not matched: %v", p) } }) @@ -229,7 +241,7 @@ func TestUDP_responseTimeouts(t *testing.T) { } } -func TestUDP_findnodeTimeout(t *testing.T) { +func TestUDPv4_findnodeTimeout(t *testing.T) { t.Parallel() test := newUDPTest(t) defer test.close() @@ -246,7 +258,7 @@ func TestUDP_findnodeTimeout(t *testing.T) { } } -func TestUDP_findnode(t *testing.T) { +func TestUDPv4_findnode(t *testing.T) { test := newUDPTest(t) defer test.close() @@ -275,10 +287,10 @@ func TestUDP_findnode(t *testing.T) { test.table.db.UpdateLastPongReceived(remoteID, test.remoteaddr.IP, time.Now()) // check that closest neighbors are returned. - expected := test.table.closest(testTarget.id(), bucketSize) - test.packetIn(nil, findnodePacket, &findnode{Target: testTarget, Expiration: futureExp}) + expected := test.table.closest(testTarget.id(), bucketSize, true) + test.packetIn(nil, &findnodeV4{Target: testTarget, Expiration: futureExp}) waitNeighbors := func(want []*node) { - test.waitPacketOut(func(p *neighbors) { + test.waitPacketOut(func(p *neighborsV4, to *net.UDPAddr, hash []byte) { if len(p.Nodes) != len(want) { t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize) } @@ -301,7 +313,7 @@ func TestUDP_findnode(t *testing.T) { waitNeighbors(want) } -func TestUDP_findnodeMultiReply(t *testing.T) { +func TestUDPv4_findnodeMultiReply(t *testing.T) { test := newUDPTest(t) defer test.close() @@ -322,7 +334,7 @@ func TestUDP_findnodeMultiReply(t *testing.T) { // wait for the findnode to be sent. // after it is sent, the transport is waiting for a reply - test.waitPacketOut(func(p *findnode) { + test.waitPacketOut(func(p *findnodeV4, to *net.UDPAddr, hash []byte) { if p.Target != testTarget { t.Errorf("wrong target: got %v, want %v", p.Target, testTarget) } @@ -330,17 +342,17 @@ func TestUDP_findnodeMultiReply(t *testing.T) { // send the reply as two packets. list := []*node{ - wrapNode(enode.MustParseV4("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:30303?discport=30304")), - wrapNode(enode.MustParseV4("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:30303")), - wrapNode(enode.MustParseV4("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17")), - wrapNode(enode.MustParseV4("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:30303")), + wrapNode(enode.MustParse("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:30303?discport=30304")), + wrapNode(enode.MustParse("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:30303")), + wrapNode(enode.MustParse("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17")), + wrapNode(enode.MustParse("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:30303")), } rpclist := make([]rpcNode, len(list)) for i := range list { rpclist[i] = nodeToRPC(list[i]) } - test.packetIn(nil, neighborsPacket, &neighbors{Expiration: futureExp, Nodes: rpclist[:2]}) - test.packetIn(nil, neighborsPacket, &neighbors{Expiration: futureExp, Nodes: rpclist[2:]}) + test.packetIn(nil, &neighborsV4{Expiration: futureExp, Nodes: rpclist[:2]}) + test.packetIn(nil, &neighborsV4{Expiration: futureExp, Nodes: rpclist[2:]}) // check that the sent neighbors are all returned by findnode select { @@ -356,46 +368,49 @@ func TestUDP_findnodeMultiReply(t *testing.T) { } } -func TestUDP_pingMatch(t *testing.T) { +// This test checks that reply matching of pong verifies the ping hash. +func TestUDPv4_pingMatch(t *testing.T) { test := newUDPTest(t) defer test.close() randToken := make([]byte, 32) crand.Read(randToken) - test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) - test.waitPacketOut(func(*pong) error { return nil }) - test.waitPacketOut(func(*ping) error { return nil }) - test.packetIn(errUnsolicitedReply, pongPacket, &pong{ReplyTok: randToken, To: testLocalAnnounced, Expiration: futureExp}) + test.packetIn(nil, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + test.waitPacketOut(func(*pongV4, *net.UDPAddr, []byte) {}) + test.waitPacketOut(func(*pingV4, *net.UDPAddr, []byte) {}) + test.packetIn(errUnsolicitedReply, &pongV4{ReplyTok: randToken, To: testLocalAnnounced, Expiration: futureExp}) } -func TestUDP_pingMatchIP(t *testing.T) { +// This test checks that reply matching of pong verifies the sender IP address. +func TestUDPv4_pingMatchIP(t *testing.T) { test := newUDPTest(t) defer test.close() - test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) - test.waitPacketOut(func(*pong) error { return nil }) + test.packetIn(nil, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + test.waitPacketOut(func(*pongV4, *net.UDPAddr, []byte) {}) - _, hash, _ := test.waitPacketOut(func(*ping) error { return nil }) - wrongAddr := &net.UDPAddr{IP: net.IP{33, 44, 1, 2}, Port: 30000} - test.packetInFrom(errUnsolicitedReply, test.remotekey, wrongAddr, pongPacket, &pong{ - ReplyTok: hash, - To: testLocalAnnounced, - Expiration: futureExp, + test.waitPacketOut(func(p *pingV4, to *net.UDPAddr, hash []byte) { + wrongAddr := &net.UDPAddr{IP: net.IP{33, 44, 1, 2}, Port: 30000} + test.packetInFrom(errUnsolicitedReply, test.remotekey, wrongAddr, &pongV4{ + ReplyTok: hash, + To: testLocalAnnounced, + Expiration: futureExp, + }) }) } -func TestUDP_successfulPing(t *testing.T) { +func TestUDPv4_successfulPing(t *testing.T) { test := newUDPTest(t) added := make(chan *node, 1) test.table.nodeAddedHook = func(n *node) { added <- n } defer test.close() // The remote side sends a ping packet to initiate the exchange. - go test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) + go test.packetIn(nil, &pingV4{From: testRemote, To: testLocalAnnounced, Version: 4, Expiration: futureExp}) - // the ping is replied to. - test.waitPacketOut(func(p *pong) { + // The ping is replied to. + test.waitPacketOut(func(p *pongV4, to *net.UDPAddr, hash []byte) { pinghash := test.sent[0][:macSize] if !bytes.Equal(p.ReplyTok, pinghash) { t.Errorf("got pong.ReplyTok %x, want %x", p.ReplyTok, pinghash) @@ -411,8 +426,8 @@ func TestUDP_successfulPing(t *testing.T) { } }) - // remote is unknown, the table pings back. - _, hash, _ := test.waitPacketOut(func(p *ping) error { + // Remote is unknown, the table pings back. + test.waitPacketOut(func(p *pingV4, to *net.UDPAddr, hash []byte) { if !reflect.DeepEqual(p.From, test.udp.ourEndpoint()) { t.Errorf("got ping.From %#v, want %#v", p.From, test.udp.ourEndpoint()) } @@ -425,11 +440,10 @@ func TestUDP_successfulPing(t *testing.T) { if !reflect.DeepEqual(p.To, wantTo) { t.Errorf("got ping.To %v, want %v", p.To, wantTo) } - return nil + test.packetIn(nil, &pongV4{ReplyTok: hash, Expiration: futureExp}) }) - test.packetIn(nil, pongPacket, &pong{ReplyTok: hash, Expiration: futureExp}) - // the node should be added to the table shortly after getting the + // The node should be added to the table shortly after getting the // pong packet. select { case n := <-added: @@ -440,7 +454,7 @@ func TestUDP_successfulPing(t *testing.T) { if !n.IP().Equal(test.remoteaddr.IP) { t.Errorf("node has wrong IP: got %v, want: %v", n.IP(), test.remoteaddr.IP) } - if int(n.UDP()) != test.remoteaddr.Port { + if n.UDP() != test.remoteaddr.Port { t.Errorf("node has wrong UDP port: got %v, want: %v", n.UDP(), test.remoteaddr.Port) } if n.TCP() != int(testRemote.TCP) { @@ -451,13 +465,52 @@ func TestUDP_successfulPing(t *testing.T) { } } +// This test checks that EIP-868 requests work. +func TestUDPv4_EIP868(t *testing.T) { + test := newUDPTest(t) + defer test.close() + + test.udp.localNode.Set(enr.WithEntry("foo", "bar")) + wantNode := test.udp.localNode.Node() + + // ENR requests aren't allowed before endpoint proof. + test.packetIn(errUnknownNode, &enrRequestV4{Expiration: futureExp}) + + // Perform endpoint proof and check for sequence number in packet tail. + test.packetIn(nil, &pingV4{Expiration: futureExp}) + test.waitPacketOut(func(p *pongV4, addr *net.UDPAddr, hash []byte) { + if seq := seqFromTail(p.Rest); seq != wantNode.Seq() { + t.Errorf("wrong sequence number in pong: %d, want %d", seq, wantNode.Seq()) + } + }) + test.waitPacketOut(func(p *pingV4, addr *net.UDPAddr, hash []byte) { + if seq := seqFromTail(p.Rest); seq != wantNode.Seq() { + t.Errorf("wrong sequence number in ping: %d, want %d", seq, wantNode.Seq()) + } + test.packetIn(nil, &pongV4{Expiration: futureExp, ReplyTok: hash}) + }) + + // Request should work now. + test.packetIn(nil, &enrRequestV4{Expiration: futureExp}) + test.waitPacketOut(func(p *enrResponseV4, addr *net.UDPAddr, hash []byte) { + n, err := enode.New(enode.ValidSchemes, &p.Record) + if err != nil { + t.Fatalf("invalid record: %v", err) + } + if !reflect.DeepEqual(n, wantNode) { + t.Fatalf("wrong node in enrResponse: %v", n) + } + }) +} + +// EIP-8 test vectors. var testPackets = []struct { input string wantPacket interface{} }{ { input: "71dbda3a79554728d4f94411e42ee1f8b0d561c10e1e5f5893367948c6a7d70bb87b235fa28a77070271b6c164a2dce8c7e13a5739b53b5e96f2e5acb0e458a02902f5965d55ecbeb2ebb6cabb8b2b232896a36b737666c55265ad0a68412f250001ea04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a355", - wantPacket: &ping{ + wantPacket: &pingV4{ Version: 4, From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, @@ -467,7 +520,7 @@ var testPackets = []struct { }, { input: "e9614ccfd9fc3e74360018522d30e1419a143407ffcce748de3e22116b7e8dc92ff74788c0b6663aaa3d67d641936511c8f8d6ad8698b820a7cf9e1be7155e9a241f556658c55428ec0563514365799a4be2be5a685a80971ddcfa80cb422cdd0101ec04cb847f000001820cfa8215a8d790000000000000000000000000000000018208ae820d058443b9a3550102", - wantPacket: &ping{ + wantPacket: &pingV4{ Version: 4, From: rpcEndpoint{net.ParseIP("127.0.0.1").To4(), 3322, 5544}, To: rpcEndpoint{net.ParseIP("::1"), 2222, 3333}, @@ -477,7 +530,7 @@ var testPackets = []struct { }, { input: "577be4349c4dd26768081f58de4c6f375a7a22f3f7adda654d1428637412c3d7fe917cadc56d4e5e7ffae1dbe3efffb9849feb71b262de37977e7c7a44e677295680e9e38ab26bee2fcbae207fba3ff3d74069a50b902a82c9903ed37cc993c50001f83e82022bd79020010db83c4d001500000000abcdef12820cfa8215a8d79020010db885a308d313198a2e037073488208ae82823a8443b9a355c5010203040531b9019afde696e582a78fa8d95ea13ce3297d4afb8ba6433e4154caa5ac6431af1b80ba76023fa4090c408f6b4bc3701562c031041d4702971d102c9ab7fa5eed4cd6bab8f7af956f7d565ee1917084a95398b6a21eac920fe3dd1345ec0a7ef39367ee69ddf092cbfe5b93e5e568ebc491983c09c76d922dc3", - wantPacket: &ping{ + wantPacket: &pingV4{ Version: 555, From: rpcEndpoint{net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), 3322, 5544}, To: rpcEndpoint{net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), 2222, 33338}, @@ -487,7 +540,7 @@ var testPackets = []struct { }, { input: "09b2428d83348d27cdf7064ad9024f526cebc19e4958f0fdad87c15eb598dd61d08423e0bf66b2069869e1724125f820d851c136684082774f870e614d95a2855d000f05d1648b2d5945470bc187c2d2216fbe870f43ed0909009882e176a46b0102f846d79020010db885a308d313198a2e037073488208ae82823aa0fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c9548443b9a355c6010203c2040506a0c969a58f6f9095004c0177a6b47f451530cab38966a25cca5cb58f055542124e", - wantPacket: &pong{ + wantPacket: &pongV4{ To: rpcEndpoint{net.ParseIP("2001:db8:85a3:8d3:1319:8a2e:370:7348"), 2222, 33338}, ReplyTok: common.Hex2Bytes("fbc914b16819237dcd8801d7e53f69e9719adecb3cc0e790c57e91ca4461c954"), Expiration: 1136239445, @@ -496,7 +549,7 @@ var testPackets = []struct { }, { input: "c7c44041b9f7c7e41934417ebac9a8e1a4c6298f74553f2fcfdcae6ed6fe53163eb3d2b52e39fe91831b8a927bf4fc222c3902202027e5e9eb812195f95d20061ef5cd31d502e47ecb61183f74a504fe04c51e73df81f25c4d506b26db4517490103f84eb840ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f8443b9a35582999983999999280dc62cc8255c73471e0a61da0c89acdc0e035e260add7fc0c04ad9ebf3919644c91cb247affc82b69bd2ca235c71eab8e49737c937a2c396", - wantPacket: &findnode{ + wantPacket: &findnodeV4{ Target: hexEncPubkey("ca634cae0d49acb401d8a4c6b6fe8c55b70d115bf400769cc1400f3258cd31387574077f301b421bc84df7266c44e9e6d569fc56be00812904767bf5ccd1fc7f"), Expiration: 1136239445, Rest: []rlp.RawValue{{0x82, 0x99, 0x99}, {0x83, 0x99, 0x99, 0x99}}, @@ -504,7 +557,7 @@ var testPackets = []struct { }, { input: "c679fc8fe0b8b12f06577f2e802d34f6fa257e6137a995f6f4cbfc9ee50ed3710faf6e66f932c4c8d81d64343f429651328758b47d3dbc02c4042f0fff6946a50f4a49037a72bb550f3a7872363a83e1b9ee6469856c24eb4ef80b7535bcf99c0004f9015bf90150f84d846321163782115c82115db8403155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32f84984010203040101b840312c55512422cf9b8a4097e9a6ad79402e87a15ae909a4bfefa22398f03d20951933beea1e4dfa6f968212385e829f04c2d314fc2d4e255e0d3bc08792b069dbf8599020010db83c4d001500000000abcdef12820d05820d05b84038643200b172dcfef857492156971f0e6aa2c538d8b74010f8e140811d53b98c765dd2d96126051913f44582e8c199ad7c6d6819e9a56483f637feaac9448aacf8599020010db885a308d313198a2e037073488203e78203e8b8408dcab8618c3253b558d459da53bd8fa68935a719aff8b811197101a4b2b47dd2d47295286fc00cc081bb542d760717d1bdd6bec2c37cd72eca367d6dd3b9df738443b9a355010203b525a138aa34383fec3d2719a0", - wantPacket: &neighbors{ + wantPacket: &neighborsV4{ Nodes: []rpcNode{ { ID: hexEncPubkey("3155e1427f85f10a5c9a7755877748041af1bcd8d474ec065eb33df57a97babf54bfd2103575fa829115d224c523596b401065a97f74010610fce76382c0bf32"), @@ -537,7 +590,7 @@ var testPackets = []struct { }, } -func TestForwardCompatibility(t *testing.T) { +func TestUDPv4_forwardCompatibility(t *testing.T) { testkey, _ := crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") wantNodeKey := encodePubkey(&testkey.PublicKey) @@ -546,7 +599,7 @@ func TestForwardCompatibility(t *testing.T) { if err != nil { t.Fatalf("invalid hex: %s", test.input) } - packet, nodekey, _, err := decodePacket(input) + packet, nodekey, _, err := decodeV4(input) if err != nil { t.Errorf("did not accept packet %s\n%v", test.input, err) continue @@ -610,6 +663,7 @@ func (c *dgramPipe) Close() error { close(c.closing) c.closed = true } + c.cond.Broadcast() return nil } @@ -617,14 +671,17 @@ func (c *dgramPipe) LocalAddr() net.Addr { return &net.UDPAddr{IP: testLocal.IP, Port: int(testLocal.UDP)} } -func (c *dgramPipe) waitPacketOut() dgram { +func (c *dgramPipe) receive() (dgram, bool) { c.mu.Lock() defer c.mu.Unlock() - for len(c.queue) == 0 { + for len(c.queue) == 0 && !c.closed { c.cond.Wait() } + if c.closed { + return dgram{}, false + } p := c.queue[0] copy(c.queue, c.queue[1:]) c.queue = c.queue[:len(c.queue)-1] - return p + return p, true } diff --git a/p2p/discv5/metrics.go b/p2p/discv5/metrics.go index cb11d7eacf07..e68d53c13c63 100644 --- a/p2p/discv5/metrics.go +++ b/p2p/discv5/metrics.go @@ -1,3 +1,19 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package discv5 import "github.com/ethereum/go-ethereum/metrics" diff --git a/p2p/discv5/node_test.go b/p2p/discv5/node_test.go index ce4ad9e4d48e..c231345db2e4 100644 --- a/p2p/discv5/node_test.go +++ b/p2p/discv5/node_test.go @@ -152,7 +152,7 @@ func TestParseNode(t *testing.T) { if err == nil { t.Errorf("test %q:\n got nil error, expected %#q", test.rawurl, test.wantError) continue - } else if err.Error() != test.wantError { + } else if !strings.Contains(err.Error(), test.wantError) { t.Errorf("test %q:\n got error %#q, expected %#q", test.rawurl, err.Error(), test.wantError) continue } diff --git a/p2p/discv5/sim_test.go b/p2p/discv5/sim_test.go index 543faecd4856..76379452a53c 100644 --- a/p2p/discv5/sim_test.go +++ b/p2p/discv5/sim_test.go @@ -50,7 +50,7 @@ func TestSimRandomResolve(t *testing.T) { if err := net.SetFallbackNodes([]*Node{bootnode.Self()}); err != nil { panic(err) } - fmt.Printf("launched @ %v: %x\n", time.Now(), net.Self().ID[:16]) + t.Logf("launched @ %v: %x\n", time.Now(), net.Self().ID[:16]) } }() diff --git a/p2p/dnsdisc/client.go b/p2p/dnsdisc/client.go new file mode 100644 index 000000000000..d4ed08ecb7b2 --- /dev/null +++ b/p2p/dnsdisc/client.go @@ -0,0 +1,260 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "bytes" + "context" + "fmt" + "math/rand" + "net" + "strings" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + lru "github.com/hashicorp/golang-lru" +) + +// Client discovers nodes by querying DNS servers. +type Client struct { + cfg Config + clock mclock.Clock + linkCache linkCache + trees map[string]*clientTree + + entries *lru.Cache +} + +// Config holds configuration options for the client. +type Config struct { + Timeout time.Duration // timeout used for DNS lookups (default 5s) + RecheckInterval time.Duration // time between tree root update checks (default 30min) + CacheLimit int // maximum number of cached records (default 1000) + ValidSchemes enr.IdentityScheme // acceptable ENR identity schemes (default enode.ValidSchemes) + Resolver Resolver // the DNS resolver to use (defaults to system DNS) + Logger log.Logger // destination of client log messages (defaults to root logger) +} + +// Resolver is a DNS resolver that can query TXT records. +type Resolver interface { + LookupTXT(ctx context.Context, domain string) ([]string, error) +} + +func (cfg Config) withDefaults() Config { + const ( + defaultTimeout = 5 * time.Second + defaultRecheck = 30 * time.Minute + defaultCache = 1000 + ) + if cfg.Timeout == 0 { + cfg.Timeout = defaultTimeout + } + if cfg.RecheckInterval == 0 { + cfg.RecheckInterval = defaultRecheck + } + if cfg.CacheLimit == 0 { + cfg.CacheLimit = defaultCache + } + if cfg.ValidSchemes == nil { + cfg.ValidSchemes = enode.ValidSchemes + } + if cfg.Resolver == nil { + cfg.Resolver = new(net.Resolver) + } + if cfg.Logger == nil { + cfg.Logger = log.Root() + } + return cfg +} + +// NewClient creates a client. +func NewClient(cfg Config, urls ...string) (*Client, error) { + c := &Client{ + cfg: cfg.withDefaults(), + clock: mclock.System{}, + trees: make(map[string]*clientTree), + } + var err error + if c.entries, err = lru.New(c.cfg.CacheLimit); err != nil { + return nil, err + } + for _, url := range urls { + if err := c.AddTree(url); err != nil { + return nil, err + } + } + return c, nil +} + +// SyncTree downloads the entire node tree at the given URL. This doesn't add the tree for +// later use, but any previously-synced entries are reused. +func (c *Client) SyncTree(url string) (*Tree, error) { + le, err := parseURL(url) + if err != nil { + return nil, fmt.Errorf("invalid enrtree URL: %v", err) + } + ct := newClientTree(c, le) + t := &Tree{entries: make(map[string]entry)} + if err := ct.syncAll(t.entries); err != nil { + return nil, err + } + t.root = ct.root + return t, nil +} + +// AddTree adds a enrtree:// URL to crawl. +func (c *Client) AddTree(url string) error { + le, err := parseURL(url) + if err != nil { + return fmt.Errorf("invalid enrtree URL: %v", err) + } + ct, err := c.ensureTree(le) + if err != nil { + return err + } + c.linkCache.add(ct) + return nil +} + +func (c *Client) ensureTree(le *linkEntry) (*clientTree, error) { + if tree, ok := c.trees[le.domain]; ok { + if !tree.matchPubkey(le.pubkey) { + return nil, fmt.Errorf("conflicting public keys for domain %q", le.domain) + } + return tree, nil + } + ct := newClientTree(c, le) + c.trees[le.domain] = ct + return ct, nil +} + +// RandomNode retrieves the next random node. +func (c *Client) RandomNode(ctx context.Context) *enode.Node { + for { + ct := c.randomTree() + if ct == nil { + return nil + } + n, err := ct.syncRandom(ctx) + if err != nil { + if err == ctx.Err() { + return nil // context canceled. + } + c.cfg.Logger.Debug("Error in DNS random node sync", "tree", ct.loc.domain, "err", err) + continue + } + if n != nil { + return n + } + } +} + +// randomTree returns a random tree. +func (c *Client) randomTree() *clientTree { + if !c.linkCache.valid() { + c.gcTrees() + } + limit := rand.Intn(len(c.trees)) + for _, ct := range c.trees { + if limit == 0 { + return ct + } + limit-- + } + return nil +} + +// gcTrees rebuilds the 'trees' map. +func (c *Client) gcTrees() { + trees := make(map[string]*clientTree) + for t := range c.linkCache.all() { + trees[t.loc.domain] = t + } + c.trees = trees +} + +// resolveRoot retrieves a root entry via DNS. +func (c *Client) resolveRoot(ctx context.Context, loc *linkEntry) (rootEntry, error) { + txts, err := c.cfg.Resolver.LookupTXT(ctx, loc.domain) + c.cfg.Logger.Trace("Updating DNS discovery root", "tree", loc.domain, "err", err) + if err != nil { + return rootEntry{}, err + } + for _, txt := range txts { + if strings.HasPrefix(txt, rootPrefix) { + return parseAndVerifyRoot(txt, loc) + } + } + return rootEntry{}, nameError{loc.domain, errNoRoot} +} + +func parseAndVerifyRoot(txt string, loc *linkEntry) (rootEntry, error) { + e, err := parseRoot(txt) + if err != nil { + return e, err + } + if !e.verifySignature(loc.pubkey) { + return e, entryError{typ: "root", err: errInvalidSig} + } + return e, nil +} + +// resolveEntry retrieves an entry from the cache or fetches it from the network +// if it isn't cached. +func (c *Client) resolveEntry(ctx context.Context, domain, hash string) (entry, error) { + cacheKey := truncateHash(hash) + if e, ok := c.entries.Get(cacheKey); ok { + return e.(entry), nil + } + e, err := c.doResolveEntry(ctx, domain, hash) + if err != nil { + return nil, err + } + c.entries.Add(cacheKey, e) + return e, nil +} + +// doResolveEntry fetches an entry via DNS. +func (c *Client) doResolveEntry(ctx context.Context, domain, hash string) (entry, error) { + wantHash, err := b32format.DecodeString(hash) + if err != nil { + return nil, fmt.Errorf("invalid base32 hash") + } + name := hash + "." + domain + txts, err := c.cfg.Resolver.LookupTXT(ctx, hash+"."+domain) + c.cfg.Logger.Trace("DNS discovery lookup", "name", name, "err", err) + if err != nil { + return nil, err + } + for _, txt := range txts { + e, err := parseEntry(txt, c.cfg.ValidSchemes) + if err == errUnknownEntry { + continue + } + if !bytes.HasPrefix(crypto.Keccak256([]byte(txt)), wantHash) { + err = nameError{name, errHashMismatch} + } else if err != nil { + err = nameError{name, err} + } + return e, err + } + return nil, nameError{name, errNoEntry} +} diff --git a/p2p/dnsdisc/client_test.go b/p2p/dnsdisc/client_test.go new file mode 100644 index 000000000000..7e3a0f4826a5 --- /dev/null +++ b/p2p/dnsdisc/client_test.go @@ -0,0 +1,306 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "context" + "crypto/ecdsa" + "math/rand" + "reflect" + "testing" + "time" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/testlog" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" +) + +const ( + signingKeySeed = 0x111111 + nodesSeed1 = 0x2945237 + nodesSeed2 = 0x4567299 +) + +func TestClientSyncTree(t *testing.T) { + r := mapResolver{ + "3CA2MBMUQ55ZCT74YEEQLANJDI.n": "enr=-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI=", + "53HBTPGGZ4I76UEPCNQGZWIPTQ.n": "enr=-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA=", + "BG7SVUBUAJ3UAWD2ATEBLMRNEE.n": "enrtree=53HBTPGGZ4I76UEPCNQGZWIPTQ,3CA2MBMUQ55ZCT74YEEQLANJDI,HNHR6UTVZF5TJKK3FV27ZI76P4", + "HNHR6UTVZF5TJKK3FV27ZI76P4.n": "enr=-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o=", + "JGUFMSAGI7KZYB3P7IZW4S5Y3A.n": "enrtree-link=AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", + "n": "enrtree-root=v1 e=BG7SVUBUAJ3UAWD2ATEBLMRNEE l=JGUFMSAGI7KZYB3P7IZW4S5Y3A seq=1 sig=gacuU0nTy9duIdu1IFDyF5Lv9CFHqHiNcj91n0frw70tZo3tZZsCVkE3j1ILYyVOHRLWGBmawo_SEkThZ9PgcQE=", + } + var ( + wantNodes = testNodes(0x29452, 3) + wantLinks = []string{"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org"} + wantSeq = uint(1) + ) + + c, _ := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) + stree, err := c.SyncTree("enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@n") + if err != nil { + t.Fatal("sync error:", err) + } + if !reflect.DeepEqual(sortByID(stree.Nodes()), sortByID(wantNodes)) { + t.Errorf("wrong nodes in synced tree:\nhave %v\nwant %v", spew.Sdump(stree.Nodes()), spew.Sdump(wantNodes)) + } + if !reflect.DeepEqual(stree.Links(), wantLinks) { + t.Errorf("wrong links in synced tree: %v", stree.Links()) + } + if stree.Seq() != wantSeq { + t.Errorf("synced tree has wrong seq: %d", stree.Seq()) + } + if len(c.trees) > 0 { + t.Errorf("tree from SyncTree added to client") + } +} + +// In this test, syncing the tree fails because it contains an invalid ENR entry. +func TestClientSyncTreeBadNode(t *testing.T) { + r := mapResolver{ + "n": "enrtree-root=v1 e=ZFJZDQKSOMJRYYQSZKJZC54HCF l=JGUFMSAGI7KZYB3P7IZW4S5Y3A seq=3 sig=WEy8JTZ2dHmXM2qeBZ7D2ECK7SGbnurl1ge_S_5GQBAqnADk0gLTcg8Lm5QNqLHZjJKGAb443p996idlMcBqEQA=", + "JGUFMSAGI7KZYB3P7IZW4S5Y3A.n": "enrtree-link=AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org", + "ZFJZDQKSOMJRYYQSZKJZC54HCF.n": "enr=gggggggggggggg=", + } + + c, _ := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) + _, err := c.SyncTree("enrtree://APFGGTFOBVE2ZNAB3CSMNNX6RRK3ODIRLP2AA5U4YFAA6MSYZUYTQ@n") + wantErr := nameError{name: "ZFJZDQKSOMJRYYQSZKJZC54HCF.n", err: entryError{typ: "enr", err: errInvalidENR}} + if err != wantErr { + t.Fatalf("expected sync error %q, got %q", wantErr, err) + } +} + +// This test checks that RandomNode hits all entries. +func TestClientRandomNode(t *testing.T) { + nodes := testNodes(nodesSeed1, 30) + tree, url := makeTestTree("n", nodes, nil) + r := mapResolver(tree.ToTXT("n")) + c, _ := NewClient(Config{Resolver: r, Logger: testlog.Logger(t, log.LvlTrace)}) + if err := c.AddTree(url); err != nil { + t.Fatal(err) + } + + checkRandomNode(t, c, nodes) +} + +// This test checks that RandomNode traverses linked trees as well as explicitly added trees. +func TestClientRandomNodeLinks(t *testing.T) { + nodes := testNodes(nodesSeed1, 40) + tree1, url1 := makeTestTree("t1", nodes[:10], nil) + tree2, url2 := makeTestTree("t2", nodes[10:], []string{url1}) + cfg := Config{ + Resolver: newMapResolver(tree1.ToTXT("t1"), tree2.ToTXT("t2")), + Logger: testlog.Logger(t, log.LvlTrace), + } + c, _ := NewClient(cfg) + if err := c.AddTree(url2); err != nil { + t.Fatal(err) + } + + checkRandomNode(t, c, nodes) +} + +// This test verifies that RandomNode re-checks the root of the tree to catch +// updates to nodes. +func TestClientRandomNodeUpdates(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 30) + resolver = newMapResolver() + cfg = Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + } + c, _ = NewClient(cfg) + ) + c.clock = clock + tree1, url := makeTestTree("n", nodes[:25], nil) + + // Sync the original tree. + resolver.add(tree1.ToTXT("n")) + c.AddTree(url) + checkRandomNode(t, c, nodes[:25]) + + // Update some nodes and ensure RandomNode returns the new nodes as well. + keys := testKeys(nodesSeed1, len(nodes)) + for i, n := range nodes[:len(nodes)/2] { + r := n.Record() + r.Set(enr.IP{127, 0, 0, 1}) + r.SetSeq(55) + enode.SignV4(r, keys[i]) + n2, _ := enode.New(enode.ValidSchemes, r) + nodes[i] = n2 + } + tree2, _ := makeTestTree("n", nodes, nil) + clock.Run(cfg.RecheckInterval + 1*time.Second) + resolver.clear() + resolver.add(tree2.ToTXT("n")) + checkRandomNode(t, c, nodes) +} + +// This test verifies that RandomNode re-checks the root of the tree to catch +// updates to links. +func TestClientRandomNodeLinkUpdates(t *testing.T) { + var ( + clock = new(mclock.Simulated) + nodes = testNodes(nodesSeed1, 30) + resolver = newMapResolver() + cfg = Config{ + Resolver: resolver, + Logger: testlog.Logger(t, log.LvlTrace), + RecheckInterval: 20 * time.Minute, + } + c, _ = NewClient(cfg) + ) + c.clock = clock + tree3, url3 := makeTestTree("t3", nodes[20:30], nil) + tree2, url2 := makeTestTree("t2", nodes[10:20], nil) + tree1, url1 := makeTestTree("t1", nodes[0:10], []string{url2}) + resolver.add(tree1.ToTXT("t1")) + resolver.add(tree2.ToTXT("t2")) + resolver.add(tree3.ToTXT("t3")) + + // Sync tree1 using RandomNode. + c.AddTree(url1) + checkRandomNode(t, c, nodes[:20]) + + // Add link to tree3, remove link to tree2. + tree1, _ = makeTestTree("t1", nodes[:10], []string{url3}) + resolver.add(tree1.ToTXT("t1")) + clock.Run(cfg.RecheckInterval + 1*time.Second) + t.Log("tree1 updated") + + var wantNodes []*enode.Node + wantNodes = append(wantNodes, tree1.Nodes()...) + wantNodes = append(wantNodes, tree3.Nodes()...) + checkRandomNode(t, c, wantNodes) + + // Check that linked trees are GCed when they're no longer referenced. + if len(c.trees) != 2 { + t.Errorf("client knows %d trees, want 2", len(c.trees)) + } +} + +func checkRandomNode(t *testing.T, c *Client, wantNodes []*enode.Node) { + t.Helper() + + var ( + want = make(map[enode.ID]*enode.Node) + maxCalls = len(wantNodes) * 2 + calls = 0 + ctx = context.Background() + ) + for _, n := range wantNodes { + want[n.ID()] = n + } + for ; len(want) > 0 && calls < maxCalls; calls++ { + n := c.RandomNode(ctx) + if n == nil { + t.Fatalf("RandomNode returned nil (call %d)", calls) + } + delete(want, n.ID()) + } + t.Logf("checkRandomNode called RandomNode %d times to find %d nodes", calls, len(wantNodes)) + for _, n := range want { + t.Errorf("RandomNode didn't discover node %v", n.ID()) + } +} + +func makeTestTree(domain string, nodes []*enode.Node, links []string) (*Tree, string) { + tree, err := MakeTree(1, nodes, links) + if err != nil { + panic(err) + } + url, err := tree.Sign(testKey(signingKeySeed), domain) + if err != nil { + panic(err) + } + return tree, url +} + +// testKeys creates deterministic private keys for testing. +func testKeys(seed int64, n int) []*ecdsa.PrivateKey { + rand := rand.New(rand.NewSource(seed)) + keys := make([]*ecdsa.PrivateKey, n) + for i := 0; i < n; i++ { + key, err := ecdsa.GenerateKey(crypto.S256(), rand) + if err != nil { + panic("can't generate key: " + err.Error()) + } + keys[i] = key + } + return keys +} + +func testKey(seed int64) *ecdsa.PrivateKey { + return testKeys(seed, 1)[0] +} + +func testNodes(seed int64, n int) []*enode.Node { + keys := testKeys(seed, n) + nodes := make([]*enode.Node, n) + for i, key := range keys { + record := new(enr.Record) + record.SetSeq(uint64(i)) + enode.SignV4(record, key) + n, err := enode.New(enode.ValidSchemes, record) + if err != nil { + panic(err) + } + nodes[i] = n + } + return nodes +} + +func testNode(seed int64) *enode.Node { + return testNodes(seed, 1)[0] +} + +type mapResolver map[string]string + +func newMapResolver(maps ...map[string]string) mapResolver { + mr := make(mapResolver) + for _, m := range maps { + mr.add(m) + } + return mr +} + +func (mr mapResolver) clear() { + for k := range mr { + delete(mr, k) + } +} + +func (mr mapResolver) add(m map[string]string) { + for k, v := range m { + mr[k] = v + } +} + +func (mr mapResolver) LookupTXT(ctx context.Context, name string) ([]string, error) { + if record, ok := mr[name]; ok { + return []string{record}, nil + } + return nil, nil +} diff --git a/swarm/pss/protocol_none.go b/p2p/dnsdisc/doc.go similarity index 90% rename from swarm/pss/protocol_none.go rename to p2p/dnsdisc/doc.go index c92be3f902e7..227467d084b5 100644 --- a/swarm/pss/protocol_none.go +++ b/p2p/dnsdisc/doc.go @@ -14,10 +14,5 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build nopssprotocol - -package pss - -const ( - IsActiveProtocol = false -) +// Package dnsdisc implements node discovery via DNS (EIP-1459). +package dnsdisc diff --git a/p2p/dnsdisc/error.go b/p2p/dnsdisc/error.go new file mode 100644 index 000000000000..e0998c7350f7 --- /dev/null +++ b/p2p/dnsdisc/error.go @@ -0,0 +1,63 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "errors" + "fmt" +) + +// Entry parse errors. +var ( + errUnknownEntry = errors.New("unknown entry type") + errNoPubkey = errors.New("missing public key") + errBadPubkey = errors.New("invalid public key") + errInvalidENR = errors.New("invalid node record") + errInvalidChild = errors.New("invalid child hash") + errInvalidSig = errors.New("invalid base64 signature") + errSyntax = errors.New("invalid syntax") +) + +// Resolver/sync errors +var ( + errNoRoot = errors.New("no valid root found") + errNoEntry = errors.New("no valid tree entry found") + errHashMismatch = errors.New("hash mismatch") + errENRInLinkTree = errors.New("enr entry in link tree") + errLinkInENRTree = errors.New("link entry in ENR tree") +) + +type nameError struct { + name string + err error +} + +func (err nameError) Error() string { + if ee, ok := err.err.(entryError); ok { + return fmt.Sprintf("invalid %s entry at %s: %v", ee.typ, err.name, ee.err) + } + return err.name + ": " + err.err.Error() +} + +type entryError struct { + typ string + err error +} + +func (err entryError) Error() string { + return fmt.Sprintf("invalid %s entry: %v", err.typ, err.err) +} diff --git a/p2p/dnsdisc/sync.go b/p2p/dnsdisc/sync.go new file mode 100644 index 000000000000..bd5c8d023f15 --- /dev/null +++ b/p2p/dnsdisc/sync.go @@ -0,0 +1,277 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "context" + "crypto/ecdsa" + "math/rand" + "time" + + "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +// clientTree is a full tree being synced. +type clientTree struct { + c *Client + loc *linkEntry + root *rootEntry + lastRootCheck mclock.AbsTime // last revalidation of root + enrs *subtreeSync + links *subtreeSync + linkCache linkCache +} + +func newClientTree(c *Client, loc *linkEntry) *clientTree { + ct := &clientTree{c: c, loc: loc} + ct.linkCache.self = ct + return ct +} + +func (ct *clientTree) matchPubkey(key *ecdsa.PublicKey) bool { + return keysEqual(ct.loc.pubkey, key) +} + +func keysEqual(k1, k2 *ecdsa.PublicKey) bool { + return k1.Curve == k2.Curve && k1.X.Cmp(k2.X) == 0 && k1.Y.Cmp(k2.Y) == 0 +} + +// syncAll retrieves all entries of the tree. +func (ct *clientTree) syncAll(dest map[string]entry) error { + if err := ct.updateRoot(); err != nil { + return err + } + if err := ct.links.resolveAll(dest); err != nil { + return err + } + if err := ct.enrs.resolveAll(dest); err != nil { + return err + } + return nil +} + +// syncRandom retrieves a single entry of the tree. The Node return value +// is non-nil if the entry was a node. +func (ct *clientTree) syncRandom(ctx context.Context) (*enode.Node, error) { + if ct.rootUpdateDue() { + if err := ct.updateRoot(); err != nil { + return nil, err + } + } + // Link tree sync has priority, run it to completion before syncing ENRs. + if !ct.links.done() { + err := ct.syncNextLink(ctx) + return nil, err + } + + // Sync next random entry in ENR tree. Once every node has been visited, we simply + // start over. This is fine because entries are cached. + if ct.enrs.done() { + ct.enrs = newSubtreeSync(ct.c, ct.loc, ct.root.eroot, false) + } + return ct.syncNextRandomENR(ctx) +} + +func (ct *clientTree) syncNextLink(ctx context.Context) error { + hash := ct.links.missing[0] + e, err := ct.links.resolveNext(ctx, hash) + if err != nil { + return err + } + ct.links.missing = ct.links.missing[1:] + + if le, ok := e.(*linkEntry); ok { + lt, err := ct.c.ensureTree(le) + if err != nil { + return err + } + ct.linkCache.add(lt) + } + return nil +} + +func (ct *clientTree) syncNextRandomENR(ctx context.Context) (*enode.Node, error) { + index := rand.Intn(len(ct.enrs.missing)) + hash := ct.enrs.missing[index] + e, err := ct.enrs.resolveNext(ctx, hash) + if err != nil { + return nil, err + } + ct.enrs.missing = removeHash(ct.enrs.missing, index) + if ee, ok := e.(*enrEntry); ok { + return ee.node, nil + } + return nil, nil +} + +func (ct *clientTree) String() string { + return ct.loc.url() +} + +// removeHash removes the element at index from h. +func removeHash(h []string, index int) []string { + if len(h) == 1 { + return nil + } + last := len(h) - 1 + if index < last { + h[index] = h[last] + h[last] = "" + } + return h[:last] +} + +// updateRoot ensures that the given tree has an up-to-date root. +func (ct *clientTree) updateRoot() error { + ct.lastRootCheck = ct.c.clock.Now() + ctx, cancel := context.WithTimeout(context.Background(), ct.c.cfg.Timeout) + defer cancel() + root, err := ct.c.resolveRoot(ctx, ct.loc) + if err != nil { + return err + } + ct.root = &root + + // Invalidate subtrees if changed. + if ct.links == nil || root.lroot != ct.links.root { + ct.links = newSubtreeSync(ct.c, ct.loc, root.lroot, true) + ct.linkCache.reset() + } + if ct.enrs == nil || root.eroot != ct.enrs.root { + ct.enrs = newSubtreeSync(ct.c, ct.loc, root.eroot, false) + } + return nil +} + +// rootUpdateDue returns true when a root update is needed. +func (ct *clientTree) rootUpdateDue() bool { + return ct.root == nil || time.Duration(ct.c.clock.Now()-ct.lastRootCheck) > ct.c.cfg.RecheckInterval +} + +// subtreeSync is the sync of an ENR or link subtree. +type subtreeSync struct { + c *Client + loc *linkEntry + root string + missing []string // missing tree node hashes + link bool // true if this sync is for the link tree +} + +func newSubtreeSync(c *Client, loc *linkEntry, root string, link bool) *subtreeSync { + return &subtreeSync{c, loc, root, []string{root}, link} +} + +func (ts *subtreeSync) done() bool { + return len(ts.missing) == 0 +} + +func (ts *subtreeSync) resolveAll(dest map[string]entry) error { + for !ts.done() { + hash := ts.missing[0] + ctx, cancel := context.WithTimeout(context.Background(), ts.c.cfg.Timeout) + e, err := ts.resolveNext(ctx, hash) + cancel() + if err != nil { + return err + } + dest[hash] = e + ts.missing = ts.missing[1:] + } + return nil +} + +func (ts *subtreeSync) resolveNext(ctx context.Context, hash string) (entry, error) { + e, err := ts.c.resolveEntry(ctx, ts.loc.domain, hash) + if err != nil { + return nil, err + } + switch e := e.(type) { + case *enrEntry: + if ts.link { + return nil, errENRInLinkTree + } + case *linkEntry: + if !ts.link { + return nil, errLinkInENRTree + } + case *subtreeEntry: + ts.missing = append(ts.missing, e.children...) + } + return e, nil +} + +// linkCache tracks the links of a tree. +type linkCache struct { + self *clientTree + directM map[*clientTree]struct{} // direct links + allM map[*clientTree]struct{} // direct & transitive links +} + +// reset clears the cache. +func (lc *linkCache) reset() { + lc.directM = nil + lc.allM = nil +} + +// add adds a direct link to the cache. +func (lc *linkCache) add(ct *clientTree) { + if lc.directM == nil { + lc.directM = make(map[*clientTree]struct{}) + } + if _, ok := lc.directM[ct]; !ok { + lc.invalidate() + } + lc.directM[ct] = struct{}{} +} + +// invalidate resets the cache of transitive links. +func (lc *linkCache) invalidate() { + lc.allM = nil +} + +// valid returns true when the cache of transitive links is up-to-date. +func (lc *linkCache) valid() bool { + // Re-check validity of child caches to catch updates. + for ct := range lc.allM { + if ct != lc.self && !ct.linkCache.valid() { + lc.allM = nil + break + } + } + return lc.allM != nil +} + +// all returns all trees reachable through the cache. +func (lc *linkCache) all() map[*clientTree]struct{} { + if lc.valid() { + return lc.allM + } + // Remake lc.allM it by taking the union of all() across children. + m := make(map[*clientTree]struct{}) + if lc.self != nil { + m[lc.self] = struct{}{} + } + for ct := range lc.directM { + m[ct] = struct{}{} + for lt := range ct.linkCache.all() { + m[lt] = struct{}{} + } + } + lc.allM = m + return m +} diff --git a/p2p/dnsdisc/tree.go b/p2p/dnsdisc/tree.go new file mode 100644 index 000000000000..855d4968c518 --- /dev/null +++ b/p2p/dnsdisc/tree.go @@ -0,0 +1,384 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "bytes" + "crypto/ecdsa" + "encoding/base32" + "encoding/base64" + "fmt" + "io" + "sort" + "strings" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" + "golang.org/x/crypto/sha3" +) + +// Tree is a merkle tree of node records. +type Tree struct { + root *rootEntry + entries map[string]entry +} + +// Sign signs the tree with the given private key and sets the sequence number. +func (t *Tree) Sign(key *ecdsa.PrivateKey, domain string) (url string, err error) { + root := *t.root + sig, err := crypto.Sign(root.sigHash(), key) + if err != nil { + return "", err + } + root.sig = sig + t.root = &root + link := &linkEntry{domain, &key.PublicKey} + return link.url(), nil +} + +// SetSignature verifies the given signature and assigns it as the tree's current +// signature if valid. +func (t *Tree) SetSignature(pubkey *ecdsa.PublicKey, signature string) error { + sig, err := b64format.DecodeString(signature) + if err != nil || len(sig) != crypto.SignatureLength { + return errInvalidSig + } + root := *t.root + root.sig = sig + if !root.verifySignature(pubkey) { + return errInvalidSig + } + t.root = &root + return nil +} + +// Seq returns the sequence number of the tree. +func (t *Tree) Seq() uint { + return t.root.seq +} + +// Signature returns the signature of the tree. +func (t *Tree) Signature() string { + return b64format.EncodeToString(t.root.sig) +} + +// ToTXT returns all DNS TXT records required for the tree. +func (t *Tree) ToTXT(domain string) map[string]string { + records := map[string]string{domain: t.root.String()} + for _, e := range t.entries { + sd := subdomain(e) + if domain != "" { + sd = sd + "." + domain + } + records[sd] = e.String() + } + return records +} + +// Links returns all links contained in the tree. +func (t *Tree) Links() []string { + var links []string + for _, e := range t.entries { + if le, ok := e.(*linkEntry); ok { + links = append(links, le.url()) + } + } + return links +} + +// Nodes returns all nodes contained in the tree. +func (t *Tree) Nodes() []*enode.Node { + var nodes []*enode.Node + for _, e := range t.entries { + if ee, ok := e.(*enrEntry); ok { + nodes = append(nodes, ee.node) + } + } + return nodes +} + +const ( + hashAbbrev = 16 + maxChildren = 300 / (hashAbbrev * (13 / 8)) + minHashLength = 12 + rootPrefix = "enrtree-root=v1" +) + +// MakeTree creates a tree containing the given nodes and links. +func MakeTree(seq uint, nodes []*enode.Node, links []string) (*Tree, error) { + // Sort records by ID and ensure all nodes have a valid record. + records := make([]*enode.Node, len(nodes)) + copy(records, nodes) + sortByID(records) + for _, n := range records { + if len(n.Record().Signature()) == 0 { + return nil, fmt.Errorf("can't add node %v: unsigned node record", n.ID()) + } + } + + // Create the leaf list. + enrEntries := make([]entry, len(records)) + for i, r := range records { + enrEntries[i] = &enrEntry{r} + } + linkEntries := make([]entry, len(links)) + for i, l := range links { + le, err := parseURL(l) + if err != nil { + return nil, err + } + linkEntries[i] = le + } + + // Create intermediate nodes. + t := &Tree{entries: make(map[string]entry)} + eroot := t.build(enrEntries) + t.entries[subdomain(eroot)] = eroot + lroot := t.build(linkEntries) + t.entries[subdomain(lroot)] = lroot + t.root = &rootEntry{seq: seq, eroot: subdomain(eroot), lroot: subdomain(lroot)} + return t, nil +} + +func (t *Tree) build(entries []entry) entry { + if len(entries) == 1 { + return entries[0] + } + if len(entries) <= maxChildren { + hashes := make([]string, len(entries)) + for i, e := range entries { + hashes[i] = subdomain(e) + t.entries[hashes[i]] = e + } + return &subtreeEntry{hashes} + } + var subtrees []entry + for len(entries) > 0 { + n := maxChildren + if len(entries) < n { + n = len(entries) + } + sub := t.build(entries[:n]) + entries = entries[n:] + subtrees = append(subtrees, sub) + t.entries[subdomain(sub)] = sub + } + return t.build(subtrees) +} + +func sortByID(nodes []*enode.Node) []*enode.Node { + sort.Slice(nodes, func(i, j int) bool { + return bytes.Compare(nodes[i].ID().Bytes(), nodes[j].ID().Bytes()) < 0 + }) + return nodes +} + +// Entry Types + +type entry interface { + fmt.Stringer +} + +type ( + rootEntry struct { + eroot string + lroot string + seq uint + sig []byte + } + subtreeEntry struct { + children []string + } + enrEntry struct { + node *enode.Node + } + linkEntry struct { + domain string + pubkey *ecdsa.PublicKey + } +) + +// Entry Encoding + +var ( + b32format = base32.StdEncoding.WithPadding(base32.NoPadding) + b64format = base64.URLEncoding +) + +func subdomain(e entry) string { + h := sha3.NewLegacyKeccak256() + io.WriteString(h, e.String()) + return b32format.EncodeToString(h.Sum(nil)[:16]) +} + +func (e *rootEntry) String() string { + return fmt.Sprintf(rootPrefix+" e=%s l=%s seq=%d sig=%s", e.eroot, e.lroot, e.seq, b64format.EncodeToString(e.sig)) +} + +func (e *rootEntry) sigHash() []byte { + h := sha3.NewLegacyKeccak256() + fmt.Fprintf(h, rootPrefix+" e=%s l=%s seq=%d", e.eroot, e.lroot, e.seq) + return h.Sum(nil) +} + +func (e *rootEntry) verifySignature(pubkey *ecdsa.PublicKey) bool { + sig := e.sig[:crypto.RecoveryIDOffset] // remove recovery id + return crypto.VerifySignature(crypto.FromECDSAPub(pubkey), e.sigHash(), sig) +} + +func (e *subtreeEntry) String() string { + return "enrtree=" + strings.Join(e.children, ",") +} + +func (e *enrEntry) String() string { + enc, _ := rlp.EncodeToBytes(e.node.Record()) + return "enr=" + b64format.EncodeToString(enc) +} + +func (e *linkEntry) String() string { + return "enrtree-link=" + e.link() +} + +func (e *linkEntry) url() string { + return "enrtree://" + e.link() +} + +func (e *linkEntry) link() string { + return fmt.Sprintf("%s@%s", b32format.EncodeToString(crypto.CompressPubkey(e.pubkey)), e.domain) +} + +// Entry Parsing + +func parseEntry(e string, validSchemes enr.IdentityScheme) (entry, error) { + switch { + case strings.HasPrefix(e, "enrtree-link="): + return parseLink(e[13:]) + case strings.HasPrefix(e, "enrtree="): + return parseSubtree(e[8:]) + case strings.HasPrefix(e, "enr="): + return parseENR(e[4:], validSchemes) + default: + return nil, errUnknownEntry + } +} + +func parseRoot(e string) (rootEntry, error) { + var eroot, lroot, sig string + var seq uint + if _, err := fmt.Sscanf(e, rootPrefix+" e=%s l=%s seq=%d sig=%s", &eroot, &lroot, &seq, &sig); err != nil { + return rootEntry{}, entryError{"root", errSyntax} + } + if !isValidHash(eroot) || !isValidHash(lroot) { + return rootEntry{}, entryError{"root", errInvalidChild} + } + sigb, err := b64format.DecodeString(sig) + if err != nil || len(sigb) != crypto.SignatureLength { + return rootEntry{}, entryError{"root", errInvalidSig} + } + return rootEntry{eroot, lroot, seq, sigb}, nil +} + +func parseLink(e string) (entry, error) { + pos := strings.IndexByte(e, '@') + if pos == -1 { + return nil, entryError{"link", errNoPubkey} + } + keystring, domain := e[:pos], e[pos+1:] + keybytes, err := b32format.DecodeString(keystring) + if err != nil { + return nil, entryError{"link", errBadPubkey} + } + key, err := crypto.DecompressPubkey(keybytes) + if err != nil { + return nil, entryError{"link", errBadPubkey} + } + return &linkEntry{domain, key}, nil +} + +func parseSubtree(e string) (entry, error) { + if e == "" { + return &subtreeEntry{}, nil // empty entry is OK + } + hashes := make([]string, 0, strings.Count(e, ",")) + for _, c := range strings.Split(e, ",") { + if !isValidHash(c) { + return nil, entryError{"subtree", errInvalidChild} + } + hashes = append(hashes, c) + } + return &subtreeEntry{hashes}, nil +} + +func parseENR(e string, validSchemes enr.IdentityScheme) (entry, error) { + enc, err := b64format.DecodeString(e) + if err != nil { + return nil, entryError{"enr", errInvalidENR} + } + var rec enr.Record + if err := rlp.DecodeBytes(enc, &rec); err != nil { + return nil, entryError{"enr", err} + } + n, err := enode.New(validSchemes, &rec) + if err != nil { + return nil, entryError{"enr", err} + } + return &enrEntry{n}, nil +} + +func isValidHash(s string) bool { + dlen := b32format.DecodedLen(len(s)) + if dlen < minHashLength || dlen > 32 || strings.ContainsAny(s, "\n\r") { + return false + } + buf := make([]byte, 32) + _, err := b32format.Decode(buf, []byte(s)) + return err == nil +} + +// truncateHash truncates the given base32 hash string to the minimum acceptable length. +func truncateHash(hash string) string { + maxLen := b32format.EncodedLen(minHashLength) + if len(hash) < maxLen { + panic(fmt.Errorf("dnsdisc: hash %q is too short", hash)) + } + return hash[:maxLen] +} + +// URL encoding + +// ParseURL parses an enrtree:// URL and returns its components. +func ParseURL(url string) (domain string, pubkey *ecdsa.PublicKey, err error) { + le, err := parseURL(url) + if err != nil { + return "", nil, err + } + return le.domain, le.pubkey, nil +} + +func parseURL(url string) (*linkEntry, error) { + const scheme = "enrtree://" + if !strings.HasPrefix(url, scheme) { + return nil, fmt.Errorf("wrong/missing scheme 'enrtree' in URL") + } + le, err := parseLink(url[len(scheme):]) + if err != nil { + return nil, err.(entryError).err + } + return le.(*linkEntry), nil +} diff --git a/p2p/dnsdisc/tree_test.go b/p2p/dnsdisc/tree_test.go new file mode 100644 index 000000000000..e2fe962452e0 --- /dev/null +++ b/p2p/dnsdisc/tree_test.go @@ -0,0 +1,144 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package dnsdisc + +import ( + "reflect" + "testing" + + "github.com/davecgh/go-spew/spew" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/p2p/enode" +) + +func TestParseRoot(t *testing.T) { + tests := []struct { + input string + e rootEntry + err error + }{ + { + input: "enrtree-root=v1 e=TO4Q75OQ2N7DX4EOOR7X66A6OM seq=3 sig=N-YY6UB9xD0hFx1Gmnt7v0RfSxch5tKyry2SRDoLx7B4GfPXagwLxQqyf7gAMvApFn_ORwZQekMWa_pXrcGCtw=", + err: entryError{"root", errSyntax}, + }, + { + input: "enrtree-root=v1 e=TO4Q75OQ2N7DX4EOOR7X66A6OM l=TO4Q75OQ2N7DX4EOOR7X66A6OM seq=3 sig=N-YY6UB9xD0hFx1Gmnt7v0RfSxch5tKyry2SRDoLx7B4GfPXagwLxQqyf7gAMvApFn_ORwZQekMWa_pXrcGCtw=", + err: entryError{"root", errInvalidSig}, + }, + { + input: "enrtree-root=v1 e=QFT4PBCRX4XQCV3VUYJ6BTCEPU l=JGUFMSAGI7KZYB3P7IZW4S5Y3A seq=3 sig=3FmXuVwpa8Y7OstZTx9PIb1mt8FrW7VpDOFv4AaGCsZ2EIHmhraWhe4NxYhQDlw5MjeFXYMbJjsPeKlHzmJREQE=", + e: rootEntry{ + eroot: "QFT4PBCRX4XQCV3VUYJ6BTCEPU", + lroot: "JGUFMSAGI7KZYB3P7IZW4S5Y3A", + seq: 3, + sig: hexutil.MustDecode("0xdc5997b95c296bc63b3acb594f1f4f21bd66b7c16b5bb5690ce16fe006860ac6761081e686b69685ee0dc588500e5c393237855d831b263b0f78a947ce62511101"), + }, + }, + } + for i, test := range tests { + e, err := parseRoot(test.input) + if !reflect.DeepEqual(e, test.e) { + t.Errorf("test %d: wrong entry %s, want %s", i, spew.Sdump(e), spew.Sdump(test.e)) + } + if err != test.err { + t.Errorf("test %d: wrong error %q, want %q", i, err, test.err) + } + } +} + +func TestParseEntry(t *testing.T) { + testkey := testKey(signingKeySeed) + tests := []struct { + input string + e entry + err error + }{ + // Subtrees: + { + input: "enrtree=1,2", + err: entryError{"subtree", errInvalidChild}, + }, + { + input: "enrtree=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + err: entryError{"subtree", errInvalidChild}, + }, + { + input: "enrtree=", + e: &subtreeEntry{}, + }, + { + input: "enrtree=AAAAAAAAAAAAAAAAAAAA", + e: &subtreeEntry{[]string{"AAAAAAAAAAAAAAAAAAAA"}}, + }, + { + input: "enrtree=AAAAAAAAAAAAAAAAAAAA,BBBBBBBBBBBBBBBBBBBB", + e: &subtreeEntry{[]string{"AAAAAAAAAAAAAAAAAAAA", "BBBBBBBBBBBBBBBBBBBB"}}, + }, + // Links + { + input: "enrtree-link=AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org", + e: &linkEntry{"nodes.example.org", &testkey.PublicKey}, + }, + { + input: "enrtree-link=nodes.example.org", + err: entryError{"link", errNoPubkey}, + }, + { + input: "enrtree-link=AP62DT7WOTEQZGQZOU474PP3KMEGVTTE7A7NPRXKX3DUD57@nodes.example.org", + err: entryError{"link", errBadPubkey}, + }, + { + input: "enrtree-link=AP62DT7WONEQZGQZOU474PP3KMEGVTTE7A7NPRXKX3DUD57TQHGIA@nodes.example.org", + err: entryError{"link", errBadPubkey}, + }, + // ENRs + { + input: "enr=-HW4QES8QIeXTYlDzbfr1WEzE-XKY4f8gJFJzjJL-9D7TC9lJb4Z3JPRRz1lP4pL_N_QpT6rGQjAU9Apnc-C1iMP36OAgmlkgnY0iXNlY3AyNTZrMaED5IdwfMxdmR8W37HqSFdQLjDkIwBd4Q_MjxgZifgKSdM=", + e: &enrEntry{node: testNode(nodesSeed1)}, + }, + { + input: "enr=-HW4QLZHjM4vZXkbp-5xJoHsKSbE7W39FPC8283X-y8oHcHPTnDDlIlzL5ArvDUlHZVDPgmFASrh7cWgLOLxj4wprRkHgmlkgnY0iXNlY3AyNTZrMaEC3t2jLMhDpCDX5mbSEwDn4L3iUfyXzoO8G28XvjGRkrAg=", + err: entryError{"enr", errInvalidENR}, + }, + // Invalid: + {input: "", err: errUnknownEntry}, + {input: "foo", err: errUnknownEntry}, + {input: "enrtree", err: errUnknownEntry}, + {input: "enrtree-x=", err: errUnknownEntry}, + } + for i, test := range tests { + e, err := parseEntry(test.input, enode.ValidSchemes) + if !reflect.DeepEqual(e, test.e) { + t.Errorf("test %d: wrong entry %s, want %s", i, spew.Sdump(e), spew.Sdump(test.e)) + } + if err != test.err { + t.Errorf("test %d: wrong error %q, want %q", i, err, test.err) + } + } +} + +func TestMakeTree(t *testing.T) { + nodes := testNodes(nodesSeed2, 50) + tree, err := MakeTree(2, nodes, nil) + if err != nil { + t.Fatal(err) + } + txt := tree.ToTXT("") + if len(txt) < len(nodes)+1 { + t.Fatal("too few TXT records in output") + } +} diff --git a/p2p/enode/localnode.go b/p2p/enode/localnode.go index 623f8eae1847..d8aa02a77e26 100644 --- a/p2p/enode/localnode.go +++ b/p2p/enode/localnode.go @@ -48,23 +48,32 @@ type LocalNode struct { db *DB // everything below is protected by a lock - mu sync.Mutex - seq uint64 - entries map[string]enr.Entry - udpTrack *netutil.IPTracker // predicts external UDP endpoint - staticIP net.IP - fallbackIP net.IP - fallbackUDP int + mu sync.Mutex + seq uint64 + entries map[string]enr.Entry + endpoint4 lnEndpoint + endpoint6 lnEndpoint +} + +type lnEndpoint struct { + track *netutil.IPTracker + staticIP, fallbackIP net.IP + fallbackUDP int } // NewLocalNode creates a local node. func NewLocalNode(db *DB, key *ecdsa.PrivateKey) *LocalNode { ln := &LocalNode{ - id: PubkeyToIDV4(&key.PublicKey), - db: db, - key: key, - udpTrack: netutil.NewIPTracker(iptrackWindow, iptrackContactWindow, iptrackMinStatements), - entries: make(map[string]enr.Entry), + id: PubkeyToIDV4(&key.PublicKey), + db: db, + key: key, + entries: make(map[string]enr.Entry), + endpoint4: lnEndpoint{ + track: netutil.NewIPTracker(iptrackWindow, iptrackContactWindow, iptrackMinStatements), + }, + endpoint6: lnEndpoint{ + track: netutil.NewIPTracker(iptrackWindow, iptrackContactWindow, iptrackMinStatements), + }, } ln.seq = db.localSeq(ln.id) ln.invalidate() @@ -89,13 +98,22 @@ func (ln *LocalNode) Node() *Node { return ln.cur.Load().(*Node) } +// Seq returns the current sequence number of the local node record. +func (ln *LocalNode) Seq() uint64 { + ln.mu.Lock() + defer ln.mu.Unlock() + + return ln.seq +} + // ID returns the local node ID. func (ln *LocalNode) ID() ID { return ln.id } -// Set puts the given entry into the local record, overwriting -// any existing value. +// Set puts the given entry into the local record, overwriting any existing value. +// Use Set*IP and SetFallbackUDP to set IP addresses and UDP port, otherwise they'll +// be overwritten by the endpoint predictor. func (ln *LocalNode) Set(e enr.Entry) { ln.mu.Lock() defer ln.mu.Unlock() @@ -127,13 +145,20 @@ func (ln *LocalNode) delete(e enr.Entry) { } } +func (ln *LocalNode) endpointForIP(ip net.IP) *lnEndpoint { + if ip.To4() != nil { + return &ln.endpoint4 + } + return &ln.endpoint6 +} + // SetStaticIP sets the local IP to the given one unconditionally. // This disables endpoint prediction. func (ln *LocalNode) SetStaticIP(ip net.IP) { ln.mu.Lock() defer ln.mu.Unlock() - ln.staticIP = ip + ln.endpointForIP(ip).staticIP = ip ln.updateEndpoints() } @@ -143,17 +168,18 @@ func (ln *LocalNode) SetFallbackIP(ip net.IP) { ln.mu.Lock() defer ln.mu.Unlock() - ln.fallbackIP = ip + ln.endpointForIP(ip).fallbackIP = ip ln.updateEndpoints() } -// SetFallbackUDP sets the last-resort UDP port. This port is used +// SetFallbackUDP sets the last-resort UDP-on-IPv4 port. This port is used // if no endpoint prediction can be made. func (ln *LocalNode) SetFallbackUDP(port int) { ln.mu.Lock() defer ln.mu.Unlock() - ln.fallbackUDP = port + ln.endpoint4.fallbackUDP = port + ln.endpoint6.fallbackUDP = port ln.updateEndpoints() } @@ -163,7 +189,7 @@ func (ln *LocalNode) UDPEndpointStatement(fromaddr, endpoint *net.UDPAddr) { ln.mu.Lock() defer ln.mu.Unlock() - ln.udpTrack.AddStatement(fromaddr.String(), endpoint.String()) + ln.endpointForIP(endpoint.IP).track.AddStatement(fromaddr.String(), endpoint.String()) ln.updateEndpoints() } @@ -173,32 +199,50 @@ func (ln *LocalNode) UDPContact(toaddr *net.UDPAddr) { ln.mu.Lock() defer ln.mu.Unlock() - ln.udpTrack.AddContact(toaddr.String()) + ln.endpointForIP(toaddr.IP).track.AddContact(toaddr.String()) ln.updateEndpoints() } +// updateEndpoints updates the record with predicted endpoints. func (ln *LocalNode) updateEndpoints() { - // Determine the endpoints. - newIP := ln.fallbackIP - newUDP := ln.fallbackUDP - if ln.staticIP != nil { - newIP = ln.staticIP - } else if ip, port := predictAddr(ln.udpTrack); ip != nil { - newIP = ip - newUDP = port - } + ip4, udp4 := ln.endpoint4.get() + ip6, udp6 := ln.endpoint6.get() - // Update the record. - if newIP != nil && !newIP.IsUnspecified() { - ln.set(enr.IP(newIP)) - if newUDP != 0 { - ln.set(enr.UDP(newUDP)) - } else { - ln.delete(enr.UDP(0)) - } + if ip4 != nil && !ip4.IsUnspecified() { + ln.set(enr.IPv4(ip4)) } else { - ln.delete(enr.IP{}) + ln.delete(enr.IPv4{}) + } + if ip6 != nil && !ip6.IsUnspecified() { + ln.set(enr.IPv6(ip6)) + } else { + ln.delete(enr.IPv6{}) + } + if udp4 != 0 { + ln.set(enr.UDP(udp4)) + } else { + ln.delete(enr.UDP(0)) + } + if udp6 != 0 && udp6 != udp4 { + ln.set(enr.UDP6(udp6)) + } else { + ln.delete(enr.UDP6(0)) + } +} + +// get returns the endpoint with highest precedence. +func (e *lnEndpoint) get() (newIP net.IP, newPort int) { + newPort = e.fallbackUDP + if e.fallbackIP != nil { + newIP = e.fallbackIP + } + if e.staticIP != nil { + newIP = e.staticIP + } else if ip, port := predictAddr(e.track); ip != nil { + newIP = ip + newPort = port } + return newIP, newPort } // predictAddr wraps IPTracker.PredictEndpoint, converting from its string-based diff --git a/p2p/enode/localnode_test.go b/p2p/enode/localnode_test.go index f5e3496d6306..00746a8d277a 100644 --- a/p2p/enode/localnode_test.go +++ b/p2p/enode/localnode_test.go @@ -17,10 +17,13 @@ package enode import ( + "math/rand" + "net" "testing" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/stretchr/testify/assert" ) func newLocalNodeForTesting() (*LocalNode, *DB) { @@ -74,3 +77,46 @@ func TestLocalNodeSeqPersist(t *testing.T) { t.Fatalf("wrong seq %d on instance with changed key, want 1", s) } } + +// This test checks behavior of the endpoint predictor. +func TestLocalNodeEndpoint(t *testing.T) { + var ( + fallback = &net.UDPAddr{IP: net.IP{127, 0, 0, 1}, Port: 80} + predicted = &net.UDPAddr{IP: net.IP{127, 0, 1, 2}, Port: 81} + staticIP = net.IP{127, 0, 1, 2} + ) + ln, db := newLocalNodeForTesting() + defer db.Close() + + // Nothing is set initially. + assert.Equal(t, net.IP(nil), ln.Node().IP()) + assert.Equal(t, 0, ln.Node().UDP()) + assert.Equal(t, uint64(1), ln.Node().Seq()) + + // Set up fallback address. + ln.SetFallbackIP(fallback.IP) + ln.SetFallbackUDP(fallback.Port) + assert.Equal(t, fallback.IP, ln.Node().IP()) + assert.Equal(t, fallback.Port, ln.Node().UDP()) + assert.Equal(t, uint64(2), ln.Node().Seq()) + + // Add endpoint statements from random hosts. + for i := 0; i < iptrackMinStatements; i++ { + assert.Equal(t, fallback.IP, ln.Node().IP()) + assert.Equal(t, fallback.Port, ln.Node().UDP()) + assert.Equal(t, uint64(2), ln.Node().Seq()) + + from := &net.UDPAddr{IP: make(net.IP, 4), Port: 90} + rand.Read(from.IP) + ln.UDPEndpointStatement(from, predicted) + } + assert.Equal(t, predicted.IP, ln.Node().IP()) + assert.Equal(t, predicted.Port, ln.Node().UDP()) + assert.Equal(t, uint64(3), ln.Node().Seq()) + + // Static IP overrides prediction. + ln.SetStaticIP(staticIP) + assert.Equal(t, staticIP, ln.Node().IP()) + assert.Equal(t, fallback.Port, ln.Node().UDP()) + assert.Equal(t, uint64(4), ln.Node().Seq()) +} diff --git a/p2p/enode/node.go b/p2p/enode/node.go index b454ab2554d5..9eb2544ffe14 100644 --- a/p2p/enode/node.go +++ b/p2p/enode/node.go @@ -18,6 +18,7 @@ package enode import ( "crypto/ecdsa" + "encoding/base64" "encoding/hex" "errors" "fmt" @@ -27,8 +28,11 @@ import ( "strings" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/rlp" ) +var errMissingPrefix = errors.New("missing 'enr:' prefix for base64-encoded record") + // Node represents a host on the network. type Node struct { r enr.Record @@ -48,6 +52,34 @@ func New(validSchemes enr.IdentityScheme, r *enr.Record) (*Node, error) { return node, nil } +// MustParse parses a node record or enode:// URL. It panics if the input is invalid. +func MustParse(rawurl string) *Node { + n, err := Parse(ValidSchemes, rawurl) + if err != nil { + panic("invalid node: " + err.Error()) + } + return n +} + +// Parse decodes and verifies a base64-encoded node record. +func Parse(validSchemes enr.IdentityScheme, input string) (*Node, error) { + if strings.HasPrefix(input, "enode://") { + return ParseV4(input) + } + if !strings.HasPrefix(input, "enr:") { + return nil, errMissingPrefix + } + bin, err := base64.RawURLEncoding.DecodeString(input[4:]) + if err != nil { + return nil, err + } + var r enr.Record + if err := rlp.DecodeBytes(bin, &r); err != nil { + return nil, err + } + return New(validSchemes, &r) +} + // ID returns the node identifier. func (n *Node) ID() ID { return n.id @@ -68,11 +100,19 @@ func (n *Node) Load(k enr.Entry) error { return n.r.Load(k) } -// IP returns the IP address of the node. +// IP returns the IP address of the node. This prefers IPv4 addresses. func (n *Node) IP() net.IP { - var ip net.IP - n.Load((*enr.IP)(&ip)) - return ip + var ( + ip4 enr.IPv4 + ip6 enr.IPv6 + ) + if n.Load(&ip4) == nil { + return net.IP(ip4) + } + if n.Load(&ip6) == nil { + return net.IP(ip6) + } + return nil } // UDP returns the UDP port of the node. @@ -105,10 +145,11 @@ func (n *Node) Record() *enr.Record { return &cpy } -// checks whether n is a valid complete node. +// ValidateComplete checks whether n has a valid IP and UDP port. +// Deprecated: don't use this method. func (n *Node) ValidateComplete() error { if n.Incomplete() { - return errors.New("incomplete node") + return errors.New("missing IP address") } if n.UDP() == 0 { return errors.New("missing UDP port") @@ -122,20 +163,24 @@ func (n *Node) ValidateComplete() error { return n.Load(&key) } -// The string representation of a Node is a URL. -// Please see ParseNode for a description of the format. +// String returns the text representation of the record. func (n *Node) String() string { - return n.v4URL() + if isNewV4(n) { + return n.URLv4() // backwards-compatibility glue for NewV4 nodes + } + enc, _ := rlp.EncodeToBytes(&n.r) // always succeeds because record is valid + b64 := base64.RawURLEncoding.EncodeToString(enc) + return "enr:" + b64 } // MarshalText implements encoding.TextMarshaler. func (n *Node) MarshalText() ([]byte, error) { - return []byte(n.v4URL()), nil + return []byte(n.String()), nil } // UnmarshalText implements encoding.TextUnmarshaler. func (n *Node) UnmarshalText(text []byte) error { - dec, err := ParseV4(string(text)) + dec, err := Parse(ValidSchemes, string(text)) if err == nil { *n = *dec } diff --git a/p2p/enode/node_test.go b/p2p/enode/node_test.go index 861a70bd64e9..d15859c477a5 100644 --- a/p2p/enode/node_test.go +++ b/p2p/enode/node_test.go @@ -17,9 +17,12 @@ package enode import ( + "bytes" "encoding/hex" "fmt" + "math/big" "testing" + "testing/quick" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rlp" @@ -43,7 +46,7 @@ func TestPythonInterop(t *testing.T) { var ( wantID = HexID("a448f24c6d18e575453db13171562b71999873db5b286df957af199ec94617f7") wantSeq = uint64(1) - wantIP = enr.IP{127, 0, 0, 1} + wantIP = enr.IPv4{127, 0, 0, 1} wantUDP = enr.UDP(30303) ) if n.Seq() != wantSeq { @@ -52,7 +55,7 @@ func TestPythonInterop(t *testing.T) { if n.ID() != wantID { t.Errorf("wrong id: got %x, want %x", n.ID(), wantID) } - want := map[enr.Entry]interface{}{new(enr.IP): &wantIP, new(enr.UDP): &wantUDP} + want := map[enr.Entry]interface{}{new(enr.IPv4): &wantIP, new(enr.UDP): &wantUDP} for k, v := range want { desc := fmt.Sprintf("loading key %q", k.ENRKey()) if assert.NoError(t, n.Load(k), desc) { @@ -60,3 +63,83 @@ func TestPythonInterop(t *testing.T) { } } } + +func TestHexID(t *testing.T) { + ref := ID{0, 0, 0, 0, 0, 0, 0, 128, 106, 217, 182, 31, 165, 174, 1, 67, 7, 235, 220, 150, 66, 83, 173, 205, 159, 44, 10, 57, 42, 161, 26, 188} + id1 := HexID("0x00000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") + id2 := HexID("00000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") + + if id1 != ref { + t.Errorf("wrong id1\ngot %v\nwant %v", id1[:], ref[:]) + } + if id2 != ref { + t.Errorf("wrong id2\ngot %v\nwant %v", id2[:], ref[:]) + } +} + +func TestID_textEncoding(t *testing.T) { + ref := ID{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, + 0x31, 0x32, + } + hex := "0102030405060708091011121314151617181920212223242526272829303132" + + text, err := ref.MarshalText() + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(text, []byte(hex)) { + t.Fatalf("text encoding did not match\nexpected: %s\ngot: %s", hex, text) + } + + id := new(ID) + if err := id.UnmarshalText(text); err != nil { + t.Fatal(err) + } + if *id != ref { + t.Fatalf("text decoding did not match\nexpected: %s\ngot: %s", ref, id) + } +} + +func TestID_distcmp(t *testing.T) { + distcmpBig := func(target, a, b ID) int { + tbig := new(big.Int).SetBytes(target[:]) + abig := new(big.Int).SetBytes(a[:]) + bbig := new(big.Int).SetBytes(b[:]) + return new(big.Int).Xor(tbig, abig).Cmp(new(big.Int).Xor(tbig, bbig)) + } + if err := quick.CheckEqual(DistCmp, distcmpBig, nil); err != nil { + t.Error(err) + } +} + +// The random tests is likely to miss the case where a and b are equal, +// this test checks it explicitly. +func TestID_distcmpEqual(t *testing.T) { + base := ID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} + x := ID{15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} + if DistCmp(base, x, x) != 0 { + t.Errorf("DistCmp(base, x, x) != 0") + } +} + +func TestID_logdist(t *testing.T) { + logdistBig := func(a, b ID) int { + abig, bbig := new(big.Int).SetBytes(a[:]), new(big.Int).SetBytes(b[:]) + return new(big.Int).Xor(abig, bbig).BitLen() + } + if err := quick.CheckEqual(LogDist, logdistBig, nil); err != nil { + t.Error(err) + } +} + +// The random tests is likely to miss the case where a and b are equal, +// this test checks it explicitly. +func TestID_logdistEqual(t *testing.T) { + x := ID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} + if LogDist(x, x) != 0 { + t.Errorf("LogDist(x, x) != 0") + } +} diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index 9353b155c1cd..44332640c75d 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -57,7 +57,7 @@ const ( const ( dbNodeExpiration = 24 * time.Hour // Time after which an unseen node should be dropped. dbCleanupCycle = time.Hour // Time period for running the expiration task. - dbVersion = 8 + dbVersion = 9 ) var zeroIP = make(net.IP, 16) @@ -380,12 +380,12 @@ func (db *DB) UpdateFindFails(id ID, ip net.IP, fails int) error { // LocalSeq retrieves the local record sequence counter. func (db *DB) localSeq(id ID) uint64 { - return db.fetchUint64(nodeItemKey(id, zeroIP, dbLocalSeq)) + return db.fetchUint64(localItemKey(id, dbLocalSeq)) } // storeLocalSeq stores the local record sequence counter. func (db *DB) storeLocalSeq(id ID, n uint64) { - db.storeUint64(nodeItemKey(id, zeroIP, dbLocalSeq), n) + db.storeUint64(localItemKey(id, dbLocalSeq), n) } // QuerySeeds retrieves random nodes to be used as potential seed nodes diff --git a/p2p/enode/nodedb_test.go b/p2p/enode/nodedb_test.go index 341b61a289f7..2adb14145d15 100644 --- a/p2p/enode/nodedb_test.go +++ b/p2p/enode/nodedb_test.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -71,7 +71,7 @@ func TestDBNodeItemKey(t *testing.T) { if id != keytestID { t.Errorf("splitNodeItemKey returned wrong ID: %v", id) } - if !bytes.Equal(ip, wantIP) { + if !ip.Equal(wantIP) { t.Errorf("splitNodeItemKey returned wrong IP: %v", ip) } if field != wantField { diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go index 50e9485d04c4..a9a3d1374e51 100644 --- a/p2p/enode/urlv4.go +++ b/p2p/enode/urlv4.go @@ -70,7 +70,7 @@ func ParseV4(rawurl string) (*Node, error) { if m := incompleteNodeURL.FindStringSubmatch(rawurl); m != nil { id, err := parsePubkey(m[1]) if err != nil { - return nil, fmt.Errorf("invalid node ID (%v)", err) + return nil, fmt.Errorf("invalid public key (%v)", err) } return NewV4(id, nil, 0, 0), nil } @@ -81,7 +81,7 @@ func ParseV4(rawurl string) (*Node, error) { // contained in the node has a zero-length signature. func NewV4(pubkey *ecdsa.PublicKey, ip net.IP, tcp, udp int) *Node { var r enr.Record - if ip != nil { + if len(ip) > 0 { r.Set(enr.IP(ip)) } if udp != 0 { @@ -98,6 +98,12 @@ func NewV4(pubkey *ecdsa.PublicKey, ip net.IP, tcp, udp int) *Node { return n } +// isNewV4 returns true for nodes created by NewV4. +func isNewV4(n *Node) bool { + var k s256raw + return n.r.IdentityScheme() == "" && n.r.Load(&k) == nil && len(n.r.Signature()) == 0 +} + func parseComplete(rawurl string) (*Node, error) { var ( id *ecdsa.PublicKey @@ -116,22 +122,20 @@ func parseComplete(rawurl string) (*Node, error) { return nil, errors.New("does not contain node ID") } if id, err = parsePubkey(u.User.String()); err != nil { - return nil, fmt.Errorf("invalid node ID (%v)", err) + return nil, fmt.Errorf("invalid public key (%v)", err) } // Parse the IP address. - host, port, err := net.SplitHostPort(u.Host) + ips, err := net.LookupIP(u.Hostname()) if err != nil { - return nil, fmt.Errorf("invalid host: %v", err) - } - if ip = net.ParseIP(host); ip == nil { - return nil, errors.New("invalid IP address") + return nil, err } + ip = ips[0] // Ensure the IP is 4 bytes long for IPv4 addresses. if ipv4 := ip.To4(); ipv4 != nil { ip = ipv4 } // Parse the port numbers. - if tcpPort, err = strconv.ParseUint(port, 10, 16); err != nil { + if tcpPort, err = strconv.ParseUint(u.Port(), 10, 16); err != nil { return nil, errors.New("invalid port") } udpPort = tcpPort @@ -157,7 +161,7 @@ func parsePubkey(in string) (*ecdsa.PublicKey, error) { return crypto.UnmarshalPubkey(b) } -func (n *Node) v4URL() string { +func (n *Node) URLv4() string { var ( scheme enr.ID nodeid string diff --git a/p2p/enode/urlv4_test.go b/p2p/enode/urlv4_test.go index 3680ab6b78b6..41a88eec61fb 100644 --- a/p2p/enode/urlv4_test.go +++ b/p2p/enode/urlv4_test.go @@ -17,53 +17,72 @@ package enode import ( - "bytes" "crypto/ecdsa" - "math/big" "net" "reflect" "strings" "testing" - "testing/quick" + + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/p2p/enr" ) var parseNodeTests = []struct { - rawurl string + input string wantError string wantResult *Node }{ + // Records + { + input: "enr:-IS4QGrdq0ugARp5T2BZ41TrZOqLc_oKvZoPuZP5--anqWE_J-Tucc1xgkOL7qXl0puJgT7qc2KSvcupc4NCb0nr4tdjgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQM6UUF2Rm-oFe1IH_rQkRCi00T2ybeMHRSvw1HDpRvjPYN1ZHCCdl8", + wantResult: func() *Node { + testKey, _ := crypto.HexToECDSA("45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8") + var r enr.Record + r.Set(enr.IP{127, 0, 0, 1}) + r.Set(enr.UDP(30303)) + r.SetSeq(99) + SignV4(&r, testKey) + n, _ := New(ValidSchemes, &r) + return n + }(), + }, + // Invalid Records { - rawurl: "http://foobar", - wantError: `invalid URL scheme, want "enode"`, + input: "enr:", + wantError: "EOF", // could be nicer }, { - rawurl: "enode://01010101@123.124.125.126:3", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, + input: "enr:x", + wantError: "illegal base64 data at input byte 0", }, - // Complete nodes with IP address. { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@hostname:3", - wantError: `invalid IP address`, + input: "enr:-EmGZm9vYmFyY4JpZIJ2NIJpcIR_AAABiXNlY3AyNTZrMaEDOlFBdkZvqBXtSB_60JEQotNE9sm3jB0Ur8NRw6Ub4z2DdWRwgnZf", + wantError: enr.ErrInvalidSig.Error(), }, + // Complete node URLs with IP address and ports { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@invalid.:3", + wantError: `no such host`, + }, + { + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo", wantError: `invalid port`, }, { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:3?discport=foo", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:3?discport=foo", wantError: `invalid discport in query`, }, { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{0x7f, 0x0, 0x0, 0x1}, + net.IP{127, 0, 0, 1}, 52150, 52150, ), }, { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[::]:52150", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[::]:52150", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), net.ParseIP("::"), @@ -72,7 +91,7 @@ var parseNodeTests = []struct { ), }, { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[2001:db8:3c4d:15::abcd:ef12]:52150", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@[2001:db8:3c4d:15::abcd:ef12]:52150", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), net.ParseIP("2001:db8:3c4d:15::abcd:ef12"), @@ -81,7 +100,7 @@ var parseNodeTests = []struct { ), }, { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150?discport=22334", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150?discport=22334", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), net.IP{0x7f, 0x0, 0x0, 0x1}, @@ -89,34 +108,42 @@ var parseNodeTests = []struct { 22334, ), }, - // Incomplete nodes with no address. + // Incomplete node URLs with no address { - rawurl: "1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), nil, 0, 0, ), }, + // Invalid URLs { - rawurl: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", - wantResult: NewV4( - hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - nil, 0, 0, - ), + input: "", + wantError: errMissingPrefix.Error(), }, - // Invalid URLs { - rawurl: "01010101", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, + input: "1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439", + wantError: errMissingPrefix.Error(), }, { - rawurl: "enode://01010101", - wantError: `invalid node ID (wrong length, want 128 hex chars)`, + input: "01010101", + wantError: errMissingPrefix.Error(), }, { - // This test checks that errors from url.Parse are handled. - rawurl: "://foo", - wantError: `parse ://foo: missing protocol scheme`, + input: "enode://01010101@123.124.125.126:3", + wantError: `invalid public key (wrong length, want 128 hex chars)`, + }, + { + input: "enode://01010101", + wantError: `invalid public key (wrong length, want 128 hex chars)`, + }, + { + input: "http://foobar", + wantError: errMissingPrefix.Error(), + }, + { + input: "://foo", + wantError: errMissingPrefix.Error(), }, } @@ -130,22 +157,22 @@ func hexPubkey(h string) *ecdsa.PublicKey { func TestParseNode(t *testing.T) { for _, test := range parseNodeTests { - n, err := ParseV4(test.rawurl) + n, err := Parse(ValidSchemes, test.input) if test.wantError != "" { if err == nil { - t.Errorf("test %q:\n got nil error, expected %#q", test.rawurl, test.wantError) + t.Errorf("test %q:\n got nil error, expected %#q", test.input, test.wantError) continue - } else if err.Error() != test.wantError { - t.Errorf("test %q:\n got error %#q, expected %#q", test.rawurl, err.Error(), test.wantError) + } else if !strings.Contains(err.Error(), test.wantError) { + t.Errorf("test %q:\n got error %#q, expected %#q", test.input, err.Error(), test.wantError) continue } } else { if err != nil { - t.Errorf("test %q:\n unexpected error: %v", test.rawurl, err) + t.Errorf("test %q:\n unexpected error: %v", test.input, err) continue } if !reflect.DeepEqual(n, test.wantResult) { - t.Errorf("test %q:\n result mismatch:\ngot: %#v\nwant: %#v", test.rawurl, n, test.wantResult) + t.Errorf("test %q:\n result mismatch:\ngot: %#v\nwant: %#v", test.input, n, test.wantResult) } } } @@ -153,91 +180,11 @@ func TestParseNode(t *testing.T) { func TestNodeString(t *testing.T) { for i, test := range parseNodeTests { - if test.wantError == "" && strings.HasPrefix(test.rawurl, "enode://") { + if test.wantError == "" && strings.HasPrefix(test.input, "enode://") { str := test.wantResult.String() - if str != test.rawurl { - t.Errorf("test %d: Node.String() mismatch:\ngot: %s\nwant: %s", i, str, test.rawurl) + if str != test.input { + t.Errorf("test %d: Node.String() mismatch:\ngot: %s\nwant: %s", i, str, test.input) } } } } - -func TestHexID(t *testing.T) { - ref := ID{0, 0, 0, 0, 0, 0, 0, 128, 106, 217, 182, 31, 165, 174, 1, 67, 7, 235, 220, 150, 66, 83, 173, 205, 159, 44, 10, 57, 42, 161, 26, 188} - id1 := HexID("0x00000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") - id2 := HexID("00000000000000806ad9b61fa5ae014307ebdc964253adcd9f2c0a392aa11abc") - - if id1 != ref { - t.Errorf("wrong id1\ngot %v\nwant %v", id1[:], ref[:]) - } - if id2 != ref { - t.Errorf("wrong id2\ngot %v\nwant %v", id2[:], ref[:]) - } -} - -func TestID_textEncoding(t *testing.T) { - ref := ID{ - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, - 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x30, - 0x31, 0x32, - } - hex := "0102030405060708091011121314151617181920212223242526272829303132" - - text, err := ref.MarshalText() - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(text, []byte(hex)) { - t.Fatalf("text encoding did not match\nexpected: %s\ngot: %s", hex, text) - } - - id := new(ID) - if err := id.UnmarshalText(text); err != nil { - t.Fatal(err) - } - if *id != ref { - t.Fatalf("text decoding did not match\nexpected: %s\ngot: %s", ref, id) - } -} - -func TestNodeID_distcmp(t *testing.T) { - distcmpBig := func(target, a, b ID) int { - tbig := new(big.Int).SetBytes(target[:]) - abig := new(big.Int).SetBytes(a[:]) - bbig := new(big.Int).SetBytes(b[:]) - return new(big.Int).Xor(tbig, abig).Cmp(new(big.Int).Xor(tbig, bbig)) - } - if err := quick.CheckEqual(DistCmp, distcmpBig, nil); err != nil { - t.Error(err) - } -} - -// The random tests is likely to miss the case where a and b are equal, -// this test checks it explicitly. -func TestNodeID_distcmpEqual(t *testing.T) { - base := ID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} - x := ID{15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} - if DistCmp(base, x, x) != 0 { - t.Errorf("DistCmp(base, x, x) != 0") - } -} - -func TestNodeID_logdist(t *testing.T) { - logdistBig := func(a, b ID) int { - abig, bbig := new(big.Int).SetBytes(a[:]), new(big.Int).SetBytes(b[:]) - return new(big.Int).Xor(abig, bbig).BitLen() - } - if err := quick.CheckEqual(LogDist, logdistBig, nil); err != nil { - t.Error(err) - } -} - -// The random tests is likely to miss the case where a and b are equal, -// this test checks it explicitly. -func TestNodeID_logdistEqual(t *testing.T) { - x := ID{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} - if LogDist(x, x) != 0 { - t.Errorf("LogDist(x, x) != 0") - } -} diff --git a/p2p/enr/enr.go b/p2p/enr/enr.go index 444820c15857..c36ae9e3edea 100644 --- a/p2p/enr/enr.go +++ b/p2p/enr/enr.go @@ -163,6 +163,16 @@ func (r *Record) invalidate() { r.raw = nil } +// Signature returns the signature of the record. +func (r *Record) Signature() []byte { + if r.signature == nil { + return nil + } + cpy := make([]byte, len(r.signature)) + copy(cpy, r.signature) + return cpy +} + // EncodeRLP implements rlp.Encoder. Encoding fails if // the record is unsigned. func (r Record) EncodeRLP(w io.Writer) error { @@ -173,7 +183,7 @@ func (r Record) EncodeRLP(w io.Writer) error { return err } -// DecodeRLP implements rlp.Decoder. Decoding verifies the signature. +// DecodeRLP implements rlp.Decoder. Decoding doesn't verify the signature. func (r *Record) DecodeRLP(s *rlp.Stream) error { dec, raw, err := decodeRecord(s) if err != nil { diff --git a/p2p/enr/enr_test.go b/p2p/enr/enr_test.go index 449c898a8479..96a9ced5cf3d 100644 --- a/p2p/enr/enr_test.go +++ b/p2p/enr/enr_test.go @@ -49,28 +49,28 @@ func TestGetSetID(t *testing.T) { } // TestGetSetIP4 tests encoding/decoding and setting/getting of the IP key. -func TestGetSetIP4(t *testing.T) { - ip := IP{192, 168, 0, 3} +func TestGetSetIPv4(t *testing.T) { + ip := IPv4{192, 168, 0, 3} var r Record r.Set(ip) - var ip2 IP + var ip2 IPv4 require.NoError(t, r.Load(&ip2)) assert.Equal(t, ip, ip2) } -// TestGetSetIP6 tests encoding/decoding and setting/getting of the IP key. -func TestGetSetIP6(t *testing.T) { - ip := IP{0x20, 0x01, 0x48, 0x60, 0, 0, 0x20, 0x01, 0, 0, 0, 0, 0, 0, 0x00, 0x68} +// TestGetSetIP6 tests encoding/decoding and setting/getting of the IP6 key. +func TestGetSetIPv6(t *testing.T) { + ip := IPv6{0x20, 0x01, 0x48, 0x60, 0, 0, 0x20, 0x01, 0, 0, 0, 0, 0, 0, 0x00, 0x68} var r Record r.Set(ip) - var ip2 IP + var ip2 IPv6 require.NoError(t, r.Load(&ip2)) assert.Equal(t, ip, ip2) } -// TestGetSetDiscPort tests encoding/decoding and setting/getting of the DiscPort key. +// TestGetSetUDP tests encoding/decoding and setting/getting of the UDP key. func TestGetSetUDP(t *testing.T) { port := UDP(30309) var r Record @@ -83,7 +83,7 @@ func TestGetSetUDP(t *testing.T) { func TestLoadErrors(t *testing.T) { var r Record - ip4 := IP{127, 0, 0, 1} + ip4 := IPv4{127, 0, 0, 1} r.Set(ip4) // Check error for missing keys. @@ -185,13 +185,13 @@ func TestSeq(t *testing.T) { func TestGetSetOverwrite(t *testing.T) { var r Record - ip := IP{192, 168, 0, 3} + ip := IPv4{192, 168, 0, 3} r.Set(ip) - ip2 := IP{192, 168, 0, 4} + ip2 := IPv4{192, 168, 0, 4} r.Set(ip2) - var ip3 IP + var ip3 IPv4 require.NoError(t, r.Load(&ip3)) assert.Equal(t, ip2, ip3) } @@ -200,7 +200,7 @@ func TestGetSetOverwrite(t *testing.T) { func TestSignEncodeAndDecode(t *testing.T) { var r Record r.Set(UDP(30303)) - r.Set(IP{127, 0, 0, 1}) + r.Set(IPv4{127, 0, 0, 1}) require.NoError(t, signTest([]byte{5}, &r)) blob, err := rlp.EncodeToBytes(r) diff --git a/p2p/enr/entries.go b/p2p/enr/entries.go index 347990ab64fb..f2118401afb8 100644 --- a/p2p/enr/entries.go +++ b/p2p/enr/entries.go @@ -60,11 +60,21 @@ type TCP uint16 func (v TCP) ENRKey() string { return "tcp" } +// UDP is the "udp" key, which holds the IPv6-specific UDP port of the node. +type TCP6 uint16 + +func (v TCP6) ENRKey() string { return "tcp6" } + // UDP is the "udp" key, which holds the UDP port of the node. type UDP uint16 func (v UDP) ENRKey() string { return "udp" } +// UDP is the "udp" key, which holds the IPv6-specific UDP port of the node. +type UDP6 uint16 + +func (v UDP6) ENRKey() string { return "udp6" } + // ID is the "id" key, which holds the name of the identity scheme. type ID string @@ -72,17 +82,27 @@ const IDv4 = ID("v4") // the default identity scheme func (v ID) ENRKey() string { return "id" } -// IP is the "ip" key, which holds the IP address of the node. +// IP is either the "ip" or "ip6" key, depending on the value. +// Use this value to encode IP addresses that can be either v4 or v6. +// To load an address from a record use the IPv4 or IPv6 types. type IP net.IP -func (v IP) ENRKey() string { return "ip" } +func (v IP) ENRKey() string { + if net.IP(v).To4() == nil { + return "ip6" + } + return "ip" +} // EncodeRLP implements rlp.Encoder. func (v IP) EncodeRLP(w io.Writer) error { if ip4 := net.IP(v).To4(); ip4 != nil { return rlp.Encode(w, ip4) } - return rlp.Encode(w, net.IP(v)) + if ip6 := net.IP(v).To16(); ip6 != nil { + return rlp.Encode(w, ip6) + } + return fmt.Errorf("invalid IP address: %v", net.IP(v)) } // DecodeRLP implements rlp.Decoder. @@ -96,6 +116,56 @@ func (v *IP) DecodeRLP(s *rlp.Stream) error { return nil } +// IPv4 is the "ip" key, which holds the IP address of the node. +type IPv4 net.IP + +func (v IPv4) ENRKey() string { return "ip" } + +// EncodeRLP implements rlp.Encoder. +func (v IPv4) EncodeRLP(w io.Writer) error { + ip4 := net.IP(v).To4() + if ip4 == nil { + return fmt.Errorf("invalid IPv4 address: %v", net.IP(v)) + } + return rlp.Encode(w, ip4) +} + +// DecodeRLP implements rlp.Decoder. +func (v *IPv4) DecodeRLP(s *rlp.Stream) error { + if err := s.Decode((*net.IP)(v)); err != nil { + return err + } + if len(*v) != 4 { + return fmt.Errorf("invalid IPv4 address, want 4 bytes: %v", *v) + } + return nil +} + +// IPv6 is the "ip6" key, which holds the IP address of the node. +type IPv6 net.IP + +func (v IPv6) ENRKey() string { return "ip6" } + +// EncodeRLP implements rlp.Encoder. +func (v IPv6) EncodeRLP(w io.Writer) error { + ip6 := net.IP(v).To16() + if ip6 == nil { + return fmt.Errorf("invalid IPv6 address: %v", net.IP(v)) + } + return rlp.Encode(w, ip6) +} + +// DecodeRLP implements rlp.Decoder. +func (v *IPv6) DecodeRLP(s *rlp.Stream) error { + if err := s.Decode((*net.IP)(v)); err != nil { + return err + } + if len(*v) != 16 { + return fmt.Errorf("invalid IPv6 address, want 16 bytes: %v", *v) + } + return nil +} + // KeyError is an error related to a key. type KeyError struct { Key string diff --git a/p2p/message.go b/p2p/message.go index ac12666e4178..10b55a939c9b 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -39,9 +39,13 @@ import ( // separate Msg with a bytes.Reader as Payload for each send. type Msg struct { Code uint64 - Size uint32 // size of the paylod + Size uint32 // Size of the raw payload Payload io.Reader ReceivedAt time.Time + + meterCap Cap // Protocol name and version for egress metering + meterCode uint64 // Message within protocol for egress metering + meterSize uint32 // Compressed message size for ingress metering } // Decode parses the RLP content of a message into @@ -169,7 +173,7 @@ type MsgPipeRW struct { closed *int32 } -// WriteMsg sends a messsage on the pipe. +// WriteMsg sends a message on the pipe. // It blocks until the receiver has consumed the message payload. func (p *MsgPipeRW) WriteMsg(msg Msg) error { if atomic.LoadInt32(p.closed) == 0 { @@ -252,19 +256,23 @@ func ExpectMsg(r MsgReader, code uint64, content interface{}) error { type msgEventer struct { MsgReadWriter - feed *event.Feed - peerID enode.ID - Protocol string + feed *event.Feed + peerID enode.ID + Protocol string + localAddress string + remoteAddress string } // newMsgEventer returns a msgEventer which sends message events to the given // feed -func newMsgEventer(rw MsgReadWriter, feed *event.Feed, peerID enode.ID, proto string) *msgEventer { +func newMsgEventer(rw MsgReadWriter, feed *event.Feed, peerID enode.ID, proto, remote, local string) *msgEventer { return &msgEventer{ MsgReadWriter: rw, feed: feed, peerID: peerID, Protocol: proto, + remoteAddress: remote, + localAddress: local, } } @@ -276,11 +284,13 @@ func (ev *msgEventer) ReadMsg() (Msg, error) { return msg, err } ev.feed.Send(&PeerEvent{ - Type: PeerEventTypeMsgRecv, - Peer: ev.peerID, - Protocol: ev.Protocol, - MsgCode: &msg.Code, - MsgSize: &msg.Size, + Type: PeerEventTypeMsgRecv, + Peer: ev.peerID, + Protocol: ev.Protocol, + MsgCode: &msg.Code, + MsgSize: &msg.Size, + LocalAddress: ev.localAddress, + RemoteAddress: ev.remoteAddress, }) return msg, nil } @@ -293,11 +303,13 @@ func (ev *msgEventer) WriteMsg(msg Msg) error { return err } ev.feed.Send(&PeerEvent{ - Type: PeerEventTypeMsgSend, - Peer: ev.peerID, - Protocol: ev.Protocol, - MsgCode: &msg.Code, - MsgSize: &msg.Size, + Type: PeerEventTypeMsgSend, + Peer: ev.peerID, + Protocol: ev.Protocol, + MsgCode: &msg.Code, + MsgSize: &msg.Size, + LocalAddress: ev.localAddress, + RemoteAddress: ev.remoteAddress, }) return nil } diff --git a/p2p/metrics.go b/p2p/metrics.go index 8df82bb074c3..8b29efdcdbd6 100644 --- a/p2p/metrics.go +++ b/p2p/metrics.go @@ -25,18 +25,17 @@ import ( "sync/atomic" "time" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p/enode" ) const ( - MetricsInboundConnects = "p2p/InboundConnects" // Name for the registered inbound connects meter - MetricsInboundTraffic = "p2p/InboundTraffic" // Name for the registered inbound traffic meter - MetricsOutboundConnects = "p2p/OutboundConnects" // Name for the registered outbound connects meter - MetricsOutboundTraffic = "p2p/OutboundTraffic" // Name for the registered outbound traffic meter + MetricsInboundTraffic = "p2p/ingress" // Name for the registered inbound traffic meter + MetricsOutboundTraffic = "p2p/egress" // Name for the registered outbound traffic meter + MetricsOutboundConnects = "p2p/dials" // Name for the registered outbound connects meter + MetricsInboundConnects = "p2p/serves" // Name for the registered inbound connects meter MeteredPeerLimit = 1024 // This amount of peers are individually metered ) @@ -46,6 +45,7 @@ var ( ingressTrafficMeter = metrics.NewRegisteredMeter(MetricsInboundTraffic, nil) // Meter metering the cumulative ingress traffic egressConnectMeter = metrics.NewRegisteredMeter(MetricsOutboundConnects, nil) // Meter counting the egress connections egressTrafficMeter = metrics.NewRegisteredMeter(MetricsOutboundTraffic, nil) // Meter metering the cumulative egress traffic + activePeerGauge = metrics.NewRegisteredGauge("p2p/peers", nil) // Gauge tracking the current peer count PeerIngressRegistry = metrics.NewPrefixedChildRegistry(metrics.EphemeralRegistry, MetricsInboundTraffic+"/") // Registry containing the peer ingress PeerEgressRegistry = metrics.NewPrefixedChildRegistry(metrics.EphemeralRegistry, MetricsOutboundTraffic+"/") // Registry containing the peer egress @@ -124,6 +124,8 @@ func newMeteredConn(conn net.Conn, ingress bool, ip net.IP) net.Conn { } else { egressConnectMeter.Mark(1) } + activePeerGauge.Inc(1) + return &meteredConn{ Conn: conn, ip: ip, @@ -161,6 +163,7 @@ func (c *meteredConn) Write(b []byte) (n int, err error) { // the ingress and the egress traffic registries using the peer's IP and node ID, // also emits connect event. func (c *meteredConn) handshakeDone(id enode.ID) { + // TODO (kurkomisi): use the node URL instead of the pure node ID. (the String() method of *Node) if atomic.AddInt32(&meteredPeerCount, 1) >= MeteredPeerLimit { // Don't register the peer in the traffic registries. atomic.AddInt32(&meteredPeerCount, -1) @@ -197,6 +200,7 @@ func (c *meteredConn) Close() error { IP: c.ip, Elapsed: time.Since(c.connected), }) + activePeerGauge.Dec(1) return err } id := c.id @@ -208,6 +212,7 @@ func (c *meteredConn) Close() error { IP: c.ip, ID: id, }) + activePeerGauge.Dec(1) return err } ingress, egress := uint64(c.ingressMeter.Count()), uint64(c.egressMeter.Count()) @@ -228,5 +233,6 @@ func (c *meteredConn) Close() error { Ingress: ingress, Egress: egress, }) + activePeerGauge.Dec(1) return err } diff --git a/p2p/netutil/addrutil.go b/p2p/netutil/addrutil.go new file mode 100644 index 000000000000..fb6d8d27318d --- /dev/null +++ b/p2p/netutil/addrutil.go @@ -0,0 +1,33 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package netutil + +import "net" + +// AddrIP gets the IP address contained in addr. It returns nil if no address is present. +func AddrIP(addr net.Addr) net.IP { + switch a := addr.(type) { + case *net.IPAddr: + return a.IP + case *net.TCPAddr: + return a.IP + case *net.UDPAddr: + return a.IP + default: + return nil + } +} diff --git a/p2p/peer.go b/p2p/peer.go index af019d07a897..9a9788bc1759 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -28,6 +28,7 @@ import ( "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rlp" @@ -91,12 +92,14 @@ const ( // PeerEvent is an event emitted when peers are either added or dropped from // a p2p.Server or when a message is sent or received on a peer connection type PeerEvent struct { - Type PeerEventType `json:"type"` - Peer enode.ID `json:"peer"` - Error string `json:"error,omitempty"` - Protocol string `json:"protocol,omitempty"` - MsgCode *uint64 `json:"msg_code,omitempty"` - MsgSize *uint32 `json:"msg_size,omitempty"` + Type PeerEventType `json:"type"` + Peer enode.ID `json:"peer"` + Error string `json:"error,omitempty"` + Protocol string `json:"protocol,omitempty"` + MsgCode *uint64 `json:"msg_code,omitempty"` + MsgSize *uint32 `json:"msg_size,omitempty"` + LocalAddress string `json:"local,omitempty"` + RemoteAddress string `json:"remote,omitempty"` } // Peer represents a connected remote node. @@ -120,7 +123,7 @@ func NewPeer(id enode.ID, name string, caps []Cap) *Peer { pipe, _ := net.Pipe() node := enode.SignNull(new(enr.Record), id) conn := &conn{fd: pipe, transport: nil, node: node, caps: caps, name: name} - peer := newPeer(conn, nil) + peer := newPeer(log.Root(), conn, nil) close(peer.closed) // ensures Disconnect doesn't block return peer } @@ -176,7 +179,7 @@ func (p *Peer) Inbound() bool { return p.rw.is(inboundConn) } -func newPeer(conn *conn, protocols []Protocol) *Peer { +func newPeer(log log.Logger, conn *conn, protocols []Protocol) *Peer { protomap := matchProtocols(protocols, conn.caps, conn) p := &Peer{ rw: conn, @@ -298,6 +301,9 @@ func (p *Peer) handle(msg Msg) error { if err != nil { return fmt.Errorf("msg code out of range: %v", msg.Code) } + if metrics.Enabled { + metrics.GetOrRegisterMeter(fmt.Sprintf("%s/%s/%d/%#02x", MetricsInboundTraffic, proto.Name, proto.Version, msg.Code-proto.offset), nil).Mark(int64(msg.meterSize)) + } select { case proto.in <- msg: return nil @@ -354,7 +360,7 @@ func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error) proto.werr = writeErr var rw MsgReadWriter = proto if p.events != nil { - rw = newMsgEventer(rw, p.events, p.ID(), proto.Name) + rw = newMsgEventer(rw, p.events, p.ID(), proto.Name, p.Info().Network.RemoteAddress, p.Info().Network.LocalAddress) } p.log.Trace(fmt.Sprintf("Starting protocol %s/%d", proto.Name, proto.Version)) go func() { @@ -396,7 +402,11 @@ func (rw *protoRW) WriteMsg(msg Msg) (err error) { if msg.Code >= rw.Length { return newPeerError(errInvalidMsgCode, "not handled") } + msg.meterCap = rw.cap() + msg.meterCode = msg.Code + msg.Code += rw.offset + select { case <-rw.wstart: err = rw.w.WriteMsg(msg) @@ -425,10 +435,11 @@ func (rw *protoRW) ReadMsg() (Msg, error) { // peer. Sub-protocol independent fields are contained and initialized here, with // protocol specifics delegated to all connected sub-protocols. type PeerInfo struct { - Enode string `json:"enode"` // Node URL - ID string `json:"id"` // Unique node identifier - Name string `json:"name"` // Name of the node, including client type, version, OS, custom data - Caps []string `json:"caps"` // Protocols advertised by this peer + ENR string `json:"enr,omitempty"` // Ethereum Node Record + Enode string `json:"enode"` // Node URL + ID string `json:"id"` // Unique node identifier + Name string `json:"name"` // Name of the node, including client type, version, OS, custom data + Caps []string `json:"caps"` // Protocols advertised by this peer Network struct { LocalAddress string `json:"localAddress"` // Local endpoint of the TCP data connection RemoteAddress string `json:"remoteAddress"` // Remote endpoint of the TCP data connection @@ -448,12 +459,15 @@ func (p *Peer) Info() *PeerInfo { } // Assemble the generic peer metadata info := &PeerInfo{ - Enode: p.Node().String(), + Enode: p.Node().URLv4(), ID: p.ID().String(), Name: p.Name(), Caps: caps, Protocols: make(map[string]interface{}), } + if p.Node().Seq() > 0 { + info.ENR = p.Node().String() + } info.Network.LocalAddress = p.LocalAddr().String() info.Network.RemoteAddress = p.RemoteAddr().String() info.Network.Inbound = p.rw.is(inboundConn) diff --git a/p2p/peer_test.go b/p2p/peer_test.go index 5aa64a32e190..984cc411adb4 100644 --- a/p2p/peer_test.go +++ b/p2p/peer_test.go @@ -24,6 +24,8 @@ import ( "reflect" "testing" "time" + + "github.com/ethereum/go-ethereum/log" ) var discard = Protocol{ @@ -52,7 +54,7 @@ func testPeer(protos []Protocol) (func(), *conn, *Peer, <-chan error) { c2.caps = append(c2.caps, p.cap()) } - peer := newPeer(c1, protos) + peer := newPeer(log.Root(), c1, protos) errc := make(chan error, 1) go func() { _, err := peer.run() diff --git a/p2p/protocol.go b/p2p/protocol.go index 9438ab8e47dd..9ce4c20203c7 100644 --- a/p2p/protocol.go +++ b/p2p/protocol.go @@ -79,5 +79,3 @@ func (cs capsByNameAndVersion) Swap(i, j int) { cs[i], cs[j] = cs[j], cs[i] } func (cs capsByNameAndVersion) Less(i, j int) bool { return cs[i].Name < cs[j].Name || (cs[i].Name == cs[j].Name && cs[i].Version < cs[j].Version) } - -func (capsByNameAndVersion) ENRKey() string { return "cap" } diff --git a/p2p/protocols/accounting.go b/p2p/protocols/accounting.go deleted file mode 100644 index 558247254aee..000000000000 --- a/p2p/protocols/accounting.go +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "time" - - "github.com/ethereum/go-ethereum/metrics" -) - -// define some metrics -var ( - // All metrics are cumulative - - // total amount of units credited - mBalanceCredit = metrics.NewRegisteredCounterForced("account.balance.credit", metrics.AccountingRegistry) - // total amount of units debited - mBalanceDebit = metrics.NewRegisteredCounterForced("account.balance.debit", metrics.AccountingRegistry) - // total amount of bytes credited - mBytesCredit = metrics.NewRegisteredCounterForced("account.bytes.credit", metrics.AccountingRegistry) - // total amount of bytes debited - mBytesDebit = metrics.NewRegisteredCounterForced("account.bytes.debit", metrics.AccountingRegistry) - // total amount of credited messages - mMsgCredit = metrics.NewRegisteredCounterForced("account.msg.credit", metrics.AccountingRegistry) - // total amount of debited messages - mMsgDebit = metrics.NewRegisteredCounterForced("account.msg.debit", metrics.AccountingRegistry) - // how many times local node had to drop remote peers - mPeerDrops = metrics.NewRegisteredCounterForced("account.peerdrops", metrics.AccountingRegistry) - // how many times local node overdrafted and dropped - mSelfDrops = metrics.NewRegisteredCounterForced("account.selfdrops", metrics.AccountingRegistry) -) - -// Prices defines how prices are being passed on to the accounting instance -type Prices interface { - // Return the Price for a message - Price(interface{}) *Price -} - -type Payer bool - -const ( - Sender = Payer(true) - Receiver = Payer(false) -) - -// Price represents the costs of a message -type Price struct { - Value uint64 - PerByte bool // True if the price is per byte or for unit - Payer Payer -} - -// For gives back the price for a message -// A protocol provides the message price in absolute value -// This method then returns the correct signed amount, -// depending on who pays, which is identified by the `payer` argument: -// `Send` will pass a `Sender` payer, `Receive` will pass the `Receiver` argument. -// Thus: If Sending and sender pays, amount positive, otherwise negative -// If Receiving, and receiver pays, amount positive, otherwise negative -func (p *Price) For(payer Payer, size uint32) int64 { - price := p.Value - if p.PerByte { - price *= uint64(size) - } - if p.Payer == payer { - return 0 - int64(price) - } - return int64(price) -} - -// Balance is the actual accounting instance -// Balance defines the operations needed for accounting -// Implementations internally maintain the balance for every peer -type Balance interface { - // Adds amount to the local balance with remote node `peer`; - // positive amount = credit local node - // negative amount = debit local node - Add(amount int64, peer *Peer) error -} - -// Accounting implements the Hook interface -// It interfaces to the balances through the Balance interface, -// while interfacing with protocols and its prices through the Prices interface -type Accounting struct { - Balance // interface to accounting logic - Prices // interface to prices logic -} - -func NewAccounting(balance Balance, po Prices) *Accounting { - ah := &Accounting{ - Prices: po, - Balance: balance, - } - return ah -} - -// SetupAccountingMetrics uses a separate registry for p2p accounting metrics; -// this registry should be independent of any other metrics as it persists at different endpoints. -// It also starts the persisting go-routine which -// at the passed interval writes the metrics to a LevelDB -func SetupAccountingMetrics(reportInterval time.Duration, path string) *AccountingMetrics { - // create the DB and start persisting - return NewAccountingMetrics(metrics.AccountingRegistry, reportInterval, path) -} - -// Send takes a peer, a size and a msg and -// - calculates the cost for the local node sending a msg of size to peer using the Prices interface -// - credits/debits local node using balance interface -func (ah *Accounting) Send(peer *Peer, size uint32, msg interface{}) error { - // get the price for a message (through the protocol spec) - price := ah.Price(msg) - // this message doesn't need accounting - if price == nil { - return nil - } - // evaluate the price for sending messages - costToLocalNode := price.For(Sender, size) - // do the accounting - err := ah.Add(costToLocalNode, peer) - // record metrics: just increase counters for user-facing metrics - ah.doMetrics(costToLocalNode, size, err) - return err -} - -// Receive takes a peer, a size and a msg and -// - calculates the cost for the local node receiving a msg of size from peer using the Prices interface -// - credits/debits local node using balance interface -func (ah *Accounting) Receive(peer *Peer, size uint32, msg interface{}) error { - // get the price for a message (through the protocol spec) - price := ah.Price(msg) - // this message doesn't need accounting - if price == nil { - return nil - } - // evaluate the price for receiving messages - costToLocalNode := price.For(Receiver, size) - // do the accounting - err := ah.Add(costToLocalNode, peer) - // record metrics: just increase counters for user-facing metrics - ah.doMetrics(costToLocalNode, size, err) - return err -} - -// record some metrics -// this is not an error handling. `err` is returned by both `Send` and `Receive` -// `err` will only be non-nil if a limit has been violated (overdraft), in which case the peer has been dropped. -// if the limit has been violated and `err` is thus not nil: -// * if the price is positive, local node has been credited; thus `err` implicitly signals the REMOTE has been dropped -// * if the price is negative, local node has been debited, thus `err` implicitly signals LOCAL node "overdraft" -func (ah *Accounting) doMetrics(price int64, size uint32, err error) { - if price > 0 { - mBalanceCredit.Inc(price) - mBytesCredit.Inc(int64(size)) - mMsgCredit.Inc(1) - if err != nil { - // increase the number of times a remote node has been dropped due to "overdraft" - mPeerDrops.Inc(1) - } - } else { - mBalanceDebit.Inc(price) - mBytesDebit.Inc(int64(size)) - mMsgDebit.Inc(1) - if err != nil { - // increase the number of times the local node has done an "overdraft" in respect to other nodes - mSelfDrops.Inc(1) - } - } -} diff --git a/p2p/protocols/accounting_api.go b/p2p/protocols/accounting_api.go deleted file mode 100644 index 48e2af9feadd..000000000000 --- a/p2p/protocols/accounting_api.go +++ /dev/null @@ -1,94 +0,0 @@ -package protocols - -import ( - "errors" -) - -// Textual version number of accounting API -const AccountingVersion = "1.0" - -var errNoAccountingMetrics = errors.New("accounting metrics not enabled") - -// AccountingApi provides an API to access account related information -type AccountingApi struct { - metrics *AccountingMetrics -} - -// NewAccountingApi creates a new AccountingApi -// m will be used to check if accounting metrics are enabled -func NewAccountingApi(m *AccountingMetrics) *AccountingApi { - return &AccountingApi{m} -} - -// Balance returns local node balance (units credited - units debited) -func (self *AccountingApi) Balance() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - balance := mBalanceCredit.Count() - mBalanceDebit.Count() - return balance, nil -} - -// BalanceCredit returns total amount of units credited by local node -func (self *AccountingApi) BalanceCredit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mBalanceCredit.Count(), nil -} - -// BalanceCredit returns total amount of units debited by local node -func (self *AccountingApi) BalanceDebit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mBalanceDebit.Count(), nil -} - -// BytesCredit returns total amount of bytes credited by local node -func (self *AccountingApi) BytesCredit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mBytesCredit.Count(), nil -} - -// BalanceCredit returns total amount of bytes debited by local node -func (self *AccountingApi) BytesDebit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mBytesDebit.Count(), nil -} - -// MsgCredit returns total amount of messages credited by local node -func (self *AccountingApi) MsgCredit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mMsgCredit.Count(), nil -} - -// MsgDebit returns total amount of messages debited by local node -func (self *AccountingApi) MsgDebit() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mMsgDebit.Count(), nil -} - -// PeerDrops returns number of times when local node had to drop remote peers -func (self *AccountingApi) PeerDrops() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mPeerDrops.Count(), nil -} - -// SelfDrops returns number of times when local node was overdrafted and dropped -func (self *AccountingApi) SelfDrops() (int64, error) { - if self.metrics == nil { - return 0, errNoAccountingMetrics - } - return mSelfDrops.Count(), nil -} diff --git a/p2p/protocols/accounting_simulation_test.go b/p2p/protocols/accounting_simulation_test.go deleted file mode 100644 index e90a1d81d255..000000000000 --- a/p2p/protocols/accounting_simulation_test.go +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "context" - "flag" - "fmt" - "io/ioutil" - "math/rand" - "os" - "path/filepath" - "reflect" - "sync" - "testing" - "time" - - "github.com/mattn/go-colorable" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/rpc" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" -) - -const ( - content = "123456789" -) - -var ( - nodes = flag.Int("nodes", 30, "number of nodes to create (default 30)") - msgs = flag.Int("msgs", 100, "number of messages sent by node (default 100)") - loglevel = flag.Int("loglevel", 0, "verbosity of logs") - rawlog = flag.Bool("rawlog", false, "remove terminal formatting from logs") -) - -func init() { - flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(!*rawlog)))) -} - -//TestAccountingSimulation runs a p2p/simulations simulation -//It creates a *nodes number of nodes, connects each one with each other, -//then sends out a random selection of messages up to *msgs amount of messages -//from the test protocol spec. -//The spec has some accounted messages defined through the Prices interface. -//The test does accounting for all the message exchanged, and then checks -//that every node has the same balance with a peer, but with opposite signs. -//Balance(AwithB) = 0 - Balance(BwithA) or Abs|Balance(AwithB)| == Abs|Balance(BwithA)| -func TestAccountingSimulation(t *testing.T) { - //setup the balances objects for every node - bal := newBalances(*nodes) - //setup the metrics system or tests will fail trying to write metrics - dir, err := ioutil.TempDir("", "account-sim") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - SetupAccountingMetrics(1*time.Second, filepath.Join(dir, "metrics.db")) - //define the node.Service for this test - services := adapters.Services{ - "accounting": func(ctx *adapters.ServiceContext) (node.Service, error) { - return bal.newNode(), nil - }, - } - //setup the simulation - adapter := adapters.NewSimAdapter(services) - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{DefaultService: "accounting"}) - defer net.Shutdown() - - // we send msgs messages per node, wait for all messages to arrive - bal.wg.Add(*nodes * *msgs) - trigger := make(chan enode.ID) - go func() { - // wait for all of them to arrive - bal.wg.Wait() - // then trigger a check - // the selected node for the trigger is irrelevant, - // we just want to trigger the end of the simulation - trigger <- net.Nodes[0].ID() - }() - - // create nodes and start them - for i := 0; i < *nodes; i++ { - conf := adapters.RandomNodeConfig() - bal.id2n[conf.ID] = i - if _, err := net.NewNodeWithConfig(conf); err != nil { - t.Fatal(err) - } - if err := net.Start(conf.ID); err != nil { - t.Fatal(err) - } - } - // fully connect nodes - for i, n := range net.Nodes { - for _, m := range net.Nodes[i+1:] { - if err := net.Connect(n.ID(), m.ID()); err != nil { - t.Fatal(err) - } - } - } - - // empty action - action := func(ctx context.Context) error { - return nil - } - // check always checks out - check := func(ctx context.Context, id enode.ID) (bool, error) { - return true, nil - } - - // run simulation - timeout := 30 * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - result := simulations.NewSimulation(net).Run(ctx, &simulations.Step{ - Action: action, - Trigger: trigger, - Expect: &simulations.Expectation{ - Nodes: []enode.ID{net.Nodes[0].ID()}, - Check: check, - }, - }) - - if result.Error != nil { - t.Fatal(result.Error) - } - - // check if balance matrix is symmetric - if err := bal.symmetric(); err != nil { - t.Fatal(err) - } -} - -// matrix is a matrix of nodes and its balances -// matrix is in fact a linear array of size n*n, -// so the balance for any node A with B is at index -// A*n + B, while the balance of node B with A is at -// B*n + A -// (n entries in the array will not be filled - -// the balance of a node with itself) -type matrix struct { - n int //number of nodes - m []int64 //array of balances -} - -// create a new matrix -func newMatrix(n int) *matrix { - return &matrix{ - n: n, - m: make([]int64, n*n), - } -} - -// called from the testBalance's Add accounting function: register balance change -func (m *matrix) add(i, j int, v int64) error { - // index for the balance of local node i with remote nodde j is - // i * number of nodes + remote node - mi := i*m.n + j - // register that balance - m.m[mi] += v - return nil -} - -// check that the balances are symmetric: -// balance of node i with node j is the same as j with i but with inverted signs -func (m *matrix) symmetric() error { - //iterate all nodes - for i := 0; i < m.n; i++ { - //iterate starting +1 - for j := i + 1; j < m.n; j++ { - log.Debug("bal", "1", i, "2", j, "i,j", m.m[i*m.n+j], "j,i", m.m[j*m.n+i]) - if m.m[i*m.n+j] != -m.m[j*m.n+i] { - return fmt.Errorf("value mismatch. m[%v, %v] = %v; m[%v, %v] = %v", i, j, m.m[i*m.n+j], j, i, m.m[j*m.n+i]) - } - } - } - return nil -} - -// all the balances -type balances struct { - i int - *matrix - id2n map[enode.ID]int - wg *sync.WaitGroup -} - -func newBalances(n int) *balances { - return &balances{ - matrix: newMatrix(n), - id2n: make(map[enode.ID]int), - wg: &sync.WaitGroup{}, - } -} - -// create a new testNode for every node created as part of the service -func (b *balances) newNode() *testNode { - defer func() { b.i++ }() - return &testNode{ - bal: b, - i: b.i, - peers: make([]*testPeer, b.n), //a node will be connected to n-1 peers - } -} - -type testNode struct { - bal *balances - i int - lock sync.Mutex - peers []*testPeer - peerCount int -} - -// do the accounting for the peer's test protocol -// testNode implements protocols.Balance -func (t *testNode) Add(a int64, p *Peer) error { - //get the index for the remote peer - remote := t.bal.id2n[p.ID()] - log.Debug("add", "local", t.i, "remote", remote, "amount", a) - return t.bal.add(t.i, remote, a) -} - -//run the p2p protocol -//for every node, represented by testNode, create a remote testPeer -func (t *testNode) run(p *p2p.Peer, rw p2p.MsgReadWriter) error { - spec := createTestSpec() - //create accounting hook - spec.Hook = NewAccounting(t, &dummyPrices{}) - - //create a peer for this node - tp := &testPeer{NewPeer(p, rw, spec), t.i, t.bal.id2n[p.ID()], t.bal.wg} - t.lock.Lock() - t.peers[t.bal.id2n[p.ID()]] = tp - t.peerCount++ - if t.peerCount == t.bal.n-1 { - //when all peer connections are established, start sending messages from this peer - go t.send() - } - t.lock.Unlock() - return tp.Run(tp.handle) -} - -// p2p message receive handler function -func (tp *testPeer) handle(ctx context.Context, msg interface{}) error { - tp.wg.Done() - log.Debug("receive", "from", tp.remote, "to", tp.local, "type", reflect.TypeOf(msg), "msg", msg) - return nil -} - -type testPeer struct { - *Peer - local, remote int - wg *sync.WaitGroup -} - -func (t *testNode) send() { - log.Debug("start sending") - for i := 0; i < *msgs; i++ { - //determine randomly to which peer to send - whom := rand.Intn(t.bal.n - 1) - if whom >= t.i { - whom++ - } - t.lock.Lock() - p := t.peers[whom] - t.lock.Unlock() - - //determine a random message from the spec's messages to be sent - which := rand.Intn(len(p.spec.Messages)) - msg := p.spec.Messages[which] - switch msg.(type) { - case *perBytesMsgReceiverPays: - msg = &perBytesMsgReceiverPays{Content: content[:rand.Intn(len(content))]} - case *perBytesMsgSenderPays: - msg = &perBytesMsgSenderPays{Content: content[:rand.Intn(len(content))]} - } - log.Debug("send", "from", t.i, "to", whom, "type", reflect.TypeOf(msg), "msg", msg) - p.Send(context.TODO(), msg) - } -} - -// define the protocol -func (t *testNode) Protocols() []p2p.Protocol { - return []p2p.Protocol{{ - Length: 100, - Run: t.run, - }} -} - -func (t *testNode) APIs() []rpc.API { - return nil -} - -func (t *testNode) Start(server *p2p.Server) error { - return nil -} - -func (t *testNode) Stop() error { - return nil -} diff --git a/p2p/protocols/accounting_test.go b/p2p/protocols/accounting_test.go deleted file mode 100644 index 3810ae2c9b55..000000000000 --- a/p2p/protocols/accounting_test.go +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "testing" - - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rlp" -) - -//dummy Balance implementation -type dummyBalance struct { - amount int64 - peer *Peer -} - -//dummy Prices implementation -type dummyPrices struct{} - -//a dummy message which needs size based accounting -//sender pays -type perBytesMsgSenderPays struct { - Content string -} - -//a dummy message which needs size based accounting -//receiver pays -type perBytesMsgReceiverPays struct { - Content string -} - -//a dummy message which is paid for per unit -//sender pays -type perUnitMsgSenderPays struct{} - -//receiver pays -type perUnitMsgReceiverPays struct{} - -//a dummy message which has zero as its price -type zeroPriceMsg struct{} - -//a dummy message which has no accounting -type nilPriceMsg struct{} - -//return the price for the defined messages -func (d *dummyPrices) Price(msg interface{}) *Price { - switch msg.(type) { - //size based message cost, receiver pays - case *perBytesMsgReceiverPays: - return &Price{ - PerByte: true, - Value: uint64(100), - Payer: Receiver, - } - //size based message cost, sender pays - case *perBytesMsgSenderPays: - return &Price{ - PerByte: true, - Value: uint64(100), - Payer: Sender, - } - //unitary cost, receiver pays - case *perUnitMsgReceiverPays: - return &Price{ - PerByte: false, - Value: uint64(99), - Payer: Receiver, - } - //unitary cost, sender pays - case *perUnitMsgSenderPays: - return &Price{ - PerByte: false, - Value: uint64(99), - Payer: Sender, - } - case *zeroPriceMsg: - return &Price{ - PerByte: false, - Value: uint64(0), - Payer: Sender, - } - case *nilPriceMsg: - return nil - } - return nil -} - -//dummy accounting implementation, only stores values for later check -func (d *dummyBalance) Add(amount int64, peer *Peer) error { - d.amount = amount - d.peer = peer - return nil -} - -type testCase struct { - msg interface{} - size uint32 - sendResult int64 - recvResult int64 -} - -//lowest level unit test -func TestBalance(t *testing.T) { - //create instances - balance := &dummyBalance{} - prices := &dummyPrices{} - //create the spec - spec := createTestSpec() - //create the accounting hook for the spec - acc := NewAccounting(balance, prices) - //create a peer - id := adapters.RandomNodeConfig().ID - p := p2p.NewPeer(id, "testPeer", nil) - peer := NewPeer(p, &dummyRW{}, spec) - //price depends on size, receiver pays - msg := &perBytesMsgReceiverPays{Content: "testBalance"} - size, _ := rlp.EncodeToBytes(msg) - - testCases := []testCase{ - { - msg, - uint32(len(size)), - int64(len(size) * 100), - int64(len(size) * -100), - }, - { - &perBytesMsgSenderPays{Content: "testBalance"}, - uint32(len(size)), - int64(len(size) * -100), - int64(len(size) * 100), - }, - { - &perUnitMsgSenderPays{}, - 0, - int64(-99), - int64(99), - }, - { - &perUnitMsgReceiverPays{}, - 0, - int64(99), - int64(-99), - }, - { - &zeroPriceMsg{}, - 0, - int64(0), - int64(0), - }, - { - &nilPriceMsg{}, - 0, - int64(0), - int64(0), - }, - } - checkAccountingTestCases(t, testCases, acc, peer, balance, true) - checkAccountingTestCases(t, testCases, acc, peer, balance, false) -} - -func checkAccountingTestCases(t *testing.T, cases []testCase, acc *Accounting, peer *Peer, balance *dummyBalance, send bool) { - for _, c := range cases { - var err error - var expectedResult int64 - //reset balance before every check - balance.amount = 0 - if send { - err = acc.Send(peer, c.size, c.msg) - expectedResult = c.sendResult - } else { - err = acc.Receive(peer, c.size, c.msg) - expectedResult = c.recvResult - } - - checkResults(t, err, balance, peer, expectedResult) - } -} - -func checkResults(t *testing.T, err error, balance *dummyBalance, peer *Peer, result int64) { - if err != nil { - t.Fatal(err) - } - if balance.peer != peer { - t.Fatalf("expected Add to be called with peer %v, got %v", peer, balance.peer) - } - if balance.amount != result { - t.Fatalf("Expected balance to be %d but is %d", result, balance.amount) - } -} - -//create a test spec -func createTestSpec() *Spec { - spec := &Spec{ - Name: "test", - Version: 42, - MaxMsgSize: 10 * 1024, - Messages: []interface{}{ - &perBytesMsgReceiverPays{}, - &perBytesMsgSenderPays{}, - &perUnitMsgReceiverPays{}, - &perUnitMsgSenderPays{}, - &zeroPriceMsg{}, - &nilPriceMsg{}, - }, - } - return spec -} diff --git a/p2p/protocols/protocol.go b/p2p/protocols/protocol.go deleted file mode 100644 index bf879b9851a8..000000000000 --- a/p2p/protocols/protocol.go +++ /dev/null @@ -1,439 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Package protocols is an extension to p2p. It offers a user friendly simple way to define -devp2p subprotocols by abstracting away code standardly shared by protocols. - -* automate assigments of code indexes to messages -* automate RLP decoding/encoding based on reflecting -* provide the forever loop to read incoming messages -* standardise error handling related to communication -* standardised handshake negotiation -* TODO: automatic generation of wire protocol specification for peers - -*/ -package protocols - -import ( - "bufio" - "bytes" - "context" - "fmt" - "io" - "reflect" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/tracing" - opentracing "github.com/opentracing/opentracing-go" -) - -// error codes used by this protocol scheme -const ( - ErrMsgTooLong = iota - ErrDecode - ErrWrite - ErrInvalidMsgCode - ErrInvalidMsgType - ErrHandshake - ErrNoHandler - ErrHandler -) - -// error description strings associated with the codes -var errorToString = map[int]string{ - ErrMsgTooLong: "Message too long", - ErrDecode: "Invalid message (RLP error)", - ErrWrite: "Error sending message", - ErrInvalidMsgCode: "Invalid message code", - ErrInvalidMsgType: "Invalid message type", - ErrHandshake: "Handshake error", - ErrNoHandler: "No handler registered error", - ErrHandler: "Message handler error", -} - -/* -Error implements the standard go error interface. -Use: - - errorf(code, format, params ...interface{}) - -Prints as: - - :
    - -where description is given by code in errorToString -and details is fmt.Sprintf(format, params...) - -exported field Code can be checked -*/ -type Error struct { - Code int - message string - format string - params []interface{} -} - -func (e Error) Error() (message string) { - if len(e.message) == 0 { - name, ok := errorToString[e.Code] - if !ok { - panic("invalid message code") - } - e.message = name - if e.format != "" { - e.message += ": " + fmt.Sprintf(e.format, e.params...) - } - } - return e.message -} - -func errorf(code int, format string, params ...interface{}) *Error { - return &Error{ - Code: code, - format: format, - params: params, - } -} - -// WrappedMsg is used to propagate marshalled context alongside message payloads -type WrappedMsg struct { - Context []byte - Size uint32 - Payload []byte -} - -//For accounting, the design is to allow the Spec to describe which and how its messages are priced -//To access this functionality, we provide a Hook interface which will call accounting methods -//NOTE: there could be more such (horizontal) hooks in the future -type Hook interface { - //A hook for sending messages - Send(peer *Peer, size uint32, msg interface{}) error - //A hook for receiving messages - Receive(peer *Peer, size uint32, msg interface{}) error -} - -// Spec is a protocol specification including its name and version as well as -// the types of messages which are exchanged -type Spec struct { - // Name is the name of the protocol, often a three-letter word - Name string - - // Version is the version number of the protocol - Version uint - - // MaxMsgSize is the maximum accepted length of the message payload - MaxMsgSize uint32 - - // Messages is a list of message data types which this protocol uses, with - // each message type being sent with its array index as the code (so - // [&foo{}, &bar{}, &baz{}] would send foo, bar and baz with codes - // 0, 1 and 2 respectively) - // each message must have a single unique data type - Messages []interface{} - - //hook for accounting (could be extended to multiple hooks in the future) - Hook Hook - - initOnce sync.Once - codes map[reflect.Type]uint64 - types map[uint64]reflect.Type -} - -func (s *Spec) init() { - s.initOnce.Do(func() { - s.codes = make(map[reflect.Type]uint64, len(s.Messages)) - s.types = make(map[uint64]reflect.Type, len(s.Messages)) - for i, msg := range s.Messages { - code := uint64(i) - typ := reflect.TypeOf(msg) - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - } - s.codes[typ] = code - s.types[code] = typ - } - }) -} - -// Length returns the number of message types in the protocol -func (s *Spec) Length() uint64 { - return uint64(len(s.Messages)) -} - -// GetCode returns the message code of a type, and boolean second argument is -// false if the message type is not found -func (s *Spec) GetCode(msg interface{}) (uint64, bool) { - s.init() - typ := reflect.TypeOf(msg) - if typ.Kind() == reflect.Ptr { - typ = typ.Elem() - } - code, ok := s.codes[typ] - return code, ok -} - -// NewMsg construct a new message type given the code -func (s *Spec) NewMsg(code uint64) (interface{}, bool) { - s.init() - typ, ok := s.types[code] - if !ok { - return nil, false - } - return reflect.New(typ).Interface(), true -} - -// Peer represents a remote peer or protocol instance that is running on a peer connection with -// a remote peer -type Peer struct { - *p2p.Peer // the p2p.Peer object representing the remote - rw p2p.MsgReadWriter // p2p.MsgReadWriter to send messages to and read messages from - spec *Spec -} - -// NewPeer constructs a new peer -// this constructor is called by the p2p.Protocol#Run function -// the first two arguments are the arguments passed to p2p.Protocol.Run function -// the third argument is the Spec describing the protocol -func NewPeer(p *p2p.Peer, rw p2p.MsgReadWriter, spec *Spec) *Peer { - return &Peer{ - Peer: p, - rw: rw, - spec: spec, - } -} - -// Run starts the forever loop that handles incoming messages -// called within the p2p.Protocol#Run function -// the handler argument is a function which is called for each message received -// from the remote peer, a returned error causes the loop to exit -// resulting in disconnection -func (p *Peer) Run(handler func(ctx context.Context, msg interface{}) error) error { - for { - if err := p.handleIncoming(handler); err != nil { - if err != io.EOF { - metrics.GetOrRegisterCounter("peer.handleincoming.error", nil).Inc(1) - log.Error("peer.handleIncoming", "err", err) - } - - return err - } - } -} - -// Drop disconnects a peer. -// TODO: may need to implement protocol drop only? don't want to kick off the peer -// if they are useful for other protocols -func (p *Peer) Drop(err error) { - p.Disconnect(p2p.DiscSubprotocolError) -} - -// Send takes a message, encodes it in RLP, finds the right message code and sends the -// message off to the peer -// this low level call will be wrapped by libraries providing routed or broadcast sends -// but often just used to forward and push messages to directly connected peers -func (p *Peer) Send(ctx context.Context, msg interface{}) error { - defer metrics.GetOrRegisterResettingTimer("peer.send_t", nil).UpdateSince(time.Now()) - metrics.GetOrRegisterCounter("peer.send", nil).Inc(1) - - var b bytes.Buffer - if tracing.Enabled { - writer := bufio.NewWriter(&b) - - tracer := opentracing.GlobalTracer() - - sctx := spancontext.FromContext(ctx) - - if sctx != nil { - err := tracer.Inject( - sctx, - opentracing.Binary, - writer) - if err != nil { - return err - } - } - - writer.Flush() - } - - r, err := rlp.EncodeToBytes(msg) - if err != nil { - return err - } - - wmsg := WrappedMsg{ - Context: b.Bytes(), - Size: uint32(len(r)), - Payload: r, - } - - //if the accounting hook is set, call it - if p.spec.Hook != nil { - err := p.spec.Hook.Send(p, wmsg.Size, msg) - if err != nil { - p.Drop(err) - return err - } - } - - code, found := p.spec.GetCode(msg) - if !found { - return errorf(ErrInvalidMsgType, "%v", code) - } - return p2p.Send(p.rw, code, wmsg) -} - -// handleIncoming(code) -// is called each cycle of the main forever loop that dispatches incoming messages -// if this returns an error the loop returns and the peer is disconnected with the error -// this generic handler -// * checks message size, -// * checks for out-of-range message codes, -// * handles decoding with reflection, -// * call handlers as callbacks -func (p *Peer) handleIncoming(handle func(ctx context.Context, msg interface{}) error) error { - msg, err := p.rw.ReadMsg() - if err != nil { - return err - } - // make sure that the payload has been fully consumed - defer msg.Discard() - - if msg.Size > p.spec.MaxMsgSize { - return errorf(ErrMsgTooLong, "%v > %v", msg.Size, p.spec.MaxMsgSize) - } - - // unmarshal wrapped msg, which might contain context - var wmsg WrappedMsg - err = msg.Decode(&wmsg) - if err != nil { - log.Error(err.Error()) - return err - } - - ctx := context.Background() - - // if tracing is enabled and the context coming within the request is - // not empty, try to unmarshal it - if tracing.Enabled && len(wmsg.Context) > 0 { - var sctx opentracing.SpanContext - - tracer := opentracing.GlobalTracer() - sctx, err = tracer.Extract( - opentracing.Binary, - bytes.NewReader(wmsg.Context)) - if err != nil { - log.Error(err.Error()) - return err - } - - ctx = spancontext.WithContext(ctx, sctx) - } - - val, ok := p.spec.NewMsg(msg.Code) - if !ok { - return errorf(ErrInvalidMsgCode, "%v", msg.Code) - } - if err := rlp.DecodeBytes(wmsg.Payload, val); err != nil { - return errorf(ErrDecode, "<= %v: %v", msg, err) - } - - //if the accounting hook is set, call it - if p.spec.Hook != nil { - err := p.spec.Hook.Receive(p, wmsg.Size, val) - if err != nil { - return err - } - } - - // call the registered handler callbacks - // a registered callback take the decoded message as argument as an interface - // which the handler is supposed to cast to the appropriate type - // it is entirely safe not to check the cast in the handler since the handler is - // chosen based on the proper type in the first place - if err := handle(ctx, val); err != nil { - return errorf(ErrHandler, "(msg code %v): %v", msg.Code, err) - } - return nil -} - -// Handshake negotiates a handshake on the peer connection -// * arguments -// * context -// * the local handshake to be sent to the remote peer -// * function to be called on the remote handshake (can be nil) -// * expects a remote handshake back of the same type -// * the dialing peer needs to send the handshake first and then waits for remote -// * the listening peer waits for the remote handshake and then sends it -// returns the remote handshake and an error -func (p *Peer) Handshake(ctx context.Context, hs interface{}, verify func(interface{}) error) (rhs interface{}, err error) { - if _, ok := p.spec.GetCode(hs); !ok { - return nil, errorf(ErrHandshake, "unknown handshake message type: %T", hs) - } - errc := make(chan error, 2) - handle := func(ctx context.Context, msg interface{}) error { - rhs = msg - if verify != nil { - return verify(rhs) - } - return nil - } - send := func() { errc <- p.Send(ctx, hs) } - receive := func() { errc <- p.handleIncoming(handle) } - - go func() { - if p.Inbound() { - receive() - send() - } else { - send() - receive() - } - }() - - for i := 0; i < 2; i++ { - select { - case err = <-errc: - case <-ctx.Done(): - err = ctx.Err() - } - if err != nil { - return nil, errorf(ErrHandshake, err.Error()) - } - } - return rhs, nil -} - -// HasCap returns true if Peer has a capability -// with provided name. -func (p *Peer) HasCap(capName string) (yes bool) { - if p == nil || p.Peer == nil { - return false - } - for _, c := range p.Caps() { - if c.Name == capName { - return true - } - } - return false -} diff --git a/p2p/protocols/protocol_test.go b/p2p/protocols/protocol_test.go deleted file mode 100644 index 4bc1e547ee2e..000000000000 --- a/p2p/protocols/protocol_test.go +++ /dev/null @@ -1,590 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "bytes" - "context" - "errors" - "fmt" - "testing" - "time" - - "github.com/ethereum/go-ethereum/rlp" - - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" -) - -// handshake message type -type hs0 struct { - C uint -} - -// message to kill/drop the peer with nodeID -type kill struct { - C enode.ID -} - -// message to drop connection -type drop struct { -} - -/// protoHandshake represents module-independent aspects of the protocol and is -// the first message peers send and receive as part the initial exchange -type protoHandshake struct { - Version uint // local and remote peer should have identical version - NetworkID string // local and remote peer should have identical network id -} - -// checkProtoHandshake verifies local and remote protoHandshakes match -func checkProtoHandshake(testVersion uint, testNetworkID string) func(interface{}) error { - return func(rhs interface{}) error { - remote := rhs.(*protoHandshake) - if remote.NetworkID != testNetworkID { - return fmt.Errorf("%s (!= %s)", remote.NetworkID, testNetworkID) - } - - if remote.Version != testVersion { - return fmt.Errorf("%d (!= %d)", remote.Version, testVersion) - } - return nil - } -} - -// newProtocol sets up a protocol -// the run function here demonstrates a typical protocol using peerPool, handshake -// and messages registered to handlers -func newProtocol(pp *p2ptest.TestPeerPool) func(*p2p.Peer, p2p.MsgReadWriter) error { - spec := &Spec{ - Name: "test", - Version: 42, - MaxMsgSize: 10 * 1024, - Messages: []interface{}{ - protoHandshake{}, - hs0{}, - kill{}, - drop{}, - }, - } - return func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := NewPeer(p, rw, spec) - - // initiate one-off protohandshake and check validity - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - phs := &protoHandshake{42, "420"} - hsCheck := checkProtoHandshake(phs.Version, phs.NetworkID) - _, err := peer.Handshake(ctx, phs, hsCheck) - if err != nil { - return err - } - - lhs := &hs0{42} - // module handshake demonstrating a simple repeatable exchange of same-type message - hs, err := peer.Handshake(ctx, lhs, nil) - if err != nil { - return err - } - - if rmhs := hs.(*hs0); rmhs.C > lhs.C { - return fmt.Errorf("handshake mismatch remote %v > local %v", rmhs.C, lhs.C) - } - - handle := func(ctx context.Context, msg interface{}) error { - switch msg := msg.(type) { - - case *protoHandshake: - return errors.New("duplicate handshake") - - case *hs0: - rhs := msg - if rhs.C > lhs.C { - return fmt.Errorf("handshake mismatch remote %v > local %v", rhs.C, lhs.C) - } - lhs.C += rhs.C - return peer.Send(ctx, lhs) - - case *kill: - // demonstrates use of peerPool, killing another peer connection as a response to a message - id := msg.C - pp.Get(id).Drop(errors.New("killed")) - return nil - - case *drop: - // for testing we can trigger self induced disconnect upon receiving drop message - return errors.New("dropped") - - default: - return fmt.Errorf("unknown message type: %T", msg) - } - } - - pp.Add(peer) - defer pp.Remove(peer) - return peer.Run(handle) - } -} - -func protocolTester(pp *p2ptest.TestPeerPool) *p2ptest.ProtocolTester { - conf := adapters.RandomNodeConfig() - return p2ptest.NewProtocolTester(conf.ID, 2, newProtocol(pp)) -} - -func protoHandshakeExchange(id enode.ID, proto *protoHandshake) []p2ptest.Exchange { - - return []p2ptest.Exchange{ - { - Expects: []p2ptest.Expect{ - { - Code: 0, - Msg: &protoHandshake{42, "420"}, - Peer: id, - }, - }, - }, - { - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: proto, - Peer: id, - }, - }, - }, - } -} - -func runProtoHandshake(t *testing.T, proto *protoHandshake, errs ...error) { - pp := p2ptest.NewTestPeerPool() - s := protocolTester(pp) - // TODO: make this more than one handshake - node := s.Nodes[0] - if err := s.TestExchanges(protoHandshakeExchange(node.ID(), proto)...); err != nil { - t.Fatal(err) - } - var disconnects []*p2ptest.Disconnect - for i, err := range errs { - disconnects = append(disconnects, &p2ptest.Disconnect{Peer: s.Nodes[i].ID(), Error: err}) - } - if err := s.TestDisconnected(disconnects...); err != nil { - t.Fatal(err) - } -} - -type dummyHook struct { - peer *Peer - size uint32 - msg interface{} - send bool - err error - waitC chan struct{} -} - -type dummyMsg struct { - Content string -} - -func (d *dummyHook) Send(peer *Peer, size uint32, msg interface{}) error { - d.peer = peer - d.size = size - d.msg = msg - d.send = true - return d.err -} - -func (d *dummyHook) Receive(peer *Peer, size uint32, msg interface{}) error { - d.peer = peer - d.size = size - d.msg = msg - d.send = false - d.waitC <- struct{}{} - return d.err -} - -func TestProtocolHook(t *testing.T) { - testHook := &dummyHook{ - waitC: make(chan struct{}, 1), - } - spec := &Spec{ - Name: "test", - Version: 42, - MaxMsgSize: 10 * 1024, - Messages: []interface{}{ - dummyMsg{}, - }, - Hook: testHook, - } - - runFunc := func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := NewPeer(p, rw, spec) - ctx := context.TODO() - err := peer.Send(ctx, &dummyMsg{ - Content: "handshake"}) - - if err != nil { - t.Fatal(err) - } - - handle := func(ctx context.Context, msg interface{}) error { - return nil - } - - return peer.Run(handle) - } - - conf := adapters.RandomNodeConfig() - tester := p2ptest.NewProtocolTester(conf.ID, 2, runFunc) - err := tester.TestExchanges(p2ptest.Exchange{ - Expects: []p2ptest.Expect{ - { - Code: 0, - Msg: &dummyMsg{Content: "handshake"}, - Peer: tester.Nodes[0].ID(), - }, - }, - }) - if err != nil { - t.Fatal(err) - } - if testHook.msg == nil || testHook.msg.(*dummyMsg).Content != "handshake" { - t.Fatal("Expected msg to be set, but it is not") - } - if !testHook.send { - t.Fatal("Expected a send message, but it is not") - } - if testHook.peer == nil || testHook.peer.ID() != tester.Nodes[0].ID() { - t.Fatal("Expected peer ID to be set correctly, but it is not") - } - if testHook.size != 11 { //11 is the length of the encoded message - t.Fatalf("Expected size to be %d, but it is %d ", 1, testHook.size) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &dummyMsg{Content: "response"}, - Peer: tester.Nodes[1].ID(), - }, - }, - }) - - <-testHook.waitC - - if err != nil { - t.Fatal(err) - } - if testHook.msg == nil || testHook.msg.(*dummyMsg).Content != "response" { - t.Fatal("Expected msg to be set, but it is not") - } - if testHook.send { - t.Fatal("Expected a send message, but it is not") - } - if testHook.peer == nil || testHook.peer.ID() != tester.Nodes[1].ID() { - t.Fatal("Expected peer ID to be set correctly, but it is not") - } - if testHook.size != 10 { //11 is the length of the encoded message - t.Fatalf("Expected size to be %d, but it is %d ", 1, testHook.size) - } - - testHook.err = fmt.Errorf("dummy error") - err = tester.TestExchanges(p2ptest.Exchange{ - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &dummyMsg{Content: "response"}, - Peer: tester.Nodes[1].ID(), - }, - }, - }) - - <-testHook.waitC - - time.Sleep(100 * time.Millisecond) - err = tester.TestDisconnected(&p2ptest.Disconnect{Peer: tester.Nodes[1].ID(), Error: testHook.err}) - if err != nil { - t.Fatalf("Expected a specific disconnect error, but got different one: %v", err) - } - -} - -//We need to test that if the hook is not defined, then message infrastructure -//(send,receive) still works -func TestNoHook(t *testing.T) { - //create a test spec - spec := createTestSpec() - //a random node - id := adapters.RandomNodeConfig().ID - //a peer - p := p2p.NewPeer(id, "testPeer", nil) - rw := &dummyRW{} - peer := NewPeer(p, rw, spec) - ctx := context.TODO() - msg := &perBytesMsgSenderPays{Content: "testBalance"} - //send a message - err := peer.Send(ctx, msg) - if err != nil { - t.Fatal(err) - } - //simulate receiving a message - rw.msg = msg - peer.handleIncoming(func(ctx context.Context, msg interface{}) error { - return nil - }) - //all should just work and not result in any error -} - -func TestProtoHandshakeVersionMismatch(t *testing.T) { - runProtoHandshake(t, &protoHandshake{41, "420"}, errorf(ErrHandshake, errorf(ErrHandler, "(msg code 0): 41 (!= 42)").Error())) -} - -func TestProtoHandshakeNetworkIDMismatch(t *testing.T) { - runProtoHandshake(t, &protoHandshake{42, "421"}, errorf(ErrHandshake, errorf(ErrHandler, "(msg code 0): 421 (!= 420)").Error())) -} - -func TestProtoHandshakeSuccess(t *testing.T) { - runProtoHandshake(t, &protoHandshake{42, "420"}) -} - -func moduleHandshakeExchange(id enode.ID, resp uint) []p2ptest.Exchange { - - return []p2ptest.Exchange{ - { - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &hs0{42}, - Peer: id, - }, - }, - }, - { - Triggers: []p2ptest.Trigger{ - { - Code: 1, - Msg: &hs0{resp}, - Peer: id, - }, - }, - }, - } -} - -func runModuleHandshake(t *testing.T, resp uint, errs ...error) { - pp := p2ptest.NewTestPeerPool() - s := protocolTester(pp) - node := s.Nodes[0] - if err := s.TestExchanges(protoHandshakeExchange(node.ID(), &protoHandshake{42, "420"})...); err != nil { - t.Fatal(err) - } - if err := s.TestExchanges(moduleHandshakeExchange(node.ID(), resp)...); err != nil { - t.Fatal(err) - } - var disconnects []*p2ptest.Disconnect - for i, err := range errs { - disconnects = append(disconnects, &p2ptest.Disconnect{Peer: s.Nodes[i].ID(), Error: err}) - } - if err := s.TestDisconnected(disconnects...); err != nil { - t.Fatal(err) - } -} - -func TestModuleHandshakeError(t *testing.T) { - runModuleHandshake(t, 43, fmt.Errorf("handshake mismatch remote 43 > local 42")) -} - -func TestModuleHandshakeSuccess(t *testing.T) { - runModuleHandshake(t, 42) -} - -// testing complex interactions over multiple peers, relaying, dropping -func testMultiPeerSetup(a, b enode.ID) []p2ptest.Exchange { - - return []p2ptest.Exchange{ - { - Label: "primary handshake", - Expects: []p2ptest.Expect{ - { - Code: 0, - Msg: &protoHandshake{42, "420"}, - Peer: a, - }, - { - Code: 0, - Msg: &protoHandshake{42, "420"}, - Peer: b, - }, - }, - }, - { - Label: "module handshake", - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &protoHandshake{42, "420"}, - Peer: a, - }, - { - Code: 0, - Msg: &protoHandshake{42, "420"}, - Peer: b, - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &hs0{42}, - Peer: a, - }, - { - Code: 1, - Msg: &hs0{42}, - Peer: b, - }, - }, - }, - - {Label: "alternative module handshake", Triggers: []p2ptest.Trigger{{Code: 1, Msg: &hs0{41}, Peer: a}, - {Code: 1, Msg: &hs0{41}, Peer: b}}}, - {Label: "repeated module handshake", Triggers: []p2ptest.Trigger{{Code: 1, Msg: &hs0{1}, Peer: a}}}, - {Label: "receiving repeated module handshake", Expects: []p2ptest.Expect{{Code: 1, Msg: &hs0{43}, Peer: a}}}} -} - -func runMultiplePeers(t *testing.T, peer int, errs ...error) { - pp := p2ptest.NewTestPeerPool() - s := protocolTester(pp) - - if err := s.TestExchanges(testMultiPeerSetup(s.Nodes[0].ID(), s.Nodes[1].ID())...); err != nil { - t.Fatal(err) - } - // after some exchanges of messages, we can test state changes - // here this is simply demonstrated by the peerPool - // after the handshake negotiations peers must be added to the pool - // time.Sleep(1) - tick := time.NewTicker(10 * time.Millisecond) - timeout := time.NewTimer(1 * time.Second) -WAIT: - for { - select { - case <-tick.C: - if pp.Has(s.Nodes[0].ID()) { - break WAIT - } - case <-timeout.C: - t.Fatal("timeout") - } - } - if !pp.Has(s.Nodes[1].ID()) { - t.Fatalf("missing peer test-1: %v (%v)", pp, s.Nodes) - } - - // peer 0 sends kill request for peer with index - err := s.TestExchanges(p2ptest.Exchange{ - Triggers: []p2ptest.Trigger{ - { - Code: 2, - Msg: &kill{s.Nodes[peer].ID()}, - Peer: s.Nodes[0].ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - // the peer not killed sends a drop request - err = s.TestExchanges(p2ptest.Exchange{ - Triggers: []p2ptest.Trigger{ - { - Code: 3, - Msg: &drop{}, - Peer: s.Nodes[(peer+1)%2].ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - // check the actual discconnect errors on the individual peers - var disconnects []*p2ptest.Disconnect - for i, err := range errs { - disconnects = append(disconnects, &p2ptest.Disconnect{Peer: s.Nodes[i].ID(), Error: err}) - } - if err := s.TestDisconnected(disconnects...); err != nil { - t.Fatal(err) - } - // test if disconnected peers have been removed from peerPool - if pp.Has(s.Nodes[peer].ID()) { - t.Fatalf("peer test-%v not dropped: %v (%v)", peer, pp, s.Nodes) - } - -} -func XTestMultiplePeersDropSelf(t *testing.T) { - runMultiplePeers(t, 0, - fmt.Errorf("subprotocol error"), - fmt.Errorf("Message handler error: (msg code 3): dropped"), - ) -} - -func XTestMultiplePeersDropOther(t *testing.T) { - runMultiplePeers(t, 1, - fmt.Errorf("Message handler error: (msg code 3): dropped"), - fmt.Errorf("subprotocol error"), - ) -} - -//dummy implementation of a MsgReadWriter -//this allows for quick and easy unit tests without -//having to build up the complete protocol -type dummyRW struct { - msg interface{} - size uint32 - code uint64 -} - -func (d *dummyRW) WriteMsg(msg p2p.Msg) error { - return nil -} - -func (d *dummyRW) ReadMsg() (p2p.Msg, error) { - enc := bytes.NewReader(d.getDummyMsg()) - return p2p.Msg{ - Code: d.code, - Size: d.size, - Payload: enc, - ReceivedAt: time.Now(), - }, nil -} - -func (d *dummyRW) getDummyMsg() []byte { - r, _ := rlp.EncodeToBytes(d.msg) - var b bytes.Buffer - wmsg := WrappedMsg{ - Context: b.Bytes(), - Size: uint32(len(r)), - Payload: r, - } - rr, _ := rlp.EncodeToBytes(wmsg) - d.size = uint32(len(rr)) - return rr -} diff --git a/p2p/protocols/reporter.go b/p2p/protocols/reporter.go deleted file mode 100644 index 215d4fe31b96..000000000000 --- a/p2p/protocols/reporter.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "encoding/binary" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - - "github.com/syndtr/goleveldb/leveldb" -) - -//AccountMetrics abstracts away the metrics DB and -//the reporter to persist metrics -type AccountingMetrics struct { - reporter *reporter -} - -//Close will be called when the node is being shutdown -//for a graceful cleanup -func (am *AccountingMetrics) Close() { - close(am.reporter.quit) - am.reporter.db.Close() -} - -//reporter is an internal structure used to write p2p accounting related -//metrics to a LevelDB. It will periodically write the accrued metrics to the DB. -type reporter struct { - reg metrics.Registry //the registry for these metrics (independent of other metrics) - interval time.Duration //duration at which the reporter will persist metrics - db *leveldb.DB //the actual DB - quit chan struct{} //quit the reporter loop -} - -//NewMetricsDB creates a new LevelDB instance used to persist metrics defined -//inside p2p/protocols/accounting.go -func NewAccountingMetrics(r metrics.Registry, d time.Duration, path string) *AccountingMetrics { - var val = make([]byte, 8) - var err error - - //Create the LevelDB - db, err := leveldb.OpenFile(path, nil) - if err != nil { - log.Error(err.Error()) - return nil - } - - //Check for all defined metrics that there is a value in the DB - //If there is, assign it to the metric. This means that the node - //has been running before and that metrics have been persisted. - metricsMap := map[string]metrics.Counter{ - "account.balance.credit": mBalanceCredit, - "account.balance.debit": mBalanceDebit, - "account.bytes.credit": mBytesCredit, - "account.bytes.debit": mBytesDebit, - "account.msg.credit": mMsgCredit, - "account.msg.debit": mMsgDebit, - "account.peerdrops": mPeerDrops, - "account.selfdrops": mSelfDrops, - } - //iterate the map and get the values - for key, metric := range metricsMap { - val, err = db.Get([]byte(key), nil) - //until the first time a value is being written, - //this will return an error. - //it could be beneficial though to log errors later, - //but that would require a different logic - if err == nil { - metric.Inc(int64(binary.BigEndian.Uint64(val))) - } - } - - //create the reporter - rep := &reporter{ - reg: r, - interval: d, - db: db, - quit: make(chan struct{}), - } - - //run the go routine - go rep.run() - - m := &AccountingMetrics{ - reporter: rep, - } - - return m -} - -//run is the goroutine which periodically sends the metrics to the configured LevelDB -func (r *reporter) run() { - intervalTicker := time.NewTicker(r.interval) - - for { - select { - case <-intervalTicker.C: - //at each tick send the metrics - if err := r.save(); err != nil { - log.Error("unable to send metrics to LevelDB", "err", err) - //If there is an error in writing, exit the routine; we assume here that the error is - //severe and don't attempt to write again. - //Also, this should prevent leaking when the node is stopped - return - } - case <-r.quit: - //graceful shutdown - return - } - } -} - -//send the metrics to the DB -func (r *reporter) save() error { - //create a LevelDB Batch - batch := leveldb.Batch{} - //for each metric in the registry (which is independent)... - r.reg.Each(func(name string, i interface{}) { - metric, ok := i.(metrics.Counter) - if ok { - //assuming every metric here to be a Counter (separate registry) - //...create a snapshot... - ms := metric.Snapshot() - byteVal := make([]byte, 8) - binary.BigEndian.PutUint64(byteVal, uint64(ms.Count())) - //...and save the value to the DB - batch.Put([]byte(name), byteVal) - } - }) - return r.db.Write(&batch, nil) -} diff --git a/p2p/protocols/reporter_test.go b/p2p/protocols/reporter_test.go deleted file mode 100644 index c5c025d20e9f..000000000000 --- a/p2p/protocols/reporter_test.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package protocols - -import ( - "io/ioutil" - "os" - "path/filepath" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" -) - -//TestReporter tests that the metrics being collected for p2p accounting -//are being persisted and available after restart of a node. -//It simulates restarting by just recreating the DB as if the node had restarted. -func TestReporter(t *testing.T) { - //create a test directory - dir, err := ioutil.TempDir("", "reporter-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - //setup the metrics - log.Debug("Setting up metrics first time") - reportInterval := 5 * time.Millisecond - metrics := SetupAccountingMetrics(reportInterval, filepath.Join(dir, "test.db")) - log.Debug("Done.") - - //change metrics - mBalanceCredit.Inc(12) - mBytesCredit.Inc(34) - mMsgDebit.Inc(9) - - //store expected metrics - expectedBalanceCredit := mBalanceCredit.Count() - expectedBytesCredit := mBytesCredit.Count() - expectedMsgDebit := mMsgDebit.Count() - - //give the reporter time to write the metrics to DB - time.Sleep(20 * time.Millisecond) - - //close the DB also, or we can't create a new one - metrics.Close() - - //clear the metrics - this effectively simulates the node having shut down... - mBalanceCredit.Clear() - mBytesCredit.Clear() - mMsgDebit.Clear() - - //setup the metrics again - log.Debug("Setting up metrics second time") - metrics = SetupAccountingMetrics(reportInterval, filepath.Join(dir, "test.db")) - defer metrics.Close() - log.Debug("Done.") - - //now check the metrics, they should have the same value as before "shutdown" - if mBalanceCredit.Count() != expectedBalanceCredit { - t.Fatalf("Expected counter to be %d, but is %d", expectedBalanceCredit, mBalanceCredit.Count()) - } - if mBytesCredit.Count() != expectedBytesCredit { - t.Fatalf("Expected counter to be %d, but is %d", expectedBytesCredit, mBytesCredit.Count()) - } - if mMsgDebit.Count() != expectedMsgDebit { - t.Fatalf("Expected counter to be %d, but is %d", expectedMsgDebit, mMsgDebit.Count()) - } -} diff --git a/p2p/rlpx.go b/p2p/rlpx.go index 67cc1d9bf316..115021fa9477 100644 --- a/p2p/rlpx.go +++ b/p2p/rlpx.go @@ -38,7 +38,7 @@ import ( "github.com/ethereum/go-ethereum/common/bitutil" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/ecies" - "github.com/ethereum/go-ethereum/crypto/secp256k1" + "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/rlp" "github.com/golang/snappy" "golang.org/x/crypto/sha3" @@ -47,10 +47,10 @@ import ( const ( maxUint24 = ^uint32(0) >> 8 - sskLen = 16 // ecies.MaxSharedKeyLength(pubKey) / 2 - sigLen = 65 // elliptic S256 - pubLen = 64 // 512 bit pubkey in uncompressed representation without format byte - shaLen = 32 // hash length (for nonce etc) + sskLen = 16 // ecies.MaxSharedKeyLength(pubKey) / 2 + sigLen = crypto.SignatureLength // elliptic S256 + pubLen = 64 // 512 bit pubkey in uncompressed representation without format byte + shaLen = 32 // hash length (for nonce etc) authMsgLen = sigLen + shaLen + pubLen + shaLen + 1 authRespLen = pubLen + shaLen + 1 @@ -128,7 +128,7 @@ func (t *rlpx) doProtoHandshake(our *protoHandshake) (their *protoHandshake, err // as the error so it can be tracked elsewhere. werr := make(chan error, 1) go func() { werr <- Send(t.rw, handshakeMsg, our) }() - if their, err = readProtocolHandshake(t.rw, our); err != nil { + if their, err = readProtocolHandshake(t.rw); err != nil { <-werr // make sure the write terminates too return nil, err } @@ -141,7 +141,7 @@ func (t *rlpx) doProtoHandshake(our *protoHandshake) (their *protoHandshake, err return their, nil } -func readProtocolHandshake(rw MsgReader, our *protoHandshake) (*protoHandshake, error) { +func readProtocolHandshake(rw MsgReader) (*protoHandshake, error) { msg, err := rw.ReadMsg() if err != nil { return nil, err @@ -400,7 +400,7 @@ func (h *encHandshake) handleAuthMsg(msg *authMsgV4, prv *ecdsa.PrivateKey) erro return err } signedMsg := xor(token, h.initNonce) - remoteRandomPub, err := secp256k1.RecoverPubkey(signedMsg, msg.Signature[:]) + remoteRandomPub, err := crypto.Ecrecover(signedMsg, msg.Signature[:]) if err != nil { return err } @@ -603,6 +603,10 @@ func (rw *rlpxFrameRW) WriteMsg(msg Msg) error { msg.Payload = bytes.NewReader(payload) msg.Size = uint32(len(payload)) } + msg.meterSize = msg.Size + if metrics.Enabled && msg.meterCap.Name != "" { // don't meter non-subprotocol messages + metrics.GetOrRegisterMeter(fmt.Sprintf("%s/%s/%d/%#02x", MetricsOutboundTraffic, msg.meterCap.Name, msg.meterCap.Version, msg.meterCode), nil).Mark(int64(msg.meterSize)) + } // write header headbuf := make([]byte, 32) fsize := uint32(len(ptype)) + msg.Size @@ -687,6 +691,7 @@ func (rw *rlpxFrameRW) ReadMsg() (msg Msg, err error) { return msg, err } msg.Size = uint32(content.Len()) + msg.meterSize = msg.Size msg.Payload = content // if snappy is enabled, verify and decompress message diff --git a/p2p/rlpx_test.go b/p2p/rlpx_test.go index 5d89818020aa..e62196ff049e 100644 --- a/p2p/rlpx_test.go +++ b/p2p/rlpx_test.go @@ -222,7 +222,6 @@ func TestProtocolHandshake(t *testing.T) { } func TestProtocolHandshakeErrors(t *testing.T) { - our := &protoHandshake{Version: 3, Caps: []Cap{{"foo", 2}, {"bar", 3}}, Name: "quux"} tests := []struct { code uint64 msg interface{} @@ -258,7 +257,7 @@ func TestProtocolHandshakeErrors(t *testing.T) { for i, test := range tests { p1, p2 := MsgPipe() go Send(p1, test.code, test.msg) - _, err := readProtocolHandshake(p2, our) + _, err := readProtocolHandshake(p2) if !reflect.DeepEqual(err, test.err) { t.Errorf("test %d: error mismatch: got %q, want %q", i, err, test.err) } diff --git a/p2p/server.go b/p2p/server.go index 84945be2e392..9050ba206d1f 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -22,6 +22,7 @@ import ( "crypto/ecdsa" "encoding/hex" "errors" + "fmt" "net" "sort" "sync" @@ -40,7 +41,6 @@ import ( "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/nat" "github.com/ethereum/go-ethereum/p2p/netutil" - "github.com/ethereum/go-ethereum/rlp" ) const ( @@ -51,6 +51,9 @@ const ( defaultMaxPendingPeers = 50 defaultDialRatio = 3 + // This time limits inbound connection attempts per source IP. + inboundThrottleTime = 30 * time.Second + // Maximum time allowed for reading a complete message. // This is effectively the amount of time a connection can be idle. frameReadTimeout = 30 * time.Second @@ -160,6 +163,7 @@ type Server struct { // the whole protocol stack. newTransport func(net.Conn) transport newPeerHook func(*Peer) + listenFunc func(network, addr string) (net.Listener, error) lock sync.Mutex // protects running running bool @@ -169,24 +173,26 @@ type Server struct { ntab discoverTable listener net.Listener ourHandshake *protoHandshake - lastLookup time.Time DiscV5 *discv5.Network - - // These are for Peers, PeerCount (and nothing else). - peerOp chan peerOpFunc - peerOpDone chan struct{} - - quit chan struct{} - addstatic chan *enode.Node - removestatic chan *enode.Node - addtrusted chan *enode.Node - removetrusted chan *enode.Node - posthandshake chan *conn - addpeer chan *conn - delpeer chan peerDrop - loopWG sync.WaitGroup // loop, listenLoop - peerFeed event.Feed - log log.Logger + loopWG sync.WaitGroup // loop, listenLoop + peerFeed event.Feed + log log.Logger + + // Channels into the run loop. + quit chan struct{} + addstatic chan *enode.Node + removestatic chan *enode.Node + addtrusted chan *enode.Node + removetrusted chan *enode.Node + peerOp chan peerOpFunc + peerOpDone chan struct{} + delpeer chan peerDrop + checkpointPostHandshake chan *conn + checkpointAddPeer chan *conn + + // State of run loop and listenLoop. + lastLookup time.Time + inboundHistory expHeap } type peerOpFunc func(map[enode.ID]*Peer) @@ -281,6 +287,11 @@ func (c *conn) set(f connFlag, val bool) { } } +// LocalNode returns the local node record. +func (srv *Server) LocalNode() *enode.LocalNode { + return srv.localnode +} + // Peers returns all connected peers. func (srv *Server) Peers() []*Peer { var ps []*Peer @@ -435,7 +446,7 @@ func (srv *Server) Start() (err error) { srv.running = true srv.log = srv.Config.Logger if srv.log == nil { - srv.log = log.New() + srv.log = log.Root() } if srv.NoDial && srv.ListenAddr == "" { srv.log.Warn("P2P server will be useless, neither dialing nor listening") @@ -448,13 +459,16 @@ func (srv *Server) Start() (err error) { if srv.newTransport == nil { srv.newTransport = newRLPX } + if srv.listenFunc == nil { + srv.listenFunc = net.Listen + } if srv.Dialer == nil { srv.Dialer = TCPDialer{&net.Dialer{Timeout: defaultDialTimeout}} } srv.quit = make(chan struct{}) - srv.addpeer = make(chan *conn) srv.delpeer = make(chan peerDrop) - srv.posthandshake = make(chan *conn) + srv.checkpointPostHandshake = make(chan *conn) + srv.checkpointAddPeer = make(chan *conn) srv.addstatic = make(chan *enode.Node) srv.removestatic = make(chan *enode.Node) srv.addtrusted = make(chan *enode.Node) @@ -475,7 +489,7 @@ func (srv *Server) Start() (err error) { } dynPeers := srv.maxDialedConns() - dialer := newDialState(srv.localnode.ID(), srv.StaticNodes, srv.BootstrapNodes, srv.ntab, dynPeers, srv.NetRestrict) + dialer := newDialState(srv.localnode.ID(), srv.ntab, dynPeers, &srv.Config) srv.loopWG.Add(1) go srv.run(dialer) return nil @@ -498,7 +512,6 @@ func (srv *Server) setupLocalNode() error { srv.nodedb = db srv.localnode = enode.NewLocalNode(db, srv.PrivateKey) srv.localnode.SetFallbackIP(net.IP{127, 0, 0, 1}) - srv.localnode.Set(capsByNameAndVersion(srv.ourHandshake.Caps)) // TODO: check conflicts for _, p := range srv.Protocols { for _, e := range p.Attributes { @@ -561,6 +574,7 @@ func (srv *Server) setupDiscovery() error { NetRestrict: srv.NetRestrict, Bootnodes: srv.BootstrapNodes, Unhandled: unhandled, + Log: srv.log, } ntab, err := discover.ListenUDP(conn, srv.localnode, cfg) if err != nil { @@ -589,27 +603,28 @@ func (srv *Server) setupDiscovery() error { } func (srv *Server) setupListening() error { - // Launch the TCP listener. - listener, err := net.Listen("tcp", srv.ListenAddr) + // Launch the listener. + listener, err := srv.listenFunc("tcp", srv.ListenAddr) if err != nil { return err } - laddr := listener.Addr().(*net.TCPAddr) - srv.ListenAddr = laddr.String() srv.listener = listener - srv.localnode.Set(enr.TCP(laddr.Port)) + srv.ListenAddr = listener.Addr().String() + + // Update the local node record and map the TCP listening port if NAT is configured. + if tcp, ok := listener.Addr().(*net.TCPAddr); ok { + srv.localnode.Set(enr.TCP(tcp.Port)) + if !tcp.IP.IsLoopback() && srv.NAT != nil { + srv.loopWG.Add(1) + go func() { + nat.Map(srv.NAT, srv.quit, "tcp", tcp.Port, tcp.Port, "ethereum p2p") + srv.loopWG.Done() + }() + } + } srv.loopWG.Add(1) go srv.listenLoop() - - // Map the TCP listening port if NAT is configured. - if !laddr.IP.IsLoopback() && srv.NAT != nil { - srv.loopWG.Add(1) - go func() { - nat.Map(srv.NAT, srv.quit, "tcp", laddr.Port, laddr.Port, "ethereum p2p") - srv.loopWG.Done() - }() - } return nil } @@ -621,7 +636,7 @@ type dialer interface { } func (srv *Server) run(dialstate dialer) { - srv.log.Info("Started P2P networking", "self", srv.localnode.Node()) + srv.log.Info("Started P2P networking", "self", srv.localnode.Node().URLv4()) defer srv.loopWG.Done() defer srv.nodedb.Close() @@ -677,12 +692,14 @@ running: case <-srv.quit: // The server was stopped. Run the cleanup logic. break running + case n := <-srv.addstatic: // This channel is used by AddPeer to add to the // ephemeral static peer list. Add it to the dialer, // it will keep the node connected. srv.log.Trace("Adding static node", "node", n) dialstate.addStatic(n) + case n := <-srv.removestatic: // This channel is used by RemovePeer to send a // disconnect request to a peer and begin the @@ -692,6 +709,7 @@ running: if p, ok := peers[n.ID()]; ok { p.Disconnect(DiscRequested) } + case n := <-srv.addtrusted: // This channel is used by AddTrustedPeer to add an enode // to the trusted node set. @@ -701,21 +719,23 @@ running: if p, ok := peers[n.ID()]; ok { p.rw.set(trustedConn, true) } + case n := <-srv.removetrusted: // This channel is used by RemoveTrustedPeer to remove an enode // from the trusted node set. srv.log.Trace("Removing trusted node", "node", n) - if _, ok := trusted[n.ID()]; ok { - delete(trusted, n.ID()) - } + delete(trusted, n.ID()) + // Unmark any already-connected peer as trusted if p, ok := peers[n.ID()]; ok { p.rw.set(trustedConn, false) } + case op := <-srv.peerOp: // This channel is used by Peers and PeerCount. op(peers) srv.peerOpDone <- struct{}{} + case t := <-taskdone: // A task got done. Tell dialstate about it so it // can update its state and remove it from the active @@ -723,7 +743,8 @@ running: srv.log.Trace("Dial task done", "task", t) dialstate.taskDone(t, time.Now()) delTask(t) - case c := <-srv.posthandshake: + + case c := <-srv.checkpointPostHandshake: // A connection has passed the encryption handshake so // the remote identity is known (but hasn't been verified yet). if trusted[c.node.ID()] { @@ -731,25 +752,22 @@ running: c.flags |= trustedConn } // TODO: track in-progress inbound node IDs (pre-Peer) to avoid dialing them. - select { - case c.cont <- srv.encHandshakeChecks(peers, inboundCount, c): - case <-srv.quit: - break running - } - case c := <-srv.addpeer: + c.cont <- srv.postHandshakeChecks(peers, inboundCount, c) + + case c := <-srv.checkpointAddPeer: // At this point the connection is past the protocol handshake. // Its capabilities are known and the remote identity is verified. - err := srv.protoHandshakeChecks(peers, inboundCount, c) + err := srv.addPeerChecks(peers, inboundCount, c) if err == nil { // The handshakes are done and it passed all checks. - p := newPeer(c, srv.Protocols) + p := newPeer(srv.log, c, srv.Protocols) // If message events are enabled, pass the peerFeed // to the peer if srv.EnableMsgEvents { p.events = &srv.peerFeed } name := truncateName(c.name) - srv.log.Debug("Adding p2p peer", "name", name, "addr", c.fd.RemoteAddr(), "peers", len(peers)+1) + p.log.Debug("Adding p2p peer", "addr", p.RemoteAddr(), "peers", len(peers)+1, "name", name) go srv.runPeer(p) peers[c.node.ID()] = p if p.Inbound() { @@ -759,15 +777,12 @@ running: // The dialer logic relies on the assumption that // dial tasks complete after the peer has been added or // discarded. Unblock the task last. - select { - case c.cont <- err: - case <-srv.quit: - break running - } + c.cont <- err + case pd := <-srv.delpeer: // A peer disconnected. d := common.PrettyDuration(mclock.Now() - pd.created) - pd.log.Debug("Removing p2p peer", "duration", d, "peers", len(peers)-1, "req", pd.requested, "err", pd.err) + pd.log.Debug("Removing p2p peer", "addr", pd.RemoteAddr(), "peers", len(peers)-1, "duration", d, "req", pd.requested, "err", pd.err) delete(peers, pd.ID()) if pd.Inbound() { inboundCount-- @@ -798,17 +813,7 @@ running: } } -func (srv *Server) protoHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error { - // Drop connections with no matching protocols. - if len(srv.Protocols) > 0 && countMatchingProtocols(srv.Protocols, c.caps) == 0 { - return DiscUselessPeer - } - // Repeat the encryption handshake checks because the - // peer set might have changed between the handshakes. - return srv.encHandshakeChecks(peers, inboundCount, c) -} - -func (srv *Server) encHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error { +func (srv *Server) postHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error { switch { case !c.is(trustedConn|staticDialedConn) && len(peers) >= srv.MaxPeers: return DiscTooManyPeers @@ -823,9 +828,20 @@ func (srv *Server) encHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int } } +func (srv *Server) addPeerChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error { + // Drop connections with no matching protocols. + if len(srv.Protocols) > 0 && countMatchingProtocols(srv.Protocols, c.caps) == 0 { + return DiscUselessPeer + } + // Repeat the post-handshake checks because the + // peer set might have changed since those checks were performed. + return srv.postHandshakeChecks(peers, inboundCount, c) +} + func (srv *Server) maxInboundConns() int { return srv.MaxPeers - srv.maxDialedConns() } + func (srv *Server) maxDialedConns() int { if srv.NoDiscovery || srv.NoDial { return 0 @@ -853,7 +869,7 @@ func (srv *Server) listenLoop() { } for { - // Wait for a handshake slot before accepting. + // Wait for a free slot before accepting. <-slots var ( @@ -872,21 +888,16 @@ func (srv *Server) listenLoop() { break } - // Reject connections that do not match NetRestrict. - if srv.NetRestrict != nil { - if tcp, ok := fd.RemoteAddr().(*net.TCPAddr); ok && !srv.NetRestrict.Contains(tcp.IP) { - srv.log.Debug("Rejected conn (not whitelisted in NetRestrict)", "addr", fd.RemoteAddr()) - fd.Close() - slots <- struct{}{} - continue - } + remoteIP := netutil.AddrIP(fd.RemoteAddr()) + if err := srv.checkInboundConn(fd, remoteIP); err != nil { + srv.log.Debug("Rejected inbound connnection", "addr", fd.RemoteAddr(), "err", err) + fd.Close() + slots <- struct{}{} + continue } - - var ip net.IP - if tcp, ok := fd.RemoteAddr().(*net.TCPAddr); ok { - ip = tcp.IP + if remoteIP != nil { + fd = newMeteredConn(fd, true, remoteIP) } - fd = newMeteredConn(fd, true, ip) srv.log.Trace("Accepted connection", "addr", fd.RemoteAddr()) go func() { srv.SetupConn(fd, inboundConn, nil) @@ -895,6 +906,22 @@ func (srv *Server) listenLoop() { } } +func (srv *Server) checkInboundConn(fd net.Conn, remoteIP net.IP) error { + if remoteIP != nil { + // Reject connections that do not match NetRestrict. + if srv.NetRestrict != nil && !srv.NetRestrict.Contains(remoteIP) { + return fmt.Errorf("not whitelisted in NetRestrict") + } + // Reject Internet peers that try too often. + srv.inboundHistory.expire(time.Now()) + if !netutil.IsLAN(remoteIP) && srv.inboundHistory.contains(remoteIP.String()) { + return fmt.Errorf("too many attempts") + } + srv.inboundHistory.add(remoteIP.String(), time.Now().Add(inboundThrottleTime)) + } + return nil +} + // SetupConn runs the handshakes and attempts to add the connection // as a peer. It returns when the connection has been added as a peer // or the handshakes have failed. @@ -916,6 +943,7 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro if !running { return errServerStopped } + // If dialing, figure out the remote public key. var dialPubkey *ecdsa.PublicKey if dialDest != nil { @@ -924,7 +952,8 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro return errors.New("dial destination doesn't have a secp256k1 public key") } } - // Run the encryption handshake. + + // Run the RLPx handshake. remotePubkey, err := c.doEncHandshake(srv.PrivateKey, dialPubkey) if err != nil { srv.log.Trace("Failed RLPx handshake", "addr", c.fd.RemoteAddr(), "conn", c.flags, "err", err) @@ -943,12 +972,13 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro conn.handshakeDone(c.node.ID()) } clog := srv.log.New("id", c.node.ID(), "addr", c.fd.RemoteAddr(), "conn", c.flags) - err = srv.checkpoint(c, srv.posthandshake) + err = srv.checkpoint(c, srv.checkpointPostHandshake) if err != nil { - clog.Trace("Rejected peer before protocol handshake", "err", err) + clog.Trace("Rejected peer", "err", err) return err } - // Run the protocol handshake + + // Run the capability negotiation handshake. phs, err := c.doProtoHandshake(srv.ourHandshake) if err != nil { clog.Trace("Failed proto handshake", "err", err) @@ -959,14 +989,15 @@ func (srv *Server) setupConn(c *conn, flags connFlag, dialDest *enode.Node) erro return DiscUnexpectedIdentity } c.caps, c.name = phs.Caps, phs.Name - err = srv.checkpoint(c, srv.addpeer) + err = srv.checkpoint(c, srv.checkpointAddPeer) if err != nil { clog.Trace("Rejected peer", "err", err) return err } - // If the checks completed successfully, runPeer has now been - // launched by run. - clog.Trace("connection set up", "inbound", dialDest == nil) + + // If the checks completed successfully, the connection has been added as a peer and + // runPeer has been launched. + clog.Trace("Connection set up", "inbound", dialDest == nil) return nil } @@ -995,12 +1026,7 @@ func (srv *Server) checkpoint(c *conn, stage chan<- *conn) error { case <-srv.quit: return errServerStopped } - select { - case err := <-c.cont: - return err - case <-srv.quit: - return errServerStopped - } + return <-c.cont } // runPeer runs in its own goroutine for each peer. @@ -1013,8 +1039,10 @@ func (srv *Server) runPeer(p *Peer) { // broadcast peer add srv.peerFeed.Send(&PeerEvent{ - Type: PeerEventTypeAdd, - Peer: p.ID(), + Type: PeerEventTypeAdd, + Peer: p.ID(), + RemoteAddress: p.RemoteAddr().String(), + LocalAddress: p.LocalAddr().String(), }) // run the protocol @@ -1022,9 +1050,11 @@ func (srv *Server) runPeer(p *Peer) { // broadcast peer drop srv.peerFeed.Send(&PeerEvent{ - Type: PeerEventTypeDrop, - Peer: p.ID(), - Error: err.Error(), + Type: PeerEventTypeDrop, + Peer: p.ID(), + Error: err.Error(), + RemoteAddress: p.RemoteAddr().String(), + LocalAddress: p.LocalAddr().String(), }) // Note: run waits for existing peers to be sent on srv.delpeer @@ -1053,7 +1083,7 @@ func (srv *Server) NodeInfo() *NodeInfo { node := srv.Self() info := &NodeInfo{ Name: srv.Name, - Enode: node.String(), + Enode: node.URLv4(), ID: node.ID().String(), IP: node.IP().String(), ListenAddr: srv.ListenAddr, @@ -1061,9 +1091,7 @@ func (srv *Server) NodeInfo() *NodeInfo { } info.Ports.Discovery = node.UDP() info.Ports.Listener = node.TCP() - if enc, err := rlp.EncodeToBytes(node.Record()); err == nil { - info.ENR = "0x" + hex.EncodeToString(enc) - } + info.ENR = node.String() // Gather all the running protocol infos (only once per protocol type) for _, proto := range srv.Protocols { diff --git a/p2p/server_test.go b/p2p/server_test.go index f665c142453a..e8bc627e1d30 100644 --- a/p2p/server_test.go +++ b/p2p/server_test.go @@ -19,6 +19,7 @@ package p2p import ( "crypto/ecdsa" "errors" + "io" "math/rand" "net" "reflect" @@ -26,6 +27,7 @@ import ( "time" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/testlog" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" @@ -74,6 +76,7 @@ func startTestServer(t *testing.T, remoteKey *ecdsa.PublicKey, pf func(*Peer)) * MaxPeers: 10, ListenAddr: "127.0.0.1:0", PrivateKey: newkey(), + Logger: testlog.Logger(t, log.LvlTrace), } server := &Server{ Config: config, @@ -359,6 +362,7 @@ func TestServerAtCap(t *testing.T) { PrivateKey: newkey(), MaxPeers: 10, NoDial: true, + NoDiscovery: true, TrustedNodes: []*enode.Node{newNode(trustedID, nil)}, }, } @@ -377,19 +381,19 @@ func TestServerAtCap(t *testing.T) { // Inject a few connections to fill up the peer set. for i := 0; i < 10; i++ { c := newconn(randomID()) - if err := srv.checkpoint(c, srv.addpeer); err != nil { + if err := srv.checkpoint(c, srv.checkpointAddPeer); err != nil { t.Fatalf("could not add conn %d: %v", i, err) } } // Try inserting a non-trusted connection. anotherID := randomID() c := newconn(anotherID) - if err := srv.checkpoint(c, srv.posthandshake); err != DiscTooManyPeers { + if err := srv.checkpoint(c, srv.checkpointPostHandshake); err != DiscTooManyPeers { t.Error("wrong error for insert:", err) } // Try inserting a trusted connection. c = newconn(trustedID) - if err := srv.checkpoint(c, srv.posthandshake); err != nil { + if err := srv.checkpoint(c, srv.checkpointPostHandshake); err != nil { t.Error("unexpected error for trusted conn @posthandshake:", err) } if !c.is(trustedConn) { @@ -399,14 +403,14 @@ func TestServerAtCap(t *testing.T) { // Remove from trusted set and try again srv.RemoveTrustedPeer(newNode(trustedID, nil)) c = newconn(trustedID) - if err := srv.checkpoint(c, srv.posthandshake); err != DiscTooManyPeers { + if err := srv.checkpoint(c, srv.checkpointPostHandshake); err != DiscTooManyPeers { t.Error("wrong error for insert:", err) } // Add anotherID to trusted set and try again srv.AddTrustedPeer(newNode(anotherID, nil)) c = newconn(anotherID) - if err := srv.checkpoint(c, srv.posthandshake); err != nil { + if err := srv.checkpoint(c, srv.checkpointPostHandshake); err != nil { t.Error("unexpected error for trusted conn @posthandshake:", err) } if !c.is(trustedConn) { @@ -430,10 +434,11 @@ func TestServerPeerLimits(t *testing.T) { srv := &Server{ Config: Config{ - PrivateKey: srvkey, - MaxPeers: 0, - NoDial: true, - Protocols: []Protocol{discard}, + PrivateKey: srvkey, + MaxPeers: 0, + NoDial: true, + NoDiscovery: true, + Protocols: []Protocol{discard}, }, newTransport: func(fd net.Conn) transport { return tp }, log: log.New(), @@ -541,29 +546,35 @@ func TestServerSetupConn(t *testing.T) { } for i, test := range tests { - srv := &Server{ - Config: Config{ - PrivateKey: srvkey, - MaxPeers: 10, - NoDial: true, - Protocols: []Protocol{discard}, - }, - newTransport: func(fd net.Conn) transport { return test.tt }, - log: log.New(), - } - if !test.dontstart { - if err := srv.Start(); err != nil { - t.Fatalf("couldn't start server: %v", err) + t.Run(test.wantCalls, func(t *testing.T) { + cfg := Config{ + PrivateKey: srvkey, + MaxPeers: 10, + NoDial: true, + NoDiscovery: true, + Protocols: []Protocol{discard}, + Logger: testlog.Logger(t, log.LvlTrace), } - } - p1, _ := net.Pipe() - srv.SetupConn(p1, test.flags, test.dialDest) - if !reflect.DeepEqual(test.tt.closeErr, test.wantCloseErr) { - t.Errorf("test %d: close error mismatch: got %q, want %q", i, test.tt.closeErr, test.wantCloseErr) - } - if test.tt.calls != test.wantCalls { - t.Errorf("test %d: calls mismatch: got %q, want %q", i, test.tt.calls, test.wantCalls) - } + srv := &Server{ + Config: cfg, + newTransport: func(fd net.Conn) transport { return test.tt }, + log: cfg.Logger, + } + if !test.dontstart { + if err := srv.Start(); err != nil { + t.Fatalf("couldn't start server: %v", err) + } + defer srv.Stop() + } + p1, _ := net.Pipe() + srv.SetupConn(p1, test.flags, test.dialDest) + if !reflect.DeepEqual(test.tt.closeErr, test.wantCloseErr) { + t.Errorf("test %d: close error mismatch: got %q, want %q", i, test.tt.closeErr, test.wantCloseErr) + } + if test.tt.calls != test.wantCalls { + t.Errorf("test %d: calls mismatch: got %q, want %q", i, test.tt.calls, test.wantCalls) + } + }) } } @@ -616,3 +627,100 @@ func randomID() (id enode.ID) { } return id } + +// This test checks that inbound connections are throttled by IP. +func TestServerInboundThrottle(t *testing.T) { + const timeout = 5 * time.Second + newTransportCalled := make(chan struct{}) + srv := &Server{ + Config: Config{ + PrivateKey: newkey(), + ListenAddr: "127.0.0.1:0", + MaxPeers: 10, + NoDial: true, + NoDiscovery: true, + Protocols: []Protocol{discard}, + Logger: testlog.Logger(t, log.LvlTrace), + }, + newTransport: func(fd net.Conn) transport { + newTransportCalled <- struct{}{} + return newRLPX(fd) + }, + listenFunc: func(network, laddr string) (net.Listener, error) { + fakeAddr := &net.TCPAddr{IP: net.IP{95, 33, 21, 2}, Port: 4444} + return listenFakeAddr(network, laddr, fakeAddr) + }, + } + if err := srv.Start(); err != nil { + t.Fatal("can't start: ", err) + } + defer srv.Stop() + + // Dial the test server. + conn, err := net.DialTimeout("tcp", srv.ListenAddr, timeout) + if err != nil { + t.Fatalf("could not dial: %v", err) + } + select { + case <-newTransportCalled: + // OK + case <-time.After(timeout): + t.Error("newTransport not called") + } + conn.Close() + + // Dial again. This time the server should close the connection immediately. + connClosed := make(chan struct{}) + conn, err = net.DialTimeout("tcp", srv.ListenAddr, timeout) + if err != nil { + t.Fatalf("could not dial: %v", err) + } + defer conn.Close() + go func() { + conn.SetDeadline(time.Now().Add(timeout)) + buf := make([]byte, 10) + if n, err := conn.Read(buf); err != io.EOF || n != 0 { + t.Errorf("expected io.EOF and n == 0, got error %q and n == %d", err, n) + } + connClosed <- struct{}{} + }() + select { + case <-connClosed: + // OK + case <-newTransportCalled: + t.Error("newTransport called for second attempt") + case <-time.After(timeout): + t.Error("connection not closed within timeout") + } +} + +func listenFakeAddr(network, laddr string, remoteAddr net.Addr) (net.Listener, error) { + l, err := net.Listen(network, laddr) + if err == nil { + l = &fakeAddrListener{l, remoteAddr} + } + return l, err +} + +// fakeAddrListener is a listener that creates connections with a mocked remote address. +type fakeAddrListener struct { + net.Listener + remoteAddr net.Addr +} + +type fakeAddrConn struct { + net.Conn + remoteAddr net.Addr +} + +func (l *fakeAddrListener) Accept() (net.Conn, error) { + c, err := l.Listener.Accept() + if err != nil { + return nil, err + } + return &fakeAddrConn{c, l.remoteAddr}, nil +} + +func (c *fakeAddrConn) RemoteAddr() net.Addr { + return c.remoteAddr +} diff --git a/p2p/simulations/adapters/exec.go b/p2p/simulations/adapters/exec.go index 9b588db1be21..5eb0a31566c6 100644 --- a/p2p/simulations/adapters/exec.go +++ b/p2p/simulations/adapters/exec.go @@ -92,17 +92,28 @@ func (e *ExecAdapter) NewNode(config *NodeConfig) (Node, error) { return nil, fmt.Errorf("error creating node directory: %s", err) } + err := config.initDummyEnode() + if err != nil { + return nil, err + } + // generate the config conf := &execNodeConfig{ Stack: node.DefaultConfig, Node: config, } - conf.Stack.DataDir = filepath.Join(dir, "data") + if config.DataDir != "" { + conf.Stack.DataDir = config.DataDir + } else { + conf.Stack.DataDir = filepath.Join(dir, "data") + } + + // these parameters are crucial for execadapter node to run correctly conf.Stack.WSHost = "127.0.0.1" conf.Stack.WSPort = 0 conf.Stack.WSOrigins = []string{"*"} conf.Stack.WSExposeAll = true - conf.Stack.P2P.EnableMsgEvents = false + conf.Stack.P2P.EnableMsgEvents = config.EnableMsgEvents conf.Stack.P2P.NoDiscovery = true conf.Stack.P2P.NAT = nil conf.Stack.NoUSB = true @@ -403,6 +414,13 @@ func startExecNodeStack() (*node.Node, error) { if err := json.Unmarshal([]byte(confEnv), &conf); err != nil { return nil, fmt.Errorf("error decoding %s: %v", envNodeConfig, err) } + + // create enode record + nodeTcpConn, _ := net.ResolveTCPAddr("tcp", conf.Stack.P2P.ListenAddr) + if nodeTcpConn.IP == nil { + nodeTcpConn.IP = net.IPv4(127, 0, 0, 1) + } + conf.Node.initEnode(nodeTcpConn.IP, nodeTcpConn.Port, nodeTcpConn.Port) conf.Stack.P2P.PrivateKey = conf.Node.PrivateKey conf.Stack.Logger = log.New("node.id", conf.Node.ID.String()) diff --git a/p2p/simulations/adapters/inproc.go b/p2p/simulations/adapters/inproc.go index eada9579ed0a..c1cf23a175c6 100644 --- a/p2p/simulations/adapters/inproc.go +++ b/p2p/simulations/adapters/inproc.go @@ -71,8 +71,13 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { s.mtx.Lock() defer s.mtx.Unlock() - // check a node with the ID doesn't already exist id := config.ID + // verify that the node has a private key in the config + if config.PrivateKey == nil { + return nil, fmt.Errorf("node is missing private key: %s", id) + } + + // check a node with the ID doesn't already exist if _, exists := s.nodes[id]; exists { return nil, fmt.Errorf("node already exists: %s", id) } @@ -87,6 +92,11 @@ func (s *SimAdapter) NewNode(config *NodeConfig) (Node, error) { } } + err := config.initDummyEnode() + if err != nil { + return nil, err + } + n, err := node.New(&node.Config{ P2P: p2p.Config{ PrivateKey: config.PrivateKey, @@ -172,6 +182,12 @@ type SimNode struct { registerOnce sync.Once } +// Close closes the underlaying node.Node to release +// acquired resources. +func (sn *SimNode) Close() error { + return sn.node.Close() +} + // Addr returns the node's discovery address func (sn *SimNode) Addr() []byte { return []byte(sn.Node().String()) diff --git a/p2p/simulations/adapters/inproc_test.go b/p2p/simulations/adapters/inproc_test.go index e1e092f6e14d..bd2c70b05ecc 100644 --- a/p2p/simulations/adapters/inproc_test.go +++ b/p2p/simulations/adapters/inproc_test.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/p2p/simulations/adapters/types.go b/p2p/simulations/adapters/types.go index 6681726e40b6..f65ce7b6050f 100644 --- a/p2p/simulations/adapters/types.go +++ b/p2p/simulations/adapters/types.go @@ -27,9 +27,11 @@ import ( "github.com/docker/docker/pkg/reexec" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rpc" ) @@ -90,12 +92,21 @@ type NodeConfig struct { // Name is a human friendly name for the node like "node01" Name string + // Use an existing database instead of a temporary one if non-empty + DataDir string + // Services are the names of the services which should be run when // starting the node (for SimNodes it should be the names of services // contained in SimAdapter.services, for other nodes it should be // services registered by calling the RegisterService function) Services []string + // Enode + node *enode.Node + + // ENR Record with entries to overwrite + Record enr.Record + // function to sanction or prevent suggesting a peer Reachable func(id enode.ID) bool @@ -165,26 +176,27 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) error { // Node returns the node descriptor represented by the config. func (n *NodeConfig) Node() *enode.Node { - return enode.NewV4(&n.PrivateKey.PublicKey, net.IP{127, 0, 0, 1}, int(n.Port), int(n.Port)) + return n.node } // RandomNodeConfig returns node configuration with a randomly generated ID and // PrivateKey func RandomNodeConfig() *NodeConfig { - key, err := crypto.GenerateKey() + prvkey, err := crypto.GenerateKey() if err != nil { panic("unable to generate key") } - id := enode.PubkeyToIDV4(&key.PublicKey) port, err := assignTCPPort() if err != nil { panic("unable to assign tcp port") } + + enodId := enode.PubkeyToIDV4(&prvkey.PublicKey) return &NodeConfig{ - ID: id, - Name: fmt.Sprintf("node_%s", id.String()), - PrivateKey: key, + PrivateKey: prvkey, + ID: enodId, + Name: fmt.Sprintf("node_%s", enodId.String()), Port: port, EnableMsgEvents: true, } @@ -254,3 +266,30 @@ func RegisterServices(services Services) { os.Exit(0) } } + +// adds the host part to the configuration's ENR, signs it +// creates and the corresponding enode object to the configuration +func (n *NodeConfig) initEnode(ip net.IP, tcpport int, udpport int) error { + enrIp := enr.IP(ip) + n.Record.Set(&enrIp) + enrTcpPort := enr.TCP(tcpport) + n.Record.Set(&enrTcpPort) + enrUdpPort := enr.UDP(udpport) + n.Record.Set(&enrUdpPort) + + err := enode.SignV4(&n.Record, n.PrivateKey) + if err != nil { + return fmt.Errorf("unable to generate ENR: %v", err) + } + nod, err := enode.New(enode.V4ID{}, &n.Record) + if err != nil { + return fmt.Errorf("unable to create enode: %v", err) + } + log.Trace("simnode new", "record", n.Record) + n.node = nod + return nil +} + +func (n *NodeConfig) initDummyEnode() error { + return n.initEnode(net.IPv4(127, 0, 0, 1), 0, 0) +} diff --git a/p2p/simulations/http_test.go b/p2p/simulations/http_test.go index ed43c0ed76a2..84f6ce2a517c 100644 --- a/p2p/simulations/http_test.go +++ b/p2p/simulations/http_test.go @@ -22,6 +22,7 @@ import ( "fmt" "math/rand" "net/http/httptest" + "os" "reflect" "sync" "sync/atomic" @@ -38,15 +39,13 @@ import ( "github.com/mattn/go-colorable" ) -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") -) +func TestMain(m *testing.M) { + loglevel := flag.Int("loglevel", 2, "verbosity of logs") -func init() { flag.Parse() - log.PrintOrigins(true) log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) + os.Exit(m.Run()) } // testService implements the node.Service interface and provides protocols diff --git a/p2p/simulations/network.go b/p2p/simulations/network.go index 2049a5108e23..f03c953e8953 100644 --- a/p2p/simulations/network.go +++ b/p2p/simulations/network.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "math/rand" "sync" "time" @@ -596,6 +597,12 @@ func (net *Network) Shutdown() { if err := node.Stop(); err != nil { log.Warn("Can't stop node", "id", node.ID(), "err", err) } + // If the node has the close method, call it. + if closer, ok := node.Node.(io.Closer); ok { + if err := closer.Close(); err != nil { + log.Warn("Can't close node", "id", node.ID(), "err", err) + } + } } close(net.quitc) } @@ -833,7 +840,8 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn return snap, nil } -var snapshotLoadTimeout = 120 * time.Second +// longrunning tests may need a longer timeout +var snapshotLoadTimeout = 900 * time.Second // Load loads a network snapshot func (net *Network) Load(snap *Snapshot) error { diff --git a/p2p/simulations/network_test.go b/p2p/simulations/network_test.go index 8b644ffb0fc6..01cd1000de47 100644 --- a/p2p/simulations/network_test.go +++ b/p2p/simulations/network_test.go @@ -193,7 +193,7 @@ OUTER: connEventCount = nodeCount -OUTER_TWO: +OuterTwo: for { select { case <-ctx.Done(): @@ -211,7 +211,7 @@ OUTER_TWO: connEventCount-- log.Debug("ev", "count", connEventCount) if connEventCount == 0 { - break OUTER_TWO + break OuterTwo } } } diff --git a/p2p/simulations/pipes/pipes.go b/p2p/simulations/pipes/pipes.go index 8532c1bcf0e9..ec277c0d147c 100644 --- a/p2p/simulations/pipes/pipes.go +++ b/p2p/simulations/pipes/pipes.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/p2p/simulations/test.go b/p2p/simulations/test.go index beeb414e41b3..687be6d0b8e3 100644 --- a/p2p/simulations/test.go +++ b/p2p/simulations/test.go @@ -1,3 +1,19 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package simulations import ( diff --git a/p2p/testing/peerpool.go b/p2p/testing/peerpool.go index 01ccce67eb80..91b9704c79f4 100644 --- a/p2p/testing/peerpool.go +++ b/p2p/testing/peerpool.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -26,7 +26,7 @@ import ( type TestPeer interface { ID() enode.ID - Drop(error) + Drop() } // TestPeerPool is an example peerPool to demonstrate registration of peer connections diff --git a/p2p/testing/protocolsession.go b/p2p/testing/protocolsession.go index 476c2a9840c5..e3a3915a81e1 100644 --- a/p2p/testing/protocolsession.go +++ b/p2p/testing/protocolsession.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/p2p/testing/protocoltester.go b/p2p/testing/protocoltester.go index cbd8ce6fe5ba..b80abcc264f5 100644 --- a/p2p/testing/protocoltester.go +++ b/p2p/testing/protocoltester.go @@ -1,4 +1,4 @@ -// Copyright 2017 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -25,6 +25,7 @@ package testing import ( "bytes" + "crypto/ecdsa" "fmt" "io" "io/ioutil" @@ -51,7 +52,7 @@ type ProtocolTester struct { // NewProtocolTester constructs a new ProtocolTester // it takes as argument the pivot node id, the number of dummy peers and the // protocol run function called on a peer connection by the p2p server -func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { +func NewProtocolTester(prvkey *ecdsa.PrivateKey, nodeCount int, run func(*p2p.Peer, p2p.MsgReadWriter) error) *ProtocolTester { services := adapters.Services{ "test": func(ctx *adapters.ServiceContext) (node.Service, error) { return &testNode{run}, nil @@ -62,23 +63,30 @@ func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter } adapter := adapters.NewSimAdapter(services) net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{}) - if _, err := net.NewNodeWithConfig(&adapters.NodeConfig{ - ID: id, + nodeConfig := &adapters.NodeConfig{ + PrivateKey: prvkey, EnableMsgEvents: true, Services: []string{"test"}, - }); err != nil { + } + if _, err := net.NewNodeWithConfig(nodeConfig); err != nil { panic(err.Error()) } - if err := net.Start(id); err != nil { + if err := net.Start(nodeConfig.ID); err != nil { panic(err.Error()) } - node := net.GetNode(id).Node.(*adapters.SimNode) - peers := make([]*adapters.NodeConfig, n) - nodes := make([]*enode.Node, n) - for i := 0; i < n; i++ { + node := net.GetNode(nodeConfig.ID).Node.(*adapters.SimNode) + peers := make([]*adapters.NodeConfig, nodeCount) + nodes := make([]*enode.Node, nodeCount) + for i := 0; i < nodeCount; i++ { peers[i] = adapters.RandomNodeConfig() peers[i].Services = []string{"mock"} + if _, err := net.NewNodeWithConfig(peers[i]); err != nil { + panic(fmt.Sprintf("error initializing peer %v: %v", peers[i].ID, err)) + } + if err := net.Start(peers[i].ID); err != nil { + panic(fmt.Sprintf("error starting peer %v: %v", peers[i].ID, err)) + } nodes[i] = peers[i].Node() } events := make(chan *p2p.PeerEvent, 1000) @@ -94,28 +102,21 @@ func NewProtocolTester(id enode.ID, n int, run func(*p2p.Peer, p2p.MsgReadWriter network: net, } - self.Connect(id, peers...) + self.Connect(nodeConfig.ID, peers...) return self } // Stop stops the p2p server -func (t *ProtocolTester) Stop() error { +func (t *ProtocolTester) Stop() { t.Server.Stop() - return nil + t.network.Shutdown() } // Connect brings up the remote peer node and connects it using the // p2p/simulations network connection with the in memory network adapter func (t *ProtocolTester) Connect(selfID enode.ID, peers ...*adapters.NodeConfig) { for _, peer := range peers { - log.Trace(fmt.Sprintf("start node %v", peer.ID)) - if _, err := t.network.NewNodeWithConfig(peer); err != nil { - panic(fmt.Sprintf("error starting peer %v: %v", peer.ID, err)) - } - if err := t.network.Start(peer.ID); err != nil { - panic(fmt.Sprintf("error starting peer %v: %v", peer.ID, err)) - } log.Trace(fmt.Sprintf("connect to %v", peer.ID)) if err := t.network.Connect(selfID, peer.ID); err != nil { panic(fmt.Sprintf("error connecting to peer %v: %v", peer.ID, err)) diff --git a/p2p/util.go b/p2p/util.go new file mode 100644 index 000000000000..2a6edf5ceeba --- /dev/null +++ b/p2p/util.go @@ -0,0 +1,82 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package p2p + +import ( + "container/heap" + "time" +) + +// expHeap tracks strings and their expiry time. +type expHeap []expItem + +// expItem is an entry in addrHistory. +type expItem struct { + item string + exp time.Time +} + +// nextExpiry returns the next expiry time. +func (h *expHeap) nextExpiry() time.Time { + return (*h)[0].exp +} + +// add adds an item and sets its expiry time. +func (h *expHeap) add(item string, exp time.Time) { + heap.Push(h, expItem{item, exp}) +} + +// remove removes an item. +func (h *expHeap) remove(item string) bool { + for i, v := range *h { + if v.item == item { + heap.Remove(h, i) + return true + } + } + return false +} + +// contains checks whether an item is present. +func (h expHeap) contains(item string) bool { + for _, v := range h { + if v.item == item { + return true + } + } + return false +} + +// expire removes items with expiry time before 'now'. +func (h *expHeap) expire(now time.Time) { + for h.Len() > 0 && h.nextExpiry().Before(now) { + heap.Pop(h) + } +} + +// heap.Interface boilerplate +func (h expHeap) Len() int { return len(h) } +func (h expHeap) Less(i, j int) bool { return h[i].exp.Before(h[j].exp) } +func (h expHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } +func (h *expHeap) Push(x interface{}) { *h = append(*h, x.(expItem)) } +func (h *expHeap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[0 : n-1] + return x +} diff --git a/p2p/util_test.go b/p2p/util_test.go new file mode 100644 index 000000000000..c9f2648dc92f --- /dev/null +++ b/p2p/util_test.go @@ -0,0 +1,54 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package p2p + +import ( + "testing" + "time" +) + +func TestExpHeap(t *testing.T) { + var h expHeap + + var ( + basetime = time.Unix(4000, 0) + exptimeA = basetime.Add(2 * time.Second) + exptimeB = basetime.Add(3 * time.Second) + exptimeC = basetime.Add(4 * time.Second) + ) + h.add("a", exptimeA) + h.add("b", exptimeB) + h.add("c", exptimeC) + + if !h.nextExpiry().Equal(exptimeA) { + t.Fatal("wrong nextExpiry") + } + if !h.contains("a") || !h.contains("b") || !h.contains("c") { + t.Fatal("heap doesn't contain all live items") + } + + h.expire(exptimeA.Add(1)) + if !h.nextExpiry().Equal(exptimeB) { + t.Fatal("wrong nextExpiry") + } + if h.contains("a") { + t.Fatal("heap contains a even though it has already expired") + } + if !h.contains("b") || !h.contains("c") { + t.Fatal("heap doesn't contain all live items") + } +} diff --git a/params/bootnodes.go b/params/bootnodes.go index bdaa4a18c4b4..967cba5bc4fd 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -20,11 +20,14 @@ package params // the main Ethereum network. var MainnetBootnodes = []string{ // Ethereum Foundation Go Bootnodes - "enode://a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c@52.16.188.185:30303", // IE - "enode://3f1d12044546b76342d59d4a05532c14b85aa669704bfe1f864fe079415aa2c02d743e03218e57a33fb94523adb54032871a6c51b2cc5514cb7c7e35b3ed0a99@13.93.211.84:30303", // US-WEST - "enode://78de8a0916848093c73790ead81d1928bec737d565119932b98c6b100d944b7a95e94f847f689fc723399d2e31129d182f7ef3863f2b4c820abbf3ab2722344d@191.235.84.50:30303", // BR - "enode://158f8aab45f6d19c6cbf4a089c2670541a8da11978a2f90dbf6a502a4a3bab80d288afdbeb7ec0ef6d92de563767f3b1ea9e8e334ca711e9f8e2df5a0385e8e6@13.75.154.138:30303", // AU - "enode://1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082@52.74.57.123:30303", // SG + "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", // bootnode-aws-ap-southeast-1-001 + "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", // bootnode-aws-us-east-1-001 + "enode://ca6de62fce278f96aea6ec5a2daadb877e51651247cb96ee310a318def462913b653963c155a0ef6c7d50048bba6e6cea881130857413d9f50a621546b590758@34.255.23.113:30303", // bootnode-aws-eu-west-1-001 + "enode://279944d8dcd428dffaa7436f25ca0ca43ae19e7bcf94a8fb7d1641651f92d121e972ac2e8f381414b80cc8e5555811c2ec6e1a99bb009b3f53c4c69923e11bd8@35.158.244.151:30303", // bootnode-aws-eu-central-1-001 + "enode://8499da03c47d637b20eee24eec3c356c9a2e6148d6fe25ca195c7949ab8ec2c03e3556126b0d7ed644675e78c4318b08691b7b57de10e5f0d40d05b09238fa0a@52.187.207.27:30303", // bootnode-azure-australiaeast-001 + "enode://103858bdb88756c71f15e9b5e09b56dc1be52f0a5021d46301dbbfb7e130029cc9d0d6f73f693bc29b665770fff7da4d34f3c6379fe12721b5d7a0bcb5ca1fc1@191.234.162.198:30303", // bootnode-azure-brazilsouth-001 + "enode://715171f50508aba88aecd1250af392a45a330af91d7b90701c436b618c86aaa1589c9184561907bebbb56439b8f8787bc01f49a7c77276c58c1b09822d75e8e8@52.231.165.108:30303", // bootnode-azure-koreasouth-001 + "enode://5d6d7cd20d6da4bb83a1d28cadb5d409b64edf314c0335df658c1a54e32c7c4a7ab7823d57c39b6a757556e68ff1df17c748b698544a55cb488b52479a92b60f@104.42.217.25:30303", // bootnode-azure-westus-001 // Ethereum Foundation C++ Bootnodes "enode://979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9@5.1.83.226:30303", // DE @@ -50,7 +53,7 @@ var RinkebyBootnodes = []string{ // GoerliBootnodes are the enode URLs of the P2P bootstrap nodes running on the // Görli test network. var GoerliBootnodes = []string{ - // Upstrem bootnodes + // Upstream bootnodes "enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303", "enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303", "enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313", diff --git a/params/config.go b/params/config.go index 44b2ffeba87d..a400485248b9 100644 --- a/params/config.go +++ b/params/config.go @@ -17,10 +17,12 @@ package params import ( + "encoding/binary" "fmt" "math/big" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" ) // Genesis hashes to enforce below configs on. @@ -28,8 +30,27 @@ var ( MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") TestnetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") RinkebyGenesisHash = common.HexToHash("0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177") + GoerliGenesisHash = common.HexToHash("0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a") ) +// TrustedCheckpoints associates each known checkpoint with the genesis hash of +// the chain it belongs to. +var TrustedCheckpoints = map[common.Hash]*TrustedCheckpoint{ + MainnetGenesisHash: MainnetTrustedCheckpoint, + TestnetGenesisHash: TestnetTrustedCheckpoint, + RinkebyGenesisHash: RinkebyTrustedCheckpoint, + GoerliGenesisHash: GoerliTrustedCheckpoint, +} + +// CheckpointOracles associates each known checkpoint oracles with the genesis hash of +// the chain it belongs to. +var CheckpointOracles = map[common.Hash]*CheckpointOracleConfig{ + MainnetGenesisHash: MainnetCheckpointOracle, + TestnetGenesisHash: TestnetCheckpointOracle, + RinkebyGenesisHash: RinkebyCheckpointOracle, + GoerliGenesisHash: GoerliCheckpointOracle, +} + var ( // MainnetChainConfig is the chain parameters to run a node on the main network. MainnetChainConfig = &ChainConfig{ @@ -44,16 +65,29 @@ var ( ByzantiumBlock: big.NewInt(4370000), ConstantinopleBlock: big.NewInt(7280000), PetersburgBlock: big.NewInt(7280000), + IstanbulBlock: nil, Ethash: new(EthashConfig), } // MainnetTrustedCheckpoint contains the light client trusted checkpoint for the main network. MainnetTrustedCheckpoint = &TrustedCheckpoint{ - Name: "mainnet", - SectionIndex: 216, - SectionHead: common.HexToHash("0xae3e551c8d60d06fd411a8e6008e90625d3bb0cbbf664b65d5ed90b318553541"), - CHTRoot: common.HexToHash("0xeea7d2ab3545a37deecc66fc43c9556ae337c3ea1c6893e401428207bdb8e434"), - BloomRoot: common.HexToHash("0xb0d4176d160d67b99a9f963281e52bce0583a566b74b4497fe3ed24ae04004ff"), + SectionIndex: 260, + SectionHead: common.HexToHash("0x613fc3c65f2abe9d66564c2d1f7c7600cd51a90a26bd9c0fda1ad9c6739428eb"), + CHTRoot: common.HexToHash("0x2a81a659f524be86929e4d34e4da05c024a68c9f44bd1184eae303802baa121e"), + BloomRoot: common.HexToHash("0x7718ec4b9ce11365b98063dc90808a87c7c1dc14c76e418a2a64a717688a601d"), + } + + // MainnetCheckpointOracle contains a set of configs for the main network oracle. + MainnetCheckpointOracle = &CheckpointOracleConfig{ + Address: common.HexToAddress("0x9a9070028361F7AAbeB3f2F2Dc07F82C4a98A02a"), + Signers: []common.Address{ + common.HexToAddress("0x1b2C260efc720BE89101890E4Db589b44E950527"), // Peter + common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin + common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt + common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary + common.HexToAddress("0x0DF8fa387C602AE62559cC4aFa4972A7045d6707"), // Guillaume + }, + Threshold: 2, } // TestnetChainConfig contains the chain parameters to run a node on the Ropsten test network. @@ -69,16 +103,29 @@ var ( ByzantiumBlock: big.NewInt(1700000), ConstantinopleBlock: big.NewInt(4230000), PetersburgBlock: big.NewInt(4939394), + IstanbulBlock: big.NewInt(6485846), Ethash: new(EthashConfig), } // TestnetTrustedCheckpoint contains the light client trusted checkpoint for the Ropsten test network. TestnetTrustedCheckpoint = &TrustedCheckpoint{ - Name: "testnet", - SectionIndex: 148, - SectionHead: common.HexToHash("0x4d3181bedb6aa96a6f3efa866c71f7802400d0fb4a6906946c453630d850efc0"), - CHTRoot: common.HexToHash("0x25df2f9d63a5f84b2852988f0f0f7af5a7877da061c11b85c812780b5a27a5ec"), - BloomRoot: common.HexToHash("0x0584834e5222471a06c669d210e302ca602780eaaddd04634fd65471c2a91419"), + SectionIndex: 194, + SectionHead: common.HexToHash("0x34b61d0b77bbbbc7747db9a786e5ac976a83ec0c7c0238d319ec95243754cfcc"), + CHTRoot: common.HexToHash("0x6793d6efd08e5f17074f5cfe3f32cc552a7514d967d03ea253b0c1cefec68f00"), + BloomRoot: common.HexToHash("0x07570f99a7d5dcdc95c40ec9145b65ecbda0c4e61f9f99fa9eff39d91a4d8ad5"), + } + + // TestnetCheckpointOracle contains a set of configs for the Ropsten test network oracle. + TestnetCheckpointOracle = &CheckpointOracleConfig{ + Address: common.HexToAddress("0xEF79475013f154E6A65b54cB2742867791bf0B84"), + Signers: []common.Address{ + common.HexToAddress("0x32162F3581E88a5f62e8A61892B42C46E2c18f7b"), // Peter + common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin + common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt + common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary + common.HexToAddress("0x0DF8fa387C602AE62559cC4aFa4972A7045d6707"), // Guillaume + }, + Threshold: 2, } // RinkebyChainConfig contains the chain parameters to run a node on the Rinkeby test network. @@ -93,7 +140,8 @@ var ( EIP158Block: big.NewInt(3), ByzantiumBlock: big.NewInt(1035301), ConstantinopleBlock: big.NewInt(3660663), - PetersburgBlock: big.NewInt(9999999), //TODO! Insert Rinkeby block number + PetersburgBlock: big.NewInt(4321234), + IstanbulBlock: big.NewInt(5435345), Clique: &CliqueConfig{ Period: 15, Epoch: 30000, @@ -102,11 +150,22 @@ var ( // RinkebyTrustedCheckpoint contains the light client trusted checkpoint for the Rinkeby test network. RinkebyTrustedCheckpoint = &TrustedCheckpoint{ - Name: "rinkeby", - SectionIndex: 113, - SectionHead: common.HexToHash("0xb812f3095af3af1cb2de7d7c2086ee807736a7315992c461b0986699185daf77"), - CHTRoot: common.HexToHash("0x5416d0924925eb835987ad3d1f059ecc66778c51959c8246a7a35b22ec5f3109"), - BloomRoot: common.HexToHash("0xcf74ca2c14e843b366561dab4fc64237bf6bb335119cbc97d723f3b501863470"), + SectionIndex: 155, + SectionHead: common.HexToHash("0x746df19e755fa6310ce3b00bb29229d590aa80002012e64ef648010b8b63db67"), + CHTRoot: common.HexToHash("0xc6a1093d82003141feb1052a96e0c95cea62d64c230f805d7835857d321c0c1a"), + BloomRoot: common.HexToHash("0x9d0fc2ea21c5850a9bceb73a82a405e9934788f56a5d20f81b0bb417497a9f92"), + } + + // RinkebyCheckpointOracle contains a set of configs for the Rinkeby test network oracle. + RinkebyCheckpointOracle = &CheckpointOracleConfig{ + Address: common.HexToAddress("0xebe8eFA441B9302A0d7eaECc277c09d20D684540"), + Signers: []common.Address{ + common.HexToAddress("0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3"), // Peter + common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin + common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt + common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary + }, + Threshold: 2, } // GoerliChainConfig contains the chain parameters to run a node on the Görli test network. @@ -121,6 +180,7 @@ var ( ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(1561651), Clique: &CliqueConfig{ Period: 15, Epoch: 30000, @@ -129,11 +189,23 @@ var ( // GoerliTrustedCheckpoint contains the light client trusted checkpoint for the Görli test network. GoerliTrustedCheckpoint = &TrustedCheckpoint{ - Name: "goerli", - SectionIndex: 0, - SectionHead: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - CHTRoot: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), - BloomRoot: common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), + SectionIndex: 39, + SectionHead: common.HexToHash("0x512b5c1533d6faa3b968f095e61ad96007fda91ea296af433d96045580d9c140"), + CHTRoot: common.HexToHash("0x1a8e8ffd2cae5de61c2d06a686944b7809064ce38109c0e3ca203b5ed363bb0e"), + BloomRoot: common.HexToHash("0x32a3fec7d590143b0ccc4f1bb9fc1d9e03a30894e625a1d44d5be60e7b932491"), + } + + // GoerliCheckpointOracle contains a set of configs for the Goerli test network oracle. + GoerliCheckpointOracle = &CheckpointOracleConfig{ + Address: common.HexToAddress("0x18CA0E045F0D772a851BC7e48357Bcaab0a0795D"), + Signers: []common.Address{ + common.HexToAddress("0x4769bcaD07e3b938B7f43EB7D278Bc7Cb9efFb38"), // Peter + common.HexToAddress("0x78d1aD571A1A09D60D9BBf25894b44e4C8859595"), // Martin + common.HexToAddress("0x286834935f4A8Cfb4FF4C77D5770C2775aE2b0E7"), // Zsolt + common.HexToAddress("0xb86e2B0Ab5A4B1373e40c51A7C712c70Ba2f9f8E"), // Gary + common.HexToAddress("0x0DF8fa387C602AE62559cC4aFa4972A7045d6707"), // Guillaume + }, + Threshold: 2, } // AllEthashProtocolChanges contains every protocol change (EIPs) introduced @@ -141,16 +213,16 @@ var ( // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil} + AllEthashProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil} // AllCliqueProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Clique consensus. // // This configuration is intentionally not using keyed fields to force anyone // adding flags to the config to also have to set these fields. - AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}} + AllCliqueProtocolChanges = &ChainConfig{big.NewInt(1337), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, nil, &CliqueConfig{Period: 0, Epoch: 30000}} - TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil} + TestChainConfig = &ChainConfig{big.NewInt(1), big.NewInt(0), nil, false, big.NewInt(0), common.Hash{}, big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), big.NewInt(0), nil, new(EthashConfig), nil} TestRules = TestChainConfig.Rules(new(big.Int)) ) @@ -159,13 +231,43 @@ var ( // used to start light syncing from this checkpoint and avoid downloading the // entire header chain while still being able to securely access old headers/logs. type TrustedCheckpoint struct { - Name string `json:"-"` SectionIndex uint64 `json:"sectionIndex"` SectionHead common.Hash `json:"sectionHead"` CHTRoot common.Hash `json:"chtRoot"` BloomRoot common.Hash `json:"bloomRoot"` } +// HashEqual returns an indicator comparing the itself hash with given one. +func (c *TrustedCheckpoint) HashEqual(hash common.Hash) bool { + if c.Empty() { + return hash == common.Hash{} + } + return c.Hash() == hash +} + +// Hash returns the hash of checkpoint's four key fields(index, sectionHead, chtRoot and bloomTrieRoot). +func (c *TrustedCheckpoint) Hash() common.Hash { + buf := make([]byte, 8+3*common.HashLength) + binary.BigEndian.PutUint64(buf, c.SectionIndex) + copy(buf[8:], c.SectionHead.Bytes()) + copy(buf[8+common.HashLength:], c.CHTRoot.Bytes()) + copy(buf[8+2*common.HashLength:], c.BloomRoot.Bytes()) + return crypto.Keccak256Hash(buf) +} + +// Empty returns an indicator whether the checkpoint is regarded as empty. +func (c *TrustedCheckpoint) Empty() bool { + return c.SectionHead == (common.Hash{}) || c.CHTRoot == (common.Hash{}) || c.BloomRoot == (common.Hash{}) +} + +// CheckpointOracleConfig represents a set of checkpoint contract(which acts as an oracle) +// config which used for light client checkpoint syncing. +type CheckpointOracleConfig struct { + Address common.Address `json:"address"` + Signers []common.Address `json:"signers"` + Threshold uint64 `json:"threshold"` +} + // ChainConfig is the core config which determines the blockchain settings. // // ChainConfig is stored in the database on a per block basis. This means @@ -189,6 +291,7 @@ type ChainConfig struct { ByzantiumBlock *big.Int `json:"byzantiumBlock,omitempty"` // Byzantium switch block (nil = no fork, 0 = already on byzantium) ConstantinopleBlock *big.Int `json:"constantinopleBlock,omitempty"` // Constantinople switch block (nil = no fork, 0 = already activated) PetersburgBlock *big.Int `json:"petersburgBlock,omitempty"` // Petersburg switch block (nil = same as Constantinople) + IstanbulBlock *big.Int `json:"istanbulBlock,omitempty"` // Istanbul switch block (nil = no fork, 0 = already on istanbul) EWASMBlock *big.Int `json:"ewasmBlock,omitempty"` // EWASM switch block (nil = no fork, 0 = already activated) // Various consensus engines @@ -226,7 +329,7 @@ func (c *ChainConfig) String() string { default: engine = "unknown" } - return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v ConstantinopleFix: %v Engine: %v}", + return fmt.Sprintf("{ChainID: %v Homestead: %v DAO: %v DAOSupport: %v EIP150: %v EIP155: %v EIP158: %v Byzantium: %v Constantinople: %v Petersburg: %v Istanbul: %v Engine: %v}", c.ChainID, c.HomesteadBlock, c.DAOForkBlock, @@ -237,6 +340,7 @@ func (c *ChainConfig) String() string { c.ByzantiumBlock, c.ConstantinopleBlock, c.PetersburgBlock, + c.IstanbulBlock, engine, ) } @@ -283,30 +387,16 @@ func (c *ChainConfig) IsPetersburg(num *big.Int) bool { return isForked(c.PetersburgBlock, num) || c.PetersburgBlock == nil && isForked(c.ConstantinopleBlock, num) } +// IsIstanbul returns whether num is either equal to the Istanbul fork block or greater. +func (c *ChainConfig) IsIstanbul(num *big.Int) bool { + return isForked(c.IstanbulBlock, num) +} + // IsEWASM returns whether num represents a block number after the EWASM fork func (c *ChainConfig) IsEWASM(num *big.Int) bool { return isForked(c.EWASMBlock, num) } -// GasTable returns the gas table corresponding to the current phase (homestead or homestead reprice). -// -// The returned GasTable's fields shouldn't, under any circumstances, be changed. -func (c *ChainConfig) GasTable(num *big.Int) GasTable { - if num == nil { - return GasTableHomestead - } - switch { - case c.IsConstantinople(num): - return GasTableConstantinople - case c.IsEIP158(num): - return GasTableEIP158 - case c.IsEIP150(num): - return GasTableEIP150 - default: - return GasTableHomestead - } -} - // CheckCompatible checks whether scheduled fork transitions have been imported // with a mismatching chain configuration. func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64) *ConfigCompatError { @@ -354,7 +444,10 @@ func (c *ChainConfig) checkCompatible(newcfg *ChainConfig, head *big.Int) *Confi return newCompatError("Constantinople fork block", c.ConstantinopleBlock, newcfg.ConstantinopleBlock) } if isForkIncompatible(c.PetersburgBlock, newcfg.PetersburgBlock, head) { - return newCompatError("ConstantinopleFix fork block", c.PetersburgBlock, newcfg.PetersburgBlock) + return newCompatError("Petersburg fork block", c.PetersburgBlock, newcfg.PetersburgBlock) + } + if isForkIncompatible(c.IstanbulBlock, newcfg.IstanbulBlock, head) { + return newCompatError("Istanbul fork block", c.IstanbulBlock, newcfg.IstanbulBlock) } if isForkIncompatible(c.EWASMBlock, newcfg.EWASMBlock, head) { return newCompatError("ewasm fork block", c.EWASMBlock, newcfg.EWASMBlock) @@ -423,9 +516,9 @@ func (err *ConfigCompatError) Error() string { // Rules is a one time interface meaning that it shouldn't be used in between transition // phases. type Rules struct { - ChainID *big.Int - IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool - IsByzantium, IsConstantinople, IsPetersburg bool + ChainID *big.Int + IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool + IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool } // Rules ensures c's ChainID is not nil. @@ -443,5 +536,6 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { IsByzantium: c.IsByzantium(num), IsConstantinople: c.IsConstantinople(num), IsPetersburg: c.IsPetersburg(num), + IsIstanbul: c.IsIstanbul(num), } } diff --git a/params/gas_table.go b/params/gas_table.go deleted file mode 100644 index 6c4a38269cda..000000000000 --- a/params/gas_table.go +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package params - -// GasTable organizes gas prices for different ethereum phases. -type GasTable struct { - ExtcodeSize uint64 - ExtcodeCopy uint64 - ExtcodeHash uint64 - Balance uint64 - SLoad uint64 - Calls uint64 - Suicide uint64 - - ExpByte uint64 - - // CreateBySuicide occurs when the - // refunded account is one that does - // not exist. This logic is similar - // to call. May be left nil. Nil means - // not charged. - CreateBySuicide uint64 -} - -// Variables containing gas prices for different ethereum phases. -var ( - // GasTableHomestead contain the gas prices for - // the homestead phase. - GasTableHomestead = GasTable{ - ExtcodeSize: 20, - ExtcodeCopy: 20, - Balance: 20, - SLoad: 50, - Calls: 40, - Suicide: 0, - ExpByte: 10, - } - - // GasTableEIP150 contain the gas re-prices for - // the EIP150 phase. - GasTableEIP150 = GasTable{ - ExtcodeSize: 700, - ExtcodeCopy: 700, - Balance: 400, - SLoad: 200, - Calls: 700, - Suicide: 5000, - ExpByte: 10, - - CreateBySuicide: 25000, - } - // GasTableEIP158 contain the gas re-prices for - // the EIP155/EIP158 phase. - GasTableEIP158 = GasTable{ - ExtcodeSize: 700, - ExtcodeCopy: 700, - Balance: 400, - SLoad: 200, - Calls: 700, - Suicide: 5000, - ExpByte: 50, - - CreateBySuicide: 25000, - } - // GasTableConstantinople contain the gas re-prices for - // the constantinople phase. - GasTableConstantinople = GasTable{ - ExtcodeSize: 700, - ExtcodeCopy: 700, - ExtcodeHash: 400, - Balance: 400, - SLoad: 200, - Calls: 700, - Suicide: 5000, - ExpByte: 50, - - CreateBySuicide: 25000, - } -) diff --git a/params/network_params.go b/params/network_params.go index f8731e897970..bba24721c134 100644 --- a/params/network_params.go +++ b/params/network_params.go @@ -32,13 +32,8 @@ const ( // considered probably final and its rotated bits are calculated. BloomConfirms = 256 - // CHTFrequencyClient is the block frequency for creating CHTs on the client side. - CHTFrequencyClient = 32768 - - // CHTFrequencyServer is the block frequency for creating CHTs on the server side. - // Eventually this can be merged back with the client version, but that requires a - // full database upgrade, so that should be left for a suitable moment. - CHTFrequencyServer = 4096 + // CHTFrequency is the block frequency for creating CHTs + CHTFrequency = 32768 // BloomTrieFrequency is the block frequency for creating BloomTrie on both // server/client sides. @@ -51,4 +46,16 @@ const ( // HelperTrieProcessConfirmations is the number of confirmations before a HelperTrie // is generated HelperTrieProcessConfirmations = 256 + + // CheckpointFrequency is the block frequency for creating checkpoint + CheckpointFrequency = 32768 + + // CheckpointProcessConfirmations is the number before a checkpoint is generated + CheckpointProcessConfirmations = 256 + + // ImmutabilityThreshold is the number of blocks after which a chain segment is + // considered immutable (i.e. soft finality). It is used by the downloader as a + // hard limit against deep ancestors, by the blockchain against deep reorgs, by + // the freezer as the cutoff treshold and by clique as the snapshot trust limit. + ImmutabilityThreshold = 90000 ) diff --git a/params/protocol_params.go b/params/protocol_params.go index 86408172781f..a7f540442b38 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -52,40 +52,84 @@ const ( NetSstoreResetRefund uint64 = 4800 // Once per SSTORE operation for resetting to the original non-zero value NetSstoreResetClearRefund uint64 = 19800 // Once per SSTORE operation for resetting to the original zero value - JumpdestGas uint64 = 1 // Refunded gas, once per SSTORE operation if the zeroness changes to zero. - EpochDuration uint64 = 30000 // Duration between proof-of-work epochs. - CallGas uint64 = 40 // Once per CALL operation & message call transaction. - CreateDataGas uint64 = 200 // - CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack. - ExpGas uint64 = 10 // Once per EXP instruction - LogGas uint64 = 375 // Per LOG* operation. - CopyGas uint64 = 3 // - StackLimit uint64 = 1024 // Maximum size of VM stack allowed. - TierStepGas uint64 = 0 // Once per operation, for a selection of them. - LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas. - CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction. - Create2Gas uint64 = 32000 // Once per CREATE2 operation - SuicideRefundGas uint64 = 24000 // Refunded following a suicide operation. - MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL. - TxDataNonZeroGas uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions. + SstoreSentryGasEIP2200 uint64 = 2300 // Minimum gas required to be present for an SSTORE call, not consumed + SstoreNoopGasEIP2200 uint64 = 800 // Once per SSTORE operation if the value doesn't change. + SstoreDirtyGasEIP2200 uint64 = 800 // Once per SSTORE operation if a dirty value is changed. + SstoreInitGasEIP2200 uint64 = 20000 // Once per SSTORE operation from clean zero to non-zero + SstoreInitRefundEIP2200 uint64 = 19200 // Once per SSTORE operation for resetting to the original zero value + SstoreCleanGasEIP2200 uint64 = 5000 // Once per SSTORE operation from clean non-zero to something else + SstoreCleanRefundEIP2200 uint64 = 4200 // Once per SSTORE operation for resetting to the original non-zero value + SstoreClearRefundEIP2200 uint64 = 15000 // Once per SSTORE operation for clearing an originally existing storage slot + + JumpdestGas uint64 = 1 // Once per JUMPDEST operation. + EpochDuration uint64 = 30000 // Duration between proof-of-work epochs. + + CreateDataGas uint64 = 200 // + CallCreateDepth uint64 = 1024 // Maximum depth of call/create stack. + ExpGas uint64 = 10 // Once per EXP instruction + LogGas uint64 = 375 // Per LOG* operation. + CopyGas uint64 = 3 // + StackLimit uint64 = 1024 // Maximum size of VM stack allowed. + TierStepGas uint64 = 0 // Once per operation, for a selection of them. + LogTopicGas uint64 = 375 // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas. + CreateGas uint64 = 32000 // Once per CREATE operation & contract-creation transaction. + Create2Gas uint64 = 32000 // Once per CREATE2 operation + SelfdestructRefundGas uint64 = 24000 // Refunded following a selfdestruct operation. + MemoryGas uint64 = 3 // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL. + TxDataNonZeroGasFrontier uint64 = 68 // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions. + TxDataNonZeroGasEIP2028 uint64 = 16 // Per byte of non zero data attached to a transaction after EIP 2028 (part in Istanbul) + + // These have been changed during the course of the chain + CallGasFrontier uint64 = 40 // Once per CALL operation & message call transaction. + CallGasEIP150 uint64 = 700 // Static portion of gas for CALL-derivates after EIP 150 (Tangerine) + BalanceGasFrontier uint64 = 20 // The cost of a BALANCE operation + BalanceGasEIP150 uint64 = 400 // The cost of a BALANCE operation after Tangerine + BalanceGasEIP1884 uint64 = 700 // The cost of a BALANCE operation after EIP 1884 (part of Istanbul) + ExtcodeSizeGasFrontier uint64 = 20 // Cost of EXTCODESIZE before EIP 150 (Tangerine) + ExtcodeSizeGasEIP150 uint64 = 700 // Cost of EXTCODESIZE after EIP 150 (Tangerine) + SloadGasFrontier uint64 = 50 + SloadGasEIP150 uint64 = 200 + SloadGasEIP1884 uint64 = 800 // Cost of SLOAD after EIP 1884 (part of Istanbul) + ExtcodeHashGasConstantinople uint64 = 400 // Cost of EXTCODEHASH (introduced in Constantinople) + ExtcodeHashGasEIP1884 uint64 = 700 // Cost of EXTCODEHASH after EIP 1884 (part in Istanbul) + SelfdestructGasEIP150 uint64 = 5000 // Cost of SELFDESTRUCT post EIP 150 (Tangerine) + + // EXP has a dynamic portion depending on the size of the exponent + ExpByteFrontier uint64 = 10 // was set to 10 in Frontier + ExpByteEIP158 uint64 = 50 // was raised to 50 during Eip158 (Spurious Dragon) + + // Extcodecopy has a dynamic AND a static cost. This represents only the + // static portion of the gas. It was changed during EIP 150 (Tangerine) + ExtcodeCopyBaseFrontier uint64 = 20 + ExtcodeCopyBaseEIP150 uint64 = 700 + + // CreateBySelfdestructGas is used when the refunded account is one that does + // not exist. This logic is similar to call. + // Introduced in Tangerine Whistle (Eip 150) + CreateBySelfdestructGas uint64 = 25000 MaxCodeSize = 253952 // Maximum bytecode to permit for a contract MaxTransactionSize = 262144 // Maximum transaction size // Precompiled contract gas prices - EcrecoverGas uint64 = 3000 // Elliptic curve sender recovery gas price - Sha256BaseGas uint64 = 60 // Base price for a SHA256 operation - Sha256PerWordGas uint64 = 12 // Per-word price for a SHA256 operation - Ripemd160BaseGas uint64 = 600 // Base price for a RIPEMD160 operation - Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation - IdentityBaseGas uint64 = 15 // Base price for a data copy operation - IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation - ModExpQuadCoeffDiv uint64 = 20 // Divisor for the quadratic particle of the big int modular exponentiation - Bn256AddGas uint64 = 500 // Gas needed for an elliptic curve addition - Bn256ScalarMulGas uint64 = 40000 // Gas needed for an elliptic curve scalar multiplication - Bn256PairingBaseGas uint64 = 100000 // Base price for an elliptic curve pairing check - Bn256PairingPerPointGas uint64 = 80000 // Per-point price for an elliptic curve pairing check + EcrecoverGas uint64 = 3000 // Elliptic curve sender recovery gas price + Sha256BaseGas uint64 = 60 // Base price for a SHA256 operation + Sha256PerWordGas uint64 = 12 // Per-word price for a SHA256 operation + Ripemd160BaseGas uint64 = 600 // Base price for a RIPEMD160 operation + Ripemd160PerWordGas uint64 = 120 // Per-word price for a RIPEMD160 operation + IdentityBaseGas uint64 = 15 // Base price for a data copy operation + IdentityPerWordGas uint64 = 3 // Per-work price for a data copy operation + ModExpQuadCoeffDiv uint64 = 20 // Divisor for the quadratic particle of the big int modular exponentiation + + Bn256AddGasByzantium uint64 = 500 // Byzantium gas needed for an elliptic curve addition + Bn256AddGasIstanbul uint64 = 150 // Gas needed for an elliptic curve addition + Bn256ScalarMulGasByzantium uint64 = 40000 // Byzantium gas needed for an elliptic curve scalar multiplication + Bn256ScalarMulGasIstanbul uint64 = 6000 // Gas needed for an elliptic curve scalar multiplication + Bn256PairingBaseGasByzantium uint64 = 100000 // Byzantium base price for an elliptic curve pairing check + Bn256PairingBaseGasIstanbul uint64 = 45000 // Base price for an elliptic curve pairing check + Bn256PairingPerPointGasByzantium uint64 = 80000 // Byzantium per-point price for an elliptic curve pairing check + Bn256PairingPerPointGasIstanbul uint64 = 34000 // Per-point price for an elliptic curve pairing check ) var ( diff --git a/params/version.go b/params/version.go index 5f187b59474e..a05c2f5fec20 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 0 // Major version component of the current release VersionMinor = 9 // Minor version component of the current release - VersionPatch = 5 // Patch version component of the current release + VersionPatch = 6 // Patch version component of the current release VersionMeta = "stable" // Version metadata to append to the version string ) @@ -55,10 +55,13 @@ func ArchiveVersion(gitCommit string) string { return vsn } -func VersionWithCommit(gitCommit string) string { +func VersionWithCommit(gitCommit, gitDate string) string { vsn := VersionWithMeta if len(gitCommit) >= 8 { vsn += "-" + gitCommit[:8] } + if (VersionMeta != "stable") && (gitDate != "") { + vsn += "-" + gitDate + } return vsn } diff --git a/rlp/decode.go b/rlp/decode.go index dbbe599597a8..524395915d34 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -26,6 +26,7 @@ import ( "math/big" "reflect" "strings" + "sync" ) var ( @@ -48,95 +49,49 @@ var ( errUintOverflow = errors.New("rlp: uint overflow") errNoPointer = errors.New("rlp: interface given to Decode must be a pointer") errDecodeIntoNil = errors.New("rlp: pointer given to Decode must not be nil") + + streamPool = sync.Pool{ + New: func() interface{} { return new(Stream) }, + } ) -// Decoder is implemented by types that require custom RLP -// decoding rules or need to decode into private fields. +// Decoder is implemented by types that require custom RLP decoding rules or need to decode +// into private fields. // -// The DecodeRLP method should read one value from the given -// Stream. It is not forbidden to read less or more, but it might -// be confusing. +// The DecodeRLP method should read one value from the given Stream. It is not forbidden to +// read less or more, but it might be confusing. type Decoder interface { DecodeRLP(*Stream) error } -// Decode parses RLP-encoded data from r and stores the result in the -// value pointed to by val. Val must be a non-nil pointer. If r does -// not implement ByteReader, Decode will do its own buffering. -// -// Decode uses the following type-dependent decoding rules: -// -// If the type implements the Decoder interface, decode calls -// DecodeRLP. -// -// To decode into a pointer, Decode will decode into the value pointed -// to. If the pointer is nil, a new value of the pointer's element -// type is allocated. If the pointer is non-nil, the existing value -// will be reused. -// -// To decode into a struct, Decode expects the input to be an RLP -// list. The decoded elements of the list are assigned to each public -// field in the order given by the struct's definition. The input list -// must contain an element for each decoded field. Decode returns an -// error if there are too few or too many elements. -// -// The decoding of struct fields honours certain struct tags, "tail", -// "nil" and "-". -// -// The "-" tag ignores fields. -// -// For an explanation of "tail", see the example. -// -// The "nil" tag applies to pointer-typed fields and changes the decoding -// rules for the field such that input values of size zero decode as a nil -// pointer. This tag can be useful when decoding recursive types. -// -// type StructWithEmptyOK struct { -// Foo *[20]byte `rlp:"nil"` -// } -// -// To decode into a slice, the input must be a list and the resulting -// slice will contain the input elements in order. For byte slices, -// the input must be an RLP string. Array types decode similarly, with -// the additional restriction that the number of input elements (or -// bytes) must match the array's length. -// -// To decode into a Go string, the input must be an RLP string. The -// input bytes are taken as-is and will not necessarily be valid UTF-8. +// Decode parses RLP-encoded data from r and stores the result in the value pointed to by +// val. Please see package-level documentation for the decoding rules. Val must be a +// non-nil pointer. // -// To decode into an unsigned integer type, the input must also be an RLP -// string. The bytes are interpreted as a big endian representation of -// the integer. If the RLP string is larger than the bit size of the -// type, Decode will return an error. Decode also supports *big.Int. -// There is no size limit for big integers. +// If r does not implement ByteReader, Decode will do its own buffering. // -// To decode into an interface value, Decode stores one of these -// in the value: -// -// []interface{}, for RLP lists -// []byte, for RLP strings -// -// Non-empty interface types are not supported, nor are booleans, -// signed integers, floating point numbers, maps, channels and -// functions. -// -// Note that Decode does not set an input limit for all readers -// and may be vulnerable to panics cause by huge value sizes. If -// you need an input limit, use +// Note that Decode does not set an input limit for all readers and may be vulnerable to +// panics cause by huge value sizes. If you need an input limit, use // // NewStream(r, limit).Decode(val) func Decode(r io.Reader, val interface{}) error { - // TODO: this could use a Stream from a pool. - return NewStream(r, 0).Decode(val) + stream := streamPool.Get().(*Stream) + defer streamPool.Put(stream) + + stream.Reset(r, 0) + return stream.Decode(val) } -// DecodeBytes parses RLP data from b into val. -// Please see the documentation of Decode for the decoding rules. -// The input must contain exactly one value and no trailing data. +// DecodeBytes parses RLP data from b into val. Please see package-level documentation for +// the decoding rules. The input must contain exactly one value and no trailing data. func DecodeBytes(b []byte, val interface{}) error { - // TODO: this could use a Stream from a pool. r := bytes.NewReader(b) - if err := NewStream(r, uint64(len(b))).Decode(val); err != nil { + + stream := streamPool.Get().(*Stream) + defer streamPool.Put(stream) + + stream.Reset(r, uint64(len(b))) + if err := stream.Decode(val); err != nil { return err } if r.Len() > 0 { @@ -197,14 +152,15 @@ func makeDecoder(typ reflect.Type, tags tags) (dec decoder, err error) { switch { case typ == rawValueType: return decodeRawValue, nil - case typ.Implements(decoderInterface): return decodeDecoder, nil - case kind != reflect.Ptr && reflect.PtrTo(typ).Implements(decoderInterface): - return decodeDecoderNoPtr, nil case typ.AssignableTo(reflect.PtrTo(bigInt)): return decodeBigInt, nil case typ.AssignableTo(bigInt): return decodeBigIntNoPtr, nil + case kind == reflect.Ptr: + return makePtrDecoder(typ, tags) + case reflect.PtrTo(typ).Implements(decoderInterface): + return decodeDecoder, nil case isUint(kind): return decodeUint, nil case kind == reflect.Bool: @@ -215,11 +171,6 @@ func makeDecoder(typ reflect.Type, tags tags) (dec decoder, err error) { return makeListDecoder(typ, tags) case kind == reflect.Struct: return makeStructDecoder(typ) - case kind == reflect.Ptr: - if tags.nilOK { - return makeOptionalPtrDecoder(typ) - } - return makePtrDecoder(typ) case kind == reflect.Interface: return decodeInterface, nil default: @@ -294,9 +245,9 @@ func makeListDecoder(typ reflect.Type, tag tags) (decoder, error) { } return decodeByteSlice, nil } - etypeinfo, err := cachedTypeInfo1(etype, tags{}) - if err != nil { - return nil, err + etypeinfo := cachedTypeInfo1(etype, tags{}) + if etypeinfo.decoderErr != nil { + return nil, etypeinfo.decoderErr } var dec decoder switch { @@ -434,6 +385,11 @@ func makeStructDecoder(typ reflect.Type) (decoder, error) { if err != nil { return nil, err } + for _, f := range fields { + if f.info.decoderErr != nil { + return nil, structFieldError{typ, f.index, f.info.decoderErr} + } + } dec := func(s *Stream, val reflect.Value) (err error) { if _, err := s.List(); err != nil { return wrapStreamError(err, typ) @@ -451,15 +407,22 @@ func makeStructDecoder(typ reflect.Type) (decoder, error) { return dec, nil } -// makePtrDecoder creates a decoder that decodes into -// the pointer's element type. -func makePtrDecoder(typ reflect.Type) (decoder, error) { +// makePtrDecoder creates a decoder that decodes into the pointer's element type. +func makePtrDecoder(typ reflect.Type, tag tags) (decoder, error) { etype := typ.Elem() - etypeinfo, err := cachedTypeInfo1(etype, tags{}) - if err != nil { - return nil, err + etypeinfo := cachedTypeInfo1(etype, tags{}) + switch { + case etypeinfo.decoderErr != nil: + return nil, etypeinfo.decoderErr + case !tag.nilOK: + return makeSimplePtrDecoder(etype, etypeinfo), nil + default: + return makeNilPtrDecoder(etype, etypeinfo, tag.nilKind), nil } - dec := func(s *Stream, val reflect.Value) (err error) { +} + +func makeSimplePtrDecoder(etype reflect.Type, etypeinfo *typeinfo) decoder { + return func(s *Stream, val reflect.Value) (err error) { newval := val if val.IsNil() { newval = reflect.New(etype) @@ -469,30 +432,35 @@ func makePtrDecoder(typ reflect.Type) (decoder, error) { } return err } - return dec, nil } -// makeOptionalPtrDecoder creates a decoder that decodes empty values -// as nil. Non-empty values are decoded into a value of the element type, -// just like makePtrDecoder does. +// makeNilPtrDecoder creates a decoder that decodes empty values as nil. Non-empty +// values are decoded into a value of the element type, just like makePtrDecoder does. // // This decoder is used for pointer-typed struct fields with struct tag "nil". -func makeOptionalPtrDecoder(typ reflect.Type) (decoder, error) { - etype := typ.Elem() - etypeinfo, err := cachedTypeInfo1(etype, tags{}) - if err != nil { - return nil, err - } - dec := func(s *Stream, val reflect.Value) (err error) { +func makeNilPtrDecoder(etype reflect.Type, etypeinfo *typeinfo, nilKind Kind) decoder { + typ := reflect.PtrTo(etype) + nilPtr := reflect.Zero(typ) + return func(s *Stream, val reflect.Value) (err error) { kind, size, err := s.Kind() - if err != nil || size == 0 && kind != Byte { + if err != nil { + val.Set(nilPtr) + return wrapStreamError(err, typ) + } + // Handle empty values as a nil pointer. + if kind != Byte && size == 0 { + if kind != nilKind { + return &decodeError{ + msg: fmt.Sprintf("wrong kind of empty value (got %v, want %v)", kind, nilKind), + typ: typ, + } + } // rearm s.Kind. This is important because the input // position must advance to the next value even though // we don't read anything. s.kind = -1 - // set the pointer to nil. - val.Set(reflect.Zero(typ)) - return err + val.Set(nilPtr) + return nil } newval := val if val.IsNil() { @@ -503,7 +471,6 @@ func makeOptionalPtrDecoder(typ reflect.Type) (decoder, error) { } return err } - return dec, nil } var ifsliceType = reflect.TypeOf([]interface{}{}) @@ -532,21 +499,8 @@ func decodeInterface(s *Stream, val reflect.Value) error { return nil } -// This decoder is used for non-pointer values of types -// that implement the Decoder interface using a pointer receiver. -func decodeDecoderNoPtr(s *Stream, val reflect.Value) error { - return val.Addr().Interface().(Decoder).DecodeRLP(s) -} - func decodeDecoder(s *Stream, val reflect.Value) error { - // Decoder instances are not handled using the pointer rule if the type - // implements Decoder with pointer receiver (i.e. always) - // because it might handle empty values specially. - // We need to allocate one here in this case, like makePtrDecoder does. - if val.Kind() == reflect.Ptr && val.IsNil() { - val.Set(reflect.New(val.Type().Elem())) - } - return val.Interface().(Decoder).DecodeRLP(s) + return val.Addr().Interface().(Decoder).DecodeRLP(s) } // Kind represents the kind of value contained in an RLP stream. @@ -802,12 +756,12 @@ func (s *Stream) Decode(val interface{}) error { if rval.IsNil() { return errDecodeIntoNil } - info, err := cachedTypeInfo(rtyp.Elem(), tags{}) + decoder, err := cachedDecoder(rtyp.Elem()) if err != nil { return err } - err = info.decoder(s, rval.Elem()) + err = decoder(s, rval.Elem()) if decErr, ok := err.(*decodeError); ok && len(decErr.ctx) > 0 { // add decode target type to error so context has more meaning decErr.ctx = append(decErr.ctx, fmt.Sprint("(", rtyp.Elem(), ")")) @@ -853,6 +807,7 @@ func (s *Stream) Reset(r io.Reader, inputLimit uint64) { if s.uintbuf == nil { s.uintbuf = make([]byte, 8) } + s.byteval = 0 } // Kind returns the kind and size of the next value in the diff --git a/rlp/decode_test.go b/rlp/decode_test.go index 4d8abd001281..634d1cf3bb7d 100644 --- a/rlp/decode_test.go +++ b/rlp/decode_test.go @@ -327,6 +327,10 @@ type recstruct struct { Child *recstruct `rlp:"nil"` } +type invalidNilTag struct { + X []byte `rlp:"nil"` +} + type invalidTail1 struct { A uint `rlp:"tail"` B string @@ -347,6 +351,24 @@ type tailUint struct { Tail []uint `rlp:"tail"` } +type tailPrivateFields struct { + A uint + Tail []uint `rlp:"tail"` + x, y bool +} + +type nilListUint struct { + X *uint `rlp:"nilList"` +} + +type nilStringSlice struct { + X *[]uint `rlp:"nilString"` +} + +type intField struct { + X int +} + var ( veryBigInt = big.NewInt(0).Add( big.NewInt(0).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16), @@ -479,20 +501,20 @@ var decodeTests = []decodeTest{ error: "rlp: expected input string or byte for uint, decoding into (rlp.recstruct).Child.I", }, { - input: "C0", - ptr: new(invalidTail1), - error: "rlp: invalid struct tag \"tail\" for rlp.invalidTail1.A (must be on last field)", - }, - { - input: "C0", - ptr: new(invalidTail2), - error: "rlp: invalid struct tag \"tail\" for rlp.invalidTail2.B (field type is not slice)", + input: "C103", + ptr: new(intField), + error: "rlp: type int is not RLP-serializable (struct field rlp.intField.X)", }, { input: "C50102C20102", ptr: new(tailUint), error: "rlp: expected input string or byte for uint, decoding into (rlp.tailUint).Tail[1]", }, + { + input: "C0", + ptr: new(invalidNilTag), + error: `rlp: invalid struct tag "nil" for rlp.invalidNilTag.X (field is not a pointer)`, + }, // struct tag "tail" { @@ -510,6 +532,21 @@ var decodeTests = []decodeTest{ ptr: new(tailRaw), value: tailRaw{A: 1, Tail: []RawValue{}}, }, + { + input: "C3010203", + ptr: new(tailPrivateFields), + value: tailPrivateFields{A: 1, Tail: []uint{2, 3}}, + }, + { + input: "C0", + ptr: new(invalidTail1), + error: `rlp: invalid struct tag "tail" for rlp.invalidTail1.A (must be on last field)`, + }, + { + input: "C0", + ptr: new(invalidTail2), + error: `rlp: invalid struct tag "tail" for rlp.invalidTail2.B (field type is not slice)`, + }, // struct tag "-" { @@ -518,6 +555,43 @@ var decodeTests = []decodeTest{ value: hasIgnoredField{A: 1, C: 2}, }, + // struct tag "nilList" + { + input: "C180", + ptr: new(nilListUint), + error: "rlp: wrong kind of empty value (got String, want List) for *uint, decoding into (rlp.nilListUint).X", + }, + { + input: "C1C0", + ptr: new(nilListUint), + value: nilListUint{}, + }, + { + input: "C103", + ptr: new(nilListUint), + value: func() interface{} { + v := uint(3) + return nilListUint{X: &v} + }(), + }, + + // struct tag "nilString" + { + input: "C1C0", + ptr: new(nilStringSlice), + error: "rlp: wrong kind of empty value (got List, want String) for *[]uint, decoding into (rlp.nilStringSlice).X", + }, + { + input: "C180", + ptr: new(nilStringSlice), + value: nilStringSlice{}, + }, + { + input: "C2C103", + ptr: new(nilStringSlice), + value: nilStringSlice{X: &[]uint{3}}, + }, + // RawValue {input: "01", ptr: new(RawValue), value: RawValue(unhex("01"))}, {input: "82FFFF", ptr: new(RawValue), value: RawValue(unhex("82FFFF"))}, @@ -661,6 +735,22 @@ func TestDecodeDecoder(t *testing.T) { } } +func TestDecodeDecoderNilPointer(t *testing.T) { + var s struct { + T1 *testDecoder `rlp:"nil"` + T2 *testDecoder + } + if err := Decode(bytes.NewReader(unhex("C2C002")), &s); err != nil { + t.Fatalf("Decode error: %v", err) + } + if s.T1 != nil { + t.Errorf("decoder T1 allocated for empty input (called: %v)", s.T1.called) + } + if s.T2 == nil || !s.T2.called { + t.Errorf("decoder T2 not allocated/called") + } +} + type byteDecoder byte func (bd *byteDecoder) DecodeRLP(s *Stream) error { @@ -691,6 +781,27 @@ func TestDecoderInByteSlice(t *testing.T) { } } +type unencodableDecoder func() + +func (f *unencodableDecoder) DecodeRLP(s *Stream) error { + if _, err := s.List(); err != nil { + return err + } + if err := s.ListEnd(); err != nil { + return err + } + *f = func() {} + return nil +} + +func TestDecoderFunc(t *testing.T) { + var x func() + if err := DecodeBytes([]byte{0xC0}, (*unencodableDecoder)(&x)); err != nil { + t.Fatal(err) + } + x() +} + func ExampleDecode() { input, _ := hex.DecodeString("C90A1486666F6F626172") diff --git a/rlp/doc.go b/rlp/doc.go index b3a81fe2326f..7e6ee8520019 100644 --- a/rlp/doc.go +++ b/rlp/doc.go @@ -17,17 +17,114 @@ /* Package rlp implements the RLP serialization format. -The purpose of RLP (Recursive Linear Prefix) is to encode arbitrarily -nested arrays of binary data, and RLP is the main encoding method used -to serialize objects in Ethereum. The only purpose of RLP is to encode -structure; encoding specific atomic data types (eg. strings, ints, -floats) is left up to higher-order protocols; in Ethereum integers -must be represented in big endian binary form with no leading zeroes -(thus making the integer value zero equivalent to the empty byte -array). - -RLP values are distinguished by a type tag. The type tag precedes the -value in the input stream and defines the size and kind of the bytes -that follow. +The purpose of RLP (Recursive Linear Prefix) is to encode arbitrarily nested arrays of +binary data, and RLP is the main encoding method used to serialize objects in Ethereum. +The only purpose of RLP is to encode structure; encoding specific atomic data types (eg. +strings, ints, floats) is left up to higher-order protocols. In Ethereum integers must be +represented in big endian binary form with no leading zeroes (thus making the integer +value zero equivalent to the empty string). + +RLP values are distinguished by a type tag. The type tag precedes the value in the input +stream and defines the size and kind of the bytes that follow. + + +Encoding Rules + +Package rlp uses reflection and encodes RLP based on the Go type of the value. + +If the type implements the Encoder interface, Encode calls EncodeRLP. It does not +call EncodeRLP on nil pointer values. + +To encode a pointer, the value being pointed to is encoded. A nil pointer to a struct +type, slice or array always encodes as an empty RLP list unless the slice or array has +elememt type byte. A nil pointer to any other value encodes as the empty string. + +Struct values are encoded as an RLP list of all their encoded public fields. Recursive +struct types are supported. + +To encode slices and arrays, the elements are encoded as an RLP list of the value's +elements. Note that arrays and slices with element type uint8 or byte are always encoded +as an RLP string. + +A Go string is encoded as an RLP string. + +An unsigned integer value is encoded as an RLP string. Zero always encodes as an empty RLP +string. big.Int values are treated as integers. Signed integers (int, int8, int16, ...) +are not supported and will return an error when encoding. + +Boolean values are encoded as the unsigned integers zero (false) and one (true). + +An interface value encodes as the value contained in the interface. + +Floating point numbers, maps, channels and functions are not supported. + + +Decoding Rules + +Decoding uses the following type-dependent rules: + +If the type implements the Decoder interface, DecodeRLP is called. + +To decode into a pointer, the value will be decoded as the element type of the pointer. If +the pointer is nil, a new value of the pointer's element type is allocated. If the pointer +is non-nil, the existing value will be reused. Note that package rlp never leaves a +pointer-type struct field as nil unless one of the "nil" struct tags is present. + +To decode into a struct, decoding expects the input to be an RLP list. The decoded +elements of the list are assigned to each public field in the order given by the struct's +definition. The input list must contain an element for each decoded field. Decoding +returns an error if there are too few or too many elements for the struct. + +To decode into a slice, the input must be a list and the resulting slice will contain the +input elements in order. For byte slices, the input must be an RLP string. Array types +decode similarly, with the additional restriction that the number of input elements (or +bytes) must match the array's defined length. + +To decode into a Go string, the input must be an RLP string. The input bytes are taken +as-is and will not necessarily be valid UTF-8. + +To decode into an unsigned integer type, the input must also be an RLP string. The bytes +are interpreted as a big endian representation of the integer. If the RLP string is larger +than the bit size of the type, decoding will return an error. Decode also supports +*big.Int. There is no size limit for big integers. + +To decode into a boolean, the input must contain an unsigned integer of value zero (false) +or one (true). + +To decode into an interface value, one of these types is stored in the value: + + []interface{}, for RLP lists + []byte, for RLP strings + +Non-empty interface types are not supported when decoding. +Signed integers, floating point numbers, maps, channels and functions cannot be decoded into. + + +Struct Tags + +Package rlp honours certain struct tags: "-", "tail", "nil", "nilList" and "nilString". + +The "-" tag ignores fields. + +The "tail" tag, which may only be used on the last exported struct field, allows slurping +up any excess list elements into a slice. See examples for more details. + +The "nil" tag applies to pointer-typed fields and changes the decoding rules for the field +such that input values of size zero decode as a nil pointer. This tag can be useful when +decoding recursive types. + + type StructWithOptionalFoo struct { + Foo *[20]byte `rlp:"nil"` + } + +RLP supports two kinds of empty values: empty lists and empty strings. When using the +"nil" tag, the kind of empty value allowed for a type is chosen automatically. A struct +field whose Go type is a pointer to an unsigned integer, string, boolean or byte +array/slice expects an empty RLP string. Any other pointer field type encodes/decodes as +an empty RLP list. + +The choice of null value can be made explicit with the "nilList" and "nilString" struct +tags. Using these tags encodes/decodes a Go nil pointer value as the kind of empty +RLP value defined by the tag. */ package rlp diff --git a/rlp/encode.go b/rlp/encode.go index 445b4b5b2104..9c9e8d706d07 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -49,34 +49,7 @@ type Encoder interface { // perform many small writes in some cases. Consider making w // buffered. // -// Encode uses the following type-dependent encoding rules: -// -// If the type implements the Encoder interface, Encode calls -// EncodeRLP. This is true even for nil pointers, please see the -// documentation for Encoder. -// -// To encode a pointer, the value being pointed to is encoded. For nil -// pointers, Encode will encode the zero value of the type. A nil -// pointer to a struct type always encodes as an empty RLP list. -// A nil pointer to an array encodes as an empty list (or empty string -// if the array has element type byte). -// -// Struct values are encoded as an RLP list of all their encoded -// public fields. Recursive struct types are supported. -// -// To encode slices and arrays, the elements are encoded as an RLP -// list of the value's elements. Note that arrays and slices with -// element type uint8 or byte are always encoded as an RLP string. -// -// A Go string is encoded as an RLP string. -// -// An unsigned integer value is encoded as an RLP string. Zero always -// encodes as an empty RLP string. Encode also supports *big.Int. -// -// An interface value encodes as the value contained in the interface. -// -// Boolean values are not supported, nor are signed integers, floating -// point numbers, maps, channels and functions. +// Please see package-level documentation of encoding rules. func Encode(w io.Writer, val interface{}) error { if outer, ok := w.(*encbuf); ok { // Encode was called by some type's EncodeRLP. @@ -93,7 +66,7 @@ func Encode(w io.Writer, val interface{}) error { } // EncodeToBytes returns the RLP encoding of val. -// Please see the documentation of Encode for the encoding rules. +// Please see package-level documentation for the encoding rules. func EncodeToBytes(val interface{}) ([]byte, error) { eb := encbufPool.Get().(*encbuf) defer encbufPool.Put(eb) @@ -180,11 +153,11 @@ func (w *encbuf) Write(b []byte) (int, error) { func (w *encbuf) encode(val interface{}) error { rval := reflect.ValueOf(val) - ti, err := cachedTypeInfo(rval.Type(), tags{}) + writer, err := cachedWriter(rval.Type()) if err != nil { return err } - return ti.writer(rval, w) + return writer(rval, w) } func (w *encbuf) encodeStringHeader(size int) { @@ -347,16 +320,14 @@ func makeWriter(typ reflect.Type, ts tags) (writer, error) { switch { case typ == rawValueType: return writeRawValue, nil - case typ.Implements(encoderInterface): - return writeEncoder, nil - case kind != reflect.Ptr && reflect.PtrTo(typ).Implements(encoderInterface): - return writeEncoderNoPtr, nil - case kind == reflect.Interface: - return writeInterface, nil case typ.AssignableTo(reflect.PtrTo(bigInt)): return writeBigIntPtr, nil case typ.AssignableTo(bigInt): return writeBigIntNoPtr, nil + case kind == reflect.Ptr: + return makePtrWriter(typ, ts) + case reflect.PtrTo(typ).Implements(encoderInterface): + return makeEncoderWriter(typ), nil case isUint(kind): return writeUint, nil case kind == reflect.Bool: @@ -371,8 +342,8 @@ func makeWriter(typ reflect.Type, ts tags) (writer, error) { return makeSliceWriter(typ, ts) case kind == reflect.Struct: return makeStructWriter(typ) - case kind == reflect.Ptr: - return makePtrWriter(typ) + case kind == reflect.Interface: + return writeInterface, nil default: return nil, fmt.Errorf("rlp: type %v is not RLP-serializable", typ) } @@ -468,26 +439,6 @@ func writeString(val reflect.Value, w *encbuf) error { return nil } -func writeEncoder(val reflect.Value, w *encbuf) error { - return val.Interface().(Encoder).EncodeRLP(w) -} - -// writeEncoderNoPtr handles non-pointer values that implement Encoder -// with a pointer receiver. -func writeEncoderNoPtr(val reflect.Value, w *encbuf) error { - if !val.CanAddr() { - // We can't get the address. It would be possible to make the - // value addressable by creating a shallow copy, but this - // creates other problems so we're not doing it (yet). - // - // package json simply doesn't call MarshalJSON for cases like - // this, but encodes the value as if it didn't implement the - // interface. We don't want to handle it that way. - return fmt.Errorf("rlp: game over: unadressable value of type %v, EncodeRLP is pointer method", val.Type()) - } - return val.Addr().Interface().(Encoder).EncodeRLP(w) -} - func writeInterface(val reflect.Value, w *encbuf) error { if val.IsNil() { // Write empty list. This is consistent with the previous RLP @@ -497,17 +448,17 @@ func writeInterface(val reflect.Value, w *encbuf) error { return nil } eval := val.Elem() - ti, err := cachedTypeInfo(eval.Type(), tags{}) + writer, err := cachedWriter(eval.Type()) if err != nil { return err } - return ti.writer(eval, w) + return writer(eval, w) } func makeSliceWriter(typ reflect.Type, ts tags) (writer, error) { - etypeinfo, err := cachedTypeInfo1(typ.Elem(), tags{}) - if err != nil { - return nil, err + etypeinfo := cachedTypeInfo1(typ.Elem(), tags{}) + if etypeinfo.writerErr != nil { + return nil, etypeinfo.writerErr } writer := func(val reflect.Value, w *encbuf) error { if !ts.tail { @@ -529,6 +480,11 @@ func makeStructWriter(typ reflect.Type) (writer, error) { if err != nil { return nil, err } + for _, f := range fields { + if f.info.writerErr != nil { + return nil, structFieldError{typ, f.index, f.info.writerErr} + } + } writer := func(val reflect.Value, w *encbuf) error { lh := w.list() for _, f := range fields { @@ -542,42 +498,49 @@ func makeStructWriter(typ reflect.Type) (writer, error) { return writer, nil } -func makePtrWriter(typ reflect.Type) (writer, error) { - etypeinfo, err := cachedTypeInfo1(typ.Elem(), tags{}) - if err != nil { - return nil, err +func makePtrWriter(typ reflect.Type, ts tags) (writer, error) { + etypeinfo := cachedTypeInfo1(typ.Elem(), tags{}) + if etypeinfo.writerErr != nil { + return nil, etypeinfo.writerErr } - - // determine nil pointer handler - var nilfunc func(*encbuf) error - kind := typ.Elem().Kind() - switch { - case kind == reflect.Array && isByte(typ.Elem().Elem()): - nilfunc = func(w *encbuf) error { - w.str = append(w.str, 0x80) - return nil - } - case kind == reflect.Struct || kind == reflect.Array: - nilfunc = func(w *encbuf) error { - // encoding the zero value of a struct/array could trigger - // infinite recursion, avoid that. - w.listEnd(w.list()) - return nil - } - default: - zero := reflect.Zero(typ.Elem()) - nilfunc = func(w *encbuf) error { - return etypeinfo.writer(zero, w) - } + // Determine how to encode nil pointers. + var nilKind Kind + if ts.nilOK { + nilKind = ts.nilKind // use struct tag if provided + } else { + nilKind = defaultNilKind(typ.Elem()) } writer := func(val reflect.Value, w *encbuf) error { if val.IsNil() { - return nilfunc(w) + if nilKind == String { + w.str = append(w.str, 0x80) + } else { + w.listEnd(w.list()) + } + return nil } return etypeinfo.writer(val.Elem(), w) } - return writer, err + return writer, nil +} + +func makeEncoderWriter(typ reflect.Type) writer { + if typ.Implements(encoderInterface) { + return func(val reflect.Value, w *encbuf) error { + return val.Interface().(Encoder).EncodeRLP(w) + } + } + w := func(val reflect.Value, w *encbuf) error { + if !val.CanAddr() { + // package json simply doesn't call MarshalJSON for this case, but encodes the + // value as if it didn't implement the interface. We don't want to handle it that + // way. + return fmt.Errorf("rlp: unadressable value of type %v, EncodeRLP is pointer method", val.Type()) + } + return val.Addr().Interface().(Encoder).EncodeRLP(w) + } + return w } // putint writes i to the beginning of b in big endian byte diff --git a/rlp/encode_test.go b/rlp/encode_test.go index 827960f7c15a..b4b9e5128740 100644 --- a/rlp/encode_test.go +++ b/rlp/encode_test.go @@ -33,8 +33,9 @@ type testEncoder struct { func (e *testEncoder) EncodeRLP(w io.Writer) error { if e == nil { - w.Write([]byte{0, 0, 0, 0}) - } else if e.err != nil { + panic("EncodeRLP called on nil value") + } + if e.err != nil { return e.err } else { w.Write([]byte{0, 1, 0, 1, 0, 1, 0, 1, 0, 1}) @@ -42,6 +43,13 @@ func (e *testEncoder) EncodeRLP(w io.Writer) error { return nil } +type testEncoderValueMethod struct{} + +func (e testEncoderValueMethod) EncodeRLP(w io.Writer) error { + w.Write([]byte{0xFA, 0xFE, 0xF0}) + return nil +} + type byteEncoder byte func (e byteEncoder) EncodeRLP(w io.Writer) error { @@ -49,6 +57,13 @@ func (e byteEncoder) EncodeRLP(w io.Writer) error { return nil } +type undecodableEncoder func() + +func (f undecodableEncoder) EncodeRLP(w io.Writer) error { + w.Write([]byte{0xF5, 0xF5, 0xF5}) + return nil +} + type encodableReader struct { A, B uint } @@ -219,6 +234,7 @@ var encTests = []encTest{ {val: &tailRaw{A: 1, Tail: []RawValue{}}, output: "C101"}, {val: &tailRaw{A: 1, Tail: nil}, output: "C101"}, {val: &hasIgnoredField{A: 1, B: 2, C: 3}, output: "C20103"}, + {val: &intField{X: 3}, error: "rlp: type int is not RLP-serializable (struct field rlp.intField.X)"}, // nil {val: (*uint)(nil), output: "80"}, @@ -232,20 +248,66 @@ var encTests = []encTest{ {val: (*[]struct{ uint })(nil), output: "C0"}, {val: (*interface{})(nil), output: "C0"}, + // nil struct fields + { + val: struct { + X *[]byte + }{}, + output: "C180", + }, + { + val: struct { + X *[2]byte + }{}, + output: "C180", + }, + { + val: struct { + X *uint64 + }{}, + output: "C180", + }, + { + val: struct { + X *uint64 `rlp:"nilList"` + }{}, + output: "C1C0", + }, + { + val: struct { + X *[]uint64 + }{}, + output: "C1C0", + }, + { + val: struct { + X *[]uint64 `rlp:"nilString"` + }{}, + output: "C180", + }, + // interfaces {val: []io.Reader{reader}, output: "C3C20102"}, // the contained value is a struct // Encoder - {val: (*testEncoder)(nil), output: "00000000"}, + {val: (*testEncoder)(nil), output: "C0"}, {val: &testEncoder{}, output: "00010001000100010001"}, {val: &testEncoder{errors.New("test error")}, error: "test error"}, - // verify that pointer method testEncoder.EncodeRLP is called for + {val: struct{ E testEncoderValueMethod }{}, output: "C3FAFEF0"}, + {val: struct{ E *testEncoderValueMethod }{}, output: "C1C0"}, + + // Verify that the Encoder interface works for unsupported types like func(). + {val: undecodableEncoder(func() {}), output: "F5F5F5"}, + + // Verify that pointer method testEncoder.EncodeRLP is called for // addressable non-pointer values. {val: &struct{ TE testEncoder }{testEncoder{}}, output: "CA00010001000100010001"}, {val: &struct{ TE testEncoder }{testEncoder{errors.New("test error")}}, error: "test error"}, - // verify the error for non-addressable non-pointer Encoder - {val: testEncoder{}, error: "rlp: game over: unadressable value of type rlp.testEncoder, EncodeRLP is pointer method"}, - // verify the special case for []byte + + // Verify the error for non-addressable non-pointer Encoder. + {val: testEncoder{}, error: "rlp: unadressable value of type rlp.testEncoder, EncodeRLP is pointer method"}, + + // Verify Encoder takes precedence over []byte. {val: []byteEncoder{0, 1, 2, 3, 4}, output: "C5C0C0C0C0C0"}, } diff --git a/rlp/encoder_example_test.go b/rlp/encoder_example_test.go index 1cffa241c259..42c1c5c89064 100644 --- a/rlp/encoder_example_test.go +++ b/rlp/encoder_example_test.go @@ -28,15 +28,7 @@ type MyCoolType struct { // EncodeRLP writes x as RLP list [a, b] that omits the Name field. func (x *MyCoolType) EncodeRLP(w io.Writer) (err error) { - // Note: the receiver can be a nil pointer. This allows you to - // control the encoding of nil, but it also means that you have to - // check for a nil receiver. - if x == nil { - err = Encode(w, []uint{0, 0}) - } else { - err = Encode(w, []uint{x.a, x.b}) - } - return err + return Encode(w, []uint{x.a, x.b}) } func ExampleEncoder() { @@ -49,6 +41,6 @@ func ExampleEncoder() { fmt.Printf("%v → %X\n", t, bytes) // Output: - // → C28080 + // → C0 // &{foobar 5 6} → C20506 } diff --git a/rlp/typecache.go b/rlp/typecache.go index 8c2dd518e296..e9a1e3f9e26a 100644 --- a/rlp/typecache.go +++ b/rlp/typecache.go @@ -29,26 +29,34 @@ var ( ) type typeinfo struct { - decoder - writer + decoder decoder + decoderErr error // error from makeDecoder + writer writer + writerErr error // error from makeWriter } -// represents struct tags +// tags represents struct tags. type tags struct { // rlp:"nil" controls whether empty input results in a nil pointer. nilOK bool + + // This controls whether nil pointers are encoded/decoded as empty strings + // or empty lists. + nilKind Kind + // rlp:"tail" controls whether this field swallows additional list // elements. It can only be set for the last field, which must be // of slice type. tail bool + // rlp:"-" ignores fields. ignored bool } +// typekey is the key of a type in typeCache. It includes the struct tags because +// they might generate a different decoder. type typekey struct { reflect.Type - // the key must include the struct tags because they - // might generate a different decoder. tags } @@ -56,12 +64,22 @@ type decoder func(*Stream, reflect.Value) error type writer func(reflect.Value, *encbuf) error -func cachedTypeInfo(typ reflect.Type, tags tags) (*typeinfo, error) { +func cachedDecoder(typ reflect.Type) (decoder, error) { + info := cachedTypeInfo(typ, tags{}) + return info.decoder, info.decoderErr +} + +func cachedWriter(typ reflect.Type) (writer, error) { + info := cachedTypeInfo(typ, tags{}) + return info.writer, info.writerErr +} + +func cachedTypeInfo(typ reflect.Type, tags tags) *typeinfo { typeCacheMutex.RLock() info := typeCache[typekey{typ, tags}] typeCacheMutex.RUnlock() if info != nil { - return info, nil + return info } // not in the cache, need to generate info for this type. typeCacheMutex.Lock() @@ -69,25 +87,20 @@ func cachedTypeInfo(typ reflect.Type, tags tags) (*typeinfo, error) { return cachedTypeInfo1(typ, tags) } -func cachedTypeInfo1(typ reflect.Type, tags tags) (*typeinfo, error) { +func cachedTypeInfo1(typ reflect.Type, tags tags) *typeinfo { key := typekey{typ, tags} info := typeCache[key] if info != nil { // another goroutine got the write lock first - return info, nil + return info } // put a dummy value into the cache before generating. // if the generator tries to lookup itself, it will get // the dummy value and won't call itself recursively. - typeCache[key] = new(typeinfo) - info, err := genTypeInfo(typ, tags) - if err != nil { - // remove the dummy value if the generator fails - delete(typeCache, key) - return nil, err - } - *typeCache[key] = *info - return typeCache[key], err + info = new(typeinfo) + typeCache[key] = info + info.generate(typ, tags) + return info } type field struct { @@ -96,26 +109,43 @@ type field struct { } func structFields(typ reflect.Type) (fields []field, err error) { + lastPublic := lastPublicField(typ) for i := 0; i < typ.NumField(); i++ { if f := typ.Field(i); f.PkgPath == "" { // exported - tags, err := parseStructTag(typ, i) + tags, err := parseStructTag(typ, i, lastPublic) if err != nil { return nil, err } if tags.ignored { continue } - info, err := cachedTypeInfo1(f.Type, tags) - if err != nil { - return nil, err - } + info := cachedTypeInfo1(f.Type, tags) fields = append(fields, field{i, info}) } } return fields, nil } -func parseStructTag(typ reflect.Type, fi int) (tags, error) { +type structFieldError struct { + typ reflect.Type + field int + err error +} + +func (e structFieldError) Error() string { + return fmt.Sprintf("%v (struct field %v.%s)", e.err, e.typ, e.typ.Field(e.field).Name) +} + +type structTagError struct { + typ reflect.Type + field, tag, err string +} + +func (e structTagError) Error() string { + return fmt.Sprintf("rlp: invalid struct tag %q for %v.%s (%s)", e.tag, e.typ, e.field, e.err) +} + +func parseStructTag(typ reflect.Type, fi, lastPublic int) (tags, error) { f := typ.Field(fi) var ts tags for _, t := range strings.Split(f.Tag.Get("rlp"), ",") { @@ -123,15 +153,26 @@ func parseStructTag(typ reflect.Type, fi int) (tags, error) { case "": case "-": ts.ignored = true - case "nil": + case "nil", "nilString", "nilList": ts.nilOK = true + if f.Type.Kind() != reflect.Ptr { + return ts, structTagError{typ, f.Name, t, "field is not a pointer"} + } + switch t { + case "nil": + ts.nilKind = defaultNilKind(f.Type.Elem()) + case "nilString": + ts.nilKind = String + case "nilList": + ts.nilKind = List + } case "tail": ts.tail = true - if fi != typ.NumField()-1 { - return ts, fmt.Errorf(`rlp: invalid struct tag "tail" for %v.%s (must be on last field)`, typ, f.Name) + if fi != lastPublic { + return ts, structTagError{typ, f.Name, t, "must be on last field"} } if f.Type.Kind() != reflect.Slice { - return ts, fmt.Errorf(`rlp: invalid struct tag "tail" for %v.%s (field type is not slice)`, typ, f.Name) + return ts, structTagError{typ, f.Name, t, "field type is not slice"} } default: return ts, fmt.Errorf("rlp: unknown struct tag %q on %v.%s", t, typ, f.Name) @@ -140,17 +181,35 @@ func parseStructTag(typ reflect.Type, fi int) (tags, error) { return ts, nil } -func genTypeInfo(typ reflect.Type, tags tags) (info *typeinfo, err error) { - info = new(typeinfo) - if info.decoder, err = makeDecoder(typ, tags); err != nil { - return nil, err +func lastPublicField(typ reflect.Type) int { + last := 0 + for i := 0; i < typ.NumField(); i++ { + if typ.Field(i).PkgPath == "" { + last = i + } } - if info.writer, err = makeWriter(typ, tags); err != nil { - return nil, err + return last +} + +func (i *typeinfo) generate(typ reflect.Type, tags tags) { + i.decoder, i.decoderErr = makeDecoder(typ, tags) + i.writer, i.writerErr = makeWriter(typ, tags) +} + +// defaultNilKind determines whether a nil pointer to typ encodes/decodes +// as an empty string or empty list. +func defaultNilKind(typ reflect.Type) Kind { + k := typ.Kind() + if isUint(k) || k == reflect.String || k == reflect.Bool || isByteArray(typ) { + return String } - return info, nil + return List } func isUint(k reflect.Kind) bool { return k >= reflect.Uint && k <= reflect.Uintptr } + +func isByteArray(typ reflect.Type) bool { + return (typ.Kind() == reflect.Slice || typ.Kind() == reflect.Array) && isByte(typ.Elem()) +} diff --git a/rpc/client.go b/rpc/client.go index 6254c95ffd96..4b65d0042186 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -18,17 +18,13 @@ package rpc import ( "bytes" - "container/list" "context" "encoding/json" "errors" "fmt" - "net" "net/url" "reflect" "strconv" - "strings" - "sync" "sync/atomic" "time" @@ -39,14 +35,14 @@ var ( ErrClientQuit = errors.New("client is closed") ErrNoResult = errors.New("no result in JSON-RPC response") ErrSubscriptionQueueOverflow = errors.New("subscription queue overflow") + errClientReconnected = errors.New("client reconnected") + errDead = errors.New("connection lost") ) const ( // Timeouts - tcpKeepAliveInterval = 30 * time.Second - defaultDialTimeout = 10 * time.Second // used when dialing if the context has no deadline - defaultWriteTimeout = 10 * time.Second // used for calls if the context has no deadline - subscribeTimeout = 5 * time.Second // overall timeout eth_subscribe, rpc_modules calls + defaultDialTimeout = 10 * time.Second // used if context has no deadline + subscribeTimeout = 5 * time.Second // overall timeout eth_subscribe, rpc_modules calls ) const ( @@ -76,56 +72,57 @@ type BatchElem struct { Error error } -// A value of this type can a JSON-RPC request, notification, successful response or -// error response. Which one it is depends on the fields. -type jsonrpcMessage struct { - Version string `json:"jsonrpc"` - ID json.RawMessage `json:"id,omitempty"` - Method string `json:"method,omitempty"` - Params json.RawMessage `json:"params,omitempty"` - Error *jsonError `json:"error,omitempty"` - Result json.RawMessage `json:"result,omitempty"` -} +// Client represents a connection to an RPC server. +type Client struct { + idgen func() ID // for subscriptions + isHTTP bool + services *serviceRegistry -func (msg *jsonrpcMessage) isNotification() bool { - return msg.ID == nil && msg.Method != "" -} + idCounter uint32 -func (msg *jsonrpcMessage) isResponse() bool { - return msg.hasValidID() && msg.Method == "" && len(msg.Params) == 0 -} + // This function, if non-nil, is called when the connection is lost. + reconnectFunc reconnectFunc + + // writeConn is used for writing to the connection on the caller's goroutine. It should + // only be accessed outside of dispatch, with the write lock held. The write lock is + // taken by sending on requestOp and released by sending on sendDone. + writeConn jsonWriter -func (msg *jsonrpcMessage) hasValidID() bool { - return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '[' + // for dispatch + close chan struct{} + closing chan struct{} // closed when client is quitting + didClose chan struct{} // closed when client quits + reconnected chan ServerCodec // where write/reconnect sends the new connection + readOp chan readOp // read messages + readErr chan error // errors from read + reqInit chan *requestOp // register response IDs, takes write lock + reqSent chan error // signals write completion, releases write lock + reqTimeout chan *requestOp // removes response IDs when call timeout expires } -func (msg *jsonrpcMessage) String() string { - b, _ := json.Marshal(msg) - return string(b) +type reconnectFunc func(ctx context.Context) (ServerCodec, error) + +type clientContextKey struct{} + +type clientConn struct { + codec ServerCodec + handler *handler } -// Client represents a connection to an RPC server. -type Client struct { - idCounter uint32 - connectFunc func(ctx context.Context) (net.Conn, error) - isHTTP bool +func (c *Client) newClientConn(conn ServerCodec) *clientConn { + ctx := context.WithValue(context.Background(), clientContextKey{}, c) + handler := newHandler(ctx, conn, c.idgen, c.services) + return &clientConn{conn, handler} +} - // writeConn is only safe to access outside dispatch, with the - // write lock held. The write lock is taken by sending on - // requestOp and released by sending on sendDone. - writeConn net.Conn +func (cc *clientConn) close(err error, inflightReq *requestOp) { + cc.handler.close(err, inflightReq) + cc.codec.Close() +} - // for dispatch - close chan struct{} - closing chan struct{} // closed when client is quitting - didClose chan struct{} // closed when client quits - reconnected chan net.Conn // where write/reconnect sends the new connection - readErr chan error // errors from read - readResp chan []*jsonrpcMessage // valid messages from read - requestOp chan *requestOp // for registering response IDs - sendDone chan error // signals write completion, releases write lock - respWait map[string]*requestOp // active requests - subs map[string]*ClientSubscription // active subscriptions +type readOp struct { + msgs []*jsonrpcMessage + batch bool } type requestOp struct { @@ -135,9 +132,16 @@ type requestOp struct { sub *ClientSubscription // only set for EthSubscribe requests } -func (op *requestOp) wait(ctx context.Context) (*jsonrpcMessage, error) { +func (op *requestOp) wait(ctx context.Context, c *Client) (*jsonrpcMessage, error) { select { case <-ctx.Done(): + // Send the timeout to dispatch so it can remove the request IDs. + if !c.isHTTP { + select { + case c.reqTimeout <- op: + case <-c.closing: + } + } return nil, ctx.Err() case resp := <-op.resp: return resp, op.err @@ -181,36 +185,57 @@ func DialContext(ctx context.Context, rawurl string) (*Client, error) { } } -func newClient(initctx context.Context, connectFunc func(context.Context) (net.Conn, error)) (*Client, error) { - conn, err := connectFunc(initctx) +// Client retrieves the client from the context, if any. This can be used to perform +// 'reverse calls' in a handler method. +func ClientFromContext(ctx context.Context) (*Client, bool) { + client, ok := ctx.Value(clientContextKey{}).(*Client) + return client, ok +} + +func newClient(initctx context.Context, connect reconnectFunc) (*Client, error) { + conn, err := connect(initctx) if err != nil { return nil, err } + c := initClient(conn, randomIDGenerator(), new(serviceRegistry)) + c.reconnectFunc = connect + return c, nil +} + +func initClient(conn ServerCodec, idgen func() ID, services *serviceRegistry) *Client { _, isHTTP := conn.(*httpConn) c := &Client{ - writeConn: conn, + idgen: idgen, isHTTP: isHTTP, - connectFunc: connectFunc, + services: services, + writeConn: conn, close: make(chan struct{}), closing: make(chan struct{}), didClose: make(chan struct{}), - reconnected: make(chan net.Conn), + reconnected: make(chan ServerCodec), + readOp: make(chan readOp), readErr: make(chan error), - readResp: make(chan []*jsonrpcMessage), - requestOp: make(chan *requestOp), - sendDone: make(chan error, 1), - respWait: make(map[string]*requestOp), - subs: make(map[string]*ClientSubscription), + reqInit: make(chan *requestOp), + reqSent: make(chan error, 1), + reqTimeout: make(chan *requestOp), } if !isHTTP { go c.dispatch(conn) } - return c, nil + return c +} + +// RegisterName creates a service for the given receiver type under the given name. When no +// methods on the given receiver match the criteria to be either a RPC method or a +// subscription an error is returned. Otherwise a new service is created and added to the +// service collection this client provides to the server. +func (c *Client) RegisterName(name string, receiver interface{}) error { + return c.services.registerName(name, receiver) } func (c *Client) nextID() json.RawMessage { id := atomic.AddUint32(&c.idCounter, 1) - return []byte(strconv.FormatUint(uint64(id), 10)) + return strconv.AppendUint(nil, uint64(id), 10) } // SupportedModules calls the rpc_modules method, retrieving the list of @@ -267,7 +292,7 @@ func (c *Client) CallContext(ctx context.Context, result interface{}, method str } // dispatch has accepted the request and will close the channel when it quits. - switch resp, err := op.wait(ctx); { + switch resp, err := op.wait(ctx, c); { case err != nil: return err case resp.Error != nil: @@ -325,7 +350,7 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { // Wait for all responses to come back. for n := 0; n < len(b) && err == nil; n++ { var resp *jsonrpcMessage - resp, err = op.wait(ctx) + resp, err = op.wait(ctx, c) if err != nil { break } @@ -352,6 +377,22 @@ func (c *Client) BatchCallContext(ctx context.Context, b []BatchElem) error { return err } +// Notify sends a notification, i.e. a method call that doesn't expect a response. +func (c *Client) Notify(ctx context.Context, method string, args ...interface{}) error { + op := new(requestOp) + msg, err := c.newMessage(method, args...) + if err != nil { + return err + } + msg.ID = nil + + if c.isHTTP { + return c.sendHTTP(ctx, op, msg) + } else { + return c.send(ctx, op, msg) + } +} + // EthSubscribe registers a subscripion under the "eth" namespace. func (c *Client) EthSubscribe(ctx context.Context, channel interface{}, args ...interface{}) (*ClientSubscription, error) { return c.Subscribe(ctx, "eth", channel, args...) @@ -370,7 +411,7 @@ func (c *Client) ShhSubscribe(ctx context.Context, channel interface{}, args ... // The context argument cancels the RPC request that sets up the subscription but has no // effect on the subscription after Subscribe has returned. // -// Slow subscribers will be dropped eventually. Client buffers up to 8000 notifications +// Slow subscribers will be dropped eventually. Client buffers up to 20000 notifications // before considering the subscriber dead. The subscription Err channel will receive // ErrSubscriptionQueueOverflow. Use a sufficiently large buffer on the channel or ensure // that the channel usually has at least one reader to prevent this issue. @@ -402,30 +443,30 @@ func (c *Client) Subscribe(ctx context.Context, namespace string, channel interf if err := c.send(ctx, op, msg); err != nil { return nil, err } - if _, err := op.wait(ctx); err != nil { + if _, err := op.wait(ctx, c); err != nil { return nil, err } return op.sub, nil } func (c *Client) newMessage(method string, paramsIn ...interface{}) (*jsonrpcMessage, error) { - params, err := json.Marshal(paramsIn) - if err != nil { - return nil, err + msg := &jsonrpcMessage{Version: vsn, ID: c.nextID(), Method: method} + if paramsIn != nil { // prevent sending "params":null + var err error + if msg.Params, err = json.Marshal(paramsIn); err != nil { + return nil, err + } } - return &jsonrpcMessage{Version: "2.0", ID: c.nextID(), Method: method, Params: params}, nil + return msg, nil } // send registers op with the dispatch loop, then sends msg on the connection. // if sending fails, op is deregistered. func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error { select { - case c.requestOp <- op: - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("sending ", msg) - }}) + case c.reqInit <- op: err := c.write(ctx, msg) - c.sendDone <- err + c.reqSent <- err return err case <-ctx.Done(): // This can happen if the client is overloaded or unable to keep up with @@ -433,25 +474,17 @@ func (c *Client) send(ctx context.Context, op *requestOp, msg interface{}) error return ctx.Err() case <-c.closing: return ErrClientQuit - case <-c.didClose: - return ErrClientQuit } } func (c *Client) write(ctx context.Context, msg interface{}) error { - deadline, ok := ctx.Deadline() - if !ok { - deadline = time.Now().Add(defaultWriteTimeout) - } // The previous write failed. Try to establish a new connection. if c.writeConn == nil { if err := c.reconnect(ctx); err != nil { return err } } - c.writeConn.SetWriteDeadline(deadline) - err := json.NewEncoder(c.writeConn).Encode(msg) - c.writeConn.SetWriteDeadline(time.Time{}) + err := c.writeConn.Write(ctx, msg) if err != nil { c.writeConn = nil } @@ -459,9 +492,18 @@ func (c *Client) write(ctx context.Context, msg interface{}) error { } func (c *Client) reconnect(ctx context.Context) error { - newconn, err := c.connectFunc(ctx) + if c.reconnectFunc == nil { + return errDead + } + + if _, ok := ctx.Deadline(); !ok { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, defaultDialTimeout) + defer cancel() + } + newconn, err := c.reconnectFunc(ctx) if err != nil { - log.Trace(fmt.Sprintf("reconnect failed: %v", err)) + log.Trace("RPC client reconnect failed", "err", err) return err } select { @@ -477,322 +519,107 @@ func (c *Client) reconnect(ctx context.Context) error { // dispatch is the main loop of the client. // It sends read messages to waiting calls to Call and BatchCall // and subscription notifications to registered subscriptions. -func (c *Client) dispatch(conn net.Conn) { - // Spawn the initial read loop. - go c.read(conn) - +func (c *Client) dispatch(codec ServerCodec) { var ( - lastOp *requestOp // tracks last send operation - requestOpLock = c.requestOp // nil while the send lock is held - reading = true // if true, a read loop is running + lastOp *requestOp // tracks last send operation + reqInitLock = c.reqInit // nil while the send lock is held + conn = c.newClientConn(codec) + reading = true ) - defer close(c.didClose) defer func() { close(c.closing) - c.closeRequestOps(ErrClientQuit) - conn.Close() if reading { - // Empty read channels until read is dead. - for { - select { - case <-c.readResp: - case <-c.readErr: - return - } - } + conn.close(ErrClientQuit, nil) + c.drainRead() } + close(c.didClose) }() + // Spawn the initial read loop. + go c.read(codec) + for { select { case <-c.close: return - // Read path. - case batch := <-c.readResp: - for _, msg := range batch { - switch { - case msg.isNotification(): - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: notification ", msg) - }}) - c.handleNotification(msg) - case msg.isResponse(): - log.Trace("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: response ", msg) - }}) - c.handleResponse(msg) - default: - log.Debug("", "msg", log.Lazy{Fn: func() string { - return fmt.Sprint("<-readResp: dropping weird message", msg) - }}) - // TODO: maybe close - } + // Read path: + case op := <-c.readOp: + if op.batch { + conn.handler.handleBatch(op.msgs) + } else { + conn.handler.handleMsg(op.msgs[0]) } case err := <-c.readErr: - log.Debug("<-readErr", "err", err) - c.closeRequestOps(err) - conn.Close() + conn.handler.log.Debug("RPC connection read error", "err", err) + conn.close(err, lastOp) reading = false - case newconn := <-c.reconnected: - log.Debug("<-reconnected", "reading", reading, "remote", conn.RemoteAddr()) + // Reconnect: + case newcodec := <-c.reconnected: + log.Debug("RPC client reconnected", "reading", reading, "conn", newcodec.RemoteAddr()) if reading { - // Wait for the previous read loop to exit. This is a rare case. - conn.Close() - <-c.readErr + // Wait for the previous read loop to exit. This is a rare case which + // happens if this loop isn't notified in time after the connection breaks. + // In those cases the caller will notice first and reconnect. Closing the + // handler terminates all waiting requests (closing op.resp) except for + // lastOp, which will be transferred to the new handler. + conn.close(errClientReconnected, lastOp) + c.drainRead() } - go c.read(newconn) + go c.read(newcodec) reading = true - conn = newconn - - // Send path. - case op := <-requestOpLock: - // Stop listening for further send ops until the current one is done. - requestOpLock = nil + conn = c.newClientConn(newcodec) + // Re-register the in-flight request on the new handler + // because that's where it will be sent. + conn.handler.addRequestOp(lastOp) + + // Send path: + case op := <-reqInitLock: + // Stop listening for further requests until the current one has been sent. + reqInitLock = nil lastOp = op - for _, id := range op.ids { - c.respWait[string(id)] = op - } + conn.handler.addRequestOp(op) - case err := <-c.sendDone: + case err := <-c.reqSent: if err != nil { - // Remove response handlers for the last send. We remove those here - // because the error is already handled in Call or BatchCall. When the - // read loop goes down, it will signal all other current operations. - for _, id := range lastOp.ids { - delete(c.respWait, string(id)) - } + // Remove response handlers for the last send. When the read loop + // goes down, it will signal all other current operations. + conn.handler.removeRequestOp(lastOp) } - // Listen for send ops again. - requestOpLock = c.requestOp + // Let the next request in. + reqInitLock = c.reqInit lastOp = nil - } - } -} - -// closeRequestOps unblocks pending send ops and active subscriptions. -func (c *Client) closeRequestOps(err error) { - didClose := make(map[*requestOp]bool) - for id, op := range c.respWait { - // Remove the op so that later calls will not close op.resp again. - delete(c.respWait, id) - - if !didClose[op] { - op.err = err - close(op.resp) - didClose[op] = true + case op := <-c.reqTimeout: + conn.handler.removeRequestOp(op) } } - for id, sub := range c.subs { - delete(c.subs, id) - sub.quitWithError(err, false) - } -} - -func (c *Client) handleNotification(msg *jsonrpcMessage) { - if !strings.HasSuffix(msg.Method, notificationMethodSuffix) { - log.Debug("dropping non-subscription message", "msg", msg) - return - } - var subResult struct { - ID string `json:"subscription"` - Result json.RawMessage `json:"result"` - } - if err := json.Unmarshal(msg.Params, &subResult); err != nil { - log.Debug("dropping invalid subscription message", "msg", msg) - return - } - if c.subs[subResult.ID] != nil { - c.subs[subResult.ID].deliver(subResult.Result) - } -} - -func (c *Client) handleResponse(msg *jsonrpcMessage) { - op := c.respWait[string(msg.ID)] - if op == nil { - log.Debug("unsolicited response", "msg", msg) - return - } - delete(c.respWait, string(msg.ID)) - // For normal responses, just forward the reply to Call/BatchCall. - if op.sub == nil { - op.resp <- msg - return - } - // For subscription responses, start the subscription if the server - // indicates success. EthSubscribe gets unblocked in either case through - // the op.resp channel. - defer close(op.resp) - if msg.Error != nil { - op.err = msg.Error - return - } - if op.err = json.Unmarshal(msg.Result, &op.sub.subid); op.err == nil { - go op.sub.start() - c.subs[op.sub.subid] = op.sub - } } -// Reading happens on a dedicated goroutine. - -func (c *Client) read(conn net.Conn) error { - var ( - buf json.RawMessage - dec = json.NewDecoder(conn) - ) - readMessage := func() (rs []*jsonrpcMessage, err error) { - buf = buf[:0] - if err = dec.Decode(&buf); err != nil { - return nil, err - } - if isBatch(buf) { - err = json.Unmarshal(buf, &rs) - } else { - rs = make([]*jsonrpcMessage, 1) - err = json.Unmarshal(buf, &rs[0]) - } - return rs, err - } - +// drainRead drops read messages until an error occurs. +func (c *Client) drainRead() { for { - resp, err := readMessage() - if err != nil { - c.readErr <- err - return err - } - c.readResp <- resp - } -} - -// Subscriptions. - -// A ClientSubscription represents a subscription established through EthSubscribe. -type ClientSubscription struct { - client *Client - etype reflect.Type - channel reflect.Value - namespace string - subid string - in chan json.RawMessage - - quitOnce sync.Once // ensures quit is closed once - quit chan struct{} // quit is closed when the subscription exits - errOnce sync.Once // ensures err is closed once - err chan error -} - -func newClientSubscription(c *Client, namespace string, channel reflect.Value) *ClientSubscription { - sub := &ClientSubscription{ - client: c, - namespace: namespace, - etype: channel.Type().Elem(), - channel: channel, - quit: make(chan struct{}), - err: make(chan error, 1), - in: make(chan json.RawMessage), - } - return sub -} - -// Err returns the subscription error channel. The intended use of Err is to schedule -// resubscription when the client connection is closed unexpectedly. -// -// The error channel receives a value when the subscription has ended due -// to an error. The received error is nil if Close has been called -// on the underlying client and no other error has occurred. -// -// The error channel is closed when Unsubscribe is called on the subscription. -func (sub *ClientSubscription) Err() <-chan error { - return sub.err -} - -// Unsubscribe unsubscribes the notification and closes the error channel. -// It can safely be called more than once. -func (sub *ClientSubscription) Unsubscribe() { - sub.quitWithError(nil, true) - sub.errOnce.Do(func() { close(sub.err) }) -} - -func (sub *ClientSubscription) quitWithError(err error, unsubscribeServer bool) { - sub.quitOnce.Do(func() { - // The dispatch loop won't be able to execute the unsubscribe call - // if it is blocked on deliver. Close sub.quit first because it - // unblocks deliver. - close(sub.quit) - if unsubscribeServer { - sub.requestUnsubscribe() - } - if err != nil { - if err == ErrClientQuit { - err = nil // Adhere to subscription semantics. - } - sub.err <- err + select { + case <-c.readOp: + case <-c.readErr: + return } - }) -} - -func (sub *ClientSubscription) deliver(result json.RawMessage) (ok bool) { - select { - case sub.in <- result: - return true - case <-sub.quit: - return false } } -func (sub *ClientSubscription) start() { - sub.quitWithError(sub.forward()) -} - -func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { - cases := []reflect.SelectCase{ - {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.quit)}, - {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.in)}, - {Dir: reflect.SelectSend, Chan: sub.channel}, - } - buffer := list.New() - defer buffer.Init() +// read decodes RPC messages from a codec, feeding them into dispatch. +func (c *Client) read(codec ServerCodec) { for { - var chosen int - var recv reflect.Value - if buffer.Len() == 0 { - // Idle, omit send case. - chosen, recv, _ = reflect.Select(cases[:2]) - } else { - // Non-empty buffer, send the first queued item. - cases[2].Send = reflect.ValueOf(buffer.Front().Value) - chosen, recv, _ = reflect.Select(cases) + msgs, batch, err := codec.Read() + if _, ok := err.(*json.SyntaxError); ok { + codec.Write(context.Background(), errorMessage(&parseError{err.Error()})) } - - switch chosen { - case 0: // <-sub.quit - return nil, false - case 1: // <-sub.in - val, err := sub.unmarshal(recv.Interface().(json.RawMessage)) - if err != nil { - return err, true - } - if buffer.Len() == maxClientSubscriptionBuffer { - return ErrSubscriptionQueueOverflow, true - } - buffer.PushBack(val) - case 2: // sub.channel<- - cases[2].Send = reflect.Value{} // Don't hold onto the value. - buffer.Remove(buffer.Front()) + if err != nil { + c.readErr <- err + return } + c.readOp <- readOp{msgs, batch} } } - -func (sub *ClientSubscription) unmarshal(result json.RawMessage) (interface{}, error) { - val := reflect.New(sub.etype) - err := json.Unmarshal(result, val.Interface()) - return val.Elem().Interface(), err -} - -func (sub *ClientSubscription) requestUnsubscribe() error { - var result interface{} - return sub.client.Call(&result, sub.namespace+unsubscribeMethodSuffix, sub.subid) -} diff --git a/rpc/client_test.go b/rpc/client_test.go index a8195c0af8de..315bd6d7d14d 100644 --- a/rpc/client_test.go +++ b/rpc/client_test.go @@ -35,13 +35,13 @@ import ( ) func TestClientRequest(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() var resp Result - if err := client.Call(&resp, "service_echo", "hello", 10, &Args{"world"}); err != nil { + if err := client.Call(&resp, "test_echo", "hello", 10, &Args{"world"}); err != nil { t.Fatal(err) } if !reflect.DeepEqual(resp, Result{"hello", 10, &Args{"world"}}) { @@ -50,19 +50,19 @@ func TestClientRequest(t *testing.T) { } func TestClientBatchRequest(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() batch := []BatchElem{ { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello", 10, &Args{"world"}}, Result: new(Result), }, { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello2", 11, &Args{"world"}}, Result: new(Result), }, @@ -77,12 +77,12 @@ func TestClientBatchRequest(t *testing.T) { } wantResult := []BatchElem{ { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello", 10, &Args{"world"}}, Result: &Result{"hello", 10, &Args{"world"}}, }, { - Method: "service_echo", + Method: "test_echo", Args: []interface{}{"hello2", 11, &Args{"world"}}, Result: &Result{"hello2", 11, &Args{"world"}}, }, @@ -90,7 +90,7 @@ func TestClientBatchRequest(t *testing.T) { Method: "no_such_method", Args: []interface{}{1, 2, 3}, Result: new(int), - Error: &jsonError{Code: -32601, Message: "The method no_such_method_ does not exist/is not available"}, + Error: &jsonError{Code: -32601, Message: "the method no_such_method does not exist/is not available"}, }, } if !reflect.DeepEqual(batch, wantResult) { @@ -98,6 +98,17 @@ func TestClientBatchRequest(t *testing.T) { } } +func TestClientNotify(t *testing.T) { + server := newTestServer() + defer server.Stop() + client := DialInProc(server) + defer client.Close() + + if err := client.Notify(context.Background(), "test_echo", "hello", 10, &Args{"world"}); err != nil { + t.Fatal(err) + } +} + // func TestClientCancelInproc(t *testing.T) { testClientCancel("inproc", t) } func TestClientCancelWebsocket(t *testing.T) { testClientCancel("ws", t) } func TestClientCancelHTTP(t *testing.T) { testClientCancel("http", t) } @@ -106,7 +117,12 @@ func TestClientCancelIPC(t *testing.T) { testClientCancel("ipc", t) } // This test checks that requests made through CallContext can be canceled by canceling // the context. func testClientCancel(transport string, t *testing.T) { - server := newTestServer("service", new(Service)) + // These tests take a lot of time, run them all at once. + // You probably want to run with -parallel 1 or comment out + // the call to t.Parallel if you enable the logging. + t.Parallel() + + server := newTestServer() defer server.Stop() // What we want to achieve is that the context gets canceled @@ -142,11 +158,6 @@ func testClientCancel(transport string, t *testing.T) { panic("unknown transport: " + transport) } - // These tests take a lot of time, run them all at once. - // You probably want to run with -parallel 1 or comment out - // the call to t.Parallel if you enable the logging. - t.Parallel() - // The actual test starts here. var ( wg sync.WaitGroup @@ -174,7 +185,8 @@ func testClientCancel(transport string, t *testing.T) { } // Now perform a call with the context. // The key thing here is that no call will ever complete successfully. - err := client.CallContext(ctx, nil, "service_sleep", 2*maxContextCancelTimeout) + sleepTime := maxContextCancelTimeout + 20*time.Millisecond + err := client.CallContext(ctx, nil, "test_sleep", sleepTime) if err != nil { log.Debug(fmt.Sprint("got expected error:", err)) } else { @@ -191,7 +203,7 @@ func testClientCancel(transport string, t *testing.T) { } func TestClientSubscribeInvalidArg(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() @@ -221,14 +233,14 @@ func TestClientSubscribeInvalidArg(t *testing.T) { } func TestClientSubscribe(t *testing.T) { - server := newTestServer("eth", new(NotificationTestService)) + server := newTestServer() defer server.Stop() client := DialInProc(server) defer client.Close() nc := make(chan int) count := 10 - sub, err := client.EthSubscribe(context.Background(), nc, "someSubscription", count, 0) + sub, err := client.Subscribe(context.Background(), "nftest", nc, "someSubscription", count, 0) if err != nil { t.Fatal("can't subscribe:", err) } @@ -251,46 +263,17 @@ func TestClientSubscribe(t *testing.T) { } } -func TestClientSubscribeCustomNamespace(t *testing.T) { - namespace := "custom" - server := newTestServer(namespace, new(NotificationTestService)) - defer server.Stop() - client := DialInProc(server) - defer client.Close() - - nc := make(chan int) - count := 10 - sub, err := client.Subscribe(context.Background(), namespace, nc, "someSubscription", count, 0) - if err != nil { - t.Fatal("can't subscribe:", err) - } - for i := 0; i < count; i++ { - if val := <-nc; val != i { - t.Fatalf("value mismatch: got %d, want %d", val, i) - } - } - - sub.Unsubscribe() - select { - case v := <-nc: - t.Fatal("received value after unsubscribe:", v) - case err := <-sub.Err(): - if err != nil { - t.Fatalf("Err returned a non-nil error after explicit unsubscribe: %q", err) - } - case <-time.After(1 * time.Second): - t.Fatalf("subscription not closed within 1s after unsubscribe") - } -} - -// In this test, the connection drops while EthSubscribe is -// waiting for a response. +// In this test, the connection drops while Subscribe is waiting for a response. func TestClientSubscribeClose(t *testing.T) { - service := &NotificationTestService{ + server := newTestServer() + service := ¬ificationTestService{ gotHangSubscriptionReq: make(chan struct{}), unblockHangSubscription: make(chan struct{}), } - server := newTestServer("eth", service) + if err := server.RegisterName("nftest2", service); err != nil { + t.Fatal(err) + } + defer server.Stop() client := DialInProc(server) defer client.Close() @@ -302,7 +285,7 @@ func TestClientSubscribeClose(t *testing.T) { err error ) go func() { - sub, err = client.EthSubscribe(context.Background(), nc, "hangSubscription", 999) + sub, err = client.Subscribe(context.Background(), "nftest2", nc, "hangSubscription", 999) errc <- err }() @@ -313,27 +296,26 @@ func TestClientSubscribeClose(t *testing.T) { select { case err := <-errc: if err == nil { - t.Errorf("EthSubscribe returned nil error after Close") + t.Errorf("Subscribe returned nil error after Close") } if sub != nil { - t.Error("EthSubscribe returned non-nil subscription after Close") + t.Error("Subscribe returned non-nil subscription after Close") } case <-time.After(1 * time.Second): - t.Fatalf("EthSubscribe did not return within 1s after Close") + t.Fatalf("Subscribe did not return within 1s after Close") } } // This test reproduces https://github.com/ethereum/go-ethereum/issues/17837 where the // client hangs during shutdown when Unsubscribe races with Client.Close. func TestClientCloseUnsubscribeRace(t *testing.T) { - service := &NotificationTestService{} - server := newTestServer("eth", service) + server := newTestServer() defer server.Stop() for i := 0; i < 20; i++ { client := DialInProc(server) nc := make(chan int) - sub, err := client.EthSubscribe(context.Background(), nc, "someSubscription", 3, 1) + sub, err := client.Subscribe(context.Background(), "nftest", nc, "someSubscription", 3, 1) if err != nil { t.Fatal(err) } @@ -350,7 +332,7 @@ func TestClientCloseUnsubscribeRace(t *testing.T) { // This test checks that Client doesn't lock up when a single subscriber // doesn't read subscription events. func TestClientNotificationStorm(t *testing.T) { - server := newTestServer("eth", new(NotificationTestService)) + server := newTestServer() defer server.Stop() doTest := func(count int, wantError bool) { @@ -362,7 +344,7 @@ func TestClientNotificationStorm(t *testing.T) { // Subscribe on the server. It will start sending many notifications // very quickly. nc := make(chan int) - sub, err := client.EthSubscribe(ctx, nc, "someSubscription", count, 0) + sub, err := client.Subscribe(ctx, "nftest", nc, "someSubscription", count, 0) if err != nil { t.Fatal("can't subscribe:", err) } @@ -384,7 +366,7 @@ func TestClientNotificationStorm(t *testing.T) { return } var r int - err := client.CallContext(ctx, &r, "eth_echo", i) + err := client.CallContext(ctx, &r, "nftest_echo", i) if err != nil { if !wantError { t.Fatalf("(%d/%d) call error: %v", i, count, err) @@ -392,14 +374,17 @@ func TestClientNotificationStorm(t *testing.T) { return } } + if wantError { + t.Fatalf("didn't get expected error") + } } doTest(8000, false) - doTest(10000, true) + doTest(23000, true) } func TestClientHTTP(t *testing.T) { - server := newTestServer("service", new(Service)) + server := newTestServer() defer server.Stop() client, hs := httpTestClient(server, "http", nil) @@ -416,7 +401,7 @@ func TestClientHTTP(t *testing.T) { for i := range results { i := i go func() { - errc <- client.Call(&results[i], "service_echo", + errc <- client.Call(&results[i], "test_echo", wantResult.String, wantResult.Int, wantResult.Args) }() } @@ -445,16 +430,16 @@ func TestClientHTTP(t *testing.T) { func TestClientReconnect(t *testing.T) { startServer := func(addr string) (*Server, net.Listener) { - srv := newTestServer("service", new(Service)) + srv := newTestServer() l, err := net.Listen("tcp", addr) if err != nil { - t.Fatal(err) + t.Fatal("can't listen:", err) } go http.Serve(l, srv.WebsocketHandler([]string{"*"})) return srv, l } - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second) defer cancel() // Start a server and corresponding client. @@ -466,21 +451,22 @@ func TestClientReconnect(t *testing.T) { // Perform a call. This should work because the server is up. var resp Result - if err := client.CallContext(ctx, &resp, "service_echo", "", 1, nil); err != nil { + if err := client.CallContext(ctx, &resp, "test_echo", "", 1, nil); err != nil { t.Fatal(err) } - // Shut down the server and try calling again. It shouldn't work. + // Shut down the server and allow for some cool down time so we can listen on the same + // address again. l1.Close() s1.Stop() - if err := client.CallContext(ctx, &resp, "service_echo", "", 2, nil); err == nil { + time.Sleep(2 * time.Second) + + // Try calling again. It shouldn't work. + if err := client.CallContext(ctx, &resp, "test_echo", "", 2, nil); err == nil { t.Error("successful call while the server is down") t.Logf("resp: %#v", resp) } - // Allow for some cool down time so we can listen on the same address again. - time.Sleep(2 * time.Second) - // Start it up again and call again. The connection should be reestablished. // We spawn multiple calls here to check whether this hangs somehow. s2, l2 := startServer(l1.Addr().String()) @@ -493,7 +479,7 @@ func TestClientReconnect(t *testing.T) { go func() { <-start var resp Result - errors <- client.CallContext(ctx, &resp, "service_echo", "", 3, nil) + errors <- client.CallContext(ctx, &resp, "test_echo", "", 3, nil) }() } close(start) @@ -503,20 +489,12 @@ func TestClientReconnect(t *testing.T) { errcount++ } } - t.Log("err:", err) + t.Logf("%d errors, last error: %v", errcount, err) if errcount > 1 { t.Errorf("expected one error after disconnect, got %d", errcount) } } -func newTestServer(serviceName string, service interface{}) *Server { - server := NewServer() - if err := server.RegisterName(serviceName, service); err != nil { - panic(err) - } - return server -} - func httpTestClient(srv *Server, transport string, fl *flakeyListener) (*Client, *httptest.Server) { // Create the HTTP server. var hs *httptest.Server diff --git a/swarm/network/stream/norace_test.go b/rpc/constants_unix.go similarity index 75% rename from swarm/network/stream/norace_test.go rename to rpc/constants_unix.go index b324f6939c5f..2f98d6499b7a 100644 --- a/swarm/network/stream/norace_test.go +++ b/rpc/constants_unix.go @@ -14,11 +14,20 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build !race +// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris -package stream +package rpc -// Provide a flag to reduce the scope of tests when running them -// with race detector. Some of the tests are doing a lot of allocations -// on the heap, and race detector uses much more memory to track them. -const raceTest = false +/* +#include + +int max_socket_path_size() { +struct sockaddr_un s; +return sizeof(s.sun_path); +} +*/ +import "C" + +var ( + max_path_size = C.max_socket_path_size() +) diff --git a/swarm/network/stream/race_test.go b/rpc/constants_unix_nocgo.go similarity index 82% rename from swarm/network/stream/race_test.go rename to rpc/constants_unix_nocgo.go index 8aed3542bf81..ecb231f92714 100644 --- a/swarm/network/stream/race_test.go +++ b/rpc/constants_unix_nocgo.go @@ -14,10 +14,12 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -// +build race +// +build !cgo,!windows -package stream +package rpc -// Reduce the scope of some tests when running with race detector, -// as it raises the memory consumption significantly. -const raceTest = true +var ( + // On Linux, sun_path is 108 bytes in size + // see http://man7.org/linux/man-pages/man7/unix.7.html + max_path_size = 108 +) diff --git a/rpc/doc.go b/rpc/doc.go index c60381b5aef8..e5840c32d3f6 100644 --- a/rpc/doc.go +++ b/rpc/doc.go @@ -15,43 +15,49 @@ // along with the go-ethereum library. If not, see . /* -Package rpc provides access to the exported methods of an object across a network -or other I/O connection. After creating a server instance objects can be registered, -making it visible from the outside. Exported methods that follow specific -conventions can be called remotely. It also has support for the publish/subscribe -pattern. + +Package rpc implements bi-directional JSON-RPC 2.0 on multiple transports. + +It provides access to the exported methods of an object across a network or other I/O +connection. After creating a server or client instance, objects can be registered to make +them visible as 'services'. Exported methods that follow specific conventions can be +called remotely. It also has support for the publish/subscribe pattern. + +RPC Methods Methods that satisfy the following criteria are made available for remote access: - - object must be exported + - method must be exported - method returns 0, 1 (response or error) or 2 (response and error) values - method argument(s) must be exported or builtin types - method returned value(s) must be exported or builtin types An example method: + func (s *CalcService) Add(a, b int) (int, error) -When the returned error isn't nil the returned integer is ignored and the error is -sent back to the client. Otherwise the returned integer is sent back to the client. +When the returned error isn't nil the returned integer is ignored and the error is sent +back to the client. Otherwise the returned integer is sent back to the client. -Optional arguments are supported by accepting pointer values as arguments. E.g. -if we want to do the addition in an optional finite field we can accept a mod -argument as pointer value. +Optional arguments are supported by accepting pointer values as arguments. E.g. if we want +to do the addition in an optional finite field we can accept a mod argument as pointer +value. - func (s *CalService) Add(a, b int, mod *int) (int, error) + func (s *CalcService) Add(a, b int, mod *int) (int, error) -This RPC method can be called with 2 integers and a null value as third argument. -In that case the mod argument will be nil. Or it can be called with 3 integers, -in that case mod will be pointing to the given third argument. Since the optional -argument is the last argument the RPC package will also accept 2 integers as -arguments. It will pass the mod argument as nil to the RPC method. +This RPC method can be called with 2 integers and a null value as third argument. In that +case the mod argument will be nil. Or it can be called with 3 integers, in that case mod +will be pointing to the given third argument. Since the optional argument is the last +argument the RPC package will also accept 2 integers as arguments. It will pass the mod +argument as nil to the RPC method. -The server offers the ServeCodec method which accepts a ServerCodec instance. It will -read requests from the codec, process the request and sends the response back to the -client using the codec. The server can execute requests concurrently. Responses -can be sent back to the client out of order. +The server offers the ServeCodec method which accepts a ServerCodec instance. It will read +requests from the codec, process the request and sends the response back to the client +using the codec. The server can execute requests concurrently. Responses can be sent back +to the client out of order. An example server which uses the JSON codec: + type CalculatorService struct {} func (s *CalculatorService) Add(a, b int) int { @@ -73,26 +79,40 @@ An example server which uses the JSON codec: for { c, _ := l.AcceptUnix() codec := v2.NewJSONCodec(c) - go server.ServeCodec(codec) + go server.ServeCodec(codec, 0) } +Subscriptions + The package also supports the publish subscribe pattern through the use of subscriptions. -A method that is considered eligible for notifications must satisfy the following criteria: - - object must be exported +A method that is considered eligible for notifications must satisfy the following +criteria: + - method must be exported - first method argument type must be context.Context - method argument(s) must be exported or builtin types - - method must return the tuple Subscription, error + - method must have return types (rpc.Subscription, error) An example method: - func (s *BlockChainService) NewBlocks(ctx context.Context) (Subscription, error) { + + func (s *BlockChainService) NewBlocks(ctx context.Context) (rpc.Subscription, error) { ... } -Subscriptions are deleted when: - - the user sends an unsubscribe request - - the connection which was used to create the subscription is closed. This can be initiated - by the client and server. The server will close the connection on a write error or when - the queue of buffered notifications gets too big. +When the service containing the subscription method is registered to the server, for +example under the "blockchain" namespace, a subscription is created by calling the +"blockchain_subscribe" method. + +Subscriptions are deleted when the user sends an unsubscribe request or when the +connection which was used to create the subscription is closed. This can be initiated by +the client and server. The server will close the connection for any write error. + +For more information about subscriptions, see https://github.com/ethereum/go-ethereum/wiki/RPC-PUB-SUB. + +Reverse Calls + +In any method handler, an instance of rpc.Client can be accessed through the +ClientFromContext method. Using this client instance, server-to-client method calls can be +performed on the RPC connection. */ package rpc diff --git a/rpc/errors.go b/rpc/errors.go index 9cf9dc60c29f..c3aa826cc88a 100644 --- a/rpc/errors.go +++ b/rpc/errors.go @@ -18,18 +18,31 @@ package rpc import "fmt" -// request is for an unknown service -type methodNotFoundError struct { - service string - method string -} +const defaultErrorCode = -32000 + +type methodNotFoundError struct{ method string } func (e *methodNotFoundError) ErrorCode() int { return -32601 } func (e *methodNotFoundError) Error() string { - return fmt.Sprintf("The method %s%s%s does not exist/is not available", e.service, serviceMethodSeparator, e.method) + return fmt.Sprintf("the method %s does not exist/is not available", e.method) +} + +type subscriptionNotFoundError struct{ namespace, subscription string } + +func (e *subscriptionNotFoundError) ErrorCode() int { return -32601 } + +func (e *subscriptionNotFoundError) Error() string { + return fmt.Sprintf("no %q subscription in %s namespace", e.subscription, e.namespace) } +// Invalid JSON was received by the server. +type parseError struct{ message string } + +func (e *parseError) ErrorCode() int { return -32700 } + +func (e *parseError) Error() string { return e.message } + // received message isn't a valid request type invalidRequestError struct{ message string } @@ -50,17 +63,3 @@ type invalidParamsError struct{ message string } func (e *invalidParamsError) ErrorCode() int { return -32602 } func (e *invalidParamsError) Error() string { return e.message } - -// logic error, callback returned an error -type callbackError struct{ message string } - -func (e *callbackError) ErrorCode() int { return -32000 } - -func (e *callbackError) Error() string { return e.message } - -// issued when a request is received after the server is issued to stop. -type shutdownError struct{} - -func (e *shutdownError) ErrorCode() int { return -32000 } - -func (e *shutdownError) Error() string { return "server is shutting down" } diff --git a/rpc/gzip.go b/rpc/gzip.go new file mode 100644 index 000000000000..a14fd09d5407 --- /dev/null +++ b/rpc/gzip.go @@ -0,0 +1,66 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "compress/gzip" + "io" + "io/ioutil" + "net/http" + "strings" + "sync" +) + +var gzPool = sync.Pool{ + New: func() interface{} { + w := gzip.NewWriter(ioutil.Discard) + return w + }, +} + +type gzipResponseWriter struct { + io.Writer + http.ResponseWriter +} + +func (w *gzipResponseWriter) WriteHeader(status int) { + w.Header().Del("Content-Length") + w.ResponseWriter.WriteHeader(status) +} + +func (w *gzipResponseWriter) Write(b []byte) (int, error) { + return w.Writer.Write(b) +} + +func newGzipHandler(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if !strings.Contains(r.Header.Get("Accept-Encoding"), "gzip") { + next.ServeHTTP(w, r) + return + } + + w.Header().Set("Content-Encoding", "gzip") + + gz := gzPool.Get().(*gzip.Writer) + defer gzPool.Put(gz) + + gz.Reset(w) + defer gz.Close() + + next.ServeHTTP(&gzipResponseWriter{ResponseWriter: w, Writer: gz}, r) + }) +} diff --git a/rpc/handler.go b/rpc/handler.go new file mode 100644 index 000000000000..8a4e480ee2c7 --- /dev/null +++ b/rpc/handler.go @@ -0,0 +1,397 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "encoding/json" + "reflect" + "strconv" + "strings" + "sync" + "time" + + "github.com/ethereum/go-ethereum/log" +) + +// handler handles JSON-RPC messages. There is one handler per connection. Note that +// handler is not safe for concurrent use. Message handling never blocks indefinitely +// because RPCs are processed on background goroutines launched by handler. +// +// The entry points for incoming messages are: +// +// h.handleMsg(message) +// h.handleBatch(message) +// +// Outgoing calls use the requestOp struct. Register the request before sending it +// on the connection: +// +// op := &requestOp{ids: ...} +// h.addRequestOp(op) +// +// Now send the request, then wait for the reply to be delivered through handleMsg: +// +// if err := op.wait(...); err != nil { +// h.removeRequestOp(op) // timeout, etc. +// } +// +type handler struct { + reg *serviceRegistry + unsubscribeCb *callback + idgen func() ID // subscription ID generator + respWait map[string]*requestOp // active client requests + clientSubs map[string]*ClientSubscription // active client subscriptions + callWG sync.WaitGroup // pending call goroutines + rootCtx context.Context // canceled by close() + cancelRoot func() // cancel function for rootCtx + conn jsonWriter // where responses will be sent + log log.Logger + allowSubscribe bool + + subLock sync.Mutex + serverSubs map[ID]*Subscription +} + +type callProc struct { + ctx context.Context + notifiers []*Notifier +} + +func newHandler(connCtx context.Context, conn jsonWriter, idgen func() ID, reg *serviceRegistry) *handler { + rootCtx, cancelRoot := context.WithCancel(connCtx) + h := &handler{ + reg: reg, + idgen: idgen, + conn: conn, + respWait: make(map[string]*requestOp), + clientSubs: make(map[string]*ClientSubscription), + rootCtx: rootCtx, + cancelRoot: cancelRoot, + allowSubscribe: true, + serverSubs: make(map[ID]*Subscription), + log: log.Root(), + } + if conn.RemoteAddr() != "" { + h.log = h.log.New("conn", conn.RemoteAddr()) + } + h.unsubscribeCb = newCallback(reflect.Value{}, reflect.ValueOf(h.unsubscribe)) + return h +} + +// handleBatch executes all messages in a batch and returns the responses. +func (h *handler) handleBatch(msgs []*jsonrpcMessage) { + // Emit error response for empty batches: + if len(msgs) == 0 { + h.startCallProc(func(cp *callProc) { + h.conn.Write(cp.ctx, errorMessage(&invalidRequestError{"empty batch"})) + }) + return + } + + // Handle non-call messages first: + calls := make([]*jsonrpcMessage, 0, len(msgs)) + for _, msg := range msgs { + if handled := h.handleImmediate(msg); !handled { + calls = append(calls, msg) + } + } + if len(calls) == 0 { + return + } + // Process calls on a goroutine because they may block indefinitely: + h.startCallProc(func(cp *callProc) { + answers := make([]*jsonrpcMessage, 0, len(msgs)) + for _, msg := range calls { + if answer := h.handleCallMsg(cp, msg); answer != nil { + answers = append(answers, answer) + } + } + h.addSubscriptions(cp.notifiers) + if len(answers) > 0 { + h.conn.Write(cp.ctx, answers) + } + for _, n := range cp.notifiers { + n.activate() + } + }) +} + +// handleMsg handles a single message. +func (h *handler) handleMsg(msg *jsonrpcMessage) { + if ok := h.handleImmediate(msg); ok { + return + } + h.startCallProc(func(cp *callProc) { + answer := h.handleCallMsg(cp, msg) + h.addSubscriptions(cp.notifiers) + if answer != nil { + h.conn.Write(cp.ctx, answer) + } + for _, n := range cp.notifiers { + n.activate() + } + }) +} + +// close cancels all requests except for inflightReq and waits for +// call goroutines to shut down. +func (h *handler) close(err error, inflightReq *requestOp) { + h.cancelAllRequests(err, inflightReq) + h.callWG.Wait() + h.cancelRoot() + h.cancelServerSubscriptions(err) +} + +// addRequestOp registers a request operation. +func (h *handler) addRequestOp(op *requestOp) { + for _, id := range op.ids { + h.respWait[string(id)] = op + } +} + +// removeRequestOps stops waiting for the given request IDs. +func (h *handler) removeRequestOp(op *requestOp) { + for _, id := range op.ids { + delete(h.respWait, string(id)) + } +} + +// cancelAllRequests unblocks and removes pending requests and active subscriptions. +func (h *handler) cancelAllRequests(err error, inflightReq *requestOp) { + didClose := make(map[*requestOp]bool) + if inflightReq != nil { + didClose[inflightReq] = true + } + + for id, op := range h.respWait { + // Remove the op so that later calls will not close op.resp again. + delete(h.respWait, id) + + if !didClose[op] { + op.err = err + close(op.resp) + didClose[op] = true + } + } + for id, sub := range h.clientSubs { + delete(h.clientSubs, id) + sub.quitWithError(err, false) + } +} + +func (h *handler) addSubscriptions(nn []*Notifier) { + h.subLock.Lock() + defer h.subLock.Unlock() + + for _, n := range nn { + if sub := n.takeSubscription(); sub != nil { + h.serverSubs[sub.ID] = sub + } + } +} + +// cancelServerSubscriptions removes all subscriptions and closes their error channels. +func (h *handler) cancelServerSubscriptions(err error) { + h.subLock.Lock() + defer h.subLock.Unlock() + + for id, s := range h.serverSubs { + s.err <- err + close(s.err) + delete(h.serverSubs, id) + } +} + +// startCallProc runs fn in a new goroutine and starts tracking it in the h.calls wait group. +func (h *handler) startCallProc(fn func(*callProc)) { + h.callWG.Add(1) + go func() { + ctx, cancel := context.WithCancel(h.rootCtx) + defer h.callWG.Done() + defer cancel() + fn(&callProc{ctx: ctx}) + }() +} + +// handleImmediate executes non-call messages. It returns false if the message is a +// call or requires a reply. +func (h *handler) handleImmediate(msg *jsonrpcMessage) bool { + start := time.Now() + switch { + case msg.isNotification(): + if strings.HasSuffix(msg.Method, notificationMethodSuffix) { + h.handleSubscriptionResult(msg) + return true + } + return false + case msg.isResponse(): + h.handleResponse(msg) + h.log.Trace("Handled RPC response", "reqid", idForLog{msg.ID}, "t", time.Since(start)) + return true + default: + return false + } +} + +// handleSubscriptionResult processes subscription notifications. +func (h *handler) handleSubscriptionResult(msg *jsonrpcMessage) { + var result subscriptionResult + if err := json.Unmarshal(msg.Params, &result); err != nil { + h.log.Debug("Dropping invalid subscription message") + return + } + if h.clientSubs[result.ID] != nil { + h.clientSubs[result.ID].deliver(result.Result) + } +} + +// handleResponse processes method call responses. +func (h *handler) handleResponse(msg *jsonrpcMessage) { + op := h.respWait[string(msg.ID)] + if op == nil { + h.log.Debug("Unsolicited RPC response", "reqid", idForLog{msg.ID}) + return + } + delete(h.respWait, string(msg.ID)) + // For normal responses, just forward the reply to Call/BatchCall. + if op.sub == nil { + op.resp <- msg + return + } + // For subscription responses, start the subscription if the server + // indicates success. EthSubscribe gets unblocked in either case through + // the op.resp channel. + defer close(op.resp) + if msg.Error != nil { + op.err = msg.Error + return + } + if op.err = json.Unmarshal(msg.Result, &op.sub.subid); op.err == nil { + go op.sub.start() + h.clientSubs[op.sub.subid] = op.sub + } +} + +// handleCallMsg executes a call message and returns the answer. +func (h *handler) handleCallMsg(ctx *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + start := time.Now() + switch { + case msg.isNotification(): + h.handleCall(ctx, msg) + h.log.Debug("Served "+msg.Method, "t", time.Since(start)) + return nil + case msg.isCall(): + resp := h.handleCall(ctx, msg) + if resp.Error != nil { + h.log.Warn("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start), "err", resp.Error.Message) + } else { + h.log.Debug("Served "+msg.Method, "reqid", idForLog{msg.ID}, "t", time.Since(start)) + } + return resp + case msg.hasValidID(): + return msg.errorResponse(&invalidRequestError{"invalid request"}) + default: + return errorMessage(&invalidRequestError{"invalid request"}) + } +} + +// handleCall processes method calls. +func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + if msg.isSubscribe() { + return h.handleSubscribe(cp, msg) + } + var callb *callback + if msg.isUnsubscribe() { + callb = h.unsubscribeCb + } else { + callb = h.reg.callback(msg.Method) + } + if callb == nil { + return msg.errorResponse(&methodNotFoundError{method: msg.Method}) + } + args, err := parsePositionalArguments(msg.Params, callb.argTypes) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + + return h.runMethod(cp.ctx, msg, callb, args) +} + +// handleSubscribe processes *_subscribe method calls. +func (h *handler) handleSubscribe(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage { + if !h.allowSubscribe { + return msg.errorResponse(ErrNotificationsUnsupported) + } + + // Subscription method name is first argument. + name, err := parseSubscriptionName(msg.Params) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + namespace := msg.namespace() + callb := h.reg.subscription(namespace, name) + if callb == nil { + return msg.errorResponse(&subscriptionNotFoundError{namespace, name}) + } + + // Parse subscription name arg too, but remove it before calling the callback. + argTypes := append([]reflect.Type{stringType}, callb.argTypes...) + args, err := parsePositionalArguments(msg.Params, argTypes) + if err != nil { + return msg.errorResponse(&invalidParamsError{err.Error()}) + } + args = args[1:] + + // Install notifier in context so the subscription handler can find it. + n := &Notifier{h: h, namespace: namespace} + cp.notifiers = append(cp.notifiers, n) + ctx := context.WithValue(cp.ctx, notifierKey{}, n) + + return h.runMethod(ctx, msg, callb, args) +} + +// runMethod runs the Go callback for an RPC method. +func (h *handler) runMethod(ctx context.Context, msg *jsonrpcMessage, callb *callback, args []reflect.Value) *jsonrpcMessage { + result, err := callb.call(ctx, msg.Method, args) + if err != nil { + return msg.errorResponse(err) + } + return msg.response(result) +} + +// unsubscribe is the callback function for all *_unsubscribe calls. +func (h *handler) unsubscribe(ctx context.Context, id ID) (bool, error) { + h.subLock.Lock() + defer h.subLock.Unlock() + + s := h.serverSubs[id] + if s == nil { + return false, ErrSubscriptionNotFound + } + close(s.err) + delete(h.serverSubs, id) + return true, nil +} + +type idForLog struct{ json.RawMessage } + +func (id idForLog) String() string { + if s, err := strconv.Unquote(string(id.RawMessage)); err == nil { + return s + } + return string(id.RawMessage) +} diff --git a/rpc/http.go b/rpc/http.go index 674166fb3af5..2c0cb5edbe60 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -36,39 +36,40 @@ import ( ) const ( - maxRequestContentLength = 1024 * 512 + maxRequestContentLength = 1024 * 1024 * 5 + contentType = "application/json" ) -var ( - // https://www.jsonrpc.org/historical/json-rpc-over-http.html#id13 - acceptedContentTypes = []string{"application/json", "application/json-rpc", "application/jsonrequest"} - contentType = acceptedContentTypes[0] - nullAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:0") -) +// https://www.jsonrpc.org/historical/json-rpc-over-http.html#id13 +var acceptedContentTypes = []string{contentType, "application/json-rpc", "application/jsonrequest"} type httpConn struct { client *http.Client req *http.Request closeOnce sync.Once - closed chan struct{} + closed chan interface{} } // httpConn is treated specially by Client. -func (hc *httpConn) LocalAddr() net.Addr { return nullAddr } -func (hc *httpConn) RemoteAddr() net.Addr { return nullAddr } -func (hc *httpConn) SetReadDeadline(time.Time) error { return nil } -func (hc *httpConn) SetWriteDeadline(time.Time) error { return nil } -func (hc *httpConn) SetDeadline(time.Time) error { return nil } -func (hc *httpConn) Write([]byte) (int, error) { panic("Write called") } - -func (hc *httpConn) Read(b []byte) (int, error) { +func (hc *httpConn) Write(context.Context, interface{}) error { + panic("Write called on httpConn") +} + +func (hc *httpConn) RemoteAddr() string { + return hc.req.URL.String() +} + +func (hc *httpConn) Read() ([]*jsonrpcMessage, bool, error) { <-hc.closed - return 0, io.EOF + return nil, false, io.EOF } -func (hc *httpConn) Close() error { +func (hc *httpConn) Close() { hc.closeOnce.Do(func() { close(hc.closed) }) - return nil +} + +func (hc *httpConn) Closed() <-chan interface{} { + return hc.closed } // HTTPTimeouts represents the configuration params for the HTTP RPC server. @@ -114,8 +115,8 @@ func DialHTTPWithClient(endpoint string, client *http.Client) (*Client, error) { req.Header.Set("Accept", contentType) initctx := context.Background() - return newClient(initctx, func(context.Context) (net.Conn, error) { - return &httpConn{client: client, req: req, closed: make(chan struct{})}, nil + return newClient(initctx, func(context.Context) (ServerCodec, error) { + return &httpConn{client: client, req: req, closed: make(chan interface{})}, nil }) } @@ -184,24 +185,38 @@ func (hc *httpConn) doRequest(ctx context.Context, msg interface{}) (io.ReadClos return resp.Body, nil } -// httpReadWriteNopCloser wraps a io.Reader and io.Writer with a NOP Close method. -type httpReadWriteNopCloser struct { +// httpServerConn turns a HTTP connection into a Conn. +type httpServerConn struct { io.Reader io.Writer + r *http.Request } -// Close does nothing and returns always nil -func (t *httpReadWriteNopCloser) Close() error { - return nil +func newHTTPServerConn(r *http.Request, w http.ResponseWriter) ServerCodec { + body := io.LimitReader(r.Body, maxRequestContentLength) + conn := &httpServerConn{Reader: body, Writer: w, r: r} + return NewJSONCodec(conn) } +// Close does nothing and always returns nil. +func (t *httpServerConn) Close() error { return nil } + +// RemoteAddr returns the peer address of the underlying connection. +func (t *httpServerConn) RemoteAddr() string { + return t.r.RemoteAddr +} + +// SetWriteDeadline does nothing and always returns nil. +func (t *httpServerConn) SetWriteDeadline(time.Time) error { return nil } + // NewHTTPServer creates a new HTTP RPC server around an API provider. // // Deprecated: Server implements http.Handler -func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv *Server) *http.Server { +func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv http.Handler) *http.Server { // Wrap the CORS-handler within a host-handler handler := newCorsHandler(srv, cors) handler = newVHostHandler(vhosts, handler) + handler = newGzipHandler(handler) // Make sure timeout values are meaningful if timeouts.ReadTimeout < time.Second { @@ -226,7 +241,7 @@ func NewHTTPServer(cors []string, vhosts []string, timeouts HTTPTimeouts, srv *S } // ServeHTTP serves JSON-RPC requests over HTTP. -func (srv *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Permit dumb empty requests for remote health-checks (AWS) if r.Method == http.MethodGet && r.ContentLength == 0 && r.URL.RawQuery == "" { return @@ -249,12 +264,10 @@ func (srv *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx = context.WithValue(ctx, "Origin", origin) } - body := io.LimitReader(r.Body, maxRequestContentLength) - codec := NewJSONCodec(&httpReadWriteNopCloser{body, w}) - defer codec.Close() - w.Header().Set("content-type", contentType) - srv.ServeSingleRequest(ctx, codec, OptionMethodInvocation) + codec := newHTTPServerConn(r, w) + defer codec.Close() + s.serveSingleRequest(ctx, codec) } // validateRequest returns a non-zero response code and error message if the @@ -284,7 +297,7 @@ func validateRequest(r *http.Request) (int, error) { return http.StatusUnsupportedMediaType, err } -func newCorsHandler(srv *Server, allowedOrigins []string) http.Handler { +func newCorsHandler(srv http.Handler, allowedOrigins []string) http.Handler { // disable CORS support if user has not specified a custom CORS configuration if len(allowedOrigins) == 0 { return srv diff --git a/rpc/inproc.go b/rpc/inproc.go index cbe65d10e76e..c4456cfc4bfc 100644 --- a/rpc/inproc.go +++ b/rpc/inproc.go @@ -24,10 +24,10 @@ import ( // DialInProc attaches an in-process connection to the given RPC server. func DialInProc(handler *Server) *Client { initctx := context.Background() - c, _ := newClient(initctx, func(context.Context) (net.Conn, error) { + c, _ := newClient(initctx, func(context.Context) (ServerCodec, error) { p1, p2 := net.Pipe() go handler.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) - return p2, nil + return NewJSONCodec(p2), nil }) return c } diff --git a/rpc/ipc.go b/rpc/ipc.go index 4cce1cf74b5d..ad8ce03098f7 100644 --- a/rpc/ipc.go +++ b/rpc/ipc.go @@ -25,17 +25,17 @@ import ( ) // ServeListener accepts connections on l, serving JSON-RPC on them. -func (srv *Server) ServeListener(l net.Listener) error { +func (s *Server) ServeListener(l net.Listener) error { for { conn, err := l.Accept() if netutil.IsTemporaryError(err) { - log.Warn("IPC accept error", "err", err) + log.Warn("RPC accept error", "err", err) continue } else if err != nil { return err } - log.Trace("IPC accepted connection") - go srv.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) + log.Trace("Accepted RPC connection", "conn", conn.RemoteAddr()) + go s.ServeCodec(NewJSONCodec(conn), OptionMethodInvocation|OptionSubscriptions) } } @@ -46,7 +46,11 @@ func (srv *Server) ServeListener(l net.Listener) error { // The context is used for the initial connection establishment. It does not // affect subsequent interactions with the client. func DialIPC(ctx context.Context, endpoint string) (*Client, error) { - return newClient(ctx, func(ctx context.Context) (net.Conn, error) { - return newIPCConnection(ctx, endpoint) + return newClient(ctx, func(ctx context.Context) (ServerCodec, error) { + conn, err := newIPCConnection(ctx, endpoint) + if err != nil { + return nil, err + } + return NewJSONCodec(conn), err }) } diff --git a/rpc/ipc_js.go b/rpc/ipc_js.go index eceef050e723..7e7554a76887 100644 --- a/rpc/ipc_js.go +++ b/rpc/ipc_js.go @@ -1,4 +1,4 @@ -// Copyright 2015 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/rpc/ipc_unix.go b/rpc/ipc_unix.go index 707b47fd77a9..f4690cc0abb9 100644 --- a/rpc/ipc_unix.go +++ b/rpc/ipc_unix.go @@ -28,20 +28,10 @@ import ( "github.com/ethereum/go-ethereum/log" ) -/* -#include - -int max_socket_path_size() { -struct sockaddr_un s; -return sizeof(s.sun_path); -} -*/ -import "C" - // ipcListen will create a Unix socket on the given endpoint. func ipcListen(endpoint string) (net.Listener, error) { - if len(endpoint) > int(C.max_socket_path_size()) { - log.Warn(fmt.Sprintf("The ipc endpoint is longer than %d characters. ", C.max_socket_path_size()), + if len(endpoint) > int(max_path_size) { + log.Warn(fmt.Sprintf("The ipc endpoint is longer than %d characters. ", max_path_size), "endpoint", endpoint) } @@ -60,5 +50,5 @@ func ipcListen(endpoint string) (net.Listener, error) { // newIPCConnection will connect to a Unix socket on the given endpoint. func newIPCConnection(ctx context.Context, endpoint string) (net.Conn, error) { - return dialContext(ctx, "unix", endpoint) + return new(net.Dialer).DialContext(ctx, "unix", endpoint) } diff --git a/rpc/json.go b/rpc/json.go index a523eeb8efb6..75c221038e61 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -18,71 +18,110 @@ package rpc import ( "bytes" + "context" "encoding/json" + "errors" "fmt" "io" "reflect" - "strconv" "strings" "sync" - - "github.com/ethereum/go-ethereum/log" + "time" ) const ( - jsonrpcVersion = "2.0" + vsn = "2.0" serviceMethodSeparator = "_" subscribeMethodSuffix = "_subscribe" unsubscribeMethodSuffix = "_unsubscribe" notificationMethodSuffix = "_subscription" + + defaultWriteTimeout = 10 * time.Second // used if context has no deadline ) -type jsonRequest struct { - Method string `json:"method"` - Version string `json:"jsonrpc"` - Id json.RawMessage `json:"id,omitempty"` - Payload json.RawMessage `json:"params,omitempty"` +var null = json.RawMessage("null") + +type subscriptionResult struct { + ID string `json:"subscription"` + Result json.RawMessage `json:"result,omitempty"` } -type jsonSuccessResponse struct { - Version string `json:"jsonrpc"` - Id interface{} `json:"id,omitempty"` - Result interface{} `json:"result"` +// A value of this type can a JSON-RPC request, notification, successful response or +// error response. Which one it is depends on the fields. +type jsonrpcMessage struct { + Version string `json:"jsonrpc,omitempty"` + ID json.RawMessage `json:"id,omitempty"` + Method string `json:"method,omitempty"` + Params json.RawMessage `json:"params,omitempty"` + Error *jsonError `json:"error,omitempty"` + Result json.RawMessage `json:"result,omitempty"` } -type jsonError struct { - Code int `json:"code"` - Message string `json:"message"` - Data interface{} `json:"data,omitempty"` +func (msg *jsonrpcMessage) isNotification() bool { + return msg.ID == nil && msg.Method != "" } -type jsonErrResponse struct { - Version string `json:"jsonrpc"` - Id interface{} `json:"id,omitempty"` - Error jsonError `json:"error"` +func (msg *jsonrpcMessage) isCall() bool { + return msg.hasValidID() && msg.Method != "" } -type jsonSubscription struct { - Subscription string `json:"subscription"` - Result interface{} `json:"result,omitempty"` +func (msg *jsonrpcMessage) isResponse() bool { + return msg.hasValidID() && msg.Method == "" && msg.Params == nil && (msg.Result != nil || msg.Error != nil) } -type jsonNotification struct { - Version string `json:"jsonrpc"` - Method string `json:"method"` - Params jsonSubscription `json:"params"` +func (msg *jsonrpcMessage) hasValidID() bool { + return len(msg.ID) > 0 && msg.ID[0] != '{' && msg.ID[0] != '[' } -// jsonCodec reads and writes JSON-RPC messages to the underlying connection. It -// also has support for parsing arguments and serializing (result) objects. -type jsonCodec struct { - closer sync.Once // close closed channel once - closed chan interface{} // closed on Close - decMu sync.Mutex // guards the decoder - decode func(v interface{}) error // decoder to allow multiple transports - encMu sync.Mutex // guards the encoder - encode func(v interface{}) error // encoder to allow multiple transports - rw io.ReadWriteCloser // connection +func (msg *jsonrpcMessage) isSubscribe() bool { + return strings.HasSuffix(msg.Method, subscribeMethodSuffix) +} + +func (msg *jsonrpcMessage) isUnsubscribe() bool { + return strings.HasSuffix(msg.Method, unsubscribeMethodSuffix) +} + +func (msg *jsonrpcMessage) namespace() string { + elem := strings.SplitN(msg.Method, serviceMethodSeparator, 2) + return elem[0] +} + +func (msg *jsonrpcMessage) String() string { + b, _ := json.Marshal(msg) + return string(b) +} + +func (msg *jsonrpcMessage) errorResponse(err error) *jsonrpcMessage { + resp := errorMessage(err) + resp.ID = msg.ID + return resp +} + +func (msg *jsonrpcMessage) response(result interface{}) *jsonrpcMessage { + enc, err := json.Marshal(result) + if err != nil { + // TODO: wrap with 'internal server error' + return msg.errorResponse(err) + } + return &jsonrpcMessage{Version: vsn, ID: msg.ID, Result: enc} +} + +func errorMessage(err error) *jsonrpcMessage { + msg := &jsonrpcMessage{Version: vsn, ID: null, Error: &jsonError{ + Code: defaultErrorCode, + Message: err.Error(), + }} + ec, ok := err.(Error) + if ok { + msg.Error.Code = ec.ErrorCode() + } + return msg +} + +type jsonError struct { + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data,omitempty"` } func (err *jsonError) Error() string { @@ -96,268 +135,201 @@ func (err *jsonError) ErrorCode() int { return err.Code } -// NewCodec creates a new RPC server codec with support for JSON-RPC 2.0 based -// on explicitly given encoding and decoding methods. -func NewCodec(rwc io.ReadWriteCloser, encode, decode func(v interface{}) error) ServerCodec { - return &jsonCodec{ - closed: make(chan interface{}), - encode: encode, - decode: decode, - rw: rwc, - } +// Conn is a subset of the methods of net.Conn which are sufficient for ServerCodec. +type Conn interface { + io.ReadWriteCloser + SetWriteDeadline(time.Time) error } -// NewJSONCodec creates a new RPC server codec with support for JSON-RPC 2.0. -func NewJSONCodec(rwc io.ReadWriteCloser) ServerCodec { - enc := json.NewEncoder(rwc) - dec := json.NewDecoder(rwc) - dec.UseNumber() +type deadlineCloser interface { + io.Closer + SetWriteDeadline(time.Time) error +} - return &jsonCodec{ - closed: make(chan interface{}), - encode: enc.Encode, - decode: dec.Decode, - rw: rwc, - } +// ConnRemoteAddr wraps the RemoteAddr operation, which returns a description +// of the peer address of a connection. If a Conn also implements ConnRemoteAddr, this +// description is used in log messages. +type ConnRemoteAddr interface { + RemoteAddr() string } -// isBatch returns true when the first non-whitespace characters is '[' -func isBatch(msg json.RawMessage) bool { - for _, c := range msg { - // skip insignificant whitespace (http://www.ietf.org/rfc/rfc4627.txt) - if c == 0x20 || c == 0x09 || c == 0x0a || c == 0x0d { - continue - } - return c == '[' - } - return false +// connWithRemoteAddr overrides the remote address of a connection. +type connWithRemoteAddr struct { + Conn + addr string } -// ReadRequestHeaders will read new requests without parsing the arguments. It will -// return a collection of requests, an indication if these requests are in batch -// form or an error when the incoming message could not be read/parsed. -func (c *jsonCodec) ReadRequestHeaders() ([]rpcRequest, bool, Error) { - c.decMu.Lock() - defer c.decMu.Unlock() +func (c connWithRemoteAddr) RemoteAddr() string { return c.addr } - var incomingMsg json.RawMessage - if err := c.decode(&incomingMsg); err != nil { - return nil, false, &invalidRequestError{err.Error()} - } - if isBatch(incomingMsg) { - return parseBatchRequest(incomingMsg) - } - return parseRequest(incomingMsg) +// jsonCodec reads and writes JSON-RPC messages to the underlying connection. It also has +// support for parsing arguments and serializing (result) objects. +type jsonCodec struct { + remoteAddr string + closer sync.Once // close closed channel once + closed chan interface{} // closed on Close + decode func(v interface{}) error // decoder to allow multiple transports + encMu sync.Mutex // guards the encoder + encode func(v interface{}) error // encoder to allow multiple transports + conn deadlineCloser } -// checkReqId returns an error when the given reqId isn't valid for RPC method calls. -// valid id's are strings, numbers or null -func checkReqId(reqId json.RawMessage) error { - if len(reqId) == 0 { - return fmt.Errorf("missing request id") - } - if _, err := strconv.ParseFloat(string(reqId), 64); err == nil { - return nil +func newCodec(conn deadlineCloser, encode, decode func(v interface{}) error) ServerCodec { + codec := &jsonCodec{ + closed: make(chan interface{}), + encode: encode, + decode: decode, + conn: conn, } - var str string - if err := json.Unmarshal(reqId, &str); err == nil { - return nil + if ra, ok := conn.(ConnRemoteAddr); ok { + codec.remoteAddr = ra.RemoteAddr() } - return fmt.Errorf("invalid request id") + return codec } -// parseRequest will parse a single request from the given RawMessage. It will return -// the parsed request, an indication if the request was a batch or an error when -// the request could not be parsed. -func parseRequest(incomingMsg json.RawMessage) ([]rpcRequest, bool, Error) { - var in jsonRequest - if err := json.Unmarshal(incomingMsg, &in); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } +// NewJSONCodec creates a codec that reads from the given connection. If conn implements +// ConnRemoteAddr, log messages will use it to include the remote address of the +// connection. +func NewJSONCodec(conn Conn) ServerCodec { + enc := json.NewEncoder(conn) + dec := json.NewDecoder(conn) + dec.UseNumber() + return newCodec(conn, enc.Encode, dec.Decode) +} - if err := checkReqId(in.Id); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } +func (c *jsonCodec) RemoteAddr() string { + return c.remoteAddr +} - // subscribe are special, they will always use `subscribeMethod` as first param in the payload - if strings.HasSuffix(in.Method, subscribeMethodSuffix) { - reqs := []rpcRequest{{id: &in.Id, isPubSub: true}} - if len(in.Payload) > 0 { - // first param must be subscription name - var subscribeMethod [1]string - if err := json.Unmarshal(in.Payload, &subscribeMethod); err != nil { - log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } - - reqs[0].service, reqs[0].method = strings.TrimSuffix(in.Method, subscribeMethodSuffix), subscribeMethod[0] - reqs[0].params = in.Payload - return reqs, false, nil - } - return nil, false, &invalidRequestError{"Unable to parse subscription request"} +func (c *jsonCodec) Read() (msg []*jsonrpcMessage, batch bool, err error) { + // Decode the next JSON object in the input stream. + // This verifies basic syntax, etc. + var rawmsg json.RawMessage + if err := c.decode(&rawmsg); err != nil { + return nil, false, err } + msg, batch = parseMessage(rawmsg) + return msg, batch, nil +} - if strings.HasSuffix(in.Method, unsubscribeMethodSuffix) { - return []rpcRequest{{id: &in.Id, isPubSub: true, - method: in.Method, params: in.Payload}}, false, nil - } +// Write sends a message to client. +func (c *jsonCodec) Write(ctx context.Context, v interface{}) error { + c.encMu.Lock() + defer c.encMu.Unlock() - elems := strings.Split(in.Method, serviceMethodSeparator) - if len(elems) != 2 { - return nil, false, &methodNotFoundError{in.Method, ""} + deadline, ok := ctx.Deadline() + if !ok { + deadline = time.Now().Add(defaultWriteTimeout) } + c.conn.SetWriteDeadline(deadline) + return c.encode(v) +} - // regular RPC call - if len(in.Payload) == 0 { - return []rpcRequest{{service: elems[0], method: elems[1], id: &in.Id}}, false, nil - } +// Close the underlying connection +func (c *jsonCodec) Close() { + c.closer.Do(func() { + close(c.closed) + c.conn.Close() + }) +} - return []rpcRequest{{service: elems[0], method: elems[1], id: &in.Id, params: in.Payload}}, false, nil +// Closed returns a channel which will be closed when Close is called +func (c *jsonCodec) Closed() <-chan interface{} { + return c.closed } -// parseBatchRequest will parse a batch request into a collection of requests from the given RawMessage, an indication -// if the request was a batch or an error when the request could not be read. -func parseBatchRequest(incomingMsg json.RawMessage) ([]rpcRequest, bool, Error) { - var in []jsonRequest - if err := json.Unmarshal(incomingMsg, &in); err != nil { - return nil, false, &invalidMessageError{err.Error()} +// parseMessage parses raw bytes as a (batch of) JSON-RPC message(s). There are no error +// checks in this function because the raw message has already been syntax-checked when it +// is called. Any non-JSON-RPC messages in the input return the zero value of +// jsonrpcMessage. +func parseMessage(raw json.RawMessage) ([]*jsonrpcMessage, bool) { + if !isBatch(raw) { + msgs := []*jsonrpcMessage{{}} + json.Unmarshal(raw, &msgs[0]) + return msgs, false } - - requests := make([]rpcRequest, len(in)) - for i, r := range in { - if err := checkReqId(r.Id); err != nil { - return nil, false, &invalidMessageError{err.Error()} - } - - id := &in[i].Id - - // subscribe are special, they will always use `subscriptionMethod` as first param in the payload - if strings.HasSuffix(r.Method, subscribeMethodSuffix) { - requests[i] = rpcRequest{id: id, isPubSub: true} - if len(r.Payload) > 0 { - // first param must be subscription name - var subscribeMethod [1]string - if err := json.Unmarshal(r.Payload, &subscribeMethod); err != nil { - log.Debug(fmt.Sprintf("Unable to parse subscription method: %v\n", err)) - return nil, false, &invalidRequestError{"Unable to parse subscription request"} - } - - requests[i].service, requests[i].method = strings.TrimSuffix(r.Method, subscribeMethodSuffix), subscribeMethod[0] - requests[i].params = r.Payload - continue - } - - return nil, true, &invalidRequestError{"Unable to parse (un)subscribe request arguments"} - } - - if strings.HasSuffix(r.Method, unsubscribeMethodSuffix) { - requests[i] = rpcRequest{id: id, isPubSub: true, method: r.Method, params: r.Payload} - continue - } - - if len(r.Payload) == 0 { - requests[i] = rpcRequest{id: id, params: nil} - } else { - requests[i] = rpcRequest{id: id, params: r.Payload} - } - if elem := strings.Split(r.Method, serviceMethodSeparator); len(elem) == 2 { - requests[i].service, requests[i].method = elem[0], elem[1] - } else { - requests[i].err = &methodNotFoundError{r.Method, ""} - } + dec := json.NewDecoder(bytes.NewReader(raw)) + dec.Token() // skip '[' + var msgs []*jsonrpcMessage + for dec.More() { + msgs = append(msgs, new(jsonrpcMessage)) + dec.Decode(&msgs[len(msgs)-1]) } - - return requests, true, nil + return msgs, true } -// ParseRequestArguments tries to parse the given params (json.RawMessage) with the given -// types. It returns the parsed values or an error when the parsing failed. -func (c *jsonCodec) ParseRequestArguments(argTypes []reflect.Type, params interface{}) ([]reflect.Value, Error) { - if args, ok := params.(json.RawMessage); !ok { - return nil, &invalidParamsError{"Invalid params supplied"} - } else { - return parsePositionalArguments(args, argTypes) +// isBatch returns true when the first non-whitespace characters is '[' +func isBatch(raw json.RawMessage) bool { + for _, c := range raw { + // skip insignificant whitespace (http://www.ietf.org/rfc/rfc4627.txt) + if c == 0x20 || c == 0x09 || c == 0x0a || c == 0x0d { + continue + } + return c == '[' } + return false } // parsePositionalArguments tries to parse the given args to an array of values with the // given types. It returns the parsed values or an error when the args could not be // parsed. Missing optional arguments are returned as reflect.Zero values. -func parsePositionalArguments(rawArgs json.RawMessage, types []reflect.Type) ([]reflect.Value, Error) { - // Read beginning of the args array. +func parsePositionalArguments(rawArgs json.RawMessage, types []reflect.Type) ([]reflect.Value, error) { dec := json.NewDecoder(bytes.NewReader(rawArgs)) - if tok, _ := dec.Token(); tok != json.Delim('[') { - return nil, &invalidParamsError{"non-array args"} + var args []reflect.Value + tok, err := dec.Token() + switch { + case err == io.EOF || tok == nil && err == nil: + // "params" is optional and may be empty. Also allow "params":null even though it's + // not in the spec because our own client used to send it. + case err != nil: + return nil, err + case tok == json.Delim('['): + // Read argument array. + if args, err = parseArgumentArray(dec, types); err != nil { + return nil, err + } + default: + return nil, errors.New("non-array args") } - // Read args. + // Set any missing args to nil. + for i := len(args); i < len(types); i++ { + if types[i].Kind() != reflect.Ptr { + return nil, fmt.Errorf("missing value for required argument %d", i) + } + args = append(args, reflect.Zero(types[i])) + } + return args, nil +} + +func parseArgumentArray(dec *json.Decoder, types []reflect.Type) ([]reflect.Value, error) { args := make([]reflect.Value, 0, len(types)) for i := 0; dec.More(); i++ { if i >= len(types) { - return nil, &invalidParamsError{fmt.Sprintf("too many arguments, want at most %d", len(types))} + return args, fmt.Errorf("too many arguments, want at most %d", len(types)) } argval := reflect.New(types[i]) if err := dec.Decode(argval.Interface()); err != nil { - return nil, &invalidParamsError{fmt.Sprintf("invalid argument %d: %v", i, err)} + return args, fmt.Errorf("invalid argument %d: %v", i, err) } if argval.IsNil() && types[i].Kind() != reflect.Ptr { - return nil, &invalidParamsError{fmt.Sprintf("missing value for required argument %d", i)} + return args, fmt.Errorf("missing value for required argument %d", i) } args = append(args, argval.Elem()) } // Read end of args array. - if _, err := dec.Token(); err != nil { - return nil, &invalidParamsError{err.Error()} - } - // Set any missing args to nil. - for i := len(args); i < len(types); i++ { - if types[i].Kind() != reflect.Ptr { - return nil, &invalidParamsError{fmt.Sprintf("missing value for required argument %d", i)} - } - args = append(args, reflect.Zero(types[i])) - } - return args, nil -} - -// CreateResponse will create a JSON-RPC success response with the given id and reply as result. -func (c *jsonCodec) CreateResponse(id interface{}, reply interface{}) interface{} { - return &jsonSuccessResponse{Version: jsonrpcVersion, Id: id, Result: reply} -} - -// CreateErrorResponse will create a JSON-RPC error response with the given id and error. -func (c *jsonCodec) CreateErrorResponse(id interface{}, err Error) interface{} { - return &jsonErrResponse{Version: jsonrpcVersion, Id: id, Error: jsonError{Code: err.ErrorCode(), Message: err.Error()}} -} - -// CreateErrorResponseWithInfo will create a JSON-RPC error response with the given id and error. -// info is optional and contains additional information about the error. When an empty string is passed it is ignored. -func (c *jsonCodec) CreateErrorResponseWithInfo(id interface{}, err Error, info interface{}) interface{} { - return &jsonErrResponse{Version: jsonrpcVersion, Id: id, - Error: jsonError{Code: err.ErrorCode(), Message: err.Error(), Data: info}} -} - -// CreateNotification will create a JSON-RPC notification with the given subscription id and event as params. -func (c *jsonCodec) CreateNotification(subid, namespace string, event interface{}) interface{} { - return &jsonNotification{Version: jsonrpcVersion, Method: namespace + notificationMethodSuffix, - Params: jsonSubscription{Subscription: subid, Result: event}} -} - -// Write message to client -func (c *jsonCodec) Write(res interface{}) error { - c.encMu.Lock() - defer c.encMu.Unlock() - - return c.encode(res) + _, err := dec.Token() + return args, err } -// Close the underlying connection -func (c *jsonCodec) Close() { - c.closer.Do(func() { - close(c.closed) - c.rw.Close() - }) -} - -// Closed returns a channel which will be closed when Close is called -func (c *jsonCodec) Closed() <-chan interface{} { - return c.closed +// parseSubscriptionName extracts the subscription name from an encoded argument array. +func parseSubscriptionName(rawArgs json.RawMessage) (string, error) { + dec := json.NewDecoder(bytes.NewReader(rawArgs)) + if tok, _ := dec.Token(); tok != json.Delim('[') { + return "", errors.New("non-array args") + } + v, _ := dec.Token() + method, ok := v.(string) + if !ok { + return "", errors.New("expected subscription name as first argument") + } + return method, nil } diff --git a/rpc/json_test.go b/rpc/json_test.go deleted file mode 100644 index 5048d2f7a067..000000000000 --- a/rpc/json_test.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rpc - -import ( - "bufio" - "bytes" - "encoding/json" - "reflect" - "strconv" - "testing" -) - -type RWC struct { - *bufio.ReadWriter -} - -func (rwc *RWC) Close() error { - return nil -} - -func TestJSONRequestParsing(t *testing.T) { - server := NewServer() - service := new(Service) - - if err := server.RegisterName("calc", service); err != nil { - t.Fatalf("%v", err) - } - - req := bytes.NewBufferString(`{"id": 1234, "jsonrpc": "2.0", "method": "calc_add", "params": [11, 22]}`) - var str string - reply := bytes.NewBufferString(str) - rw := &RWC{bufio.NewReadWriter(bufio.NewReader(req), bufio.NewWriter(reply))} - - codec := NewJSONCodec(rw) - - requests, batch, err := codec.ReadRequestHeaders() - if err != nil { - t.Fatalf("%v", err) - } - - if batch { - t.Fatalf("Request isn't a batch") - } - - if len(requests) != 1 { - t.Fatalf("Expected 1 request but got %d requests - %v", len(requests), requests) - } - - if requests[0].service != "calc" { - t.Fatalf("Expected service 'calc' but got '%s'", requests[0].service) - } - - if requests[0].method != "add" { - t.Fatalf("Expected method 'Add' but got '%s'", requests[0].method) - } - - if rawId, ok := requests[0].id.(*json.RawMessage); ok { - id, e := strconv.ParseInt(string(*rawId), 0, 64) - if e != nil { - t.Fatalf("%v", e) - } - if id != 1234 { - t.Fatalf("Expected id 1234 but got %d", id) - } - } else { - t.Fatalf("invalid request, expected *json.RawMesage got %T", requests[0].id) - } - - var arg int - args := []reflect.Type{reflect.TypeOf(arg), reflect.TypeOf(arg)} - - v, err := codec.ParseRequestArguments(args, requests[0].params) - if err != nil { - t.Fatalf("%v", err) - } - - if len(v) != 2 { - t.Fatalf("Expected 2 argument values, got %d", len(v)) - } - - if v[0].Int() != 11 || v[1].Int() != 22 { - t.Fatalf("expected %d == 11 && %d == 22", v[0].Int(), v[1].Int()) - } -} - -func TestJSONRequestParamsParsing(t *testing.T) { - - var ( - stringT = reflect.TypeOf("") - intT = reflect.TypeOf(0) - intPtrT = reflect.TypeOf(new(int)) - - stringV = reflect.ValueOf("abc") - i = 1 - intV = reflect.ValueOf(i) - intPtrV = reflect.ValueOf(&i) - ) - - var validTests = []struct { - input string - argTypes []reflect.Type - expected []reflect.Value - }{ - {`[]`, []reflect.Type{}, []reflect.Value{}}, - {`[]`, []reflect.Type{intPtrT}, []reflect.Value{intPtrV}}, - {`[1]`, []reflect.Type{intT}, []reflect.Value{intV}}, - {`[1,"abc"]`, []reflect.Type{intT, stringT}, []reflect.Value{intV, stringV}}, - {`[null]`, []reflect.Type{intPtrT}, []reflect.Value{intPtrV}}, - {`[null,"abc"]`, []reflect.Type{intPtrT, stringT, intPtrT}, []reflect.Value{intPtrV, stringV, intPtrV}}, - {`[null,"abc",null]`, []reflect.Type{intPtrT, stringT, intPtrT}, []reflect.Value{intPtrV, stringV, intPtrV}}, - } - - codec := jsonCodec{} - - for _, test := range validTests { - params := (json.RawMessage)([]byte(test.input)) - args, err := codec.ParseRequestArguments(test.argTypes, params) - - if err != nil { - t.Fatal(err) - } - - var match []interface{} - json.Unmarshal([]byte(test.input), &match) - - if len(args) != len(test.argTypes) { - t.Fatalf("expected %d parsed args, got %d", len(test.argTypes), len(args)) - } - - for i, arg := range args { - expected := test.expected[i] - - if arg.Kind() != expected.Kind() { - t.Errorf("expected type for param %d in %s", i, test.input) - } - - if arg.Kind() == reflect.Int && arg.Int() != expected.Int() { - t.Errorf("expected int(%d), got int(%d) in %s", expected.Int(), arg.Int(), test.input) - } - - if arg.Kind() == reflect.String && arg.String() != expected.String() { - t.Errorf("expected string(%s), got string(%s) in %s", expected.String(), arg.String(), test.input) - } - } - } - - var invalidTests = []struct { - input string - argTypes []reflect.Type - }{ - {`[]`, []reflect.Type{intT}}, - {`[null]`, []reflect.Type{intT}}, - {`[1]`, []reflect.Type{stringT}}, - {`[1,2]`, []reflect.Type{stringT}}, - {`["abc", null]`, []reflect.Type{stringT, intT}}, - } - - for i, test := range invalidTests { - if _, err := codec.ParseRequestArguments(test.argTypes, test.input); err == nil { - t.Errorf("expected test %d - %s to fail", i, test.input) - } - } -} diff --git a/rpc/server.go b/rpc/server.go index 214e1d3ed9b9..5a92847f20e4 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -18,11 +18,7 @@ package rpc import ( "context" - "fmt" - "reflect" - "runtime" - "strings" - "sync" + "io" "sync/atomic" mapset "github.com/deckarep/golang-set" @@ -31,7 +27,9 @@ import ( const MetadataApi = "rpc" -// CodecOption specifies which type of messages this codec supports +// CodecOption specifies which type of messages a codec supports. +// +// Deprecated: this option is no longer honored by Server. type CodecOption int const ( @@ -42,194 +40,87 @@ const ( OptionSubscriptions = 1 << iota // support pub sub ) -// NewServer will create a new server instance with no registered handlers. -func NewServer() *Server { - server := &Server{ - services: make(serviceRegistry), - codecs: mapset.NewSet(), - run: 1, - } +// Server is an RPC server. +type Server struct { + services serviceRegistry + idgen func() ID + run int32 + codecs mapset.Set +} - // register a default service which will provide meta information about the RPC service such as the services and - // methods it offers. +// NewServer creates a new server instance with no registered handlers. +func NewServer() *Server { + server := &Server{idgen: randomIDGenerator(), codecs: mapset.NewSet(), run: 1} + // Register the default service providing meta information about the RPC service such + // as the services and methods it offers. rpcService := &RPCService{server} server.RegisterName(MetadataApi, rpcService) - return server } -// RPCService gives meta information about the server. -// e.g. gives information about the loaded modules. -type RPCService struct { - server *Server -} - -// Modules returns the list of RPC services with their version number -func (s *RPCService) Modules() map[string]string { - modules := make(map[string]string) - for name := range s.server.services { - modules[name] = "1.0" - } - return modules +// RegisterName creates a service for the given receiver type under the given name. When no +// methods on the given receiver match the criteria to be either a RPC method or a +// subscription an error is returned. Otherwise a new service is created and added to the +// service collection this server provides to clients. +func (s *Server) RegisterName(name string, receiver interface{}) error { + return s.services.registerName(name, receiver) } -// RegisterName will create a service for the given rcvr type under the given name. When no methods on the given rcvr -// match the criteria to be either a RPC method or a subscription an error is returned. Otherwise a new service is -// created and added to the service collection this server instance serves. -func (s *Server) RegisterName(name string, rcvr interface{}) error { - if s.services == nil { - s.services = make(serviceRegistry) - } - - svc := new(service) - svc.typ = reflect.TypeOf(rcvr) - rcvrVal := reflect.ValueOf(rcvr) - - if name == "" { - return fmt.Errorf("no service name for type %s", svc.typ.String()) - } - if !isExported(reflect.Indirect(rcvrVal).Type().Name()) { - return fmt.Errorf("%s is not exported", reflect.Indirect(rcvrVal).Type().Name()) - } - - methods, subscriptions := suitableCallbacks(rcvrVal, svc.typ) +// ServeCodec reads incoming requests from codec, calls the appropriate callback and writes +// the response back using the given codec. It will block until the codec is closed or the +// server is stopped. In either case the codec is closed. +// +// Note that codec options are no longer supported. +func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { + defer codec.Close() - if len(methods) == 0 && len(subscriptions) == 0 { - return fmt.Errorf("Service %T doesn't have any suitable methods/subscriptions to expose", rcvr) + // Don't serve if server is stopped. + if atomic.LoadInt32(&s.run) == 0 { + return } - // already a previous service register under given name, merge methods/subscriptions - if regsvc, present := s.services[name]; present { - for _, m := range methods { - regsvc.callbacks[formatName(m.method.Name)] = m - } - for _, s := range subscriptions { - regsvc.subscriptions[formatName(s.method.Name)] = s - } - return nil - } - - svc.name = name - svc.callbacks, svc.subscriptions = methods, subscriptions + // Add the codec to the set so it can be closed by Stop. + s.codecs.Add(codec) + defer s.codecs.Remove(codec) - s.services[svc.name] = svc - return nil + c := initClient(codec, s.idgen, &s.services) + <-codec.Closed() + c.Close() } -// serveRequest will reads requests from the codec, calls the RPC callback and -// writes the response to the given codec. -// -// If singleShot is true it will process a single request, otherwise it will handle -// requests until the codec returns an error when reading a request (in most cases -// an EOF). It executes requests in parallel when singleShot is false. -func (s *Server) serveRequest(ctx context.Context, codec ServerCodec, singleShot bool, options CodecOption) error { - var pend sync.WaitGroup - - defer func() { - if err := recover(); err != nil { - const size = 64 << 10 - buf := make([]byte, size) - buf = buf[:runtime.Stack(buf, false)] - log.Error(string(buf)) - } - s.codecsMu.Lock() - s.codecs.Remove(codec) - s.codecsMu.Unlock() - }() - - // ctx, cancel := context.WithCancel(context.Background()) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - // if the codec supports notification include a notifier that callbacks can use - // to send notification to clients. It is tied to the codec/connection. If the - // connection is closed the notifier will stop and cancels all active subscriptions. - if options&OptionSubscriptions == OptionSubscriptions { - ctx = context.WithValue(ctx, notifierKey{}, newNotifier(codec)) - } - s.codecsMu.Lock() - if atomic.LoadInt32(&s.run) != 1 { // server stopped - s.codecsMu.Unlock() - return &shutdownError{} +// serveSingleRequest reads and processes a single RPC request from the given codec. This +// is used to serve HTTP connections. Subscriptions and reverse calls are not allowed in +// this mode. +func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) { + // Don't serve if server is stopped. + if atomic.LoadInt32(&s.run) == 0 { + return } - s.codecs.Add(codec) - s.codecsMu.Unlock() - // test if the server is ordered to stop - for atomic.LoadInt32(&s.run) == 1 { - reqs, batch, err := s.readRequest(codec) - if err != nil { - // If a parsing error occurred, send an error - if err.Error() != "EOF" { - log.Debug(fmt.Sprintf("read error %v\n", err)) - codec.Write(codec.CreateErrorResponse(nil, err)) - } - // Error or end of stream, wait for requests and tear down - pend.Wait() - return nil - } + h := newHandler(ctx, codec, s.idgen, &s.services) + h.allowSubscribe = false + defer h.close(io.EOF, nil) - // check if server is ordered to shutdown and return an error - // telling the client that his request failed. - if atomic.LoadInt32(&s.run) != 1 { - err = &shutdownError{} - if batch { - resps := make([]interface{}, len(reqs)) - for i, r := range reqs { - resps[i] = codec.CreateErrorResponse(&r.id, err) - } - codec.Write(resps) - } else { - codec.Write(codec.CreateErrorResponse(&reqs[0].id, err)) - } - return nil - } - // If a single shot request is executing, run and return immediately - if singleShot { - if batch { - s.execBatch(ctx, codec, reqs) - } else { - s.exec(ctx, codec, reqs[0]) - } - return nil + reqs, batch, err := codec.Read() + if err != nil { + if err != io.EOF { + codec.Write(ctx, errorMessage(&invalidMessageError{"parse error"})) } - // For multi-shot connections, start a goroutine to serve and loop back - pend.Add(1) - - go func(reqs []*serverRequest, batch bool) { - defer pend.Done() - if batch { - s.execBatch(ctx, codec, reqs) - } else { - s.exec(ctx, codec, reqs[0]) - } - }(reqs, batch) + return + } + if batch { + h.handleBatch(reqs) + } else { + h.handleMsg(reqs[0]) } - return nil -} - -// ServeCodec reads incoming requests from codec, calls the appropriate callback and writes the -// response back using the given codec. It will block until the codec is closed or the server is -// stopped. In either case the codec is closed. -func (s *Server) ServeCodec(codec ServerCodec, options CodecOption) { - defer codec.Close() - s.serveRequest(context.Background(), codec, false, options) -} - -// ServeSingleRequest reads and processes a single RPC request from the given codec. It will not -// close the codec unless a non-recoverable error has occurred. Note, this method will return after -// a single request has been processed! -func (s *Server) ServeSingleRequest(ctx context.Context, codec ServerCodec, options CodecOption) { - s.serveRequest(ctx, codec, true, options) } -// Stop will stop reading new requests, wait for stopPendingRequestTimeout to allow pending requests to finish, -// close all codecs which will cancel pending requests/subscriptions. +// Stop stops reading new requests, waits for stopPendingRequestTimeout to allow pending +// requests to finish, then closes all codecs which will cancel pending requests and +// subscriptions. func (s *Server) Stop() { if atomic.CompareAndSwapInt32(&s.run, 1, 0) { - log.Debug("RPC Server shutdown initiatied") - s.codecsMu.Lock() - defer s.codecsMu.Unlock() + log.Debug("RPC server shutting down") s.codecs.Each(func(c interface{}) bool { c.(ServerCodec).Close() return true @@ -237,206 +128,20 @@ func (s *Server) Stop() { } } -// createSubscription will call the subscription callback and returns the subscription id or error. -func (s *Server) createSubscription(ctx context.Context, c ServerCodec, req *serverRequest) (ID, error) { - // subscription have as first argument the context following optional arguments - args := []reflect.Value{req.callb.rcvr, reflect.ValueOf(ctx)} - args = append(args, req.args...) - reply := req.callb.method.Func.Call(args) - - if !reply[1].IsNil() { // subscription creation failed - return "", reply[1].Interface().(error) - } - - return reply[0].Interface().(*Subscription).ID, nil -} - -// handle executes a request and returns the response from the callback. -func (s *Server) handle(ctx context.Context, codec ServerCodec, req *serverRequest) (interface{}, func()) { - if req.err != nil { - return codec.CreateErrorResponse(&req.id, req.err), nil - } - - if req.isUnsubscribe { // cancel subscription, first param must be the subscription id - if len(req.args) >= 1 && req.args[0].Kind() == reflect.String { - notifier, supported := NotifierFromContext(ctx) - if !supported { // interface doesn't support subscriptions (e.g. http) - return codec.CreateErrorResponse(&req.id, &callbackError{ErrNotificationsUnsupported.Error()}), nil - } - - subid := ID(req.args[0].String()) - if err := notifier.unsubscribe(subid); err != nil { - return codec.CreateErrorResponse(&req.id, &callbackError{err.Error()}), nil - } - - return codec.CreateResponse(req.id, true), nil - } - return codec.CreateErrorResponse(&req.id, &invalidParamsError{"Expected subscription id as first argument"}), nil - } - - if req.callb.isSubscribe { - subid, err := s.createSubscription(ctx, codec, req) - if err != nil { - return codec.CreateErrorResponse(&req.id, &callbackError{err.Error()}), nil - } - - // active the subscription after the sub id was successfully sent to the client - activateSub := func() { - notifier, _ := NotifierFromContext(ctx) - notifier.activate(subid, req.svcname) - } - - return codec.CreateResponse(req.id, subid), activateSub - } - - // regular RPC call, prepare arguments - if len(req.args) != len(req.callb.argTypes) { - rpcErr := &invalidParamsError{fmt.Sprintf("%s%s%s expects %d parameters, got %d", - req.svcname, serviceMethodSeparator, req.callb.method.Name, - len(req.callb.argTypes), len(req.args))} - return codec.CreateErrorResponse(&req.id, rpcErr), nil - } - - arguments := []reflect.Value{req.callb.rcvr} - if req.callb.hasCtx { - arguments = append(arguments, reflect.ValueOf(ctx)) - } - if len(req.args) > 0 { - arguments = append(arguments, req.args...) - } - - // execute RPC method and return result - reply := req.callb.method.Func.Call(arguments) - if len(reply) == 0 { - return codec.CreateResponse(req.id, nil), nil - } - if req.callb.errPos >= 0 { // test if method returned an error - if !reply[req.callb.errPos].IsNil() { - e := reply[req.callb.errPos].Interface().(error) - res := codec.CreateErrorResponse(&req.id, &callbackError{e.Error()}) - return res, nil - } - } - return codec.CreateResponse(req.id, reply[0].Interface()), nil -} - -// exec executes the given request and writes the result back using the codec. -func (s *Server) exec(ctx context.Context, codec ServerCodec, req *serverRequest) { - var response interface{} - var callback func() - if req.err != nil { - response = codec.CreateErrorResponse(&req.id, req.err) - } else { - response, callback = s.handle(ctx, codec, req) - } - - if err := codec.Write(response); err != nil { - log.Error(fmt.Sprintf("%v\n", err)) - codec.Close() - } - - // when request was a subscribe request this allows these subscriptions to be actived - if callback != nil { - callback() - } -} - -// execBatch executes the given requests and writes the result back using the codec. -// It will only write the response back when the last request is processed. -func (s *Server) execBatch(ctx context.Context, codec ServerCodec, requests []*serverRequest) { - responses := make([]interface{}, len(requests)) - var callbacks []func() - for i, req := range requests { - if req.err != nil { - responses[i] = codec.CreateErrorResponse(&req.id, req.err) - } else { - var callback func() - if responses[i], callback = s.handle(ctx, codec, req); callback != nil { - callbacks = append(callbacks, callback) - } - } - } - - if err := codec.Write(responses); err != nil { - log.Error(fmt.Sprintf("%v\n", err)) - codec.Close() - } - - // when request holds one of more subscribe requests this allows these subscriptions to be activated - for _, c := range callbacks { - c() - } +// RPCService gives meta information about the server. +// e.g. gives information about the loaded modules. +type RPCService struct { + server *Server } -// readRequest requests the next (batch) request from the codec. It will return the collection -// of requests, an indication if the request was a batch, the invalid request identifier and an -// error when the request could not be read/parsed. -func (s *Server) readRequest(codec ServerCodec) ([]*serverRequest, bool, Error) { - reqs, batch, err := codec.ReadRequestHeaders() - if err != nil { - return nil, batch, err - } - - requests := make([]*serverRequest, len(reqs)) - - // verify requests - for i, r := range reqs { - var ok bool - var svc *service - - if r.err != nil { - requests[i] = &serverRequest{id: r.id, err: r.err} - continue - } - - if r.isPubSub && strings.HasSuffix(r.method, unsubscribeMethodSuffix) { - requests[i] = &serverRequest{id: r.id, isUnsubscribe: true} - argTypes := []reflect.Type{reflect.TypeOf("")} // expect subscription id as first arg - if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil { - requests[i].args = args - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - continue - } - - if svc, ok = s.services[r.service]; !ok { // rpc method isn't available - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} - continue - } - - if r.isPubSub { // eth_subscribe, r.method contains the subscription method name - if callb, ok := svc.subscriptions[r.method]; ok { - requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb} - if r.params != nil && len(callb.argTypes) > 0 { - argTypes := []reflect.Type{reflect.TypeOf("")} - argTypes = append(argTypes, callb.argTypes...) - if args, err := codec.ParseRequestArguments(argTypes, r.params); err == nil { - requests[i].args = args[1:] // first one is service.method name which isn't an actual argument - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - } - } else { - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} - } - continue - } - - if callb, ok := svc.callbacks[r.method]; ok { // lookup RPC method - requests[i] = &serverRequest{id: r.id, svcname: svc.name, callb: callb} - if r.params != nil && len(callb.argTypes) > 0 { - if args, err := codec.ParseRequestArguments(callb.argTypes, r.params); err == nil { - requests[i].args = args - } else { - requests[i].err = &invalidParamsError{err.Error()} - } - } - continue - } +// Modules returns the list of RPC services with their version number +func (s *RPCService) Modules() map[string]string { + s.server.services.mu.Lock() + defer s.server.services.mu.Unlock() - requests[i] = &serverRequest{id: r.id, err: &methodNotFoundError{r.service, r.method}} + modules := make(map[string]string) + for name := range s.server.services.services { + modules[name] = "1.0" } - - return requests, batch, nil + return modules } diff --git a/rpc/server_test.go b/rpc/server_test.go index 90d62f26d8f6..39099546bbe0 100644 --- a/rpc/server_test.go +++ b/rpc/server_test.go @@ -17,146 +17,136 @@ package rpc import ( - "context" - "encoding/json" + "bufio" + "bytes" + "io" + "io/ioutil" "net" - "reflect" + "path/filepath" + "strings" "testing" "time" ) -type Service struct{} - -type Args struct { - S string -} - -func (s *Service) NoArgsRets() { -} - -type Result struct { - String string - Int int - Args *Args -} - -func (s *Service) Echo(str string, i int, args *Args) Result { - return Result{str, i, args} -} - -func (s *Service) EchoWithCtx(ctx context.Context, str string, i int, args *Args) Result { - return Result{str, i, args} -} - -func (s *Service) Sleep(ctx context.Context, duration time.Duration) { - select { - case <-time.After(duration): - case <-ctx.Done(): - } -} - -func (s *Service) Rets() (string, error) { - return "", nil -} - -func (s *Service) InvalidRets1() (error, string) { - return nil, "" -} - -func (s *Service) InvalidRets2() (string, string) { - return "", "" -} - -func (s *Service) InvalidRets3() (string, string, error) { - return "", "", nil -} - -func (s *Service) Subscription(ctx context.Context) (*Subscription, error) { - return nil, nil -} - func TestServerRegisterName(t *testing.T) { server := NewServer() - service := new(Service) + service := new(testService) - if err := server.RegisterName("calc", service); err != nil { + if err := server.RegisterName("test", service); err != nil { t.Fatalf("%v", err) } - if len(server.services) != 2 { - t.Fatalf("Expected 2 service entries, got %d", len(server.services)) + if len(server.services.services) != 2 { + t.Fatalf("Expected 2 service entries, got %d", len(server.services.services)) } - svc, ok := server.services["calc"] + svc, ok := server.services.services["test"] if !ok { t.Fatalf("Expected service calc to be registered") } - if len(svc.callbacks) != 5 { - t.Errorf("Expected 5 callbacks for service 'calc', got %d", len(svc.callbacks)) - } - - if len(svc.subscriptions) != 1 { - t.Errorf("Expected 1 subscription for service 'calc', got %d", len(svc.subscriptions)) + wantCallbacks := 7 + if len(svc.callbacks) != wantCallbacks { + t.Errorf("Expected %d callbacks for service 'service', got %d", wantCallbacks, len(svc.callbacks)) } } -func testServerMethodExecution(t *testing.T, method string) { - server := NewServer() - service := new(Service) - - if err := server.RegisterName("test", service); err != nil { - t.Fatalf("%v", err) +func TestServer(t *testing.T) { + files, err := ioutil.ReadDir("testdata") + if err != nil { + t.Fatal("where'd my testdata go?") } + for _, f := range files { + if f.IsDir() || strings.HasPrefix(f.Name(), ".") { + continue + } + path := filepath.Join("testdata", f.Name()) + name := strings.TrimSuffix(f.Name(), filepath.Ext(f.Name())) + t.Run(name, func(t *testing.T) { + runTestScript(t, path) + }) + } +} - stringArg := "string arg" - intArg := 1122 - argsArg := &Args{"abcde"} - params := []interface{}{stringArg, intArg, argsArg} - - request := map[string]interface{}{ - "id": 12345, - "method": "test_" + method, - "version": "2.0", - "params": params, +func runTestScript(t *testing.T, file string) { + server := newTestServer() + content, err := ioutil.ReadFile(file) + if err != nil { + t.Fatal(err) } clientConn, serverConn := net.Pipe() defer clientConn.Close() - - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation) - - out := json.NewEncoder(clientConn) - in := json.NewDecoder(clientConn) - - if err := out.Encode(request); err != nil { - t.Fatal(err) + go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) + readbuf := bufio.NewReader(clientConn) + for _, line := range strings.Split(string(content), "\n") { + line = strings.TrimSpace(line) + switch { + case len(line) == 0 || strings.HasPrefix(line, "//"): + // skip comments, blank lines + continue + case strings.HasPrefix(line, "--> "): + t.Log(line) + // write to connection + clientConn.SetWriteDeadline(time.Now().Add(5 * time.Second)) + if _, err := io.WriteString(clientConn, line[4:]+"\n"); err != nil { + t.Fatalf("write error: %v", err) + } + case strings.HasPrefix(line, "<-- "): + t.Log(line) + want := line[4:] + // read line from connection and compare text + clientConn.SetReadDeadline(time.Now().Add(5 * time.Second)) + sent, err := readbuf.ReadString('\n') + if err != nil { + t.Fatalf("read error: %v", err) + } + sent = strings.TrimRight(sent, "\r\n") + if sent != want { + t.Errorf("wrong line from server\ngot: %s\nwant: %s", sent, want) + } + default: + panic("invalid line in test script: " + line) + } } +} - response := jsonSuccessResponse{Result: &Result{}} - if err := in.Decode(&response); err != nil { - t.Fatal(err) - } +// This test checks that responses are delivered for very short-lived connections that +// only carry a single request. +func TestServerShortLivedConn(t *testing.T) { + server := newTestServer() + defer server.Stop() - if result, ok := response.Result.(*Result); ok { - if result.String != stringArg { - t.Errorf("expected %s, got : %s\n", stringArg, result.String) + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal("can't listen:", err) + } + defer listener.Close() + go server.ServeListener(listener) + + var ( + request = `{"jsonrpc":"2.0","id":1,"method":"rpc_modules"}` + "\n" + wantResp = `{"jsonrpc":"2.0","id":1,"result":{"nftest":"1.0","rpc":"1.0","test":"1.0"}}` + "\n" + deadline = time.Now().Add(10 * time.Second) + ) + for i := 0; i < 20; i++ { + conn, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + t.Fatal("can't dial:", err) } - if result.Int != intArg { - t.Errorf("expected %d, got %d\n", intArg, result.Int) + defer conn.Close() + conn.SetDeadline(deadline) + // Write the request, then half-close the connection so the server stops reading. + conn.Write([]byte(request)) + conn.(*net.TCPConn).CloseWrite() + // Now try to get the response. + buf := make([]byte, 2000) + n, err := conn.Read(buf) + if err != nil { + t.Fatal("read error:", err) } - if !reflect.DeepEqual(result.Args, argsArg) { - t.Errorf("expected %v, got %v\n", argsArg, result) + if !bytes.Equal(buf[:n], []byte(wantResp)) { + t.Fatalf("wrong response: %s", buf[:n]) } - } else { - t.Fatalf("invalid response: expected *Result - got: %T", response.Result) } } - -func TestServerMethodExecution(t *testing.T) { - testServerMethodExecution(t, "echo") -} - -func TestServerMethodWithCtx(t *testing.T) { - testServerMethodExecution(t, "echoWithCtx") -} diff --git a/rpc/service.go b/rpc/service.go new file mode 100644 index 000000000000..81e65f810b71 --- /dev/null +++ b/rpc/service.go @@ -0,0 +1,285 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "errors" + "fmt" + "reflect" + "runtime" + "strings" + "sync" + "unicode" + "unicode/utf8" + + "github.com/ethereum/go-ethereum/log" +) + +var ( + contextType = reflect.TypeOf((*context.Context)(nil)).Elem() + errorType = reflect.TypeOf((*error)(nil)).Elem() + subscriptionType = reflect.TypeOf(Subscription{}) + stringType = reflect.TypeOf("") +) + +type serviceRegistry struct { + mu sync.Mutex + services map[string]service +} + +// service represents a registered object. +type service struct { + name string // name for service + callbacks map[string]*callback // registered handlers + subscriptions map[string]*callback // available subscriptions/notifications +} + +// callback is a method callback which was registered in the server +type callback struct { + fn reflect.Value // the function + rcvr reflect.Value // receiver object of method, set if fn is method + argTypes []reflect.Type // input argument types + hasCtx bool // method's first argument is a context (not included in argTypes) + errPos int // err return idx, of -1 when method cannot return error + isSubscribe bool // true if this is a subscription callback +} + +func (r *serviceRegistry) registerName(name string, rcvr interface{}) error { + rcvrVal := reflect.ValueOf(rcvr) + if name == "" { + return fmt.Errorf("no service name for type %s", rcvrVal.Type().String()) + } + callbacks := suitableCallbacks(rcvrVal) + if len(callbacks) == 0 { + return fmt.Errorf("service %T doesn't have any suitable methods/subscriptions to expose", rcvr) + } + + r.mu.Lock() + defer r.mu.Unlock() + if r.services == nil { + r.services = make(map[string]service) + } + svc, ok := r.services[name] + if !ok { + svc = service{ + name: name, + callbacks: make(map[string]*callback), + subscriptions: make(map[string]*callback), + } + r.services[name] = svc + } + for name, cb := range callbacks { + if cb.isSubscribe { + svc.subscriptions[name] = cb + } else { + svc.callbacks[name] = cb + } + } + return nil +} + +// callback returns the callback corresponding to the given RPC method name. +func (r *serviceRegistry) callback(method string) *callback { + elem := strings.SplitN(method, serviceMethodSeparator, 2) + if len(elem) != 2 { + return nil + } + r.mu.Lock() + defer r.mu.Unlock() + return r.services[elem[0]].callbacks[elem[1]] +} + +// subscription returns a subscription callback in the given service. +func (r *serviceRegistry) subscription(service, name string) *callback { + r.mu.Lock() + defer r.mu.Unlock() + return r.services[service].subscriptions[name] +} + +// suitableCallbacks iterates over the methods of the given type. It determines if a method +// satisfies the criteria for a RPC callback or a subscription callback and adds it to the +// collection of callbacks. See server documentation for a summary of these criteria. +func suitableCallbacks(receiver reflect.Value) map[string]*callback { + typ := receiver.Type() + callbacks := make(map[string]*callback) + for m := 0; m < typ.NumMethod(); m++ { + method := typ.Method(m) + if method.PkgPath != "" { + continue // method not exported + } + cb := newCallback(receiver, method.Func) + if cb == nil { + continue // function invalid + } + name := formatName(method.Name) + callbacks[name] = cb + } + return callbacks +} + +// newCallback turns fn (a function) into a callback object. It returns nil if the function +// is unsuitable as an RPC callback. +func newCallback(receiver, fn reflect.Value) *callback { + fntype := fn.Type() + c := &callback{fn: fn, rcvr: receiver, errPos: -1, isSubscribe: isPubSub(fntype)} + // Determine parameter types. They must all be exported or builtin types. + c.makeArgTypes() + if !allExportedOrBuiltin(c.argTypes) { + return nil + } + // Verify return types. The function must return at most one error + // and/or one other non-error value. + outs := make([]reflect.Type, fntype.NumOut()) + for i := 0; i < fntype.NumOut(); i++ { + outs[i] = fntype.Out(i) + } + if len(outs) > 2 || !allExportedOrBuiltin(outs) { + return nil + } + // If an error is returned, it must be the last returned value. + switch { + case len(outs) == 1 && isErrorType(outs[0]): + c.errPos = 0 + case len(outs) == 2: + if isErrorType(outs[0]) || !isErrorType(outs[1]) { + return nil + } + c.errPos = 1 + } + return c +} + +// makeArgTypes composes the argTypes list. +func (c *callback) makeArgTypes() { + fntype := c.fn.Type() + // Skip receiver and context.Context parameter (if present). + firstArg := 0 + if c.rcvr.IsValid() { + firstArg++ + } + if fntype.NumIn() > firstArg && fntype.In(firstArg) == contextType { + c.hasCtx = true + firstArg++ + } + // Add all remaining parameters. + c.argTypes = make([]reflect.Type, fntype.NumIn()-firstArg) + for i := firstArg; i < fntype.NumIn(); i++ { + c.argTypes[i-firstArg] = fntype.In(i) + } +} + +// call invokes the callback. +func (c *callback) call(ctx context.Context, method string, args []reflect.Value) (res interface{}, errRes error) { + // Create the argument slice. + fullargs := make([]reflect.Value, 0, 2+len(args)) + if c.rcvr.IsValid() { + fullargs = append(fullargs, c.rcvr) + } + if c.hasCtx { + fullargs = append(fullargs, reflect.ValueOf(ctx)) + } + fullargs = append(fullargs, args...) + + // Catch panic while running the callback. + defer func() { + if err := recover(); err != nil { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + log.Error("RPC method " + method + " crashed: " + fmt.Sprintf("%v\n%s", err, buf)) + errRes = errors.New("method handler crashed") + } + }() + // Run the callback. + results := c.fn.Call(fullargs) + if len(results) == 0 { + return nil, nil + } + if c.errPos >= 0 && !results[c.errPos].IsNil() { + // Method has returned non-nil error value. + err := results[c.errPos].Interface().(error) + return reflect.Value{}, err + } + return results[0].Interface(), nil +} + +// Is this an exported - upper case - name? +func isExported(name string) bool { + rune, _ := utf8.DecodeRuneInString(name) + return unicode.IsUpper(rune) +} + +// Are all those types exported or built-in? +func allExportedOrBuiltin(types []reflect.Type) bool { + for _, typ := range types { + for typ.Kind() == reflect.Ptr { + typ = typ.Elem() + } + // PkgPath will be non-empty even for an exported type, + // so we need to check the type name as well. + if !isExported(typ.Name()) && typ.PkgPath() != "" { + return false + } + } + return true +} + +// Is t context.Context or *context.Context? +func isContextType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t == contextType +} + +// Does t satisfy the error interface? +func isErrorType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t.Implements(errorType) +} + +// Is t Subscription or *Subscription? +func isSubscriptionType(t reflect.Type) bool { + for t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t == subscriptionType +} + +// isPubSub tests whether the given method has as as first argument a context.Context and +// returns the pair (Subscription, error). +func isPubSub(methodType reflect.Type) bool { + // numIn(0) is the receiver type + if methodType.NumIn() < 2 || methodType.NumOut() != 2 { + return false + } + return isContextType(methodType.In(1)) && + isSubscriptionType(methodType.Out(0)) && + isErrorType(methodType.Out(1)) +} + +// formatName converts to first character of name to lowercase. +func formatName(name string) string { + ret := []rune(name) + if len(ret) > 0 { + ret[0] = unicode.ToLower(ret[0]) + } + return string(ret) +} diff --git a/rpc/stdio.go b/rpc/stdio.go index ea552cca286b..d5dc066c99bb 100644 --- a/rpc/stdio.go +++ b/rpc/stdio.go @@ -19,6 +19,7 @@ package rpc import ( "context" "errors" + "io" "net" "os" "time" @@ -26,39 +27,38 @@ import ( // DialStdIO creates a client on stdin/stdout. func DialStdIO(ctx context.Context) (*Client, error) { - return newClient(ctx, func(_ context.Context) (net.Conn, error) { - return stdioConn{}, nil + return DialIO(ctx, os.Stdin, os.Stdout) +} + +// DialIO creates a client which uses the given IO channels +func DialIO(ctx context.Context, in io.Reader, out io.Writer) (*Client, error) { + return newClient(ctx, func(_ context.Context) (ServerCodec, error) { + return NewJSONCodec(stdioConn{ + in: in, + out: out, + }), nil }) } -type stdioConn struct{} +type stdioConn struct { + in io.Reader + out io.Writer +} func (io stdioConn) Read(b []byte) (n int, err error) { - return os.Stdin.Read(b) + return io.in.Read(b) } func (io stdioConn) Write(b []byte) (n int, err error) { - return os.Stdout.Write(b) + return io.out.Write(b) } func (io stdioConn) Close() error { return nil } -func (io stdioConn) LocalAddr() net.Addr { - return &net.UnixAddr{Name: "stdio", Net: "stdio"} -} - -func (io stdioConn) RemoteAddr() net.Addr { - return &net.UnixAddr{Name: "stdio", Net: "stdio"} -} - -func (io stdioConn) SetDeadline(t time.Time) error { - return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} -} - -func (io stdioConn) SetReadDeadline(t time.Time) error { - return &net.OpError{Op: "set", Net: "stdio", Source: nil, Addr: nil, Err: errors.New("deadline not supported")} +func (io stdioConn) RemoteAddr() string { + return "/dev/stdin" } func (io stdioConn) SetWriteDeadline(t time.Time) error { diff --git a/rpc/subscription.go b/rpc/subscription.go index 6bbb6f75d293..c1e869b8a3a4 100644 --- a/rpc/subscription.go +++ b/rpc/subscription.go @@ -17,9 +17,19 @@ package rpc import ( + "bufio" + "container/list" "context" + crand "crypto/rand" + "encoding/binary" + "encoding/hex" + "encoding/json" "errors" + "math/rand" + "reflect" + "strings" "sync" + "time" ) var ( @@ -29,121 +39,289 @@ var ( ErrSubscriptionNotFound = errors.New("subscription not found") ) +var globalGen = randomIDGenerator() + // ID defines a pseudo random number that is used to identify RPC subscriptions. type ID string -// a Subscription is created by a notifier and tight to that notifier. The client can use -// this subscription to wait for an unsubscribe request for the client, see Err(). -type Subscription struct { - ID ID - namespace string - err chan error // closed on unsubscribe +// NewID returns a new, random ID. +func NewID() ID { + return globalGen() } -// Err returns a channel that is closed when the client send an unsubscribe request. -func (s *Subscription) Err() <-chan error { - return s.err +// randomIDGenerator returns a function generates a random IDs. +func randomIDGenerator() func() ID { + seed, err := binary.ReadVarint(bufio.NewReader(crand.Reader)) + if err != nil { + seed = int64(time.Now().Nanosecond()) + } + var ( + mu sync.Mutex + rng = rand.New(rand.NewSource(seed)) + ) + return func() ID { + mu.Lock() + defer mu.Unlock() + id := make([]byte, 16) + rng.Read(id) + return encodeID(id) + } } -// notifierKey is used to store a notifier within the connection context. -type notifierKey struct{} - -// Notifier is tight to a RPC connection that supports subscriptions. -// Server callbacks use the notifier to send notifications. -type Notifier struct { - codec ServerCodec - subMu sync.Mutex - active map[ID]*Subscription - inactive map[ID]*Subscription - buffer map[ID][]interface{} // unsent notifications of inactive subscriptions -} - -// newNotifier creates a new notifier that can be used to send subscription -// notifications to the client. -func newNotifier(codec ServerCodec) *Notifier { - return &Notifier{ - codec: codec, - active: make(map[ID]*Subscription), - inactive: make(map[ID]*Subscription), - buffer: make(map[ID][]interface{}), +func encodeID(b []byte) ID { + id := hex.EncodeToString(b) + id = strings.TrimLeft(id, "0") + if id == "" { + id = "0" // ID's are RPC quantities, no leading zero's and 0 is 0x0. } + return ID("0x" + id) } +type notifierKey struct{} + // NotifierFromContext returns the Notifier value stored in ctx, if any. func NotifierFromContext(ctx context.Context) (*Notifier, bool) { n, ok := ctx.Value(notifierKey{}).(*Notifier) return n, ok } +// Notifier is tied to a RPC connection that supports subscriptions. +// Server callbacks use the notifier to send notifications. +type Notifier struct { + h *handler + namespace string + + mu sync.Mutex + sub *Subscription + buffer []json.RawMessage + callReturned bool + activated bool +} + // CreateSubscription returns a new subscription that is coupled to the // RPC connection. By default subscriptions are inactive and notifications // are dropped until the subscription is marked as active. This is done // by the RPC server after the subscription ID is send to the client. func (n *Notifier) CreateSubscription() *Subscription { - s := &Subscription{ID: NewID(), err: make(chan error)} - n.subMu.Lock() - n.inactive[s.ID] = s - n.subMu.Unlock() - return s + n.mu.Lock() + defer n.mu.Unlock() + + if n.sub != nil { + panic("can't create multiple subscriptions with Notifier") + } else if n.callReturned { + panic("can't create subscription after subscribe call has returned") + } + n.sub = &Subscription{ID: n.h.idgen(), namespace: n.namespace, err: make(chan error, 1)} + return n.sub } // Notify sends a notification to the client with the given data as payload. // If an error occurs the RPC connection is closed and the error is returned. func (n *Notifier) Notify(id ID, data interface{}) error { - n.subMu.Lock() - defer n.subMu.Unlock() + enc, err := json.Marshal(data) + if err != nil { + return err + } - if sub, active := n.active[id]; active { - n.send(sub, data) - } else { - n.buffer[id] = append(n.buffer[id], data) + n.mu.Lock() + defer n.mu.Unlock() + + if n.sub == nil { + panic("can't Notify before subscription is created") + } else if n.sub.ID != id { + panic("Notify with wrong ID") + } + if n.activated { + return n.send(n.sub, enc) } + n.buffer = append(n.buffer, enc) return nil } -func (n *Notifier) send(sub *Subscription, data interface{}) error { - notification := n.codec.CreateNotification(string(sub.ID), sub.namespace, data) - err := n.codec.Write(notification) - if err != nil { - n.codec.Close() +// Closed returns a channel that is closed when the RPC connection is closed. +// Deprecated: use subscription error channel +func (n *Notifier) Closed() <-chan interface{} { + return n.h.conn.Closed() +} + +// takeSubscription returns the subscription (if one has been created). No subscription can +// be created after this call. +func (n *Notifier) takeSubscription() *Subscription { + n.mu.Lock() + defer n.mu.Unlock() + n.callReturned = true + return n.sub +} + +// acticate is called after the subscription ID was sent to client. Notifications are +// buffered before activation. This prevents notifications being sent to the client before +// the subscription ID is sent to the client. +func (n *Notifier) activate() error { + n.mu.Lock() + defer n.mu.Unlock() + + for _, data := range n.buffer { + if err := n.send(n.sub, data); err != nil { + return err + } } - return err + n.activated = true + return nil } -// Closed returns a channel that is closed when the RPC connection is closed. -func (n *Notifier) Closed() <-chan interface{} { - return n.codec.Closed() -} - -// unsubscribe a subscription. -// If the subscription could not be found ErrSubscriptionNotFound is returned. -func (n *Notifier) unsubscribe(id ID) error { - n.subMu.Lock() - defer n.subMu.Unlock() - if s, found := n.active[id]; found { - close(s.err) - delete(n.active, id) - return nil +func (n *Notifier) send(sub *Subscription, data json.RawMessage) error { + params, _ := json.Marshal(&subscriptionResult{ID: string(sub.ID), Result: data}) + ctx := context.Background() + return n.h.conn.Write(ctx, &jsonrpcMessage{ + Version: vsn, + Method: n.namespace + notificationMethodSuffix, + Params: params, + }) +} + +// A Subscription is created by a notifier and tight to that notifier. The client can use +// this subscription to wait for an unsubscribe request for the client, see Err(). +type Subscription struct { + ID ID + namespace string + err chan error // closed on unsubscribe +} + +// Err returns a channel that is closed when the client send an unsubscribe request. +func (s *Subscription) Err() <-chan error { + return s.err +} + +// MarshalJSON marshals a subscription as its ID. +func (s *Subscription) MarshalJSON() ([]byte, error) { + return json.Marshal(s.ID) +} + +// ClientSubscription is a subscription established through the Client's Subscribe or +// EthSubscribe methods. +type ClientSubscription struct { + client *Client + etype reflect.Type + channel reflect.Value + namespace string + subid string + in chan json.RawMessage + + quitOnce sync.Once // ensures quit is closed once + quit chan struct{} // quit is closed when the subscription exits + errOnce sync.Once // ensures err is closed once + err chan error +} + +func newClientSubscription(c *Client, namespace string, channel reflect.Value) *ClientSubscription { + sub := &ClientSubscription{ + client: c, + namespace: namespace, + etype: channel.Type().Elem(), + channel: channel, + quit: make(chan struct{}), + err: make(chan error, 1), + in: make(chan json.RawMessage), } - return ErrSubscriptionNotFound -} - -// activate enables a subscription. Until a subscription is enabled all -// notifications are dropped. This method is called by the RPC server after -// the subscription ID was sent to client. This prevents notifications being -// send to the client before the subscription ID is send to the client. -func (n *Notifier) activate(id ID, namespace string) { - n.subMu.Lock() - defer n.subMu.Unlock() - - if sub, found := n.inactive[id]; found { - sub.namespace = namespace - n.active[id] = sub - delete(n.inactive, id) - // Send buffered notifications. - for _, data := range n.buffer[id] { - n.send(sub, data) + return sub +} + +// Err returns the subscription error channel. The intended use of Err is to schedule +// resubscription when the client connection is closed unexpectedly. +// +// The error channel receives a value when the subscription has ended due +// to an error. The received error is nil if Close has been called +// on the underlying client and no other error has occurred. +// +// The error channel is closed when Unsubscribe is called on the subscription. +func (sub *ClientSubscription) Err() <-chan error { + return sub.err +} + +// Unsubscribe unsubscribes the notification and closes the error channel. +// It can safely be called more than once. +func (sub *ClientSubscription) Unsubscribe() { + sub.quitWithError(nil, true) + sub.errOnce.Do(func() { close(sub.err) }) +} + +func (sub *ClientSubscription) quitWithError(err error, unsubscribeServer bool) { + sub.quitOnce.Do(func() { + // The dispatch loop won't be able to execute the unsubscribe call + // if it is blocked on deliver. Close sub.quit first because it + // unblocks deliver. + close(sub.quit) + if unsubscribeServer { + sub.requestUnsubscribe() + } + if err != nil { + if err == ErrClientQuit { + err = nil // Adhere to subscription semantics. + } + sub.err <- err } - delete(n.buffer, id) + }) +} + +func (sub *ClientSubscription) deliver(result json.RawMessage) (ok bool) { + select { + case sub.in <- result: + return true + case <-sub.quit: + return false } } + +func (sub *ClientSubscription) start() { + sub.quitWithError(sub.forward()) +} + +func (sub *ClientSubscription) forward() (err error, unsubscribeServer bool) { + cases := []reflect.SelectCase{ + {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.quit)}, + {Dir: reflect.SelectRecv, Chan: reflect.ValueOf(sub.in)}, + {Dir: reflect.SelectSend, Chan: sub.channel}, + } + buffer := list.New() + defer buffer.Init() + for { + var chosen int + var recv reflect.Value + if buffer.Len() == 0 { + // Idle, omit send case. + chosen, recv, _ = reflect.Select(cases[:2]) + } else { + // Non-empty buffer, send the first queued item. + cases[2].Send = reflect.ValueOf(buffer.Front().Value) + chosen, recv, _ = reflect.Select(cases) + } + + switch chosen { + case 0: // <-sub.quit + return nil, false + case 1: // <-sub.in + val, err := sub.unmarshal(recv.Interface().(json.RawMessage)) + if err != nil { + return err, true + } + if buffer.Len() == maxClientSubscriptionBuffer { + return ErrSubscriptionQueueOverflow, true + } + buffer.PushBack(val) + case 2: // sub.channel<- + cases[2].Send = reflect.Value{} // Don't hold onto the value. + buffer.Remove(buffer.Front()) + } + } +} + +func (sub *ClientSubscription) unmarshal(result json.RawMessage) (interface{}, error) { + val := reflect.New(sub.etype) + err := json.Unmarshal(result, val.Interface()) + return val.Elem().Interface(), err +} + +func (sub *ClientSubscription) requestUnsubscribe() error { + var result interface{} + return sub.client.Call(&result, sub.namespace+unsubscribeMethodSuffix, sub.subid) +} diff --git a/rpc/subscription_test.go b/rpc/subscription_test.go index 24febc91909d..eba192450db0 100644 --- a/rpc/subscription_test.go +++ b/rpc/subscription_test.go @@ -17,232 +17,62 @@ package rpc import ( - "context" "encoding/json" "fmt" "net" - "sync" + "strings" "testing" "time" ) -type NotificationTestService struct { - mu sync.Mutex - unsubscribed chan string - gotHangSubscriptionReq chan struct{} - unblockHangSubscription chan struct{} -} - -func (s *NotificationTestService) Echo(i int) int { - return i -} - -func (s *NotificationTestService) Unsubscribe(subid string) { - if s.unsubscribed != nil { - s.unsubscribed <- subid - } -} - -func (s *NotificationTestService) SomeSubscription(ctx context.Context, n, val int) (*Subscription, error) { - notifier, supported := NotifierFromContext(ctx) - if !supported { - return nil, ErrNotificationsUnsupported - } - - // by explicitly creating an subscription we make sure that the subscription id is send back to the client - // before the first subscription.Notify is called. Otherwise the events might be send before the response - // for the eth_subscribe method. - subscription := notifier.CreateSubscription() - - go func() { - // test expects n events, if we begin sending event immediately some events - // will probably be dropped since the subscription ID might not be send to - // the client. - for i := 0; i < n; i++ { - if err := notifier.Notify(subscription.ID, val+i); err != nil { - return - } - } - - select { - case <-notifier.Closed(): - case <-subscription.Err(): - } - if s.unsubscribed != nil { - s.unsubscribed <- string(subscription.ID) - } - }() - - return subscription, nil -} - -// HangSubscription blocks on s.unblockHangSubscription before -// sending anything. -func (s *NotificationTestService) HangSubscription(ctx context.Context, val int) (*Subscription, error) { - notifier, supported := NotifierFromContext(ctx) - if !supported { - return nil, ErrNotificationsUnsupported - } - - s.gotHangSubscriptionReq <- struct{}{} - <-s.unblockHangSubscription - subscription := notifier.CreateSubscription() - - go func() { - notifier.Notify(subscription.ID, val) - }() - return subscription, nil -} - -func TestNotifications(t *testing.T) { - server := NewServer() - service := &NotificationTestService{unsubscribed: make(chan string)} - - if err := server.RegisterName("eth", service); err != nil { - t.Fatalf("unable to register test service %v", err) - } - - clientConn, serverConn := net.Pipe() - - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) - - out := json.NewEncoder(clientConn) - in := json.NewDecoder(clientConn) - - n := 5 - val := 12345 - request := map[string]interface{}{ - "id": 1, - "method": "eth_subscribe", - "version": "2.0", - "params": []interface{}{"someSubscription", n, val}, - } - - // create subscription - if err := out.Encode(request); err != nil { - t.Fatal(err) - } - - var subid string - response := jsonSuccessResponse{Result: subid} - if err := in.Decode(&response); err != nil { - t.Fatal(err) - } - - var ok bool - if _, ok = response.Result.(string); !ok { - t.Fatalf("expected subscription id, got %T", response.Result) - } - - for i := 0; i < n; i++ { - var notification jsonNotification - if err := in.Decode(¬ification); err != nil { - t.Fatalf("%v", err) - } - - if int(notification.Params.Result.(float64)) != val+i { - t.Fatalf("expected %d, got %d", val+i, notification.Params.Result) - } - } - - clientConn.Close() // causes notification unsubscribe callback to be called - select { - case <-service.unsubscribed: - case <-time.After(1 * time.Second): - t.Fatal("Unsubscribe not called after one second") - } -} - -func waitForMessages(t *testing.T, in *json.Decoder, successes chan<- jsonSuccessResponse, - failures chan<- jsonErrResponse, notifications chan<- jsonNotification, errors chan<- error) { - - // read and parse server messages - for { - var rmsg json.RawMessage - if err := in.Decode(&rmsg); err != nil { - return +func TestNewID(t *testing.T) { + hexchars := "0123456789ABCDEFabcdef" + for i := 0; i < 100; i++ { + id := string(NewID()) + if !strings.HasPrefix(id, "0x") { + t.Fatalf("invalid ID prefix, want '0x...', got %s", id) } - var responses []map[string]interface{} - if rmsg[0] == '[' { - if err := json.Unmarshal(rmsg, &responses); err != nil { - errors <- fmt.Errorf("Received invalid message: %s", rmsg) - return - } - } else { - var msg map[string]interface{} - if err := json.Unmarshal(rmsg, &msg); err != nil { - errors <- fmt.Errorf("Received invalid message: %s", rmsg) - return - } - responses = append(responses, msg) + id = id[2:] + if len(id) == 0 || len(id) > 32 { + t.Fatalf("invalid ID length, want len(id) > 0 && len(id) <= 32), got %d", len(id)) } - for _, msg := range responses { - // determine what kind of msg was received and broadcast - // it to over the corresponding channel - if _, found := msg["result"]; found { - successes <- jsonSuccessResponse{ - Version: msg["jsonrpc"].(string), - Id: msg["id"], - Result: msg["result"], - } - continue - } - if _, found := msg["error"]; found { - params := msg["params"].(map[string]interface{}) - failures <- jsonErrResponse{ - Version: msg["jsonrpc"].(string), - Id: msg["id"], - Error: jsonError{int(params["subscription"].(float64)), params["message"].(string), params["data"]}, - } - continue + for i := 0; i < len(id); i++ { + if strings.IndexByte(hexchars, id[i]) == -1 { + t.Fatalf("unexpected byte, want any valid hex char, got %c", id[i]) } - if _, found := msg["params"]; found { - params := msg["params"].(map[string]interface{}) - notifications <- jsonNotification{ - Version: msg["jsonrpc"].(string), - Method: msg["method"].(string), - Params: jsonSubscription{params["subscription"].(string), params["result"]}, - } - continue - } - errors <- fmt.Errorf("Received invalid message: %s", msg) } } } -// TestSubscriptionMultipleNamespaces ensures that subscriptions can exists -// for multiple different namespaces. -func TestSubscriptionMultipleNamespaces(t *testing.T) { +func TestSubscriptions(t *testing.T) { var ( namespaces = []string{"eth", "shh", "bzz"} - service = NotificationTestService{} - subCount = len(namespaces) * 2 + service = ¬ificationTestService{} + subCount = len(namespaces) notificationCount = 3 server = NewServer() clientConn, serverConn = net.Pipe() out = json.NewEncoder(clientConn) in = json.NewDecoder(clientConn) - successes = make(chan jsonSuccessResponse) - failures = make(chan jsonErrResponse) - notifications = make(chan jsonNotification) - errors = make(chan error, 10) + successes = make(chan subConfirmation) + notifications = make(chan subscriptionResult) + errors = make(chan error, subCount*notificationCount+1) ) // setup and start server for _, namespace := range namespaces { - if err := server.RegisterName(namespace, &service); err != nil { + if err := server.RegisterName(namespace, service); err != nil { t.Fatalf("unable to register test service %v", err) } } - go server.ServeCodec(NewJSONCodec(serverConn), OptionMethodInvocation|OptionSubscriptions) defer server.Stop() // wait for message and write them to the given channels - go waitForMessages(t, in, successes, failures, notifications, errors) + go waitForMessages(in, successes, notifications, errors) // create subscriptions one by one for i, namespace := range namespaces { @@ -252,27 +82,11 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { "version": "2.0", "params": []interface{}{"someSubscription", notificationCount, i}, } - if err := out.Encode(&request); err != nil { t.Fatalf("Could not create subscription: %v", err) } } - // create all subscriptions in 1 batch - var requests []interface{} - for i, namespace := range namespaces { - requests = append(requests, map[string]interface{}{ - "id": i, - "method": fmt.Sprintf("%s_subscribe", namespace), - "version": "2.0", - "params": []interface{}{"someSubscription", notificationCount, i}, - }) - } - - if err := out.Encode(&requests); err != nil { - t.Fatalf("Could not create subscription in batch form: %v", err) - } - timeout := time.After(30 * time.Second) subids := make(map[string]string, subCount) count := make(map[string]int, subCount) @@ -285,17 +99,14 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { } return done } - for !allReceived() { select { - case suc := <-successes: // subscription created - subids[namespaces[int(suc.Id.(float64))]] = suc.Result.(string) + case confirmation := <-successes: // subscription created + subids[namespaces[confirmation.reqid]] = string(confirmation.subid) case notification := <-notifications: - count[notification.Params.Subscription]++ + count[notification.ID]++ case err := <-errors: t.Fatal(err) - case failure := <-failures: - t.Errorf("received error: %v", failure.Error) case <-timeout: for _, namespace := range namespaces { subid, found := subids[namespace] @@ -311,3 +122,85 @@ func TestSubscriptionMultipleNamespaces(t *testing.T) { } } } + +// This test checks that unsubscribing works. +func TestServerUnsubscribe(t *testing.T) { + // Start the server. + server := newTestServer() + service := ¬ificationTestService{unsubscribed: make(chan string)} + server.RegisterName("nftest2", service) + p1, p2 := net.Pipe() + go server.ServeCodec(NewJSONCodec(p1), OptionMethodInvocation|OptionSubscriptions) + + p2.SetDeadline(time.Now().Add(10 * time.Second)) + + // Subscribe. + p2.Write([]byte(`{"jsonrpc":"2.0","id":1,"method":"nftest2_subscribe","params":["someSubscription",0,10]}`)) + + // Handle received messages. + resps := make(chan subConfirmation) + notifications := make(chan subscriptionResult) + errors := make(chan error) + go waitForMessages(json.NewDecoder(p2), resps, notifications, errors) + + // Receive the subscription ID. + var sub subConfirmation + select { + case sub = <-resps: + case err := <-errors: + t.Fatal(err) + } + + // Unsubscribe and check that it is handled on the server side. + p2.Write([]byte(`{"jsonrpc":"2.0","method":"nftest2_unsubscribe","params":["` + sub.subid + `"]}`)) + for { + select { + case id := <-service.unsubscribed: + if id != string(sub.subid) { + t.Errorf("wrong subscription ID unsubscribed") + } + return + case err := <-errors: + t.Fatal(err) + case <-notifications: + // drop notifications + } + } +} + +type subConfirmation struct { + reqid int + subid ID +} + +func waitForMessages(in *json.Decoder, successes chan subConfirmation, notifications chan subscriptionResult, errors chan error) { + for { + var msg jsonrpcMessage + if err := in.Decode(&msg); err != nil { + errors <- fmt.Errorf("decode error: %v", err) + return + } + switch { + case msg.isNotification(): + var res subscriptionResult + if err := json.Unmarshal(msg.Params, &res); err != nil { + errors <- fmt.Errorf("invalid subscription result: %v", err) + } else { + notifications <- res + } + case msg.isResponse(): + var c subConfirmation + if msg.Error != nil { + errors <- msg.Error + } else if err := json.Unmarshal(msg.Result, &c.subid); err != nil { + errors <- fmt.Errorf("invalid response: %v", err) + } else { + json.Unmarshal(msg.ID, &c.reqid) + successes <- c + } + default: + errors <- fmt.Errorf("unrecognized message: %v", msg) + return + } + } +} diff --git a/rpc/testdata/invalid-badid.js b/rpc/testdata/invalid-badid.js new file mode 100644 index 000000000000..2202b8ccd26e --- /dev/null +++ b/rpc/testdata/invalid-badid.js @@ -0,0 +1,7 @@ +// This test checks processing of messages with invalid ID. + +--> {"id":[],"method":"test_foo"} +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} + +--> {"id":{},"method":"test_foo"} +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/rpc/testdata/invalid-batch.js b/rpc/testdata/invalid-batch.js new file mode 100644 index 000000000000..f470574fb5b5 --- /dev/null +++ b/rpc/testdata/invalid-batch.js @@ -0,0 +1,14 @@ +// This test checks the behavior of batches with invalid elements. +// Empty batches are not allowed. Batches may contain junk. + +--> [] +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"empty batch"}} + +--> [1] +<-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] + +--> [1,2,3] +<-- [{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] + +--> [{"jsonrpc":"2.0","id":1,"method":"test_echo","params":["foo",1]},55,{"jsonrpc":"2.0","id":2,"method":"unknown_method"},{"foo":"bar"}] +<-- [{"jsonrpc":"2.0","id":1,"result":{"String":"foo","Int":1,"Args":null}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}},{"jsonrpc":"2.0","id":2,"error":{"code":-32601,"message":"the method unknown_method does not exist/is not available"}},{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}}] diff --git a/rpc/testdata/invalid-idonly.js b/rpc/testdata/invalid-idonly.js new file mode 100644 index 000000000000..79997bee3060 --- /dev/null +++ b/rpc/testdata/invalid-idonly.js @@ -0,0 +1,7 @@ +// This test checks processing of messages that contain just the ID and nothing else. + +--> {"id":1} +<-- {"jsonrpc":"2.0","id":1,"error":{"code":-32600,"message":"invalid request"}} + +--> {"jsonrpc":"2.0","id":1} +<-- {"jsonrpc":"2.0","id":1,"error":{"code":-32600,"message":"invalid request"}} diff --git a/rpc/testdata/invalid-nonobj.js b/rpc/testdata/invalid-nonobj.js new file mode 100644 index 000000000000..4b9f4d994c13 --- /dev/null +++ b/rpc/testdata/invalid-nonobj.js @@ -0,0 +1,4 @@ +// This test checks behavior for invalid requests. + +--> 1 +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"invalid request"}} diff --git a/rpc/testdata/invalid-syntax.json b/rpc/testdata/invalid-syntax.json new file mode 100644 index 000000000000..b19429960309 --- /dev/null +++ b/rpc/testdata/invalid-syntax.json @@ -0,0 +1,5 @@ +// This test checks that an error is written for invalid JSON requests. + +--> 'f +<-- {"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid character '\\'' looking for beginning of value"}} + diff --git a/rpc/testdata/reqresp-batch.js b/rpc/testdata/reqresp-batch.js new file mode 100644 index 000000000000..977af7663099 --- /dev/null +++ b/rpc/testdata/reqresp-batch.js @@ -0,0 +1,8 @@ +// There is no response for all-notification batches. + +--> [{"jsonrpc":"2.0","method":"test_echo","params":["x",99]}] + +// This test checks regular batch calls. + +--> [{"jsonrpc":"2.0","id":2,"method":"test_echo","params":[]}, {"jsonrpc":"2.0","id": 3,"method":"test_echo","params":["x",3]}] +<-- [{"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 0"}},{"jsonrpc":"2.0","id":3,"result":{"String":"x","Int":3,"Args":null}}] diff --git a/rpc/testdata/reqresp-echo.js b/rpc/testdata/reqresp-echo.js new file mode 100644 index 000000000000..7a9e90321c47 --- /dev/null +++ b/rpc/testdata/reqresp-echo.js @@ -0,0 +1,16 @@ +// This test calls the test_echo method. + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": []} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 0"}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x"]} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32602,"message":"missing value for required argument 1"}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x", 3]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":null}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echo", "params": ["x", 3, {"S": "foo"}]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":{"S":"foo"}}} + +--> {"jsonrpc": "2.0", "id": 2, "method": "test_echoWithCtx", "params": ["x", 3, {"S": "foo"}]} +<-- {"jsonrpc":"2.0","id":2,"result":{"String":"x","Int":3,"Args":{"S":"foo"}}} diff --git a/rpc/testdata/reqresp-namedparam.js b/rpc/testdata/reqresp-namedparam.js new file mode 100644 index 000000000000..9a9372b0a711 --- /dev/null +++ b/rpc/testdata/reqresp-namedparam.js @@ -0,0 +1,5 @@ +// This test checks that an error response is sent for calls +// with named parameters. + +--> {"jsonrpc":"2.0","method":"test_echo","params":{"int":23},"id":3} +<-- {"jsonrpc":"2.0","id":3,"error":{"code":-32602,"message":"non-array args"}} diff --git a/rpc/testdata/reqresp-noargsrets.js b/rpc/testdata/reqresp-noargsrets.js new file mode 100644 index 000000000000..e61cc708ba33 --- /dev/null +++ b/rpc/testdata/reqresp-noargsrets.js @@ -0,0 +1,4 @@ +// This test calls the test_noArgsRets method. + +--> {"jsonrpc": "2.0", "id": "foo", "method": "test_noArgsRets", "params": []} +<-- {"jsonrpc":"2.0","id":"foo","result":null} diff --git a/rpc/testdata/reqresp-nomethod.js b/rpc/testdata/reqresp-nomethod.js new file mode 100644 index 000000000000..58ea6f3079b6 --- /dev/null +++ b/rpc/testdata/reqresp-nomethod.js @@ -0,0 +1,4 @@ +// This test calls a method that doesn't exist. + +--> {"jsonrpc": "2.0", "id": 2, "method": "invalid_method", "params": [2, 3]} +<-- {"jsonrpc":"2.0","id":2,"error":{"code":-32601,"message":"the method invalid_method does not exist/is not available"}} diff --git a/rpc/testdata/reqresp-noparam.js b/rpc/testdata/reqresp-noparam.js new file mode 100644 index 000000000000..2edf486d9f85 --- /dev/null +++ b/rpc/testdata/reqresp-noparam.js @@ -0,0 +1,4 @@ +// This test checks that calls with no parameters work. + +--> {"jsonrpc":"2.0","method":"test_noArgsRets","id":3} +<-- {"jsonrpc":"2.0","id":3,"result":null} diff --git a/rpc/testdata/reqresp-paramsnull.js b/rpc/testdata/reqresp-paramsnull.js new file mode 100644 index 000000000000..8a01bae1bbe7 --- /dev/null +++ b/rpc/testdata/reqresp-paramsnull.js @@ -0,0 +1,4 @@ +// This test checks that calls with "params":null work. + +--> {"jsonrpc":"2.0","method":"test_noArgsRets","params":null,"id":3} +<-- {"jsonrpc":"2.0","id":3,"result":null} diff --git a/rpc/testdata/revcall.js b/rpc/testdata/revcall.js new file mode 100644 index 000000000000..695d9858f87e --- /dev/null +++ b/rpc/testdata/revcall.js @@ -0,0 +1,6 @@ +// This test checks reverse calls. + +--> {"jsonrpc":"2.0","id":2,"method":"test_callMeBack","params":["foo",[1]]} +<-- {"jsonrpc":"2.0","id":1,"method":"foo","params":[1]} +--> {"jsonrpc":"2.0","id":1,"result":"my result"} +<-- {"jsonrpc":"2.0","id":2,"result":"my result"} diff --git a/rpc/testdata/revcall2.js b/rpc/testdata/revcall2.js new file mode 100644 index 000000000000..acab46551ec6 --- /dev/null +++ b/rpc/testdata/revcall2.js @@ -0,0 +1,7 @@ +// This test checks reverse calls. + +--> {"jsonrpc":"2.0","id":2,"method":"test_callMeBackLater","params":["foo",[1]]} +<-- {"jsonrpc":"2.0","id":2,"result":null} +<-- {"jsonrpc":"2.0","id":1,"method":"foo","params":[1]} +--> {"jsonrpc":"2.0","id":1,"result":"my result"} + diff --git a/rpc/testdata/subscription.js b/rpc/testdata/subscription.js new file mode 100644 index 000000000000..9f1007301080 --- /dev/null +++ b/rpc/testdata/subscription.js @@ -0,0 +1,12 @@ +// This test checks basic subscription support. + +--> {"jsonrpc":"2.0","id":1,"method":"nftest_subscribe","params":["someSubscription",5,1]} +<-- {"jsonrpc":"2.0","id":1,"result":"0x1"} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":1}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":2}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":3}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":4}} +<-- {"jsonrpc":"2.0","method":"nftest_subscription","params":{"subscription":"0x1","result":5}} + +--> {"jsonrpc":"2.0","id":2,"method":"nftest_echo","params":[11]} +<-- {"jsonrpc":"2.0","id":2,"result":11} diff --git a/rpc/testservice_test.go b/rpc/testservice_test.go new file mode 100644 index 000000000000..98871b5d6cfc --- /dev/null +++ b/rpc/testservice_test.go @@ -0,0 +1,180 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package rpc + +import ( + "context" + "encoding/binary" + "errors" + "sync" + "time" +) + +func newTestServer() *Server { + server := NewServer() + server.idgen = sequentialIDGenerator() + if err := server.RegisterName("test", new(testService)); err != nil { + panic(err) + } + if err := server.RegisterName("nftest", new(notificationTestService)); err != nil { + panic(err) + } + return server +} + +func sequentialIDGenerator() func() ID { + var ( + mu sync.Mutex + counter uint64 + ) + return func() ID { + mu.Lock() + defer mu.Unlock() + counter++ + id := make([]byte, 8) + binary.BigEndian.PutUint64(id, counter) + return encodeID(id) + } +} + +type testService struct{} + +type Args struct { + S string +} + +type Result struct { + String string + Int int + Args *Args +} + +func (s *testService) NoArgsRets() {} + +func (s *testService) Echo(str string, i int, args *Args) Result { + return Result{str, i, args} +} + +func (s *testService) EchoWithCtx(ctx context.Context, str string, i int, args *Args) Result { + return Result{str, i, args} +} + +func (s *testService) Sleep(ctx context.Context, duration time.Duration) { + time.Sleep(duration) +} + +func (s *testService) Rets() (string, error) { + return "", nil +} + +func (s *testService) InvalidRets1() (error, string) { + return nil, "" +} + +func (s *testService) InvalidRets2() (string, string) { + return "", "" +} + +func (s *testService) InvalidRets3() (string, string, error) { + return "", "", nil +} + +func (s *testService) CallMeBack(ctx context.Context, method string, args []interface{}) (interface{}, error) { + c, ok := ClientFromContext(ctx) + if !ok { + return nil, errors.New("no client") + } + var result interface{} + err := c.Call(&result, method, args...) + return result, err +} + +func (s *testService) CallMeBackLater(ctx context.Context, method string, args []interface{}) error { + c, ok := ClientFromContext(ctx) + if !ok { + return errors.New("no client") + } + go func() { + <-ctx.Done() + var result interface{} + c.Call(&result, method, args...) + }() + return nil +} + +func (s *testService) Subscription(ctx context.Context) (*Subscription, error) { + return nil, nil +} + +type notificationTestService struct { + unsubscribed chan string + gotHangSubscriptionReq chan struct{} + unblockHangSubscription chan struct{} +} + +func (s *notificationTestService) Echo(i int) int { + return i +} + +func (s *notificationTestService) Unsubscribe(subid string) { + if s.unsubscribed != nil { + s.unsubscribed <- subid + } +} + +func (s *notificationTestService) SomeSubscription(ctx context.Context, n, val int) (*Subscription, error) { + notifier, supported := NotifierFromContext(ctx) + if !supported { + return nil, ErrNotificationsUnsupported + } + + // By explicitly creating an subscription we make sure that the subscription id is send + // back to the client before the first subscription.Notify is called. Otherwise the + // events might be send before the response for the *_subscribe method. + subscription := notifier.CreateSubscription() + go func() { + for i := 0; i < n; i++ { + if err := notifier.Notify(subscription.ID, val+i); err != nil { + return + } + } + select { + case <-notifier.Closed(): + case <-subscription.Err(): + } + if s.unsubscribed != nil { + s.unsubscribed <- string(subscription.ID) + } + }() + return subscription, nil +} + +// HangSubscription blocks on s.unblockHangSubscription before sending anything. +func (s *notificationTestService) HangSubscription(ctx context.Context, val int) (*Subscription, error) { + notifier, supported := NotifierFromContext(ctx) + if !supported { + return nil, ErrNotificationsUnsupported + } + s.gotHangSubscriptionReq <- struct{}{} + <-s.unblockHangSubscription + subscription := notifier.CreateSubscription() + + go func() { + notifier.Notify(subscription.ID, val) + }() + return subscription, nil +} diff --git a/rpc/types.go b/rpc/types.go index 4252c3602762..e6b9f2a300d2 100644 --- a/rpc/types.go +++ b/rpc/types.go @@ -17,13 +17,13 @@ package rpc import ( + "context" + "encoding/json" "fmt" "math" - "reflect" "strings" - "sync" - mapset "github.com/deckarep/golang-set" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" ) @@ -35,57 +35,6 @@ type API struct { Public bool // indication if the methods must be considered safe for public use } -// callback is a method callback which was registered in the server -type callback struct { - rcvr reflect.Value // receiver of method - method reflect.Method // callback - argTypes []reflect.Type // input argument types - hasCtx bool // method's first argument is a context (not included in argTypes) - errPos int // err return idx, of -1 when method cannot return error - isSubscribe bool // indication if the callback is a subscription -} - -// service represents a registered object -type service struct { - name string // name for service - typ reflect.Type // receiver type - callbacks callbacks // registered handlers - subscriptions subscriptions // available subscriptions/notifications -} - -// serverRequest is an incoming request -type serverRequest struct { - id interface{} - svcname string - callb *callback - args []reflect.Value - isUnsubscribe bool - err Error -} - -type serviceRegistry map[string]*service // collection of services -type callbacks map[string]*callback // collection of RPC callbacks -type subscriptions map[string]*callback // collection of subscription callbacks - -// Server represents a RPC server -type Server struct { - services serviceRegistry - - run int32 - codecsMu sync.Mutex - codecs mapset.Set -} - -// rpcRequest represents a raw incoming RPC request -type rpcRequest struct { - service string - method string - id interface{} - isPubSub bool - params interface{} - err Error // invalid batch element -} - // Error wraps RPC errors, which contain an error code in addition to the message. type Error interface { Error() string // returns the message @@ -96,24 +45,19 @@ type Error interface { // a RPC session. Implementations must be go-routine safe since the codec can be called in // multiple go-routines concurrently. type ServerCodec interface { - // Read next request - ReadRequestHeaders() ([]rpcRequest, bool, Error) - // Parse request argument to the given types - ParseRequestArguments(argTypes []reflect.Type, params interface{}) ([]reflect.Value, Error) - // Assemble success response, expects response id and payload - CreateResponse(id interface{}, reply interface{}) interface{} - // Assemble error response, expects response id and error - CreateErrorResponse(id interface{}, err Error) interface{} - // Assemble error response with extra information about the error through info - CreateErrorResponseWithInfo(id interface{}, err Error, info interface{}) interface{} - // Create notification response - CreateNotification(id, namespace string, event interface{}) interface{} - // Write msg to client. - Write(msg interface{}) error - // Close underlying data stream + Read() (msgs []*jsonrpcMessage, isBatch bool, err error) Close() - // Closed when underlying connection is closed + jsonWriter +} + +// jsonWriter can write JSON messages to its underlying connection. +// Implementations must be safe for concurrent use. +type jsonWriter interface { + Write(context.Context, interface{}) error + // Closed returns a channel which is closed when the connection is closed. Closed() <-chan interface{} + // RemoteAddr returns the peer address of the connection. + RemoteAddr() string } type BlockNumber int64 @@ -163,3 +107,94 @@ func (bn *BlockNumber) UnmarshalJSON(data []byte) error { func (bn BlockNumber) Int64() int64 { return (int64)(bn) } + +type BlockNumberOrHash struct { + BlockNumber *BlockNumber `json:"blockNumber,omitempty"` + BlockHash *common.Hash `json:"blockHash,omitempty"` + RequireCanonical bool `json:"requireCanonical,omitempty"` +} + +func (bnh *BlockNumberOrHash) UnmarshalJSON(data []byte) error { + type erased BlockNumberOrHash + e := erased{} + err := json.Unmarshal(data, &e) + if err == nil { + if e.BlockNumber != nil && e.BlockHash != nil { + return fmt.Errorf("cannot specify both BlockHash and BlockNumber, choose one or the other") + } + bnh.BlockNumber = e.BlockNumber + bnh.BlockHash = e.BlockHash + bnh.RequireCanonical = e.RequireCanonical + return nil + } + var input string + err = json.Unmarshal(data, &input) + if err != nil { + return err + } + switch input { + case "earliest": + bn := EarliestBlockNumber + bnh.BlockNumber = &bn + return nil + case "latest": + bn := LatestBlockNumber + bnh.BlockNumber = &bn + return nil + case "pending": + bn := PendingBlockNumber + bnh.BlockNumber = &bn + return nil + default: + if len(input) == 66 { + hash := common.Hash{} + err := hash.UnmarshalText([]byte(input)) + if err != nil { + return err + } + bnh.BlockHash = &hash + return nil + } else { + blckNum, err := hexutil.DecodeUint64(input) + if err != nil { + return err + } + if blckNum > math.MaxInt64 { + return fmt.Errorf("blocknumber too high") + } + bn := BlockNumber(blckNum) + bnh.BlockNumber = &bn + return nil + } + } +} + +func (bnh *BlockNumberOrHash) Number() (BlockNumber, bool) { + if bnh.BlockNumber != nil { + return *bnh.BlockNumber, true + } + return BlockNumber(0), false +} + +func (bnh *BlockNumberOrHash) Hash() (common.Hash, bool) { + if bnh.BlockHash != nil { + return *bnh.BlockHash, true + } + return common.Hash{}, false +} + +func BlockNumberOrHashWithNumber(blockNr BlockNumber) BlockNumberOrHash { + return BlockNumberOrHash{ + BlockNumber: &blockNr, + BlockHash: nil, + RequireCanonical: false, + } +} + +func BlockNumberOrHashWithHash(hash common.Hash, canonical bool) BlockNumberOrHash { + return BlockNumberOrHash{ + BlockNumber: nil, + BlockHash: &hash, + RequireCanonical: canonical, + } +} diff --git a/rpc/types_test.go b/rpc/types_test.go index 68b6d3c54f6a..89b0c9171a14 100644 --- a/rpc/types_test.go +++ b/rpc/types_test.go @@ -20,6 +20,7 @@ import ( "encoding/json" "testing" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" ) @@ -64,3 +65,60 @@ func TestBlockNumberJSONUnmarshal(t *testing.T) { } } } + +func TestBlockNumberOrHash_UnmarshalJSON(t *testing.T) { + tests := []struct { + input string + mustFail bool + expected BlockNumberOrHash + }{ + 0: {`"0x"`, true, BlockNumberOrHash{}}, + 1: {`"0x0"`, false, BlockNumberOrHashWithNumber(0)}, + 2: {`"0X1"`, false, BlockNumberOrHashWithNumber(1)}, + 3: {`"0x00"`, true, BlockNumberOrHash{}}, + 4: {`"0x01"`, true, BlockNumberOrHash{}}, + 5: {`"0x1"`, false, BlockNumberOrHashWithNumber(1)}, + 6: {`"0x12"`, false, BlockNumberOrHashWithNumber(18)}, + 7: {`"0x7fffffffffffffff"`, false, BlockNumberOrHashWithNumber(math.MaxInt64)}, + 8: {`"0x8000000000000000"`, true, BlockNumberOrHash{}}, + 9: {"0", true, BlockNumberOrHash{}}, + 10: {`"ff"`, true, BlockNumberOrHash{}}, + 11: {`"pending"`, false, BlockNumberOrHashWithNumber(PendingBlockNumber)}, + 12: {`"latest"`, false, BlockNumberOrHashWithNumber(LatestBlockNumber)}, + 13: {`"earliest"`, false, BlockNumberOrHashWithNumber(EarliestBlockNumber)}, + 14: {`someString`, true, BlockNumberOrHash{}}, + 15: {`""`, true, BlockNumberOrHash{}}, + 16: {``, true, BlockNumberOrHash{}}, + 17: {`"0x0000000000000000000000000000000000000000000000000000000000000000"`, false, BlockNumberOrHashWithHash(common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), false)}, + 18: {`{"blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000"}`, false, BlockNumberOrHashWithHash(common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), false)}, + 19: {`{"blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000","requireCanonical":false}`, false, BlockNumberOrHashWithHash(common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), false)}, + 20: {`{"blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000","requireCanonical":true}`, false, BlockNumberOrHashWithHash(common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000000"), true)}, + 21: {`{"blockNumber":"0x1"}`, false, BlockNumberOrHashWithNumber(1)}, + 22: {`{"blockNumber":"pending"}`, false, BlockNumberOrHashWithNumber(PendingBlockNumber)}, + 23: {`{"blockNumber":"latest"}`, false, BlockNumberOrHashWithNumber(LatestBlockNumber)}, + 24: {`{"blockNumber":"earliest"}`, false, BlockNumberOrHashWithNumber(EarliestBlockNumber)}, + 25: {`{"blockNumber":"0x1", "blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000"}`, true, BlockNumberOrHash{}}, + } + + for i, test := range tests { + var bnh BlockNumberOrHash + err := json.Unmarshal([]byte(test.input), &bnh) + if test.mustFail && err == nil { + t.Errorf("Test %d should fail", i) + continue + } + if !test.mustFail && err != nil { + t.Errorf("Test %d should pass but got err: %v", i, err) + continue + } + hash, hashOk := bnh.Hash() + expectedHash, expectedHashOk := test.expected.Hash() + num, numOk := bnh.Number() + expectedNum, expectedNumOk := test.expected.Number() + if bnh.RequireCanonical != test.expected.RequireCanonical || + hash != expectedHash || hashOk != expectedHashOk || + num != expectedNum || numOk != expectedNumOk { + t.Errorf("Test %d got unexpected value, want %v, got %v", i, test.expected, bnh) + } + } +} diff --git a/rpc/utils.go b/rpc/utils.go deleted file mode 100644 index 7f7ac4520bc5..000000000000 --- a/rpc/utils.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright 2015 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rpc - -import ( - "bufio" - "context" - crand "crypto/rand" - "encoding/binary" - "encoding/hex" - "math/rand" - "reflect" - "strings" - "sync" - "time" - "unicode" - "unicode/utf8" -) - -var ( - subscriptionIDGenMu sync.Mutex - subscriptionIDGen = idGenerator() -) - -// Is this an exported - upper case - name? -func isExported(name string) bool { - rune, _ := utf8.DecodeRuneInString(name) - return unicode.IsUpper(rune) -} - -// Is this type exported or a builtin? -func isExportedOrBuiltinType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - // PkgPath will be non-empty even for an exported type, - // so we need to check the type name as well. - return isExported(t.Name()) || t.PkgPath() == "" -} - -var contextType = reflect.TypeOf((*context.Context)(nil)).Elem() - -// isContextType returns an indication if the given t is of context.Context or *context.Context type -func isContextType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t == contextType -} - -var errorType = reflect.TypeOf((*error)(nil)).Elem() - -// Implements this type the error interface -func isErrorType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t.Implements(errorType) -} - -var subscriptionType = reflect.TypeOf((*Subscription)(nil)).Elem() - -// isSubscriptionType returns an indication if the given t is of Subscription or *Subscription type -func isSubscriptionType(t reflect.Type) bool { - for t.Kind() == reflect.Ptr { - t = t.Elem() - } - return t == subscriptionType -} - -// isPubSub tests whether the given method has as as first argument a context.Context -// and returns the pair (Subscription, error) -func isPubSub(methodType reflect.Type) bool { - // numIn(0) is the receiver type - if methodType.NumIn() < 2 || methodType.NumOut() != 2 { - return false - } - - return isContextType(methodType.In(1)) && - isSubscriptionType(methodType.Out(0)) && - isErrorType(methodType.Out(1)) -} - -// formatName will convert to first character to lower case -func formatName(name string) string { - ret := []rune(name) - if len(ret) > 0 { - ret[0] = unicode.ToLower(ret[0]) - } - return string(ret) -} - -// suitableCallbacks iterates over the methods of the given type. It will determine if a method satisfies the criteria -// for a RPC callback or a subscription callback and adds it to the collection of callbacks or subscriptions. See server -// documentation for a summary of these criteria. -func suitableCallbacks(rcvr reflect.Value, typ reflect.Type) (callbacks, subscriptions) { - callbacks := make(callbacks) - subscriptions := make(subscriptions) - -METHODS: - for m := 0; m < typ.NumMethod(); m++ { - method := typ.Method(m) - mtype := method.Type - mname := formatName(method.Name) - if method.PkgPath != "" { // method must be exported - continue - } - - var h callback - h.isSubscribe = isPubSub(mtype) - h.rcvr = rcvr - h.method = method - h.errPos = -1 - - firstArg := 1 - numIn := mtype.NumIn() - if numIn >= 2 && mtype.In(1) == contextType { - h.hasCtx = true - firstArg = 2 - } - - if h.isSubscribe { - h.argTypes = make([]reflect.Type, numIn-firstArg) // skip rcvr type - for i := firstArg; i < numIn; i++ { - argType := mtype.In(i) - if isExportedOrBuiltinType(argType) { - h.argTypes[i-firstArg] = argType - } else { - continue METHODS - } - } - - subscriptions[mname] = &h - continue METHODS - } - - // determine method arguments, ignore first arg since it's the receiver type - // Arguments must be exported or builtin types - h.argTypes = make([]reflect.Type, numIn-firstArg) - for i := firstArg; i < numIn; i++ { - argType := mtype.In(i) - if !isExportedOrBuiltinType(argType) { - continue METHODS - } - h.argTypes[i-firstArg] = argType - } - - // check that all returned values are exported or builtin types - for i := 0; i < mtype.NumOut(); i++ { - if !isExportedOrBuiltinType(mtype.Out(i)) { - continue METHODS - } - } - - // when a method returns an error it must be the last returned value - h.errPos = -1 - for i := 0; i < mtype.NumOut(); i++ { - if isErrorType(mtype.Out(i)) { - h.errPos = i - break - } - } - - if h.errPos >= 0 && h.errPos != mtype.NumOut()-1 { - continue METHODS - } - - switch mtype.NumOut() { - case 0, 1, 2: - if mtype.NumOut() == 2 && h.errPos == -1 { // method must one return value and 1 error - continue METHODS - } - callbacks[mname] = &h - } - } - - return callbacks, subscriptions -} - -// idGenerator helper utility that generates a (pseudo) random sequence of -// bytes that are used to generate identifiers. -func idGenerator() *rand.Rand { - if seed, err := binary.ReadVarint(bufio.NewReader(crand.Reader)); err == nil { - return rand.New(rand.NewSource(seed)) - } - return rand.New(rand.NewSource(int64(time.Now().Nanosecond()))) -} - -// NewID generates a identifier that can be used as an identifier in the RPC interface. -// e.g. filter and subscription identifier. -func NewID() ID { - subscriptionIDGenMu.Lock() - defer subscriptionIDGenMu.Unlock() - - id := make([]byte, 16) - for i := 0; i < len(id); i += 7 { - val := subscriptionIDGen.Int63() - for j := 0; i+j < len(id) && j < 7; j++ { - id[i+j] = byte(val) - val >>= 8 - } - } - - rpcId := hex.EncodeToString(id) - // rpc ID's are RPC quantities, no leading zero's and 0 is 0x0 - rpcId = strings.TrimLeft(rpcId, "0") - if rpcId == "" { - rpcId = "0" - } - - return ID("0x" + rpcId) -} diff --git a/rpc/websocket.go b/rpc/websocket.go index eae8320e5677..1632d6af412a 100644 --- a/rpc/websocket.go +++ b/rpc/websocket.go @@ -17,62 +17,26 @@ package rpc import ( - "bytes" "context" - "crypto/tls" "encoding/base64" - "encoding/json" "fmt" - "net" "net/http" "net/url" "os" "strings" - "time" + "sync" mapset "github.com/deckarep/golang-set" "github.com/ethereum/go-ethereum/log" - "golang.org/x/net/websocket" + "github.com/gorilla/websocket" ) -// websocketJSONCodec is a custom JSON codec with payload size enforcement and -// special number parsing. -var websocketJSONCodec = websocket.Codec{ - // Marshal is the stock JSON marshaller used by the websocket library too. - Marshal: func(v interface{}) ([]byte, byte, error) { - msg, err := json.Marshal(v) - return msg, websocket.TextFrame, err - }, - // Unmarshal is a specialized unmarshaller to properly convert numbers. - Unmarshal: func(msg []byte, payloadType byte, v interface{}) error { - dec := json.NewDecoder(bytes.NewReader(msg)) - dec.UseNumber() - - return dec.Decode(v) - }, -} +const ( + wsReadBuffer = 1024 + wsWriteBuffer = 1024 +) -// WebsocketHandler returns a handler that serves JSON-RPC to WebSocket connections. -// -// allowedOrigins should be a comma-separated list of allowed origin URLs. -// To allow connections with any origin, pass "*". -func (srv *Server) WebsocketHandler(allowedOrigins []string) http.Handler { - return websocket.Server{ - Handshake: wsHandshakeValidator(allowedOrigins), - Handler: func(conn *websocket.Conn) { - // Create a custom encode/decode pair to enforce payload size and number encoding - conn.MaxPayloadBytes = maxRequestContentLength - - encoder := func(v interface{}) error { - return websocketJSONCodec.Send(conn, v) - } - decoder := func(v interface{}) error { - return websocketJSONCodec.Receive(conn, v) - } - srv.ServeCodec(NewCodec(conn, encoder, decoder), OptionMethodInvocation|OptionSubscriptions) - }, - } -} +var wsBufferPool = new(sync.Pool) // NewWSServer creates a new websocket RPC server around an API provider. // @@ -81,10 +45,32 @@ func NewWSServer(allowedOrigins []string, srv *Server) *http.Server { return &http.Server{Handler: srv.WebsocketHandler(allowedOrigins)} } +// WebsocketHandler returns a handler that serves JSON-RPC to WebSocket connections. +// +// allowedOrigins should be a comma-separated list of allowed origin URLs. +// To allow connections with any origin, pass "*". +func (s *Server) WebsocketHandler(allowedOrigins []string) http.Handler { + var upgrader = websocket.Upgrader{ + ReadBufferSize: wsReadBuffer, + WriteBufferSize: wsWriteBuffer, + WriteBufferPool: wsBufferPool, + CheckOrigin: wsHandshakeValidator(allowedOrigins), + } + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Debug("WebSocket upgrade failed", "err", err) + return + } + codec := newWebsocketCodec(conn) + s.ServeCodec(codec, OptionMethodInvocation|OptionSubscriptions) + }) +} + // wsHandshakeValidator returns a handler that verifies the origin during the // websocket upgrade process. When a '*' is specified as an allowed origins all // connections are accepted. -func wsHandshakeValidator(allowedOrigins []string) func(*websocket.Config, *http.Request) error { +func wsHandshakeValidator(allowedOrigins []string) func(*http.Request) bool { origins := mapset.NewSet() allowAllOrigins := false @@ -96,7 +82,6 @@ func wsHandshakeValidator(allowedOrigins []string) func(*websocket.Config, *http origins.Add(strings.ToLower(origin)) } } - // allow localhost if no allowedOrigins are specified. if len(origins.ToSlice()) == 0 { origins.Add("http://localhost") @@ -104,44 +89,39 @@ func wsHandshakeValidator(allowedOrigins []string) func(*websocket.Config, *http origins.Add("http://" + strings.ToLower(hostname)) } } - - log.Debug(fmt.Sprintf("Allowed origin(s) for WS RPC interface %v\n", origins.ToSlice())) - - f := func(cfg *websocket.Config, req *http.Request) error { + log.Debug(fmt.Sprintf("Allowed origin(s) for WS RPC interface %v", origins.ToSlice())) + + f := func(req *http.Request) bool { + // Skip origin verification if no Origin header is present. The origin check + // is supposed to protect against browser based attacks. Browsers always set + // Origin. Non-browser software can put anything in origin and checking it doesn't + // provide additional security. + if _, ok := req.Header["Origin"]; !ok { + return true + } + // Verify origin against whitelist. origin := strings.ToLower(req.Header.Get("Origin")) if allowAllOrigins || origins.Contains(origin) { - return nil + return true } - log.Warn(fmt.Sprintf("origin '%s' not allowed on WS-RPC interface\n", origin)) - return fmt.Errorf("origin %s not allowed", origin) + log.Warn("Rejected WebSocket connection", "origin", origin) + return false } return f } -func wsGetConfig(endpoint, origin string) (*websocket.Config, error) { - if origin == "" { - var err error - if origin, err = os.Hostname(); err != nil { - return nil, err - } - if strings.HasPrefix(endpoint, "wss") { - origin = "https://" + strings.ToLower(origin) - } else { - origin = "http://" + strings.ToLower(origin) - } - } - config, err := websocket.NewConfig(endpoint, origin) - if err != nil { - return nil, err - } +type wsHandshakeError struct { + err error + status string +} - if config.Location.User != nil { - b64auth := base64.StdEncoding.EncodeToString([]byte(config.Location.User.String())) - config.Header.Add("Authorization", "Basic "+b64auth) - config.Location.User = nil +func (e wsHandshakeError) Error() string { + s := e.err.Error() + if e.status != "" { + s += " (HTTP status " + e.status + ")" } - return config, nil + return s } // DialWebsocket creates a new RPC client that communicates with a JSON-RPC server @@ -150,61 +130,46 @@ func wsGetConfig(endpoint, origin string) (*websocket.Config, error) { // The context is used for the initial connection establishment. It does not // affect subsequent interactions with the client. func DialWebsocket(ctx context.Context, endpoint, origin string) (*Client, error) { - config, err := wsGetConfig(endpoint, origin) + endpoint, header, err := wsClientHeaders(endpoint, origin) if err != nil { return nil, err } - - return newClient(ctx, func(ctx context.Context) (net.Conn, error) { - return wsDialContext(ctx, config) + dialer := websocket.Dialer{ + ReadBufferSize: wsReadBuffer, + WriteBufferSize: wsWriteBuffer, + WriteBufferPool: wsBufferPool, + } + return newClient(ctx, func(ctx context.Context) (ServerCodec, error) { + conn, resp, err := dialer.DialContext(ctx, endpoint, header) + if err != nil { + hErr := wsHandshakeError{err: err} + if resp != nil { + hErr.status = resp.Status + } + return nil, hErr + } + return newWebsocketCodec(conn), nil }) } -func wsDialContext(ctx context.Context, config *websocket.Config) (*websocket.Conn, error) { - var conn net.Conn - var err error - switch config.Location.Scheme { - case "ws": - conn, err = dialContext(ctx, "tcp", wsDialAddress(config.Location)) - case "wss": - dialer := contextDialer(ctx) - conn, err = tls.DialWithDialer(dialer, "tcp", wsDialAddress(config.Location), config.TlsConfig) - default: - err = websocket.ErrBadScheme - } +func wsClientHeaders(endpoint, origin string) (string, http.Header, error) { + endpointURL, err := url.Parse(endpoint) if err != nil { - return nil, err + return endpoint, nil, err } - ws, err := websocket.NewClient(config, conn) - if err != nil { - conn.Close() - return nil, err + header := make(http.Header) + if origin != "" { + header.Add("origin", origin) } - return ws, err -} - -var wsPortMap = map[string]string{"ws": "80", "wss": "443"} - -func wsDialAddress(location *url.URL) string { - if _, ok := wsPortMap[location.Scheme]; ok { - if _, _, err := net.SplitHostPort(location.Host); err != nil { - return net.JoinHostPort(location.Host, wsPortMap[location.Scheme]) - } + if endpointURL.User != nil { + b64auth := base64.StdEncoding.EncodeToString([]byte(endpointURL.User.String())) + header.Add("authorization", "Basic "+b64auth) + endpointURL.User = nil } - return location.Host + return endpointURL.String(), header, nil } -func dialContext(ctx context.Context, network, addr string) (net.Conn, error) { - d := &net.Dialer{KeepAlive: tcpKeepAliveInterval} - return d.DialContext(ctx, network, addr) -} - -func contextDialer(ctx context.Context) *net.Dialer { - dialer := &net.Dialer{Cancel: ctx.Done(), KeepAlive: tcpKeepAliveInterval} - if deadline, ok := ctx.Deadline(); ok { - dialer.Deadline = deadline - } else { - dialer.Deadline = time.Now().Add(defaultDialTimeout) - } - return dialer +func newWebsocketCodec(conn *websocket.Conn) ServerCodec { + conn.SetReadLimit(maxRequestContentLength) + return newCodec(conn, conn.WriteJSON, conn.ReadJSON) } diff --git a/rpc/websocket_test.go b/rpc/websocket_test.go index 5bf3780d62c7..9dc108479796 100644 --- a/rpc/websocket_test.go +++ b/rpc/websocket_test.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2018 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -16,39 +16,244 @@ package rpc -import "testing" +import ( + "context" + "net" + "net/http" + "net/http/httptest" + "reflect" + "strings" + "testing" + "time" -func TestWSGetConfigNoAuth(t *testing.T) { - config, err := wsGetConfig("ws://example.com:1234", "") + "github.com/gorilla/websocket" +) + +func TestWebsocketClientHeaders(t *testing.T) { + t.Parallel() + + endpoint, header, err := wsClientHeaders("wss://testuser:test-PASS_01@example.com:1234", "https://example.com") if err != nil { - t.Logf("wsGetConfig failed: %s", err) - t.Fail() - return + t.Fatalf("wsGetConfig failed: %s", err) + } + if endpoint != "wss://example.com:1234" { + t.Fatal("User should have been stripped from the URL") + } + if header.Get("authorization") != "Basic dGVzdHVzZXI6dGVzdC1QQVNTXzAx" { + t.Fatal("Basic auth header is incorrect") + } + if header.Get("origin") != "https://example.com" { + t.Fatal("Origin not set") + } +} + +// This test checks that the server rejects connections from disallowed origins. +func TestWebsocketOriginCheck(t *testing.T) { + t.Parallel() + + var ( + srv = newTestServer() + httpsrv = httptest.NewServer(srv.WebsocketHandler([]string{"http://example.com"})) + wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") + ) + defer srv.Stop() + defer httpsrv.Close() + + client, err := DialWebsocket(context.Background(), wsURL, "http://ekzample.com") + if err == nil { + client.Close() + t.Fatal("no error for wrong origin") + } + wantErr := wsHandshakeError{websocket.ErrBadHandshake, "403 Forbidden"} + if !reflect.DeepEqual(err, wantErr) { + t.Fatalf("wrong error for wrong origin: %q", err) + } + + // Connections without origin header should work. + client, err = DialWebsocket(context.Background(), wsURL, "") + if err != nil { + t.Fatal("error for empty origin") + } + client.Close() +} + +// This test checks whether calls exceeding the request size limit are rejected. +func TestWebsocketLargeCall(t *testing.T) { + t.Parallel() + + var ( + srv = newTestServer() + httpsrv = httptest.NewServer(srv.WebsocketHandler([]string{"*"})) + wsURL = "ws:" + strings.TrimPrefix(httpsrv.URL, "http:") + ) + defer srv.Stop() + defer httpsrv.Close() + + client, err := DialWebsocket(context.Background(), wsURL, "") + if err != nil { + t.Fatalf("can't dial: %v", err) + } + defer client.Close() + + // This call sends slightly less than the limit and should work. + var result Result + arg := strings.Repeat("x", maxRequestContentLength-200) + if err := client.Call(&result, "test_echo", arg, 1); err != nil { + t.Fatalf("valid call didn't work: %v", err) + } + if result.String != arg { + t.Fatal("wrong string echoed") + } + + // This call sends twice the allowed size and shouldn't work. + arg = strings.Repeat("x", maxRequestContentLength*2) + err = client.Call(&result, "test_echo", arg) + if err == nil { + t.Fatal("no error for too large call") } - if config.Location.User != nil { - t.Log("User should have been stripped from the URL") - t.Fail() +} + +// This test checks that client handles WebSocket ping frames correctly. +func TestClientWebsocketPing(t *testing.T) { + t.Parallel() + + var ( + sendPing = make(chan struct{}) + server = wsPingTestServer(t, sendPing) + ctx, cancel = context.WithTimeout(context.Background(), 1*time.Second) + ) + defer cancel() + defer server.Shutdown(ctx) + + client, err := DialContext(ctx, "ws://"+server.Addr) + if err != nil { + t.Fatalf("client dial error: %v", err) + } + resultChan := make(chan int) + sub, err := client.EthSubscribe(ctx, resultChan, "foo") + if err != nil { + t.Fatalf("client subscribe error: %v", err) } - if config.Location.Hostname() != "example.com" || - config.Location.Port() != "1234" || config.Location.Scheme != "ws" { - t.Logf("Unexpected URL: %s", config.Location) - t.Fail() + + // Wait for the context's deadline to be reached before proceeding. + // This is important for reproducing https://github.com/ethereum/go-ethereum/issues/19798 + <-ctx.Done() + close(sendPing) + + // Wait for the subscription result. + timeout := time.NewTimer(5 * time.Second) + for { + select { + case err := <-sub.Err(): + t.Error("client subscription error:", err) + case result := <-resultChan: + t.Log("client got result:", result) + return + case <-timeout.C: + t.Error("didn't get any result within the test timeout") + return + } } } -func TestWSGetConfigWithBasicAuth(t *testing.T) { - config, err := wsGetConfig("wss://testuser:test-PASS_01@example.com:1234", "") +// wsPingTestServer runs a WebSocket server which accepts a single subscription request. +// When a value arrives on sendPing, the server sends a ping frame, waits for a matching +// pong and finally delivers a single subscription result. +func wsPingTestServer(t *testing.T, sendPing <-chan struct{}) *http.Server { + var srv http.Server + shutdown := make(chan struct{}) + srv.RegisterOnShutdown(func() { + close(shutdown) + }) + srv.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Upgrade to WebSocket. + upgrader := websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { return true }, + } + conn, err := upgrader.Upgrade(w, r, nil) + if err != nil { + t.Errorf("server WS upgrade error: %v", err) + return + } + defer conn.Close() + + // Handle the connection. + wsPingTestHandler(t, conn, shutdown, sendPing) + }) + + // Start the server. + listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { - t.Logf("wsGetConfig failed: %s", err) - t.Fail() + t.Fatal("can't listen:", err) + } + srv.Addr = listener.Addr().String() + go srv.Serve(listener) + return &srv +} + +func wsPingTestHandler(t *testing.T, conn *websocket.Conn, shutdown, sendPing <-chan struct{}) { + // Canned responses for the eth_subscribe call in TestClientWebsocketPing. + const ( + subResp = `{"jsonrpc":"2.0","id":1,"result":"0x00"}` + subNotify = `{"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x00","result":1}}` + ) + + // Handle subscribe request. + if _, _, err := conn.ReadMessage(); err != nil { + t.Errorf("server read error: %v", err) return } - if config.Location.User != nil { - t.Log("User should have been stripped from the URL") - t.Fail() + if err := conn.WriteMessage(websocket.TextMessage, []byte(subResp)); err != nil { + t.Errorf("server write error: %v", err) + return } - if config.Header.Get("Authorization") != "Basic dGVzdHVzZXI6dGVzdC1QQVNTXzAx" { - t.Log("Basic auth header is incorrect") - t.Fail() + + // Read from the connection to process control messages. + var pongCh = make(chan string) + conn.SetPongHandler(func(d string) error { + t.Logf("server got pong: %q", d) + pongCh <- d + return nil + }) + go func() { + for { + typ, msg, err := conn.ReadMessage() + if err != nil { + return + } + t.Logf("server got message (%d): %q", typ, msg) + } + }() + + // Write messages. + var ( + sendResponse <-chan time.Time + wantPong string + ) + for { + select { + case _, open := <-sendPing: + if !open { + sendPing = nil + } + t.Logf("server sending ping") + conn.WriteMessage(websocket.PingMessage, []byte("ping")) + wantPong = "ping" + case data := <-pongCh: + if wantPong == "" { + t.Errorf("unexpected pong") + } else if data != wantPong { + t.Errorf("got pong with wrong data %q", data) + } + wantPong = "" + sendResponse = time.NewTimer(200 * time.Millisecond).C + case <-sendResponse: + t.Logf("server sending response") + conn.WriteMessage(websocket.TextMessage, []byte(subNotify)) + sendResponse = nil + case <-shutdown: + conn.Close() + return + } } } diff --git a/signer/core/abihelper.go b/signer/core/abihelper.go deleted file mode 100644 index 0fef24939549..000000000000 --- a/signer/core/abihelper.go +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. -// -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// go-ethereum is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . - -package core - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "strings" - - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/common" - - "bytes" - "os" - "regexp" -) - -type decodedArgument struct { - soltype abi.Argument - value interface{} -} -type decodedCallData struct { - signature string - name string - inputs []decodedArgument -} - -// String implements stringer interface, tries to use the underlying value-type -func (arg decodedArgument) String() string { - var value string - switch val := arg.value.(type) { - case fmt.Stringer: - value = val.String() - default: - value = fmt.Sprintf("%v", val) - } - return fmt.Sprintf("%v: %v", arg.soltype.Type.String(), value) -} - -// String implements stringer interface for decodedCallData -func (cd decodedCallData) String() string { - args := make([]string, len(cd.inputs)) - for i, arg := range cd.inputs { - args[i] = arg.String() - } - return fmt.Sprintf("%s(%s)", cd.name, strings.Join(args, ",")) -} - -// parseCallData matches the provided call data against the abi definition, -// and returns a struct containing the actual go-typed values -func parseCallData(calldata []byte, abidata string) (*decodedCallData, error) { - - if len(calldata) < 4 { - return nil, fmt.Errorf("Invalid ABI-data, incomplete method signature of (%d bytes)", len(calldata)) - } - - sigdata, argdata := calldata[:4], calldata[4:] - if len(argdata)%32 != 0 { - return nil, fmt.Errorf("Not ABI-encoded data; length should be a multiple of 32 (was %d)", len(argdata)) - } - - abispec, err := abi.JSON(strings.NewReader(abidata)) - if err != nil { - return nil, fmt.Errorf("Failed parsing JSON ABI: %v, abidata: %v", err, abidata) - } - - method, err := abispec.MethodById(sigdata) - if err != nil { - return nil, err - } - - v, err := method.Inputs.UnpackValues(argdata) - if err != nil { - return nil, err - } - - decoded := decodedCallData{signature: method.Sig(), name: method.Name} - - for n, argument := range method.Inputs { - if err != nil { - return nil, fmt.Errorf("Failed to decode argument %d (signature %v): %v", n, method.Sig(), err) - } - decodedArg := decodedArgument{ - soltype: argument, - value: v[n], - } - decoded.inputs = append(decoded.inputs, decodedArg) - } - - // We're finished decoding the data. At this point, we encode the decoded data to see if it matches with the - // original data. If we didn't do that, it would e.g. be possible to stuff extra data into the arguments, which - // is not detected by merely decoding the data. - - var ( - encoded []byte - ) - encoded, err = method.Inputs.PackValues(v) - - if err != nil { - return nil, err - } - - if !bytes.Equal(encoded, argdata) { - was := common.Bytes2Hex(encoded) - exp := common.Bytes2Hex(argdata) - return nil, fmt.Errorf("WARNING: Supplied data is stuffed with extra data. \nWant %s\nHave %s\nfor method %v", exp, was, method.Sig()) - } - return &decoded, nil -} - -// MethodSelectorToAbi converts a method selector into an ABI struct. The returned data is a valid json string -// which can be consumed by the standard abi package. -func MethodSelectorToAbi(selector string) ([]byte, error) { - - re := regexp.MustCompile(`^([^\)]+)\(([a-z0-9,\[\]]*)\)`) - - type fakeArg struct { - Type string `json:"type"` - } - type fakeABI struct { - Name string `json:"name"` - Type string `json:"type"` - Inputs []fakeArg `json:"inputs"` - } - groups := re.FindStringSubmatch(selector) - if len(groups) != 3 { - return nil, fmt.Errorf("Did not match: %v (%v matches)", selector, len(groups)) - } - name := groups[1] - args := groups[2] - arguments := make([]fakeArg, 0) - if len(args) > 0 { - for _, arg := range strings.Split(args, ",") { - arguments = append(arguments, fakeArg{arg}) - } - } - abicheat := fakeABI{ - name, "function", arguments, - } - return json.Marshal([]fakeABI{abicheat}) - -} - -type AbiDb struct { - db map[string]string - customdb map[string]string - customdbPath string -} - -// NewEmptyAbiDB exists for test purposes -func NewEmptyAbiDB() (*AbiDb, error) { - return &AbiDb{make(map[string]string), make(map[string]string), ""}, nil -} - -// NewAbiDBFromFile loads signature database from file, and -// errors if the file is not valid json. Does no other validation of contents -func NewAbiDBFromFile(path string) (*AbiDb, error) { - raw, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - db, err := NewEmptyAbiDB() - if err != nil { - return nil, err - } - json.Unmarshal(raw, &db.db) - return db, nil -} - -// NewAbiDBFromFiles loads both the standard signature database and a custom database. The latter will be used -// to write new values into if they are submitted via the API -func NewAbiDBFromFiles(standard, custom string) (*AbiDb, error) { - - db := &AbiDb{make(map[string]string), make(map[string]string), custom} - db.customdbPath = custom - - raw, err := ioutil.ReadFile(standard) - if err != nil { - return nil, err - } - json.Unmarshal(raw, &db.db) - // Custom file may not exist. Will be created during save, if needed - if _, err := os.Stat(custom); err == nil { - raw, err = ioutil.ReadFile(custom) - if err != nil { - return nil, err - } - json.Unmarshal(raw, &db.customdb) - } - - return db, nil -} - -// LookupMethodSelector checks the given 4byte-sequence against the known ABI methods. -// OBS: This method does not validate the match, it's assumed the caller will do so -func (db *AbiDb) LookupMethodSelector(id []byte) (string, error) { - if len(id) < 4 { - return "", fmt.Errorf("Expected 4-byte id, got %d", len(id)) - } - sig := common.ToHex(id[:4]) - if key, exists := db.db[sig]; exists { - return key, nil - } - if key, exists := db.customdb[sig]; exists { - return key, nil - } - return "", fmt.Errorf("Signature %v not found", sig) -} -func (db *AbiDb) Size() int { - return len(db.db) -} - -// saveCustomAbi saves a signature ephemerally. If custom file is used, also saves to disk -func (db *AbiDb) saveCustomAbi(selector, signature string) error { - db.customdb[signature] = selector - if db.customdbPath == "" { - return nil //Not an error per se, just not used - } - d, err := json.Marshal(db.customdb) - if err != nil { - return err - } - err = ioutil.WriteFile(db.customdbPath, d, 0600) - return err -} - -// AddSignature to the database, if custom database saving is enabled. -// OBS: This method does _not_ validate the correctness of the data, -// it is assumed that the caller has already done so -func (db *AbiDb) AddSignature(selector string, data []byte) error { - if len(data) < 4 { - return nil - } - _, err := db.LookupMethodSelector(data[:4]) - if err == nil { - return nil - } - sig := common.ToHex(data[:4]) - return db.saveCustomAbi(selector, sig) -} diff --git a/signer/core/api.go b/signer/core/api.go index e9a3357855b8..244767acaf1b 100644 --- a/signer/core/api.go +++ b/signer/core/api.go @@ -1,18 +1,18 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core @@ -21,52 +21,56 @@ import ( "encoding/json" "errors" "fmt" - "io/ioutil" "math/big" + "os" "reflect" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/accounts/scwallet" "github.com/ethereum/go-ethereum/accounts/usbwallet" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/signer/storage" ) -// numberOfAccountsToDerive For hardware wallets, the number of accounts to derive -const numberOfAccountsToDerive = 10 +const ( + // numberOfAccountsToDerive For hardware wallets, the number of accounts to derive + numberOfAccountsToDerive = 10 + // ExternalAPIVersion -- see extapi_changelog.md + ExternalAPIVersion = "6.0.0" + // InternalAPIVersion -- see intapi_changelog.md + InternalAPIVersion = "7.0.0" +) // ExternalAPI defines the external API through which signing requests are made. type ExternalAPI interface { // List available accounts List(ctx context.Context) ([]common.Address, error) // New request to create a new account - New(ctx context.Context) (accounts.Account, error) + New(ctx context.Context) (common.Address, error) // SignTransaction request to sign the specified transaction SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) - // Sign - request to sign the given data (plus prefix) - Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) - // Export - request to export an account - Export(ctx context.Context, addr common.Address) (json.RawMessage, error) - // Import - request to import an account - // Should be moved to Internal API, in next phase when we have - // bi-directional communication - //Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) + // SignData - request to sign the given data (plus prefix) + SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) + // SignTypedData - request to sign the given structured data (plus prefix) + SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data TypedData) (hexutil.Bytes, error) + // EcRecover - recover public key from given message and signature + EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) + // Version info about the APIs + Version(ctx context.Context) (string, error) } -// SignerUI specifies what method a UI needs to implement to be able to be used as a UI for the signer -type SignerUI interface { +// UIClientAPI specifies what method a UI needs to implement to be able to be used as a +// UI for the signer +type UIClientAPI interface { // ApproveTx prompt the user for confirmation to request to sign Transaction ApproveTx(request *SignTxRequest) (SignTxResponse, error) // ApproveSignData prompt the user for confirmation to request to sign data ApproveSignData(request *SignDataRequest) (SignDataResponse, error) - // ApproveExport prompt the user for confirmation to export encrypted Account json - ApproveExport(request *ExportRequest) (ExportResponse, error) - // ApproveImport prompt the user for confirmation to import Account json - ApproveImport(request *ImportRequest) (ImportResponse, error) // ApproveListing prompt the user for confirmation to list accounts // the list of accounts to list can be modified by the UI ApproveListing(request *ListRequest) (ListResponse, error) @@ -85,15 +89,31 @@ type SignerUI interface { // OnInputRequired is invoked when clef requires user input, for example master password or // pin-code for unlocking hardware wallets OnInputRequired(info UserInputRequest) (UserInputResponse, error) + // RegisterUIServer tells the UI to use the given UIServerAPI for ui->clef communication + RegisterUIServer(api *UIServerAPI) +} + +// Validator defines the methods required to validate a transaction against some +// sanity defaults as well as any underlying 4byte method database. +// +// Use fourbyte.Database as an implementation. It is separated out of this package +// to allow pieces of the signer package to be used without having to load the +// 7MB embedded 4byte dump. +type Validator interface { + // ValidateTransaction does a number of checks on the supplied transaction, and + // returns either a list of warnings, or an error (indicating that the transaction + // should be immediately rejected). + ValidateTransaction(selector *string, tx *SendTxArgs) (*ValidationMessages, error) } // SignerAPI defines the actual implementation of ExternalAPI type SignerAPI struct { - chainID *big.Int - am *accounts.Manager - UI SignerUI - validator *Validator - rejectMode bool + chainID *big.Int + am *accounts.Manager + UI UIClientAPI + validator Validator + rejectMode bool + credentials storage.Storage } // Metadata about a request @@ -105,6 +125,65 @@ type Metadata struct { Origin string `json:"Origin"` } +func StartClefAccountManager(ksLocation string, nousb, lightKDF bool, scpath string) *accounts.Manager { + var ( + backends []accounts.Backend + n, p = keystore.StandardScryptN, keystore.StandardScryptP + ) + if lightKDF { + n, p = keystore.LightScryptN, keystore.LightScryptP + } + // support password based accounts + if len(ksLocation) > 0 { + backends = append(backends, keystore.NewKeyStore(ksLocation, n, p)) + } + if !nousb { + // Start a USB hub for Ledger hardware wallets + if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { + log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) + } else { + backends = append(backends, ledgerhub) + log.Debug("Ledger support enabled") + } + // Start a USB hub for Trezor hardware wallets (HID version) + if trezorhub, err := usbwallet.NewTrezorHubWithHID(); err != nil { + log.Warn(fmt.Sprintf("Failed to start HID Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + log.Debug("Trezor support enabled via HID") + } + // Start a USB hub for Trezor hardware wallets (WebUSB version) + if trezorhub, err := usbwallet.NewTrezorHubWithWebUSB(); err != nil { + log.Warn(fmt.Sprintf("Failed to start WebUSB Trezor hub, disabling: %v", err)) + } else { + backends = append(backends, trezorhub) + log.Debug("Trezor support enabled via WebUSB") + } + } + + // Start a smart card hub + if len(scpath) > 0 { + // Sanity check that the smartcard path is valid + fi, err := os.Stat(scpath) + if err != nil { + log.Info("Smartcard socket file missing, disabling", "err", err) + } else { + if fi.Mode()&os.ModeType != os.ModeSocket { + log.Error("Invalid smartcard socket file type", "path", scpath, "type", fi.Mode().String()) + } else { + if schub, err := scwallet.NewHub(scpath, scwallet.Scheme, ksLocation); err != nil { + log.Warn(fmt.Sprintf("Failed to start smart card hub, disabling: %v", err)) + } else { + backends = append(backends, schub) + } + } + } + } + + // Clef doesn't allow insecure http account unlock. + return accounts.NewManager(&accounts.Config{InsecureUnlockAllowed: false}, backends...) +} + // MetadataFromContext extracts Metadata from a given context.Context func MetadataFromContext(ctx context.Context) Metadata { m := Metadata{"NA", "NA", "NA", "", ""} // batman @@ -149,66 +228,40 @@ type ( //The UI may make changes to the TX Transaction SendTxArgs `json:"transaction"` Approved bool `json:"approved"` - Password string `json:"password"` - } - // ExportRequest info about query to export accounts - ExportRequest struct { - Address common.Address `json:"address"` - Meta Metadata `json:"meta"` - } - // ExportResponse response to export-request - ExportResponse struct { - Approved bool `json:"approved"` - } - // ImportRequest info about request to import an Account - ImportRequest struct { - Meta Metadata `json:"meta"` - } - ImportResponse struct { - Approved bool `json:"approved"` - OldPassword string `json:"old_password"` - NewPassword string `json:"new_password"` } SignDataRequest struct { - Address common.MixedcaseAddress `json:"address"` - Rawdata hexutil.Bytes `json:"raw_data"` - Message string `json:"message"` - Hash hexutil.Bytes `json:"hash"` - Meta Metadata `json:"meta"` + ContentType string `json:"content_type"` + Address common.MixedcaseAddress `json:"address"` + Rawdata []byte `json:"raw_data"` + Messages []*NameValueType `json:"messages"` + Hash hexutil.Bytes `json:"hash"` + Meta Metadata `json:"meta"` } SignDataResponse struct { Approved bool `json:"approved"` - Password string } NewAccountRequest struct { Meta Metadata `json:"meta"` } NewAccountResponse struct { - Approved bool `json:"approved"` - Password string `json:"password"` + Approved bool `json:"approved"` } ListRequest struct { - Accounts []Account `json:"accounts"` - Meta Metadata `json:"meta"` + Accounts []accounts.Account `json:"accounts"` + Meta Metadata `json:"meta"` } ListResponse struct { - Accounts []Account `json:"accounts"` + Accounts []accounts.Account `json:"accounts"` } Message struct { Text string `json:"text"` } - PasswordRequest struct { - Prompt string `json:"prompt"` - } - PasswordResponse struct { - Password string `json:"password"` - } StartupInfo struct { Info map[string]interface{} `json:"info"` } UserInputRequest struct { - Prompt string `json:"prompt"` Title string `json:"title"` + Prompt string `json:"prompt"` IsPassword bool `json:"isPassword"` } UserInputResponse struct { @@ -223,38 +276,11 @@ var ErrRequestDenied = errors.New("Request denied") // key that is generated when a new Account is created. // noUSB disables USB support that is required to support hardware devices such as // ledger and trezor. -func NewSignerAPI(chainID int64, ksLocation string, noUSB bool, ui SignerUI, abidb *AbiDb, lightKDF bool, advancedMode bool) *SignerAPI { - var ( - backends []accounts.Backend - n, p = keystore.StandardScryptN, keystore.StandardScryptP - ) - if lightKDF { - n, p = keystore.LightScryptN, keystore.LightScryptP - } - // support password based accounts - if len(ksLocation) > 0 { - backends = append(backends, keystore.NewKeyStore(ksLocation, n, p)) - } +func NewSignerAPI(am *accounts.Manager, chainID int64, noUSB bool, ui UIClientAPI, validator Validator, advancedMode bool, credentials storage.Storage) *SignerAPI { if advancedMode { log.Info("Clef is in advanced mode: will warn instead of reject") } - if !noUSB { - // Start a USB hub for Ledger hardware wallets - if ledgerhub, err := usbwallet.NewLedgerHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Ledger hub, disabling: %v", err)) - } else { - backends = append(backends, ledgerhub) - log.Debug("Ledger support enabled") - } - // Start a USB hub for Trezor hardware wallets - if trezorhub, err := usbwallet.NewTrezorHub(); err != nil { - log.Warn(fmt.Sprintf("Failed to start Trezor hub, disabling: %v", err)) - } else { - backends = append(backends, trezorhub) - log.Debug("Trezor support enabled") - } - } - signer := &SignerAPI{big.NewInt(chainID), accounts.NewManager(backends...), ui, NewValidator(abidb), !advancedMode} + signer := &SignerAPI{big.NewInt(chainID), am, ui, validator, !advancedMode, credentials} if !noUSB { signer.startUSBListener() } @@ -321,12 +347,10 @@ func (api *SignerAPI) startUSBListener() { status, _ := event.Wallet.Status() log.Info("New wallet appeared", "url", event.Wallet.URL(), "status", status) - derivationPath := accounts.DefaultBaseDerivationPath - if event.Wallet.URL().Scheme == "ledger" { - derivationPath = accounts.DefaultLedgerBaseDerivationPath - } - var nextPath = derivationPath // Derive first N accounts, hardcoded for now + var nextPath = make(accounts.DerivationPath, len(accounts.DefaultBaseDerivationPath)) + copy(nextPath[:], accounts.DefaultBaseDerivationPath[:]) + for i := 0; i < numberOfAccountsToDerive; i++ { acc, err := event.Wallet.Derive(nextPath, true) if err != nil { @@ -347,12 +371,9 @@ func (api *SignerAPI) startUSBListener() { // List returns the set of wallet this signer manages. Each wallet can contain // multiple accounts. func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { - var accs []Account + var accs []accounts.Account for _, wallet := range api.am.Wallets() { - for _, acc := range wallet.Accounts() { - acc := Account{Typ: "Account", URL: wallet.URL(), Address: acc.Address} - accs = append(accs, acc) - } + accs = append(accs, wallet.Accounts()...) } result, err := api.UI.ApproveListing(&ListRequest{Accounts: accs, Meta: MetadataFromContext(ctx)}) if err != nil { @@ -362,7 +383,6 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { return nil, ErrRequestDenied } - addresses := make([]common.Address, 0) for _, acc := range result.Accounts { addresses = append(addresses, acc.Address) @@ -374,33 +394,40 @@ func (api *SignerAPI) List(ctx context.Context) ([]common.Address, error) { // New creates a new password protected Account. The private key is protected with // the given password. Users are responsible to backup the private key that is stored // in the keystore location thas was specified when this API was created. -func (api *SignerAPI) New(ctx context.Context) (accounts.Account, error) { +func (api *SignerAPI) New(ctx context.Context) (common.Address, error) { be := api.am.Backends(keystore.KeyStoreType) if len(be) == 0 { - return accounts.Account{}, errors.New("password based accounts not supported") + return common.Address{}, errors.New("password based accounts not supported") } - var ( - resp NewAccountResponse - err error - ) + if resp, err := api.UI.ApproveNewAccount(&NewAccountRequest{MetadataFromContext(ctx)}); err != nil { + return common.Address{}, err + } else if !resp.Approved { + return common.Address{}, ErrRequestDenied + } + // Three retries to get a valid password for i := 0; i < 3; i++ { - resp, err = api.UI.ApproveNewAccount(&NewAccountRequest{MetadataFromContext(ctx)}) + resp, err := api.UI.OnInputRequired(UserInputRequest{ + "New account password", + fmt.Sprintf("Please enter a password for the new account to be created (attempt %d of 3)", i), + true}) if err != nil { - return accounts.Account{}, err - } - if !resp.Approved { - return accounts.Account{}, ErrRequestDenied + log.Warn("error obtaining password", "attempt", i, "error", err) + continue } - if pwErr := ValidatePasswordFormat(resp.Password); pwErr != nil { + if pwErr := ValidatePasswordFormat(resp.Text); pwErr != nil { api.UI.ShowError(fmt.Sprintf("Account creation attempt #%d failed due to password requirements: %v", (i + 1), pwErr)) } else { // No error - return be[0].(*keystore.KeyStore).NewAccount(resp.Password) + acc, err := be[0].(*keystore.KeyStore).NewAccount(resp.Text) + log.Info("Your new key was generated", "address", acc.Address) + log.Warn("Please backup your key file!", "path", acc.URL.Path) + log.Warn("Please remember your password!") + return acc.Address, err } } // Otherwise fail, with generic error message - return accounts.Account{}, errors.New("account creation failed") + return common.Address{}, errors.New("account creation failed") } // logDiff logs the difference between the incoming (original) transaction and the one returned from the signer. @@ -449,13 +476,33 @@ func logDiff(original *SignTxRequest, new *SignTxResponse) bool { return modified } +func (api *SignerAPI) lookupPassword(address common.Address) (string, error) { + return api.credentials.Get(address.Hex()) +} + +func (api *SignerAPI) lookupOrQueryPassword(address common.Address, title, prompt string) (string, error) { + // Look up the password and return if available + if pw, err := api.lookupPassword(address); err == nil { + return pw, nil + } + // Password unavailable, request it from the user + pwResp, err := api.UI.OnInputRequired(UserInputRequest{title, prompt, true}) + if err != nil { + log.Warn("error obtaining password", "error", err) + // We'll not forward the error here, in case the error contains info about the response from the UI, + // which could leak the password if it was malformed json or something + return "", errors.New("internal error") + } + return pwResp.Text, nil +} + // SignTransaction signs the given Transaction and returns it both as json and rlp-encoded form func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { var ( err error result SignTxResponse ) - msgs, err := api.validator.ValidateTransaction(&args, methodSelector) + msgs, err := api.validator.ValidateTransaction(methodSelector, &args) if err != nil { return nil, err } @@ -465,7 +512,6 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth return nil, err } } - req := SignTxRequest{ Transaction: args, Meta: MetadataFromContext(ctx), @@ -492,9 +538,14 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth } // Convert fields into a real transaction var unsignedTx = result.Transaction.toTransaction() - + // Get the password for the transaction + pw, err := api.lookupOrQueryPassword(acc.Address, "Account password", + fmt.Sprintf("Please enter the password for account %s", acc.Address.String())) + if err != nil { + return nil, err + } // The one to sign is the one that was returned from the UI - signedTx, err := wallet.SignTxWithPassphrase(acc, result.Password, unsignedTx, api.chainID) + signedTx, err := wallet.SignTxWithPassphrase(acc, pw, unsignedTx, api.chainID) if err != nil { api.UI.ShowError(err.Error()) return nil, err @@ -510,103 +561,8 @@ func (api *SignerAPI) SignTransaction(ctx context.Context, args SendTxArgs, meth } -// Sign calculates an Ethereum ECDSA signature for: -// keccack256("\x19Ethereum Signed Message:\n" + len(message) + message)) -// -// Note, the produced signature conforms to the secp256k1 curve R, S and V values, -// where the V value will be 27 or 28 for legacy reasons. -// -// The key used to calculate the signature is decrypted with the given password. -// -// https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign -func (api *SignerAPI) Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) { - sighash, msg := SignHash(data) - // We make the request prior to looking up if we actually have the account, to prevent - // account-enumeration via the API - req := &SignDataRequest{Address: addr, Rawdata: data, Message: msg, Hash: sighash, Meta: MetadataFromContext(ctx)} - res, err := api.UI.ApproveSignData(req) - - if err != nil { - return nil, err - } - if !res.Approved { - return nil, ErrRequestDenied - } - // Look up the wallet containing the requested signer - account := accounts.Account{Address: addr.Address()} - wallet, err := api.am.Find(account) - if err != nil { - return nil, err - } - // Assemble sign the data with the wallet - signature, err := wallet.SignHashWithPassphrase(account, res.Password, sighash) - if err != nil { - api.UI.ShowError(err.Error()) - return nil, err - } - signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper - return signature, nil -} - -// SignHash is a helper function that calculates a hash for the given message that can be -// safely used to calculate a signature from. -// -// The hash is calculated as -// keccak256("\x19Ethereum Signed Message:\n"${message length}${message}). -// -// This gives context to the signed message and prevents signing of transactions. -func SignHash(data []byte) ([]byte, string) { - msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - return crypto.Keccak256([]byte(msg)), msg -} - -// Export returns encrypted private key associated with the given address in web3 keystore format. -func (api *SignerAPI) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { - res, err := api.UI.ApproveExport(&ExportRequest{Address: addr, Meta: MetadataFromContext(ctx)}) - - if err != nil { - return nil, err - } - if !res.Approved { - return nil, ErrRequestDenied - } - // Look up the wallet containing the requested signer - wallet, err := api.am.Find(accounts.Account{Address: addr}) - if err != nil { - return nil, err - } - if wallet.URL().Scheme != keystore.KeyStoreScheme { - return nil, fmt.Errorf("Account is not a keystore-account") - } - return ioutil.ReadFile(wallet.URL().Path) -} - -// Import tries to import the given keyJSON in the local keystore. The keyJSON data is expected to be -// in web3 keystore format. It will decrypt the keyJSON with the given passphrase and on successful -// decryption it will encrypt the key with the given newPassphrase and store it in the keystore. -// OBS! This method is removed from the public API. It should not be exposed on the external API -// for a couple of reasons: -// 1. Even though it is encrypted, it should still be seen as sensitive data -// 2. It can be used to DoS clef, by using malicious data with e.g. extreme large -// values for the kdfparams. -func (api *SignerAPI) Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) { - be := api.am.Backends(keystore.KeyStoreType) - - if len(be) == 0 { - return Account{}, errors.New("password based accounts not supported") - } - res, err := api.UI.ApproveImport(&ImportRequest{Meta: MetadataFromContext(ctx)}) - - if err != nil { - return Account{}, err - } - if !res.Approved { - return Account{}, ErrRequestDenied - } - acc, err := be[0].(*keystore.KeyStore).Import(keyJSON, res.OldPassword, res.NewPassword) - if err != nil { - api.UI.ShowError(err.Error()) - return Account{}, err - } - return Account{Typ: "Account", URL: acc.URL, Address: acc.Address}, nil +// Returns the external api version. This method does not require user acceptance. Available methods are +// available via enumeration anyway, and this info does not contain user-specific data +func (api *SignerAPI) Version(ctx context.Context) (string, error) { + return ExternalAPIVersion, nil } diff --git a/signer/core/api_test.go b/signer/core/api_test.go index a8aa23896e6c..30948f99bfc5 100644 --- a/signer/core/api_test.go +++ b/signer/core/api_test.go @@ -1,25 +1,24 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . -// -package core +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core_test import ( "bytes" "context" - "errors" "fmt" "io/ioutil" "math/big" @@ -28,91 +27,82 @@ import ( "testing" "time" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/signer/core" + "github.com/ethereum/go-ethereum/signer/fourbyte" + "github.com/ethereum/go-ethereum/signer/storage" ) //Used for testing -type HeadlessUI struct { - controller chan string -} - -func (ui *HeadlessUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { - return UserInputResponse{}, errors.New("not implemented") +type headlessUi struct { + approveCh chan string // to send approve/deny + inputCh chan string // to send password } -func (ui *HeadlessUI) OnSignerStartup(info StartupInfo) { +func (ui *headlessUi) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { + input := <-ui.inputCh + return core.UserInputResponse{Text: input}, nil } -func (ui *HeadlessUI) OnApprovedTx(tx ethapi.SignTransactionResult) { - fmt.Printf("OnApproved()\n") -} +func (ui *headlessUi) OnSignerStartup(info core.StartupInfo) {} +func (ui *headlessUi) RegisterUIServer(api *core.UIServerAPI) {} +func (ui *headlessUi) OnApprovedTx(tx ethapi.SignTransactionResult) {} -func (ui *HeadlessUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { +func (ui *headlessUi) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { - switch <-ui.controller { + switch <-ui.approveCh { case "Y": - return SignTxResponse{request.Transaction, true, <-ui.controller}, nil - case "M": //Modify + return core.SignTxResponse{request.Transaction, true}, nil + case "M": // modify + // The headless UI always modifies the transaction old := big.Int(request.Transaction.Value) newVal := big.NewInt(0).Add(&old, big.NewInt(1)) request.Transaction.Value = hexutil.Big(*newVal) - return SignTxResponse{request.Transaction, true, <-ui.controller}, nil + return core.SignTxResponse{request.Transaction, true}, nil default: - return SignTxResponse{request.Transaction, false, ""}, nil + return core.SignTxResponse{request.Transaction, false}, nil } } -func (ui *HeadlessUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { - if "Y" == <-ui.controller { - return SignDataResponse{true, <-ui.controller}, nil - } - return SignDataResponse{false, ""}, nil +func (ui *headlessUi) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { + approved := "Y" == <-ui.approveCh + return core.SignDataResponse{approved}, nil } -func (ui *HeadlessUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - return ExportResponse{<-ui.controller == "Y"}, nil - -} - -func (ui *HeadlessUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - if "Y" == <-ui.controller { - return ImportResponse{true, <-ui.controller, <-ui.controller}, nil - } - return ImportResponse{false, "", ""}, nil -} - -func (ui *HeadlessUI) ApproveListing(request *ListRequest) (ListResponse, error) { - switch <-ui.controller { +func (ui *headlessUi) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { + approval := <-ui.approveCh + //fmt.Printf("approval %s\n", approval) + switch approval { case "A": - return ListResponse{request.Accounts}, nil + return core.ListResponse{request.Accounts}, nil case "1": - l := make([]Account, 1) + l := make([]accounts.Account, 1) l[0] = request.Accounts[1] - return ListResponse{l}, nil + return core.ListResponse{l}, nil default: - return ListResponse{nil}, nil + return core.ListResponse{nil}, nil } } -func (ui *HeadlessUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { - if "Y" == <-ui.controller { - return NewAccountResponse{true, <-ui.controller}, nil +func (ui *headlessUi) ApproveNewAccount(request *core.NewAccountRequest) (core.NewAccountResponse, error) { + if "Y" == <-ui.approveCh { + return core.NewAccountResponse{true}, nil } - return NewAccountResponse{false, ""}, nil + return core.NewAccountResponse{false}, nil } -func (ui *HeadlessUI) ShowError(message string) { +func (ui *headlessUi) ShowError(message string) { //stdout is used by communication fmt.Fprintln(os.Stderr, message) } -func (ui *HeadlessUI) ShowInfo(message string) { +func (ui *headlessUi) ShowInfo(message string) { //stdout is used by communication fmt.Fprintln(os.Stderr, message) } @@ -129,30 +119,20 @@ func tmpDirName(t *testing.T) string { return d } -func setup(t *testing.T) (*SignerAPI, chan string) { - - controller := make(chan string, 20) - - db, err := NewAbiDBFromFile("../../cmd/clef/4byte.json") +func setup(t *testing.T) (*core.SignerAPI, *headlessUi) { + db, err := fourbyte.New() if err != nil { - utils.Fatalf(err.Error()) + t.Fatal(err.Error()) } - var ( - ui = &HeadlessUI{controller} - api = NewSignerAPI( - 1, - tmpDirName(t), - true, - ui, - db, - true, true) - ) - return api, controller -} -func createAccount(control chan string, api *SignerAPI, t *testing.T) { + ui := &headlessUi{make(chan string, 20), make(chan string, 20)} + am := core.StartClefAccountManager(tmpDirName(t), true, true, "") + api := core.NewSignerAPI(am, 1337, true, ui, db, true, &storage.NoStorage{}) + return api, ui - control <- "Y" - control <- "a_long_password" +} +func createAccount(ui *headlessUi, api *core.SignerAPI, t *testing.T) { + ui.approveCh <- "Y" + ui.inputCh <- "a_long_password" _, err := api.New(context.Background()) if err != nil { t.Fatal(err) @@ -161,48 +141,48 @@ func createAccount(control chan string, api *SignerAPI, t *testing.T) { time.Sleep(250 * time.Millisecond) } -func failCreateAccountWithPassword(control chan string, api *SignerAPI, password string, t *testing.T) { +func failCreateAccountWithPassword(ui *headlessUi, api *core.SignerAPI, password string, t *testing.T) { - control <- "Y" - control <- password - control <- "Y" - control <- password - control <- "Y" - control <- password + ui.approveCh <- "Y" + // We will be asked three times to provide a suitable password + ui.inputCh <- password + ui.inputCh <- password + ui.inputCh <- password - acc, err := api.New(context.Background()) + addr, err := api.New(context.Background()) if err == nil { t.Fatal("Should have returned an error") } - if acc.Address != (common.Address{}) { + if addr != (common.Address{}) { t.Fatal("Empty address should be returned") } } -func failCreateAccount(control chan string, api *SignerAPI, t *testing.T) { - control <- "N" - acc, err := api.New(context.Background()) - if err != ErrRequestDenied { +func failCreateAccount(ui *headlessUi, api *core.SignerAPI, t *testing.T) { + ui.approveCh <- "N" + addr, err := api.New(context.Background()) + if err != core.ErrRequestDenied { t.Fatal(err) } - if acc.Address != (common.Address{}) { + if addr != (common.Address{}) { t.Fatal("Empty address should be returned") } } -func list(control chan string, api *SignerAPI, t *testing.T) []common.Address { - control <- "A" - list, err := api.List(context.Background()) - if err != nil { - t.Fatal(err) - } - return list +func list(ui *headlessUi, api *core.SignerAPI, t *testing.T) ([]common.Address, error) { + ui.approveCh <- "A" + return api.List(context.Background()) + } func TestNewAcc(t *testing.T) { api, control := setup(t) verifyNum := func(num int) { - if list := list(control, api, t); len(list) != num { + list, err := list(control, api, t) + if err != nil { + t.Errorf("Unexpected error %v", err) + } + if len(list) != num { t.Errorf("Expected %d accounts, got %d", num, len(list)) } } @@ -215,18 +195,16 @@ func TestNewAcc(t *testing.T) { failCreateAccount(control, api, t) createAccount(control, api, t) failCreateAccount(control, api, t) - verifyNum(4) // Fail to create this, due to bad password failCreateAccountWithPassword(control, api, "short", t) failCreateAccountWithPassword(control, api, "longerbutbad\rfoo", t) - verifyNum(4) // Testing listing: // Listing one Account - control <- "1" + control.approveCh <- "1" list, err := api.List(context.Background()) if err != nil { t.Fatal(err) @@ -235,63 +213,24 @@ func TestNewAcc(t *testing.T) { t.Fatalf("List should only show one Account") } // Listing denied - control <- "Nope" + control.approveCh <- "Nope" list, err = api.List(context.Background()) if len(list) != 0 { t.Fatalf("List should be empty") } - if err != ErrRequestDenied { + if err != core.ErrRequestDenied { t.Fatal("Expected deny") } } -func TestSignData(t *testing.T) { - api, control := setup(t) - //Create two accounts - createAccount(control, api, t) - createAccount(control, api, t) - control <- "1" - list, err := api.List(context.Background()) - if err != nil { - t.Fatal(err) - } - a := common.NewMixedcaseAddress(list[0]) - - control <- "Y" - control <- "wrongpassword" - h, err := api.Sign(context.Background(), a, []byte("EHLO world")) - if h != nil { - t.Errorf("Expected nil-data, got %x", h) - } - if err != keystore.ErrDecrypt { - t.Errorf("Expected ErrLocked! %v", err) - } - control <- "No way" - h, err = api.Sign(context.Background(), a, []byte("EHLO world")) - if h != nil { - t.Errorf("Expected nil-data, got %x", h) - } - if err != ErrRequestDenied { - t.Errorf("Expected ErrRequestDenied! %v", err) - } - control <- "Y" - control <- "a_long_password" - h, err = api.Sign(context.Background(), a, []byte("EHLO world")) - if err != nil { - t.Fatal(err) - } - if h == nil || len(h) != 65 { - t.Errorf("Expected 65 byte signature (got %d bytes)", len(h)) - } -} -func mkTestTx(from common.MixedcaseAddress) SendTxArgs { +func mkTestTx(from common.MixedcaseAddress) core.SendTxArgs { to := common.NewMixedcaseAddress(common.HexToAddress("0x1337")) gas := hexutil.Uint64(21000) gasPrice := (hexutil.Big)(*big.NewInt(2000000000)) value := (hexutil.Big)(*big.NewInt(1e18)) nonce := (hexutil.Uint64)(0) data := hexutil.Bytes(common.Hex2Bytes("01020304050607080a")) - tx := SendTxArgs{ + tx := core.SendTxArgs{ From: from, To: &to, Gas: gas, @@ -311,7 +250,7 @@ func TestSignTx(t *testing.T) { api, control := setup(t) createAccount(control, api, t) - control <- "A" + control.approveCh <- "A" list, err = api.List(context.Background()) if err != nil { t.Fatal(err) @@ -321,8 +260,8 @@ func TestSignTx(t *testing.T) { methodSig := "test(uint)" tx := mkTestTx(a) - control <- "Y" - control <- "wrongpassword" + control.approveCh <- "Y" + control.inputCh <- "wrongpassword" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if res != nil { t.Errorf("Expected nil-response, got %v", res) @@ -330,16 +269,17 @@ func TestSignTx(t *testing.T) { if err != keystore.ErrDecrypt { t.Errorf("Expected ErrLocked! %v", err) } - control <- "No way" + control.approveCh <- "No way" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if res != nil { t.Errorf("Expected nil-response, got %v", res) } - if err != ErrRequestDenied { + if err != core.ErrRequestDenied { t.Errorf("Expected ErrRequestDenied! %v", err) } - control <- "Y" - control <- "a_long_password" + // Sign with correct password + control.approveCh <- "Y" + control.inputCh <- "a_long_password" res, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -352,8 +292,8 @@ func TestSignTx(t *testing.T) { if parsedTx.Value().Cmp(tx.Value.ToInt()) != 0 { t.Errorf("Expected value to be unchanged, expected %v got %v", tx.Value, parsedTx.Value()) } - control <- "Y" - control <- "a_long_password" + control.approveCh <- "Y" + control.inputCh <- "a_long_password" res2, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -364,8 +304,8 @@ func TestSignTx(t *testing.T) { } //The tx is modified by the UI - control <- "M" - control <- "a_long_password" + control.approveCh <- "M" + control.inputCh <- "a_long_password" res2, err = api.SignTransaction(context.Background(), tx, &methodSig) if err != nil { @@ -383,31 +323,3 @@ func TestSignTx(t *testing.T) { } } - -/* -func TestAsyncronousResponses(t *testing.T){ - - //Set up one account - api, control := setup(t) - createAccount(control, api, t) - - // Two transactions, the second one with larger value than the first - tx1 := mkTestTx() - newVal := big.NewInt(0).Add((*big.Int) (tx1.Value), big.NewInt(1)) - tx2 := mkTestTx() - tx2.Value = (*hexutil.Big)(newVal) - - control <- "W" //wait - control <- "Y" // - control <- "a_long_password" - control <- "Y" // - control <- "a_long_password" - - var err error - - h1, err := api.SignTransaction(context.Background(), common.HexToAddress("1111"), tx1, nil) - h2, err := api.SignTransaction(context.Background(), common.HexToAddress("2222"), tx2, nil) - - - } -*/ diff --git a/signer/core/auditlog.go b/signer/core/auditlog.go index 1f9c90918594..1092e7a92340 100644 --- a/signer/core/auditlog.go +++ b/signer/core/auditlog.go @@ -1,27 +1,24 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core import ( "context" - "encoding/json" - - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/internal/ethapi" @@ -41,7 +38,7 @@ func (l *AuditLogger) List(ctx context.Context) ([]common.Address, error) { return res, e } -func (l *AuditLogger) New(ctx context.Context) (accounts.Account, error) { +func (l *AuditLogger) New(ctx context.Context) (common.Address, error) { return l.api.New(ctx) } @@ -63,31 +60,37 @@ func (l *AuditLogger) SignTransaction(ctx context.Context, args SendTxArgs, meth return res, e } -func (l *AuditLogger) Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) { - l.log.Info("Sign", "type", "request", "metadata", MetadataFromContext(ctx).String(), - "addr", addr.String(), "data", common.Bytes2Hex(data)) - b, e := l.api.Sign(ctx, addr, data) - l.log.Info("Sign", "type", "response", "data", common.Bytes2Hex(b), "error", e) +func (l *AuditLogger) SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) { + l.log.Info("SignData", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "addr", addr.String(), "data", data, "content-type", contentType) + b, e := l.api.SignData(ctx, contentType, addr, data) + l.log.Info("SignData", "type", "response", "data", common.Bytes2Hex(b), "error", e) return b, e } -func (l *AuditLogger) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { - l.log.Info("Export", "type", "request", "metadata", MetadataFromContext(ctx).String(), - "addr", addr.Hex()) - j, e := l.api.Export(ctx, addr) - // In this case, we don't actually log the json-response, which may be extra sensitive - l.log.Info("Export", "type", "response", "json response size", len(j), "error", e) - return j, e +func (l *AuditLogger) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, data TypedData) (hexutil.Bytes, error) { + l.log.Info("SignTypedData", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "addr", addr.String(), "data", data) + b, e := l.api.SignTypedData(ctx, addr, data) + l.log.Info("SignTypedData", "type", "response", "data", common.Bytes2Hex(b), "error", e) + return b, e } -//func (l *AuditLogger) Import(ctx context.Context, keyJSON json.RawMessage) (Account, error) { -// // Don't actually log the json contents -// l.log.Info("Import", "type", "request", "metadata", MetadataFromContext(ctx).String(), -// "keyJSON size", len(keyJSON)) -// a, e := l.api.Import(ctx, keyJSON) -// l.log.Info("Import", "type", "response", "addr", a.String(), "error", e) -// return a, e -//} +func (l *AuditLogger) EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) { + l.log.Info("EcRecover", "type", "request", "metadata", MetadataFromContext(ctx).String(), + "data", common.Bytes2Hex(data), "sig", common.Bytes2Hex(sig)) + b, e := l.api.EcRecover(ctx, data, sig) + l.log.Info("EcRecover", "type", "response", "address", b.String(), "error", e) + return b, e +} + +func (l *AuditLogger) Version(ctx context.Context) (string, error) { + l.log.Info("Version", "type", "request", "metadata", MetadataFromContext(ctx).String()) + data, err := l.api.Version(ctx) + l.log.Info("Version", "type", "response", "data", data, "error", err) + return data, err + +} func NewAuditLogger(path string, api ExternalAPI) (*AuditLogger, error) { l := log.New("api", "signer") diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 940f1f43aadb..1502238bf790 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -1,30 +1,29 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core import ( "bufio" + "encoding/json" "fmt" "os" "strings" - "sync" - "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" @@ -40,6 +39,10 @@ func NewCommandlineUI() *CommandlineUI { return &CommandlineUI{in: bufio.NewReader(os.Stdin)} } +func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) { + // noop +} + // readString reads a single line from stdin, trimming if from spaces, enforcing // non-emptyness. func (ui *CommandlineUI) readString() string { @@ -84,9 +87,10 @@ func (ui *CommandlineUI) readPasswordText(inputstring string) string { } func (ui *CommandlineUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { - fmt.Println(info.Title) - fmt.Println(info.Prompt) + + fmt.Printf("## %s\n\n%s\n", info.Title, info.Prompt) if info.IsPassword { + fmt.Printf("> ") text, err := terminal.ReadPassword(int(os.Stdin.Fd())) if err != nil { log.Error("Failed to read password", "err", err) @@ -153,9 +157,9 @@ func (ui *CommandlineUI) ApproveTx(request *SignTxRequest) (SignTxResponse, erro showMetadata(request.Meta) fmt.Printf("-------------------------------------------\n") if !ui.confirm() { - return SignTxResponse{request.Transaction, false, ""}, nil + return SignTxResponse{request.Transaction, false}, nil } - return SignTxResponse{request.Transaction, true, ui.readPassword()}, nil + return SignTxResponse{request.Transaction, true}, nil } // ApproveSignData prompt the user for confirmation to request to sign data @@ -165,52 +169,23 @@ func (ui *CommandlineUI) ApproveSignData(request *SignDataRequest) (SignDataResp fmt.Printf("-------- Sign data request--------------\n") fmt.Printf("Account: %s\n", request.Address.String()) - fmt.Printf("message: \n%q\n", request.Message) - fmt.Printf("raw data: \n%v\n", request.Rawdata) - fmt.Printf("message hash: %v\n", request.Hash) - fmt.Printf("-------------------------------------------\n") - showMetadata(request.Meta) - if !ui.confirm() { - return SignDataResponse{false, ""}, nil + fmt.Printf("messages:\n") + for _, nvt := range request.Messages { + fmt.Printf("\u00a0\u00a0%v\n", strings.TrimSpace(nvt.Pprint(1))) } - return SignDataResponse{true, ui.readPassword()}, nil -} - -// ApproveExport prompt the user for confirmation to export encrypted Account json -func (ui *CommandlineUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - ui.mu.Lock() - defer ui.mu.Unlock() - - fmt.Printf("-------- Export Account request--------------\n") - fmt.Printf("A request has been made to export the (encrypted) keyfile\n") - fmt.Printf("Approving this operation means that the caller obtains the (encrypted) contents\n") - fmt.Printf("\n") - fmt.Printf("Account: %x\n", request.Address) - //fmt.Printf("keyfile: \n%v\n", request.file) - fmt.Printf("-------------------------------------------\n") - showMetadata(request.Meta) - return ExportResponse{ui.confirm()}, nil -} - -// ApproveImport prompt the user for confirmation to import Account json -func (ui *CommandlineUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - ui.mu.Lock() - defer ui.mu.Unlock() - - fmt.Printf("-------- Import Account request--------------\n") - fmt.Printf("A request has been made to import an encrypted keyfile\n") + fmt.Printf("raw data: \n%q\n", request.Rawdata) + fmt.Printf("data hash: %v\n", request.Hash) fmt.Printf("-------------------------------------------\n") showMetadata(request.Meta) if !ui.confirm() { - return ImportResponse{false, "", ""}, nil + return SignDataResponse{false}, nil } - return ImportResponse{true, ui.readPasswordText("Old password"), ui.readPasswordText("New password")}, nil + return SignDataResponse{true}, nil } // ApproveListing prompt the user for confirmation to list accounts // the list of accounts to list can be modified by the UI func (ui *CommandlineUI) ApproveListing(request *ListRequest) (ListResponse, error) { - ui.mu.Lock() defer ui.mu.Unlock() @@ -220,7 +195,6 @@ func (ui *CommandlineUI) ApproveListing(request *ListRequest) (ListResponse, err for _, account := range request.Accounts { fmt.Printf(" [x] %v\n", account.Address.Hex()) fmt.Printf(" URL: %v\n", account.URL) - fmt.Printf(" Type: %v\n", account.Typ) } fmt.Printf("-------------------------------------------\n") showMetadata(request.Meta) @@ -242,26 +216,29 @@ func (ui *CommandlineUI) ApproveNewAccount(request *NewAccountRequest) (NewAccou fmt.Printf("and the address is returned to the external caller\n\n") showMetadata(request.Meta) if !ui.confirm() { - return NewAccountResponse{false, ""}, nil + return NewAccountResponse{false}, nil } - return NewAccountResponse{true, ui.readPassword()}, nil + return NewAccountResponse{true}, nil } // ShowError displays error message to user func (ui *CommandlineUI) ShowError(message string) { - fmt.Printf("-------- Error message from Clef-----------\n") - fmt.Println(message) + fmt.Printf("## Error \n%s\n", message) fmt.Printf("-------------------------------------------\n") } // ShowInfo displays info message to user func (ui *CommandlineUI) ShowInfo(message string) { - fmt.Printf("Info: %v\n", message) + fmt.Printf("## Info \n%s\n", message) } func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { fmt.Printf("Transaction signed:\n ") - spew.Dump(tx.Tx) + if jsn, err := json.MarshalIndent(tx.Tx, " ", " "); err != nil { + fmt.Printf("WARN: marshalling error %v\n", err) + } else { + fmt.Println(string(jsn)) + } } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go new file mode 100644 index 000000000000..f512be7ceaec --- /dev/null +++ b/signer/core/signed_data.go @@ -0,0 +1,1002 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "bytes" + "context" + "errors" + "fmt" + "math/big" + "mime" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "unicode" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/consensus/clique" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" +) + +type SigFormat struct { + Mime string + ByteVersion byte +} + +var ( + IntendedValidator = SigFormat{ + accounts.MimetypeDataWithValidator, + 0x00, + } + DataTyped = SigFormat{ + accounts.MimetypeTypedData, + 0x01, + } + ApplicationClique = SigFormat{ + accounts.MimetypeClique, + 0x02, + } + TextPlain = SigFormat{ + accounts.MimetypeTextPlain, + 0x45, + } +) + +type ValidatorData struct { + Address common.Address + Message hexutil.Bytes +} + +type TypedData struct { + Types Types `json:"types"` + PrimaryType string `json:"primaryType"` + Domain TypedDataDomain `json:"domain"` + Message TypedDataMessage `json:"message"` +} + +type Type struct { + Name string `json:"name"` + Type string `json:"type"` +} + +func (t *Type) isArray() bool { + return strings.HasSuffix(t.Type, "[]") +} + +// typeName returns the canonical name of the type. If the type is 'Person[]', then +// this method returns 'Person' +func (t *Type) typeName() string { + if strings.HasSuffix(t.Type, "[]") { + return strings.TrimSuffix(t.Type, "[]") + } + return t.Type +} + +func (t *Type) isReferenceType() bool { + if len(t.Type) == 0 { + return false + } + // Reference types must have a leading uppercase characer + return unicode.IsUpper([]rune(t.Type)[0]) +} + +type Types map[string][]Type + +type TypePriority struct { + Type string + Value uint +} + +type TypedDataMessage = map[string]interface{} + +type TypedDataDomain struct { + Name string `json:"name"` + Version string `json:"version"` + ChainId *math.HexOrDecimal256 `json:"chainId"` + VerifyingContract string `json:"verifyingContract"` + Salt string `json:"salt"` +} + +var typedDataReferenceTypeRegexp = regexp.MustCompile(`^[A-Z](\w*)(\[\])?$`) + +// sign receives a request and produces a signature +// +// Note, the produced signature conforms to the secp256k1 curve R, S and V values, +// where the V value will be 27 or 28 for legacy reasons, if legacyV==true. +func (api *SignerAPI) sign(addr common.MixedcaseAddress, req *SignDataRequest, legacyV bool) (hexutil.Bytes, error) { + // We make the request prior to looking up if we actually have the account, to prevent + // account-enumeration via the API + res, err := api.UI.ApproveSignData(req) + if err != nil { + return nil, err + } + if !res.Approved { + return nil, ErrRequestDenied + } + // Look up the wallet containing the requested signer + account := accounts.Account{Address: addr.Address()} + wallet, err := api.am.Find(account) + if err != nil { + return nil, err + } + pw, err := api.lookupOrQueryPassword(account.Address, + "Password for signing", + fmt.Sprintf("Please enter password for signing data with account %s", account.Address.Hex())) + if err != nil { + return nil, err + } + // Sign the data with the wallet + signature, err := wallet.SignDataWithPassphrase(account, pw, req.ContentType, req.Rawdata) + if err != nil { + return nil, err + } + if legacyV { + signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper + } + return signature, nil +} + +// SignData signs the hash of the provided data, but does so differently +// depending on the content-type specified. +// +// Different types of validation occur. +func (api *SignerAPI) SignData(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (hexutil.Bytes, error) { + var req, transformV, err = api.determineSignatureFormat(ctx, contentType, addr, data) + if err != nil { + return nil, err + } + signature, err := api.sign(addr, req, transformV) + if err != nil { + api.UI.ShowError(err.Error()) + return nil, err + } + return signature, nil +} + +// determineSignatureFormat determines which signature method should be used based upon the mime type +// In the cases where it matters ensure that the charset is handled. The charset +// resides in the 'params' returned as the second returnvalue from mime.ParseMediaType +// charset, ok := params["charset"] +// As it is now, we accept any charset and just treat it as 'raw'. +// This method returns the mimetype for signing along with the request +func (api *SignerAPI) determineSignatureFormat(ctx context.Context, contentType string, addr common.MixedcaseAddress, data interface{}) (*SignDataRequest, bool, error) { + var ( + req *SignDataRequest + useEthereumV = true // Default to use V = 27 or 28, the legacy Ethereum format + ) + mediaType, _, err := mime.ParseMediaType(contentType) + if err != nil { + return nil, useEthereumV, err + } + + switch mediaType { + case IntendedValidator.Mime: + // Data with an intended validator + validatorData, err := UnmarshalValidatorData(data) + if err != nil { + return nil, useEthereumV, err + } + sighash, msg := SignTextValidator(validatorData) + messages := []*NameValueType{ + { + Name: "This is a request to sign data intended for a particular validator (see EIP 191 version 0)", + Typ: "description", + Value: "", + }, + { + Name: "Intended validator address", + Typ: "address", + Value: validatorData.Address.String(), + }, + { + Name: "Application-specific data", + Typ: "hexdata", + Value: validatorData.Message, + }, + { + Name: "Full message for signing", + Typ: "hexdata", + Value: fmt.Sprintf("0x%x", msg), + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Messages: messages, Hash: sighash} + case ApplicationClique.Mime: + // Clique is the Ethereum PoA standard + stringData, ok := data.(string) + if !ok { + return nil, useEthereumV, fmt.Errorf("input for %v must be an hex-encoded string", ApplicationClique.Mime) + } + cliqueData, err := hexutil.Decode(stringData) + if err != nil { + return nil, useEthereumV, err + } + header := &types.Header{} + if err := rlp.DecodeBytes(cliqueData, header); err != nil { + return nil, useEthereumV, err + } + // The incoming clique header is already truncated, sent to us with a extradata already shortened + if len(header.Extra) < 65 { + // Need to add it back, to get a suitable length for hashing + newExtra := make([]byte, len(header.Extra)+65) + copy(newExtra, header.Extra) + header.Extra = newExtra + } + // Get back the rlp data, encoded by us + sighash, cliqueRlp, err := cliqueHeaderHashAndRlp(header) + if err != nil { + return nil, useEthereumV, err + } + messages := []*NameValueType{ + { + Name: "Clique header", + Typ: "clique", + Value: fmt.Sprintf("clique header %d [0x%x]", header.Number, header.Hash()), + }, + } + // Clique uses V on the form 0 or 1 + useEthereumV = false + req = &SignDataRequest{ContentType: mediaType, Rawdata: cliqueRlp, Messages: messages, Hash: sighash} + default: // also case TextPlain.Mime: + // Calculates an Ethereum ECDSA signature for: + // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") + // We expect it to be a string + if stringData, ok := data.(string); !ok { + return nil, useEthereumV, fmt.Errorf("input for text/plain must be an hex-encoded string") + } else { + if textData, err := hexutil.Decode(stringData); err != nil { + return nil, useEthereumV, err + } else { + sighash, msg := accounts.TextAndHash(textData) + messages := []*NameValueType{ + { + Name: "message", + Typ: accounts.MimetypeTextPlain, + Value: msg, + }, + } + req = &SignDataRequest{ContentType: mediaType, Rawdata: []byte(msg), Messages: messages, Hash: sighash} + } + } + } + req.Address = addr + req.Meta = MetadataFromContext(ctx) + return req, useEthereumV, nil +} + +// SignTextWithValidator signs the given message which can be further recovered +// with the given validator. +// hash = keccak256("\x19\x00"${address}${data}). +func SignTextValidator(validatorData ValidatorData) (hexutil.Bytes, string) { + msg := fmt.Sprintf("\x19\x00%s%s", string(validatorData.Address.Bytes()), string(validatorData.Message)) + return crypto.Keccak256([]byte(msg)), msg +} + +// cliqueHeaderHashAndRlp returns the hash which is used as input for the proof-of-authority +// signing. It is the hash of the entire header apart from the 65 byte signature +// contained at the end of the extra data. +// +// The method requires the extra data to be at least 65 bytes -- the original implementation +// in clique.go panics if this is the case, thus it's been reimplemented here to avoid the panic +// and simply return an error instead +func cliqueHeaderHashAndRlp(header *types.Header) (hash, rlp []byte, err error) { + if len(header.Extra) < 65 { + err = fmt.Errorf("clique header extradata too short, %d < 65", len(header.Extra)) + return + } + rlp = clique.CliqueRLP(header) + hash = clique.SealHash(header).Bytes() + return hash, rlp, err +} + +// SignTypedData signs EIP-712 conformant typed data +// hash = keccak256("\x19${byteVersion}${domainSeparator}${hashStruct(message)}") +func (api *SignerAPI) SignTypedData(ctx context.Context, addr common.MixedcaseAddress, typedData TypedData) (hexutil.Bytes, error) { + domainSeparator, err := typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) + if err != nil { + return nil, err + } + typedDataHash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) + if err != nil { + return nil, err + } + rawData := []byte(fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash))) + sighash := crypto.Keccak256(rawData) + messages, err := typedData.Format() + if err != nil { + return nil, err + } + req := &SignDataRequest{ContentType: DataTyped.Mime, Rawdata: rawData, Messages: messages, Hash: sighash} + signature, err := api.sign(addr, req, true) + if err != nil { + api.UI.ShowError(err.Error()) + return nil, err + } + return signature, nil +} + +// HashStruct generates a keccak256 hash of the encoding of the provided data +func (typedData *TypedData) HashStruct(primaryType string, data TypedDataMessage) (hexutil.Bytes, error) { + encodedData, err := typedData.EncodeData(primaryType, data, 1) + if err != nil { + return nil, err + } + return crypto.Keccak256(encodedData), nil +} + +// Dependencies returns an array of custom types ordered by their hierarchical reference tree +func (typedData *TypedData) Dependencies(primaryType string, found []string) []string { + includes := func(arr []string, str string) bool { + for _, obj := range arr { + if obj == str { + return true + } + } + return false + } + + if includes(found, primaryType) { + return found + } + if typedData.Types[primaryType] == nil { + return found + } + found = append(found, primaryType) + for _, field := range typedData.Types[primaryType] { + for _, dep := range typedData.Dependencies(field.Type, found) { + if !includes(found, dep) { + found = append(found, dep) + } + } + } + return found +} + +// EncodeType generates the following encoding: +// `name ‖ "(" ‖ member₁ ‖ "," ‖ member₂ ‖ "," ‖ … ‖ memberₙ ")"` +// +// each member is written as `type ‖ " " ‖ name` encodings cascade down and are sorted by name +func (typedData *TypedData) EncodeType(primaryType string) hexutil.Bytes { + // Get dependencies primary first, then alphabetical + deps := typedData.Dependencies(primaryType, []string{}) + if len(deps) > 0 { + slicedDeps := deps[1:] + sort.Strings(slicedDeps) + deps = append([]string{primaryType}, slicedDeps...) + } + + // Format as a string with fields + var buffer bytes.Buffer + for _, dep := range deps { + buffer.WriteString(dep) + buffer.WriteString("(") + for _, obj := range typedData.Types[dep] { + buffer.WriteString(obj.Type) + buffer.WriteString(" ") + buffer.WriteString(obj.Name) + buffer.WriteString(",") + } + buffer.Truncate(buffer.Len() - 1) + buffer.WriteString(")") + } + return buffer.Bytes() +} + +// TypeHash creates the keccak256 hash of the data +func (typedData *TypedData) TypeHash(primaryType string) hexutil.Bytes { + return crypto.Keccak256(typedData.EncodeType(primaryType)) +} + +// EncodeData generates the following encoding: +// `enc(value₁) ‖ enc(value₂) ‖ … ‖ enc(valueₙ)` +// +// each encoded member is 32-byte long +func (typedData *TypedData) EncodeData(primaryType string, data map[string]interface{}, depth int) (hexutil.Bytes, error) { + if err := typedData.validate(); err != nil { + return nil, err + } + + buffer := bytes.Buffer{} + + // Verify extra data + if len(typedData.Types[primaryType]) < len(data) { + return nil, errors.New("there is extra data provided in the message") + } + + // Add typehash + buffer.Write(typedData.TypeHash(primaryType)) + + // Add field contents. Structs and arrays have special handlers. + for _, field := range typedData.Types[primaryType] { + encType := field.Type + encValue := data[field.Name] + if encType[len(encType)-1:] == "]" { + arrayValue, ok := encValue.([]interface{}) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + + arrayBuffer := bytes.Buffer{} + parsedType := strings.Split(encType, "[")[0] + for _, item := range arrayValue { + if typedData.Types[parsedType] != nil { + mapValue, ok := item.(map[string]interface{}) + if !ok { + return nil, dataMismatchError(parsedType, item) + } + encodedData, err := typedData.EncodeData(parsedType, mapValue, depth+1) + if err != nil { + return nil, err + } + arrayBuffer.Write(encodedData) + } else { + bytesValue, err := typedData.EncodePrimitiveValue(parsedType, item, depth) + if err != nil { + return nil, err + } + arrayBuffer.Write(bytesValue) + } + } + + buffer.Write(crypto.Keccak256(arrayBuffer.Bytes())) + } else if typedData.Types[field.Type] != nil { + mapValue, ok := encValue.(map[string]interface{}) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + encodedData, err := typedData.EncodeData(field.Type, mapValue, depth+1) + if err != nil { + return nil, err + } + buffer.Write(crypto.Keccak256(encodedData)) + } else { + byteValue, err := typedData.EncodePrimitiveValue(encType, encValue, depth) + if err != nil { + return nil, err + } + buffer.Write(byteValue) + } + } + return buffer.Bytes(), nil +} + +func parseInteger(encType string, encValue interface{}) (*big.Int, error) { + var ( + length int + signed = strings.HasPrefix(encType, "int") + b *big.Int + ) + if encType == "int" || encType == "uint" { + length = 256 + } else { + lengthStr := "" + if strings.HasPrefix(encType, "uint") { + lengthStr = strings.TrimPrefix(encType, "uint") + } else { + lengthStr = strings.TrimPrefix(encType, "int") + } + atoiSize, err := strconv.Atoi(lengthStr) + if err != nil { + return nil, fmt.Errorf("invalid size on integer: %v", lengthStr) + } + length = atoiSize + } + switch v := encValue.(type) { + case *math.HexOrDecimal256: + b = (*big.Int)(v) + case string: + var hexIntValue math.HexOrDecimal256 + if err := hexIntValue.UnmarshalText([]byte(v)); err != nil { + return nil, err + } + b = (*big.Int)(&hexIntValue) + case float64: + // JSON parses non-strings as float64. Fail if we cannot + // convert it losslessly + if float64(int64(v)) == v { + b = big.NewInt(int64(v)) + } else { + return nil, fmt.Errorf("invalid float value %v for type %v", v, encType) + } + } + if b == nil { + return nil, fmt.Errorf("invalid integer value %v/%v for type %v", encValue, reflect.TypeOf(encValue), encType) + } + if b.BitLen() > length { + return nil, fmt.Errorf("integer larger than '%v'", encType) + } + if !signed && b.Sign() == -1 { + return nil, fmt.Errorf("invalid negative value for unsigned type %v", encType) + } + return b, nil +} + +// EncodePrimitiveValue deals with the primitive values found +// while searching through the typed data +func (typedData *TypedData) EncodePrimitiveValue(encType string, encValue interface{}, depth int) ([]byte, error) { + switch encType { + case "address": + stringValue, ok := encValue.(string) + if !ok || !common.IsHexAddress(stringValue) { + return nil, dataMismatchError(encType, encValue) + } + retval := make([]byte, 32) + copy(retval[12:], common.HexToAddress(stringValue).Bytes()) + return retval, nil + case "bool": + boolValue, ok := encValue.(bool) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + if boolValue { + return math.PaddedBigBytes(common.Big1, 32), nil + } + return math.PaddedBigBytes(common.Big0, 32), nil + case "string": + strVal, ok := encValue.(string) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + return crypto.Keccak256([]byte(strVal)), nil + case "bytes": + bytesValue, ok := encValue.([]byte) + if !ok { + return nil, dataMismatchError(encType, encValue) + } + return crypto.Keccak256(bytesValue), nil + } + if strings.HasPrefix(encType, "bytes") { + lengthStr := strings.TrimPrefix(encType, "bytes") + length, err := strconv.Atoi(lengthStr) + if err != nil { + return nil, fmt.Errorf("invalid size on bytes: %v", lengthStr) + } + if length < 0 || length > 32 { + return nil, fmt.Errorf("invalid size on bytes: %d", length) + } + if byteValue, ok := encValue.(hexutil.Bytes); !ok { + return nil, dataMismatchError(encType, encValue) + } else { + return math.PaddedBigBytes(new(big.Int).SetBytes(byteValue), 32), nil + } + } + if strings.HasPrefix(encType, "int") || strings.HasPrefix(encType, "uint") { + b, err := parseInteger(encType, encValue) + if err != nil { + return nil, err + } + return abi.U256(b), nil + } + return nil, fmt.Errorf("unrecognized type '%s'", encType) + +} + +// dataMismatchError generates an error for a mismatch between +// the provided type and data +func dataMismatchError(encType string, encValue interface{}) error { + return fmt.Errorf("provided data '%v' doesn't match type '%s'", encValue, encType) +} + +// EcRecover recovers the address associated with the given sig. +// Only compatible with `text/plain` +func (api *SignerAPI) EcRecover(ctx context.Context, data hexutil.Bytes, sig hexutil.Bytes) (common.Address, error) { + // Returns the address for the Account that was used to create the signature. + // + // Note, this function is compatible with eth_sign and personal_sign. As such it recovers + // the address of: + // hash = keccak256("\x19${byteVersion}Ethereum Signed Message:\n${message length}${message}") + // addr = ecrecover(hash, signature) + // + // Note, the signature must conform to the secp256k1 curve R, S and V values, where + // the V value must be be 27 or 28 for legacy reasons. + // + // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_ecRecover + if len(sig) != 65 { + return common.Address{}, fmt.Errorf("signature must be 65 bytes long") + } + if sig[64] != 27 && sig[64] != 28 { + return common.Address{}, fmt.Errorf("invalid Ethereum signature (V is not 27 or 28)") + } + sig[64] -= 27 // Transform yellow paper V from 27/28 to 0/1 + hash := accounts.TextHash(data) + rpk, err := crypto.SigToPub(hash, sig) + if err != nil { + return common.Address{}, err + } + return crypto.PubkeyToAddress(*rpk), nil +} + +// UnmarshalValidatorData converts the bytes input to typed data +func UnmarshalValidatorData(data interface{}) (ValidatorData, error) { + raw, ok := data.(map[string]interface{}) + if !ok { + return ValidatorData{}, errors.New("validator input is not a map[string]interface{}") + } + addr, ok := raw["address"].(string) + if !ok { + return ValidatorData{}, errors.New("validator address is not sent as a string") + } + addrBytes, err := hexutil.Decode(addr) + if err != nil { + return ValidatorData{}, err + } + if !ok || len(addrBytes) == 0 { + return ValidatorData{}, errors.New("validator address is undefined") + } + + message, ok := raw["message"].(string) + if !ok { + return ValidatorData{}, errors.New("message is not sent as a string") + } + messageBytes, err := hexutil.Decode(message) + if err != nil { + return ValidatorData{}, err + } + if !ok || len(messageBytes) == 0 { + return ValidatorData{}, errors.New("message is undefined") + } + + return ValidatorData{ + Address: common.BytesToAddress(addrBytes), + Message: messageBytes, + }, nil +} + +// validate makes sure the types are sound +func (typedData *TypedData) validate() error { + if err := typedData.Types.validate(); err != nil { + return err + } + if err := typedData.Domain.validate(); err != nil { + return err + } + return nil +} + +// Map generates a map version of the typed data +func (typedData *TypedData) Map() map[string]interface{} { + dataMap := map[string]interface{}{ + "types": typedData.Types, + "domain": typedData.Domain.Map(), + "primaryType": typedData.PrimaryType, + "message": typedData.Message, + } + return dataMap +} + +// Format returns a representation of typedData, which can be easily displayed by a user-interface +// without in-depth knowledge about 712 rules +func (typedData *TypedData) Format() ([]*NameValueType, error) { + domain, err := typedData.formatData("EIP712Domain", typedData.Domain.Map()) + if err != nil { + return nil, err + } + ptype, err := typedData.formatData(typedData.PrimaryType, typedData.Message) + if err != nil { + return nil, err + } + var nvts []*NameValueType + nvts = append(nvts, &NameValueType{ + Name: "EIP712Domain", + Value: domain, + Typ: "domain", + }) + nvts = append(nvts, &NameValueType{ + Name: typedData.PrimaryType, + Value: ptype, + Typ: "primary type", + }) + return nvts, nil +} + +func (typedData *TypedData) formatData(primaryType string, data map[string]interface{}) ([]*NameValueType, error) { + var output []*NameValueType + + // Add field contents. Structs and arrays have special handlers. + for _, field := range typedData.Types[primaryType] { + encName := field.Name + encValue := data[encName] + item := &NameValueType{ + Name: encName, + Typ: field.Type, + } + if field.isArray() { + arrayValue, _ := encValue.([]interface{}) + parsedType := field.typeName() + for _, v := range arrayValue { + if typedData.Types[parsedType] != nil { + mapValue, _ := v.(map[string]interface{}) + mapOutput, err := typedData.formatData(parsedType, mapValue) + if err != nil { + return nil, err + } + item.Value = mapOutput + } else { + primitiveOutput, err := formatPrimitiveValue(field.Type, encValue) + if err != nil { + return nil, err + } + item.Value = primitiveOutput + } + } + } else if typedData.Types[field.Type] != nil { + if mapValue, ok := encValue.(map[string]interface{}); ok { + mapOutput, err := typedData.formatData(field.Type, mapValue) + if err != nil { + return nil, err + } + item.Value = mapOutput + } else { + item.Value = "" + } + } else { + primitiveOutput, err := formatPrimitiveValue(field.Type, encValue) + if err != nil { + return nil, err + } + item.Value = primitiveOutput + } + output = append(output, item) + } + return output, nil +} + +func formatPrimitiveValue(encType string, encValue interface{}) (string, error) { + switch encType { + case "address": + if stringValue, ok := encValue.(string); !ok { + return "", fmt.Errorf("could not format value %v as address", encValue) + } else { + return common.HexToAddress(stringValue).String(), nil + } + case "bool": + if boolValue, ok := encValue.(bool); !ok { + return "", fmt.Errorf("could not format value %v as bool", encValue) + } else { + return fmt.Sprintf("%t", boolValue), nil + } + case "bytes", "string": + return fmt.Sprintf("%s", encValue), nil + } + if strings.HasPrefix(encType, "bytes") { + return fmt.Sprintf("%s", encValue), nil + + } + if strings.HasPrefix(encType, "uint") || strings.HasPrefix(encType, "int") { + if b, err := parseInteger(encType, encValue); err != nil { + return "", err + } else { + return fmt.Sprintf("%d (0x%x)", b, b), nil + } + } + return "", fmt.Errorf("unhandled type %v", encType) +} + +// NameValueType is a very simple struct with Name, Value and Type. It's meant for simple +// json structures used to communicate signing-info about typed data with the UI +type NameValueType struct { + Name string `json:"name"` + Value interface{} `json:"value"` + Typ string `json:"type"` +} + +// Pprint returns a pretty-printed version of nvt +func (nvt *NameValueType) Pprint(depth int) string { + output := bytes.Buffer{} + output.WriteString(strings.Repeat("\u00a0", depth*2)) + output.WriteString(fmt.Sprintf("%s [%s]: ", nvt.Name, nvt.Typ)) + if nvts, ok := nvt.Value.([]*NameValueType); ok { + output.WriteString("\n") + for _, next := range nvts { + sublevel := next.Pprint(depth + 1) + output.WriteString(sublevel) + } + } else { + output.WriteString(fmt.Sprintf("%q\n", nvt.Value)) + } + return output.String() +} + +// Validate checks if the types object is conformant to the specs +func (t Types) validate() error { + for typeKey, typeArr := range t { + if len(typeKey) == 0 { + return fmt.Errorf("empty type key") + } + for i, typeObj := range typeArr { + if len(typeObj.Type) == 0 { + return fmt.Errorf("type %v:%d: empty Type", typeKey, i) + } + if len(typeObj.Name) == 0 { + return fmt.Errorf("type %v:%d: empty Name", typeKey, i) + } + if typeKey == typeObj.Type { + return fmt.Errorf("type '%s' cannot reference itself", typeObj.Type) + } + if typeObj.isReferenceType() { + if _, exist := t[typeObj.typeName()]; !exist { + return fmt.Errorf("reference type '%s' is undefined", typeObj.Type) + } + if !typedDataReferenceTypeRegexp.MatchString(typeObj.Type) { + return fmt.Errorf("unknown reference type '%s", typeObj.Type) + } + } else if !isPrimitiveTypeValid(typeObj.Type) { + return fmt.Errorf("unknown type '%s'", typeObj.Type) + } + } + } + return nil +} + +// Checks if the primitive value is valid +func isPrimitiveTypeValid(primitiveType string) bool { + if primitiveType == "address" || + primitiveType == "address[]" || + primitiveType == "bool" || + primitiveType == "bool[]" || + primitiveType == "string" || + primitiveType == "string[]" { + return true + } + if primitiveType == "bytes" || + primitiveType == "bytes[]" || + primitiveType == "bytes1" || + primitiveType == "bytes1[]" || + primitiveType == "bytes2" || + primitiveType == "bytes2[]" || + primitiveType == "bytes3" || + primitiveType == "bytes3[]" || + primitiveType == "bytes4" || + primitiveType == "bytes4[]" || + primitiveType == "bytes5" || + primitiveType == "bytes5[]" || + primitiveType == "bytes6" || + primitiveType == "bytes6[]" || + primitiveType == "bytes7" || + primitiveType == "bytes7[]" || + primitiveType == "bytes8" || + primitiveType == "bytes8[]" || + primitiveType == "bytes9" || + primitiveType == "bytes9[]" || + primitiveType == "bytes10" || + primitiveType == "bytes10[]" || + primitiveType == "bytes11" || + primitiveType == "bytes11[]" || + primitiveType == "bytes12" || + primitiveType == "bytes12[]" || + primitiveType == "bytes13" || + primitiveType == "bytes13[]" || + primitiveType == "bytes14" || + primitiveType == "bytes14[]" || + primitiveType == "bytes15" || + primitiveType == "bytes15[]" || + primitiveType == "bytes16" || + primitiveType == "bytes16[]" || + primitiveType == "bytes17" || + primitiveType == "bytes17[]" || + primitiveType == "bytes18" || + primitiveType == "bytes18[]" || + primitiveType == "bytes19" || + primitiveType == "bytes19[]" || + primitiveType == "bytes20" || + primitiveType == "bytes20[]" || + primitiveType == "bytes21" || + primitiveType == "bytes21[]" || + primitiveType == "bytes22" || + primitiveType == "bytes22[]" || + primitiveType == "bytes23" || + primitiveType == "bytes23[]" || + primitiveType == "bytes24" || + primitiveType == "bytes24[]" || + primitiveType == "bytes25" || + primitiveType == "bytes25[]" || + primitiveType == "bytes26" || + primitiveType == "bytes26[]" || + primitiveType == "bytes27" || + primitiveType == "bytes27[]" || + primitiveType == "bytes28" || + primitiveType == "bytes28[]" || + primitiveType == "bytes29" || + primitiveType == "bytes29[]" || + primitiveType == "bytes30" || + primitiveType == "bytes30[]" || + primitiveType == "bytes31" || + primitiveType == "bytes31[]" { + return true + } + if primitiveType == "int" || + primitiveType == "int[]" || + primitiveType == "int8" || + primitiveType == "int8[]" || + primitiveType == "int16" || + primitiveType == "int16[]" || + primitiveType == "int32" || + primitiveType == "int32[]" || + primitiveType == "int64" || + primitiveType == "int64[]" || + primitiveType == "int128" || + primitiveType == "int128[]" || + primitiveType == "int256" || + primitiveType == "int256[]" { + return true + } + if primitiveType == "uint" || + primitiveType == "uint[]" || + primitiveType == "uint8" || + primitiveType == "uint8[]" || + primitiveType == "uint16" || + primitiveType == "uint16[]" || + primitiveType == "uint32" || + primitiveType == "uint32[]" || + primitiveType == "uint64" || + primitiveType == "uint64[]" || + primitiveType == "uint128" || + primitiveType == "uint128[]" || + primitiveType == "uint256" || + primitiveType == "uint256[]" { + return true + } + return false +} + +// validate checks if the given domain is valid, i.e. contains at least +// the minimum viable keys and values +func (domain *TypedDataDomain) validate() error { + if domain.ChainId == nil { + return errors.New("chainId must be specified according to EIP-155") + } + + if len(domain.Name) == 0 && len(domain.Version) == 0 && len(domain.VerifyingContract) == 0 && len(domain.Salt) == 0 { + return errors.New("domain is undefined") + } + + return nil +} + +// Map is a helper function to generate a map version of the domain +func (domain *TypedDataDomain) Map() map[string]interface{} { + dataMap := map[string]interface{}{} + + if domain.ChainId != nil { + dataMap["chainId"] = domain.ChainId + } + + if len(domain.Name) > 0 { + dataMap["name"] = domain.Name + } + + if len(domain.Version) > 0 { + dataMap["version"] = domain.Version + } + + if len(domain.VerifyingContract) > 0 { + dataMap["verifyingContract"] = domain.VerifyingContract + } + + if len(domain.Salt) > 0 { + dataMap["salt"] = domain.Salt + } + return dataMap +} diff --git a/rpc/utils_test.go b/signer/core/signed_data_internal_test.go similarity index 52% rename from rpc/utils_test.go rename to signer/core/signed_data_internal_test.go index e0e063f607f6..0d59fcfca893 100644 --- a/rpc/utils_test.go +++ b/signer/core/signed_data_internal_test.go @@ -1,4 +1,4 @@ -// Copyright 2016 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,30 +14,38 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rpc +package core import ( - "strings" + "math/big" "testing" ) -func TestNewID(t *testing.T) { - hexchars := "0123456789ABCDEFabcdef" - for i := 0; i < 100; i++ { - id := string(NewID()) - if !strings.HasPrefix(id, "0x") { - t.Fatalf("invalid ID prefix, want '0x...', got %s", id) +func TestParseInteger(t *testing.T) { + for i, tt := range []struct { + t string + v interface{} + exp *big.Int + }{ + {"uint32", "-123", nil}, + {"int32", "-123", big.NewInt(-123)}, + {"uint32", "0xff", big.NewInt(0xff)}, + {"int8", "0xffff", nil}, + } { + res, err := parseInteger(tt.t, tt.v) + if tt.exp == nil && res == nil { + continue } - - id = id[2:] - if len(id) == 0 || len(id) > 32 { - t.Fatalf("invalid ID length, want len(id) > 0 && len(id) <= 32), got %d", len(id)) + if tt.exp == nil && res != nil { + t.Errorf("test %d, got %v, expected nil", i, res) + continue } - - for i := 0; i < len(id); i++ { - if strings.IndexByte(hexchars, id[i]) == -1 { - t.Fatalf("unexpected byte, want any valid hex char, got %c", id[i]) - } + if tt.exp != nil && res == nil { + t.Errorf("test %d, got '%v', expected %v", i, err, tt.exp) + continue + } + if tt.exp.Cmp(res) != 0 { + t.Errorf("test %d, got %v expected %v", i, res, tt.exp) } } } diff --git a/signer/core/signed_data_test.go b/signer/core/signed_data_test.go new file mode 100644 index 000000000000..6b0da4553034 --- /dev/null +++ b/signer/core/signed_data_test.go @@ -0,0 +1,408 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core_test + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "path" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/signer/core" +) + +var typesStandard = core.Types{ + "EIP712Domain": { + { + Name: "name", + Type: "string", + }, + { + Name: "version", + Type: "string", + }, + { + Name: "chainId", + Type: "uint256", + }, + { + Name: "verifyingContract", + Type: "address", + }, + }, + "Person": { + { + Name: "name", + Type: "string", + }, + { + Name: "wallet", + Type: "address", + }, + }, + "Mail": { + { + Name: "from", + Type: "Person", + }, + { + Name: "to", + Type: "Person", + }, + { + Name: "contents", + Type: "string", + }, + }, +} + +var jsonTypedData = ` + { + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "test", + "type": "uint8" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "test": 3, + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } + } +` + +const primaryType = "Mail" + +var domainStandard = core.TypedDataDomain{ + "Ether Mail", + "1", + math.NewHexOrDecimal256(1), + "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", + "", +} + +var messageStandard = map[string]interface{}{ + "from": map[string]interface{}{ + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", + }, + "to": map[string]interface{}{ + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB", + }, + "contents": "Hello, Bob!", +} + +var typedData = core.TypedData{ + Types: typesStandard, + PrimaryType: primaryType, + Domain: domainStandard, + Message: messageStandard, +} + +func TestSignData(t *testing.T) { + api, control := setup(t) + //Create two accounts + createAccount(control, api, t) + createAccount(control, api, t) + control.approveCh <- "1" + list, err := api.List(context.Background()) + if err != nil { + t.Fatal(err) + } + a := common.NewMixedcaseAddress(list[0]) + + control.approveCh <- "Y" + control.inputCh <- "wrongpassword" + signature, err := api.SignData(context.Background(), core.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if signature != nil { + t.Errorf("Expected nil-data, got %x", signature) + } + if err != keystore.ErrDecrypt { + t.Errorf("Expected ErrLocked! '%v'", err) + } + control.approveCh <- "No way" + signature, err = api.SignData(context.Background(), core.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if signature != nil { + t.Errorf("Expected nil-data, got %x", signature) + } + if err != core.ErrRequestDenied { + t.Errorf("Expected ErrRequestDenied! '%v'", err) + } + // text/plain + control.approveCh <- "Y" + control.inputCh <- "a_long_password" + signature, err = api.SignData(context.Background(), core.TextPlain.Mime, a, hexutil.Encode([]byte("EHLO world"))) + if err != nil { + t.Fatal(err) + } + if signature == nil || len(signature) != 65 { + t.Errorf("Expected 65 byte signature (got %d bytes)", len(signature)) + } + // data/typed + control.approveCh <- "Y" + control.inputCh <- "a_long_password" + signature, err = api.SignTypedData(context.Background(), a, typedData) + if err != nil { + t.Fatal(err) + } + if signature == nil || len(signature) != 65 { + t.Errorf("Expected 65 byte signature (got %d bytes)", len(signature)) + } +} + +func TestDomainChainId(t *testing.T) { + withoutChainID := core.TypedData{ + Types: core.Types{ + "EIP712Domain": []core.Type{ + {Name: "name", Type: "string"}, + }, + }, + Domain: core.TypedDataDomain{ + Name: "test", + }, + } + + if _, ok := withoutChainID.Domain.Map()["chainId"]; ok { + t.Errorf("Expected the chainId key to not be present in the domain map") + } + withChainID := core.TypedData{ + Types: core.Types{ + "EIP712Domain": []core.Type{ + {Name: "name", Type: "string"}, + {Name: "chainId", Type: "uint256"}, + }, + }, + Domain: core.TypedDataDomain{ + Name: "test", + ChainId: math.NewHexOrDecimal256(1), + }, + } + + if _, ok := withChainID.Domain.Map()["chainId"]; !ok { + t.Errorf("Expected the chainId key be present in the domain map") + } +} + +func TestHashStruct(t *testing.T) { + hash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) + if err != nil { + t.Fatal(err) + } + mainHash := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if mainHash != "0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" { + t.Errorf("Expected different hashStruct result (got %s)", mainHash) + } + + hash, err = typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) + if err != nil { + t.Error(err) + } + domainHash := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if domainHash != "0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f" { + t.Errorf("Expected different domain hashStruct result (got %s)", domainHash) + } +} + +func TestEncodeType(t *testing.T) { + domainTypeEncoding := string(typedData.EncodeType("EIP712Domain")) + if domainTypeEncoding != "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" { + t.Errorf("Expected different encodeType result (got %s)", domainTypeEncoding) + } + + mailTypeEncoding := string(typedData.EncodeType(typedData.PrimaryType)) + if mailTypeEncoding != "Mail(Person from,Person to,string contents)Person(string name,address wallet)" { + t.Errorf("Expected different encodeType result (got %s)", mailTypeEncoding) + } +} + +func TestTypeHash(t *testing.T) { + mailTypeHash := fmt.Sprintf("0x%s", common.Bytes2Hex(typedData.TypeHash(typedData.PrimaryType))) + if mailTypeHash != "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2" { + t.Errorf("Expected different typeHash result (got %s)", mailTypeHash) + } +} + +func TestEncodeData(t *testing.T) { + hash, err := typedData.EncodeData(typedData.PrimaryType, typedData.Message, 0) + if err != nil { + t.Fatal(err) + } + dataEncoding := fmt.Sprintf("0x%s", common.Bytes2Hex(hash)) + if dataEncoding != "0xa0cedeb2dc280ba39b857546d74f5549c3a1d7bdc2dd96bf881f76108e23dac2fc71e5fa27ff56c350aa531bc129ebdf613b772b6604664f5d8dbe21b85eb0c8cd54f074a4af31b4411ff6a60c9719dbd559c221c8ac3492d9d872b041d703d1b5aadf3154a261abdd9086fc627b61efca26ae5702701d05cd2305f7c52a2fc8" { + t.Errorf("Expected different encodeData result (got %s)", dataEncoding) + } +} + +func TestFormatter(t *testing.T) { + var d core.TypedData + err := json.Unmarshal([]byte(jsonTypedData), &d) + if err != nil { + t.Fatalf("unmarshalling failed '%v'", err) + } + formatted, _ := d.Format() + for _, item := range formatted { + t.Logf("'%v'\n", item.Pprint(0)) + } + + j, _ := json.Marshal(formatted) + t.Logf("'%v'\n", string(j)) +} + +func sign(typedData core.TypedData) ([]byte, []byte, error) { + domainSeparator, err := typedData.HashStruct("EIP712Domain", typedData.Domain.Map()) + if err != nil { + return nil, nil, err + } + typedDataHash, err := typedData.HashStruct(typedData.PrimaryType, typedData.Message) + if err != nil { + return nil, nil, err + } + rawData := []byte(fmt.Sprintf("\x19\x01%s%s", string(domainSeparator), string(typedDataHash))) + sighash := crypto.Keccak256(rawData) + return typedDataHash, sighash, nil +} + +func TestJsonFiles(t *testing.T) { + testfiles, err := ioutil.ReadDir("testdata/") + if err != nil { + t.Fatalf("failed reading files: %v", err) + } + for i, fInfo := range testfiles { + if !strings.HasSuffix(fInfo.Name(), "json") { + continue + } + expectedFailure := strings.HasPrefix(fInfo.Name(), "expfail") + data, err := ioutil.ReadFile(path.Join("testdata", fInfo.Name())) + if err != nil { + t.Errorf("Failed to read file %v: %v", fInfo.Name(), err) + continue + } + var typedData core.TypedData + err = json.Unmarshal([]byte(data), &typedData) + if err != nil { + t.Errorf("Test %d, file %v, json unmarshalling failed: %v", i, fInfo.Name(), err) + continue + } + _, _, err = sign(typedData) + t.Logf("Error %v\n", err) + if err != nil && !expectedFailure { + t.Errorf("Test %d failed, file %v: %v", i, fInfo.Name(), err) + } + if expectedFailure && err == nil { + t.Errorf("Test %d succeeded (expected failure), file %v: %v", i, fInfo.Name(), err) + } + } +} + +// TestFuzzerFiles tests some files that have been found by fuzzing to cause +// crashes or hangs. +func TestFuzzerFiles(t *testing.T) { + corpusdir := path.Join("testdata", "fuzzing") + testfiles, err := ioutil.ReadDir(corpusdir) + if err != nil { + t.Fatalf("failed reading files: %v", err) + } + verbose := false + for i, fInfo := range testfiles { + data, err := ioutil.ReadFile(path.Join(corpusdir, fInfo.Name())) + if err != nil { + t.Errorf("Failed to read file %v: %v", fInfo.Name(), err) + continue + } + var typedData core.TypedData + err = json.Unmarshal([]byte(data), &typedData) + if err != nil { + t.Errorf("Test %d, file %v, json unmarshalling failed: %v", i, fInfo.Name(), err) + continue + } + _, err = typedData.EncodeData("EIP712Domain", typedData.Domain.Map(), 1) + if verbose && err != nil { + t.Logf("%d, EncodeData[1] err: %v\n", i, err) + } + _, err = typedData.EncodeData(typedData.PrimaryType, typedData.Message, 1) + if verbose && err != nil { + t.Logf("%d, EncodeData[2] err: %v\n", i, err) + } + typedData.Format() + } +} diff --git a/signer/core/stdioui.go b/signer/core/stdioui.go index 64032386fcf1..9ffe1398d43d 100644 --- a/signer/core/stdioui.go +++ b/signer/core/stdioui.go @@ -1,19 +1,18 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// GNU Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core @@ -32,12 +31,16 @@ type StdIOUI struct { } func NewStdIOUI() *StdIOUI { - log.Info("NewStdIOUI") client, err := rpc.DialContext(context.Background(), "stdio://") if err != nil { log.Crit("Could not create stdio client", "err", err) } - return &StdIOUI{client: *client} + ui := &StdIOUI{client: *client} + return ui +} + +func (ui *StdIOUI) RegisterUIServer(api *UIServerAPI) { + ui.client.RegisterName("clef", api) } // dispatch sends a request over the stdio @@ -49,73 +52,71 @@ func (ui *StdIOUI) dispatch(serviceMethod string, args interface{}, reply interf return err } +// notify sends a request over the stdio, and does not listen for a response +func (ui *StdIOUI) notify(serviceMethod string, args interface{}) error { + ctx := context.Background() + err := ui.client.Notify(ctx, serviceMethod, args) + if err != nil { + log.Info("Error", "exc", err.Error()) + } + return err +} + func (ui *StdIOUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { var result SignTxResponse - err := ui.dispatch("ApproveTx", request, &result) + err := ui.dispatch("ui_approveTx", request, &result) return result, err } func (ui *StdIOUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { var result SignDataResponse - err := ui.dispatch("ApproveSignData", request, &result) - return result, err -} - -func (ui *StdIOUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { - var result ExportResponse - err := ui.dispatch("ApproveExport", request, &result) - return result, err -} - -func (ui *StdIOUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { - var result ImportResponse - err := ui.dispatch("ApproveImport", request, &result) + err := ui.dispatch("ui_approveSignData", request, &result) return result, err } func (ui *StdIOUI) ApproveListing(request *ListRequest) (ListResponse, error) { var result ListResponse - err := ui.dispatch("ApproveListing", request, &result) + err := ui.dispatch("ui_approveListing", request, &result) return result, err } func (ui *StdIOUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { var result NewAccountResponse - err := ui.dispatch("ApproveNewAccount", request, &result) + err := ui.dispatch("ui_approveNewAccount", request, &result) return result, err } func (ui *StdIOUI) ShowError(message string) { - err := ui.dispatch("ShowError", &Message{message}, nil) + err := ui.notify("ui_showError", &Message{message}) if err != nil { - log.Info("Error calling 'ShowError'", "exc", err.Error(), "msg", message) + log.Info("Error calling 'ui_showError'", "exc", err.Error(), "msg", message) } } func (ui *StdIOUI) ShowInfo(message string) { - err := ui.dispatch("ShowInfo", Message{message}, nil) + err := ui.notify("ui_showInfo", Message{message}) if err != nil { - log.Info("Error calling 'ShowInfo'", "exc", err.Error(), "msg", message) + log.Info("Error calling 'ui_showInfo'", "exc", err.Error(), "msg", message) } } func (ui *StdIOUI) OnApprovedTx(tx ethapi.SignTransactionResult) { - err := ui.dispatch("OnApprovedTx", tx, nil) + err := ui.notify("ui_onApprovedTx", tx) if err != nil { - log.Info("Error calling 'OnApprovedTx'", "exc", err.Error(), "tx", tx) + log.Info("Error calling 'ui_onApprovedTx'", "exc", err.Error(), "tx", tx) } } func (ui *StdIOUI) OnSignerStartup(info StartupInfo) { - err := ui.dispatch("OnSignerStartup", info, nil) + err := ui.notify("ui_onSignerStartup", info) if err != nil { - log.Info("Error calling 'OnSignerStartup'", "exc", err.Error(), "info", info) + log.Info("Error calling 'ui_onSignerStartup'", "exc", err.Error(), "info", info) } } func (ui *StdIOUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { var result UserInputResponse - err := ui.dispatch("OnInputRequired", info, &result) + err := ui.dispatch("ui_onInputRequired", info, &result) if err != nil { - log.Info("Error calling 'OnInputRequired'", "exc", err.Error(), "info", info) + log.Info("Error calling 'ui_onInputRequired'", "exc", err.Error(), "info", info) } return result, err } diff --git a/signer/core/testdata/README.md b/signer/core/testdata/README.md new file mode 100644 index 000000000000..f425450a0673 --- /dev/null +++ b/signer/core/testdata/README.md @@ -0,0 +1,5 @@ +### EIP 712 tests + +These tests are json files which are converted into eip-712 typed data. +All files are expected to be proper json, and tests will fail if they are not. +Files that begin with `expfail' are expected to not pass the hashstruct construction. diff --git a/signer/core/testdata/arrays-1.json b/signer/core/testdata/arrays-1.json new file mode 100644 index 000000000000..fea82b42c6de --- /dev/null +++ b/signer/core/testdata/arrays-1.json @@ -0,0 +1,60 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Foo": [ + { + "name": "addys", + "type": "address[]" + }, + { + "name": "stringies", + "type": "string[]" + }, + { + "name": "inties", + "type": "uint[]" + } + ] + }, + "primaryType": "Foo", + "domain": { + "name": "Lorem", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "addys": [ + "0x0000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000003" + ], + "stringies": [ + "lorem", + "ipsum", + "dolores" + ], + "inties": [ + "0x0000000000000000000000000000000000000001", + "3", + 4.0 + ] + } +} diff --git a/signer/core/testdata/custom_arraytype.json b/signer/core/testdata/custom_arraytype.json new file mode 100644 index 000000000000..078de88c22f8 --- /dev/null +++ b/signer/core/testdata/custom_arraytype.json @@ -0,0 +1,54 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person[]" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { "name": "Cow"}, + "to": [{ "name": "Moose"},{ "name": "Goose"}], + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/eip712.json b/signer/core/testdata/eip712.json new file mode 100644 index 000000000000..7b1cb8ae2d16 --- /dev/null +++ b/signer/core/testdata/eip712.json @@ -0,0 +1,76 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "test", + "type": "uint8" + }, + { + "name": "test2", + "type": "uint8" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "test": "3", + "test2": 5.0, + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "test": "0", + "test2": 5, + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_arraytype_overload.json b/signer/core/testdata/expfail_arraytype_overload.json new file mode 100644 index 000000000000..786487f1002d --- /dev/null +++ b/signer/core/testdata/expfail_arraytype_overload.json @@ -0,0 +1,67 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Person[]": [ + { + "name": "baz", + "type": "string" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person[]" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": {"baz": "foo"}, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_datamismatch_1.json b/signer/core/testdata/expfail_datamismatch_1.json new file mode 100644 index 000000000000..d19d470d1eac --- /dev/null +++ b/signer/core/testdata/expfail_datamismatch_1.json @@ -0,0 +1,64 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "Person" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_extradata-1.json b/signer/core/testdata/expfail_extradata-1.json new file mode 100644 index 000000000000..fd704209bc46 --- /dev/null +++ b/signer/core/testdata/expfail_extradata-1.json @@ -0,0 +1,76 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256 ... and now for something completely different" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "test", + "type": "uint8" + }, + { + "name": "test2", + "type": "uint8" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "test": "3", + "test2": 5.0, + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "test": "0", + "test2": 5, + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_extradata-2.json b/signer/core/testdata/expfail_extradata-2.json new file mode 100644 index 000000000000..10f91c23af4b --- /dev/null +++ b/signer/core/testdata/expfail_extradata-2.json @@ -0,0 +1,77 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "test", + "type": "uint8" + }, + { + "name": "test2", + "type": "uint8" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "blahonga": "zonk bonk", + "from": { + "name": "Cow", + "test": "3", + "test2": 5.0, + "wallet": "0xcD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "test": "0", + "test2": 5, + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_malformeddomainkeys.json b/signer/core/testdata/expfail_malformeddomainkeys.json new file mode 100644 index 000000000000..354b3cc859ca --- /dev/null +++ b/signer/core/testdata/expfail_malformeddomainkeys.json @@ -0,0 +1,64 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "vFAILFAILerifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_nonexistant_type.json b/signer/core/testdata/expfail_nonexistant_type.json new file mode 100644 index 000000000000..d06bc20b9fe8 --- /dev/null +++ b/signer/core/testdata/expfail_nonexistant_type.json @@ -0,0 +1,64 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "Blahonga" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" + } +} diff --git a/signer/core/testdata/expfail_toolargeuint.json b/signer/core/testdata/expfail_toolargeuint.json new file mode 100644 index 000000000000..9854b65b17da --- /dev/null +++ b/signer/core/testdata/expfail_toolargeuint.json @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test":"257" + } +} diff --git a/signer/core/testdata/expfail_toolargeuint2.json b/signer/core/testdata/expfail_toolargeuint2.json new file mode 100644 index 000000000000..c63ed41f9c41 --- /dev/null +++ b/signer/core/testdata/expfail_toolargeuint2.json @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test":257 + } +} diff --git a/signer/core/testdata/expfail_unconvertiblefloat.json b/signer/core/testdata/expfail_unconvertiblefloat.json new file mode 100644 index 000000000000..8229a333ca88 --- /dev/null +++ b/signer/core/testdata/expfail_unconvertiblefloat.json @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test":"255.3" + } +} diff --git a/signer/core/testdata/expfail_unconvertiblefloat2.json b/signer/core/testdata/expfail_unconvertiblefloat2.json new file mode 100644 index 000000000000..59e6d38d24ad --- /dev/null +++ b/signer/core/testdata/expfail_unconvertiblefloat2.json @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test": 255.3 + } +} diff --git a/signer/core/testdata/fuzzing/2850f6ccf2d7f5f846dfb73119b60e09e712783f b/signer/core/testdata/fuzzing/2850f6ccf2d7f5f846dfb73119b60e09e712783f new file mode 100644 index 000000000000..8229a333ca88 --- /dev/null +++ b/signer/core/testdata/fuzzing/2850f6ccf2d7f5f846dfb73119b60e09e712783f @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test":"255.3" + } +} diff --git a/signer/core/testdata/fuzzing/36fb987a774011dc675e1b5246ac5c1d44d84d92 b/signer/core/testdata/fuzzing/36fb987a774011dc675e1b5246ac5c1d44d84d92 new file mode 100644 index 000000000000..fea82b42c6de --- /dev/null +++ b/signer/core/testdata/fuzzing/36fb987a774011dc675e1b5246ac5c1d44d84d92 @@ -0,0 +1,60 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Foo": [ + { + "name": "addys", + "type": "address[]" + }, + { + "name": "stringies", + "type": "string[]" + }, + { + "name": "inties", + "type": "uint[]" + } + ] + }, + "primaryType": "Foo", + "domain": { + "name": "Lorem", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "addys": [ + "0x0000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000003" + ], + "stringies": [ + "lorem", + "ipsum", + "dolores" + ], + "inties": [ + "0x0000000000000000000000000000000000000001", + "3", + 4.0 + ] + } +} diff --git a/signer/core/testdata/fuzzing/37ec7b55c7ba014cced204c5f9989d2d0eb9ff6d b/signer/core/testdata/fuzzing/37ec7b55c7ba014cced204c5f9989d2d0eb9ff6d new file mode 100644 index 000000000000..c63ed41f9c41 --- /dev/null +++ b/signer/core/testdata/fuzzing/37ec7b55c7ba014cced204c5f9989d2d0eb9ff6d @@ -0,0 +1,38 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "uint256" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Mail": [ + { + "name": "test", + "type": "uint8" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "Ether Mail", + "version": "1", + "chainId": "1", + "verifyingContract": "0xCCCcccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "test":257 + } +} diff --git a/signer/core/testdata/fuzzing/582fa92154b784daa1faa293b695fa388fe34bf1 b/signer/core/testdata/fuzzing/582fa92154b784daa1faa293b695fa388fe34bf1 new file mode 100644 index 000000000000..9bc43938d53c --- /dev/null +++ b/signer/core/testdata/fuzzing/582fa92154b784daa1faa293b695fa388fe34bf1 @@ -0,0 +1 @@ +{"domain":{"version":"0","chainId":""}} \ No newline at end of file diff --git a/signer/core/testdata/fuzzing/ab57cb2b2b5ce614efe13a47bc73814580f2cce8 b/signer/core/testdata/fuzzing/ab57cb2b2b5ce614efe13a47bc73814580f2cce8 new file mode 100644 index 000000000000..fe27de916cdc --- /dev/null +++ b/signer/core/testdata/fuzzing/ab57cb2b2b5ce614efe13a47bc73814580f2cce8 @@ -0,0 +1,54 @@ +{ "types": { "":[ { + "name": "name", + "type":"string" }, + { + "name":"version", + "type": "string" }, { + "name": "chaiI", + "type":"uint256 . ad nowretig omeedifere" }, { + "ae": "eifinC", + "ty":"dess" + } + ], + "Person":[ + { + "name":"name", + "type": "string" + }, { + "name":"tes", "type":"it8" + }, + { "name":"t", "tye":"uit8" + }, + { + "a":"ale", + "type": "ress" + } + ], + "Mail": [ + { + "name":"from", "type":"Person" }, + { + "name": "to", "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] + }, "primaryType": "Mail", + "domain": { +"name":"theMail", "version": "1", + "chainId": "1", + "verifyingntract": "0xCcccCCCcCCCCCCCcCCcCCCcCcccccC" + }, + "message": { "from": { + "name": "Cow", + "test": "3", + "est2":5.0, + "llt": "0xcD2a3938E13D947E0bE734DfDD86" }, "to": { "name": "Bob", + "ts":"", + "tet2": 5, + "allet": "0bBBBBbbBBbbbbBbbBbbbbBBBbB" + }, + "contents": "Hello, Bob!" } +} \ No newline at end of file diff --git a/signer/core/testdata/fuzzing/e4303e23ca34fbbc43164a232b2caa7a3af2bf8d b/signer/core/testdata/fuzzing/e4303e23ca34fbbc43164a232b2caa7a3af2bf8d new file mode 100644 index 000000000000..c5e14b39ed35 --- /dev/null +++ b/signer/core/testdata/fuzzing/e4303e23ca34fbbc43164a232b2caa7a3af2bf8d @@ -0,0 +1,64 @@ +{ + "types": { + "EIP712Domain": [ + { + "name": "name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "chainId", + "type": "int" + }, + { + "name": "verifyingContract", + "type": "address" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Mail" + }, + { + "name": "s", + "type": "Person" + } + ] + }, + "primaryType": "Mail", + "domain": { + "name": "l", + "version": "1", + "chainId": "", + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" + }, + "message": { + "from": { + "name": "", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "": "" + } +} diff --git a/signer/core/testdata/fuzzing/f658340af009dd4a35abe645a00a7b732bc30921 b/signer/core/testdata/fuzzing/f658340af009dd4a35abe645a00a7b732bc30921 new file mode 100644 index 000000000000..c4841cb07bab --- /dev/null +++ b/signer/core/testdata/fuzzing/f658340af009dd4a35abe645a00a7b732bc30921 @@ -0,0 +1 @@ +{"types":{"0":[{}]}} \ No newline at end of file diff --git a/signer/core/types.go b/signer/core/types.go index 128055774858..f147f06cd1ae 100644 --- a/signer/core/types.go +++ b/signer/core/types.go @@ -1,58 +1,32 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core import ( "encoding/json" "fmt" - "strings" - "math/big" + "strings" - "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" ) -type Accounts []Account - -func (as Accounts) String() string { - var output []string - for _, a := range as { - output = append(output, a.String()) - } - return strings.Join(output, "\n") -} - -type Account struct { - Typ string `json:"type"` - URL accounts.URL `json:"url"` - Address common.Address `json:"address"` -} - -func (a Account) String() string { - s, err := json.Marshal(a) - if err == nil { - return string(s) - } - return err.Error() -} - type ValidationInfo struct { Typ string `json:"type"` Message string `json:"message"` @@ -67,13 +41,13 @@ const ( INFO = "Info" ) -func (vs *ValidationMessages) crit(msg string) { +func (vs *ValidationMessages) Crit(msg string) { vs.Messages = append(vs.Messages, ValidationInfo{CRIT, msg}) } -func (vs *ValidationMessages) warn(msg string) { +func (vs *ValidationMessages) Warn(msg string) { vs.Messages = append(vs.Messages, ValidationInfo{WARN, msg}) } -func (vs *ValidationMessages) info(msg string) { +func (vs *ValidationMessages) Info(msg string) { vs.Messages = append(vs.Messages, ValidationInfo{INFO, msg}) } @@ -101,7 +75,7 @@ type SendTxArgs struct { Nonce hexutil.Uint64 `json:"nonce"` // We accept "data" and "input" for backwards-compatibility reasons. Data *hexutil.Bytes `json:"data"` - Input *hexutil.Bytes `json:"input"` + Input *hexutil.Bytes `json:"input,omitempty"` } func (args SendTxArgs) String() string { diff --git a/signer/core/uiapi.go b/signer/core/uiapi.go new file mode 100644 index 000000000000..7c2d233f89c6 --- /dev/null +++ b/signer/core/uiapi.go @@ -0,0 +1,200 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "io/ioutil" + "math/big" + + "github.com/ethereum/go-ethereum/accounts" + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/crypto" +) + +// SignerUIAPI implements methods Clef provides for a UI to query, in the bidirectional communication +// channel. +// This API is considered secure, since a request can only +// ever arrive from the UI -- and the UI is capable of approving any action, thus we can consider these +// requests pre-approved. +// NB: It's very important that these methods are not ever exposed on the external service +// registry. +type UIServerAPI struct { + extApi *SignerAPI + am *accounts.Manager +} + +// NewUIServerAPI creates a new UIServerAPI +func NewUIServerAPI(extapi *SignerAPI) *UIServerAPI { + return &UIServerAPI{extapi, extapi.am} +} + +// List available accounts. As opposed to the external API definition, this method delivers +// the full Account object and not only Address. +// Example call +// {"jsonrpc":"2.0","method":"clef_listAccounts","params":[], "id":4} +func (s *UIServerAPI) ListAccounts(ctx context.Context) ([]accounts.Account, error) { + var accs []accounts.Account + for _, wallet := range s.am.Wallets() { + accs = append(accs, wallet.Accounts()...) + } + return accs, nil +} + +// rawWallet is a JSON representation of an accounts.Wallet interface, with its +// data contents extracted into plain fields. +type rawWallet struct { + URL string `json:"url"` + Status string `json:"status"` + Failure string `json:"failure,omitempty"` + Accounts []accounts.Account `json:"accounts,omitempty"` +} + +// ListWallets will return a list of wallets that clef manages +// Example call +// {"jsonrpc":"2.0","method":"clef_listWallets","params":[], "id":5} +func (s *UIServerAPI) ListWallets() []rawWallet { + wallets := make([]rawWallet, 0) // return [] instead of nil if empty + for _, wallet := range s.am.Wallets() { + status, failure := wallet.Status() + + raw := rawWallet{ + URL: wallet.URL().String(), + Status: status, + Accounts: wallet.Accounts(), + } + if failure != nil { + raw.Failure = failure.Error() + } + wallets = append(wallets, raw) + } + return wallets +} + +// DeriveAccount requests a HD wallet to derive a new account, optionally pinning +// it for later reuse. +// Example call +// {"jsonrpc":"2.0","method":"clef_deriveAccount","params":["ledger://","m/44'/60'/0'", false], "id":6} +func (s *UIServerAPI) DeriveAccount(url string, path string, pin *bool) (accounts.Account, error) { + wallet, err := s.am.Wallet(url) + if err != nil { + return accounts.Account{}, err + } + derivPath, err := accounts.ParseDerivationPath(path) + if err != nil { + return accounts.Account{}, err + } + if pin == nil { + pin = new(bool) + } + return wallet.Derive(derivPath, *pin) +} + +// fetchKeystore retrives the encrypted keystore from the account manager. +func fetchKeystore(am *accounts.Manager) *keystore.KeyStore { + return am.Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore) +} + +// ImportRawKey stores the given hex encoded ECDSA key into the key directory, +// encrypting it with the passphrase. +// Example call (should fail on password too short) +// {"jsonrpc":"2.0","method":"clef_importRawKey","params":["1111111111111111111111111111111111111111111111111111111111111111","test"], "id":6} +func (s *UIServerAPI) ImportRawKey(privkey string, password string) (accounts.Account, error) { + key, err := crypto.HexToECDSA(privkey) + if err != nil { + return accounts.Account{}, err + } + if err := ValidatePasswordFormat(password); err != nil { + return accounts.Account{}, fmt.Errorf("password requirements not met: %v", err) + } + // No error + return fetchKeystore(s.am).ImportECDSA(key, password) +} + +// OpenWallet initiates a hardware wallet opening procedure, establishing a USB +// connection and attempting to authenticate via the provided passphrase. Note, +// the method may return an extra challenge requiring a second open (e.g. the +// Trezor PIN matrix challenge). +// Example +// {"jsonrpc":"2.0","method":"clef_openWallet","params":["ledger://",""], "id":6} +func (s *UIServerAPI) OpenWallet(url string, passphrase *string) error { + wallet, err := s.am.Wallet(url) + if err != nil { + return err + } + pass := "" + if passphrase != nil { + pass = *passphrase + } + return wallet.Open(pass) +} + +// ChainId returns the chainid in use for Eip-155 replay protection +// Example call +// {"jsonrpc":"2.0","method":"clef_chainId","params":[], "id":8} +func (s *UIServerAPI) ChainId() math.HexOrDecimal64 { + return (math.HexOrDecimal64)(s.extApi.chainID.Uint64()) +} + +// SetChainId sets the chain id to use when signing transactions. +// Example call to set Ropsten: +// {"jsonrpc":"2.0","method":"clef_setChainId","params":["3"], "id":8} +func (s *UIServerAPI) SetChainId(id math.HexOrDecimal64) math.HexOrDecimal64 { + s.extApi.chainID = new(big.Int).SetUint64(uint64(id)) + return s.ChainId() +} + +// Export returns encrypted private key associated with the given address in web3 keystore format. +// Example +// {"jsonrpc":"2.0","method":"clef_export","params":["0x19e7e376e7c213b7e7e7e46cc70a5dd086daff2a"], "id":4} +func (s *UIServerAPI) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { + // Look up the wallet containing the requested signer + wallet, err := s.am.Find(accounts.Account{Address: addr}) + if err != nil { + return nil, err + } + if wallet.URL().Scheme != keystore.KeyStoreScheme { + return nil, fmt.Errorf("Account is not a keystore-account") + } + return ioutil.ReadFile(wallet.URL().Path) +} + +// Import tries to import the given keyJSON in the local keystore. The keyJSON data is expected to be +// in web3 keystore format. It will decrypt the keyJSON with the given passphrase and on successful +// decryption it will encrypt the key with the given newPassphrase and store it in the keystore. +// Example (the address in question has privkey `11...11`): +// {"jsonrpc":"2.0","method":"clef_import","params":[{"address":"19e7e376e7c213b7e7e7e46cc70a5dd086daff2a","crypto":{"cipher":"aes-128-ctr","ciphertext":"33e4cd3756091d037862bb7295e9552424a391a6e003272180a455ca2a9fb332","cipherparams":{"iv":"b54b263e8f89c42bb219b6279fba5cce"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"e4ca94644fd30569c1b1afbbc851729953c92637b7fe4bb9840bbb31ffbc64a5"},"mac":"f4092a445c2b21c0ef34f17c9cd0d873702b2869ec5df4439a0c2505823217e7"},"id":"216c7eac-e8c1-49af-a215-fa0036f29141","version":3},"test","yaddayadda"], "id":4} +func (api *UIServerAPI) Import(ctx context.Context, keyJSON json.RawMessage, oldPassphrase, newPassphrase string) (accounts.Account, error) { + be := api.am.Backends(keystore.KeyStoreType) + + if len(be) == 0 { + return accounts.Account{}, errors.New("password based accounts not supported") + } + if err := ValidatePasswordFormat(newPassphrase); err != nil { + return accounts.Account{}, fmt.Errorf("password requirements not met: %v", err) + } + return be[0].(*keystore.KeyStore).Import(keyJSON, oldPassphrase, newPassphrase) +} + +// Other methods to be added, not yet implemented are: +// - Ruleset interaction: add rules, attest rulefiles +// - Store metadata about accounts, e.g. naming of accounts diff --git a/signer/core/validation.go b/signer/core/validation.go index 7c3ec4274142..af858862ef4a 100644 --- a/signer/core/validation.go +++ b/signer/core/validation.go @@ -1,162 +1,27 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core import ( - "bytes" "errors" - "fmt" - "math/big" "regexp" - - "github.com/ethereum/go-ethereum/common" ) -// The validation package contains validation checks for transactions -// - ABI-data validation -// - Transaction semantics validation -// The package provides warnings for typical pitfalls - -type Validator struct { - db *AbiDb -} - -func NewValidator(db *AbiDb) *Validator { - return &Validator{db} -} -func testSelector(selector string, data []byte) (*decodedCallData, error) { - if selector == "" { - return nil, fmt.Errorf("selector not found") - } - abiData, err := MethodSelectorToAbi(selector) - if err != nil { - return nil, err - } - info, err := parseCallData(data, string(abiData)) - if err != nil { - return nil, err - } - return info, nil - -} - -// validateCallData checks if the ABI-data + methodselector (if given) can be parsed and seems to match -func (v *Validator) validateCallData(msgs *ValidationMessages, data []byte, methodSelector *string) { - if len(data) == 0 { - return - } - if len(data) < 4 { - msgs.warn("Tx contains data which is not valid ABI") - return - } - if arglen := len(data) - 4; arglen%32 != 0 { - msgs.warn(fmt.Sprintf("Not ABI-encoded data; length should be a multiple of 32 (was %d)", arglen)) - } - var ( - info *decodedCallData - err error - ) - // Check the provided one - if methodSelector != nil { - info, err = testSelector(*methodSelector, data) - if err != nil { - msgs.warn(fmt.Sprintf("Tx contains data, but provided ABI signature could not be matched: %v", err)) - } else { - msgs.info(info.String()) - //Successfull match. add to db if not there already (ignore errors there) - v.db.AddSignature(*methodSelector, data[:4]) - } - return - } - // Check the db - selector, err := v.db.LookupMethodSelector(data[:4]) - if err != nil { - msgs.warn(fmt.Sprintf("Tx contains data, but the ABI signature could not be found: %v", err)) - return - } - info, err = testSelector(selector, data) - if err != nil { - msgs.warn(fmt.Sprintf("Tx contains data, but provided ABI signature could not be matched: %v", err)) - } else { - msgs.info(info.String()) - } -} - -// validateSemantics checks if the transactions 'makes sense', and generate warnings for a couple of typical scenarios -func (v *Validator) validate(msgs *ValidationMessages, txargs *SendTxArgs, methodSelector *string) error { - // Prevent accidental erroneous usage of both 'input' and 'data' - if txargs.Data != nil && txargs.Input != nil && !bytes.Equal(*txargs.Data, *txargs.Input) { - // This is a showstopper - return errors.New(`Ambiguous request: both "data" and "input" are set and are not identical`) - } - var ( - data []byte - ) - // Place data on 'data', and nil 'input' - if txargs.Input != nil { - txargs.Data = txargs.Input - txargs.Input = nil - } - if txargs.Data != nil { - data = *txargs.Data - } - - if txargs.To == nil { - //Contract creation should contain sufficient data to deploy a contract - // A typical error is omitting sender due to some quirk in the javascript call - // e.g. https://github.com/ethereum/go-ethereum/issues/16106 - if len(data) == 0 { - if txargs.Value.ToInt().Cmp(big.NewInt(0)) > 0 { - // Sending ether into black hole - return errors.New("Tx will create contract with value but empty code!") - } - // No value submitted at least - msgs.crit("Tx will create contract with empty code!") - } else if len(data) < 40 { //Arbitrary limit - msgs.warn(fmt.Sprintf("Tx will will create contract, but payload is suspiciously small (%d b)", len(data))) - } - // methodSelector should be nil for contract creation - if methodSelector != nil { - msgs.warn("Tx will create contract, but method selector supplied; indicating intent to call a method.") - } - - } else { - if !txargs.To.ValidChecksum() { - msgs.warn("Invalid checksum on to-address") - } - // Normal transaction - if bytes.Equal(txargs.To.Address().Bytes(), common.Address{}.Bytes()) { - // Sending to 0 - msgs.crit("Tx destination is the zero address!") - } - // Validate calldata - v.validateCallData(msgs, data, methodSelector) - } - return nil -} - -// ValidateTransaction does a number of checks on the supplied transaction, and returns either a list of warnings, -// or an error, indicating that the transaction should be immediately rejected -func (v *Validator) ValidateTransaction(txArgs *SendTxArgs, methodSelector *string) (*ValidationMessages, error) { - msgs := &ValidationMessages{} - return msgs, v.validate(msgs, txArgs, methodSelector) -} - -var Printable7BitAscii = regexp.MustCompile("^[A-Za-z0-9!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ]+$") +var printable7BitAscii = regexp.MustCompile("^[A-Za-z0-9!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ]+$") // ValidatePasswordFormat returns an error if the password is too short, or consists of characters // outside the range of the printable 7bit ascii set @@ -164,7 +29,7 @@ func ValidatePasswordFormat(password string) error { if len(password) < 10 { return errors.New("password too short (<10 characters)") } - if !Printable7BitAscii.MatchString(password) { + if !printable7BitAscii.MatchString(password) { return errors.New("password contains invalid characters - only 7bit printable ascii allowed") } return nil diff --git a/signer/core/validation_test.go b/signer/core/validation_test.go index 155b25e92c6c..7105691d29c0 100644 --- a/signer/core/validation_test.go +++ b/signer/core/validation_test.go @@ -1,142 +1,22 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package core -import ( - "fmt" - "math/big" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" -) - -func hexAddr(a string) common.Address { return common.BytesToAddress(common.FromHex(a)) } -func mixAddr(a string) (*common.MixedcaseAddress, error) { - return common.NewMixedcaseAddressFromString(a) -} -func toHexBig(h string) hexutil.Big { - b := big.NewInt(0).SetBytes(common.FromHex(h)) - return hexutil.Big(*b) -} -func toHexUint(h string) hexutil.Uint64 { - b := big.NewInt(0).SetBytes(common.FromHex(h)) - return hexutil.Uint64(b.Uint64()) -} -func dummyTxArgs(t txtestcase) *SendTxArgs { - to, _ := mixAddr(t.to) - from, _ := mixAddr(t.from) - n := toHexUint(t.n) - gas := toHexUint(t.g) - gasPrice := toHexBig(t.gp) - value := toHexBig(t.value) - var ( - data, input *hexutil.Bytes - ) - if t.d != "" { - a := hexutil.Bytes(common.FromHex(t.d)) - data = &a - } - if t.i != "" { - a := hexutil.Bytes(common.FromHex(t.i)) - input = &a - - } - return &SendTxArgs{ - From: *from, - To: to, - Value: value, - Nonce: n, - GasPrice: gasPrice, - Gas: gas, - Data: data, - Input: input, - } -} - -type txtestcase struct { - from, to, n, g, gp, value, d, i string - expectErr bool - numMessages int -} - -func TestValidator(t *testing.T) { - var ( - // use empty db, there are other tests for the abi-specific stuff - db, _ = NewEmptyAbiDB() - v = NewValidator(db) - ) - testcases := []txtestcase{ - // Invalid to checksum - {from: "000000000000000000000000000000000000dead", to: "000000000000000000000000000000000000dead", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 1}, - // valid 0x000000000000000000000000000000000000dEaD - {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 0}, - // conflicting input and data - {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x01", i: "0x02", expectErr: true}, - // Data can't be parsed - {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x0102", numMessages: 1}, - // Data (on Input) can't be parsed - {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", i: "0x0102", numMessages: 1}, - // Send to 0 - {from: "000000000000000000000000000000000000dead", to: "0x0000000000000000000000000000000000000000", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 1}, - // Create empty contract (no value) - {from: "000000000000000000000000000000000000dead", to: "", - n: "0x01", g: "0x20", gp: "0x40", value: "0x00", numMessages: 1}, - // Create empty contract (with value) - {from: "000000000000000000000000000000000000dead", to: "", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", expectErr: true}, - // Small payload for create - {from: "000000000000000000000000000000000000dead", to: "", - n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x01", numMessages: 1}, - } - for i, test := range testcases { - msgs, err := v.ValidateTransaction(dummyTxArgs(test), nil) - if err == nil && test.expectErr { - t.Errorf("Test %d, expected error", i) - for _, msg := range msgs.Messages { - fmt.Printf("* %s: %s\n", msg.Typ, msg.Message) - } - } - if err != nil && !test.expectErr { - t.Errorf("Test %d, unexpected error: %v", i, err) - } - if err == nil { - got := len(msgs.Messages) - if got != test.numMessages { - for _, msg := range msgs.Messages { - fmt.Printf("* %s: %s\n", msg.Typ, msg.Message) - } - t.Errorf("Test %d, expected %d messages, got %d", i, test.numMessages, got) - } else { - //Debug printout, remove later - for _, msg := range msgs.Messages { - fmt.Printf("* [%d] %s: %s\n", i, msg.Typ, msg.Message) - } - fmt.Println() - } - } - } -} +import "testing" func TestPasswordValidation(t *testing.T) { testcases := []struct { diff --git a/signer/fourbyte/4byte.go b/signer/fourbyte/4byte.go new file mode 100644 index 000000000000..2f7b24795cf2 --- /dev/null +++ b/signer/fourbyte/4byte.go @@ -0,0 +1,147088 @@ +// Code generated by go-bindata. DO NOT EDIT. +// sources: +// 4byte.json (5.955MB) + +package fourbyte + +import ( + "crypto/sha256" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +type asset struct { + bytes []byte + info os.FileInfo + digest [sha256.Size]byte +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +//nolint:misspell +var __4byteJson = []byte(`{ +"00000001": "account_info_rotate_tine(uint256)", +"00000002": "razor_balance(bool)", +"0000000c": "gumXZCZ()", +"00000033": "matchTokenOrderByAdmin_k44j(uint256[])", +"00000039": "XXX_unrecognized_adapter(string)", +"0000003a": "good_mirror(uint256,uint32)", +"00000063": "math_rotate(uint256,uint256,uint64,uint64)", +"0000006e": "display_allow(uint256,uint256,uint256,uint32)", +"00000080": "conduct_auto(uint256,uint256,uint256)", +"00000082": "artefact_keep(bytes1)", +"000000a0": "tree_stream(bytes,bytes)", +"000000a1": "pistol_valve(uint256,uint32)", +"000000b6": "matchByAdmin_TwH36(uint256[])", +"000000c4": "festival_happy(uint256,uint256)", +"000000c7": "lend_during(uint256,uint256,uint64,uint32)", +"000000da": "muscle_teach(uint256,uint64,uint8)", +"000000db": "viable_print(uint256,uint256,uint64)", +"000000de": "pledge_future(uint256,uint32,uint8)", +"000000ed": "access_coconut_alarm(uint256)", +"000000f5": "cherry_tomorrow(uint256,uint64,bool)", +"000000f8": "required_strconv(string,string)", +"00008962": "token(string,uint8,string)", +"0000aeb3": "migrateByAdmin_DQV(uint256[])", +"00012f8b": "LatiumX()", +"00014502": "totalInfected()", +"000150a0": "DEV_TEAM_STAKE()", +"0001fd01": "PamToken()", +"00020a28": "HaltTokenAllOperation()", +"000267a4": "getUint()", +"00026e13": "checkAtkBossQuest(address)", +"00027737": "aicontract()", +"0002aa37": "richtestkk(uint256,string,uint8,string)", +"0002c1dc": "Johnsonville()", +"00046c1f": "totalDragons()", +"000525fd": "robCoin()", +"0005a533": "CoalichainToken()", +"0005bfb7": "gemmyMusicLockTime()", +"000713fe": "Initiate(address,uint256,uint256,uint256,bool)", +"000751b8": "LogExtendSale(uint256)", +"00076943": "unlocker()", +"00076de7": "disableSellerCancel(uint16,address,address)", +"00085d25": "round3()", +"0008f8df": "changeIcoFinish(uint256)", +"00094161": "TERMS_AND_CONDITIONS()", +"00096469": "AuctionCreated(uint256,address,uint256,uint256,uint256,uint256)", +"0009803b": "makeProject(address,string,uint256,uint256)", +"00099cdf": "withdrawTokens3(uint256)", +"000a4a7a": "backAtIndex(uint256,uint256,uint256)", +"000ac1ff": "addparts(bytes32,uint256,uint256,uint256)", +"000adc67": "buy_the_tokens(string)", +"000b66d3": "setIcoStartTime(uint256)", +"000b9726": "MintingContract()", +"000be356": "expiredBlock()", +"000c12af": "TOTAL_TOKENs_SUPPLY()", +"000c65c3": "withdrawVNET(address,uint256)", +"000ca58e": "refundRequestTimelock()", +"000dae5c": "claimantConvicted(uint256)", +"000e02d0": "fiveHundredThousand()", +"000e28d3": "setLandsLimitPerBid(uint256)", +"000e2f3a": "totalLBSold_GENERAL_1()", +"000e60f8": "pendingBetsBalance()", +"000e7fa8": "presalePrice()", +"000f0ded": "doAirdrop(address,uint256)", +"000f71f8": "recieveNegReq(uint256,uint256,uint256,uint256,string)", +"00100a18": "NewPoll(string,string,uint256,uint256)", +"0010ed99": "getBraggerAtIndex(uint256)", +"00113e08": "getBalances()", +"00115cba": "UpdateSellAgentBounty(address)", +"001246eb": "availableFlg()", +"0012d90a": "BNB_HARD_CAP()", +"001339b0": "prizePoolTotal(bytes4)", +"00137d6e": "peculAdress()", +"0013da50": "delList(string,uint256,uint256)", +"0013eb4b": "isExist(address)", +"0014f956": "getResourcesInfo(address)", +"00152924": "setSelfContractAddress(address)", +"0015be71": "executiveOfficerAddress()", +"001667bb": "getPI_edit_34()", +"00173d65": "getShouldGenerateDna()", +"001773e6": "convertMetToEth(uint256,uint256)", +"0017cd8b": "PRIME()", +"0017e1cf": "getTeamNameForAddress(address)", +"0018b1d3": "pps()", +"0018b665": "killTokenContract()", +"0018fe0b": "changeInGameFee(uint256)", +"00190f64": "getStatusLogs()", +"00199b79": "_updateList(address[],address,address[])", +"0019a46b": "gen0CutieCreatedCount()", +"0019c97d": "redeemPop(uint256)", +"001a4f5e": "createNewRevision(bytes32,bytes32)", +"001aa026": "withdrawMarginPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"001ab1cd": "setAsBurner(address,bool)", +"001ab993": "VTestDistribution(address,uint256,uint256)", +"001b1441": "Ethernext()", +"001b1cf0": "DualMintableToken(address,address)", +"001b3fe6": "card_blue_first()", +"001ba7ea": "signWitness()", +"001baa89": "createdBy(uint256)", +"001bc69a": "getGratitudesOf(address)", +"001cf577": "wcOnCrowdsaleFailure()", +"001d7bf6": "getInvestmentArray()", +"001db74d": "FreeLove()", +"001dbe8a": "getSoftwareExecRecordLength()", +"001ed012": "previousBurners()", +"001ee6b2": "participateGame(uint32,uint32,uint32,uint32)", +"001f0479": "getResultMask(uint256,uint256)", +"001f4701": "Examples()", +"001f8d11": "removePackage(bytes32,string)", +"001f91ce": "curatorAddress()", +"001f9bc0": "set_arbits_presale_open(address,bool)", +"00201e33": "BONUS_6_DAYS()", +"00203116": "endGame(address,uint8)", +"00203385": "getTotalBorrowingItem()", +"00212667": "m_Creator()", +"0021b6cb": "getElementOfBoughtTicketList(uint256)", +"0021d364": "getNOVotesByEntity(uint256)", +"00226eb5": "getDepositNum()", +"0022771f": "numAdviserDeposits()", +"002338ef": "TLSC()", +"0023de29": "tokensReceived(address,address,address,uint256,bytes,bytes)", +"00245220": "HAJDToken(string,uint8,string)", +"0024eb4b": "getCompanyAllocation(uint256)", +"00277883": "TeamTokensHolder(address,address,address)", +"0028b91f": "Distributor(address,address)", +"0029514f": "PROCESSBY()", +"00297671": "cancelOneSell()", +"002a2133": "createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"002a228c": "initSeed(uint256)", +"002a4b14": "Nine()", +"002a5cc9": "getTicketHolders(uint256)", +"002beece": "unfroze(uint256,address)", +"002c1a9e": "percent(uint256,uint256,uint256)", +"002c8456": "toOpenVote()", +"002ce636": "settrusteeVaultAddr(address)", +"002d7c9d": "concludeFirstAuction()", +"002dc7f1": "ChangePeriod()", +"002e0ae7": "transferTokenOut(address,uint256)", +"002e1316": "maxInvestment()", +"002e1d7e": "LCOpenTimeout(bytes32)", +"002f15ca": "isExistInvestor(address)", +"002f9569": "allocatedTokens()", +"002fd07c": "_approve(address,uint256,uint256)", +"003074ff": "getFrontend()", +"003078b0": "unlockTo(address,string)", +"00310e16": "sellWolk(uint256)", +"00319aad": "_transferadvanced(address,address,uint256)", +"0031a48e": "myICO()", +"00322bb6": "sendPlatformMaintenance()", +"003259ea": "voteResult()", +"003271d5": "checkStateProof(bytes32,bytes,uint256[],bytes,bytes)", +"00333375": "minimumMainSaleRaise()", +"003338a0": "DrawOp()", +"0034451c": "_buildInternalSalt(uint128,address,address,uint256,uint64)", +"00346b57": "setHodlerStake(address,uint256)", +"003495a4": "getHighestBidder()", +"0034b5fd": "withrawFundTeacher(uint256)", +"0034f529": "_requestExists(address,uint32)", +"003538c5": "TestRegistrar(address,bytes32)", +"00354975": "VRYCoin()", +"00359e08": "presaleFinishedAt()", +"0035a45c": "isAllowedToPurchase()", +"0035ceb1": "BrinkzToken()", +"0036059c": "TESTER(uint256,string,string)", +"00360b66": "MyMonsterIds(address,uint256)", +"0036242d": "Power2X()", +"00362509": "LogWin(address,uint256,uint256,uint256)", +"00362a95": "donate(address)", +"00364ceb": "bountyManagementWalletAddress()", +"0036624a": "AmountReceived(address,uint256)", +"003705bc": "getTotalUSDInTokens()", +"0037dd47": "addUniqueSaleTokens(address,uint256)", +"00383d0a": "maxSignup()", +"00387733": "setGameResult(uint256,uint8)", +"0039522c": "emergencyWithdrawal(uint256)", +"003958e2": "LogOperatorAdd(address)", +"00397647": "addToFreelancerTotalEarned(address,address,uint256)", +"0039ad6d": "ROUNDS_KEPT()", +"0039d9db": "getNextStageStartTime()", +"003a3d80": "GetSale()", +"003a5b06": "getRoundEndBlock(uint32)", +"003a661d": "renounceOwnedOwnership(address)", +"003ab1ff": "timereum()", +"003b0a3f": "getFreeDino()", +"003b9d88": "setLowerFeePercentage(uint8)", +"003ba1ed": "setRoot(address)", +"003bcb34": "Received(address,bytes,uint256)", +"003cdf26": "Lima()", +"003cee5a": "HLCToken(address,string,string,uint256,uint8)", +"003db783": "Purchase(uint256,uint256,uint256,uint256)", +"003de230": "participantClawbackEther(uint256)", +"003e9d5b": "FillOrder(uint256,uint256)", +"003ead5f": "setPVEBattleFee(uint256)", +"003f07fa": "isValidAddress(address)", +"003fd35a": "CONTINUE_MINTING()", +"00404930": "CryptoRiyal()", +"00405351": "getWarriorChestAvailable()", +"004056c7": "validateNameInternalET(string)", +"004079b6": "CheckExec(string)", +"0040ff6c": "changeFee()", +"0041edee": "preSaleTokensLimit()", +"004240e3": "startTransaction(address,address,uint256)", +"004264c3": "overflow()", +"0042a3be": "isPublish(bytes32)", +"00432cf3": "getCurrentMarginAmount(address,address,address,uint256,uint256,uint256)", +"0043cce7": "technologyShare()", +"00442a07": "getLoanConfig(uint256)", +"00452636": "GxManagedWallet(address)", +"0045626f": "returnETHByOwner()", +"0045a4d4": "isPointerExpired(uint8)", +"0047850a": "getOfferCountByToken(address)", +"00478f87": "TIC()", +"0048236b": "setOrganName(string)", +"0048d680": "testTransferVotes()", +"00498257": "maxWeiTier2()", +"0049f068": "onContribute(uint256,address,uint256)", +"004b1e75": "actionAuthorisedBy()", +"004bd9a5": "setRate5(uint256)", +"004c942e": "Request_Dividends()", +"004d39b1": "HavvenGold()", +"004d4ed9": "setRegion(uint256,uint256)", +"004db370": "DawnCoin()", +"004dcd1c": "changeBrick(uint256,string,string,string,bytes32[],uint256)", +"004ebaa8": "silo_timer()", +"004ef6c6": "book(uint256,uint256)", +"004f3e86": "forceCancel()", +"004f4042": "takeAllPossible(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", +"004f4803": "raise(uint256)", +"004fba00": "addAdminAddress(address)", +"00501553": "subHours(uint256,uint256)", +"005016a3": "checkReturnValue(bool)", +"0050945d": "referrerLevel2Ether()", +"0050a315": "getCreationTs(uint256)", +"0050b3df": "newAlex(address)", +"0052992e": "buyForInvestor(address,uint256,string)", +"00530933": "BuyAsset(uint256)", +"00541756": "jackPotB()", +"0054438d": "validateResale(address,uint256,uint256)", +"00549c2b": "mintNonFungibles(uint256,address[])", +"0055bc9c": "withdrawAtOnce(uint256)", +"0056c4c2": "getTokensForWei(uint256,uint256,uint256,uint32)", +"0056ce89": "getCryptoPicture(uint256)", +"005733e6": "EMISSION_FOR_SALESTAGELAST()", +"00573858": "setrateIco(uint256)", +"0057e18f": "setPlatformMaintenance(address)", +"0057e8d4": "restoreToColdWallet(uint256)", +"00599e65": "getTokenOrder(address,address)", +"005a7d9a": "forFund()", +"005ab803": "LogRegister(address,address)", +"005b42cb": "MainSalePrice()", +"005b4487": "totalPayments()", +"005b7ce8": "SIGMA_EXTRACTION_BASE()", +"005b9b48": "sellAnimal(uint32)", +"005bb714": "BlocksToken()", +"005c0541": "_totalActiveBets()", +"005c33e1": "receiveFunds()", +"005d204d": "dataIdentifiers()", +"005e885e": "getSigners(uint256,uint16)", +"005ef4ec": "setReservedTokensList(address,uint256,uint256,uint256)", +"005f41cc": "create(address,uint256,uint256,uint256,bool)", +"00601801": "setCCH_edit_4(string)", +"00601d6c": "board(uint256,uint8,uint8)", +"00603126": "computeNodeId(bytes32,bytes32)", +"00604854": "FreePPCoin()", +"0060c778": "removeCompany(bytes32)", +"00613e27": "register(address,uint8,uint16,address)", +"0061c78e": "PayoutIncreased(uint256,uint256)", +"0061ebed": "TransactionFeeChanged(uint256)", +"0062c8cb": "canCallWithNoOne()", +"00634064": "Lescoin(address,address)", +"00639319": "Milestone_BankLicenseSuccessful(string)", +"006409c4": "Signed(address,uint256,uint8,bytes16,bytes)", +"0064575f": "shiva()", +"0064b1f8": "gameNum()", +"0064d618": "add_referral(address,string,uint256)", +"0065318b": "dividendsOf(address)", +"0065d700": "getTileFromBattleboard(uint16,uint8)", +"0066753e": "removeCertifier(address)", +"00675149": "isGroupExist(uint256,uint256)", +"0067a9fb": "BrokerImp(address,address,uint256,address,uint256)", +"0067ba69": "FT_TOKEN_SALE_CAP()", +"00686741": "registerProxyFor(address)", +"00691967": "SUPER_HERO_MULTIPLIER()", +"006932bb": "whitelistAllAddresses()", +"0069a132": "AshenVoid()", +"006a003e": "planetCordinates(uint256)", +"006a6ef6": "create(address,address,address,address,address,address,address,uint256)", +"006ac4bf": "findNextMonth(uint256,bytes2)", +"006ae9d5": "HopeToken()", +"006b1fd1": "purchasedCount()", +"006bcb71": "witness(bytes32,address)", +"006c10e8": "trackPurchase(uint256,uint256)", +"006c2abc": "privateSaleEndDate()", +"006c81d3": "isAllocated()", +"006cfea8": "_delegateAssetOwnerAdded(bytes32,address)", +"006d96e0": "hasVaultAccess(address,address)", +"006ddae3": "changevotePrice(uint256)", +"006e3a1d": "exitOverPlayer()", +"006f91d2": "RiskPrice(uint128,uint128,uint128,uint128)", +"006fbd88": "changeSellGenesPrice(uint256,uint256)", +"00703d48": "crearCelda(uint256,uint256,uint256,uint256,uint256,uint8)", +"0070c3b3": "Proxy(address)", +"0070c537": "increaseBid(uint256)", +"007188d3": "FAOC()", +"0072615c": "claimedBoards(uint256)", +"00728f76": "vestingAmount()", +"0072d7b5": "addressAdded(address)", +"00732113": "setHolderInformation(address)", +"00739f2a": "changeStartDate(uint256)", +"0073c769": "disableTime()", +"0074477d": "listMultipleItems(uint256[],uint256,address,bytes32)", +"0075a317": "mintTo(address,string)", +"00761731": "createContract(bytes32,uint256,uint256,uint256)", +"00774360": "deploy(bytes)", +"00797f77": "has_donated(address)", +"0079efb0": "withdraw1()", +"007aa091": "san_whitelist(address)", +"007aaac9": "sisterCheckPrice(uint256)", +"007b2a03": "GoldTokenERC20()", +"007bd509": "generalTerms()", +"007c197d": "ISE()", +"007cb3fb": "updateOraclizeGasPrice(uint256)", +"007cc224": "RESERVED_TOKENS_FOR_PLATFORM_OPERATIONS()", +"007d8051": "issueAndFreeze(address,uint256,uint256)", +"007e3dd2": "isComptroller()", +"007e5d08": "updateAvailable()", +"007e9355": "GetAllChallengesByAUser(address)", +"008000d6": "configSale(uint256,uint256,uint256,uint256)", +"008066b6": "doftManaged()", +"0081d6e5": "updateGravatarImage(string)", +"008201e7": "TokenSold(uint256,uint256,uint256,address,address,string)", +"00821b81": "bonusCalculation(uint256)", +"00821de3": "parentAddress()", +"00822599": "deleteMasternode(uint256)", +"008250e5": "fortune_new()", +"00837b15": "balanceEth(address)", +"00849f88": "changeFundCollection(address)", +"0084dbf5": "ProofOfEtherDelta()", +"0084fe51": "Exercise(uint256,uint256)", +"00851303": "tokensForSiteReg()", +"008557d2": "Buy(uint32,bool,bool,address)", +"0085c647": "setPreICOEndDate(uint256)", +"00862c3c": "areTokensUnlocked()", +"00865f92": "parseJsonArrayAndGetFirstElementAsNumber(string)", +"0086969f": "dissalowFreezing(address)", +"0086bb3e": "teamUnlockedAfterCliff()", +"0086ce4d": "LogUpdatedLimitPerDay(uint8,uint256)", +"00873367": "comparisonchr(string)", +"00873c97": "CLPContractToken()", +"00882097": "EtherDeltaDeposit(uint256)", +"00886980": "LogClaimReward(address,uint256)", +"0088fca8": "start_go_quiz(string,string)", +"0088fed7": "addIndex(address,address)", +"008a3ca1": "reverseSplit(uint8,bytes6,uint8,uint32)", +"008a5c23": "getCurEarlyIncomeByAddressRound(address,uint256)", +"008a706b": "Primal()", +"008a745d": "claimDividendShare(uint256)", +"008ad306": "changeLockCostPerHour(uint256)", +"008bdd13": "isWithinSaleTimeLimit()", +"008bed3e": "getAgreementCount()", +"008c1b28": "POSTSALE_START()", +"008c3215": "addReplies(address,address[],string,string)", +"008c8920": "currentType()", +"008ca816": "isSalePaused()", +"008cbc8c": "oraclize_query(uint256,string,bytes[4])", +"008df454": "ratio(uint256)", +"008e0f1b": "getTeam(uint256)", +"008e6865": "buyTicket(uint256,uint256,address)", +"008e8135": "setProviderRateHistory(uint256,uint256,uint8,bool)", +"008f7cc2": "requestLoan(bytes8,uint128,address,address,address,uint256,uint64,bytes)", +"008f8b35": "currentRoundInfo()", +"008fcc94": "stageEndDate(uint8)", +"00903c69": "Kether()", +"0090e9c2": "transferBonuses(address)", +"00918c7b": "icoPeriodTime()", +"0091d862": "Minaxis()", +"00922db6": "secondWeekBonusInWeek()", +"00923f9e": "tokenExists(uint256)", +"0093703c": "bankConfirm(address,uint256)", +"0094151b": "setPurchasable(uint256)", +"0095716b": "crownBalanceOf(address)", +"00961320": "stringToUint()", +"0097130e": "_realBalanceOnEther()", +"00971a30": "court()", +"00975ba6": "_sendP3D(address,uint256)", +"0097b607": "validRareId(uint256)", +"00983401": "setAuthor(string,string,address,uint256)", +"00987265": "migrateThroughAllForks()", +"0098728f": "buyXaddrForContract(address,uint256)", +"009888ce": "calcNextPrize()", +"00988a16": "EthMinContributionUpdated(uint256,uint256)", +"0098fe2b": "refundWhite(uint256,uint256,uint256,uint256)", +"00991d8e": "setMakeFee(uint256)", +"0099d386": "enableTrade()", +"009a1faf": "getSumOfGamblingPartiesBonusPool(uint256)", +"009af857": "setnextRoundId(uint256)", +"009b38fa": "canBeFinalizedNow(uint256)", +"009b9369": "getVoteNumber(uint256)", +"009ca5e8": "maxTokenWinValue()", +"009e2297": "SetFreeDCT(uint256)", +"009f9262": "setEthPrice(uint256)", +"00a0190e": "BIDDING_DURATION()", +"00a051ca": "FiCoinFundDeposit()", +"00a09a7a": "devTokensToken()", +"00a0d28f": "batchExecute(uint256[])", +"00a13901": "burnRemains()", +"00a16cab": "checkCutoffsBatch(address[],bytes20[],uint256[])", +"00a18b30": "setTeamAddress(address,address,address,address,address)", +"00a219f4": "payForDemocracy(bytes32)", +"00a22ee4": "EXOToken(address,address,address,address,address)", +"00a3216c": "getNextDepositBlockIndex()", +"00a32af6": "AIRDROP_WALLET()", +"00a35aa2": "deleteBoolValue(bytes32)", +"00a470d0": "doInvite(uint256,uint256,uint256)", +"00a4b146": "SDCToken()", +"00a53598": "emergencyToggle()", +"00a58a2a": "Coffee()", +"00a5e715": "TripCoinTeamSupply()", +"00a626f6": "getACLRole7123909213907581092()", +"00a676f9": "getExists(bytes32)", +"00a6dec6": "setPayerPercent(uint256,uint256)", +"00a70e03": "priceOfTicket()", +"00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", +"00a7fdfc": "bids_count()", +"00a81ef6": "emitRoleRemoved(address,uint8)", +"00a8efc7": "subBalance(uint256)", +"00a8f276": "last_transfer_state()", +"00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", +"00a9f0d4": "getDayRestDepositLimit(uint256)", +"00aa21e6": "transferFromVault(bytes32,address,address,uint256)", +"00aa25b2": "_isValidAddress(address)", +"00aac98b": "Griefing(uint256)", +"00ac4663": "getWarrantyQuote(string,address,uint256,uint256,uint256)", +"00ac77a0": "ownerSetCanBurn(bool)", +"00ad3a23": "RELEASE_PERIODS()", +"00ad800c": "name(uint256)", +"00ad8035": "SwingerTokenSPICO()", +"00ad861f": "README()", +"00ad8b69": "releaseVestingAllocation()", +"00adc382": "addressHash(address)", +"00aea59b": "reviewAudit(uint256)", +"00aec05d": "BEECASHBACKHOME()", +"00aeef8a": "deposit(uint256,uint256,uint256)", +"00af4274": "getTokensForEther(uint256,uint8)", +"00af9811": "checkRedemptionFulfilled(bytes32)", +"00afd295": "getAllCellInfoFrom_To(uint256,uint256)", +"00afdcef": "ELink()", +"00b08526": "GXCH()", +"00b172d7": "buyTokensForProposal(uint256,address)", +"00b23740": "VersusArenaToken()", +"00b2516d": "vetoMotion(uint256)", +"00b34747": "contractInitialized()", +"00b37044": "totalDonated()", +"00b3c619": "VoteSvp001(address,uint256,uint256)", +"00b3c91b": "purgePack(uint256,uint256)", +"00b44750": "acceptMembership(address,uint8,uint256,address,uint256)", +"00b5152b": "VibeXChainToken()", +"00b526e4": "_sendTokensManually(address,uint256,uint256)", +"00b5277a": "checkSell(uint256)", +"00b55554": "emergencyDropEth()", +"00b56aa7": "emitSynthRemoved(bytes4,address)", +"00b5988e": "lockTournament(uint256,bool)", +"00b5b223": "computeResponse(uint256,uint16)", +"00b6849f": "airDrop(address[])", +"00b6b707": "accept(uint256,address,uint256)", +"00b76307": "ChangePrivilege(address,bool,bool)", +"00b767fa": "EventAddAdmin(address,address)", +"00b79dd9": "taxlvlEconomy(string,string,string,string,string)", +"00b7f20a": "isDebtor()", +"00b8a73c": "IntegrativeWalletToken()", +"00b9189d": "setPreIcoContract(address)", +"00b9840a": "DBDHToken()", +"00b99f8c": "view28()", +"00b9eb8b": "Coinchangex(address,address,uint256)", +"00ba092c": "is_current()", +"00ba3e50": "setProductAttributes(string,uint256,uint256,string)", +"00badc85": "getcvotesid(string)", +"00baea15": "pastOneDay()", +"00bbec1c": "payServiceProvider()", +"00bc83a9": "xToken(address,string,string,uint8,uint256)", +"00bca785": "state_of(address)", +"00bcb883": "ProposalAdded(uint256,address,string,uint256)", +"00bd35b8": "EventAddToBattle(address,uint64)", +"00bd6f4c": "transferToAddress(address,uint256,bytes,bool)", +"00bde030": "getDurationS()", +"00bdfbcd": "installed()", +"00c023da": "revokeAttribute(address,bytes32,bytes)", +"00c17ee4": "setConfig(uint256,uint256,string,string,uint256,uint256)", +"00c1e956": "addressFundBounty()", +"00c2943c": "declareWinner(uint256)", +"00c2b78e": "voteFor(uint256,uint256)", +"00c33731": "prepair(address)", +"00c42173": "winnerDeterminedDate()", +"00c43503": "totalReturns()", +"00c4cefa": "toKeyValue(int256,string)", +"00c56675": "setNegativeGrowth(int256)", +"00c5f509": "preICOSupply()", +"00c61e93": "hRCoin()", +"00c721ab": "setHand(uint256)", +"00c822fb": "oraclize_query(string,bytes[2],uint256)", +"00c8bb45": "addMeleeParts(uint8[])", +"00c90ac8": "AutoCoinICO(uint256,uint256,uint256,address)", +"00c988e8": "crowdsaleConcluded()", +"00c99206": "setIdentifier(bytes32)", +"00c9c8e7": "_emitFeeSet(uint256,address)", +"00cab8b1": "lockAddressValue(address,uint256)", +"00cae5df": "solve(uint256,bytes32)", +"00cb1ae4": "methodThatThrows(bool)", +"00cb41e3": "getWithdrawableDates()", +"00cb527f": "miningFive()", +"00cc15b0": "lengthEncode(uint256)", +"00cc48a6": "updateNameIP(string,string)", +"00ccbc68": "firstRedemptionRequest()", +"00ccfdab": "removeForgivedChar(uint256,string)", +"00cdbc1f": "changeHash(bytes32)", +"00cde2bb": "releaseAccount(address,address)", +"00ce2057": "triggerPayment()", +"00ce4462": "register_with_node()", +"00ce8e3e": "getUsers()", +"00ce9f8a": "getPeggedTokenValue(address,address,address)", +"00d11245": "Mallory(address)", +"00d17799": "defaultCreatedCount()", +"00d2c31d": "getHashSignatures(uint256)", +"00d30eb9": "firstWeekPreICOBonusRate()", +"00d32a75": "TransferDFN(address,address,uint256)", +"00d357d1": "CustomcoinCrowdsale(address)", +"00d3f51a": "VirtualRealityChain()", +"00d4b768": "currentMideTokenTime()", +"00d4b959": "ico1total()", +"00d52342": "loseGame()", +"00d56d71": "StageTwoEnable()", +"00d5da02": "setTokenDescription(string)", +"00d7b3a9": "Exoso()", +"00d7e9cf": "landPricePrevious()", +"00d7f5d8": "Human1StandardToken(uint256,string,uint8,string)", +"00d80e07": "getGuardianSale(uint256)", +"00d84fd8": "remove(uint32)", +"00d9694c": "setBonusRound3(uint256)", +"00d9f24e": "UpdateNumPlayers(uint256)", +"00db90d1": "setCanWithdrawBeforeEnd(bool)", +"00dba80c": "mineableTokenStorageContract()", +"00dba864": "TOKENOPSPLATFORM_JOINTTOKENS()", +"00dbeb31": "getPromoCodeForEther(bytes16)", +"00de1eb4": "cofoundersSupplyRemaining()", +"00de8393": "SetLimit(uint256,uint256)", +"00dee43f": "initMinting()", +"00df415e": "preSaleZxcCap()", +"00dfafa4": "addMarket(address,uint256,uint256,uint256,uint256)", +"00dfd21a": "getUserDocId(address,uint32)", +"00dff399": "Fibonzi()", +"00dff60a": "partnerPreICOBonus(address)", +"00e063bc": "AddressQuery(address)", +"00e0c53f": "hold()", +"00e11919": "setClamTax(uint8)", +"00e1986d": "grantVestedTokens(address,uint256,uint64,uint64,uint64)", +"00e29488": "selfRegisterDINWithResolver(address)", +"00e31614": "modifyGuess(uint32,uint64,uint64)", +"00e37634": "batchRefundzFixed(address[],uint256)", +"00e38410": "getVotingMetadata(uint256)", +"00e43ee9": "setMigrationStatus(uint256,address)", +"00e46700": "setMinimumPassPercentage(uint8)", +"00e4768b": "setPrice(address,uint256)", +"00e4778a": "addAccessoryIdMapping(address,uint64)", +"00e4fc14": "withdrawNetfRevenue(uint256)", +"00e520d0": "_emitSkillEvaluated(address,address,uint8,uint256,uint256,uint256)", +"00e5fc5f": "rawVotes(address)", +"00e610fc": "passwordMint(address,uint256,bytes32)", +"00e62620": "zoDailyLimit()", +"00e64f6d": "regularDonations()", +"00e6abbe": "EggFactory(address)", +"00e6b9f8": "MetalToken()", +"00e756cc": "roleAddressAliaser()", +"00e7d289": "registerListening(address)", +"00e8516a": "buySamples(uint256,address)", +"00e85279": "ownerLock()", +"00e893ce": "crowdsaleTokenPriceDenominator()", +"00e97827": "percentRake()", +"00e9c006": "deleteTransaction(uint256)", +"00ea11ec": "calcCakAmount(uint256)", +"00ea3146": "postGood(bytes32,uint256)", +"00ea81c0": "mint(address,uint256,string,string,bytes32[],bytes32[])", +"00ea8737": "myTickets()", +"00ead724": "Ticket(uint256,address,bytes3)", +"00eaedc8": "retrieveVanityForWallet(address)", +"00eb52f2": "setIsActivated(bool)", +"00ebc96e": "setCrowdsaleEndTime(uint256)", +"00ed015b": "setETH(address,uint256)", +"00ed2592": "sendEvents(address,uint256,uint256)", +"00efaa75": "tokenFinishMinting(address,address)", +"00f052f6": "getBidByBidder(address,uint256,address)", +"00f12159": "SpectrumNetworkNetwork()", +"00f17754": "accountAt(int256)", +"00f1c7ec": "setAllocationFee(bytes32,uint256)", +"00f29d55": "isOrdered(address,bytes32)", +"00f2c41b": "calculateTotalPayoutAmountAndCommission()", +"00f31e76": "isPresent(bytes32)", +"00f380f4": "communityFund()", +"00f3e717": "mrate()", +"00f40839": "LogTowncrierCallback(uint64,uint64,bytes32)", +"00f43f6d": "Simple_Claimable_Temporized_Stake()", +"00f45438": "createTokenToMarket2019()", +"00f49203": "Hard_Cap()", +"00f545c6": "addressBelongsToAccount(address,address)", +"00f54f0a": "Wallet2()", +"00f5544f": "openGame(uint256)", +"00f55d9d": "destroy(address)", +"00f5822c": "changePinakion(address)", +"00f62717": "setMockedBlockTime(uint32)", +"00f64e66": "StakePoolICO()", +"00f666d4": "QueueManager()", +"00f6ca59": "runCredits()", +"00f714ce": "withdraw(uint256,address)", +"00f733e9": "pieceForSale()", +"00f784a4": "OrderAdded(address,address,uint256,uint256,uint256)", +"00f7c5be": "unregisterAddress(address)", +"00f821a7": "addMintContract(address)", +"00f9ac78": "setVoteFactory(address)", +"00fa081a": "multiplicator()", +"00fa7be5": "EnterToken()", +"00fac74a": "salesdeadline()", +"00faf4dd": "getTokenDivisor()", +"00fca46f": "initialAuctionEndTime()", +"00fdc73f": "currentMinPurchase()", +"00fdd58e": "balanceOf(address,uint256)", +"00fe03e3": "icoSoftCapInWei()", +"00fe4789": "batchFillOrKillOrders(uint256[],bytes[])", +"00fe9590": "getMaxInt64()", +"00fec4ba": "afterForkBlockNumber()", +"00fece08": "giveDown(address,address)", +"00ff2fb1": "log_2(uint256)", +"00ff6262": "DefensorWallet(uint256,string,string,uint8)", +"010066ad": "joinWhiteList(address)", +"01008275": "addPersonalCap(address,uint256)", +"0102305b": "logGameData(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", +"01024700": "OnePhaseAuction()", +"0102fcfc": "distributeOwnership()", +"010342f4": "averageSalePrice()", +"0103c92b": "userBalance(address)", +"01044632": "setDevelopersTokens(uint256)", +"0104855f": "mctTotalSupply()", +"01056361": "setupFunding(uint256,uint256,address)", +"0106172a": "invalidEarlyPurchaseIndexes()", +"01061ae1": "removeArtworksByString(string,uint32)", +"010648ca": "setDocument(bytes32,string,bytes32)", +"01067543": "getParentCount(address)", +"01068767": "ABL(address,address)", +"0106bc8f": "PVE()", +"010731c0": "sendCryptedHand(bytes32)", +"0107a4eb": "XRRfrozen()", +"0107a8df": "withdraw_bonus()", +"01080c6f": "activateTokensForArbitration(uint256)", +"0109057e": "WIZISHOPPINGCOIN()", +"01090c4e": "_removeProxyManager(address)", +"01090c9e": "PowerOfPutin()", +"01095962": "oraclize_setCustomGasPrice(uint256)", +"0109f22e": "CrowdSale()", +"010a38f5": "getTokenId()", +"010a7d65": "tryTransfer(address,uint256)", +"010abbd0": "getCardOwner(uint256)", +"010ae545": "creditTokens()", +"010afc20": "claimWrappedContractAdmin()", +"010b66de": "mainSale_Cap()", +"010b8701": "hasSubstring(string,string)", +"010ba4e2": "balanc()", +"010bd255": "DPNToken(address,address)", +"010cbd30": "_triggerPVPSignUp(uint32,uint256)", +"010cc97c": "transferMarketIncentivesFund(address,uint256)", +"010d214e": "WithdrawProfit(address,uint256)", +"010d2446": "getProblem(uint256)", +"010d3bf6": "buyUsingRefBonus(address,address)", +"010dbfec": "sell(uint256,bool)", +"010e3964": "mintTokenForPreCrowdsale(address,uint256)", +"010e3c1c": "setInflationChange(uint256)", +"010e8209": "admin(address,uint8)", +"010f7735": "burnToken(uint256,string)", +"0110ea76": "TanterX(uint256,string,uint8,string)", +"01114d74": "getCCH_edit_33()", +"0111ae8a": "maximumValueAfterGuaranteedPeriod()", +"01122ddb": "BonusEnrolled(address,uint256,uint256)", +"011285da": "multiplication()", +"0112e2c4": "CotteToken()", +"01132b70": "setXTVNetworkEndorser(address,bool)", +"0113b261": "getNumberOfShareHolders(uint256)", +"01146844": "loadFund()", +"0114af17": "investment_address()", +"0115a2f2": "_packAddressAndFunctionId(address,address,bytes4)", +"01169399": "createEthTknDelegation(address,address,address)", +"0116bc53": "CostChip(uint32)", +"0116bfc0": "BuyUpgrade(uint256)", +"01172005": "affiliateContract()", +"011721ad": "getValidation(address,uint256)", +"01173a74": "mintToken(address)", +"0117b324": "addTestimonial()", +"0118251c": "getHighWinPercent(uint256)", +"011847a2": "inviteReward()", +"011857d0": "bntConverter()", +"011879db": "createAuction(uint256,uint128,uint128,uint128)", +"0118895c": "reservations(address,uint256)", +"0118e662": "SiekechuCoin()", +"0118e686": "isCrowdsaleActive()", +"0118fa49": "create(uint256,string)", +"0119ada7": "eliminate(address)", +"011a44bf": "isAllFrozen()", +"011a8eb7": "DrawPrepareEvent(uint256)", +"011aab02": "Oculta(uint256,string,string)", +"011afdd7": "hello2()", +"011b1a7b": "setCrowdsalePrice(uint256,string)", +"011b29e3": "changeCourse(uint256)", +"011bc2e1": "calculateWinners()", +"011c3d06": "getCurrentStats(uint256)", +"011ce353": "OwnerRecall(address,uint256)", +"011d07c0": "getMyIdeas()", +"011d0b58": "buyListing(bytes5)", +"011d79ca": "CrowdsaleEnabled()", +"011db570": "calculateObtained(uint256)", +"011de7aa": "intervalAtTime(uint256)", +"011e0162": "Flercoin()", +"011e6492": "checkSuccess()", +"011eb18c": "removeAddressFromOperators(address)", +"01201c0b": "getTheTokens()", +"01209d09": "updateVaults(address,address)", +"0121683f": "createAuction(uint256,uint256)", +"01216f05": "calcEthReceived(uint256)", +"0121b93f": "vote(uint256)", +"0121be14": "_createCard(address,uint16)", +"01233474": "saleInProgressB()", +"012397ff": "firstroundprice()", +"01239adf": "maxPos()", +"0123aff4": "BurnCoinToken()", +"0124188d": "CAIRToken()", +"01250e4d": "CraigGrantEatDick()", +"01253fbf": "threshold1()", +"0125ae62": "setMeterPoint(int256,address,int256)", +"0125d7c8": "IPAYTOKEN()", +"0126b8b6": "batchAllocateTokensBeforeOffering(address[],uint256[])", +"01272c2c": "canExecute(uint32)", +"0127eb0d": "angelAdminAddress()", +"01281641": "OfferCanceled(uint256,bytes,address)", +"01281867": "keccak256calc(address)", +"01284ad4": "removeAddressFromPrivateWhiteList(address)", +"012874a3": "EthsMePresale(address,address)", +"01289e3a": "AvenceToken()", +"01293b5c": "defaultURIEnd()", +"012a08f8": "_vote(uint256,bool,address)", +"012aa25e": "releaseTokens(string,address,uint256)", +"012aa809": "InvalidCoinUsage(string)", +"012b1f73": "announceEndOfGame()", +"012bac23": "addCoinAllowance(address,address,uint256)", +"012beac9": "vendorRegistry()", +"012cd104": "LoveCrowdsale()", +"012d61e1": "buyRedirect()", +"012defec": "harvests(bytes32)", +"012ea37c": "arrangeFreePoints(uint256,uint256,uint256,uint256)", +"012f52ee": "escrows(uint256)", +"012fd089": "EscrowAccountCrowdsale()", +"012fec73": "KakushinToken()", +"0130371a": "MAX_SUPPLY_NBTOKEN()", +"01303778": "refreshMonarchyGamesReward()", +"013054c2": "redeemToken(uint256)", +"01307338": "dispatchRewardToken()", +"013130c0": "maximalInvestmentTimeTreshold()", +"01326c34": "clearAddresses()", +"0132cc82": "tokenFounderLockTime()", +"0133311b": "deleteLockTime(address)", +"01339c21": "launch()", +"0133db3a": "nameOf(uint256,address)", +"0133e1fa": "RunchuToken(uint256,string,uint8,string)", +"01340592": "MAX_CONTRIBUTION_USD()", +"01345514": "BJLToken()", +"013459ca": "getTokensForGraphenePower()", +"013512e3": "CABtoken()", +"0136356d": "unregisterAddresses(address[])", +"01365406": "deathData_f19()", +"01367751": "PryzeSale(address)", +"01372911": "throwsWhenActivatingBeforeDeployingANT()", +"0138aac1": "getUserBalanceOnToken(address,address)", +"0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", +"013953a6": "amountForRefundIfSoftCapNotReached()", +"01395d33": "tokenPriceInWeiForDay(uint256)", +"0139caad": "payout(address,uint256,uint256,bool,uint256)", +"013a0e9b": "pairwiseOr(uint64)", +"013a83f1": "beat(uint256,bool,uint8)", +"013a9c50": "updateWallet(uint256,uint256)", +"013b490c": "updateDaoAddress(address)", +"013cf08b": "proposals(uint256)", +"013d48bd": "getGuessStatus(uint256)", +"013d64bd": "setCanCall(address,address,string,bool)", +"013dbf17": "crowdsaleProgress()", +"013e5415": "getGoldDataInitialized()", +"013e7c35": "getUrlCountOf(address,address)", +"013ed428": "author1()", +"013eebd7": "getmaxcardcount()", +"013efd8b": "tokenToEthSwapOutput(uint256,uint256,uint256)", +"013f83c9": "createTeam(address,uint32[])", +"013f84fa": "getAllNumberOfBets()", +"013fc2a3": "SmillesCoin()", +"0140e359": "stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32)", +"0140ea82": "setNormalRoomMin(uint256)", +"0141e90a": "ICOaddress(address)", +"01429244": "getVendorApplicationsCount(string)", +"0142b8d1": "makeMerkle(bytes,uint256,uint256)", +"0142c8de": "currentPeriodRate()", +"0142c9ae": "isSoleout()", +"0142d43e": "notHungry(uint256)", +"0142d7b4": "authorizedBurnTokens(address,uint256)", +"0142f904": "CalculatePriceofRigs(uint256,uint256,uint256)", +"0143279c": "whitelistTicket(address)", +"014345c8": "SENDER_BALANCE()", +"01447eba": "disableCrowdsale()", +"0145e333": "init(address,address,address,uint256,uint256)", +"014647f4": "approve(address,bytes)", +"0146705b": "approvedRatio(string)", +"0146d0ca": "sendVote(string)", +"01491f09": "baseRateInCents()", +"01492a0b": "matchingEnabled()", +"0149ae4b": "finalizeExit(uint256,bytes32)", +"0149eea0": "view_get_Treasure()", +"014a7453": "getPI_edit_22()", +"014a897d": "Token_2()", +"014b0732": "validateTrade(address,address,address)", +"014bed81": "setAmountToKoikeToken(uint256)", +"014c3dbc": "current_external_block()", +"014c8ac0": "CBToken()", +"014d0f68": "hardCapHighUsd()", +"014d36f4": "Afroin()", +"014e5fde": "ARKController_1_00()", +"014e6996": "ZTF()", +"014e95ba": "rateBase()", +"014f7f22": "joinCount()", +"014fc169": "setLockToAccount(address,address)", +"015008b1": "reLoadXaddr(address,uint256)", +"01500a97": "getTokenForCommunity(address,uint256)", +"01501347": "disableRefund()", +"01502460": "freezeTransfers()", +"01509730": "userdynamicprofis2()", +"0150b530": "addressesLength()", +"015129a1": "sellPriceEth()", +"01512db1": "removeIntervalCoefficient(bytes2,uint256)", +"01515a7b": "weiToReceive()", +"01518d76": "sendQuery(uint256)", +"0151cf1d": "setVotingWinner(address)", +"01538868": "_setTokenURI(uint256,string)", +"015493b4": "setFoundationWallet(address)", +"0154d3ea": "notexistdept(string)", +"01567739": "beneficiaries(address)", +"015689c6": "testControlCreateWithParentsParentSameItemId()", +"0156b323": "destroyTokensFrom(uint256,address)", +"015773b6": "set_private_sale_total(uint256)", +"015854f8": "quoteBid()", +"0159a91d": "concatenate(string,string,string,string)", +"015a18ed": "start(bytes32)", +"015a4ead": "unfollow(address)", +"015aeda7": "setAttribute(address,bytes32,uint256,bytes32)", +"015afa55": "winnerIsB()", +"015bf264": "depositTokens(uint256,address,uint256)", +"015c1c7a": "toTokenAmount(address,uint256)", +"015cb3ff": "pauseTime()", +"015cb8cf": "baxianchain()", +"015ccd07": "DockToken(address)", +"015d200f": "lockBalanceAll(address)", +"015def53": "priceFactorC()", +"015e4f3a": "getConfigUint(int256,bytes)", +"015e52c6": "getPool(uint32,int256)", +"015f32f9": "cappedSaleStartTime()", +"015fa6c1": "setWeiCap(uint256)", +"015ff39f": "GNOSIS()", +"0160751c": "setDepositary_function(uint256)", +"01608f5f": "amountOf(address)", +"0160e2f6": "cancelOptionOrder(address[3],uint256[3],bool)", +"01612def": "additionalInternal(bytes32,uint256[])", +"0161d5f0": "createCampaign(address,uint256,bytes32,bytes32,bytes32,bytes32)", +"016211b5": "bonusAllocation()", +"01621527": "destEthDevs()", +"01623ee4": "basicRate()", +"0162827c": "bonus02End()", +"0162f799": "getPrivatePresaleFundersCount()", +"01637ff4": "getAccessory(uint256)", +"0163d8ff": "MostValuableCoin()", +"01644ea7": "getSimple()", +"016474ce": "withdrawalRound(address,uint256)", +"01655e31": "CollectibleBidEntered(uint256,uint256,uint256,address)", +"01659863": "_0xBitcoincashToken()", +"01665393": "BLOCKRADIO()", +"016774e9": "donatetokens(uint256)", +"0167eb85": "stone()", +"01681a62": "sweep(address)", +"016899de": "depot()", +"0168e2e3": "JonsCoin()", +"0168f063": "tokenAmountOf()", +"016a8cf6": "topUp(address,uint32,uint192)", +"016aba15": "setDividendTransactionNumber(uint256)", +"016b0882": "Cst()", +"016c6601": "_receiveDeposit()", +"016d5807": "_mint(address,uint256,uint256,uint256)", +"016d60b3": "buyStoreCore(uint256,uint256,uint256)", +"016d7c83": "pauseLottery(uint8)", +"016deccc": "createContractSpecial(string)", +"016e03b1": "getItemIdToTokenId(uint256)", +"016e128b": "ProfitWithdrawn(address,uint256)", +"016ea771": "isNotCommittee(address)", +"016eb8a8": "percentage(uint256,uint256)", +"016f34ad": "callgSoftCap()", +"016fa018": "getPartnerBalance(address)", +"01725a0b": "demo()", +"01738ecd": "setCurrent(uint256)", +"0173e3f4": "addCoins(uint256)", +"0174e12b": "myx()", +"01750152": "isNode(address)", +"01769b37": "sendTokensToSeven(address,address,address,address,address,address,address,uint256)", +"0176b596": "DreamBit()", +"01770e0c": "NKTToken()", +"01775f23": "_closeBooks()", +"01778b6d": "Ynfiniti()", +"0178090c": "toSHA256(string)", +"01788d1d": "Decabes()", +"01788d56": "balanceOfTranche(bytes32,address)", +"0178b8bf": "resolver(bytes32)", +"0178fe3f": "getData(uint256)", +"017945ba": "changeDollarPrice(uint256)", +"017972af": "getNumbersFromHash(bytes32)", +"017b0d00": "highestBidForEdition(uint256)", +"017b39a7": "getMiniPoolEdit_1()", +"017bef67": "addExplorationByShip(uint256,uint256,uint256)", +"017e322c": "getCurrentGameSteps()", +"017e6f5f": "reOrganizeAuthorities()", +"017f27fc": "saleIsClosed()", +"017fa10b": "returnUint128(uint128)", +"017fa51d": "shouldRevertPure(bool)", +"017fe809": "getPower(uint256)", +"01828e61": "Quecoin()", +"01836037": "foundationBoard()", +"01838f01": "addAnimal(uint8,address)", +"0183f310": "potMembers(uint256)", +"0184e952": "award(uint256)", +"0184fc35": "crowdSaleAddress()", +"0185f409": "getInvestorAddress(uint256)", +"01863f79": "thisContactsTokens()", +"0186aa16": "OxBioToken()", +"0186c36e": "getCurrentExchageETH()", +"0187699c": "VerixChain()", +"0187a677": "bbodServiceRegistry()", +"0187e973": "PricingStrategy(uint256,uint256,uint256,uint256)", +"0188c09f": "altList(uint256)", +"0188fdef": "setMaximumBuy(uint256)", +"01890840": "MilestonePricing(uint256[])", +"0189bd41": "getProofOfPerfBlockStateState(bytes32)", +"018a25e8": "getBuyPrice()", +"018aba3f": "createPledge(address,uint256,uint256)", +"018b06ff": "isWinner(address,bool)", +"018b64b6": "AuctionCancelled(address,uint256)", +"018d3490": "assignOracles(uint256,address[])", +"018d6f7a": "showethconf(address)", +"018de5c5": "distributeCBC(address[],uint256,uint256)", +"018dfaa0": "calcCount(uint256)", +"018e13d0": "numOfCurrentEpoch()", +"018ed439": "_getTokenForType(address,uint256)", +"018f5472": "isAUser(address)", +"018fa360": "getDeposits(address,address)", +"018fbf9f": "hashAt(uint16)", +"01909317": "_storeSettingDataState(uint256,address,uint8,string,address,address,string)", +"0190b805": "editEarlyParicipantWhitelist(address,bool)", +"0190e84f": "Bitscorone()", +"0191903e": "setBlogregistry(address)", +"0191d35c": "summFounders2()", +"0191dc92": "numOfAdmins()", +"01930b6e": "darknodeDeregisteredAt(address)", +"01933c43": "TOWN_START_PRICE()", +"0194abaf": "prolong()", +"0194ac16": "BlockchainFUN(uint256,string,string)", +"0194db8e": "sum(uint256[])", +"01968a56": "mintAllocation(address,uint256)", +"01970353": "setStepOneTime(uint256,uint256)", +"01970c6b": "team_funds()", +"0197d972": "VESTING_PERIOD()", +"01984892": "name(address)", +"019859bb": "changeMembershipContractAddr(address)", +"0198632a": "getPurchasedProducts()", +"0198aa74": "firstsaleOpen()", +"01991313": "scheduleCall(address,bytes4,uint256)", +"01996951": "ethPerTransactionLimit()", +"01998ad4": "GlobalAdminChanged(address)", +"0199c7b2": "numberOfHolders()", +"019b1576": "backupAddress()", +"019b32ad": "transferToSalesPartner(address)", +"019c3f52": "newCollectible(uint256,string,uint256,uint256,uint256,int256,string,uint256,string)", +"019c5675": "BatchComplete(uint256)", +"019c920c": "setcompany(uint256,string,string)", +"019d2729": "approve(bytes)", +"019e56fd": "findCurrentFor(address)", +"019f232a": "getTask(address)", +"019f5c5b": "narcoCore()", +"019f64cc": "payBack()", +"019f80b6": "toSecond(uint256,uint256)", +"019f8e26": "AddedManager(address)", +"019fef03": "resetFine(uint16)", +"01a00216": "addMod(address)", +"01a01551": "getApprovers(string,string)", +"01a048c3": "mintLockTeamTokens(address)", +"01a08a8b": "getWorkerPool(address,uint256)", +"01a0dee1": "investorsSupply()", +"01a12fd3": "removeAlerter(address)", +"01a15ee9": "mintTokensLocked(uint256,int256,address,uint256,uint256)", +"01a1b778": "battleId()", +"01a2789e": "transferPreSignedBulk(address[],address[],uint256[],uint256[],uint256[],uint8[],bytes32[],bytes32[])", +"01a2f48a": "changeAssetPackPrice(uint256,uint256)", +"01a2f75c": "createContract(address,uint256,uint256,uint256)", +"01a340a5": "totalBoughtColor()", +"01a413b9": "bankrollAvailable()", +"01a50001": "rewardEvery100000Draw7(uint256)", +"01a521d6": "getSellerBalancesOfCurrentAuctions(address[],address[],address)", +"01a53d3b": "maximumBuyBackPriceInCents()", +"01a5e3fe": "isWhitelisted(bytes32)", +"01a682c1": "createTeam(string,string)", +"01a68a94": "donkeyCoin()", +"01a6ab93": "PassedGateway(address,uint256)", +"01a77625": "_subEth(uint256,address)", +"01a7a8c0": "batFundDeposit()", +"01a80669": "createInvestorWallet(uint256,address,uint256)", +"01a88f7d": "buySeeds()", +"01a8d07f": "addBidder(uint256,address,uint256,uint256)", +"01a93f1c": "giveAwayOwnership(address)", +"01a96b94": "set_stage_Discount(uint256)", +"01ab2a66": "getPlayer1()", +"01ab2f14": "Manus()", +"01ab9806": "BUY()", +"01ab9f19": "_safeCall(address,bytes)", +"01ad35e3": "mintTokensForCommand(address,uint256)", +"01ad3936": "assignedAmountToDevelopmentTeam()", +"01ad62a3": "getBackendWallet()", +"01ae19d6": "LogLOTTransfer(address,uint256,uint256,uint256,uint256)", +"01aef755": "setBestProbability(uint8)", +"01afd5f3": "allBalancesForManyAccounts(address[],address[])", +"01afebac": "ICOopen()", +"01b057b1": "isAdminSet()", +"01b07f75": "adjustValue()", +"01b0c649": "collect(address,address,uint256,uint256)", +"01b11792": "toggleLocked()", +"01b125e6": "resetTimer(string)", +"01b14149": "getFcontracts(address)", +"01b2320e": "getStartBlock(uint256)", +"01b2a413": "baseVerifierFee()", +"01b490ed": "CAIDToken()", +"01b54744": "setLLV_edit_24(string)", +"01b5990c": "getCreatedOn(address,uint256)", +"01b5ffcf": "addVesting(address,address,uint256,uint256,uint256,uint256,bool)", +"01b6b523": "viewMyContribution(bool)", +"01b74d73": "TEAM_SHARE_PERCENTAGE()", +"01b78b12": "BitcoinMoon()", +"01b852c9": "MetadollarCrw()", +"01b869f1": "release(uint32,uint32,uint32,bytes)", +"01b8a0b9": "createTestingEnvironment()", +"01b96aaf": "waveCap2()", +"01b98853": "assetFreeze()", +"01b9a397": "setDescriptor(address)", +"01b9fe59": "testMint(int256)", +"01ba2bd5": "Request_Airdrop()", +"01ba6805": "loseEth(address,uint256)", +"01baa2e7": "validateCap()", +"01bb4edf": "RAIOCO(uint256,string,string)", +"01bb67a8": "InvestCancelEvent(address,uint256)", +"01bb7e5a": "getLockerDetails(address,uint256)", +"01bb85a4": "__startBlock(string)", +"01bbb8fa": "verifyTimelock(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", +"01bbc3f5": "stopWhitelistReservetion()", +"01bc237d": "researchers(address)", +"01bc43a0": "sha(uint128,bytes32)", +"01bc45c9": "_admin()", +"01bc757a": "getstudentInfo(uint256)", +"01bc9533": "totalTokensGenerated()", +"01bd4051": "disown(string)", +"01bea2bd": "Mountain()", +"01beb7cf": "setBadgeLevel(bytes32,uint256,string,string,bytes)", +"01bebf36": "updateAirdropStageState(string,bool)", +"01bf6648": "removeFromWhiteList(address)", +"01c0c6bc": "_processRefund(bytes32)", +"01c11d96": "MAX_PRICE()", +"01c1c877": "setChampion(uint256)", +"01c1de96": "fechVoteInfoForVoterByStage(address,uint256)", +"01c24a90": "minimum_balance()", +"01c28786": "date_end()", +"01c2b6f5": "commitDeadline(bytes32)", +"01c355df": "appSelectors(bytes4)", +"01c432ce": "wrongClaimerOrUnsetInManager()", +"01c4a07e": "convertDeposit100to70(address)", +"01c516b1": "crowdsale_end()", +"01c543c2": "claimOreOnlyFromAssetId(uint256)", +"01c5b2f0": "compressBoard(uint256[81])", +"01c64ce8": "maxTxGas()", +"01c68b4e": "addSrNumberOfbook(uint256,uint256,uint256,uint256,uint256)", +"01c69452": "brandAccounts(uint256)", +"01c6adc3": "transferFrom(address,uint256)", +"01c6f167": "auctionsRunByUser(address,address)", +"01c7cb58": "migrateMileageLeader(uint8,address,uint256)", +"01c835e5": "returnRemainRewardToken()", +"01c8c9d4": "getCurrentBonus(bool)", +"01c96df6": "ZeusShieldCoin()", +"01ca1d72": "getTransformRate()", +"01cb0261": "getWeightedVote(bytes20,uint256)", +"01cb3b20": "checkGoalReached()", +"01cb63e8": "arrayIndexOutOfBoundsDynamic(uint256)", +"01cceb38": "setExpiry(uint256)", +"01cdc371": "getCBATransactionMessageLength(address)", +"01ce5e75": "fundsCombinedValue()", +"01ce616f": "setMaxweiAmount(uint256)", +"01cff174": "getNumberOfAvailableStartTickets()", +"01cffa17": "getTokenWithBonus(uint256)", +"01d09a3c": "setCallbackGas(uint256)", +"01d0ac0b": "requestAccess(address,address)", +"01d1c7fd": "BTCS_ETHER_CAP()", +"01d223c1": "set_modified_weth_address(address)", +"01d2db89": "isValidKyc(address)", +"01d37b0c": "changeHiddenValue(string)", +"01d4277c": "thisisalsofind(uint256)", +"01d42a9c": "closeChannel(address,uint256)", +"01d490fd": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256)", +"01d4fb7c": "fundsKeeper()", +"01d511f1": "request(string,string)", +"01d5c488": "gemCriticalRateConversion()", +"01d6e35b": "unfreezeTeamTokens(address)", +"01d78a8b": "alterTotalSupply(uint256)", +"01d81121": "allocateCreationInvestmentingToken(address[],uint256[])", +"01d81a50": "slice(bytes,uint8,uint8)", +"01d8715f": "replaceManager(address,address)", +"01d8ce92": "KpopArena()", +"01d90bbc": "getCurrentUserMaxPurchase()", +"01d92dc8": "unsoldAllocatonScheduled()", +"01d97f08": "setMapping(bytes32,bytes32)", +"01d98d44": "changesDenied()", +"01da31ad": "_setPermission(address,address,bytes4,address,bool)", +"01da73ff": "isValidChannel(bytes)", +"01da7b31": "getBankName(address)", +"01db61e0": "HARD_CAP_EUR()", +"01dbdf44": "priceAt(uint256,uint256)", +"01dd91c0": "force_received()", +"01dda205": "updateSoftCap(uint256)", +"01ddc95e": "getTargetBlockLength()", +"01ddfa9d": "referalFundBalance()", +"01de7a1c": "updateVendorName(uint256,string)", +"01dee025": "getTombDetail(uint256)", +"01df6885": "getTokenDetails(uint64)", +"01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", +"01e0ba3a": "bonusAccountIndex(uint256)", +"01e11c29": "SellToken()", +"01e1bcf7": "rateIcoPreICO()", +"01e1c861": "minWeiValue()", +"01e1d114": "totalAssets()", +"01e1ecb4": "releaseTokensAndEtherForEmergencyFund()", +"01e30a7f": "bigContributionBound()", +"01e33667": "withdrawToken(address,address,uint256)", +"01e343db": "setOffset(uint256)", +"01e3d346": "create(bytes1,bytes32,uint256)", +"01e3d718": "transto(address,uint256)", +"01e40f5b": "getFeeWindowBurnTargetValue()", +"01e4741c": "Ebets()", +"01e4abc1": "setWhiteList(address,address,uint32)", +"01e5691c": "createTransaction(uint256,address,uint256,uint256,address)", +"01e56c77": "stopPayouts()", +"01e57a37": "dth()", +"01e5aa3e": "getIssuerArray(bytes32)", +"01e68cbb": "timestamp_msg()", +"01e6a70e": "EthlanceInvoice(address)", +"01e73b73": "bulkVote(uint256[])", +"01e7fefe": "addParticipant(address,uint256)", +"01e88208": "permissions(address)", +"01e8b608": "TOKEN_SECOND_EXCHANGE_RATE()", +"01e91872": "DECToken(uint256,string,string)", +"01ea6270": "setTeamTokenAddress(address,address)", +"01eb6fdd": "max(uint32,uint32)", +"01ebc88e": "pingReading(uint256)", +"01ebccb9": "activeNameOf(address)", +"01ebd36b": "enable_sale()", +"01ebebf2": "myTulips()", +"01ec0793": "profitsOf(address)", +"01ec16ef": "RulesChangedEvent(uint256,uint256,uint256,uint256)", +"01eca37c": "medalDataContract()", +"01ecaca5": "changeOVCPerEther(uint256)", +"01ed7f8b": "distribute(address,address,address)", +"01edb1ea": "dayIdx()", +"01ef6cad": "addJobContractFeedback(uint256,string,uint8)", +"01ef74f1": "tokens_rewards_available()", +"01efb6c8": "getOrderInfo()", +"01f2a2c5": "buyForBtc(address,uint256,uint256,uint256,uint256)", +"01f40a85": "issuePurchase(address,uint256)", +"01f59d16": "maxFee()", +"01f5af30": "addJobSponsorship(uint256,string,string)", +"01f6dad0": "remaining_for_sale()", +"01f6e6d5": "asignarDni(uint256)", +"01f78f43": "getFreeCHICKEN()", +"01f7e49a": "removeFromPresaleWhitelist(address)", +"01f81649": "claimBrokerFee()", +"01f865c3": "setWinPercent(uint256)", +"01f89de0": "purchaseSharesOfArtwork(uint256)", +"01f99ad7": "left9(uint256)", +"01f9a0aa": "setOraclizeQueryMaxTime(uint256)", +"01fa3e53": "addSocial(address[],uint256[])", +"01fabd75": "addArbitrator(address)", +"01fae3b6": "setTokenState(uint8)", +"01fbaf99": "totalLareSold()", +"01fc59e1": "checkId(bytes32)", +"01fce27e": "getQueue()", +"01fd1b1d": "finalizationFailHook()", +"01fd89a4": "getFlags(bytes20)", +"01fe34e3": "EWCertificationCenter(string,string,string)", +"01feeef4": "getTitleDeeds(bytes32)", +"01ff62ab": "isConcerned(uint256,address)", +"01ff8961": "getPortfolio(uint256,address)", +"01ffc9a7": "supportsInterface(bytes4)", +"0200b10d": "collectedEthers()", +"0201b5d5": "transferOverBalanceFunds(address,address,uint256)", +"0201e253": "WhoHoldsPatentFor(bytes32)", +"0202f3ea": "allowTransfersTo(address)", +"020331dd": "getFact(bytes16)", +"0203596d": "purchaseKingdom(string,string,bool)", +"0204c163": "maxFadeoutPromille()", +"0204d0f8": "unlockOwnerDate()", +"02055186": "Alexa()", +"02063d93": "calcMaxDeposit()", +"0206432d": "FlexionCoin()", +"02064b42": "consul_price()", +"02065fb8": "isLoanFunded()", +"02067e6a": "add(uint8)", +"0206deb5": "unitsLimitForCurrentSaleStage()", +"0206e79d": "decodeParamId(uint256)", +"02072579": "controllerSet()", +"02078166": "unburnedTypeTokens()", +"0207eda6": "NOVA(uint256,string,uint8,string)", +"02083e27": "REET()", +"02093ee2": "finalize2()", +"02096a8e": "amountsByCurrency(uint256)", +"02099186": "totalRise()", +"0209f982": "reminder()", +"020a0ff5": "setClaimLimit(uint256)", +"020acb6a": "round1Bonus()", +"020bdf54": "getFreeStrippers()", +"020d308d": "removeDelegate(address,address)", +"020d4786": "OmmerToken()", +"020de876": "setTakerFeeRate(uint256)", +"020df04b": "createBarCode(bytes32)", +"020df957": "setAirdropReceiver(address)", +"020e2d48": "getArrayHashLibry(bytes32)", +"020eb6e1": "createWorkOrder(address,uint128)", +"020f899a": "hybridizationPrice(uint256)", +"0210d751": "getMyGames()", +"02114111": "allowTimelock()", +"0211c4bb": "MessageToken()", +"0212d0b9": "payByTokens(uint256)", +"0212fd1f": "InternationalRapidAsset()", +"0213443c": "changeZombieCreator(address)", +"02135534": "getNinja(uint256)", +"02138563": "buyOre()", +"02140adf": "CryptoHuntersToken()", +"0214e9cf": "preIcoFinishTimestamp()", +"0216f544": "transferExecutor(address)", +"02171e7c": "largeConstant()", +"02172276": "triggerEvent(string,string)", +"02175beb": "setOzr(address)", +"0218a1c3": "setString(bytes32,bytes32,string,bool)", +"02190a52": "allowRecurringBillingInternal(address,uint256,uint256,uint256,uint256)", +"021979c3": "wlcontract()", +"021991e7": "getBetsLocked()", +"021a11d0": "setContractICO(address,address)", +"021ba8f8": "CLAWBACK_PERIOD()", +"021bb947": "burnAfterIco()", +"021bc974": "checkPoolBalance()", +"021c309a": "solveBet(address,uint8,bool,uint8)", +"021c43b4": "NBY()", +"021c7bd7": "setInspectorId(address)", +"021da58e": "initCrowdsale(uint256,uint256,uint256,address,address)", +"021dc2fc": "tokenExchangeRateInWei()", +"021dd82c": "checkNotLocked(address,uint256)", +"021e7f85": "CONTRACT_ALLOWANCE()", +"021ea45e": "claimTilesForExistingUser(uint16[],uint256,bool)", +"021efe49": "getPawnOwner(uint256)", +"021f0376": "_addAssetTo(address,uint256)", +"021f36a4": "changeResource(bytes32)", +"021fe51f": "VUPRefundedForWei(address,uint256)", +"0220611a": "timeOfLastPublish()", +"022079d9": "ecmulVerify(uint256,uint256,uint256,uint256,uint256)", +"0220a5b4": "terminate(string)", +"0220f662": "addPolicyAttribute(uint8,uint256,uint8)", +"0221038a": "payOut(address,uint256)", +"02218ad6": "desBan(address)", +"0221f2fb": "Beneficial()", +"0222f96e": "Poppy()", +"02238cbd": "_activateDevice(bytes32)", +"02238e43": "launchnewround()", +"0224dc18": "TOKEN_SALE1_PRE()", +"0224e9a7": "devFees()", +"02258730": "nodeRegistration()", +"02259b07": "setPBTTForGas(uint256)", +"02262ced": "setBackendOperator(address)", +"0226401d": "ownerTestValue()", +"02264b63": "private_withdraw(uint256,address)", +"0226a5c9": "petOnLeaderboard(uint64)", +"0226ed48": "changeGlobalAdmin(address)", +"02285548": "FarmHopeProjectToken()", +"0228e05a": "walletFromData(bytes)", +"022914a7": "owners(address)", +"02299496": "updateICOStatus()", +"0229ae31": "CosmoCoin()", +"0229b23e": "pauseSALE()", +"0229c4eb": "TransferMinimumFeeProposalAdded(uint256,address,uint8)", +"0229e448": "founderMulSigAddress()", +"022b7433": "add(bytes32,uint8,uint8)", +"022b8a7f": "getIdProject()", +"022b9735": "GetMyBalance()", +"022bc71f": "getNextCallSibling(bytes32)", +"022bd24c": "hypes(uint256)", +"022c254a": "pendingChanges(address)", +"022cabac": "CoinViewToken()", +"022e1e59": "USBEEF()", +"022e9c95": "getinverstinterval()", +"022ec936": "updatePeriod(uint256,uint256)", +"022edd35": "getActiveContracts()", +"022fc88b": "approveToken(address,uint256)", +"02300cbb": "DepositReleased()", +"0230a07c": "releaseDeed(bytes32)", +"0230d870": "tierThreeRate()", +"02329a29": "pause(bool)", +"02337657": "documentIPFSHash()", +"0233d94d": "getEscrowsByTaker(address)", +"02340ad6": "deleteVisaOffering(uint256,uint256)", +"023569aa": "MoniCoin()", +"02356ec0": "returnCoupon(address,bytes32)", +"02358773": "XFL(uint256,string,string)", +"02359fdd": "OfferingCloses(uint256,uint256)", +"02361dbc": "totalAllStage()", +"0236bb5a": "isAdminAddress(address)", +"0237ef12": "contributionInWei()", +"0238777f": "preCrowdsaleContractAddress()", +"0238b5aa": "testToAddress()", +"0238b770": "endDateICO()", +"02394872": "getLastBlockHeight()", +"02395e9b": "lpc()", +"023a624a": "right11(uint256)", +"023b011e": "getRateEth()", +"023bb74d": "DATE_PRESALE_START()", +"023c19ce": "MyWishChain()", +"023c23db": "getSize(uint256)", +"023c6042": "tokencap()", +"023c61ca": "price_agent()", +"023c8be2": "setWithdrawalAddress(address,address)", +"023d44df": "RNBlock()", +"023d6c03": "REPO_APP_NAME()", +"023e1c34": "communityContributionPercentage()", +"023e36d8": "nVotesCast()", +"023eff9f": "airdrop(uint8,bytes32,bytes32)", +"023f4147": "totalContributed()", +"023f4a66": "issueToReserve(uint256)", +"023fadda": "getRedeemedList()", +"02400845": "publish(bytes12)", +"02404bee": "crowdsaleCount()", +"02404fcb": "buyBanana()", +"0240ab3f": "finishRetrieving()", +"0240db33": "summFounders4()", +"02410cf6": "isFundReleased()", +"0241747f": "ReceivedBTC(address,uint256)", +"024187a5": "window0TotalSupply()", +"0241fb82": "returnChildForParentNew(address)", +"02421ca7": "SaddleFS(uint256)", +"0242622b": "changeMultisigAddress(address)", +"0242a5fc": "testRecovery(bytes32,uint8,bytes32,bytes32)", +"0242ba2a": "FOToken()", +"0242c430": "CreateTokenToTeam(address,uint256)", +"0242deb8": "registerIntermediary(address)", +"0242f1ef": "TonCoin()", +"0242f351": "getVote()", +"0242fc62": "voteNo(string)", +"02431422": "addSuperPlayer(address,bytes32)", +"02433d0f": "num_holders()", +"02437982": "adjustRate(uint256,uint256,uint256)", +"0243aa1b": "getCurrentNbVote()", +"02443111": "oneTrancheAmount()", +"0244ba4a": "Hubble()", +"0244eb3f": "testFundsAreLockedDuringSale()", +"0245c5c8": "importSequence()", +"02460d1e": "_emitHolderRegistered(bytes32,uint256,uint256)", +"02474718": "paydayFrequencyInDays()", +"02474c59": "myPledgeTo(address)", +"0247e02a": "subFromAddressBalancesInfo(address,uint256)", +"024800ff": "presaleWeiSold()", +"024858b1": "createTrade(bytes32,uint256,uint256,address,address)", +"02491bd5": "CryptoLottoCoin()", +"0249e64a": "CodeMailStamp()", +"024a56a4": "testIsData(bytes)", +"024adb25": "LogStateSwitch(uint8)", +"024bb1fd": "changeName(uint256)", +"024c4199": "addListener(address,address)", +"024c6def": "BONUS_ICO_WEEK_TWO()", +"024c764f": "setChallengeCooldownTime(uint256)", +"024cc06d": "updateRecipientInfo(bytes32,string,string,address)", +"024ddebe": "Error(bool)", +"024edd75": "buyHero(uint256)", +"024fcc6c": "enableService()", +"024fd650": "tokenData()", +"024fd912": "GoToken()", +"02500824": "buyDentacoinsAgainstEther()", +"025026d5": "updateEmployee(uint256,uint256)", +"02502787": "FDT(uint256,string,uint8,string)", +"0250bd2d": "unregisterName(string)", +"02521b16": "saveTxt(string)", +"0252607e": "bitcoinPublicKey(uint256)", +"0252b995": "gameStartTime()", +"025313a2": "proxyOwner()", +"0253a95a": "getMaxMerge()", +"0253e935": "setOrderListLengthFactor(uint256)", +"0253fbd1": "momFab()", +"025404d4": "amountRaisedUSD()", +"02543238": "setDiscountValueOff()", +"02548866": "TOTAL_CAP()", +"0254aa41": "CommonEth()", +"0254e687": "GodlyCoin()", +"0254ef0f": "enterMedium()", +"02550e4d": "profit(address)", +"02556de3": "updateMajorTree(bytes32)", +"02565633": "buriedSupply()", +"0256c7f5": "Afin()", +"0256e827": "enablePurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"02571be3": "owner(bytes32)", +"0257210f": "ForgeCDN()", +"02573fc2": "resetStellarInvestor()", +"0257a0c0": "onLotteryCompleted(uint32)", +"0257c48c": "meta(bytes32,bytes32)", +"02581ab3": "offerIndexedPieceForSaleByAddress(address,uint256,uint256)", +"02581cde": "refundExpiredBet(bytes32)", +"025830ac": "changedBrokerDealer(uint256,address)", +"025845ae": "thinkTankFundAddress()", +"02587586": "companyAddr()", +"025932fd": "bitikzikToken()", +"0259371c": "TTTTokenSell()", +"02593c2b": "_Split()", +"025a6f02": "OsmiumCrowdsale()", +"025abd58": "getTokenBalance(string)", +"025b22bc": "updateImplementation(address)", +"025b97bd": "getProviderAdmin(uint256)", +"025bbbe5": "newSale(bytes16,uint256,uint256)", +"025cce45": "AMULETS()", +"025cf89f": "setMigrationManager(address)", +"025dd017": "OnReceive(uint64)", +"025e029b": "buyStar(uint256,uint8,uint256)", +"025e56d3": "NeuroDAO()", +"025e7c27": "owners(uint256)", +"025e8095": "transferCell(address,uint256)", +"025ec81a": "getBytes32Value(bytes32)", +"025f9bc1": "updateTokenInformation(string,string)", +"025ff12f": "airdrop(address,address[],uint256[])", +"026164ad": "sunset()", +"026189ec": "BitRecord()", +"02618eb2": "AltCurrency(uint256,string,string)", +"0261a403": "issueDID(address,uint256)", +"0261edec": "getContractByID(string)", +"0262dc13": "claimOne(address)", +"0263379b": "bringBackTokens()", +"026345b6": "ledgerContract()", +"0264ba24": "sendValueToJackpot()", +"0265190c": "b66ReserveTokens()", +"026654bf": "PoolManager(address)", +"02667e9b": "killPay()", +"0266ba02": "list(address[])", +"0266f044": "reservePool()", +"02682ab3": "setNewWallets(address,address,address)", +"026858ea": "getRateModifierInPermilles()", +"0268ec43": "MyEtherTeller()", +"02690ef0": "setICOElePrice(uint256)", +"026993e0": "Midas(address,address)", +"026a308a": "_checkWhitelistContract(address)", +"026a9cdd": "getPotato(uint256)", +"026b1d5f": "getPool()", +"026bb254": "upVoteHouse(address)", +"026c0d8f": "RHP()", +"026d0e1c": "grantUserLicense(address,string)", +"026d19d5": "WeTestToken(address,string,string,uint256,uint256)", +"026d6a67": "setStartStopBlocks(uint256,uint256)", +"026e402b": "delegate(address,uint256)", +"026eca12": "createTapPoll(uint8)", +"026f9d56": "SOT()", +"026fcf83": "setSaleFinish()", +"026ff05e": "deleteUser()", +"02704a4d": "COIN_SUPPLY_ICO_PHASE_3()", +"027116f7": "approveNewOwnersCount()", +"027391bf": "sendMoneyBeforeEnd(uint256)", +"02742425": "preFundingtokens()", +"027471b0": "roundActive()", +"0274d5ff": "soulIsOwnedBy(address)", +"0274ea81": "jadd(uint256,uint256,uint256,uint256,uint256,uint256)", +"0276650b": "individualCap()", +"027681ab": "setJackPotInfo(uint256,uint256)", +"02780677": "LN2()", +"0278199e": "StandardToken(uint256)", +"0278bde1": "ask(address,uint256,uint256,uint256)", +"0278fa20": "TeambrellaWallet()", +"027903ef": "setReservedTokens(uint256)", +"02795b3a": "tokenMarket(address)", +"027a4425": "EthereumDiamond()", +"027a5e3f": "getLastVersion(bytes)", +"027a7ccc": "calculateFirstCut(uint256)", +"027aa9f5": "getUnits()", +"027b1fb3": "SimpleStorage()", +"027bb838": "FLTToken()", +"027bd9a8": "changeColorGreen()", +"027bfab4": "discountedIcoTokensSold()", +"027c3e08": "ControllerChanged(address)", +"027cb7c6": "clearing()", +"027e7a0f": "getTotalGamePot()", +"027ec848": "setDurationOfLock(uint256)", +"027efe2b": "makeOperation(uint32,string)", +"0280052d": "setKing()", +"028118a1": "PREBUY_PORTION_MAX()", +"02814b86": "maxETH()", +"0281b752": "admin_set_ExchangeRateInWei(uint256)", +"02825adc": "gvOptionToken30()", +"02836f24": "upgrading()", +"0283f4b4": "addPropertyForUser(bytes32,address)", +"02846858": "removeBurner(address)", +"0285d554": "transferWithEvent(address,address,uint256)", +"028780e4": "ownerWithdrawZth(address)", +"02879f9c": "addProduct(string,uint256,string,string,string)", +"02884909": "authorizedLogicContractAddress()", +"02889f26": "getCustodianChangeReq(bytes32)", +"0288a39c": "withdrawDelay()", +"0288ab5d": "TCC()", +"0288c0a0": "TransferDomain(string,address)", +"0289e966": "newVersionReleased()", +"028a582e": "findEndpointByAddress(address)", +"028a95a0": "lockRemainingTokens()", +"028ab3b1": "__get(address,uint256)", +"028ae3b7": "setAffiliateList(address)", +"028af743": "getServerCurrentMatch(uint256)", +"028b7854": "throwsSaleWalletIncorrectBlock()", +"028e10ac": "BidaCoin(uint256)", +"028e3731": "getUsersByDocHash(bytes)", +"028e6c67": "intOrRevert(uint256,uint256)", +"028ebc44": "setRegistryContract(address)", +"028fb6b8": "deleteRef(bytes32)", +"029043a4": "removeBlacklistSpender(address)", +"02911cfe": "distribute(address,uint256,uint8,uint256)", +"02917f4a": "issuePatrons(address,uint256)", +"0291b9b1": "judgeIsReachDailyLimit(uint256,int256,uint256)", +"02927d20": "setupEventsHistory(address)", +"0292f88a": "setBaseDenominationAddress(address)", +"02931e59": "getUserPower(address)", +"02932f56": "totalCampaigns()", +"0293a772": "get_sale_owner(address,address)", +"0293fafc": "ADBToken()", +"02940dbb": "Decenturuon()", +"02942724": "preservedTokens()", +"02949bff": "CampaignToken()", +"0295d71b": "currentDepositLimit()", +"02965297": "update_height(uint256)", +"0296b3a8": "STARLIGHT()", +"02978be8": "gameHostAddress()", +"0297abe5": "getLimitMaxGame()", +"02981cfe": "transferedToPool()", +"02987db8": "priceInWeiPerSatoshi()", +"02989d9f": "SellOrder(uint256,uint256,address)", +"0298d557": "isValidSignatureAndData(address,address,bytes)", +"029a258a": "claimDonations(address[2],uint256[8],uint8,bytes32[2])", +"029a8bf7": "multiAsset()", +"029ad03e": "get_nb(address)", +"029bca78": "isPremium(uint256)", +"029c19aa": "getCreditBondAddress()", +"029d1ecd": "ownerApprove(address,uint256)", +"029d4b2d": "isTimestampInsideRange(uint256,uint256,uint256)", +"029da1c4": "walletFounder2()", +"029dc6d2": "piggyToWallet()", +"029deeb0": "updateUportInfoFromOracle(string,address,address)", +"029eabcb": "contributions()", +"029f1d0e": "userName(uint256)", +"02a10d87": "getPreSaleEndDate()", +"02a182d1": "setInvestmentCapIcoPhaseTwoPounds(uint32)", +"02a1a7a8": "isReachCapped()", +"02a251a3": "votingPeriod()", +"02a2680c": "getUserWalletByID(uint256)", +"02a2c88f": "kycLevelOf(address)", +"02a2cf02": "NOK_Omnidollar()", +"02a2e105": "RYANTOKEN()", +"02a2f06e": "GetMyBet()", +"02a3036d": "init1_block_height()", +"02a4e488": "decreaseAllowanceProxy(address,address,uint256)", +"02a4e849": "getMiniPoolEdit_9()", +"02a566bd": "Woyager()", +"02a59ea3": "isEntitledForCluster(address)", +"02a5c0be": "CryptoSagaArenaRecord(address,address,uint8,uint8)", +"02a63c28": "consumeMarketOrderAsk(uint256,address,address)", +"02a6f266": "Presale(address,address,address,address)", +"02a72a4c": "tokenGrantsCount(address)", +"02a86781": "authorAddress()", +"02a8a406": "setBurnPolicy(bool,bool)", +"02aa26f6": "buySeatForEvent(uint256)", +"02aa274b": "setForward(bytes4,address)", +"02aa6318": "getDistributions()", +"02aa9be2": "unvote(address,uint256)", +"02ab4781": "reservedCoins(address)", +"02abb4c5": "Miner()", +"02ac8168": "Launch()", +"02acbaa3": "CrowdsaleMinter()", +"02acc6b6": "GNTTokenERC20(uint256,string,string)", +"02acdb44": "setAnyoneCanCall(address,bytes4,bool)", +"02ae832f": "trashTokens(address,uint256)", +"02ae8cdc": "tokenProduct(uint256)", +"02aec20d": "PrintableToken(string,uint256,string,uint256,int256)", +"02af2095": "massTransfer(address[],uint256[])", +"02b04384": "AIRDROP_ADDRESS()", +"02b09ac5": "charityVault()", +"02b32af5": "greenToken()", +"02b33929": "SMTToken(uint256,uint256)", +"02b3b3da": "Divium()", +"02b40d11": "tokenSetMarketMaker(address,address,address,address)", +"02b4b52c": "isLogoInitied()", +"02b518fd": "callback(address,address,uint256,uint256,uint256)", +"02b5ecc8": "rateAngelsDayEnd()", +"02b68bbf": "getPlayersItemTickets(address)", +"02b6ef74": "CRofMakerByIndex(address,uint256)", +"02b6f286": "TokenContract(address,string,string,uint8)", +"02b70b41": "addConfirmation(bytes32,address)", +"02b7144f": "updateCheckpoint(address,address)", +"02b74a7e": "setupStates(uint256,uint256,uint256[])", +"02b857f3": "unlockMintDate1()", +"02b985d3": "arr(uint256,uint256,uint256,uint256)", +"02ba302b": "nextPrice1Of(uint256)", +"02ba6f8d": "getHistoryEntry(uint256,uint256)", +"02ba742b": "extendMembership(address,uint256)", +"02ba8742": "sendCoins(address,uint256)", +"02baaf40": "lastInitTimestamp()", +"02bb2929": "etherToDustPrice()", +"02bb5d6e": "setEOMarketToken(address)", +"02bb8465": "setContent(uint8,string,string)", +"02bc54bf": "companySite()", +"02be8e4e": "changeOwnerShip(address)", +"02beee07": "_getElement(uint8[],uint8)", +"02bf3165": "auctionUnpause()", +"02bf7fe7": "JumpCoin()", +"02bf9e7f": "verifySignature(address,bytes32,uint8,bytes32,bytes32)", +"02bfeeb8": "totalPicoUSD()", +"02c06bcd": "prevTokenAddress()", +"02c1d7cf": "iSportNews()", +"02c1ecbf": "returnStateChange()", +"02c28410": "getPublicAllocation()", +"02c29349": "fixWithdrawalAddress(address)", +"02c2a74d": "episodeManager()", +"02c3d7f6": "end_ICO()", +"02c4897b": "getAutorPicture(bytes32)", +"02c4960e": "InsufficientFee(address,uint256)", +"02c4980c": "BOC()", +"02c63852": "TokenVesting(address,address,uint256,uint256,uint256)", +"02c6d827": "getgamecardpos2(address,address)", +"02c6f427": "PRESALE_LEVEL_4()", +"02c71d92": "newClonedRepo()", +"02c76d45": "mintCoolDown()", +"02c7e7af": "sold()", +"02c85991": "distributeMinting(address[],uint256[])", +"02c90584": "userAddressExists(address)", +"02c95d2d": "setHaltIco(bool)", +"02c9972c": "TICK_TIME()", +"02c9e537": "cresusAddress()", +"02ca5994": "registerToken(address,uint256)", +"02ccee02": "getNoteLine(uint256)", +"02cd0f96": "Deadline(uint256)", +"02cdc1ee": "setSendGodz(uint256)", +"02ce5813": "whitelistActive()", +"02ce5fc4": "generateMintEvents(address,uint256)", +"02ce728f": "updateExchangeRate()", +"02ce8ac9": "withdrawSale(uint256)", +"02d0181c": "HamidToken()", +"02d05531": "getUriCount()", +"02d05d3f": "creator()", +"02d06d05": "bytesToUint(bytes)", +"02d19fe5": "testApproveWillNotModifyAllowance()", +"02d1c1e6": "sendOwnerBalance(address,address,uint256)", +"02d1d5fe": "getDesign()", +"02d23cef": "sendWithFreeze(address,uint256,uint256)", +"02d2f349": "lastPeriodChange()", +"02d3b339": "drawColors(uint256[],uint256[],address)", +"02d3bd16": "circulatingSupply_()", +"02d3fdc9": "burnMin()", +"02d44e57": "_getBetTimestamp(bytes32)", +"02d49d0b": "_createHiveInternal(address)", +"02d52fa4": "createProposal(uint256,string)", +"02d596d8": "getUserFromAddr(address)", +"02d66fc2": "hasSchema(bytes32)", +"02d6e7f4": "tokenXchangeRate()", +"02d6f730": "getFreezing(address,uint256)", +"02d77954": "getVoteOf(uint256)", +"02d7ccef": "UP_winRate()", +"02d800ec": "deactivateKey(string)", +"02d8146e": "tokensWallet()", +"02d947ef": "vote(uint256,address)", +"02d99637": "BlockClaimedEvent(address,address,uint256,uint256)", +"02da667b": "createProject(uint256,uint256)", +"02da6d06": "lastDao()", +"02dadf8e": "registerCitizen(bytes32,address)", +"02db2d8a": "myRefund(address)", +"02dbf3c8": "CGE()", +"02dc2e1d": "queuePayment(bytes)", +"02dcfc8e": "setAssetFees(address,uint256,uint256)", +"02dd6731": "disableApiAccess(bool)", +"02dd92c4": "crowdsaleOn()", +"02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", +"02df0b61": "deprecateById(bytes32)", +"02df45a8": "closeActive(uint256)", +"02e0a2ff": "getAvailableBlance()", +"02e0b293": "LogVote(address,uint256,uint256,uint256,uint256)", +"02e0c14a": "get(bytes12)", +"02e0d5a5": "AquaToken()", +"02e1033a": "monsterFleeTime()", +"02e132f6": "recalcInvestorsFee(address,uint256)", +"02e26c38": "richest()", +"02e2c3b7": "setRefererPercent(uint256)", +"02e2f0b6": "Erc20TokenMarket()", +"02e32144": "precentDecimal()", +"02e33d25": "HydroToken()", +"02e4879d": "setProposalDuration(uint64)", +"02e49bd9": "publicityAddress()", +"02e4af01": "generateRandom()", +"02e4ef66": "transferWhiteList(address)", +"02e4f63b": "doExchange(address,address,address,uint256)", +"02e635e6": "AID()", +"02e650b6": "DigitalMoney(uint256,string,string)", +"02e6a5dc": "LIC(uint256,string,string,uint8)", +"02e6a951": "PayableContract()", +"02e7491e": "ERC165ID()", +"02e8243e": "WeiCoin(address,uint256,uint256,uint256)", +"02e8d8c0": "scheduleTransaction(address,uint256,uint256)", +"02e97770": "InfinitiEstate()", +"02e98e0d": "diffMinutes(uint256,uint256)", +"02e99e16": "SplitAmount(address,address,uint256)", +"02e9ad65": "dispatchTo(address,uint256)", +"02e9d5e4": "acceptBid(uint256,uint256)", +"02eb4759": "RightAndRoles(address[])", +"02eba8a7": "auditContract(bytes32,bool)", +"02ec77d2": "joinPot(string)", +"02ed26d1": "startTokensSale(uint256,uint256,uint256)", +"02ed292b": "receiverSpend(bytes32,uint256,bytes32,address,address)", +"02ed4d2d": "Purox(uint256,string,uint8,string)", +"02edcbfb": "proposeAmendment(uint256[],uint256[],bytes32)", +"02ee3275": "setSatoShi()", +"02ee3a52": "getAllProducts()", +"02ee50e0": "EliteToken()", +"02ee6a6b": "RegisterEvent(address,address)", +"02eef456": "UK()", +"02eef7c3": "MassivelyMultiplayerOnlineGame()", +"02ef3844": "getBountiesByCreator(address)", +"02ef43c3": "recordPurchase(address,uint256,uint256,string,uint256)", +"02ef521e": "registerEtherToken(address,bool)", +"02ef6c86": "calculateWithdraw(address)", +"02efbde5": "batchApproveWhitelist(address[])", +"02f050e4": "getWinningDetails(uint256)", +"02f08568": "lockController()", +"02f0c937": "buyItem(uint256,address,string,string)", +"02f1bfad": "setupTimeWindow(uint256)", +"02f1ed99": "putOnInitialSale(uint256)", +"02f2008d": "hintURL(bytes32,string)", +"02f20b9c": "getReport(string,uint256)", +"02f41314": "continueDistribution(uint256)", +"02f48c8b": "transferAvailableBalances(address,address,uint256)", +"02f58015": "claim_bounty()", +"02f65096": "executeBid(uint256,uint256,uint256)", +"02f652a3": "setTransferAgent(address,bool)", +"02f83a56": "withdrawBonusToken()", +"02f9fd84": "HHGTTG()", +"02faabb3": "fetchOrderByIdWithMerchant(string,address)", +"02fac967": "ownerHasCard(address,address)", +"02faf1e2": "revokeAccessFromAddress(address,address)", +"02fb0c5e": "active()", +"02fb4d85": "slash(address,uint256)", +"02fbe0d5": "getKittyGetOrNot(address)", +"02fc1f85": "ownedNumbers(address)", +"02fc28c4": "TAP_POLL_DURATION()", +"02fc2a8a": "_buy(address,uint256)", +"02fc3127": "tokenSaleBalanceOf(address)", +"02fd9dd8": "market_DeclareForSaleToAddress(uint256,uint256,address)", +"02ff1fac": "changeDevevoperAccont(address)", +"02ffc0b0": "getApprovedAddressesOfList(address[])", +"03015ea3": "registerArbiter(uint256,uint256)", +"03021c87": "setMaxInterval(uint256)", +"0302263a": "getPendingManager()", +"0302c688": "prod()", +"03031960": "VestingVault(address,address,uint256)", +"030326ad": "pushAddr(address)", +"0303f694": "_getBonusPercent()", +"0304363a": "fetchAllVoteResult()", +"030481d5": "changePreseller(address)", +"03048590": "ratePresale()", +"03048a42": "createRequest(address,uint256,string,bytes,bytes)", +"0304de3b": "setFeeRecieverValue(uint256,address)", +"03058aad": "getLatestManifest(address)", +"0305bdfe": "Trongold()", +"03060b68": "getCoreSupply()", +"03062183": "getVisaLeft(address,uint256,uint256)", +"03068d57": "setMinimumTextDonation(uint256)", +"0307024f": "getCreatedStatus(uint256)", +"03070ae7": "MANHATTANPROXYRIVDR()", +"03071302": "getCCH_edit_23()", +"030745ec": "_calculatePaymentToOwner(uint256,bool)", +"03075018": "getCosts()", +"03075ded": "emitIssuanceRatioUpdated(uint256)", +"03078416": "requestOfAmount(address,uint256)", +"0307acae": "copy(uint256[],uint256)", +"0307f82a": "SoldToken(address,uint256,string)", +"03083883": "compose(uint256[],uint256)", +"03090958": "_transferAct(address,address,uint256)", +"03096e92": "proposedMilestones()", +"0309922f": "icoMaxAmount()", +"0309c7f8": "payLastSixteenWinner(uint256)", +"030a78aa": "MAX_SITE_TOKEN_ID()", +"030b1776": "ROPE()", +"030ba25d": "withdraw(uint256,bytes)", +"030bccb0": "QLANCE2()", +"030c3631": "dungeonPlayerCount(uint256)", +"030cc118": "depositSuccessful_()", +"030cecc7": "decode(string,bytes32)", +"030d406b": "entryPayout(uint256)", +"030d945c": "PMHToken(uint256,string,uint8,string)", +"030e30df": "super_transferFrom(address,address,uint256)", +"030e6b98": "testFinalizingBeforeCapChangesHardCap()", +"030e9080": "returnAllCoke()", +"030eafa0": "endThisContact()", +"030f5702": "returnAmount(uint256)", +"03101f46": "setDistributionMinimum(address,uint256)", +"03110f23": "returnKitty(uint256)", +"031122ef": "exhaustChibis(uint256,uint256)", +"031126e1": "_approx(uint256)", +"0311904c": "investAmount()", +"0311a8f0": "getUploadNames(uint256)", +"03122043": "setCompte_40(string)", +"031324fa": "_transferDivis(address,uint256)", +"03137d43": "test_insert_findWithHintPrevRemovedUpdateHead(int256)", +"03138b31": "phase_5_remaining_tokens()", +"0313953d": "indexBalance()", +"03141fcd": "listPairForReserve(address,address,address,bool)", +"03145ac2": "WildFurToken()", +"03149252": "everyoneDisabled()", +"0314bcfb": "FUND_SUPPLY()", +"03152429": "newAccount(address)", +"031578af": "bytes32Storage(bytes32)", +"0315a513": "getDigitalAsset()", +"0316bdb0": "CofounditToken(address)", +"03178d05": "getB3()", +"0317c06e": "isAllowedBalance(address,uint256)", +"0317fb71": "asmApprove(address,address,uint256)", +"031a36f1": "EBBToken(address,uint256)", +"031a8161": "convertDecimalBack(uint256)", +"031adff0": "whitelistingAddress()", +"031b3677": "funders(address)", +"031bd4c4": "TOKEN_LIMIT()", +"031d5d01": "readMessage()", +"031d7421": "createRegistry(address,address)", +"031d973e": "closeMarket(bytes32)", +"031e1b65": "sendFounderAndTeamToken(address,uint256)", +"031ee1c8": "contribute(address,bytes32,bytes32,uint8,bytes32,bytes32)", +"031f22e7": "PRICE_STAGE_TWO()", +"031f273c": "getMixerCountByType(bytes32)", +"031f3b1a": "remainderAmount()", +"031f74d4": "bugDiscovered()", +"031f9d7b": "buyCore(address,uint256,uint256)", +"031fce17": "listBackers(uint256)", +"0320fead": "getUsedBySoftware(uint256)", +"03216695": "monthlyWithdrawLimitInWei()", +"0321f836": "namiMultiSigWallet()", +"03228d0f": "changeSendingBanPeriod(uint256)", +"0323aa55": "isValidDeletion(uint8,bytes32,bytes32,string,address,address)", +"0323cc33": "getKnowledgeSinceLastUse(address)", +"0323e576": "INITIAL_CARD_PRICE()", +"0323f64a": "removeSubDivision(uint256)", +"03240775": "getActiveEntryById(bytes32)", +"0324149a": "marketGolds()", +"0324d0d9": "calculatVotePrice()", +"03251a08": "setMin(uint256,uint256)", +"0325be06": "biathlon_transfer(address,address,uint256)", +"03261030": "Time_call()", +"03267c60": "CITY_START_PRICE()", +"0326be45": "Permission()", +"0326c06b": "utfStringLength(string)", +"0327194a": "startPublicsale(uint256,uint256,uint256)", +"03282473": "AcceptedApplication(address,uint256,string)", +"03291893": "issueAndActivateTokenBounty(address,uint256,string,uint256,address,bool,address,uint256,address)", +"03294614": "buyPickaxes(address)", +"032a0af7": "adIds()", +"032a8838": "withdrawOnBehalfOf(address)", +"032aabf0": "has_presale_time_ended()", +"032b0824": "updateLatestRevision(bytes32,bytes32)", +"032b13da": "fourthChainETC()", +"032b3400": "end_Time()", +"032b642d": "changeStartAndEndDate(uint256,uint256)", +"032bc66b": "Locked(uint256)", +"032be08b": "ticketCountMax()", +"032c05aa": "maximalParticipationAmount()", +"032cbc5f": "chainStartBlock()", +"032ccf33": "dayPot()", +"032cfa5c": "comelBabyCoin()", +"032dbae5": "setTiers(uint256,uint256)", +"032e0868": "getAllStaff()", +"032eb997": "CCXTokenERC20(uint256,string,string)", +"032fa796": "SVCoin()", +"032fc13b": "whatRound()", +"03314efa": "shares()", +"0332c6d4": "advertisementPayment()", +"03335d04": "ethGoal()", +"03339af5": "getRobotCountForUser(address)", +"0333d499": "getOwnedPoints(address)", +"0333d4a2": "ZilleriumPresaleToken()", +"03347d75": "findOrderIndexForAddress(uint256,address)", +"0334e725": "FALCON(uint256,uint256)", +"0335d533": "USER_GET_CROWDSALE_TOKEN()", +"0335e18f": "timeComplete()", +"03379e7f": "Initialize(string,string,uint256,uint256)", +"0337aa74": "systemAuctionDuration()", +"0337e379": "releaseTokenOwnership()", +"0338e3a5": "getArrIntField2()", +"03395ba5": "AUCTION_TOKENS()", +"033988a1": "Pollen()", +"0339f300": "revise(uint256,bytes32)", +"033a010b": "adminClaimAirdropMultiple2(address[],uint256)", +"033a38b0": "vehreqexist(uint256,address)", +"033a6cab": "admin_redeem(address)", +"033b8675": "ICOCREED()", +"033ba5d1": "getWillData()", +"033c44c3": "m_totalInvested()", +"033c6ee6": "countHolders()", +"033c8477": "mined()", +"033d62ee": "is2D(bool)", +"033da70b": "setLogicContractAddress(address)", +"033df9cb": "stepOneStartTime()", +"033e7ef4": "registerVoteToken(bytes32,bytes32)", +"033e86d4": "PurchaseLocked()", +"033f7bc9": "testEmergencyStop()", +"0340249e": "HotelloadTokenERC20(uint256,string,string)", +"03402a9a": "ClubTransferContract()", +"03406e76": "getOptionSellOrders(uint256,uint256)", +"034187fd": "setEthToCents(uint256)", +"03427656": "getDefaultSoftResolutionBlocks()", +"03432744": "disputesWithoutJurors()", +"0343d550": "getApprovalCount()", +"0343dfa0": "checkInvariants()", +"03440022": "setAsSeller(address,bool)", +"0344a36f": "draw(address,bytes32,uint256)", +"03460f6c": "airdropAllowed()", +"0346a4ad": "MAXIMAL_PARTICIPATION()", +"034741a8": "patformWithdraw(uint256)", +"03487513": "SIGToken(uint256)", +"034889ff": "unFollow(address)", +"0348946d": "mintedTokensCap()", +"034a7bce": "saosao4()", +"034ac7a3": "ROLE_GRADE_PROVIDER()", +"034cb28e": "addressOf(address,bytes)", +"034cd0b0": "buyTokensGrowthLife()", +"034cf8bc": "transferClub(address,uint256)", +"034d0834": "NoBsCrypto()", +"034d3b0d": "withdrawTipForDeveloper()", +"034de540": "_getEthAmount(uint256)", +"034f55d2": "calculateSum(uint256[])", +"034f9774": "setWhitelistWallet(address)", +"034fcf55": "updCouponConsumed(string,bool)", +"0350bcd9": "toSendLeft()", +"0350d085": "Sign(string,string)", +"035186d6": "increasePrizePool(bytes4)", +"0351947f": "claimFine()", +"0352017b": "getInvestmentRecord(uint256)", +"03520535": "getPI_edit_10()", +"03526ff0": "LFDNetwork()", +"035340f1": "Bitether()", +"03547e53": "ownedBalance(address)", +"0354d6c5": "accountslength()", +"035502f2": "addCategory(string,uint256)", +"03553835": "calculateTokenAmount(uint256,uint256)", +"0355b70a": "getSpaceshipTotalSold()", +"03562dbb": "changeEmissionContractAddress(address)", +"0356948e": "previousstagedata()", +"0356fe3a": "genesisBlockNumber()", +"0357088b": "trancheByIndex(address,uint256)", +"0357371d": "release(address,uint256)", +"03580712": "executeDueToInactivity(bool)", +"03582fc5": "setReferralBonusPercent(uint256)", +"0358395d": "DominionCoin()", +"0358c295": "testInitialBalanceWithNewRGXBonus()", +"0358d965": "addPayout(uint256)", +"035ac814": "lastTimeUpdate()", +"035cf142": "getMinimumDeposit()", +"035d0880": "_requireQuePayment(uint256)", +"035d37a8": "setMinContribAmount(uint256)", +"035e898a": "getStellarInvestor()", +"035e902d": "Set_EmergencyCode(uint256,uint256)", +"035f057d": "multiIncreaseApproval(address[],uint256[])", +"03602e9e": "getPrivAddress()", +"03606b30": "setStopFunding(bool)", +"03611ec7": "Finside()", +"03612cb5": "settle(bytes32[],uint256[],uint256[])", +"03627e70": "countStudent()", +"0362d1f6": "getGamblerBet(address,uint256)", +"03635100": "bizcoin()", +"0363b1e1": "trade(address,uint256,address,address,bool)", +"036478c1": "GlobalAmountCapSoft()", +"0364a254": "getStringValue(bytes3)", +"03652c4e": "ICOStartTime()", +"03656d07": "exchangeMethodIsAllowed(address,bytes4)", +"036648b7": "TokenRateUpdated(uint256)", +"036723a2": "Payout_intern(uint256)", +"0367f96d": "setHardCapValue(uint256)", +"036896ab": "getERC20TokenBalance(address,address)", +"036a131d": "setPI_edit_28(string)", +"036a66eb": "GetProductionPerSecond(address)", +"036ae645": "deleteMessage(uint16)", +"036b3a81": "partnerSupply()", +"036bd387": "totalEthInWeiForFirstIco()", +"036c36eb": "relaySellerRequestCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"036dd086": "createGame(string,string,uint256,uint256,string,string,string,string,bool)", +"036e05b0": "CreatePHX(address,uint256)", +"036e4220": "changeMinAcceptQuorumPct(uint256)", +"036ecf84": "dDownInsSplit()", +"036ee850": "votingDeadline()", +"036f60ec": "setSupplyAdjuster(address)", +"037051eb": "startRound(address)", +"0370c0d9": "_repayLoan(uint256,uint256)", +"0370ca41": "contractStage()", +"0370e65c": "preSaleEndedAt()", +"037101c4": "remainingPresaleCap()", +"03710668": "callContract(address,bytes)", +"0371193b": "getEmployeeAllInformation(uint256)", +"03714af7": "burnApproveReset(address,address)", +"0373e649": "Withdrawal(address,address,uint256,uint256,uint256)", +"03741040": "get_presale_arbits_total()", +"0374fc6f": "getBestOffer(address,address)", +"03750d94": "serverSeed(address,bytes32)", +"03771327": "HardcapGoalReached(uint256,uint256,uint256,uint256)", +"03771f2f": "numOfInflatableTokens()", +"0377ebe8": "itemKindCount()", +"0378f83f": "destroyFashion(uint256,uint16)", +"03792d52": "lastSubTokenBuyerOf(uint256)", +"037933dd": "calcSTQAmount(uint256,uint256)", +"0379565f": "EIP165Implementer()", +"037a417c": "testFunc()", +"037a9d30": "isDataSource()", +"037ae882": "reLoadKey(uint256,uint256)", +"037b5fdc": "burn_balance(address)", +"037c68b2": "disagreeCount()", +"037c983a": "resumeCrowdSale()", +"037c99b0": "setBonus(uint256,uint256)", +"037ca5fc": "HubCrowdsale(uint256,address,address)", +"037ca6c4": "allAgingTimesAdded()", +"037cf465": "has_token_sale_time_ended()", +"037d4ff8": "get_pre_kyc_bonus_denominator()", +"037e2e91": "Insureum()", +"037ed3e2": "executeClaim(address,address,uint256)", +"037ef916": "CaterToken(address,address)", +"037f8f8f": "_getDefaultTranchesForAmount(address,uint256)", +"037f9cf0": "rewardDistributionStarted()", +"0380e2f3": "getHashOfTheSignedDocument()", +"0380fd03": "newExchange()", +"0381c260": "getYearlyUSDSalary(address,address)", +"0381cb3b": "setRowcol(uint256,uint256[2])", +"03824f76": "hasSoldOut()", +"03828729": "coordinatesToAddresses(uint32)", +"0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", +"038339ab": "publicGetDeposit(uint256)", +"03833bae": "ValidContributionCheck(uint256,bool)", +"0383966b": "testCanFinalizeOnCap()", +"0383a6f0": "CheckLimTransferDay(address)", +"038424c3": "maxEarningsClaimsRounds()", +"038461ea": "getCertifiedStudentsCount()", +"0384899b": "OwnershipChanged(address,address)", +"03850848": "saleAuctionContract()", +"03856d15": "BalanceOnlyOwner()", +"03866aad": "transferCrc(address)", +"0386a016": "closeProposal(uint256)", +"03872547": "setarg_1_input(uint256)", +"0387b0a2": "saleCounter()", +"03880bab": "deal(uint256[2],bytes32,bytes32,uint8)", +"03894922": "allocateTokens()", +"038b117b": "onlyAdminAndNotFinal()", +"038ccee8": "createNew(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"038d71ee": "switchOff()", +"038e666f": "ethereumSaleRate()", +"038e7577": "setConfigUint(bytes32,uint256)", +"038f1845": "returnFunding()", +"038f21a6": "mapToRange(uint16)", +"038f5ed6": "drawDown(uint256)", +"038f8b64": "batchFillOrdersNoThrow(uint256[],bytes[])", +"038fa9cb": "getRomms()", +"03901913": "DLBToken(uint256,string,uint8,string)", +"03905f10": "scoreKnockouts(bytes32,bytes32,bytes12)", +"03906217": "SaddleNotForSale(uint256)", +"0390d190": "YouDealToken()", +"0392d2b4": "isManagerAllowed(address,string)", +"039314b1": "VotingEnded(address,bool)", +"03941cc5": "onwerName()", +"0394b9ce": "getWeaponList()", +"03959bb7": "setDataContract(address)", +"03960631": "raindropAddress()", +"03969758": "SetDurationOfLock(address)", +"0396dcb0": "purchaseByEMONT(uint16,uint256,address)", +"0396ece5": "SetupReserve(address)", +"0396f60a": "Invested(address,uint256,uint256,uint128)", +"03975d1f": "_validateBetOrRefund(uint8)", +"03976b0e": "setBattleProviderAddress(address,address)", +"03980ac4": "prophetize(string,string,string,bytes32,bytes)", +"03985426": "getMode(bytes32)", +"03991aea": "getReleasableFunds()", +"0399247a": "isVotingProxy(uint32,int256,address)", +"0399321e": "set(bytes)", +"03995b2d": "holdingsOf(address)", +"03999795": "rouletteOwner()", +"0399c357": "assignFreeReadings(address,uint8)", +"0399f881": "ART_DECIMALSFACTOR()", +"039a21b8": "tryExecute(address,bytes,uint256)", +"039af9eb": "tiers(uint256)", +"039b267d": "mdtFoundationAddress()", +"039b6c34": "assign(uint16,address,uint256)", +"039ba6be": "getPriceETH()", +"039bd55a": "constrctor()", +"039c84c1": "Add(uint32)", +"039c9a21": "refundTransactionInternal(uint256)", +"039c9d84": "getOpenNum(bytes32)", +"039d0bfa": "setSelfOn()", +"039d8751": "GOX()", +"039de01d": "unregisterScheme(address,address)", +"039e4e2a": "situation_challenge()", +"039e9e00": "acceptOwnershipAPI()", +"039efdeb": "startMilestone()", +"039f0156": "withdrawNxc(address,uint256)", +"039f0e9c": "_createPuppy(uint256,uint256,uint256,uint256,address,uint16,uint16,uint16,uint16)", +"039f6b28": "QuadrantAssets()", +"039fb41c": "get_description_hash()", +"03a0d68f": "expiry_date()", +"03a168e0": "jackpotLastWinner()", +"03a19a4f": "maxDropsPerTx()", +"03a1b87d": "manageInvestors(address,uint256)", +"03a1bdc3": "walletLockBoth(address,uint256)", +"03a250f9": "startWork(uint256)", +"03a3053b": "reserveFundManager()", +"03a47b58": "tyms(uint256)", +"03a503a4": "addHorseIndex(bytes32)", +"03a5c8e7": "tdeActive()", +"03a68d1d": "REBToken()", +"03a6981b": "StateUpdate(uint128,int128,int256,uint256,address,uint128)", +"03a76fed": "createToken(uint256[],address)", +"03a77c7a": "setRegulator(address,address,bool)", +"03a7b41f": "queryPlotExists(uint8,int256[],int256[])", +"03a7bdd7": "testCloseContract(bytes32,bytes32,uint256,uint256,uint64,uint64,bytes32,bytes32,bytes32,uint64)", +"03ab614d": "testTranferOneToken()", +"03ac58d7": "deathData_f8()", +"03ac7215": "setTotalSupply(uint256,bool)", +"03aca792": "pendingList(uint256)", +"03ad4be3": "updatetoken(uint256,string)", +"03adaee6": "applyForCertification(string,string,string,string,address,uint128)", +"03adcbd2": "walkBook(uint16)", +"03addce2": "payout(address[],uint256,address)", +"03ade532": "ctrtMarketPrice()", +"03ae0357": "DevidendsSnapshot(address,uint256)", +"03ae3ded": "aproveLoan(uint256)", +"03ae4c1f": "buyCoke()", +"03ae8508": "createGladiatorBattle(uint256,uint8[2],bool,uint256,uint16)", +"03aeeba6": "_setClientSupply(address,uint256)", +"03af2cda": "createMultiple(uint256[],uint256[],uint256[],uint256[],uint8[],uint256[],address[])", +"03af73d3": "sendCollectedEther(address)", +"03b05c73": "maxIssuedTokensPerIco()", +"03b0a55c": "icoPvtEnded()", +"03b0e428": "_unpackRarityBonusValue(uint256)", +"03b103ea": "Vote(uint256,string,bytes32[])", +"03b25050": "CGCToken()", +"03b4e20c": "removeAddressFromAccountFor(address,address)", +"03b59255": "withdrawForeignTokensTo(address,address,uint256)", +"03b5af0f": "incomingRandomNumber(address,uint8)", +"03b5d494": "takeBet()", +"03b5ddbe": "_usdMinAmountValidate(uint256)", +"03b62931": "proveInConfirmedGblock(bytes,bytes32,bytes32)", +"03b62e10": "lowestDiff()", +"03b6eb88": "note(address,uint256)", +"03b718ee": "getCityBuildings(uint256,bool)", +"03b753dd": "tokenPurchase(address,uint256)", +"03b8a24e": "ritual(uint256)", +"03b918dc": "allow_contributions()", +"03b98c0e": "pauseable()", +"03b9b4f9": "releaseTokens(bytes32,uint256)", +"03b9f0b2": "referrerBonusRate()", +"03ba27f6": "withdrawToWallet()", +"03ba3a88": "notifyContract(address,address,uint256,bytes)", +"03bad56e": "transferERC223(address,uint256,bytes)", +"03bb5d8a": "openGameResultAndNewGame(uint256,string,bytes32)", +"03bbba93": "incentiveDistributionStarted()", +"03bc1e19": "changeOneBet(uint256)", +"03bc6d0d": "amendFee(uint256)", +"03bcebea": "initOneChance(address)", +"03bcf11d": "abortSale()", +"03bcf514": "finishedCrowdsourcingDisputeBond()", +"03bda14e": "raiseMaxNumBets(uint256)", +"03bdecf5": "right69(uint256)", +"03bec188": "ChangeMinAmount(uint256,uint256)", +"03bf4fb7": "setTradersContract(address)", +"03bf8e70": "birthKitty()", +"03bfee9e": "_getBidId()", +"03c0bfb5": "getOwnUserState()", +"03c13148": "setReceiver1(address)", +"03c175ff": "isRestrictedAddress(address)", +"03c1d1df": "collectERC20(address,uint256)", +"03c2d5b6": "nextGameDeveloperMiningPower()", +"03c327f0": "changingMilestones()", +"03c401e3": "ADDR_TKG_VC()", +"03c411d3": "MOMToken()", +"03c41c04": "NewUpgradedAmount(uint256,uint256,address)", +"03c45305": "foundersSupply()", +"03c49580": "priceOfElement(uint256)", +"03c4d93a": "payWithGold(uint256)", +"03c5b1dc": "setPeriod(uint256,uint256)", +"03c5f26a": "PublicCheckGameStart()", +"03c5faf4": "s12(bytes1)", +"03c63869": "resumePlayer(address)", +"03c6c8f9": "TheExcelToken()", +"03c7bce1": "_addMinter(address)", +"03c7da39": "mintMarketingTokens()", +"03c83302": "distributeDividends()", +"03c94ca6": "tokenSoftCapReached()", +"03ca0a95": "performSetTokenControlInfo()", +"03ca0eed": "requireCustomerId()", +"03ca0f6c": "advisors(address)", +"03ca30e0": "changePreMine(address)", +"03ca558a": "read_i8()", +"03ca71d6": "setSecurityCheck(string)", +"03ca7bcc": "debug_last_approved()", +"03cba01e": "bonusEndTime250()", +"03cbcf57": "getBetAmountAtLayer(uint16)", +"03cc1e32": "addFundingRound(uint256,uint256,uint256,address[])", +"03cc5597": "wrestle()", +"03cc5e4d": "setTechnicalAdmin(address)", +"03cc7b85": "num_tokens_auctioned()", +"03cc8efb": "BethingWorldCup()", +"03cd3e47": "transferRecovery(address,address,uint256)", +"03cddb2c": "capitalAllocated()", +"03ce6c55": "roundUp(uint256,uint256)", +"03ce9c00": "AcceptsTokens(address)", +"03cf0678": "bigBang()", +"03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", +"03cf678b": "vitToken()", +"03cfe12d": "benefactorsKeys()", +"03d08f3b": "nextLotteryTTWTokenId4()", +"03d0b7d2": "minimumFeePlusDividends()", +"03d0cecd": "getLx()", +"03d2107f": "getSender(bytes32)", +"03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", +"03d231b5": "signerFlag(address)", +"03d258c4": "set_prices(uint256)", +"03d285fd": "nameok(string)", +"03d2e963": "zint_now()", +"03d37d78": "showPoolNumber(address)", +"03d38296": "indexSuperInvestor(uint256)", +"03d3a6b7": "shutForETH(uint256)", +"03d41eb6": "reserveSupply()", +"03d499ef": "totalEthereumICOReceived()", +"03d4e98a": "getProposalVote(uint256,uint256,uint256)", +"03d50703": "challengeExit(bytes32[],bytes32[],uint256,uint256)", +"03d51a0c": "transfer_ether_to_owner(uint256)", +"03d5aa0c": "PigChain()", +"03d5f483": "founderTokenVesting()", +"03d699da": "YggdrashCrowd(address,address,address,uint256,uint256,uint256,uint256)", +"03d6b6b4": "EpigenCareCrowdsale(uint256,uint256,uint256,address,address,address)", +"03d6d7b6": "getCallMaxCost(bytes32)", +"03d7244f": "dice_game(uint256)", +"03d756cb": "ethealToken()", +"03d75937": "setUIntValue(string,uint256)", +"03d76547": "addressFin()", +"03d83c4d": "stopTge()", +"03d9d253": "unlock(uint256,address,address,bytes)", +"03da04d7": "BRN()", +"03da8902": "transfearDBOwner(address)", +"03dc0532": "getLableRecords(bytes32)", +"03dc6340": "AdminTokenSent(address,uint256)", +"03dcead2": "directDebitOf(address,address)", +"03dcf6bc": "truToken()", +"03dd5a18": "testSimpleArray()", +"03dd88f8": "getAssTotal()", +"03ddc104": "ownerClaimOverride(uint256)", +"03ddcae9": "checkTradeSignature(bytes32,uint256[],bytes32[])", +"03dec463": "getRentOwed(address)", +"03defdc5": "jobHunterWithdrawal()", +"03df1550": "ECR20HoneycombToken()", +"03df6106": "setNewReleasePeriod(address,uint256,uint256,uint256)", +"03e07b2f": "getMinRefEthPurchase()", +"03e1b3c6": "sellAllAmountBuyEth(address,address,uint256,address,uint256)", +"03e20503": "localManualEntry(bytes32,bytes32,uint256,uint256,address)", +"03e28366": "playerNum()", +"03e2b9f5": "syncDate()", +"03e337d1": "SEPCToken()", +"03e39113": "BeggarToken()", +"03e3b1ed": "applicationApproved(address,address)", +"03e3f677": "setICOStart(uint256)", +"03e3fa51": "editScores(uint256[],uint256[])", +"03e4d9f5": "getDayIndex(uint256)", +"03e55f1c": "lockEscrow(bytes32,address,uint256)", +"03e5affd": "add(string,int256,int256)", +"03e6c117": "getIcoAddrListByIcoRuleId(uint256,uint256)", +"03e7b4e9": "getEmission(uint256)", +"03e83b6a": "MyToken(uint256,string,string)", +"03e864fa": "TestableMarketContractOraclize(string,address,address,uint256[5],string,string)", +"03e8837c": "getUserCount(address)", +"03e9287a": "Tacoin(uint256,string,string)", +"03e93b2e": "changeStarbitWallet(address)", +"03e9598c": "updateClientVersion(bytes32)", +"03e96fe3": "getAllTickets()", +"03e9e609": "getRecord(uint256)", +"03ec1bbe": "tokenIssuedTotal()", +"03ed9d21": "setMaxContribution(uint256)", +"03edae57": "withdrawFounderFunds(uint256)", +"03edf914": "placeBet(uint256,uint8)", +"03ee8f08": "getCoeff(uint16)", +"03eea024": "issueTreasury(address,address)", +"03eeb40e": "AngelsvsRedSox419()", +"03ef03b4": "buyBulkMidGradeCar(address,uint256[],address)", +"03ef2a2c": "tryExecuteProposal(uint256,bytes)", +"03efb5c4": "book(address,uint256)", +"03f0cc64": "affiliateCodes(address)", +"03f10bff": "IDMONEY()", +"03f11878": "casino(uint256,uint256)", +"03f14886": "add_new_hash(string)", +"03f14be9": "updateEmployeeWallet(address,address,address)", +"03f14e96": "currentAirdrop()", +"03f166de": "calculateTransferValue(uint256,uint256)", +"03f17336": "BOPs(uint256)", +"03f187ea": "registerFee()", +"03f21bda": "privateOfferingTokens()", +"03f3b07f": "setUserScore(address,uint32)", +"03f3cea1": "requiresHardCap()", +"03f3e275": "getRatioList()", +"03f3e7c8": "setICOWeek4Bonus(uint256)", +"03f4864d": "XXXXXXXX05()", +"03f499b8": "refundState()", +"03f6477d": "setBonusSetter(address,address)", +"03f67e1b": "changelp2(address)", +"03f73f08": "start_ICO2(uint256)", +"03f744b0": "JessieEducationToken()", +"03f7d4ff": "BitpaintingStorage(uint8)", +"03f8008c": "getUserDAOsCount(address)", +"03f979c8": "saleEndTokenCreationRate()", +"03f9b456": "LockupTokensWithdrawn()", +"03f9c793": "invest(address)", +"03fad66e": "settokenCap(uint256)", +"03fb3f63": "currentMigrationSource()", +"03fba444": "_receiveBuyNextRank(address)", +"03fce7ef": "approveEscrow(uint256)", +"03fd8c65": "withdrawBalanceHashing(address,address,uint256)", +"03ff20a1": "crowdfundEndTime()", +"03ff5e73": "stopTime()", +"03ff8590": "random2(uint256,uint256)", +"03ff90f6": "minApproval()", +"03ffae3b": "FlightDelayDatabase(address)", +"040177b7": "previousDungeonId()", +"0401d897": "setVestingCliffDateTime(uint256)", +"04021ba8": "_increaseBalance(address,uint256)", +"04029f23": "_setBugFixVersion(string,uint32,bytes32,uint32)", +"040425d1": "protectedSupply()", +"040502e4": "EmmiumCoin()", +"04053d21": "checkCourse(uint256)", +"0405440c": "secureMode()", +"040622a9": "UNITPaymentGatewayList()", +"040677f1": "sentFirst()", +"0406870c": "SupplyManagementChainSolutions()", +"04072322": "GetEventData()", +"0407dc78": "medalBalanceOf(address)", +"04089c7d": "ALTnextCoin()", +"040a772e": "getUserDividends(address)", +"040c014b": "_changeName(string)", +"040c3a53": "maxRacers()", +"040cf020": "withdraw(bytes32,uint256)", +"040d54ce": "addFile(bytes32,string,uint256,string,string)", +"040d5e82": "partialFlip(bytes32)", +"040d70bd": "GetSeries0()", +"040da8f4": "jackpotBalance()", +"040e33f0": "SHRToken()", +"040e55f5": "getTransferCount()", +"040ea2f4": "ownerSetPriviledgedAddress(address)", +"040f9a5e": "transferRemainingTokens(address)", +"040fa051": "isPendingRegistration(address)", +"04106c8b": "startGeneration()", +"0410ec85": "randomReward(uint256[])", +"0410fac7": "adminRemoveTrustedCurrencyContract(address)", +"04115187": "initTime()", +"0411bca8": "getChallengeAnswerResult(uint256)", +"041257ef": "setWhitelistControllerAddress(address)", +"04126ce5": "getHashSubmissionEnd()", +"04143865": "dec_multiple()", +"04148f7e": "createGame(uint256,uint256,string,address)", +"04150694": "airdropBSupply()", +"04153ac9": "inflateActiveSupply(uint256)", +"04155727": "dcntrpls(uint256,uint256,uint256,uint256,uint256,bool)", +"04157752": "withdrawRed_(uint256,uint256)", +"0415bd13": "create(uint256,uint256,int256,address)", +"04165443": "gatherAllOldBalanceOf(address[])", +"0416c10c": "_getBytes(address,bytes32)", +"04186c57": "getPermissionsProvider()", +"0418945a": "addStablecoin(address)", +"0418ac09": "unFreezeTransfer()", +"04194636": "bulkTokenSend(address[],uint256[])", +"04198675": "setHitPrice(uint256)", +"0419c814": "isExistedOwner(address)", +"0419eca5": "createChild(uint256)", +"041abd9f": "timestampEnd()", +"041ae880": "funder()", +"041b1406": "checkPoDs(address[])", +"041b8c3e": "group(address,uint256)", +"041c3ade": "punkIndexToAddress()", +"041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", +"041d15c9": "getPurchaseTimestamp(uint32)", +"041d40c1": "buyOrders(bytes32)", +"041dad49": "incrementpostId()", +"041dd0f9": "ValueToken()", +"041dd3f6": "testControlCreateWithParentsParentNotInUse()", +"041e3929": "getInvitationCreatedOn(address,uint256)", +"041e6b8b": "rejectUpgrades()", +"041f173f": "blacklist(address[])", +"041fa8aa": "times9()", +"041fe13d": "onEtherandomSeed(bytes32,bytes32)", +"04213a59": "setServiceDuration(uint256)", +"0421a94c": "sendSpecialTasterPackage(address,uint256)", +"042228db": "adminUpdateArrayInvite(uint256,uint256,address,address)", +"0422ddf3": "isGamePaused()", +"04239743": "lastGrantedIndex()", +"0424b6fe": "ContentChanged(bytes32,bytes32)", +"0424d979": "removeDepositCreator(address)", +"0425b5e9": "initialLockAddress(address)", +"0425c357": "submitVote(uint256,bytes32,bytes)", +"0425c4bf": "updateProduct(address,string,string,uint256,string,bool)", +"0425ccba": "DoubleETH()", +"0425e6ff": "SEXNTestToken()", +"04267892": "koth()", +"04269bc2": "ICO_SUPPLY()", +"0426c697": "changePayoutAddress(address)", +"0426dcef": "unlockBalance(address,uint256)", +"04275375": "MCToken()", +"0428c6aa": "earlyBirds(uint256)", +"0428ca27": "WalletAddressUpdated(address)", +"04293236": "m_owner80()", +"0429b880": "confirmationPeriod()", +"0429b9ca": "totalEthAmount()", +"042abdf8": "PRE_ICO_MIN_CAP()", +"042ae62b": "killAborted()", +"042b5fed": "placeBet(bytes32)", +"042c71f5": "DevsmartCoinFour()", +"042cb150": "batchSend(uint256,address[])", +"042d65ab": "getTokenAwarded()", +"042e58c8": "receiveResults(string,uint256)", +"042e9a43": "propose(bytes32,string)", +"042f3b34": "DesafioStone()", +"04304b55": "getUSDEth()", +"04306d69": "MOOSToken()", +"0430e405": "gameStopped()", +"043106c0": "deleteAddressValue(bytes32)", +"043122bb": "minimumParticipation()", +"04318794": "giveTimeToDemoc(bytes32,uint256,bytes32)", +"0431dd86": "TokenNedCoin(uint256,string,uint8,string)", +"0432ff56": "START_WEEK_4()", +"043331ee": "addOnCount()", +"04336615": "hashLoop(uint256,bytes32)", +"04338def": "maxAmountPreICO()", +"04339140": "setCloneFeePercentage(uint256)", +"04339582": "buyAndTransfer(uint256,address,address,bytes,uint8)", +"04343722": "addUsers(address)", +"0434a44d": "codeSize()", +"0434e5a6": "changeWalletForETH(address)", +"0434fe0b": "heal()", +"043531b1": "setFeeDivisor(uint256)", +"0435a745": "stat()", +"04362c2d": "getEsgoTXCount()", +"043728b4": "initBet(bool)", +"043753ba": "makeDecision(uint256,bool)", +"043799e3": "inquire_domain_id(uint16,uint16)", +"0438ebce": "getPlayerBetForPlayRound(address,uint256)", +"043996c2": "setUseAmountBasedBonus(bool)", +"0439f7d4": "getProviderSupply(uint256,uint256,uint256)", +"043aea8b": "CrypthubtTokenTest()", +"043b743f": "investor_getShortInfo(address)", +"043bb5e7": "getIdentities(address[])", +"043c8816": "INM()", +"043cf01a": "addCourse(string,uint256,uint256,uint256,string)", +"043cf343": "CreditIDENTITY(address)", +"043d0258": "changePriceLimits(uint256,uint256)", +"043d5f1a": "ENCSToken(uint256,string,uint8,string)", +"043d9aaa": "verifiersPerShard()", +"043da739": "getNextBid()", +"043eabd0": "RUVI()", +"0440187e": "hostingProfitAddress()", +"04403b30": "TokenSaleSucceed()", +"0440c8e4": "_unpackRarityValue(uint256)", +"044166ec": "PollManagedFund(address,address,address,address,address,address,address,address,address[])", +"044215c6": "token(uint256)", +"044337ca": "setPortfolio(address)", +"04433bbc": "getContractAddress(string)", +"044431f0": "setRefundEnabled(bool)", +"0444c5db": "SSPRegistryReplaced(address,address)", +"0445154c": "PRIVATESALE_USD_PER_MSENC()", +"044553ae": "configureBoard(address)", +"04455e95": "testIsList(bytes)", +"04461f4d": "XaurumAmountMelted()", +"0446e187": "buyDonation(address,uint8)", +"04474181": "JixoCoin(uint256,string,uint8,string)", +"0448e936": "setSite(string)", +"0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", +"0449aa40": "allowedToBeSold()", +"044a3038": "_changeResolverAllowances(string,address[],uint256[])", +"044a5f97": "mgmtDistribute()", +"044aed7c": "removeEmployee(address,uint256)", +"044b1b02": "addProblem(string,string,string,string,string)", +"044bf6c2": "getSpinnerData(address,uint256)", +"044c1d4d": "clientVersion()", +"044c9366": "privateCrowdsale(address,uint256)", +"044c96e4": "startGame(string,string)", +"044ce308": "refundBuyer(uint256,uint256)", +"044d0b06": "oraclize_query(string,string[2])", +"044ec699": "get_mail(uint256)", +"044f19bd": "InfiniteCorridor()", +"044f53ee": "OPC(string,string,address)", +"044f9ac8": "findThroneCalled(bytes)", +"04509918": "scheduleCall(address)", +"04514185": "ShortBlog(string)", +"04517225": "transferlock()", +"04520116": "centsPerEther()", +"045236b4": "getChainyData(string)", +"0452396c": "subtrInvestorBalance(address,uint256)", +"04532035": "settleEth(address,uint32,uint32)", +"0453a7d2": "computeBonus()", +"0453e3b1": "ITIX()", +"04549d6f": "presaleStarted()", +"04550e70": "MyTestToken2()", +"04554443": "lockDuration()", +"045585a4": "priceList(uint256)", +"0456860a": "acceptAtCommunity(address,uint256)", +"04571211": "setTokenReward(address,address,uint256)", +"04578f90": "JTC(uint256,string,string)", +"0457d76b": "Mesa(bytes32[],uint256,address)", +"045820b3": "Player()", +"045894ab": "getCreate()", +"0458996a": "CBTSToken()", +"04590a28": "EtherWithdrawn(uint256)", +"04599012": "balanceToken(address)", +"045a1796": "upgraderSet()", +"045aceb9": "useResolver(string)", +"045b1a0c": "isBreakingInvestorCap(address,uint256)", +"045b7dca": "mintSupply()", +"045b9c72": "START_TIME_PRESALE()", +"045c123a": "sponsorDAI(uint256,uint256)", +"045c6ce0": "voteForProposal(uint256)", +"045cc8ec": "_createZodiacWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"045ccf7b": "byte64ToString(bytes1[64])", +"045d0389": "exchange(address,uint256)", +"045d2ad9": "upgrades()", +"045d4503": "TeamDeleted(uint256,uint256[])", +"045d465f": "setDataFactory(address)", +"045d46c2": "getBalances(address,address)", +"045e240f": "getAvailableTokensToWithdraw()", +"045e7dd7": "ContractEdited(string,address)", +"045ea88a": "fishySalmonToken()", +"045eb3b5": "expLimited(int128,int256,int256)", +"045ec563": "rndInc_()", +"045eea7d": "changeSelfName(string)", +"045f2593": "getRoot2(uint256)", +"045f7850": "airDrop(address,uint256)", +"045f8aad": "CONUNToken(uint256,string,uint8,string)", +"045f91ea": "getCurrentWallet()", +"045f955b": "buyPets(uint256,uint256)", +"045ff49a": "TIER2END()", +"0460b206": "Bxcoin()", +"046111e9": "addVip(bytes32,string)", +"04612d20": "minionAdd(address)", +"0461ac58": "dteamVaultAddr3()", +"04638e1a": "getBalanceOf(address,address,address)", +"0463cd73": "getSuperManager()", +"0463e4af": "releaseDividendsRights_(address,uint256)", +"0464f4b2": "InitialPriceEnable()", +"0464f8d0": "getCatsCount()", +"04651a1e": "firstRoundICOEnd()", +"0465832e": "modifyTransFee(uint256)", +"04658ad8": "NonIssueDeposits()", +"04659819": "capUsd()", +"0465a76d": "airdrop_cnt()", +"0466450e": "getUserByAddress(address,address)", +"046672cc": "batchTransfer(bytes32[],uint64)", +"0466c7ab": "executeComputation()", +"04670c9d": "nextStage(uint256,uint256)", +"04673368": "getCurrentPrice(uint256,uint256)", +"04676af4": "getCompte_7()", +"0467c3ff": "ThirdBonus()", +"04684ba3": "convertTokens(address,address,uint256,uint256)", +"0469756a": "MintAuthority(int256,address)", +"04699a72": "tipbot()", +"0469d644": "storeSecretVote(bytes32,uint256)", +"046a3d91": "distributePrizze(uint256)", +"046ae3c2": "YourPyramid()", +"046c472f": "IOU()", +"046c82e4": "GraceFund()", +"046ce030": "isFactoryApproved(address)", +"046d30c7": "_random(uint256)", +"046d5c53": "setMintAmountApproval(address,address,uint256)", +"046dc166": "setSignerAddress(address)", +"046e85f9": "getLastPendingTransaction()", +"046f7da2": "resume()", +"04706fdf": "giveContributionsBackProfitBugged()", +"047087cc": "getTotalTokenSupply()", +"04710a23": "toSgaAmount(uint256)", +"04719030": "manualSendTokens(address,uint256)", +"04729a8d": "tokensToEthereumAtSupply_(uint256,uint256)", +"0472a3bf": "doCrowdsaleMinting(address,uint256,uint256)", +"0472f549": "ran()", +"0472f72c": "_allocation(address,uint256)", +"0473e09c": "setConfigUint(bytes,uint256)", +"047408aa": "getAngelByIndex(address,uint256)", +"0474b484": "AllyICO()", +"0474d4a4": "isInitialAllocated()", +"04751333": "getRevForecast()", +"047564b7": "revokeValidator(address)", +"0477d647": "setSalary(uint256,uint256,uint256,uint256)", +"04780570": "ERC223Token_STB()", +"04787d83": "winBidDekla(address,address,uint256,uint256)", +"047956cf": "assign(address,uint256,bool)", +"0479fcd0": "setPopNameOriginal(uint256,string)", +"047a7ef1": "transferrable()", +"047a8dcb": "JetwingToken(address)", +"047ba641": "LowerStartingPrice(uint256)", +"047c738e": "wdivfloor(uint128,uint128)", +"047cfed9": "hasOwnership(uint256)", +"047d6649": "getUpdateByID(uint256)", +"047da93f": "testInvariantOverflow()", +"047de1f3": "drawerFee()", +"047e2b27": "setDataStorage(address)", +"047f9651": "make(uint256,uint256[4])", +"047f993d": "_vote(bytes32,uint8)", +"047fc9aa": "supply()", +"047fe8b3": "getUnsoldTokensBack()", +"047febbe": "admin_renewLockedAddress(address,address,uint256)", +"04803c2a": "addSales(uint16,uint128,uint16,uint16,uint64,uint64,uint16,uint8)", +"04804ee8": "sell(string,uint256,uint256)", +"0480c975": "setUnicornContract(address)", +"0480e58b": "maximumSupply()", +"04812aaf": "moveAccountData(address[],bytes32[],uint256[])", +"0481559b": "getLockDataFromMerkleTree(bytes,uint256)", +"04819507": "ICO_START4()", +"0481cb1b": "tokensAlreadyClaimed(bytes32,address)", +"048259e6": "UTCToken()", +"0482cfa8": "investorDividends(address)", +"04830ddd": "getVotersAt(uint256,uint256,uint256)", +"0483a7f6": "lockedBalances(address)", +"0484c7cf": "AppSupply(address,uint256)", +"0485066e": "addReading(uint8,uint256,uint256)", +"04858fef": "StartQuiz(string,string)", +"04859ceb": "afterTime(uint256)", +"048641be": "updateUserInvestBalance()", +"0486529b": "boardMemberApply(uint256)", +"04865327": "PlayerBet(address,uint256,uint256)", +"04869083": "auctionCreated(uint256,address,uint128,uint128,uint64)", +"0487b7e9": "Unity3d()", +"0487eed2": "restrictionsAllow(uint64,uint8)", +"0488781a": "teamOwnerOfPlayer(uint256)", +"0488dbfb": "getConfirmRefund(address,address,uint256)", +"048911a6": "createRandomZombie_ZOB_smallpack()", +"048926ac": "updateMaxPhase1(uint256)", +"04892c9f": "BASE_MIN_CONTRIBUTION()", +"048957d8": "sideBetPayToken(bytes32)", +"048986ae": "activityCore()", +"0489882e": "totalAdminsMapping()", +"0489fa70": "removePermittedContracts(address[])", +"048a5fed": "getSelfBalance()", +"048ae1bb": "addAssetPartOwner(bytes32,address)", +"048b0bcc": "addCustomerNReqACC(address,address,address)", +"048b3918": "messageNumber()", +"048bbc72": "CIR_SUPPLY()", +"048c35ca": "debug_is_recipient()", +"048ca698": "trackTotalVolume(address,uint256,uint256)", +"048cb8e0": "CarlosMatos()", +"048cc4a2": "BurnToken(address,address,uint256)", +"048cf8ed": "serviceDecreaseBalance(address,uint256)", +"048de56d": "setName(bytes2)", +"048dec38": "changeMarketingAddress(address)", +"048e2e94": "getAccountSize(address,uint256)", +"048e8c3a": "FidgetSpinner(uint256,uint256)", +"048e927b": "Checked(string,bool,uint256,bool,uint256)", +"048eb854": "_sortTopQuestions()", +"048f06f2": "setRoot(uint256,bytes32)", +"04903592": "withdrawAirdropTokens()", +"04904105": "setMiniPoolEdit_9(string)", +"0490540b": "Parameterizer(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"0490c71c": "unclaimedDividends(address)", +"0491eda0": "isCertainProduct(uint256,address,uint256,uint256,uint256,bool)", +"0492600e": "Issue(address,address,uint256,string)", +"04937cf9": "DoremiXToken()", +"0494630f": "oraclize_query(uint256,string,string[4],uint256)", +"04950f45": "KWHForGas()", +"049540c5": "structurePreIco(uint256)", +"0495cad9": "motionPasses(uint256)", +"0496e9ae": "triggerRequireError()", +"0496ee77": "checkPosition(address,uint256)", +"049766a8": "CleariumToken()", +"049878f3": "join(uint256)", +"04990162": "newChain(address[])", +"04994883": "ustAddress()", +"049948b0": "getMyGrapes()", +"0499ed13": "TOKEN_PRICE_WEI()", +"049a2dd1": "claimPartnerTokens()", +"049abf89": "queryUserContractCount(address)", +"049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", +"049b7852": "getElevations()", +"049c9bf2": "addExchangeAccount(address)", +"049cac16": "tokensUnvested()", +"049cc8b1": "soldForSecond()", +"049e63ee": "defaultClaimPercentage()", +"049eb289": "submitBuyOrder(bytes32,uint256,uint256)", +"049efcc7": "startReleasing()", +"049fb520": "countTickets()", +"04a077a4": "MyPasswordHint()", +"04a0c67e": "EagorNetwork()", +"04a1c63c": "token_a_amount()", +"04a1eb6b": "lastBlock_f16Hash_uint256()", +"04a23be0": "isAddressInWhiteList(string,address)", +"04a2b2c2": "testOwnerCanBreach()", +"04a2eaa5": "getTimeBonusPercent(uint256)", +"04a3693c": "applyFee(address,uint256,uint256)", +"04a373cc": "s20(bytes1)", +"04a3c21f": "maybeNewRound()", +"04a3ddd2": "_addToValueHeld(address,uint256)", +"04a48c27": "setActivityCoreAddress(address,address)", +"04a4a0d4": "getPriceMoney()", +"04a4a0ec": "TOTAL_XB_TOKEN_FOR_PRE_SALE()", +"04a4b776": "updateOpeningTime(uint256)", +"04a5288a": "stepcode()", +"04a6021d": "getByTypeNameVersion(string,string,string)", +"04a7137e": "controlledMint(address,uint256)", +"04a782ee": "addRecordByAdmin(bytes32,address,address,string,string)", +"04a79e9a": "spendDeposit(address,address,uint256)", +"04a7ca0e": "BonusUpdated(uint256)", +"04a7ff18": "totalNum()", +"04a82adf": "privateReservedUFT()", +"04a84938": "avaliableSupply()", +"04ac3b80": "addReceivedTrade(address,bytes32)", +"04ac75b0": "withdrawMulti(uint256,address[])", +"04aca4bc": "getClout(address)", +"04af7a20": "setDividendAndPayOut(uint32,uint32,uint32)", +"04afd2ce": "Multisended(uint256,address)", +"04b02ed6": "times_()", +"04b07a5e": "removeUpdater(address)", +"04b1142c": "getGuessCount(address)", +"04b1af75": "buy20()", +"04b1c6f0": "ICO_CAP()", +"04b2bf99": "stateControl()", +"04b370ab": "icoOver4()", +"04b43c5a": "withdrawZOB(uint256)", +"04b47e21": "isSignedWithEnc(uint16)", +"04b4e7e5": "awardsReservations()", +"04b5723d": "disableNewStakes()", +"04b5b5b6": "pointToToken(uint256,address,uint256)", +"04b64260": "tmpShuffleSeed(uint256,uint256)", +"04b65e74": "checkSTAGE()", +"04b69fa0": "jockeyNotForSale(uint256)", +"04b6ae61": "failedVotingCount()", +"04b6d39e": "_transferCroupier(address)", +"04b70576": "resetAgent(address)", +"04b7dcde": "hashData(string)", +"04b8ca98": "MAYTotalSupply()", +"04b92b7d": "overdraftAllocation()", +"04b94ec5": "MyToken30(uint256,string,string)", +"04badade": "get_hub_addr()", +"04bb1e3d": "updateActive(uint256,bool)", +"04bb754c": "TradeFinancing()", +"04bb89d5": "saveNick(string)", +"04bbc255": "isPricingStrategy()", +"04bd05d5": "getPeriodicalPnL()", +"04bd85f0": "getCapTab(uint256)", +"04be2f50": "isInvalid()", +"04bf1ee2": "JtoA(uint256[3])", +"04bf2a7f": "getScriptExecutor(bytes)", +"04c07569": "getBlock(uint256)", +"04c08fbd": "borrowFunds(uint256)", +"04c181f5": "beneficiars(address)", +"04c2a0ae": "DonateToLosers()", +"04c2a4a0": "computeKeyConstant(uint256)", +"04c313f4": "setAirdropGameInterface(address)", +"04c402f4": "set(int256,int256)", +"04c49f2c": "setFeePeriodDuration(uint256)", +"04c64e25": "revealMyVote(address,bytes32,bytes32,uint256,uint256)", +"04c6a9c5": "startIcoForOptionsHolders()", +"04c6ff7c": "devTeamTokenAddress()", +"04c76899": "sellerApprove(uint256,bytes)", +"04c76af0": "withdrawAdmin()", +"04c80c3c": "TOKEN_HODL_6M()", +"04c8384d": "trivialThreshold()", +"04c97ada": "setThirdRoundPricing(uint256)", +"04c98a2a": "validatePurchase()", +"04c98b2b": "startPresale()", +"04ca2775": "saleActive(uint256)", +"04caa6dd": "pauseReason()", +"04cb17ad": "returnPeriodExpired()", +"04cbc791": "getSellerOption()", +"04cc734b": "VoxelTransferred(address,uint8,uint8,uint8)", +"04ccf60e": "WrapperLockEth(string,string,uint256,address)", +"04cd1819": "disableVoting()", +"04cd5294": "getRefundAmount(uint256)", +"04ce1a61": "tokensWithdrawal(address,uint256)", +"04cf447d": "estimatesellvalue(uint256)", +"04d092c7": "claimPoints()", +"04d0a647": "getWallet(address)", +"04d0ac48": "tokensPending()", +"04d0c98a": "distribute10MTI(address[])", +"04d0fefe": "HoneyPot()", +"04d10f1c": "isValidChainyJson(string)", +"04d1290b": "getAlamat()", +"04d16482": "strConcat4(string,string,string,string)", +"04d1809c": "validateJoinSplit()", +"04d1b108": "_computeOwnerCut(uint128)", +"04d2cdbf": "setAcceptable(address)", +"04d2dec6": "getWalletAddress()", +"04d332a2": "setRefereeRewards(uint256[])", +"04d41474": "totalNormalContributorIdsAllocated()", +"04d58b3f": "MrwToken()", +"04d5c2c5": "toEGR(uint256)", +"04d6878f": "closeMicroWallet(uint256)", +"04d68a2b": "transferMoreThanBalanceTest(address)", +"04d69a11": "SoldToken(address,uint256,bytes32)", +"04d6db05": "startSale(address,uint256,uint256,uint256,uint256)", +"04d742dc": "startSale(uint256,uint256,uint256)", +"04d84108": "SWAP()", +"04d88bce": "DDJETH()", +"04d91c6a": "testFail()", +"04dbd2d3": "LogInvestorProfit(address,uint256)", +"04dcad85": "testDifferentTokenPrice()", +"04dcc44a": "getTip(address,bytes32)", +"04dd2dea": "getCardDivShare(uint256)", +"04dd69fa": "getGenerationIdForCall(address)", +"04de40ea": "AnnoToken()", +"04de76cf": "VisualChain()", +"04deaeb5": "retrieveEth(uint256,address)", +"04dee65f": "contractBatchTransfer(address[],uint256[])", +"04def102": "getRemainReleaseTimeOfStage(address,uint256)", +"04df0a1d": "kudosByMember()", +"04df48ef": "ICO_LEVEL_4()", +"04dfe14e": "LandmarkCoinTestF()", +"04e15de5": "issues(uint256)", +"04e1805a": "setFreezeForAngel(uint256,address,uint256)", +"04e1826c": "getNumTransactions(address,address,uint256)", +"04e262b8": "wlStartBlock()", +"04e5a069": "registerUBetCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", +"04e639b6": "fetchSlot(uint256,uint256)", +"04e6a9a1": "teamLock(address,uint256)", +"04e6adf8": "serHoldTime(address,address,uint256)", +"04e75fda": "Contribution(uint256,address)", +"04e78a30": "stakingMintAmount()", +"04e7dfcf": "getAssetRaised(address)", +"04e80e90": "getMasterCopy()", +"04e86e15": "calctime(uint256)", +"04e88f2d": "SayaToken(uint256)", +"04e98568": "withdrawBalanceCut(uint256)", +"04ea23bf": "FLUXBlockToken()", +"04ea4a57": "getDisputedPayoutDistributionHash()", +"04eab1e1": "gvpe_per_Keos()", +"04eb7d83": "setFirstPeriodEndDate(uint256)", +"04ebb1d9": "commonWithdraw(address,address,uint256,uint256)", +"04ebfc52": "userCount_()", +"04ec70a7": "determineAttackingOrDefendingOutcomeForAttributes(uint256,uint256,uint256,uint256,uint256)", +"04ecdaac": "rateSecondRound()", +"04ed02f6": "getCards(uint256)", +"04ed3f6a": "canStartSale2()", +"04ed6fbc": "minCDTToParticipate()", +"04edad4d": "YouLose(address,uint256)", +"04ee54d2": "revokeInitiator(address)", +"04ee9748": "storeWinnerShare()", +"04ef1353": "setTokenWithoutFee(address,bool)", +"04ef161b": "findSeed(address)", +"04efa227": "feeMakeExporter()", +"04f016c9": "transferMulti(address[],uint256)", +"04f03b6a": "getSomeVar()", +"04f041b5": "BtcEthRateChange(uint256)", +"04f05f91": "joltToken()", +"04f08b55": "getPolicy(uint8)", +"04f08eec": "PayEth(address,uint256)", +"04f0aa4e": "setServiceAgent(address)", +"04f13e40": "HashLand()", +"04f14090": "setBlacklist(address,bool,string)", +"04f17b11": "PriceChanged(uint256,address)", +"04f182f4": "icoPhase1End()", +"04f1e4e2": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", +"04f24897": "PlanetagroExchange(address)", +"04f30b37": "getFutureTransIdxByAddress(address)", +"04f31a47": "confirmICOSpec()", +"04f342f6": "_addToAging(address,address,uint256,uint256)", +"04f3bcec": "resolver()", +"04f49a3a": "addressStorage(bytes32)", +"04f4d425": "toEthFunction()", +"04f4f7ab": "KYRO()", +"04f5222c": "setEthMinContribution(uint256)", +"04f53231": "SendEth()", +"04f65288": "AK47Coin()", +"04f65590": "preSaleWeiRaised()", +"04f68d49": "dataSourceGetFinals()", +"04f6aa30": "forwardETHtoSTCcontract(uint256)", +"04f74b59": "make(address[],uint256[],address,bool)", +"04f7a69d": "baseSummonPrice()", +"04f7e87c": "issueBounty(address,uint256)", +"04f80977": "setBattleContract(address,address)", +"04f88d71": "testFailHardLimit()", +"04f8aa9b": "IoTeXNetwork(uint256)", +"04f92405": "icoTokensLeft()", +"04f9d030": "test_interface_call()", +"04fad28d": "instanceId()", +"04fb82cc": "_deliverTokens(address,uint256,uint256,uint256,address)", +"04fb9e81": "closeRequested()", +"04fc11d5": "getActual()", +"04fc7c6d": "updateJoinedCrowdsalesMultiple(address[])", +"04fcadf1": "totalZTHWagered()", +"04fd295c": "WOLF2()", +"04fd9f78": "variationsOfOwner(address)", +"04fda0d8": "_trade(address,uint256,address,uint256,address,uint256,bytes32)", +"04fe947c": "mapToNewRange(uint256,uint256,uint256)", +"04ffb5b9": "registerToken(address,string,string,uint256)", +"05009f0a": "_createBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", +"0500de3e": "interestResolution(uint8,uint8,uint8,bool)", +"0500fe3e": "getRegionCurrentPixelPrice(uint256)", +"05010105": "stakeRequired()", +"05015e79": "coldAdmin()", +"05018d91": "objectPants()", +"0501b79f": "getBlocktime()", +"0501d556": "setEmergency(bool)", +"05021ce9": "_trade(address,uint256,address,uint256,address,uint256)", +"050225ea": "giveaway(address,uint256)", +"05026317": "bitcoinSaleRate()", +"0502ca6b": "addTime(uint256)", +"050394ec": "minGasPriceForDrawing()", +"0503a3bb": "transferCharity(address)", +"050414bb": "addWhitelist(address[],uint256[])", +"0505140c": "totalSupplyWithDecimals()", +"05062247": "blocknumber()", +"050642f2": "exchangeTokenRate()", +"0506689a": "omegaPerEther()", +"050895ff": "backEndOperator()", +"0508ed90": "contribute(uint256,address,address,uint256)", +"050906ea": "_computeDamage(uint256,uint256,uint8)", +"050a2eb4": "diceRollAddress()", +"050a3250": "ArithLib()", +"050b8c66": "drainStrayTokens(address,uint256)", +"050c09ee": "founderWithdraw(uint256)", +"050c0fd6": "AmmbrToken()", +"050c8803": "getAmountFida(uint256)", +"050c931d": "paymentNumber()", +"050d6a15": "setSellPrice()", +"050df9f7": "PoolJoined(uint8,address,uint256,uint256)", +"050e25a0": "getHash(address,uint256,address,uint256,uint256,uint256)", +"050eb8c0": "BuyableCourt(address[],uint256[])", +"050f2f3e": "updateBools(bytes32[],bool[])", +"051064c6": "lighthouseFee()", +"051097ef": "addProposal(uint256,string)", +"0510e186": "getSncTokenAddress()", +"05111c1e": "getItemHolder(uint256)", +"05117619": "endVesting(address,address,address,address)", +"05117e0d": "validateTokenPurchase(address,int256[],int256[])", +"0511a431": "addOns(uint16)", +"05120ba6": "getTokensReleased()", +"05128716": "sale(string)", +"0513fc8b": "onBurn(uint256)", +"0514be3b": "ownedTemplates()", +"0514c275": "REALPlaceHolder(address,address,address)", +"05160860": "initialDayWithdrawCount(uint256)", +"0516af06": "getMonsterId(uint256)", +"0516c9f0": "frozenToken(address,uint256)", +"0517431e": "_teamSupply()", +"05175786": "announceWinnerManually(uint256)", +"051847d5": "childTokenByIndex(address,uint256,uint256)", +"0518afdc": "tokenToReward(uint256)", +"0519adad": "largestLoaner()", +"0519b873": "heroLottery()", +"0519bb83": "getVoteStatus(uint256)", +"0519ce79": "cfoAddress()", +"051a2664": "nameOf(uint256)", +"051a65dd": "deal_cancel_rate()", +"051a86cc": "mintApprove(uint256,int256)", +"051b044f": "_sell(uint256,address)", +"051b4e6c": "getSurveyInfo(bytes32)", +"051ba270": "getLogCancelArguments()", +"051c4ab6": "AddPlayer(uint8,address)", +"051c8a8d": "tradeUserAsset(address,address,address,address,uint256,uint256,uint256)", +"051cb630": "mintRandomCards(address,uint8,uint8)", +"051d9955": "confirmCustodianChangeProxy(bytes32)", +"051e5c45": "fiatPerEth()", +"051f4f6f": "transferAll()", +"05204231": "setPermission(address,address,uint8)", +"0520ed4a": "LYT(uint256,string,string)", +"05215b2f": "createStandardToken(uint256)", +"0522345a": "blackListFreezeTime()", +"052369a6": "submitLocation(uint256,uint8)", +"052424f5": "recordPromoterBonus(address,uint256)", +"052534e7": "VerificationEvent(address,address,uint32)", +"0525ca77": "packParams(address,uint16,uint32)", +"0526179e": "getSoilTempControlLimits(bytes32)", +"05261aea": "finalize(uint256)", +"0527da64": "_openGamePlayNos(uint256[])", +"0528bb57": "isSubscriptionProduct(uint256)", +"05297781": "MintToken(uint256)", +"05298d37": "setWhiteListERC20(address)", +"0529be17": "circulateTokensForSale(uint256)", +"0529de04": "getCertificateExpires()", +"052a076f": "disablePresale(bool)", +"052a6849": "tokenStartPrice()", +"052a829c": "notSoldTokens()", +"052ab49c": "bytesToUint1(bytes)", +"052b2aa7": "getRegistrants()", +"052b81c7": "releaseBadges()", +"052ca699": "end_()", +"052d5707": "JYToken()", +"052d9e7e": "setWhitelistEnabled(bool)", +"052deec5": "investorsIter(uint256)", +"052f1a7a": "BGXToken()", +"052f6557": "setExtraLimit(uint256)", +"052f72d7": "getIsGlobalOperator(address)", +"052f7d11": "freezeAccountSend(address,bool)", +"053011b7": "authenticate(uint256,uint256,uint256)", +"0530abf0": "SwingTradeToken()", +"0533073c": "publishingOwner()", +"0533f57b": "RAISED_AMOUNT()", +"0534ab04": "setCapsMerkleRoot(bytes32)", +"0535020d": "payTokens(uint256)", +"05354bed": "etherPricesAreClose(uint256,uint256)", +"05357c69": "isAssigned(uint256,address)", +"0535ec77": "initialDistributionDone()", +"05365bb0": "presale1()", +"0537665d": "setOutcome()", +"053902f6": "DTCC_ILOW_4()", +"0539272a": "startDay()", +"05398302": "destroyFrom(address)", +"05398d45": "setNewMiner(address)", +"0539c6d6": "num_squares()", +"0539eba9": "setAllowBuying(bool)", +"053abd3c": "createShareToken(uint8)", +"053ae2ca": "getHairColorValue(uint256)", +"053b8d2f": "deleteBackgroundImage(uint256)", +"053c351b": "oraclize_getPrice(string)", +"053c5d59": "e_Purchase(address,uint256)", +"053db3a9": "testSetPresaleTokens()", +"053e3169": "openSaleStartTime()", +"053e3253": "window3EndTime()", +"053e71a6": "getTotalNumberOfTokensForWinningOption(uint256)", +"053f14da": "lastPrice()", +"053f598a": "policyActiveNum()", +"053f7492": "minimumPriceInDailyAuction()", +"05401284": "debundle(uint256,address,address)", +"0541b0f8": "acceptPayment(bytes8)", +"0542b61b": "snt_claimed()", +"05433a26": "GetNumbersFromHash(bytes)", +"054348d6": "icoIsOver()", +"0544587f": "getCRYPTON_CUT()", +"054550f3": "assertEq8(bytes8,bytes8,bytes32)", +"05459f42": "WeeklyLotteryB(address)", +"0545a03b": "getGroupManagement(uint256)", +"0545f8ba": "changeExchangeAdmin(address)", +"054604a2": "miniToken()", +"05468c26": "addToBond(address,uint256)", +"0546a746": "restrictedTokensOf(address)", +"054726cb": "MNTOKEN()", +"0547bf4d": "DEFROST_MONTHLY_PERCENT_OWNER()", +"054909aa": "_addNewOwnerHoldingsToToken(address,uint256,uint256)", +"0549f150": "getAdministrator(address)", +"054a8c02": "getGirl(uint256)", +"054a9f11": "shopGloves()", +"054ba658": "delete_key(uint256,uint256)", +"054baaf2": "jan()", +"054be0b7": "setIssuanceRatio(uint256)", +"054c3c71": "getBetsOnTimestamp(uint256)", +"054d2a7e": "ChuCunLingAIGO(uint256,string,uint8,string)", +"054dcbb5": "AdvisorsTokensHolder(address,address,address)", +"054ded2b": "registrazione_candidato(string)", +"054e9507": "lastEventId()", +"054f268e": "getDCategoriesN(bytes32)", +"054f381b": "entrepreneur()", +"054f7d9c": "frozen()", +"054fce82": "ZipperWithdrawalRight(address)", +"05502a62": "BONUS_PRESALE()", +"0550f92f": "setMintAddress(int256,address)", +"05514a3e": "winBonusArray(uint256)", +"05529d94": "addMultipleParticipants(address[])", +"0552ce3e": "MonthToken()", +"05533ce1": "setSettings(address,uint256)", +"0553b805": "transferStorage(address)", +"0553e156": "finalize(address,uint256)", +"0553fd5b": "incSupply(uint256)", +"05540534": "setMultisigAddress(address)", +"0554bb48": "depositToLock(bytes32)", +"0556369e": "tokenToReserve()", +"055680f0": "purchaseCounter()", +"0556a66f": "deliverPresale(address,uint256)", +"0556fcd0": "setIcoFinish(uint256)", +"0557b2b0": "getApprovedTransfer(uint256)", +"0557df99": "FundingRulesSet(address,uint256,uint256,uint256,uint256)", +"0558171d": "maxCharId()", +"05597d88": "setOwnerCut(uint8)", +"0559c114": "removeSellOrder(uint256)", +"055a7341": "USEAddr()", +"055ad42e": "currentPhase()", +"055bb725": "_approveForSale(address,address,uint256)", +"055c7c96": "sliceBytes32Arr(bytes32[],bytes32,uint256,uint256)", +"055cbb3d": "CalculatePayout(bytes32,uint256,uint256,uint8)", +"055cdee1": "UpdateBetOnTeams(string,address,uint256)", +"055cff88": "AlarmxToken()", +"055e0e07": "Bela()", +"055e6d8b": "playGameCheckBid(uint256)", +"055ee253": "claim_reward()", +"0560ff44": "tokenMetadata(uint256,string)", +"056129a6": "TravelShare()", +"0561d562": "GoldiamToken()", +"0561eff6": "addStoneToBoard(uint256,uint8,uint8)", +"0561fc18": "ICOResumed(uint256,uint256,uint256,uint256)", +"056265d1": "storeData(bytes32[],bytes32[],bytes32[],bytes32[])", +"05626694": "LABEEToken(uint256,string,string)", +"05626f09": "timeFundingStart(uint256)", +"0562b9f7": "withdrawAmount(uint256)", +"0563324c": "executeOrder(bytes32,uint256,address)", +"0563451a": "icoEnd()", +"056362e8": "Crowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"0563bbf6": "USDEtherPrice()", +"0563d55e": "MomaSpace()", +"05645168": "_removeFundkeeper(address)", +"0564a9a7": "getPollResults()", +"0564df4a": "_addBattleSequence(uint8,uint8,uint256)", +"0565ac43": "get_bonus(uint256)", +"0565c3f4": "pushAngelInvestmentData(address,address,uint256)", +"05664cea": "getRevisionTimestamp(bytes32,uint256)", +"0566bc12": "getDebrisPrice(bytes32,uint8)", +"0566c02a": "discountedSaleDuration()", +"0566c979": "iCashToken()", +"05674427": "numToString(uint256)", +"0567e83e": "kill(address,address)", +"05681031": "_sendBack()", +"056841b0": "InsertManifesto(string,string)", +"056a6421": "activateInvoiced(address)", +"056ab62a": "TestPool(address[3])", +"056b01ce": "mint(string,uint256)", +"056b2300": "TxUserWallet()", +"056b8197": "tokensInVault()", +"056ba056": "trade(address)", +"056bcc72": "_getVoteInterface(uint256)", +"056bef9e": "addRequester(address,string)", +"056cf6bf": "Witness()", +"056e1059": "oraclize_query(uint256,string,string,uint256)", +"056e25e3": "returnIcoInvestments(uint256)", +"056e4d88": "TotalInvested()", +"056e81a6": "TokenBooksAirdrop()", +"056ed205": "EstateTransactions(string,string,string,address,int256)", +"057101b1": "Token(uint256,string,string,string,uint8)", +"0571d85f": "Forwarded(address,address,uint256)", +"05733989": "setAttribute(address,string,bytes,uint256)", +"057466ea": "buyToken(uint256,uint256)", +"05748be2": "dropAmount()", +"05763ff7": "pauseProposer()", +"0576cb6f": "verifyTargetWallet()", +"05777d9b": "ReturnToken(uint256)", +"0577f15c": "exchangesStatus()", +"0577f62f": "PRE_MAX_CAP()", +"05785e4c": "minimumBuy()", +"05788701": "Ribble()", +"0578e3e5": "isAtMost(uint256,uint256)", +"0578f356": "addManagedInvestmentProposal(uint32,bytes24,uint256,uint152)", +"0579d25d": "price(uint256[],uint256[])", +"057af1c4": "exist(string)", +"057b0416": "getAccDetails(address,address)", +"057b17c0": "timeMode()", +"057b7105": "calculateTokenAmountICO(uint256)", +"057bd53f": "sameVar()", +"057bfcc7": "amount2()", +"057c3cf5": "get_flag()", +"057c824f": "proveInConfirmedBalances(bytes,bytes32,bytes32)", +"057d2c17": "Jack()", +"057dd42d": "purchaseCompanyCard(uint256)", +"058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", +"058029a2": "icoCoinCap()", +"0580d5c7": "massBurnTokens(address[],uint256[])", +"0581345e": "issueClaimOwnership(address)", +"058206d9": "ICBCCoin()", +"05831c62": "donateFor(address)", +"05839b29": "sortTopTen()", +"0583ae52": "IRCToken()", +"05860b6f": "getBidIndex(address,bytes32)", +"058618f8": "setAuthorizeMintToken(uint256,int256)", +"05862435": "testFloatKeyValue()", +"05862611": "CrowdsaleLimit(uint256,uint256)", +"0587c1ba": "requestTokensFromOtherContract(address,address,address,uint256)", +"05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", +"0588dcbc": "updateStatsVars(uint256,uint256)", +"058a628f": "setAuthorizer(address)", +"058aace1": "divest()", +"058ab8c9": "EthVerifyCore()", +"058af982": "nameIsAdvocate(address,address)", +"058b316c": "MANAGEMENT_KEY()", +"058c5103": "safeKill()", +"058ceff7": "borrowBalanceStoredInternal(address)", +"058d4dd0": "setAssetCooldown(uint256,uint256,uint64)", +"058d7433": "setAlliesContract(address)", +"058fa067": "setGasRefundForClaimLootWithConsolationPrize(uint256)", +"058fcde9": "testFailTransferFrom()", +"058fe7d9": "setMiningRate(address,uint256)", +"05910b91": "canBreed(uint40)", +"05915147": "authType()", +"05917369": "populateFromOldContract(uint256[])", +"05917e8d": "updateWhitelistAddresses(address[],uint8)", +"0591eb24": "promoCreated()", +"059275ab": "howManyTokensForEther(uint256)", +"0593813f": "getBuyerTransaction(address)", +"0593d244": "setSaleContract(address)", +"05940728": "setGGCFee(uint8)", +"059417da": "_getAllParentIds(bytes32)", +"05943a15": "TEAM_SHARE()", +"0595ba4c": "getRoundMinAmountByBet(uint256)", +"0596334f": "rewardOne()", +"0596bd84": "_ChallengeFailed(uint256)", +"05976587": "test_expiry_increaseTimeBy30000()", +"05978450": "tokensReleasedAdvisorsTeam()", +"0597f3aa": "setGasRefundForClaimConsolationPrizeLoot(uint256)", +"05989e9d": "getAward(uint256)", +"05991e56": "Freewatch(uint256,string,uint8,string)", +"0599c284": "setAddress(string)", +"059a500c": "makeDeposit(uint256)", +"059a7d93": "cardEmojified(uint8)", +"059b8140": "upgradeAllowance(address,address,uint256)", +"059b8c77": "computeGainsRate(address)", +"059c00be": "STL(uint256,string,string)", +"059c5c4f": "policyFeeCollector()", +"059c5ecd": "WaniaToken()", +"059caad3": "creatorSupply()", +"059ce95d": "getVerifier(address)", +"059d45da": "removeAllPVPContenders()", +"059d92dc": "FeefersToken()", +"059eb515": "crowdsaleSold()", +"059efd9e": "_getShipColor(uint256)", +"059f8b16": "MULTIPLIER()", +"059f9342": "ownerSetLiquidationSpread()", +"05a0c707": "setMintAgent(address,int256)", +"05a10028": "burn(uint256,uint256,uint256)", +"05a10e6d": "withdrawStakeTokens(uint256,address)", +"05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", +"05a308fa": "setReferralSignupTokens(uint256)", +"05a30a7a": "lastDepositDate()", +"05a3823b": "colorplat()", +"05a3e81a": "ratePerWeiSecondPhase()", +"05a44292": "Train(uint64,uint64,uint64)", +"05a506b0": "seEnableTransfer(bool)", +"05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", +"05a5f830": "signedApproveAndCallHash(address,address,uint256,bytes,uint256,uint256)", +"05a873dc": "setMetadataSize(uint256)", +"05a8bf98": "SEXYKITTEN(uint256,string,string)", +"05a955af": "holderList(address)", +"05a95f04": "triggerPayout()", +"05a9cec2": "BetOnMe()", +"05a9f274": "totalLockedAmount()", +"05aaee1f": "unlockTimeStamp()", +"05ab421d": "sendTokens(address,uint256)", +"05ac7908": "TakeBackToken(uint256)", +"05ac9bce": "voteVoting(uint256)", +"05ace573": "commitPhaseMinSeconds()", +"05ae6bcc": "userPublicFundingEthCountMap(address)", +"05aeb1e1": "RDMGameToken()", +"05aebead": "plantationSize()", +"05aecc80": "IAmVeryPoorToken()", +"05af0194": "getUserQuickPromoBonus(address)", +"05af2a81": "AddrDevelopFunds()", +"05af636b": "PunkTransfer(address,address,uint256)", +"05afff5b": "isHandleValid(bytes32)", +"05b0876d": "mgrAddress(uint256)", +"05b09e07": "getGameNumber(address,uint256)", +"05b1137b": "transferEther(address,uint256)", +"05b19fc5": "ZzyToken()", +"05b2b03a": "CertificationCentre(address)", +"05b34410": "creationDate()", +"05b35924": "totalLuxCents()", +"05b3dcb9": "roomFree()", +"05b4655a": "withdrawlWinnings()", +"05b496bb": "penalizeSolutionSubmitter(uint256,uint256)", +"05b4fe5f": "DepositFrozen(address,uint256)", +"05b542d9": "startPortalGun()", +"05b5711d": "level_3_amount()", +"05b575a5": "addWhitelister(address,address)", +"05b5b0dc": "submitSolution(uint8[])", +"05b5da23": "setPlayerTokenAddress(address)", +"05b64993": "setRequestCancellationMinimumTime(uint32)", +"05b67c8e": "BitGuildCrowdsale(uint256,uint256,address,address,address)", +"05b6d298": "assertEq0(string,string)", +"05b6d9e2": "distributeeBitcoinCashLarge(address[])", +"05b74d87": "inPrivatePreSalePeriod()", +"05b765ea": "getCertifierStatus(address)", +"05b8b29e": "profitOwner()", +"05b95822": "enableFundingWallets(address)", +"05b961e6": "PayWinner(address)", +"05b9cb3c": "totalDelegations()", +"05ba2ded": "voteForCashBackInPercentOfWeight(uint256)", +"05bbf5db": "startDocumentPoll(uint8,bytes32)", +"05bc99f8": "eth_sent(address)", +"05bccd09": "EGGCOIN()", +"05bdd57b": "AVMTestSuite()", +"05be478b": "calulateXticket(uint256,uint256,uint256)", +"05bf3bf0": "FtechizTestToken()", +"05bf4ecc": "batchPopularitySetting(uint256[],uint8[])", +"05bf779f": "setFoundation(address,address)", +"05bf9ece": "ICOSuspended()", +"05c06367": "RequestDetachment(uint256)", +"05c06db9": "majorPartnerAddress()", +"05c080be": "getTotalF6()", +"05c091f6": "_setCEO(address)", +"05c0dd91": "DEPOSIT_WINDOW()", +"05c0e497": "CDcurrency()", +"05c1f502": "post()", +"05c1f5ff": "getWhiteListStatus(address,address)", +"05c24481": "reserveSlash(bytes32)", +"05c270e2": "getPreviousBlockNumber(uint256,uint256)", +"05c31491": "test_oneTrueAssertNoMessage()", +"05c35eb6": "MICE(uint256,string,string)", +"05c3cb8d": "changegp(address)", +"05c4af9d": "getProto(uint16)", +"05c4b3dc": "Snydertoken()", +"05c54cd6": "MUNIRAHAMID()", +"05c7603d": "updateGenGuVault(uint256)", +"05c78929": "thirdWeekTokenPrice()", +"05c7cd4b": "confirmAndForwardWithRevert(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", +"05c7f589": "BACS()", +"05c85c42": "icoTimeStart()", +"05c8a4e2": "FeuzingToken()", +"05ca11cf": "TIM5(uint256,string,uint8,string)", +"05ca3557": "makeAdoptionOffer(bytes5,uint256)", +"05ca3841": "getOraclizeAddr()", +"05caca6c": "transferOwnershipServer(address)", +"05cb177a": "referralPay(uint256)", +"05cb71d4": "firstLoos()", +"05cc1d8e": "openForceAutoFree(address)", +"05cc49dd": "distributeFee(uint256)", +"05cc72e3": "FilmscoinToken()", +"05ccfddd": "invalidateCombat(uint256)", +"05cd4794": "ExEquity()", +"05ce55fc": "channelDisputeResolver(uint64)", +"05cf5fcd": "mediationExpiry()", +"05d0e91c": "withdrawFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", +"05d0f15b": "tokenPriceWei()", +"05d1127f": "changeChanceToWinModule(uint256)", +"05d1afec": "ausGroup()", +"05d1fc5d": "AIRDROP_MAX()", +"05d2035b": "mintingFinished()", +"05d258dd": "getMixingResult(uint256,uint256)", +"05d26bc6": "feedme(uint256)", +"05d2f3e2": "ErrorReport(address,uint256,uint256)", +"05d2f92a": "check_depth(address,uint256)", +"05d35816": "ConstitutionalDNA()", +"05d430db": "isNameValid(string)", +"05d4665f": "CROWDSALE_TOKENS()", +"05d473da": "assinaPresenca()", +"05d52eeb": "OMPxContract()", +"05d53802": "setPreSaleTokens(uint256)", +"05d55093": "oraclizeRequests(bytes32)", +"05d56a4e": "GetDChainNumRevokableHashes(bytes32)", +"05d57a59": "destroy_time()", +"05d6671c": "m_txs()", +"05d67464": "getTether(address,uint256)", +"05d74066": "SendPreReserved5()", +"05d7649f": "sendPortion(uint256,address)", +"05d78739": "cratesMigrated(address)", +"05d85eda": "count(address)", +"05d861fa": "CommunityAdVoucher()", +"05d866cd": "MemberChanged(address,address)", +"05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", +"05d8bb97": "additionalDebt()", +"05d8c792": "_buyHicsTokens(address,uint256)", +"05d9a5fb": "sgn2sga(uint256,uint256)", +"05da403d": "withdrawBalance(bytes32,address,uint256,address,uint256)", +"05dabbcd": "lockedHasEnd()", +"05dad1c0": "test_userSetup()", +"05dae1f9": "ChargeStation(address,uint256)", +"05db3b82": "minwei()", +"05dc2708": "getCardNumber()", +"05dd071c": "_initialTransfers(address,address[],uint256[])", +"05dd23f7": "_stringGas(string)", +"05dd686f": "MIN_TOTAL_AMOUNT_TO_RECEIVE_ETH()", +"05dd7303": "EthereumStack()", +"05ddd49f": "Rotharium()", +"05de4f07": "getContentParent(uint256)", +"05de6288": "WithdrawalDone(address,uint256,uint256)", +"05df5e86": "XPAToken()", +"05df75db": "foobar()", +"05dfedac": "incrementDate()", +"05e0141d": "getOrders(uint256)", +"05e1bd8c": "calculateInterest(uint256,uint256,uint256)", +"05e1c942": "reclaimTokens(address[])", +"05e206f0": "_registerBid(uint32,uint256)", +"05e24a93": "DISTRIBUTED_STATUS()", +"05e2b66a": "update_eth_ratio(uint256)", +"05e2eee0": "getArrayString(bytes32)", +"05e33b6e": "calculateMask(uint256,uint256)", +"05e33dd0": "allParticipants(uint256)", +"05e43263": "AzwieToken(address)", +"05e437b5": "setAllSteps(uint256,uint256,uint256)", +"05e4438a": "applyHotFix(address)", +"05e4545d": "nextActionIsAuthorised()", +"05e45546": "promoCreatedCount()", +"05e49d1d": "findWinner(uint256)", +"05e4a75c": "setupairdrop(address,address)", +"05e52ea0": "numberOfBasesSold(uint256)", +"05e53535": "operationTokenCreated()", +"05e57cb1": "CommitGoodToken()", +"05e633e2": "bonusEnds3()", +"05e6b4a4": "_emitHolderAddressRemoved(bytes32,address,uint256)", +"05e6ee11": "btcInvestment(address,uint256,uint256,string,uint256)", +"05e7781e": "changeReserveWallet(address)", +"05e87e2a": "tracetoMultiSigContract()", +"05e88b69": "production()", +"05e992ff": "BitcoinDeuce(string,string,uint8,uint256)", +"05eb1877": "projectBuget(address)", +"05ecc085": "snapshotAt(uint256)", +"05ed2cd3": "settleBBDBatch(address[],int256[],uint256)", +"05ed76c4": "resolveTime()", +"05ee27a6": "RavneetToken()", +"05ee72b5": "playerEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", +"05ee8d89": "investorMinimalBalance()", +"05eed946": "waracoin_per_ether()", +"05ef6848": "getTokenPods(address)", +"05f04e46": "writePublicRecord(bytes32,bytes32,string,uint8,bytes32,bytes32)", +"05f0f662": "ComputeMyEggs()", +"05f203d9": "revoke(address[])", +"05f29b89": "smartSpeedEarning()", +"05f36283": "Nitrogen()", +"05f3a852": "tkn()", +"05f43bba": "calculatePreTokenAmount(uint256)", +"05f53b29": "getSkillCount()", +"05f5c0f3": "FrozenFunds(address,uint256,uint256,uint256,uint256,uint256)", +"05f6237f": "canClaimRefund()", +"05f671d9": "UUSD()", +"05f6d329": "limitTokenForSale()", +"05f6ee21": "updateBurnAgent(address,bool)", +"05f70f21": "getTokensWithoutRestrictions(uint256)", +"05f766a4": "Spc(uint256,string,string)", +"05f8002a": "setts01(uint256,address)", +"05f8b0cf": "setERCContract(address)", +"05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", +"05f8d55d": "addOwnerBalance()", +"05f908e6": "ICOPERIOD()", +"05f9bb6b": "transfersEnabledFlag()", +"05f9bf10": "AuctionCreated(uint256,address,uint256,uint256,uint256)", +"05fa0d5f": "_createTileAt(int32,int32)", +"05fc0586": "buyOptions(address,uint256,string)", +"05fcd234": "batchTransfer(address[],uint256,uint256[])", +"05fd22d0": "isPopulous(address)", +"05fe035f": "right100(uint256)", +"05feb950": "SOVREN()", +"05fec4be": "transferAdvisorToken(address,uint256)", +"05fefda7": "setPrices(uint256,uint256)", +"05ff088c": "getVendingInfo(uint256)", +"05ff711b": "blackList(uint32)", +"05ff792e": "cancelEscape(uint32,int256)", +"06005754": "nameRegAddress()", +"0600a865": "totalWithdrawable()", +"0600b814": "tokenBonusPct(uint256)", +"06011b14": "getUnitInfo(uint256,uint256,uint256)", +"06021e7e": "finalizeWork(address,string,string,string)", +"06024287": "attemptSomeMethod(address,uint256)", +"06026d87": "addAddressesToBonuslist(address[])", +"06027876": "sendBountyProgramBalance(address,uint256)", +"06040618": "currentPeriod()", +"0604c594": "getFreeBalances(address)", +"0605062f": "ownerOf()", +"0605d0cd": "emitSkillSet(uint256,uint256,uint256,bytes32)", +"0607dd94": "submitChoose(uint256)", +"06087e5b": "setColdWallet(address)", +"0608a48a": "reactivate_trading()", +"06090738": "setAdultTime(uint256)", +"06096931": "bountySupplied()", +"0609b433": "amendRetention(uint8)", +"060a02b7": "_hasIcoContributorType(address)", +"060a1051": "isExistInWhiteList(address)", +"060a56dc": "publisherCut()", +"060a7ef1": "getCreator(bytes32)", +"060b2128": "getEndPointOfCampaign(bytes32)", +"060ba7e9": "hackAdept(address)", +"060c265f": "checkMaxCap(address,uint256)", +"060c7f33": "AVAILABLE_FOR_EARLY_INVESTORS()", +"060ca250": "distributionsLength()", +"060cf4e8": "_cap()", +"060d15f9": "getBonusFactor(uint256,uint256,uint256)", +"060d206e": "modifyWhitelist(address,bool)", +"060d4f0d": "canDownload(address,address,bytes32)", +"060dac88": "setTokenBalance(address,address,uint256)", +"060eb520": "snt()", +"060f3102": "UbexToken()", +"060f400b": "removeFromOwnership(address)", +"060f58c3": "getUserFee(address)", +"060f919b": "getHash(address,bytes32)", +"060f99c4": "ZillaGDToken()", +"060ffb99": "getPromiseCount(address,bool)", +"0610e037": "isEnabled(bytes32)", +"0611037c": "QiiToken()", +"06114d36": "testChangeBet()", +"0611ae4a": "allocateBid(bytes32,uint256)", +"06122ea8": "createTokensAnySale()", +"061268d7": "requestFoundationTransfer(address,bytes32)", +"06127a11": "privateEntranceProvideAccessFor(address[])", +"061303a7": "refundIsAvailable()", +"061307b0": "fixPlayerPrename(uint256,string)", +"06130ca6": "getTopicAtIndex(uint256)", +"06132b38": "_create(address,uint16,uint16,uint8)", +"06137c9d": "add_luck(bytes32)", +"0613c265": "getLockBalance(address,uint8)", +"0613d936": "setAttackAddress(address,address)", +"0614117a": "recoverETH()", +"06155e95": "EmployeeSignedToESOP(address)", +"0615b520": "isBurner(address,address)", +"0615f7c3": "setGasForPBTT(uint256)", +"0616558c": "CampaignRules(address)", +"06169f63": "setAirdropAgent(address,bool)", +"0616ae05": "GenerateChips(address,uint256,uint256,uint32[])", +"0616cca0": "currentMood()", +"06171a5d": "OpsAddressUpdated(address)", +"061777ed": "incrementOpenInterestFromMarket(uint256)", +"06177ba8": "getdepositValue()", +"06184a25": "monthlySubscriptionCost()", +"0618c0b0": "INACTIVITY()", +"061931eb": "buySkill(uint256,uint256,uint256,uint32)", +"0619978d": "raiseApprovalEvent(address,address,uint256)", +"061a85c7": "forwardedOracle()", +"061ab664": "receiverTwo()", +"061b3245": "withdrawToExchange(address,uint256)", +"061c8800": "setInt(bytes32,bytes32,int256)", +"061c9040": "getLockInfo(address,address)", +"061d5102": "LivingstonCoin()", +"061d8169": "_addResolvers(string,address[],uint256[])", +"061e494f": "getBet(uint256)", +"061e5844": "withdrawFor(address,uint256,uint256,uint8,bytes32,bytes32)", +"061e7845": "buyTokens(string,string,address,uint256)", +"061ea8cc": "countByOwner(address)", +"061f7650": "supportsToken(address)", +"061f9811": "deleteRecord(uint256)", +"06201ad9": "getPLATPrice()", +"0620b2af": "PenaQuantumLeapToken()", +"0621472c": "approveAll(address)", +"0621afe4": "Virgingold()", +"0621b4f6": "sellAllAmount(address,uint256,address,uint256)", +"06222be3": "buyIcoTokens(uint256)", +"06223dac": "getDRCTotal(uint256)", +"06228e95": "freeTransferItem(uint64,address)", +"0622e74b": "crowdsaleTokenPriceNumerator()", +"06232bb0": "openAgreement(bytes,uint8,bytes32,bytes32)", +"06237111": "_getFilteredBoxes(bool)", +"06237526": "serviceCount()", +"06240d7d": "getWeiInCents(uint256)", +"0624ac2c": "getOutcomeTokens(bytes32,uint8)", +"0625d365": "getRightCoordinate(bytes1)", +"06262f1b": "trust(address,bool)", +"0627586a": "splitterNames(address)", +"06279d72": "priceUnits()", +"06287693": "directDebitAllowance(address)", +"062907d5": "initiateVotingContractUpdateVote(string,address)", +"062af37d": "isVersionContract(address,bytes32)", +"062b01ce": "isPricingSane()", +"062bbe59": "setEditedTrue(address)", +"062bd3e9": "getMarketTokenAddress(uint256)", +"062d0f09": "timestep()", +"062d4a34": "addressAdvisoryBountyTeam()", +"062db578": "createtoken(string,string,string,string,string,string,address)", +"062e43a1": "withdrawalToken(address)", +"062e53f3": "intFunc(int256,int256,int256)", +"062fe08e": "TOKENS_AVAILABLE()", +"062ff957": "fetchVoteNumForVoter(address)", +"06301ce8": "delUnpausedWallet(address)", +"06309aa0": "SistanToken()", +"0630da28": "TokenDeskProxy(address,uint256)", +"0631a171": "DocumentAdded(uint256,string,uint256,string)", +"0632a2f3": "getBlockAddress(uint256,uint256)", +"0632f718": "RedditRegistry(bytes32,uint8,uint16)", +"0633cd32": "requestAddressChange(address)", +"06347def": "getCooldownEndTimeFromIndex(uint16)", +"063575de": "withinPeriod()", +"0635fe90": "playerLockedFunds(address)", +"0636d7ac": "getOrdersForSeller(address)", +"063925c8": "scheduleCall(bytes,uint256,uint256)", +"06394c9b": "changeOperator(address)", +"063a7400": "registerUserOnToken(address,address,uint256,uint256,string)", +"063b1566": "partyTo(address)", +"063b3b29": "getPlayerStatus(uint256,uint256)", +"063bac1f": "giveRightToVoteByBatch(address[])", +"063bde24": "MAX_VALUE()", +"063c67c2": "getMatchInfo()", +"063ca521": "setPossibleMobs(uint32[])", +"063cea26": "prenupAgreement()", +"063cfaf0": "getVestingReleaseRate(address,uint256)", +"063d93d8": "register(address,string,string,string)", +"063db820": "payFee(uint256,uint256,address,bool)", +"063dda8b": "preSaleBonus(uint256)", +"063e1b78": "setTradingTime(uint256[])", +"063e7451": "initialSupplyAddress()", +"063ec2f0": "MEDIA_SUPPORT_PERCENT()", +"063f4540": "LogBet(address,uint256,uint256,uint256)", +"06407746": "Grant(address,bool)", +"0640f885": "PAYCLECOIN()", +"0641d812": "accruedDiv(address)", +"064292a8": "updateDates(uint256,uint256,uint256,uint256,uint256,uint256)", +"06437e4f": "_getCards(uint8,address)", +"0643be3e": "transferFrom(uint256,uint256)", +"06444e91": "register(address,uint32)", +"06459119": "testThrowsTransferNotTransferable()", +"0645b5d5": "getMyShareholderID()", +"06463556": "validateFunction(bytes4)", +"064701c6": "buyChest(uint16)", +"06474d12": "tokenIdOf(uint256)", +"06477332": "getMemberAtIndex(address,uint256)", +"0647b106": "Store(address,uint256,uint256,bytes32)", +"0647f697": "Uint256Oracle(uint256)", +"06490f47": "lockup()", +"064aa0e3": "ATMToken(uint256)", +"064af4ee": "setCoreContractAddress(address,address)", +"064c4ebc": "backDevvoteOwner()", +"064cc7a7": "delegatesByDelegator(address)", +"064cd77f": "changeFreezeDate(uint256)", +"064cfc16": "checkIsOpen()", +"064d4d7c": "_minAmount()", +"064da5e7": "getBAAU(bytes32,address,address)", +"064da642": "TransferSellAgentMulti(address[],uint256)", +"064dcb17": "sellTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"064ddd04": "getItemsForSale()", +"064f4fa7": "rateAge()", +"064f5dcd": "decentralizedEconomy()", +"064f67e7": "LockRemoved(address)", +"064fe208": "IxiniumFundingCoin()", +"06502ac0": "setMemberShip(address,uint256)", +"06504c31": "getNeedCloseBets()", +"0650b590": "bulkAdd(address[])", +"0651844e": "activateBalance(address)", +"06525841": "canCashBack()", +"0652d7f5": "fxFee()", +"065361a6": "buyBkgAtExchg(address,uint256,uint256,uint256)", +"0654cb16": "canInvest(address,uint256)", +"0654fbc4": "giveEther(address,uint256)", +"06552ff3": "init(address,address,address,address)", +"0655c58b": "getIcoTokensAmount(uint256,uint256)", +"06562575": "isTermOver()", +"0656dd02": "existingContract(address)", +"06575c89": "currentWeek()", +"0657a9c5": "registerTopPlayers(uint256,uint256[],uint256[])", +"0657f3a1": "finishIco(address,address)", +"0658a429": "BlockHashStorage()", +"0658b574": "storeImageString(string)", +"0659928c": "weiPerMinToken()", +"065b1061": "ln(uint256,uint256,uint8)", +"065b3133": "getDataColla_AA_02(string)", +"065c6b90": "setLevelRewards(uint256,uint256)", +"065de1f6": "minionRemove(address)", +"065de950": "dropNectar(address[])", +"065df077": "createBondFundToken(string,string,uint256,int256,uint256,uint256,address,string,uint256)", +"065e5360": "currentTick()", +"065ec2e6": "_restriction()", +"065ece90": "StageTwoDisable()", +"065f7a98": "totalNonSaleSupply()", +"065fcdff": "distributionThree(address)", +"065fe24f": "heldTimeline(address)", +"0660b8b2": "updateethFee(uint256)", +"0661b2f4": "setOtherPCK(address)", +"0661f204": "generateOtherNums(uint8[4])", +"066208de": "setInitialDuration(uint256)", +"06621ff6": "AZEEMCOIN(uint256,string,string)", +"0662572f": "activateSale(address)", +"06637876": "customers()", +"06637cd9": "getNewPeriod()", +"06638e92": "GetNumbersFromHash(bytes32)", +"066406ad": "LootEtherCom()", +"0665a06f": "createVesting(address,uint256,uint256,uint256)", +"0665c82b": "doPurchase(address)", +"06661abd": "count()", +"066636da": "getTotalEtherOfCurrentRound()", +"0666a6da": "setUnlceRateAndFees(uint256)", +"0666c071": "getEmployeeInfoByName(string)", +"06673ac7": "OmnesToken(address,address)", +"0668f649": "lambosTuneCount()", +"066aa53b": "updatCokeTotal(uint256,uint16)", +"066aff83": "calc1RealTokenRateFromRealTokens(int128)", +"066b0380": "assertEq30(bytes30,bytes30,bytes32)", +"066b3136": "paymentSuccessful(bytes32)", +"066bdc1b": "Legend_Royale(uint256,string,uint8,string)", +"066bf18c": "checkGoal(address)", +"066c94ba": "minTxSize()", +"066cc231": "YouAreHereAt(uint256)", +"066cd2c6": "createOfferAssets(uint256[],string,uint256,uint256)", +"066cf539": "vaultSecondaryUnlocked()", +"066d4701": "callFirstTarget()", +"066d76fe": "update_ratio(uint256,uint256)", +"066e4748": "calculateIdeaBuy(uint256,uint256)", +"066e4ce3": "CancelSell(address,uint256,uint256)", +"066f8a7d": "_disconnectModule()", +"066fd899": "availableReward(address)", +"067002ce": "removeSellingItem(uint256)", +"06713c3e": "proxy(address)", +"0672859b": "getMonsterCP(uint64)", +"0672cce3": "changeMinBet(uint8[157])", +"0673c8be": "isZero(address)", +"0674763c": "assert(bool)", +"06748fb1": "_random()", +"067497e2": "LogIcoTokenSupplyUpdated(uint256)", +"0674fde4": "aventus()", +"0675cb0b": "mintBool()", +"0675e962": "delegateIsCurrent()", +"0676aade": "GetOtherCustomerInfo(bytes18)", +"0676bde3": "BitGuildToken()", +"06771000": "ownerClawbackCredits()", +"06772bbd": "LogStateTransition(uint8,uint8)", +"06780cf5": "preIcoWallet()", +"06784b81": "MAXWIN_inTHOUSANDTHPERCENTS()", +"06787b98": "setHalfLifeRate(uint256)", +"0678c282": "extendRound(uint16,uint256)", +"067903f9": "withdraw4()", +"067906b1": "profiterole()", +"0679195a": "BerryLakeToken()", +"06791fc8": "enterPool(address,uint256)", +"067969a3": "sale2Accepting()", +"067a1e16": "getLockedValue(address)", +"067a2f3e": "Goochain(uint256,string,uint8,string)", +"067a6b05": "myRole()", +"067a8eb4": "registeredFundToRegistrants(address)", +"067ad784": "defaultBonussRate()", +"067ade9f": "claimSeedOwnership()", +"067c2d78": "thirdStartTime()", +"067cf182": "generateReport(int8[],uint32[])", +"067e06ee": "getServerStatus(string)", +"067ec02e": "Xkcd()", +"067eeeac": "tempTokensBalanceOf(address)", +"067fc6dd": "isTokenHolder(address,address)", +"06802613": "mintForCreatorsPool(uint256)", +"068045c7": "crowdsaleSetup(uint256,uint256)", +"0680d58a": "replaceService(address)", +"0681ae70": "FARTCOIN()", +"0681ca55": "milestoneCount()", +"068365ec": "buyWithCustomerId(uint256)", +"0683751e": "_removeByValue(address)", +"0683d56a": "minimumParticipationAmount()", +"0683dc58": "checkTransferIn(address,address,uint256)", +"0683dfdb": "getIdentifiersCount(address)", +"068417d9": "_registerInterface(bytes4)", +"06845b9f": "setTransferAbility(bool)", +"06845c4a": "LogFreezerRemoval(address,uint256)", +"0684c12b": "distributePresaleTokens(address,uint256)", +"0685224c": "GraspSmartBlockchainLock()", +"0685b410": "submitChooseByFactory(address,uint256)", +"0685b42c": "maascash()", +"06867f7d": "accountA()", +"0686dc8d": "setNEW(address,uint256,uint256,uint256,uint256)", +"06873418": "getcoolduwn(uint32)", +"0687bb4a": "purchaseCarCard(uint256)", +"06880dc0": "takeLoan(uint64)", +"06881fd1": "setBaseTokenGetRate(uint256)", +"068841c6": "getNeedLockFunds()", +"06884fc8": "airdrop2()", +"06886a53": "curOpenBNumber()", +"06886fd0": "logRoyalty(address,uint256)", +"0688b135": "recipient2()", +"0688ec24": "preicoAndAdvisorsAmounts(uint256)", +"06894f59": "TakeBack()", +"0689d0ff": "timeToChallenge()", +"068aafb8": "NepExToken()", +"068ae02b": "DATE_LIMIT()", +"068aebbc": "transfer(uint8[],uint8[],uint32[])", +"068b7310": "maxWei()", +"068bcd8d": "getPool(uint256)", +"068c017b": "calcUnlock(address,address)", +"068c8e61": "GetLandData()", +"068c966b": "DrawDetails(uint256)", +"068d5363": "withdraw_bix()", +"068ea2aa": "getLawyerAtIndex(uint256)", +"06900a40": "coAdmin()", +"06900c41": "ZeroPonzi()", +"06903e3e": "offeringProposals(address,uint256)", +"06903ecc": "GVE()", +"06907e17": "block(address)", +"06909f69": "cancel(string,uint256)", +"0691d0bf": "move(address,int64)", +"069215c9": "icoPhaseAmount4()", +"06921a9c": "PRESALES()", +"06934753": "getLanguageCountry()", +"0693b1ab": "minCount()", +"0693e603": "tokensAmountForPurchase()", +"0693ee6e": "firstStartTime()", +"069476ea": "_dispute(address,uint256,uint256[])", +"069489a2": "init2()", +"0694d1be": "refundsOpen()", +"0694f9d6": "getQtyValidators()", +"06961560": "DAO(address,uint256,uint256,uint256,address)", +"0696647a": "test_insert_findWithHintNextAtPosition()", +"0696ba24": "revokeTickets(address,bool)", +"0696eab6": "RICHCrowdsale(address,address,uint256,uint256)", +"0697dfb1": "tokenSetMintFeeProp(address,address,uint256)", +"0698ac9b": "decreaseWeiRaised(uint256)", +"06991539": "_addTokenToOwnersList(address,uint256)", +"06993c97": "writerAccountSupplyRemaining()", +"069984c9": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,string,string)", +"0699d07d": "updateMaxVal()", +"0699f10a": "LightAirdrop()", +"069a2e73": "registerModuleHandler(address)", +"069a6947": "biddedico()", +"069b559c": "migrateThroughOneFork()", +"069b9232": "ChenXiangToken(uint256,string,string)", +"069bd974": "validateTransfer(uint256)", +"069c97df": "angels_lock_days()", +"069cff34": "getMymorties()", +"069d6d1c": "closeOrder(uint256)", +"069d92e3": "showInvestEther(address,uint256)", +"069e5e53": "createEscrow(address,address,uint256,uint256,uint256,uint256)", +"069e9dba": "activateHandbreak()", +"069f5f72": "getMineableTokens()", +"069f74c7": "zcc()", +"069f7e85": "getGreeksBattlePoints()", +"06a0ab2b": "earningsPerShare()", +"06a24640": "setNextPot()", +"06a248c6": "depositTo()", +"06a33300": "BITOX(address,address,address,address,uint256,uint256,uint256)", +"06a36aee": "getUserRoles(address)", +"06a46703": "pubsaleDeadline()", +"06a493fa": "redeemCards(address,uint8)", +"06a49fce": "getCandidates()", +"06a5312b": "GetNumber()", +"06a585e6": "addInvestor(bytes32[3][],address,uint256,uint256)", +"06a5cb3a": "ecosystemAddress()", +"06a5f087": "signSeller(uint256)", +"06a628d4": "packSize()", +"06a669fc": "createPayment(address,uint256)", +"06a6c28f": "commitDividend(address)", +"06a74947": "getBigWinPot()", +"06a81591": "_price_token_PRE()", +"06a85497": "getGameBonusAdded()", +"06a86539": "PBTTForGas()", +"06a8f8a2": "admin2()", +"06a95b53": "blablabla()", +"06a98f0a": "Mine_Block()", +"06a9ce79": "updateTimer(uint256,uint256)", +"06a9d1a9": "fundraisingDeadline()", +"06aa4083": "icoWeek1Bonus()", +"06aacb14": "Broker(bool,address,address)", +"06ab34cf": "initExit(uint256,bytes32)", +"06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", +"06aba0e1": "getTotalWeight()", +"06ac1527": "capWalletAddress()", +"06ac2303": "EthereumButton()", +"06ac5879": "perReserveListedPairs(address,bytes32)", +"06adb71d": "increaseEmployeeExtraOptions(address,uint32)", +"06ae9483": "contractExists()", +"06aef16a": "getAuthorizationDate(address,address)", +"06aef6fb": "_withdrawToken(address,uint256)", +"06af0650": "initializeCurve(bytes32,bytes32,int256[])", +"06af3c75": "get_next_user_recast_from_item(bytes32,bytes32)", +"06af7414": "ContestAnnouncement(address)", +"06b05238": "safeWithdrawAmount()", +"06b091f9": "withdrawTokens(address,uint256)", +"06b0c76d": "setReferenceHash(bytes32,bytes32)", +"06b16a6c": "petPresell(uint16)", +"06b1b479": "indCommunity()", +"06b1efe5": "pushData(string)", +"06b28cec": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256)", +"06b2be05": "payStyle()", +"06b2e607": "GetGamestatus()", +"06b2fe22": "remainingTokensCount()", +"06b2ff47": "canReverse(address)", +"06b3bcd1": "getIpfsAddress(bytes32)", +"06b3efd6": "assetBalanceOf(address)", +"06b4c3e9": "ABCToken(string,string,uint256)", +"06b5338a": "JCoinz()", +"06b5760d": "getCreateShareTokenOutcomeValue()", +"06b5ad18": "recovery(string,address)", +"06b5b21e": "proposeTransfer(address)", +"06b5f02d": "calcWinnings(uint256,uint256)", +"06b6689b": "nextLotteryTTMTokenId5()", +"06b70f62": "MULTISIG_OWNER()", +"06b726d6": "smartBlockAddress(address)", +"06b764ed": "addAddressDataPatternVoteRules(address,address,uint256,uint256,bytes,bytes,uint256[5])", +"06b77972": "getDescriptionInfo(bytes32)", +"06b82a7d": "deregisterSettlement(uint64)", +"06b89153": "BBB()", +"06b8ef4a": "rewardCheckpoint()", +"06b96bb4": "HoloSale(uint256,uint256,uint256,uint256,uint256,address)", +"06ba089a": "updateWebsite(address,address,string)", +"06ba2987": "addSellTokensRequest(address,string,string)", +"06ba8e42": "logDisputeCrowdsourcerRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", +"06bb18c0": "NewCratePreSale()", +"06bbbeff": "getUserBetOf(uint256,address,address)", +"06bc7ef3": "deleteInvestContract()", +"06bced7c": "set_presale_arbits_total(uint256)", +"06bcf02f": "updateStartTime(uint256)", +"06bd7aac": "setSubdivisionEnabled(bool)", +"06be8e04": "_payToInviter(address,uint256)", +"06bee2be": "CartycoinToken(uint256,string,string)", +"06c01551": "setAtomDna(uint256,uint64)", +"06c0e841": "withdrawPayout()", +"06c1032c": "Created(address,address,uint256,uint256,string)", +"06c15206": "GTL()", +"06c17cd7": "sliceLengthThrow()", +"06c18600": "takeOwnership(uint256,uint256)", +"06c18ae0": "CyberVeinToken(address,address,address,uint256)", +"06c1b0ba": "adPriceDay()", +"06c1df7b": "checkBetColumn(uint8)", +"06c265b6": "VICCOToken()", +"06c270be": "HmcDistributor()", +"06c2b53c": "becomeTo()", +"06c2f050": "setSendToSafeWalletPercentage(uint256)", +"06c30e84": "CoVEXTokenERC223()", +"06c3f137": "getLastNReadingsByDeviceId(uint8,uint8)", +"06c45c2a": "addToTradeList(uint256[],uint256[],uint256[],uint256[])", +"06c4811e": "TokenOWLProxy(address)", +"06c5b9d0": "XiaoMuBiaoERC20()", +"06c6c546": "massApprove(address[],uint256[])", +"06c7e165": "SevenStandardToken(uint256,string,uint8,string)", +"06c80102": "releaseAbstractToken_(address,uint256)", +"06c89667": "change(string,string,uint256,uint256,bool)", +"06c8ffed": "removeMultipleAddressesFromWhitelist(address[])", +"06c91ce3": "gx()", +"06ca218f": "doPayout(uint256)", +"06ca66f0": "Indosat(address)", +"06ca9bba": "Start_NewRound(uint256)", +"06caf3e6": "extraDiscount(uint256)", +"06cb0ea4": "updateAd(uint256)", +"06cb4bcd": "sendDeposit()", +"06cc01bc": "setBuyCommissionBps(uint256)", +"06cc2035": "revokeFeeExemption(address)", +"06cc2cd2": "recordSoldPrice(uint256)", +"06cc6373": "UpdateUserExtraData3(address,bytes32)", +"06ccd230": "addToNumber(uint256)", +"06cd4728": "RublixToken(uint256,address)", +"06cf2280": "transferWithFee(address,address,uint256,uint256,uint256,address)", +"06d00b10": "doesOwn(bytes32,address)", +"06d0407e": "getBeneficiaryFinance()", +"06d0db26": "roundMoneyUpToWholeFinneyET(uint256)", +"06d145c9": "getFundingInfoForUser(address)", +"06d1772d": "TWOIoT()", +"06d177c1": "divPoolAmt()", +"06d19d68": "getHashRevealEnd()", +"06d19eb3": "updateSeller(address,uint256,address,uint256)", +"06d37817": "loanToken()", +"06d44278": "_emitError(uint256)", +"06d586bb": "maxPerUser()", +"06d58f2a": "claimAndWithdraw(address,address,address,uint256,uint256)", +"06d65af3": "preSaleStartTime()", +"06d6b095": "ProposalAdded(uint256,address,uint256,bytes)", +"06d6e513": "checkIsKYC(address,address)", +"06d83296": "setData_17(string)", +"06d832a3": "ownerStartContract()", +"06d8619b": "transferKing(address)", +"06d91eea": "getExoplanet(uint256)", +"06d978b2": "setMinDepartureLim(uint256)", +"06da3309": "Deposited(uint256,uint256)", +"06dafac6": "setGreyToken(address)", +"06db33e4": "getVotesByCandidate(uint16)", +"06db8af7": "toAddrString(uint256)", +"06dc5d7f": "total_user_eth()", +"06dc8949": "calculateTokenSellPrice(uint256)", +"06dcd5d0": "CATTOKEN()", +"06dd497f": "cancel(address,uint256,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"06df6cf0": "icoTokenExchangeRate()", +"06e102a0": "Presale(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"06e16a36": "currentTierId()", +"06e1976c": "lockAccount()", +"06e232c4": "getLuckyblockIds()", +"06e25081": "getFreeToken(uint256,address,uint256,bytes32,bytes32,uint8)", +"06e28346": "redeemPlatformMaintenance()", +"06e2f5c1": "getRoundRate(uint256)", +"06e31056": "FANCrowdsale(uint256,uint256,address,address)", +"06e34150": "filters(uint256)", +"06e3a700": "setStartingSeeds(uint256)", +"06e3d732": "getMyChest()", +"06e42962": "_winnerJackpot(uint256)", +"06e430f6": "getAcceptedOracles()", +"06e48538": "defaultOperators()", +"06e4d36f": "getSoftCapReached()", +"06e53e5c": "getCountHolder()", +"06e53f47": "whichChainIsThis()", +"06e5fe85": "promoPurchase(uint32,uint8,uint8,uint8,string)", +"06e63ff8": "insert(string,string)", +"06e64907": "End()", +"06e795e8": "sendToAddress(address,uint256,uint256)", +"06e7b5ad": "isDisputing(address)", +"06e8337f": "getTotalTickets()", +"06e83e2f": "send(address,address,address,uint256)", +"06e840ea": "incrementStatistics(uint256,uint256)", +"06e91d2e": "ROY()", +"06e99fef": "sendEth()", +"06ea1c02": "setArbitrationFeePerJuror(uint256)", +"06ea29c2": "notEqual(int256[],int256[],string)", +"06eb0c2f": "TokenERC20_test(uint256,string,string)", +"06eb6ac1": "TokenPaymentGateway()", +"06eb815f": "handleETH(address)", +"06ebe49f": "incMemberGoodRep(address,uint256)", +"06ec16f8": "collect(address)", +"06ec6272": "payCustom(address,uint256)", +"06ec8ca6": "setCurrency(bytes32)", +"06ec967b": "deleteHpbNodeBatch(address[])", +"06ec9b9e": "ETH_PRICE_USD()", +"06eca511": "unhaltICO()", +"06eccccb": "_getPersonalAirdrop(address,address)", +"06ed6908": "buyTokensFromContract()", +"06ed69b9": "dDeprecateCategory(bytes32,uint256)", +"06edcd24": "hasOpenedOldCrates(address)", +"06ee3b69": "startCloseSalePhase()", +"06ee4917": "ChainMaster()", +"06eeaba0": "tokensForParnter()", +"06ef53e0": "latestWinner()", +"06ef856b": "ethRelief()", +"06efdecd": "OwnerTransfered(address,address)", +"06f1117d": "REFERRAL_BONUS_LEVEL2()", +"06f13056": "batchCount()", +"06f13b8f": "transferTokensToEarlyEquityInvestor(address,uint256,bool)", +"06f2bf62": "getExchange(address)", +"06f33115": "ClaimedAmount()", +"06f33ae2": "setUnownedLifeRate(uint256,uint8)", +"06f36cc9": "helpBlue()", +"06f3a06a": "zeroInvestments()", +"06f3fc8a": "Mapoc(address)", +"06f470e9": "purchaseEstate(uint256)", +"06f4b12e": "changeTenant(address)", +"06f4f7de": "cancelDigitalArtSellingItem(uint256)", +"06f53cb3": "tryFinalizeProposal(uint256)", +"06f57add": "getWeekNumber()", +"06f639fe": "tier3(address)", +"06f660ef": "getInitialPrice()", +"06f68f12": "updateFirstBuyNum(bytes32,bytes32)", +"06f69881": "crossForkFundDeposit()", +"06f70295": "answer(uint256)", +"06f74bcf": "pauseInternal()", +"06f7ec97": "preICOBonus()", +"06f7f3fe": "getERC20Pawn(uint256)", +"06f84701": "canRedeemUTXO(bytes32,bytes20,uint8,uint256,bytes)", +"06f8ac40": "miniumInvestment()", +"06fa01b1": "MasonCoin()", +"06fa9df9": "hashPositions(uint32,int64[],bytes16)", +"06faebbe": "setPromoToPartner(string)", +"06fbf606": "setBurnFeeProp(uint256)", +"06fd06f8": "Exchanger()", +"06fd537b": "burnMoney()", +"06fdde03": "name()", +"06fdde58": "structure_variant_confirmation(int8)", +"06fde169": "REQUIRED_SHARES_TO_BE_BOARD_MEMBER()", +"06fdf75d": "getRedeemValue(uint256,address)", +"06fe0c29": "finishMilestone(string)", +"06fe1fd7": "getPackageName(bytes32)", +"06fe2212": "changeWaitTime(uint256)", +"06ff8908": "JoyToken()", +"06ffce53": "getTokenValue()", +"07002f02": "canIssue(uint256)", +"07006a55": "createPromoEggs()", +"07016f60": "getPOOL_edit_25()", +"0701da46": "limitAccount(address,uint256)", +"07023a38": "SellerHistory(address,uint256,uint256)", +"07031305": "setExpiration(uint256,uint256)", +"0703ffd1": "getLimitedReporterMarkets()", +"070485a9": "setGlobalPause(address)", +"070494ce": "blockFundsInEscrow(address,uint256,address)", +"0705028c": "addTransaction(uint256,address,address,bool,uint256,uint8)", +"070545d8": "Extend(bytes32)", +"07058808": "WinTokenLock()", +"07062cf2": "vision()", +"070669e6": "Requested(address,bytes32)", +"07073756": "_getTokenAmountForReferral(uint256,bool)", +"0707873c": "getInvestorInfo(address)", +"0707a106": "setRateEthToToken(uint256,uint256)", +"070816f1": "transferTeam1Tokens(address,uint256)", +"07085842": "smartcontracts(uint256)", +"0709544e": "getColor(bytes1,bytes1,bytes1)", +"0709d116": "setBlackListERC223(address)", +"0709df45": "vaultOf(address)", +"070a888f": "updateRewardDuration(uint256)", +"070ae23b": "createContractTokenWithPrice(string,uint256)", +"070b91d1": "voting(uint256,uint256,bool,uint256)", +"070bc415": "_computeUniqueness(uint256,uint256)", +"070bc508": "SupremIOTToken(address)", +"070be532": "BSE()", +"070c04b1": "setFromContractAddr(address)", +"070c3c23": "previousPayoutBlock()", +"070c87f9": "enableERC20()", +"070caf36": "exchangeTokenToEther(address,uint256)", +"070cf0cb": "isAgreementFullySigned(bytes32)", +"070f0e96": "countTokenHolders()", +"070f52f4": "canExchange()", +"070f5c09": "pausePresale()", +"070f723d": "_initializeGame()", +"070f7926": "_sendByDefaultTranches(address,address,address,uint256,bytes,bytes)", +"070fdb96": "getTakerBet(uint256,address,uint256,address)", +"07113965": "setPOOL_edit_3(string)", +"07120872": "createFightAuction(uint256,uint256,uint256,uint256)", +"07121a7a": "_requireBidderBalance(address,uint256)", +"07129e67": "SimpleEthBank()", +"07133caf": "HCToken()", +"07134b8b": "tokensNeededToGetPayment()", +"071357bd": "concludeCampaign(uint256)", +"0713d054": "checkDateExsit(uint256)", +"07142877": "PRE_SALE_MAX_CAP()", +"07144458": "forwardTokens(address[])", +"07146786": "userRankAddress()", +"0714c622": "anotherFunction()", +"07153d3b": "setStates(bytes32[])", +"07156854": "flipSwitchTo(bool)", +"0715b09f": "nouvelleProduction(uint256)", +"0715ec34": "EnchantedShop(address,string,string,uint256,uint32,uint256)", +"071696e0": "transferFAIDS(address[],uint256[])", +"0717f39e": "_isValidPerkToAdd(uint8[32],uint8)", +"0719d365": "TOKENS_CAP_ICO()", +"071a56df": "addOracle(address,string)", +"071a7541": "BETA()", +"071b7e73": "FinishIco(address,address,address,address)", +"071bafb5": "sin()", +"071bd079": "demo(uint256)", +"071bdfbd": "PlayCoin()", +"071c0306": "AvailableTokenPool()", +"071c802b": "saiVox()", +"071da02f": "totalBelaStaked()", +"071e1ddc": "processFunding(address,address,uint256)", +"071e8730": "AqsaJawaid()", +"071e9a76": "distributeFunds(address,uint256)", +"071ecb13": "getCurrencyContrData(uint256,uint256[7])", +"071eeeb3": "setStarNameMessage(uint256,string,string)", +"071fac61": "getAllMediators()", +"071fe9b0": "isBurnInClose()", +"07202460": "getMonsterObj(uint64)", +"07209e2b": "AllowanceCrowdsale(address)", +"0720fc78": "removeOWhitelist(address)", +"07216bda": "getBurnRequestStringMap(uint256,string)", +"072180ff": "buyCoinsAtExchg(address,uint256,uint256)", +"0721c6dd": "setCompte_29(string)", +"07220134": "getBetInfoByReveal(uint256)", +"0722559c": "endRentFlatDaily()", +"072419f4": "changeTeamFee(uint256)", +"072448f7": "midTimeBonusValue()", +"07256175": "SecondLevelCost()", +"07259d06": "limitGasPrice()", +"0725e898": "getTokensForOwner(address)", +"07260a43": "serveTx(address,uint256,bytes,bool,bytes)", +"07266117": "networkDevelopmentSupply()", +"0727adb3": "last_balance()", +"0728d5e3": "getDiscountedItemsForSale(uint256,uint256)", +"072933e9": "OWN_kill()", +"07293b9d": "maxStage2AllocationPerInvestor()", +"07298203": "GetStats()", +"072b3f49": "createContract(address,address,address,uint256,uint256,uint256)", +"072b8277": "VAPEbits()", +"072b9c83": "AxieERC721BaseEnumerable()", +"072b9cf2": "schema(bytes32)", +"072bdbb8": "getScripts(uint256,uint16)", +"072de7f3": "calculateTokenPrice(uint256)", +"072e28c2": "setCRManager(address)", +"072e4308": "detailsOf(string,string)", +"072ea61c": "entryFee()", +"073005f1": "canTransferFrom(address,address)", +"07304435": "getKilled()", +"0730a322": "FoundationTransfer(address,uint256,uint256)", +"073171d8": "LeaseBill(uint256,uint256,string)", +"0732717d": "buy_the_tokens(bytes32)", +"07336e35": "producedCaps()", +"0733b888": "getRoundsActive(address)", +"07342e9f": "MultiSigWalletWithDailyLimit()", +"073455f1": "BitDex(address,address,address,uint256,uint256,uint256)", +"073767fc": "changeRateFee(uint256)", +"073933ed": "isNotZero(int256,string)", +"07394d39": "TeamTokenLock(address,address)", +"0739cd26": "tsSucceeded()", +"073b3bf9": "addressToNumVillages(address)", +"073b423d": "mintTransfer(address,uint256,uint256,uint256)", +"073cc554": "newProposal(address,string,address,uint256,address,uint256,bytes)", +"073d5fd8": "DeadlineExtended(uint256,uint256)", +"073d9a28": "transferactive()", +"073e1fa3": "givecandyfrom()", +"073ede30": "addTeam1(uint64,uint64,uint64,uint16)", +"073f323d": "MamatToken(uint256,string,uint8,string)", +"07414002": "secureApprove(address,uint256)", +"07415ce8": "addressOfTokenUsedAsReward4()", +"0741dc1e": "withdrawToken(bytes8,address,uint256)", +"07420a41": "sendReward(address,uint256)", +"07433ca4": "createVesting(address,uint256,uint256,uint256,uint256,bool)", +"0744c56b": "getFreeHipster()", +"0745c160": "startProICO()", +"07461622": "setMinMax(uint256,string)", +"0746bfd9": "buySharesForProposal(uint256)", +"07471b18": "distributeInvest(uint256,uint256,uint256)", +"0747ab2a": "Winner(uint256,address,uint256,uint256)", +"0747e4eb": "wpr()", +"07489aa6": "totalFinalStage()", +"07489f92": "getUnsoldTokensVal(uint256)", +"074a1594": "addToAging(address,address,uint256,uint256)", +"074a1600": "percent2()", +"074b1e61": "referralsVault_()", +"074b5270": "leadingBid()", +"074bc101": "btcToken()", +"074c0836": "POMoooon()", +"074c09eb": "catalog()", +"074c32c4": "updateRatePlan(uint256,uint256,string,bytes32)", +"074c71e5": "SaleWallet(address,address)", +"074c9647": "updateEtherAmount(uint256)", +"074cac6c": "getFreeMinerForMiniGame(address)", +"074e06ee": "_addLuck(address,uint256)", +"074e0f36": "setMaxRefundableGasPrice(uint256)", +"074e6254": "blendWithYourself()", +"074e8940": "companyWalletAddress()", +"074f0a22": "DataContacts(address,address)", +"074fcfd5": "_blockKey(bytes32,bytes32,uint256)", +"07501073": "migrationGetPlayer(bytes32,uint8)", +"0751076d": "setBetMax(uint256)", +"07518c8e": "blockhashOf(uint256)", +"0752881a": "buyTokens(address,uint256)", +"075360bb": "moveRoundsToHolder(address)", +"07537ad4": "closeCrowdSale()", +"07539074": "LogInvestorRefunded(address,uint256)", +"0753afdf": "registration(string,string,string)", +"0753c30c": "deprecate(address)", +"0754236d": "minContributeETH()", +"07542576": "BayernvsRealMadrid()", +"07546172": "minter()", +"07549893": "SimpleChildToken(address,string,string,uint256,uint8)", +"0754e744": "icofunding()", +"07550f0a": "areAllBalanceNull(bytes32)", +"07560f13": "transferWithMessage(address,uint256,bytes)", +"0756f58f": "getDifficultyAsFixedPointForGameId(uint256)", +"0757114e": "getenddate()", +"07571c99": "getPayoutsCount()", +"075840d0": "bounty_funds()", +"075865c4": "getMiningWarDealine()", +"07587fa3": "KissMe(uint256,string,string)", +"075881d6": "purchasePlayer(uint256)", +"0758a980": "specialBonus(address)", +"0759a351": "getCCH_edit_30()", +"075a3b57": "releasedTo(address,address)", +"075acda7": "gasAmt()", +"075b1a09": "schemaId()", +"075bbcc7": "RESERVED_TOKENS_TIQPIT_SOLUTIONS()", +"075bf772": "teamTotal()", +"075c04ab": "dividendRewards(address,address)", +"075c18f7": "contributeByBitcoin(uint256,uint256,address,uint256)", +"075d4782": "publish()", +"075d7bb3": "setDontIndex(bool)", +"075deb95": "buyGana(address)", +"075e0a7c": "window3TotalSupply()", +"075f8ec2": "CommunityCoin()", +"075fe66a": "EDD()", +"075fe877": "scheduleCall(address,bytes,uint256,uint256)", +"0761923c": "TargetWalletUpdated(address)", +"0761a004": "step(uint256,bytes)", +"0761c57a": "rocketBlocksUntilAllowedToLaunch()", +"07621038": "getSponsorshipUser(address,uint256)", +"07626adb": "getApiId(string)", +"0762c317": "createNewPop(uint256,string)", +"07630eac": "sendTokensToBatch(uint256[],address[])", +"07632269": "_deliverPack(address,uint8)", +"07634cbe": "getCoupon()", +"0763b78b": "getPVEDuration(uint256)", +"0763f34e": "referrerReward()", +"0764a7fa": "FinderHyper()", +"0764ebd9": "updateExcludedAddress(address,bool)", +"0764f5e0": "serviceDeployCount(address)", +"076600ec": "ClaimDivs()", +"07660978": "PrepareForSale()", +"076736a2": "maxPurchaseSize()", +"07675951": "UpgradePurged(address)", +"0767d178": "weightOf(uint256)", +"076804b8": "checkAddressVerified()", +"0768e8fa": "payAffiliateToAddress(address)", +"07695379": "ControlStructure(uint256)", +"0769aefa": "createAnimecard(string,string,string,string,uint256)", +"076a1852": "zTransferLosingBets()", +"076a39a0": "HOUSEEDGE_inTHOUSANDTHPERCENTS()", +"076a6440": "setMain(address,address)", +"076ae31d": "BountyEscrow()", +"076b5fe1": "FangToken()", +"076c4870": "owner(address,address)", +"076c52b2": "betA()", +"076ccbe4": "testLedgerZeroCollateral()", +"076e18a0": "getCurrentTokenPriceWei()", +"076fdf3c": "getLockingTimestampTo()", +"076ffa3a": "___isActive()", +"0770a074": "adjustSupply(uint256,uint256,uint256)", +"077135a8": "totalNoOfTokenAlocated()", +"07715fd4": "BCOToken(address,string,string,uint256,uint256)", +"07716dd2": "hasEmployee(address)", +"07718a3b": "BankOwner_WithdrawDonations()", +"07730eb9": "BurnAllTokens()", +"077340c5": "transferAndFrozen(address,uint256,bytes,uint256,uint256)", +"0773aa85": "changeFoundersWallet(address)", +"0773e6ba": "addPermissions(address,address[])", +"0774774f": "lineageToken()", +"07751070": "getProperty()", +"07762e74": "viewMult()", +"0776e4fa": "set_balance(address,uint256)", +"077757fc": "transferWithoutChangeBest(address,uint256)", +"07776028": "creatorOwnership(address,address)", +"07777949": "transferEthBackToUser(address)", +"07779627": "isDelegate(address)", +"0777fa95": "TokenTKC()", +"0778425a": "getProposalsBySeller(address)", +"07786d0c": "sendAward()", +"0779afe6": "send(address,address,uint256)", +"0779d0f5": "refundApToken(address)", +"077a05dd": "sellSpecialTokensForPreSale(address,uint256)", +"077a8eaf": "abandonedIcoBalances()", +"077b109b": "_checkLedger(string)", +"077b124b": "addSuperInvestor(address)", +"077cd4bf": "petHpThreshold()", +"077d256a": "icoInvestorsAddresses(uint256)", +"077d3f8c": "Engrema()", +"077dadb2": "coinBalanceMultisig(address)", +"077e43b4": "getLastBallot()", +"077e6334": "endLock()", +"077f1008": "tovote(string,uint256,uint256)", +"077f224a": "initialize(string,string,address)", +"07801ac9": "addallmoney(address[],uint256[])", +"07801b5c": "nextroundGOTCHatcontract()", +"07805363": "joinGames(address,uint256)", +"07806b19": "cardDetailsStructs(uint8)", +"0780a196": "createDetail(address,uint256)", +"0781c111": "TokenSeller(address,uint256,uint256,bool)", +"0781f4d2": "emitting()", +"07822f7d": "viewauctionlist(uint256,uint256)", +"0782709a": "setKrsUsdRate(uint256)", +"0782fc35": "releaseValue4()", +"0783c2ef": "getAuditState(uint256)", +"0783d820": "getSysRestEth(uint256,uint256,uint256)", +"0784a07f": "distributedTokensAmount()", +"0785001c": "amountGoal()", +"07855f4f": "startPlacingPhase(uint256)", +"07858f0e": "setBallotOwner(uint256,address)", +"0785ca29": "BalanceCheck(uint256)", +"0785cb94": "DateOfBirth()", +"0786f01e": "setCookUpFee(uint256)", +"0786f72b": "etherAddress()", +"0787006d": "setCosignerCallGas()", +"0787bc27": "providers(address)", +"07883703": "Mint(uint256)", +"07885cd1": "PaymentChannel(address,address,address,address,uint256,bytes)", +"078895ea": "GbeeStandardToken(uint256,string,uint8,string)", +"0788f69c": "setCityPicture(uint256,string)", +"07894b1e": "initMartial()", +"0789fc01": "burningPercentage()", +"078aa5af": "testStorage(uint256[],uint256[])", +"078b247e": "shouldBeTerminated()", +"078b55e6": "createLibrary(string,string)", +"078bd227": "outputa(address)", +"078c0452": "setJobCompleted(bytes)", +"078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", +"078c42e6": "AirdropCheck()", +"078c51f0": "getTournamentCount()", +"078cc1cb": "setStartersProxyAddress(address)", +"078cfee6": "initializePrivateSale(uint256,uint256,uint256,uint256,uint256)", +"078d1258": "addFrostTokens(address,uint256,uint256)", +"078d88ff": "Validated(string,uint256)", +"078db9c9": "Mepoupe()", +"078dcd2f": "isGoodAlreadyAdd(bytes32)", +"078dfbe7": "transferOwnership(address,bool,bool)", +"078e096d": "endPublicIco()", +"078f872c": "closeProposal(bytes32)", +"078f8d3b": "ConversionAborted(uint256,string)", +"078f9378": "updateParameters(address,address,uint256,uint256,uint256)", +"078fd9ea": "saleCap()", +"079095ae": "VULCAN_POD()", +"0790e880": "setBlockappsAddr(address)", +"07910a78": "get10Tokens()", +"07912c14": "setI6(address)", +"079172da": "proofSet()", +"07927187": "addEmployee(uint256,string,address)", +"07930644": "getExchangeAdapter(bytes32)", +"07932772": "judge(uint8)", +"07939a17": "BUYER_STEP_3(bytes32,uint256)", +"07957360": "verifyOwnership(address,address)", +"0796c325": "Loading()", +"0796f97b": "FIRST_DAY_END()", +"07973ccf": "userCount()", +"0797595a": "donateDnaFromContract(address,uint256,uint8)", +"0797adb0": "loadEngineerOldData()", +"07986518": "GoogleChainSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"0798d7ef": "removePreIcoMembers(address[])", +"07993f04": "getPaper(uint256)", +"0799ad8d": "takeBackNTRY(address,address,uint256)", +"0799f1b2": "registerZTKCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", +"079a193b": "changeAllowance(address,uint256)", +"079aab88": "newPresserFee()", +"079b365e": "reportProfit(int256,bool,address)", +"079c002f": "TOKEN_WITHDRAWAL_START_DATE()", +"079c12fb": "RongWQToken(uint256,string,string)", +"079c345d": "major(uint256)", +"079c9fbb": "airDropSame(address[],uint256)", +"079caa14": "grantAdvisorsTokens(address)", +"079ce327": "reLoadXname(bytes32,uint256,uint256)", +"079cf76e": "getRoot(address)", +"079d229f": "freeFromUpTo(address,uint256)", +"079d2b96": "IsCampaignAvailable(uint256)", +"079d7d7f": "winningPot()", +"079e0e0e": "batchBuild(uint256[],int256[],int256[],uint8[])", +"079eaf34": "addUser(string,string)", +"079ee6b3": "addParticipant(address[],uint256[])", +"07a1ca5f": "endGame(address,bytes)", +"07a2aac2": "reverseBytes()", +"07a2c4d5": "DanatCoin()", +"07a3082d": "ConstructByCredits(uint256,uint256)", +"07a43efd": "export()", +"07a67fb3": "get_pool(uint256)", +"07a6e434": "getDocs(uint256)", +"07a72184": "stringToBytes32(bytes)", +"07a7465f": "getDescendantsOfThing(uint256)", +"07a77473": "_isOnAuction(uint256)", +"07a8275d": "getInviteEarnings(address)", +"07a878f6": "CLPToken()", +"07a8af6f": "expiryLimit()", +"07a8df44": "capInitialized()", +"07a94ed2": "powerDayRemainingLimitOf(address)", +"07a9574a": "changeLeaderMessage(string)", +"07a95e83": "refundUnclaimedEthers(uint256)", +"07a993e5": "setOtherCurrenciesChecker(address)", +"07a9d7a8": "hasConfirmedApplicant(address,address)", +"07aba33d": "getNext(uint256)", +"07ac15e2": "getInitBlock()", +"07ac8087": "getQuickBuyEtherTokenAddress()", +"07ad3282": "lastSettlementStartedTimestamp()", +"07ad9ecb": "safeSend(address,uint256)", +"07ae279c": "stage_Days()", +"07ae3095": "setNotMoreThan(uint256)", +"07aef7a6": "BGGToken()", +"07afbe74": "addAssetToOwnedAssets(address)", +"07b1470c": "debugVal3()", +"07b15667": "addPresaleAllocation(address,address,uint256)", +"07b1be24": "addTokenPairSecondPart(address,address,uint256,uint256)", +"07b261bc": "addOwner2(address)", +"07b26217": "removeAvailability(uint256[],uint256)", +"07b2779f": "BasicRegulator(address,uint256,uint256)", +"07b3776c": "currentRecord()", +"07b39962": "delAllowContractList(address)", +"07b578a0": "getGuestName()", +"07b5fc54": "updateDividendsFor()", +"07b60c02": "calculatePermillToRelease(uint256)", +"07b657ce": "lastBlock_v17()", +"07b6b762": "reserveFullMintAllowance(int256)", +"07b6f631": "testTestHarnessAuth()", +"07b86b41": "transactionsOnNowVal(address)", +"07b88cb3": "registerOffering(bytes32,bytes32,address,uint256)", +"07b8ef24": "votesSupport()", +"07b99366": "initExit(bytes32)", +"07b9ac2c": "editTrustee(address)", +"07ba216c": "coinsaleactive()", +"07ba217c": "pay1(address)", +"07baa3db": "ARXCrowdsale()", +"07bbb378": "BoughtTokens(address,uint256,uint256,uint256,uint256)", +"07bc6fad": "withdraw(address,uint256,bytes32,uint256)", +"07bc8829": "showText()", +"07bcf03a": "CFXToken()", +"07be02fe": "getPublisher(bytes32)", +"07be6ef8": "getTopCompanyStartPrice()", +"07be74b9": "refundWhite(uint256,uint256,uint256)", +"07bec66f": "buyout(uint256)", +"07bee472": "totalMainSaleTokenLimit()", +"07bf5863": "unprocessedQueryList(uint256)", +"07bf9b9f": "BONUS_SCALE()", +"07bfaa03": "toB32(uint256,uint256,bytes)", +"07bfce37": "long()", +"07c037af": "NipToken()", +"07c1880a": "logMarketCreated(bytes32,string,string,address,address,address,bytes32[],int256,int256,uint8)", +"07c24086": "preSaledeadline()", +"07c299c2": "eT(address,uint256,uint256)", +"07c2e16c": "getOrdersLength()", +"07c34e73": "releaseState1()", +"07c38522": "RMBToken()", +"07c3d98b": "balanceOfTotalUnclaimedMilk()", +"07c430bd": "Robincoin(uint256,string,string)", +"07c4d580": "transferForAdmin(address,address,uint256)", +"07c4e9e4": "ToggleFreezeToken(uint256)", +"07c533a5": "MTSCoin()", +"07c599df": "Stakefasttoken()", +"07c6b2fa": "_addDataStream(address,string,bytes32)", +"07c7accb": "getIdentityProvider(address)", +"07c7bae8": "LogContributions(address,uint256,bool)", +"07c8e56f": "Filter(address[],uint256[])", +"07c8fb5a": "HelperSearch()", +"07c9cd45": "cancelSell(uint256)", +"07ca140d": "numberOfCampaigns()", +"07ca3bc1": "ping(bool)", +"07ca6931": "StrategyAddress()", +"07cadb0f": "createCryptoAvatar(uint256,uint256,uint256,uint256,address)", +"07caf9e1": "advisorFirstLockTime()", +"07cb33d5": "ReleasableToken()", +"07cb4419": "OWN_contractlocked(bool)", +"07cbe8ab": "raisedFromToken(address)", +"07cc36da": "BNBNSRegistry()", +"07cc6051": "airAmount()", +"07ccad95": "TEAM_POOL_TOKENS()", +"07cd401c": "dividendDistributionPool()", +"07cd5c29": "batchRefund(address[],uint256[])", +"07cdee49": "coo()", +"07ce55a0": "ExtraFinalizeAgent(uint256,address,uint256)", +"07cfa11f": "WELFARE_HANDOUT()", +"07cff6f2": "getERC20(address,uint256,address,uint256)", +"07d03f8c": "sendTokensToSale()", +"07d0da7e": "NormalToken(string,string,uint256,uint8)", +"07d15ffd": "SteriliumToken()", +"07d1c4af": "ICOStartPromo()", +"07d1ccd2": "nStages()", +"07d20edc": "preSoldTokens()", +"07d31642": "trustDealer(address)", +"07d3be03": "setItemsForSale(uint256[],uint256[])", +"07d3d941": "CIRCULATING_BASE()", +"07d4db39": "transferResidualScoupons(address,uint256)", +"07d52598": "purchase(uint256,string,bool,uint256)", +"07d544fa": "OrpheusOrganicsThailand()", +"07d5b826": "buyAllOutcomes(bytes32,uint256)", +"07d5ebf5": "getDrones()", +"07d6a5d4": "dripToken(address,uint256)", +"07d71e73": "getAllMatchesForRoundId(uint256)", +"07d76ae9": "getOrderDealSpeed()", +"07d78e21": "bonusRateInPercent1()", +"07d7f8ed": "ANHUI_ANNUITY_DAO_33()", +"07d86788": "finalizeReclaim(uint256)", +"07d94ac7": "canSendWebGift()", +"07da14ce": "AddItem(string,uint256,uint256)", +"07da68f5": "stop()", +"07db37e7": "contribute(address,address)", +"07db4228": "beneficiaryMultiSigWithdraw()", +"07db7fe0": "initOne(string,string,uint8,uint256,uint256,address,address,bytes32)", +"07dbd529": "getLeastExpensiveCryptoGamer()", +"07dc6bd1": "setRoundParams(uint8,uint256,uint256,uint256,uint256,uint256)", +"07dc6f12": "refundInternal(bytes32,address,uint256)", +"07dcfebe": "DURIANFX()", +"07dd8271": "_removeArbiter(address)", +"07dd8e3b": "merge(uint256,bytes32,address[])", +"07dda675": "view70()", +"07ddd6c9": "SkinBase()", +"07de67dc": "makeVisible(uint128)", +"07de8e8c": "MultiSigController(address,address[],uint256)", +"07def80d": "teamsCreatedCount()", +"07defcac": "pizzaHolder()", +"07df18d3": "test0Vote()", +"07df3fa4": "tokensIssuedForBonusRangeFour()", +"07dfe49f": "ALLOC_ADVISORS_BOUNTIES()", +"07e00bcb": "kissBTCCallback(uint256,uint256)", +"07e0421f": "repossessionBlocks()", +"07e0e6f1": "addEmployee(address,address,address[],uint256)", +"07e124aa": "prolongPreIco(uint256)", +"07e1967a": "setAccountShareRuleGroupId(address,uint256)", +"07e27959": "reduceReserves(uint256)", +"07e33107": "addMetaProject(address)", +"07e35246": "getMinimumWishTribute()", +"07e3ad2d": "_getTokenBonus()", +"07e63412": "getPoster(uint256)", +"07e655eb": "resetFinalize()", +"07e669c3": "_cancelAuction(uint256,address)", +"07e7d5b9": "ZUKToken()", +"07e7f941": "setBonuses(uint256[],uint256[])", +"07e82a1e": "indexOf(uint16[],uint16,bool)", +"07e89ec0": "PUBLIC_SALE_PRICE()", +"07e8d284": "addressToPowerlevel(address)", +"07e9f217": "setDefconLevel(uint16)", +"07ea65c8": "getLastAlert(string,int256)", +"07eaa38b": "changeSettings_only_Dev(uint256,uint256,uint256,uint8,uint8)", +"07eb6123": "LogFinishPreICO()", +"07eb752e": "getListAddressHolders()", +"07ec0ead": "changeTechAccountAddress(address)", +"07ec4b42": "unicornBreedingAddress()", +"07ecdfe9": "XAUsToken()", +"07edb029": "MainstreetToken(address,address,uint256,bool)", +"07ee9df2": "NDT2Token()", +"07ef3ea1": "forceNextStage()", +"07ef8b33": "ETG()", +"07ef99a0": "demintTokens(int256,address,uint8)", +"07efbf2b": "DEVELOPERSFUND()", +"07f07648": "catalogPlayersAddress()", +"07f0973e": "EtherLotto()", +"07f125e7": "setMintPrice(uint256,int256,uint256,int256,uint256,int256)", +"07f171b7": "checkGoalandPrice()", +"07f1eb0d": "setMinimumTokenAmountForUpdate(uint256)", +"07f30f6a": "owner2OK()", +"07f3f764": "godMode(address,address,uint256)", +"07f442c4": "fightAlphaMonster()", +"07f4556f": "KIA()", +"07f4eace": "preSaleAmount()", +"07f4f3f4": "assertToken(address)", +"07f5888b": "vote02YesCount()", +"07f5b7a2": "TokenSale(address,address,address)", +"07f64725": "gotParticipants()", +"07f79d38": "presaleOpeningTime()", +"07f7aafb": "approveContract(address)", +"07f8f100": "startSell()", +"07f90e5d": "lotteries()", +"07f95fc2": "mintParticularPart(int256,uint8[4],address)", +"07f9f7ba": "StandardBounties(address)", +"07fa40e4": "withdrawEtherTo(address)", +"07fb363a": "cap_()", +"07fb37d4": "ChangePrice()", +"07fb462c": "SCEscrow()", +"07fb7c60": "getKudosSentFromTo(address,address)", +"07fd3687": "Seller()", +"07fe178b": "HLCoin()", +"07fee2a6": "presaleStartedAt()", +"07fee501": "getNumberOfFirstBuyer()", +"07ff1413": "multiBatchSafeTransferFrom(uint256[],address[],address[])", +"07fffa9d": "privateDiscountPrice()", +"08003f78": "burnTokens()", +"0800a05f": "cryptoStorage()", +"0800b89e": "setCategoriesCreator(address)", +"0800e300": "getComment(uint256)", +"08016f6d": "firstRefundRoundRateNumerator()", +"0801baca": "talkToWorld(string)", +"08020361": "distributeFixed(uint256,address[],uint256)", +"0802350d": "testThrowExecuteSellOrderChecksAmount()", +"08029105": "InvestFund()", +"08038a29": "createCarToken(string)", +"0804d013": "ProcessedInvestment(address,uint256,uint256)", +"08051004": "AddNewPhase(uint256,uint256,uint256,uint256,uint256,uint256)", +"08054fd5": "RevokeBid()", +"080571eb": "mintAndTransfer(address,uint256)", +"0806506e": "bigId()", +"080692bd": "setEtherPriceInUSD(string)", +"08071c05": "addit(uint256,uint256)", +"08081302": "clearClaims(uint32,int256)", +"08083039": "isSponsor(uint32,uint32)", +"0808f3eb": "canBuy(address)", +"08093ff6": "post(string,address[],uint256[])", +"08098336": "balanceWinPoolToTeam()", +"080991e4": "Trustless_Transfer(uint256,address,address,uint256)", +"0809f95d": "Asset(string)", +"080a57f9": "whitelistAddr(address)", +"080b2356": "AirEX(uint256)", +"080b2a86": "getTicketsCount()", +"080b3713": "createWinner()", +"080bdfa8": "brokerVerifierContract()", +"080bfdeb": "kindCount()", +"080c8a83": "unlock(bytes,bytes,bytes32)", +"080ca381": "totalDivided()", +"080d840c": "getRandomValue(bytes32)", +"080e74f7": "lotById(bytes32)", +"080f27f3": "view_readyTime()", +"080fbebf": "setup(uint256,uint256,address)", +"080fd28a": "regulatorApprovedKycProvider()", +"0811dda0": "SolarEclipseToken()", +"0812226e": "approveOrderHash_(bytes32)", +"0812cfbf": "registerInvestorAccount(address)", +"08148f7a": "timeout(uint256)", +"0814931a": "canTake(address)", +"08151de1": "attack(uint256,uint256,bytes)", +"0815711a": "hmultiply(uint256,uint256)", +"08165230": "TarynToken()", +"08167a4e": "getJsonToValue(string,uint256,uint256)", +"08171d30": "numOfFinishedPromotions()", +"081780f4": "clearRecord(bytes32)", +"0817e5c1": "upgradeM5(address,address)", +"081812fc": "getApproved(uint256)", +"0818d1da": "VestingCreated(address,address,address,uint256,uint256,uint256)", +"08190cda": "HT()", +"08195e10": "makerFeeRateE4()", +"0819815e": "addressPositions(address,address,uint256)", +"081b8bb4": "refreshVoteForAllByIndex(uint256)", +"081bde95": "buyTrack(address,bytes32)", +"081bf263": "isOOB(uint8,uint8)", +"081ce187": "disallowAddressToSendMoney(address,address)", +"081d203e": "plantedRate()", +"081d5380": "sendFundsToManager(uint256)", +"081e1b12": "giveEther()", +"081e21b4": "allowancePaillier(address,address)", +"081e806d": "PayOut(uint256)", +"081f74c6": "ArchiveCreation()", +"081f9190": "DiscToken()", +"0820b7c9": "activePresale(uint256)", +"082104e3": "boxChoice(uint256)", +"082152b4": "toB32(uint256,bytes,bytes)", +"08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", +"08218c98": "trade(address[3],uint256[4],bytes,uint256)", +"0821c87e": "sanMaxFree()", +"082346d9": "recoverAllFunds(bytes32,uint64,bytes32[],uint256[],uint256[2])", +"0823b38d": "calculateAveragePixelPrice(address[16],uint256,uint256)", +"0823d3a7": "Voted(address,bool,string)", +"082442f5": "feePayee()", +"08245f90": "testAbsMin()", +"08252f03": "CodeFundToken()", +"0827940f": "quitArbitrator()", +"0827ab43": "tokenRate10()", +"0828799b": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[4])", +"08290dc5": "setMaxSale(uint256)", +"082a4513": "releaseAllOnceLock()", +"082a7e60": "ODD()", +"082a8c4e": "arenaContract()", +"082b57e9": "TIER4_PRICE()", +"082b7c57": "FeesPayout(uint256)", +"082bd485": "BLAINetworkToken()", +"082c250c": "MDD()", +"082d7187": "mintFish(address[],uint32[],uint8[],uint8[],uint8[],bytes16[])", +"082d8f49": "left41(uint256)", +"082e0f6f": "makeupLegendary(uint256)", +"082e2814": "startDividendsPeriod()", +"082e6d81": "receivePriceFromOracle(uint256)", +"082f699e": "tokenReleaseAtStart()", +"082fa708": "tokensPerTrunche()", +"0830602b": "registerName(string)", +"08306af3": "PAYOUT_FRAC_BOT()", +"08314798": "setTokenSeed(uint256,string)", +"0831fb6c": "getWinnerListLength()", +"0832b925": "allowance(address,bytes32,address,address)", +"0832cf68": "FTNTCoin()", +"0832ff59": "Mentoscoin()", +"0834ab44": "cancelWagerOfCard(address)", +"0834d1e7": "getBetsSumByAgentId(uint256)", +"0834fe80": "LitecoinOne()", +"0835b8b2": "start2BonusPeriod2()", +"0835e754": "sendToRST(address)", +"08366c9d": "removeCZRLock(address,uint256)", +"0836d160": "WithdrawDividends(address,uint256)", +"08378040": "dayStartTime()", +"083903de": "setExchangeRateAgent(address)", +"0839e0fb": "migrationReceiver_setup()", +"0839f2ee": "WinbitToken(uint256,string,string)", +"083a0436": "getSentTransactionData(uint256)", +"083a3a74": "returnTokensToExchange()", +"083ab393": "bonusTokenRateLevelThree()", +"083ae00e": "postWish(bytes,bytes)", +"083ae1fe": "setPackage(string)", +"083b2732": "callback()", +"083baf15": "get_participant_arbits(address)", +"083c6323": "endBlock()", +"083cadf0": "approveInternal(address,uint256)", +"083ccc8a": "_forwardFunds(address,uint256,uint256,uint256)", +"083d13c4": "returnTokenDepositState(address[2],uint256[8],uint8,bytes32[2])", +"083d4aa5": "QoToken()", +"083d9e6d": "period4End()", +"083eb6f8": "icoSaleHardCap()", +"083ed817": "getEmployerJobsForFreelancerInvite(address,address)", +"083eea12": "Unfrozen(uint256)", +"08404ac8": "ERC20dex()", +"0840972b": "setClue(string)", +"0841abd2": "verifyNextTurn(uint256,uint256[3],uint256[3],uint8[176])", +"08421645": "changePresaleTimeRange(uint256,uint256)", +"08421e7f": "paymentsByAddress(address)", +"08434ef5": "updateRequestSeed(bytes32,bytes32)", +"08436588": "getUsersAwaitingForTokensTop150()", +"08447aef": "KudosTokenLockup(address,address)", +"08447c9f": "SilverWhitelist(address,bool)", +"0845817c": "resetCommission()", +"084592cb": "turnon()", +"0845e2d8": "SingularityTest2()", +"08464b68": "changeAREFWallet(address)", +"0846c0ee": "invalidate(string)", +"0846ca3c": "deleteAccounts(address[])", +"08474d2a": "judgeReleaseRecordExist(uint256)", +"084794f8": "_devFeesAddr()", +"0847e9fa": "numDarknodesNextEpoch()", +"084992a6": "closeChannel(address,uint8)", +"0849a197": "EventUpgradeCar(address,uint32,uint8,uint8)", +"0849cc99": "getArrayLength()", +"084a4011": "whitelistBonusSent()", +"084ab6f5": "requestLoan(address,address,uint256,uint256,uint256,bool,string)", +"084b410d": "getNormalCard(address)", +"084b8246": "getOwnedAndTotalTokens(bytes32,address)", +"084b8f8d": "set_presale_arbits_sold(uint256)", +"084bbafb": "update_entity(address,string)", +"084bdabe": "vestedBalanceOf(address,uint256)", +"084ccb41": "cBAListLength()", +"084ce708": "pay(address[],uint256[])", +"084d113b": "addMerkleTreeRoot(uint8,bytes,bytes)", +"084d72f4": "getWinningOutcome(uint256)", +"084ee60f": "convertWeiToTokens(uint256)", +"084fa898": "Raffle(uint64,uint32,uint256)", +"08508b8f": "hasBeenDeployed(address)", +"0850de0c": "_setUserInfo(address,uint256,uint256,address,address)", +"0850e4c3": "Sunny2()", +"0851762a": "transferLockedToken(address,uint256,uint256)", +"0851d08c": "setChainType(string)", +"08528190": "changeRegulator(address)", +"0852aa9d": "maafakaToken()", +"08534888": "privateSaleReleased(address)", +"0853b015": "lastBetUser()", +"0853e875": "adjustTradeRange(uint256,uint256)", +"0853ea45": "_stringToBytes32(string,string)", +"0853f7eb": "frontRunnerPeriod()", +"08540812": "removeContractFromTokenFallbackWhiteList(address,address)", +"085431f4": "getGameProprietaryData(uint256)", +"085487a5": "Shiva()", +"0854f856": "getPoolInformation(address)", +"08551a53": "seller()", +"08551d34": "haltPurchases()", +"085554a4": "DHUB()", +"08555a0a": "secondStageRaisedInWei()", +"085634ec": "changeStatus()", +"08567a87": "removePoliceNode(address)", +"08573a0b": "reservePunksForOwner(uint256)", +"08587a76": "_scheduleCall()", +"08595e5e": "puppySports()", +"0859e844": "getEthRate(uint256)", +"085a1daa": "startCollection()", +"085a3600": "_exchangeMatronSireId(uint256,uint256)", +"085a4705": "issueAsset(bytes32,uint256,string,string,uint8,bool)", +"085ba55b": "getRoundStageEndInfo(uint256)", +"085bcb34": "getSamplesForJingle(uint256)", +"085c1cee": "teamTokenBonus()", +"085ca4e3": "preIcoEndBlock()", +"085ca679": "setAirDropShadowTag(bool,uint256)", +"085ca94e": "payFiat(address,uint256,uint256)", +"085ceb30": "tokensCap()", +"085d1973": "getContributorByIndex(uint256)", +"085d4883": "provider()", +"085d9335": "participantBonus(address)", +"085dedf1": "init(uint256,uint256,address,uint256,address,uint256,uint256,uint256,address,uint256)", +"085e658c": "setSpecialWallet(address)", +"085e9579": "getCompte_35()", +"085f8ebb": "transform(uint64,uint64,uint64,uint64)", +"085fa50a": "changeMainContractInCoin(address,address)", +"085fd114": "o3Address()", +"085ff39a": "getPremiumCarsForVariant(uint256)", +"086013c0": "stackOwner(bytes32)", +"08604366": "nextPayeeIndex()", +"0860a902": "ownerBurnUnsoldTokens()", +"08612c35": "getReservedTokens(uint8)", +"08614362": "donateTokens(address)", +"086146d2": "getCurrentPeriod()", +"086282b9": "getIpfsHashToTokenId(string,string)", +"0862fdf3": "plantToken()", +"08637d20": "bountyPool()", +"08658523": "FraCoinAuct(string,uint256,uint256,address)", +"0865dadc": "setAdminContract(address,bool)", +"086610d2": "currPicHash()", +"086677de": "personalMaxcap()", +"08669aab": "withdrawInterest(uint256)", +"0866efcc": "FineArtCoin()", +"0867ecf3": "SimpleCustodian()", +"08681a74": "timeOfLastOwnerWithdrawal()", +"086914c3": "saleDateStart()", +"086949b7": "get7()", +"0869b302": "setBeneficiaryAddress(uint256,address)", +"0869db30": "emergencyWithdrawalActivated()", +"086a1b86": "walletForBounty()", +"086a9cd8": "AddMultipleItems(uint256,uint8)", +"086ac6d7": "setDeprecated(uint256)", +"086ae9e4": "getCallGasUsed(bytes32)", +"086af728": "moveUnsoldTokensToICO()", +"086b339e": "baseACL()", +"086b60dd": "contributionAmount(address)", +"086b8331": "requiredLockedForColorRegistration()", +"086ba261": "deleteIssuer(address)", +"086bdf2d": "nameArt(uint256,string)", +"086c2e09": "drawEther()", +"086c875b": "NewCloneToken(address,uint256)", +"086df89e": "withdrawPowhDivs()", +"086e4e52": "setCompte_23(string)", +"086fb1f8": "setFirstLogEntry()", +"086fd46b": "getAgreementsCount()", +"08700f0b": "MonaLease(string,uint256,uint256,address)", +"087038db": "switchLiquidity(bool)", +"0870607b": "addSubUser(address)", +"08707031": "setCryptoCupTokenContractAddress(address)", +"0870803d": "TermsOfUSe()", +"0870f1ff": "FundingProposalAdded(uint256,uint256,bool,uint256,address,uint256,uint256,uint256)", +"08714bfa": "TestContract()", +"0871968b": "isOverBalanceLimitHolder(address)", +"087205f0": "getTokenByID(uint256)", +"08722e78": "ethVerify()", +"0872c813": "closeBeta()", +"087380ca": "setSpecialAttack(uint256,uint8)", +"0874ba06": "player5Timestamp()", +"0875029e": "POXToken(address,address)", +"08752869": "buyXname(uint256,bytes32)", +"08753085": "MAT_TEAM_SUPPLY_LIMIT()", +"08761432": "onReceive(address,address,uint256,bytes)", +"08768c04": "setFundsCreditBondContract(address)", +"0876eb00": "ownerMigration(address)", +"08774410": "changeBridge(address)", +"08782469": "Akilos()", +"0878424f": "vota(bytes32,bytes32)", +"0878833d": "fourth_whitelistSupplier()", +"08789521": "revokeRole(address,string)", +"0878bc51": "getAttachesto(uint8)", +"087905c9": "getMiningEpoch()", +"08796ea0": "deployBTTSTokenContract(string,string,uint8,uint256,bool,bool)", +"087b230c": "getNextStageStartTime(int256)", +"087bb610": "USDXGE()", +"087c0055": "setIcoLockUntil(uint256)", +"087c7863": "testtop2()", +"087ca568": "setGalleryOnePrice(uint256)", +"087cbd40": "setStore(address)", +"087ccebe": "POOL_EDIT_3()", +"087ce940": "CPCEPrivateDeposit()", +"087da715": "removeStorage(string)", +"087ded64": "ChildChains()", +"087e055a": "getConfigBool(bytes)", +"087e5b5f": "ShiftContract()", +"087e926c": "setId()", +"087ee4c6": "random(uint8,uint256)", +"087f4ece": "limitTeamType()", +"087fc48b": "claimLoanToken()", +"088061bd": "momentSenderOf(uint256,uint256)", +"0880fb66": "transferOwnershipReceive()", +"0881acd3": "getWeiCollected()", +"0881fa0d": "shop()", +"08824fb7": "createCitizen(uint256,address)", +"088266b5": "isClearTime()", +"088322ef": "tradeWithHint(address,address,uint256,address,address,uint256,uint256,address,bytes)", +"0883cb04": "ERC20Batch(address,address)", +"0884e5d6": "RocketCoin()", +"08853525": "round6TokensRemaning()", +"08867fc2": "REFUND_POLL_DURATION()", +"088787a3": "getMultiLedgerValue(string,address,address)", +"0888ad41": "PFCCContribution()", +"08891c0a": "addVoter(address,address,bytes32)", +"088947a0": "universalexchangertoken()", +"088ae6e5": "releaseCreatedCount()", +"088b513e": "getAffiliateSender(bytes32)", +"088c20de": "IcxToken(uint256,address)", +"088cbf7e": "incrementRate()", +"088df612": "cancelTokenSale(uint256,bool)", +"088e3595": "GoldVein(string,string,uint256)", +"088ee7ec": "bountyTokenIssuedTotal()", +"088f11f3": "punksOfferedForSale(uint256)", +"088f5e58": "mergeCard(uint256,uint256)", +"088f87e0": "refundAlienDeposit(address)", +"088fc1a8": "movePendingToSetting(uint256)", +"08901fce": "expand(uint256[])", +"08908579": "KAL2Token()", +"0890e86e": "icoMinimumWei()", +"08910fe6": "getSpinResults(uint256,address,uint256)", +"08911cd5": "settokenDeployer(address)", +"0891f387": "getPaintedPixelsCountByAddress(address,address,uint32)", +"08927a67": "Jcoin()", +"089327de": "MyToken()", +"08933d11": "getJoinBlock(address)", +"08936ac0": "_removeContract(address,uint256)", +"08937f62": "transferChildToParent(uint256,address,uint256,address,uint256,bytes)", +"08941307": "getParametersHash(uint256[12])", +"0894183d": "priceof()", +"08946081": "setSalesFinished()", +"08949a76": "getNumberTwo()", +"0894bdf2": "setBehalfer(address)", +"0894c6c1": "queryDataInternal(address)", +"08956746": "erotixFundMultiplier()", +"08956ff8": "syncFunds()", +"089587cd": "getServer()", +"089620fc": "transferGrantJoinAddr(uint256,uint256)", +"08968426": "unfreezeDeposit(address,uint256)", +"0896937e": "MultiTransfer(address[],uint256[])", +"0897bf6f": "releasedRecordsCount()", +"089854fe": "LLG(uint256,string,string)", +"08988822": "RareAsset(bytes,uint256,bytes,bytes,address)", +"0898deeb": "op2()", +"0899146b": "lock(bytes32,address,uint256)", +"089922b5": "burnUnicorn(uint256)", +"08998acb": "contributionCapInWei()", +"08998c93": "activeBalance()", +"0899a99c": "canIssue()", +"089a15e4": "songTitle()", +"089aa819": "weiPerInitialHONG()", +"089ac36f": "distributeCards(uint256)", +"089ae962": "EOSGOLD()", +"089af913": "endNumber()", +"089b4d46": "totalCookieProduction()", +"089bb99a": "changeNameAndSymbol(string,string)", +"089bead1": "changeOuts(address,address)", +"089c22ad": "recoveryAfterPeriod()", +"089c9964": "setFriend(address)", +"089d1239": "Ssnc()", +"089d5200": "WILLTOKEN(uint256,string,uint8,string)", +"089d5c4a": "repr()", +"089dc937": "markAsReceived()", +"089e0ad0": "buildDSMap()", +"089ee2d6": "likeVoting(uint256)", +"089f7f85": "hasRisk(address,address,address,uint256,uint256)", +"089fa8b1": "trySolution(uint8[])", +"08a0f32f": "buyNow(uint256)", +"08a10ffe": "allRewPaid()", +"08a12b9a": "getBuyerFunded(address)", +"08a1360a": "publicSaleCapReached()", +"08a1b574": "getTokenProposalDetails()", +"08a2a386": "addProof(address,bytes32)", +"08a36a1c": "totalAmountWagered()", +"08a47243": "LCCToken()", +"08a47c32": "setVestingType(uint8)", +"08a4f072": "getParams(uint256)", +"08a60004": "LSDToken(uint256)", +"08a6077c": "tokenDistribution()", +"08a62d0a": "stopThrowing()", +"08a65591": "BUYGOODSWITHCRYPTODOTCOM()", +"08a6fb88": "setAdminsContract(address)", +"08a71396": "tokenRecovery(address)", +"08a80ff5": "transferAdminOwnership(address)", +"08a8ce1f": "setFactories(address[],bool)", +"08a91751": "getMyFairy()", +"08a9ba84": "setSourcePrice(address)", +"08a9dd29": "setEndEdit()", +"08a9ec7a": "startDApp(bytes32)", +"08aa3567": "BMPre_ICO()", +"08aa62c4": "industry()", +"08aa6a7e": "ContractorAdded(uint256,address,uint256)", +"08ab4097": "instruct_3()", +"08aba5aa": "setAccountBalance(uint256)", +"08abd7ff": "addArrayToWhitelist(address[])", +"08ac184b": "finishCurrentLimit()", +"08ac320e": "getAllGameAmount()", +"08ac5256": "maxValidators()", +"08ac782c": "lockTokens(uint256,uint256,bytes32)", +"08adf7b1": "transferFromMarketplace(address,address,uint256)", +"08ae8677": "pIDIndex_()", +"08aeda8b": "getEggPhaseList()", +"08af4d88": "allowAddress(address)", +"08af6ebc": "getEtherMonsterNumber()", +"08af723e": "calculateSha3(string)", +"08af84f0": "setAmountForPlayer(address,uint256)", +"08aff933": "hasConfirmed(uint256,address)", +"08b0e909": "initialExchangeRateForETH()", +"08b140dc": "Emergence()", +"08b1adf3": "RestoredInvestment(address,uint256)", +"08b27e3e": "transferAnyERC20Token(address)", +"08b309e3": "final_price()", +"08b3479c": "calcIOHash(bytes32[10])", +"08b370cf": "childExists(bytes32)", +"08b407da": "emergency(uint256,address)", +"08b40dc6": "CPGPEREGRINE()", +"08b4312b": "maximumRedeemable()", +"08b490f0": "EARLY_INVESTOR_AMOUNT()", +"08b4fa40": "GetClickPrice()", +"08b591a5": "revealOpen(uint256)", +"08b5a85a": "registerEndpoint(string)", +"08b6808c": "assignPartition(address,uint256,uint256)", +"08b6bb56": "playerTransactionList(address)", +"08b73b31": "setBurnAfterSoldAmount(uint256)", +"08b74d3c": "LogPolicyExpired(uint256)", +"08b7c13b": "getExists(bytes20)", +"08b7c837": "withdrawJackPot(address)", +"08b7fa31": "PriceFeed()", +"08b83b08": "appealOpen()", +"08b8d60f": "setAffiliateProgramAddress(address,address)", +"08ba7ee7": "setParties(address,address,address,address,address)", +"08bad193": "acceptSolution(uint256,uint256)", +"08bbd947": "globalTransferLock()", +"08bca566": "allocateTo(address,uint256)", +"08bd4d29": "ICO_CAP3()", +"08bd6e4e": "_activenessUpgrade(uint256,uint256)", +"08bddf32": "rescueAllRewards(address)", +"08bde7d4": "setMyContractt(address)", +"08be5bf3": "_doTransferFrom(address,address,uint256,bytes,bool)", +"08be8700": "increaseJackpot(uint256,uint256)", +"08bf2d0d": "getOrderBook(uint256,uint256)", +"08bfdd76": "refuseInvestment(address[])", +"08c01e5b": "Scicoins()", +"08c1090b": "getReferralAddress(bytes8)", +"08c2e0a6": "refundToBuyersIfSoftCapNotReached(uint256)", +"08c36eb0": "s30(bytes1)", +"08c372c3": "investSteps(uint256)", +"08c379a0": "Error(string)", +"08c3bf39": "upgradeCoinbase(address)", +"08c409bb": "numberOfCellsBought()", +"08c572b8": "PreIcoSupply()", +"08c5780a": "DU30()", +"08c7cf22": "Redeem(uint256,uint256,bool,address,uint256)", +"08c7e75c": "fechStageIndexByBlockNum(uint256)", +"08c87809": "maxFirstRoundTokenLimit()", +"08c8b880": "bonussale_EndDate()", +"08c8ba00": "BonusCalcPos()", +"08c977e7": "setMaxDexSize(uint256)", +"08c9ac21": "doubleBalances(address)", +"08caaa46": "UploadMusic(uint256,string,address,bool,uint256,uint256)", +"08cad05c": "bookerAddress()", +"08cb2e7e": "AJDToken()", +"08cb3b54": "GetUnpaid(uint256)", +"08cb4cb5": "releaseAmountPerDay()", +"08ce2136": "pricePreICO()", +"08ce9790": "updateOraclizeGas(uint256)", +"08d067bc": "indVestingDeposit()", +"08d0a7cf": "changeWhitelist(address)", +"08d0ca62": "TUINETWORK()", +"08d10c91": "TokenUnionToken()", +"08d233dc": "checkFunds()", +"08d299ba": "_setOutstandingPower(uint256)", +"08d317dd": "sellCrystal(uint256,uint256)", +"08d33e4c": "setAllocations(bytes32)", +"08d39380": "stageFourStart()", +"08d4073d": "startPreSale(uint256,uint256,uint256,uint256)", +"08d40e9c": "InvestorRefunded(address,uint256)", +"08d49d1f": "parseNewOrder(uint224,uint8,uint256[],uint256)", +"08d4ca92": "isImageOnSale(uint256)", +"08d4db14": "getBuyPrice(uint256)", +"08d50eb3": "_CAP()", +"08d605f2": "TrueToken()", +"08d68b97": "_getBlockCost(uint8,uint64,uint8)", +"08d6b4b9": "goldName()", +"08d7557a": "totalUsdReceived()", +"08d79718": "TilcoinStorage()", +"08d7aa9c": "houseTopUp()", +"08d7bd23": "toToken(uint256,uint256,uint256)", +"08d84b82": "ReleasedChanged(bool,bool)", +"08d90dc1": "BAHACAN(uint256,string,string)", +"08d9a77b": "addSaleWallet(address)", +"08daaf4a": "_premine()", +"08dbb18e": "getQuorumState(uint256)", +"08dc615c": "getWarrantyByIndex(uint256)", +"08dcf4f1": "setRollAddress(address)", +"08dd14fc": "defaultIcoStart()", +"08de68cc": "FootballerAccessControl()", +"08de795d": "testGetReceiptDetails(bytes)", +"08debacb": "ensureLoanBalance(uint256)", +"08def058": "mintme()", +"08df8602": "Futarchy()", +"08dfef4c": "upsertAll(address[],uint256,bool,bool,uint256)", +"08e05b85": "instantTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"08e12ad3": "addressOfERC20OldToken()", +"08e130c9": "setStables(address)", +"08e1438c": "everToken()", +"08e150db": "LogInvest(address,uint256)", +"08e2287c": "getPlayerVaultsHelper(uint256)", +"08e2cd00": "testFailTransferBeforeFinalize()", +"08e3399f": "hashes(address)", +"08e34e7f": "endBounty()", +"08e46cea": "processAndCheckParam(address,string,uint8[],bytes32[],bytes32[])", +"08e484a8": "doEscape(uint32,int256)", +"08e496ea": "vaultPercentOfTotal()", +"08e6b41c": "claimLegacy()", +"08e8000c": "transferSecurityDeposit(address,address)", +"08e88aa1": "newPackage(address,uint256[])", +"08e88ab9": "giveMultipleItems(address,uint256[])", +"08e8ac38": "hexStrToBytes(string)", +"08e929b1": "YunJiaMiToken()", +"08e93d0a": "getAllAccounts()", +"08e9988b": "airDropAmount()", +"08e9daa5": "countries(uint256)", +"08e9f758": "GenericCrowdsale(address,address,address)", +"08eb4e98": "cancel(address[5],uint256[6],uint256)", +"08ebbfc4": "AdminAccessTransferred(address,address)", +"08ebd3d3": "KBKToken()", +"08ec17a2": "testDeductCoin()", +"08ec6164": "colonyMultiSig()", +"08ec651f": "createDeklaBidAuction(uint256,uint256,uint16)", +"08ed0236": "setAirdropStatus(bool)", +"08ed8d16": "setTesting(bool)", +"08ed8e0c": "minimumBidAllowed()", +"08edf505": "claimH1()", +"08ee33af": "getRdFee()", +"08ee7325": "tokensPerCentsWeekOne()", +"08ee76a7": "dickbutt()", +"08ef59ff": "setBonusSystem(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"08efde8b": "DXYToken()", +"08f0b1b0": "PRE_WIN_MULTIPLE_PER()", +"08f10999": "beatGame()", +"08f12470": "getLockById(uint256)", +"08f14dd8": "ComputeMyDivs()", +"08f20630": "getWalletAddress(string)", +"08f235ec": "getDefaultPayment()", +"08f2e24c": "setFreelancerJobIndex(address,uint256,address,uint256)", +"08f2e704": "MBCash()", +"08f46b0a": "LeapCoin()", +"08f48256": "StorageEnabled(address)", +"08f53f44": "setAllowanceAddress(address)", +"08f68b90": "SetsecondTTax(uint256)", +"08f6e3b4": "BOUNTY_EXCHANGE_RATE()", +"08f7349a": "_addDistribution(uint256)", +"08f75d17": "move_reveal(bytes32,uint8)", +"08f7d570": "incrementalInverse(uint256,uint256,uint256,uint256)", +"08f9732b": "ForwarderTarget()", +"08f978c6": "migrationInfo()", +"08fa0e92": "canTrade(address[3],uint256[4],bytes)", +"08fa3b51": "approveCorrespondent(uint256)", +"08fae7db": "ICO_PHASE1_BONUS_PERCENTAGE()", +"08fb8a88": "changeServer(address)", +"08fc299b": "presaleMaxSupply()", +"08fc9ec8": "chunk6IsAdded()", +"08fcec89": "setNoteReportingGasPrice(bool)", +"08fd866c": "deleteAllCoverImages()", +"08fe23ca": "sq(uint256)", +"08ff597a": "tier_cap_3()", +"08ffce24": "predecessorAddress()", +"090015d8": "CONFIG_MAX_VALUE()", +"09004eb1": "getCard(uint8)", +"09007804": "getEOSKeyFor(address,address)", +"0900f010": "upgrade(address)", +"09010e53": "changeTransfer(bool)", +"09019ca0": "enter(bytes32,bytes8,uint32)", +"0901a3f1": "currentAllocations(uint256)", +"0902b25d": "maxEther()", +"0902c6d7": "testToUint(bytes)", +"0902f1ac": "getReserves()", +"0902f72f": "addOrder(bytes32)", +"090399fd": "announceWinner(address,uint256)", +"0904603e": "FTFNExchangeToken()", +"0904cb57": "gameStarted(uint256)", +"0905aa5c": "withdrawnTokens()", +"0905f560": "emergencyMode()", +"090637a1": "GetPart(bytes,uint256)", +"0908178f": "NoFeePonzi()", +"09081c51": "TCEToken()", +"0909338a": "emitHeartBeat(bytes32,int256,int256)", +"09094f7a": "ethWallet()", +"0909981a": "Created(address,address,bytes)", +"0909e8f7": "SafeModeActivated(address)", +"090a1f92": "RapidChain()", +"090b78e9": "setTrustedTokenHandler(address)", +"090b8d18": "SPIDER_BASE_REQ()", +"090bb93f": "mtcRate()", +"090bf3b7": "left29(uint256)", +"090c01d0": "editLimits(uint256,uint256)", +"090cebff": "unDelegate(uint8,bytes32,bytes32)", +"090cfb04": "DiamondscoinToken()", +"090d23b9": "setBank(address)", +"090d5386": "GDOAdv(uint256,string,string)", +"090d94cc": "WithdrawalsOpen(address)", +"090d993a": "updateParticipantCapTier1(uint256)", +"090e5465": "trainFee()", +"090e871f": "createNewSubtoken(uint256,address,uint256)", +"090ea6f3": "setProxyManagementAddress(address)", +"090f4465": "payoutDate()", +"090f92f7": "kittensRemainingForSale()", +"0910c715": "bringKydyHome(uint256)", +"091157cb": "getSerializedEmployee(address)", +"0911bdf7": "cancelTokenTransaction(address)", +"0911def1": "QoppaCoin()", +"0912d306": "TokensReceived(uint256,address,uint256)", +"0912fabd": "canWrite(address,bytes32)", +"09130ba1": "getEtherToBuy(uint256,uint256,bool)", +"09130f5d": "getAllMyTokensForAllEtherOnContract()", +"091356c5": "hasPrestige(address)", +"0913fc3a": "leekStealPot_()", +"09146664": "_burn(string,address)", +"0914a363": "cofoundersSupply()", +"09151f2d": "checkTotalPrizesWaiting()", +"09153f57": "unsoldVestingAddress()", +"0915db6d": "End9()", +"091621bd": "getHeadWalletList()", +"091691c5": "AgriChainNextData()", +"0916a263": "showLockTimes(address,address)", +"091734e0": "ROBEthExchangeRate()", +"0917f827": "JoannaToken()", +"09194fe8": "hasSponsor(uint32,int256)", +"091a79b2": "getVoteAndTime(uint256,uint256)", +"091a7a4b": "OperatorAdded(address,bool)", +"091ac806": "getGuestNotesInfo(bytes32)", +"091b3e6d": "transferMilestone()", +"091ba3da": "storeDataAndValue(bytes)", +"091cde0b": "DisbursementHandler(address)", +"091d2788": "GAS_LIMIT()", +"091d709b": "createVisa(address,uint256,bytes32,uint256)", +"091dbbd7": "currentEventId()", +"091dbc20": "ContractUpdate(address,address,uint256,uint256,uint256)", +"091dbfd2": "enterBidForPunk(uint256)", +"091dffca": "withdrawFromVault()", +"091e3f60": "getSponsorshipsAmounts(address,uint256[])", +"091e97f9": "sellnode(uint256)", +"091e9a60": "buyCoin()", +"091eea8f": "withdrawChildDao()", +"091f2f11": "getChildren(bytes32,bytes32)", +"0920829b": "adminGetPastShopFund()", +"0920d32c": "CardsRaffle()", +"0920d9a0": "getNumTokensForContributorInternal(uint256,uint256,uint8)", +"09214a07": "switchStage()", +"09218e91": "position()", +"0922e596": "paymentController(address,uint256)", +"09231602": "setGasPriceLimit(uint256)", +"09236161": "Craftmelon()", +"09241200": "wasSuccessful()", +"0924da5c": "resetHealthAndManaTimestamp(uint256)", +"0924fbba": "Imdex()", +"092501a0": "setCommission(uint32)", +"092518a7": "SecurityDeposit(address,address,uint256)", +"09260db7": "cut(uint256)", +"092626a7": "Bitcoin_address()", +"09262f71": "is_signed(address,address,bytes32)", +"09265805": "freeGiveProduce(uint256,string)", +"09267785": "notarizeTwo(bytes,bytes)", +"0926b32a": "getTokenSizes(uint256)", +"0926e6a2": "joinTeam(uint256)", +"09270ef4": "set_address(address)", +"09276ea4": "notifier()", +"092854e5": "cry()", +"092a2e37": "multiAccessAddOwnerD(address,address)", +"092a5cce": "destroyContract()", +"092a5fcd": "Devolver_Tickets(uint256)", +"092ac9e5": "approveByB(uint256,string)", +"092b25e9": "setOwner(string,address)", +"092c506e": "maxSGTSupply()", +"092d3de4": "closeAnyGame(uint256)", +"092dde45": "BteCoinToken()", +"092ecf1c": "raffleRewardAmount()", +"092f3623": "setBlockDotBlockHash(uint256,bytes32)", +"092f9d79": "DONATION_WALLET()", +"092fe5c5": "sendFirst(address,uint256)", +"093077ee": "calcRewardPool(uint256,uint256)", +"0930907b": "zeroAddress()", +"0930f27b": "QVT(address)", +"0930f6db": "getFunderContribution(address)", +"09310c61": "MinutemanToken()", +"0931ce67": "getAnimalsCount()", +"09320100": "addAllCandidates()", +"0932c3c6": "setPriceLocked(bool)", +"093376fe": "getOrders(address)", +"09339f2e": "lastSignedTimestamp()", +"0933a670": "offerOff(uint256)", +"0933b939": "renewMembership()", +"0933e3a7": "setRandomContract(address)", +"09357344": "setBuyExchangeRate(uint256)", +"09358584": "stageSupply()", +"0935fced": "Bhinneka(address)", +"09362a6a": "changeOwnerTwo(address)", +"09366ed2": "downdoot(uint256)", +"0937be1a": "createFixedPeriodVpfFactory(string,bytes32,uint256,int256[],uint256,uint256,uint256)", +"0937e68a": "paymentCount()", +"0937fb36": "getEventOutcome(uint256,uint256)", +"09386cc6": "leggiMsg(uint256)", +"0938be6e": "RockScissorPaper(address)", +"09390af1": "getPercentageAmount(uint256,uint256)", +"0939e863": "shareholder()", +"0939f6f4": "ContractFunded(address,uint256)", +"093a86d3": "gateways()", +"093ac512": "MINCAP_TOKENS_ICO()", +"093ae918": "ETH_EURCENT()", +"093c16db": "getActualTierIndex()", +"093c4ee6": "getChannelBalance(bytes32)", +"093c5284": "migrateFrom()", +"093d11a1": "getLocksAmount(address,uint256)", +"093d5fd4": "getOperationsLength()", +"093db6ff": "fetchOrderByIdWithWithPayer(string)", +"093e9633": "getNewDefaultPrice(address)", +"093f5198": "make(address,address,uint128,uint128)", +"09405164": "getOpenCandidates()", +"094111be": "FCMCOIN(uint256,string,string)", +"09412b53": "delBot(address,address)", +"09417110": "signatureBurnStatus(bytes32)", +"0942adbd": "getPetCardSeries(uint64)", +"09442d66": "getCurrentInvestments()", +"094455c4": "addProduct(string,uint256,uint256,uint256)", +"094493b9": "getAPAddresses()", +"0944e35d": "TimedCrowdsale(uint256,uint256)", +"09453628": "TokenERC20(uint256,uint8,string,string)", +"0945f04f": "completeWhiteList(address[])", +"09478fb7": "_totalEtherDonated()", +"09491490": "smsVerifiedBonusBps()", +"0949fcfe": "setInviteCollateralizer(address)", +"094b94c7": "BROKER_RESERVE_SUPPLY()", +"094c2919": "performWrite2()", +"094c491b": "rewardFiboken()", +"094c6f98": "TokenSaleFail()", +"094c8bee": "unlockSales()", +"094ca5f2": "RemoveAuthority(address)", +"094cd5ee": "deletePost(uint256)", +"094d583b": "_newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"094db54b": "private_setMaxMultiRolls(uint256)", +"094fb864": "getCampaignBudgetById(bytes32)", +"09508ce4": "getReportedMatches()", +"0950e4ad": "_getNextPrice(uint256)", +"0950fe78": "setSoftCapCHF(uint256)", +"09518753": "calculateTokenBuyPrice(uint256)", +"0951b3ac": "receivedDividends()", +"095228b5": "unfrozenType(string)", +"09522d7f": "reservedAllocation()", +"0952c504": "requestOwnershipTransfer(address)", +"09533303": "setWhitelistedUser(address)", +"095408a7": "addCustomSecurityToken(string,string,address,address,string,bytes32)", +"09541d48": "disqualifyBid(address)", +"0954896e": "MultivestUnset(address)", +"09553b28": "addressDev()", +"0955ae99": "getAds()", +"09574810": "getOperationsNumber()", +"0957c807": "setToForking()", +"0957de9a": "unsoldTokensWallet()", +"0958ab50": "isInvestAllowed()", +"0958f83d": "registerName(bytes32,address,uint16)", +"09598dfd": "finalizeBet(uint8)", +"0959bd1a": "redeem(uint256,address[])", +"095a9983": "ETUex()", +"095b697b": "setClearingPriceCode(bytes)", +"095bbe59": "findContractByModText(string)", +"095bcdb6": "transfer(address,uint256,uint256)", +"095c075e": "guessAnswer(uint256)", +"095cf5c6": "setTeam(address)", +"095d5a70": "approveRound(address)", +"095daeb1": "getVoterProposal(address,uint256)", +"095dc5cf": "removeVIP(address)", +"095e360e": "getMiningWarRound()", +"095e596f": "AccountVoid(address)", +"095e89ac": "setTranslatorRate(uint256)", +"095ea7b3": "approve(address,uint256)", +"095f2f16": "tech()", +"0960002f": "registerAff()", +"09603109": "Vote_Customly(address)", +"09607679": "changeTest(uint256)", +"0960db7c": "finalizeExit(bytes32)", +"096191dd": "executeBeneficiary(uint256)", +"0962f869": "_getList()", +"0963415c": "getSPBalance(address)", +"09639373": "createZombie(string,uint256)", +"0963b12d": "tokenChanged(address,uint256)", +"0963d4b7": "mintMonster(uint32,address,string)", +"096437bc": "TokenTes()", +"09648181": "refundDeadlineTime()", +"09648a9d": "getState(bytes32)", +"0965b0b7": "fechAllForCandidateByStage(uint256)", +"0965be64": "managerETHbonus()", +"0965bf7d": "processProposals()", +"0965c4b2": "collectedNDAO()", +"0965f6ac": "superPrivilegeCost()", +"0965fd36": "LaxmiCoin(uint256,string,uint8,string)", +"09660513": "getGameById(uint256)", +"09663cef": "getTotalPetCardSeries()", +"09671f79": "tokensCount(uint256)", +"0967417b": "getExpectedRate(uint256)", +"0967cff0": "setCrowdsaleStartTime(uint256)", +"096835e3": "NewOraclizeQuery(string)", +"09688000": "makePurchaseForClient(address,address,uint32)", +"0968f264": "withdraw(bytes)", +"096908f9": "_adeptToken()", +"09696f1a": "tokenHardCapReached()", +"09699581": "setPI_edit_13(string)", +"0969a71f": "POCG()", +"096a113d": "getCipher(uint256,address)", +"096a3778": "placeBet(bool)", +"096a8ab7": "setTransactionFee(uint256)", +"096aadce": "ownershipTransferCounter()", +"096ac348": "guagua()", +"096b4039": "bitlumensDelivered()", +"096c0c27": "amountOfLovers()", +"096c45b1": "setGasUsed(uint256)", +"096c9d6f": "getStartHourglass(bytes32)", +"096cf33f": "onlyDeves()", +"096d740b": "stopWork()", +"096e27d9": "isBeneficiary(address,address)", +"096e47ca": "SetConfirmRound(address,uint8,bool)", +"096f4090": "minecoin()", +"096f4a49": "CrowdSaleFinished(address,string)", +"097284b2": "maxSupply_()", +"09738d25": "preSaleHardCap()", +"09745c5b": "ShariqCoin()", +"0974f94c": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256)", +"0975c338": "DKK_Omnidollar()", +"097694e1": "getFileByIndex(uint256)", +"0976e9a7": "catchMonster(uint256,uint32,string)", +"09772f8f": "getMembersCount()", +"097788d7": "ADPOWER()", +"09779838": "changeKeeper(address)", +"09787a2c": "newComment(uint256,string)", +"09798e2f": "currentpreicobonus()", +"09799c01": "stopDate()", +"09799ead": "recoveryToString(uint256)", +"0979f7f2": "wagerCardForAmount(address,uint256)", +"097b36dd": "createUser(bytes32,string)", +"097b4eea": "addToReferrals(address,address)", +"097b557f": "cancelAuction(uint64)", +"097b94d1": "mediaTokensInitialSupply(address)", +"097bcf7b": "getEtherOrdersLength()", +"097c3ead": "AddGift(string,uint256,uint32[],uint256[])", +"097cf31c": "MengToken()", +"097d44a8": "setNFTAddress(address,uint256)", +"097d5155": "holdTime()", +"097d8376": "request(address,bytes,bytes)", +"097dced0": "updateLawyer(uint256,address)", +"097dfa2f": "placePurchaseOrder(bytes32)", +"097e8fad": "getTheInvestor()", +"097f1192": "Miners()", +"0980150f": "payInternal(address,address,uint256,address)", +"09801707": "DOWN_winRate()", +"09821095": "setDailyVolumeCap(uint256)", +"09824a80": "registerToken(address)", +"09828a47": "promoPause()", +"098300bb": "goldDecimals()", +"09838bd9": "maxTokensRaised()", +"0984f0c1": "sendMessage(bytes,bytes,bytes,bytes)", +"09850495": "minusFreezeEndTime(uint256,uint256)", +"09857955": "recordRoundProfit(uint256,uint256)", +"09861b81": "flooredSub(uint256,uint256)", +"0986e647": "getLength(uint256)", +"09879962": "namehash(string)", +"09886649": "transfer(address,string)", +"0988ca8c": "checkRole(address,string)", +"09894422": "TokensIssuedOwner(address,uint256,bool)", +"098956a8": "getOldRecordInHistoryRecord(uint256)", +"098a7259": "addAfterValidId(address,uint32,uint128,uint128,uint32)", +"098a7321": "firstDueDate()", +"098ab6a1": "snapshotCount()", +"098ae858": "ReverseConfirmed(string,address)", +"098b939a": "isEnoughConfirmed(bytes,uint256)", +"098bf5de": "requestTransferOfETH(address,uint256)", +"098c83fe": "notContractPred(address,address[],uint256)", +"098dbf5c": "executeTransfer(address,uint256,address)", +"098deeb5": "startScoring()", +"098e349a": "currentRoundParameters()", +"098e652b": "batchCreateAsset(uint8[],uint256[],uint256[],uint256[],address[])", +"098e8fc4": "setOffer(address,uint256,uint256)", +"098eb040": "contributeFiat(address,uint256)", +"098ed807": "productAccountsLength()", +"098f076e": "isRejected(uint256)", +"098fb45c": "setFeeDistributionsAndStatusThresholds()", +"098fc010": "LylToken(uint256,string,string)", +"098fe7da": "MYSLF()", +"099015d9": "totalBurnedOfType(uint256)", +"09904c00": "depositWallet()", +"09905bdb": "priceForVerificationInWei()", +"0991bb09": "makeSperm(address)", +"0991f5a6": "closingTimeForCloning()", +"099224e9": "TrexToken()", +"09929628": "Contractbalance()", +"0992e4c3": "contributorMaxCap(address,uint256)", +"09931e00": "QWoodDAOToken(uint256,uint256,uint256)", +"09936cd6": "FLescoin(address,address)", +"0993e87f": "setSellingPrice(uint256)", +"0994257a": "BitcoinSamaritanSupply()", +"0994a0a0": "DSTokenTest()", +"09957e69": "newSale(bytes,uint256,uint256)", +"099583de": "PRESALE_TOKEN_IN_WEI()", +"09959439": "check_rhash(bytes32,bytes32)", +"09959a95": "JCWCToken(uint256,string,string)", +"0995efb5": "isChainCode(uint32)", +"0996a625": "MSPPlaceholderMock(address,address,address,address)", +"0996b4cc": "BitChordCrowdsale(address)", +"0996e0e5": "periodITO_mainCapInWei()", +"09987f3c": "checkAllRewPaid()", +"09989c8b": "getCfiEstimation(address)", +"09990611": "weiPerBtc()", +"09999404": "subLoan(address,uint256)", +"099a019d": "getBid()", +"099a5ab8": "lastBlock_v2Hash_uint256()", +"099ae6bc": "flowerAuction()", +"099aea0a": "isWorking()", +"099b9531": "contractownsthismanyP3D()", +"099ba954": "eSwitchToken()", +"099c00b9": "GWCoin_v3(address,address)", +"099c4c7e": "setCaps(address[],uint256[])", +"099c7ab2": "freePeriodEndTime()", +"099dccc8": "getTeamMemberAddres()", +"099dde07": "maxTarget()", +"099e0a26": "listPairs()", +"099e4133": "backend()", +"099f40a9": "throwsWhenFinalizingNotEndedSale()", +"09a00fb1": "IcoToken()", +"09a02562": "getCensored(address,uint256)", +"09a0307d": "tipLockCheck(bytes32)", +"09a0cfe4": "changeChampsName(uint256,string,address)", +"09a14f2e": "linkSelf()", +"09a2b4ad": "asmSymbol(address)", +"09a38873": "purchaseTokens(uint256,address,uint256)", +"09a38f26": "feed100AndPay(uint256)", +"09a39777": "projectWorkStarted()", +"09a399a7": "personAdd(string,int256,int256,string)", +"09a3beef": "setTokenURI(string,uint256)", +"09a44334": "changeElection(uint256,uint256,uint256)", +"09a547bd": "approveAndCall(address,uint256,bytes,string)", +"09a555c0": "setIcoStart(uint256,uint256)", +"09a55b65": "votePreProposal(uint256)", +"09a69f57": "getRewardAmount()", +"09a71a00": "addTask(bytes,uint256,uint256,address,uint256,uint256,uint256)", +"09a71ffb": "feesProfitDeposit()", +"09a7dbb4": "CollectReturns()", +"09a7dd17": "PRE_ICO_SINCE()", +"09a8d3f5": "oneEth()", +"09a94a3d": "_initiateClaim(string,bytes32)", +"09a97b6f": "_getCategoryIdx(uint256)", +"09aa3dcf": "maxTokenPurchase()", +"09aa69c2": "cancelFlight()", +"09aa7b67": "_mint(address)", +"09ab5008": "ISeeVoiceToken()", +"09ab8a03": "privateEndTime()", +"09ab8bba": "delegateAllowance(address,address)", +"09aba9ab": "ETHWalletCreated(address)", +"09ac3b00": "remainderWallet()", +"09ad1c47": "getUserPayoutBalance(address)", +"09ad8eef": "TBSTK1()", +"09ad8f7e": "getNumChildOperation(bytes32,uint8)", +"09ad9dd3": "BASE_PRICE_IN_WEI()", +"09ae2943": "stage_3_TokensSold()", +"09ae9452": "PreICOProxyBuyer(address,uint256,uint256,uint256,uint256)", +"09aea85f": "getMaxTradeAmount()", +"09af014f": "refillBalance()", +"09af4b1e": "IoexCoin()", +"09af8ffe": "guessAnswer(bytes32)", +"09b0245f": "Long()", +"09b0ce3c": "DCVToken()", +"09b13db0": "fundraisingReservation()", +"09b17085": "___proxyOwner()", +"09b22a4d": "allowAirdrop()", +"09b230cd": "getPriceSpeedTokenBlock()", +"09b258f7": "exchangeRateIco()", +"09b2996a": "originalRate()", +"09b30ed5": "afterExecute(address)", +"09b481b0": "LIABILITIES()", +"09b565f3": "updateTicketSum(address,uint256)", +"09b5e4ad": "ProxyBuy(bytes32,address,uint256)", +"09b637bc": "_founder()", +"09b70ad0": "sellGenes(uint256,uint256)", +"09b7c704": "addIdArrayItem(address,uint256,string,string,address)", +"09b86f84": "getPonziFriend(address)", +"09b8e3cc": "ValidateExec(string)", +"09b8f77a": "proposedRecoveryKey()", +"09ba4a4a": "registerEmail(string)", +"09bb03b4": "isChemistry()", +"09bb317d": "FredToken()", +"09bb7162": "createGateway()", +"09bb9267": "getDev()", +"09bb9b04": "isEtherSpaceBattle()", +"09bc1812": "setVerificationPeriod(uint256)", +"09bc4096": "developersTokensPercent()", +"09bc4933": "freezeof(address)", +"09bc90a4": "PerlToken()", +"09bd1d41": "testF1(uint256)", +"09bd3894": "SendTokens(address,uint256)", +"09bd5a60": "hash()", +"09bd98a4": "getNumAds()", +"09beb01b": "feed50(uint256)", +"09bf284c": "unanchor()", +"09bf6e42": "futureSaleVault()", +"09c0f771": "getScoringMask(bytes8)", +"09c110a1": "gzeFromEth(uint256,uint256)", +"09c12ccb": "getNextPaymentDate()", +"09c1a4b9": "totalIssuanceData()", +"09c25e6c": "FinishedExporting()", +"09c2b7f8": "MINCONTRIBUTION()", +"09c38bc8": "isAuctionManager()", +"09c4a273": "isVetted(address)", +"09c4bb2b": "releaseTime(uint256)", +"09c4f8be": "GetContractStateTerminatedOK()", +"09c51b4e": "assertSaneHTLC(uint256,int256)", +"09c5eabe": "execute(bytes)", +"09c5eb76": "getBalanceOfLogicContract()", +"09c62a1b": "ONECToken()", +"09c62c5c": "vanbexTeamAddress()", +"09c71690": "tokenFallbackBuyer(address,uint256,address)", +"09c72b26": "bonusInPhase6()", +"09c76571": "operationAt(uint256)", +"09c8d173": "claim(bytes32,uint8,bytes32,bytes32)", +"09c922e6": "setOracleGasLimit(uint256)", +"09c95e10": "isPlayer(address)", +"09c975df": "getCallContractAddress(bytes32)", +"09c99d10": "_stalemateTransfer()", +"09ca4b76": "getCurrentPriceAuction(uint32)", +"09ca60c1": "createLambo(uint256,address,uint64)", +"09cb22d5": "betFeePerMil()", +"09cc4f95": "increaseTS(uint256)", +"09cc5551": "topUp(string)", +"09ce4a91": "RLCPerSATOSHI()", +"09ceb7be": "icoAmountBonus2()", +"09cf0329": "StarterKit(address,address,address,address,address)", +"09cf8766": "grantPrivatePurchaserToken()", +"09d02b74": "getRamdomness()", +"09d03d90": "FounderUnlock(address,uint256)", +"09d0b12e": "ViewMyTokens(address)", +"09d0bb66": "NeodiumNetwork()", +"09d11c1d": "ZhangToken()", +"09d2100d": "ADEToken(uint256,uint256)", +"09d256fe": "getPresaleRate()", +"09d2d0b9": "setServiceAccount(address,bool)", +"09d31d8d": "addPerson(bytes32,address)", +"09d33f1d": "addRequest(address,uint256)", +"09d37704": "pushIssuer(address)", +"09d3cbda": "setUpdateDelay(uint256)", +"09d451ab": "calculateEthersAmount(uint256)", +"09d45f1d": "_deleteString(bytes32)", +"09d46057": "IcoStageStarted(uint256)", +"09d54b21": "checkAddressTransfer(address,uint256,address)", +"09d60069": "trade(int256,int256)", +"09d60db1": "claimedTokensWallet()", +"09d64774": "DevForceOpen()", +"09d6796f": "our_transferFrom(address,address,uint256)", +"09d6b0a3": "transfer(address,uint256[],uint256[])", +"09d6d33a": "NewCup(address,bytes32)", +"09d74cc5": "createJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"09d77ad3": "Next(bool)", +"09d78e32": "ETCLocking(address,address)", +"09d78fba": "assertEq4(bytes4,bytes4)", +"09d7ab7a": "convertGene(uint8[7])", +"09d7e9ca": "decodedAsset()", +"09d84fc4": "bindingSmartIdentity(bytes32)", +"09d87ab5": "isAddressAuthorized(address,address)", +"09d89784": "TradeNetCoin()", +"09d8da2e": "isLock()", +"09d929d6": "releaseLockFounders1()", +"09d9f95e": "WinnerTakesAll()", +"09da52a2": "greet(address,string)", +"09da56c1": "getBoardBalance(uint256)", +"09db5d29": "notUsedToken()", +"09dba083": "GC()", +"09dc66af": "GT(uint256,string,string)", +"09dd0e81": "getBlockchainHead()", +"09dd1761": "attachPreOrder(address)", +"09dd7b3e": "paySize()", +"09ddc583": "getPropertyData(uint16)", +"09de4148": "getWinPercent()", +"09de92d0": "RENEE()", +"09df06b7": "TIE()", +"09df3248": "publicGetParticipants(uint256)", +"09df5060": "logoutUser(address)", +"09dfdc71": "currentPyramidBalanceApproximately()", +"09dfe330": "_checkItemId(uint256)", +"09e0a77c": "totalIco()", +"09e0a9eb": "batchBid(uint256[])", +"09e1a1f7": "PresalePurchase(address,address,uint256)", +"09e1c751": "CDPer()", +"09e24516": "ZepCloud()", +"09e25141": "bidInAuction()", +"09e2f193": "addVerificatorAddress(address)", +"09e419d1": "withdrawLongTermFoundationBudget()", +"09e587a5": "homicide()", +"09e6a0ed": "EASTADScredits()", +"09e76161": "getVideoGameDetails(uint256)", +"09e785e1": "payoutInterval()", +"09e7d837": "reachGoal()", +"09e7ec7a": "getInt256Max()", +"09e8046a": "fullfillAdvisors()", +"09e91cfb": "tokenUnits()", +"09e979e6": "getSquarePriceAuction()", +"09e9976d": "MetadataUpdated(address,uint256,string)", +"09e9c325": "createBooking(uint128,uint128,uint32,uint32,uint256,address)", +"09e9d7e2": "removeCandidate(uint256)", +"09e9e85b": "readAllUsers()", +"09ea63e3": "recoverPreSigned(bytes,bytes4,address,uint256,bytes,uint256,uint256)", +"09ebcd64": "getLockedUserInfo(address,address)", +"09ec6b6b": "supplyInterestRate()", +"09ec6cc7": "cancelTrade(uint256)", +"09ece618": "initiatable(bytes32)", +"09ecf413": "updateFoundAddress(address)", +"09ed1782": "withdrawCredits(uint256)", +"09ed4607": "clone()", +"09ed5022": "checkFileNamespace(string,bytes32)", +"09ed5673": "getScouponTransferCost()", +"09edf3ca": "x_Header()", +"09ee3e2a": "Global_Currency_Reserve()", +"09ee75a2": "documentIt(uint128,uint64,bytes32[],string,string,string)", +"09eecdd7": "isValidBet(uint8,uint256,uint256)", +"09eef43e": "hasVoted(address)", +"09ef7085": "is_name_used(bytes32)", +"09efcb8d": "fiatDeposits()", +"09f03da2": "getCurrentTimeRate()", +"09f0fe0d": "lamdenTau()", +"09f14a20": "addBuyerSig(string,string)", +"09f14e7e": "ownerSetExchangeRateInWei(uint256)", +"09f28927": "Crowdsale(address,address,address,address,uint256,uint256,uint256)", +"09f29d1b": "retrieveTokens(uint256)", +"09f2b6a9": "TokenBCC(uint256,string,string)", +"09f30eac": "unitTestSetRewardLevels()", +"09f32957": "lastCreditorPayedOut()", +"09f3ad26": "calcBonus(uint256)", +"09f41822": "batchVoteByIndex(uint256,address[],uint256[])", +"09f4614d": "product1()", +"09f4fc61": "addReferral(address,uint256)", +"09f580b0": "Bolivar()", +"09f5ca99": "GLBToken()", +"09f64d2e": "isIcoPaused()", +"09f68e96": "setPrivateSale(address)", +"09f6c607": "currentEthBlock()", +"09f70d2e": "getRequestHash(bytes,address[],uint256)", +"09f767e0": "deathFactor_iv()", +"09f80dd9": "feerate()", +"09f8477a": "getRandom(uint128,uint256)", +"09f8cc58": "upgradeAgentLocked()", +"09f90127": "fallback(address,bytes)", +"09f92a6a": "wordSize(string)", +"09f9630f": "BETHToken(address)", +"09f9b3c5": "getGrantBalance()", +"09fa6f96": "wpTokensBaskets()", +"09fa90b3": "globalLocked()", +"09fb1668": "changeMaxBetCoinDice(uint256)", +"09fba360": "alreadyHarvestedTokens()", +"09fbb22c": "decreaseGlobalInterestAmount(uint256)", +"09fc1ae0": "getCallTable(uint256)", +"09fc3c53": "burnWarrior(uint256)", +"09fc7046": "bytesToBytes2(bytes)", +"09fc8f6d": "isTokenUpgraded(bytes32)", +"09fc93c1": "getBalanceOfWei(address)", +"09fca951": "accumulated_from()", +"09fcda87": "PayPerView()", +"09fd018e": "setClaimer(uint256,address,uint256)", +"09fd8212": "isInWhitelist(address)", +"09fe5fbd": "CoinPaws()", +"09fe89c8": "privateBuyer()", +"09ff453a": "PFS()", +"09ff4b75": "Redenom()", +"09fffec0": "transferToAdmin(uint256)", +"0a0078bc": "unSet(address,address)", +"0a00840c": "challenge_period()", +"0a0092bf": "LakersvsRockets()", +"0a00ee41": "INNOToken()", +"0a0155e5": "passed(uint256)", +"0a01ad4d": "processWinner()", +"0a01ae41": "Supernova()", +"0a01bc2f": "WhitelistAddressisListed(address)", +"0a02037b": "girlOps()", +"0a0209d0": "soldTokensOnPreIco()", +"0a027825": "currentUnit()", +"0a0279f8": "determineDiscountTranche()", +"0a0313a9": "iterateValid(uint256)", +"0a0352d5": "_getOwnerNFTCount(address)", +"0a04dde8": "ThanosXToken(uint256,string,uint8,string)", +"0a0513da": "IEOEnded()", +"0a06f35e": "setBonusesForAmounts(uint128[],uint32[])", +"0a075a32": "spawnNewZeroCard()", +"0a07eadd": "systemWalletsMint(uint256)", +"0a07f3d8": "contains(uint8,uint8)", +"0a084473": "tokenPerEth()", +"0a08de75": "isContruibuteOpen()", +"0a0900a1": "buyXname(bytes32,uint256,bytes32)", +"0a09284a": "endsAt()", +"0a09815c": "presaleTokens()", +"0a0a2876": "killVesting()", +"0a0a876f": "stopSetPrice()", +"0a0b3139": "testFailOnFailedTransfer()", +"0a0c5e0d": "addSignature(string,string)", +"0a0c75aa": "setEmployeeSalary(uint256,uint256)", +"0a0cd8c8": "setupDone()", +"0a0d5509": "computeTimeBonus(uint256)", +"0a0e3c76": "nextMintFeeProp(uint256)", +"0a0e7883": "nDelegations(bytes32)", +"0a0e78e3": "addNOSPackage(uint256,uint256)", +"0a0f8168": "ceoAddress()", +"0a0fac2b": "isProxyOrSender(address)", +"0a0fb66b": "transferPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", +"0a10376f": "newReplyEvent(uint256,uint256,string,string,uint256)", +"0a107ac3": "setPI_edit_19(string)", +"0a10df7c": "bookingId()", +"0a114a70": "extendExpiration(uint256)", +"0a12a7a0": "LogContribute(address,uint256)", +"0a12c89e": "BTImint(address,uint256)", +"0a12c90f": "AddNewChallenge(uint256,uint256,uint256,uint256,bool,string)", +"0a1432f7": "openResult(uint256,uint8[])", +"0a14504c": "participate(bytes32)", +"0a14849e": "setOpenBetIndex(uint256)", +"0a15299b": "TourCash(uint256,string,string)", +"0a15a07f": "removeUnicorn(address,uint256)", +"0a15d3a8": "ETFT(uint256,string,string)", +"0a16605e": "receiveSpendingDeposit(address,uint256)", +"0a16697a": "targetBlock()", +"0a16916a": "RESERVE_POOL_TOKENS()", +"0a16a53f": "setCitizen(address)", +"0a16e225": "getrestrict(address)", +"0a16efc0": "_addCommittedValidator(uint256,address)", +"0a17d422": "isZero(uint256,string)", +"0a1856db": "Billing(address,address)", +"0a18c334": "Denar()", +"0a18edfa": "returnCouponProportion(address[3],bytes32)", +"0a18f6c1": "playForcibly()", +"0a19283c": "_createCryptsy(uint32,uint32,uint32,address)", +"0a1930b7": "LogDonation(address,uint256,uint256)", +"0a193612": "setCountry(address)", +"0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"0a1a677e": "searchtickets()", +"0a1a802e": "MatchPay()", +"0a1ab7fc": "arrayOfAccountsThatHaveClaimed(uint256)", +"0a1ceb0e": "usableBalances(address)", +"0a1dfb5a": "nextNextBid()", +"0a1e3a2c": "publishExecution(string,string,string,string,string,string)", +"0a1e71de": "isIco(uint256)", +"0a1e7701": "AtraOwner()", +"0a1e7a89": "getStudentRequest()", +"0a1e9f5e": "TokensOut()", +"0a1f0d9b": "reCap(uint256)", +"0a1f194f": "removeTrader(address)", +"0a1f5862": "minedTokenCap()", +"0a1f868c": "fuint256a(uint256[])", +"0a20aba4": "investOtherCrypto(address,uint256)", +"0a213e5b": "TWIMToken()", +"0a2282ae": "JackPot()", +"0a22ee73": "accountExists(address,uint8)", +"0a24c5bb": "yearlyMintCap()", +"0a2557d5": "wasInvestorWithdrawn(bytes32,address)", +"0a262f48": "setPreActiveTime(uint256)", +"0a26ccb1": "putBool(bytes32,bool)", +"0a276680": "transferOwnership(address,uint256)", +"0a27813d": "finalizedHoldingsAndTeamTokens()", +"0a28c664": "tokensOfWithData(address,uint256)", +"0a298034": "getFreeBulls()", +"0a29f508": "uploadSignedString(string)", +"0a2a9a01": "addWallet(address,uint256)", +"0a2ad0f3": "resetState(address)", +"0a2c0c65": "getAvailableVolume(bytes)", +"0a2cafac": "BPRchain()", +"0a2d31ad": "addToOptionChain(uint256,uint256[],uint256[],bytes32[],address[])", +"0a2d7629": "month12Unlock()", +"0a2d967b": "stopThisIco(bool)", +"0a2df1ed": "callSender(bytes4)", +"0a2eb301": "isAdministrator(address)", +"0a2ebc39": "NVISIONCASH()", +"0a2fd551": "ValidateKey(address,bytes32)", +"0a323fd0": "Boardcoin()", +"0a33cd41": "seIcoAddress(address)", +"0a35a7b1": "saleTierList()", +"0a36645f": "getShopOwnerProductList(string)", +"0a377f3a": "reserveKNCWallet(address)", +"0a384665": "maxTokensAmount()", +"0a38b400": "intermediadorAprovaDevolucao(bool)", +"0a394245": "doesReferralCodeValid(string)", +"0a39e222": "transferFromReserve(uint256,address)", +"0a3a0531": "manualContribution(address,uint256)", +"0a3b0a4f": "add(address)", +"0a3b1cd2": "setHotwallet(address)", +"0a3b7d9b": "TokenMacroansy()", +"0a3c000d": "buyerSymbol()", +"0a3c3088": "ARIZONE()", +"0a3c34fb": "successfulTransactions_()", +"0a3c4dbe": "merculetPrice()", +"0a3cb663": "freezePeriod()", +"0a3d7cce": "assertEq27(bytes27,bytes27,bytes32)", +"0a3dfba7": "giftCharacter(address,uint8)", +"0a3dfd10": "KittenTalked(string)", +"0a3e5712": "revokeWithdrawConfirmation(uint256)", +"0a3ecdfe": "drawNumbers(uint32)", +"0a3f013f": "releaseTimestamp()", +"0a3f5897": "placeBetEth()", +"0a401086": "operational()", +"0a402742": "allocateNormalTimeMints(address,uint256,uint256,uint256,uint256)", +"0a402a32": "LadaToken(uint256,string,string,uint8,address)", +"0a40878a": "EXSCoinSeller()", +"0a40f15f": "fundDeal(string,address)", +"0a40fb8c": "permissionMarker(address,bool)", +"0a412ae4": "aboveMinimumPurchase()", +"0a41442f": "setNewWallet1(address)", +"0a41dfee": "cancel_face_proof_request()", +"0a425a33": "getTreeIds(address)", +"0a42f86f": "getFrequency()", +"0a44b9cf": "amountIAmOwed()", +"0a4543ec": "MonoretoToken(uint256)", +"0a4625af": "totalEthers()", +"0a4655dd": "insert(bytes32,address)", +"0a46706b": "toCom(uint256)", +"0a47185d": "calcNav(uint256,uint256)", +"0a4740ff": "disableSale()", +"0a47a7a6": "mutiTransfer(address,address[],uint256[])", +"0a48dcb3": "appendUint8ToString(string,uint8)", +"0a49646b": "CreationRate()", +"0a49dece": "getDevelopmentFundBalance()", +"0a49e536": "getPoolAmounts(uint256)", +"0a4a3f0a": "GetConfirmRound(uint32,uint8)", +"0a4a57bc": "contain(uint256[],uint256)", +"0a4bb260": "buyItemAndApply(string,uint256)", +"0a4bfa6d": "IMDEXwithdrawToken(address,uint256)", +"0a4c374a": "birthPerTen()", +"0a4c6a45": "TEAM_UNFREEZE()", +"0a4caed0": "getChannelByRank(address,uint256)", +"0a4d564c": "TieUpLooseEnds()", +"0a4d7cd7": "setUserIdentityDocs(string)", +"0a4da2d4": "MyAdvancedTokenV2(uint256,string,string)", +"0a4dea01": "VETRI(uint256,string,string)", +"0a4fa201": "View_TrustlessTransaction_Status(uint256)", +"0a50e361": "generateNumberWinner()", +"0a513bc7": "CMBUpgradeableToken(address)", +"0a516805": "takerArguments(address)", +"0a518754": "periodICOStage4()", +"0a52d194": "payCommission(address,uint256,uint256)", +"0a55fbfe": "getMember(address,address)", +"0a56094d": "AriesToken()", +"0a56293d": "lockTokens()", +"0a564a03": "rateRound2()", +"0a569e8a": "currShares(address)", +"0a56a5f3": "nfsPoolLeft()", +"0a597da7": "impl_additionalRewards()", +"0a5988a8": "Term()", +"0a59b81b": "mesasCreated()", +"0a59bf2d": "setPersonalisationCost(uint256)", +"0a59c66e": "AuctusTokenVesting(address,uint256,uint256,uint256)", +"0a5a00c1": "recovery(address,address,uint256)", +"0a5a1e9a": "withDrawTips()", +"0a5a4e17": "AMBASSADOR_STAKE()", +"0a5a5b11": "releaseSecond()", +"0a5ab11d": "vestingWallet()", +"0a5ccb2a": "reclear(address,uint256,uint256,uint256,uint256,bool)", +"0a5cced2": "bookRoom(string,uint256[],uint256,address,bytes32,uint256,bool)", +"0a5cf9bb": "NeuralControl()", +"0a5dc24d": "getAuthorisationStatus(address)", +"0a5dc5a9": "blockMessagesFrom(address)", +"0a5de7bb": "midOf(uint256)", +"0a5ee9b0": "StakeReleased(uint256,uint256,address,bytes32,uint256)", +"0a5f558e": "mintInitialSupply(uint256[],address,address,address)", +"0a5f80f4": "publicAddDeposit(address,uint256)", +"0a6076b3": "SellableFund(uint256)", +"0a612095": "replaceToken(address[])", +"0a6184ce": "oneHundred()", +"0a623a11": "determineOutcome(uint8[],uint8[],uint8[],bool[],uint256)", +"0a62db33": "YToken(uint256,string,string)", +"0a639726": "oldPriceChangeBlock()", +"0a639ed1": "safeDiv_dec(uint256,uint256)", +"0a63ae38": "NukeContract(address)", +"0a64143a": "totalWithdrawn(address)", +"0a642d00": "retrait_3()", +"0a64bdb1": "_verifyOptionPoolDefray(address)", +"0a66d698": "isSealed(address)", +"0a67d2c7": "withDraw(address)", +"0a67dfbb": "setTeamTokenHolder(address)", +"0a681f7f": "NEXT_POT_FRAC_BOT()", +"0a68f374": "getATitty(uint256)", +"0a692347": "withdrawBack()", +"0a6a3f00": "B3nsToken()", +"0a6aec63": "cloneActiveToPlayed()", +"0a6b378c": "pushTokenId(uint256)", +"0a6be0e7": "BalancedPonzi()", +"0a6bea46": "principle(string)", +"0a6c0642": "frozenPortions(uint256)", +"0a6ee71a": "VISTACrowdSaleP1(address,address)", +"0a6ee947": "lockupContract()", +"0a6f2fbb": "setAllowDrawETH(bool)", +"0a6f5d8e": "_jackpotTax(uint256)", +"0a6fbb05": "SetPass(bytes32)", +"0a703549": "__forward(uint256)", +"0a70c0fd": "getTogglePrice(uint256)", +"0a70cae0": "getBalance2()", +"0a71943f": "PresaleToken(address)", +"0a71d020": "adjustFeaturePrice(uint256)", +"0a720fa9": "MemberSoldToken(address,uint256,uint256,uint256,uint256,uint256)", +"0a7258d8": "setNameWriterId(address,bytes32,bytes32)", +"0a728b85": "MakeSellOrder(bytes32,address,uint256,uint256,address)", +"0a732dac": "getCrowdsaleAddress()", +"0a7354d9": "getOwnedShipsByAddress(address)", +"0a738326": "Whitelist(uint256,address,bool)", +"0a738559": "AitasChain()", +"0a73f7c4": "GNNM(uint256,string,string)", +"0a740f74": "checkDatesPayment(address,uint256)", +"0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", +"0a74a181": "updatefundendtime(uint256)", +"0a751225": "shutDownDAO()", +"0a756f09": "StorageFund()", +"0a762b42": "PROMETHEUS_VOUCHER_PRICE()", +"0a766cfa": "sellCommission()", +"0a77b078": "Exchange()", +"0a77c3ed": "saleDuringRefundPeriod()", +"0a781bf4": "iCASH()", +"0a78e560": "PlayerNeedRefresh(address,uint256)", +"0a790e19": "MAX_ATHENIANS()", +"0a790eb7": "services(bytes32)", +"0a798f24": "openChannel(address,address,uint256)", +"0a799557": "setStartRefund(bool)", +"0a7a0807": "evaluateBet()", +"0a7a1c4d": "action()", +"0a7a2fef": "emitCapabilityRemoved(address,bytes4,uint8)", +"0a7a37bc": "setMonkey(string)", +"0a7a783a": "addOrg(address,address,string,string,string,string,uint8)", +"0a7a8c0a": "ItemMarket()", +"0a7c1922": "bitexlive()", +"0a7c1c35": "mItems(uint256)", +"0a7c1e9f": "NebeusToken()", +"0a7cf2aa": "weiHardCap()", +"0a7d29aa": "checkFunding()", +"0a7ead50": "_processPresalePurchase(address)", +"0a7f4239": "getAccountFundContract(address)", +"0a7f565f": "Intermediary()", +"0a7f734e": "_processTx(address,uint256)", +"0a7fb746": "removeMilestoneFrom(address,uint8)", +"0a7fc3df": "Sentivate()", +"0a80e725": "isReserveSupplyAssigned()", +"0a80ef45": "getIsClosed()", +"0a811fcc": "DigitalPesoCoin()", +"0a82f06b": "deleteCoverImage(uint256)", +"0a82fd1c": "deletePortfolio(uint256)", +"0a834ac0": "START_TGE()", +"0a85107a": "LogTransfer(address,address,uint256)", +"0a857040": "withdrawTrx(uint256)", +"0a85bb25": "isAuthorized(address,address,bytes)", +"0a864240": "TMBCStandardToken(uint256,string,uint8,string)", +"0a866f3a": "addThing(string,bytes32,bytes32,string)", +"0a86f644": "test_0_testBasicTxExecution()", +"0a87391c": "investorsAccounts()", +"0a874df6": "lookup(uint256)", +"0a875313": "createFunded(address,uint256,bytes32,bytes32,bytes1)", +"0a87557c": "ICO_END_TIME()", +"0a883790": "payrollCount()", +"0a888a63": "operation_address(uint256)", +"0a8972f9": "LoveAirCoffee(uint256)", +"0a898428": "nodesVars()", +"0a89e0aa": "switchModeSoOnlyEmergencyStopsAndEscapeHatchesCanBeUsed()", +"0a8a2485": "invite(address,bytes)", +"0a8b88f6": "SECOND_VOLUME_BONUS()", +"0a8bcdb9": "withdrawFromReserve(uint256)", +"0a8c138e": "NAABHAToken()", +"0a8c1551": "EtherAsset()", +"0a8d032d": "QuantumToken()", +"0a8d5fb8": "techProvider()", +"0a8e891f": "Medcash()", +"0a8e8e01": "test3()", +"0a8ed3db": "grantPermission(address,address,bytes32)", +"0a8f8fb9": "advisersReserve()", +"0a8fed89": "setup(uint256,uint256)", +"0a90011f": "setStatus(address,uint256,uint8)", +"0a90b578": "getLenderInterestForOracle(address,address,address)", +"0a90c704": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"0a9110b2": "NewDataRequest(uint256,bool,string)", +"0a919e3c": "QUEENTEN()", +"0a91cad0": "nextReleaseDate()", +"0a91f2a5": "get_owner_of(address)", +"0a9254e4": "setUp()", +"0a92b264": "getRandom(address,uint256,uint256,uint256)", +"0a934b9d": "mainSaleAllocations(address)", +"0a94031c": "GigaProfitIn(uint256,string,string)", +"0a94ece7": "nextUpgradeAgent()", +"0a95011e": "getCreateMarketNumTicksValue()", +"0a95c49d": "closeOutSweeps()", +"0a95dbfa": "approveUser(address,bytes32)", +"0a9626ba": "setLiqPrice(uint256)", +"0a968d5e": "issueFirstRoundToken()", +"0a979511": "gcExchangeRate()", +"0a9848ac": "setAdminlist(address,bool)", +"0a986540": "chinainc()", +"0a988892": "saveCurrentArbitrationFees(address,bytes32)", +"0a9a70c0": "changeDevFeesAddr(address)", +"0a9a7842": "logAllStop()", +"0a9aa521": "callAMethod1(uint256,uint256,uint256,uint256)", +"0a9ac3d0": "getMarketerAddress(bytes32)", +"0a9ae69d": "bb()", +"0a9d4e95": "_buy(uint8,bytes6,uint32,uint32)", +"0a9de288": "distributeTokens(address,address,address,address,address,address)", +"0a9e24c1": "addBurnWallet(address)", +"0a9ef927": "newTimeLockedWallet(address,uint256)", +"0a9fc06f": "verifyProposal(bytes32,address,address,uint256,bytes32,string)", +"0a9fec36": "sPeriodSoldTokensLimit()", +"0a9ff623": "voteUID()", +"0a9ffbf9": "confirmDividend(uint256)", +"0a9ffdb7": "allocateToken(address,uint256)", +"0aa0903c": "MINIMUM_PRESALE_PURCHASE_AMOUNT_IN_WEI()", +"0aa0bd00": "getPartyB(bytes)", +"0aa0fbe5": "netContractBalance()", +"0aa1ae29": "SMCT()", +"0aa1ee4c": "membersWhiteList()", +"0aa20e73": "multiTransfer(address,address[],uint256)", +"0aa24f50": "adjustInvestorCount(address,address,uint256)", +"0aa28f09": "splitInService()", +"0aa2b673": "cumReqMarbles()", +"0aa2bbaa": "lastWillAccount()", +"0aa2bf7f": "test_26_assertGasUsage2000Boards()", +"0aa34c7c": "updateJMAmount(uint256)", +"0aa3ae7e": "refill(address,uint256)", +"0aa46c12": "testClearBitFailIndexOOB()", +"0aa5418f": "IrfanFr()", +"0aa56368": "claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", +"0aa59fe3": "miningFivePlat()", +"0aa5aa2d": "transferAndNotify(address,uint256,uint256)", +"0aa6d45d": "oraclize_randomDS_proofVerify__main(bytes,bytes32,bytes,string)", +"0aa7881a": "MintableToken(int256,uint256)", +"0aa79fc6": "refundParticipant(address)", +"0aa83f5a": "consume(uint32,uint32)", +"0aa86791": "NujaBattle()", +"0aa93fff": "updateBytes32s(bytes32[],bytes32[])", +"0aa9a4fb": "payPrize(address,uint256,uint8,uint256,uint256,uint256)", +"0aa9c58b": "fillOrKillOrder(uint256,bytes)", +"0aaa9e46": "TNT()", +"0aaba432": "salesVolume()", +"0aac1073": "getSwapOutgoing(uint256)", +"0aac5dfd": "getAssetsCount()", +"0aac8034": "prizeWinners()", +"0aad1f3b": "fechSumNumForCandidateByStage(address,uint256)", +"0aad8ef9": "removeTypeAddressById(uint256,address,address,uint256)", +"0aae7a6b": "info(address)", +"0aaef916": "addManyWhitelist(address[])", +"0aafa40e": "IOVOToken()", +"0aafefb8": "QPay()", +"0ab03e1b": "testControlRegisterContractAgain()", +"0ab0c6c8": "getWinnablePot(uint256)", +"0ab0df87": "timeStamp()", +"0ab174a3": "untrack(uint256)", +"0ab21db7": "sencEthRate()", +"0ab2a9b8": "modifyJurySize(uint256)", +"0ab3bb1b": "totalFundingGoalInIBC()", +"0ab41690": "_forfeitShares(address,uint256)", +"0ab44f74": "AllNewsCash()", +"0ab4846c": "rewardLast7Draw(uint256)", +"0ab4c065": "subdomainOwner(string,string,string)", +"0ab4ca55": "registerNameXaddr(string,address,bool,uint8)", +"0ab4debd": "shortBuy()", +"0ab51bac": "aum()", +"0ab58ead": "SingularDTVFund()", +"0ab5bed4": "platformWithdrawAccount()", +"0ab66be3": "paySubscription(address)", +"0ab68776": "addDiscount(uint256,uint256)", +"0ab6ead5": "Ended(address,uint256)", +"0ab6fb36": "capitalPoolOf(address)", +"0ab6ff19": "addFullFundTX(uint256,uint256)", +"0ab757df": "withdrawEIP777(address,address,uint256)", +"0ab763d0": "polyCustomersAddress()", +"0ab77095": "assignUnitRafflePrize(address)", +"0ab7ec3a": "rejectProject(address)", +"0ab84ed9": "pivx()", +"0ab85a10": "getTotalRewards(uint32)", +"0ab880e5": "resumeBuy()", +"0ab8afac": "auctionContract()", +"0ab9059c": "OrphanToken(address)", +"0ab93971": "GetCount()", +"0ab9419d": "addint256(int256,int256)", +"0ab9db5b": "banker()", +"0aba73d7": "getDealById(uint256)", +"0aba8ec2": "brokerImp()", +"0aba980f": "unblockFundsInEscrow(address,uint256,address)", +"0abb691b": "buynode(uint256)", +"0abb8409": "getPoolETHBalance()", +"0abbf2de": "TeamLocker(address,address[],uint256[],uint256)", +"0abcbbcd": "makeShitClone(address)", +"0abd171b": "setinfo(string,string,string,address)", +"0abd2ba8": "tokenPause()", +"0abe293d": "addRefiller(address)", +"0ac0b31f": "calculateMultiplierAndBonus(uint256)", +"0ac10c0d": "createVesting(address,address,uint256,uint64,uint64,uint64)", +"0ac153ac": "lockMax()", +"0ac168a1": "blockReward()", +"0ac1a281": "CapRevealed(uint256,uint256,address)", +"0ac25e1a": "createPromoClown(uint256,address,bool)", +"0ac28725": "requestTradeDeal(uint256,uint256,string)", +"0ac298dc": "get_owner()", +"0ac2a1c7": "bonusDeliverTime()", +"0ac2ae27": "MarketContractOraclize(string,address,address,uint256[5],string,string)", +"0ac2ffc5": "getMiniByOwner(address)", +"0ac313e0": "setPlatAuction(address)", +"0ac3ccc4": "calcBUYoffer(uint256,uint256)", +"0ac42534": "isCancellable(address)", +"0ac50a6e": "CPCToken(uint256,string,uint8,string)", +"0ac51bd7": "getTimestampsFromPublishers(address[],string[],int256[],int256)", +"0ac5a67f": "paymentGateways()", +"0ac5f441": "paySellerForBuyer(uint256,address)", +"0ac62e02": "emergencyStop(bool)", +"0ac67e2f": "getLowPrice()", +"0ac7366b": "IRONtokenSale(uint256,uint256)", +"0ac799ff": "_transferXToken(address,address,uint256)", +"0ac7c7ba": "getBalanceMessage(address,uint32,uint192)", +"0ac8dc61": "GetLandId(uint256,uint256)", +"0ac924a0": "Minter(uint256,address)", +"0ac94000": "executeRequest(uint32)", +"0ac96103": "getBaseUrl()", +"0ac9bb29": "nextSeedHashed()", +"0ac9d35f": "_getRandomNumber(uint256)", +"0aca08ca": "closeGiveAway()", +"0aca7403": "process_swap(address,address,uint256)", +"0aca9de0": "placeLong(address[2],uint256[7],uint8,bytes32[2])", +"0acaad4c": "getWeiContributed(address)", +"0acae9a7": "publicEnd()", +"0acb4c28": "activateOracle()", +"0acc4382": "getMinDailyWithdrawLimit()", +"0acdc3ef": "_Doihave(uint8)", +"0acdd69f": "TOTAL_SOLD_TOKEN_SUPPLY_LIMIT()", +"0ace8c9a": "addPackage(string)", +"0ace9469": "setmaxContribution(uint256)", +"0acf0b8e": "admin_add_modify(address,uint8)", +"0acf473b": "AdminCloseContract()", +"0acf4b0b": "createPromoToken(address,string,uint256)", +"0ad0a0f3": "setPurchaseValues(uint256,uint256,address,bool)", +"0ad137c4": "Provide(address,address,address,address)", +"0ad182bc": "getTickets(address)", +"0ad1c2fa": "getContract(address)", +"0ad2074c": "logFailedSweep(address,address,uint256)", +"0ad20914": "getRequestByRequesterAddress(address)", +"0ad23aad": "getNumberOfRatingForAddress(address)", +"0ad24528": "end(uint256)", +"0ad27798": "depositPresale(address,uint256)", +"0ad40377": "KYCPresale(address,uint256,uint256,uint256)", +"0ad40df1": "setConfiguration(uint256)", +"0ad43eaa": "enterMessage(string)", +"0ad4b97b": "fibonacciIndex()", +"0ad50c02": "buyPropertyInETH(uint16)", +"0ad54c03": "playerRefundBet(bytes32)", +"0ad59fa2": "CocaCola()", +"0ad63730": "virtuePlayerPoints()", +"0ad65128": "logPresaleResults(uint256,uint256)", +"0ad6aa28": "currentstagedata()", +"0ad6ac85": "pay(uint256,uint256,address)", +"0ad7cf3c": "BitCloud()", +"0ad7f29f": "CampaignManagerContract(address,address)", +"0ad80f41": "WorldTrade(uint256,string,string)", +"0ad95b44": "bribery()", +"0ad98d71": "showTotal()", +"0ad9cf6f": "_resetTransferredCoinFees(address,address,uint256)", +"0ad9d052": "model()", +"0adaa7bf": "expireAssociate(address)", +"0adae972": "detailsOf(address)", +"0adb1354": "RimuoviProfessore(address)", +"0adcaddc": "iterate_valid(uint256)", +"0adcdbaa": "redeemRate()", +"0add0baa": "maxInvestments()", +"0add8140": "pendingProxyOwner()", +"0adde487": "getPurchaseLimit()", +"0ade4942": "tokenPriceProvider()", +"0ade7142": "terminateDirectDebit(address)", +"0ade9429": "getNext(uint256,address,uint256,uint256,uint256)", +"0adeb700": "changeQuarterlyRate(bytes32,uint256)", +"0adf331b": "stateSuccess(uint256)", +"0adf7912": "TokenDestroyed(uint256,address)", +"0adfb4e2": "Elemental()", +"0adfba60": "callSelf()", +"0adfdc4b": "setAwardedInitialWaitSeconds(uint256)", +"0ae08793": "confirmAndCheck(bytes32)", +"0ae100d8": "addOrganFunction(address,string)", +"0ae1b13d": "post(string,string)", +"0ae1fac0": "startICOStage4()", +"0ae25ca3": "withdrawToTeamStep4(uint256)", +"0ae31fbd": "setDistrictAddress(address,address)", +"0ae32e72": "ZhangHongBinToken()", +"0ae41574": "logOrderCreated(uint8,uint256,uint256,address,uint256,uint256,bytes32,bytes32,address,address)", +"0ae50a39": "GetOwner()", +"0ae5e739": "grantAccess(address)", +"0ae66820": "getBuyCost(uint256)", +"0ae75eb8": "amountOfBRAsold()", +"0ae7a310": "tokenMeta(uint256)", +"0ae80c37": "kickStartMiniICO(address)", +"0ae870bd": "Mjolnir()", +"0ae8f28f": "getProposalTextArrayLength()", +"0aea47bc": "getTimer(uint256)", +"0aeacb5e": "getTotalRecords()", +"0aeb0f79": "UserCategorySet(address,uint256)", +"0aeb1552": "insertStrategy(bytes15,address,uint256,string)", +"0aeb4b26": "WorldCupControl()", +"0aeb6b40": "register(address,bytes,uint256)", +"0aebeb4e": "close(uint256)", +"0aeccc9c": "setScribe(address,address,string,string)", +"0aece23c": "getFeeAmount(int256)", +"0aed3c36": "testIsCase()", +"0aed3ca1": "getLoans(uint256)", +"0aed5a21": "NamiExchange(address)", +"0aed80f2": "secondSellPrice()", +"0aed8e72": "rotate(uint256,bool)", +"0aed9c45": "TicketsSoldForThisGame()", +"0aef8500": "amountFundAirdrop()", +"0aef8655": "PXLProperty(address)", +"0aefc573": "KyberHandler(address,address)", +"0aeffa65": "ETH_MIN_GOAL()", +"0af15f6e": "stopSellingGenes(uint256)", +"0af179d7": "setDNSRecords(bytes32,bytes)", +"0af1fe11": "getAllPRS()", +"0af23be2": "ETHERREDSupply()", +"0af39032": "testMintThis()", +"0af3e660": "getHolderId(address)", +"0af4187d": "getAllowance(address,address)", +"0af4626d": "testRetract()", +"0af4cd61": "setHalted(uint256)", +"0af658ca": "personUpdateActivity(uint256,bool)", +"0af6c9ff": "setColdWallet(address,uint256,uint256)", +"0af6f6fe": "changeAgentPermission(address,uint8)", +"0af72ad0": "isStrategy()", +"0af825da": "_transferInternal(address,address,uint256,bytes)", +"0af8bd95": "TIDAChain()", +"0af95750": "deactivateProject(address)", +"0af9d89c": "getPaintingGeneration(uint256)", +"0afa371d": "XMAX()", +"0afa6dde": "getAddressLost(address)", +"0afa9fb9": "contains(int256,address)", +"0afb0409": "refresh(address)", +"0afb9f1f": "getProposalByIdIteration(uint256,uint256)", +"0afc0a59": "computeTokens(uint256,uint256)", +"0afd21d2": "failSale(uint256)", +"0afd2778": "changeFundOwnerWalletAddress(address)", +"0afd548d": "setOperationContracts(address,address,address)", +"0afdca95": "impl_batchTransferMSM(address,address[],uint256[])", +"0aff2076": "getLastAuctionId()", +"0b009517": "YourToken()", +"0b00a111": "WhitelistUpdated(address,address)", +"0b00de8d": "unregisterWorkerAffectation(address,address)", +"0b00fd54": "TEAM_ADDR()", +"0b01517c": "getPlayerBalance()", +"0b01856d": "startPreICOTimestamp()", +"0b02177f": "testnetWithdrawn(uint256)", +"0b03ad11": "unregisterToken(address,string)", +"0b0608db": "LolaCoin()", +"0b070845": "Dagt()", +"0b073865": "share3()", +"0b0740ae": "getItemIndexToOwner(uint256)", +"0b077fe7": "Whales()", +"0b0788dc": "assertEq27(bytes27,bytes27)", +"0b0a4b17": "askHash()", +"0b0b6d5b": "supportImpeachment()", +"0b0bbd65": "addrToAsciiString(address)", +"0b0c2e80": "test_basicWithTwoAssertThrow()", +"0b0c564d": "Enter(uint256,uint256,bool,address)", +"0b0c8f1f": "initSmartToken(address,address,uint256)", +"0b0c92bd": "_isOperatorFor(address,address,bool)", +"0b0d031a": "fetchCreatedOrdersForPayer()", +"0b0d0eb7": "transferToBeneficiaries()", +"0b0e13d6": "closeStageTwo()", +"0b0edad3": "getBooking(address,uint256)", +"0b0f7743": "issuedCount()", +"0b100a5a": "policiesCount()", +"0b107904": "authorizeOne(address)", +"0b10bd1b": "HiroyukiCoinDark()", +"0b11a6e3": "ERGOIN()", +"0b11ed63": "getGenerationForWindow(uint256,uint256)", +"0b1200da": "setWalletContractAddress(address)", +"0b121c04": "createIssue(uint256,uint256,uint256)", +"0b12a148": "_distributeNewSaleInput(address)", +"0b12e7e2": "soowhat()", +"0b1350cf": "assetProxy()", +"0b1414c1": "oneStaIsStb()", +"0b14331f": "getExpiration(uint256,uint256)", +"0b151811": "getBonusByDate(uint256,uint256)", +"0b15650b": "randInt(uint256,uint256)", +"0b1573b8": "setRoundLockAmount(uint256)", +"0b181567": "exceed()", +"0b1851a9": "Billionscoin()", +"0b1a3144": "pushToApproved(address,uint8)", +"0b1a8e1e": "setMasterServer(uint32)", +"0b1a94e7": "validPurchasePresale()", +"0b1aff48": "extendTDE(uint256)", +"0b1b62fa": "transferBackMANAMany(address[],uint256[])", +"0b1b92dd": "FACTOR_11()", +"0b1b9aa5": "getluckyuser()", +"0b1ba852": "changeDepositCell(address,uint256)", +"0b1bf3e2": "Galleass(string)", +"0b1c45c9": "getPhiladelphiaBets(address)", +"0b1c4a75": "subFees(uint256,uint256)", +"0b1c5b76": "fetchVoteMainInfoBySnapshotBlock(uint256)", +"0b1ca49a": "removeMember(address)", +"0b1d366d": "getLastAwardInfo(uint256)", +"0b1dcc88": "buyCountry(uint8)", +"0b1dfa26": "fxpDiv(uint256,uint256,uint256)", +"0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", +"0b1e5acc": "roleHas(string,address,address)", +"0b1e7f83": "posts(uint256)", +"0b1ec92e": "RoundCreated(uint256,uint256,uint256,uint256)", +"0b1f3850": "num_hosts_revealed()", +"0b1fc3c0": "getVendingAmountLeft(uint256)", +"0b210a72": "getDrugInfo(uint256)", +"0b2140ab": "buyUSD(address,uint256)", +"0b214493": "_stageValidation(uint256,uint256,bool)", +"0b21d446": "setValidBwCaller(address)", +"0b225b42": "PHASE4_START_TIME()", +"0b2478b3": "getSaleIsOn()", +"0b247b1b": "CreateACI(address,uint256)", +"0b25cbb2": "Ftechiz()", +"0b261340": "marbleBalance(address)", +"0b269898": "setPricing(uint256[])", +"0b274f2e": "passPhase()", +"0b27fa51": "noOfTokenAlocatedForPresaleRound()", +"0b280a29": "isBatchActive(uint256)", +"0b2909e6": "addOwed(address,uint256)", +"0b294bdf": "GetPlayerDetails(address,address)", +"0b299630": "addItem(string,address,uint256,address,uint128)", +"0b2a6c70": "marketWine()", +"0b2acb3f": "add(address,bytes)", +"0b2accb2": "getPercentage()", +"0b2c588c": "setAdventureHandler(address)", +"0b2d25ca": "calculateCharityFee(uint256)", +"0b2e02c7": "migrateAgent()", +"0b2e7423": "maxSecurityGuardDelay()", +"0b2ee7e9": "create(uint256,uint256,uint256,bool)", +"0b2f6a7e": "_mintPlayer(uint32,uint32,address)", +"0b2f6cef": "m_hodlers()", +"0b2fce74": "addGardener(uint256,uint256)", +"0b305c62": "playerEndGameConflict(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", +"0b305ce9": "destFoundation()", +"0b309c93": "Timer()", +"0b30ab4f": "bubbleSort()", +"0b30fc7b": "pastValues(uint256)", +"0b317697": "investorToken(address)", +"0b31fc3a": "DiamondToken()", +"0b341245": "activityAddress()", +"0b3464c3": "activeHeroGenome(address)", +"0b34f78c": "MintProposalAdded(uint256,address,uint256)", +"0b3532b3": "balanceSellingOf(address)", +"0b354090": "SimpleConstructorBool(bool,bool)", +"0b3598c6": "_sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", +"0b35ea61": "stopGuess(uint256,bool)", +"0b35fe44": "VerifyEd25519(bytes32,bytes,bytes)", +"0b368627": "releaseOldData()", +"0b377a8f": "setNumIncorrectDesignatedReportMarkets(uint256)", +"0b38bae2": "_totalSupplyLeft()", +"0b393a9d": "MANHATTANPROXY1STAVE()", +"0b395d1e": "_addUserExperience(address,int32)", +"0b39aaa9": "privateEquityClaimed()", +"0b39c3e1": "requestLoan(address,address,bytes16,uint256,uint128,uint128,uint16,uint64,uint64,string)", +"0b39f18e": "setCardTokenAddress(address)", +"0b3a2ffd": "setRoyaltyInformationContract(address)", +"0b3af901": "proposePlatformWithdrawal(address)", +"0b3b2222": "TokenDistribution(address,address)", +"0b3bb024": "getTenant()", +"0b3bc259": "funderCount()", +"0b3cd070": "multiBet(uint256[],uint256[],uint256[])", +"0b3d7174": "prev_week_ID()", +"0b3e9c7b": "userEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address)", +"0b3ed536": "claimDonations(uint256)", +"0b3f191a": "disableChanging(bool)", +"0b3fe32d": "setHalfTimeAtkBoss(uint256)", +"0b407022": "migrateV1Upgrades(address[],uint256[],uint256[])", +"0b40ab43": "setBankAddress(address,address)", +"0b4130f2": "GenomaToken()", +"0b424b66": "HHDCToken(uint256,string,string)", +"0b42d1de": "BejonesStandardToken(uint256,string,uint8,string)", +"0b43c6e6": "CryptonCoin()", +"0b440f33": "initCrowdsale(uint256,uint256,uint256,address)", +"0b4438e5": "spinAll()", +"0b45e8db": "SALE_CAP()", +"0b464bf6": "blocksSinceLastBid()", +"0b4650a0": "FiatContract()", +"0b467b9b": "revoke(bytes)", +"0b47459b": "LAARToken()", +"0b480095": "teamAddressThreeTokens()", +"0b483f6e": "toAllow()", +"0b48af0b": "interestOf(address,address)", +"0b4964a8": "addDungeonNewFloor(uint256,uint256,uint256)", +"0b4a1ece": "VisibilityDerived()", +"0b4aca45": "__formatDecimals(uint256)", +"0b4b5d5e": "GamityToken()", +"0b4bb61f": "burnPercentage1000m()", +"0b4c72a9": "rejectProvider(address)", +"0b4ca1cd": "doResult(uint256,bytes32,bytes32,uint256)", +"0b4cf825": "getRandomColorType()", +"0b4da628": "IsPlayer()", +"0b4db63a": "Tratok()", +"0b4dfc77": "contractMint(address,string,bytes32,bytes32,uint256)", +"0b4e0513": "reserveTokenFund()", +"0b4efd9a": "RobotBTC(uint256,string,string)", +"0b4f12f6": "updateUser(string)", +"0b4f3f3d": "cancel(string)", +"0b4f79a1": "RejekiKita()", +"0b509e1d": "getCountOfCell()", +"0b513828": "parseChannel(bytes)", +"0b513ce9": "PonziBet()", +"0b51989a": "setData(address,string)", +"0b520ad5": "freePeriodDuration()", +"0b522abf": "closeCrowdsale(address)", +"0b549884": "matingPrice(uint256)", +"0b54cbfb": "setType(uint8)", +"0b5608f2": "PackageCoinPresaleOne(uint256,uint256)", +"0b566f33": "unlockedCollateral(address)", +"0b56d4c6": "airdropNum()", +"0b56f01c": "createAmountFromEXORForAddress(uint256,address)", +"0b573638": "ethToTokenTransferOutput(uint256,uint256,address)", +"0b57adc0": "Transwave()", +"0b57c487": "COVERCOINToken(string,string,uint8,uint256)", +"0b583982": "getUserProductCount(bytes32)", +"0b586f1a": "_emitWorkResumed(uint256,uint256)", +"0b58dc38": "SetNewBlockchainEnabled()", +"0b590c6b": "SingularDTVToken()", +"0b591195": "largestPenis()", +"0b5945ec": "setTokenURL(address,string)", +"0b597135": "onHardCapReached(uint256)", +"0b5982f0": "payOutDividend()", +"0b59a5c4": "purchasedCoins()", +"0b59df68": "withdrawEscrow(uint64)", +"0b5a006b": "currentYear()", +"0b5ab3d5": "destroyDeed()", +"0b5ad1c1": "UpdateSellAgentCreators(address)", +"0b5adfff": "getNumTickets()", +"0b5ba082": "stagesManager()", +"0b5c2307": "globChanceOwner(uint256)", +"0b5c3f87": "addReferral(address,address)", +"0b5ca8db": "issuedBounty()", +"0b5d1c3d": "testLessThanOrEqual()", +"0b5d69ab": "UpdateMaxBalance(uint256)", +"0b5d94f6": "getOrderPrice(address,address,uint256,uint256)", +"0b5e19b0": "getInvestSum()", +"0b5e2232": "HunxuHappyToken()", +"0b5e89f4": "icoStarted()", +"0b5ee006": "setContractName(string)", +"0b5f2efd": "setCurrentRate(uint256)", +"0b5f5ef1": "setAvatar(uint256,bytes)", +"0b5faf97": "claimWin(bytes32)", +"0b5fcf81": "enableAutoDividends(uint256)", +"0b604085": "setBombletAddress(address)", +"0b605fcd": "tokensTo0xbtc_(uint256)", +"0b60ca88": "raisedSale2USD()", +"0b611241": "ieoStorageVault()", +"0b6142fc": "breach()", +"0b620b81": "withdraw(address,address,address,uint256)", +"0b6386d4": "KyberNetworkCrystal(uint256,uint256,uint256,address)", +"0b63b114": "freeTokens(address)", +"0b63fe95": "processPayment(address,uint256)", +"0b642d72": "recoverLostEth(address,uint256)", +"0b65108b": "merge()", +"0b654e7d": "finishedRaceCount()", +"0b663e63": "promoCount()", +"0b66c247": "scoreTeams(uint32,uint32[],int32[],uint32[],uint32,uint32)", +"0b66f3f5": "multisendToken(address,address[],uint256[])", +"0b6700d6": "getLogo()", +"0b6780aa": "extendSaleEndDate(uint256)", +"0b679d2c": "REQUEST_CANCELED_BY_CREATOR()", +"0b6826ca": "payDividend()", +"0b682cb8": "Quhabitat()", +"0b684de6": "CitizenOneCoin(uint256)", +"0b695449": "MiningUpgrade(address,uint256,uint256)", +"0b697362": "withdrawFromSubRound(uint256)", +"0b6b80b2": "sampleRegistry()", +"0b6bd1b0": "GetAcorn(address)", +"0b6bf29f": "partner1_will()", +"0b6c754b": "isSuccess()", +"0b6c9ac7": "airdroppedAmount()", +"0b6d3017": "overflow_upper()", +"0b6d715b": "createGame(string,uint256,uint256)", +"0b6d8d52": "createDAO(address,uint256,uint256)", +"0b6e01db": "total_bet_available()", +"0b6e46fe": "enableController(address)", +"0b6e6511": "convertToELIX(uint256,address)", +"0b6ebf86": "KWHTokenAddress()", +"0b6f0530": "test_twoInvalidEqBytes32Message()", +"0b6f2fad": "HashCoin(uint256,string,string)", +"0b6f46ed": "isPresaled(address)", +"0b6f5b3d": "ShrimpFarmer()", +"0b6f6e0d": "CanYaCoinToken()", +"0b6fc163": "claimSignerAddress()", +"0b6fcdb0": "getEnforceRevisions(bytes32)", +"0b70ce55": "Betfunding()", +"0b714b17": "AddHash()", +"0b71ff6a": "MTDCERC20()", +"0b72396c": "validateContractWithCode(address,string)", +"0b730fae": "ICOadvisor2()", +"0b731652": "Ethbet(address,address,address,uint256,uint256)", +"0b7373d6": "giveAllBack()", +"0b73aad0": "msgsWaitingDone(uint256)", +"0b74074b": "startPayouts()", +"0b743021": "TOKENS_TOTAL()", +"0b745a01": "setLockup(address)", +"0b747d91": "randomSeed()", +"0b74b620": "getChannelsParticipants()", +"0b74edc6": "testFinalHash()", +"0b74f633": "getTradeParameters(uint256,address,address,uint256,uint256,uint256,uint256)", +"0b7507ae": "getTaskAtIndex(uint256)", +"0b7623ba": "abs(int8)", +"0b76619b": "staked()", +"0b779363": "checkVotingForChangeAdminAddress()", +"0b77fa28": "generateThemedSpinners(uint256,uint256,uint256)", +"0b781385": "nextCampaignBalance()", +"0b78f9c0": "setFees(uint256,uint256)", +"0b7abf77": "TOTAL_TOKENS()", +"0b7ad54c": "getContent(uint256)", +"0b7d1de1": "proofOfSMS()", +"0b7d6320": "crowdsaleAgent()", +"0b7d796e": "loop(uint256)", +"0b7ddd25": "setRaisedAmount(uint256)", +"0b7e4e7f": "substractNumber(uint256)", +"0b7e9c44": "payout(address)", +"0b7ef89b": "contributeToCampaign(uint256)", +"0b8021c4": "getPublishedTokens(address)", +"0b803b6b": "transferApprovedBalance(address)", +"0b80b4f9": "QuantaloopToken()", +"0b80f8d3": "invmod(uint256,uint256)", +"0b811cb6": "executeProposal(uint256,bytes32)", +"0b816045": "getRequestInfo(uint256)", +"0b81e216": "setAllowTransfer(bool)", +"0b82a541": "setIcoEndTime()", +"0b82d33d": "withdrawBalanceDifference()", +"0b83284e": "MinterFunction(address,uint256)", +"0b834864": "publicTransfers(address,address,uint256)", +"0b83de20": "ABI(bytes32)", +"0b841433": "agentApproval(address,uint256)", +"0b8440ec": "bonusTokenRateLevelTwo()", +"0b84cc4a": "Committees(uint256)", +"0b8514b9": "exit(bytes32,bytes,bytes32)", +"0b851937": "year4Unlock()", +"0b85877f": "isICAP(address,address)", +"0b85881c": "ceilLog2(uint256,uint256)", +"0b869824": "CeoAddress()", +"0b87572b": "communityDevelopmentSupply()", +"0b8762d1": "Block18Token()", +"0b87cf10": "crowdsaleActive()", +"0b88e06b": "testTokenBalance()", +"0b892e3f": "celebs(uint256)", +"0b897f64": "invert(address,uint256,address)", +"0b8a7bf8": "coinbaseWallet()", +"0b8b709d": "_createDroneInternal(address)", +"0b8ba87d": "UnilotBonusTailEther(address)", +"0b8bbd5b": "webGiftEtherAmount()", +"0b8d0a28": "wallet2()", +"0b8d9d94": "createSportsBet(string,uint256)", +"0b8e845a": "burnFeeFlat()", +"0b8eebde": "gameEnd()", +"0b8f0b61": "sendCoinsToBeneficiary()", +"0b8f0e0a": "LIWUC()", +"0b901c82": "totalRepaidQuantity()", +"0b910f86": "PRESALE_MIN_INVEST()", +"0b91eaf9": "isValidated(address)", +"0b926ecd": "validStoreVal()", +"0b927666": "order(address,uint256,address,uint256,uint256,uint256)", +"0b93381b": "success()", +"0b936a77": "DuanZiToken(address)", +"0b93bf0d": "setRecruitHeroFee(uint256)", +"0b948684": "delegatedTransfer(bytes,address,uint256,uint256,uint256)", +"0b95c8ae": "aggiungiMsg(string)", +"0b962e8f": "AlphaChainConstructor()", +"0b96406a": "vestingMappingSize(address)", +"0b96740c": "changeMinimumContributionForAllPhases(uint256)", +"0b967584": "voteForCandidate(uint256,address)", +"0b967fd2": "remove_master(address)", +"0b967fe7": "assertEq18(bytes18,bytes18)", +"0b96e72e": "setBAS(bytes32,address,string)", +"0b972ff6": "weiPreCollected()", +"0b97bc86": "startDate()", +"0b97fc8d": "WeiPerTicket()", +"0b98107c": "dateFrom()", +"0b9830ba": "tokensIndexOf(address,bool)", +"0b9835cf": "pvpContenderRemoved(uint32)", +"0b9849ab": "WEChainCommunity()", +"0b98f975": "setBonus(uint256)", +"0b9902d0": "WithdrawPerformed(uint256)", +"0b99ccee": "ico2Ended()", +"0b9aa067": "isVerified(address,address)", +"0b9ac851": "getCurveUnset(address,bytes32,int256)", +"0b9adc57": "deleteBytes32(bytes32)", +"0b9b0e7d": "highRate()", +"0b9b8130": "registerMintedToken(address,string)", +"0b9b9602": "SalesWalletUpdated(address,address)", +"0b9bfa6c": "inCommunity(address,address)", +"0b9cae77": "KinetiQ()", +"0b9d5847": "getExchange(uint256)", +"0b9d98e9": "getTotalVolume()", +"0b9e9817": "CanaryV7FastTestnet()", +"0b9ea6c8": "getCurrentSold()", +"0b9ea95d": "configureSaleClockAuction(address,uint256)", +"0b9f1e76": "wphcToken()", +"0b9f2816": "nowwww()", +"0b9f2ca6": "getCountBuildings(uint256,uint256,bool)", +"0b9f6108": "divsm(uint256,uint256)", +"0b9fc8fb": "checkerSign(bool)", +"0ba00420": "bulkPay(address[],uint256)", +"0ba0a3a1": "TakerSoldAsset(address,uint256,uint256,uint256)", +"0ba12c83": "commitUpgrade()", +"0ba1772d": "callDistributed()", +"0ba1f7ad": "getImpactCount(string)", +"0ba234d6": "cancelRecovery()", +"0ba24e4c": "customers(address,address)", +"0ba27775": "fondToken()", +"0ba2e8a8": "allowFunding()", +"0ba3aa55": "setdoctor(string,uint256,string)", +"0ba46624": "setBountyAgent(address,bool)", +"0ba4d242": "s43(bytes1)", +"0ba5890a": "noteBallotDeployed(bytes32)", +"0ba6d271": "updateFunds(address,uint256)", +"0ba7ebe2": "changeAll(address)", +"0ba8916f": "updateMeterKey(address)", +"0ba8d735": "purch(address,uint256)", +"0ba8ebec": "lockance(address)", +"0ba92878": "delOrganizationCertificate(string)", +"0ba95909": "getMaxAmount()", +"0baaaed9": "setConfigBytes(bytes,bytes)", +"0bab4d84": "setClearingPriceSubmissionDeposit(uint256)", +"0bab718f": "updateCurs(uint256)", +"0bab7ff6": "messiCommunity()", +"0bac0312": "TryUnLockBalance(address)", +"0bac15ae": "PUBLICSALE()", +"0bac2850": "setFunctionFourPrice(uint256)", +"0bac3c01": "isDeferred(address)", +"0bac9fe7": "getUsernameByIndex(uint256)", +"0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", +"0bad4481": "setupRegion(address[16],uint256,uint256,uint256[],bool,uint8[128])", +"0bae2129": "affiliateTree()", +"0bae3288": "getSale()", +"0bae461c": "KomicaToken()", +"0baf0bcc": "lockDateTimeOf(address)", +"0bb0482f": "concatBytes(bytes,bytes)", +"0bb0e827": "add_addys(address[],uint256[])", +"0bb15acc": "GoldeaToken(uint256)", +"0bb18da2": "saveRefundJoinId(uint256,uint256)", +"0bb24375": "ITX_Token()", +"0bb25901": "freezeSupply(uint256)", +"0bb2cd6b": "mintAndFreeze(address,uint256,uint64)", +"0bb2cdef": "operatorManager(address,uint8)", +"0bb3a066": "unsetAdministrator(address[])", +"0bb4bbaf": "testInitialNumberOfVoters()", +"0bb4e6f4": "getTotalWei()", +"0bb536a2": "fightMix(uint256,uint256)", +"0bb563d6": "logString(string)", +"0bb5e62b": "EGC()", +"0bb700dc": "getStats(bytes32)", +"0bb7a81a": "ZhuhuaToken()", +"0bb8b9c3": "zint_convert(string)", +"0bb954c9": "WithdrawAndTransferToBankroll()", +"0bb9ee71": "createRepository(bytes32,bytes)", +"0bb9f21e": "SCAMERC20()", +"0bba3065": "AuthorityFilter()", +"0bba662d": "oneCoin()", +"0bbaa27a": "seedSourceB()", +"0bbad618": "setupReclaim()", +"0bbd4e38": "defrostReserveAndTeamTokens()", +"0bbd501e": "NewEtherPrice(uint256)", +"0bbdb469": "getLuckyblockSpend(bytes32)", +"0bbe0ee3": "transferAllFrom(address,address,uint256[])", +"0bbed2b7": "secondsaleopeningTime()", +"0bbf2768": "infrastruct(uint256)", +"0bbf709a": "validHolder(address)", +"0bbf8f38": "setMinBid()", +"0bbfdbec": "setUsdAmount(uint256)", +"0bc09cfe": "buy(uint256[6][])", +"0bc0c61f": "destroyOwner(address,uint256)", +"0bc1236e": "getTokenAmount(uint256,uint256)", +"0bc16f1b": "presell()", +"0bc1734c": "addPermissions(address[])", +"0bc217d9": "setCastleSale(uint256,uint256)", +"0bc23901": "WalletAddressesSet(address,address,address)", +"0bc2a3b7": "Showercoin()", +"0bc30aa0": "getTicketWinnings(uint256,uint256)", +"0bc311ea": "addFound(address)", +"0bc32570": "_sendTokenReward(address,uint64)", +"0bc32ab6": "tokenToPointBySkcContract(uint256,address,uint256)", +"0bc33b22": "addressJenkins()", +"0bc3a268": "KelvinToken()", +"0bc43490": "yesVotes(uint256,address)", +"0bc4ec45": "FirstDropToken()", +"0bc59a8e": "date15Nov2018()", +"0bc5b2c5": "stage_2_tokens_scaled()", +"0bc5e51e": "endTimeSale3()", +"0bc5f216": "kgtToken()", +"0bc69912": "createICO(bytes,bytes)", +"0bc6b708": "placeBetTESTONLY(uint256)", +"0bc6b89c": "dailySpent()", +"0bc6c96e": "failSafe()", +"0bc7760c": "crowdsaleSet()", +"0bc785df": "ACTToken()", +"0bc7fd93": "toTuis(uint256)", +"0bc8982f": "getBQL()", +"0bc8b4c2": "getMintRequestUintMap(uint256,int256,string)", +"0bc954dc": "addEgg(uint64,uint32,address,uint256)", +"0bc9c89c": "removeMessage()", +"0bca1704": "setHardcupTrue()", +"0bca441b": "BETHERTokenSale(uint256,address)", +"0bca5903": "claimMedals(uint16)", +"0bcab28a": "verifyReceiverAddress(address,address,address,uint8,bytes32,bytes32)", +"0bcb8a23": "getBondDivShare(uint256)", +"0bcbad90": "WLMTPrice()", +"0bcbbd21": "r2()", +"0bcbe35b": "lastBlock_f19()", +"0bcbfe1c": "withdraw_Eth(uint256)", +"0bcd0694": "getUserCities(address)", +"0bcd3b33": "getBytes()", +"0bcd87ed": "dashboardAddress()", +"0bce62ea": "isPreICOPublicOpened()", +"0bce8cdf": "getContributorInfo(address)", +"0bcef54c": "Eticket4Sale(address,address,uint256,uint256,uint256)", +"0bcf963b": "getDocumentsCount()", +"0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", +"0bd11894": "addBuilder(uint256,address)", +"0bd12120": "MMCC()", +"0bd18d7a": "investment(address)", +"0bd263ff": "registerPID(address)", +"0bd2ae1c": "ERW()", +"0bd38767": "testCanClone()", +"0bd3ae61": "EARLY_BIRD_SUPPLY()", +"0bd3cf7e": "Timebomb()", +"0bd58493": "sellMyApple(uint256)", +"0bd5b493": "payPostDrawRef(address,address,uint256)", +"0bd601df": "setLockEndTime(uint256)", +"0bd61e79": "_finalRoundLosersFight()", +"0bd62ad5": "FantasySportsCoin()", +"0bd64dbf": "BsToken(string,string,uint256,address)", +"0bd6a40f": "setWorkerAdress(address)", +"0bd6c769": "Load(address,uint256,uint256)", +"0bd7abde": "setMaxWinRate(uint256,uint256)", +"0bd7b6b8": "computed_fundraise()", +"0bd85158": "setUInt8Value(bytes32,uint8)", +"0bd8599e": "countUp()", +"0bd8a1d0": "auctionFinalized()", +"0bd8a3eb": "SaleEnded()", +"0bd934c3": "UPEXCoin()", +"0bd93738": "updateShareTimeGap(uint256)", +"0bd9c534": "right43(uint256)", +"0bda4dbf": "refundCount()", +"0bdaaaf5": "getAllOperations()", +"0bdab855": "distributeHNC(address[],uint256,uint256)", +"0bdc0031": "STARTBLOCKTM()", +"0bdc7953": "multiBuy(address[],bytes32[])", +"0bdc9c35": "CalculateReward(uint256,uint256,uint256)", +"0bddb83b": "bonusPresale()", +"0bdddb73": "stampOut(address,uint256,uint256)", +"0bdde107": "balanceOfme()", +"0bde1d36": "changeAllowanceToMint(address,address,int256)", +"0bdf3dae": "CryptoRoboticsToken()", +"0bdf5300": "TOKEN_ADDRESS()", +"0be0453b": "StringDemo()", +"0be0713d": "gcSupply()", +"0be0f677": "log(bytes32,string)", +"0be21ea9": "MAX_TIME_EXPLORE()", +"0be23ace": "RealMoney()", +"0be2858e": "multipleTransfer(address[],uint256[])", +"0be48491": "personalMax()", +"0be5430f": "DroneTokenSale(address,address)", +"0be560be": "NarniaUSDT()", +"0be5ca05": "privatePresaleTokenReservation(address,uint256,uint256)", +"0be5efa6": "year2LockAddress()", +"0be6ba2b": "addRestricedAccount(address,uint256)", +"0be702bf": "_v4()", +"0be72b6d": "allOfferingQuota()", +"0be76f80": "memberData(uint256)", +"0be77485": "Unlock(address)", +"0be77f56": "log(bytes)", +"0be80f39": "setComission(uint256)", +"0be80fa9": "changeVisitLengths(uint256,uint256,uint256,uint256,uint256,uint256)", +"0be8287e": "getJackpotInfo()", +"0be9189d": "showInvestorVault(address,uint256)", +"0be924ef": "tier_rate_4()", +"0be96fbd": "MAX_TOKENS_SALE()", +"0be9f930": "REL(uint256,string,uint8,string)", +"0beb90d3": "icoLimit()", +"0bebd0f9": "addAddressToGeneration(address,uint256)", +"0bec3231": "GalaxyChain()", +"0bece492": "setPhaseBonusAddress(address,address)", +"0bed63c7": "_isActive(uint256)", +"0bee1c3e": "availableICO_w2()", +"0beeb0af": "getValue(address,bytes32,address)", +"0beedbd4": "AdoptionRequested(bytes5,uint256,address)", +"0befe82b": "AddBankerPrincipal(uint8,uint256)", +"0befeeb0": "lastCreatedGame()", +"0bf05c99": "DraftPlayer(address,uint256)", +"0bf09985": "openRound(uint256,uint256)", +"0bf0e4e4": "myProfit(address)", +"0bf1c747": "destructed()", +"0bf2c50d": "setCFO(address,bytes)", +"0bf2ee8d": "addPerson(string)", +"0bf318a3": "finalizeCrowdsale()", +"0bf34d54": "CVToken()", +"0bf36806": "Bivacoin()", +"0bf474a9": "claimDonations(address[2],uint256[7],uint8,bytes32[2])", +"0bf5035d": "secondYearEnd()", +"0bf51f36": "updateTime(uint64)", +"0bf53613": "getBonusNow(address,uint256)", +"0bf53668": "consumers(address)", +"0bf61fd4": "t_Slava()", +"0bf63c60": "setBasicCentsPricePer30Days(uint256)", +"0bf6898e": "DPSToken(uint256,string,string)", +"0bf6dbfd": "VanityToken(address)", +"0bf75567": "voteSuperQuorum(uint256,bool)", +"0bf757e5": "HopiumToken()", +"0bf77989": "debug_coinbaseTxSha(bytes,uint256)", +"0bf7fb57": "getUserMilestone(address)", +"0bf82810": "removePartnerAddress(address)", +"0bf84797": "RATE_FOR_WEEK1()", +"0bf867c2": "Zemana()", +"0bf9236a": "KillContracts()", +"0bf9c50f": "calcNextNBonuses(uint256)", +"0bf9fd52": "wasPaid(bytes32)", +"0bfa1191": "setPriceStorageInternal(address,uint256)", +"0bfd1271": "confirmErc20TransactionRequest()", +"0bfd7b62": "getBonusesAmountAvailable(bytes32,uint256)", +"0bfefed4": "createUser(address,string,bool,bool,bool)", +"0bff2ac2": "NewBatch()", +"0bffa8b4": "changeMigrationInfoSetter(address)", +"0c0075a3": "getBallotOptions()", +"0c0078e8": "RESERVED_TOKENS_ANGLE()", +"0c012834": "ARS()", +"0c0174a4": "escapeRequest(uint256)", +"0c01b2ae": "setConfiguration(string,string,uint256,address[],uint256)", +"0c02159f": "HavEtherToken(uint256,string,uint8,string)", +"0c022933": "highTimeBonusValue()", +"0c031f45": "TokenBuy(address,uint256)", +"0c03348d": "getIntel(uint256)", +"0c0399a4": "iteration()", +"0c03f24a": "parseDate(string)", +"0c03fbd7": "getNumPassingTokens(address,uint256)", +"0c0615a7": "evaluate(address,string,string)", +"0c0662a8": "getLastWithdrawal()", +"0c06c3ee": "viewHouseFee()", +"0c06fda1": "AVINCOIN()", +"0c07fa56": "ICO_END()", +"0c087782": "PXLProperty()", +"0c087bc5": "stage1Start()", +"0c08bf88": "terminate()", +"0c08ec49": "importTokensToSidechain(address,address,uint256,bytes32)", +"0c099133": "ERC20TokenFactory()", +"0c0a5c55": "cancelAuth(address,address)", +"0c0a7a68": "Stars()", +"0c0ad299": "removeProject(address)", +"0c0b86ca": "currentAuctionId()", +"0c0bea5c": "FinalTokenToken()", +"0c0c13c8": "query2_fnc()", +"0c0cde7c": "ZIBToken(uint256,string,string)", +"0c0d6caa": "newDrawer(address)", +"0c0e5f0d": "calculateGrapeBuy(uint256,uint256)", +"0c0e6dea": "publicAllocationEnabled()", +"0c0ef2b0": "isGameActive()", +"0c103837": "votedHarvest(address)", +"0c112598": "fun(bytes32)", +"0c119354": "rateMain()", +"0c11dedd": "pay(address)", +"0c11f32e": "milestoneShares(uint256)", +"0c12fe41": "redeemResearchAndDevelopmentBal()", +"0c131629": "RDFToken()", +"0c14080b": "bonusSale()", +"0c15b963": "againAttack(address,uint256)", +"0c15f601": "meltTokens(address,uint256)", +"0c16683e": "SCLToken()", +"0c1688f7": "IstriumToken(address,address)", +"0c1754f0": "BitcoinXToken()", +"0c17d023": "dungeonTokenContract()", +"0c17d42c": "setAlpha(uint256)", +"0c1838e9": "importAmountForAddresses(uint256[],address[])", +"0c18e1c9": "balanceInSpecificTranche(uint256)", +"0c1925f3": "stock(string,string,uint256,string)", +"0c192fe5": "RBCToken()", +"0c195d99": "totalAllocatedTokens()", +"0c196a74": "getInterestRate(uint256)", +"0c19f80e": "checkReferral(address)", +"0c1a8b05": "toSPool(uint256)", +"0c1a972e": "newAccount(string,bytes)", +"0c1b33d2": "setRemainingSupply(uint256)", +"0c1be377": "removeSupport(address,address)", +"0c1c0974": "littPoolIDExists(uint256)", +"0c1c3c14": "registerNameXID(string)", +"0c1c972a": "startPublicSale()", +"0c1ca1ba": "withdrawOwnerEth()", +"0c1cd8cd": "endPvtSale()", +"0c1d4af7": "LogTokenAssigned(address,address)", +"0c1db532": "getPI_edit_28()", +"0c1e3fd4": "submitWithdrawTransaction(address,uint256,bytes)", +"0c1e3fea": "previousState()", +"0c1e517f": "bytes16ToStr(bytes16,bytes16,uint8,uint8)", +"0c1f679f": "WithdrawalTokensAfterDeadLine()", +"0c1fad51": "setSeedSourceA(address)", +"0c1fe4b1": "showTransaction()", +"0c204dbc": "getF()", +"0c2073e4": "LemonSelfDrop2()", +"0c21a2f1": "nextGameMinBlock()", +"0c21e754": "setLLV_edit_9(string)", +"0c237dde": "servusTokensAllocated()", +"0c23cf4b": "buyCardXid(uint256,uint256)", +"0c241b2d": "generateSeedA()", +"0c250dcd": "logUnsigned(bytes32)", +"0c255c94": "max256(uint256,uint256)", +"0c25c6c1": "getBonusUsersCount()", +"0c26a816": "pvpMaxIncentiveCut()", +"0c26ac30": "closeEarlyAdopters()", +"0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", +"0c270f44": "recleared(address)", +"0c2737d2": "incrementCounters(uint256,uint256)", +"0c27677a": "getCRaddress()", +"0c28e291": "Prout()", +"0c294f51": "getAllCounts()", +"0c29e589": "createMyEntity(uint256,bytes32,bool,uint256,uint256)", +"0c2a48e2": "realitycheck()", +"0c2ab324": "SAN()", +"0c2ad9e3": "battle(uint64,uint64)", +"0c2b14fe": "buyCostume(uint256,uint256)", +"0c2b3eda": "TeacherCoin()", +"0c2b4b85": "addGames(bytes32[],bytes32[])", +"0c2b663c": "SDR22(uint256,string,string)", +"0c2bc34d": "indexOf(uint256[],uint256,bool)", +"0c2c5add": "contribute(address,uint256,uint8,bytes32,bytes32)", +"0c2c81ed": "platformFundingSupply()", +"0c2cb820": "setDebug(bool)", +"0c2d71b1": "docStore()", +"0c2e4bf4": "icoStartAt()", +"0c2ec050": "isCurrentRoundFinishing()", +"0c2edc1c": "setExchangeAddresss(address,address)", +"0c2f6f48": "crowdSalePeriodInit()", +"0c31309e": "getPrivatePurchaserStatus(address)", +"0c316d6a": "DTOToken(address)", +"0c319d80": "BidiumToken(address,address,address,address)", +"0c3257d0": "changeUserClass(address,uint256)", +"0c326330": "_isICO()", +"0c3304d1": "mintMAN()", +"0c333556": "Vault(address[],address,address[],address[])", +"0c340a24": "governor()", +"0c345385": "RenaS()", +"0c34644c": "getInstructor(address,address)", +"0c3499ca": "_setSkills(address,uint256,uint256,uint256)", +"0c34f8a5": "addAddressesToWhitelist(bool,address[])", +"0c367f63": "DAEXToken(address)", +"0c36add8": "issue(uint256,uint256,address,address,uint256,address)", +"0c37348d": "buyPreSaleTokens(address,uint256,uint256,string)", +"0c376ee6": "setPvtTokens(uint256)", +"0c38708b": "get_all_project_information(uint256)", +"0c3890b7": "addThing(string,string,string,bytes32)", +"0c3980ef": "NextRewardHalving()", +"0c3a9658": "MTUV1()", +"0c3b3b70": "Unihorns(uint256,string,string)", +"0c3b7b96": "minTokensToCreate()", +"0c3c450e": "icoHashedPass()", +"0c3c92a3": "finishHardcap()", +"0c3cebfa": "issueTo(bytes32,uint256)", +"0c3d5157": "contractStartTime()", +"0c3dbf43": "removeMarket()", +"0c3dfa0e": "SLoader()", +"0c3e2d2d": "getTotalFundsRaised()", +"0c3e3c58": "getAdministerList()", +"0c3e4004": "GraceCoin()", +"0c3e564a": "airDeliverMulti(address[],uint256)", +"0c3f08c6": "newGame(uint8,string,string,bytes32,uint256)", +"0c3f0cac": "getLastPlayer(string)", +"0c3f1f14": "updateSupply()", +"0c3f64bf": "isDev(address)", +"0c3f6acf": "currentState()", +"0c402ed8": "confirmMinting(uint256)", +"0c424284": "setWhitelistStatus(address,bool)", +"0c4326a0": "getMajorMinorPatch(bytes32)", +"0c432c8d": "calcJadeReceived(uint256,uint256)", +"0c432f1f": "handleLastRef(address)", +"0c433edf": "receiptUsed(address,address,uint256)", +"0c437aa7": "setMandateInBlocks(uint256)", +"0c44ba40": "getMyTicketAddresses(address)", +"0c45361f": "creators_count()", +"0c45453c": "_feed(uint256,bytes32)", +"0c45e8d7": "roomsAvailable(string,uint256[])", +"0c4641d3": "BJCToken()", +"0c46fc92": "deliverLastMilestone(bytes32)", +"0c486a96": "requestPayment(uint256,uint256)", +"0c486c00": "CNRToken()", +"0c48ae9e": "createAdSlot(string,uint256,uint256,uint256[])", +"0c48c6bd": "getBonusMultiplierAt(uint256)", +"0c48e582": "updateVendor(address,address)", +"0c497094": "createAngel(uint8)", +"0c49c0a2": "MIN_CONTRIBUTION_AMOUNT()", +"0c49c36c": "sayHi()", +"0c4a3338": "CheckTime(uint256)", +"0c4a5153": "commitStageActive(uint256)", +"0c4a8d94": "STAGE_3_FINISH()", +"0c4a9869": "unregisterContract(bytes32)", +"0c4ada17": "cards_gold(uint256)", +"0c4ae1ca": "cancelBooking(address,address)", +"0c4bfa94": "left13(uint256)", +"0c4c4285": "setHash(bytes32)", +"0c4d6bdf": "EarlyBirdsFinalized(uint256)", +"0c4dd1d9": "totalUsdAmount()", +"0c4ecab4": "confirmations(bytes32,address)", +"0c4f65bd": "getOwnerAddress()", +"0c4f8f6f": "regularTransfer(bytes32,bytes32)", +"0c50b116": "BTHPoint()", +"0c51015d": "adjustTap(uint256)", +"0c51171d": "getTokensSold(address,bytes32)", +"0c516283": "freezeHybridizationsCount(uint256)", +"0c5241fa": "LOL6()", +"0c525571": "arraySum(uint16[])", +"0c52780d": "unCertifyDelegate(address)", +"0c52bb4c": "auditorsList(uint256)", +"0c547097": "goldenTicketOwner()", +"0c549dd9": "getCET6ByAddr(address)", +"0c54ce44": "ProofOfRipple()", +"0c5532bf": "singleValueAirdrop(address,address,address[],uint256)", +"0c55699c": "x()", +"0c5589b8": "DecreaseWithdrawalAmount(uint256)", +"0c559757": "setHouseEdge(uint8)", +"0c55d925": "deleteBytesValue(bytes32)", +"0c55d9a4": "confirmStaking()", +"0c55f818": "CTU_ADDRESS()", +"0c560c64": "USD(uint256)", +"0c58062b": "teamLockPeriodInSec()", +"0c584803": "SGTMock(address)", +"0c58bcb8": "EthLendToken(address,address,address)", +"0c58e23c": "ZClassicGold()", +"0c59b556": "viewCoinsKarmaBySymbol(string)", +"0c59c570": "CashTron()", +"0c5a534e": "allowBuying()", +"0c5a97a6": "getProviderName(uint256)", +"0c5c2ca3": "getIndexName(bytes)", +"0c5ce593": "open(address,bytes32,uint256,uint256)", +"0c5d919d": "totalsuplly()", +"0c5e3f11": "nestedFirstManyToSome(uint256,uint256)", +"0c5ebb1a": "userForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"0c5ed9d5": "REB()", +"0c5f9a60": "allocationFee(bytes32)", +"0c5fd414": "preOrder(address,address,address,address,bytes32,uint256,uint256,uint256)", +"0c5fd4b2": "minttoken(address,uint256)", +"0c60223e": "withdrawAuctionBalance(address)", +"0c61257e": "WartegToken()", +"0c620494": "changeAllowTransferWallet(address)", +"0c62b816": "minableSupply()", +"0c62bfbb": "_calcNextRate()", +"0c636091": "adoptAxies(uint256,uint256,uint256,address)", +"0c646fbd": "get_entity_count()", +"0c64a739": "price_exponent()", +"0c64a7f2": "remainingTime(uint256)", +"0c657eb0": "bankroll()", +"0c65829b": "_setSkills(address,uint256,uint256[],uint256[])", +"0c65e229": "startICOPhaseThree()", +"0c662943": "_lockup(address,uint256,uint256)", +"0c66adf8": "getCurrentRoundInfo(uint256)", +"0c68194f": "getCourseIdOfStudent(address)", +"0c68a104": "fundingMaxInEth()", +"0c68ba21": "isGuardian(address)", +"0c68f917": "cancelOfferingProposal(address,uint256)", +"0c693110": "getVoted(address,uint256)", +"0c6940ea": "addMeToAllGames()", +"0c69b189": "claimCrystal()", +"0c6a3161": "RESERVE_ADDRESS()", +"0c6a5be4": "Arexium(uint256,string,uint8,string)", +"0c6a62dd": "updateCurator(address)", +"0c6b1324": "Etherboard()", +"0c6bfdd0": "openTheRabbitHole()", +"0c6cbf92": "lastPayOut()", +"0c6cd73a": "issueCard(uint256,uint256,uint256)", +"0c6d1efb": "releaseEachTokens()", +"0c6ddc0d": "getUserAllowance(address)", +"0c6de527": "addToBonusSeed()", +"0c6df351": "doBondBonusTransfer(address,address)", +"0c6e29e3": "subscribeToPool()", +"0c6fc9b2": "processTakerOrder(uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"0c6fe674": "getPresaleTotal(uint256)", +"0c700183": "listGlobalAuditDocuments(uint256,bool)", +"0c7013c1": "send(address,address[],address,uint256[])", +"0c70f055": "getRandomRarity(uint32,uint256)", +"0c71614c": "divsforall()", +"0c717036": "colourID(uint8,uint8,uint8)", +"0c71b48c": "BTCTransactions(bytes16)", +"0c72bf39": "ArtToujourToken()", +"0c72fe56": "_payBidAllocationFee(bytes32)", +"0c736e04": "refundForValidPartners(uint256)", +"0c73a392": "getLogSize()", +"0c740736": "addPicture(string,uint32,uint32,uint32,uint32,string,string,string)", +"0c7452b8": "viewPetitionSignerWithAddress(address,uint256)", +"0c74be3d": "TIME_TO_MAKE_TOMATOES()", +"0c7516fd": "numPurse()", +"0c754b9f": "BuyOptions(address,uint256,string,uint8)", +"0c75941a": "setContractMessage(string)", +"0c76316d": "withdrawPot()", +"0c763fef": "showContractMsgSender(address)", +"0c77a697": "claimFounders()", +"0c77b44e": "setLedger(address,address)", +"0c790369": "maxMessageChars()", +"0c798c81": "SCCToken(address,address)", +"0c79af3d": "witrhdraw(uint256)", +"0c79e3e6": "setCrydrStorage(address)", +"0c7ac7b6": "arbitratorExtraData()", +"0c7b5616": "Time_Start_Crowdsale()", +"0c7befb2": "_tokenLayersExist(uint256)", +"0c7bf731": "pendingRemain()", +"0c7ca61e": "ArrAccountIsFrozenByDate(uint256)", +"0c7caded": "destroyMe()", +"0c7d8c20": "_register(bytes32,address)", +"0c7de59d": "edit(address,bytes,bool)", +"0c7e30b7": "getUsdCentsFromWei(uint256)", +"0c7eca6e": "setCurs(uint8)", +"0c7ef39b": "HUBTToken()", +"0c7f076e": "advisoryReserveTokensDistributed()", +"0c7f27ba": "COE()", +"0c8004b5": "buyTokens_Address(address,uint256,bytes8)", +"0c80d6dd": "view_last_result(address,address)", +"0c8114d3": "_forwardFunds(address,uint256)", +"0c8135a7": "getTeamOwner(uint256)", +"0c8209b6": "manualWithdrawEtherAll()", +"0c823abe": "importedTokens()", +"0c828c42": "getTxIndex(uint256)", +"0c82b942": "whitelistRemove(address[])", +"0c832ef0": "restoreOwner()", +"0c8367fb": "HALAL()", +"0c83700a": "divCutPool()", +"0c8496cc": "getReturnByPath(address[],uint256)", +"0c857b25": "getLoveLock(uint64)", +"0c85b18c": "SetBuildingData(address,uint256,uint256,uint256,uint256,uint256)", +"0c85feea": "matchOrders(uint64,uint64)", +"0c861d4b": "Aeron()", +"0c87355e": "BANCOR_CONVERTER_UPGRADER()", +"0c875c8d": "Withdrawn(uint256,uint256)", +"0c898482": "getShare(address,address)", +"0c89a0df": "transferTokens(address)", +"0c89b766": "randomSource()", +"0c89ef35": "hasEnoughAllowance(address,address,uint256)", +"0c89ef67": "PXMCCoin(uint256,string,uint8,string)", +"0c8a611f": "getInvestorsETH(address)", +"0c8ac6f7": "transferAnyTokens(address,address,uint256)", +"0c8b29ae": "hodlTillBlock()", +"0c8b494d": "RadarSpeedChain()", +"0c8bae5c": "sellTokensForBtc(string,address,uint256,uint256)", +"0c8bd2c5": "Issue(address,address,address,address)", +"0c8bdcfa": "GetPolicy(address,string,string)", +"0c8c0392": "listAsset(uint256,uint256,uint256,uint256)", +"0c8c085f": "getNumContents()", +"0c8dfeda": "maxLinkedWalletCount()", +"0c8e3166": "assignAtheniansToBattle(uint256)", +"0c8e9977": "whitelist_pool(address,address,uint256)", +"0c8f167e": "TOKENS_SOLD()", +"0c8f78fb": "setGasAmount(uint256)", +"0c9066dd": "getZodiac(uint256)", +"0c90da51": "End2()", +"0c915c74": "releaseWithStage(address,address)", +"0c91af81": "IGTUSD()", +"0c91e624": "Winner(string,address)", +"0c91f2d0": "rewardForWork(address,address,uint256,bool)", +"0c92b17b": "checkBurnTokens()", +"0c932e77": "ritualFee()", +"0c938c3f": "changeSubscriptionFee(uint256)", +"0c939ae1": "KYROInv()", +"0c93c981": "playBatch(uint256[],uint256[])", +"0c96526b": "getRateUsd()", +"0c96c4ea": "triggerRelease()", +"0c97200a": "getLoansCount()", +"0c975447": "lowBonusRate()", +"0c976ace": "existenceApproveTest(address)", +"0c97bb77": "curConfig()", +"0c98048d": "transferFromAdmin(address,uint256)", +"0c981d58": "closeGame(address)", +"0c987501": "EtheraffleFreeLOT(address,uint256)", +"0c990004": "createToken(uint256,address,bytes32,uint256,uint256,bytes32)", +"0c99d807": "_isValidBlock(uint8)", +"0c9a6c24": "getUserCoinMarketValue(uint16,uint256)", +"0c9b016c": "expItemClass()", +"0c9b5777": "Erc20()", +"0c9bb7d2": "denyByPassword(bytes8,bytes)", +"0c9bc2c0": "calculateNonVestedTokens(uint256,uint256,uint256,uint256,uint256)", +"0c9be46d": "setCharityAddress(address)", +"0c9c1c58": "setAltFundAddress(address)", +"0c9cbfee": "moveProduct(address,address,uint256)", +"0c9daf45": "vcxWallet()", +"0c9dc2b8": "checkEthFundDepositAddress()", +"0c9dd381": "RewardTransfered(uint256,address,uint256,uint256,uint256)", +"0c9f6ed8": "ZEXCoin()", +"0c9f88c0": "Zignal()", +"0c9f980f": "isCSO(address)", +"0c9fcec9": "setApproval(address,address,uint256)", +"0c9fd581": "assertTrue(bool)", +"0c9fe5eb": "PIXEL_COUNT()", +"0c9ff620": "listINF()", +"0ca09e1e": "XoudCoin()", +"0ca1988b": "getnum(address)", +"0ca1c5c9": "getTotalMinted()", +"0ca2bda2": "isAllowedTransferDuringICO()", +"0ca2f2fd": "MultiBonusCrowdsaleMock()", +"0ca35682": "recover(uint256)", +"0ca35c22": "setScouponTransferCost(uint256)", +"0ca36263": "exit(bytes32)", +"0ca40865": "capRound2()", +"0ca413a4": "getDateRanges()", +"0ca435a6": "grabBooty()", +"0ca4f838": "BetCommunity()", +"0ca5bdb4": "novaBurn()", +"0ca5f72f": "rewardPercentageDecimals()", +"0ca621a8": "updateSplitandEmit()", +"0ca6afa7": "EtfToken()", +"0ca6d310": "setNamePiture(uint256,string)", +"0ca72e82": "testGetLawyerCount()", +"0ca7395f": "returnFund(address,uint256)", +"0ca78923": "updateConnector(address,uint32,bool,uint256)", +"0ca8fe1e": "burnCoins()", +"0ca9183c": "icoFundingRatePredictionBonusInPercentage()", +"0ca97903": "emergency(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"0ca9897c": "citePaper(address)", +"0ca99ca8": "hardCapInWei()", +"0ca9c14e": "PryvCn()", +"0caa1d84": "isUserGranted(address,string)", +"0caa5d91": "UserDestroy(address,address)", +"0caa8605": "getStage3End()", +"0caaa284": "PresaleClosed(uint256,uint256)", +"0caab83a": "poolBounty()", +"0cab068c": "isVestingRevoked()", +"0cac54ed": "claimTransfer(address,address)", +"0cacbf21": "getSponsorshipsSortedByAmount(address,uint256)", +"0cadc5b3": "deliverBonus()", +"0cae3cbb": "checkStageCondition()", +"0caeb350": "upgradeValue(uint256)", +"0caee2ca": "calculatePayout(uint256,uint256,uint256)", +"0caf10b2": "GreenEnergy()", +"0caf9d39": "testFailTooManyMembers()", +"0cafabd8": "getTPrice()", +"0cafef9c": "Clen(uint256,string,uint8,string)", +"0cb08716": "airdropDynamic(address[],uint256[])", +"0cb08e3b": "_finalizeICO()", +"0cb09309": "ArysumToken()", +"0cb0a44b": "enableInvestment()", +"0cb0c7f0": "forceOwnerChange(address)", +"0cb1982b": "updateNAV(uint256)", +"0cb1d243": "ICT(uint256,string,string)", +"0cb1d6b4": "fourthWeek()", +"0cb296ae": "Gemstones()", +"0cb335c4": "setMissedVerificationSlashAmount(uint256)", +"0cb5f653": "newUser(address)", +"0cb60443": "minRate()", +"0cb61d7a": "setCurrentBonusPercent(uint256)", +"0cb6aaf1": "keys(uint256)", +"0cb6b577": "TOKEN_DECIMAL()", +"0cb743a5": "buyOld(uint256)", +"0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", +"0cb795e8": "getDividendInfo(uint256)", +"0cb7eb4c": "getReleaseTime(address)", +"0cb812d3": "openWithoutCounterparty(address[4],uint256[3],uint32[4])", +"0cb9208a": "JorgeCoin()", +"0cb97f57": "advisorsTotal()", +"0cb9da1b": "RedemptionContract(address,uint256)", +"0cb9ec43": "TemperatureMeasurementB(address,uint32,uint64)", +"0cb9ee4b": "getAllPlayerObjectLen()", +"0cba5853": "angelCollection(uint64)", +"0cba6d27": "getSocialAccountsLength()", +"0cbb0f83": "entryCount()", +"0cbc90d8": "makeProposal(address,uint8,uint256,address)", +"0cbc9ce7": "sendToToteLiquidatorWallet()", +"0cbe1eb8": "USDDOWNLOADPRICE()", +"0cbf0601": "numMessagesSigned(bytes32)", +"0cbf54c8": "auctionDuration()", +"0cbf711a": "LogClosed()", +"0cbf7ec0": "startPrivateIco()", +"0cbfe979": "updatePrivateSaleWithMonthlyLockupByIndex(address,uint256,uint256,uint256)", +"0cc00bc9": "MarketPlace(address,uint256)", +"0cc03e7a": "claimShare(uint256)", +"0cc04b55": "adminUnregister(string)", +"0cc06221": "getUserAccountInfo(address)", +"0cc10550": "BIToken()", +"0cc2001c": "TastToken()", +"0cc20a0c": "getHoldEarningsInRound(address,uint256)", +"0cc3ad77": "verdictExecuted(address,bool,uint256)", +"0cc3db97": "_createToken(uint256,uint256,uint256,uint256,address)", +"0cc4330c": "visit()", +"0cc4fb87": "changeGeneralSaleEndDate(uint256)", +"0cc6373f": "tokenExchangeRateMile3()", +"0cc69a27": "Marketplace(address,address)", +"0cc69b5b": "NOKIA()", +"0cc7086b": "canBurnUtility(address,uint256)", +"0cc73b6a": "BLOCKS_PER_ROUND()", +"0cc79a85": "getEnded()", +"0cc8299b": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()", +"0cc87b1c": "soldPreSaleTokens()", +"0cc88021": "hasPlayer(address)", +"0cc8c9af": "getOrCreateNextFeeWindow()", +"0cc91bb9": "setEarlyParicipantWhitelist(address,bool,uint256,uint256)", +"0cc966fa": "buy(address,address,uint256,uint256,uint256,bool)", +"0ccc642e": "emergencyFlagAndHiddenCap()", +"0ccc68bb": "_create_mineral(bytes32,address,uint256,uint256)", +"0ccc88b1": "BurnupGameBase()", +"0cccfc58": "auctionPeriod()", +"0ccde0b1": "initialSupplyPerAddress()", +"0ccec396": "getNumReleases()", +"0ccf30f1": "setRentTime(uint256)", +"0ccf5af4": "_prizeAmount()", +"0ccfdd8b": "potentiallyCirculatingPop()", +"0cd0563b": "broadcast(string)", +"0cd0c3d7": "resetRental()", +"0cd1812f": "sendFundsTo(address,uint256)", +"0cd205bb": "CrowdsaleContract(uint256,uint256,address,uint256,uint256)", +"0cd28e9d": "getRoundPlayerList(uint256)", +"0cd2b327": "approveSponsorableJob(address,uint256,address)", +"0cd30783": "getcompany(uint256)", +"0cd3c7f7": "ransom()", +"0cd3fad2": "_base64decode(bytes)", +"0cd4700a": "NT()", +"0cd522da": "returnStartBlock(uint256)", +"0cd55abf": "nextNonce(address)", +"0cd5ea83": "earlyBirdDuration()", +"0cd641b2": "tokenForComunity()", +"0cd64ad0": "changeEthDailyLimit(uint256)", +"0cd6ceb3": "Boldman()", +"0cd74cd9": "etherWallet()", +"0cd7d0f2": "DestlerDoubloons()", +"0cd865ec": "recover(address)", +"0cd8dd0b": "setXPTokenAddress(address)", +"0cd9aec6": "testFailTrustWhenStopped()", +"0cd9f271": "buy10()", +"0cda88ce": "mul256By256(uint256,uint256)", +"0cdbf3dd": "setReferralsMap(address[],address[])", +"0cdc92ea": "canBeCanceled(uint256)", +"0cdd4234": "mainAddress()", +"0cddb437": "CNDTPrivate()", +"0cde0e7d": "solve(int256,int256,int256,int256)", +"0cde6009": "KinTokenSale(address,uint256)", +"0cded5f0": "migratePool()", +"0ce08a49": "refundAmount(uint256)", +"0ce10cbd": "changeOwnerToZero()", +"0ce11049": "setBCoinContractAddress(address,address)", +"0ce11a77": "registrarAddress()", +"0ce11ded": "updateMthEthRate(uint256)", +"0ce18afc": "TabToken()", +"0ce1f4b7": "toB32(bytes,uint256,bytes)", +"0ce3151c": "personUpdateRelation(uint256,string)", +"0ce38276": "setColorYellow()", +"0ce3d998": "fetchCancelledOrdersForMerchant()", +"0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", +"0ce4c990": "minRevenueToDeliver()", +"0ce4e104": "bnbTokenWallet()", +"0ce52e25": "time_on_trademarket()", +"0ce5a098": "getWordCount()", +"0ce64868": "setPendingValue(uint256,string)", +"0ce6bd26": "EtherCarbon()", +"0ce71356": "canPropose(address,uint256)", +"0ce84479": "Wallet10()", +"0ce8544a": "Ethlyte()", +"0ce90ec2": "levelUp(uint256)", +"0ce96e71": "removeAddressFromQueue(uint256)", +"0cea64a0": "callSomeFunctionViaOuter()", +"0cea7534": "withdrawMargin(uint256)", +"0ceaeb5a": "ecosystemSupplyRemaining()", +"0cec1ecd": "getPixelDistributor()", +"0cecf728": "ListingCancelled(bytes5,uint256)", +"0ced5b02": "buyTokens(uint128)", +"0cedd0bd": "_getDestinationPartition(bytes32,bytes)", +"0cee1725": "withdrawFund(uint256)", +"0cee22e9": "testSetBalanceSetsSupply()", +"0cef7d5a": "WBW(uint256,string,uint8,string)", +"0cef9a27": "add2MarketPlace(uint256,uint256,uint256)", +"0cefa4de": "minPersonalCap()", +"0ceff204": "withdrawRevenue(uint256)", +"0cf01051": "startFunding()", +"0cf039e3": "setBuyRequestLimitInterval(uint256)", +"0cf044ee": "enable_exploration()", +"0cf1d050": "withdrawAllToExchange(address,uint256)", +"0cf1dafc": "refreshRate(uint256)", +"0cf1dd6e": "BattleOfThermopylae(uint256,uint256,uint8,address,address,address,address)", +"0cf20cc9": "withdrawBalance(address,uint256)", +"0cf3da77": "ELCToken()", +"0cf45ba5": "updateFirstDuel2(uint256)", +"0cf56f3f": "addBetWithReferrer(uint256,address,address)", +"0cf59cc6": "changeScientistForElement(uint256,uint256)", +"0cf6d879": "getARInvTable()", +"0cf7193d": "Tradex()", +"0cf79e0a": "transfer(uint256,uint256)", +"0cf7f3b5": "changePrice(uint256,uint64)", +"0cf820e0": "lengthOfRecord(uint256)", +"0cf838e1": "Test2(address)", +"0cf85c4c": "stateMask()", +"0cf868bf": "_airdropLimit()", +"0cf8bcab": "setItemTransferable(uint256,bool)", +"0cf935c0": "getDegreeCount()", +"0cf93a60": "ICOweek1End()", +"0cf94990": "checkMD(address)", +"0cf94cda": "calcInvitationAmount(uint256)", +"0cfa0318": "approveBurn(address,uint256)", +"0cfa1d12": "rndExtra_()", +"0cfa8af4": "deleteCandidateByStage(address,uint256)", +"0cfb37a7": "revealProofOfPerfBlock(uint32,bytes32,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", +"0cfbf6c6": "lockConfiguration()", +"0cfccc83": "SUPPLY_CAP()", +"0cfd0a0d": "INDI()", +"0cfd2c6a": "RecreationCultureMassMediaCoin()", +"0cfed2a2": "pauseSale(bool)", +"0cff4058": "AacharyaToken()", +"0d009297": "initOwner(address)", +"0d011088": "convert2(string,string,address)", +"0d015e4b": "get_depositLock()", +"0d01c1ae": "set_Area_name(string)", +"0d02369b": "takeSellOrder(address,uint256,uint256,address)", +"0d024f83": "DownStats(uint256,uint256,uint256,uint256)", +"0d02e05c": "setBuyStatus(bool)", +"0d032623": "getRemainingCompanyTokensAllocation()", +"0d043a60": "getRewardsWithdrawn(uint32,address,address)", +"0d047c5b": "NewFounderAddress(address,address)", +"0d047d49": "getFashionsAttrs(uint256[])", +"0d051c52": "clearCrowdsaleCloseTimer()", +"0d052f39": "getBurnAdminApproval(address,address)", +"0d055d1e": "sendBill(uint256)", +"0d0567ae": "latestAddress()", +"0d058fe3": "create(uint256,string,address)", +"0d062959": "FXTOKEN(address,uint256,uint256)", +"0d06a2ee": "setBenefeciar(address)", +"0d0a1901": "secondReserveAllocation()", +"0d0a6bf2": "investor_clearRefBonus(address)", +"0d0abf52": "matureBalanceOf(address)", +"0d0b0c74": "loadN(uint8[],uint256,uint256)", +"0d0b86c6": "CryptaurDepository()", +"0d0b8825": "weiPerRtc()", +"0d0bfb2f": "ba2cbor(bytes[])", +"0d0c0c51": "LogParticipation(address,uint256,uint256)", +"0d0c2008": "TwoAndAHalfPonzi()", +"0d0c2c62": "MOTDiscount()", +"0d0c529a": "getacttslen()", +"0d0cd4f4": "allWalletBalances(address)", +"0d0d0554": "ARMYToken()", +"0d0d7dc9": "raiseEvent2()", +"0d0ed6b9": "fetchAllCandidatesByIndex(uint256)", +"0d1017d6": "EnterRentCrowdsale()", +"0d10e842": "weiAmount()", +"0d1118ce": "burnTokens(address,uint256)", +"0d117d16": "chunk1IsAdded()", +"0d11dd70": "currentRefundInvestorsBallot()", +"0d121337": "transferOperatorRole(address)", +"0d126bc4": "getCurso()", +"0d1352cf": "marketAnts()", +"0d13bec6": "SellAcorns(uint256)", +"0d13d85e": "transferMintTokens(address,uint256)", +"0d13ea7d": "BONUS_2_DAYS()", +"0d145d16": "RegisteredPlayer(address,uint256)", +"0d14ed4f": "midgradeOpen()", +"0d157352": "ForkiToken()", +"0d15fd77": "totalVotes()", +"0d16b6ca": "setBTCRate(uint256)", +"0d16cba5": "addMessage(address,address,address,string)", +"0d172a01": "transferTokenTo(address,address,uint256)", +"0d174c24": "setWithdrawer(address)", +"0d17ace0": "currentDiscountPercentage()", +"0d17bc2e": "_disallow()", +"0d17c576": "_deliverBonusTokens(address)", +"0d18952b": "UpdateReleasePrice(uint32,uint256)", +"0d1946df": "MasterToken()", +"0d1a0c62": "setPackSize(uint256)", +"0d1a0d5e": "TokensPurchased(address,uint256,uint256,uint256)", +"0d1a94de": "SeriesCreated(uint256)", +"0d1ce2d2": "activateToken(address)", +"0d1cf200": "muscFund()", +"0d1d38aa": "info(uint256,bytes32)", +"0d1d6ffd": "checkTransferIn(address,uint256)", +"0d1d8d6d": "listTeams()", +"0d1dcd74": "foundersRewardsMinted()", +"0d1edad1": "Start8()", +"0d1ee029": "add(string,int256)", +"0d1efd7d": "getDistrictCode()", +"0d1f3471": "deleteRecord(address)", +"0d1f9bb6": "isBetLocked()", +"0d1fce42": "getBankroll()", +"0d20a889": "getRegistrantId(address)", +"0d213d31": "migrateTo(address,uint256)", +"0d2218d6": "millRaised()", +"0d229be7": "priceTokenWei()", +"0d24317d": "_getTotalHp(int256,int256,int256,int256)", +"0d244d68": "setNotRetractable(bytes32)", +"0d25320c": "distributedAmount()", +"0d2560ee": "addMe()", +"0d25b6f2": "getMonsterName(uint64)", +"0d260b60": "_sendTranche(bytes32,address,address,uint256,bytes,bytes)", +"0d2646d4": "switchNodes()", +"0d26c879": "getTotalFundationTokens()", +"0d271720": "transferFromAdmin(address,address,uint256)", +"0d274929": "getChannelName(uint256)", +"0d27864f": "TokenSwapOver()", +"0d278a8b": "Technology3GCrowdsale(uint256,address,address)", +"0d2806ad": "TOKEN_PRICE_D()", +"0d285d8c": "ETH_TO_QST_TOKEN_RATE()", +"0d28f8d1": "importIsland(bytes32,address[3],uint256[7],uint256[8])", +"0d290220": "getAllCardsType()", +"0d290deb": "SumToken()", +"0d294629": "splitProfits()", +"0d298318": "heapSort(uint128[])", +"0d2a1fa7": "mintAfterIcoPeriod()", +"0d2a246e": "tokenDividend()", +"0d2a25bb": "tentimes()", +"0d2bd1ac": "changeFact(string)", +"0d2be064": "buyToken(address,uint256,uint256,bool)", +"0d2cbe13": "settleBet(uint256,uint256)", +"0d2cc54a": "rebirthAxie(uint256,uint256)", +"0d2ce376": "submitVote(bytes32,bytes32)", +"0d2e017b": "getGamers()", +"0d2e677a": "getHotels()", +"0d2f2971": "authorized_recordFailedOldOwnerTransfer(address)", +"0d2f99d0": "removeChild(address,bytes32,bytes32)", +"0d2fc226": "createTokenUri(uint8,uint8,uint64,uint64,uint64)", +"0d3016bf": "_getIPFSHash(address,bytes32)", +"0d301c75": "removeFromGoldList(address)", +"0d30afb0": "CONFIG_DICE_SIDES()", +"0d310998": "DataContacts(address,address,address,address)", +"0d3167da": "BarmatzTestToken()", +"0d325b29": "setTokenApproval(uint256,address,bool)", +"0d329d14": "ICOtotalSupply()", +"0d334130": "m_callbackGas()", +"0d33cfa0": "meltAddress(address)", +"0d342cab": "autoTransfer()", +"0d3471f9": "sumHardCapICOStage5()", +"0d349aea": "updatePaid(address,address,uint256)", +"0d35f64c": "teamReservedBalanceOf(address)", +"0d3665b5": "IloveYou()", +"0d368fee": "deverify(address)", +"0d36c02c": "BACKUP_TWO()", +"0d3737b0": "mintAgent()", +"0d37ac7f": "toggleFunding(bool)", +"0d381a28": "tokensByOwner(address)", +"0d381cad": "addJobContract(uint256,string,bool)", +"0d38a077": "affRegister()", +"0d38ea48": "ethreceived()", +"0d38ffcd": "donationRate()", +"0d392cd9": "updateWhitelist(address,bool)", +"0d39820c": "preInvestStart()", +"0d39968c": "funderSmartToken()", +"0d3a557e": "_allowance(uint256,uint256,bytes32)", +"0d3ade73": "adjustNextTranche(uint8,uint8)", +"0d3b7901": "withdrawBonus(address[])", +"0d3c1b45": "addLayer(address,uint256,string,string)", +"0d3c7519": "distribute_NRT()", +"0d3cb409": "getAdjudicatorAddress()", +"0d3e4044": "binary_search(uint256,bytes32)", +"0d3f5cb5": "findCliPendTAndSetPrfm(address,address)", +"0d3fbdf8": "getPI_edit_8()", +"0d40022a": "_buildShip(uint16,uint16,uint8,bytes32)", +"0d40e8d6": "supportHarvestQuorum()", +"0d41117f": "calculateFee(uint256,uint256,uint256,bytes32,bool,bool)", +"0d42240a": "isWhiteListedAddress(address)", +"0d425559": "ownerSetMiningProfit(uint256)", +"0d441f8c": "totalNacInPool()", +"0d44cf79": "lastDelayedSetStake()", +"0d465263": "assessFees()", +"0d469483": "fiatToWei(uint256)", +"0d46f410": "getProposalParent(bytes32,bytes32)", +"0d46f877": "irucoin()", +"0d46f91a": "kycCertifier()", +"0d472f5f": "airdrop_byadmin(address,uint256)", +"0d4766a3": "STARTING_SHITCLONE()", +"0d480993": "getFoundersTokens(uint256)", +"0d483442": "NO()", +"0d4891ad": "signalDoneDistributing(uint256)", +"0d48a771": "claim(address,uint256,uint256,uint8,bytes32,bytes32)", +"0d48e8d0": "doBalance()", +"0d494a05": "isICOUp()", +"0d498b1e": "setTokenSPUsdCentPrice(uint256)", +"0d49a0f0": "addProofOfPerfBlock(uint32,bytes32,bytes32,bytes32,bytes32)", +"0d4a464f": "_newHorseShoe(uint256,uint256,uint256,bool,bool,address)", +"0d4a690a": "KopiToken()", +"0d4a8b3b": "wadmin_freezeAccount(address,bool)", +"0d4b8208": "convertCarbonDollar(address,uint256)", +"0d4c8f62": "setPayouts(uint256,uint256,uint256)", +"0d4d1513": "mint(address,uint256,address)", +"0d4d389f": "POOL_EDIT_4()", +"0d4e03e1": "changeTargetWallet(address)", +"0d4ea316": "buyLandWithTokens(bytes32,int256[],int256[])", +"0d4faa05": "acheter()", +"0d50266c": "TEAM_PERCENT_GZE()", +"0d505d54": "GDX()", +"0d5260e7": "setGasReserve(uint256)", +"0d5269ab": "distributeInviteReward(uint256,uint256,uint256,uint256,uint256)", +"0d5302c4": "DEVCLASS_EXTRACTION_BASE()", +"0d533e99": "UnlockEvent(address)", +"0d53b406": "recordEscrowOnBid(uint64,uint64)", +"0d543862": "sigBountyProgramEDUSupply()", +"0d54c49e": "processEndGame(uint256)", +"0d550b75": "allowance(uint256,address,address)", +"0d55af64": "AFRIHUBcredits()", +"0d5624b3": "preSaleStart()", +"0d567f38": "setStartRound(uint256)", +"0d571742": "setGenesisAddress(address,uint256)", +"0d57a47f": "setTokenCountFromPreIco(uint256)", +"0d582f13": "addOwnerWithThreshold(address,uint256)", +"0d5866e2": "setDeprecated(address)", +"0d59b564": "submitTransaction(address,uint256,bytes,uint256)", +"0d59c736": "Gavsino()", +"0d5a13f4": "BitdealCoin(address)", +"0d5a5c32": "CROWDSALE_OPENING_TIME()", +"0d5a621b": "childContractByIndex(uint256,uint256)", +"0d5be2df": "ballotLog(address,uint256)", +"0d5d6f7a": "BitEyeExchange(address)", +"0d5defa4": "escrowAddress()", +"0d5dfdd8": "debugVal4()", +"0d5e1e82": "redeemReputation(bytes32,address)", +"0d5e4c8d": "initialPrizeWeiValue()", +"0d5e87f4": "calcTokenAmountByZWC(address,address,uint256)", +"0d5f8f17": "setXWinContractAddress(address)", +"0d5fced3": "CHAJING()", +"0d605c4a": "NUM_RESERVED_AXIE()", +"0d60889c": "Thanks(address,address,uint8,uint8)", +"0d609939": "setParameters(uint256,uint256,uint256,uint256,address,address)", +"0d60e231": "migrationRewardTotal()", +"0d6103a1": "unsoldTokensBack()", +"0d616d20": "withdrawContribution()", +"0d61a4ff": "HUT34_VEST_ADDR()", +"0d61b519": "executeProposal(uint256)", +"0d61cd5d": "mintICD(address,uint256)", +"0d623e10": "oracleType()", +"0d63e87d": "setIntervalTime(uint256)", +"0d63fdbe": "parseOutputScript(bytes,uint256,uint256)", +"0d6495ef": "View_MediatedTransaction_Status(uint256)", +"0d649f90": "getVisaIdentifier(address,uint256,uint256)", +"0d65d50b": "TIER3()", +"0d65e3e7": "IS_SIGNATORY(address)", +"0d66343c": "getPaintingOwner(uint256)", +"0d668087": "lockTime()", +"0d668818": "dataContract()", +"0d66a3ec": "ApisCrowdSale(uint256,uint256,uint256,address,address,address,address)", +"0d679531": "soldedSupply()", +"0d6798e2": "userFinalize()", +"0d67d01b": "GradeBook()", +"0d68ddeb": "setBUUU(bytes32,uint256,uint256,uint256)", +"0d694114": "addressPremineBounty()", +"0d6a5c75": "ComputeHarvest()", +"0d6c66a1": "safesub(uint256,uint256)", +"0d6d1437": "changeMemberName(address,string)", +"0d6d1e64": "EricToken(uint256,string,uint8,string)", +"0d6dcab3": "getProofOfStakeReward(address)", +"0d6e548e": "getAgentsNum()", +"0d6ec16f": "isMyDrone(uint256)", +"0d6f6f0b": "summTeam()", +"0d6f72aa": "DLXV()", +"0d6f7ca3": "maxgas()", +"0d6f849b": "minAmountPresale()", +"0d6f8563": "withdrawWei(uint256)", +"0d6fef5f": "MoonBook()", +"0d70e29c": "isAuthorizedToTransfer(address,address)", +"0d70e7e3": "getRate(uint256,uint256)", +"0d71212f": "robotLiabilityLib()", +"0d7128d8": "setGoalETH(uint256)", +"0d7172f4": "canMakeUnrefusableOffer()", +"0d71aba5": "getRace(uint256)", +"0d729abc": "setStopDay(uint256)", +"0d72d57f": "backendAddress()", +"0d730a1a": "updateMerchant(string,string)", +"0d73a44a": "_collectFee(address,uint256)", +"0d73c10e": "totalWeiRaisedDuringICO2()", +"0d7519a9": "initialTokenSupply(address,uint256,bool)", +"0d7548f7": "seeEthPrice()", +"0d75d68e": "_canDownload(bytes32,uint8,bytes32,bytes32)", +"0d75f659": "TemperatureMeasurementA2(address,int8,int8,uint16,string)", +"0d7714e2": "PiedPiperCoin(uint256,string,uint8,string)", +"0d78573e": "releaseManager()", +"0d78bc17": "importCustomer(address,address,uint256)", +"0d7982ad": "lockMinting()", +"0d799734": "setMinSet(uint256)", +"0d7a90c8": "maxSeedStage()", +"0d7af726": "addGame(address,string,string)", +"0d7b4ac4": "setLLV_edit_27(string)", +"0d7b69e2": "fiatCurrency()", +"0d7bca61": "withdrawSuccessful(bytes32)", +"0d7bf53c": "getBlockHash(uint256,uint256)", +"0d7c064f": "setMinStandingBalance(uint256)", +"0d7cffb0": "PrizePool()", +"0d7dc36a": "setManagement(address,address,bool)", +"0d7eaa8b": "FudgeCucks()", +"0d7f7eff": "TokenDestructible()", +"0d8053ca": "getBetLength()", +"0d806df7": "setXaurCoined(uint256)", +"0d80b84b": "crowdSaleTime()", +"0d80bf64": "whitelist(string)", +"0d80fcdb": "distributeBonuses(uint256)", +"0d81057e": "multiplierOnWin()", +"0d81a570": "migrationDone()", +"0d826264": "phaseThreeLimit()", +"0d82cb3a": "setHeir(address,uint8,uint256)", +"0d830190": "getCharacterInfo(uint256)", +"0d831d09": "forwardUpdateFeesTo()", +"0d83304c": "getSales()", +"0d83a371": "unprocessedQueryBytes32s(uint256)", +"0d83dd8a": "recordNewAddress(address)", +"0d854646": "magic()", +"0d85ef17": "ZombiewCreator()", +"0d8693bd": "sBitcoin()", +"0d869ada": "immortals()", +"0d873644": "addToken(uint256,uint256,uint256,uint256,bytes)", +"0d87a7c0": "WLBDrawsDB()", +"0d8814ae": "cardOwnerOf(uint256)", +"0d882848": "BTNSold()", +"0d883bdf": "generateN()", +"0d88fb04": "removePatternUserIndex(address,bytes32)", +"0d895ee1": "setBurner(address,bool)", +"0d8b2708": "functionFour(uint256,uint256,uint256,uint256)", +"0d8b5fa2": "testControllerValidTransferFrom()", +"0d8b70bf": "grantAccessMint(address,address)", +"0d8c1a62": "toogleActive()", +"0d8c1c17": "read_supply()", +"0d8c2f67": "_logSendWebGiftAndSendEther(address,uint256)", +"0d8c3c2f": "calculator(address,uint256,uint256)", +"0d8cba74": "PublicMiningSupply()", +"0d8e6e2c": "getVersion()", +"0d8f9cee": "disableToken(address,address)", +"0d8fbe23": "getDigitFromUint(uint256,uint256,uint8)", +"0d8fd836": "ExeniumToken()", +"0d9019e1": "RECIPIENT()", +"0d9029ea": "Cryptodraw()", +"0d9049f2": "createOffer(uint256,uint256,string,uint256[])", +"0d927924": "XPCoin()", +"0d92b691": "transferDefaultPercentsOfInvested(uint256)", +"0d92d381": "ElectricQueue()", +"0d92ddac": "LockEvent(address,uint256,uint256)", +"0d92e3e8": "claimedTokens()", +"0d9332e2": "setMinContractBalance(uint256)", +"0d93afef": "revokePermissionBatch(address[],string)", +"0d9543c5": "donateAs(address)", +"0d955209": "ARTWORK_STARTING_PRICE()", +"0d95ccc9": "setPreSale(bool)", +"0d963235": "setGrowthBump(uint256)", +"0d973d2e": "getTimestampProposal(bytes32)", +"0d97f395": "redeem(string,bytes32)", +"0d98dcb1": "getTransferPreSignedHash(address,address,uint256,uint256,uint256)", +"0d997dc3": "setdivsforall(bool)", +"0d99bbec": "calculateUSDWithBonus(uint256)", +"0d99edbf": "presaleWeiLimit()", +"0d99f40a": "setInvestors(address)", +"0d9b2730": "FireXToken()", +"0d9b71cc": "setParter(address,uint256)", +"0d9d19b9": "joinMatch(uint256,uint256,string)", +"0d9db3f1": "VertesCoin()", +"0d9e16d1": "Alphonic()", +"0d9e8cab": "winnerLast(uint256,uint256)", +"0d9ec228": "_price_token_ICO3()", +"0d9f2817": "getJobSkillsCategory(uint256)", +"0d9f5aed": "mixGenes(uint256,uint256,uint256)", +"0d9f5faa": "oasisDirect()", +"0d9fcb03": "juegoSillaConsensys01(address)", +"0da03197": "_build(uint256,int256,int256,uint8)", +"0da04fa6": "Smrtoken()", +"0da072a8": "newMediaTokenCreated(string,address,string)", +"0da108ff": "JointICOBonusAmount()", +"0da1eb03": "deleteHiddenPosition(uint32,int64,bytes16)", +"0da24421": "bytesMemoryArray(bytes)", +"0da2c5f0": "setBuyLimits(uint256,uint256)", +"0da2e088": "upgradedContractAddress()", +"0da2ee2f": "init_register_contract(bytes32,address,address)", +"0da30317": "ExchangerPoint(address,address)", +"0da304b0": "AssetToken()", +"0da3bec6": "addToCategorie1(address,address)", +"0da3e613": "EthFactory()", +"0da4f991": "createContinuousSaleContract()", +"0da4fc46": "unMutex()", +"0da590d4": "withdrawDevFees()", +"0da5f845": "unBlacklistAccount(address)", +"0da719ec": "onERC998Removed(address,address,uint256,bytes)", +"0da76f1c": "externalDecline(uint256,bytes32)", +"0da84bc1": "newIntegrityFeeProposal(uint256,string)", +"0da86f7f": "JUSTed()", +"0da877d3": "getWeis(uint256,uint256)", +"0da8ba5d": "checkRecentInvestments(address)", +"0da95761": "upgrade(string)", +"0da97716": "isSignedByAlex()", +"0da9e3d7": "tokenIcoAllocated()", +"0daa431a": "currentstageplayer1()", +"0daa5703": "set(bytes32,bool)", +"0dab6e08": "getallowedContracts(uint256)", +"0dac3d99": "deadlineTwo()", +"0dae2a63": "DTXToken()", +"0daf233b": "agingTimeByStage(uint256)", +"0daf37e6": "Sales(address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", +"0daf7a8c": "setBlacklistInternal(address,bool)", +"0daf96f9": "ThaiBahtDigital()", +"0daf999a": "heroContract()", +"0dafc58f": "Compound_now_Accrued_interest()", +"0db02622": "ownerCount()", +"0db03955": "fundingProcessed()", +"0db0624a": "z_Determinations()", +"0db14e95": "getStakedAmount(address,address)", +"0db1b335": "getNextMaximumPlayers()", +"0db293cb": "depositDekla(uint256,uint256,bytes,uint256)", +"0db38253": "DEFAULT_CLIFF()", +"0db38f66": "BetChampion(uint256)", +"0db3be6a": "decrementOpenInterestFromMarket(uint256)", +"0db49c84": "TokensSold(address,uint256,uint256,uint256,uint256,uint256)", +"0db4bad0": "claimDate()", +"0db5db26": "weiToOwner(address,uint256)", +"0db6a786": "SALES_DEADLINE()", +"0db6ba9b": "debugGetNumPendingSubmissions()", +"0db71d53": "createCrowdsale(uint256,uint256,uint256,uint256)", +"0db73c72": "noevent()", +"0db74aaa": "getInvestorBalance(uint256)", +"0db75ab9": "UsingAVirtualStruct()", +"0db79003": "addWineryOperationByRegulator(string,string,string,string,uint256,uint16,string)", +"0db81580": "purchaseAd(uint256,string,string)", +"0db9d891": "icoEndOfStageA()", +"0dba2400": "addToMidnightPrize()", +"0dbb78ce": "showPoolMembers(uint256)", +"0dbbc14c": "endOfROSCARetrieveSurplus()", +"0dbcca89": "computeinterval(uint256,uint256)", +"0dbce4dd": "registerCandidate(string,string)", +"0dbd5270": "numberOfBackers()", +"0dbd5e81": "Send_Data(uint16)", +"0dbda70b": "angelOnLeaderboards(uint64)", +"0dbe671f": "a()", +"0dbea6d0": "robotRefund(address)", +"0dbedee7": "getNFTbyTokenId(uint256)", +"0dbf19cb": "PRICE_RATE_LAST()", +"0dbf23f4": "vehicleregistration(address,string,string,string)", +"0dbf2a3f": "isNewWeek()", +"0dbf527e": "MintedToken(address,uint256)", +"0dc03ec7": "INFLIV(uint256,string,uint8,string)", +"0dc06e50": "postTX(address,uint256,uint256)", +"0dc081c5": "tokenTransferOwnership(address)", +"0dc10a60": "advisorsAddress()", +"0dc115c8": "coinanxtemp()", +"0dc16a56": "getDepotEth(address)", +"0dc174bd": "track(address)", +"0dc1819f": "purchase_tokens()", +"0dc193f5": "getEtherReceived()", +"0dc1d357": "isAfterEnd()", +"0dc224ec": "partnersMintLockEnd()", +"0dc26492": "bankPercent()", +"0dc2e439": "setBZxAddresses(address,address,address,address)", +"0dc30397": "counterAppeal(uint256)", +"0dc3279d": "maxnumber()", +"0dc32b72": "EtherStopLoss()", +"0dc36f2a": "migrationAgentCandidate()", +"0dc5bffb": "crowdsaleTokenAmount()", +"0dc6bae5": "allowFreezeBypass(address)", +"0dc6c392": "Puttu()", +"0dc7bd07": "testBurnAuth()", +"0dc8b5a8": "shortenPreIco(uint256)", +"0dc8f435": "Party(address,uint256)", +"0dc96015": "getVotes()", +"0dc9c838": "changeSaleTimes(uint256,uint256)", +"0dc9ebfe": "FoundationAddr_()", +"0dca59c1": "debt()", +"0dca7ed8": "winningOption(uint256)", +"0dcad340": "getCitizenLocation(address)", +"0dcaf3e2": "test_setupSucceeded()", +"0dcb4627": "_addPendingRequestId(uint32)", +"0dcc59e6": "DEFROST_INITIAL_PERCENT_OWNER()", +"0dccca72": "showFPLocktime()", +"0dccfde4": "WithdrawProfitFunds(uint256,address)", +"0dcd772c": "AmountSent(address,uint256)", +"0dcd7a6c": "sendMultiSigToken(address,uint256,address,uint256,uint256,bytes)", +"0dcd9759": "PPToken(uint256,string,string)", +"0dcdefa8": "playThreeDiceTotal(uint256,uint256)", +"0dce06c1": "goalOfState(uint256)", +"0dcec63d": "updateEtherPrice(uint256)", +"0dcf298b": "pollExists(bytes32)", +"0dcf38a9": "FirstPaySend(uint256,address)", +"0dcf4b8f": "totalContribution()", +"0dd0a042": "lock(bool)", +"0dd0cf9e": "founderAdress()", +"0dd12d38": "moderatorTransferFrom(address,address,uint256)", +"0dd1d147": "ActionCompose(address)", +"0dd27120": "exchangeState()", +"0dd2d96c": "doFinalize()", +"0dd2d9c0": "Rookcont()", +"0dd30c81": "toB32(uint256,bytes,uint256)", +"0dd327fe": "FundsKeeper(address)", +"0dd32910": "welcomeMsg()", +"0dd3e1b1": "CNT_Crowdsale()", +"0dd3fd03": "buySpins(uint256)", +"0dd5db48": "startPreSale1()", +"0dd5e582": "masterTransferFrom(address,address,uint256)", +"0dd5ee1b": "verify(address,bytes32)", +"0dd636ef": "setBuyDividendPercentageFee(uint8)", +"0dd63ba3": "setIntArrayIndex(bytes32,uint256,int256)", +"0dd6a4ad": "addOversight(address)", +"0dd6eae1": "setCourse(uint256)", +"0dd84392": "setAllowance(address,address,uint256,uint256)", +"0dd8cdbb": "initRegistryData(address,address,address)", +"0dd93b56": "restartAuction()", +"0dda20d1": "sellCrystalDemand(uint256,uint256,string,string)", +"0dda350f": "dumpdivs()", +"0dda507e": "manualFinish()", +"0ddc4a94": "WHOLESALE_TOKENS()", +"0ddcc528": "Testable(bool)", +"0ddcfe8e": "checkAddress(address)", +"0ddd0824": "checkHash(bytes32,bytes32,uint256)", +"0ddeb632": "buy(bytes32,uint256)", +"0ddeeb4f": "tokenSaleUpperLimit()", +"0ddef58d": "isUnfrozen(address)", +"0ddf0bfd": "Cryptogs()", +"0ddf0c41": "updateCandidate(address,string,string)", +"0ddf78c2": "divForEthertoteDevelopmentWallet()", +"0de0271e": "paymentReceived(address,uint256)", +"0de04691": "testCreateWithParentForeign()", +"0de0b1bc": "giveBirthByUser()", +"0de1f4c1": "CreateCodeToken(uint256,string,string)", +"0de2b2d8": "openPosition(address[11],uint256[10],uint32[4],bool,bytes,bytes)", +"0de3513a": "test_validRuleChange()", +"0de39733": "activateFlat(address,uint256)", +"0de3b100": "VoteForProposal(uint256)", +"0de41aa4": "checkIfAddressIsWhitelisted(address,address)", +"0de41e45": "lockBegunAtBlock()", +"0de54c08": "setUpgradeController(address)", +"0de607c3": "makeSubscriptionID(address,uint256)", +"0de6aa7f": "getOneTimeCostsPaid()", +"0de78a7f": "removeEggFromSale(uint256)", +"0de94e4a": "HodlEth(address,uint256)", +"0de96dff": "giveBack()", +"0de9b825": "sellShip(uint256,bytes32)", +"0de9cacd": "reCalc()", +"0dea35bf": "playerBet(uint256)", +"0dea38b6": "VESTING_TIME()", +"0deaf3f8": "claimNextReward(address,uint256)", +"0dec1c23": "requestDetachment(uint256)", +"0dec5d85": "initializeCrowdsale()", +"0ded195e": "freezeTokensOfOneUser(address)", +"0ded7f62": "secondBonusEnds()", +"0dedffb8": "feedAndMultiply(uint256,uint256)", +"0dee302e": "transferToRef(address,uint256)", +"0dee34ed": "tokensaleStageAt(uint256)", +"0dee3863": "nameEntriesCount(bytes32,uint16,bytes32)", +"0dee4af0": "doThrow(uint256)", +"0def3866": "updateChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"0df04802": "_7_russkayaRuletka()", +"0df07980": "secondLevelPrice()", +"0df0de11": "ownerChangeBuyerfee(uint256)", +"0df104d7": "EtheeraToken(address)", +"0df12532": "setpricefactor(uint256)", +"0df18942": "hsub(uint128,uint128)", +"0df19d35": "lockup(address)", +"0df22268": "CryptoSanguoToken()", +"0df23e5b": "saleCounterThisPhase()", +"0df2dcd2": "OdinToken()", +"0df3a342": "_coldStorage()", +"0df4135a": "CMCT()", +"0df428f0": "GoldenFleeceToken(uint256)", +"0df62a33": "Lilbank()", +"0df63210": "DOMAIN_SEPERATOR()", +"0df71602": "setWinner(uint256)", +"0df76370": "createInvoicingAddress(string,string)", +"0df8cbfe": "isCluster()", +"0df8e481": "setassetPrice(uint256)", +"0df9178f": "LimeEyes()", +"0df9d568": "CentraWhiteList()", +"0dfa1140": "_RaffleDraw()", +"0dfa71ae": "salesAgent()", +"0dfad849": "TokenSale(address,address,address,address)", +"0dfb0297": "changePriceSelectFight2Death(uint256)", +"0dfb6615": "user(bytes32)", +"0dfbdcc5": "lethalBonusAtHits()", +"0dfc2bcd": "originalFunds()", +"0dfce266": "setCovman(address)", +"0dfd085a": "ICOBeginsAt()", +"0dfd45f9": "removeHelper(address)", +"0dfd799c": "SponsoredLink(string)", +"0dfdcb76": "setAuctionWinnerMessageHash(bytes32)", +"0dff5cb9": "bop()", +"0e001ec0": "balanceOfContractFeeToken()", +"0e011262": "mockWhiteList()", +"0e014cf8": "viewBalance(address,address)", +"0e0280d0": "bookRoom(string,uint256[],uint256,address,bytes32)", +"0e0290a4": "_3_orientation()", +"0e037cc0": "bulkRemove(address[])", +"0e03f276": "setLLV_edit_7(string)", +"0e04a7d8": "isGameOver()", +"0e05a512": "superVoteAgree(address)", +"0e0643ae": "EvTokenAdd(uint256,uint256)", +"0e06e7ef": "NFOCoin(uint256,string,string)", +"0e0701be": "test_oneValidEqStringUint(int256)", +"0e07419c": "ConversionStarted(uint256)", +"0e07658b": "eliminate(uint256)", +"0e07ef81": "registerNameXname(string,bytes32)", +"0e088c98": "cancelChainlinkRequest(bytes32,uint256,bytes4,uint256)", +"0e0a0d74": "getAmount(bytes32)", +"0e0a6f0c": "getHours()", +"0e0ac84c": "QBASE()", +"0e0afb86": "getKYCVerificationContractAddress()", +"0e0b3519": "rateTierHigher()", +"0e0bc104": "computeNextGen0Price()", +"0e0c3f58": "super_transfer(address,uint256)", +"0e0c8241": "MAXIMUM_LOOP_BOUND()", +"0e0d3567": "highestAddressReserving()", +"0e0d946b": "CyberPayToken()", +"0e0dbd72": "updateToSendFromStorage(address)", +"0e0e26da": "getRemainShareAmount()", +"0e0e4acc": "LIANG(uint256,string,string)", +"0e0e73a8": "next_round_players()", +"0e0f05a5": "executeRaiseCapital(uint256)", +"0e0f1f00": "allocationAddressPreICO()", +"0e0f55d0": "RewardOrder(uint256,uint256)", +"0e0fec9f": "Arbitrage()", +"0e1087c3": "getMarketMakerFunds()", +"0e10e99d": "Vault(bytes32)", +"0e10f1ae": "X2()", +"0e114c89": "setBonusAffiliate(uint256,uint256)", +"0e11624b": "crowdsaleBalances(address)", +"0e136b19": "deprecated()", +"0e137368": "getBorrowInfo(uint256)", +"0e13af5d": "lockedTokensWallet()", +"0e13b9af": "getValue(uint8,uint8)", +"0e1456c0": "maxPreSale2Token()", +"0e149b52": "RBRToken()", +"0e14a376": "deleteAddress(bytes32)", +"0e14f955": "readyTobreed(uint256,bool,uint256,bool)", +"0e153d48": "MarketStake(address,address,address,address)", +"0e15561a": "totalRewards()", +"0e1565c2": "getClaims(string)", +"0e15dc89": "sizeOf()", +"0e169119": "grantAccess(bytes32,address,string)", +"0e18d11e": "changeFunder(address,address)", +"0e18ea3c": "fuoco()", +"0e19bac1": "MOBILINK()", +"0e19f74f": "makeDeposit(uint256,address,address,address)", +"0e1a0217": "boolOrRevert(bool,uint256)", +"0e1a0399": "calculateWithdrawalAmount(uint256)", +"0e1a9e3f": "getJobSkillsArea(uint256)", +"0e1ac81f": "natecoin(uint256,string,string)", +"0e1ae0e4": "RateUpdated(uint32)", +"0e1af57b": "getScore(uint256)", +"0e1b39fb": "Wallet()", +"0e1c0188": "errorTickerQueryError(string,bytes32)", +"0e1c2d46": "deliveryVSpayment(bytes32,uint8,bytes32,bytes32)", +"0e1c6491": "getTotalBettersForFighter(address,address)", +"0e1ca8a5": "Oraclize()", +"0e1cdd2d": "getStandardComponent(uint256)", +"0e1cfd97": "tokensub(address,uint256)", +"0e1d2ec8": "isUpdatable()", +"0e1d88fc": "addTender(uint256,uint256,address,uint256)", +"0e1da6c3": "claimTimeout()", +"0e1e1d0f": "removeAuthorized(address,address)", +"0e1e3914": "coreSupply()", +"0e1e56f7": "Tix()", +"0e1f6d3b": "DIGC(address[],uint256[])", +"0e1fa28f": "containMinValueFromOther(uint256,address)", +"0e1fd315": "changeWhitelistStatus(address[],uint256[])", +"0e20ebe2": "right96(uint256)", +"0e213129": "ZestCoin()", +"0e216954": "ReturnEthToEtherhero()", +"0e21750f": "setFund(address)", +"0e219339": "getContractHash(string)", +"0e21a6a6": "ADD_TIERS(bytes32)", +"0e21c886": "OWNERS_TOKENS_AMOUNT()", +"0e21f784": "getCoverImage(address,uint256)", +"0e21fce3": "Suggest(string)", +"0e2286d3": "rdiv(uint256,uint256)", +"0e22dc5b": "getAllCommentIdsByAd(uint256)", +"0e2318cb": "BonumFinancialTokenPreSale(uint256,uint256,address,address,uint256)", +"0e234cd4": "countBonus(uint256)", +"0e2350ba": "TopCoinSaleClosed()", +"0e239679": "SputnikToken(address)", +"0e2451c7": "Lilith()", +"0e24c52c": "register(string,string,string,string)", +"0e24c810": "calcAmountWithBonus(uint256,uint8)", +"0e2562d9": "getAccountAddress()", +"0e25b620": "addFreeze(address)", +"0e263906": "transferToBranch(address,uint256)", +"0e26fb41": "SeniumSupply()", +"0e27324d": "approveKYC(address)", +"0e274eab": "pullTokens()", +"0e275b49": "artworkSaleCount()", +"0e27e3df": "removeConsumer(address)", +"0e2833eb": "random(uint8,uint8)", +"0e288064": "setManyBonusExtra(address[],uint256)", +"0e28bc4a": "CanceledAuctionEvent(address,address,uint256,uint256)", +"0e2916e1": "requestClosingChannel(uint256)", +"0e2984d1": "Cancel(uint64,address,address,uint256,int256)", +"0e29df22": "sendEther()", +"0e2a05c8": "delayOfICO2()", +"0e2a273f": "getCandidateIndexArrayLength()", +"0e2a9237": "r15Backers()", +"0e2ae77c": "addVesterManager(address)", +"0e2b75cc": "setWhitelistedMemberTypes(uint256[])", +"0e2cfe93": "getPercent(uint8,uint256)", +"0e2d1a2a": "vestedBalanceOf(address)", +"0e2d27cd": "claimUnsoldCoins()", +"0e2dc949": "TIER_3_BUYIN()", +"0e2dce69": "Play()", +"0e2df9aa": "Withdraw(address,uint256,int256)", +"0e2e4037": "removeOwnersConfirmations(address)", +"0e2e4ce8": "maximumLockYears()", +"0e2ebe6c": "GetPoolInformation(address)", +"0e2f0a0f": "weiReceive()", +"0e2f5fb3": "getThree()", +"0e2f8058": "setBCFContractAddress(address,address)", +"0e2f94a6": "RegionsToken()", +"0e2fb51f": "addinverst(address,uint256)", +"0e30643f": "MemberChanged(address,uint256)", +"0e30cda7": "getTotalCoinsAvailable()", +"0e316ab7": "removeSigner(address)", +"0e32a720": "sendMarketByOwner(address,uint256)", +"0e336f00": "getSeedsSinceLastHatch(address)", +"0e33e181": "get_modulo_value(bytes32,uint32,uint32)", +"0e3484c1": "DelGift(string)", +"0e34df82": "openTicket()", +"0e351605": "transfer_token(address[],uint256)", +"0e3589d9": "DAILY_FUNDS_RELEASE()", +"0e366cbf": "ourLastJackpotWinner()", +"0e3802e9": "addRewardToken(address,uint256)", +"0e388774": "setContractorImpl(address)", +"0e38901a": "unvault(uint256)", +"0e39b210": "founders_1()", +"0e3a04a7": "digitalcashToken()", +"0e3a23db": "mineMany(address[],uint8[],bytes32[],bytes32[])", +"0e3a997e": "countPartnerPlayers()", +"0e3ab61d": "startSale(uint256)", +"0e3b70fd": "month48Allocated()", +"0e3bc6ca": "BLOCKLAND()", +"0e3be37d": "ToggleTransferAllowanceFor(address,bool)", +"0e3c8068": "BotpyToken(uint256,string,string)", +"0e3c9563": "privateIssue(address,uint256)", +"0e3d2202": "feeFixed()", +"0e3db9f2": "startNow()", +"0e3e9a67": "FundsMigrated(address)", +"0e3f732a": "TheGame()", +"0e3fd8c2": "getSolid(uint256)", +"0e407bdd": "soldTokensMainSale()", +"0e414500": "setClaimingStart(uint256)", +"0e417055": "address5()", +"0e41c63b": "addHistory(uint256,address,uint8)", +"0e420f42": "setEventResult(string,uint64,uint8)", +"0e429ecc": "providerValue()", +"0e4355d4": "validFactories(address)", +"0e43806a": "Rental(address)", +"0e438ee5": "withdrawTeamToken()", +"0e43d7c3": "getUserRoleBitmask(address)", +"0e449cf9": "foundersTokens()", +"0e4649fd": "LogProcessedInterval(uint64,uint64)", +"0e46695e": "sumHardCapICO2()", +"0e468245": "pledgeEth(uint256)", +"0e473722": "volumeType4()", +"0e4739b1": "_refulshFrozenInfo(address)", +"0e476e27": "getten(string)", +"0e479dc7": "getShop(address)", +"0e47c259": "evolveByAtom(uint256)", +"0e47c76f": "rotate(uint64,uint256)", +"0e496d25": "VICETOKEN_ICO_IS_FAKE()", +"0e4983ff": "setSecondsAfter(uint256)", +"0e4a4e8c": "fechVoteNumForCandidateByStage(address,uint256)", +"0e4aed3f": "yearlyRewardPercentage()", +"0e4b0ba8": "account2Address()", +"0e4b10b6": "totalETHLimit()", +"0e4b8389": "getEstKeyBlockNr(uint256)", +"0e4c3aa6": "OrangeCirculateChain()", +"0e4d5919": "PHASE1_START_TIME()", +"0e4debbc": "SHIT()", +"0e4e0054": "isIcoFinshed()", +"0e4e47cb": "claimAfter90days()", +"0e4e5d93": "_bidERC20(address,address,uint256,uint256)", +"0e5004e6": "_calcPhasesPassed()", +"0e501834": "emergencyTransfer(address)", +"0e5112a4": "get_dividend()", +"0e51574f": "endGameRound()", +"0e51c00d": "getPawnStatus(uint256)", +"0e5229b0": "addOwner(address,uint8)", +"0e5263fa": "discountedTokensPerDollar()", +"0e5356ec": "testEvents()", +"0e536ff4": "ratifyMint(uint256,address,uint256)", +"0e5376d6": "vars()", +"0e53aae9": "connectors(address)", +"0e53bf67": "producedDiamondCaps()", +"0e541185": "pauseBet(uint256)", +"0e542f82": "refundOptions(address)", +"0e54316f": "setSantaClaus(address)", +"0e54a883": "setPublicSaleDate(uint256)", +"0e54b872": "registerUser(string,address)", +"0e54d1fc": "pruneShareholders(address,uint256)", +"0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", +"0e5689bc": "getBidsNum(address,uint256)", +"0e56f529": "guardarDocumento(string,bytes32,bytes32)", +"0e58369f": "registrator(address)", +"0e583df0": "GEN0_STARTING_PRICE()", +"0e587aee": "set_presale_arbits_per_ether(address,uint256)", +"0e58d08c": "setInvestmentGateway(address)", +"0e597ed9": "PreCrowdsale(address,address)", +"0e5a6c70": "peep()", +"0e5aaace": "initIcoRule()", +"0e5aaffc": "getSellingItemByObjId(uint64)", +"0e5c011e": "harvest(address)", +"0e5c6a3d": "_withdrawTo(address)", +"0e5ceb47": "register(bytes32,bytes32,string)", +"0e5d095d": "codepointsOf(uint256)", +"0e5d4b99": "fechVoteMainInfoForVoter(address)", +"0e5e36fb": "TCH(uint256,string,uint8,string)", +"0e5e4d72": "createAndExecuteTransaction(address[],uint256[],uint256)", +"0e5fc721": "addUserBalance(uint32,uint64)", +"0e5fdad4": "releaseTeamTokenTransfer()", +"0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", +"0e60de7a": "rinkeby3()", +"0e620d70": "MultiSend()", +"0e62fde6": "getAttributeTypeID(uint256)", +"0e6436d2": "TokenChange(address)", +"0e64780d": "distribute(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"0e64ff0e": "tradeWalletTokens(address,uint256)", +"0e655432": "adventureItemContract()", +"0e65e5d9": "ETBSToken(address)", +"0e662cf0": "buyTokens(uint16)", +"0e662ff9": "oddEven(uint8,address)", +"0e666e49": "userExists(address)", +"0e67cf6c": "GetWageredWei(bytes32)", +"0e67f4bb": "ReferrerRegistered(address,address)", +"0e6848cc": "massNotify(address[])", +"0e686170": "changeTotalAirdrop(uint256)", +"0e687501": "OpticalNetwork(address)", +"0e68c2f0": "finishPurse(uint256)", +"0e69782b": "BCTT()", +"0e698493": "transferFounderTokens(address,uint256)", +"0e69890f": "withdrawATN()", +"0e69d16b": "testToSliceB32()", +"0e6ae3fb": "bid(string,string,uint256)", +"0e6b0afc": "adminContractSettings(uint32,address,uint256)", +"0e6b5823": "changeMaxBet(uint8[157])", +"0e6bc36c": "OkeToken()", +"0e6c04db": "icoThreshold1()", +"0e6c5f93": "changeAddr(address)", +"0e6ce30d": "createNew(uint256)", +"0e6d1de9": "getLatestVersion()", +"0e6d3a89": "mintingState()", +"0e6dfcd5": "redeem(address,address,uint256)", +"0e6e1b3e": "addSubject(bytes32)", +"0e6e4f3e": "lockPlayerFunds(address)", +"0e6f21f2": "sendBatches(address[],uint256)", +"0e6f2cf8": "game_withdraw()", +"0e708203": "rewardAccount()", +"0e70ab11": "addEthBonusToBuy(address,uint256,uint256)", +"0e70f147": "immediateRefund()", +"0e713a50": "_preValidatePreICOPurchase(address,uint256)", +"0e714202": "returnContributionsToTheSponsors()", +"0e7238f1": "setNormalRoomMax(uint256)", +"0e741a36": "generateVoteSecret(string,uint256)", +"0e7470cb": "getFullProfit(uint256,uint256,uint256)", +"0e752702": "repayBorrow(uint256)", +"0e757191": "finalizeRound(bytes32,uint8,bytes4)", +"0e757a2e": "testSetAndGet()", +"0e78501f": "ChangeStart(uint256)", +"0e787cce": "predict(bytes32)", +"0e792536": "removeGlobalConstraint(int256,address,int256,address)", +"0e7938ec": "tokenCreateFunction()", +"0e79964c": "getBoolField3()", +"0e7a2d4e": "isInAssetList(address)", +"0e7a967a": "_distributeBountyToken(uint256)", +"0e7b592a": "Halo()", +"0e7b8e07": "Sleipnir()", +"0e7b9f10": "hasBuyerLotteryBonusWon(address)", +"0e7bda18": "addAddressListItem(bool,address,address,uint256,address)", +"0e7c0f80": "masterCopyCountdown()", +"0e7c1cb5": "originalToken()", +"0e7c5d2b": "test_validEmptyEqEmpty256()", +"0e7ce976": "owner_bonusSend()", +"0e7d490d": "numberOfVotes()", +"0e7ebce4": "min_bid()", +"0e7f2be7": "DecreaseAllowance(address,uint256)", +"0e7f756a": "totalAssetUnits()", +"0e801d7a": "ticket(address,bool,uint256)", +"0e80d8b9": "PRICE_SALE()", +"0e8162ba": "totalBurntCoins()", +"0e816f66": "payForYourGladiator(uint256)", +"0e830e49": "setEngine(address)", +"0e8354b9": "CreateOOG(address,uint256)", +"0e83afbb": "approveTokens(bytes32,address,uint256)", +"0e83d92b": "playerPull()", +"0e840284": "LMDA()", +"0e848c1d": "NeoBitToken()", +"0e850239": "scheduleCall(bytes4,bytes)", +"0e856588": "getScheduledTimelockCount(address)", +"0e858b64": "setBridgeValidatorsOwner(address)", +"0e8670e0": "highestPrice()", +"0e86b63e": "calcLevel2Bonus(uint256)", +"0e86ec01": "doConfirmDeath()", +"0e870871": "rateOfZLT()", +"0e87457b": "ZincElement()", +"0e887cda": "getUserMoney(address)", +"0e88aace": "contractErc20Token()", +"0e88c4a4": "RegisterMine(string,uint256,address)", +"0e89341c": "uri(uint256)", +"0e89439b": "stake(uint256,bytes)", +"0e8a4ac7": "getPositionPrincipal(bytes32)", +"0e8b3971": "mintTap()", +"0e8bf00e": "ReleaseOfAccount(address,uint256)", +"0e8c0cdd": "_mineableSupply()", +"0e8ca718": "transferCurationRights(address)", +"0e8da019": "getInitRound(uint256)", +"0e8de473": "getDividendBalance(address,address)", +"0e8ef0c1": "systemOnSaleCount()", +"0e8f0a95": "commonDiscount()", +"0e91f4b3": "removeBadToken(address)", +"0e923d3b": "submitEther(address)", +"0e9279a0": "BountyManager()", +"0e929611": "AdminRemoval(address)", +"0e92eb6d": "sellMyTokens(uint256)", +"0e934447": "createPromoPlayer(address,string,uint256,uint256)", +"0e940fd8": "CELL_ADD_SPACE()", +"0e94869e": "ArJoust(uint256,uint256)", +"0e94a0ee": "proofToken()", +"0e95e127": "readpriceXname(string)", +"0e96127a": "transferEther(address,address,uint256)", +"0e96938c": "matchExistingBids(bool,bytes32)", +"0e972421": "isSpawningAllowed(uint256,address)", +"0e975f73": "FirstPeriodEndDateUpdated(uint256,uint256)", +"0e978e81": "AgriChainDocumentContract()", +"0e97cfdf": "placeOrder(uint256,uint256,uint256)", +"0e97e3d3": "validateAuthentication(address,uint256,uint256)", +"0e97fa7a": "setEarlyParticipantsWhitelist(address[],bool[],uint256[],uint256[])", +"0e98f811": "reservedTotalSupply()", +"0e995ff5": "cd()", +"0e997ce3": "IPMCoin()", +"0e99b380": "getCoinAddress(bytes4)", +"0e99f5e6": "claimBonus(address)", +"0e9a9dbb": "signature(string,address,bytes32)", +"0e9aa208": "getAddressAdmixture()", +"0e9b6281": "setSubsidy(uint256)", +"0e9cbbad": "PurchaseFailed(address,uint8)", +"0e9ccb94": "Boboho()", +"0e9d02cc": "setTokensPerKEther(uint256)", +"0e9d56a2": "getTotalEth()", +"0e9e543a": "collectableTokenOf(address)", +"0e9ecedd": "mEtherInvalid()", +"0e9ef902": "join_voter()", +"0e9f0816": "getContractHash(uint256)", +"0e9f9f86": "isMinimalReached()", +"0e9fb0ed": "getOptionAddress(address,uint256,address,uint256,uint256,bool)", +"0e9fd199": "licenseAffiliate(uint256)", +"0ea008c8": "bonuscalpre()", +"0ea04562": "requestRandom(uint256)", +"0ea12558": "girlIdToOwner(uint256)", +"0ea126f9": "registerUser(address,string)", +"0ea17a76": "safe_mul(uint256,uint256)", +"0ea1f459": "DVCToken()", +"0ea227e7": "StarTravelLane()", +"0ea317a9": "SUNCOIN()", +"0ea37c64": "repost(uint256)", +"0ea412ab": "_setPrice(uint256)", +"0ea49bc1": "changeRental(address)", +"0ea4eef0": "getMaxGroupBalance(uint256)", +"0ea51122": "decreaseMarketCreatorSettlementFeeInAttoethPerEth(uint256)", +"0ea5edea": "payTodayReward(address,uint256)", +"0ea662ea": "hourPot()", +"0ea733bf": "setmyPrice(uint256,uint256)", +"0ea7a110": "getEmployee(address,uint256)", +"0ea7c8cd": "airDeliver(address,uint256)", +"0ea7ee82": "testRegisterAndVerified()", +"0ea81cf9": "initialPokemonInfo()", +"0ea8e5ac": "tokenPriceIncremental_()", +"0ea9e4f1": "doInitialReport(uint256[],bool)", +"0eaac106": "TokensAdded(address,uint256)", +"0eaadd04": "_addBurner(address)", +"0eaaf4c8": "withdrawBid(uint256)", +"0eaaf5ac": "auction_start_time()", +"0eab31b1": "initAuctions(uint256,uint256,uint256,uint256)", +"0eaba26a": "getCurrentValidatorsLength()", +"0eabdab6": "removeOracles(bytes4[],address[])", +"0eabeffe": "sendMessage(string,string,string)", +"0eac6ae7": "getClientAtIndex(uint256)", +"0eac7a0e": "transferToAnotherAddr(address,address,uint256,string)", +"0eacecd2": "getEquipTokens(address)", +"0eacf634": "BKCToken()", +"0ead3ec8": "payeePricePerPart()", +"0eada49f": "standingOrdersByPayee(address,uint256)", +"0eae2f86": "initAccount(address,uint256)", +"0eae73dd": "stringToAddr(string)", +"0eaee52c": "setGrantsUnlock(uint256,bool)", +"0eaf94c3": "secondDueDate()", +"0eaf9fa4": "ownerSetMinBorrowedValue()", +"0eafb6da": "getCapInWei()", +"0eafe473": "balanceOfCoin(address)", +"0eb05d49": "viewGoldList(address)", +"0eb0afa6": "createDebt(address,address,uint256)", +"0eb14edb": "Mondo()", +"0eb15f0f": "claimRewardWithBlockData(uint256,bytes)", +"0eb1947f": "changeGatewayAddr(address)", +"0eb288f1": "executeTransaction()", +"0eb34740": "lockedTokens()", +"0eb3f5a0": "sweepCommission(uint256)", +"0eb3f993": "getAreaQualityByDay(uint32,uint32)", +"0eb40426": "IncPreSupply(uint256)", +"0eb40916": "EthernautsStorage()", +"0eb43fe3": "SaleClockAuctionERC20(address,uint256)", +"0eb495c2": "pushCity()", +"0eb4c7d6": "checkTeamUnlockedTokens(address)", +"0eb4d170": "setLockup_dakehus(address,uint256,uint256)", +"0eb51018": "getProductOperation(string,address,uint256,uint256)", +"0eb523ac": "PRIVATE_STAGE_FINISH()", +"0eb524d4": "block1()", +"0eb5a167": "XCloudRoc()", +"0eb6f543": "hodlerTotalValue6M()", +"0eb82c13": "updateHpbNode(address,bytes32,bytes32,bytes32)", +"0eb8d153": "AICoreCoin()", +"0eb8ed07": "transferEnable(bytes32)", +"0eb8fe7a": "getChannelCount()", +"0eb944d5": "PiperToken()", +"0eba6b06": "getChannelInfo(address,address,uint32)", +"0eba7f2d": "SomeCoin(string,string,uint8,uint256)", +"0ebb0d30": "getSummaryReferralProfit(address)", +"0ebb172a": "WITHDRAWAL_DELAY()", +"0ebbe5d6": "firstPrivateLockTime()", +"0ebbf213": "AddPauser(address)", +"0ebc1568": "viewTokenName(uint8)", +"0ebdc43a": "IsSaleEnabled()", +"0ebe0f32": "HacToken()", +"0ebe31c8": "getCountTrack()", +"0ebe4acb": "EtherModifierMonstro()", +"0ebf0bcb": "FAID(uint256,string,uint8,string)", +"0ebf3886": "CryptoLandmarks()", +"0ebf5f27": "Reservation2(address,uint256)", +"0ec0692a": "prizeEth()", +"0ec0786d": "tb()", +"0ec08b29": "getLoopLimit(uint256,uint256)", +"0ec0fce5": "setPercentage(uint256,uint256,uint256,uint256)", +"0ec1268c": "_freezeFunds(address,address,uint256,uint256)", +"0ec12782": "internet()", +"0ec173d0": "changeTreshold(uint16)", +"0ec1b057": "verify(bytes32,string,string)", +"0ec1ce16": "_getCurrentRate()", +"0ec1e7ac": "claimBalanceByOwner(address)", +"0ec2c379": "_getJYPCBonus(uint256)", +"0ec2c5d7": "loik()", +"0ec3b247": "testControlSetEnforceRevisionsNotOwner()", +"0ec3f62e": "NITRONEUMERC20(uint256,string,string)", +"0ec48a42": "quater4()", +"0ec4fb0a": "WHITELIST_PERIOD()", +"0ec52541": "unshelf(string)", +"0ec55d6d": "SprinkleCoin(uint256,string,string)", +"0ec59606": "addPlayerTxHistory(address,uint256,uint256,uint256,uint256)", +"0ec5c49a": "changeEthToTokenRation(uint8)", +"0ec6688d": "intrepidSoldCount()", +"0ec66924": "getStudentRequestsLength()", +"0ec6b08d": "validIdentifier(uint256)", +"0ec78d9e": "setup(address[],uint256,address,bytes)", +"0ec843d1": "setMinAmount3Round(uint256)", +"0ec852f2": "QuranToken()", +"0ec89f2b": "requiredProgressOfPreviousDungeon()", +"0ec8c387": "getContractRates(bytes32)", +"0ec8e2b4": "Moneyplant()", +"0eca4c92": "CryptoPunksMarket()", +"0ecae7d3": "wager(bool,uint256,uint256,uint8,bytes32,bytes32)", +"0ecaea73": "create(address,uint256)", +"0ecb93c0": "addBlackList(address)", +"0ecba3f8": "BusinessAutomationUnion()", +"0ecd0424": "decompressPoint(uint256,uint8)", +"0ecda113": "freezeEndTime(uint256)", +"0ecdbfd4": "DesingCoin()", +"0ecdd94f": "goldFeeDataUpdatedAtBlock()", +"0ecea92c": "allowInvestor(address)", +"0ecf19e5": "balanceWithoutFreezedBonus(address)", +"0ed0b19f": "resetBonusPool(uint256,uint8)", +"0ed15d23": "dInit(address)", +"0ed21029": "getIssueAssignee(uint256,bytes32)", +"0ed2fc95": "exchange(address,address,uint256,uint256)", +"0ed387c1": "getSpinsContainer(bytes32)", +"0ed3909c": "startBonusCompaign(uint256)", +"0ed3d5b9": "passed(address[])", +"0ed40dff": "resetAppendDecryptedBids(uint256)", +"0ed469b8": "houseFee()", +"0ed5410a": "endOfRewards(bool)", +"0ed59a60": "releaseProof(bytes32,string)", +"0ed5a933": "isCanceled()", +"0ed61407": "makePick(uint8,uint256)", +"0ed659b4": "getLLV_edit_18()", +"0ed68aa5": "getPlanetOwners(uint256,uint256)", +"0ed6b171": "LogStartICO()", +"0ed74c08": "func_0C2C()", +"0ed7a0f2": "Predatex()", +"0ed7c905": "FantomToken()", +"0ed86f04": "withdrawDivis()", +"0ed9b97b": "buy_fromContract()", +"0edaf441": "lockAddressRegistration(address)", +"0edc1923": "changeMaximumHodlDuration(uint256)", +"0edc4737": "SEED()", +"0edc54a8": "holdTokens(address)", +"0edd2ffc": "penalty()", +"0edddd3e": "lstFunc(uint256[])", +"0ede050b": "ico3Max()", +"0edf2134": "deathData_a17()", +"0edfb0f7": "withdrawCollectedInterest()", +"0edfe7ec": "setBackendWallet(address)", +"0ee02d9d": "getHash(address,address,uint256,bytes,address,uint256)", +"0ee07836": "adjustDifficulty(uint256)", +"0ee21ddc": "setEtherPriceUSDWEI(uint256)", +"0ee2b0e6": "commissionToWithdraw()", +"0ee2cb10": "getCreator()", +"0ee2ce58": "VKNToEth()", +"0ee33128": "RequestRefund()", +"0ee33c70": "claimed_blocks()", +"0ee36dbc": "setParamsStopSale(bool)", +"0ee3c31d": "getUserIndexOnEther(address)", +"0ee4229c": "grantReservedToken(address,uint256)", +"0ee454dc": "getBUB(bytes32,uint256)", +"0ee526e0": "enableMintToken()", +"0ee5ca1f": "secondsLeftPublic()", +"0ee62c77": "getStageVolumeBonuses(uint256)", +"0ee75f6b": "TOKEN_THIRD_PRICE_RATE()", +"0ee7968e": "REWARD_NUM()", +"0ee79fb3": "closeReferendums()", +"0ee7c858": "beatMartialOwner()", +"0ee7f045": "TransferSellAgent(address,uint256)", +"0ee85800": "getCFOHashing(address,uint256)", +"0ee8e338": "testFailCreateWithParentsForeignNotInUse0()", +"0ee95ecf": "getNextPrice(bytes32)", +"0eea10b1": "sysPer()", +"0eeb63b9": "getUserAccountTokenBalance(address,address)", +"0eebd59b": "log_recast(address,uint256)", +"0eebdb04": "AprilAirdrop(address,address)", +"0eecae21": "draw()", +"0eecc2a3": "updateRequiredTimeBetweenDraws(uint256)", +"0eeccb84": "removeAdvisor(address)", +"0eed49d0": "_createFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"0eedc7b5": "voteDescription(uint256)", +"0eedc9d9": "payAffiliate1Address(address)", +"0eefdbad": "tokenTransferProxy()", +"0ef12aa9": "getUserID(address)", +"0ef14b98": "viewFirstLotOfClauses()", +"0ef25f8b": "TicTacToeRules(address,address,address,address,uint256)", +"0ef26743": "height()", +"0ef270d5": "CreateNewAccount()", +"0ef2d7af": "bonusDeadline()", +"0ef43cbd": "confirmerNouveauProprio()", +"0ef486d1": "revisions(uint256)", +"0ef504ae": "preSaleHalted()", +"0ef524ff": "setDefaultMint(uint256)", +"0ef5a7e0": "allocateToCrowdsalePurchaser(address,uint256)", +"0ef60e48": "setRubusOrangeAddress(address,address)", +"0ef67887": "Balance()", +"0ef6eb9c": "getCompte_33()", +"0ef71d79": "privatized(bytes32,bytes32)", +"0ef72880": "DADXChainERC20()", +"0ef76243": "withdraw_Arina(uint256)", +"0ef7cc8e": "metadataOf(uint256)", +"0ef845df": "propose(address,string,string,string,string,string,uint256,uint256,uint256,uint256)", +"0ef96356": "stakeFor(address,uint256,bytes)", +"0efafc03": "SaleClockAuction(address,uint256)", +"0efafd01": "getPlayerGainLossOnLastFlip()", +"0efc9d03": "minEthToRaise()", +"0efcf295": "deleteAnyProposal(bytes32)", +"0efd0973": "club()", +"0efd2cca": "postICO()", +"0efd3d5b": "getPrice(string,string,uint256)", +"0efd4989": "numAdmins()", +"0efe5fb7": "addToCart(uint256,string)", +"0efe6a8b": "deposit(address,uint256,uint256)", +"0efe7f62": "objectShoes()", +"0f00dfdb": "NonOperationalWithdrawManager(address)", +"0f027c67": "membersLength()", +"0f0308fb": "upgradeGems()", +"0f03be37": "mimax(uint64,uint64)", +"0f03e4c3": "numberOfAccounts()", +"0f041cef": "KitFutureToken()", +"0f0433c4": "_getDroneAbility(uint256)", +"0f050dce": "getBitcoinAddress(bytes32,int256,bytes32,int256)", +"0f052173": "invest2017()", +"0f059913": "vested(address,uint256)", +"0f06670a": "didWin(bytes32)", +"0f092c44": "MIDGRADE_TYPE3()", +"0f096163": "Chainy()", +"0f0ba766": "removeChild(uint256,address,uint256)", +"0f0c27ad": "HashRegistered(bytes32,address,uint256,uint256)", +"0f0ed39e": "EthealPromoToken(address)", +"0f0f3f24": "addOwnerAddress(address)", +"0f106e0a": "encodePacketCommit(uint256,uint256)", +"0f120fc3": "toggleTrading()", +"0f122a6c": "_setSealableProperty(uint256,bytes32,bytes32)", +"0f12354d": "updateStateBasedOnContributions()", +"0f12b32a": "Garcut()", +"0f12d8f8": "RoundWinner(uint256,uint256,address,uint256)", +"0f12ffac": "weiToFNU(uint256)", +"0f134bee": "payPreviousOwner(address,uint256)", +"0f1354f3": "burnFrom(bytes32,uint256)", +"0f136527": "getShareIndex(address)", +"0f13af83": "setCurrentCoin(address)", +"0f13dbde": "inRankList(address)", +"0f14212b": "transferFromOwner(address,uint256,uint256)", +"0f145dca": "Ethbet(address,address)", +"0f149d0a": "changeBurnPaused(uint256)", +"0f14a7e4": "ModeratorRemoved(address,address,bool)", +"0f14b900": "setTimeStampStatus(uint256,uint256,string)", +"0f15573b": "setLLV_edit_2(string)", +"0f15f4c0": "activate()", +"0f166ad4": "local()", +"0f183119": "vote_for_candidate_D_for_Free()", +"0f188e1d": "studioLevel(address)", +"0f18a530": "chemistry()", +"0f18ac07": "transferFromOwner(address,uint256)", +"0f191524": "fillOrder(uint256,bytes)", +"0f19f92a": "isIcoOver()", +"0f1a6444": "cliffTime()", +"0f1bf454": "getGameStatus(uint256)", +"0f1ca0d9": "sethToken()", +"0f1df574": "WithdrawETH()", +"0f1e3b5b": "getHousePayout()", +"0f1e8c24": "commitTeam(address,uint256,uint256[])", +"0f1ed0c6": "setOwner(address,bytes32,address)", +"0f1fd654": "ELearningCoinERC()", +"0f2004a1": "Bob(address)", +"0f201ca6": "reportConvertTokens(uint256,address)", +"0f20b9df": "crowdsaleContracts(address)", +"0f215afb": "paySeller(uint256,uint256)", +"0f21a046": "WithdrawMonethaBuyerUtility()", +"0f226a31": "getServiceUpdateAddress(address,uint32)", +"0f228087": "transferTokens(address[],address)", +"0f2284cc": "SbuyToken(address,address)", +"0f22a95d": "deleteCountry(uint256)", +"0f23a104": "burnAssetOperator(uint256)", +"0f23b047": "getPlayNumber()", +"0f23cbaa": "recycle()", +"0f246780": "ZJF()", +"0f24f5c8": "doTransfer(address,uint256)", +"0f250780": "AKCToken()", +"0f2636bd": "getStockSellOrderPrices(uint256)", +"0f264e1a": "farmerRequestCertificate(address,uint256,string,string,string,uint256)", +"0f2905f7": "verifyStage()", +"0f29eb73": "revokeStaking(address)", +"0f2bc56d": "fixTokenCalcBug()", +"0f2c9329": "split(address,address)", +"0f2da195": "LimitSet(uint256,uint256,uint256,uint256,uint256)", +"0f2dabca": "punchIn(address,uint64)", +"0f2e5b6c": "Locked()", +"0f2f9bb7": "getNextWhitelistedNode(address)", +"0f2fa473": "test_already_paid()", +"0f3092fb": "EasyHomes()", +"0f30c971": "TheGambler()", +"0f3554ad": "addBoolListItem(bool,address,address,uint256,bool)", +"0f36f691": "getLockStatus(address)", +"0f37e79a": "transferClockmaker(address)", +"0f37fd4a": "HexelErc20Token(string,string)", +"0f391236": "ethRateMax()", +"0f39c6ab": "removeVotersVote(address)", +"0f3a00d5": "CreateCOR(address,uint256)", +"0f3a0533": "extraReceiverAmount(address)", +"0f3a1412": "getArrlist(uint256,uint256)", +"0f3a31d6": "SymbolChange(string)", +"0f3a9f65": "setPeriod(uint256)", +"0f3ae419": "PreferentialRateChange(address,uint256)", +"0f3afeec": "Nodelist()", +"0f3b305e": "getPawnPackageId(uint256)", +"0f3bd3fd": "teamJust()", +"0f3c92f3": "calculateFLCCore(address,uint256)", +"0f3cb8bc": "setCardUpgradeLevels(uint256,uint256,uint256)", +"0f3d7c3e": "release(string,uint32[3],string,string,string)", +"0f3d8803": "getMinPurchase()", +"0f3de489": "newAuction(uint256,uint64)", +"0f3e7027": "clearTransferValueby(address)", +"0f3e9438": "frontRunner()", +"0f3eb785": "add(string,uint256,uint256,uint256)", +"0f3f0e42": "allowTotalMintAmount()", +"0f3f53c1": "dappsBonusCalc(address,uint256)", +"0f3fb52a": "LogSetState(uint256,uint8,uint256,bytes32)", +"0f3fc29e": "setChestProduct(uint16,uint256,uint16,bool,uint32,uint24,uint24,uint8,uint8)", +"0f40593e": "ViewMyBet()", +"0f40988e": "contributorsShare()", +"0f40d645": "demander(uint256)", +"0f4170f2": "BaseICO(address,address,uint256,uint256,uint256,uint256)", +"0f41ba4b": "bid(address,uint256,uint256)", +"0f420113": "_calculateCurrentRate()", +"0f42fdfb": "recoveryModeTriggerTime()", +"0f4391f5": "setPauseMaster(address)", +"0f43a677": "validatorCount()", +"0f43c196": "setTournamentAddress(address,address)", +"0f45368c": "checkTransferHash(address,uint256,address,address,uint256,uint256,bytes)", +"0f45c3e1": "transferFromAny(address,address,uint256)", +"0f45f528": "getTknOfferor(uint256)", +"0f4665aa": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address,address,uint256)", +"0f47165e": "managePlayer(address)", +"0f473d72": "_calculateDiscount(uint8,address)", +"0f47435b": "pvt_inv_Pool()", +"0f481bf7": "postTransfer(address,address,address,uint256)", +"0f482da1": "unblockSpending(address)", +"0f482e64": "LikeCoin(uint256,address,address)", +"0f4acfcd": "charToByte(bytes1)", +"0f4b1cfc": "setGovernment(address)", +"0f4bbdf2": "registerBuyer(string,string,string,string,address,string)", +"0f4cf692": "numMessages()", +"0f4d14e9": "depositEth(uint256)", +"0f4df754": "Gladiethers()", +"0f4dfc17": "ICOTokenDelivery(address,uint256)", +"0f4ef8a6": "rewardManager()", +"0f4f8184": "bancorRegistry()", +"0f4fd9cc": "log_event(string)", +"0f4ff474": "_openGameResult(uint256,uint256,uint256,string)", +"0f501d07": "saveInfoAboutInvestors(address,address,uint256,uint256,bool)", +"0f505a01": "sealDataStream(address,uint256,bytes32,uint256,bytes32)", +"0f5127f5": "Ariston()", +"0f5137f9": "sellOrderBalances(bytes32)", +"0f522614": "Shufflix()", +"0f527200": "SimpleCoin()", +"0f529ba2": "D()", +"0f52fb0a": "searchFreelancers(address,uint256,uint256[],uint256[],uint8,uint256,uint256[],uint256[],uint256[],uint256)", +"0f5381f1": "testUserCanIncreaseVersionNumber()", +"0f53a470": "getProfile(address)", +"0f53b7ee": "communityTokensAddress()", +"0f53ba51": "appWasMade(string)", +"0f53e2a8": "NewToken(address)", +"0f555b46": "MicroCoins()", +"0f560cd7": "list()", +"0f56e460": "Shitcoin()", +"0f574ba7": "subscribe(uint256)", +"0f577d97": "getCompte_16()", +"0f57b9d9": "removeFromPrivileged(address)", +"0f57eb79": "minboc()", +"0f581aed": "MinimumBitcoinInvestmentUpdated(uint256,uint256)", +"0f58d28f": "weightOf(string)", +"0f590c36": "emergencyFixGameResult(uint64,uint256)", +"0f59a638": "totalWeiCommitted()", +"0f59eb95": "ownerUpdateOthers(uint256,bool,uint256,uint256,bool)", +"0f59f83a": "go()", +"0f5a5466": "claimWithResolver(address,address)", +"0f5a8d9c": "raiseDollarsFunded(address,uint160,int160)", +"0f5aa9f3": "setAuthorization(address,address)", +"0f5ad969": "node_index(address)", +"0f5b807d": "cuddleData()", +"0f5bab7c": "countManagers()", +"0f5c8c0a": "balancesDB()", +"0f5e41c8": "_getDestinationPartition(bytes)", +"0f5e7348": "getCommunityBallotCentsPrice()", +"0f5ea100": "price(address,uint256,uint8)", +"0f5eacf6": "EndStage()", +"0f5ed9e9": "escrowAllowed(address)", +"0f5ee138": "userSignupCount()", +"0f5f0151": "GxTradersProxy(address)", +"0f5f1dbc": "operationsAccount()", +"0f5f4c53": "unpause2()", +"0f5f8593": "MetaBall(uint256,string,string)", +"0f601679": "balanceOwner(address)", +"0f60e3d9": "resetAddTokenData()", +"0f610c06": "getValidatedLiability()", +"0f61280e": "nutzAddr()", +"0f62562f": "pregnantNinjas()", +"0f62c3e3": "releaseEscrow(bytes32,address,uint256)", +"0f632fd3": "onMint(address,uint256)", +"0f63d864": "addOwners(address[],uint256[],uint256[])", +"0f6413b7": "batchAssignStopped()", +"0f64864d": "transferTokensAndDividends(address,address)", +"0f6521e2": "FROZEN_TOKENS()", +"0f66791c": "setHTML(string)", +"0f66acd1": "EcosystemEthereum()", +"0f66d082": "gauntletTypeOf(address)", +"0f670da6": "destroyLogicContract()", +"0f6798a5": "Mint(address,uint256)", +"0f67f3f7": "distributeToDev(address,uint256)", +"0f683fd1": "Token(string,string,address)", +"0f69cdbe": "approvespender(address,uint256)", +"0f6a1734": "Crowdsale(address,uint256)", +"0f6b6756": "tokenSaleIsPaused()", +"0f6bb3c3": "doSpawn(uint32,int256,address,bool,address)", +"0f6c2a33": "setMaxStage2AllocationPerInvestor(uint256)", +"0f6d37d6": "supportAddress()", +"0f6d6236": "setIssueDividendReward(uint256)", +"0f6d9f00": "ERA_PERIOD()", +"0f6e40c3": "startRound(bytes32,bytes32)", +"0f6ea4fc": "MISCELLANEOUS_TOKENS_SUPPLY()", +"0f6f5f98": "setAndFixTokenPriceInWei(uint256)", +"0f6f72a8": "getClosingTimeValue()", +"0f710616": "TRSToken()", +"0f710e32": "CryptoFinexToken()", +"0f71590c": "setPOLYUSD(uint256)", +"0f732bdc": "getEncryptionAlgorithmCount()", +"0f73b4f4": "setStartingPrice(uint256)", +"0f73d212": "addLog(string,string,bytes32)", +"0f74a5cc": "cancelCenturionSale(uint256)", +"0f74e527": "RenmiCoin()", +"0f74e689": "registerNewPubKeyForHash(bytes28,string)", +"0f7503c9": "baseStartTime()", +"0f75806f": "GraphenePowerCrowdsale()", +"0f75c82e": "getObjClassExp(uint64)", +"0f75e81f": "issue(bytes32)", +"0f762cfe": "emission(address,address,uint256,uint256,uint256)", +"0f76496a": "returnTokens3(address,uint256,uint256)", +"0f76b651": "unlockDate5()", +"0f76c114": "getCurrentValue()", +"0f76de0d": "left45(uint256)", +"0f76f489": "getPoolName(uint256)", +"0f774287": "Burnt(address,uint256,uint256)", +"0f774931": "administrativePayouts(address,uint256)", +"0f776fb2": "PutDiv(address)", +"0f77c1d3": "addUsersWhitelistB(address[])", +"0f784943": "mintable(uint256)", +"0f78628e": "allowedToBurn()", +"0f7875c6": "startblock()", +"0f78d408": "JuvToken()", +"0f78ee7c": "payoutLockedToken()", +"0f79cfa2": "addReferrer(bytes32)", +"0f79e120": "nrFailures()", +"0f79e1c7": "createRandomDeveloper(string,uint256)", +"0f7a4590": "goalAchieved()", +"0f7a8971": "buildBoolMapping()", +"0f7bd1dd": "enterRaffle(uint256[],uint256)", +"0f7bff76": "getHeroDBZHeroAddress(uint256)", +"0f7c9085": "addToAdmin(address,bool)", +"0f7c932a": "getReservedTokensListValInPercentageDecimals(address)", +"0f7d6673": "Channel()", +"0f7e1653": "OpenGame()", +"0f7f97c8": "calcNewSkinAppearance(uint128,uint128,uint128)", +"0f7fa72f": "addOperator(address,uint256)", +"0f809adb": "changeTokenOwner(address)", +"0f80fc58": "exponent(uint256)", +"0f8143f6": "discardRejectedProposal()", +"0f819fe8": "disableTuneOption(uint256)", +"0f81d248": "endPeriodC()", +"0f822b78": "admin_transfer(address,uint256)", +"0f825673": "deleteCoupon(string)", +"0f82b42f": "userAccountTokenBalances(address)", +"0f832bc6": "testIsLawyer()", +"0f832f18": "_nextLoanInterestRate(uint256)", +"0f83f112": "CanTransferChecked(bool,address,bool,bool)", +"0f8410e3": "getPresellToKenAmount()", +"0f85751e": "change_p5(uint256)", +"0f861127": "argl(uint256,uint256)", +"0f861ca3": "ownerUnpause()", +"0f86abc1": "modifyStakerLimit(uint256)", +"0f86e3eb": "denaToken()", +"0f86f702": "compatible223()", +"0f87a044": "withdraw1(uint256)", +"0f88aa81": "emitRecord(bytes32,uint256,uint256,uint256)", +"0f88f1a5": "collectBounty(address,uint256,uint256)", +"0f89c305": "removePendingArray(address)", +"0f89fa28": "OrganizationRegister()", +"0f8a771e": "skr()", +"0f8a8887": "rocketSetResourcePrice(uint256,uint256,uint256)", +"0f8b70c9": "getBotContract()", +"0f8bca8c": "getStage0Start()", +"0f8c04e2": "create(address[],uint256[],uint256[],address,address,bytes)", +"0f8d4030": "totalShareholders()", +"0f8d598a": "decayedPriceOfSocialIdentity(uint256,uint256)", +"0f8dc272": "ComputeAcornPrice()", +"0f8ea4f3": "addSomeOfManyLine(uint256,string,uint256,string)", +"0f8eaa74": "addToPreSaleRefunds(address,uint256)", +"0f8ef9f8": "getBoosterRaiseValue(uint256)", +"0f8f8b83": "spendableBalanceOf(address)", +"0f8fcb74": "_setInt(bytes32,int256)", +"0f8fd363": "getRepPriceInAttoEth()", +"0f900587": "addBonusPerShare()", +"0f902bc2": "delayedTransferFrom(address,address,uint256)", +"0f907ba3": "failCar(string)", +"0f90b83a": "deployTokenContract(uint256)", +"0f917e31": "transferAndDonateTo(address,uint256,address)", +"0f917f9e": "totalSupplyTeamTokens()", +"0f91c8a5": "setCap(string,uint256)", +"0f91cce1": "releaseVanbexTeamTokens()", +"0f92f38f": "changeMartial(uint256)", +"0f9302c8": "LogEvent(string)", +"0f95378f": "MerchantWallet(address,string)", +"0f953b97": "getCmcAddress()", +"0f960644": "addClaim(address,bytes32,string,string,uint256)", +"0f96dd39": "maxTokenCap()", +"0f973874": "MiniMeTokenSimple(address,address,uint256,string,uint8,string,bool)", +"0f974ef2": "PasserBy(address)", +"0f977561": "getUserEvents()", +"0f97f2f1": "managePlayer(uint256,uint256)", +"0f98a9cc": "lockTokens(address,uint256,address,uint256)", +"0f98c91a": "TOKENS_PER_ETHER_EARLYSALE()", +"0f99da4a": "getBoosterAmount(uint256)", +"0f99fab2": "allowWrite(uint256,uint256)", +"0f9ad6b8": "GGPOKoFToken()", +"0f9aea56": "last_release_date()", +"0f9b481a": "TokenFinalized()", +"0f9b5129": "maxSellRateInPrecision()", +"0f9b87be": "transferToDestination(bytes32)", +"0f9bac2d": "ADVISORS_ADDRESS()", +"0f9bb8b3": "getCurrentUserQuickPromoBonus()", +"0f9c95da": "GDCAcc04()", +"0f9ce471": "Ether2Gen()", +"0f9e144d": "changeMaxMin(uint256,uint256)", +"0f9e39bf": "minBidMultiplier()", +"0f9e42da": "drawToken()", +"0f9e5bbd": "createShares(address,uint256)", +"0f9fb983": "lastBetTimeSEC()", +"0fa01949": "yearOfProduction()", +"0fa2b5d4": "Interestv3(address,address)", +"0fa2d864": "block4()", +"0fa45298": "getRoundAhead(uint256,uint256)", +"0fa48688": "calculateItemId(bytes32)", +"0fa53db8": "divideDecimalRound(uint256,uint256)", +"0fa6002e": "sellCharacter(uint32)", +"0fa6e84d": "SouYingToken()", +"0fa7a798": "getOpenRequestPublicKey(uint256,uint256)", +"0fa7b7b3": "totalRefunded(uint256)", +"0fa803e8": "SetCategoryName(string)", +"0fa85ab0": "claimTokensForUser(address)", +"0fa87b15": "closeMyGame(uint256)", +"0fa8beb3": "claimBonus(address,uint256)", +"0fa8f516": "getPosition(address,bytes32)", +"0fa95aee": "etherToTokens(uint256,uint256)", +"0fa9ced4": "emergencyFuneral()", +"0fa9e486": "registerCoin(string,string,address)", +"0faa2aae": "amountOfBSTRequired(address)", +"0faaa357": "nCanOpenRewardMinEth()", +"0fab0f6a": "minimumWitcoins()", +"0fab14e8": "agencyOwner()", +"0fab459c": "transferSoldTokens(address,uint256)", +"0fab7539": "getIssuanceCount(bool,bool,bool,bool)", +"0fac20e1": "dev1Wallet2Pct()", +"0fac8dc5": "update(string,string,bool,string,address,uint256,uint256)", +"0fac960e": "sellTokensForWaves(string,address,uint256,uint256)", +"0fadb5c7": "getWHaddress()", +"0fae42cd": "pricePreSale()", +"0faf0904": "set_creator(address)", +"0faf2775": "newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"0fb0a8d3": "manageOperable(address,bool)", +"0fb0cf2d": "changeLockupDuration(uint64)", +"0fb125ac": "transferTokens(uint256,address[])", +"0fb26f0b": "switchTransfers()", +"0fb2e692": "buyMCTTokenProxy(address,uint256,uint256)", +"0fb35574": "SCC()", +"0fb3844c": "_status()", +"0fb411e8": "evc()", +"0fb4b070": "tokensMintedForSale()", +"0fb4ecdf": "complained(address,address)", +"0fb524ce": "castVote()", +"0fb54f3a": "AuthenticationManager()", +"0fb553ba": "FLC()", +"0fb59f95": "buy(uint256,string,uint256,uint16)", +"0fb5a6b4": "duration()", +"0fb65f10": "authorizeMintRequester(address)", +"0fb66557": "trustedTransfer(address,address,uint256)", +"0fb66da3": "getMessageOfVisit(address)", +"0fb7657f": "isAllocationLocked(address)", +"0fb792d0": "ONE_HUNDRED_PERCRENTS()", +"0fb7a5e6": "getCensuredBy(uint16)", +"0fb7cb1d": "addToKycTeam(address)", +"0fb7e602": "startEmergency()", +"0fb9398f": "getProductBuyers(uint256)", +"0fb9d85e": "buyIndex(uint256,address,bool)", +"0fb9dcd5": "getTokensAtCurrentRate(uint256)", +"0fba34a4": "has(bytes12)", +"0fba4ca1": "accept(string)", +"0fba80de": "pickValues(bytes32)", +"0fbad611": "setTimeFrame(uint256)", +"0fbb3b6b": "shittyRandom()", +"0fbbeceb": "PostCompleted(address,address)", +"0fbc0cd1": "bounty_solve(address,bytes32)", +"0fbc0f82": "LotterySymbol()", +"0fbe333a": "getLastBidder()", +"0fbe3e40": "returnLast()", +"0fbed9fe": "EFAFCOIN()", +"0fbf7151": "startsWith()", +"0fc03687": "Booko()", +"0fc0e9a8": "_addWithdrawal(address,address,uint256)", +"0fc10026": "CALLER_EXCHANGE_RATE()", +"0fc12b1a": "isGetWhiteList()", +"0fc1b08b": "setValue(string,string,string)", +"0fc1c83d": "minimumTokenCommission()", +"0fc24c03": "ZarFundsToken()", +"0fc33bb7": "lrcBalance()", +"0fc3866f": "isSoftCapGoalReached()", +"0fc38daa": "CSToken()", +"0fc3c5e8": "shipMedicine(address,string,string,string,string)", +"0fc4af53": "cloneTokens(uint256,uint256)", +"0fc4f262": "updateSubdivsFor(address)", +"0fc55d1e": "ENTS()", +"0fc55fd1": "bid(uint256,string)", +"0fc63d10": "tokenA()", +"0fc66f45": "PO24()", +"0fc69407": "BidPlaced(uint256,uint256)", +"0fc6ed30": "Satum()", +"0fc709e5": "setDistribution(uint256,uint256,uint256,uint256)", +"0fc72f4e": "purchaseCallback(string)", +"0fc783d1": "SacToken(address)", +"0fc7c15e": "getUnapprovedUsersTop150()", +"0fc81bdc": "editEventResult(string,uint64,uint8)", +"0fc85c7f": "INAYCOIN()", +"0fc8a393": "transferUpdater(address)", +"0fc8afbd": "getFreeSnake()", +"0fc92096": "isValid(address,bytes32[])", +"0fc958dd": "tMemberSolId(uint256,address)", +"0fcac452": "addToRakePool()", +"0fcaed94": "restartLottery()", +"0fcb5984": "getprice()", +"0fcb83f2": "SancojTokenContract()", +"0fcbb5b9": "getSubscriberType()", +"0fcbbc8e": "_lookupOwnerIdentityCount(address)", +"0fcc0c28": "deprecate()", +"0fcc1e47": "_grantAccess(bytes32,address,address,string)", +"0fccf22e": "ban_user(address)", +"0fcd1cab": "killInstance(address,address)", +"0fcda174": "getAccountTokenBalance(address,address)", +"0fcddd06": "CreateCRC(address,uint256)", +"0fce00ed": "calculatedPaymentInterval()", +"0fce349e": "popularitySetting(uint256,uint8)", +"0fce887b": "transferLockedFrom(address,address,uint256[],uint256[])", +"0fd02fc1": "isValidUnbondingLock(address,uint256)", +"0fd0aa67": "Parties()", +"0fd0ae10": "insert(address,uint256)", +"0fd0e440": "uniq(uint8[])", +"0fd1ed1f": "setMarginForVictoryPercent(uint8)", +"0fd1ed78": "LOG_EmergencyWithdrawalFailed(address)", +"0fd1f94e": "firstClaimBlock()", +"0fd2ce17": "funcArrayInArguments(address[])", +"0fd3d758": "WWAMPricingStrategy(uint256,uint256,uint256)", +"0fd3ee83": "__redeemTokens(address,uint256)", +"0fd4d286": "BlueSkyDragon()", +"0fd5084a": "validOrigins(uint256)", +"0fd548ef": "myShareToken()", +"0fd56202": "addressToNumCities(address)", +"0fd57f3e": "seatPrice()", +"0fd58d07": "expectedWinnersCount()", +"0fd62f57": "adminCharge_p2()", +"0fd68e3f": "newRaffle()", +"0fd6fc49": "IntelliShareEco()", +"0fd7410c": "in_finalization_phase()", +"0fd7b03d": "HackDivs()", +"0fd8a8fb": "setAnonymousCap(uint256)", +"0fd9d5bf": "Matrexcoin(uint256,string,uint8,string)", +"0fda890e": "changeGenRNGcontractAddress(address)", +"0fdb1c10": "withDraw()", +"0fdb468f": "fee(uint64)", +"0fdc3609": "changeDeposit(address)", +"0fdc7956": "unlockAllTokens(bool)", +"0fde0f8e": "ROLE_VENDOR()", +"0fde5686": "setBUB(bytes32,uint256,bytes)", +"0fdfa5ee": "preBuy3()", +"0fe1dfa8": "lastRoundLengthUpdateRound()", +"0fe1f548": "getTokenSCADARequiresHardCap()", +"0fe234ed": "testSetController()", +"0fe2abcf": "exchange(uint256,address)", +"0fe2c5d1": "BTSMToken()", +"0fe3152e": "airdropEnd()", +"0fe3c10d": "MANHATTANPROXY4THST()", +"0fe41fd5": "acquisitionsTokens()", +"0fe433db": "reallocate(uint256)", +"0fe43e1f": "foundersAdvisorsPartnersTokensVault()", +"0fe4ea72": "killDragonDeathContract(address,uint256,uint256)", +"0fe793aa": "studioHandler(address,uint256)", +"0fe7c250": "DaoRulesProposals()", +"0fe7db9c": "MedSupplyToken()", +"0fe83bb8": "preSaleTokens()", +"0fe8c788": "addCertificate(string,address)", +"0fe961da": "_getCurrentRoundTeamCos()", +"0fea657f": "totalExch()", +"0fea81fe": "setComisionInETH()", +"0fea9be6": "ChinhCoin(uint256,string,uint8,string)", +"0feacc42": "CommonToken(address,address)", +"0feaf627": "_safeStaticCall(address,bytes)", +"0feb10ff": "Register(uint256,string,string)", +"0feb172f": "buyTeam(uint256)", +"0feb376b": "AMOUNT_ICO()", +"0febb8b7": "setSaleInfo(uint8,uint256,uint256,uint256,uint256)", +"0feca6d5": "releaseAdvisorsTokensForPercentage(uint256)", +"0fecef48": "getProductsByOwner(address)", +"0fed240b": "dAdd(bytes32,address,bool)", +"0fed5dc8": "setSendAllow(bool)", +"0fee32bb": "setAuctionIndex(address,address)", +"0fee5a40": "getProviderCurve(address,bytes32,int256)", +"0ff0a4df": "reFund()", +"0ff188c7": "transferPixel(uint16,uint16,address)", +"0ff244b2": "transferByAddress(address,uint256,address)", +"0ff2e4b2": "assignCEO(address)", +"0ff3687b": "remainingGenesisCats()", +"0ff39daa": "generateDepositAddress()", +"0ff3d57e": "addMasterWallet(address)", +"0ff3d5ea": "getCastleSale(uint256)", +"0ff4009c": "getLotteryInfo(address)", +"0ff42eab": "setProofAddr(string)", +"0ff43cfd": "IFCNBToken()", +"0ff4c916": "getValue(uint256)", +"0ff4d239": "HashRushICO()", +"0ff4f160": "oraclize_query(uint256,string,string[1])", +"0ff58f40": "month24Allocated()", +"0ff7bb07": "refundClient(address,uint32)", +"0ff88a8d": "getChar(uint256)", +"0ff88baa": "RoyalTransfer()", +"0ff89c2b": "divide(int256,int256,uint256)", +"0ff8cf9b": "dividend()", +"0ff92e7b": "burnDead(address,uint256)", +"0ff9aafe": "updateMinimumBond(uint256)", +"0ffb1d8b": "whitelistToken(address,bool)", +"0ffbe43b": "initializeOfferChannel(uint128,address,address,uint256)", +"0ffdbd42": "feePoolShare(uint256,bool)", +"0fff6e06": "totalAvailableGames()", +"0fffbb54": "changeRankingSize(uint256)", +"10001fdd": "setPublicSaleParams(uint256,uint256,uint256,bool)", +"10002f39": "WorthlessEthereumTokens()", +"100153b6": "blocksByDay()", +"1001c39c": "tokensReleasedToIco()", +"100278d8": "startPreSale2()", +"100349fa": "Good_Bye_World()", +"10038099": "isPuppySports()", +"1003ac0c": "customFallback(address,uint256,bytes)", +"1003e2d2": "add(uint256)", +"10042e10": "remainingPublicSupply()", +"10055c1d": "role()", +"100565f4": "setTurnover(uint256)", +"10059be0": "do_redemption()", +"1006a41f": "auctionStarts(address,address)", +"10072af7": "SetupRaffle(string,uint256)", +"1007f753": "erase(uint256)", +"10082bff": "getActorBillXdetail(address,uint256,bool)", +"1008737d": "test_oneValidEqBytes32()", +"1008a2a5": "getTotalLendingItem(address)", +"10096c84": "exchangeBalanceOf(address,address)", +"10098ad5": "available(address)", +"100a0ed1": "receiveCreateAuction(address,address,uint256,uint256,uint256)", +"100a1099": "getTransactionIdsOf(address,address)", +"100a5ec5": "mintedCrowdsale()", +"100ab561": "updatePolicy2(bytes32,string,uint256,uint256,string)", +"100ac510": "addRx(address,address,uint256,uint256,bool)", +"100aca47": "totalFund()", +"100acefc": "_storeProof(string)", +"100af203": "reserveETH()", +"100b815d": "loadData()", +"100bce92": "toHex(string)", +"100be094": "setRefundRate(uint256)", +"100c6cfd": "ipoPlatformPercentage()", +"100c8ada": "setCAmodulus(bytes)", +"100c98fe": "SaleFailed()", +"100cdd91": "burnAll(uint256[])", +"100d7e30": "FuckFacebookCoin()", +"100e187a": "transferHolds(address,address,uint256)", +"100e4b94": "every_day_im_shufflin()", +"100ed0fc": "preallocateFirstStage(address,uint256,uint256)", +"100f23fd": "cancelWhitelistAddition(bytes32)", +"100f2e78": "determineSalaryTokens(address)", +"100f759f": "EDU_PER_ETH_SALE()", +"100f7a79": "registerBounty(address,uint256)", +"100fd02f": "isAbove(int256,int256,string)", +"101005bd": "releaseReserve(uint256)", +"10103122": "totalDurationInDays()", +"1010a515": "MONOGRAM()", +"101175e8": "BONUS_DATES(uint256)", +"10119521": "TokenBurnt(address,uint256)", +"1011a635": "changeCommissionFeeRate(uint256)", +"1013ad53": "KairosToken()", +"10142785": "assign(bytes,uint256,bytes1)", +"1014a29e": "firstRefundRoundRateDenominator()", +"1015295c": "ClaimMyBet()", +"10154bad": "addWhitelisted(address)", +"1016774e": "period3End()", +"1016ad94": "Baliv()", +"1016eadb": "Epilepsy()", +"10174967": "God()", +"1017a357": "HeirOwnershipClaimed(address,address)", +"101817ba": "getLastEmissionNum()", +"1018f294": "getRandom16(uint16,uint16)", +"1019635d": "assignReserved(address,uint8,uint256)", +"10196bf7": "pendingRefs(uint256)", +"1019dc59": "setSale(address,bool)", +"101a3fec": "setIsTokenTransactionOpen(bool)", +"101a889b": "LogBeneficiaryPaid(address)", +"101a917e": "makeTradeDetail(address,address,uint256,uint256,address,uint256)", +"101af16b": "countriesTokens()", +"101b6106": "RevokeEntity(bytes32,bytes)", +"101b7e7c": "vbtToken()", +"101b94f1": "setRightOfGroup(string,string,bool)", +"101ca1b9": "YoobaBatchTransfer()", +"101d1135": "ANNA(uint8)", +"101d52d2": "checkStoredFileName(string)", +"101d990c": "hmul(uint128,uint128)", +"101e1f2c": "initLottery(uint256,uint256,uint256,uint256,int256)", +"101e359b": "reviveFee()", +"101e5a32": "setSoftcap(uint256)", +"101e652e": "presaleUnlimitedStartTime()", +"101e8952": "forward(address)", +"101f13e2": "verifyProof(bytes,bytes32,bytes32)", +"102046db": "townPrice()", +"1021688f": "changeAdminAddress(address)", +"1022b30b": "proposalResult(uint256)", +"1023d597": "priceDecraseTime2Action()", +"102455a5": "sanity_check()", +"10253fec": "election(string,string,string,string)", +"10258bfd": "Payment(address,address,uint256,uint256)", +"10271334": "receiveICOcoins(uint256,uint256)", +"1027853f": "withdrawShare(address)", +"10278bc8": "setBytes32Value(string,bytes32)", +"1027e242": "getBoosterStrength(uint256)", +"10282b61": "payoutcount()", +"10286952": "parseKeys(bytes32[])", +"10288c4b": "startIco(uint256,uint256,uint256)", +"1028e4a8": "theCyberMemberUtilities()", +"1028f980": "getAssertDowntimeCost()", +"10290e51": "computeProfit(uint256,uint256,uint256)", +"102accc1": "fireEventLog2()", +"102b5cc5": "check_address_share_and_transfer_bond_token(uint256,uint256,address,address)", +"102b61f7": "setMinimumWeiAmount(uint256)", +"102c920a": "allRefunded()", +"102ce658": "setRule(address,string)", +"102deb9c": "changeMonethaVault(address)", +"102e58d0": "timeoutAt()", +"102e8b94": "sellnow()", +"102ff0b3": "amountToken()", +"10309781": "createdTimestamp()", +"1030adea": "change_king_name(string)", +"1030c539": "setCreditbit(address)", +"1030e227": "TroyToken(address,address)", +"1030f288": "releaseState2()", +"10314b07": "GOX(uint256,string,string)", +"10316eec": "getActionParametersCountByIndex(uint256)", +"10319417": "returnHost(uint256)", +"1031e34e": "raisedFromToken()", +"1031e36e": "pauseTrading()", +"10328e89": "CoinhiToken()", +"103359ce": "sendToIco()", +"10340069": "tokenDistributionPool()", +"10342d02": "endSaleCarProduct(uint32)", +"10347a2c": "lockSymbol()", +"10348938": "setRankDynamic(uint256)", +"10361bf2": "transferLog(address,address)", +"10369540": "icoPhaseAmount2()", +"1036bbe2": "MAX_PERCENT()", +"1036cde8": "allocateCustomer(address,uint256)", +"103728a3": "FundingFueled(uint256,uint256)", +"10375a67": "getRemainingTokens(address)", +"1037706d": "uploadSignedString(string,int256,bytes20,int256,string)", +"1037a5f4": "getPrev(uint256)", +"10388809": "setTransferPrice(uint256)", +"1039cf3c": "isIcoStopped()", +"103aeda7": "isContractAuthorized(address)", +"103b0506": "preter(uint256)", +"103b5dad": "computeIndexId(address,bytes32)", +"103bf0bd": "tSLDToken(address,address,address,address)", +"103cbb7f": "ethpyramid()", +"103cfacf": "CryptovationX(address)", +"103d26ac": "getRareItemsPrice(uint256)", +"103e8154": "sellComissionUnits()", +"103ed140": "_getSkill(uint16)", +"103ef9e1": "authorizeOperatorByPartition(bytes32,address)", +"103f3a83": "getAuraColor(uint64)", +"103f9251": "transferFrom(address,address)", +"10400446": "setMaxAppeals(uint256)", +"10402040": "createSaiCollectorsEdition(uint256,address)", +"1040233f": "LevelUp(address,uint256,uint32)", +"1040762d": "setExchangeRates(uint256)", +"1040dc27": "getSTODetails()", +"1040e5a5": "showBal()", +"10422c24": "releaseAngelVested()", +"1042604f": "isTrue(bool,string)", +"1042876d": "getDisplayName(address)", +"1042ca73": "getWeekIdx()", +"1043dcdf": "LastIsMe(uint256,uint256)", +"10442a1b": "GetMainAddress()", +"10443ab3": "setLotteryTokensWallet(address)", +"10445a16": "_joinGame(address,uint256)", +"1044bbe6": "unLockTokens()", +"1045290e": "Boocoin()", +"10458684": "GBCCoin()", +"1045a889": "buildContract(string,string)", +"1045de72": "isEndOffer()", +"1046bc68": "deleteContact(address)", +"1046d078": "transferItemFrom(uint256,address,uint256,uint256)", +"1046e2ab": "Flood_Standard_Ethereum_Coin(uint256,string,string,uint256)", +"1047456e": "userTransfer(address,address,uint256)", +"10476aa9": "_activateIfUserIsNew(address)", +"1047d79e": "freezTime()", +"10482f57": "getWhitelistedResolvers()", +"1048a25c": "view_random(address,address)", +"1049334f": "tokenBalance(address,address)", +"1049f742": "terminateEscrow(address)", +"104a5963": "targetDiscountValue9()", +"104a5e75": "getRareItemsPLATPrice(uint256)", +"104ace02": "register(string,string,string,string,string,string)", +"104b6704": "currentManager()", +"104b78bd": "amountRaised(bytes32)", +"104bb708": "GetStatusCount(string)", +"104bc708": "LamboCrowdsale(uint256,uint256,address,address,address[])", +"104bf512": "createBATokenContract(address,address,uint256,uint256)", +"104bff92": "HasBooster(address,uint256)", +"104c9cff": "releaseDividendsRights(uint256)", +"104ce199": "Launcher()", +"104d5fdd": "getPriceProxy()", +"104d7bbb": "LuzCoin()", +"104de5a1": "setPromoted(bool)", +"104e81ff": "_approve(address,address,uint256)", +"104e9929": "tokenPool()", +"104f2d8f": "_approve(uint256,uint256,bytes32,uint256)", +"104fea4c": "activeCrowdsalePhase2(uint256)", +"10510ec1": "payToken(address,uint256)", +"10518aeb": "removeOldFirst(address)", +"10519ff4": "WestCoin()", +"1051db34": "implementsERC721()", +"10523af3": "getPokemonCD(uint256)", +"1052506f": "isSignedBy(bytes32,string,address)", +"10525660": "setConsumeToken(address)", +"10549874": "tokenRate1()", +"1054d657": "divestETH()", +"105541ae": "returnPtSafeSmall()", +"10561361": "logDisputeCrowdsourcerTokensBurned(address,address,uint256)", +"105689a0": "doLockdown()", +"10570116": "newGroup(string,uint32,uint256,uint32,uint32,uint32,uint32,uint32,uint8)", +"1057ce8c": "create3DoggiesTokens()", +"10594e19": "JPGProject()", +"1059c492": "CROWDSALE_WALLET()", +"105a6356": "minimalSuccessUSD()", +"105ae3bf": "getRoundIsEnded(uint32)", +"105b2645": "CheToken()", +"105b6f00": "Fructus()", +"105c287b": "lockPeriod1()", +"105d3e0f": "cryptogs()", +"105d9e37": "disputeLength()", +"105e029f": "JSONpath_string(string,string,string)", +"105e68f0": "allBankers()", +"105e87a1": "redeemaAt(bytes32)", +"105ea540": "minimumToRaise()", +"105edd83": "toTheTop()", +"105ee9a7": "endFight(uint256,uint256,bool)", +"105fc4e8": "REQUEST_FOUNDATION_AMOUNT()", +"105ff033": "redeemReward(address,uint256)", +"10609902": "sendFundsToBorrower()", +"1060c965": "ZILLION()", +"106109c9": "RandiveBhToken()", +"10618776": "setETHUSDdemon(address)", +"10619300": "lockAccount(bytes32)", +"106233e8": "addAltOracle(address)", +"106259c8": "getNonEtherController()", +"10639ea0": "cancelMigration()", +"106524a5": "multisendEth(address[],uint256[])", +"106639ba": "getOwnAssets()", +"1066cd3c": "voteFor(uint16,address,bytes32,bytes)", +"1067f077": "setCompte_41(string)", +"1067f361": "totalTokenToSale()", +"10680b84": "getShareTokenAddress()", +"106812c9": "setPI_edit_18(string)", +"106858cb": "getRemainingPreSalesAmount()", +"1068d056": "getaddress0()", +"106a182b": "getLambosCount()", +"106b291f": "ethUsdRateInCent()", +"106bd2da": "initiateEscrow(uint64,uint256,address,address,address,address)", +"106be310": "getNameByNumber(uint256)", +"106c0a45": "collectOriginalBetERC20(address)", +"106c5511": "create(address,string,string,uint8,uint256)", +"106c6441": "removeReinforcedWhitelist(address[])", +"106c9da1": "mine(uint256,uint256,uint256)", +"106d2813": "setCreditGameAddress(address)", +"106e6290": "withdraw(address,uint256,bytes32)", +"106f6a3d": "TOKEN_FIRST_EXCHANGE_RATE()", +"106f6f33": "bountyTokensCount()", +"106f77a7": "multiMint(uint256,uint256[],uint256)", +"106f923f": "RewardClaimed(address,uint256)", +"106fcb7a": "changeAsset(bytes32,string,string,uint8)", +"106fd2d5": "setSaleAddress(address,address)", +"106ffbd3": "withdrawBatchTokenToInvestor()", +"107046bd": "projects(uint256)", +"1070eb4f": "calculateInterestDue()", +"1070f410": "convertToBytes(uint8[],bytes1)", +"10711911": "BONUS_TIER_5_LIMIT()", +"107169c5": "allLinesWrong()", +"10717a2e": "switchCompatible223(bool)", +"10718655": "contributeFor(address)", +"1072cbea": "transferToken(address,uint256)", +"10731a65": "claimTokenOwnership()", +"10735089": "readteamXaddr(address)", +"1073c4a9": "exploreBuilding(uint8,uint8[176])", +"1073d1f8": "releaseTprFund()", +"10745f7e": "getMinAmountToWager(uint256)", +"1074c619": "flushEthers()", +"1075153f": "multiPartySend(address[],uint256[])", +"1075f186": "fundingPoCEndTime()", +"10764268": "salvageOtherTokensFromContract(address,address,address,uint256)", +"10768bdd": "myUsingOracalize()", +"10769e01": "POOL_EDIT_2()", +"1076c2d7": "StreamXOnline()", +"1077135a": "oraclizeSetWinner(uint256)", +"1077666e": "unmined()", +"1077f06c": "makeClaim(uint256)", +"10780cce": "grantsStartTimestamp()", +"107853a9": "Spacoin()", +"10787d58": "checkfriend(address)", +"1078ad80": "makeContractPermanent(string)", +"107925bb": "viewCustomer(string)", +"10793b50": "m_contributionHistory()", +"10796a47": "staticCall(address,bytes,bytes)", +"10797bab": "runtoeth(uint256)", +"1079b859": "finalRewardPeriodPercent()", +"1079ed67": "getChildByAddress(address)", +"107a2c5e": "betEvents(uint256)", +"107a69e8": "WithdrawResult(uint256,bytes32,uint256)", +"107a77d0": "finalizeVestingAllocation(uint256)", +"107a83e2": "prizesAwarded()", +"107b1f8c": "debug_verifyShare(bytes,uint256[],uint256[],bytes,uint256,uint256)", +"107bf304": "withdrawEthToOwner(uint256)", +"107d1d55": "startPeriod(uint256,uint256)", +"107d4b23": "Bitcan()", +"107d8a90": "COBA()", +"107e1a29": "setEndTimeIco(uint256)", +"107e7b1f": "setBroker(address,uint256)", +"107e8b24": "setTimeSale(uint256,uint256)", +"107f3f6a": "setExeStatus(uint64,uint64)", +"107f587c": "deactivateEmergencyProtectedMode()", +"107f76c5": "cancelOrder(bytes32,uint64)", +"10802749": "maxPlayerNum()", +"1080b7b1": "token4DivsOwing(address)", +"1080f251": "ownerOfLand(int256,int256)", +"10814c37": "bot()", +"10816757": "crowdsaleClosingTime()", +"1081dc8a": "contractIndex(uint256)", +"10828bcc": "noOpenGameResult()", +"1082a128": "SaveRickAndMorty()", +"1082cda1": "Register(bytes32,address)", +"1082d51e": "COINESIA()", +"1083d2fe": "technicalAmount()", +"1083f761": "assetToken()", +"10840303": "alterAdmin(address,bool)", +"108456b4": "FIRST_AUCTIONS_MINIMUM_RAISE()", +"10848ddf": "getDaysInMonth(uint256)", +"1084a1fb": "transferToAccount(bytes32,uint256)", +"1084bc90": "farmSingle(address,address,uint256)", +"1084cc51": "canDoubleDown()", +"10855269": "setProxyStorage(address)", +"10861f40": "wasDelegate(address,address,uint256)", +"108623f2": "checkProofOfWork(uint256,uint256,uint256)", +"10867877": "eatUnicornWithoutCorn()", +"1086a9aa": "approve(address,uint64)", +"1087452c": "signatureOwner()", +"10875ac0": "getMembershipExpiryDate(address)", +"10878ea1": "REGISTRY_INTERFACE_REQUIREMENT()", +"10888f2f": "admin_exFeeRate(uint256)", +"1088996b": "_newOutgoingTransaction(address,address,uint256,string)", +"1088f03f": "crowdsaleCompleted()", +"10895087": "DDJXRP()", +"1089843c": "OAKTokenCrowdsale(uint256,uint256,uint256,address)", +"10898a3e": "currentStateStartTime()", +"1089b16e": "setPod(address,uint8)", +"1089f215": "ex(uint256)", +"108a101b": "hasEmptyEditionSlots(uint256)", +"108a936b": "_initGame(uint256,bytes32,bytes32,bytes32,uint256)", +"108afb9f": "getBonusAmount(address,uint256,uint256,uint32)", +"108b77ad": "tokenPresaleSold()", +"108c3708": "paoContactAddress()", +"108c8ae4": "completeTask(uint256,uint256)", +"108caf79": "whitelistTokens()", +"108d0c84": "enableDefinedGame(uint256,bool,bool)", +"108d40f8": "PutGift(address)", +"108d6f94": "ProjectOwner()", +"108d995b": "getContinuityNumber(uint32)", +"108e161b": "isBallotSealed(uint32)", +"108e4bdb": "isKycTeam(address)", +"108eaa4e": "resolver(uint256)", +"108f69f8": "verifyTetherLoss(address,uint256,uint256)", +"108fa161": "newEnglandBets()", +"108fe10c": "advisers(uint256)", +"109050bc": "jackpotLastQualified()", +"1090a638": "presaleGoalReached()", +"10922cc1": "testTransferCost()", +"1092735d": "Created(address,uint256,uint8,uint256,string)", +"10937b5a": "adminAddMoney()", +"1094252e": "reconciliationDate()", +"109447e1": "createHash(uint8[5],bytes32)", +"10947164": "changeCEO(address)", +"1094d009": "LowGasAmount()", +"10950708": "setInvoicePaid(address,address,uint256,uint256)", +"109538ca": "transferAdeptTokenOwnership(address)", +"10953c22": "ChangeChallengeAdditionFee(uint256)", +"1095b6d7": "withdrawFee(address,address,uint256)", +"1095f211": "PushInvestorList(address)", +"10961935": "Bionic()", +"10970fbb": "convertTransferredTokensToMny(uint256,address,address,uint256)", +"10971bee": "bonusDayPercent()", +"10972704": "getCurrentAward()", +"10978594": "depositSoul(uint256)", +"1097b9ee": "sellingPrice(bool)", +"1097c929": "episodePurchase(address,uint256)", +"1097d54a": "addMaster(address)", +"1097e579": "Enter()", +"1099107b": "apSaleIssue(address,uint256)", +"1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", +"1099f6fa": "disablePOSReward(address,bool)", +"109a9dbc": "bulletAddress(address)", +"109ac462": "safebalance(uint256)", +"109b678a": "immortals(address,uint256)", +"109c2032": "LotteryToken()", +"109d42d3": "addTokenSale(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"109df68e": "rotateBitsRight(bytes,uint256)", +"109e591a": "SchmecklelToken()", +"109e8b21": "addOldMayors(uint256[],uint256[],address[])", +"109e94cf": "client()", +"109e9de6": "getMaxBuy(uint256)", +"109ef276": "newDutchPriceRate(uint256,uint256)", +"10a03b22": "PHASE1_SUPPLY()", +"10a0d2f1": "startOfCrowdsale()", +"10a101df": "getKeyData(bytes32,bytes32)", +"10a20b4c": "testMintGuy()", +"10a2f7cb": "createOption(uint256,string)", +"10a31091": "createRadar(uint256)", +"10a37c26": "getWinnerAddress()", +"10a3ec4f": "test_fiveAssertTrue()", +"10a4fd08": "Platinum()", +"10a5bbdb": "changeCharPrice(uint256,uint256)", +"10a64976": "ARLCToken(uint256,string,string)", +"10a6fdc2": "updateEtherPrice(uint256,uint256)", +"10a73f5e": "jackpotrate()", +"10a78f4a": "playerTwoReveal(bytes32,bytes32)", +"10a7a5f5": "secondStageWallet()", +"10a80397": "addBudget(uint256,uint256,uint256)", +"10a82579": "lockTokensAddress()", +"10a86088": "getIntField3()", +"10a942b4": "withdrawCoindropsToken()", +"10a9de60": "getOracle(uint256)", +"10aa3d8c": "VirsymCoin(string,string,uint256,address)", +"10ab96e1": "LYNDO()", +"10abda2b": "leaderAddress()", +"10abdb0a": "Dealer_HitOrStand(uint256,bool)", +"10acec5d": "_save(address,uint256,uint256,uint256,string,string,address,uint256,uint256)", +"10adb0ea": "sanMaxLength()", +"10adda0e": "feesAvailable(address,bytes4)", +"10ae4a73": "presaleAllocation(address,uint256,uint8)", +"10ae4ce2": "setReleaseValidator(address)", +"10af92ba": "eachCandy()", +"10b0a4cb": "updateServiceMaxCreditsPerProvision(address,uint32,uint256)", +"10b0b5d5": "add(uint256[])", +"10b1bf2c": "LongPlace(address[2],uint256[8],uint256,uint256)", +"10b23ceb": "isAdjacent(uint8,uint8,uint8,uint8)", +"10b3d502": "ICO_BONUS2_RATE()", +"10b44094": "LogUserRegistered(address,address)", +"10b60e65": "SimpleTrade(address,address,uint256,uint256)", +"10b787d1": "evaluate_model(uint256)", +"10b798d9": "countRef(address)", +"10b7d9ae": "view_get_maintenanceMode()", +"10b8b441": "PrediksiToken()", +"10b9e583": "shutDown()", +"10bc044f": "setUserLanguages(address,address,uint256[])", +"10bc3c75": "getCurrentMiner()", +"10bd0d9e": "LegendsToken(address,address,uint256,bool)", +"10bd6d2b": "__address2__()", +"10bdc6cc": "joingames(uint256)", +"10be0ab0": "getDaoist(address)", +"10be3808": "receivedWei(address,uint256)", +"10beb070": "getRaffleStats()", +"10bebe64": "OneExchangeToken()", +"10bf5068": "setProposalFee(uint256)", +"10c067d2": "setPriceForProtectedCrypton(uint256,uint256)", +"10c0afaa": "balanceForReward()", +"10c1181d": "memberId()", +"10c12917": "calculateWinnings(uint256,uint256)", +"10c193b9": "total_tokenwei()", +"10c19421": "born()", +"10c1952f": "setLocked()", +"10c1b414": "moveTokens(address,uint256)", +"10c1de19": "GeneratedNumber(uint256)", +"10c1ff21": "crowdsaleSuccess()", +"10c2a365": "PreICO()", +"10c2c1c1": "setArbiter(uint256,address)", +"10c36365": "SetExchanger(address,bool)", +"10c3b15f": "calculateAmountToRelease()", +"10c452ef": "deactivate_trading()", +"10c4610b": "exporterBanker()", +"10c49b78": "CarlosCoin()", +"10c4b19a": "minMakerBetFund()", +"10c4e8b0": "all()", +"10c5b269": "orderMatchSell(uint256,uint256,uint256,uint256,uint256)", +"10c5b328": "mintTokens(uint256,address)", +"10c70801": "setMaxAddresses(uint256)", +"10c74fc6": "setGlobal(uint256,uint256)", +"10c7868f": "sessionNumber()", +"10c9135e": "getTime3(address)", +"10c9ab39": "makeTrans(address,uint256)", +"10c9c76d": "updatePokecoinAndPokemarketAddresses(address,address)", +"10cad61f": "combinedGoalReached()", +"10cad69c": "getBrickIds(uint256,uint256,bytes32[],uint256,uint256,uint256)", +"10cb4302": "DstTokensIssued(uint256,uint256,uint256,uint256)", +"10cb4d64": "rejectCurrentPlayerDraw(bytes32)", +"10cb5628": "isPartOf(uint256)", +"10cb954c": "members_push(address,address)", +"10cbe445": "applyMC()", +"10cc6e21": "Dappster()", +"10cc969b": "sumbitForElection()", +"10ccbbdb": "_checkVotes(address)", +"10ccbe66": "setAltCapitalization(uint256)", +"10ce0516": "canSwap()", +"10ce2f3f": "buy3(address[],address[],uint256[],bytes,bytes,bytes)", +"10ce6452": "set_deposit_fee(uint256)", +"10cf5d47": "awaitingPayout()", +"10cfcc19": "left17(uint256)", +"10d0059c": "removeLock(uint256)", +"10d07e27": "_lotteryCard(uint256,address)", +"10d08ef4": "_check_winner()", +"10d0ffdd": "calculateTokensReceived(uint256)", +"10d26354": "greaterThan(bytes32,bytes32)", +"10d2f2e5": "set_whitelist_enabled(bool)", +"10d3bd2a": "transferMoneyMoney(address,uint256)", +"10d426f2": "_remove(address)", +"10d48cd3": "verificationAddressOn(address)", +"10d5105d": "offlineTransfer(address,address[],uint256[],uint8[],bytes32[],bytes32[])", +"10d58506": "transFeeCut()", +"10d5e276": "maxAttempt()", +"10d6a13a": "tokenSaleClosingTime()", +"10d72742": "removeFailedGame()", +"10d7b903": "DIALSSPUN()", +"10d89d37": "isExchangeUser()", +"10d8d74d": "setPrice(bytes32,uint256)", +"10d92060": "requiredGasPrice()", +"10d979f6": "tokenDivsOwing(address)", +"10da9f75": "StayBitContractFactory()", +"10dc0e3c": "decimalOfPrice()", +"10ddaa87": "_setCurve(uint256[],uint256[])", +"10ddd6fc": "_onPromo(address,uint256)", +"10debdf8": "isAuditFinished(uint256)", +"10dff452": "getStatsData(uint256)", +"10e04dcb": "BONUS_500()", +"10e0ebb3": "callStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"10e1c5e5": "getKrsFromApproved(address,uint256)", +"10e1d6db": "payoutEscrow(uint256)", +"10e22d41": "receivedWei()", +"10e2b914": "setTargetDiscountValue6(uint256)", +"10e3a28b": "iEther()", +"10e56973": "keyPrice()", +"10e5bff8": "setSuccessor(address)", +"10e6913e": "upDate()", +"10e6a223": "allocateSurvivorWinnings(address)", +"10e6be35": "getRewarder(int256)", +"10e6d3c9": "teamReservation()", +"10e6d746": "_mint(address,string)", +"10e6e06c": "vote(bool,uint256)", +"10e776ed": "lockBalanceOf(address)", +"10e7a9ce": "countMonths()", +"10e7e89f": "getLockingTimestampfrom()", +"10e80ded": "accumulate_to()", +"10e82384": "airdropAdmins(address)", +"10e89b22": "remove_deal(uint32)", +"10e96b3c": "createMorePaymentChannels(uint256)", +"10e9f2eb": "_getFetchVoteInterface(uint256)", +"10ea13df": "totalInvestment()", +"10ea6b34": "setReadOnly(bool)", +"10eae945": "wdToken(address,address,uint256)", +"10eaf707": "getWarehouseByAddress(address)", +"10eb3a32": "getContinuityNumber(uint32,int256)", +"10eb5a8c": "transferAndCallFST(address,uint256,bytes)", +"10ebb38d": "ASFBToken()", +"10ebf103": "getPokemonBet(uint256)", +"10ec5d2c": "funeralAndBirth(bytes32,int256,bytes32)", +"10eca945": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256)", +"10ece9c6": "correctedHeroContract()", +"10ed5dfe": "_emitActiveChanged(bool)", +"10ee1910": "submitGameResultAndTriggerPayout(uint256)", +"10ee51ca": "GXVCSentByEther(uint256,address,uint256)", +"10eeb69a": "arbitrate(uint256,bool)", +"10ef0ac7": "endTimeICO()", +"10ef1976": "getEpmBalance(address)", +"10f01eba": "pIDxAddr_(address)", +"10f0c4da": "maximalInvestment()", +"10f13a8c": "setText(bytes32,string,string)", +"10f169e8": "disputeStatus(uint256)", +"10f1726d": "isDayTokenActivated()", +"10f1a274": "setMinWei(uint256)", +"10f226df": "addAction(bytes32,int256,int256,bytes32[],bytes32[],bool)", +"10f2bf3e": "closeSale2()", +"10f2e11c": "PrometheusX(address,address)", +"10f32982": "GetQueueLength()", +"10f3ac24": "EmergencyWithdrawNoAccountedTokens()", +"10f40804": "alottMainSaleToken(address[])", +"10f41715": "updateMintingData(uint256,uint256)", +"10f444ac": "ChinaInvestmentToken(uint256,string,uint8,string)", +"10f5f1b3": "get_participant_arbits_kyc_whitelist(address)", +"10f5f6b6": "free_vote_for_candidate_A()", +"10f66c54": "AirdropOne(address,uint256)", +"10f6e2a6": "setCountWinnerByPlace(uint256,uint256,uint256)", +"10f6fd02": "GetAllChallengeIDs()", +"10f74467": "kycRegisteredContributors(address)", +"10f7cf32": "statuses(bytes32)", +"10f85f44": "EAACoin()", +"10f88546": "declareCheater(address)", +"10f91e39": "walesaDawajMojeStoMilionow()", +"10f945c7": "withdrawToPoolOwner(uint256)", +"10fa01e6": "isBattleCreator(string,address)", +"10fa85c6": "HybridToken(string,string,uint8)", +"10fab6c7": "addReceivedMessage(address,address,uint256)", +"10fae6f4": "futureFundingWalletAddress()", +"10fb3c85": "addDelayedBonus(address,uint256,uint256)", +"10fb52bf": "createSaiFoundersEdition(uint256,address)", +"10fc0a6e": "RigCraftPresalePackageManager()", +"10fc0d39": "transferToMultisig()", +"10fc31ce": "balancesForPreICO(address)", +"10fccbf0": "presaleBurnPaused()", +"10fcda55": "DDFToken(uint256,string,uint8,string)", +"10fcdecc": "fechVoteInfoForVoter(address,uint256)", +"10fe42b8": "getBdpControllerHelper(address[16])", +"10fe5a2a": "rateEarlyStage3()", +"10fe7c48": "placeBet(uint256)", +"10fe9ae8": "getTokenAddress()", +"10feb0e5": "setPowerToken(address)", +"10ff4a1b": "lockedTokenBalance()", +"1100482d": "attach()", +"1100a9d8": "endGame(uint256,uint256,address)", +"1101a0fd": "claimWinnings(bytes32,bytes32[],address[],uint256[],bytes32[])", +"1101eaaf": "purchaserCount()", +"1101fa06": "WhaleChain(uint256,string,uint8,string)", +"1102610e": "setMarketplaceContract(address)", +"110466ed": "setOperatingStatus(bool)", +"110496e5": "allow(address,bool)", +"1104e09e": "SaddleShopSaleFee()", +"110506f0": "createCard(uint256,uint256)", +"11056874": "finishDApp(bytes32)", +"1105efe2": "_setExtraReceiverAmount(uint256,address)", +"11063eb1": "updateUnlockDate(uint256)", +"11071cb3": "CratesPurchased(address,uint8)", +"1107c3f7": "orderConfirmer(bytes32)", +"1107e77c": "removeRequester(address)", +"1107fa00": "thirdStageMintingDate()", +"1109a0a8": "blocksProducers(uint256)", +"1109ef92": "transferFromCrowdsale(address,uint256)", +"110ae711": "checkReferral(bytes8)", +"110b5f76": "ApprovalDenied(address,address)", +"110b8a6d": "changePlatformFlag()", +"110c478b": "uintRound(uint256,uint256,uint256)", +"110cee6b": "FlightDelayPayout(address)", +"110d35b8": "buyAsset(uint256)", +"110d9e68": "insert(bytes32,uint256,uint256,address,address)", +"110dc7a6": "doInvest(address[3])", +"110df916": "getChannelID(uint256)", +"110f8874": "withdrawRefund()", +"110fd65f": "toBeRaised()", +"111002aa": "createTask(string)", +"11102d4d": "devRatio()", +"11103599": "Token_Offer(address,address,uint16)", +"1110b13a": "getWinningPosition(uint32)", +"11115e38": "controlTime()", +"1111cd24": "getBuyReturn(uint256)", +"11125497": "setCodename(string)", +"1112b124": "setBuyPrice(address,uint256)", +"11136747": "_init(uint256)", +"1113ed0d": "KERNEL_APP_ID()", +"1113f2e6": "_addEth(uint256,address)", +"1114811a": "FACTOR_9()", +"111485ef": "individual_cap()", +"11149ada": "getProof(uint256)", +"1114fce5": "clearAdmins()", +"1116cba9": "WWNCoin()", +"1116f631": "setFunctionSevenPrice(uint256)", +"111723ed": "getShipDetails(uint256,uint256)", +"1118069c": "enforceKyc(bool,address)", +"111839d5": "rushTimeFloorCount()", +"11184392": "registrationDeadline()", +"111878f6": "addBonus(uint256)", +"11191186": "setReservingPercentage(uint256)", +"11196117": "setGameStateFCF(bool)", +"11196cc2": "tournamentFinished(uint256[])", +"11199872": "setSignatureChecker(address)", +"1119e8a6": "increaseNumber(uint256)", +"111a1fe9": "dividendsBuffer()", +"111a7427": "setNewAttributes(string,string)", +"111b30a7": "setFundariaTokenBuyAddress(address)", +"111b63ab": "CoinparkToken()", +"111b72c3": "accountCreated(address,bytes32,int256)", +"111bc51a": "VibeCoin()", +"111cf909": "setIntegerVaule(uint256)", +"111d7241": "tournaments()", +"111d8171": "getNews()", +"111da3a7": "popFirstFromArray(address[])", +"111e73ff": "SetAlias(uint256,bytes32)", +"111eaba0": "updateOwners(address,address[],uint256,uint8[],bytes32[],bytes32[])", +"111fba02": "NETM()", +"1120ba47": "ApolloSeptemCrowdsaleExtended(address,address)", +"112227ae": "TIER3_BONUS()", +"11223a2f": "phasePublicSale1_From()", +"1123adb1": "currentDividendPeriodNo()", +"1123cdd9": "decideSplit(uint256,uint256,string)", +"1123e608": "LogMigrate(address,uint256)", +"1123efd5": "getNumGamesStarted()", +"1123fcce": "getEmployeeCount(address)", +"11247233": "changeArrangerFeeRecipient(address)", +"1124c05a": "getLogs(uint256)", +"1124e9ea": "setfocuscardid(address,address,uint256)", +"11262105": "getLog(address,uint256,uint256)", +"11269de6": "setFreezeForCoreTeam(uint256,address,uint256)", +"1127be97": "recomputeLastAverageBalance()", +"1128798f": "isCrowdSale()", +"1128b59e": "bonusStage2FirstDay()", +"1128bbfd": "getProposalAddress(uint256)", +"112940f9": "addConsumer(address)", +"1129f644": "STAKE_START_TIME()", +"112a19af": "Enlisted(address)", +"112b3c52": "MuxeToken()", +"112b4495": "_appendTagged(string,string,string)", +"112b466e": "btcraised()", +"112c7075": "ManualDeposit()", +"112cc015": "ROLE_CRO()", +"112d6b34": "getRefBalSended()", +"112d761c": "addAnimal(uint8,address,uint32)", +"112dd4fd": "foundation_coins()", +"112e39a8": "scheduleCall(uint256)", +"112e40b5": "setBalanceOfETH(address,uint256)", +"112ea262": "authorizeProvider(address)", +"112ed3f5": "resetWeiBalance(address)", +"112f5eb8": "airdropCall(address,address,uint256)", +"112fb7c9": "finishGenerating(bool)", +"112fbe9b": "transferMinimumFee(address)", +"11302818": "addRefBonus(address,uint256)", +"11308d66": "freeLandsOf(address)", +"1132fae4": "_utoa(uint8)", +"113353a8": "changeMember(uint256,address,address)", +"1133f89d": "sendToGrowthContract()", +"11340c21": "getEGTTotalSupply()", +"1134269a": "convertForPrioritized(address[],uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"11349a6d": "dispute_end()", +"1134b7da": "emptyBody(uint256)", +"11355585": "setBlockLimit(uint256)", +"1135b3ac": "allocateInternalWallets()", +"113642e5": "getConfirmationCount(bytes32)", +"11367b26": "destroyer()", +"1136aa64": "rocketTravelTime(uint256)", +"1138001c": "lenghtenFrozenState(uint256,uint256)", +"11390441": "logic(address)", +"113990b8": "PRICE_MULTIPLIER()", +"1139a355": "releaseForTransfer()", +"113a8ed5": "Film()", +"113b2eff": "_userRefund(address)", +"113b5cf2": "checkBonus(address)", +"113bb8db": "EventTransfer(address,address,uint32)", +"113c589f": "SmartBillions()", +"113ca356": "ticket(address,bool)", +"113ce458": "winnerBidValue()", +"113d1975": "totalTokensForSaleDuringICO4()", +"113d32d0": "TournamentCreated(uint256)", +"113d8938": "addBytesSetting(string,bytes32,address,address,string)", +"113e2088": "votingData()", +"113e5b93": "dayToDate()", +"113e6b66": "fipsAddToLedger(bytes20,address)", +"113e9d4f": "DigitalKeyCoin()", +"113ee583": "aliceClaimsPayment(bytes32,uint256,bytes32,address,address)", +"113ee964": "transferFromByDate(address,address,uint256[],uint256[])", +"11400d8e": "priv_fastGetBlockHash__(int256,int256)", +"1141d7de": "URI()", +"11420f90": "MYINITIALSUPPLY()", +"11424eac": "implementInterface(string)", +"11428ce8": "DTXToken(address)", +"1142d47f": "spentFunds()", +"114385a0": "AddReward(uint256,string,string,string,uint256)", +"1143c026": "disableICOSwapLock()", +"11448a56": "scuttle()", +"11456b47": "addName(string)", +"11459f9c": "viewFinalScore(uint8)", +"1145a20f": "scheduleCall(address,bytes4,bytes32,uint256,uint8)", +"1145a49c": "test_oneTrueAssert()", +"1146015e": "setData_6(uint256)", +"11461614": "pushRatePlan(uint256,string,bytes32,bool)", +"114630e1": "ADVISORS_TOKENS_SUPPLY()", +"11463a01": "getChampion()", +"11466110": "Pretorian(string,string,string)", +"11467d7c": "deactivateUser(address,uint256)", +"1146eedd": "Referrer(address)", +"114719c5": "getLongGap()", +"11471e17": "tokensPerEther2()", +"1147b142": "MercatusDeals()", +"1148d93e": "initializedRatify()", +"1148da2f": "proposeWrittenContract(string)", +"11497c69": "PlayChapToken()", +"1149b5f5": "PendingManager(address)", +"1149f736": "unpackPrice(uint16)", +"114b4f1c": "howManyGuaranteed()", +"114beab3": "availableTokensforPreICO()", +"114d081d": "markHours(bytes32,bytes32,int256)", +"114d38a0": "notExceedingSaleCap(uint256)", +"114d69b2": "setCRLaddr(address)", +"114d8be1": "addNewOwner(address)", +"114da3e3": "mintWithEvent(address,uint256)", +"114de05e": "addMultipleRecords(uint256[])", +"114e4802": "congratulationsText()", +"114e6b37": "setDependencies(address,address,address,address,address,address)", +"114f0e49": "player4()", +"114f9511": "pay(bytes32,uint256,address,bytes)", +"11506970": "freezeTokensAmount()", +"11506d4b": "forgiveThis(address)", +"11513ba5": "setTTWTokenAddress(address)", +"11552212": "Hodl(address,uint256)", +"1155d042": "accumulateFee()", +"1155f60f": "RoundBetStarted(uint256,uint256)", +"11563b04": "ETokenAirdrop()", +"11566dd7": "fundingMax()", +"11567f95": "readnameXaddress(address)", +"115793d4": "newClockmaker()", +"1158183a": "isPreIcoActive()", +"11589260": "_createProxy(address,address)", +"1158f696": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes32)", +"115976c4": "admin1()", +"1159f39b": "transferFromCroupier(address,uint256)", +"1159fd53": "isAContract(address)", +"115a43e9": "getWarriorOwners(uint256[])", +"115b7fa8": "setOverBalanceLimitHolder(address,bool)", +"115bd3f8": "rejectInvestmentWithdrawal()", +"115bdfe7": "currencyMap(address)", +"115ce332": "isAddressMember(address)", +"115d5376": "passPeriod(uint256)", +"115e397e": "getTotalchannels()", +"115e9375": "getUint256Min()", +"115ecc58": "fundStorageVault()", +"115ece4c": "getTokenAmount(address,uint256)", +"115f2be2": "customBuyerLimit(address)", +"115f2f2f": "tokensPerUSD()", +"115f6795": "cratesSold()", +"115fd072": "PowerStandardToken(uint256,string,uint8,string)", +"1160a807": "addWinTickets(uint256,uint256)", +"1160b93b": "calculatePayrollRunwayInMonths()", +"11610c25": "bet()", +"116134ee": "mask()", +"11613fc9": "godBank()", +"116191b6": "gateway()", +"1161a5c8": "registMyHns(string,address)", +"1161d226": "_participateIsAllowed(uint256)", +"1162247e": "lastTwoAmbassadorsAdded()", +"11642134": "produceEmeralds(address,uint256)", +"1164e11e": "getPurchaserAddressCount()", +"1165214d": "NotToRent(uint256,uint256,address)", +"1165dce2": "getTeamList()", +"11667335": "adminRetrieveContractConfig3()", +"1167ecb2": "finishPreICO()", +"116877cc": "changeAuthority(address)", +"116a6f6c": "BONUS_TIER_7_LIMIT()", +"116a8221": "airFropTracker_()", +"116b556b": "founder1()", +"116b7aa9": "setGameGiftOnceAmount(uint256)", +"116c347a": "_withdrawTokensTo(address)", +"116c6eab": "getProfitShare(address)", +"116c92b7": "addAccount(address,uint8,bool,address)", +"116d816b": "assetManagement(address)", +"116e4ca9": "flag_is_Online_Solidity_Decompiler_NB()", +"116e8726": "crowdsaleDasTokensChangeBeneficiary()", +"116ea900": "createETHCardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"116fb2a8": "setTokensPerETH(uint256)", +"116fe01b": "ClipperCoin(uint256,string,uint8,string)", +"11704f52": "tradingLive()", +"1170a759": "withdrawalCoolingPeriod()", +"11715316": "CorpCoin(address,uint256)", +"11715c94": "getBonusRateForAmountBased(uint256)", +"11717501": "IEFBR14Contract()", +"11719d7e": "getCrowdsalesForUser(address)", +"11725ac5": "Determine_FiveLinkGame_Result(uint32)", +"11728ecf": "toKey(address,uint256)", +"117328b9": "LogBidReturned(address,uint256,uint256)", +"11737d7b": "getFreeTime()", +"11738735": "bnbWithdrawEnabled()", +"1173ca7d": "CashBackToken()", +"11746e5e": "getSpaceshipProductCount()", +"1174ca26": "totalLossValue()", +"117546c5": "lastParentBlock()", +"1176205e": "setMaxRequestQuota(uint256)", +"1176f5f7": "setDisputeData(uint256[2])", +"1177275e": "ZferToken(address,uint256,uint256)", +"117735f0": "NewQuest(string,bytes32)", +"1177645b": "set_devContract(address)", +"11776737": "CrowdServe(address,uint256,uint256)", +"11777af7": "refundVault()", +"1177892f": "getBalanceByAdress(address)", +"1177dc34": "nullFace(address)", +"117803e3": "OWNER()", +"11780a01": "erc20tk()", +"11789bec": "njbToken()", +"1178f51a": "ubiatarPlayVault()", +"11791368": "removeCurrentIcoRound()", +"1179778b": "setBasePremium(uint256)", +"1179cf71": "lowEtherBonusValue()", +"117a0a22": "CosmoToken()", +"117a4425": "setII_S(uint256)", +"117a5b90": "games(uint256)", +"117b198e": "soldTokensLimit()", +"117b4705": "retract(bytes32)", +"117b652b": "rewardinterval()", +"117cae9a": "editStartlist(uint256[],uint256[])", +"117d4128": "getOrder(uint128)", +"117d82d6": "playCount1()", +"117d94f5": "sendFundsToWallet()", +"117ddaf9": "weiRaisedInPreICO()", +"117de2fd": "payout(address,uint256)", +"117df088": "withdrawDeposit()", +"117e1ebb": "lastRoundWinnerInfo()", +"117e62fd": "getLastAuctionsWinningBid()", +"117f8684": "changeBZxVault(address)", +"1180788e": "searchString()", +"1180d67e": "angelFoundationShareNumerator()", +"1180f83b": "changeFMPcontractAddress(address)", +"1181324b": "updater(address)", +"11815312": "grantTeamAdvisorSupply()", +"1181a459": "freezeAdministrationContract()", +"11822cb7": "UTPL()", +"11823d43": "OCMarket()", +"11823e04": "advisorAllocation()", +"1182c796": "debug_is_dry()", +"11831234": "testFailPullWhenStopped()", +"1183429a": "removeAddressesFromWhitelist(uint256,address[])", +"11844aae": "period2End()", +"11851b5e": "BOARD_3()", +"11857ed7": "spendAdvertising(uint256,uint256)", +"1185a6b9": "getBBFarm(uint8)", +"118644f6": "OxBtcDex(address,address,address,uint256,uint256,uint256)", +"118654f1": "XinXianToken(address,uint256)", +"1186560e": "increaseEthRaised(uint256)", +"11873ee7": "SetGuestName(string)", +"1187497e": "updateContractState(uint256,uint8)", +"1187648b": "testInstant(uint256[3])", +"11878333": "InitialToken(string,address,uint256)", +"1187d66e": "votedNo()", +"1188189e": "storeSomething()", +"1188263c": "MBOTCOIN()", +"1188324b": "soldCWC(address,uint256,bytes32)", +"11883c6d": "make_hash(uint256,uint256,address,address,uint256,uint256)", +"11886bd4": "view36()", +"118934cc": "ownerCommission()", +"118a0aae": "addHero(string,address,address,uint256,uint256)", +"118a9db3": "revenueShare(uint256)", +"118aa5a1": "convertToRate(bytes32)", +"118b0f04": "santToken()", +"118b53ec": "LogTeamTokensTransferred(address,uint256)", +"118cbccb": "etherWeiRate()", +"118ceab6": "lastAdjust()", +"118da6fb": "getGameCompleted(uint256)", +"118dd8fc": "bonusesAfterClose(uint256)", +"118e1f2e": "globalOrderSerial()", +"118e31b7": "getBorrowBalance(address,address)", +"118e4575": "get_branch(uint256)", +"1190516d": "GetByte(uint256,uint256)", +"1190647c": "buyerHistory(address,address,uint256,uint256)", +"11916ce7": "moveIcoTokens(address,address,uint256)", +"11933e4b": "Transmuted(address,address,address,uint256,uint256)", +"11937ccd": "adminUpdateStartEndTime(uint256,uint256)", +"1193e38e": "setPercent3(address,uint256)", +"1194ed46": "payerString()", +"11952369": "onRemove()", +"1196004f": "newCycle()", +"1196245b": "registerDIN()", +"1196493c": "getJobContracts(uint256,uint8)", +"119669cb": "GiveChipGitf()", +"1196deda": "sendTeamTokens(address,uint256)", +"1196fb60": "contributeToPrizePool(string,string,string)", +"119739ff": "privatesaleEnds()", +"11997dc6": "BASE_DURATION()", +"119aa5c8": "checkForward(bytes)", +"119b22b3": "roundNum()", +"119c1c23": "tokenAllowance(address,address)", +"119cb2ff": "tokenPriceDivides(uint256)", +"119cbed6": "rtm_contract()", +"119cc328": "setFoundersWallet(address)", +"119ce91b": "voteInfo(bytes32,address)", +"119d0cb5": "DumbCoin()", +"119d97ee": "team4Address()", +"119d9bfe": "KudosTokenFactory()", +"119dd1b0": "presaleLimitReached()", +"119e045b": "checkMaintenanceTime()", +"119e5cdf": "creationUnit()", +"119ebe89": "getExternalCurrencyProcessor()", +"119ecb35": "tokensaleStageNow()", +"119ee4ab": "batchCancelAuctions(uint256[])", +"119eeb9c": "darx()", +"119f118d": "ethToCash()", +"119f1edb": "claimPlatinum(uint64)", +"119f2546": "distributeEBTC(address[])", +"119f2c9f": "transferCard(address,uint256,uint256)", +"119f32dd": "adminIsDead()", +"119f8747": "support()", +"119fdee2": "sha256ofString(string,string)", +"11a00327": "deleteOrder(uint256)", +"11a09ae7": "airDropTracker_()", +"11a0c16c": "dsquare(uint256,uint256)", +"11a10508": "switchToNextSale(address)", +"11a10698": "ERC223Token(uint256,string,uint8,string)", +"11a153df": "getBlockNumSinceInit()", +"11a1b31e": "commandGetBonusTime()", +"11a4c710": "buyRecipient(address)", +"11a5a793": "percentageToKill()", +"11a5b9bc": "migrateBlock(string,uint256,uint256,uint256,address)", +"11a76729": "transferFromInBatch(address,address,uint256[])", +"11a76f37": "addStakeHolder(address)", +"11a800bc": "addressOf(uint256)", +"11a881e8": "setFee(uint256,uint16,uint256)", +"11a88e05": "preSale2()", +"11a8f413": "latestRoundId()", +"11a98193": "ETHfund()", +"11a9c3c2": "sellDOTCH(uint256)", +"11a9f10a": "noToken()", +"11aa2722": "assignOldUserFunds(address[],uint256[])", +"11aa7e26": "setKevin(uint256)", +"11aaf884": "HCPToken()", +"11ab19f8": "addTokenToTotalSupply(uint256)", +"11ab27d2": "HydroCoinPresale()", +"11ab31ed": "rejectProposal(bytes32)", +"11ac20c0": "cancelLottery(uint32)", +"11adbaad": "getListOfAddresses()", +"11ae40b2": "Presale(uint256,uint256,uint256,uint256)", +"11ae6aee": "_mint(int256,uint256,uint256,uint256)", +"11aee380": "memberCount()", +"11af07e2": "create_event(string)", +"11af3c68": "divest(address)", +"11af6564": "getCurrentGasPrice()", +"11affa5c": "setEggTable(uint16,uint32[])", +"11b059c6": "mintableProperties(uint256,bytes32)", +"11b2b22a": "FRKT()", +"11b35c48": "AGSCoin()", +"11b4bbdb": "mintTokens2(int256,address,uint256,uint256)", +"11b546f6": "firstWeekTokenPrice()", +"11b639d9": "currentTokenCount()", +"11b63a17": "CROWDSALE_TOKENS_NUMS()", +"11b70018": "bookingList(address,uint256)", +"11b7702a": "ImportTestA()", +"11b7d483": "addressGains(address,address)", +"11b8f957": "dayAfterDeadline()", +"11b97324": "participateCrowdsaleSelected(address[])", +"11b98e12": "isMainSaleTokenRaised(uint256)", +"11b9fee8": "ForkChecker(uint256,bytes32)", +"11ba65e5": "_setUpgradeabilityOwner(address)", +"11baae84": "Contribution(address,address,uint256,uint256)", +"11bab044": "getCreditFundAddress()", +"11bb20da": "withdrawBattleValue(address,uint256)", +"11bbb155": "goLong()", +"11bbdf53": "maxOpenAttacks()", +"11bc0a34": "BuyOrder(uint256,address,uint256,uint256,uint256,uint256)", +"11bc5315": "drawer()", +"11bcd573": "SetTest(address)", +"11bcd830": "MinDeposit()", +"11bd85ad": "Owned2()", +"11bdfe19": "revertBet(uint256)", +"11be40e0": "transfer(address,address,address[],uint256[])", +"11bec062": "EVT()", +"11bed352": "eip20Approve(address,address,uint256)", +"11bf68cf": "_issue(bytes32,address,address,uint256,bytes,bytes)", +"11bfe017": "playerWinItems(address)", +"11c07649": "getMainAccount(uint256)", +"11c09100": "calculateNumWeiToIssue(uint256,uint256)", +"11c0b024": "_setDamgeValue22(uint256)", +"11c0f931": "bindSmartIdentity(string,string)", +"11c12715": "LCToken()", +"11c134e1": "sumPreICO()", +"11c15dcc": "purchaseBalances(address)", +"11c19d3c": "SpiderFarm()", +"11c1dc82": "monakojima001()", +"11c1ddd9": "addMedalBurned(uint16)", +"11c28e1a": "initial_tokens()", +"11c33625": "royaltyInformationContract()", +"11c3a62f": "GetLuckyResults()", +"11c3fec5": "CreateLand(uint256,address)", +"11c4d4f4": "communityAddr()", +"11c4dbf4": "auctionReputationReward()", +"11c4e123": "rootHashOf(bytes32)", +"11c52ec0": "setMaxWagerWei(uint256)", +"11c57757": "tixPromoDeposit()", +"11c5a234": "logResult(int8,string)", +"11c60418": "remAdmin(address)", +"11c7d6bd": "issueNewSeries()", +"11c8efac": "lifeA(uint256)", +"11c911d9": "unreserve(address,uint256)", +"11c91914": "isUnderLimit(uint256)", +"11c93d03": "crowdsale_eth_refund()", +"11c94362": "COMMUNITY_RESERVE()", +"11c98718": "getMsgDataBefore()", +"11c99f3b": "FundsWallet()", +"11c9ccf6": "deleteCustomer(address)", +"11ca3c63": "satoshiRaised()", +"11cb0bcf": "getParticipantOriginWithIndex(uint256)", +"11ccf822": "beneficial()", +"11cd98ed": "convertToAllTable(uint256,string)", +"11cda415": "peer()", +"11cdf27a": "addVersion(address)", +"11ce0267": "storageContract()", +"11ce3d24": "postMonForMon(uint64,uint64)", +"11ce3d2c": "GQHToken(uint256,string,uint8,string)", +"11ce4556": "TOKEN_TO_CREATOR()", +"11ceb21c": "ZigZagSupply()", +"11cec8f0": "getTradeByIndex(uint256)", +"11cfb19d": "freezedTokenOf(address)", +"11d12402": "testEasyPropose()", +"11d15e17": "freeReadings(address)", +"11d17e78": "Blocker_destroy()", +"11d295bf": "_getShipName(uint256)", +"11d36bf5": "reservedSaleEther()", +"11d36c4f": "setBoolF1F2F3(bool,bool,bool)", +"11d40001": "EthernautsVendingMachine()", +"11d414af": "changeIcoStatus(uint8)", +"11d4f314": "setBounties(address[],uint256[])", +"11d60664": "ethtoeth(address,uint256,uint256)", +"11d62de9": "ownerShip(address,address)", +"11d634ac": "HamsterMarketplaceToken()", +"11d7b2fe": "unlockAccount()", +"11d817f2": "getUsers(address,bytes32)", +"11d8657a": "finalizeAndPayoutForHopeful(uint256,uint256,uint256,uint256)", +"11d87c4e": "initGame(uint256,bytes32,bytes32,bytes32)", +"11d89f3a": "setResearchAndDevelopment(address)", +"11d8cac7": "view_state()", +"11d986e6": "BlockSigner(uint256)", +"11da60b4": "settle()", +"11da9598": "add2MarketPlace(address,uint256,uint256,uint256)", +"11daa2d0": "jpPercentage()", +"11daa7a0": "gamessage(address,address)", +"11daca81": "joinPot()", +"11daea9c": "removeExchangeTestAccounts(address,address)", +"11daf56a": "MainFabric()", +"11db0176": "unLockFreeze(uint256)", +"11db3be7": "invokeVerification(uint256,uint256,uint256,string,bytes32[2])", +"11db6e0e": "ownsSouls(address)", +"11db8d1b": "burner(uint256)", +"11dbb12e": "removePolicyRule(bytes4,address,bytes32)", +"11dc273d": "currentBalances(address)", +"11dc45c9": "withdrawPrize(address)", +"11dc4703": "removeUser(uint256)", +"11dc6816": "getAllowanceOwnerValue()", +"11dcee2f": "priceCallback(bytes32,uint256,bool)", +"11dd2837": "_updateCurrentStage()", +"11dd39b4": "cancelApprove(bytes32)", +"11dd46b4": "calVoteResult()", +"11dd576d": "userCheck(bytes32)", +"11dd8845": "getRecord(string)", +"11ddf693": "debug_changeOwner(address)", +"11df19f7": "_medalTotalSupply()", +"11df9995": "coin()", +"11e0de8b": "tickets10kprice()", +"11e13c32": "BONUS_ICO_STAGE1_PRE_SALE4()", +"11e14b2e": "employees()", +"11e21245": "weiSoftCap()", +"11e3655f": "updateInstantToken(address)", +"11e38468": "MarketboardListingComplete(address,uint256,uint256,uint256,uint256)", +"11e3d606": "min_investment_eth()", +"11e48cdf": "tokensAllocatedTotal()", +"11e5b955": "Order_sell(address,uint256,uint256)", +"11e5ea57": "teamsWallet()", +"11e67c57": "totalBuyOrders()", +"11e6a0fd": "getProviderDetails(uint256)", +"11e847b6": "HATCHBACK()", +"11e84c71": "claim(bytes32,string)", +"11e956c8": "isMasterNode()", +"11e96ab6": "LockCredits(address,uint256,uint256)", +"11e99c22": "arrival()", +"11eb6d4b": "GxAuth()", +"11ebbf24": "createWallet()", +"11ec76cb": "LogClaimHalvingSubsidy(address,uint256,uint256,uint256)", +"11ec7b4a": "balancePrivateSale()", +"11ed1bf6": "artworkIndex()", +"11ed7b42": "thirdItemWrong()", +"11ee0ec5": "getZone(uint256)", +"11ef8d4b": "delegateBonusTokens(address,uint88)", +"11efbf61": "getFeePercentage()", +"11efec9b": "shareHolderByNumber(uint256)", +"11efff1f": "unlockRecordAdd(uint256,bytes32,string,string,uint256)", +"11f02c87": "createHybridization(uint256,uint256)", +"11f03b83": "GiftCrowdsale(uint256,uint256,uint256,uint256)", +"11f0b806": "getDutchAuctionToCraftAddress()", +"11f11b9c": "editName(string,uint256)", +"11f1507e": "getAssetToken(uint256)", +"11f15380": "clientKeysCount(uint256)", +"11f1fc99": "withdrawTreasury(uint256)", +"11f217c7": "getNodeAddress(address)", +"11f29729": "setsymbol(string)", +"11f2a395": "finalWithdraw()", +"11f2eed1": "convertEthToMet(uint256,int256)", +"11f37ceb": "get_price()", +"11f3eecd": "sellTokens(uint8)", +"11f43157": "openCrates()", +"11f45f23": "buyVIBET()", +"11f48166": "IntroToken()", +"11f4a9ce": "KernelProxy(address)", +"11f4ba60": "importBalanceOf(address)", +"11f54545": "SmatrOCrowdsale(uint256,uint256,uint256,address)", +"11f58e99": "maxTokensSold()", +"11f598cd": "editPersonalNote(string,uint256)", +"11f6649b": "authorizers(uint256)", +"11f6ad2b": "lastWinnerId()", +"11f72496": "testT()", +"11f82a2b": "_getPolishingPrice(uint256)", +"11fa3d14": "LeekCoinCrowdsale(uint256,uint256,address,address)", +"11fa3f4f": "weiUsdExchangeRate()", +"11fa7da2": "getInvestmentsInfo(address)", +"11fa9ea6": "narrowCyclePrize()", +"11facae2": "setValidatorCount(uint256)", +"11fb57e2": "TokenManager(address[],uint256)", +"11fb584a": "BloccaConto(address)", +"11fbad62": "_rejectTransfer(uint256,uint256)", +"11fdff0c": "advisorPool()", +"11fe12b3": "isRecovery(address,address)", +"11fe773d": "memcpy(uint256,uint256,uint256)", +"11ffb1d4": "deleteMember(address)", +"11ffe7c9": "getUserDocCount(address)", +"12005e53": "alexToken()", +"1200617f": "auction(uint256)", +"12007984": "addBalanceToGame(uint256)", +"120149a1": "readCube(bytes32)", +"120184fa": "gvCF()", +"1202be01": "eth2mnt()", +"12032e52": "getSecondaryRecord(string)", +"12035ca6": "setData_3(uint256)", +"12038a01": "totalDevelopmentFundEarned()", +"12039fed": "mintMedal(uint256)", +"12045d3f": "VKTToken(uint256,address)", +"1204bab4": "popcount(uint64)", +"1204ce91": "Debug(bytes32,uint256)", +"1204d27c": "coinIssuedBurn()", +"12055758": "checkOwner(address,uint32[11])", +"12058764": "lockBalanceGroup(address,uint256)", +"12059f68": "LoversAdded(string,string)", +"12065fe0": "getBalance()", +"1206dc5f": "transferMarketplaceOwnership(address)", +"12074a46": "getUserBets()", +"1207bb8e": "crowdsalePrice()", +"1207f0c1": "issueTo(address,uint256)", +"1208a256": "getLock(address,uint256)", +"1209073c": "updateBalances(uint256)", +"120960de": "depositInPot()", +"1209b1f6": "ticketPrice()", +"1209f7ed": "withdrawPledge()", +"120bd501": "approves(address,uint256)", +"120bd8f5": "setMinimumBetValue(uint256)", +"120c5194": "getCollectReporterAddress()", +"120c52ef": "calculateDemurrage(uint256,uint256)", +"120c7efd": "certifier()", +"120cc993": "isEmptyOwner()", +"120cf351": "bitdietecToken()", +"120dae83": "setMinimalContribution(uint256)", +"120e6c16": "_finneyToWei(uint32)", +"120e8f05": "calculateMintAmount()", +"120fe731": "Tropycoin()", +"120fe89b": "getPolls()", +"121114e1": "SuperTicketCoin(uint256,string,string)", +"1211540c": "withdrawPartial(uint256)", +"121166ef": "clearTrade(bytes,address,bytes32,address,uint256,int256,string)", +"1212c12f": "RecordManager()", +"12136918": "setMaxTranferLimit(uint256,uint256,uint256)", +"12136e57": "ERC777ERC20BaseToken(string,string,uint256,address[])", +"12146222": "highSupport(address)", +"1214ab82": "Lightning()", +"121557a3": "Avatarium()", +"121563ae": "Axioms()", +"12156c66": "snowflakeCall(address,string,string,uint256,bytes,bytes)", +"1215f8ef": "releaseValue3()", +"1216e771": "expiration(uint64)", +"12179a2d": "pendingReferals(address)", +"1217b6ff": "TransactionConfirmedByMediator(uint256,uint256)", +"121839f6": "addConfirmationNode(string)", +"1218d6bf": "decree()", +"12192649": "countOfParticipants()", +"12192b00": "getInitialHP(uint64,uint64,uint64)", +"1219bcfc": "MolToken()", +"1219d5c8": "APM_APP_NAME()", +"121a47ac": "nonceForPublicKeyX(uint256)", +"121a496b": "Lupecoin(address,address)", +"121ab65b": "LogChangeSponseeAddress(address)", +"121af083": "DFSCrowdsale(uint256,uint256,uint256)", +"121b5a25": "calculateCompensation()", +"121b68c1": "ERC223Received(address,uint256)", +"121c2b35": "burnPXLRewardPXLx2(address,uint256,address,uint256,address,uint256)", +"121c5e91": "putOnSale(uint256,uint256,uint256)", +"121d6426": "senderWeiBalance()", +"121dbc31": "changeMax(uint256)", +"121e0d4e": "godPause()", +"121e6832": "frozenDaysForPartner()", +"121e8122": "unQuarantineAddress(address)", +"121eb9e2": "createMintRequest(address,uint256,string)", +"121ef243": "createUser(string,uint256)", +"121f0a10": "resolve(uint256,uint256,string,bool)", +"121f2081": "testCreateWithForeignParent()", +"121fb72f": "ownerSetInterestSetter(uint256,address)", +"1220c6ed": "registerOwner(address)", +"12217378": "oldTokenTotalSupply()", +"1221a071": "cmctcybermovie()", +"1222c25a": "redeem(string)", +"1222e789": "isPublicSaleWithBonus()", +"122366fd": "PACCOIN(uint256,string,string)", +"1223716a": "masterHas()", +"1223f208": "withdrawadm(address,uint256,uint256)", +"12243b67": "deletePlayer(address)", +"12247a57": "IncentCoffeeToken()", +"12253a6c": "stopContract()", +"12263017": "setBool82(bool,bool)", +"122636b1": "getRemainingDaysToThirdPhase()", +"12267abc": "PRICE_6()", +"1226afde": "numtickets()", +"1226be3e": "NotifyMe(address,address)", +"1226cd98": "allocate(uint128,uint256)", +"1226f5f8": "wei_per_token()", +"12278825": "Git(uint256)", +"1227d0f4": "gameListOf()", +"122809dc": "deposits_refunded()", +"12285576": "Donated()", +"12286715": "SimpleSavingsWallet(uint256)", +"12287629": "consultantsKey()", +"1229987d": "collectProfitERC20(address)", +"1229af09": "FreshROI(uint256,uint256)", +"122a1949": "Group_1()", +"122a7723": "GetPriceMultiple()", +"122b0e85": "getVerificationLevel()", +"122bdc32": "ThemKhoaHoc(string,uint256,string,string,string,string)", +"122d34d9": "returnToken(string,uint256)", +"122d9a8d": "piEndTime()", +"122e04a8": "WITHDRAW_ADDRESS()", +"122e74f4": "getWeiLeft()", +"122fe685": "presaleAddress()", +"122ff73a": "_getStrengthDexterityVitality(uint256,uint256,uint256)", +"12302932": "reinvestAffiliate()", +"123119cd": "payer()", +"12317402": "betMinAmount()", +"123180a2": "testInitialBalanceWithNew()", +"12333b32": "StartGame(uint256)", +"123398aa": "johnnycoin()", +"1233f543": "distribute55M(address[])", +"12342248": "CreditleetToken()", +"12360151": "dayPotLeader()", +"123702e2": "profitAddress()", +"123731c4": "addressPositions(address,uint256)", +"1237b2a6": "TotalPot()", +"1237dd9a": "decimalMul(uint256,uint256)", +"123802e1": "forceRefundState()", +"123807b2": "markParticipantIdentifiend(address)", +"123841cf": "MintedGreen(address,uint256)", +"12386471": "sumExpOffset(int256,int256[],uint256,uint8)", +"1239ec8c": "batchTransfer(address,address[],uint256[])", +"123b06d5": "currentPendingParticipants()", +"123b1dae": "accountOfP(address)", +"123b5e98": "setAttributeSigned(address,uint8,bytes32,bytes32,bytes32,bytes,uint256)", +"123ba3e2": "changePrizeSplits(uint256,uint256,uint256,uint256,uint256)", +"123c047a": "createShares(uint256)", +"123c3a4f": "maxTokenSupplyICO2()", +"123c3ada": "getMedalInfo(uint256)", +"123cc082": "setJoinedCrowdsales(address)", +"123d997a": "removeAllowCnsContract(address,bytes32,address,bytes32)", +"123e4112": "arrayToCrabPartData(uint256[])", +"123f513c": "testDeadChickenCnt()", +"12407f98": "toSaleWallet()", +"1240adc8": "stoppCrowdsale(uint256)", +"1240b381": "PermarektToken()", +"1240de76": "testUnexpiredBalance()", +"124135c9": "exit(bytes,bytes,uint256,bytes,bytes,uint256,bytes)", +"1241d7a7": "setEnableRecord(bool)", +"1241ee7d": "profit(uint256)", +"1242031a": "ZhaoGuCoin()", +"12424e3f": "approve()", +"124279a7": "activeSignersCount()", +"1242e96d": "updateMarketPhase()", +"12432fee": "canSendWebGifAmount()", +"124442be": "approveIncrease(address,uint256)", +"1244861e": "addTokenData(uint256,string,string)", +"1245c653": "currentDrop()", +"1245e347": "teamWalletAddress()", +"1245f45e": "getRunningAuctions()", +"12460fdd": "confirmCeilingRaise(bytes32)", +"12468cc5": "getWifiPwd(string)", +"12474435": "unfreezeAwardedTokens(address)", +"1247caf4": "ChangeFounderMulSigAddress(address,uint256)", +"1248b101": "claimDay(uint256)", +"12491ad9": "ReverseRemoved(string,address)", +"1249209e": "returnExcess(address)", +"12494160": "isHolder()", +"12495a5d": "ContributionWallet(address,uint256,address)", +"1249c58b": "mint()", +"1249d3b8": "isEcoAllocated3()", +"124abb0a": "_checkAndCallSafeTransfer(address,address,uint256,uint256,bytes)", +"124b0939": "afterCallBack()", +"124c27a9": "addPrize(uint16,address,uint256,uint256,uint256)", +"124c2dde": "executeBet(address,address,uint256)", +"124c32a1": "enter(bytes32,bytes8)", +"124cf830": "isSecondaryOperator(address)", +"124cfc8c": "beneficiaryOf(uint256)", +"124d3396": "releaseICO()", +"124eaee6": "Identity()", +"124f0b31": "rewardDecimalPercentByTime(uint256)", +"124f2418": "deleteBytes32Value(bytes32)", +"124fc7e0": "increaseSupply(uint256,address)", +"124ff29b": "getAyantDroitEconomique_Compte_5()", +"12504109": "getLast24hSendingValue(address)", +"12508ea4": "play(uint256,bool)", +"1250ca3d": "getUserPaybackRate()", +"12511c14": "transferEnable(bytes20)", +"12514bba": "transfer(uint256)", +"12529d22": "getRank10()", +"1252aadb": "EightBitToken()", +"1252cc33": "processTickets()", +"125385f2": "COLOR_GREEN()", +"1253b82f": "travelPrice()", +"1254e64d": "transferEthers(address,uint256)", +"1254f0dc": "startRate()", +"12555df2": "zasxzasxqaqq()", +"12568c24": "blanceOf(address)", +"125716d6": "getContractStatus(address)", +"12571a33": "migrateInternal(address)", +"12582c1a": "setAdminMode(bool)", +"12592381": "incomeAllocation()", +"12599d3f": "GlobalEnergyDigitalChain()", +"1259c00d": "stampIndextodissolved(uint256)", +"125b8f06": "isInNextGeneration()", +"125bfb66": "claimToken(address,address,uint256)", +"125d5d71": "startEpochTimestamp()", +"125e527e": "Ether()", +"125f67e7": "SunriseCoin()", +"126004b8": "deleteRole()", +"12600aa3": "concatStrings(string,string)", +"1260c19a": "showInterval()", +"12610b5b": "pendingEditionsOf(address)", +"1261795d": "withdrawGas()", +"126262a3": "init(address,address,address,address,address,address,address,address,address,address,address,address,address,address)", +"1262d6be": "fortnightsFromLast()", +"1262eb73": "queryPlayer(uint32)", +"12630012": "LEOToken()", +"12635cd8": "I_store_ETH_to_contract()", +"12635d26": "getTotalWeiContributed(uint16)", +"1264299a": "endPresaleTime()", +"126596e7": "ownerSetCallbackGasPrice(uint256)", +"12660306": "getLogos()", +"1266cae2": "setCrowdsale()", +"1266d5f9": "getWitnessesCount()", +"126702a0": "DOW_TUE()", +"12671fb4": "balanceAirDropToken(address,address)", +"12675713": "getTestekTokenIssuance(uint256,uint256)", +"1267961b": "ERC777BaseToken(string,string,uint256,address[])", +"12686aae": "transferLocked()", +"1268cb71": "XBPToken()", +"1269359a": "enableWallet(address)", +"126a04b5": "transferFromSGNToken(address,uint256)", +"126a710e": "dnsrr(bytes32)", +"126af4af": "tokensContractBalance()", +"126b12e7": "initICO()", +"126b6e17": "downX(uint256)", +"126b85e7": "addLevelQuest(address,uint256)", +"126c1232": "addPanelist(address,address)", +"126c13c8": "toldYouSo(bytes32)", +"126c27b5": "setETHAssets(address)", +"126d20f1": "getBestPromouter()", +"126d5b83": "getPoolAmounts()", +"126d9882": "updateLogoFee(uint256)", +"126eac43": "getContribution(address,address)", +"126f992c": "forceOff()", +"126fb2a3": "getCurrentRoundPrizePot()", +"126fbb3a": "removeFunds(uint256,uint256,uint256,uint256)", +"127043c3": "feesRate()", +"12706ccd": "NIGIZ()", +"12709b90": "SuddenDecayingTokenFunction()", +"1270a4d3": "setMinSale(uint256)", +"12711ae3": "wtech2()", +"127157c3": "activateDevice(address)", +"1271bd53": "upgradeContract(string,address)", +"1271f09a": "approve(address,uint256,address)", +"12724689": "addToTokenTransferDisallowedList(address)", +"1273f6e7": "BIGSELL()", +"12746e9f": "changeParam(uint256,uint256,uint256)", +"1274c3f3": "announcementHash()", +"127616f9": "releaseMultiWithStage(address[],address)", +"127714c7": "getBudget()", +"12778e8d": "addDistributionContract(address)", +"1277b0c9": "createBid(bytes32,uint256)", +"1277b4f1": "createCandy(string,uint256)", +"1277e24f": "payOneTimeFee()", +"127810bc": "getCompany()", +"12783f2f": "VESTING_TIMES()", +"12788f97": "B0xPresale(address,address,address)", +"1278cec4": "WinnerPaidEvent(address,string)", +"12795d7f": "putSaveData(string)", +"127a0dd9": "setJypcBonus(uint256)", +"127afec6": "MakerTransferredAsset(address,uint256)", +"127b0901": "delayAutorelease()", +"127b0efd": "gauntletRequirement(address,uint256,uint256)", +"127b4da5": "getAmountForCharger(uint256)", +"127c3d45": "getUserLibrary()", +"127cc6bf": "medalTotalSupply()", +"127cf0b9": "multiInvokeWith3Args(address,string,address[],address[],uint256[])", +"127dd730": "donationNum()", +"127e499c": "firstBonus()", +"127eca3f": "totalDividendPayments()", +"127ecfa9": "getMinReward(string)", +"127effb2": "operatorAddress()", +"127f0b3f": "roundCount()", +"127f1068": "pieceprice()", +"127f2d2c": "shutForDai(uint256)", +"127f3374": "calculateselfOdd()", +"127f902f": "addressFundReserve()", +"12800751": "determineWinner(uint256,uint256)", +"12806653": "setMaxContributionPhase2(uint256)", +"1280db73": "donate(address,string,string)", +"12810fd8": "Lesson_6(address,uint256)", +"1281311d": "buy(uint256,uint256,uint256,uint256)", +"1281619b": "SeeleTokenLock(address,address,address)", +"12818f0c": "withdrawNac(uint256)", +"12819817": "setXauForGasCurrator(address)", +"1281d056": "test_threeValidEqBool()", +"12821b5e": "sellingPrice()", +"1282467d": "checkTip(uint8)", +"12826f30": "isEthereumBased(address)", +"1282cc2a": "getNumContributionsDID(address,address)", +"1283c377": "FixedCapSampleCoin()", +"1283e328": "bonusOf(address)", +"128424a7": "sort(address[])", +"1284c8f5": "transferSafety()", +"1286d9e8": "setRowColors(uint16,uint8,uint256,uint256)", +"1286e393": "removePartOwner(address)", +"12874688": "setMinBid(uint256)", +"12883df0": "lcSold()", +"12889639": "settleFeePub(address,address,uint256,address,uint256)", +"1288c42a": "Prism()", +"12892b7f": "setblnpereth(uint256)", +"128952e4": "addElements(bytes32[])", +"128a0b2c": "approveFund(address,bytes)", +"128a1c74": "createUpdateRisk(bytes32,bytes32,uint256)", +"128a3765": "clearTransferInsToken(address)", +"128b265f": "addBridgeTokenFeeReceivers(uint256)", +"128b3bc0": "_withdrawFunds(address,uint256)", +"128bad8d": "MFL()", +"128bfcae": "startStake(uint256,uint256)", +"128c785f": "ICACOIN()", +"128cf7c5": "SEC_PER_ETHER()", +"128d7215": "addRequest(string)", +"128d9281": "checkTransferFunction(address,address,uint256)", +"128e0423": "getSenders()", +"128e1329": "offerHelpUsingBalance(address,address,uint256)", +"128e1af0": "withdrawFromPot(uint256)", +"128e3761": "firstTeamContributorId()", +"128e87e0": "tokensAfterCrowdsale()", +"128eb401": "expiredCrates(address)", +"128ef181": "ticketMag()", +"128f04e7": "importPresaleBalances(address[],uint256[])", +"128f060a": "perETH(address)", +"128f8e04": "admin_active_payable()", +"12901f26": "purchaseTokens(uint256,address,address,address,address,address)", +"12907e08": "lastBlock_f6Hash_uint256()", +"1290a2b4": "rightSharePriceRateOfIncrease()", +"1290aed9": "AcornPotSplit(uint256)", +"12919d90": "setMoneyManager(address)", +"1291ebdd": "getAllowedTokenAt(uint256)", +"1292de0b": "sendTokensTo(uint256,address)", +"129441cf": "_cMoney(uint256,uint256,uint256,uint256)", +"129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", +"1294d4db": "assignReferral(address,address)", +"12950877": "setOrCacheValidityBond(uint256)", +"12958f1c": "getUserName()", +"1296830d": "transferPreSigned(bytes,address,uint256,uint256,uint256)", +"1296aef3": "timeInvestInMinute()", +"1296d47d": "signedApproveHash(address,address,uint256,uint256,uint256)", +"1296ee62": "transferAndCall(address,uint256)", +"12973afd": "isNotDuplicateTreasure(bytes32)", +"12974218": "tokensRemainingForSale()", +"12975687": "mediaTokensDecimalUnits(address)", +"12987c98": "large()", +"129893dc": "ParameterizedToken(string,string,uint256,uint256)", +"129932d5": "_spto(uint256,uint256,uint256,uint256,address)", +"1299c8fe": "GetAccountIsFrozenByDateCount()", +"1299f11e": "updateNextWindowAdjustmentRatio(int256,bool)", +"129a1a37": "Dissolved(address,uint256)", +"129a5b99": "getPropertyStatus(bytes32,address)", +"129a75a7": "viewSecondBatchOfContractState()", +"129a8d25": "LogKYCConfirmation(address)", +"129a9e99": "enterEvent(uint256[12])", +"129b873b": "addVote(uint256,address)", +"129bc044": "unlockAccount(bytes32)", +"129caa18": "haltICO()", +"129cf7cb": "ForeignBridge(uint256,address[],uint256)", +"129ed395": "accountLock(address)", +"129f80fb": "rewardAirdropMany(address[],uint256[])", +"12a00b21": "calculate_base_mining_reward(uint256)", +"12a0421c": "safeWithdrawal2(address)", +"12a06c35": "NFF()", +"12a0b32c": "transferRestrictedStock(address,uint256,uint256)", +"12a0b3ba": "VOLOP(uint256,string,string)", +"12a12106": "setPayoutAmount()", +"12a15b91": "BlocktorialTestToken()", +"12a187f3": "toggleTransfer(bool)", +"12a1c2f2": "Mether()", +"12a203c3": "getFinalAnswerIfMatches(bytes32,bytes32,address,uint32,uint256)", +"12a2716d": "affirmations()", +"12a3234c": "unlockAdvertisement(uint256)", +"12a3bbaf": "_addHorse(bytes32)", +"12a3cda2": "TokenOMG(uint256)", +"12a3ff95": "endPrivatesale()", +"12a49007": "p_setInvestorFundPercent(uint256,uint256)", +"12a4b899": "claimPresaleTokens()", +"12a63964": "Releaseable(address,uint256)", +"12a71ee0": "setBiddingAuctionAddress(address,address)", +"12a77dbd": "getLockedToken(address,uint256)", +"12a7b914": "getBool()", +"12a837b4": "transfer(address,address,uint256,bytes)", +"12a8c1ed": "testAllocatesTokensInSale()", +"12a916f9": "getPlayerWallet()", +"12aa2c0d": "getMinBal()", +"12aa5360": "addAlpha(string,string,bytes32)", +"12aaac70": "getKey(bytes32)", +"12aaafa7": "amount_milestone()", +"12ab7242": "setupStackDepthLib(address)", +"12abbaaf": "WhosItGonnaBe()", +"12ac18ff": "About()", +"12ac4a2e": "bonuscal()", +"12ac5bad": "GetContractStateCancelledByTenant()", +"12ac9b46": "_escrow(address,uint256)", +"12ad8bfc": "registerSecret(bytes32)", +"12ad8d20": "CryptoElections()", +"12addb94": "saleEnd4()", +"12ade015": "oneTokenInFiatWei()", +"12aef8c3": "tokensForSale()", +"12afbc78": "getOwnedPointCount(address)", +"12afef2e": "Reservation(address,address,address,uint256,uint256,uint256,uint256)", +"12b0b3ca": "transferFromToICAPCallGas()", +"12b0b627": "splitStr(string,string)", +"12b0d309": "restrictTokenTransfer(address)", +"12b1cc95": "createHash(uint256)", +"12b1f8a9": "removeLand(address,uint256)", +"12b27e3e": "miningActive()", +"12b2ecc6": "init_bounty_program(address)", +"12b392ee": "admin_profit()", +"12b3a445": "getERC721Nfts(uint256,address)", +"12b48d3c": "CountryCoin()", +"12b495a8": "delta()", +"12b4ba71": "emitTokenStateUpdated(address)", +"12b58349": "getTotalBalance()", +"12b62a07": "playerWinHeroes(address)", +"12b68263": "creditDragon(address,uint256)", +"12b68286": "whitelistMinTok(uint256,address)", +"12b6ef5c": "Decision(uint256,address,address[],uint256[])", +"12b706a7": "buyPreSale(uint256)", +"12b8854b": "redeemNewTalentsAndPartnerships()", +"12b8ca5e": "_isDiamondOutside(string)", +"12b93ec6": "ChallengeContract(uint256,string,uint256,address,address)", +"12b97812": "addOffering(address,bytes32,address,uint256)", +"12bae48d": "StartDate()", +"12bb05ff": "claim1Ply(uint64,uint64,uint64,uint64,uint64)", +"12bb65ca": "MANHATTANPROXY7THAVE()", +"12bb6df7": "LogRewardPicked(uint256,address,uint256,uint256)", +"12bb9d3e": "RefundableCrowdsaleWithCommission(uint256,address)", +"12bc74e2": "withdrawBondReward(address)", +"12bcc858": "claimTokensInBulk(address[],uint256[])", +"12bd2cea": "setImageDataCloud(uint256,uint256,string)", +"12bdc81b": "freedWinPoolForThirdStage()", +"12bddc9c": "changeRules(bool,bool,bool,bool,bool)", +"12be78d1": "freeze_pool(bool)", +"12bea6eb": "kickStartICO(address,uint256,int256)", +"12bff72f": "doTransferOwnership(address)", +"12c0af96": "getVoterOnElection(address,address,uint256,address,address)", +"12c0d1ea": "changeLuck(uint32)", +"12c1083d": "distributing()", +"12c2302e": "DocumentRegistered(uint256,string)", +"12c24128": "FootStarCrowdsale()", +"12c27c64": "contrp3d()", +"12c3ee37": "setStorageControllerContractAddress(address,address)", +"12c3f754": "modificationFee()", +"12c3f757": "soldiersinfo(address)", +"12c45f64": "maximumTokenSupply()", +"12c55a9b": "openDeposit()", +"12c59488": "setAddress(address,address,address,address,address)", +"12c61a20": "initambassadorsbags()", +"12c6651c": "MoralityAI()", +"12c6ac16": "Reconcile(address,uint256,uint256)", +"12c723e1": "createDeposit(uint256,uint256,bytes)", +"12c77207": "getLLV_edit_1()", +"12c7df73": "rewardValue()", +"12c8052f": "won()", +"12c82894": "compute(string,string,uint256,uint256)", +"12c82bcc": "sendRobust(address,uint256)", +"12c85095": "getRestrictedTokens(uint8)", +"12c89869": "getHeroCurrentPrice(uint256)", +"12c96f5f": "ZAYAToken()", +"12c99005": "startPREICO()", +"12cacbb5": "inPresaleMode()", +"12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", +"12cc1abc": "set_exchange_rate_in_eth(uint256)", +"12cc9dd3": "usdId()", +"12ccb421": "payPlatformIncomingTransactionCommission(address)", +"12cd2101": "transfered(address,uint256,bytes32[])", +"12cd24be": "funder(address)", +"12cd57c9": "inputauction(uint256,address,uint256,string)", +"12cdc37a": "OrderTake(uint256)", +"12ce73dc": "callFor(address,uint256,bytes)", +"12cef27a": "secondWallet()", +"12cf0ec8": "balanceOfAt(address,uint256,int256)", +"12cf85c8": "s26(bytes1)", +"12cf8a10": "getType(uint32)", +"12d00c2e": "soloWithdraw(uint256)", +"12d0e65a": "changeBeneficiaryAddress(address)", +"12d1456f": "requiredExpIncreaseFactor()", +"12d1612a": "closeContest(string)", +"12d1b19a": "poissonData()", +"12d2c9a5": "isWhitelistedInvestor(address)", +"12d43a51": "gov()", +"12d60f86": "fillUpAllowance()", +"12d6468d": "mathTransfer(address[],uint256[])", +"12d67c5f": "getLastDataLength()", +"12d69389": "maxUint32()", +"12d6c704": "getTMul(uint256)", +"12d72e99": "deregisterProduct(uint256)", +"12d96887": "getRollUnder()", +"12da6e2b": "fourthTime()", +"12dc006a": "racer_index()", +"12dc34a0": "disableSetTransferable()", +"12dc5ca0": "CrowdsaleToken(address,string,string,uint8,uint256,bool)", +"12dc6449": "test_remove_head()", +"12dc8c4b": "InitialTokensAllocated(uint256)", +"12dc9a5b": "assert(bool,bytes)", +"12dcb676": "remainPackage()", +"12dd4763": "_transItem(address,address,uint256)", +"12dd8700": "CevacFund()", +"12dd9b94": "addBet(address,address)", +"12de10fd": "setMinimumFundingLimit(uint256)", +"12de8a12": "addReferenceParentWineryOperationByRegulator(string,string,uint256,string,string,int256)", +"12df172d": "setScale(uint256,uint256)", +"12df2f49": "serviceStation()", +"12df9b63": "AddContact(bytes32,address)", +"12e135a0": "setBuyCommission(uint256)", +"12e228fd": "investorAddress()", +"12e26673": "maxMSC()", +"12e36530": "addMerkleTreeRoot(bytes32,bytes)", +"12e382b4": "lockFunds(address,uint256)", +"12e43d92": "AVAILABLE_PRESALE_SUPPLY()", +"12e43da5": "kycConfirmer()", +"12e530aa": "Hacksig(uint256)", +"12e56faf": "activeTransfer()", +"12e57fdc": "MONEYTREETOKEN()", +"12e5b7fa": "GetOwnertName()", +"12e6414e": "getCampaignStartDateById(bytes32)", +"12e753e1": "modifyContact(address,string)", +"12e7b2ba": "vanilAddress()", +"12e8e2c3": "setPlatformFee(uint256)", +"12e8ebdf": "unpauseWithdrawal(address,address)", +"12e905b0": "selfAddress()", +"12e9d888": "removeSkillFromSale(uint256)", +"12e9db2d": "get_deposit_balance(address,uint256)", +"12ea0b0e": "INV()", +"12ea7d20": "BoSToken()", +"12ea965d": "icoStartBlock()", +"12eabe7e": "approuver(address,uint256)", +"12eacf4b": "fundInsurance()", +"12eba773": "isAdvisorsTokensFirstReleased()", +"12ebca9c": "get_admin_list()", +"12ecaa62": "freezeAccountOf(address)", +"12ef900b": "getMaxLoanAmountAllowedByLtd()", +"12ef934b": "nCryptClubShare(address,address,address,address)", +"12efe5ad": "minDonationInWei()", +"12effc32": "rejectTransfer(uint256)", +"12f05418": "campaignCanceled()", +"12f0f9df": "createBountyContract(address)", +"12f11ed3": "getDenyPremium(bytes32)", +"12f17735": "calculateEntryHash(address[],uint256[])", +"12f20e2a": "withdrawFundsToOwner(uint256)", +"12f26140": "setWhitelistContract(address)", +"12f2b838": "updateReservedWei()", +"12f31b5f": "firstTeamWithdrawal()", +"12f3d1e0": "discoverResources(uint256)", +"12f4cbd9": "Vote(uint8)", +"12f53950": "refunded()", +"12f58b43": "RATE_CHANGE_THRESHOLD()", +"12f62bd6": "updateProperties(uint256,bytes)", +"12f63d96": "lockedByUser(address,address)", +"12f6e641": "okamiMaxPurchase_()", +"12f7cf74": "approve(address,uint8,uint8)", +"12f7fb6f": "RocketCoins()", +"12f8ae31": "getRedeemEst(address,uint256)", +"12f8b3db": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", +"12f95b16": "GIC()", +"12fa6feb": "ended()", +"12fa769f": "paidAmount()", +"12fb5b67": "purchaseTokensInICO(uint256,address)", +"12fc41a1": "MyScheme()", +"12fc848e": "_randomLucyAddr()", +"12fca967": "contract6function2()", +"12fd67ba": "getValidations()", +"12fdf767": "FuseaNetwork()", +"12ff2ad9": "Consent(address,address)", +"12ff658f": "DmitryCoin()", +"12ffb59b": "checkIcoStatus()", +"12ffe4df": "_decreaseApprovalAllArgs(address,uint256,address)", +"130067ca": "updateCostContract(address)", +"1300a6d1": "timeLeft()", +"1300cc41": "freezeTransferToken()", +"13012a3b": "doMap(address,string)", +"13019a5e": "EtherTool()", +"1301b876": "EmbiggenToken(uint256,uint256,string,string,uint8)", +"1301c4aa": "CryptoniumCoin()", +"1301ee02": "transferringETC(address)", +"1302188c": "getLastDataHash()", +"13028f44": "addUserRewardPayouts(address,address,uint256)", +"1302d03a": "setWhitelist(address,uint256)", +"130346d2": "icostart()", +"13037d22": "xioniCoin()", +"1303a484": "commitment()", +"13040bc1": "tokensFinalized()", +"13045155": "MONTHLY_INTERNAL_VAULT_CAP()", +"130497ac": "getCountryList()", +"1305413e": "BetMade()", +"1305d2de": "changeAllCosigners2(uint256,address[],bytes,bytes,bytes,bytes)", +"13063180": "doEscape(uint32)", +"13065fed": "MoneroClassic()", +"130766c5": "enterLarge()", +"1307d2d7": "EARLY_CONTRIBUTOR_STAKE()", +"1308c324": "setAddrForPrivilege(address)", +"1308d2c2": "gauntletRemovable(address)", +"1308e82d": "L19_PALToken()", +"1308e9e0": "startSweepStake()", +"130985f4": "GetcrowdsaleContract()", +"1309a563": "IsPaused()", +"1309d3bd": "RAVI_ALLOCATION()", +"130a39b1": "removePersonalTokenLock(address)", +"130bcaa2": "removePersonalLockMultiple(address[])", +"130c0e88": "advisoryVUPDestination()", +"130d04d0": "companyHolding2y()", +"130d7906": "register(uint32)", +"130d993d": "lifeFactor_iii()", +"130e54a1": "prizeshow(address)", +"130fbba4": "setPixelToken(uint24,uint256,uint24)", +"13110199": "twentyEndTime()", +"13110874": "preSaleFirstEtherCap()", +"1311457c": "transferToken(address[],address,address,uint256)", +"13114a9d": "totalFees()", +"1311b45e": "setGasForCMT(uint256)", +"1311c860": "KCoin()", +"131284c8": "FUNDING_START_TIMESTAMP()", +"13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", +"1313c739": "getBidForAuctionByIdx(uint256,uint256)", +"1313f631": "Register(bytes4,bytes32,bytes32[8])", +"1314e272": "addAddressesToOperators(address[])", +"13151981": "to()", +"13155455": "legacyToken()", +"13163d53": "CTO_Signature()", +"13169ab7": "rewardManual(address,uint256)", +"131719e1": "testtop()", +"13174093": "bountyAccount()", +"13175b40": "_emitUserCreated(address,address,address,address,uint8[],uint256,uint256[],uint256[])", +"13178704": "ContributeToPool()", +"1317b559": "buyshares()", +"1318b88c": "GetPlayer_FromID(uint32,uint8)", +"1318cd2d": "NameInt()", +"13193936": "GEMERAToken(address[50])", +"13194658": "MossCoin(uint256)", +"1319b880": "borrowToken(uint256,uint256,address,address,bool)", +"131a0680": "store(string)", +"131ad118": "avaliableBets()", +"131ad146": "getWorksStatus(bytes32)", +"131b0563": "EITARD()", +"131b81ad": "transferExecutorOwnership(address)", +"131b9c04": "getEarnings(address)", +"131bb0d6": "ethCostTotal()", +"131be36c": "preICOregulations()", +"131c4305": "SoundcoinsAddress()", +"131d2873": "isContractFrozen()", +"131de517": "getKeyBlockNr(uint256)", +"131e03ba": "withdrawOtherEDEX(address)", +"131e1816": "setRetiro(address)", +"131fa183": "createBoard(address)", +"132002fc": "votingDuration()", +"1320f614": "callServer(string,uint256)", +"1320f838": "modify_ICOStartDate(uint256)", +"1321d291": "enact_liquidation_greater_equal(address,uint256,uint256)", +"1321ea19": "mulTransfer(uint256,address[])", +"13220305": "doTransferOther(address,address,address,uint256)", +"13222d0a": "payoutsETH(address)", +"1322311b": "LoanBit()", +"13224fc5": "missingTokensFallback()", +"1322e9d0": "checkPayoutReadyState()", +"13233cd9": "appointAgent(address)", +"13242733": "getRoundOfSixteenTeams(uint256)", +"1325c502": "debugSetNow(uint256)", +"13270bb8": "authorizedCount()", +"1327290d": "isAddressActivated(address)", +"1327487f": "activation(uint256,address)", +"1327d383": "hybridizations(uint256)", +"1327d3d8": "setValidator(address)", +"1327fbe5": "getPanda(uint256)", +"1328ec9b": "getAvatar(uint256)", +"1328fd8f": "getDetails(string)", +"13299604": "getWallet()", +"132ac1dd": "itemsForSaleCount()", +"132ae5e9": "numInvestors()", +"132c3bea": "setContractPrice(uint256)", +"132c8641": "given()", +"132d05e5": "_distributeJackpot()", +"132d807e": "upgradeTo(address,address)", +"132df661": "isPrePreSale()", +"132e4f3c": "fail(uint256)", +"132e63ba": "PRICE_8()", +"132e8bee": "batchWithdraw(uint16[])", +"132ff514": "SQUAD_SIZE()", +"133086a5": "SphereTokenFactory()", +"1330a21f": "calulateRate()", +"1332143c": "getGoldTransactionsCount(string)", +"133252a6": "grantToken(uint256,address)", +"13326f43": "transferTokenToSender(address,uint256)", +"1332dd07": "_isFreezeList()", +"13331391": "buyPreIco()", +"133323c8": "setLevToken(address)", +"13332c6c": "myVoteFactory()", +"133369c6": "GetRigData(uint256)", +"1334a5e2": "eventCallback(uint8,address,address,uint256)", +"13352334": "payOwners()", +"1335461c": "joinGameWithBalance(uint256,address)", +"13357914": "from(uint256)", +"1335b56b": "GasSell()", +"1335b598": "get_ptc_count(address)", +"1335ff36": "createEventAndMarketMaker(uint256,uint256,uint8,uint32,address,uint256,uint8,uint16,uint256)", +"13368364": "getMarketPriceOracle(uint256)", +"1336a756": "previousPeriodRate()", +"1336cff6": "isAccountFreeze(address)", +"13373786": "powerBalanceOf(address)", +"1337d6ed": "sendFlower(address,bytes32,string,bytes16,uint256)", +"13381fbf": "registrantsPaid(address)", +"1338736f": "lock(uint256,uint256)", +"1338c9e9": "SspStandardToken(uint256,string,uint8,string)", +"1338f493": "isClose()", +"13390cf2": "VASTToken(uint256,string,string)", +"133922ad": "setCompanyURI(string)", +"13392662": "totalTokensOfThisContract()", +"1339305f": "createRandomZombie_FreeZombie()", +"1339870e": "GetOrderBookScreen(address,uint256)", +"13399d10": "INCRYPT(uint256,string,string)", +"1339cba2": "getRemainingDaysToSecondPhase()", +"133a473e": "sleep()", +"133ae30b": "transferFunds(uint256)", +"133af8b3": "getIcoTokenHoldersAddressesCount()", +"133b5ba9": "honestisFort()", +"133c5ff5": "getAdminAccounts()", +"133cbe3a": "setLatestToNow(address)", +"133d10e6": "HPCToken()", +"133d27e1": "partner1_address()", +"133d2afe": "myfast(address,uint256)", +"133d5d4e": "setMultisignWallet(address)", +"133d8555": "withdrawTokenFromElc(address,uint256)", +"133e3f71": "getOld_BalanceOfr(address)", +"133f44dc": "removeVerifiedInvestor(address)", +"133f50f5": "checkUserExists(address)", +"133f6ac0": "earlyExchangeRate()", +"133f8a2f": "getStockReleaseTime(address,uint256)", +"133fe629": "calculateCuts(uint256,uint256)", +"134000c0": "getGrid()", +"134087a2": "gameLogic()", +"1340d09a": "isPoint(uint256,uint256)", +"13413858": "isFreelancerAvailable(address,address)", +"13414a4e": "doDisputeMemoryWrite(uint256,bytes32,uint256)", +"13419be3": "LifeFactor_v()", +"1341b33c": "releasableViewOrSend(address,bool)", +"13424bf0": "unpause_4()", +"13426d87": "addEmitter(bytes4,address)", +"13429e31": "newPrice(uint256,uint256)", +"1342c0e8": "VZT_WALLET()", +"1343a35f": "sendLoan(address,uint256)", +"1343ed05": "isStoreSet(string)", +"134538f3": "testRemoveGains()", +"134562a6": "SimpleToken(uint256)", +"13463751": "ThroneClaimedEvent(uint256)", +"13468929": "signedApproveCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"1346c20e": "canBuy(address,uint256)", +"134741f7": "SimpleERC20Token(uint256)", +"1347b972": "setICOWeek2Bonus(uint256)", +"1347b9ae": "CommonToken(address)", +"1348ab3a": "setRequiredTotal(uint256)", +"1348fdcc": "changeStarttime(uint256)", +"1349c273": "ClearExpiredFreezingEvent(address)", +"1349f5ec": "_provideChars(address,address,uint32)", +"134a04ea": "breedingDB()", +"134a153a": "buyVirtTokens(address)", +"134a5330": "updateTokenPrice(int128)", +"134abf66": "sendVesting(uint256)", +"134b684f": "SafeGiftTokens(uint256,string,string)", +"134c021b": "divForTransfer()", +"134c1a28": "L2Cash(address,address)", +"134c91be": "setFile(string,string,uint256,string,string)", +"134ccdfb": "IBIZACASH()", +"134dc5ad": "setManagerAddress(address,address)", +"134e3917": "setM2(address)", +"134f1893": "goWiner()", +"134fd7d0": "_convertToWei(uint256)", +"134ff97e": "startGame(uint32,bytes32)", +"1350a997": "AccessGrant(address)", +"1350acbd": "PRESALE_MAX_ETH()", +"135128c2": "CounterPartyDeposit()", +"13517fea": "maxCost()", +"1351cf51": "setAuthorizedAddress(address,bool)", +"135217e7": "requires_depth()", +"1352faec": "setReleaseDate(uint256)", +"1353e7b3": "purchaseMetal(uint256,uint256)", +"1356c5dd": "raceBet(uint8)", +"13574cd2": "calculateKnowledgeBuy(uint256,uint256)", +"1357b862": "contractSolidStamp()", +"1357e1dc": "totalPaidOut()", +"13582b6e": "HIDDEN_CAP()", +"135859c0": "distributeICOTokens(address,uint256)", +"135892bf": "FundUpdated(address)", +"1358937f": "TEAM_HOLDER()", +"13590153": "ManualChangeEndDate(uint256,uint256)", +"1359844a": "winNetworkFeeBasisPoints()", +"13598b71": "LightningEthereum()", +"1359cb2c": "getCommissionWithdrawn(uint32)", +"1359fc91": "setPublicKey(bytes32,bytes32,bytes32,bytes32)", +"135a2474": "joysoWallet()", +"135bada6": "setDungeonStatus(uint256,uint256)", +"135bf431": "gamerun()", +"135c0701": "purgeAccount(address)", +"135da3c2": "getBal(bytes32,address)", +"135da767": "LennartCoin()", +"135e9ad6": "fulFillTX(uint256)", +"135ec4bd": "AddAppraise(address,string)", +"135ed7bd": "priceRound1()", +"135f01df": "addDocument(bytes16,bytes32,uint8,bytes32,bytes32)", +"135fae64": "getOwnerProprietaryData(uint256)", +"135fc676": "loseHandler(address,uint8)", +"13601234": "checkRejectionRatio()", +"136047ab": "ticketTransferers(address,uint256)", +"13612119": "distribToken(address)", +"136125a7": "GoldFiatFee(string)", +"13618756": "readnationnameXteam()", +"1362180e": "setItemName(uint256,bytes32)", +"13622274": "prealocateCoins()", +"1362dd32": "testinx()", +"1364326c": "countVotes(uint256,uint256)", +"13643605": "crowdsaleTarget()", +"136439dd": "pause(uint256)", +"13651124": "WithdrawAmountFromBankAccount(uint256)", +"136512c9": "_checkPixelRight(uint256)", +"13653b24": "RECFToken(uint256)", +"1365e6a3": "REBELCOINSupply()", +"1366b970": "test_transfer_token_to_contract()", +"1367641e": "releaseAdvisorTokens()", +"1367944b": "getIdByName(string)", +"13683532": "getAccountCap(uint256)", +"1369f6fd": "getCurrentOwnerBallence()", +"136aa762": "Remmittance(uint256,uint256)", +"136ac4bf": "WillTestament()", +"136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"136b4fea": "getActiveFish(uint256,uint256)", +"136bcbab": "Windlord()", +"136c545c": "transferToProjectWallet()", +"136c8744": "WBSToken()", +"136cf5c1": "deleteVestingFromStorage(address)", +"136d1057": "accountBalanceCount()", +"136d5a59": "giveKudos(bytes32,uint256)", +"136d6a39": "getBalanceByAddress(address)", +"136dbbab": "revenueFraction()", +"136e1949": "buyFunderSmartToken(string,string)", +"136e1c45": "suspendGame()", +"136ede68": "verifyCopieExecutoire(bytes32)", +"136ef18a": "allowTransfers(address[])", +"136f1016": "hasBet(address)", +"136f2bf4": "allowToken(address[])", +"136f5b5a": "ordersCanMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", +"136fa2d7": "rateSeedStage()", +"1370128e": "free()", +"13711a31": "presale_allocation()", +"13714545": "GATEL()", +"137157c0": "changeBlock(bool)", +"1371dab9": "whitelisters(address)", +"13730838": "getCanvasPainters(uint32)", +"13734a9f": "setClaimDividendPercentage(uint256)", +"13737db2": "TiValueToken()", +"13740cf3": "isTrigger()", +"13748a40": "Withdraw_2()", +"1374b22d": "proposalExists(uint256)", +"1374eb6f": "getLockByIndex(address,uint256)", +"1375111e": "returnrandom()", +"13754f9a": "notUpgradableInStore()", +"13765838": "deposit(uint64)", +"13767204": "AirDropRedeemAFTK()", +"1376f2ce": "setCrowdsaleStartDate(uint32)", +"137759df": "ammendReceivedLand(uint256,uint256)", +"13776ba1": "buyPLATCards(address,uint256,uint256,uint256)", +"1377900b": "PreICODayOneCents()", +"1377ae65": "_getEarnings(address,address,uint256,uint256,uint256)", +"13788651": "test_oneValidEqBytesNoLog()", +"137935d5": "totalGuaranteedCollected()", +"1379c6e0": "getICOEndDate()", +"137a1464": "ifEmergencyStop()", +"137a3fa7": "transferPayment(uint256,address)", +"137b3bcd": "getBounsByAmount(uint256,uint256)", +"137b763d": "SetReferrer(address,address)", +"137b8721": "getTierWhitelist(address,bytes32,uint256)", +"137baa2a": "BigToken()", +"137c1feb": "buyCommonTTMByETH(uint256,address)", +"137c638b": "getExtraGas()", +"137ce088": "TokenReserveMinted(uint256)", +"137ce8e3": "HARD_CAP_USD()", +"137d7026": "abiEncode(bytes,bytes,address[])", +"137db23c": "updateWhitelist(address,address,bool)", +"137e37d9": "accountGet(address)", +"13801995": "getHopefulId(address)", +"13819313": "OTTToken()", +"1381e400": "cancel(uint32)", +"13823365": "setOneTokenInWei(uint256)", +"13827950": "getShareholderDB()", +"1382a652": "isTrustedShop(address)", +"1382e75e": "addUser(uint256,string,string,uint256)", +"13831693": "getLevitatingUnicorns(bytes32,uint64)", +"13844e60": "totalOVCSold()", +"13845d2f": "creation()", +"138495de": "SimpleToken(string,string,uint256,uint256)", +"1384dc12": "endTx(uint256,uint256,uint256)", +"1385053e": "FlyCareTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,uint64[5])", +"1385625d": "MintTimelocked(address,uint256)", +"13857c1a": "foundersFundMultiplier()", +"13859f46": "_metadata(uint256)", +"1385d24c": "toggleContractActive()", +"138665ff": "testJoin()", +"13869333": "RealityCheck()", +"1386a244": "getSettingAddress(string)", +"1386dc2d": "orgName()", +"138716e8": "root_domain()", +"13872f8d": "test_againstFor()", +"13877deb": "FBLFund()", +"1387c80b": "test_invalidRuleChange()", +"1388483d": "BLING()", +"13887592": "multilocked()", +"13888565": "surplus()", +"13889727": "setHeroName(uint16,string)", +"138a7084": "_4_owner()", +"138a886e": "testGetTransactionDetails(bytes)", +"138acb80": "View_MediatedTransaction_Info(uint256)", +"138b3ab1": "numPlots()", +"138b806c": "addMultipleAddresseseToWhitelist(address[])", +"138bdf1b": "simpleTest(address)", +"138cc941": "testErrorTransferToRejectAuthority()", +"138e2317": "IcoTokenMock(address)", +"138e8da1": "getIncreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", +"138efd00": "_createTot(string,address,uint256)", +"139020d1": "deedByIndex(uint256)", +"13902e9f": "initBonusPeriod(uint256,uint256,uint256,uint256)", +"13905905": "addWhiteListedAddressesInBatch(address[])", +"13907d22": "abrirDoacoes()", +"1390b247": "getNbSellOrder()", +"1390df6c": "oldXPAAssets()", +"1391697d": "weiRound1()", +"13916c2e": "bidOnCraftAuction(uint256,uint256)", +"1391c5f8": "EnddateICO()", +"1391fd60": "raised(address)", +"1391ff43": "fetchVoteInfoForVoter(address)", +"1392c495": "updateItemPrice(bytes32,uint256)", +"13930cf6": "setCurrentVersion(string)", +"13932337": "highTimeBonusLimit()", +"13943033": "RBOC()", +"1394f216": "addProjectManager(address)", +"139654e0": "window2StartTime()", +"13966db5": "mintFee()", +"1397d7ae": "setPI_edit_24(string)", +"1397fdbd": "getShares(address,bytes,int256[])", +"139818a1": "setFrozen(address,uint256)", +"1398bbf7": "getRanking()", +"1398e076": "lotteries(uint256)", +"139949fa": "sAssert(bool)", +"1399cc5b": "UWC()", +"139a667a": "_calcNextPrice(uint256)", +"139b3752": "_batch1_rate()", +"139c7048": "generateTokenAmount(uint256)", +"139ccd1e": "stopCollectSignatures()", +"139cd9d3": "drawnTokens(address,uint256,uint256)", +"139ddefe": "ProposeProposal(bytes32,bytes32,uint256,uint256,uint256)", +"139df200": "getAllMarketsInfo()", +"139e23b5": "getDividendInfo()", +"139f1838": "NoBonustimer()", +"13a070b7": "add_admin(address)", +"13a0c990": "BearTrap()", +"13a110b4": "getMin(uint64[])", +"13a19e1b": "initialCoach(uint256,uint256,uint8,uint256)", +"13a1da40": "tgrSettingsMinimalContribution()", +"13a22af9": "latest_buy_time()", +"13a24744": "BurnupGameAccessControl()", +"13a2852d": "setICOEndTime(uint256)", +"13a30010": "refund2(address)", +"13a396d8": "getRequiredDeposit(bytes)", +"13a3d9a1": "registerDocument(string,string,string)", +"13a460b7": "tourisToken()", +"13a46425": "getNumberOfDisputedStepsProDoctor()", +"13a46827": "fund(address,address,uint256,uint256,uint256)", +"13a4b3bc": "OwnershipRequested(address,address)", +"13a4fd37": "soldTokensIco()", +"13a517bf": "eighthTeamWithdrawal()", +"13a5aac7": "paymentRegularTokensPriority(uint256,uint256)", +"13a5d9e4": "remaingNTRY()", +"13a666a6": "hasReachedSoftCap()", +"13a7070f": "withdrawDeveloperCut()", +"13a7f56e": "internalAllocate(address,uint256)", +"13a8a080": "TokenDemo(uint256,address,address,address,address)", +"13a91cc8": "getVlsTokenAddress()", +"13a927c7": "toggleMatchStartEnd(uint256,uint256)", +"13a92f02": "frozenAccountForLogic(address)", +"13a931dc": "gasForOraclizedQuery()", +"13a9589c": "getSalt()", +"13a9cd8d": "lastDETCWC()", +"13aa48bf": "minePepe(uint256,address)", +"13aa7b6f": "viewUnclaimedDepositDividends()", +"13aa8133": "resolveChallenge(uint256,bytes32)", +"13abdd75": "ecosystemSupply()", +"13ac2bdb": "addNetworkMember(address,bool,bool,bool,bytes32)", +"13ac58bb": "increaseCredits(string,uint256,uint8,address)", +"13acb45b": "calcDoubleBindedBlindHash3(string,address,address)", +"13ad41d8": "getSkill(uint32)", +"13ad9ce1": "getRepMarketCapInAttoeth()", +"13adc129": "MIGG()", +"13ae4522": "token3MstepCAP()", +"13ae457d": "mainCapInUSD()", +"13af4035": "setOwner(address)", +"13afa97a": "readMarketplaceConfigs()", +"13b15b24": "setRoundGap(uint256)", +"13b18640": "participate(uint256,address)", +"13b222ba": "getMyPoohs()", +"13b2663b": "cash_received(string)", +"13b2807e": "setCampaignEndPointById(bytes32,string,int256)", +"13b2e657": "unfreezeAccount(uint256)", +"13b37a83": "getRandomUuid()", +"13b39b9c": "approveMint(address,uint256)", +"13b3cd91": "collectForREQBurning(uint256)", +"13b3cdf6": "ownersLUT(uint256)", +"13b3fffc": "updateChannelManagerContract(address,string)", +"13b4312f": "transferCollectedFees(string,address,uint256,bytes)", +"13b499ce": "PRE_ICO_TIER_FIRST()", +"13b53153": "isFunding()", +"13b57686": "self_last_result()", +"13b5a19e": "GBPsToken()", +"13b5d420": "returnWebsiteData()", +"13b63f60": "updateBuildingPrivacy(uint256,bool)", +"13b6c8a8": "setListingFeeInWei(uint256)", +"13b6f213": "ContributionReceived(address,uint256,uint256,uint256)", +"13b7423a": "setFundraiserCallData(string)", +"13b796f4": "getMilestoneTimeAndRate(uint256)", +"13b84004": "gameTokenAmount(address)", +"13b96a9e": "numOfSamples()", +"13ba350a": "Whales_group()", +"13bac8f2": "updateStorage(string,string)", +"13baf1e6": "removeToken(address,uint256)", +"13bb7b0d": "PreICO(address,uint256,address)", +"13bbae9b": "addProxyManager(address)", +"13bc33ca": "CryptonHotels()", +"13bc4bda": "operatorSendTo(address,address,uint256,bytes,bytes)", +"13bd05e4": "silo_addr()", +"13bd4e2c": "_prepareAndSendReward()", +"13bd53e6": "applySettings(uint8,uint256,uint256,uint256,uint256)", +"13bd9e3c": "fundFoundation()", +"13bdbb19": "getCustomer(address,address)", +"13bdfacd": "print()", +"13be31ae": "preSaleDeposit()", +"13bfabf0": "isCurrentOrPastAccountReader(address)", +"13bfcd2c": "growthContract()", +"13c03159": "payPlayers(uint256,uint256)", +"13c04769": "submitBallot(bytes32,bytes32)", +"13c10e44": "attackerExpAdjustment()", +"13c13d6b": "updateMarketContract(address)", +"13c1629c": "_getBlockIndexAtYear(uint256,uint256,uint256)", +"13c1e906": "RentaCoin()", +"13c25ba6": "subtr(uint256,uint256)", +"13c2beff": "processWithdrawalForAccount(address)", +"13c32148": "_computeFee(uint256)", +"13c3922f": "Aborted(address)", +"13c42ca1": "getPrice(bytes1)", +"13c4f953": "getTime(address,address)", +"13c52111": "amountOfTokens()", +"13c58cbb": "countNoClients()", +"13c667d1": "calculateAmountBoughtICO(uint256,uint256)", +"13c68344": "Verto()", +"13c709d4": "transferToGame(address,address)", +"13c7db1a": "limitOfBranch()", +"13c82b0b": "setIsForkingMarketFinalized(bool)", +"13c89a8f": "getAllowedTime(bytes32)", +"13c8a376": "recovered(uint256)", +"13c8e60d": "getCurrentDebt(uint256)", +"13c9134b": "setcoinfee(uint256)", +"13ca1464": "getDHandRank(uint32)", +"13ca18ac": "WatermelonBlockToken(address,address,address)", +"13ca43a0": "teamWallet1()", +"13cc22ea": "createController(address)", +"13ccca96": "limitbreak_RELEASE()", +"13cceb21": "getHolderWithdrawIndex()", +"13cd528a": "miadd(uint64,uint64)", +"13ce15a9": "left67(uint256)", +"13ce401b": "getPlayerRecommond(address)", +"13ceb89b": "getCopaMarketAddress()", +"13cfed7f": "deposits_until_jackpot()", +"13d033c0": "cliff()", +"13d073d0": "Sign(uint256,address,uint256,uint8,uint256,string)", +"13d19950": "stringsEqual(string,string)", +"13d1aa2e": "f(uint256,uint256)", +"13d1bdfb": "priceForMateAdvertisement()", +"13d40e71": "RefundableCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"13d4bc24": "buyTokenProxy(address)", +"13d4c63a": "_purchaseWhaleCard()", +"13d53ca9": "check(bytes32,uint256,uint256,uint256)", +"13d5469d": "periodICOStage7()", +"13d557bc": "operatorRedeemByPartition(bytes32,address,uint256,bytes,bytes)", +"13d567ca": "isApprovedTAAddress(address)", +"13d59ca9": "upgradeAddr()", +"13d5d4fe": "test_insert_findWithHintNextRemoved()", +"13d5ee74": "accPartner()", +"13d5f1fe": "durationOfStatusSell()", +"13d65cd9": "test_34_assertGasUsage700Boards()", +"13d73a08": "AMOUNTWAGERED()", +"13d769de": "auctionCreated(uint256,uint256,uint256)", +"13d8867c": "mint(string,uint256,string,uint8,string)", +"13d8c840": "tail()", +"13d9028b": "Remain_burn(uint256)", +"13dc01bb": "BKBK()", +"13dce04f": "updateRoutingPreference(string,string)", +"13dcfa08": "AmountClaimed(address,uint256)", +"13ddb69a": "CROWDSALE_START()", +"13ddd3ae": "getTokePerWei()", +"13ddecd5": "withdrawICOReserve()", +"13de214e": "minimalSuccessUSDWEI()", +"13debf7c": "_getPersonalAirdropAmount(address,address)", +"13defbd9": "getMyCrabs()", +"13df20fd": "createTimeBasedVesting(address,uint256)", +"13df35d1": "publicTGEStartBlockTimeStamp()", +"13df7091": "mintAll(int256)", +"13e003dd": "ASStoken(string,string,uint8,uint256,uint256)", +"13e0e70d": "ownerRegistry(address)", +"13e1d1d2": "multiCancelVoteForCandidate(address[],uint256[])", +"13e1f2b0": "DATToken(address)", +"13e26d58": "minRequired()", +"13e28415": "ownerSetMarginRatio()", +"13e2cae1": "revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", +"13e2dfc1": "depositDividend(uint256)", +"13e3151b": "MyEPPToken()", +"13e33fb6": "calculateBonus(uint96)", +"13e41971": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"13e468b3": "getVotingToChangeProxy()", +"13e4b51f": "putHash()", +"13e50ca4": "totalFiatValue()", +"13e5a3b1": "SetUp(uint256,address)", +"13e5d8b6": "icoStartsAt()", +"13e5e26e": "recirculateLateFees(uint256)", +"13e60074": "OwnerRetireHodl(uint256)", +"13e7323e": "fundingEnd()", +"13e75206": "getParentOf(uint256)", +"13e7a234": "getAccessor(bytes32,uint256)", +"13e7d076": "STERNIUMHUGEELLIGENCECOIN()", +"13e81119": "purchaseTicketsWithReferral(uint256[],uint256)", +"13e8360d": "commissionerAuctionComplete(uint32,uint128)", +"13e8e5d2": "address2a()", +"13e8e74b": "IexecHub()", +"13e8fdea": "TxExecuted(uint32)", +"13ecfbfa": "lastBuyer()", +"13ed0846": "calculateReward(uint256,uint256)", +"13ed5f31": "getTransactionConfirmerInfo(uint256,address,address)", +"13ee4bc5": "pay(bytes32,address[],uint256[])", +"13f06abc": "balanceFrozenTokens(address)", +"13f07317": "enableStaticLogic(address)", +"13f0790c": "tokensSoldWithBonus()", +"13f07f6f": "Object()", +"13f0ec1f": "withdrawDekla(uint256,bytes)", +"13f20d76": "fundDigitalMarket()", +"13f233c2": "ethReceiveMainSale()", +"13f25eb6": "NinjaToken(address,address)", +"13f29768": "addUnsoldAllocationOrder(bytes32)", +"13f4318e": "SetSubscriptionTo(address,int256)", +"13f44d10": "isAddressWhitelisted(address)", +"13f46d3e": "SponBToken(address,uint256)", +"13f47f24": "lockedDelegatingTokens(address)", +"13f4b42c": "pixelsPerCell()", +"13f4c7a5": "INVESTOR_LOCK_DURATION()", +"13f4e977": "minimumFundingGoal()", +"13f52533": "capitalLedger()", +"13f56f73": "changeMinInvestment(uint256)", +"13f5ef00": "Main(string,bytes)", +"13f652fe": "getText(string)", +"13f6ee53": "cliffAdvisorsTokens()", +"13f73570": "manualyAddReferralPayer(address,address,uint256)", +"13f94a43": "getSiteTokenIds(uint256)", +"13f9cf76": "disableBundlingMultitoken(uint256)", +"13fa095f": "setDestinationWallet(address)", +"13fac256": "xem()", +"13faede6": "cost()", +"13fb2324": "EndEvent()", +"13fc5ace": "depositForMySelf(uint256)", +"13fc6ac2": "getEventData(bytes32)", +"13fcaf54": "getDepositCount(address)", +"13fdcbec": "developer_Coin_Character(string)", +"13fdd2b4": "TilexSupply()", +"13fe2de0": "releaseLockedFund(address,uint256)", +"13ff962a": "privatesaleSupply()", +"13ffdbfc": "gameCountOf(address)", +"13fff718": "doBet()", +"14001f4c": "setSiringAuctionAddress(address)", +"14004ef3": "multimint(address[],uint256[])", +"14007c6d": "nextState()", +"1400d1e4": "checkName(string)", +"14012549": "isMainSaleTime()", +"14025dcd": "cancelFee()", +"14029756": "setaddress(address)", +"1402c310": "NEWSOKUCOIN()", +"1402f031": "triggerAttackManually(uint32)", +"1402f80d": "selectTemplate(uint8)", +"1403041b": "PegasusToken()", +"14036f62": "Vboom()", +"1403835f": "_isExpired(uint256)", +"140420a9": "isRateValid(uint256)", +"140529c2": "YCoin()", +"140575af": "LogTokenPriceChange(uint256,string)", +"140604cc": "getInitialState(uint256)", +"14061862": "setIcoMin(uint256)", +"14069b12": "MXMPDMToken()", +"1406b921": "vent()", +"1406d3be": "lowestGameWithoutQuorum()", +"14074135": "dividendsRightsOf(address)", +"140758a9": "disableServiceProvider(address,bytes)", +"1408073e": "GangnamToken()", +"14081570": "addEpisode(string,uint256)", +"14081e39": "setEscrowFee(uint256)", +"14082cd2": "findProductById(uint256)", +"1409b88f": "getManualByAddress(address)", +"140a681a": "_getVersion()", +"140a7ac6": "getFinalScore(int256[])", +"140ad293": "spitnetwork()", +"140aee46": "_0xDogecoinToken()", +"140b1706": "maxHLPMTMarkup()", +"140b2cdd": "calculateMyRewardDecreased(uint256,uint256)", +"140b4465": "executeSpendingRequests()", +"140cc562": "isCollectSignatureCorrect(address,address,uint256,bytes32,bytes32,uint8)", +"140cd7af": "issueToken(address,address,uint256,uint256,uint256)", +"140d3e95": "changeFiatFeeContract(address)", +"140da6b7": "getAddressField1()", +"140dcec4": "right23(uint256)", +"140f64b4": "GoyanToken()", +"140f7f8d": "Staged()", +"14102159": "presaleLimit(address)", +"14106b49": "JustifyClaim(address)", +"14107f3c": "buy(uint8)", +"14111a43": "isValidService(bytes32)", +"1411539d": "multiSend(address[],uint256[],address[])", +"14116c3c": "SetPeriodPreITO_startTime(uint256)", +"14117228": "getNoteKeyByIndex(uint256)", +"1411d713": "licenseIssuedTime(uint256)", +"1412409a": "whitelistSetterAddress()", +"14127f13": "setOrderFill_(bytes32,uint256)", +"141283f1": "setNewWallets(address,address)", +"14131611": "setChibiForFusion(uint256,uint256)", +"14133a7c": "setSaleAgent(address)", +"14139904": "directorB()", +"14143c91": "TotalSpecialFeeTakes()", +"1414a506": "falangiToken()", +"1414ef78": "createInvoice(uint256)", +"14162e8d": "IouRootsReservationToken(string,string,uint8)", +"14163a83": "setCrowdsaleContractAddress(address)", +"14167bf0": "oraclize_query(string,string[])", +"1416a6eb": "ROMAKELAPA()", +"14174f33": "withDraw(uint256)", +"14177dbf": "setLockTokensAddress(address)", +"14179865": "logos(uint256)", +"1417b946": "adminOwner()", +"1417c845": "Mortal()", +"14189a7e": "outstandingValue()", +"141926fa": "updateAccount(string)", +"14193456": "MainSaleEnd(uint256)", +"141961bc": "campaigns(uint256)", +"1419c3f3": "grand_factory()", +"141a8dd8": "approver()", +"141bd92a": "getBallotInfo(uint256)", +"141c4306": "AbroToken()", +"141c4e60": "challenge(uint256,address)", +"141c9422": "listingDate()", +"141ca2c7": "reservedIcoCrowdsale()", +"141d717b": "OC()", +"141dbe66": "distributeBTCB(uint256,address[])", +"141e26a5": "setEditionMaxSales(uint8,uint256)", +"141edaa1": "manufacture(address,address,address)", +"141f211c": "snapshotStakeAmount(uint256,address,address)", +"141f6800": "fundingMinimumTargetInUsd()", +"141fd3cf": "channelResultTimeout(uint64)", +"14204ca9": "QZG001TOKEN()", +"1420765a": "isBuyLocked(address)", +"14211803": "hasBuyTotal()", +"14219ff9": "sq(uint64)", +"1421c1a4": "vote_for_candidate_C_for_free()", +"14225b9b": "token_ratio1()", +"1423113a": "fluxFeed(uint256,bool,bool)", +"142359f4": "fillOrder(bytes32[],bytes32[])", +"1423649b": "cofounderApproveSwitchRequest(address,bytes32)", +"1423c40e": "setBudgetOfCampaign(bytes32,uint256)", +"1424c182": "recordDeposit(uint256)", +"14253887": "certify(address)", +"1425d2fa": "getBalanceToken()", +"14263f0c": "Dadice()", +"1427407f": "NINECOINTOKEN()", +"142769aa": "requestNumber(address,uint256,uint8)", +"14279086": "getIndividualCount(uint32)", +"1427f168": "log2Bounds(uint256)", +"14280bb8": "getBodyColorValue(uint256)", +"14287a07": "playerPrizeClaim()", +"1429a36b": "getOrCreateFeeWindowByMarketEndTime(uint256)", +"1429e26c": "User()", +"142b353d": "MultiTransferETH(address[],uint256[])", +"142bc2ae": "latestData()", +"142c99d2": "closingSettle(bytes32,address,uint256,address,uint256)", +"142d239a": "canPurchaseAmount(address,uint256)", +"142dc95d": "testAmount(uint256)", +"142e0bdf": "LogAllocate(address,uint256,uint256)", +"142e133f": "totalBalanceDown()", +"142e8e25": "setAdmin(uint256,address)", +"142e9ab8": "setTrade(bool)", +"142e9bc9": "weaponToOwner(uint256)", +"142f328e": "fundDao()", +"142f53c2": "sendInitialTokens(address)", +"14307c48": "addHpbBallotAddress(address)", +"143085c3": "updateRankBoard(uint256,uint256)", +"1430990a": "bidTransfer(uint256,address,uint256)", +"1431b23a": "getData(bytes)", +"143211ec": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"14325458": "calculateTokensFrom(uint256,uint256)", +"1432621a": "getPeakSupply()", +"14332c93": "SetConfirmRound(uint32,uint8,bool)", +"14350c24": "changeMinimumMakerProtocolFee(uint256)", +"143551e4": "timeExtension()", +"143580d0": "PGDA()", +"14359466": "NBTV()", +"1435e397": "setAllocation(address,uint256,uint8)", +"14361fd1": "singleWithdrawMin()", +"14363e65": "setPeriod(uint256[])", +"14367652": "revealStageActive(uint256)", +"1436fb39": "_isVotingAddress(address)", +"14371c33": "someMethod5(uint256,uint256,uint256)", +"14373817": "rateSoft()", +"1437f9a3": "Set_your_game_number(uint16)", +"14386a74": "saleToggle(bool)", +"143a1a2f": "pilfer(uint256)", +"143bb3e6": "StartRollDice(uint32)", +"143c56cf": "disprove()", +"143c6d4f": "TokenTransferTo(address,uint256)", +"143c7a3f": "OPAY()", +"143e55e0": "era()", +"143e6209": "setImagePartsCount(uint256,uint16)", +"143f68c9": "getRedemptionBalance()", +"143f9d1f": "week4Price()", +"143fb46d": "setRemainingTokensWallet(address)", +"143fcbbe": "cancelBooking(string,uint256[],uint256,bytes32,bool)", +"14404eb2": "roundOver()", +"144052b6": "C4coin()", +"1440f2bf": "PRE_SALE_PERCENT()", +"144136a1": "restartCrowdsale()", +"144138c8": "removeGlobalConstraintPre(address,int256,address)", +"1441a5a9": "referral()", +"1441c288": "showUnpaidInterest(address)", +"14423381": "GameConfig()", +"144267e0": "refundSecurity(address,uint256,uint256)", +"1442b548": "ZTST()", +"14432f6e": "Received(address,address,uint256,uint256)", +"144344b9": "setEth(uint256)", +"14442f54": "VERSION_NAME()", +"14447e11": "checkGamesReadyForSpinning()", +"14449c92": "finishRoundB()", +"14459309": "price_constant2()", +"1445c6da": "increasePosition(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", +"1445f713": "hexstrToBytes(string)", +"14462b93": "findWhichCTD(address)", +"14468d32": "nextBidExpireBlockLength()", +"1447431e": "setCCH_edit_24(string)", +"1448b3ca": "tokenSaleAddress()", +"1449757d": "annulCertificate(address,address)", +"1449c321": "view_get_gameStates()", +"1449c6dd": "Staked(address,uint256,uint256)", +"144a2752": "getBuyAmount(address,address,uint256)", +"144a3260": "createWithDeposit(address,address,uint256)", +"144a3472": "inMaintenance()", +"144a88a0": "updatePlayerPoint(uint32,uint32,uint32,uint32,int256)", +"144b2a82": "transferICO(address,uint256)", +"144be7eb": "totalNumberOfCards()", +"144c7e40": "CRYPTOKEN(uint256,string,uint8,string)", +"144cbdfd": "NobeToken()", +"144f2f94": "_burn()", +"144fa6d7": "setToken(address)", +"145000ab": "PRICE_2()", +"14525b6b": "auctionFee()", +"14525bce": "INITIAL_BALANCE()", +"14526f8c": "Buy(string,address,uint256,uint256)", +"14534ad0": "LogCertifierAdded(address)", +"14534ba7": "ballotEncryptionPubkey()", +"1453671d": "changeWithdrawAddress(address)", +"1453bfb3": "visitingUnicorns()", +"1453d756": "bytes64ToString(bytes32,bytes32)", +"145538ea": "phase1StartBlock()", +"145671aa": "getValidations(address,bytes32)", +"14567b8b": "setSelfAsContributor(string)", +"1456974f": "setNameReaderId(address,bytes32,bytes32)", +"1456979f": "setNewValidator(address)", +"14572dff": "incrementUniquenessIndex()", +"14576a49": "NewSophonToken(address)", +"14577c55": "accountLevels(address)", +"14584a9d": "getAuctionIndex(address,address)", +"1458ffb3": "VREO_SALE_PHASE_1_END_TIME()", +"1459457a": "initialize(address,address,address,address,address)", +"1459cef4": "balanceOfMine()", +"1459ecc4": "lastrecordindex()", +"145a0adc": "setDataLink(uint256,string)", +"145a7f92": "social(address)", +"145af145": "getAllCardsLowestPrice()", +"145b2ab2": "CocoToken()", +"145ba84c": "_payAwardOwner(uint256)", +"145c03f2": "TransferFromCompanyInventory(address,uint256,bytes32)", +"145ca0b3": "UnLockTokens(address,uint256,string)", +"145cb459": "showCertificate()", +"145ccb0f": "planWithdraw(uint256)", +"145cf0c2": "decrementTokenIdsLength()", +"145d82d6": "setKingdomFactoryRP()", +"145e1944": "buy(bytes,int256)", +"145e6701": "SteemitFund()", +"145e818f": "BALVINDER()", +"145e8f5e": "HVB()", +"145eb4ee": "HuaTuoToken()", +"145ee04c": "pendingFeesWithdrawals()", +"145f3143": "releaseTime1()", +"145f8ba2": "getPainting(uint256)", +"145fa890": "setWhiteListDuration(uint256)", +"145fd87a": "getTotalHashRateOf(address)", +"145ff9cb": "terminateShortPosition()", +"146008e3": "grid(uint256,uint256)", +"14606109": "cap1(address)", +"14607fc2": "dispute(bool,address)", +"146091f1": "removeFromAllocationList(address)", +"1460b505": "setWeights(uint256[])", +"1460e603": "numDarknodes()", +"146124f9": "totalDistributedr()", +"146155bf": "createUserByEmailVerify(bytes32,bytes32,uint256)", +"14619c7f": "setContractAdmin(address,bool,uint256)", +"14627834": "GOVERNANCE()", +"14633039": "VanityToken_v3()", +"146483f9": "setCreateUnicornPrice(uint256,uint256)", +"1464bc45": "walletFacebook()", +"1464f516": "votosTotales()", +"14653f87": "SHIP(uint256,uint256,uint256)", +"14656957": "PeculiumToken()", +"1465aa97": "testingContract()", +"1466724a": "subUserBattleValue(address,uint256,bool)", +"14670850": "test_33_assertGasUsage200Boards()", +"14673d31": "setReserveAddress(address)", +"146740ee": "bulkAddMake(address[],uint256[],uint256[])", +"14679957": "GenesMarket()", +"14686ac2": "puntAmount()", +"1468d9cb": "Latium()", +"1468fc26": "changeSharedExpenseAllocation(uint256)", +"146901db": "setFailed()", +"14690be7": "TransactionSucceededICAP(bytes32,uint256,string,address)", +"14697cc8": "claimHalvingsSubsidies(uint256)", +"14698895": "Certification()", +"146b4955": "RICHERC20(uint256,string,string)", +"146b58df": "getInvestment(address)", +"146bea7b": "nextYear()", +"146c8710": "addressOf(address,uint256)", +"146ca531": "round()", +"146d2148": "setReaderId(address,bytes32,bytes32)", +"146dd227": "BLTToken()", +"146dd8e0": "BestEther()", +"146e3cb5": "getDroidsIds()", +"146e7eea": "soulsForSale()", +"146e91b5": "signContract(bytes32,string,bool)", +"146e9329": "summJenkins()", +"146ee571": "requestFreeDistribution()", +"146ef27d": "balancePreSale2()", +"147035ba": "processPublicPurchase(uint256,address)", +"14704d91": "getCCH_edit_26()", +"14709544": "BetCoin()", +"1470dfa8": "closeWindow(uint8)", +"1470fc6f": "approveRejectOrg(string,string,string,string,string)", +"14712e2f": "proxyApprove(address,uint256,bytes32,address)", +"147180ab": "feesA()", +"147288fb": "test_insert_findWithHint(int256)", +"1472d56a": "assertEq1(bytes1,bytes1)", +"1473248d": "SampleContract()", +"14743e7e": "activateRound(uint256)", +"1474b789": "burnXPTokens(address,uint256)", +"1475e751": "game_token()", +"1476e40f": "multiCall(address[],uint256[])", +"1478b6af": "abortUpdate()", +"1479290e": "removeBouncer(address)", +"14793058": "createPhoenixes()", +"14794702": "withdrawWinnings(uint256)", +"147a5640": "_getAllRevisionIpfsHashes(bytes20)", +"147aaa8d": "giveTokensTo(address,uint256)", +"147bfd66": "GuardedBeercoinICO()", +"147c9f6d": "updateWallets(address,address,address)", +"147d57b0": "send_bounty_token(address,uint256)", +"147d959a": "setUSDPrice(uint256)", +"147da3c9": "newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", +"147e14a4": "retrieveTokens(address,address,address)", +"147e51f4": "freezeTheMoment()", +"14807045": "flipCapSwitchTo(bool)", +"148105ab": "addBankroll()", +"148174cd": "ownerSetCasino(address)", +"1481c04a": "getTXSValue(uint256)", +"1481d439": "deleteUserClaimInBulk(address[])", +"148222cf": "donateSkin(uint128,address)", +"1482bd40": "bountyBalanceMap(address)", +"148303a7": "SafePower(uint256,uint256)", +"14838617": "DEV_PORTION()", +"1483fc8c": "addBlockData(uint256,bytes)", +"14841164": "extraBalanceWallet()", +"1484abf4": "whitelistApplication(uint256)", +"1484cd32": "getWinners(uint16,uint8)", +"1484e9ad": "startICOStage2()", +"14852606": "setAccompliceBContract(address)", +"1485ffc4": "finalizeTDE()", +"14870a57": "setMonthClose(uint256,bool)", +"14870d2c": "withdrawAllToken()", +"14887c58": "isEntity(address)", +"1488f983": "LogFinalized(address)", +"148ab04e": "balance_in()", +"148ab078": "MEW_RESERVE_FUND()", +"148bea6b": "gamblerlist(uint256)", +"148cd939": "transferBecauseOf(address,uint256,address,uint32,uint256)", +"148ce4a4": "test_claimShare_isTranscoder()", +"148d3e7b": "FQCoin()", +"148da7f6": "disableInvestment()", +"148dd101": "thirdChangeBlock()", +"148f2e5e": "sendWei(address)", +"148fa780": "just10Send()", +"14900396": "changeRaceOwnership(address,address)", +"149148e0": "getCityPlanAddres()", +"1491858e": "calculateSetupAllowedUntil(address[16],uint256)", +"14918f5e": "performInitialWithdrawal()", +"14930d7e": "transferResidualBcoupons(address,uint256)", +"14941e80": "getFreeAmount()", +"14946a97": "CoreToken(uint256,string,string,uint8)", +"1494ecfc": "SentosaX()", +"14950f64": "RevokeAddressChanged(address)", +"14959741": "UserMessage(address,string)", +"149607d3": "EtherollToken()", +"149679b9": "GOE()", +"1496fc4c": "Telcoin()", +"14975cc7": "hardCapPrice()", +"14986f5b": "setCooldowns(uint32[100])", +"1498970a": "getDeployedblockbytesMarriages()", +"149947fd": "finding(address,bytes8,uint8[])", +"1499c592": "setParent(address)", +"149acf9a": "daoCreator()", +"149b8690": "supplyInCirculation()", +"149c5066": "ChanceOfWinning(uint256)", +"149cc1f6": "_finalizeBet(bytes32,address,uint256,uint256)", +"149cd0be": "alterCreatePetitionFee(uint256)", +"149dffc8": "numCancelledRequests()", +"149e6788": "heroClasses(uint32)", +"149e685a": "getFundById(uint256)", +"149eead5": "master_contract()", +"149f2fdb": "sellExchangeRate()", +"149fc918": "_rejectMint(uint256,uint256)", +"14a0069a": "getVoter(string)", +"14a03e7c": "concludedGameIndex()", +"14a06710": "TokenRelease(address,uint256)", +"14a091a9": "createLockTokenHistory(address,uint256)", +"14a1231f": "guardian2Vote()", +"14a26806": "setPreUri1(string)", +"14a2d99f": "Grant(address)", +"14a34ebd": "getMilestones(uint256,uint256)", +"14a3557b": "intrepidVoucherSoldCount()", +"14a3b19a": "transferIndexedByAddress(address,uint256,address)", +"14a47046": "add_blockedAddress(address,address)", +"14a4a273": "penalizationOpen()", +"14a528f2": "HasGift(string)", +"14a54912": "token_a()", +"14a57db7": "LogPreparePreContribution(address,uint256,uint256,uint256)", +"14a59e9d": "getStakeholderConfirmationCount(uint256)", +"14a5cd29": "getAssetEmitter(uint256)", +"14a6a1a5": "REQUESTED_STATUS()", +"14a7945a": "redeemAllOwnedAssets(uint256)", +"14a7c57d": "getData_26()", +"14a89904": "rollDie(address,uint256)", +"14a8bd0d": "EXCHANGE_RATE()", +"14a8ca20": "fromPercentage(uint256,uint256)", +"14aa0eaa": "claimBountyToken()", +"14ab260e": "retrieveCompletedProof(bytes32)", +"14ab9038": "setTTL(bytes32,uint64)", +"14aba0db": "MineAD(address,uint256)", +"14ac1102": "get_total_items_in_state(bytes32)", +"14ad47eb": "SwapToken()", +"14ae1229": "setRightForInterest(uint256,uint256,bool)", +"14aedbee": "TokenFactoryAirdrop()", +"14af0908": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256,uint256)", +"14af1e92": "MinterGaveCWC(address,address,uint256)", +"14af35c3": "MyToken(string,string,uint256)", +"14afd79e": "ownerOf(address)", +"14b0519d": "AltExtraHolderContract(address)", +"14b08b4d": "getAllDepositors(uint256)", +"14b0e266": "addBid(uint256)", +"14b11606": "BONUS_ICO_STAGE2()", +"14b11651": "setPoolAndAmount(address,uint256)", +"14b11875": "verifyProposal(address,address,uint256,string)", +"14b1e1f8": "setRefer50x50(address)", +"14b24209": "multiGuess(int256[])", +"14b2cd55": "LightPool()", +"14b2d6dc": "isValidDate(uint256,uint256,uint256)", +"14b419c9": "getAllUsers(address)", +"14b49c36": "Police_5()", +"14b5202c": "stage_Discount()", +"14b546b4": "FreePublicity()", +"14b577ab": "addIdArrayItem(address,address,string,string,uint256)", +"14b72000": "txFeeCapInWei()", +"14b77798": "unsetMany(address[])", +"14b78abb": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,uint256)", +"14b79e21": "_depositTransferCredits(uint256,uint256)", +"14b7c684": "DGD()", +"14b80402": "isStateDestructed()", +"14b85c1b": "removeSalesAgent()", +"14b87862": "getParticipant()", +"14b8e9a4": "checkpointLevel()", +"14b92721": "loveMessage()", +"14b933e1": "getWeiPerSatoshi()", +"14ba5c09": "getDay()", +"14bafeab": "getMessage2()", +"14bb4dd9": "WavesTransfer(address,string,uint256)", +"14bba4b8": "setDiscount(uint256,uint256,uint256,uint256,uint256)", +"14bba8a2": "updateRequestExpired()", +"14bbe21c": "transferBeneficiary(address)", +"14bc3efc": "endBorrowAgreement(string,string,uint256,uint256)", +"14bd0c21": "getServiceAddress(bytes)", +"14bd3d87": "acceptOffer(string)", +"14bd8acd": "massApproval(bool,uint256,uint256)", +"14be4ecc": "setWETHContract(address)", +"14be5169": "releaseLockAgencyLock2()", +"14be7793": "isPrivateSale()", +"14beb3a3": "latestParams()", +"14befc70": "parkingOff(address)", +"14bfd6d0": "admins(uint256)", +"14c01fb4": "_checkPixelAbove(uint256)", +"14c0a37a": "stateBorrowerDefaulted(uint256)", +"14c0bc27": "EtherBalanceOf(address)", +"14c0ffdc": "formula(uint256)", +"14c15569": "getAccountOutputSdcslength()", +"14c16f41": "updateStageWithInvested()", +"14c239a9": "_cappedReward(uint256)", +"14c259eb": "white_duration()", +"14c292ca": "finishITO()", +"14c2d2e0": "handleRef(address,uint256,uint256,uint256)", +"14c33c24": "setSystemEndingPrice(uint256)", +"14c3512d": "adminSetFeeUsdDialNumber(uint256)", +"14c3e29f": "NONEC()", +"14c411c7": "releaseTeamTokens()", +"14c44e09": "registrationFee()", +"14c485c9": "getMartialListInfo()", +"14c588de": "setPromoGen0(uint256)", +"14c5f158": "callModifiedTransfer(address,uint256)", +"14c65687": "_getWeightUntil(uint256,uint256)", +"14c72e9e": "_getFirstIndex(uint256,uint256[])", +"14c74834": "setHeir(address,uint256)", +"14c7763b": "MINTING_LIMIT()", +"14c78333": "batchResolveAquarium(uint256[])", +"14c7bddf": "manualRefund()", +"14c888da": "setFeeParams(uint16,uint256,uint256)", +"14c8e5f4": "requestHangingDividends()", +"14c9035e": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"14c9b8a5": "closeEarly(uint256)", +"14c9eed0": "onlyadmin()", +"14ca5200": "MiningRewardTransfer(address,address,uint256)", +"14ca5398": "submitFullBlock(bytes,uint256[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,uint256)", +"14ca6e01": "setBleachPrice(uint256)", +"14ca8e01": "validPlayer2(uint256,address)", +"14cabddb": "joinProof(uint256)", +"14cb1ae4": "ContractOwnable()", +"14cba002": "_forwardTransferFromWithReference(address,address,uint256,string,address)", +"14cbb90d": "yea()", +"14cbd993": "getRegisteredTokens()", +"14cbdb54": "EspCoin()", +"14cc3cf9": "FOUNDERS_LOCK_PERIOD()", +"14cd70bc": "FakeOwner(address)", +"14cddf9e": "whiteListMinAmount()", +"14ce2f61": "MappingDone(address,uint256)", +"14ce4059": "owner_fee()", +"14cf12d5": "softCapTime()", +"14cf19fe": "TIER1_PRICE()", +"14cf588f": "LBA()", +"14cf6983": "getBalanceCell(address)", +"14cfb977": "minFinneyPerSaleMoreThan()", +"14cffda2": "synertreeToken()", +"14d03ea6": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256)", +"14d04e06": "FooozCrowdsale(address,address)", +"14d066d5": "addCertificator(address)", +"14d07a3e": "left28(uint256)", +"14d0f1ba": "moderators(address)", +"14d10920": "BetstreakToken()", +"14d140b0": "communityPool()", +"14d20606": "devTeamPrecent()", +"14d23c8b": "MaliciousSeller()", +"14d296f4": "getPremiums()", +"14d2d59d": "_approve(uint40,address)", +"14d30335": "assignInitialDays(address,uint256,uint256)", +"14d33a30": "addCandidateBatch(address[])", +"14d36f53": "checkVerifyAccess()", +"14d3df67": "getSMPTokensAmountPerEthInternal(uint256)", +"14d47bc9": "registerBeneficiaries(address[])", +"14d4ecd9": "defineCurrentPeriod(uint256,uint256)", +"14d547aa": "returnInvestments(address)", +"14d5d892": "changeMemberAddress(uint256,address)", +"14d67848": "setClass(uint256,uint256)", +"14d6c2b1": "_maint_updateOwner(address)", +"14d72106": "nextNumberOfWagersToFinalTimeout()", +"14d75e9d": "createProduct()", +"14d79e37": "GetRed(address)", +"14d8c981": "getItem(address)", +"14d9d2e5": "getCostForUprade(uint256,uint256,uint256)", +"14dacf5b": "disableWhiteUserList()", +"14db6d58": "hasUserPermission(address,bytes4)", +"14db8c7d": "getGladiatorPower(address)", +"14dba3ba": "PPToken(uint256,uint256)", +"14dbb508": "Project(string)", +"14dcd58f": "derpcoin()", +"14dcfd55": "vendorWallet()", +"14de9cc2": "tokenGenerated()", +"14dea8e7": "onCancel(bytes32,uint256,address)", +"14deb0ac": "addressAt(address,bytes,uint256)", +"14df96ee": "isRoundingError(uint256,uint256,uint256)", +"14dfad27": "_emergencyLoop()", +"14e0246a": "setMintSigner(address,int256)", +"14e2bc2a": "finishMinting(uint256)", +"14e3fad3": "extra_bonus_amount()", +"14e4a723": "SafePromo()", +"14e580ab": "LogIdentityCreated(address,address,address,address)", +"14e604b6": "EXPLOSION_DENOMINATOR()", +"14e6a86d": "doCheckBounds(bytes32)", +"14e8093f": "clientWithdrawAll()", +"14e887e8": "transactionCounter()", +"14e904e8": "LogBidCompleted(uint256,bytes32,bytes32)", +"14eaa43b": "withdrawToken(address,uint256,string)", +"14eb75bb": "assignRoles()", +"14eb76ac": "updateTeamAddress(address)", +"14eba026": "removeTeamMember(address)", +"14eba5d8": "affiliateList()", +"14ec4106": "createAuction(address,uint256,address,uint256,uint256,uint256)", +"14eda32c": "COZE()", +"14eea0dc": "IND()", +"14efaf86": "ChangedPaymentDestination(address,address)", +"14f0ff32": "FUNK()", +"14f1244c": "reclaimDeposit(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"14f1586a": "objective()", +"14f1dcac": "setFreeCoins(uint256)", +"14f2979f": "getTickets(uint256)", +"14f36e17": "getTokenIssued()", +"14f3f491": "preICOContract()", +"14f52c07": "Blogcoin()", +"14f604b8": "deposit_asset_to_session(uint32,uint32,uint64)", +"14f60881": "getJobClient(uint256)", +"14f64d6c": "PRESALE_START_WEEK1()", +"14f685a8": "Etherumble()", +"14f6c3be": "getETH()", +"14f72e50": "EightStandardToken(uint256,string,uint8,string)", +"14f7731b": "getAllowedAmount(uint256)", +"14f7789d": "GRAChain(uint256,string,string,string)", +"14f796ca": "changeStageAndReleaseETH()", +"14f80083": "setMultisigVault(address)", +"14f8917a": "initialSupplyPreSale()", +"14f8b424": "roundID()", +"14f8f160": "hasIssue(address,bytes32)", +"14f99533": "changeAuthorisedContract(address)", +"14f9e35b": "groom()", +"14fa0b45": "NenasChain()", +"14fa274c": "MigrationInfoSet(string)", +"14fbc22b": "createHero(uint256,address)", +"14fc2812": "setAuthorized(address)", +"14fc7b9d": "AscToken(address)", +"14fcb95c": "ubiatarPlayWallet()", +"14fd0c14": "deadlineVoting()", +"14fd24f0": "updateIndividualCap(uint256)", +"14fddb71": "devTeamBalance()", +"14fdecca": "getPromotion(uint256)", +"14fefca1": "set_hp(uint256)", +"14ff5ea3": "getTokenId(uint256)", +"14ff5f99": "punterAddress()", +"14ff89cd": "getContactByIndex(uint256)", +"14ffbafc": "startEthGet()", +"1500214e": "calcPercent(uint256,uint256)", +"15003368": "withdrawEMONT()", +"1500c257": "startTimePre()", +"1501bf03": "transferFunds(address,address,uint256)", +"15020cb0": "commandTookAway()", +"1502906d": "timeStep()", +"15036fa2": "update_dividend(address,uint256,uint256,uint256)", +"1504460f": "poke(bytes32)", +"150455a4": "HOTCASH()", +"15045c3e": "GenieToken()", +"1504ce95": "payout(string)", +"1504d8f0": "createSnapshot()", +"1504e40b": "RoundEnded(address,uint256)", +"150627bb": "minimumInWei()", +"15067c4e": "p_setRoundDuration(uint256)", +"15070401": "getSymbol()", +"150727ff": "getSecondAddressBalance()", +"15087f7d": "cancelBet(uint256,bool,uint256)", +"15093e03": "minimumAllowedWei()", +"1509c42a": "pr()", +"150a5655": "giveVote(string,uint8)", +"150a6480": "allowMinter(address)", +"150aaf74": "BHB(uint256,string,string,uint8)", +"150ad280": "review(uint256,bool)", +"150ad2a8": "owner_transfer_ownership(address)", +"150b52db": "removeAddressFromPartnerWhiteList(address)", +"150b60e6": "MAYNILAD()", +"150b6885": "genaroDevMultisig()", +"150b7a02": "onERC721Received(address,address,uint256,bytes)", +"150bc419": "unitMythGrowth()", +"150c3e8b": "getIdxArray(uint256)", +"150d6277": "setMinBetPerSpin(uint256)", +"150d7163": "UnfreezeTokensOfOneUser(address)", +"150eb4d9": "releaseTeam(uint32)", +"150f16ac": "stoppedPresale()", +"150fa89f": "FirstUser()", +"15105fa8": "clearCreator(uint256)", +"1510ca79": "MAX_CROWDSALE_TIME()", +"151110b0": "releaseLockedBalance(uint256)", +"1512cfc1": "_preValidateInvest(address,uint256)", +"15136fb5": "ChiTrader()", +"15139f09": "ExaGBP()", +"15142ed4": "shutDownVersion(uint256)", +"15143d6a": "buyOx()", +"1514617e": "vestingDuration()", +"15148649": "getAllowedTokensCount()", +"1514b9cb": "RKCToken()", +"1514bc48": "tokensForPurchase(address,uint256)", +"1514ea54": "getLossesShare(address)", +"15154aff": "ITO()", +"15158a10": "numberOfTokensToAvail25percentDiscount()", +"1515bc2b": "hasClosed()", +"151682a5": "HASH_RATE_MULTIPLIER()", +"1516bbc4": "setTeamVault(address)", +"1516db09": "allOwners(uint256)", +"1516def7": "multiSigAddress()", +"1517d107": "totalNormalCollected()", +"15183e2f": "twitterBotAddress()", +"15191c98": "hibernate(uint256)", +"15194a9f": "init(uint256,string,string,uint8)", +"151b0bed": "getSponsorshipsBalance(address,uint256)", +"151b2342": "getOraclizeCallbackFee()", +"151bc167": "Control()", +"151bcc06": "massAdvertiseTransfer(address[],uint256)", +"151c0d40": "crowdsaleEther()", +"151c3b12": "store(address,bytes)", +"151c61b6": "setUSDExchangeRate(uint256)", +"151d7d32": "flushDividends()", +"151e2a0a": "check_ptc_num(address)", +"151eeb55": "transferAllowed(address)", +"151fa6be": "delegateIsDeleted()", +"15226b54": "getReserveBalance(address)", +"1522f110": "preregvills(address)", +"15248362": "buy_bounty()", +"152583de": "getAttributes()", +"152592b0": "WALLET_ALLOCATION()", +"1525b4f5": "mintLockedTokens(address,uint256,uint256)", +"1525d680": "MainToken(address)", +"1525ff7d": "setTeamWallet(address)", +"15263ef7": "VHW()", +"15270ace": "distribute(address,address[],uint256[])", +"152713b3": "sumAcceptedVirtualContrib()", +"152744ea": "BondInfoById(uint32)", +"1527d657": "returnHowMuchMoreETHNeeded(uint256)", +"152826e9": "cashoutable()", +"15285aa3": "EventBid(uint256,address)", +"1528f43c": "getPOOL_edit_10()", +"152993a8": "addContract(string,bytes)", +"1529a639": "getCollateralBalance()", +"152a3f28": "getSponsorships(address,uint256)", +"152af8f9": "acceptFoundationTransfer()", +"152afab4": "adicionarAssinatura(string,string)", +"152b6f9a": "hasDNN(address)", +"152cf3af": "ethPayment(bytes32,address,bytes20,uint64)", +"152cf9db": "getDataPoint(int256,uint256,uint256)", +"152e84a7": "tokensDistributed()", +"152fb125": "SimpleMixer()", +"152fb5fd": "period_count()", +"15303771": "updateUnsold(string,uint256,uint256)", +"1531076c": "getAgonArray(uint64,uint64)", +"15312b50": "SimpleTokenVesting(address,uint256)", +"153154fd": "getRecommender(address)", +"1531c267": "fipsRegisterMulti(uint256,address,bytes)", +"1531dfdb": "ethtosend()", +"15328109": "parentAddr()", +"153345ce": "changePrice(uint256,uint256,uint256,uint256)", +"15334b77": "setGameStarterDividendPercentage(uint256)", +"15334fa7": "SOCToken(uint256)", +"15336f80": "setProof(string)", +"15338724": "mediaTokens(address)", +"1533ba50": "EMBCToken()", +"1534180f": "_transfer(address,uint256,bytes,string)", +"15347380": "priceInWeiToken(uint256)", +"1534b1fc": "getPlayerDepositData(address)", +"1534b392": "getNumLockers(address)", +"1534e8d2": "multiVesting(address[],uint256[],uint256[],uint256[])", +"1535884e": "notarizeHash(bytes32)", +"153677b7": "deployOtherVesting(address,uint256,uint256)", +"1536a614": "EphesusToken()", +"1536cabf": "addCertAdmin(address)", +"1536fec6": "get_end_time()", +"15370598": "getCurrentMode()", +"153737f5": "OWN_DistributeTokenAdmin_Multi(address[],uint256,bool)", +"15373e3d": "castVote(uint256,bool)", +"1537671c": "qtdePokemonsMapping(address)", +"15382559": "LogDepositReceived(address)", +"153913e3": "ICO_Live()", +"15398afe": "compareNumericStrings(string,string)", +"153a1f3e": "bulkTransfer(address[],uint256[])", +"153a6bd3": "test_sendFundsToContract()", +"153a79c9": "buySaleTokens(address)", +"153aa771": "totalSupplyBonus()", +"153b0d1e": "setBlacklist(address,bool)", +"153b31fd": "sign(string,uint256,uint256)", +"153cc53d": "hasCrowdsaleStarted()", +"153d3572": "deletePawn(uint256)", +"153debee": "FOUNDERS()", +"153e66e6": "buy(address,address,uint256)", +"153e6d70": "setPercentFrozenWhenAwarded(uint256)", +"153faf2c": "FOUNDER_WALLET()", +"153fbb81": "setCAPAddress(address)", +"153fe583": "getAddressFromSig(bytes32,uint8,bytes32,bytes32)", +"153fe6aa": "STATUS_INITIAL()", +"15408734": "addMake(string,address,uint256,uint256,bool)", +"15409c1d": "TradingAccount()", +"1540fe22": "weiMinimumLimit()", +"15413ccf": "logicProxies(address)", +"1541eb12": "JournetToken()", +"15420b71": "transferPreSignedHashing(address,address,uint256,uint256,uint256)", +"1542b365": "phase_4_remaining_tokens()", +"1543136c": "getDeployedLength(address)", +"1543d99f": "bonus_calculation()", +"1544fc67": "delegatorStatus(address)", +"15454cd2": "registerNameCore(uint256,bytes32)", +"15480c63": "createDefaultCobeFriend(uint256,uint256,uint256,address,uint256,uint256)", +"15490ebb": "transferReward(address,uint256)", +"154920b0": "firstEmptyId()", +"15497d2c": "lockStatus(address)", +"1549be43": "getOutstanding(address)", +"1549c1e2": "usePlayerToken()", +"154a7d71": "DATE_31_DEC_2019()", +"154ad3f7": "ChangeMemberName(address,string,string)", +"154af6b1": "sendShares(uint256,uint8,uint256,address)", +"154b3f4c": "executeSigned(address,uint256,uint256,address,bytes)", +"154d56db": "callHotel(address,bytes)", +"154d6e12": "buyPack(uint8,uint128)", +"154d7944": "newCarID()", +"154e3f61": "enroll(address,address,uint256)", +"154e45a4": "privateSold()", +"154e8152": "withdrawnBalance()", +"154e95f1": "changeNamespaceOwner(string,address)", +"154e9bd5": "PumaPayToken()", +"154f78dc": "FREETOKENTEST(uint256,uint256)", +"154faf5d": "getTodayIndex()", +"15502d73": "changeTokenFreezeDate(uint256)", +"15506bf1": "RemoveParticipant(address,address)", +"15519af1": "RANGESTART_PRESALE()", +"1551e636": "tokensReceived(bytes32,address,address,address,uint256,bytes,bytes)", +"15525991": "getMaxAmount(address)", +"15527006": "icoPhaseDiscountPercentage3()", +"1552cb04": "addBaseWhitelist(address[])", +"15544fc2": "Teaeum(uint256,string,string)", +"1554611f": "escapeHatch()", +"1554c243": "_setApp(address)", +"1555e337": "ConferenceCertificate()", +"1555fe7e": "RecordableRefundableCrowdsale(uint256)", +"1556195c": "LowRiskBag()", +"15574634": "requestTransferFundToSupplier()", +"1558687a": "DepositContract()", +"155897cc": "changeDeDeAddress(address)", +"1558ab7e": "sendEthBack(uint256)", +"1558ae4d": "Etheroll()", +"155949ca": "buyStores()", +"15598339": "GetPurchaseInfo(address)", +"155ac95f": "switchname(bytes32)", +"155bdaa0": "SEGFAULTCOIN()", +"155ce432": "Restitution_Historique_Transactions(address)", +"155dcb47": "ZJFTokenDeposit()", +"155dd5ee": "withdrawFunds(uint256)", +"155f0ebc": "dividends(bool)", +"155f1861": "claimBonusCard()", +"156014e8": "addAddressToPartnerWhiteList(address,uint256)", +"15613495": "earlyBackersWallet()", +"15613d9f": "chainIdValue()", +"15616d2b": "getCurrentResult()", +"1563f4ff": "adminOrInitializing()", +"1564d706": "lockIn()", +"15659dde": "getBidCount(bytes32)", +"1565b0b6": "PRICE_ICO4()", +"1565c3c8": "takeEther()", +"1565f12f": "createVote(bytes32,address,address,uint256,bool,string,string,uint256)", +"156773ca": "setAllStopper(address)", +"1567d7a7": "transferPromotionalShares(uint256,address,uint256)", +"1568a1a1": "vinciSold()", +"15691522": "AltSocialAccountPw(bytes32,bytes32,bytes32,bytes32)", +"15698812": "redeemExcluded(bytes32)", +"156a0528": "getBalancesPayer(uint256)", +"156a2f36": "bid(address,uint128)", +"156b1494": "removeExpiredAssignments(address,uint256)", +"156bf4c1": "getKtcAddress()", +"156c0ed4": "Scanetchain()", +"156c2e82": "withdrawGxTokens(address)", +"156c6baf": "isAllowCnsContract(address,bytes32,bytes32)", +"156cacc3": "Etheroneum()", +"156e29f6": "mint(address,uint256,uint256)", +"156e5039": "safeadd(uint256,uint256)", +"156e9507": "mineTotalBalance()", +"156f985c": "getFundsStatus()", +"157003d9": "tierCaps(uint256)", +"157024b3": "producerStatement(string)", +"15728a73": "GoBlockSupply()", +"1574126a": "preSaleEndBlock()", +"15748250": "freeze(address,address)", +"15752ac5": "bonusTokensAllocated()", +"15764334": "Hybrid()", +"15770d99": "disapprove(address)", +"15781c80": "checkPurchaseValid(address,uint256,uint256)", +"15786590": "lotteryTotalEarning()", +"1578a123": "Send_MediatedTransaction(address,uint256)", +"1579e5c5": "getAllCardAddressesOfOwner(address)", +"157a18b4": "ADMOToken()", +"157a68df": "createIssue(uint256,address,uint256[],address[],string)", +"157ad5a1": "canWithdrawBond(address,uint256)", +"157b5167": "fun2()", +"157bbbf5": "winJackPot(address,string,uint256)", +"157cb62c": "getPlayerDnas(address)", +"157d5956": "isGetFreeZombiew(address)", +"157daf2e": "returnChange(uint256)", +"157db359": "airdroper()", +"157ddf8f": "bonusTotalSupply()", +"157e2063": "ASTBToken()", +"157f33f5": "coinIssuedTotal()", +"157f5610": "showGameEnd()", +"157f67e8": "withdraw_my_tokens()", +"157f8f51": "feePaid(int256,int256,int256,int256)", +"157fbd8d": "emitAccessBlocked(address,bytes32)", +"1580391c": "set(bool,string)", +"158048a0": "settlePut(uint256,uint256,address)", +"158059e2": "changeVotingRules(uint256,uint256)", +"1580beb7": "HOPEtoken()", +"158163c8": "setMerculetPrice(uint256)", +"15817881": "saleStageStartDates(uint256)", +"1581b600": "withdrawAddress()", +"15830662": "assignTokens(address[],uint256[])", +"15834aed": "tournamentQueue(uint256)", +"1583deb2": "businessAddress()", +"15843245": "PeoplesToken()", +"158495df": "tokenIds(uint8)", +"15862aff": "lookupIndex(uint256,uint256)", +"158641f5": "getArtistId(bytes32)", +"158686b5": "change_admin(address)", +"15875f54": "getVestingEndTime(address)", +"158859f7": "disableTokenTrade(address)", +"1588ce09": "closeManualyMining()", +"158952da": "tipUser(bytes32)", +"15899670": "todaysBidTotal()", +"158a1184": "operation_amount(uint256)", +"158a4988": "distributeTokens(address,uint256)", +"158b8e54": "LastTokenId()", +"158be5a2": "WTF()", +"158d1fd4": "crowdsaleEndedSuccessfully()", +"158dec25": "maxSubmissions()", +"158e7986": "addBallotAndVoterWithPk(bytes32,bytes32)", +"158e7e53": "maxPreIcoAmount()", +"158ee887": "emergencySetOwner(address)", +"158ef412": "forceUpdateName(string)", +"158ef93e": "initialized()", +"158f7f5c": "reservedFounder()", +"15902a09": "removeOpenOrderFromBook(uint128)", +"159090bd": "take()", +"15910e5c": "logPurchaseViaToken(address,address,uint256,uint256,bytes32)", +"15915ddd": "directMintTokens(address,uint256)", +"15917977": "changeUniqueOwnership(string,uint256,address,address)", +"15919eed": "Arena()", +"1591bf51": "getPubKeyArr50(bytes32,uint256,uint256[])", +"1591dc6a": "BuyLoan(address,uint256,uint256)", +"159218d2": "setStagesManager(address)", +"15927801": "distributePrize(bool)", +"1592aa2e": "registHns(string,address)", +"1592c087": "transferTusdProxyOwnership(address)", +"1593796e": "didReveal(bytes32,address)", +"1593a8c7": "endLottery()", +"1593ecb8": "LOG_IncreaseInvestment(uint256)", +"1594060a": "HalvingInfo()", +"15945790": "_supply()", +"15949ed7": "getPermissionParamsLength(address,address,bytes32)", +"1594afd1": "setExchangeRateShift(uint256)", +"1595f207": "TKT(address)", +"159621d2": "getProfesor()", +"15969c4e": "minimumStageDuration()", +"1596b2bf": "getServiceFeeNumerator()", +"1596facb": "saleTime()", +"15977d45": "ledger(bytes32)", +"1597ee44": "encode(uint8[])", +"15980795": "freezeOf(uint8,uint8)", +"15981650": "setTicketPrice(uint256)", +"15983796": "getNextSnapshotBlock()", +"1598653d": "firstThousandUsers()", +"159887d1": "calculateFactor(uint256,uint256)", +"1598b2e0": "getSeatClaim(uint256)", +"15992cda": "uniq(uint16[])", +"1599a096": "mixStringAddressFunc(string,address)", +"159a3c33": "AWAXToken()", +"159a6475": "getFingerprint(uint256)", +"159ad680": "updateuser()", +"159b4e91": "sendTempTokens(address,uint256,uint256)", +"159bd2f3": "earnedFunds()", +"159c18bc": "removeWhitelistOperator(address)", +"159c2d9f": "BuyKeys(uint256,uint256)", +"159c60e8": "ZDMCoin()", +"159ce057": "getReturn()", +"159d3c24": "sellZone(uint256,uint256)", +"159d526f": "calcStateHash(bytes32[10],uint256[4])", +"159d8562": "ediv(uint256,uint256)", +"159da82d": "getInvitationValidPeriod()", +"159dbef7": "_0xDiaryToken()", +"159de07a": "FundariaBonusFund()", +"159e1e14": "EthereumPrivate()", +"159f82fc": "getEventResult(uint64)", +"159fb416": "transferCreditBotAddress()", +"15a03930": "TossMyCoin()", +"15a090c0": "getMiningWarRoundNumber()", +"15a0df43": "testThrowCreateNewRevisionNotOwner()", +"15a0ea6a": "claimFees(address)", +"15a269f7": "withdrawBalance(address,address)", +"15a29035": "getTask(bytes32)", +"15a2bd76": "allowOrRestrictMethod(bytes4,bool)", +"15a38bda": "isOldVersion()", +"15a3c611": "project_registry(uint256)", +"15a4806c": "EtherButton()", +"15a4d313": "NovaChain()", +"15a50aff": "getInvalidKeys()", +"15a51595": "TeamMembersAddress()", +"15a52302": "getService(address)", +"15a529b6": "getAllSalesByAddress(address)", +"15a55347": "reservedTokens()", +"15a5d9d8": "contractAddr()", +"15a60b76": "_calFrozenAccountCoin(address)", +"15a653a0": "numberOfSupportedTokens()", +"15a686f3": "PixelOperationsContract()", +"15a6a11c": "mintLeftOverZCOToWallet()", +"15a6a38d": "RedeemMTU(bool)", +"15a6f5c1": "setLatestTokenPayday(address,address,address,uint256)", +"15a75f9f": "playFor(address,bytes32)", +"15a9a145": "numRewardsAvailable(address)", +"15aaa09b": "PRECOE()", +"15aaefd5": "_transferPrimordialToken(address,address,uint256)", +"15ab250d": "setCresus(address)", +"15ab8302": "RoundASold()", +"15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", +"15ac4c90": "setDayEthInLimit(uint256)", +"15ac534d": "closeBetting()", +"15aca0c4": "LogError(uint256)", +"15acce5e": "arpDeposited()", +"15ad1be3": "unrestrict(address)", +"15ae0629": "getHash(bytes,uint256)", +"15ae1972": "stageRate()", +"15aec1fb": "airdropadd()", +"15aec7ee": "BlockChainCourse()", +"15aee408": "FinaliseSale(address,address,uint256)", +"15af64e7": "JACToken()", +"15afa98e": "totalEth_()", +"15b02a4c": "totalICOable()", +"15b03fde": "getaddresstotal(uint256)", +"15b07f69": "nextCourse()", +"15b0821f": "mintDRSCoin(address,uint256)", +"15b21082": "requestCustodianChange(address)", +"15b23e47": "OncoToken()", +"15b2b1ae": "SaleStatus(string,uint256)", +"15b3433b": "dexjartoken()", +"15b37899": "setKyberNetworkAddress(address)", +"15b40ec0": "deployed(uint256)", +"15b4bc22": "getMinerHalving()", +"15b53beb": "TournamentOver()", +"15b556df": "getSellPriceAfterTax()", +"15b56b44": "checkReward(uint256[])", +"15b66fef": "calculateClaimableRewardTillRound(address,address,uint64)", +"15b73a1d": "ICOSupply()", +"15b7ab02": "setAgriChainProduction(address)", +"15b8003b": "buyChance(uint32,uint32,bytes32,uint256)", +"15b88b35": "PeaceToken(uint256,string,string)", +"15b9a8b8": "controllerCount()", +"15ba9ea2": "register(address,bytes32[5],address)", +"15bbc15d": "approveMP(address,int256,uint8)", +"15bc9441": "convertToDEF(uint256)", +"15bd73f1": "offerchangeprice(uint256,uint256)", +"15bd8bb2": "getTimestampByHash(string)", +"15bddfbe": "__setParameters(uint32,uint256,address)", +"15be2e7c": "totalSaleLimit()", +"15bef9cd": "changeMembers(address[],bool)", +"15bf2b51": "last10()", +"15bf430d": "Project()", +"15bf7cd7": "deployedPresaleContract()", +"15bf7ed2": "publicFundingPersonalEthLimit()", +"15c0251c": "getCoinWallet(bytes4)", +"15c12d4d": "totalWeiWon()", +"15c1c5b8": "EternaCoinContract()", +"15c2eed8": "RedlineFinancialLabCoin()", +"15c30006": "_payoutReferr(address,address)", +"15c32297": "setCanTrade(address,bool)", +"15c3cd94": "canTransferUST(bool,bool)", +"15c43aaf": "contractInfo()", +"15c4dc29": "MOSToken()", +"15c560c7": "addTotalInvoiced(address,uint256,uint256)", +"15c5c950": "isProcessedTx(bytes32)", +"15c6b117": "CRPA()", +"15c6b40a": "cloneFeePercentage()", +"15c73afd": "resolveEmergency()", +"15c7ff34": "isPaidUntil(address)", +"15c8276d": "_supportsInterface(bytes4)", +"15c83cac": "getNewItemId(address,bytes32)", +"15c8d628": "normalBuyLimit()", +"15c91115": "pbkdf2(bytes,bytes,uint256)", +"15c98193": "getCampaignCreator()", +"15ca41c3": "notarizeHash(uint256,bytes32)", +"15ca65f0": "purchase(uint256,uint256,uint256,address,bytes)", +"15cab9c0": "pre_active_time()", +"15cb75e3": "replaceChiphash(uint256,bytes32)", +"15cbfdc1": "SpendingBlockedEvent(address)", +"15cce224": "setFeeToken(address)", +"15cd8e0b": "SECOND_PHASE_MAX_SPAN()", +"15ce09ad": "winningTimestamp()", +"15cec355": "_escrow(address,uint40)", +"15cedef7": "TFCPTest(uint256,string,string)", +"15cf4a5f": "createElection(string)", +"15cf59b6": "getCreatefeeWindowIdValue()", +"15cf7a35": "fechVoteResultForCandidateBySnapshotBlock(address,uint256)", +"15cff546": "isOperationBlocked()", +"15d10f38": "decreaseICOcap(uint256)", +"15d28e11": "totalLendingAmount()", +"15d2fc8a": "setPreIcoEndsAt(uint256)", +"15d3b5d8": "getTotalAllocation()", +"15d3cfe2": "EtherCashPay()", +"15d3e0a3": "transferToSafe()", +"15d3f614": "Bet4Land()", +"15d42327": "testMulMod(uint256,uint256,uint256,uint256)", +"15d44202": "resultsValidationStep()", +"15d494c4": "test_chain2_1_increaseTimeBy5000()", +"15d4c5d5": "proposeMint(address,uint256)", +"15d4f2df": "_internalTransfer(address,address,uint256,uint256)", +"15d51761": "partner2_will()", +"15d5219f": "calLoanAmount()", +"15d53d7d": "_existPublicKey(address)", +"15d655c9": "claimPrice()", +"15d6af8f": "winnerList()", +"15d707af": "KD0Token()", +"15d7085f": "calcRankFundsFee(uint256)", +"15d7811e": "findYforX(uint256)", +"15d7b2c4": "setVestingManager(address)", +"15d7bf44": "register(bytes32,bytes32,address)", +"15d85401": "QbaseTalk()", +"15d87dc4": "vendorVerify(address)", +"15d887a7": "confirmedTotalToken(bytes32,uint256)", +"15d99a77": "CleanSweap()", +"15d9a9ee": "registerBarcode(bytes32,bytes32,string,bytes32,string,bytes32,bytes32)", +"15d9ad50": "illiquidBalance()", +"15d9aefd": "TeaToken()", +"15da0b02": "setCommunity(address)", +"15da42dc": "airdropSEEDSinWei(address[],uint256)", +"15da63a0": "thirdStagePriceOfTokenInWei()", +"15da65a5": "currentQuestionId()", +"15dacbea": "transferFrom(address,address,address,uint256)", +"15dae03e": "getType()", +"15dbfe28": "fromReal(int128)", +"15dc806e": "getStageBonus()", +"15ddf344": "getWhitelistStatus(address,bytes32,uint256,address)", +"15de4607": "getOwnFashions(address)", +"15de8027": "getAquaTokenAudCentsPrice()", +"15deaa3f": "INTARO()", +"15df1a09": "_fromToken(uint256,uint256,uint256)", +"15dfaccd": "delAdministrator(address)", +"15dff3b3": "RoleLookup()", +"15e04206": "Strings(string,string,uint8,uint256)", +"15e1146b": "deadlinePreIcoTwo()", +"15e1c65c": "added_to_the_bank()", +"15e28700": "addTokenPairWhitelist(address,address)", +"15e3187d": "amIBeneficiary(address)", +"15e33901": "digest(bytes,uint256)", +"15e3ab3a": "nccToken()", +"15e3d37d": "getAllCardsForClaim()", +"15e5ae1e": "Killer()", +"15e5c69e": "_purchase(address,uint256)", +"15e70102": "myTarif()", +"15e812ad": "getBaseFee()", +"15e82e87": "Free_vote_for_candidate_B()", +"15e839c1": "setHeroGenes(uint256,uint256)", +"15e89927": "JAR(uint256,string,uint8,string)", +"15e9c2d4": "PainPoints()", +"15e9fc28": "setBets(uint256,bytes32[])", +"15ea426d": "hasUserWon(uint8,uint256,bytes32,bytes32)", +"15eaef6b": "tokenTransfer(address,address,uint256)", +"15eaf224": "getlastJadeProductionUpdate(address)", +"15ed6d06": "totalBondSupply()", +"15ed97c5": "_preValidateAssign(address,uint256)", +"15ee1255": "overrideCharPrice(uint256,uint256)", +"15ee3726": "createMesa(uint256,address)", +"15eec1b6": "setPayerString(string,string)", +"15ef29c3": "configureTokenParams(string,string,uint256)", +"15efc893": "confirmAdminTx()", +"15eff89b": "DiamondToken(string,string,uint8,uint256)", +"15f063f7": "totalStores()", +"15f06ede": "placeBuyOrders(uint256[],uint256[])", +"15f0c220": "marketingAllocation()", +"15f17902": "updateCeleb(uint256,string,uint256[6],uint256[6])", +"15f2226e": "removeAccessor(address,address,address,string,uint32,string,string,bytes32,bytes32,uint8)", +"15f24053": "getBorrowRate(uint256,uint256,uint256)", +"15f28c5f": "walletB()", +"15f2e1bf": "getFunderCount(bytes32,string)", +"15f2e2f7": "LOCK_START_TIME()", +"15f2eb87": "getNumEndableGames()", +"15f2fe4f": "setDelegadoDeDistrito(bytes32,bytes32,uint8)", +"15f3161f": "issue(address,uint256,uint32,uint32)", +"15f3223c": "assertHash(bytes32,bytes32)", +"15f570dc": "burn(address,uint256,string)", +"15f59033": "setPropertyLastUpdaterLastUpdate(uint16,address,uint256)", +"15f5ea17": "stop_auction()", +"15f647fc": "setLoanProductActiveState(uint32,bool)", +"15f667ca": "phase2TokenSold()", +"15f73331": "invalidateName(string)", +"15f78c0c": "GetBank()", +"15f84d25": "isActiveContributor(address)", +"15f903a3": "setNameValue(uint256)", +"15f92e3b": "getBeat(uint256)", +"15fa168a": "setVerificationRate(uint64)", +"15fb1a65": "slashPower(address,uint256,bytes32)", +"15fb2185": "adminSetAdmin(address)", +"15fbba7a": "delPokemonFromMaster(address,uint256)", +"15fdf660": "mPerSellData()", +"15fe3b6c": "testTransferAfterFinalize()", +"15ff8f3c": "RESERVE_PORTION()", +"16002f4a": "totalAuctions()", +"16011bf1": "addReader(string,address)", +"1602a124": "allowMinting()", +"1602c424": "purchaseRect(uint256,uint256,uint256,uint256,uint256[])", +"160344e2": "startLottery()", +"16035ba0": "getTotalVolumeEth()", +"16038be8": "mintVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool,address)", +"1603c521": "opensourceFundManager()", +"1604901b": "getGameByID(uint32)", +"1604a127": "calculateBetOutcome(uint256,bool,uint256)", +"1604c449": "numTilesClaimed()", +"1604f9ea": "requestPrice()", +"1604fa4d": "checkIfProjectExists(bytes32)", +"1605750d": "addToWhiteList(address,address)", +"1605782b": "sha1(bytes)", +"16059170": "onSubCanceled(uint256,address)", +"1605a889": "DecenterHackathon()", +"1605bc07": "SVDelegationV0101(address)", +"1605dd61": "getAddressBySymbol(string)", +"1606a1c9": "getAuditReportIPFS(address,bytes32)", +"1607dd9d": "distributeSpecial(address,uint256)", +"160849a7": "participateICONow(address,uint256)", +"1608e93f": "dice(uint256,uint16)", +"1608f18f": "disableTransfers(bool)", +"16090250": "getPolicyDetails(bytes4,address)", +"1609a397": "unhaltsTrades()", +"1609b182": "ReputationToken()", +"1609bbbf": "BarimCoin()", +"1609bdf2": "EEMWallet()", +"1609be1d": "sweepTokens(address,address)", +"1609e43b": "levelStartupTimestamp()", +"160a453e": "queryTokens()", +"160a7925": "getPermissions(address)", +"160abc9d": "tier1Rate()", +"160b01a1": "childTokenByIndex(uint256,address,uint256)", +"160b313d": "addAssociatedAddress(uint256,address,address)", +"160c5239": "read_total_global_purchased_today()", +"160d5240": "_toNanoNIL(uint256)", +"160d66ae": "voteToken()", +"160dc0ac": "buyItem(uint256,address,string,string,string)", +"160e3f3d": "grant(uint256)", +"160e915f": "canAcceptPayment()", +"160f202f": "send_ETH_from_contract_to_me()", +"160fc374": "cancelOrder(address[3],uint256[3],uint8,bytes32,bytes32)", +"160fe0e2": "getWtotalEth(uint8)", +"1610b59b": "infoFields(bytes32)", +"1610c734": "bonusLimit5()", +"16114acd": "recoverTokens(address)", +"161181ea": "getUserLengthOnToken(address)", +"1612ec4f": "applyToken(address)", +"1613520f": "priceTLP1()", +"1613ec9d": "getInitFunction()", +"161448df": "BossContract()", +"16145311": "ISAO()", +"161593a3": "landmarkToApproved(uint256)", +"1615d035": "airdropWallet5Pct()", +"1615e11d": "DARK()", +"16163c89": "encodeBool(bool)", +"16164467": "findRequiredSubscriberIndex(address)", +"16164b33": "icoTarget()", +"16164e15": "setInvestorData(address,uint256,uint256,uint256)", +"161666eb": "calculateAddress(uint8)", +"1616f54a": "FOURTH_TIER_SALE_START_TIME()", +"16173f39": "sin(int256)", +"1617adf7": "periodITO_softCapInUSD()", +"16180e8e": "reallocation(uint256)", +"16181a48": "insert(address,string)", +"16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", +"16188c79": "isBadToken(address)", +"161895eb": "startBuy()", +"16192d2a": "accountInformation(address)", +"161965d9": "getRN()", +"1619fc14": "initOraclize()", +"161b5e46": "transferOwner(address,address,uint256)", +"161b75b2": "returnRemainingTokens()", +"161b9f5e": "ControllerManager()", +"161c389a": "NewImage(uint256)", +"161c8594": "setKpopArenaContractAddress(address,address)", +"161d2a59": "approveCertificate(bytes32,bytes32,bytes32,bool)", +"161dc300": "mintForSampleRegitry(address,uint32)", +"161fc5b3": "StartNewMiner(address)", +"161ff662": "proxyTransferFromWithReference(address,address,uint256,bytes32,string,address)", +"16201c24": "updateLastActive(address)", +"16205a7c": "RateDelivered(uint256,uint256,uint256)", +"162094c4": "setTokenURI(uint256,string)", +"16210e25": "verificationHoldersVerifierAddressMap(address)", +"16212265": "closeAirdrop()", +"16216f39": "return13()", +"16220188": "AddToWhiteList(address)", +"16222950": "golemFactory()", +"162255e1": "m_frozen()", +"1622dbe4": "buy(address,uint256,uint256,uint256)", +"16233f3f": "withdrawMortgageTokens(address)", +"1624288d": "balanceOfTokens()", +"16243356": "end_time()", +"16244907": "changeAnimal(uint256,uint256,bytes32,uint8)", +"1624f6c6": "initialize(string,string,uint8)", +"16260713": "isFrozenByAddress(address)", +"1626315c": "purchaseNew(uint256,string,string,uint256)", +"16265694": "validRateDurationInBlocks()", +"16265b4e": "isDatasetRegistred(address)", +"16266fbc": "returnPays()", +"1626ba7e": "isValidSignature(bytes32,bytes)", +"1626fe64": "checkApprovalStatus()", +"16270f7d": "ownerIndexBit(address)", +"1627540c": "nominateNewOwner(address)", +"16277952": "userLoveLocks(address)", +"16279055": "isContract(address)", +"1627c3c1": "divForTeamEthContract()", +"1627d3f2": "createToken(string,string,address,address,uint8)", +"16281405": "buyXaddr(address,uint256,bytes32)", +"162856f5": "_emitOracleRemoved(bytes4,address)", +"162897c0": "sendUnsoldTokenToRewardSupply()", +"16291032": "setQualifiedPartner(address,uint256,uint256)", +"162927b6": "approve(uint256,address,uint256,uint256,address)", +"162a8e5f": "distributeTokensAfterIcoByOwner()", +"162bb373": "disableERC721()", +"162bc80c": "WithdrawTokens(uint256)", +"162bf1ee": "getBurnRequestAddressMap(uint256,string)", +"162cbefe": "AVAILABLE_AIRDROP_SUPPLY()", +"162d563d": "withdrawGNO()", +"162d7daf": "buyQST()", +"162dd6da": "takeEtherProfits()", +"162e2f6c": "reservationFromEthereum(address,uint256,uint256)", +"162e4fd0": "getFinalOutcomeByEntity(uint256)", +"16317946": "notifyTestimonial(address)", +"16317e7e": "setLiquidationThresholdPercent(uint256)", +"1631eb07": "unlockReward(address,uint256)", +"1632070c": "setRewardDivisor(uint256)", +"1632612a": "TrustEURO()", +"16328378": "precrowdsale(address)", +"16330c55": "setRafEnd(uint256)", +"163317c6": "fundAdvisor()", +"16339604": "_FIVETHOUSAND()", +"1634ab52": "transferCrt(address)", +"1635717c": "getInstruments()", +"1635e13c": "initBuilding(uint256,uint256,uint256,uint256,uint256,uint256)", +"16367c63": "earlyParticipantWhitelist()", +"163687ab": "defaultOperatorsByTranche(bytes32)", +"1636ed74": "gatewayOpened()", +"163740d1": "HieToken()", +"16381382": "getBetUint(int8,int8)", +"1638e70d": "DIETSweets()", +"1638f628": "calculatePayout(uint256,int256)", +"163935a8": "BlokTokenSale(address,uint256)", +"163aa00d": "lastRewardEthBlockNumber()", +"163aa631": "isIssued(bytes32)", +"163aba3c": "getQueryFee()", +"163c0351": "reserveTeam(uint256)", +"163c17b1": "goldFreeze(address,uint256,uint256)", +"163c4e3c": "CryptoGripInitiative(uint256,uint256,uint256,address)", +"163db71b": "totalDistributions()", +"163dba92": "setBlocks(uint256)", +"163ebd3a": "MainExchangeNM()", +"163eec78": "_addFundkeeper(address)", +"163ef5cb": "tgrSettingsPartProject()", +"163f6691": "getAttribute(address,bytes32)", +"163f7522": "isUserRegistered(address)", +"163f9b4f": "withdrawalOwner()", +"163fa64a": "setSkillPointCost(uint256)", +"163fa8af": "addInvestmentPackage(string,uint256)", +"164116f8": "_getPrice(uint256)", +"16413515": "tokenIdToData(uint256)", +"16419aa7": "slice16(bytes,uint256)", +"1641bced": "jackPotGameLockedToken(address,uint256)", +"1642fcca": "SZ(uint256,string,string,uint8)", +"16431c5b": "CreateANM(address,uint256)", +"16443801": "Zigilua()", +"16448c99": "allocateTokens(address,address,uint256)", +"1644b20b": "Bhinnekamint(address,uint256,uint256)", +"1644ed01": "isVolumeReached()", +"16450092": "totalCap()", +"16458d74": "show_Candidate_Victorious_in_Election()", +"1645f0cb": "_mintIdentityToken(address,address)", +"16468fe2": "mintEndYear()", +"164745c5": "presaleendTime()", +"1648371d": "bboBalance()", +"1648be60": "lockSupplierAndLockPosition(address,address)", +"1648f38e": "createExchange(address)", +"16495308": "setReceiver3()", +"16496a15": "onceAddTime()", +"1649b76d": "maxDexSize()", +"1649cdcd": "testGetItemStore()", +"1649d72b": "proposeNewNotary(address)", +"164a009e": "WHITELISTING_DURATION()", +"164ba24b": "Payments()", +"164c9bf0": "Trust()", +"164ce703": "useless(uint256)", +"164ceb70": "getTradeByReferenceCode(bytes32)", +"164d3f3a": "Redeem(string,string,address)", +"164e68de": "withdrawFees(address)", +"164f81c3": "confirmAddress(address)", +"164fa4ef": "withdraw_token(uint256)", +"1650533f": "distroyIssuerToken(uint256)", +"16511a67": "removeHodler(address)", +"16512624": "setAgonValues(uint256[5])", +"16514052": "setPropertyDAppContract(address,bool)", +"1651f29a": "redeemForAllFeeWindows()", +"16521a2b": "getGameJackpot(uint256)", +"1652a9d3": "StartPeriod(uint256,uint256,uint256)", +"1652b365": "Xenith()", +"1652e7b7": "getAssetData(address)", +"1653441c": "donate(string,string)", +"16534bfc": "SKRToken()", +"16537a85": "makeschoolToken()", +"1654474b": "submitSellOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", +"16552393": "creatorAddr()", +"1655a451": "PotPayout()", +"1656df0a": "_5_avto(uint256)", +"1658d496": "TamasCoin()", +"16597742": "announceWinner(uint8)", +"1659aecc": "timeoutYEnabled()", +"165a0e03": "channelsLimit()", +"165b22c1": "claimNxc()", +"165b2644": "getDepositN(address,address,uint256)", +"165b9ad0": "MOMO_FOUNDATION_WALLET()", +"165c4a16": "multiply(uint256,uint256)", +"165c86df": "rewardsWithdrawalRecipient()", +"165ca484": "USDDigital()", +"165cfea3": "TheImmortals()", +"165d35e1": "getChainlinkToken()", +"165db404": "AdvisorsAndPartnersMinted(address,address,uint256,uint256)", +"165e2eea": "setFund(address,string)", +"165f7d38": "buyIntoSyndicate()", +"165ffd10": "restart(bytes32,bytes32)", +"16603758": "setUserCategory(address,uint256)", +"16618e61": "ICOweek3End()", +"16628014": "setBitcoinRate(uint256)", +"1662da6a": "setWhitelisterAddress(address)", +"1663f4ee": "SplitEqual(uint256)", +"166428c0": "PoolSubmitted(address,uint256)", +"16643430": "setRateEarlyStage4(uint256)", +"1664b9cf": "create(uint8,uint8,uint64,uint64,uint64)", +"16654268": "getName(address,address)", +"1665e6b3": "approveOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,bool)", +"1666b514": "RipeXToken()", +"16670bcd": "resolveDispute(uint256,uint256,uint256,uint256)", +"16671990": "minCapMain()", +"166728cb": "feesend()", +"1667504e": "updateTitleTransfer(string,string,string)", +"1667590d": "GenesisRewardPerBlock(address,address)", +"1667d763": "changeRegulatorStatus(uint8)", +"16685890": "huntingPrice()", +"1668603f": "PFXTestCoin()", +"16687369": "chargeProtocolFee(address,address,uint256)", +"16691869": "addClient(address,address)", +"16694dd9": "isReportingActive()", +"166a3952": "createVoter(address)", +"166bf1b0": "createC1(uint256)", +"166c4b85": "len(bytes32)", +"166d3bbf": "payOutJob(address,bytes32)", +"166d561a": "FatPeople()", +"166d91fd": "FOUNDATION_RESERVE()", +"166dc43e": "setManagementProxy(uint32,int256,address)", +"166e55d9": "computeStablecoinFee(uint256,address)", +"166eb4cb": "Put(bytes32,uint256)", +"166ee1de": "newIdentityL1(address,bytes32,bytes32,bytes32,bytes32,uint256)", +"16706514": "MyDice75()", +"16708bc6": "metadataSize()", +"1670cb6f": "oracleA()", +"1671055d": "etherollBeneficiaryAmount()", +"16713b37": "receivedTotal()", +"1671719d": "MINIMUM_LOCK_AMOUNT()", +"16730131": "addHpbNodeWithString(address,string,string)", +"16735925": "setAllowErc20OwnerClaim(bool)", +"1673f758": "FundTransfer(address,uint256,bool,uint256)", +"1674bade": "setMinDuration(uint256)", +"16754c55": "createArea()", +"1675f455": "tokenUri(uint256)", +"1676503e": "updateParameters(address,uint256,uint256,uint256,uint256,uint256)", +"16772492": "HngCoinSale(uint256,string,string)", +"16772b6a": "SentPrizeToWinner(address,uint256,uint256,uint256,uint256,uint256)", +"1677496d": "withdrawART(uint256)", +"16783ba7": "assertEq18(bytes18,bytes18,bytes32)", +"16786ae2": "createMineral(bytes32,uint256)", +"1679657a": "isTrustedBy(uint256,address)", +"167aee44": "rewardPoolShare(uint256,bool)", +"167d219e": "ROLEX()", +"167d3e9c": "SetOwner(address)", +"167dde94": "affirmationWithinLimits(uint256)", +"167ddf6e": "getArtwork(uint256)", +"167e7921": "setTotumAllocation(address)", +"167f66c0": "startOfDay(uint256)", +"167ff46f": "openSale()", +"16801d17": "getBattle(string)", +"1680a070": "setPlotDataMultiple(uint256[],string,string,string,string)", +"1680f70d": "transferlottery(address,uint256,bytes)", +"168110f3": "Tokens_For_Sale()", +"16812d5b": "retreiveFinalResult()", +"16815137": "Poge(uint256,string,string)", +"168179e2": "ESCBCoin(address)", +"16821349": "ETH_RECEIVED_MIN()", +"16829de5": "changeEthPrice(uint256)", +"1682fa59": "GetMaximumBet_Ether()", +"16831877": "BMICOAffiliateProgramm()", +"16842582": "createLottery(string)", +"1684844b": "registerNameXaddr(string,bool)", +"1684c715": "TaskCompletedEvent(uint256)", +"168656e1": "OwnerWithdrewERC20Token(address,uint256)", +"16868752": "buyTicketWithRef(address)", +"16870257": "getTileDescription(uint8,uint8)", +"16876976": "addrTeam()", +"16878b07": "activeVerifiers()", +"16879344": "commitPeriodActive(bytes32)", +"1687f112": "left54(uint256)", +"168936a0": "Remain()", +"1689eb38": "batchSendTokens(address[],uint256[])", +"168a80d3": "deleteAllTopics()", +"168b3c69": "CertificationDeleted(string,address,uint256)", +"168b4a53": "changeColorBlack()", +"168b6231": "getCoinIds()", +"168b912d": "numOfDeclaredPublicOfferingPlans()", +"168bb279": "insertAllowedTokenInternal(address)", +"168c8120": "COMMISSION_DIV()", +"168cd7ae": "tokenQuota()", +"168d71e5": "mediaTokensSymbol(address)", +"168e41e8": "getHash(bytes32,uint256)", +"168ecec5": "revokeOperatorByPartition(bytes32,address)", +"168f3260": "calculateMinPriceForNextRound(uint256,uint256)", +"168f788e": "reRollMove(uint256,uint256,uint256)", +"168fb79d": "RANGESTART_7()", +"16907c12": "updatePlanetLiason(uint256,uint256,uint256,string)", +"1691473c": "getProducts(address)", +"16915743": "proofLink()", +"1691d6cb": "checkIfFrozen(address,address)", +"16922822": "getWarriorOwners(uint32[])", +"16925ee2": "changeTradingEnabled(bool)", +"1692823d": "getViewDatasCount()", +"16928a44": "updateProjectDescription(string,bytes32)", +"16937d56": "addressMoneyBalance()", +"1693b85d": "allowDelegate()", +"16948e9b": "changeSettings(uint256,uint256,uint256,uint256,uint256)", +"169509b6": "getOraclizedIndices()", +"1695533d": "signLease(string,string)", +"16958c79": "registerBid(int256,int256,int256)", +"1695d97c": "removeRange(uint256)", +"16962849": "changeBalanceReplenishmentStorage(address)", +"16962bc1": "setAllocationClosed(uint256)", +"16962d7f": "_createKittyToken(address,uint256,uint32)", +"16963872": "tokenPriceInitial()", +"16967407": "getAdministrator()", +"1697283a": "getRequesterLock()", +"169742f6": "ebyteBalance()", +"16985349": "standardGrowthRate()", +"1698755f": "claimToken(address,uint256)", +"1698933d": "myStrongHand()", +"1698c7ff": "removeOrc(address)", +"16992af5": "answerCompare(bytes32,bytes32)", +"16993811": "ptxHead()", +"16996713": "WXGToken()", +"169a7c3a": "eventWebsite()", +"169b15fa": "TechZU()", +"169b7012": "userToAccounts(address,uint256)", +"169b9890": "signByGroom()", +"169bd52d": "MyTestToken(uint256,string,uint8,string)", +"169bf233": "reportDoubleSpend(bytes32[],bytes32[])", +"169c13ed": "pendingTransaction(address)", +"169c4733": "feeForOrder(uint256,uint256)", +"169d16f4": "authorizerTwo()", +"169dc72c": "MBEToken(address,address,address)", +"169e18d9": "currentHitTotal()", +"169e2633": "tokenOwnerAdd(address)", +"169ea2f8": "dropCoins(address[],uint256)", +"169f66df": "monetarySupervisor()", +"169fab66": "TIXToken(address)", +"169ff375": "RANGEEND_2()", +"16a0390b": "BountyAmount()", +"16a0ea3c": "totalLockedSupply()", +"16a11ae5": "testFailPullWithoutTrust()", +"16a124e8": "setKeys(uint32,int256,bytes32,bytes32,uint32)", +"16a25cbd": "ttl(bytes32)", +"16a27019": "allowedAddr()", +"16a2a0cc": "setBountyFactory(address)", +"16a398f7": "effectiveBalance(address)", +"16a3feca": "_canOperate(address)", +"16a50228": "minLimitPublicFirstSale()", +"16a5290c": "purchaseWeapons(uint256,uint256,uint256,uint256)", +"16a54085": "setSideBetPercentage(uint256)", +"16a5410c": "Joined(address,uint256,uint256)", +"16a558d0": "_generateRandomhashNumber(uint256)", +"16a69a9a": "getDiscountStage()", +"16a7859b": "listService(uint32,string,uint256,uint256,address,address)", +"16a8e046": "setLuckThreshold(uint256)", +"16a92f39": "getDocByIndex(string,uint256)", +"16aa8508": "_leftSupply()", +"16aab1bf": "fundingEndTimestamp()", +"16aabcbd": "onlyAdvisorsCanDoThis()", +"16ab2b03": "getBid(address,uint256)", +"16ab4b17": "checkPoolsEnd()", +"16abdf7d": "setB(uint8)", +"16ad42ad": "holderList(uint256)", +"16ada547": "time()", +"16ae10f5": "USD_SOFT_CAP()", +"16ae4ec4": "FT_OPERATIONAL_FUND()", +"16ae5607": "KakToken(address,uint256)", +"16ae7944": "UpdateRateAgent(address,address)", +"16aee925": "saleDuringRestrictedPeriod()", +"16af001c": "calcBonusAt(uint256)", +"16af87a9": "getSavedReferral(address)", +"16afdf8e": "release(address,address,uint256,uint256)", +"16afe218": "setarg_1(uint256)", +"16b07323": "winsReported()", +"16b08755": "minorEditsAddr()", +"16b0c11e": "upgradePrefixPreSignedSecond(uint8,bytes)", +"16b0cc2d": "Extend(uint256,uint256)", +"16b0dc06": "getCitizenLevel(address,address)", +"16b0fc55": "removeAdmin(address,string)", +"16b14e19": "SingularityTest34()", +"16b15135": "getEscrowCount()", +"16b1f6b3": "CROWDSALE_PHASE_1_START()", +"16b208eb": "_clearApprovalAndTransfer(address,address,uint256)", +"16b21dfb": "getLockAccount(address)", +"16b2cd34": "airdroptotal()", +"16b3299d": "printListOfBooks()", +"16b33e74": "shuffleNDecks(uint256)", +"16b3d4ae": "_approved(address,uint256)", +"16b40451": "changeRandao(address)", +"16b4e79c": "setCampaignPriceById(bytes32,uint256)", +"16b57509": "killBounty(uint256)", +"16b60f2c": "mintMAYToken(address,uint256)", +"16b64898": "GEN0_TOTAL_COUNT()", +"16b65fac": "BITXOXO()", +"16b66016": "tier1Timestamp()", +"16b6824c": "CryptoWarriorCore()", +"16b6c75b": "changePeriods(uint256,uint256,uint256,uint256,uint256)", +"16b6c7bd": "withdrawUnallocatedRestrictedToken(uint256,bytes32)", +"16b78191": "decrementValue()", +"16b7d8f2": "VIP_MINIMUM()", +"16b86ed8": "amountOfMeatInUnicorn()", +"16b87739": "setCrowdsaleActive(bool)", +"16b8aa6b": "secondStageDatetime()", +"16b96f05": "addTotalDividendPoints(uint256)", +"16ba7197": "WITHDRAW()", +"16baa937": "AddMinter(address)", +"16bac350": "overthrow(string)", +"16bac7e5": "lockBet()", +"16bb1f6a": "isOriginalRoundContributor()", +"16bb6c13": "setBaseToken(address)", +"16bdb7b6": "stage3_price()", +"16bf3537": "SocialMediaIncomeCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"16bf4657": "getNumPayments()", +"16bfe25c": "emergencyRefund()", +"16c05aa2": "depositMoney()", +"16c0acde": "CryptoStars()", +"16c12746": "getAllOwners()", +"16c19739": "getPosition(address)", +"16c1df06": "WorkerPool(address,string,uint256,uint256,uint256,address)", +"16c24739": "uintInArray(uint256,int256,uint256[],uint256)", +"16c27c4a": "UNITSimplePaymentGateway(address)", +"16c3002e": "allowanceForContract(address)", +"16c38b3c": "setPaused(bool)", +"16c393a6": "oraclizeBytes()", +"16c45c7a": "areStringsEqual(bytes32,bytes32)", +"16c4fcbb": "gotransfer(uint256)", +"16c519ee": "hasRecentPrices(address[])", +"16c5792d": "transferCurator(address)", +"16c6ec92": "ChangeTarget(bytes32,address)", +"16c6f470": "addNewRaz(uint256,uint256,uint256,uint256)", +"16c72721": "forked()", +"16c72861": "nextFrontWindowAdjustmentRatio()", +"16c7f79f": "testTransferTokenAllowanceAndReturnFunds()", +"16c85710": "buyMasternode()", +"16c9b08d": "WenWanCoin()", +"16ca3b63": "increaseApproval(address,uint256,bytes)", +"16cac8c7": "Why(string)", +"16cb9100": "ETHER_MIN_CONTRIB()", +"16cb9a01": "assertFalse(bool,bytes)", +"16cba9d3": "checkEtherBalance()", +"16cbf987": "changeMemberGroup(uint256,string)", +"16cc7699": "getHistoryRecord(uint256)", +"16cc9022": "_newWallet(address)", +"16cd84c1": "AltCrowdsalePhaseOne(address,address,address,address)", +"16cdf170": "CoinTransfer(address,address,uint256)", +"16ce8a69": "setBuilding(uint256,uint256)", +"16ce8c98": "changeBiteCost(uint256)", +"16ceaa95": "getStageCount()", +"16cf1651": "setArbiters(address,address[])", +"16cf8f77": "createDroid(uint256)", +"16cff09c": "ETHER_MAX_CONTRIB_PRIVATE()", +"16cff511": "setFunctionFivePrice(uint256)", +"16d05042": "finalLoser()", +"16d061a5": "gettime()", +"16d0ba10": "putOwner(bytes32,uint256,address,bool,string)", +"16d190e3": "maxWin()", +"16d2bc5c": "getPlayerRoundInfoByID(uint256,uint256)", +"16d390bf": "addOwner(address,address)", +"16d3aa92": "removeTransferRate(address[])", +"16d41a5a": "setNFTContractInfo(string,string,string)", +"16d45615": "test_0_ensureDefaultRulesSetToFalse()", +"16d4c77c": "removeBlockeddUser(address)", +"16d4db19": "teamCompanyLock()", +"16d544f1": "resetActive()", +"16d63f17": "simFirstObligation(bytes)", +"16d64127": "_setReserveHolders()", +"16d6be4c": "buyOfferedStakes(address,address)", +"16d873cf": "TransferOddEther(address,uint256)", +"16d8b5a2": "ferromContract(uint256,string)", +"16d8f16c": "updateTentativeWinningPayoutDistributionHash(bytes32)", +"16d9356f": "oraclize_query(string,string[4])", +"16d93f3d": "getAddressAnswerKeccak256(uint256)", +"16d960b5": "createThing(bytes32[],bytes32[],uint88)", +"16d99cb0": "NewContribution(address,uint256,uint256)", +"16da1d50": "transferdissolvedFrom(address,address,uint256)", +"16da7d91": "reorganize(uint256,address)", +"16dabbf6": "getWalletSetting()", +"16db5172": "getStaker(bytes32,address)", +"16dc9704": "numberOfVestedContracts()", +"16dd68b1": "getFirstAuctionsEndDate()", +"16ddcef5": "WillCoin()", +"16de035a": "EtherBB()", +"16dfae3c": "setGenaroDevMultisig(address)", +"16e02e2a": "inventoryLocked()", +"16e10d6a": "ICOInvestorsAmount()", +"16e1286d": "BEXToken()", +"16e17852": "TAO()", +"16e1aed4": "setPartitionControllers(bytes32,address[])", +"16e242ca": "burnTotalSupply(uint256)", +"16e27349": "getFeeRecipient(int256,int256)", +"16e32d82": "_burnPlayerTokensFrom(address,uint256)", +"16e33aa2": "getData_27()", +"16e3cad0": "HAYATO_MAX_CARGO()", +"16e3cfc7": "testStoresUser()", +"16e457f0": "sellAll()", +"16e4822b": "calculateEarning(address,bytes32,uint256,uint256,uint256,uint256,address,address,bool)", +"16e4f677": "UpdateICOAddress(address)", +"16e55626": "getDogName(address)", +"16e58a1b": "detach(uint32,uint32)", +"16e7371f": "LiquidDemocracyController(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"16e74f09": "getWinner(uint256[])", +"16e7c80d": "getTierStartAndEndDates(address,bytes32,uint256)", +"16e807c4": "addBid(address,uint256,uint256)", +"16e82dcf": "MMaker()", +"16e85b2e": "scapeHatch()", +"16e8f2c4": "Rectangle(address,address)", +"16e93702": "addTeam(bytes32,bytes32,address,bytes32)", +"16e9fe81": "resetValue()", +"16ea0728": "totalBuriedValue()", +"16eb6603": "right50(uint256)", +"16ebd6d5": "devResWithdrawal()", +"16ebf77d": "revealConsensus(address,bytes32)", +"16ecc686": "setup(address,address,uint256,uint256)", +"16ece9db": "GetContributionInfo(uint16,uint16)", +"16ed2ae4": "ONE_TOKENS()", +"16ed36fb": "EscapeHatch()", +"16ee94bf": "giveArraywords(string)", +"16eea70f": "RaffleResult(uint256,uint256,address)", +"16eebd1e": "launcher()", +"16ef376b": "getPhase(uint256)", +"16eff85d": "sendRefund(address,uint256,uint256,uint256)", +"16f0115b": "pool()", +"16f0e221": "configTimeMax()", +"16f25d16": "LindaCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,uint64,uint64)", +"16f33fc2": "getLockupCell(address)", +"16f36d74": "withdrawEtherHomeLocal(address)", +"16f38b63": "heroAsset()", +"16f3cb5e": "__kill()", +"16f4acf8": "changeHolder(uint256,address)", +"16f4d022": "tier()", +"16f573e6": "addtoblacklist(address)", +"16f60f5f": "SPIKE()", +"16f898fe": "LogCompanyTokensTransferred(address,uint256)", +"16f8e09b": "privateSaleEtherCap()", +"16f9ce49": "_slotCommitNew(address)", +"16fa2f7f": "getUsernameByAddress(address,address)", +"16fa99be": "totalSuplay()", +"16fc1a0b": "FaFengToken()", +"16fc1e64": "resetCreateShareToken()", +"16fc68cb": "PrivateSaleBuy(address)", +"16fcdb84": "minBuyPrice()", +"16fd381a": "settleBet(uint256)", +"16fd48a1": "ThreesigWallet()", +"16fd9869": "DepositProjectProfit()", +"16fed3e2": "receiverAddress()", +"16fef995": "sundown()", +"16ff1c76": "appreciateTokenPrice()", +"16ff5b87": "getNumProjects()", +"16ff83bf": "setLedger(uint256)", +"17011011": "BookERC20EthV1()", +"17019fb4": "givePoint(uint32,int256,address,bool)", +"1701feaa": "GobizToken()", +"1702ef0c": "getProposalOrganization(bytes32)", +"17031f9c": "advisersPeriodLength()", +"170381fe": "setIcoContractAddress(address)", +"17038cb2": "partialForwardFunds(uint256)", +"1703a018": "quorum()", +"1703b7fd": "eth4DivsOwing(address)", +"1703c11a": "setFundManagementContract(address)", +"17040713": "WithdrawRequest(address,uint256)", +"1704c271": "getShipCount()", +"170594c6": "totalTeamSupply()", +"1705a3bd": "migration()", +"17075992": "lastThreads(uint256)", +"1707e05a": "loanRequested(bytes32[8],bytes,bool,uint256)", +"170815ff": "InTokenTest10(uint256,string,uint8,string)", +"17089563": "rand(uint256,int256,int256)", +"1708a723": "setRootAddress(address,address)", +"1708d725": "unregisterFromPool(address)", +"1708f617": "gasPriceForOraclize()", +"170ab405": "setSize(uint256)", +"170ad53c": "totalUnclaimedTokens()", +"170b0782": "setSystemAddress(address,address)", +"170b99d9": "trivial()", +"170bdb36": "inPermissions(address)", +"170c28a2": "burnlvlToken(address,uint256)", +"170e1dcb": "bountyVault()", +"170e2070": "unfreezeAccounts(address[])", +"170e6d4c": "getLuckynumber()", +"170eb245": "secondTeamWithdrawal()", +"170eeb0f": "investmentRefunded(address)", +"170ff3e1": "addExtension(address)", +"171060ec": "setLocker(address)", +"17111edb": "DevvotePrefundClosed()", +"1712193f": "_requireERC721(address)", +"17124ed9": "LogCratePurchase(address,uint256,uint32)", +"1712649b": "rlc_reserve()", +"17126586": "getOwnerPercentage(address)", +"1712a72f": "ProofPresaleToken()", +"1712c489": "setDates(uint256,uint256,uint256)", +"17135b7b": "transferTokents(address,uint256)", +"17140bcf": "isSecond(bytes32,uint8)", +"1714b0c5": "testContract(uint256)", +"17154004": "checkIfRefundAvailable(bytes32)", +"17155659": "createBadge(string,string,string)", +"17158228": "signupUserWhitelist(address[],uint256)", +"1716b7f0": "longTermBudgetAllocation()", +"1716f47e": "getCurrAmount()", +"171755b1": "getQuote()", +"1717bb12": "VoxelPlaced(address,uint8,uint8,uint8,uint8)", +"171827e9": "tokenTransfertoKYC(address,address,uint256)", +"17183ca3": "maxCallFrequency()", +"17186ca3": "GetLastBetUser(address)", +"17191704": "refundToken(uint256)", +"17193854": "SetAngelCardDataContact(address)", +"1719b727": "_getTokenAmount(uint256,uint256)", +"1719d726": "stopBallot()", +"171c0077": "compare(uint8,uint256)", +"171d833c": "test_twoValidEqAddress()", +"171d9243": "TokenOfEightSilver()", +"171da314": "showPendingAdmin()", +"171dde3f": "devsTokens()", +"171dfb4f": "target_hit()", +"171ef0b2": "exchange_rate()", +"171efc3f": "refreshWaitPairBetIDsByCancelBet(uint256)", +"171fc143": "controllerLocked()", +"171fcb5a": "revealNumber(address)", +"17203e1d": "makeProfit()", +"1720684a": "whitelistBonusClosingTime()", +"1720ce1f": "addTxToRegistry(bytes32,uint256,uint256,uint256)", +"172110b4": "getCountTransactions(address)", +"1721117b": "UpgradeabilityProxy()", +"17214a8a": "GenesisInitialSupply(address)", +"17216484": "genericSender()", +"17219f03": "Ehfirst()", +"1721ebba": "mokenNameExists(string)", +"1722a8b0": "rateAngelDayEnd()", +"172325c7": "refundDuration()", +"17235779": "Tutorial()", +"1723934d": "setAvailableSupply(uint256)", +"17241962": "Zerk()", +"172419a8": "getCapByStage(uint256)", +"1724cf8a": "isCARegistered(address)", +"17255086": "blackjack(uint256,uint256)", +"1725b847": "voteAgree()", +"1725d8aa": "getOwnedShipAtIndex(address,uint256)", +"1726cbc8": "releasableAmount(address)", +"1726d2c5": "getRefPercents(uint256)", +"172727c0": "lastCheckBlockNo()", +"17274abd": "setBtcTokenBoughtAddress(address,address)", +"172775ef": "generateOrderWithPayeeByAdmin(address,address,address,uint256,string,string,string)", +"172820de": "KaliToken()", +"1728ac68": "SPTOKEN()", +"1728dd43": "GameFinished(address)", +"1728fb46": "ROLE_LOCKUP()", +"172960d4": "LogWhitelistAdd(address)", +"17299c04": "setDisputeFee(uint256)", +"172a735c": "updateDocumentPoll(bytes32)", +"172a9438": "ArsenalvsManCity()", +"172ab60c": "getPositionFromHolding(uint256)", +"172ac1ea": "isInvoice(bytes32)", +"172b319d": "GOOLA_UNIT()", +"172b95e1": "get_transaction_by_row(uint256)", +"172c453b": "setInventory(address)", +"172c61e6": "totalAdoptedAxies(uint8,bool)", +"172c9a0e": "inspire(address,uint256)", +"172cf717": "left55(uint256)", +"172d8a30": "setDirectorLock(uint256,uint256)", +"172e0456": "set_property_contact(uint256,string,string,string)", +"172e1e52": "priceView()", +"173029d7": "derivePayoutDistributionHash(uint256[])", +"173067a3": "priceStart()", +"1730e216": "setStartLockPeriod(uint256)", +"17324249": "playNumber(uint256[])", +"17324543": "nationalitiesOf(address)", +"1733043f": "getAllChildIds(bytes32)", +"1733cbb5": "ConfirmationNeeded(bytes32,address,uint256,address,bytes)", +"1733fea0": "SKYST()", +"17342859": "batchSetApprovalForAll(address[],bool)", +"17342d36": "init(address,address[],uint256[],address,string)", +"17349ad5": "TokenDecimals(uint256)", +"17356c22": "getVirusLength()", +"17367bc8": "VDN(uint256,string,uint8,string)", +"173817b6": "checkSellerOffer(address)", +"173825d9": "removeOwner(address)", +"1738c3ff": "removeVendorById(uint256)", +"17393f04": "PURCHASE_DIVIDER()", +"173975aa": "SetENGCommunityAddress(address,address)", +"173a0615": "Dealer()", +"173a21f8": "changeWethContract(address)", +"173a2b5c": "proposalAmount()", +"173a48a4": "distributeFUDD(address[],uint256,uint256)", +"173a4b70": "newProposal(address,uint256,bytes32,string)", +"173a705f": "transmitStatus()", +"173c9d27": "batchTransferForDifferentValues(address[],uint256[])", +"173cb7de": "getNumReleasesForNameHash(bytes32)", +"173d2795": "train1(uint256)", +"173d6ca2": "tier1Reached()", +"173dbd4e": "GoCryptobotCoinCore()", +"173dc741": "addBonusToUser(address,uint256,uint256,uint256)", +"173e49b7": "BoomstarterToken(address[],uint256)", +"173ea238": "changeBtcOracle(address)", +"173ea341": "isPrivilegeAddress(address)", +"173f22f0": "rmin(uint128,uint128)", +"173fc012": "preSignedCheck(bytes8,address,address,uint256,uint256,uint256,uint8,bytes)", +"173febeb": "Send69Wei()", +"17409b42": "registrarAlumno(uint256,string,string,string)", +"1740b479": "gameManagerSecondary()", +"1741526f": "getContractPayout()", +"17415d50": "_deleteRequest(address,address)", +"1741c48e": "getNextPoliceNode(address)", +"17421c8c": "withdrawAmountToken(address,uint256)", +"17431634": "LevelUp(uint256,uint32)", +"17436b1e": "RoundOpen(uint256,uint256,uint256)", +"1744215a": "EIP20()", +"1744cfe4": "GetLoansLenght(bool)", +"1744d5a5": "StageBonusUpdated(uint256,uint256)", +"17453358": "date01Oct2018()", +"1745422c": "addTx(address,uint256,string)", +"174609f8": "UNC()", +"17462891": "proofOfShit()", +"1746bd1b": "getGameInfo()", +"17473975": "breakDurationBetweenPresaleAndICO()", +"1747af0d": "AdminOwnershipTransferred(address,address)", +"1747b48b": "Reveal(uint256)", +"1747dfd4": "ContractPlay()", +"17484b0c": "RSOC()", +"17490da8": "modifyTrialDeadline(uint256)", +"1749bdf1": "getClassRank(uint32)", +"1749c16f": "isEnded(uint16)", +"1749e462": "getOwnersTokenList(address)", +"174a363a": "getpro(uint256)", +"174a6277": "getTxDataBlockNumber(address,bytes32)", +"174a84d8": "BetComplete(bool,uint256,uint256,uint256,address)", +"174b0093": "createDefaultGen0Zodiac(uint256,address,uint256,uint256,uint256)", +"174b9fa4": "getCurrentDayDepositLimit()", +"174c2002": "burnAndDist()", +"174cd9b3": "lastBlock_a19()", +"174dcea8": "getBalanceAndHolderByIndex(uint256,address)", +"174e7d55": "isReadyToAction(uint256)", +"174efd12": "minBidValue()", +"174f51eb": "winOdd()", +"174fa48e": "distributeBTCG(uint256,address[])", +"1750f564": "newProposal(bytes32,address,uint256,uint8,uint256,bytes)", +"1751dc90": "createMultiplePhoenixes(uint256[],uint256[],uint256[])", +"175207b7": "_readBlockBeneficiary(uint256,bytes)", +"17528c7f": "ReceiverAddressSet(address)", +"175323a8": "contributeETH()", +"1753a655": "singBy(address)", +"1753d61c": "AirdropToken()", +"175466ee": "proofVerifyFailed()", +"17548962": "SPTI()", +"17549ff0": "lovelock_price_LOV()", +"1754bd8e": "minerState(uint256)", +"1754de57": "sendleftmoney(address,uint256)", +"1755ff21": "poolAddress()", +"1756ffd9": "addMonsterClassBasic(uint32,uint8,uint256,uint256,uint8,uint8,uint8,uint8,uint8,uint8)", +"17570e80": "logReportingParticipantDisavowed(address,address)", +"1758078b": "trader()", +"175892b4": "previligedSubApproval(address,address,uint256)", +"17597b0f": "getLockedAmount_contributors(address)", +"175a0061": "install()", +"175a8bf4": "MigrationAgent(address)", +"175b0284": "closeChannel(uint256)", +"175b859d": "Bitwincoins(uint256,string,string)", +"175baaf1": "accrual(uint256,address)", +"175beead": "advisoryTokens()", +"175c6709": "TransferStatus(address,bool)", +"175c8640": "ZEEX()", +"175c9885": "POSSCOIN()", +"175d27e0": "MONTH_IN_SEC()", +"175ebfc7": "AdoptionOffered(bytes5,uint256,address)", +"175f6d9c": "JustAnIndex1()", +"17602ddf": "isFlowerAuction()", +"1760705f": "setAssetContract(address)", +"1761af6d": "upgrade(address,address,address,address,address)", +"1761eab4": "buyLong(address[2],uint256[5],uint8,bytes32[3])", +"17623c41": "isAllowedToParticipateNow()", +"17623e5b": "unauthorizeManager(address)", +"17634514": "creationBlock()", +"17634ec8": "freezeAccounts(address,bool)", +"176416ed": "getVotesBetween(uint256,uint256,uint256)", +"1764250a": "verifyWithdrawSignatures(uint256,address,address,uint256,bytes,bytes)", +"17645315": "migrate_participant(address)", +"1764dc3d": "GiveTokenPerm(address,address,bytes32)", +"17653b6e": "setChainRoot(address)", +"17655f6c": "transferOtherERC20Assets(address,uint256)", +"17659a1d": "Undelegate(address,uint256)", +"1766f424": "unsoldAllocationDelay()", +"17671962": "calcTotalWinnerKeys(uint256)", +"17674544": "deleteEntry(string)", +"17674e4d": "logMarketMigrated(address,address)", +"17676e4c": "valueSet(string,bytes)", +"1767da08": "addBalanceForOraclize()", +"176854f6": "setLastJadeSaveTime(address)", +"176898c9": "setRefundStatus(bool)", +"1768b436": "ETCSurvey()", +"1768fd6f": "getMaxLockAmountAllowedByLtd()", +"1769511c": "fidaTokenAddress()", +"1769af29": "removeFromOwnerlist(address)", +"1769d552": "indexextend()", +"1769f049": "fee_balance()", +"176b0eac": "gcStartTime()", +"176b63f4": "seedSourceA()", +"176b6742": "EtherFlip()", +"176b866f": "alterBankBalance(address,uint256,bool)", +"176cd40a": "PUBLIC_OFFER_SUPPLY()", +"176d0780": "createMicroWallet(uint256,uint256)", +"176e5f32": "withDrawMoney()", +"17700f01": "disableTrading()", +"17701ee6": "mission()", +"1770616c": "tier3LOT()", +"17711a46": "setTokenTimelockFactory(address)", +"1771b7dc": "bids_burned_count()", +"1771d4d4": "setAliasPrice(uint256)", +"1771ece6": "updateHouseFee(uint8)", +"17727a00": "withdrawCapital()", +"1773234b": "kscBatchBurnWhenUseInSidechain(address[],uint256[],string)", +"17733eac": "yank(address[],address[])", +"177378f0": "testRegularBuy()", +"17738cef": "placeEMONTBid(address,uint8,uint256)", +"177413da": "bet(bytes32)", +"1774218e": "CRAToken(address)", +"17743338": "MakeClaim(address)", +"17749a16": "adminRefund(address,address)", +"1774df3e": "distributeMAGGIE(address[],uint256,uint256)", +"1774e646": "setUint8(uint8)", +"1774f6c6": "confirmPurchase(uint256,address,address)", +"17753c44": "DIGTREX()", +"17759493": "TotalPoSRequests()", +"1776683e": "payDev(address)", +"1776b437": "countInvestorsRefundedInCrowdsale()", +"177766e6": "getOptionChain(uint256)", +"17776b86": "ExhibitToken()", +"1778f1df": "ICOStartDate()", +"177a9e9d": "refundFor(uint256)", +"177b3010": "registerProject(string,string)", +"177b979e": "initiatecontract()", +"177bd86e": "syncSubscriptions(address[],string[],uint256[])", +"177c75ae": "offerIndexedPieceForSale(uint256,uint256)", +"177cf218": "UNIX_DAY()", +"177cfaa2": "teamTwoShares()", +"177d8ee4": "emitSkillsSet(address,uint256,uint256,uint256)", +"177dc9e5": "getCompte_15()", +"177dcde9": "_transferTokens(address,uint256)", +"177e0f71": "setLockedWalletReleased(address,bool)", +"177e6ae4": "ETHERFLEXCrowdsale(address,address)", +"177ea52d": "buyTokensSigned(address,bytes,uint256,uint8,bytes32,bytes32)", +"178003e1": "BCTopCraftCannabis()", +"178021e3": "saleFee()", +"1780eb18": "charityFundations(uint256)", +"17813d37": "BitGCoin(uint256,string,uint8,string)", +"178228f1": "enterGame(address,uint256)", +"1782a789": "removeContact(bytes32)", +"17834d36": "isReachedHardCap(uint256)", +"178394bd": "LockedUnsoldTokens(uint256,address)", +"178407ca": "Board(address)", +"178450bd": "EbocoinToken()", +"1785478c": "_preValidatePurchase(address)", +"1785f53c": "removeAdmin(address)", +"1785f8dd": "PreTgeDisable()", +"1786351b": "AllbesticoContract()", +"1786e362": "orderTokensOf(address)", +"1787119c": "spendlarge(uint256,uint256,uint256)", +"17880b67": "getTotalBorrowingMonsters()", +"17888efc": "projectTokens()", +"1788de80": "enableTokenTransfers()", +"17897fcd": "RedRabbitToken()", +"178a8c8d": "accountsHolding(uint256)", +"178a8f34": "lotIdsByAddress(address)", +"178a9e2e": "tixGenerationContract()", +"178a9ffb": "HarborCrowdsale(uint256,uint256,address,uint256,uint256)", +"178ab6bb": "startICOStage8()", +"178af534": "createTokensWithoutReffer()", +"178afb39": "setSalesState(bool)", +"178b6de6": "getAllTokens(address)", +"178b8baf": "printCoins(uint256)", +"178b9d1a": "closeTicket()", +"178c02e9": "prometheusSoldCount()", +"178c17f0": "_createRandomNumber(bytes32,uint256)", +"178c4e40": "proof_of_public_key1()", +"178cec5c": "setBAU(bytes32,address,uint256)", +"178e6079": "APP_ADDR_NAMESPACE()", +"178ef307": "numberOfTokenHolders()", +"17904743": "bitpaintingStorage()", +"17905b2a": "Taur()", +"1790bd17": "contributorIndexes(uint256)", +"179101a6": "DECoin()", +"17916537": "clearDistributionDetail()", +"179194e1": "Bitnova()", +"1791cf01": "arr(uint256,uint256,uint256,uint256,uint256)", +"1791db21": "tokenMult()", +"1792b0bc": "transferTokens()", +"1792cc61": "tokenDecimalPlaces()", +"1793140a": "setO1(address)", +"179381d8": "setICOController(address)", +"1793b0f2": "addRecord(bytes32,string)", +"1793c314": "lastChance(address,address)", +"1794164b": "killcontract()", +"1794a463": "changeDevFees(address)", +"1794bb3c": "initialize(address,address,uint256)", +"17958e75": "omegaToken()", +"17961d0f": "ord()", +"17968fc9": "doPurchase(address,uint256)", +"1796b2ca": "unspent_supply()", +"17974399": "changeWithRef(address,address,uint256,uint256,address)", +"1797552b": "approveansCall(address,uint256,bytes)", +"1797814e": "IADOWR()", +"1797ec8a": "totalCrabTraded()", +"17986d83": "setRefferalFee(uint256)", +"17993e2f": "IREC()", +"17997878": "totalOwned()", +"179a5480": "masterresellercontract()", +"179ac197": "setOraclizeContract(address,address)", +"179b1b70": "LogFinalize(uint256)", +"179b51b1": "lotteries(int256)", +"179b73da": "killBoardProposal(uint256,address)", +"179c537e": "setSaleContractDepositAddressVerified(address)", +"179d375c": "addToken(uint256)", +"179dd216": "calculateMarketPixelPrice(uint256)", +"179dfbf3": "getBettingStatus()", +"179e91f1": "tokensLockedAtTime(address,bytes32,uint256)", +"179ee8bb": "acceptLoan(address,address)", +"179ef331": "nameRegistered(bytes32,address,uint256)", +"179fc99f": "etherBalanceOf(address)", +"179ffe76": "getMovie(uint256)", +"17a081bf": "queryTimestamp(uint40)", +"17a23ec6": "TOKEN_scaleDown(uint256,uint256)", +"17a2aaa4": "WithdrawalPremature(address,uint256)", +"17a2c026": "setCampaignEndDateById(bytes32,uint256)", +"17a3a329": "GLBX()", +"17a40e92": "updateAsset(address,bytes32,bytes8,uint256,string,string,address[2],uint256[],bytes4[])", +"17a432f5": "getActualPriceOfCardOnCraftAuction(uint256)", +"17a523c1": "useInsurance(uint256)", +"17a5d4df": "minTransactionAmount()", +"17a5f8cc": "createRatePlan(string,bytes32)", +"17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", +"17a650cc": "enter_square(uint256)", +"17a66006": "stageBaseRate()", +"17a689f3": "SuperSkyNet()", +"17a7cd10": "weeksFromCreation()", +"17a7eb4c": "vote02NoCount()", +"17a7f4cc": "feedOnKitty(uint256,uint256)", +"17a7f53e": "PriceHKGChange(uint256,uint256,uint256)", +"17a7f9b2": "countOfAddresses()", +"17a87b80": "changeInitialPrice(uint256,uint256)", +"17a950ac": "actualBalanceOf(address)", +"17a96982": "pullBounty(uint256)", +"17aa2899": "toB32(address,bytes)", +"17aaaea7": "BaseAltCrowdsale(address,address,address,address,bool,uint256,uint256,uint256,uint256,uint256)", +"17aad447": "FOUNDERS_LOCK_START_TIME()", +"17ab6cbb": "getRedCards()", +"17ac195a": "devTokensWallet()", +"17ac410f": "mintedtokens()", +"17ac896c": "GlobalBusinessSystemToken()", +"17adeb7c": "setClientProviderUID(address,uint256)", +"17adfa08": "confirmOneBuy()", +"17ae1f6c": "commission1()", +"17ae1fc5": "getIsActive(address)", +"17ae5d88": "unPreIco()", +"17af4d8a": "removeRoleAll(string)", +"17afa8a3": "set_refererPercent(uint256)", +"17afd19a": "decrementDID(address,address,uint256)", +"17b2e350": "deletePermissions(address,address[])", +"17b3a34b": "_addIdentities(uint256,bytes32[])", +"17b3c7ea": "getAllProposalVotersAndVotes(uint256)", +"17b4c4d3": "META()", +"17b54069": "setRoundOne(bool)", +"17b591e5": "closeContract(bytes32,bytes8,uint256,uint32,string,uint32,uint32,uint64,uint64,bytes32)", +"17b5f729": "_getAuctionIdArray(uint64,uint64)", +"17b65ae6": "hasEmployerMinRating(address,address,uint256)", +"17b75be6": "setBigICOStopped(bool)", +"17b7c328": "OpenPollCoin()", +"17b83aa6": "getSaleContractDepositEtherMax(address)", +"17b88dd7": "NEC(address,address)", +"17b98723": "isAuraSet(uint256,uint256)", +"17b9a28e": "calcWinner(uint256,uint256,uint256,uint256)", +"17b9e89c": "sumHardCapPreICO3()", +"17ba169a": "HybridEXToken(address,uint256)", +"17ba86af": "OpenContentIndex()", +"17bb0532": "AdminAddressChanged(address)", +"17bbcb6f": "newInvest(address,uint256)", +"17bd1251": "txsThreshold(uint256)", +"17bd5956": "withdraw_token(address,address,uint256,uint256)", +"17bd927c": "testNewCounterValueAfterADecrease()", +"17be3fa5": "lockToken(address,uint256)", +"17be85c3": "getEntries()", +"17be89f0": "createTradeContract(address,uint256,uint256,bool)", +"17bf2671": "PDOne()", +"17bf8f50": "sendTokenFromDex(address,uint256)", +"17bfdfbc": "borrowBalanceCurrent(address)", +"17c0b0f9": "Escrow(address,uint256,address)", +"17c163e9": "ROLE_STATE_LOCK_PROVIDER()", +"17c201a1": "getRemainingMineSupply()", +"17c208a0": "EtherGirls()", +"17c24891": "completeInternal()", +"17c2d98b": "minSizeInvest()", +"17c2f390": "getNumberOfSuccessfulSteps()", +"17c3119b": "TeamAndAdvisors()", +"17c32a58": "latestPhaseNumber()", +"17c35e88": "deedName(uint256)", +"17c3925f": "encodeBillingMetadata(uint256,uint256,uint256,uint256)", +"17c39286": "getCars()", +"17c4c7bb": "getShipPriceById(uint256)", +"17c4f0a0": "autoReleaseTokenSaleJM()", +"17c4fcbf": "getExpectedGameSize()", +"17c51080": "getMyLockedFundsReleaseTime()", +"17c520f9": "CerttifyToken(uint256)", +"17c5838a": "stopMinting(string)", +"17c59204": "determinateWinners(uint256,string,int256,int256[],uint256,string,string)", +"17c5fed8": "emergencyWithdrawalRatio()", +"17c63141": "getCountSenderCities(address)", +"17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", +"17c6ee4f": "PaidOut(address,address)", +"17c70de4": "initiationTime()", +"17c73612": "ItlyCoin()", +"17c73ff0": "COMMISSION_WALLET()", +"17c83ed4": "getBindAddressAccount(address)", +"17ca1a6d": "getCrystalsSummary(address)", +"17ca2e41": "addBlacklist(address,bool)", +"17ca7f63": "getMintMarketMakerApproval(address,address)", +"17cacc1e": "_beingVIP(address)", +"17cb6426": "totalPaidOut(address)", +"17cbe981": "ChangeShipSellMaster(address)", +"17cc4138": "lastUETCWC()", +"17cc67b9": "firstRoundICOStart()", +"17ccf6a0": "rate5()", +"17cd4d5a": "setEtherPriceInEuroCent(uint256)", +"17cd802d": "repayment()", +"17cdb812": "TEAM_VESTING_AMOUNT()", +"17cdbac0": "usedvalue()", +"17ce42bd": "addEntry(string)", +"17ce9aae": "getIsSecondPhaseByTime()", +"17ce9d68": "getMeshPointByName(string)", +"17cfd0d6": "house_edge()", +"17cfde55": "onSubUnHold(uint256,address,bool)", +"17d01716": "unregisterPair(address,address)", +"17d077af": "NamiPool(address,address,address)", +"17d0aa13": "TXOtoken(address)", +"17d18cd6": "_capOwO()", +"17d28620": "toggleTransferFor(address)", +"17d2e4e4": "realDevRewardWeight()", +"17d35f47": "setLocked(uint256)", +"17d3953f": "tmed()", +"17d48fc7": "getMigrationAccount(address)", +"17d4e24c": "EXT_COMPANY_STAKE_THREE()", +"17d51877": "cancelLine(uint256)", +"17d55d13": "timeLeftToBid(address)", +"17d5e4be": "testDrip(address,address,uint256)", +"17d60394": "Briant2Token()", +"17d6de15": "setSnapshotBalanceBatch(address[],uint256[])", +"17d70f7c": "tokenId()", +"17d7a154": "getShipTotalEarned(uint32)", +"17d7a47d": "sendOtherTokens(uint8,address,uint256)", +"17d7de7c": "getName()", +"17d8405a": "setUserAccount(bytes32,address)", +"17d86154": "setStartPrice(uint256)", +"17d8fd7a": "acceptedBookingfc(uint256)", +"17d928a7": "ClaimNFT(uint256,uint256,uint256)", +"17d94ad3": "isMinterAllowed(address)", +"17d9adb7": "stage_3_tokens_scaled()", +"17d9b4ab": "checkPromo(string)", +"17d9bfcb": "withdrawAndTransfer(uint256,address)", +"17d9c090": "isCharged()", +"17da485f": "getMiningDifficulty()", +"17db59a4": "dEthereumlotteryNet(address,address,address)", +"17dba48c": "GRAC2Coin()", +"17dbaf9b": "unlockFirst()", +"17dbe4f1": "burnPassportToken(address,uint256)", +"17dc86c5": "minWeiContribution()", +"17dc92f5": "cash(uint256)", +"17dd0873": "Winner(address,uint256,uint256,int256,string)", +"17dd4cc1": "getPreviousPrice(bytes32)", +"17de15ad": "GreHackCoin()", +"17de2f1f": "defaultOwner()", +"17dec7af": "distributionFixed()", +"17df1773": "StopIco()", +"17df5696": "finishPreSale4()", +"17df74f9": "availablePercent(uint256)", +"17df9a73": "findBid(address,uint256,bytes32)", +"17e01c95": "isClientBlocked(address)", +"17e04e55": "PoSatoshi()", +"17e0aeb8": "setPropertyEarnUntil(uint16,uint256)", +"17e0dfb2": "backAtIndex(uint256,uint256)", +"17e139a7": "lockedTokenHolder()", +"17e1b09b": "minimumDeposit(uint256)", +"17e1bfb7": "addInstitution(address,string)", +"17e22621": "joinGameWithInviterID(uint256)", +"17e2912f": "Amount_of_AOC_for_One_ETH()", +"17e30f6b": "TimeChainToken(uint256,string,string,address)", +"17e398a5": "seizedTokensWallet()", +"17e3f5fa": "callModifiedContractBalance()", +"17e49dc9": "ETH033()", +"17e50791": "FundsReceived(address,uint256,uint256,uint256,uint256)", +"17e51f21": "CrowdsaleController(address,uint256)", +"17e5259e": "ETH_MAX_LIMIT()", +"17e63b79": "centsPerMonth()", +"17e63bff": "setupICOPeriod(uint256,uint256)", +"17e6a087": "markFunding(address,uint256)", +"17e72721": "VLToken()", +"17e760bb": "votingAllowed()", +"17e7dd22": "getBooleanValue(bytes32)", +"17e875e3": "Transparancy()", +"17e95fbc": "releaseAdvisorsAccount()", +"17e9884d": "OG()", +"17ea0a46": "getalldeatil(uint256,uint256)", +"17ea4a79": "Took(address,uint256,uint256,uint256)", +"17eb85e3": "contractBoost(uint256)", +"17eba34d": "MIN_PRICE_IN_CENTS()", +"17ed31f4": "TIACOIN()", +"17edfb06": "trade(uint256,uint256,string)", +"17ee9c1d": "agreeProposal(address)", +"17eef4cd": "setTotalTokensForPublicSale(uint256)", +"17ef67c6": "setContract1(address)", +"17efa370": "SmartTokenController()", +"17f143e1": "supplyExponent()", +"17f19efb": "ZoarToken()", +"17f1d65b": "hasIcoPhaseOneEnded(uint256)", +"17f1ee05": "paySecurityPool()", +"17f3679f": "testGetMixItemStore()", +"17f46c15": "getVoucher()", +"17f5de95": "MAX_TOKENS_SOLD()", +"17f5f53a": "XYTTEST()", +"17f6252f": "PRESALE_PERCENTAGE_4()", +"17f6c712": "ObjectPurchase(address,address,uint256,uint256)", +"17f708fb": "removeWhitelist()", +"17f7a530": "_computeNextMinerPrice()", +"17f80c13": "releaseJoyToken()", +"17f8252e": "tokenOwnerNumber()", +"17f95eac": "approveCloser(address,bool)", +"17f992ab": "SECOND_VOLUME_EXTRA_BONUS()", +"17fa664f": "callerDel(address)", +"17faa66f": "transferOwnershipWithBalance(address)", +"17fab0a0": "info(string)", +"17face84": "withdrawCommission(uint256)", +"17fad7fc": "batchTransferFrom(address,address,uint256[],uint256[])", +"17fafa3b": "test_sub(uint256,uint256)", +"17fb44c1": "returnAmountPaidBackSoFar(uint256)", +"17fb4d66": "Destroy(address,uint256,address)", +"17fb6c6e": "approveRequest(uint256,bool,string)", +"17fc01bf": "LegendsCrowdfund(address,uint256,uint256)", +"17fc3f55": "angelGoal()", +"17fc91f8": "holdAmount()", +"17fccb47": "erc20TokensContractAddress()", +"17fd9cc5": "tradeWithInputFixed(address,address,address,uint256)", +"17fe375f": "getComments(address)", +"17fe5b79": "apolloSpecialTransfer(address,uint256)", +"17fe6185": "log(address,address,uint256)", +"17fe72bb": "setEnabled(address,bool)", +"17ff0caa": "WeatherBet(uint256,address,address,address)", +"17ffa830": "tixFounders()", +"17ffc320": "reclaimToken(address)", +"17ffd225": "KittyTrained(uint256,uint256,uint256,uint256[5])", +"17ffe171": "lock(address,address)", +"18004bba": "transferArrayBalanceForPreSale(address[],uint256[])", +"18005d93": "JinuToken()", +"1800c0fe": "extraTime()", +"1800e68e": "calculateTokens()", +"1800ed8e": "manager_address()", +"18015191": "transactions()", +"1801db43": "ExaCHF()", +"1801f00f": "newProposal(uint256,uint256)", +"1801f38e": "restart(uint256)", +"1801fbe5": "mint(uint256,bytes32)", +"1801ff10": "getAllContact(bytes32)", +"18024acc": "voteStartTime()", +"1802f969": "PokeCentral(address,address)", +"18037b78": "issuerJurisdiction()", +"18039230": "getPlayerGoodList(address)", +"180489ed": "Withdrawal(address,uint256,bytes)", +"18051c4a": "targetWei()", +"18054275": "executeSpins(bytes32,bytes)", +"180603eb": "registrationFee_()", +"1806874a": "amountLockedInVestings()", +"1806be68": "CompanyReserve(address,address)", +"1806cb4e": "getGiftSoldFromType(uint256)", +"180773de": "MAXIMUM_CONTRIBUTION_WHITELIST_PERIOD_USD()", +"1808c6b6": "setDividendsDistributor(address)", +"1808eeb8": "pending(bytes32)", +"180941f0": "setPredictions(int16,string)", +"1809549f": "updateAllComponents()", +"1809ced7": "sendEther(string)", +"180a3277": "sendDiary(address,bytes)", +"180a351b": "getByteFromByte8(bytes8,uint8)", +"180a42a3": "LifeSet_006()", +"180aadb7": "underLimit(uint256)", +"180afbf6": "DaxtherCrowdsale()", +"180b0d7e": "feeDenominator()", +"180b2607": "lastRelease()", +"180c0da6": "GlobalAssentToken()", +"180c0dfe": "maxBuyTokenAmount()", +"180c9309": "hasOracle(address)", +"180ca180": "CooperativeToken()", +"180cb47f": "GOV()", +"180da450": "addTierRateAndTokens(uint256,uint256,uint256)", +"180db1b4": "getErrno()", +"180dc318": "owners(uint32)", +"180ee30d": "forgivedChars(uint256)", +"180eebba": "accumulatedGasFees()", +"180f4c2c": "submitTotalBuyOrder(bytes32,uint256,uint256)", +"180f8f4f": "nextPrice2Of(uint256)", +"18117abb": "changeOwnerWallet(address)", +"18126325": "getOrganBlog()", +"18128ec7": "buyMorty()", +"1812982c": "fechAllForCandidate(uint256)", +"1812d2aa": "setBonusToken(address,uint256,uint256)", +"1812d996": "signature(bytes32,uint256)", +"1813b684": "preIcoEnded()", +"18158e6b": "BdpController(bytes8)", +"18159bf3": "_addSGCUsers(address)", +"1815ce7d": "setBackendAddress(address)", +"18160ddd": "totalSupply()", +"181670e6": "isApprovedOnceFor(address,address)", +"18167416": "officialGameUrl()", +"1816e794": "getMainsale()", +"18178358": "poke()", +"1817c5a7": "revokeGrant(address)", +"181a916b": "getKeys(address,uint256,uint256)", +"181aa1fd": "takeFee()", +"181b3bb3": "functionOne()", +"181b591a": "phase_4_bonus()", +"181be00d": "getValue(uint8)", +"181c8ef9": "enter(bytes8,address)", +"181d85eb": "internalRedeem(address,uint256)", +"181da773": "EosPizzaSliceDonationraiser(address)", +"181dcbcd": "setMaxConfig(uint256,uint256)", +"181e0124": "getRemainingTime(uint256)", +"181f1437": "permissibleWithdrawal(uint256)", +"181f1965": "fillSellOrderPartially(uint256,uint256,uint256)", +"181f4456": "setAuctionStart(uint256)", +"181f4477": "getLockedStructStartTime(address,address,uint256)", +"181fd85b": "cancelSale(address,bytes32)", +"181ffc5f": "GetGift(bytes)", +"182092a8": "ChangeSymbol(string)", +"1820b575": "Team(uint256,address,uint256)", +"1821cd93": "jackPotFunds()", +"1821e7c6": "acceptOffer(address,address,uint256)", +"1822b886": "createTradeOffer(bytes32,bytes32)", +"1822cbc5": "mintingIsAllowed()", +"1822f8db": "finishSafe(address)", +"18237476": "getAccountTotal(address)", +"18237e0c": "enableBuyback(uint256)", +"182439de": "claim_PreICOTokens(address)", +"1824461d": "administror()", +"18248f2a": "sendToken(address,uint256,address)", +"182493f2": "plantedOf(address)", +"182499fe": "ico_address()", +"1824a46b": "onUpgrade()", +"18253234": "ticketsAvailable()", +"182575f1": "authorizeFloor(uint32,address)", +"1825d0e8": "_mintCUSD(address,uint256)", +"18264f33": "startMigration()", +"1826fb35": "_calculateShards(int256,uint256)", +"1827caf4": "getInfoB(uint256)", +"1827edbc": "Reaper11()", +"18285e6b": "secondPlay(bytes32,uint8,bytes32,bytes32,uint256)", +"18287ef2": "executeOption(address,uint256)", +"18289482": "currentIcoPeriodStartDate()", +"1828983a": "authorizedUsers(address)", +"1828b254": "nextTicketPrice()", +"1828db82": "ownerPayout(address)", +"182930ce": "AddedToWhiteList(address,uint256,uint8,uint8)", +"1829b73f": "buyoutAmount()", +"182a7506": "setMinimumFee(uint256)", +"182ae5f2": "getVotesForItem(uint256)", +"182af96b": "regularEndGame(address,uint32,int256,uint256,address)", +"182b0b00": "checkChangeToReceive()", +"182b144c": "incrementBatch(address[])", +"182b434b": "newRequest(address,uint256,bytes32)", +"182d326e": "getTeamAddress()", +"182d709a": "scaleWeights(uint256)", +"182db370": "getWhatHappened()", +"182df0f5": "exchangeRateStored()", +"182e0c49": "totalUnrestrictedAssignments()", +"182e7533": "getBetResult(bytes32,bytes32,bytes32,uint256)", +"182e8a67": "changeGroupActiveStatus(bytes32,bool)", +"182e9a1e": "getOwnerVehicleDetails(address)", +"182ee07f": "setDistributionMinimum(uint256)", +"182ef78e": "getTMul()", +"182f67a3": "reservedWei()", +"18300c1a": "CappedMintableToken(uint256)", +"1830d69d": "IsGot(uint256[],uint256[])", +"1830f493": "getPermission(bytes4)", +"1832425f": "registerAddress()", +"1833198f": "makeMemChange2(uint256,uint256,uint256,int256)", +"1833a548": "changeGas(uint256)", +"1833b7c6": "changeMyAddress(address)", +"1833fa4c": "update(uint256,string,uint256,uint256,uint256,uint256)", +"18342c9c": "BettingCore()", +"1834906c": "thisContractAddress()", +"1834ef4e": "addMoneyToContract()", +"1835e57d": "VESTING_DURATION_4Y()", +"183651d9": "tokenApprovalWithSignature(bool,address,address,address,uint256,uint256,uint256,bytes32,bytes)", +"18369a2a": "initialBalance()", +"183718d1": "getCheckoutTime()", +"18384df2": "getMetadataOf(uint256)", +"1838daab": "getRealmSale(uint256)", +"1839a417": "_cancelEthOffer(address)", +"1839babf": "zGetGameBalance()", +"183a7947": "pregnantKitties()", +"183abe66": "testRewardSB(string)", +"183b3159": "getAssetBalance()", +"183bfb4f": "AddBankerProfit(uint8,uint256)", +"183c5901": "DigitalGold()", +"183d255e": "SetWhat(uint256)", +"183d4cf7": "CNT_address()", +"183df5ef": "test_invalidSuicide()", +"183f9bcf": "isQuorum(address[3])", +"183ff085": "checkIn()", +"184018c6": "awardHighScore()", +"1840f0ca": "countVotes(uint256)", +"184188f2": "setStopTransfer(address,bool)", +"18423074": "ShowerToken()", +"18433bb7": "DrawPrepare()", +"1844fef1": "roundTotalWinnings(address)", +"18456048": "auctusTokenAddress()", +"18469491": "lastPlayerPaid()", +"18469dfe": "canStartDispute(bytes32)", +"1846d125": "isGroupExists(bytes32)", +"18476db4": "newRandomValue(uint256,address,uint256,uint256)", +"18477799": "Touch()", +"1847c06b": "ids(address)", +"18489f50": "thingExist(bytes32[])", +"18494108": "doPayout()", +"1849bd6a": "ExecuteTrade(address,address,address,uint256,uint256)", +"1849cb5a": "get(uint80)", +"184a9ce1": "Log2_fnc(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", +"184ad5ff": "VjuCoin()", +"184b1912": "minimum_goal()", +"184b9559": "init(address,address,address)", +"184bd394": "changeSaleAddress(address)", +"184c703d": "LogVoteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", +"184d009b": "teamNameIndex(string)", +"184d1a77": "acceptBid(int256,int256,int256,int256)", +"184d69ab": "isWhitelistEnabled()", +"184db3bf": "initErc20Deal(bytes32,uint256,address,bytes20,bytes20,address)", +"184e8549": "getPI_edit_31()", +"184fb2bd": "signOwnerCount(uint256)", +"184fd65e": "addMomRelation(address)", +"184ffd9d": "RATE_CROWDSALE_S2()", +"18501714": "clearJackpotParticipantsAfterDistribution()", +"185061da": "undoIt()", +"18507210": "templatesOfOwner(address)", +"185190f6": "addCustomerwithETH(address,uint256,uint256)", +"1851e59e": "Omnidollar()", +"18520be5": "EventBid(uint32)", +"18520de3": "sendFrom(address,address,address,uint256,uint256)", +"1852e8d9": "calculateReward(address,uint256)", +"1853d033": "GetAskingTokenBought()", +"1854229a": "REFERRAL_BONUS_LEVEL1()", +"1855e405": "managerOff(address)", +"1856a6df": "coupleImageIPFShash()", +"1856bc0f": "BuyGenesis(address)", +"1856c1dc": "main_sale()", +"1856e01b": "setVotingController(address)", +"18573bf9": "calculeReward(uint256,uint256)", +"18577f8d": "calVote(address)", +"18579ece": "clearances(address)", +"18584a5d": "hasAlreadyPlayed(address)", +"185870f9": "developerWallet()", +"1858cb5b": "verifyProof(bytes,bytes32)", +"185917c5": "distributeToFound(address,uint256)", +"1859b2d7": "getDStructData(address,uint256)", +"1859c8e2": "getUserTicket(uint256)", +"185a5671": "setTransferAddress(address)", +"185a6284": "discountedMiningTarget(address)", +"185a7daf": "FundingRules(uint256)", +"185b9067": "QuadCoin()", +"185c4279": "hardCapCHF()", +"185cc751": "loan(address,uint256)", +"185d1af6": "setUncirculatedSupplyCount(uint256)", +"185d9e79": "AOL(uint256,string,uint8,string)", +"185e00fd": "getDisputeStateText(uint256)", +"185e4a00": "getCurrCanRefund()", +"185e9969": "getContractDetails(bytes32)", +"185f23c4": "_arbitrationPercent()", +"1861355b": "transferMintOwnership(address)", +"1861cb28": "getNowVestingType()", +"1861e523": "testOwnerToken()", +"1862c10b": "withdrawBalancesToLogic()", +"1862caec": "firstStageMinting()", +"186415c0": "releasesollidaTeamTokens()", +"18643d37": "raffleLimit()", +"1864db71": "getCompetitionInfo(uint256)", +"18656a1e": "founderAmount()", +"18659adb": "starbitWallet()", +"1865c57d": "getState()", +"186601ca": "activated()", +"1866191a": "editDiscount(uint256,uint256,uint256)", +"186690b0": "broadcastMessage(string)", +"1866ae7d": "PayRollHistory(address)", +"1866f761": "ConstantaToken()", +"18671d23": "Auditor(address,address,address)", +"1867b937": "_bytesToBytes32(bytes)", +"1868291f": "getIp(string)", +"1868516d": "KMEToken()", +"1868c2a1": "computeSeed(uint64,address)", +"18695c4d": "DSToken(bytes32,uint256)", +"1869a084": "releaseLockedBalance(address,uint256)", +"186b6f05": "updateFallbackDeposit()", +"186b79c9": "isProviderInitiated(address)", +"186ba9de": "lastUnlockMineBalanceTime()", +"186bbb05": "getAppCode(bytes32)", +"186bcaf0": "ontology()", +"186c9b11": "issueTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"186cd7d2": "card_black_first()", +"186d9ce8": "allowAvatarCreation()", +"186d9d88": "unblockAddress(address)", +"186db237": "ecosystemBuildingTokens()", +"186e378a": "CCH_EDIT_4()", +"186e4297": "charityCut()", +"186e7047": "forceAdvance()", +"186eb86b": "cnt_per_eos()", +"186f0354": "safe()", +"1870082d": "inviteCollateralizer()", +"187047b5": "LogUserAdded(address)", +"1870a73a": "totalNTD()", +"1870ad14": "setAddress(string,address,bool)", +"1870c10f": "donateAndCreateGiver(address,uint64,address,uint256)", +"18714bc8": "purchaseWithFiat(uint256)", +"18718656": "XENCToken()", +"1873355e": "Emoji()", +"18737e07": "Redeemed(uint256,address,address,uint256)", +"18758480": "worldContract()", +"1875aa22": "transferWhiteList()", +"1875ccf3": "setGlobalCompositionFee(uint256)", +"18760eb3": "RequiringAuthorization()", +"18764471": "ANTDToken()", +"1876d0a9": "astutelandToken()", +"1877fc8a": "quickSort(address[21],int256,int256)", +"1878265a": "Rent()", +"1878d1f1": "ETH_TOKEN_ADDRESS()", +"187958ac": "VOCToken()", +"18797499": "ENTERED_MASK()", +"18797c35": "emitAccountFrozen(address,uint256)", +"1879c2da": "NewSale(address,uint256)", +"1879dcf3": "MIN_TOKEN_PRICE()", +"187a62d5": "voteEmergencyWithdrawal(bool)", +"187ac4cb": "migrationManager()", +"187adf2e": "failsafe_subtract(uint256,uint256)", +"187b1f2a": "VOZToken()", +"187cba25": "issueNomins(uint256)", +"187cbdd2": "subWallets()", +"187d2371": "LOG_MaxInvestorsChanged(uint256)", +"187d3954": "getClaimableBalanceFor(address)", +"187d8803": "updateKoCommissionAccount(address)", +"187ecd37": "Open(bytes)", +"187ed86e": "ROE()", +"187f707b": "AdvertisementFinance(address)", +"187fac20": "setStartStage1(uint256)", +"187fd079": "MINI_GAME_TIME_DEFAULT()", +"18804b0d": "setDescriptionHash(bytes32)", +"1880692f": "getPublicKeyCount()", +"1881656b": "canSpend(address,uint256)", +"1881b0f0": "kycVerify(address)", +"1881f980": "read_i64()", +"18821400": "TOKEN_NAME()", +"1882d267": "liquidityFundAddress()", +"18836994": "get_allowance(address,address)", +"1883d2a4": "IUPToken()", +"1884c517": "registerWorkerAffectation(address,address)", +"18856694": "deny(bytes8)", +"1887af2b": "LogicBase(address,address)", +"18886657": "purchaseLimit()", +"1889500c": "marketplaceManager()", +"18896972": "isBuyFull()", +"18898452": "saleMinimum()", +"18899745": "AffiliateMarketing(address,uint256)", +"1889fc0a": "_preValidateReserve(address,uint256,address)", +"188a1d68": "getOuverture_des_droits()", +"188af657": "generateWinner()", +"188b5372": "generateToken(address,uint256)", +"188b81b4": "getGameEnd(uint256)", +"188c668c": "recordDealRefundReason(uint256,address,uint32,uint32,uint256,string)", +"188cad26": "referralTokensAllocated()", +"188d0aae": "buyAndCreateGame(uint256,uint256,address)", +"188dbc1a": "setAccountIsFrozen(address,bool)", +"188ec356": "getTimestamp()", +"188f1fee": "notifyObservers(address,address,int256)", +"188fdbdc": "commission_rate()", +"189048fc": "getAccountLevel(address)", +"189052ac": "_setFreezingPeriod(address,bool,uint256)", +"18911bbe": "ProdFToken()", +"1891381d": "setROI(uint256)", +"1891c701": "AssignOwnerToProject(int256,address)", +"18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", +"1892c15a": "fwdPayment(address)", +"18940084": "_getDestinationTranche(bytes)", +"18942a33": "new_record(address,address,uint256)", +"18946e8f": "voteOnParameter(bytes32,int256)", +"18954b3e": "collectEstimation(int256)", +"18955b1e": "willThrow()", +"1895687d": "issueLoan(address,uint256)", +"18958959": "individualClaim()", +"1895e858": "resetWallet()", +"1896367e": "setBlockSze(uint256)", +"18968a03": "finalize(uint256,address,address)", +"1896f70a": "setResolver(bytes32,address)", +"18976fa2": "closeVault()", +"1897bcf3": "sellToken(uint256,uint256)", +"1898a1c7": "addVendor(address,string)", +"189959de": "EXPC()", +"1899f1ad": "setChargerAddress(uint256,address)", +"189a5a17": "nodes(address)", +"189ae13c": "numArbiters()", +"189af42f": "powsm(uint256,uint256)", +"189aff3a": "authorizedSupply()", +"189b11fc": "AddSeed(address[])", +"189b600c": "setNameHashByWriter(bytes32,address,bytes32)", +"189c94ae": "testFallbackStaticSig()", +"189ca316": "setVoteWeight(uint256)", +"189d165e": "setBurnRate(uint256)", +"189e688a": "ClaimDividend(address,address,uint256,uint256,uint256)", +"189eeebe": "isMembershipAllowed(address)", +"189f0197": "getPlayersPick(string)", +"189f4d34": "setMinUCCoinSellingValue(uint256)", +"189f9041": "mintCoreToken(address[])", +"18a08d2d": "TheTokenH()", +"18a0e773": "UnlockGrant(address,uint256)", +"18a17df1": "DataDump()", +"18a24b5b": "unlockToken()", +"18a30d16": "getResponse()", +"18a39c54": "payForward()", +"18a3aad2": "ReserveCoin()", +"18a4155e": "calculatePrice(uint256,uint256,uint256,address,uint256)", +"18a45c41": "_receiveFundsUpTo(uint256)", +"18a51621": "getReadableSupply()", +"18a54ecd": "mintTokenForPrivateInvestors(address,uint256)", +"18a6217d": "comments1()", +"18a66563": "AQI()", +"18a689aa": "getNamePicture(bytes32)", +"18a6bc32": "tokenDistributor()", +"18a6d58b": "addTokenTeller(address,uint256)", +"18a6d765": "BANKROLL_LOCK_PERIOD()", +"18a6dec5": "getCountTokensByGame(uint32)", +"18a727c5": "_withdrawDev(address,uint256)", +"18a7bad6": "setFreezeAdmin(address)", +"18a8fac9": "icoInvestment(address,uint256,uint256)", +"18a94030": "putStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"18a991f7": "setEmeraldPrice(uint256)", +"18a9cc1b": "isUser(uint256)", +"18a9f29f": "setMetadata(uint128,string)", +"18aaaa51": "registerTickets(uint256)", +"18ab8888": "paymentSortId()", +"18ab8c37": "timeToCalm()", +"18abb75c": "createLibraryBounty(string,string,address,uint256)", +"18abfdfc": "totalSupplyFromCrowdsale()", +"18ad052b": "safeTransferByContract(uint256,address)", +"18ad28af": "icoWasSuccessful()", +"18ae15e4": "DBC(uint256,string,uint8,string)", +"18ae19c2": "get(bytes32,uint256)", +"18ae21e8": "NuoYiLian(uint256,string,uint8,string)", +"18af26fe": "setRestrictedWallet(address)", +"18af4099": "PARALLELNETWORK()", +"18af5e74": "addressesDeposited(address)", +"18af7021": "force_refund(address)", +"18b03ceb": "remainderPurchaser()", +"18b0bdf7": "getMensaje(uint256)", +"18b0efb6": "isEmptyName(string)", +"18b123d5": "hasBeenApproved(address,uint256)", +"18b15e2a": "Ongo()", +"18b20071": "setCurrentPrice(uint256)", +"18b2739d": "giveEthJackpotAddress()", +"18b31f94": "registerLengthFunction(string,string,address)", +"18b322a4": "update_instant()", +"18b38777": "fuzexAccount()", +"18b3a119": "getCrowdsaleMaxRaise()", +"18b3b58b": "Hamza__Coin()", +"18b3c724": "forceRecoverCollateralOnBehalfOfRecurse(address,address,bytes32,address)", +"18b3cd45": "qwecoin()", +"18b40adf": "maximumCirculation()", +"18b437aa": "COMMERCIALPOINTCHAINSYSTEM()", +"18b49ba4": "AMPIToken()", +"18b4a702": "EPACOIN()", +"18b4a924": "week_max()", +"18b64d5b": "unmint(int256,uint256)", +"18b749c4": "payEther(uint256)", +"18b7bb11": "EthRoi()", +"18b7fed8": "deliverPresaleTokens(address[],uint256[])", +"18b8275a": "addUser(string)", +"18b919e9": "ROLE_WHITELISTED()", +"18ba4218": "countAssetEvents(bytes32)", +"18ba5cdc": "ownerAddToWhitelist(address,uint256)", +"18ba6973": "setTrainingFormulaContract(address)", +"18bb2edb": "maxRegistrants()", +"18bb7c08": "_setNameToAddress(address,string)", +"18bbedf4": "Bulletin()", +"18bc1558": "Th_stage2(uint256)", +"18bcd3d0": "transferOwnership(address[])", +"18bd21f9": "_purchase(uint256,uint256)", +"18bd387a": "level_referrals_count_by_address(address,uint256)", +"18bd5108": "stopCrowdsaleTime()", +"18bd710b": "NewGirl(address,uint256,uint256,uint256,uint256)", +"18bd8dcb": "ufoodoToken()", +"18bdb1b0": "StartdateICO()", +"18bdc79a": "payOwnerOnly()", +"18bdffbb": "verifierAddress()", +"18bee97e": "Creator()", +"18beeeb4": "redeemInternal(uint256)", +"18bf0225": "etherFundsOf(address,address)", +"18bffce9": "voteToResult(uint256)", +"18c0e04f": "purchaseStake()", +"18c10ad0": "disabled(uint256,uint256)", +"18c1d9b2": "bonusWallet()", +"18c1fc68": "buyOne(address,address,uint256,bytes)", +"18c20f44": "entrarAJuego(uint256)", +"18c26389": "multivestMint(address,address,uint256,uint8,bytes32,bytes32)", +"18c2d4c9": "initialSingleWithdrawMin(uint256)", +"18c306bd": "checkSignatures2(bytes32,bytes,bytes,bytes)", +"18c3cf34": "EthPriceProvider()", +"18c41a80": "mint(bool)", +"18c48e96": "bitRegisters(address)", +"18c53aca": "tokenIsComponent(address)", +"18c5bddc": "PRESALE_THIRD_DAY_START()", +"18c5e3af": "addInvestmentProposal(uint32,bytes24,uint256)", +"18c5e502": "GetTime()", +"18c8bda5": "Procare()", +"18c93884": "_setCrowdsaleStage(uint8)", +"18c9ef97": "mintETHRewards(address,uint256)", +"18caa857": "emitJobBinded(uint256,uint256,bool)", +"18cadf30": "getVATTransactionData(uint256)", +"18cc4c65": "startEngines()", +"18cd55f3": "canCreateGrants(address)", +"18cda1e7": "lockInternalAccount(address,bool)", +"18ce1a23": "BailOutToken()", +"18cee8a4": "setPlatformCommissionRate(uint256)", +"18cf1c25": "lookupDonation(uint256,uint256)", +"18cf85d1": "adminSetCityData(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"18cfa483": "invalidate(address,uint256)", +"18d0073e": "startNextMilestone()", +"18d0122a": "upgradeAgentStatus()", +"18d0376c": "getFastGap()", +"18d0a7cc": "incentFundAddress()", +"18d0c322": "EtherLambosCore()", +"18d0eb93": "finalizeAndDistributeToken()", +"18d30bfa": "setLastMoveTime(uint16)", +"18d32128": "CLVRCrowdsale()", +"18d43f0d": "userTokensValues(address,address)", +"18d4b4b3": "COCCToken()", +"18d4d326": "SAFethToken()", +"18d4e834": "getPrivilegeState()", +"18d62bc6": "PHXFlip()", +"18d6676c": "entityStructs(uint256)", +"18d69faa": "StopDistrib()", +"18d74c37": "deleteShare(address)", +"18d760be": "LogFinalize(bytes32,bytes32)", +"18d76b78": "CCIToken()", +"18d78358": "ICOCENTRAL()", +"18d80168": "startUnitRaffle(uint256,uint256)", +"18d80d4a": "check_prize()", +"18d84553": "calculatePayout(bytes32)", +"18d8ec5b": "validateWinnersCount(uint32,uint32,uint32)", +"18d8f9c9": "erc677token()", +"18d92a5d": "getRegistryDataCustodian()", +"18d95092": "domainOwner(string)", +"18d97731": "setPriceStep7(uint256)", +"18da0011": "treasuryContract()", +"18da650d": "WithdrawalInterCrypto(uint256)", +"18da754a": "setBuyMinLimit(uint256)", +"18dad1cd": "multiTransferFromValues(address[],address[],uint256[])", +"18db02e1": "etherToLEONRate()", +"18db0750": "contributionReward()", +"18db62fb": "checkValue(uint256)", +"18dcdfbe": "isRetirementAllowed(uint256,bool)", +"18dd97f0": "secondStageTokensForSale()", +"18de0afd": "getEnabled()", +"18deb066": "init(uint8,uint256,uint256,uint256,address[2],address[],uint256)", +"18debd27": "addWalletAddressAndTokens(uint256,address,uint256)", +"18def2a1": "DistributedCreditChain()", +"18df0038": "getSwapType(bytes32)", +"18df02dc": "Migrate(address,address,uint256)", +"18df11ee": "SpendingApproved(address,address,uint256)", +"18df6090": "mintBountytokens(address)", +"18dfcf7b": "_investorCount()", +"18e01199": "burn(uint256,bytes,bytes)", +"18e02bd9": "setTokenOwner(address)", +"18e0d683": "getBAI(bytes32,address)", +"18e124e4": "upgradePackageCountOf(address)", +"18e146f9": "InvestmentPolicyChanged(bool)", +"18e2d679": "describeTile(int32,int32)", +"18e2e4be": "getInvestor(address,address)", +"18e37cdd": "ITGToken()", +"18e3b44c": "setMemory(uint256,uint256)", +"18e3d998": "crowdSaleEndTime()", +"18e45427": "whitelistedContract()", +"18e4ac35": "isConfirmed(address)", +"18e4c3f3": "GMOON()", +"18e4d2db": "_AIExchangeSupply()", +"18e536bc": "comissionList()", +"18e6ab9c": "funding(address,uint256,uint256)", +"18e75a1c": "PresaleEDUSupply()", +"18e7eb4b": "PRE_SALE_1WEEK_BONUS()", +"18e857ab": "queried(uint256)", +"18e9e7ab": "listSimpleService(uint32,string,uint256,address[],address)", +"18eacb96": "GetDivs(address)", +"18ebcc8c": "takeOrder(uint256,uint256[5],uint256[3],bytes32[3])", +"18ecc6f4": "getTotalDividendsRounds()", +"18ece632": "superApprove(address,address,uint256)", +"18edf434": "_revokeConfirmation(uint256,address)", +"18ee00b6": "_changeRate(uint256)", +"18ee1b9f": "WithdrawEther()", +"18ee9d5e": "EtherIncognito()", +"18eeef80": "Wallet1()", +"18ef7adb": "transferAdvisorTokens(address,uint256)", +"18f0db29": "remainingBettingFor(uint256)", +"18f11de2": "BSSCoin()", +"18f2217a": "EPXtokenSupply()", +"18f2a0bb": "ownersConfirmedTransactions(address)", +"18f303a1": "SetInternalValues(uint8,uint256)", +"18f3a50d": "cooAddress2()", +"18f3fae1": "setOversight(address)", +"18f61c0d": "configRunTime()", +"18f729da": "founderLockance(address)", +"18f76a2c": "getCCH_edit_3()", +"18f7d5ad": "lastBlock_f13Hash_uint256()", +"18f80bb9": "createContract(string)", +"18f839bd": "Expensive()", +"18f873df": "chAllowTransfer(bool)", +"18f889c2": "setOracleGasPrice(uint256)", +"18f9266c": "talks(bytes32)", +"18f95486": "openPendingPartCrates()", +"18f96441": "getShipDetails(uint256)", +"18f96857": "Lazadex()", +"18f9b023": "addPayee(address,uint256)", +"18f9bdee": "allocationOpen(uint256)", +"18fa11ab": "revokeRequestorAddress(address)", +"18fa223a": "GGCT()", +"18fb75f4": "callDeposit()", +"18fc6513": "companyCurrentPeriod()", +"18fd3474": "HumaniqICO(address,address)", +"18fd8903": "refund(address,uint256,uint256)", +"18fdcaba": "getSumAmountOfDisputedDealsProDoctor()", +"18fe1a8d": "banToken(address)", +"18fe3df7": "_buildInternalSalt(uint128,address,address,address,uint256,uint64)", +"18fed50a": "getLast4Bytes(bytes32)", +"18ff1361": "manualyMintTokens(uint256,address,uint256,int256)", +"18ff318d": "thorToken()", +"190038dc": "supplyAdjuster()", +"190042b8": "CARA()", +"19006185": "getNumRefundTransactions()", +"1900aabf": "CollectChips(uint256)", +"190108b5": "getAyantDroitEconomique_Compte_3()", +"19013cf2": "detachFromStorage(address)", +"190151c6": "_createNumber(uint256,uint256)", +"19018557": "COCToken()", +"19022f20": "TTT()", +"1902e902": "adjustEntitlement(address,address,uint256)", +"190377a5": "getCategory(string)", +"1903bbe0": "_getQueryStr(uint256,uint256)", +"1903c10e": "setPI_edit_3(string)", +"190406b3": "customExchangeSecure(address,address,uint256)", +"19045a25": "recover(bytes32,bytes)", +"19055df2": "preSaleTokenExchangeRate()", +"19058903": "NewPassProject(address,address,string,string,bytes32)", +"1905fbf6": "setNewWallet(address)", +"19062b8f": "settleTransaction(uint256)", +"190663e4": "setGreeter(string)", +"1906a3d6": "getBonusFund(address)", +"1906ff98": "getVotePrice()", +"19077dca": "resetOwnership()", +"1908c425": "m_leeway()", +"1909773f": "get_milestone_information(uint256)", +"1909787f": "NextMint(uint256)", +"1909d314": "GCPrightToken()", +"190a2688": "changePrices(uint256[3],uint8)", +"190a338f": "_createAccount()", +"190a597b": "restartCrowdsale(address,uint256,uint256,uint256,uint256,string)", +"190a6aa9": "burn(address,uint256,bytes,bytes)", +"190a8613": "getNodeLeftChild(bytes32)", +"190a867e": "testThrowNoPartialTokens()", +"190bc9d4": "w_Advisers()", +"190bfa4d": "singleDVIPQty()", +"190bfcd0": "initialTokenValue()", +"190bfea8": "sellWei()", +"190c23c4": "adminSetTxFeePaidGame(uint256)", +"190c69a2": "unWhitelistUser(address)", +"190d9253": "testInitialContract()", +"190e4c77": "numOfProperties()", +"190e8266": "makeProduct(string,string,uint256,uint256)", +"190eaaba": "getDenominator()", +"190ef61d": "readAnalyticsMap()", +"190f4cfc": "doCalculate(uint256,uint256,uint256,bytes32)", +"190fe712": "payoutETH(uint256)", +"19110d05": "DTCC_ILOW_8()", +"19113b4a": "changeStatement(string)", +"19123c1f": "magnitude()", +"1912f84f": "BONUS2_LIMIT()", +"191313ae": "EndOfPayments(address,uint256)", +"191347df": "setStr(string)", +"1913742f": "appendSchellingSupplyChanges(uint256,uint256,bool)", +"191384d1": "viewMessage()", +"19141100": "bankRollDivest(uint256)", +"1914427f": "MultiSigWalletWithDailyLimit(address[],uint256,uint256)", +"19154616": "FART()", +"1916037d": "withReferrer(address)", +"19162a30": "getYumWithETH(uint256)", +"19165587": "release(address)", +"1916fcb7": "Galaxy100()", +"191723ed": "lockBalance(uint256,uint256)", +"191797df": "isStoped()", +"1917ab5c": "activate(string)", +"1917e6d1": "addDoctor(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"19190495": "SimulateCurrentDate(uint256,string)", +"1919cf62": "allEthShares()", +"1919fed7": "setSalePrice(uint256)", +"191ad190": "open_free()", +"191af4bc": "thirdroundprice()", +"191b548e": "VIVACrowdsaleRound(bool,uint256,uint256,bool)", +"191b8260": "_createScene(string,uint256[],address,uint256)", +"191be7b7": "getQueryResults(bytes32)", +"191d7a7a": "TVToken()", +"191d8cd7": "passToken(address)", +"191e2fc7": "setTokenizedRegistry(address)", +"191e39b3": "setOwnerCut(uint256,uint256)", +"191e521f": "moken(uint256)", +"191e8daa": "_getRand(uint256)", +"191f06e7": "setEscrowFactoryContractAddress(address)", +"192014f4": "buyKeyWithReff(string)", +"1920b2a6": "BitOnBayToken(uint256,string,string,uint256)", +"1920ed48": "isOwner(uint32,address,address)", +"19213471": "addFRA(address)", +"192159a6": "ListingCreated(uint256,uint256,uint256,uint256,address)", +"19216c4d": "getPreIcoInvestorsCount()", +"19216e8d": "freezeForOwner(uint256,uint256)", +"19218eda": "secondTokenExchangeRate()", +"192193b9": "transferFrom(address,address,int256)", +"1921c454": "priceChangeBlock()", +"19220c69": "TAKLIMAKAN()", +"1922936d": "RegisterTransferBeneficiaryContract(address)", +"1922e9b4": "getJobApprovals(uint256)", +"1922ff39": "payOut(address)", +"1923350f": "ADVISORS_TOKENS()", +"19236b4e": "getSanTimeAlive(uint256)", +"192399d1": "vestingBalance(address)", +"1923a4a3": "issuePercentToReserve(address,uint256)", +"1923e5d4": "noActiveBallotExists()", +"19240661": "setTrusted(address)", +"19245155": "StartedSafeUnlock(uint256)", +"1924f74a": "PVP_INTERVAL()", +"1925259b": "ShroomFarmer()", +"19254e2e": "getInsuranceStatus(address)", +"19261e6f": "setERC20ApproveChecking(bool)", +"1926b63d": "savePost(bytes32)", +"1926de89": "readInt256(bytes32)", +"1927a754": "drainEther()", +"1927a8ea": "listFiles(uint256,uint256)", +"19287f3a": "withdrawBalanceAll()", +"1928b3cb": "getPosition(bytes32)", +"19291c74": "getGoldStatusLastauditid(address)", +"192a4422": "safeWithdrawalAmount(uint256)", +"192b3092": "mintPreAllocatedTokens()", +"192b3608": "Bond(uint256,string,string,string,uint128,uint128,uint128,uint128,uint16,string,string,address)", +"192b663d": "vestSupply()", +"192b7700": "CitrusCrowdsale(address,address)", +"192d65c9": "getRoundByRId(uint256)", +"192e571d": "getPlayerByName(string)", +"192e7a7b": "releaseFunds(address)", +"192ecd68": "getDistrito(uint256)", +"192f1076": "crowdsaleEndDate()", +"193080cb": "getLockedContract(address)", +"1930fc01": "FastmarketNetwork()", +"193115b4": "changeHiddenOwner(address)", +"193118fa": "CPCCrowdsale()", +"193237f5": "_isValidSignature(address,address,bytes)", +"1932bb33": "lastBlock_a12()", +"19337d6c": "setLink(string)", +"193402bb": "PRE_SALE_PRICE()", +"1934d55a": "isPermanentlyApproved(address,address)", +"19350aea": "nameFor(address)", +"19354750": "setRegistryLogic(address)", +"1935f8d2": "Instacocoa(uint256,string,string,address)", +"19362921": "CONTRIBUTORS_SHARE()", +"1936a8cd": "getSeedByWinner(uint256)", +"1936dd8f": "writeMessage(string,string,string,string,string)", +"1936e4be": "advisor()", +"19375602": "challengeOwner()", +"1937714b": "confirmDeployment(uint256,address,bytes32)", +"1937b7fa": "Burnfrom(address,uint256)", +"1938a238": "softcapInTokens()", +"19397ed0": "Transfer(address,address,address,address,uint256,bool)", +"1939805f": "TPPC2018Token(uint256,string,string,uint256)", +"1939c1ff": "transfer(address[],uint256)", +"193a4249": "minFunding()", +"193a824e": "_escrow(uint256)", +"193a8a83": "getCCH_edit_28()", +"193ab829": "addGood(address,string,uint256)", +"193c114b": "transferTokensOut(address,address,uint256)", +"193c8da4": "AkikToken()", +"193c9be1": "getCreateShareToken(uint256)", +"193ccc20": "depositTokenToUser(address,address,uint256)", +"193d5b77": "getGiffBlock(uint32)", +"193df7ea": "addBlacklist(address,address)", +"193e06c4": "CalcPeriod(address,uint256)", +"193e6679": "MarginBanc()", +"193f69a1": "getPhaseBonus()", +"193fc711": "_getBeginIndexKey(uint256)", +"19404c2f": "replayAnserWithReferrer(uint256,uint256[],string)", +"1940a936": "isPregnant(uint256)", +"19424222": "approveAndCall(address,uint256,bytes32)", +"1942c3ce": "_transfer(uint256,address)", +"194307bf": "terminated()", +"19447eb6": "userStructs(address)", +"19449cb2": "changeAuthorizedCaller(address)", +"1944bc3d": "priceThresholds(uint256)", +"1946283a": "CarRegistrationFailed(uint256)", +"19465953": "changeInfo(string)", +"1946fdf4": "logicVersion()", +"19476244": "icoNumeratorPrice()", +"1947bd2f": "getMap(address)", +"194809a6": "finalistTeamFIFAIdsSet()", +"19483cd1": "checkHash()", +"19498426": "BOUNTY_REWARD_SHARE()", +"194a7adc": "CONNECT(uint256,string,string)", +"194b546b": "_addRec(uint256)", +"194b81d0": "TGxToken()", +"194c78d0": "setApp(string,uint256)", +"194c8e15": "Update_START_ICO_TIMESTAMP(uint256)", +"194d0de2": "createOrder(address,uint256,uint256,address,uint256)", +"194d297f": "canSend(bytes32,address,uint256,bytes)", +"194dee32": "setTokenForSale(uint256,address)", +"194e10ce": "run(bytes,uint256)", +"194e4acd": "reqvehreg(address,string,string,string,string)", +"194eb01c": "CimbomCoin()", +"194f4795": "getItemsLength()", +"194f8806": "setMigrationHost(address,address)", +"194f97ba": "setColorGreen()", +"194fe9a4": "transferWithBonuses(address,uint256,uint256)", +"195055f1": "isTransferable(address)", +"19507d2c": "allowedToTransfer()", +"19509649": "ImpactRegistry(address,uint256)", +"1950c218": "checkWhitelist(address)", +"1950ee41": "unlockPresaleTokens(address,uint256)", +"195199f6": "setDeadline(uint256)", +"1951f9ba": "isRequestPending(address)", +"19530f76": "multiTransferFixed(address[],uint256)", +"19547404": "sendTokens(uint256,uint256,address)", +"1954f39e": "EndDate()", +"195629de": "initMETToken(address,address,uint256,uint256)", +"195743fc": "claimSMRforAll(uint256)", +"19583b05": "modifyCollectorAddress(address)", +"1958623f": "BitcoinPluse()", +"1958ccb1": "setParams(address[],uint256)", +"195977a6": "emit(uint256)", +"1959a002": "userInfo(address)", +"195aa377": "SportsChainToken()", +"195ad926": "authenticate(uint256)", +"195b616c": "_unmountSameSocketItem(address,uint256,address,uint256)", +"195d06ff": "addBigPromoBonus()", +"195de8a1": "CapReached(address,uint256)", +"195e38b2": "EnergyModulationProject()", +"195e8688": "Osiris()", +"195ec9ee": "getAllParticipants()", +"195f4807": "getTotalPayouts()", +"195fa903": "ownersNum()", +"195fd221": "issueAmount()", +"19608123": "Vetricoin()", +"1960d761": "AccommodationCoin()", +"19617fe4": "coinBurnIco()", +"19618a9b": "testDivideFractional()", +"196198fa": "getDepositWithdrawCount(address)", +"1962d041": "SayadyToken()", +"1962df71": "_performTransferWithReference(address,uint256,string,address)", +"19638ca5": "CryptolifeToken()", +"1963a0d1": "OWN_freezeAddress(address,bool)", +"1963a693": "IncreaseAllowance(address,uint256)", +"1963df66": "dtGetWorldData()", +"1964569b": "Aktium()", +"19648bed": "batchSend(address,address[],uint256[])", +"1964dcbf": "SCCCOIN()", +"19656b46": "teansferFrom(address,address,uint256)", +"1965e183": "MIN_TOKENS()", +"19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", +"196667e4": "start_amount()", +"1966cdbe": "pickWinner(bytes32,uint256)", +"19677635": "TEAM_SALE_MULTIPLIER()", +"19679680": "emptyInactiveToken(uint256)", +"1967d701": "fuToken()", +"19682b09": "DonationDeposited4Doubling(address,uint256)", +"19689e76": "paySemiFinalWinner(uint256)", +"1968bf4f": "getPersonalStakeUnlockedTimestamps(address,address)", +"1968c160": "addPaymentDetail(address,bytes32,uint256)", +"1969c21a": "removePixelsFromMarket(bytes32)", +"196be409": "DLTESTToken(uint256,string,uint8,string)", +"196c16cb": "tokenPriceInEth()", +"196c9909": "_bounty()", +"196cd388": "isRangeInsideRange(uint256,uint256,uint256,uint256)", +"196e5c46": "sellSeeds()", +"196ecd25": "getOwnedCount(address,uint256)", +"196ee9c7": "remainingCats()", +"196f2f61": "njcoinToken()", +"196f5851": "transferAgents()", +"196f9aa5": "getLedger(uint8)", +"196fa707": "GAMEMAGICERC20(uint256,string,string)", +"19711d67": "campaignDurationDays()", +"1972172b": "satLimit()", +"19726b4e": "TheGoDigital()", +"1972b464": "emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", +"1972c8dc": "Eggfrenzy()", +"19739117": "checkSignatures(bytes32,uint256[3],bytes,bytes,bytes)", +"1973c5de": "icoPreEnded()", +"1973cae7": "nextPriceDate()", +"1973e795": "setWorkpointSupportCancel(uint256)", +"197425c4": "testSupplyOf()", +"1974a003": "_startAuction()", +"1974a540": "RoundIndex()", +"1975a9e7": "o_deus(bytes32,bytes32)", +"1976804a": "TTCoin(address)", +"19774b86": "bulkWhitelistInvestor(address[])", +"19774d43": "orderFills(address,bytes32)", +"19775795": "aquariumCost()", +"1977bd68": "pepePremine(uint256)", +"1977f5c6": "Anubis()", +"197828b1": "bucketHolding(bytes32,address)", +"1978658b": "setCaps(uint32[],uint256[])", +"1978a87b": "TokenERC20()", +"197a1976": "setInvested(address)", +"197a2820": "depositarLucro()", +"197a9187": "NodeAction()", +"197b9454": "paintingsCount()", +"197bc336": "holderAt(uint256)", +"197c0f3d": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"197c3555": "getPlace(uint256)", +"197c418f": "MyAdvancedToken7(uint256,string,uint8,string)", +"197cb5bc": "balanceLockedUp(address)", +"197d24ad": "changeModuleOwner(string,string,address)", +"197ea97e": "mintAsideTokens()", +"197f0f05": "getMarketInterestSetter(uint256)", +"197f3c29": "notLike(address)", +"197f8a82": "claimReveralTokens(address,uint256)", +"197f9508": "_getExchgAddr()", +"19806d8e": "s11(bytes1)", +"19810f3c": "withdrawShares(uint256)", +"19811fc9": "TPOMZ()", +"1981d521": "participate(uint8)", +"19825187": "changeMinToken(uint256)", +"1982640c": "walletOf(address)", +"1982c626": "withdrawOverpay()", +"1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", +"1983111d": "getTotalCompositionPrice(uint256[])", +"1983f4c2": "getDivsBalance()", +"1984a063": "StarbaseEarlyPurchaseAmendment()", +"1984a906": "preallocatedTokenAmount()", +"1984d419": "getProvisionBalance(uint256)", +"1985a440": "ContractRegistry()", +"1985acf0": "checkLimit(address)", +"1985f54a": "getScribe(address,address)", +"19863bb7": "ReDraw()", +"19869555": "evacuateToVault()", +"1986bc55": "stopBatchAssign()", +"1986f704": "setTrigger(address,bool)", +"1986fd4d": "getAccountWhitelist(uint256)", +"1987b887": "setTokenPorter(address)", +"1987da04": "secondPreSaleDate()", +"1987e50c": "getSellerAddressPayment(address,uint256)", +"1988f6fd": "didWithdrawProfit(bytes32,address,uint256,uint256)", +"1989a5ba": "canDoLoop(uint256,uint256,uint256)", +"1989d175": "YEAR_THREE_SUPPLY()", +"198a2085": "isATrustedContract(address)", +"198a5423": "presaleFundingGoalReached()", +"198ae785": "payTrnsTax(address,uint256)", +"198b5d0d": "MinimumPoStokens()", +"198c1f97": "getKeysfromETH(uint256,uint256,uint256)", +"198c548b": "supplyTokensSaved()", +"198df3b9": "LoginCheck(bytes32)", +"198e2b8a": "create(string,string)", +"198fa9a3": "isSigned(address,address,bytes32,uint8,bytes32,bytes32)", +"19901f1d": "TokenSale(uint256,uint256)", +"19901f20": "removeMultipleAllowedAddresses(address[])", +"19902b40": "changeCardAttr(uint256,uint16[5],uint16[5],uint16)", +"199099dc": "updateAccountState(address,uint256,bool)", +"1990ad6b": "private_delPermittedRoll(uint256)", +"1990f521": "fundings()", +"199156e4": "generatePresaleHouse()", +"1991d34a": "getDataColla_AB_02(string)", +"1991d6ac": "moveTokensFromSaleToExchange(uint256)", +"19921ad2": "AuthStart()", +"199317cf": "mining_uncle(bytes,bytes,uint256)", +"199326cb": "lastBlock_a2Hash_uint256()", +"1993584b": "countSecondWinners()", +"1994ad1e": "founderEggSupply()", +"19950c5b": "withdrawUnprotectedFunds(address,address,uint256,bool)", +"1995333b": "burnFunds(uint256)", +"1995b86d": "changeServerState(uint256)", +"199676c7": "TOKEN_RATE_40_PERCENT_BONUS()", +"19973261": "assigner()", +"19978a49": "rejectRequestUnpause()", +"1998524c": "updatePriceBottomInteger(uint256)", +"1998a5c4": "RHC()", +"1998aeef": "bid()", +"1998fb75": "addCar(uint80)", +"19996d50": "DinosaurFarmer()", +"1999cf37": "CHINESE_EXCHANGE_BUYIN()", +"1999eca8": "attack(uint8)", +"199a620a": "acceptNegotiationOwner(address)", +"199ba9e8": "basicFunctionReturn()", +"199c8b74": "SecvaultTest()", +"199cbc54": "totalVested()", +"199d70f4": "forceWithdrawRejected(address)", +"199d743a": "bountyTransfers()", +"199ed01b": "weightOf(uint256,uint256)", +"199f0791": "withdrawCntr(uint256)", +"199f4045": "NewRisk()", +"19a04a33": "SetDraftOrder()", +"19a08058": "setDelay(uint256,uint8,uint256)", +"19a0d492": "getValueOfInitialTokens()", +"19a0e572": "unverifyAddresses(address[])", +"19a17468": "ENS(address)", +"19a1b54f": "WEI_PER_ETHER()", +"19a1c691": "_removeChild(uint256,address,uint256)", +"19a1f592": "BONUS_AMOUNTS(uint256)", +"19a231eb": "getMilestoneDisputes(bytes32)", +"19a278b9": "getBAddress()", +"19a2bfd8": "unreadMessageCount(address)", +"19a32f66": "setHashByProvider(address,bytes32,bytes32)", +"19a3d0bb": "getMyStrippers()", +"19a3e3c0": "getAllRevenue()", +"19a50f49": "numUsers()", +"19a51554": "scheduleNextAuction(address,address)", +"19a523b0": "Violated(string,address)", +"19a5ce51": "oraclizeGasExtraArtwork()", +"19a64104": "Lockup6m(address)", +"19a6b356": "updateStrategyLabel(bytes15,string)", +"19a6fe7d": "setFixedAssets(bytes32,bool)", +"19a72fef": "DroneEmployeeROS(address,int256,address,address)", +"19a7e59d": "assertEq4(bytes4,bytes4,bytes32)", +"19a876c2": "stopPubTrade()", +"19a9119f": "prolongedDuration()", +"19a96e72": "setCarrotsMultiplier(uint8)", +"19a9c2f1": "generateId(string)", +"19aaff86": "claimAllDividends(address)", +"19ab453c": "init(address)", +"19ac2756": "TIER1_RATE()", +"19ac74bd": "userCampaigns(address,uint256)", +"19ac8c0f": "payComission()", +"19adda2c": "fairsaleProtectionOFF()", +"19ae8994": "test1(uint256)", +"19aec48a": "endTimeNumber()", +"19aec6a9": "newThreadEvent(uint256,string,string,uint256)", +"19af1bd9": "WeiRaised()", +"19af6f48": "crowdsaleTokenSold()", +"19afa824": "setFactoryInterface(address)", +"19afdfe1": "showMigrationAmount(address)", +"19b0297d": "info_BalanceOf(address)", +"19b05f49": "accept(uint256)", +"19b09f9b": "payWinner(address)", +"19b1f94b": "getLastAuditPass(address)", +"19b24684": "updateEntity(uint256,address,uint256)", +"19b35f3d": "organisationIndex(address)", +"19b36162": "updateParams(uint256,uint256,uint256,uint256,uint256,uint256)", +"19b3fa4b": "removeEmitter(address)", +"19b4006e": "get45(uint256,uint256)", +"19b500ef": "deposit_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256,uint256)", +"19b5176e": "memberGroupNameHash(address)", +"19b587ad": "putCompanyOnsale(bytes32,uint256)", +"19b61c09": "createSaddle1(uint256,uint256,uint256,address)", +"19b64015": "connectorTokens(uint256)", +"19b667da": "setFinalizeAgent(address)", +"19b6eabe": "setBounty(bytes32)", +"19b7b0b4": "acceptBid(uint256,uint256,bytes32)", +"19b7d7bd": "getBudget(address)", +"19b97530": "setFundariaPoolAddress(address)", +"19b985b3": "fixamt()", +"19ba0b63": "getNumberOfProjects()", +"19ba567c": "cancelAddOwnerRequest()", +"19bad1b2": "Stage1MEI()", +"19bb3c3d": "Reddit(uint256,uint256,bytes,bytes)", +"19bba58b": "_updateInventories(uint256,uint256,uint16)", +"19bdfc7f": "returnTokensFromHoldProjectAddress(uint256)", +"19be28ec": "CurrencySwap()", +"19be65f0": "GetBalance(address,address)", +"19bece1b": "buytoken(uint256)", +"19bee474": "totalFundsDistributed()", +"19bf01c0": "firstLockTime()", +"19c02b27": "allowTransfer(address,uint256)", +"19c039bc": "airDropJoin(bytes32)", +"19c0737f": "WineChainToken()", +"19c2a5b5": "auctionClose()", +"19c2b4c3": "getLastRequestId()", +"19c2f201": "GEN0_AUCTION_DURATION()", +"19c32e0b": "hmacsha256(bytes,bytes)", +"19c35319": "extendCaller(address,address,uint256)", +"19c38c66": "inPermission(address,bytes4)", +"19c46f51": "kscBatchBurnWhenMoveToMainnet(address[],uint256[],string)", +"19c47214": "getBlockVersion(bytes)", +"19c4e40f": "envelopeTypes(uint256)", +"19c54359": "createData(uint256,uint256)", +"19c55a31": "SearchByGit(bytes)", +"19c55cea": "cancelBid(bytes32,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint8)", +"19c5ab4b": "addAccountReader(address,address)", +"19c5b887": "bonusSize()", +"19c5b89c": "DToken()", +"19c5ef1b": "oneStepRate()", +"19c61b6f": "dealEndOffer(bool)", +"19c6c6cd": "THRD()", +"19c6eeb8": "getIPFS(address,string)", +"19c76700": "withdrawBankroll(uint256)", +"19c85a4d": "RakugoCrowdsale(uint256,uint256,address,address,address[])", +"19c87f1f": "toAddress()", +"19c8b591": "ChangeCurrencyAdditionFee(uint256)", +"19c97154": "getLastTicketTime()", +"19c9a4f3": "platformTokensAddress()", +"19ca6feb": "_appendSchellingSupplyChanges(uint256,uint256,bool)", +"19ca964c": "_isOperatorForTranche(bytes32,address,address)", +"19cac495": "isYes(uint256)", +"19cae462": "difficulty()", +"19cb355d": "requiredStake()", +"19cbe072": "contractFallback(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"19cc02aa": "airdropped()", +"19cc1ec4": "maxContributionAmount()", +"19cddd4b": "hackoin(string,string)", +"19ce4432": "DMPhuongToken()", +"19ceb660": "Ticket_Price()", +"19d0f54d": "allowRecovery()", +"19d152fa": "vestingToken()", +"19d1997a": "supplyLimit()", +"19d1b6c6": "getRegistrationRight(address)", +"19d1d967": "MOAC()", +"19d2993e": "phase1DurationInHours()", +"19d2fe85": "_iD()", +"19d3237c": "setDataColla_001_002(string,string)", +"19d375f1": "isLeagueRosterContract()", +"19d3be48": "_getPartId(string,uint8,uint8,uint8)", +"19d40b08": "approved()", +"19d41c69": "ticket_price()", +"19d45925": "isJobHasFreelancer(bytes)", +"19d45a08": "launchContract()", +"19d46f71": "makeWeeklyInvest(uint256)", +"19d4c380": "setBestGuessSecondPlaceTentativeWinningPayoutDistributionHash(bytes32)", +"19d56f84": "BuyChestSuccess(uint256)", +"19d70e0b": "createSaleAuction(uint256,uint256)", +"19d7943a": "reLoadXid(uint256)", +"19d8ac61": "lastTimestamp()", +"19d9217c": "midTermHolding()", +"19d9c8df": "ScaleObs(address,bytes32)", +"19da8c99": "getICOStatus()", +"19dacbf8": "Deposit(address,bytes32,uint256)", +"19dad16d": "setOwnerCutPerMillion(uint256)", +"19dba3d2": "getBountyToken(uint256)", +"19dc2525": "closeChannelEcrecover(bytes32,uint8,bytes32,bytes32,uint256)", +"19dc831a": "withdrawHavvens(uint256)", +"19dd9455": "getContractTimestamp()", +"19ddd5a3": "_buyXname(bytes32,uint256,bytes32)", +"19de029a": "setBountyDuration(uint256)", +"19dec62a": "approveAgreement()", +"19e044f8": "MockToken(uint256)", +"19e06f20": "mintIssuerToken(address,uint256)", +"19e072ef": "updateStatus(bool)", +"19e0a0cf": "sendTokensWithLock(address,uint256,bool)", +"19e0eb0e": "currentBlockHash()", +"19e13c93": "winningTeamName()", +"19e1568c": "pause_1()", +"19e1d8d4": "Luckblocks()", +"19e1fca4": "allowed()", +"19e3897a": "UpdateUserExtraData2(address,bytes32)", +"19e3a1d8": "BoomstarterICO(address[],address,uint256,bool)", +"19e4540b": "getBankAccount()", +"19e5221a": "getBonusFee(uint256)", +"19e5bf3a": "Register()", +"19e5d0cb": "mintInPeriodCount(uint256)", +"19e66508": "ztToken()", +"19e6ab23": "icoDiscountLevel1()", +"19e6e158": "totalVotes(uint256)", +"19e740c0": "getNextVestingIndex(address)", +"19e743fe": "addICOToken(address,address)", +"19e77c34": "startSlotAt()", +"19e7998c": "votingInfo()", +"19e7fbc2": "totalEthPos()", +"19e82d86": "cfi_whitelist(address)", +"19e82e6f": "BrokerBank(address,uint256,address,address)", +"19e858e5": "processCollateral(address,address,uint256,uint256,uint256,uint256,bool)", +"19e860c1": "secondPrivateLockedAmount()", +"19e9e5de": "getGooProduction(address)", +"19ea61db": "testFailTransferDisabled()", +"19ea809b": "intercrypto_convert(uint256,string,string,address)", +"19ea8a98": "setPackSaleAddress(address,address)", +"19eae36b": "setMaxBlockPurchaseInOneGo(uint256)", +"19eaeccb": "getInfoCellLockup()", +"19eb4a90": "getValues()", +"19eb5dc6": "transferToken(address[])", +"19eb691a": "curUserId()", +"19eb8d48": "canVote(address,uint256)", +"19ecb310": "allocateTicket(address,address)", +"19eced6d": "mCURRENT_STATE()", +"19edc0aa": "minimalInvestment()", +"19ede85a": "Hydron(uint256,string,string)", +"19ee1f1c": "getPrizeFund()", +"19ee5bca": "BountyManagerEntity()", +"19f02ceb": "set(address,address,uint256)", +"19f1cded": "getStakedTeller(address)", +"19f1d7b0": "Kentkoin()", +"19f2b931": "removerAssinatura(string)", +"19f30aaa": "hire(uint64,address[])", +"19f353bb": "protectionPrice()", +"19f37361": "isToken(address)", +"19f3edec": "_released(uint256,uint256)", +"19f4ff2f": "setFeeRatio(uint256)", +"19f577b3": "placeBuyOrder(uint256)", +"19f8dee9": "isEthWithEnc(uint16)", +"19f97a46": "createContractPlace(string,string)", +"19fa55bd": "MinasAlbarit()", +"19fa8f50": "InterfaceId_ERC165()", +"19fa9f72": "DNNToken()", +"19fac8fd": "setCommissionRate(uint256)", +"19fb361f": "transferTo(address,address,uint256,bytes)", +"19fb52db": "mainPoolCutPercentage()", +"19fc36ed": "MIN_TRANSFER_TIMESPAN()", +"19fc3b9d": "getMyHolding()", +"19fc5b88": "minEthAmount()", +"19fc5dfa": "LogBeneficiarySet(address,address)", +"19fc9e54": "cashInvestment(address,uint256)", +"19fce740": "capCommitment()", +"19fd93f1": "unregisterSsp(address)", +"19feda7e": "addEmployee(address,address,uint256,uint256)", +"19ff1d21": "hello()", +"19ff7096": "cost_of_transfers()", +"1a000513": "getLotteryResultTotal(address)", +"1a0058f5": "getBatchInfo(uint256)", +"1a006503": "hasAlreadyClaimed()", +"1a009265": "setArrBoolField1(bool[])", +"1a013939": "gameStarted(string,uint256,uint256,uint256)", +"1a017f3f": "transferPrivileged(address,uint256)", +"1a026c96": "wallet1()", +"1a02af40": "tokensInAuctionsOfOwner(address)", +"1a036357": "removeDeactivatedList(address)", +"1a038873": "FREEZE_TIME()", +"1a041463": "retryOraclizeSetProof(uint256)", +"1a04d5c5": "startingFeeBalance()", +"1a053713": "unblockTokenFunds(address,uint256)", +"1a05619b": "infoTier()", +"1a05ba8d": "setPI_edit_12(string)", +"1a06008a": "dividendFund()", +"1a069c72": "contribute(uint256,uint256,uint8,bytes32,bytes32)", +"1a0725ce": "wagerIndex()", +"1a0726df": "getHatValue(uint256)", +"1a080a7a": "placeBet(uint8,int8,uint256,uint256)", +"1a081330": "isSaleOpen()", +"1a08a7bf": "ConfigAction()", +"1a08b189": "setFounderAddress(address)", +"1a0919dc": "unregister(bytes32)", +"1a092541": "getDescription()", +"1a09510a": "index(address[],address)", +"1a0a617d": "fetchVoteInfoForCandidateByIndex(uint256,address)", +"1a0a8fae": "creditJackpotTokens(address,uint256,uint256)", +"1a0a9ac7": "KNOXV()", +"1a0abd34": "getMyDepositAmount()", +"1a0b1b86": "crowdPrice()", +"1a0b4656": "LiveStarsToken()", +"1a0bc596": "pandora()", +"1a0be73f": "DispatchHub()", +"1a0c3479": "decreaseApproval(address,uint256,bytes,string)", +"1a0c83f8": "buyerLastPaidAt(uint256,address)", +"1a0d77b9": "ClaimAmount()", +"1a0ddce9": "setRewards(address[],uint256[],uint256[])", +"1a0de74c": "selectWinners()", +"1a0e722b": "LogDeliverEVN(address,uint256)", +"1a0f0bf1": "unrestrictedMintToPool(uint128,uint256,uint128)", +"1a0f2f5f": "BroToken()", +"1a0f518d": "updatePlayerBalance(address,int128,int128,uint256)", +"1a0faecf": "addNewMeme(uint32,string,string,string,string)", +"1a0fb847": "disperseRewards(address,uint256)", +"1a10cfc3": "delete_entry(uint256,uint256,uint256)", +"1a11415e": "PRIVATESALE_BASE_PRICE_IN_WEI()", +"1a120481": "enlist()", +"1a12e7a9": "setCreationFee(uint64)", +"1a144940": "codetokenIndexToOwner(uint256)", +"1a145c34": "getNumEthTweets()", +"1a148644": "newDocument(string,string)", +"1a14e94a": "buyAnimal(uint256)", +"1a14f128": "EventCreateAccessory(address,uint256)", +"1a14ff7a": "getD()", +"1a1542e6": "checkGameResult()", +"1a15b206": "holdTokens(address,uint256)", +"1a160fe9": "checkPermission(address,address)", +"1a170aa1": "buyTickets(bytes32)", +"1a1773f4": "otherchainstotalset()", +"1a182801": "createNewCertifier()", +"1a18e707": "setBlockReward(uint256)", +"1a197588": "availableAmount(address[3],uint256[4])", +"1a19b0da": "confirmEngineerQuest(address)", +"1a1a0d65": "distributeSRNT(address[],uint256)", +"1a1a0d76": "updateTopicDescription(bytes15,string)", +"1a1a4ed7": "HALVING_DELAY()", +"1a1a7993": "random(uint64)", +"1a1a8da8": "WebPay()", +"1a1aab46": "unlock_times(uint256)", +"1a1abe3d": "sizes(uint8)", +"1a1b8d08": "CompleteInit()", +"1a1c59e2": "setBidSubmissionProofsAdd(address)", +"1a1ceb11": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,bool)", +"1a1d28aa": "ClaimAcornShare()", +"1a1dca07": "setLockFunds(address[],uint256)", +"1a1df394": "Play(bool)", +"1a1e01d5": "pushAllRemainToken(address)", +"1a1eea7d": "ProposalRequestSubmitted(bytes32,uint256,uint256,string,address)", +"1a1feae1": "txGasPriceLimit()", +"1a2084f1": "updateCreator(address)", +"1a209776": "isVerified(address,uint256)", +"1a21bb22": "PREVIPdeadline()", +"1a21c229": "gracePeriodMaxTarget()", +"1a2309f0": "CONTRIBUTION_MAX()", +"1a23bee3": "endOfROSCARetrieveFees()", +"1a24b91a": "setPriceFee()", +"1a24befc": "clearSaleSharesSold(uint256)", +"1a254884": "Coffeecoin(uint256,string,uint8,string)", +"1a256090": "sawan()", +"1a25e513": "upgradeProvider(address,address)", +"1a261fda": "scoreUp(address)", +"1a26ed1c": "validateReservedWindowSize(uint256,uint256)", +"1a2a4ab5": "withdrawDeadFund(address)", +"1a2a627c": "nextroundtotalsupplyGOTCH()", +"1a2ad007": "GetCurRoundInfo()", +"1a2b3431": "completeBooking(uint256)", +"1a2b3adf": "signedTransferFromHash(address,address,address,uint256,uint256,uint256)", +"1a2b4cd8": "airDropPool_()", +"1a2b6250": "canPerform(address,address,bytes32)", +"1a2c4334": "FortuneGodToken(address)", +"1a2c752a": "testLimiting()", +"1a2d3be8": "masterNodable()", +"1a2d72fb": "_api_PlaceBet(bool)", +"1a2d8629": "getinfo()", +"1a2e2b2c": "getHolderIndex()", +"1a2eaaeb": "Unicoin()", +"1a2f1640": "amountSecond()", +"1a300a98": "_setCooldownEndTime(uint256,uint256)", +"1a3057f3": "performAddToken()", +"1a30ec13": "ETHWallet()", +"1a311968": "roundICO()", +"1a3142bd": "depositAndWithdraw(uint256)", +"1a314552": "isUsernameExists(string)", +"1a31752a": "masternodes(uint256)", +"1a31e733": "WinningsClaimed(address,uint256)", +"1a327d97": "bitmask_rm(address,uint256)", +"1a3352c1": "getOrderBookSize()", +"1a3480b5": "rateDecimals()", +"1a34b59d": "OjtToken()", +"1a34fe81": "max_amount()", +"1a3538f3": "closeFailedInstallationAndWithdraw()", +"1a360f5f": "EWM()", +"1a363bf1": "giveMeTokens()", +"1a365f2b": "stampIndexToOwner(uint256)", +"1a3722b2": "grantPermission(uint8,address)", +"1a372eaa": "allPiranhasInfo(uint256)", +"1a3739ec": "getInitialReporter()", +"1a389eb9": "exploreFastenEMONTFee()", +"1a38fa06": "distributeBounty(address[],uint256[])", +"1a399698": "genDailySecondPrizeKey(uint8[4])", +"1a39d8ef": "totalAmount()", +"1a39e1cf": "addAffiliate()", +"1a3a67d8": "zGetGameID()", +"1a3ae67a": "getPlatBalance()", +"1a3b8bad": "CABoxCrowdsale()", +"1a3cb4f5": "getBalanceA(bytes)", +"1a3cd59a": "getInfo(uint256)", +"1a3d069b": "totalEuroUlps()", +"1a3d96ff": "IdentityManager(bytes32)", +"1a3dc39c": "getRewardPotSetting()", +"1a3de5c3": "_pay()", +"1a3e42d0": "setSignUpOnOff(bool)", +"1a3e5457": "validDestination(address)", +"1a3e91b9": "getTitle(bytes32)", +"1a3f9eb5": "getVanillaERC20BalanceSlot(address,uint256)", +"1a421103": "getProperty(address,bytes32)", +"1a426550": "claimBounty(uint256,string)", +"1a429a0e": "SCND_CRWDSALE_RATIO()", +"1a433daf": "withdrawProposedAction()", +"1a437780": "orderOnFightAuction(uint256,uint256,uint256)", +"1a43c338": "compute()", +"1a44731c": "statePhase()", +"1a454ea6": "COMMISSION_RATE()", +"1a45fac7": "removeOwner(address,address,address)", +"1a463a7d": "amountReceived(uint256)", +"1a464fa1": "claimProductOwnership(bytes32)", +"1a470b6a": "SweepBalances()", +"1a476260": "indiFundAndSocialVaultDeposit()", +"1a4813d7": "setBaseRate(address[],uint256[],uint256[],bytes14[],bytes14[],uint256,uint256[])", +"1a488a60": "zpzToken(uint256,string,uint8,string)", +"1a48fb3a": "testDeleteLawyer()", +"1a49803b": "investWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", +"1a4a1a6c": "benefactorsBalance()", +"1a4b4cff": "updateWithdrawalModeByIndex(uint8,uint32)", +"1a4b746f": "CharacterRegistry()", +"1a4bcc4a": "validTokenBalance(address)", +"1a4be5d8": "HITSCoin()", +"1a4be6ff": "ConstantConfig(uint256,bool,bool)", +"1a4c24f9": "purchaseInternal(address,uint256,address)", +"1a4e0afd": "countBit(uint8)", +"1a4e1e78": "tips()", +"1a4e9a6c": "getWithdrawConfirmations(uint256)", +"1a4f5b67": "isFrontRunnerPeriodOver()", +"1a4fb653": "getGDemoc(uint256)", +"1a4fbee1": "committeesArrayIndexCounter()", +"1a514d97": "reActivate()", +"1a51a28c": "contributorsAllocation()", +"1a52691b": "refundForAll(uint256,uint256)", +"1a534fd1": "calcCanAcceptAmount(address,bool,uint256)", +"1a5375e1": "passTurn(uint256)", +"1a53cd90": "presaleBalancesLocked()", +"1a555b0c": "NewClonedToken(address)", +"1a55ad28": "_verifyProof(string,bytes,bytes,uint256)", +"1a55b8f7": "BACKUP_ONE()", +"1a582962": "isMintingFinished()", +"1a58349a": "fetchCreatedOrdersForPayerByAdmin(address)", +"1a5834aa": "start_game(string,string)", +"1a592bc1": "saasPayUser()", +"1a5ab391": "Wallet7()", +"1a5b189d": "NCASHTOKEN()", +"1a5b72c3": "endStage3()", +"1a5b8f96": "MAX_SITE_ID()", +"1a5bd7fc": "getTournament(uint256)", +"1a5d3b75": "getAssetIdOwner(uint256)", +"1a5d60bd": "removeBoard(address,address)", +"1a5dbe98": "iflea()", +"1a5e2110": "tokensPerEthPrice()", +"1a5e6f7d": "getOneBet()", +"1a5e7852": "kaliSupply()", +"1a5eba21": "invest(uint256,string)", +"1a5f9613": "DevMiningRewardPerETHBlock()", +"1a5f9bed": "exploreUsingETH(uint256,uint256)", +"1a620a3e": "AgriChainMasterContract()", +"1a6253ed": "ownerTransferPHX(address,uint256)", +"1a629b00": "AddTokensToMember(address,uint256)", +"1a62c928": "approveAllocation(address,address)", +"1a62f6f7": "escrowReturn(address,uint256,uint256)", +"1a63aa4d": "prolong(uint256)", +"1a64937b": "cleanupAbandonedGame(address)", +"1a64adae": "vestedTokens(address,uint256)", +"1a65569b": "placeBid(uint256,uint256,uint256,uint256,bytes32)", +"1a65d3c2": "SnakeFarmer()", +"1a65e283": "buyCountry(uint256)", +"1a668c42": "finishAirdrop()", +"1a67456e": "getNumberOfItemsByTypeAndOwner(string,address)", +"1a67d6e5": "MainSaleClosed()", +"1a68b1a1": "setRetirementManager(address)", +"1a690752": "UDCC()", +"1a695230": "transfer(address)", +"1a699085": "view64()", +"1a6a3c03": "GetEscrowOwner()", +"1a6a57f4": "getInviters()", +"1a6af7b7": "currTime()", +"1a6b0e73": "addArts(address)", +"1a6b13e2": "changeMinimumTakerProtocolFee(uint256)", +"1a6becd6": "getAllDividends()", +"1a6c0983": "getShipSell(uint32)", +"1a6c6e38": "MagicStore(address)", +"1a6c9c0d": "withdrawStart(uint256[],uint256,uint256,uint256)", +"1a6d7561": "getFundingInfoOfPhase(uint8)", +"1a6dafa6": "getJackpotRoundEndTime()", +"1a6e1315": "pay_salary(uint256)", +"1a6e2445": "changeRelease(uint256)", +"1a6ea411": "MANHATTANPROXY5THAVE()", +"1a6f1974": "disableNodeRegistration()", +"1a6f56a0": "balancesLocked2Y(address)", +"1a6f7be5": "voteNo(uint256)", +"1a6fb342": "getTransferStatus()", +"1a700013": "inWhiteList(address,address)", +"1a700a95": "QWHappy()", +"1a701609": "HEAD()", +"1a70388f": "shareToWei(uint256)", +"1a70d015": "exchangesTokens()", +"1a715bcf": "lauToken(address,address)", +"1a71733c": "determineAllocation(address,address[],uint256[])", +"1a71d3db": "freezingBalanceNumberOf(address)", +"1a7303de": "eddToken()", +"1a73293d": "updateWhitelist(address,uint256)", +"1a74d536": "hasExited(address,address)", +"1a750945": "vote03YesCount()", +"1a751b2c": "makeMonthlyInvest(uint256)", +"1a7626e7": "minimumFee()", +"1a76e30c": "BONUS_DAY2_DURATION()", +"1a776b3c": "reclaimSurplusEth(address)", +"1a7777bb": "getMarketSpreadPremium(uint256)", +"1a787915": "startConditions(bytes32)", +"1a790a2c": "_setPowerPool(uint256)", +"1a79464e": "setFeeBurner(address)", +"1a799617": "revokeRound(uint256)", +"1a79bbef": "addAddressToMaster(address)", +"1a79c5de": "setTimeWindow(uint256,uint256)", +"1a7a98e2": "getDomain(uint256)", +"1a7ae0ba": "updateCostUSD(uint256)", +"1a7aed0e": "_checkMyAging(address)", +"1a7b11f5": "epoch_fund()", +"1a7b9fe7": "setCouponRatio(uint32)", +"1a7c6eb0": "getHalvingBlocks()", +"1a7c7105": "__load128(bytes)", +"1a7cecb2": "recoverAddressFromCooperativeSettleSignature(uint256,address,uint256,address,uint256,bytes)", +"1a7cf619": "round0StartTime()", +"1a7e0c50": "totalBaseLareSoldInPreSale()", +"1a7f8588": "IRE()", +"1a7facff": "rcn()", +"1a7fae47": "pubkeys2(uint256)", +"1a8012e4": "is_active()", +"1a809b02": "unpauseRefund()", +"1a81284b": "CCH_FGRE_1()", +"1a81a01f": "configContract(uint256,address[],uint256[],uint256[],uint256[],uint256[])", +"1a81c3a2": "getUserContract(address,uint256)", +"1a81e7b4": "getExtender()", +"1a82844c": "getERC721AmountPawn(uint256,address)", +"1a82eeb4": "ocpTokenContract()", +"1a833d3f": "trancheNumerator()", +"1a83690d": "Work()", +"1a841b1b": "configureFromStorage()", +"1a8432ea": "isUnLockedAccount(address)", +"1a844205": "SaintCoinWorld()", +"1a859db8": "rewardsAccounts(uint256)", +"1a85bd57": "_find(uint256)", +"1a85c6cb": "RandomNumber(uint8)", +"1a85f4fb": "UrlHint(int256)", +"1a85f7d2": "applySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1a860d91": "AddUser(string,address,uint256)", +"1a861d26": "maxLimit()", +"1a86430e": "calcTotalShareRewardFee(uint256)", +"1a86535a": "GetWhoSignedAVersion(string)", +"1a86ac4f": "initialAddressSet()", +"1a86d5b6": "sendToOtherBlockchain1(string,string)", +"1a871a2c": "playerCharacter(uint256,uint8)", +"1a88bc66": "slot()", +"1a88cc31": "getCommissions(uint256)", +"1a88f306": "transferFromContract(address,uint256)", +"1a8932d9": "allocated2Year()", +"1a8943dd": "overflowResistantFraction(uint256,uint256,uint256)", +"1a895266": "unBlacklist(address)", +"1a8a5de1": "citizensAmounts()", +"1a8a85f3": "checksum(address)", +"1a8af7a8": "restartMint()", +"1a8b1874": "endprivate()", +"1a8c7243": "presale_finish()", +"1a8dc392": "checkAddressTeamTwo(address)", +"1a8f8f3e": "MJCCToken()", +"1a8fc985": "INITIAL_TOKENS_PER_ETHER()", +"1a9069cf": "signDate(bytes32)", +"1a90f0c4": "numTurnsToRevolve()", +"1a918bdd": "addTraps(uint256,bytes,uint256[])", +"1a92e6da": "Veegotoken(uint256,uint256)", +"1a9360dd": "checkDate()", +"1a93d1c3": "getGasLimit()", +"1a93fa4b": "reorganizeSubUsers()", +"1a9425c1": "verified(uint256)", +"1a94d49b": "BASE_BET_ETHER()", +"1a955061": "numToWei(uint256,uint256)", +"1a95bc99": "GreatHarmon()", +"1a95f15f": "TICKET_PRICE()", +"1a968069": "multiSig(bytes32)", +"1a974bb5": "KOCMOC()", +"1a97d1fa": "CLASSYToken()", +"1a98d0de": "whitelistedParticipantsLength()", +"1a991f0d": "approveSpenderDecimalAmount(address,uint256)", +"1a9938aa": "activateAddress(address,bool)", +"1a994fd2": "addVideoGame(string,address,uint256)", +"1a99bed2": "VestingSent(address,address,uint256,uint256,uint256)", +"1a9a01fb": "removeGame()", +"1a9a0426": "setDecimal(uint8)", +"1a9aa710": "ownerAuctionCount(address)", +"1a9aea0a": "lockTransfer()", +"1a9b0b7c": "isWinner()", +"1a9b26a2": "decode(bytes,uint256,uint256,uint256)", +"1a9b70f2": "destroyBlockFunds(address)", +"1a9be331": "getFastExtra()", +"1a9bf9cf": "bountyTokens()", +"1a9c4571": "listEggsIds()", +"1a9caab9": "createGen0(uint256)", +"1a9d64c8": "publicsale_address()", +"1a9df17b": "OrderPaid(uint256,address,uint256,uint256)", +"1a9df9d4": "getLowerSend()", +"1a9e3e18": "ownerBuyCut()", +"1a9f170d": "buyIcoToken1()", +"1a9f66c4": "StrimTeam()", +"1a9faa80": "setUpdateAddress(address)", +"1aa022bf": "UacToken()", +"1aa02d59": "set_fee(uint256)", +"1aa05ab6": "testSellTwoTokens()", +"1aa19567": "interruptLastRound()", +"1aa20b68": "verify(address,uint256,uint8,bytes32,bytes32)", +"1aa260c0": "withdrawAsSupporter(uint256)", +"1aa2852f": "DToken(address)", +"1aa359ff": "newTokenContractAddress()", +"1aa37733": "AudCoinToken()", +"1aa3a008": "register()", +"1aa43078": "minTime()", +"1aa44efd": "createNamedDistrict(uint256,string,bool)", +"1aa49291": "Getter()", +"1aa57ec5": "TokenLab(address,uint256,uint256)", +"1aa58bd3": "isAetherClockAuction()", +"1aa5b55c": "stageTwoStart()", +"1aa5c70e": "getDAI(uint256)", +"1aa6e29f": "hasOneYearWithdraw()", +"1aa7655c": "START_TOKENS()", +"1aa7e54c": "dungeonDifficulty()", +"1aa859d0": "remTokenPairWhitelist(address,address)", +"1aa86370": "updateXIPFSPublicKey(string)", +"1aab7bb5": "setParamsPreSale(bool)", +"1aab9a9f": "holderCount()", +"1aabaffe": "WhaleToken()", +"1aac38c8": "addPhase(uint256)", +"1aacd03c": "checkNewPlayer(address)", +"1aad5bc2": "_getRarity(uint256)", +"1aad8b82": "calculatemortiesell(uint256)", +"1aadadaa": "getRegistrantFund(address)", +"1aadcc34": "convertGreyGreen(uint8,uint8)", +"1aadddea": "investorGiven()", +"1aae3460": "investedAmountOf(address)", +"1aaf39ff": "check_dividend(address)", +"1ab06ee5": "set(uint256,uint256)", +"1ab08c61": "albosAddress()", +"1ab1025c": "tokensOutInMarket()", +"1ab12b10": "CurrentDevFee()", +"1ab268d6": "getCompleteSetCostInAttotokens()", +"1ab27060": "Unapproved(address,address)", +"1ab2935c": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256,uint256)", +"1ab30817": "gasLimitForOraclize()", +"1ab3a6c8": "getParentsForTokenId(uint256)", +"1ab3c515": "balanceOfLocked1Y(address)", +"1ab3d055": "removeAdminWhitelist(address[])", +"1ab46d4e": "referralBonusCalculate(uint256,uint256)", +"1ab51aec": "buyEPU()", +"1ab59612": "setAllowPriceLower(bool)", +"1ab5c5b8": "adduser(address,uint256,uint256)", +"1ab5d260": "transferTo()", +"1ab681e8": "withdrawEth(uint256,address,bytes32)", +"1ab733a3": "getTotalProfits(address)", +"1ab7df5f": "addUserTokens(address,uint256)", +"1ab86572": "calculateRoom(uint256,uint256,bool,uint256)", +"1ab8bc44": "_setMilestoneTo(address,uint256,uint8)", +"1ab8ff3b": "_finalization()", +"1ab961a1": "BSDB()", +"1ab971ab": "setFee(uint32)", +"1abb0ba9": "getTotalCurrentSaled()", +"1abb10e8": "chipSpeed()", +"1abb7192": "YCCToken(uint256,string,uint8,string)", +"1abca540": "Toptech()", +"1abd409d": "champsForSaleCount()", +"1abe8385": "InvestmentToken()", +"1abebea8": "LogSetAuthority(address)", +"1ac10d11": "testGreatherThanOrEqual()", +"1ac10f1f": "setPixelRate(uint256)", +"1ac14219": "testEns()", +"1ac25a81": "RegisterDrupal()", +"1ac25e99": "extractBalanceProofSignature(address,uint32,uint192,bytes)", +"1ac33b3d": "createTrack(bytes32)", +"1ac39336": "GelatoCoin()", +"1ac3ddeb": "withdrawFee(address)", +"1ac46290": "setProviderInfo(uint256,string)", +"1ac4754b": "redeemInternal(address,bool)", +"1ac47963": "functionSeven()", +"1ac589b4": "setJoiningFee(uint256)", +"1ac58dd5": "kimsCreated()", +"1ac5c96f": "test_4_someTest()", +"1ac61e8c": "testBlobCreate()", +"1ac68a12": "HavvenGoldSupply()", +"1ac7e1f9": "CollectedAllFees(address,uint256)", +"1ac84690": "powerOf(address)", +"1ac8a9b2": "teamlock()", +"1ac8aa4e": "minimowea()", +"1ac9180e": "tokenReinvest(uint256)", +"1ac96124": "numOfCommon()", +"1ac975ed": "UcCoinPriceChanged(uint256,uint256)", +"1ac9f70d": "multiplicate(address)", +"1aca00fd": "variable(uint256)", +"1aca120b": "updateAnimalSpecial(uint256,bool)", +"1acb2719": "getNextRequest(address,address)", +"1acb7077": "setCentsPerToken(uint256)", +"1acbf6e0": "alfatokenFee()", +"1acc26bc": "disableLimit()", +"1acc478a": "getContentMetrics(address,address,bytes32)", +"1acc57b8": "AGENCY_TOKEN_CAP()", +"1acd8237": "LEK(string,string,uint256,uint8)", +"1ace02a3": "RaptorsvsWizards425()", +"1ace4d05": "bigAmount()", +"1ace88a4": "realWorldPlayerTokenForPlayerTokenId(uint32)", +"1acf6485": "requestWithdrawalFromLimit(uint256,string)", +"1acfd02a": "changeAdmin(address,address)", +"1ad065f1": "prepare(uint256,address,address,uint256)", +"1ad11fd1": "TrieToken()", +"1ad2ad1a": "stopPresale()", +"1ad50586": "safePower(uint256,uint256)", +"1ad509f0": "MUIcoin()", +"1ad6037f": "LEXInContract()", +"1ad607da": "_addUserCity(address,uint256)", +"1ad614c3": "setRequireAuthorisation(bool)", +"1ad66d21": "earlyPurchasesLoaded()", +"1ad781b4": "PennyGrab()", +"1ad7c199": "callVote()", +"1ad874b4": "presaleOn()", +"1ad8f65b": "distribute_for_founders()", +"1ad8fde6": "changeSymbol(bytes32)", +"1ad95744": "START_ICO()", +"1ad9f190": "getUserHotGoldBalance(string)", +"1ada70a8": "lockupDuration()", +"1adadda8": "claimLockedTokens(address)", +"1adb4842": "setLockup_jishis(address,uint256,uint256)", +"1adb631b": "distributePuppyCoinMedium(address[])", +"1adbdfab": "SimpleApproveTransfer(address)", +"1adc36b9": "doesUserOwnCeleb(address,uint256)", +"1add4f5a": "tranferMoneyToName(bytes32)", +"1add5486": "Multiownable()", +"1add6bcf": "getDoubleKeccak256(uint256)", +"1adda83a": "calculateTokens(address,uint256,uint256)", +"1adf2bec": "CancelOrder()", +"1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", +"1adf42fb": "setPreICO(bool)", +"1adf692f": "_changeSquarePrice(uint8,uint256)", +"1ae0a693": "SetApplicant(bytes32[])", +"1ae0b4d0": "master5invest()", +"1ae0c787": "getControlInfoMaxTotalImbalanceList()", +"1ae2379c": "excess()", +"1ae32b82": "disallowReceiver(address)", +"1ae3a94a": "devFeeRate()", +"1ae3d8d0": "protectedBalance(address,address)", +"1ae460e5": "isInPool()", +"1ae4dfb7": "getcardPrice(uint256)", +"1ae638f7": "times6()", +"1ae6b6ee": "cancelAuctionWhenPaused(address,uint256)", +"1ae6c09c": "showMyAnimalBalance()", +"1ae6d375": "AirSwapToken(address,address,uint256)", +"1ae7341f": "OneledgerToken()", +"1ae743ad": "withdraw_token_and_eth()", +"1ae7b7fb": "jackpotSmall()", +"1ae7b8e1": "newOffer(address,string)", +"1ae7ef0a": "QISHENG(uint256,string,string)", +"1ae8494e": "purchaseTopCompany(bytes32,bool)", +"1ae879e8": "walletOwner()", +"1ae8ab81": "setNickname(bytes32)", +"1ae8fc87": "addContract(address,address,uint256,string)", +"1ae97bd9": "updateName(bytes32)", +"1ae9fe6a": "cutOffBidID()", +"1aea4d0f": "setMaxSend(uint256)", +"1aea558a": "auditReport(address,uint256,uint256)", +"1aeb10a6": "testApprove()", +"1aebb44e": "firstBlockAllowedToMonitor(uint256,uint256,address,address,address,address)", +"1aebcb89": "getProfitPerShare()", +"1aec2cf9": "Subscribe(address)", +"1aeca515": "getTierIndex()", +"1aece0db": "PRE_SALE_END_TIME()", +"1aed001e": "_miningOneSelf(address)", +"1aed8e1e": "GigERC20(uint256,string,uint8,string,bool,bool)", +"1aedefda": "includes(address)", +"1aedf542": "ercOwnerClaim()", +"1aee3f91": "PRESALE_LIMIT()", +"1aef8058": "DECIMAL_MULTIPLIER()", +"1aefce3b": "ratioVote(bool,uint8)", +"1af11767": "CauldronsMinigamePresale(uint32,address)", +"1af217ab": "maxTokenPurchase(address)", +"1af26fc2": "isJobExpired(bytes)", +"1af2c9fd": "numberOfInvestors()", +"1af31d7b": "GetPoolEntranceFee(string)", +"1af32223": "get_owner(bytes32)", +"1af36a78": "level1(address,bytes32,uint256)", +"1af39907": "_inMoney(uint256,address)", +"1af476a6": "setEggTotal(uint8,uint256)", +"1af47cc7": "addSellTokensRequest(string,uint256,uint256)", +"1af48c85": "checkCertificates(uint256)", +"1af50c5e": "setDisbursementAmount(uint256)", +"1af5163f": "TokenBurned(address,uint256)", +"1af5205c": "period3Numerator()", +"1af526b0": "getSell()", +"1af5dd41": "balanceOfComision(address)", +"1af62808": "getLicensePrice()", +"1af6b60f": "ScamSealToken()", +"1af716ba": "transferFrom(address,address,uint256,string)", +"1af77842": "setE93ContractAddress(address)", +"1af82fbf": "viewDividendCooldown()", +"1af855f8": "Funding(address,uint256)", +"1af88bc1": "GetPatientFromAddress(address)", +"1af8c18a": "InitBalanceFrom961e593b36920a767dad75f9fda07723231d9b77(address,uint256)", +"1af97fb7": "getBabyGen(uint16,uint16)", +"1afa6542": "AirCoin(uint256,string,uint8,string)", +"1afaa8bf": "crowdfundPercentOfTotal()", +"1afc540d": "set_saleAddress(address)", +"1afcc95b": "getCCH_edit_21()", +"1afccfa5": "Proposal(address,address,address,bytes,bool)", +"1afd08a2": "setConfirmationTime(uint256,uint256)", +"1afd96dc": "withdrawForThreeYear()", +"1afe3e10": "getCurrentPhaseDivisor()", +"1afe56aa": "markRead(uint256)", +"1aff30dd": "getGameStats()", +"1affa814": "getProviderPriv(uint256)", +"1affcd7e": "createCollectible(uint256,address,uint256,uint256)", +"1b005a38": "authorizerOne()", +"1b00fe51": "testHypothesis()", +"1b011bd9": "test_insert_findWithHint()", +"1b027b44": "getBuyPosition(bytes32,uint256)", +"1b03316f": "getSecond()", +"1b044be7": "setFundScheme(uint256,uint256)", +"1b04803e": "contractModifierAddress()", +"1b04a435": "durationSecondsIco()", +"1b0569b2": "IPToken()", +"1b059c0a": "JoinRound()", +"1b05aeb5": "WinMatrix()", +"1b05c594": "newGame(uint256,uint256)", +"1b05ea8c": "CheckPrepare()", +"1b06128b": "burnLeftoverTokens(uint8)", +"1b06ec3b": "getAllTransactionIdsByEntityId(address)", +"1b0710b5": "TOZToken()", +"1b073c67": "XGEToken()", +"1b0762bb": "remunerationBalance()", +"1b076edc": "dataSource()", +"1b07fcc1": "linkImpact(string)", +"1b082009": "getCrowdsaleBalance()", +"1b088f70": "computeLeaf(uint256)", +"1b08d96f": "ret()", +"1b0a102c": "getPrediction(uint256,uint256)", +"1b0a5d4e": "totalPartnerSupply()", +"1b0a68f2": "decreaseMintApproval(address,uint256)", +"1b0b906b": "getMyPlayedAmount(address)", +"1b0ba14d": "InvestmentFailed()", +"1b0c72dc": "isRecipientActive(address,address)", +"1b0cb61f": "_whitelistAddress(address)", +"1b0d320f": "FriendsCoin()", +"1b0db7fe": "getAllValuesSum(uint256[])", +"1b0dbdaf": "manualReserve(address,uint256)", +"1b0dc452": "isAnOwner(address)", +"1b0e25e2": "onInitialized()", +"1b0e3061": "BCW(uint256,string,string)", +"1b0eaf78": "stop_or_resume_Contract(bool)", +"1b0f5395": "ChargeNetwork()", +"1b0f7ba9": "proxy(address,uint8,bytes)", +"1b0fa385": "transfeFrom(address,address,uint256)", +"1b0fc106": "acceptChallenge(uint256)", +"1b107f7b": "storeUnlockData(uint256,address,address,uint256,bytes32)", +"1b112541": "getPTicketSumByRound(uint256,address)", +"1b118984": "TOKEN_ICO1_LIMIT()", +"1b12b60f": "canBuyTokens(uint256)", +"1b130063": "sendPrize(address,uint256,string)", +"1b131bbd": "_split(uint256)", +"1b136c6f": "getPlayerRounds(uint256)", +"1b13756a": "getFirstBorrowAgreement(address,address)", +"1b14cd05": "verifyLockSignature(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes)", +"1b1665ca": "updateLimitPerMonth(bytes32,uint256)", +"1b1686b6": "currentEthInvested()", +"1b17595f": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32)", +"1b181e58": "getOverTokens()", +"1b189efb": "EURsToken()", +"1b18f952": "test01()", +"1b18ffac": "random(uint256,int256,int256)", +"1b195a7c": "buildAddition(uint256)", +"1b19f6a3": "removeReferrer(bytes32)", +"1b1a7a58": "multiSendToken()", +"1b1b6069": "initEachPUST()", +"1b1c15d5": "tokensForInvestors()", +"1b1c6acf": "getUintField3()", +"1b1ccc47": "getDSTName()", +"1b1d6af8": "_PLUTOToken()", +"1b1d95ff": "getPow(uint256)", +"1b1da1af": "updateSharePrice(uint256,uint256)", +"1b1e5d5d": "rejectMany(address[])", +"1b1ef88d": "authorizedByUser(address,address)", +"1b1f2fb8": "preTGE()", +"1b1fe68a": "SOLO_MARGIN()", +"1b203b9d": "checkAndCloseRound(bool)", +"1b2051f6": "tempTokensPeriodOf(address)", +"1b208786": "delegatedTransfer(address,address,uint256,uint256)", +"1b2212f5": "forbidDirectDebit()", +"1b23cfd2": "AceguyToken()", +"1b258d50": "withdraw(bytes32,address)", +"1b25d0e6": "POST_ICO()", +"1b26fa6a": "priceStep1()", +"1b27274b": "testPure()", +"1b27c873": "advisorsTokensFirstReleaseTime()", +"1b27c8f2": "takeBountyTokens()", +"1b27ca21": "MonthsProfit()", +"1b27e705": "_forwardFunds(uint256)", +"1b28591c": "escapeFunds(address,uint256)", +"1b28985e": "MotorToken()", +"1b29d70a": "weiRefund()", +"1b2a8715": "notIn(bytes32[],bytes32)", +"1b2ace9d": "lockedProvider(address)", +"1b2ae899": "removeModule(uint8,uint8)", +"1b2ae964": "BuyPriceChanged(uint256)", +"1b2bd803": "issueAtIco(address,uint256,uint256)", +"1b2be5f8": "transferredAtSupplyValue(address)", +"1b2bf378": "BLM()", +"1b2d26e9": "OwOWorldToken()", +"1b2d515f": "setA(bytes32)", +"1b2d93a0": "load(address,bool,address,address,address,address,address)", +"1b2dba8c": "setCertifierId(address,string)", +"1b2e4002": "LIZAToken(string,string,uint8,uint256)", +"1b2f1109": "sntController()", +"1b302a16": "tokenUnpause()", +"1b31abda": "getGameDetails(uint256)", +"1b31c5c2": "RESERVED_TOKENS_OPERATIONAL_EXPENSES()", +"1b328100": "valueToBeSent()", +"1b33157a": "buyTickets(uint256[],uint256,bytes)", +"1b338905": "getActualDates()", +"1b33a497": "tranferToReserve()", +"1b33d412": "offer(uint256,address,uint256,address,uint256)", +"1b346a63": "testMoveWithTrust()", +"1b34737f": "setSCoinContractAddress(address,address)", +"1b347aae": "retrieveToken()", +"1b354a30": "kscIncreaseApproval(address,uint256,string)", +"1b357750": "setLegacyNFTAddress(address)", +"1b35f56f": "getCurrentlyRunningPhase()", +"1b360912": "transferTokensFromPartnersAddress(address,uint256)", +"1b369fad": "removeBlockListed(address)", +"1b36cbfc": "EtheremonDataEvent(address)", +"1b370abb": "getPreviousNode(bytes)", +"1b37cb3e": "VOCOToken()", +"1b3821e8": "addSentMessage(address,address,uint256)", +"1b385f34": "buyOmegaEgg()", +"1b3878f5": "addToEmployerTotalPaid(address,address,uint256)", +"1b391d09": "benefeciar()", +"1b393b9a": "emergencyRelease()", +"1b394dce": "_chkBuyerLmts(address,uint256)", +"1b397d79": "OurBank(address,address)", +"1b39f3d7": "timeset()", +"1b3a8e6f": "directionCount(int256,int256,int256,int256)", +"1b3a91ac": "addTiers(uint16,uint256[],uint256[])", +"1b3aaf06": "setRspTokenAddress(address)", +"1b3b5742": "PayJackpot()", +"1b3c72aa": "getAddressLevel()", +"1b3ca096": "MarketBase()", +"1b3d36de": "calculateToken(uint256)", +"1b3d803f": "TokenRegulatorService()", +"1b3e100d": "PRE_ICO_PRICE()", +"1b3e2002": "giftRock(uint256,address)", +"1b3e704a": "supplyICO(address)", +"1b3e8cda": "isEthPayable()", +"1b3ed722": "multiplier()", +"1b3efd15": "claimrefund(address)", +"1b3f2fd3": "checkAvailableTokens(address)", +"1b3f8a67": "addToSyncList(address)", +"1b3fddb8": "PRESALE_BONUS()", +"1b3ff96f": "getForecastCount(uint256,uint256,bool)", +"1b4032f5": "lastBlock_f7Hash_uint256()", +"1b40ee88": "sellArtwork(uint32)", +"1b411fc8": "createRound()", +"1b413d27": "getLuck()", +"1b414708": "hasDisclosureAgreement(uint256)", +"1b418207": "toUint64Throw()", +"1b41c096": "setStartsAtUTC(uint256)", +"1b41c134": "UsernameDoesNotMatch(bytes32,bytes32)", +"1b426d8d": "LOG_ProofFailure(bytes32,address)", +"1b42b7ab": "decreaseSalesBalance(address,uint256)", +"1b42f904": "LogFreezerAddition(address,uint256)", +"1b437d0c": "compareLastCalldata(bytes)", +"1b44a5ef": "handleSingleItem(address,uint256,uint256,uint256,uint256)", +"1b44f449": "Chain3()", +"1b45c301": "assetManager(bytes32)", +"1b4646bf": "setReferalsMinInvestLimit(uint256)", +"1b464764": "withdrawAdvisor(address,uint256)", +"1b468ed8": "addHandlerToWhitelist(address)", +"1b476945": "devTokensIco1()", +"1b477633": "determinePlayer(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", +"1b47dbbe": "IdentityVerifier(address)", +"1b482452": "getWinnerUrl(uint256)", +"1b49d82b": "joinClub(address)", +"1b4a2001": "minReserve()", +"1b4a93aa": "SetupFuseaNetwork(string,string,uint256,uint256,uint256,address,address)", +"1b4b1cfa": "isICOPeriod()", +"1b4b546f": "ChooseA()", +"1b4c19ac": "startSale(uint256,uint256,uint256,address,uint256,uint256)", +"1b4c5a10": "SupportFund()", +"1b4c84d2": "isTradeable()", +"1b4cd2de": "ICO_START_TIME()", +"1b4cd4ef": "depositPAXTR(uint256)", +"1b4d02c2": "cryptoAgent()", +"1b4d18c1": "rateOfSpecificTranche(uint256)", +"1b4e1c4d": "increaseProductAvailability(uint256,uint256)", +"1b4f4285": "notifyNewAccount(address,address)", +"1b4f6c46": "acceptOwnership(bytes32)", +"1b4fa639": "ownerFinishContract()", +"1b4fa6ab": "getDefaultStackCheck()", +"1b503a09": "LogRmUser(address)", +"1b50ad09": "updateDuration(uint256)", +"1b5171f0": "BountyKilled(uint256,address)", +"1b517663": "mintPriceOffset()", +"1b520b68": "lethalBonusAtHitsLead(uint256)", +"1b52abde": "redeemRestore(address,uint256)", +"1b531d4b": "settings_added()", +"1b538bcc": "getCurrentVotes(uint256)", +"1b542aa7": "Swob()", +"1b55ba3a": "Start()", +"1b55c148": "BidPlaced(bytes32,uint8,address,uint256,bool,int32)", +"1b55ec45": "getTokenToBurn()", +"1b55fe4e": "setFourthAddressBalance(address)", +"1b561fe7": "getSeniorContract()", +"1b5631de": "ManualChangeStartDate(uint256,uint256)", +"1b5710ed": "_deleteAllPackedRevisionTimestamps(bytes32)", +"1b580620": "setOwner1(address)", +"1b58c88f": "restoreOwner(address)", +"1b58c943": "getNBallots()", +"1b5a8da6": "giveEthBankrollAddress()", +"1b5ac4b5": "abs(int256)", +"1b5ae2f7": "day0x1(address,address)", +"1b5c16bf": "setTargetRepMarketCapInAttoeth(uint256)", +"1b5c9ae3": "get_etc_balance(address)", +"1b5df453": "addUserWhoSell(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"1b5e42f5": "amountOfUnitsOutsideAdminWallet()", +"1b5e75be": "evalParams(bytes32,address,address,bytes32,uint256[])", +"1b5ee6ae": "mintToken(int256,address,uint256)", +"1b5f03a6": "getRoute(string)", +"1b5f6cea": "P3DtoTokens_(uint256)", +"1b61a179": "mulbonus()", +"1b61f340": "finishADrop()", +"1b6282e3": "issuerDelegate()", +"1b64b172": "core(uint256,address)", +"1b65144d": "burnTokensForSale()", +"1b6527b4": "GetAssignedAddress(uint256)", +"1b655054": "dataAddress()", +"1b660f15": "EthIdentity(bytes32)", +"1b66303d": "request(bytes32,uint256,uint8)", +"1b66cb00": "setTargetToken(address)", +"1b672154": "setMEAAttributes(uint256,uint256)", +"1b677b08": "total_snt_claimed()", +"1b67ab2b": "StreamNetworkToken()", +"1b68039c": "bitcoinblack()", +"1b688565": "PUBLIC_RESERVED_PERSENTAGE()", +"1b697bb2": "setBuyerAddress(address)", +"1b6aa580": "developer_new_address_for_funds(address)", +"1b6ad60a": "transferFromWithReserving(address,address,uint256)", +"1b6aed05": "grant_token_from_offchain(address,uint256,string)", +"1b6b405c": "UnableToAcceptPayment(address,bytes8,uint256)", +"1b6b6d23": "LINK()", +"1b6b8656": "setBureau(address,address,address)", +"1b6bb739": "getThreeLastInvestors()", +"1b6bc433": "addMemberAcct(address)", +"1b6c104e": "marketingAllocationTokenSend(address,uint256)", +"1b6caad9": "setPersonaAttributes(bytes)", +"1b6e37ee": "thirdWeekBonusInWeek()", +"1b6e66aa": "rescueInvestor(address,uint256)", +"1b7035ea": "getAccountStatus()", +"1b709561": "UnlockCredits(address,uint256)", +"1b70a2e1": "TerpCoin()", +"1b72194f": "getUserDivs(address,uint256)", +"1b72410b": "EladCrowdsale()", +"1b728ed4": "getAssetRawMeta(uint256)", +"1b748399": "TeamCoin()", +"1b753dad": "Mithril()", +"1b75738a": "enable(address[])", +"1b760719": "addMember(address,string,uint256)", +"1b7623be": "payInterest(address,uint256)", +"1b76929c": "getActiveGames()", +"1b769e74": "testThrowsRestartNotUpdatable()", +"1b76dd7c": "disapprove(uint256,string)", +"1b773df1": "withdrawAll(string,uint256)", +"1b775638": "ContributionReceived(address,bool,uint8,uint256,uint256)", +"1b776808": "_updatePixelMapping(address,uint256,uint256,uint256,bytes32,bytes32)", +"1b78240f": "Fixie()", +"1b78e3c4": "processHunting(uint256,uint256,uint256[])", +"1b7949e2": "supply_increased()", +"1b79a2f3": "lastStageSubmitted()", +"1b79d406": "getWhoPiad(uint256,address,address,address,address,address,address,address)", +"1b7aad1b": "AMOUNT_TOKENS_FOR_SELL()", +"1b7b7b0d": "latiumBalance()", +"1b7b7c3d": "Partnership(address[],uint256)", +"1b7bbecb": "challengeExists(bytes32)", +"1b7be47e": "STQToken(address[])", +"1b7c058e": "getLicensePrice(address)", +"1b7ccc3d": "_registerLockedDeposits(bytes32,uint256,uint256)", +"1b7ce6f3": "disableTokens(uint256[])", +"1b7cf899": "recentActivity(uint256)", +"1b7d5f8c": "release18m()", +"1b7d83e5": "addDefaultOperator(address)", +"1b7d8aaf": "End8()", +"1b7db340": "sysAdmin()", +"1b7e0902": "getcardOwner(uint256)", +"1b7e78f6": "updateFirstChangeBlock(uint256)", +"1b7f00c1": "purchaseBundle(uint8,string)", +"1b800a3d": "watchPreferersTasks(address,uint256)", +"1b814f02": "splitFunds()", +"1b8202a7": "LegalContractManager()", +"1b825e89": "detachmentTime()", +"1b82f68f": "kingdomFactory()", +"1b83b823": "notifyPlayer(uint256)", +"1b841fea": "nextDerivativeTokenTime()", +"1b848606": "blacklistEscapeToken(address)", +"1b84e72d": "_createEscrow(address,address,uint256,uint256)", +"1b851e10": "LogDeposit(address,uint256)", +"1b855044": "getHash(uint256,uint256)", +"1b85aa49": "MIN_INVEST()", +"1b862027": "save(uint256)", +"1b8689b6": "getInvestorTokensPurchasesLength(address)", +"1b878f71": "setUpgrader(address)", +"1b87945e": "buyPointer(bytes32,bytes1[64])", +"1b87ccae": "getAssetIdItemType(uint256)", +"1b87d58a": "bonusMin()", +"1b88094d": "getRecipient()", +"1b880bcf": "KareToken()", +"1b89ee31": "closeBridge()", +"1b8a0b46": "WowDiaondToken(address)", +"1b8a9031": "BetPlaced(uint256,address,uint256,uint256)", +"1b8ab64d": "testTodo()", +"1b8b13a7": "getRewardPool()", +"1b8b3605": "setInvestorList(address)", +"1b8b4787": "TOKEN_SALE2()", +"1b8b921d": "call(address,bytes)", +"1b8bd57c": "getCardInfo(uint32)", +"1b8beafe": "BLOCK_DURATION()", +"1b8ca217": "getProperties(uint256)", +"1b8d0e60": "getMyBanker()", +"1b8db774": "_deadline()", +"1b8de48c": "distributeTCASH(address[])", +"1b8e61c7": "setEndTimePreIco(uint256)", +"1b8e94a1": "Rate()", +"1b8ef0bb": "getRemainingCapacity(uint256)", +"1b8f2610": "quickCloseChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"1b8f3d23": "krakenTicker()", +"1b8f5d50": "multi()", +"1b8f66a4": "watchedURL(string,string)", +"1b8fc2f0": "setAllowedAddress(address)", +"1b8fc6e4": "marketorsTotalBalance()", +"1b900c27": "anotherOwner1()", +"1b924b7e": "enableInterface(string,address)", +"1b9265b8": "pay()", +"1b929940": "pushIntArray(bytes32,int256)", +"1b92bbbe": "maxDrawingTime()", +"1b92ce6b": "WOCC()", +"1b93aa8d": "getPackage()", +"1b93f66d": "claimedAirdrop(address)", +"1b9414ae": "itemBid(uint256)", +"1b94198d": "sellingAccepted()", +"1b94413f": "transferEth(bytes32,address,uint256)", +"1b949f85": "lockContractOwner()", +"1b953909": "authorizeOperatorTranche(bytes32,address)", +"1b955df4": "changeRefund(uint8,uint256,uint8)", +"1b962c65": "decodeCurrency(bytes32)", +"1b963742": "AwesomeToken()", +"1b968160": "wipeAndFree(address,bytes32,uint256,uint256,address)", +"1b96b2f9": "masterMint(address,uint256)", +"1b97429d": "EthToUsdChanged(address,uint256,uint256)", +"1b981d7f": "packedToSubmissionBits(uint256)", +"1b987c41": "retrieveExternalTokens(address,address)", +"1b98c54f": "getProviderCurveLength(address,bytes32,int256)", +"1b98cd68": "updateAffiliate(address,uint8)", +"1b98f6ac": "setProviders(address[])", +"1b9900b8": "userRollDice(uint256)", +"1b995aa7": "BitCompare(uint256,uint256)", +"1b998dac": "updateMCs()", +"1b9a91a4": "withdrawEth(address,uint256)", +"1b9b0b23": "KruhftsToken()", +"1b9bfa3a": "_oldOwnersOf(uint256)", +"1b9c7f31": "Werbecoin()", +"1b9cbdfb": "priceOfToken()", +"1b9ceef1": "purchaseTokenInPublicSale()", +"1b9d1bed": "setPOOL_edit_18(string)", +"1b9d4c8e": "setBudget(address,address,uint256)", +"1b9db2ef": "getParticipant(uint256)", +"1b9dbcaf": "kittensIssued()", +"1b9e16ad": "getAccountInfo()", +"1b9e9a27": "createComponent(string)", +"1b9f9647": "accessMyWallet(address)", +"1b9fec58": "getBlockToHashForResults(uint256)", +"1ba1648a": "changeTokensOwner()", +"1ba1f10b": "updateTaxPercentages(uint256,uint256)", +"1ba22084": "ecadd(uint256[3],uint256[3])", +"1ba23f1e": "setAllowedMultivest(address,address)", +"1ba326c4": "calcShare(uint256,uint256,uint256)", +"1ba39a4c": "calcMult(uint256,bool)", +"1ba3afd3": "getLocalGame(uint16)", +"1ba46cfd": "assetAddress()", +"1ba527d6": "gkAddress()", +"1ba54100": "distributeEbyteForEBYTE(address[],address,uint256,uint256)", +"1ba5b3e8": "currentTotalAirdrop()", +"1ba5e63f": "tournamentQueueSize()", +"1ba5eec0": "nextTurn()", +"1ba60f9b": "availableDgxNg()", +"1ba6e1bd": "externalPurchase(address,string,string,uint256,uint256,uint256)", +"1ba7013b": "distributedBountyTotal()", +"1ba83c3c": "ChargingGas(uint256)", +"1ba88666": "isBiometricLockedOnlyOwner(address)", +"1ba8ef21": "electrolightTestnet()", +"1ba9146e": "PethToken(uint256,string,string,uint256)", +"1ba91c20": "foundationMultisig()", +"1ba9998b": "advanceRound()", +"1baaeb91": "getSignature(bytes4,uint256)", +"1bab0908": "hasValidParam(address,uint64,uint64,uint64,uint64,uint64,uint64)", +"1bab8148": "fulfillMintRequest(uint256,string)", +"1bacbf4e": "secureTransfer(uint256)", +"1bacfd66": "Vote(address,bytes)", +"1bad1d2e": "monitorWallet(address)", +"1bad3903": "stakeWithCurrentPeriod(uint256)", +"1bad5558": "withdraw3(address)", +"1bad9e8f": "getUserTokenInfos(address,uint256)", +"1bada3c0": "closeKYC()", +"1badbd5c": "increaseAssuranvePayments(address,uint256)", +"1badfbae": "setWhitelistBallot(address,bool)", +"1baf1494": "QToken(address,uint256)", +"1baf7122": "custodyStorage()", +"1baf823f": "NewUsername(address,string)", +"1bafc373": "confirmNewHash(uint256)", +"1baffe38": "withdrawEtherTo(address,uint256)", +"1bb00447": "CryptonomicaVerification()", +"1bb02ffb": "MWAV()", +"1bb0b762": "A2ABToken()", +"1bb0c665": "toHexString(address)", +"1bb1151a": "Error(uint64)", +"1bb1bf2e": "team1Query()", +"1bb2921b": "getProjectedPayout(uint16)", +"1bb3fb67": "operatorSendTranche(bytes32,address,address,uint256,bytes,bytes)", +"1bb4067b": "checkPoolDone(uint256)", +"1bb409c4": "QueryBonus()", +"1bb460cc": "ContributionReceived(address,uint256)", +"1bb47b44": "appendVestingEntry(address,uint256,uint256)", +"1bb534ba": "fundingRecipient()", +"1bb58beb": "RECToken(uint256,string,uint8,string)", +"1bb5f0a2": "registerBarcode(bytes9,string,string,string,string,string,string)", +"1bb63d0c": "Nova()", +"1bb6cb47": "getPlayer2()", +"1bb73a2a": "batchCreateAuthorDrawings()", +"1bb797da": "isIcoStage()", +"1bb7c3c2": "UpdatedDonationAddress(address)", +"1bb7cc99": "WHITELIST()", +"1bb8365f": "calculateGoldBuy(uint256,uint256)", +"1bb96dff": "AuctionStarted(uint256)", +"1bbb4f63": "LogMoneyline(int256,int256)", +"1bbb696a": "swapContracts(address)", +"1bbb9a99": "claimEthers(uint256)", +"1bbc4b83": "ERC20Interface()", +"1bbc7952": "getPropertySalePrice(uint16)", +"1bbc99c6": "UpdateDividendPartners(address[],uint256[])", +"1bbce9a2": "bidState(bytes32)", +"1bbe1813": "getTotalSpecials()", +"1bbe2ff3": "TransferEtherInitiationEvent(uint256,address,address,uint256)", +"1bbe9d8c": "addFunder(address)", +"1bbec4e7": "coldWallet2()", +"1bbef399": "isVoting()", +"1bbfb029": "addTx(address,address,uint256,string)", +"1bbfce0e": "bidOnBreedingAuctionTutorial(uint40)", +"1bbfdaaf": "selectElf(uint8,uint16)", +"1bc0585f": "stopTokenSale()", +"1bc08834": "stsc()", +"1bc125f3": "finishMintingSTO()", +"1bc2b813": "divUInt(uint256,uint256)", +"1bc2dd5a": "doesContractExist(address,address)", +"1bc390dd": "reconfig(string,string)", +"1bc3c855": "setWhiteListERC223(address)", +"1bc41284": "uncleRate()", +"1bc44200": "Dasabi_ioToken()", +"1bc44213": "MAX_BID_FRAC_BOT()", +"1bc4c81b": "QuizQuestion()", +"1bc4cdb9": "ReceiveFund(address,uint256)", +"1bc4d6b2": "XXXXToken()", +"1bc50b05": "canUpdateNextGamePotSplit()", +"1bc59aa6": "bountyAllocated()", +"1bc5ee1a": "transfer_eth_to_contract()", +"1bc84458": "getAddOnSupport(uint16)", +"1bca179b": "RentedBlock(uint256,uint256,uint256,uint256,address)", +"1bca5689": "havvensReceivedForEther(uint256)", +"1bca7d6d": "NigelFundSum()", +"1bca989e": "setTokenInfoMaxPerBlockImbalanceList(uint256[])", +"1bcad37a": "getTotalCost()", +"1bcb6fa2": "snapshotValidators(uint256)", +"1bcbce52": "isEarlyInvestorsTokenRaised(uint256)", +"1bcc9b1a": "TruPreSale(uint256,uint256,address,address)", +"1bcd57c7": "ContributionAmount()", +"1bcdb8e0": "responder(uint256,uint256,uint256,bytes5,bytes14,bytes5,uint256,uint256,uint256,uint256,uint256,uint256)", +"1bcdd57d": "writeNextId(uint256)", +"1bce6ff3": "begin()", +"1bceeaa7": "resell(address,string)", +"1bcf468b": "costOfToken()", +"1bcf5241": "countCliTasks()", +"1bcf5758": "getOccupies(uint8)", +"1bcf659d": "getMinTalent(uint256)", +"1bd0c431": "updateETH()", +"1bd13df1": "GetSummFee(uint256)", +"1bd16dbf": "preSaleDuration()", +"1bd2511a": "addEarlyAccessAddress(address,address)", +"1bd27296": "_fetchCancelledOrdersForMerchant(address)", +"1bd2b37c": "isMasterRecruitment()", +"1bd2c21c": "playBigger(uint256[])", +"1bd2d4cc": "getNextIndex(uint8)", +"1bd3553e": "TheTokenA()", +"1bd5363c": "getBPaddress()", +"1bd5d127": "NaviToken()", +"1bd60ae9": "buyerBalance(address)", +"1bd61eee": "updateHeartBeat()", +"1bd6f596": "right56(uint256)", +"1bd6fb9f": "LockedFunds(address,uint256)", +"1bd72647": "round0Target()", +"1bd8b041": "PRICE_INCREASE_SCALE()", +"1bd8f9ca": "challengeFee()", +"1bd95155": "stringToUint(string)", +"1bd983a4": "PlaceSellOrder(uint256,uint256)", +"1bd9a7e7": "LogNewWhitelistUser(address,uint256)", +"1bd9c46e": "setImporter()", +"1bda6d55": "publicSaleSoldTokens()", +"1bda84b3": "getOfferIdsByToken(address)", +"1bda8781": "Taouaf(uint256,string,uint8,string)", +"1bdb3f65": "ZoomToken()", +"1bdbabdd": "registerProduct(uint256,bytes32,bytes32,uint256,uint256)", +"1bdbce49": "setWhitelist(address,address,bool)", +"1bdc4038": "_updatePurchasingState(address,uint256)", +"1bdd193a": "placeStar(uint8,uint8,uint16,uint256)", +"1bddcf48": "_asyncTransfer(address,uint256)", +"1bde9998": "getWhitelistStatus(address,bytes32,address)", +"1bde9bc1": "rebatelvlEconomy(string,string,string,string,string)", +"1be05289": "DURATION()", +"1be0717f": "_reward()", +"1be0f1ad": "getSpinOutput(uint256,uint256,uint256,address)", +"1be0f793": "USDExchange(address)", +"1be16003": "Answer()", +"1be1bf7f": "TessrX()", +"1be20ca1": "TokenCAP()", +"1be22528": "TechnicalRise()", +"1be3175e": "mortgage(uint256)", +"1be35b0c": "statusOperation()", +"1be4aaa1": "getTokenInfoHeritor(address,address)", +"1be4da5b": "MateriaPrima()", +"1be64997": "BucketCreated(bytes32,uint256,uint64)", +"1be6ce57": "decreaseOwnershipTokenCount(address)", +"1be6dd64": "points()", +"1be70510": "acceptAdoptionOffer(bytes5)", +"1be73e2b": "_fhMoney(uint256,uint256,uint256,uint256,uint256,uint256)", +"1be7c5ef": "fullfillFounder()", +"1be863bf": "PushData()", +"1be88614": "onetimeLaunch(uint256)", +"1be8dbfd": "dsMul(uint256,uint256)", +"1bea4a61": "getObjIndex(uint64)", +"1bea67b7": "BFDToken()", +"1bea69e3": "isAdmin(address,string)", +"1bea8006": "tokenBalanceOf(address,address)", +"1beafada": "PROMETHEUS_PRICE_THRESHOLD()", +"1beb2615": "destruct(address)", +"1beb375d": "proxyManagementAddress()", +"1beb4b5e": "fetchAllVoteResultBySnapshotBlock(uint256)", +"1bebf13c": "sendOrderEvent(address,uint256,uint256,uint256,address,uint256)", +"1bef9059": "ProtocolToken()", +"1befcbaf": "buyRareEgg(uint8,uint256,address)", +"1befd26a": "setDesignatedReporterWasCorrect(bool)", +"1bf028b1": "OddMoney(address,uint256)", +"1bf049b9": "Prediction(uint24,uint24,bool)", +"1bf0635b": "setGoldFeeAddress(address)", +"1bf1de9b": "COMMISSION_PERCENTAGE()", +"1bf20668": "testAdminTransfer()", +"1bf219de": "Faucet(uint256,address)", +"1bf2a90a": "totalPostIcoContributorIdsAllocated()", +"1bf38b28": "addAccessor(address,address,uint8,address,string,uint32,string,string,bytes32,bytes32,uint8)", +"1bf426ba": "Spendelotto()", +"1bf498b6": "registAgent(address)", +"1bf57f41": "salesAddress(address)", +"1bf5b38a": "finalizeDonation(address)", +"1bf5f736": "endOfDay()", +"1bf651ff": "YBHY()", +"1bf678cf": "setOtherNTech3D(address)", +"1bf6ba7e": "_transferFromOwner(address,uint256)", +"1bf6c21b": "USD()", +"1bf6e00d": "frozenOf(address)", +"1bf6e939": "accManager()", +"1bf703b2": "addCategory(string,string)", +"1bf7628b": "firstHolder()", +"1bf7d749": "curves(uint256)", +"1bf831cf": "initialOperatorValue(address)", +"1bf8c094": "setOwnedToken(address,uint256,uint256)", +"1bf983a6": "getTokenInfoMaxTotalImbalanceList()", +"1bf9b325": "deletePublicKey(address)", +"1bf9b387": "setIcoRate(uint256)", +"1bf9def0": "Transferable()", +"1bfa5d8a": "hash_pubkey_to_pubkey(uint256,uint256)", +"1bfa90bf": "getIntField1()", +"1bfaf155": "foundersWallet()", +"1bfb7245": "tToken(address,uint256)", +"1bfba595": "incrementTotalIssuerCount()", +"1bfc596b": "presaleBonusAddressColdStorage()", +"1bfc8bd1": "setRequestIdToMultiRequestId(uint256,uint256)", +"1bfce853": "vestedAmount(uint256)", +"1bfd4858": "hash_db(bytes32)", +"1bfd6814": "TRANSFERABLE()", +"1bfe0308": "removeRole(address,string)", +"1bfe3508": "triggerRecoveryAddressChange(address)", +"1bfe7831": "AllLockAccounts(uint256)", +"1bfe783e": "MaxDropReward()", +"1bfea87f": "by(bytes32)", +"1bff4786": "etherDeltaInfo()", +"1bff4bfa": "beneficiaryTwo()", +"1bff4c07": "LukaCoin()", +"1c0019c4": "getCostForTrait(uint8)", +"1c014c60": "casinoBalance()", +"1c0183e3": "TweedentityRegistry()", +"1c02708d": "killContract()", +"1c02a63d": "SetEcosystemContract()", +"1c0463de": "isUpgradeAllowed()", +"1c05123d": "LicenseIssuer(string,string,string,uint256,uint256,address)", +"1c054b14": "bonusRangeCount()", +"1c057493": "withdrawERC721(uint256,uint256,address,uint256)", +"1c07f0a3": "getAccountKeys(uint256)", +"1c080404": "contributed3(address)", +"1c08366b": "tokenPCT(string,string,uint8)", +"1c084385": "WhitehatWithdraw(address,address,address,address)", +"1c085a21": "totalRaiseWei()", +"1c088897": "MINER_AUCTION_DURATION()", +"1c08c08e": "claimBond(uint256)", +"1c09496a": "transferWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"1c09c194": "testInsertMultipleProductsIntoCart()", +"1c0acbd5": "bidOnDklSiringAuction(uint256,uint256,uint8,bytes,uint256,uint256,bytes,uint256)", +"1c0ad646": "coreAddress()", +"1c0b6367": "processTransaction(bytes,uint256)", +"1c0bbe26": "createAccountForUser(address)", +"1c0c3d33": "mintAuthorizedBatchWithBalances(address[],uint256[])", +"1c0ce15f": "TUBE()", +"1c0d1274": "setCCH_edit_21(string)", +"1c0de1b3": "LogResult(bytes32,uint8,bytes,bytes)", +"1c0e0225": "minDonation()", +"1c0e7109": "addFreelancer(address,uint256[],address)", +"1c0f12b6": "transferFrom(uint256,address,address,uint256)", +"1c0f96bb": "ManagerProxyTargetMockV1(address)", +"1c0f9a7c": "requestEURPrice(string)", +"1c114b38": "canReadInDataObject(address,bytes32[])", +"1c11fce2": "requestToken(address,uint256)", +"1c135881": "testHardCap()", +"1c1401e7": "OWNER_TRANSFER_TOKENS()", +"1c140bdd": "addCampaign(string,string,string,address,address,address,string)", +"1c14179a": "GavCoin()", +"1c14b340": "passMessage(address,string)", +"1c152982": "addEditwalletContractAddress(bytes8,address)", +"1c15b285": "getAmbientHumidityControlLimits(bytes32)", +"1c1697ae": "get_presale_arbits_per_ether(address)", +"1c169ba5": "closed_()", +"1c16c3ad": "calcAirDropAmount(uint256)", +"1c177502": "LogCollectEth(uint256,uint256)", +"1c1935ce": "getHistoricPrice(uint256)", +"1c196d77": "returnSubscriptionDesposit(uint256)", +"1c1b863b": "updateBetDataFromOracle(uint256)", +"1c1b8772": "update(address)", +"1c1bc850": "changePayee(address)", +"1c1bd814": "TIMEOUT_TIME()", +"1c1c2289": "userKey()", +"1c1d7517": "dedeNetwork()", +"1c1f6a3f": "removeTokenFrom(address,uint256)", +"1c203612": "battle(uint256,uint256,uint8[2])", +"1c20be7e": "getVestingBalance(address,address,address)", +"1c226164": "isAddressVoted(address,address)", +"1c22ac19": "aprovaDevolucao(bool)", +"1c22b196": "TransferTRAC()", +"1c22f765": "zhoudayiToken(uint256,string,uint8,string)", +"1c232194": "refundPreSale()", +"1c23281c": "GZSToken(uint256,string,uint8,string)", +"1c2353e1": "isCertifier(address)", +"1c235f5f": "getHipstermasterReq()", +"1c238e1f": "Signum(address,address)", +"1c23e280": "buyTicketsFor(address,uint256)", +"1c249494": "setStarted()", +"1c24f0bd": "applyForCertification(string,string,string,uint256,uint256,uint256,uint256,uint8,uint8,uint16)", +"1c25331d": "setMaximumNonWhitelistAmount(uint256)", +"1c25f452": "topupSupply(uint256)", +"1c27e291": "refundCoin(address)", +"1c27f30b": "Lover()", +"1c28b99e": "pressFee()", +"1c296b34": "cryptiblesAuctionContract()", +"1c2ac59d": "sosoToken()", +"1c2ac5ac": "IcoStatus()", +"1c2b1e54": "SalesManagerUpgradable()", +"1c2bbd18": "exchangeTemplate()", +"1c2d6356": "getActivityName(uint256)", +"1c2e2796": "ContractCallerProxy(address)", +"1c2e53ef": "promotionRate()", +"1c2f2f9f": "recoverAndSetSecretHash(string,bytes32)", +"1c2f38ff": "paid(uint64)", +"1c30549f": "set_rand_addr(address,uint256)", +"1c3101d3": "addRecipient(address)", +"1c3122ba": "BuyStartingSnails()", +"1c31f710": "setBeneficiary(address)", +"1c321f62": "executeLottery()", +"1c3274ff": "PlayX10()", +"1c338601": "setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", +"1c338644": "withdrawERC20Balance(address,address)", +"1c350d6b": "TRLToken()", +"1c35b76f": "VOLUME_BONUS_CONDITION()", +"1c35e7ba": "manualFinalizeRound()", +"1c363e14": "DeathFactor_v()", +"1c38f800": "currentIcoSupply()", +"1c398075": "sellClimateCoinsAgainstEther(uint256)", +"1c39b5c4": "Administrated()", +"1c39c375": "buyUninitializedPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", +"1c3a36d0": "addComment(bytes3,string)", +"1c3a5713": "getProposalExternalTokenReward(bytes32,address)", +"1c3a8892": "closeRoom(uint256)", +"1c3ad417": "getBAS(bytes32,address)", +"1c3b093f": "Track(address,bytes,uint256,uint256)", +"1c3b3b9f": "expandPeriod(uint8)", +"1c3bc31f": "firstPreSaleEndDate1()", +"1c3c050c": "genTime()", +"1c3c0ea8": "setExecutor(address)", +"1c3c295e": "registerInstitutionAsset(string,string,address,address)", +"1c3cbf07": "TokenTest123()", +"1c3cf5d0": "setEditionPackPriceIncrease(uint8,uint256)", +"1c3d4f20": "ChangeBalance(address,uint256,address,uint256,uint256)", +"1c3db16d": "currentRuling(uint256)", +"1c3db9a8": "approveFlower(address,uint256)", +"1c3de07a": "calculateCoinSell(uint256)", +"1c3f2f8c": "dealsNumber()", +"1c3f7637": "isAllowedHICAddress(address)", +"1c3fe22d": "GaillardCrowdSale()", +"1c40baf5": "EUROCASH()", +"1c41d143": "KPTLToken()", +"1c41e2db": "getEducation()", +"1c423713": "addPromoCode(string,bytes32,uint256,uint8)", +"1c4261f4": "createGift(bytes32)", +"1c429165": "tryRollRoom(address,uint256,uint256)", +"1c42959c": "maximumCap()", +"1c42daf7": "winMeta(address,bytes32)", +"1c435872": "setInterRefreshLock(bool)", +"1c43814f": "registerAsSlaven(string)", +"1c43b4a6": "initAddressAsMultiOwner(address,string)", +"1c43d8b1": "EndEvent(bool)", +"1c442754": "participated(address,uint256)", +"1c448231": "SDToken()", +"1c44bac7": "tournamentBankCut()", +"1c465538": "DoFee(uint256)", +"1c465e87": "getTopOnce()", +"1c467dec": "HODLrSellWin(uint256)", +"1c47624b": "getUserProductContracts(address)", +"1c480cb6": "remove(int256,int256)", +"1c481767": "sendfrozen()", +"1c484766": "aloha()", +"1c484a34": "enableSuperDragon(bool)", +"1c488825": "MintTokens()", +"1c490883": "MelonBitIndex_Erc223Token()", +"1c49b101": "_preValidatePurchase(address,uint256,uint256,uint256)", +"1c49d19f": "finishRoundC()", +"1c4ad465": "custodyFactory()", +"1c4b0da6": "setMinSalePrice(uint256)", +"1c4b1ff7": "setGood(bytes32,uint256)", +"1c4b774b": "getReward(uint256)", +"1c4b8659": "getBoardSingleSpaceDetails(uint256,uint8,uint8)", +"1c4bcbb0": "distributePowerToAddress(address,uint256)", +"1c4be509": "forkTransfer(address,address,address,uint256)", +"1c4bfcfe": "BoxChange(address,uint256)", +"1c4c2681": "cirusToken()", +"1c4c710b": "getAreaIndex(string)", +"1c4d5608": "getSchemeParameters(address,address)", +"1c4d749b": "GetContractStateActive()", +"1c4e6cd0": "NameReg()", +"1c4ef6c2": "ethPriceInEuroCent()", +"1c4fda10": "tokenSafe()", +"1c50e880": "cancelAuctionHashing(uint256,uint64)", +"1c51a8e0": "setConfigString(string)", +"1c533a09": "Trupee()", +"1c535d96": "getuserdayeths(address)", +"1c53faf8": "backSggCoinOwner()", +"1c5412f7": "_computeCut(uint256)", +"1c54220d": "c_centsPerTokenSecond()", +"1c545049": "maxPresaleEDUSupply()", +"1c548c78": "foreignBridgeProxyOwner()", +"1c54e565": "getNextUserId()", +"1c54fbab": "getShip(uint16,uint16,address,address)", +"1c558b71": "ORIUMCOIN()", +"1c560f68": "CreatePreSale(address,uint256)", +"1c5633d7": "setPeriodLength(uint256)", +"1c566ef2": "setOperationAttributes(string,uint256,string)", +"1c568925": "addPendingUserListArr(address)", +"1c572f8c": "getICOPercentage(uint8)", +"1c5736ee": "add_record(string)", +"1c575f7f": "sendDivsToBankroll()", +"1c57a386": "oraclize_query(string,bytes[1],uint256)", +"1c581205": "targetAmount(address)", +"1c58c3ff": "totalMineSupply()", +"1c58d0d2": "_unsafeDecodeTokenId(uint256)", +"1c5992ff": "Zandar()", +"1c59a667": "disableBlacklist(address[])", +"1c59c177": "FCCContribution()", +"1c5a3942": "BPPOL()", +"1c5a5a58": "getRandomNum(address,uint256)", +"1c5a5bc4": "createShip(uint256,string,uint256,uint256,uint256)", +"1c5a9005": "HashRemoved(address,string)", +"1c5a9d9c": "activate(address)", +"1c5be3d7": "updateTimestamp()", +"1c5ca530": "IprontoToken()", +"1c5caa6b": "Rate9()", +"1c5d3c60": "stateIsWaitingProofs(uint256)", +"1c5d9faa": "setNickname(string)", +"1c5daad7": "_maint_withdrawFromPool(uint256)", +"1c5eaa23": "findByModuleText(string)", +"1c5ef50b": "Rasper()", +"1c5f2810": "setnewowner(address)", +"1c5f3176": "someMethod4(uint256,uint256,uint256)", +"1c5f8675": "getMyTuple()", +"1c5fe1a4": "TeamAmount()", +"1c606dd3": "GetConstructCost(uint256,uint256)", +"1c607f14": "setDynamicArraySize(uint256)", +"1c60a158": "TEAM_TOKEN_AMOUNT()", +"1c60f3bb": "buyEthCards(uint256,uint256)", +"1c61babe": "CelsiusToken(uint256)", +"1c61bd38": "showValue()", +"1c61eeb0": "acceptRelayedCall(address,address,bytes,uint256,uint256,bytes,bytes)", +"1c61f2bc": "fuckingClaim2(bytes,bytes)", +"1c623ddd": "reward(bytes32,uint8,bytes32,bytes32,bytes32,uint256)", +"1c624a60": "qtyInitiators()", +"1c624d19": "mintObizcoinTokens(address,uint256)", +"1c637987": "_setAuctionStatus(bytes32,uint8)", +"1c638376": "setProductAttributesByRegulator(string,string,uint256,uint256,string)", +"1c63c6c3": "setPartData(uint256,uint256,uint256[])", +"1c64065d": "myInfraList(address,uint256)", +"1c6416ad": "pubaddr()", +"1c65706e": "allowInvest(address,address)", +"1c657c63": "setEtherInUSDInternal(string)", +"1c668855": "getGenotype(uint256)", +"1c674fba": "createRandomBox(string,address,uint64,uint256,uint128)", +"1c67a7aa": "TransCompleted()", +"1c67e9a6": "setTokenStatus(bool)", +"1c68571d": "bonusLimit1()", +"1c6868c8": "adjustBonusPrice()", +"1c68fe82": "listProperty()", +"1c69ad00": "balance0()", +"1c6a0cf8": "GuangPengChain()", +"1c6a866c": "Collect_accrued_interest_and_transfer(address,uint256)", +"1c6b69b7": "rateCent()", +"1c6b7c1d": "EtherTransfer(address,address,uint256)", +"1c6ba386": "_claimReward(address,uint256)", +"1c6be97d": "allowanceRewriteTest(address)", +"1c6ce9a3": "executeSendCapital(address,uint256)", +"1c6d31f7": "xxx()", +"1c6d4575": "getTokensAmountAllowedToWithdraw(uint256)", +"1c6d6483": "approveMappingProposal(address)", +"1c6debbb": "UnionChainSupply()", +"1c6e3899": "getTierId(uint256)", +"1c6ef374": "recordingResultsOfBet(bytes32,bytes32[],uint8[])", +"1c6f609b": "cooperativeClose(address,uint32,uint192,bytes,bytes)", +"1c6f634e": "oracleItQuery(string,string)", +"1c70362c": "setSettingValues(uint8,uint8,uint16,uint16,uint16,uint16,uint16,uint8,uint8,uint32,uint32,uint8)", +"1c7040cc": "setProxyCurator(address)", +"1c7106e6": "setOracleAPIAddress(address)", +"1c7276f5": "updateLuck(uint256,uint8)", +"1c72961d": "setRandomSign(address)", +"1c72e225": "transformSeedToFlower(address,uint256)", +"1c7307f4": "get_topl_address(address,address)", +"1c732d83": "centsToWei(uint256)", +"1c73561f": "jobCompleted(bytes16,address,address,uint256,uint256)", +"1c73601e": "getUncorrelatedRN(uint256)", +"1c74d5c8": "Successor(address,address)", +"1c7564cb": "DWMP()", +"1c75b6b2": "setDevFee(uint256)", +"1c75f085": "teamAddress()", +"1c761245": "buyDOTCH(uint256)", +"1c762a27": "show_Balance_of_interest_bearing_deposit(address)", +"1c76e2b2": "getOrderBookKey(uint256)", +"1c77a4ec": "Lemmon()", +"1c77c58c": "collectRoundLength()", +"1c7a08ef": "isActivate(uint256)", +"1c7a39e2": "_distributeRewards(address,address,uint256)", +"1c7a3c9d": "setExchangeContractAddress(address)", +"1c7a3d31": "updateNextOrderUser(address,address,uint256,address,address)", +"1c7b10aa": "merkleTreeRoots(uint256)", +"1c7b530a": "secondTotalSupply()", +"1c7bfdce": "test_votingWhenCertified()", +"1c7cf44c": "claimCommit(bytes32)", +"1c7d5334": "DORCoin(address)", +"1c7f3a96": "getMarketCreatorSettlementFeeDivisor()", +"1c7f578a": "mintC()", +"1c7f6942": "getPlayerSpaceshipModelByIndex(address,uint256)", +"1c7f98ca": "getRunInfo()", +"1c800d64": "insert_helper(uint256,bool,uint256)", +"1c81525c": "NitinToken()", +"1c81bcfb": "dividendPathways()", +"1c81ed15": "raiseSupply(uint256)", +"1c8293c4": "PriceChanged(uint256,uint64)", +"1c82a013": "onOffCrowdSale(bool)", +"1c844171": "bakkaToken()", +"1c8499e5": "greeter()", +"1c857765": "sumElements(uint128[])", +"1c85d890": "productListing(bytes32)", +"1c85ee51": "getBasicIncome()", +"1c8670fc": "endEarlyStage4()", +"1c8685e0": "WXSLToken(uint256,string,string)", +"1c87055f": "Fund(address,address,address,address,address,address,address,address[])", +"1c870eee": "setUserPermission(address,bytes4)", +"1c878c97": "releaseLockAgencyLock1()", +"1c879c47": "getMarketHashes(bytes)", +"1c87deec": "returnTokenDepositState(address,bytes32)", +"1c895915": "getNumberOfPayments(uint256)", +"1c89f174": "calculateUserBid()", +"1c8a1e20": "membershipAddress()", +"1c8a3821": "AllocateFounderTokens(address)", +"1c8a7795": "archiveText(string)", +"1c8c4509": "addSiteSet(uint256,uint256)", +"1c8ca56d": "stopSelling(bool)", +"1c8cba3b": "getSubjectClaimSetSize(address,uint256,uint256)", +"1c8ce890": "disburse(address)", +"1c8d25bc": "proposed_beneficiary()", +"1c8d51e6": "getSentAmount()", +"1c8d5d38": "allowance(address,address,bytes32)", +"1c8dddbd": "editContributors(address[],uint256[])", +"1c8e9a6f": "commitWork(uint256)", +"1c8eac0f": "endFunding()", +"1c8f7570": "depositLogic(address,uint256,uint256,uint256)", +"1c90e9cf": "testwallet8()", +"1c9193c0": "TakeOut(uint256)", +"1c91a6b9": "startExit(uint256,bytes,bytes,bytes)", +"1c921e16": "claimHeirOwnership()", +"1c92b497": "crowdsaleInitialSupply()", +"1c92cab2": "auto_transfect(address[])", +"1c931313": "setDesignatedReportDueTimestamp(uint256)", +"1c931439": "getLockedContractAddress(address)", +"1c933e2f": "multiplyDecimalRoundPrecise(uint256,uint256)", +"1c946642": "intellisys()", +"1c949bdf": "setEtherollAddress(address)", +"1c95b42e": "payBonus()", +"1c95c89d": "authorizeForToken(address,address)", +"1c96b242": "balanceOfReal(address)", +"1c96ef03": "Presale(address,address,address)", +"1c9713bd": "transferTobucketOneContract(address)", +"1c973c57": "getSpecialityValue(uint256)", +"1c982066": "refreshGameTime()", +"1c983347": "maxBidPercent()", +"1c98680f": "_redeemByDefaultTranches(address,address,uint256,bytes,bytes)", +"1c990670": "realDividends(address)", +"1c991783": "mintUniqueTokenTo(address,string,uint256)", +"1c997344": "createBid(bytes32,address,uint256)", +"1c9981f8": "donate(address,address,bytes4)", +"1c99d341": "removeParty(uint256)", +"1c9a5ddf": "returnBox()", +"1c9ab3ad": "getBlockData(uint256)", +"1c9ad79d": "newCampaign(string,address,uint256,uint256,address)", +"1c9b612e": "ledTokensAllocated()", +"1c9c549d": "buyEggPrice()", +"1c9cae74": "removeScore(uint256,uint256)", +"1c9cafd7": "tan(int256)", +"1c9cf54c": "getStockAmount(address,uint256)", +"1c9e9999": "migrateDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"1c9f289d": "setCCH_edit_6(string)", +"1c9f369e": "purchase_propose(uint256)", +"1c9fbb11": "finishPreSale3()", +"1c9fe5d7": "BRONZE_AMOUNT_TPT()", +"1c9feaa5": "isExecuted()", +"1ca0076c": "multisend2(address,address,address[],uint256[])", +"1ca03b8e": "senderHasRole(string)", +"1ca0a28d": "multiTransfer(address,address[],uint256[])", +"1ca19ece": "IsaDalawa()", +"1ca2d6b7": "WalletChange(address,uint256)", +"1ca2e94a": "setPresalePhase(uint8)", +"1ca3630a": "updateComponent(string)", +"1ca3d4b7": "icoPhase4End()", +"1ca4399b": "DEV_TEAM_HOLDER()", +"1ca43cef": "ADMISSION_TIME()", +"1ca46d61": "bigChicken()", +"1ca5df03": "multiVesting(address[],address,uint256[],uint256[],uint256[])", +"1ca60aeb": "setMeltingContract(address)", +"1ca750f4": "privateSaleTokensSold()", +"1ca7bcc7": "toBytes32(bytes,uint8)", +"1ca84592": "RA(address)", +"1ca84efc": "secondTTaxAmount()", +"1ca89953": "batchFund(uint16[])", +"1ca8b6cb": "totalTokenSupply()", +"1ca9ad47": "createLockingTokenVaults()", +"1ca9fb9d": "updateContract(uint256,uint256,uint256,uint256)", +"1caa0c6d": "saleExchangeRate5()", +"1caa5ccb": "startDapp(address,address)", +"1caaa487": "tokenOwner(uint256)", +"1caba41f": "decimalUnits()", +"1cabc5ed": "userVoteFor(address,uint256,uint256)", +"1cabc785": "getPlayerDefend(uint256)", +"1cabe3ef": "pethPEReth(uint256)", +"1cac31d7": "setAdvisorsTokensWallet(address)", +"1cac7b7f": "MINERTA()", +"1cad5a40": "depositERC20(address,address,uint256)", +"1cadd93e": "initPlayers()", +"1cae7c2f": "TransferCoinsEther()", +"1cae947a": "firstPrivateLockedAmount()", +"1caf1752": "Coinvilla()", +"1cafc144": "distruggi()", +"1cb07902": "mintMore(address)", +"1cb08889": "MERIDIANERC20(string,string)", +"1cb0d481": "transferTokens(address,uint256[],uint256[])", +"1cb120d6": "ENSRegistry()", +"1cb1778a": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[])", +"1cb20fe6": "Devcoin()", +"1cb252fe": "investorsTotal()", +"1cb2dbf6": "Reduction(string,address,uint256,uint256)", +"1cb3bbc0": "updateGlobalUnlockTime(uint256)", +"1cb3d9be": "grantEditorRights(address)", +"1cb5bfc4": "LogBet(bytes32,address,uint256,uint256,uint256,uint256)", +"1cb64196": "ethStore()", +"1cb6adec": "tubFab()", +"1cb6d99a": "buyTokensOthersCoins(address,uint256,string,string)", +"1cb78879": "TitleDelisted(uint256)", +"1cb82d79": "registrarOwner()", +"1cb9a02a": "calculateScore(uint256,uint256)", +"1cb9ce63": "makeCall(address,bytes)", +"1cba6f79": "_isERC721Contract(address,address,uint256,bytes)", +"1cbaaea7": "set_payment_details(uint256,string)", +"1cbaee2d": "saleStartTime()", +"1cbb67c4": "FooUser(address)", +"1cbc5ab1": "Buy(address,uint256,uint256)", +"1cbcb9b9": "BellaBluToken()", +"1cbcc77c": "test_suicide()", +"1cbd0519": "accountLevel(address)", +"1cbda93d": "p_update_mResalePlotDevPercent(uint256)", +"1cbea83d": "proposalReason(uint256)", +"1cbea99b": "getAddress(address[],bool,bool)", +"1cbeae5e": "winner(uint256)", +"1cbfbe47": "assignTokensToMultipleInvestors(address[],uint256[])", +"1cc0eb83": "kickcityWallet()", +"1cc13dff": "totalplayers()", +"1cc1cf46": "paymentInterval()", +"1cc1e7bc": "appendPacket(bytes)", +"1cc2502e": "auctionList()", +"1cc47026": "trans(address,address,uint256,uint256)", +"1cc48f08": "getResolverAllowance(string,address)", +"1cc54204": "totalGenesisAddresses()", +"1cc69ac1": "assignNewParcel(int256,int256,address)", +"1cc6ba74": "testWIP()", +"1cc6ea05": "populateStringMember()", +"1cc6f13d": "setComplianceService(address,address)", +"1cc70934": "getPolicyLockedPercentage(uint8)", +"1cc72c04": "CheckPoolOwnership(string,address)", +"1cc78eb6": "RANGEEND_1()", +"1cc8092f": "FOURTH_TIER_DISCOUNT()", +"1cca13d3": "is_watched(address)", +"1ccb2601": "FoodWithdrawEvent(address,address,bool,uint256,uint256,uint256)", +"1ccc7013": "setPriceAt(uint16,uint16,uint8,uint256)", +"1ccd2706": "CatholicCoin()", +"1cce70d4": "getHowManyWinners()", +"1ccf6955": "getBets(uint256)", +"1ccf8abe": "phiWon()", +"1cd01e3a": "collectPercent()", +"1cd07895": "DmlToken(address,uint256)", +"1cd0b87f": "B33RToken()", +"1cd23711": "nouveauContrat(address,address[],uint256[])", +"1cd30149": "paybackRequired()", +"1cd3072b": "transferSub(address,address,uint256)", +"1cd30a3a": "randomGen(bytes32,uint256)", +"1cd3b754": "preICOcoinsLeft(uint256)", +"1cd421cc": "Show_Product(uint256,uint256)", +"1cd45773": "getruns(address)", +"1cd58891": "requestRedemption(uint256,uint256,bool)", +"1cd60a85": "setFiscal(bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"1cd732c1": "currentEthPrice()", +"1cd73845": "updatePremiumCalculator(address)", +"1cd76498": "crossForkFund()", +"1cd8b96c": "poolDLock()", +"1cd8d8a9": "checkTeam(address)", +"1cd95d2a": "_freeze(address,uint256,uint8)", +"1cda37f2": "eraseRecords(bytes32)", +"1cdadfae": "balanceNotEqual(address,uint256,string)", +"1cdb0989": "getMaxEmpruntable(address)", +"1cdb8571": "left2(uint256)", +"1cdc3f8a": "STQPreICO(address,address)", +"1cdc51e7": "requestRates()", +"1cdce200": "walletOne()", +"1cde0ff0": "withdrawScamEarnings()", +"1cde3cde": "BDIToken()", +"1cdeae52": "setSynopsis(string)", +"1cdef3ed": "agree(uint256,address)", +"1ce00c50": "registerUnlock()", +"1ce10a9d": "get_Sponsored_Amount_in_Job_By_Address(uint256,address)", +"1ce1e1b8": "White(address,uint256)", +"1ce26ecd": "addOwner()", +"1ce26faa": "fundingEndsAt()", +"1ce28e72": "getLimit(address)", +"1ce30927": "getOption(uint256,uint256)", +"1ce477d8": "createTransferEvent(bool,address,address,uint256)", +"1ce48441": "getrm()", +"1ce5e9a6": "getOption(uint256)", +"1ce62383": "expected()", +"1ce624d6": "Crypted_RPS()", +"1ce6717d": "CouponDeposit(address[2],uint256[8],uint256)", +"1ce6a810": "KBKJToken()", +"1ce7d9da": "ico_finish()", +"1ce7eff3": "bytecodeAt(address)", +"1ce817ab": "NoWinner(address,uint256,int256,string)", +"1ceb1b87": "setCanAcceptTokens(address,address)", +"1ceba89b": "getH3Bidder()", +"1cecb935": "isSignedNoEnc(uint16)", +"1ced2c75": "SpritzCoin()", +"1cedf8a3": "getDarknodeOwner(address)", +"1ceea715": "GetMyInvestFee()", +"1cef2b4e": "TokenCreated(address,uint256)", +"1cef3c13": "StandardTokenFreezer(address)", +"1cef92b1": "getRewardStatus(address)", +"1cf081f6": "changeProductionFee(uint256)", +"1cf190b0": "getAvailableInvestmentsBackValue(address)", +"1cf196df": "changeCommissionFee(uint256)", +"1cf19ad7": "Mundo()", +"1cf1bb72": "releasedAmount(address)", +"1cf25dc9": "incentivisingAddress()", +"1cf28a65": "expand()", +"1cf28ae3": "_bonusTime1()", +"1cf2de25": "MinterUpdated(address,address)", +"1cf3d16d": "LogRegularityConfirmation(address,bool,bytes32)", +"1cf41a81": "deployContract(uint256)", +"1cf43b63": "extractExportFeeChargeLength()", +"1cf52f2b": "isActiveRegistrant(address)", +"1cf57f67": "future_round_coins()", +"1cf67724": "getImplChangeReq(bytes32)", +"1cf73c13": "setStake(uint256,uint256)", +"1cf74ece": "left56(uint256)", +"1cf91bf2": "setOwnerAtomsCount(address,uint256)", +"1cf9c88a": "addAction(string)", +"1cfa42d0": "isReleaseRecordExist(uint256)", +"1cfa8e65": "_requireBalance(address)", +"1cfac68e": "BitSelectModerado()", +"1cfb4e1b": "InsureShares()", +"1cfb7c9a": "ifAllowed(string,address)", +"1cfbc7d0": "finalRewardPeriodEndBlock()", +"1cfc832e": "invalidateProposal(bytes32,bytes32)", +"1cfcc5bb": "checkGameSideAmount(uint256,uint256)", +"1cfce386": "calculateTarget()", +"1cfd11d5": "getDungeonDetails(uint256)", +"1cfdf90e": "updateWinnersList()", +"1cfe04a7": "canPay()", +"1cfe699e": "getFreezingSummaryOf(address)", +"1cfef64c": "SEELE_TOTAL_SUPPLY()", +"1cff272e": "show_Accrued_Interest(address)", +"1cff3e09": "testCreateBallotContract()", +"1cff79cd": "execute(address,bytes)", +"1cff87db": "burnMyQUATransferAndSendQUAToSomeone(uint256,address)", +"1d000b61": "BNT_TOKEN()", +"1d007f5f": "changeDAO(address)", +"1d010815": "createSaleAuctionERC20(uint256,address,address,uint256,uint256,uint256)", +"1d012c8e": "gameIsOver()", +"1d017b28": "setUnownedNumOfExoTokensBonus(uint256,uint32)", +"1d0192e1": "editEntity(address,bool,bytes32)", +"1d01ee9d": "BPX_per_ETH()", +"1d0205b8": "months(uint256)", +"1d029641": "rntTokenVault()", +"1d02fb06": "nCryptToken()", +"1d03842f": "onePlus(uint256)", +"1d048136": "setBaseStamina(uint256)", +"1d04c92b": "appendKeyValue(string,int256)", +"1d05bcb3": "dividendsRound()", +"1d05c57e": "_createCobeFriendWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"1d05d1d8": "refundContributorEnd()", +"1d065dde": "_transferWithReward(address,address,uint256)", +"1d075862": "getUpgradeProposals()", +"1d079c20": "IETToken(address)", +"1d07b797": "destroyTheUniverse()", +"1d0806ae": "initialPrice()", +"1d08837b": "setBaseRate(uint256)", +"1d09ba2c": "right15(uint256)", +"1d0a3cb8": "suspendedPayments()", +"1d0ba36e": "transferToPartner(address)", +"1d0cc1e7": "fullfillTeamAddress()", +"1d0ced55": "IonicCoin()", +"1d0d35f5": "isContributor(address)", +"1d0d5992": "transferBetweenUsers()", +"1d0e8a4d": "isShop(address)", +"1d0f2c99": "setTarget(uint256,uint256)", +"1d103139": "commissionCheck()", +"1d107603": "totalInitialBalance()", +"1d111d13": "withdrawBNB()", +"1d121dfe": "communityGrantsAmount()", +"1d123801": "airDropNum()", +"1d124fe4": "setUtils2(address)", +"1d128687": "myDividendsNo()", +"1d12b52f": "AKBToken()", +"1d130935": "isSuspended()", +"1d143848": "issuer()", +"1d14e5ff": "crowdSaleDonate()", +"1d153624": "CIBNLiveInteractiveToken()", +"1d15f317": "SUFFICIENT_STATUS()", +"1d16d1bb": "setComponent(string,address)", +"1d16d9a0": "sendETH()", +"1d184872": "lastrandom()", +"1d18ee83": "getCurrentHardcap()", +"1d1997a0": "lengthNotEqual(int256[],uint256,string)", +"1d19a56d": "claimFeeRebate(uint256,bytes32,bytes32,bytes32,uint8)", +"1d19a78e": "deactivateHedge(address,uint256)", +"1d19ffc3": "uniqueIds(uint256)", +"1d1a696d": "contains(bytes32)", +"1d1a7c32": "concat(bytes,bytes1,bytes,bytes1)", +"1d1ac66a": "signOut(address)", +"1d1ada90": "manuallyAssignTokens(address,uint256)", +"1d1ca65b": "BROKER_RESERVE_ADDRESS()", +"1d1cc622": "CurrentDistribPublicSupply_()", +"1d1ce884": "VoteCommitted(address,uint256,uint256)", +"1d1eda5e": "setBonusesForTimes(uint32[],uint32[])", +"1d1eff42": "AccessRevoke(address)", +"1d1fe108": "burnInvestorTokens(address,uint256)", +"1d209605": "Controllable()", +"1d20a9c9": "setCardActive(bool)", +"1d211d74": "tokensToSale()", +"1d21f252": "getInvertedPrice(address)", +"1d222b77": "UserUpdate(address)", +"1d231b2c": "_blackListed(address)", +"1d24190c": "GetGiftInfo(string)", +"1d24310d": "setTransferMode(bool)", +"1d2531f3": "is_alive()", +"1d25a5eb": "CGToken()", +"1d25bba2": "addSomeCWCsTo(address,uint256)", +"1d25c1a5": "get_remaining_quantity()", +"1d2627bb": "setEidooWallet(address)", +"1d263b53": "callSecondTarget()", +"1d263f67": "flip(bool)", +"1d27769f": "participate(string)", +"1d289e57": "regulationsFulfilled()", +"1d291990": "getNumberOfBid()", +"1d293500": "gamePayOutWinner(address)", +"1d296e8d": "geneLabAddress()", +"1d29de63": "clearAllCandidates()", +"1d2a6dcf": "getNumArchers()", +"1d2aa5b3": "skip()", +"1d2aabcb": "MicroBitcoinToken()", +"1d2af28b": "pay055loyal(address)", +"1d2b4ae7": "BuyStartingSnail()", +"1d2b63bf": "GetNumber(address,uint256)", +"1d2b7155": "activateImportFeeChargeRecord(address)", +"1d2b8d96": "MintICO(address,address,uint256)", +"1d2bca17": "MyToken(uint256,string,uint8,string)", +"1d2bf543": "fetchCoinAge(address,address)", +"1d2c1b59": "query(uint256,bytes32,string,string,uint256,uint256)", +"1d2d4c34": "test_assert()", +"1d2d8400": "delegateToNewContract(address)", +"1d2d86dc": "setChecksum(bytes32)", +"1d2d9b06": "raiseEvent(string)", +"1d2dbb22": "CancelMyInvest()", +"1d2e18cd": "stageOneStart()", +"1d2e2cc4": "ENS()", +"1d2e5a3a": "setSale(bool)", +"1d2eda60": "DIUToken()", +"1d2ee278": "Angel()", +"1d2fd267": "getCarCurrentPriceAuction(uint32)", +"1d2fed16": "updateRates(bytes4[],uint256[],uint256)", +"1d300421": "NuruToken(uint256,uint256,string,string,uint8)", +"1d30d3db": "Transfer(address,address,string,uint256)", +"1d3231d4": "totalCommitted()", +"1d32a70c": "upgradeMining(uint256,uint256)", +"1d32ab99": "originTransfer(address,uint256)", +"1d32f106": "openZoneTeller(bytes2)", +"1d32f29a": "SetDescript(string)", +"1d33267a": "revokeGrant(uint256)", +"1d333265": "_removeCryptantFragments(address,uint256)", +"1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", +"1d34be47": "updateRefund(uint256,uint256,uint256,bytes32)", +"1d34cf60": "getNumSuppliers()", +"1d351f53": "decreaseAllowanceToken(address,uint256)", +"1d356eef": "getDepositEtherForAddressValue()", +"1d3639ec": "preDGZTokensSold()", +"1d365669": "transferDirectoryToken(uint256,address,uint256)", +"1d36e06c": "tokenIndexToOwner(uint256)", +"1d36ee16": "RBC(uint256,string,string)", +"1d376a44": "PriceOracle(uint256)", +"1d3795e8": "startFreeGet()", +"1d37c8a6": "setPurchaseRate(uint256)", +"1d381240": "addKey(bytes32,uint256,uint256)", +"1d38869b": "ShopiBlock()", +"1d38bebd": "isInitialAuctionEnded()", +"1d38e433": "gasForIAD()", +"1d38fcda": "freeze(address[])", +"1d3a5dbe": "requiredPrefix()", +"1d3b9edf": "times(uint256,uint256)", +"1d3ce58d": "currentMintable()", +"1d3d4c0b": "make_contact(bytes32[])", +"1d3d93d4": "activateCurrency(address)", +"1d3e2d1b": "changeFriend(address,address)", +"1d3e43c8": "VCcoin()", +"1d3e904e": "BasicSPIKE()", +"1d3f6f1b": "setFounderMultiSigAddress(address)", +"1d3f864b": "campaignCaptain(uint256)", +"1d3f90c6": "bonusUnlockTime()", +"1d40bbcf": "_addMember(address)", +"1d411612": "EthernetCashAddress()", +"1d4233b9": "flushEth()", +"1d42cf72": "nochange()", +"1d433d52": "_getbonusRate()", +"1d43776e": "rngAddress()", +"1d43b653": "submitTransaction(address,uint256)", +"1d43cc98": "increaseTotalSupply(uint256)", +"1d4494f1": "changeApiUrl(string)", +"1d45e9e1": "notEqual(uint256[],uint256[],string)", +"1d461b83": "airdropMDL(address[],uint256)", +"1d46ef0a": "OxBitcoinExchange(address,address,address,uint256,uint256,uint256)", +"1d47ae34": "YShare()", +"1d47f8c1": "getApprovals(address,uint256)", +"1d480d8b": "addRefBonusWithRefs(address,uint256)", +"1d49e081": "EXECUTE_EXTRA_GAS()", +"1d4a48b7": "Start7()", +"1d4a9209": "initializeTokenSale(uint256,uint256,uint256,uint256,address)", +"1d4ac2b6": "yearteam()", +"1d4b0796": "updateTxStats()", +"1d4b11e4": "ownerOfLandMany(int256[],int256[])", +"1d4be3df": "getFoundAddress()", +"1d4c8e5d": "removeAddressesFromBonuslist(address[])", +"1d4cecaa": "setInfo(uint256,bytes32,string)", +"1d4d691d": "fill(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"1d4d8656": "donateAuthor()", +"1d4d8808": "_getFeeHistory(uint32)", +"1d4eaf06": "StoreFile(uint256,bytes32,string,string,string,string,string,uint256,bytes)", +"1d4f2c6d": "setMythicalGravatar()", +"1d4f3e8b": "getCLottery()", +"1d4f9bbf": "NewTTL(bytes32,uint64)", +"1d50169c": "sendToken(address,uint256,uint256,uint256)", +"1d5023c8": "setReferrerAddress(address)", +"1d511879": "buyTokensPresale()", +"1d523047": "COMMUNITY_TOKENS()", +"1d523107": "SOFT_CAP_IN_TOKEN()", +"1d52573f": "set_address_B(address,address)", +"1d532a97": "increaseAssetsCertified(uint256)", +"1d5407aa": "helpCoinAddress()", +"1d5459f7": "updateFundAddress(address)", +"1d545d09": "crowdsaleEndTime()", +"1d54ab74": "_getRateIndex(uint256)", +"1d54e16e": "reinvestPartial(uint256)", +"1d570166": "previligedAddApproval(address,address,uint256)", +"1d57b474": "updateMAX_BET(uint256,uint256)", +"1d57bcf7": "ProofLibInterface()", +"1d590771": "TeuToken()", +"1d598d10": "BitcoinBlue()", +"1d59cde3": "retrieveEarnings(address)", +"1d5a9f3f": "object_types(uint256)", +"1d5aca61": "ZITRON()", +"1d5b26b1": "presaleMarket()", +"1d5b9efe": "mintAfterSale()", +"1d5c7ef5": "getPaymentToAddRemoveCountry(string,bool)", +"1d5de3fb": "ECOToken()", +"1d5e3350": "transferReservedTokens(uint256)", +"1d5e3f6d": "sumOfN(uint256,uint256,uint256,uint256)", +"1d5ea379": "newUserFrom(address,string,string,string)", +"1d5f624a": "unPaidBurnTokens(uint256)", +"1d5fe710": "finalizeCurrentStage()", +"1d60208a": "TrezorMultiSig2of3(address,address,address)", +"1d608659": "onWhitelist(address)", +"1d60993b": "stakeScale(uint256)", +"1d62a312": "thirdPreSaleDate()", +"1d62a40f": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"1d62c5bf": "PublicSold()", +"1d6456c4": "_transfer(address,address,uint256,uint256)", +"1d645b12": "getEventInfo(uint256)", +"1d6477e1": "reclaimableLand()", +"1d64976b": "HBCM()", +"1d65551d": "updateRenExSettlementContract(address)", +"1d659153": "CanObtainChip(uint32)", +"1d65d60e": "PRE_ICO_MAX_TOKENS()", +"1d66105b": "buyDrangon()", +"1d66ff8e": "getInvestorDividends(address)", +"1d68463e": "CreateSWP(address,uint256)", +"1d68b449": "crowdClosed()", +"1d6916ab": "buyTicket(uint256,uint256,string)", +"1d693910": "Piezochain()", +"1d69ccdc": "SuccessfulVote(address,bytes32,bytes32)", +"1d6a8bda": "enableTokenTrade(address)", +"1d6b5d2c": "setDnaMixerAddress(address)", +"1d6b867c": "getGamePlayer(uint256)", +"1d6c0dfa": "setActiveHero(uint256)", +"1d6c263c": "Election()", +"1d6ca15d": "Presale(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"1d6d8d60": "modifyMilestoneTo(address,uint8,uint8)", +"1d6f5e03": "PubkeyChanged(bytes32,bytes32,bytes32)", +"1d6f757d": "withdraw(uint256,uint8,bytes32,bytes32,uint256)", +"1d6fe151": "ROSCtoken(uint256,string,string)", +"1d704684": "setBinanceCoinPrice(uint256)", +"1d706777": "getCertifier(address)", +"1d7099d3": "payFromAllowance(address,address,address,uint256)", +"1d709ab4": "set_transfer_gas(uint256)", +"1d718288": "referralTokensAvailable()", +"1d71929d": "MIAMIcoin()", +"1d71a1cd": "newIncome(string)", +"1d724a7a": "getFounderStatus(address)", +"1d731345": "calculateRoom(uint256,uint256,uint256)", +"1d7315cc": "storedAmount()", +"1d732304": "generateRand(uint256)", +"1d73268a": "PHDToken(uint256,string,string)", +"1d733337": "participantRegistered(address)", +"1d73fb93": "autoTransfer(address,uint256)", +"1d747131": "getTotalApprovers()", +"1d74c1a8": "_addToFund(uint256,bool)", +"1d74f3a5": "DIRT()", +"1d75493a": "setWinnerPlaceDistribution(uint256,uint256)", +"1d755c8d": "recieveVote(address,bytes32)", +"1d759214": "minMinBuyETH()", +"1d75a4b9": "viewAuthorized()", +"1d7630f0": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes32,address)", +"1d7747d1": "addAuthByCode(string,string)", +"1d777856": "tokensForBurn()", +"1d7786e3": "numToksSwitchedOver()", +"1d77d696": "setMockUint256(bytes4,uint256)", +"1d780960": "pauseGame(uint256,bool)", +"1d786cd0": "widthdrawEtherDelta(uint256)", +"1d7876e7": "transferBack()", +"1d78ca63": "AuctionClosed(address,uint256)", +"1d790c99": "parseData(bytes,uint256)", +"1d7915ad": "setSeed(uint256,uint256)", +"1d793e9a": "batchChangeChannel(address[],uint256[],uint256,uint256)", +"1d7add35": "appendPricePoints(uint64[])", +"1d7b46b2": "tokensPurchasedTotal()", +"1d7b5baf": "setUint(int256,bytes32,string,uint256)", +"1d7b6d58": "forkAndRedeem()", +"1d7bb2db": "CasinoCoin()", +"1d7bc449": "getCeleb(uint256)", +"1d7c194e": "bulkRejectMints(uint256[],uint256[])", +"1d7c5cd1": "userServicesLength(address)", +"1d7c8894": "issueGoldTokens(address,uint256)", +"1d7ca2be": "subAddressToWhiteList(address[])", +"1d7d1f17": "BFX()", +"1d7d8d2e": "EthereumPoint()", +"1d7e1f68": "getContentRank(address,uint256)", +"1d7f2e0c": "SecondNode(address,string,string)", +"1d7f8039": "mineMany(bytes32[])", +"1d7fb62f": "initVote(uint256)", +"1d80009a": "rootHash()", +"1d80e62a": "changeTransfersPaused(uint256)", +"1d814480": "provideInfoCourseBaseOnIdStudent(uint256)", +"1d81564d": "minutesInPeriod()", +"1d819ef0": "testEqualityAddr()", +"1d82e9c7": "EXTRA_GAS()", +"1d833aae": "drop(address,address[],uint256)", +"1d834409": "totalOrders()", +"1d834a1b": "insert(uint256,uint256)", +"1d836ae9": "EQUIEX()", +"1d83e3a9": "withdraw_(address)", +"1d846f5c": "currentCancellationResults()", +"1d849220": "getTokenSaleTime()", +"1d84f303": "ETPC()", +"1d8557d7": "updateState()", +"1d862a81": "getPop(uint256)", +"1d87614a": "OPTION_POOL_PERIOD()", +"1d87a65c": "createBattleboard(uint8)", +"1d88c05b": "successorAddress()", +"1d898f52": "IM()", +"1d89dbc9": "updateExchangeRate(uint8,uint256,uint256)", +"1d8a8db9": "ethRaisedAddress()", +"1d8aa5ec": "currentSettlementPhase()", +"1d8acf1b": "getBoolValues(bytes32)", +"1d8adb7a": "setMaxUserPayment(uint256)", +"1d8ae626": "Security(string,string)", +"1d8b13a6": "setPersonal(address)", +"1d8b4dd1": "createContractExoplanet(string,uint256,uint32,string,uint32,uint8,string)", +"1d8b70da": "order_received(string)", +"1d8bab91": "RDN()", +"1d8c61c0": "setTMEXAddress(address)", +"1d8c7c20": "internalSellTokenFromAdmin(address,uint256,bool,uint256)", +"1d8ceb44": "extractClosingSignature(address,uint32,uint192,bytes)", +"1d902fe9": "currentBonusRate()", +"1d9046ce": "transferShip(uint32,address,bool)", +"1d90824b": "getMinPrivateSaleCompanyBuy()", +"1d90c509": "cardPresale(uint16)", +"1d91bd9f": "transferPaymentAddress(address)", +"1d927f21": "userDraw(uint256)", +"1d93d8d9": "WaboToken()", +"1d9400c2": "ManagerProxyTargetMockV3(address)", +"1d9680a7": "oldWriteMessage(string)", +"1d96d4c9": "VIRES()", +"1d976e05": "transferMultiple(address,uint256[])", +"1d978f9e": "ContributionRegistered(bytes32,address,uint256)", +"1d981758": "__signatureIsValid__(address,bytes32,uint8,bytes32,bytes32)", +"1d98532f": "_computeTournamentCut(uint256)", +"1d98f3c5": "safeTransferChild(uint256,address,address,uint256)", +"1d991ffe": "IsBoilerValid(address,uint256)", +"1d9976e9": "LedgerRandomProofVerifier()", +"1d9b0783": "withdraw(uint128,address)", +"1d9b1d6f": "schedule(uint256,uint256)", +"1d9b1d85": "ReFund()", +"1d9bd2b9": "totalSoldOnICO()", +"1d9becf5": "CatAdopted(bytes5,uint256,address,address)", +"1d9caa69": "sendMessage(address,string,string,uint256)", +"1d9cfd6d": "setSale()", +"1d9d1bdc": "buyTradeConfir()", +"1d9d281d": "add0xbtcnnAddresses(address,address)", +"1d9e6c34": "compose(string,address,uint256[])", +"1d9f3cb5": "changeSaddleShopPrice(uint256,uint256)", +"1d9f4f88": "VetCoin()", +"1d9f68ad": "updateMaxBonusTickets(uint256)", +"1da05199": "hasAvailableCard()", +"1da09dd5": "getUserActionOnStory(bytes12,address)", +"1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", +"1da16e8b": "FirstSaudiToken()", +"1da26a8b": "setToken(address,address)", +"1da2d92b": "IDRT()", +"1da3f151": "presaleVolumeBonus(uint256)", +"1da4eb7a": "_secondUnlockAmmount()", +"1da4ed85": "setRewardPool(uint256)", +"1da55b9f": "YeedToken(uint256,address)", +"1da5f94d": "acceptableAddress()", +"1da6822c": "testThrowsTransferEnableNotTransferable()", +"1da74e77": "wtToken()", +"1da790a1": "showTopWinners()", +"1da83550": "setWinner(address,uint256,uint256,uint256)", +"1da83eab": "canDefrostReserveAndTeam()", +"1da88cbe": "getNew(address,bytes32)", +"1da93873": "baseTokenPrice()", +"1da97544": "ETHtoZWeirate()", +"1da97ea3": "getSenderFromData(address,bytes)", +"1da97f36": "HunterCoin()", +"1da98538": "totalMEATonsClaimed()", +"1da9ea0c": "hardCapInTokens()", +"1daae314": "secondStagePriceOfTokenInWei()", +"1dab2271": "setSuggestedAdPrice(uint256,uint256)", +"1dacad8a": "CentralizedOracle(address,bytes)", +"1dacd8fd": "buyDisciple(uint256,uint256,uint256)", +"1dad202f": "ctz64(uint64)", +"1dad57fa": "notifyCollateralNotReturned(uint256)", +"1dad63e4": "ERC20Standard(uint256,string,bool)", +"1daee82d": "secondLockAmount()", +"1daf779f": "SDpay(uint256,string,uint8,string)", +"1db021c0": "mintedCoins()", +"1db046ad": "OneToken()", +"1db05ab8": "FXNOW()", +"1db087db": "_setAllocation(address,uint256)", +"1db0ad5a": "firstUnlockTime()", +"1db0ffe9": "ECHARGE()", +"1db19959": "RATE_SALESTAGELAST()", +"1db1c805": "setDefaultReputationForManufacturer(bytes32,bytes32)", +"1db256e4": "WCCCOIN()", +"1db29a20": "getPlotInfo(uint256)", +"1db2bbe8": "allocationIndicator()", +"1db2ea77": "_91_MR()", +"1db38da2": "ClaimExecuted(uint256,uint256,address)", +"1db4012d": "newProject(string,string,uint8,address[],address)", +"1db4b07f": "rntToken()", +"1db4d7a2": "returnBalance(address[2],uint256[8],uint8,bytes32[2])", +"1db580fa": "foundersAllocation()", +"1db5ca3b": "becomeAgent(uint256,uint256)", +"1db5f974": "highBonus()", +"1db625c3": "newInvestCommission(uint256)", +"1db71ffb": "doLoops(uint256)", +"1db834f0": "NextDouble(address,uint256)", +"1db87be8": "receivingAddress()", +"1db890a6": "getCassetteSize_()", +"1db894fc": "signToApproveTokenControlInfo()", +"1db93968": "transferProperty(uint16,address)", +"1db9ec2c": "ENDDATE()", +"1dba92ab": "setKeys(address,uint256)", +"1dbb0bff": "buyBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"1dbb9867": "buyEggFee()", +"1dbbda4d": "bytesToUint(bytes20)", +"1dbc04ae": "setVestingToken(address)", +"1dbcc5ad": "RiesGraham()", +"1dbd21c3": "Daereum()", +"1dbdd617": "LILITHCOIN()", +"1dbdd792": "MIDGRADE_TYPE_COUNT()", +"1dbde6c7": "maxTokenSupplyICOEND()", +"1dbe342d": "TRND()", +"1dbe6508": "bobClaimsDeposit(bytes32,uint256,uint256,address,address,bytes)", +"1dbf3bc7": "spend(uint256)", +"1dbf79a3": "TicketGlobalChain(uint256,string,string)", +"1dc05f17": "subtract(uint256)", +"1dc0819e": "_isBreedingPermitted(uint40,uint40)", +"1dc1166f": "horseSold(uint256)", +"1dc17cce": "VALUE_DISTRIBUTION_KEY_OWNERS()", +"1dc18c45": "editNode(uint256,address,bool,address,uint8,bool)", +"1dc18f7a": "hashAmount(uint256,uint256)", +"1dc1c5e3": "payMoney()", +"1dc30bdb": "payJackpot5()", +"1dc3ac22": "setOwnerNickName(address,string)", +"1dc436cd": "getIDChildRelationshipCountOperationParentProductPositionReferenceBinding(string,address,uint256,uint256)", +"1dc45248": "getMoveCount()", +"1dc45c6d": "spenderDecreaseApproval(address,uint256)", +"1dc55c2d": "GetDividends(address,uint256)", +"1dc615bc": "checkIfAllARTDistributed()", +"1dc76e78": "buyPlayerDataRecord(uint256,uint256,uint256)", +"1dc7f1b4": "getaddressname()", +"1dc82285": "oldBalance()", +"1dc8a3bb": "B123Token()", +"1dc9186a": "updateWeiAmountShare()", +"1dc9a3b9": "transferDomainOwnership(bytes32,address)", +"1dc9bb48": "hasDividends()", +"1dcb0d36": "goBackToPreSale()", +"1dcb304b": "fipsGenerate()", +"1dcb66ff": "coordinatesOf(uint256)", +"1dcd0305": "toStr(bytes32)", +"1dcd5312": "editMessage(string)", +"1dcd9b55": "substring(string,uint256,uint256)", +"1dcdf215": "getCoursesCount()", +"1dce0b5c": "getNoteKeysCount()", +"1dce77b8": "Linkmanagement()", +"1dce79cf": "blockchainExchange(uint256,int256,bytes32)", +"1dcea427": "erc20token()", +"1dd0c71b": "myPendingPayment()", +"1dd1349d": "getNameHash(bytes32)", +"1dd14317": "setProtocolVersion(address,bytes32)", +"1dd14a96": "totalSupplyPaillier()", +"1dd15fca": "tokenInWhiteList(address)", +"1dd16db6": "customBonus()", +"1dd17e7d": "setPreSaleParameters(uint256,uint256,uint256,uint256,uint256)", +"1dd300ce": "lastWithdrawal()", +"1dd319cb": "burnFor(address,uint256)", +"1dd46c1e": "getTxCount()", +"1dd4914b": "withdrawEtherOrThrow(uint256)", +"1dd49208": "getFeed(uint256,uint256,uint256)", +"1dd49cae": "remWhitelist(address[])", +"1dd5301a": "PRICE_PREBUY()", +"1dd572a0": "fortune_sell(uint256,uint256,uint256)", +"1dd637d8": "emergencyProtectedMode()", +"1dd6f85e": "CreateLOK(address,uint256)", +"1dd72454": "TransferManual(address,address,uint256,string)", +"1dd7335c": "allocateDividendsToWinners(uint256,address[],uint256[])", +"1dd7cf6d": "getHumanInfo(uint256)", +"1dd80586": "getPlayerSpaceshipBattleStakePaidById(uint256)", +"1dd85687": "adminSetEnviroment(uint256)", +"1dd8f053": "minPriceInWeiForIco()", +"1dd95a98": "AIRDROPS_COUNT()", +"1dd9a3cf": "_sendEthereum(uint256)", +"1dda5c7d": "testFailSubBalanceBelowZero()", +"1ddabf7a": "friends(address)", +"1ddb9105": "creditVault(uint256,address,uint256)", +"1ddc0ef0": "audit()", +"1ddd303d": "setV_R3(uint256)", +"1ddd39cc": "addcoinslimit()", +"1dddbf07": "confirmExchange(address,uint256)", +"1ddde716": "advisorsAccount()", +"1ddf147f": "assignedDoublrContract()", +"1ddf9729": "IncomeTaxCalc()", +"1ddfd7db": "supportsTradingPair(address,address,bytes32)", +"1de012cd": "TRUST()", +"1de032a5": "setIsStudio(address,address,bool)", +"1de0e877": "proposedControllerPendingUntil()", +"1de14175": "setDelegadoDeEscuelaVerify(bytes32)", +"1de1441f": "remainingEPXSupply()", +"1de1ee7b": "addPublicKey(bytes32,address)", +"1de21b76": "P1()", +"1de22867": "BeatTokenPurchased(address,address,uint256,uint256)", +"1de250bf": "bless(string,uint256)", +"1de26e16": "deposit(bytes32,uint256)", +"1de271a4": "cap_tmx()", +"1de28857": "getShareBalance()", +"1de38038": "makercoin(uint256)", +"1de3d4b9": "ReleaselockAddress(address)", +"1de4334a": "get_time_locked_contract(uint256)", +"1de46a78": "admin3()", +"1de473ea": "setC4FContractStatus(address,uint8)", +"1de54fcd": "unlockedNowBalanceOf(address)", +"1de7f3e3": "setBankrollpercentage(uint256)", +"1de95d74": "AREFWallet()", +"1de98d93": "deleteUserByEmail(bytes32)", +"1dea0c57": "getRealBet(uint256)", +"1dea157f": "getPaintingArtist(uint256)", +"1dea3f0c": "recordOffchainPurchase(address,uint256,uint256,string)", +"1dead827": "_percentSoldInICO()", +"1deb0a8f": "changeState(bool)", +"1deb112b": "initialSupplyPublicPreICO()", +"1deb9b9e": "EventBid(address,uint32)", +"1debbe2f": "addExp(uint256,uint32)", +"1dec8585": "getCurrentStageByTime()", +"1ded2d87": "Transaction(address[2],bytes,uint256,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", +"1ded319d": "numberOfClaimed(address)", +"1ded587c": "Hotlist()", +"1dedc6f7": "consume()", +"1def4c9d": "TransferToBTCoE(uint256)", +"1def5033": "taskArray()", +"1df0187b": "BONUS_AMOUNTS_VALUES(uint256)", +"1df025d6": "updateGoalCheck()", +"1df0e359": "createForecasting(uint256,uint256,uint256)", +"1df13f28": "ICOBonusPercent2week()", +"1df19259": "Khabayan()", +"1df1ec82": "getProviderOwner(uint256)", +"1df224c1": "privateToken()", +"1df2bcbc": "setPresaleCont(address)", +"1df36e63": "delInvestor(address)", +"1df3e8a9": "GuardaProva(string,string,string,string)", +"1df411a6": "setOfferTime(uint256)", +"1df4241f": "StatEvent(string)", +"1df473bc": "newContract(bytes)", +"1df47aad": "ReplayProtection()", +"1df4ccfc": "totalFee()", +"1df4f144": "multiply(int256)", +"1df5a8f4": "GlobalBTC()", +"1df5e755": "Etherandom()", +"1df68102": "createSellOrder(uint256,uint256)", +"1df6d86e": "_buyLeader(uint256,uint256)", +"1df73f51": "getFreeSperm()", +"1df87cad": "raiseBuyOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"1df8eaa2": "showAuthorizerTwoAmount()", +"1df93558": "fundingStartTime()", +"1df95786": "envelopes(uint256)", +"1dfa0cf6": "ConfirmDispose()", +"1dfa3ca8": "thirdPartyInvestments(address,uint256)", +"1dfa6329": "finishPVE(uint32)", +"1dfbf227": "makeInvestment(address,string,uint256,uint256)", +"1dfc91d4": "TokenPresalePurchase(address,uint256,uint256)", +"1dfd04b9": "buyEmptyPixel(uint256)", +"1dfd1ddd": "ListNotValSince(uint256)", +"1dfde4a5": "test_insert_findWithHintPrevAtPosition()", +"1dffa3dc": "cancelJob(uint256)", +"1dffd012": "getUserManager()", +"1dffdbe6": "trade(string,uint256,uint256)", +"1e0018d6": "investor()", +"1e010439": "getBalance(uint256)", +"1e0197e2": "tournament()", +"1e01a0e6": "doit(address)", +"1e01a172": "issueDescription(uint256)", +"1e021b2b": "getproductstatus()", +"1e02bf62": "checkOutstandingQueries()", +"1e02f805": "newInvestment(address,uint256)", +"1e031a00": "QuickFlip()", +"1e0419d4": "finalWinner()", +"1e04e856": "depositEth(address,address)", +"1e04eee9": "mintChipUnsafely(uint256,bytes32)", +"1e0582e9": "_daysFromDate(uint256,uint256,uint256)", +"1e05e0c8": "bonusesForTimesCount()", +"1e0610f6": "getRealty(address,uint256)", +"1e063d98": "MRDSTSCoinToken()", +"1e06c41f": "saleStartUnixTime()", +"1e06e25e": "Zoo721(address)", +"1e075aba": "batchUnlockVestedTokens(address[])", +"1e08045d": "getOwnedTanks(address)", +"1e084558": "licenseInfo(uint256)", +"1e08d687": "removeSubcontract(address)", +"1e095eb3": "GHPToken()", +"1e0976f3": "receiveVerification(uint256,uint256,uint256,bool)", +"1e09e67b": "Rasthen()", +"1e0a0f60": "info_CanBeClaimed(uint256)", +"1e0a24b1": "revertIfReturnLessThanMin()", +"1e0b760c": "Cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"1e0b8c87": "hasSkills(address,uint256,uint256,uint256)", +"1e0c60e2": "SGem()", +"1e0c7ed4": "setConfigBool(bytes32,bool)", +"1e0e17a2": "claimMistake(bytes32)", +"1e0e3925": "numElements()", +"1e0e7c2b": "KODOKv()", +"1e0efae1": "claim_devidend()", +"1e0f6ed8": "TokenSaleFinished(uint256,uint256,uint256,uint256)", +"1e0f9795": "getNewFib(uint256)", +"1e11764e": "GameFinished(uint256,uint256,string,uint256,address)", +"1e120efb": "showEducationDetails(uint256)", +"1e1401f8": "getReturn(address,address,uint256)", +"1e141bb0": "releaseTime4()", +"1e14c48c": "setTokenFeeWithdraw(address,uint256)", +"1e14d823": "addMarketplaceContract(address)", +"1e16521b": "fulfillBurnRequest(uint256,string)", +"1e16980c": "setUnburnableWallet(address)", +"1e171d7c": "hasFunded()", +"1e172e90": "TransferHappened(uint256,bytes32,address,address)", +"1e1781af": "unfreezeAccount(address,bool)", +"1e179ae0": "getToken(bytes32,uint256)", +"1e17f292": "getAPRTx(uint256)", +"1e185b2a": "BTEcoin()", +"1e186e4c": "TestERC20()", +"1e18c404": "huroc()", +"1e191c0f": "goalSale()", +"1e1a48cf": "transferMethodId()", +"1e1a4eef": "setShareTokenAddress(address)", +"1e1a90a6": "onPayout(address,uint256)", +"1e1ad51c": "getFunding_Old(uint256)", +"1e1b13c0": "coinAge()", +"1e1b2e0f": "getLotteryPrizesLength(uint256)", +"1e1c72f4": "requestFreezeAccount(address,string)", +"1e1c86b7": "CCProject()", +"1e1d237e": "getSortedArray(uint256[])", +"1e1d696a": "changeLibAddress(address)", +"1e1ddacc": "saleController()", +"1e1e0a5e": "doHash(string,uint32,string,string)", +"1e1e3e0f": "vaultBalance(string)", +"1e20363a": "setTokenMetadataBaseURI(string)", +"1e204acf": "HODLrSoldWin(address,uint256,uint256,uint256)", +"1e20b4b9": "allocateAllUnsoldTokens(address)", +"1e215f70": "gbtAddress()", +"1e217bf8": "releaseUnclaimedFunds()", +"1e223143": "getFirst()", +"1e22648a": "setSnapshotBalance(address,uint256)", +"1e2273a7": "convert256ToReal(uint256)", +"1e22ffa5": "ClickRUB(uint256,string,string)", +"1e23300b": "createDiamond(string,address,string,string,string,string,string)", +"1e2466c6": "ICOTerminated()", +"1e24e029": "createRequestAsPayer(address[],int256[],address,uint256[],uint256[],string)", +"1e25dc54": "transFee()", +"1e2629e1": "initiateMigration(address,address,address)", +"1e26fd33": "setBool(bool)", +"1e273649": "getCountPartipants()", +"1e275d5f": "mock_getUInt(address,address)", +"1e279a37": "get_balance(address)", +"1e27a965": "JullarCrowdsale()", +"1e27ae4d": "getRecordHolder(uint256)", +"1e28a3a5": "attachCrowdsale(address,address)", +"1e28ba20": "YeojinToken()", +"1e28f29b": "initialTiers()", +"1e2a7105": "FromQueue(address)", +"1e2a9d4c": "topup(address,address,uint256)", +"1e2aebf9": "ETHERCREDIT()", +"1e2b6db2": "getBdpEntryPoint(address[16])", +"1e2bdfdf": "setAdvPrice(uint256)", +"1e2c23b3": "toEth(uint256)", +"1e2c74f6": "kill(bool)", +"1e2ca0f3": "updateLeftLottery(address)", +"1e2d5651": "totalContrib()", +"1e2da3e9": "PawsCoin()", +"1e2def3a": "saleStopTimestamp()", +"1e2e35a4": "sellPoohs()", +"1e2e3a6b": "getExchanges()", +"1e2e7a06": "registrationTime()", +"1e2ed152": "ECO_SYSTEM_BONUS()", +"1e2f48da": "assertOwnersAreConsistent()", +"1e2fc4f7": "test_mint()", +"1e2fee94": "CatDestinity()", +"1e2ff94f": "currentTimestamp()", +"1e2ffcef": "Show_All_Company()", +"1e30397f": "isValidName(string)", +"1e30b599": "Processables()", +"1e31264d": "_premiumPricePer30Days()", +"1e3339f0": "MTT()", +"1e335962": "token_multiplier()", +"1e33a6d5": "setGasUsage(bytes4[5],uint256[5])", +"1e34c585": "setConfig(uint256,uint256)", +"1e35e567": "fetchOrderByIdWithMerchant(string)", +"1e36d755": "sendTokenToOwner()", +"1e372dd3": "Advanced_Anemoi(uint256,string,string)", +"1e375ab9": "claimReferralBonus()", +"1e38046c": "address3()", +"1e38a011": "setRoutePrice(uint256)", +"1e391738": "minimumGoalInWei()", +"1e39499d": "scheduleCall(address,bytes,uint256)", +"1e3a5831": "Claimable(address)", +"1e3b92b4": "getGalaxy(uint256)", +"1e3b9de5": "getClaimant(address)", +"1e3ba116": "_supportsAllInterfaces(address,bytes4[])", +"1e3ba941": "StexTalk()", +"1e3c73bd": "BdpPriceStorage(bytes8)", +"1e3c9352": "grant(address[])", +"1e3d9c04": "removeLink(address,bytes)", +"1e3e6369": "GetMySnail()", +"1e3ea569": "SentTokens(address,uint256,uint256,uint256)", +"1e3f11ee": "getPlayerGeneralAttr(uint64,uint8)", +"1e3faf22": "airdropNum1()", +"1e40375f": "killTo(address,bytes32)", +"1e4092e5": "FOUNDER_AMOUNT()", +"1e4146b0": "generateCombinationKey(uint8[4])", +"1e41583b": "reclaimElement()", +"1e41be58": "deleteApplication(string,bool)", +"1e41f63e": "viewAll(string)", +"1e42698b": "setScrapAuctionDuration(uint256)", +"1e440e02": "TKCDStandardToken(uint256,string,uint8,string)", +"1e442919": "getAccessoryLockStatus(uint64)", +"1e4433c4": "getVar(string)", +"1e44b919": "KAPAYcoin(uint256,string,string)", +"1e44c112": "find_strike(uint64,uint32,uint32)", +"1e44e6af": "setPI_edit_10(string)", +"1e4532f1": "balances_bonus(address)", +"1e45de61": "GetWinningAddress()", +"1e4623e1": "segmentHash(string,uint256,bytes32)", +"1e464460": "AscendGod()", +"1e466eee": "triggerVolcanoEruption()", +"1e49d5ab": "getUserInfoAndConfig(address)", +"1e4a126e": "BeforeChipObtain(uint32)", +"1e4adcf7": "weiDonated(address)", +"1e4b5652": "setKNCRate(uint256)", +"1e4ba4d4": "swap(uint256,address,address,uint256,uint256,uint256,uint256)", +"1e4bb033": "HcoinToken()", +"1e4bd42c": "claimAllTokens()", +"1e4bdf27": "TransferActive()", +"1e4bffde": "_getBegin(int256)", +"1e4c6e7e": "gatito()", +"1e4c6f7c": "base_token_seed_amount()", +"1e4c7736": "updateManyLandData(int256[],int256[],string)", +"1e4ccdc4": "resultDraw()", +"1e4d17c5": "setFundraiserAddress(address)", +"1e4df315": "HRChainERC20()", +"1e4df938": "referralPool()", +"1e4f95c7": "pipeMoney()", +"1e504c9c": "setRegisterPrice(uint256)", +"1e5140dd": "closeTradeProfile(bytes,bytes32)", +"1e516c32": "OMIVIATEST()", +"1e519c4c": "getCurrentModifier()", +"1e51a907": "getServiceNames(bytes32,address[],address)", +"1e51cb10": "_MineId()", +"1e5253a4": "RegisterShareholder(address)", +"1e5296ef": "getMySellOrdersBlackMarketComplete()", +"1e52aa52": "startBetRed()", +"1e52ca35": "ROLE_SUPER()", +"1e52f7b5": "accoutToPayLevel(address)", +"1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", +"1e5393cf": "setDividendAndPayOut(uint32,uint32)", +"1e53a3a0": "SetContracts(address,address)", +"1e53efe0": "getBonusAmount(uint256)", +"1e542fd4": "AddLock(address,uint256,uint256,uint256,uint256)", +"1e550ca2": "carTaxiTokenAddress()", +"1e552efc": "MarnieCoin()", +"1e5571bc": "getTankSell(uint32)", +"1e561d5e": "createSellingProposition(address,uint256,uint256,uint256)", +"1e566dae": "_moveToken(address,address,uint256,bytes,address,bool)", +"1e567582": "gxc()", +"1e57e3bb": "EtherReceived(address,uint256)", +"1e580615": "cashIn()", +"1e5890c4": "saveResult(uint256)", +"1e59b53f": "Medallion()", +"1e59c529": "register(string,address)", +"1e5a652b": "MDICOStage1(address,address,uint256,uint256,uint256,uint256)", +"1e5b433b": "testTransferControl()", +"1e5bd14a": "setRegulator(address,bool)", +"1e5c6176": "BitChordCrowdsale(address,address)", +"1e5d1a4c": "End(string)", +"1e5d2e41": "geneCore(uint256,uint256,uint256)", +"1e5d2e78": "_updatePools(uint8,uint256)", +"1e5d629d": "createChannel(bytes32,address,uint256,address,uint256)", +"1e5e668f": "fetchDataMain()", +"1e5e8aa9": "token_rate()", +"1e5f34af": "sub(uint8,uint8)", +"1e5f3569": "createEIP20(uint256,string,uint8,string)", +"1e5f35f3": "Prover()", +"1e5f9149": "getWinner(bytes32)", +"1e5fc8e7": "bonusThirdWeek()", +"1e5ff41a": "tier5()", +"1e6000c2": "AffiliateReceived(address,address,bool)", +"1e6090f4": "isContractDeprecated()", +"1e60ab84": "PalaceResidence()", +"1e625935": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address)", +"1e626456": "tokenFallbackData()", +"1e6288fa": "soldTokenValue()", +"1e629a75": "StartNextStage()", +"1e62a511": "cHWCtoEth()", +"1e62a915": "set_participant_topl_address(address,uint256)", +"1e62be25": "Bytes32Passer()", +"1e639798": "reset(address,address,address,address,address,address)", +"1e63b3d3": "bancorConverterAddress()", +"1e658b74": "_userSignUp(string,address)", +"1e659135": "PVBToken()", +"1e65dc88": "EtherMemes()", +"1e6704bd": "maintenanceSetAccountsList(address[])", +"1e688c14": "fulfillBounty(uint256,string)", +"1e6b0e44": "finderFee()", +"1e6b4c6f": "setStakePeriod(uint256)", +"1e6bd462": "getAllGamesCount()", +"1e6c3d0e": "BLACKCOIS()", +"1e6c593c": "checkClaim(string,string)", +"1e6d4180": "stageBonus()", +"1e6d58ce": "AHA_Token()", +"1e6e5d81": "addContact(bytes32,address)", +"1e6efc83": "setRestartGamePeriod(uint256,string)", +"1e6f01a7": "setPI_edit_23(string)", +"1e6f9c1e": "adjust_Transfer_data(bool)", +"1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", +"1e70a239": "getAllGiftTemplateIds()", +"1e711ec0": "plan_active_time()", +"1e7230c5": "benReady()", +"1e7231b6": "disablePhenomenon(bytes32)", +"1e724447": "icoTill()", +"1e725589": "getAddressesFromUsernames(string[])", +"1e72a7fc": "calculateVariation(uint64,uint64,int64)", +"1e72d642": "BezantToken()", +"1e737709": "getSourceValue(uint256,uint256,uint256)", +"1e73b362": "withdrawContractEther(uint256)", +"1e7401d9": "ArconaToken(uint256,uint256,address,address,address,address,address,address,address)", +"1e7421a2": "changeKYC(address,bool)", +"1e745e61": "createContest(string,uint256)", +"1e74a2d3": "getMinimumEndowment()", +"1e74c414": "WashExchange()", +"1e7527b0": "setOwner(uint32,int256,address)", +"1e75c12d": "ETLTokenPresale(address)", +"1e7769de": "tryForcePublic(uint16)", +"1e77933e": "change(address)", +"1e77b2e0": "updateRate(string,uint256)", +"1e78cfe1": "minimumPayout()", +"1e79933f": "removeTagByModuleType(uint8,bytes32[])", +"1e7a505f": "register(address,bytes32)", +"1e7a5bf7": "testMintAuth()", +"1e7ae71f": "owner1Of(uint256)", +"1e7be210": "whitelists(address)", +"1e7bef65": "setIncubatorContract(address)", +"1e7c20ac": "getCompte_24()", +"1e7c27cb": "ADMIN_CONTRACT()", +"1e7c402b": "test_percOf2()", +"1e7cedb7": "TKTToken()", +"1e7d84cb": "getproduuct(uint256)", +"1e7de8cc": "setChibiGEN0Price(uint256)", +"1e7e2064": "addPeers(address[])", +"1e7e4b5e": "PREISSUED_AMOUNT()", +"1e7ea8d5": "getFreelancerCategories(address,address)", +"1e7fa008": "amountRemaining(address,bytes32[])", +"1e801c8c": "sealForChanges(uint256)", +"1e81086d": "setDirectMintAgent(address,int256)", +"1e815fcd": "isBuyOpen()", +"1e81ccb2": "pings()", +"1e820325": "finalizeRound()", +"1e822140": "transferToLockedBalance(address,uint256)", +"1e829230": "createGrant(bytes32)", +"1e82965e": "DCTR()", +"1e83409a": "claim(address)", +"1e83bab7": "singleInvokeWith2Args(address,string,address,uint256)", +"1e83cdab": "extract()", +"1e83ce17": "houseFeeThreshold()", +"1e83e697": "setTokenOptions(bool,bool,bool)", +"1e841271": "setTestFee(uint256)", +"1e84c725": "emergencyTransfer(address,address,uint256)", +"1e85107c": "bonusPercentages(uint256)", +"1e8551e3": "voteRewardPerUnit(uint256)", +"1e85e8f0": "TLN_TOKEN_SYMBOL()", +"1e860d43": "setNewInvestorsList(address)", +"1e86ccf5": "setOperatorCommission(uint256)", +"1e871309": "rewards_id(uint256)", +"1e872f55": "setPlayerLastUpdateTime(address)", +"1e8784c9": "SabrinaToken()", +"1e87fe1d": "setSmallCapWhitelistParticipant(address,uint256)", +"1e8812f3": "BonusCrowdsale(uint256)", +"1e891c0a": "setTimelock(uint256)", +"1e892c21": "returnForRedemption(uint256,uint256,uint256)", +"1e893437": "stageClose()", +"1e8997ec": "PUNCToken()", +"1e89c83b": "read_where_gadget(uint256)", +"1e89d545": "multiTransfer(address[],uint256[])", +"1e8a98cf": "UP_totalBets()", +"1e8b0d03": "EventBankrupt()", +"1e8b31dc": "batchPay(address[],uint256[],address[])", +"1e8bf006": "getNumbersFromString(string,string,uint16)", +"1e8bf1f9": "readInt256s(bytes32[])", +"1e8c72b4": "incrUserAvailBal(address,uint256,bool)", +"1e8d1510": "KeyFund(uint256,uint256)", +"1e8d15f8": "LasVegas()", +"1e8f11ab": "candleCost()", +"1e8fba36": "fortifyClaim(address,uint16,uint256)", +"1e909841": "getEmployerContracts(address,address)", +"1e912334": "maxDonors()", +"1e923f1b": "myAddr_test()", +"1e924bf8": "tokensReleasedPerPeriod()", +"1e92a65c": "teamAmounts()", +"1e935ab1": "requestPause()", +"1e93c209": "powerPool()", +"1e93d358": "multiStake(uint256,uint256,uint256,uint256,uint256)", +"1e9447f3": "hasDuplicate(string)", +"1e9493d8": "ETH_MAX_GOAL()", +"1e962e62": "F0002Token()", +"1e96bf0e": "separate(address,uint256)", +"1e9824ee": "setExchangeRates(uint8,uint8)", +"1e982b40": "saleOverInTime()", +"1e98d334": "initRace(uint8[4])", +"1e98d54a": "addGlobalConstraint(address,int256,bytes32,address)", +"1e9a04a7": "secondRoundICOStart()", +"1e9a6272": "onDelivery()", +"1e9a6950": "redeem(address,uint256)", +"1e9b1312": "accountAddress()", +"1e9b91db": "VictorieumNewICO2Token()", +"1e9be6a1": "usdEthPrice()", +"1e9bf0da": "disown()", +"1e9cefa3": "updateEmployeeWallet(uint256,address)", +"1e9d2d28": "NewGame(uint256,bytes32,bytes32,bytes32,address,uint256)", +"1e9d3bc9": "LZXToken()", +"1e9d48cf": "checkUser(address)", +"1e9d8232": "TheGame(address)", +"1e9da16a": "n_domains()", +"1e9dd927": "kycVerify(address,bool)", +"1e9e541c": "TEAM_TOKENS2()", +"1e9e6949": "ActiveChanged(address,bool)", +"1e9e928e": "GBPValue()", +"1e9ea66a": "balanceEther10000000(uint256)", +"1e9eb554": "deathData_v14()", +"1e9f3c24": "ETH888CrowdsaleS1(address)", +"1e9f6dcb": "ticketsFaceToFaceSold()", +"1e9fcc77": "activateAllowance(address,address)", +"1ea06b9e": "_allowManualTokensGeneration()", +"1ea0d0de": "endRace()", +"1ea103d0": "Registra()", +"1ea134b9": "PeculiumOld()", +"1ea1380c": "getScores()", +"1ea1e522": "claimF()", +"1ea333ea": "_generateDutchAuction(uint256,uint256)", +"1ea3cae9": "addressToAccountMap()", +"1ea48870": "isFunder(address)", +"1ea5a292": "endorse(uint256,uint256)", +"1ea5efc4": "partner1_voted_update_marriage_status()", +"1ea6af82": "reward9()", +"1ea6b97f": "getTotalTokensOwed(address,uint16[])", +"1ea7b0f9": "Bilibit()", +"1ea82655": "generatePartnerTokens(uint256)", +"1ea8b099": "endMark()", +"1ea906b5": "leftTokens()", +"1ea90acd": "fetchOrdersForPayer()", +"1ea92826": "currentTierIndex()", +"1eaa6c4b": "firstTokenExchangeRate()", +"1eab0a95": "testingContracts()", +"1eabc116": "buy(uint16)", +"1eabef31": "YKToken()", +"1eada765": "getConditions(uint256)", +"1eae5ff9": "getWaitPreselled()", +"1eae85cb": "priceOfDate(uint256,uint256,uint256,uint256)", +"1eaec76f": "FENIX(uint256)", +"1eafe00c": "isAmendedEarlyPurchase(uint256)", +"1eb02078": "getUIntTypesCount(uint8[])", +"1eb21875": "artistManifestoFundAddress()", +"1eb22b45": "sellerDatabase(address,uint256)", +"1eb25d13": "InitialSupply()", +"1eb25e0a": "configure(uint256)", +"1eb3957b": "requestDelegatedFrom(address)", +"1eb42523": "update(address,address,address)", +"1eb4dac6": "endSecondWeekICO()", +"1eb55c51": "CEI()", +"1eb5cb66": "resume(string)", +"1eb5de94": "privateExchangeRate()", +"1eb5ea2e": "returnFunds()", +"1eb726af": "contractAddress(string)", +"1eb79e44": "gasForGR()", +"1eb8befb": "setNewMediator(address)", +"1eb92366": "setRecommenderMulti(address[],address[])", +"1eb96a5c": "cancelOwnershipOffer()", +"1eb96f7c": "MahalaToken()", +"1eb9ef91": "getAccountsForUser(address)", +"1eba7c7a": "setDefaultClaim(string)", +"1ebb24bc": "_postTransferHook(address,address,uint256)", +"1ebbc515": "MakerWithdrewAsset(uint256)", +"1ebbe681": "getWinningById(uint256)", +"1ebcbc93": "transferAdminShip(address)", +"1ebcdba4": "getWactive(uint8)", +"1ebcf2fb": "reclaimParsecCredit()", +"1ebd8263": "setMinimumBuyAmount(uint256)", +"1ebd8e6d": "XEVENUE()", +"1ebdaf8b": "testNewAccountHasZeroBalance()", +"1ebdd39a": "getWithdrawalData(uint256)", +"1ebde78b": "getSecondsTimeLockedByString(string)", +"1ebe1827": "EthLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"1ebe5051": "StarzToken()", +"1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", +"1ebe8105": "tokenPriceUSDWEI()", +"1ebeb80b": "getBools()", +"1ebebb9b": "_checkAndSub(bytes32,bytes32)", +"1ebedded": "setAllRates(uint256,uint256,uint256)", +"1ebeec82": "_withdrawNAC(address,uint256)", +"1ebf0d11": "sellAllAmount(address,address,uint256,address,uint256)", +"1ebf1f5b": "hasSellerGuarantee()", +"1ebf42e5": "TokenAFL(uint256,string,uint8,string)", +"1ebfa2df": "getDiscountsAmount()", +"1ebfa358": "dateToTimestamp(uint16,uint8,uint8)", +"1ebfdca0": "servicesLength()", +"1ec29a5f": "getPurchasedAmount()", +"1ec32d15": "companyWallet()", +"1ec41163": "lastWinnerAddress()", +"1ec42d50": "_createWarrior(uint256,address,uint256,uint256,uint256,uint256)", +"1ec68b92": "saveMetaData(address,bytes,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", +"1ec6b60a": "startVoting()", +"1ec6dba6": "SimpleSaleToken()", +"1ec75025": "developerWithdraw()", +"1ec762a4": "setlvlWebsite(string)", +"1ec7cda4": "addTokenInternal(address,address,uint256)", +"1ec7e345": "tokenValue()", +"1ec87b86": "getTravelPrice(uint256)", +"1ec8a460": "AdifyToken()", +"1ec8bb8c": "distributeReward(address,uint256)", +"1ec8d4ef": "setMinBetForJackpot(uint256)", +"1ec8d5f7": "initialReleaseDone()", +"1ec8f9ba": "purchaseTickets(uint256[])", +"1ec9c2c0": "Sub(uint256,uint256)", +"1ec9f7b5": "longTimeLock()", +"1ec9fc84": "pendingFeesWithdrawals(address)", +"1eca98ce": "transferToAdvisors(address,uint256)", +"1ecb3889": "EurocoinB()", +"1ecb450e": "Devpr()", +"1ecc05f2": "validDelegate(address,string,address)", +"1ecc17c4": "pauseTransfer(bool)", +"1ecc56f2": "initTimeOf(uint256)", +"1ecc644f": "vestStage()", +"1ecca316": "nextFreeTier()", +"1ecd0d03": "PoSPerCent()", +"1ecd3f30": "tokenReserved4()", +"1ecd9f21": "calculateDrugBuy(uint256,uint256)", +"1ecdfd2f": "setIEIAddress(address)", +"1ecfd4c3": "takeToken()", +"1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", +"1ed01f61": "maxWagerWei()", +"1ed0c2cc": "LifeSet_004()", +"1ed0e01c": "ltdParams()", +"1ed113ae": "getSignature(bytes)", +"1ed1d0f7": "KryptoGiftsMessages()", +"1ed1f196": "pf(address)", +"1ed20347": "cfo()", +"1ed24195": "getPeriod()", +"1ed2730a": "createInvoice(uint256,address,address)", +"1ed27a14": "setPoliceNodesPerReport(uint256)", +"1ed358e6": "recycleAppearance(uint128[5],uint256,uint128)", +"1ed378a1": "getHybridizationPrice(uint256)", +"1ed454a5": "memberLevel(address)", +"1ed5336b": "changeExerciseprice(uint256[],uint256[],uint256[])", +"1ed5da2f": "Controller_Address1()", +"1ed64f7b": "is_king_for_sale()", +"1ed692c0": "finalizeCrowdfunding()", +"1ed6a6ab": "emitFeeAuthorityUpdated(address)", +"1ed6f423": "changeDescription(address,string)", +"1ed77dc8": "presaleWallet()", +"1ed7830e": "partnerWallet()", +"1ed83fd4": "setHash(string)", +"1ed8f023": "BlockableContract()", +"1ed96e32": "disableTransmit()", +"1eda49be": "AheVotingBrainfood2()", +"1eda61d4": "customBonuses(address)", +"1edb0e73": "GILToken()", +"1edc44ed": "GameCoinToken()", +"1edc5ce0": "SUPPLY_FOR_MARKETING()", +"1edc8f03": "withdrawalEth(uint256)", +"1edc8f91": "openAuction(uint256)", +"1edd19e1": "bidExpireBlockLength()", +"1ededc91": "repayBorrowVerify(address,address,address,uint256,uint256)", +"1edf0c1e": "lockAndDraw(address,bytes32,uint256)", +"1edf0c3d": "TESTTOKEN()", +"1edf49ff": "myFirstToken()", +"1edfdb48": "addjoinlist_odd(address,uint256)", +"1ee04a3d": "TLTContract()", +"1ee13d0a": "creditDao()", +"1ee1665d": "WAMToken()", +"1ee17afd": "Thief()", +"1ee185ad": "roleRemove(address,string)", +"1ee284b1": "rockOwners(address,uint256)", +"1ee2e3cf": "unsetBlacklist(address)", +"1ee2fe6a": "defreeze(address,uint256)", +"1ee392c6": "getMaxProfitAsPercentOfHouse()", +"1ee426e1": "Eth2preNSP(uint256)", +"1ee44a5e": "listRequire(string,uint256,uint256,uint256)", +"1ee45da0": "sellEndTime()", +"1ee53e56": "presaleRate(address)", +"1ee55080": "getMotherCount(uint32)", +"1ee5f936": "stopTeamTokenTransfer()", +"1ee7c4bc": "LogNewAllocation(address,uint8,uint256,uint256)", +"1ee7ccc7": "preIcoInvestorsAddresses(uint256)", +"1ee952ad": "getPhysician(address)", +"1ee97dda": "_intervalFor(uint256)", +"1ee9f029": "PREICO_HARDCAP()", +"1eea92c1": "levelExpAdjustment()", +"1eeaa389": "lockSupply(bool)", +"1eeac5d5": "TradelizeToken(uint256)", +"1eebb48c": "___test(address,address)", +"1eeccead": "tokensAlreadyMinted()", +"1eed0347": "applicationNameHashTaken(bytes32,bool)", +"1eed0f27": "setPriceUSD(uint256)", +"1eed1192": "newUser(string)", +"1eed4e09": "getVoteBy(address)", +"1eee993a": "addChild(address)", +"1eef94bd": "setAwardedUnfreezePeriodSeconds(uint256)", +"1eefddb1": "grace()", +"1ef0625b": "player_2(uint256)", +"1ef085db": "price3rdWeek(uint256)", +"1ef09ccf": "executeDelegateCall(address,uint256,bytes)", +"1ef17972": "ChangeOwner(bytes32,address)", +"1ef2c6d1": "closeTurnByHand(uint256)", +"1ef31b0d": "erotixFund()", +"1ef3755d": "restart()", +"1ef410e2": "addAudit(uint256,bool)", +"1ef5b90f": "release_(address,uint256[],uint256[])", +"1ef60485": "returnAccounts()", +"1ef741fd": "interestPeriod_()", +"1ef75084": "getCompoundPlan(uint256)", +"1ef75b1a": "GGToken(address,string,string,uint256,uint256)", +"1ef7b68a": "purchaseReceiptById(bytes32)", +"1ef8766f": "reserveTokens(uint256,uint256,bytes)", +"1ef987c1": "getInvestedAmount(address)", +"1efad671": "isPreSaleReady()", +"1efb06e0": "LogNewWallet(uint256,address)", +"1efb17ee": "changeHouseAddress(address)", +"1efba6c2": "fixedPrice()", +"1efdebb2": "hodlersCount()", +"1efe3abf": "getNumTasks()", +"1eff2b2f": "advisorIssueVesting(address,uint256)", +"1effc0d8": "createPerRound()", +"1f00c55b": "TOKENS_CAP()", +"1f0276fc": "_getKey(bytes32,uint256)", +"1f03bc1b": "setNewUserBonusCardTradable(bool)", +"1f049a49": "tokensBank()", +"1f04b54c": "test_ConsensysReached()", +"1f04becc": "ppFinishTime()", +"1f05ff29": "fromWeiToFp(uint256)", +"1f065f56": "KangGuo()", +"1f06c859": "promises(uint256)", +"1f078962": "setFlowerContract(address)", +"1f078f56": "winTokens(uint256,address)", +"1f0815ce": "togglePromo(bool)", +"1f09b0a2": "getDisplayGenVault(uint256)", +"1f0a21ad": "setAdvisers(address[],uint256[])", +"1f0b2561": "getCurrentBonusPercentage()", +"1f0b5553": "setBalances()", +"1f0ba6c9": "trade()", +"1f0c03f4": "forwardEndTime(uint256)", +"1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", +"1f0c5f26": "CashMove(uint256,bytes32,address,address)", +"1f0da298": "transferTokensAndEtherValue(address,address,uint256,uint256)", +"1f0de21c": "addrunmoney(address,uint256,uint256)", +"1f0f2ce4": "withdrawOrderRefund(uint256)", +"1f0f711f": "discontinue()", +"1f0fd191": "test_threeValidEqUint()", +"1f0fd905": "getAssetIdCargo(uint32)", +"1f101520": "preIcoMin()", +"1f107635": "ownerSetAdmin(address[])", +"1f1144dc": "ViewOffer(address,uint8)", +"1f11d503": "GameSicBo(string,uint256,uint256,uint256)", +"1f124116": "approveSettingUpdate(uint256,bool)", +"1f12da06": "getPropertyPrivateModeLastUpdateEarnUntil(uint16)", +"1f130761": "tokensSent()", +"1f130d1f": "insertAddress(address)", +"1f13b5ae": "NokuMasterToken(uint256,uint256)", +"1f13de92": "inEther(uint256)", +"1f13f165": "NecromeunToken()", +"1f14df69": "balances(address,bytes32)", +"1f150322": "LogUserUnregistered(address,address)", +"1f15bc1b": "disallowTransfersTo(address)", +"1f15e163": "LaunchRocket(uint32,uint32,uint32,uint32,uint32,uint32)", +"1f161533": "distributeXYZ(address[],uint256)", +"1f167829": "nextDraw()", +"1f16c8b9": "getEndDateOfCampaign(bytes32)", +"1f16fda4": "multiTransfer(address[],address,uint256[])", +"1f1836fa": "isPresalePurchase()", +"1f1886e4": "extendSale(uint256)", +"1f18e56e": "removeOwnersWithHowMany(address[],uint256)", +"1f194b9f": "getFreeKilo()", +"1f1953ad": "addPokemonToMaster(address,uint256)", +"1f1aea6e": "initSale3(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1f1b11cc": "buyMinerFromSale(uint256)", +"1f1bd005": "getRocCoreAddress()", +"1f1bd692": "text()", +"1f1c827f": "StartGame(string,string)", +"1f1c84b7": "decreasePresetTransfer(address,uint256)", +"1f1cb62b": "peg()", +"1f1dc61b": "checkPayLoan()", +"1f1de456": "regName()", +"1f1e1295": "isApprove(uint256)", +"1f1e2cfa": "calcUnMaskedEarnings(address,uint256)", +"1f1e6c4e": "createCollectible(uint256,uint256,address)", +"1f1ea554": "HolahopToken()", +"1f1ec029": "updateKeyPrice(uint256)", +"1f1eef6b": "getContributionHashByIndex(uint256)", +"1f1f5e76": "addValueToContribution(uint256)", +"1f1f8240": "_parseIntScientific(string)", +"1f201d7e": "level_judgment(address,address)", +"1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", +"1f20f762": "losingAmount(address,uint256)", +"1f212106": "startICOStage7()", +"1f218cf1": "ICO_PERIOD()", +"1f21f9af": "marketMaker()", +"1f220be0": "unlock(string,bytes32,address,address,uint256)", +"1f221d4c": "updatePublicityBalance(address,uint256)", +"1f227fc8": "importTokensFromSourceToken(address)", +"1f23a9bc": "getAcceptedAndRejectedVotes(uint256,uint256)", +"1f23c22b": "getOpenBids(bytes32)", +"1f25cfaf": "changeBot(address)", +"1f261939": "payBid(bytes32,uint256)", +"1f2698ab": "started()", +"1f275713": "prefixed(bytes32)", +"1f278d32": "MyartPoint()", +"1f27a8b5": "set_transferrable(bool)", +"1f28c821": "tokensPreMinted()", +"1f296600": "brickETHPrice()", +"1f299c1a": "updateRegistry(bytes32,address)", +"1f29bdcf": "setAStore(string,address,address)", +"1f2a3e06": "scissors()", +"1f2c6414": "getAddressBatchByUsername(bytes20[])", +"1f2d62bc": "gameStartedAtBlock()", +"1f2d8d66": "getNumberVote(uint256)", +"1f2dc5ef": "divisor()", +"1f2e5461": "LOUDEX()", +"1f2e886c": "testControllerTransferTriggersEvent()", +"1f2e97c8": "slaveWalletPercentInitialized()", +"1f2ea6e0": "dealership(address)", +"1f2ec9c9": "setHoldAmount(address,uint256,uint256)", +"1f2efa83": "allocateIntoHolding(address,uint256,uint256)", +"1f2f7fc3": "dispute(uint256,uint256)", +"1f305ec7": "removeFromKycTeam(address)", +"1f30edc7": "CTOSignature()", +"1f312375": "referralBonusRate()", +"1f32768e": "getSubscription(bytes32)", +"1f32c18f": "getDrink(uint256)", +"1f34556a": "changeMaxReward(uint256)", +"1f34563c": "newUser(string,string)", +"1f34d1d3": "registerAppVersion(bytes32,bytes32,address,bytes4[],address[])", +"1f35bc40": "setCrowdsaleAddress(address)", +"1f3634ed": "ink(bytes32)", +"1f368fa6": "ExtrabitToken()", +"1f378b8a": "refundEther(address)", +"1f38034c": "removeEmailAddress(string)", +"1f38c358": "allocateIds(uint32)", +"1f390975": "MAX_TOTAL_CONTRIBUTIONS()", +"1f3943df": "SURT(uint256)", +"1f39716c": "aggregateBet(uint256,uint256)", +"1f39a141": "getTokenAmount(uint256,address)", +"1f3a3a53": "mint(int256,uint256)", +"1f3a4c14": "addFreezableAddress(address)", +"1f3a7c0b": "FOUR_YEAR_KEEPING()", +"1f3a98d1": "getReferralRates()", +"1f3b3148": "endEpochTimestamp()", +"1f3bec3b": "secondarySaleReserveWallet()", +"1f3c99c3": "logout()", +"1f3ce938": "increasePresaleEndTime(uint256)", +"1f3ceb51": "getGameById(bytes32)", +"1f3d3261": "JustForward(uint256)", +"1f3dcc8d": "maxGasPricePenalty()", +"1f3e1c8d": "LogTokensPurchased(address,uint256,uint256,uint256)", +"1f3e50f6": "withdrawBCEO()", +"1f3e64e6": "getTXwithCode(address)", +"1f3ee21f": "setUsdEthValue(uint256)", +"1f3fd5ca": "PI_EDIT_1()", +"1f3fe8d1": "ICO_BONUS1_SLGN_LESS()", +"1f3fed8f": "tokensForMarketing()", +"1f400477": "inLendingMode()", +"1f402356": "markContractAsInited()", +"1f417317": "WalletSimple(address[])", +"1f42103c": "AworkerToken(uint256)", +"1f4356e4": "emissionFunds()", +"1f43f396": "startICOStage5()", +"1f4425f3": "checkCloseTimer()", +"1f44a40f": "airDropSame(address,address[],uint256)", +"1f44b1de": "ValithToken()", +"1f45006c": "checkEthRaised()", +"1f455922": "removeToken(string)", +"1f45ad5c": "modifyContentAccess(bytes32,bool,uint256)", +"1f461f0d": "withdrawableAmountFor(address)", +"1f468245": "calculateObtainedBUB(uint256)", +"1f46eb98": "agentPermission(address)", +"1f470b14": "lockUpAmountOf(address)", +"1f471ad0": "proxyMint(address,uint256)", +"1f47b50d": "MineablePOWCoin()", +"1f47ba29": "safeToMul(int256,int256)", +"1f4848ef": "setTakeFee(uint256)", +"1f48af0a": "updateWeapon(uint256,string,string,string)", +"1f48ff7c": "mintMarketMakerApproval()", +"1f49aff4": "ACLYDcid()", +"1f49caac": "canUseLock()", +"1f4a5c32": "confirmTransactionAfterExpiry(uint256)", +"1f4a6d32": "removeEth()", +"1f4ab41e": "createUser(bytes32,bytes32,uint256)", +"1f4ae468": "returnETHforNormalBuyers()", +"1f4b8e41": "getLastUpdateId()", +"1f4ca28f": "isAdvisorsTokensSecondReleased()", +"1f4d7ec4": "newParameterizerWithToken(uint256,string,uint8,string,uint256[])", +"1f4dba8e": "OPTinToken()", +"1f4dde9f": "Jade()", +"1f4e01d9": "absoluteEndBlock()", +"1f4e1504": "upgradeContract()", +"1f4e996b": "challenge(bool)", +"1f4f77b2": "timestampFromDate(uint256,uint256,uint256)", +"1f4f9ab1": "supervisorVote(uint256,bool)", +"1f4fc29c": "refShare()", +"1f502a13": "volumeDiscounts(uint256,string)", +"1f513660": "ctoAddress()", +"1f522595": "donationsCount()", +"1f52692b": "vaultOwner()", +"1f52cc35": "removeTrustedContracts(address[])", +"1f532b39": "getRelation(address)", +"1f534715": "ComplexChildToken(address,string,string,uint256,uint8,bool,int256,bool)", +"1f535833": "referralCodeAt(address,uint256)", +"1f53ac02": "setDevWallet(address)", +"1f54d80d": "verifyCustomer(address,bytes32,bytes32,uint8,bool,uint256)", +"1f5623f3": "ZebiToken()", +"1f572504": "JackToken()", +"1f57256f": "transferEth(uint256)", +"1f583087": "ClickGemTokenERC20(uint256,string,string)", +"1f59653c": "setprices(uint256,uint256)", +"1f59d30e": "unlockEarnings(address,uint256)", +"1f5a0bbe": "addExecutor(address)", +"1f5a0dd2": "courts(uint256)", +"1f5a177f": "registerVestingScheduleWithPercentage(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"1f5a2a52": "getDamageValue(uint256)", +"1f5bb9f8": "Refund_TrustlessTransaction(uint256)", +"1f5bdf5d": "isRegisteredUser(address)", +"1f5c3a3c": "approveMultiple(address,uint256[])", +"1f5c6f67": "getOpeningTimeByStage(uint256)", +"1f5d0b4c": "address(address,address,uint256)", +"1f5dddab": "WithdrawContribution(uint256)", +"1f5dfcd5": "lastBlock_a7()", +"1f5e881f": "_buyTokens(address)", +"1f5e8f4c": "isRestricted()", +"1f5e9a2a": "CyberMilesToken()", +"1f5eeb13": "tokenSendFailuresCount()", +"1f6034fd": "getInt8FromByte(bytes14,uint256,bytes1)", +"1f60d9f7": "crowdfunding_allocation()", +"1f617a60": "setReceivable(address,bool)", +"1f6275bb": "issueTokenAndTransfer(uint256,uint256,address)", +"1f63a350": "settle(bytes32,bytes32,uint8,bytes32,bytes32)", +"1f64c1f2": "getInvestorInforValue(uint16)", +"1f66531d": "getEsgoTX(uint256)", +"1f67298d": "Daq()", +"1f677d8d": "ownershipLength()", +"1f68f20a": "baseRate()", +"1f69565f": "getTokenInfo(address)", +"1f69aa51": "left77(uint256)", +"1f69d230": "setMultiLedgerValue(string,address,address,uint256)", +"1f69f929": "teamVestingCounter()", +"1f6a1bf7": "lastDifficultyAdjustmentEthereumBlock()", +"1f6a1eb9": "execute(bytes,bytes)", +"1f6a3943": "icoBackend()", +"1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", +"1f6b28bf": "valueOf(string)", +"1f6b5b7d": "setRefundState()", +"1f6b9b97": "placeBet(uint8,int8,uint8,uint256)", +"1f6c0a9b": "ReleaseLockedBalance(address,uint256,uint256)", +"1f6c76f4": "reserveDeveloperTokens(address,uint256)", +"1f6ce1d3": "setDaySellAmount(uint256,uint256)", +"1f6d2086": "setCooldownIndex(uint256)", +"1f6d3d13": "AddrDevelopGroup()", +"1f6dc06c": "SetSaleStep(uint256)", +"1f6de588": "PiedPiperNetworkCoin()", +"1f6e5117": "getCallbackAddress()", +"1f6e6f3a": "DigitalThothToken()", +"1f6eb6e7": "escapeHatchCaller()", +"1f6ee77a": "setInitialData(address)", +"1f6eeb68": "canMintBurn()", +"1f6f3c0f": "getShipProductAmountByModel(uint16)", +"1f706c64": "EndTimeUpdated()", +"1f71f250": "updateTopicAddress(bytes15,address)", +"1f720e71": "testThrowTranferTooManyTokens()", +"1f7266e8": "owner_TransferFromTo(address,address,uint256)", +"1f7299c1": "processSell(address,uint256,uint256)", +"1f72d7d8": "increaseCap(int256)", +"1f7334e2": "TransferFlower(address,address,uint256)", +"1f74de51": "getAuditOutcome(address,bytes32)", +"1f772a34": "token_symbol()", +"1f77aac0": "queryUserContract(address,uint256)", +"1f790a94": "BananaGame()", +"1f794436": "getBlockHeader(int256)", +"1f7a41f1": "rawNameOf(address,address)", +"1f7a72f7": "bobClaimsDeposit(bytes32,uint256,bytes32,address,address)", +"1f7ab15d": "setdecimals(uint256)", +"1f7af1df": "canReceiveMintWhiteList()", +"1f7b4f30": "roll(uint256)", +"1f7b5318": "getBlocklancerToken()", +"1f7b6d32": "length()", +"1f7b8622": "getVotingDeadline()", +"1f7bf1eb": "_mintShares(address,uint64)", +"1f7c4bf3": "AccessControl()", +"1f7ccc09": "initAssetFile(string,string,string,string,string,string)", +"1f7cdd9b": "unicornsGifted()", +"1f7d16f7": "managementWalletAddress()", +"1f7df96f": "registLogo(address,address,string)", +"1f7e3e72": "test_oneValidEqStringUint()", +"1f7e495b": "systemSupply()", +"1f7f3082": "addForwarder(address,address)", +"1f7fe78b": "balanceAtSnapshot()", +"1f800e8e": "releaseVested()", +"1f803ac3": "getUnlockedTokens(address)", +"1f807736": "withdrawFreeAuctionBalances()", +"1f81582c": "returns()", +"1f816c6d": "hodlerReward()", +"1f820f52": "migrateEuroTokenOwner(address,uint256)", +"1f83bcd7": "withdrawlDeadline()", +"1f83d11a": "addMilestonesAndSeal(uint256[],uint256[],uint256[],uint256[])", +"1f83d75e": "updateProfileDetails(string)", +"1f83f440": "getPaymentByAddress(address)", +"1f86ab51": "confirmCollection()", +"1f86ffda": "UpdateBid(address,uint256,uint256)", +"1f8712af": "isValidPurchase(address)", +"1f871726": "getCategoryWorkClockTimeRef(uint256)", +"1f879433": "setSolver(address)", +"1f8814ad": "ElyERC20(uint256,string,uint8,string,bool,bool)", +"1f8864ac": "setStorageOwner(address)", +"1f887d56": "CryptoSagaDungeonVer1(address,address,address,address,address,uint32,uint256,uint256,uint32,uint256,uint32,uint32,uint32[4],bool)", +"1f8947c1": "extractUint(int256,bytes,uint256,uint256)", +"1f89e911": "getCompositionPrice(uint256)", +"1f8ac604": "mul0()", +"1f8ae3f0": "proofFailed(bool)", +"1f8c07b0": "startPhase(uint256,uint256,uint256)", +"1f8d1d50": "setTotal(uint256)", +"1f8d99a9": "assetIsRegistered(address)", +"1f8df2cd": "setGeneScientist(address,bool)", +"1f8e6fb3": "transferSale(address,uint256,uint256,uint256)", +"1f8e728c": "addMilestone(uint8,uint256[],uint8[])", +"1f8e9143": "AcceptsKDI(address)", +"1f8ea5e8": "EternalChainToken()", +"1f8eac47": "spentByTeam()", +"1f8f1d21": "addMember(uint256,address,bytes32)", +"1f8f69e3": "fechAllVoteResultForCurrent()", +"1f8f8100": "Tspace()", +"1f8fcc45": "Vantador(address)", +"1f903037": "getBytes32()", +"1f903b5d": "preSaleSpenderTxDetails(uint256)", +"1f90b2a5": "snapshotBlock()", +"1f90ffc8": "AddSupply(uint256)", +"1f91666d": "newOrganisation(string,string,string,uint8,bool)", +"1f91e309": "getBuyBackPrice(uint256)", +"1f922d06": "duplicate()", +"1f92f6b7": "setBtcUsdRate(uint256)", +"1f934299": "calcConfirmsNeeded(uint256,uint256)", +"1f960571": "picops_balances(address)", +"1f963f80": "getReportingWindowId(uint256)", +"1f96938d": "deliverSale(address,uint256)", +"1f96add4": "ChronoMint(address,address,address)", +"1f974fe4": "NExT()", +"1f979e23": "GetRigData(uint8)", +"1f97a238": "rejectCertificate(uint256)", +"1f97c00e": "tokenCreationMax()", +"1f97ea5d": "EDU_PER_ETH_PRE_SALE()", +"1f97f2ef": "issuedTokensForCommand()", +"1f98394d": "basicReward()", +"1f994137": "booleanStorage(bytes32)", +"1f995ef1": "HDCTestToken()", +"1f9988c9": "transferTokens(bytes32,address,uint256)", +"1f99c458": "listNamesLen()", +"1f99d862": "test_method_increaseTimeBy30000()", +"1f9a08ca": "reelIn(uint16,uint16,bytes32,bytes32)", +"1f9a391c": "setCanCreateGrants(address,bool)", +"1f9ab193": "place(uint8)", +"1f9b1153": "initiateMigration(uint256)", +"1f9c381e": "setTokenMinAmountBuy(address,uint256)", +"1f9c5580": "AMIS(address)", +"1f9c564f": "rubusOrangeAddress()", +"1f9c649f": "HashInvalidated(bytes32,string,uint256,uint256)", +"1f9d7ab8": "addTokens(uint256,string)", +"1f9ea25d": "_setDepositAccount(address)", +"1f9eba17": "bitcoinInvest(address,uint256,uint256)", +"1f9ecab1": "TowerImagesCoin()", +"1f9ef7fa": "getPayoutNumerator(uint8)", +"1f9f168e": "startNewRound(address)", +"1f9fed62": "checkMySellerOffer(address)", +"1fa03a2b": "isApprovedFor(address,address)", +"1fa08755": "upgradeDexterity(uint256)", +"1fa08ad8": "EtchReward(uint256)", +"1fa0914e": "buyStamps()", +"1fa096e6": "isInversor(address)", +"1fa0dc70": "saveReturnSatoshi(address,uint256)", +"1fa13a61": "longTermTokens()", +"1fa224bf": "setOraclizeAddr(address)", +"1fa24aa7": "makePermanantlyTradable(uint8)", +"1fa30523": "doMint(address,uint256)", +"1fa3c372": "redeemTokens(bytes32)", +"1fa3cfaa": "bmc(uint256,uint256,address)", +"1fa4070c": "TestCoinVN()", +"1fa422a2": "earliestNextSettlementTimestamp()", +"1fa45291": "arrayOfClones(address)", +"1fa498ce": "messagetodovie()", +"1fa4c486": "PublicResolver()", +"1fa4d9de": "completedAddingParsels()", +"1fa4ea66": "reservationAddress()", +"1fa59521": "FTBCToken()", +"1fa5e43b": "freezedBalanceOf(address)", +"1fa62fb7": "setCountrySlogan(uint256,string)", +"1fa6f19b": "getAddressForQuery(bytes32)", +"1fa96b96": "currentProposalResults(uint256)", +"1fa98406": "fundType()", +"1fa9d21f": "DASABI_IO_Contract()", +"1faae8b3": "getTypeValue(uint256)", +"1fab0265": "messiDev()", +"1fab3fd4": "setFinishedTx(address)", +"1fabb318": "MAX_ALLOWED_BY_STAGE_1()", +"1fabe6cf": "getActualCompletionDate(bytes16,address,address,uint256,uint256)", +"1fad4d46": "getShipOwner(uint32)", +"1fad4e79": "sevenWinnerWithdraw()", +"1fae75eb": "Xandra()", +"1fae9361": "changeTimes(uint8,uint8)", +"1faec182": "getBet(uint8,uint256)", +"1faf1ed4": "unlockTip()", +"1faf8995": "fillOrder(address,bytes32,uint256,bytes32)", +"1fafc2c8": "updateBusinessReserveAddress(address)", +"1fb00cdc": "investWithId(uint128)", +"1fb150c4": "_batch1_icosaleEndTimestamp()", +"1fb156ef": "ecmul(uint256[3],uint256)", +"1fb168ac": "setStopStatus(bool)", +"1fb1f18b": "getWinnings(address,uint256)", +"1fb25f07": "getCertification(bytes32)", +"1fb291cb": "registerInt(address,int256)", +"1fb2de2c": "sendTokensToTwo(address,address,uint256)", +"1fb2f2a0": "testUpdateLatestRevision()", +"1fb384cb": "RemoveRocketForSaleEvent(address,uint32)", +"1fb47fe8": "CulturePhilosophyFaithChain()", +"1fb4bcf8": "SetSaltPassword(bytes32,bytes32)", +"1fb4d1e7": "TheMutualCurrency()", +"1fb59f9d": "swapProxyTokens()", +"1fb6e99d": "paymentNeeded(uint64)", +"1fb82d26": "storeProof(string)", +"1fb8875d": "referralSent()", +"1fb8c0ed": "releaseEQUIWihtoutKYC()", +"1fb8d5de": "vaultUnlocked()", +"1fb97c34": "updateFirstAmount(bytes32,bytes32,uint256)", +"1fbab493": "checkPrice(address,address,bool,uint256,uint256)", +"1fbb408a": "RacingToken()", +"1fbb4def": "CalculateDividents(uint256)", +"1fbbf4bb": "setKillingGap(uint256)", +"1fbcf2c1": "_lotterySupply()", +"1fbd3564": "getContentsManager()", +"1fbd7771": "didSoftCapReached()", +"1fbd9a0b": "REFUNDSACTIVE()", +"1fbda78f": "LibraryToken()", +"1fbe1979": "rescue()", +"1fbe480e": "shipToMe(string,uint256)", +"1fbe7475": "findEndpointByAddress(address,address)", +"1fbeaa83": "PublicBatchTransfer(address,uint256)", +"1fbee22c": "updateSearchingFee(uint256)", +"1fbee6ed": "CNYTokenPlus(uint256,string,uint8,string)", +"1fbf7c3e": "increaseReserve(uint256)", +"1fbfe6f3": "auditReport(address,bool,bytes32,bytes32)", +"1fc03aa0": "getTypeByNumber(uint256)", +"1fc05f86": "minimalWei()", +"1fc06f0d": "niceGuys(uint256)", +"1fc083cf": "OurBit()", +"1fc0e5e9": "StartPaymens()", +"1fc1e25f": "listToken(address)", +"1fc242b9": "onVote(address,int256)", +"1fc24caa": "changeMaxTransactions(uint256)", +"1fc27ef2": "isIcoActive()", +"1fc2e0fb": "MinedThisYear()", +"1fc3a519": "computeReturn(uint256)", +"1fc5b4ee": "balancesByIndex(uint256,address)", +"1fc5c9b7": "setNextPeriod(uint256,uint256)", +"1fc62fce": "Trillionereum(address,address)", +"1fc6e13a": "getRoundKeyPrice(uint256)", +"1fc75e41": "preSaleWallet()", +"1fc7d658": "purchase(address[16],uint256)", +"1fc82e83": "allocateUnclaimedFees()", +"1fc86532": "endBlockBonus2()", +"1fc87587": "get_CountProfitsToken()", +"1fc928ae": "taxToken()", +"1fc97e34": "Genius()", +"1fc983fb": "ChelseavsArsenal()", +"1fca5278": "highScore()", +"1fca5fda": "IsRazRunning(uint256)", +"1fcafd8f": "FomoMasterCoin()", +"1fcb292d": "getTokenFunction(uint8)", +"1fcbbefa": "sendBooty(address,uint256)", +"1fcc02e8": "EthereumTestToken()", +"1fcc2515": "ChangeCrowner(address)", +"1fccc158": "tCampaignEnd()", +"1fcd08f0": "AaadharDemo()", +"1fcd7ea6": "getPOOL_edit_33()", +"1fcdfe14": "icoTokenAmount()", +"1fcf25be": "getTransactionSuccess(bytes32,uint256)", +"1fcf55ff": "withdrawApplication()", +"1fd01085": "_sellPresale(uint256)", +"1fd01de1": "_checkOnERC721Received(address,address,uint256,bytes)", +"1fd023ab": "FFCryptoCoinToken()", +"1fd22140": "CountCourses()", +"1fd2676f": "jackPotPercents()", +"1fd2e006": "changeClassFee(uint256,uint256)", +"1fd3dd97": "OneEtherEqualsInWei()", +"1fd41949": "setMaxInvestedLimit(uint256)", +"1fd476bd": "AutonomousSoftwareOrg(bytes32,uint8,uint8,bytes32)", +"1fd4b40c": "saleEtherCap()", +"1fd55a8a": "crowdsaleOpened()", +"1fd7b802": "ModifyMine(uint256,bool,string,uint256)", +"1fd7f431": "setCCH_edit_7(string)", +"1fd8088d": "minLimit()", +"1fd8291a": "endpresale()", +"1fd86a6a": "FundICO(uint256)", +"1fd96b69": "ManagedAccount(address,bool)", +"1fd97c12": "CNotesICO()", +"1fd982a5": "releaseForEarlyInvestor(address,uint256)", +"1fd9b2a4": "createValidatedRequest(address[3],address,uint256[12],uint256,bytes)", +"1fd9f187": "catNoLongerForSale(uint256)", +"1fda4271": "MindToken()", +"1fda5b45": "receivePlayerInfo(uint256,address,bytes32)", +"1fda8278": "drawCoach(uint256,address,address)", +"1fdaedf2": "BoomstarterPresale(address[],address,address,bool)", +"1fdaf3f2": "ServiceAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"1fdb5a2b": "addInvestmentPreIco(address,uint256)", +"1fdba848": "BiekensToken()", +"1fdcf5a7": "lockEthBalance(address,uint256)", +"1fdd7695": "getbuyprice(uint256)", +"1fddbba4": "totalVUP()", +"1fde4607": "setCreditDaoFund(address)", +"1fde8469": "setExchangeRate(uint32)", +"1fdf071c": "approveMintAgent(address,bool)", +"1fdf6e0c": "protectKingdom()", +"1fdfa40d": "test_setupBoardRoomAndAssert()", +"1fdfec35": "calculateTotalDue(uint256,uint256)", +"1fe00a15": "individualMaxCapTokens()", +"1fe07274": "SDEToken(uint256,string,string)", +"1fe08e28": "how_many_arbits_do_i_have()", +"1fe0ff58": "finishRound(uint256)", +"1fe1516d": "sendToTeamEthContract()", +"1fe15db5": "MarketboardListingComplete(address,uint256,uint256,uint256)", +"1fe1b208": "totalavl()", +"1fe26e9d": "componentCount()", +"1fe2a6f2": "updateJugada(uint256,bool)", +"1fe2c933": "UpgradeByCredits(uint256,uint256)", +"1fe2d046": "assignRafflePrize(address)", +"1fe2e229": "getTotalTrust(address)", +"1fe3aec7": "CGCGToken()", +"1fe4ee7f": "getVoteItemDetails(uint256)", +"1fe51f82": "persistLimit()", +"1fe55867": "rew()", +"1fe6189e": "PARTNERS_ADDRESS()", +"1fe64f19": "MaximumHodlDurationChanged(uint256,uint256)", +"1fe74895": "Etherchicks()", +"1fe7b624": "resumeMint()", +"1fe7ff2c": "SpriteToken()", +"1fe8149e": "createTokenByHWC(address,uint256)", +"1fe8500e": "setItemRegistry(address)", +"1fe8629a": "giveMultipleItemsAndDestroyMultipleItems(address,uint256[],uint256[])", +"1fe93774": "totaleFrasi()", +"1fe97e45": "whoIsConcerned(address)", +"1fe9eabc": "setMax(uint256)", +"1fea96cd": "removeUserFromBlackList(address[])", +"1feac75b": "setCommissions(uint256,uint256)", +"1feaee17": "getSetupParametersByIndex(uint256)", +"1feb0c4f": "PreICOProxyBuyer(address,uint256,uint256)", +"1feb19d6": "initialize(uint256[],uint256[],uint256,address,uint256,address,address)", +"1feb3569": "transferToken_toBalance(address,uint256)", +"1fec0e96": "LogCampaignAdded(uint256,address,uint32,uint96,uint16,uint16,uint256)", +"1fec5a11": "Coin77()", +"1fec6dce": "createVestingPeriod(address,uint256,uint256,uint256,address,address)", +"1fedbc03": "getSharesPercentForPeriod(bytes32,uint256)", +"1fedd70b": "snipCoinToEtherExchangeRate()", +"1fee37c8": "ADDR_TKG_NODE()", +"1fee5c51": "set_min_max_FinneyPerSale(uint256,uint256)", +"1feef08e": "getTotal(uint256)", +"1ff13086": "size(int256)", +"1ff14311": "totalOutcomeAmounts(int256)", +"1ff1a378": "maxSalesAllowed()", +"1ff2c22b": "setCharityFund(address)", +"1ff2e214": "proposeAmendmentJUR(address,uint256[],uint256[],bytes32)", +"1ff42195": "minimum_cash_proof_amount()", +"1ff517ff": "totalDebt(address)", +"1ff5668c": "depositForDividends()", +"1ff5e17c": "_itemLength(uint256)", +"1ff6536c": "setCrowdSaleStart(uint256)", +"1ff6a54b": "cancelFavor()", +"1ff6ad55": "tokensForPeriod(uint256)", +"1ff6c241": "collectedUSD()", +"1ff75851": "updateICODate(uint256,uint256)", +"1ff76f86": "ROBReserveAllocation()", +"1ff7a278": "ownerNegTokens()", +"1ff858d0": "activateNextStage()", +"1ff8ac8a": "getFinalval()", +"1ff8d507": "toggleSwap()", +"1ff96c74": "getHonour(uint256)", +"1ffa27f9": "hasPermissions(address)", +"1ffa451c": "serviceTransfer(address,address,uint256)", +"1ffb6ca6": "unlockTransfer(address,uint256)", +"1ffbb064": "isAgent(address)", +"1ffbf32b": "MUSPRA()", +"1ffc973a": "HedgeCash()", +"1ffcb18c": "numQuestions()", +"1ffd3aef": "log10Floor(int256)", +"1ffd42ab": "getVotingScriptAction(uint256,uint256)", +"1ffd99f4": "saler()", +"1ffe3c9b": "UECToken(address,uint256)", +"1ffe4cca": "startline()", +"1fff2d8a": "payToPresale(address)", +"1fff5c2f": "bindEthereumAddress(address,bytes32)", +"1fff7a97": "CompositionPart(uint256,address)", +"1fffbe7a": "getJobSponsorships(uint256)", +"200138b9": "CrowdTmoney()", +"20020a3a": "createAsset(bytes,uint256,bytes,bytes,address)", +"20027275": "saleStartBlock()", +"2002c2f6": "slogans(uint64)", +"200308ee": "rewardVoteResultForCandidate(address,uint256)", +"20033848": "MagixRecordsCoin()", +"20035e36": "icoEth()", +"200373c9": "fees_()", +"2004b6a6": "TheWhaleWins()", +"2004dff6": "Basics()", +"2004ffd9": "mintToken()", +"200538c6": "DTE()", +"200576b5": "TchainToken()", +"2005db6d": "preIco(uint256,uint256,uint256,uint256[],uint256[])", +"2007474e": "theRelayer(address)", +"20076659": "Arbitrator()", +"2008c2ca": "destPercent(address)", +"2009a059": "setLandProductionMultiplier(address)", +"200a252a": "PhanToken()", +"200aa519": "addCustomerwithToken(address,uint256,address)", +"200aac9f": "burnAZLTEST(uint256)", +"200b0fa6": "initVote(uint8)", +"200b894d": "assertEq(int256,int256,bytes32)", +"200b8951": "_distribute(address,uint256,uint256,uint256)", +"200c1f19": "premiumPacks()", +"200c7295": "whitelistAddress(address,uint256)", +"200c7770": "bountyDuration()", +"200cdf8e": "becomePickleRick()", +"200d10dc": "OrpheusOrganicsLaos()", +"200d2ed2": "status()", +"200deb8b": "MessageSent(string,string,string,uint256)", +"200ebe34": "addTokensToGive(address)", +"200ef97e": "payNTS()", +"200f29e3": "advisorAccount()", +"200fbcf0": "getFullyVestedAmount(address,address)", +"201035ed": "getGunsIds()", +"20104dca": "engCommunityAddress()", +"2010bdce": "removeSupervisor(address,address)", +"20120dce": "ADMIN_SET_TEST_RANDOM(string)", +"20130753": "testThrowSetNotRetractableNotOwner()", +"20145328": "changeMelonportAddress(address)", +"2014c515": "tgrNextPartInvestor()", +"2014d703": "approveAllArgs(address,uint256,address)", +"2014e1fb": "W0keAFCrowdsale(uint256,uint256,address,address,address[])", +"2014e5d1": "isRunning()", +"20150e21": "sendDividends(uint256)", +"20153d38": "EarlyAdoptersAmount()", +"20154e78": "unpausePVP()", +"20158c44": "fills(bytes32)", +"201745d5": "disown(bytes32,address)", +"2017af61": "initialTokensHolder()", +"2017ee03": "nextDealIndex()", +"20183926": "EngagementToken()", +"20185aa2": "liquidityWithdraw(uint256)", +"20188d4f": "getAdjustedContribution(address)", +"20190ccd": "startCirculation()", +"201bafee": "TroneriumSupply()", +"201dcd7a": "newChallenge(uint256,uint256)", +"201de654": "mnemonicsCount()", +"201e8f0e": "changeWhitelistCornerstoneStatuses(address[],bool)", +"201e908e": "blockDuration()", +"201f1506": "EthereumEra()", +"201f6e02": "oldAppreciationRateWei()", +"201f96e5": "setRepMarketCapInAttoeth(uint256)", +"20202965": "expired(bytes12)", +"20204fb7": "genericCall(address,bytes,address)", +"2020e9ea": "bid(uint16,uint16)", +"2021dfcb": "BONUS_DURATION_3()", +"20226e17": "valueOnContract()", +"2022936f": "BalanceClaim(address)", +"202329cb": "get_all_activityn(uint256)", +"2024617e": "initialize(string,string,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"20250264": "setData_5(uint256)", +"2025867b": "qualifiesAsCommunityBallot(uint16)", +"2025e52c": "createSaleTokensVault()", +"20260697": "createWallet(uint256,address[],bytes32)", +"20263e87": "incentiveTokenAddress()", +"2026a0a7": "change_sale_address(address,string)", +"20277ed7": "GWGFPLUS(uint256,string,string)", +"2027d2c6": "ETHLottery(address,uint256,uint256,uint256,address)", +"2027d746": "getCustomerCount()", +"2027e1d3": "COCO()", +"20281990": "ProposalAddedEvent(uint256,address,uint256,string)", +"20283da9": "trustedWithdrawETH(address,uint256)", +"202920ef": "FST()", +"2029e599": "addCode(string,string)", +"202a46cf": "limitEther()", +"202a6ce0": "NFXCoin()", +"202ac3bc": "withdraw(bytes,bytes,bytes32)", +"202b876a": "allocateToMarketingSupporter(address,uint256)", +"202bb36d": "JTBlockchain()", +"202bc7e7": "getIntervalCoefficientMultiplier(uint256,uint256,uint256,uint256)", +"202c413d": "setNickname(uint256,bytes32)", +"202ca027": "setPayrollAddress(address)", +"202d5123": "STRTToEth()", +"202d6eaf": "addInvestorsValue(uint256)", +"202e3924": "getOperation(uint256)", +"202ece74": "sendToWinner(uint16)", +"202feb77": "test_2_assertGasUsage100Boards()", +"2030762a": "PoolICO()", +"2030f721": "num_objects()", +"20323763": "addPerformance(string,uint32,uint8,uint8,uint8,uint16,bool)", +"2032677f": "roundOpen()", +"20334668": "verify(uint256,uint256,uint256[],uint256,uint256,uint256[],uint256[])", +"20339891": "addGridMember(address)", +"2033d9ae": "switchToDistributionMode(uint256)", +"2033de43": "setNewRatesCustom(uint256,uint256,uint256,uint256,uint256,uint256)", +"20352a6e": "ChildDeposit()", +"2035d6b4": "addAccountData(string,bytes)", +"20364306": "setMaxLinkedWalletCount(uint8)", +"2036e2f7": "getCurrentExchangeRate(uint256)", +"20375692": "initVesting()", +"2037fcbf": "withdrawInvestment(uint256)", +"2038d1e5": "setTokenMintFeeAbs(address,address,uint256)", +"2038e2e6": "timestampLast()", +"2038e80a": "mixFormula()", +"20392160": "round1Sold()", +"20396553": "safeMul(int256,int256)", +"203967a5": "toDie(bytes32)", +"203985d6": "getWeeklyTickets(address)", +"20398971": "abiOf(uint256)", +"20398b83": "sendPrepaidEthTweet(uint256,string,uint256)", +"2039b386": "isHashSigned(uint256)", +"2039d9fd": "depositERC20Token(address,uint256)", +"203a318f": "ico_startdate()", +"203a79f6": "cutoffTimestamp()", +"203ab888": "collectOriginalBet()", +"203b2352": "_checkOpenings(uint256)", +"203c03fa": "Coinflip()", +"203cbee2": "ownerPetTransfer(address,uint64)", +"203d39ff": "getOrderBook(address,address)", +"203dacb9": "PrivatePreSale()", +"203e0dc9": "SupbToken()", +"203e3204": "goldIfFreeze(address)", +"203faa89": "lastState(address)", +"203fb521": "addTransaction(address,uint256,bytes,uint256)", +"203fec23": "LogTransfer(address,address,uint256,string)", +"204009d2": "transferForMultiAddresses(address[],uint256[])", +"20409b47": "updateContent(string,uint256)", +"2041518d": "calculatePrice(uint256[],address)", +"2041b997": "tokenizeProperty(string,address)", +"20422fd9": "setAutoInvestByAdmin(address,bool)", +"204241cb": "leaveTeam(uint256)", +"2042495b": "changeUsed(address,int256)", +"2042e5c2": "removeWhiteList(address)", +"2043285d": "getMarketMakers()", +"2044b21b": "exceedsSaleCap(uint256)", +"204525e6": "mul256()", +"204605ad": "ngrzicoToken()", +"2047e4af": "updateTokensState(uint256,uint256)", +"2048cba4": "inGroup(address)", +"2048e5f7": "PaytherToken()", +"20495427": "setBreedingAuctionAddress(address,address)", +"204a88c5": "hasAgreement(bytes32)", +"204b21d1": "AVAILABLE_BONUS3_SUPPLY()", +"204b676a": "numVestingEntries(address)", +"204d3d65": "getCountPlayersOfTeam(uint256)", +"204e6749": "rewardToken(address,uint256,uint256)", +"2050c26e": "preSaleFourthCap()", +"205140c7": "totalClaimableTokens()", +"20514abf": "tktotal()", +"20522347": "changeEndDate(uint256,uint256)", +"20523d0d": "closeAgreementWithTimeout(bytes,uint8[2],bytes32[2],bytes32[2])", +"2052de16": "checkContinuousPurchase(uint256)", +"2053480e": "ActionMiningPlat(address,uint16,address)", +"205360e0": "setReward(uint64,uint256)", +"2053e690": "turnOffOraclize()", +"20544010": "getWinningsForRecordId(uint256,bool,bool)", +"20547a42": "increaseDailyTransactionVolumeReceiving(uint256)", +"2054b2c6": "assert(address,address)", +"205525d2": "set_comp(uint256,string)", +"2055c2ff": "SerchUserPurchase(address,address)", +"20566ae8": "initMonsterClassSiteSet()", +"2056ab36": "NewNodePriceTicker(string)", +"20572943": "SignedMessageOracle(bytes32,uint8,bytes32,bytes32)", +"205730fd": "SELL()", +"2057420b": "withdrawVault(uint256,address)", +"2058308d": "_addPropertyValue(bytes32,address)", +"20592076": "HeyToken()", +"2059c548": "exerciseOptionsDeadline()", +"205b1946": "hasContributed(address)", +"205b931e": "addOracles(address[])", +"205ba186": "DSJL()", +"205c2878": "withdrawTo(address,uint256)", +"205c7cf5": "issueCenturion(address)", +"205c9cc7": "w()", +"205d0063": "feeTakeExporter()", +"205d6c86": "purchaseEgg(uint64,uint16)", +"205dc0ee": "poolAddressCapTier1()", +"205e0e26": "advisersCliff()", +"205e921c": "delegatedRefund(address,address)", +"205f3b58": "calculateOwnerCut(uint256)", +"2060a150": "props()", +"20610779": "deathData_a2()", +"20614514": "HHDToken()", +"20620f37": "onAuctionEnd(string)", +"206288d3": "deployBlockNumber()", +"2062e457": "setDirectPaymentThreshold(uint256)", +"2063165d": "union(uint256[],uint256[])", +"206369fa": "AthleteToken()", +"206465f7": "_getPendingOwner()", +"20647eb7": "externalFailure()", +"20651d5d": "batchTransferToken(address,address[],uint256[])", +"20654277": "ArtsCoinV1()", +"206545c2": "DIAMOND()", +"206607f2": "updateCanFetch(bool)", +"20675504": "hyperInterface()", +"2067c85c": "transferTokensFromMarketingAddress(address,uint256)", +"20688582": "saleIsRunning()", +"20689f29": "preSalePeriod()", +"2069381a": "multiPresaleMint(address[],uint256[])", +"20694db0": "addIssuer(address)", +"2069de94": "TonalQuantum()", +"2069f66c": "isPresalesNotEndedInAdvance()", +"2069fc46": "excludeAmbassadors(uint256,address)", +"206a44f3": "getNum(bytes,uint256)", +"206b64b4": "generateName(bytes16,uint256,uint256)", +"206cfd24": "cleanFinishedOperations(uint256)", +"206d0125": "getWithdrawnFromBatch(address,uint8)", +"206d1fde": "setMegaAddress(address)", +"206d468f": "PriceOracleInterface(address,address)", +"206ec7a1": "multisend(address,bytes32,address[],uint256[])", +"20701967": "confirmPlatformWithdrawal()", +"2070748c": "XeroBest()", +"20709b35": "jackpotPaused()", +"2070b6de": "donationPhase()", +"20714f88": "setSelfDestructBeneficiary(address)", +"2072343e": "MeowToken()", +"2072863b": "setCMO(address)", +"20729b83": "DistributeButtonIncome()", +"2072cde2": "NewsCash()", +"207368fc": "startSelling(uint256,uint256)", +"20745669": "ClaimedSignature(address,string)", +"2074cc86": "MikCoinToken()", +"2075281c": "Marko()", +"2075eec6": "tokenQuantities()", +"20768ee8": "getProposalID()", +"20770caf": "GRUCoin()", +"2079405b": "AmountToDistribute()", +"20799608": "convertDecimal(uint256)", +"2079fb9a": "signers(uint256)", +"207a6c33": "calculateCurrentVirus(address)", +"207a6d80": "TukBuk()", +"207aba24": "Migrate()", +"207acb53": "_calculateRequiredTokenBalance(uint256,uint256)", +"207b89e2": "purchaseLand()", +"207bd99d": "ableTransfer()", +"207beb59": "getRateIcoWithBonus()", +"207c64fb": "validate(address)", +"207cb710": "grantInvestorTokens(address)", +"207e6467": "pieBalances(address)", +"207f4f38": "contTransfer(address,uint256)", +"2080d8dc": "EVTCTLToken(address,uint256)", +"20813154": "deregister(bytes32)", +"2081e911": "Set()", +"208318bd": "Total_Amount()", +"20832219": "setOps(address,bool)", +"2083250d": "Atriark(uint256,string,uint8,string)", +"20834ed0": "AddPlayers(address,address)", +"20835e8c": "getBet()", +"2083c730": "_hatchEggs(address)", +"2083cbd8": "execAirDrop(address,address[],uint256[])", +"2083f44f": "lastFell()", +"20857295": "setErc20TokensContract(address)", +"2085f554": "approveAndCall(address,uint8)", +"20867ccd": "addEmployee(uint256,string,string,string,string,string,string,address)", +"2086ad60": "MiewGold()", +"20871322": "ForecastingFactory(address)", +"208838c8": "tokenPerWai()", +"20885d9e": "PGE02CH()", +"208904c7": "startFrom()", +"208972b4": "PartialPayment(uint256,address,address,uint256)", +"2089d0c9": "Swachhcoin(address)", +"208a099c": "createKitty(uint256,uint256,uint256,uint256,address)", +"208a9e37": "tweakRefundStatus()", +"208af09f": "setIsForking(bool)", +"208b080f": "changeExpiryLimit(uint256)", +"208b3116": "next(uint256,uint256)", +"208b7427": "AgriChainContext()", +"208c1019": "BLOCK_BASIC_PRICE()", +"208c8692": "mint(bytes,uint256,bytes,bytes)", +"208ca719": "SellIPG(uint256)", +"208df65f": "getValueByNumber(uint256)", +"208e1cc3": "writeConditions(uint256,string)", +"208e8914": "atFundDeposit()", +"208eba04": "_withdraw(address,uint256,address)", +"208ebf16": "lpBidVolume()", +"20907d9a": "BlockClout()", +"20909455": "triggerAirDrop(address[],uint256)", +"20909fa0": "communityCurrency()", +"2090b0a8": "m_allowPrivileged()", +"2090cf8b": "consultBalance(address)", +"2090d5e9": "lookupByProject(uint256)", +"2090d8a6": "trackOdd(uint256)", +"2090f3e3": "lethalBonusAtHitsLead()", +"209164d5": "_processPurchase(address,uint256,uint256)", +"20917902": "globalether()", +"2091f2d9": "ICOoverTimeStamp()", +"2092970f": "StartDistrib()", +"20940b13": "btcTransactionClaimed(uint256)", +"2094e9d8": "newJob(bytes32,bytes32)", +"20956341": "slice2(bytes,uint256)", +"2095f2d4": "endCrowdsale()", +"20965255": "getValue()", +"20968dc7": "rewardHistoryLengthOf(address)", +"2096b768": "getCoreAddress()", +"2096c958": "GEXAirDrop(address)", +"2096f2ff": "issueTokensMultiple(uint256[],uint256[])", +"2097dd04": "getLatestAuthorizedAddresses(uint256)", +"2097e5f0": "VaultbankToken()", +"209878b9": "lockReleaseTime()", +"20987e64": "addInvestment(address,uint256)", +"2098e37a": "LogBoonReleased(address,uint256,uint256,uint256)", +"2099940e": "freezOne()", +"209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", +"209ab711": "registerReferral(address)", +"209b7067": "CALLGToken(uint256,string,string)", +"209b80ce": "previousstageloser()", +"209bb163": "Ethex(address,address,uint256,uint256)", +"209cccd7": "channelCloseTimestamp(uint64)", +"209ebc08": "isPaid()", +"209f36d0": "registerApiKey(address,address,bytes32)", +"209f3c9c": "MINIMAL_PARTICIPATION()", +"20a0045a": "SALE_END_TIME()", +"20a0128e": "ICOEndDate()", +"20a09dec": "COMM_SUPPLY()", +"20a168b1": "coinsPerEth()", +"20a17b24": "dexWallet()", +"20a2b135": "forkThis()", +"20a3952b": "MyTestGameToken()", +"20a4e8f8": "_clearSnapshotDelegators(uint256,address)", +"20a60ace": "TokenBurner()", +"20a733df": "countPerformers()", +"20a7b2d7": "_setMintFeeProp(uint256)", +"20a7d5c3": "lend(uint256,bytes,address,bytes)", +"20a99bd0": "templates(address)", +"20aac36f": "getstopBlockNumber()", +"20aba08b": "rho()", +"20abf417": "stageFourCap()", +"20acbc83": "withdrawTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"20ad3874": "vestingBonusMultiplierPrecision()", +"20ad8a81": "setTeamTokensPercent(uint256)", +"20ae2059": "setMaximumBet(uint256)", +"20af0841": "_payPayee(bytes32,address,uint256)", +"20af2042": "setCountPerStep(uint256)", +"20b023c8": "disavow()", +"20b0554e": "payoutBalance()", +"20b0747f": "start1stRound()", +"20b0961c": "pE(uint256,uint256,uint256,uint256)", +"20b0eafb": "PoWH4D()", +"20b0fe2c": "setGlobalParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint32)", +"20b1b0ab": "getStuckCoin(address,uint256)", +"20b1d054": "TAAS_VAULT()", +"20b27291": "setFinalized(bool)", +"20b28ade": "getIPFSHash()", +"20b2af52": "Author()", +"20b2d97b": "LiquidDemocracyRules(address,address[],uint256)", +"20b3c9c9": "InfinixSupply()", +"20b43094": "mulUInt(uint256,uint256)", +"20b431aa": "dividendDivisor()", +"20b44b29": "lockTransfer(bool)", +"20b4577e": "numBonuses()", +"20b4fc29": "setBbAddress(string)", +"20b519bb": "setBarrierAsOpen(bool)", +"20b652ba": "chainedFunctions()", +"20b748f4": "REGULAR_TYPE3()", +"20b7ceb8": "R2Xtoken()", +"20ba5b60": "insert(bytes,bytes)", +"20bacfbd": "addDoc(string)", +"20bb0ef6": "originalHash(uint256)", +"20bb280b": "buy5(address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes)", +"20bb2adf": "setAllowedTransferFrom(address,bool)", +"20bc4425": "getHost()", +"20bcbee5": "EarlyTokenSale(address,address)", +"20bd0475": "resetLotteryBalance()", +"20bd46b7": "drawTertiaryAWinners(uint256)", +"20bf0c52": "Derived(uint256)", +"20bf2f47": "_setAddresses(address,address,address)", +"20bf92ca": "oldSeeleToken()", +"20bfa95c": "bookAndCalcRemainingPremium()", +"20bfde8b": "s24(bytes1)", +"20bfec70": "WatchFees()", +"20c0b493": "getWarriorChestPrice()", +"20c12f16": "penalizeInactiveJuries(address[],uint256[])", +"20c21ba5": "_setTypeValue3(uint256)", +"20c257f5": "_adjustReserve(uint256)", +"20c28b85": "schelling(address)", +"20c2d5e4": "withdrawAffiliatePot(address)", +"20c2f40b": "doCalculate(uint256,bytes32)", +"20c381af": "cityPoolTotal()", +"20c3be47": "_createZombie(string,uint256)", +"20c427b0": "sumBalance()", +"20c5429b": "revoke(uint256)", +"20c5478f": "RtBCoin()", +"20c55a8a": "AirDropAFTK5May()", +"20c58794": "PHN()", +"20c5b497": "recoverAddressFromBalanceProof(bytes32,bytes32,uint256,bytes32,bytes)", +"20c5e29a": "increaseDailyTransactionVolumeSending(uint256)", +"20c726b4": "view_product(uint256)", +"20c8580f": "getBalanceEthContract()", +"20c8651b": "makeFee()", +"20c90167": "distributeCDD(address[],uint256,uint256)", +"20c93c62": "trackFee(uint256)", +"20c9d73c": "validCountryId(uint256)", +"20c9f377": "OneUpToken(address)", +"20ca0418": "getEscrowById(uint256)", +"20ca292e": "AUFBToken()", +"20cad613": "isVersionLogic(address,bytes32)", +"20caea39": "surprisePanda()", +"20cb27fb": "requireWhitelistingBeforeDeposit()", +"20cb7bce": "takeFee(address,address,uint256)", +"20cc6889": "getAvatarByNickname(string)", +"20cc7b4e": "changeToken(address,address)", +"20cd2141": "advisorLockUp_address()", +"20cd3972": "grab(address,address,address,address,uint256)", +"20ce4c66": "getInteractive()", +"20ceb1bb": "SetCoinManager(address)", +"20ceb536": "grantToSetUnpausedWallet(address,bool)", +"20cf3e1f": "maintenance_mode()", +"20d00018": "jackpotTime()", +"20d01a7f": "ContestClosed(uint256,address[],address[])", +"20d0c13c": "getStatusModerator(address)", +"20d19181": "crowdsaleEndedBlock()", +"20d3a0b4": "unlockPeriod()", +"20d3fc20": "totalSeedStage()", +"20d615c2": "testControlTransferDisableNotEnabled()", +"20d71dad": "_repopTransaction(address,uint256,uint256)", +"20d76113": "admin_tokenBurn(uint256)", +"20d786b5": "withdrawalCounter()", +"20d7d367": "allowRegistryUpdate()", +"20d7d860": "ahmadToken(uint256)", +"20d8741f": "Feed()", +"20d8dad0": "checkWhitelisted(address)", +"20d95f90": "removeInt256(bytes32)", +"20d9822e": "setAnyoneCanCall(address,string,bool)", +"20d9a9e2": "getChallengeType(uint64,uint256)", +"20db0c7e": "B21Token(address,address,address,address,address)", +"20db31d6": "totalFortunes()", +"20db91e2": "createPartner(address,uint256,uint256,uint256)", +"20dc3d06": "bpLockUp(address)", +"20dc407a": "creditOwner()", +"20dc4677": "minPublicContribAmount()", +"20dcce99": "PRE_CROWDSALE_CAP()", +"20dce978": "setExchanger(address,address)", +"20dd60f5": "setEnvelopeType(uint256,uint256[2])", +"20ddf1de": "editEpisode(uint256,string,string,uint32)", +"20df7f35": "DATE_TOKENS_UNLOCKED()", +"20dfcd27": "purchaseCountry(uint256)", +"20dffb08": "testCancelSellOrder()", +"20e07e7f": "changeCardCost(uint256)", +"20e0dc9f": "RTCoin(string,string,uint8)", +"20e1063e": "toekensForBTCandBonus()", +"20e12a43": "createRound(bytes32,bytes32)", +"20e25965": "timestampRelease()", +"20e33b13": "GoodBit()", +"20e3dbd4": "setConfig(address)", +"20e537c7": "isTransactionAlreadySettled(address,bytes32)", +"20e561f3": "BecomePharaoh(uint256)", +"20e57371": "ownerVault()", +"20e59116": "startChampionGame()", +"20e62bbc": "StreamityEscrow()", +"20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", +"20e65a42": "stakeForAirdrop(address,uint256,bytes)", +"20e6a2cb": "getStrField1()", +"20e6e921": "transfer(address,uint8)", +"20e76d31": "_solveGame(uint256,uint256,uint256)", +"20e87093": "getDSTSymbolBytes()", +"20e89790": "POWR()", +"20e979b1": "assignBank(address)", +"20e98bf4": "setNick(string)", +"20e9aac3": "playerTimestamp(address)", +"20ea2533": "authorizePayment(string,bytes32,address,uint256,uint256)", +"20ea31f8": "giveTo(uint256,address)", +"20ea8d86": "revokeConfirmation(uint256)", +"20eb2a87": "setContract(address,address,address,address,address)", +"20eb6dec": "frozenControl(address,uint256,uint256)", +"20eba3f2": "gamesLength()", +"20ec0f01": "lastBlock_v12Hash_uint256()", +"20ec75c2": "searchStartIndex()", +"20ed1a52": "badge(address,address,uint8)", +"20ed9451": "set_active_contract()", +"20edae5a": "createChallenge(uint256,string,uint256)", +"20ee0c94": "setUrl(bytes32)", +"20ee5445": "addToPrivileged(address)", +"20eea675": "ESOPOffered(address,address,uint32,uint32)", +"20eeba1f": "testConstructorUsingNewContract()", +"20ef57ed": "bumpCounter(uint256)", +"20f067a8": "PRETDESupply()", +"20f06c9b": "start_LOCKUP(uint256)", +"20f06fef": "_createWarrior(uint256,address,uint256)", +"20f0751d": "turnOn(address)", +"20f0c28f": "MainContract(string,address,address,string)", +"20f0db91": "VerifCert(uint32,bool,bytes,bytes)", +"20f10ae7": "_supportsERC165Interface(address,bytes4)", +"20f10fdd": "tokenSupplyLimit()", +"20f1895c": "fechVoteSumNumForCandidate(address)", +"20f1d85b": "removeApprovedAddress(address)", +"20f317fb": "districtContractAddress()", +"20f320d0": "setBonusExtra(address,uint256)", +"20f361b3": "optionExercise(uint256)", +"20f3d413": "getTargetBlockNumber()", +"20f4014a": "ApolTestToken()", +"20f4914a": "changeMyString(string)", +"20f4d7aa": "redeemPayout()", +"20f541fa": "purchaseAsQualifiedPartner()", +"20f5a0b9": "readTeamByIndex(uint256)", +"20f5afdf": "OwnershipTransferInitiated(address)", +"20f5e8dd": "resetBalance()", +"20f65816": "extractToken(address,address)", +"20f71018": "Aqo()", +"20f727e2": "Caller(address)", +"20f756bd": "getArmySoldiersCount(uint256)", +"20f801d4": "payout(address,address,uint256)", +"20f86e9f": "_isBonusAvailable()", +"20fa6fd9": "ethSendSameValue(address[],uint256)", +"20fa70b0": "getAvailableWithdrawableCount(address,uint256)", +"20fb2bc2": "AllowClaimBTC(bool)", +"20fb36af": "Test8J()", +"20fb9bad": "LogSortedOffer(uint256)", +"20fc4881": "getCheckpoint(uint256)", +"20fcf2e5": "Castor()", +"20fd8861": "customerWallet()", +"20fea5cf": "getUserTaskAtIndex(uint256)", +"20fee8f1": "_timePer()", +"2100bf7a": "lolaToken()", +"21015328": "getLLV_edit_28()", +"21027354": "buyerHistory(address,uint256,uint256)", +"21029f47": "chickenHunt()", +"2102df31": "_totalDonations()", +"2104c2bb": "fundTeamInstant()", +"2104cdd2": "totalNumberOfScammers()", +"2104d832": "AddHelenium(address,uint256)", +"2104ebf1": "executeWithdraw(uint256)", +"2104fa0b": "skinIdToOwner(uint256)", +"21059e63": "createProposalAndPublish(bytes32,string)", +"2105c049": "setCSO(address)", +"21065f10": "mintInternal(address,address,uint256)", +"21067b3f": "startRoundWithFirstBet(uint256,uint256,uint256,bytes32)", +"210790c8": "signWholeConfiguration()", +"2107a796": "createGame(string,string,uint256,uint256,string,string,string,string,bool,string)", +"2108292e": "mint_(address,uint256)", +"210846ae": "is_kyced(address)", +"21090b31": "_decrementInventory(uint256,uint256)", +"210970c5": "update_count(uint256)", +"2109b408": "bitsMask()", +"2109cf80": "depositEth(address,uint256,bytes)", +"210a6eec": "sendMultipleAddress(address[],uint256[])", +"210a854b": "preIcoTokenHoldersAddresses(uint256)", +"210a8d0e": "changeGranularity(uint256)", +"210ab6af": "numOfJingles()", +"210ae4d5": "setTransferDisabled(uint256,bool)", +"210b7e0b": "tokenAllocation(address,uint256)", +"210ba961": "demurringFeeOwner()", +"210bc472": "ownerTokensMinted()", +"210bd306": "getCurrentHunterLicencePrice()", +"210c1f29": "closeBoard(uint256)", +"210c5a56": "_removeMinter(address)", +"210c5ff6": "getBlockNumber(bytes)", +"210d14b8": "burnPREICOTokens()", +"210d2bba": "PRICE_MULTIPLIER_PREICO2()", +"210dee2f": "setMigrateOut(bool)", +"210e2484": "icoDiscountPercentageLevel3()", +"210e734c": "isBoxItemId(uint256)", +"210e9a34": "getPendingReferals(address)", +"210f5dda": "createToken(string,string,uint8,uint256)", +"210fcbf6": "createPromoCutie(uint256,address)", +"210fd271": "sizeLimit()", +"210fe93b": "catIndexToAddress(uint256)", +"2110273d": "addToShareHoldersProfit(string,string)", +"21105d35": "addressForNonce(uint8)", +"21106109": "finalRate()", +"2110a57c": "User(address,bytes32)", +"2111006f": "create(address,address,bool)", +"21114904": "balanceOfEther(address)", +"2111871c": "endPreICOStage2()", +"2111c0f9": "freezeDeliverMuti(address[],uint256,uint256,uint256,uint256)", +"2111d1e2": "OnUpdateMessage()", +"21129137": "saleover()", +"2112e7fe": "getListGames()", +"2113342d": "totalDividendPoints()", +"2113aab4": "BTL_IMMORTAL()", +"21141c38": "updateInvestorFunds(uint256,uint256,address,uint128)", +"21141de0": "ReturnEthToEthero()", +"2114fd0f": "AxpireToken()", +"2115d328": "getSemiResult(uint256)", +"2115fd55": "RecievedEther(address,uint256)", +"21166476": "ARC()", +"2116b530": "ChangeOwner2(address)", +"21180138": "isCA(address,address)", +"21180722": "init(int256)", +"21187172": "Gate(address)", +"21188011": "maxIssuedWithAmountBasedBonus()", +"2119249f": "getNumTokens(uint256)", +"21194bc0": "devCutPercentage()", +"211a048a": "getFastestSpaceship()", +"211a04db": "totalToDistribute()", +"211a0f39": "ERC20TokenComplete(uint256)", +"211a1ba8": "changeTokenController()", +"211b2758": "changeBlockedTimeForInvestedTokens(uint256)", +"211b4f54": "startUpdate(uint256)", +"211b72a3": "sub1(uint256,uint256)", +"211db50d": "allowNewStakes()", +"211e28b6": "setLocked(bool)", +"211ed6c1": "freeTransfer()", +"211f0b93": "getCreateReputationTokenUniverse()", +"211f0ef9": "SaleOfChametz()", +"211f390e": "ECO_SYSTEM_HOLDER()", +"211feec5": "executeEtherDeltaSell(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", +"211ff90c": "SpiceControlled(address)", +"2120e527": "stakingBonus(uint256,uint256,uint256)", +"21217668": "getDrawBlockNumberByWinner(uint256)", +"2121dc75": "isTransferable()", +"212257de": "changeCap(uint256,uint256,uint256)", +"2123015e": "test_insert_findWithHintNextIncreased()", +"2123476b": "startConstitutionPoll(address)", +"21235083": "cancelSubscription(uint256)", +"21241e44": "addressOfTokenUsedAsReward3()", +"21242279": "MintToKen(address,uint256)", +"2125b65b": "transfer(uint32,address,uint224)", +"2126a923": "reverse(address,uint256)", +"2127c30a": "setBlockHash(bytes32)", +"2127fe90": "addOnStage(address,uint256)", +"21288400": "lastPurchaseTick()", +"21289506": "MichaelCoin()", +"2128a580": "total_claim_codes()", +"212954dc": "setAddBonus(uint256,uint256)", +"2129e25a": "finalBalance()", +"212a6fd3": "CloseEntry()", +"212a850c": "showMyNumber()", +"212ac4b5": "UnicornChain()", +"212ac7d1": "mintNewSpinner(uint256,uint256,uint256)", +"212bf316": "setCaps(uint256,uint256)", +"212c3fce": "returnTokensToAirdropper(address)", +"212c5fea": "close(bool)", +"212c8157": "disallowTransfers()", +"212d6723": "payRoyalty()", +"212e2596": "sellOrderTotal()", +"212ebbd6": "addTokenLock(address,uint256,uint256)", +"212f6066": "enableInvestment(address[])", +"21309ae3": "setTimeBonuses(uint256[],uint256[])", +"2131c68c": "daoAddress()", +"2132626f": "_removeByIndex(uint256)", +"21326768": "finishGame(bytes32)", +"213294cd": "crowdsaleHasEnded()", +"2132ce0a": "BASE_AMO_TO_ETH_RATE()", +"2132eb23": "TreasurerToken()", +"21335ad5": "getDepositAggregate(address,uint256)", +"21338d1b": "rewardsWithdrawalProposed()", +"2133ddeb": "settleBetV1(uint256,uint8)", +"2133e3b9": "calculatePercentage(uint256,uint256)", +"213408da": "sendCreatorReward()", +"2134214b": "getPreorders(bytes32)", +"21346edd": "savedBalanceToken()", +"2134927e": "setAuctionParms(uint256,uint256,uint256)", +"21355869": "getAuctionTimeLimits(bytes32)", +"2135810e": "curRequestId()", +"2135d2e4": "lasttokencount()", +"213671bf": "mainSale_TokenCap()", +"213681cd": "getRecord(bytes32)", +"21370942": "updateEthPrice(uint256)", +"21376d07": "scheduledPayout()", +"2139c2aa": "setwinnerLimit(uint8)", +"213a2622": "offerAsSacrificeFromVault()", +"213a72a7": "LightofGalaxy()", +"213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", +"213ad495": "TimeWeekTwo()", +"213ae9ec": "newGame(uint256,bytes8,uint256,uint256,string)", +"213aedb8": "getAllGames(bool,uint256,uint256)", +"213b9eb8": "setAddr(string,address)", +"213c3375": "callCustomTokenFallback(address,address,uint256,string,bytes)", +"213d6771": "editionData(uint256)", +"213d8f4a": "setCurrentRewardNum(uint256)", +"213db226": "move(address,address,uint8,uint256)", +"213e609f": "getTknOfferAmount(uint256)", +"213e84d3": "maxIssueTokenLimit()", +"213ea6bb": "donationReceiver()", +"213f44ab": "getUserAddressList()", +"213f9ad4": "generateWinners(uint256)", +"213fe044": "getInstanceAddress(address)", +"213fe2b7": "getContracts(address)", +"21420a3d": "_depositTokens(address,uint256)", +"21424e7d": "ETHcollected()", +"2142adc9": "changeMargin(uint256)", +"21435e07": "setTokensWallet(address)", +"2143da91": "GameOfThrones()", +"214405fc": "addToWhitelist(address,uint256)", +"21446cfe": "unitDefense(uint256)", +"2145465a": "SOUNDBOY()", +"2145a455": "getRebackRate()", +"2145e36c": "testBitSetFailIndexOOB()", +"21462191": "bid3(address,uint8[],uint8[])", +"21464e71": "inOneYear()", +"2147783f": "smitToken()", +"21479265": "addToBlackList(address,address)", +"21484786": "notificationFee()", +"21486833": "maxRewardUnitsAvailable()", +"21491e82": "secondCurrentAmount()", +"214958ba": "BLOCKCURRICO()", +"214962d1": "identifierHash(string)", +"21499737": "setIco2Tokens(uint256)", +"2149c619": "functionThree(uint256,uint256,uint256,uint256)", +"214ab314": "searchDiplomaByID(uint256)", +"214af6b9": "acceptTokensFromUsers(address,uint256)", +"214b146f": "storeName(uint256,string)", +"214bb60f": "finalised()", +"214c2a4b": "getServiceURI(address)", +"214c9d50": "WritedrawStatus()", +"214cdb80": "registerInterface(bytes4)", +"214dda84": "regularPhase()", +"214e52ca": "transferAllowed(address,address)", +"214e5f3a": "setForwardUpdateFeesTo(address)", +"214e8a47": "getSingleLocker(address)", +"214f71fe": "tokenFulfillmentDeposit(address[2],uint256,uint256[7],uint8,bytes32[2])", +"2150097f": "timerInfo()", +"2150c518": "getKeys()", +"2150c75d": "newItem(uint256,string,uint256)", +"2150cd56": "setRateAdmin(address)", +"2151f9a0": "TCT(string)", +"21520c5f": "calculatePayout(uint8,bool,uint256)", +"215213dd": "updateTierTokens(uint256,uint256,uint256)", +"2152b483": "OWN_SmartContract_Allowed(address,bool)", +"2152c649": "LOVEYOUToken()", +"2152ebac": "getContributionAmount(uint256)", +"21537caf": "setRequiredBlockQueueTime(uint256)", +"21538acb": "approveCallGas()", +"2153bade": "ZJZJToken()", +"2153bf23": "x3Token()", +"21542702": "MakeBet(address,uint256)", +"215458b0": "salvageNotAllowedTokensSentToContract(address,uint256)", +"2154dc39": "maxMintable()", +"21554dca": "GetCurrentBonusStageTokenBalance()", +"2155af2f": "execute(address,uint256,bytes1[])", +"2156a96c": "getTotalSales()", +"2157320e": "votedAddress()", +"21575889": "distributionSupply()", +"2157ab24": "GetBankerRound(uint8)", +"21592a2b": "YaoMaoCoin(uint256,string,uint8,string)", +"21594110": "createProductionUnit1Beta()", +"215a3bcc": "setStatus(bytes32)", +"215a4862": "eligibleForBonus(uint256,address)", +"215a6ce4": "createBet(uint64,uint256)", +"215ac4be": "fillContract()", +"215ae66d": "mintForWebsites(address[],uint256[])", +"215afc5f": "totalTokenDistribution()", +"215b3e32": "fromBytes(bytes)", +"215b5411": "purchaseCallbackOnAccept(uint256,address[],uint256[])", +"215bad32": "TPTTransfer()", +"215bd303": "createWorkerPool(string,uint256,uint256,uint256,address)", +"215bf604": "addFreelancerFeedback(address,uint256,address,string,uint8)", +"215cb8df": "createIlliquidToken(address,uint256)", +"215cc031": "getAvatarByAddress(address)", +"215d6b61": "getTierOfMember(address)", +"215d902c": "extractString(bytes,uint8,uint256)", +"215de48a": "getParentCount(bytes32)", +"215de791": "getTankName(uint32)", +"215e25ea": "upgradeReferrer()", +"215f1cd1": "oraclizeSetWinner(uint256,uint256)", +"215f865e": "resetDropAddress(address)", +"215fce93": "changeExchangeRate(uint256)", +"216093aa": "getIsThirdPhase()", +"21614f62": "randomSkinAppearance()", +"2161d0e9": "tokensToP3D_(uint256)", +"21627dad": "getCart()", +"2163d49a": "lockedCore()", +"2163ef1a": "GangnamTokene(address,address)", +"216481d6": "icocontract()", +"21650145": "Revoked(bool)", +"2165e1aa": "withdrawRemainingBalanceForManualRecovery()", +"2165fef9": "allocateStrategicTokens()", +"21667940": "issueTokenAndApprove(uint256,address)", +"21670f22": "reward(address,uint256)", +"216716af": "ExoMiniumToken(address,address)", +"21687444": "newDAO(address)", +"2168c988": "transferToInternalLedger(uint256,bytes32)", +"2168ca06": "numberOfIndex()", +"216903f9": "confirmTx(bytes32)", +"216974cc": "refundNonCompliant(address)", +"216986b0": "entradaJugador(uint256)", +"216a5543": "getAllForSaleStatus()", +"216aa0ba": "proposalBlock()", +"216b8c95": "internalIsApprovedForAll(address,address)", +"216be181": "hodls(uint256)", +"216c1606": "_claimExistingCard(uint256,address)", +"216ced43": "setPenaltyDisbursal(address)", +"216d93d6": "pricers(uint256)", +"216de17a": "priceStage1()", +"216e2a97": "totalOrder()", +"216e3449": "changeToken(string,string)", +"216ea239": "miningResolve(uint256,uint256)", +"216ea5ec": "remainder(uint256,uint256)", +"216ec69b": "getColour()", +"216ecfa7": "Tbaol()", +"216ef940": "proxyUpgrade(address,address,bytes)", +"2170ebf7": "makerWithdrawEther(uint256)", +"2171454a": "bountiesKey(uint256)", +"2171526e": "Chewbaka()", +"21717ebf": "siringAuction()", +"2171dc73": "buyXaddr(address,address,uint256,string)", +"2172ac5a": "_requestExistsReverse(address,address)", +"217311ac": "getWords(uint64)", +"21733f6a": "sendDv(string)", +"2173a10f": "INITIAL_POLL_NONCE()", +"21745c15": "numberOfSales()", +"217477f6": "ICO_PERCENTAGE_3()", +"2174b88f": "transferBanker(address)", +"2174dcec": "ConfigPromoter(uint256)", +"21751df9": "BugBountyOne()", +"21752974": "compromiseContract()", +"21765510": "getLockedAvailable(address,string)", +"21765d23": "addLockedTime(address,uint256,uint256,uint256)", +"217720d7": "getHeldCoin(address,address)", +"21774f4b": "CUSTOMER_PERCENTAGE()", +"2177885d": "isOnAuction(uint40)", +"2177a36f": "getCountProof()", +"2178139d": "acceptAbstractToken_(uint256)", +"21795635": "TOTOAirdrop(address,address)", +"217987ad": "delBlackList(address)", +"2179f0f7": "EtherToken()", +"217aab68": "_updateCommission(uint256)", +"217ad35a": "minimalEther()", +"217af162": "whitelistKyberAddress(address)", +"217b97e4": "hatchMaxTime()", +"217bd046": "computePoolAmount()", +"217cab2b": "GetWhitelist(uint256)", +"217d9bbe": "depositExit(uint256,bytes)", +"217db8e8": "toBase(uint256,uint256,bytes8)", +"217f2d23": "CRVToken()", +"217fe6c6": "hasRole(address,string)", +"21815a1a": "updateHolderShareInfo(uint256)", +"21819e5c": "computeArtistTxFee(bytes32,uint256)", +"2181c11f": "batchNewAuctions(uint128[],uint256[],uint256[])", +"2182e6d8": "buy_lovelock(bytes32,string,string,string,uint256)", +"2182ebbf": "use(address,uint256,uint256,uint256,uint256,uint256,string)", +"2182f7b4": "MINIMUM_PURCHASE()", +"2182ff7e": "sellMNC(uint256)", +"21835af6": "__dig(uint256)", +"2183e390": "setTotle(address)", +"21842be3": "unlockTransfers()", +"218444ab": "Test2()", +"21844b08": "drWinChances(uint256)", +"21848580": "lastBlock_a14()", +"2184f977": "TRANSITION_WINDOW()", +"2184fe2c": "transferTechSupport(address)", +"2185072f": "SerpenSegmentCount()", +"21853009": "participantRoundRewarded(address,address,uint256)", +"21856b36": "interestOwed()", +"2185810b": "allowTransfers()", +"21858521": "tickets()", +"2185ca52": "BITRUS()", +"21860a05": "airdrop(address)", +"21861cce": "AUDITED_AND_APPROVED()", +"2187a833": "setGreenToken()", +"2187bdca": "getAllETH(address)", +"2187e6a6": "createHolder(string,address,uint256)", +"21887c3d": "has(address)", +"21895086": "RL(uint256,string,string,bool)", +"218a51e8": "UnFrozenTokenEvent(address,uint256)", +"218a7667": "addToBalances(address,uint256)", +"218a9640": "setTeamStatus(bool,uint256)", +"218bc5ec": "createBid(uint256,address,bytes32,bytes32,uint256,uint256)", +"218bd577": "enterGame()", +"218cd7a1": "POOPOO()", +"218d5637": "realSupplyWeight()", +"218d6ca2": "calcPurchase(uint256,uint256)", +"218d984b": "registryProxy()", +"218dd3dd": "checkIdentity(bytes32)", +"218e4562": "updateBalanceOf(uint256)", +"218e4a15": "getCooldown()", +"218e6877": "setDelegate(bool)", +"218e767d": "TokenFactory(address,address)", +"218eee82": "addAd(uint32,uint32,string,string,uint256)", +"218fbdec": "callWithdraw(address)", +"218fd1c4": "CompanyName()", +"218fe479": "generateRenown()", +"218ffb4c": "Fund(address,bytes32,address,uint256,uint256,address,address,address,address[],address[])", +"21901fa8": "WithdrawFunds(address,uint256)", +"219047f7": "MasternodeRewardSend(uint256)", +"2191207a": "setTAOFactoryAddress(address)", +"21914e29": "day2Start()", +"2191f4a9": "storjPrice()", +"2191f92a": "isInterestRateModel()", +"219285d2": "presaleClosedManually()", +"2192b99d": "mintContributors(address[])", +"219356bc": "GxConstants()", +"21937192": "finishedSTOMinting()", +"21938610": "set0xExchange(address)", +"2193cdba": "send_all()", +"2194f3a2": "fundsWallet()", +"21956036": "SmartRouletteDividend()", +"2195845f": "withdrawAltcoinTokens(address)", +"21958a50": "AddressSeries(address)", +"2196ae0d": "hint(bytes32,string,bytes20)", +"2196feac": "createMarketItem(bytes16,bytes16[],bytes16[],uint256[])", +"2197021b": "proxyVotingContract()", +"21970c0c": "pay_royalty()", +"21974a74": "EtherNetworkConfig()", +"21978e58": "_removeSale(uint256)", +"2197b236": "Goldjunge()", +"21981514": "totalUnclaimedBidsAmount()", +"219862d0": "marketKebabs()", +"2198e780": "addDollarAmount(address,int160)", +"21998504": "setCompte_7(string)", +"2199d5cd": "registerUser(address)", +"219a6ead": "MICRO_DOLLARS_PER_BNTY_PRESALE()", +"219a6f04": "getFounderMember(uint256)", +"219bc76c": "currentRoundInitialized()", +"219c7ad1": "getwinningaddress10()", +"219caaa9": "reclaimChildOwnership(address)", +"219d0ece": "transferAdminship2(address)", +"219da4ac": "ResumeTokenContract()", +"219dabeb": "registerDeposit(address,uint256)", +"219dc688": "technicalPercent()", +"219df7ee": "ZTHTKN()", +"219f5052": "updatePokeMarketAddress(address)", +"219f5b92": "revokeAuthorization(address,address)", +"219f72c9": "startICOStage3()", +"219fd010": "accredited()", +"21a19b2d": "neverdieSigner()", +"21a2ad3a": "nextSlasher()", +"21a2c72d": "BitcoinDublicate()", +"21a32e5c": "VanityCrowdsale(uint256,uint256,address)", +"21a33743": "DroidEIP20Token(uint256)", +"21a33e00": "gasReq()", +"21a389cc": "PRE_SALE_3WEEK_BONUS()", +"21a3fb85": "addValidator(address,bool)", +"21a49ec2": "LCoin()", +"21a4a5bb": "endDateOfSaleStageLast()", +"21a4c6c3": "openMarket(address)", +"21a4cdaf": "HDCToken()", +"21a4d259": "setMinAuditPriceLowerCap(uint256)", +"21a5065e": "returnableTokens(address)", +"21a5c1c3": "buyItem2()", +"21a5dcfe": "multivestBuy(address,uint256)", +"21a638d8": "addTerminal(address,uint256,address)", +"21a6c649": "privatePresaleWallet()", +"21a6c7aa": "megabossCutPercentage()", +"21a78f68": "ref()", +"21a7d652": "EQUIPMENT_REWARD_TOKENS_NUMS()", +"21a80189": "getBalance(address,address,uint256,bytes,uint8,uint256)", +"21a804fc": "SphereToken()", +"21a83738": "getDragonPriceNo(uint256)", +"21a8a771": "setPort(uint16)", +"21a91d2b": "PrcntRate()", +"21a9cf34": "setTradeAddress(address)", +"21aa1706": "startPresaleTrading()", +"21aace42": "setTokenForSP(uint256)", +"21ab13ab": "maxBet(uint256)", +"21ab3074": "transferOwnershipOfStorage(address)", +"21ab561d": "MIN_BID_FRAC_BOT()", +"21ab7fb4": "marketplace_admin_controller()", +"21ab9177": "fixPlayerGraphic(uint256,string)", +"21abf58b": "feesB()", +"21ac01d8": "ClaimedTokens(address,uint256,uint256,uint256)", +"21ac4982": "issue(bytes32,int256,bytes,uint256)", +"21ac5aba": "cityIndexToOwner(uint256)", +"21ac64af": "declareRCV(string)", +"21ac8967": "setPatentFee(uint256)", +"21b12a4b": "clearTransaction()", +"21b133ed": "icoTotalAmount()", +"21b1e5f8": "sendETH(address)", +"21b288d8": "endSecondBonus()", +"21b36a08": "setFee(uint64,uint256)", +"21b43777": "advisorCount()", +"21b48008": "getInvestorsETH(address,address)", +"21b4b3dc": "proposalsCnt()", +"21b55c42": "testConcat()", +"21b5b8dd": "extraBalance()", +"21b68d2b": "DyginoteToken()", +"21b6ac62": "lockGate()", +"21b6c321": "StoreProduct(bytes32,bytes1)", +"21b6fcbf": "SendFund(uint256,bytes32)", +"21b8092e": "setWithdrawalAddress(address)", +"21b8151e": "Mixer()", +"21b8b11e": "_addToDebtRegister(bytes4,uint256)", +"21b8d973": "returnHash(address[2],uint256[8])", +"21b920eb": "upgradeTank(uint32,uint8)", +"21bacf28": "getDefaultFee()", +"21bb79fe": "luckyDogInfo()", +"21bb86ab": "setExchange(uint256,uint256,uint256,uint256)", +"21bc84fd": "canCompose(string,uint256[],address,uint256)", +"21bc9a55": "buyTokens(address,address)", +"21bcc5e5": "multiBatchTransferFrom(uint256[],address[],address[])", +"21bdb26e": "maxPresaleSupply()", +"21bded12": "capitalPctBips()", +"21be2244": "PrivatePlacement(address,address,address,address,address)", +"21be26ed": "deauthorizeContractById(uint256)", +"21beba94": "lastTxBlockNum()", +"21beedf4": "BlocklancerToken()", +"21c0183e": "centralAdmin()", +"21c02472": "numberOfResolutions()", +"21c03a97": "setTradingOpen(bool)", +"21c0b342": "claim(address,address)", +"21c0e95d": "setBountyPool(address)", +"21c17ab8": "unproposeMilestones()", +"21c24081": "GDC(uint256,string,uint8,string)", +"21c26195": "distAirdrop(address,uint256)", +"21c4d650": "priceForBasePart()", +"21c5fb20": "Deposit_double_sum_paid_from_the_balance(uint256)", +"21c60ac6": "div(uint8,uint8)", +"21c60c74": "createMobster(string,uint256,uint256,uint256,string)", +"21c63a47": "getTicketCount()", +"21c6b951": "BetherCryptocurrency()", +"21c6d7b6": "BitbabeToken()", +"21c87627": "getUnlockedPercentage()", +"21c87ee8": "setMaxLevel(uint8)", +"21c882ef": "testGetCaseAtIndex()", +"21c88358": "anyTokenWithdrawal(address,uint256)", +"21c9a6b1": "localCheck(uint256,string,bytes32,bytes32,string,bytes32)", +"21cb1568": "registerArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", +"21cb18cd": "assignVested(address,uint256,uint64,uint64,uint64,bool)", +"21cbed35": "setOperationAttributesByRegulator(string,string,uint256,string)", +"21cda790": "tokensOwned(address)", +"21cdb03c": "shopShield()", +"21cde824": "fighterIndexToTeam(uint256)", +"21ce14a9": "injectTokens(address,uint256)", +"21cefec0": "tokenBuyRate()", +"21cf3514": "priceStalePeriod()", +"21cf5132": "setManualBonus(uint256,bool)", +"21cf59ac": "mintInternal(uint256,int256)", +"21cf9f22": "updPool(int8,uint256)", +"21d148ab": "weiForXau()", +"21d1a303": "checkRemained(uint256)", +"21d1b7a4": "TJ2()", +"21d269dc": "fastCashBank()", +"21d2daa0": "unFreezeToken(uint256)", +"21d3523c": "voteToHarvestFund()", +"21d36529": "feePercentage(uint256)", +"21d365af": "_processVestingRules(address,address)", +"21d376ce": "tokensOfOwner(bytes32)", +"21d3d2ee": "isMigrationFinished()", +"21d41bc2": "IRobo()", +"21d45bec": "getReverseFee(address,uint256)", +"21d4b08c": "numTicksTillAuctionStart(uint256)", +"21d50273": "createParty()", +"21d53fb9": "withdrawLockupTokens()", +"21d5c0f6": "finalizeAgent()", +"21d5cb51": "verifiedUser(bytes32)", +"21d65d80": "blockPart(uint64,uint64,uint64)", +"21d67daa": "internalFinishMinting()", +"21d6cdb6": "newPeriod(uint256)", +"21d739f1": "TokensIssued(address,uint256)", +"21d7bdff": "startCountDown()", +"21d800ec": "relayedMessages(bytes32)", +"21d80111": "getHero(uint256)", +"21d8ad4c": "getContractName(uint256)", +"21d9d5ba": "testRemoveLocked()", +"21da1719": "impl_unlock4Circulate(address,uint256)", +"21da94e7": "getSEScore()", +"21daae34": "getQuoteToBaseReturn(uint256)", +"21daf0f8": "TransferToReferrer(address,address,uint256,uint256,uint256)", +"21db06bc": "wolf4Balance()", +"21db087e": "getLevelCitizenById(uint256,uint256)", +"21db0f0d": "getImmortalsOnTheBattlefield(address)", +"21db2aa0": "getArtwork(uint32)", +"21dc04f4": "Vibranium()", +"21dc512e": "replaceSSPRegistry(address)", +"21dc74fa": "addWhiteLister(address,address)", +"21dcbbae": "HighJackpotHolder()", +"21de6b01": "setKtcAddress(address,bool)", +"21de861a": "narrowCyclePrizeView()", +"21df0da7": "getToken()", +"21df2ea5": "getNewInstance(address)", +"21df8b9b": "addTotalBondValue(uint256,uint256)", +"21e01596": "logCall(uint256,uint256,uint256)", +"21e0f228": "winningNumbers()", +"21e2933a": "setBasicIncomeLimit(uint256)", +"21e38e81": "ownerCheck()", +"21e3cdd0": "voteDn(uint256)", +"21e5383a": "addBalance(address,uint256)", +"21e53d77": "_buyTokens(address,address)", +"21e5d0e4": "PRESALE_START_WEEK2()", +"21e5e2c4": "shareOf(address)", +"21e69b42": "dataMerkle(bytes32[],uint256,uint256)", +"21e6b53d": "transferTokenOwnership(address)", +"21e76826": "Gamblr()", +"21e866be": "getCompanyCreationCost()", +"21e88888": "setColor8(uint256,uint8)", +"21e92d49": "transferByOwner(address,uint256)", +"21e96b88": "setProxyManagementCurator(address)", +"21e9b296": "ExtractedTokens(address,address,uint256)", +"21ea2b8d": "delayOfICOEND()", +"21ec0129": "HAUZ()", +"21ec5981": "Jekyll_Island_Inc()", +"21ed0f64": "removeEmployee(uint256)", +"21ed46ad": "Dollars()", +"21ed47b3": "annualPos()", +"21edbe24": "pricesAndInventoriesOfDate(uint256,uint256,uint256[],uint256)", +"21ee102b": "removeExtension(address)", +"21ee6457": "set_sale_arbits_total(uint256)", +"21eeb9a7": "LogSaleCapReached(uint256,uint256)", +"21ef10f0": "revokeSelf()", +"21ef8368": "DataSentToAnotherContract(address,address,bytes)", +"21eff7fc": "getContribution(address)", +"21f032d3": "BitDAOToken()", +"21f0a727": "node_right_child(uint256)", +"21f0b382": "unblockClient(address)", +"21f118a6": "createByCOO(string,uint256,uint256)", +"21f1a18c": "battleRemove(uint256)", +"21f1b677": "updateTime(uint256,uint256)", +"21f222dd": "minWeiAmount()", +"21f2a9a9": "_getUnlockedTokensPercentage()", +"21f2ca3b": "unregisterUser(address)", +"21f2ed2e": "dividendDistributionEndTime()", +"21f35609": "CAT_FIRST()", +"21f38c6e": "bundlingEnabled()", +"21f3f338": "proposalCensorshipFee()", +"21f3ff41": "maxMultiRolls()", +"21f408be": "tk()", +"21f4911a": "addFiveParticipants(address,address,address,address,address)", +"21f4d29f": "getPoolHistory(uint256)", +"21f610d3": "endEarlyStage3()", +"21f6b513": "Airdropper(address,uint256)", +"21f72d82": "YODCToken()", +"21f7ac0d": "codeExportCost()", +"21f8a721": "getAddress(bytes32)", +"21f8dab6": "THRESHOLD4()", +"21f9a878": "NewHashnodeTestCoin()", +"21f9caef": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,address)", +"21fa1730": "Ballot(string,string,string,uint256,address[],uint256[],uint256[])", +"21faf403": "getStatusLogCount()", +"21fb39d4": "WithdrawEvent(address,address,bool,uint256,uint256)", +"21fb9869": "getAdminLog(uint256)", +"21fc2cd1": "NounToken()", +"21fda809": "payment(address,address,uint256,address)", +"2200919f": "addVersion(string,address)", +"22009af6": "BASE_REWARD()", +"2200cdec": "finishPVE(uint256)", +"22017c5f": "DSTokenBase(uint256)", +"2202dcad": "FACTOR_7()", +"22039f89": "isServiceContract(address)", +"2203ab56": "ABI(bytes32,uint256)", +"2204ef4b": "getMeTokens(uint256)", +"22054fe0": "updInvestorEnabled(address,bool)", +"22057bc7": "getAllRevisionBlockNumbers(bytes20)", +"2206e837": "undisapprove(uint256)", +"220772a9": "starUpZero(uint256,uint256,uint256)", +"2207a93a": "etherInUSD()", +"22081c12": "processPayment()", +"22082c72": "getDoneSelfDropAmount(address)", +"2208ee1d": "_releaseTime()", +"2209e991": "sendBet(address,uint256)", +"220a0e36": "LoggedERC20(uint256,string,uint8,string,bool,bool)", +"220a2247": "givePermission(address,string)", +"220b4a73": "TCPC()", +"220c166c": "hatchingSpeed()", +"220c773a": "changeMarketingRecipient(address)", +"220d5d8d": "YioCoin()", +"220d7a7f": "NoteToken(uint256)", +"220d8707": "BONUS_DAY3_DURATION()", +"220d9944": "MailHustleCrowdsale()", +"220e44d0": "_buy(uint256,uint256,address)", +"220e5d06": "qshdrop(address[],uint256[])", +"220e693f": "ALLOC_ADVISORS()", +"220eb9b6": "run(uint256,bytes)", +"220ee9ec": "purchase_dates(address)", +"220eeab4": "BonumPreSale(uint256,uint256,address,address,uint256)", +"220f1202": "lowestAskAddress()", +"220f1aee": "createVoting(string,string,uint256,bytes32,address)", +"220f52c5": "whoIsTheOwner()", +"220f9dfd": "getFighterInfo(uint32,uint32)", +"220fde2e": "setSellPrice(uint16,uint256)", +"221067a1": "JULIAN_ALLOCATION()", +"221086af": "buyerBonus()", +"2210d525": "getRareAddress()", +"2210e0f7": "MassPay()", +"2211218a": "ARMtest()", +"2211944a": "ActiveAdmin()", +"2211ae76": "canReceive(address,address,uint256,bytes)", +"2211c3b3": "eraseContribution(address)", +"22122cb3": "blockTokenFunds(address,uint256)", +"2212dbc3": "get_timestamp()", +"22132598": "numArtworks()", +"221353ca": "finalizeByAdmin()", +"22137935": "productsExported()", +"2213c7db": "tokenPreSaleRate()", +"2214f65d": "toWei(address,address,uint256)", +"221538f4": "BurnupHoldingCore(address,address)", +"22156bb2": "WerderCoin(uint256,string,uint8,string)", +"22159d89": "ticketsOwned(uint256)", +"2215fc82": "getONETIMESOLD()", +"2216573d": "internalIncreaseGoldKeyCounter(uint256)", +"22169ab3": "START_PRESALE_TIMESTAMP()", +"22174ebf": "TokenSBT()", +"2217bf78": "getReputationRewards(address,address,bytes32)", +"2219a95b": "DWBTPreICO(address,address,uint256,uint256,uint256,uint256)", +"221a66d9": "presaleFee()", +"221ab8e2": "setBlockResult(uint64,uint64,bytes32)", +"221b1c4a": "_NumOfStudentsPass()", +"221b30df": "btcPurchase(address,uint256)", +"221b5ec2": "setTimeBegin(uint256)", +"221b5fad": "getCardsCount()", +"221b850c": "changeInstallerEscrowAddress(address,string,address)", +"221d4dff": "create(string,uint256,string,string,uint8)", +"221e5da9": "GetContractStateEarlyTerminatedByTenant()", +"221e9370": "recordedCoinSupplyForRound(uint256)", +"221ed3cc": "CONSTELLATION()", +"221ed748": "shareCycle()", +"221ef94d": "userMigration(uint256)", +"222101d1": "vestingMappingSize()", +"222160c0": "isProposalExecutable(bytes32,uint256,address,bytes)", +"2221fb3e": "hasActiveBet()", +"22230fc4": "countFishAtBase()", +"22239e8e": "loanActivation()", +"2223a5da": "reserveCap()", +"2224044c": "calcWeiForTokensAmount(uint256)", +"22242382": "checkPriceAmount(uint256)", +"22245b64": "MAXCAP_TOKENS_ICO()", +"22246200": "deleteElementWithValue(uint256)", +"22250809": "BoardClaimed(uint256,uint256,address)", +"222594c5": "findModuleNameByAddress(address)", +"2226549e": "fixedLog2(uint256)", +"22284872": "Escrow(address)", +"22287914": "icoWallet()", +"2228c895": "getWinningRate(uint256)", +"2229d348": "attackMonster(uint256)", +"222a5343": "BOWTERC20()", +"222a95ee": "LastMsg()", +"222af991": "stringToUint(int256,string)", +"222b0d7d": "massRevoke(address[])", +"222b8947": "depositTokens(bytes32,uint256)", +"222c1390": "maxPublicSaleStage()", +"222cfe94": "myEtherBrosCount(address)", +"222d777a": "createEvent(string,uint256,uint8,uint256,uint256,uint64)", +"222d7e34": "currentRoundStart()", +"222f51e9": "getDailyHash()", +"222f5be0": "transferInternal(address,address,uint256)", +"22305fb7": "ShowSegmentation(address,uint256,uint256)", +"2231454f": "updateCampaignManagerContract(address,string)", +"223162e7": "WithdrawSharedExpense(address,address,uint256,uint256)", +"2231f72c": "setownership(uint16,uint16)", +"223208af": "walletName(address)", +"22326584": "WBE()", +"2233db62": "InvestorRegistry()", +"2233dbf4": "wantNewMinter(address)", +"22347d5b": "confirmTrade(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"22351b6b": "VibeToken()", +"22366844": "isRegistered()", +"223699c1": "units30percentExtra()", +"22372795": "HIT()", +"2237d55c": "setTargetDiscountValue1(uint256)", +"22384945": "checkPresaleBalance()", +"22393ef4": "bundleFirstTokens(address,uint256,uint256[])", +"223964bc": "queryAccounts(address)", +"2239c48a": "startUpgrade()", +"2239d43b": "uintMinimalSize(uint256)", +"2239e688": "getUrlFromKey(bytes32)", +"223a6399": "newAssociate(address)", +"223ab941": "transferForProjectTeam(address,uint256)", +"223b01db": "decimalsETHToUSD()", +"223b530e": "antiques()", +"223c217b": "withdrawTokenTo(address,address,uint256)", +"223c5939": "UnilotBonusTailToken(address)", +"223cd20e": "shareHolderByAddress(address)", +"223d0417": "viewUnpaidRewards(address)", +"223dad70": "sendMsgSndr(address,address)", +"223db315": "allow_refunds()", +"223dcc74": "left14(uint256)", +"223e5a9d": "pls()", +"223e8eff": "etherPriceAuditor(address)", +"223e97be": "setParent(uint256,uint256)", +"223e9f17": "_redeemSameClassAdoptedAxies(address,uint8,uint256)", +"223fcbc9": "_locked()", +"223ff4cc": "getShipsIds()", +"224076d4": "pegIsSetup()", +"22408401": "ArtSale(address,address,uint256,uint256,uint256,uint256,uint8,uint256)", +"2240b645": "GetClientCategory(address)", +"22412ded": "MyProducts(address,uint256)", +"2241a733": "GOLD_AMOUNT_XPER()", +"22425fa4": "feePeriodDuration()", +"22427047": "Payout(uint256)", +"22429085": "updateFees(uint256,uint256,uint256)", +"2242cf7f": "getConBal()", +"22434836": "setTimes(uint256,uint256)", +"2243fb15": "getHashratePerDay(address)", +"22446093": "editPerson(address,address,string,uint256)", +"2245675f": "setCustomerSignature(address,uint256)", +"22471e16": "identityApproved(address)", +"2247328c": "vote01YesCount()", +"224846de": "deletePaymentContract(uint8)", +"224854f7": "Trie()", +"224993c2": "setTimeBlock(uint256)", +"224a1775": "transferByOwner(address,uint256,uint256)", +"224a6ac3": "nextPE()", +"224a8174": "TESTER()", +"224a967c": "CTSCoin()", +"224b4bfd": "TYCOONCoin(uint256,string,string)", +"224b5c72": "consume(address,uint256)", +"224bed07": "transferIndexed(address,uint256)", +"224c1a21": "getMyEthBalance(address)", +"224c1c9b": "getNonVestedBalanceOf(address)", +"224c4657": "createOrder(address[3],uint256[3])", +"224ccc49": "chainLastMessageHash(bytes32)", +"224d5d54": "wylouToken()", +"224dc278": "dis()", +"224e5efd": "DNACoin(address,address)", +"224e7462": "removeToken(bytes32)", +"224f127d": "LogNewWhitelistedAddress(address,address,uint8)", +"224f143a": "setme()", +"22500af0": "OwnershipTransfer(address,address)", +"22518a75": "getVotersCandidateVote()", +"2251a8a9": "isSubscribed(address,address,string)", +"22526635": "payOut(uint256,uint8,uint256)", +"22529fff": "getReferral(address,address)", +"2252d5c1": "exemptMeFromFees()", +"225386fe": "SimpleERC20()", +"2253fff1": "initialCongress(address)", +"22542fb6": "collectTokenPhaseStartTime()", +"225435c0": "detach()", +"22547931": "registerOperation(uint256,string)", +"22551da7": "double(address,bytes32,uint8,uint256)", +"22554f34": "getT()", +"22555bea": "UNITv2(address)", +"22556bd7": "createRound(string,bytes32[],uint256)", +"2255ad10": "RefugeCoin()", +"225640ab": "getOrCreatePreviousFeeWindow()", +"225682d1": "test_contractBalance()", +"2257406e": "getMemory(uint256)", +"2257defa": "removeCustomerFromBL(address,address)", +"2259315d": "TokenFactoryCN()", +"22593300": "Small(address)", +"2259d221": "LifeSet_005()", +"225a1d46": "PODH()", +"225a905f": "NewSubscription(address,address,uint256,uint256)", +"225b6574": "hasBase(address,uint64)", +"225c4011": "cyberEntry(address)", +"225c5567": "withdrawLeftTokens()", +"225ce00f": "_createAuction(uint256,string)", +"225cf990": "setAgriChainContext(address)", +"225cfd59": "addPromille(uint256,uint256)", +"225da7e5": "transferManagerFactory()", +"225f406a": "buyInSaturday()", +"225f9d7d": "stopIt()", +"225fce8d": "getGameByPlayer(address)", +"22609373": "calculateEthereumReceived(uint256)", +"2260b98b": "finalizeVoting()", +"226187dc": "maxPreICOTokenAmount()", +"2261b07f": "getConverter()", +"2261c6d9": "AllowedAddressAdded(address)", +"2262cd94": "wroom()", +"22636e65": "setContractValue(address,string,uint256)", +"2263ae04": "POHD31()", +"2263e8b7": "routingCodes(uint256)", +"2263f2c5": "createTokens1()", +"22643a47": "JokerCoin()", +"226454c1": "getGoldDataDocumentation()", +"22657697": "priceForStage(uint256)", +"2265931d": "transferToken(address,uint256,uint8)", +"2265a94b": "ValyutaTestCoin()", +"22665bc9": "setICO(address,uint256)", +"22666da6": "makeGuess(uint256)", +"226685ee": "Visit()", +"22673030": "SALE_START()", +"2267b2e3": "veredictum()", +"2267b30d": "removeFounder(address)", +"22686250": "index(int256,uint256)", +"2268a358": "changeMultisig(address)", +"226942e6": "RollEvent(address,uint256,uint256,uint256,uint256)", +"2269d2ec": "addNewPotatoCoinsForSale(uint256)", +"2269f1c9": "voteA(uint256)", +"226ac321": "updateTokenRate(address,uint256)", +"226bf449": "addPackage(string,address)", +"226d2f86": "keyEmployeeAllocation()", +"226dd769": "howManyEtherInWeiToChangeSymbolName()", +"226e2b91": "setPaycarnita(uint256)", +"226e2d10": "manual()", +"226ee47c": "set_validator(address)", +"227185d6": "Send1Get2()", +"2272b0af": "csoAddress()", +"2272df67": "changeFounderAddress(address)", +"2272f879": "walletThree()", +"227326b1": "proposalPassed()", +"22734c0c": "createRawDeposit(address,uint256,uint256,uint256)", +"22742564": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint8,bytes32,bytes32)", +"2274346b": "vaultContract()", +"22758a4a": "whitelister()", +"22760877": "getCurrentHeroOwners()", +"22763ae1": "stopInEmergency()", +"22766696": "bidEnd(uint256)", +"2276774c": "finalizeRemainders()", +"2277466b": "voteToClose()", +"22776478": "getDistrict(uint256)", +"2279295d": "resetPhoenixes()", +"22798c10": "MANHATTANPROXYACPBLVD()", +"2279fa4c": "numPayments()", +"227a7911": "etherGetBase()", +"227ac0cf": "GetPerSellInfo(uint16)", +"227ada37": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"227bf6b8": "ethorseOracle(address,bytes32,string,bool)", +"227c74a7": "giveEntity(uint256,address)", +"227cade5": "maximumBet()", +"227d111e": "GetExistsCardList()", +"227d3fb4": "checkTxProof(bytes,uint256,bytes,bytes)", +"227d535f": "Wolk()", +"227dd788": "isFinal(bytes32[])", +"227e14e9": "currentDateTime()", +"227e26c4": "deleteChild(uint256)", +"227f592c": "TIXGeneration(address,address,address,address,address,uint256,uint256)", +"227f9633": "addOption(string,address,uint256)", +"227fb30b": "MosaiCoinContract()", +"227fda27": "BitcoinSamaritan()", +"2281411b": "allocateAndFreeze(address,uint256)", +"22817359": "_transferTokenToOwner()", +"22824bbd": "checkFind(address,address)", +"2282d9f2": "transferIsEnabled()", +"22848a0c": "TCTToken(uint256,string,string)", +"2284a6fa": "interest(uint8,bool,uint8)", +"2284b051": "gameRandon1()", +"2284e8fe": "push_or_update_key(uint256)", +"22855bf0": "CheckBest(uint256,address,address)", +"22855ef9": "registerTransfer(address,address,uint256)", +"22867d78": "repay(address,uint256)", +"2286b46b": "stakePathIDToAccountAndSubcourtID(bytes32)", +"2286b7de": "BONUS_ICO_STAGE1_PRE_SALE2()", +"2287d2ec": "donealready(uint256,address,bool)", +"2287dad2": "getTicketByHolderId(bytes32)", +"2287e96a": "withdrawEnabled()", +"2288193b": "testFundACampaign()", +"22888f35": "depositPremium(address[2],uint256[7],uint8,bytes32[2])", +"2288fad6": "earlyPurchases(uint256)", +"2289115b": "createPlanet(string,uint256)", +"228acf2f": "tokenTeam()", +"228b70d3": "registerNewPubKeyForHash(string,string)", +"228b7bf8": "Vasacoin()", +"228bbf45": "getItemsForSale(uint256,uint256)", +"228bff5a": "secToDays(uint256)", +"228c2df1": "hodl(address,uint256,uint256,uint256)", +"228c790c": "RudysToken()", +"228cb733": "reward()", +"228cc2aa": "maxQuanValues()", +"228ce144": "getKingdomType(string)", +"228d2820": "disableConversions(bool)", +"228d477f": "tokTakers(uint256,address)", +"228dff13": "setPepeName(uint256,bytes32)", +"228e41bd": "getdeptcount(uint256,address)", +"228e554a": "_refundBond(uint256,address)", +"228e892e": "icoStages(uint256)", +"228e92cf": "YuanLianToken()", +"229063fc": "discoveryCooldown(uint256)", +"2290d6e2": "entryFee_()", +"2290db50": "buyEnergy(address,address,uint256)", +"2290e106": "mintBuyerToken(address,uint256)", +"22923160": "updateWithdrawals(address,address,uint256,uint256)", +"229233b6": "FOR_FOUNDER()", +"22928b4d": "isIpoPeriodOver()", +"22928d6b": "removeUser(address,address)", +"22935caa": "setInitialAllocationUnlock(address)", +"22937ea9": "returnInt256(int256)", +"229460e7": "AdminstratorRemoved(address)", +"2294795d": "deuseth()", +"22949fb1": "TicketBought(address)", +"2294c48a": "initUsers()", +"2295115b": "adminWithdraw(address,uint256,address,uint256,uint8,bytes32,bytes32,uint256)", +"2295ee5b": "updateTokenBaseURI(string)", +"22968885": "getBalanceOfContract()", +"22969eac": "changeAuth(address)", +"22978e57": "unlockedAfter()", +"229824c4": "calculateTrade(uint256,uint256,uint256)", +"2298b9ce": "icoOver1()", +"229906b3": "updateStringSetting(uint256,string,address,string,string)", +"2299219d": "unlockTemporary(bytes32,address,bytes)", +"229a336b": "BodyMassIndex()", +"229a4978": "batFund()", +"229b04bf": "pauseMode()", +"229b5223": "weiScale()", +"229b9bc5": "buildingToUnitCount(uint256)", +"229cfc32": "calculateViralRewards(uint256)", +"229ddd9a": "foreignBuy(address,uint256,string)", +"229df5c6": "getSig(bytes)", +"229e0b16": "updateLoanAsLender(bytes32,uint256,uint256,uint256)", +"229eb105": "payaFinished()", +"229f3e29": "presaleEnd()", +"229f4caf": "minBetPrice()", +"22a036dd": "ico2Bonus()", +"22a15848": "btcOracle()", +"22a1ec8f": "setSomething(address[])", +"22a27f3b": "getDeveloperAddress()", +"22a3eab5": "withdrawn_balances(bytes32)", +"22a4381d": "fromTokenDecimals(uint256)", +"22a47143": "Tokensale(address,address)", +"22a4993c": "getReferedCount(address)", +"22a635c4": "Hodl(address)", +"22a7118d": "buyTokensFor(uint256,address,uint256,bool)", +"22a7533b": "deathData_a19()", +"22a7906f": "getOwnedPointAtIndex(address,uint256)", +"22a7ac34": "rake()", +"22a7ba2b": "totalSupplyCrowdsale()", +"22a8fb18": "freezelvlAccount(address,bool)", +"22a90082": "setInterval(uint256)", +"22a92c45": "sendTokensToHold()", +"22a993ca": "getKun()", +"22aa7196": "refund_window_end_block()", +"22aab53a": "temperatureRange()", +"22aacad5": "incCounter()", +"22aaea91": "setCurrentAuctionId(uint256)", +"22ab9433": "getPrecomputedEToTheHalfToThe(uint256)", +"22abb147": "ResolutionAdded(address,uint256,string,string)", +"22ac5f40": "fulfillEscrow()", +"22ad3b76": "fiatFee()", +"22ae634f": "getInvestment(uint256)", +"22aef13c": "requestChangeRequirement(uint256,string)", +"22af00fa": "bets(uint256)", +"22af1b27": "UnpackAccessDChain(bytes)", +"22af47e3": "tokensIssuedAir()", +"22b01343": "initializeAssetsToThisApplication()", +"22b05ed2": "getStatus(string)", +"22b08180": "purchaseVideoGame(uint256)", +"22b0e99a": "EARTHToken()", +"22b0f6ee": "getStatusOfPayout(uint256)", +"22b11169": "setWalletOwnerAddress(address,address)", +"22b152a3": "liquidateLosing()", +"22b19192": "imAlive()", +"22b1a226": "withdrawPaymentsRegistrar(address,uint256)", +"22b1f39c": "currentInvoice()", +"22b263b2": "nextPlayerID()", +"22b2678a": "hasBalance(address)", +"22b28aa4": "resetTimes(uint256,uint256)", +"22b2ea22": "registerHWCDep(string)", +"22b2f178": "minimumDifficultyThresholdWei()", +"22b36d88": "stopTde(bool)", +"22b45ddc": "EarlyBackerDeposit(address,uint256)", +"22b4891d": "capICO()", +"22b524fe": "getFreelancer(address,uint256)", +"22b53192": "arr(bytes32)", +"22b53b4b": "accruedLiq(address)", +"22b6fe9e": "getAgreementSetCount()", +"22b6ffca": "isSignedUp(address)", +"22b79623": "resetEpocum(address)", +"22b87601": "testRemovePending()", +"22b930f7": "VESTING_1_DATE()", +"22b954f8": "poolFeeRate()", +"22b96b63": "getIPFSHash(address,bytes32)", +"22b9b712": "BETTING_OPENS()", +"22b9bd35": "adjustPrizePoolAfterWin(uint256,uint256)", +"22bac568": "grantAdditionalShares(address,uint256)", +"22bae392": "setBenecifiary(address)", +"22bb06d8": "marketting()", +"22bb4f53": "retentionMax()", +"22bbad0b": "instruments(uint256)", +"22bc0d6c": "appendEncryptedBid(bytes32,uint256)", +"22bc3b8e": "getArgument(uint256)", +"22bc98b1": "basicPresaleRate()", +"22bcabcd": "TOKENS_ACCELERATOR()", +"22bd6d3f": "hired()", +"22bdf293": "grantVestedEDEX(address,uint256)", +"22be9342": "resolve(uint256,uint256,bool)", +"22beb9b9": "scheduleDoIt(uint256)", +"22bf1a2a": "addrLockUp()", +"22bf2e24": "ROLE_STAFF()", +"22bf9d7c": "slashTranscoder(address,address,uint256,uint256)", +"22bfba59": "drawRandomUnitWinner()", +"22bfdcbb": "RaffleStrangeLoop(bytes32)", +"22c07ad3": "indFutureDeposit()", +"22c1d0d2": "_withdrawAmount(address,uint256)", +"22c21e6c": "ZHIHUIGUO()", +"22c25c50": "Addr7()", +"22c25d8f": "set_presale_arbits_total(address,uint256)", +"22c2b9eb": "MakeOver(address)", +"22c30931": "calculateStep(uint256)", +"22c4d98f": "hasAllowanceToRecieveTokens(address)", +"22c4f168": "setTransferFeeProp(uint256)", +"22c51659": "getWhitelistedZone(address)", +"22c5b279": "addLayer(address,uint256,bytes32)", +"22c61e73": "createContractPoo(string)", +"22c66ae7": "decimal_precission_difference_factor()", +"22c69b15": "tradeDAI(uint256,uint256)", +"22c6aad9": "pigcoin(uint256,string,string)", +"22c6ae15": "mul(uint64,uint64)", +"22c83245": "clearBlackAccount(address)", +"22c8c2cc": "setEtherPriceAuditor(address,bool)", +"22c9427e": "recycleDividend(uint256)", +"22cacd6b": "setUSDBtc(uint256)", +"22cb1ec8": "teamTokensMinted()", +"22ccd000": "Blocksale(uint256,string,uint8,string)", +"22cd5ea8": "claimBet(bytes32)", +"22ce1f8f": "VixcoreToken2(uint256,string,string)", +"22ce61b2": "globalMetSupply()", +"22ce9bac": "numberOfVotesCast()", +"22ced0bd": "BTrustToken()", +"22cf1745": "USTToken(address,string,string,uint8)", +"22cf5011": "privilegedTransfer(address,uint256,bytes)", +"22cf981d": "proposeMintLocked(address,uint256)", +"22cfadc7": "isFundingNow()", +"22d0d31f": "OD1Coin(uint256)", +"22d122a9": "MyTestWallet7()", +"22d1bd32": "currentlyActive(bool)", +"22d2cfac": "getNextElement(uint256)", +"22d310f9": "setMarket2(address)", +"22d34212": "get_eth()", +"22d40b96": "defcon()", +"22d4e0fd": "pay2(address,uint256,address)", +"22d60d17": "tokensPerWei()", +"22d6eb87": "getInfo2(address,address,uint256)", +"22d7642e": "getScene(uint256)", +"22d85334": "isValidBicoinAddressPrefix(bytes)", +"22d8c8a8": "AddMaterial(address,uint256,uint256)", +"22d8cf5b": "CheckUserVote(uint8,uint8)", +"22d9f13e": "changeCUSD(address)", +"22da10b0": "checkPermissions(address)", +"22da3368": "IoMTToken()", +"22da5d04": "tokenCreationMaxPreICO()", +"22db2f7b": "processOffchainPayment(address,uint256)", +"22db4143": "BONUS_THRESHOLD()", +"22db61ab": "setunitDefenseMultiplier(address,address,uint256,uint256,bool)", +"22dbaf75": "test_oneInvalidEqBytes32()", +"22dbd0e4": "payComisionSponsor(address)", +"22dbf6d2": "reserveFeeToWallet(address,address)", +"22dc36e2": "processed(uint64)", +"22dc5a85": "ERC20address()", +"22dc8e71": "setIV_R1(uint256)", +"22dce86c": "getEscuelas()", +"22dd0d2c": "TEAM_KEEPING()", +"22dd9b8c": "templateSupply()", +"22ddde5b": "getLRCAmount(address)", +"22dde4cd": "secToNextMiningInterval()", +"22de2457": "clientVerifyKeyHash(bytes32,bytes32,bytes32,bytes32)", +"22df1caf": "grantPresaleTokens(address[],uint256[])", +"22e01192": "setPrice(string,uint256)", +"22e02b22": "ClaimEth()", +"22e113a3": "freezeTokens(address,bool,uint256)", +"22e12720": "MAX_HOLDERS()", +"22e256e2": "Addr5()", +"22e2b31f": "unlockAmount(address,uint256)", +"22e37189": "tklosses()", +"22e3989b": "multNumerator()", +"22e412ce": "strikePut()", +"22e465ee": "tolerantSub(uint256,uint256)", +"22e58557": "getFreeEggs()", +"22e5aa3a": "totalProportion()", +"22e5d0fa": "CoCoToken()", +"22e62038": "close_bank()", +"22e63356": "setValueAgent(address)", +"22e67e71": "maxTime()", +"22e6f1d0": "giveGoldenTicket(address)", +"22e77ff3": "plz(address)", +"22e78480": "getGoldDataSku()", +"22e803c2": "transferBounty()", +"22e84682": "isValidContributorAddress(address,address)", +"22e8571d": "legalsAddress()", +"22e8c87d": "getUserData()", +"22e8c8fc": "gamble(uint256,uint256)", +"22e8df23": "ICO_MINIMUM_CONTRIBUTION()", +"22e91248": "getLeaf(uint256)", +"22e95f6c": "payout_normalizer()", +"22e9afca": "cofoundersSupplyVestingTranches()", +"22ea2231": "purchaseTokens(address,uint256)", +"22ea2d96": "getBookInfo()", +"22eb2c02": "viewPreSaleRefunds(address)", +"22ebb3ac": "DieselPricePeg()", +"22ebc4a0": "fpartSigned(int256)", +"22ec1244": "shaBid(bytes32,address,uint256,bytes32)", +"22ed6302": "setCrowdsale(address,uint256)", +"22ed96a0": "getInvestorsFee()", +"22ee1db4": "uint32At(uint32,bytes,uint256)", +"22ee46db": "VapeToken()", +"22ef83ef": "AuthInit(address)", +"22efee2d": "get_participant_num_of_pro_rata_tokens_alloted(address)", +"22f06ae4": "isRecoverer(address)", +"22f0e6ae": "MarketingMethodAddress()", +"22f0f2f9": "unlockContract()", +"22f16c8d": "checkDividends(address)", +"22f256f8": "buyIOD()", +"22f2f89a": "allOperationsCount()", +"22f3e2d4": "isActive()", +"22f43bb5": "seedGame()", +"22f4596f": "_maxSupply()", +"22f48627": "SIACASHCOIN()", +"22f4afb5": "relayKingContract()", +"22f4e916": "GdprCrowdsale(uint256,uint256,address)", +"22f607f6": "Escrow()", +"22f6af6e": "TokensBought(address,uint256,uint256,uint256)", +"22f6fa7a": "contractorTransfer_Bcoupon(address,uint256)", +"22f709dd": "getEther(address,address)", +"22f77d2a": "Refundable()", +"22f7be85": "setFlight(uint16,uint16,uint256,uint256)", +"22f7d1f8": "normalFunc()", +"22f85eaa": "buyOrder(uint256)", +"22f872a7": "allocateBounty()", +"22f8a2b8": "getDayOfWeek(uint256)", +"22f905ec": "GetPartNum(uint8)", +"22f93f16": "updatingViaOracle(string)", +"22fa1ff4": "MAX_PROMO_GIRLS()", +"22fa85ca": "testFailRegisterContractAgain()", +"22faa5db": "removeURL(string,uint256)", +"22faf03a": "setInstructor(string,uint256)", +"22fb5303": "_transferFromWithReference(address,address,uint256,string,address)", +"22fb71f1": "getGoldStatusVendorverify(address)", +"22fb730b": "claimerOfTwitterId(uint256)", +"22fbde38": "qtdePokemons(address)", +"22fbf1e8": "addDeveloper(address)", +"22fc3149": "setWhitelistThresholdBalanceInternal(uint256)", +"22fec5e7": "VEToken()", +"22fefe31": "devuelvePuntuaciones(bytes32)", +"22ff1110": "CancelSellOrder(bytes32,address,uint256,uint256,address)", +"22ff79d8": "USA()", +"23017a3a": "rewardVaultContract()", +"2301e7b7": "isInPreSaleState()", +"23020be5": "SetfirstTTax(uint256)", +"23023aa4": "_doCatchFish(uint16,uint16,bytes32)", +"23024408": "fund(address)", +"2302c948": "EtherDank()", +"2303084b": "hasTransfers(address)", +"23037a85": "setNextPrice(uint256)", +"23040327": "oraclize_query(string,bytes[4])", +"230434d2": "Technology5GCrowdsale(uint256,address,address)", +"2304ede4": "ADSToken(address,address)", +"230614fb": "batchTransferToken(address[])", +"23063da2": "Hellina()", +"230662f8": "changeSaleManager(address,address)", +"23087c04": "_isWinnerOf(address,address,address)", +"230894f8": "transferTileFromOwner(uint16,address)", +"2308a41c": "amountRaisedBy(uint256)", +"23092560": "RecoverAddress(bytes32,uint8,bytes32,bytes32)", +"23098a9a": "burnAssessor(address)", +"230a1074": "getRegionCurrentImageId(uint256)", +"230a14c0": "RISK_LEVEL()", +"230a3c05": "constructWeaponTokenId(uint256,uint256,uint256)", +"230a8020": "getAddressValue(uint256)", +"230b1eb5": "totalReservedTokenAllocation()", +"230b9667": "getProviderInfoFields(uint256)", +"230b9da3": "parentContract()", +"230bd25d": "requestBounty()", +"230c50fe": "AuthorizePayments(bool)", +"230c96b9": "BuyTokensWithAffiliate(address)", +"230cf412": "test(uint256,int256,uint256,uint256,uint256)", +"230d3469": "canExchangeNum()", +"230d6ed8": "addCandidate(bytes32)", +"230dff66": "theclub()", +"230f49d9": "buy_token(address[])", +"230f6e83": "getCrydrViewStandardNameHash()", +"2310b384": "finalizeStake()", +"2311542e": "SSOrgToken(string,string,uint256)", +"2311bdb2": "isForgiven(string)", +"2311d39c": "dot()", +"2311dc0b": "postProduct(bytes32,bytes32,bytes1)", +"2311e345": "SaleFinalized(address,uint256)", +"23133115": "changeIncreaseStep(uint256)", +"23141fd0": "sendP(address,uint256)", +"23145ca0": "forceCheck()", +"23146c20": "getBuyerAddressPayment(address,uint256)", +"2314a5c8": "getReput(address)", +"2314aad6": "setExtensions(address)", +"2315550e": "add(address[],uint256[])", +"23158cae": "addBet(uint256,uint256)", +"23165b75": "acceptBidForPunk(uint256,uint256)", +"23169ec4": "medalName()", +"23169fca": "EDU_PER_ETH_EARLY_PRE_SALE()", +"2316d0cd": "deathData_a16()", +"2317880c": "requestArbitration(bytes32)", +"2317c28e": "mediaTokenIndex(uint256)", +"2317cd54": "_endRound()", +"2317ef67": "removeAsset(address,uint256)", +"2317f9f3": "setSanMaxAmount(uint256)", +"2318ffc7": "setRokBalance(address,uint256)", +"23191bf1": "finalizeByArbitrator(bytes32,bytes32)", +"231944e2": "moveUnits(uint256,uint256,uint256[])", +"23198b98": "setTokenHolderTribunal(address)", +"231a00cc": "changeBonusRate(uint256)", +"231a2be3": "minimumContributionPhase6()", +"231a439e": "setBlacklistDestroyer(address)", +"231ace68": "MiningRewardPerETHBlock()", +"231b0268": "firstBlock()", +"231b48aa": "settingsSetWeiPerMinToken(uint256)", +"231c1ce8": "unusedMethod(address)", +"231c1d43": "generate(uint256,string)", +"231cb6ab": "ENS_SUB_APP_NAME()", +"231d45a4": "addProduct(uint256,uint256,uint8,bytes32)", +"231d87e1": "competitorTeam(uint256)", +"231da56e": "getSenderValue()", +"231e0750": "register(bytes32,bytes32,bytes32,bytes32)", +"231e18a9": "pureFunc()", +"231fa805": "IsControledAddress(address)", +"23210c1a": "StfuToken()", +"23214fab": "maxProfitAsPercentOfHouse()", +"2321e625": "publicSaleSencPerMEth()", +"23221f1e": "getNbVersions(string,string)", +"2322f484": "balancesQuantity()", +"232397e2": "addAccount(uint256,uint16,bytes32,uint256)", +"2323a00e": "WagaToken()", +"23240d81": "getDailyTransactionVolumeReceiving()", +"23245216": "removeWhitelist(address[])", +"2324c67c": "getAllSignatureHashes(bytes4)", +"232523e8": "forceDivestOfAllInvestors()", +"23260a8b": "getPreviousPrice(bytes10)", +"23262615": "claimVaultOwnership()", +"23266dfe": "getOrganizersAddresses()", +"2326df93": "site_url()", +"2326ef22": "CreateDMSContract(address,bytes32,uint32)", +"2326faf9": "getResearchPerDay(address)", +"23285480": "RefundDeposit(address,uint256)", +"23290737": "logMarketTransferred(address,address,address)", +"2329b4f7": "CryptDash()", +"232a2c1d": "executeSignatures(uint8[],bytes32[],bytes32[],bytes)", +"232a3060": "setFundManager(address)", +"232a6b9d": "signed()", +"232c4d24": "sub_fCode(string,uint256)", +"232c6bab": "delIndividualCertificate(string,bytes32)", +"232cae0b": "last_offer_id()", +"232db034": "abortFunding()", +"232e57c1": "optionSupply()", +"232e7e91": "getproduct(uint256,uint256)", +"232e9051": "gunsFund()", +"232fd216": "getPoolDone(uint256)", +"233023de": "setCertifierInfo(address,bool,string)", +"23306ed6": "getMinimumBond()", +"2330f247": "isAuthority(address)", +"233104d6": "setPresidenteDeMesa(bytes32)", +"233120aa": "getChainyURL()", +"2331af61": "transferActive()", +"23338b88": "delMinter(address)", +"23343af3": "setConfigAddress(address,address)", +"2334623f": "totalETM()", +"23350e4a": "regainEther()", +"23355749": "IkokoToken()", +"2335d307": "IFSActive(address,uint256,uint256)", +"2337d9f1": "endOfferingImpl()", +"23385089": "emitApprove(address,address,uint256)", +"23389c5a": "docs(uint256)", +"2338c002": "_applyShare(address,address,uint256)", +"233907a3": "signedApproveAndCallSig()", +"23394e46": "TripAlly()", +"2339dd43": "HcftSale(address,address)", +"233a04ec": "setEditionSales(uint8,uint256)", +"233a74c9": "currentTokenDistribution()", +"233aacf9": "Announce_winner(address,address,uint256)", +"233ab10d": "setBaseEthCapPerAddress(uint256)", +"233b39c9": "_initCardDetails(uint8,uint256)", +"233b7451": "lastStakedFor(address)", +"233bf71e": "FOCToken()", +"233d264a": "startTicker()", +"233de126": "odds()", +"233dedf1": "averageBlockTime()", +"233e0877": "Purchase(address)", +"233e3220": "renounceSuperInvestor()", +"233e5d00": "WorldStage()", +"233ff4b2": "_fund(uint256)", +"23400cf6": "getLOCCount()", +"2340903d": "EEZcoin(address)", +"23412ede": "StorageEnabled(bool)", +"2341a1af": "receivePlayerInfo(uint256,address,bytes32,uint256,uint8)", +"2341d778": "giveTix(uint256,address)", +"2342293d": "collectionFees()", +"23437d50": "discountICO()", +"23447982": "replaceManager(address)", +"2344acdf": "pauseOffset()", +"2344b0e5": "url_white_paper()", +"2344e4ec": "getHint(uint256)", +"23452b9c": "cancelOwnershipTransfer()", +"2345fe81": "xperToken()", +"234638df": "PreICOHardcap()", +"23471d18": "setStakeAddress(address)", +"2348238c": "transferPrimary(address)", +"23483e45": "delRosenCertAdmin(address)", +"2348f1ee": "lockAttemp()", +"234917d4": "getCallTargetBlock(bytes32)", +"2349748d": "MenoroCashSupply()", +"2349e719": "processStepsByStep(uint256,uint256)", +"234a0ee7": "appHub()", +"234a6ed8": "initializeToken(address)", +"234ae1a0": "WallDirectory()", +"234b2cb4": "whitelistApplication(string)", +"234c0ae5": "combine(uint256[],uint256)", +"234c4bd9": "deployStepThree()", +"234e0056": "COIN_SUPPLY_ICO_PHASE_1()", +"234e5273": "tittyContract()", +"234e5f16": "TIMETHRESHOLD()", +"234ea19c": "lockRate()", +"234f1eb6": "JVToken(address,address,address,uint256)", +"234f9db2": "getBalanceIco()", +"235029ee": "SQT()", +"23509e69": "donkeysEligibleForFees()", +"2350e762": "participantWithdrawIfMinimumFundingNotReached(uint256)", +"2351299a": "createTokensToOwner(uint256)", +"2351baca": "fechVoteNum(address)", +"2351c2f8": "get_tokenReward()", +"2352551f": "bbPublicSaleWallet()", +"23525826": "maxNumbPerSubscr()", +"23526a34": "turnOffSale()", +"235304b2": "updateNextGameInitalMinBetSize(uint256)", +"23533138": "seedMarket(uint256,uint256)", +"23537880": "TestSale()", +"23539cd4": "mintResource(uint16,uint256)", +"235422fb": "_medalUnFreeze()", +"23548b8b": "maxCap()", +"2354b3ed": "requestSatsPrice(string)", +"2354bda7": "auditGuess(uint256,string,uint8,uint256,uint8,uint256)", +"2354ecf7": "balanceOfOnUpdate(bool)", +"2355300f": "unspentCreditsWithdrawn()", +"2355c602": "queryToAddress(bytes32)", +"2356f46a": "Kontlo()", +"23571ac9": "seenHereA(uint256)", +"2357cd3b": "invadeAddress()", +"23584a21": "initStats(string,address,uint256)", +"23586685": "recordSale(uint256,uint256)", +"23587733": "DEVELOPER_BONUS()", +"2359116d": "refill(address,uint256,string)", +"23594797": "createContractRegion(string)", +"235977ca": "ParadiseTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"2359bd08": "reinvestTokens(address)", +"235b1eb7": "getOverRate(uint8)", +"235bd895": "_getGameInfoPart1(address,uint256)", +"235c002d": "transferOther(address,address,uint256)", +"235c279f": "addEmitter(address)", +"235c9603": "getNextTranscoderInPool(address)", +"235e5d47": "isRoundEnd(uint32)", +"2360f5a1": "openSaleSupply()", +"2362189a": "defaultExchangeRate()", +"23624a10": "tokenFee(uint256)", +"23626067": "thirdCheckpointPrice()", +"23626df7": "setContractAddress(address,address)", +"2362b26d": "Awards(uint256)", +"23637e60": "votePrice(uint256,bool)", +"23647398": "testThrowRetractNotOwner()", +"23655d7b": "Fantom()", +"236571e2": "determineWinnerEven(string)", +"2365ceb3": "SetWagerData(bytes32,bytes15)", +"2367e1ae": "getLengthOfMatches()", +"2367f35d": "crowdsaleEnded()", +"23685b97": "bpToken()", +"2368d215": "multipleAddToWhitelist(address[])", +"236a160e": "isValidIssuance(uint256,uint256,uint256,uint256)", +"236a8d9d": "registerNode(uint256,uint256)", +"236ae025": "distributionThreshold()", +"236be3e2": "BlockcloudToken()", +"236dd0e8": "paidBidAllocationFee(bytes32)", +"236e06f6": "exchange(address,uint256,uint256)", +"236e1a15": "PromotionCoinMintFinished()", +"236ebbae": "setAuditNodePrice(uint256)", +"236ed5a6": "getVoterProposalsCount(address)", +"236ed8f3": "closeAuction(uint256)", +"236eeff7": "compensate_log(uint256,address)", +"236f86a1": "remainingTokens(address)", +"236ffad4": "initOwned(address)", +"237032da": "isBacker()", +"237082bd": "getCertifiedDocCount(address)", +"2371bb4b": "SetNumber(uint64)", +"23724ffd": "TransferManagerApproved(address)", +"237297a4": "claimWinner()", +"2372996a": "CUSTOM_ERC20_CREATE_SERVICE_NAME()", +"23732ad8": "OSTestToken()", +"2373f091": "_setMinter(address)", +"23749f69": "donationsEndedTime()", +"23751e95": "addRedbullQuest(address)", +"237548fa": "seriesFactory()", +"2375766a": "unlatchContract()", +"2375da83": "setIntArr(uint256,address)", +"2376fe70": "approveProxy(address,address,uint256)", +"23773f81": "calcTapAmount()", +"2378fe2d": "FAPFundDeposit2()", +"23797ed9": "getAppByIndex(uint256)", +"237a35b2": "professionalName()", +"237a4a7f": "requestOneUUID(address,uint256)", +"237b5e96": "child()", +"237c2b22": "MCTCrowdsale(uint256,uint256,uint256)", +"237c72ac": "replaceDecoration(uint256,uint256)", +"237d2628": "issueTokens(address,uint256,uint8)", +"237e9492": "executeProposal(uint256,bytes)", +"237f142a": "ownersLen()", +"237f1a21": "hasIdentity(address)", +"23807da8": "getInvoicingAddressCount(string)", +"2380c39d": "backUtcoinOwner()", +"2382534a": "STR()", +"2383b074": "getSurplus()", +"23845e4b": "getPoolSize()", +"2384c058": "account3()", +"23855c18": "updateDeposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"23855cd3": "setBalanceForUser(bytes32,uint256)", +"23858314": "sizeOfProviders()", +"238604f0": "SuperContract()", +"23866438": "joinChannel(bytes32,uint256[2])", +"23867979": "getHealBalance()", +"2386d33e": "_tenuousToken()", +"2387c87d": "setTokensSold(uint256)", +"2387e75e": "RequestBitcoinNodesValidation(address,address)", +"23898138": "MoneyCoin()", +"2389a290": "joinGame(address)", +"238a3fe1": "transferDistribution(address,uint256)", +"238ac933": "signer()", +"238bf375": "PROMETHEUS_MAX_PRICE()", +"238bfba2": "getChannelWith(address)", +"238c5b06": "icoDiscountPercentageLevel1()", +"238d3590": "getTotalTheoreticalSupply()", +"238dafe0": "enabled()", +"238e5b14": "burnAmount(address)", +"238e9de7": "StopFuseaNetworkDistribution()", +"238efcbc": "acceptGovernance()", +"238f7743": "unlockSecondTokens()", +"238fcbf8": "DISCOUNT_TOKEN_AMOUNT_T2()", +"2390507b": "COMMUNITY_ADVISERS_STAKE()", +"239131af": "NEXUS()", +"2391ddf3": "handleLuckyPending(uint256)", +"2391f0b3": "isProtect(bytes32,uint8)", +"23924cff": "TeamLockingPeriod6Months()", +"23926732": "ifDestory(address)", +"23949cd1": "setNFTContractAddress(address)", +"2394a797": "makeHybridization(uint256,uint256)", +"2394cc40": "transferInternally(address,address,uint256)", +"2395e9b6": "specialAllowed(address)", +"23967d78": "FOUNDATION_HOLDER()", +"2397e4d7": "sellToken(uint256)", +"2397f92b": "KNDToken()", +"23985742": "STANToken()", +"23987690": "indFuture()", +"2398a6a6": "sendPrize(uint256)", +"2398b8fc": "SCHEMA_HASH()", +"2399a5af": "balanceAdd(address,address,uint256)", +"2399e1f2": "addPromotionalCompany(string,uint256,uint256,uint256)", +"2399f870": "updateFlipAndMDT(address,uint256,address,uint256)", +"239a2545": "totalNights()", +"239ab208": "notifyAssessors(uint256,uint256)", +"239aee06": "execute(address,address,address,uint256)", +"239b6dd1": "QUINToken(uint256,string,string,uint256)", +"239bb5a6": "getConstructorString()", +"239c02ba": "OPSToken()", +"239d339b": "updateStageByTime()", +"239da1a3": "SportStarMaster()", +"239da7de": "getServiceFeeDenominator()", +"239e7881": "GEBEC()", +"239e83df": "guardedArrayReplace(bytes,bytes,bytes)", +"239f26ee": "BethereumERC223()", +"239f29dd": "setConsensusPercent(uint256)", +"239fcf0f": "Balance(address)", +"239fd68f": "setCurrentPricePerWei(uint256)", +"23a08d97": "totalPreICOavailible()", +"23a1b159": "maxTimeBonusPercent()", +"23a1bd8f": "Dancoin()", +"23a1c271": "setPongval(int8)", +"23a1e00e": "openLeaderboard(uint8,string)", +"23a24a33": "setBAA(bytes32,address,address)", +"23a2725a": "LeS3coin()", +"23a27bcd": "checkProofOrdered(bytes,bytes32,bytes32,uint256)", +"23a31463": "setBlockLock(bool)", +"23a3335c": "BuufmanToken()", +"23a36d2b": "mintToken(address,uint256,uint256)", +"23a37c09": "addRNTBContribution(address,uint256)", +"23a3ad72": "checkRole(address,uint8)", +"23a50727": "endStage(uint256,uint256)", +"23a52674": "expandX()", +"23a58576": "zeroBool()", +"23a6b8ca": "currentBeneficiaryCap()", +"23a8792e": "ChangeTokenPrice(uint256)", +"23a8edb5": "LociBackend()", +"23a90e5e": "getCustomerTxTimestampPaymentMCW(address,bytes32)", +"23a9a156": "SNL()", +"23aa6a17": "issueTokenAndApprove(uint256,uint256,address)", +"23aa7e12": "controllerDelegate()", +"23aba14f": "iCapToken()", +"23abea43": "getPlayerKeys(uint256,uint256)", +"23ac3fd4": "getPOOL_edit_32()", +"23ac4b03": "addQuickPromoBonus(uint256)", +"23ac9ae2": "CcStandardToken(uint256,string,uint8,string)", +"23add736": "claim(uint256,uint256,uint8,bytes,bytes)", +"23adeb05": "OneChance(address,address,address)", +"23ae4438": "getLastRoundInfo(uint256)", +"23aea69d": "isNextBudgetPlanMade()", +"23aed228": "selling()", +"23aedc62": "startSale(uint256[],uint256[],uint256,uint256)", +"23afba86": "Lancer()", +"23b06313": "getPoolBonusFirstExpertFactor(uint256)", +"23b0abeb": "showPhaseInfo(uint256)", +"23b0bbea": "getBullsmasterReq()", +"23b0db47": "delegate_2x(address,uint256[],address[],bytes32[])", +"23b1131c": "unlockDate2()", +"23b11bb1": "getPropertyLastUpdate(uint16)", +"23b11d8d": "addProxy(address)", +"23b17715": "AddressDescriptionAdded(address,string)", +"23b1ed54": "getConstantName()", +"23b1f8e4": "lastPriceUpdateTimestamp()", +"23b2b48f": "addressToAccountMap(address)", +"23b364ab": "getAvailableTicketCount()", +"23b37bb6": "sqrt(uint64)", +"23b3af89": "addHolder(address,address)", +"23b3b704": "calculateUntaxedEthereumReceived(uint256)", +"23b3c771": "getFreeShrimp()", +"23b44cfc": "assignNewParcel(int256,int256,address,string)", +"23b493fe": "getUserFiatBalance(string)", +"23b5aa8d": "STAT()", +"23b5b257": "tokenHasFreeTrial(address,address)", +"23b62b75": "mainWallet()", +"23b6ce11": "buyDiscipleItem(uint256,uint256,uint256,uint256)", +"23b6fc8b": "verifyUrl()", +"23b715cb": "updateShare(address[],address,uint256[],uint256)", +"23b7b140": "setFreezTime(uint256)", +"23b7ec3b": "ownerOf(uint32)", +"23b7fc86": "count_token_holders()", +"23b80995": "saleOver()", +"23b872dd": "transferFrom(address,address,uint256)", +"23b8feb0": "safeMul_dec(uint256,uint256)", +"23b98f92": "getPOOL_edit_6()", +"23ba3420": "t_Michail()", +"23ba467a": "isLastRound()", +"23bb1f69": "prepareToScore(uint32)", +"23bb8022": "getCurrentRateByTokenSold()", +"23bb81ae": "transferSoldToken(address,address,uint256)", +"23bba494": "setContribPeriod(uint256,uint256,uint256,uint256,uint256)", +"23bc29a0": "systemEndingPrice()", +"23bcaae9": "newPost(string)", +"23bd4d7a": "organization()", +"23bd9914": "_calcReward()", +"23bda0ee": "MyCurrency()", +"23be45e2": "matchOrders(bytes,bytes)", +"23bef5dd": "storeWelfare(address,string)", +"23bf0425": "fastEnd()", +"23bf2973": "tgeSettingsPartFounders()", +"23bfc777": "changeRoundDelay(uint256)", +"23c0889a": "initMinerData()", +"23c105a2": "eliminateFrom(address,uint256)", +"23c1236a": "burnFromByAddress(address,uint256,address)", +"23c2460d": "rate(uint16,uint256)", +"23c2b4ea": "finishPREICO()", +"23c2de55": "SmartContractCasino()", +"23c32d74": "cstToMicro()", +"23c3dae7": "NewTranch(uint256)", +"23c4841e": "ToggleFreezeBuying()", +"23c4948c": "getDonator(address)", +"23c5a088": "updateCost(uint256)", +"23c5c55a": "buyImagePriv(uint256)", +"23c5e967": "mul2Throw(uint256)", +"23c639fe": "getback(uint256,uint256)", +"23c69d2a": "currentDividend()", +"23c6bc39": "addressThreshold()", +"23c6c98b": "activeShareholdersArray(uint256)", +"23c731f5": "isCanList()", +"23c79ab3": "CoinFuns()", +"23c850db": "registerGold()", +"23c860a8": "INTREPID_SHIP_PRICE()", +"23c89a00": "requestSignature(bytes32[8],bytes)", +"23c94353": "currentTokenBalance()", +"23c99826": "getDictJob(address,uint32)", +"23cadd34": "move(address)", +"23cafc3d": "voteNoLockByAdminBatch(address[],address[],uint256[])", +"23cb7b19": "_influenceAlgorithm(uint8,uint256)", +"23cba56f": "bonusProgramEnded()", +"23cc16be": "burnInvestorTokens(address,address)", +"23cc3496": "_setRunesValue11(uint256)", +"23cc75a8": "finalizeICO()", +"23cc7615": "userIdIndex()", +"23cc9a90": "addParticipant(address,address,address)", +"23cd5090": "registerToProvider(address)", +"23cd7cd5": "Model()", +"23cdd8e8": "log(string,bytes)", +"23ceb6d8": "mintTokenEscrow(address,uint256)", +"23d0601d": "getAccountIdFromSignature(bytes32,bytes)", +"23d17a40": "addrBRXPay()", +"23d1ab35": "donationReceiverLocked()", +"23d1b8eb": "etherPayout()", +"23d1c95e": "addProposal(string,string)", +"23d1fe56": "s22(bytes1)", +"23d24f24": "LogEscrowEth(uint256)", +"23d2691b": "addAuditRequest(address,string,uint256)", +"23d27633": "EtherLite()", +"23d2b3aa": "HaoCoin()", +"23d32d6a": "generatedBytes()", +"23d34f84": "setGuessAnswer(string)", +"23d44dee": "collectedSignatures(address)", +"23d533c8": "EBCBToken()", +"23d5a686": "getSpaceshipUpgradeCount()", +"23d669db": "setValidationClosed(uint256)", +"23d6b008": "assignedAmountToTheFoundation()", +"23d6c92f": "setFreelancerParams(uint256)", +"23d71b26": "mtrTokenFallBack(address,uint256)", +"23d73ca5": "test_invalidEmptyNotOne()", +"23d7caee": "BitMineToken()", +"23d7e089": "getPotCost()", +"23d808da": "getMatch(uint8)", +"23d80d3a": "IfContractRegist(address)", +"23d862ed": "getAddressLockedLength(address,address)", +"23d88efd": "preIcoTokenSupply()", +"23d9ea80": "getOfferPriceCandy(uint256)", +"23da9c4b": "WhiteListAccess()", +"23db3e50": "_checkAreaAndCategory(uint256,uint256,uint256)", +"23dbf825": "distributionComplete()", +"23dc1314": "failSafeLimit()", +"23dc14c0": "AdAgency()", +"23dc210f": "transferToAddress(address,address,uint256)", +"23dc33b9": "reward6()", +"23dc3f72": "_checkGrid(uint256,uint256,uint256)", +"23dc42e7": "query1(uint256,string,string)", +"23dca40f": "Submit(uint256,bytes32,uint16)", +"23dccbd6": "LogFollow(uint256,address,uint256)", +"23dd03c3": "getLLV_edit_23()", +"23dd523d": "unregisterMember(uint256)", +"23dd797b": "setESOP(address,address)", +"23dddaba": "simpleVotingDapp(bytes32[])", +"23de1915": "NewTicket(address,bool)", +"23de6651": "emitTransfer(address,address,uint256)", +"23defc77": "setHeir(address)", +"23df9df5": "_refund(uint256)", +"23dfed97": "emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"23e1d351": "buyKeyUseBalance(uint256)", +"23e1d8d0": "failedTimestampLength()", +"23e1f881": "PendingOwnershipTransfer(address,address)", +"23e25f7d": "sendReserveBalance(address,uint256)", +"23e26c43": "datestart()", +"23e375dd": "_computePrice(uint256,uint256,uint256,uint256)", +"23e3d7a9": "updateDescriptiveInformation(address,string,string,string,string,bytes20)", +"23e3fbd5": "depositOf(address)", +"23e4172d": "testValidationOfDecrease()", +"23e44848": "DPToken()", +"23e4d669": "getPlayerPortfolio()", +"23e53b2e": "setSiringAuctionAddress(address,address)", +"23e5942a": "initWallets(address,address,address,address)", +"23e5d13c": "declareWinner(address,bool)", +"23e5e822": "mintToken(int256,address,uint256,address)", +"23e5f1c5": "hour()", +"23e798e6": "getDocumentIdWithName(string)", +"23e7a900": "setIcoEnd(uint256)", +"23e7d9b2": "createInvoice(bytes32,address,uint256,string)", +"23e8cefc": "encodeIfElse(uint256,uint256,uint256)", +"23e957b6": "calculateScore(address)", +"23e9637f": "setSoftCapInCents(uint256)", +"23e9c216": "setBounty(address,string,uint256)", +"23eac4bd": "setTokenOwner(uint256,address)", +"23eb0197": "giveMemberAllowance(address,uint256)", +"23eb3831": "PurchaseCapChanged(uint256)", +"23eb861c": "unchainedMultisigVersionMajor()", +"23ec5939": "returnInvestoramount(address,uint256)", +"23ec8f62": "ownerUnlockFund()", +"23ecb66f": "getPreviousDate(bytes32)", +"23ecc4a1": "claimAmountSet()", +"23ecf108": "MartinKoToken()", +"23ed0a2e": "registerWorker(uint256,uint256,bytes32,bytes32)", +"23ed476f": "treasurySent()", +"23edfb89": "cancelSaleWhenPaused(uint256)", +"23ef2e4f": "stopPreIcoMint()", +"23ef2e56": "setBAI(bytes32,address,int256)", +"23ef604f": "removeOwnedNote(address,uint256,uint256)", +"23f02f56": "crowdEther()", +"23f0b2b6": "getProfile(address,string)", +"23f14e86": "setAutoAddress(address,address)", +"23f1dbe0": "minBidPercentage()", +"23f2cbb0": "sponsorGas()", +"23f3ad03": "ParminderToken()", +"23f4c025": "Cherrio()", +"23f5c64f": "get_data_owner(address,address,string)", +"23f614dd": "TinyOracleLookup()", +"23f64051": "setClaimToken(bool)", +"23f64140": "depositAgent(uint256,uint256,uint256[],uint256[],uint256)", +"23f685dd": "getUnclaimedHalvingSubsidy(uint256)", +"23f6e4fb": "Registered(address,address,uint256,uint256,uint256)", +"23f7dc66": "hasReadership(address,uint256)", +"23f806b7": "tokenAdvisoryBountyTeam()", +"23f809f6": "generateAddAddressSchemaHash(address,bytes32)", +"23f907d9": "MAXIMUM_ETHER_SPEND()", +"23f938ee": "isTransferLock(address,address)", +"23fa370d": "suspendedUntil()", +"23fa495a": "setFlatFee(uint256)", +"23fcdb20": "getRequiredSigs()", +"23fd0176": "destroyCredits(uint256)", +"23fd4524": "OMT()", +"23fe073e": "BancorQuickConverter()", +"23fe1da1": "purchaseWithETH(address)", +"23fe5b90": "hardCapFundingGoalInCents()", +"23fe6146": "pushIssuers(address[])", +"23fed09e": "hasEnoughFund()", +"23ff2af0": "setAttrs(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"23ffcc3e": "PenchantICO()", +"24008a62": "repayBorrowAllowed(address,address,address,uint256)", +"2400b582": "_issue(address,address,uint256,bytes,bytes)", +"2401db10": "sendFunding(address,uint256)", +"24021127": "_setOriginationFee(uint256)", +"2402598c": "BNSToken()", +"24026bfb": "getMarketOrderTrust(uint256)", +"2402ae57": "YudizCoin()", +"24032866": "checkExecutionAuthorization(address,uint256)", +"24038339": "updatePriceAndDenominator(uint256,uint256)", +"24038d2e": "purchaseArmy(uint256)", +"2404608f": "getSignatures(string)", +"24052927": "velReduction(int256)", +"240557b8": "cleanTokensAmount(address,uint256)", +"2405b1a3": "SwissBit(uint256)", +"2405d03e": "refundTokensPurchase(address,uint256)", +"2405e3c6": "initial_supply()", +"24064617": "getMom(address)", +"2406cedb": "setPackageOwner(bytes32,address)", +"2406e626": "createPool(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"2406e9fa": "playRandom(address)", +"240705eb": "withdrawWithFee(address,uint256,uint256)", +"24070feb": "_create(address,uint8,uint8)", +"240860f1": "setHasCommissionerAuction(uint32)", +"2408771e": "validateInvestmentGroups(address[])", +"240961db": "showPoolOwner(uint256)", +"2409dfa2": "drawback()", +"240ad8bd": "applyAsProvider(string,string,string,string)", +"240bd9e6": "DcorpProxyCreated(address,address)", +"240c2709": "toReserved(address,uint256)", +"240cf1fa": "changeOwnerSigned(address,uint8,bytes32,bytes32,address)", +"240dfd6e": "stopEnrollment()", +"240e07e0": "impl_apply4Redeem(address,uint256)", +"240e0b2e": "JinKuangLian()", +"240ecad5": "transferViaProxy(address,address,uint256)", +"24108475": "vote(uint256,string)", +"2411ca69": "startPrivatesaleDate()", +"2411e6a3": "NonEmissiveToken(address,string,uint8,string,string,uint256)", +"2412bdb8": "exchange(address)", +"2413372d": "TestETCCoin()", +"24141f14": "CRYPTOHEDGECoin(uint256,string,string)", +"2414b63e": "CasinoBank(uint256,address)", +"2414e134": "NEWCICO(address)", +"24153b73": "Tosh(uint256,string,uint8,string)", +"241673e8": "withdrawTokenToFounders()", +"24167745": "ShamelessUETRipoff()", +"2417f31d": "maxPresaleTokens()", +"2419217e": "teamAddresses(uint256)", +"2419ef4d": "Coverage()", +"241a2305": "MultiTransfer(address,address[],uint256[])", +"241b701f": "openPot()", +"241b88b6": "threeMillionTwoHundredThousand()", +"241d1108": "nextDerivativeToken()", +"241d2c76": "getCount(address,string)", +"241d7aea": "BeautyCoinToken()", +"241de9e9": "proxy(address,address,uint256,uint256)", +"241e0fa0": "updateBytes20inBytes(bytes,uint256,bytes20)", +"241ea03c": "Pregnant(address,uint256,uint256,uint256)", +"241f675d": "CMO_SHARE()", +"24206c2e": "updateTokenAddress(address,address)", +"2420703e": "transfer_tokens_through_proxy_to_contract(address,address,uint256)", +"2421101f": "returnAddress(address)", +"2422224e": "signatures(bytes32)", +"24223a3c": "allowanceItem(uint256,uint256,uint256,address)", +"2422d991": "getADR()", +"2423a088": "UNKNOWN_TYPE()", +"24241ebc": "challengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"2424276c": "freezeMultiAccounts(address[],bool)", +"24248168": "getBracketScore(bytes8,bytes8,uint64)", +"24250852": "mintToPublic(address,string)", +"2425ce3e": "upgradeTank(uint256,uint8)", +"2426169a": "_getSwapType(bytes32)", +"24263f77": "mintICOTokens(address,uint256)", +"24265000": "canCollect(uint16,uint16,uint8)", +"24265408": "FaucetManager(address,address[])", +"242654a2": "transferEnable()", +"242655d4": "prefixedEncode(address)", +"24270d1e": "get_arbits_max_contribution(address)", +"24272479": "_finishBet(uint256)", +"24280cc4": "createPuppySaleAuction(uint256,uint256,uint256,uint256)", +"24285ade": "AlpineMegalith(uint256,string,uint8,string)", +"24294b1f": "startFirstRound()", +"2429b755": "isPrivateSaleRunning()", +"2429d61a": "isOnSale(uint32,uint64)", +"2429ee2a": "isBountyPayStage()", +"242a0087": "getParents(uint256)", +"242a60b5": "withdrawValue(bool)", +"242a7450": "validateTenant(address,bytes32,uint256)", +"242aa460": "presaleInvestors(address)", +"242aeac1": "DiscoverCoin()", +"242b0a73": "rewardPayedOf(address)", +"242be01a": "_setAppIfNew(bytes32,bytes32,address)", +"242c721e": "testSetOrganiserUsingDeployedContract()", +"242c9ce9": "_burnFrom(address,address,uint256)", +"242ce07b": "frozensTotal(address)", +"242d1259": "WeiWeiToken(address,uint256)", +"242d7dba": "totalAmountRaised()", +"242d9f69": "getOraclizeWinnerGasFee()", +"242db433": "getMarketManagerAddress()", +"242ddf37": "NewBook(bytes32,address,uint256)", +"242de145": "TokenCreationContract()", +"242ed69f": "setActiveTranscoders()", +"242fc36e": "cashback()", +"243056d6": "writeMerchandises(uint256,string)", +"2430731f": "cancelRecurringBillingInternal(uint256)", +"2430d881": "getLastAction(address)", +"2431676c": "getTotalWinsCount()", +"24318b5c": "numberOfHosting(address)", +"2431f164": "process_payment()", +"243222c0": "processFailedVerification(bytes32)", +"2432282d": "getLoanCountForAddress(address)", +"24323110": "McFlyCrowd(uint256,uint256,address,address,address,address,address,address,address,address,address,address,address,address,address)", +"2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", +"2433c978": "setupOwners(address[])", +"2433f617": "getIIPTotalSupply()", +"24349551": "deleteContract(uint256,uint8[],bytes32[],bytes32[])", +"2434cf10": "UseBySoftware(address)", +"2434ec3e": "declareLost(address,bytes32)", +"243527a2": "addID(address,bytes32)", +"24355ea6": "isA(address)", +"24359879": "ownerAt(uint256)", +"24361cec": "picops_block()", +"2436219c": "doubleEntryPrice()", +"243669ad": "totalOwners()", +"2436b1d2": "NUM_COUNTRIES()", +"2436d4e3": "TwoStandardToken(uint256,string,uint8,string)", +"2436d5f8": "StorageBase(address)", +"2437160f": "TFTOKEN()", +"24372fa3": "SignCurrentVersion(string)", +"24378482": "bnOf(bytes32,bytes32)", +"2437e1c2": "setPresaleParams(uint256,uint32,uint32,uint256,uint256,uint256)", +"24386b3e": "testMultitransfer3()", +"243870bd": "createChannel(string,bytes,address,address,address[],uint256[],address,uint32[])", +"2438b674": "window2TokenExchangeRate()", +"2438db59": "setServices(address,address)", +"243a28eb": "returnedWei(address,uint256)", +"243af82d": "stageBuys(address)", +"243b22cf": "setGameResult(uint256)", +"243b2a39": "createDispute(bytes32,address,address,bytes32)", +"243c33a1": "testCreateShortId()", +"243d230c": "dateTo()", +"243d3827": "getRewardInfo(uint256)", +"243d51b4": "betD()", +"243dc8da": "getFoo()", +"243e280b": "publish(string)", +"243eb89f": "endIcoMainSale()", +"243f6b58": "removeKYC(address)", +"243f6e0c": "change_active(uint256)", +"243feeb0": "ADDR_TKG_ASSOCIATION()", +"24415953": "lengthEqual(int256[],uint256,string)", +"244159af": "getPriceOneToken()", +"24417f39": "getCostForHealth(uint8)", +"24425cbf": "TEST_CONTRIBUTION()", +"24429e34": "OliveGardensResort()", +"2442cfec": "putBtoWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"2442e1cb": "getMilestone(uint256)", +"24434852": "buyOnBehalfWithCustomerId(address,uint128)", +"2443a30e": "ChangeInsurerOperationEvent(address,uint256)", +"2443f0ae": "derivePayoutDistributionHash(uint256[],bool)", +"24444749": "NUM_POTATOES()", +"2444d352": "setWhitelistOff()", +"24452f44": "tryBuy(uint256,uint256)", +"24453ed6": "getCustomerTxAmountMCW(address,bytes32)", +"24454fc4": "getTranscoderEarningsPoolForRound(address,uint256)", +"24455e7d": "createNetwork(string,string,uint256,uint256,uint256,uint256,uint8)", +"24457036": "LockChainFundDeposit()", +"2445caf1": "ERC20Token(uint256,string,string,uint8)", +"24463cbe": "AddressDailyReward(address)", +"2446e1de": "icoClose()", +"2447fe10": "initBridge()", +"2448fe2f": "redTeamSupply()", +"24496026": "removeQuoter(address)", +"244967b3": "start_game()", +"24497829": "ethFundAddress()", +"2449dd55": "sendCommission()", +"244b252a": "SaturnToken()", +"244b34c5": "Stage2Deadline()", +"244bfa6b": "buyCelebrity(uint256)", +"244c23ee": "Token(uint256,string,uint8,string)", +"244c757a": "getCurrentIcoNumber()", +"244c91d4": "setMaxIssuers(uint256)", +"244c96a1": "compareOrders(uint128,uint128,uint128,uint128)", +"244cb924": "EnableSelling(uint256)", +"244cee6d": "helloWorldWeb()", +"244d04f5": "finalizeTokensale()", +"244dad09": "createdUser(bytes32)", +"244ded7a": "ChangeOwnership(address)", +"244e0c87": "balanceOF(address)", +"244eab9e": "lovelock_price()", +"244eba55": "frozenDaysForBounty()", +"244f4894": "getWithdrawed(address)", +"244f828a": "SetHFee(uint16)", +"244fcd03": "removeRelease(bytes32,string)", +"24500e05": "tokenAdvisorPartners()", +"24503ab0": "setDefaultTransferGas(uint256)", +"24506e2a": "KoalaChain()", +"24516000": "getPOOL_edit_26()", +"24519a6a": "takeFee(address,address,uint256,uint256)", +"2451a899": "isSuccess(uint256)", +"2451b3d8": "accessProvider()", +"24528499": "_getSettingVariables()", +"24534192": "addMutagenFight(uint256,uint256)", +"2453759a": "setNoDataSubcontract(address,uint256,uint256)", +"2453ffa8": "orderCount()", +"24541f78": "getTransferProxy(uint32)", +"24545f82": "LULUToken()", +"2454d1f0": "incFightWin(uint256)", +"24562747": "tokensPerETH()", +"245678d6": "MINBET()", +"24571783": "NESTFAME()", +"2457d765": "CHSC()", +"2458d472": "getCurrentStage(uint256)", +"2458d606": "exchange(address,uint256,string,uint256)", +"2458f2a8": "swarmTree(uint256)", +"2458f679": "instContWallet()", +"245a03ec": "scheduleSetIt(uint256,uint256)", +"245a30ec": "setDataAuction(address)", +"245a367c": "GetParticipant(address,address)", +"245a6f74": "isProxyLegit(address)", +"245a810b": "addMetaData(bytes32,bytes32,bytes32,bytes32[],bytes32[])", +"245ae4a0": "slashUsername(bytes,uint256)", +"245b565d": "ballotEncryptionSeckey()", +"245ba519": "addVerifier(address,address)", +"245ccdb7": "setFeePrice(uint256)", +"245d1314": "signUserChange(address)", +"245d5556": "_deleteEntry(bytes32)", +"245e22de": "transferDirectly(address,address,uint256)", +"245e70f0": "_commitBallot(bytes32,bytes32,bytes32,address,uint64)", +"245f57a9": "asyncSendSilently(address,uint256)", +"245fa2ab": "newBankManager(address)", +"24600157": "CUBES()", +"2460053e": "LegionToken(uint256,string,string)", +"24600fc3": "withdrawFunds()", +"2460f09d": "MarketContract(string,address,address,uint256[5])", +"24612b5d": "GenbbyToken()", +"24619da7": "RechargeMain(address)", +"24627547": "vestingFunc(uint256,uint256,uint256,uint256,uint256,uint256)", +"2462a0d5": "funcFromC1()", +"2462f6f1": "setFadeoutStarts(address,uint32)", +"2463de5a": "getPastWinnerTimestamps()", +"24642510": "rechallengePossible()", +"24645254": "getBalance(uint8,address)", +"24645c5a": "totalTokenSale()", +"24646ce4": "getBuySellSum()", +"2464a69f": "_computePublisherCut(uint128)", +"24652ba2": "PeerBudsToken()", +"24664106": "mintRep(int256,address,uint256)", +"24667568": "ORGANIC(uint256,string,uint8,string)", +"24675116": "PK(uint8,bytes32)", +"24676ae3": "SmzdmToken()", +"246982c4": "getPerson(uint256)", +"2469a846": "terminateCrowdSale()", +"2469c14e": "setState(address,uint256)", +"246a3234": "getEthChfPrice()", +"246a44f8": "isNeedCloseCurrentGame()", +"246c01cd": "tryUpgrade(uint32,uint8)", +"246c02e6": "check_depth(uint16)", +"246cbacc": "test_twoInvalidEqAddress()", +"246d4098": "openToThePublic()", +"246d41a9": "incrementTotalVoters()", +"246eb968": "deleteUri(uint256)", +"246f02bb": "tickets_bought(string,uint256)", +"246f0ca4": "KuaiKanToken(uint256,string,uint8,string)", +"246f1e17": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint8)", +"246f8b96": "removeOwner()", +"247121e3": "MakeAdministrator(address)", +"2471fa1c": "_building(uint256)", +"24724b5b": "changeAmisWallet(address)", +"24743d40": "f1(bytes32)", +"24749b59": "bonus(uint256)", +"2474a21c": "collectedEther()", +"2474e236": "TOKENS_MAXIMUM_SUPPLY()", +"24752467": "getParticipantPublicKey(bytes32)", +"247534cf": "WrapperLock(address,string,string,uint256,address,bool)", +"2475a9b3": "UTXORedeemed(bytes32,uint8,uint256,bytes,bytes,uint8,bytes32,bytes32,address,uint256)", +"24788429": "removeExecutor(address)", +"24788ed9": "ledgerContractAddr()", +"247956f1": "withdrawEtherInBatch(address[],uint256[])", +"24797d1b": "decreaseThreshold(uint256)", +"247ab51f": "markAsProcessed(uint256)", +"247aebbb": "tokensup(uint256)", +"247b127d": "MiIToken(uint256,string,uint8,string)", +"247b188b": "icoTotalSupply()", +"247b3bd6": "BitCronus()", +"247baa3e": "ALH2()", +"247bb39c": "privateOfferingCap()", +"247bb432": "test_addAndRemovePermissions()", +"247bbed7": "borrowTokenFromEscrow(uint256,uint256,address,bool)", +"247c6c70": "priceLC()", +"247cf1aa": "lengthNotEqual(bytes32[],uint256,string)", +"247cff43": "freezingManager()", +"247ecab5": "bonusDrop(address,uint256)", +"24804cef": "Deed()", +"24806d4a": "getBounsInRound(uint256)", +"2480d9e6": "saleAirdrop(address,uint256)", +"2481325a": "ExtremeCoin()", +"2481851a": "finalizeName(address,string)", +"24819384": "btycaddmoney(address,uint256)", +"2481c51c": "includesGblock(bytes32)", +"2481f92c": "setClockAuction(address,uint256)", +"2483761f": "buy1ktickets()", +"24841bbd": "interfaceBurnTokens(address,uint256)", +"24845131": "proclaimDeath()", +"2484a023": "verifyTetherCurrency(address,uint256,string)", +"24850e10": "releaseFunds(bool)", +"24851914": "isTeam(address)", +"2485484d": "clearGenVaultAndMask(address,uint256,uint256,uint256)", +"24854bd8": "updateThirdExhangeRate(uint256)", +"248582b0": "receivePaymentForGoodsSoldEarly()", +"24860443": "toBytes2(bytes,bytes,uint256)", +"24863354": "saleOverReachMaxETH()", +"24876434": "addPriceTier(uint256)", +"24880bcb": "getTierUnsoldTokens(uint256)", +"24884fc2": "startPeTime()", +"24887c04": "SieChain()", +"24888154": "Buy(uint64)", +"24888b4a": "isVoterLocked(address)", +"24889e37": "removeAmountForAddresses(uint256[],address[])", +"2488fd55": "countPlayersInPosition()", +"24896a47": "signPA(uint32)", +"248b0dba": "toBytes16(bytes,bytes,uint256)", +"248baabd": "FUND_ADDR()", +"248c4439": "setFunctionOnePrice(uint256)", +"248c6380": "_tokenBankrollBuyIn(uint8)", +"248d14eb": "allowPriceUpdate()", +"248dd407": "Transfer(uint256)", +"248e150a": "getFirstAuctionsExtendableStartDate()", +"248e1993": "setMinTarget(uint256)", +"248e4dd4": "pank13()", +"248e86e6": "ProjectToken(uint256,string,uint8,string)", +"248ec326": "DAILY_LIMIT()", +"248fcccc": "CRSAccount()", +"24900d7c": "initializeAddresses(address,address,address,address,address)", +"24902e24": "LOG2_E()", +"2490be24": "exchangeEurToEth(uint256)", +"2490e13f": "editPieceData(uint256,string,string)", +"2490e16e": "getDirectBoughtTokens()", +"24924bf7": "maxParticipants()", +"249292b9": "testUnlockedDay()", +"2493097b": "finalizeDestruction()", +"24932186": "enterOrder(uint128)", +"24937124": "fetchPaidOrdersForMerchant()", +"2493a2f2": "setBonusTokenRateLevelOne(uint256)", +"2493d006": "openWeek()", +"2493d669": "AllowanceGranted(address,uint256)", +"24941147": "cancelProject(uint256)", +"24943c7d": "resolveDispute(bytes16,address,address,uint256,uint16,uint8,bytes32,bytes32,uint8)", +"2494aef9": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE2()", +"2494e267": "CXLExchangeRate()", +"24953eaa": "removeAddressesFromWhitelist(address[])", +"249559ad": "computeVoteOutcome(uint256)", +"249586f2": "editPayoutSetting(uint8,uint16)", +"2495c0ce": "stopVote()", +"24968a70": "getHomePost(uint256)", +"2496a431": "robPantry(address,uint256)", +"2496b796": "sellMyTokensElixir()", +"249830d8": "setUnclaimedPlotPrice(uint256)", +"24992680": "SelfKeyCrowdsale(uint64,uint64,uint256)", +"24999c9c": "bonusSignalValue()", +"2499a533": "Purchase(address,uint256)", +"249a1120": "licenseTermsMaxCostPerSec(bytes32,bytes32)", +"249a5438": "getInvestorsAndBalances(address)", +"249aa292": "preIcoPrice()", +"249b4d0b": "removeTrustedIssuer(address,bytes)", +"249b4d4f": "transferContractUser(address)", +"249b7c19": "presaleEndTime()", +"249bc291": "transferMintMaster(address)", +"249cb3fa": "canImplementInterfaceForAddress(bytes32,address)", +"249eae4d": "addInvestors(address[],uint256[])", +"249f1f22": "insertNodeSorted(uint256,address)", +"249f77ef": "CancelSimpleOffer(uint256)", +"249f7aa0": "exchangeRateChangesBlock()", +"249ff838": "getAddressByNames(bytes32[])", +"24a039c7": "CBToken(address,uint256)", +"24a084df": "sendValue(address,uint256)", +"24a12edf": "getAuctionIdForUserAndIdx(address,uint256)", +"24a1871e": "LOL2()", +"24a1c1e0": "addCertificateAndBind2Wallet(address,uint256,bytes32,bytes32)", +"24a1cd1e": "currentCoefficient()", +"24a20a25": "feed10(uint256)", +"24a23361": "getTeamAttribute(uint8,uint8,uint8,uint32[11])", +"24a27bd2": "tokensForAdvisory()", +"24a30e46": "m_claimingIsActive()", +"24a38383": "WhitelistedSmallCap(address,uint256)", +"24a3b013": "attachToToken(address)", +"24a434eb": "openCarousel()", +"24a43c51": "releaseMultiple(address[])", +"24a4411d": "DecoderTester(address,address,address,address,uint256)", +"24a47aeb": "merge(uint256)", +"24a4aff6": "adaCoin()", +"24a684e1": "get_perms(bytes32)", +"24a69051": "allowClaim(address)", +"24a6a409": "MINTY()", +"24a6ab0c": "freeSupply()", +"24a73e5f": "decreaseAllowance(address,uint256,bool)", +"24a779ca": "PELOMemberMap(address)", +"24a7d277": "removeAddressFromBlacklist(address,address)", +"24a80b31": "BusinessUnion(uint256,string,uint8,string)", +"24a852c6": "unset(bytes)", +"24a8e11d": "isAuthorized(address,address,bytes32)", +"24a9d3d9": "callAndReward(string,string,uint256)", +"24a9d853": "feeBps()", +"24aa62fe": "setObjectionPercent(uint256)", +"24aa6dd1": "ProxyManagementContract()", +"24aa93b9": "getVestedAdvisorTokens()", +"24abfc02": "getTournamentThresholdFee()", +"24ac4df1": "cancelNewOwnersCountRequest()", +"24ac4e65": "getServerUserNumber(address)", +"24accfa3": "refundMoney(uint256)", +"24acec2b": "PayeeWithdrawInterest(address,uint256,uint256)", +"24ad35e1": "PisangChain()", +"24addfc0": "swapMe()", +"24ae84cc": "participateCrowdsaleInvestor(address)", +"24aee933": "usePower(uint256,uint8,uint8,uint8,uint8[176])", +"24af4cdb": "setNewUserState(string,bytes,string)", +"24aff74d": "Debit(address,address)", +"24b04905": "gift()", +"24b06a96": "getAllElectionsOfOrganiser(address,address)", +"24b07165": "get_property_facility(uint256)", +"24b0ff0f": "approveTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"24b1905b": "sendFirstBatch(address[],uint256[])", +"24b19da5": "TokenDistribution(address)", +"24b1a2fa": "disableArbiter(address)", +"24b1aa5c": "domain_build(address,uint16,uint8,uint8)", +"24b1babf": "claimEarnings(uint256)", +"24b1bfdf": "resetToken()", +"24b27fc8": "CoquiToken()", +"24b2c2f6": "GYUToken()", +"24b33f5d": "_auction(uint256,address)", +"24b35ef2": "mintTokens(address,uint256,uint8,bytes32)", +"24b3940a": "sayGoodBye()", +"24b492d7": "SetInitData(uint256,uint256,uint256,uint256,uint256)", +"24b4cee0": "openBatch(uint256)", +"24b4ec3d": "buyOwn(address,uint256)", +"24b4fc8e": "closeChannelWithoutReceipt()", +"24b508a3": "listByGroup(string)", +"24b50e43": "getMsgHash(address)", +"24b51369": "tgrSettingsPartFounders()", +"24b570a9": "totalPot()", +"24b5c134": "numCities()", +"24b5efa6": "RewardClaimed(uint256,address,uint256)", +"24b6b8c0": "_safeTransfer(address,address,uint256,bytes)", +"24b6f7d3": "TestBathTx(uint256,uint8,string,string)", +"24b72667": "buyprices()", +"24b77f05": "acceptCounterStack(bytes32,bytes32)", +"24b79a1c": "ICO_PHASE3_BONUS_PERCENTAGE()", +"24b82a76": "voterReward(address,bytes32,uint256)", +"24b89fa7": "unlockStepLong()", +"24b8fbf6": "register(address,bytes)", +"24b94ac6": "atto()", +"24ba1a46": "isSpawnProxy(uint32,address)", +"24ba506d": "getNumberOfTransactions()", +"24baeb12": "initCrowdsaleToken(bytes32,bytes32,uint256)", +"24bb49d6": "balanceMinusFeesOutstanding()", +"24bb7734": "mainSaleDuration()", +"24bb7c26": "pausedPublic()", +"24bbd049": "mintOpen()", +"24bc4e92": "QueenXChain()", +"24bcdfbd": "tradeFee()", +"24bce60c": "freeze(address,uint256)", +"24bdaf95": "about(uint256)", +"24bdf96a": "getUserRefBalance(address)", +"24c034a7": "ERC721Auction(address)", +"24c05c72": "requestLoans(uint256)", +"24c06d7d": "buyBreeding(uint256,uint256,uint256,bool)", +"24c0db84": "ico1receivedTotal()", +"24c12bf6": "code()", +"24c1f9c7": "stage_3_add()", +"24c2362b": "buyCrySolObject(uint256)", +"24c30182": "BleedFomo()", +"24c31975": "increaseJackpot(uint256,uint256,uint256)", +"24c33d33": "round_(uint256)", +"24c37507": "getMinBet()", +"24c4c9e4": "getCurrentPRETDEBonus()", +"24c4e3b9": "getPatientHealthData(address)", +"24c55380": "TicketPurchase(uint256,address,uint256)", +"24c65927": "createNewAuction(string,uint256)", +"24c65f35": "updateRefundGas()", +"24c6ef60": "SafeTokenTransfer()", +"24c74c1d": "LogClaim(address,uint256,uint256,uint256)", +"24c74c78": "certify(bytes32)", +"24c91c1b": "isDataResponseValid(address,address,address,string,bytes)", +"24c93343": "error(string)", +"24c9bf5e": "Prizes()", +"24ca77e5": "teamNum()", +"24ca984e": "addRouter(address)", +"24caf5e1": "sale_address()", +"24cb015a": "_ONE()", +"24cb57dc": "whitelistEntries(uint256,uint256)", +"24cc35a6": "_isTeam()", +"24cd2ae4": "beneficiaryUserIds(uint256)", +"24ce2562": "updateGameSpecifics(uint256,uint256,uint256,uint256)", +"24ce2917": "create(address,uint256,uint256,address,address)", +"24ce9d27": "sellOrder(address,uint256,uint256)", +"24cee3d6": "Change(address,address,address,uint256,uint256)", +"24d0cc0f": "getPayouts(address)", +"24d16a4d": "makeUnderlier(bytes32,address,int256)", +"24d1c28b": "changeVoteRules(uint256)", +"24d29cfb": "_removeSigner(address)", +"24d3048d": "cancelNode(string)", +"24d30d54": "enableMerge(bool)", +"24d3eaf3": "bonusEndTime333()", +"24d427a9": "print(address)", +"24d4e90a": "ln(uint256)", +"24d5336a": "deicmals()", +"24d6169c": "startLockPeriod()", +"24d6d601": "voteFor(address,uint256)", +"24d70dea": "hasEntered(address)", +"24d7378a": "m_totalTokens()", +"24d7806c": "isAdmin(address)", +"24d86f00": "decreaseStake(uint256,uint256)", +"24d89171": "changeNeedFightToAdult(uint256)", +"24d97a4a": "killme()", +"24da48a3": "updateMaxAllocation(uint256)", +"24da569a": "AGToken()", +"24daddc5": "setRestricted(bool)", +"24db1f50": "masFreezedTokens(address[],uint256[],uint256[])", +"24dbb91d": "BusinessCard(string,uint256,string,address)", +"24dc793f": "getKydy(uint256)", +"24dcd0ef": "transferFounders(address,uint256)", +"24dd24ed": "allowingClaimBTC()", +"24ddb58c": "performStepVerification(uint256,bytes,bytes,bytes)", +"24de30f1": "distributeEarlyBackerTokens(address,uint256)", +"24de3c0e": "gwei()", +"24de908d": "wins()", +"24df2d5b": "Filmpass()", +"24df75d9": "withdrawFromTicker(uint256)", +"24dfc9d7": "getBytes32(uint256)", +"24e04871": "horseForSale(uint256,uint256)", +"24e0be2e": "EVenToken()", +"24e1c3f3": "PRCT_ETH_OP()", +"24e1fa3a": "FIRST_WITHDRAW_RATE()", +"24e21cde": "sendTradeOffer(address,uint256[],uint256[])", +"24e2ca92": "withdrawSharedExpense(uint256,address)", +"24e2cda7": "TestOrder2(address)", +"24e2dbd3": "linkRecipientName(bytes32)", +"24e34476": "myStoredDividends()", +"24e5355e": "JerryToken()", +"24e581be": "transferAllToOwner()", +"24e5bdb9": "getEventsCount(string)", +"24e5eeaa": "slogan()", +"24e65e14": "Addr6()", +"24e7a38a": "setGeneScienceAddress(address)", +"24e7c824": "performTransfers(address[],uint256[])", +"24e846c7": "confirmedSaleEther()", +"24e8b3ec": "getClaimableRewards(bytes32)", +"24e998c3": "Ethershift()", +"24e9dad8": "_safeCall(address,uint256)", +"24ea8d1a": "Fortnitecoin()", +"24eaf1ea": "SendBadge(address,address,uint256)", +"24ec6f66": "cancelContest(uint32)", +"24ec7590": "minFee()", +"24ed1486": "getPeriodAliasFor(uint256,address)", +"24ed2d8b": "initOwnership(address,address)", +"24ed3dc0": "PolyAnalytixProjectToken()", +"24ed3e78": "BACKUP_THREE()", +"24eda713": "teamTwoWin()", +"24edc2a1": "WINT()", +"24ee0097": "myMethod(uint256,string)", +"24ee62ee": "secondWavePrice()", +"24ee9be4": "getVirtualBalance(address,address)", +"24eebc47": "SWAPCOINZ()", +"24efe4c3": "_addToClaimList(address,uint256)", +"24f07356": "batchIncreaseApproval(address[],uint256[])", +"24f073ad": "getTimeOfLastBid()", +"24f12f1e": "ProfitSharingMock(address)", +"24f159c2": "extensions()", +"24f1ec37": "multiAccessRecipient()", +"24f2cc02": "preIcoLimit()", +"24f32f82": "changeHardCap(uint256)", +"24f35549": "setup(uint256[])", +"24f3c639": "buyApprenticeChest(uint256)", +"24f481c8": "oracleItQuery(string,string,string,uint256,uint256)", +"24f48bc5": "setWatcher(address)", +"24f5445b": "transferFundToAccount()", +"24f55e29": "hasCompany(string)", +"24f618b6": "GetDOTRevokableHash(bytes32,uint32)", +"24f65ee7": "getTokenDecimals()", +"24f690ac": "cryptowars()", +"24f696fd": "LogFundTransfer(address,address,uint256,uint8)", +"24f731d5": "PlaceBet(uint256,bytes)", +"24f743dc": "freeSpaceOf(address)", +"24f74697": "callbackGasLimit()", +"24f7a980": "WaitStarted(uint256)", +"24f82526": "closeLong()", +"24f8fe9c": "EdgelessCasino(address,address,uint256,uint256)", +"24f91d83": "init(address,address,address,string)", +"24f9702e": "allocateArrayOfTokens(uint256,address[])", +"24f99ba4": "ChiMarket()", +"24fa6f3b": "requiredBlocksElapsedForVictory()", +"24fabb87": "setImageOwner(uint256,address)", +"24fad665": "enableMasterTransfers()", +"24fb563f": "PlayerTickets(address,uint256,uint256)", +"24fc253e": "eraIndex()", +"24fc65ed": "getId(uint256,uint256)", +"24fc70ff": "setBonusOn(bool)", +"24fcb80c": "parseAddress(bytes32)", +"24fcbc1c": "withdrowErc20(address,address,uint256)", +"24fd0a5c": "isAvailableForTransfer(uint64)", +"24fd2be1": "NationalCoin()", +"24fd5585": "fixedExp(uint256,uint8)", +"24fd6ec9": "zeroBonus()", +"24fe722e": "requestUnpause()", +"24fe73fe": "isRegularOrBoardMember(address)", +"24fe8e68": "MyToken(uint256,uint256,string,string,uint256,uint256)", +"24fef683": "OwnershipGranted(address)", +"24ff026b": "getScheduleDetails(bytes32)", +"24ff065a": "addressOk(address)", +"24ffca71": "visitCost(uint8)", +"24ffea1a": "presaleToken()", +"25005498": "updateEntityNew(uint256,bool)", +"2500ec4a": "getDHand(uint32)", +"25010816": "get_length(uint256,uint256)", +"25012699": "KERNEL_APP()", +"25017e10": "transferSubscription(bytes32,address)", +"2501faa5": "triggerRecoveryAddressChangeFor(uint256,address)", +"2502c19c": "setRBInformationStoreAddress(address)", +"250312ce": "bleachAppearance(uint128,uint128)", +"2503dce8": "updatePublisherFee(address,uint16,address)", +"25052d02": "getMyTokensReturns()", +"250537fc": "_createCollectible(bytes32,address)", +"250540cf": "calcMaxWithdraw(address)", +"25059052": "WhitelistedLargeCap(address,uint256)", +"2505c445": "finalizedEthFundAddress()", +"2505f349": "setTokenMinter(uint256,address)", +"25062287": "_ownerDist()", +"25068a28": "freezeAllowance(address)", +"2506bfe7": "validateBySymbol(string)", +"25074d73": "Registered(string,uint256,address,string)", +"25084b04": "manualOverrideEditionHighestBidder(uint256,address)", +"25096f28": "KryptopyTokenMock()", +"2509f1b9": "SLP()", +"250a1c1d": "Validate(string,string,string,bool)", +"250a8dc2": "isAccountAddress(address)", +"250a93cb": "POEXToken(address,address)", +"250ac096": "BuyRoseCoin()", +"250b1154": "tokenRate3()", +"250b35e8": "BidSaved()", +"250bc504": "Ambassador()", +"250c95fe": "setMaxBuy(uint256,uint256)", +"250ccce4": "getOutStreamOf(address)", +"250d5bc8": "LineToken3()", +"250de298": "EthlanceSearchJobs(address)", +"250dea06": "modifyBalance(address,uint256)", +"250e7d61": "CROWDSALE_CLOSING_TIME()", +"250e816b": "getPeriodSealedPurchaseOrderFor(uint256,address)", +"250e87c9": "pyramid()", +"250ef961": "checkCorrectPurchase()", +"250fe144": "setInvoice(uint256,bool,string,string,string,string)", +"25100b4d": "placeBet(bytes32,string)", +"25102f27": "PRESALE_START_TIME()", +"25107a47": "TransactionRefundedAfterEscalation(uint256)", +"25112004": "XCNTToken()", +"25112743": "getSaleContractStartBlock(address)", +"251139f6": "setPrevContract(address)", +"25119b5f": "channelManagerByToken(address)", +"2511b182": "minBuyableAmount()", +"25128b02": "CampaignResumed(uint256)", +"25137f46": "setSalesPipeAllowance(address,uint256)", +"251481c8": "testDecodeTransfer(bytes)", +"2514a6b4": "withdrawDividends(uint256)", +"251506fa": "SendFart(string)", +"25155eef": "JupiterToken()", +"25161e70": "HKDHToken(uint256,string,string)", +"2516a18f": "setMintableToken(address)", +"2516af82": "createLottery(bytes32,uint256,uint256)", +"2516c6c6": "min_tokens()", +"2516d738": "secureAddOrderFunds(address,bool,uint128,uint128)", +"25174f0e": "getOwnerIndex(address)", +"25182e79": "winAmount4()", +"25185d3e": "freeBalance()", +"25192fca": "issuanceDraft(address)", +"2519a378": "finalizeReplaceTrueUSD()", +"251a8096": "total_wins_wei()", +"251aaf67": "dividendsPaidPerShare()", +"251b5f8e": "team_fund()", +"251c1aa3": "unlockTime()", +"251c7182": "seed_multiplier()", +"251d3589": "setUseEIP712(bool)", +"251d8ffb": "setNav(uint256)", +"251e3843": "_preValidation(address,uint256,uint256,uint256,uint256)", +"251e3d7d": "registerMember(address,bytes,uint256)", +"251ed995": "walletSetWallet(address)", +"251fa3b1": "testFailRetractLatestRevisionNotOwner()", +"251fbe37": "get_training_index()", +"25200718": "requestAudit(string,uint256)", +"2520573f": "getProposalMetaHash(bytes32)", +"25209260": "PrepareRoll(uint256)", +"2520bf04": "shuffle()", +"2520d2e1": "readvalidrollsXaddr(address)", +"25221a4f": "addToBlacklistMulti(address[])", +"25223bd4": "donor()", +"25233782": "magicnumsig()", +"252348dc": "ratePerEth()", +"2524380f": "buy_Exchg_BkgChk(address,uint256,uint256,address,uint256)", +"25245b26": "sendEth(address[],uint256[])", +"25248587": "indexview(address)", +"252498a2": "setUrl(string)", +"25250519": "addGlobalAdmin(address,address)", +"2525aa78": "mintStart5()", +"2525f5c1": "cancelBid(address,bytes32)", +"25266f96": "isNewPlayerInBattle(string,address)", +"2526d960": "clawback()", +"2527331b": "transferToSimpleService(address,uint32,uint256,uint256,uint256)", +"252733f0": "registrantsPaid()", +"252786e4": "WatchBlockSizeInEther()", +"25280163": "RedFundCrowdsale(uint256,uint256,uint256,address,uint256)", +"25287c0e": "bonusesGiven()", +"2529b907": "setVaultDeposit(uint256)", +"2529d1a3": "fused()", +"252ba7a0": "userDeployCount(address)", +"252bb9c3": "PHOENIX_CORSAIR_EXTRACTION_BASE()", +"252cb4fe": "registerProposal(uint256,uint256[])", +"252ccac3": "getTotalActiveBets()", +"252cde48": "checkPrizesView(address)", +"252cedc3": "sendERC20Tweet(uint256,string,string)", +"252d1578": "init(address[],uint256,uint256,uint256,uint256)", +"252d7eb3": "getCurrentPayoutIndex()", +"252dbc36": "setTokenPoolReward(uint256)", +"252e40b1": "secondsPerYear()", +"252edb76": "setUInt8(bytes32,bytes32,uint8)", +"252f14ba": "_addArbiter(address)", +"252f34a7": "loserOne()", +"252f4977": "destroyTokensInBntyTokenContract(address,uint256)", +"252fb38d": "bytes32string(bytes32)", +"253089b5": "smxTeamAddress()", +"2530c905": "rand(uint256)", +"25316ff5": "getBetUint(uint8,int8)", +"2531a36a": "getDesignatedReportDisputeDueTimestamp()", +"25327b75": "latestErc20TxRequest()", +"2533bb9d": "dataCentreAddr()", +"2533ff94": "LogPersonUpdate(address,uint256,uint256,string)", +"2534076e": "cancelRemoveOwnerRequest()", +"253459e3": "feesSeperateFromBalanceApproximately()", +"253515d5": "accruedBuyout(address)", +"2535b150": "cryptoJingles()", +"2535dd53": "getAvailableWithdrawInvestmentsForBeneficiary()", +"2535f762": "transferWithData(address,uint256,bytes)", +"25361060": "getReferralStatus(address)", +"2536d7f1": "endOfCrowdsale()", +"25384770": "reserveAllocated()", +"25387eed": "tallyTheVotes()", +"253abf4a": "processSalesForAllBuyers(uint256)", +"253bc579": "companyClaimed()", +"253bd7b7": "check(address,bytes32)", +"253c8bd4": "change_owner(address)", +"253caf94": "setTasksAddress(address)", +"253d8195": "SavingsBank()", +"253e3447": "numberOfSpritesOwnedByUser(address)", +"253e7fdf": "becomePacifistmaster()", +"253ebd92": "isTierJoined(address)", +"253f029c": "performUpdatePC()", +"253f055b": "getStage2End()", +"253f2809": "offerCollectibleForSale(uint256,uint256,int256,uint256)", +"253f5c38": "addtoLeaderboard(uint64,uint64,uint64)", +"253f89b0": "minContributionUSDc()", +"25400abc": "buyPuzzle(uint8)", +"25402e6c": "vcxCount()", +"2540424b": "isDefIndexInRange(uint8)", +"25406480": "extendPeriod(uint256)", +"2540c420": "phaseOneRate()", +"2541edcc": "oferta()", +"25435704": "updateTokenSupply(uint256)", +"254439fe": "addTokenList(address,uint32)", +"25449c54": "ArteumToken()", +"2545686d": "is_slot_in_bid(uint8,uint8,uint8)", +"2545a07a": "MOEToken()", +"25461328": "MSPMock(address)", +"25464902": "AUCC()", +"2546559c": "Demo()", +"2546de10": "vest(address,uint256,uint256)", +"254747a5": "checkAvailableAmount(address,uint256)", +"25476ed8": "settleAndWithdrawCfd(uint128)", +"254800d4": "vestingStart()", +"2548bbbd": "WithdrawalCreatedEvent(uint256,uint256,bytes)", +"25495998": "getMinimumConsumerDeposit()", +"25498152": "setBuyDividendPercentageFee(uint8,uint256,uint256)", +"2549ad8f": "MANHATTANPROXYCNVNTAVE()", +"2549e0b1": "getLockedBalance()", +"254a46f4": "cycleMintSupply()", +"254b302d": "revokeAllMyId()", +"254bd326": "getUserAddr(uint256)", +"254c70ac": "getPlayerData(uint32)", +"254c91b3": "testBitNotSetSuccess()", +"254d2e12": "GetDemolishCost(uint256,uint256)", +"254dacba": "BurnTokens(address,uint256,string)", +"254dcfe2": "lastActiveTransaction(address)", +"254fd745": "transferUCASH(address,uint256)", +"255016c8": "checkIfExploded()", +"255074a9": "addManualContributor(address,uint256)", +"2550c435": "CRYPTO_USD()", +"2551858e": "getFlags(bytes32)", +"2552317c": "lastBlockNumber()", +"25524400": "placeBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8)", +"25534a1e": "saleEtherReceived()", +"2553795a": "AragonSupply()", +"2553ac0d": "getPlayeds(uint256,address)", +"2553e0cb": "OwnedMortal()", +"2554a358": "queryCurrentTradablePrice()", +"2554b9b3": "kkkTokenSale(uint256,address)", +"2555611a": "AOKPAY()", +"25568fd7": "__setBeneficiaryForDasTokensChange(address)", +"2556befa": "feeBank(address)", +"255706f5": "start_service2(uint256,address)", +"25575a04": "peBalance()", +"25579702": "calculateDrugBuySimple(uint256)", +"25580656": "dataSourceGetRoundOfSixteenResult(uint256)", +"25583590": "_cancelAuction(uint256)", +"25585ee8": "diamondIndexToApproved(uint256)", +"255884ae": "discoveryPrice(uint256)", +"2559e0dd": "rateInSpecificTier(uint256)", +"255bd903": "signByBride()", +"255c8244": "amountRaisedPreSale()", +"255c8fee": "TestyTest()", +"255e2f81": "adjustDollarToEtherRatio(uint256)", +"255e444e": "scientists()", +"255e4685": "mintStart()", +"255eac5c": "newRegistration(address,uint256)", +"255f82e2": "sealed(uint256,bytes32)", +"25605c6a": "balanceOfSC()", +"2560a8c0": "houseedge()", +"2560baeb": "calculatePayrollBurnrate()", +"25616007": "getLandplayerFirstDefenderID(uint8,uint32)", +"25618ca8": "setBattleContractAddress(address,address)", +"2561ee35": "estimateBuyOrder(uint256,bool)", +"25625608": "FoundWinner(address,uint256)", +"2562b427": "declineKyc(address)", +"25630c9f": "fwithdrawal(uint256)", +"25635b68": "updateBaseInventory(uint256,uint256,uint16)", +"2564e1c4": "PaymentAddressFactory()", +"256540cd": "turnover()", +"256688fb": "UseRedEgg(uint256)", +"256697df": "ibcDistributed()", +"25672ee6": "OpenBids(address,uint256,address,address,uint256,uint256)", +"256738d1": "AGT()", +"25686e15": "getMarketsRocId(uint256)", +"25687e28": "tuneLastStageStartAt(uint256)", +"2569100d": "runtoeth(address,uint256)", +"256919c6": "fixSale()", +"25696308": "lastBlock_a10Hash_uint256()", +"25697337": "getLittAdminCount()", +"25698d89": "isLottery()", +"2569cd6c": "assistant()", +"256a9f81": "extendedTime()", +"256b8dfe": "Travelcash()", +"256bcaa0": "addToJackpot()", +"256bdaa4": "setEtherRate(uint16)", +"256c0926": "RocketPoolCrowdsale(address)", +"256c09d4": "_protocolInterestRate(uint256)", +"256c10a1": "market2021TokenCreated()", +"256c3232": "getPreICOBonusAmount(uint256,uint256)", +"256c5fc6": "LooisToken(uint256,string,uint8,string)", +"256df407": "test_spamFreeze()", +"256f992b": "organizers_percent()", +"256fa241": "distributeTokens(address[],uint256)", +"256fec88": "lastSender()", +"2570c13d": "GBCoin()", +"2570e31e": "getTokens(uint256,address)", +"2571a4ab": "MaxBetAmountChanged(uint256)", +"25731e97": "quitBanker()", +"257341a8": "vestingCountOf(address)", +"2573aa7d": "newShare(address)", +"2573ce27": "validateUserByHash(bytes32)", +"25746251": "canVote(uint256)", +"25750995": "updateChfCentsPerEth(uint256)", +"25756d90": "getWeaponRarityFromTokenId(uint256)", +"2575d47e": "EmitAccountChartDetails(address,uint256,uint256,uint256)", +"2576a779": "updateServiceFee(bytes32,uint256)", +"257714db": "getTransferRate(address)", +"257781e7": "deleteIPFSHash(bytes32)", +"2577929b": "settleContract(uint256)", +"257793f9": "getConstructorTouches()", +"2578117b": "getPotAsFixedPointForGameId(uint256)", +"25787747": "icoDuration()", +"2578e943": "RHYNOTE()", +"25799b18": "getUnapprovedArtists()", +"2579dd3c": "registrantToHopefulIds(address)", +"257bcd6a": "placeBet(uint256,bytes32,bytes32)", +"257c360d": "getCurrentBalanceForCampaign(bytes32)", +"257c88b5": "curQuater()", +"257d3db5": "setNumNumbers(uint256)", +"257d4166": "Partner()", +"257d5995": "updateSinglePayout(address,uint256)", +"257d849f": "ZegartToken(uint256,string,string,string)", +"257d9bb8": "MINIMUM_AMOUNT()", +"257e0523": "addLockedTokeD(address)", +"257e1f8f": "endUpgrade()", +"257e5c69": "matchStake()", +"257ef522": "approveBountyTransfer(address)", +"257ef70b": "fillSellOrder(address,address,uint256,uint256)", +"257f9abf": "removeFromList(address)", +"257fc838": "setResolveValueGasLimit(uint256)", +"258072e5": "display_rate()", +"2580ce84": "totalAndRemainOf(uint256,address)", +"2581021c": "depositCollateralOnBehalfOfRecurse(address,address,bytes32,uint256)", +"258108da": "slaveWalletPercent()", +"25818751": "test_oneValidEqUint3()", +"2581c674": "testBitsOrFailIndexOOB()", +"2581f5a4": "distributeAirdrop(uint256,address[],uint256[])", +"2582bf2a": "updateDelegateKey(address)", +"258315b3": "ATC(uint256,string,uint8,string)", +"2583373c": "distributeAndUnlockTokens()", +"2583a1d9": "oraclizeQueryId()", +"2583b2e4": "totalWithdrawTokenAll()", +"2583cfef": "removeFromBothSendAndReceiveAllowed(address)", +"2584295e": "userWhiteListContracts(address,address)", +"2586539e": "batchTtransferEtherToNum(address[],uint256[])", +"2587eb4e": "setRate(int256)", +"2588f9a5": "ReleaseAgentSet(address)", +"25892f92": "ApprovedBy(uint256,address)", +"2589af4a": "getProjectKudosByUsers(bytes32,address[])", +"258a61d6": "coordinateToIdentifier(uint256,uint256)", +"258a6ca6": "getStoryExpiry(bytes12)", +"258ae582": "verify(bytes32,bytes)", +"258b5a35": "challengeSettle(bytes,uint8[2],bytes32[2],bytes32[2])", +"258b5c06": "finalizeCrowdsale(uint256,uint256,uint256)", +"258b5da6": "recoverWETH()", +"258b85d4": "verifyHash(string,string)", +"258c047e": "getStatusEventClosed(bytes16)", +"258c0f1e": "deleteCaller(address)", +"258c2a2d": "Charity()", +"258c4f63": "channelManagerByToken(address,address)", +"258c5ddd": "softWithdraw()", +"258d3d6e": "PlayHallToken()", +"258da4b4": "seedStarted()", +"258dd544": "estimateSellOrder(uint256,bool)", +"258e60b6": "start(string)", +"258f6b8f": "GiveReferralRocket(uint16,address)", +"258fd4f3": "Stage1Allocation()", +"25910753": "addCourse(string,string,bytes32)", +"2591432d": "canary()", +"25925806": "tokensAllocatedForCs(address,address,address)", +"2592e921": "verifyParams()", +"2593ed21": "setICO1Phase()", +"2594b343": "walletTwo()", +"259653b8": "distributionClosed()", +"2596c93b": "manualBonusActive()", +"2596e62c": "test_oneValidEqBytesUint()", +"25973ef7": "CIFRCOINTOKEN()", +"25979983": "sendToAll(uint256)", +"25981559": "bluceTestCoin(uint256,string,string)", +"25982586": "AddressDemo()", +"259852f8": "updateGenVault(uint256)", +"2598ab9d": "createPromoSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"25990d4d": "TokenFulfillment(address[2],uint256[8],uint256)", +"2599c661": "getgamecardsalemoneyuint256(uint256)", +"259a28cf": "UNLOCK_PERIOD()", +"259b2ce0": "whitelistRegistrants(address)", +"259b5181": "_batch2_rate()", +"259b5605": "PTL()", +"259bc6f5": "getWhiteUsers()", +"259c05f5": "DEV_TAX_DIVISOR()", +"259c29e8": "replaceShorter()", +"259c95c4": "_sendWebGiftToken(address,uint256)", +"259ceee5": "contractTokensTotal()", +"259d1cb4": "eth_decimal_num()", +"259d33c1": "roundStats(uint256)", +"259eb959": "privilegedTransfer(address,uint256,bytes,string)", +"259fddaf": "stakeCommunityTokens()", +"259fefcb": "angelAddress()", +"25a02ff6": "setGeneratorAddress(address)", +"25a10a70": "getChild(address)", +"25a190c9": "inicializaStatusPossiveis()", +"25a2219f": "promotionsUsed()", +"25a30145": "preSaleTime()", +"25a31135": "Disable()", +"25a34aca": "returnMargin()", +"25a3ba49": "getCertKey(string)", +"25a42081": "setPriceStep3(uint256)", +"25a43ea5": "setts10(uint256,address)", +"25a50636": "completeBountyAddresses(address[])", +"25a52d9d": "curentWinner()", +"25a583a3": "_reAdjustDifficulty(uint256)", +"25a6c545": "generalInfo()", +"25a7650a": "beginGame(uint256)", +"25a78057": "DeClubToken(uint256,string,string)", +"25a86d56": "ETH_USD_EXCHANGE_CENTS()", +"25a8e6f9": "addNewEditor(address)", +"25a9d450": "getClientBalance()", +"25a9e534": "DataToBlockchainKeeper()", +"25ab2d03": "getReturnSize(uint256)", +"25ab526d": "MITPurchase(address,address,uint256,uint256)", +"25ab9f43": "addDoubleChanceLine(uint256,string,uint256)", +"25abc312": "changeICOPrice(uint256)", +"25ac29da": "generateUrl(string,uint256)", +"25ace2a7": "checkExpired()", +"25ad7f2e": "OneStep()", +"25ad91ce": "createUser()", +"25adfc8f": "SetMaxMinersXblock(uint256)", +"25aeb4a2": "addPayment(uint256,string,int256,bool)", +"25aef744": "ValuePlaced(address,address,uint256)", +"25b05c88": "playerGameId(address)", +"25b10186": "INITIAL_PRICE_INCREMENT()", +"25b16c4a": "getWeis(uint256,uint256,uint256)", +"25b198eb": "inList(address)", +"25b1a072": "setGOPCreator(address)", +"25b29d84": "getEtherValue()", +"25b2ac77": "privateOfferingWallet()", +"25b31a97": "purchase(address)", +"25b3b5a8": "_totalMinedSupply()", +"25b3bfb8": "transferFrom0(address,address,uint256)", +"25b3edd9": "updateTraits(uint256)", +"25b5160c": "setICOPrice(uint256)", +"25b56727": "createProxy(address,address)", +"25b56dd4": "averageScrapPrice()", +"25b634c0": "approveDisbursement()", +"25b64bba": "signerConsumerNonce(address,address)", +"25b6ae80": "incSALESTATE()", +"25b72273": "SGT(address)", +"25b75b7b": "deregistrationDate()", +"25b825ab": "newMediaToken(uint256,uint8,string,string)", +"25b886eb": "constructors()", +"25b89c52": "AirDropToken()", +"25b901c8": "Refundlineinfo()", +"25ba0824": "grantOwners(address)", +"25ba0f51": "initContract(address,address)", +"25ba2d2e": "minimalPrice()", +"25bae118": "earlyPurchaseClosedAt()", +"25bb8e93": "_badgeUnFreeze(uint256)", +"25bccea2": "setFreeze(address)", +"25bd4639": "paymentId()", +"25bd713f": "tokensForPlatform()", +"25bdb2a8": "getSaleState()", +"25bdb73d": "benefitPercents()", +"25bdc110": "Resolve(bool,uint256)", +"25bddc18": "DGXCrowdsale(address,address)", +"25be124e": "token2()", +"25be53e7": "kickStartICO(address,uint256)", +"25c065b1": "minStakingAmount()", +"25c10247": "buyIPC()", +"25c2052f": "last_random()", +"25c24bc3": "folioToken()", +"25c302e4": "totalDonors()", +"25c33e13": "setMaxReward(uint256)", +"25c48f30": "MYDECIMAL()", +"25c50f97": "enablePhenomenon(bytes32)", +"25c54456": "existsContract(address)", +"25c5ce04": "availableOnStage()", +"25c5d4d4": "tileDrop(address[])", +"25c62d5a": "MAX_TOKENS_AIRDROPS_BOUNTIES()", +"25c70a44": "moveToArea(uint16)", +"25c782d7": "addStageCrowdsale(address)", +"25c7cd17": "getCurrentLeaderOwners()", +"25c843b9": "comments()", +"25c9307d": "lastBetBlockNumber()", +"25c93df3": "rewardTokenAmount(uint256)", +"25c95538": "isRepeated(string)", +"25c972ff": "JoinGameAsBanker(uint8,uint256)", +"25ca4c9c": "isAccount(address)", +"25ca5cc6": "candidateTillETHAssets()", +"25ca953d": "resetAirDrop(uint256,uint256)", +"25caa262": "getBal()", +"25caaa37": "getMyChicken()", +"25cb2bc6": "getBrokerAddress(uint256,uint256)", +"25cb366d": "manualMigrate(address)", +"25cb4f2c": "profitContainerAddress()", +"25cb5bc0": "getExpiryTime()", +"25cb6303": "isItIco()", +"25cb98d5": "removeVerifiedUser(address)", +"25cbd68e": "fifthTeamWithdrawal()", +"25cbe702": "tokenSupportLimit()", +"25cbeb0a": "DICIMALS()", +"25cbeb7e": "creatorsAddress()", +"25cc348f": "testDeployedValues()", +"25ccdb4c": "currentspudinfo()", +"25ccf381": "create_forwarder()", +"25ccf688": "KEO()", +"25cdca8d": "CommonWhitelist()", +"25cde42c": "addPayerRefundAddressAction(bytes32,bytes)", +"25ce77a0": "devuelveEncuestados(bytes32)", +"25ceb4b2": "submitBlock()", +"25cf512d": "setBytes32Value(bytes32,bytes32)", +"25cf98e5": "EduCloud()", +"25cfa566": "StartingPrice()", +"25d00041": "registrantIndex()", +"25d04034": "KT07Coin(uint256,string,uint8,string)", +"25d0b4ef": "minFundingGoal()", +"25d104d4": "returnVestingSchedule()", +"25d1da84": "revokeAll(bytes32,address)", +"25d30d8e": "cnt_per_Keos()", +"25d3a09d": "getProposal(string)", +"25d3b2c6": "check_array_add(address)", +"25d3bcd1": "saleHardcap()", +"25d3d0e3": "purchaseTimestamp()", +"25d4bdeb": "LookAtCollectedFees()", +"25d5971f": "withdrawStake(uint256)", +"25d5eafa": "total_points()", +"25d76e6d": "setCompte_27(string)", +"25d78d3b": "IcoPhaseManagement(address)", +"25d83bb3": "authorized_setCardPerkText(uint256,string)", +"25d85e12": "totalPopulation()", +"25d8a4b2": "SpiceToken()", +"25d8dcf2": "betAndFlip()", +"25d8f6a5": "dividendForHistory()", +"25d91125": "earlyWhitelistBeginTime()", +"25d92ee2": "updateFeeWallet(address,address)", +"25d988bb": "buy_token(address[],uint256,uint256)", +"25d998bb": "availableBalanceOf(address)", +"25d9d57d": "highTokensToSellGoal()", +"25d9ec83": "requestBuywithETH(address)", +"25dac5e3": "DocumentStored(uint256,uint256)", +"25db4dd0": "jackpotBlance()", +"25db6699": "tgrSettingsBlocksPerStage()", +"25dbe054": "setDonationUnlockTs(uint32)", +"25dccaf9": "postMessage(address,uint256,string)", +"25dd0ee6": "checkTotalBalance(uint256[])", +"25dd495a": "Recycle()", +"25ddda76": "changeMixEnable(bool)", +"25dfbfba": "addProduct(string,string,string,string,uint256)", +"25dfcf84": "saleAllocated()", +"25e023b3": "unlockOwnerBalance()", +"25e0671f": "areReservedTokensDistributed()", +"25e0c876": "sosTransfer(address,address,uint256)", +"25e11811": "addFunctions(address)", +"25e1350f": "insert_candidate(string,uint8,string,string)", +"25e16063": "withdrawEth(address)", +"25e1b5e4": "pricePerMessage()", +"25e1c6f7": "batchTransferORS(address[],uint256)", +"25e3172b": "AdminClaimAirdropMultiple(address[],uint256)", +"25e330fb": "_increaseRarity(uint256,bytes32)", +"25e37b2b": "delTournament(address)", +"25e3d3ba": "blockResult(uint64,uint64,uint64)", +"25e3d7b4": "assignSharedOwnership(address,uint256)", +"25e41da1": "getRandomValue(uint256)", +"25e524d3": "right8(uint256)", +"25e629f2": "fundraisingDelta()", +"25e65584": "getPlayerBossWannaCryData(address)", +"25e6c304": "totalPrizes()", +"25e6f516": "tokenDescription()", +"25e7514b": "remainAmount()", +"25e7c9ad": "getTotalAmountOfFirstInvestors(uint256)", +"25e7e3cf": "recoverAllEth()", +"25e89283": "mainSaleActive()", +"25e8f38c": "logUI(string,uint256)", +"25ea269e": "Scissors()", +"25eafb45": "AikcoinSupply()", +"25eb64c7": "buildingAddress()", +"25ede147": "depositSecretBid(bytes32,bytes)", +"25ee8abb": "winningTeamSet()", +"25eeecbc": "divisionByZero()", +"25ef9afa": "LOG_newSpinsContainer(bytes32,address,uint256,uint256)", +"25f08fc4": "decayedPriceOfTwitterId(uint256)", +"25f0f467": "updateTransferFeeRate(address,uint256)", +"25f0fd23": "_revoke(bytes32,address)", +"25f262c7": "draw(address[])", +"25f281b4": "changePriceSetter(address)", +"25f2f6db": "awardRoundPrize()", +"25f39a63": "div(int128,int128)", +"25f3da52": "GetBankAccountNumber()", +"25f3f2ef": "joinBuyRequest(uint256)", +"25f43ed5": "setMemsize(uint256)", +"25f4c703": "setFoundersPercent(uint256)", +"25f5cb1e": "getAllowedForTransferTokens(address)", +"25f5ec45": "getCheapestCardWager(address)", +"25f673f5": "Love(address,address,uint256)", +"25f731c8": "transferOwnershipBack()", +"25f885d0": "CashOut(bytes)", +"25f96b73": "ownerSupply()", +"25f9bfef": "CONTRACT_REGISTRY()", +"25f9f1e6": "lockOwnerBalance(uint256,uint256)", +"25fa0131": "isZero(address,string)", +"25fa5ae1": "createShapeShiftTransactionPost(string,string)", +"25fa8a4f": "_firstTokenId(address)", +"25fab539": "removeDragonFromSale(uint256)", +"25fad06a": "clearances()", +"25fb439c": "POW33()", +"25fb66b9": "getHeroItems(uint256)", +"25fc575a": "deregisterToken(uint32)", +"25fc5f02": "HIPHOP()", +"25fc790f": "te()", +"25fcdad8": "complaint(address)", +"25fced01": "sellTokensPreIco()", +"25fd1e29": "REFUND_TIME_FRAME()", +"25fda176": "notify(address,uint256)", +"25fdb725": "MIN_CONTRIBUTION_ETH()", +"25feb519": "fifthTime()", +"25ff68dd": "Initialized(address,uint256)", +"25ffba04": "updateTokenStatus()", +"26000ba2": "updateBalanceOnFunding(uint256)", +"2601d1bc": "checkGameState()", +"2602bc8f": "_transfer(uint256,uint256,uint256,bytes32,string,uint256)", +"26030a34": "report(bytes32)", +"2603ace6": "unRegOwn(address,string,address)", +"2603f70c": "ownerDeclareRefundFinish()", +"26044feb": "fetchdivs()", +"26046743": "assetOwnerRemoved(bytes32,address,address)", +"2604b767": "getEggsSinceLastHatch(address,address)", +"2604f424": "FUTURE_DISTRIBUTE_LIMIT()", +"26052ef6": "getCurrentSolver(address)", +"2605b3c7": "participant(address)", +"26066ad5": "offer(uint256,bytes,uint256,bytes)", +"2606a10b": "report()", +"26070774": "Token(address)", +"26073003": "congratulationFromNoel()", +"26086c70": "triggerVersion(address)", +"2608f818": "repayBorrowBehalf(address,uint256)", +"2609037c": "requestArbitration(address,bytes32)", +"26091cbe": "OwnersBySpinner(uint256,uint256)", +"26093bbc": "safeIncrement(uint256,uint256)", +"26094c60": "setUnsoldTokensWallet(address)", +"260958a5": "getTransfer(bytes32)", +"260993f9": "registerSister(address)", +"260a5227": "buyOnBehalfWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", +"260a54d3": "getCA(address,address)", +"260a818e": "unregister(bytes8)", +"260abfa5": "EnableMember(address)", +"260b0bc8": "payToOracle(uint256,uint256)", +"260b8f6e": "GetEvaluate(address,uint8)", +"260bf85a": "updateAmountToTakeAsRake(uint256)", +"260c2214": "setValid(uint256,bool)", +"260c3af1": "IcapTransfer(bytes32,address,bytes32,uint256)", +"260d387b": "blacklistUserForTransfers(address)", +"260e6885": "BazraCoinToken()", +"260e9640": "lock(uint256,uint256,uint256,uint256)", +"260ea6c9": "myDividendBalance()", +"260edaaa": "surplusTokens()", +"260f836d": "intercrypto_getInterCryptoPrice()", +"26109699": "Withdrew()", +"26111ab2": "addToSet(uint256,uint256)", +"2611341b": "submitApplication(address)", +"26119a0b": "changeFeeETH(uint256)", +"26121ff0": "f()", +"26134334": "getProjectKudos(bytes32)", +"2613ba9a": "PlatformDeposit(address,address)", +"2614195f": "getNameFee()", +"2614d4a4": "spendCredits(address,uint256)", +"2614fff6": "lengthOfCommonPrefix(bytes32,bytes32)", +"26161670": "donkeyRanking(uint256)", +"2616501d": "defaultRate()", +"261669ba": "HeroesToken()", +"26168eed": "getTestimonial(uint256)", +"261775f6": "BlokGrup()", +"2617fc13": "resetcardPrice()", +"26180224": "newChallenge(uint64,uint64)", +"261879ed": "addKitty(uint256,uint256,uint256[5])", +"26188437": "tokenReserved(address,uint256)", +"26188a3f": "increaseAllowed(address,address,uint256)", +"2618a571": "DEVELOPMENT_TEAM_CAP()", +"26195901": "numAnimals()", +"2619ba7f": "ETHFee()", +"261a323e": "exists(string)", +"261aa1c5": "additionalBonusPercent()", +"261ac279": "getApiByIdWithoutDynamics(uint256)", +"261b2c5e": "stepVestingDuration()", +"261b4205": "equalBytesToBytes(bytes,bytes)", +"261bd0f1": "BUY_BACK_BONUS()", +"261c085e": "registerChallenge(bytes32,uint256)", +"261c42dd": "getAllRevisionTimestamps(bytes20)", +"261c70bd": "voteMessage(bytes32,uint256)", +"261cb08a": "burnPausedTime()", +"261de7c4": "right33(uint256)", +"261e9693": "balances4(uint256)", +"261eafc8": "addMasterTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"261ed1d8": "farmCities(uint256)", +"262006e9": "getFirstDocumentIdBetweenDatesValidFrom(uint256,uint256)", +"262007c0": "getBetter()", +"26207bd1": "indices(int128)", +"26208591": "payDividendsTo(address)", +"2620f61c": "storeClaim(uint16,address,uint256)", +"2620fb2b": "getNextTime(address)", +"2620fd4a": "setupICO(uint256,uint256,uint256,uint256)", +"262199c3": "changeTokenOwner()", +"2621b6e3": "finalStageRefund()", +"2623297e": "zt()", +"26232a2e": "platformFee()", +"2623f687": "getRevenue(uint256)", +"2624597c": "createTokensForEvent(address,uint256,uint256,string)", +"2624b2d9": "EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH()", +"2624c4eb": "EtheremonEnergy(address)", +"2625e2e1": "post(address,address,bytes32)", +"26278f86": "unrestricted()", +"262799f7": "PaquariumTokenTest2(uint256,string,uint8,string)", +"262834da": "_addOperator(address)", +"2628803f": "migrateREP()", +"262933cb": "responseFromWS(address,uint256,bytes32)", +"26295b52": "createGalaxy(uint8,address)", +"262aa9fc": "DOGToken(uint256)", +"262af333": "sponseeAddress()", +"262af3dd": "getClassViewValue(uint256)", +"262b9f8c": "finishRoundA()", +"262bcb68": "mintBooster(address,uint32,uint8,uint8,uint32,uint24)", +"262c0b72": "getPayoutFreezePeriod()", +"262c3666": "forward(bytes32[],uint8,bytes32,bytes32)", +"262da6df": "TransferOwnershipOperationEvent(address,uint256)", +"262f8244": "HGSOCIAL(uint256,string,string)", +"262f8c0e": "addTimelock(address,uint256)", +"262fe547": "testCheckSavecEthBalance()", +"2630271d": "setlockaddress(address,bool)", +"2630c12f": "priceOracle()", +"2630d97d": "setAtomLev(uint256,uint8)", +"2630ee9f": "revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", +"2630ef36": "setNumOfTimesSteal(uint8)", +"263164b9": "getSalaryTokensTotalCount()", +"26316e58": "setMigrationMaster(address)", +"26324eff": "producers(address)", +"26325bd3": "allowEveryone()", +"2632924d": "left30(uint256)", +"2632bf20": "unblockMe()", +"2632fc3c": "MichiganvsLoyola()", +"2634592a": "logReportsDisputedCalled()", +"26345de2": "VendingMachine()", +"26348325": "smartContactForSale()", +"2634d90d": "ArcherFreeCoin(uint256,string,uint8,string)", +"263570c0": "addStorage(string,address)", +"2635f4de": "registerLibrary(bytes,address)", +"2635f59f": "InterfaceToken()", +"263631b4": "euroCents2wei(uint256)", +"2637bb2e": "isTransferProxy(uint32,int256,address)", +"26381b05": "canReceiveTokens()", +"26387b07": "Fortune()", +"2638b25c": "seedEndTime()", +"263a6d79": "initiateTransaction(address,uint256,bytes)", +"263b694a": "MIMIMUM_CONTRIBUTION_AMOUNT_ICO()", +"263c0a8d": "_setLagParams(string,uint16,uint8)", +"263c493a": "enable_deposits(bool)", +"263c6ec0": "usdToTokens(uint256,uint8)", +"263ce6a0": "getWinningPrediction(address)", +"263d4878": "triggerRefund()", +"263d5ad0": "vaultPercentage()", +"263dffba": "_releaseVouchers(address,uint256,uint16)", +"263e3d5d": "terminateContract(uint256)", +"263e6d0d": "INDOPAY()", +"263e74e6": "computeBonus(uint16)", +"263e79b5": "addCreditScore(uint256,string)", +"263eb5b6": "assertEq8(bytes8,bytes8)", +"263ef0cf": "needRefoundETH(address,uint256)", +"263f6a42": "rateFeesNumerator()", +"263fa1ad": "XYZToken()", +"263fbd45": "getContractUpdatedTimeById(bytes32)", +"263fbef2": "District0xNetworkToken(address,address)", +"263ff8b9": "buildTokenId(uint256,uint256,uint256)", +"26407e36": "calculateSharesInTheRevenue(uint256,uint256)", +"26409047": "BDACoin()", +"2640b401": "SetRate(uint256)", +"2640f62c": "getTokenToEthOutputPrice(uint256)", +"26413760": "reducePlayersGooProduction(address,uint256)", +"2641d381": "totalNumberTokenSold()", +"26423259": "viewCoinSupplyAndFunding(bool)", +"2642567e": "coinData(address)", +"264282f2": "markTokens(address,uint256)", +"26428430": "_deleteInt(bytes32)", +"2643fc13": "spermlordReq()", +"2644f9f8": "getAssetsOwners(uint256)", +"26452036": "InitCountry(uint256,uint256)", +"264534be": "OMC(uint256,string,string)", +"26458beb": "firstPreSaleDate()", +"2646754d": "TestTokenA()", +"2646b176": "getPaimentStatus(address,uint256)", +"2646bce6": "LogWinner(uint8)", +"2646bfcb": "pay(uint256,uint128,address,bytes)", +"26470ae4": "getBonusFactor(uint256)", +"26476204": "stake(address)", +"26483bcd": "tokenMultiTransfer(address)", +"26484a44": "start3XPhase()", +"26487265": "contractExecuted()", +"26488531": "banMember(address,string)", +"2648a7e2": "EtherRedeemAccepted(address,uint256)", +"264934de": "submitTokenForEdit(uint256)", +"26493a6f": "setAllocateAgent(address,bool)", +"26496cab": "Milestone_IcoSuccessful(string)", +"2649cb10": "pNumberOfLockedTokens(address)", +"2649d62e": "multiMint(address,uint256)", +"264a3edc": "setPolls(address,address)", +"264a6d10": "get_next_asset_document_from_document(bytes32,bytes32)", +"264ae918": "withdrawChannel(address,uint256)", +"264b2b8e": "returnBalance(address)", +"264c22bb": "getAmountOfGene(uint256)", +"264c2cdc": "generateRandomNumber(address,uint8)", +"264c8e9a": "whatWasTheVal()", +"264caf14": "addVestor(address,uint256,uint256,uint256)", +"264d26e1": "ICO_CAP1()", +"264d7797": "tokensBought(address)", +"264dac0f": "endBorrowAgreement(string,uint256,uint256)", +"264e3018": "EtherDeltaHandler(address)", +"264f28fe": "getOwnerDeposit()", +"264f5718": "rondaSilla()", +"264f630d": "DonationReceived(address,uint256)", +"264faeb8": "getReportsCounter(uint256)", +"26500c84": "ResolverNode()", +"265028c2": "GetMaxBuyIn()", +"2650a47c": "withdrawEther(uint256,uint256)", +"26529836": "ADVISER_STAKE()", +"2652b4a5": "UDA()", +"2652c0f4": "hasVerifiedAttributeValue(address,uint256)", +"2652c757": "submitBracket(bytes32)", +"26532df8": "subZero(uint256,uint256)", +"2653ab19": "getMC(uint256)", +"2654e624": "ResumePayment()", +"265580f5": "setRegistryExecID(bytes32)", +"2655dd0b": "storeId(address,address,uint256)", +"26563b40": "whitelistManager()", +"2656455f": "claimEthFor(address)", +"2656b77d": "addToBattle(uint64)", +"2656da30": "setFuelContract(address)", +"26571388": "xpaExchange()", +"26591e79": "BONES()", +"2659d8ef": "setExchangeFormula(address)", +"265a3afd": "registerBase(bytes32)", +"265a8636": "_mintFish(address,uint32,uint8,uint8,uint8,bytes16)", +"265af6d1": "withdrawFundsAndPayRoyalties(uint256)", +"265b3e6c": "calculateIssueGoldFee(uint256,uint256,bool)", +"265b5d93": "getMaxLockAmount(uint256,uint256)", +"265c920f": "setBonusParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"265cdd88": "Bet(address,string,uint256)", +"265cfbbc": "Emitter()", +"265d900b": "wtech()", +"265dcbd3": "StandardTokenWrapper(address)", +"265f0393": "KryptopyCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"265ffe2b": "ethMin()", +"26602470": "hashEIP712Message(bytes32)", +"2660316e": "plyrNames_(uint256,bytes32)", +"26605772": "renameTulip(uint256,bytes32)", +"2660b56c": "setData_2(string)", +"26617c28": "_setPaused(bool)", +"26625e46": "formatDecimals(uint256)", +"26627d80": "third_whitelistSupplier()", +"266361f5": "getLottoData(uint8)", +"26637579": "_removePlayer(uint256,uint256)", +"26638a38": "spin(int256)", +"2663a4ed": "byteToLower(bytes1)", +"26654d57": "refundParticipant(address,uint256,uint256,uint256,uint256)", +"266578d0": "_isRateActual(uint256)", +"26657c77": "Validate(string,string,string)", +"26663203": "withdrawFromEscrow(address,bytes32)", +"266710ca": "manualUpdateBalances_only_Dev()", +"266716f6": "GTSToken()", +"2667f407": "__proxy(address,bytes)", +"2668748d": "applyAuditorsCheckUpdate(address,address,uint64)", +"2669268b": "FUC(uint256,string,string)", +"266987ef": "p2pLocker(address)", +"26699576": "playSystem(uint256,address)", +"266b059e": "setSendAmount(uint256)", +"266b2eb5": "Conserve()", +"266bd375": "MyPizzaPieToken()", +"266bd901": "check_price(uint256)", +"266c2132": "_prand()", +"266cc170": "Y2J()", +"266ce248": "createPlayer(uint16)", +"266cf109": "record()", +"266d7bda": "lockupEndTime()", +"266d8299": "DriveholicToken()", +"266fc436": "producedSilverCaps()", +"266fc5d5": "totalContributorsProfit()", +"2670bdf0": "setERC777(address)", +"2670cc14": "transfekbolPlutocrat(address)", +"267127ec": "getTokenSettings()", +"267177eb": "sendPayout(bytes32,uint256)", +"2671b61d": "OfferRouting(bytes32,bytes32,uint256,bytes)", +"2671e253": "resetTraps(uint256)", +"26728b14": "rewardPXL(address,uint256)", +"2672b3e2": "SplitterEtcToEth()", +"2672c952": "seed_coins()", +"26735c06": "TOTAL_POOL_COMMISSION()", +"26736363": "APRInflationToken(uint256)", +"26741c88": "IcoMessage()", +"26744071": "WLCoin()", +"26745909": "PRNG_Challenge()", +"26746f5f": "updateGenerationRatio(uint256,address)", +"26748804": "BlockPoints()", +"2674899b": "getSaleHour(uint256)", +"267490aa": "turnOnPresale()", +"26749ad7": "approvedContracts(address)", +"267502c9": "setAquarium(address)", +"2675c123": "CloseContract()", +"26760d1d": "setMaxTms(uint256)", +"26767298": "RimuoviMiner(address)", +"26767cfe": "shareProfits()", +"26768b83": "_emitDestruction()", +"2677ef1b": "_seal(address,address,uint256)", +"26782247": "pendingAdmin()", +"267822c1": "finalizeChangeBurnBounds()", +"267835a4": "_removeBurner(address)", +"26798494": "EusdContract(address,address,address,uint256,uint256,uint256)", +"26798680": "toReal(int216)", +"267acd6c": "getPricesPerInterval(uint8)", +"267b6922": "entries(bytes32)", +"267c4ae4": "exists()", +"267c8507": "authorizeManager(address)", +"267f20a2": "_transferTo(address,uint256)", +"267ff78c": "approveRequestUnpause()", +"26811c09": "NVBToken()", +"26815de3": "updateGoldPrice()", +"2682644f": "PURCHASE(address,uint256)", +"26826bf8": "setImage(bytes)", +"2682a0ac": "CrowdsaleTokenExt(string,string,uint256,uint256,bool,uint256)", +"26834988": "numListed()", +"26839e53": "getUintValues(bytes32)", +"26839f17": "depositEther(uint256)", +"26843251": "presale1_startdate()", +"268451a2": "testFail_set_price_unauth()", +"26848a86": "setPicture(string)", +"26848b68": "checkCrowdsaleBalance()", +"26866160": "secondsBetweenReadings()", +"2687c645": "contributeInternal(address,uint256)", +"26881518": "setupFee(address)", +"2688454a": "U()", +"268855a4": "ParsecCrowdsale(address,address,address)", +"26887303": "TourCashStandardToken(uint256,string,uint8,string)", +"268959e5": "removeAdmin(address,address)", +"268a4559": "competitionStatus()", +"268b0459": "getRecordBalance(address)", +"268b5344": "PlanetOfOwner(address)", +"268b946c": "toUint8Throw()", +"268bb78e": "propose(address,bytes,uint256,uint256)", +"268bc65d": "signatureDropMultipleAmount(address[],uint256[])", +"268c969a": "emergencyDrawingReset()", +"268cb5f7": "queryCost(address[])", +"268d50fe": "ownerSetHouseEdge(uint256)", +"268da061": "CRFtoken()", +"268e7075": "toBytes2(bytes)", +"268ea7f6": "ReInvest(uint256)", +"268eb055": "setDescription(uint64,bytes)", +"268ef7e8": "holdAddress1()", +"268efdaf": "StdInt64(int64)", +"268f1153": "changeState(uint8)", +"268fe426": "dailyReset()", +"2690f0d5": "foundationLock()", +"269106e9": "dayCycle()", +"2692281d": "requestChangeBurnBounds(uint256,uint256)", +"2692de22": "sendAllFunds(address)", +"2693c150": "getPlayersTickets(address)", +"2693eca0": "devSFTDestination()", +"2693ed9b": "calcTokenSold(uint256)", +"2693ee80": "bonusPool()", +"269445db": "phase_6_rate()", +"26949220": "withdrawWonCosFromGame(uint256,uint256,uint256)", +"2694f6bb": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"26961b8c": "Token99chain(uint256,string,uint8,string)", +"26965dad": "deployStepOne()", +"269695fe": "groomVow()", +"269714dd": "maximumTarget()", +"269724ef": "assertEq6(bytes6,bytes6)", +"26976e3f": "upgradedAddress()", +"26987b60": "currentIndex()", +"2698eec9": "logFeeTokenMinted(address,address,uint256)", +"269975d0": "GameDetails(uint256)", +"2699a7e7": "setPOOL_edit_31(string)", +"2699c808": "tradeOption(address[3],uint256[3],uint256[2],bool,uint256,bool)", +"269a7c3f": "buyAndTransfer(address,address)", +"269aacc8": "getDividendPayout(uint256,uint256,uint256)", +"269b0737": "DaoCasinoToken()", +"269c4bca": "viewFoundersTokens()", +"269c6ece": "lockedTwoHasEnd()", +"269cdaac": "withdrawLockedTokens()", +"269db987": "calculateBonusAmount(uint256,uint256)", +"269de5a0": "EpicExchange()", +"269e4f3c": "refundWei()", +"269eb58c": "setFeeFromPayer()", +"269ecc6d": "backersAddresses(uint256)", +"269ecf28": "submitBuyOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", +"269f4663": "approveMintTokens(address,uint256)", +"269f96c9": "presaleSoldTokens()", +"269fe82e": "calcBurnAmountFromFeeBurner(uint256)", +"26a09392": "addSecondaryAddress(address,address)", +"26a1529e": "amountOfStakeReturnedOnCancellation(uint256)", +"26a18375": "setAvailability(bool)", +"26a21575": "tokenRaised()", +"26a26f71": "TgeTeamReleasingScheduleContract()", +"26a3bd4e": "subtractBalance(address,address,uint256)", +"26a3f45d": "initOwner1(address)", +"26a4861c": "CROWDFUNDING_PERIOD()", +"26a49e37": "price(uint256)", +"26a4c847": "maxLendingItem()", +"26a4e8d2": "setTokenAddress(address)", +"26a52019": "agentMakeOrder(address,address,uint256,uint256,address)", +"26a5a554": "removeFromReceiveAllowed(address)", +"26a65c10": "createDigitalArtFee()", +"26a6dfed": "toogleTransfers()", +"26a7985a": "getMaximumCallGas()", +"26a82e8b": "autoPreSaleSuccess(address,uint256)", +"26a8d1e5": "_changeManagerImpl(address)", +"26a934f5": "minResalePercentage()", +"26a9408c": "returnTokensFromHoldBountyAddress(uint256)", +"26a9de53": "verifiedTransferFrom(address,address,uint256)", +"26aa101f": "isTokenRegistered(address)", +"26aa7c58": "addBuyer(address,uint256)", +"26ab378b": "addMood(string)", +"26abc9ab": "CmctSale(address)", +"26abfe09": "burnUndistributed()", +"26ad3abc": "startTimeStage3()", +"26ad7b40": "_doesEveryTokenHaveLockupPeriod()", +"26ad8d1b": "getPositionStartTimestamp(bytes32)", +"26ae27d6": "lonmemay()", +"26aeba91": "FarziTokenSale()", +"26aebfac": "delPack(uint8,uint128)", +"26afe980": "queryOracle()", +"26b238d8": "doom()", +"26b3293f": "deposit(address,uint256,bytes32)", +"26b387bb": "pendingReturns(address)", +"26b3a6f8": "SelfKeyToken(uint256)", +"26b41613": "processFunding(address,address,uint256,uint256)", +"26b45b09": "rateTier4()", +"26b4ce7f": "NP(uint256,string,string)", +"26b51c8c": "finalBlock()", +"26b52faf": "firstWithdrawAmount()", +"26b66cb7": "amendedEarlyPurchases()", +"26b6c0b4": "settingsSwitchTransferAccess()", +"26b7d803": "getTotalBuyCount()", +"26b7fe35": "GainStuff(address,uint32,uint256)", +"26b85ee1": "myAddress()", +"26b85f0d": "mininumContributeUSD()", +"26b916b4": "Set_Interest_Rate(uint256)", +"26b92a0e": "SomniumToken()", +"26b93939": "Jokercoin()", +"26b9ce13": "setTransfersEnabled(bool)", +"26ba1c19": "addBagAndGiftAtTime(uint256,address,uint256)", +"26ba2e47": "paidETH(address)", +"26ba4319": "setDirector(address)", +"26baca1c": "getStats2()", +"26bca0f8": "get_my_info()", +"26bceb59": "mul256(uint256,uint256)", +"26bd4d96": "adPriceMultiple()", +"26bd78b9": "LogEvent(uint256,address,bytes4,bytes,uint256,uint256)", +"26bdd20b": "getNominatedMediator()", +"26bdd814": "refundPresale()", +"26bf02cf": "getBaseLevelUpFee()", +"26bf2051": "KickCommitteeVoteEvent(address,address)", +"26bfcde0": "GMCToken()", +"26bfd35c": "rewardAD()", +"26c009cb": "privateIcoSold()", +"26c0ad3a": "allowRefunding(bool)", +"26c19eba": "readValue(bytes32,uint8)", +"26c1e750": "planets(uint256)", +"26c21722": "getwithdrawEtherToAddressValue()", +"26c2bcb4": "checkBenefit(address)", +"26c30b50": "BITS(uint256,string,uint8,string)", +"26c32ff5": "demi(uint256,string,string)", +"26c387fa": "testFail_mint_without_add_authority_to_controller(int256)", +"26c3d6f8": "get_deposit_term(address,uint256)", +"26c435a9": "totalUsdFunding()", +"26c43d8f": "hodlerTotalCount()", +"26c47909": "SXCToken()", +"26c4b863": "XIOToken()", +"26c4fa3d": "setOfficialGameUrl(string)", +"26c5c154": "employeeAddress()", +"26c6d361": "FanCoin()", +"26c7edaa": "flip4(bytes)", +"26c81320": "lastgamewinner()", +"26c93389": "removeFreezableAddress(address)", +"26c989df": "holdBalance()", +"26c9959f": "LoveToken()", +"26c9bc42": "setTokenInformation(string,string,uint256)", +"26c9e547": "bestow(bytes32,uint256,address)", +"26ca1280": "_addToken(address)", +"26cb2257": "outRate()", +"26cb83b9": "setDescrutionContractAddress(address)", +"26cbb8ff": "inviterRegister()", +"26cbe6f5": "getHeroAvailableAt(uint256)", +"26cc2256": "blockRewardAmount()", +"26ccd77a": "withdrawStuckEther(address)", +"26ce3da0": "collectRefund()", +"26cee3a7": "getPlayerId(bytes32,bytes32,address)", +"26cf53b9": "BTL_PERSIAN()", +"26cf660d": "trustedOrderbook()", +"26cf9165": "pixelgrid()", +"26cfc76f": "TriPinCoin()", +"26d0d75a": "ResolutionProposals(uint256)", +"26d111f5": "note()", +"26d29ce0": "refundBid(uint256)", +"26d2b840": "addDadRelation(address)", +"26d2cba5": "updateMetaData(bytes32,bytes32,bytes32,uint256,bytes32,bytes32)", +"26d2eb11": "stopPostIcoAndBurn()", +"26d312f7": "sendWebGiftToken(address,uint256)", +"26d3325d": "getExpectedPayment(uint256)", +"26d3bde5": "execCUSEOption()", +"26d3df61": "deedsOf(address)", +"26d3e7e8": "inititalSupply()", +"26d3e889": "testCreateWithParentsForeign2()", +"26d3ed0a": "isSpentCustomerTxPaymentForMCW(address,bytes32)", +"26d541b0": "totalPlayerCount()", +"26d64f3b": "readTeam(bytes32)", +"26d6eca3": "retrieveReward(uint256)", +"26d7b3b4": "unRegister()", +"26d83db8": "LoveYToken(uint256,string,uint8,string)", +"26da881f": "setPrivateFundStart(uint16,uint8,uint8,uint8,uint8,uint8)", +"26da8e17": "ownerUpdateCostToCallOraclize(uint256)", +"26db3c0a": "tokenIssue(address,uint256)", +"26db7648": "proposedVersion()", +"26dcbcfc": "catPaymentCollector()", +"26dd1510": "pixelblockPrice(uint24,uint24,uint24,uint24)", +"26dd860a": "mintUniqueTokenTo(address,uint256,string)", +"26ddaebc": "getPriceWithBonus()", +"26dec45e": "getUserUsername(address)", +"26defa73": "addAuthority(address)", +"26df61f6": "permittedContractsCount()", +"26dfb6b4": "advteamPool()", +"26dfe583": "partialDivest(uint256)", +"26e010c8": "minInitialMarginAmount()", +"26e137c2": "getInterfaceImplementationStatus(address,bytes4)", +"26e23485": "renamingCostsPerChar()", +"26e33670": "NewQuiz(string,bytes32)", +"26e41a3e": "airdropTokens(bytes32,address[],uint256)", +"26e43db5": "TransferSell(address,address,uint256,string)", +"26e501a8": "BitonlineStore()", +"26e56c05": "SaleCapReached()", +"26e5ab38": "changeMaxWithdraw(uint256)", +"26e5afdf": "Yinfiniti()", +"26e5b0be": "stopMulti()", +"26e6050d": "setParamsIco(bool)", +"26e6074b": "frozenBalance()", +"26e683fb": "NotitiaToken()", +"26e72d31": "resetCurrentRoundSales()", +"26e770e9": "Information()", +"26e77179": "PaymentRefunding(uint256,address,uint256,string)", +"26e80650": "upPlayerRound(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"26e85250": "viewRequest(uint256)", +"26e89689": "applyForCertifition(address,string,uint256,string,uint256,bool)", +"26e8cd23": "bobMakesEthDeposit(bytes32,address,bytes20,bytes20,uint64)", +"26e90775": "calculatePrize(uint256,uint256,uint256)", +"26e97fce": "allowMint(address,uint256)", +"26e9fd9e": "remove(bytes20)", +"26ea66bf": "Mortal(address)", +"26ea74e2": "approvedDividendsOf(address)", +"26ea7ab8": "changeadmin(address)", +"26ea9268": "FEE_SELECT_MAX_VALUE()", +"26eaee92": "devReward()", +"26ebc8af": "UserAuthorizedForToken(address,address,address)", +"26ebe0bf": "totalCentsGathered()", +"26eca77c": "HelloGoldRound1Point5()", +"26ed274e": "decreaseBurnApproval(address,uint256)", +"26ed794b": "mobilinkTeamAddress()", +"26eda1ac": "putMessage(string)", +"26ef8ba1": "putEth()", +"26f08aec": "setotherchainstotalsupply(uint256)", +"26f09042": "testThrowNoFreeTokens()", +"26f1069f": "approvePresale(address)", +"26f21080": "allowedToTransferOf(address)", +"26f2458a": "RequestP(bytes32,bytes32)", +"26f35ff2": "activenessUpgrade(uint256,uint256)", +"26f3ceaf": "TSToken()", +"26f4739e": "LogBuyTokens(address,uint256,uint256)", +"26f489f6": "_updateCardPerkText(uint256,string)", +"26f4b3de": "userTakeOrder(address,address,uint256,uint256,address)", +"26f590f6": "setAttribute(string,string,bytes)", +"26f59b8b": "ProICOHardcap()", +"26f6ec3b": "getCities(uint256[])", +"26f743d0": "createGuess(uint256,uint256,uint256,uint256)", +"26f78835": "XXXChain()", +"26f86791": "_indexOf(string,string,uint256)", +"26f8abf9": "getRankOnePlayer(address)", +"26fa9082": "Enumivo()", +"26faae42": "addChild(address,bytes32,bytes32)", +"26facdb1": "TeamTokenDistribution(address)", +"26fae0d3": "setMaster(address)", +"26faf1e9": "SVLightIndex()", +"26faf9c2": "EatMeCoin(address)", +"26fc4c7f": "returnTokens(address,uint256)", +"26fc71eb": "isConfirmedGblock(bytes32)", +"26fd8422": "calculateEggBuy(uint256,uint256)", +"26fdb484": "OwnershipRevoked(address,address)", +"26fe18e2": "setMintingOracle(address,address)", +"26fe2024": "newRate(string)", +"26fe7cf2": "createStar(uint8,uint16,string,string)", +"26fe9951": "delegatedFrom()", +"26feba74": "MaorTestCoin()", +"26fed988": "addCancelledOrFilled(bytes32,uint256)", +"26ffa189": "setEnableWhiteList(bool)", +"2700615c": "_getShipInfo(uint256)", +"27018631": "icoBonus()", +"2701d40f": "ForSale()", +"2701ebd8": "NDT3()", +"27028aae": "voteOnBounty(uint128,uint256,bool)", +"27029357": "addToReceiveAllowed(address)", +"27029e83": "BurnToken(address)", +"2703506f": "CouponDeposit(address[2],uint256[8],uint8,bytes32[2],uint256)", +"2703e545": "projectInfoPublic(address)", +"2704355c": "setGenesisCallerAddress(address)", +"2704e8e9": "addRemovableIdArrayItem(address,uint256[],string,string,string,address)", +"2704ead4": "_isValidSkin(address,uint256,uint256)", +"27053417": "_updateSeed()", +"270537c0": "lockReserveTokens(address)", +"2705ce6a": "setAuditorDelegate(address)", +"27066ebb": "getOwnedTokensIds(address)", +"27071f6a": "_tokenOfOwnerByIndex(address,uint256)", +"270835d0": "allocateBid4a(bytes32)", +"2708a710": "MintHelper(address,address,address)", +"2708db73": "requestLeave(uint256,string)", +"270a3856": "startDist()", +"270a5420": "buyFST()", +"270a8ef7": "existingMarketOrder(uint256)", +"270abf36": "getChickenAmount()", +"270ba309": "getRegistryDataInitialized()", +"270bb8ad": "setImmigration(address)", +"270bfc07": "fundingAccount()", +"270cf206": "ENSReverseRegister(address,string)", +"270cfee1": "getTokenAccount()", +"270d13fb": "isCoinIdUnique(uint16)", +"270dc9fd": "changeName(string,uint256)", +"270e4cf0": "buyerAddressTransfer(uint256,address,address)", +"270ef385": "CLAIM_AMOUNT()", +"270f611f": "burnBalances()", +"270f7219": "getJntController()", +"270f9359": "Exploit(address)", +"270fdd1a": "GricCoin()", +"2710ddcb": "setMsg(bytes32)", +"27120de9": "numberOfStarsReserved()", +"27121069": "verify(bytes,uint8,bytes,bytes)", +"27121b76": "claimDailyLoot(uint256)", +"2712d916": "setSanTTTCost(uint256)", +"27132be6": "getCustomBuyerMappingCount(address)", +"27136e46": "changeTransactionService(address)", +"2713a1b4": "getUserWithdrawnBalance(address)", +"27150f01": "devFeeSize()", +"27151526": "nextBid()", +"27158b7b": "MFToken()", +"271619fb": "CreateContract(int256,int256,uint256,uint256,int256,address,string,uint256,int256,string,uint256)", +"27164f15": "getBuyOrdersInfo()", +"2716783d": "distributeERG(address[],uint256,uint256)", +"2716baa6": "startContruibute()", +"271761c0": "EventSuccessfulTraining(uint64,uint64,uint64)", +"271781ad": "getRestSumStageICO()", +"2717cc7c": "ParticipatedInVoting(address,address,bytes32,uint256)", +"27180e42": "wantItMoreThanYou(uint256)", +"27187991": "setEtherPrice(uint256)", +"271a50db": "setAgonFight(address)", +"271af8c1": "tokenCollector()", +"271b3e8a": "snakemasterReq()", +"271b5311": "getValidateSignatureAddress(address,string,uint256,uint8,bytes32,bytes32)", +"271bac4a": "setBonusPhase(bool)", +"271c34d7": "denyProposal(uint256)", +"271cacbf": "batchAddToWhitelist(uint256,address[])", +"271cd760": "getPackageDb()", +"271d9090": "HenryToken()", +"271dd15b": "getWinNumberAddress(uint256,uint256)", +"271dec50": "Invested(uint256,address,uint256,uint256)", +"271df6e5": "canLotteryFree()", +"271f88b4": "setAmount(uint256)", +"271fe8be": "buyNormal(address)", +"2720e4f6": "LC()", +"27213345": "totalSupplyToken()", +"2721a114": "queryWinner(string)", +"2722692c": "lastBlockSet()", +"2722c043": "raiseEventIfMinted(address,uint256)", +"27234ecc": "takeBalance(address,address,uint256,address)", +"2723639b": "getPixelAreaColor(uint256,uint256,uint256,uint256)", +"2724312a": "Micropayment(address)", +"27243160": "bookmark(string)", +"2724e032": "manualEndDay()", +"27258b22": "isRegistered(bytes32)", +"2726403a": "testCanTrade(address,address)", +"2726a530": "getHodlHasBeenWithdrawn(uint256)", +"2726b506": "getDeposit(address,uint256)", +"2726f061": "commitVotes(address[],bytes32[],bytes32[],bytes32[])", +"27270550": "swapAble(bool)", +"27275a35": "SuretlyToken()", +"2727d018": "PlusPayLite()", +"272870ac": "pausable(bool)", +"272894ca": "refundTokenBet(uint256,uint8)", +"27295d7c": "updateMaxPhase2(uint256)", +"272961ff": "depositAgent2(uint256,uint256,bytes,uint256)", +"2729f44e": "addTxToRegistry(bytes32,bytes32,uint256,uint256,uint256)", +"272a33e8": "allocateBid2(bytes32)", +"272a3e16": "PlayerWon(uint256)", +"272a847f": "HAICrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"272ae0b5": "MIMIMUM_CONTRIBUTION_AMOUNT_PREICO()", +"272caf69": "stakeContractAddress()", +"272cda88": "EternalDB()", +"272d20e7": "amount_direct()", +"272e20fa": "__abort__()", +"272edeac": "currentMineTokenAmount()", +"27301964": "withdrawDevTokens(address,uint256)", +"2730e4a2": "_arrangeMasternodeFlow()", +"273123b7": "delBot(address)", +"27315b5f": "Settlement(address,address,uint256,string,string)", +"27329380": "getRecentPlayersCount()", +"27329b05": "enableBot(address)", +"27332624": "_lottery(uint256,address,address)", +"27341c8a": "isEmpty(string)", +"2734242b": "BunnyToken()", +"273696cd": "SetImplementation(address,address)", +"2736a558": "removeBackdoor()", +"2736f6d9": "setTokenAndRate(uint256,uint256)", +"2737033f": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"27374015": "functionFive()", +"27378684": "price4()", +"27380c2c": "updateAngelCardSeries(uint8,uint64,uint64)", +"2738154e": "checkRokBounty()", +"2738a112": "triggerSelfDestruction()", +"2738bf4d": "addLeaderboard(string,string,uint256)", +"2738ed25": "Player_Bettings(uint256,uint256)", +"27393390": "setTokensMultiplier(uint256)", +"273a041c": "_self()", +"273a5729": "eligibleTokens()", +"273afe15": "ParisToken()", +"273b1dd3": "RealMadridvsLiverpool()", +"273b1fb3": "betbucketOne()", +"273b465b": "verifiedAgeOver(address,uint256)", +"273ba6bb": "ICO()", +"273bc3c9": "numberOfThrones()", +"273ca81c": "getMegaBalance()", +"273cb593": "isMasterOfCeremonyRemovedPending()", +"273cbaa0": "getTokenList()", +"273cc2a5": "depositOpen()", +"273dd51f": "_distributeHorse()", +"273e2c78": "F2UPay()", +"273ea3e3": "incrementNumber()", +"273f1de7": "paySellerFee(bytes32,address,uint256)", +"273f4940": "set(bytes32,uint256)", +"273f9ace": "getNumbers(bytes32[])", +"273f9bed": "signedTransferFromCheck(address,address,address,address,uint256,uint256,uint256,bytes,address)", +"273fd520": "EthlanceFeedback(address)", +"2740509d": "urbitTeamTokensVault()", +"2740e64b": "getInitializeParentPayoutDistributionHashValue()", +"27411dfd": "getPoliceFee(uint256)", +"27413437": "grantFounderToken()", +"2741876a": "totalPresses()", +"2742d511": "setWhitelistedStatus(address,address,uint256)", +"27436b59": "getCarCount()", +"274465b4": "payForMyself(uint128)", +"27457b3b": "getMyInventory()", +"27458664": "enableTokenMinting()", +"27458cbc": "disallowClaimer(address[])", +"274748e6": "setInactivityReleasePeriodForToken(address,bool,uint256)", +"2748503f": "ChangedOwner(address,address)", +"27486a7c": "combineCards(uint256[])", +"2748d7e4": "claimPlotWithData(uint256,string,string,string,string)", +"2749bd81": "getTimestamp(address,uint256)", +"274a1f29": "setNextLotteryTTMTokenId4(uint64)", +"274a9b1c": "addressToEtherContributed(address)", +"274acb35": "add(uint96,uint96)", +"274b1615": "keyValidations(address)", +"274b3df4": "deposit_eth()", +"274b9bc5": "ETHx2()", +"274bc107": "test_threeValidEqBytes()", +"274c343a": "HTCCToken()", +"274c7922": "privilegedAddress(uint256)", +"274db4d6": "_price_tokn_PRE()", +"274ed288": "debtBalanceOf(address,bytes4)", +"274f97bb": "buyReply(uint256,uint256)", +"274faa9f": "minContributionUnits()", +"274fadf6": "updateServiceDescription(address,uint32,string)", +"274ff7ce": "burnFrom(uint256)", +"27506099": "getCountPlayersOfOwner(uint256,address)", +"27507458": "isLive(uint256)", +"2750fc78": "setIsActive(bool)", +"275103fd": "hault()", +"27521702": "mint(int256,address,uint256,bool)", +"2752808a": "CAPcoin()", +"2752de56": "addMoneyPool(address,address)", +"27538e90": "getCapabilityRoles(address,bytes4)", +"2753d7f2": "artworksFactory()", +"2753f254": "workedTodayInSeconds()", +"2754ff69": "test_2_ensureProposalExecution_increaseBlocksBy100()", +"2755a13b": "forceClose(uint256)", +"2755cd2d": "tip()", +"275601f6": "getAllProviderParams(address)", +"27566b80": "transferCollectedEther(address)", +"275676cf": "ClassicVolkswagen()", +"27567c4c": "setIsPoop(string)", +"2756d38a": "IonChain()", +"27571087": "getBonus(bytes32,uint8)", +"2757a07c": "SSDDTT(uint256,string,string)", +"2757e976": "transferredIndex()", +"2758743c": "LATINOToken()", +"27589224": "minBuyingRequestInterval()", +"275893a9": "updateMaintenanceAddress(address)", +"27593eee": "ChangedName(address,string)", +"27597f0a": "costForProductCycles(uint256,uint256)", +"2759ea4a": "lookupSprite(uint256)", +"275a1334": "buySellPrices()", +"275a329a": "BCASToken(uint256,string,string)", +"275a92cf": "TokenPurchase(uint256,uint256,address,address,uint256,uint256)", +"275acbe3": "ln(uint256,uint256,uint256)", +"275b6eb0": "calculateSeedSell(uint256)", +"275babee": "getRareInfo(uint256)", +"275be02c": "MRBLToken()", +"275beec6": "createItem(uint256,string,address,uint256,string,string,uint256)", +"275bf230": "addAddressToAccount(address,address)", +"275c82ca": "GasUsed(uint256)", +"275cb687": "setNextPoolPercentage(uint256)", +"275ccb13": "computeLeaf(uint256[],uint256)", +"275d60bc": "getReturnAddress(address)", +"275e2d3f": "st4ckCount()", +"275e2f86": "MORCoin(uint256,uint256,uint256,address)", +"275e5da5": "probe(address)", +"275f3d92": "view_readyTime(address,address)", +"27608c24": "unsoldToken()", +"2760c57e": "lastPing()", +"276184ae": "erc20Address()", +"2762484a": "SBIToken()", +"2762cf10": "contract_transfer(uint256)", +"2763d8fb": "FabCoin()", +"2765faae": "MaximalInvestmentTimeTresholdChanged(uint256)", +"276605bc": "updateFundingStartBlock(uint256)", +"27669781": "emitInfo(uint256,uint256,address,uint256,uint256)", +"27678dca": "getHWCAddressCount()", +"27687d34": "advisersTokenTimelock()", +"276920eb": "setOwnerTokenPercentage(uint256)", +"276927c5": "sellSpaceship(uint256,uint256)", +"2769b96b": "updateItemPrice(uint256,uint256)", +"2769c89a": "setGameStartTime(uint256)", +"276a28a3": "isTokenLocked(uint256)", +"276b94e1": "copypaste()", +"276bf637": "isTimedout(uint256,uint256,uint256)", +"276c9d0a": "balanceOfOld(address)", +"276cd2e8": "BTTPERETH()", +"276e3968": "bits(uint256,uint256,uint256)", +"276e6472": "deleteById(string)", +"276ebc6a": "ChargeTest()", +"2770a488": "transferWithIndex(address,uint256,uint256)", +"2771083f": "setSpreadPercent(uint256)", +"27729e93": "openLottery(uint8)", +"2772dffd": "votes(bytes8)", +"27731e77": "setCCH_edit_9(string)", +"27734225": "getCommitteesNumber()", +"2774d052": "mintPresell(address,string)", +"277576ca": "theTurn()", +"27757c49": "isVariation()", +"2776a859": "computeResponseSecondHalf(uint16)", +"2776b163": "setstoredaddress(address)", +"27773ba2": "addrAirDrop()", +"27782e42": "refreshActiveShareholdersArray()", +"27783050": "getEntryHash(address,uint256,bytes32)", +"27793f87": "outcome()", +"277942db": "marriageLicenceImageIPFShash()", +"27796092": "t4tToken()", +"2779ea96": "addPostOnBoard(address,address,address)", +"2779eb52": "setUserRank(address)", +"277a6889": "calculateInterest(uint32,uint256)", +"277ad1f6": "amountSellForOneEth()", +"277ad5d8": "secondRoundMayDiscount()", +"277ad6d4": "PreSaleResumed()", +"277b2db6": "getPlayerVaults()", +"277b6527": "targetCrowdsale()", +"277b8ffc": "getBeneficialAddress()", +"277ccada": "unlistTrophy(uint256)", +"277ccde2": "getHKGPrice()", +"277d4725": "getEthereumToken()", +"277e1b16": "changeMaxDonationLimit(uint256)", +"277e1de7": "transferAccessory(address,address,uint64)", +"277e268e": "testFail_set_label_unauth()", +"277ea83d": "getTrustPlatform()", +"277f6331": "ETVRToken()", +"277fc0e9": "getSignature(address)", +"277fc17d": "daysToSeconds(uint256)", +"277fef99": "transferPoint(uint32,int256,address,bool)", +"27806a16": "DoxCoin()", +"2780d22b": "getMigrateMarketInFromNiblingCalled()", +"27810b6e": "burner()", +"27815883": "_setHairValue6(uint256)", +"27816235": "onSaleEnded()", +"27816932": "AdaptableToken(uint256,uint256)", +"27816ffc": "logMarketFinalized(address)", +"2781c3d1": "ownerSetdiceRollAddress(address)", +"2782ca8d": "MINIMUM_PURCHASE_IN_USD()", +"27836f77": "setImageData(uint256)", +"2784ad48": "computePayment(uint256,uint256)", +"2784d868": "getMiniPoolEdit_2()", +"2784e3f3": "refundVotingTokens(address,address)", +"27854452": "allocateAgents(address)", +"2785ed21": "LogCertificationDocumentAdded(address,bytes32)", +"2785fb98": "getContributionETH(address)", +"27860587": "TXToken()", +"27869c57": "gluon()", +"2786f089": "setUserAllocMin(address,uint256)", +"2787fac2": "LordCoinPreICO(address,address,uint256,uint256,uint256,uint256)", +"27880e1f": "KyberNetwork(address)", +"2788f4f3": "OraclizeCallback(bytes32,string)", +"2789192f": "isConfirmedSettingsRequest(uint256)", +"27895f13": "_advanceClock(bytes32,uint256)", +"27899ce2": "allowNewReceiver(address)", +"27899d9b": "LGOToken()", +"278a3684": "advisorAmount()", +"278a4c4f": "setMasterToReferral(address,address)", +"278a5e7c": "cancelScript(address)", +"278ab692": "startDispute(address)", +"278af72c": "isSaleClockAuctionStorage()", +"278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"278bb4a2": "EthealDeposit(address,address)", +"278bee92": "_receiveMakePlant(address,uint256,uint256)", +"278c284c": "CrowdsaleToken(string,string,uint256,uint8)", +"278c2977": "chooseOpponentForGladiatorBattle(uint256,uint256,bytes32)", +"278c3030": "phase_2_Time()", +"278c4d71": "peaceOfTRC20(address,uint256)", +"278c688e": "getBackToken(uint256)", +"278cc714": "getUsablePlayerFibokens(address)", +"278d6e5b": "funcArrayInArguments(address[],address[])", +"278d818c": "setMaxRankingSpots(uint8)", +"278d9637": "limitTransfer()", +"278e07ce": "setStatus(address,uint8)", +"278e72da": "_destroy(uint256)", +"278e9d03": "testMemoryIntegrityCheck33Bytes()", +"278ecde1": "refund(uint256)", +"278f05ba": "SolomexCrowdSale()", +"278f2ab8": "deposit(bytes32,uint256,uint256)", +"278f49b9": "SetupRaffle(string,string)", +"278fcffa": "accountsLastClearTime(address)", +"278ffa13": "confirmTopUpLimit(uint256)", +"279029b3": "remainingARXSupply()", +"27904ee0": "getRabbitMotherSumm(uint32)", +"2791cb17": "setClientLastSupplyID(address,uint256)", +"2792949d": "BTC()", +"2792e765": "transferCroupier(address)", +"27933ffa": "LYToken()", +"27939ea2": "issuerReservedMaximumPercentage()", +"2795348d": "KittenSelfDrop2()", +"279586f3": "AltBuy(address,uint256,string)", +"27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"279616fe": "TransferDissolved(address,address,uint256)", +"27962fc1": "tokensAmount(uint256)", +"27970ea1": "updatePlayerRecommendFund(address,uint256,uint256)", +"27972584": "MintRestarted()", +"27972b99": "StarterToken()", +"27972e8f": "GRVToken()", +"27979b35": "genLevelExpGain()", +"2797e0c3": "getInitBlockNum()", +"27987533": "defaultResolverChanged(address,address)", +"2798cecd": "requestData(address,uint256,uint256,bytes32,address,bytes4,bytes32,bytes)", +"2798d1b2": "my_token_balance()", +"2799276d": "totalItems()", +"279a34f1": "switchSaleStage()", +"279a475f": "TJToken(uint256,string,uint8,string)", +"279aa01f": "getManualAddress(uint256)", +"279b4e76": "createAuction(uint256,uint256,uint64,uint256)", +"279b9562": "initIntervals()", +"279b9c7b": "HJToken()", +"279bad16": "fuel()", +"279c7425": "getTokensOwed(address,uint16)", +"279c94c0": "admin_add(address)", +"279cea35": "execScript(bytes,bytes,address[])", +"279ddc64": "SetBankerCandidate(uint8,address)", +"279e02a0": "getMemberDividendsAmount(address)", +"279e0912": "getDownloadPrice()", +"279e1c43": "_createCollectible(uint256,uint256)", +"279e79b5": "ZebiCoinCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"279f5d31": "pop1()", +"279fdf6d": "trustedVault()", +"279fdf96": "setPresaleMarketAddress(address,address)", +"279fe967": "maxEthCapSellInFp()", +"27a030eb": "getRandomLotteryTicket()", +"27a06733": "setKycRequirement(address,bool)", +"27a099d8": "getOperators()", +"27a0d669": "getImplementation(string,string)", +"27a1a414": "allowedLocks(uint256)", +"27a1d948": "doubleDown(uint256)", +"27a1f35a": "setOpenStatusEgg(uint256,bool)", +"27a21061": "to_start_ico()", +"27a2aee2": "Commission()", +"27a3181d": "price2()", +"27a3e16b": "setBlockRewardContract(address)", +"27a3fe41": "getMintLimit(address)", +"27a49cbe": "BankrollLending(address,address)", +"27a5428b": "setLevel(uint256)", +"27a5b3bc": "transitivePath(bytes32,bytes32,bytes32)", +"27a5c7c6": "voteDecline(uint256)", +"27a5e952": "testDecimalsUsingDeployedContract()", +"27a69644": "checkTransferDelegated(address,address,uint256,uint256,uint256,bytes)", +"27a6a7de": "newMinimalEthers(uint256)", +"27a75474": "salvageNotAllowedTokensSentToContract(address,address,uint256)", +"27a7b827": "updateExistingMember(address,uint256)", +"27a7c883": "transferWithExtra(address,uint256,bytes32,bytes32)", +"27a822df": "smart()", +"27a82833": "_supportsInterface(address,bytes4)", +"27a8890e": "withdrawedCoummunityCounter()", +"27a910dc": "ownerWithdrawETH()", +"27a936d7": "BlockchainBattleground()", +"27a93cce": "playerGetPendingTxByAddress(address,address)", +"27a9ec0f": "IDice()", +"27ab6871": "addCandidateByIndex(uint256,address,bytes32)", +"27ab9f20": "botIndexToOwner(uint256)", +"27ac36c4": "reserveTokens()", +"27ac4b70": "getNamespace()", +"27ac7934": "transferPAIReceiptOwnership(address)", +"27ac9e5f": "periodNow()", +"27acfff9": "badgeFreeze(address,uint256,uint256)", +"27add9fb": "VoxelRepainted(uint8,uint8,uint8,uint8)", +"27ae587c": "MAX_TOKEN_REWARDS()", +"27ae949f": "buyFST0(address)", +"27aeafb7": "AuditorUnregistered(address)", +"27aedd10": "Founders()", +"27aeeaa8": "AxiePresaleExtended()", +"27af1d98": "disToken(address)", +"27af7d9c": "assertEqDecimal(uint256,uint256,uint256)", +"27af9e38": "space()", +"27b00b3e": "setUpdateState(bool)", +"27b022af": "MembershipChanged(address,bool)", +"27b075a7": "FlCToken()", +"27b0c674": "updateEtherBalance()", +"27b37367": "parseLoanOffering(address[9],uint256[7],uint32[4],bytes)", +"27b380f3": "withdrawalRequests(address)", +"27b3a83c": "buyAtIndex(uint256)", +"27b3bf11": "claimTime()", +"27b44a6c": "pendingWeiAmount()", +"27b4634e": "transmuteTransfer(address,uint256,address,string,string)", +"27b4e228": "setPoolFeeRate(uint256)", +"27b55475": "review(string,bool)", +"27b57aee": "emissionContractAddress()", +"27b57fcc": "sumValues(uint256,uint256)", +"27b5985b": "addToException(address)", +"27b5aaf8": "RESERVE_TOKEN_AMOUNT()", +"27b5db8a": "addPlayer()", +"27b752b8": "sha3HexAddress(address)", +"27b7a2f5": "nameRegistryAddress()", +"27b7cf85": "log(bytes32)", +"27b7d0a6": "EditDomain(string,string)", +"27b96df7": "pausePayment()", +"27b972f9": "getNameOwner(string)", +"27b9c257": "setRequestProcessed(uint256)", +"27bb020a": "altarCut()", +"27bb1db7": "SOPToken(string,string,uint256)", +"27bb2d82": "_checkPixelIdExists(uint256)", +"27bb3d0f": "eth_price()", +"27bb46f0": "removeActiveArray(address)", +"27bb6d8e": "buyoutCost(uint256)", +"27bbea3a": "setWhiteListAddress(address)", +"27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", +"27bcc9ca": "finalizeConfig()", +"27bce91b": "betId()", +"27bd56d9": "sendAuctionQuery(uint256,uint256)", +"27be1b35": "promoCode()", +"27bf6568": "authorityBalance()", +"27bfeaf5": "setGemPrice(uint256)", +"27c16605": "getBidByProducerAndDay(address,uint32)", +"27c1f423": "preBuy1()", +"27c2e437": "buyTokensFromBalance(address,uint256)", +"27c36a47": "specialAllowance(address,address)", +"27c39749": "test_oneValidEqBytesUint(int256)", +"27c42050": "buildIdentifier(address,address,address,bytes32,uint128,uint128,uint256,uint32,uint64,uint64,string)", +"27c4a208": "GSCoin()", +"27c4bde8": "Planethereum(address,address)", +"27c5cdea": "test2(address[5],uint256[5])", +"27c5e534": "mixDNK(uint256,uint256,uint256)", +"27c67440": "getWarranty(string,string,address)", +"27c6c720": "privateWallet()", +"27c725e1": "applyforCetification(string,string,string,string,string,string,bool)", +"27c78c42": "request(address)", +"27c7ff61": "noShares()", +"27c81eb8": "TestDRMK()", +"27c830a9": "emergencyPaused()", +"27c8dae5": "getAmountOfLinkerBuy(uint256)", +"27c96207": "WinnerAnnounced(uint8)", +"27c97fa5": "deauthorize(address)", +"27cadd13": "getSides(uint256,uint256)", +"27cc1fd8": "party_b()", +"27cca148": "lastClaimedBlock()", +"27ccdbc5": "setWalletContract(address)", +"27ccdd0a": "changeServiceReceiptAddress(uint32,address)", +"27cd0d96": "getLockedAmount_simus(address)", +"27cd933a": "RequestEvent(address,address,uint32)", +"27cda9d5": "AcceptsEtheropoly(address)", +"27cdab06": "fee(bytes32)", +"27cdbf4a": "existingNames(bytes32)", +"27ce5b8c": "getNumberOfOutcomes()", +"27ce6fa9": "unlockup(address)", +"27cef820": "hasForgivedChar(string)", +"27cfe856": "DAY()", +"27d120fe": "updateTransfer(uint64,uint256,bytes32,bytes32,bytes)", +"27d1913c": "buyerCancel(uint16,address,address)", +"27d1c3a6": "transferChamp(address,address,uint256)", +"27d1f39e": "mastery()", +"27d21602": "buildings_total()", +"27d23b86": "receive(address,uint256,bytes)", +"27d26d6e": "testCannotRedeployANT()", +"27d272c5": "getFirstBuyersFee()", +"27d3a8ad": "LogUpdatedComplianceProof(bytes32,bytes32)", +"27d42fc0": "setReservedWallet(address)", +"27d511ae": "activateCommunityFund()", +"27d51979": "getTokenTransferSetCount()", +"27d6ba21": "getDistributedToken()", +"27d6c032": "unregister(bytes)", +"27d6d6e0": "ownership(address)", +"27d6dfbf": "BITNT()", +"27d741df": "SALE_END_DATE()", +"27d7874c": "setCEO(address)", +"27d795d7": "start_date()", +"27d8455c": "setMainSaleStartAndEndTime(uint256,uint256)", +"27d87924": "registerNameXaddr(string,address)", +"27d8a9e5": "CofounditICO(uint256,uint256,address)", +"27d8fb97": "removeLaureato(string)", +"27d93a70": "addFighter(address,address)", +"27d94182": "MAX_PRIVATE()", +"27d95c8c": "getContaOuvidoria(uint256)", +"27d9ac67": "NewMarketMaker(address,string)", +"27da0078": "SpindleToken()", +"27da5ca5": "batlordReq()", +"27dad426": "init(address,string,string,uint8,uint256,bool,bool)", +"27db9e82": "reevaluateETHPrice(uint256)", +"27dba183": "getProcessablesSize()", +"27dba807": "buyWithBonus(address)", +"27dc297e": "__callback(bytes32,string)", +"27dc7085": "getInvestorInforValue(address)", +"27dd16e5": "paymentAction(bytes32,uint256[],uint256[])", +"27dd3873": "plantedTime()", +"27dd941e": "unlockDates(uint256)", +"27ddbb16": "mnyLeftInCurrent()", +"27de1a4d": "mintToAddressesAndAmounts(address[],uint256[])", +"27de1fc9": "fixPlayerCountryString(uint256,string)", +"27de2459": "HungerCoin()", +"27de2765": "Assert(bool)", +"27de9e32": "unbond(uint256)", +"27defa1f": "onlyAmbassadors()", +"27df664b": "minPrivateContribution()", +"27dffba6": "startRegularPhase()", +"27e056a5": "addMinter(int256,address)", +"27e07647": "setFundingFueled(uint256)", +"27e0feaf": "_allocateTokens()", +"27e10295": "storedProfit(address)", +"27e152bb": "maxCoinSides()", +"27e1f7df": "deleteAdmin(address)", +"27e235e3": "balances(address)", +"27e2dd48": "getRandomSeed(string)", +"27e44059": "VReetUp()", +"27e56719": "ENIGMA()", +"27e584d4": "TOTAL_PARSEC_CREDIT_SUPPLY()", +"27e65007": "min_investment_presale_eth()", +"27e728ec": "enableCodeExport(address)", +"27e72e41": "defaultDelay()", +"27e7c023": "sendTokensToFounders()", +"27e7e21e": "air()", +"27e7fe5a": "ONEPERCENT_TOKENS_PER_ETH()", +"27e8c2d8": "burnUnicornShares()", +"27e90a7e": "offerBorrowingItem(uint256,uint256,uint256)", +"27e95f87": "pubkeys2()", +"27e9a0b6": "files(bytes32,uint256)", +"27e9b1a0": "getArrLength()", +"27e9f294": "addItem(string)", +"27ea06b8": "numberOfTokensLeft()", +"27ea6f2b": "setLimit(uint256)", +"27eac914": "cancelAuction(uint32)", +"27eb95cf": "deathData_v13()", +"27ebcf0e": "sharesTokenAddress()", +"27ebe40a": "createAuction(uint256,uint256,uint256,uint256,address)", +"27ec2c03": "getAvgPps()", +"27ed31ff": "localityCode()", +"27ed810d": "setMaxBlockDrift(uint256)", +"27edf097": "burnPerTransaction()", +"27eea9cd": "CCCCCToken(address)", +"27eeefa6": "paymentOnTime(uint256)", +"27ef89bc": "DEV_TEAM_PORTION()", +"27ef986d": "ExternalToken(address)", +"27efc086": "TOTAL()", +"27f02f74": "core(uint256,uint256,uint256)", +"27f05e06": "distributeTokensPreIco(uint256)", +"27f06a6e": "permitChildContract(address[])", +"27f06fff": "requestFillUp(uint256)", +"27f12c8e": "registerAsImportingAuthority(address)", +"27f1bb7f": "prefixedHash2(address)", +"27f1f521": "Kurecoin()", +"27f2402b": "acceptSacrifice(uint256)", +"27f2db32": "finalizeChangeStaker()", +"27f397a9": "borrowerReturnFiatAmount()", +"27f39abf": "tokenOwnerWallet()", +"27f3a72a": "thisBalance()", +"27f3fb69": "setMachine(bytes32,bytes32,uint256,uint256,uint256,uint256)", +"27f498c9": "changeTokenSender(address)", +"27f4b056": "getDemocInfo(bytes32)", +"27f50a2d": "getDocuments(address)", +"27f576d1": "withdrawFromReserve(address,uint256)", +"27f69c37": "roundInvestorInfoByIndex(uint32,uint32,uint32)", +"27f6e676": "addApprovedGame(address)", +"27f7be99": "boosterContract()", +"27f85c13": "setUsdEth(uint256)", +"27f8ce38": "gamePause()", +"27f8d7ba": "setEndPreICO(uint256)", +"27f93e59": "createContractMeme(uint256,string)", +"27fa35c3": "getMarketsCount()", +"27fb1da7": "ICOState(bool)", +"27fbcac5": "getChannelFeed(address,uint256,uint256)", +"27fc2414": "follow(address,uint8)", +"27fde806": "erc20GST(uint8)", +"27fe0d10": "maximumWEI()", +"27fe75ed": "lockTokenLocker()", +"27ff1374": "TotalDeposited()", +"27ffb7b0": "purchaseRound()", +"28006b31": "makeLiquidPri()", +"28012606": "createAuction(uint256,uint256,uint256,uint256,address,uint256)", +"2801617e": "set(address)", +"2801e43a": "authorizedLoggers(address)", +"28026ace": "depositAndApprove(address,uint256)", +"2802cacc": "cancelOrderByAdminWithPayer(string,address)", +"280376b3": "CinderTokenSale()", +"2803d8e5": "MIN_TOKEN_UNIT()", +"28043306": "migrateTransfer(address,uint256)", +"28044357": "CollectibleIndex1()", +"280464ed": "fundsToTokens(uint256)", +"28046f30": "handleBlockBalanceLedger(address,uint256,uint256)", +"2804b2c0": "customer()", +"2807eece": "purchaseNo()", +"2808241e": "vote(uint8,bool)", +"28086f18": "bidETHMin()", +"2808c8ad": "thisContractBalance()", +"28090abb": "logSweep(address,address,address,uint256)", +"2809c5e1": "isBountyAllocated()", +"2809c7e1": "AuctionCancelled(uint256)", +"2809df16": "MetaUpdated(string,string)", +"280a3382": "fundariaTokenBuyAddress()", +"280af7d3": "setData(string,string,string)", +"280b8846": "Token(string,string,uint8)", +"280c2604": "SCADA_requires_hard_cap()", +"280ca666": "getAllElements()", +"280cd0e6": "getBetSizeAtRound(uint256)", +"280da6fa": "withdrawAllTokens()", +"280dd460": "adjustFeePercentage(uint256)", +"280e0359": "bonusLevel0()", +"280e682c": "mintImpl(address,uint256)", +"280f958e": "transferLockedFrom(address,address,uint256,uint256,uint256[])", +"281027b9": "isPrimaryOperator(address)", +"28102e54": "amountWon()", +"2810dd4a": "ParcelXToken(address[],uint256)", +"2810e1d6": "resolve()", +"28111984": "setIcoState(uint8)", +"281134bc": "noahToken()", +"2811d4e0": "sendSecondBatch(address[],uint256[])", +"2812988f": "object()", +"2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", +"281318c8": "all_unfreeze()", +"281336b4": "terminateEmployee(address,uint32,uint32,uint32,uint8)", +"2813acc9": "indexAccount()", +"2813de17": "toggleTransferablePending()", +"28148d07": "setCategoryVerify(uint256)", +"2814a371": "createOfAthleteCard(string)", +"2814da3c": "transferDeposit(uint256)", +"28155727": "makerWithdrawEther()", +"2815741c": "Sort()", +"28159ef6": "removeIcoContract()", +"2815cc38": "discoverNewPlanet(uint256,uint256,bool)", +"2815f054": "setTCoinContractAddress(address,address)", +"2815f50f": "addManyToBlacklist(address[])", +"28169ec1": "testProvidedValues()", +"2816bd78": "incentiveForHolder()", +"28171882": "customText()", +"28180023": "closingBlock()", +"2819598d": "removeManyFromAllocationList(address[])", +"28195d2c": "GDO(uint256,string,string)", +"281972af": "getExplorerList()", +"281989bf": "ComputeSquare(uint256)", +"28198eab": "RLCSentToBTC()", +"281a0ff7": "revokeDelegate(address,address,string,address)", +"281ae558": "ETH_TOKEN_EXCHANGE_RATIO()", +"281bdaf8": "weightedMultiplierByAddress(address)", +"281c08ad": "totalAuctorCount()", +"281ca73e": "write(uint256,uint64,bytes8)", +"281cee59": "_approveOwner(address,uint256)", +"281dfbb6": "sendPlatformSupplyToken(address)", +"281e1856": "deAuthorize(string)", +"281e399c": "Token(string,string,uint256)", +"281fa792": "givenBonus()", +"281fe829": "addFirstBuyers(address[],uint256[])", +"2820d6a5": "totalPresaleBonus()", +"2820f454": "setNewBeneficiary(address)", +"2821ca71": "nextPrice(uint256)", +"2822f62d": "fixedLoge(uint256)", +"282303b5": "_buy(uint256)", +"2823c24d": "howManyTokens(uint256)", +"2823e871": "canTransfer(bytes32,address,address,uint256,bytes,bytes)", +"2823fbe5": "walletLockBothForever(address)", +"28242dd4": "setLLV_edit_25(string)", +"282440ed": "allowWorking(uint32)", +"28249577": "getContractCode(address)", +"28250d43": "ETH_QCO()", +"28252bc4": "saleIsGoing()", +"28261850": "getProfits(bytes6)", +"28262dd1": "TOKEN_HODL_9M()", +"282651fe": "getWinTokenAmount()", +"28276ed6": "totalT8EXSold_GENERAL()", +"28278d0a": "makerich4(address,uint256)", +"2827d4ca": "TokenSale(uint256)", +"2828fc39": "getAllReporterMarketsCount()", +"2829104b": "ElectricUniverse()", +"28292af2": "chAirDropFadd(uint256)", +"282b065a": "setEmail(string)", +"282b5b19": "IsFreezedAccount(address)", +"282ba1b8": "GetPreSale()", +"282c3c47": "DEFAULT_MAX_LOCK_DURATION()", +"282c3cf7": "MAX_TOTAL_TOKEN_SUPPLY()", +"282c8749": "setParameters(uint256,uint256,uint256,uint256,uint256,uint256)", +"282d3fdf": "lock(address,uint256)", +"282d60bb": "eButton()", +"282de6b8": "priceCents()", +"282e0fe0": "updateIndexOrderToken(uint256,address,uint256,uint256,uint256)", +"282ef05c": "collectorsCount()", +"282f7cdd": "isDispositionDue()", +"28310f10": "percentageRecipient1()", +"2831ed5a": "YOUQIANBI(uint256,string,string)", +"2832b5cc": "setInstantFee(bool)", +"2832e44b": "addPrediction(bytes32,uint256,uint256,uint256,uint8,uint256,address,address)", +"28331152": "getActives(uint256,address,address)", +"28334e64": "subTokens(bytes32,uint256)", +"2833747f": "test_oneTrueFalse()", +"28339175": "getCreateSharesOwner()", +"28339320": "deleteRegion(address[16],uint256)", +"283506fb": "buySqr(uint256)", +"283557ac": "getContributorTokens(address)", +"2835b45c": "getETH(uint256)", +"283654c3": "storjBalance()", +"28368e0f": "OppToken()", +"28376f05": "testCreateAuthority()", +"2837919d": "impl_mining_uncle(address,bytes,bytes,uint256)", +"283890ef": "checkGetFreeQuest(address)", +"28392315": "sellerCancel(uint16,address,address)", +"2839e928": "ackermann(uint256,uint256)", +"2839fc29": "exchanges(uint256)", +"283a4576": "Tomeka()", +"283a6e88": "mgmtBodyWalletAddress()", +"283acbfc": "enableRefund(address)", +"283b19bf": "addReward(uint256,uint256,address)", +"283b31a6": "addWorks(bytes32,bytes32,uint8,uint256,uint256)", +"283b5f95": "getUndistributedBalanceOf_(address,uint256)", +"283ba681": "transferAirdropTokens(address[],uint256[])", +"283bcbed": "ChannelToppedUp(address,address,uint32,uint192)", +"283ced9d": "FOUNDATION_CAPPED_VALUE()", +"283ceee2": "cryptaurToken()", +"283dc942": "ReferralWeToken(address,uint256)", +"283f7820": "_totalFee()", +"2840f290": "addTier1Member(address)", +"28412d70": "KING()", +"284131c7": "buyApple()", +"284180fc": "getSecret(address)", +"284237e4": "bitm(uint256,string,uint8,string)", +"28428a42": "importBalances(uint256,address)", +"2843314e": "getAccountList()", +"28439961": "setTimePeriods(uint256,uint256,uint256,uint256)", +"2844328f": "submitVote(uint256)", +"28444381": "setPeriods(uint256,uint256,uint256,uint256,uint256,uint256)", +"28450159": "_updateSnapshot(address)", +"28459871": "OreOreCoin(uint256,string,string,uint8)", +"2845c8cd": "totalPreSaleStage()", +"28469c36": "littafiAccount()", +"2846a35b": "mainSaleEndTime()", +"28470b40": "_axiesPrice(uint8,uint256)", +"28472c6c": "claimComputation(bytes,bytes)", +"2847a7af": "newDocument(bytes32)", +"28491003": "getAllTurnover()", +"28491b3f": "SetPresaleAmountLimits(uint256,uint256)", +"284b1e8e": "generatedByte()", +"284cb916": "endMintingTime()", +"284cfedb": "m_proofs()", +"284d2fd4": "mintVested(uint256,address,uint256)", +"284d94e1": "lockAssetEscrow(bytes32,uint256,address)", +"284e1567": "addrFWD()", +"284e4175": "changeGBTAddress(address)", +"284e650a": "vanbexTeamVestingPeriod()", +"284f083a": "processJackpot(address,bytes32,uint256)", +"284fb363": "deploy(uint256,uint32,uint256)", +"284fd42f": "gasEpoch()", +"2850c72a": "debug_extendCoinbaseTxOutput(uint256,uint256)", +"2850d4e6": "KNOWToken()", +"285109d1": "getTotalInfo()", +"285137c9": "registerNameXaddrFromDapp(address,bytes32,bool)", +"2851f27b": "PrizePaid(string,uint256)", +"2852b71c": "accept()", +"2852bdf2": "whitelist(uint8[],address[])", +"2852ca81": "getTypeFromEdition(bytes16)", +"2853a0d7": "BRXToken()", +"2853f925": "unfreezeFoundingTeamBalance()", +"28543417": "removeOrderOfOwner(address,uint256)", +"2854ba7d": "getCreatedPayoutDistributionHash()", +"2854bc7e": "setTokenCap(uint256)", +"285669e9": "setRegionNextImageId(uint256,uint256)", +"28579137": "remove(uint80)", +"2857bc60": "triggerStealManually3(string,uint256)", +"28583dcc": "getRoundCounter()", +"2858507f": "IDD()", +"2858c764": "checkStatus(uint256)", +"285a4639": "Rotterdam()", +"285a9b32": "payoutfordividend(address,uint256)", +"285b5dde": "MoreTokensMinted(uint256,string)", +"285bf4c7": "CryptoCopyToken()", +"285c22b1": "addOrigin(bytes32)", +"285c51c3": "getRemainingEthersForCurrentRound()", +"285c7f37": "addUpgrade(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"285d70d4": "setMintable(bool)", +"285da5a9": "ceilTokens(uint256)", +"285dfc1c": "AmigoCoin()", +"285e1406": "changeFeeAddress(address)", +"285e8516": "advisor2Sum()", +"285f2346": "getNotApprovedProposals()", +"285f6a55": "ADDR_BOUNTY_TOKENS_ACCOUNT()", +"285fc97f": "TestChain()", +"285fe426": "bet(uint256[],uint256[])", +"286012b0": "getDealCancelRate()", +"286294b3": "buyByTomo(address,uint256)", +"286362f8": "AllowTransferExternal()", +"28636578": "setMultiRequestRequestor(uint256,address)", +"2863cd7e": "batchMintWithData(address[],uint256[],bytes)", +"2863f9f3": "emergencyStopSale()", +"286401df": "is_claim_period(uint256)", +"28640599": "fetchCreatedOrdersForMerchant()", +"2864ddde": "nextPriceOfElement(uint256)", +"28657aa5": "bankBalance()", +"2865dc2e": "getUserRewardPayouts(address)", +"2866bae1": "HarryCoin()", +"286707a1": "genToExtraStats(uint256,uint256)", +"28675325": "PURCHASER_MIN_TOKEN_CAP()", +"2867586e": "setInvContract(address)", +"286781c7": "suspend(address)", +"2867bc92": "refreshGames()", +"28680c1e": "bonusUnlockAt()", +"28687e61": "checkPriceCalled()", +"2868eda3": "admin_withdraw(uint256,uint256)", +"286a8993": "_clearBridgeNativeFee(uint256)", +"286b583b": "offerCanvasForSale(uint32,uint256)", +"286c1a9b": "confirmJoinAirdropQuest(address)", +"286c241a": "releaseTimeOf(address)", +"286d2e3a": "setContractAddr(address)", +"286dd3f5": "removeAddressFromWhitelist(address)", +"286dd83c": "unPauseCrowdsale()", +"286eab15": "getSnailmasterReq()", +"286ec4d1": "erc20_contract()", +"28707f3d": "addCharacter(uint32,uint16)", +"28713d0c": "SunContractToken(address)", +"2871587d": "MAX_PAYOUT_FRAC_BOT()", +"2871b1b9": "setRate1666()", +"2871f2c0": "getMySquirrel()", +"28720849": "verifyReport(uint16,int8[],uint32[])", +"2872a8e7": "kkk()", +"287301c1": "COMMUNITY_PERCENTAGE()", +"287418e7": "query(uint256,uint16)", +"28753dc2": "ApprovedFunds(address,bool)", +"28761ea5": "calcDividend()", +"28762e3a": "rdDoisToken()", +"28764b44": "rnBlock()", +"2877af10": "STARToken()", +"2877c748": "claimVotingProposal()", +"2878d3a7": "getClue3()", +"287977d6": "updateScore(uint8,bytes32,uint24)", +"287ad39f": "upgradePrice()", +"287ad3e5": "endPeTime()", +"287b020b": "founderMembers()", +"287b7cc1": "setStageLimit(uint256)", +"287b8862": "s35(bytes1)", +"287b895c": "MAX_OBR_CAP()", +"287bd206": "MAX_ALLOCATIONS_COUNT()", +"287cc96b": "getTotalEthBalance()", +"287dd8d2": "HIcToken(uint256,string,string)", +"287e85e9": "getTimeoutBlock(bytes32)", +"287e9fbc": "setGameIdCntr(uint256)", +"287eda92": "setIntervalSize(uint256)", +"287efb57": "setMixFormulaAddress(address)", +"287fcbfc": "PEPEso()", +"28802f19": "stare(uint256,uint256)", +"28805407": "refundToken(bytes32,address,address,uint256)", +"2880ebe7": "underdogPayoutMarkup()", +"28811f59": "F()", +"288169fd": "_changeAddress(address)", +"28828b1e": "claimMultipleAndWithdrawBalance(bytes32[],uint256[],bytes32[],address[],uint256[],bytes32[])", +"2882ab48": "BurnGas()", +"28831187": "setCompanyWallet(address)", +"288343e4": "Start(address,uint256,uint256,uint256,uint256,uint256)", +"288365a7": "foundation_vesting_contract()", +"2884c115": "_finishICO()", +"28852b61": "allOfferingPercentage()", +"2885b593": "extractMasterKeyIndexLength()", +"28861d22": "market(uint256)", +"2886b47a": "PERC_TOKENS_TO_RELEASE()", +"2886d76f": "setColorTeal()", +"288714be": "getPreviousWinner()", +"2887318f": "RATE_ETH_WXW()", +"2887cecd": "QYTestingToken()", +"288811cb": "grantAdvisorToken()", +"28889862": "setRandomPlayerAddress(address,address)", +"2888bb9c": "fixedAssets(bytes32)", +"2888c701": "setClearingPrice(bytes32,uint256)", +"2888f9d0": "updateMaxBet()", +"28896066": "transfer_owner(address)", +"2889e822": "team3Address()", +"288a6535": "_getPurity(uint16,uint16)", +"288aa69b": "VirusGame()", +"288b7ad8": "homeMaxPerTx()", +"288bcfb5": "getIntegerVaule()", +"288bd8fd": "mintReserveTokens(uint256)", +"288c4602": "WRTCCToken(address,uint256)", +"288c6ed2": "getSeedCost(uint256)", +"288cdc91": "filled(bytes32)", +"288dca30": "softCapFundingGoalInCents()", +"288dd331": "getTotalBidded()", +"288ddec7": "reversePercent(uint256,uint256)", +"288fa739": "isValidVote(uint256,address)", +"2890e0d7": "burnNFT(uint256)", +"289120cf": "goToNextState()", +"28916184": "createProduct(string,bool,uint256,address)", +"28918296": "verifyBBODocument(bytes32,bytes)", +"28919b47": "best_gamer()", +"2891da02": "tokensCounter()", +"28929072": "setMaxAssignedRequests(uint256)", +"28931484": "SmartLinkToken(uint256,string,string)", +"2893c5b0": "mint(address,uint64)", +"289471d5": "getOnTokenTransferFromValue()", +"2894ceda": "publisherRegistry()", +"28962b94": "DS1Token()", +"28968872": "minusFreezingTime(uint256)", +"289768b7": "_checkForJoin(uint256,address,uint256)", +"2897768d": "grantJoinAddr(uint256)", +"289799b7": "setUnitTime(uint256)", +"2898410b": "totalMintedToken()", +"289850b7": "FundTree()", +"28985c17": "returnsTwoUnnamed(uint256,uint256)", +"289912cc": "CLXTokenSale(address,address)", +"28997e32": "token(uint256,string,string)", +"2899a870": "claimAllInvestorTokensByOwner(address)", +"289aac50": "teamWithdrawSupply()", +"289ae4c7": "AddressWhitelist(address)", +"289b3aab": "Arith()", +"289b45fb": "subtractAction(bytes32,uint256[])", +"289b5b15": "setTypeName(uint32,string)", +"289cb681": "testSetPresale()", +"289cd94f": "setWhere(address)", +"289cf1e2": "PRESOLD_TOKENS()", +"289de615": "getTokenDetail()", +"289e0f82": "STAGE_1_START()", +"289ea30b": "requireNotZero(uint256)", +"289fd839": "presaleBonusTier3()", +"28a006af": "ethBalance(address,address)", +"28a07025": "liquidate()", +"28a1cab8": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", +"28a20a2f": "transferXPAAssetAndProfit(address[],uint256)", +"28a24f30": "set_base_token_as_seeded()", +"28a3dd2c": "_redeem(uint256)", +"28a42e9d": "getUpgradeInfo(uint256)", +"28a45038": "testTryProxyCall()", +"28a49874": "regPrice()", +"28a52d3e": "maxHistoryRecordID()", +"28a5be59": "getExchangeRateAtTime(uint256)", +"28a5c5e9": "address_to_tokens_prev_week0(address)", +"28a5e6f0": "regularOpen()", +"28a741db": "publicityFunds()", +"28a76045": "setAsMinter(address,bool)", +"28a767b0": "ClaimAirdropMultiple(address[],uint256)", +"28a7f25d": "transferJokerOwnership(address)", +"28a852db": "SOFTCAP_LIMIT()", +"28a8ee68": "minimumTakerProtocolFee()", +"28a92ef7": "requestRemoveAdmin(address,string)", +"28aa1a22": "IlumXXToken()", +"28aa48b4": "heroTypeToHeroSales(uint16)", +"28aa5257": "updateTransfer(bytes)", +"28aa69cf": "end_race()", +"28ab4f76": "changeSupply(uint256,bool)", +"28ab7375": "p_update_tokensRewardsAvailable(uint256)", +"28abda51": "resetUrls(bool,bool)", +"28acb002": "collectFees(uint128)", +"28acb520": "IdentityManager(uint256,uint256,uint256)", +"28ae8ea3": "redeem(uint256,bytes32,bytes)", +"28aea735": "getCreatedDate()", +"28af792c": "fundBTC(address,uint256)", +"28af94c8": "addData(bytes32)", +"28b070e0": "contractIndex()", +"28b0e795": "advance(bytes32,uint32,uint64,uint64,int64,uint64)", +"28b1b051": "external_call(address,uint256)", +"28b2105c": "endCrowdfund()", +"28b2362f": "custodianRegistry()", +"28b2e781": "minprice()", +"28b34ef6": "updateLandData(uint256,uint256,string)", +"28b3f3ae": "getBetAmount(uint8)", +"28b44b4b": "getBalanceOfContract(address)", +"28b4e62a": "numTokenPerEth()", +"28b53247": "_burnCarbonDollar(address,address,uint256)", +"28b59782": "Initiate(address,uint256)", +"28b5a8e6": "fechPreAllForCandidate()", +"28b5dde8": "setPI_edit_9(string)", +"28b5e965": "artDescription()", +"28b60031": "ownerTokens(address,uint256)", +"28b6c658": "maxAgonCount()", +"28b7bede": "getTokenContract()", +"28b7e183": "enableAffiliate()", +"28b8b108": "withdrawStoreBalance()", +"28b8e9cf": "buy_the_tokens()", +"28b94289": "isPreICOPrivateClosed()", +"28ba671f": "_getBonusTokens(uint256)", +"28baf31d": "EscrowVault(address,address)", +"28bb6f24": "webGiftTotalAmount()", +"28bc5dcc": "promotionIndexToHost(uint256)", +"28bc5ee4": "beginVote()", +"28bc8a04": "airdropSpent()", +"28bcd985": "PRIVATE_PHASE()", +"28bdbdca": "productionUnitIdRange()", +"28be67f9": "get_amount_get_sell(uint256)", +"28bf2448": "availableForWithdrawalAt(uint256)", +"28bf4079": "initStage(uint256,uint256)", +"28bf794d": "set_price(uint256)", +"28bfdeee": "distributeInsurance()", +"28c05d32": "shortSell(uint8,uint256,uint256)", +"28c0898b": "ZAR_Omnidollar()", +"28c0b0ef": "_partialPaid(address)", +"28c11fd6": "SetIPR(string,string,address,string,string,uint256,string,string,string)", +"28c23a45": "renounceOwner()", +"28c32be6": "refundPeriodStart()", +"28c3d685": "logPlaying(address)", +"28c4b676": "maxPaysPer()", +"28c4e24c": "retrieve(address,address,uint256)", +"28c4f410": "getShifterByToken(address)", +"28c5cf0a": "finalizeContract()", +"28c69eb2": "hasStake(address,address)", +"28c6cd05": "minBuyTokens()", +"28c6d8e3": "preBuyersDispensedTo()", +"28c743e6": "WelfareTokenFund()", +"28c78227": "openBoxPlayer(uint256,uint256)", +"28c8b217": "approveProject(address,uint256)", +"28c8ed98": "disableAutoDividends()", +"28c8f3ba": "airDropManager()", +"28c9ca90": "ethereumWei()", +"28c9f19a": "exchangeAndPay(uint256[10],address[5],uint256[4],bytes32[4])", +"28ca3062": "testCannotSetPresaleTokensAfterActivation()", +"28ca5a1c": "InvestmentEvent(address,uint256,uint256)", +"28cab0d6": "TokenBought(address,uint256,uint256)", +"28cbe9ac": "useKnowledge(address)", +"28cc413a": "getProof(uint256,uint256,uint256)", +"28cc4150": "tokenSaleRate()", +"28ccffe7": "etherFromAltar()", +"28ce213e": "setBalanceOf(uint256)", +"28ce5cdb": "withdrawMinerFee()", +"28ce8845": "addToTotalSupply(uint256)", +"28cf8b6f": "ERC223Token()", +"28cffcd8": "YFT()", +"28d005e9": "firstTTaxAmount()", +"28d08142": "getCurrentHighscoreUser()", +"28d0d223": "withdraw_amount()", +"28d18745": "getMiningAuthority()", +"28d2a961": "chkBSize(uint256,uint256)", +"28d3ad3f": "getPot(uint256)", +"28d3e3e1": "min_goal_amount()", +"28d42350": "endIco1()", +"28d445f6": "_afind(address)", +"28d4cc24": "window2TokenCreationCap()", +"28d5e117": "numberOfPossibleChoices()", +"28d6ce3d": "startSale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"28d76403": "dataForSell(address,uint256)", +"28d84c9b": "delAltOracle(address)", +"28d879e4": "depositEtherBalance()", +"28d8f102": "ABOX()", +"28d905e5": "getAssetIdTripCompletedTime(uint256)", +"28d90b63": "ChangeFee(uint8)", +"28d936fe": "numImages()", +"28d969a5": "resetIndex()", +"28d969e2": "initialARXtokenSupply()", +"28d9dcd4": "createErc20Token(string,string,uint256)", +"28da6ba3": "PreSaleComplete(address)", +"28da740f": "firstTimeLine()", +"28da75fa": "addAddressToCaller(address)", +"28da850b": "buyAllOutcomes(uint256)", +"28db5470": "getPrivateName()", +"28db90a4": "BadgeCoin()", +"28dc38e6": "calculateWithdrow()", +"28dcce7c": "addWinner(address,address)", +"28dcfdac": "getSignsCount(uint256)", +"28de15b2": "MajorityList()", +"28de4426": "setLockupPeriodSeconds(uint256)", +"28de78d0": "WandtChaintest(uint256,string,uint8,string)", +"28dee1d2": "transferEtherOut(address,uint256)", +"28df192d": "releaseSbtToken()", +"28df3707": "HawkToken(uint256,uint256)", +"28df7755": "TravellingFreeToken(uint256,string,uint8,string)", +"28e07244": "getTurn()", +"28e08186": "ownerAllocateTokens(address,uint256,uint256)", +"28e0b502": "getDrawStatus(uint256)", +"28e0ba9a": "affsend(uint256,uint256,uint256,uint256,uint256)", +"28e158d0": "TokenVestingContract(address,address,uint256,uint256,uint256,uint256,bool)", +"28e1a604": "BurnFrom(address,uint256)", +"28e36ab8": "_getPrice(uint256,uint256)", +"28e3844c": "Member_AssignTokensToProject(int256,int256)", +"28e3c4f8": "checkLock(address,address)", +"28e454ee": "setDusting()", +"28e47076": "testFailCreateWithParentsParentSameItemId0()", +"28e53bb2": "approveKYCAndDeposit(string,address,uint256,uint256,string)", +"28e5617e": "weeklength()", +"28e5e5d3": "snowflakeCall(address,string,address,uint256,bytes,bytes)", +"28e665ef": "releaseTokenForTransfer()", +"28e68ebe": "getLastFundId()", +"28e69b16": "setBalances(address,uint256)", +"28e70c4e": "getPosition(uint256,uint256,address)", +"28e8776e": "getAyantDroitEconomique_Compte_9()", +"28e8bc61": "endTokensale()", +"28e8ed1b": "resetCrowdSaleaddress(address,address)", +"28e96cb0": "setDefaultAllowedLock(uint256)", +"28e98537": "logicProxiesStatic(address)", +"28e9bff8": "presaleAllocations()", +"28ea0fc3": "transferCollectorship(address)", +"28ea6aab": "addToBlackList(string,address)", +"28ea9203": "___setTarget(address)", +"28eaa326": "_noThrowCall(address,bytes)", +"28ec4173": "UnicornCrowdsale(address,address,address,address)", +"28ecb74e": "Grow()", +"28ed5c0d": "MCC()", +"28ef26cc": "JEXToken()", +"28ef42ce": "preICOSwapRate()", +"28ef6f40": "openCrowdsale()", +"28efa3a6": "processRebond(address,uint256)", +"28effe67": "gasForPBTT()", +"28f03554": "ProcessDividend()", +"28f0d47b": "ticketTransfersAmount()", +"28f22cc1": "getRemovedServicesForApplication(address)", +"28f28529": "fstUnitPriceNumerator()", +"28f2d4da": "identifiers(uint256)", +"28f3402b": "changeRuningState(bool)", +"28f371aa": "isApproved()", +"28f3ebd6": "BitPrize()", +"28f4c7de": "getMaximumReportingFeeDivisor()", +"28f4dbb6": "thresholdAmount()", +"28f5c7b3": "totalETHRaised()", +"28f66b77": "getAllHead()", +"28f68d39": "getVestingPeriodsCompleted(uint256,uint256)", +"28f6a48a": "getBidCount()", +"28f798a8": "toBinary(uint256)", +"28f7f13b": "Acandy(uint256,string,uint8,string)", +"28f833b7": "depositAddress()", +"28f90e4b": "Etheramid2()", +"28f9a563": "maxPreCrowdAllocationPerInvestor()", +"28fa17b6": "estateData(uint256)", +"28fb29d7": "_transferEvent(address,address,uint256)", +"28fbd958": "registerContract(bytes32,address,address,bytes20,bytes32)", +"28fbf28a": "revealPeriodActive(bytes32)", +"28fce8c8": "ZEUSCoin()", +"28fd287c": "_addmoney(address,uint256,uint256)", +"28fd72e2": "updateRndSeed()", +"28fdcdf7": "safeMemoryCleaner()", +"28fe549a": "STATE_BET_ENABLED()", +"28fe9a7f": "founder1Address()", +"28fecd48": "reinstate()", +"28ff498a": "presaleTokenLimit()", +"28ffe6c8": "join(address)", +"28fff8d6": "NokuConsumptionPlan(address,address)", +"2902320a": "totalTokensToSend()", +"2902b093": "addnewOwner(address)", +"2902df61": "remove_helper(uint256)", +"29033133": "clearValueBonuses()", +"290382dd": "DFCToken()", +"29055edd": "createNew(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,address,address)", +"2905be9a": "IronHands(uint256,address)", +"29062d76": "startGame(address[],uint256)", +"29079291": "RVRCoin()", +"2907eb16": "finalizeContract(uint256)", +"290842a1": "setPI_edit_1(string)", +"2908fb5a": "Y1_release()", +"29090202": "Resolver(address)", +"29092d0e": "remove(address)", +"2909acef": "isSpawnProxy(uint32,int256,address)", +"2909cc5d": "left16(uint256)", +"2909f638": "setData(uint256,uint256,uint256)", +"290a9fa0": "setRangeGameAttr(uint256,uint256,uint256)", +"290b1e5f": "initTokenBank()", +"290b7dfd": "getTransactionLength(bytes32)", +"290c292d": "preMint(address,uint256)", +"290c398f": "getChipIds(bool)", +"290c8eb1": "doMint(int256,address,uint256)", +"290cb460": "MitkeyCoin()", +"290cba7f": "getLen(string)", +"290cf4fb": "payBonusToAddress(address)", +"290d2494": "startBuffer()", +"290d256e": "ExchangeLinkToken()", +"290e1c20": "AutoFare(uint16,uint16)", +"290ed1be": "RESERVED_MARKETING_GROUP()", +"290fe2df": "getEscrowAddress(uint256)", +"29107555": "soldByChannels()", +"29108d1b": "transferReserveToMain()", +"2910a32b": "setTokenBuyRate(uint256)", +"2910f159": "LogBidMade(address,uint256,uint256)", +"29113bc8": "hotWallet()", +"29114d65": "winnerPoolTotal()", +"291194b2": "NOT_AUDITED()", +"2911982e": "balanceOfPlayer(address)", +"2911c9e7": "dashId()", +"29143bdd": "onwerfee()", +"29147530": "setValidKYC(address)", +"29148c0c": "changeOwnerBook(uint256,address)", +"2914fb3e": "porcodr(uint256)", +"29153250": "withdrawalList(uint256[],address)", +"2915a915": "determineNumber()", +"2915fd3d": "subToZero(uint256,uint256)", +"29161820": "Base(uint256)", +"29163502": "addWhitelistedTransfer(address[])", +"291675f2": "add_another_owner(address)", +"291681b5": "signupUserWhitelist(address[])", +"2916f075": "check_invalidator(uint256)", +"2917f162": "getCooldownIndex(uint40)", +"2917f66b": "distributeAllTokens()", +"2918435f": "fun_sandbox(address)", +"29189c9e": "ATTToken()", +"291948ff": "date_ico_end()", +"29194964": "setUsdCap(uint256)", +"2919fccd": "Gaoguans(address)", +"291bc657": "Predecessor()", +"291bd15c": "confirm(string,int256)", +"291c0dbb": "setEtheremonAddress(address)", +"291cef95": "startSlammerTime(address,uint256[5],address,uint256[5])", +"291d1185": "updateCurrentBonusPeriod()", +"291d4f98": "transfered_total()", +"291d778c": "CancelSellOrder(bytes32,address,uint256,address)", +"291d9549": "removeWhitelisted(address)", +"291e6777": "sendVote(uint256,uint256)", +"291ea526": "constructionEnd()", +"291f028d": "calculateRoom(uint256,uint256,uint256,bytes32)", +"291f3665": "balanceOfFund(address)", +"291f37a4": "CHESSToken()", +"291f5a1f": "ORIGINAL_IPFS_HASH()", +"291fce73": "TmoneyTest2()", +"291fd18f": "issueCertificate(string,string,uint256)", +"292005a2": "TOKEN_SUPPLY_LIMIT()", +"29213a2f": "approveMember(address)", +"2921441e": "mysteriumPricing()", +"29216d20": "setLockTime()", +"2921be51": "ALLOC_SALE_GENERAL_1()", +"2921e6fc": "IfModuleRegist(string,string)", +"29223bdb": "changeServiceUpdateAddress(uint32,address)", +"2923f101": "Set_eth_gift(bytes32)", +"2924416f": "validateAndGetRedeemFee(address,address,uint256)", +"29245dd1": "startCall(uint256)", +"2924e254": "getInterestTimestamp(uint256)", +"2924f0dc": "_lockProjectToken()", +"2925827c": "preallocated()", +"2925ffc2": "modifyCommunityTaxes(uint256,uint256,uint256,uint256)", +"2926050f": "pubEnd()", +"29263630": "initialiseContract(address,uint256,uint256,uint256)", +"29274fe1": "buyBOTx(uint256,string,string,address,uint256)", +"2928859c": "runsOutOfGas()", +"29291054": "setContract(address,address,address)", +"2929abe6": "distribute(address[],uint256[])", +"2929dc09": "WithdrawAllReserves()", +"292a2879": "setFundAccount(address,address)", +"292a7409": "processBuyCard(uint256,address)", +"292a9873": "attackTileForNewUser(uint16,bytes32,bytes,bytes32,bytes32,address)", +"292b79b9": "HashReleased(bytes32,uint256)", +"292c1323": "vestAddress(address)", +"292c8aaa": "getPayOutAmount()", +"292ca2fe": "Jeopardy()", +"292cbbba": "DAYSECONDS()", +"292cdfa5": "getForthRoundReleaseTime()", +"292d64e0": "transferHotel(address,address)", +"292d98cd": "allSet()", +"292eb75d": "openAccount()", +"292f4a6e": "Token(address,address)", +"292fec04": "isClaimable(address)", +"2930cf24": "red()", +"2930fa49": "PLATFORM_FEE_RATE()", +"293100a9": "meleeElementBySubtypeIndex(uint256)", +"293100c1": "tournamentsReserve()", +"2931ebb3": "AdminshipTransferred(address,address)", +"29322e05": "sendTokens(uint256,address)", +"293230b8": "startTrading()", +"29325ebd": "zeroUInt()", +"2932ea90": "creatUserPurchase(string,string)", +"29337bda": "personalisationCost()", +"2933cc47": "getIdeaDate(uint256)", +"2933ee88": "get_account_id(address)", +"293528c9": "GOL()", +"2936981c": "setNumRewardsUsedForAddress(uint256,address)", +"2936c27a": "getFoundersTokens()", +"2936ce62": "crowdSaleOngoing()", +"2936d35c": "millLeconteRate()", +"29372ad0": "getWarrior(uint256)", +"29372d21": "testLog()", +"29377d61": "receiveFunds(uint8)", +"293849f4": "addLimitation(uint256)", +"293877d7": "bthFundDeposit()", +"29388f8d": "setArbitration(address)", +"29390370": "setPricer(address)", +"293a9169": "getSpawnCount(uint32)", +"293b1103": "Bitlike()", +"293b682f": "fSub(uint256,uint256)", +"293be456": "setReward(uint256)", +"293c2958": "getRoundState()", +"293c29de": "swapHotCold()", +"293c33b5": "authorizedFundsAvailable()", +"293c6a3a": "mint(bytes32,address)", +"293d5050": "getPlayerNum()", +"293d7663": "refundErrCombat(uint256)", +"293ee91f": "_fillOrder(uint64,uint64)", +"293f2ad7": "teamTokensIssueDate()", +"293f3fa9": "setBatman(address)", +"293f4825": "fire(uint64,address[])", +"293f5e6a": "get_first_user_recast(bytes32)", +"293f9a9c": "showDemurrageConfigs()", +"293f9f4f": "recordBounty(address,uint128,uint256)", +"293fc820": "setData(string,string,string,string,bytes32)", +"293ffca3": "AddressReg()", +"2940ff1e": "cancelBet(bytes32)", +"29415664": "buy_part_amount_show(bytes32,uint256)", +"294247aa": "BlackjackTipJar()", +"29432e0d": "setaddressname(string)", +"29434e33": "insertUser(address,bytes32,uint256)", +"29435cde": "TadamWhitelistPublicSale()", +"2943fd5e": "TokensIssuedCrowd(address,uint256,uint256)", +"29441674": "DOW_SUN()", +"2944363f": "updateAllDependencies()", +"2944e740": "changeProfitContainerAddress(address)", +"29457483": "register(uint256[2],uint256[4],uint256[2])", +"2945a57d": "findClaim(uint32,string,string)", +"2946ae5d": "changePauseTranfser(bool)", +"29477e03": "exCount(uint256)", +"294914a4": "j2Timeout()", +"294919a1": "rate(address,uint256,uint256,bytes)", +"2949b11d": "mutiSendETHWithDifferentValue(address[],uint256[])", +"294a6511": "checkRefundExistanceByOwner(address)", +"294afbf2": "sendBigPromoBonus()", +"294bbc09": "ggcd(address)", +"294cd2e8": "BACA()", +"294cdf0d": "tokenOfOwner(address)", +"294cedb8": "resolveOffer(uint256,bool,bool)", +"294cf912": "getBoosterPrice(uint256)", +"294e47e3": "FlipToken()", +"294f3d4d": "setUpLimit(uint256)", +"294f4025": "pendingWhitelistRemoval()", +"294fa425": "MIN_BUYIN_VALUE()", +"29501ad6": "changeManagerAddress(address,address)", +"29516a47": "PoWMLottery()", +"29516ba7": "purchasedTokensRaisedDuringPresale()", +"29516c41": "betMatch(uint8,uint8)", +"29519c9c": "LAFINAL7()", +"2952438e": "transfer(string,address,address,uint256)", +"295310bf": "setTransferRate(address[],int16)", +"2953a286": "setGenesisToken(address)", +"2953ee6f": "InvalidPullRequest(uint256)", +"2953f198": "addEntity(string)", +"29546713": "claimableHalvings()", +"2955d4ce": "setRealisation(uint256)", +"29560980": "getCapital(uint256)", +"2956262b": "ownersStakeAdded()", +"29569e80": "accountPubICOSale()", +"29575f6a": "superAdmin()", +"29576c82": "generalExp(uint256,uint8)", +"295777be": "releaseFundsNotification(uint256)", +"295780ea": "RequestInfo(uint64,uint8,address,uint256,address,bytes32,uint256,bytes32[])", +"2957ca33": "BONUSTWO_DATE()", +"2957d848": "batchWhitelistAddresses(address[])", +"2957da23": "ownerDestroy()", +"2957fef4": "redeemBalanceOf(address)", +"2958263a": "lastBucket()", +"29589f61": "tradeWithHint(address,uint256,address,address,uint256,uint256,address,bytes)", +"2959275d": "increaseCompanyCountByOne()", +"29594e4f": "hash(bytes32,address,uint256)", +"295961b1": "checkMinerQuest(address)", +"295a1cc2": "getNowTotal()", +"295a49ca": "Unclosed()", +"295a5212": "mode()", +"295a8b34": "update(uint256,uint256,bytes,bytes)", +"295b3299": "submitTopUpLimit(uint256)", +"295b4e17": "paid()", +"295c219c": "getMarketMakerAddress(address,address)", +"295c25d5": "addAmbassador(address)", +"295c39a5": "getNumMarkets()", +"295c6e4d": "setBytes32Slice(bytes,uint256,bytes32)", +"295d0eb5": "_buyAndCreateToken(uint256,bool,uint256)", +"295d2d69": "BotManageable(address)", +"295d4756": "PARSECS_TOTAL_AMOUNT()", +"295dad5e": "TriedToken()", +"295e0503": "transfreFrom(address,address,uint256)", +"295e1421": "getSaleOrderSeller(uint256)", +"295e3362": "getCutoffTime(uint256)", +"295f6ce7": "launchGame()", +"295fe611": "valueAtAddressLUT(uint256)", +"2960109d": "etherReceivedCrowd()", +"296032f2": "pauseContribution(bool)", +"29605e77": "transferOperator(address)", +"29610252": "payFee()", +"29613086": "payoutRewards()", +"2961320c": "retrieveToken(address,address)", +"29638223": "greet(bytes)", +"29638eee": "GetTheWho()", +"2964a643": "checkPartner(address)", +"2964e4e6": "totalAccounted()", +"2965486a": "safeTokenWithdrawalFromCrowdsale(address,address,uint256)", +"2965558f": "getSignerIndex()", +"2965fa54": "ethers_collected()", +"2966d1b9": "unset(address)", +"2966e97b": "kscApprove(address,uint256,string)", +"29678a53": "playerInDraw()", +"29684907": "numerai()", +"29689a8c": "ergo()", +"2968d629": "YLCToken(uint256,string,uint8,string)", +"2968e640": "playerTakeOff(uint256)", +"29699a88": "viewSentBonuses()", +"2969b226": "batchTransferETHS(address[],uint256[])", +"2969d202": "weiBalance()", +"296b11b2": "getWeightedRandomArbiter(uint128)", +"296b76bb": "drawPhone()", +"296ba4ca": "LogValue(bytes32)", +"296ca48a": "weiLimitPerAddress()", +"296cab55": "setPresaleStartTime(uint256)", +"296cc401": "roundPrice()", +"296d84d5": "teamAdvisorsReserveTokensAddress()", +"296d9009": "calculate_should_return_bix(address[],address,uint256[])", +"296dbf31": "sendGameGift2(address,uint256)", +"296e3661": "removeClaim(uint32,string,string)", +"296ed88f": "testFailControllerInsufficientFundsTransferFrom()", +"296f1ce1": "getHasStartedState()", +"296f4000": "delegateApprove(address,uint256,address)", +"29700653": "fundTransfer()", +"297072a1": "cNiceGuyIdx()", +"2970c9c6": "TEAM_TOKENS_RESERVED()", +"29710388": "isProxy(address)", +"29712ebf": "accountBalancePublish(string,string,uint256,string,string,uint256)", +"29713781": "HumanToken(address,address)", +"29713f86": "cheapredeemvillage()", +"29723ade": "setMediumPrice(uint256)", +"29724d54": "offerOn(uint256)", +"2972b0f0": "isAuthorized(address,uint256)", +"29730ea4": "buyIdeas()", +"29735a89": "getSubmissionsForCommit(bytes32)", +"297398b5": "hourlyProduction()", +"2973e372": "isAlphaUpper(bytes1)", +"29745306": "tgrSetLive()", +"2974a822": "CustodianRegistry(address)", +"29750e85": "depositEndTime(address)", +"2975659d": "determineStatus()", +"2975c690": "SetLimited(address,bool)", +"29760657": "setStarDistance(uint8,uint16)", +"2977b1b1": "testAllowanceStartsAtZero()", +"29780a4e": "eventTransfer(address,address,uint256)", +"29781ec8": "addExemptedAccount(address)", +"29784d90": "shortenTde(uint256)", +"297882d5": "createDistrictOmni(uint8,uint8,uint8,uint8)", +"2978b826": "assignRevenue(uint256)", +"297a1677": "getAllHpbNodesCache()", +"297a1f56": "carCount()", +"297a9dc4": "WalletFunded(address,uint256)", +"297b5dce": "private_setminRoll(uint256)", +"297c4143": "PUBLIC_START_TIME()", +"297c9cd9": "regStopTime()", +"297cb974": "FlightDelayAccessController(address)", +"297d1a34": "returnOwnership()", +"297d7964": "investors_locked(address)", +"297f119d": "transferToAdmin()", +"297f407b": "addWinner(address)", +"297f9af0": "membersCount()", +"29803b21": "join(string,string)", +"2980a7b6": "specialManagerOn(address)", +"2981155e": "weiPerDTH()", +"29816998": "right63(uint256)", +"2981cceb": "_mintFromDeposit(address,uint256)", +"29822734": "Win()", +"2982add7": "notContains(address)", +"29832c0f": "hasSigned(bytes32,address)", +"2983d752": "advisory()", +"29842d15": "TokenClaimed(address,address,uint256,uint256)", +"29846afe": "freezeAccount(address,uint256)", +"2984a077": "setFemaleBonus(address[])", +"2984bc4d": "getAreaInfo(address,uint256)", +"2984f486": "setBU(bytes32,uint256)", +"2984f999": "totalLockTokenAllocation()", +"298503d9": "createCategory(string,string,uint256)", +"298569f0": "SetApplicant(string,uint32,string,int256,string)", +"2985aacf": "getSponsorsN(uint256)", +"29864547": "feeIndex()", +"2986c0e5": "index()", +"2987ace5": "getCapsuleInfo(uint256)", +"2987c8f7": "checkProduct(bytes32)", +"2988e36b": "migrateBalance(address)", +"29893dcf": "checkKhFundDepositAddress()", +"298994c6": "getCET6InfoById(uint32)", +"2989ac22": "rollDie(address)", +"298a49da": "_0xDogecoin()", +"298aa634": "nextContributorToReturn()", +"298ac61c": "AgencyWallet(string)", +"298ad569": "CFOAddress()", +"298c0733": "send(address[])", +"298c154e": "addListing(string,string,uint256)", +"298c1e14": "COIN_PER_ETHER_SUPPORT()", +"298c3dc4": "addStrip(uint256,uint16,uint8,uint8,string,string,string,string,string,string)", +"298c3fc1": "changeFrozenBalance(address,uint256)", +"298c61e3": "TOTAL_TULIP_SUPPLY()", +"298d075f": "tokenPoolAddress()", +"298d3567": "depositBBO()", +"298d5f33": "getPI_edit_1()", +"298e4f79": "depositTokens(address,uint256,address)", +"298e685a": "getFrozen(address)", +"298fb0d2": "setEvenDistThresh(uint256)", +"298fbf1c": "ClaimBTC(string)", +"298febed": "towncrierCallback(uint64,uint64,bytes32)", +"2990194a": "setICOStage(uint256)", +"29913150": "createTicket(address,uint256)", +"29917954": "exitPool()", +"2991835f": "extract(address,address,uint256)", +"2991964c": "GameLoose(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"29928852": "NoteChanged(string)", +"2993ed2d": "cancelSellOrder(address,uint256)", +"299453ca": "cb0f5ef7()", +"299550d9": "LogBetStart(uint256)", +"299599cc": "preICO(address,address,uint256,uint256)", +"29965a1d": "setInterfaceImplementer(address,bytes32,address)", +"2996f972": "tokenBurner()", +"29976934": "ModifyPublicKeySize(uint8)", +"2997ec89": "getStudentIDText(uint32)", +"29981db4": "setAdvocate(address,address)", +"2998dff2": "SuperUltraPowerCoin()", +"29991a5b": "checkMilestones(address[],uint256[])", +"29995f4c": "MoonStone()", +"2999c76b": "initNameSymbol(string,string)", +"299a017c": "getCurrentMilestone()", +"299a7bcc": "setOwner(address,address)", +"299af64b": "setContract(address,bytes32,bool)", +"299b861e": "changeUnitsPerEth(uint256)", +"299c55f7": "TOKEN_BOUNTY()", +"299cc524": "updateEarlyIncome(address,uint256)", +"299cdc9d": "changeEtherCost(uint256)", +"299df3f1": "WithdrawDividendsAndCoupons()", +"299e6b07": "Wallet(address)", +"299e7318": "resolveVoting()", +"299e7abb": "calculateWinners(uint32)", +"299e952f": "buyKeys(address)", +"299ed37a": "emergencyCall()", +"299ee814": "OraclizeBet()", +"299f5f1a": "cumAlienDeposits()", +"299f7200": "burnOwnership(address)", +"299ffcbc": "latestReleaseTime()", +"29a0097c": "internalSend(address,uint256)", +"29a00e7c": "calculatePurchaseReturn(uint256,uint256,uint32,uint256)", +"29a03d8d": "distributionReward(uint256,string,bytes32)", +"29a065bd": "getLOg(uint256)", +"29a19987": "teamVesting4Years()", +"29a2629c": "showRoundNum()", +"29a2aa2d": "thankYou(address)", +"29a2c27b": "finishLastCount()", +"29a2d339": "chknodenumber(uint256)", +"29a36e0a": "addScheduleCall(address,uint256,uint256,uint256,uint256)", +"29a3fab9": "finilize()", +"29a40403": "submitCounterStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"29a52db6": "getCurrentUserLocalTokenBalance()", +"29a5c0f4": "WithdrawAllETH()", +"29a5dd7c": "refund_bix(address,uint256)", +"29a6344a": "removeSupporter(address)", +"29a64dd1": "startCrowdsalePhase2Date()", +"29a67202": "UHUGIN()", +"29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", +"29a742aa": "HappyLifeCoin()", +"29a7d5c1": "joinAirdrop()", +"29a81222": "getOwnerName(uint8)", +"29a833ee": "getSumData(bytes32)", +"29a86dde": "getGameWin(uint256)", +"29a8cda5": "PolarisToken(address)", +"29a8fcd2": "Proxy(address,address,uint256,uint256,uint256)", +"29a9c91d": "setCurrentPeriod(uint256)", +"29aa1408": "getTotalFlips()", +"29aa7ec5": "removeSignature(string)", +"29aa9cbe": "min(int256,int256)", +"29aab068": "Pen(address)", +"29aacd10": "InitalPos()", +"29ab0ca7": "ownerSetResolverPercentage(uint256)", +"29abdeed": "addCoinBalance(address,uint256)", +"29ad27d7": "maxDays()", +"29ad4a34": "_transferMoneyMother(uint32,uint256)", +"29ae4c70": "isSenderEmergencyMultisig()", +"29aebf05": "initialMoySupply()", +"29aec173": "levelUp(uint256,uint16,uint16,uint16,uint16,uint16,uint16)", +"29b03cfd": "getBid(bytes32,uint256)", +"29b0de1e": "unsetManager(address)", +"29b0ffea": "numberOfPreviousEntries()", +"29b1ce4d": "addWhitelistedUserAddr(address)", +"29b1e640": "claimReporterReward(address)", +"29b20bb6": "numCharactersXType(uint8)", +"29b26bc1": "clearTradePreSignedHashing(address,address,bytes32,address,uint256,int256,string)", +"29b43a68": "createDepositAddressFor(address)", +"29b49825": "ADVISOR_POOL_INIT()", +"29b4d111": "price_start()", +"29b65a2e": "POCY()", +"29b6cdd5": "Alphacoin()", +"29b737ae": "LerToken()", +"29b84c9c": "transferExchange(uint256)", +"29b8caff": "totalInvestors()", +"29b8dab4": "currentBidNumber()", +"29b981bb": "operationAdress()", +"29b9f367": "addressDataProviders()", +"29ba1cb4": "setPrivelegedWallet(address,address)", +"29ba2e07": "TokenPoolExhausting(uint256)", +"29ba725a": "setTransformTarget_miner(address,uint256)", +"29ba7bb2": "initialOwner()", +"29ba8780": "executeTransaction(uint256,address)", +"29ba8d03": "getMigrateMarketInFromSiblingCalled()", +"29bb4bf2": "showCollectorsBalances()", +"29bc3b85": "isAccepted(uint256)", +"29bc5d0f": "finalyzeContract()", +"29bcb186": "transferToContributor(address,uint256)", +"29bd028a": "startIcoPreICO2ndRound()", +"29bd58b4": "revokeToken(address,uint256)", +"29bed3bf": "EthereumRoulette()", +"29bee342": "Get_Last_Value()", +"29bf56c3": "setUnitAttackIncreases(address,address,uint256,uint256,bool)", +"29bf960a": "getResultTable(uint256,uint256)", +"29c08ba2": "payPremium()", +"29c10e37": "filter(string)", +"29c19304": "setInitialVaribles(uint256,uint256,address,address,address)", +"29c1c61e": "modifyPowPrice(uint256,uint256)", +"29c1ee0d": "TOKENS_address()", +"29c2e15d": "_calculateInterest(uint256)", +"29c3340f": "dividends_share()", +"29c36bb5": "feedAddress()", +"29c40d5f": "CheckSoilHumdtyException(bytes32,uint32)", +"29c50df4": "getEIN(address,address)", +"29c510b6": "reveal(bytes32,bytes32,address)", +"29c660a4": "ComputeAcornBuy(uint256)", +"29c6647b": "addCET6(uint32,string,uint32,uint32,uint32,uint32)", +"29c71c1b": "modifyFeeShare(uint256)", +"29c78e0b": "Ethash()", +"29c886bf": "TokenCampaign(address,address,address,address,address,address,address,address,address,address,address)", +"29c8d3ce": "activateTokens(uint256)", +"29c8dae7": "create21PizzasTokens()", +"29c90b63": "onTapPollFinish(bool,uint256)", +"29c924cf": "setFundingGoal(uint256,bool)", +"29ca9dca": "updateRelay(address)", +"29caf0c9": "getStringValueByKey(string,string)", +"29cb924d": "getCurrentTime()", +"29cbdc86": "buyin(address,uint256)", +"29cca3ae": "getYouTubemasterReq()", +"29ccb4df": "getCompte_11()", +"29cd00f7": "approve(address,string)", +"29cd5777": "_tryEraseSingleNode(bytes32)", +"29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", +"29cd7767": "_NT()", +"29cd92cf": "deleteHelper(bytes32)", +"29cdda23": "newVersion()", +"29ce0939": "Timeout(uint256,uint256)", +"29ce1ec5": "addFactory(address)", +"29ce3b69": "increaseApprovalAllArgs(address,uint256,address)", +"29ce7fc1": "getAllRightHand()", +"29cee59e": "finishCrowd()", +"29cf90f3": "sellUnicorn(uint256,uint256,uint256)", +"29d00d64": "ReloadKeys(uint256,uint256)", +"29d017b5": "TestWithConstructor(address,uint256[])", +"29d07c23": "registerForVoting()", +"29d0807b": "addone(uint256,uint256)", +"29d10b6e": "addSupervisor(address)", +"29d11b32": "btycbalanceOf(address)", +"29d24cbe": "TOKEN_SUPPLY_SEED_LIMIT()", +"29d287ec": "isFinishDateReached()", +"29d28aad": "Broker(address)", +"29d368e3": "curMax()", +"29d428ca": "requiredTokenAmount()", +"29d50682": "setupPlotOwnership(uint256,int256[],int256[])", +"29d56381": "balance_factor(uint256)", +"29d592bf": "arconaToken()", +"29d6ec95": "cancelBuy(uint256,uint256,uint256,uint256)", +"29d6f899": "BetOnBlue()", +"29d729ac": "ticket_addresses(uint256)", +"29d77446": "WhitelistSet(address)", +"29d87fbf": "setSeasonal()", +"29d91164": "delWhiteList(address,address)", +"29d98a7b": "change_individual_cap(uint256)", +"29da2fda": "UpdateToken()", +"29da3b4d": "removeBorrowingItem(uint256)", +"29da5738": "actionCount()", +"29daaa5e": "numFactories()", +"29dacb60": "getEthRaised()", +"29daf3ce": "create(bytes32,address,address,uint256)", +"29db191f": "approveForAll(uint256)", +"29db1a4f": "burnForInsurance(uint256)", +"29db3256": "getRandomBox(string)", +"29db8ec4": "getAccountSpendingRemaining(address)", +"29dbdd77": "updateDetails(bytes32)", +"29dcb0cf": "deadline()", +"29dd07eb": "KarlisToken()", +"29dd0b86": "lastSaleDate()", +"29dd0d7d": "requestBlokTokenOwnershipTransfer(address)", +"29dd8b26": "EGTToken()", +"29de3653": "register(uint256,uint256,bytes,bytes)", +"29de91db": "setMsg(address,uint256)", +"29df8972": "Nilometer()", +"29dfdded": "addNewDonkey(address)", +"29e10c13": "getAd(uint256,uint256)", +"29e1ddb8": "freeLottoInfo()", +"29e206bd": "forceDivestAll(bool)", +"29e21cbd": "UIWish(address)", +"29e286c6": "boughtWithoutWhitelist()", +"29e2b478": "addAddressToWhitelist(address,address,uint256)", +"29e30910": "testThrowCreateExistingNonce()", +"29e341f1": "adminAddRole(uint256,address,uint256)", +"29e3ae3d": "virtualTradesSummedCount(bytes32)", +"29e46d3f": "openingTimePeriodOne()", +"29e5dab7": "BytomGoldToken()", +"29e614ee": "addDrop()", +"29e63cd7": "addImmutableContract(string,address)", +"29e67fce": "Rate2()", +"29e6b5be": "VPTToken()", +"29e6f3f8": "setPI_edit_6(string)", +"29e80a80": "_iWantXKeys(uint256)", +"29e81c79": "isJobCancel(address,bytes)", +"29e846df": "dividends(address,uint8)", +"29e8bc0a": "getShareToken(uint8)", +"29e94503": "VersionedBlob()", +"29e94ef6": "getProjectedJackpot()", +"29e99f07": "test(uint256)", +"29e9a3b9": "tokensReceived(address,address,uint256)", +"29e9afc9": "EnterCode(uint32)", +"29ea110c": "maxCapInCents()", +"29eae053": "setService(address,address)", +"29eae264": "EosChain()", +"29eae797": "oldController()", +"29ec09cc": "GetConfirmRound(address,uint8)", +"29ecd1e0": "PriceChanged(string,uint256)", +"29ed0f06": "BitcoinLegendToken()", +"29ed1297": "setItem(address,address,string,string,string,bool)", +"29ed82a1": "getDeflator()", +"29ed9a6a": "depositERC721(address,uint256,address)", +"29edd574": "buyCopper(uint256,uint256,uint8,bytes32,bytes32)", +"29edfbb8": "GetApplicant(address)", +"29ee0480": "FlatPricingExt(uint256)", +"29ee1580": "setMyPrice(uint256,uint256)", +"29ef1919": "discountPercent()", +"29ef5552": "setupZoomLvl(uint8,int256,int256,uint256)", +"29ef56b1": "getAskOrderBookStats()", +"29f0a422": "MakeTransfer(address,uint256)", +"29f11c8d": "edit(uint256,string,string)", +"29f1bff4": "withdrawFromChildDAO(uint256)", +"29f20618": "createLineItem(string,uint256,uint256,uint256,uint256[])", +"29f27577": "InvestorList(uint256)", +"29f321e4": "buy_Vault(uint256,bytes8)", +"29f3533c": "setPriceStalePeriod(uint256)", +"29f4071b": "RegistrationStatusChanged(address,bool,uint256)", +"29f46429": "WIE()", +"29f5fb9c": "icoTokenSales()", +"29f62f70": "logSendEvent()", +"29f69427": "o2Address()", +"29f6d9c3": "clearTokenApproval(address,uint256,bool)", +"29f75dc2": "samePooling()", +"29f799cb": "Studio()", +"29f7bd2f": "transferToContributionPool(uint256)", +"29f958dc": "publish(uint16,uint16,bytes4,string,bytes3)", +"29fa7266": "setSuperOwner(address)", +"29fb598e": "bountyTransfer(address,uint256)", +"29fc550f": "getChallengesForUser(address)", +"29fc7bd8": "PERCENT_DIVIDER()", +"29fcfe2b": "VestingScheduleConfirmed(address,address,uint256,uint256,uint256,uint256,uint256)", +"29fcfeb0": "AUCTION_STARTED()", +"29fd06cf": "Qripplex()", +"29fd50eb": "libAddress()", +"29fd8201": "setReputationAddress(address)", +"29fe6199": "dailyPercent()", +"29fec030": "MAX_DAILY_TOKEN_SOLO_SPEND()", +"29ff42e1": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16,bytes32,bytes32)", +"29ff4f53": "setReleaseAgent(address)", +"29ff7d04": "revertReservation(address,address)", +"2a004bd0": "deleteChannel(address,address,address,address,address)", +"2a00d284": "rewardReferrer(address,address,uint256,uint256)", +"2a00ff6f": "endianConvert256bit(uint256)", +"2a013925": "setFundingCap(uint256)", +"2a0213f6": "FeeOnAllocation(uint256,uint256)", +"2a022f22": "ALLOC_SALE_GENERAL_2()", +"2a035b6c": "endGame(address)", +"2a03b48b": "Campaign(uint256,uint256,uint256,address,address)", +"2a03ffa5": "CryptoGOToken()", +"2a0401f0": "confirmOrder(bytes32,bytes32)", +"2a040c16": "TemboCoin()", +"2a04e88a": "ethRateInUsdCents()", +"2a0763ce": "endGameConflict(uint8,uint256,uint256,int256,uint256,bytes32,bytes32)", +"2a095c14": "getCompte_3()", +"2a095fbe": "unlinkEID(bytes,bytes,address)", +"2a096397": "myDeposit()", +"2a0a3b53": "NewText(string,string)", +"2a0a5f50": "BidCanceled(uint256,uint256)", +"2a0acc6a": "ADMIN()", +"2a0b2617": "getAccountDetails(uint256)", +"2a0b9cb5": "check_authorization(address,address)", +"2a0bb7ea": "mulIsSafe(uint256,uint256)", +"2a0bba0e": "ImperoCoin()", +"2a0c5221": "battle(uint256,uint256)", +"2a0d06ec": "getTotalPctx10()", +"2a0d479f": "TutorialToken()", +"2a0d79ef": "totalSupply(bytes)", +"2a0deab4": "getDataAndOwner3(uint256,uint256,uint256,uint256)", +"2a0f189a": "setCallPtr(uint256)", +"2a0f3c35": "rentableSetup(uint256,uint256,uint256)", +"2a104d8d": "withdrawLoan(uint256)", +"2a10abc3": "CrypteloERC20Address()", +"2a10ff23": "product2()", +"2a11b950": "contractEvents(uint256)", +"2a11ced0": "holders(uint256)", +"2a12b54d": "_transferToLock(address,uint256,uint256)", +"2a139f75": "PLATprice()", +"2a14314f": "satoeLocked()", +"2a143af4": "_calculatePercent(uint256)", +"2a14b80a": "partition()", +"2a151090": "canPerform(address,address,bytes32,uint256[])", +"2a16a9ee": "emitCategorySet(uint256,uint256,bytes32)", +"2a16cca4": "isApproved(address,uint256)", +"2a1727f8": "checkExistAddress(address)", +"2a174710": "getAttackForCost(uint32)", +"2a179054": "setTokenFeeTake(address,uint256)", +"2a17e397": "multiTransferTightlyPacked(bytes32[])", +"2a1828fb": "attController()", +"2a18ca16": "currentSaleLimit()", +"2a19642c": "setSpawnProxy(uint32,address)", +"2a1a3303": "getNumberOfFlips(address)", +"2a1a8d4a": "updateIcoStatus()", +"2a1ab57e": "register(address[],uint256[])", +"2a1bbc34": "generate()", +"2a1be747": "rateFirstWeekEnd()", +"2a1c70e7": "Indemnisation_1()", +"2a1cdf7a": "enableReturnContribution()", +"2a1e37de": "armyCountBattlesLost(uint256)", +"2a1eafd9": "targetSupply()", +"2a1eb7cc": "MintToOwner(uint256)", +"2a1ef0ca": "teamAllocation(address)", +"2a1f63f8": "MiningRewardSent(address,address,uint256)", +"2a1fc45d": "decreaseArrayOfBeneficiariesBalances(address[],uint256[])", +"2a21566f": "grantPositionOwnership(bytes32,address,address)", +"2a21a3af": "isNormalUser(address)", +"2a22196d": "getVoucherDetails(uint256,uint256)", +"2a2235f2": "winAmount0()", +"2a226857": "AlbaritTokenV4(address,string,string,uint256,uint256)", +"2a228fc2": "processWithdrawals()", +"2a23475f": "blockCrowdsale(address)", +"2a23ac02": "eBitcoincash()", +"2a24b8e1": "instruct_4()", +"2a24f46c": "auctionEnd()", +"2a2514a2": "AceFundToken()", +"2a258842": "ETHOS()", +"2a2604dd": "bidRefund(uint256,uint256)", +"2a272974": "tokensIssuedForBonusRangeTwo()", +"2a27fd4a": "forGenesis()", +"2a286a19": "rewardSplitPercent()", +"2a286eda": "productAccounts(uint256)", +"2a2879d3": "createPromoCar(address,string,uint256)", +"2a28822e": "create(address,int256,address)", +"2a288272": "setUpgradesOwned(address,uint256)", +"2a28c610": "uint256_to_bytes(uint256)", +"2a292cce": "openCrowdSale(uint256)", +"2a29312a": "recoverAddressFromSignedMessage(bytes,bytes)", +"2a295c1f": "ChainMonstersCore()", +"2a29700f": "setForceExecuteOfContracts(bool)", +"2a2998a0": "houseFeeVal()", +"2a29c8d9": "getLoansLengthByClient()", +"2a29d109": "rewardController(address)", +"2a2a62f6": "removePrivelegedWallet(address)", +"2a2a6434": "register(bytes32,bytes32,address,bytes32,bytes32,string)", +"2a2acdce": "getMyFrontEndTokens()", +"2a2ad4df": "ExpiringMembership()", +"2a2b48f5": "largestRetro()", +"2a2bb728": "ElephantsPaymentCoin()", +"2a2d78b0": "DeDeContract(address,uint256)", +"2a2dd486": "_computeAura(uint256,uint256)", +"2a2e00be": "MintingClosed(bool)", +"2a2e1320": "isEven(uint256)", +"2a2e2f0c": "convertInternal(address,address,uint256,uint256)", +"2a2e6358": "setMinRecharge(uint256)", +"2a2e6ee6": "countCrowdsalesForUser(address)", +"2a2eddde": "setVesting(address,uint256,uint256,uint256,uint256)", +"2a2f366c": "getPlayer(uint8[176],uint8,uint8)", +"2a2f7bda": "daysRemaining()", +"2a2fbd4b": "min_required_amount()", +"2a2fe110": "isCosignerSet()", +"2a304900": "getHunting(uint256,uint256)", +"2a305613": "transfer(uint152,uint152,uint256)", +"2a308b3a": "transfer(address,address,uint64)", +"2a30b0b8": "addARA(address)", +"2a316353": "JMTOKEN(uint256,string,string)", +"2a31c5b8": "_addBonusOfTop(address,uint256)", +"2a332b2a": "setLotteryAddress(address)", +"2a335c17": "getTotalSalaryBunny(uint32)", +"2a337d30": "submitMatch(bytes32,bytes32)", +"2a3386e5": "covmanagerAddress()", +"2a33fec6": "proceed()", +"2a3520e1": "addDataInstance()", +"2a3590b9": "mimetype()", +"2a35d251": "_move(uint256,address,address)", +"2a3602b2": "DayLimitMock(uint256)", +"2a369647": "getEndpointParams(address,bytes32,int256)", +"2a36b7ac": "TotalRate()", +"2a37d540": "CrowdToken()", +"2a37eaea": "buyWithHash(address,uint256,uint256,bytes32)", +"2a387bdd": "bsx(uint256,string,string)", +"2a388b1f": "cancelDeposit(bytes32,uint256,uint256)", +"2a389fdc": "Pray4Prey(uint128[],uint8[])", +"2a38d484": "getNumEntries(uint256)", +"2a3966ff": "setActiveStatusEgg(uint256,bool)", +"2a396734": "burnPXLRewardPXL(address,uint256,address,uint256)", +"2a39a069": "minInvestmentInWei()", +"2a39c1ea": "officialUrl()", +"2a3a236f": "setMasterContract(address)", +"2a3b1228": "RobotnikToken(address)", +"2a3c2c56": "getConversionFeeAmount(uint256)", +"2a3d05cc": "getSignedIndex()", +"2a3d30c2": "coinValue()", +"2a3dc703": "updateRewardLedger(address,uint256,uint256)", +"2a3de92f": "getCurrentBonusPct()", +"2a3e6ba1": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE5()", +"2a3ec4ff": "takeICOInvestmentsEtherCommission(address,address)", +"2a3ef566": "EscapeCalled(uint256)", +"2a410068": "updateShares()", +"2a41360d": "processOfflinePurchase(address,uint256,int256)", +"2a41d1ff": "ArrAccountIsNotFrozen(uint256)", +"2a42e85f": "MiBoodleToken(uint256,uint256,uint256,uint256,uint256)", +"2a437269": "RCCCToken()", +"2a43b847": "TEACHToken()", +"2a43db3a": "Creature()", +"2a45a39a": "Post(address)", +"2a4654ab": "getAnimecard(uint256)", +"2a46d079": "MAT_UNIT()", +"2a472ae8": "checkIfCalled(bytes32)", +"2a4735c1": "EXOTokenSale(address,address,address)", +"2a47e08a": "Potato()", +"2a4802bc": "JINS()", +"2a4843a7": "freezeHeight()", +"2a486a28": "raisedETH()", +"2a48cabb": "testSwapTop()", +"2a491877": "lastTimeOf(address)", +"2a49222b": "isUsernameTaken(bytes32)", +"2a4a1a9b": "addFunds(address)", +"2a4a1b73": "vote(address,uint256,uint256)", +"2a4a8d68": "PRESALE_WEI_WITH_BONUS()", +"2a4a8e02": "stakedAmount(address,address)", +"2a4c7c6d": "initiateClaim(bytes32)", +"2a4caf67": "setDistenseAddress(address)", +"2a4d1a12": "CardExists(uint32)", +"2a4dc687": "callLib2(uint256)", +"2a4e0d55": "getTranscoderPoolSize()", +"2a4e4a84": "forx()", +"2a4ef2a3": "wpxTeamAddress()", +"2a4f1f21": "ACLYDTOKEN()", +"2a4f370f": "forTesting()", +"2a4fe4ef": "ClimateCronToken()", +"2a4ff14a": "Vlogchain(uint256,uint256)", +"2a50097b": "getPlayerBets(uint256,address)", +"2a501a43": "grantBonusDrops(address,uint256)", +"2a50d71d": "transferWithLock(address,uint256,uint256,uint256)", +"2a513dd9": "changeMinimum(uint256)", +"2a515949": "_attack(uint256,uint256,uint256,uint256)", +"2a523e89": "maxReferrerTokens()", +"2a52ee60": "createAuthority()", +"2a548276": "AddStaticProfit(address,uint16,uint256)", +"2a54d313": "pay(address,address,address,uint256,uint256,uint256)", +"2a555650": "HoneySuckleTimes()", +"2a55c47d": "TrumpFarmer()", +"2a55cab6": "UniCoinSize()", +"2a55feec": "isBuyer(address)", +"2a560845": "ownerWithdrawUnsupportedTokens(address,address)", +"2a571b15": "strikersChecklist()", +"2a583b90": "withdrawRake()", +"2a5854d9": "getFreeSquirrel()", +"2a58b330": "nextOrderId()", +"2a59143a": "HIKI()", +"2a595dd2": "GridcubeToken()", +"2a5b204a": "subCoinBalance(address,uint256)", +"2a5b51c3": "TokensIn(uint256)", +"2a5b68fd": "validate(bool)", +"2a5bfc7b": "isFunctionAuthorized(bytes32)", +"2a5c0e7c": "HomeBridge(uint256,address[],uint256,uint256,uint256)", +"2a5c2a64": "ITGCToken()", +"2a5c4675": "reservation()", +"2a5c65e4": "lookupInterest(uint256,uint256)", +"2a5c792a": "getAllTokens()", +"2a5cd45e": "getModuleIDByName(string)", +"2a5da7cd": "AnimatixToken()", +"2a5e695e": "Clean()", +"2a5eb26a": "BITCOINGAME()", +"2a5ed678": "currentContributionLimit()", +"2a5f6239": "_addReferrer(address,address)", +"2a5f6a0f": "setVariationCycle(uint256)", +"2a607962": "minCutValue()", +"2a608c0c": "VicoOwner()", +"2a60cf07": "FUTURE_DEVELOPMENT_FUND()", +"2a61ae19": "LockBalance(address)", +"2a61d47b": "getResourceSetCount()", +"2a62738b": "icoEndDate()", +"2a62b7fa": "IcoContract()", +"2a632eb5": "setUsdTokenPrice(uint256)", +"2a6389dc": "IsTransferFromOldContractDone()", +"2a649d6a": "returnFixed()", +"2a64e635": "simpleToken()", +"2a64fb63": "getSaleDate(bytes)", +"2a663686": "fpartSigned(int128)", +"2a666e01": "_fight(uint32,uint32)", +"2a66ede5": "giveMeETH()", +"2a677fb9": "getTokensForValue(uint256)", +"2a6852bf": "KOKOCoin()", +"2a6865e3": "PibbleToken()", +"2a69d486": "changeCraneStatus(bool)", +"2a69e1c6": "onlyWhitelistedCanDo()", +"2a69e7d9": "transfer(address,uint48)", +"2a6a5394": "TokenCappedCrowdsale(uint256)", +"2a6b157a": "CrowdsaleClosed(address)", +"2a6c703b": "RATING_EXPAND_INTERVAL()", +"2a6c7757": "kjhcoin()", +"2a6cc9bf": "QRReal()", +"2a6d474d": "usdPerEthMin()", +"2a6d6c08": "ReleasableAmount(address,uint256)", +"2a6dd48f": "approvedFor(uint256)", +"2a6dd8c9": "getPercent()", +"2a6dd9cb": "getInfoA(uint256)", +"2a6e3803": "getSoldAreasCount()", +"2a6e3e5e": "correct_check_match(uint256[39])", +"2a6efd76": "additionalRewards()", +"2a6f39ed": "deleteAllParents()", +"2a6f65c7": "getRoundToGroupToInput(address,uint256,uint256)", +"2a70214a": "TWD_Omnidollar()", +"2a707d2c": "personal_withdraw(string,uint256)", +"2a709b14": "tokenManager()", +"2a70d1e7": "registerInit(address)", +"2a711ab4": "voteTeam(bool)", +"2a714078": "triggerAuth()", +"2a71e729": "NAGACOIN()", +"2a724f2a": "reclaimAllAndBurn(address)", +"2a729061": "IDXToken()", +"2a7292d0": "createToken(uint256,address,uint256)", +"2a7318ac": "changePresaleEndDate(uint256)", +"2a73db5c": "GetContributorInformation(address)", +"2a741385": "subTokens(uint256,string)", +"2a745971": "BlockKing()", +"2a745ae6": "flowerAllowed(address,address)", +"2a74833d": "getUserSupportInTournament(uint256)", +"2a7575ee": "availableBalanceOf(address,address)", +"2a75a2ac": "addressFundAdministration()", +"2a75cb71": "removeOwnerRequest2(address)", +"2a764406": "CreateLRP(address,uint256)", +"2a76a169": "freezeMultipleAccounts(address[],bool[])", +"2a76ffae": "depositEtherForRefund()", +"2a774c27": "totAllocation()", +"2a776e3d": "setKYCLimited(address[])", +"2a7781cc": "postData(address,string,bytes32)", +"2a77b4af": "FEE_MUL()", +"2a77f2b7": "minMaxBuyETH()", +"2a7806e4": "noTokenLocked()", +"2a7813a4": "BitcoinBlackPearl()", +"2a781f78": "getKYCPresalePayload(bytes)", +"2a782802": "creatorBalances(address)", +"2a792f57": "buyAKeyWithAmount(uint256,address,uint256)", +"2a795d79": "bounty_allocation()", +"2a79fa0e": "TakePrize(uint256)", +"2a7a3ac7": "claimUnallocated(address)", +"2a7a50a5": "Intro(string,string,string,string)", +"2a7a80a4": "trade(address,address,uint256,address,address,uint256,uint256,address,bytes)", +"2a7b0172": "dontSellRock(uint256)", +"2a7b2c93": "split(string)", +"2a7b3d4d": "resumeWhitelist()", +"2a7c24f1": "power(int256,int256)", +"2a7ca11f": "getMemeData(uint256)", +"2a7caaec": "FOUNDATION_WALLET()", +"2a7e0cc0": "createtoken(string,string,string,string,string,uint256)", +"2a7e5018": "timeVault(address)", +"2a7e60b6": "setRevealClosed(uint256)", +"2a7ef0cc": "IDEA()", +"2a7f26c4": "GetAllCurrencyIDs()", +"2a8014ca": "escrowAmount(address,uint256)", +"2a804835": "setCooldownEndBlock(uint256,uint64)", +"2a805069": "createToken(uint256,uint256)", +"2a808899": "getSkillCount(address)", +"2a8092df": "isMinting()", +"2a812941": "getInitializeDesignatedReporterAddressValue()", +"2a816e65": "factorWeight()", +"2a8219e2": "setFundingBlock(uint256,uint256,uint256)", +"2a827f99": "getTokenOwnerReward()", +"2a82fdbd": "approveAdd(uint256,address,bool)", +"2a835d67": "changePreIcoStartTime(uint256)", +"2a83cd70": "MrReaperToken()", +"2a845b9f": "ADPay()", +"2a8565b4": "GACT()", +"2a856fcf": "debit(bytes32[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", +"2a858126": "tickerRegistry()", +"2a8587f9": "unAuthorized(address,address)", +"2a85a45d": "right38(uint256)", +"2a85b7dd": "getBackEtherFor(address)", +"2a862f1a": "notLessThan()", +"2a86eef3": "countDiscount(uint256)", +"2a874f34": "finishCampaign(bytes32)", +"2a87a86f": "shift(address,uint256,bool)", +"2a882d1d": "TokenHolderSnapshotter(address,address)", +"2a887299": "bid_threshold()", +"2a89d1bc": "TranchorToken(uint256,uint256,address,address)", +"2a89d6fd": "registerForGetTogether(address)", +"2a8a8b19": "bonusList()", +"2a8a8ebb": "unitStake()", +"2a8ab73c": "getProductOrderPayer(uint256)", +"2a8ade3a": "TotalCapacity()", +"2a8d1c61": "maxMask()", +"2a8d26e8": "approveTransfer()", +"2a8d7baa": "claimCompanyReserve()", +"2a8de0ca": "DranMe()", +"2a8e251f": "BitcoinNature()", +"2a8e391d": "OperationsFund()", +"2a8e5eae": "isInGroupOf(uint256,uint256,address)", +"2a8eb9a3": "arpToken()", +"2a8ec8cc": "numberOfPledges()", +"2a8f368b": "RESERVED_COMPANY_GROUP()", +"2a8f6aa8": "TOKENS_FOR_OPERATIONS()", +"2a8faf95": "secondaryGasLimit()", +"2a8fd223": "Flagged(address,bool)", +"2a9043e4": "sellValue()", +"2a9046d8": "disableGeneration()", +"2a905318": "TOKEN_SYMBOL()", +"2a905ccc": "getAdminFee()", +"2a9078d6": "OWNERS()", +"2a909257": "MultiCappedCrowdsale(uint256,bytes32,uint256)", +"2a9121c7": "ethereumToTokens_(uint256)", +"2a91ab16": "doAirDrop(address[],address,uint256[],uint256)", +"2a922d54": "collectedAddresses(uint256)", +"2a92362c": "getPaid(uint256)", +"2a9278c5": "optionPoolLockTotal()", +"2a92bb17": "OPRAH()", +"2a92bffa": "setEditionPackPrice(uint8,uint256)", +"2a93b5bb": "pausePreIco()", +"2a943be1": "LIRAX(string,string,uint256,string)", +"2a952b2d": "process(bytes32)", +"2a952b4b": "setParents(uint256,uint256,uint256)", +"2a970043": "create(string,uint256,uint256,uint256)", +"2a98e802": "setPerformanceBonus(uint256)", +"2a9a86c1": "createBucket(bytes32[])", +"2a9af123": "DOMTOK()", +"2a9b4921": "testManager(address)", +"2a9b6975": "SuperNanoCoin()", +"2a9b6dee": "pastFiveMinutes()", +"2a9ba092": "resizeIssuersArray(uint256)", +"2a9d04f0": "TOKEN_PRIVATE_SALE_CAP()", +"2a9e97f1": "matured_block_number()", +"2a9edf6f": "ownerSetStakeStartTime(uint256)", +"2a9f0fb2": "getPriceWithInterests(uint256)", +"2a9f1a79": "acceptPayment(address)", +"2a9fabd2": "betMatch(uint256,uint256)", +"2a9fb933": "MintExecuted(uint256,address,uint256)", +"2a9fb9b2": "userTransfer()", +"2aa0426c": "getAllBlocksByOwner(address)", +"2aa056cd": "shares_holders_count()", +"2aa073c5": "icoActive()", +"2aa0da47": "paymentSettings(string)", +"2aa1e848": "getPlayerAffT2(uint256)", +"2aa2b7eb": "T8CToken(address,uint256)", +"2aa2c381": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address)", +"2aa2f7a4": "getOwnOrderByIndex(uint256)", +"2aa3177a": "self_store()", +"2aa37a41": "substractBalance(address,uint256)", +"2aa49dd7": "Pixiu()", +"2aa4c051": "setifoodDevAddress(address)", +"2aa531d9": "getPlayerData(address)", +"2aa5411f": "jadeRec(uint256,uint256)", +"2aa5ed61": "DayLimit(uint256)", +"2aa6f98b": "ledToken()", +"2aa71e24": "init(bytes32,address)", +"2aa852b3": "removeListener(address,address)", +"2aa8be8d": "createPermission(address,address,bytes4,address)", +"2aa9466b": "updateMyWorks(bytes32,address,address,bytes32,uint256,uint256)", +"2aaa308e": "finalize(address,address,address,address)", +"2aaa49f5": "percentageQuarter3()", +"2aaa9de1": "AlicToken()", +"2aab1351": "receiveFromSigned(address,bytes,uint256,uint8,bytes32,bytes32)", +"2aab22ff": "BonusReferrerCrowdsale(uint256)", +"2aab80dd": "optionPool()", +"2aabb48e": "nextContributionCap()", +"2aabffdf": "disableSaleAgent(address)", +"2aac6911": "poolBLock()", +"2aac8ad4": "getFirstAndSecondItem()", +"2aad292e": "setOperatingOfficer(address)", +"2aadafe8": "refundAdvertiser(address,uint256)", +"2aae7f26": "Arcturus()", +"2aae88f6": "removeFromGeneration(uint256,address)", +"2aaee1a5": "Drawer()", +"2aaef20c": "sixth_withdrawal(uint256)", +"2aaefa9f": "centsExchangeRate()", +"2aaf1685": "testControlCreateWithParentSameItemId()", +"2aafbf7c": "Getether()", +"2aafe9e7": "metToken()", +"2ab0252d": "getERC721AddrPawn(uint256)", +"2ab08396": "OwnersDb()", +"2ab0be77": "getTicketCode(uint256)", +"2ab0bf3c": "GetContributorData(address,uint256)", +"2ab13037": "votesNo()", +"2ab19a7e": "GoalMaximumReached(address,uint256,uint256)", +"2ab2174e": "subOnOneStage(address,uint256,uint256)", +"2ab22592": "updateWinnerBid(bool,bytes,uint256,bytes,bytes,bytes)", +"2ab24e3b": "commitVote(address,bytes32,bytes32,bytes32)", +"2ab26831": "getRateIco()", +"2ab28ce4": "buyTree(uint256,address)", +"2ab290fc": "updatejingzhi(uint256,string,uint256)", +"2ab34a91": "claimEnergy()", +"2ab4672a": "BatchCreateSaleAvgPrice(uint256[],uint256,uint256,uint256,uint64,address)", +"2ab4d052": "maxTotalSupply()", +"2ab4ebfa": "AddItem(address,address)", +"2ab6a50e": "payoutBigBonus(address)", +"2ab6f3f0": "BteamBets(uint256)", +"2ab6f8db": "renounceOperator()", +"2ab7173b": "lockup_startdate()", +"2ab72d2f": "assetIdOfToken(uint256)", +"2ab76377": "icoEndTimestampStage3()", +"2ab7961e": "aDeleteMessage(uint256,string,string)", +"2ab7d104": "_getAllRevisionIpfsHashes(bytes32)", +"2ab8de9b": "hash_ripemd160(string,uint256)", +"2ab8fc2d": "reservesPerTokenSrc(address,uint256)", +"2ab90d66": "ownerrestart()", +"2ab924d2": "HRCoin()", +"2abaa0c9": "picosCap()", +"2abaca23": "participate_in_arbits_presale_fiat(address,uint256)", +"2abd7fc8": "withdrawDao()", +"2abdbeb8": "forceOverStage()", +"2abdf1ef": "_update(string,uint256,string,uint256,uint256,uint256)", +"2abe4f60": "getInStake(uint256)", +"2abe5a2d": "getCandidate(uint32)", +"2abf2aae": "payMaxAuctionEther()", +"2abfab4d": "donationCount()", +"2abfaf1f": "setFreeTransfer(bool)", +"2abfbd28": "mintCommunityRewards()", +"2ac016ad": "addBackend(address)", +"2ac025ab": "removeAddressFromRole(address,string)", +"2ac08739": "getCurrentDuke(string)", +"2ac110c5": "icoPhase2Start()", +"2ac12622": "cancelled(bytes32)", +"2ac197c4": "IPMCOIN()", +"2ac1a995": "HiBTCToken()", +"2ac1db5a": "getEthToTokenUpdateOrderHint(uint32,uint128,uint128)", +"2ac20ed4": "createInitialDays(uint256)", +"2ac2af53": "updateParameters(bytes32)", +"2ac306b0": "BitCoin()", +"2ac364b4": "PalavraCoin()", +"2ac394a4": "durationBetweenRewardMints()", +"2ac48524": "getTokensCount(address)", +"2ac4a51d": "OVALExchangeToken()", +"2ac50df1": "tokenPriceOracle()", +"2ac68b78": "acceptPayment(address,uint256)", +"2ac69167": "StockLocation(string)", +"2ac6f15f": "exchangePreDGZTokens()", +"2ac71c16": "maxUSD()", +"2ac7f8ce": "CrowdSaleChanged(address)", +"2ac85e46": "isValidNode(uint256)", +"2ac87112": "ETHRaised()", +"2ac9bf09": "bid(uint256,uint256,uint256)", +"2aca2b16": "setInvestxPlatform(address)", +"2acada4d": "getAllAssets()", +"2acc204c": "killMeshPoint(int256,address,address,string,address)", +"2accf2f7": "splitFunds(address,address)", +"2acd1a95": "sling(string,string,string,string,uint256)", +"2acd2000": "removeFreezer(address)", +"2acd7e41": "transferOwnerToTest()", +"2acefd0f": "setCitySlogan(uint256,string)", +"2acf3908": "StealthGridToken(uint256,string,string)", +"2acf8551": "playMeta(address,address,uint256)", +"2ad02172": "MAX_PREICO_SUPPLY()", +"2ad0a4e9": "pauseNotice()", +"2ad11b9e": "getMinerals()", +"2ad12937": "OwnableToken()", +"2ad1bc09": "steal(int128,string,address)", +"2ad2a9f8": "transfer(bytes32,uint256,address)", +"2ad2ae2e": "collectLocalBounty(uint16,uint256)", +"2ad3274f": "UpgradeScheme()", +"2ad3509b": "ExcreteumToken()", +"2ad389e3": "constructHashRs1Rs2(bytes,bytes)", +"2ad3e8bc": "GreenChain()", +"2ad3ef70": "randContract()", +"2ad45312": "WEI_MINIMUM_PURCHASE()", +"2ad4d818": "userCreate(string,string)", +"2ad64a4d": "MAXCAP_TOKENS_PRE_ICO()", +"2ad8016e": "changeDiscount(uint256,uint256,uint256)", +"2ad8aaa6": "bonusAmmount(uint256)", +"2ad8d875": "getPayeeExpectedAmount(bytes32,uint8)", +"2ad8fbd2": "MerrierToken(string,string,uint256,uint256,bool)", +"2ad92740": "tokensPurchased(address)", +"2ad9527e": "h_pwd()", +"2ad95786": "winner(address)", +"2ad9618c": "startCrowdsale(uint256,uint256,uint256,uint256[],uint256[])", +"2ad99825": "setOwnerCutPercentage(uint256)", +"2ad9efc0": "UbayToken(address,uint256)", +"2ada2596": "getMember(address)", +"2adbb84d": "onFreezing()", +"2adbc396": "BurnableCrowdsaleToken(string,string,uint256,uint256,bool)", +"2adc2cd2": "COIN_PER_ETHER_ACTIVE()", +"2adc7da3": "setCentralBanker(address)", +"2add5a50": "cofounders(uint256)", +"2add78bb": "StartQ(string,string)", +"2addeab6": "getSolver(uint256)", +"2ade6c36": "getNodeAddress(bytes32)", +"2adf68bb": "UTPLToken()", +"2adf7d2f": "tenZero()", +"2ae1158d": "votingWeightOf(address,uint256,uint256,uint256)", +"2ae26d8e": "tenDecimalPlaces()", +"2ae3594a": "hit()", +"2ae418a4": "getPrivatePreSaleTokenBalance(address)", +"2ae4b85f": "MAX_HOST_PERCENT()", +"2ae524c2": "mintRiskTokens(address,uint256)", +"2ae6218d": "getBurnPrice()", +"2ae67563": "GameSicBo(string,uint256,uint256,uint256,address)", +"2ae6f9c2": "Ownerburn(uint256,address)", +"2ae72544": "length(int256)", +"2ae7c2df": "Ethernite()", +"2ae7c313": "Injected(address,uint256,uint256)", +"2ae8284a": "_newGame(uint256)", +"2ae8636d": "withdrawPRSTokens(address)", +"2ae87a70": "getNumContents(address,uint256)", +"2ae8a2d2": "sendFunds(address,uint256,uint256)", +"2ae8a7e3": "checkRole(address,bytes32)", +"2ae8b4a3": "actualGotETH(address)", +"2ae9782c": "MARRON()", +"2ae9c600": "protocolVersion()", +"2aea4d21": "sealer()", +"2aeaa291": "checkRewards()", +"2aeabfbf": "getLiquidityAndPositions(bytes32,address)", +"2aeacd4a": "exchangeTokensFromOtherContract(address,address,uint256)", +"2aebcbb6": "finishVote()", +"2aec3169": "setThirdWinner(address[])", +"2aec3a71": "ProofOfHumanityAddOn()", +"2aec9466": "updateInfo(uint256,uint256,uint256)", +"2aed1390": "kyberContract()", +"2aed1905": "setMatchingEnabled(bool)", +"2aed256e": "inRangeToDisembark(uint16,uint16,address)", +"2aed7f3f": "reclaimContract(address)", +"2aee19c7": "testCreateWithNonce()", +"2aef3898": "ChangeMinSaleAmount(uint256)", +"2aef6ff6": "serviceTrasferFromDist(bytes32,address,uint256)", +"2aefb7c5": "funds_claimed()", +"2af004e7": "setReferralAddress(address,address)", +"2af05c4e": "lastMintingTime()", +"2af05d07": "unlockCurrentAvailableFunds()", +"2af0ac71": "getAmountSoldAfterPowerDay()", +"2af123b8": "diffHours(uint256,uint256)", +"2af1616d": "MissionToken(uint256,string,uint8,string)", +"2af1b5a2": "protectedUnlock(address,uint256,string)", +"2af1c247": "mint(string,uint256,uint8,string)", +"2af22e3b": "getJobs(address,uint256)", +"2af37ba0": "Donate(string)", +"2af38eab": "totalBspAmount()", +"2af39bab": "AssetBackedTokens(string,uint8,address)", +"2af3b7f8": "updateState(bytes32,uint256,bytes,bytes,bytes)", +"2af4c31e": "changeOwnership(address)", +"2af52312": "TRAToken(address)", +"2af5356a": "claimTeamTokens()", +"2af5cfdd": "priceOfEthOnEUR()", +"2af5e6b2": "setPriceEther(uint256)", +"2af6fb10": "ERC20TokenImpl()", +"2af7ac0a": "rtu(uint256)", +"2af7c4d7": "Certifiers()", +"2af7ceff": "testPrice(uint256)", +"2af7ecc7": "addRosenCertAdmin(address)", +"2af8afca": "dgt()", +"2af8b645": "release(bytes32,bytes32)", +"2af8fd94": "ISmartCert()", +"2afaca20": "buy(uint256,address,uint256)", +"2afb21bc": "InvestWithdraw()", +"2afb9fb1": "isCardTradeable(uint64)", +"2afbbacb": "canStake(address,uint256)", +"2afbc38f": "Annexe_SO_DIVA_SAS()", +"2afbe339": "QQQToken()", +"2afcdfbc": "createGen0Auction(uint256,uint256,uint256,uint256,uint256)", +"2afcf433": "PriceTwoEnable()", +"2afcf480": "invest(uint256)", +"2afd1a7d": "getReleasableAmount(address)", +"2afe4c37": "tokensleft()", +"2afe9f1e": "TestTokenContract()", +"2afed67e": "amountFundBounty()", +"2aff101c": "LinearDecayingTokenFunction()", +"2aff2843": "servusMultiSig()", +"2aff49d7": "setSizeAndRate(uint256,uint256)", +"2b000f00": "calculate_next_expected_wei(uint256,uint256,uint256,uint256)", +"2b00c6fd": "createHorseShoe1(uint256,uint256,address)", +"2b019692": "RYNote()", +"2b01bf51": "isValidMember(address)", +"2b028bbb": "LKCExchangeRate()", +"2b02d9af": "NIMBUS()", +"2b03b8d4": "IMDEXdeposit()", +"2b03d70e": "undisputeFavor()", +"2b04451a": "totalExtraOptions()", +"2b048f77": "getMyDeployAt(uint32,uint32)", +"2b04b478": "removeUsersFromGroup(bytes32,address[])", +"2b04d8f7": "takeOffer(uint256,address)", +"2b04e840": "getBalance(address,uint256)", +"2b051b50": "revealVoteOnProposal(bytes32,uint8,bool,bytes32)", +"2b05d346": "CallScheduled(address)", +"2b069816": "getJobValue(uint256)", +"2b071e47": "spread(address[],uint256[])", +"2b07682a": "withdrawFoundersTokens()", +"2b086b92": "convertToTMEX(uint256,address)", +"2b08fef7": "buy_token(address[],uint256)", +"2b093fe9": "TOKEN_MULTIPLIER()", +"2b0999f3": "initialYear()", +"2b09e707": "amountHives()", +"2b0aa1ed": "updateEthFee(uint256)", +"2b0ac7c4": "_createToken(uint256,uint256,uint256,uint256,uint256,address)", +"2b0cb194": "mintRawTokens(address,uint256)", +"2b0d0180": "luckyBuy()", +"2b0d0c6a": "afterFirstRefundRoundFundsReleaseNumerator()", +"2b0e16bf": "PRESALE_BALANCES()", +"2b0e64b3": "determineCommissions()", +"2b0ebfe9": "activatedJuryTokens(address)", +"2b0fbf72": "getMobster(uint256)", +"2b0fd89e": "ARcoin()", +"2b0fdb72": "MINIMUM_MANUAL_SIGN_PERIOD()", +"2b0ff02d": "listCard(uint64,uint128,uint128,uint24)", +"2b100a31": "setStatsSumHours(uint256,uint256)", +"2b1071c9": "testTransferToNullAuthority()", +"2b112e49": "getCirculatingSupply()", +"2b11e7f6": "SILVER_AMOUNT_SKL()", +"2b124245": "selfRegisterDINsWithResolver(address,uint256)", +"2b12553b": "saleExchangeRate()", +"2b13d799": "redeemedList(uint256)", +"2b1453dd": "addSwap(string)", +"2b146407": "PrivateSale()", +"2b14b712": "addClient(address,address,uint256)", +"2b14ca56": "sellFee()", +"2b151096": "placeSaleOrder(bytes8,bytes8,uint256,uint256,uint256)", +"2b15eb9b": "TongTong(string,string,uint256)", +"2b16b56a": "setIndex(uint256,uint256)", +"2b16f1ef": "nextPoolPercentage()", +"2b17355e": "balancesPrivate(address)", +"2b17b6a9": "bnbToken()", +"2b1841d2": "openCdp(uint256,uint256,uint256,address)", +"2b1857a5": "dividendPathways(address,uint256)", +"2b190f18": "getFreeTokens()", +"2b193ac4": "INITIAL_AC_SUPPLY()", +"2b198366": "addCertifier(address)", +"2b198808": "BloccaConto(address,bool)", +"2b1c511f": "getAvailability(address)", +"2b1c6982": "testTemp2()", +"2b1dd8da": "refundFees()", +"2b1e27f1": "migrateDomain(uint256,bytes32)", +"2b1e5016": "releaseTheHodl()", +"2b1ed01a": "warehouses()", +"2b1f7660": "PRZTToken(uint256,string,uint8,string)", +"2b1fcc10": "impl_cancelOrder(address,uint256,bool)", +"2b1fd58a": "acceptBid(uint256)", +"2b20e397": "registrar()", +"2b214618": "listAllBuyBalance(address,uint256,uint256)", +"2b21502f": "totalEthRcvd()", +"2b21d01b": "rateBTCxETH()", +"2b223264": "BitcoinBrand()", +"2b22a18c": "allocate8ProjectToken()", +"2b232741": "pullFromCirculation(uint8)", +"2b2443db": "canRaiseUsing(uint256)", +"2b2449b5": "setMaxCAP(uint256)", +"2b24aa6e": "rateA()", +"2b252d17": "_randomize(uint256,uint256)", +"2b25303b": "USDTUBE()", +"2b25a7e4": "giveKudos(address,uint256)", +"2b28d2d0": "totalFrozenAccountsMapping()", +"2b291eb6": "UserAddTicket(bytes)", +"2b29532b": "distributeLCASH(address[],uint256,uint256)", +"2b297f9e": "registerDao(address)", +"2b29908d": "BGB_address()", +"2b29fbfa": "testFail_voterNotCertified()", +"2b2b2882": "mintIcoTokenMultiple(address[],uint256[])", +"2b2badb3": "getAuditor(address)", +"2b2c71af": "doTradeofCollateral(address,address,uint256,uint256,uint256,uint256)", +"2b2c91b9": "refundApprove(address,uint256)", +"2b2dc12e": "RECEIVER_PAYOUT_THRESHOLD()", +"2b2e7159": "typeB()", +"2b2e76f3": "LA_wallet()", +"2b2f4d84": "setVestingParams(uint256,uint256,uint256)", +"2b2f88a8": "quantidadeDeAutorizacoes(address)", +"2b2fbd68": "minTicketEur()", +"2b302b60": "fairymasterReq()", +"2b30a84e": "rollTwo(address,uint8,uint8)", +"2b30d2b8": "invoke(uint256)", +"2b318568": "AddDynamicProfit(address,uint32,uint256)", +"2b321633": "testCloseChannel()", +"2b3297f9": "swapper()", +"2b337152": "totalissue()", +"2b343100": "newPlayerFee()", +"2b359e6b": "fundingTokens()", +"2b35d08a": "_computePrice(uint256)", +"2b36316e": "updateStageCap(uint256)", +"2b36a657": "profits()", +"2b379218": "globalDailySupply()", +"2b37d313": "tdeIssuer()", +"2b38ee56": "exitFee_()", +"2b3a4ae3": "adjustFeeEntitlement(address,uint256)", +"2b3b885d": "BGJC(uint256,string,string)", +"2b3c7562": "tierThreePurchase()", +"2b3da717": "BOBOTOKEN2()", +"2b3eae40": "MatchmasterTakeover(address,address,uint256)", +"2b3eb76c": "awardAmountPrime()", +"2b3ed526": "setFiatContract(address)", +"2b3ede1c": "WithdrawAll(address)", +"2b3f9f01": "_setSpendAvailable(uint256)", +"2b3fbbbb": "setPixelColor(uint16,uint16,uint24)", +"2b3ff9e9": "DLVO()", +"2b4143bd": "BasketRegistry()", +"2b4158cb": "buyFreePixels(uint256,uint256,uint256,uint256)", +"2b41a901": "grandTotalAllocated()", +"2b423b05": "changeRequiredMinor(uint256,bool,bytes)", +"2b42a89a": "setWhitelistOnlyPermission(bool)", +"2b42f4b2": "TokensCreated(address,uint256,uint256)", +"2b435366": "fund(address,bool)", +"2b4353f2": "payoutRate()", +"2b44d05f": "LISA()", +"2b44e5be": "distributeTokenToAddress(address,address,address,uint256)", +"2b44fd38": "dayLimit_()", +"2b455ac6": "insertMilestone(uint8,uint256,uint256,uint256)", +"2b459e81": "SpermLabsReborn()", +"2b45bcf9": "minimumHydroStakeUser()", +"2b4656c8": "initialize(address,address,address,uint256,uint256,uint256,uint256)", +"2b46e7f8": "SLUTZToken()", +"2b47571a": "resetWithdrawTimer(uint256)", +"2b47cb17": "TopToken()", +"2b49c9c2": "updateBanqueAddress(address)", +"2b49d425": "currentProposal()", +"2b49d9e5": "setFighters(uint32,uint32,uint256[])", +"2b4a27cb": "fechPreAllSumNumForCandidate()", +"2b4a2d0a": "getInfoFromCreateAuction(bytes)", +"2b4a3b31": "doTransferFrom(address,address,uint256)", +"2b4a964b": "networkGrowthAmount()", +"2b4bdf76": "getBdpController(address[16])", +"2b4ca103": "TXQToken(address,uint256)", +"2b4cbcc3": "getCombat(uint256)", +"2b4d0450": "BaseToken(string,string)", +"2b4d7c3e": "getPositionLender(bytes32)", +"2b4e8413": "userNumber()", +"2b4f79b3": "buyMessage(bytes32,uint256,string)", +"2b5129f5": "WaterMeterAcorn(bytes32,uint8,uint256,uint256,uint256)", +"2b513549": "mokenNameBytes32(uint256)", +"2b514749": "getTeamPrice(uint256[])", +"2b5184a6": "addSponsorship(address,address,uint256)", +"2b5187fd": "STCC()", +"2b521416": "features()", +"2b549b82": "createAuction(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"2b54c3ce": "addToken(uint256,string)", +"2b554142": "redeemMany(address[],uint256[])", +"2b556813": "twitterDropMultipleAmount(address[],uint256[])", +"2b5570ad": "PatientFactory()", +"2b5630c2": "displayvehicledetails(address,uint256)", +"2b57298b": "getDate(uint256)", +"2b577ec4": "PREMINE_RELEASE(address,uint256,uint256)", +"2b58072f": "getDatasetsCount(address)", +"2b58150b": "setLotteryDuration(uint256)", +"2b587555": "privateTransfer(address,uint256)", +"2b58e202": "tokensOfOwnerFromIndex(address,uint256,uint256)", +"2b5914fe": "setUserName(string)", +"2b5947e7": "checkDivsRndView(address)", +"2b596a23": "balanceOfShares()", +"2b597e4d": "updateBool(bytes32,bool)", +"2b59d1fc": "borrar()", +"2b5ad2ad": "secondTimer()", +"2b5af004": "appendDecryptedBid(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"2b5b6872": "AIRDROP_AMOUNT()", +"2b5da915": "Property(string,string,uint256,uint256)", +"2b5daa86": "newModule(string,address,bool,bool)", +"2b5f227e": "encodeBytes(bytes,uint8)", +"2b5fa90a": "currentselectorchoosegiverandreceiver(address,address,address,address)", +"2b5faebd": "_calcTokens(uint256,uint256)", +"2b5fc4ce": "RSUNToken()", +"2b603c71": "allowances(address)", +"2b6133f5": "checkTierCap(uint8,uint256)", +"2b625874": "distributePeerTokens()", +"2b62ef2a": "CryptoCurrencyToken()", +"2b633f77": "ballotCancelingThreshold()", +"2b644ac8": "_setAvatarIfNoAvatarIsSet(address,uint256)", +"2b65d18a": "wireLimit()", +"2b65e040": "ownerPool()", +"2b664d8a": "getUsersByDocHash(bytes32)", +"2b680932": "ANNOUNCE_WINNER_DEADLINE()", +"2b68b9c6": "destruct()", +"2b68bb2d": "cancelContract()", +"2b68fc21": "guarenteedPaybackTime()", +"2b69f40d": "PaymentServ(address,address,address,address)", +"2b6a8b46": "addSpace(uint256,uint256,bytes,uint256,uint256,uint256,uint256,string,string,uint256)", +"2b6aa69d": "NewFunds(address,uint256)", +"2b6ada6d": "WalletWithDailyLimit(address[],uint256,uint256)", +"2b6b7c69": "airdropIndividual(address[],uint256[],uint256,uint256)", +"2b6bbc31": "testingOnly()", +"2b6bc920": "answerRequest()", +"2b6bd13a": "ChainInfo()", +"2b6c750f": "loseSponsor(uint32,int256)", +"2b6d0ceb": "test(address,address)", +"2b6d7706": "transferTokensManuallyToMany(address[],uint256[],uint256)", +"2b6d7a66": "hasActivePass(address)", +"2b708fc9": "usageFee(bytes32,uint256)", +"2b70faf1": "game_paused()", +"2b711051": "investorsCount()", +"2b713d71": "rankToAddress(uint256)", +"2b71b0e5": "getStat()", +"2b7216e5": "donateToCampaign(uint256,uint256)", +"2b726758": "ETIC()", +"2b72c5fc": "FANCY(uint256,string,string)", +"2b73a83b": "CBS(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"2b741ed6": "claimedFees(uint256,address)", +"2b7423ab": "average(uint256,uint256)", +"2b747a29": "buy_tickey(address)", +"2b750f4f": "DIVISOR_PRICE()", +"2b75289b": "placeBet(uint8,uint8,uint8,int256)", +"2b7568d9": "admin_withdraw_all(address)", +"2b7582c0": "sendEthForReward()", +"2b76823c": "ICOBuyer(address,address,uint256,uint256,uint256)", +"2b770ee9": "Ddjtab(uint256,string,string)", +"2b774d46": "XWALLET()", +"2b78194f": "GAS_REFUND()", +"2b7832b3": "adminCount()", +"2b783bc8": "addCredentials(bytes32,bool)", +"2b785960": "testBitAndSuccess()", +"2b788e33": "MAX_BOUNTYTOKENS_AMOUNT()", +"2b790ee4": "calcProfitFromTotalWon(uint256,uint256)", +"2b791053": "getDailyLimitRemaining()", +"2b791d6e": "storedDividendsOf(address)", +"2b79d7ba": "testFailMoveWithoutTrust()", +"2b7ac3f3": "verifier()", +"2b7b3a6c": "createBuildingAuction(uint32,uint8,uint8,uint8,uint8,uint8,bool)", +"2b7be84b": "AfterSchoolCrowdsaleToken()", +"2b7c3138": "MANETokenPartnerCrowdsale(uint256,uint256,address,address,address,address,address)", +"2b7ce9cd": "updateThresold(uint256)", +"2b7d13cc": "withdrawRemainingToken(uint256,address)", +"2b7d177b": "isvalidOrg(address,address)", +"2b7dd488": "totalLBSold_GENERAL_3()", +"2b7e063e": "GenOutChipsNum(uint256,uint256,uint256)", +"2b7e2169": "getTotalSell(uint256)", +"2b7e4295": "invadePlanets(uint256,uint256[],uint256[])", +"2b7ec7fe": "getLotInvested(uint256,address)", +"2b7fda2f": "mintAllowed(address,address,uint256,int256)", +"2b81b8a4": "alreadyRegisteredMessage()", +"2b82714f": "deliverAngelsREDAccounts(address[],uint256[])", +"2b828e4a": "addTx(bytes32,bytes4,address)", +"2b82aed6": "setPayerAddr(address)", +"2b82cf1f": "unFroze(address,uint256)", +"2b84aabe": "trust(uint8)", +"2b84fe83": "reserveFeeToBurn(address)", +"2b85ed9c": "purchaseCount()", +"2b860e6d": "transferToThroughVariable(address,uint256)", +"2b861629": "storeBlockHeader(bytes)", +"2b865dea": "airdropTokenDistributionMulti(address[],uint256[])", +"2b86d48a": "MDKToken(address)", +"2b876784": "ZHOUToken()", +"2b877dfd": "sendCoin(bytes4,bytes32,bytes32,uint256)", +"2b878c7c": "KYCValid(address)", +"2b88c42d": "buyItem1()", +"2b88cbbf": "getExcludes(uint256)", +"2b8a1c00": "t2tokenExchangeRate()", +"2b8a1c5a": "setGuardian(address,bool)", +"2b8a36e0": "freezeTransferTime()", +"2b8a789b": "ChangeGameHidden(address)", +"2b8af65b": "INTERFACE_SIGNATURE_ERC165()", +"2b8b09d4": "REDGIL()", +"2b8b1bc4": "transferAndFrostTokens(address,uint256,uint256)", +"2b8b6667": "deregister(address[])", +"2b8bbbe8": "add(uint256,address)", +"2b8c8a20": "Sale(address,uint256,uint256,uint256,string,uint256)", +"2b8cc346": "acceptRequest(address)", +"2b8cd2f7": "withdrawUncommittedTokens(uint256)", +"2b8cd5c6": "getComponentSupport(uint16)", +"2b8d0cd7": "setIcostart(bool)", +"2b8e4df1": "vest(bool)", +"2b8f2042": "withdraw_funds()", +"2b8f7a49": "depositMoney(string)", +"2b8f899e": "OzoneToken()", +"2b901a0a": "getOwnerByName(bytes32)", +"2b90557c": "minSet()", +"2b905bf6": "TEAM_WALLET()", +"2b90bb3a": "distributeGoTokens(address,address)", +"2b9122df": "getTimeTillEnd()", +"2b913151": "secondCapEndingBlock()", +"2b919aa6": "validPurchaseSize()", +"2b920a6b": "CampaignAccountFactory(address)", +"2b925b25": "minimumInvestment()", +"2b92b8e5": "hashValue()", +"2b92c776": "cancelBuyOrder(address,uint256,uint256,uint256,uint256)", +"2b9530d8": "transferTokens(address,uint256[])", +"2b956ff7": "getUserId(address)", +"2b968958": "revokeOwnership()", +"2b96a0a1": "getGamesMeta(uint256[])", +"2b96c00e": "abortGame(address,uint256)", +"2b97c6e4": "Cilox()", +"2b98222e": "getInstitutionByAddress(address)", +"2b985942": "LittleStoreERC20Token()", +"2b985f7c": "testNegatives(int256)", +"2b9897fb": "smallCapLimitOf(address)", +"2b991746": "approveFor(address,address,uint256)", +"2b99a087": "getLpIsWorking(int256)", +"2b99db6a": "tokensApproved()", +"2b99f359": "carOfByIndex(address,uint256)", +"2b99f3e1": "setIsTurnDataSaved(bool)", +"2b9a5c34": "_getTileAt(int32,int32)", +"2b9a7fae": "_updatePlayerOverrideId(uint256,uint256)", +"2b9b7573": "MAX_TRANSFERS()", +"2b9be92e": "GanaTokenAirdropper(address)", +"2b9cb4f8": "uniq(uint64[])", +"2b9cd08b": "submitAddOwnerTransaction(address)", +"2b9ce01e": "currentIcoTokenPrice()", +"2b9e05d1": "Betportchain(uint256,uint256)", +"2b9e5088": "filterTransactions(bool)", +"2b9e98b1": "changeFundingPercentages(uint256,uint256,address)", +"2b9edee9": "softCapReached()", +"2b9fd446": "isHatchOnCooldown()", +"2ba00198": "setBaseCap(uint256)", +"2ba0ab78": "EyeToken()", +"2ba0b09f": "AddNewCategory(bytes4,uint8,uint8,address)", +"2ba11f2a": "CONVERSION_DECIMAL_FACTOR()", +"2ba1e439": "createOraclizeCallback(bytes32,uint256,uint8,uint256)", +"2ba25366": "mintInBatches(address[],uint256[])", +"2ba29217": "canExecute(uint256,uint256)", +"2ba2a853": "thelnwaonToken()", +"2ba2d714": "LordXChain()", +"2ba2ed98": "setMagicNumber(uint256)", +"2ba5390f": "isFirstPartReleased()", +"2ba5b90d": "get_number_of_DBs()", +"2ba665e5": "getDoc(uint256)", +"2ba6d8fe": "PRESALE_WEI_CAP()", +"2ba73c15": "setCOO(address)", +"2ba7910a": "provider1()", +"2ba7fc87": "tgeIssuer()", +"2ba8b7e4": "getMinimumAuctionPrice(uint256)", +"2ba8f526": "OfferToGuardian(uint256,uint256)", +"2ba96462": "supportsERC165Interface(address,bytes4)", +"2ba996a5": "getListedTokens()", +"2baa2c58": "disqualifyBid(address,bool)", +"2baab935": "Fuschain(address,uint256)", +"2baabbf7": "finalSupply()", +"2babd014": "sellSecond(uint256)", +"2bac0b3b": "vendingCreateCollectible(uint256,uint256,address)", +"2bac276b": "badgeTransfer(address,uint256)", +"2baeceb7": "decrement()", +"2baf2acb": "mintTo(address,uint256,uint256)", +"2baf4f22": "_safeFalse()", +"2bafc817": "EpietherToken()", +"2bb03ab9": "earlyPresaleEDUSupply()", +"2bb03f6d": "ValidateCitySnapshot(address,uint256)", +"2bb0e10b": "serviceAccount()", +"2bb14104": "myData()", +"2bb20f4a": "soulsSold()", +"2bb22480": "calculateDrugSell(uint256)", +"2bb3dcc8": "totalInvocations()", +"2bb4c7d5": "STribeToken()", +"2bb51a05": "EDEX(address,uint256,uint256,uint256)", +"2bb685bc": "kill2()", +"2bb6ccf1": "delAuditAddress(address,address)", +"2bb70e54": "lockMasterTransfers()", +"2bb768f0": "adminGetCityData(address)", +"2bb77b8e": "setRewardAddr(address,address)", +"2bb81546": "getClaim(string)", +"2bb9cb1d": "buyXid(uint256,uint256,bytes32)", +"2bb9ffef": "startBalance()", +"2bba2d6d": "changeInvitedReward(uint256)", +"2bbb44b8": "adminCreat(address)", +"2bbc50b5": "getTotalInvestedEur()", +"2bbc9396": "periodICOStage2()", +"2bbd3c93": "ART_CONTRACT_ADDRESS()", +"2bbd59ca": "messages(bytes32)", +"2bbd84e8": "totalPurchaseValueInWei()", +"2bbd88f3": "LOBO()", +"2bbd9530": "unregisterAddress(bytes32)", +"2bbdb18a": "hasEnoughApproval(uint256,uint256)", +"2bbe62d6": "createSetup(address,uint256,uint256,bool,address,uint256)", +"2bbeac91": "lockTokenHolder()", +"2bbf532a": "isUnlocked(address)", +"2bbf54e8": "isBuyStopped()", +"2bc06a92": "canSend(address)", +"2bc0fe34": "infoMining(address)", +"2bc24d52": "IXTPaymentContract(address)", +"2bc31ca4": "developers()", +"2bc3217d": "forbid(address,address,bytes32)", +"2bc3656c": "buyTokensPreSale(address,uint256)", +"2bc38531": "setup(string)", +"2bc3a349": "GWTCrowdsale()", +"2bc402fa": "TOTAL_PREALLOCATION()", +"2bc40f9a": "setAddressUInt8(bytes32,bytes32,address,uint8)", +"2bc43fd9": "claim(address,uint256,uint256)", +"2bc46f27": "getQuestionIndex(uint256)", +"2bc4aa1a": "showInvestEther(uint256)", +"2bc53254": "priceFci()", +"2bc542a4": "votePublic(address,bool)", +"2bc57d73": "_doTransferFrom(address,address,uint256,bytes,address,bool)", +"2bc588ee": "release(uint256[],uint256[])", +"2bc5ca7a": "fullCycleSellBonds(uint256)", +"2bc5f9cb": "updateRateInWei()", +"2bc6597c": "depositsTillNow()", +"2bc67bde": "MIN_TASK_VALUE()", +"2bc80f3a": "T()", +"2bc85d5d": "updateTokenPriceProvider(address)", +"2bc86dc0": "AddBankerRound(uint8)", +"2bc89ff6": "REV()", +"2bc8ba53": "solicitaPagamento(uint256)", +"2bcb849c": "updateFeeProvider(address)", +"2bcbdf7f": "s29(bytes1)", +"2bcbe1b5": "getCelebrity(uint256)", +"2bcc79a7": "MockDeed(address)", +"2bccf04e": "createSale1()", +"2bce9e7b": "updateToken(address,uint256)", +"2bcef221": "signOne()", +"2bcf300e": "LC(uint256,string,string)", +"2bcf5760": "addToken(address,address,uint256,uint256,uint256,uint256)", +"2bcf892c": "div32(uint32,uint32)", +"2bcfcd7b": "getBonusAmount()", +"2bcfe0a6": "FitToken()", +"2bd00610": "numberOfCyclePlayers()", +"2bd0bb05": "totalSpentPerDay(uint256)", +"2bd0ce0f": "cancelBuyTokenOrder(uint64)", +"2bd152f0": "_getCollectibleDetails(uint256)", +"2bd15c25": "_doCancel(uint256)", +"2bd185e5": "appendTokenHolders(address)", +"2bd21738": "CAIDCrowdsale(address,address)", +"2bd2523e": "cooAddReviewer(address)", +"2bd2a965": "openNextSale(uint256,bytes24,uint256,bytes24,uint256)", +"2bd30ca3": "costContract()", +"2bd4aa40": "total_amount(string,uint256,uint256)", +"2bd543c7": "calcTimedQuota(uint256,uint256,uint256,uint256)", +"2bd55918": "confirm_token_deposit()", +"2bd57604": "claimPlotMultiple(uint256[],uint256)", +"2bd579fc": "ico(uint256,uint256,uint256,uint256,uint256[],uint256[])", +"2bd5a48d": "finishMintingToken(uint256)", +"2bd5e353": "phase3Duration()", +"2bd71875": "hasMissedCheckpointSubmission()", +"2bd75c3c": "sendMarketingAndRNR()", +"2bd7cd17": "killToken()", +"2bd7e5fc": "getSGNAuthorizationManager()", +"2bd928e4": "commonDeposit(address,uint256)", +"2bd9530a": "editGas(uint256,uint256)", +"2bd97c6d": "getDawexSignature(string)", +"2bda04c5": "autoFreeze()", +"2bda1a55": "frozenReserveTeamRecipient()", +"2bda2a49": "BHIMToken()", +"2bda4eee": "getBridgeValidatorsInterfacesVersion()", +"2bdad637": "tokensSupply()", +"2bdb0d92": "getShareToken()", +"2bdb33c3": "getNumberOfDisputedDealsProPatient()", +"2bdb7097": "setRate(address,uint256)", +"2bdbc0ce": "ContractTokensReclaimed(uint256)", +"2bdc05c5": "assertEq26(bytes26,bytes26,bytes32)", +"2bdcd90d": "claimChip(uint256,string)", +"2bdd2290": "setBlockNum(uint256)", +"2bdd530b": "holderReferalTokens()", +"2bdd5958": "Purchased(address,uint256,uint256,uint256)", +"2bddb9b5": "canTransferIfLocked(address)", +"2bddc31c": "coauthor()", +"2bde41e1": "submitRing(address[3][],address,uint256[7][],uint256,uint8[1][],uint8,bool[],uint8[],bytes32[],bytes32[],uint256,uint16)", +"2bde8e96": "getGPShashRandomValue()", +"2bdf66d5": "SmartToken(string,string,uint8)", +"2bdfbd39": "finaliseCrowdsale()", +"2be09561": "startMint()", +"2be10384": "_removeKey(address)", +"2be29d71": "addressPartnerships()", +"2be2ad3c": "logUniverseForkedCalled()", +"2be2d95e": "amountOfInvestments()", +"2be2f085": "getCostForRace(uint8)", +"2be32dbb": "categoryCount()", +"2be3d1c9": "_getDroneDefaultAbility(uint256)", +"2be3d2df": "CreamCoin()", +"2be4a903": "removeUsers(address[])", +"2be4f3f5": "boardCost()", +"2be4fd9c": "getRemainManus()", +"2be51660": "calcTime()", +"2be521b2": "increaseBalance(address,address,uint256)", +"2be52293": "setExchangeOracle(address)", +"2be596ee": "unpauseInternal()", +"2be5e93a": "TOTAL_SUPPLY_UPPER_BOUND()", +"2be64f51": "RegisteredCampaign(address,uint256,address)", +"2be65e2a": "getFree()", +"2be65e45": "setMarketingRates(uint256,uint256,uint256)", +"2be6d43c": "ARKTagger_1_00()", +"2be6ec1f": "NULL_ENCRYPTION_ALGORITHM_ID()", +"2be79833": "nonFungibleRegistry()", +"2be86e01": "jcrUsdRate()", +"2be8c2a5": "transferTokensTo(address,uint256)", +"2be8f373": "changeWLMWallet(address)", +"2be90846": "enableBonus()", +"2be98d38": "HourglassV2()", +"2be9da97": "getBestAngel()", +"2beaead0": "lastDivideRewardTime()", +"2beaf416": "ShareXERC20()", +"2bec76fd": "maxBetCoinDice()", +"2becb6f7": "STARTING_SPERM()", +"2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", +"2bed69e0": "founderPercent()", +"2beea5c5": "testhash(uint256,uint256)", +"2beeaca4": "whitelist(address,string)", +"2bef4595": "authorize(address,address)", +"2bf04304": "whitelistAddresses(address[])", +"2bf0aeda": "DigiToken()", +"2bf1aa1d": "EthHodler(string,uint8,string)", +"2bf1f9da": "restart(bytes32,bytes)", +"2bf29ddb": "EventRedeemRisk(address,uint128,uint256,uint256)", +"2bf34551": "setRate340()", +"2bf34e60": "getUuid(uint256)", +"2bf37c42": "addFunds(uint256,address)", +"2bf435f9": "myMethod(string)", +"2bf4760b": "getEthPerfit(address)", +"2bf4d812": "AumentaToken(uint256,address)", +"2bf4e53d": "getCurrentShareholders()", +"2bf59135": "addLootbox(address,uint256)", +"2bf5a2ea": "mintForFounders()", +"2bf6e0a5": "setContract(address,address)", +"2bf7299b": "setMaxParticipants(uint256)", +"2bf79c94": "getTokenByOwner(address)", +"2bf7d279": "shouldRevertWithReturn(bool)", +"2bf7f6ba": "privateSell1LockEndTime()", +"2bf81dd3": "NPTToken()", +"2bf82843": "pay(address,uint128,string,uint32)", +"2bf885f0": "addNote(bytes32,bytes20,string)", +"2bf8faba": "AimiToken(address,uint256)", +"2bf9ab0b": "getPresellUpToTime()", +"2bfacd62": "calculateLockedBalance(address)", +"2bfaf3da": "Oracle(bytes32)", +"2bfc33ee": "KDI()", +"2bfc4c69": "getStringValue()", +"2bfd2a13": "calculate_dividend(uint256,uint256)", +"2bfd2e06": "buyBasicUnit(uint256,uint256)", +"2bfd91d4": "getMessageSigner(bytes32,uint8,bytes32,bytes32)", +"2bfda313": "getFile(uint256)", +"2bfe243f": "minStartPriceForCommishAuctions(uint128[])", +"2bfea0e4": "unpauseTransfer()", +"2bfefd5c": "calcMultiStage()", +"2bff4b66": "reapFarm(address,address)", +"2bff5630": "coachTakeOff(uint256)", +"2bff5fc4": "Incomplete()", +"2bffc7ed": "add(string,address)", +"2c011e7b": "winning_month()", +"2c01bb1c": "LogNewOwner(address)", +"2c01d52b": "_createRegion(string,address,uint256)", +"2c027eb9": "getDeployArrayLength(uint256)", +"2c02d622": "precalculate()", +"2c035157": "calculate_minimum_contribution()", +"2c044779": "getPublic()", +"2c04bf0c": "transferIXT(address,address,string)", +"2c052031": "getInsertPointForNumTokens(address,uint256,uint256)", +"2c0657c2": "additionalBonusAmounts(uint256)", +"2c06862b": "setCanBuy(bool)", +"2c07398d": "registerObserver(address)", +"2c0784ce": "send_DividendToAddress(address,uint256)", +"2c089048": "tokenCreationInit()", +"2c08ab0c": "ENJCrowdfund(uint256,address)", +"2c08eb0b": "changeTokensPerEther(uint256)", +"2c0994c1": "getMicroWalletAddress(uint256)", +"2c09bef7": "priceSetter()", +"2c0a036b": "resetICO()", +"2c0a33ef": "BethereumToken()", +"2c0a3f89": "castVote(uint256,uint256)", +"2c0a5c08": "BuyIn()", +"2c0a7e33": "pendingEthWithdrawal()", +"2c0aadc1": "nextGameInitialMinBetSize()", +"2c0b9685": "distributeeBTG(address[])", +"2c0bec2f": "sendCurrentPayment()", +"2c0c6488": "AirTrafficController(string,address[],address,address)", +"2c0c8563": "SetCoin(address,address)", +"2c0d0dbe": "AddProduct(uint256)", +"2c0d4e70": "RYNOTE()", +"2c0e0054": "lockInGuess(uint8)", +"2c0e3850": "storeInContract(address,address)", +"2c0f13a7": "icoStartTimestampStage3()", +"2c0f7b6f": "numCampaigns()", +"2c0fc8cb": "registerHandle(bytes32)", +"2c10e90c": "update(address[],uint256[])", +"2c1169ac": "ELOT()", +"2c12cc79": "HuumanStandardToken(uint256,string,uint8,string)", +"2c1352cf": "contacts(address)", +"2c135b93": "marketCap()", +"2c138236": "reservedTokensWallet()", +"2c142511": "_offlineHash(bytes32,bytes32,bytes32)", +"2c145eef": "DutchAuction(address,address,address,address,uint256,uint256,uint32)", +"2c154345": "getParticipantStake()", +"2c16c6ca": "addPrivilegeAddress(address)", +"2c16cd8a": "record(uint256)", +"2c174073": "PeriodSale(uint256,uint256)", +"2c181929": "getChainWork()", +"2c183fad": "mintTokenWithUnit(address,uint256)", +"2c197985": "VirtualExchange(address,address)", +"2c199889": "request(string)", +"2c19d480": "emitAccessGiven(address,bytes32)", +"2c19fbbb": "getUserTX(address,uint256)", +"2c1b17e4": "BonBonToken(address)", +"2c1b38ee": "isValidTokenId(uint256)", +"2c1bcb4f": "ContractLocked(uint256,string)", +"2c1cf6f6": "updateTradeStatus(bool)", +"2c1cf78b": "ETHinvested()", +"2c1d68d4": "countStakeHolders()", +"2c1e064b": "_translateWSIC(uint256)", +"2c1e6e48": "getADminFromDutchProxy(address)", +"2c1e816d": "setAdminAddress(address)", +"2c1ea461": "nextController()", +"2c1eed5f": "isPlayer(address,address)", +"2c1f1f8f": "getFreeBalances()", +"2c1fecfe": "isRefundable()", +"2c1ff9f8": "mInviteAddr()", +"2c203edd": "getOrderDetails(uint256,uint256)", +"2c2146aa": "verify(address,address)", +"2c215998": "updateStatus(string)", +"2c21ec94": "ethUpdates(uint256)", +"2c2206e4": "setAuditReportHash(uint256,string)", +"2c22af02": "cidTokenSupply()", +"2c22f2e2": "burnSplitPercent()", +"2c232609": "dislikeCelebrity(uint256[],uint256[],uint256)", +"2c237912": "processSellRequestFiat(uint256,uint256)", +"2c23f91a": "ignoreTokenFallback(address,bool)", +"2c244618": "calculateVestedOptions(uint256,uint256,uint256)", +"2c24909c": "getVotedTokensPerc()", +"2c24ecc7": "BecToken()", +"2c2622db": "LOCK_SLOTS()", +"2c2689b5": "getModuleAddress(string,string)", +"2c270617": "TempleDonationTrackingNote()", +"2c270c7e": "tokensFor1EthP2()", +"2c276699": "CheckOut(uint256)", +"2c27e581": "publicEndTime()", +"2c28aa1b": "RATE_FOR_WEEK3()", +"2c28f579": "goLive()", +"2c296656": "changeRequiredDevSignatures(uint256)", +"2c297478": "prolongH(uint256)", +"2c29eedd": "startPrivateSale(address,uint256,uint256)", +"2c2aa66c": "PokeCentral()", +"2c2aecf5": "isProcessNeeds()", +"2c2b4358": "setPercentOfPool(uint256[])", +"2c2bc50b": "LOWIQ()", +"2c2ccdfb": "kittyCoreAddress()", +"2c2da3cf": "expPercentage()", +"2c2de40a": "setMaximumSellableTokens(uint256)", +"2c2e3abe": "allocateFoundersTokens()", +"2c2fdc35": "getBalanceFromRound(address)", +"2c305abf": "updatePlayedNum(address,address,uint256)", +"2c308714": "returnBetAndOffer(uint64)", +"2c321ea1": "abToken()", +"2c327538": "ProofOfDiligenceToken()", +"2c329e99": "Last_block_number_and_bloctime_used()", +"2c344d14": "tokenRewardPreDGZ()", +"2c349627": "pauseToken()", +"2c34ce05": "increasedPrice()", +"2c34e6b9": "addDepositQuest(address)", +"2c354067": "executionBlockOf(uint256)", +"2c3597a1": "testToUint64()", +"2c3599a5": "VINToken()", +"2c3788b1": "registerUserIfNeeded(uint256)", +"2c37a512": "bountyLockEndTime()", +"2c39d855": "confirmAndForward(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", +"2c39da94": "batchSend(address,uint160,uint256[])", +"2c3a15a0": "EidosToken(address,address)", +"2c3a1d5d": "Nerotoken()", +"2c3af973": "GStarToken()", +"2c3ba9e1": "addManyRegistered(address[])", +"2c3c42b2": "WLM()", +"2c3ca924": "handleProductionIncrease(address,uint256)", +"2c3ccb98": "levelUpByPenguinId(uint256)", +"2c3d3453": "csale()", +"2c3d38f0": "mintTokens(int256,uint256,address,address)", +"2c3dcdcf": "issueDuringICO(address,uint256)", +"2c3dfca7": "getPhException(bytes32)", +"2c3ee88c": "getRedeemAmount(uint256)", +"2c3f1304": "getSlotLength()", +"2c3f6a4f": "getMineCooldown(uint256)", +"2c3f9b80": "getActiveFlagRate(uint16)", +"2c408059": "getFallbackAddress()", +"2c409871": "MobileTokenAlert()", +"2c416754": "doBurn(address,address,uint256,bytes,bytes)", +"2c420201": "getDataCounterForSubject(uint256)", +"2c421074": "exploreETHFee()", +"2c425687": "EthTeamContract(string,string,address,uint64,uint64,address)", +"2c42f2e8": "toSendFromStorage()", +"2c4449ab": "_rankByNumber(uint256)", +"2c445273": "_payEthereumAndDistribute(uint256)", +"2c4464d4": "Dryad()", +"2c4482c5": "_assignCountry(uint256)", +"2c44a261": "updatePrivateSaleCloseTime(uint256)", +"2c45f068": "transfer(uint128,bytes16,uint32)", +"2c4617d7": "getMethodState(string)", +"2c46b205": "query()", +"2c46d8d5": "EndRound(uint256)", +"2c47413f": "ERC20PGEToken()", +"2c4806d8": "ordersFor()", +"2c4879d1": "AFWBurn(uint256)", +"2c4881ff": "withdrawMoneyByAdmin(uint256)", +"2c48e7db": "confirmTransfer(uint256)", +"2c4a84f7": "StaxToken()", +"2c4ab666": "enact_withdrawal_greater_equal(address,uint256,uint256)", +"2c4ac770": "sendMessage(address,bytes,bytes32)", +"2c4aecc1": "sampleBoolRetFalse()", +"2c4b2334": "setTeamWalletAddress(address)", +"2c4b27ae": "burnAirDrop(address[],address)", +"2c4bca2c": "crowdsaleDeadline()", +"2c4bf8bc": "increasePresetTransfer(address,uint256)", +"2c4c2719": "MAXIMUM_CAP()", +"2c4cb4be": "removeRegistryFromNameIndex(address)", +"2c4d25f5": "DeathFactor_ii()", +"2c4d4d18": "changeMinter(address)", +"2c4e55c5": "killedContract()", +"2c4e591b": "totalGames()", +"2c4e722e": "rate()", +"2c4e8885": "unLinkFromMasterWalletInternal(address,address)", +"2c4e9d2b": "AuctionWon(uint64,uint64,address,uint256)", +"2c4ee4d4": "ObirumTalk()", +"2c4fa8b2": "assignAnotherOwner(address)", +"2c5104f5": "MTC()", +"2c511788": "addToWhitelistAllocation(bool,address,uint8)", +"2c512d6e": "getTokens(address,uint256)", +"2c526196": "_mint(uint256)", +"2c52d930": "feeForArtWorkChangeRequest()", +"2c532a71": "ChangeCrowdSaleDate(uint8,uint256)", +"2c5337dd": "winnerAnnounced(address,uint256)", +"2c53f31b": "bonusWindow2EndTime()", +"2c54357f": "lifeReserveAllocation()", +"2c54de4f": "transferToken(address,address,address,uint256)", +"2c54e6d9": "getCanvasCount()", +"2c560ec0": "queryInfo()", +"2c56462f": "addAllowedContract(address)", +"2c566ae5": "length(address)", +"2c572eb5": "_isFuture(uint256)", +"2c574a94": "next_tower_index()", +"2c577347": "changeMakeFee(uint256)", +"2c57fdf4": "create(uint8,uint8,uint64,uint64)", +"2c580a35": "revokeAndReclaim()", +"2c58139c": "teamRelease(address)", +"2c5a736f": "distributeInitialFunds()", +"2c5af544": "isAllocatedLending()", +"2c5b3b5b": "UniverseChain()", +"2c5c8f7c": "getDailyProfitSumForAllUsers()", +"2c5c9dc5": "BeldenCoin(address)", +"2c5cb666": "setCollectFeeWindowReportingFees(uint256)", +"2c5d0546": "KuaiToken(address,uint256)", +"2c5d690d": "getBlocksUntilReset(address)", +"2c5e52d1": "CandyDropIsOpen()", +"2c5f5234": "collateralisationRatio()", +"2c5fac89": "isIcoSucceeded()", +"2c6009a6": "viewPeerToPeerMarketplaceTransactionFee()", +"2c60a055": "MapTest()", +"2c6105f9": "setElectedMediator()", +"2c6127c7": "availableBets()", +"2c6287b2": "yunosupporttuples(bytes4,int32,bool)", +"2c629299": "allOperations()", +"2c62fa10": "assetsOf(address)", +"2c62ff2d": "deleteBool(bytes32)", +"2c638806": "totalPaymentsHeld()", +"2c63b326": "memoryArray(uint256)", +"2c63e4b9": "removeExpiredAssignments(address,uint256,uint256)", +"2c642950": "createBallot(string,bytes32[],uint256)", +"2c642f51": "sendDividends(address,uint256)", +"2c64b05f": "LockEDUTeam()", +"2c664701": "profit_per_token()", +"2c66a604": "Blizzard()", +"2c678c64": "migrated()", +"2c67a8e5": "getItemsByOwner(address)", +"2c684eb6": "afterVoteNoCashBackTime()", +"2c684f30": "postListed(address,string,string,uint256,string,string,string)", +"2c68fcd4": "determineBonus(uint256,uint256,address)", +"2c69e64e": "refundBet(address)", +"2c69ed89": "BerryLake()", +"2c6a0140": "cutoffBlock()", +"2c6b2c92": "checkProfitLossSinceInvestorChange()", +"2c6b77e1": "admin_isPayable(bool)", +"2c6c1108": "autoTearDownAndDestruct()", +"2c6e38d0": "modifyNextPremiumSale(uint8,uint256)", +"2c6e4aea": "withdrawFundBeneficiary()", +"2c6e7598": "toAsciiString(address)", +"2c6e879f": "settingsSwitchState()", +"2c6ed612": "stringToBytes5(string)", +"2c6f11b8": "listApproval()", +"2c6f39fd": "setLicenseSalesContractAddress(address)", +"2c6fa230": "getServiceInformation(address,uint32)", +"2c6fa84c": "Pausable()", +"2c7077c0": "enableFeatures(uint256,bool)", +"2c70b7ca": "emitEntityResolution(address,address)", +"2c70d64e": "unVote()", +"2c710cc8": "closeInvest(uint256)", +"2c71d524": "IcoBonus(uint256)", +"2c71e60a": "grants(address,uint256)", +"2c71ecb6": "_startBlock()", +"2c72fdfc": "getProposals(uint256)", +"2c735ef8": "tradeStartTime()", +"2c740844": "setStakingRegistry(address)", +"2c757eed": "startPhase3(uint256)", +"2c7622b0": "txorigin()", +"2c767201": "admin_account()", +"2c76d586": "zint_bytes32ToString(bytes32)", +"2c78ba6f": "ArbTokFromHGame(uint256)", +"2c78bfdc": "burnCrown(uint256)", +"2c791826": "moiTestToken()", +"2c792276": "endRound(uint8)", +"2c79aea3": "minedTotalSupply()", +"2c7a64c7": "isOperationActive(bytes32)", +"2c7a8559": "setMaxGift(uint256)", +"2c7b0085": "PocketChain()", +"2c7ba564": "setTransferProxy(uint32,address)", +"2c7c4549": "PurchasableToken(uint256)", +"2c7cc1f0": "emergencyEthDrain(uint256)", +"2c7cce9e": "auctionMinPriceIncrease()", +"2c7e06a4": "rateEarlyStage1()", +"2c7ec2c2": "_fulfillPayment(address,address,uint256,uint256,address)", +"2c7ee894": "B2Lab_TokenPlus(address)", +"2c7ee946": "setting(uint256,uint256)", +"2c8082a6": "PiBetaSupply()", +"2c828e46": "TransferToken(address,uint256,uint256)", +"2c837334": "getPlot(uint256,uint256)", +"2c83d77e": "goforit()", +"2c84bfa6": "generate(address,bytes)", +"2c84d560": "OwnerWithdraw()", +"2c84e31f": "addAccounts(address,address,address[])", +"2c85448d": "isInt256ValidIn64(int256)", +"2c854d13": "AUTH_REMOVEOWNER()", +"2c8595bc": "updatePartnerMap(address,uint256,uint256,uint256)", +"2c85f8e0": "oraclize_query(string,string,string,uint256)", +"2c86033e": "checkAddressTeamOne(address)", +"2c8668d4": "withdrawNoLimit(address,uint256,uint256)", +"2c868287": "withdrawToTeamStep3(uint256)", +"2c86d091": "buyTokens(address,bytes32)", +"2c86d98e": "leverage()", +"2c86e3b4": "setContributor(string)", +"2c873761": "getMyDragons()", +"2c87aecc": "orders_sell_list(uint256)", +"2c87ba12": "getTitulaire_Compte_2()", +"2c882333": "vota_un_candidato(uint256)", +"2c887399": "confirm(bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"2c88837e": "VotingRightsWithdrawn(address,uint256)", +"2c88fad9": "addWhitelistedAddr(address)", +"2c890550": "toPower2(uint256)", +"2c899ab6": "CecCoin()", +"2c89a84c": "ChronosAccessControl()", +"2c8ab429": "registerMeDao(address)", +"2c8ace6c": "TokenERC20(uint32,string,uint8,string,address)", +"2c8af2d8": "s_rand(address,uint256)", +"2c8b2ad7": "calculatePaymentGoal(uint256,uint256,uint256)", +"2c8b8b94": "addAccreditedInvestor(address,uint64,uint64,bool,bool,uint256,uint256)", +"2c8bcd1a": "createBid(uint256,address,address,bytes32,uint256,uint256)", +"2c8be60e": "ONO()", +"2c8c047a": "ownerOperationsAt(address,uint256)", +"2c8c28a7": "loadNewTickets(bytes32[])", +"2c8c892b": "allocateSalesTokens(address,uint256)", +"2c8ca0ea": "isFinish()", +"2c8cbe40": "setFreeze()", +"2c8df693": "ServiceProviderEnabled(address,bytes)", +"2c8e3ebb": "secondRefundRoundRateDenominator()", +"2c8ed4c4": "_toToken(uint256,uint256,uint256)", +"2c8ee2ec": "checkWin(uint256,address)", +"2c8f1b71": "socialIdentityOfClaimerAddress(uint256,address)", +"2c906ba2": "finishLottery()", +"2c90ccba": "getNextAuditByPrice(uint256,uint256)", +"2c90d20d": "getWarriorsFromIndex(uint32,uint32)", +"2c91324c": "usersAddress(uint256)", +"2c915aa3": "assetAddresses()", +"2c92a2bc": "minWithdrawalThreshold()", +"2c92c071": "_addPayTable(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"2c92e5b7": "BlockspacesToken()", +"2c92fb99": "getFilter(uint256)", +"2c948034": "longTermbudgetAllocAddress()", +"2c94a235": "profitTransferTimeSpan()", +"2c95ad52": "addItem(bytes32)", +"2c960569": "updatePriceOraclize()", +"2c9619ce": "FCOIN1036Token(uint256,string,string,uint256)", +"2c96bee2": "MultiSigTokenWallet(address[],uint256)", +"2c9868df": "approveAndCall(address,uint32,bytes)", +"2c98bf4a": "WelcomeMsg(string)", +"2c995e1b": "AllowTransferGlobal()", +"2c9a0a95": "getPricingStartsAt()", +"2c9a86d2": "payCarnita(uint256,uint256)", +"2c9afb18": "addrFabricContract()", +"2c9b1625": "FUTMOTO()", +"2c9c0fb5": "modifyTransferableHash(address,bool)", +"2c9cdfd9": "Provider(string,string)", +"2c9d6989": "withdrawDklBalance()", +"2c9d9e9e": "getCommitByContent(string)", +"2c9e1885": "setBZxVault(address)", +"2c9ea1b7": "nextSkinId()", +"2c9f092f": "refundToOwner(address)", +"2c9f4f62": "isPurchased(uint256)", +"2c9f6792": "emaPeriods()", +"2c9f9fed": "tokenInit()", +"2c9fcd8c": "Donator()", +"2ca0228a": "initialTokenPrice()", +"2ca0c835": "referrerBonusCalculate(uint256)", +"2ca0d7ca": "batchTransfer1(address[],uint256)", +"2ca126f8": "endtime()", +"2ca15122": "sign()", +"2ca16a37": "publish(bytes32,string,uint256)", +"2ca1aa16": "currentSaleLimitPerAddress()", +"2ca1b7da": "CROWDSALE_ETH_WALLET()", +"2ca23c4f": "KapelaToken()", +"2ca2537e": "changeNotSoldTokens(address)", +"2ca26866": "Tccchain(uint256,string,string)", +"2ca33e70": "YoutubersCoin()", +"2ca36da0": "left39(uint256)", +"2ca38363": "priceEth()", +"2ca59abf": "changeCollateralTaker(address)", +"2ca5a623": "change_flag(uint256)", +"2ca5e3f5": "replyAlice(uint256)", +"2ca5e626": "getOrder(uint32[8])", +"2ca60d85": "versionIdent()", +"2ca6d2c0": "getAccountSize(address)", +"2ca76003": "checkWinner(uint32)", +"2ca781f1": "firstPay()", +"2ca8c6d3": "numberOfBets()", +"2ca8cbd0": "minePhx()", +"2ca9cbe8": "distributeToken(address,uint256)", +"2caafb54": "totalFreezeTokens()", +"2cab00de": "buildPrice()", +"2cab6c6a": "editTile(uint16,uint16,uint8,uint16,address)", +"2cacb97c": "GetProfitEarnedByPartner(address)", +"2cacd13a": "takeOrder(uint256,uint256,uint256)", +"2cad9404": "salvageFinished()", +"2cae0c76": "crowdSaleIsOver()", +"2cae249a": "rvDepositAddress()", +"2cae66d8": "encodeRequest(uint128,address,address,address,uint256,uint64,address,bytes)", +"2cae8ae4": "getPayload()", +"2cae9add": "rawTokenSupply()", +"2cae9ca1": "spendWithGas(address,uint256,uint256)", +"2caeb8fc": "checkMyUndistributedBalance(uint256)", +"2caed832": "partOf(uint256,uint256)", +"2caef765": "setBoardController(address)", +"2caf1f15": "set_tickerQuery(string)", +"2cb0d48a": "setEditable(bool)", +"2cb0de18": "setFeeAccountToken(address)", +"2cb15864": "initialBlock()", +"2cb2f52e": "updateTokenMetadata(uint256,string)", +"2cb3ce8c": "TIER3_RATE()", +"2cb44156": "minterGivesCWC(address,uint256)", +"2cb4f63e": "price_target()", +"2cb51970": "_batch4_icosaleStartTimestamp()", +"2cb58378": "getStateRoot(bytes32)", +"2cb676be": "NVBSupply()", +"2cb6a435": "oneTimePrice()", +"2cb71af3": "startBuyback(uint256,uint256)", +"2cb8460c": "PlutusDex()", +"2cb856f3": "dgxContract()", +"2cb86824": "preIcoStartAt()", +"2cb8f2e9": "executeBet(uint256,bool)", +"2cba85c6": "popcontract()", +"2cbb827f": "withdrawToSelf(uint8)", +"2cbbbd2d": "SHIPToken(address,address)", +"2cbbd738": "getPoll(bytes32)", +"2cbcaba9": "SimpleICO()", +"2cbdb5fb": "addChunk3ToWhiteList()", +"2cbe679b": "Travelerscash()", +"2cbef0f3": "getAffiliateCommission()", +"2cbf1b12": "CirclePay()", +"2cbf1f0d": "left62(uint256)", +"2cbf4e27": "removeParticipant(address,address)", +"2cbf9cf6": "MintableToken()", +"2cbfd034": "intCallWithArray(uint8[4])", +"2cc0a28c": "_matchedTags(bytes32[],bytes32[])", +"2cc0b254": "init(address,bytes32)", +"2cc138be": "rewardStartTime()", +"2cc1b92a": "addr_communityBuildingToken()", +"2cc205d9": "totalStakedFor(address,address)", +"2cc27341": "setMinMargin(uint256)", +"2cc361a6": "removeTank(address)", +"2cc53743": "GxEvents(address)", +"2cc5cfd6": "withdrawDevelopersFund(address)", +"2cc5d662": "arawWallet()", +"2cc63332": "returnCoupon(address[2],uint256[8],uint8,bytes32[2])", +"2cc689f9": "markRewardsSet()", +"2cc695de": "addCertification(address)", +"2cc6cf4a": "BABI()", +"2cc6d768": "RecordingRefundVault(address)", +"2cc75331": "getTeamsOnLeaderboard()", +"2cc763e7": "milliPercent()", +"2cc7c475": "TokenSaleCreation(uint256,address)", +"2cc7fc36": "ICOPurchased(uint256)", +"2cc82225": "setPriceCreatingChannel(uint256)", +"2cc82655": "setPhase(uint256)", +"2cc88401": "wirePurchase(address,uint256)", +"2cc8b455": "recoverAddressFromWithdrawMessage(bytes32,address,uint256,bytes)", +"2cc92b2b": "isICOOpened()", +"2cc9636c": "buyerCancel(bytes16,address,address,uint256,uint16)", +"2cc9c151": "verifyOwnership(address)", +"2cca179d": "addPoll(uint256,uint256,bytes,uint8)", +"2cca23f1": "Timeless()", +"2cca5ce3": "setEngine(address,bool)", +"2cca664b": "totalPlayerWinnings()", +"2cca75d3": "StupidCoin()", +"2ccaa3e9": "getPropertyOwner(uint16)", +"2ccb1b30": "transferTo(address,uint256)", +"2ccbd053": "set(uint256,string,string,string,string,string)", +"2ccc452d": "pushByte(bytes32)", +"2ccc9057": "RATE_CROWDSALE_S3()", +"2ccce58a": "cancelGame(string)", +"2ccd0991": "extraData1FromHash(string,string,string,string,string)", +"2ccd9623": "referralManager()", +"2ccdbc25": "prometheusVouchersMinted()", +"2ccde4bd": "withdrawAllUncommittedTokens()", +"2cce0c60": "eth_to_usd()", +"2cce4abe": "_finishNoCallback()", +"2cce753a": "batchAddAddresses(address[])", +"2cce81aa": "getBlockHash(int256)", +"2ccf16f9": "CashPoints()", +"2ccf27bb": "PatrickHuynhToken()", +"2ccf8d40": "HVAL()", +"2ccfc58c": "FeesReceived(address,uint256)", +"2cd046eb": "countMembers()", +"2cd05122": "ZENOSEarlyPurchase()", +"2cd05248": "lastBlock_f3Hash_uint256()", +"2cd11849": "depositAdvisor(address,uint256)", +"2cd19faf": "_getAdminInterface(uint256)", +"2cd1bab2": "partnerID()", +"2cd2338f": "thawAddress(address)", +"2cd23d7a": "createCommit(bytes32,bool,bytes32,string,uint256)", +"2cd33a54": "eth_amount()", +"2cd3fd70": "BurnTokens(uint256)", +"2cd44064": "UNHCToken(uint256,string,string)", +"2cd53cfe": "addEducation(string)", +"2cd6305f": "unsellpause()", +"2cd64f65": "TokenMintGeneral()", +"2cd78450": "activateExportFeeChargeRecord(address)", +"2cd8c9ae": "fillPhase(uint8,uint256,uint256)", +"2cd9e233": "Quarters(address,uint256)", +"2cda1bf7": "titles(uint256)", +"2cdad41c": "isInspector(address)", +"2cdb0213": "dailyHourLimit()", +"2cdb8eec": "updateTokenValue(address,uint256)", +"2cdba70e": "_getMaxPooling()", +"2cdc1c74": "lister()", +"2cdcb1fc": "wrongManagerOrUnsetInClaimer()", +"2cddc488": "transferTaxes(address,bool)", +"2cde15d1": "weiTotalRaised()", +"2cdedd5c": "StateChannel(address,address,address,address,uint256,bytes)", +"2cdf2bfd": "sellPatent(uint16,uint256)", +"2cdf37d4": "_admin(uint256,uint256)", +"2cdf55af": "RC()", +"2ce04b20": "tokenLockoutPeriod()", +"2ce0a6ee": "setBalanceLimit(uint256)", +"2ce0b4f6": "ICO_FINISH()", +"2ce0ca6b": "setChainFees(uint256[10])", +"2ce14d90": "_willFallback()", +"2ce1ec67": "HelloCoin(uint256,string,uint8,string)", +"2ce20579": "mutagen2Face(uint256,uint256)", +"2ce21999": "fees_(uint256)", +"2ce2907b": "CryptoCourt(uint256,string,string)", +"2ce2d7c0": "completeRegionAuction(uint16)", +"2ce37b10": "getListCount()", +"2ce3d440": "updateAccount(address)", +"2ce47de4": "payWinners(uint32,uint32,uint256,bool,uint32,uint32)", +"2ce52d9b": "shareCycleSessionSize()", +"2ce5c284": "processed()", +"2ce5fb75": "getHorseShoe(uint256)", +"2ce68269": "registerByList(address[],bool)", +"2ce78fc0": "getDemande(uint256)", +"2ce7900b": "getTokenTimelockCount(address)", +"2ce82189": "balanceTransferred(address,uint256,bytes)", +"2ce90c11": "killTokens()", +"2ce91d08": "TokensWorld()", +"2ce92dfd": "updateMinGasForDrawing(uint32)", +"2ce946a5": "teame()", +"2cea0654": "setStateClosedIfClosed()", +"2cea53bd": "returnChametz()", +"2cea70e4": "isAds()", +"2cea905a": "IAMEPrivateSale()", +"2cea9442": "totalUsdRaised()", +"2cead42c": "_createIntention(address)", +"2cead658": "Companion()", +"2ceae552": "AVAILABLE_BONUS1_SUPPLY()", +"2ceb1bb3": "addPreEntranceMembers(address[],uint256,uint256)", +"2ced7cef": "log(string,string,string)", +"2cedc5ec": "enableTokenAiTransfers()", +"2ceee12e": "seeBidders()", +"2cef4dac": "updateMasterCopy()", +"2cefc429": "sellCard(uint8,uint256)", +"2cefeb07": "setname(string)", +"2cf003c2": "referrer(address)", +"2cf033a0": "setNewTokenAddress(address)", +"2cf0be44": "transferToService(address,uint32,uint256,uint256,uint256)", +"2cf0d6ca": "PLAT()", +"2cf1a5fb": "airdropStatus()", +"2cf2f1d1": "rndReduceThreshold_()", +"2cf32bc9": "PayoutEarnings(address,uint256,uint8)", +"2cf3f1f3": "setTokenPerEther(uint256)", +"2cf42a6c": "cancelHybridization(uint256)", +"2cf45905": "addHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", +"2cf4db51": "amountVote(bool,uint8)", +"2cf4e56f": "withdrawBounty()", +"2cf5346a": "totalSupplyAt(uint256,int256)", +"2cf5702a": "verifyPublic(bytes32,uint256,uint256[],uint256[],bytes32[])", +"2cf5fe89": "maxChildCount()", +"2cf65a06": "logite(string)", +"2cf6b532": "STARL()", +"2cf6e740": "adminSum()", +"2cf75c11": "_generateLog(uint32,uint8,uint32,uint8,uint8,uint8)", +"2cf86006": "calculateDividends(uint256)", +"2cf8a1d6": "CCRToken()", +"2cf91024": "getFlightInfo(uint16,uint16)", +"2cf9185c": "getMyPlayedCount(address)", +"2cf975af": "isPreferredTokensAccount(address)", +"2cf99422": "publish(address)", +"2cfa606d": "tvcEthFund()", +"2cfa74da": "buyKeys(uint256,string)", +"2cfac6ec": "teamSupply()", +"2cfbb031": "claimReward(bytes)", +"2cfbd0b9": "addNewBlock(bytes32,bytes32,bytes32[])", +"2cfc1f4c": "updateGift(uint256,uint256,string,string)", +"2cfc42f5": "blacklistParty(address,address,bool)", +"2cfd10a0": "CrowdsaleMain()", +"2cfd3005": "mint(address,bytes32)", +"2cfd35bb": "employeeMigratesToNewESOP(address)", +"2cfdd7df": "newReward()", +"2cfed9f0": "setSpeaker(address,address)", +"2d0041c5": "setAmbassador(address,bool)", +"2d00b442": "_createBid(bytes32,address,uint256)", +"2d0104a5": "updateFirstDuel1(uint256)", +"2d014833": "e93Contract()", +"2d01564c": "littContentExists(bytes32)", +"2d019a71": "get_asset_info(bytes32)", +"2d021624": "BTBToken()", +"2d02a5b2": "setGoldPrice(uint256)", +"2d0335ab": "getNonce(address)", +"2d03c4eb": "nxcPerBcy()", +"2d040add": "updateRegistrationState(bool,uint256)", +"2d042a7f": "PonziRevolutionBeam()", +"2d045780": "isAllowedToBuyByAddressWithoutVerification(address)", +"2d04d07d": "goTokenCollection()", +"2d04f820": "DEV_WALLET()", +"2d06177a": "addManager(address)", +"2d062140": "SiringClockAuction()", +"2d067d4c": "isBurn()", +"2d06a1fa": "ALFA()", +"2d06fd13": "getTotalDeveloperCut()", +"2d077ad0": "Latch()", +"2d07bf2f": "CryptoHarborExchange()", +"2d087944": "hasBuyNowOffer(uint256)", +"2d08d408": "Send(address[],uint256[])", +"2d09839f": "tokens_push(address)", +"2d0a8809": "testAddVoters()", +"2d0b1451": "DevotteToken()", +"2d0b7d53": "registerVariation(uint256,address)", +"2d0cc13c": "MoonMinerToken(string,string,uint8,uint256)", +"2d0d4827": "startIco1(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d0d9c2a": "getCompletedGamesStatistics()", +"2d0d9e0f": "getUserProductsKeys(bytes32)", +"2d0daca8": "assertEq25(bytes25,bytes25,bytes32)", +"2d0e6636": "tokenToEtherAllowed()", +"2d0f5573": "right35(uint256)", +"2d0ff779": "claimEOSclassic()", +"2d103ed4": "addAllowedHICAddress(address)", +"2d10d4d1": "getCityActiveBuildings(uint256,uint256)", +"2d116186": "deityBalance()", +"2d118bbf": "getUserPaybackPool()", +"2d11fa16": "throwsWhenTransferingPresaleTokensBeforeCliff(address)", +"2d123aa4": "useDefaultRegistry()", +"2d126239": "calcAndGet()", +"2d126d2b": "indCommunityDeposit()", +"2d129442": "mountainHeight(uint256)", +"2d132467": "buyPreIcoTokens()", +"2d133eee": "KYC_THRESHOLD()", +"2d136dd6": "TrillionToken()", +"2d139417": "migrateToNewNewControllerContract()", +"2d13c164": "_computePayMoney(uint256,address)", +"2d144e6b": "totalPlayerSupply()", +"2d1608db": "YouLongToken()", +"2d162c70": "distrust(address,uint256,bytes)", +"2d171243": "getUnitsProduction(address,uint256,uint256)", +"2d17d956": "buildRequest(string)", +"2d19413c": "setJackpotToken(address,uint256,uint256,address,uint256,uint256,uint256)", +"2d1a330b": "marketmorties()", +"2d1a6477": "lengthEqual(address[],uint256,string)", +"2d1a67e1": "Ledger(address,uint256,uint256)", +"2d1b42f5": "encryptCounter(uint256)", +"2d1babed": "setRates(uint256)", +"2d1c56a9": "totalTxVolume()", +"2d1ced82": "priceBox1()", +"2d1d744a": "isPass()", +"2d1d9627": "changeAddress(bytes32,address)", +"2d1d9feb": "removeRRA(address)", +"2d1e0516": "setBal(bytes32,address,uint256)", +"2d1f0021": "NextItemID()", +"2d1f0097": "getData_18()", +"2d1fb389": "authorize(address,bool)", +"2d1fdef6": "extendDeadline(uint256,uint256)", +"2d202d24": "setNextOwner(address)", +"2d20fbf3": "ownedBonus(address)", +"2d215518": "pause(uint256,uint256)", +"2d217d43": "AntasCoin()", +"2d21ca88": "ICOTokenHardCap()", +"2d226a10": "allocateServusTokens()", +"2d22a4e3": "isPrivateInvestmentPhase()", +"2d22b464": "createEgg(string,bytes32)", +"2d241248": "getFeeBurnerAddress()", +"2d24447a": "LBCoinJ()", +"2d247cc6": "coinPriceInWei()", +"2d278518": "EtherReceived(uint256,address,uint256)", +"2d278e9e": "picosPerEther()", +"2d27c8cd": "ALLOC_SALE_GENERAL()", +"2d2800f1": "react()", +"2d287e43": "insert(bytes32)", +"2d2899b6": "getIntArray(bytes32)", +"2d28bb02": "setTokenStart(uint256)", +"2d28d4cf": "transferIfTokenAvailable(uint256,uint256,address)", +"2d28e89d": "MINIMUM_DURATION()", +"2d290d8b": "MAX_CROWD_SALE_TOKENS()", +"2d2925c7": "transferInitialTokens()", +"2d296bf1": "buyToken(uint256)", +"2d29842c": "upgradePhoenixStats(uint256)", +"2d29953f": "withdrawByFoundation(address,uint256)", +"2d29a47b": "execute(uint256,uint256,uint256)", +"2d29b29b": "migrateSome(address[])", +"2d29c72d": "stopUpgrading()", +"2d2bb154": "kycWallet()", +"2d2bcd37": "setRelayContractAddress(address)", +"2d2c44f2": "Vault()", +"2d2c5565": "TREASURY()", +"2d2c9ed8": "softcapReachedCallabck()", +"2d2d23f7": "Cordbank()", +"2d2e3bb2": "deleteFincontract(bytes32)", +"2d2f7e4d": "withdrawBidForStar(uint256)", +"2d2f8f9b": "getAddListSize()", +"2d2fa531": "hank()", +"2d2fe9d4": "stakeWaived_Eth()", +"2d30ae45": "distributeCrowdsaleTokens(address,uint256)", +"2d31908f": "PRICE_7()", +"2d31d9c9": "sales(bytes16)", +"2d31f270": "UNTToken()", +"2d328551": "numberOfHalvings()", +"2d345670": "revokeAdmin(address)", +"2d345799": "balanceOfPretty(address)", +"2d349a1f": "icoLtc()", +"2d34ba79": "setup(address,address)", +"2d354cf8": "_isContract(address,address)", +"2d358710": "HARJToken(address,string,uint8,string)", +"2d35a8a2": "candidatesCount()", +"2d364687": "toLucky()", +"2d36ad42": "cleanUp(address)", +"2d370378": "switchSaleAuctionERC20For(address,address,uint256)", +"2d3727bf": "CloseDiv()", +"2d37329a": "lastBlock_v4Hash_uint256()", +"2d37e6dc": "getCrowdsaleInfo()", +"2d381f84": "ATTR_GOLDENGOOSE()", +"2d38bf7a": "rewardEra()", +"2d3a926a": "computeCut(uint256)", +"2d3b3141": "ERC20Standard(uint256,string,string,bool)", +"2d3b4643": "coresale()", +"2d3b634c": "Crowdsale(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d3b9e59": "isFinished(uint8)", +"2d3c5d28": "DonatedEthPayout(address,uint256)", +"2d3cb6bd": "mulX(uint256,uint256)", +"2d3d165d": "parameterizerFactory()", +"2d3d403a": "challengeContract(address,address,address)", +"2d3e2065": "minBetWei()", +"2d3e474a": "marketing()", +"2d3e579a": "hasRole(address,bytes32,address)", +"2d3e9efe": "mint(int256,bytes32,bytes,uint256[],bytes,bytes)", +"2d3ec656": "setMinimumIcoRate(uint256)", +"2d3ed075": "Certificate(bytes32,string)", +"2d3fb0d5": "getCrowdsaleState()", +"2d3fb721": "secondRoundICODiscount()", +"2d3fcc23": "beingVIP()", +"2d405b43": "Win(address,uint8,uint256,bytes32,bytes32,uint256)", +"2d40957f": "TheWinner()", +"2d4147e3": "bountyToken()", +"2d416b4d": "bindCertificate2Wallet(address,bytes32)", +"2d41777f": "SnapshotUpdated(address,uint256,uint256,string)", +"2d4194c7": "getAuditRequestBlockNumber(uint256)", +"2d41bc9b": "store(uint8[],uint256,uint256,uint256,uint256)", +"2d41c7a4": "Nikone()", +"2d434139": "addCustomerNReqAcc(address,address,address)", +"2d43573d": "landmarks(uint256)", +"2d4364ae": "placeTokens(address,uint256)", +"2d448c49": "setO2(address)", +"2d449b5e": "Etokenchain()", +"2d44c049": "modifyCreator(address,bool)", +"2d459dd6": "transfer(address,uint48,bytes)", +"2d45c78d": "requireAuthorisation()", +"2d46253f": "CommunityWithDraw()", +"2d462dbb": "rollLo()", +"2d467358": "LAPTOPTOKEN()", +"2d46a9ce": "getVestingCreatedAt(address,uint256)", +"2d46b54e": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string,string)", +"2d46f5df": "registerProduct(address)", +"2d475386": "ownerWithdrawUnclaimedCredits()", +"2d47adcb": "BancorNetworkToken()", +"2d47c29e": "otherchainstotalsupply()", +"2d480a80": "thankYou()", +"2d483bec": "setNewRate(uint256)", +"2d48bcec": "pool_drain(address)", +"2d493910": "_computeNextPrice()", +"2d49f5fc": "verifyERC20(address)", +"2d49ffcd": "getLocked()", +"2d4a170a": "calculateBid(uint256)", +"2d4c4aea": "GOTGCOIN()", +"2d4d671f": "startRevealingPhase()", +"2d4e4472": "LandClaimExecuted(address,uint256,bytes)", +"2d4ede93": "deleteNode(address)", +"2d4f40c6": "setBotAddress(address)", +"2d4fd9dd": "rejectDispute(uint256)", +"2d501611": "PERCENT_BONUS()", +"2d50e2d5": "getSupercedesRegistryInterfaceID()", +"2d5132cd": "getOuvidoriaEnteNome(address)", +"2d5134f7": "setApplication(address,address)", +"2d52164b": "stopsell()", +"2d5216a5": "PHASE_CHALLENGE()", +"2d52d1a2": "rewardDistributionEnded()", +"2d54ab45": "initTokenSale(address,address,address,uint256,uint256,uint256)", +"2d54f04d": "changeVotingBlocks(uint256,uint256,uint256,uint256)", +"2d5505b6": "_setAreas(address,uint256)", +"2d550c0b": "optionality()", +"2d55dd31": "_agreeAmendment(address)", +"2d56acce": "setMinAcceptedInPublicSale(uint256,uint256)", +"2d56af6c": "burnCoin()", +"2d56d572": "releaseMany(address[],uint256[])", +"2d571013": "getFeedBackFeeAward(string)", +"2d571cc4": "createToken(uint256)", +"2d578304": "update(address,uint16,bool)", +"2d57b6c8": "getInvestorDeposit(address)", +"2d57ea40": "FundariaTokenBuy(address)", +"2d580ef6": "add(address,bytes32)", +"2d581e71": "add_user(address)", +"2d5858a3": "publicSoftCapReached()", +"2d58c9a2": "gy()", +"2d58fab1": "pauseCWC()", +"2d592a34": "sellKissBTC(uint256)", +"2d5949a0": "setNumMarkets(uint256)", +"2d596330": "bmcPlatform()", +"2d59680d": "pool_name()", +"2d598d7b": "isAccredited(address)", +"2d599750": "updateUrl(bytes32,string)", +"2d59dc12": "displayMessage()", +"2d59ea6c": "oscarGuindzbergAddress()", +"2d5a5d34": "blacklistAccount(address,bool)", +"2d5a858c": "checkCompanyNameAvailability(bytes32)", +"2d5b2e15": "CLIForGas()", +"2d5b778b": "refundingDeadline()", +"2d5b8d99": "paymentsOf()", +"2d5bbf60": "subscriptions(uint256)", +"2d5c3ed1": "KWHToken(address,uint256)", +"2d5cb5d5": "CryptoKitties()", +"2d5cd1d6": "getPrize(address)", +"2d5ea8e3": "numplayers()", +"2d5f1f61": "getSlashAmount(uint256)", +"2d5fd89f": "getClaimData1(uint256)", +"2d60a72c": "DEPOSITS_KEPT()", +"2d614ad2": "Webpuddg()", +"2d620e1e": "deedsOfOwner(address)", +"2d62ce38": "collectAirdrop(bytes32)", +"2d62f428": "coinIssuedSale()", +"2d63e9f4": "Registration(uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint8,string)", +"2d63f728": "mintWithMetadata(address,uint256,string)", +"2d646742": "executeGameProposal(uint256,bytes)", +"2d658888": "RobotarTestToken(address)", +"2d6653a9": "seed_coins_vault1()", +"2d668da4": "returnAmountOfTmexAddressCanProduce(address)", +"2d66acf1": "fortune_open(uint256)", +"2d67a79e": "verifyAccount(address,string,string)", +"2d67bb91": "World()", +"2d6842b5": "admin_MinimalPayValue(uint256,uint256)", +"2d685f15": "takeSell(address,uint256,uint256,address)", +"2d68bad7": "withdrawForTo(address,address,uint256)", +"2d68bc6e": "saleProceedsEther(uint256)", +"2d68de95": "currentStageTokensCap()", +"2d690f28": "LogSetTokenPrice(uint256)", +"2d6a3482": "TradeListing(bytes32,address,address)", +"2d6acb3a": "RESERVE_POOL_ADDR()", +"2d6afbd0": "unlockWithSpend(uint256,address)", +"2d6b113a": "in_sharing_phase()", +"2d6c17a3": "rewind(uint256)", +"2d6c25fa": "recommendedPrice(uint16)", +"2d6c5a84": "reverter(uint256)", +"2d6d1646": "untokenize()", +"2d6d372d": "getAccountWei(uint256)", +"2d6d4caa": "addtoContributos(address,address,uint256,uint256)", +"2d6ddfda": "closeModifyCountdown()", +"2d6df368": "borrarRegistro(bytes32,bytes32)", +"2d6e2bb0": "regularHold()", +"2d6ef310": "closeGame(uint256)", +"2d6f70f7": "transferViaTokenTransferProxy(address,address,address,uint256)", +"2d6f8049": "setBountyTokensReserve(uint256)", +"2d6fc906": "setBonuses(uint256,uint256,uint256)", +"2d703f88": "getMeeting(uint256)", +"2d706a34": "isName(address)", +"2d710551": "UlleToken()", +"2d7243ef": "payTodayReward(address)", +"2d740722": "close_pre_ico()", +"2d75c39a": "_removeClearingPriceValidator(address)", +"2d762b0d": "changeTokenContractAddress(address)", +"2d76a85a": "PundiXCash()", +"2d76be2d": "player_getPendingTxByAddress(address,address)", +"2d76d7b0": "releaseTokensByAddress(address)", +"2d774da2": "isSetFund()", +"2d776793": "downvoteComment(bytes32,bytes32,bytes32)", +"2d7788db": "rejectRequest(uint256)", +"2d78737b": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d78b7fc": "_withdrawInvestorTokens(address)", +"2d7aa82b": "initialize(uint256,uint256,uint256,uint256,uint256,uint256)", +"2d7ae086": "MarkHours(bytes32,bytes32,int256,bool)", +"2d7af0f4": "transferLoan(bytes32,address)", +"2d7b299d": "setNote(string)", +"2d7b8c98": "returnInvestmentsTo(address)", +"2d7bf927": "Migrations2()", +"2d7c597f": "whois(bytes32)", +"2d7c93e9": "register_claim(string)", +"2d7cd4cd": "rand1()", +"2d7cdeb1": "withdraw(string,uint256,address,bytes)", +"2d7da889": "ruleA(uint256)", +"2d7dc81c": "sendAfterIco(uint256)", +"2d7deae2": "testDeployMultiSigWallet()", +"2d7e92a5": "CWCCTokenIssue(address)", +"2d7eba3f": "ganaBalance()", +"2d7ed15c": "BNB_TOKEN_PRICE_DENOM()", +"2d804ca2": "amountFilled(address,uint256,address,uint256,uint256,uint256,address)", +"2d806bfd": "createProduct(bytes32,bytes32,address[],int256,int256,address)", +"2d806cdd": "setRefund(address)", +"2d80bc86": "getNumberOfParticipantsOrigins()", +"2d80f13c": "EthlanceSponsor(address)", +"2d817a91": "withdraw(uint32[])", +"2d81844e": "_createPrecious(address,uint256,string)", +"2d81e877": "Gocc9()", +"2d826eda": "updatetoken(uint256,string,string,string,string,string,uint256,bool)", +"2d829146": "buyshares(address)", +"2d83549c": "escrows(bytes32)", +"2d839989": "clearingPriceCode()", +"2d83f5a3": "divAmt()", +"2d84c3e8": "_getSigner(bytes32,bytes)", +"2d852552": "CreditDAO()", +"2d85db6b": "ChangeEndByManager(uint256)", +"2d873f21": "CrowdDevAllocation(address)", +"2d87cdd6": "DmlContribution(address,uint256)", +"2d883a73": "getByIndex(uint256)", +"2d884a51": "icoOpeningTime()", +"2d888869": "toAddress(bytes)", +"2d88af4a": "setPauser(address)", +"2d88df6f": "lvePay(string,string,uint256)", +"2d89560a": "TOKEN_INFORMATION_ADDRESS()", +"2d897146": "changeBonusIncreasePercentage(uint256)", +"2d8a08b6": "DepositEvent(address,uint256)", +"2d8a4dca": "committeeKickVotes(address)", +"2d8aa855": "playerInput(address)", +"2d8c1c35": "level_up()", +"2d8c4416": "airDropMonster(uint32)", +"2d8d488c": "getProductContractCommissionWei(address)", +"2d8d96fa": "stockSellCertainOrder(uint256,uint256,uint256,uint256)", +"2d8df871": "alimtoken()", +"2d8e3250": "Version(string)", +"2d8e3278": "grantPermission(address)", +"2d8ebff1": "joinAndDeposit(uint256,uint256)", +"2d8ed84a": "getExpiryDate()", +"2d8f0981": "setPI_edit_14(string)", +"2d9029ca": "earlyResolve(bytes32,uint256,bytes32,bytes)", +"2d9068ed": "matchpoolAddress()", +"2d906a19": "Solario()", +"2d90ae94": "transferToOwner()", +"2d910376": "valueFromPercent(uint256,uint256)", +"2d91657b": "giveConsent(string,string)", +"2d91ad22": "Group_5()", +"2d91bf11": "foxcoin(uint256,string,string)", +"2d923561": "sellItem(uint256,uint256)", +"2d9240f3": "pauseCrowdSale(bool)", +"2d92b1c0": "setupPhases(uint256,uint256[],uint256[],uint256[],bool[])", +"2d92b371": "addVal(address,bytes32,address)", +"2d9346ab": "setAgentVerificationByAdmin(address,address,bytes32)", +"2d935d11": "calculateTokenOnlyBuyPrice(uint256)", +"2d936763": "hasTeamKeepingWithdraw()", +"2d937fe8": "isBeginnerQuestContract()", +"2d93a44e": "getEndClaimDate()", +"2d93d3ac": "getFirstStageWallet()", +"2d94d41e": "DEVCLASS_FTL_SPEED()", +"2d9525d6": "YankeesOrioles48()", +"2d957790": "testRemoteWithdraw(uint256,uint256,uint256,uint256,address,address,uint8,bytes32,bytes32,address)", +"2d958dfc": "Payout(address,address,uint256,uint256,bool)", +"2d95fdb5": "_isApprovedForAll(address,address)", +"2d962d0f": "burnLeftTokens()", +"2d969204": "KingJamesToken()", +"2d96a297": "addStore(uint256,uint256)", +"2d976404": "upgrade_token(address,address,string)", +"2d978678": "left23(uint256)", +"2d97fc5d": "rand(uint256,address)", +"2d980646": "allowanceEliminate(address,address)", +"2d985cfb": "testControlRestartNotUpdatable()", +"2d98d251": "ArtaoToken(uint256,string,string)", +"2d992bde": "applyAffiliate(address,uint256,uint256)", +"2d9a37d3": "getMaxPayout()", +"2d9abaed": "Purchase(uint256,address,address)", +"2d9b1530": "Electrocoin(uint256,uint256)", +"2d9b4ab7": "blnpereth()", +"2d9c3052": "createPaper(string,uint256,uint256)", +"2d9c6001": "prometheusVoucherSoldCount()", +"2d9d5ab7": "withdrawByAdmin(address,uint256,address,uint256,uint8,bytes32,bytes32)", +"2d9de472": "setVerified(uint256)", +"2d9e84b4": "userCampaignID(address,uint256)", +"2d9e87c5": "setRefundable(bool)", +"2d9e8ed6": "addEntryInYears(address,uint256,uint256)", +"2d9ec349": "TOKETH_PRESALE_THREE()", +"2d9eceb5": "BETHERcoin()", +"2d9f669d": "sendProportion(address,uint256)", +"2d9fab98": "suscribeTrial(uint256)", +"2d9ff1d0": "m_Owner2()", +"2da03409": "flushForwarderTokens(address,address)", +"2da09fac": "sellBkgAtExchg(uint256,uint256)", +"2da0c25c": "priceChanger()", +"2da0d1ea": "etherSold()", +"2da11b2e": "biddingClosed()", +"2da13d5e": "CONTRIBUTIONS_MIN()", +"2da1670f": "deAuthoriseSale(uint256,uint256)", +"2da2440c": "registerAuditor(address,address)", +"2da39239": "updateUserShares()", +"2da40888": "TaskUpdated(uint256,uint8)", +"2da40ac7": "emitTokens(address,uint256,uint256)", +"2da4dddd": "createSystemSaleAuction(uint32,bytes,uint16)", +"2da5a444": "deleteSire(uint32)", +"2da5b88e": "remoteSetWinner(uint256,uint256,uint256)", +"2da5deb4": "addBuyTokensRequest(string,string)", +"2da64861": "bulkReserveTokensForAddresses(address[],uint256[],bool[])", +"2da6a0d8": "getBomb(uint8)", +"2da6b8f8": "_getMinersAt(uint32,uint32)", +"2da7293e": "isSuperseded(address)", +"2da758b0": "ResearchAndDevelopment()", +"2da80893": "phase_3_rate()", +"2da8b2be": "TokenSubtracted(address,uint256,uint256)", +"2da8d3e6": "woe()", +"2da8f764": "submitVideo(string,string)", +"2da92e05": "setEmissionCap(uint256)", +"2da9a6cc": "collectMilestoneInvestment(bytes32)", +"2da9b51e": "setBuilding(uint8[176],uint8,uint8,uint8)", +"2da9d048": "startQueue(address)", +"2dab0374": "sendFutureFundingBalance(address[],uint256[])", +"2dab3e7a": "setTransferPlan(address,uint256,bool)", +"2dab7ee2": "convertToBytes(uint8[])", +"2dabbeed": "reclaim(uint256)", +"2dac17cd": "getBattleKuns(uint256)", +"2dacdaf7": "_createGirl(string,address,uint256)", +"2dad2f97": "getLeastExpensiveShare(uint256,uint256)", +"2dad5872": "newAttack()", +"2dad6b6a": "_distributeToken(address)", +"2daddb32": "VVToken()", +"2dadf781": "KudosOrganisations(address)", +"2dae35c4": "RGXBonus(string,string,uint256,uint8)", +"2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", +"2daeb49a": "fundPuppets()", +"2daedd52": "stake(bytes32,uint256,uint256)", +"2daf0e1c": "presaleLevel()", +"2db0d129": "VIDALCOIN()", +"2db237bb": "MARGIN_SPLIT_PERCENTAGE_BASE()", +"2db25e05": "getTrade(uint256)", +"2db26de1": "checkBalances(address[])", +"2db2caef": "rmExchangeAccount(address)", +"2db3dc12": "FrozenAccount_event(address,uint256)", +"2db4f279": "createRoom(string,uint256)", +"2db579f2": "ETHPToken()", +"2db59e2b": "MyOwned()", +"2db6ad32": "testEmpty()", +"2db6e0fe": "fixPlayerFlag(uint256,string)", +"2db6fa36": "batchAddToWhitelist(address[])", +"2db78d88": "adminSealBallot(uint32)", +"2db78d93": "indexes(address)", +"2db8069f": "makeMemberOfCommunity(address,uint256)", +"2db89533": "Auth(uint8,address)", +"2db9395a": "availableTo(address)", +"2db93fc7": "buyBag(uint256)", +"2db95aa9": "getTomatoCount()", +"2dba1a44": "stockCancelSellOrder(uint256,uint256,uint256)", +"2dba3614": "app_address()", +"2dba5cfa": "transferCoins(address,uint256)", +"2dba9e63": "EMACToken(uint256)", +"2dbacf5f": "premiumOpen()", +"2dbb9050": "setSecurityTokensPercent(uint256)", +"2dbc62cc": "BlindCroupierTokenDistribution(address[16],uint256[16])", +"2dbcc104": "getAddressFromList(uint256)", +"2dbce390": "setDepositary_function_control(uint256)", +"2dbd606e": "set_sale_address(address,bytes32)", +"2dbe713d": "EOSPlusToken()", +"2dbede89": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"2dbf7b98": "certificate()", +"2dbf8bf0": "getRolled()", +"2dbffa6a": "executeBuyRequest(uint256)", +"2dc03259": "registerUser(bytes32)", +"2dc03b22": "createNTVU()", +"2dc0562d": "taxWallet()", +"2dc09c39": "protectedReclaim(address,uint256)", +"2dc26661": "unlockOutcome(string,uint256)", +"2dc2dbf2": "makeSimpleDeal(address,address,uint256,bytes32)", +"2dc47153": "datafeed()", +"2dc62c4d": "MintProofOfStake()", +"2dc70b2a": "getCorrectedTotalBPOfTokens(uint256[])", +"2dc7a2e5": "testSetupMultisig()", +"2dc88138": "submitCoin(address,string)", +"2dc8b9de": "f1(address)", +"2dc8be64": "buyoutWallet()", +"2dc8d88d": "privatesale_beneficiary()", +"2dc95548": "adjustTokenExchangeRate(uint256)", +"2dc9ad7f": "multisend(address[],uint256)", +"2dc9b8f7": "createGuess(uint256,uint256,uint256,uint256,uint256)", +"2dc9d3e5": "placeSellTokenOrder(uint32,uint256)", +"2dca374f": "FBToken()", +"2dcac811": "TTNCoin(uint256)", +"2dcb4691": "EventBuyTank(address,uint256,uint256,uint256)", +"2dcb5c8d": "xaurumProxyWorking()", +"2dcbac97": "getGen(uint256)", +"2dcbfdfa": "endEarlyBird()", +"2dcca1f9": "TokenRetriever()", +"2dccba89": "MAX_DEPARTURE_LIM()", +"2dcd4e41": "getGain(uint256)", +"2dcdcd0c": "minChild(uint256)", +"2dce6a1f": "KHT(uint256,string,string)", +"2dcebd16": "setWorldTreasuryAddress(address)", +"2dd02e92": "weGotAWinner(address,uint256)", +"2dd0e79e": "getMarket_CommunitUsedTokens()", +"2dd117e0": "RESERVED_TOKENS_BOUNTIES_ADVISORS()", +"2dd1a932": "WE3TOKEN()", +"2dd1cc27": "MichCoin(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"2dd28736": "view50()", +"2dd2995a": "ETHERCOINSupply()", +"2dd2f86b": "maxTokenSale()", +"2dd306f7": "getTearBalance()", +"2dd31807": "unlistOpenProposals(bytes32)", +"2dd34f0f": "Whitelistable(address)", +"2dd395ae": "SUN()", +"2dd3ed9a": "addWorkRecord(uint256,bytes16)", +"2dd40301": "amountJurors(uint256)", +"2dd407f9": "Vag()", +"2dd4f8d4": "totalSupplyYear()", +"2dd522c6": "ATN()", +"2dd5b58e": "setNewGameLogic(address)", +"2dd608ce": "setPreICOLimit(uint256)", +"2dd694ff": "EntryExistAlready(bytes32,uint256)", +"2dd6ba7e": "release_remain()", +"2dd7030b": "removeAuction(uint256)", +"2dd78759": "affAddr_()", +"2dd7ab99": "BlackSnail(uint256,string,uint8,string)", +"2dd81ed3": "CROWDSALE_REWARD_TOKENS_NUMS()", +"2dd854d4": "addLoanToPortfolio(uint256,uint256)", +"2dd8a25e": "MakeTransaction(address,uint256,uint256)", +"2dd96c84": "presaleGranteesMap(address)", +"2dda04fa": "enterContest(uint32,uint32[])", +"2dda30a7": "transferAndFreeze(address,uint256,uint256,uint256)", +"2ddae32d": "UTCoin()", +"2ddbc04a": "play2(address,uint256)", +"2ddbc97e": "addAuthor(address)", +"2ddbd13a": "total()", +"2ddc36ba": "BRC()", +"2ddcac03": "_checkLimit(uint256)", +"2ddcb21f": "limitSupply()", +"2ddd196f": "bookGuest(string)", +"2ddd6fa5": "incomingRandomNumberError(address)", +"2dddd8e0": "CROWDSALE_HARDCAP()", +"2dddf3e1": "request_withdrawal(uint256,uint256)", +"2dde1911": "balancesImporter2()", +"2dde7241": "priceWithDiscount(uint256,uint256)", +"2dde7dbc": "MAX_DTH()", +"2dde9aca": "deployment()", +"2dde9f81": "getLockWFee()", +"2ddea5fc": "enableEscapeHatch()", +"2ddeac16": "getForeignTokenBalance(address,address)", +"2de02bfa": "allocate(address,address,uint256)", +"2de05136": "unregisterVerifier(address)", +"2de16fdb": "fetchDayTokens()", +"2de1e234": "requestUSDPrice(string)", +"2de22cdb": "currentMintedTokens()", +"2de39dbe": "DifficultyOracle(uint256)", +"2de3ad02": "getUserWalletByUsername(string)", +"2de3cddc": "setCostToCreate(uint256)", +"2de40ce3": "registered()", +"2de4ca59": "Check()", +"2de4fbd8": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"2de541e0": "updateAvatarInfo(address,uint256,string,uint256)", +"2de5aaf7": "getAgent(uint256)", +"2de61d1f": "changeIcoTimeRange(uint256,uint256)", +"2de6fac6": "delKYC(address)", +"2de86c5b": "transferPlayerBudget(address)", +"2de896f6": "MaxTokensPerAccountUpdated(uint256)", +"2de90801": "hashtagToken()", +"2de954af": "fixedLog2(uint256,uint8)", +"2de9a13a": "ToGoConcert()", +"2dea5f6d": "markCombatStarted(uint256)", +"2dea82b4": "checkActualPrice()", +"2deb65c7": "GetPoolInformation()", +"2deb7571": "queryByAddr(address)", +"2deb79b6": "getStockShares(uint256)", +"2ded516e": "giftIsTo()", +"2dee466d": "getAllActiveAuctions()", +"2def6620": "unstake()", +"2df056bd": "ServiceProvider(string,string,string)", +"2df05a3e": "payoutIndex()", +"2df33eee": "ShareEstateTokenCrowdsale(address,address,uint256,uint256)", +"2df38460": "unFreeze(address,uint256)", +"2df39546": "_generateRandom(bytes32,uint32,uint32)", +"2df3f82a": "setClaim(string,string)", +"2df456d4": "SetAllPaymentsSent(uint256)", +"2df56bb2": "unitBattleEthCost(uint256)", +"2df5a559": "year4LockAddress()", +"2df5ce67": "WorkOrderCompleted(uint128,uint256,string)", +"2df6e80a": "cancelTradeOffer(bytes32)", +"2df7c637": "ensureCurrentStage()", +"2df80280": "lastState()", +"2df80c87": "privilegedMintLock()", +"2df8e00d": "becomeMortal(uint256)", +"2df939cd": "Banglatoken()", +"2df9feaa": "stopElection()", +"2dfaf204": "executeContract(uint128,uint128)", +"2dfd27e8": "fecharDoacoes()", +"2dfdaf59": "CheckSoilTempException(bytes32,uint32)", +"2dfdf0b5": "depositCount()", +"2dff0d0d": "getById(bytes32)", +"2dff3498": "Relay()", +"2dff692d": "orderStatus(bytes32)", +"2dff6941": "content(bytes32)", +"2dff7a2b": "authoriseMaker(address)", +"2e0025c1": "ROLE_BACKEND()", +"2e011136": "deployTokens(address[],uint256[])", +"2e012698": "validate(bytes32)", +"2e01783d": "calcprice()", +"2e0179b5": "increaseApprovalWithSender(address,address,uint256)", +"2e01d229": "Attacker(address)", +"2e02583c": "wordlist()", +"2e028287": "test_oneInvalidAssertFalse()", +"2e029c65": "HARDCAP_TOKENS_ICO()", +"2e02b24c": "PMCToken(address,uint256)", +"2e038aaf": "randaoAddress()", +"2e04d730": "BuyGoods(uint32)", +"2e05177f": "OpenTransferToken()", +"2e055bcc": "preSaleSupply()", +"2e05b37b": "settleFee(address,address,uint256,uint256)", +"2e06c756": "post(string,string,string,uint256,uint256,address)", +"2e071db3": "updateUserAge(address,uint256)", +"2e081f31": "pause_3()", +"2e08c3d1": "checkUserWhiteList(address)", +"2e08eb77": "InitialTreeICO()", +"2e09c32f": "playRound(address,uint256)", +"2e0a020e": "refunduingStartDate()", +"2e0b1834": "periodByDate()", +"2e0bee7b": "createCampaign(string,string,uint256[],uint256,uint256,uint256,uint256)", +"2e0c6c36": "RANGEEND_3()", +"2e0ca1ee": "first_pay()", +"2e0cb498": "hashValue(bytes32)", +"2e0de515": "setTip(uint256)", +"2e0dfafc": "addBlockListed(address)", +"2e0e11b2": "OrderMatchFailure(address,int256,address,int256,uint256,uint256)", +"2e0e5ce8": "getBonusNames()", +"2e0eb6fd": "Lucy()", +"2e0eb943": "doSend(address,address,uint256)", +"2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", +"2e0f2625": "DECIMALS()", +"2e0fb349": "mainSaleSecondEndDate()", +"2e0fc7a6": "updateContributor(address,uint256,uint256)", +"2e102ee4": "setGasPrice(uint8)", +"2e108133": "qshdrop(address[],uint256)", +"2e10870f": "makeAnotherContractOwnerOfToken(address)", +"2e10feff": "addSigByProvider(bytes32)", +"2e13bd10": "not()", +"2e14ef92": "mutiSendCoinWithSameValue(address,address[],uint256)", +"2e15ba63": "forwardData(bytes32,address)", +"2e16cf54": "retrieveWallet(address)", +"2e16e82e": "BitcoinCityCoin()", +"2e17de78": "unstake(uint256)", +"2e18270f": "receiveBTC(address,string,uint256,string)", +"2e18762c": "LogUpdateInvestorProfitSum(uint256)", +"2e18cead": "PrivateSale(address,uint256,uint256,uint256,uint256)", +"2e18d8a9": "becomeBullsmaster()", +"2e190d03": "IncreasingPriceCrowdsale(uint256,uint256)", +"2e19599c": "getTargetRepMarketCapMultiplier()", +"2e19d31b": "proposalText()", +"2e19ebdc": "pIDxName_(bytes32)", +"2e1a348e": "TicTacToeGame()", +"2e1a37ee": "TCToken()", +"2e1a7d4d": "withdraw(uint256)", +"2e1a9ffe": "getPepe(uint256)", +"2e1b2098": "PlayerCreated(uint8,address,uint256)", +"2e1b7f08": "SetClaimRate(uint256)", +"2e1bbe98": "setLimitEth(uint256)", +"2e1c1d63": "BoardMeetingClosed(uint256,uint256,bool)", +"2e1c49d9": "testInitalBalanceUsingNewContract()", +"2e1d22b6": "getPlayerDividend(address)", +"2e1dc4b8": "setTokenReward(address)", +"2e1dea6b": "updateHours()", +"2e1e786d": "setWhitelist(address[],address[],uint256[])", +"2e1eb7fe": "slice32(bytes,uint256)", +"2e1ef07a": "getAmountOfTokens(uint256,uint256)", +"2e1faf75": "transferToken(address,uint256,uint256)", +"2e1fbfcd": "getProposalObjectionByIndex(uint256)", +"2e20255e": "MasterToken(uint256,string,uint8,string)", +"2e20b66a": "setThings(address[],uint256[],uint256)", +"2e217405": "limitedWallets(address)", +"2e21b085": "lastPriceOf(uint256)", +"2e226c84": "rewardForDrawing()", +"2e23062d": "increaseBase()", +"2e2326d5": "isPrivileged(address)", +"2e247e4f": "SRGToken()", +"2e25aa96": "setCharPrice(uint256)", +"2e25d2a6": "marketPlace()", +"2e26328d": "RaiToken()", +"2e271ff3": "getEmail(address,address)", +"2e276499": "minPayment()", +"2e279344": "getLunckyInfo()", +"2e27c10a": "setPI_edit_25(string)", +"2e283b94": "TokenClaim4BTC(address,address,uint256,uint256,uint256,uint256)", +"2e28b3f5": "SGX_ADDRESS()", +"2e28d084": "setBytes(bytes32,bytes)", +"2e28fd42": "complete(uint256,string)", +"2e293e58": "setClientPaidUpTo(address,uint256)", +"2e297a44": "getSmartContractsLength()", +"2e298f75": "setPositiveGrowth(int256)", +"2e2a51bd": "WitdrawTokenToHolder(address,address,uint256)", +"2e2a6488": "evaluation_stage_block_size()", +"2e2aad44": "NIMFAToken(address,address,address,address,uint256,uint256)", +"2e2b3f61": "TokenCreated(address)", +"2e2b5809": "Insurechain(address,address)", +"2e2bac04": "addControllerContract(address)", +"2e2bec5c": "getMinerLevel(uint256)", +"2e2cce55": "icoRound5()", +"2e2d6ab1": "DelayedPayment(address,uint256,address,uint256)", +"2e2e4149": "minTomoContribution()", +"2e2ed6a7": "PALToken(uint256,address)", +"2e2fe8a9": "ZYL()", +"2e2ff7c6": "transferPreSaleTokens(address,uint256)", +"2e3196a5": "set(string,bytes32)", +"2e323f5d": "Update(uint256,uint256,string)", +"2e325020": "getStage(uint256)", +"2e33178a": "zRefundAllPlayers()", +"2e334452": "getPublicKey()", +"2e336eea": "testDieIfMinReturn0()", +"2e338df5": "transferInner(address,uint256)", +"2e33cd7a": "distructVault(bool)", +"2e340599": "info(uint256)", +"2e340823": "cancel(uint256[])", +"2e35d7a8": "companyTokensCurrent()", +"2e368e03": "beneficiariesPercentage(address[],uint256[])", +"2e36a709": "Error(uint256)", +"2e3712c4": "Bitelectroneum()", +"2e376ada": "whitelistIndexMap(address)", +"2e379264": "AIRDROP_CLAIM_AMMOUNT()", +"2e37fa97": "doneOptions()", +"2e39c2b1": "Prize(string,uint256,string)", +"2e39ff84": "isGeneSynthesis()", +"2e3a0a7c": "destroyMultipleItems(uint256[])", +"2e3a4d12": "handleRSMCUpdateTx(address,bytes32,uint256,address,uint256,address,uint256)", +"2e3a4def": "isTier2(address)", +"2e3a5611": "create(string,string,string,uint256,string,string,uint256,string)", +"2e3a71d5": "futureFundingBalance()", +"2e3acf6b": "contractPreICO()", +"2e3aff3b": "getSpinnerPrice(uint256)", +"2e3b3123": "_multiSet(address[],uint256[])", +"2e3b96bf": "developersTokens()", +"2e3be78d": "setPrecisionDirect(uint8)", +"2e3c2259": "playingNTVU()", +"2e3c9e99": "managerAddr()", +"2e3ca08c": "WALLET_MARKETING()", +"2e3cbb3b": "sellPop(address,uint256,uint256)", +"2e3ced61": "periodPreITO_startTime()", +"2e3db828": "getAddressForUsername(bytes32)", +"2e3edd0f": "ntsDepositAddress()", +"2e3fa349": "isLpStart()", +"2e4040b0": "releaseTeamTokensAfter6Months()", +"2e404c0f": "_setDOwner(bytes32,address)", +"2e4054cf": "vest2advisors(address,address)", +"2e4099bd": "transferAirdrop(address[],uint256,bytes)", +"2e414890": "challenge(uint256,uint256)", +"2e415444": "transferUniqueId(bytes32)", +"2e416162": "tkstest()", +"2e4176cf": "chairperson()", +"2e4216c1": "setMinInvestmentInWei(uint256)", +"2e42b012": "LockAccount(address)", +"2e42f80c": "CDC()", +"2e42f860": "toUint32(bytes)", +"2e430824": "trackable(address,address)", +"2e43bdfd": "approveDecrease(address,uint256)", +"2e440403": "rounding()", +"2e448f4b": "transferAngel(address,address,uint64)", +"2e450881": "PRESALETOKENMAXSALES()", +"2e4644bf": "sellDragon(uint256,uint256,uint256,uint16,bool)", +"2e465465": "provideIndex(string,uint256)", +"2e466373": "resumePlaying()", +"2e46cb09": "AddChipTempTime(uint32,uint256)", +"2e46ed94": "uint8ToString(uint8)", +"2e471d47": "addInvest()", +"2e478dd8": "provideCertificate(uint256,uint256)", +"2e4837ea": "pickUp()", +"2e48f65d": "UpdateMoney()", +"2e49d78b": "setStatus(uint8)", +"2e4a3657": "returnToken()", +"2e4ab29e": "technicalContract()", +"2e4b3d59": "setSecurityPercent(uint256)", +"2e4bd18a": "ApproveFinishMintingRequest()", +"2e4c4a9f": "lunyrPercentOfTotal()", +"2e4c697f": "pow(uint256,uint256)", +"2e4d2a09": "DMC()", +"2e4d3189": "withdrawal(address,uint256,uint256)", +"2e4d59c4": "CheckBalance(address)", +"2e4d8c8f": "exerciseToken()", +"2e4eaa15": "destroyToken()", +"2e4f43bf": "allOf(uint256)", +"2e4fd0ca": "addReferrer(uint256)", +"2e502569": "emitTransferred(address,address,uint256,address)", +"2e504bdb": "distributeTokens(uint256,uint256,uint256)", +"2e50e3ff": "simulateOptions(uint32,uint32,uint32,uint32,uint32,uint8,uint32)", +"2e5113b7": "benefit()", +"2e519ad5": "joinGameReferred(bytes32,address,uint8)", +"2e519dd5": "updateLottoParams(uint256,uint256,uint256)", +"2e51cdf6": "getAddressFromBytes(uint8,bytes)", +"2e52d606": "n()", +"2e532ba2": "getBackgroundImage(address,uint256)", +"2e533630": "sendBatches(address[],uint256[])", +"2e541234": "AllThingsTokens()", +"2e558a2d": "ETTToken()", +"2e56f71e": "deactivateMint()", +"2e56fd7a": "currentDelayOnNewLevel()", +"2e574191": "NEURAL()", +"2e58e65a": "getTokenInitialPrice()", +"2e597ada": "ChenToken()", +"2e599054": "depositETH(address,uint256)", +"2e5a6f17": "releaseAdvisorsTokens()", +"2e5a79fc": "_withdraw(string,address,uint256)", +"2e5ab94f": "BLOCKS_PER_PHASE()", +"2e5ac9b1": "createToken(address,address,address)", +"2e5b02ae": "setCrcWithdrawAccount(address)", +"2e5b2168": "maxBet()", +"2e5b4c43": "allowTrading()", +"2e5b604e": "lockBonus(address,uint256)", +"2e5c4cef": "RRRR_Token()", +"2e5cc103": "createDefaultEtherDog(uint256,uint256,uint256,address,uint256,uint256)", +"2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", +"2e5d89bd": "BlockmoXyz()", +"2e5df0fe": "signUpDelegatedUser(string,address,uint8,bytes32,bytes32)", +"2e5e00e1": "_FIFTY()", +"2e5ec035": "_ApplicationRemoved(bytes32)", +"2e5fe746": "communityTokens()", +"2e609c10": "presaleStartsAt()", +"2e61319d": "getNumberOfAddresses()", +"2e617512": "getAddressFromName(bytes32)", +"2e62190c": "valueWithFee(uint256)", +"2e6245c6": "internalBalance()", +"2e62efbb": "getOpenOrderInfo(address,address)", +"2e63046d": "mybUSDPrice()", +"2e63756f": "PriIcoSale(address,uint256,uint256,address,address)", +"2e639fd5": "GetPlayerInfo()", +"2e63cfe1": "Twoandtwo()", +"2e63dc80": "get_description_url()", +"2e63fa72": "calculateFillHash(address[],uint256[],uint8,uint8)", +"2e64bcf1": "weiWantedOf(address)", +"2e64cec1": "retrieve()", +"2e65280d": "ListNotValidated()", +"2e660475": "PonziTokenV3()", +"2e66ee1b": "currentStateToString()", +"2e69e69b": "getQuantity(address)", +"2e69e8c5": "CarolToken()", +"2e6aa830": "testInitialBalanceWithNewMetaCoin()", +"2e6b2662": "sponsoredBonusMin()", +"2e6b921c": "claimTokensByAdmin(address)", +"2e6bbde5": "_updateCurrentAnswer(bytes32,bytes32,uint32)", +"2e6c4933": "getchilds()", +"2e6ccbf6": "getFactorybyIndex(uint256)", +"2e6d18ec": "getRoomData(uint256)", +"2e6d561b": "sendUnsoldTokensToTreasury(address)", +"2e6e190e": "Play(uint256,uint256)", +"2e6e504a": "trusteeWithdraw()", +"2e6e795c": "shareHoldersOf(uint256)", +"2e6f2136": "emitToken(address,uint256)", +"2e6f3e4a": "PERCENT_RATE()", +"2e6f456c": "updateCrowd(uint256,uint256,uint256,uint8)", +"2e70bd4f": "mintOperationCount()", +"2e712cc1": "getAdminComission()", +"2e71e68f": "IDX()", +"2e72057e": "GetLiasonURL(uint256,uint256,uint256)", +"2e722561": "CrowdsaleController(uint256,address)", +"2e7248bf": "MINIMUM_SELLING_UCCOIN()", +"2e729daf": "totalTRsWagered()", +"2e73dba0": "FeneroToken()", +"2e76a6d4": "allocateMarketingTokens(address,uint256)", +"2e771b17": "Spent(address,uint256,string)", +"2e77b3d0": "annual_circulating_supply()", +"2e788443": "resolve(string,address,uint256)", +"2e788faf": "HOLODECKS()", +"2e78f9a7": "getCardValue(uint256)", +"2e79477f": "SGD()", +"2e799a77": "GainChip(address,uint32,bool)", +"2e79d702": "addPolicyRule(bytes4,address,bytes32,uint256,uint256)", +"2e7a26d6": "Delineto()", +"2e7a9409": "_winJackPot(address,string)", +"2e7bcc55": "put(bytes32,bytes32,bytes32)", +"2e7ceb0f": "THIRD_TIER_RATE()", +"2e7d6253": "Sale(address,address,address)", +"2e7db440": "prepurchase(uint32)", +"2e7dc6af": "src()", +"2e7e33df": "sendFunds(address,uint256,bytes)", +"2e7e9af8": "addDistributee(address,uint256)", +"2e7e9d82": "ModerateBill(uint256,bool)", +"2e7f5107": "_processCredit(address,uint256)", +"2e7f9127": "setSize(uint8,string)", +"2e7fa0bb": "ReyNetMax()", +"2e8057ba": "NucleusVisionToken_ASTER87901()", +"2e80a85d": "last_jack()", +"2e80cc56": "crowdSaleMin()", +"2e80d9b6": "QUORUM()", +"2e80e77c": "minimumWeiAmount()", +"2e817963": "set_sdl(address)", +"2e81cdda": "setItemOptions(address,uint256,uint256,uint8)", +"2e82aaf2": "lock(bytes32,uint256,uint256)", +"2e831cd1": "update_bitcoin_ratio(uint256)", +"2e834576": "tokensForEth(uint256)", +"2e83faee": "CustodianUpgradeable(address)", +"2e84a374": "reclaimEtherTo(address,uint256)", +"2e84bed8": "VESTING_2_AMOUNT()", +"2e84e8ca": "ItsComingHomeToken()", +"2e8511f0": "getReg1()", +"2e85dd54": "getGPSMaxEth()", +"2e860fc2": "setRaiseLimit(uint256)", +"2e867c77": "PRESALE_BONUS_PERCENT()", +"2e86cb13": "publicGetAsset(uint256,uint256)", +"2e875a9f": "RnMmasterReq()", +"2e87b461": "getPlayerFrontDataForMarketPlaceCards(uint256)", +"2e87edd9": "MINIMUM_PARTICIPATION_AMOUNT()", +"2e87f4a5": "_emitRoleAdded(address,uint8)", +"2e881918": "setVariantCount(uint256,uint256)", +"2e894203": "delLitAddress(address)", +"2e898ddc": "validateTemporalUnit(uint256)", +"2e8a34a7": "addTo(bytes32,uint256)", +"2e8ac384": "SmartIdentityRegistry()", +"2e8ac517": "TokensMinted(address,uint256,uint256)", +"2e8b73cd": "getPoolUrlOfAuditReport(uint256)", +"2e8c0ac2": "balancing(int256,int256,uint256)", +"2e8c5793": "BonumPromoToken()", +"2e8cbf7d": "_determineAttack(uint256)", +"2e8e66b9": "newRequest(address)", +"2e8e9bb9": "Venuscoins()", +"2e90610d": "auditActivity(uint256,string,uint256,uint256)", +"2e9066b2": "lastBlock_v6()", +"2e90aae8": "cuck()", +"2e913118": "txTaskMap(uint256)", +"2e91812b": "setSmallCapWhitelistParticipants(address[],uint256)", +"2e92abdd": "withdrawDividends()", +"2e932961": "setTimeEnd(uint256)", +"2e93497e": "ownerRandomHash()", +"2e9392bb": "marketEggs()", +"2e9453c2": "stateOfICO()", +"2e94afe0": "EDN()", +"2e94c0df": "_withdrawTokens(address)", +"2e9501d6": "maxThreshold()", +"2e963adc": "timelocksContracts(address)", +"2e97766d": "getBlock()", +"2e97c5a5": "ethToLoveyRate()", +"2e97f1bb": "setCustomerTxAsSpent(address,bytes32)", +"2e984745": "partnerID(address)", +"2e9868f8": "issuerName()", +"2e986b54": "TransferMinimumFeeConfirmed(uint256,address,uint8)", +"2e98a401": "preCheckAndPay(string,uint256,address)", +"2e993994": "changeUnforked(address)", +"2e995fd7": "setOraclizeAllowance(uint256)", +"2e99df84": "InitiateTeams()", +"2e9a06fd": "isValidIPFSMultihash(bytes)", +"2e9a3869": "MORCO()", +"2e9b4414": "getSpawnLimit(uint32,int256,uint256)", +"2e9b50bd": "addPeer(address)", +"2e9bbbb8": "transferOwnershipUpdateToken(address)", +"2e9be9d5": "signWithdraw(address,address)", +"2e9c135b": "proxydeposit()", +"2e9c5e77": "doStackExtension(uint256)", +"2e9c91a8": "getStartParams(bytes32)", +"2e9efb8e": "commitToWeek(uint256,uint256)", +"2e9f86cd": "create0(uint256,bytes)", +"2ea0dfe1": "transferFrom(address,address,uint64)", +"2ea1f9aa": "getEpisodeLength()", +"2ea23b11": "testTransferFromDoesNotAllowTransferByAddressThatHasNotBeenApproved()", +"2ea38693": "testCreatePrizeUsingNewContract()", +"2ea3ad74": "finishPreIco()", +"2ea3f9fc": "gelerCompte(address,bool)", +"2ea459b8": "claimThrone(bytes)", +"2ea60e35": "fourthWeekBonus()", +"2ea68d4b": "LazyCoderCoin()", +"2ea6d6da": "absMin(int256,int256)", +"2ea7b4d0": "ALPHA_DIVISOR()", +"2ea7e0d2": "Test5(uint256)", +"2eaa7be9": "PoolSegregationCrowdsale(uint256)", +"2eaad0b0": "_getAllChildren(bytes32)", +"2eabb38d": "doTransferIn(address,uint256)", +"2eac3a7d": "divCashCoin()", +"2eac5a77": "Getscoins()", +"2eac5ca2": "deleteUsername(bytes20)", +"2eacfd0f": "admin_withdraw(uint256)", +"2ead28fa": "BBTToken(address)", +"2eadda54": "number_to_hash(uint256)", +"2eae0018": "setMaxChildCount(uint256)", +"2eae0d0a": "SetTimes(uint256,uint256)", +"2eaf7fe0": "buyTokenPostIco(address,uint256)", +"2eaf81f9": "concludeTournament(uint256,uint256)", +"2eafb9fa": "setMintTokenOwner(address,address)", +"2eafc2aa": "installWinner(uint256)", +"2eb0111c": "currentPhaseAddress()", +"2eb0b45a": "setGlobalsSize(uint256)", +"2eb1482a": "isHorseInStud(uint256)", +"2eb1ee9e": "CandyLand(address)", +"2eb255ec": "divpaid()", +"2eb2c2d6": "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", +"2eb37466": "removeWhitelistedAddress(address,address)", +"2eb3a797": "getBetKey(uint256)", +"2eb44efc": "ICOSaleType()", +"2eb4a7ab": "merkleRoot()", +"2eb51417": "isWithinSaleLimit(uint256)", +"2eb516b8": "setGNR(address,address,address)", +"2eb56ad4": "getUserTokensByGame(address,uint32)", +"2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", +"2eb61d15": "getAdvisorStatus(address)", +"2eb67f53": "isERC20()", +"2eb73307": "internalRefund(address,uint256)", +"2eb77b44": "PNNP(uint256,string,uint8,string)", +"2eb9526e": "GetBoilersInfo()", +"2eb95fd4": "doHijack(uint256,uint256,uint256,uint256)", +"2eb96988": "getMetBalance()", +"2eb98d34": "hosp_count()", +"2eb9a518": "ChangeRateOfToken(uint256,uint256)", +"2eb9f831": "markAsFounder()", +"2eba1c40": "deleteName(address)", +"2eba9ca9": "liquidateUser(address,uint256)", +"2ebabea0": "preSaleRaise()", +"2ebba2cf": "unitsPerEthAt(uint256)", +"2ebbac6c": "ico4Cap()", +"2ebbc58c": "getAllRouter()", +"2ebc4293": "getEthereum()", +"2ebc760b": "AvPresale()", +"2ebd1e28": "setTokenAddr(address)", +"2ebd632a": "addSystem(address,address)", +"2ebd9242": "TOTAL_TOKENS_ICO()", +"2ebe14b0": "timeoutBlocks()", +"2ebec916": "withdrawalProfit()", +"2ebeee0f": "increaseMinPurchaseQty(uint256)", +"2ebfa208": "checkFreeze(uint256)", +"2ebfeaac": "setCCH_edit_33(string)", +"2ec0090a": "withdrawEtherBalance()", +"2ec0faad": "createPassport()", +"2ec19f0f": "itemTransfer(address)", +"2ec21efd": "OuCoin()", +"2ec29c59": "ICOSALE_BONUSJOINTTOKENS()", +"2ec2c246": "unregister(address)", +"2ec40ac8": "reached()", +"2ec449d7": "MedexTestToken()", +"2ec47069": "assignFoundationSupply(address)", +"2ec6b4f6": "getUnitCoinProductionMultiplier(address,address,uint256)", +"2ec6ea30": "Hodl()", +"2ec82b8f": "balanceOfInt(address)", +"2ec86103": "booleanToUInt(bool)", +"2ec90e34": "decrementOwnedArea(address,uint256)", +"2ec9322d": "returnStartTime(uint256)", +"2ec9ad44": "removeAccessor(address)", +"2ec9c537": "MyFiChain()", +"2eca51e2": "elements(uint256,uint256,uint256)", +"2ecad13f": "getSaleEndDate()", +"2ecae90a": "getLeverageList()", +"2ecb0d64": "getNumber(bytes32)", +"2ecb20d3": "fromHexChar(uint8)", +"2ecb9279": "yesHash()", +"2ecbd6d8": "allowedForWithdrawn()", +"2ecc8703": "guardInterval()", +"2ecca4e6": "_destroyNinja(uint256)", +"2ecd071e": "Freezed(address,uint64,uint256)", +"2ecd7020": "getTotalTokenSold()", +"2ecde40e": "getRefWallet(address,address)", +"2ece07c3": "setUserAirDropRate(uint32)", +"2ecf307e": "_addrNotNull(address)", +"2ecf66e4": "softCapToken()", +"2ed028da": "addGift(address,uint8)", +"2ed0d097": "_getTotalTokenBalancePerShard(uint256)", +"2ed196bd": "ccLockedUpBalances(address)", +"2ed1a7f6": "setProposalTTL(uint256)", +"2ed1e521": "generateWinMatrix(uint16)", +"2ed1f26e": "unlockBatchOfAddresses(address[])", +"2ed20ec7": "Yiha()", +"2ed23a73": "_releaseTo(address)", +"2ed252cb": "toERC20(uint256,uint256,uint256)", +"2ed42bf7": "_config()", +"2ed44309": "setIcoParameters(uint256,uint256,uint256,uint256)", +"2ed4595a": "participantContributionInEth(address)", +"2ed4a2c7": "changeState(address,uint8)", +"2ed4b68a": "creditFundNIMFAAddress()", +"2ed5016a": "SolidStampRegisterAddress()", +"2ed5ca29": "recordFillOrder(bytes32,uint256,uint256)", +"2ed604c8": "secondsLive()", +"2ed73df6": "starterPackCardLevel()", +"2ed94f6c": "bulkWithdraw(address[])", +"2ed9859f": "hasSongWriterSigned(address)", +"2ed9cf65": "editPerson(address,string,string,string,uint256,uint256)", +"2edb5389": "replenishTokens(address,uint256)", +"2edcc661": "crowdsaleStartDate()", +"2edcedc6": "parkingSwitches(address)", +"2edefc26": "founderMultiSigAddress()", +"2edf8042": "collectProvisions(uint256)", +"2ee01240": "getUnitJadeStealingMultiplier(address,address,uint256)", +"2ee057ca": "deallocateItem(uint256,uint256)", +"2ee07c00": "closeEvent(uint256)", +"2ee07cbf": "AxieClockAuction(uint256)", +"2ee119cb": "demint(address,uint256)", +"2ee1e64c": "toRLPItem(bytes,bool)", +"2ee2a7af": "getContractPartner()", +"2ee3cf83": "cancelOrderByAdminWithMerchant(string,address)", +"2ee40908": "stakeFor(address,uint256)", +"2ee551bf": "RESERVED_BOUNTY_GROUP()", +"2ee56469": "cancelGoldBuyOrder()", +"2ee5d2e3": "last_forwarder_created()", +"2ee6807a": "raiseCoinsDeducted(address,uint32,uint256)", +"2ee6f8b6": "changerType()", +"2ee6fe55": "_addOwnerPlayerToTeam(uint256,address,uint256,uint256)", +"2ee79ded": "change()", +"2ee86973": "resolveHTLC(uint256,uint256,uint256,bytes32,int256,bytes32,uint8,bytes32,bytes32)", +"2ee8dda9": "allocateFoundationToken()", +"2ee92639": "purchaseCancel(address)", +"2ee94319": "RecievedEth(address,uint256)", +"2eea1efe": "getCCH_edit_20()", +"2eebdeb8": "_setStakeHolder(address,uint256)", +"2eebe94f": "weiRaisedAmount()", +"2eecbc7f": "deployMeDao(string)", +"2eecc46c": "sendTokensToInvestor()", +"2eed0079": "createMicroModule(uint256,string,uint256,uint256,uint256,uint256,uint256)", +"2eee5a3e": "totalPresaleTokensYetToAllocate()", +"2eef13cd": "changeArt(bytes32,string,string,string,string,string,address)", +"2eef3d65": "query(bytes32,string)", +"2ef01862": "subscriptionDetails(uint256)", +"2ef0a28d": "seraphims(address)", +"2ef140ef": "send(address,uint256,uint256,uint256)", +"2ef22b34": "setExpRewards(uint256,uint256)", +"2ef2b51d": "OWNER_TAKE_SHARE()", +"2ef2d55e": "channelTimeout()", +"2ef2edb8": "endICOStage1()", +"2ef345e4": "DAppSky()", +"2ef35214": "setVestingRate(uint256)", +"2ef3a7e1": "setBalancePercentageLimit(uint256)", +"2ef3accc": "getPrice(string,uint256)", +"2ef4940f": "withdrawalsVotes()", +"2ef4d922": "revertMe()", +"2ef5c784": "allTimePlayers()", +"2ef6d6c0": "countWebsite(address)", +"2ef70523": "SVDelegation()", +"2ef75ebc": "STAGES_PERCENT_RATE()", +"2ef761d3": "buyTile(uint8,uint8)", +"2ef771ae": "hodlFor(uint256)", +"2ef82db9": "getCandidatePollingResesult(address,uint256)", +"2ef875fb": "div10(uint256,uint8)", +"2ef8c22b": "FunWorldCoinToken()", +"2ef9b4aa": "EngkusTechResearch()", +"2ef9b5a7": "changeBonusMultiplier(uint256)", +"2efa3c87": "TokensSpent(address,uint256)", +"2efa79d3": "tokensFrozen()", +"2efaa460": "testActivateSale()", +"2efad59d": "EmployeeServ(address)", +"2efb3f04": "getNumberOfScams()", +"2efb77c4": "changeDates(uint256,uint256)", +"2efbb80c": "addMeaningToCovfefe(uint256,string)", +"2efc5013": "Ask(uint256,uint256,address)", +"2efcb5e0": "TransferCommissionToken(uint256)", +"2efd08df": "totalPaintingsCount()", +"2efd5632": "candyLandAddress()", +"2efeb4e5": "LogSale(address,uint256,uint256)", +"2effbada": "eligibleTestAndIncrement(address,uint256)", +"2f0019f2": "getFeatureStatus(string)", +"2f002511": "viewTotalPaid()", +"2f004218": "PERCENT_COMMISSION()", +"2f00b84a": "SECToken(uint256,string,string)", +"2f0160e7": "fromOtherCurrencies(uint256,address)", +"2f034f35": "PerformingMonthlyMinting(uint256)", +"2f038fd5": "enable(uint8)", +"2f0573d9": "DSToken(bytes32)", +"2f0579db": "_isBreedingPermitted(uint256,uint256)", +"2f0746bf": "unsetWildCardToken(uint256)", +"2f078b12": "HashGenerator()", +"2f087a28": "getTokenCap()", +"2f08acfa": "Extreme()", +"2f0989ec": "release12m()", +"2f0ae513": "calculateTotalWithdrawableTokenAmount(address,address)", +"2f0b0222": "numberOfRound()", +"2f0b15f6": "testGetUnset()", +"2f0b5cb5": "setTokenTransferPercentage(uint256,uint256)", +"2f0b9dcb": "getArray2()", +"2f0c2c7c": "getReward(uint32)", +"2f0c59e7": "DISTRIBUTION_INVESTORS()", +"2f0c9387": "TestCitySnapshot(address,uint256)", +"2f0cca79": "dataMerkle(uint256[],uint256,uint256)", +"2f0d2079": "getEventBanks(uint256)", +"2f0d8962": "ChangeFeed(bytes32,uint256)", +"2f0dbae1": "MaxICOpublicSupply()", +"2f0ddcb2": "getTechBonus2(uint256)", +"2f0e23fb": "purchaseEndTime()", +"2f0e3a6c": "status(address,address)", +"2f1017cb": "getwinnerloser()", +"2f109d2b": "afterWhtelisted(address)", +"2f113f27": "LOCK_STAKE()", +"2f121ada": "companyBalance()", +"2f12bc02": "LiquexPrivateSale()", +"2f1335cf": "splitFunds(uint256)", +"2f13b60c": "isExpired()", +"2f148f55": "showMoseEvent(uint32)", +"2f156f69": "deployTgeTeamVesting(address,uint256)", +"2f158162": "setHKHcoinAddress(address,address)", +"2f16753c": "ShellToken(uint256,string,uint8,string)", +"2f16c072": "getPeaks(uint256)", +"2f1766c5": "addCA(address,address,string,string,string,string,string,string)", +"2f17a466": "terminateSchedule(address)", +"2f186785": "showProfit(address)", +"2f18a920": "setDeputy(address)", +"2f1927cb": "prepareRoll(uint256,uint256,uint256)", +"2f194e40": "isMintDone()", +"2f1a2e72": "allocate(address,int64)", +"2f1a332a": "OwnerRandomNumber(uint256)", +"2f1a8177": "weiToBnty(uint256)", +"2f1a8b63": "modify_ICOEndDate(uint256)", +"2f1af169": "EscrowMyEther()", +"2f1afbac": "doAirdrop(address,address[],uint256[])", +"2f1c34ef": "buyStar(uint256)", +"2f1c6494": "tgeSettingsAmount()", +"2f1c935e": "setSkinContract(address)", +"2f1cae85": "isIssuable()", +"2f1cc35b": "getRoundBetNumber(uint256,uint256)", +"2f1d29fd": "HarjFarmer()", +"2f1d3e28": "sendAwardToLastWinner()", +"2f1d5a60": "setOperatorAddress(address)", +"2f1ddbe3": "nodalblockShortLink(uint256,string)", +"2f1de784": "getPoolsAllot(bytes32)", +"2f1e4968": "makeNewProposal(string,uint256)", +"2f1ee5e1": "recycleUnreceivedBonus(address,address)", +"2f1f1d43": "getownership2(uint16,uint256,uint256)", +"2f20270a": "addNewUrl(string)", +"2f2035ed": "test_feePoolShare_notTranscoder()", +"2f204237": "setupSaleContract(address)", +"2f212780": "KYCbit4()", +"2f220d7a": "executeEscrow(uint256,address)", +"2f237e82": "create(string,string,bytes)", +"2f24bdc7": "is_transaction(bytes32)", +"2f254d09": "UGVCToken()", +"2f262471": "GetPlayerCards(address)", +"2f265cf7": "totalVotesFor(bytes32)", +"2f26b5d1": "delayIcoEnd(uint256)", +"2f26f6f5": "getIsCompany(address)", +"2f2712f8": "getStat(bytes32,address)", +"2f274d91": "buyVotes(uint8)", +"2f2769d1": "assertEq(address,address,string)", +"2f2770db": "disable()", +"2f278ecb": "reverseBytes(bytes)", +"2f27b556": "card_start_minamount()", +"2f29d8c5": "elapsed()", +"2f2b348d": "setBeneficiary1(address)", +"2f2bd5ac": "testTransferCorrectlySendsTokens()", +"2f2c00f3": "PTMCrowdFund()", +"2f2d783d": "claimReward(address,address,uint256)", +"2f2d783e": "rewardRoto(address,bytes32,uint256)", +"2f2d9109": "changeAirdropTotalQty(uint256)", +"2f2dc6e2": "setCardsCount(uint256)", +"2f2e2d7f": "fstUnitPriceDenominator()", +"2f2e3cea": "userDividendsWei(address,address)", +"2f2ebe41": "setToken4Gas(uint256)", +"2f2f010c": "OCLotteryContract()", +"2f2f20c1": "INCH()", +"2f2f4859": "helloworld()", +"2f2f4a63": "buyWorldCupTeamToken(uint256)", +"2f30283e": "testSomething()", +"2f3085d6": "LEGAL_EXPENSES_TOKENS()", +"2f30c6f6": "set(uint256,address)", +"2f30cd5f": "addLockAddress(address,uint256)", +"2f310bad": "redeemToken()", +"2f318039": "isTransferable(address,address,uint256)", +"2f32013d": "Kolidat()", +"2f330041": "transfers(address,uint256[])", +"2f334131": "lastAddYear()", +"2f334652": "teamClaimed()", +"2f335a6a": "getTitulaire_Compte_9()", +"2f3423b8": "grantTokenStartNow(address,uint256,uint256,uint256)", +"2f347e48": "DigitalTicks()", +"2f34adb4": "airdropNum2()", +"2f34c645": "endBounty(address)", +"2f35a71e": "Blockchain()", +"2f366637": "buyTickets(uint256)", +"2f36cacf": "dispute(uint256,uint256[])", +"2f377902": "CandyDropOpen(bool)", +"2f379fc8": "isInStage2()", +"2f381df0": "London()", +"2f38262a": "GetBankBalance()", +"2f384523": "removeFunds(uint256)", +"2f386a8e": "sellingDisable()", +"2f38b55a": "_checkDetail(uint256,uint8)", +"2f39bf80": "LirkToken()", +"2f39f5cd": "PresaleMarket(address)", +"2f3a212e": "test_oneValidEqUint2()", +"2f3a26ee": "TransferTimeSet(uint256)", +"2f3a77fd": "narrowRoundPrizeView(uint256)", +"2f3b24d2": "GenesisManager(address,address,address,address)", +"2f3b5603": "setPayoutLimit(bool)", +"2f3c8bd1": "returnTokenBalance(address,bytes32)", +"2f3d8035": "grantVestedTokens(address,uint256,uint256,uint256)", +"2f3e5408": "takerFeePercent()", +"2f3e9bc5": "canSelfDestruct()", +"2f3f2092": "ARIONTOKEN()", +"2f3f234a": "RLCSentToETH()", +"2f3fecaa": "startOffering()", +"2f3ff501": "getDynamicElementAt(uint256)", +"2f401300": "EPAchain()", +"2f405bb7": "getCoversForPacks(uint256[])", +"2f408990": "testAccessPermissions()", +"2f430e17": "approveTx(uint8)", +"2f434748": "setMintAndBurnOwner(address)", +"2f443315": "get_liquidity_account(address)", +"2f443785": "ComputeAcornCost()", +"2f455d51": "changeRate(uint8)", +"2f45aa21": "getblockRevenuePerTicket(uint256)", +"2f4675cd": "OranguSale(uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256)", +"2f46b3cc": "getMyReport(bytes32,bytes32)", +"2f46ba70": "DAOToken(string,string,uint256)", +"2f4736da": "_canTransferBatch(uint256)", +"2f47571f": "isCapabilityPublic(address,bytes4)", +"2f475c32": "withdrawPart(address,uint256)", +"2f482935": "SFTToken()", +"2f48ab7d": "usdt()", +"2f48c4aa": "setFoundersTokensWallet(address)", +"2f48f151": "addFee()", +"2f4a81df": "howManyOwnersDecide()", +"2f4c0b08": "joinGreatHarmon(string,string)", +"2f4c3a84": "transferPlayer(uint256)", +"2f4cf60f": "MultiSigWalletWithTimeLock(address[],uint256,uint256)", +"2f4e32f5": "FlexiERC20Token()", +"2f4e4c27": "ErrorContract()", +"2f4ea4ee": "release_1()", +"2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", +"2f4f3316": "isInstantiation(address)", +"2f4fda30": "BIG_NUMBER()", +"2f512b6b": "LomeliMultilpleTokens()", +"2f520081": "setPurchaseTimestamp(uint32,uint64)", +"2f53cc96": "CHINESE_EXCHANGE_3()", +"2f53e929": "emitBurn(address,uint256,string)", +"2f540d94": "BONUS_MID()", +"2f54a61e": "setClaimerForTile(uint16,address)", +"2f54bf6e": "isOwner(address)", +"2f553d31": "isCreated(bytes32)", +"2f554288": "listPrycto2()", +"2f554d53": "agreeFromPod()", +"2f5552f5": "KAL6Token()", +"2f55745b": "getPendingCrateForUserByIndex(address,uint256)", +"2f558ba0": "setFinish(uint256)", +"2f55f125": "decreaseAllowanceOrEmtpy(address,uint256)", +"2f56dc5f": "prepareContinuousPurchase()", +"2f570a23": "test(bytes)", +"2f576f20": "doNothing()", +"2f581480": "CandyCoinBigBang()", +"2f5867b3": "changeRates(uint8,uint256)", +"2f58768f": "contractors()", +"2f591a6a": "setRateForTransaction(uint256,address,uint256)", +"2f593404": "payoutCycleInDays()", +"2f597e71": "testLongInput()", +"2f598404": "getCatDetails(bytes5)", +"2f599242": "getEvaluationByStudentID(uint32,uint64)", +"2f5a5c5b": "timegame()", +"2f5bb661": "getNextVestingEntry(address)", +"2f5c3102": "Make_Deposit()", +"2f5c5a08": "setEthealToken(address,address)", +"2f5d3916": "testControllerApproveTriggersEvent()", +"2f5e80c3": "withdrawToken(address,uint16)", +"2f5e8d29": "setDAIRate(uint256,uint256)", +"2f5ebbaa": "marketState(address,uint256)", +"2f5f3b3c": "pointer()", +"2f605106": "getSponsor(uint256,uint256)", +"2f6113dc": "assignICOState(address,uint256,uint256,uint8)", +"2f6174ef": "getSig(bytes,uint8,bytes32,bytes32)", +"2f62a6ff": "fipsRegister(uint256,address,bytes)", +"2f634a90": "getOwner(address,uint256)", +"2f635c6a": "VolumeImbalanceRecorder(address)", +"2f63e2fa": "_incrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"2f640a09": "setConfirmer(address)", +"2f646bd5": "ArmMoneyliFe()", +"2f65142c": "getTransfers()", +"2f653279": "getReceivedTrade(address,uint256)", +"2f658c3f": "Raffle(uint256)", +"2f65be54": "transferBonusEarnings()", +"2f65e086": "NardoTest1()", +"2f661946": "cliffPeriod()", +"2f668c5c": "etherFeeMin()", +"2f66d5a7": "KPOP_ITEM_CONTRACT_ADDRESS()", +"2f6701b0": "withdrawalList(bytes32[],address)", +"2f674ab9": "maybeUpdate()", +"2f677038": "grantUserRole(bytes32,string,address)", +"2f67cf56": "eth_fallback(address,bytes)", +"2f684b83": "addDecimals(uint256,uint256)", +"2f695053": "getCertifierAtIndex(uint256)", +"2f69ca13": "createCounts(bytes32,address)", +"2f69f161": "getGameResultPrice(uint256)", +"2f6a638b": "GetMaxEther()", +"2f6a6e20": "calculateMaxEggG0(uint64)", +"2f6ae467": "transferDocument(bytes,address)", +"2f6b7bbd": "Gubberment()", +"2f6b8143": "wethBalance()", +"2f6b9099": "completeOrder(address,address,address,address,bytes32,uint256)", +"2f6c493c": "unlock(address)", +"2f6dc6b3": "removeBorrowingOfferItem(uint256)", +"2f6e2711": "Int256Oracle(int256)", +"2f6e931f": "changeBurnPausedTime(uint256)", +"2f6f1c68": "speciesSymbol(uint256)", +"2f700fb6": "autoJudge()", +"2f70197c": "_getBalanceFactor(bytes32)", +"2f7146cc": "setLockingTimestampFromTo(uint256,uint256)", +"2f71d022": "updateTokenInfo(string,string)", +"2f723c7f": "RewardHoDLers()", +"2f72d697": "GCOXOWNToken(string,string,uint8,uint256)", +"2f72ffaf": "getEmployerContractsByStatus(address,address,uint256[],uint256[])", +"2f73010a": "ratePerWeiFirstPhase()", +"2f7359a3": "TOKEN_STANDARD_ERC223()", +"2f73ef91": "getFundsWalletBalance()", +"2f743591": "burnFinished()", +"2f7442bb": "transferBounty(address,uint256)", +"2f745c59": "tokenOfOwnerByIndex(address,uint256)", +"2f75a929": "extractRepository(string)", +"2f76c31d": "roundTwoLimit()", +"2f77428e": "collectdustatcontract()", +"2f774e44": "getMsgSigner(bytes32,bytes)", +"2f77688b": "TestingUseCoin(uint256,string,string)", +"2f77dba4": "tokenPerEther()", +"2f781228": "IjasCoin()", +"2f781393": "setDiscountStep(uint256)", +"2f782b32": "weiContributed()", +"2f78bab1": "LockDiv(address,uint256)", +"2f78dc14": "ErrMsg(address,string)", +"2f7907e4": "calculateBestPrecision(uint256,uint256,uint256,uint256)", +"2f7981c2": "getWealthOfUser(address,address)", +"2f798500": "clockAuctionStorage()", +"2f7a163b": "nearestKnownBlockHash()", +"2f7a407b": "exchangeFormula()", +"2f7a7192": "capFiat()", +"2f7b3677": "getMetadataUrl(uint256)", +"2f7cdb0e": "DEV_DECIMALS()", +"2f7dbc9b": "fromInt256(int256)", +"2f7f3ecf": "findNextHour(uint256,bytes)", +"2f7f7f55": "approveFee()", +"2f80324c": "EURO()", +"2f8061d4": "repayment(address,uint256,address)", +"2f815ed1": "transferToContractCustom(address,address,uint256,bytes,string)", +"2f81bc71": "multiMint(address[],uint256[])", +"2f83e16d": "_allocateTokens(address)", +"2f83f781": "fetchSuccessfulSaleProceed()", +"2f851184": "H4DAddress()", +"2f85577f": "changeACAddress(address)", +"2f85f092": "destTokensAdvisors()", +"2f86282e": "CheckGameStart(bool)", +"2f865568": "liquidate(address)", +"2f869d26": "getAssetPoolAddress(address)", +"2f86f2ee": "MAX_OPEN_SOLD()", +"2f8803bb": "addressCOO()", +"2f885f79": "trakToken()", +"2f88ae5f": "setIco3Tokens(uint256)", +"2f899fec": "Pharmatron(uint256)", +"2f8a12fe": "setMsg2(string)", +"2f8abfbe": "roundIt(uint256)", +"2f8b023d": "allowedTransferFrom(address)", +"2f8b0250": "setEndTimeIcoStage1(uint256)", +"2f8bd891": "directMint(address,uint256)", +"2f8c239f": "giveAdvisers(address,uint256)", +"2f8c98c2": "flipMovingSwitchTo(bool)", +"2f8cfe0e": "deleteResources(address[],bytes4[])", +"2f8d2d19": "BurnAssignedFees(address,address,uint256)", +"2f8de810": "tokenPriceInWei()", +"2f8e7133": "lockBBK(uint256)", +"2f8eed98": "adminTransfer(address,uint32)", +"2f8f0c92": "canDeposit(bytes32,address)", +"2f8f175c": "seal(address,address,uint256)", +"2f8f8c0b": "approveCertificate(address)", +"2f8ffce8": "allItemsWrong()", +"2f9021fd": "withdrawToCooperate(address,uint256)", +"2f90daf4": "raisedForEther()", +"2f91822c": "ETHCollector()", +"2f91b591": "RemoveMinter(address)", +"2f923c59": "tokenCapForFirstMainStage()", +"2f926732": "register(bytes32,bytes32)", +"2f92acc5": "test_4_accessRestriction_execute_shouldThrow()", +"2f92b151": "HotLove()", +"2f92f5a0": "query1_fnc(uint256,string,string,uint256)", +"2f94afba": "cao()", +"2f94e335": "_createLambo(uint256,address,uint64)", +"2f95055e": "deleteHiddenPosition(uint32,int64[2],bytes16)", +"2f95b833": "requiredStackDepth()", +"2f969d43": "MAX_UNSOLD_RATIO()", +"2f977b3f": "newTask(string,string,uint256,uint256)", +"2f978ec0": "getProviderInfo(address,uint256)", +"2f98511c": "createHistory(bytes32,address,address)", +"2f991b5a": "hasMemberAccess(address)", +"2f99c6cc": "BENEFICIARY()", +"2f9a7c22": "TransferToWaves(uint256,string)", +"2f9a8bf2": "StreamerContractChanged(address,uint256)", +"2f9b3126": "founderShare()", +"2f9b4096": "removeExternalController(address)", +"2f9c1df6": "createDeposit(address,uint256,uint256)", +"2f9cb9aa": "getClosingTime()", +"2f9ffab9": "Airstayz()", +"2fa00e58": "fipsTransfer(bytes20,address)", +"2fa05208": "minimalGoalReached()", +"2fa06ff1": "exchangesLockEndingAt()", +"2fa07bfc": "_increaseApproval(address,uint256,address)", +"2fa146d8": "officialEmail()", +"2fa1df4f": "RIG()", +"2fa241fc": "playerBook()", +"2fa267fc": "ReadBible(uint16,uint16,uint16,uint16)", +"2fa26aaa": "minimalEthers()", +"2fa30d33": "calcResolve(address,uint256,uint256)", +"2fa3a41e": "testLowestTranch()", +"2fa3e006": "CreatedToken()", +"2fa49c06": "SetTxFee(uint256,uint256)", +"2fa4f694": "setAssessorPool(uint256,address,uint256)", +"2fa553d3": "sendMinerByOwner(address,uint256)", +"2fa5620a": "Mpay(uint256,string,string)", +"2fa61cd8": "generate(address)", +"2fa6512f": "clearWalletPending()", +"2fa69585": "strikeCall()", +"2fa78393": "returnUserBalance(address,address[2],uint256[7],uint8,bytes32[2])", +"2fa7cbfb": "getExecCost(uint256)", +"2fa80164": "AgruCoin()", +"2fa8591e": "TACTICALCRUISER()", +"2fa92dde": "jackpotConditionPercent()", +"2fa94fb3": "teamTrustAccount()", +"2fa975c5": "seatsList(address,uint256)", +"2fa99791": "completeOrderBySafePeriod()", +"2faa2998": "startICO_20_December()", +"2faa3014": "uintFunc(uint256,uint256)", +"2faa5e3c": "changeMerchantAccount(uint256,address)", +"2faa9bbb": "LockClaimed(address,uint256)", +"2faad46f": "addAllowedTransactor(address)", +"2fab662a": "_decreaseMintApprovalAfterMint(address,uint256)", +"2fabc174": "multFracCeiling(uint256,uint256,uint256)", +"2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", +"2fac1d36": "isReadyFor(address)", +"2facc4e8": "depositGovernance(uint256,address)", +"2faccbeb": "changerProprio(address)", +"2fad380d": "burnWithDecimals(uint256,uint256)", +"2fae43dc": "m_ETHPriceLowerBound()", +"2faebb20": "getBettersArrayLength()", +"2faef47a": "AbcToken()", +"2faef4e5": "getGranteesSize()", +"2faf1895": "saveContractEvent(string,string)", +"2faf9a93": "checkUnsold()", +"2fafb11d": "get_profit_by_roll_under(uint256,uint256)", +"2fb07482": "restoreWebGift(address)", +"2fb131d4": "preicoClosed()", +"2fb1746d": "turnOnTradable()", +"2fb1b25f": "sign(uint256)", +"2fb22cfa": "ECO_SYSTEM_STAKE()", +"2fb260f6": "EthertokenDelta(address,address,address,uint256,uint256,uint256)", +"2fb27669": "preSaleComplete()", +"2fb2a061": "rateForDays(uint256)", +"2fb2bcf4": "postTwit(string)", +"2fb2f3dd": "updateFrozenToken(address)", +"2fb556f7": "tokenNeedForBonusLevel0()", +"2fb565e8": "update(uint256,uint256)", +"2fb5b5f6": "setNextSnapshotBalance(address,uint256)", +"2fb61f7d": "dispute(address,bool,uint256)", +"2fb767c5": "failSubtractWhenALessThanB()", +"2fb840f5": "transferFrom(bytes32,bytes32,uint256)", +"2fb88284": "parseRLPHeader(bytes)", +"2fb9d203": "VoteSubmitted(address,bytes8)", +"2fbaba26": "setHash(uint256,string)", +"2fbac05c": "transferManagment1(address)", +"2fbbc9c9": "calcCoinsReceived(uint256)", +"2fbbde2d": "buyDrago()", +"2fbc0bf1": "getSalePrice()", +"2fbc2449": "COLETOKEN()", +"2fbc8353": "ownerCanBurn(bool)", +"2fbcf568": "getCurrentCryptantFragmentPrice()", +"2fbd2134": "_migrateExpiredCrates()", +"2fbd2432": "transferExternalToken(address,address,uint256)", +"2fbebd38": "foo(uint256)", +"2fbf6f73": "TRNDToken()", +"2fbfbc85": "PETTCOIN()", +"2fbfc252": "changeTeamETHAddress(address)", +"2fbfc376": "HRY(uint256,string,string)", +"2fbfe951": "change_min_amount(uint256)", +"2fbfeba9": "getTokenAddressByName(string)", +"2fc0aad3": "isNumericString(string)", +"2fc15517": "kelly()", +"2fc17e40": "TdeStopped(uint256)", +"2fc17f8b": "setCompte_3(string)", +"2fc35948": "SCWhitelist()", +"2fc3f13f": "WindowPeriodClosed(address,uint256)", +"2fc4eea0": "removeName(bytes32)", +"2fc516e3": "COMMON_BUDGET_AMOUNT()", +"2fc52220": "setPOOL_edit_19(string)", +"2fc5a8ec": "Joules()", +"2fc60405": "TANK_TYPE()", +"2fc64ff7": "organizer8()", +"2fc6e8b7": "isEnd()", +"2fc71565": "setMarketplaceAddress(address,address)", +"2fc761a6": "createItem(uint256,string,address,uint256,uint256,uint256,uint256)", +"2fc77d85": "TotalETHGivenToNorthPole()", +"2fc8124d": "setSecondWallet(address)", +"2fc84de8": "XCTToken()", +"2fc8c39d": "TADPOLE_BASE_REQ()", +"2fc94ba6": "getAddressArrayLength(bytes32)", +"2fc9a415": "_emitAccessGiven(address,bytes32)", +"2fca3b0d": "TBECrowdsale()", +"2fca5414": "isTAO(address)", +"2fcaa8fa": "removePresaleHolder(address)", +"2fcb20e9": "changeReserveTeamRecipient(address)", +"2fcb6628": "_stringGas(string,string)", +"2fcd410a": "MiniPoolEdit_2()", +"2fcd6075": "BlocktekUniversity(address)", +"2fcdeba1": "fund_owner()", +"2fce1291": "EcroContract(uint256,uint256,uint256,uint256,uint256)", +"2fce1b7a": "GetSocioFromCuenta(address,address)", +"2fcf84bf": "getEthereumFromPreIco()", +"2fd0f37e": "claimConsolationPrizeLoot(uint256,address)", +"2fd1b320": "myMostRecentAssignedAudit()", +"2fd23817": "MFTU()", +"2fd3bd2e": "passFoundation()", +"2fd3dee8": "testDisputedValidMemoryAccessSequence()", +"2fd3fc9d": "bthFoundationWallet()", +"2fd463e1": "STARTMETADOLLAR()", +"2fd47643": "getRoundIssued()", +"2fd4ec28": "terminateIco()", +"2fd4f2f9": "changePreICODates(uint256,uint256)", +"2fd55265": "depositToken(address)", +"2fd5a13d": "GetClientCategory()", +"2fd5ecda": "b66AdvisorFundDepositAmt()", +"2fd61f92": "unstakeEther(uint256)", +"2fd6d40b": "getBetValueByGamble(uint8)", +"2fd949ca": "terminateContract()", +"2fd95a6f": "createGen0(uint256,uint256,uint16,bool)", +"2fd97c7d": "AllotAward()", +"2fda7166": "stopReceiveTicket()", +"2fdadc21": "sendtoA(uint256)", +"2fdae3c5": "addProposal(string)", +"2fdaf6af": "claim_tokens(address,uint256)", +"2fdb3e6c": "getBalanceETH(address)", +"2fdbb3d4": "cumAcceptedDeposits()", +"2fdc505e": "mine(bytes32)", +"2fdcfbd2": "sendToken(address,address,uint256)", +"2fdd653e": "getFortune(uint256)", +"2fdde1d4": "setUseTimeBasedBonus(bool)", +"2fddf859": "getLockedTokens_(address)", +"2fdeca37": "DEFAULT_TEXT()", +"2fdf15d5": "usernameToAddress(bytes32)", +"2fdf795a": "BOUNTY_TOKENS_PERCENT()", +"2fdfd2ae": "checkSecret()", +"2fe045fa": "initiateClaimDelegated(string,bytes32,uint8,bytes32,bytes32)", +"2fe1c0f8": "tokenTransfer(address,uint256,address[])", +"2fe20e94": "totalRestrictedTokens()", +"2fe29c78": "auctionIdToSeller(uint256)", +"2fe45a8d": "RetailSale(address,address,address,uint256,uint256,uint256,uint256)", +"2fe4b2d9": "submitSteak(address,address,bytes32)", +"2fe55632": "NexxusToken()", +"2fe69430": "TokenERC20(uint256,string,uint8,string)", +"2fe6a47c": "largestPro()", +"2fe6ecb2": "PHASE3_SUPPLY()", +"2fe71915": "request(uint256,address,address,bool)", +"2fe7a0bd": "burritoData(uint256)", +"2fe8ace3": "changeSuperOwnership(address)", +"2fe9541f": "addIssueBounty(string,uint256)", +"2fe97e3a": "approveAndCall(address,uint256,string)", +"2fe9950e": "adminSetDuel(uint256,uint256)", +"2fe99bdc": "insert(string,string,string)", +"2fe9e1a9": "change_address(uint256,address,address)", +"2fe9f821": "startRefunds()", +"2fea0c40": "revealBid(bytes32,uint256,address,address,bytes32,uint256,uint256)", +"2fea6915": "weiReqFund()", +"2fea7b22": "GetIndex(uint256,uint256,uint256)", +"2fea7b81": "getIdentity(address)", +"2fea9624": "DepositorsQty()", +"2feceb46": "extend_end_block(uint256)", +"2fed3c9e": "VoteCast(address,uint16)", +"2fed7da0": "getNextBackUserId()", +"2feda2fa": "POI()", +"2fee26ce": "addApp(address,uint32,uint32,string)", +"2feee782": "YWBToken()", +"2feef2ec": "expectedAmount()", +"2ff077be": "updateBettingOpensTime(bytes32,uint256)", +"2ff284c2": "computeFee(uint256,uint256)", +"2ff2e9dc": "INITIAL_SUPPLY()", +"2ff36e9b": "BTHBCoin()", +"2ff420ef": "CHF_CENT_PER_TOKEN()", +"2ff42757": "approveAndCall(address,address,address,uint256,bytes)", +"2ff4f24e": "createLoveStory(bytes16,bytes32,bytes32,uint256)", +"2ff50b51": "modifyEscrowPrice(uint256,uint256)", +"2ff59dec": "getEthartRevenueReward()", +"2ff59ee7": "miningIncentiveWallet()", +"2ff5e00c": "setAttaccContract(address)", +"2ff5ec3f": "armyTanksCount(uint256)", +"2ff6c55f": "DEVELOPMENT_FUND_LOCK_TIMESPAN()", +"2ff6fe76": "priceToken()", +"2ff76163": "getAdres(uint16)", +"2ff7a81f": "getAvgReportingGasPrice()", +"2ff92323": "oraclize_query(uint256,string,string[4])", +"2ff98d53": "getStageClosingTime(uint256)", +"2ff9b03a": "hackDecisive(address,uint256)", +"2ff9f017": "exchangeNominsForHavvensAtRate(uint256,uint256)", +"2ffa815b": "changeHouse_and_Owner_Addresses(address,address)", +"2ffb054e": "setMarketplaceManager(address)", +"2ffb8631": "getReleaseLockfileURI(bytes32)", +"2ffb9e64": "updateGasForXaurData(uint256,uint256)", +"2ffbf988": "packedBytes(uint256)", +"2ffc7b7e": "firstDiscountPrice()", +"2ffda1e0": "setBlackflag(uint256,bool)", +"2ffda952": "walletWithdrawTokens(uint256)", +"2ffdaa44": "BDToken()", +"2fff7bb3": "assignMultirequest(uint256)", +"2fffaa00": "Kingdom()", +"2fffb3f9": "getLockFundsReleaseTime(address)", +"2fffe0dd": "rocketArrivalTime(uint256)", +"2fffee92": "setContingencyFunds(address)", +"30007ed3": "tgeStartBlock()", +"30008b48": "pullDividendPayment(uint256)", +"30012940": "checkTeamFreezePeriodOver(address,address)", +"300182b8": "sale1(address,uint256)", +"30021bae": "SubDiv(uint256)", +"300240d6": "MAX_REGULAR()", +"300309f0": "setUserPaybackRate(uint256)", +"30043d4e": "AddedToHolder(address,uint256,uint256)", +"3004ea88": "EOSDRAM()", +"30067bc8": "setRegistrationOpen(bool)", +"3006f513": "coinSendDifferentValue(address[],uint256[])", +"30073514": "_allocation(address,address,address,address,address)", +"30074c6c": "publicSaleRaised()", +"30092ded": "changeVoteWeight(address,int256)", +"30093319": "_setRevealsCount(uint256,uint256)", +"3009a265": "isReg(address)", +"3009bc01": "claimFreeDragon()", +"300a1a7f": "mixWithStringFunc(int256,string,bool,string)", +"300a246f": "can_get(address,bytes12)", +"300a411e": "getRecording(address,uint256)", +"300abd61": "m_numMembers()", +"300ac0e9": "priceTimeToExpiration()", +"300b59da": "initTokens(address[],uint256[],bool,bool)", +"300ba0ec": "prevTweetTime()", +"300ba8ab": "_decode()", +"300c229f": "changeMaxDepositAmount(uint256)", +"300c3091": "setMigrationContractAddress(address)", +"300c7063": "SbToken()", +"300cc37a": "paySomeRewards(uint32,uint32)", +"300d55a5": "transferAdvisor1Tokens(address,uint256)", +"300d9e90": "icoOver3()", +"300e4b3c": "setminprice(uint256)", +"300e7b2d": "firstAuctionsExtendedDuration()", +"301058c9": "DURATION_PRESALE()", +"30106b17": "calckeys(uint256)", +"3010b5cd": "clearWizzType(uint256[2])", +"3010f39d": "playersToBetIndices(address,uint256)", +"3011b4c2": "CreateARTL(address,uint256)", +"30124349": "balanceLoc(address)", +"301249eb": "setPercentWeiMC(uint256)", +"3013ad89": "RangeToken()", +"3013ce29": "paymentToken()", +"30140053": "burnIcoTokens()", +"3015394c": "cancelRequest(uint256)", +"30155f5e": "setzAddress(address)", +"3015a521": "totalSignatures()", +"3016a439": "getImageBlurredAt(uint256)", +"3016e108": "removeGameMachine(address)", +"3017fe24": "callAPIVersion()", +"3018205f": "getController()", +"30183a2c": "GemstoneToken()", +"30184635": "getMinCap(address)", +"3018579e": "TokenSampleG()", +"30188fdf": "BFreeContract()", +"3018c90a": "getSubOrderStatus(uint256,address)", +"301997ae": "fundEscrow(address,uint256,uint256,uint256)", +"301a9b09": "startPhase(uint256,uint256,uint256,uint256)", +"301b7a86": "inquire_totdomains_amount()", +"301b9307": "getABsort()", +"301c42d7": "issueRateDecDuringICO()", +"301cbcb3": "STARTING_RICE()", +"301cf6e7": "payoutsPaused()", +"301d5209": "delegatecall_selfdestruct(address)", +"301d5eda": "change_start_block(uint256)", +"301dd027": "TIER_2_CAP()", +"301df7ab": "_create(address,uint256)", +"301ea971": "lockReleaseDate1Year()", +"301ecf82": "_createEtherBro(uint16,address)", +"301f0464": "ratePerEthPhase3()", +"301f2dac": "getRegionPrice(uint16)", +"301f93e0": "calculateEthereum(uint256)", +"301fbdef": "totalWeiToBeDistributed()", +"301fdb54": "getPayouts(int32,int32)", +"30203994": "stage2_price()", +"3020a18e": "setSaleEnabled(bool)", +"3020ea8a": "retrieveEarnings()", +"3020fc3b": "sendIPFS(address,address,string)", +"302155e5": "CHAToken()", +"30223c12": "del_product(uint256)", +"30226121": "CCXCrowdsale(address,address)", +"30228a12": "YouAreRichToken()", +"30230796": "setTradeABIHash(bytes32)", +"30231ea4": "canRenounce()", +"30232cb0": "buySeele(address)", +"3023641d": "removeTokenGrant(address)", +"30238687": "ALLOC_NEW_USERS()", +"3023d0c4": "Ethstick()", +"302579c6": "getWarlordChestPrice()", +"30257bf7": "getByAddress(address)", +"3026a128": "LOG_InvestorExit(address,uint256)", +"3026aedf": "getTopBidders()", +"30288f03": "setFile(string,string,uint256,string)", +"30289c61": "getDetails(address)", +"3029300f": "nextSellTime(address)", +"3029948a": "phase_2_bonus()", +"3029ba69": "withdrawBountyTokens(address,uint256)", +"302a4100": "decayedTransferFrom(address,address,uint256,address)", +"302a7ff3": "getDAdmin(bytes32)", +"302bcc57": "playerCount()", +"302bda24": "getSell(uint256,address,address)", +"302c46ba": "ReleaseTokenForTeamAdvisersPartners()", +"302cc9c3": "setroommoney(uint256)", +"302d350e": "firstChainedCallback(uint256)", +"302dfe97": "commissionPer()", +"302eb389": "transferFund()", +"302f3915": "LockFunds(address,uint256)", +"302f4303": "setRandomGenerateMethod(uint8)", +"30311898": "Account(address)", +"3032236f": "depositAndVest(address,uint256,uint256,uint256,uint256)", +"30322b12": "weiForMcr()", +"30323542": "_delOwner(address)", +"30324370": "fetchOrderByIdWithPayer(string)", +"30324f55": "DutchAuctionToBuy(address,address,address)", +"30326c17": "proposal(uint256)", +"3032f951": "advisorsBalanceMap(address)", +"30332aea": "P2()", +"3033f4d3": "pastOneHour()", +"30347537": "STARTING_CAT()", +"30366d5f": "getEventsCount()", +"3036d769": "minGasPriceGwei()", +"3037408d": "balanceOfAtTime(address,uint256)", +"3037801e": "recordNum()", +"3037cea3": "knownRoleNames(bytes32,bytes32)", +"3037e694": "disburseDividends(uint256)", +"30381f5f": "getHistoricalDelegation(uint64)", +"30389c45": "round1BonusSteps()", +"3038e357": "returnTokensToContractFrom(address)", +"3039b1ce": "changeETHLockingAddr(address)", +"3039e6f9": "CHARITY()", +"303a2372": "getDSP(address)", +"303a36e2": "getRow(uint256)", +"303a88b4": "convertRate(address,bytes32,bytes,uint256)", +"303b069f": "enableEmergencyWithdrawals()", +"303b5d3b": "toInt(string)", +"303b8144": "MobilinkToken()", +"303b9379": "SetLogFile(address)", +"303bef74": "deleteAllMessages(address)", +"303c2569": "payRakeInternal(address,uint256)", +"303c7d69": "allocatePrivateSaleTokens(uint256,uint256,uint256,address[],uint256[])", +"303d0870": "limitForChecklistId(uint8)", +"303e74df": "descriptor()", +"303ed73a": "setSkills(address,uint256,uint256[])", +"303ee989": "isPendingDeregistration(address)", +"303f5f51": "LEGEND()", +"303ff1d8": "YDTC()", +"30406423": "payJackpot()", +"30411a27": "testAddGains()", +"3041ba2a": "setForecasting(address)", +"3042b17d": "setUmkaAddress(string)", +"304318d3": "editDuration(uint256)", +"3043cbc5": "newTankType(uint256,uint256,uint32,uint32,uint32,uint32)", +"30443062": "penultimateFeePeriodStartTime()", +"3045a299": "Society(string,address)", +"3045aaf3": "Symbol()", +"3046868d": "AccountStructs(address)", +"3046fe26": "XulToken()", +"30473c2f": "getSelectedName()", +"30490e91": "processProposal(bytes32)", +"304a45c2": "getvalues()", +"304a87b7": "setOpenGroup(uint256)", +"304ab76a": "DebtTokenCreated(address,address,uint256)", +"304bac6f": "func_0A6E()", +"304c69ed": "_packItemData(address,uint256)", +"304cb3d8": "setTrusted(address,address,bool)", +"304d50b2": "addStar(address,uint8,uint8,uint16,uint8,uint8,uint8,uint256)", +"304d95a6": "RefundPoll(address,address,uint256,uint256,uint256,bool)", +"304dd754": "IsActive()", +"304ddebe": "eventSetWinner(uint256,address,uint256)", +"304de747": "MARKET_CAP_PER_ROUND()", +"304dfd33": "_onRandomFailed(bytes32)", +"304e48bb": "LogFundingReceived(address,uint256,uint256)", +"304e6ade": "setContenthash(bytes32,bytes)", +"304f34a0": "splitBid(uint256)", +"304f5027": "myUserWallet(address)", +"304f8af4": "sendBountyTokens()", +"30500684": "addEarlyBird(address,uint256)", +"3050226a": "addTransferableAddresses(address[])", +"30507451": "receiveBonus()", +"305075db": "NormalizeRanks()", +"305094ab": "ispackagesaleClosed()", +"30509bca": "claimBalance()", +"3050caa4": "calculateStake(bytes8,bytes5)", +"3050f769": "transactionsClaimed(uint256)", +"3052b75e": "changeEndTime(uint256)", +"3053aedc": "capDoublingTimestamp()", +"3054c79a": "transform()", +"3055e5e8": "JEMBUT()", +"30573dfa": "auditGuess(uint256,string,uint8,bytes,uint256)", +"305788fa": "newTransferProposal(address,string)", +"3057d5e0": "residualAmountPromille()", +"305876a7": "isRoundOver()", +"305939b0": "setReceiptAsset(address,address)", +"305997c8": "addIsSafe(uint256,uint256)", +"30599ba7": "SOSBOTTOM()", +"30599fc5": "recoverTokens(uint256)", +"3059ac30": "Escrow(address,address)", +"305a67a8": "cancelListing(uint256)", +"305a762a": "getTicketsCountByBuyer(uint256,address)", +"305a99c1": "Kemonocoin()", +"305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", +"305bcfab": "TrustlessTransaction_Protection_Seconds()", +"305d6d31": "stopFundRaising()", +"305e3552": "eggPrice()", +"305eae79": "updateBusinessWallet(address,address)", +"305ec69e": "finish(address)", +"305ed015": "giveReward(address)", +"305f17d5": "setCrydrController(address)", +"305fcef3": "decide()", +"306023a3": "allocateTeamTokens()", +"3061d568": "GOC()", +"3061e0ef": "changeRecovery(address,address,address)", +"3062cd8a": "purchaseETH()", +"30630699": "testDisputedWriteDifferentValueInState()", +"306387a4": "dealStatus(uint256)", +"3064061b": "checkNotSmartContract(address)", +"3064448e": "ASCCToken()", +"30659e74": "moneyBack()", +"3065a575": "setAElfDevMultisig(address)", +"3065d22c": "setVariationProbably(uint256)", +"30677b83": "multiplierFactor()", +"306781c1": "getCurrentPayoutBlock()", +"3068bffd": "grantIssuer(address)", +"30690468": "atleastZero(int256)", +"306a2ea8": "disapproveUser(address,bytes32)", +"306a401d": "delMarketMakerAddress(address,address)", +"306a8589": "p_update_mNewPlotTaxPercent(uint256)", +"306ab1ba": "forwardFundsAmount(uint256)", +"306ae57b": "standAndRebet(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,uint256,bytes32,bytes32,bytes32)", +"306b031d": "getGenerationEndAt(uint256)", +"306b0d84": "SetSharedStorage(address,address)", +"306b4dea": "addQuantityListItem(bool,address,address,uint256,uint256)", +"306c4ebe": "getCurrentTrancheVolume(uint256)", +"306c7290": "eth_balance()", +"306d4ed9": "userHasWithdrawn(address)", +"306df22d": "GPSDestination(int256,int256,uint256)", +"306e3e99": "COMPANY_SHARE()", +"3070352b": "buyAMI(string)", +"3070c38b": "checkTermination()", +"30710f01": "Crack(address,uint256,uint256)", +"30725c46": "_ownerOfPopInAnyPlatform(uint256)", +"3072cf60": "_initialized()", +"3073530b": "release_2()", +"3073c916": "cancelEscrowByProvider(uint256)", +"3073ef42": "calculateOperationFee(uint32)", +"307482cf": "POINT_ROOTNODE_ROLE()", +"3074cca7": "change_data(bytes32)", +"3074f556": "Compra_Ticket(uint256,uint256)", +"307540f6": "keys()", +"30756ab6": "MyTestToken()", +"3075f552": "getMax()", +"30762e2e": "allowManuallyBurnTokens()", +"30765517": "fechAllSumNumForCandidateByStage(uint256)", +"3076dc42": "intervalDuration()", +"3076e56a": "tankOut()", +"3077fdf1": "startNewICORound(uint256,uint256)", +"3078db6c": "transferAuthority(address)", +"307970b2": "addEntry(uint8)", +"3079ddc3": "isCanBuy()", +"307a1f46": "paramsValid()", +"307c6f8e": "job(string,string,uint256,uint256)", +"307c7a0d": "withdrawExcessBalance(address,address)", +"307ca045": "get_amount_minus_fee(uint256)", +"307d2a90": "priceEUR()", +"307e38ca": "isICAP(address)", +"307e8614": "returnUserBalance(address[2],bytes32)", +"307edff8": "endTokenSale()", +"307f35e6": "AobcToken()", +"307f6244": "changeMedia(address)", +"307f6b12": "findWinners(uint256)", +"30807e8e": "updateCSV(string,uint256)", +"3080b9c7": "SocialBlock()", +"30818189": "bonus1()", +"3082538f": "decimalMultiplier()", +"30835cc5": "BDCC()", +"3083a4f9": "withdraw_2()", +"3083ab1f": "closeContest(uint32)", +"30840c31": "testControlCreateWithParentForeignNotInUse()", +"3084e3ac": "nDEX(address,address,address,address,uint256,uint256,uint256)", +"30852db8": "newGame(uint256,uint256,uint256)", +"30859963": "getAttrVal(uint64,uint8)", +"3085c91d": "SellOrderCanceled(uint32,address)", +"30865362": "withdrawRemainingRewards()", +"308655b1": "A2AToken()", +"3086719a": "_setTokenUri(uint256,string)", +"3087110a": "donors()", +"30880441": "borrowFor(address,address,uint256)", +"308879bf": "setVoteCost(uint256)", +"308a9717": "_distribute(address)", +"308af165": "lastProcessedDay()", +"308b2fdc": "getProposalValueByIndex(uint256)", +"308b7fea": "rakeToken()", +"308c0065": "currentPrice(uint32)", +"308d6613": "getSignData(uint256,uint8)", +"308dc720": "DissolveBusiness()", +"308dccac": "EtherMinerals()", +"308e1b2f": "ltcId()", +"308e25ac": "InvestorsToken()", +"308e63f4": "TigerToken(uint256,string,string)", +"308f505b": "sellSupply()", +"308fb3ee": "GrapeToken()", +"3090bef7": "releaseLockedBalance(address)", +"3091bc8b": "acceptAndPay(bytes32,uint256[],uint256[],uint256)", +"30920505": "createInvestContract(address,uint256,uint256)", +"3092afd5": "removeMinter(address)", +"3092e73f": "getNoOfTokensTransfer(uint32,uint256)", +"30935e4b": "LogOrderCancel(address,uint256,uint256)", +"309424fe": "get_all_names()", +"30943fcf": "ownerCounter()", +"30945443": "update(address,string,string)", +"309593ee": "emergencyThaw()", +"30962d4d": "KyberContirbutorWhitelist()", +"309652ec": "getPoolMoney()", +"3097324c": "saleShare()", +"30977ab8": "recordMove(address,address)", +"3097f94c": "blok()", +"30982855": "setPublisherStake(bytes32,uint256)", +"30986dea": "timeToFinishPresale()", +"3098d33a": "payoutPartners()", +"309945ba": "collectedFees(uint256)", +"30996897": "placeBet(address)", +"309ab7e1": "getIsParticipate(address,uint256)", +"309b40b2": "liquidityStatus()", +"309b7ed3": "deleteParent(uint256)", +"309ba120": "upgradeClass(uint256)", +"309bdcf7": "createContract(uint256,string,string)", +"309c1769": "ProspectorsObligationToken()", +"309c315d": "calcTokenPriceFactor()", +"309c3ee2": "_grandPVPWinnerReward(uint256)", +"309d094b": "RELEASE_DATE()", +"309d6669": "addVerification(address,string,string)", +"309d8210": "ICOPart()", +"309d9358": "XENTToken()", +"309e078a": "destTokensBounties()", +"309e21a9": "rewardPromille()", +"309e36ef": "getNumberOfAccounts()", +"309e6005": "batchTransferEther(address[],uint256)", +"309e63e5": "SimpleConstructorInt(uint256,uint256)", +"309f7421": "buildTeamMapping(string,string,string)", +"309f955a": "updateTopicDescription(bytes15,bytes32)", +"309fcbdd": "MakeTradable(bool)", +"30a0b231": "oraclize_query(uint256,string,bytes[])", +"30a1d746": "shareholdersWalletAddress()", +"30a24abd": "create(bytes4,bytes)", +"30a3160d": "approveInternal()", +"30a35ce2": "getPOOL_edit_20()", +"30a39d5d": "preCoinSentToEther()", +"30a3ce81": "getNumChips()", +"30a55316": "smsCertifier()", +"30a65fdf": "set_buyPriceEth(uint256)", +"30a69955": "setFeeInfo(string)", +"30a69b53": "PlutocracyAchieved(string,string)", +"30a7351c": "removeFromApprovedAddress(address)", +"30a7a11c": "setRateEarlyStage1(uint256)", +"30a8b2c9": "NUM_TEAMS()", +"30a95aa7": "payService(address,uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"30a95e67": "withdraw_eth(uint256)", +"30a9ef5b": "checkTokBalance(address)", +"30aa311a": "QMQCoin()", +"30aa81c6": "getPayer()", +"30aacc0a": "setProjectAgent(address)", +"30ab0a16": "setInstructor(address,address,string,string)", +"30abac7b": "randomNext(uint256,uint256)", +"30abf433": "signBBODocument(bytes32,bytes)", +"30ac3052": "sendText(string,string)", +"30ac324b": "apply(uint256,uint256)", +"30acd249": "oneEtherInKicks()", +"30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", +"30acedf1": "ownerFreezeTokens()", +"30ad12a6": "initializeFundraiserToken(address)", +"30adce0e": "etherReceived()", +"30ae8d0c": "Xinfin()", +"30af41b3": "getValidatorByIndex(uint256)", +"30b0e001": "airdropTokenDistribution(address,uint256)", +"30b0faab": "changeSettings(uint256,address,uint256)", +"30b2b8aa": "mintPresaleTokens(address,uint256)", +"30b3409e": "getInitialDeposit()", +"30b39a62": "withdraw(string,uint256)", +"30b3a90c": "_setCurrentPassportLogic(string)", +"30b4429e": "submitBlock(uint256,bytes)", +"30b5198f": "blockNumberUpdated()", +"30b57b1e": "player(bytes32)", +"30b66475": "VerifSignature(bytes,bytes)", +"30b66cee": "claimProxy()", +"30b69426": "calculate_eligible_token_balance(address,uint256)", +"30b7222f": "mintcoin()", +"30b751d9": "rivetzRelease(uint256)", +"30b823f7": "userGrowthAddress()", +"30b8f85d": "HSB()", +"30b9af98": "withdrawFunding()", +"30ba040a": "TOKENOMICX()", +"30ba2d4d": "eidooSigner()", +"30bb7499": "_batchActivenessUpgrade(uint256[],uint256[])", +"30bbb55e": "instructions()", +"30bd2ba9": "MassivelyMultiPlayerOnlineVideoGames()", +"30bd3eeb": "tokenRewards(address)", +"30bd60ef": "marginCall(bytes32,uint256)", +"30bdd344": "getPossibleWinAmount(uint256,uint256)", +"30bdf202": "RobinHood()", +"30be5990": "updateThirdChangeBlock(uint256)", +"30bf00cd": "mintFresh(address,uint256,int256)", +"30bf2d3e": "whaleBalance()", +"30bfeded": "EffectAdded(uint256,uint256[])", +"30c0f8d6": "scheduleTransaction(address,bytes)", +"30c2927d": "concludeUFT()", +"30c2fb04": "UserAuthManager(address)", +"30c308d8": "testInsertCase()", +"30c30a50": "authorizeMintFulfiller(address)", +"30c33da7": "_addPresale(uint256,uint256)", +"30c3eaa8": "grant()", +"30c47f77": "getEtherCoinPrice()", +"30c5375e": "ConstructHuntStart()", +"30c5a614": "ethereumToTokens_(uint256,uint256)", +"30c74e04": "tokenWithdraw()", +"30c8a488": "ERCToken()", +"30c8f372": "getTrustedShopCount()", +"30c93307": "GetPermissionIdx(uint256)", +"30c97068": "plockFlag()", +"30ca0a53": "DELEGATION_HASH_EIP712()", +"30cb14d2": "pop(bool)", +"30cc1d18": "airDropShadowTag()", +"30cc248e": "increaseProfit()", +"30ccc891": "testTransferHandlesNegativeAmountRequest()", +"30ccebb5": "getStatus(address)", +"30cd90b8": "transferToAddress(address,address,uint256,bytes)", +"30cd9ac6": "TokenAuctionCompleted(uint256,address,address,uint256)", +"30cdc195": "xclusivecoinSupply()", +"30cdcc63": "MAX_ISSUED_FROM_OTHER_CURRENCIES()", +"30cddc83": "checkIfCustodiesServedETH(address[])", +"30ce7b5d": "generateWinNumber()", +"30ce8bd5": "_rightChild(uint8)", +"30ced655": "EventRandomLedgerRevealed(address,uint256,uint256,uint256,address)", +"30cf7af6": "FreeZombieCount()", +"30cfac6c": "assignTo(uint256,address,uint256)", +"30d02d83": "batchWithdraw(uint256,uint256)", +"30d07d61": "getParticipantName(uint256,uint256)", +"30d12640": "disableWithdrawal()", +"30d15b0a": "lockInQuarterFinalPrize()", +"30d1c191": "MetaPoc(address)", +"30d2219b": "add(string,string,string,string,string,bytes32)", +"30d2474f": "buy1ticket()", +"30d281e0": "getChannelInfo()", +"30d323ae": "NHC()", +"30d4b967": "Octogram()", +"30d4d8d0": "_verifyHistoryInputOrRevert(bytes32,bytes32,bytes32,uint256,address)", +"30d500bf": "CFO()", +"30d636a0": "SmartVerifying()", +"30d65b72": "getPaymentsFor(address)", +"30d68214": "transactionReplay(address,uint256)", +"30d86516": "verifyTransferSignature(bytes32,address,uint8,bytes32,bytes32)", +"30d88a9e": "DISPLAY_VIDEO()", +"30d9161d": "cancelCreatorAuction(uint40)", +"30da4684": "buyPriceFinal()", +"30db7654": "activeBuy()", +"30dbb4e4": "isUnlocked(address,uint256)", +"30dce923": "getDeactivatedList(address)", +"30dcf0e8": "calculatedTokens(address,uint256)", +"30dd6a42": "totalSoldToken()", +"30dd9ee4": "confirmMinerQuest(address)", +"30de7e88": "FINXToken()", +"30df2c47": "currentSeller()", +"30df7727": "canRemove()", +"30dfc62f": "fundValueCount()", +"30dfe1da": "getTransactionCount(bool)", +"30e0789e": "_transfer(address,address,uint256)", +"30e07be0": "getMaxAmountToWager(uint256)", +"30e08a6e": "adjustMinter(address,bool,int256)", +"30e0f7e9": "setToppingUpBankroll(bool)", +"30e1e4e5": "freeze(address,uint256,uint256)", +"30e1f16f": "claimDividendAll()", +"30e26cb8": "disableBundling()", +"30e290e4": "Twitter()", +"30e34360": "setValue(bytes32,bytes15)", +"30e44278": "howVotesHasDispute(uint256)", +"30e45c14": "preSaleHasEnded()", +"30e4f9aa": "contractbalance()", +"30e57b67": "getNumberOfCrySolObjects()", +"30e5be52": "Prototype()", +"30e656d8": "addAnimal(uint256,bytes32,uint8)", +"30e6570b": "BucketSell(bytes32,uint256,address,uint256)", +"30e664f6": "getBuy()", +"30e6c333": "producedGoldCaps()", +"30e6d8d3": "addInitialInvestor(address)", +"30e7002c": "POCN()", +"30e76dae": "getContractEtherBalance()", +"30e77c75": "EthTranchePricing(uint256[])", +"30e804d1": "withdrawFromProject(address,address,uint256)", +"30e80864": "setTrustedAddr(address)", +"30e82803": "balanceOfByPartition(bytes32,address)", +"30e8b963": "reserveMember()", +"30e9c341": "updateTimeLock(uint256)", +"30e9f6ed": "STATUS_NO_DEAL()", +"30ea55a0": "updateEventStartsTime(bytes32,uint256)", +"30eaa9b5": "priceIncrease_20_February()", +"30eb4934": "_validateRefundTimestamp(uint256)", +"30eb4ba8": "setHoldDuration(uint256)", +"30ebf88c": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint256)", +"30ec0e2b": "setHolder(address,address,address)", +"30ec98a1": "OKFToken()", +"30ece116": "setOpeningTime()", +"30ed54ed": "setVestingToken(address,address)", +"30ee776c": "StopTransferToken()", +"30ef3d56": "takeNumber(uint256)", +"30efac4e": "changeCardPrice(uint256)", +"30efb8d3": "doUnpause()", +"30f1154f": "updateNodeIPFSHash(bytes)", +"30f12642": "createContractPreciousForEdition(address,uint256,string)", +"30f1fe82": "checkLength(string)", +"30f20847": "CandyBox()", +"30f24455": "_getProductShopInfo(uint256)", +"30f3f0db": "increase(uint256)", +"30f46b70": "power(uint8,uint8,uint8,uint8[176])", +"30f4babb": "Fetch_User_Profile(uint32)", +"30f4f396": "UTBTokenTest(uint256,string,string)", +"30f4f4bb": "getMarketData(bytes32)", +"30f56d21": "RoundEndTime()", +"30f59c1b": "lastTicketBought(uint256)", +"30f6716f": "HFCoin()", +"30f6eb16": "mintedForAccountInBlock(address,uint256)", +"30f75890": "MilestonesEntity()", +"30f7cf80": "stox()", +"30f7f148": "ONEPAY()", +"30f857f3": "addPrivateSaleWithMonthlyLockup(address,uint256[],uint256)", +"30fa27cc": "_BTC()", +"30fa9ef3": "SantimentWhiteList()", +"30faa3e9": "compareHands(uint8,uint8)", +"30fb641b": "PurchaseFailed(address,uint256,uint8)", +"30fb6bfb": "setMessage(uint16,string)", +"30fb7541": "_createSkull(uint256,uint256,uint256,uint256,address)", +"30fba22f": "changeManipulatorAddress(address,bool)", +"30fbe411": "endIco3()", +"30fd300f": "registerBytes32(address,bytes32)", +"30fd7696": "createLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", +"30fe86b7": "declarePulicOfferingPlan(uint256,uint256)", +"30fee9b1": "setICOtime(uint256,uint256)", +"30ff2ad5": "needVerifiedAccount(bool)", +"31002556": "getAmountToGive(bytes,uint256)", +"310092b9": "REFUND_TIME()", +"3100ef7b": "Fulcrum()", +"3101170b": "addPixelPayable(uint256,uint256,uint256,uint256,uint256)", +"31014853": "buySWL()", +"3101ab7f": "confirmEjectment()", +"3102b21a": "setAllocation(address[],uint256[])", +"3102be4c": "ownerHistoryOf(uint256)", +"3102deb7": "SetPlayerBetInfo(uint8,address,uint256,uint8)", +"3103fa26": "firePaidProposalEvent(address,uint256)", +"310441fa": "payees(address)", +"31047973": "lightpool()", +"3104b21a": "unApprove(address,uint256)", +"3106aa80": "getLLV_edit_21()", +"3106e50e": "joinBet()", +"3106fea0": "voteOnProposal(uint256,bool,uint256)", +"31076417": "setTokenUSDRate(uint256)", +"310774a3": "setContractPreICO(address,address)", +"310781e7": "LogCertificationDbRegistered(address)", +"310815ee": "setDesignatedReporterShowed(bool)", +"31085c5f": "getAddressByNickname(string)", +"31088032": "MTOKEN()", +"310883a8": "player2Timestamp()", +"3108bd87": "voteNoLockBatch(address[],uint256[])", +"3108f0d7": "isNotZero(uint256,string)", +"310b065b": "cerotest()", +"310bc5fc": "newAsset(uint256,uint256,uint256,bytes32,bytes32,uint256,bytes32)", +"310bd74b": "reset(uint256)", +"310c0c1e": "minRollUnder()", +"310c87cc": "NFTAddress()", +"310ce4e2": "execute(bytes32,address,int256)", +"310d3f69": "token_description()", +"310e5ce7": "isBreedingMarket()", +"310ec4a7": "setAllowance(address,uint256)", +"310efb48": "setResult(uint256,uint256)", +"310eff5d": "pageByGroup(string,uint256)", +"310f4cdd": "mint(uint256,string,uint256,uint256,address)", +"3110235a": "maxInvest()", +"311028af": "initialTotalSupply()", +"311104f3": "getMintRequestsLength()", +"31119b4d": "changeDeveloper(address)", +"3111dcfd": "_nextAmount(uint8,uint256,uint256,uint256,uint256,uint256)", +"311277c1": "PHASE3_RATE()", +"3112fb6e": "BackToLife()", +"311325bd": "totalPledgedFees()", +"31134651": "donateToLovers(bytes32)", +"311385f4": "oraclize_query(string,bytes[3],uint256)", +"3113b8fa": "initDebris(bytes32,uint256,uint8)", +"311515a3": "disableInterface(string)", +"311551ad": "_getCalculationStartDate(bytes32)", +"311551d7": "MasternodeMinedTokens(address,uint256)", +"31159923": "isAllocatedICO()", +"3115b4c4": "bulkStoreHeader(bytes,uint256)", +"3115c3ee": "exploreEMONTFee()", +"3115d2ce": "ZitKOIN()", +"31170c0e": "Joyso(address,address)", +"3117d6bb": "request(bytes32,string,string)", +"31184dc3": "get2(uint256)", +"3118879a": "removeSurvey(bytes32)", +"3118dc71": "aSites(uint256)", +"3119255c": "setMinBetPerTx(uint256)", +"31198d19": "transferEthFromContract(address,uint256)", +"311a6c56": "rule(uint256,uint256)", +"311a985f": "testNotEnoughMemory()", +"311b2e98": "totalBetsMade()", +"311bcda6": "stage1Sale()", +"311c2644": "ironTokensaleRunning()", +"311d5a2a": "recordBalance(address)", +"311fb64f": "countInvestorsRefunded()", +"3120cefa": "NickoinToken()", +"31212a6b": "unicornRanchAddress()", +"3121369d": "validateRequiredStackDepth(uint256)", +"3121c7c0": "buyMultiplier()", +"3121db1c": "setName(address,string)", +"312212c1": "stoptransfer()", +"312220bc": "payoutQuickBonus(address)", +"312253ae": "newOption(uint256,uint256,bytes32,bytes32)", +"31225ad1": "icoThreshold3()", +"31226f71": "writeMerchandises(uint8,string)", +"3123016d": "calcCostLevel(int256,int256[],uint256)", +"31230e23": "createWithParent(bytes32,bytes32,bytes32)", +"31232cd3": "pre_amount_stages(uint256)", +"312386b7": "techDevelopmentEthWallet()", +"3123bd9d": "memberProfitShare()", +"3124167b": "_getTokenAmount(uint256,bool,address,address)", +"312452b3": "mLoadAndReturn(uint256)", +"3125443d": "secondChangeBlock()", +"31277306": "buyByEth(address,uint256)", +"3128012a": "logEthDeposit(address,address,uint256)", +"31288397": "payWithoutChecksum(uint128,address)", +"3128d1be": "buyName(string)", +"312975a6": "setReservedHolder(address,address,address)", +"312983dc": "LogForkAnnounced(string,string,uint256)", +"3129be35": "calculateCoinsPerWeiAndUpdateAvailableIcoCoins(uint256)", +"3129e6d4": "RATE_SALESTAGE3()", +"3129e773": "getItem(uint256)", +"312ad4b9": "banThreshold()", +"312c0684": "Organicco()", +"312cba69": "EternalStorageProxyForPayinMultisender(address)", +"312dae8a": "changeCrowdsaleClosingTime(uint256)", +"312defb4": "INITIAL_ENDTIME()", +"312df321": "p_update_mRefPercent(uint256)", +"312f8b19": "blockedTime(uint256)", +"31302244": "approveAsInvestor(address,int256)", +"3130e89d": "EtherShot()", +"313138e1": "tuneLambo(uint256,uint256)", +"313186e7": "_calculateTotalLockedBalance(address)", +"3131d8de": "etherflipContract()", +"31324b0a": "IOXOwned()", +"3132605d": "DinoToken(uint256)", +"313354dc": "maxSellable()", +"3133f2a7": "outstandingBalance()", +"31347482": "CSELToken(uint256,string,string)", +"3134e2e1": "_setCollectRoundLength(uint256)", +"3134e9be": "verifyLinkPrivateKey(address,address,address,address,uint8,bytes32,bytes32)", +"3134f4f1": "SpecialRatedCrowdsale()", +"3135471d": "privateEtherFunded()", +"3135ed16": "race_start_block()", +"313602d4": "claimRemainingTokens()", +"31361399": "setICODate(uint256)", +"31363c86": "esteem(bytes32,string,address)", +"3136fa86": "NeuroProtect()", +"3136fbb8": "totalBaseLareSoldInMainSale()", +"31375242": "ownerSetTreasury(address)", +"31378811": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[])", +"3137f3d4": "FhnwToken()", +"31380c89": "TokenSale()", +"3138d328": "gameMining(address,uint256)", +"3138d8d5": "Bid(uint256,address,uint256,uint256)", +"3138ee5c": "getPermittedContracts()", +"31391828": "_computeTournamentIncentiveReward(uint256,uint256)", +"31399b4d": "indexOfOperator(address)", +"3139c691": "_isInWhiteAddresses(address)", +"313a9204": "addPurchased(address,address,uint256)", +"313aaf96": "Double(bytes32,uint8)", +"313b7b19": "finance()", +"313c4093": "newExit(address,uint256)", +"313ce567": "decimals()", +"313d98f3": "getTokensTo(uint256,address)", +"313dab20": "treasuryBalance()", +"313f5a57": "tradeAirswap(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"313f944f": "externalPurchase(address,uint256)", +"313fc3fc": "getMyRevenue(uint256)", +"314094c2": "devfee()", +"3140b09e": "distributeBonusTokens()", +"314312d3": "setEtherDeltaExecutor(address)", +"31434041": "burnSTCDR(uint256,uint256)", +"3143d97c": "setTimeLock(uint256,uint256)", +"3143fd60": "dev_allocation()", +"314475b2": "TokenEntity()", +"31447a32": "KeplerTokenCrowdsale(uint256,address,address)", +"3144c859": "executeCode(bytes)", +"31462b96": "the_nominal_annual_interest_rate()", +"3146a6bb": "transferTeam(address,uint256)", +"3146d282": "HyperTestToken()", +"31477b9b": "getString(bytes32,bytes32)", +"31483bdc": "PushToken()", +"314848fa": "CICoin()", +"3148ac62": "InitialRateChange(uint256)", +"3148f14f": "modExp(uint256,uint256,uint256)", +"3149694a": "burnHackingAmount(address,string)", +"314989b2": "SimplePHXSalesContract()", +"3149c440": "transferDomain(bytes8,string,address)", +"314a05db": "ownerRetrieveContractConfig2()", +"314a522e": "getTermsContractParameters(bytes32)", +"314aabb5": "EthDice50()", +"314cd12c": "createPromoToken(uint256,address)", +"314dd783": "GoldiamICO()", +"314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", +"314e39c3": "trustContract(address)", +"314e99a2": "abdicate()", +"314ec2e5": "set_sale_owner(address,bool)", +"314ef8cb": "Besiktas()", +"31503ec4": "setFeeWalletAddress(address)", +"3150456e": "GenChipIndex(uint256,uint8,uint256[],uint256[],uint256[])", +"3150a7da": "HarvestedBabyBrain()", +"3150efbd": "beneficiaryMultisig()", +"31511e61": "getAffiliateCount()", +"31513039": "transferTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"3151609e": "setMetadata(uint256,bytes32)", +"3151ecfc": "myDividends()", +"3152dd00": "fundingActive()", +"31543cf4": "getTemplate(uint256)", +"3154d790": "rentByAtom(uint256,uint256)", +"3155625c": "setCleide(uint256)", +"3155c856": "getTotalF5()", +"31561b0d": "isGauntletExpired(address)", +"3156560e": "setApprover(address)", +"31577cc0": "getModuleIDByAddress(address)", +"3157be49": "imageVerified()", +"3157d347": "nonVestedTokens(uint64)", +"31580446": "acceptDividends(uint256)", +"3158923d": "setReferralshipAddr(address)", +"3158c52b": "isSoftCapAchieved(uint256)", +"3158f643": "ico1Ended()", +"315a095d": "withdrawTokens(uint256)", +"315a0a09": "BasicForecasting(address,uint256,address,address,address)", +"315a6001": "purchaseUniqueSpinner(string)", +"315a6d65": "withdrawTeamToken(address)", +"315ad5ce": "resetGroupInfo(uint256)", +"315b86da": "MNPYToken()", +"315ccd21": "MAX_ETHER()", +"315d142d": "GayCoin()", +"315d758f": "_setERC20compatibility(bool)", +"315e2f1b": "setTestString(string)", +"315e3124": "pack(bytes4,address)", +"315e6c0a": "UpgradedContract(uint256,address,address)", +"315ebe81": "LockedOutTokens(address,address,uint256,uint8,uint256,uint256)", +"315f81c5": "useVaults(uint256,uint256)", +"315fd022": "MyToken(uint256,uint256,string,string)", +"315fdea3": "TreasureChest()", +"315fe684": "getMyPrize()", +"31601d09": "AuctionCreated(uint256,uint256,uint256,address)", +"31606828": "registrationDeposit()", +"3160d63b": "removeSupport(address)", +"31616395": "crowdsaleContract()", +"3162360d": "_emitBoardRatingGiven(address,uint256,uint8)", +"31629388": "setPendingValue(uint256,bytes32)", +"31638ced": "getDatasetByIndex(uint256)", +"3163b41a": "AdjustableRoundsManager(address)", +"31641629": "releaseSomeKims(uint256)", +"31649233": "allocatedTotal()", +"316524e5": "setGene(uint256,bytes)", +"31657926": "ticketsOf(address)", +"3165a051": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16,bytes32)", +"3165b26e": "transferOnBehalf(address,uint256,uint256,uint8,bytes32,bytes32)", +"31666144": "BTCproxy()", +"31666156": "latestReferenceBlockNumber()", +"3166e133": "Metropolis()", +"3166f49f": "balances_for_refund(address)", +"31670619": "GROWCHAIN()", +"31670ea7": "resetWithdrawEtherToValues()", +"31671a02": "TokenClaim(address,address,uint256,uint256)", +"31671f57": "Litecoinprivate()", +"31677980": "migrationCompleted()", +"3167e9d2": "infoUrl()", +"316866bf": "getRatingsForAddress(address)", +"3168e98a": "getExtensionFor(bytes4)", +"316943cc": "transferExtOwnership(address)", +"31694d6f": "TEAM_TOKENS_SUPPLY()", +"3169ff3e": "LooneyLottery()", +"316a0131": "viewWinningOption()", +"316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", +"316b13b4": "setMemberContract(address)", +"316b8cab": "Oogroll()", +"316bc682": "setKYCLockupIgnoring(bool)", +"316cb1b4": "withdrawKittenCoins()", +"316db7f2": "updateInfo(uint256)", +"316e539e": "currentStanding()", +"316f2f06": "requestUnclaimed()", +"316fb7c4": "updateGoal(uint256)", +"316fda0f": "cycleCount()", +"317053f8": "setStringMember(string)", +"31707a05": "initOwner(address,address)", +"31711884": "tokenRate()", +"31711abe": "bookkeep(address,uint256,uint256)", +"31719c69": "lastPriceSetDate()", +"31723abd": "DMTokenC()", +"31729a45": "setCommission(address,uint256)", +"31748401": "_investorAddresses(uint256)", +"3174cc87": "refundToBuyersIfSoftCapNotReached()", +"31757f2e": "collisionCount()", +"3176bd18": "MyTestingToken()", +"3176d373": "updatePriceFci(uint256,uint256)", +"3176e734": "addHiddenPosition(uint32,bytes32)", +"3176f912": "getPlayersBattlePower(address,address)", +"3177029f": "approveAndCall(address,uint256)", +"3177b83a": "isCustomerHasACC(address)", +"317830b4": "crowdsalePaused()", +"31787b91": "maxIcoDuration()", +"31798893": "DistributedSoFar()", +"317a71ea": "_removePendingRequestId(uint32)", +"317ab6dc": "getChampsCount()", +"317b0b77": "_setCloseFactor(uint256)", +"317b4b76": "setPreIcoMin(uint256)", +"317c00be": "maxTokensPerArticle()", +"317c0ae9": "tokensByZecTx(string)", +"317c1291": "isCrowdFundActive()", +"317cd9fb": "setethtoken(address)", +"317d5d9b": "rand(uint32)", +"317d7a2b": "depositInfo(uint256)", +"317d9453": "getContractTokenBalance()", +"317ebc79": "scoreTeams(uint32[],int32[],uint32[])", +"317ec08b": "removeMaliciousValidator(address)", +"317ed7dc": "rebateTwoFenzi_()", +"317ffcf2": "getCreateUnicornPrice()", +"31806aaf": "unlockBalanceByKey(uint256,uint256)", +"318077a1": "Logo(address,address,string)", +"31809eac": "dayAfterInMinutes()", +"3182c3aa": "createSale(uint256,uint256,uint256,string,uint256)", +"31836cb9": "testMiddleTranch()", +"31839753": "getVolumeBonusAmount(uint256,uint256)", +"3183a55c": "Alchemy(uint256,uint256)", +"3183ef3d": "_release(address)", +"31845f7d": "setPublic(uint256)", +"31852177": "ConsToken()", +"31852a02": "allocate6ProjectToken()", +"31859556": "startPreico()", +"3185a61e": "getSellOrder(uint80)", +"31861423": "_deleteAllPackedRevisionTimestamps(bytes20)", +"3186f390": "tokensToPartner()", +"3187878b": "Follor()", +"31885119": "mintSelf()", +"3188949a": "DIT()", +"3188c5b1": "updateTotalChild(address,address)", +"3188da5f": "meltCoin(address,uint256)", +"3188ed13": "UNSOLD_ALLOCATION_SIZE()", +"3189418f": "connect_to_nodelist()", +"318992d0": "RewireToken()", +"318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", +"318b526c": "AIGInvestment()", +"318cbe20": "BountyBG()", +"318dbcae": "releaseFundsBuyer()", +"318e6c78": "getAdminAddress(address,address)", +"318f0fe9": "acceptRequest(address,address)", +"318fd7e4": "HomeChainToken(address)", +"318fd93d": "registerSeller(string,string)", +"31906ebd": "airdropTotal(address)", +"3190abc0": "addCustomer(string,string)", +"3192164f": "idle()", +"31921cad": "headerColor()", +"319288d8": "setNVTface(address)", +"3192b995": "developer_crowdsale_text(string)", +"3192cccb": "queryTokenGrant(address)", +"31933916": "getMessageCount()", +"3193c749": "placeBet(uint256,uint256,uint256,int256)", +"31950032": "createContract(bytes32,uint16,bytes8,uint256,uint32,string,uint32,uint64[],bytes8[],uint32,bytes32)", +"319609fa": "EtherPiggyBank()", +"31970bd8": "nextRangeID()", +"31978b99": "changeBoardMetadata(bytes32,bytes32,string)", +"3197cbb6": "endTime()", +"31985b51": "sendGiftCard(address,address)", +"3198a38f": "findAllCliWithPendingTask(address)", +"3198acad": "Billionsgame()", +"319983f8": "FoundationSupply()", +"31999749": "getTimePeriodsUsed(uint256)", +"319a2494": "getBlockOf(address)", +"319a30d4": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"319a9395": "setGlobalLock(bool)", +"319ae4b2": "spaceCount()", +"319af333": "log(string,address)", +"319b0cd2": "calculateRate(uint256)", +"319b0e75": "getTotalInvested(address)", +"319c068c": "current_round()", +"319c33cc": "setOrganization(string)", +"319c7748": "_KiwiToken()", +"319dac48": "polishRoughStone(uint256)", +"319db3be": "advisorWallet()", +"319df3bf": "icoManager()", +"319f0852": "MSCTToken(uint256,string,string)", +"319f21b6": "placeGame(uint8,uint256,uint256,uint8,bytes32,bytes32)", +"319f3930": "mintFraCoins(uint256)", +"319f7700": "SealCrowdsale()", +"319f9887": "SnowdenAffect()", +"31a02bce": "requestMint(address,uint256)", +"31a06772": "scrap(uint256)", +"31a079ca": "ArtexToken()", +"31a14db3": "getParticipantName(bytes32)", +"31a2aba8": "create(address,uint256,uint256,address,address,address)", +"31a360b4": "LUVITOKEN()", +"31a36424": "getAllAdmin()", +"31a38c89": "executed()", +"31a3a506": "closeFunding()", +"31a3b36f": "blockDotTimestamp()", +"31a3b873": "ICO_MIN_CAP()", +"31a40b62": "delAuthorized(address)", +"31a51f46": "getTransactionConfirms(bytes32,uint256)", +"31a642db": "getTransferInfoValue(address,uint256)", +"31a73991": "GetUserIdByAddress(address)", +"31a76bca": "FOUNDERS_VESTING_CLIFF()", +"31a7d4c2": "LogPause(uint256,bool)", +"31a83ca2": "oraclize_randomDS_setCommitment(bytes32,bytes32)", +"31a8aeb3": "stakeFrom(address,uint256)", +"31a95c7a": "redeemTokens(address,address,uint256)", +"31a97ff0": "noteInitialReportingGasPrice()", +"31a9b2f2": "maximumPurchase()", +"31aa01c4": "contributed2(address)", +"31aa91fc": "completeContribution(address)", +"31aaa74a": "accountParent(address)", +"31ab4066": "testAuthorityTryAuth()", +"31ab6055": "TMCoin()", +"31abdd2a": "calculateEthValueFromTokens(uint256,uint256)", +"31ac7253": "releaseState3()", +"31ac76c7": "getSiteTokenLength(uint256)", +"31ad6b62": "sendToEthertoteDevelopmentWallet()", +"31ad836e": "Flabba()", +"31adba2f": "victimsCount()", +"31ae0019": "KissBTC()", +"31ae450b": "getAdmins()", +"31ae6b6e": "isFactProviderInWhitelist(address,address)", +"31af56ed": "transTo(address,address,uint256)", +"31afa55f": "decreaseMonsterExp(uint64,uint32)", +"31b0795c": "registerAddress(address,address)", +"31b259cf": "setUser(address,address,string,string,string,bytes32)", +"31b27c44": "DeusMarketplace(address,address)", +"31b28664": "PAGE_SIZE()", +"31b29629": "ownerAddBankroll()", +"31b2d49c": "cancelOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"31b31b88": "setTokenFee(uint256)", +"31b36c45": "CHECKgamberTwo()", +"31b39a56": "addWalletConfig(uint256,uint256,uint256,uint256)", +"31b3eb94": "withdrawPayments(address)", +"31b4784e": "lastUpdateOverall()", +"31b48f86": "setPeriods(uint32,uint256)", +"31b57b46": "initialize(address,address,bytes32,address,int256,bytes32,address,int256,bytes32,uint256)", +"31b59508": "LDIT()", +"31b5da2a": "numMC()", +"31b61ece": "getAllLeftHand()", +"31b62fae": "GetCardInfo(uint32)", +"31b6421e": "Approve(uint256,bool)", +"31b77da4": "getEmptyIndex()", +"31b7a196": "emitGenericLog(string,string)", +"31b7c458": "claimedAirdropTokens()", +"31b8b100": "Static()", +"31b93ae6": "MIN_PRESALE2()", +"31b97e45": "addGame(bytes32,bytes32)", +"31b9d81d": "kscBatchTransferToEcosystem(address,address[],uint256[],uint256,uint256[],string)", +"31ba7ede": "create(address,bytes32,address,bytes32,bytes32,address,bytes32)", +"31baa8ae": "getCitizenCharacteristics(uint256)", +"31bab608": "getVersionSelectors(bytes32,bytes32,bytes32)", +"31bac434": "unpauseMint(uint256)", +"31bae156": "getPartialAmountRoundedUp(uint256,uint256,uint256)", +"31bbb695": "takeCapital()", +"31bcce1c": "CryptoAtoms()", +"31bcd2b7": "sendTokens(uint256,uint256)", +"31bd1fa5": "levAddress()", +"31be23e4": "getLotteriesLength()", +"31be6985": "testBitXorSuccess()", +"31be6a17": "addNewGroup(bytes32,uint256,uint256)", +"31beedd9": "setOWhitelist(address[])", +"31bf0667": "tokensaleWallet()", +"31bf0b42": "setSB(uint256,uint16)", +"31c0018b": "listApi(uint256,bytes32,bytes32,string,string)", +"31c05b8f": "getWalletAddress(bytes8)", +"31c15301": "maxRandom(uint256,address,uint8)", +"31c1eea4": "delCEx(address)", +"31c29c25": "newContribution(address,uint256)", +"31c2b6e6": "animator()", +"31c2bd0b": "propose(address,bytes,uint256)", +"31c33669": "GetChequeInfo(string)", +"31c359fa": "getReferralAddress()", +"31c3e2c9": "VotingProxy(address,address)", +"31c3e456": "update(string,string,string)", +"31c420d4": "unfreezeTransfers()", +"31c42ca6": "testSell()", +"31c571f5": "setLastStellar(address,uint256,uint256,uint256)", +"31c5e407": "PaymentSubmitted(address,bytes8,uint256)", +"31c5e56b": "init(address,uint256,uint256,uint256,uint256,uint256,uint8)", +"31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", +"31c78498": "Metadollar()", +"31c89d3e": "FromQueue(address,address)", +"31c91117": "withdrawAllEther()", +"31c9472a": "constantname()", +"31ca0bae": "DAO(address,uint256)", +"31ca208c": "greylist(address)", +"31ca4340": "GetTokenData(uint256)", +"31ca6b67": "setWinnerManually(uint256)", +"31cb27d7": "processHandEndSplit(uint256,uint256)", +"31cba838": "BOUNTY_ADDRESS()", +"31cbf288": "createContract(string,address,address,string)", +"31cbf5e3": "pay(uint256,address)", +"31ce6b47": "getTicketCounter()", +"31cfcf84": "IDAGToken()", +"31d03594": "getOfferPrice(uint256)", +"31d0e3f5": "setChainlinkToken(address)", +"31d1c995": "_batch1_icosaleStartTimestamp()", +"31d29af1": "getMyWallet(address)", +"31d2f891": "crowdsaleAddress()", +"31d31647": "hasSenderVoted(uint256)", +"31d3518a": "IvoryToken()", +"31d35cb2": "getDayEthIn(uint256)", +"31d36cf0": "relaySellerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"31d397ef": "initialWallet()", +"31d4116f": "nextsize()", +"31d41325": "isMonethaAddress(address)", +"31d42bf2": "addBlackAccount(address)", +"31d4ac45": "bookWithLif(uint256,uint256,bytes,string,uint256[],bytes32)", +"31d4ed2e": "_isUnderLimit()", +"31d4fad4": "refundPayment(uint256,address,string)", +"31d6183b": "tokensToEth(uint256,uint256)", +"31d67353": "transfer_data(address,uint256,string)", +"31d694a0": "NEBC()", +"31d78a50": "signedApproveAndCall(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", +"31d87de2": "setRBACAddress(address)", +"31d90e04": "canClaimPayout()", +"31d98b3f": "getPrice(bytes32)", +"31d9931f": "setOwnedTokensIndex(uint256,uint256)", +"31daabb7": "updateOwner(uint256)", +"31db4b95": "doTriggerAuth()", +"31db6c48": "TYPE_EXPLORER()", +"31db9efd": "right88(uint256)", +"31dbd8a5": "feeAuthority()", +"31de13e8": "tBonusStageEnd()", +"31de7e72": "iceFund()", +"31deb7e1": "nodeCost()", +"31e12c20": "setowner()", +"31e19cfa": "getStrategyCount()", +"31e396c8": "calculateYourValue1(uint256)", +"31e3e2fe": "WithDraw()", +"31e41fba": "_localFight(uint32,uint32)", +"31e5144c": "isAvailable(uint32)", +"31e574a5": "addProduct(address,uint256,string,string)", +"31e59772": "deletenullarr()", +"31e5f055": "one_card()", +"31e63199": "codename()", +"31e6a707": "getWalletInfoByIndex(uint256)", +"31e7b060": "constructProof(bytes32,bytes32[],bytes1[])", +"31e7bf9d": "Multivest(address)", +"31e88fee": "claimedPartnerPreICO(address)", +"31e8c7ba": "CertID()", +"31e8ebbb": "DenToken()", +"31e92f32": "blocksPerMonth()", +"31e99e2b": "getCurrentSmartSpeedPrice()", +"31e9e9c0": "unlockToken(address,uint256)", +"31e9ea8a": "PlaceBet(address,uint256,uint256,bool)", +"31e9ee7c": "currentIcoWallet()", +"31ea1a39": "cancelDeal(uint256)", +"31eaa5c9": "erc20CTH()", +"31ebd13f": "logAllStart()", +"31ee080d": "setComisionInvesorInTokens(address,bool)", +"31ee6c2e": "dividePerfectlyBy(uint256,uint256)", +"31ee8277": "_createship(uint256,address)", +"31ef107f": "SetProfitAddr(address)", +"31ef916a": "approve_timed(address,uint256,uint256)", +"31f01140": "getUserInfoById(uint256)", +"31f0528e": "updateNextGameMinAndMaxBlockUntilGameEnd(uint256,uint256)", +"31f070d9": "getSet()", +"31f09265": "withdraw(address,uint256,bytes)", +"31f0fca1": "_addTokenToTranche(address,bytes32,uint256)", +"31f170c2": "coinSupply()", +"31f1fd2b": "setCriterionTime(uint256)", +"31f25330": "initialRound()", +"31f27c96": "isWarriorChest(uint256)", +"31f2c8a5": "whitelistedSenderAddresses()", +"31f2d72d": "TelegaSend(address)", +"31f3af90": "removeAuditorFromMultiRequestAssignment(uint256,address)", +"31f4a23f": "EtherDeltaWithdrawToken(address,uint256)", +"31f4f682": "investmentMin()", +"31f53447": "operatorProductCommissionInPerc()", +"31f607a5": "Coin_Character()", +"31f6eac8": "availableVolumeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint256)", +"31f72b44": "NewPhase(uint8)", +"31f76043": "resetSymbol(string)", +"31f850e6": "create(address,uint256,uint256,uint256,bool,string)", +"31f9a211": "getOrderState(uint128)", +"31f9a8f2": "accessToken(address,uint256)", +"31f9c919": "mintingActive()", +"31fa0a45": "withdrawAdamcoins()", +"31fa76db": "short_tokens(uint256)", +"31fa7c84": "cancelRent(uint256,uint256)", +"31fa8e73": "payrolls()", +"31fa90d8": "stopIssuingIndividualTokens()", +"31fb4c1d": "preIcoFinishTime()", +"31fb67c2": "withdraw(string)", +"31fc5b18": "MIN_BID_FRAC_TOP()", +"31fd725a": "PassHasBeenSet(bytes32)", +"31fdb712": "getFlight()", +"31fea236": "testFailTransferFromWhenStopped()", +"31ff1ed9": "linkDirectly(string,uint256,uint256)", +"31ffc9fa": "DentacoinTimeLock()", +"3200aa7a": "startRoundB()", +"32013ac3": "preallocate(address,uint256,uint256)", +"320228ca": "minimunEth()", +"32033229": "writeAddr()", +"32035ca6": "madeOperatorForTokens(address,address,address,uint256,bytes,bytes)", +"3203fe4b": "softcap1Reached()", +"3204dbc5": "distributeELTC(address[])", +"3205c5c1": "intunderflow(uint256)", +"3205f5fc": "division()", +"3206163f": "Drawcolor(uint256,address,uint256,uint256)", +"32064946": "start_buyer(address,address,uint32)", +"32064db7": "left20(uint256)", +"320665a6": "BCCB()", +"3206b2c6": "getLog(uint256)", +"3207230d": "purchaseVehicleSpace(address,uint256,uint256)", +"3207408f": "PrivateSaleCents()", +"32075c49": "buySCTK(address,uint256)", +"3207b544": "BRI()", +"32083c44": "payoutForWagerAndOutcome(uint256,uint8)", +"320878d5": "BFYToken()", +"32089b74": "LEGLToken(uint256)", +"32098d4c": "setCalculateFloatingValue(uint256)", +"3209943e": "proceedsAddress()", +"3209c6de": "iterate_start()", +"3209e9e6": "setMinimum(uint256)", +"320a352a": "ExposureCollected(bytes32,address,uint256)", +"320a3c5e": "AJinToken()", +"320a5018": "MilestoneInput()", +"320a6c73": "transferFor_(address,address,uint256)", +"320a8ef8": "transferTokensToTeamMany(address[],uint256[],uint256)", +"320a98fd": "lock(string)", +"320b2ad9": "_pause()", +"320bebaa": "setPromoMinPurchaseEth(uint256)", +"320cffcd": "getCostForCards(uint256,uint256,uint256)", +"320d2800": "finalizeSale(address,uint256)", +"320d2fa0": "liquidationThresholdPercent()", +"320d4534": "setMinSwapAmount(uint256)", +"320d46d4": "canRegister(address)", +"320dc63a": "TotalSTC(uint256,uint256)", +"320e028d": "setCountryToken(address)", +"320e6c01": "set_default_approval_duration(uint256)", +"320ea024": "isVerificator(address)", +"320fdc75": "one(uint256,uint256)", +"321022a5": "updateSettlementInstitution(address)", +"3210318e": "PotaosBucks()", +"3210bb1d": "moneybuy(uint256)", +"3211bb90": "OwnerAddFunds()", +"32121896": "GDK()", +"32139a0e": "platformOperatorNeumarkRewardShare()", +"32145dd2": "gamePlayerNumber()", +"321489d4": "getDataByIndex(uint256)", +"3214e6ba": "cpow2(address,uint256)", +"3215b483": "getTokensByMerkleProof(bytes32[],address,uint256)", +"3216255b": "setCertificate(string,string,string,string,string,string,string)", +"3217e44e": "RGHTC()", +"3218b99d": "gameStart()", +"3218ebcc": "SUBMISSIONREWARD()", +"32191017": "updateFeeForCurrentStakingInterval()", +"3219ac2a": "showMyVote()", +"3219e73f": "addScore(string)", +"321a7c8c": "createVestingByDurationAndSplits(address,uint256,uint256,uint256,uint256)", +"321b3157": "firstPartOfTeamTokensClaimed()", +"321bbc1c": "test_insert_findWithHintNextUpdateHead(int256)", +"321c48f2": "getTemplate()", +"321cb98a": "creationMaxCap()", +"321d43cd": "approve_sell_proposal()", +"321db4d4": "getQueryAddress()", +"321de1d4": "BuyToken(address,uint256,string)", +"321f0013": "do_nothing()", +"321f4584": "DataRegistered(bytes32)", +"321f63a2": "HMToken()", +"322062b8": "FixBet31()", +"3220ad89": "refundSuccessful(address,bytes32)", +"3220b95a": "getEscrowOrder_seller(uint256)", +"32214874": "verifyAmount(address,uint256,uint256,bool)", +"3221e125": "addBag(uint256)", +"32227425": "stopReceiveTicket(uint256)", +"3222ae71": "airdropFinished()", +"322370ff": "BetexStorage()", +"32246e9f": "auctionEnd(uint256)", +"322471cf": "createAffiliate(uint256,uint64,uint64,address,address)", +"3224ba23": "submitPoliceReport(uint256,bytes,bool)", +"32254992": "getPrevHash(int256)", +"32255d90": "confirmShipping(uint256)", +"32258794": "removeAddressesFromBlacklist(address[])", +"322671cd": "_checkLockUp(address)", +"32268c01": "artistsArtworks(address,uint256)", +"3226a94e": "TRNCoin()", +"3227563a": "logPriceAfter()", +"3227bd8b": "DragonCoin()", +"3228556f": "setPOOL_edit_8(string)", +"3228afcb": "HyperIslandCoin()", +"32293954": "LogTokenPreissued(address,uint256)", +"322a5e5f": "balanceContract()", +"322a7050": "addHospital(uint256,string)", +"322a8957": "teamTokenTimelock()", +"322b1bc0": "getarray_length()", +"322b8c7e": "dKERNEL_PANIC()", +"322e5021": "Penalty(address,uint256)", +"322eccdc": "withdraw_all_admin(address)", +"323046b1": "date()", +"32307c67": "LCASH()", +"323082d7": "Vote(string)", +"3230d486": "getHeroRequiredExpForLevelUp(uint256)", +"323162a9": "getDisputeParticipants(uint256)", +"3231a2b9": "voteSnapshotBalanceAutoBatch(address[],uint256[])", +"32326b44": "Invested(address,uint256,uint128)", +"3232f204": "SPAMed()", +"32331418": "ExchangeTokenToZWC(address,address,uint256)", +"3233b455": "appFundDeposit()", +"3233c686": "claimerDeposit()", +"3233c791": "nextlotnumber()", +"32347487": "forwardFundsToWallet()", +"32353fbd": "resumeAuction()", +"323560b5": "ZebraToken(uint256,string,uint8,string)", +"32363b47": "period1End()", +"32363e0a": "calculateMultiplierAfterBurn(uint256,uint256,uint256)", +"323661f6": "releaseLockedBalance()", +"32366ea5": "isOMITokenContract()", +"32366fb9": "makeTomatoes(address)", +"32369e38": "GetPlayerDynamicRatio(address,uint256)", +"32373e25": "CREATED_STAR4()", +"323772ee": "unlocktime()", +"3237d63c": "tgeLive()", +"32383a69": "WashCrowdsale()", +"3238c832": "updateDBZHeroDetails(uint256,string,address,address,uint256)", +"32395c2b": "addPayee(address,address,uint256)", +"3239825c": "edCoreContract()", +"3239d232": "weekProcessed(uint256)", +"323a5e0b": "deposits()", +"323a73d9": "generateId(uint256,uint256,uint256)", +"323a7acb": "Joyreum()", +"323aca70": "InterCryptoNode()", +"323b1b87": "FreezeTokenTransfers(address,bool)", +"323b2c26": "MAX_RELEASE_DATE()", +"323bc818": "_createTeam(string,string,uint256,address)", +"323be1c5": "canPause()", +"323bf0b8": "icoPhase2EndTime()", +"323c20fa": "tokenPtx()", +"323c59c4": "Common()", +"323cb59b": "uncooperativeClose(address,uint32,uint192)", +"323d5c68": "sendPer()", +"323dc51a": "MomoToken(address,uint256)", +"323ded4d": "_getLegendaryPlusRarity(uint32)", +"323df879": "MILLION_TOKENS()", +"323e71fd": "turnOffCanUpdateFrontWindowAdjustmentRatio()", +"323ea3f9": "photoText()", +"323efacd": "checkAndCallSafeTransfer(address,address,uint256,bytes)", +"323f6fe0": "VESTING_OFFSET()", +"323fe92c": "setPriceAttr(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"32414926": "CarTaxiToken(address)", +"32418558": "stakeTokensManually(address,uint256,uint256)", +"32424aa3": "_decimals()", +"324298ff": "ArrayDemo()", +"32434a2e": "register(address,string)", +"324365b1": "createCollectible(uint256,uint256,address,address)", +"3243c791": "distributeDividends(uint256)", +"32443d7d": "developmentFundUnlockTime()", +"324536eb": "totalSupply_()", +"3245a55f": "mintFull(address,uint256)", +"3246887d": "setLedger(address)", +"3246bac5": "getGameIpfs(uint256)", +"3247dd8b": "ySignToken()", +"32484dab": "totalContributedUnits()", +"3248687a": "getLockSize(address)", +"32492f96": "getStellarBalance()", +"32495c58": "requiredEntries()", +"3249759c": "TAToken()", +"324a5562": "setMaxNumber(uint8)", +"324ab080": "MIN_BONUS()", +"324b0085": "createBlogger()", +"324b8ad2": "totalBurnLotsByAddress(address)", +"324b8d6e": "oracleConfig()", +"324c6add": "KBV01()", +"324cb3cb": "contractLocked()", +"324cf51a": "setPurchaseParamCount(uint256)", +"324da66f": "removePromoCode(bytes32)", +"324dd3b0": "getFighterArray(uint256[])", +"324ecd96": "power10(uint256)", +"3250e151": "PakEKO()", +"32513ce5": "newContractAddr()", +"32519e0e": "roundEth()", +"32525f09": "testTransferFromDoesNotAllowTransferOfMoreThanAllowedByDelegate()", +"325294e5": "calculateEthers(uint256)", +"3252b8fb": "returnGrantedToken(uint256)", +"3253277c": "badge(address,uint256)", +"3253ccdf": "burnNomins(uint256)", +"32546f7e": "HammerChain()", +"3254de48": "ITSEndTime()", +"32555f06": "dissBlock(uint256)", +"325586dc": "checkStateProof(bytes,uint256,bytes,bytes)", +"32564d82": "identifierToIndex(bytes32)", +"325654ae": "secondPrivateLockTime()", +"3257bd32": "getDepositorMultiplier(address)", +"3257d818": "hasResponded(bytes32)", +"32581fb0": "getArtefactById(uint256)", +"3258e255": "setWithdrawBeforeTime(uint256)", +"325a19f1": "created()", +"325ab9ac": "buildCharging()", +"325ad39b": "UltraNote()", +"325add98": "sellDaiForEth(uint256,uint256)", +"325c25a2": "auctionLength()", +"325c35c5": "setFightsAddress(address)", +"325cf9e6": "splitPayment()", +"325da1c0": "LogAllocateTicket(uint256,address,string)", +"325dfddf": "waittokens()", +"325ecf99": "addMarketingToken(uint256,uint128)", +"325f33e0": "checkUserByWallet()", +"325f9f41": "processShares(uint256)", +"32606387": "_draw3()", +"32608243": "Iou()", +"3260db59": "UnityToken(address,uint256)", +"32611e2b": "stage2_start()", +"32615457": "FullAssetRegistry()", +"32617353": "GoldBlockTickets()", +"32619375": "ChangeMiningReward(uint256)", +"3262207c": "isTransferProxy(uint32,address)", +"32624053": "blocksToWaitShort()", +"32624114": "isValidAccessMessage(address,uint8,bytes32,bytes32)", +"3262fd9a": "getMoney(uint256)", +"326360fe": "uncommittedTokenBalance()", +"32643513": "_computeContendersTotalHp(uint256,uint256,uint256,uint256,uint256,uint256)", +"32644829": "removePlayerFromBoard(bytes32,bytes32)", +"3264a34b": "getBoard()", +"3264a844": "hundredtimes()", +"3265bf5b": "registerPlayerToBoard(uint256)", +"3265c436": "btcsAddress()", +"32665ffb": "getProperty(uint256)", +"32666a31": "setMonsterObj(uint64,string,uint32,uint32,uint32)", +"326687b9": "onSale()", +"3266c856": "WanToken(address,uint256,uint256)", +"3266fb05": "lockedTime(address)", +"32670d10": "contributors_locked(address)", +"3267a2c5": "returnedToOwners()", +"3267db34": "setCurrentBadge(bytes32)", +"3268215c": "getPuppyAttributes(uint256)", +"3268419f": "PreSale(uint256,uint256,address,address,uint256)", +"32691d18": "updateLastTransactionTime(address)", +"326959cc": "MMMToken()", +"32696a92": "totalpatient()", +"326a794d": "safeMathSub(uint256,uint256)", +"326a7d77": "LEVEL_MAX_VALUE()", +"326abfce": "curent_mul()", +"326b0c7e": "BuyPresalePackage(uint8,address)", +"326b1001": "crowdSaleHardCap()", +"326b7a14": "WthdrawTo(address,uint256)", +"326cf61c": "toBytes(bytes32)", +"326dd62d": "migrationStartedTime()", +"326e8d60": "getTurnover(bytes32)", +"326fac6e": "getCurrentGames()", +"326fd584": "maxEtherCap()", +"32708966": "setMonsterIndexToApproved(uint256,address)", +"3270f753": "depositHouseTakeout()", +"327107f7": "targetToken()", +"32715bf2": "userContentByIndex(uint256)", +"32716063": "calcTotalFee(uint256,bool)", +"3272b28c": "allowedSenders()", +"32733a08": "balanceB()", +"32736fb0": "RoundsManager(address)", +"3273b110": "setMinDuration(uint32)", +"327419b7": "NeedsCoin()", +"327428b1": "Lockable(uint256)", +"32750350": "setcardaddress(address,address,uint256)", +"3276249f": "vrcWallet()", +"327683bb": "setIII_R3(uint256)", +"3276eaa9": "incrementContinuityNumber(uint32,int256)", +"32773ba3": "challengeExit(uint256,uint256,bytes,bytes,bytes,bytes)", +"3277bbda": "setUintF1IntF3AddressF3(uint256,int256,address)", +"32780d05": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", +"3278ba2f": "getNumBounties()", +"3278c960": "terminateSelfDestruct()", +"3278dc67": "Founder()", +"327942a2": "move(bytes32,uint256)", +"32794823": "withdrawToOwnerCheck()", +"32797f44": "failedTimestampSecondsAt(uint16)", +"327a765a": "_getString(address,bytes32)", +"327a943a": "getUserAmount(address)", +"327b95b5": "USDXCoin()", +"327c0dd9": "resetLotteryManually()", +"327cc732": "registrantIndex(address)", +"327e36dc": "RefundVault(address,address[])", +"327efb0c": "supplylimitset()", +"327f0b6b": "pollTitle(uint256)", +"327fc33c": "isUpcoin()", +"32807be0": "PrymexPreICOCrowdsale(uint256,uint256,uint256,address)", +"3280922b": "TOKENS_SALE()", +"3280a836": "getPayment(uint256)", +"328175cd": "editorSignUp(address)", +"3281c4e1": "salesAllocation()", +"3281c4fa": "upRound(uint256,address,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"3281d576": "isContractMiniGame()", +"32820d5f": "setupWeiCaps(uint256,uint256)", +"328243d5": "changeSale(uint256,uint256,uint256,uint256)", +"32828d9e": "BbbToken(uint256,string,uint8,string)", +"32829a23": "OpenBankAccount()", +"3282aa8a": "individualMaxCapWei()", +"32833d51": "power(uint256,uint256,uint32,uint32)", +"3283f641": "task()", +"32842c39": "picture(address)", +"32846270": "goldSaleLimit()", +"3284d75c": "sendRefTVs(address)", +"3284fd79": "issue(address,uint32)", +"32859392": "dividendDecreaseFactor()", +"3285ecde": "tokensMintedDuringPreICO()", +"3285f406": "GetWithdrawalFunds(address)", +"3286b611": "Generate(address,address,uint256,uint256)", +"3286fb75": "addressNotSet(address,address)", +"3287c399": "isSignedBy(bytes32,address,bytes)", +"3287d0dc": "ownerLocked()", +"3287d0f6": "switchReserve(address)", +"3287db4b": "lockFunds(uint256,uint256)", +"3288eb0b": "ChineseCookies()", +"32892177": "TOKEN_VERSION()", +"328929e0": "Offer(address,address,bytes32,uint256,uint256,uint128)", +"32895c2a": "ERH()", +"3289e004": "redeemPackage(uint256,address,uint256,bytes32[])", +"3289fba6": "getSanPrevOwner(uint256)", +"328a2c2d": "updateStartDate(uint256,uint256)", +"328a7e97": "setKyber(address)", +"328a8cc4": "addRestaurant(address)", +"328b10d7": "vestingStarts()", +"328c0ec0": "endPreICOTime()", +"328d15f4": "_getCurrentWeek()", +"328d8f72": "setEnabled(bool)", +"328db985": "getPotCnt(string)", +"328ede54": "DAFZOToken(address,address,address,address)", +"32902924": "signSendDiamond(bytes32,string,string,address,string,bytes16,uint256)", +"3290bd90": "getInfoFromBidding(bytes,bytes32)", +"3290ce29": "purchaseTokens()", +"3290f515": "addInterest(uint256)", +"32911111": "getroundinfo(uint32)", +"3291b39a": "addReserve(address,uint32,bool)", +"32921690": "checkDepth(address,uint256)", +"3292b71f": "transferCrowdSale(bool)", +"3292cd37": "payWithDailyFreePoint()", +"32931fbb": "left1(uint256)", +"329350ea": "storeOwnership(address,address)", +"3293d007": "isValidDateTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"329430ca": "teamAllocated()", +"32947122": "updAirDropTokenDestroy(bool)", +"32948515": "QLinkToken()", +"3294ab00": "withdrawBtc(bytes,uint256)", +"3294c2d7": "updateDocument(uint256,uint256)", +"32958fcb": "boolToBytes32(bool)", +"3295feb3": "numAuthorities()", +"32967ea0": "isOlderOwner(address,address)", +"3296a373": "createPromoPerson(uint256,address,uint256)", +"3297ef5b": "voting_started()", +"32985244": "joyTokenContract()", +"3298caa3": "getDoneRegistrationAmount(address)", +"3298e6c8": "GanaPublicSale(address,address,address)", +"32990ad2": "rewardTokensForClient(address,uint256)", +"3299ad23": "PapushaToken()", +"329a23b8": "Wallet(address[])", +"329a27e7": "getWalletBalance()", +"329a88d5": "UBIATARPLAY_CAP()", +"329b1c92": "getReferral()", +"329b59d1": "fallback(uint256)", +"329b8f38": "yesCount(uint256)", +"329bfc33": "getCurrentWinner()", +"329c095b": "getLatestReading(string)", +"329ccce1": "vmaxEtherPerPurchase()", +"329cd958": "get_next_item_in_state_from_item(bytes32,bytes32)", +"329ce1b7": "delOwner(address,address)", +"329ce29e": "buyTile(uint256)", +"329d1a35": "testReentracyGuard()", +"329d1a8b": "depositIndex(uint256)", +"329d3346": "closeVote()", +"329d5f0f": "setApprovedUser(address)", +"329da011": "addNewToken(string,address,address)", +"329daf90": "onlyPauserMock()", +"329eac15": "phase2Price()", +"329f36b5": "BONUS_TIER_2_LIMIT()", +"329f5b21": "DiatomAirdrop(address,address)", +"32a16f4e": "isLocked(bytes32)", +"32a21a28": "registerInvitor(address,address)", +"32a2c5d0": "getContractAddress()", +"32a2fda7": "isPermissionGranted(address,string)", +"32a36e53": "enterRound(bool)", +"32a3869a": "getBonusPercentage(uint256)", +"32a3abbb": "LALATokenAddress()", +"32a42882": "buyPropertyInPXL(uint16,uint256)", +"32a45ac5": "addMessage(address,uint256,uint256)", +"32a521c1": "disallowToLock(address,address)", +"32a52fcd": "FOR_ICO()", +"32a54712": "DecalinxCoin()", +"32a55bb4": "swapActivity()", +"32a58dc2": "change_client_manager(address)", +"32a6baf6": "isTimePassed()", +"32a71b36": "AleaCoin()", +"32a7ae95": "deleteClaim(address)", +"32a7d7c2": "AddressOwnershipVerification()", +"32a7dbda": "getMintManager()", +"32a7e45a": "eosBlanceOf()", +"32a80329": "getTokenTransferable()", +"32a8589a": "FercCoin()", +"32a89e50": "NextBabyIs(address,uint256)", +"32a8bb33": "getParticipantIds(string,uint256,uint256)", +"32a8d49e": "ADV_TEAM_TOKENS()", +"32a8e74c": "participateBuyback()", +"32a92229": "creditBalanceOf(address)", +"32a9a43b": "removeLeverage(uint256)", +"32a9df46": "setSecondBonus(uint256)", +"32aa952f": "UpdateSellAgentCreators(address,address)", +"32aae34d": "LogVoteToFreeze(address,uint256,uint8,bool)", +"32aaf9d7": "addCommissionAmount(uint256,address)", +"32ab6af0": "newRepoWithVersion(string,address,uint16[3],address,bytes)", +"32aba656": "stillAvailable()", +"32abff8e": "lastBlock_v5Hash_uint256()", +"32ac752b": "matches(string)", +"32ace499": "getNextOrderPrice(address,address,uint256)", +"32aeaddf": "lockingPeriodInMonths()", +"32af5858": "behalfBet(address,uint256,uint256)", +"32afa2f9": "claimEtherOwner(uint256)", +"32b12eac": "setFallback(address)", +"32b182c3": "eligible(address,uint256)", +"32b1ad5a": "checkContructIsLocked()", +"32b28b95": "edoPerWeiDecimals_()", +"32b30b64": "calculateUnsoldTokens()", +"32b3c323": "anyoneEndICO()", +"32b431da": "setPlanetAuctionAddress(address)", +"32b45055": "EREEBERRY()", +"32b4623a": "shareCertificate(string,string,string,address,address,string)", +"32b4b5ed": "openProvider(bool,string,string,uint256,string,uint8,bool,address)", +"32b4d74c": "getNumRemainingSeats()", +"32b525bb": "beginMotion(address)", +"32b5b2d1": "missedVerificationSlashAmount()", +"32b65a95": "getSplitCount(string)", +"32b680d6": "payReceiver(address)", +"32b693b0": "PetCoin()", +"32b6f97a": "UXDToken()", +"32b7214e": "setNextSnapshotTime(uint256)", +"32b734b7": "awardsEnd()", +"32b85a44": "currentWeight()", +"32b8c086": "testSuperUser(address)", +"32b98616": "updateCardDetail(uint256,uint256,bytes32)", +"32ba36d6": "EtherShare()", +"32ba4b8b": "RANGEEND_5()", +"32ba65aa": "clearBalance(address)", +"32baa8d9": "existingCategory(uint256)", +"32bace54": "invest_cin(address,uint256)", +"32bafb2c": "withdrawMln(address,uint256)", +"32bb2c0d": "calc(uint256,uint256)", +"32bbb8cc": "mgrVotes(uint256)", +"32bbc1c8": "WEI_PER_USD()", +"32bc873d": "AZExchange(address,address,address,uint256,uint256,uint256)", +"32bc934c": "MILLION()", +"32bd8644": "MPYRefund(address,uint256)", +"32be9502": "getOwnerInAnyPlatformById(uint256)", +"32bf1def": "FACTOR_2()", +"32bf775d": "testControlTransferDisabled()", +"32bf9e5b": "AfricacoinToken()", +"32bfaa23": "initializeRefundableFundraiser(uint256)", +"32bfdc38": "ROC()", +"32c0c583": "setDenyPremium(bytes32,bool)", +"32c0f801": "tokenFacebook()", +"32c0fba5": "airDrop(address,address,uint256)", +"32c1eb82": "getActualRate()", +"32c22154": "livepeerToken()", +"32c26957": "isTimeout()", +"32c2ed9a": "inquire(uint256,uint256)", +"32c35352": "marketSale(uint256,string,address,address)", +"32c3de5d": "listCreatedTokens()", +"32c442d6": "Super87Coin()", +"32c468fa": "setPreFundingStartTime(uint256)", +"32c4903d": "getAllParents(bytes32)", +"32c514d5": "getJobDetailsIPFSHash(uint256)", +"32c66a9d": "Nome_vincitore()", +"32c6f294": "deadline120()", +"32c6f315": "exchangeIsRunning()", +"32c716b6": "dividendsAcc(address)", +"32c7de60": "_RamenCoin()", +"32c862ed": "inSalePeriod()", +"32c896d4": "REFERRAL_BONUS_LEVEL4()", +"32c9635b": "_getEthUsdPrice()", +"32c990b4": "getUserKeys(address)", +"32ca5587": "isWoidRegistred(address)", +"32ca966e": "toTileId(int32,int32)", +"32cae0a8": "userPoolFund()", +"32cb46e0": "totalContributedWei()", +"32cb6b0c": "MAX_SUPPLY()", +"32cb93d9": "getPaintingName(uint256)", +"32cba128": "_deleteShareholder(address)", +"32cc0105": "setAmountForDeal(uint256)", +"32cc6a9f": "modifyNextCap(uint256,uint256)", +"32cce1e4": "_unlockTokenByIndex(uint256)", +"32cd0487": "delist(address[])", +"32cd0b3d": "totalRemainSupply()", +"32cd3148": "CashmoneyToken()", +"32cd724a": "getStateStartTime(bytes32)", +"32ce92cb": "setFIRST_STEP_MULTIPLIER(uint16)", +"32cea83e": "birth(bytes)", +"32cee2eb": "getMinableSupply()", +"32cfbe90": "initialBalance(address)", +"32d05a53": "IdToAdress(uint256)", +"32d05c6d": "withdrawXPA(uint256,address)", +"32d0cf68": "setOutOfLimitAmount(uint256)", +"32d17917": "SPECIALIST_THREE()", +"32d1ae2e": "RepairCenter(address,address)", +"32d2e55c": "subSafe(uint256,uint256)", +"32d2fb9f": "getRefRemainingTime(uint256)", +"32d33cd0": "isRedeemed(uint256)", +"32d3725b": "burnStage(uint256)", +"32d3b711": "getPI_edit_29()", +"32d540af": "_clearExtraReceivers()", +"32d5fe98": "revealCampaign(uint256,uint256)", +"32d68fd5": "transferFeeNum()", +"32d69342": "terminateServer(uint256,uint8)", +"32d6eeb5": "changeQueryDelay(uint256)", +"32d72694": "updateGameTimes(uint256,uint8)", +"32d79689": "currentNiceGuyIdx()", +"32d80490": "Dandy()", +"32d8a3bd": "initCommunityReputation(address)", +"32d8eee5": "testFailSetNotUpdatableNotOwner()", +"32da1329": "setStartEndTime(uint256,uint256)", +"32da3fe3": "upgradeComponent(uint256,address,address)", +"32da57cf": "getTheStocksTokens()", +"32da7448": "amout()", +"32da7840": "isWhitelistAgent(address)", +"32dae2a5": "maxAmountICO()", +"32db8e2b": "MAX_RECEIVED_PER_PERIOD()", +"32dbc7d4": "NECPToken()", +"32dbeb21": "GoalMinimumReached(address,uint256,uint256)", +"32dc04aa": "changeBlockTimeAverage(uint256)", +"32dc2a01": "setmsgprcnt(uint256)", +"32dc9e81": "functionFive(uint256,uint256,uint256,uint256)", +"32dcb01c": "createBytes32s(bytes32[],bytes32[])", +"32dea130": "finishCrowdsaleMinting()", +"32deac1b": "setThirdBonusPercent(uint256)", +"32dee40b": "withdrawAllFunds(address)", +"32df3068": "clearKeys(uint256)", +"32df52aa": "LigmaToken()", +"32e07a20": "howManyEthersToKillContract()", +"32e12734": "addSpecialOffer(address,uint8)", +"32e1ed24": "updateAccountOwner(bytes32)", +"32e26d24": "CROWD_WAVE1_BONUS()", +"32e30e84": "INTERFACE()", +"32e43a11": "dummy()", +"32e43b5b": "PlayerTransported(uint256,address,uint256,uint256)", +"32e459b4": "LogFinalized(uint256)", +"32e45b8b": "guessTotalBeanOf(uint256)", +"32e54f72": "proxyPayable(address,string,string)", +"32e5535a": "ticketString(uint256)", +"32e5645d": "_computeNextArtworkPrice()", +"32e5905b": "film()", +"32e5d676": "c_priceRiseTokenAmount()", +"32e5e595": "getTimestamp(string)", +"32e62358": "_platformSupply()", +"32e70029": "MGCGameToken()", +"32e7179a": "MintedLocked(address,uint256)", +"32e7c5bf": "B()", +"32e7ecd8": "tierMin(uint256)", +"32e7f81f": "allocateLiquid(address,uint256)", +"32e94e81": "setPlayerEngineersCount(address,uint256,uint256)", +"32e991cf": "sellScale()", +"32e99708": "getMiningTarget()", +"32eb2314": "OraclizeQueryTest()", +"32eb2564": "initGame()", +"32eb5e44": "getaddtime(address)", +"32ec39a4": "mntpMigrationsCount()", +"32ec7a4e": "_emitDayLimitChanged(bytes32,uint256,uint256)", +"32ec991c": "ballotOf(uint256,address)", +"32ed3d60": "startPoll(uint256,uint256,uint256)", +"32ef78c4": "remove_scribe(address)", +"32ef8dfa": "previousDistribution()", +"32f04209": "evReleaseFund(address,uint256)", +"32f05fd1": "releaseAndUnlock(address,uint256)", +"32f07d01": "LogRedeemNET(address,uint256,bytes32)", +"32f16c74": "claimPepe()", +"32f2129a": "getBetArr()", +"32f23601": "setSubTourFreezingPrice(uint256)", +"32f289cf": "claimToken(address)", +"32f2bb50": "HouseInfoListing(address)", +"32f402c5": "createGrant(address,uint256,uint256,bool,bool)", +"32f46374": "create(string,address[],address,address)", +"32f58fc8": "retrieveRemainingCoinsPostSale()", +"32f5ea27": "UbiRewardToken()", +"32f637db": "createVesting(address,address,uint256,uint256,uint256,uint256)", +"32f6438b": "setCFO(address,bool)", +"32f72c27": "remove(int256)", +"32f72e39": "setSubmissionDeposit(uint256)", +"32f7470b": "DATE_31_DEC_2018()", +"32f76167": "isLockedWalletEntity(address)", +"32f76c11": "didTradePosition(bytes32,address,address,uint256,uint256)", +"32f7b41b": "setCCH_edit_29(string)", +"32f8290c": "returnMachine()", +"32f896af": "getSettingIdByTAOName(address,string)", +"32f8d1e4": "RockCoin()", +"32f8db38": "mainSaleMinEth()", +"32f8e034": "finalizeIcoDate()", +"32fac3a3": "listAddresses(bool,bool,bool,bool,address[])", +"32fb082f": "hasOrderedRobotParts(uint256[])", +"32fb5833": "AutomatedExchange()", +"32fb9860": "getSettledScoreAmount()", +"32fbe8d3": "setSavedBalance(uint256)", +"32fd8478": "artistCommission(uint256)", +"32fe334b": "totalEtherPaid()", +"32fe5afc": "setICOEthPrice(uint256)", +"32fefb4c": "add_account(address,address)", +"32ff6e21": "setAirDropToken(address)", +"32ffe442": "getExpectedPrice(address,address,uint256)", +"33007cdf": "deposit(address,uint152)", +"33012507": "addMemberInternal(address)", +"33016c6a": "FOUNDER_FUND_3()", +"3302363b": "_nextMonth1stDayTimestamp(uint256,uint256)", +"33026bb6": "addDeposit(address,uint256)", +"330278e0": "betPlaced(address,address,uint256,uint256)", +"3302ece0": "setStopDate(uint256)", +"33039d3d": "MAX_TOTAL_SUPPLY()", +"3305cf85": "weiToCap()", +"33065ac5": "firstTokenId(address)", +"330696c8": "PREMINER_CHANGED(address,address,address)", +"330738a3": "KetherHomepage(address,address)", +"3308ecf1": "coinanx()", +"3308f42d": "getPlayer()", +"33091bd2": "returnTokenBalance(address[2],uint256[7],uint8,bytes32[2])", +"33099beb": "theCyber()", +"330a4822": "_createOrder(address,uint256,uint256,uint256)", +"330aa207": "frozenAccountCoinByTime(address,uint256,uint256)", +"330ae38f": "disableAmbassadorPhase()", +"330ae7b3": "addUserBattleValue(address,uint256)", +"330c3fe5": "finalise(address)", +"330c4ce0": "burnedToken()", +"330ca427": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", +"330cbc75": "createEdition(uint256)", +"330d57f9": "maxbuyinQuantity()", +"330f412b": "MorphToken()", +"330f9588": "xrt()", +"330fb148": "setETHRateAgent(address,bool)", +"330fb4a3": "putEther()", +"330fd319": "MMTOKEN()", +"33102ff9": "openRoom(uint256,uint256)", +"33105218": "isVerifier(address)", +"331172f3": "getDisputeRoundDurationInSeconds()", +"33132860": "EcRecover(bytes32,bytes)", +"331350ee": "finishAllocation()", +"3313d27e": "verifyAllSigned(uint256,uint256[3],uint256[3],uint8[176])", +"3313d9bf": "bytesToString(bytes,bytes1)", +"3313e95d": "strcpy(string,uint256,string)", +"33140016": "feesByPeriod(address)", +"331450dc": "minerPreTime()", +"3314b33a": "BoardMeetings(uint256)", +"3314b62d": "AuPetitCoinToken()", +"3314c351": "Trade(address,uint256,address,uint256,address,address,uint256)", +"33158ba4": "openNetfRevenueRound(uint256)", +"331670c5": "getIsEnabled(uint256)", +"3316d122": "log(uint32,address,address,uint256,uint256,uint256)", +"331725b5": "callAndReward_0(string,string,uint256)", +"3317bbcc": "getLockedTokens()", +"3318d4a5": "incomeFees()", +"33195fca": "getApprobation(uint256,address,address)", +"3319bf1a": "upgradeGalleass(address)", +"331a6bf5": "setOwnerAddress(address)", +"331a72bb": "s7(bytes1)", +"331a72d1": "getRetractable(bytes32)", +"331a9d73": "availableSTCTokens()", +"331b6f66": "sizeOfAddress()", +"331c4594": "TalentICO()", +"331c55b4": "addTeamTimeMints(address,uint256,uint256,bool)", +"331c5d60": "LogSetName(string)", +"331d03d1": "BubToken(address)", +"331d8e5d": "unlock(address,address,bytes)", +"331e58a1": "adjustedRaised()", +"331e6b78": "setToNotForking()", +"331eac01": "SendPreReserved1()", +"331fbc1d": "tokensCreationMin()", +"331fef86": "bonusStrategy()", +"33210356": "setDelegadoDeDistrito(bytes32,uint256)", +"332129a7": "getJYPCBonus(uint256)", +"3321c76c": "RITUAL_COMPENSATION()", +"33223f1b": "materializeBalanceIfNeeded(address,uint256)", +"33228b9b": "E_AuctionFinished(address,uint256,address,uint256,uint256)", +"33232609": "blake2b(uint64[],uint64[],uint64)", +"33242b60": "getODEMClaim(address,bytes32)", +"332514d8": "totalT8EXSold_PRIVATE()", +"332559d3": "getcanuse(address)", +"33260fe7": "getInteractionPrice(address)", +"332659e0": "getBountyAddres()", +"33267961": "run2(uint256,bytes32[],uint256[],uint256,uint256,uint256,uint256)", +"3327057c": "Arina_judgment()", +"33271a3b": "getTokensPerWave(uint256)", +"33278aae": "setUntradeable()", +"3327f4fa": "setInstrumentRegistry(address)", +"33281815": "getRate(address,uint256,uint256)", +"33283e59": "usedReveralSupply()", +"33285fb4": "confirmAtkPlayerQuest(address)", +"33287446": "setMinTokensRequiredForMessage(uint256)", +"33289a46": "withdrawDeposit(uint256)", +"3328bd24": "lockAddress(address,uint256)", +"3328d3f0": "numberOfDates()", +"3328f396": "totalLevBlocks()", +"33291126": "_tavern(uint256)", +"332954c0": "YumeriumTeamWallet()", +"3329578b": "SpectrumNetwork()", +"33298e25": "invoke(uint256,uint256)", +"332a2219": "_goodAddress(address)", +"332ad859": "buyTokensBonus(uint256,uint256)", +"332ae26c": "test_insert_findNoHintUpdateHead()", +"332b0b34": "oraclize_randomDS_getSessionPubKeyHash()", +"332b3177": "totalTimelockedBeneficiaries()", +"332b9f06": "consumeNextOrderId()", +"332bb4c1": "approvalCallback(address,uint256,bytes)", +"332c26d6": "getSecretAtLevel(uint256)", +"332db078": "setTicketsPerPlayerLimit(uint256)", +"332e1a81": "getContributors(bool,bool)", +"332e25be": "getCCH_edit_19()", +"332ea814": "amIAgent()", +"332ea9ed": "VRCoinCrowdsale(address)", +"332eb83e": "steal_reveal(address,uint256)", +"332ec5f9": "unblockMember(address)", +"332efa80": "clearNewOwnerBid(address,uint256)", +"332f7acf": "amountCollected()", +"332f7d6e": "Lpktransfer()", +"332f93a9": "nextPayoutGoal()", +"332fa285": "nextGameMaxBlock()", +"332fa5bb": "ownerCountInt()", +"332ff6f9": "Buyin(address,uint256,uint256,uint256)", +"3330a6bd": "set_min_max_CWCsPerReturn(uint256,uint256)", +"3331f391": "giftAsset(address,uint256)", +"33324445": "changeClientCategory(address,uint256)", +"3332baa3": "PreSaleDeadline()", +"3332f720": "transfer_remaining_funds_to_project()", +"333432fe": "_withdrawBonuses(bytes32,uint256)", +"3334f1f8": "getAmountWithBonus(uint256)", +"3335aa78": "eRefund(address,uint256,string)", +"33360632": "getNumParameters()", +"33360978": "EndTime()", +"3336d5e5": "addABaddress(address,address)", +"33377f32": "turnOnFurnace(bytes32,bytes32,bytes32,bytes32)", +"33379137": "transferCoinToUser(address,address,uint256)", +"333885a0": "createBill(address)", +"3339451b": "fireDeliveryProposalEvent(address,uint256)", +"33397816": "withdrawAccountBalance(address)", +"3339f96d": "floaksAddress()", +"333a653e": "PeakAssetCoin()", +"333ab570": "WeiSent(address,uint256)", +"333abd90": "acceptKinTokenOwnership()", +"333aed82": "nextGameSettings()", +"333bfec5": "delegatedSignedEscrow(bytes,address,address,address,uint256,uint256,uint256)", +"333cfa14": "checkBlockMature(uint256,uint256)", +"333cffe5": "withdrawWithholding(uint256)", +"333dbda8": "paymentsInOtherCurrency(uint256,uint256)", +"333e1a72": "investorsLoses()", +"333e5180": "setOperatorPrivileges(uint256,address,bool)", +"333e99db": "isBlacklist(address)", +"333f55ed": "managerSelfRemove()", +"333f57b3": "contractStarted()", +"333f7f70": "changeFrozenStatus(address,address,bool)", +"33403a81": "_calculateWinner(uint256)", +"334191f7": "donatorReward()", +"3341b445": "proposals(address)", +"334249a7": "getProviderCountry(uint256)", +"334340d2": "EthCoin(address)", +"3343c18c": "AddBTCTransaction(address,uint256,uint256,bytes4)", +"334460a4": "createMetadata(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", +"3344e0b3": "WWW()", +"33455dd0": "PRICE_5()", +"3345854d": "NewGame(bytes32,bytes32,bytes32,address,uint256)", +"3345b65f": "listNextFourCards(uint128)", +"3345b784": "tokenSaleWeiMin()", +"33465c5f": "auctionStartTime(uint256)", +"3347d025": "teamUnlock3()", +"3348904b": "amountOfBets()", +"3348cad7": "_breedWith(uint40,uint40)", +"3348f537": "massClaimLimited(uint256,uint256)", +"33492138": "joinFraction(uint256,uint256,int16)", +"3349bc19": "nonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2])", +"334b8771": "AIRDROPBounce()", +"334b9f14": "initializeArray(uint256)", +"334c5997": "JavaSwapTest(uint256,string,string)", +"334cc3e5": "TimeDecayingTokenFactory(bool,address)", +"334d86bf": "getPI_edit_7()", +"334dc700": "CanaryV7Testnet()", +"334df120": "getBeneficiaryById(address,uint256)", +"334ef224": "testThrowsUpdateLatestRevisionNotOwner()", +"334ef43d": "tokensToCounter(uint256)", +"334f0611": "cnd()", +"334f22c7": "getUrl(bytes32)", +"334f45ec": "currentStepIndex()", +"334f5224": "bettorMap(address)", +"334fe638": "getProvisionCreditsRemaining(address,uint32,uint256)", +"33500e26": "bid(uint8)", +"33506115": "setPauseSave()", +"335094c2": "setPreICOEnd(uint256)", +"3350ae36": "fitCollectedValueIntoRange(uint256)", +"3350b915": "setDungeonPreparationTime(uint256)", +"3350c3ba": "BlockEstateToken()", +"33512aa9": "getUserReward(address,bool,bool)", +"33513739": "lowerCeiling(uint256)", +"335154ed": "setRateSteps(uint256[],uint256[])", +"3351886e": "getFilm(uint256)", +"3351ee19": "donatePurchase(uint32)", +"33533e84": "NeterContract()", +"33545d48": "setIdentity(address,address,string)", +"3354741a": "eveFromEth(uint256,uint256)", +"335494a4": "getMintingPowerById(uint256)", +"3354d682": "destroyVoxel(uint8,uint8,uint8)", +"335611d9": "makeOrder(uint256,address,address,uint256,uint256)", +"3356294b": "setAyantDroitEconomique_Compte_3(uint256)", +"335665c4": "canBuyCompany(bytes32)", +"3357162b": "initialize(string,string,string,uint8,address,address,address,address)", +"335721b0": "NewResolver(bytes32,address)", +"33575f64": "buyRank(uint256)", +"3357db75": "SALE_ENDED()", +"33580959": "poolFees()", +"33588dfa": "doCalculateRoom(uint256,bytes32)", +"3358d2d3": "buildDSTokenFrontend()", +"33592a1f": "getProviderById(uint256)", +"335a6b7d": "Wicflight()", +"335aa61a": "setMaxPrizeOneDay(uint256)", +"335ae0cb": "GetEscrowBalance()", +"335b496e": "totalTransfersInSchedule()", +"335b52f2": "initGameAt()", +"335b61e8": "enableArea(string)", +"335b7c13": "phase5EndBlock()", +"335b942a": "arbitrateC4FContract(address,uint8)", +"335c8b63": "packPrice()", +"335d43a3": "Kubera()", +"335e8067": "tricklingSum()", +"335eb60f": "getCoursesLength()", +"335f463d": "DVChain(uint256,string,string)", +"335f5642": "getinfowin(address,uint256)", +"335f9303": "PunchToken()", +"335fba7e": "calculateRedeemReturn(uint256,uint256,uint32,uint256)", +"336077c3": "getApprovedBuyer(address,address)", +"3360ac90": "transferByOwner(uint256)", +"3360caa0": "publicSaleStart()", +"336120fe": "removeTokenList(address,uint32)", +"336137c8": "updateMember(address,uint256)", +"33613cbe": "getBondBalance(address)", +"33637d5a": "getPendingBlock(uint256)", +"33641775": "change_sale_address(address)", +"336481d4": "dSetCommunityBallotsEnabled(bytes32,bool)", +"3365aa3b": "description2()", +"3365d358": "addContractAddress(address,address)", +"336634bb": "MASIKIToken()", +"3366eeb2": "getLockedToken()", +"33670c1c": "SupportsInterfaceWithLookup()", +"33677c30": "recycling(address,uint256)", +"3367aeb2": "maxPVB()", +"33683ec6": "safeHolderOf(uint256)", +"3368a120": "dividendBalance()", +"3368db4f": "DCE_Coin()", +"3368e968": "init(bytes32[])", +"336989ae": "customers(address)", +"3369c33d": "pregnantDogs()", +"3369c3b6": "ReturnEthersFor(address,uint256)", +"3369dace": "flipTheCoinAndWin()", +"336abddc": "allocateCash()", +"336b739a": "setCovmanager(address)", +"336b9f80": "updatePublisherFee(address,uint16)", +"336c6d39": "setPrizePool(address)", +"336c9b97": "_updateEditionTypeLookupData(uint256,uint256)", +"336ce69e": "CyberyTokenSale()", +"336da059": "MAX_TOTAL_TOKEN_AMOUNT_OFFERED_TO_PUBLIC()", +"336e24aa": "getQuestionAnswerCount(uint256)", +"336fa72c": "addTransferableAddress(address)", +"3370204e": "enter(bytes8)", +"33705526": "p5()", +"337176cd": "getVideoGameItemOwner(uint256)", +"337188d9": "secSaleSpenderTxDetails(uint256)", +"33722c47": "testGetLawyerAtIndex()", +"33731c04": "plxToken()", +"3373739b": "usedTokens()", +"33739483": "etlContract()", +"33751fec": "WeatherToken()", +"33756534": "LogVote(address,bool,uint256)", +"33759ee1": "CrowdSaleTokenPurchase(address,address,uint256,uint256)", +"3375e38a": "CreatedBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", +"3376887a": "test_oneValidEqInt2()", +"3376e2dc": "callDividendAndUserRefund()", +"33771860": "setGoldContract(address)", +"337748b8": "StartFuseaNetworkDistribution()", +"3377f212": "set4RoundTime(uint256)", +"33783b9e": "PapaToken()", +"3378eb29": "ElectricQueue(address)", +"33791c36": "Fundraiser(address,address)", +"3379d7a3": "greedyowner()", +"337a693c": "AkiCoin(address)", +"337a8cdb": "allowMoveTokens()", +"337b1cf9": "setIpfsHash(bytes)", +"337b5988": "testSimpleNameRegister()", +"337b68ba": "takenProfit()", +"337bd656": "HashSolved(address,string,bytes32)", +"337c1e28": "getIndexRoot(bytes)", +"337c445d": "increaseWordSize(string)", +"337cc706": "transferContract(string,string,string,string,string)", +"337d2aea": "PHASE3_START_TIME()", +"337f4c46": "gameDeveloper()", +"3380104a": "Streamity()", +"3380c0d8": "cancelTransaction(uint256)", +"338116b0": "checkContract()", +"3381ffe0": "transferTrusteeOwnership(address)", +"338246e2": "minSwapAmount()", +"3382ac57": "customCreateTokens(address,uint256)", +"3382ddab": "tokenBurnAddress()", +"33833037": "allBalance()", +"33835161": "setConfig(uint256,uint256,uint256,uint256,uint256,uint256)", +"3383e335": "LogTake(bytes32,bytes32,address,address,address,address,uint128,uint128,uint64)", +"33840712": "checkImageInput(address[16],uint256,uint256,uint256[],bool,bool)", +"338410f2": "setUnicornBreeding(address)", +"33848008": "newDepositWallet(address)", +"33849e55": "voteOnSolution(uint256,uint256,bool)", +"3384d2af": "PARKToken()", +"3384e128": "soldSS()", +"33862708": "changeServiceAddress(address)", +"33862914": "SOYA()", +"33863ed9": "order(uint256,uint256)", +"3387e52f": "LLV_311_EDIT_3()", +"33882479": "multiplyDecimalRound(uint256,uint256)", +"3388e429": "ecrecoverDecode(bytes32,uint8,bytes32,bytes32)", +"3388fa72": "Duranium()", +"33893071": "checkMyWithdraw(address)", +"3389f273": "setManyAllocations(address[],uint256)", +"338a0261": "rhi()", +"338a1379": "_setPackedBlockNumber(bytes20,uint256)", +"338a63a4": "_createKitty(uint256,uint256,uint256,uint256,address)", +"338b5dea": "depositToken(address,uint256)", +"338bfcd6": "refundTokensPresale(address[])", +"338cdca1": "request()", +"338d43f6": "_decrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"338dbf59": "startPrivateSale()", +"338dfafa": "HVNToken()", +"338e22ff": "ProcessablesMock()", +"338e4fd6": "setTokenForSale(uint256,uint256,bool)", +"338e579e": "tryFinalize()", +"338e93d1": "active_dividend(address)", +"338ed326": "createCustomCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,address)", +"338ef191": "GetBetGamblers(uint256)", +"338f3039": "amountAvailableToWithdraw()", +"338f43a0": "getReservedTokensListValInTokens(address)", +"338f4ad6": "withdrawMineralTo(address,uint256)", +"338f4dd9": "limitTier2()", +"338ff5e3": "updateInvested(uint256)", +"33902973": "createReserveTokensVault()", +"33904cb1": "MasterNet(uint256,string,string)", +"33905d41": "highFunding()", +"3390e6c7": "getIsSecondPhaseBySoldedTokens()", +"33911763": "greenshoeActive()", +"3391c265": "transferManagment2(address)", +"33920f65": "getEarliestPosition(address)", +"33921b2c": "DEXHIGH_V1()", +"339282b7": "isRegisteredAuthority(address)", +"3392f927": "hasConverted(address)", +"3392ffc8": "testExp(int256,int256,uint256)", +"3393385f": "disableUpdates()", +"3393780f": "DdosMitigation()", +"3393b069": "nothingLib2()", +"339594f9": "logMarketMailboxTransferred(address,address,address,address)", +"3395dc70": "acceptTransfer(address,address,uint256)", +"33966cb6": "_bid(uint256,address,uint256)", +"33967c74": "isZero(bytes32,string)", +"3396c405": "tokensAreLiquid()", +"3396c780": "b21TeamTokensAddress()", +"3397c60a": "getpubprize()", +"3397ca17": "numBalanceRecords(address)", +"3397d5d5": "setTokenPrice(uint8)", +"33985caf": "Exera()", +"33989396": "requestNewEtherRealID(string,string,string)", +"339a7670": "mineToken(uint256)", +"339a95f6": "secondCrowdSaleEndDate()", +"339ab6f2": "getPurchaseAmount(address)", +"339ac174": "playerSurrender()", +"339b6b39": "isRevokedBefore(bytes32,uint256)", +"339cfb9a": "isHolderAddress(address,address)", +"339e23d1": "ownerVote(bytes32,uint256,address)", +"339e2604": "setPayBackRate(uint256)", +"339e2c45": "isRegisteredToFirm(string,address)", +"339e9550": "_sendReward(uint256)", +"339f890d": "setMinBlockPurchase(uint256)", +"339fd959": "getLockAmount(address,address)", +"339ff96d": "transferCommitment(address)", +"33a02a6d": "openLandEthSale()", +"33a02c22": "betAdded(uint256,uint256,address,uint256)", +"33a263e6": "peggedSymbol()", +"33a27f75": "estimateNextPotSeedAmount()", +"33a3b654": "managementAmount()", +"33a3d023": "finalizationCrowdsale()", +"33a3e669": "setClientLastPaidRate(address,uint8)", +"33a4ec8d": "NCMToken(uint256,string,string)", +"33a581cd": "createPeerWallet(address,address[],address[],uint256[])", +"33a581d2": "MAX_UINT256()", +"33a5bae4": "verifyTx(uint256[2],uint256[2][2],uint256[2],uint256[5])", +"33a5ec7e": "changeTokenAmount(uint256)", +"33a738c9": "_executeTransfer(address,address,uint256)", +"33a7d2e3": "BONUS_DURATION_2()", +"33a8319e": "EtherJob()", +"33a87ade": "gasInTokens()", +"33a8c45a": "contact()", +"33a8dc1d": "nextPack(uint256)", +"33a9824a": "PopulStayToken()", +"33a99e04": "selectWinner()", +"33aac4aa": "BaseModule()", +"33ab0541": "setBaseLevelUpFee(uint256)", +"33ac2009": "countValidations()", +"33ac67c3": "ShowChargeCount(address)", +"33ac7256": "getParent(bytes32,uint256)", +"33ad846d": "getStringValue(string)", +"33ad9495": "WithdrawPotShare()", +"33adb264": "invokeTop()", +"33ae6e19": "distributeTimelockedTokens(address,uint256)", +"33ae7166": "tier4()", +"33ae88ad": "numberOfKingdoms()", +"33af060f": "accountInGoodStanding(bytes32)", +"33b0f7f7": "paidCreateWikiPage(string,string,string,uint256)", +"33b1503d": "PostWish(address,uint256,bytes,bytes,uint256,uint256)", +"33b16d93": "determineWinner()", +"33b186c1": "AdvisorsPartnersAmount()", +"33b19417": "NodeManager(address[])", +"33b1f812": "totalPromotions()", +"33b37915": "setOrderEnd()", +"33b3dc04": "castVote(string,uint8)", +"33b416db": "BaseICOToken(uint256)", +"33b56638": "testGetAllLawyers()", +"33b58484": "WEEKS_104()", +"33b5b62e": "minPurchase()", +"33b5fa75": "buyTokensWithRef(address)", +"33b6baf5": "developerAddr()", +"33b7d187": "getDCategory(bytes32,uint256)", +"33b85b73": "modifyCommunityRates(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"33b8b1c1": "transferInt(address,address,uint256,bool)", +"33b8c29d": "updatePriceOfEth(uint256)", +"33b91db5": "GetTocPrice()", +"33b9d3f4": "_buyCoins(address,uint256)", +"33ba2ef9": "hipstermasterReq()", +"33bb70ee": "getCoinAge()", +"33bbae93": "end_date()", +"33bc1c5c": "publicSale()", +"33bc6283": "TruReputationToken()", +"33bd8036": "addressPayableFunc(address)", +"33bd943e": "abandonListingService(uint256)", +"33bebb77": "forceTransfer(address,address,uint256)", +"33bfaf4e": "MickeyToken()", +"33bffccc": "openPreSale()", +"33c023ef": "doInvestment(uint256,address,string,uint256,bool)", +"33c1420a": "raffle()", +"33c24bd3": "accountIds(uint256)", +"33c4a1d6": "SetScndOwner(address)", +"33c5da42": "setGaspriceMax(uint256)", +"33c6c1af": "setCentralAccount(address)", +"33c6cdd3": "modifyRatePlan(uint256,string,bytes32)", +"33c724ee": "setLosers()", +"33c74e79": "participantContribution(address)", +"33c77a6d": "pauseICO()", +"33c7b38f": "withdraw_to_eti()", +"33c7c026": "feePayment()", +"33c7d1cc": "restart(bool)", +"33c84990": "setNewClaimer(address,address)", +"33c8adce": "enterLeague(uint256[],uint256,bytes)", +"33c90632": "createTransferAuction(uint256,uint256,uint256,uint256)", +"33c91611": "safePay(uint256,uint256,address,bytes)", +"33c9b83c": "preIcoSoldTokens()", +"33c9ccf5": "isKeyOwner(bytes32,address)", +"33c9f271": "get_project_information(uint256,address)", +"33ca4773": "getBrandData(address)", +"33ca55d7": "requestTransferChildrenOwnership(address)", +"33caaa43": "tokenRewardContract()", +"33cbee23": "teamTwoDivsTotal()", +"33cc4f9f": "FIDAToken()", +"33cc9c3e": "getLuckyPendingSize()", +"33cd3383": "investmentsOf(address)", +"33cd7ede": "totalJackpotOdd()", +"33cdfc76": "accountOf()", +"33ce1cda": "JSJC()", +"33ce724a": "sendSoldTokens(address,uint256)", +"33ce7787": "transferInvestorAccount(address,address)", +"33ced321": "genLevelExp()", +"33cf3ca0": "icoDeadline()", +"33cf58f9": "Accepted()", +"33cfc5e3": "DEFToken()", +"33d020ae": "getManifestId(address,bytes32,bytes32)", +"33d072e2": "processFunds(address,uint256,uint256,bool)", +"33d0a56b": "Melt(address)", +"33d14097": "DoRollEvent(address,uint256,uint256,bool,bool,bool,bool,uint256,uint256,uint256)", +"33d1e5b9": "lockupAccount(address,address,uint256)", +"33d24dc4": "setTypeAdvantages()", +"33d2cea2": "getDiceWinAmount(uint256,uint256,uint256)", +"33d34bad": "nextlotnr()", +"33d52c71": "ico3Cap()", +"33d58ca6": "F2UToken()", +"33d59f0a": "setJobStatus(uint256,uint8)", +"33d5d29b": "containsOperator(address)", +"33d5e4ca": "LogErrorMsg(string)", +"33d634df": "getSpinResults(uint256,uint256,uint256,address)", +"33d63869": "icoReserveSupply()", +"33d64a6f": "Start_Resume_ICO()", +"33d6c065": "PenCrowdsale(uint256,address,address)", +"33d764a2": "transferPreSigned(bytes,address,uint256,uint256)", +"33d9529a": "Totalbalance(address[])", +"33d97457": "GRAPE_SECS_TO_GROW_VINE()", +"33da67a0": "setForceNsfw(uint16[],bool)", +"33daaa5e": "setMakerFeeRate(uint256)", +"33db82fd": "outToken()", +"33dd1b8a": "setAllowed(address,address,uint256)", +"33dd5fb8": "TransferAntique(bytes32,address,address)", +"33dddc3a": "openLootbox(address)", +"33de06d5": "changeEscapeHatchCaller(address)", +"33de61fb": "Marvin()", +"33de96c6": "cancelTransaction(address)", +"33decdc6": "returnVolAdjuster(uint256)", +"33df4155": "setSPARCAddress(address)", +"33dfc93c": "untokenizePosition(bytes32,address)", +"33dfe91d": "isDefValueInRange(uint8)", +"33e06ee7": "buyTokensAtRate(address,uint256)", +"33e11ec4": "getBcouponTransferCost()", +"33e13ecb": "Execution(uint256)", +"33e2df5c": "newTeamCreated(bytes32,bytes3,bytes3,bytes3,bytes3,bytes3,bytes3)", +"33e2df5d": "isTokenValid(string)", +"33e335a0": "fromPaymentGateway(address)", +"33e364cb": "resumeSale()", +"33e36c50": "FundsLoaded(uint256,address)", +"33e3e86a": "isValidSan(string)", +"33e5bce1": "allow_spend(address)", +"33e663a4": "BonusEarned(address,uint256)", +"33e665eb": "setMonsterAuctionAddress(address,address)", +"33e67012": "disableChain(uint256)", +"33e712fe": "functionEight()", +"33e747b3": "setCapAtWei(uint256)", +"33e7ed61": "submitPool(uint256)", +"33e7fb97": "modifyExecutorAddr(address)", +"33e85eac": "get_king_price()", +"33e8b084": "dePesoToken()", +"33e8b8ac": "setFounderAllocation(address,uint256)", +"33e8df7e": "get_property_address(uint256)", +"33e90f98": "migrateMntp(string)", +"33e9698c": "tokenIssueDeadline()", +"33ea3dc8": "getTransaction(uint256)", +"33ea7a2b": "setBundinha(string)", +"33ea80cb": "getProposalUint(int256,uint256)", +"33eb5564": "mid(uint256,uint256,uint256)", +"33eb647f": "ECNcoin()", +"33ee2297": "MintedGrey(address,uint256)", +"33eeb147": "isFrozen()", +"33ef5698": "setShareTradingEnabled(uint256,bool)", +"33f0779d": "sendWhitelistReferralRewards(uint256)", +"33f08327": "generate_paymentID(uint256)", +"33f1da25": "BiQToken(address,address,address,address)", +"33f1dfb5": "withdrawTokenByAdmin(address,uint256)", +"33f2da95": "test_insert_findWithHintNextUpdateTail(int256)", +"33f2e7f8": "takeOffer(uint256)", +"33f30a43": "getNarco(uint256)", +"33f3197e": "Bet(uint256,string)", +"33f327be": "FeemCoin()", +"33f3344c": "readQuantity(address,uint256)", +"33f35c40": "webdToken()", +"33f37304": "tTokens()", +"33f44026": "mintFoundingTeamTokens(address,uint256)", +"33f4406a": "addressCommunity()", +"33f472b9": "MPO()", +"33f50b1c": "extendICO()", +"33f707d1": "ownerWithdraw(uint256)", +"33f7c9fe": "UsersList()", +"33f8845d": "GetTotalRigCount()", +"33f88d22": "mintOwner(uint256)", +"33f8e8c7": "getUserTokenInfosLength()", +"33f9942b": "awardPoint(bytes32)", +"33f9b36f": "getIcoStartDate()", +"33fa59f0": "creationProfit()", +"33fb1e05": "withdrawChamp(uint256)", +"33fb9e35": "killSelf(uint256)", +"33fba1ed": "_getFightData(uint32)", +"33fbff32": "setSaler(address)", +"33fc56d9": "withdrawUnclaimed()", +"33fc5f47": "proposePurge(address,bytes32)", +"33fc6367": "updateRefundState()", +"33fcffa8": "Option(uint256,uint256,string,string,string,string,string,string,bytes32,address,string,address,uint256)", +"33fd066d": "doBalanceFor(address)", +"33fd40ec": "oraclize_query(string,bytes[4],uint256)", +"33fd9397": "buyBackPriceWei()", +"33fdb097": "BTSC()", +"33fdbbe5": "DECIMAL_FACTOR()", +"33ff588d": "ownerChangeRunning(bool)", +"3400a6dd": "crowdsale(uint256,uint256,uint256)", +"3400d00d": "PayTokens(address,uint256,uint256)", +"3401c277": "subtractAmount(address,uint256,uint256,uint256)", +"3402b841": "closeVoteCommitPhaseIfAllowed(address,bytes32,bytes32)", +"34032f4f": "teamSupply12Months()", +"3404ab6a": "calcEthersToTokens(uint256,uint8)", +"3405321d": "_setPrice(uint256,uint256)", +"34057a45": "rollAddress()", +"3405ae40": "setMaxSubscribers(uint256)", +"3405deed": "alwaysReverts(uint256)", +"34065b66": "getSmallBonus()", +"3406784d": "arbitrateC4FContract(uint8)", +"3406956a": "bountyTokenFund()", +"340695c0": "PRESALE_RATE()", +"3406e3fb": "singleTransGasCost()", +"340700e5": "Satochi4()", +"34075cbd": "proposalStatuses(uint256)", +"34083a28": "HoneyToken()", +"34085549": "buildAt(uint256,uint256,uint256)", +"340867a0": "setMiniPoolEdit_1(string)", +"3408f73a": "getStorage()", +"340955fc": "isNotDuplicateMembers(bytes32)", +"3409952b": "setStorageInterface(address)", +"340a247c": "getQueryCost(string)", +"340a773a": "LockedToken(uint256,string,string)", +"340adb29": "getExportingParty()", +"340dc485": "addEmailHash(uint256,address)", +"340ddda6": "MeatConversionCalculator(uint256,uint256)", +"340df28f": "finishUpgrade()", +"340e47f8": "activateStore(string,bool)", +"340e4fd5": "totalRequestsAmount()", +"340ea558": "isFavorEscrow(uint256,address)", +"340f4fea": "setBetExpirationBlocks(uint256)", +"340f5920": "winningTicketNumber(uint256)", +"340f5e4e": "get_all_num_levels()", +"340fef94": "MMMbCoinCrowdsale(uint256,uint256,uint256,address,address,address,address)", +"34100027": "withdrawLegalContingencyFunds()", +"34103ee4": "setCrowdsaleAgent(address)", +"3410452a": "getRequestsCount()", +"34106c89": "updateRenExTokens(address)", +"34107282": "signer1()", +"3410cbd5": "layersRec(uint256,uint256)", +"3410eb5b": "userRefundTo(address)", +"3410fe6e": "DIVISOR()", +"3411231c": "ANXToken()", +"341176d6": "crowdsaleManager()", +"34119d15": "setSellFeeBps(uint256)", +"3411c81c": "confirmations(uint256,address)", +"3411cb08": "getFreelanceAgent(address)", +"34122952": "build(uint256,int256,int256,uint8)", +"34127649": "JvaToken(address)", +"3412a15c": "testConnection()", +"3412a4ac": "setFundingEndTime(uint256)", +"34133df9": "TR()", +"341367ec": "getMaxCAP()", +"34140748": "_upgradeTo(address)", +"34145808": "totalRewardToken()", +"3415650e": "buyStatus()", +"3415bdd4": "buyAKeyWithDeposit(uint256,address,uint256)", +"3416f9d4": "subtractSafely(uint256,uint256)", +"34174331": "selfHybridization(uint256,uint256)", +"3417f8d3": "addHolder(address,uint256,uint256)", +"341855bf": "HappyBirthdayToken()", +"341881e6": "endPreIco()", +"34190567": "DebugInt(int256)", +"341912ad": "SOCIALXBOUNTY()", +"341b96c2": "WalletAddressChanged(address)", +"341b9cc2": "ValueToken(uint256,string,string)", +"341bae0e": "refBonusPercentAtNow()", +"341bcbc1": "endIco2()", +"341c3304": "presaleTokensSold()", +"341cc817": "preicobrandingWallet1Pct()", +"341ceb42": "updateAmountOfEachChoice(uint256,uint256)", +"341f13f2": "authorizeDeploy(address)", +"341f5ee2": "omsairam18()", +"341f6623": "toAddress(bytes32)", +"3422e048": "getFirstTokens()", +"3422ede1": "Vault(address,address,uint256,uint256,address,uint256)", +"3422f709": "totalSencCollected()", +"34231e72": "getMyTransferredWine()", +"342368e4": "SubFromDividends(uint256)", +"3423a768": "finalizePreICO(uint256)", +"342442bd": "lockTeamAndReserve()", +"342454c7": "isDigit(bytes1)", +"34247b9b": "changeDBAddress(address)", +"34253af5": "isICORunning()", +"34256ab2": "createQuote(uint256,bytes32,bytes32)", +"34265c48": "releaseTime(address)", +"34273351": "withdraw2(uint256)", +"34289460": "cleanupTo(address)", +"3428e7ba": "checkForNewDay()", +"342930aa": "peekHatch()", +"342b7e71": "setTokenList(address[])", +"342b88ba": "setIcoTier(uint256)", +"342ba8de": "getGen0IVs()", +"342bd327": "GenesisRewardPerBlock(address)", +"342c17cd": "finalReserveAllocation()", +"342ca5d6": "pricePointsLength()", +"342d9185": "pricePerTokenAtCurrentTier()", +"342d9a04": "challengeClearing(bytes32)", +"342e0260": "gettruelevel(address)", +"342e515c": "Electrium(uint256,string,uint8,string)", +"34302882": "ETY(address)", +"34302d82": "midTimeBonusLimit()", +"34306cb8": "placeMessage(string,bool)", +"34309e97": "tokensOwner()", +"3430f7b1": "TitleAdded(uint256,address,uint256,string,string,string,uint256)", +"3431024f": "disApproveUsers(address[])", +"3431a0be": "RegisterSeller(address,string,string,string,string)", +"3432000c": "kittiesContract()", +"343214ae": "isFundFreezePeriodEnded()", +"34334e9e": "removeBlacklistedUser(address)", +"34335c01": "getPresale2()", +"343458e2": "withdraw(uint256,bytes32,address,uint256)", +"34354f93": "ABC()", +"3435dea2": "PoolJoined(uint8,uint8,uint256,uint256)", +"3435e5f3": "newChief(address,uint256)", +"3435ea80": "adduser(address,uint256)", +"34364afa": "modifyICOStartDate(uint256)", +"34376542": "OwnerUpdate(address,address)", +"34376ca0": "authorizeBurner(address)", +"3438c758": "DelayedPayments(uint256,uint256,uint256)", +"34399ea8": "considerCurrentInterest()", +"3439b433": "RSPLT_E()", +"343a875d": "getUint8()", +"343a8d56": "Lucky888Token()", +"343aad82": "flow()", +"343ab4cd": "getMiningPoolAddres()", +"343ab68b": "getFreelancerContractsCount(address,address)", +"343bd7eb": "insertOwner(address)", +"343c018b": "GarudaToken()", +"343d5048": "FighterCore()", +"343dbeb6": "isServiceRemoved(address,uint32)", +"343dfb7e": "referralPercent()", +"343efc6c": "WorthlessToken()", +"343f3acb": "GetAllBetIDs()", +"343f40a0": "testFailCreateSameItemId()", +"343ff8c7": "deductshares(uint256,address)", +"3440465e": "addElement(bytes32)", +"34406f33": "sha3Docs(bytes32)", +"344090f2": "Ownable1()", +"34409e38": "_generateNewSaddle(uint256,uint256,uint256,address)", +"3441ecf2": "Calculator()", +"34428440": "tokenExchangeRateMile1()", +"3442a868": "getBtcForkCoins()", +"3443c64a": "changeEEMWallet(address)", +"3444189b": "newKudosPoll(string,string,uint8,uint256,uint256,uint256)", +"34452f38": "disableMint()", +"3445679a": "USDto1ETH()", +"34457cbe": "ExponentialDecayingTokenFunction()", +"344605f4": "ETFloorPresale(address)", +"344615ab": "unSell()", +"3446bac4": "retirarDividendos()", +"34475d8d": "getERC721Addrs(uint256)", +"3447a7ef": "addInWhiteList(address)", +"3448348d": "getEventSize()", +"34484b47": "functionSix()", +"34486434": "ConsentFactory()", +"3448c7d6": "createHistory(bytes,address,address)", +"3448ec4a": "checkMatchBatch(address,uint256[16])", +"344929e4": "CTS(uint256,string,string)", +"3449387b": "GetFileLocation(bytes32)", +"3449f61c": "_getBonus(uint256,uint256)", +"344b8386": "firstYearPeriods()", +"344bcc7d": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes,address)", +"344bcd7d": "allCrowdSaleTokens()", +"344c0dd5": "newChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"344c5ea1": "Mino()", +"344c5fd6": "firstPeriodOfICO()", +"344cc2b8": "getAllBidsByAdunit(uint256)", +"344d1ef2": "getCarSelling(uint32)", +"344d9576": "ReinvestWallet()", +"344e23cf": "previligedBalanceOf(address)", +"344eca75": "amountRaisedICO()", +"345006b6": "getGenerationForCall(address)", +"34501134": "get_pre_kyc_bonus_denominator(address)", +"34516038": "getSellCount()", +"34523cbc": "numberOfWhitelists()", +"3452f51d": "push(address,uint128)", +"345393f0": "getOuLianPublicAddress()", +"34552a0a": "RegisteredContract(string,address)", +"34553a44": "getRequiredSubscribers()", +"34556035": "icoCompleteB()", +"345591ec": "inDistributionMode()", +"345607ab": "StoreProofOfUplinePaid(address,address,address,address,address,address,address,uint256)", +"34574ff3": "XFMSold()", +"345899fe": "addRoles(bytes32[],address,address)", +"34592491": "infoWithdraw2()", +"345942c8": "revealBet(address,string)", +"3459b1af": "SaleNew()", +"3459d2ba": "getTilePriceAuction()", +"3459fb6f": "unpack_data_groups(int256[],bool)", +"345a1ae4": "LASTTRIAL123()", +"345a3899": "Insurence()", +"345a4423": "win(uint8)", +"345a5fe4": "addRecoveryAddress(address,uint8)", +"345a8e5b": "uint2bytes(uint256)", +"345ac602": "fixAmount()", +"345b256a": "projectStorageVault()", +"345b3d3a": "newOrder(address,address,string,string,uint256,uint256,uint256)", +"345bc544": "maxAllowedBetInTokens()", +"345c8fca": "setFreezeTx(address)", +"345cad7e": "useItem(address,uint256,uint256)", +"345d116f": "LotteryRoundWinner(address,bytes4)", +"345da007": "setClassName(uint8,string)", +"345e2f91": "transferEarningsToOwner()", +"345e3416": "adminRetrieveDonations()", +"345efa4e": "CurrenseeCrowdsale(uint256,address,address)", +"345f342e": "concludeVoting(uint256)", +"345f58b2": "AcceessoryWrapper721()", +"34610182": "getFuelsIds()", +"34615bef": "_discipleVendPrice(uint256,uint256)", +"3461a5e8": "ARCO()", +"346223f5": "Cocoon(address[],address,address)", +"3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", +"3463934b": "Bqt_Token()", +"3463c5c7": "patentValidTime()", +"3463d76d": "databaseDownloadUrl()", +"34646163": "getDataset(address,uint256)", +"3464af6a": "testCopyAddress(address)", +"3464e4da": "grantTokensCommonPool(address,uint256)", +"3465d6d5": "record(address)", +"346692b7": "tokenKeys(uint256)", +"3466f07f": "DRAKE()", +"34686b73": "numberOfAddress()", +"346896c0": "getMinerLv1(address)", +"3468b4a8": "OxTokenInitialized(address)", +"3469a55b": "getDepositID(address)", +"3469acbb": "initCard2()", +"3469f6e2": "finalizeRound(uint256)", +"346a2f9e": "percentBank()", +"346a37d2": "markComplete(bytes32)", +"346b306a": "oraclize_query(string,string,string)", +"346b783c": "refundToPlayer(address)", +"346b7939": "icoReservedSupply()", +"346bfd9f": "eventBurn(address,uint256)", +"346c1aac": "getNextAvailableBond()", +"346c95df": "SuNFT()", +"346c96e9": "addFund(uint256)", +"346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", +"346cf356": "tradeCards(address,uint256)", +"346e8cea": "allCarsInfo()", +"346e9a26": "getCanWithdraw(address,uint256)", +"346f2eb7": "set_bonus_received(bool)", +"346f5991": "sendTokensToTeamLock(address)", +"346f8827": "addWineryOperation(bytes32,address,string,string,string,uint256,uint16,string)", +"346f9f95": "collectAddr()", +"346fc0dd": "maxCrowdsaleSupplyInWholeTokens()", +"346ff6b3": "getNumRounds()", +"346ffa4b": "changeValues1(bool,bool,bool,bool,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"34701db8": "totalTicketsSold()", +"34705c2f": "validateTransferAmount(address,uint256)", +"3470b833": "blackListERC223(address)", +"34716f67": "post(string,bytes20[])", +"3471728a": "masterContractAddress()", +"3471aef0": "handbreak()", +"3471b034": "Submission(uint256,string,address,address,uint256,string)", +"34721e08": "test0Alice()", +"3473bf30": "setEndingTime(uint256)", +"3473f5e4": "HashOfDB()", +"34746d86": "killTokensForGPower()", +"347518c7": "validPurchaseTime(uint256)", +"34757fa9": "correctPreICOPeriod(uint256)", +"34758cb3": "currentEggPrice(uint256)", +"3475c1e7": "attemptPublishOfArticle(uint256)", +"34762a94": "ethHandleIsRegistered(bytes32)", +"347632e8": "getShareholderAdressByID(uint256)", +"34763586": "FoundersAndPartnersTokensIssued(address,uint256,address,uint256)", +"347637b3": "setBDApprove(address,uint256,bytes32)", +"34766ecc": "PauseOff(uint8)", +"3476aeb0": "signer2_proposal()", +"34771f81": "setData_5(string)", +"34776c6e": "DEAToken()", +"347820eb": "previousUpdateTime()", +"34785e79": "setEthRelief(address)", +"34786d1d": "totalTokensToTransfer()", +"3478ab86": "HYToken()", +"3478ac2b": "createShow(uint256)", +"3478dc44": "getRecordOffers(bytes32)", +"3479101f": "setProviderSupply(uint256,uint256,uint256)", +"34791ae5": "POPPToken()", +"3479f017": "ServiceContract(uint256,uint256[],uint256[],string,uint256,uint256,uint256[],uint256[],address,address,address,address,address)", +"347aa903": "SDOGE(uint256,string,uint8,string)", +"347aba23": "evePerEth()", +"347acf2f": "mintingFactories(uint256)", +"347b3923": "putProfit()", +"347b5193": "LiquexPrivateInvestment(address)", +"347caeb4": "PhxHell(address)", +"347cda88": "needsBlockFinalization()", +"347d5bc2": "setPayoutOdds(uint256)", +"347e26c0": "icoEtherContributed(address)", +"347f5f00": "TokenPurchase(address,uint256,uint256,uint256)", +"347f8f54": "_setDiscount(uint256,uint256)", +"347ff187": "changeAirAmount(uint256)", +"34805e7c": "targetBlockNumber(uint256)", +"34809ee7": "doge()", +"34810336": "discountEndTime()", +"34814e58": "transferBalanceWithFee(address,address,address,uint256,uint256,address)", +"34825a23": "playGame(uint256,uint256)", +"3482e0c9": "cancelAuthorization(address,address)", +"34831b79": "VENSale()", +"34833a6d": "icoBalanceOf(address,address)", +"34835560": "innerlockStartTime()", +"348378d0": "Whitelisted(address,uint256,uint256,uint32)", +"348508cf": "thirdDueDate()", +"34854101": "ETH_TO_WEI()", +"3486645f": "forkReceive(address,uint256)", +"3486fb30": "mintLockPeriodBatch(address[],uint256[],uint256)", +"3487d97c": "setPriceCredentialItemId(bytes32,bytes32)", +"348a653a": "CONFIG_DURATION()", +"348b1b7d": "temperatureMin()", +"348be311": "LogBidOpened(uint256,address,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"348c5b20": "basicApproveTest(address)", +"348e9779": "Restart(uint256)", +"349136af": "BonusScheme()", +"3491a19d": "TokenDemo(string,string,uint8,uint256)", +"3491d0f1": "processTransactionFee(address,uint256)", +"349221be": "ColorCoin(address,address)", +"349296a5": "SaleAuction()", +"3493075e": "getLevelCitizenLength(uint256)", +"3494ab3d": "validEAContract(uint32,address)", +"3494f222": "issueSuperMetal(address,uint256)", +"3495015a": "UnlimitedIPToken()", +"349501b7": "checkDepth(uint256)", +"34950dcf": "approvedSubmissions(uint256)", +"34954a99": "updateBalance(address,address,uint256)", +"34955a2b": "setTavernContract(address)", +"3495b21e": "setNewReleaseEndTime(address,uint256,uint256)", +"349718ed": "MarketCoin()", +"34971dd6": "totalEtherCap()", +"34984add": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes32,address)", +"34988b95": "ExToke()", +"3498aaaf": "LogAllowedFromAddress(address,bool)", +"3498b00f": "getSectionIndexFromIdentifier(uint256,uint256)", +"3498c518": "StageClosed(uint256)", +"349a1f03": "getNumSums()", +"349a373b": "batchcreatevillage(uint256)", +"349a6edb": "_purchaseTokens(uint256,address)", +"349aa97e": "ethereumToTokens2_(uint256)", +"349ab992": "divCutAdmin()", +"349ae23b": "collectFor(address)", +"349b586c": "isCrowdsaleFinalized()", +"349b6486": "revokeGrant(address,uint256)", +"349c1ee3": "enableCrowdsale()", +"349c3d75": "changeSaleBonusRate(uint256,uint8)", +"349c870c": "initChainLedger(address,address)", +"349ca600": "Tags()", +"349cdcac": "reLoadXid(uint256,uint256,uint256)", +"349d1661": "BuyToken(address,uint256,bytes32)", +"349d3dc5": "breedTimeout()", +"349d8b4e": "communityMultisig()", +"349dc329": "miner()", +"349eb329": "jsonCat(string,string)", +"349f7173": "lastOraclePrice()", +"349f939a": "SaleEnded(address,uint256)", +"349fcf85": "UpdateAddressPayForService(address,address)", +"349fdb09": "setUnPaused()", +"34a014dc": "lastWithdrawalTime()", +"34a042d8": "bountyPoolAddress()", +"34a2b766": "getMarketData(address,address)", +"34a3312e": "setStore(string,address,address)", +"34a3b820": "getNewFallbackDepositPeriod()", +"34a4a527": "getCountHolders()", +"34a4b10b": "allocatetokensAndWL(address,uint256,uint256)", +"34a503e8": "_utfStringLength(string)", +"34a5eaa9": "_createPerson(string,address,uint256)", +"34a6074e": "buyWithBalance()", +"34a6301e": "setmessager(string)", +"34a6d832": "canPurchase()", +"34a6e514": "updateTaskState(string,string)", +"34a7ed17": "wikiAddTokenTo(address,uint256)", +"34a814a3": "setMyEthBalance(address,uint256)", +"34a8c392": "webSite()", +"34a8eb53": "getarg_1_input()", +"34a8f866": "setMatured(uint32)", +"34a90d02": "lockAddress(address)", +"34a9918e": "DEWCOIN()", +"34a991db": "enableManager(address,bool)", +"34a9a1ae": "getTokenDefaultPartitions()", +"34a9bb34": "getCurrentPublicBracket()", +"34aa0e7f": "dividendRegistration()", +"34aa982a": "getInfoForDisputeAndValidate(bytes32,address,address,address)", +"34ab32e1": "minerTotalYears()", +"34ab8256": "RUDAWORLD()", +"34abd1b1": "updateMaxPhase3(uint256)", +"34ac6f5e": "AVAILABLE_FOUNDER_SUPPLY()", +"34acc716": "projectDone()", +"34ad1e53": "giveBalance(uint256,uint256,uint256)", +"34ad324c": "sendToOwners(uint256)", +"34ad6f00": "TimePassBy(string,uint256)", +"34ae6984": "view66()", +"34aeefd5": "RemovePlayer(address)", +"34af370f": "lockTime(address,uint256)", +"34b0e5ed": "icoPrice()", +"34b122cb": "addTokensToReturn(address,address,uint256,bool)", +"34b20591": "createERC20Token(uint256,string,uint8,string)", +"34b3ae71": "_distribute()", +"34b3b014": "resolveSupply()", +"34b4eef2": "setStartIcoPreICO2ndRound(uint256)", +"34b55235": "registerAffiliate(address,string)", +"34b63592": "addre(address)", +"34b73591": "DevMiningRewardTransfer(address,address,uint256)", +"34b768c7": "summonHero(address,uint8,int256)", +"34b7ac9b": "END_MINTING()", +"34b88e04": "claimCoreTokens(address,uint256)", +"34b8b690": "Yuri()", +"34b98747": "onlyOwnerGetTeamWallet()", +"34bafed3": "date_string(int8,int8,int16)", +"34bb1a9e": "founderTimeLock()", +"34bb3ee1": "updateEthICOVariables(uint256,uint256)", +"34bb447f": "getDiceWinAmount(uint256,uint256,bool)", +"34bbabbd": "RaffleTshirt(string,uint256)", +"34bc5156": "Crowdsale(uint256,address)", +"34bc98b7": "latestPing(uint256)", +"34bd08c4": "getLargeAmountBonus(uint256)", +"34bdcd0a": "getLedgerValue(string,address,address)", +"34bdea85": "setICO2Phase()", +"34bdf2c4": "setReference(address)", +"34be5fab": "mintParcelTokens(address,uint256)", +"34be9ffb": "confirmApplication(uint256,bool)", +"34beb204": "ZZC(uint256,string,string)", +"34bed16c": "bountyRefund(address,uint256)", +"34bf97ea": "setBonuses(uint256[])", +"34c05ca8": "modifyMetadataHashes(uint256,bytes32,bytes32,bytes32[],bytes)", +"34c0c9c6": "RemoveApprovedAddress(address,address)", +"34c0d654": "setPackageDb(address)", +"34c19b93": "getCallGracePeriod(bytes32)", +"34c1b4ba": "sha(bytes)", +"34c1ef77": "publicSaleTokensAvailable()", +"34c2904b": "giveDividend(uint64)", +"34c2b620": "getNickname(uint256)", +"34c31392": "breakParentsHaveGreaterPriority(uint256,address)", +"34c3236a": "signatureDropSingleAmount(address[],uint256)", +"34c39d1c": "ThreeDLTokenDeposit()", +"34c42106": "BOXT()", +"34c5c059": "addEtherToSphere()", +"34c6766f": "getImportingAuthority()", +"34c6a9ae": "getTokenTimelockDetails(address,uint256)", +"34c721a9": "getExploreResult(uint256,uint256)", +"34c73884": "Mint()", +"34c757cf": "NBAT102(address,address,address,address,address)", +"34c7b8e8": "getReadMessages(address)", +"34c7dcf8": "proposedUserKey()", +"34c8e114": "reservedDestinations()", +"34c8ea26": "SetupiBird(string,string,uint256,uint256,uint256,address,address,uint256)", +"34caa999": "setMinimumFundingAmount(uint256)", +"34cac67e": "investorsArray(uint256)", +"34cad6b8": "retreiveTokens()", +"34cad836": "coinsaleDeadline()", +"34cbbef9": "EndRateChange(uint256)", +"34cc0a12": "_addWhitelister(address)", +"34cc182b": "updateDiamond(string,string,uint256)", +"34cc4b8f": "ratePerWeiInPrivateSale()", +"34cdb15f": "addressToTimestamps(address,uint256)", +"34cdf78d": "blockHashes(uint256)", +"34cec84d": "maxCapCompanyInventory()", +"34d05b1f": "freezeDeliver(address,uint256,uint256,uint256,uint256)", +"34d09ff1": "DemoraCash()", +"34d0cb6d": "CNYToken()", +"34d1c0e6": "transfer_bond_token(address,address,uint256)", +"34d2485c": "tribeTokens(address)", +"34d24bff": "no(uint256,string,uint256)", +"34d2c4cb": "mintProxyWithoutCap(address,uint256)", +"34d31de3": "length(uint8)", +"34d33f9f": "kycRefuse(address)", +"34d40382": "nextSection(bytes32)", +"34d4776b": "removeApprovalStatus(address)", +"34d4cd82": "getTokenForTeam(address,uint256)", +"34d55cd9": "SerpentCountDown()", +"34d56b0a": "Currentproposal()", +"34d5751a": "approveContractCall(address)", +"34d5f37b": "round(uint256)", +"34d5fc4b": "transferInitialAllocationWithTimedLock(address,uint256,uint256)", +"34d609ac": "auditorHasStaked(uint256,address)", +"34d64e50": "getDoneAirdropAmount(address)", +"34d71238": "sencBalance()", +"34d722c9": "minterAddress()", +"34d83dab": "PhaseICO()", +"34d8521b": "quarterlyWithdrawable()", +"34d8c24d": "init(uint256,uint256,address,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"34d92490": "changeFuckyou()", +"34d95bf0": "ShitCloneslordAddress()", +"34d9aee3": "assertEq7(bytes7,bytes7)", +"34dbe44d": "getLastBlockNumberUsed()", +"34dc2176": "inventoryProduct(bytes32)", +"34dc3c32": "pricePerWei()", +"34dc864c": "YYYToken()", +"34dcfec4": "minimalETH()", +"34df4222": "hasBeenLinked(uint32,int256)", +"34df8b63": "PER_USER_MAX_AVATAR_COUNT()", +"34df9b60": "getCow(uint256)", +"34e19907": "setSwapFee(uint256)", +"34e1ad21": "EmontFrenzyTool(address)", +"34e22921": "Call()", +"34e23416": "lastcombo()", +"34e24640": "distr(address,uint256)", +"34e24853": "encode(address)", +"34e255a4": "WTechTestCoin()", +"34e415db": "growWeed(uint256)", +"34e41bbf": "RATE_DAY_1()", +"34e4c06d": "maxSupplyGenerable()", +"34e5a5f8": "getPlayerInfoWithRoundID(uint256)", +"34e5a692": "distribute(uint128)", +"34e5e97a": "assignProduct(uint256,uint256,uint256,uint256)", +"34e70cc2": "tub()", +"34e73122": "calculateFee(uint256,uint256)", +"34e73f6c": "getAuctionCost(bytes32,uint256)", +"34e7a57a": "nonWLBalanceOf(address)", +"34e80c34": "getKeys(address)", +"34e8980f": "bootUpHangouts()", +"34e8c679": "retrieveTokens(address,uint256)", +"34e8ecea": "FindTheCureCoin()", +"34e8f247": "setStartTimeIcoStage3(uint256)", +"34e98037": "batchAssignment(address[],uint256[])", +"34e9d146": "EstateToken(uint256)", +"34ea5fe5": "setNumeratorDenominator(uint256,uint256)", +"34eaa923": "moveEther(address,uint256)", +"34eac76f": "withdrawalDeployed()", +"34eaf154": "investorAmount(address)", +"34eafb11": "totalCount()", +"34eb0cf5": "isUserBlacklisted()", +"34eb3200": "setRequiredProgressOfPreviousDungeon(uint32)", +"34ebb615": "maxTokenToBuy()", +"34ec514b": "setInitialPrize()", +"34ec96bf": "dAddCategory(bytes32,bytes32,bool,uint256)", +"34ed557f": "setTokenIpfsHash(address,bytes32)", +"34eea4a2": "executeRoom(uint256)", +"34ef39f1": "owner_withdraw()", +"34ef801e": "wcOnCrowdsaleSuccess()", +"34efcb8e": "getPlanet(uint256)", +"34f00e83": "setCrowdsaleStart()", +"34f03321": "PCM(uint256)", +"34f0e39e": "addCurator(address)", +"34f10c39": "chkcan(address,uint256,uint256)", +"34f110e5": "getPoolMaxPayoutQspWei(uint256)", +"34f1f9b1": "lbToken()", +"34f20f31": "setExchangeRateAuth(address)", +"34f245c2": "hasSecondUnionIds(bytes32,bytes32)", +"34f25146": "numOfReleased()", +"34f2d1ec": "scheduleUnsoldAllocation()", +"34f361a4": "bonusSecondWeek()", +"34f42df8": "testerc20()", +"34f50813": "PreICOToken(address)", +"34f64dfd": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address)", +"34f682e2": "GetPriceOfRigs(uint256,uint256,uint256)", +"34f6bef3": "allTokensDecimalsBalances()", +"34f6d0b3": "Congress(address)", +"34f71c5d": "InDetailToken()", +"34f732e8": "withdrawalLockTime()", +"34f8cc6d": "DrAgentToken()", +"34f9445e": "consumeEnergy(address,uint256)", +"34f96971": "lockedBalanceCount()", +"34fa0606": "getControlInfoTokenlist()", +"34fa17cb": "getTeamBet(string)", +"34fa37da": "grantTokens()", +"34fb032e": "getAddr(string,string)", +"34fb11ed": "setMintingFeeEnabled(bool)", +"34fc2591": "toggleFreeze()", +"34fc62ff": "_badgeOwnerChange(uint256,address)", +"34fcc3e7": "getBetting(uint256,address)", +"34fcf437": "setRate(uint256)", +"34fe00b1": "getDocumentMajorities()", +"34fe0cf5": "payFee(address,address,address,bytes32,address,address,bool)", +"34fe5473": "largestDonation()", +"34fec467": "transferAllowed()", +"34fee3e4": "AuctionSuccessful(uint256,uint256,address,uint256)", +"34ff37f3": "returnLongCouponAmount(address[3],bytes32,uint256)", +"34ffea2c": "token_iso_price()", +"35001a1a": "internalMint(address,uint256)", +"350078b8": "staticblock()", +"3500a48d": "transferCommunityCommune(uint256,address)", +"35013592": "getStageCap(uint256)", +"35020cb9": "getReferenceType(bytes32)", +"35021991": "PresaleStarted(uint256)", +"350279c6": "getStage3Cap()", +"3502be27": "TaxTillNow(uint256,uint256)", +"35039525": "isBarCode(bytes32)", +"350460f8": "basicTokensPerEth()", +"35046722": "getAddressBalance(address)", +"350486da": "AgiCrowdsaleMock(address,address,uint256,uint256,uint256,uint256,uint256)", +"35058a2a": "approveOperatorTo(address,address,bool)", +"3505e844": "userExists(address,address)", +"350604f1": "rakesOwing(address)", +"3506b32c": "FailedTransfer(address,uint256)", +"35082933": "setAdminWallet(address)", +"350845f5": "maxStage3AllocationPerInvestor()", +"35085b58": "weekThreeStart()", +"350896f7": "setEtherPriceManually(uint256)", +"3508eddb": "AnkitToken()", +"3508f2e8": "Monday(uint256,string,string)", +"350a6429": "minAmountETH()", +"350b4c6f": "setWLMTBounce(uint256)", +"350b4cb6": "BaseAirdrop(address,address)", +"350bb144": "createContractGirl(string)", +"350c0acf": "checkWithrawStock(address)", +"350c35e9": "withdrawCollateral(address,uint256)", +"350cf91c": "createManufacturer(address,address,string,string)", +"350d141e": "getWasApprovedBeforeDeadline()", +"350d9b96": "walletWithdraw(uint256)", +"350dbcc5": "get_Sponsors_list_by_Job(uint256)", +"350dd4a4": "Nettekcoin()", +"350ee628": "addVerifiedInfo(address,address,string,uint8,string,string)", +"350f4270": "specificTransfer(address,uint256)", +"350f9e01": "swypes()", +"350fbe2e": "calcNextDrawTime()", +"35100acc": "credit_token(address[],uint256)", +"35101d8e": "balancesForOutcome(uint8,address)", +"35105e3b": "executeChildDaoProposal()", +"35109cc6": "PRE_SALE_TOTAL_TOKENS()", +"3510b66c": "reduceTotalSupply(uint256)", +"3511c1af": "getMySnake()", +"3511ca9c": "Freezing(address,uint256,uint256)", +"351210b3": "BpxToken()", +"35126330": "GanaTokenLocker(address,address)", +"35130678": "additionalPreMine(uint256)", +"351314a5": "oIDIndex_()", +"3513651c": "Spin(address,int256,uint256)", +"35139014": "preICOstart()", +"3513cab2": "getWeeklyBuyVolume()", +"3513d339": "ForceSendTokens(address)", +"351509a8": "TEAM_ADDRESS()", +"3515519c": "getInitialval()", +"3516df21": "supplyBurn(uint256)", +"3517a740": "getNodeParent(bytes)", +"35181711": "SetStartTimeIco(uint256)", +"3519786f": "setAvailableFlat()", +"35197d6b": "sendData(address,uint256,uint256,bytes)", +"3519932e": "authorized_recordStashedPayout(uint256)", +"3519a2f8": "fundContract(uint256)", +"351a97f8": "accountKind(address)", +"351abe61": "getBusinessVATStatus(uint256,uint8,address)", +"351adcb0": "SocialPay()", +"351b68db": "SWAP_LENGTH()", +"351be6ad": "releaseProduct(address)", +"351bf518": "transferFeeRate()", +"351c2576": "completeFavor()", +"351c9133": "userkeys_push(address,uint64,uint64,uint64)", +"351dadf4": "support_ban_of(address)", +"351df92a": "setBattleAddress(address,address)", +"351e46de": "setBLInterface(address)", +"351f42c3": "msgs(address,uint256)", +"351f98d9": "icnq()", +"35209715": "burritoPoolTotal()", +"35209821": "metadataContract()", +"35213a69": "abandonedFundWithdrawal()", +"35216bba": "enableTokenTransfer(bool)", +"3521d7da": "prvd()", +"3522e868": "changeLogicContractAddress(address)", +"35259f1a": "ThriveToken()", +"3525d66d": "CanvasFrag()", +"35269662": "importerBanker()", +"3527cae0": "_deleteUint(bytes32)", +"3528351d": "bouleDevMultisig()", +"3528a0c8": "GlobalTransfersLocked(bool)", +"3528c022": "days_interval()", +"3528f564": "allowancePerYear()", +"352a482f": "havedDistFoundCoin()", +"352a950c": "updateCnyBtcRate(uint256)", +"352bbdff": "referralContracts(address)", +"352c93b7": "getFess()", +"352d2790": "UUID4()", +"352d5cd0": "setPhaseSupply(uint256,uint256)", +"352e0891": "_isValidSignatureAndMethod(address,bytes)", +"352e1dff": "getWorkflowActivity(uint256,uint256)", +"352f43a8": "RongWQToken(uint256,string,uint8,string)", +"352f64f9": "getOwnerFee(uint256)", +"352fd696": "PERCENTAGE_OF_TOKENS_SOLD_IN_SALE()", +"352ff2bd": "setPreSaleRate(uint256)", +"352ffb9a": "Trident()", +"35300990": "propExists(bytes32)", +"353086e2": "MAX_BET_VALUE()", +"3530e895": "getClaimEst(address)", +"3531f0de": "LogWeiWithdrawn(address,uint256)", +"35347560": "getLamboAttributes(uint256)", +"35353b03": "parseAndRound(string,uint8)", +"353559cb": "Controller_Address3()", +"35359a3f": "tokenHolderAddress()", +"3535ab2a": "btcUsdRate()", +"3535cd52": "setDailyCosts(uint256)", +"3536046a": "getUInt(string)", +"35361909": "withdrawStart()", +"35371218": "closePositionDirectly(bytes32,uint256,address)", +"3538b13a": "MAX_TOKENS_FOUNDERS()", +"3538b9db": "test_twoValidEqBytes32()", +"3538e747": "rePayLoan(uint64)", +"35390714": "maximumFee()", +"353928d8": "helpRed()", +"35393197": "setReferer(address)", +"35396c1c": "createItem(uint256,uint256,uint256,uint256,uint256,uint256)", +"3539c468": "remainingTokenAmount()", +"353a3475": "setTargetAddress(address,address)", +"353ba8e9": "vvc(uint256,string,string)", +"353be218": "ToorToken()", +"353c0573": "burnInternal(address,uint256)", +"353d90ec": "numTickets()", +"353db436": "setCosts(uint128[])", +"353e65e9": "wallets(address,uint256)", +"353edf58": "presaleEndtime()", +"353f0e40": "getCurrGameInfoPart1()", +"353f1bc7": "setIsAllocatingInterest(bool)", +"353fe553": "BNDToken()", +"35400daf": "setTier2Participants(address[])", +"3540233b": "set_status_user(address,address,bool)", +"3540b529": "readIncUpdatedOn(string)", +"3540e96c": "tokenOWL()", +"35410f85": "KPCoin()", +"3541d365": "GPUMining()", +"3541fd53": "setStake(bytes32,uint256)", +"3541fe94": "teamVestingAddress()", +"354211c9": "TriwerToken()", +"35423643": "totalmoneyearned()", +"354271b4": "test_7_accessRestriction_UnderscoreRemoveMember_shouldThrow()", +"3542758f": "addOwner(address,string)", +"354284f2": "party()", +"3542aee2": "mintByOwner(address,uint256)", +"3542d0f6": "msgQPut(string)", +"35436725": "CoinMovement(address,address,int64)", +"3543b23c": "assign(address,string)", +"35446c78": "setAirDropPayableTag(bool,uint256)", +"3544a864": "whiteList()", +"354537da": "safeCloseSale()", +"3545acb0": "after_test_1_method()", +"354685fb": "setSellDividendPercent(uint256)", +"35468963": "rentModified(address,uint256,uint256)", +"354709dd": "trade(address,address,uint256,uint256,uint256,address,uint256)", +"3547800a": "lockTokens(address[],uint256[])", +"354836b9": "setIsReportingActive(bool)", +"3548fcd7": "getCardAttrs(uint256[])", +"35490ee9": "setPublicOfferPrice(uint256,uint256)", +"3549345e": "setPresalePrice(uint256)", +"35493e98": "icoEtherReceivedPreSecondSale()", +"35496d82": "POWHclone()", +"354a5137": "setWinnerTimeStatus(bool)", +"354b2735": "testDeploy()", +"354b7b1d": "updateVerified(address,bytes32)", +"354d68f2": "validate(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256,uint256)", +"354d7e40": "Payout()", +"354d89ee": "setTokenSaleContract(address)", +"354e1063": "setExtraConfig(uint256,uint256)", +"354e6ca7": "HippieCoinv2()", +"354eb40b": "emojisan()", +"354f1651": "completeBountyDistribution()", +"354f6398": "insert_candidate(string,uint8,string,string,string,string)", +"35509937": "changeWithdrawal(address,address)", +"3550b6d9": "getTokenAddressBySymbol(string)", +"3550e2e2": "changeBlockedTimeForBountyTokens(uint256)", +"3551a6ca": "nullifyFrom(address)", +"3551c8b9": "tokenesia()", +"355255f5": "totalSyndicateShares()", +"35527354": "submitNewHash(bytes32,uint256,uint256)", +"355274ea": "cap()", +"3552f552": "_random(uint256,uint256,uint256)", +"3552f9f6": "GetBetReadyTime()", +"3553f60d": "getPoolAdmin(uint256)", +"355421a8": "create(uint256,uint256,uint256,address,address)", +"355473d0": "setuped()", +"355474d2": "commitReading(address)", +"35548c02": "WINNERTAX_PRECENT()", +"35552dbc": "transferDSPRecord(address,address)", +"35554e58": "SearchUserPurchase(address,string)", +"3555fa90": "contractSpend(address,uint256)", +"35566ff0": "rewardSources(uint256)", +"3556afd8": "m_exchangeRate()", +"355784cb": "settleToken(bytes32,address,uint256,uint256)", +"35579f0c": "withdraw_token(address,address,uint256)", +"3557c1f6": "labAddress()", +"3557c70a": "removeMintingFactory(address)", +"3557d0e9": "testThrowIfNotExist()", +"35593bcf": "vestedAmountAvailable()", +"35595c95": "getSkillName(uint256)", +"355ae09c": "Fluzcoin()", +"355ba211": "emergencyOverwrite(bytes32,uint8,uint8)", +"355c6457": "tryToRecord(address,uint256)", +"355d59aa": "publicTokensAvailable()", +"355d7d03": "batchAllocate(address[],uint256[],uint256[])", +"355d7e05": "withdrawByMint(address,uint256)", +"355d8c64": "Uptrennd()", +"355dd1b3": "Donate_LuGoddess()", +"355df00b": "getTicketNumber(address)", +"355e0c5d": "tokenUri()", +"355e1b84": "Mstcoin()", +"355e56b9": "Assembly(address)", +"355e6b43": "setCommission(uint256)", +"355eb2c0": "canWrite(string,address)", +"355f41a9": "pay(uint256,uint256,address,bytes)", +"355f51a0": "right49(uint256)", +"355f7ea7": "canUpdateNextGameMinAndMaxBlockUntilGameEnd()", +"355fd8db": "thirdTimeLine()", +"35603440": "sections(uint256)", +"3560f05e": "AsX()", +"356282db": "changeMinBidMultiplier(uint256)", +"3562a1db": "CoderForge()", +"3562fd20": "setUIntValue(bytes32,uint256)", +"35639e11": "updateMinGasPriceForDrawing(uint32)", +"356442b9": "lockPercentage()", +"356594ab": "EtherTransfer()", +"35671214": "prev(uint256)", +"3567950c": "blockchainExchange(uint256,uint256,bytes32)", +"3567d5ef": "BuyGoods(address,uint32)", +"3567d637": "getTransactionListLength()", +"3568bd39": "mintStart2()", +"3568fb04": "createUint256(bytes32,uint256)", +"356b00af": "tranferMoneyToAddress(address)", +"356c22ec": "teamOne()", +"356ca551": "ZhkCoin(uint256,string,uint8,string)", +"356d414c": "transferFrom(address,address,address,uint256,uint256,bool,bool)", +"356d4a3a": "createJaroSleep(address,uint256)", +"356d6b24": "fifthBonusSalesEnds()", +"356e2927": "icoFinished()", +"356e7e9d": "mintToAccount(address,uint256)", +"356eeaab": "payAndReset()", +"356f056f": "releaseTime3()", +"356f083e": "_bytes32ToString(bytes32,bytes32)", +"356f55b7": "adminDropETH()", +"356f8964": "transferMed(address,uint256)", +"356f9865": "tokenPerWei()", +"356fefb3": "developer_edit_text_crowdsale(string,string)", +"357006c4": "Propellerhead()", +"3570c2ee": "PosRewards()", +"3570f217": "CarbonTOKEN()", +"3571e567": "PausableCappedDividendToken(uint256)", +"3572a28e": "EPT()", +"35734ba5": "ExternalSale(uint8,string,address,uint256,uint256)", +"35735226": "returnBonus()", +"3573df50": "CreateMND(address,uint256)", +"357401f5": "cancelBet(uint256)", +"35743ac9": "proposalActive(uint256)", +"3574da8c": "deployShop(address)", +"35759333": "checkList(uint256,address)", +"3575ecc6": "BreakbitsToken()", +"35765828": "addSystemUserEarnings(uint256)", +"3576a32f": "setBackupOwner(address)", +"3577d94e": "loanTerm()", +"35785e09": "sweepsState()", +"3578abf4": "QuintessenceToken()", +"3578b7b3": "setBuyPrice(uint256,string)", +"3578bb7f": "calculateScore(uint8[])", +"35796635": "numEndedGames()", +"3579c0df": "newAward()", +"357a0333": "initWithdrawal(address,uint256)", +"357a05cd": "cram(address,uint256,string)", +"357a05f1": "Crowdsale(address,address,address,address)", +"357a0ba2": "sgt()", +"357af806": "Restart()", +"357bd7d6": "ROHH()", +"357be177": "DemSoKhoaHoc()", +"357d0173": "removeArbiter(address,uint256)", +"357d4d1a": "ICloudSecAddress()", +"357e2e57": "addRequiredBlockHash(uint256)", +"357ee486": "createDonationsBank()", +"357fe12a": "createPromoMonsterWithTokenId(uint32,bytes,address,uint256)", +"3580031a": "consumesGas()", +"358049ea": "setDiscountTime(uint64)", +"35804a88": "returnBook(uint256,address,address)", +"35815b95": "FACTOR()", +"35817773": "getContract(string)", +"3581b257": "_addDividendsForAddress(address,address)", +"35828c8d": "TransactionInitiated(uint256,address,address,address,address,address,uint256,bytes32)", +"3583727f": "tokenSetSpeedBump(address,address,bool)", +"358373bd": "withdrawalInterCrypto(string,string)", +"35842f74": "depositDai(uint256)", +"358455b4": "testDefaultWallet()", +"3584fa38": "setDelegate(uint8,address)", +"358507d7": "claimRefundOnUnsuccessfulEvent()", +"3585609b": "getJobCanCancelAfter(bytes16,address,address,uint256,uint256)", +"358564ee": "allocateLoyaltySpend(uint256)", +"358592ce": "_freeze(address,bool)", +"3585e500": "nTransfers()", +"35862824": "isIcoOpen()", +"35866368": "transferFromWithCustomReservingNet(address,address,uint256,uint256)", +"35875623": "get_list_deposit_key(address)", +"35876476": "initialize(address,address,address,address,address,address,address)", +"3587904b": "limitOfTeam()", +"3587b26c": "setAutoBuy(uint256)", +"3588aa0b": "BMV()", +"358a074c": "admin_isRequireData(bool)", +"358a08cb": "activate(address,uint256,address,uint256,uint256,uint256,bool,bool)", +"358a11b4": "change_data(string)", +"358a18b2": "ThePatriotCoin()", +"358a2a84": "toHorse(uint256)", +"358c24b1": "CONFIG_MIN_PLAYERS()", +"358cc6f6": "acceptKyc(address)", +"358cfa25": "setTotalEtherPool(uint256,uint8,bool)", +"358d1e26": "HitToken(string,string,uint8,uint256,address,address)", +"358d5dc2": "getIsCashed(uint256,uint256)", +"358dff07": "minEthPerTransaction()", +"358f7f3a": "numberRange()", +"358fa6c6": "calcBuyout(uint256)", +"358fcee9": "fetchdivs(address)", +"358ffd79": "Controller(address,address,uint256)", +"3590699d": "_newSchellingRoundEvent(uint256,uint256)", +"359170e6": "setTransfersEnabled()", +"3591a1a9": "canDrip(address,address)", +"3591f5bd": "removeSomeDETsFrom(address,uint256)", +"3591fadc": "STAGE_2_FINISH()", +"3592336c": "getRetailerStatus(address,address)", +"3592c3b5": "uintToString(uint256,uint256)", +"3592dfea": "updatePackage(uint256,string,address)", +"3592f369": "disableTokenSwapLock()", +"35930e13": "setMinimalRewardedBalance(uint256)", +"359320de": "getCurrentVelocity()", +"35953108": "removeAddressesFromWhitelist(address[],string)", +"359531f4": "allowCnsContracts(bytes32,address,bytes32)", +"35956083": "Parabola()", +"35956c42": "ABCPresale(uint256,uint256,address,address)", +"35958196": "getGamesPool(uint256[])", +"359582ca": "downstream()", +"3595b570": "copyBalance(address)", +"35960028": "payMeFor(uint16)", +"359627e5": "canPay(address,uint256)", +"35967501": "setManualOverride(bool)", +"35972f46": "techAccount()", +"35975a37": "setStart()", +"3597727c": "EtherDLT()", +"359803cd": "pauseMinting(bool)", +"359819cc": "Group(address,bytes32,address[])", +"359829db": "numOfBackers()", +"3598ac34": "Cider()", +"35995022": "getPhaseCount(uint256)", +"359976a7": "getCheckSum(bytes20)", +"359ae0f3": "set_Shops(address[],address[])", +"359bc19e": "finalize(uint64)", +"359c1912": "setUintF1(uint256)", +"359c1f72": "getGravatar(address)", +"359c8a93": "claimD()", +"359cc28e": "changeIcoDeadLine(uint256)", +"359cf2b7": "requestTokens()", +"359d04a2": "voteRuling(uint256,bool)", +"359d393d": "votes_against()", +"359d9277": "XXXXXXXX01(address,uint256)", +"359db8c8": "partialDistributeDivident(uint256,address[],address)", +"359dbafe": "validatorWrotePart(uint256,address)", +"359ef75b": "init(address,address,address,address,address)", +"359f517e": "confirmWithdrawal()", +"359fe132": "getSharesByShareOwner(address)", +"359fe780": "increaseMintApproval(address,uint256)", +"35a063b4": "abort()", +"35a07291": "makeAssessment(uint256,uint256,uint256,uint256)", +"35a1529b": "dripAmount()", +"35a1bf6e": "test_insert_findWithHintNextRemovedUpdateTail(int256)", +"35a1d95d": "requestSnapshots(uint256)", +"35a21728": "multiERC20Transfer(address,address[],uint256[])", +"35a23659": "miningTimePerTrip()", +"35a26787": "AuthAddr(address,address,address)", +"35a374dc": "issueLottery(uint8)", +"35a3a96f": "marketingRecipient()", +"35a3cfa0": "transferMarketallocationTokens(address,uint256)", +"35a3e83c": "getCurrencyDecimals(uint256)", +"35a3fbb0": "_triggerStashedPayoutTransfer(uint256)", +"35a4015d": "numberOfBudgetPlan()", +"35a49063": "personalityTypes()", +"35a4fa30": "createPromoWhale(address,string,uint256)", +"35a53379": "_increaseWinPotChance()", +"35a568b9": "setLockPostion(address,uint256,uint256,uint256)", +"35a5c43a": "get_FTVTOKEN_EURCENT(uint256)", +"35a5e06d": "getRoots()", +"35a5e8bf": "SectorUpdated(uint16,address,string,string,string,bool)", +"35a66ef8": "arrayOfAccountsThatHaveClaimed()", +"35a6861a": "login(address)", +"35a6c1e0": "totalPausedSeconds()", +"35a6ed92": "calculateBonusAmount(address,uint256,bytes32)", +"35a8076b": "Accounts(address,address)", +"35a951b8": "endTime(bytes32)", +"35a9731b": "approveRefund()", +"35a9a5c7": "setWithdrawAccount(address)", +"35a9c82f": "setSecret(bytes32)", +"35a9d051": "ETH_address()", +"35aa6bec": "checkExpectedTokens(uint256[],uint256)", +"35aa6c31": "getMoney(address,uint256)", +"35acac4e": "abort(string)", +"35acbcab": "makeStudentID(bytes)", +"35ad84f9": "buyFromValue(uint8)", +"35ad9581": "saleRateSecondDay()", +"35adc0c5": "sellerCancel(bytes16,address,address,uint256,uint16)", +"35ae20bb": "AddEthBalance(address,uint256)", +"35ae41c9": "godAutomaticCollectFee()", +"35aec024": "findTwoPercent(uint256)", +"35aed70f": "getNumAnimalsXPlayerXType(address,uint8)", +"35af1986": "div27(uint256,uint256)", +"35af2c4f": "unsetIdentity(uint256,address,address)", +"35af5a9c": "MOTCToken(uint256,string,string)", +"35b05d1e": "purchaseRequest(uint256,uint256)", +"35b09a6e": "someFunction()", +"35b1097e": "communityTokensHolder()", +"35b1114a": "REQUEST_CANCELED_BY_BORROWER_STATUS()", +"35b11b72": "setColors(uint16,uint256[5],uint256)", +"35b21ceb": "totalChildTokens(uint256,address)", +"35b28153": "addAuthorization(address)", +"35b2b51b": "getAllInvestmentsWithdrawnByOwner()", +"35b3caf0": "cancelOrderWithPayerByAdmin(string,address)", +"35b3ee0e": "NGA()", +"35b46459": "distribute(uint256,address[],uint256[],uint256)", +"35b4a6d9": "updateBTCPrice()", +"35b4a93e": "HSDJCoin()", +"35b55d98": "SUBSCRIPTION_MODULE()", +"35b643d4": "getBalanceTimestamp(uint256)", +"35b6a6c6": "tokensForAdvisors()", +"35b6cc03": "RankingBallGoldCrowdsale(bytes32[5])", +"35b6df5d": "BurnableCrowdsaleToken(string,string,uint256,uint256)", +"35b6eaea": "isPayed(address)", +"35b75391": "test_validProposalExecution()", +"35b7588f": "allowedMinting()", +"35b8e820": "getCandidate(uint256)", +"35b94b5d": "MIOTToken(uint256,string,string)", +"35ba1d0a": "closeOnBehalfOf(address,address,bytes32,uint256)", +"35ba66de": "ACATokenSale(address,address,uint256,uint256,uint256)", +"35ba9af8": "availableForWithdrawal()", +"35bb0398": "didSign(address,bytes32,uint8,bytes32,bytes32,uint8)", +"35bb3e16": "grantAdmin(address)", +"35bb5fd2": "isToonInterface()", +"35bbe70e": "getAllVoters()", +"35bce6e4": "transferMulti(address[],uint256[])", +"35bd8b94": "Noblebit(uint256,uint256)", +"35bdac34": "withdrawToAddress(address,uint256)", +"35be7bf3": "getSecondRoundReleaseTime()", +"35bf82f6": "setChallengeFee(uint256)", +"35bf90ca": "getContributorByNumber(uint256)", +"35bfe158": "changeGoldIssueBurnFeeContract(address)", +"35c019e2": "LogFundTransfer(address,uint256)", +"35c05ab0": "hodlFor3y()", +"35c0cbaf": "upgradeDragonGenes(uint256,uint16[10])", +"35c1d349": "participants(uint256)", +"35c23200": "computeNextPrice(uint256)", +"35c2d49d": "minInvestETH()", +"35c40fe3": "testParamOutOfBoundsFail()", +"35c42d7f": "getPetByIndex(address,uint256)", +"35c4de7a": "OracleRequest(address)", +"35c5b475": "getExpectedReturn()", +"35c648c5": "POMDA()", +"35c6511b": "endMiniGame()", +"35c699c4": "getUnclaimedEtherIfAny(uint256)", +"35c72df0": "bryan()", +"35c7421b": "testMinReturn32WithReturn()", +"35c77e6f": "configurer()", +"35c80c8c": "isCustodian(address)", +"35c8518b": "setCloseBlock(uint256)", +"35c914c2": "finishPayaning()", +"35c969ea": "Presale(address,address,address,uint256,uint256,uint256,uint256)", +"35c990d4": "getGameCalculationProgress(uint256)", +"35ca8ce1": "setPriceToRegSale()", +"35caecc3": "getPeriod(uint256,uint256)", +"35caf648": "DonationMatched(address,uint256)", +"35cb1f07": "wethDeposit()", +"35cb27b5": "minedToken(uint16)", +"35cbdc25": "AcceptsProofofHumanity(address)", +"35cbe716": "getRemainingAirdropSurplusAddressesLength()", +"35cc2d80": "isInState()", +"35cc59a9": "createSchema(bytes)", +"35cd2358": "setAffiliation(address,uint256)", +"35cd4cc4": "getLastKicker()", +"35cd78b3": "saveMetaData(address,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", +"35cf60df": "enableFreezePriceRateRecalc(uint256)", +"35d0b444": "LogRedeemToken(address,uint256)", +"35d129f6": "untag(string)", +"35d13969": "SendAllMoney()", +"35d1f606": "destroyCard(uint256)", +"35d1f869": "setAtomOwner(uint256,address)", +"35d357ac": "logCeiling(int256,uint8)", +"35d37dbb": "mgmtFeePercentage()", +"35d4a49a": "setSubFreezingPrice(uint256)", +"35d65132": "canClaimPayout(address)", +"35d6d214": "getBids(uint256[])", +"35d6d611": "DAY_LENGTH()", +"35d79fad": "CertificationDb(address,uint256,address)", +"35d7a052": "freeze(uint256,uint256)", +"35d7d09a": "next_diary_id()", +"35d7f149": "takeBuyOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"35d82d16": "setGeneralInfo(bool)", +"35d91b85": "cancelOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"35d94797": "verifyBetMask(uint256)", +"35d97405": "dividends()", +"35d99f35": "masterMinter()", +"35d9ba1f": "getTill()", +"35d9ceee": "uintMax()", +"35da3c1a": "createNewGalaxy(string,uint256)", +"35daa731": "ordersCount()", +"35db2829": "sendStableReward(address,address,uint256,uint256)", +"35db2b72": "Winchain()", +"35de5e89": "setPixelBlockPrices(uint256[],uint256[],uint256[])", +"35de74b8": "PBC()", +"35decc5f": "updateTargetToken(address,uint256)", +"35dfcc92": "totalCastle()", +"35dffde5": "updateReleaseAmount(uint256)", +"35e04fab": "prePayment()", +"35e09095": "decTotalSupply(uint256)", +"35e0f450": "stageMaxBonusPercentage()", +"35e24a6b": "preICOstate()", +"35e49e5f": "sellBlocks(uint8,uint8,uint8,uint8,uint256)", +"35e4d30f": "nonzeroAddressesElementForApi(uint256,uint256)", +"35e5f617": "transfer_erc20(address,address,address,uint256)", +"35e608be": "addUpgrade(address,address,bytes)", +"35e60bd4": "setTransferLocked(bool)", +"35e64aaa": "transferLand(int256,int256,address)", +"35e6a7af": "addab()", +"35e6e5b6": "removedSalesAgent()", +"35e82f3a": "removeAddressFromBlacklist(address)", +"35e83446": "testInitialBalanceWithNewMySale()", +"35e9d83b": "transferToAddress(address,uint256,bytes)", +"35ea6821": "masternodeTransferOwnership(address)", +"35ea94ad": "TokenSold(address,uint256,uint256)", +"35eb5208": "registerAgent()", +"35eb702f": "getPlayerWinning(address,uint256)", +"35eb8479": "showBidder()", +"35ebbfd1": "weekTwoStart()", +"35ec6dab": "earlyWallet()", +"35ed3fd6": "BONUS_PERCENTAGE()", +"35ed548f": "getPositionRequiredDeposit(bytes32)", +"35ed64c3": "CZToken(string,string,uint8,uint256)", +"35ed663d": "ENJToken(address,address,address,address)", +"35ee2783": "Alarm()", +"35ee2f8a": "initCanOffsetTime()", +"35ee72c7": "ISSToken()", +"35eead41": "addNote(bytes32,string,string)", +"35eec76a": "privatePreSaleSoldTokens()", +"35f067cf": "updateTokenURIPrefix(string)", +"35f097f3": "isOnBattle(uint64)", +"35f0d665": "reloadStoreByName(uint256)", +"35f10cc3": "sendWinnings(address[],uint256[])", +"35f1bd11": "EcoCrypto()", +"35f21f0a": "GladiethersOraclize()", +"35f2507f": "recoverUser(address)", +"35f27b20": "collectAirDropTokenBack()", +"35f2fbaf": "_bid(address,uint256,uint256)", +"35f3cf85": "setSaleManagerAddress(address)", +"35f4581b": "pwn(uint256)", +"35f46994": "die()", +"35f4de27": "HumaniqICO(address)", +"35f64a30": "albosWallet()", +"35f6806b": "addNewAccount(string,address,uint256,uint256,uint256)", +"35f68424": "getTokensByBTC(uint256)", +"35f6c161": "createWallet(uint8)", +"35f79b83": "LordCoin()", +"35f7ff63": "stringStorage(bytes32)", +"35f80a1b": "UbiatarPlayVault(address,address,uint256)", +"35f82876": "fillOrderNoThrow(uint256,bytes)", +"35f84393": "contructor(string,string)", +"35f88860": "listScam(uint256,string,uint256)", +"35f8a2c6": "RefundableCrowdsale(uint32,uint32,uint256,address,uint256)", +"35f931cb": "AmberToken(uint256)", +"35f96a7d": "goldBought(uint256,address,bytes32,string,string,string,string,string)", +"35fa3128": "BTTSToken(address,string,string,uint8,uint256,bool,bool)", +"35fa3843": "setend()", +"35faa416": "sweep()", +"35facf78": "createProposal(string,uint256)", +"35fb2125": "onlyBouncerTransferOwnership(address)", +"35fb337c": "finalCap()", +"35fb8e36": "triggerTestEvent()", +"35fc3e90": "claimRefundEther(address)", +"35fc7506": "StatsSold()", +"35fd8877": "isCashBack(address)", +"35fe3660": "MID_GRADE_CATEGORY()", +"35ff058a": "pushArray(bytes32,uint256)", +"35ff217d": "CrowdfundFinalized(uint256)", +"35ff3a51": "getRaisedEther()", +"35ffa20d": "handleWithdraw(address,bytes32,address,address,uint256,uint256,bytes32,bytes32)", +"35ffbe74": "verifyClaim(bytes,uint256,uint256,uint256[],uint256[],uint256[],uint256[])", +"35ffd687": "getStageLimit(uint8)", +"360035c6": "RepoToken()", +"360038b5": "CheckOver()", +"3600af8b": "updateProfileImgurl(string)", +"3600e1e2": "controlLimits(address)", +"36013189": "randomness()", +"360184e9": "Fouracoin()", +"3601dd87": "TNTToken(uint256,string,uint8,string)", +"36025bf8": "licenseTermsHasMaxCost(bytes32,bytes32)", +"3602627d": "BdpImageStorage(bytes8)", +"3603b0b0": "MULTISIG_WALLET_ADDRESS()", +"36044ecc": "changeTokenReward(address)", +"36046916": "generatePresciptionCode(int256)", +"3604caa1": "lockAddress(address[])", +"36054f51": "affiliatThreshold4()", +"360583c6": "getUsersGunsIds()", +"36066f71": "Token(address,string,uint8,string,address,address)", +"36067543": "FirstEtherLimit()", +"3606c983": "createClaimMsg(bytes32,string,string,address)", +"36080694": "deleteRate(bytes4)", +"360821e8": "setMinimumBitcoinToInvest(uint256)", +"3608672c": "liveBetexICO()", +"3608c9eb": "MULT_FACTOR()", +"360998e6": "Cryptex(address,address,address,uint256,uint256,uint256)", +"3609ac8f": "START_PRICE()", +"3609bf09": "updateBusiness(uint256,uint256)", +"360aa28b": "isVersionContract()", +"360aac67": "accountGameResult(address,uint256)", +"360b3b31": "setAirdropEnabled(bool)", +"360b8115": "VipMigration(address,uint256)", +"360c97dd": "frozenAnnually()", +"360c9ed0": "deprecateBodySubtype(uint8)", +"360cdf5e": "AsOyToken()", +"360e5f54": "TokenGift(address,uint256)", +"360ec1b8": "processPurchase(bytes32,int256[],int256[])", +"360ed9c2": "receiversCount()", +"360f1d07": "bonusRatePrivateSale()", +"360f6b21": "chargingSwitches(address)", +"360ff695": "timeTier3()", +"3610724e": "buyTokens(uint256)", +"361228ea": "weiForToken()", +"36127d7e": "updateEMA(uint256)", +"36134a4b": "shouldBeStarted()", +"3613b781": "revokeVesting(address,address)", +"36144c9a": "getUserReferrer(address)", +"3614ac6f": "test4_searchSameNode()", +"36157f5a": "totalDivSupply()", +"361698ff": "adminSetWorldSnapshot(uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"36169d90": "sweep(address,uint256,uint8[],bytes32[],bytes32[])", +"36170ae5": "startingDateFunding()", +"36173764": "frozen(address,uint256)", +"3617653e": "powerContract()", +"3617d5c6": "viewIndexNumber()", +"36181026": "tryToFinalize()", +"361819e8": "RANGEEND_4()", +"36186868": "icoWeek2Bonus()", +"361893f7": "getBrand(address)", +"3618b290": "hodlFor2y()", +"3618c2a2": "removeAddressesSet(address)", +"36199817": "setFinalTimestampOfBonusPeriod(uint256)", +"3619cd99": "myHalfDividends()", +"361a4eb8": "Party()", +"361a5468": "testFailMoveWhenStopped()", +"361ae621": "LifMarketValidationMechanism(address,uint256,uint256,uint8,address)", +"361b5eaa": "token(bytes12)", +"361b94be": "contributorMinCap(address)", +"361bb340": "left48(uint256)", +"361bfc5b": "ETH_per_BRA()", +"361c14b0": "teamUnlock4()", +"361cac82": "marketStores()", +"361cc3ab": "getUserTotalPromoBonus(address,address)", +"361d004f": "changeBank(address)", +"361d292e": "getCarAuctionID(uint32)", +"361d4e53": "usedTokenBalance(address)", +"361d55be": "callback_ForUnderwriting(uint256,string,bytes)", +"361f10e5": "setSiteAccountAddress(address,address)", +"361fab25": "setSupplyLimit(uint256)", +"361fd603": "First_pay_clientmanager()", +"3620f56d": "addQuest(address)", +"3622b5ef": "PIGGY_BANK(address)", +"36234138": "registerPair(address,address)", +"362344b8": "MAX_YAYS()", +"3623c225": "bid(uint16,uint256)", +"3623f548": "getAllWinner()", +"36249140": "third_withdrawal(uint256)", +"36261907": "setting(address,address)", +"36262665": "getOwnershipTokenCount(address,address)", +"362698a2": "Unlocked(string,bytes32,address)", +"3626aae7": "getMedalType(uint256)", +"36274669": "Poll()", +"3627d195": "FuckToken()", +"3627d3a1": "mintPrivate(address,uint256)", +"36281b38": "uppercaseOf(string)", +"36285df7": "bonusWindow1EndTime()", +"3628731c": "addAddresses(address[])", +"3628ca60": "getEpisodeList()", +"3628e6f3": "BMTToken()", +"3629c8de": "activation()", +"362a0c27": "_withdrawWonCosFromGame(uint256,uint256,uint256)", +"362a198d": "nextBurnFeeAbs(uint256)", +"362a36b4": "bidFeePercents()", +"362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", +"362bd679": "updateFreeStorage(address,uint256)", +"362c160e": "changeWithdrawalDate(address,uint256)", +"362c78b9": "invitedReward()", +"362cb8ff": "icoSucceeded()", +"362cba6f": "PlotSale(uint256,uint256,address,address,uint256,bool)", +"362e1c76": "updateparentdynamicprofis(address)", +"362e2565": "returnDeposits()", +"362e4945": "lengthAddresses()", +"362e669a": "BarrosTest()", +"362ec5e2": "createProductionUnit5()", +"362f04c0": "participantCount()", +"362f5fb2": "getDogInfo(uint256)", +"362f74e7": "updateBatchSupport(bool)", +"362f8833": "stakeRoto(address,bytes32,uint256)", +"362fe943": "MainBridge(address,uint256,address[])", +"36304e91": "allFactories()", +"3631826a": "multiline(uint256,uint256)", +"3631ecd9": "privateStart()", +"36321001": "will()", +"363210c9": "_delegatecall(bytes32,uint256)", +"363221fe": "advisorTokens()", +"3632803f": "calculateGrapeSell(uint256)", +"3632b4d9": "withdrawCoin(bytes32,uint256)", +"36330b0c": "updateInitialZero(uint256)", +"363349be": "fillOrdersUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", +"36335e19": "contributePublic()", +"3633b1ad": "createRealmSale(uint256,uint256,uint256)", +"3633c522": "GiftPoolContribution(address,uint256)", +"36344022": "testAuthorizedTransfer()", +"363487bc": "currentInterval()", +"3634a1b7": "createSeries(bytes32,string,bytes32,uint256)", +"3634b376": "GATcoin(uint256,string,string,uint8)", +"3634dcd8": "sub0(uint256,uint256)", +"36351c7c": "recharge(address,uint256)", +"36354b2f": "updateEtherAndtokenAmount(address,uint256,uint256)", +"3635e329": "getCurrentPeriodByEntity(uint256)", +"363626ad": "addressesToTotalWeiPlaced(address)", +"36371722": "chunk4IsAdded()", +"36382941": "changeTokenOwnerWalletAddress(address)", +"3638ae05": "transferETHtoProviders(address,address,uint256,address,uint256)", +"3638fb00": "transferOwnership(address,bytes32[3],bytes32[3],uint8[3])", +"3639dda5": "monthly_token_growth()", +"3639e955": "addToBothSendAndReceiveAllowed(address)", +"363a0903": "Creatable()", +"363a4708": "setMintFeeReceiver(address,address)", +"363ad06f": "getFrozenAmData(address,uint256)", +"363bc3a2": "alreadyAutoAirdropAmount()", +"363bf964": "setAddresses(address,address,address)", +"363c3747": "TestBalance(address)", +"363c51dc": "set_savings_goal(uint256)", +"363c6b81": "MAX_PENDING_REQUESTS()", +"363c76f3": "HLChain()", +"363c9bca": "runTimeAfterSoftCapReached()", +"363db35d": "IcoTotalSupply()", +"363dc725": "_unpackProtectionParams(uint256)", +"363dd19e": "summon()", +"363df59a": "UNGTToken(uint256,string,string)", +"363ef9dc": "APB()", +"363f7746": "validSignature(uint8,bytes32,bytes32)", +"363fa6b2": "renameChibi(uint256,string)", +"36400cd2": "ALM()", +"3640599c": "getPI_edit_6()", +"364083f4": "makeSale(uint256)", +"3640ca5b": "SupermarketKontrak()", +"3640e413": "YunPengToken(uint256,string,uint8,string)", +"3640f613": "cancelMatch(uint8)", +"3640f910": "LogEndSale(bool,uint256,uint256)", +"36422e49": "_createEtherDogWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"3643d14b": "withdraw_to(address,uint256,uint256,uint256)", +"3645ebfb": "indFundDeposit()", +"36470665": "battleboardDataContract()", +"36471908": "ownerPerThousandShareForMating()", +"36475668": "getCommunityData(string)", +"3647b084": "setAmountBonuses(uint256[],uint256[])", +"3647b87a": "buildFactory()", +"364832cd": "isStrongHand()", +"36484ea0": "PHASE2_START_TIME()", +"36489775": "USDZAR(uint256)", +"364aa98d": "createDate(uint256,uint256,uint256,uint256)", +"364c7815": "addCredit(uint256,address)", +"364cc73e": "isEatingAndDrinking(address)", +"364d0b53": "getAddress(bytes32,uint8,bytes32,bytes32)", +"364d279a": "phase2Duration()", +"364d2a06": "queryCreatureOwner()", +"364ddb0e": "left52(uint256)", +"364ddc2d": "getmemberposition(uint256,address)", +"364deeef": "Sceatt()", +"364e022f": "buyProduct(string)", +"364e0af3": "_createEdition(string,uint256,uint256)", +"364e1c59": "publicsalesendTime()", +"364e69b7": "canBet(uint256)", +"364e74eb": "releaseTokenTime()", +"364ea9e7": "set(uint256,uint256,bool[],uint256[])", +"364ee75d": "getRoundEnd()", +"364f4896": "emission(address,address,uint256,uint16,uint16)", +"364f6695": "earlybird_coins()", +"365044a8": "priceDivider()", +"36516a8a": "publisherAddress()", +"3651b401": "commissionGetter()", +"3651b5df": "setTargetWallet(address,address)", +"36525c4e": "resetStorage()", +"36527357": "getUint(int256,address,string)", +"3653cf9f": "getOldESOP()", +"36540b3b": "amountFundPlatform()", +"36548b58": "arrayIndexOutOfBounds(uint256)", +"36555b85": "add(string,uint256)", +"36566f06": "togglePaused()", +"3656de21": "getProposalById(uint256)", +"3656eec2": "balanceOf(uint256,address)", +"36579ff6": "Burnable()", +"3657ba36": "getSharedAccountPw(bytes32,bytes32,bytes32)", +"36585cd3": "getBatchStartTimesLength()", +"3658964c": "totalBal(address)", +"3659078c": "DailyDivs()", +"3659467b": "registerName(uint256,bytes32)", +"3659887c": "isAlreadyUser(address,address)", +"3659a8b2": "bonusEnds1()", +"3659cfe6": "upgradeTo(address)", +"3659d90f": "month12Allocated()", +"365a5306": "loan(uint256)", +"365a86fc": "hub()", +"365af466": "failedWhitelist(address)", +"365b1b15": "upgradeKiOS()", +"365b29e8": "WEBPOUND()", +"365b5055": "isAccountFreezed(address,address)", +"365b94ad": "saleFinished()", +"365b98b2": "users(uint256)", +"365c2e95": "hasEnough(address,uint256)", +"365c81fb": "pubsaleRate()", +"365ccbef": "didTakeOrder(bytes32,address,uint256)", +"365ce233": "removeAccountReader(address,address)", +"365db060": "acquireExternalGauntlet(uint256,address)", +"365e304d": "DATE_31_DEC_2021()", +"365e808d": "transferFromHyperstakingdisbursementfund(address,uint256)", +"365ede48": "setReport(string,uint256,string)", +"365f6e9f": "getCellsSinceLastEvent(address)", +"365fe9fd": "isDistributionTransferred()", +"36600999": "fundRepository()", +"366077ee": "addToPot(uint256)", +"3660943d": "checkState(bytes)", +"3660a084": "transferSigner(address)", +"3660bef0": "setDemandCurve(uint256,uint256)", +"3660fcd0": "setGuestName(string)", +"36610cb9": "storeOptions(address,uint256)", +"36645e01": "Election(uint256,uint256,uint256,address)", +"3664a0ea": "getLastCallKey()", +"3664b12d": "erc223Activated()", +"36651d2a": "setDestoryAddress(address)", +"3665708e": "nextMinPlay()", +"3666750e": "fillHeldData(address[],uint256[])", +"3667551c": "Partial8Send()", +"36682d5d": "Transtoken()", +"366859c4": "job(address,address[],uint256)", +"3669acad": "_newChallenge(uint64,uint64,address,uint256)", +"366a4120": "release(uint256,uint256)", +"366a68dc": "setBlockLock(uint256)", +"366ac8e0": "LGCCoin()", +"366b6e9e": "secureUnapprove(bytes32)", +"366ba691": "CBX()", +"366bb03c": "totaTeamRemaining()", +"366bc343": "AssignFeeToWallet(address,address,uint256)", +"366bc401": "collectedUSDWEI()", +"366d2b4e": "CancelledBySeller(bytes32)", +"366df51d": "initializeMintableTokenFundraiser(string,string,uint8)", +"366dff9c": "walletAllowances(address,address,address[])", +"366e81d6": "TokenSold(uint256,uint256,uint256,address,address)", +"366e881a": "commitScores(uint256[],uint256[])", +"366f2d86": "paymentDue(address)", +"366f77b7": "checkChoice(uint8)", +"3670e072": "gettoday()", +"3672404e": "getServiceCount()", +"367265fb": "transferTokensManual(address,uint256)", +"36730467": "split(uint256,uint8,uint256,address[],address,uint256[])", +"36733fa0": "addRange(address,uint256)", +"36738b41": "Crowdsale(address,address,address,uint256,uint256,uint256,uint256,address,uint256)", +"36746413": "PrivateInvestment()", +"367488ce": "roulette(uint256)", +"36751a6b": "uploadCode(string,bytes)", +"36756935": "FinalConfirmation(address,bytes32)", +"36756a23": "constructor(address[],uint256)", +"3676049b": "setFundFeeAddress(address)", +"367605ca": "setApprovalForAll(address,address,bool)", +"36760fd2": "HULKtoken()", +"36767205": "increaseTokenLock(address,uint256)", +"3676b342": "createAddOn(string,uint256)", +"3677b5f2": "LATokenMinter(address,address)", +"3677c333": "authorizeBurnRequester(address)", +"3678933c": "isEpochDataSet()", +"3678f179": "crosairShipMinted()", +"367a0f97": "getReputationProblems(address,string)", +"367ad6ea": "redeemPack(uint256)", +"367afa7a": "_nextPrice(uint256)", +"367ba52c": "submitOrder(uint8,uint8,uint64,uint64,uint16,uint16,uint16,uint16,uint16,uint16,uint256)", +"367bbd78": "strlen(string)", +"367bc8d3": "TransmutedTransfer(address,address,uint256,address,string,string)", +"367bf2f9": "currentBlockHeight()", +"367c574f": "DIP_Pool()", +"367cad89": "alternative_Exchanges_links()", +"367ebb99": "deathData_a12()", +"367edd32": "enableContract()", +"367f0708": "ico1Raise()", +"367f20f6": "_unpackBaseDamageValue(uint256)", +"367f34de": "performALU()", +"36805961": "setStr(string,string)", +"368186ef": "DigiberyToken()", +"3682905e": "RICOStandardPoD()", +"36829419": "AddrInvestor()", +"3683b44a": "checkPrizeAlreadyReceived(address,uint256,uint256)", +"3683ec67": "CavsvsPacers425()", +"3683ef8e": "preSign(bytes32,address,bytes)", +"36840423": "AddAdrJullarTeam(address,address)", +"36842110": "wasCrowdsaleStoped()", +"36851957": "CustodianInterface(address)", +"36865384": "BuyShare(uint32,uint32,address,address)", +"368691fc": "comprarTicket(uint256,uint256)", +"3686ca3e": "beneficiaryWithdrawal()", +"3686d52a": "ppsBase()", +"3686edc7": "_getBmcDaysAmountForUser(bytes32,uint256,uint256)", +"368701b9": "firsttestnetico()", +"3687e257": "TenantTerminate(string)", +"3687e921": "readInfo(address,uint256)", +"3687f24a": "setFee(uint128)", +"36880b82": "recordOwnerOf(bytes32)", +"368818aa": "FrozenMediaTokenFunds(address,address,bool)", +"3688632e": "setAvgSalesCount(uint256)", +"3688c272": "getTokenPriceListByIds(uint256[])", +"3688fa2c": "issue(address,uint64)", +"3689a651": "paymentFrom(uint256,bytes,address,address)", +"368a5773": "SpermLab()", +"368a5e34": "AIRDROPPER()", +"368aa9ca": "p_update_priceUpdateAmount(uint256)", +"368af7f3": "availablePonzi()", +"368b069d": "deployEscrowClone(address)", +"368b2842": "safeBatchTransfer(address,uint256[],uint256[],bytes)", +"368b3c81": "PTTYC(uint256,string,string)", +"368b8772": "setMessage(string)", +"368bf74e": "TEAM_LIMIT()", +"368d09d8": "requestOracleValue()", +"368d6b25": "setRushTimeChallengeRewardsPercent(uint256)", +"368daf8f": "goldMigrationsCount()", +"368dde4b": "currentCost()", +"368e5d4e": "BTC_SUISSE_TIER_4()", +"368e85ff": "IICO(uint256,uint256,uint256,uint256,uint256,address)", +"368f3492": "AnemoiSaleContract()", +"368f76a9": "bossCutPercentage()", +"36909ddd": "isATMHolder(address)", +"3690fd03": "CPLPrivate()", +"3691125a": "LianPaiToken()", +"36917dfa": "getPony(uint256)", +"3691dd11": "userApprove(address,uint256,uint256)", +"3692d61a": "log(string,bytes32)", +"3693396a": "getLastSignedTime()", +"36937781": "initialize_proposal()", +"369388cc": "EMISSION_FOR_BOUNTY()", +"3693db0a": "FOUNDER_ONE()", +"36944e49": "secondRefundRoundRateNumerator()", +"36945328": "setAddrContractCaller(address)", +"3694566e": "getRate(uint256,bytes32)", +"3694569e": "IHateEos(string)", +"3694629a": "getQuestionFinalizable(uint256)", +"3695507b": "IRC_PER_ETH_PRE_SALE()", +"3695672b": "newBurnableOpenPayment(address,uint256,bool,uint256,string)", +"36958413": "weaponEntities(uint256)", +"36965e3a": "SetAElfDevMultisig(address,address)", +"3697d0a7": "renderLandingHash()", +"3697efb2": "MinerEdgeCommunity()", +"3697f055": "withdrawFunding(uint256)", +"36988bc4": "currentLoanPerson()", +"3698de0a": "soliditySha3(bytes32)", +"369ac28f": "deltaTime()", +"369b1ce5": "initialBuy(address[])", +"369badf1": "getCreditsAtIndex(uint256)", +"369bcd64": "_checkPixelUnder(uint256)", +"369cbbb4": "checkMonthlyLimit(address)", +"369cd460": "totalPilfered()", +"369d32f1": "Items()", +"369d8138": "createAsset(string,string,string,uint256)", +"369de07d": "PDTX()", +"369e2422": "updateTokenPricePerUSD(uint256)", +"369e8c1d": "commit(address)", +"369f927f": "initBlockEpoch()", +"369fe962": "getDisputeMemorySize(uint256)", +"36a013c8": "LogInvestment(address,address,uint256)", +"36a09eae": "SetPriceMultiple(uint256)", +"36a0f511": "getPeriodMinting(uint256)", +"36a128c2": "MyJioCoin()", +"36a1bbfd": "baseTargetReached()", +"36a1c184": "IsArt()", +"36a1fb5f": "changeUserStatus(address,bool)", +"36a23dbf": "freezing(bool)", +"36a26b99": "END_TIME_PRESALE()", +"36a26fd9": "TokenDeactivated()", +"36a2f0f1": "changeLocked()", +"36a31de5": "getRequestOwner(uint256,uint256)", +"36a33f99": "isLimitMint()", +"36a3668a": "teamTokensPerPeriod()", +"36a36f7c": "betexStorage()", +"36a39882": "_proceedStage()", +"36a42675": "combineInterest(uint8,uint8)", +"36a4f2ba": "createBtcAddress(uint256,int256,uint256,int256)", +"36a60891": "setTrainingFeeMultiplier(uint256)", +"36a6412b": "buyMicroKeysWithHandle(string,bytes32)", +"36a6ad58": "mintPartnershipTokens()", +"36a716da": "createOrderHash(address,address[3],uint256[5],int256)", +"36a7cf1f": "setBallotFactory(address)", +"36a9f2f7": "xactionFeeNumerator()", +"36aa972e": "FullPayChain()", +"36ab0f15": "getNewAllowancesEffectuation()", +"36ab753e": "startRefunding()", +"36abffd4": "_receiveFunds()", +"36ac732e": "updateSecondChangeBlock(uint256)", +"36ad6e46": "SendTokensToFounders(uint256,uint256,uint256)", +"36add1df": "interestDistribution()", +"36ae22f0": "emitFeePeriodRollover(uint256)", +"36ae31ec": "getCatOwners()", +"36ae5040": "isMinted()", +"36aec5a3": "amountContributed(address)", +"36af1954": "withdrawnReadable()", +"36af50fd": "setSale(address)", +"36af8151": "setSpareRecommAddr(address)", +"36b024ab": "setTransferableDate(uint64)", +"36b09474": "winningNumbersPicked()", +"36b1315c": "min64(uint64,uint64)", +"36b19cd7": "adminWallet()", +"36b1f6a3": "getDApp(uint256)", +"36b222b3": "fillOptionOrder(address[3],uint256[3],uint256[2],bool,uint8,bytes32[2])", +"36b2e0f9": "acceptBidForCollectible(uint256,uint256,uint256)", +"36b2fe94": "setPurchaseAdmin(address)", +"36b324ff": "unMap(address)", +"36b33415": "modifyMemberInfo(string,string,string,string)", +"36b3da05": "chargeBalance()", +"36b40bb6": "leftOnLastMint()", +"36b61e3c": "otc()", +"36b641c2": "MakeMyToken(string,string,uint256)", +"36b69367": "parentFees(address)", +"36b77107": "lastDeposit()", +"36b81feb": "Deed(address)", +"36b97fd5": "TestToken5(address,address,address,address,address,address,address,address)", +"36b9856d": "newOraclizeSetProof(string)", +"36bacc7c": "getTentativeWinningPayoutDistributionHash()", +"36bb9ffa": "MANHATTANPROXYPARKAVE()", +"36bc32a2": "expectedPayout(address)", +"36bcb4c9": "changeAge(uint8)", +"36bcb4cd": "ViteToken()", +"36bdee74": "totalETH()", +"36be2a73": "setLedger(uint8,int256)", +"36bee178": "add_to_withdraw_bounty()", +"36bf094b": "BonusPeriodsCount()", +"36bf2e15": "ERC20ImplUpgradeable(address)", +"36bf392b": "distributeInvestorsFee(uint256,uint256)", +"36bffe1e": "nextCommonTTMTokenId7()", +"36c0aada": "setValueAll(uint256)", +"36c0c834": "buySignature(bytes16)", +"36c1a50f": "notZeroNotSender(address)", +"36c28466": "Panel()", +"36c2a922": "KryptopyToken()", +"36c2d72d": "getTotalSlaves(address)", +"36c35f94": "finalize1()", +"36c4a520": "Volks()", +"36c4ad0c": "getEthFromKeys(uint256,uint256)", +"36c4db09": "setCOO(address,bytes)", +"36c4ff7a": "payoutAddr()", +"36c5787e": "setTokensWave(uint256,uint256[10])", +"36c5bf8c": "_ownerReleaseLimit()", +"36c5d724": "removeToken(uint256)", +"36c5ff5d": "addToTransactionDisallowedList(address)", +"36c61b60": "_buyToken(uint256,uint256,uint256)", +"36c63b8d": "AbstractVirtualToken()", +"36c6a410": "BatanCoin()", +"36c7d4bd": "processReinvest(uint256,uint256,uint256)", +"36c802a0": "priceStage2()", +"36c84de5": "getPlayerDataByAddress(address)", +"36c8af5d": "_getId()", +"36c8c0e9": "addBonusBatch(uint256[],address[])", +"36c8c5ee": "voteForCandidate(uint256)", +"36c8e831": "PhillionToken()", +"36c92c3f": "setRoundDuration(uint256)", +"36c9c62d": "transfer_opt(address,address,uint256)", +"36ca97d6": "tokenFeePercent()", +"36cb4c48": "log256(uint256)", +"36cb8098": "BouCrowdsale(uint256,address,address)", +"36cb8740": "test_3_accessRestriction_vote_shouldThrow()", +"36cbee23": "bountyFunds()", +"36cc17a7": "clientClaim(uint256,uint64)", +"36cc18b5": "setPriceIdv(bytes32,address)", +"36cc1ebb": "setCCH_edit_13(string)", +"36cc6a10": "modifyTokenFee()", +"36cd24aa": "prepareVote(bytes32,uint256)", +"36ce94bf": "bytesToAddress1(bytes)", +"36cf7c87": "dead()", +"36cfe3eb": "starbaseEarlyPurchase()", +"36d0288c": "CL()", +"36d02c94": "changeSettings(uint256,uint256)", +"36d03356": "setAdvisorsTeamAddress(address)", +"36d10e45": "LemonsRemainingToDrop()", +"36d1535d": "getEbola()", +"36d15f2a": "_validateSettleSignatures(bytes32,bytes,bytes,bytes,bytes)", +"36d18b67": "RED()", +"36d1f54b": "UnitedfansTokenCrowdsale(address)", +"36d213ec": "TRToken(uint256)", +"36d22de7": "pokerbox(uint256,uint256)", +"36d26647": "getReportHash(uint256)", +"36d300b3": "addAction(uint256,uint256,uint256)", +"36d373c0": "writeDefinitions(uint8,string)", +"36d38bd4": "scs()", +"36d43c24": "withdrawId()", +"36d505cf": "_breedWith(uint256,uint256,uint256)", +"36d61112": "getVendingStepQty(uint256)", +"36d647cf": "bonusLine()", +"36d81f07": "getUser1()", +"36d90c2d": "Dillionworldcoin()", +"36d9377e": "GetAllNode()", +"36d938d8": "Transaction(uint256,uint256,address,uint256,uint8,uint256,uint256,bytes)", +"36d95f56": "MIN_FUNDING_GOAL()", +"36da1471": "crowdSaleCheck()", +"36da4468": "supplier()", +"36da5cd8": "atomToken()", +"36da9ec9": "roundTwoRate()", +"36dac2cc": "getMeta(uint256)", +"36dc1dd2": "createBSMHash(string)", +"36dc58f6": "total_SDCC_supply()", +"36dd20a7": "getJobWorker(uint256)", +"36dd58f2": "dispatch(address,uint256,string)", +"36de44e0": "GFC(uint256,string,string,uint8,address)", +"36df05bc": "wholesaleLeft()", +"36df99b6": "blackswanToken()", +"36dfe260": "payOneTimeReward()", +"36e0004a": "multiSig()", +"36e05d94": "fundariaShare()", +"36e0e824": "asset(uint256,bytes)", +"36e0f6cc": "allowSell()", +"36e4e8fd": "tulipToOwner(uint256)", +"36e4f915": "claimToken(bytes32,string,address)", +"36e520bc": "verifyAddresses(address[])", +"36e61cf7": "decTap(uint256)", +"36e685f5": "setCLevelAddresses(address,address,address,address)", +"36e6b92e": "taskProcessedWithCosting(uint256,uint256)", +"36e73918": "getRegionNextImageId(uint256)", +"36e9f43f": "SMRDistributionVault()", +"36ea1938": "executeTrade(address,address,uint256,uint256,address)", +"36ea76e2": "Hyperion()", +"36ea8189": "DetailsUpdated(bytes32,bytes32,uint256)", +"36ea8702": "makeMetaPublic(uint256,bool)", +"36eb3aa9": "LGBT()", +"36eb5b47": "getResoSCParams()", +"36ebc4dc": "__allocateTokens(address)", +"36eda23f": "setRST(address)", +"36edbe17": "createPlayer(address,uint256)", +"36ee1f2b": "SDTToken()", +"36ee46f5": "killAnimal(uint8,uint16)", +"36ee7773": "getBallotsStorage()", +"36ee83f9": "getOrderPriceTotal(uint256)", +"36ee8812": "updateReleasedBalance()", +"36eec28e": "allocated4Year()", +"36eed01f": "getScoreWithCustomerAddr(address)", +"36ef0cea": "createStartingColors()", +"36ef1abb": "disburseDividends()", +"36ef6c82": "addEmbassyOfCountry(address,uint256)", +"36ef80db": "getId(address,address)", +"36f00e8a": "setFeeFlat(uint256)", +"36f19b77": "getPurchasedBlockhash(uint256)", +"36f2393e": "changeTokenURIPrefix(string)", +"36f26095": "minimalCap()", +"36f2b803": "Oceans8RT()", +"36f3dc2d": "STAGE_FOUR_ETHRaised()", +"36f54767": "VitaminToken(uint256,string,string)", +"36f656d8": "assertEq(string,string,string)", +"36f66528": "EtherDelta(address,uint256,uint256)", +"36f78d77": "newGroup(address[],uint256,uint256)", +"36f7992b": "putOnSale(uint256,uint256)", +"36f7ab5e": "contactInformation()", +"36f7cd70": "setPricePerStake(uint256)", +"36f8edc2": "getPlayerShipBattleLossesById(uint64)", +"36f93a99": "cofoundersSupplyVestingStartDate()", +"36f9825f": "accountIndex(uint256)", +"36f9f49c": "etherandomSeed()", +"36faa509": "ssps(uint64)", +"36fbedd3": "existsAuditorFromMultiRequestAssignment(uint256,address)", +"36fc75ee": "setRegsitrarAddress(address)", +"36ff37f4": "UpdateEvent()", +"36ffa905": "getMyProposals()", +"370014f2": "sendFundHome()", +"370097ac": "donotUSBDappToken()", +"370099d4": "airSwap()", +"370158ea": "info()", +"37016a5f": "getAuctionStartedAt(uint256)", +"3701fada": "PFC()", +"370292eb": "clearApproval(address[16],address,uint256)", +"3702ab03": "buyBasicCards(uint256,uint256)", +"37033be6": "processReservationFundContribution(address,uint256,uint256)", +"37034853": "ownerHistoryCount()", +"3703d911": "createItem(string,uint256,uint256,address,uint32,string,uint32)", +"370419e5": "arm()", +"37048f8f": "_newValidatorSetCallable()", +"37049b06": "getTier(uint32,uint256)", +"3705f69e": "canRelease()", +"37072ec7": "getHealthCitizens(uint256)", +"37074dae": "receivedEther(address)", +"37077409": "_updatePurchasingState(address)", +"3707a967": "putForExchange(uint256)", +"3707cfc1": "update(uint256,uint256,address)", +"3707ed7e": "gettops(address)", +"37086c8e": "airdropWithLockup(address,address,uint256,bytes)", +"3708c99e": "openWhitelistEndTime()", +"370943e3": "ZionToken()", +"370b6939": "AdminSetDrawer(address)", +"370b8c90": "info(bytes)", +"370c6001": "abortTransaction()", +"370d4c6e": "setGameOn(bool)", +"370d62ad": "anyRateIsStale(bytes4[])", +"370e052b": "addPreSaleTokensMulti(address[],uint256[])", +"370e9161": "rollDice(uint256,uint256)", +"370ec1c5": "_fillOrder(address,uint256)", +"370f2827": "finishJackpot(uint256,uint256)", +"370f388e": "MegaCandy(address)", +"370fb47b": "triggerTime()", +"370fc812": "set_stopsell(bool)", +"370fed6e": "setProfile(string,string,string,uint32)", +"37110967": "eTokensToSend(address,uint256)", +"371115d1": "LamboToken(uint256,string,uint8,string)", +"3711d9fb": "saleDuration()", +"3711e829": "withdrawnAmountForSalePromotion()", +"37126b38": "getTime5(address)", +"3712880c": "changeTokenExchangeRate(uint256)", +"37128a12": "initBoostData()", +"371303c0": "inc()", +"3713513a": "TOKENO()", +"3713ab41": "WPXSold()", +"37142391": "GetPartManager(uint8,uint256)", +"3714ae13": "newTokenPrice()", +"3714e274": "mintAllBonuses()", +"3715ae53": "sendApprovedTokensToInvestor(address,uint256)", +"37164433": "withdrawConfirm(uint256,address)", +"3716b8b4": "DonatorSetBanner(string)", +"3716bd22": "showCertificationDetails(uint256)", +"3716ca33": "updateGenerationRatio(uint256)", +"3716f65d": "withdrawDthShop(address)", +"3717798b": "auctionStarted(string)", +"3717a7a7": "Omnic(string,string,uint256,uint256)", +"3717f34c": "divRemain(uint256,uint256)", +"37180750": "getTaskKeyAtIndex(uint256)", +"3718766b": "EventQuitBattle(address,uint256)", +"37189157": "checkWithdrawalAvailability(address,address)", +"3718a923": "canShelf(string)", +"3719427e": "acceptDividends(uint256,uint32)", +"371a4ea8": "getProposalById(uint32)", +"371aa158": "init(address[],uint256[])", +"371ab702": "getMicroModuleByIdPart2(uint256)", +"371be589": "getconfig()", +"371c7dba": "setAllowPriceUpdate(bool)", +"371db7af": "BlockPaymentSystem()", +"371dd5ed": "initRound()", +"371e8e27": "gameResultsLogged()", +"371ecfde": "_directTransfer(address,uint256)", +"371f468c": "GlobalSuperGameToken(uint256,string,string)", +"371fe247": "_checkHashAndTransferExecutorFee(bytes32,bytes,address,uint256,uint256)", +"37205d76": "isCrowdSaleSetup()", +"3720e5b6": "E_AuctionStarted(address,uint256,uint256)", +"3721a634": "requestSpectatorRewardForGladiatorBattle(uint256)", +"3721ee15": "ownerAccessoryCollection(address,uint256)", +"372210d1": "addGenesis(address,bool)", +"37227c07": "logFeeTokenTransferred(address,address,address,uint256)", +"3723100d": "mutiEthTransfer(address[],uint256[])", +"37235758": "currentEndsAt()", +"3723bc0e": "shareholders()", +"3723f149": "FOUNDATION_SHARE()", +"37246f43": "getVoteRulesOfTransaction(address,uint256,bytes)", +"37247af5": "_recalculateAvailable(address)", +"3724fb24": "tradeSpreadInvert()", +"372500ab": "claimRewards()", +"37253e35": "defrostTokens(uint256,uint256)", +"37254184": "jvCoin()", +"3725814a": "getMaxAddresses()", +"37258302": "SubwooferToken()", +"37268dbb": "_internalExchange(address,bytes4,uint256,bytes4,address,bool)", +"37270069": "maxWeiRaised()", +"37270936": "commander()", +"37271cc7": "withdrawBid()", +"37273b86": "PRICE_STAGE_PRESALE()", +"3727ae2d": "AthTokenBase()", +"3728aa4c": "saleCapReached()", +"3728bec2": "getCharacter(uint32)", +"3728f1f7": "EthereumOne()", +"37292eeb": "AVAILABLE_COMPANY_SUPPLY()", +"3729847b": "processSalesForSingleBuyer(uint256,address)", +"372a2a36": "DigitalArtChain()", +"372a49bd": "mspController()", +"372c1aff": "getPublicKeys(uint256)", +"372c6533": "START_DATE()", +"372c66e3": "updateAsset(uint256,string,string,string,uint256,address)", +"372cb1d9": "CallCount()", +"372cd183": "addAdmin(address,bytes32,bool)", +"372cd7ad": "clearAuthOfPermission(address)", +"372cfcc3": "noteSaleLocked(address,uint256,uint256,uint256)", +"372d6b27": "getStatistics()", +"372e80c3": "FLIPPINESS()", +"372ea717": "test_oneInvalidEmptyAddress()", +"372ed8cc": "setOraclizeDelay(uint256)", +"372f6bfe": "_refererUpdate(address,address)", +"372f88b6": "ICC()", +"372fc8d3": "HTSupply()", +"372ff945": "isInPhase(uint256)", +"37305e2a": "withdrawFromCustody(uint256,address,address)", +"37306299": "BurnableToken()", +"3730bb40": "yxkTOKEN()", +"37321bd7": "callstoredaddress(address)", +"37323d19": "LuckyETH()", +"3732c86b": "doubleTransferWithBurn(address,address,uint256,uint256)", +"3732e153": "ETHPrice()", +"37334878": "SHORTADDRTOKEN()", +"37338b05": "requireDing(uint256)", +"37339506": "restrictedPercent()", +"3733b378": "transferStackAndCall(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"3733faba": "forceStopCycle()", +"3733ffca": "convertTo(uint256,string,string)", +"37354a68": "luckyNumberOfAddress(address)", +"3735ab75": "buyCastle(address)", +"3735d57d": "PRESALE_BONUS_LIMIT()", +"3736d853": "setAverageBlockTime(uint256)", +"37371bc5": "getRandomRouter()", +"37375a43": "createContractEditionForCollection(string,uint256,uint256)", +"37376ca8": "cancelProposal(bytes32)", +"37383c2d": "getEventStart()", +"3738aa19": "ReleaseFundsToInvestor()", +"3738eb8a": "GolfCoin()", +"37391ce2": "testUnescapedQuoteInString()", +"373a1bc3": "scheduleCall(address,bytes4)", +"373a3af8": "intersect(uint256[],uint256[])", +"373a7c01": "fundTotalSupply()", +"373ae230": "checkLimit(address,address,uint256)", +"373c1df9": "test_3_destoryTokensAccrossBlocks_increaseBlocksBy1000()", +"373c98a2": "authCall(address,bytes32)", +"373d46b0": "IPOI(uint256)", +"373dde4f": "countPurchasedPixels()", +"373e0c80": "setFreezeAccount(address,bool)", +"373e441c": "addUserRole(string)", +"373eef4b": "ABsCoins(address,uint256)", +"373f5ff0": "COLOR_GREY()", +"3740eee9": "SetFund(address)", +"37411dc3": "createRandomZombie_Ether()", +"3741b92b": "jrecover_y(uint256,uint256)", +"3741c90b": "setAuthorizedWithdrawalAmount(uint256)", +"3743f0bf": "teamReserveAllocation()", +"3746010d": "createPrizeFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"3746b446": "Predictor()", +"37472c4b": "setDepository(address)", +"3749ea8e": "contribute(address,address,uint256,uint256)", +"374abace": "contractstarttime()", +"374aed97": "getCells()", +"374b8cda": "getTrade(uint256,address,address)", +"374b94c8": "MEC()", +"374ba203": "get_hosp1(uint256,uint256,uint256)", +"374bb090": "isAddressSet(address,address)", +"374bfba7": "claimFreeReferralPack()", +"374e164c": "addVirusDef(address,uint256)", +"374e9aa1": "stageForBlock(uint256)", +"374f7b7e": "checkLoanStatus(address,uint256)", +"375023f2": "total0xbtcReceived()", +"3750e05a": "TOKENS_BOUGHT()", +"37516ead": "microTip()", +"375188dc": "nextTask()", +"3751e6bc": "get_last_global_audit_document()", +"37525ff0": "listItemFromRegistry(uint256)", +"37528882": "calculateIntervalEarning(uint256,uint256)", +"37531b45": "StudentCoin()", +"37542d10": "addReferrer()", +"37548549": "setRecipientString(string,string)", +"37567d49": "maintenanceDeactivateUser(address)", +"3756b62b": "toB32(uint256,address)", +"3756bb45": "noOfTicketsOwned(address)", +"3756e207": "ExtremiumToken()", +"37574b3d": "TOKEN_FOR_TEAM()", +"37593f46": "queryN_fnc(uint256,string,bytes,uint256)", +"375a8131": "addStudent(string,bytes32,string)", +"375b3c0a": "minStake()", +"375b74c3": "custodian()", +"375c0117": "BurnTokens(address,uint256,bool)", +"375c21b0": "random(bytes32,uint32)", +"375c405d": "canIssueIndividual()", +"375c4627": "supplyPICO(address)", +"375c86dd": "m_pools()", +"375d6d90": "received_ethers(address)", +"375d9dc6": "isLimited(address,address,uint256)", +"375dce69": "getIssuable()", +"375e3ea8": "payoutForBudget(uint256,uint256)", +"375e88bd": "increaseBTCRaised(uint256)", +"375f2b96": "getCost(uint8)", +"375f3a9d": "PERC_TOKENS_TO_INVESTOR()", +"375f4498": "SetEditMode()", +"3760153c": "ETHero()", +"37603132": "RollLottery(uint64)", +"3760ceb0": "WAITTIMEUNTILWITHDRAWORTRANSFER()", +"37612672": "producer()", +"3761a3d6": "buyUcCoins()", +"3761d23f": "setFeeDistributionAndStatusThreshold(uint8,uint8,uint256)", +"3761dea8": "MarketPlace(address,address,uint256,uint256,address)", +"37621da0": "setMinChildCount(uint256)", +"3762346b": "externalPurchaseTokens(address,uint256,uint256)", +"37624204": "endPreIcoDate()", +"37629dda": "getArticleItem(uint256,uint256)", +"3762f0fe": "initMembers()", +"37632065": "claimUnderlying(address[2],uint256[7],uint8,bytes32[2])", +"37633f29": "TokensGate(uint256,uint256,uint256,address)", +"37638119": "getHouseEdgeAmount(uint256,uint256)", +"3763965f": "private_profits()", +"3763d4b4": "generalSaleEndDate()", +"3764cf3f": "NUMUS()", +"3764e2be": "setup(string,string,uint256,uint256)", +"37664643": "retractLatestRevision(bytes32)", +"376678e3": "BABYT()", +"37668a8b": "create(bytes32,address,bytes32,address,bytes32)", +"3766baba": "transferAllFromForcibly(address,address)", +"3767aec6": "handleTimedTransitions()", +"3767ea7e": "setTotalCapacity(uint256)", +"37680f18": "ERC20Standard(uint256,string,string)", +"37681083": "incrementReputation(uint256)", +"3768304c": "autoMint()", +"37689317": "generateLockedTokens(uint256)", +"3768bd09": "mulToFraction(uint256,uint256,uint256)", +"3769862f": "isAllowedUser(address,uint256,address)", +"376a4ce0": "setstring(uint256,string)", +"376b9c25": "depositProvider()", +"376c7374": "w_Bounty()", +"376d1555": "sendAuto(address)", +"376d567c": "setMod(address)", +"376db394": "setFreeze(address,uint256)", +"376ed9c6": "totalHedgelyWinnings()", +"376edf93": "getBidsByAdslot(uint256,uint256)", +"376ef9b8": "fromContractAddr()", +"376fc790": "fullTransfer(address)", +"376fc952": "setMaxReferrerBonusRequirement(uint256)", +"376fe102": "userId(address)", +"376ff7f0": "isRefundAllowed()", +"377002fb": "beArbitrator()", +"37714274": "FrancevsArgentina()", +"37717342": "breedOwn(uint256,uint256)", +"3771ab97": "payDividents()", +"37721ab7": "getDougName(string)", +"377272b3": "createValue(address,uint256)", +"3772c371": "getprize()", +"3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", +"377481ca": "unlockedAddress()", +"3774e6f5": "starbaseMarketingCampaign()", +"37751b35": "doTransfer(address,address,uint256)", +"3777261d": "approvedFactories(address)", +"37775807": "buyerBalances(address,address,uint256,address)", +"3777f5d0": "tokensPerWeiBonus333()", +"3778e5b2": "groupInfo(uint32)", +"37790454": "PrintWinningInfo(bytes32,uint256,uint256)", +"3779a3b6": "saleRunning()", +"377a0f53": "bankAccount()", +"377ab651": "nextTurn(uint256,uint256[3],uint8[176])", +"377b2009": "isCanSell()", +"377b47a3": "logIn()", +"377c6a3e": "eth(uint256,uint256)", +"377d54ce": "assertOnlyParticipants(uint256)", +"377d78ce": "defineProjectWallet(address)", +"377dda1a": "NamiCrowdSale(address,address,address)", +"37800bde": "calculateTransferFee(uint256)", +"37806f07": "galleryOne()", +"3781afbc": "_isCorrectFullBuyin(uint256)", +"3781d882": "setRate347()", +"3781e576": "isOperatorForTranche(bytes32,address,address)", +"37820c57": "bulkMint(address,string,uint256)", +"378252f2": "closeAuction()", +"37828c52": "OTHER_STAKE()", +"3782cae2": "set_max_contribution(uint256)", +"37831b97": "payReward(address,address,uint256,uint256)", +"37848b6b": "getOwnedShipCount(address)", +"3784f000": "setEndDate(uint256)", +"378525bd": "bestAngel()", +"378544df": "timeAfterSoftCap()", +"378652d2": "MultiTransper(address[],uint256)", +"3787a30a": "ownerWithdrawEth(address)", +"3787b748": "WalletChange(address)", +"3788036f": "isAgreementSigned(bytes32)", +"37881299": "getCompare()", +"37881810": "setCallbackAddress(address)", +"3788e371": "BaldcoinCore(string,string,uint8,uint64,uint64,uint16,uint256,address[])", +"37890f94": "maliceReported(address)", +"378a2178": "tallyVotes()", +"378aa701": "getCurrentState()", +"378afddb": "withdrawMYB()", +"378b6a89": "canContribute(address,uint256)", +"378bc89d": "findAddress(bytes32,bytes32)", +"378c0605": "buyTickets(address)", +"378c4c1c": "computeMerkleRoot(bytes,bytes)", +"378c7cd9": "logCheck(uint256,string,uint256)", +"378c93ad": "setClaimable(bool)", +"378ca888": "setMaxFinalizationTime(uint256)", +"378cdb62": "proxyList(uint256)", +"378dc3dc": "initialSupply()", +"378e061e": "inactive_payable()", +"378e0fc1": "checkKwhDeployerAddress()", +"378e25f2": "withdraw_2Completed()", +"378ebf93": "setTokenToEtherAllowed(bool)", +"378efa37": "divider()", +"37900d5a": "issuedFromOtherCurrencies()", +"3790613f": "minChildCount()", +"379080da": "PRICE_MULTIPLIER_PREICO1()", +"379119af": "SJT()", +"3791759c": "migrateFeesDueToFork()", +"3791792a": "mintPack(uint256,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"37918bcb": "declareMvpLaunched(uint256)", +"3792a018": "left8(uint256)", +"3792a865": "MacroTokenContract()", +"3792e117": "GaiaToken()", +"37930615": "extend(bytes16[],uint64)", +"3793c1e8": "get_num_of_uses(address,address)", +"3793ccb3": "isPlayerOnBoard(uint256,address)", +"37941589": "test123token(uint256,string,string)", +"3795ad25": "lockStartDate()", +"379607f5": "claim(uint256)", +"37960cd5": "publicKeySize()", +"379698c1": "calculatePie()", +"37970dbe": "shouldAirdrop()", +"379725ee": "queryName()", +"3797528e": "IllusionDust()", +"3797b4de": "forwardRemaining()", +"37981c32": "pre_maxGoal()", +"37983aed": "getMyCards(address)", +"37986d2b": "freezeAndConfiscate(address)", +"37989eb6": "setOwnerBurner(address)", +"379930f7": "WHEEL_SIZE()", +"379986d9": "executeBurnProposal(uint256)", +"379995c3": "getDealerAndLuckyInfo(uint256)", +"3799bbd3": "privatePresaleAllocatingToken()", +"3799c5eb": "test_insert_findWithHintPrevRemovedUpdateHead()", +"379abed8": "ANPlaceholder(address,address)", +"379b7589": "signedTransfer(address,address,uint256,uint256,uint256,bytes32,address)", +"379ba1d9": "setTradingStatus(bool)", +"379ba2ab": "exchangeForQIU()", +"379ba3b7": "currSaleActive()", +"379bad0b": "addProofOfPerfBlock(uint32,string,bytes32,bytes32,bytes32)", +"379c1bd9": "createHorseShoe4(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"379c5131": "getByOwner(address)", +"379c5d3f": "ModuleToken(uint256)", +"379c8f6c": "_keepLastTransaction()", +"379ca09e": "priceStep5()", +"379dbdeb": "accessAllowance(address,address)", +"379e00d4": "maxTextLength()", +"379e2919": "setDevFeePercent(uint256)", +"379e9957": "fiveMatchPayoutInPercent()", +"379f946a": "initGeneralAttr(uint32,uint64)", +"379fed9a": "isMasterOfCeremonyRemoved()", +"37a0b958": "DATAToken()", +"37a14b52": "changeICODates(uint256,uint256,uint256)", +"37a1c540": "founder1Wallet()", +"37a1c84f": "registerNameResolver(string,address)", +"37a2890d": "eraByIndex(uint256)", +"37a28979": "setSettings(uint256,uint256)", +"37a30d3b": "current_price_atto_tokens_per_wei()", +"37a31079": "pointsLimit()", +"37a31895": "withdrawSelect(address)", +"37a366d8": "loggedBalances(address,uint256)", +"37a38bb1": "StateChanged(uint8,uint256,string)", +"37a3931f": "invalidate(address)", +"37a47106": "create(uint256,bytes32,uint256,uint256,uint256)", +"37a58bb4": "KudosPollFactory()", +"37a59139": "estimate(string)", +"37a5ae1f": "withdrawSingleBucket(address,uint256,uint256,uint256)", +"37a5fbab": "SaleStart()", +"37a66d85": "setPaused()", +"37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", +"37a6d42b": "participant()", +"37a7095b": "LeviathanToken()", +"37a74f7e": "p_update_currentPlotEmpireScore(uint256)", +"37a7983b": "changeminContribAmount(uint256)", +"37a7b7d8": "feed()", +"37a7f2b7": "MIN()", +"37a87dfa": "updateList(address,address,bool)", +"37a91776": "OSATOKEN()", +"37a920f1": "Universe()", +"37aa1689": "getIcoDiscount()", +"37aa7f91": "isAuthorisedMaker(address)", +"37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", +"37ab9dcf": "getCPFee()", +"37ac8236": "getPunchCardsOf(address)", +"37ac9153": "Retrieve(string,address)", +"37adf3a3": "hasRefBonus()", +"37ae31c7": "DemSinhVienRequests()", +"37ae43a3": "BetOnHashV81()", +"37af5c32": "ANYtoken()", +"37aff76d": "getSystemAvaliableState()", +"37b0574a": "isClassic()", +"37b0786a": "icoInvestmentWei(address,uint256)", +"37b0ac71": "confirmTeamWithdrawal()", +"37b0f257": "setConfirmAddr(address)", +"37b34974": "reverse(bytes32)", +"37b475d4": "SOFT_CAPACITY()", +"37b4d863": "maxbet()", +"37b4f299": "IMTERC20()", +"37b54140": "buyTokensForAddress(address)", +"37b5dce4": "PDP()", +"37b6efeb": "engraveDefault(bytes32,string,string)", +"37b7bf11": "Tile(int256,int256)", +"37b89705": "getAgilityValue(uint256)", +"37b8cade": "raisedEthAmt()", +"37b8db1a": "executeVerdict(uint256,bool)", +"37b9756b": "totalIssuanceDebt_limitedSum()", +"37ba1b4d": "Fpgcchain(uint256,string,string)", +"37ba682d": "END_TIME()", +"37bb223e": "CUC()", +"37bb25bc": "withdrawalLimit(address)", +"37bd0d28": "howManyFucksGiven(uint256,bool)", +"37bd1868": "setHatchedEgg(uint64,uint64)", +"37bd78a0": "secondsTimeLocked()", +"37bdc146": "weiFounded()", +"37bdc99b": "release(uint256)", +"37be04b4": "EZStandardToken(uint256,string,uint8,string)", +"37be827d": "Sum()", +"37c08923": "totalContributions()", +"37c0a5ef": "Finished(uint256,uint8,uint8,uint8,uint8,uint8)", +"37c2afda": "signJUR(address)", +"37c30a98": "round_()", +"37c345cd": "specialManagerAddressMap(address)", +"37c35157": "updateTerm(uint256)", +"37c390e3": "allow_move(uint16)", +"37c3d50d": "buyAlt(address,uint256,string)", +"37c3ee6e": "doDistro(address[],uint256)", +"37c43088": "hashesSize()", +"37c44802": "initMonsterClassConfig()", +"37c57718": "ListingBought(bytes32,address,uint256,uint256,uint256,address)", +"37c62ed6": "createUnicornPriceInCandy()", +"37c6fcba": "LandlordTerminate(uint256,string)", +"37c74948": "getPropertyPrivateMode(uint16)", +"37c75992": "mintingIsFinished()", +"37c8d21f": "echo(string,string)", +"37c8f1d1": "AIgathaToken(address,uint256,uint256,uint256,uint256,uint256)", +"37caa8b6": "getTop(uint256)", +"37cb3c86": "distributeSlotBuy(address,uint256,uint256)", +"37cc7761": "contractReservedBalance()", +"37cc7cc0": "bannedCycles(uint256)", +"37ceb05b": "getFixtures()", +"37cef791": "getRate(address)", +"37d004b3": "bulkRelayCMCT(address[],uint256[],bytes32)", +"37d0208c": "bribe()", +"37d044cd": "tokenCreationPreSaleCap()", +"37d05434": "getCurrentRoundIssued()", +"37d1eb35": "setOffChainManagerAddress(address)", +"37d2649a": "Ownedfunction()", +"37d2d350": "setBOPSAddress(address)", +"37d33438": "totalHedgelyInvested()", +"37d3433f": "calculateAmountBoughtPreICO(uint256)", +"37d35507": "tokenCreationMinConversion()", +"37d365de": "admin_set_shopStoreRegister(address,address)", +"37d3ec7a": "ZBillionaire()", +"37d45088": "transferAllowed_(uint256,address,address,uint256)", +"37d48628": "totalSaleCapUnits()", +"37d4fc84": "Alpha()", +"37d76636": "item(uint256,uint256,bytes)", +"37d876b6": "GVTTeamAllocator()", +"37d9d7fc": "getBytes32(bytes32,bytes32)", +"37d9ffd1": "registerClient(address,uint32,uint256)", +"37da8058": "in_top_n(uint256,uint256)", +"37daa09e": "getUpCount()", +"37dac676": "getPOOL_edit_8()", +"37daf0ed": "getETHBalanceInfo()", +"37db0703": "isClean(string)", +"37db12c4": "PausePayment()", +"37dbbac4": "deleteMyEntity(uint256)", +"37dc414b": "balanceOfTarget(address)", +"37dc4b14": "setSpeedBump(bool)", +"37dd186b": "removePermission(address,string)", +"37dd5dd6": "poicoin()", +"37dda1ae": "setTktPrice(uint256)", +"37de1334": "rand16(uint256,uint16,uint16)", +"37de84d0": "createGame(string,string,bytes32[],string,uint256,uint256,uint256,uint256,uint256)", +"37df00c9": "receiveToken(uint256)", +"37df4828": "buy_planet()", +"37df6c03": "setAccountC(address)", +"37dfc70c": "getInvitationMultiple()", +"37e05590": "setKYCManager(address)", +"37e0e290": "numTokensSold()", +"37e12ab7": "checkGoalReach(uint256)", +"37e15240": "addRecord(uint256)", +"37e16f40": "currentAfterIcoPeriod()", +"37e246ad": "isOnAuction(uint256)", +"37e29e93": "BlueHillMining()", +"37e50f39": "awardPrizes()", +"37e531c0": "fechVoteNumForCandidate(address,uint256)", +"37e582b9": "LogRefundsEnabled(address)", +"37e58bd8": "GlowEther()", +"37e6b280": "verifyCommit(uint256,uint256,uint8,bytes32,bytes32)", +"37e6e03b": "setMultisigPre(address)", +"37e7a739": "Token3G()", +"37e822b8": "addRank(uint256,uint256,uint256,string)", +"37e87c7d": "OwnerManage(uint256,uint256,uint256,uint256)", +"37e8c09e": "getBet(bytes32)", +"37e922d7": "TERMS_AND_CONDITION()", +"37e94529": "setHardCapDividends(uint256)", +"37e94853": "TakerBoughtAsset(address,uint256,uint256,uint256)", +"37e9af0c": "IsAdmin(address,address)", +"37e9ebb5": "getExists(bytes32[])", +"37ea010a": "transferWithRef(address,uint256,uint256)", +"37ea1f63": "getWithdrawalCounter()", +"37eb6f91": "LiquidSwapToken()", +"37ebd0e0": "whitelist(address,uint256,uint32)", +"37ec33b7": "startDateOfUseTeamTokens()", +"37ec757f": "getStrFromId(uint256)", +"37ed2bef": "tokensToLock()", +"37ed89b2": "BitcoinPro()", +"37ede426": "WhaleWater()", +"37ee1837": "isCrowdSaleRunning()", +"37ee3edb": "buyTokensWithReferrer(address)", +"37efa397": "cryptoRomeWallet()", +"37f03888": "panicButton(bool)", +"37f0fa43": "PricingDay(uint256)", +"37f1353f": "PayPoolEntranceFee(string)", +"37f13fd6": "prova2()", +"37f1a470": "appoint(address)", +"37f1e7f2": "getPrice(uint8)", +"37f265e6": "get_session(address,uint32)", +"37f26746": "Remainder(uint256)", +"37f2beed": "getProposalVoterList(uint256)", +"37f2eaf6": "addTransaction(address,uint256,bytes,bytes)", +"37f33bd5": "EvenCoin()", +"37f344ff": "WhitelistedEarlyParticipant(address,bool)", +"37f3cb24": "testInitialBalanceUsingDeployedContract()", +"37f42841": "queryBalance(address)", +"37f4494b": "castLine(uint16,uint16,bytes32)", +"37f46e7e": "mintTokensByETH(address,uint256)", +"37f4c00e": "anchorGasPrice()", +"37f4dfea": "unsafeWriteBytes(uint256,bytes)", +"37f50f57": "wishes()", +"37f50f5b": "leggiFrase(uint256)", +"37f531ea": "_addHolding(bytes12)", +"37f534b6": "Blocform(address)", +"37f57d05": "StarterTokenBase()", +"37f7151b": "MTPToken()", +"37f7c4d4": "pow2()", +"37f80a58": "INVESTMENT_CAP_ICO_PHASE_ONE_POUNDS()", +"37f83291": "monuments(uint256)", +"37f86dce": "giveupBid(uint256)", +"37f9034d": "getAnimal(uint32)", +"37f944cc": "raiseBy()", +"37fa33fe": "EVATOKEN()", +"37fb217a": "valueForTranches(uint256)", +"37fb7e21": "distributionAddress()", +"37fbd30f": "etherHolder()", +"37fbec96": "totalTaxed()", +"37fc55bf": "give(string,uint256,string)", +"37fc91e3": "balanceWosPoolToTeam()", +"37fcb747": "TestERC20Token()", +"37fcb779": "sendAllFeesToAddress(address)", +"37fd25c7": "balanceOf(address[],address)", +"37fd6128": "tokenRate15()", +"37fd686f": "balanceOf(string,address,address)", +"37ff2506": "PRESALE_CONTRACT()", +"37ff65da": "Bugis_Crowdsale()", +"3800a119": "closeGateway()", +"3800d0a3": "get_proposal_count()", +"38014395": "originalAuction()", +"3801cde7": "Foodiecoin()", +"3801e6b6": "Cloud(uint256,uint256,string,string,address)", +"3802a4a2": "getEthDealRange()", +"3802d3ef": "totalTokensEmitted()", +"38039479": "setCandidate(uint256,string,string)", +"3803b7d3": "readAddressList(address,uint256,uint256)", +"3803f80e": "cancelCall(bytes32,address)", +"3804482a": "setMaxDistributions(uint256)", +"3804ab8d": "getTokensOnAuction()", +"3804c73d": "gameStartBlock()", +"380547c0": "addCompany(string,address,uint256,bool)", +"3806153e": "tier2()", +"3806422a": "stagesCount()", +"38075446": "shouldStopCoinSelling()", +"3807aabd": "generate(address,uint256)", +"3807ba1b": "poi()", +"380862b2": "getSynthesizeApproved(uint256)", +"3808ac11": "DXN()", +"38095a4a": "fccController()", +"3809b240": "settlementContract(uint64)", +"3809c0bf": "doInfinite()", +"380b5450": "getPrecomputedEToThe(uint256)", +"380ba30c": "confirmPrint(bytes32)", +"380bbf78": "getTokenIdOfAddressAndIndex(address,address,uint256)", +"380be68e": "open_new_node()", +"380bf002": "mintCountByTemplate(uint256)", +"380c686d": "setTokenPriceByOwner(uint256,uint256)", +"380c7a67": "authenticate()", +"380d831b": "endSale()", +"380e5e44": "makeProposal(string,string,uint256)", +"380e809e": "batchTransferFromMany(address[],address,uint256[])", +"380f3087": "addHashes(uint256)", +"380f3771": "viewRand()", +"3811264a": "ErrorLog(address,string)", +"38116187": "buySpike()", +"38118614": "sigTeamAndAdvisersEDUSupply()", +"3812783e": "getDeployedEvents()", +"38131bc5": "redeemOrSellCoinsToICO(uint256,uint256)", +"38132838": "setProviderSupply(uint256,uint256)", +"3813a7f2": "getWineIdentifierAt(address,uint256)", +"3813be76": "currentGameBalance()", +"3814253f": "grantFoundersTokens(address)", +"3814a7a3": "CardsBase()", +"3814b764": "setBridgeWidth(uint256)", +"381501e6": "SwapManager()", +"38151862": "SHSToken()", +"38151930": "isTokensPreIcoDistributed()", +"38158549": "NENCToken(uint256)", +"3815c742": "Koyo()", +"38164d41": "SGDsToken()", +"381656e2": "declineAll()", +"3816a292": "setToken(address,bool)", +"3816d4ee": "iICO()", +"381731be": "approveAndCall(address,uint256,uint256,bytes)", +"38178fbe": "addString(string,string)", +"3817ffda": "_limitedTotalIssuingCollateral(uint256)", +"3818657b": "isActiveFreelancer(address,address)", +"3818d907": "addPrecommitment(address,uint256)", +"38194aab": "_addNewCompanyTraders(uint256)", +"38198c65": "totalEtherGooResearchPool()", +"3819986e": "createNewPoll(string,uint256,uint256,uint256)", +"3819ea68": "SimpleMarket()", +"381a0161": "TRONIXGOLD()", +"381a730e": "withdraw_3()", +"381abeb5": "RonaldoChain()", +"381ae69a": "createReferee(address,address)", +"381c215f": "SEXYCOIN()", +"381cec91": "isVestingStarted()", +"381d5441": "roger()", +"381db641": "distributeTokenAndLock(address,uint256,uint256)", +"381ee645": "lastBlock_v0()", +"381f4b9e": "RRROToken()", +"381fe9ca": "DgxDemurrageCalculator(address,address,address,address)", +"38200801": "getExtensionPublication(string)", +"3820a686": "canBurn(address)", +"3821891e": "requestRegistration(string,address)", +"38218aa1": "getBettorInfo(uint256,uint256,address)", +"38219832": "spendEther(address,uint256)", +"38222858": "setThrowOnIncompatibleContract(bool)", +"3822de0f": "kvtToken()", +"38235781": "checkICO()", +"382396ee": "getGameStatus()", +"3823d66c": "withdrawn(bytes32)", +"3823df95": "testPop()", +"38241c16": "setKYC(address[],address[])", +"3824d8ee": "buy100DaoFor1Eth()", +"3824ea31": "getHighScore()", +"38266b22": "getData(address)", +"3827d0bf": "_createDank(string,address,uint256)", +"38280e6b": "setTokenDistributor(address)", +"38284f36": "release(uint256,uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", +"38285534": "gameDeveloperSupply()", +"3828b522": "serviceApprovedBy(address,address)", +"3828becc": "setBountyAmount(uint256)", +"3829111f": "BuyNowEvent(address,address,uint256,uint256)", +"382964a5": "withdrawForTeam(address)", +"38299afd": "recommendPaused()", +"3829dd22": "tokensForOneEth()", +"382b6f69": "test_oneInvalidEqBytes()", +"382c52cd": "transferableTokens(address,uint256,uint256)", +"382cbc79": "userDelete(address)", +"382cf0a6": "gamesPlayed(uint256)", +"382d39bb": "planCount()", +"382d606b": "CROSAIR_VOUCHER_PRICE()", +"382db937": "finishContributionPeriod(uint256)", +"382df05d": "getInvestmentByAddress(address)", +"382e5272": "addGameRecord(address,uint256,uint256,uint256,uint256)", +"382ef945": "Contributed(address,uint256,uint256,uint256,uint256,uint256)", +"382f431b": "open(bytes)", +"382f8411": "_createPassport(address)", +"382faa6a": "cancelToken(uint256)", +"382fc09f": "CoinVilaStart()", +"382fd819": "kyc(address,address)", +"38300f19": "setCAORatio(uint256[])", +"38302989": "getUsernameForAddress(address)", +"38304483": "pauseAllTransactions()", +"3830901a": "assignImmortalsToBattle(uint256)", +"3830ceeb": "totalriskcoinsSupplys()", +"38310f49": "weiMinimumAmount()", +"3831a8d5": "BurgerKapija()", +"3832677d": "partsMinted()", +"38331353": "MoreAI()", +"38350541": "_ownerOf(uint256)", +"38353104": "setBlockDotTimestamp(uint256)", +"38360ed8": "balance(bytes32,string)", +"3836a6d2": "setKYCLevelsBulk(address[],uint8[])", +"3836d3f4": "JapanvsPoland()", +"3836fe6e": "addPermittedContract(address)", +"38376154": "setGasForOraclize(uint256)", +"3837e9bd": "getGooCostForUnit(uint256,uint256,uint256)", +"3838a099": "aboutItem(uint256)", +"383a194c": "buyUnicornWithEth(uint256)", +"383bb22a": "setMinorEditsAddr(address)", +"383cf18f": "getGovtApplicationsCount(string)", +"383e3a5d": "buyPriceAt(uint256)", +"383e4b27": "submitRing(address[4][],address,uint256[6][],uint256,uint8[1][],uint8,bool[],uint8[],bytes32[],bytes32[],address,uint16)", +"383e9a3a": "claimTokensFromTokenDistrict0xNetworkToken(address)", +"383eea0e": "transferDevship(address)", +"383f61b3": "refundPlayersInRoom(uint256)", +"383fcd3a": "getLastPlayDateTime(address,address)", +"383fe467": "transferTokenOwnership(address,address)", +"383fe6d3": "setCentsPerMonth(uint256)", +"3840369b": "triggerEvent(int256)", +"3840d63d": "unknownReserved()", +"38416341": "getbetData(uint8,int8,address)", +"38419800": "taylorToken()", +"38421476": "changePaused(bool)", +"3842c57c": "petCollection(uint256)", +"38436c60": "transferEgg(uint256,address)", +"38439bb6": "update_tree()", +"3844426c": "EST(uint256,string,string)", +"3844e1c4": "getClientBalance(address)", +"38453f29": "registerCat(uint256,uint256,uint256,uint256,uint256,uint256)", +"384711cc": "vestedAmount(address)", +"38471dd6": "athenians()", +"3847807a": "stopGamGetToken()", +"38478ae7": "setMinterContract(address)", +"38495d66": "updateVault(uint256)", +"3849794f": "setDataSourceAddress(address,address)", +"384a6494": "setStartPreSale(uint256)", +"384af0de": "setMinimumprice(uint256)", +"384b1393": "follow(uint256)", +"384b93f2": "pullTheLever()", +"384baa8a": "round1StartTime()", +"384bb70b": "getData_17()", +"384bfacb": "cofounderIndices(address)", +"384c3335": "requiredToAddress()", +"384c440b": "DISTRIBUTION_TEAM()", +"384c4d2f": "reserveFeesInBps(address)", +"384d0b12": "claimByProof(bytes32[],bytes32[],uint256)", +"384d2e0c": "getNumberByWalletUser(address)", +"384db9fc": "WithdrawEther(uint256)", +"384ddc32": "JM_ETH_ExchangeRate()", +"384e04c9": "setarg_2(uint256)", +"384e2bf5": "MNLTOKEN()", +"384e5018": "etherandomCallbackAddress()", +"384f58eb": "contract_owner()", +"384fae3b": "hashDataStream(address,string,bytes32)", +"38503f55": "AdjustDifficulty(uint256)", +"3850f804": "castVote(uint256,uint256[],uint256,uint256)", +"38516064": "getFeePool()", +"3852c53f": "battlesTillBattleCooldown()", +"3853682c": "Try(string)", +"38536878": "getOwed(address,address)", +"3854bc2e": "setUSD(uint256)", +"3855323f": "updateKey(address,uint256,address,address)", +"38556c3a": "contract8function2()", +"38557648": "executeSellOrder(address)", +"3855b3dc": "GetEscrowNotifierAddress()", +"3855cf0e": "Proxyable(address)", +"3855dcd6": "getContrarians_by_index(uint256)", +"3855f32e": "keysRec(uint256)", +"385794c4": "MAGENDAVID()", +"38597911": "appendKeyValue(string,uint256)", +"3859d609": "raccoltaMessaggi()", +"385ab2d7": "allowSelling()", +"385ae665": "getNumberOfAnnotations(address)", +"385af1c3": "setChainPrev(address)", +"385c0ecf": "whitelistMaxWei(uint256,address)", +"385cd083": "tgeActive()", +"385d8590": "Committed(address)", +"385df389": "tokenURIEdition(uint256)", +"385e27ed": "testSubtract()", +"385e9e2e": "MintNFT(address)", +"385fae43": "setBetclose(uint256)", +"385fb8a6": "STAGE_3_MAXCAP()", +"385fbe24": "ListingContractEntity()", +"385fea5c": "countCliManagers()", +"38613690": "agentAddress()", +"38616105": "LogDestroy(uint256)", +"3861ee08": "EventBuyCar(address,uint32,uint32)", +"3862822d": "buyHo(uint256)", +"3862e6ee": "getEvaluationCountByRecorderID(uint32)", +"3862ea9d": "lockedBitmask()", +"386304e4": "receiveFromGame()", +"38634337": "CrowdsaleToken(uint256,uint8,address,address)", +"386381db": "fundariaTokenAddress()", +"38644538": "setAdditionPrice(uint256)", +"38649b2a": "isConstructedOwned()", +"3865bf3a": "joinNetwork(address[6])", +"3866ecdd": "forceWithdrawToken(address)", +"38670cb4": "founders_address()", +"386741fa": "onSubNew(uint256,uint256)", +"386762fb": "withdrawSnowflakeBalanceFromVia(string,address,address,uint256,bytes,bytes)", +"386892d8": "endICOStage3()", +"38689772": "FixBet16()", +"38692ca6": "setRegistrationPeriod(uint8)", +"3869416b": "getDisputeStartTime()", +"3869eaff": "USEaddress()", +"3869ffd0": "newIteration()", +"386a646e": "QDToken()", +"386b5fe7": "aelfDevMultisig()", +"386c5a74": "LogFeeTopUp(uint256)", +"386c69f2": "setCanBurn(bool)", +"386ca47e": "minCompanyValue()", +"386dd46e": "BTK()", +"386e0d75": "setPopName(uint256,string)", +"386e2b29": "registHnsBatch(bytes32[],address[])", +"386e3441": "tokensIssuedPrivate()", +"386e69dc": "nextRoundStartsAt()", +"386ee512": "Crowdsale(uint256,uint256,uint256)", +"386f36f3": "Deployed(uint256,uint256,uint32)", +"386fcda8": "testCreateCostToken()", +"387008c2": "updateStatus(uint256,bool)", +"3871b694": "LogSell(address,uint256,uint256,uint256)", +"3871bdd7": "depositPresaleWithBonus(address,uint256,uint256,uint256)", +"38721fa4": "getOperationCost(uint256)", +"3872b3ec": "setCoolDungeon(uint32)", +"387349fc": "numberOfTokensToAvail50PercentDiscount()", +"38734c33": "OnContribution(address,bool,uint256,uint256,uint256)", +"3873eeb8": "approveForBurn(address,uint256)", +"38742685": "pegglebot()", +"38743904": "moderator()", +"38752e58": "batchApprove(uint256[],address)", +"38756a89": "getLevelsCount()", +"38759ce9": "getFhMoney(uint256,uint256,uint256,uint256)", +"38760f13": "NewAccreditedInvestor(address,address)", +"387621fb": "cleanupDelay()", +"3876c137": "FRAC_TOP()", +"3876df0e": "ProjectWithBonds(string,uint256,uint256)", +"3876e05e": "appWallet()", +"3876e6d3": "securityTokenVersion()", +"3876f81d": "getPeriodBounus()", +"38771242": "completedAt()", +"387787ed": "setProperty(address,bytes32,bytes32)", +"38785014": "lastBlock_f4Hash_uint256()", +"3878f423": "remainingInvocations()", +"3879aa23": "firstCheckpoint()", +"3879c9f3": "teamCliff()", +"387a54d9": "callInternalTransfer(address,address,uint256)", +"387a76ce": "tokenChanger()", +"387b6c2f": "OwnedResolver()", +"387be94f": "minimumAmountRequired()", +"387bef56": "nodeAllocation()", +"387c0cb4": "hashRegistrar()", +"387d3821": "increaseMarketValue(uint256,uint256)", +"387d49d4": "setBountyBeneficiariesCount(uint256)", +"387da66c": "MCoinToken()", +"387dd9e9": "slots(uint256)", +"387e01fd": "ITO_TOKENS_PERCENT()", +"387e7bb4": "SingularityTest4()", +"387eaedb": "jypcBonus()", +"387ed59b": "hardCapTxWei()", +"387f4172": "GorillaSale(uint256,uint256,uint256,address)", +"388085be": "module(address)", +"38811792": "disallowWrite(uint256,uint256)", +"38812e58": "setStartTime(uint64)", +"38813ee0": "allEther()", +"3882f333": "partnerSaleTokenValue()", +"3882f742": "exitStake()", +"3883aee2": "checkGoalsReached()", +"388415e5": "Exchange(address,uint256,address,uint256,uint256,address)", +"38848911": "AmountRaised(address,uint256)", +"3884d635": "airdrop()", +"3884f307": "withdrawTo(address,uint256,address,bytes)", +"38856ecb": "assertEq5(bytes5,bytes5,bytes32)", +"38857786": "presaledeadline()", +"3885ce81": "avgEtherBetValue()", +"3885fd3d": "sendEther(address,address,uint256)", +"3886b116": "chkConsul(address,uint256,bytes32)", +"3886c957": "tokenLedger()", +"38874945": "developersWallet()", +"388777f1": "setlimits(bytes32,uint32[],uint32[],uint8[])", +"38879da8": "Transfer(address,address,uint256,uint256,uint256,uint256)", +"3887abb7": "checkPeriod()", +"3888188d": "releaseLockFoundation()", +"3888624b": "trueOrFalse()", +"3888dca0": "q_test(string)", +"388911dc": "sudoEnabled()", +"3889c8dc": "Payiza()", +"388a1526": "defaultTreesPower()", +"388a74ab": "validPurchaseSize(address)", +"388aef5c": "WAIT_TIME()", +"388b5786": "econReserveTimeLock()", +"388b9f37": "LogTokenDistribution(address,uint256)", +"388ba4b5": "COIN_SUPPLY_MKT_TOTAL()", +"388e28f9": "stop_all()", +"388f2c39": "recover(bytes32,bytes32,bytes32,uint8)", +"388f3cd3": "cashin(address,uint256)", +"388f58cd": "addMarket(bytes6)", +"388fb0af": "reservedTokensPercent()", +"388fe911": "new_tablet_created(address,bytes32,address)", +"38905bea": "lulaToken()", +"38906dbd": "Token(uint8,uint256,string,string)", +"38909b68": "getBonusUnlockAt()", +"3890d77f": "esopState()", +"3891c320": "vote(int256)", +"3892be14": "payoutPreviousRoll()", +"3893966d": "distribute(address[],uint256[],uint8)", +"389435e8": "calculateTotalWithdrawableAmount(address)", +"389439bb": "OwnerSigneture(address[])", +"389441b2": "getvaluejoinlist_even(uint256)", +"38948c53": "finalizeable()", +"3894ca57": "catOwners(bytes5)", +"3894e516": "generateToken(string,uint256)", +"38953534": "BTCEX()", +"3895f466": "buyoutWithData(uint256,string,string,string,string)", +"38960027": "aliveSince()", +"38969d64": "changeZipper(address)", +"389755a7": "setDefaultTransferRate(uint16)", +"3898ee61": "generateTicketData(uint256,uint8,uint8)", +"3899ad41": "unlockSecondary()", +"389aa67c": "addOrder(string,address,uint256,uint256,string,address)", +"389ab31c": "networkDevelopmentWallet()", +"389ae4d1": "foundersKey()", +"389b5bd2": "CryptobullsCoin()", +"389b7533": "extendDeadline(uint256)", +"389b75d6": "resetPool(uint32)", +"389cabee": "ceoWallet()", +"389cd1ae": "setGasPrice(uint256,uint256,uint256)", +"389d9636": "buyDiamond(uint256)", +"389db4f1": "_adjustDifficulty()", +"389e40d2": "PACOIN(uint256,string,string)", +"389e4839": "setState(bytes32,bytes32)", +"389eb9f9": "withdrawalTime()", +"389ece2f": "changeTelephoneOwner(address)", +"389f0846": "balanceUpdate(address,address,int256)", +"38a003e0": "getOrderAddressesForDay(uint256)", +"38a0615f": "TabooToken()", +"38a0fc9a": "registerPool(string,uint256,uint256,uint256,uint256)", +"38a0fdde": "setSnapshot()", +"38a1187d": "calculateEthAmount(address,uint256,uint256,uint256)", +"38a18cbe": "createTradeContract(address,uint256,uint256,uint256)", +"38a211b7": "lockTopLevelDomainOwnershipTransfers()", +"38a21db8": "create(bytes32,bytes32[3],bytes32,bytes32)", +"38a2cd0f": "setData_3(string)", +"38a2fb4f": "TransferBaseContract(address)", +"38a326e4": "activatedSalesTotalCount()", +"38a332eb": "EndGame(address,uint8,uint256)", +"38a4045e": "despoit(uint256)", +"38a4ba0b": "getAdPriceHalfDay()", +"38a52fb1": "setEthPlan(address,uint256,uint256,bool)", +"38a57d0c": "buildShip(uint16,uint16,uint8,bytes32)", +"38a5e016": "acceptTokenOwnership()", +"38a699a4": "exists(bytes32)", +"38a6e813": "updateAllowedAddressesList(address,bool)", +"38a74bbf": "endGameInternal()", +"38a7543e": "issuers(address)", +"38a8a0ca": "DeadCow(address,uint256)", +"38a964d6": "getFeeValue(address)", +"38a9a6f8": "bonusPreset()", +"38a9f25a": "PlayerLab()", +"38aa156c": "getKeccak256Address(address,address)", +"38ab0287": "nextMintPossibleTime()", +"38ab8ef4": "RelentlessConscienceToken()", +"38abdf41": "CraigGrantShrimper()", +"38af3eed": "beneficiary()", +"38af4eff": "tokenCents()", +"38b025b2": "parseInt16Char(string)", +"38b09889": "VictorieumNewToken()", +"38b0ea85": "startRedemption(uint256)", +"38b15dab": "setMyTokenBalance(address,uint256)", +"38b3e983": "Better(uint256,uint256,uint256)", +"38b52627": "supportsInterfaces(address,bytes4[])", +"38b5491b": "getInvestmentProposal(uint256)", +"38b56ead": "setURIToken(string)", +"38b59359": "ChangeEthPrice(uint256)", +"38b59be6": "addPercents(uint256,uint256)", +"38b5e0fe": "numElementsEven()", +"38b6e407": "endGrantAuthentication(address)", +"38b7a530": "addToAvgRating(address,address,string,string,uint8)", +"38b88052": "staleTime()", +"38b90333": "CONTRACT_VERSION()", +"38b93440": "replaceModule(string,address,bool)", +"38b9499b": "circulationStartTime()", +"38b9d61e": "bonusLimit4()", +"38b9ef9c": "betWithRound(uint256,bytes32)", +"38bb3977": "JuventusvsRealMadrid()", +"38bbbceb": "test_failed_payment_nonthrowing_token()", +"38bbfa50": "__callback(bytes32,string,bytes)", +"38bbfc51": "FCOIN1050Token(uint256,string,string,uint256)", +"38bc01b5": "getAddresses(bytes32[])", +"38bc1b96": "_airdrop(address,uint256)", +"38bcdc1c": "getURL()", +"38bd44f3": "createSDCC(address,address,uint256)", +"38bd8357": "next_week_timestamp()", +"38bde636": "GoodBoyPoints()", +"38be706d": "__callback(uint256)", +"38beb446": "PlayerToken()", +"38beb67f": "getCertificateHash(address,address,uint256)", +"38bef35c": "CFCdistrubution()", +"38bf77c3": "setFeesPerTenThousand(uint256)", +"38c0ac5f": "signer2()", +"38c1b824": "transferBookKeeping(address,address)", +"38c20499": "accMinterTwo()", +"38c33862": "wineries(bytes32,uint256)", +"38c3d4ed": "PORNCASH()", +"38c4090b": "getMarketOrderValue(uint256)", +"38c4d4a6": "pairTransfer(address,uint256)", +"38c59de9": "getNumberInvestors()", +"38c5a3dc": "changeRealUnicornAddress(address)", +"38c67b73": "setCurrentStage(uint256)", +"38c68f8f": "right84(uint256)", +"38c72883": "DealFullyFunded(uint256)", +"38c73f9f": "by(bytes32,uint256)", +"38c7db75": "getUnredeemedBalance(address,address)", +"38c80857": "unlock1Y()", +"38c80fc3": "getWhitelistStatus(uint256,address)", +"38c8e611": "getPreorderInfo()", +"38c8ec85": "convert1(string,string)", +"38c9027a": "calc(uint256)", +"38c92ef0": "propose(bytes,address,string)", +"38c97949": "StandardGame()", +"38c9dbf3": "TEAM_STAKE()", +"38ca59cf": "createTargetedValentineRequest(string,string,string,address)", +"38ca60a2": "IBST()", +"38ca683b": "MARKTY()", +"38ca830c": "updateWhiteList(bool)", +"38caa2c6": "MaxCapReached(uint256)", +"38cb252f": "getBonusPercent()", +"38cb583d": "checkAndUpdateTokenForManual(uint256)", +"38cc17ee": "setGameState(bool)", +"38cc4831": "getAddress()", +"38cc639d": "_setUserAttribution(bytes32,address,uint256)", +"38cd2c1a": "TransferSellAgentSiteRegMulti(address[],uint256)", +"38cdaab1": "changeICOState(bool,bool)", +"38cde380": "changeWeight(uint256)", +"38ce1df8": "sideServicesCount()", +"38ce4d51": "canRedeemUTXO(bytes20,uint256,bytes32[])", +"38ce61b2": "transferAndFreeze(address,string,address,address,uint256,uint256,uint256)", +"38ceaf1b": "LicenseManager(address,string)", +"38cef1ab": "ESCBCoinPlaceholder(address,address)", +"38cf2087": "parametersAreSet()", +"38cf22e3": "getHoldingsSupply()", +"38d084b5": "address4a()", +"38d0ae6c": "stakeFunds(uint256,uint256)", +"38d0e36f": "SBSEducationToken()", +"38d16011": "verifyKYC(address)", +"38d1ed57": "getTotalFeesDistributedCount()", +"38d28d4c": "setTicketCountMax(uint256)", +"38d28de3": "getGoldInfoWeight(address)", +"38d2b172": "lowCapTxWei()", +"38d33337": "RoundAHardCap()", +"38d335ef": "ShowTestB(bool)", +"38d40ced": "changelp15(address)", +"38d44ad5": "recall(uint256,string)", +"38d480a6": "bulletAddress()", +"38d4d73e": "isVotedGood(uint256)", +"38d52e0f": "asset()", +"38d560b6": "gmtAddress()", +"38d65020": "JackpotAccessControl()", +"38d67d88": "changeContractName(string,string)", +"38d762ef": "LogBurn(address,uint256)", +"38d7be3c": "WXBET()", +"38d888a6": "impToken()", +"38d93280": "ProfitContainer(address)", +"38da5b07": "verifyIncludedAtIndex(bytes,bytes32,bytes32,uint256)", +"38dacaab": "teamTimeLock()", +"38db6dd3": "registerVoter(address)", +"38dbb74a": "initialize(uint256[],uint256[],uint256,address,uint256,address)", +"38dbdae1": "player3()", +"38dc25d1": "KMCToken()", +"38dc92bc": "NCP()", +"38dca34a": "AddStudent()", +"38dd22f0": "isOwnerOrAdmin(address,address)", +"38dea895": "auction(address)", +"38dec0fa": "RefundAdded(address,uint256)", +"38df6fb2": "CollateralPosted(address,uint64,uint256)", +"38dfe2f5": "getString2()", +"38e078b4": "FixBet76()", +"38e11779": "OriginalAddress(address,address)", +"38e1294c": "updateBuyStatus(bool)", +"38e288f1": "airdrop(address[],uint256,uint16)", +"38e29ef0": "ICO_BONUS_TIME_1()", +"38e2c296": "processJackpotDeposit(uint256,uint256,address)", +"38e3aaf1": "Error(uint256,uint256)", +"38e43840": "collected(address)", +"38e45c65": "endCall()", +"38e47639": "getHighWater()", +"38e48f06": "save(string)", +"38e48f70": "getDonation(address,uint256)", +"38e4b06b": "releasedTeam()", +"38e55e89": "SigmaToken()", +"38e586fd": "right5(uint256)", +"38e64f9e": "milestoneReached()", +"38e771ab": "refundAll()", +"38e7920a": "setTokenRate(uint256,uint256)", +"38e7a375": "textaaaToken(address,uint256)", +"38e8feed": "TokensTransfer(address,address,uint256)", +"38e91e41": "devHolder()", +"38e95d55": "amountToRaiseInUsdCents()", +"38e998a7": "buyLand(int32,int32)", +"38e9e6b5": "setClaimingCosts(uint256)", +"38ea1c4d": "setTransferCreditBot(address)", +"38eada1c": "addAddress(address)", +"38eaf913": "setDirectorNode(string)", +"38ec18c3": "changeAccountModifiers(address)", +"38ec6ba8": "getAddressOfName(string)", +"38ec8672": "newAvto(string)", +"38ec8736": "assertEq11(bytes11,bytes11)", +"38ecadac": "bountymanagerShare()", +"38ecdca9": "claimProduct(address,uint256)", +"38ed85b0": "_claim(address)", +"38eda0e5": "createCalcFunc()", +"38ededc9": "getNoteOwner(uint256,uint256)", +"38ee95ab": "_emitCapabilityRemoved(address,bytes4,uint8)", +"38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", +"38ef2dc0": "testSign2of3()", +"38eff6c6": "backETH(uint256)", +"38f0de1f": "_fFinish()", +"38f14845": "deleteUser(uint256)", +"38f196b2": "COR()", +"38f22b42": "viewSpecific(string,uint256)", +"38f23e18": "recoverContractBalance()", +"38f41711": "updateCapAndExchangeRate()", +"38f42d41": "GameWin(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"38f46240": "StartRefund()", +"38f4b734": "getShit()", +"38f4cc7a": "QtumToken()", +"38f50b6f": "modifyAuth(bytes8,bytes8,bool)", +"38f55e59": "doVote(bytes32)", +"38f736c5": "step(uint256,bool)", +"38f77d69": "getDistributeProfitsInfo()", +"38f817c5": "getUsersEnginesIds()", +"38f84614": "useGoldenTicket(string)", +"38f88ee0": "tokenOwnerRemove(address)", +"38f8f3cc": "quarter1()", +"38f98d09": "getWeaponValue(uint256)", +"38fa1570": "showDevCut()", +"38fa4029": "currentStageIndex()", +"38fa8ef9": "isFundkeeper(address)", +"38fab8c5": "lifToken()", +"38fbf0b9": "destroyShares(uint256)", +"38fdba18": "doSplit()", +"38fe48b8": "batchReturnUNT(uint256)", +"38fff2d0": "getPoolId()", +"390063f0": "fundsToMSF(uint256)", +"39009094": "Cooperium()", +"39009482": "returnTuple()", +"3900f8f6": "minusFreezingTime(uint256,uint256)", +"390209c1": "getMetadata(uint128)", +"390246b2": "bid(bytes32,uint8,bool,int32)", +"3902b9fc": "getBbAddress(address)", +"3902bf72": "donate(bytes32,bytes32,bytes)", +"3902cb92": "TERATO()", +"3902d417": "resumeAirdrop()", +"39035d56": "record(address,address)", +"39048f02": "setSchellingRoundReward(uint256)", +"3904c5c1": "sweepFunds(address,uint256)", +"3904e1bf": "userBuys(uint256,address)", +"39055172": "UpgradeTokens()", +"390576d9": "Sogan()", +"3905910e": "MultiEventsHistory(address)", +"3905cab8": "drpsToken()", +"39069d8c": "setRegistryAdmin(address)", +"3906f560": "SUPPLY_LIMIT()", +"39074f59": "getDelayedBonusAmount(address)", +"390a05a8": "getParticipantBalances()", +"390b4f0c": "NaGeBi()", +"390b8482": "fillWithHashes()", +"390c0ddd": "purchaseCollectible(uint256)", +"390c3434": "nextrafflenr()", +"390c5874": "getCashbackRate(address)", +"390ce0d3": "getSellOrder(uint256)", +"390d70f5": "getTransformTarget_miner(address)", +"390e16c1": "EXTENDED_SLACK_PERIOD()", +"390e4855": "MilestoneTracker(address,address,address)", +"390eca6b": "finish(string)", +"390ff134": "isApprovedFor(address,uint256)", +"39106821": "memberId(address)", +"3910814b": "diamondAuction()", +"391193ae": "getTotalF2()", +"3911e1e1": "totalEthxCollected()", +"3912253e": "betConditions()", +"39125215": "sendMultiSig(address,uint256,bytes,uint256,uint256,bytes)", +"3912572d": "TokenCLC(uint256,string,string)", +"3912657a": "lastBlock_f11Hash_uint256()", +"3912b99f": "FOUNDERS_SHARE()", +"391363b5": "reducetime()", +"3913848e": "changeMerchantChargingAccount(uint256,address,bool)", +"3913a0fe": "getPlayerAward(address)", +"3913d6e0": "burnEnergyAttributionToken(address,uint256)", +"3913f487": "RIPAC(uint256,string,uint8,string)", +"3914010a": "getPartnerCash(uint8,bool,address,bool,uint256)", +"3915111e": "getRoundPrize(uint256)", +"39166ee9": "holding(address)", +"391687e3": "raiseTraderRegistered(address)", +"3916a402": "ShowInfoStr(string)", +"391714f8": "closeSale(bool)", +"39179ef9": "BitcoinFast()", +"3917b761": "product2_sell()", +"39181e6c": "Monthprofitstart()", +"39192fd7": "mintReserveTokens(address,uint256)", +"391b11ce": "updatePartner2_vows(string)", +"391c44b2": "addToWhiteList(address,uint256,uint256)", +"391c918e": "transferFromOwner(address,address,uint256,uint256)", +"391d2eb4": "MottoCoin()", +"391ecc2c": "_setOwners(address[])", +"391efaf2": "getEscrowFullInfo(address)", +"391f2e96": "InvestCancel()", +"391f3b2d": "_nextPotJackpot(uint256)", +"39203874": "ALpay(uint256,string,string)", +"392087fd": "changeSoftCap(uint256)", +"392114b7": "sellingAccept(bool)", +"392212c8": "EvaCash()", +"39221913": "_forwardT4T(uint256)", +"392327b5": "owner_set_fraction(uint256)", +"392338f5": "createPost(string,string)", +"39236bef": "claimGame(uint256)", +"3923afee": "allocateToEarlyContributor(address,uint256)", +"39246290": "getB2()", +"39246d75": "VersionModel()", +"3924b718": "m_tokenPrice()", +"3924f089": "getRunning()", +"392542fb": "unFreeze(bytes32)", +"39255494": "setAdminAccounts(address[3])", +"3925ad8a": "getRank07()", +"392603d3": "_getCsAddr()", +"3926384d": "setMaxWithdrawal(uint256)", +"392664e5": "GenesisAddressSale(address,address,uint256,uint256)", +"39269596": "endPrivateIco()", +"3927010d": "ownerPauseGame()", +"392752b9": "lifeFactor_iv()", +"3928bc8b": "setBoostData(uint256,address,uint256,uint256)", +"39293113": "earlyBirdCap()", +"39298633": "forceTransferFrom(address,address,uint256)", +"39298f4a": "listAssets(uint256,uint256,bool)", +"3929e43f": "proposalExpireAt(bytes32,uint256)", +"392a2cb6": "withdrawFromFailedLottery(uint32)", +"392aa4d5": "openRefund()", +"392c00a2": "mint(int256,address,uint256,bytes)", +"392c6238": "currentNiceGuyIndex()", +"392c623e": "docIndex()", +"392cb9ed": "DhaCoin(uint256,string,string)", +"392d42ae": "left38(uint256)", +"392da9b4": "fetchCancelledOrdersForMerchant(address)", +"392db91e": "genuine(address)", +"392e53cd": "isInitialized()", +"392e6678": "validCandidate(bytes32)", +"392eaafa": "HackDao()", +"392ec230": "PaymentForwarder(address,address)", +"392ec66b": "bobClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", +"392ecfa6": "buyWithTokens(bytes32)", +"392ee145": "jackPotA()", +"392f37e9": "metadata()", +"392f5f64": "roles()", +"392ffcfb": "test_twoValidAndInvalidEqAddress()", +"39300836": "fundCrowdfund()", +"3930d3dd": "minBuyETH()", +"3931845d": "registraAluno(address)", +"3931c9a8": "purchaseWithToken(uint256)", +"39332b05": "foreignBridgeErcToErcImplementation()", +"39333bbe": "tokenBankrollBuyIn()", +"39341dde": "unseatKing(address,uint256)", +"39347d52": "setMarketers(address)", +"39354244": "percentAllocationFeeNumerator()", +"3935ae8f": "POKERCOIN()", +"39363923": "invalidationBounty()", +"3936dbe4": "decimals(address,bytes32)", +"3936e99a": "releaseAssets(uint256)", +"39384126": "getCampaignValidById(bytes32)", +"3938bd78": "updatePayment(uint256,address)", +"3938faa1": "_emitErrorCode(uint256)", +"393a1955": "crowdfundingTarget()", +"393a4d34": "getStorageAddress()", +"393b011c": "setOwnerPercentage(uint256)", +"393b9b0f": "TransferPreAllocatedFunds(uint256,address,uint256)", +"393bb56e": "setApprovalStatus(address)", +"393bbbf8": "mokenName(uint256)", +"393cb7e3": "feesPerMillion()", +"393e0c63": "maxPreICOandICOSupply()", +"393e77c9": "minMonsterHit()", +"393ebbf8": "setSlashPercentage(uint256)", +"393eec7b": "setSafeToken(address)", +"393eefb8": "withdrawMyDividend()", +"393f4605": "getProviderWebsite(uint256)", +"393f7cd4": "init_dev_and_presale_allocation(address,address)", +"393fb37b": "gettruelevel(uint256,uint256)", +"39408c83": "icoFinishedDate()", +"3940e9ee": "total_supply()", +"3941456c": "frontendAddress()", +"39419d60": "grandConsolationRewards()", +"394218b1": "electNewMayor(address)", +"3942a979": "s6(bytes1)", +"39431308": "commissionPercentForCreator()", +"3943380c": "key()", +"3943807b": "insert(bytes,bytes,int256)", +"3943909e": "ScamStamp()", +"39443b8e": "canDeposit(uint256)", +"3944615c": "getCompanyAddress()", +"3944750d": "ACCEPT_EXCHANGE()", +"394479c5": "TestKeiosToken()", +"39451a88": "tokenBurn(uint256)", +"394580d2": "distributeManyTokens(address[])", +"394610cf": "tokensTotal()", +"39464884": "entryInfo(uint256)", +"3947050f": "randomTicket()", +"39478568": "isFounder()", +"39495f8e": "RealTract(uint256,string,string)", +"3949630e": "before_test_method()", +"3949b636": "doDaysFollowEachOther(uint256[])", +"394a0926": "addUnicorn(address,uint256)", +"394a3f61": "updateFollower(uint256,bool)", +"394a8698": "getTotalBondValue()", +"394b0ba9": "RetengoToken()", +"394bcb49": "updateClient(address)", +"394c21e7": "cancelOrder(address[5],uint256[6],uint256)", +"394cd121": "qryModuleDetail(string,string)", +"394d57a2": "EtherPriceUpdate(uint256)", +"394da86b": "WEECoin()", +"394dfffb": "GFCI(uint256,string,uint8,string)", +"394e0cdd": "standingOrdersByOwner(address,uint256)", +"394f4ec6": "User(bytes32,bytes32,bytes32,bytes32,bytes32)", +"394fc3a6": "MaecenasToken()", +"39500019": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256,address)", +"39500105": "egcd(int256,int256)", +"39509351": "increaseAllowance(address,uint256)", +"3950d1b2": "p1_duration()", +"3950f3a2": "disavowTokens()", +"39515e3c": "bonusOver30ETH()", +"39518b5e": "startingTime()", +"39527ed6": "withdrawTatAmount(uint256)", +"395382ee": "squareWins(uint256,uint256)", +"3953ca8b": "setPropertyRowColor(uint16,uint8,uint256)", +"3953f4a1": "setLastEditionOf(uint256,uint256)", +"3954a389": "c_MaximumFunds()", +"3954b4ee": "pricePerEther()", +"3955b070": "unhold(uint256)", +"3955b6af": "_createToken(uint256,address)", +"3955c147": "MatchmasterPrevails(address,address,uint256,uint256,uint256)", +"3955f0fe": "sellEggs()", +"3955f12e": "crowdSaleOn()", +"39564561": "isCapper(address)", +"3956e963": "Mydo()", +"39575795": "getBalances1()", +"395764ff": "OilToken(string,string,uint256)", +"3957f093": "calculateTokensAmountToSale(uint256,uint256)", +"39580054": "getOpponent()", +"3958884b": "unblock(bytes32)", +"3959b945": "getSolver(bytes32,string)", +"395a9ab3": "Success()", +"395acdeb": "lockedCounts()", +"395b6f71": "getOrderBookInfo(address)", +"395b9467": "totalSUM()", +"395c22c9": "submitNewPolicy(string,string,string,string,string,string,string,string)", +"395deefa": "RefreshDayBonus()", +"395ea0c9": "Medikia()", +"395eda08": "MINIPOOLS_LLV_FIFA_1()", +"395ede4d": "collectToken(address)", +"395eec79": "studInfo(uint256)", +"3960c001": "buy(uint32,uint16,uint32,bytes16,bytes32)", +"3960eddf": "SupeciesToken(uint256,string,uint8,string)", +"3960f787": "decrypt(uint256[])", +"39612b0e": "refundingIndex()", +"39614759": "toBase58Checked(uint256,bytes1)", +"39614e4f": "bytesToString(bytes)", +"39624847": "getNumWinners()", +"39625faf": "pokerbox()", +"3962c4ff": "TimeStart()", +"3962d9f1": "User(bytes32,bytes32,uint256)", +"3962f82d": "getTokensCount()", +"39631849": "transferOutBalance()", +"39633cee": "getCompte_39()", +"39635d13": "withdrawToTeamStep1(uint256)", +"39636504": "teamPool()", +"39637616": "setTimedCrowdsale(uint256,uint256)", +"39639fbd": "trackToken(address)", +"3963d0c1": "MonthlyPaySend(uint256,address)", +"39658245": "ChannelTimeout()", +"3965e75d": "cancelEnter(address)", +"3966291e": "StaticEthAvailables(address[])", +"396724c3": "getCCH_edit_1()", +"39673345": "EPCToken(string,string,string)", +"396773b7": "getHeader(uint256)", +"3967d46a": "updateDeposit(bytes32,address,uint256,address,uint256)", +"39681333": "get_last_global_audit_time()", +"396876bd": "mintAllowance()", +"39688256": "tokenHardCap()", +"39694f47": "totalUnClaimed()", +"396ad86f": "setpatient(uint256,uint256,string,string)", +"396bf78a": "WalchainToken()", +"396c8228": "purchase(uint16,address)", +"396d1ddf": "totalAdvisor()", +"396e70e0": "reducePlayersJadeProduction(address,uint256)", +"396ed0ab": "Burn()", +"396ff799": "setFoundersTokensWalletMaster(address)", +"3970f698": "tokenForSale()", +"39714adb": "trackHolder(address)", +"397182ef": "buyInSharePrice()", +"3971ee42": "promo(address[])", +"3971eea1": "bidReferral(uint256,uint256)", +"3972323a": "lockedBalances(uint256)", +"39737ea4": "proposalData(string,address,uint256,bytes)", +"397388af": "getAllRegisteredUsers()", +"3973e87e": "betSizeFINNEY()", +"397412cb": "setMinPrivateSaleBuy(uint256)", +"39745791": "removeWhiteList(address[])", +"3974874b": "drop(address[],uint256)", +"39754b9a": "internalContribution(address,uint256)", +"3975e32b": "RequestTest(bytes32,bytes32)", +"3976304e": "topupEnergy(uint256)", +"397656c6": "enableTuneOption(uint256)", +"3976b022": "LOG_SuccessfulSend(address,uint256,uint256)", +"3976be0b": "DCToken(uint256,string,uint8,string)", +"39774576": "isMiBoodleToken()", +"39785281": "winAmount3()", +"39785550": "withdrawAnyERC20(address,address,uint256)", +"39787fbd": "payeeArray(uint256)", +"39788bc8": "approval()", +"397895f3": "HoldChanged(address,uint256,uint256)", +"397986a1": "setUpAllowance()", +"39799e5d": "test_updateKey_missingId()", +"397a6b3d": "PrizeResultCalculated(uint256,uint256[])", +"397ab649": "Bet(address,uint256,address,uint256,uint256,uint256,address,uint256)", +"397b3378": "rewardPoolSupply()", +"397b8b17": "buyTokensForFiat(address,uint256)", +"397b90a5": "issueReserveToken(uint256)", +"397de27f": "changeServicePercent(uint256)", +"397e0287": "setIdentityExtended(bool,bool,bool)", +"397e8091": "betFeeMin()", +"397e953f": "ERC721Contract()", +"397eb91b": "closeLoanOnBehalfOf(address,address,bytes32,uint256)", +"397edab9": "ChangeOperatorAccount(address)", +"397efdbc": "CodeMailStampSale()", +"397f2a71": "getNbNamespaces()", +"397fa015": "updateCrowdsaleInfo(address,string)", +"397fe617": "CROSAIR_PRICE_THRESHOLD()", +"3980b680": "isHolidayToday()", +"3982316c": "getAllStorages()", +"3982b10d": "read_collectors_addresses()", +"3982b55d": "XCareToken(uint256,string,string)", +"3983af00": "setYearTwoMultiplier(uint256)", +"3983d5c4": "calcBaseFee(uint256)", +"398427e6": "sendByCheque(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"39846a67": "sol_clean(uint256,uint256)", +"39849771": "maxBetDivisor()", +"39849a67": "isSpaceExist(uint256)", +"3984a89b": "updateFamedStarOwner(uint256,address)", +"3984ae12": "bountiesMinted()", +"3985a4ab": "crowdsaleEndDeclarationTime()", +"398712b5": "clearTheSeason(uint32)", +"3987fcb4": "setGasForFLKD(uint256)", +"39882a2d": "setUseWhitelistFlag(bool)", +"39885b23": "finishPreSale()", +"3988bad8": "pendingRewardsOf(address)", +"39895801": "allowPublicTransfer()", +"3989c666": "setRate(uint256,uint256,uint256)", +"398ab9a7": "totalPrizePool()", +"398af892": "Jimtoken()", +"398b35b1": "setShouldBlockPublicTrade(bool)", +"398bd6b2": "Cancelled(address)", +"398c1a89": "migrateOutByPayout(uint256[],bool,uint256)", +"398c7424": "getBalanceTokenContract()", +"398d07f0": "LightLemonUnicorn()", +"398d3c37": "getAyantDroitEconomique_Compte_1()", +"398d92bb": "withdrawTokens(uint256,address)", +"398e92a5": "updatePlotPrice(uint256,uint256)", +"398eb93c": "NardoT2()", +"398f0970": "secondsInBlock()", +"398f2648": "change_max_amount(uint256)", +"39900857": "closeTournament()", +"39900dcc": "totalBuriedCapsules()", +"39901be8": "getBoosterData(uint256)", +"39903398": "test_twoFalseAsserts()", +"399075da": "RES(address,uint256,string,string,uint8)", +"39907af1": "getSecurityValue()", +"39909f0b": "withdrawFundToOwner()", +"3990b7c7": "registerGold(address,address,bytes32)", +"39918c4f": "crowdsaleAllocation()", +"3991c09d": "addMatch(uint256,uint256)", +"3992503d": "TRIPAGO()", +"39927ebe": "registerGame(address,bool)", +"3992b494": "energyContract()", +"3994789d": "onICO(address,uint256)", +"3994b883": "SoccerBet(address,address)", +"3994bce4": "SALE_CAP_USD()", +"3995943b": "FUND_FRAC_TOP()", +"39960940": "registryRequestWeight()", +"39965233": "awardPrizes(uint256)", +"3998e2a9": "EBCoin()", +"39995511": "freezeAllTransactions()", +"3999968c": "mintRefCredits(address,uint256)", +"3999bbce": "SmartBitcoin()", +"399a24b1": "invokeFallback()", +"399ae724": "init(address,uint256)", +"399c0425": "buyingPrice()", +"399c6f55": "NewStage(uint256,string,string,uint256)", +"399cd55f": "ReferralRewarded(address,address,address,uint256,uint256,uint256)", +"399d6465": "getLockAmount(address)", +"399d7bf5": "against_ban_of(address)", +"399e3ca8": "PrivateSaleFinished()", +"399e7195": "CentraAsiaWhiteList()", +"399f6248": "ContractOwnershipBurn()", +"399fa840": "removeItem(address)", +"399fd8d9": "getDiaryLength()", +"399fdb86": "testFailNormalWhitelistReset()", +"39a12c3b": "Trade(uint256,uint256,bytes32,address,address)", +"39a13fb3": "enableTokenSale()", +"39a1e9ff": "SmallProject()", +"39a1ec37": "getInvestorDatePayout(address)", +"39a248f3": "feecounter()", +"39a26069": "housePercent()", +"39a2616c": "_removeDefaultOperator(address)", +"39a2a7bd": "confirmDeposit(uint64)", +"39a2b580": "_initialDistribution()", +"39a2bc8d": "SynchroCoin(uint256,uint256,uint256,address)", +"39a2eb2a": "selectWinners(uint256)", +"39a3f168": "secondPeriodWindows()", +"39a45a5c": "createGun(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"39a5a400": "TOKEN_SOFT_CAP()", +"39a5fdda": "earlyBackerSupply()", +"39a6ea72": "getEndICO()", +"39a73978": "unpackInvestment(bytes32)", +"39a7919f": "changeSupply(uint256)", +"39a7c3d9": "onMint(address,address,uint256)", +"39a7cb16": "retrieveCurrentTokensToOwner()", +"39a87bd9": "left31(uint256)", +"39a897fc": "Builded(address,address)", +"39a89c1a": "getNumberOfCapsules()", +"39a90f7a": "IS_MAINNET()", +"39a9144b": "_isTokenDiscounted(uint256)", +"39a9e6c5": "clearRequests()", +"39aa7599": "ITDollar(uint256,string,uint8,string)", +"39aaba25": "get_status()", +"39ac2d9b": "SuperTroopersRTscore()", +"39ac3300": "EtalonTokenPresale(address,address)", +"39ac7a08": "isMember(address,address)", +"39ad0212": "purchasers(address)", +"39ad8847": "fifth_withdrawal(uint256)", +"39ade9aa": "dDeployBallot(bytes32,bytes32,bytes32,uint256)", +"39ae662c": "setFactors(uint256,uint256,uint256,string)", +"39aee3b1": "CCCoin()", +"39af0513": "backlog()", +"39af0a81": "OPENCUKUR()", +"39b09ed8": "is_owned(uint256)", +"39b0b6c2": "updatePosition(address,int256,uint256)", +"39b0bc59": "getNonce(address,uint256,bytes)", +"39b0bde9": "Constrctor()", +"39b21937": "issue(address,bytes32)", +"39b22120": "contractBurn(address,uint256)", +"39b2447e": "addCutie(uint40,uint256)", +"39b25269": "makeOrder(address,address,uint256,uint256,address,uint256)", +"39b25ad1": "XcelToken(address)", +"39b26735": "TicTokenERC20()", +"39b333d9": "Play(uint8,uint8,uint8,uint8)", +"39b35753": "authCancel(address)", +"39b37ab0": "fee(uint256)", +"39b3fba8": "setRabbitData(uint256,uint32,uint32,uint32,uint256,uint8,bytes32,bytes32)", +"39b50688": "cancelSellOrder()", +"39b55e74": "developReserveAllocation()", +"39b57835": "multWee(uint256,uint256)", +"39b5ca6d": "MintFinished(address)", +"39b61914": "DescriptionPublished(string,address)", +"39b651c6": "paymentContractAddress()", +"39b6b1e5": "cancelBid(address,uint256)", +"39b73122": "createDataset(string,uint256,string)", +"39b73771": "_b3(string,uint256)", +"39b7e62f": "GENPCoin()", +"39b80e1b": "recoverAddressFromCommonSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes)", +"39b83b68": "allowBank(string,address,bool)", +"39b860d9": "findPlayerIndex(address,uint256)", +"39b8ce98": "weiCollected()", +"39b8dc40": "sunsetWithdrawalPeriod()", +"39b8e0ff": "proposeAllocation(address,address,uint256)", +"39b8e63c": "getPI_edit_9()", +"39ba645b": "revokeKYC(address)", +"39bbaed2": "SNOOP()", +"39bc91fa": "OwnerICOsupply()", +"39bea1f0": "coindropsWallet()", +"39bef274": "setRegionCoordinates(uint256,uint256,uint256,uint256,uint256)", +"39bf03b4": "NBAOnlineLaunchPromotion()", +"39bf5462": "MANHATTANPROXYWSHWY()", +"39c09753": "setBombAddress(address)", +"39c0c415": "toB32(uint256,uint256)", +"39c0ea6e": "rateProperty(uint256)", +"39c0f29d": "laxToken()", +"39c1852d": "withdrawal_party_b_gets()", +"39c2697c": "DELIVERED_FEE_FLAG()", +"39c27bd4": "substr(string,uint256,uint256)", +"39c28e82": "SSPParametersChanged(address)", +"39c294be": "minMargin()", +"39c2f6a0": "setConfiguration(uint256,uint256,uint256,int256)", +"39c38266": "manualBuy(address,uint256)", +"39c480c9": "endDate2()", +"39c5a13e": "secondVestAmount()", +"39c5dde6": "setInitialOwners(address[],uint256[])", +"39c5f3fc": "getNetworkId()", +"39c64f1b": "setPOOL_edit_5(string)", +"39c65ca6": "updateDates(uint256,uint256,uint256,uint256)", +"39c670f0": "claimedAirdropTokens(address)", +"39c73169": "totalSupplySale1()", +"39c7967d": "vote(address,uint256,uint256,string)", +"39c79cfc": "HJHToken(uint256,uint256)", +"39c79e0c": "close(bytes32)", +"39c7a376": "LogCreate(address,uint256,uint256)", +"39c7b6fc": "getMaxSend()", +"39c98a1b": "getCarOwner(uint32)", +"39c9ffe3": "deleteTeam(bytes32)", +"39ca6e86": "registryBase()", +"39cace6d": "PradxToken()", +"39caf7bb": "makeSwap(address,uint256,bytes32)", +"39cc8a8e": "GorToken()", +"39ccdd49": "createRef(bytes32,string)", +"39cd9dba": "KiwiCoin()", +"39cdde32": "ecverify(bytes32,bytes,address)", +"39ce3983": "debatingPeriod()", +"39ce743e": "replaceCharacter(uint16,uint16)", +"39cef0b7": "issueTokensForAssets(uint256)", +"39cfc56a": "ETHERanate()", +"39d00f12": "transferTokens(uint256,address[],address)", +"39d05fdd": "cetokToken()", +"39d08c2a": "saleOngoing()", +"39d1f908": "actualBalance()", +"39d2036d": "_validateMaxSellAmount(uint256)", +"39d20a5f": "read_user(address)", +"39d216f2": "chefOwner()", +"39d26051": "getOrCacheTargetReporterGasCosts()", +"39d2be30": "setDistributedAutonomousExchange(address,address)", +"39d319e5": "unblockUser(address)", +"39d31e14": "CoroToken()", +"39d34323": "product3_sell()", +"39d396b5": "amountRemaining(bytes32[])", +"39d428ea": "AddToken(address,address,uint256,bool,uint256)", +"39d4e21a": "addToSellList(uint256,uint256,uint256)", +"39d51cc0": "get_testing_index()", +"39d66fc0": "effectiveValue(bytes4,uint256,bytes4)", +"39d8db86": "setICOPhase()", +"39d8dc9b": "BEST()", +"39dad8f5": "minusTourFreezingTime(uint256,uint256)", +"39dba209": "keysRec(uint256,uint256,uint256)", +"39dc5ef2": "depositTokens(address,address,uint256)", +"39dd134c": "advisoryPool()", +"39dd437b": "isWithinICOLimit(uint256)", +"39dea537": "registerNickname(string)", +"39df1608": "setPongAddress(address)", +"39e028ba": "AdviserTimeLock(address,address)", +"39e0c751": "setDiscountStage(uint256,uint256,uint256,uint256)", +"39e1038f": "getaddressfocuscardid()", +"39e1e859": "exchangeRateFUTX()", +"39e20523": "setWriter(address)", +"39e22509": "isCustomerHasKYC(address)", +"39e2637f": "TokenERC20(uint256,string,string,address)", +"39e301ff": "numWinnersToPay(uint32)", +"39e31ceb": "addressNotUpgradable()", +"39e33636": "EKK()", +"39e3407b": "isInFinalState()", +"39e395e2": "bidOnSynthesizingAuction(uint256,uint256)", +"39e3af9b": "isCanceled(uint256)", +"39e3ea83": "checkNotConfirmed(bytes32,uint256)", +"39e44ca4": "oraclize_network_name()", +"39e46ebe": "Quotation(uint256,string)", +"39e4dc18": "sendETH(bytes32,bytes32)", +"39e525f9": "resolveCallback(uint256)", +"39e53ca3": "updateUsersIndex(bytes32,uint256)", +"39e54c34": "_takeOffItem(uint256,uint8)", +"39e5a487": "BETSQUARE()", +"39e613d9": "mintVested(address,uint256,uint256,uint256)", +"39e65b46": "setIsRentByAtom(uint256,uint128)", +"39e7fddc": "feeAddr()", +"39e84cef": "EXT_COMPANY_STAKE_TWO()", +"39e851a3": "_isApproved(address,uint256)", +"39e899ee": "setWhiteList(address)", +"39e8bd48": "killMeshPoint(address,address,string,address)", +"39e8d1a4": "round1EndTime()", +"39e9eda1": "BackupChanged(address,address)", +"39ea68ba": "transferEntityOwnerPush(address,address)", +"39eabf7f": "bar(string,string)", +"39eb3491": "getMaximumPlayers()", +"39eb54d2": "bookExtendedVisit(uint256)", +"39eba5f9": "XXXXXXXX02(address[],uint256)", +"39ec68a3": "getRound(uint256,uint256)", +"39ecacac": "addContribution(address,uint256)", +"39ecc94f": "scamStampTokenAddress()", +"39eda73b": "jsonUpdate(string,string,string)", +"39edb660": "priceForDate(uint256)", +"39ede2b1": "SubmitNote(string)", +"39ef16f2": "Test2J()", +"39ef9105": "PhenixToken(uint256,string,uint8,string)", +"39efa270": "setClout(address)", +"39f05521": "withdrawVestedTokens()", +"39f165c6": "ParticipantAdded(address,uint256,uint256)", +"39f36220": "addThing(string,bytes32,string,string)", +"39f47875": "totalAmountOfWeiPaidToUsers()", +"39f4da78": "setSucessor(address)", +"39f4debc": "fillOrderAuto()", +"39f5b6b6": "fundsTreasury()", +"39f636ab": "changeRequiredSignatures(uint256)", +"39f64289": "quarter2()", +"39f64b52": "calcTokenPrice()", +"39f663ec": "isFundingFailState()", +"39f73a48": "fee2()", +"39f8e560": "setRewardAddress(address,address)", +"39f931b2": "placesSold()", +"39f95e63": "finaliseICO()", +"39fb1043": "_callRecipient(address,address,address,uint256,bytes,bytes,bool)", +"39fb435d": "initSiteSet(uint256)", +"39fc04f4": "setGftFundWallet(address,address,uint256)", +"39fc978d": "createCeleb(string,uint256,uint256[6],uint256[6])", +"39fd2003": "QPSEToken()", +"39fd615c": "complexityForBtcAddressPrefixWithLength(bytes,uint256)", +"39fdc5b7": "setExpectedStart(uint256)", +"39fded47": "Swap(address)", +"39fdf2fd": "OVERALLSOLD()", +"39ff8ff9": "CreatedBallot(address,uint256,uint256,bytes32)", +"39ffb234": "createContractScientist(string)", +"39ffd774": "getNamelessTouches()", +"39ffe67c": "withdrawOld(address)", +"3a000f23": "preallocate()", +"3a0046a3": "preIcoTokenHolders(address)", +"3a015ef9": "transferpoints(address,uint256)", +"3a01e53a": "getActivity(uint16)", +"3a02263c": "newController()", +"3a024d1c": "withdrawRewardedTokens(address,uint256)", +"3a027b26": "countDownToEndCrowdsale()", +"3a02a2cc": "addValidated(address)", +"3a03171c": "HARD_CAP()", +"3a031bf0": "getIsLocalOperator(address,address)", +"3a035edf": "sendWinnerPriceToAll(uint256,uint8)", +"3a03ce87": "lockBatch(address[],uint256[],uint256[],uint256[])", +"3a051334": "adjustMOTFeeDiscount(uint256)", +"3a05369f": "getMax(uint32[])", +"3a060bc9": "isOnLent(uint256)", +"3a062acd": "LogEscrow(uint256)", +"3a067e64": "transferJackpot(address)", +"3a079bda": "AmethystCoin()", +"3a07e78a": "icoIsFinishedDate()", +"3a080e93": "rebondFromUnbonded(address,uint256)", +"3a089d17": "addressLength(address)", +"3a0936ce": "contributeMsgValue(uint256[])", +"3a0a377b": "new_id()", +"3a0aec6c": "distributeDEXT(address[],uint256,uint256)", +"3a0d6350": "batchTransfer()", +"3a0d649a": "fundsToBank()", +"3a0e0418": "Prepare()", +"3a0e2475": "etherDonation(bool)", +"3a0f12dc": "grantTokensByShare(address,uint256,uint256)", +"3a0f5500": "lastBlock_a6Hash_uint256()", +"3a1053a1": "TokenBlockPay()", +"3a10a614": "get_hidden_layers(uint256[])", +"3a11aa20": "mutiSendETHWithSameValue(address[],uint256)", +"3a11b6cf": "AnotherParticipant(address,uint256,uint256)", +"3a122e65": "SPECTRUM()", +"3a12e933": "startPublicSale(uint256,uint256)", +"3a134c00": "isFreeTransferAllowed()", +"3a1460ac": "mint(address[16],address,uint256)", +"3a14bf4c": "binomial(uint256,uint256)", +"3a15021a": "confirmAndForwardOnBehalf(address,uint256,bytes,bytes32,uint256[2],uint8[2],bytes32[2],bytes32[2])", +"3a157860": "freezeBlock()", +"3a15bbee": "changeInvestmentFee(uint16)", +"3a15e7ca": "migrateFromLegacyRepContract()", +"3a16c51e": "readyOracles()", +"3a16e81e": "determinePID(address)", +"3a16f2ef": "crowdsaleStop(bool)", +"3a1767e5": "callerAdd(address,address)", +"3a178d99": "isAvailable(uint256)", +"3a180fee": "sellQuantity()", +"3a190e60": "LeeroyPoints()", +"3a1a635e": "createNewRevision(bytes20,bytes32)", +"3a1ca19e": "get_property_layout(uint256)", +"3a1d9a7d": "secondPriceTime()", +"3a1e08e0": "setAllowedTokens(address,uint256,address[])", +"3a1e7130": "teamBonuses(uint256)", +"3a1e7430": "TestTokenERC20(uint256,string,string)", +"3a20bade": "registerIncome(address,uint256)", +"3a20e9df": "getProduct(bytes32)", +"3a21cb9d": "vestingAgent()", +"3a21ec8d": "bleachPrice()", +"3a22a593": "advisorAllocatedTime()", +"3a22a94d": "lockedTokensOf(address)", +"3a232c2d": "getCurrentBonusInPercent()", +"3a23399c": "getBidCountByToken(address)", +"3a237322": "superchain()", +"3a23a483": "approveTransferManager(address)", +"3a24d701": "doSuicide()", +"3a2524c1": "enableAllowBuy()", +"3a253cee": "removeOwnerRequest(address)", +"3a256daa": "getProposalExecutionTime(bytes32,address)", +"3a257fdc": "checkFwdAddressUpgrade()", +"3a2647cf": "addMessageToQueue(string,string,uint256)", +"3a283d7d": "templates()", +"3a289d1b": "updateEscrowGoalReached()", +"3a2960e1": "numAllocations()", +"3a29c32e": "MCBA(uint256,string,string,address)", +"3a29ff34": "tokenClaims(bytes32,address)", +"3a2a0af2": "MCSToken()", +"3a2b4cdf": "addAgree(bytes32)", +"3a2b9c37": "GxCallableByDeploymentAdmin(address)", +"3a2bc42b": "fundPrize()", +"3a2c7a37": "ICOstate()", +"3a2d8784": "getDepositMultiplier()", +"3a2f1289": "BitQuickpay()", +"3a2f6e57": "transferAnyERC20Token(address,int256)", +"3a300490": "MarkRead()", +"3a300d6b": "updateAccountAmount(uint256,uint256)", +"3a30452a": "withdrawOverflow(address)", +"3a306682": "GSContract(uint256)", +"3a30cdec": "postWalletPayment(uint256)", +"3a311b84": "SimpleNameService()", +"3a31427b": "AcceptTxTaskEvent(address,uint256)", +"3a314b24": "SendETH(address)", +"3a319eff": "NZToken()", +"3a323bdf": "internalBurn(address,uint256)", +"3a32a387": "lockAmount(bytes32,bytes32,bytes32)", +"3a333d30": "TelewaveCoin()", +"3a338256": "getarg_1()", +"3a344ab8": "DragonToken(address)", +"3a349d20": "getOpenBidsByLine(bytes32)", +"3a34f09a": "getRandom(uint8,uint8,address)", +"3a357b1d": "isCrowdSaleStateICO()", +"3a36399e": "address1()", +"3a3650cf": "eurRaised()", +"3a365403": "maxWeis()", +"3a373db7": "batchTransferToken(address,address,uint8,bytes32[])", +"3a375a92": "allowsAllowance()", +"3a377c82": "_magic(uint256)", +"3a37a917": "KHCToken()", +"3a38a08c": "verifyOperation(address,uint32)", +"3a38b90f": "fusionChibis(uint256,uint256,uint256,string,string,uint8)", +"3a393ed3": "claimReward(uint256,address,address,address,address)", +"3a3ab672": "isOnWhitelist(address)", +"3a3af53f": "getMasterNodes(address,uint256)", +"3a3b0382": "PLATFORM_FUNDING_SUPPLY()", +"3a3b955b": "enableExchange(uint256)", +"3a3bc0cb": "feeCoownerAddress()", +"3a3bdf56": "claimOwnerFee(address)", +"3a3cd062": "clientWithdraw(uint256)", +"3a3d12d4": "numberOfItemsForSale()", +"3a3d523f": "setTokenLogic(address)", +"3a3e49fe": "referalAirdropsTokensAddress()", +"3a3e8e84": "getAuthorizer(uint256)", +"3a3eaeef": "repayBorrowFresh(address,address,uint256)", +"3a3eda84": "blockNumberForVictory()", +"3a3f7279": "getProductRetailer(uint256)", +"3a3f8239": "claimOrder(uint256)", +"3a3fdf05": "remainAirdrop()", +"3a4027bb": "createWithReward(string,bool,uint256,address)", +"3a40c544": "exchangeERC20(address,address,uint256)", +"3a4148de": "setPreSalesSpecialUser(address,uint256)", +"3a4268e7": "doCall(bytes32,address)", +"3a42f7de": "changeShop(address)", +"3a447341": "SplendSale(uint128,uint128,uint128,uint128,uint256,uint256,uint128,uint128,uint128,uint128,address,address,address,address,address,address)", +"3a45268b": "LocklistAddressenable(address)", +"3a45af86": "modifyProductLimit(bytes32,uint256)", +"3a45d3ef": "setAllowanceBeforeWithdrawal(address,address,uint256)", +"3a4634e4": "changeCrytiblesAddress(address)", +"3a470b9e": "removeAccountMinter(address)", +"3a47de24": "Match()", +"3a47e629": "nCurves()", +"3a48f8c1": "removeFreelancer(address,uint256[],address)", +"3a49b95a": "getMyInvestment()", +"3a4a4233": "how()", +"3a4a921e": "revokeVested()", +"3a4ac6c7": "calculateCardHolderDividend(uint256)", +"3a4ac98a": "tokensToEth(uint256,bool)", +"3a4b3664": "ownerBurn(uint256)", +"3a4b4532": "comission()", +"3a4b5e6d": "disallowOwner()", +"3a4b66f1": "stake()", +"3a4b948f": "hardBurnSMS(address,uint256)", +"3a4bece2": "CollectFromTransaction(address,uint256)", +"3a4c11b0": "setHydroStakingMinimum(uint256)", +"3a4cb854": "BrehonContractFactory()", +"3a4cba05": "SetCustomerInfo(uint64,bytes18,bytes32,bytes11)", +"3a4dcc88": "TronToken(address,address,uint256,string,uint8,string)", +"3a4de190": "repost(bytes32)", +"3a4e3342": "rate_BTCUSD()", +"3a4f6999": "maxNumber()", +"3a4faf7f": "max64(uint64,uint64)", +"3a50083d": "getRealXaurCoined()", +"3a500ae7": "JOYToken()", +"3a501155": "crowdSaleBalance()", +"3a50ccb7": "getMilestoneBonus()", +"3a5167e9": "forwardCollectedEther()", +"3a518b95": "functionName4(bytes32)", +"3a51d246": "getBalance(string)", +"3a525983": "TotalICOSupply()", +"3a531998": "getDisputeRoundDurationSeconds()", +"3a537b0c": "deliver(address,uint256)", +"3a5381b5": "validator()", +"3a551c6d": "HarborPresale(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3a559de6": "iGniter()", +"3a55f1f1": "BitcoinBravado()", +"3a562b78": "getOwnTokens(address)", +"3a573e02": "_badgeTotalSupply()", +"3a579abc": "withdrawTokensForEtheeraTeam(uint256,address[])", +"3a57e698": "registerGuide(address)", +"3a5860c4": "ETHERCExchange()", +"3a5b2080": "updateEducation(uint256,string,uint16)", +"3a5b5bde": "encrypt(string)", +"3a5d73d1": "airdrppReward()", +"3a5dd603": "chunk2IsAdded()", +"3a5e2576": "updateOwnerPercentage(uint256)", +"3a5ec2f8": "lemonsDroppedToTheWorld()", +"3a5eefc0": "EOSpace()", +"3a5f32cd": "updatePriceFreq()", +"3a600ce7": "sendToken(address,address)", +"3a60703b": "_transfer(uint256,address,address,uint256)", +"3a6120c5": "stopThinking(uint256)", +"3a6128db": "setLLV_edit_5(string)", +"3a6157cf": "richDatabase(uint256)", +"3a61738d": "calcReward(address)", +"3a618d26": "triggerRsclearRefund()", +"3a61dbfe": "ownerAddWorkRecord(address,uint256,bytes16)", +"3a621018": "unFreezeAccounts(address[])", +"3a62244f": "activateTransfers()", +"3a629ab3": "issueToken(address,string,string,uint8,uint256)", +"3a62a9d7": "AddressRegistered(address,string)", +"3a62cd2e": "currentCapEther()", +"3a62f663": "getAllPelvic()", +"3a63d886": "resource()", +"3a645c6d": "getLastTranche()", +"3a6514c8": "OddCoin()", +"3a669dd9": "TokenVesting(address,uint256,uint256,uint256,bool)", +"3a66caef": "ColuLocalCurrency(string,string,uint8,uint256,string)", +"3a672722": "ccSupply()", +"3a674500": "finalizeApprovedContracts()", +"3a677696": "setMigrateFrom(address)", +"3a67a0f6": "disableTransfers()", +"3a689082": "withrawFee()", +"3a693759": "changeRescueAccount(address)", +"3a6991ce": "luckVegas(uint256)", +"3a699294": "Schmeckle()", +"3a69ab39": "getItemId(bytes4)", +"3a69db94": "multiDynamic(uint256[2][])", +"3a6a0474": "VisualTechnologyToken()", +"3a6a2a69": "lockAssetHolder()", +"3a6a43f4": "marketingTokenAllocation()", +"3a6a4d2e": "distributeFunds()", +"3a6ab569": "setMemberInfo(address,bytes32)", +"3a6ddf70": "sendit(address,uint256)", +"3a6e3d98": "calcCommission(uint256)", +"3a6eb318": "getMiningReward(uint256)", +"3a6f85b1": "TIER2_BONUS()", +"3a6fbacb": "currentAmountReceivedDeposit1Ether18Decimals()", +"3a6ffc92": "GetBetResult()", +"3a70491e": "incrementBattles(uint256,bool)", +"3a70eabd": "GetMinerUnclaimedICOShare(address)", +"3a7104d1": "updateFlag()", +"3a71386f": "functionName2(bytes32)", +"3a7221e0": "bestInvestorInfo()", +"3a72cd49": "preSaleFinishedProcess(uint256)", +"3a7327a3": "setAccessLevel(address,uint256)", +"3a7343ba": "setBeneficiary(address,uint256,uint256,uint256)", +"3a73b0ad": "HypeToken()", +"3a740a63": "getBonus(address)", +"3a74a767": "_setAdmin(address)", +"3a74b05b": "changeDesigner(address)", +"3a74c05b": "updateMasternode(uint256)", +"3a750183": "_commitHash(bytes32)", +"3a752c31": "HARDCAP_TOKENS_PRE_ICO()", +"3a7562ee": "addLegitRaceAddress(address)", +"3a762f73": "getRunningRazInstance(uint256)", +"3a764462": "enableTokenTransfer()", +"3a76a282": "getBlocksTillMatthew()", +"3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", +"3a7749c0": "bonusRatePeriodTwo()", +"3a774b48": "register(address,uint256,uint256,uint256)", +"3a777ce0": "_C_sendToToteLiquidatorWallet()", +"3a77c91a": "setNotes(string)", +"3a789ffb": "setMinAndMaxEthersForPublicSale(uint256,uint256)", +"3a78e324": "updateIsAttached(uint256,uint256)", +"3a79311f": "Ploutos()", +"3a79a55c": "needsLotteryFinalization()", +"3a7a1ba9": "EscapeHatchCalled(uint256)", +"3a7a302c": "LogCrowdsaleStarted()", +"3a7a52d2": "HasCard(address,uint32)", +"3a7bd7b5": "isMixGen()", +"3a7befc6": "checkUserTokenBalance(address)", +"3a7c92af": "LogWeekRate(uint32,uint256)", +"3a7d22bc": "getElement(uint256)", +"3a7d280c": "login(string)", +"3a7d8df3": "ClubToken()", +"3a7e6854": "setnewPlayerFee(uint256)", +"3a7f5e2c": "LogFundsUnlocked(address,uint256,uint256)", +"3a7fb796": "mintGreen(int256,address,uint256)", +"3a80bd25": "CoinVillaTalk()", +"3a830a96": "Leimen()", +"3a8343ee": "confirmCustodianChange(bytes32)", +"3a838636": "withdrawTeam(address)", +"3a842044": "getDeviceById(uint8)", +"3a8468f7": "isToOffChainAddress(address)", +"3a84f002": "commitDispute(uint256)", +"3a8504b5": "NewSale(address,uint256,uint256,bool)", +"3a876e88": "setMDAPPSale(address)", +"3a878528": "setlvlNominalValue(string)", +"3a88594d": "isOptionPairRegistered(address,uint256,address,uint256,uint256)", +"3a8a0a5c": "prizeMoneyAsset()", +"3a8a7907": "getbetData(int8,int8,address)", +"3a8ac516": "toKiwi(uint256)", +"3a8b069e": "depositCreator()", +"3a8ba4f6": "removeResolvers(address[],bool)", +"3a8bcc91": "startPrice(uint256)", +"3a8c5065": "developer_add_Exchanges(string)", +"3a8d1eb1": "creditWinner()", +"3a8d6e5e": "viewKYCAccepted(address)", +"3a8ed5c4": "deathFactor_v()", +"3a8f1585": "createChannel(uint256,address,address)", +"3a8fdd7d": "getExchangeCost(address,address,uint256,bytes)", +"3a903dfa": "LEYBAERT()", +"3a911d30": "getAppsCount(address)", +"3a9143e6": "CCHToken(uint256,string,string)", +"3a91db97": "onNewCampaign(uint256,address)", +"3a920766": "WALLET_TEAM()", +"3a9214d2": "AsiaPropertyCoin()", +"3a9253a3": "BurnMe(address)", +"3a92a590": "YuanTaiToken(uint256,string,uint8,string)", +"3a9407ec": "abstractFunc()", +"3a94ab31": "_upgradeTo(uint256,address)", +"3a95152d": "getEvaluationCountByStudentID(uint32)", +"3a9588ba": "changeOwnerWithTokens(address)", +"3a95a332": "left57(uint256)", +"3a95a3c8": "init(uint8,uint256)", +"3a963033": "_addIndexGame(address)", +"3a96d16d": "setInitialAllocationTimelock(address,uint32)", +"3a96df81": "bbwallet()", +"3a96fdd7": "compare(string,string)", +"3a98c533": "getElementOwners(uint256[])", +"3a98ef39": "totalShares()", +"3a9c0ae7": "issueDividendReward()", +"3a9c7d3d": "maxMultiplierByAddress(address)", +"3a9c9ffc": "historyCount()", +"3a9d8be8": "moveAccountOut()", +"3a9db5a7": "_withdrawBonus(address)", +"3a9de0b8": "settleDevFund(uint256)", +"3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", +"3a9e9d0d": "prizeCooldowns(uint256)", +"3a9ebefd": "decrement(uint256)", +"3a9eea12": "Impressio()", +"3a9f967e": "TOKENS_SOFT_CAP()", +"3aa0145a": "getFinalAmount(uint256,uint8)", +"3aa0396a": "mintFromICO(address,uint256)", +"3aa0eafb": "registrarUsuario(bytes32,bytes32,bytes32,bytes32)", +"3aa2ad63": "_setPlayerId(uint256,uint256)", +"3aa36dd4": "GetSaleInfo_Presale(uint8)", +"3aa3f154": "TokenSale(address,address,uint256,uint256)", +"3aa3f75a": "isOpenForSale()", +"3aa435a5": "DST_TEAM()", +"3aa4868a": "computeCacheRoot(uint256,uint256,uint256[],uint256[],uint256)", +"3aa49656": "phase2MaxEtherCap()", +"3aa51e41": "vaultFunds()", +"3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", +"3aa5fe59": "hashAddress(address)", +"3aa612b9": "FT_TEAM_FUND()", +"3aa6608e": "processOrder(uint128,uint256)", +"3aa6c4f9": "withdrawableBalanceOf(address)", +"3aa6f0ee": "getRedemptionRequest(uint256)", +"3aa718d5": "changeDeveloperCATDestinationAddress(address)", +"3aa7429c": "TestX()", +"3aa89e83": "preICOActive()", +"3aa90889": "frozenPauseTime()", +"3aa935cb": "setDonationProportion(uint256,uint256)", +"3aa9376c": "releaseTokenSaleJM(address,uint256)", +"3aa94b1d": "getCoinStats(uint256)", +"3aaa36e6": "Fees()", +"3aaa3f24": "setPhaseSold(uint256,uint256)", +"3aaa74b2": "withdrawTips()", +"3aab3306": "SmartController(address)", +"3aab47b2": "UnpackDOT(bytes)", +"3aac430c": "TAKE()", +"3aac7661": "changeMonsterNickname(uint256,string)", +"3aaec03d": "kingGladiator()", +"3aaec5c5": "addToWhiteList(address[],uint256)", +"3aaf1898": "supplement(uint256)", +"3aaf3232": "maxRoundDelay()", +"3ab1a494": "setWithdrawAddress(address)", +"3ab1b765": "MainstreetCrowdfund(uint256,uint256,uint256,uint256,uint256,address,address,address,address)", +"3ab1e703": "roundMoneyDown3SF(uint256)", +"3ab207a3": "Flash()", +"3ab2dcec": "countCows()", +"3ab337b9": "addData(uint8,string,string,string)", +"3ab3bfc1": "splitFunds(string)", +"3ab4c395": "STARTING_SQUIRREL()", +"3ab50a9c": "getVersion(string)", +"3ab55c44": "getCurrentTokenPriceICO(uint256)", +"3ab562f2": "nextTarget()", +"3ab5657d": "getSourceConstraint(uint256,uint256,uint256)", +"3ab58703": "coldStorageYears()", +"3ab64c33": "beneficiaryMultiSig()", +"3ab71189": "_detailsLength()", +"3ab81062": "GOGO()", +"3ab89b78": "testFailHitPresaleCapPreDistribute()", +"3ab8e61a": "querybalance2()", +"3ab8ee2f": "HonestisnetworkICOregulations()", +"3ab966f4": "lastTokenPriceWei()", +"3aba9e9b": "WiredToken()", +"3abbf56a": "_setHourlyValueDecayRate(uint128)", +"3abc2106": "suicideContract()", +"3abcf3e7": "checkAssetListLength()", +"3abd0136": "totalBuyers()", +"3abd3a68": "summPartnershipsAndExchanges()", +"3abd8e4e": "getother()", +"3abdad4e": "totalCascadingPercentage()", +"3abdf792": "BATTLE_POINT_DECIMALS()", +"3abe2280": "updateTemperature(uint8)", +"3abee034": "emitRLC(uint256)", +"3abf30fc": "hash(bytes32,uint256)", +"3ac07183": "setDeprecated(bytes32)", +"3ac0feac": "getApprovedProposals()", +"3ac14078": "SEEDWhitelist()", +"3ac140e8": "distributorCount()", +"3ac163a7": "RepToken(address,uint256,address)", +"3ac19acf": "GenChipLevel_General(uint256,uint256,uint256)", +"3ac256d8": "getCurrentMilestonePostponingProposalDuration()", +"3ac2f3cc": "YinchengToken(address,address)", +"3ac31e02": "icoBalance()", +"3ac39d4b": "updateDarknodeDeregisteredAt(address,uint256)", +"3ac3a2fe": "teamPrizeClaim(uint256)", +"3ac4217c": "setJackpot(address,uint256)", +"3ac46b25": "getWithdrawableAmountPES(address)", +"3ac46e6b": "Irb()", +"3ac4aeeb": "amountFunded(bytes32,string,address,address)", +"3ac5cb73": "GeometricPonzi()", +"3ac6dd9d": "createPromotionalPurchase(uint256,uint256,address,uint256)", +"3ac70266": "setType(uint256,uint256)", +"3ac7d6fe": "pendingAddress()", +"3ac7fe84": "TestUtils()", +"3ac87121": "currentWorkStagePercent()", +"3ac8858b": "setMinimalBet(uint256)", +"3ac8b026": "storeShip(uint16,uint16,uint8,uint256,bytes32)", +"3ac8ca63": "beginContrib()", +"3ac9a77a": "createGen0Auction(uint256,uint16,uint16,uint16,uint16,uint16)", +"3ac9dfa3": "AgrolotToken()", +"3aca3788": "UCCoinSaleIsOn(uint256)", +"3aca9ffd": "createNewMsgAwaitingAudit(string,uint256)", +"3acab680": "SafeMath()", +"3acacfbe": "capitalFundable()", +"3acbd9eb": "doesOwnBase(bytes32,address)", +"3acbe450": "sow(uint256)", +"3acc2712": "partialUnlockAngelsAccounts(address[])", +"3accb428": "distributionMinter()", +"3acce2b2": "addRecord(string,address,string,address)", +"3acd8b80": "initExAlice(address,uint256)", +"3acddfc1": "marker()", +"3acde419": "addSellOrder(uint256,uint256)", +"3ace049e": "allowedSenders(uint256)", +"3acf4f9f": "ownershipUnits(bytes32,address)", +"3acf597c": "globalParams()", +"3acfad2b": "toB32(uint256,address,bytes)", +"3acfc185": "moduleAddress(string)", +"3acfd909": "getOption(string)", +"3ad0486b": "Token_1()", +"3ad04d8f": "setupFundingTime(uint256,uint256)", +"3ad06d16": "upgradeTo(uint256,address)", +"3ad075ea": "maximumSellableTokens()", +"3ad0d840": "setAvailableSeats(uint256)", +"3ad10beb": "cup()", +"3ad10ef6": "devAddress()", +"3ad14af3": "add(uint32,uint32)", +"3ad15258": "getProfits()", +"3ad17019": "changeDepositStopTimeFromNow(uint256)", +"3ad17f6d": "getWinnerAndBestMinorty()", +"3ad213e0": "connectOrderUser(address,address,uint256,address)", +"3ad359cf": "setDelegateWallet(address)", +"3ad389f2": "SanJaviercoinforwe()", +"3ad49222": "getMinimumAmount(address)", +"3ad520d8": "interestArray(uint256)", +"3ad55b83": "Tyzon()", +"3ad5b3a2": "createFunding(address,uint256,uint256,uint256)", +"3ad6f8ac": "getMaxClaimableWeiAmount()", +"3ad77392": "getTiersData(uint256)", +"3ad7c15c": "setDefaultClaimPercentage(uint256)", +"3ad84c89": "TXOsaleTwo()", +"3ad9248c": "fillInvestorAccountWithBonus(address)", +"3ad9801d": "importReward(address,uint256)", +"3ad9a928": "setFeePercent(uint256,address)", +"3ad9f722": "sendPoolMoney(uint256)", +"3ada121c": "Ballot(address)", +"3adb2de7": "bet_this_spin()", +"3adb3ad5": "querySeed(uint256)", +"3adbb3a4": "mint(uint32,uint32,uint32)", +"3add5a99": "getContractCreationGas()", +"3adda69a": "doBuy()", +"3addedd3": "getCostForAttack(uint8)", +"3adf7280": "getTotalHashRate()", +"3adf96d7": "_createProxy(address)", +"3ae01f84": "USDOracle()", +"3ae033a0": "payBounties(address[],uint256[])", +"3ae0e63f": "BtradeWhiteList()", +"3ae15692": "EEFcoin(address)", +"3ae1786f": "returnTokens(uint256)", +"3ae192bd": "changeFactorySubscriptionFee(uint256)", +"3ae2119b": "selfKill()", +"3ae24412": "addAddWhitelist(address)", +"3ae25075": "_getBonusAmount(uint256,uint256)", +"3ae26afa": "getRate(bytes32,bytes)", +"3ae34403": "stage1Bonus()", +"3ae46aed": "UruguayvsPortugal()", +"3ae49204": "setWaracoinPerEther(uint256)", +"3ae4b008": "createBounty(string,address[],uint256)", +"3ae50ce7": "createPresaleUnicorns(uint256,address)", +"3ae69708": "cryptaurBackend()", +"3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", +"3ae7f938": "hash(uint256,uint256,uint256,uint256)", +"3ae83bd4": "transferFreeze()", +"3ae9133d": "coupon(uint256,uint16,uint8,bytes32,bytes32)", +"3ae983a8": "OriginalMyAccessControl()", +"3ae9b510": "getLatestMajorTree(bytes32)", +"3ae9de9b": "StatusSecurity()", +"3aeac4e1": "withdrawToken(address,address)", +"3aeaccf5": "Address()", +"3aeb512c": "updateTranscoderWithFees(address,uint256,uint256)", +"3aeb6c71": "vestingPercent()", +"3aeb850a": "DaysTillUnlock()", +"3aebe2a3": "GluuTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,address,address,address)", +"3aec4439": "NSCBurnToken()", +"3aec5458": "callEmitter(uint256)", +"3aecca37": "newManuscript(bytes32,string,address[])", +"3aecd0e3": "getTokenBalance(address)", +"3aedded5": "PUBLIC_SALES_3_RATE()", +"3aedf90a": "wei_raised()", +"3aedfb8b": "withdrawl()", +"3aee0254": "addWinner(uint256)", +"3aee69bb": "changeTeamAddress(address)", +"3aef157b": "wingsTokensReward()", +"3aef3900": "proposalContract()", +"3aefaa75": "computeHash(string)", +"3aefaeb8": "setTransferRate(uint256)", +"3af05903": "deleteApprovedWalletAddress(address)", +"3af0dbc1": "contributionsOf(address)", +"3af1e17e": "createCelebrity(string,address,address,uint256,uint256,bool,uint256[])", +"3af242fd": "_createTrainer(string,uint16,address)", +"3af2b770": "BOBOTOKEN3()", +"3af32abf": "isWhitelisted(address)", +"3af34254": "LogChangeAccountAddressForSponseeAddress(address)", +"3af39c21": "undefined()", +"3af3c72d": "changeBonusUntilDate(uint32)", +"3af3db55": "channelValidator(uint64,uint64)", +"3af3f24f": "totalCalls()", +"3af41dc2": "adminDeleteRegistry()", +"3af5b3aa": "month48Unlock()", +"3af5dbb6": "mandateInBlocks()", +"3af6486e": "testStartNewCampaign()", +"3af690c2": "claimId(bytes32,uint256)", +"3af74940": "setRemainingTokenHolder(address)", +"3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", +"3af76638": "deployAndSetANT(address)", +"3af7d71c": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"3af826a4": "auctionCancel(uint256)", +"3af8286f": "ContractFPC()", +"3af8470d": "Rate6()", +"3af88261": "deleteTokens(address,uint256)", +"3af8e4ab": "backupOwner()", +"3af90f35": "requiresAuction(bytes32)", +"3af91491": "convertMinimalToSignal(uint256)", +"3af923ff": "CreateRCN(address,uint256)", +"3af946d2": "testnetWithdrawn(address,uint256)", +"3af94817": "getPongvalRemote()", +"3af9e169": "setStartIcoMainICO(uint256)", +"3af9e669": "balanceOfUnderlying(address)", +"3af9f8ac": "ArrowCOin()", +"3afa476c": "unstash(uint256)", +"3afa895f": "deleteSecondaryAddress(address,address)", +"3afb01d4": "testGetProgress()", +"3afbf039": "pastTenMinutes()", +"3afc7282": "getVoting(uint256)", +"3afd4b5e": "coef()", +"3afd716f": "setVIPLibraryAddress(address)", +"3afdbd83": "Activate(bytes32,string,string)", +"3afdce53": "newCrowdSale(string,string,string,uint256)", +"3afe3a8a": "GetEntityDelegatedRevoker(bytes32,uint8)", +"3b0007eb": "MinterChanged(address,address)", +"3b0107fc": "calculatePerformanceBonus(uint256)", +"3b011b30": "getSeedForTokenId(uint256)", +"3b016d83": "getAllBonus(uint256,uint256)", +"3b01788a": "throwIfSetPresaleTokensAfterActivation()", +"3b0363fa": "summFutureInvest()", +"3b039176": "CreateEvidence(bytes32,string)", +"3b040fb8": "failedKycCount()", +"3b048123": "onlyInEmergency()", +"3b048284": "totalCoinCap()", +"3b0506f7": "getVoteByAddress(address,uint256)", +"3b05a861": "setEthDepositAddress(address,address)", +"3b05c869": "StoreTest()", +"3b066dd7": "BunkToken()", +"3b06903e": "reassignModerator(address)", +"3b06a6fc": "toggleAuthorization(address,bytes32)", +"3b0732a4": "interaddtoken(address,uint256,uint256)", +"3b078de3": "changeIsPayableEnabledForAll()", +"3b079e10": "manualTransferToken()", +"3b0819b8": "create(uint256,uint256,address,address,uint256,uint256,address,uint256,bool)", +"3b08d35e": "setAuditReportBlockNumber(uint256,uint256)", +"3b098c8c": "assertEq13(bytes13,bytes13,bytes32)", +"3b0a895d": "setUsdEthRate(uint256)", +"3b0a9555": "_callReturn(address,bytes,uint256)", +"3b0ad68a": "InitializedToken(address)", +"3b0b037a": "getPriceChange(uint256)", +"3b0c197e": "getBook()", +"3b0d2764": "SNT(address)", +"3b0da260": "revokeVesting(address)", +"3b0da3b8": "updatePolicy2(bytes32,string,uint256,uint32,string)", +"3b0f0f2f": "getReferral(address)", +"3b0f343b": "getDividendAmount(address,address)", +"3b0f3ed3": "attend(uint32,string)", +"3b1019ef": "getAdvisersConsultantsTokens()", +"3b102248": "withdrawFromBalance(address,uint256)", +"3b107682": "DualIndex()", +"3b111bf3": "EtherTwitter()", +"3b116370": "GalacticX(uint256,string,string)", +"3b11b577": "CampaignOpen(uint256)", +"3b130649": "div256_128By256(uint256,uint256,uint256)", +"3b13873c": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", +"3b13f8a6": "setDealerCut(uint8)", +"3b143184": "Congress(uint256,uint256,int256,address)", +"3b143b51": "untrustedProposals(uint256)", +"3b14ab12": "GetAquiredAssetBalance()", +"3b15a398": "rewardContributor(address,uint256)", +"3b161361": "VoidAccount(address,address,uint256)", +"3b1663be": "changeAdvisor(address)", +"3b16c27a": "ta()", +"3b16f5f6": "releaseMultiWithStage(address[])", +"3b172a32": "bancorToken()", +"3b172fb9": "AuctusToken()", +"3b17ebb1": "adminAddWinner()", +"3b186bfc": "logFeeWindowRedeemed(address,address,uint256,uint256)", +"3b192105": "_getLastDate()", +"3b19a17d": "resetOrderIdTo(uint256)", +"3b19c868": "BookingUpdate(address,uint256,uint8,uint256)", +"3b19d67a": "dateICO()", +"3b19e84a": "getTreasury()", +"3b1a4170": "cmulpow2(uint256)", +"3b1a520d": "testSimpleBurning()", +"3b1b69f9": "Upgradable(string)", +"3b1b8ca0": "trustedClients(address)", +"3b1bebd1": "referee()", +"3b1cbad8": "getArraySize()", +"3b1cda49": "GetBaseN(uint256)", +"3b1d21a2": "getCash()", +"3b1e2542": "updateToken(uint256,address,uint8)", +"3b1ecef0": "private_getGameState()", +"3b1ede9a": "LOOMIA2_ADDR()", +"3b1ef91c": "NeyrosNetwork()", +"3b1fe51b": "changeTimestamp(address,uint256,uint256)", +"3b20c3f3": "rocketLaunch(uint256)", +"3b215823": "taxFeeBps()", +"3b22263c": "move(uint16,uint8,uint8)", +"3b2269cf": "systemAcc()", +"3b22c8e3": "resolveGameByHand(uint32,uint32)", +"3b23a5ca": "switchStatus(bool)", +"3b242439": "ratioDenominator()", +"3b24b547": "getTransactionData(uint256)", +"3b25a6b9": "processDeposits(address,uint256)", +"3b25cf37": "PintOd()", +"3b265d35": "MatchingEngine()", +"3b270710": "ico1stPrice()", +"3b278f2a": "icoPaused()", +"3b2812ad": "newWindow(uint8,uint256)", +"3b283ff9": "TransferAllowanceFor(address,bool)", +"3b29c470": "calcTokensAvailableToBuyback()", +"3b29fe55": "isSecondLockTimeEnd()", +"3b2aa8cd": "getWeaponEntity(uint256)", +"3b2b7fec": "setCompte_21(string)", +"3b2b8ce9": "setAirdropped(address)", +"3b2dbb7f": "token2Player(address,uint256)", +"3b2e5f94": "getDepositValue(address)", +"3b2f3d4d": "BitCoin(address,uint256,uint256,uint256,address,address)", +"3b2fd34d": "backProjectXOwner()", +"3b2fe781": "sendEth(address[])", +"3b304147": "draw(uint256)", +"3b305964": "accBonusTokens()", +"3b30ba59": "ZRX_TOKEN_CONTRACT()", +"3b31cbad": "ContractFunded(address,uint256,uint256)", +"3b33175b": "setWhitelistIn(address,bool)", +"3b338da0": "getActionsCount(bytes)", +"3b33fe73": "setAuctionPrice(uint256)", +"3b340ceb": "DWEToken()", +"3b343a13": "getNodeAddress(bytes)", +"3b3493d3": "lost()", +"3b355af6": "baseData()", +"3b3561ea": "PresaleCapUpdated(uint256)", +"3b356d71": "playerKiller()", +"3b3571f1": "setMinHouseClassic(uint256)", +"3b357f4e": "determineInviter(uint256,bytes32)", +"3b35cde5": "Genesis(address)", +"3b360c7f": "getInvestorsAndTheirBalances()", +"3b3672bd": "getAddressLength()", +"3b37044d": "WWWToken(uint256,string,string)", +"3b3783e7": "ETHLotteryManager()", +"3b38e7d1": "totalSupplyByAsset(bytes32,int256)", +"3b393b03": "Zorro02Token()", +"3b39becd": "isMainSaleRunning()", +"3b3a1a7a": "tokenIdPointer()", +"3b3ae670": "getBaseRandom()", +"3b3b57de": "addr(bytes32)", +"3b3c0717": "switchRecycleAllowed(bool)", +"3b3c594b": "updateOldToken(address)", +"3b3c5aed": "addSpecialRateConditions(address,uint256)", +"3b3d5b88": "completeUnlock(bytes32,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"3b3d9485": "calcRandomNumber()", +"3b3dca76": "rand()", +"3b3df3d5": "tradeIn(address,uint256)", +"3b3e672f": "transferBatch(address[],uint256[])", +"3b3fa917": "setStartTimePreIco(uint256)", +"3b3fb38b": "rebuySum(address)", +"3b404266": "getDeployAt(uint32,uint32)", +"3b4159da": "voteProposal(address,address,uint256,string,bytes)", +"3b41b5f2": "setTotalProjectEscrow(uint256)", +"3b421f9e": "greeter(bytes32)", +"3b424f09": "setPermission(address,bytes32,bool)", +"3b427b20": "changeWhitelistCornerstoneStatus(address,bool)", +"3b428c9b": "tokenForWei(uint256)", +"3b42dfad": "saleWeiLimitWithoutKYC()", +"3b434169": "setUsdPerHundredEth(uint256)", +"3b43fa0a": "DSAuth()", +"3b441344": "setOtherRich3D(address)", +"3b442edf": "deathData_a14()", +"3b44383f": "TokenERC20(uint256,string,string,uint8)", +"3b45afed": "internalTransferFrom(address,address,uint256,uint256)", +"3b462d5b": "bounty(address[],uint256[])", +"3b46321f": "setMultisendLimit(uint256)", +"3b4656a1": "removeAssociatedAddress()", +"3b4664f0": "addToResult(int256)", +"3b46a7df": "ivote(bool)", +"3b46aca3": "fetchSnapshotBlockByIndex(uint256)", +"3b4700fa": "releaseLockToken()", +"3b470582": "getOverall()", +"3b4719d0": "getJockey(uint256)", +"3b47513b": "onlyWhitelisted(bytes,address,uint256,uint256,uint256)", +"3b478fc5": "ethUsdRate()", +"3b4793fc": "sendGift(address,uint256,string)", +"3b47d37a": "RealTimeRayTracing()", +"3b47dab6": "setSaleMinter(address,uint256)", +"3b4920b8": "batchMintPresaleTokens(address[],uint256[])", +"3b495d6b": "Petcoin()", +"3b496f53": "IssueAccepted(uint256)", +"3b49a77b": "hasConfirmed(bytes,address)", +"3b49c216": "_createSchedule(address,uint256,uint256,uint256,uint256,uint256)", +"3b49f84b": "TokenD(uint256,string,uint8,string)", +"3b4a00b4": "unPauseBuy()", +"3b4a20f2": "getExternalFundsRaised(string)", +"3b4a40cc": "ManagerAdded(address)", +"3b4b7808": "returnEthReceived()", +"3b4c4b25": "setSupply(uint256)", +"3b4cb5e5": "GoldFees()", +"3b4cc7a3": "totalCompanies()", +"3b4d75d8": "withdrawRemainPrivateCoin(uint256)", +"3b4d900a": "NANO()", +"3b4dbf8b": "setSecret(uint256)", +"3b4e06e6": "getTokenAmounts(uint256)", +"3b4e8dbf": "tokenDev()", +"3b4fb68f": "LXKToken()", +"3b52147f": "LogFundsCommitted(address,address,uint256,uint256,uint256,address)", +"3b5251b7": "getPlayerVoteRewards(address,uint256)", +"3b52f2be": "winnersLength()", +"3b53f274": "LogInt(string,uint256)", +"3b540814": "transferFundWallet(address)", +"3b545d2f": "etherToSendCharity()", +"3b5535b9": "getLastWeekStake(address)", +"3b55d26f": "workDone(address)", +"3b561709": "initTransferArr(address[],uint256[],uint256[])", +"3b563137": "transferBeer(address,uint256)", +"3b574beb": "minTokensToBuy()", +"3b57aa90": "setHash(address,uint16,bytes32)", +"3b57fdff": "emitMint(address,uint256)", +"3b58524d": "setAddress(address,address)", +"3b58d5d7": "getPremiumCarSupply(uint256)", +"3b58f49a": "setMinBounty(uint256)", +"3b591ea7": "AmountToForgeTheNextBlock()", +"3b594cd0": "_delegateAssetOwnerRemoved(bytes32,address)", +"3b599b18": "ChainclubToken()", +"3b59cb24": "bulkApproveMints(uint256[])", +"3b5a3357": "transferForFinanceTeam(address,uint256)", +"3b5a938a": "kick(uint32)", +"3b5adcef": "reservedFundsCharging(address)", +"3b5ae589": "Bitcash()", +"3b5b64f4": "conversionsCount()", +"3b5c020d": "BOT_ELEMENT_4()", +"3b5dd70b": "bigBonusPercent()", +"3b5e295c": "maxmoneypercent()", +"3b5e5376": "baseComparable()", +"3b5f24eb": "percentile(uint256)", +"3b5f30db": "EKKChain()", +"3b5fdb83": "buyP3D()", +"3b615624": "getEndorsements(bytes32)", +"3b61db4c": "stopIco(address)", +"3b61f5f5": "ChangeAuctionMaster(address)", +"3b623c19": "StripperToken()", +"3b62545b": "getNBAIWallet(address)", +"3b626b83": "getWidthrawStatFor(string)", +"3b630493": "DAPPToken()", +"3b632a74": "getInterMixed()", +"3b64e77e": "enableCrowdsaleRefund()", +"3b653755": "seedMarket(uint256)", +"3b663195": "init(bytes32)", +"3b664dc7": "addRoleForUser(address,string)", +"3b666e48": "getCurHash()", +"3b668059": "ContractBalance()", +"3b66c415": "EmergencyWithdrawalFailed(address)", +"3b66d02b": "tokenFallback(address,uint256)", +"3b68f8aa": "deleteDonator(address)", +"3b69eed4": "updatePlanetName(uint256,uint256,uint256,string)", +"3b6b639c": "luckyStoneEarning()", +"3b6b9a5e": "fuckingkill()", +"3b6c35c3": "MubsToken()", +"3b6c6c72": "SALE_MIN_CAP()", +"3b6cbaeb": "OverseasReturneesToken()", +"3b6ccee7": "switchMinting()", +"3b6d05c7": "mdtTeamAddress()", +"3b6d2544": "Found(uint8)", +"3b6dde13": "getRandomNumber(address)", +"3b6e2970": "ContractStakeToken(address)", +"3b6e31bb": "isAllowedToUpdateProxy(address)", +"3b6e750f": "isAcceptedToken(address)", +"3b6e8ec3": "doProvideMemoryAccesses(uint256,bytes32,uint256[],uint256[])", +"3b6ea083": "startTimeIco()", +"3b6ed0a7": "processSteps(uint256,uint256)", +"3b6ed992": "STBToken()", +"3b6eeb23": "HighestBidChanged(address,uint256)", +"3b704588": "BCT()", +"3b709e8d": "WeiN()", +"3b70b171": "saveBlock(string)", +"3b70cf44": "firstRoundCosmosEnd()", +"3b7104f2": "checkStatus()", +"3b7169fb": "setopVaultAddr(address)", +"3b72a1b6": "approveDeliverable(bytes32)", +"3b7404bc": "createDepositProxy(address)", +"3b746963": "minLimitPrivateSale()", +"3b750f86": "DDJDTCoin()", +"3b751f7f": "claimThroneRP(string)", +"3b7616ff": "fwdToResolver(bytes)", +"3b76594d": "depositFunds(uint256)", +"3b768433": "getByReferenceCode(bytes32)", +"3b77227c": "_addIndex(address)", +"3b7773cd": "WanchainContribution(address,uint256)", +"3b784e9e": "SafeOwnable()", +"3b789750": "transferAllFunds(address)", +"3b7a3b7f": "thisVotersName()", +"3b7a8ff5": "addInvestors(address[],uint256[],bool[])", +"3b7b9d83": "marketToken2021()", +"3b7bfda0": "boolStorage(bytes32)", +"3b7cbfcf": "depositPercents()", +"3b7d0946": "removePool(address)", +"3b7da659": "changeLocalCryptoContract(address,string)", +"3b7dc55e": "onMintCalled()", +"3b7e9825": "appendArray(uint8[],uint8)", +"3b7f7cfa": "getValidity()", +"3b7f9649": "localsTruth(address,uint256)", +"3b7ff404": "getVotersPartyVote()", +"3b809273": "unlockedReserveAndTeamFunds()", +"3b80938e": "setDeposit(address)", +"3b80fac0": "updateVisa(address,uint256,uint256,bytes32,uint256,uint256,uint256,uint256)", +"3b80fc5f": "elc()", +"3b81a5a4": "assertEq23(bytes23,bytes23,bytes32)", +"3b81b785": "showVotes(address)", +"3b81caf7": "TransferAdminPending(address)", +"3b825302": "deleteTokenGrant(address)", +"3b82fe0e": "sellItem(string,string,uint256,string)", +"3b84333e": "FaucetToken()", +"3b84bec7": "setTIME_TO_MAKE_TOMATOES(uint256)", +"3b84edbd": "setRNG(address)", +"3b85746f": "existsCountsByName(bytes32)", +"3b86758a": "window3TokenCreationCap()", +"3b8678de": "setDefenceBoss(uint256)", +"3b871b4a": "awards(uint256,uint256)", +"3b874521": "withdrow()", +"3b87ec2d": "ecoSystemFund()", +"3b882832": "updateIsReverted(bool)", +"3b8908f2": "investmentsCount()", +"3b8918df": "submitMilestone(bytes32)", +"3b89332e": "verify_signature(uint256[4],bytes32,uint256[2])", +"3b893c2d": "icoTotalBalance()", +"3b895f28": "stageTwo()", +"3b89a83a": "adminRefund()", +"3b89be73": "registerUser(address,string,uint256,uint256)", +"3b8a3d5e": "setPI_edit_4(string)", +"3b8b44d0": "getUnissuedBP(uint256,uint256,uint256)", +"3b8b4a61": "createRefund()", +"3b8dbf6d": "operatorSendByTranche(bytes32,address,address,uint256,bytes,bytes)", +"3b8e2a26": "weiCapReached()", +"3b8e603c": "outputb(bytes32)", +"3b8e6f2e": "balanceAt(address,uint256)", +"3b8ea9e7": "getValuePayment(address,uint256)", +"3b8ecdf9": "right3(uint256)", +"3b8eee6d": "checkDistance(uint256,uint256)", +"3b8f0ef4": "counterRequest(uint256)", +"3b8ff7be": "getBB0()", +"3b8ffa5e": "addVoters(address[],bytes32[])", +"3b90176f": "getTotalNormalTokensByAddress(address)", +"3b903521": "setModel(address,uint256)", +"3b9056bf": "userWithdraw(uint256)", +"3b9178f7": "transferEntireStake(address)", +"3b91c253": "getSkillNames(uint256,uint256)", +"3b91ceef": "setMax(uint256,uint256)", +"3b91ee26": "agency()", +"3b92015e": "setTokenDiscountThreshold(uint256)", +"3b92d384": "barrierStrength()", +"3b92f3df": "payment(address)", +"3b930294": "voteTokenBalance(address)", +"3b932584": "buyTokens(address,string,string)", +"3b9341f4": "setTransactionFeeRefundSettings(bool,uint256,uint256)", +"3b936961": "HuatUSD03()", +"3b942742": "totalCoinSupply()", +"3b947d2b": "removeStablecoin(address)", +"3b949785": "raiseDollarsWithdrawalCancelled(address,uint160,int160)", +"3b94b012": "restartMinting(string)", +"3b957b67": "getSumAmountOfDisputedStepsProDoctor()", +"3b95f23e": "deactivatePackage(uint256)", +"3b968963": "shortAirdropTime()", +"3b971f9f": "_tokenPrice()", +"3b97e856": "tokenDecimals()", +"3b9855ea": "experienceToLevel(uint256)", +"3b9901cc": "getChannelsByRanks(address,uint256,uint256)", +"3b9927df": "HVZSupply()", +"3b996f40": "quarter(uint32,uint32,uint32,uint32)", +"3b99915d": "getMarketWallet()", +"3b9aa6f8": "getRare(string)", +"3b9aaae4": "avt()", +"3b9bbb2f": "withdrawTotalBalanceCommissionWei(address)", +"3b9bd54d": "ClientsHandler()", +"3b9c0fdc": "deleteRound(uint256)", +"3b9c67e1": "Press(uint256,uint256)", +"3b9c7ac2": "claimLockedTokens()", +"3b9ca2d0": "migrate(address,uint256,address)", +"3b9e1497": "updateVirus(address)", +"3b9e9c91": "testSettle()", +"3b9ed710": "caculateFill(uint256,uint256,uint256,uint256)", +"3b9f7d6b": "m_unclaimedHolderIdx()", +"3b9f87a5": "setNeedToReserve(uint256)", +"3b9ff58e": "Academicon(uint256,uint256)", +"3ba04463": "p_setInvestorsPercent(uint256,uint256)", +"3ba0b9a9": "exchangeRate()", +"3ba1356c": "earnedOf(address)", +"3ba15036": "getWei()", +"3ba2a67e": "lockFund(uint256)", +"3ba2aaf2": "setOwnerToken(address)", +"3ba2cfc1": "createBitcoinAddressPrefixTask(bytes,uint256,uint256,int256,uint256,int256)", +"3ba308dd": "preSaleTokenBalances()", +"3ba72b88": "checkAvailability(address,address)", +"3ba7ecc0": "BuzFinancialStrategy()", +"3ba86465": "oraclizeQueryCost()", +"3ba87e3e": "setMultiRequestFirstRequestId(uint256,uint256)", +"3ba8b0a8": "setPendingSignatureStatus(address,uint256)", +"3ba8c9a7": "mintingFinish()", +"3ba8f108": "SetOwner(string,address)", +"3ba93114": "getEtherMonsterInfo(uint256)", +"3baa8170": "setName(string,uint256)", +"3baad248": "delWhitelist(address,address[])", +"3bab3088": "DOCTokenSale()", +"3baba4d7": "milestonesLength()", +"3bac2837": "SSAToken()", +"3bacf5ed": "changeTokenHolder(address,address)", +"3badca25": "batchTransfers(address[],uint256[])", +"3bae15df": "deleteOwner()", +"3bae795e": "ActionAuction(address)", +"3baf35fb": "nPayments()", +"3baf4e1e": "newPayment(uint256,uint256)", +"3baf6e3f": "setReferral(address,address,uint256)", +"3baf77aa": "increaseClaimsBalance(address,uint256)", +"3bafc5c0": "removeBankroll(uint256)", +"3bb0cc55": "tokensReceived()", +"3bb168a1": "isPresaleFull(uint256)", +"3bb197cf": "icoPhaseAmount3()", +"3bb1a882": "TradeListing(address,address,address,uint256,uint256,uint256)", +"3bb28957": "p2_start()", +"3bb2dead": "resolveAddressLight(address)", +"3bb33d56": "checkAtkPlayerQuest(address)", +"3bb3a24d": "getTokenURI(uint256)", +"3bb4218a": "requireContractExists(uint256,bool)", +"3bb4497c": "getAllProviders()", +"3bb54b4c": "LOG_ContractStopped()", +"3bb5a02c": "unsetAllowedMultivest(address)", +"3bb5d604": "ExchangeWhitelist(address,address)", +"3bb66a7b": "getETHBalance(address)", +"3bb735e7": "Arrholders(uint256)", +"3bb81b60": "total_bet_purchased()", +"3bb8a87f": "getConsideredTokens()", +"3bb8bd85": "TICDist(uint256)", +"3bb8da29": "GetWorldData()", +"3bb91c77": "calculatePayout(uint256)", +"3bb9f133": "listSimpleService(uint32,string,uint256,address,address)", +"3bba16da": "ifClaimedNow(address)", +"3bba21dc": "swapTokenToEther(address,uint256,uint256)", +"3bba340c": "dateMainEnd()", +"3bba72c3": "TzTToken()", +"3bbac579": "isBot(address)", +"3bbacb55": "STVCOIN(uint256,string,string)", +"3bbb0025": "ownerOfRobot(uint256)", +"3bbb11a1": "getImageMetadata(uint256)", +"3bbb44ca": "eth_is_seeded()", +"3bbbce82": "computeCurrentPrice(uint32)", +"3bbca7b4": "ImpToken(string,string,uint256,uint256)", +"3bbe0b5c": "OKFCrowdsale()", +"3bbed4a0": "setRecipient(address)", +"3bbf41d9": "GameState()", +"3bc0461a": "devFee(uint256)", +"3bc058c7": "setBS(bytes32,string)", +"3bc17b28": "round3TokensRemaning()", +"3bc17fc3": "CreateNewPool(address,address,uint256,uint256,uint256,bool,address[],uint256,uint256)", +"3bc19bba": "webGiftSentAmount()", +"3bc1e0f1": "depositCoin(bytes32,uint256)", +"3bc261bb": "balanceTokenContract()", +"3bc273b0": "changeWelcome(string)", +"3bc2859e": "blockOffset(uint256)", +"3bc2b866": "getBla()", +"3bc2bc42": "AddSubscriber(address,string,string)", +"3bc325ee": "withdrawTokenToInvestor()", +"3bc3c7f9": "ERC20Token(string,string,uint256,uint256)", +"3bc45598": "update_SRNT_price(uint256)", +"3bc47fbe": "campaignEnded()", +"3bc4be52": "ownersTokenIndex(address,uint256)", +"3bc518ea": "getTokenBySelf()", +"3bc578fe": "getClosingTimeByStage(uint256)", +"3bc58532": "hodler()", +"3bc5a0b7": "updateBytesSetting(uint256,bytes32,address,string,string)", +"3bc5b73e": "_saleSupply()", +"3bc5de30": "getData()", +"3bc5f48a": "addBook(string)", +"3bc6db30": "settleAndClose()", +"3bc70184": "getPurchase(uint256,uint256)", +"3bc756d0": "NACToken(uint256,string,uint8,string)", +"3bc764f7": "depositCPT(address,uint256,bytes32)", +"3bc7ebac": "pinnedCode()", +"3bc834fc": "usersAddress(address)", +"3bc867f5": "getLockedEth()", +"3bc91e28": "setCurrentRound(uint256)", +"3bc983d3": "decreaseAssuranvePayments(address,uint256)", +"3bca915f": "NickSterBate()", +"3bcb1edb": "_payoutDividends(address,address,uint256)", +"3bcbb6d8": "Zarina()", +"3bccbbbc": "phase3TokenSold()", +"3bcd6624": "approveTokensAndCall(address,uint256,uint256,bytes)", +"3bcdbd22": "TweedentityClaimer()", +"3bce14c8": "numberOfRecentPlayers()", +"3bceb170": "raisedByAddress(address)", +"3bced141": "transcodeReceiptHash(string,uint256,bytes32,bytes32,bytes)", +"3bcf7d22": "newBribedCitizen(address)", +"3bcff3b0": "getProjectCount()", +"3bd04d69": "addWhiteList(bytes32)", +"3bd099d3": "ICO_RATE()", +"3bd0a6e5": "clickButton()", +"3bd0aa47": "modifyItem(string,address,uint256,address,uint128)", +"3bd0dd47": "getBackEther()", +"3bd0f412": "changeMin(uint256)", +"3bd10bf1": "_seekOdd(uint256,uint256)", +"3bd137e0": "makerDAOMedianizer()", +"3bd13b4a": "completeBounty(address)", +"3bd3593f": "_PurchaseInsurance()", +"3bd4aab7": "_thirdLevelEth()", +"3bd575fa": "acceptTrustSC(address)", +"3bd5aceb": "nProposals()", +"3bd5c209": "getContractCreationData()", +"3bd6695e": "testCoin()", +"3bd74880": "HARDCAP()", +"3bd756b6": "addPrivateFund(address,uint256)", +"3bd794d0": "solveDispute(address,bytes32,address,bool)", +"3bd797b0": "Tasks(address,address)", +"3bd7a51a": "IfContractRegist(string,string,string,string)", +"3bd87ebd": "hardCapTime()", +"3bd89deb": "DAX()", +"3bdc5173": "disallowNorthPoleMinting()", +"3bdcaab9": "getEndpointBroker(address,bytes32,int256)", +"3bdd504a": "rateOfZNT()", +"3bde045f": "numberOfRounds()", +"3bde3072": "onAssetReceived(uint256,address,address,bytes,address,bytes)", +"3bde5ba8": "targetReached()", +"3bdebbe1": "withdrawERC20Token(address)", +"3bdf157a": "setoraclegasprice(uint256)", +"3bdf2c0c": "setBaseValue(uint256,uint256)", +"3bdfafac": "randomJackpot()", +"3bdff827": "StaticArbiter(address[])", +"3be08dab": "setAddress(address,address,address)", +"3be1212b": "approveValidDurationData(uint256)", +"3be1c410": "dev2Wallet2Pct()", +"3be1e952": "freezeTo(address,uint256,uint64)", +"3be258bb": "getBuyPriceDecimals()", +"3be272aa": "createRoom()", +"3be2b60c": "joinwithreferral(address)", +"3be31d63": "updateVerificationStatuses(address[],bool)", +"3be32f7d": "deleteAccount()", +"3be3a3f5": "setCloseTime(uint256)", +"3be3bdd9": "offTimeLock()", +"3be46378": "getAffiliate(uint256)", +"3be4ee30": "getUserTokenLocalBalance(address,address)", +"3be52c2c": "setStatusBurn(bool,bool)", +"3be546a2": "raiseDollarsAdded(address,uint160,int160)", +"3be554d4": "setCostPerDay(uint256)", +"3be59443": "_setOracle(address)", +"3be64ed7": "addPeriod(uint256,uint256,uint256)", +"3be6ccd9": "freezeWithdraw(address,uint256,uint256,bool)", +"3be746b6": "lockState(string)", +"3be75aa3": "shareLimit()", +"3be86ba1": "setIcoAgent(address,bool)", +"3be8fd6a": "setContent(string)", +"3be924fa": "hasAuth(string)", +"3be92863": "burnLotById(bytes32)", +"3be93b98": "createCountry(string,string,string,uint256)", +"3be94219": "purchaseAttack()", +"3be9cfb7": "changeDropper(address)", +"3bea92a3": "addToTipperQueue(uint256,address)", +"3bead271": "sale3(address,uint256)", +"3beb0044": "hminus(uint256,uint256)", +"3beb26c4": "setTime(uint256)", +"3beb4db1": "setIcoStage(uint256)", +"3bed33ce": "withdrawEther(uint256)", +"3bed93f2": "MAX_COLLECTORS()", +"3bee0613": "updateExchangeStatus(bool)", +"3bee8726": "getMaxContenders()", +"3beea695": "corruptElite()", +"3beedf6d": "lotteryAddress()", +"3befedea": "getPersonParents(uint256,bool)", +"3bf03e9e": "HelloWorldContract()", +"3bf11a6c": "initToken(address,address,uint256,uint256)", +"3bf12c88": "Rate1()", +"3bf13ded": "changERC20(address)", +"3bf17f75": "initializeCompanyTokens(uint256)", +"3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", +"3bf2a861": "cancelOrder(bool,uint32)", +"3bf2b4cd": "approveDisband()", +"3bf2cade": "justPureFunction(int256)", +"3bf30f85": "execute(address[],bytes)", +"3bf329bf": "fraction(int216,int216)", +"3bf3d531": "miningThreePlat()", +"3bf47720": "totalTransfers()", +"3bf48672": "BattleToken(address)", +"3bf4ac5c": "day3Start()", +"3bf53a89": "unVoteAll()", +"3bf5b9c0": "getNumberByChoice(uint256)", +"3bf5f781": "Trendercoin()", +"3bf6de96": "max(uint256[])", +"3bf81b91": "testAddVoter()", +"3bf8f34a": "designatedReporterShowed()", +"3bf99b3f": "buyTokensByBTC(address,uint256)", +"3bf9b801": "_Hit()", +"3bfa0de9": "changeFundWallet2(address)", +"3bfa4449": "createFreeToken(string,address)", +"3bfb3246": "_detectInvestorGroup(uint256,address)", +"3bfb3c35": "fourthBonusEnds()", +"3bfca20f": "TokenToken(address)", +"3bfd7fd3": "incrementValue()", +"3bfdd7de": "transferManagment(address)", +"3bfecbf0": "setNeverdieSignerAddress(address)", +"3bfed5dc": "DolyToken2()", +"3bffb839": "Cryptolotto1Hour(address,address,address,address)", +"3bffd31e": "depositaPagamento()", +"3bfffc49": "getSumOfValues(uint256[])", +"3c0093a6": "MithrilToken()", +"3c01a9fa": "getEscapeRequests(uint32)", +"3c027d4f": "isTokenSelling(uint256)", +"3c0359a4": "certifications(uint256)", +"3c03d8be": "judgeAddress()", +"3c0471a2": "pregnantLinglongCats()", +"3c05187b": "execute(uint8,bytes32,bytes32,address,address,uint256,bytes,address,uint256)", +"3c067945": "fundBalance()", +"3c06ae68": "raiseBuyOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", +"3c070b60": "dataSourceCallbackFinals(uint256,uint8[4])", +"3c077a48": "getAll(uint256)", +"3c0870ae": "challenge(uint256,uint256,uint256,bool)", +"3c096005": "managerAmount()", +"3c09ee26": "Token(address[],uint256)", +"3c0ab650": "buyAllAmount(address,address,uint256,address,uint256)", +"3c0afb59": "changeStartDate(uint256,uint256)", +"3c0b0279": "KhawCoin(uint256,string,string)", +"3c0b1c41": "AFTBToken()", +"3c0b8577": "getUserApproval(address)", +"3c0b9db2": "PolyDistribution(uint256)", +"3c0ba651": "getDutchAuctionToBuyAddress()", +"3c0cd36b": "manualPurchaseTokens(address,uint256)", +"3c0ce567": "fetchConfirm(address,bytes32)", +"3c0cfb3d": "mintMigrationTokens(address,uint256)", +"3c0dabdb": "getMidgradeCarSupply(uint256)", +"3c0dde1c": "_addPools(address,address)", +"3c0de47c": "probabilities()", +"3c0e1cc2": "revealPhaseMinSecondsWaitForClearMajority()", +"3c0e5d74": "frozenCheck(address,address)", +"3c0e6adc": "reset_individual_shares(address)", +"3c0f60ad": "setSecondaryStorage(address)", +"3c0f92e3": "supportAddOn(uint16,uint256)", +"3c0fc6ea": "kill(address[])", +"3c0fcdd1": "depositEgereg(uint256)", +"3c1008bb": "internal_transferFrom(address,address,uint256)", +"3c107402": "LongPlace(address[2],uint256[7],uint8,bytes32[2],uint256)", +"3c10d7cd": "bonusInPhase2()", +"3c11845e": "ContractConstructor(string)", +"3c11f969": "sentSecond()", +"3c121ef5": "is_empty()", +"3c126795": "OMIVIA()", +"3c130d90": "tokenURI()", +"3c133818": "winningVote(bytes32)", +"3c13ec32": "team1LockEndTime()", +"3c13fc33": "transferBase(uint256)", +"3c1593ab": "endFirstWeek()", +"3c15d28f": "createQuestion(string,address,uint128,uint256)", +"3c1650ff": "getData_23()", +"3c16761f": "SUM()", +"3c168093": "addOrder(uint256,uint256,address,address,uint256)", +"3c173bf0": "ZarfundsToken()", +"3c17494d": "set(uint16[],string,string,string,bool)", +"3c17622a": "setFreelancerSkills(address,address,uint256[])", +"3c17b656": "investmentGateway()", +"3c1800cd": "isPresaleEnd()", +"3c1853e7": "etherBack()", +"3c18d318": "sweeperOf(address)", +"3c198047": "RollToken()", +"3c19df06": "stakeCreativeCommonsContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256)", +"3c19fc06": "Holder()", +"3c1a7c6f": "getCountApplyForCertification()", +"3c1a7e2d": "adminWithdrawBCEO(uint8)", +"3c1a7eda": "certificate(bytes32,bytes32)", +"3c1a88d7": "blockTokens(address,uint256)", +"3c1ab2a3": "URL()", +"3c1b81a5": "getInstructor()", +"3c1b87f9": "setSettings(uint256,uint64,uint64,uint256)", +"3c1c423c": "getInfoLibra(bytes32)", +"3c1c5931": "promoCodeToContractAddress(bytes16)", +"3c1cc14e": "stopTokenSwap()", +"3c1ce6a5": "mintDigm(uint256)", +"3c1d28a3": "redeemLevAndFee(address)", +"3c1d7078": "BookCreated(address)", +"3c1e60a6": "tokenParametersSet()", +"3c1f1cb7": "ethSaver()", +"3c20307b": "CTWtoken()", +"3c203d44": "PreCrowdAllocation()", +"3c2040c1": "setInviteAdmin(address)", +"3c20485e": "limitIcoTokens()", +"3c205b05": "currAdminEpoch()", +"3c206900": "disableEmergencyBlock()", +"3c2087c9": "Withdrawal(address,uint16,uint256)", +"3c20d1a5": "getStageCap(uint8)", +"3c20ee6e": "_end()", +"3c21001d": "getMySentTradeOfferId()", +"3c21acc6": "extraMintArrayPending(address[])", +"3c21b968": "loadBalances(uint256[])", +"3c21db0a": "theGames(uint256)", +"3c21f0a1": "GHIToken(address)", +"3c21fa2e": "setELHeroTokenAddr(address)", +"3c226cd9": "ChangeDeadLine(uint256,bool,uint256)", +"3c22c935": "processMilestoneFinished()", +"3c232bb6": "set_traded_token_as_seeded()", +"3c237167": "getProductivityCitizens(uint256)", +"3c240a63": "updateFourthExhangeRate(uint256)", +"3c24550c": "isRefundTime()", +"3c263cf4": "savingPoints()", +"3c264820": "getWinningPayoutNumerator(uint256)", +"3c26777b": "StartedGame(address,uint256,uint256,uint256)", +"3c2698d5": "YUNLAI()", +"3c269b96": "setExchange(bool)", +"3c26cfe3": "drawLottery(string)", +"3c275e24": "getInfo(address,uint256,uint256)", +"3c276d86": "saleStartTimestamp()", +"3c278bd5": "lift(address)", +"3c279f1f": "submitWithdrawTokenTransaction(uint256,address,uint256)", +"3c28308a": "rndNo()", +"3c287a3f": "BitcoinDiamondToken()", +"3c28b9c0": "expirationInSeconds()", +"3c28ee5b": "addDeactivatedList(address)", +"3c2aba9f": "manageApprovedTransferModule(address,bool)", +"3c2b0725": "delegateContract()", +"3c2b2508": "PREMINER_ADDED(address,address,uint256)", +"3c2c21a0": "scheduleCall(address,uint256,bytes4)", +"3c2c4b5e": "MASTER_WALLET()", +"3c2cf368": "BIGTTokenDeposit()", +"3c2d55e6": "GetSubscribers()", +"3c2d6447": "setIcoPercent(uint256)", +"3c2d70e9": "start(address,uint256)", +"3c2dba23": "stakedForPollID(address,bytes32)", +"3c2e2624": "transferManyDirect(address[],uint256)", +"3c2e2a75": "depositTokenForUser(address,uint256,address)", +"3c2e671e": "founder3Wallet()", +"3c2e6b32": "AquaSale(address,uint256,uint256,uint256,uint256,address,address,address,address,address,address,uint256)", +"3c2e7d54": "priv_inMainChain__(int256,int256)", +"3c2efb22": "isContributionRegistered(bytes32)", +"3c2f24af": "loopFor(uint256,uint256,uint256)", +"3c2f7df5": "incGen0Limit()", +"3c306250": "mybalance(address)", +"3c311f3c": "previous(uint256)", +"3c314a91": "playerGetPendingTxByAddress(address)", +"3c31762c": "setMinPurchaseValue(uint256)", +"3c31fa62": "setFeeRates(uint16,uint16,uint16)", +"3c324c2e": "totalCollectableToken()", +"3c32673f": "BTTSTokenUpdated(address,address)", +"3c329dc4": "delModule(string)", +"3c32d8ef": "getOffChainIdentity(address,address)", +"3c3313a8": "registerLoan(address)", +"3c335b0e": "getRetractable(bytes20)", +"3c33808d": "preallocateSecondStage(address,uint256,uint256)", +"3c33863c": "computeGroupPhasePoints(uint8,uint8)", +"3c33d473": "setLargeCapDelay(uint256)", +"3c345335": "addSignature(uint256)", +"3c347cbd": "_0xTestToken()", +"3c358483": "setData_10(string)", +"3c35a858": "processProcessableAllocations()", +"3c35c88a": "sendFundHome2()", +"3c37a88b": "stage4_start()", +"3c37b640": "commitHash(bytes32)", +"3c3861b6": "getRace(uint32)", +"3c389cc4": "erc20Impl()", +"3c391c95": "preSaleBonus2Time()", +"3c3a8c39": "UpcToken()", +"3c3ad016": "forceUpgrade(address[])", +"3c3b4b31": "getHouseTraits(uint256)", +"3c3b7995": "privateLimit()", +"3c3bdb7a": "changeExchange(address)", +"3c3be494": "dtCreateCityData(address,uint256,uint256)", +"3c3c22b3": "oldest()", +"3c3c88b1": "initializeOnTransfer()", +"3c3c9c23": "totalEth()", +"3c3ccc44": "startNextRound()", +"3c3ce17d": "insure()", +"3c3d1385": "tinhtong(uint256,uint256)", +"3c3d3af6": "amountInvested(address)", +"3c3d9ada": "_bctc(uint256,uint256,uint256,uint256,address)", +"3c3deb54": "contractCreatedTimestamp()", +"3c3e1662": "ctf_challenge_add_authorized_sender(address)", +"3c3e2447": "MINIMUM_BUY_AMOUNT()", +"3c3e6af4": "QTX()", +"3c3efdc9": "calculateEarnings(uint256)", +"3c3f4c63": "maxSpend()", +"3c3ff394": "IRECToken()", +"3c40066d": "investByLegalTender(address,uint256,uint256)", +"3c402bd1": "AMTBToken()", +"3c41c816": "EthlanceUser(address)", +"3c4293d8": "refund_my_ether()", +"3c42f95a": "setMetadata(string,uint256,bytes)", +"3c43b91d": "setStage2Ends(uint256)", +"3c444637": "setSaleBonus(uint256)", +"3c454d7f": "getper()", +"3c45b373": "addVoting(address,uint256)", +"3c46f604": "testDeleteCase()", +"3c473336": "isEndedTrack(bytes32)", +"3c4857a7": "_approve(uint256,address,address)", +"3c489238": "HappyFutureToken()", +"3c48d7de": "shapeshiftTransfer(uint256,string,string)", +"3c490a70": "getGlobal(uint256)", +"3c4961ff": "_processAirdrop(address,uint256)", +"3c49dde4": "registerDonation(address,uint256)", +"3c49ec88": "getMyKebabs()", +"3c49ff0c": "StarCoinPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"3c4a2989": "POPCHAINCASH()", +"3c4a4b1e": "createTokenTimelock(address,uint256)", +"3c4b07de": "extUnlockBot(uint256,uint16)", +"3c4b303d": "token_decimals()", +"3c4b40b8": "fundingWallet()", +"3c4b5e2b": "setInviteeAccumulator(address,uint256)", +"3c4c51c9": "getClue()", +"3c4dbb17": "PriceWeekOne()", +"3c4e7d9f": "setESCBDevMultisig(address)", +"3c4ec769": "VCT()", +"3c4f3c12": "issueTokensSale(address,uint256)", +"3c4f5a66": "getActivePlayers()", +"3c4f5be3": "registrantOfToken(uint256)", +"3c50afe1": "_icoSupply()", +"3c50edbd": "getSidesById(uint256,uint256)", +"3c5192b7": "EscrowEscalation(uint256,uint256)", +"3c520944": "getPromoCodeForFish(bytes16)", +"3c526ef1": "_divideDecimalRound(uint256,uint256,uint256)", +"3c530ace": "registerProducer(address)", +"3c536938": "executeTransaction(uint256,uint256)", +"3c5395b2": "revokeAdmin(address,address)", +"3c53cb96": "lastBlock_v0Hash_uint256()", +"3c53dabe": "BeggarBetting()", +"3c540687": "txCount()", +"3c54ca8c": "trade(address,address)", +"3c54caa5": "reclaimTokens()", +"3c5524d8": "listContractByModuleName(string,string)", +"3c552556": "verify_signature(bytes32,uint8,bytes32,bytes32,address,address)", +"3c55563e": "cards_metal_total()", +"3c560064": "mintPartner(address,uint256)", +"3c566f0f": "shopStoreAddress(uint256)", +"3c56d236": "HashLotto()", +"3c56e2ae": "register(address,uint8,bytes32,bytes32)", +"3c56eae3": "setForceReadyTime(uint256)", +"3c5746dd": "recipientExtraMIT(address)", +"3c580e92": "setLocalGame(uint16,address)", +"3c584d86": "convertWT(uint256)", +"3c58795d": "hasFetchedProfit(address)", +"3c58d378": "lockChanges()", +"3c58ef44": "getWishIdxesAt(address)", +"3c594844": "leftToday()", +"3c5972ff": "multiSetWhiteList(uint256[])", +"3c59c17a": "AgentWallet()", +"3c5a12cb": "getVal(string)", +"3c5ad147": "Debug(string,uint256)", +"3c5b7d3f": "buyTkn(uint256)", +"3c5bd949": "mine_jade()", +"3c5bdcc4": "FCOIN0939Token(uint256,string,string,uint256)", +"3c5c6331": "addAddressToUniqueMap(address)", +"3c5d1812": "totalPhases()", +"3c5e270f": "teamSupplyAddress()", +"3c5e28d6": "setClientIdentRejectList(address[],uint8)", +"3c5e417e": "_mintApproveClear(address,address)", +"3c5e57e4": "_getRarity(uint8)", +"3c5e94dd": "bulkRegisterPoA(bytes32,bytes32,bytes32,uint256)", +"3c5f10a3": "winning_ticket()", +"3c5f2bf2": "getFullRace(uint256)", +"3c5fc608": "preDGZtoDGZExchangeRate()", +"3c612c11": "authorize(address,address,address,uint256)", +"3c617685": "SocialMediaPay()", +"3c61d003": "advertisingDeposit(uint256)", +"3c6251bd": "test_oneValidEqUint1()", +"3c627c9b": "releaseAndDistribute()", +"3c630356": "AirCrash()", +"3c63d000": "setBurnRequestStringMap(uint256,string,string)", +"3c6403b4": "GetAccountIsNotFrozenCount()", +"3c647fbd": "angelMaxAmount()", +"3c648ddd": "voteSvp01(bool)", +"3c64f9aa": "ClusterToken()", +"3c65c506": "adjust_difficulty()", +"3c6677d6": "promoBun(address,address)", +"3c667b13": "rentalsContract()", +"3c671e53": "collectPayout(address)", +"3c673470": "createGroup(address,bytes32,address[])", +"3c673c19": "deleteTopic(uint256)", +"3c67b6b7": "getClaimLeft(address)", +"3c67c51e": "testLogs()", +"3c67dad5": "revertLuckyCoin(address)", +"3c6806b8": "getDiary(uint256)", +"3c681da0": "getCandy(string)", +"3c6867c3": "CallBack(string,bytes32)", +"3c68eb81": "transferFunds()", +"3c695d4e": "authorityAddress()", +"3c69a5e6": "mintPresaleBonuses()", +"3c6a2929": "setArrIntF2ArrUintF3ArrBoolF1(int256[],uint256[],bool[])", +"3c6a71f7": "exchangeRatePreIco()", +"3c6aa9f1": "decimalsValue()", +"3c6b97c9": "TokenContribution()", +"3c6b9d8c": "captains()", +"3c6bb436": "val()", +"3c6bc24b": "getBrickDetail(uint256)", +"3c6bf582": "ElementBought(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3c6c67e2": "etherAllowance()", +"3c6d2610": "TalentToken(address)", +"3c6d2e19": "contributionsETH(address)", +"3c6d736d": "ZZZCoinERC20Token()", +"3c6d7b47": "setDebugNumber(uint256)", +"3c6dfba1": "buy(uint8,bytes6,uint32,uint32)", +"3c6e03d7": "thewhalegame()", +"3c6e5927": "getMonsterCurrentStats(uint64)", +"3c6ea2a5": "HooyToken()", +"3c6eab08": "KICKICOCrowdsale(address,address,address,address,address,address,address)", +"3c6ee392": "createTokens(uint256,uint256)", +"3c6f2cc4": "sendICOTokens(address,uint256)", +"3c704089": "DigitalCash()", +"3c7045fe": "takeEtherBack()", +"3c7066d1": "feeCMT(uint256)", +"3c7097a3": "setMaxCharId(uint32)", +"3c70bd42": "sell_(uint256)", +"3c716e08": "updateAuthority(address)", +"3c71b186": "ElementeumToken(uint256,address[],address[])", +"3c71b7b6": "validDelegateSignature(address,string,uint8,bytes32,bytes32,bytes32)", +"3c71faf2": "BMToken()", +"3c72751e": "lerp(uint256,uint256,uint256,uint256,uint256)", +"3c72a83e": "getKyberNetworkAddress()", +"3c72e9bf": "IMDEXadminWithdraw(address,uint256,address,uint256)", +"3c72f070": "initialTokensBalance()", +"3c73db77": "RecycleToken()", +"3c745371": "finalAddress()", +"3c745ad5": "nextProfile()", +"3c74db0f": "expirations(address)", +"3c76aa19": "CWCreturnQueryData()", +"3c771309": "setSiringRate(uint256,uint256)", +"3c774dbb": "buyChickenParkCoin(address)", +"3c775b08": "airdropLimit()", +"3c77b95c": "testExpUnroll16(int256,int256,uint256)", +"3c77e474": "_updateKeyPrice(uint256)", +"3c7818a1": "startRoundD()", +"3c78929e": "lockUntil()", +"3c78fe07": "getReceiver(uint32)", +"3c796430": "getOneTimePayment()", +"3c799547": "amountAvailable()", +"3c7a337a": "InDeepToken()", +"3c7a3aff": "commit()", +"3c7b3d90": "rewardAirdrop(address,uint256)", +"3c7b682d": "PunkOffered(uint256,uint256,address)", +"3c7b6869": "finishPresale(uint256)", +"3c7c2563": "createtoken(string,string,string,string)", +"3c7cc806": "validateOrderAuthorization_(bytes32,address,uint8,bytes32,bytes32)", +"3c7d6f30": "publicStartRegularPhase()", +"3c7e03c1": "getRelayingKing()", +"3c7e31f0": "addCutie(uint32,uint128,uint128,uint128,uint128)", +"3c7fdc70": "fibonacciNotify(uint256)", +"3c807878": "stageOne()", +"3c811ee0": "putSellOrder(address,uint256,uint256,uint256)", +"3c8161c5": "KVC(uint256,string,uint8,string)", +"3c816217": "killBoard(uint16)", +"3c81df21": "getMultisig()", +"3c8259b4": "SACoin()", +"3c837b7d": "changeSettings_only_Dev(uint256,uint256,uint8,uint8,uint256)", +"3c8394ac": "ICORaised()", +"3c83f7aa": "rateForPhase2()", +"3c842a26": "_Test_Oraclize()", +"3c847e52": "withdrawVested(address)", +"3c84f868": "set(int256,address,uint256)", +"3c8515b1": "_createCrypton(string,address,uint256,uint256,bool,uint8)", +"3c86063c": "insertInfo(string,uint256,uint256)", +"3c875a35": "buyFuel(uint256,uint256,uint256,uint256,address)", +"3c8766c6": "sendProfitsReward(address)", +"3c876c6f": "newIdShipProduct()", +"3c87b8ef": "get_player_state()", +"3c889e6f": "getBid(uint256)", +"3c889fe1": "masterCalculator(uint256)", +"3c890e4c": "getVoteStake(uint256,uint256,uint256,bool)", +"3c893718": "transferCity(address,address,uint256)", +"3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", +"3c89f9d4": "accept(uint256,address[],uint256[])", +"3c8a072e": "temporalUnit()", +"3c8a321c": "setPaymentGatewayList(address)", +"3c8ac88e": "createIdentityWithCall(address,address,address,bytes)", +"3c8b0c55": "set_arbits_min_contribution(address,uint256)", +"3c8b6597": "addPrivateSaleTokensMulti(address[],uint256[])", +"3c8bb3e6": "wmultiply(uint256,uint256)", +"3c8bccd9": "getCommission(uint256)", +"3c8c681a": "RoundCSold()", +"3c8c6a1e": "sendToken(address,address,address,uint256)", +"3c8ca83d": "gameBeginTime()", +"3c8cd434": "getCabCoinsAmount()", +"3c8d284b": "receiveBtcPrice(uint256)", +"3c8da588": "priceInWei()", +"3c8e3b52": "getTotalPercent()", +"3c8e66fb": "calculateTotalDirectDebitAmount(uint256,uint256,uint256)", +"3c8eac87": "getTransactionState(uint256)", +"3c8f202e": "Dashicoin(uint256,string,uint8,string)", +"3c8f3278": "hmax(uint128,uint128)", +"3c8f96f1": "bonusTokens(uint256)", +"3c9046c9": "yearTwoClaimed()", +"3c9070b5": "ConsultaProva(address)", +"3c90861c": "Enigma()", +"3c90ee6a": "DNARtoGoldXchgRate()", +"3c918bae": "wallet3()", +"3c920d0d": "liquidityPoolTotal()", +"3c925f16": "getAccountHolder()", +"3c9266e0": "sendSalary(address)", +"3c9340ae": "orderForDays(bool[])", +"3c936e97": "lockBonusTokens(address,uint256,bytes1)", +"3c93d8be": "uint2hexstr(uint256)", +"3c941423": "getDesignatedCaller(bytes32,uint256)", +"3c959aca": "CheckTickets()", +"3c960be9": "transferFromSenderPaysFee(address,address,uint256,bytes)", +"3c961202": "getHighscore()", +"3c96a7a8": "withdrawOwnerFee()", +"3c96d048": "setnow(uint256)", +"3c9719a7": "getReleasableFunds(address)", +"3c984f4a": "sellTokensForEur(string,address,uint256,uint256)", +"3c993482": "_payfee()", +"3c9a4baa": "requestOutput(bytes)", +"3c9a5d59": "getAuditAuditor(uint256)", +"3c9ad41b": "tokenIssuedToday()", +"3c9af31c": "getSponsor(uint32,int256)", +"3c9c4001": "whitehat()", +"3c9c97f0": "setBlocksPerRound(uint64)", +"3c9d377d": "f5()", +"3c9d93b8": "removeAllowedAddress(address)", +"3c9ee04c": "previousstageplayer2()", +"3c9f861d": "totalBurn()", +"3c9ff012": "timeRangeCreateGen0()", +"3ca1595a": "addNewRaz(uint256,uint256,uint256,uint256,string)", +"3ca19952": "getBookingCount(address)", +"3ca22916": "dollarPerEtherRatio()", +"3ca520f5": "LaunchPartnersAmount()", +"3ca5c69c": "AllMake()", +"3ca5c8b8": "createFilmToken(string,uint256)", +"3ca6268e": "log(string,int256)", +"3ca63675": "getNumberOfVotes(uint128)", +"3ca65e77": "JMJToken()", +"3ca6a437": "assignedGameContract()", +"3ca6b228": "getEmployee(address,address)", +"3ca6c07a": "setTokenAdd(address)", +"3ca6d100": "create(string,string,uint256)", +"3ca6d5a9": "initialBuyPrice()", +"3ca7aad7": "xorReduce(uint8[],uint256)", +"3ca805ba": "pwrFloat(uint256,uint256,uint256,uint256)", +"3ca84001": "transferFromContractTo(address,uint256)", +"3ca88a2f": "canBuy(uint256)", +"3ca8b002": "isDeploymentAdmin(address)", +"3ca95c89": "getCompte_26()", +"3ca967f3": "getCurrentExchangeRate()", +"3ca96e0e": "teamBonusAllocatedTokens()", +"3cab648a": "getModuleAddressByName(string)", +"3cac14c8": "returnArray()", +"3cac2387": "trustedTokens(address)", +"3cac38e4": "advanceStep()", +"3cacf895": "doPayments()", +"3cad71cf": "RetStatic(uint128)", +"3cad7c4e": "setLockQtyToAllowTrading(uint256)", +"3cae09ac": "silencePeriod()", +"3caebce4": "BRFToken()", +"3caed876": "submitTransaction()", +"3cb00fd2": "get_presale_iconiq_arbits_per_ether(address)", +"3cb025e2": "SimpleSafeToken()", +"3cb0b51b": "Redeem200AFTK16SeptSandbox()", +"3cb21103": "isAllowedFactProvider(address,address)", +"3cb260b2": "set_dimensions(uint256,uint256)", +"3cb27169": "receiverVestings(address,address)", +"3cb32f77": "currentHolders()", +"3cb3d027": "getTokenBankrollAddressFromTier(uint8)", +"3cb3ea68": "LAMBO_TYPE()", +"3cb40e16": "withdrawToOwner()", +"3cb4986a": "ZeusToken()", +"3cb4ff3c": "getActiveCards()", +"3cb579c1": "setValueParam(uint256)", +"3cb5bc74": "setMintLimits(uint256,uint256,uint256)", +"3cb5d100": "contributors(uint256)", +"3cb5d170": "sendTokenReleasedToBalanceInternal(address,address,address)", +"3cb5d1df": "TicTacPotato()", +"3cb6465e": "numOfWinner()", +"3cb6e20c": "LeadcoinSmartToken()", +"3cb802b9": "unclaimedDividends()", +"3cb83751": "getCofounderCount()", +"3cb8cfc8": "acceptTokens(address,uint256)", +"3cb8cfcd": "totalEthInWeiForPreIco()", +"3cb9032e": "getInvoicesCount(address,uint256)", +"3cb94596": "addressOf(bytes)", +"3cb960a6": "calcCORtoETC(uint256)", +"3cba3c77": "OperationalSplit(uint256)", +"3cba41bf": "store(bytes,address)", +"3cbcf9a4": "RatingToken(address,uint256)", +"3cbd4285": "addWinnigs(address[],uint256[])", +"3cbd6429": "playerId(address)", +"3cbdfcd9": "bountyTokensToAddress(address)", +"3cbe7309": "AgriChainDistribution()", +"3cbeb49a": "setColorBlue()", +"3cbec314": "FRUT()", +"3cbf41d2": "completeCrowdsale()", +"3cbfed74": "getBondBalance()", +"3cc0be9a": "setCompte_37(string)", +"3cc0fb45": "testFailRetractNotOwner()", +"3cc12603": "ABCToken(uint256)", +"3cc136e0": "destroyRoto(address,bytes32)", +"3cc1429c": "createEthAuction(uint256,address,uint256)", +"3cc15011": "_calculateExcessTokens(uint256,uint256)", +"3cc1635c": "deleteBooleanValue(bytes32)", +"3cc228fd": "minVotes()", +"3cc26b71": "admin_active_dividend(address)", +"3cc3c3b5": "terraformReserve()", +"3cc45596": "updateCar(uint256,bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", +"3cc4c6ce": "resumeGame()", +"3cc54aae": "updateGenGuVault(uint256,uint256)", +"3cc626b6": "PotoToken()", +"3cc6441d": "Smile()", +"3cc71c3f": "COMMUNITY_ALLOWANCE_LIST()", +"3cc7508f": "uncooperativeClose(address,uint8,uint256)", +"3cc75749": "volumeType2()", +"3cc7790a": "GSI()", +"3cc7fd84": "infoTokenSilverRatio()", +"3cc8626d": "set_sellPriceEth(uint256)", +"3cc86b80": "GetMoney(uint256,address)", +"3cc86b9a": "takeAllNotClaimedForRefundMoney()", +"3cc8daf7": "setNameOwner(bytes,address)", +"3cca2420": "contractData()", +"3cca779b": "gameOpen()", +"3ccad6fc": "getNamedAddresses()", +"3ccaf593": "createReport(string,string,string,string,uint8)", +"3ccb25a2": "setRequiredBlocksElapsedForVictory(uint256)", +"3ccb47cb": "roundPot()", +"3ccb4ae4": "initLocalNodeReputation(address)", +"3ccb6c31": "setWallet2(address)", +"3ccb7dc9": "CrowdFund(uint256,uint256)", +"3ccbad50": "initialize(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"3ccc5e2c": "icoSale()", +"3ccc8193": "lastWiningTicketNumber()", +"3cccfc1b": "promotionCommisionPercent()", +"3ccd1c7f": "getFactoryProfit(uint256,address)", +"3ccdbb28": "withdrawToken(address,uint256,address)", +"3ccf127e": "raisePreSale()", +"3ccf5861": "TOSInstitutionsIncentiveContract()", +"3ccf5c8f": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256,uint256)", +"3ccfd60b": "withdraw()", +"3cd02acd": "airdropTokens(bytes32,address[],uint256,uint256)", +"3cd109cb": "addAuthorizedOwners(address)", +"3cd17060": "getProposalHash(string)", +"3cd1b6b1": "isSponsorable(address,uint256)", +"3cd1e213": "GetRecordID(address,address)", +"3cd21d88": "ClosePeriodEvent(uint256,uint256,uint256,uint256)", +"3cd260e6": "doWorkAndPayEBT()", +"3cd2df82": "calculateTokensWithoutBonus(uint256)", +"3cd35429": "DQCoin()", +"3cd36358": "_getApproved(address,uint256)", +"3cd510ee": "getWinNumbers(string,uint256,uint256)", +"3cd5d5fc": "Sacar_BlackList(address)", +"3cd5f8ea": "addCourse(address)", +"3cd78a2b": "addToSpecialRatesMapping(address,address,uint256)", +"3cd8045e": "splitter()", +"3cd99b70": "setMaxDepartureLim(uint256)", +"3cd9a0fa": "stage_2_maxcap()", +"3cda0103": "supplyOf(string)", +"3cda0b45": "contribute(bytes8)", +"3cda6524": "addUnlockedAddress(address,address)", +"3cdb01ae": "atxChangeAddrCount()", +"3cdb3aa6": "activateRefund()", +"3cdb9762": "getTokenBalance(string,address)", +"3cdb982b": "getNumeroDeOuvidorias()", +"3cdbd414": "multivestBuy(bytes32,uint8,bytes32,bytes32)", +"3cdd37e1": "WatchedWallet(address,address)", +"3cdd9262": "peMaxPerPerson()", +"3cde5627": "SendEtherToDex(uint256)", +"3cdf60e2": "TurkCoin()", +"3cdf6783": "withdrawDeferred()", +"3ce0a093": "getHash(bytes8)", +"3ce0c432": "TokenPurchased(address,address,uint256,uint256,bytes)", +"3ce123dc": "highBidder()", +"3ce1314f": "setUnlockStart(uint256)", +"3ce17f24": "_createPlayer(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"3ce1f4e7": "testFailUpdateLatestRevisionNotUpdatable()", +"3ce24239": "AddSharedAccount(bytes32,address,bytes32,bytes32,bytes32)", +"3ce276f5": "setFreezeTransfer(bool)", +"3ce32c0a": "AWAToken()", +"3ce3480a": "closeStageOne()", +"3ce39a3d": "proposeTx(address,uint256)", +"3ce54ac3": "testFailCreateWithParentParentSameItemId()", +"3ce5facd": "HeyfanToken()", +"3ce6d89b": "approveTaxData(uint256)", +"3ce70aac": "getDocumentSequence(bytes16,bytes32)", +"3ce716f9": "WalletChanged(address)", +"3ce7da3d": "setTokenSymbolName(string)", +"3ce819e2": "captcha()", +"3ce948c8": "Token_3()", +"3ce97eb9": "GetManifestoById(uint256)", +"3ce9d22e": "setupFinal(uint256)", +"3cea6965": "gasMin()", +"3ceb7783": "rankNumbers_()", +"3cebb4d7": "setOpGas(uint256,uint256,uint256)", +"3cebb823": "changeController(address)", +"3cebff9c": "airdropPool()", +"3cec21c8": "register_(uint256)", +"3cec475a": "connectTest()", +"3cec9309": "segmentSize()", +"3cecd719": "cleanup()", +"3cece78b": "__getEthPrice(uint256)", +"3cecf2e6": "exchangeRateArray(uint256)", +"3ced516c": "descriptionHashes(bytes32)", +"3ced842b": "make_offer()", +"3cedd004": "setMinimumInitialBudgetForAudits(uint256)", +"3cee32e3": "set_allow_withdraw_amount(uint256)", +"3ceeafa7": "amountOfTokensPoolA()", +"3cef162a": "allocatetokensAndWL(address,uint256)", +"3cef51c5": "maxWeiTier3()", +"3cefc1e0": "hasTokens(address)", +"3ceffd41": "TokenPurchased(address,uint256,uint256)", +"3cf0659a": "right25(uint256)", +"3cf26a33": "transferAssetOwner(address)", +"3cf274a5": "bighype()", +"3cf2eb85": "dispossess(address,uint256)", +"3cf39ed3": "ini_supply()", +"3cf3a338": "WithdrawTithes()", +"3cf3d6d8": "getAllCellInfo()", +"3cf3ecd7": "StartGuess_tw(string,string)", +"3cf3f105": "checkInvarience()", +"3cf43e08": "revertTokens(address,address)", +"3cf43e2c": "btcId()", +"3cf46fee": "RoundClose(uint256,uint256,uint8)", +"3cf5040a": "getHash(bytes32)", +"3cf5161c": "Th_stage0(uint256)", +"3cf52ffb": "proposedTimestamp()", +"3cf572a7": "setNotice(string)", +"3cf5da75": "getTokenInvocations()", +"3cf679a5": "lastBlock_v19Hash_uint256()", +"3cf682b8": "CikkaCoin()", +"3cf6ed95": "stageForDate(uint256)", +"3cf7cbdb": "showTimeLockValue(address)", +"3cf7d47b": "IncreaseInvestedWeiAmount(uint256,uint256)", +"3cf885c4": "isBitSet(uint256,uint8)", +"3cf8acec": "allocateBid5(bytes32)", +"3cf9db41": "drawWinner(uint256,uint8)", +"3cfa92de": "BAToken(address,address,uint256,uint256)", +"3cfaa9ed": "mintedWallets()", +"3cfaaca0": "DMRToken()", +"3cfac38e": "validatePrediction(bytes32,uint256,uint8)", +"3cfb35aa": "ensSubdomainRegistrarBase()", +"3cfba0e3": "ethBalances(address)", +"3cfc47ea": "getPostPoster(uint256)", +"3cfc83f5": "addGame(string,address)", +"3cfd1f80": "VirginToken()", +"3cfd78f3": "onlyBouncerAddExtension(address)", +"3cfd86f1": "CashPokerProToken()", +"3cfe25cf": "cap_ACE()", +"3cfe6731": "claimfordividend()", +"3cff5b66": "getIsAuth(address)", +"3d00b8e3": "buyTokens(uint256,uint256,bytes)", +"3d0141f6": "whatProposal(bytes32)", +"3d01bdec": "CTO()", +"3d02c85b": "rejectTokens(address,uint256)", +"3d03582f": "collectBack()", +"3d0383c2": "getthismuchethforyourspud(uint256)", +"3d03886a": "setRobotAddr(address)", +"3d03a284": "getMyBat()", +"3d03ec29": "createCoin()", +"3d05d0e6": "MintFToken()", +"3d06242a": "setVIPFee(uint256)", +"3d062adf": "deleteMember(address,address)", +"3d0673d4": "getTotalToken()", +"3d080bd9": "dateRelease3()", +"3d089bf6": "GlobalBusinessSystem(uint256,uint256,uint256,uint256,address)", +"3d092b3d": "getMatch(uint256)", +"3d0977e1": "CROWD_WEEK2_PERIOD()", +"3d0a8dab": "endExclusive()", +"3d0ab170": "feePerUnitOfCoin(uint256)", +"3d0ab7e8": "PresaleContribution(address,uint256)", +"3d0acdaa": "getReservedPercentageUnit(address)", +"3d0c3836": "emergencyERC20Drain(uint256)", +"3d0c46d0": "getMessagesCount()", +"3d0c4924": "MAXIMUM_SUPPLY()", +"3d0c7eb6": "purchaseTicket(uint256,address)", +"3d0c9cc4": "PACK_SIZE()", +"3d0e6afc": "crownFreeze(address,uint256,uint256)", +"3d0ed048": "delBlacklist(address)", +"3d0ef823": "DepositReturn(address,uint256)", +"3d0f963e": "updateWhitelist(address)", +"3d11fa43": "delUnicornContract(address)", +"3d124c9d": "PointGameParticipate(address,uint256,uint256)", +"3d125f03": "buyTokens(address,address,address,uint256)", +"3d126a45": "devTokensPercent()", +"3d126e57": "SparkChainToken()", +"3d13341c": "_bytes32(string)", +"3d13aec8": "save(address,uint256,uint256,uint256,string,string,uint256)", +"3d140d21": "approve(address,bool)", +"3d14263a": "FailedSend(address,uint256)", +"3d147789": "UpgradeCommited(address)", +"3d160de9": "pricesAreStale()", +"3d160e0b": "UNLOCK_PHASES()", +"3d1657ff": "getIncreaseBalance(uint256,uint256)", +"3d1678f4": "redeemEnableTime()", +"3d16991a": "getStep(bytes16)", +"3d17a2d8": "merchantHistory()", +"3d182c42": "private_SetPause(bool)", +"3d1843c3": "callAndFail()", +"3d18678e": "setFees(uint256)", +"3d18b912": "getReward()", +"3d18bb7f": "HP()", +"3d18c615": "LastProposalID()", +"3d18e7b5": "amIH1()", +"3d1930ac": "mintBounties(address)", +"3d19481f": "balancePreSale5()", +"3d1a653f": "Ticket_Ganador(uint256,uint256)", +"3d1aa963": "chargeFee(address,address,uint256)", +"3d1aac95": "setWalletToClientAccount(bytes32,address,bytes32)", +"3d1b9d00": "TRCToken()", +"3d1bd1bf": "totalLockedHavvens_byAvailableHavvens_limitedSum()", +"3d1ced2b": "candyuser(address,address,uint256)", +"3d1cefc4": "SurveyToken(uint256)", +"3d1d2202": "getMinersOnSale()", +"3d1d4703": "newTribe(string,string)", +"3d1e215d": "redistributeTokens(address,address)", +"3d1e40a7": "changeTimeWithoutUpdate(uint256)", +"3d1ea04a": "getUnitCoinProductionIncreases(address,address,uint256)", +"3d201fcf": "MatchEnd(uint256,string)", +"3d20d9b0": "BONUS_ICO_ROUND2()", +"3d20e09e": "lpBidPrice()", +"3d20e3d7": "SetMemberLevel(address,address,uint8)", +"3d21aa42": "sendApproval(address,uint256,address)", +"3d226146": "createEvent(bytes32,bytes32[],bytes16[],uint256[])", +"3d2271fd": "setBytesRaw(string)", +"3d228ce8": "presaleTokenCreationRate()", +"3d22d571": "userBanning(address)", +"3d235d88": "KPRToken()", +"3d23af26": "newRegistryWithToken(uint256,string,uint8,string,uint256[],string)", +"3d24081c": "randomSkinAppearance(uint256)", +"3d249031": "Multicoin()", +"3d26851a": "_transferFrom_byProxy(address,address,address,uint256)", +"3d2796f5": "Forwarder(address)", +"3d289a76": "irbg(address,uint256)", +"3d28bab2": "SetGasBuy(uint256)", +"3d28ce75": "ChooChooCoin()", +"3d28e2ac": "totalDividendPayOuts()", +"3d2a9b9b": "getPartIndexes(uint256)", +"3d2c8d18": "lastEvidenceCheck()", +"3d2ce522": "setdaily(uint256)", +"3d2d812f": "MultiTransferValues(address[],uint256[])", +"3d2d8263": "tokenFund()", +"3d2dea63": "transferAny(address,address,uint256)", +"3d2e7538": "IPv6Token()", +"3d2f5bda": "startVoting(uint256)", +"3d2fbd0a": "usdEstimateInContract()", +"3d30276b": "Presale(uint256,address)", +"3d30dbe9": "updateBonusEligibity(address)", +"3d316134": "maxTokensToSale()", +"3d31e97b": "appendDebtLedgerValue(uint256)", +"3d32cb63": "updateReputationScore(bytes32,bytes32)", +"3d330c49": "findElevenPmUtc(uint256)", +"3d34a3e7": "setStage2()", +"3d34f921": "HexelErc20Token(string,string,uint256,address)", +"3d35d7ba": "getBuyRate()", +"3d36f7dd": "assertCorrectAllocations()", +"3d37542b": "launchOutcome()", +"3d37ef8c": "RESERVED_PARTNERS_LOCKED_SIDE()", +"3d380ff3": "releaseBatch()", +"3d389faf": "buyEnable()", +"3d38abd9": "MercadoMoeda()", +"3d3984bf": "ironProcessed(address)", +"3d39c260": "managers(uint256)", +"3d3b1c02": "SendEtherToBoard(uint256)", +"3d3b1fdf": "STRAToken()", +"3d3b2056": "getReadableTime(uint256)", +"3d3b26a6": "inflate(address,uint256)", +"3d3b4738": "GXVCReplay(uint256,address)", +"3d3bc43e": "getMessageRequestHashUsingProviderAddress(address,uint256,address)", +"3d3c3f2d": "snapshotUpdate(address,uint256,string)", +"3d3c5c9f": "trustedFillOrderTransfer(address,address,uint256)", +"3d3cba10": "decrementIncome(address,uint256)", +"3d3da831": "valueAfterAddingPremium(uint256)", +"3d3db8eb": "getOutcomes()", +"3d3eb22a": "desapprove(address)", +"3d3f5114": "MEW_CROWDSALE_FUND()", +"3d405342": "fechAllCandidatesBySnapshotBlock(uint256)", +"3d40c266": "takeSellTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"3d412396": "JBXPERETH()", +"3d4197f0": "setVal(uint256)", +"3d424dc0": "ViewtBet(address)", +"3d4311e2": "getRoundCasteValues(uint256)", +"3d432808": "destroyTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"3d436ea1": "getEthBullet()", +"3d438c1e": "TheHumanFund(uint256,string,uint8,string)", +"3d43bd1e": "replaceDSPRegistry(address)", +"3d44c476": "getLinkDigest(bytes32,address)", +"3d456aa5": "extendFreezeBy(uint256)", +"3d45b9ef": "TokenCLCC(uint256,string,string)", +"3d46b819": "getNonce(uint256)", +"3d472d4d": "devGiveBlockReward()", +"3d488c52": "getPackageNameOfCampaign(bytes32)", +"3d48c067": "testSmartContract(string)", +"3d48f3af": "costOfOrder(uint256,uint256)", +"3d493572": "setSoftCapReached()", +"3d49ba0f": "updateMemeUrl(uint256,string)", +"3d4a7c1e": "setStage1Ends(uint256)", +"3d4a8b4e": "ScholarToken()", +"3d4af864": "CatToken()", +"3d4b2c2c": "totalTokenBalance()", +"3d4ba37a": "setMajorityThreshold(uint256)", +"3d4d3600": "itemList(uint256)", +"3d4d8d4f": "withdrawEarnings(address)", +"3d4ee7a0": "FundariaToken()", +"3d4ef007": "vestingCount(address)", +"3d509c97": "removeRewardToken(address)", +"3d532ac5": "SWEET(uint256,string,string)", +"3d532bde": "removeSchedules(uint256,uint256[])", +"3d536a2e": "joinGame(string)", +"3d54b48a": "CreaEther()", +"3d561f73": "getBattleboard(uint16)", +"3d565121": "lockup_enddate()", +"3d568185": "createSpecialCards(uint32,uint16,uint16)", +"3d56dca3": "getBecomeHostSignatureAddress(address,string,uint8,bytes32,bytes32)", +"3d582391": "setEndsAtUTC(uint256)", +"3d584063": "getManager(address)", +"3d58650a": "BreakCoinToken()", +"3d58d0c3": "DROP()", +"3d5905a9": "setHolderAddress(address,uint256)", +"3d595134": "changeDubiAddress(address)", +"3d59995c": "remoteSetWinner(uint256,string,uint256,uint256)", +"3d59cd60": "changeRoot(bytes32)", +"3d5a3016": "canGotoState(uint8)", +"3d5aed1d": "_subGene(uint256,uint256,uint256)", +"3d5b0124": "RCR()", +"3d5b2b4e": "GxDeploymentAdmins()", +"3d5bb7f4": "setDaVinci(address)", +"3d5d0720": "totalContributedETH()", +"3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", +"3d5dfb63": "_Approval(address,address)", +"3d5dff53": "tokensOwed(address)", +"3d5ef471": "nfcIdOf(uint256)", +"3d608572": "testControlCreateWithParentsSameItemId()", +"3d614def": "deployWillWallet(uint256)", +"3d619212": "basePublicPlacement()", +"3d62fa80": "getByFromAndTo(uint256,uint256,uint256)", +"3d637ebe": "tokensCreationVIPsCap()", +"3d639d84": "_getItemPrice(uint256)", +"3d64125b": "balanceof(address)", +"3d6571e5": "blub()", +"3d65a59d": "ICG()", +"3d65cf9c": "initParams(address)", +"3d65ecdf": "payToProvider(address)", +"3d662cff": "tokenDestroy()", +"3d66da8e": "claimRefund(address,address)", +"3d6759ec": "_createAsset(address,uint256,uint256,uint256,address)", +"3d677067": "buyProp(uint256,uint256,uint256)", +"3d68011a": "PRCT_TEAM()", +"3d6839c6": "REAL(address)", +"3d6859f2": "investorInfo(address,uint256)", +"3d68d33f": "BTCP()", +"3d694f30": "approveSettingCreation(uint256,bool)", +"3d695002": "_addressNotNull(address)", +"3d69b403": "isOutcomeSet(bytes)", +"3d69f4d6": "outsourceDelivery(uint256,uint256,int256,int256,int256,int256)", +"3d6a2231": "DrepToken()", +"3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", +"3d6a3664": "setNewOracle(address)", +"3d6a58ea": "convertSgnToSga(uint256)", +"3d6a71e4": "endedAt()", +"3d6a9750": "ShowTickets(uint256,uint256,uint256)", +"3d6ab68f": "CREATE_PERMISSIONS_ROLE()", +"3d6ad962": "claimPrizes()", +"3d6b0cb7": "testFailCreateWithParentForeignNotInUse()", +"3d6b6c70": "increaseJackpot(uint256,bytes32,address,address,uint256)", +"3d6b7301": "readAddresses(bytes32[])", +"3d6bc807": "cancelEtherBroAuction(uint256)", +"3d6bcaef": "GetWagerData(bytes32)", +"3d6c4df7": "updateWallet(address,string)", +"3d6df0d5": "docHash()", +"3d6e38b8": "changedp1(address)", +"3d6e87c1": "cancelSaleByAddress(address)", +"3d6ea8b2": "confirmMany(bytes32[],address[],uint256[],uint8[],bytes32[],bytes32[])", +"3d6eec6b": "RootNo3(uint256,string,uint8,string)", +"3d6f3366": "TokenCrowdsale()", +"3d6fc91d": "SetDestination(address,address)", +"3d6fda19": "stopIssue()", +"3d709ff1": "getRemixCount(uint256)", +"3d724027": "setLock(address[],uint256[])", +"3d725831": "getFundedTokensByIndex(bytes32,string,uint256)", +"3d72c71b": "SimpleToken()", +"3d72f40f": "getUserP3DInfo()", +"3d73c2de": "reserveCATDestination()", +"3d73ddfc": "SGNL()", +"3d7403a3": "update(string)", +"3d7417a1": "removePrMemberById(uint256,address,address)", +"3d741994": "preIcoStart()", +"3d747f67": "invalidateToken(address)", +"3d74e856": "setMinJackpotBet(uint256)", +"3d750b28": "found()", +"3d756973": "getWrapperData()", +"3d75c49e": "OEBCBank()", +"3d75e106": "ImportTestC()", +"3d7646f7": "getRok()", +"3d769e3d": "EXT_COMPANY_ONE()", +"3d76b7a3": "checkHash(uint256)", +"3d79c332": "ALU()", +"3d79d1c8": "bal()", +"3d7a8baf": "setQuoteKey(uint256)", +"3d7a8c0e": "POPKOIN()", +"3d7bed99": "addProxyForSender(address,address)", +"3d7c9f8c": "THB_Omnidollar()", +"3d7d20a4": "mintFungibles(uint256,address[],uint256[])", +"3d7d3f5a": "createSaleAuction(uint256,uint256,uint256,uint256)", +"3d7daab3": "_isValidSignatureAndData(address,bytes)", +"3d7e1048": "TransferredUnlockedTokens(address,uint256,bytes32)", +"3d7f09a3": "editEtherLimit(uint256)", +"3d7f6536": "getGraffiti(uint256)", +"3d80b532": "balance(string)", +"3d80ea28": "claimUSInvestorTokens()", +"3d813d8b": "setBountyAmounts()", +"3d814377": "window3StartTime()", +"3d820a90": "TOKEN_RATE_PRESALE()", +"3d8270f5": "getContributor(address)", +"3d82cf5a": "maxBattleRounds()", +"3d82e1b1": "assertEq3(bytes3,bytes3,bytes32)", +"3d82f71e": "distributeEGOX(address[])", +"3d832080": "ownerSetJackpotOfHouseEdge(uint16)", +"3d83230f": "auctionSuccessful(uint256,uint128,address,address)", +"3d83ed36": "increaseQuota(uint256,uint256,address)", +"3d84b8c1": "mintedForAccount(address)", +"3d856c9b": "getCmasByOwner(address)", +"3d8731ac": "LOCK_MAX()", +"3d8807f8": "cardsOfOwner(address)", +"3d888aa5": "PerformAirDrop()", +"3d88eb3f": "replOne(address,address)", +"3d8a03af": "getMatch()", +"3d8a63e4": "scam()", +"3d8b41f3": "createBurnRequest()", +"3d8c3dc9": "addTotalSupply()", +"3d8c5af4": "oddsSingle(uint256)", +"3d8c9b8c": "purchaseWolk(address)", +"3d8d020a": "withdraw(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"3d8d0db4": "totalBuyPrice(uint256,uint256)", +"3d8e0f4e": "checkRevert2(uint256)", +"3d8e1b7c": "sumICOStage6()", +"3d8e2947": "getFileAddress(bytes)", +"3d8f89d7": "setBooleanValue(string,bool)", +"3d908c82": "distributeTokensToAllUsers()", +"3d90d44d": "addPowerSource(address,uint256,uint256)", +"3d90eeb9": "getCartSubtotal(address)", +"3d91eec0": "NebbexToken(uint256,address)", +"3d922f90": "depositar()", +"3d9277f0": "unlockTip(bytes32)", +"3d9287fa": "whitelisted()", +"3d937410": "CokecoinTokenTest()", +"3d937824": "setCompte_35(string)", +"3d93a355": "InTokenTest12(uint256,string,uint8,string)", +"3d944953": "withdrawCollectedResources()", +"3d946410": "isPreSalePeriod()", +"3d946c53": "restartElection()", +"3d94e23b": "viewXCAT(address,address,bytes32)", +"3d955aa3": "poll(uint256)", +"3d956691": "tokensToSell()", +"3d957b0b": "third_bonus_amount()", +"3d960ec3": "round2Sold()", +"3d96c758": "TreeLim()", +"3d96fa3c": "getAllDelegatorAddress()", +"3d972839": "withdraw(uint16)", +"3d9aa932": "oraclize()", +"3d9ad7ce": "SENIUM()", +"3d9aeef0": "isBetStorage()", +"3d9af4d1": "setMigrateDueToNoReports(bool)", +"3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", +"3d9dcb07": "getFamedStarByID(uint256)", +"3d9e23ca": "PartnersFund()", +"3d9e4233": "registerAlbum(bytes32[],bytes32[],bytes32[],bytes32[],bytes32,bytes32)", +"3d9f01fb": "renterOf(uint256)", +"3d9f923b": "updateDenomination(bytes8,address)", +"3da01325": "blockUser(address)", +"3da04e4a": "getUserGroups(address)", +"3da06d6c": "getTemporaryWinningFaction()", +"3da09d40": "Ripple()", +"3da0ac79": "compare()", +"3da1c0c3": "isVerifiedUser(address)", +"3da1eff5": "claimOwnerSupply()", +"3da1f79a": "revokeSignature(uint256)", +"3da216da": "LuckyMoneyToken(uint256,string,uint8,string)", +"3da32dc5": "FcsCoin()", +"3da368c0": "ETHcomeback820()", +"3da4ba4a": "AiboCoin(address,uint256)", +"3da55aba": "setZlotsAddress(address)", +"3da5c3ce": "puzzle(address,bytes32)", +"3da5d173": "ZeroExExchange(address,address)", +"3da611cd": "ContractEthLimitChanged(uint256,uint256)", +"3da64a06": "issueTokenToGuaranteedAddress(address,uint256,bytes)", +"3da69ff4": "Salome()", +"3da76788": "getDataLength()", +"3da79946": "allEthOUT()", +"3da80d66": "contains(address[],address)", +"3da98498": "Crowdtes()", +"3daa33d5": "buyAndSellPrice()", +"3daad222": "asmTransferFrom(address,address,address,uint256)", +"3dab45b6": "setMtdPreAmount(uint256)", +"3dabb0f6": "verifySignature(address,address,uint8,bytes32,bytes32)", +"3dac68b7": "setAddressAdv(address)", +"3daceda1": "createSyndicate(address,uint256,uint256,uint256,uint256)", +"3dad1583": "getAyes(uint256)", +"3dae94f0": "cumulativeIndexOf(uint256[],uint256)", +"3daee1b8": "weekThreeRate()", +"3daefe4b": "Election1()", +"3daf099f": "transferEthereum(uint256,address)", +"3daf31b5": "withDecimals(uint256,uint256)", +"3dafbf92": "SNPToken()", +"3db05068": "toForecastData(uint8,uint8,bool,uint8,uint8)", +"3db08826": "isProofValid(bytes32[],bytes32)", +"3db13fec": "PalletOneToken()", +"3db1c253": "projectFailed()", +"3db1f00a": "TOSMidHoldingContract()", +"3db2254b": "deleteAllReports()", +"3db2a12a": "Empty()", +"3db36b5f": "transferTokensFromTeamAddress(address,uint256)", +"3db3f2cf": "submitBid(address,bytes32)", +"3db62953": "currentExchangeSystem()", +"3db7a118": "blockDotDifficulty()", +"3db7c149": "SmartCityCrowdsale(address,address,address,uint256,uint256,uint256)", +"3db7e347": "contributorAt(uint256,uint256)", +"3db80346": "closeGroup(uint32)", +"3db8352d": "setEvaluator(uint256)", +"3db8433c": "setLeagueRosterAndCoreAndContestContractAddress(address,address,address)", +"3db8493a": "put(uint256,string,string)", +"3db9c4aa": "createIntention(address)", +"3dba0b57": "MCTTokenAddress()", +"3dba6197": "etherAccumulator()", +"3dbad089": "Contribute(address,address,uint256)", +"3dbae017": "EasyToken()", +"3dbae9f9": "startIcoTwo()", +"3dbb07ac": "s28(bytes1)", +"3dbb270d": "AshCashToken()", +"3dbb7f46": "setPrizeFundFactor(uint256)", +"3dbb874e": "getPetClaims(uint64)", +"3dbba05c": "callDefaultRelease()", +"3dbc7c69": "totalApproval(address)", +"3dbe56f0": "getUnfreezedTokens(address)", +"3dbe6469": "ChangeBuyer(address)", +"3dbedbd4": "StopICO()", +"3dc02266": "fipsRegister(uint256)", +"3dc09a70": "OwOToken()", +"3dc0d600": "nome_vincitore()", +"3dc11dd1": "ethSwapRate()", +"3dc1579a": "RELEASE_TIME()", +"3dc19db8": "addAdministator(address)", +"3dc1a6bc": "getSkillLength()", +"3dc1d46b": "auditGuess(uint256,string,uint8,uint256,uint256,uint256)", +"3dc1ef34": "limitMaxSupply()", +"3dc23486": "_addBalance(address,uint256,address)", +"3dc268a6": "oraclize_query(uint256,string,bytes[2],uint256)", +"3dc286ae": "getEncSeckey()", +"3dc37539": "reveal_test_data(int256[],int256)", +"3dc38fc1": "addCourse(uint256,uint256)", +"3dc4cac9": "Mycryptonline()", +"3dc58149": "getDepositRecord(address)", +"3dc5bf97": "acceptRegistrarTransfer(bytes32,uint256)", +"3dc60e52": "getKittyCount(address)", +"3dc6e9b0": "changeMaxLockDuration(uint256)", +"3dc7426e": "setMaximumMintableQuantity(address,uint256)", +"3dc7c549": "sumHardCapICO()", +"3dc7ea7f": "recently_added_address()", +"3dc9124e": "numOfLoadedCrowdsalePurchases()", +"3dcb0b81": "PollManagedFund(address,address,address,address,address,address,address,address[])", +"3dcb66db": "Storer()", +"3dcbab40": "UnFrozenFunds(address,uint256)", +"3dcbf7eb": "addAddressToAccountFor(address,bytes,bytes,address,bytes32)", +"3dcd351f": "getAllReceipt()", +"3dcd6176": "returnTokenBalance(address[2],bytes32)", +"3dce1ea9": "curPayoutId()", +"3dced193": "getPI_edit_33()", +"3dcf59ca": "initiateMigration(address,address)", +"3dcfbdd0": "getBrickAddress()", +"3dd00c42": "getMyMinersAt(uint32,uint32)", +"3dd02f06": "setCoinStorage(address,address)", +"3dd16673": "teamETHAddress()", +"3dd287d4": "monsterNFTContract()", +"3dd297da": "safeMultiply(uint256,uint256)", +"3dd2b811": "CSNO()", +"3dd2e0f0": "optionTotalTimes()", +"3dd35279": "memberIndex(address)", +"3dd49939": "ext(address)", +"3dd5b2da": "withdrawContractETH()", +"3dd5e0ec": "NewSouth21Token()", +"3dd7609a": "ETHER_AMOUNT()", +"3dd7b14b": "optionPoolBalance()", +"3dd7c1b9": "newProduct(string,string,uint256,uint256)", +"3dd82637": "Transformers()", +"3dd83fe1": "newPlayer(address,uint256,uint256)", +"3dd86478": "isFromState(address,address,uint256)", +"3dd93a8a": "getUsersGeneratorsIds()", +"3dd95d1b": "setExecutionDailyLimit(uint256)", +"3dda1aff": "Football()", +"3dda37dc": "flags(address,address)", +"3dda7b1d": "fuddToken()", +"3ddac459": "changeminpresale(uint256)", +"3ddb77bd": "_distDay()", +"3ddc3277": "charityFoundationIdx()", +"3ddc8e9c": "fixedLoge(uint256,uint8)", +"3ddcbace": "Escrow(address,address,address)", +"3ddd4698": "registerNameXaddr(string,address,bool)", +"3ddd5313": "acceptPayments()", +"3dde1598": "redeemBattleCrates()", +"3dde3918": "removeAdministrators(address)", +"3de035bf": "endWork(uint256)", +"3de1a4bc": "getDepositPool()", +"3de24c17": "refundInvoice(address,address)", +"3de33a32": "doIssueTokens(address,uint256)", +"3de377ec": "mock(uint256)", +"3de39c11": "maxGasPrice()", +"3de3ebf8": "getPlayerEnergy(address)", +"3de3fbd9": "totalTokenRewards()", +"3de46340": "getBlockVoterBalance(uint256,address)", +"3de478cc": "validateSignatures(bytes32,bytes,bytes)", +"3de4ca9e": "Karma(address,address)", +"3de4eb17": "getAdopters()", +"3de696d3": "percentFeeTimes5()", +"3de6a03f": "checkStatusICAP(bytes32,uint256,string,address)", +"3de7dfb1": "Amount_of_Chi_for_One_ETH()", +"3de8c792": "BUYER_STEP_4(bytes32,uint256,bytes1,address)", +"3de8d340": "dividendsBlocks()", +"3de9c8e6": "haltFundraising()", +"3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", +"3dea6b9a": "getMeme(uint256)", +"3deaa297": "transferAllDividends()", +"3deaa323": "minPurchaseLimit()", +"3dead9e8": "Mythereum()", +"3deaf6d4": "MAXIMUM_FIRST_DAY_CONTRIBUTION()", +"3deb23d2": "STANDARD_RATE()", +"3deb91c7": "setMinReserve(uint256)", +"3debd2d8": "sendToAddress(address,uint256)", +"3dec4cb3": "pre_ico_start()", +"3dedc36e": "getGunByIdPart2(uint256)", +"3dee7237": "amountOfBPs(address)", +"3def449b": "FipsNotary()", +"3defb962": "heartbeat()", +"3df08c6a": "privateSalesTokensSold()", +"3df16377": "make_move_and_claim_victory(uint256,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", +"3df18d2a": "model(address)", +"3df18e0a": "bytes32ToHex(bytes32)", +"3df19507": "intToDec(uint256)", +"3df2b29d": "powerDown(address,address,uint256)", +"3df2b723": "adminClaimAirdropMultiple(address[],uint256[])", +"3df2d6fd": "FIGHTMONEY()", +"3df40c7a": "startPreIcoDate()", +"3df4a282": "setCurrentSaleDayAndBonus(uint8)", +"3df4ddf4": "first()", +"3df5140c": "setIsTokenCanBeSell(bool)", +"3df5958f": "VillanovavsRadford()", +"3df6b23c": "angelRound()", +"3df76482": "fipsPublishData(bytes20,bytes)", +"3df77c0e": "testBalanceOf()", +"3df7c86d": "mom()", +"3df86f79": "split32_20_12(bytes32)", +"3df91162": "getUpdatable(bytes20)", +"3df95fc9": "HAYATO()", +"3df96853": "carIdToRenter(uint256)", +"3dfa0384": "messageSenderAddress()", +"3dfa1c46": "LLV_v31_5()", +"3dfb4843": "renewDeed(bytes32)", +"3dfc42c8": "TdeFinalized(uint256)", +"3dfc6980": "set_verifiedUsersOnlyMode(bool)", +"3dfca2ad": "finishVoting(address,uint256)", +"3dfcdf2b": "CoinVila(address)", +"3dfd288a": "checkVotingForTransferWeiFromExchangeToPayment()", +"3dfd83c6": "SPARCToken()", +"3dfeac48": "MaximalInvestmentChanged(uint256)", +"3e00b910": "buyTokenPreIco(address,uint256)", +"3e011b11": "getTokensBackAFterCorwdsale()", +"3e032a3b": "slippage()", +"3e03c84f": "tokenIsLocked(address)", +"3e03d50f": "isTeam(uint256)", +"3e0448c2": "ChangedId(address,string)", +"3e045845": "issueSecurityTokens(address,uint256,uint256)", +"3e04bf23": "upgradeShip(uint32,uint8)", +"3e058664": "getBonusPercentRate()", +"3e05c964": "withdrawnByBeneficiary()", +"3e05ca7c": "get_PendingGains(address,address,uint256,bool)", +"3e05e01b": "ethReward()", +"3e0663e0": "AdminDrawProcess()", +"3e06be20": "downgradeToBasic(bytes32)", +"3e0764ba": "set_payment_details(uint256,string,address)", +"3e07905e": "endBuffer()", +"3e0807ca": "numberBtcUpdates()", +"3e0831e2": "putStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e083f7d": "deals(uint256,uint256)", +"3e085c3d": "airDropToOldTokenHolders(address[])", +"3e085d0e": "transfer(address,uint48,bytes,string)", +"3e087d01": "addEligibleBurner(address)", +"3e0912ec": "KangEOS()", +"3e093f38": "testPullWithTrust()", +"3e09876a": "vehicleFound(address,uint256)", +"3e0a322d": "setStartTime(uint256)", +"3e0a51b4": "TweetAccount()", +"3e0a7ab5": "addONG_AUDIT(bytes32,string,string)", +"3e0aba92": "fourth_release(uint256)", +"3e0ad2d4": "TPC(uint256,string,string)", +"3e0aedaf": "TreePlusToken()", +"3e0b7eb2": "updateTranscoderWithRewards(address,uint256,uint256)", +"3e0bd52e": "setAccountMaster(address)", +"3e0c1f2a": "fetchNextSnapshotBlock()", +"3e0c5d2c": "earlySafeWithdrawal(uint256)", +"3e0d4f4a": "ApproveContractorProposal()", +"3e0dfbdf": "getInvestorByAddress(address)", +"3e0efe67": "putBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e0fddbd": "ClaimHodlToken(address,uint256,uint256)", +"3e1092f2": "changeModuleRegisterOwner(string,string,address)", +"3e109a19": "minBid()", +"3e112bf3": "calcResult(uint256,uint256,uint256)", +"3e112ed7": "reserveCoins(address,uint256)", +"3e11456f": "PRIVATE_SALE_ACCOUNT()", +"3e11741f": "sellToken(address,uint256,uint256)", +"3e118dbe": "_version()", +"3e118f1f": "weiMinSaleIco()", +"3e11b765": "batchApprove(address[],uint256[])", +"3e11e378": "changeController(address,address)", +"3e127ab7": "maxPoly()", +"3e127e76": "safe_add(uint256)", +"3e129967": "SpaceWar()", +"3e1457a1": "initRates(uint256[],uint256[])", +"3e152d8e": "maxBonusTickets()", +"3e15346d": "removeGlobalConstraintPost(address,int256,address)", +"3e156601": "p_setMinInvestment(uint256)", +"3e15ef90": "GetDataPoint(uint256,uint256,bool,string)", +"3e165810": "initBMC(address,uint256,uint256,uint256,uint256)", +"3e175c0b": "goldUnFreeze()", +"3e17b882": "mutateCrabPart(uint256,uint256,uint256)", +"3e18117a": "AhooleeToken()", +"3e182d3f": "addSelctFight2Death(address,uint256,uint256,uint256,uint256)", +"3e184adf": "BucksTecToken()", +"3e18e78e": "endTimeinMinutes()", +"3e1a3376": "updateInvestorsComission(uint256)", +"3e1a420f": "publishRewardlessTaskListing(string,address,uint256,uint256)", +"3e1a9300": "getLastIndex()", +"3e1b0d29": "fechAllVotersBySnapshotBlock(uint256)", +"3e1b4645": "qualifiedAddress(address)", +"3e1b5b3e": "rateEarlyStage4()", +"3e1ba676": "subBountySupply(uint256)", +"3e1c01b5": "capitalAllocation()", +"3e1c2d5a": "RegisterKey(address,string)", +"3e1cc152": "fundWallet2()", +"3e1d09be": "changeSubcourtMinStake(uint96,uint256)", +"3e1d8156": "Issue(uint256,address,uint256)", +"3e1da046": "isDelegateOf(address,bytes8)", +"3e1e292a": "testCopy(bytes)", +"3e1eab35": "VUTEST2()", +"3e1fd0da": "checkAccess(bytes32,address)", +"3e20f7fb": "HashnodeTestCoin()", +"3e214e96": "changeAirDroper(address)", +"3e2153bf": "viewBeneficiaryDetails(address)", +"3e21b00f": "C40Coin()", +"3e239e1a": "getHour(uint256)", +"3e23ee7e": "executeTrade(address,address,uint256,uint256,uint256)", +"3e23ee9c": "BlackHorseWallet()", +"3e24fcbf": "capHicsToken()", +"3e254a0c": "YTCOMMUNITY()", +"3e2557c5": "_price_tokn_ICO_second()", +"3e25e837": "withdrawCommission()", +"3e25fdd4": "getLastStellar()", +"3e260a2c": "allocateReserveTokens()", +"3e262e46": "getTradeOfferSender(uint256)", +"3e2640d6": "extendClosingTime(uint256)", +"3e2729bf": "isRevocated(bytes)", +"3e275f06": "crowdSaleStart(uint16,uint16[5])", +"3e27e1be": "validateResetDeadTokens(uint256)", +"3e28912f": "getStrField3()", +"3e2cd68b": "get_share_by_address(address,address)", +"3e2d6cf6": "_emitWithdrawn(address,uint256,address)", +"3e2d7004": "getTokenRate()", +"3e2d7de1": "mintTokensWithIncludingInJackpot(address,uint256)", +"3e2ddb60": "changeMajorThreshold(address,uint256,bool,bytes)", +"3e2e806d": "rewardTokensFloor(address,uint256,uint32)", +"3e2ee39e": "debug_resetuser()", +"3e2fce37": "updAutoFreeze(bool)", +"3e2fe149": "getNewOwner()", +"3e30046a": "maxSale()", +"3e30838d": "delOperator(address)", +"3e313f28": "_changeColour(uint256,uint8,uint8,uint8)", +"3e31c77f": "setZoPrice(uint256)", +"3e321249": "PdexToken(address)", +"3e32224a": "BF1Token()", +"3e325589": "init(address,address,uint256,int8)", +"3e326048": "initWallet()", +"3e32bea2": "priceIncreasePerPurchase()", +"3e33c37b": "gameContext(uint256)", +"3e345bd8": "FatherToken()", +"3e34f34e": "isUserHasPermissonToModify(address,string)", +"3e351a45": "lotteryWinner()", +"3e352d49": "updateTokensForEtheeraTeam(uint256)", +"3e361281": "betsWon()", +"3e362c96": "bountyCount()", +"3e363696": "BuyWithPathwayFromBeneficiary(address,uint256)", +"3e3657a5": "addConfigEntryInt(bytes32,uint256)", +"3e3756db": "PauseOn(uint8)", +"3e379d64": "setBonus()", +"3e38a2b7": "delegateCount()", +"3e38dab8": "refundFlip(bytes32)", +"3e3926e4": "whitelist(address,uint256,uint256,uint32)", +"3e3b429a": "canPurchase(address)", +"3e3bc743": "AmazingDex(address)", +"3e3c9eae": "qsize()", +"3e3cba8f": "changeBalancesDB(address)", +"3e3ce4f3": "GSEN()", +"3e3d64e2": "hatchingsNeeded()", +"3e3dae41": "maximumSaleLimitUnits()", +"3e3deb8b": "MyMonsterCount(address)", +"3e3dff65": "GainsCalculated(address,uint256,uint256,uint256,uint256)", +"3e3e0b12": "stopMinting()", +"3e3ee859": "NewQuestion(string,bytes32)", +"3e3f4e24": "RealEstateCryptoFundAirdrop(address)", +"3e40aab4": "returnActions(uint256[8],uint256)", +"3e412533": "Easy()", +"3e415358": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32,uint256)", +"3e41d5eb": "addOwnersWithHowMany(address[],uint256)", +"3e427e89": "returnHostAndCreatorCut(uint256)", +"3e42ad79": "Instantium()", +"3e42ed80": "ProgressiveToken(string,uint8,string,uint256,uint256,uint256,address)", +"3e43b652": "betValueOf(address)", +"3e43e8b4": "AnimeToken(address,uint256)", +"3e441ef4": "SetItem(address,uint256,address)", +"3e445446": "STARTING_KILOS()", +"3e445506": "successfulPreSale()", +"3e44694f": "DID()", +"3e4476a3": "addAddressToJackpotParticipants(address,uint256)", +"3e450fff": "adminDeleteAccount()", +"3e4565d2": "testErrorUnauthorizedNameRegister2()", +"3e4604b3": "robotAddr()", +"3e460a84": "distributeBooking(uint256)", +"3e46eb60": "fortune_endauction(uint256)", +"3e476053": "moveFunds(address,uint256)", +"3e4852bd": "getGroupData(uint256)", +"3e4882fc": "AddressChangeConfirmed(address,address)", +"3e49077a": "createSaflokKey(bytes32,bytes32,bytes32,bytes32)", +"3e49776b": "VOLUME_5()", +"3e49820d": "changeTicketCap(uint256)", +"3e499dff": "addKYC(address)", +"3e49bed0": "setInt(bytes32,int256)", +"3e4a9263": "enforceSecondLock(address,address)", +"3e4b20cf": "updateGameSpecifics(uint256,uint256)", +"3e4b2570": "investorsAllocation()", +"3e4bdce4": "hasAccountPendingOrders(address)", +"3e4bee38": "GOLD()", +"3e4c0c82": "player_1(uint256)", +"3e4c9534": "getInvestmentMin()", +"3e4d914e": "lastBlock_f12Hash_uint256()", +"3e4e0432": "notifyOfArbitrationRequest(bytes32,address)", +"3e4f49e6": "state(uint256)", +"3e4ffa9b": "getImage(uint256,bytes32[],uint256,uint256)", +"3e5087cc": "testBasicThing()", +"3e50b0b8": "sendOwnerEther(address)", +"3e50de30": "calculateRewards()", +"3e510870": "transferOPSPool()", +"3e52d5c6": "openBoxes(uint256[])", +"3e530e5b": "find(uint256)", +"3e531e0d": "queryGameStatus(uint256)", +"3e53ccee": "actualPriceDivisor(uint256)", +"3e5442bd": "getBitsoAddress()", +"3e546675": "DelegateDualOwnable(address,address)", +"3e55eab0": "parcipateCrowdsaleInvestor(address)", +"3e5615bc": "FourToken()", +"3e568fe7": "GetDaysInOffice()", +"3e56f9f9": "getPayout(uint256)", +"3e57324e": "EmergencyPause()", +"3e586a81": "BeatTokenEthPriceChanged(uint256)", +"3e589050": "changeKeys(string,bytes1[])", +"3e58a465": "getShareList()", +"3e58c58c": "send(address)", +"3e592d50": "ResourcesOwner(uint8,address)", +"3e5933fe": "removeAll(address[])", +"3e5a2024": "MyActive()", +"3e5a907f": "addSrNOfBallotPapper(uint256,uint256,uint256,uint256,uint256)", +"3e5ac28f": "toggleTransfers()", +"3e5b15e1": "addCoin(bytes4,address)", +"3e5b5e39": "addPrecommitment(address,uint256,bool)", +"3e5b7fec": "TwoPhaseAuction()", +"3e5beab9": "allowance(address)", +"3e5cee05": "issueIOU(string,uint256,address)", +"3e5d5cee": "sellPriceAtIndex(uint256)", +"3e5d901e": "autoTokenSent()", +"3e5daf02": "startRoundC()", +"3e5edb1d": "REFUND_LOCK_DURATION()", +"3e5efd92": "clearProcessedBet(uint256)", +"3e5fbedd": "NOTNCoin()", +"3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", +"3e604f48": "registerAadharDetails(string,string,string)", +"3e6075a4": "battleCountOf()", +"3e60c83a": "acceptMediation(uint256)", +"3e62d835": "setNumberOfOutcomes(uint256)", +"3e6357a9": "UserFund(address)", +"3e650c15": "withdrawalUser()", +"3e65a153": "longMul(uint256,uint256)", +"3e675cb0": "changeMaxValueBetForEmission(uint256)", +"3e6784b8": "ATLToken()", +"3e68119b": "setDebugNumber2(uint256,uint256)", +"3e681375": "totalDropAmount()", +"3e68680a": "create(address,address)", +"3e68aa3a": "getTopWinners(uint256)", +"3e68dea3": "BaseAccountService(address,address)", +"3e693ffd": "AppSet(address)", +"3e6968b6": "getCurrentDay()", +"3e6a569a": "claimReward(address,string)", +"3e6a6a31": "beneficiarySend()", +"3e6b16d9": "setShowInterval(uint256)", +"3e6c0637": "getFirstStartableIndex()", +"3e6d4e12": "getOptional(uint40)", +"3e6d6a6b": "setAdvisorAddress(address)", +"3e6d6d0b": "removeMastercardUser(address)", +"3e6d6d26": "withdrawAllTokens(uint256)", +"3e6d9770": "investments(address,uint256)", +"3e6e0adf": "whiteListPeriod()", +"3e6e2a73": "_mintEstate(address,string)", +"3e6eaa03": "mint(uint32,address)", +"3e6f118a": "blastOff(address)", +"3e6f4160": "roundParameters(uint256)", +"3e709982": "isDefValid(uint8,uint8,uint8,uint8,uint8)", +"3e715da2": "logPromiseFulfilled(uint256)", +"3e721015": "getFunds(uint256)", +"3e72b2bb": "addMembers(address[],uint256[])", +"3e72df41": "ff(string)", +"3e76018b": "getNextMinimumBet()", +"3e7614cd": "TIER3_PRICE()", +"3e764fdb": "_getNewFloorGene(uint256)", +"3e774409": "_mint(address,address,uint256,bytes,bytes)", +"3e77dcfb": "setPercentages(uint8,uint8,uint8,uint8,uint8,uint8)", +"3e786d80": "DickheadCash()", +"3e788ba3": "getRequestState(address,address)", +"3e78afd8": "ReferrerBonusTokensTaken(address,uint256)", +"3e78cf7a": "transactionFeeMin()", +"3e798e83": "calculateUserCommission(uint256)", +"3e799335": "RefundManager()", +"3e79e4c2": "customerPolicies(address,uint256)", +"3e7b5e80": "getUserRemainingAlloc(address)", +"3e7b684d": "NBAT(address,address,address,address,address)", +"3e7bb43c": "transferKycOwnerShip(address,address)", +"3e7cb0d3": "verify(uint256,bool)", +"3e7d081a": "emitBoardClosed(uint256,bool)", +"3e7d1acc": "currentAllocationLength()", +"3e7e250e": "GetDynamicCardAmount(uint32,uint256)", +"3e7e30ba": "poolPercentage()", +"3e7e42fa": "initialCreatorAccount(uint8)", +"3e7e70a4": "tokenBuyerWallet()", +"3e7e730d": "addressToReceiverToAmountAllowed(address,address)", +"3e7f26a5": "heroIdToBuyer(uint256)", +"3e7f54a9": "updateAppInstance()", +"3e803343": "subIsSafe(uint256,uint256)", +"3e80cbc6": "adminUpdateWallet(address)", +"3e81ba66": "preBountyAdded()", +"3e81d56e": "calculateProviderFee(uint256)", +"3e82055a": "addSignature(uint256,bytes16,bytes)", +"3e82eca7": "getAddressOne(address)", +"3e83f6cd": "Nickelcoin()", +"3e83fe36": "getMyShares()", +"3e84b266": "priorityPassContractAddress()", +"3e853128": "getGasForXau(address)", +"3e85713d": "marketingReserve()", +"3e85755a": "bonusInPreSalePhase2()", +"3e859fcb": "updateCap(uint256,uint256)", +"3e8616c8": "setBullAmount(uint256)", +"3e867089": "setDelegadoDeEscuela(bytes32,bytes32,uint256)", +"3e8686cc": "getSubmission(uint256)", +"3e86a2e5": "transferToAddress(address,uint256,bool,bytes)", +"3e870d63": "subHashrate(address,uint256)", +"3e8786a1": "reclaimFund(address)", +"3e87d301": "tokenPriceInEuroCents()", +"3e8817aa": "getPaymentAmount()", +"3e88d93b": "getRecorderID(address)", +"3e89340f": "lockStatus()", +"3e8a0585": "Bidding()", +"3e8a0bc9": "lockdown()", +"3e8a76e4": "CommerceBlockToken(address)", +"3e8a9439": "proposalDestination()", +"3e8b1dd7": "claim(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"3e8be2e1": "reTweetRewardPool()", +"3e8c34e5": "cardboardUnicornTokenAddress()", +"3e8cc273": "doBlockContract()", +"3e8ce607": "successfully_closed()", +"3e8cee07": "getPOOL_edit_5()", +"3e8cfa26": "Nut(uint256,string,uint8,string)", +"3e8d6e9f": "multyTx(address[100],uint256[100])", +"3e8d97e7": "underwriteToken()", +"3e8eca23": "plusFreezingTime(uint256)", +"3e8f5b90": "setConfig(string,uint256)", +"3e8f682f": "setETHFee(uint256)", +"3e8ff43f": "converterType()", +"3e904876": "devexit()", +"3e9196b4": "NokuTokenBurner(address)", +"3e91a622": "LOCToken()", +"3e92128c": "gettruelevel(address,uint256)", +"3e92fa26": "claimComputation(bytes,bytes,uint256)", +"3e9439cf": "removeLockedWalletEntity(address,address)", +"3e9491a2": "revenue()", +"3e94c904": "collectionOf(address)", +"3e955225": "getN()", +"3e95c9b6": "MOONTRAIL()", +"3e95f06d": "_handleProductionDecrease(address,uint256)", +"3e96c107": "People(uint256,string,uint8,string)", +"3e96d28e": "setReleaseAgent()", +"3e96e868": "addRole(string)", +"3e9744da": "walletBountyAndAdvisors()", +"3e9761b4": "projectIndex(uint256)", +"3e97db0d": "changeMainWallet(address)", +"3e97ee6c": "isOwnerOfAllPlayerCards(uint256[],address)", +"3e98039a": "multiOwnerSides()", +"3e9836c6": "oraclizeGas()", +"3e98b93a": "getAvatarCount(address)", +"3e99633f": "haltIEO()", +"3e997e71": "isPeronalLock(address)", +"3e99a35e": "BitMantas()", +"3e99c395": "isValidPublicKey(uint256,uint256)", +"3e99d2c9": "Foo(string,string)", +"3e99e26a": "SellableToken(address,address,address,uint256,uint256,uint256,uint256)", +"3e9b4c24": "CNToken()", +"3e9bee1b": "getBalanceDivis(address)", +"3e9c77f9": "ListingRegistry(uint8,uint8,uint8,uint8)", +"3e9e9f26": "distributeCallback(uint256,uint256,address[])", +"3e9eb6c1": "recursive_read(uint256)", +"3e9ed7e4": "burnSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"3e9f0d52": "userOddsRound(address)", +"3e9f9664": "withdrawItem(address,uint256)", +"3ea053eb": "deactivate(address)", +"3ea0fb3e": "getCurrentPrice(uint32)", +"3ea11222": "createGame(uint256,address)", +"3ea14a4f": "escFund()", +"3ea252eb": "finalOptions()", +"3ea2cde5": "addFiatCurrencyRaised(uint256)", +"3ea376fc": "changeAdmin(address,address,bytes32[3],bytes32[3],uint8[3])", +"3ea3c2bb": "_updateFundingGoal()", +"3ea3e42f": "AgriChainRootData()", +"3ea3f6c5": "activateRegistrar()", +"3ea51dc2": "ZIRC()", +"3ea556da": "getEtherForTokens(uint256,uint8)", +"3ea5cdba": "MIN_INVESTMENT_ICO_PHASE_ONE_POUNDS()", +"3ea69d76": "setEmployee(address,bytes32,bool)", +"3ea6c986": "ltcRaised()", +"3ea75e3d": "addJobContractMessage(address,address,address,string,uint256)", +"3ea79cb1": "MSCToken()", +"3ea89fd1": "popQueue()", +"3ea97009": "initialToken()", +"3eaa7643": "eligibilityRate()", +"3eaa8128": "buyCovfefe(uint256)", +"3eaab2dc": "FabotCoin()", +"3eaaf86b": "_totalSupply()", +"3eac48a0": "getTotalVoter(address,address)", +"3eac5cac": "PayingBackContract()", +"3ead67b5": "changeContractOwner(address)", +"3eadb6db": "nextPhase()", +"3eae396f": "GodzSwapGodzEtherCompliance()", +"3eae8ac8": "SkillChainPresale(uint256,uint256,uint256,address,uint256,address,address)", +"3eaf5d9f": "tick()", +"3eaf7591": "makeVote(uint256)", +"3eaf9923": "right68(uint256)", +"3eafec21": "sellTokens(address,address,uint256)", +"3eb10ab3": "FundAccount()", +"3eb1d777": "setStage(uint256)", +"3eb1eb1a": "issuingBody()", +"3eb2a37d": "priceCreatingChannelChanged(uint256,uint256)", +"3eb2b5ad": "addTeamMember(address)", +"3eb2cb02": "totalSquareStakesByUser(address,uint256,uint256)", +"3eb34e09": "AlterContactName(bytes32,address,bytes32)", +"3eb3aaad": "_getClosingObligation(bytes32)", +"3eb51dc4": "releaseForTeamAndAdvisor(address,uint256)", +"3eb54d80": "Pele()", +"3eb578bf": "ADVISER_STAKE2()", +"3eb5caca": "setProductType(uint8,string)", +"3eb610f5": "_requestContractApprove(bytes32,address)", +"3eb76b9c": "castVote(uint256)", +"3eb78420": "mainFundAccount()", +"3eb7dbc0": "FoxTradingToken()", +"3eb96aed": "DrunkCoin()", +"3eba223c": "CopyTokens()", +"3eba9ed2": "setBooleanValue(bytes32,bool)", +"3ebb047f": "allowanceTransfer()", +"3ebb2a17": "CreateTokenToMarket(address,uint256)", +"3ebb2d6b": "instructOracleToDistribute(uint256)", +"3ebbf394": "BergCoin()", +"3ebc2ab3": "isCompromised(address)", +"3ebc457a": "closeCurrentFeePeriod()", +"3ebd6092": "checkPermission(uint8,address)", +"3ebdc754": "setDiscipleSale(uint256,uint256)", +"3ebfc934": "transferFrom(address,address,string)", +"3ebfdaaf": "Swap()", +"3ebfde04": "proceedPreIcoTransactions(address[],uint256[])", +"3ec045a6": "auditor()", +"3ec16194": "calculateShares(uint256)", +"3ec1d668": "Vendor(bytes,uint256)", +"3ec27341": "getConfigAddress()", +"3ec27c4a": "setTimeRangeGen0(uint256)", +"3ec36b99": "commitVotes(uint256[],bytes32[],uint256[],uint256[])", +"3ec3aedc": "executeSell(address,uint256,uint256)", +"3ec414c8": "editMeta(string,uint256)", +"3ec48a2e": "move()", +"3ec548b6": "initLottery(uint16,uint256,uint8,bytes32)", +"3ec6a4c4": "getContributorsCount(address)", +"3ec6dac2": "getSize(bytes32)", +"3ec862a8": "hatchEggs(address)", +"3ec8d571": "TronToken(address,address)", +"3ec8ec5a": "getFinish()", +"3eca264e": "getWithdraw(address)", +"3eca443b": "generatedTokensSale()", +"3eca48db": "BonusesAllMinted(address)", +"3ecaabca": "ownerSetEarningsRate()", +"3ecae564": "canSend(address,address,bytes32,uint256,bytes)", +"3ecafef5": "isIcoStart()", +"3ecb9884": "frozensDetail(address)", +"3ecbbf39": "list(address,address)", +"3ecbf72a": "_find(address)", +"3eccca1e": "transferAllTokens(address,address)", +"3eccd456": "initializeSale(address[5],uint256[6],uint8,bytes32,bytes32,uint256,uint256)", +"3ece9c61": "teamHoldAmount()", +"3ecf965f": "rateETH_BCDT()", +"3ed01e02": "takerDispute(uint256,uint256,uint256)", +"3ed03798": "addToStat(uint256,uint256)", +"3ed0619b": "stabilityBoardProxy()", +"3ed08dc9": "balanceOfEthFee()", +"3ed0a373": "getDepositAtIndex(uint256)", +"3ed0f52c": "setCustomBonus(address,bool,bool,address)", +"3ed10b92": "allowances()", +"3ed23f91": "BlockPayeeToken(uint256,string,string)", +"3ed28f39": "getUniCoinSize()", +"3ed2d908": "buyerTokenName()", +"3ed35855": "removePayee(address)", +"3ed38181": "setInvalid()", +"3ed3d6a6": "getthird(uint256[])", +"3ed4006b": "OwnerCashout()", +"3ed4c4c8": "phaseAddtlInfo(uint256)", +"3ed58536": "record_human_readable_blockhash()", +"3ed5d456": "finishReplayPhase(uint256)", +"3ed620a4": "updatePrices(uint256,uint256,uint256)", +"3ed66d3d": "sellMintingAddress(uint256,uint256)", +"3ed70628": "SCPSToken(uint256,string,string)", +"3ed72caf": "icoTokenAddress()", +"3ed731bc": "makeCollectibleUnavailableToSale(address,uint256,uint256,uint256)", +"3ed7530d": "amountOfPerRelease()", +"3ed8ff25": "TotalFeesReceived()", +"3ed9bc86": "initializeToken()", +"3eda009b": "rewardRound(uint256)", +"3eda062c": "updateTap(uint256)", +"3eda7b88": "contractorTransferFrom_Scoupon(address,address,uint256)", +"3edab9d0": "AuctionCanceled()", +"3edaf264": "stopBounty()", +"3edbd76e": "GetChallengeCreator(uint256)", +"3edc65d3": "recordWithdraw(address)", +"3edc69b8": "maxAbsKindness()", +"3edcd61f": "times8()", +"3edd1128": "deposit(address,uint256,bool)", +"3edd90e7": "NewOwner(address)", +"3edddc0a": "incrementWrite()", +"3edef04b": "limitPreIcoTokens()", +"3edfd954": "mint(address,uint256,uint256,uint256,string)", +"3edfe35e": "ethPriceInCents()", +"3ee066e5": "sspRegistry()", +"3ee0c627": "currentBadge()", +"3ee2dd16": "FunGame()", +"3ee39cee": "testCannotActivateBeforeDeployingANT()", +"3ee3f499": "validateHash(bytes32)", +"3ee5313f": "SetState(uint256)", +"3ee58d13": "testBurnGuyAuth()", +"3ee5f2e4": "BreakToken()", +"3ee6d933": "rndInit_()", +"3ee6de34": "work(bytes32[])", +"3ee71e85": "NortontokenERC20(uint256,string,string)", +"3ee788e1": "_updateLoveStory(bytes16,bytes32,bytes32,uint256,string)", +"3ee7ab85": "airdropUpdateToken(address[],uint256[])", +"3ee822f4": "setAllLocations(uint256[])", +"3ee8747a": "isOrganisationExits(address)", +"3ee89a63": "withcom()", +"3ee90a29": "FOUNDER_STAKE()", +"3ee9d648": "lastGameId()", +"3eea5150": "milkTotalSupply()", +"3eeafccc": "getCountryStats(uint256)", +"3eeb3235": "geCompoundTimestampsFor24Months(uint256)", +"3eebc589": "isMarketManager()", +"3eed3822": "bigPrice()", +"3eed5d17": "Cipher()", +"3eeda7d3": "deliverTokens(address,uint256,string,bool)", +"3eedabcf": "getMelonAsset()", +"3eedf7d8": "getCurrentAuctionPrices(uint128[])", +"3eee36c6": "_split(uint256,uint256,uint256)", +"3eee83f1": "addAcceptedToken(address)", +"3eeeb1c3": "fastEscape()", +"3eefe239": "mintReservedTokens()", +"3eefef7b": "testFailTransferFromSelfNonArbitrarySize()", +"3ef06b6b": "previousprice()", +"3ef0784e": "configurationGenericCrowdsale(address,uint256,uint256)", +"3ef13367": "flushTokens(address)", +"3ef14cc8": "getTotalAuctions()", +"3ef37e30": "REFUND_PERCENT()", +"3ef39571": "isRequireData()", +"3ef4691f": "MyFreeCoin(uint256,string,uint8,string)", +"3ef4c16b": "withdrawVPC0xTokens(address)", +"3ef4f4ca": "world(uint256)", +"3ef530da": "_reduceReservesFresh(uint256)", +"3ef5aee9": "maxProportion()", +"3ef5d325": "getBaseValue(uint256)", +"3ef5e445": "subtract(uint256,uint256)", +"3ef5f368": "payMultiple(uint256)", +"3ef7c687": "getExpiringUnitList()", +"3ef84fcb": "withdrawCommonCoin(uint256)", +"3ef87414": "getRevisionCount(bytes20)", +"3ef8e872": "numberOfTokensOfOwner(address)", +"3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", +"3ef92150": "ICO(uint256)", +"3efa31b0": "initialAddress(address)", +"3efa8d51": "feesD()", +"3efab21b": "icoTokensIssued()", +"3efb537e": "getPastGameResults(uint256)", +"3efb760d": "nextLevel()", +"3efcad6d": "EMPR()", +"3efcd2e0": "transferPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"3efd1403": "createGame(uint8,bytes32)", +"3efe54d4": "percentWeiDividend()", +"3efe6441": "getRemainingToken()", +"3efea4d1": "buy(uint256,uint256,uint256,uint256,string,string,string)", +"3eff1ef3": "DYBToken()", +"3f001dd7": "MIC(uint256,string,string)", +"3f003d59": "removeAddressFromGrantAccess(address)", +"3f00f5aa": "HAOToken()", +"3f01dc99": "ETHFINEX_FEE()", +"3f01e642": "roundCount(uint256,uint256)", +"3f0218ac": "startThirdPhase()", +"3f021e2e": "oracalize_gaslimit()", +"3f02e4f0": "getTotalValidTk()", +"3f03aab4": "communityAddr_()", +"3f045e61": "inArray(address[],address)", +"3f047053": "songTokenExchange()", +"3f04b06d": "shareLove(address,address,uint256)", +"3f050f02": "subdomainSale()", +"3f0547bb": "changeAllowAllTransfers(bool)", +"3f056d2a": "StrongHoldTEST()", +"3f06e17c": "changeDonation(address)", +"3f073031": "addCredits()", +"3f07618d": "createDragon(address,uint256,uint256,uint256,uint256,uint240)", +"3f08882f": "assertIsWhitelisted(address)", +"3f089de9": "GameRefunded(uint256)", +"3f09ba9c": "TupleDemo()", +"3f0a0797": "exchangeContract()", +"3f0a9f65": "requiredBlockConfirmations()", +"3f0adce9": "setSmallWalletAddress(address)", +"3f0b67e9": "_addIndex(address,address)", +"3f0b70b6": "itgTokenTransfer(uint256,bool)", +"3f0cea3f": "withdrawOwner(address)", +"3f0cf183": "MockSale(uint256,uint256,address,address)", +"3f0d9ad5": "contractBalance_()", +"3f0ec70b": "RequestFactory(address)", +"3f0ed0df": "setContract(string,address)", +"3f0f42e2": "addWalletToWhitelist(address)", +"3f0f7248": "SpaCoin()", +"3f109205": "setFoundationInterface(address)", +"3f10dea6": "canUse(address,uint256)", +"3f10f08a": "nextCommonTTMTokenId3()", +"3f117b85": "setPaymentContractAddress(address)", +"3f1199e6": "buried(address)", +"3f11e43d": "newEtherdelta(address)", +"3f124f1d": "totalMintContracts()", +"3f13d339": "getTxnNum(address,uint256)", +"3f14710d": "GameEnded(address,address,uint256,uint256,uint8)", +"3f14e2db": "withdrawfund()", +"3f152d11": "Coin(address)", +"3f15457f": "ens()", +"3f174064": "crowdsalePause()", +"3f181ef2": "getTotalUniqueCards()", +"3f18400e": "owlmasterReq()", +"3f1887e9": "Gamblers_Until_Jackpot()", +"3f18acb4": "CarRoute(string)", +"3f19bfbf": "allocateLedTokens()", +"3f19d043": "getContributions(address)", +"3f1a1cac": "useSingleItem(uint256,uint256,uint256)", +"3f1a3d9e": "dropEnabled()", +"3f1ae30f": "ReverseConfirmTransaction(uint256)", +"3f1b1267": "icoSince()", +"3f1bfdee": "testFailCreateShortIdAlreadyExists()", +"3f1da980": "lastBlock_v11Hash_uint256()", +"3f1e600a": "PHASE_3_PRICE()", +"3f1f59a4": "ICO_START2()", +"3f1f8f68": "seventh_withdrawal(uint256)", +"3f202951": "SampleCrowdsale(uint256,uint256,uint256,uint256,address)", +"3f20fa9e": "requestDispute(bytes16,address,address,uint256,uint256)", +"3f2266c2": "ownerAngelCollection(address,uint256)", +"3f22b0fb": "last50plushacker()", +"3f23503d": "minBtcValue()", +"3f23a566": "mintingCap()", +"3f242990": "tokenHardcap()", +"3f24ef7c": "setGidMax(uint8)", +"3f250493": "Crowdsaled()", +"3f257776": "getN2ControlLimits(bytes32)", +"3f265ddd": "FructusToken()", +"3f266242": "getSubjectCountByAddress(address)", +"3f26c5ee": "addMilestone(uint256,uint256,uint256,uint256,string,string)", +"3f26fa01": "InvestmentPolicyChanged(bool,bool,bool,address,address)", +"3f27e9e1": "recoverAddressFromBalanceProofUpdateMessage(bytes32,bytes32,uint256,bytes32,bytes,bytes)", +"3f27f105": "batchTransferSame(address[],uint256)", +"3f2885cb": "publish(string,string,address,bytes32)", +"3f288f05": "addPubKeyHash(bytes20,uint8,bytes,bytes)", +"3f28b20e": "Bemo()", +"3f28e9fb": "createBounty(uint256)", +"3f28f24c": "claim_rest_of_tokens_and_selfdestruct()", +"3f2965f0": "registerSeller(address)", +"3f29cd27": "set(bytes12,bytes32,uint40)", +"3f2b1040": "enableTokenWithdrawals()", +"3f2c0e35": "getNumberOfRequest()", +"3f2c736a": "tokenSetBurnFeeAbs(address,address,uint256)", +"3f2cb5d4": "popEducation()", +"3f2cba2b": "airdropMVP(address[],uint256)", +"3f2cdb53": "setETHPriceLowerBound(uint256)", +"3f2e0564": "setIcoWallet(address)", +"3f2e907c": "resumeTransferToken()", +"3f2e917c": "changeLimits(uint256)", +"3f2eed3b": "publicPresale()", +"3f2f1596": "setupTreasury(address,uint256)", +"3f2f46b4": "revealRock(string)", +"3f31281a": "changeUserKey(address)", +"3f3173f3": "MyTokenyy()", +"3f31b3ac": "extCustomerPolicies(bytes32,uint256)", +"3f3246a0": "getLastBuyer()", +"3f32aa70": "removeFromWhiteList(bytes32,address)", +"3f32af65": "calculateFare(string,string)", +"3f33252d": "changeDisown(uint256)", +"3f332792": "getGiftsCounter()", +"3f34dd5c": "setVestingAmoundAndApproveCrowdsale(address,address,address)", +"3f35d033": "transferToContract(address,uint256,bytes)", +"3f36d33d": "getpotReward()", +"3f37c9d4": "servicePercentage()", +"3f384026": "setStatusBuySell(bool,bool)", +"3f392b42": "trade(address[5],uint256[11],uint8[3],bytes32[6])", +"3f3935d1": "confirmReverse(string)", +"3f395781": "Capsule(uint256,address)", +"3f3a1ed2": "alottTokensExchange(address,uint256)", +"3f3a279d": "getBetResult()", +"3f3a4966": "getVotingPower(uint256,uint256,address)", +"3f3a78d5": "rateAngelDay()", +"3f3bdc6c": "upgradeAllowance(address,address)", +"3f3c212d": "kittenTalk()", +"3f3c51c3": "Setmyadress(address)", +"3f3c594c": "TestingToken()", +"3f3cde05": "whitelistFilteringSwitch()", +"3f3d83c3": "purchasable()", +"3f3e4c11": "setMaxTotalSupply(uint256)", +"3f3edfa4": "RootCoin()", +"3f3f43a8": "setPreDGZtoDgzRate(uint256)", +"3f402dfc": "CreateGameIco(address,uint256)", +"3f40adb8": "createPetition(string,string,uint256,bool,string)", +"3f415772": "releaseExists(bytes32)", +"3f419c40": "getMessageMaxCharacters()", +"3f423afe": "DIVISOR_STAKE()", +"3f4263ef": "x(uint256)", +"3f430616": "getThirdRoundReleaseTime()", +"3f43c7cf": "open(uint256,uint256,uint256,string)", +"3f444db1": "internalDoRoll(bytes32,bytes32,uint256,uint256,uint256)", +"3f44d89f": "NigerianNairaToken()", +"3f450915": "_mateWith(uint256,uint256,uint8)", +"3f454406": "tokenEscape(address)", +"3f4628c1": "disputeLimitedReporters()", +"3f46a2ea": "DucLongToken()", +"3f478372": "newDeposit(uint256)", +"3f479562": "kingGladiatorFounder()", +"3f47e662": "decimals(uint256)", +"3f487b8b": "securityGuardLastCheckin()", +"3f48ae1a": "initInsecure(address)", +"3f493a1d": "Playforfreetoken()", +"3f497d52": "batchAirDrop(address,address,address[],uint256)", +"3f4a6484": "removeCapper(address)", +"3f4acbe8": "_teamTax(uint256,bool)", +"3f4ad13d": "LOTE(uint256,string,string)", +"3f4b1401": "releaseDragonTokens()", +"3f4ba83a": "unpause()", +"3f4be889": "callContractAddress()", +"3f4c0733": "batchTransferEtherWithSameAmount(address[],uint256)", +"3f4c89ca": "show_minimum_amount()", +"3f4d2fc2": "addConnector(address,uint32,bool)", +"3f4d97f0": "TOTAL_TEAM_TOKENS()", +"3f4dd268": "releaseTokens(uint256,uint256)", +"3f4e5ab9": "getB1()", +"3f4e6d66": "CryptoFamous(address)", +"3f4e95d7": "investorsAccounts(address)", +"3f4eb701": "updateUnderlying(string,uint256)", +"3f4f057f": "candidateBlockNumberHash()", +"3f4f070c": "newSpaceshipUpgrade(bytes1,uint8,uint256)", +"3f4f3075": "setRenewable(uint256,bool)", +"3f4f50c8": "EvtUnlock(address,uint256)", +"3f50331d": "batchTransferPaidTokens(address[],uint256[])", +"3f516018": "setCreator(address)", +"3f5174df": "numberOfEarlyPurchases()", +"3f5228c7": "fifishICO()", +"3f52c660": "TokenPerETH()", +"3f52e589": "setStartingTime(uint256)", +"3f541d08": "burnTokens(address,address)", +"3f541ffc": "exchangeEtherForHavvens()", +"3f549d87": "contributeByOracle(address,uint256)", +"3f55b895": "delegate(uint8,bytes32,bytes32)", +"3f572432": "investment(uint256,address,string,uint256)", +"3f5750c6": "distributeCoins()", +"3f576af0": "GoodDayTokens()", +"3f579f42": "executeTransaction(address,uint256,bytes)", +"3f58774b": "ecbuy(uint256)", +"3f58a043": "ceoEtherBalance()", +"3f58f8c0": "voteRuling(uint256,uint256,uint256[])", +"3f590062": "getTokenCreationTime(string)", +"3f59b1ab": "TokenImpl(string,string,uint256)", +"3f59e45a": "bincentiveLogger()", +"3f5a0bdd": "selfDestruct(address)", +"3f5a9e22": "getAmountOfTitties()", +"3f5ab2fe": "seed_eth()", +"3f5adb8e": "LIRAX()", +"3f5b7675": "periodTwo()", +"3f5bc9b6": "makeACall(address,uint256)", +"3f5c6a50": "MinimumDonation()", +"3f5cbdb6": "returnWei()", +"3f5cd055": "advisorsVesting()", +"3f5d0203": "getCreationWeiCost()", +"3f5d2b79": "CrowdsaleFinished(uint256,uint256)", +"3f5d8056": "currRound()", +"3f5e268f": "convictInitial(uint256,uint256)", +"3f5e3ec1": "changeTransactionStorage(address)", +"3f5ea068": "addLockAccount(address,uint256)", +"3f5f5217": "sellAth(uint256)", +"3f601972": "TotalToken()", +"3f606cfc": "enableAutoSeller()", +"3f60efa2": "HANDLE()", +"3f615272": "sendICO(address,uint256,address)", +"3f61dcf6": "enableTransfering()", +"3f62c084": "collectMessage(address,address,uint256)", +"3f635e30": "ethTransfer(uint256,address,uint256)", +"3f64a7ab": "devFeePercent()", +"3f64b318": "initSale(address,address,address,address)", +"3f651bab": "TOURNAMENT_ENDS()", +"3f65d97f": "removeEndorsement(bytes32,bytes32)", +"3f67364a": "PayValsToList(address[],uint256[])", +"3f67a94e": "getOffChainAddresses()", +"3f683b6a": "isStopped()", +"3f6849eb": "listedMonForMon(uint64)", +"3f686170": "freezeAll(bool)", +"3f68fde4": "removeVote(uint256)", +"3f69034f": "enableGeneration()", +"3f697ce9": "startBlock(address)", +"3f69babd": "cancelEvent(uint256)", +"3f6a2c97": "calculatePoints()", +"3f6a6792": "Bribed(uint256,uint256)", +"3f6b33c4": "ping(address,uint256,uint256)", +"3f6b5fde": "generate(address,string)", +"3f6b6f2e": "Airdrop()", +"3f6c0696": "superMint(address,uint256,uint256)", +"3f6c0c60": "isTransferNotExpired(uint256,uint256)", +"3f6c3567": "listSales(uint256)", +"3f6c4a1b": "getTeamA(uint256)", +"3f6c4cfd": "withdrawBountyAndAdvisory()", +"3f6c71c5": "edgePigmentR()", +"3f6c95fe": "increaseLotteryBalance(uint256)", +"3f6d8256": "validatorFee()", +"3f6dd911": "multisig_owner()", +"3f6ddb75": "Allocated(address,uint256,bool)", +"3f6ea2a8": "MIN_LEADER_FRAC_TOP()", +"3f6ec73a": "itemVoteUp(address,uint256)", +"3f6f7ed6": "updateEthRate(uint256)", +"3f6fa655": "resolved()", +"3f6fff4e": "closeCycle(uint256)", +"3f70c2b4": "getProductById(uint256)", +"3f720922": "setConfig(uint256,uint256,uint256,uint256,uint256)", +"3f723c62": "addRecord(string,string,string)", +"3f73365f": "getOneFree(address)", +"3f738402": "goalIncrement()", +"3f74a3b7": "MINIMUM_VESTING_PERIOD()", +"3f74a8be": "totalEthJackpotCollected()", +"3f74fecb": "DSTrueFallbackTest()", +"3f751ad0": "addTxToCustomerRegistry(address,uint256,uint256)", +"3f7525bf": "getAddressesSet()", +"3f76fbd3": "dhopakcoin()", +"3f77b560": "newDocument(bytes)", +"3f77e1e9": "testFee()", +"3f79a0a9": "NewGame(bytes32,bytes32,bytes32,bytes32,address,uint256)", +"3f7a0270": "setN(uint256)", +"3f7aea39": "getCET4ById(uint32)", +"3f7b2ea9": "testMintInvalid()", +"3f7b54f9": "DevChangeMiningReward(uint256)", +"3f7b6be8": "createProductionUnit2()", +"3f7c42a7": "setJob(address,uint256,address,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", +"3f7ca612": "FMWL()", +"3f7d3969": "fetchAllCandidates()", +"3f7d5361": "changeSafetyLimit(uint256)", +"3f7d72d8": "rSetE(address)", +"3f7da39a": "whitelisterAddress()", +"3f7e2120": "CloseGift()", +"3f7eabc9": "setRobot(address)", +"3f7eb0fe": "func_1()", +"3f7f2eda": "Order(address,uint256,address,uint256,uint256,uint256,address)", +"3f7f4f17": "getUserAccountBalance(address)", +"3f7f6d23": "BuyWithBonus(address,address,uint256,uint256,uint256)", +"3f7f8b24": "getAllocationProposal(uint256)", +"3f7f9faf": "attachTicker(address)", +"3f80135f": "test_threeInvalidEqAddress()", +"3f801f91": "proxyAssert(address,uint8,bytes)", +"3f802220": "ProposalAdded(uint256)", +"3f802ca0": "singleValueBatchTransfer(address[],uint256)", +"3f806783": "potSizeChanged(uint256)", +"3f807199": "changeParticipants(address[])", +"3f80a82b": "getbuyPrice()", +"3f80db69": "_totalTokenSold()", +"3f811b80": "createContract(bytes32)", +"3f8126d5": "GetStatus(uint256)", +"3f817449": "tokenSmartcontract()", +"3f81e4be": "lastBlock_a9Hash_uint256()", +"3f82065b": "setDiscipleVend(uint256,uint256)", +"3f82e2c6": "PUBLIC_RESOLVER_NODE()", +"3f836dcf": "addAsAddress(bytes32,address)", +"3f83acff": "get_contract(bytes32)", +"3f8416fb": "doUpgrade(address)", +"3f85be9c": "calcChanges(uint256,uint256,uint256)", +"3f85f916": "founderContract()", +"3f862a19": "remainUserTokenBalance(address)", +"3f87f870": "checkRequest(string,string,string)", +"3f883dfb": "transferExternalValue(bytes32[])", +"3f887fad": "buyShares(uint256,uint8,uint256,uint256)", +"3f89b09c": "update_fee(uint256,uint256)", +"3f8a04aa": "getCurrentUserPromoBonus()", +"3f8a4c13": "previousSnailPot()", +"3f8a92b3": "setmangeruser(address,bool)", +"3f8ae6d9": "GetUserExpire(address)", +"3f8af40c": "amendedEarlyPurchases(uint256)", +"3f8b0a1d": "getIssuedBy()", +"3f8c2582": "ethSale(address)", +"3f8c75a6": "_createLicense(uint256,uint256,address,uint256,address)", +"3f8cfba6": "lifeVestingStages()", +"3f8d9568": "buyins(address)", +"3f8d95bd": "_delete(address)", +"3f8df98d": "calculateMyReward(uint256)", +"3f8e0298": "parseTicket(uint256)", +"3f8f0714": "SimpleLife()", +"3f900962": "manualRaffle()", +"3f914aef": "setWhitelistAddress(address,bool)", +"3f923f9d": "NIZIGEN()", +"3f92edaf": "getMaxDropsPerTx()", +"3f935379": "_isSingleFlag(uint256)", +"3f94904a": "bankValReserve()", +"3f95c0c2": "timeboundTest(address,uint256,uint256)", +"3f9628e8": "addOldWithdrawals(address[],uint256[])", +"3f966082": "exchangesOwner()", +"3f96f3a3": "toInt()", +"3f97b106": "GetSuspend()", +"3f97d995": "VALIDITY()", +"3f982b74": "createInitialAllotment(string,uint256)", +"3f9942ff": "canceled()", +"3f9945d2": "ByThePeople(address)", +"3f99a12b": "saleEndBlock()", +"3f99fa54": "addInitialMember(address,uint256)", +"3f9a3886": "OWNERS_ALLOCATED_TOKENS()", +"3f9af464": "AK4Token()", +"3f9b250a": "getDocument(uint256)", +"3f9b8fdc": "updateAllowedTransfers(address,address,bool)", +"3f9c7822": "print(int256,uint256)", +"3f9cbd65": "mainSaleTokenWallet()", +"3f9ce517": "getRefAddress()", +"3f9d0954": "FarChainToken()", +"3f9d95ed": "addAcceptedToken(address,uint256,uint256)", +"3f9da856": "_addFreezer(address)", +"3f9e0eb7": "_getDaysInMonth(uint256,uint256)", +"3f9e23e5": "migrationFinished()", +"3f9e3494": "ReleaseSupply(address,uint256,uint256)", +"3f9e50fd": "LitToken()", +"3f9e9a37": "getBonusesAmount(uint256)", +"3f9e9df2": "removeInWhiteList(address)", +"3f9f5b68": "setPreviousID(uint256,int256)", +"3f9f7779": "BitCronus1()", +"3fa10e0a": "CountryJackpot()", +"3fa1436e": "updateTokenSaleState()", +"3fa1930d": "getPlayerBet(uint256)", +"3fa19804": "updateTeller(int8,bytes16,int8,int16,bool)", +"3fa21806": "lastHash()", +"3fa2dd2a": "getStage2Cap()", +"3fa2fe7a": "getActiveUserCount()", +"3fa40f94": "mintTokens(address[])", +"3fa4687b": "bytesToAddres(bytes)", +"3fa4ed06": "updateValue(bytes32,uint256)", +"3fa4f245": "value()", +"3fa54ed8": "setTileTypeAt(uint16,uint16,uint8,uint16)", +"3fa58b61": "Whitelistable()", +"3fa6010f": "setGallerySixPrice(uint256)", +"3fa615b0": "minCap()", +"3fa6497f": "AdminAddFunds()", +"3fa68836": "removeParticipant(uint8)", +"3fa69faa": "testtoken()", +"3fa6c7ca": "findLaptopUsage(address,address)", +"3fa8543a": "IMEXToken()", +"3fa8a7b8": "releaseTokenOwnership(address)", +"3fa911ae": "refundAllowed()", +"3fa9fcf8": "createPlayer()", +"3faaef28": "BurnFSATokens(uint256)", +"3faaffdb": "SCToken()", +"3fab8fb0": "EatToken()", +"3fabf8c0": "developmentAuditPromotionTokensPercent()", +"3fac68d5": "payOff()", +"3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", +"3facdfb6": "gatFund()", +"3fad1834": "getRequestCount()", +"3fad9ae0": "question()", +"3fadbd3e": "minTokenPurchase()", +"3fadc388": "current_plot_price()", +"3fae1928": "timenow()", +"3faed436": "setXTVTokenAirdropStatus(bool)", +"3faf511f": "vouch(bytes32)", +"3faff9d5": "purchaseTokens(uint256,address,bool)", +"3fb0b2c9": "CancelRoundAndRefundAll()", +"3fb18aec": "contains(string,string)", +"3fb1ab52": "_getUserSupportForTeamInTournament(uint256,uint256)", +"3fb1fed4": "startingExchangePrice()", +"3fb23166": "TeamVesting()", +"3fb23865": "fundingStatus()", +"3fb27b85": "seal()", +"3fb326ba": "MAX_ETHER_CONTR()", +"3fb39b8b": "rewardBeneficiary(address,uint256)", +"3fb3bec2": "deactivateTime()", +"3fb3ec28": "delegatedAmountsByDelegate(address)", +"3fb48c4c": "AAACoin()", +"3fb51a76": "frozenDaysforTestExchange()", +"3fb58819": "getMinGasPrice()", +"3fb5c1cb": "setNumber(uint256)", +"3fb64e75": "gameInProgress()", +"3fb655a3": "CPLTokenDeposit()", +"3fb8b692": "affiliateAddresses(uint256)", +"3fb92b10": "gameNbr()", +"3fb97857": "getCouponMulFactor()", +"3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", +"3fbb8f98": "drawTertiaryDWinners(uint256)", +"3fbc2a1e": "preSaleTLYperETH()", +"3fbc6345": "Token_Remaining()", +"3fbd40fd": "ProcessDraw()", +"3fbda23f": "CharityToken()", +"3fbfdefc": "checkMyAging(address)", +"3fbffca6": "getTeamB(uint256)", +"3fbffcef": "bidsCount()", +"3fc0234d": "train1(uint256,uint256)", +"3fc15f15": "mainToken()", +"3fc22c51": "buyPreSaleTokens(address)", +"3fc3e53f": "Funding()", +"3fc44ab3": "setCustomEvent(uint256,uint256,bool,string,uint256)", +"3fc499b2": "ihomekey()", +"3fc4caa1": "levelThreeBonus(uint256)", +"3fc4e866": "RudiantoToken()", +"3fc50b92": "agingTime()", +"3fc523c7": "test_fourInvalidEqUint()", +"3fc5b69b": "set_sale_arbits_per_ether(uint256)", +"3fc5ed50": "_openGameResult(uint256,string)", +"3fc6a97a": "sellNow()", +"3fc6bc94": "payDAO()", +"3fc6d75a": "crowdsaleTokenPrice()", +"3fc7e3d5": "volumeType3()", +"3fc821ee": "getStackholderConfirmationCount(uint256)", +"3fc86d32": "newInvestor(uint16,address,uint256,uint256)", +"3fc8b029": "testSaleHasOwnerOnCreation()", +"3fc8ca58": "JetherToken()", +"3fc8cef3": "weth()", +"3fc90f7c": "addresses1(uint256)", +"3fc98bd5": "robotInfo(uint256)", +"3fcb21d3": "ecoFundingSupply()", +"3fcce626": "setDeprecated(address,string,string)", +"3fcd06fa": "checkMinimalGoal()", +"3fcdd2d3": "transfertoken(uint256,address)", +"3fce1b82": "addAnimal(uint8)", +"3fcead58": "TKRPToken()", +"3fd01a77": "is_purchase_allowed()", +"3fd0f727": "isIcoTrue()", +"3fd1f232": "LookAtAllTheseTastyFees()", +"3fd2300d": "curveIntegral(uint256)", +"3fd2799d": "newShortPosition(address[7],uint256[4],uint32[3])", +"3fd29369": "offer(string,string,string,uint256)", +"3fd3370a": "FooTime()", +"3fd3a371": "stageThreeEnd()", +"3fd3c997": "assetProxies(bytes4)", +"3fd68ca7": "lastCheckedToken()", +"3fd6b1db": "InoCoin(uint256,string,string)", +"3fd76a98": "MANAGEMENT_LOCKED_ALLOC()", +"3fd8b02f": "lockPeriod()", +"3fd8cc4e": "isPermitted(address)", +"3fd8cd9b": "ETHReturn(address,uint256)", +"3fd94686": "changeEligibleDonkeys(uint256)", +"3fd97621": "testTransferHandlesTooLargeRequest()", +"3fd9c56d": "checkDoubledProfit(uint256,uint256)", +"3fda1281": "get_keys()", +"3fda417a": "LADCoin(uint256,string,string)", +"3fda5389": "fill(uint256)", +"3fda926e": "addGame(address,string)", +"3fdb03ca": "getselfaddress()", +"3fdb3628": "aggregateCDPValues(bytes32)", +"3fdb372a": "buildWinery()", +"3fdb571f": "reGround(uint256)", +"3fdb705b": "platformTokenSupply()", +"3fdb8cbd": "dt()", +"3fdbb6c7": "RATE_THRESHOLD_PERCENTAGE()", +"3fdccd8d": "setDCNForGas(uint256)", +"3fdcef0d": "PRICE_BEFORE_SOFTCAP()", +"3fdcefe0": "doSelfdestruct()", +"3fddd97d": "XCoin(uint256,string,string)", +"3fdddf01": "EGGS_TO_HATCH_1PACIFIST()", +"3fdde728": "MTP_PER_ETH_SALE()", +"3fddee64": "isAgency(address)", +"3fded490": "referralDiscountPercentage(address)", +"3fdeef90": "fstSold()", +"3fe0522c": "setTravelCore(address)", +"3fe14e03": "setAuthor(string)", +"3fe3347a": "assetType()", +"3fe3df76": "leaf_from_address_and_num_tokens(address,uint256)", +"3fe3f427": "depositTokens(address,address,uint256,uint256,bytes32)", +"3fe43020": "decreaseRepAvailableForExtraBondPayouts(uint256)", +"3fe43822": "Collect(uint256)", +"3fe75b8d": "Unity()", +"3fe80d6e": "begin(uint256)", +"3fe97ead": "left49(uint256)", +"3fe9bf0e": "createContract(bytes,uint256)", +"3fe9f2a4": "EventCentsPerEtherChanged(uint256,uint256)", +"3fe9f2b2": "totalPublicFundingSupply()", +"3fea1c2b": "getIHand(uint32)", +"3fea2313": "ProposalAdded(address,address,uint256)", +"3feab517": "DreamCoin(uint256,string,uint8,string)", +"3feafa87": "NucleusVisionToken_ASTER8793()", +"3feb1bd8": "transfer(bytes32,address,uint256)", +"3feb4f83": "BankeraToken(uint256,uint64)", +"3feb5f2b": "investors(uint256)", +"3febb070": "backlogAmount()", +"3febe823": "ClapClapToken()", +"3fec0561": "addclip(address)", +"3fec156b": "timeLockTeam(address)", +"3fec1a75": "setIcoDiscount(uint256)", +"3fec4a4c": "queryjingzhi(uint256,string)", +"3fec91a4": "addProposal(uint256)", +"3fecde21": "setTilePrice(uint8,uint256,address)", +"3feced03": "minAmountWei()", +"3fed491f": "testStoreBalanceAfterCheckout()", +"3fedcc31": "transfer(uint256,address,address,address,uint256,bytes,bytes)", +"3fee28b1": "logEthTx(bytes32)", +"3fefc25d": "getFundByManager(address)", +"3fefdb01": "setStageGenomes(uint8,string,string,string,string,string)", +"3feff510": "showMainERC20()", +"3feff76d": "tokenaddress()", +"3ff00ba5": "airdropMinting(address[],uint256[])", +"3ff0a1e5": "FoundToken()", +"3ff0ab0b": "updateUserDetails(bytes32)", +"3ff11c8b": "right85(uint256)", +"3ff1a578": "IsCheckNeeded(uint256,uint256)", +"3ff1d68f": "_totalXT()", +"3ff1dcf6": "PermianICO()", +"3ff1e05b": "viewBalance()", +"3ff20c8a": "setPause(uint8)", +"3ff26c01": "catches(address)", +"3ff33185": "newCaller(address)", +"3ff42b92": "marketingAddr()", +"3ff4d491": "checkFile(bytes32)", +"3ff5481d": "cancelSellBlock(uint256,uint256)", +"3ff54c71": "issueTokens(address)", +"3ff66381": "ACCC()", +"3ff69113": "myEntityCount()", +"3ff7f21c": "mulFactor()", +"3ff8c954": "addAnimals(uint8)", +"3ff8da5f": "recipient3()", +"3ff98455": "set_participant(address,address,uint256,uint256,uint256,bool,uint8)", +"3ff9a877": "makeXID(uint256)", +"3ffa274a": "transfersAllowedTo(address)", +"3ffb8f27": "changeMinter(address,int256,address)", +"3ffbd47f": "register(string,string)", +"3ffc2832": "_buyIcsTokens(address,uint256)", +"3ffc813f": "toCompare(uint256,uint256)", +"3ffd2798": "distributeAdviserBounty(address,uint256,bool)", +"3ffdabda": "poi_token()", +"3ffe5eb7": "claimWork(uint256,uint256[2],bytes32)", +"3fffebbd": "setBonusUser(address)", +"400002c4": "modifyOpenStatus(bool)", +"4000164d": "getClaimData2(uint256)", +"4000601f": "sellStakes(address,address,uint256,uint256)", +"4000aea0": "transferAndCall(address,uint256,bytes)", +"4000d5c3": "BACTest1Token(uint256,string,uint8,string)", +"4001261e": "activeTier()", +"40015d99": "getProviderInfo(uint256)", +"4001cee6": "getPeerOwnership(address)", +"4001e364": "SendEthOff()", +"40026c87": "getSubcourt(uint96)", +"4002d3fd": "LargeFunction()", +"4002eda6": "nextRoundId()", +"4002f0b0": "CheckCourse(uint256)", +"40032d8d": "checking(string,uint8,bytes32,bytes32)", +"400351cb": "applyForCandidate(string,uint256,string,string,string,uint256,bool)", +"4004b6da": "getAmbassador(address)", +"40058f61": "TIER2()", +"40066733": "getTotalVotersCount()", +"40067c91": "VoteFactory()", +"4006ccc5": "exchangeRatio()", +"400718ea": "expressBuyNumSec(uint256,uint256[],uint256[])", +"40079df0": "getDividendIndex(uint256,int256)", +"40086158": "calculateHash()", +"40086aa0": "directDebit(address,address)", +"400a44b2": "EE(uint256,string,uint8,string)", +"400a4deb": "sendPresaleTokens()", +"400aaab7": "CTOC()", +"400aae08": "isInCurrentGeneration(address)", +"400adee3": "releaseByCount(address,uint256)", +"400b56e5": "setReg2(uint256)", +"400b8bf8": "releaseMintTokens()", +"400ba069": "calculateFee(uint256,address)", +"400bb308": "SimpleTGE(address,uint256,uint256,uint256,uint256)", +"400bbbd8": "rebalanceGetTokensToSellAndBuy()", +"400d1f45": "dtGetEthBalance(address)", +"400e3949": "numProposals()", +"400eb4f5": "ParaType()", +"400ee783": "TOKENS_LOCKED_1Y_TOTAL()", +"400f7a1e": "getPairInfo(address,address)", +"400ff9a4": "BuyGold()", +"4010a018": "fundAvailable(address)", +"40111f6d": "RESERVED_TOKENS_BACE_TEAM()", +"40117f50": "CanalToken()", +"4011baf9": "MARKETING_POOL_TOKENS()", +"401214a7": "updateParams(uint256,uint256,uint256,uint256,uint256)", +"40128db3": "registerAsDelegate(bytes32)", +"40129a40": "updateAddress(bytes32,address)", +"4012e02e": "Info()", +"401356f1": "Salt()", +"40135913": "releaseImpl(uint256)", +"4014c1c7": "changeMutagen2FaceContract(address)", +"4015e83b": "renExTokensContract()", +"401611ed": "acceptEndorsement(bytes32,bytes32)", +"4016535a": "parseBlock(bytes,uint256)", +"4016e969": "allowOwner()", +"4018e263": "stageTwoCap()", +"40193883": "goal()", +"40193d17": "getPongvalConstant()", +"40194596": "RealBloq()", +"4019fc54": "masterTokenBalanceHolder()", +"401b57b5": "transferLockedToken(uint256)", +"401bd3fe": "distributeEth(address[],uint256[])", +"401c3ba1": "LogClaimRefund(address,uint256)", +"401d7175": "_buyShip(uint256,address)", +"401dc09f": "setGeneSynthesisAddress(address,address)", +"401e3367": "transferFrom(address,address,uint256,bytes32)", +"401e77de": "GameCreated(bytes32,address,string,string,uint16,uint64)", +"401f2be5": "collectRemainingFunds()", +"40202f9d": "LogTransaction(address,uint256)", +"4021581a": "dollarBalance(address)", +"40217452": "ProdBToken()", +"40217786": "setRatePerOneEther(uint256)", +"4021d93c": "Alibabacoin()", +"40220b03": "previousVersion(bytes32,bytes32)", +"40222b64": "allocationsIndex(uint256)", +"40229e14": "B_Com()", +"4023da38": "Bacini(uint256,string,uint8,string)", +"40243ecd": "SimplePaymentChannel(address,uint256)", +"402456c0": "bank1Val()", +"4024a33e": "stageBonusPercentage(uint256)", +"4024db80": "license(bytes32)", +"4024eb2a": "approveAndCallN(address,uint256,uint256)", +"4025005a": "SmartIdentity()", +"4025b22d": "getShip(uint256)", +"4025b293": "redeemAllOutcomes(bytes32,uint256)", +"4025b5a8": "ownerUpdateContractBalance(uint256)", +"40267e53": "updateWhitelistBatch(address[],uint8)", +"4026b261": "PlatoToken()", +"4026c101": "deathFactor_iii()", +"4026eb92": "endround()", +"4027522c": "DanetonToken()", +"40275f73": "addMapping(string)", +"40275f85": "getPersonalDepositAddress(address)", +"40277604": "collectedFeesInTwei()", +"40278124": "setListedTime(uint256)", +"4027b475": "MasterCardEscrow()", +"4027d4d8": "spendFromSwap(bytes32,uint256,address)", +"4028354b": "PlaceADiceBet(uint8)", +"40285ad5": "setfees(uint256)", +"4028db79": "isFrozenAccount(address)", +"402914f5": "claimable(address)", +"402962bc": "deleteAddressesFromWhitelist(address[])", +"4029a3ce": "mintMany(address[],uint256[])", +"402a1533": "angelAmountRemaining()", +"402b2bca": "IcoStartDate()", +"402bf0ab": "_delHolder(address)", +"402c5644": "XNON()", +"402c569c": "unlockBonusTokensClaim()", +"402caccd": "RANGESTART_6()", +"402d1c9c": "CONFIG_MAX_EXPOSURE_MUL()", +"402d5f2e": "unlockTokenPriceChange()", +"402d8883": "repay()", +"402e46b9": "finito()", +"402e6230": "getTotalGambles()", +"402e912f": "issuedInsurance()", +"402eb694": "reliabilityPercentage()", +"40307cdd": "setCOMMUNITY_POOL_ADDR(address)", +"4030bc19": "sendRTB(address,uint256)", +"4030ddc0": "blockVContractAddr()", +"4031f60d": "INMCOIN()", +"40326686": "paymentsFinished(uint256)", +"4032b72b": "addKeeper(address)", +"4033236e": "getProofOfStakeReward(address,address)", +"4033c268": "isFullInvest(address,bytes5)", +"4033cd77": "applyForCertification(string,string,string,uint256,bool)", +"403446bd": "getPlayersFibokens()", +"4034af00": "setWhitelistInternal(address,bool)", +"4034b817": "loadVersion(address)", +"4034cfed": "fundWallet1()", +"403575f7": "setMaxMessagesTop(int32)", +"4035d16a": "createPromoCovfefe(address,string,string,uint16,uint256)", +"403639d5": "StartSale(address,uint256,uint256,address,address,uint256,uint256,uint256)", +"40365852": "roundStart()", +"4036778f": "reveal(uint256,bytes32)", +"4036ab78": "getType(uint256)", +"4036ff30": "changeHouseCutPercentage(uint256)", +"403911a6": "tokenSaleStart()", +"40394dcc": "freezeAccountByTime(address,uint256)", +"403988c6": "setCustodianName(address,bytes32)", +"403a0a78": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint256)", +"403a734a": "MMMbCoin(uint256)", +"403a8f53": "registerForRaffle2()", +"403abbc7": "updateFirstActiveGamble()", +"403b0cfd": "LogErr(uint256)", +"403b3757": "getValueTip(uint256)", +"403b7d9b": "secondRoundICOEnd()", +"403bb94e": "StatsEthereumRaised()", +"403c617e": "Hydrogen()", +"403c9fa8": "getPot()", +"403d8a6a": "initialMartialTimes()", +"403dca55": "totalIssuedSynths(bytes4)", +"403de107": "executeDecision(uint256)", +"403e73ea": "_DemSinhVienDat()", +"403f6cff": "putInWinnerPool(uint256)", +"403fbf54": "initiateEthUsdOracleUpdate(address)", +"40400fa7": "getBurnedItemCount()", +"404239f6": "validateLegalRate(uint256,uint256,bool)", +"40426fb0": "stopIssuing(uint256)", +"40429946": "oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)", +"4042b66f": "weiRaised()", +"40440891": "Donate_some_amount_and_save_your_stake_rewards(uint256)", +"40441eec": "balance2()", +"40445a4f": "numTiers()", +"4044856a": "preIcoEthers()", +"4044e8ec": "cancelOrderWithPayer(string,address)", +"4045c846": "setAccreditationActive(bytes32,bytes32,bool)", +"404635db": "_canBreedViaAuction(uint256,uint256)", +"404704b9": "sendBounty(address,uint256)", +"40477126": "exchangeTokens(uint256)", +"404823d1": "wagerPool()", +"40482475": "startTokenSwap()", +"4048c449": "getParent(bytes32)", +"40490a90": "getMultiplier()", +"40496aef": "SecuredWithRoles(string,address)", +"404983fb": "addsm(uint256,uint256)", +"40499ae8": "approvedTill()", +"404a9272": "promoEndTime()", +"404ae80c": "_randomCardSetIndex(uint256,uint256)", +"404cbffb": "entityList(uint256)", +"404cf932": "mintStart3()", +"404d0e3e": "gen0CreationLimit()", +"404ed1fa": "_founder_two()", +"404ef602": "disapproveToSell(uint256)", +"404efc53": "left26(uint256)", +"404f7d66": "challengeExit(uint256,uint256,uint256,bytes,bytes)", +"404f8dc8": "KRW_Omnidollar()", +"404fdfdf": "_setTempHeroPower()", +"4050a394": "getWishName(uint256)", +"40510399": "miningKing()", +"40512dcc": "TotalDividendsPerShare()", +"405136fa": "multiSendEth()", +"40517083": "dig(uint256)", +"4051ddac": "getSummary()", +"4051ed26": "BONUS_SLAB()", +"40520f85": "tokenToEtherRate()", +"40523946": "spectreTeam()", +"40528f98": "ownerUnlock(address,uint256)", +"4052c02a": "ProToken(uint256,string,uint8,string)", +"405353b5": "NPToken()", +"4053873c": "_safeTransferTkn(address,address,uint256)", +"4053c797": "save(bytes32)", +"40543538": "get_asset_events_count(bytes32)", +"4054834a": "refferedBy()", +"4054f5de": "EthVentures3()", +"40556191": "getCrowdsaleWhitelist()", +"40557cf1": "saleRate()", +"40557e87": "totalBondSupply_BEAR()", +"405665fb": "isMeInWhiteList()", +"4056675e": "transferTokenOwnership()", +"4056f8a8": "minimumTokens()", +"4056fe06": "MAX_GOAL_EBC()", +"405710a8": "sentTokensToCompany()", +"40582f13": "getWeiRaised()", +"405871e5": "SealPrivateCrowdsale()", +"4059240c": "intervalNow()", +"405a66da": "claimOtherTokens(address)", +"405abb41": "updateRate(uint256,uint256)", +"405b8816": "testIsContractZero()", +"405bd7bb": "getCurrentNumberOfVoters()", +"405c649c": "timeLeft(address)", +"405c6f6e": "addDelegate(string)", +"405cae3b": "LOG_SpinExecuted(bytes32,address,uint256,uint256,uint256)", +"405cb7f6": "KimJCoin()", +"405d1c32": "_getVATToPay(uint256,uint256,address)", +"405d3adf": "exchange(bytes4,uint256,bytes4,address)", +"405dd87c": "EAT()", +"405df338": "start_PREICO()", +"405f63e7": "MANHATTANPROXY9THCOLAVE()", +"405f8006": "BlocToken()", +"405fea2f": "setTokenAudit(address,address,address,address)", +"4060d9f5": "isCarSpecial(uint256)", +"40621412": "BetexICO(uint256,uint256,uint256,address,address,address)", +"4063d563": "advertise(address)", +"406499d2": "Redhorse()", +"40650c91": "MIN_CONTRIBUTION()", +"40652435": "BURENCY()", +"40654e14": "balanceOfEth(address)", +"40656963": "contribute(bool)", +"40664496": "getTransferFee(address,address,uint256)", +"4066fdea": "feeProvider()", +"4067ffda": "transactionsOnForHolder(address)", +"406838b3": "etoken2()", +"40684172": "getICORaisedAmount()", +"406843ee": "recommendProportion()", +"4068665d": "TokenVesting(address,uint256,uint256,uint256,bool,address)", +"40695363": "floor()", +"40695625": "testRetractLatestRevision()", +"40698729": "withdrawERC20s(address,uint256)", +"4069925a": "releaseVested(address)", +"4069de8b": "MultiSender(address,address)", +"406a0e61": "VOLUME_50()", +"406a1180": "FATRANSOM()", +"406a318e": "getCitationRecordsLength(bytes32)", +"406a6f60": "attachToken(address)", +"406af848": "ArenplayToken()", +"406b0593": "tokenHoldersByIndex()", +"406b9394": "level0(address,bytes32,uint256)", +"406c22d3": "getLocalNodeReputation(address)", +"406c52d5": "changeElectorate(address)", +"406c5590": "FILO()", +"406c6633": "moveToNextCeiling()", +"406c92b5": "PRIVATE_SALE_MAX_ETHER()", +"406d7e98": "isAllowingTransfers()", +"406d81c7": "safeSendFunds(address,uint256)", +"406f1d22": "crowdSaleApprove(address,uint256)", +"406f390c": "_unsafeCall(address,uint256)", +"407001c6": "TruSale(uint256,uint256,address,address)", +"4070372d": "earlyInvestorsMintedTokens()", +"40710587": "usersCanSell(bool)", +"407167b6": "cantEntidades()", +"40716fc7": "DunderBet()", +"4071f89b": "payCharity()", +"40722e3e": "getNameReaderId(bytes32)", +"407235ba": "LogStop()", +"407255b5": "getWhitelistByIndex(uint256,address)", +"407299ba": "getWarriors(uint32[])", +"4072eee2": "getTopic(address,uint256)", +"4073002e": "AssetCollectionNum()", +"40731c24": "getPost(uint256)", +"40732c89": "makeDeposit()", +"40734387": "termination()", +"407456d1": "fundsOf()", +"407489ff": "concat_nodes(address[])", +"4074c648": "createPromoCollectibleWithMining(uint256,address,uint256,uint256,uint256,uint256)", +"407532bb": "presaleFundingTargetInEther()", +"40753a76": "addSupply(uint256)", +"40754714": "blockClient(address)", +"407617e5": "updateAmountIncrease(uint256)", +"4076a248": "BetPower()", +"40773279": "pay_Bounty(address,uint256)", +"407787e6": "Division(uint256,uint256)", +"4077aa14": "coreStaffAmount()", +"4077aaf8": "totalBountyTokens()", +"4077ef5d": "getMiniPoolEdit_4()", +"40784ebd": "slashInvalidUsername(string,uint256,uint256)", +"40786dec": "mint(bytes32,uint256,bytes32)", +"4078fca8": "feeETH()", +"40799f4c": "currentDayRate10000()", +"407a5c92": "getAdminLogN()", +"407a6727": "totalVIP()", +"407b899b": "returnInt64(int64)", +"407c554a": "getTSTTokenAddress()", +"407ca6f8": "BsktToken(address[],uint256[],uint256,string,string)", +"407cba67": "buyKNOW()", +"407cfe5e": "get_all_players()", +"407d0cd0": "addGame(string,uint256,bytes32[])", +"407d1a0c": "unstoreHorsey(uint256)", +"407d2a67": "_figthCommander(address)", +"407d552a": "jackpotTokenWinRewardRate()", +"407e5e5d": "newVoting(bytes,string)", +"407e9588": "rejectMintRequest(uint256,string)", +"407e9e2c": "setcommissionCompany(uint256)", +"407ea214": "getPortion(uint256,address)", +"407ed2e2": "ComputeSell(uint256)", +"407f56e5": "HEAL()", +"407f8001": "secondsPerPeriod()", +"407fb687": "exchangeEtherForNomins()", +"407fc2e8": "eggsSold()", +"407fcc31": "tokenPriceUSD()", +"407fce7b": "left12(uint256)", +"4080277f": "guhb(address)", +"408056e4": "weiMinInvestment()", +"408057c4": "getStockCount(address)", +"40806f7c": "getAvailableFees()", +"40807049": "transferManyLands(uint256,uint256[],address)", +"40809acd": "stake(uint256,uint256,address,address)", +"40809f9d": "calcEma(uint256,uint256,uint32,uint256)", +"4080c884": "XstarToken()", +"40811e90": "transferDataAuthority(address)", +"4081c065": "massGrant(address[])", +"4081d916": "checkPlayerExists(address)", +"408275bb": "transferToVault(bytes32,address,address,uint256)", +"40828698": "s(address,address,uint256)", +"4082b499": "totalNumberOfPurchases()", +"4082defb": "isBasicAccount(address)", +"408318ae": "addAllowCnsContract(bytes32,address,bytes32)", +"4083c555": "Oasis(uint256,string,uint8,string)", +"4083cdbb": "changeTokensLimit(uint256)", +"4083e2af": "getFinalRoundPoints(uint160)", +"4083e935": "transferEthersInternal()", +"40844a8d": "safeDeduct(uint256,uint256)", +"40848af5": "markMyWord(bytes32,uint32)", +"4084c3ab": "finalizedBlock()", +"40857e02": "create(address,address,uint256,bytes32,int256)", +"4086b620": "sweepsCreationTime()", +"408760b8": "setAngelLastVsBattleTime(uint64)", +"40876f6e": "getMaxMakerAmount(address,address,bytes)", +"4087908f": "RicoToken()", +"40884c52": "getOracles()", +"40890bc2": "getCurrentProvider()", +"408938d0": "testUpdatePackageDb()", +"4089462d": "registerPackage(bytes32,string)", +"40896550": "bountyTotal()", +"4089b170": "totalPayouts()", +"4089d22a": "buyDepo(address)", +"408a2ac9": "addNewSupplier(address,address,uint256)", +"408a8094": "releaseTeamTokensAfter24Months()", +"408aee81": "removeVendorByAddress(address)", +"408b9945": "getBuyerNumber()", +"408bcbda": "getBalancesLength()", +"408bf4c3": "getAllCompanies()", +"408c1932": "distributeDisputeFunds(address,address,address,address,uint8,bool,address,uint256,uint256,uint8)", +"408cfe24": "iToken()", +"408d407d": "getClaimData(uint256,uint256,uint256)", +"408d5773": "createContractCovfefe(string,string,uint16)", +"408d947e": "SmartToken(string,string)", +"408d9e35": "ExecutorChanged(address)", +"408e097c": "createDestructibleCloneToken(address,uint256,string,uint8,string,bool)", +"408e2727": "votingActive()", +"408e2eb4": "ico2Tokens()", +"408ee7fe": "addAlerter(address)", +"408fef2e": "requiredMessageLength()", +"40901b08": "p_setLimitedReferralsMode(bool)", +"40908298": "allowedAddress(address)", +"4090cb64": "getWToken()", +"4090e696": "GetMinCost(uint256,uint256,uint256)", +"4091adf5": "onlyOwnerGetCompanyWallet()", +"4091ca4c": "gettopuser(address)", +"4091f4c6": "refreshMonarchyGames()", +"409242fc": "citation(uint256)", +"4092a611": "upVote(bytes12,bytes12)", +"4092acdd": "tokenFulfillmentDeposit(address[2],uint256[8],uint8,bytes32[2])", +"4092e2c2": "addMember(bytes32,address)", +"409315ce": "executePure()", +"4093b49c": "votes_for()", +"4094ac75": "ProofOfWeakHandsClassic()", +"4094ef5e": "addDataRequest(string)", +"40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", +"40954254": "addPublicSalesSpecialUser(address)", +"4095fbba": "SubmitTransaction(bytes32)", +"40966a97": "CMCEthereumTicker(address,uint256)", +"40976b60": "setNewAgent(address)", +"4097d865": "increaseRound()", +"40980953": "setWhitelistOff(bool)", +"409817b1": "FOTToken(address)", +"40992e9d": "getTotalAirDroppedAmount()", +"40998845": "_recordName(address)", +"409a3d8f": "ALLANCOIN()", +"409b479c": "GetTotalPlayers()", +"409bc43c": "changePersonalMaxcap(uint256)", +"409bd95b": "getProductionTimeBusiness(uint256)", +"409c7baf": "BONUS_MIN_DURATION()", +"409c962e": "view34()", +"409dba83": "calcKeysReceived(uint256)", +"409e81a4": "Create(uint256,uint256,uint256,uint256,bool)", +"409ed1db": "setCCH_edit_5(string)", +"409f2607": "ESCOToken()", +"409f33c1": "sumPublicSale()", +"409fb4c0": "configMaxKeys()", +"409fc358": "canGiveMoneyBack()", +"40a0dd4b": "updateStateBasedOnTime()", +"40a141ff": "removeValidator(address)", +"40a19a71": "BLOCKSUNTILCLEANUPSTACK()", +"40a1b96e": "getTickets(uint8)", +"40a1f4d5": "invalidateStage(uint256)", +"40a1f87d": "getTotalLockedTokensPerUser(address)", +"40a203c4": "CoinVillaIssued()", +"40a2bfc1": "setXPAAssets(address)", +"40a3a9c7": "createTokenLocker(address,address)", +"40a3d246": "toggle()", +"40a401d0": "setMonsterIndexToOwner(uint256,address)", +"40a4437e": "setBattleProviderAddress(address)", +"40a45440": "getPlayerBetNumbers(address)", +"40a49a96": "searchSmallestInvestor()", +"40a4c3cc": "loanCreator()", +"40a4c580": "validateTransfer(address,address,uint256,bytes,bytes)", +"40a50a5e": "setNormalBuyLimit(uint256)", +"40a51199": "PubPresale(address,address,address)", +"40a53017": "FeedEgg()", +"40a53ab9": "replaceAuditorRegistry(address)", +"40a5737f": "setIndex(uint256)", +"40a57cb8": "makeAdmin(address,bool)", +"40a5bfc5": "PentacoreToken()", +"40a72363": "sigTeamAndAdvisersAddress()", +"40a7ed8b": "uintFunc(uint256,uint256,uint256)", +"40a806ed": "_borrowTokenFinal(address,bytes32,uint256,uint256,address,address,bool)", +"40a8a96c": "KingdomCreatedEvent(uint256)", +"40a915a5": "setTokensLocked(bool)", +"40a92f0f": "setMinSign(uint40)", +"40aab81b": "UpdatedBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32,address)", +"40aad0fe": "getUserPair(address)", +"40ab2634": "lastBlock_f8()", +"40ab4879": "pePrice()", +"40ab7b8c": "bnt()", +"40ac40b2": "setInvitationMultiple(uint256)", +"40ac89a2": "returnInvestment()", +"40acbee3": "TokenFactoryAirdropToken()", +"40acf805": "setCompanyInfo(bytes32,string)", +"40ad654c": "transferForVote(address,uint256)", +"40adf94e": "setOraclizeGasPrice(uint256,uint256)", +"40ae0851": "withdrawEtc(address,uint256)", +"40aec640": "bonusState()", +"40aee1a9": "numHashTypes()", +"40af1a45": "PrivateSaleDays()", +"40b00033": "deposit(string,uint256,bytes,uint8,bytes32,bytes32)", +"40b0a77f": "updateInstantTrade(address)", +"40b0c3d1": "DiligenceToken()", +"40b12b40": "testIsTrue()", +"40b14606": "getOverPLayer()", +"40b1ad52": "slashReservedUsername(string,bytes32[],uint256)", +"40b31937": "pledgeDecline(uint256)", +"40b359f5": "markTaskCompleted(address,bytes32)", +"40b43701": "getSetting(uint256)", +"40b5336d": "_updateDepositCountry(uint256,uint256,uint256)", +"40b5886b": "getHotWalletAddress()", +"40b5ce01": "fightStartTime()", +"40b60b85": "forceBuyback(address)", +"40b61fe9": "removeOperator(address,address)", +"40b6290f": "acceptSale()", +"40b6c71f": "EthLyteToken()", +"40b73897": "getFeeWindow(uint256)", +"40b74c91": "dislikeArtist(address)", +"40b7802d": "GiveUpTheDough(address)", +"40b7b240": "calculateAmount(address)", +"40b80684": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE4()", +"40b8783d": "raiseSlammer(bytes32,bytes32,bytes32)", +"40b8d53a": "startFeeExit(address,uint256)", +"40b98253": "canContribute()", +"40ba0e94": "getRegion(uint256)", +"40bb28e8": "watchVideoB(address)", +"40bb8474": "RENEETOKEN()", +"40bbf5b9": "ChunksToken()", +"40bc9308": "startTimeRound1()", +"40bcff15": "bet1000_01eth()", +"40bd8720": "_changeOslikiFoundation(address)", +"40bdd3e9": "bytesEqual(bytes,bytes)", +"40bea8d2": "lockedEndTimeOf(address)", +"40beafc9": "depositToTWI(uint256)", +"40beee2b": "setPermanentPlatinumLevel(address,string)", +"40bf6424": "removalPrice()", +"40bff23d": "_createCard(uint256,address)", +"40c00acf": "invest_mined()", +"40c05401": "getWithdrawableAmountFIIT(address)", +"40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", +"40c0c5ff": "PityToken()", +"40c0ece3": "updateMyReturns(uint256)", +"40c10f19": "mint(address,uint256)", +"40c243c9": "totalEthRefunded()", +"40c2dc4a": "getCCH_edit_6()", +"40c3198e": "getBenzByOwner(address)", +"40c3418c": "sendCrowdsaleBalance(address,uint256)", +"40c36524": "getFreeHatchCnt()", +"40c37ed2": "sellGameLockedToken(uint256)", +"40c3a6db": "MaxNumberOfBetsChanged(uint256)", +"40c3b187": "left37(uint256)", +"40c3b18e": "approveTransferableToggle()", +"40c44c5b": "DivisibleFirstCommonsForumToken()", +"40c44f6a": "setNewCFO(address)", +"40c48c8d": "setNewPriceInFinney(uint256)", +"40c48dfa": "Entropy()", +"40c558b2": "releaseCatIndexUpperBound(uint256)", +"40c58b2b": "get_foreign_balance(address)", +"40c5b34e": "currentPhaseId()", +"40c65003": "bonusEnds()", +"40c657c7": "buyTokens(address,uint256,uint256,uint256,uint256)", +"40c73d17": "changeAnimator(address)", +"40c7535b": "TangToken()", +"40c7e279": "requiredPlayers()", +"40c7e707": "contributeBTC(address,uint256)", +"40c85a59": "getLestCommonMulArray(uint256)", +"40c87214": "_startNewMiningEpoch()", +"40c8a90a": "GetLastMsg()", +"40c91c05": "submod(uint256,uint256,uint256)", +"40c92ae6": "multisigwallet(address[],uint256)", +"40c97617": "getReferralAddressShare()", +"40c9adcf": "_cancelOffer(uint256)", +"40c9e804": "SanityRates(address)", +"40ca0f05": "W0keAFPresale(uint256,uint256,uint256,address)", +"40ca925d": "ChannelManagerContract(address,address)", +"40caae06": "setOwner()", +"40cc1239": "TokenEmission(string,string,uint8,uint256)", +"40cc35ce": "teamWithdrawalProposed()", +"40cc8854": "bite(bytes32)", +"40cd988d": "refundBroadcaster(uint256)", +"40cde403": "exchangeBalanceOf(address)", +"40ce1d43": "EWWCOIN()", +"40ce5062": "isPublicSaleNoBonus()", +"40ceb451": "increasePromoCreatedCount()", +"40d0a103": "MarketOrderEvent(uint256,uint128,uint8,uint16,uint256,uint256)", +"40d113da": "sqrtAsm(uint256)", +"40d1d255": "claimEndTime()", +"40d1df53": "etStringValue(bytes32)", +"40d21e6a": "getRelations(uint256)", +"40d22cf8": "completedTasks(uint256)", +"40d2e73c": "VanHardwareResourcesChain()", +"40d32df9": "MetaIdentityManager(uint256,uint256,uint256,address)", +"40d3d25a": "playersStorage(address)", +"40d40a72": "MANAGE_CAP()", +"40d48958": "_endTime()", +"40d67116": "setTokensPerOneETH(uint256)", +"40d681cb": "setupPresaleClaim()", +"40d699b7": "deathData_a4()", +"40d75432": "provideExchangeRate(uint256,uint256,uint256)", +"40d7b7b8": "dollarPrice()", +"40d7f7e8": "Staked(address,bytes32,uint256,uint256,uint256,uint256)", +"40d815cf": "Cyberium()", +"40d84b52": "updateCase(address,uint256)", +"40d8c74f": "checkForPayout()", +"40d96e6c": "finalizeSale3()", +"40da948f": "updateUnit(uint256)", +"40db4b09": "tokensOwedByInterval(uint256,uint256,uint256)", +"40dca307": "buyCoinsUpdateState(uint256)", +"40dda9af": "USER_LOCK_BLOCKS()", +"40de2784": "buildICOStageTwo()", +"40debefd": "SomeCoin(string,string,uint8)", +"40dee0c5": "LogRedeem(address,uint256,bytes32)", +"40df280e": "alliesContract()", +"40df78b6": "bankBurnFrom(address,uint256)", +"40e0653c": "_getLevel(uint256)", +"40e099ac": "makePromise(uint256)", +"40e15134": "presaleDist()", +"40e1e62b": "RedSoxYankees412()", +"40e2ad58": "buyOwnedPixels(bytes32)", +"40e31490": "killAnimal(uint16)", +"40e40765": "setTokenSaleHardCap(uint256)", +"40e424ee": "chooseWinner(bytes32)", +"40e4ebf4": "GenDayRatio(uint256)", +"40e50d00": "gcsc(uint256)", +"40e58ee5": "cancel(uint256)", +"40e5f3cb": "getEtherBalanceOnCrowdsale()", +"40e63ef3": "getPubKeyByHash(string)", +"40e687a9": "blockno()", +"40e6b00a": "createRefundPoll()", +"40e7261d": "Golem()", +"40e87f13": "dropTokenV2(address[])", +"40ebe5bc": "SHARD()", +"40ec0b6a": "isCurioAuction()", +"40ecb7f2": "isTransferValid(address,address,uint256)", +"40ed79f4": "hashimoto(bytes32,bytes8,uint256[],uint256[],uint256)", +"40eddc4e": "getCollectedEther()", +"40ee2485": "CryptoCovfefes()", +"40eedabb": "leader()", +"40ef4704": "getState(bytes10)", +"40ef78a7": "getExploreData(uint256)", +"40f03605": "existingContribution(address,address)", +"40f04616": "_buyDiscountTTW(uint256,uint256,address,address)", +"40f0a21f": "ceil(uint256)", +"40f10af2": "revokeAttribute(address,address,string,bytes)", +"40f12a02": "getPureWeaponDamageFromTokenId(uint256)", +"40f13c0f": "mintingFoundersFinish()", +"40f13db5": "addWhitelisted(address,address)", +"40f19da7": "isFinish(bytes32,bytes32)", +"40f29da3": "testReturnsProductInformation()", +"40f2a50b": "findDsp(address)", +"40f313b9": "ImportRemappingTestA()", +"40f354f3": "insertTopic(bytes15,address,string,string)", +"40f3633e": "icoMin()", +"40f3b6f1": "yourShares(address)", +"40f3c364": "ProjectTag()", +"40f47d41": "registerNameByCOO(string,address)", +"40f523f9": "TourMEToken()", +"40f54c08": "TrumpCoins()", +"40f56cfb": "PYPToken()", +"40f5c954": "sumICOStage8USD()", +"40f5ed88": "XPS()", +"40f702b4": "userInfo(string,uint256)", +"40f81cb5": "providerAllowance(address,bool)", +"40f828a2": "setLiquid(bool)", +"40f9b34c": "BetrTokenPurchase(address,address,uint256,uint256)", +"40f9c62c": "setLargeWalletAddress(address)", +"40f9cdf9": "get_tokens_count(uint256)", +"40fa368c": "getOrderHash(bytes32,uint256[2],address,bool,uint96)", +"40fa61f7": "upgradeFee()", +"40fc5e7a": "upgradeableTarget()", +"40fdef80": "administration(uint256,string,uint256,uint256,address)", +"40fdf515": "issuetender(address,uint256,uint256)", +"40fe90d0": "setFreezeOut(address[],bool)", +"40ff26ba": "adminAdd(address,string)", +"40ff38b2": "rootDomain()", +"40fff80c": "setCommissionAddress(address)", +"41002439": "amIReady(address,address)", +"410085df": "refund(address,uint256)", +"410090db": "ChangeEmissionGrowthCoefficient(uint8)", +"410158cd": "Winsshar(address)", +"4102bf5c": "getAvailableAmount(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"4102f4e8": "mToken(address,uint256)", +"41031b1d": "NutzEnabled(address,address)", +"4103257e": "ReceivedETH(address,uint256)", +"410366c1": "settleDispute(bytes32,uint256,uint256)", +"4103c4c4": "OwnedHelper()", +"410453ae": "serverEndGame(uint32,int256,bytes32,bytes32,uint256,address,address,bytes)", +"4104df21": "cardsMinted()", +"4105048d": "Revealed(uint256,uint8)", +"410520f7": "PrivateReserveCoin()", +"4105e02f": "remark1()", +"41061c04": "addVestingMember(address,address,uint256,uint256,uint256)", +"410646e0": "getUnclaimedAmount(address,uint16)", +"41068ae2": "LicenseCore()", +"41080cfa": "getLLV_edit_7()", +"41095b60": "voteForUltimateOutcome(bytes,uint16)", +"410968d8": "MajLastNotVal()", +"41097886": "LogAirDrop(address,uint256)", +"4109a71a": "CerttifyCrowdsale(address,address,address)", +"410a1d32": "getDonation(address)", +"410a1db1": "setCommunityPool(address)", +"410a6734": "setAllBlockHashes()", +"410a68b5": "setOraclizeCallbackGasPrice(uint256)", +"410ace1f": "EOSBetSlots()", +"410af6b6": "allowAddressDelegate(address,address)", +"410b1da8": "currentTotalSupply()", +"410bf4bf": "CloudMoolah()", +"410c2601": "testGetAccountBalance()", +"410c47a0": "bb(uint256)", +"410c8005": "SetReciver(address)", +"410c83a3": "get_amount_get_buy(uint256)", +"410cbcc6": "YaoToken(uint256)", +"410da27d": "surveyEndAt()", +"410dbad6": "setaddress(address,address,address,address)", +"410dcc42": "setSeedHash(uint256,bytes32)", +"410e05b3": "bdevIssue(address,uint256)", +"410e7b42": "TestCoin()", +"410e8340": "checkAndConfirm(address,bytes32)", +"41104ef9": "GlobalOperatorChanged(address,address)", +"41107bee": "parseSums(bytes)", +"4110a489": "validatorsState(address)", +"4110b2c9": "addCapital()", +"411273d8": "getTokenToEthAddOrderHint(uint128,uint128)", +"4112987c": "strConcat(string,string,string)", +"4112b7f1": "tryGetNameOwner(bytes)", +"4112ea75": "SongTokenExchangeContractSet(address,address,bool)", +"41130267": "fxxkicotestToken()", +"4113d05b": "createGen0TokenWithDna(uint256)", +"4115f883": "requestAuditWithPriceHint(string,uint256,uint256)", +"411615fd": "investorWithdrew(address,address)", +"41161aac": "X(uint256,string,string)", +"41163f7c": "deedCount()", +"4116dfc3": "getMetaDataCount(address,bytes32)", +"411735ee": "getAddressGains(address)", +"41179685": "finalizeContruibute()", +"4118cbc9": "setTokenExchangeRate(address,uint256)", +"41192788": "refund(address,address[],uint256[])", +"41193c18": "blockPlaylist(string)", +"411a1714": "setOperational(address[],bool)", +"411a1ac1": "BitcoinEye()", +"411a3dcf": "forward(address,uint256,uint256)", +"411a42ea": "ConeTest()", +"411a492e": "getNumOfLotteryTickets()", +"411ae567": "setSlogan(uint256,bytes)", +"411b007e": "founders()", +"411b65ef": "setPropertyLastUpdate(uint16,uint256)", +"411c4e72": "ModifyFeeFraction(uint256)", +"411cc791": "transferWithParams(address,uint256,uint256,uint256,uint256)", +"411d3021": "MahalaCoin()", +"411d6e19": "USDETH()", +"411dddb2": "TrueVeganCoinPresale()", +"411e6832": "tokenObj()", +"411f93d1": "transferTicket(address,address)", +"411fcce5": "BitcoinSoft()", +"41203243": "dateOfBonusRelease()", +"4120a236": "FreeNapkins()", +"4120a800": "PrepareRollEvent(address,uint256)", +"4120bcec": "forceRecoverCollateralOnBehalfOf(address,bytes32,address)", +"41215aff": "NewUpgradeMaster(address)", +"4121b9f8": "SBECoin()", +"41224405": "get_planet_price()", +"41225b0e": "broadcastSchellingRound(uint256,uint256)", +"412282cd": "addOwnerAccount(address)", +"41228803": "updateBalance(address,uint256,bool)", +"4123057e": "update_oraclize()", +"41237fd5": "levBlocks(address)", +"4123a0ac": "deleteToken()", +"4123a482": "transferTx(address,uint256)", +"4123cb6b": "m_numOwners()", +"41240314": "teamTwoSharePrice()", +"4124a6a7": "getLockedFunds()", +"41252b55": "FreezeTransfers(address,bool)", +"41264107": "TEChain()", +"412648bf": "setAvatarIndex(uint256)", +"412661c4": "_setAuth(address,address)", +"412664ae": "sendToken(address,uint256)", +"41266ae8": "Composed(uint256,address,uint32[5],uint32[5],string,string,uint8[20])", +"4126d29e": "justFailRequire()", +"412740c5": "balanceWithInterest(address)", +"41275358": "feeAddress()", +"4127d54a": "tokensForPresale1()", +"41282fe0": "usersCanUnfreeze()", +"41288e76": "sendEtherToMultisig()", +"412956ce": "goBackToPrivateSale()", +"412988e7": "subSupply(uint256)", +"4129912c": "misub(uint64,uint64)", +"4129a9d5": "newIcoRound(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4129b2c9": "getWinner(uint256)", +"4129b8ed": "remainingTokenHolder()", +"4129d7d1": "MessageSent(address,address,uint256,string,string,uint256)", +"412a5a6d": "createContract()", +"412a7be0": "athlete()", +"412b2ee0": "forkMe()", +"412c0b58": "initiate(bytes32,address,bytes32,uint256)", +"412c0c2d": "getWin(uint256)", +"412c7dfb": "FOUNDER_WALET()", +"412cbc06": "assetsCount(address)", +"412e829f": "LoveTracker()", +"412ec94f": "updateTokenPoolAddress(address)", +"412edecd": "setDAOAndMultiSig(address,address)", +"412eee05": "enactProp(uint256)", +"412f83b6": "getDelegatorUnbondingLock(address,uint256)", +"41300d03": "secondBonusRate()", +"41304fac": "log(string)", +"413100e0": "getLeftoverWei(address)", +"4131775e": "_removeUserCity(address,uint256)", +"4131f609": "verifyWining(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", +"41326679": "inVaults()", +"4132bae8": "calculateRAUS()", +"4133e7a1": "GxCancelOrders(address)", +"41348053": "ratePlanOfVendor(uint256,uint256)", +"413499f1": "deleteVoters()", +"4134a92a": "registerResource(bytes32,uint256,bytes32,string)", +"41354590": "setAtomIsBuy(uint256,uint128)", +"413699de": "setOwnerName(address,string)", +"4136aa35": "isAlive()", +"41388aed": "TokenHash(string,string,uint8,uint256)", +"41388c71": "DolyToken()", +"41395efa": "dgxBalance()", +"41398b15": "ethAddress()", +"413992b3": "createWarranty(string,string,address,uint256,uint256,uint256)", +"413a7f9a": "MethNSupply()", +"413ab4a8": "_reserve()", +"413abc3d": "min_share_price()", +"413bac7a": "jackpotinfo()", +"413bba97": "withdraw(uint256,bytes,address[])", +"413bc8eb": "TableDeRapprochement_322()", +"413c6d13": "setAddressValue(string,address)", +"413d18cb": "currentMessage(uint256)", +"413d7b08": "mainSaleTLYperETH()", +"413d9c3a": "LOCK_TIME()", +"413dc451": "countPerfClients(address)", +"413e31a8": "Testita()", +"413e4aaf": "calculateOwnerFee(uint256)", +"413e90e7": "putHashes(uint256)", +"413e920d": "oneMillion()", +"413ed292": "logState(string,uint8)", +"413f50da": "addAddressToWhitelist(uint256,address)", +"413f7d4c": "SECONDS_BETWEEN_ROUNDS()", +"414053be": "best_adjustment_for(bool,uint128)", +"41409437": "publishMetaData(bytes32,bytes1)", +"4141a121": "ETHERlemon()", +"4142f460": "segundos()", +"4143125f": "dusttorafflepot()", +"41431908": "setManagerAddress(address)", +"41434351": "oneday()", +"41445fd2": "c4c()", +"41446e0a": "bankersAcceptanceOfDeal()", +"4145aa9d": "grantMythexTokens(address,uint256)", +"41461bad": "gracePeriodStartBlock()", +"414689ff": "unlockAmount()", +"4146e099": "getCurRoundInfo()", +"4147060a": "LogRequirementChange(uint256)", +"41470877": "returnVesting()", +"4147e15e": "verifyOptionPoolMembers(address)", +"4147ffe5": "bitfwdToken()", +"41481372": "Fight(uint256,uint256,bool,bool)", +"41488cc9": "depositData(bytes32,address,uint256,address,uint256)", +"4149953d": "transferRestore(address,address,uint256)", +"414b49a2": "setFreeLOT(address)", +"414b7ad6": "updateAff(uint256,uint256,uint256,uint256)", +"414b85e4": "isPreIco(uint256)", +"414bbda2": "declineCoins(address,uint256)", +"414c2aab": "MemberHandler(string,address)", +"414c377b": "updateSaleLimit(uint256)", +"414c4a8d": "maxAmountToSell()", +"414ceac0": "investorAddFee(uint256)", +"414d784e": "DECIMAL_ZEROS()", +"414db054": "Loss(address,uint8,uint256,bytes32,bytes32,uint256,uint256)", +"414db89e": "tokenForSale(uint256)", +"414e2e9e": "walkTowardsBlock(uint256)", +"414e5738": "panicOn()", +"414ee145": "lastBlock_f18Hash_uint256()", +"415016f4": "getBalance(uint16)", +"4150f4cd": "setSysAcc(address)", +"415194fb": "referral_ledger(address)", +"41522e41": "setHighWater(uint256)", +"41524433": "sellKissBTCWithCallback(uint256,address,uint256)", +"4153090e": "startFavorEscrow(uint256,uint256,uint256)", +"41533ba7": "getRateByTime()", +"4153d65b": "securePay(uint256)", +"4153d751": "onTransferOwnership(address,address)", +"41541318": "createPromoNinja(uint256,address)", +"4154aede": "refund(address,uint256,address)", +"415510df": "addressPreSale()", +"41554a2e": "issua(uint256)", +"41555acd": "storeOwner(address)", +"41562e69": "insertNodeBatch(bytes32,bytes32[2][5])", +"41566585": "whitelistAddress(address)", +"4156fdb7": "createSwap(uint256)", +"41583c4b": "_updateCardClaimerAddress(uint256,address)", +"4158506a": "participantsLength()", +"41585a0c": "increaseCount(bytes32)", +"41587b08": "addWeapon(uint8[176],uint8,uint8)", +"4158d848": "fundChecking()", +"41595f04": "ALLOC_RESERVED()", +"4159712a": "LogOwnerEthWithdrawn(address,uint256,string)", +"415a0d46": "_preValidateTokenTransfer(address,uint256)", +"415bc701": "HCPTToken()", +"415bd3fa": "_report(bool,string)", +"415c7593": "autoRentByAtom(uint256,uint256)", +"415dd7d8": "newRandomValue(bytes,address,uint256)", +"415eea1b": "vaultNum()", +"415ef37c": "weiSold()", +"415efb15": "setup(string,string,string,uint256,string,string,uint256)", +"415f1240": "liquidate(uint256)", +"415f47ea": "decodeOrderUserId(uint256)", +"415f9498": "commission2()", +"415fad10": "test_threeInvalidEqInt()", +"415ffba7": "close(uint256,bytes)", +"416108e2": "ERRLCoin()", +"4162169f": "dao()", +"416232af": "CampaignContract(address,address,address,address,uint256,string)", +"4163afb6": "MANHATTANPROXY8THAVE()", +"4163b5a4": "weiUsdRate()", +"4163d75d": "delPokemonFromSellingList(address,uint256)", +"4165295a": "getMixParticipantIdByAddress(bytes32,uint256,address,address)", +"416608a9": "updateTemplate(uint256,uint256,uint256,string,string)", +"4166c1fd": "getElevation(uint8,uint8)", +"4166eab4": "zeastadscredits()", +"41676f15": "isOrganizer(address)", +"4167c2fd": "setVaults(address,address,address,address,address)", +"416851a0": "testOracleQuery(string,string)", +"4168614a": "volumeBonus(uint256)", +"4168de57": "teamIssueVesting(address,uint256)", +"41696fa8": "updateMyEntity(uint256,bytes32,bytes32,bool,address,uint256,uint256)", +"416a1b62": "Liquet()", +"416ae768": "getUserState(address)", +"416bc7f6": "createSplitter(address[],string)", +"416c0d38": "adminRetrieveContractConfig()", +"416c334d": "withdrawDistributedToPoolOwners()", +"416c3f16": "eligibleAmount(address,uint256)", +"416c6383": "testConcatMemory31Bytes()", +"416c8701": "beyond()", +"416c9627": "updatePresaleBonus(uint256)", +"416ccd02": "limitVIP()", +"416cf34e": "ULCToken(address,uint256)", +"416da702": "TOKEN_USDCENT_PRICE()", +"416dc762": "endThirdPeriodTimestamp()", +"416dffb0": "cleanupURLs()", +"416e517e": "setOutcome(uint256)", +"416e6d5e": "balanceManager()", +"416e70f6": "linkToMasterWallet(address,address)", +"416f222a": "submitBid(uint256,uint256,uint256)", +"416f5483": "changeEthAddress(address)", +"41709748": "getTotalDrone()", +"4170a419": "setCCH_edit_34(string)", +"4170e191": "MiniMeBaseCrowdsale(address)", +"4170ee08": "reVote(uint256)", +"41713a37": "directTradeAllowed()", +"41718066": "hitFoundationPrecent()", +"417297a0": "issueTokensSale(address[])", +"4172d080": "tokenExchangeRate()", +"41733f7a": "fooToken()", +"4173b181": "setWeiPrice(uint256)", +"4173c27a": "REEFToken()", +"4173ffbc": "getRand(uint256,uint256)", +"41744dd4": "feeRatio()", +"4174a943": "Deposited(address,address,address,uint256)", +"4174f1a5": "TOKEN_RATE()", +"4175b307": "addAddresses(address[],string)", +"41760afc": "_setEventsHistory(address)", +"41763225": "createRewardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"4176368f": "paymentSizeE()", +"4176ce68": "IsAuthority(address)", +"41771b62": "changeFees(uint8)", +"4177340d": "openGamePlayNo(uint256)", +"4177afa6": "TIER_2_BUYIN()", +"4178617f": "addAllowedToken(address)", +"41796bea": "OfferCreated(uint256,bytes,address)", +"41799883": "decreaseSoldSaleSupply(uint256)", +"417a2909": "getUpdateTimes()", +"417a767e": "getBetsBlock()", +"417a7d60": "checkMessageData(address)", +"417b3409": "DownloadMusic(uint256,address,uint256)", +"417b86fb": "getPolicyDetailsByHash(bytes32)", +"417ba840": "checkMemberLevel(address)", +"417c73a7": "addToBlackList(address)", +"417c8d40": "SEK_Omnidollar()", +"417cb353": "totalDecimals()", +"417d5fb4": "advisersPeriodsNumber()", +"417de5b5": "mintAirdropToken(uint256)", +"417e8e67": "getCompoundedInterest(uint256,uint256,uint256)", +"417ea2dc": "platformSupplyRemaining()", +"417f204e": "GATC(uint256,string,string)", +"417fd6b6": "setMinBidAmount(uint256)", +"41808d4a": "test_remove_tail()", +"4180b70d": "KKday()", +"4180c2d5": "payout(address[])", +"4180f6ec": "RESERVED_TOKENS_FOUNDERS_TEAM()", +"4181641b": "engrave(string,bytes32)", +"41829445": "createNewCE(bytes32)", +"4182e5eb": "deleteContract(uint256,address,uint8[],bytes32[],bytes32[])", +"4182fa46": "getHouseAddressShare()", +"41831218": "maxPerPersion()", +"41832bed": "generateOrderHashes(address[4],uint256[8])", +"4183689f": "initSignetures()", +"4183f0b3": "startCardSale()", +"41843aa5": "subusermoney(address,uint256)", +"4184907e": "ESPlatts()", +"41852eb2": "BuyToken()", +"418599cb": "SerenityTeamAllocator()", +"4185f8eb": "receiveEth()", +"4185fdc5": "decreaseFrozen(address,uint256)", +"41863a7d": "victorieumICO1Token()", +"41867384": "new_bonus_for_next_period()", +"41868769": "CallAborted(address,bytes)", +"4187a193": "stageThreeStart()", +"41883b78": "withdrawHouseEarnings()", +"4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", +"418939c0": "fillBid()", +"4189a68e": "sell(uint256,address)", +"418ae602": "verificationAddressHoldersListCountMap(address)", +"418bc2ee": "updateHatchingRange(uint16,uint16)", +"418bc76c": "gasForKWH()", +"418c7de1": "currentFulfillment(string)", +"418ca0c7": "subOnStage(address,uint256,uint256)", +"418cb077": "CustomToken()", +"418cf199": "setEstimateCost(uint256,uint256)", +"418d4dcc": "collectPayoutForAddress(address,address)", +"418d75b6": "getBuyerOption()", +"418f1487": "confirmDividendsFromPot()", +"418f3a9b": "Invest(address,uint32,uint32,uint256)", +"4190af2e": "walletTokenReservation()", +"4190cfc1": "getAllQuestionAddresses()", +"4190f365": "PUBLIC_MAX_CONTRIBUTION()", +"41910104": "returnSuspendedPayments(address)", +"41910112": "DecentBetToken(address,address,address,uint256,uint256,uint256)", +"41910f90": "BASE_RATE()", +"41923c0c": "PRICE_ICO1()", +"419259ef": "reissueCert(bytes32,bytes,bytes32,uint256,bytes32,bytes,uint256)", +"4192610e": "callThisToStop()", +"419308f7": "getPreviousNode(bytes32)", +"4193b8b7": "bytesToUint(int256,bytes)", +"4193e15f": "OrbusToken()", +"419469fe": "calculateCellSell(uint256)", +"41953e90": "CoinTel()", +"4196cd4a": "stateIndexToApproved(uint256)", +"4196fad9": "mop()", +"419759f5": "depositAmount()", +"41976e09": "getPrice(address)", +"4198d24a": "mintAllocations()", +"4198e94d": "setbounty(uint256)", +"419905e5": "pray()", +"419945f8": "ExpiringMarket(uint256)", +"4199dbe6": "avvia_votazioni()", +"419a3de6": "allotItem(uint256,uint256)", +"419a88b6": "XPA()", +"419ab31e": "USERS_address()", +"419b96fa": "removeBusiness(address)", +"419bd6c0": "Nairotex()", +"419ce264": "ercToNativeBridgesAllowed()", +"419db07b": "generousFee()", +"419e6e5c": "getTotalNamesCount()", +"419e7589": "setProviderDetails(uint256,string,string,uint256,string,uint8,address)", +"419eafdc": "winPercent(uint256)", +"419ef898": "IBRToken()", +"419f6a3a": "isAirdropOver()", +"419ffa03": "fipsRegister(address)", +"41a0894d": "getReferrals(address)", +"41a08aaf": "judge(uint256,bool)", +"41a0be7b": "renameHorsey(uint256,string)", +"41a1053f": "strRemoveLastCharacter(string)", +"41a1a582": "getOwnerPayout(uint256)", +"41a1d66c": "sendTokensToExchange(uint256)", +"41a2625f": "endPreico()", +"41a28df6": "setAdminAddr(address)", +"41a292be": "calcPriceAt(uint256)", +"41a41523": "TIMEDEX()", +"41a42ba2": "updateNetworkConnection(string,string,address)", +"41a461fb": "SDAToken()", +"41a49409": "setWhitelistManager(address)", +"41a494c5": "award()", +"41a4c309": "_burnApproveClear(address,address)", +"41a4c5bf": "changeBonus(uint256,uint256,uint256,uint256,uint256)", +"41a51d00": "total0xbtcBalance()", +"41a5518f": "getMineInfoInDay(address,uint256,uint256)", +"41a59cef": "SDGT(uint256,string,uint8,string)", +"41a5b33d": "withdrawFromToken(address,address,uint256)", +"41a6cfda": "ROSCcoin(uint256,string,string)", +"41a6f46e": "FIESTA()", +"41a70b4c": "addArgumentToRequestString(uint256,bytes32,bytes32)", +"41a76287": "updateUintSetting(uint256,uint256,address,string,string)", +"41a7726a": "subscribe(address)", +"41a806ca": "addFamily(address)", +"41a82cc1": "ruleB(uint256)", +"41a84a0d": "getTokensForContribution(address,uint16)", +"41a928fe": "downTick(uint256,uint256)", +"41a943e2": "addAdmin(address,address,bool,bool,bytes32)", +"41aaccb0": "claim_eth_by_address()", +"41abe705": "doCount(address)", +"41ac59b7": "massTransfer(address[])", +"41ac5dd0": "updateFulfillment(uint256,uint256,string)", +"41ad3f57": "chickenToAltar(uint256)", +"41ad5c72": "createGroup(bytes32,uint256)", +"41ad785e": "payAndDonate(address,address)", +"41adb3f5": "saveInfo(string)", +"41ade6b7": "setRegisteredFirm(string,bool)", +"41aeaea7": "restWei()", +"41aed7cb": "isActiveEmployer(address,address)", +"41af1524": "verificationCodeHash()", +"41affe19": "publicSaleWallets(uint256)", +"41b0b4cd": "distributedTeamStakes()", +"41b2121c": "newInvestor(address,uint256,uint256)", +"41b2485b": "fiatContract()", +"41b280d2": "getTXwithCode(bytes32)", +"41b3203c": "PlaySimpleGame(uint8,bool)", +"41b3a0d9": "contractEnabled()", +"41b3d185": "minDeposit()", +"41b44392": "removeDarknode(address)", +"41b4a626": "cashSale(address,uint256)", +"41b4be87": "getPoolbyGtype(uint8)", +"41b5467a": "getUnpaidPerfit(uint32,uint32,uint256)", +"41b6f6ce": "getStatusDeal(bytes32)", +"41b6fcf7": "paymentDigest(bytes32,uint256)", +"41b80184": "lastProfitTransferTimestamp()", +"41b8547c": "Dev_Supply()", +"41b94f10": "_toTaxed(uint256)", +"41b989d0": "CashDeposit(address,uint256)", +"41b9c14c": "getShipsByOwner()", +"41b9dc2b": "has(bytes32,bytes32)", +"41ba4738": "GOLD_AMOUNT_NDC()", +"41ba9a17": "removeMilestones(uint8)", +"41bb0559": "symbol(string)", +"41bb26d3": "handlePayment(address)", +"41bb50f7": "eachIssuedAmount()", +"41bc0b6a": "LivepeerVerifier(address,address,string)", +"41bc2bea": "setProviderOwner(uint256,address)", +"41bc7b1f": "getOracleDetails()", +"41bcd712": "RTPToken()", +"41bd84aa": "_removeAffiliate(uint256)", +"41be0a14": "SPOT9()", +"41be44d5": "XAUDToken()", +"41be84cf": "getWingsValue(uint256)", +"41beb00c": "getResult(bytes32,uint256)", +"41bec0d2": "setERC20Address(address)", +"41becaef": "tokenIssueIndex()", +"41beef9d": "getSpareRecommAddr()", +"41c06b2a": "_reached(uint256)", +"41c0aa0e": "lockUnsoldTokens(address)", +"41c0dc59": "PAYOUT_FRAC_TOP()", +"41c0e1b5": "kill()", +"41c12a70": "voteNo()", +"41c14eb4": "BrokerImp(address,address,uint256,address)", +"41c173e2": "preICO(address,uint256)", +"41c1f017": "CONFIG_MAX_EXPOSURE_DIV()", +"41c1f5b4": "dreamToken()", +"41c1f60e": "instruct_5()", +"41c2c8f6": "FutaToken()", +"41c3e7c7": "report(address,bytes32,uint256[],bool)", +"41c41025": "updateFunders(address,bytes32,string,uint256)", +"41c41923": "freeze_contract()", +"41c46ff7": "PALToken8(uint256,address)", +"41c4c7eb": "sellBreeding(uint256,uint256,uint256,uint16,bool)", +"41c5cf5c": "ICOend()", +"41c61383": "totalClaims()", +"41c6f609": "registerNewMember(address,uint256)", +"41c7eb41": "populateTrancheRates()", +"41c8146c": "changeTimeBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", +"41c838cb": "getSANitized(string)", +"41c8b1de": "lendingInterestRatePercentage()", +"41c8ba1e": "MIN_CONTRIBUTION_CHF()", +"41c9692b": "phase1Duration()", +"41c96964": "getInvestorInfo(uint256)", +"41c9c72d": "updateDelegatorRewards(address[],uint256[])", +"41ca641e": "getShareholders()", +"41ca7242": "maxCapPre()", +"41caea7d": "EventWithdraw(address,uint256)", +"41cbd6ea": "getTrustedPartner(address)", +"41cbfc7b": "getKeysByType(uint256)", +"41cc0aa5": "RET_MUL()", +"41cc8912": "renameToken(string,string)", +"41ccf987": "ownedPool()", +"41cd47bf": "FEE_NUMERATOR()", +"41cdd253": "TestFMA(uint256,string,string)", +"41ce7f23": "BACToken(uint256,string,uint8,string)", +"41ce909f": "Bitroneum()", +"41ce979d": "VanityReleased(string)", +"41ce9f0e": "setBZRxTokenContractAddress(address)", +"41cfbb96": "test_someOtherFalseTest()", +"41d003cb": "setBonusCreationRate(uint256)", +"41d00774": "CoefRew()", +"41d00b1d": "EBIToken()", +"41d03085": "NEWONE()", +"41d09fbe": "sendWinnings()", +"41d0fcb6": "setSanctuaryAddress(address,address)", +"41d15b54": "createProductionUnitTokenContract(uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"41d1a4d6": "getStrategyAtIndex(uint256)", +"41d1da19": "Cloudeb()", +"41d20767": "ethMinContribution()", +"41d2c748": "applyCoeff(uint256,address)", +"41d31feb": "get_read_only_keys()", +"41d45f4a": "UNEK()", +"41d4a1ab": "bonusToken()", +"41d4a39e": "setCrowdsaleClosed(bool,bool)", +"41d5da6b": "getMyStatus(bytes32,bytes32)", +"41d5e10c": "BittwattToken(uint256)", +"41d5f7ac": "eligibleAmountCheck(address,uint256)", +"41d76a9c": "firstTime()", +"41d80050": "FundsGot(address,uint256)", +"41d875dc": "setStr(uint256,string)", +"41d8bc5f": "setExchangeRateOracle(address)", +"41d966a3": "sendFyle(address,address,string,string)", +"41d9cc43": "forgeItems(uint256,uint256)", +"41da7538": "getJadeProduction(address)", +"41da7555": "ownerPercentage()", +"41db1875": "makeBuyOrder(address,uint256)", +"41db61e1": "toGMT(uint256)", +"41db7e16": "RGN()", +"41db8c93": "_startCrowdsale(address,uint256)", +"41dbb51e": "IsFrozen()", +"41dbbb61": "SmartexFundsManager()", +"41dbe546": "HedeCoin()", +"41dc02cf": "changePatentSale(uint16,uint256)", +"41dcf454": "tokenURI(uint256,string)", +"41de2164": "getPhaseStartTime(uint256)", +"41de4181": "fireDepositToChildEvent(uint256)", +"41de4f16": "queenchUSBToken()", +"41dedc58": "gradeinfo()", +"41defd82": "cancelJobByAdmin(bytes32,uint256,address,uint256)", +"41df696e": "start_play_quiz(string,string)", +"41dfed3a": "viewCurrentPrice()", +"41e0b5d4": "Fenerbahce()", +"41e0c407": "getStudentCount()", +"41e1234e": "presaleFemaleStart()", +"41e14251": "devuelveUsers()", +"41e18398": "batchTransferFromManyToMany(address[],address[],uint256[])", +"41e2cdf4": "myGauntletType()", +"41e34be9": "unitSellable(uint256)", +"41e3a6b5": "updateSplitBalances()", +"41e50814": "DEVCoin(uint256,uint256)", +"41e51e89": "approveZeroTokensTest(address)", +"41e60c86": "unsign()", +"41e62be6": "VRToken()", +"41e6fd4b": "hasSecret(uint256)", +"41e7a787": "ERC223StandardToken(string,string,uint8,address,uint256)", +"41e7c47e": "FBR2()", +"41e831b0": "Oboc(uint256,string,string)", +"41e884d4": "viewLastClaimedDividend(address,address)", +"41e8b94c": "isThereABlockAtCoordinates(uint16,uint16)", +"41e8da52": "makeBet(uint256,uint256,address,uint256,uint256)", +"41e8fe9f": "EventRandomLedgerRevealed(address,uint256,uint256,address)", +"41e906e5": "getExercised(address)", +"41ea5127": "BaseAuction()", +"41ea59a9": "isFoundationSupplyAssigned()", +"41eb1a4a": "setUintCoinProduction(address,address,uint256,uint256,bool)", +"41eb24bb": "renouncePauser(address)", +"41ebb063": "KRHCoin(uint256,string,uint8,string)", +"41ebe9c6": "ScarcecoinStart()", +"41ecd1cd": "withdrawOwnerUnrevealed(uint256,address)", +"41ece976": "updateMinInvestmentForPreIco(uint256)", +"41ecf95b": "ParticipantJoined(uint8,uint16,uint32,address)", +"41ed2c12": "marketManager()", +"41eddf00": "checkIfCurrentlyActive(uint256)", +"41ee903e": "clear(uint256,uint256)", +"41eeb105": "doRelease(bytes16,address,address,uint256,uint16,uint128)", +"41ef3879": "stage1_price()", +"41ef6bb7": "uncirculatedSupplyCount()", +"41ef858f": "whitelistAddress(address,address,uint256)", +"41ef9184": "Pretorian()", +"41f18b43": "claimEarlyIncomebyAddress(address)", +"41f1d4dd": "whitelistControl()", +"41f1e76c": "minFundingGoalReached()", +"41f1f3e5": "getPayeeIndex(bytes32,address,address)", +"41f2ce14": "setABalance(address,uint256)", +"41f31724": "Tzedakah()", +"41f36984": "collectGamePayout(uint256,uint256)", +"41f4793a": "getCurrentImpeachmentVotesSupporting()", +"41f48ebf": "currentIco()", +"41f4ab98": "addManyToPresaleWhitelist(address[])", +"41f4fcaf": "isDrop(uint256,address)", +"41f51941": "doActivateSale(address)", +"41f59e81": "initBonuses()", +"41f64b85": "deleteBag(uint256)", +"41f65507": "pendingOracleA()", +"41f6e77e": "FindTheCureCoin2()", +"41f70465": "startCoinOffering(uint256,uint256,uint256,uint256)", +"41f77260": "withdrawSyndicateTokens()", +"41f8a524": "Verificator()", +"41f99b69": "setWithdrawalCoolingPeriod(uint256)", +"41f99e2f": "getPostDonationAmount(address,uint256)", +"41fa4876": "multiBlockRandomGen(uint256,uint256)", +"41fade8f": "getconfig(address)", +"41fb55c6": "mMaxAppCode()", +"41fbb050": "foundation()", +"41fcb0f7": "buyNapkins(address)", +"41fd32cf": "SafecontractsTREXCrowdfunding()", +"41fe0a24": "buyCrystalDemand(uint256,uint256,string,string)", +"41fee898": "refundPercent()", +"41ff4275": "_calculateUnlockedTokens(uint256,uint256,uint256,uint256,uint8)", +"41ffbc1f": "ringIndex()", +"42007fd3": "MarkRazAsComplete(uint256)", +"4202d214": "isActiveUser(address)", +"4203ea57": "minInvestmentPreICO()", +"4204f7d5": "deployMinersTest(uint32,address,uint32[],uint32[],uint32[])", +"4205875f": "ROUND_6_PRESALE_BONUS()", +"4205e5af": "pauseClosingTime()", +"4206311b": "TimeLockSend(address,address,uint256)", +"420714bd": "requestIndex()", +"42071a73": "bltRetained()", +"4207d648": "directorJurisdication()", +"42091137": "addStringSetting(string,string,address,address,string)", +"42091e76": "saltoken(address,address)", +"42095679": "lindyhanCoin()", +"420977d8": "viewStudent(uint256)", +"4209a1ef": "registerPlayer(string,uint256)", +"4209fff1": "isUser(address)", +"420a83e7": "tokenHolder()", +"420a8ac8": "NanoPyramid()", +"420a8b76": "Dancer()", +"420aa07d": "serviceTrasferToDist(bytes32,uint256)", +"420aadb8": "_execute()", +"420ae446": "allocatetokensAndWLExp(address,uint256,uint256)", +"420b5fe0": "initializeVestingFor(address)", +"420b81f6": "peekData()", +"420b9921": "ecsubtract(uint256,uint256,uint256,uint256,uint256,uint256)", +"420c96ea": "newArtwork(bytes32,uint256,string,string,string,uint256)", +"420d0ba4": "nobodyCanDoThis()", +"420d23fd": "POOL_EDIT_1()", +"420d4a02": "getUnlockedAmount(address)", +"420d4bdd": "CRYPTAU()", +"420dd15a": "getLast(string)", +"420ddaa6": "encodeKYCFlag(bool)", +"420e1f51": "tokenExchanges()", +"420e7ea6": "tokenAmountRasied()", +"420ef2b3": "TargetHash()", +"4210ad0e": "newBurnableOpenPayment(address,uint256)", +"42111339": "contributeLocal()", +"42118f51": "manualLCs()", +"4212616b": "localsUser()", +"4214352d": "write_what_where_gadget(uint256,uint256)", +"4214d52f": "updateIndex(address,address)", +"421521b1": "finalizeOpenSale()", +"42154e9c": "countAddress()", +"42159ca3": "getMaxDelayDays()", +"4215a39b": "getCreateMarketNumOutcomesValue()", +"4215da7d": "investorsStorage()", +"4216503c": "setFunStr(string)", +"42170736": "secondPhaseStartTime()", +"421715c2": "canBorrow()", +"42172a6a": "_emitERC20DividendDepositedEvent(uint256,int256,uint256,uint256,address,uint256,uint256,uint256,bytes32)", +"42173c98": "purchaseCompany(bytes32,bool)", +"42193473": "DUST_LIMIT()", +"421983d7": "confiscate(address,address)", +"421a5727": "stealPot()", +"421ae949": "thawTokenTransfers()", +"421aeba2": "setEditedFalse(address)", +"421aeda6": "Set_your_game_number(string)", +"421b2395": "UltiCoinICO()", +"421b2d8b": "addUser(address)", +"421c0d9c": "unregisterDsp(address)", +"421d72e2": "isPaymentForked(uint256)", +"421db384": "leftICOTokens()", +"421e2dc2": "getPartnerAmount(address)", +"421e52e3": "card_gold_minamount()", +"421ed7dd": "balancesInitialized()", +"4220324b": "mainSaleStart()", +"42207083": "getGameRoundOpen(uint256,uint256)", +"4221115c": "SfomoToken(uint256,string,string)", +"42226e02": "setMaxEth(uint256)", +"4222e211": "getPhaseState(uint256)", +"42235da6": "minimumTarget()", +"4223ac0f": "ABCToken()", +"4223ad89": "NewRefundTransaction(uint256,uint88)", +"4224f2ca": "HzxhcToken(address,address)", +"42261ea4": "cancelSale(address[])", +"422624d2": "destroycontract(address)", +"422627c3": "getDna(uint256)", +"42263aa2": "set_token_address(address)", +"422752bf": "getPartialAmountFloor(uint256,uint256,uint256)", +"42279e82": "removeFromPreSaleRefunds(address,uint256)", +"422810ea": "transData(address,uint256,bytes)", +"42285bc5": "_ensureRef(address)", +"42287b66": "createPromoPerson(address,string,uint256)", +"4228974c": "Videos()", +"4229616d": "collectPercentOfFees(uint256)", +"4229c35e": "setItemPrice(uint256,uint256)", +"422b00bb": "dataentryclerk()", +"422b1c70": "setMinweiAmount(uint256)", +"422b423e": "getCheatWarrant()", +"422b7964": "_approve(uint256,address)", +"422c29a4": "getWallets(address)", +"422c3ad9": "changeEndTime(address,uint256,uint256)", +"422cbb48": "MarkosToken()", +"422d3374": "tbitfwdToken()", +"422d37c4": "mintWithEvent(int256,address,uint256)", +"422d4cd6": "increasePayout(uint256,uint256,uint256)", +"422dabac": "allocateEther(uint256,address)", +"422e33f3": "migrationNewAddress(address)", +"422e82a7": "EthToCoins1()", +"422f1043": "addLiquidity(uint256,uint256,uint256)", +"422f3a2c": "nestedFirstAnyToSome(uint256,uint256)", +"422fcbd5": "MCST()", +"4230bb10": "badgeLedger()", +"42317bbc": "flipRefundSwitchTo(bool)", +"42318e3d": "percent(uint256,uint256)", +"4231a2c3": "getLastRound()", +"4231e2d7": "transferFreezership(address)", +"4231ee16": "addInBountyProgramMap(address)", +"42320732": "allSupply()", +"423252f9": "buscarDocumentoPorTitulo(bytes32)", +"4232a399": "XC()", +"42340458": "disable(uint8)", +"42346c5e": "parseInt(string)", +"423592ce": "startTde()", +"4235e336": "BetDirectory()", +"4235e98e": "Buy(uint8,string,string)", +"42367389": "test_twoValidEqInt2()", +"4236b312": "dealContract(uint256,string,uint256,uint256,string)", +"4236da98": "INTREPID_PRICE_INCREMENT()", +"42382353": "restartTheQueue()", +"4238b84c": "DMBToken()", +"423948fd": "changeCollateralAmount(uint256)", +"42399220": "setCampaignOwnerById(bytes32,address)", +"423a7954": "developerfee()", +"423a968d": "_setRSPScienceAddress(address)", +"423b1ca3": "battleContract()", +"423c3a48": "burnTokens(address,address,uint256)", +"423c485a": "depositFee(uint256)", +"423d4ef2": "createChannel()", +"423da88e": "Unix_Timestamp_Binary_Trading(uint256)", +"423dcf29": "dustToEtherPrice()", +"423e1298": "setDoNotAutoRefundTo(bool)", +"423e7e79": "_dispatchEarnings()", +"423f0b6e": "replaceModule(address)", +"423f6cef": "safeTransfer(address,uint256)", +"423fb140": "CrowdsaleToken(string,string,uint256,uint256)", +"423fcd5e": "_promo()", +"42402c2c": "fipsTransferMulti(bytes20[],address)", +"4240a978": "ICO_TILL()", +"42419336": "ICO_BONUS_RATE()", +"42427bf8": "upgradeController(address,address)", +"4243cb36": "payConversionFromTransaction(uint256,address,uint256)", +"4244e09f": "getBetterBettingInfo(address)", +"4245508a": "getRoundMaxNumberOfBets(uint256)", +"424592ca": "calculateDistributedIntervalEarning(uint256,uint256)", +"424599c4": "seedSaleTokenLeft(address)", +"4245b0f7": "Lottery()", +"4245d48e": "getHashes()", +"4245f3da": "tokenOfOwnerByIndex(uint256)", +"42465a1e": "getTokenUnits(address)", +"42469e97": "_setBonusRate(uint256)", +"4246ad24": "calculateMinedCoinsForTX(uint256,uint256)", +"4247f52d": "DoRoll()", +"4248083b": "approveUser(address,uint256)", +"4248aefe": "awardMiniGamePrize()", +"4248afe8": "addCrowdSaleTokensMulti(address[],uint256[])", +"424976f9": "registryRead(bytes32,bytes32)", +"42498389": "transferLimitedFundToAccount(address,uint256)", +"424a8993": "selectOfferingProposal(uint8)", +"424a8c0d": "constructorReconToken(address,string,string,uint8,uint256,bool,bool)", +"424aa0e5": "StockusToken()", +"424b828f": "CharityReservesWallet()", +"424bc2e9": "newGame(string,string)", +"424d6bb1": "changeApi(address,address)", +"424ddaac": "get_available_interest_amount()", +"424e418f": "setMinSecondaryAmount(uint256)", +"424e94da": "VoteHub(address)", +"424ea3b2": "refund_deposits(string)", +"424ea872": "startTimestampIco()", +"424eb9fe": "getInitBalance(address)", +"424f4fef": "vendingMachine()", +"424f9947": "privateIcoBonus()", +"424fa9ec": "Prismacoin()", +"424fed48": "EBPtandardToken(uint256,string,uint8,string)", +"424fffda": "updateContact(string)", +"4251447a": "WhiteListSet(address,uint256)", +"42516f1d": "startAirdropBy0Eth()", +"425189e0": "getFashion(uint256)", +"4251a7a4": "totalNihilum()", +"4251ecb4": "nMsg()", +"42526e4e": "bytesToAddress(bytes)", +"425432b1": "tokensPerAddress(address)", +"42545825": "hasVoted(address,uint256)", +"4254704f": "TOKEN_CLAIM_WAIT_PERIOD()", +"4254b155": "register(bytes32,string,address,address,address)", +"425543f1": "CreateDummyPlayer(bytes32,uint8,uint256,address)", +"4255e808": "jackpotContract()", +"42565405": "setNeuroChainAddress(string)", +"42569ff3": "limitedPrinter()", +"4256dbe3": "setReserve(uint256)", +"4256fa5a": "timeToBorn()", +"4256fa9f": "exchangeTokens(address,uint256)", +"4257347e": "freezeAccountToken(address,uint256,uint256)", +"42577935": "createPanda(uint256,uint256)", +"4257d3e0": "currentGameBlockNumber()", +"42585b34": "getSnap(uint256)", +"42587795": "deploySimpleContract(string,string,uint256)", +"4258cb76": "Ultracash()", +"4258d771": "funding_ended()", +"425946e3": "setCurrentMember(address)", +"4259701b": "getSocialAccountPw(bytes32,bytes32)", +"4259b52e": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8)", +"425adae7": "isBonusEnabled()", +"425d4980": "mintAddress()", +"425d512a": "setDAOContract(address)", +"425e0d3c": "BasicToken(uint256,string,uint256,string)", +"425ef4b5": "modify_str(string)", +"425f7857": "taxTokenCreated()", +"4260c779": "start_ico()", +"42616d21": "goldTotalSupply()", +"42618b91": "buyRoundKey(uint256)", +"426201ef": "lastBlock_v19()", +"42623360": "stakeOf(address)", +"426365ad": "setForceOffsetAmount(uint256,uint256)", +"42636c09": "existIdAfterVersion(bytes32)", +"4263ed83": "hasNextSeedHashA()", +"4264b4e0": "ownerPayout()", +"4266806b": "cf1Wallet2Pct()", +"4266873f": "setAicPrice(uint256)", +"426695c6": "getDeedId(bytes32,uint256)", +"4267e19c": "getOwnedTokensIndex(uint256)", +"42686bbe": "GetPartLimit(uint8,uint256)", +"4268a257": "updateRoundInformation()", +"4268db7d": "cite(string,string)", +"4269d8ef": "_safeSend(address,uint256)", +"426a0af3": "updateManyLandData(uint256,uint256[],string)", +"426a8493": "approve(address,uint256,uint256)", +"426aa87f": "deleteRecording(uint256)", +"426ad3f5": "getChainName(uint32)", +"426b7113": "tokensSoldPre()", +"426bc60c": "Educoin(uint256,string,uint8,string)", +"426d4f22": "expandNegative128BitCast(uint256)", +"426d5ef1": "oraclizeCallbacks(bytes32)", +"426d70fa": "isPrivateIcoActive()", +"426dd27c": "getGroup(uint256,uint256)", +"426e0b20": "daoStakeClaimed()", +"426e5ae6": "senderTokenBalance()", +"426e6f8e": "updateValueAndMint(uint256,uint256)", +"426eae45": "bondingManager()", +"426eb017": "uri(address)", +"426f5531": "maxAllProfit()", +"426f8f6b": "viewNumberOfRequests()", +"426fa499": "isIcoStarted()", +"426fe411": "contributorDeposit()", +"4270d48a": "nextmarketoffer()", +"42714978": "removeInvestor(address)", +"427163dc": "refundBid(bytes32)", +"4272f2d5": "heroTokenContract()", +"4273601c": "factoryOwner()", +"4273bc59": "bids_sorted_refunded()", +"42740286": "maxMintPoS()", +"42750020": "tokensCreated()", +"42753e7e": "isInSale()", +"4276016f": "oversightAddress()", +"427654da": "getDailyLimitUsed()", +"42767018": "smallRate()", +"4276d082": "FrozenEther()", +"42772947": "callEndRoundControl()", +"4277b5b1": "check(address,address,address,uint256)", +"4277e497": "PaymentRejected(address,bytes8,uint256)", +"4277e823": "TravelHelperToken(address,address,address,address,address,address)", +"42787798": "grantedContracts(address)", +"4278ff31": "setTangibleAssetAddress(address)", +"427913f2": "getClaimedFinancialData()", +"4279523e": "serviceChangeOwner(address)", +"427982f2": "tokenSaleMax()", +"427a2fc2": "getClaim(uint256,uint256)", +"427ac5e4": "checkForUpdates()", +"427b59d3": "HiPrecious()", +"427b72fc": "proofFailed(address,uint256)", +"427c854d": "_createSkull(uint256,uint256,uint256,address)", +"427c9aca": "LogPayoutFailed(address,uint256,uint256)", +"427d5f2e": "tierAmountCaps(uint256)", +"427da275": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32)", +"427e024a": "AdministratorRemoved(address,address)", +"427e332f": "lastBlock_a8()", +"427eebfc": "returnOwnershipOfToken()", +"427f0b00": "roundInfo(uint256)", +"427f56ff": "bonusAllocAddress()", +"427f9614": "getReference(bytes32)", +"427fa1d2": "getLastNode(address)", +"427fc2df": "preIcoPeriod()", +"4280606b": "addCondition(bytes32,bytes32,address,int256,bytes32,address,int256,bytes32)", +"4281267b": "buyLCARS()", +"4281a651": "SponsoredItemGooRaffle()", +"4281b13f": "getAllbetByNum(uint8,int8)", +"4281b34b": "play(uint256,uint256[])", +"42836c2e": "hasAddress(address,address)", +"4283fbe5": "dummyGasBurner()", +"42842e0e": "safeTransferFrom(address,address,uint256)", +"42846c09": "Bonus(address)", +"42849570": "myReward()", +"4285d477": "teamTokensFreeze(address)", +"428657f7": "storeNewVesting(address,string,uint256)", +"4286ed3e": "callBtoWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"4287eef9": "fechStageBlockByIndex(uint256)", +"4287f14a": "teamReserve()", +"428840f6": "fadd()", +"4288d759": "betOf(address)", +"4289c781": "setSellPrice(uint256,string)", +"428a2ece": "createTokenVault(uint256)", +"428a8120": "tier0Total()", +"428afcd1": "setUpgraded(uint256)", +"428be33f": "ReleaseFundsAndTokens()", +"428c91ae": "genAddressFromGTIN13date(string,string)", +"428d189c": "takeTokens(uint256)", +"428d475a": "beConstant()", +"428d5630": "mintOnDemand(address,uint256)", +"428d64bd": "getShares(address,bytes32[])", +"428e2d64": "getMsg(address)", +"428e357b": "getUInt8(bytes32,bytes32)", +"428e5aaa": "addToPrize()", +"428eb006": "batchAirdropWithLock(address[],uint256,bool)", +"428eb5cf": "getRandomNumber(int256,int256)", +"428f180c": "minimumSpend()", +"428f4146": "SimplePHXExchange()", +"42906029": "newManager()", +"42909a9e": "create_game()", +"4290a5b9": "uninject(address)", +"4290bd4d": "isTokenOfferedToken(address)", +"4290db52": "burnFromAnotherAccount(address,uint256)", +"4290e6b6": "setTokenName(address,uint256,string)", +"42915914": "test_dispersal()", +"4292327c": "_isMyLeague(uint8)", +"42923409": "ArinToken()", +"4292a797": "ZAZA()", +"4293253c": "tokenSaleLowerLimit()", +"429374f3": "ScorpioCoin(address)", +"42946d88": "getIGOAccoountByAddr(address)", +"4294857f": "isRevoked(bytes32)", +"42948e18": "getSenderAddress()", +"4294bea0": "BarcelonavsRoma()", +"4294cdb2": "BixcPro(uint256,string,uint8,string)", +"42958b54": "issue(address[],uint256)", +"42966c68": "burn(uint256)", +"4296a9cb": "getNodeRightChild(bytes)", +"4296b4a7": "freezePlayer(address)", +"42974b1e": "freeReferralPacksClaimed()", +"42980e20": "LifeToken()", +"429838e0": "Allow_Entries()", +"42992dd5": "icoStartTimestampStage2()", +"4299431e": "REALMock(address)", +"42995e12": "canReceiveMintWhitelist()", +"4299c213": "lastReading(address)", +"4299f706": "PonziScheme(uint256)", +"429a2591": "convertAmountToTokens(uint256)", +"429aa0a4": "DAILYC()", +"429adcb9": "minSumICOStage7USD()", +"429b62e5": "admins(address)", +"429b92bf": "getProposalName(uint256)", +"429c1561": "setReputationProblems(address,string)", +"429c6e5b": "getClaimedAmount(uint256)", +"429cddca": "selectOwnerAddressForTransactionFee(address)", +"429d15ba": "testCorrectFunctionIsCalledOnTransfer()", +"429d6a69": "walletBeneficiary()", +"429f3b48": "blockAccount(uint256)", +"42a04fea": "getBadges()", +"42a173a5": "transferByCasino(address,address,uint256)", +"42a1928b": "initSale(uint256,uint256,uint256)", +"42a19c71": "giveProjectTokens(address,uint256)", +"42a1f3eb": "ProvToken()", +"42a37176": "showMyEtherBalance()", +"42a38a00": "mediatorWallet()", +"42a4af66": "updateCatReleasePrice(uint32,uint256)", +"42a5000d": "startPRESALE()", +"42a63361": "updateTribeProducts(address)", +"42a657fd": "primaryListing()", +"42a6617d": "stepTwoRate()", +"42a66f68": "totalRate()", +"42a6739b": "acceptRandom(bytes32,bytes)", +"42a6b21a": "getContributionLimit(address)", +"42a6c4dd": "getBidByToken(address,uint256,uint256)", +"42a745cb": "testBitEqualSuccess()", +"42a787fa": "determinePlayer(int128,uint128,uint8,bytes32,bytes32)", +"42a7a8e0": "SmartzToken()", +"42a7c40e": "ThiccCoin()", +"42a7cfd5": "naturalUnit()", +"42a8f2f4": "internalTransfer()", +"42abfde8": "getLunckyIndex(uint256)", +"42ad2c6f": "maxPreIcoDuration()", +"42ae07c0": "RateRemove(address)", +"42ae0a16": "crowdsaleBalance()", +"42aeba30": "Shipment(address,address,string,string,int256,int256,uint256,uint256)", +"42af2478": "PartialFundsTransfer(uint256)", +"42af4821": "TUDOR()", +"42af8f0c": "buy(uint256,uint256,address,address,address)", +"42b053ce": "SyedaMahaAliTestCoin()", +"42b07d6d": "cashBackFromProject(address)", +"42b1295a": "addMultipleAllowedAddresses(address[])", +"42b2106c": "FoundationTransferred(address,address)", +"42b222bd": "showTokenValue(address)", +"42b31b1f": "Elythrium()", +"42b38674": "isValidValidatorSignature(address,bytes32,address,bytes)", +"42b41aa4": "sendCoin(address,address,address,uint256)", +"42b4632e": "canPropose(address)", +"42b4807a": "getRegionCoordinates(uint256)", +"42b4ef95": "Helper()", +"42b50a7a": "getOrderById(uint256)", +"42b594cb": "buyTicketByEth(uint256,bytes32,bytes32,bytes32)", +"42b5a2a9": "maxTxGasPrice()", +"42b614a9": "round_after()", +"42b64a59": "VisionX()", +"42b8c415": "balanceTotal()", +"42bb5709": "FundsTransfer()", +"42bb66c4": "setInvest(uint256,uint256)", +"42bd0959": "setIsBuyByAtom(uint256,uint128)", +"42be5eea": "thing(string,string,uint8,string)", +"42be9307": "changeSale(bool)", +"42beb58b": "setPreSaleOff()", +"42bf1270": "cslToken()", +"42bf41ae": "drainStrayEther(uint256)", +"42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", +"42bf5347": "getUserFreezeInfo(address,uint256)", +"42bf8db3": "getRate(string,uint64)", +"42bff0d0": "setExchangeAdapterManager(address)", +"42c01f66": "setRateEarlyStage3(uint256)", +"42c102a5": "GetSnail(address)", +"42c1867b": "mintAgents(address)", +"42c1ea29": "evidenceInterval()", +"42c23db5": "AddToDividends(uint256)", +"42c2d31a": "EtheremonToken(address,address,address,address)", +"42c304be": "accountsListLength()", +"42c3301a": "showJackpotThisRd()", +"42c469e0": "GameSpiritCoin()", +"42c501a1": "LogOwnerTransfer(address,uint256)", +"42c50f75": "TeamMembersAmount()", +"42c549c0": "getMilestones(uint256)", +"42c5d7ad": "sendAdvisorsBalance(address,uint256)", +"42c62865": "withdrawsCount()", +"42c62882": "getMyDividends(bool)", +"42c6498a": "genesisTime()", +"42c65ae5": "eUSD()", +"42c69566": "get_address(address,string)", +"42c71f1d": "getApp(bytes32)", +"42c74c73": "EPVToken()", +"42c7551e": "tokenRemain()", +"42c7ea5f": "totalNumberAvailable()", +"42c80fc9": "isUpgraded()", +"42c81f45": "MLB_Legal()", +"42c8705b": "Mine()", +"42c87205": "VirgoContract()", +"42c96767": "EtherHiLo()", +"42ca08cf": "applyFadeoutToOptions(uint32,uint32,uint32,uint256,uint256)", +"42ca2fe3": "FCOIN1110Token(uint256,string,string,uint256)", +"42cb1fbc": "ETHER()", +"42cbb15c": "getBlockNumber()", +"42cc6b04": "addAuthorizedEditAgent(address)", +"42cde4e8": "threshold()", +"42cdfe37": "tokenWithdrawEther(address)", +"42ce0555": "DisableSuicide()", +"42ce0aff": "registerAndValidateToken(address,string,string,uint256,uint256)", +"42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", +"42ce1488": "upload(string)", +"42cf0a4b": "increaseEthBalance(address,uint256)", +"42cf0e72": "searchByOwner(address)", +"42cf2f81": "getSequence(bytes)", +"42cfd792": "postJob(uint256,uint256,uint256,bytes32)", +"42cffda9": "TREETOKEN()", +"42d01878": "keyRequired()", +"42d02b30": "HARD_CAP_IN_TOKENS()", +"42d16748": "getMinDailyWithdrawalLimit()", +"42d1b202": "_adoptSameClassAxies(address,uint8,uint256,address)", +"42d1f17f": "bankrollerTable()", +"42d2c127": "getStagesBeginEnd()", +"42d46a9a": "castVote(uint256,uint256,bytes32,string,bytes32)", +"42d544fb": "disallowSale()", +"42d596e0": "isPoint(int256,uint256,uint256)", +"42d64601": "pacifistmasterReq()", +"42d7cc8e": "Tx(address,uint256,string)", +"42d8f5be": "customPayment(address,uint256)", +"42d928fc": "SWIFTSCO(address)", +"42d9643c": "KYCLimitValue()", +"42da3b6b": "getAmount(uint256,address)", +"42daedea": "win_by_timeout()", +"42daf6ee": "icoStartP6()", +"42db2fba": "renounceRecoverer()", +"42dbad44": "makerOf(string)", +"42dbcdba": "weiRaised(address)", +"42dca9ea": "getManifestIdsByRegistrant(address)", +"42dd519c": "getClients(uint256)", +"42dd96f7": "killswitch()", +"42df7085": "ROLE_EXCHANGER()", +"42dfb036": "calcRateFromQty(uint256,uint256,uint256,uint256)", +"42e06ee7": "HotCold()", +"42e11316": "claimReadership(uint256,string)", +"42e1452a": "PolarisUniversalToken()", +"42e15c74": "managedTokenLedger()", +"42e16015": "AddedBlackList(address)", +"42e296d3": "soundEffects(uint256,uint256)", +"42e2d18c": "presaleIsRunning()", +"42e2da09": "QuantorPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"42e2f54c": "shutDownFund(address)", +"42e35f63": "addGoal(string)", +"42e3b919": "NMFToken()", +"42e49d5a": "FUNDING_GOAL()", +"42e4d72b": "oxen()", +"42e5033e": "mainSaleEndDate()", +"42e59afa": "reloadRound(address,uint256)", +"42e5b9f1": "totalDistributedDividends()", +"42e5d5c8": "getPI_edit_17()", +"42e5da0d": "UpdatePlatformContract(string,address)", +"42e6377f": "LabtorumToken()", +"42e6c88a": "approveObjectReception(uint256)", +"42e7ba7b": "hasManagerAccess(address)", +"42e8051c": "testExternal()", +"42e81b0c": "dislikeCelebrity(uint256,uint256)", +"42e86d27": "callData(address,bytes)", +"42e90c33": "Store()", +"42e94c90": "contributions(address)", +"42e9555e": "getProviderLastSupplyID(uint256)", +"42e956f6": "addtoMarketingBusinessDev(address,address,uint256,uint256)", +"42e9c6ce": "pullTokens(address)", +"42ea74c0": "getTokenPriceInWEI()", +"42eabc29": "posibleRedemptionOf(address)", +"42ead91f": "getMegabox(uint256)", +"42eafaf5": "showFPInfoAll()", +"42ec38e2": "tokenOf(address)", +"42ed00da": "getSenderArmyDetails()", +"42ed567c": "tmpQuerySeed(uint256,uint256)", +"42ed5816": "ethDailyLimit()", +"42ed6072": "publicBattlepm2()", +"42ee4e0b": "ICO_PRICE5()", +"42ef4c1a": "hodlerTime6M()", +"42ef8c76": "alsToken()", +"42efdebf": "exchangeAdmin()", +"42f030e4": "minusTourFreezingTime(uint256)", +"42f0b07e": "BountyFund()", +"42f0ca0d": "setPreSaleEndDate(uint256)", +"42f1181e": "addAuthorizedAddress(address)", +"42f362aa": "registerNameCore(uint256,address,uint256,bytes32,bool,bool)", +"42f39381": "presaleRate()", +"42f39a6f": "ARXPackageSale()", +"42f3f7e0": "activate_reserve()", +"42f45790": "testAddress(address)", +"42f57e4c": "enableUser(address,bool)", +"42f5b7e0": "setGenome(uint256,uint256[4])", +"42f5d95d": "AllUnLock()", +"42f6208e": "lock(address[])", +"42f6487a": "payment()", +"42f6e389": "isModule(address)", +"42f81580": "CLAIM_DEADLINE()", +"42f85ce5": "pay(address,uint256,uint256[])", +"42f88548": "updateRegionPixelPrice(address[16],uint256,uint256)", +"42f88699": "ExShellToken()", +"42f9192a": "nameFilter(string)", +"42f91e9e": "BcxssToken()", +"42f989e2": "setUnlockTimeStamp(uint256)", +"42f98b14": "buyIssuerTokens()", +"42f9b306": "teamLockTransfer(address,uint256)", +"42fa3967": "toSlice(bytes,uint32)", +"42fa98e0": "Orange()", +"42fba0f5": "grantedTokensHardCap()", +"42fbbc9c": "managerPercentage(bytes32)", +"42fc63be": "DebugHash(bytes)", +"42fd6acc": "checkProof(bytes32[],bytes32)", +"42fd7d4c": "_buy(address)", +"42fdbed7": "isDeDeContract(address)", +"42fea02b": "confirmPayer(uint256,uint256)", +"42feba84": "arbiterResponseRate(address)", +"42ff1c1a": "getMetadataURL()", +"42ffb76b": "getWorkflowName()", +"4300705d": "withdrawGTO()", +"4300e8ef": "addContract(address,string)", +"4301b55b": "MintOpened()", +"4301cbe5": "getAllNames(string)", +"43021054": "BTestToken(address,string,string,uint256,uint256)", +"43021202": "fundValuePublish(uint256,uint256,uint256)", +"4302b3c8": "myTotalSupply()", +"43031e9b": "getSumOfPlayers()", +"4303707e": "generateRandomNumber(uint256)", +"43039433": "handleReturnData()", +"43046844": "placeBet(uint8)", +"4304a43f": "updatedBalance()", +"4304a6b9": "setUnfreezeStartTime(uint256)", +"430558c2": "buyGifto()", +"43062beb": "getAvailableTokensToSellTillPhaseIdxValue(uint256)", +"43062ea7": "changePurchaseCap(uint256)", +"430694cf": "getProposal(bytes32)", +"4306cc3f": "queryEarnings(address)", +"4307d081": "jazzxToken()", +"4308a36b": "getIcoPrice()", +"43090357": "readUserPurchasedToday(address)", +"4309b4b2": "getPollIdentifier(address,bytes32,bytes32)", +"430a74b7": "CrypcenToken()", +"430ab56a": "sendAllLocalEthers(address)", +"430ae7a2": "AvtcToken()", +"430bf08a": "vaultAddress()", +"430c2081": "isApprovedOrOwner(address,uint256)", +"430c2a69": "crdjetToken()", +"430c73c5": "setMarketAddress(address,address)", +"430c9247": "changeDebt(address,uint256)", +"430ca46f": "finishAuction()", +"430d2803": "getTotalPossibleTokens()", +"430d6eb2": "ParadiseToken(address)", +"430de98a": "GetCardNumber(uint8,uint8)", +"430e484a": "setupNetwork()", +"430ecff8": "blksze()", +"430fe5f0": "changeWorkerPrice(uint256)", +"430fe9c1": "getDate()", +"4310033d": "Gotoken()", +"43102eab": "isItConstantinopleYet()", +"43104d92": "addMultipleRecordsStrict(uint256[])", +"43107290": "createRequest(address,address[],int256[],address,string)", +"43114842": "acceptChallenge(uint256,uint256,uint256)", +"4311de8f": "ownerWithdraw()", +"43128a4c": "feeUSD()", +"4312f19c": "setTransferEmittables(address,bool,bool)", +"4312fece": "addAddressToIndex(address,address)", +"43133b07": "gameBeginPlayNo()", +"4313b9e5": "setup(uint256)", +"4313de82": "closeBidOrder()", +"4314162d": "untsqm()", +"431454fb": "totalMintedBountyTokens()", +"43146f36": "resetBet()", +"431562b9": "countWithdraws()", +"43156db6": "withdrawOldToken(address,uint256)", +"4315f545": "proofType_NONE()", +"43160e3d": "rootOfTrust()", +"4316abbb": "newJester(address)", +"4316fae5": "NABC()", +"43171485": "tokensHasSoldOut()", +"4317f04a": "Transfer(address,string,address)", +"431851ad": "NenoToken()", +"431993b9": "endPrivate()", +"4319dfd9": "defence(address,uint256,uint16,bytes,uint256[])", +"431a4d46": "getContractSample(string)", +"431ab1f2": "xmasFundWallet()", +"431ab233": "allOperations(uint256)", +"431adcb1": "isSellOpen()", +"431bff74": "MINING_POOL_AMOUNT()", +"431cc3dd": "batchWithdraw(address[])", +"431d6256": "Conversion(address,address,address,uint256,uint256,uint256,uint256)", +"431dac16": "registerUser(address,string,uint256,uint256,uint256,string,bool)", +"431dbd9e": "getLatestRaffleInfo()", +"431dc4b6": "current_period()", +"431dc892": "OwnedProxy(address)", +"431e0a48": "AnteilToken()", +"431e83ce": "absMaxFee()", +"431ec601": "get_exchange_count()", +"431ef9b5": "OptionsConversionOffered(address,address,uint32,uint32)", +"431f188c": "set_presale_arbits_per_ether(uint256)", +"431f21da": "createAuction(uint256,uint256,uint256,uint256)", +"431f63c9": "setTokenPrice(address,uint256)", +"4320ea1c": "CrowdsaleBase(uint256,uint256,uint256,address,address[])", +"43212413": "Addr2()", +"43212c3c": "getHighestMilesAt(uint256)", +"43214675": "setMintAgent(address,bool)", +"43216a11": "MAX_NUM_AVAIL()", +"43226631": "CURRENTLY_ISSUED()", +"4322b73b": "getAdd(uint256)", +"43235a24": "_transferProperty(uint16,address,uint256,uint256,uint8,address)", +"43243797": "fundsOf(address)", +"43245816": "tokensToEther_(uint256)", +"43245953": "CoinToken(uint256,string,uint8,string)", +"4324aa21": "classOf(uint256)", +"4324ae4f": "PhoenixExchangeDeposit()", +"4325f6bb": "OfferToCastle(uint256,uint256)", +"432607fc": "cancel(address,address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"4326e22b": "getMerkleTreeRoot(bytes20,uint8)", +"4326f3f6": "setMinimumPriceCount(uint256)", +"4327115b": "_AddedToGeneration(address,uint256)", +"4327979a": "getPaymentParams(uint8)", +"4327acda": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256)", +"4328894f": "showReportForMonth(uint16,uint8)", +"4329db46": "transferETH(uint256)", +"432a042b": "makeRegistration(bytes32)", +"432a3dfb": "roundState(uint256,uint256)", +"432a805b": "changeDailyRate(bytes32,uint256)", +"432a84d9": "ownerDepositInterest()", +"432a89aa": "GetBuildingParam(uint256)", +"432af6e9": "calculateTokensForMonth(address)", +"432b3f85": "fetchVoteResultForCandidateBySnapshotBlock(address,uint256)", +"432ba8be": "voterToBallotID(address)", +"432c4209": "IQT_DECIMALSFACTOR()", +"432c685f": "trustClient(address)", +"432ce549": "sendToUser(address,address,uint256)", +"432ced04": "reserve(bytes32)", +"432d7a1e": "_dividendsOutstanding(address)", +"432e83c5": "resetReferedCount(address)", +"432e8946": "disableTransfer(address)", +"432f0d20": "EVA(uint256)", +"432f3223": "AceFund()", +"432f3c22": "request_until()", +"43302ff3": "getMaintainFee()", +"4330301f": "_ratio()", +"4331576f": "BITVM()", +"4331e00f": "pay_claimed(address)", +"4331e8dd": "setLeader(address)", +"433288a2": "setCurrency(string,address,address,uint8,bool)", +"4334614a": "isBurner(address)", +"4334a8a5": "CHAD()", +"433503f6": "ChangeEmissionSumm(uint256)", +"4335b046": "CRAWDSALE_EARLYBIRD_END_DAY()", +"4335dfc0": "getPurchaseTimestamp()", +"43361a6e": "MineralBase()", +"4336a5a8": "EtherGold()", +"433740f8": "Purchase(address,uint256,uint32)", +"4337b391": "PriceDiscovery(address,address)", +"433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", +"43386ea9": "getUniqueValue(uint256)", +"433900db": "presaleTokensLimit()", +"433914c9": "VeChainX()", +"43398685": "BancorFormula()", +"4339bc30": "changePool(address)", +"433a8323": "UnityCoin()", +"433adb05": "tokensReserved()", +"433b409f": "BTTSTokenListing(address,address,string,string,uint8,uint256,bool,bool)", +"433b64b1": "eventId(uint256)", +"433b77c7": "getCampaignOwnerById(bytes32)", +"433bb0e4": "fillOrder(address,address,address,bytes32,address,address,uint256)", +"433bd924": "getBreed(uint32)", +"433c39ff": "transferVoteController(address)", +"433cdc26": "PriceAdjusted(uint256,uint256)", +"433d0f33": "canUserCancelArtwork(address,address)", +"433d4aab": "resolve(uint8,uint8)", +"433d7110": "provas(address)", +"433e852d": "flushDividends(uint256)", +"433fc1da": "Bandit()", +"43406182": "enableLotteryGiveHunt()", +"43409bc5": "linkData(bytes)", +"4341274f": "_sameClassAxiesPrice(uint8,uint256)", +"4341aebc": "distributeTokensToRank(uint256[],uint256)", +"434253ff": "createItem(string,address,uint256,uint256,uint256,uint256)", +"43428e45": "minimumNumberOfBlocksToEndGame()", +"4342e966": "approve(address,uint8)", +"4342ffe5": "changeMinimumContributionForPrivatePhase(uint256)", +"4343ede6": "currentStageNumber()", +"43441a2c": "totalGivenBountyTokens()", +"4344f73d": "AssToken()", +"4345c7c9": "_upgradeTo(string,address)", +"434622fe": "additionalMint()", +"43463b98": "getconf()", +"43463c3a": "UnityToken(uint256)", +"4346aa58": "ITTM()", +"4346ea77": "PrimasToken()", +"43471101": "getSenderFunds(address)", +"434786f4": "getBalacne()", +"434847e0": "withDrawFees()", +"4349168e": "GenesisSalesPriceCount()", +"43496568": "timeLock(address)", +"434a55eb": "bonusFirstTwoDaysPeriod()", +"434afdfc": "totalObol()", +"434b1208": "rescueOrder(uint256)", +"434b14e7": "randomGen(uint256)", +"434b349c": "LCEToken()", +"434b635e": "getMaxBetAmount(uint256)", +"434c4498": "EthperPoe()", +"434cb64c": "startNextGeneration()", +"434d16f5": "rotate_left(uint32,uint32)", +"434d185c": "getKingdomOwner(string)", +"434df07e": "NewSerpent(uint256)", +"434e0618": "addMedicalProviderReply(address,string,string)", +"434e6a55": "addWebsite(address,string)", +"434ea7d3": "_lottery5(uint256,address,address)", +"434ec416": "EXT_COMPANY_STAKE_ONE()", +"434f5f27": "checked_in(address)", +"434f811b": "partIndexToApproved(uint256)", +"434fb2ae": "PRICE_MULTIPLIER_ICO3()", +"435010d8": "SrcToken()", +"43503fac": "getWord(uint256)", +"43509138": "div(int256,int256)", +"43516832": "getSuppliers()", +"43525d73": "MAX_FUNDING_SUPPLY()", +"435263ef": "ecosystemWallet()", +"4352e407": "RozetkaCoins()", +"4352fa9f": "setPrices(address[],uint256[])", +"4353401f": "NetkillerAdvancedTokenAirDrop(uint256,string,string,uint256)", +"43543242": "isSignatureOkay(address,bytes32,uint256[3])", +"4355644d": "addMonths(uint256,uint256)", +"43558826": "exchangequeue(address)", +"43559743": "edgePigment(uint8)", +"4355b9d2": "approveTransfer(address)", +"43562bd0": "NextRewardBonus()", +"4356f35b": "addIntermediary(address)", +"43574d9e": "owner2Of(uint256)", +"4357855e": "fulfill(bytes32,uint256)", +"43579fe8": "deleteShop()", +"4357b3de": "getCrowdsaleTier(address,bytes32,uint256)", +"4357da58": "pausePreSale()", +"4357e20f": "MinSlippageFactorSet(uint256,uint256,address)", +"4357e289": "Multiplexer(address,address[])", +"43581c80": "tdeFundsRaisedInWei()", +"4358630f": "Certificate(address,address,address,address,address)", +"4358c156": "isBonus()", +"43596b8b": "getLLV_edit_25()", +"435a0803": "testNowClock()", +"435a1220": "createERC20TokenNetwork(address,address)", +"435ad5c1": "getMixedStack(bytes32)", +"435adacc": "EtherrateUpd(uint256,uint256)", +"435ae547": "ResumeTokenAllOperation()", +"435afa54": "changeRepoSettings(uint256,uint8,uint8)", +"435bb6b9": "nextJackpotTime()", +"435c35b6": "startGeneralSale()", +"435ce40a": "isAccount(address,address)", +"435cebda": "createMember(address,address,bool,bool)", +"435cf753": "winCount(bytes32,address,address)", +"435dc3fb": "setGenesisAddress(address,address,uint256)", +"435e119e": "SetupRaffle(uint256)", +"435e33a5": "TokenRewardsAdded(address,uint256)", +"435f02f9": "ACIFToken()", +"435ffe94": "setHello(string)", +"4360617b": "Sell(bytes32,address,uint256,uint256,address,address)", +"4360f90f": "getOfferState(bytes)", +"436108ce": "changePasswd(bytes32,address,uint8,bytes32,bytes32)", +"4361443f": "getClaim(address,bytes32)", +"43614f8b": "endFinalStage1()", +"4361b3f9": "TokensCreated(address,uint256)", +"43620f24": "startWork(uint256,bytes32,bytes32)", +"43626c52": "AllInvestorsRefunded(uint256)", +"4362c088": "affiliateLevel()", +"4362c116": "transfert(address,uint256)", +"43634c39": "useSuperPowers()", +"436393ab": "AlrzshTest()", +"4363e888": "withdrawERC20Tokens(address,address,address,uint256)", +"43655fd3": "votesItem(address,uint8)", +"436577ae": "createIssuance(uint256,uint256,uint256,uint256,string,string,uint8,uint256)", +"4365e11e": "BingoLight()", +"43668efa": "ProposalAdd(uint256,address,string)", +"4366af55": "RTC(uint256,string,string)", +"43677ca7": "checkInternalBalance()", +"4367aa3c": "_isReserveUnlocked()", +"4368600c": "initDeposit()", +"436962b4": "_setTarget(address)", +"4369a2c2": "charityAmtToCharity(address)", +"4369c250": "rewardsFactor()", +"436a66e7": "length(string)", +"436a88c1": "DEV_FEE()", +"436b6158": "card2PowerConverter(uint256[])", +"436b8fa5": "Salman_nomaniTestCoin()", +"436d4ff5": "hash(string,address)", +"436d796c": "startPreIco(uint256)", +"436d8fd6": "setGameBanker(address)", +"436da5fe": "transferLog(uint256)", +"436e1e2e": "computeAirdrop(address)", +"436e388d": "enterWallet()", +"436ee4af": "SEEDS_TO_HATCH_1RICE()", +"436f64ac": "rInFp()", +"436fdc0e": "getBattleCardsInfo(uint256)", +"436fedc3": "getRegionUpdatedAt(uint256)", +"43700afe": "strConcat(string,string,string,string,string,string)", +"43703b0e": "getEventData(bytes)", +"437159de": "SYCPrivateEarlyPurchase()", +"4371c465": "isWeekEnd(uint256)", +"4371e46e": "blockCount(uint64)", +"43722993": "NPSTToken(address)", +"43722b09": "extOwner()", +"437257bd": "handlePointer(uint256,int256,uint256)", +"4372df99": "getNotaryForSeller(address)", +"4373f3b4": "setFunding(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"4374356b": "DRUGS_TO_PRODUCE_1KILO()", +"437583a9": "updateReserveToken()", +"4376890e": "egcToken()", +"437764df": "getBridgeMode()", +"43777117": "getMarketOptions()", +"4377cf65": "numberOfContributors()", +"4377d12c": "ChooseWHGReturnAddress(uint256)", +"437852b6": "getRefererAddress(bytes)", +"4378a6e3": "getAttributes(uint256)", +"437933cc": "setDataFeedHash(string)", +"437a8ae6": "multiple()", +"437b1a1d": "KITTY_BURN_LIMIT()", +"437c58a8": "YourtekToken()", +"437c9162": "pre_mined_supply()", +"437cfa4a": "setContractICOAddress(address)", +"437d07d5": "mktCoinCap()", +"437dbf49": "_isAuctionAble(uint256)", +"437f5b65": "isLUNVault()", +"437f6a4b": "userMakeOrder(address,address,uint256,uint256,address)", +"437fa667": "appAccountsLength()", +"4380ab6d": "clock(bytes32)", +"438195f9": "MAX_WHITELISTED_COUNT()", +"4381a07b": "setCustomDisputeFee(bytes32,uint256)", +"4381e1c5": "verificationAddressHoldersListNumberMap(address,uint256)", +"4383603b": "setAllowHalfLife(bool)", +"43846074": "getPreviousDarknodes(address,uint256)", +"43846fc8": "shortLock()", +"4384d53a": "BunnyCoin()", +"43859632": "hasVoted(uint256,address)", +"43863045": "addUintSetting(string,uint256,address,address,string)", +"438652e0": "addTransferWhiteList(address)", +"4386fe0d": "changeMinTokenSale(uint256)", +"43876776": "setPubKey(uint256,uint256)", +"4387d35a": "lockedWallet()", +"43886946": "getPlayerTeam(uint256)", +"43894ac3": "setMintMarketMakerApproval(address,address,address)", +"438af924": "buy(uint256,bool,uint256)", +"438b2aed": "setSettings(uint256,uint256,uint256)", +"438b7b99": "setProfitRatio(uint256)", +"438b9ff2": "payForUrl(address,string)", +"438c3585": "releaseTokensBlock()", +"438c3aff": "contractIds(uint256)", +"438c9068": "ownersProductCommissionInPerc()", +"438c9509": "test_invalidTokenFreeze()", +"438cd2d3": "UnPause()", +"438d1bd7": "storeBubbleSort(uint256[])", +"438d359e": "buyXname(bytes32)", +"438e1316": "next(uint80)", +"438e15fc": "contains(uint256,uint256)", +"438f1eee": "PowZoneToken()", +"4390921e": "distributeOne(address,uint256)", +"43909d76": "EthCannabis(address)", +"4390a4f8": "batchTransferToken(address,address,address,uint8,bytes32[])", +"439198af": "timeLeftToContestStart()", +"4392281e": "SCTX()", +"43923258": "addAddressToAccessControl(address,uint8)", +"43925cc3": "getRoomPlayers(uint256)", +"43927707": "NehalCoin()", +"43928cfd": "addClient(address)", +"439370b1": "depositEth()", +"4394aaad": "getNextAvailableReward(address,uint256)", +"4394cc96": "versionBase(bytes32,bytes32)", +"43951999": "getReportingWindowForForkEndTime()", +"4395dc06": "getTokenInfoTokenList()", +"43973140": "check_lock_period(address,address)", +"439766ce": "pauseContract()", +"43977911": "addFreezeList(address)", +"4398da85": "tokensPercentageForKeyHolder()", +"4398fbd6": "treeWater(uint256,uint256)", +"439abc5b": "getLockByIdx(address,address,uint32)", +"439b91c4": "addBlockeddUser(address)", +"439be05c": "getLoanFilledAmount(bytes32)", +"439d4265": "recordToTransfer(address,uint256,uint256)", +"439d7275": "issuerSymbol()", +"439e10e5": "createUniqueSpinner(string,address,uint256)", +"439e97c4": "alertCreators(uint256)", +"439f5ac2": "getEndTime()", +"439f7d3c": "getSponsor(uint32)", +"439fab91": "initialize(bytes)", +"43a085c2": "ProsperPresaleToken(address,string,string,uint256,uint8)", +"43a335d6": "CreditCarToken()", +"43a4344f": "calcNetworkFee(uint256)", +"43a44f1e": "bonusTimes(address)", +"43a468c8": "delegateBalanceOf(address)", +"43a47345": "floatHolder()", +"43a47ae2": "EthTermDeposits()", +"43a61a8e": "rootOwnerOf(uint256)", +"43a68f3a": "NegToken(uint256,string,uint8,string)", +"43a6e680": "DonationSentButNotDoubled(address,uint256)", +"43a77530": "serviceAgent()", +"43a78b50": "MyAddress()", +"43a7f749": "getInitialPriceOfToken(uint256)", +"43a8775a": "amountOfBagTypes()", +"43a886ea": "filterBrick(uint256,bytes32[],uint256,uint256,uint256)", +"43a88da6": "buyOpen()", +"43a8d9d5": "authorizeWithdrawal()", +"43a92f24": "getAvatarInfo(uint256)", +"43a98caf": "reinvest(bool)", +"43aa8784": "endedGameCount()", +"43ab599f": "EPSCoin()", +"43ab850b": "setDividends(uint32)", +"43abab26": "whitelist_addys(address[])", +"43acb067": "ChefICO()", +"43acd7bc": "Bailout()", +"43ae2695": "propertyToken()", +"43aefca0": "withdrawThetokens(address)", +"43af755a": "blockedDeadLine()", +"43b03d37": "i(address,address,uint256)", +"43b0e8df": "set(uint256,uint256,uint256)", +"43b114fd": "getMyCoins()", +"43b12e95": "BCEToken()", +"43b1938d": "getPhaseSale(uint256,uint256)", +"43b1c529": "getSig(string,bytes4)", +"43b25452": "createPortfolio(uint256)", +"43b3181c": "AIOS()", +"43b3769e": "checkStatus(address,uint256,string,address)", +"43b37dd3": "executionDailyLimit()", +"43b3aa46": "getTokenAmountOf(address)", +"43b50d8e": "evKickoff(address,uint256,uint256)", +"43b5126d": "getVendingPrice(uint256)", +"43b6c7d0": "setClaimedFlag(bool)", +"43b6caf3": "setMintPerBlock(uint256)", +"43b7d9c8": "ITToken()", +"43b7fd58": "RoomRoundAdd(uint8)", +"43b812ef": "r2VaultAddr()", +"43b89c62": "getTransactionAtIndex(address,uint256)", +"43b8aedf": "gimmeTendies(address,uint256)", +"43b978b3": "playerNames(address)", +"43ba2cf5": "transferPreSaleTokens(uint256,address)", +"43bb6a63": "getmemreqscount(uint256)", +"43bc1612": "artist()", +"43bc867e": "claimStupidFluffyPink(uint64)", +"43bcf52a": "bbdToken()", +"43bd262e": "injectAvatarService(address)", +"43bd6e6f": "changeColorYellow()", +"43bdaacb": "getPlayerInternalWallet()", +"43bddf40": "horses()", +"43bdfb72": "updatedTime()", +"43bf63e8": "priceInWeiEdition(uint256)", +"43bf6756": "getMixItemStore(bytes32)", +"43bf718e": "getHashOfTheProposalDocument()", +"43bf74ef": "setKYC(address,uint256,uint8,uint256)", +"43bff765": "tokensPerMicroEther()", +"43c09e77": "updateNote(uint64,uint16,bytes12,bytes)", +"43c0d38c": "getSlotId(address,uint256)", +"43c14b22": "revokeVote()", +"43c1598d": "maxProfitDivisor()", +"43c1f0ed": "timeBeforeJackpot()", +"43c238db": "POMCOIN()", +"43c273c7": "DevSupply_Released()", +"43c29522": "PUBLICSALE_USD_PER_MSENC()", +"43c33ac9": "submitShares(uint256,uint256)", +"43c35651": "completeCrowdSale()", +"43c3658e": "EmporeumToken()", +"43c37393": "solveTask(uint256,uint256)", +"43c569f4": "TotalWin()", +"43c5d889": "locationOf(bytes,uint256)", +"43c639e7": "ownerResetLockedShares()", +"43c6b1f2": "_transferAsset(address,address,uint256)", +"43c6d558": "SportsBet(string,uint256)", +"43c6e10d": "getAffiliateCommision()", +"43c6eff1": "submitClaim(uint256,uint256,uint256,uint256,bool)", +"43c8124d": "PoolAdvisors()", +"43c885ba": "inited()", +"43c8c30e": "removeModeratorship()", +"43c9a189": "allocate1ProjectToken()", +"43ca46dd": "_ownsToken(address,uint256)", +"43ca57bc": "getRetailerStatus(address)", +"43ca78a2": "getNotaryInfo(address)", +"43ca86c6": "nukeApps()", +"43ca9d26": "onNewCampaign(uint256,address,uint256)", +"43cade1c": "reStartPreIco()", +"43caf0dc": "distroyToken(address)", +"43cb0af7": "getBytesArrayLength(bytes32)", +"43cb2b03": "getCurrentTokenCost()", +"43cb3189": "ETHZToken()", +"43cbbce6": "icoRound2()", +"43cc113b": "holdersBonus(address)", +"43cd1638": "deposit3()", +"43cd2c40": "UpdateForecast(bytes32,bytes32,bytes32,bytes12)", +"43cd5ea1": "sendBussinessByOwner(address,uint256)", +"43cd9655": "XBTexToken()", +"43cdaad2": "modelId()", +"43cdc49e": "unlockTokens(address,uint64)", +"43ce179e": "issueOwnerMore(uint256)", +"43ce7422": "getMyEggs()", +"43cf5f0c": "PunaniSupply()", +"43cfbd65": "getCompanyName()", +"43cfd44c": "recover_unclaimed_bets()", +"43cffefe": "challenge(bytes32,string)", +"43d018a0": "whitelistMaxTok(address)", +"43d0ee54": "userRounds(address)", +"43d111ae": "binScan(uint256,address)", +"43d1498b": "setCoAuthor(address)", +"43d1be7b": "setPresalePhase()", +"43d24a5e": "addUpdater(address)", +"43d2b618": "_removeToken(address)", +"43d32e9c": "getSellPrice()", +"43d3a4c1": "getTotalVoters(uint256)", +"43d42780": "icoSoldTokens()", +"43d4759f": "HuuuumanStandardToken(uint256,string,uint8,string)", +"43d47f82": "ProjectFund()", +"43d4b78b": "stateIsWaitingReplay(uint256)", +"43d5773b": "SpaceCraftCore()", +"43d64976": "OwnershipDeleted(address,address)", +"43d6add1": "accessoryOnLeaderboards(uint64)", +"43d6cac5": "removeTokenMetadata(uint256)", +"43d6ec16": "LIFEFORM()", +"43d6fab6": "RegularContract()", +"43d726d6": "close()", +"43d77c7b": "platContract()", +"43d7bfcb": "mintBountyTokens(address[],uint256)", +"43d7cce6": "getToken(address,uint256)", +"43d84d49": "updateCrowdsaleInfo(string)", +"43d8b570": "isTeamVestingInitiated()", +"43d9e070": "sencSold()", +"43db053e": "withdrawDevShare()", +"43db24ad": "EthereumWings()", +"43db5324": "ownerSetCanMining(bool)", +"43db7821": "BINKEY()", +"43dbb2de": "MAX_ETH_FUND()", +"43dc3ab2": "register(address[])", +"43dc7233": "getTokenCreationRate()", +"43dcbc86": "hasNotaryBeenAdded(address)", +"43dd8b30": "updateWhitelistMapping(address[],address,bool)", +"43ddc1b0": "callETH(address)", +"43de34dc": "impl_cancelRedeem(address,uint256)", +"43de6f90": "createHero(string,uint16,uint16)", +"43de82f3": "revealVote(uint256,uint8,bytes32,bytes32,uint32,bytes32)", +"43deb064": "LemonSelfDrop()", +"43deb8e5": "START_SKO1_UNITS()", +"43ded8e3": "MyGlobeToken(uint256,string,string)", +"43defc10": "getVendorByAddress(address)", +"43defdac": "AudtStandardToken(uint256,string,uint8,string)", +"43e08ad1": "addHash(bytes32)", +"43e09695": "deactivatePass(bytes32)", +"43e0c65a": "allowToBurn(address)", +"43e0dfdd": "Leverage()", +"43e1b94f": "AnyName()", +"43e1eb82": "setSiftContractAddress(address)", +"43e204b3": "isTokenLock(address,address)", +"43e20f97": "getPoolbyGtype(int8)", +"43e271ad": "woodworksCities(uint256)", +"43e2e504": "GetBalance(address)", +"43e332c5": "Last_block_number_and_blockhash_used()", +"43e3e527": "Weko()", +"43e41c44": "Kotlind()", +"43e4cef1": "processPrivatePurchase(uint256,address)", +"43e57976": "EthMsig(address[])", +"43e6125d": "Badge(address)", +"43e6cc40": "issueTokens(uint256[])", +"43e6cc64": "StopToken()", +"43e72c5a": "totalPotHomeTeam()", +"43e74f46": "sendPrepaidEthTweet(uint256,string,string,string)", +"43e76a26": "SellerRequestedCancel(bytes32)", +"43e7aa1d": "commitPhaseLength()", +"43e91384": "setICOEndDate(uint256)", +"43e92866": "reservingPercentage()", +"43ea0313": "setRitualFee(uint256)", +"43ea8d7b": "newWithdraWallet(address)", +"43eb37e2": "initChargeJNT(address,string)", +"43eb5ac7": "getData_21()", +"43ec31e2": "TdToken(address)", +"43ec3f38": "toSliceB32(bytes32)", +"43ed2863": "StandardToken(string,string,uint8)", +"43edcb07": "_itransfer(address,address,uint256)", +"43ee67cf": "_transferFallback(address,uint256,bytes)", +"43f0179b": "takerFee()", +"43f29372": "redeemWinningTokens()", +"43f294a6": "setCrowdsaleStop()", +"43f3d27c": "setPrPercent(uint256)", +"43f415d0": "executeDecayFunction(uint256,int256,int256,uint256,uint256)", +"43f46a5c": "getPolicyState(uint256)", +"43f48fbd": "rates()", +"43f4cb4b": "GetCurrentTypeDuration(uint256)", +"43f58f9f": "createNetwork(string,uint256,uint256,uint256,uint256)", +"43f6c643": "purchaseRequest(uint256)", +"43f6c741": "HGToken()", +"43f70917": "create(address,address,address,address,address,address)", +"43f70f60": "dna5(uint256)", +"43f73a3d": "UpdateCurrency(uint256,string,string,string,string)", +"43f76b98": "generateLuckyNumbers(uint256)", +"43f8c639": "tickets100kprice()", +"43f97628": "EcosystemFund()", +"43f98345": "calculateAllReclaimedNow()", +"43f98a56": "tradingDate()", +"43f99e68": "refundExternalPurchase(address,uint256,uint256)", +"43fb86d2": "getGameLength()", +"43fce818": "createAngelCardSeries(uint8,uint256,uint64,uint8,uint16,uint64)", +"43fd377a": "ChannelNew(address,address,address,address,uint256,uint256,uint256)", +"43fd6b21": "revokeStackholderConfirmation(uint256)", +"43fe32fc": "activateProvider(address)", +"43fedd01": "setDisputeData(uint256[3])", +"44004cc1": "withdrawERC20(address,address,uint256)", +"44013585": "setPaymentTime(address,uint256)", +"44017cd6": "test_BondPostedButNoMajority()", +"44019db3": "testCreateWithParents()", +"4401a6e4": "safeSend(address)", +"4401c905": "INTREPID_PRICE_THRESHOLD()", +"4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", +"440208c3": "right12(uint256)", +"440235c0": "changeTrade(address,address)", +"44030e71": "getIsBlockRevenueCalculated(uint256)", +"44036b6f": "setFeePercentTenths(uint256)", +"44036c41": "getTrustedTransferDestinationValue()", +"4403e2ab": "nextLotteryTTWTokenId3()", +"4403ee2b": "setIFS(address,uint256)", +"44048aa5": "getContributorUSD(address)", +"440574eb": "adminUpdatePayout(uint256,uint256,uint256,bool)", +"4405a339": "logReputationTokenBurned(address,address,uint256)", +"4406bc60": "guessHash(bytes)", +"4406face": "lock(string,string)", +"4406fbab": "NectarCrowdsale(uint256,uint256,uint256,address,address)", +"44074cc7": "MaxCoin()", +"4407a75d": "BasicCrowdsale(address,address,address,string,string,address,uint256,uint256)", +"440878c4": "store(bytes,address,uint256,uint8)", +"4408c38a": "HIKEN(uint256,string,uint8,string)", +"4408f3f9": "place_bet(uint8)", +"44090448": "to(bytes32,uint256)", +"440961c3": "adjustPointsDecayFactor(uint256)", +"44097d70": "costWei()", +"440991bd": "freezeDuration()", +"440a16c4": "SEC(uint256,string,string)", +"440a7a0c": "unblockFirstStake()", +"440a926a": "home(uint256)", +"440adb38": "BullsFundToken()", +"440d2437": "designatedReport()", +"440d2ad0": "PRICELESS()", +"440f19ba": "draw(bytes32,uint256)", +"440f807e": "loadMesa(bytes32,bytes32[],uint8[])", +"4410121f": "test_voteSpammingFor()", +"441156cf": "Plutaneum()", +"4411b8f8": "disputeFavor()", +"4411c36f": "avgTokenlossValue()", +"441230e4": "registerHandle(bytes32,bytes32,address)", +"4412e104": "getZombiesByOwner(address)", +"4413a688": "setPreallocations()", +"4414356b": "sale3Accepting()", +"44146c26": "setExpectedTimes(uint256,uint256)", +"441478c3": "prepareToRewardProcess()", +"4414a5c8": "totalLose()", +"4414d940": "napkinPrice()", +"4415516b": "getType(uint16)", +"4415a0bf": "preSaleDiscountPrice()", +"441628f1": "sendTokensToBountyWallet(address)", +"441666c5": "SimpleContract()", +"441691f2": "LexitToken()", +"44169752": "WALLET_ADDR()", +"4417bc66": "VESTED_TEAM_ADVISORS_SHARE()", +"4417f4db": "burnOWL(address,uint256)", +"44187d45": "HerdiusToken()", +"44188b72": "openPreICOPublic()", +"44191d9d": "TokensCreated(address,address,uint256)", +"44195fd2": "ApolloSeptemFinalized()", +"4419cd81": "isContractNodeOwner()", +"4419da33": "changeInvestorAddress(address,address)", +"4419f969": "QuaLed()", +"441a174c": "multiCallTightlyPacked(bytes32[],address)", +"441a2ee3": "Mangocoin()", +"441a3e70": "withdraw(uint256,uint256)", +"441b09d9": "allShares()", +"441b1b44": "getPartialValue(uint256,uint256,uint256)", +"441b4f01": "investContractDeposited()", +"441c3499": "getRefers()", +"441c77c0": "revealPeriodActive(uint256)", +"441d6a61": "timeWait()", +"441deede": "getSafeContract(address)", +"441e354c": "_checkoutCost()", +"441ea478": "GetLandId(uint256)", +"442085b2": "contributorCap(address)", +"4420e486": "register(address)", +"44210bbd": "claimPlotWithData(uint256,uint256,string,string,string,string)", +"44219b05": "getGamePlayingStatus()", +"442484ff": "ExtTokenPurchase(address,address,uint256)", +"44249f04": "tokensForCharity()", +"4425c0eb": "claimWhitelistPack(bool)", +"4425d66d": "backup_exchangeEthStb(uint256,uint256)", +"44261964": "claimFullPrize(address)", +"44268655": "addCroupier(address)", +"4426cdc9": "changeEtherContract(address)", +"44276733": "getRole(address)", +"442890d5": "getContractOwner()", +"4428b072": "getReply(bytes32,uint256,uint256)", +"44292e88": "setZRXToken(address)", +"442a494f": "NewRegistrar(address)", +"442b7ffb": "pow2(uint256)", +"442b8c79": "addYears(uint256,uint256)", +"442bc74f": "placeQuestion(uint256,uint8,uint256,string)", +"442cbcb3": "addParticipant(address,uint8)", +"442cf0ee": "sellTokensForLtc(string,address,uint256,uint256)", +"442d0927": "isSellPossible()", +"442d1759": "GIRLToken()", +"442d27dc": "getLoanTuple(uint256)", +"442d31ca": "ChefToken()", +"442dfae2": "mktSupply()", +"442e1079": "MIN_ICO_GOAL()", +"442e501d": "createDeposit(address,uint256)", +"442eb683": "YouthToken()", +"442edd03": "listItem(uint256,uint256,address)", +"442efdc1": "MigrateController(address)", +"442f52ab": "bilateralCancel(address,address,address,address,bytes32)", +"44304edf": "TGCTokenBase(uint256,string,string,uint8)", +"44314116": "totalRollsByUser()", +"44326354": "pauseITO()", +"4432ce5f": "setTradersProxyContract(address)", +"44337ea1": "addToBlacklist(address)", +"4433a440": "ADXSold()", +"44346e3b": "cancelOngoingTxByAdmin(bytes32)", +"44348a78": "referralIndex(uint256)", +"44350d5f": "neo()", +"4435947c": "CoinyMcCoinface(uint256,string,uint8,string)", +"4435f1c3": "SlashToken()", +"4437152a": "setPool(address)", +"44377ebb": "getTokenAmount(uint256,uint8)", +"4437e7a0": "FlogmallAirdropper(address,uint256)", +"4438744b": "unlockGrant()", +"44389678": "isAcceptedExportingAuthority(address)", +"4438c8ab": "ExchangeRate()", +"4438cf6f": "burnRestTokens()", +"4438d222": "userHasKYC(address)", +"4439ab32": "addRecordEntry(address)", +"4439defa": "getNonce(bytes32[])", +"443ace5b": "InitiateWhaleCard()", +"443af072": "percentToPresalersFromICO()", +"443afe2b": "bssTotalSuply()", +"443b22e6": "ActiveSalesPhase()", +"443bd56f": "getHandleOwner(bytes32)", +"443bdc43": "setStepOneRate(uint256)", +"443d4c9c": "sendPayout()", +"443d8967": "batchWithdraw(uint128[],address[],uint256[],uint128[])", +"443de10c": "getCurrentStaked(address)", +"443e1cf7": "isFightClockAuction()", +"443f19f4": "numberOfTokens(uint256,uint256)", +"443f41d5": "tokenDeposit(address,uint256)", +"443f45a4": "awardprize(uint256)", +"443f577e": "getTotalBalance(bytes4)", +"443f95dc": "allStart()", +"444115f6": "acceptOffer(uint256,string)", +"444195a3": "partnersFundAddress()", +"4441bbd9": "schemaRegistry()", +"44420311": "setInt(uint256)", +"444257a3": "_includes(string[3],string)", +"4442bf02": "closeArea(uint256)", +"444316e8": "MiniMeToken(address,uint256,string,uint8,string)", +"44431e52": "minOVC()", +"44440a59": "isDistributionReady()", +"44447f47": "lockTokenSupply()", +"4444c51f": "_recalculateTopQuestionsOnVote(uint256,uint256,uint256)", +"4444e3cd": "totalSupply(address,bytes32)", +"444581da": "createCloneToken(string,uint8,string,uint256,bool,address)", +"4445b569": "voteWeightOf(uint256,uint256)", +"4446bb11": "verify_signature(bytes32,uint8,bytes32,bytes32,address)", +"4446c98c": "foundersFundTimelock1Address()", +"4447e48c": "configureKeys(uint32,bytes32,bytes32,uint32,bool)", +"44482ab8": "w0keAFPresaleAddress()", +"4448604b": "testFailPreDistribute()", +"4448f5fb": "getEscapeRequestsCount(uint32)", +"4449307b": "addKycAddress(address,bool)", +"44495d7e": "migrateGold(string)", +"444b0c90": "bonusThirdWeekPeriod()", +"444b6048": "setMerchantDealsHistory(address)", +"444bb28d": "TownCrier()", +"444c3d9a": "isCompetitionActive()", +"444c8daf": "tipoCongelamento()", +"444cef88": "sentToken()", +"444d95b0": "proofs(bytes32)", +"444da733": "isRoundEnd()", +"444da951": "extractWei(uint256)", +"444dd6f3": "Elcoin()", +"444e8b43": "pubkeys1(uint256)", +"444e984b": "triggerAttack(uint32)", +"444fda82": "subYears(uint256,uint256)", +"44501404": "goldPrice()", +"445045cc": "_bid(uint256,uint256,address)", +"4451967c": "FOUNDATION_POOL_ADDR()", +"4451cfd9": "DeductFees(address,uint256)", +"4451d89f": "claimToken()", +"44525ace": "roundLatLng(uint8,int256)", +"445264db": "adventurePresale()", +"44536d27": "Create_AutoGame(uint256)", +"44539c72": "setManyWhitelist(address[],bool)", +"44540e57": "ownerBurnOccurred()", +"44554cef": "getRedbulls()", +"44558192": "FMT_Crowdsale()", +"44559f80": "start_token_time()", +"44566fe0": "HumanStandardToken()", +"4456eda2": "isOperator()", +"44578558": "addPlayerMapping(string,string,uint256,uint256,uint256)", +"4457ce5b": "CCH_LLV_303()", +"4457d5f0": "createProject(string,string,uint256,address)", +"44587e3e": "_setNumber(uint256)", +"4458ddca": "ChristCoin()", +"44598c11": "hasOfferingStarted()", +"445a7a23": "isOracleProxy()", +"445b8477": "transferAuditor(address)", +"445cb2df": "getVoting(bytes32)", +"445d1397": "maxTransfers()", +"445d1eff": "_getMyDividents(bool)", +"445d46e1": "onlyInvestor(address)", +"445d60d3": "placeBuyRequest(uint256,uint256,uint256)", +"445d688b": "COTTToken()", +"445d9936": "setTempHeroPower()", +"445df0ac": "last_completed_migration()", +"445df9d6": "getAllPrices()", +"445e4979": "_rejectCertificate(uint256,bool)", +"445f153a": "showBlockmaticsCertificate()", +"44602a7d": "testFallbackReturn()", +"44605ea0": "phase_1_remaining_tokens()", +"4460a2ca": "initializeVesting(address,uint256,uint256,uint8)", +"4460fb6d": "burn(address,bytes32,uint256)", +"4461550b": "devETHDestination()", +"44621145": "goodsOK(uint256)", +"446294ad": "multiAccessGetOwners()", +"446298e2": "Rubid()", +"446303f3": "preSaleCap()", +"4464aec7": "testTryGet()", +"4464c35e": "GNTAllocation(address)", +"4465e38c": "EligmaTokenContract()", +"4466862a": "randomtest()", +"44669e40": "purgeVoter(address,uint256)", +"44673b2d": "NextOwner()", +"44691f2b": "Dispute()", +"44691f7e": "hasStarted()", +"4469981f": "arrayInfoForDeposit(uint256)", +"446a45b7": "fun1()", +"446a7974": "Fokitol()", +"446b512e": "orderedTokens(address)", +"446bffba": "add(bytes32)", +"446c0955": "addWifi(string,string)", +"446d5aa4": "getAttributes(address)", +"446d750b": "setMonthly()", +"446da9c2": "xper()", +"446dba8f": "getBonus(uint256,address)", +"446dde9b": "MilestoneCashBackTime()", +"446e0b40": "onSubExecuted(uint256)", +"446e5079": "SendDividend(address,uint256,uint256)", +"446f608c": "EscrowEscalation(uint256,uint256,address)", +"446f6c1f": "sellStorj(uint256)", +"446fbcd1": "CredSign()", +"446fcf22": "refundPlayer(address)", +"44708f7d": "change_time_stamp_status(uint256,uint256,string)", +"4470da90": "register(bytes32,bytes32,address,bytes32,bytes32)", +"44710181": "parseChannelCompatible(bytes)", +"44720ed5": "TigerCash()", +"4472287e": "numDistributions()", +"4472d3bc": "getShopOwnerAllProductList(string)", +"447400bf": "mutate(uint256,uint256)", +"4474809f": "tournamentEndBlock()", +"4474e057": "ICOSwapRate()", +"44751760": "read(bytes,uint256)", +"44751e3c": "starCoinAddress()", +"447615df": "Whitelist(address,uint256)", +"44767548": "rectangle(uint256,uint256)", +"4476d23b": "destructor()", +"4476d66a": "mintedInBlock(uint256)", +"4476e9a9": "epcwallet(address)", +"44772899": "round6StartTime()", +"44773a6c": "sendToMultipleAccount(address[],uint256[])", +"4477c5da": "stopFunding()", +"44781a00": "notEqual(bool,bool,string)", +"447843cf": "approveChild(address,address)", +"447885f0": "get(bytes32,address,address)", +"4478fbb2": "chOwner(address,bool)", +"44795c13": "RecoverySha256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"447a64c4": "usdContribution(address,uint256)", +"447cd682": "scheduleTransaction(address,uint256)", +"447d7a1d": "_toLower(string)", +"447e2dc6": "c(address,address)", +"447e52a0": "answerQuestion(uint256,string)", +"447e6967": "endPublicSaleStage()", +"447ee48f": "maxUserCreatedPerformance()", +"447fa561": "CAST()", +"447fa8b7": "setDex(address)", +"447fbbe3": "manualSendEther(address,address,uint256)", +"447ffa91": "MineCooldown(uint256)", +"44804664": "OriginSportToken(address)", +"44816e2d": "readhistoricalrounds()", +"4481a486": "transferECOMTokenToContract(uint256)", +"448246c3": "updateReferralMasks(uint256)", +"44830788": "estimateTokensWithActualPayment(uint256)", +"44831edf": "developmentTeamTokensMinted()", +"44834aca": "buyerAddress()", +"44845c28": "MediaCash()", +"4484780b": "checkRecentInvestment(address)", +"4484a2a6": "forceBuyback(address,uint256)", +"4484d92b": "getTotalCommission(uint32)", +"4485cece": "EndTimeChanged(uint256)", +"4485d32c": "storePortfolio(uint256,uint256[],uint256[],uint256[])", +"4486598e": "zeeshanabbc()", +"44866955": "champion()", +"448735e7": "BTN4()", +"4487b392": "removeVerified(address)", +"448883d7": "claimTax()", +"4488ca9b": "hasApproval(address,address)", +"4488cc43": "_addExcluded(address)", +"44890014": "setFxBpsRate(string,uint256,string)", +"4489b2ec": "getABaddressByIndex(uint256)", +"448a064f": "YunMint(address)", +"448a0ceb": "setRoughSupply(uint256)", +"448a5e11": "mintForDisputeCrowdsourcer(int256,uint256)", +"448a5f0b": "getTestimonialCount()", +"448a627c": "SetConfirmRound(bytes32,uint8,bool)", +"448a9915": "oneBillion()", +"448b1f29": "tokensForTrivial()", +"448c0341": "FXRATE()", +"448c6656": "nodePhases()", +"448d76a3": "grantReserveSupply()", +"448d8910": "solve(int8)", +"448f1ec1": "tranferPresaleTokens(address,uint256)", +"448f30a3": "nothing()", +"448f8c86": "Acentiex()", +"44909c99": "Doftcoin()", +"4490efe3": "EthernetCashWebsite()", +"449106ac": "stageCap()", +"4491fe8f": "onlyPay()", +"44938e94": "checkPartner(address,address)", +"4493b8a4": "addrDevTeam()", +"4493ff1c": "vestedBalanceOf(address,address)", +"44947b9d": "getOutcomeOfSecondPeriodByEntity(uint256)", +"4494fd9f": "getGame()", +"4495147b": "RtcCoin(uint256)", +"4495bbf7": "DOXYCOIN()", +"44964dcb": "theList()", +"4496a7ea": "_getCurrentRoundInfo()", +"4497ce22": "getLicenseReimbursement(address)", +"4498acba": "provenAddress(address,bool)", +"44997a58": "MinusToken()", +"4499af81": "setChainLedger(address)", +"4499e043": "UNSOLD_ALLOCATION_EXPONENT()", +"449a058d": "getParentsLength()", +"449a09a4": "interfaceAddr(address,string)", +"449a52f8": "mintTo(address,uint256)", +"449c198d": "setSealed()", +"449c7ad3": "withdrawHouseCutFromGame(uint256)", +"449d0eb1": "checkAccountSchedule(address)", +"449d0f29": "disavowCrowdsourcers()", +"449d1ba4": "fundBountyAndTeam()", +"449d2712": "LEF()", +"449daa9a": "setCostPerEnergy(uint256)", +"449de356": "isIncluded(uint256)", +"449e815d": "getPrice(address,uint256)", +"449ed7e0": "callback(bytes32,string)", +"44a040f5": "getRewardAmount(address)", +"44a08b36": "checkAccess(string,address)", +"44a0d68a": "setCost(uint256)", +"44a17516": "Configurable()", +"44a2542a": "initiateRefund(bytes32)", +"44a2d0d2": "contributorsKeys(uint256)", +"44a3982d": "getTokenPriceForPeriod(uint256)", +"44a3bb82": "getGameIndex()", +"44a5450f": "PRESALE_WALLET()", +"44a5b69c": "Reederem(uint256)", +"44a60878": "DCXToken(string,string,uint256,string)", +"44a6a8f0": "getDonationLength()", +"44a71bc6": "fundingMaxCapInWei()", +"44a7a992": "ParametersChanged(uint256,uint256,uint256)", +"44a7f501": "getOwnersGeneration()", +"44a926f9": "assigned_shares()", +"44a9ff76": "getLastHatchPrice(address)", +"44aa1826": "_minChild(uint256)", +"44aa470a": "addressVerified(address,string)", +"44aa5782": "LagToken()", +"44aa768f": "getLLV_edit_26()", +"44aa8b0e": "createAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"44ab1c2f": "calcHouseEdge(uint256)", +"44ab6970": "redeemBool()", +"44ab6efa": "comB_()", +"44ab7e6f": "setParamsUnOrdered(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"44abc212": "adminWithdrawEIP777(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32,uint256)", +"44abd790": "makePlant(uint256,uint256)", +"44ac423a": "Collect(uint256,uint256)", +"44ac9d81": "resumePreSale()", +"44acb8da": "crowdsaleTokenSupply()", +"44ace7c3": "Tribe(address,string,string,address)", +"44ad5535": "ProofOfContractSnipers()", +"44ae0567": "advisorsReleased()", +"44ae2c03": "getAppNickname()", +"44ae58f6": "Bittrees(uint256,string,string)", +"44af11a3": "startBuyBackOne()", +"44af18c2": "goolaTeamAddress()", +"44af1f4b": "replaceOfficials(address[])", +"44af24d6": "getCurrentPercentage(address)", +"44af946f": "calculateEndTime()", +"44afda9c": "_isValidBaseLayersOnly(uint256[],uint256)", +"44b0245d": "addPurchased(uint256,uint256,uint256)", +"44b07838": "setPaidPackage(uint256,uint256,uint256,uint256)", +"44b07a3e": "newProposal(uint256,string,bytes32)", +"44b11f26": "Registry(bytes32,uint16)", +"44b1231f": "vestedAmount()", +"44b1d6e3": "DEXLITE()", +"44b1e09d": "checkTargetReached()", +"44b1e61a": "isFirstInit()", +"44b20e7a": "drawNum_()", +"44b28d59": "enableMint()", +"44b2a172": "cards_metal(uint256)", +"44b49958": "presaleEtherRaised()", +"44b4d279": "payoutDividends()", +"44b55187": "DollarToken()", +"44b55c3a": "setParking(uint32)", +"44b70d79": "LiquidityNetwork()", +"44b76b9e": "ICOTimer()", +"44b77680": "init(address,address,uint256[])", +"44b786a1": "setRate_BTCUSD(uint256)", +"44b7a3b7": "_createScrapPartAuction(uint256)", +"44b8074c": "changeTotalAmount()", +"44b81854": "STSTEST1()", +"44b81a77": "BitcoinToken()", +"44b88a6d": "scannedBronzeCaps()", +"44b8ccda": "EthLongExercised(address[2],uint256[8],uint256)", +"44b9cab5": "roundBlockCount_()", +"44b9efb2": "setInputData(uint256,uint256,uint256)", +"44ba16a2": "COLOR_PINK()", +"44bb3b2f": "stopBlock()", +"44bb60cf": "sigDestinationApprove()", +"44bc3e27": "BetWEA(address,uint256)", +"44bd7186": "GestiToken()", +"44bd7b71": "setBountyPercent(uint256)", +"44bec848": "thirdRoundPercent()", +"44bee639": "distributeSupply(address,uint256)", +"44bfa56e": "getBytesValue(bytes32)", +"44c010c6": "_getReferralBonus(uint256)", +"44c040a6": "MyAdvancedToken(uint256,string,string,address)", +"44c11fe4": "currentTransferableTokens(address)", +"44c18aa7": "setPayout(uint256)", +"44c20957": "setPhase(uint8,uint256,uint256,uint256)", +"44c20e6f": "retrieveExcessEther()", +"44c2dd52": "RDPMoney()", +"44c2dd71": "HSCToken(uint256,string,string,address)", +"44c3cb29": "validPlayer(uint256,address)", +"44c3cc68": "BasePoll(address,address,uint256,uint256,bool)", +"44c47561": "whiteListed()", +"44c4bf10": "setBlacklist(bool)", +"44c4dc31": "totalContributedAmount()", +"44c4dcc1": "purchasedAmount(address)", +"44c526c1": "devRewardClaimed()", +"44c55801": "setVaribles(string,string,uint256)", +"44c5bbf8": "updateStatus(address,uint8)", +"44c5e758": "getCustomerPolicyCount(address)", +"44c63eec": "vesting()", +"44c71ef2": "changeSaleSettings(address,address,uint256,uint256,uint256)", +"44c73459": "weiPerBlock()", +"44c7d6ef": "claimStake(uint256)", +"44c9716a": "BVA()", +"44c9af28": "getState(uint256)", +"44c9e83d": "purchaseAuthorizer()", +"44ca361f": "Log1(string,uint256)", +"44caa8d6": "isArrAccountIsFrozen(address)", +"44cb1c33": "lastTokens(address)", +"44cc129e": "count_bytes(uint256)", +"44cc5f7e": "m_externalMintingEnabled()", +"44cc7f5e": "validWithdrawToken(address,address,uint256)", +"44ccbed0": "getAssetCollectedOreBallances(uint256)", +"44cef69b": "CreateTokenToOperation(address,uint256)", +"44cf262a": "addressChangeBlock(address)", +"44cff104": "setMarketManagerAddress(address,address)", +"44d02c2a": "infoICO()", +"44d03ac6": "BlockhashFetch(address)", +"44d0afbc": "signingLogic()", +"44d15446": "setDevelopmentAuditPromotionTokensPercent(uint256)", +"44d19d2b": "reservedSupply()", +"44d1a074": "marketsubscribers()", +"44d1a9ae": "setCardDrawPrice(uint256)", +"44d1ef3b": "setTCRHelper(address)", +"44d345f9": "UnclaimedRewardTransfer(uint256,uint256)", +"44d4fd19": "Now()", +"44d60e67": "TransferAssets(address,uint256,address)", +"44d6d259": "AdminAdded(address)", +"44d75fa9": "updateMinorTree(bytes32)", +"44d7e4ed": "stopIssuing()", +"44d9bc5f": "gameEndTime()", +"44daf94a": "showEthBalance()", +"44dbb571": "SALE_START_TIME()", +"44dbc282": "processCallback(bool,address,address,uint256)", +"44dc028d": "lockedtokensOf(address)", +"44dc4dec": "registerForRace(uint256)", +"44dd4b3b": "lookupGeneration(uint256)", +"44dd4b5e": "scheduleTransaction(address,uint256,bytes)", +"44dedf4d": "returnFundsForUsers(address[])", +"44defdfd": "paidInstallments()", +"44df8e70": "burn()", +"44dfdce0": "getNameOwner(bytes)", +"44e02dbc": "returnCollateral(uint256)", +"44e14e59": "lockReferralTokens(uint256,address,uint256)", +"44e191fa": "increaseApproveAndCall(address,uint256,bytes)", +"44e2024f": "createNewFreelanceContract(string)", +"44e20fd2": "EasyPocketCoin(uint256,string,uint8,string)", +"44e2651c": "whiteListOf(address)", +"44e2adeb": "claimedFlag()", +"44e2cc24": "JackpotTimer()", +"44e2f9ad": "buyerInfoOf(address)", +"44e43cb8": "depositRevenue()", +"44e44e0d": "Profeee()", +"44e4c366": "rmTrusted(address)", +"44e4d226": "alreadyVoted(string)", +"44e52420": "TRADERSCOIN()", +"44e5d154": "GenesisGlobalTestToken()", +"44e63717": "LaboToken()", +"44e66ee2": "updateMeterValue(uint256,uint8,uint256)", +"44e780b7": "PrepareRollEvent(address,uint256,uint256,uint256)", +"44e78d93": "wipeDAI(uint256,uint256)", +"44e796de": "doubleBonusArray(address[])", +"44e7faa4": "limitedWalletsManager()", +"44e86b2f": "left71(uint256)", +"44e880c1": "gasAfter_()", +"44ea1c71": "addNFBTNY(address,uint256)", +"44ea4a7c": "TokenCreated(uint8,uint8)", +"44ea54fe": "changeSoundcoinsContract(address)", +"44ec1a0d": "getContestStatusForDateAdmin(uint32)", +"44ec2c03": "addTransaction(uint256,uint256,uint256,uint16,bytes32,uint256)", +"44eccf16": "PSTBCoin()", +"44ed9039": "FLTTToken()", +"44edf6b2": "preIcoEndDate()", +"44ee398b": "secondThawDate()", +"44ee3a1c": "extendLock(uint256)", +"44eef96c": "sellShip(uint32,uint256,uint256,uint256)", +"44ef231b": "argumentCount()", +"44f04404": "forging(uint256,uint256)", +"44f06bc7": "getChampStats(uint256)", +"44f09d2a": "createDungeon(uint256,uint256,address)", +"44f0a4a8": "tdeStartTime()", +"44f0c3ce": "totalLost(address)", +"44f11e7e": "tokenBoughtPerTime(uint256)", +"44f1bbad": "giftRatioOf(address)", +"44f1beed": "Marble()", +"44f1ee5b": "Proof(address)", +"44f2428a": "adjustL(uint256)", +"44f252a0": "confiscate(address)", +"44f26d89": "forceUnstake(address)", +"44f27e30": "getAuctionData(uint256)", +"44f34576": "setTokensBought(uint256)", +"44f38756": "icoState()", +"44f396fa": "startStage2()", +"44f39803": "setBubbled(address)", +"44f5e447": "operatorFeeAcct()", +"44f6d70c": "giftOwnerByIndex(address,uint256)", +"44f7335b": "_verifyAvailability(uint256)", +"44f75cbd": "isAffiliate()", +"44f7636c": "publicOfferingWallet()", +"44f7787f": "ln(uint256,uint256)", +"44f7d03d": "valueOf(uint8,bool)", +"44f84579": "JP_winner()", +"44f96b36": "getRemainingPartnerTokensAllocation()", +"44f96bc6": "matured_timestamp()", +"44f977de": "setStore(string,address,uint256)", +"44f9ac5c": "getPendingWithdrawals(uint256)", +"44f9d060": "_getMinimum(bytes32)", +"44fa961d": "deleteLawyer(address)", +"44fa9ca6": "oracleIsUpdating()", +"44faa139": "Withdraw(uint32)", +"44fb5a1a": "Category(string)", +"44fbaf08": "bountyAmountLeft()", +"44fbc1ef": "Dollar()", +"44fbd125": "increasToken(uint256)", +"44fbe5f5": "NewBiggestDick(string,string,uint256)", +"44fc2a9b": "NOLLYCOINCrowdFund()", +"44fc364c": "setMarket3(address)", +"44fc709e": "set_property_facility(uint256,bool,bool,string)", +"44fc83dd": "LogTokenReward(address,uint256)", +"44fc9361": "maximumInvestmentInWei()", +"44fcbd79": "getLocksForAddress(address,uint256)", +"44fd1557": "ERC20Token(string)", +"44fd584d": "cancelLeaseOffer(uint8)", +"44fdbf5b": "releaseAllTokens()", +"44fddeb7": "BLOCKAPPS()", +"44fe2eb0": "totalPaidDividends()", +"44fe7cd5": "Eliminated(address)", +"44ff5a3e": "CWC_Address()", +"44fff35c": "openCrowdfund()", +"4500054f": "isCancellable()", +"45004310": "signUpUser(string)", +"4500e64f": "showLockValues(address,address)", +"4504169a": "_createFlower(uint256,uint256,uint256,uint256,address)", +"45044611": "TimeCapsule()", +"45048ced": "Presale(uint256,uint256,uint256,uint256,address)", +"450531e7": "aidPoolTokens()", +"4505d53f": "unclaimedPoolsPresent()", +"45061bf8": "tsc()", +"4506e64d": "putOn(uint256,uint256)", +"45078531": "PRESALE_LEVEL_5()", +"4507a545": "shouldBeTrusted(address,address)", +"4507fccf": "addDeal(uint256,bytes32,bytes32,uint256,bytes32,bytes32)", +"45083f73": "appendTranch(uint256,uint256)", +"4509052f": "scannedCaps()", +"4509fd81": "partnersPercent()", +"450a03dd": "getKunsNum()", +"450a9105": "setYctContractAddress(address)", +"450b6079": "RetRisk(uint128)", +"450c4b7b": "LogTokensBought(address,uint256,uint256,uint256,uint256)", +"450c99d3": "etherRealID(address,address,string,string,bool)", +"450cabcb": "publicGetExchangeRate()", +"450d94ef": "TransactionConfirmedAfterEscalation(uint256)", +"450db8da": "ContractUpgrade(address)", +"450dccf6": "cancelOrderWithMerchantByAdmin(string,address)", +"450e2ed3": "startNextCycle()", +"450eefae": "execute(address,uint256,string)", +"450efe21": "getTokens(address)", +"45102ca7": "generateCarId(uint256)", +"451048e2": "isALCDistributed()", +"45104b16": "EXECUTION_GAS_OVERHEAD()", +"45115a17": "PUBG()", +"4511cc7d": "Transfer_nodata_enabled()", +"45126711": "createRandomNumber(string)", +"4512b39b": "sendAndFreeze(address,uint256,uint64)", +"4513a44e": "Saturn()", +"4513a7f4": "IsTransferTempFromOldContractDone()", +"451450ec": "upgrade(uint256,uint256)", +"45145281": "CurrencyFactory(address,address)", +"451512ed": "forceDispute(uint256)", +"451515db": "addProduct(uint256,uint256,bytes32,address)", +"45152b14": "makeUnicTaskHashId(address)", +"45164b3e": "TRANSFER_PROXY_VEFX()", +"451659d9": "exchange(uint256,bytes8,bytes8)", +"45166351": "FRB()", +"4516b707": "DCOIN()", +"45176f8d": "CloutToken(uint256,address)", +"4517a273": "releasePremine()", +"4517bd42": "RetractRoutingDR(bytes32,bytes32,uint256,bytes)", +"4518982c": "firstBonusTokensLimit()", +"45190584": "remainPantry()", +"45196535": "calculateOrderHash(address[],uint256[],uint8,uint8)", +"45199e0a": "getPendingList()", +"4519a069": "toUint32(bytes,bytes,uint256)", +"4519c454": "tokenFallbackExpanded(address,uint256,bytes,address)", +"4519ef8e": "getMinutes(address,address)", +"451a308f": "buyProperty()", +"451b5f47": "preMaxContribution()", +"451bd752": "currentUniqueSpinnerPrice()", +"451bedb3": "getSettingsChangeConfirmationCount(uint256)", +"451beefc": "addressToSplittersCreated(address,uint256)", +"451c3d80": "acceptedToken()", +"451cd22d": "clnAddress()", +"451d65d3": "Debug(uint256,address,string)", +"451df00f": "SongTokenRemoved(address,bool)", +"451e3ec5": "_createName(bytes32,address)", +"451e422e": "windowPeriod()", +"451f0601": "advisersPartners()", +"451f7763": "admin_set_payable(bool)", +"451febcc": "equal(bytes32[],bytes32[],string)", +"452030c4": "end_PRIVATESALE()", +"4520d416": "getReserveminted()", +"45232370": "fechVoteMainInfo()", +"45239b90": "setBeneficiary()", +"4523be0d": "Daily()", +"45243120": "setFiatContractAddress(address)", +"4524c0cd": "defineReleases(uint256[],uint256[],uint256[])", +"4524c70b": "addEmployee(address,bytes32,bytes32,uint256,uint256)", +"4525f804": "constructor(address,address)", +"45261106": "maxBetsPerBlock()", +"4526196e": "addressB()", +"45262b05": "setDefaultExecuteTime(uint256)", +"45266d7e": "BrandAdded(address,address,string,bool)", +"452757f6": "changeContainer(address)", +"452766a5": "EGGS_TO_HATCH_1Cat()", +"45278394": "updateDemurrageReporter()", +"45279c81": "effectiveMaxBet()", +"4527b4b6": "HGUATToken()", +"4528f3ec": "lastPurchase()", +"45293f0e": "Luckybuy()", +"4529cae7": "getTotalPlayers()", +"4529cd71": "SOFT_CAP_IN_ETHER()", +"4529cd8a": "AdvertisementStorage()", +"452a33f0": "grantTrophy(address,bytes32)", +"452a344f": "MintStarted()", +"452ae331": "attack(address,uint256,uint256)", +"452af6c6": "ForegroundPaymentResult(bool,uint256,address,uint256)", +"452b7757": "AirDropPayBitsR3(address[])", +"452ccadb": "changeBountyFulfillmentAmount(uint256,uint256)", +"452d3c59": "transferPreSignedPayloadHash(address,address,uint256,uint256,uint256)", +"452d44dc": "checkBothNotNull()", +"452ddecc": "startBallot()", +"452e0d25": "sURL()", +"452e880b": "readArticle(string)", +"452e9802": "getDetails(address,address)", +"452e9acb": "setMsgHash(bytes32)", +"452fa483": "TOXToken()", +"452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", +"45301024": "ownerDispute(uint256,uint256,uint256)", +"4530a6c6": "getWishTribute(uint256)", +"4531aaa3": "EverydayTokenStandardToken(uint256,string,uint8,string)", +"45327fef": "calcSharePriceAndAllocateFees()", +"45334894": "setTeleportPrice(uint256)", +"4533f779": "determineWinnerOdd(string)", +"45350759": "addTier(uint256,uint256)", +"45350b6b": "readFromStorageView()", +"45362978": "query1(string,string)", +"4536be70": "periodITO_hardCapInWei()", +"4537544c": "makeAccountIterable(address)", +"4537b7de": "developingFund()", +"45385448": "BEERS()", +"45387d2c": "_getTournamentSupportAmount(uint256)", +"4538b7ec": "CallExecuted(address,uint256,uint256,uint256,bool)", +"453920cb": "changeTokenName(string,string)", +"45395b03": "tokensIssuedOwner()", +"4539bf18": "date01Feb2019()", +"453a6e0d": "getAmountConverted()", +"453aa450": "vote_proposed_address(string,string)", +"453b7eab": "totalControlledBalance()", +"453c2310": "maxPerWallet()", +"453ca7ee": "RewAddr()", +"453cbb11": "canConvertTokens()", +"453cddaf": "performPhase()", +"453dc243": "setWoodAddress(address)", +"453dd97f": "getDevWallet()", +"453dfcae": "payExtraTokens(uint256)", +"453e5a2c": "registerMarket(bytes32,address,address)", +"453e6fa0": "schedulableAmount()", +"453eca78": "getRealmNum()", +"453fe8cb": "calcUnMaskedEarnings(address)", +"453fef69": "setPrepaid(address,uint256,uint256,string,uint256)", +"454052ea": "relent()", +"45406101": "TTCToken(address)", +"45408a8a": "minCashout()", +"4540a396": "importBalancesOf(address[])", +"45411c8d": "checkAllowedTier(address,address,uint8)", +"45414df1": "b2s(bytes)", +"4541c39c": "to_end_ico()", +"4541e154": "sumICOStage4()", +"45421d9b": "reembolsar(uint256,uint256)", +"45426082": "countdownDecrement()", +"454274f9": "BroFistCoin(uint256,uint256)", +"4543754f": "totalUserStakes(address)", +"4543f79e": "withdrawERC20ToOwner(address)", +"454431c1": "RangeGameWithITG(address,uint256)", +"454481dd": "nextLotteryTTMTokenId4()", +"45448a28": "approveAddOwnerRequest()", +"4544ad22": "allByAuthor(address,uint256)", +"4544c48c": "distributeWinnings(uint256)", +"454584e6": "_setProviderInvitedUser(uint256,address,bool)", +"45458643": "setPI_edit_16(string)", +"45461e78": "MToken()", +"4546ad06": "sendProposal(string)", +"4548821c": "ExBatallionCoin()", +"45488ac1": "buyStake()", +"45493057": "validateClaimTokens(address)", +"454a2266": "dhopakexchange(address,address,address,uint256,uint256,uint256)", +"454a2958": "foundersTokenTimelock()", +"454a2ab3": "bid(uint256)", +"454aa6cf": "getPhoenix(uint256)", +"454b0172": "Created(address,address,address)", +"454b0608": "migrate(uint256)", +"454bccd0": "mininumContributeWei()", +"454bf426": "sysFeePermillage()", +"454c57ee": "getStockBuyOrderPrices(uint256)", +"454c5d34": "allocateBalance(uint256,address)", +"454c87b3": "matured()", +"454ca9fd": "get_my_tokens()", +"454ccc2f": "totalAngels()", +"454d3e24": "investorsBalance()", +"454d9bb4": "MerkleMine(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"454dd6d2": "GetMinimumBet_Ether()", +"454dfaaf": "claimSale()", +"454f7b8f": "totalPayout()", +"455052b9": "getInstanceMetadata(uint256)", +"4550fa72": "isConsensusObtained(uint256)", +"4551b1d7": "ProxyPayment(address,address)", +"4551dd59": "isCrowdsale()", +"455259cb": "getGasPrice()", +"45528aa8": "addItemToInternal(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4553c343": "getEarningMetrics(address,bytes32)", +"4553fd4d": "token_ratio2()", +"455501d3": "Submission(address,uint8[])", +"45550a51": "recoverAddressFromSignature(bytes32,bytes)", +"455530a6": "TestRandomNumber()", +"45556969": "DealerSocketCoin()", +"4555d5c9": "proxyType()", +"4555db10": "tokenRecovery(address,address,uint256)", +"4556611e": "weiToShare(uint256)", +"45576f94": "createToken(string)", +"455770a4": "setIcoPhase1(uint256,uint256)", +"455778ed": "advisorsTokensSecondReleaseTime()", +"45579b1f": "transferShares(uint256,address)", +"4557a579": "addWeapon(uint256,string,string,string,address)", +"4557b4bb": "init(uint256,address,address)", +"4557c70d": "CrowdWallet(address,address,uint256)", +"45585afe": "manageInvitations(uint256,address[],address[])", +"4558850c": "apps(bytes32,bytes32)", +"4558d717": "changePaymentToken(address)", +"45590ec8": "addTag(uint256,string)", +"45596e2e": "setFeeRate(uint256)", +"45598b4a": "cancelCampaign(uint256)", +"45599136": "tokenFee()", +"4559b2e8": "holderAdvisorsTokens()", +"455a2a37": "MyAdvancedToken(uint256,string,uint8,string)", +"455a380d": "getTotalAmoutStageAddress(address)", +"455b33ab": "gambler2()", +"455bf142": "refundeesListLength()", +"455c06e4": "mintTokens(address,int256,uint256)", +"455c7050": "EscrowManager()", +"455ca9bd": "refundTokens(address)", +"455d4077": "_startLockup()", +"455d86b8": "revenueShareOwnerAddress()", +"455dc46d": "nextMinimumEpochInterval()", +"455df579": "left84(uint256)", +"455ea98c": "getInUse(bytes32)", +"455eb777": "canStake(address,uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", +"455ef8f9": "coinsCount()", +"455f1725": "getTotalAmountOfBlocks()", +"455f6f31": "totalTokensBurnt()", +"455fd623": "totalWithdraw()", +"455fea46": "getTankDetails(uint32)", +"455ff9a4": "lastBlock_v16Hash_uint256()", +"456176eb": "PCDStartTime()", +"45622c31": "setContractAllowance(address,uint256)", +"45624260": "getNumPositionOperation(string,address,string)", +"45626ecb": "removeStages()", +"45629402": "changeDefaultWithdraw(address,address)", +"45639e37": "distributeEtherToAllShareholders(uint256)", +"4563b743": "getPAAttributes(uint32)", +"4563f30a": "transfersPaused()", +"45644fd6": "removeOracles(address[])", +"45645572": "presale(address,uint256,uint256)", +"4564ea36": "forceVoidExternal()", +"45653a6d": "creater()", +"45656757": "p1_start()", +"45668923": "Aikcoin()", +"45668f2b": "ORACLIZE_GAS()", +"45669c8d": "protectedTransferToMint(uint256,bytes32)", +"4567a6a7": "getXCPlugin()", +"4567c5f7": "buySharePriv(uint256)", +"45680e09": "createPixels(uint256)", +"4568fb50": "finishRoundAndStartNew()", +"4569db8a": "getCustomerTxAmountKWh(address,bytes32)", +"456a09c8": "withdraw(uint256[],uint256[],address)", +"456c2892": "finalizeLottery()", +"456c64e0": "getGamesOdds(uint256[])", +"456c8cac": "saleStopped()", +"456cb7c6": "authorized()", +"456cbafc": "AddressWarsBeta()", +"456cee82": "setAmountPerEther(uint256)", +"456f3c3b": "internalIcoFinished(uint256)", +"456fe579": "notate(address,uint256,uint256,uint256[])", +"4570160e": "MotionToken()", +"45705906": "isLeading4FF(address)", +"45705d93": "BwinToken()", +"457094cc": "fire()", +"45710074": "sell()", +"45714c7b": "TOKEN_CLAIM_WAITING_PERIOD()", +"4571a7f1": "maxStage()", +"4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", +"45734d2b": "sizeOfInt(uint16)", +"45737b1e": "changeEndDate(uint256)", +"457391e5": "createGame(bytes32)", +"4573a421": "ico4Sold()", +"4574dea5": "setBreedingFee(uint256)", +"45751137": "newDeposit(address,uint256,uint256)", +"457556c2": "getUBetChecks()", +"45755dd6": "returnFunds(uint256)", +"457610e5": "cancelTransaction(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"4576a635": "setCategoryCap(uint256,uint256)", +"45773e4e": "sayHelloWorld()", +"457750a4": "marketIncentivesAllocation()", +"457770d8": "PreICO(address,address,uint256,uint256)", +"4577942c": "lastTransactionTime()", +"45787fed": "WolframExchangeTimes()", +"45788ce2": "prev(address)", +"4579268a": "getOffer(uint256)", +"45798593": "Certification(string,string,string,string,string,string,string)", +"4579c805": "createDistritoVerify(uint256)", +"457a21bc": "GullitCoin()", +"457a893f": "upPlayer(address,bytes32,uint256,uint256,uint256,uint256)", +"457b4e1b": "_setMoreDetails(uint256,uint256,uint256,uint256,uint256,address)", +"457bb613": "initializeUsers()", +"457c600c": "getItemAllowanceAmount(uint256,address,address)", +"457ce032": "getTokensFromExchange(address,uint256)", +"457cf77a": "couponToken()", +"457d13ca": "getPlayerBet(string,address)", +"457dd8b3": "setMasterKey(address)", +"457e5521": "getAllPolicies()", +"457e8fc7": "calculateReward(uint32,address,address)", +"457eff2f": "GetMySnails()", +"457f4d41": "hammer()", +"457f55fb": "updateRightLottery()", +"4580a950": "setDecreaseRepAvailableForExtraBondPayouts(bool)", +"4580cc5e": "setFinished(uint256,uint256)", +"458284fb": "setACLRole7123909213907581092(address)", +"45837e5f": "updateLandData(uint256,string)", +"4584117e": "mintParts(uint16,address)", +"45848dfc": "GetAllAdmin()", +"4584afe5": "buyLambo()", +"45850658": "closeAssignmentsIfOpen()", +"4585ad02": "delayDefaultAction()", +"4586a517": "addTotalSponsored(address,address,uint256)", +"4586e4ab": "balanceInPlay()", +"45871918": "raceToBaseStats(uint256)", +"4587327a": "doAirdrop(address[],uint256)", +"45874c93": "PersonaIdentity()", +"4587501e": "baseIcoPrice()", +"4588c1ef": "setPI_edit_2(string)", +"45895620": "getAvatar(address,uint256)", +"458a645d": "resolveDeposit()", +"458b1471": "mintingFinishedTime()", +"458c9ca4": "year3Unlock()", +"458d5968": "getMyTokensEmits()", +"458d96bb": "transferLockedMultiply(address[],uint256[],uint256[],uint256[])", +"458da775": "_makePlant(address,uint256,uint256)", +"458e18d7": "AMLOveCoinVoting(address)", +"458e78d5": "getSchellingRound(uint256)", +"458efde3": "vest()", +"458f837f": "minSumICOStage1USD()", +"458fa428": "summDividendReserve()", +"458ff74f": "authorizeBurnFulfiller(address)", +"45906baf": "Restrictable()", +"45909a6f": "getBalanceOfUser(address)", +"4591a980": "verifyStep(uint256,bytes,bytes,bytes)", +"4591b7c6": "fillBonds(address)", +"4591c060": "fork()", +"4592282e": "LBC()", +"4592cd1d": "claimContractOwnership()", +"4592fec8": "returnBids(uint256,address)", +"459348dc": "BISTEXToken()", +"45934d0b": "getIdentityName()", +"45941a38": "lastTimeOfNewCredit()", +"45945a45": "isRoundActive()", +"459469e0": "FundsRegistry(address[],uint256,address)", +"4594762a": "getSkill(uint256,uint256,uint256)", +"459497fc": "ownerAddressInLUT(uint256)", +"4594d06a": "delMinter(int256,address)", +"45950cd4": "selfairdrop()", +"4595343f": "dividendsRightsOf_(address)", +"459659a4": "Exchange(address)", +"45967555": "deployedContracts(address,uint256)", +"45977d03": "upgrade(uint256)", +"45977ebb": "LINCToken()", +"4597dc8e": "CooldownThreshold()", +"45983b24": "isReferralSupported()", +"4599308f": "buyCow()", +"459a2192": "cardDetailsList(uint256)", +"459a585a": "testCreateToken()", +"459a6589": "transferInGame(address,address,uint256)", +"459ae9b3": "addMembers(address,bytes32,address[])", +"459b0d97": "SimpleConstructorBytes(bytes32,bytes32)", +"459b2cd6": "OwnableWithRecovery(address[],uint8)", +"459b3926": "Airdrop_Limit()", +"459c7d0b": "tokenIcoUsdCentPrice()", +"459cb2be": "agreedTermination(uint256)", +"459ccde6": "modifyRandomNumber2(uint256)", +"459ebb8c": "BCMtest()", +"459ec508": "betOnColumn(uint8)", +"459f93f7": "getBuyers(uint256,address)", +"45a058c1": "flag_is_Ethereum_Function_Signature_Database_Is_Big()", +"45a132d4": "LemonSelfDrop1()", +"45a15388": "marketPrice()", +"45a1b92c": "onBurn(address,uint256)", +"45a1d72a": "_tobuy(uint256,address,uint256,uint256)", +"45a1f1b9": "getInitials()", +"45a2556c": "getBucketOwedAmount(uint256)", +"45a2a3df": "withdrawTeamPerfit()", +"45a37bd6": "kycManagerWallet()", +"45a3816c": "forfietCollat()", +"45a3b0bf": "resolveFailPledge()", +"45a3c7c6": "_createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"45a40478": "downs(address)", +"45a45695": "baseTargetInWei()", +"45a48de6": "getBigPromoRemainingBlocks()", +"45a4a39c": "completePost(address,address)", +"45a727de": "checkForUpdaterUpdate()", +"45a743d1": "TOTAL_AIRDROPPED_TOKENS()", +"45a7b991": "getContributionHashes()", +"45a88ff6": "claimPlotMultiple(uint256[])", +"45a8d80e": "PiPiCoin()", +"45aa257a": "VICCoin()", +"45aa324c": "start_service(address,uint32)", +"45aa6e98": "tokensCreated(uint256,uint256)", +"45aa7f69": "OffMenuMorselToken()", +"45aa83d8": "blockoptions()", +"45ab17bf": "setRefunding()", +"45ab63b9": "walletFeesInBps(address)", +"45ab8e07": "CoinsdomCoin(uint256)", +"45abc063": "totalLoadedRefund()", +"45abe20a": "investorsIndex(uint256)", +"45acc490": "executeAmendmentMandate(uint256)", +"45ad35bc": "lastCallAddress()", +"45ad55cc": "PRE_ICO_DURATION()", +"45ade051": "getUtilizationRate(uint256,uint256)", +"45ae47fd": "CardFactory()", +"45aeff61": "getStockKey(bytes6,bytes6)", +"45af4bc2": "JJToken()", +"45af7ceb": "invalidateHash(bytes32)", +"45b0f6d2": "sealBurner(bytes32)", +"45b17abb": "distribute_private_sale_fund(address,uint256,uint256)", +"45b1c336": "icoWeek3Bonus()", +"45b21736": "getCBAStatusMessageLength(address)", +"45b26383": "contributeFund(string)", +"45b30e7a": "GTBToken()", +"45b35f56": "getAllRewards()", +"45b3fe42": "Y()", +"45b426f2": "option30symbol()", +"45b50255": "getBooking(string,uint256,uint256)", +"45b5143b": "TUMITOKEN(uint256,string,uint8,string)", +"45b581a2": "getPotentialProfit(address,string)", +"45b5a47a": "GetEther()", +"45b64133": "HHRLocker()", +"45b660bd": "IssueTokensToInvestors(address,uint256)", +"45b6ccfd": "MAX_MIDGRADE()", +"45b727f3": "getShop(uint256)", +"45b748ab": "SSPUnregistered(address)", +"45b7d5da": "setFrozenAccount(address,bool)", +"45b7fdd4": "TheGreatWishOfChina()", +"45b8bafc": "floorLog2(uint256)", +"45b8c0c2": "parcelGzeWithBonusOffList()", +"45b8fa03": "TokenLongExercised(address[2],uint256[8],uint256,uint256)", +"45b9ca21": "getEther(uint128)", +"45bae1eb": "carAccts(uint256)", +"45bae539": "getContributeParticipant()", +"45bbee71": "rmAsset(address)", +"45bbf9b5": "TotalPayment(uint256)", +"45bcd68f": "BitVideoCoin()", +"45bd3752": "intMemoryArray(int256)", +"45bd7f03": "addBountyAddresses(address[])", +"45bda564": "SPECIALIST_STAKE_THREE()", +"45bddbb8": "thanksAllGenesisUsers()", +"45bdfedb": "getAdrByIndex(uint256)", +"45be66eb": "SportsBet()", +"45beb6e0": "matchAgainstBook(uint128,uint256,uint256,uint256)", +"45bf5cb2": "testInitialBoardUsingDeployedContract()", +"45bfdca6": "addWalletAddresses(uint256,address)", +"45c08718": "updateCredit(address)", +"45c1234c": "Sent(address,uint256,string,string)", +"45c12560": "LogMoneyToPreICO(address,uint256,string)", +"45c1523a": "OzsToken()", +"45c16a22": "getSaleStage()", +"45c1c9fc": "setBuyEnable(bool)", +"45c35fd5": "publicOfferingTokens()", +"45c38053": "tankAllowance()", +"45c41132": "_emitPaymentReleased(uint256)", +"45c41478": "getMarkets(bytes,address)", +"45c46619": "addWhitelistedBurn(address)", +"45c531f3": "secondDiscountPrice()", +"45c5904f": "malangtoken()", +"45c5b8ac": "set_game(address)", +"45c5de81": "listTeamTokens(uint256)", +"45c654eb": "TravelToken()", +"45c6a874": "adminMultiSig()", +"45c7a092": "isValidSignature(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"45c8b1a6": "unfreeze(address)", +"45c8e118": "view44()", +"45c917ec": "closeDeposit()", +"45c9a11a": "maxProfitPercentage()", +"45c9a558": "getPeriods()", +"45ca25ed": "changeName(address,string)", +"45cb3dde": "withdrawTime()", +"45cb3f4d": "highestBidPrice()", +"45cb4559": "gameGiftUserTotalTimes()", +"45cb9994": "Lookup()", +"45cbf879": "getStageByBlockNumber(uint256)", +"45cc13c3": "tokenize()", +"45cc50ce": "endTimeIco()", +"45ccd426": "ObokContract()", +"45cd4820": "participate(address,uint256,bytes32,address)", +"45cdb714": "changeColorWhite()", +"45ce0dc1": "addLambo(string,uint256,bool)", +"45ce691a": "buy(uint256,uint256,uint256,uint256,uint256,uint256)", +"45ce86eb": "whitelistApplication(bytes32)", +"45cf093a": "sumDividend()", +"45cf8467": "getSqr(uint256)", +"45cfad3e": "TOKEN_PRICE_N()", +"45cfcc42": "getKeyVotes(string,string)", +"45d0695f": "arr(uint256,uint256)", +"45d1b657": "PRE_SALE_3000_ETH()", +"45d27edf": "forward_method(bytes,address,uint256,bytes)", +"45d30a17": "releasedAmount()", +"45d3292b": "receiveDonation()", +"45d3b8db": "superAddress()", +"45d3cc81": "getAnimal(uint256)", +"45d4cf2b": "createPrivilege(string,address,address)", +"45d5149f": "minContributionAmount()", +"45d53788": "numOrders()", +"45d58a4e": "getWalletOut()", +"45d607fe": "referralFee_()", +"45d63b07": "BrokerNekoNetwork()", +"45d63b66": "recommit(uint256)", +"45d6c9db": "PVP_BATTLE()", +"45d78d08": "getTokenAllocations()", +"45d7fd3e": "setCreationAddress(address)", +"45d8a232": "targetTime()", +"45d8a6df": "tablePrices(uint256)", +"45d9a1ce": "withdrawBalance(address,address,uint256)", +"45d9bd15": "getBookmarks()", +"45da75d3": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256)", +"45dafed2": "Marcellocoin()", +"45db72ff": "lastLoveLetter()", +"45dc16ca": "trade(uint256[12],address[4],uint8[2],bytes32[4])", +"45dc3dd8": "setMin(uint256)", +"45dcb788": "dataSourceGetRoundOfSixteen(uint256)", +"45ddc85d": "voteOf(uint256,address)", +"45ddcf99": "unlockUntradeableCards(address)", +"45de2567": "transferTokens(uint256,uint256)", +"45df30d2": "transferPlusFee(uint256)", +"45df925f": "ratingList()", +"45dfe7f3": "restrictedWallet()", +"45e05f43": "affiliate()", +"45e09e54": "getBoard(uint256)", +"45e0e324": "FoodStore()", +"45e0e412": "forwardTokens(address,uint256)", +"45e231a6": "XCONToken()", +"45e26105": "updateMaintenanceMode(bool)", +"45e29057": "_myLuckyNumber()", +"45e3553e": "setMaxProtoId(uint16)", +"45e373ed": "getCertificateById(string)", +"45e381a9": "set_minFinneyPerHedgeTransfer(uint256)", +"45e39705": "addMember(string,address)", +"45e3b8c0": "SHOP()", +"45e41468": "placeSell(address,uint256,uint256)", +"45e479f6": "GetDiv()", +"45e4c361": "rteamVaultAddr()", +"45e4db40": "addTxInBuffer(address,uint256,uint256,uint256,uint256)", +"45e4fd6e": "listItem(uint256,address,string)", +"45e5da07": "ETHAssets()", +"45e5fd8b": "nonActivationShortWithdrawal(address[2],uint256[7],uint8,bytes32[2])", +"45e63f22": "getNumberOfMessages()", +"45e7e140": "getReservedPercentageDecimals(address)", +"45e7e14b": "ReputationUpdated(string,uint256,uint256,string,string,address)", +"45e82175": "level_5_percent()", +"45e8baa7": "checkSignatures(bytes,bytes,bytes,address)", +"45e93903": "SpooksterCoin()", +"45e965cd": "strConcat(string,string,string,string)", +"45e971bf": "updateStatus(uint256,bytes32)", +"45ea375f": "viewPot()", +"45eada10": "setProvider2(address)", +"45eb4b28": "destinationAddress20()", +"45eb7c8e": "CompleteAddOn(uint256,address)", +"45ebc145": "publish(uint256,string,string,string,bool)", +"45ebe153": "moveIcoEndDateByOneMonth(uint256)", +"45ec26ac": "distributedCount()", +"45ec7670": "WallStreetCoin()", +"45ec9e87": "Eurovision()", +"45ecd02f": "isActiveMember(address)", +"45ed68e8": "defaultSalePrice()", +"45ede900": "setPropertyOwnerSalePrice(uint16,address,uint256)", +"45ee49b9": "getUltimateOutcomes(bytes)", +"45ee9151": "BountyTransfer(address,address,uint256)", +"45ef8217": "clear_market()", +"45f00b06": "setNewTalentsAndPartnerships(address)", +"45f03f31": "EthereumLottery(address,address,address)", +"45f09140": "chargebackCoins(uint256,address)", +"45f0db24": "get_coin(uint256)", +"45f11fc8": "trancheAmountPct()", +"45f23f10": "crowdsaleFundsWallet()", +"45f28864": "Appitoken()", +"45f28e77": "genToStartPrice(uint256)", +"45f32b02": "currentModifier()", +"45f32b6d": "totalCirculating()", +"45f32e77": "currBlock()", +"45f412b0": "removeStakeHolder(address)", +"45f45449": "EtherCash()", +"45f472fc": "saltNHash()", +"45f4c1ba": "pay(uint128,address)", +"45f536f7": "sendPer2()", +"45f63927": "increaseGame()", +"45f67eb4": "setTolerance(bytes32,uint256)", +"45f6ee41": "setPrice(uint16,uint16,uint8,uint256)", +"45f7f249": "totalAllocated()", +"45f826da": "setMinimumInvestment(uint256)", +"45f8567c": "paySmartContract(bytes32,address[],uint256[])", +"45f8f1e8": "RajTestICO(address)", +"45f9072b": "setColorOrange()", +"45f988a4": "priceT2()", +"45f99d51": "claimFailed()", +"45fa4045": "getVestingPeriodNumber()", +"45fa53e7": "pieAccounts(uint256)", +"45fb0cd6": "addMultipleAddressesToCappedAddresses(address[])", +"45fbe9cb": "spawnChild(string)", +"45fbfbca": "investment()", +"45fc916c": "setPricingPlan(address)", +"45fcceb4": "foundersTokensReserve()", +"45fd2478": "_getShipType(uint256)", +"45fd3666": "isTurnDataSaved()", +"45fd4040": "addAllowCnsContract(address,bytes32,address,bytes32)", +"45fd865a": "HazzaToken()", +"45fd9e23": "claimOwnership1()", +"45fdab4c": "sellSkill(uint256,uint256)", +"45fdef65": "addCandidate(address,bytes32,bytes32)", +"45fe5850": "OrganFunction(string,string)", +"45fe5a83": "deliveryTime()", +"45fe5aea": "useKey(address,uint256)", +"45fe6e2a": "Scheduler()", +"45febc32": "BugisNet()", +"45ff59b2": "createTokensForCrypton()", +"45ff8b75": "get_HoldersProfit(uint256,address)", +"45ff8fde": "request(bytes32,uint256,uint8,uint256)", +"460123cf": "findAddressByEndpoint(string)", +"4601cded": "getNumSides()", +"46021deb": "getLastAuctionedShipId()", +"4603032a": "withdrawByTeam(address,uint256)", +"46032178": "MigrateAgentSet(address)", +"460485e0": "fundsWithdrawnByOwners()", +"46051eb7": "getProductHistoryUser(bytes32)", +"46054144": "ASIEX()", +"46055acd": "Decline(address)", +"46057b70": "timeOver()", +"46061579": "check1(uint256)", +"4606ccd1": "spinAllTokens()", +"4607c26e": "periodsPassed()", +"4607ef57": "preICOTokenRewardRemaining()", +"46080a94": "subResearch(address,uint256)", +"46082aaf": "approveDeprecation(uint256,address,bool)", +"460885ab": "_createNewLottery()", +"46091499": "transferFrom(address,address[],uint256[])", +"46093b0e": "setOracleAddress(address,address)", +"460a6507": "giveReward(address,address,uint256)", +"460ab47b": "proposeChangeOwner(address,address)", +"460ad570": "newOraclizeResult(bytes32,string)", +"460b4a45": "getTotalBonusesAmountAvailable(bytes32)", +"460c1a7a": "cancelOrders()", +"460c3be5": "owner_LockUpdateTokenAccount(address,bool)", +"460d674b": "keyFromIndex(uint256)", +"460e2049": "getPlayers(uint256)", +"460f740e": "createData(string,string,string)", +"460fce3b": "milestoneStarted(uint256)", +"4610a448": "vestingBeneficiaryForIndex(uint256)", +"461105c7": "withdrawBoth(uint256,uint256)", +"4611636e": "erc20VGC(uint8)", +"46116e6f": "sireAllowedToAddress(uint256)", +"4611a5e3": "calcRefund(address,address)", +"4611efde": "changeTBrate(uint256)", +"4611fb0e": "RSC()", +"4612b88d": "deleteDiniRequest(uint256)", +"46134e33": "getPrivateSaleEndDate()", +"46141657": "SetdivForTank(uint256)", +"4614185a": "IkuraTransfer(address,address,uint256)", +"46143a39": "setMessageSpan(uint16)", +"4614689c": "showWinners(uint256)", +"4614874e": "createEscrow(address,uint256)", +"46156ea0": "odds(uint256)", +"461645bf": "window()", +"4616caa9": "pushCoin(uint256,address,string)", +"4616fc3f": "setSystemSaleAddress(address)", +"46172c04": "calculateRewardForAddressAt(address,address,uint256)", +"461751e6": "resetMistCallLoad()", +"46183d06": "getTktPrice()", +"46190e16": "getSpecId(bytes)", +"46190ec4": "nextId(address)", +"461998fc": "cancelRecurringPayment(address)", +"4619aa19": "pvpOwnerCut()", +"4619c0ca": "insertBeneficiaries(address,address,uint256,uint256,uint256)", +"461a2df9": "PretherICO()", +"461a4478": "resolve(string)", +"461ac019": "deployedTime()", +"461ad9e9": "saveGenCode(address,uint256,string)", +"461c89b3": "massMint(uint8[],address[],uint256[])", +"461db9ad": "GoCryptoCoin()", +"461df016": "getQuantities(address)", +"461e0be5": "ElphToken()", +"461efbf8": "testEtherFundMeCrowdfunding()", +"461f48cb": "setUsersBounty(address[],uint256[])", +"461fd83b": "myEtherBros(address)", +"46203efe": "frozenAccountCoinByHour(address,uint256,uint256)", +"46205ac3": "hodlFor1y()", +"4620adbb": "tokenPricePerUSD()", +"4621a5d9": "activateRevenueShareReference(uint256)", +"4621e552": "decreaseRemainLockedOf(address,uint256,uint256)", +"462219f8": "batchTransfer(bytes32,address[],address,uint256[])", +"46226514": "isPresidenteDeMesa()", +"4622ab03": "names(uint256)", +"46238c69": "nextRedemptionRequest(uint256)", +"4623beb6": "InterestTest(address,address)", +"4623c81e": "TIMELOCK_DURATION()", +"4623c91d": "setValidator(address,bool)", +"4624321e": "decreaseApprovalWithData(address,uint256,bytes)", +"46256be7": "getAgentAdressById(uint256)", +"46272a6d": "mySavings()", +"4627de42": "getIncrease()", +"46280a80": "sell(uint8,uint256,uint256)", +"46285e45": "checkBalanceAt(address,uint256)", +"46286c18": "_validateUserActive(address)", +"46287ddb": "rateLastWeekEnd()", +"4628b375": "TokenLeft()", +"4628bc22": "teamTokensVesting()", +"4628e45e": "ABAToken()", +"4629e619": "raceNum()", +"4629ffea": "newToken(string,string)", +"462a8e05": "setRabbitSirePrice(uint32,uint256)", +"462aa19e": "setToken(address,bytes)", +"462b2fca": "isRedeemLocked(address)", +"462c1bff": "H4D()", +"462c6070": "getLockedAmount_jishis(address)", +"462c6edb": "highBonusRate()", +"462dcfa0": "newMaster(address)", +"462e91ec": "addCandidate(string)", +"462f9a28": "get(bytes32,bytes32,uint256)", +"463079b5": "resetFactories()", +"4630a0ee": "changeTicketPrice(uint256)", +"4630d82e": "upgradeTokens(uint256)", +"4630f1d5": "toggleKillSwitch()", +"463107d4": "buyerfeeDivide()", +"46315237": "fiveHours()", +"46317712": "lastDebtLedgerEntry()", +"463193c7": "startselfdrop()", +"4631db54": "_burnTokens(uint256)", +"4631e15b": "assertEq15(bytes15,bytes15)", +"46325b48": "CTCoin()", +"46336cd3": "read(uint256,uint64)", +"4634009a": "getIdx(string,string,uint256)", +"46340b37": "RakugoPresale(uint256,uint256,uint256,address)", +"46348e0b": "calculateArea(uint256)", +"4634d81c": "getDividends(address)", +"4634ea79": "countCurrentPayment()", +"46352ad9": "transferToGrowthReserve()", +"4635b449": "raisedUSD()", +"4635ecd5": "lastTicketNumber()", +"4636a159": "newPhoneToAddr(address,uint256)", +"4636db04": "changeBid(bytes32,uint8,uint8)", +"4636e095": "acceptBet(uint32)", +"4637c85d": "wildcardTokenId()", +"4637d827": "trust(address)", +"4637de3c": "removeMod(address)", +"4637fd1a": "_transferEther(address,uint256)", +"463959fa": "minJackpotBet()", +"4639888b": "jockeyForSale(uint256,uint256)", +"463ac31b": "buyStore()", +"463c3347": "getMyLandMultiplier()", +"463c75b3": "GreenworldFarmToken()", +"463cde9e": "PUBGtoken(uint256,string,string)", +"463cf730": "maxEthCapBuyInFp()", +"463d3cda": "acceptExternalTransfer(string,uint256,string,uint256)", +"463d50b8": "transferFromVault(address,address,uint256)", +"463d5ce1": "isUserWithdrawalTime()", +"463dcf0a": "merge(address,uint256,uint256)", +"463dfae6": "setTrg(address)", +"463ee88a": "createBusiness(uint256,uint256,uint256)", +"463f2c21": "giveCredits(address,uint256)", +"463f7a7d": "_updateDependencies()", +"463f7a89": "getProperty(bytes32)", +"463fb5f1": "Bogotcoin()", +"463fbb76": "setTransportationFeeMultiplier(uint256)", +"46405ffc": "OhNoToken()", +"464066f5": "vote03NoCount()", +"4640f28d": "createPlayerToken()", +"4641257d": "harvest()", +"464299f9": "getReturnFromMonster(uint64)", +"46435fa1": "createPiranhaToken(string,address,uint256,uint8,uint8)", +"4643db5b": "DonationClaimed(address[2],uint256[8],uint256,uint256)", +"4644d17e": "getAirDropTokens()", +"46463941": "calcBonusReferrers(address,uint256)", +"4646939e": "updateWhitelistMapping(address[],bool)", +"464695b3": "tokensSoldTo(address)", +"4646f62a": "setAvatarFrom(address,string)", +"46478e91": "increaseGlobalInterestAmount(uint256)", +"46479541": "setWalletId(address)", +"4647d0c6": "CUNCoin()", +"464858c6": "NVT()", +"46488459": "getTopMigrationDestination()", +"4649bfee": "setCCH_edit_25(string)", +"464ae89f": "SponsoredLink()", +"464bb7a3": "findAccess(address)", +"464cccc8": "round4Cap()", +"464cecb8": "getHyper(address)", +"464d1208": "claimReward(address,address,uint256,address,uint256)", +"464da87e": "cofoundersSupplyVestingTranchesIssued()", +"464deba6": "TridentToken(uint256,string,uint8,string)", +"464e1d46": "setBalanceOfAddr(address,uint256)", +"464e47b4": "wasSoftCapMet()", +"464f37c9": "trustedChildRefund()", +"46503676": "_useCitizenAsLumberjack(address,uint16,uint16,uint8,uint256)", +"46503c01": "KansasvsClemson()", +"4650c308": "genericCall(address,bytes)", +"465105f0": "releaseAllETH()", +"46517145": "createNewCardType(uint256,uint256,uint256,uint256)", +"4651f716": "assertEq14(bytes14,bytes14)", +"4651ff39": "setopen()", +"4652e9fe": "getStartDateOfPlan()", +"46530c34": "activityExist(uint256)", +"46533d60": "setNewReleasePeriod(address,uint256,uint256)", +"46534649": "referralBalanceOf(address)", +"46538e07": "checkExistsOwnedMedal(uint64)", +"4653a1fa": "setAttackBoostCap(uint256)", +"4654b6e2": "addMonsterObj(uint64,uint256,uint32,address,string,string)", +"46567a07": "getTotal(address[],uint256[],uint256)", +"46570653": "_share(uint256)", +"4657681b": "set_num_of_uses(address,address,uint8)", +"4657ad8e": "payTxFees(bytes32,uint256)", +"4657d848": "getVendorIds(uint256,uint256)", +"46581235": "unlockToken(address,uint16)", +"465941e5": "ATMHolders(uint256)", +"4659f42a": "withdrawAfter(address)", +"465a092d": "PRESALE_ETH_CAP()", +"465aaeb7": "windowBonusMax()", +"465af554": "setLockJackpots(address)", +"465b43d0": "joy()", +"465c2cec": "SmartBonds()", +"465c8ce0": "getRobot(uint256,uint256,uint256)", +"465ce877": "HashnodeTenaraCoin()", +"465d1cbe": "getDepositsAmountLeft(uint256)", +"465d5c27": "_tokenIsApproved(address,uint256)", +"465d6e1a": "CAUSE()", +"465e759b": "testRestart()", +"465e920e": "getLineData(uint256)", +"465f1d07": "CrowdTmoney5()", +"465f41b1": "multiOwner(address[])", +"465fa408": "calculatePriceForTokens(uint256)", +"465fe311": "KEP()", +"46601278": "TotalTOkenSupply()", +"46602ce7": "FOUNDERS_POOL_ADDR()", +"4661bb98": "setClassWhitelist(uint32,bool)", +"46621234": "tmpAddr2contractAddr(address)", +"4662299a": "issuanceFinished()", +"4662fbdf": "promotorSale()", +"466339fb": "_rewards(uint256,uint256)", +"46642921": "changeModerator(address)", +"4664611e": "winningNumber()", +"4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", +"4664fe1b": "changeMinFunds(uint256)", +"4665096d": "expiration()", +"46653287": "createInitialTokens(address,uint256)", +"466551f1": "LinqToken()", +"466559e2": "S26ICO()", +"46656c46": "OxToken()", +"4665975d": "registerCustodian(address,address)", +"46682cab": "canFinishTournament()", +"46683308": "freezeAccountForLogic(address,bool)", +"46689c64": "startPlaceOrder(uint256,address)", +"4668b43b": "updateTelegram(uint256,string)", +"4668f372": "MaxMiningReward()", +"466916ca": "pauseStatus()", +"466985f3": "escape(uint256)", +"4669e680": "getPreEntranceMemberCount()", +"466a3443": "getIndividualPercent()", +"466ae314": "forwardedOutcomeSetTimestamp()", +"466bb312": "getDeposited(address)", +"466bc3bd": "GOXX(uint256,string,string)", +"466bf275": "getFreeToad()", +"466c35fc": "MINT_ADDRESS()", +"466c3a2b": "getChecksumAlgorithmCount()", +"466ccac0": "forSale()", +"466cf98f": "giftBalance(address)", +"466d3d38": "setDragonTactics(uint256,uint8,uint8)", +"466df592": "votingPeriodBlockNumber()", +"466e37e7": "newTapProposalFromTokenHolders(uint256)", +"466e561f": "updateReserve(address,uint8,bool,uint256)", +"466ebdf6": "setAddressOut(address)", +"466f0004": "getData_10()", +"466f8870": "Solar()", +"4671e65e": "proposeEmergencyWithdrawal(address)", +"4672f555": "pow(int128,int128)", +"46743691": "transferPublisherRecord(address,address)", +"467523fa": "setBuyerRate(address,uint256)", +"46755c68": "setEndingBlock(uint256)", +"46758d0b": "setAgentRate(address,uint256)", +"4676b897": "balanceOfUnclaimed(address)", +"467730fb": "toFound()", +"4677b540": "ATOToken()", +"4677fe53": "validUnitId(uint256)", +"467abbbd": "addPlayerHistory(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"467aeec9": "addShareholderAddress(address)", +"467d7289": "clearRound(uint256,uint256,bytes32,bool,uint256,uint256,uint256,uint256)", +"467de087": "withdrawAdvisorsTokens(address,uint256)", +"467eb43f": "verifyIdentity(address,bytes32,uint256)", +"467ed261": "getDSTNameBytes()", +"467f0b7b": "del_rank(uint256)", +"467f85e4": "DividendPayment(uint256,uint256)", +"468014e1": "startTimeSale1()", +"46804137": "bonusStep()", +"46807803": "_payoutMining(uint256,address)", +"4681067d": "incAdminEpoch()", +"468129a5": "setUnit(uint256,uint256,uint256)", +"46817362": "importersBanksDraftMaturityDate()", +"46822869": "BTFM()", +"4682ff71": "redeemMarketingToken(string)", +"4683ef63": "delayedOwner()", +"46848114": "startOffering(uint256,uint256,uint256,uint256,bool)", +"4686030f": "promethExecute()", +"468628e1": "getActivityById(uint256,uint256)", +"46862c8f": "mintOnce(string,address,uint256)", +"4686753d": "Crowdfunding()", +"46875458": "ARM()", +"4688a372": "withdraw(address,bytes8)", +"4689ab4d": "right21(uint256)", +"468a0413": "parseResult(bytes32,string,address)", +"468ae69d": "multiMint(address[],uint256[],string)", +"468b0c1d": "AllPay()", +"468b0fcd": "preSaleGoalReached()", +"468b0fe2": "setBridgeNode(address,address,bool)", +"468b3b33": "unlockedBalanceOf(address,uint256)", +"468c17d7": "_sendMsgSndr(address,address)", +"468e1b53": "DEC15Contract()", +"468e4509": "setAutoridadElectoral(bytes32)", +"468ed002": "INITIAL_VUP_TOKEN_SUPPLY()", +"468eeece": "revertGame(address)", +"468f02d2": "getUnderlyingPrice()", +"468f3dcd": "getTokenHoldersCount()", +"46904840": "feeRecipient()", +"46906982": "amountRaisedEth()", +"46911b64": "testDisputedWriteValid()", +"46912a4d": "PERC_TOKENS_TO_BIZDEV()", +"46915fc4": "getAllShareholders()", +"4691a998": "addVesting(address,uint256,uint256)", +"4692a481": "WilliamCoin()", +"4692d7e3": "BitQ()", +"4693667a": "changeMdtFoundationAddress(address)", +"469450cc": "disableLockDown()", +"4694fe85": "isUseContractFreeze()", +"469506bf": "getFinalSeed(uint256,uint256)", +"469507c6": "transferReward(uint256,address)", +"4695cf7a": "getSteakPrize()", +"4696890e": "ethworld()", +"469737d5": "forceRejectVotes(bytes32,address)", +"46975b9a": "swypeCode()", +"4697f05d": "setAllowed(address,bool)", +"4698ad05": "transferWhileLocked(address,uint256)", +"4698d110": "numMembers()", +"4698d920": "setMintAuditApproval(address,address,address)", +"4698da9d": "releaseVestedTokens(address,address)", +"469912d7": "Crowdsale(uint256,address,address)", +"46999ee5": "addNamespaceMember(string,address)", +"469a6947": "unlockTimeOf(address)", +"469aaa98": "BitSTDLogic(address)", +"469ab1e3": "contractNameHash()", +"469bb426": "failedDonations(address)", +"469c62a6": "buy_tokens()", +"469c7f4d": "transferOwner2(address)", +"469c8110": "sendMessage(string)", +"469c8dbb": "ExternalSale(uint8,bytes32,address,uint256,uint256)", +"469e2d5c": "submitPresetTransferes()", +"469e9067": "records(address)", +"469ef000": "hasValue(address[],address)", +"469f4c41": "setPreIcoStatus(uint256)", +"46a06ddb": "getPreviligedallowed(address,address)", +"46a06eb9": "LogTimedTransition(uint256,uint8)", +"46a1749a": "AgingTransfer(address,address,uint256,uint256)", +"46a1cd08": "getAvailableReward(address)", +"46a1d95f": "closeMarket(bytes)", +"46a1fabf": "Withdraw(address,uint256,uint256,bool,bool,string)", +"46a2679a": "getSubpotsCount(uint256)", +"46a2b53e": "GAS_REQUIREMENT()", +"46a3e290": "Defreeze(address,address,uint256)", +"46a3ec67": "TheAnswerIs(string)", +"46a54e15": "privatesale_start_time()", +"46a5b318": "DutchAuction(address,uint256)", +"46a5bf0c": "airDropStage()", +"46a60e99": "buyRoseGRLC(bytes32,string,uint256)", +"46a672bd": "createCard(string)", +"46a6c499": "freezeMyFunds(uint256,uint256)", +"46a7551d": "isOnBattle(address,uint64)", +"46a79a4e": "changeGameSettings(uint256,uint256,uint256,uint256,uint256,uint8,bool,uint256)", +"46a9d680": "EthereumGold()", +"46aa6644": "sendAllFeeToAddress(address)", +"46aaf139": "getSignersCount(bytes32)", +"46ab3d5e": "evaluateProposalMarket(uint256)", +"46abf8a8": "setVariables(uint8,uint16,uint16,uint16)", +"46ace8fd": "removeServer(string)", +"46ad5859": "getTokensRemaining()", +"46ade2de": "RESERVED_TOKENS_FOR_PRE_ICO()", +"46ae38a8": "getHexSymbol(string)", +"46aee903": "changeminBuy(uint256)", +"46af23f5": "InstantLottery(address,address,bool,address)", +"46afb963": "CrowdsaleState()", +"46b04e53": "PlayerInfoPerZone(uint256,uint256)", +"46b1d3be": "endTimePreICO()", +"46b207b8": "checkExpiry()", +"46b249b9": "tokenSaleOnHold()", +"46b305d6": "lockBetsForWithdraw()", +"46b33bc2": "getDonebountyAmount(address)", +"46b33e05": "getFreeTurtle()", +"46b4320c": "showUserBalance(address)", +"46b45af7": "isMintable()", +"46b55416": "subBuy(bytes32,bytes32,bytes32,address)", +"46b56bf6": "contract_sha256()", +"46b5d107": "testFailMintGuyNoAuth(int256)", +"46b5e202": "set_num_levels(uint256,uint256)", +"46b61083": "GoDigit(uint256,string,string)", +"46b65ffd": "getModule(uint8,uint256)", +"46b7068c": "returneth(bytes32)", +"46b753a2": "setChargeFeePool(address)", +"46b77d9f": "areFundsReleasedToBudget()", +"46b84cad": "getPackageById(uint256)", +"46b8c49e": "setReserveData(address,uint256,address)", +"46b98d0c": "startContract(bytes32,uint64)", +"46ba6f61": "setSuppressedGame(uint256,bool)", +"46ba7783": "setDistributionMinter(address)", +"46bb2833": "founderAddress()", +"46bbb6cf": "removeSshKey(string)", +"46bc29bf": "getGoldMigration(uint256)", +"46bd7067": "requestCoinMarketCapPrice(address,bytes32,string,string)", +"46bdca9a": "equal(string,string)", +"46be2310": "export(bytes8,address,address,uint256,uint256,bytes)", +"46be2e0c": "left32(uint256)", +"46be6f87": "newGame(uint8,string,string,bytes32)", +"46be96c3": "amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"46be9c48": "lockState()", +"46bf3df3": "_setWallets(address,address,address,address)", +"46bf5864": "ERC223Token_STA()", +"46c017b5": "zhuchu(uint256)", +"46c068c3": "testEndsWith()", +"46c092b2": "presaleGuaranteedLimit(address)", +"46c13d28": "changeAccessTokenFee(address,string,uint256,uint256)", +"46c2997a": "notMoreThan()", +"46c3166f": "testThrowRetractLatestRevisionNotOwner()", +"46c34832": "WinnerProvidedHash()", +"46c49c58": "CustomToken(string,string,uint8,uint256)", +"46c4e533": "withdrawUpdate(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", +"46c52b1a": "blockHexCoordsValid(int8,int8)", +"46c59373": "ethManagementPropagate()", +"46c66b27": "_transferAll(address,uint256)", +"46c6f325": "TEACHTokenToken()", +"46c715fa": "original()", +"46c797e2": "updateMarriageLicenceImageIPFShash(bytes)", +"46c7c126": "getChallenges()", +"46c968db": "blocktubeClip(string,uint256,uint256,uint256)", +"46c9b457": "privatePreSalePrice()", +"46ca48a2": "freeAmount(address)", +"46caf5e8": "BTB()", +"46cc3179": "getComponent(string,string)", +"46cc43fb": "decodedSecret()", +"46cd9b23": "_triggerNewPVPContender(address,uint256,uint256)", +"46cdb099": "shareholderID(address)", +"46ce33d4": "clearLockBalance(address)", +"46cee8f7": "TemporaryPyramid()", +"46cf1bb5": "lockState(address,uint256)", +"46cf6d2e": "_validate(uint256,uint256,uint256,uint256,uint256)", +"46cffffd": "NewAreaStatus(uint256,uint8,uint8,uint8,uint8,uint256)", +"46d0a022": "transfer(address,address,address,address[],uint256[])", +"46d0e892": "makeOptions(uint256,address,uint256)", +"46d0eb60": "addAlias(address,string)", +"46d0fb60": "isUserLicenseValid(address,string)", +"46d1501a": "PoP()", +"46d17bfd": "LongBought(address[2],uint256[2],uint8,bytes32[3],uint256)", +"46d17c3a": "Unregister(address,uint256)", +"46d1c605": "balanceOfButter(address)", +"46d22c70": "canBreedWith(uint256,uint256)", +"46d24cbb": "refundedWei()", +"46d36fa0": "ChristopherRobinRT()", +"46d46a6a": "CashTelex()", +"46d47cdf": "testFailCreateWithParentsParentNotInUse0()", +"46d5688e": "RATE_CROWDSALE_S1()", +"46d64aa2": "Kuberand()", +"46d667db": "setBytes32(bytes)", +"46d6b1e8": "getChampsForSale()", +"46d6c93b": "addFeed()", +"46d7195d": "vote_until()", +"46d73def": "hasHalted()", +"46d7df42": "setTokenContactInformation(string)", +"46d89444": "getCrowdsaleTierList()", +"46d95146": "anvlTechToken()", +"46db63d7": "rewardUser(uint256,address,uint256)", +"46dbf9b0": "pickupProduct(uint256)", +"46ddb7db": "setAccountBalance(address,uint256)", +"46de0fb1": "isFrozen(address,address)", +"46deb279": "ElementUpgraded(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"46df1578": "refferBonus()", +"46df2ccb": "setRate(uint256,uint256)", +"46e04a2f": "claimTokens(uint256)", +"46e06634": "approveKYC(address,bool,uint256,string)", +"46e0c223": "_createOfAthlete(address,string,address,uint256,uint256,uint256)", +"46e184da": "Olife()", +"46e1bfbb": "acceptAtGroup(address,uint256)", +"46e1f732": "investorsProcessed()", +"46e1fa55": "_removeDefaultOperatorByTranche(bytes32,address)", +"46e2577a": "addProvider(address)", +"46e2a174": "preIcoTokensSold()", +"46e33afc": "getFACTOR()", +"46e34823": "tan(uint256,string,string)", +"46e36060": "subBalances(address[],uint256[])", +"46e3cb1a": "sellTradeConfir()", +"46e44f63": "getCheckRecordTS(bytes)", +"46e4959d": "mintMulti(address[],uint256[])", +"46e4d35d": "numOfLoadedEarlyPurchases()", +"46e5500f": "LogFinalized(address,uint256)", +"46e5c323": "largestHODLERBalance()", +"46e6ffdd": "OwnableStorage()", +"46e767bc": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", +"46e780b0": "getLinkHash(address)", +"46e7ccac": "isAuthorizer(address)", +"46e7f38e": "BayCoin()", +"46e87b1e": "RgiftTokenSale()", +"46e93dbc": "maturityProcess(string,bool,uint256,uint256)", +"46e9ab22": "Gateway()", +"46e9e3c2": "reclaimPeriod()", +"46ea2552": "transferManager()", +"46eac50e": "superTransfer(address,uint256)", +"46eba0c1": "fundWithdraw(address,uint256)", +"46ebb5e2": "TimedPresaleCrowdsale(uint256,uint256,uint256,uint256)", +"46ec56c5": "getNumInvestments()", +"46ed24a3": "setAirdropToken(uint256)", +"46ed3199": "ATCToken()", +"46edef6c": "accICO()", +"46eea9a1": "secondStageRaised()", +"46eeed5f": "rolloverFee(address,uint256,uint256)", +"46ef6660": "createTokenContract(address,bytes32)", +"46f02832": "queryPermissions()", +"46f04694": "periodICOStage8()", +"46f0975a": "signers()", +"46f19888": "get_total_info()", +"46f24c6a": "functionSix(uint256,uint256,uint256,uint256)", +"46f25cad": "setAuthor(string,string,address)", +"46f2e880": "payForMyselfWithChecksum(uint128,bytes1)", +"46f42dff": "Win(uint256,uint256,uint256,address,uint256)", +"46f43f15": "StierBitToken()", +"46f74c6d": "setArbitrationPercentage(uint8)", +"46f76648": "getTotalEthSended()", +"46f7a883": "BuyTicket(uint8,uint8,uint8)", +"46f7cf87": "insert(address,uint256,address,address)", +"46f84dc4": "grantPermission(address,address,bytes4,address)", +"46f8e5ec": "getBlocksUntilStart()", +"46f92818": "setCreditDaoAddress(address)", +"46f99063": "totalSent()", +"46f9bedf": "costPerTicket()", +"46fa14e5": "MyFeed2Token()", +"46fa2574": "preIcoMembers(address)", +"46fae630": "getAllCardsAttack()", +"46fbf68e": "isPauser(address)", +"46fc0294": "senderRefund(bytes32,uint256,bytes20,address,address)", +"46fc9037": "__beneficiaryTransfer(uint256)", +"46fcafe2": "etherContributions(address)", +"46fcff4c": "availableFunds()", +"46fd9446": "setUsdEtherPrice(uint256)", +"46fde171": "closeCdp(address,uint256,uint256,address)", +"46fe2edb": "reserveIAMDestination()", +"46fec37b": "LogBounty256(address,uint256,string)", +"46ff099d": "cancelOrderByPayer(string)", +"46ff43dc": "totalInCents()", +"46ff4ce6": "betRedCoin()", +"46ff64f3": "setOraclizeRoundGasFee(uint256)", +"46ff7eac": "depositContrac(uint256)", +"46ffb216": "m_startTimestamp()", +"46ffdfbc": "getMax(uint16[])", +"47002c6d": "TOTAL_RECEIVED_ETH()", +"47006460": "maximumInitialBuyoutPrice(uint256)", +"4700d305": "panic()", +"4700dc57": "setFirstBonusTokensLimit(uint256)", +"4700fada": "GVToken(address,address)", +"47021780": "QSBH()", +"47026d90": "Volkstest3()", +"47028fcf": "getSponsorshipAmount(address,uint256)", +"4702d115": "dataCalc(uint256,uint256)", +"4702fa12": "_getCurrentRound()", +"47040cb4": "getStateProofAndHash(bytes,uint256)", +"47048c7b": "getMemberBoss(address)", +"47055321": "deduct(address,uint256)", +"4705b55b": "XCOIN()", +"4705d888": "getlastmoney()", +"47062402": "buyFee()", +"47064d6a": "setData(string)", +"4706840e": "destroykill()", +"4706c375": "_withdrawEquity(address,uint256)", +"4707f44f": "tokensOfOwnerByIndex(address,uint256)", +"47085958": "SetIndustry(string)", +"47089f62": "addVerified(address,bytes32)", +"470905b1": "Founder3()", +"470a5f4e": "reinvest(uint256,bytes32)", +"470b1984": "investedBTC()", +"470b1f7c": "AnetCoin()", +"470b2867": "tablet_owner()", +"470b6e0e": "addStackholderTransaction(address,bool)", +"470bb62b": "record(string,string)", +"470ca291": "referrerLevel3Ether()", +"470d7722": "batchAddAddresses(address[],uint256[])", +"470e872c": "transferBill(address)", +"47102a5d": "ETC(address,uint256)", +"4710411d": "twenty_percent_of_amount()", +"4710c5bf": "preSale3()", +"4710c63c": "excavation()", +"4710cfd7": "nContract()", +"47115192": "voteCut()", +"4711748d": "setNDCContractAddress(address)", +"4711dbe1": "registrationBounty()", +"4713f29b": "setBuyingCostumeRate(uint256)", +"47146b28": "setFiscal(uint256,uint256,bytes32)", +"4714c0aa": "proxyAccountingCreation(address,uint256,uint256)", +"47156810": "scheduleNewDerivativeToken(address,address,uint256)", +"4715b308": "decreaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"47166f62": "Quarkchain(uint256,uint256)", +"47170eb8": "LogEtherTransfer(address,uint256,uint256)", +"4717dea9": "getTicket(address)", +"4717f25a": "charonsBoat()", +"4717f97c": "getResults()", +"4718d108": "_transfer(address,address,string)", +"4718dc4d": "payOutVoterById(uint256)", +"47198cd1": "get_baseAmount(uint256)", +"471a20e7": "getResponses(uint256,uint256)", +"471a2270": "Lottery(uint8)", +"471a23c8": "burnMe(uint256)", +"471ab294": "handleTokensFromOtherContracts(address,address,uint256)", +"471ad963": "redeemProposalFunds(bytes32)", +"471b37cf": "VESTING_ADVISOR_DURATION()", +"471c95db": "TransferFees(address,uint256)", +"471d0481": "randomB()", +"471d4118": "releaseTimeFund()", +"471d66cb": "exceedsMaxInvocations()", +"471eab5c": "removeAllowedSender(address)", +"471efce5": "tokensForPreICO()", +"471efe66": "set_addresses(address,address)", +"471f11ec": "purchaseTown(uint256)", +"471f4722": "setOnSaleAmount(uint256)", +"471f7cdf": "favoriteNumber()", +"471fabfd": "eexploitOwnn()", +"472016da": "playersAddresses(uint256)", +"47202819": "unregisterInit(address)", +"4721ed6f": "enableRedemption()", +"47220f25": "maxPremiumDragonsCount()", +"4722361c": "canStartSettling(bytes32,address)", +"4722b4a5": "getFeeParameters()", +"47237f47": "freeStorage(uint256)", +"47241a27": "setAdditionalBonusPercent(uint8)", +"47244212": "Product(string)", +"472457cb": "addDragonName(uint256,string)", +"47249b1a": "GetEventInfo()", +"4725211b": "recordNameCount()", +"47255591": "setOuverture_des_droits(uint256)", +"4725d544": "_utoa(uint256,uint8)", +"47274dbe": "disableUser(address,address)", +"4727925a": "KEKEcon()", +"4728537c": "lockupBalanceOf(address)", +"4728d3ae": "CreatedEDU(address,uint256)", +"472905ca": "makeAdmin(address)", +"47293d15": "getAddressesCount()", +"472aa7df": "createProduct(bytes32,uint128,uint256)", +"472ad331": "InvestmentsCount()", +"472b6492": "AddEth()", +"472b6efa": "getWinRate(uint8)", +"472c681f": "addPack(address[],uint24[],uint24[],uint16)", +"472ca5e4": "allocateBid3(bytes32)", +"472d35b9": "setFeeManager(address)", +"472e1910": "verifyOpenSignature(address,bytes,bytes32)", +"472eb03d": "payLoan()", +"472f36e2": "Allocated(address,uint256)", +"472fdb67": "totalTokensReserve()", +"4730725d": "addToTimeLockedList(address)", +"4730bf06": "STAGE_1()", +"4732a7dc": "setMigrationAddress(address)", +"47337aab": "Btencoin()", +"4733a341": "SubmitClaim(address,string,string)", +"4733dc8f": "transferProxy(address,address,uint256)", +"4733ec90": "preparePayment()", +"4734922a": "generateOrderByAdmin(address,address,uint256,string,string,string)", +"473528b2": "_updatePurchasingState(address,uint256,uint256)", +"473533e6": "estimatedWeight()", +"47355ba5": "PiplToken()", +"47356bd9": "show_automated_Buy_price()", +"47356dd8": "getServiceUpdateAddresses(address,uint32)", +"4735b35f": "createDiamondAuction(uint256,uint256,uint256,uint256)", +"4735c747": "CrowdsaleToken(string,string,uint256,uint8,address,bool)", +"4735e00a": "CollectibleBought(uint256,uint256,uint256,address,address)", +"4736786b": "EthereumUnionToken()", +"47369a7c": "getPositionDeedHolder(bytes32)", +"4736b531": "TdeStarted(uint256)", +"47372325": "getChannelSize(address)", +"47373033": "enableStartBattle(string)", +"473753cb": "batchCancel()", +"47378145": "getBlockNumber(bytes32)", +"4737e852": "viewContractHoldingToken()", +"47387404": "_getGameStartAuctionMoney()", +"47395ced": "append(string,string,string)", +"473a223d": "getClosingTime(bytes32)", +"473aa2a5": "getFile(bytes32)", +"473ae9fe": "testCreateWithParent()", +"473b0d46": "setMinContribution(uint256)", +"473b4c53": "BrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"473bc223": "gameName()", +"473bca32": "secondAllocation()", +"473ca96c": "win()", +"473e9408": "_getAttributesOfToken(uint256)", +"473edf73": "Award(address,uint256)", +"473f0117": "contributionID(uint256,address,uint256)", +"473f1803": "claimRewardForUser(uint256,address)", +"4740a08b": "getEggData(uint256)", +"474154bc": "divIsSafe(uint256,uint256)", +"47416aec": "setTokenContract()", +"4741b95c": "setPercentFrozenWhenBought(uint256)", +"47428855": "assertEq32(bytes32,bytes32)", +"47430b36": "parnter()", +"474448c4": "finishResolveFund(bytes32,string)", +"47448e8a": "set(bytes32,string,bytes32)", +"4746041f": "burnIndexedFrom(address,uint256)", +"4746cef8": "_confirmAndCheck(address,bytes32)", +"47471183": "freeOf(uint256)", +"474740b1": "batchLimit()", +"4748f7c2": "icoPhase1TimeBonusInPercentage()", +"47492352": "ROLE_PAUSE_ADMIN()", +"474a5a09": "AssetBackedToken(uint256,string,uint8,string)", +"474a88cb": "failsafe()", +"474a898b": "miniGameInfo()", +"474b2541": "setRevision(address)", +"474bbab2": "calculateTokensToSend(uint256,uint256)", +"474c0868": "getActiveBuySize(bytes32)", +"474cdca2": "countTotalInvestors()", +"474ce368": "Computer()", +"474ce872": "promisee()", +"474ceb4d": "setCrowdsaleDate(uint256,uint256,uint256,uint256)", +"474d904b": "totalTokensWithoutBonuses(address)", +"474da79a": "contracts(uint256)", +"474e9e74": "MaxICOSellSupply()", +"474ea7e9": "Cyrus()", +"474f067f": "setType(bytes32,string)", +"474fa131": "extraMintArrayPendingProcess(uint256)", +"47516910": "FileHash()", +"4751757a": "Metronome()", +"475289da": "numberOfMoods()", +"475297bc": "closeBets(bytes16,bytes16,uint256,uint256)", +"4752a3ce": "StdUInt32(uint32)", +"47535d7b": "isOpen()", +"47540b31": "setTeamAddress(address,address,address)", +"4754a311": "StatusContract()", +"4754d136": "rerollFee()", +"47556b73": "isSuperInvestor(address)", +"4757ace4": "milestoneCompleted(uint256)", +"4757f1d2": "redeemAllOutcomes(uint256,uint256)", +"47582291": "totalstakeamount()", +"4758871d": "FOUNDER_EXCHANGE_RATE()", +"4758b9cd": "checkNumber()", +"47593ae7": "oldPrice()", +"47598b62": "marketplaceController()", +"475a2ac6": "mainSale(address,uint256)", +"475a9fa9": "issueTokens(address,uint256)", +"475abbb7": "PLATAMOUNT()", +"475b54c9": "AdvancedOwnable()", +"475b723a": "setRate362()", +"475c051d": "grantPermissionBatch(address[],string)", +"475c3001": "FinishTokenSale()", +"475c420c": "setHelpMeTokenParts(address[])", +"475c578c": "walletPercentage()", +"475c5ed1": "contributedToSTO(address)", +"475c7605": "ImpeachmentSupport(address,uint256)", +"475ca435": "get_record_by_row(uint256)", +"475d41f9": "SISKCoin()", +"475d599b": "wolf2Balance()", +"475e0062": "RoundEnd()", +"475e4c0f": "buscarDocumentoPorHash(bytes32)", +"475ec95a": "PRESALE_MINIMUM_FUNDING()", +"475fd055": "supplyLeftAtOrigin()", +"4760eee3": "getStartersProxyAddress()", +"47615fa1": "RankScore(address)", +"47625694": "getPerformance(uint256)", +"476343ee": "withdrawFees()", +"47635dac": "transferContract(address)", +"4763e3fe": "LOG_ZeroSend()", +"4765fb39": "userstaticprofis()", +"4766551d": "getExCoins()", +"47665ae8": "setMaxEthPerAddress(uint256)", +"4766ae68": "RareToken()", +"476711cb": "currentPeriodEtherCollected()", +"4767aeec": "_getaward(uint256)", +"4767d305": "EventCreateRisk(address,uint128,uint256,uint256)", +"476810b5": "ico1Min()", +"4768136e": "MelonWallet()", +"47683f00": "isInTier2(address)", +"47688c74": "userAmount()", +"47695e60": "MENTORS()", +"4769ed8f": "buyFromRC(address,uint256,uint256)", +"476a29e2": "pauseStateSwithcer()", +"476a4558": "DigitalMaterai(uint256)", +"476a73ec": "transferEthToMultisig()", +"476aa607": "saleHardCapReached()", +"476b7e3b": "readyToFulfill()", +"476c089a": "finalyze()", +"476c494c": "newAnswer(uint256,uint256)", +"476c9f41": "SecurityToken(string,string)", +"476d7c13": "userToNumCities(bytes32)", +"476e04c7": "NewMessage(string)", +"476e4aa4": "Remove(uint256)", +"476e6172": "getCurrentPlayer()", +"476fe919": "setReleaseTime(address,uint256)", +"4770ca3c": "AddBTCTransactionFromArray(address[],uint256[],uint256[],bytes4[])", +"47722218": "setKycAdmin(address)", +"477269c0": "setHpbNodeAddress(address)", +"4772eb77": "callDisableCallback(string)", +"47734892": "getUserBalance(address)", +"4773e0be": "didCloseLoan(bytes32,address,bool,uint256)", +"4774027c": "changeOffchainUploaderAddress(address)", +"477492dc": "MAIN_COIN_PER_ETHER_ICO()", +"4774ef06": "forwardGas(address,uint256)", +"47751b98": "validUpgradeId(uint256)", +"477523c2": "flushERC20(address)", +"47767c5d": "CRYPTOZOLToken()", +"4776ed69": "AngelTokensHolder(address,address,address)", +"477721e9": "FrozenContract(bool)", +"4777338c": "lastPricePaid()", +"4777c1f4": "setUnownedPriceInEth(uint256,uint256)", +"4777dbcf": "EternalStorageProxyForStormMultisender(address)", +"477801b1": "getLastRoundResults_by_index(uint256)", +"47786d37": "setCap(uint256)", +"47786f51": "HODL()", +"4778a5be": "orderSubmitted(bytes32)", +"4778dfb8": "balanceById(uint256)", +"47799da8": "last()", +"4779fad9": "setMentorsTokensPercent(uint256)", +"477a0eb3": "removeAtIndex(bytes32[],uint256)", +"477a7042": "getCanvasState(uint32)", +"477adb83": "eggtracker()", +"477af741": "firstMaxAmount()", +"477bda31": "qnt10k()", +"477bddaa": "setContractAddress(address)", +"477cdbb5": "create(uint256,uint256,uint256,address)", +"477ce277": "cost(address,uint256,bytes,bytes)", +"477d47b5": "viewPreSaleRefundsInMainSale(address)", +"477d6c6c": "_emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"477e5d24": "pvpQueue(uint256)", +"477eab0a": "taxman()", +"477fe4e6": "payForTask(uint256)", +"477ff120": "addTokenAddress(address,address)", +"47803e97": "tokensOnHold()", +"4780eac1": "wethContract()", +"47810b3e": "LTY()", +"47816131": "EphronTestCoin(uint256,uint256,uint256,string,string,uint256)", +"4782f6fc": "removeOwners()", +"4783c35b": "multisig()", +"478573ca": "getMainWallets()", +"47858c79": "finalizedUpgrade()", +"478609f7": "mintTokens(int256,address,uint256,uint256)", +"4786cfea": "_estimateSupply(uint256,uint256,uint256,uint256)", +"47872b42": "unsealBid(bytes32,uint256,bytes32)", +"4787513a": "tokenHoldersCount()", +"4787e261": "calcQuickPromoBonus(uint256)", +"47883fd9": "product4_luckybuyTracker()", +"4788cabf": "getContractId()", +"4789aaef": "EthereumDice()", +"478aa69e": "unauthorizeUser(address)", +"478ae93c": "playToWin(uint256)", +"478b2f8b": "trieValue(bytes,bytes,bytes,bytes32)", +"478bdce2": "WinningNumbersEvent(uint256,string)", +"478c4238": "p_update_mResalePlotOwnerPercent(uint256)", +"478c4e0e": "resetData()", +"478cd032": "getLevelAmount(uint256)", +"478d2136": "proposalsByShareholder()", +"478db7e7": "getDataTrackingParameters(uint256)", +"478e25bf": "resetAction(bytes32)", +"478e7d7f": "getSponsorableJobs()", +"478f0735": "Jamatoken()", +"478f796a": "ownersWallet()", +"478f7b52": "mainSaleMinPaymentWei()", +"478f7eca": "CnytCoin()", +"47913dfe": "staticArrayChangeValue(int8,uint256)", +"47923d6f": "_addDividendsForAddress(address)", +"479245bb": "_transferOwnership(address,address)", +"4793017d": "stageLending()", +"47930567": "hashPosition(uint32,int64[2],bytes16)", +"4793504e": "Divider(uint256)", +"4793cebe": "allocateRemainingTokens()", +"479487e3": "getCar(string)", +"4794db02": "existenceDecimals(address)", +"479564d5": "getAssociatedTAOSettingDeprecation(bytes32)", +"4795ac60": "collectPayment(uint256)", +"47963cf8": "COINEIUM()", +"47966bc2": "spam()", +"4797debe": "approveAmountAndSetFirstUseTime(uint256,address,uint256,uint256)", +"4797f21b": "setLog(address)", +"479834ca": "generateRandomMonster(uint8[14],uint32)", +"4798a2e3": "limorico()", +"47992b25": "DST_RESERVE()", +"479a4ae9": "isSHA256HashRegistered(bytes32)", +"479a5d53": "setOtherMigrationSources(address[])", +"479ad4c3": "removeListing(uint256)", +"479b321e": "CyberCash()", +"479ba3a5": "_resetPlayRound()", +"479ba7ae": "rewardsOf(address)", +"479d29f4": "BiyuleCoin(uint256,string,string)", +"479e24e6": "setNewInvestCommission(uint256)", +"479e393c": "getBettingStastics()", +"479e840f": "playValue()", +"479ed225": "getMyGameCompleted(address,uint256)", +"479f8d33": "threeHotHoursDuration()", +"479fb784": "approveBalancesWaitingKYC(address[])", +"47a08955": "_Deposit(address,address,uint256)", +"47a0fd7e": "shieldsUp()", +"47a11f26": "lIKETOKEN(uint256,string,string)", +"47a1a2d6": "usdCollected()", +"47a21679": "sellKeys(uint256,uint256,bytes32)", +"47a21eda": "buySharesFor(address)", +"47a22ca4": "devChangeMiningReward(uint256)", +"47a34bcb": "getBlockMaxVotes(uint256,uint256)", +"47a36afd": "totalFeeFlows()", +"47a42ff7": "buy_sale()", +"47a5046a": "isKYCRequiredToReceiveFunds()", +"47a5b1b3": "addApprovedContractAddress(address)", +"47a64f44": "lockAccount(address)", +"47a66b57": "addUserEndorsement(address,bool,string,string)", +"47a68cd4": "EOSBetDice()", +"47a69105": "NewSmartSharingContract(string,uint256,uint256,string,string,string,string)", +"47a69dfd": "Vegetoken(uint256,string,uint8,string)", +"47a6e601": "getATMHoldersNumber()", +"47a7aad5": "_vest(address,uint256,uint256,bool)", +"47a8205f": "privateWeiRaised()", +"47a90325": "maxCapEcosystem()", +"47a98ed2": "WithdrawFailed(address,uint256,bool)", +"47a99264": "setBwServiceValidCaller(address)", +"47a9fd81": "rob(address)", +"47aa7cd4": "setPoolStatus()", +"47aaf4eb": "resetOldAndSetNewDiscounts(uint256[],uint256[])", +"47ab58ec": "valuationAndCutOff()", +"47ac704f": "oldTokenSale()", +"47ad396b": "setFundingRules(address,uint256,uint256,uint256,uint256,uint256)", +"47aee603": "DIW(address,uint256)", +"47aef0a9": "battles()", +"47af954d": "creationAddress()", +"47af9957": "pauseTransfers()", +"47afa4e4": "change_pre_ico_start(uint256)", +"47b24f15": "LavaWallet(address)", +"47b272c0": "startMining(uint256)", +"47b27b8b": "unblockTokens(address,address,uint256)", +"47b27fd0": "testIsComplete()", +"47b3aff8": "bundles(uint8)", +"47b40ba2": "betFreeGame(uint256,uint8)", +"47b47102": "bakeCookie(string)", +"47b4e272": "depositBTC(address,uint256,uint256,bytes32)", +"47b4f943": "canmint()", +"47b55a9d": "pendingWhitelistAddition()", +"47b5acfd": "getProposalPublishedAt(bytes32,bytes32)", +"47b5dd54": "burnedTokens()", +"47b60ec0": "investorsGrantsAmount()", +"47b64eb0": "setServerAddress(address)", +"47b6ab59": "Token(address,uint256,string,string,uint8)", +"47b7142b": "safeSubtrZJF(uint256,uint256)", +"47b72b89": "getdeptmembershipstatus(uint256,address)", +"47b79a31": "remainingTransfered()", +"47b79a40": "manVault(uint256)", +"47b82bec": "FUTURAX()", +"47b84579": "getCompte_30()", +"47b87e48": "GetSaleInfo(uint8)", +"47b8b30b": "toCancel()", +"47b950b6": "setWorkerDtPort(uint256)", +"47b989af": "MyReferrer()", +"47b98c2e": "RDWToken()", +"47ba65d2": "get(bytes8)", +"47bafa82": "refundingComplete()", +"47bb0613": "deactivateContract(address,address)", +"47bb159d": "getByFromAndToCount(uint256,uint256)", +"47bb1883": "computeReward(uint256)", +"47bb89f0": "balance(uint256)", +"47bba01d": "inactivateSelf()", +"47bbe867": "purchaseMembership()", +"47bc1f94": "tokenSaleSupplyRemaining()", +"47bc3e51": "mintBounty(address[],uint256[])", +"47bc7093": "removeIssuer(address)", +"47bda66d": "createAMIS(address)", +"47bdb7f4": "transferDisable(bytes20)", +"47bdc8b4": "oraclize_query(string,bytes[5],uint256)", +"47bdeedf": "getPlayerUsableTokensCount()", +"47be11ae": "addArrayItem(address,string,string,uint256)", +"47be7bce": "formulaPrecision()", +"47bf7924": "ClaimSHIT(address,uint256)", +"47c05c22": "massSending(address[])", +"47c0ea6b": "_invest(address,uint256)", +"47c1303a": "MeetsOne()", +"47c14648": "claimTokenReserveLife()", +"47c17bac": "getMonsterDexSize(address)", +"47c1b5cf": "setGGEFee(uint8)", +"47c1caff": "getDividendsOf_(address,bool)", +"47c23bff": "setproduct(string,string,uint256,uint256)", +"47c3114e": "OpenContract()", +"47c35910": "authorize(address,address,uint256)", +"47c3ebf3": "is_presale_open()", +"47c421b5": "changeOracle(address)", +"47c51f73": "VisibilityDemo()", +"47c55045": "transferTokensFromTeamAddress1(address,uint256)", +"47c66140": "getProposalVotes(uint256)", +"47c6ecc0": "TokenFrozen(bool,string)", +"47c705b9": "Update(uint256,address,address,string)", +"47c7b6e2": "initEthDeal(bytes32,address,bytes20,bytes20)", +"47c7e6a8": "getAssetPackName(uint256)", +"47c81699": "set(string,string,uint256)", +"47c81f22": "TTT(uint256,string,uint8,string)", +"47c848e4": "_toPct(uint256,uint256)", +"47c85634": "setEmergencyWithdrawAddress(address)", +"47c8771c": "rsVerifyPoint(uint256,uint256)", +"47c8cc69": "getCurrentTDEBonus()", +"47c8efa7": "name1()", +"47c9301f": "erc20MRL(uint8)", +"47c98521": "rewardTheWinner(uint8)", +"47c9f9e8": "getNextTimeAirdropJoin(address)", +"47ca16a2": "setMaximumClaimPriceWeiRP(uint256)", +"47ca78d7": "paymentFallBack(address,uint256)", +"47cade2b": "unlockPublic()", +"47cb1b35": "getDailyJackpot(uint32)", +"47cb7a68": "timeLeft(uint256)", +"47cbc4f1": "HasNoElement()", +"47ccca02": "nft()", +"47cd3fda": "removeTransferRate(address)", +"47cda525": "TribeProducts()", +"47ce07d7": "NewPassManager(address,address,address,address)", +"47cf6f76": "isVotingActive()", +"47cf7e1d": "calcDoubleBindedBlindHash256(string,address,address)", +"47cfbaf4": "DMDPangea()", +"47d01637": "ProofOfCommunity()", +"47d04c71": "getWithdrawCount()", +"47d0dd3c": "COPIthereum(uint256,string,string)", +"47d1045f": "setNextSeedHash(uint256)", +"47d137c5": "unFrozen()", +"47d1d135": "setPixelColor(uint256,uint32)", +"47d20373": "stages()", +"47d289a9": "setDapCarToken(address)", +"47d3523c": "_sumThem(uint256,uint256)", +"47d3856a": "awardPot(string,uint256)", +"47d38af4": "NaNoDigitalToken()", +"47d3def9": "listAddress(address,uint256)", +"47d3ed10": "newDepositContract(address,address)", +"47d4106f": "CryptoSagaArenaRecord(address,uint8,uint8)", +"47d42c73": "PaymentStatusBlockNum(address,address)", +"47d52d86": "getMessageValue()", +"47d54bff": "finishedAt()", +"47d5d5b5": "ERC721TokenMock(string,string)", +"47d690b4": "limitDateCrowdWave1()", +"47d6cd6b": "_airdropAmount()", +"47d70f74": "icoEndBlock()", +"47d8167d": "buyBack(uint256,uint256)", +"47d83127": "sendFrom(bytes32,address,uint256)", +"47d84bab": "MultiSigStub(address[],uint256)", +"47d8fcb3": "emergencySetABackend(bytes32,address)", +"47d98eb4": "QUASI()", +"47d9b0aa": "FXTOKEN()", +"47da115a": "changeETH2Token(uint256)", +"47daf09c": "SmthToken()", +"47db0a24": "buyCreditsAndSpend(string,uint256,uint8,address,uint256)", +"47dd33fb": "VerumToken()", +"47dd5138": "EPSBets()", +"47dd5172": "perAddressCap()", +"47ddb165": "HODLIT()", +"47ddf87e": "allTimeJackpot()", +"47de074f": "getNodes(uint256)", +"47de3b76": "addSubmittal(bytes,address)", +"47df1cff": "callTokenTransferFrom(address,uint256)", +"47e0d54a": "winningTickets()", +"47e122dc": "earlyBirdTokenRate()", +"47e17101": "PRIZE_TOKENS()", +"47e17349": "addBonuses(uint256)", +"47e1d550": "getGameInfo(uint256)", +"47e20183": "point(address)", +"47e2688d": "getFinalSupply()", +"47e271b8": "getWeeklyLotteryParticipants(uint256)", +"47e2a6f9": "GetSellingTokenSymbol()", +"47e2b978": "RESERVED_COMPANY_UNLOCK_AT()", +"47e2d3f5": "zeroInt()", +"47e40553": "nextRound()", +"47e46806": "toString()", +"47e4ddf2": "createFreeze(uint256,uint256)", +"47e4e65e": "INFLIV()", +"47e51d38": "getConfigs(bytes32[])", +"47e57351": "withdrawTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"47e5912a": "decreaseTokens(address,uint256)", +"47e5bec3": "closeTransaction(uint256)", +"47e60236": "setICOaddr(address,bool)", +"47e621b7": "backingToken()", +"47e6924f": "sanityRatesContract()", +"47e74409": "leadingGang()", +"47e7bce6": "roundStartedTimestamp()", +"47e7ef24": "deposit(address,uint256)", +"47e81c5f": "setBuildingContract(address)", +"47e87fcd": "maxSaleBalance()", +"47e9633c": "PaymentAuthorized(uint256,address,uint256)", +"47e99232": "doRebuy()", +"47ea13df": "setCurrentOwnerFeePercent(uint256)", +"47eacc78": "rateAngel()", +"47eafefc": "mainStartTime()", +"47eb86f1": "changeTokenPrice(uint256,uint256,uint256)", +"47ec8138": "transferWithLock(address,uint256,uint32)", +"47ec8d82": "AltSocialAccountPw(bytes32,bytes32,bytes32)", +"47ec8e21": "be()", +"47ecb665": "telegram()", +"47ed0112": "setAddressFundReferal(address)", +"47ee0394": "addToWhiteList(address)", +"47ee0a69": "decreaseApprovalInternal(address,uint256)", +"47ee2992": "COINS_PER_ETH()", +"47eeb75f": "claimMethodABI()", +"47eed11e": "test_fourInvalidFalseEqLog()", +"47eef00a": "issueUnsoldToken()", +"47ef01a1": "deleteRegion(uint256)", +"47ef3b3b": "liquidateBorrowVerify(address,address,address,address,uint256,uint256)", +"47ef55fe": "buyCore(uint256,uint256,uint256)", +"47f03d0b": "getFallbackDeposit()", +"47f07880": "ChatLinkToken()", +"47f1d8d7": "minBalanceForAccounts()", +"47f2748a": "getMixerTypes()", +"47f280aa": "DefaultToken(string,string,uint256,address)", +"47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", +"47f3dde5": "rewards(address,address,uint256,uint256)", +"47f4034a": "getUnitJadeStealingIncreases(address,address,uint256)", +"47f5666f": "getSanIdFromName(string)", +"47f57b32": "retract()", +"47f61a47": "Habits()", +"47f66790": "addThing(string,string,bytes32,bytes32)", +"47f66d15": "bestPromouterInfo()", +"47f67eab": "setActionPrice(string,uint256)", +"47f710a7": "free_transfer()", +"47f7af67": "sealdate()", +"47f7b304": "ownerApproves(uint256)", +"47f7d412": "withdrawFrozen()", +"47f8b863": "getNextCutoffTime()", +"47f95923": "alterPeerToPeerMarketplaceTransactionFee(uint256)", +"47f980e5": "claimTokenAddress(address)", +"47f9aa9f": "auditors(address)", +"47f9c371": "Proof_of_Stake()", +"47fa061e": "deposited(uint8,address)", +"47fa15e2": "ICOSuccess()", +"47fa1cbd": "evIssueManagementFee(address,uint256,uint256,bool)", +"47fa5648": "Minewar()", +"47fafe7d": "setAccountProvider(uint8,address)", +"47fb0bed": "checkSender()", +"47fc216e": "getEventsLength()", +"47fc4306": "contractWithdraw()", +"47fc822f": "setTargetContract(address)", +"47fdbfb7": "StageChanged(string)", +"47fee755": "getGeneralAttr(uint32,uint8)", +"47ff6d7b": "buildId(address,uint256)", +"48006daf": "removeBreedingFromSale(uint256)", +"480111b0": "potShare(address)", +"4801206e": "OodlebitToken()", +"480140ca": "checkSidePledge(uint256)", +"48016c04": "assertEqDecimal(int256,int256,uint256)", +"480184a9": "getNewToken(uint256)", +"48025070": "setGivenReadings(bytes32,bool,bool)", +"48027610": "transferPaidOut(address,address,uint256)", +"4803724e": "removeLock()", +"4803b482": "UpdatedBlockingState(address,uint256,uint256,uint256)", +"48042e0b": "makerArguments(address)", +"480443b7": "validateBSM(string,address,uint8,bytes32,bytes32)", +"4804a623": "getflag()", +"4804e06f": "firstStageMintingDate()", +"4804e1a2": "transferBlocked()", +"4804e2a5": "WalletConnector(uint256,address)", +"4805b069": "NCRToken()", +"4806249e": "badgerWallet()", +"4806a0bd": "declineTradeOffer(uint256)", +"4806b2d2": "getPoolPrices()", +"4807270b": "cancelOffer(uint16)", +"480744e0": "setOwnerAsAdmin()", +"4808bf1c": "paymentsByCustomer()", +"480a434d": "baseprice()", +"480b1f21": "rateWin()", +"480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", +"480b890d": "setPercentRate(uint256)", +"480b9122": "DebugClock(uint256)", +"480b9707": "updateSecondWallet(address)", +"480bc31f": "getTotalPot()", +"480c6ca5": "getTokensIssued()", +"480d3b2f": "manualCheckInvestmentRequired(uint256,uint256)", +"480d7504": "getMineTokenAmount()", +"480e2f8e": "LastContributorChanged(address)", +"4810034a": "AirDropper(address[],uint256[])", +"48103077": "set_tokens_received()", +"48107843": "getNextCallSibling(address)", +"4811647c": "withdrawTip(uint256)", +"4811af4a": "preIcoMax()", +"4811c070": "team1Address()", +"4812663f": "nAuditorsRequired()", +"4813d8a6": "isAllowedToMint(address)", +"4813e3e5": "halvingCycle()", +"48144ef6": "BillHenryTestCoin()", +"481456f9": "probability()", +"48146113": "userDeposit()", +"48146341": "updateMaxGasPrice(uint256)", +"4814bee8": "useDragonSpecialPeacefulSkill(uint256,uint256)", +"481531e9": "FeeToken()", +"48156d9c": "Loss(address,uint8,uint256,bytes32,bytes32,uint256)", +"4815ccea": "confirmAndForwardOnBehalfWithRevert(address,uint256,bytes,bytes32,uint256[2],uint8[2],bytes32[2],bytes32[2])", +"4815d4a9": "SECOND_SUPPLY()", +"4815d83f": "setBountyTeamUnfreezeTime(uint256)", +"4817c3e2": "_modifyTopUpLimit(uint256)", +"4817db70": "approveAndCall1(address,uint256,bytes)", +"4819d270": "approveRobot(address,uint256)", +"481a3fc4": "close(address,uint256,uint256)", +"481a4f2a": "fundLockTransferFrom(address,address,uint256)", +"481ae5d0": "setColdLedger(address)", +"481af3d3": "kittyIndexToApproved(uint256)", +"481b3dbb": "CentsToken()", +"481b659d": "permitPermanentApproval(address)", +"481c6a75": "manager()", +"481d3bd5": "setRegionUpdatedAt(uint256,uint256)", +"481dbaa4": "amountWithTip(uint256)", +"481ed14c": "YetAnotherUselessToken()", +"481ef4fd": "getAdPriceDay()", +"481f9555": "ALLOC_SC()", +"481fb72a": "numRentStatuses()", +"481fcbf4": "ApolloCoinTokenSale(uint256,uint256,uint256)", +"4820059f": "setDisallowedForMinting(address,address)", +"482076b6": "preICOHolders(address)", +"4820946a": "getContributorRemainingSaleAmount(address)", +"48224f67": "SUPPLY_FOR_SALE()", +"4822d008": "hexControllerAddr()", +"4825fc0d": "_ownerWallet()", +"48261921": "getLotteryPrizeInfo(uint256,uint256)", +"4826a425": "sub_codicefiscale(string,uint256)", +"4826e9c5": "UTC2MYT()", +"482717a4": "GetAddrCallQty(address)", +"482769f3": "distributeFunds(uint256,uint256)", +"482871ed": "_transferSigner(address)", +"4828a833": "MultiTransfer()", +"4828f4a2": "recover(uint256,uint8,uint256,uint256)", +"48293aae": "showKeys(uint256)", +"482961e1": "updateReading(uint256,uint256)", +"4829b393": "Tombola()", +"482a0bc9": "computeTokenAmountAll(uint256)", +"482ae8a2": "lastBlock_v8Hash_uint256()", +"482b27c9": "GetAdminAddress()", +"482ccedd": "_payFees(address,uint256,bytes4)", +"482d3af0": "allOwnerOperations(address)", +"482d51e0": "startNewGame()", +"482d7d5a": "_mine(uint256)", +"482da403": "buyme()", +"482f63b0": "postMessage(bytes32,bytes)", +"482fbae2": "_resultToRoll(string)", +"4830868b": "setPrWallet(address)", +"4830d5d9": "removeRestriction()", +"4830e266": "buyReferral(address)", +"4830e636": "setFreeClaimAllowance(address,uint256)", +"4830fd5f": "TotalLose()", +"48318cbc": "newIdTankProduct()", +"48330262": "priceIncrease_20_January()", +"48330cf6": "updateAvailability(uint256)", +"48335238": "FrozenFunds(address,bool)", +"48338323": "getRanomSecret()", +"48338756": "withdrawArbFunds()", +"4833c47c": "getTokenByBid(uint32)", +"48351617": "consultarSerie(string)", +"483699f4": "tokensFor1EthP6()", +"4836f823": "salesRates(uint256)", +"48370565": "tradeValue(address)", +"4837715a": "___initialize(address,address,address)", +"48378eea": "getBool2()", +"4837e2fa": "amountOfLegs()", +"48389870": "cutToInvestorsDividendPool(uint256)", +"4838d165": "blackList(address)", +"483a15ed": "getManagerFor(address)", +"483a20b2": "setCrowdsale(address)", +"483a6cf9": "transferForExchange(address,uint256,string)", +"483a83df": "setKYC(address)", +"483b04e3": "angelExchangeRate()", +"483b1a76": "isInPassFilter(address)", +"483ba09e": "setBitcoinBridge(address)", +"483c8400": "MIN_FUNDING()", +"483c8abd": "UpSuccess(string,address)", +"483d31e9": "sfc(uint256,string,string)", +"483d45bd": "getProvider()", +"483d8b77": "onehour()", +"483e3956": "killPoll()", +"483e7872": "changeRealZipper(address)", +"483ea316": "bindOrderStakes(address,int256)", +"483eef18": "comminglerSellsProductSKUWithProRataIngred(address,uint256,string,uint256,string,string)", +"483f1b18": "MigratedTokens(address,uint256)", +"483f31ab": "consume(uint256)", +"483f5082": "getPriceTicket()", +"483f69c0": "HPToken()", +"483fa94b": "placeorder(uint256,uint256)", +"48401f1a": "joinBytes(bytes,bytes,bytes)", +"48403ad4": "preICOtokensSold()", +"4840d354": "XNGToken()", +"48410f80": "hexToString(bytes32)", +"48419aed": "tokensRemainingStage1()", +"484293a7": "VertexCoin()", +"4842f639": "setBreedingAddr(address,address)", +"4843b358": "withdrawalsAllowed()", +"484412e5": "A5DToken()", +"48447983": "QiMingCoinToken(uint256,string,uint8,string)", +"4844f367": "placeBet(string,string)", +"484595fa": "encode(uint256,uint256,uint256)", +"4845d3f8": "closingTimeExtensionPeriod()", +"4845d40c": "withdrawATokens(address)", +"4846f559": "getIsWinnerSelected()", +"4847a79c": "_transfer(address,uint256)", +"48481979": "getHorsey(uint256)", +"48481b8a": "ElepigCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address)", +"4848b1a5": "setData(uint256,uint256)", +"484916a3": "NewInvestor(address,uint32,uint256)", +"48498729": "_fetchOrdersForPayer(address)", +"484b8d33": "setWalletAmount(address,uint256)", +"484b973c": "ownerMint(address,uint256)", +"484c4056": "Redeemed(address,uint256,uint256,uint256)", +"484c8675": "allocateTokens(address[])", +"484c98af": "supplyAtIndex(uint256)", +"484cb173": "MiddleClass()", +"484db63f": "firstRate()", +"484dd086": "preFundingStart()", +"484dd472": "shobozilToken()", +"484ec26c": "onPayout(uint256,uint256)", +"484eccb4": "lastGen0SalePrices(uint256)", +"484f4bc0": "noStoresSet()", +"484f5a61": "GetChallengeInformation(uint256)", +"48509d2c": "updateCapsAndRate(uint256,uint256,uint256,uint256)", +"48519189": "MonedaAlcala(string,string)", +"4852a273": "setWhitelistStatus(address,address,bool)", +"4852e54b": "SolarNA(address[],uint256[])", +"48538112": "totalRaisedAmountInCny()", +"485458a1": "GetContractStageTermination()", +"48546971": "closeIco()", +"4854bde0": "pvt_plmt_set()", +"485587a2": "employeePoolTokens()", +"48558be7": "getOnTokenTransferValueValue()", +"48560630": "bonus3Ends()", +"4857d52d": "setLiquidityParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"48582a2a": "units40percentExtra()", +"48593bae": "getEnumValue()", +"48594f43": "powerAddr()", +"4859f430": "registerVehicle(string,string,uint8,address)", +"485ac9fd": "_canSetGameOver()", +"485c5e96": "generateTokensAll(address[],uint256[])", +"485cc955": "initialize(address,address)", +"485d5d7b": "TSTORZCv1()", +"485d5dd2": "DayInSecs()", +"485d7d94": "removeAuthorized(address)", +"485d992c": "getDoc(address)", +"485dc6cf": "create21KittiesTokens()", +"485e16a5": "summReserve()", +"485e35d3": "updateWhiteList(address,address,bool)", +"485e82d7": "tokenIdsForTeam(uint32)", +"485f2ce3": "AccendiCassaAutomatica()", +"485f7a7e": "preSaleAllotment()", +"4860165c": "destroyIdentifier(bytes32)", +"48601a7d": "getTxnNum()", +"486083fe": "itemLottery()", +"48612fc0": "IAHCToken()", +"4861b2cc": "Create(string)", +"4861f39b": "getDepositedOrderDetails(uint256,address)", +"486201ab": "deapprove()", +"48624e44": "ATTPlaceHolder(address,address,address)", +"4862e650": "setVerificationCodeHash(string)", +"48636254": "setWhiteBacker(address,bool)", +"4863ba17": "setLibraryAddress(address)", +"4863ed97": "setCoins(address,address)", +"48640aba": "phase1WeiRaised()", +"48642e21": "bleachDailyLimit()", +"4864d140": "baseAmount()", +"4864d8d9": "activeStage()", +"48650338": "withdrawDividends(address)", +"48655faa": "setMintingOracle(address)", +"486575a5": "reducePledgedFees(uint256)", +"4865a24a": "strToBytes(string)", +"4865c7bf": "timeInfo()", +"4866352b": "scrapCounter()", +"48663e7d": "modifyHoldings(address,uint256[],uint256[],bool)", +"48664c16": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"4867ec4f": "decodeParamOp(uint256)", +"4868204b": "FundTransfer(address,uint256,uint256)", +"48686205": "DevConSchoolReward()", +"48688367": "fundMintingAgent()", +"4868ab47": "Yumerium()", +"4869687b": "getAgreedMediators()", +"4869854a": "StfuTokenCrowdsale()", +"486a03e0": "approveMappingProposal(address,address)", +"486a7e6b": "burnAmount()", +"486b7217": "getnumber()", +"486c182c": "minAcceptEther()", +"486c363d": "_transfer_token(address,address,uint256)", +"486c50f3": "getDiscountHourglass(bytes32,uint8)", +"486d6aa8": "factorReward()", +"486de794": "_pay(address,uint256)", +"486e60f5": "createGoldBuyOrder(uint256,uint256)", +"486e66da": "hungry(uint256)", +"486e97ad": "VLUToken()", +"486ea48d": "Nodes()", +"486fc7e8": "tokenOwnership(address)", +"48700c7c": "EVEN()", +"48709183": "bountyBeneficiariesCount()", +"4870b81d": "transferToWallet()", +"4870dd9a": "PERCENT_DIVISOR()", +"4871052b": "LogSignature(address,bytes)", +"48719120": "renewFarmerCertificate(address,uint256)", +"4871c4c1": "ownerWithdrawTo()", +"48724227": "KickOwned()", +"487260bb": "startBlockBonus()", +"487269fb": "VLCToken()", +"48727dca": "TradeBitToken()", +"4873c721": "_remainingBlocks(address)", +"48749616": "getPoolInformation()", +"4874a41f": "Tfarm()", +"4874e62d": "concat(string,string,string)", +"48758697": "getRarity(uint256)", +"487621cc": "addNewbond(uint256)", +"4876a339": "accept1(uint256,uint256)", +"4876f3e5": "comfirmRedeem(uint256)", +"48794149": "credosReserveAllocation()", +"4879e07c": "happyNewYear()", +"487a5057": "getGameStart(address,uint256)", +"487a6e32": "deliver(uint64,bytes32,uint64,bytes32)", +"487a8043": "receiveApproval(address,uint256,address,bytes,bytes)", +"487a9e27": "USD_CAP()", +"487cd86f": "right34(uint256)", +"487e1d1f": "getNameOfAddress(address,address)", +"487f3f06": "team_address_count()", +"487ff8b6": "winningaddr()", +"48803406": "removeFundAccount(address)", +"48807db1": "getPI_edit_12()", +"4881148e": "safeGetPartialAmountFloor(uint256,uint256,uint256)", +"4881ae73": "add(uint16,uint16)", +"48823786": "allstocksFund()", +"4882419d": "isEpocum()", +"48839789": "ProofOfAIDS()", +"4883b6ce": "CryptoTorch()", +"4883c9dc": "prevHodlers()", +"48849c5a": "blockTransferFrom(address)", +"4884f459": "buyListing(uint256)", +"4885b254": "batchTransferFrom(address,address[],uint256[])", +"4885d732": "TokensAllocated(address,uint256,uint256)", +"488683f3": "_Token(string,string)", +"48868ac8": "sanityCheck(bytes32,bytes32)", +"4886d2d5": "setIsOver(bool)", +"48870630": "abi()", +"488725a0": "versions(address)", +"48887c8b": "setFreeAlien(uint16)", +"48889813": "mintedPercentOfTokens()", +"4888bc11": "getCompensation(uint256,uint8,address)", +"4888c619": "cryptocompareBtcOracleUrl(bytes32)", +"48894ad6": "FiveBalance()", +"488981cd": "countCourse()", +"4889ca88": "receiveApproval(address,uint256,address)", +"488a24c6": "isWalletContract()", +"488a6705": "AddConsentData(uint256)", +"488ab2c0": "TOKEN_EXCHANGE_RATE()", +"488b3538": "shares(address,bytes32,int256)", +"488b380b": "setLpIsStart(bool)", +"488bfa0b": "claimPaymentTokens(address,uint256)", +"488c1709": "setRefundAgent(address)", +"488c65fc": "stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)", +"488c7951": "abstractFn(uint256)", +"488cec69": "tokensAreAvailable()", +"488dc208": "updateUrl(address,bytes32[5],address)", +"488ede8b": "getUserRating(address,address)", +"488f1e43": "getSellingInfoByIndex(uint256)", +"488f231f": "createAssociation(uint256,uint256)", +"488f3b6a": "tryCloseRoom(address,uint256,uint256)", +"488fdb81": "buyFrom(string,address)", +"48900438": "getAllowedAmountAndPendingPeriods(address,address,bytes32)", +"48906c27": "evaluateMany(address,uint256,uint256[],uint256[],uint8[])", +"48916211": "checkSigs(bytes32,bytes32,uint256,bytes)", +"48917d5d": "lastDrawTs()", +"4891c06a": "contributionPool()", +"4891f401": "PRICE_1()", +"4892f0af": "tokenPorter()", +"489306eb": "oraclize_query(string,string)", +"48931352": "TOTAL_SUPPLY_CAP()", +"4893de2a": "rewardUnicornAmount()", +"4893ed5b": "proposedUserKeyPendingUntil()", +"48940815": "doTriggerJackpot()", +"48941312": "CoinAdvisorCrowdSale(address,address,uint256,uint256)", +"4894e37f": "__callback(bytes,string,bytes)", +"48957fb8": "getAyantDroitEconomique_Compte_4()", +"4896672e": "updateSalePrice(uint256,uint256)", +"489667e6": "_isSynthesizingAllowed(uint256,uint256)", +"489807a5": "Donate(uint256,uint256)", +"4898556e": "SaleStopped(address,uint256)", +"4898722d": "setSink(address[],uint256[])", +"48989182": "ethMax()", +"489979a3": "allocateTopupToken(address,uint256,uint256)", +"4899e4c6": "addrDistribution()", +"489acecc": "requireMultiple(uint256)", +"489b1636": "icoPhaseCountdown()", +"489b5046": "GetBankerCandidate(uint8)", +"489ba092": "setNameLink(string,string)", +"489c1202": "isGuard(address)", +"489c14fd": "pathAdvisorVault()", +"489c18b0": "getLocksLength()", +"489d2104": "changePaymentContract(address)", +"489d2844": "notifyBuyToken(address,uint256,uint256)", +"489d426e": "ratePreSale()", +"489da639": "COIN_SUPPLY_COMPANY_TOTAL()", +"489e5656": "MAX_CANVAS_NAME_LENGTH()", +"489f3c88": "ping(address,uint256,uint256,uint256)", +"489fde35": "setEnforce(bool)", +"48a0c8dd": "isDepositable()", +"48a0d754": "available()", +"48a0fa29": "toggleTokenExchange()", +"48a15250": "setBurnRequestUintMap(uint256,string,uint256)", +"48a16b8c": "_itoa(int256,uint8)", +"48a1befb": "UserFactory(address)", +"48a3cbdf": "fundTeam()", +"48a46bd3": "isRejected(address)", +"48a490fb": "transferFromTreasury(address,uint256)", +"48a50a54": "saleClosedTimestamp()", +"48a54fc5": "checkContract(bytes32)", +"48a5d7bb": "AssetPool(address,uint256,uint256,uint256,uint256)", +"48a60b6c": "getPlayerBets()", +"48a73e96": "getFreeNapkins()", +"48a76740": "TokenData(uint256,uint256)", +"48a7f1f9": "proposeOfferingContract(address,address)", +"48a860dd": "confirmTransactionAfterExpiryFee(uint256)", +"48a87fa8": "emptyTTT()", +"48a8b427": "calculateShareCrystal(uint256)", +"48a935e2": "setIndividualCaps(address[],uint256[])", +"48a9866b": "kill(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"48aa71f4": "isInCrowdsale()", +"48aac336": "getNumberOfParticipantsPerLevel()", +"48ab41d3": "getPOOL_edit_3()", +"48ac0f3c": "CORPORATE_SUPPLY()", +"48acce46": "ponziAddress()", +"48acd9b1": "changeFeeAccount2(address)", +"48ad5cd0": "product3()", +"48adfbdb": "getModerator()", +"48afc0fe": "FOMO3DLite()", +"48afd1b3": "hasReturns(address,uint256)", +"48afe4f5": "currentPersonalLimit(address)", +"48b15166": "blockTime()", +"48b17b64": "currSaleComplete()", +"48b24b88": "IAM_PER_ETH_BASE_RATE()", +"48b43020": "_setDistrictAddresss(address,address)", +"48b45d92": "isRequestApprove(bytes32)", +"48b49fa7": "buyGem(uint256)", +"48b4d3a4": "EmitTransactionIds(uint256[])", +"48b52c7d": "_transferFrom(address,address,uint256,string)", +"48b537ce": "MaggieToken()", +"48b5677f": "delegatedSignedRemittance(bytes,address,address,address,uint256,uint256,uint256)", +"48b59dd6": "changeCourse(uint256,uint256)", +"48b5b15c": "testHasCorrectPriceForMultistage()", +"48b5de18": "setEscapeHatch(address)", +"48b741de": "greaterPriceMsgComparator(uint256,uint256)", +"48b75044": "release(address,address)", +"48b84cde": "testCreateElectionOptions()", +"48b8ff83": "tokensForArtist()", +"48b9ed30": "getdisdone()", +"48b9f88f": "blockDiff()", +"48ba2d51": "LogBidRewardClaimed(uint256,address,uint256)", +"48bafd0e": "newGame(string)", +"48bb4067": "teamIssuedTimestamp(address)", +"48bb4347": "_checkOpenings()", +"48bc2a21": "bonusSecondIco()", +"48bc3e2a": "twoStepRate()", +"48bc4edf": "startAndSetParams(uint256,uint256)", +"48bd64c0": "getArrayHashLibry(bytes16)", +"48bdaaff": "TradeStatus(address,address,uint256,uint256)", +"48be4030": "INDToken()", +"48beae6a": "kkTestCoin1()", +"48bf51f5": "setInterestRatePunitory(uint256)", +"48bf9179": "Extradecoin(address,address)", +"48bf9cea": "serialNumberIsUsed(string)", +"48c0b782": "intermediariesCount()", +"48c0dc5b": "Inonit(uint256,string,string,string)", +"48c1ee9b": "wadmin_transferOr(address)", +"48c20a24": "getChildsAmount(address)", +"48c22f3f": "RateClient(uint256)", +"48c26e22": "purchaseRate()", +"48c2f845": "purchased_tokens()", +"48c40dbd": "transferTokensThroughProxyToContract(address,address,uint256)", +"48c44712": "refundERC20(address,address,uint256)", +"48c4cae9": "setNameReaderId(bytes32,bytes32)", +"48c4d7ce": "descendingCount()", +"48c54b9d": "claimTokens()", +"48c5be67": "numDistributionsRemaining()", +"48c6af04": "test_oneInvalidEqString()", +"48c6e2f7": "BaoFengCheng(uint256,string,uint8,string)", +"48c7a0bf": "SharePrice()", +"48c7f438": "setOldest()", +"48c81c16": "GamersToken()", +"48c834c0": "tier4Rate()", +"48c875cf": "resetRequest(string)", +"48c8cd41": "dateTime()", +"48c91284": "setM1(address)", +"48c981e2": "sendEther(address)", +"48c9ecf8": "allowTokenOperations(address)", +"48cb5aeb": "Easticoin(uint256,string,string)", +"48cc38e1": "nestedFirstAllToAll2(uint256)", +"48cc7b6e": "startForge()", +"48cd4cb1": "startBlock()", +"48cd65d9": "getInPlayGames()", +"48cdb451": "initializeVesting(address,uint256,uint256)", +"48ce382d": "addActivityAccount(address,uint256,string)", +"48cebd67": "presaleSold()", +"48cf9e5c": "getGroupIndex(uint256)", +"48cfa939": "minContribution_mBTC()", +"48cfc6c6": "crowdSaleEnabled()", +"48d0aff3": "drainexcess()", +"48d21789": "burnFunction(address,uint256)", +"48d24f35": "transferMintingAddress(address,address)", +"48d26dd1": "finalizeType()", +"48d2df48": "userBuys(address)", +"48d317ce": "stepTwo(int256)", +"48d3297c": "stageStatus(uint16)", +"48d34bc6": "getHashInternal(address,uint256,uint256,uint256,uint256)", +"48d37a58": "withdrawPrize()", +"48d453ee": "gcEndTime()", +"48d47e7e": "clc()", +"48d4eaf7": "storeData(bool,uint256,address,bytes32,string)", +"48d51a0d": "submitProposal(bytes32,uint32,uint32)", +"48d597e5": "addFromMapping(uint256,uint256)", +"48d5a5c0": "consensusAddress(address)", +"48d6002a": "otherPlayer(address,address[])", +"48d6047c": "WhitelistWalletUpdated(address)", +"48d64fd5": "changeTradeTracker(address)", +"48d6ca55": "getChangeFeeAmount(uint256)", +"48d7de63": "setTenant(bytes32,address,uint256,string)", +"48d82608": "InvestmentPolicyChanged(bool,bool,address)", +"48d848d0": "returnBoolean(bool)", +"48d8bb3f": "setIco(address,address)", +"48d9614d": "GetFee()", +"48d9a374": "blockTransfer(address,uint256)", +"48da08e6": "SilverCoin()", +"48da1532": "node_side(uint256)", +"48da60af": "limitClosedSale()", +"48da95b8": "VirtualExchange(address)", +"48db409a": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64)", +"48db5f89": "player()", +"48ddc01f": "changeFisherMansFeeCalculator(address)", +"48dddca8": "minSpend()", +"48de0cdc": "withdrawInBatch(address[],address[],uint256[])", +"48dfe175": "tier3Total()", +"48e021e9": "weiCostOfToken()", +"48e06300": "isEquipedAny2(address,uint256,uint256)", +"48e071d4": "denyUser(address)", +"48e0f410": "fundRaising()", +"48e11f70": "OMGCatCoin()", +"48e12ae3": "getAllowancePeriod()", +"48e1a760": "getttttttt(uint256)", +"48e1c18b": "itemsOwned(address)", +"48e252ab": "CryptoMilitary()", +"48e25bd2": "WinToken()", +"48e278f9": "NauticusToken()", +"48e37220": "presaleDateStart()", +"48e3a033": "mulPay(address[],uint256[])", +"48e3a064": "StandardCampaign(string,uint256,uint256,address,address)", +"48e4e297": "allowedToPurchase()", +"48e591ac": "getVote(address,address,uint32)", +"48e5c71f": "whoIS(string,bool)", +"48e61782": "left4(uint256)", +"48e624eb": "holderAdvPercent(address)", +"48e66722": "getRedeemRequestsLength()", +"48e68e30": "synthesizeWithAuto(uint256,uint256)", +"48e6b393": "test_logs()", +"48e7575d": "ecrecoverFromSig(bytes32,bytes32)", +"48e76563": "oraclize_setNetworkName(string)", +"48e7a100": "reparametrizeMultisig(bytes32,uint256)", +"48e837b9": "createGame(uint256)", +"48e9657d": "getSignatureAtIndex(string,uint256)", +"48e9f1ea": "EPXCrowdsale()", +"48ea97be": "tokenSalePausedDuration()", +"48eaa435": "safeExp(uint256,uint256)", +"48eab053": "fourthTeamWithdrawal()", +"48eaeb72": "BPCC(uint256,string,string)", +"48eb4ac1": "getAllMilestonesHashes()", +"48eb76ee": "attacker()", +"48ec8a0c": "getSecurityLimits()", +"48ed190a": "lastBlock_f11()", +"48ed1e3b": "LookUpAvailableDivInt(address)", +"48ed3e00": "date610()", +"48ed994c": "newLottery(uint256)", +"48edbf1d": "SKS()", +"48ef245b": "createFaucet(string)", +"48ef5aa8": "UpdateMaintaining(bool)", +"48ef670e": "UportRegistry(address)", +"48f001e6": "decreaseFreezeValue(address,uint256)", +"48f05187": "scheduleCall(address,bytes4,bytes,uint256)", +"48f082e8": "dayToMinusToken()", +"48f0b8e3": "getNumberOfGamesCompleted()", +"48f134f6": "closeSetup()", +"48f1e9c2": "getCertificationDocument(address,uint256)", +"48f2090b": "distributionPercent()", +"48f213e0": "PER_USER_AMOUNT()", +"48f221b6": "changePartner1(address)", +"48f36144": "claimOracle()", +"48f3e6f4": "getFourthAddressBalance()", +"48f549a4": "CreateToken(address,uint8,uint16)", +"48f6647b": "matchWithTheirs(uint256,uint128,uint16)", +"48f69212": "YELLQASH()", +"48f6cc0a": "_removeManager(address)", +"48f7f2a3": "daoFactory()", +"48f83e86": "authorizeAccess(address,address)", +"48f8fe69": "fnv(uint256,uint256)", +"48f918e0": "reclaimLeftoverEth()", +"48f95a7d": "depositsCountForUser(address)", +"48f9e246": "requestImplChange(address)", +"48fab2b0": "emitOracleUpdated(address)", +"48fb7332": "INTREPID_MAX_PRICE()", +"48fc66e9": "NzmLToken()", +"48fcb4e8": "getFrozenAccountCoinCount(address)", +"48fdb8c1": "partnernames()", +"48fee60f": "Criptohubcoin()", +"48fefd9b": "supportsToken(string,address,address)", +"48fefed2": "setNewGreeting(string)", +"48ff05b8": "removeUint256(bytes32)", +"48ff0c47": "testF4(uint256)", +"48ff1387": "rebuy(uint256)", +"48ff15b3": "acceptManager()", +"48ff30ff": "Breakup(uint256)", +"48ff6525": "applyRedenomination()", +"490052a8": "playerRoll(uint8,uint8)", +"49007329": "CCCRSale(address)", +"4900b48c": "checkOracle(address,address,address,bytes32,uint256[])", +"4901a205": "canShelf(string,address)", +"490203a7": "getMiningReward()", +"4902d163": "pendingOwnedOwner()", +"4902e4aa": "removeSuperAdmin(address)", +"490377a7": "setParameters(address)", +"4903c401": "Admins(address,address,address)", +"49041903": "getGame(uint64)", +"49044cc5": "premiumValue()", +"49051c1d": "threshold2()", +"49055da2": "getCurrGameInfoPart2()", +"4905c5b0": "_isUserInGame(address)", +"4905c769": "newLoan(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"490618d1": "deregisterBroker(address)", +"49063d37": "checkDivs(address)", +"4906da1e": "getMaxEther()", +"4907cd0f": "subscribe(address,uint256,uint256,uint256)", +"490825a9": "testControlTransferEnableNotTransferable()", +"49082bef": "TWO_YEAR_KEEPING()", +"4908d1de": "allUnsoldTokensAllocated()", +"490a32c6": "message(bytes32)", +"490a65c8": "PlutonDistribution()", +"490a6dac": "setWinner(uint256,bytes32,uint256,uint256,bytes32)", +"490b4f92": "coinAgeForAddressAt(address,address,uint256)", +"490bf04f": "rateToEther()", +"490c58f0": "addTokenTo(address,uint256)", +"490cce74": "FincontractMarketplace()", +"490d6d11": "Resume()", +"490e25c1": "C4FEscrow(address,uint256,address,uint256,uint8)", +"490e2bd1": "Autolen()", +"490f027a": "setPrizes(uint256[28])", +"490f611e": "Or(bytes32,bytes32)", +"490fc399": "votedKickoff(uint256,address)", +"490fdbd7": "transferTile(uint16,uint16,uint8,address)", +"490fea4d": "addBounty(address,address,uint256)", +"491045af": "LifeSet_002()", +"491274a8": "presaleContributorCount()", +"49128cdb": "updateRoundState()", +"49135b0f": "getAllAlgos()", +"4913732e": "buyTokenFromModerator(uint256,address,uint256,bool)", +"49137bca": "reading_cards()", +"4913ec88": "EnergisToken()", +"49144618": "Wasted(address,uint256,uint256)", +"4914fb27": "approveWithdrawal(address)", +"4915020f": "verifyLinkPrivateKey(address,address,address,uint256,uint8,bytes32,bytes32)", +"4915ef4a": "refund_contract_eth_value()", +"49164b41": "CryptoDivert()", +"491737f2": "ico3cap()", +"491759aa": "sendEthTweet(string,string,string)", +"4917c302": "ACCEPTED_AMOUNT()", +"4918d588": "test_BondPostedAndOverMajority()", +"491a6155": "REFERRAL_BONUS_PERMILLE()", +"491a7904": "transferTokenTo(uint256,address)", +"491abe0c": "servicePayment(uint256)", +"491b0712": "snpb(uint256)", +"491b8c45": "setWARTokenAddress(address)", +"491c8e08": "lastBlock_a6()", +"491cfc1c": "setNextRoundDuration(uint256)", +"491d525a": "pMintTokens(uint256,int256,address,uint256,uint256)", +"491d75f4": "configurationTokenTranchePricing(uint256[])", +"491dcfe9": "batchActive()", +"491e0df0": "totalContributorsContribution()", +"491e55db": "GAME_COST()", +"491e74f3": "YICHAINCoin()", +"491eeb3a": "resumeInvest()", +"491fd263": "updateMessage(uint256,bytes32)", +"49200d77": "numberOfOutcomes()", +"4920781b": "GATcoin(uint256,string,string)", +"4920adcc": "MysteriumCrowdsale(address,address,uint256,uint256)", +"4920ff15": "SetHome(string)", +"49212c92": "preValidateChecks(address,uint256,uint256)", +"4921a91a": "giveMe()", +"4921cea6": "transferFeeOwner()", +"4921e147": "setMinWeiToPurchase(uint256)", +"4921f9e9": "AnonReport(uint256)", +"4922d481": "recovery(address)", +"49231598": "fetchAllVotersBySnapshotBlock(uint256)", +"49231b28": "changeRates(uint256,uint256)", +"49239e10": "refundStageStartTime()", +"492430f6": "DissolutionRoom(uint8,bool)", +"4924d397": "Respond(address,uint256)", +"49251b18": "FrozenFunds(address,address,string)", +"4925480e": "fireAdmin(address)", +"49260304": "nDEX()", +"4926248f": "setListener(address,address)", +"49264032": "Spendcoin()", +"49266f2f": "maxBidEth()", +"4927f408": "Vertex_Token(uint256,address,uint256)", +"49285b58": "getVotingToChangeKeys()", +"492abc67": "signerIsApproved(bytes32,bytes)", +"492b3bf7": "baseTokenCapPerAddress()", +"492b67ea": "Etherdoc()", +"492b8d45": "POWToken()", +"492bd276": "getIntervals()", +"492c0325": "calculateNewRate(uint256,uint256)", +"492c70fb": "swipeToken()", +"492c981b": "entryInformation(address,bytes32)", +"492cc769": "buy(string)", +"492d06cf": "unFreeze(uint8)", +"492dda05": "reTweetReward()", +"492e333f": "allocate5ProjectToken()", +"492e672e": "DCETToken()", +"492eec25": "bountyOfflineTokens()", +"492f190d": "availableCommission()", +"492f8724": "subscriptionStatus(uint256)", +"492fb343": "feeBeneficiary()", +"492fea53": "_createPet(uint256,uint256,address,uint256,uint256,uint256,uint256)", +"4931b3b4": "setData_30(string)", +"4932a80b": "unownedPlanet(uint256)", +"4932ce32": "changeGame(address,uint256)", +"4932f35e": "NomToken()", +"49330cb8": "getVote(uint256,uint256)", +"493322c0": "calculateRewardInternal(address,address,uint256)", +"49336245": "getEntry(bytes)", +"49337227": "testCanCloneAfterTransfer()", +"49339f0f": "Delegate(address)", +"4934453a": "TPIToken()", +"4935b3b6": "PDTC()", +"4935e740": "withdrawMyFunds()", +"49361cfe": "lastInvestmentTime()", +"493770cc": "setTransferStatus(bool)", +"4938649a": "stopEverything()", +"49386f26": "getlistedItems()", +"493953de": "addOwnToken()", +"49399729": "minimumBidAmount()", +"4939bfde": "requestedBy()", +"4939ce85": "CLASS_BEAST()", +"493a64e4": "SetParticipantRole(address,address,uint8)", +"493a7209": "stopBuy()", +"493a8d0c": "tokenActive()", +"493b284e": "exchangeNominsForHavvens(uint256)", +"493bccc8": "awardMissedBlockBonus(address,bytes32)", +"493ca31a": "EPAYCLUB()", +"493caeea": "removeMemberWithAddress(address)", +"493dbd02": "forceEndGame(address)", +"493f8d30": "read_demurrage_config_underlying()", +"493fcf1c": "taxRateNumerator()", +"49403183": "isPassed(uint256)", +"49404d25": "lastBlock_v13()", +"494054f4": "createNota(string,string)", +"49407a44": "claimEther(uint256)", +"4940c807": "sumElements(uint8[])", +"49416e45": "RCD()", +"4941d059": "editRestrictedAddress(address,bool)", +"4941d296": "periodITO_startTime()", +"49420759": "changeWithdrawable(uint256)", +"494278e3": "getgamecardaddress(uint256)", +"4942a71f": "getFromBank(uint256)", +"49432923": "participationHistory(address)", +"49433942": "PointerChanged(uint8)", +"49435c0d": "whitelistSupplier()", +"49437210": "getUpdatable(bytes32)", +"49440b91": "lockMntpTransfers(bool)", +"49441fc3": "MIN_ETHER_CONTR()", +"4945a575": "childApproved(address,uint256)", +"494630cd": "PullRequestAlreadyClaimed(uint256,uint256,bool)", +"49463b8e": "SeeleToken()", +"49465a50": "changeTakerDeadline(uint256)", +"49465d33": "lastPriceFeed()", +"4946c574": "getTransformMineInDay(address,uint256,uint256)", +"4946e206": "rescueCat(bytes32)", +"4947c8d0": "setFinishTime(uint256)", +"49480bc1": "releasePrivilege()", +"49484450": "ProofOfNoSnipers()", +"4948c2db": "stage4_price()", +"4948d91d": "SicBo(address)", +"4948e51a": "freezeToken(address,uint256)", +"49499e14": "setCompte_15(string)", +"4949d9fa": "bankrolledBy(address)", +"494ac14c": "LOTTERY()", +"494b46f9": "_changeAdmin(address,address)", +"494b5e0f": "setUserFactoryContract(address)", +"494b90e8": "teamPoolAddress()", +"494bf608": "distributeEther()", +"494c2a0f": "STQCrowdsale(address[],address,address)", +"494cf333": "getAddressUIntMapping(address)", +"494cfc6c": "getTokens(uint256,uint256)", +"494d93cc": "result_block()", +"494e49a4": "createAccountWithBalance(string,uint16)", +"494e4bc3": "fundtransfer(address,uint256)", +"494fb622": "SetData(uint256,string,string,string,string)", +"494fee7d": "estimateDistribution(address)", +"4950b392": "exerciseCall(uint256,uint256,uint256)", +"49517b41": "addSolution(uint256,string,string,string,string,string)", +"4951a18f": "crowdsaleCap()", +"495289be": "setIssuer(address,bool)", +"4952d2dd": "logPromiseUnfulfillable(uint256,address,uint256)", +"4953b57d": "isAdminOwnersValid()", +"49550d66": "tryTakeBack(uint256,uint256)", +"49556aff": "fulfillEthereumLastMarket(bytes32,bytes32)", +"4955a79e": "transferOwnershipOperation()", +"4955f280": "createContractPerson(string)", +"4956cf1c": "migrating()", +"4956eaf0": "deploy(address,uint256)", +"49570293": "_addPurchasedTo(address,uint256)", +"49573edd": "tgeSettingsChange(uint256,uint256)", +"495816b4": "BOUNTY_TOKENS_AMOUNT()", +"49582509": "ICO_ON()", +"49582a20": "initializeSupply(uint256,uint256,uint256)", +"4958abb7": "switchFeePolicy(bool)", +"4958ace2": "restartSale(address)", +"49593f53": "submit(string,uint64,uint32,uint32,bytes32)", +"4959642c": "isUserKyced(address)", +"49596a65": "initProject(string,string,string)", +"495b3bcc": "LSEscrowContract()", +"495bbcae": "testNeededBalanceForContractCreation()", +"495bf26b": "lengthOf(string)", +"495c167f": "sumPayments()", +"495c5891": "getTotalAuthorizedForPayment()", +"495c9588": "minEligibility()", +"495ccca3": "WEEFundWallet()", +"495d32cb": "par()", +"495d7b26": "processScore(bytes32,string)", +"495df195": "CollectEarning()", +"495e1b3d": "etherEscrowAddress()", +"495f9bae": "getProposalVoterVotesCount(uint256,address)", +"495fe25b": "transferTo(address,uint256,bytes)", +"49602f5c": "OpusToken()", +"49606455": "take(bytes32,uint128)", +"49606d51": "Nihilum()", +"4960ae42": "numberOfVerifiers()", +"4960d2bc": "getLandTaxRate(uint256)", +"496128ec": "prosperaToken()", +"49614e91": "isRegisteredAddress(address,address)", +"4961b40c": "getReleaseValidator()", +"4962aa66": "discountedRates(uint256)", +"4962ab01": "removeMembers(address,bytes32,address[])", +"4962ad08": "approveAlgo()", +"4962b964": "getPuppetCount()", +"49630dda": "removeQuestion(address)", +"4963513e": "Reserved(bytes32,address)", +"49649fbf": "withdrawAllFunds()", +"4965fc89": "getForfeited(address)", +"49661fcf": "stage2Tokens()", +"49671d28": "setAmountSoldPerPeriod(uint256)", +"4968694a": "setCoolness(uint256,uint32)", +"496a698d": "currentAuction()", +"496bd844": "round_up_division(int256,int256)", +"496be2cf": "atxControllerAddr()", +"496c4fad": "setPriceAgent(address)", +"496c5ad8": "throwsWhenGettingTokensWithStoppedSale()", +"496e41d2": "quotaUsed(address)", +"496fbeb3": "transportationFeeMultiplier()", +"496fc976": "setC4FContractProvider(address,address)", +"496fd2c5": "ICOStartToken(uint256)", +"4970fb36": "armagedeon(address[])", +"4971129d": "CatTransfer(address,address,uint256)", +"49713811": "winnersCount()", +"49714815": "ownerKillContract()", +"49716f5a": "originalTotalWeight()", +"4973219d": "outputi(uint256)", +"497347b2": "_storeContent(address,string,uint256,bytes32,address)", +"4973dbf6": "RATE_ETH_CUE()", +"4973dd25": "unBlockExternalTransfer()", +"49741098": "admin_set_min_pay(uint256)", +"497484f6": "applyBonus(uint256,uint8)", +"4974af1f": "testPublic(uint256[20])", +"4974bc27": "download()", +"4974da81": "addWord(string)", +"49752baf": "chronoBankPlatform()", +"49755b9e": "issueSynths(bytes4,uint256)", +"4975d202": "balanceOfOwner()", +"4975e893": "getProposalCreatedAt(bytes32,bytes32)", +"49776581": "getDocumentUpdatedVersionId(uint256)", +"497777d5": "collect(bytes32)", +"4977d6a4": "DreamToken()", +"49786571": "Economeme()", +"4978ddcc": "transferAPIOwnership(address)", +"4979440a": "getHighestBid()", +"4979c012": "ClosingTimeForCloning()", +"4979d6ec": "setUserManagerContract(address)", +"497a7b48": "taskRewardVote(bytes32,uint256)", +"497aed49": "PRIMARY_START_PRICE()", +"497b383e": "buyReferTokens(address,uint8)", +"497b8018": "getBallotOptNumber()", +"497cc504": "claimE()", +"497cd327": "TMONEY272708()", +"497cd426": "updateRewardDistributor(address)", +"497d709d": "icoNumberBalanceOf(address,uint256)", +"497dbce9": "_assertAmount(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint8,uint256)", +"497dd0cb": "migrateContributors(address[])", +"497f3132": "getLastRegistration(string,int256)", +"497fb5b9": "tokensWithdrawn()", +"498022ea": "evalTransitionState()", +"49813e26": "MenovaToken()", +"4981b3ca": "performSell(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", +"49843982": "Coin(uint256)", +"4985acee": "getTransferFromToValue()", +"4985b325": "addSurplus()", +"49866ec0": "finishTokensSale(uint256)", +"4988ef98": "LOCK_TOKENS_DURATION()", +"4989ae8e": "RESERVED_TOKENS_FOUNDERS()", +"4989b0b6": "setCustomBuyerLimit(address,address,uint256)", +"498a37f0": "setSmallInvestor(address,uint256,uint256)", +"498a3944": "setNameWriterId(bytes32,bytes32)", +"498a4c2d": "startBlockNumber()", +"498a690f": "issuingRecordAdd(uint256,bytes32,uint256,uint256,uint256,string,uint256)", +"498a6de7": "setRevenueContract(address)", +"498b7718": "J8T_DECIMALS_FACTOR()", +"498be109": "FAPFounderFund()", +"498c07f3": "startCrowdsale1(address)", +"498cb7cb": "setDelegadoDeEscuelaVerify(bytes32,uint256,uint256)", +"498cc70d": "getResult(string)", +"498d2ae0": "getMintRequestAddressMap(uint256,int256,string)", +"498e78b1": "unregisterManager(address,address)", +"498e87a9": "setPI_edit_21(string)", +"498eecb2": "getLimitedReportersDisputeBondToken()", +"498f27ae": "countCampaigns(address)", +"498f6fbe": "NewSubscription(address,uint256,uint256)", +"498fd833": "priceDT()", +"498ff49a": "repayImmediately(uint256)", +"49911610": "getDay(uint16)", +"49912f88": "appeal(uint256,bytes)", +"49917511": "buyCoinsCrowdSale(address,uint256,address)", +"49926028": "typeHash()", +"499260d6": "get_activity_by_id(uint256,uint256,address)", +"49937e25": "buyPrimordialToken()", +"49942483": "ICO_PHASE2_BONUS_PERCENTAGE()", +"49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", +"49943a13": "PARTICIPATION_FEE()", +"49955431": "cupi()", +"4995b458": "week()", +"4995e9fb": "FOUNDER_ADDRESS2()", +"4996e899": "getGuaranteedContributorsLenght()", +"49970e16": "forwardPlay(address,address,bytes,bytes32,bytes)", +"499831f2": "pauseGame()", +"4998ce40": "setbonusTokens(uint256)", +"49996698": "trustedAddressSize()", +"499a1bcd": "setAQL(address,uint256)", +"499a8fea": "setClue3(string)", +"499ac979": "redistributeTokensForAddresses(uint256,address[])", +"499af77c": "current_spin_number()", +"499caf09": "secondTime()", +"499cd176": "endAttack(address,address,bool,uint256,uint256,uint256,uint256)", +"499cf7ce": "BOXEX()", +"499d1081": "mint(address,uint256,uint128)", +"499dae56": "getMultiRequestRequestor(uint256)", +"499e2c81": "getOrCreateWaitingBoard(uint256)", +"499e6c10": "isTheContract()", +"499fa529": "ALLOC_SALE()", +"499fd141": "getDrupeCoin()", +"499ff236": "maxAnonymousContribution()", +"49a0a3b3": "resetTokens(address[],uint256[])", +"49a0c976": "unlockEmission()", +"49a0e681": "rst()", +"49a24a7d": "DolyToken4()", +"49a3d2bb": "updateAllowed(address,address,uint256)", +"49a51839": "EGGS_TO_HATCH_1LOBSTER()", +"49a634f0": "LTS()", +"49a67b55": "commitStart(bytes32)", +"49a69078": "lastBlock_f5()", +"49a6a4de": "showAssetInfo(bytes32)", +"49a742eb": "validRate(uint256)", +"49a76444": "Hygen()", +"49a7a26d": "solver()", +"49a86c9e": "addToAccesslist(address)", +"49a8d337": "lockedTeamAllocationTokens()", +"49a92910": "setPlayer(address,uint64,uint64,uint64,uint64,uint64,uint64)", +"49a9d5ad": "CGENToken(uint256)", +"49aa480a": "VixCoin()", +"49aa4ee2": "removeVote()", +"49aafad7": "allowedToBurn(uint256)", +"49ab1d86": "setGeneLab(address)", +"49abee50": "phaseStart()", +"49abf2d6": "staticoins(uint256)", +"49acce72": "AnkitVictoContractToken()", +"49ad12a5": "getItemRarity(uint256)", +"49adf14f": "Claim_TRAC_1850()", +"49adf314": "_updateDividends(address)", +"49ae1f17": "KWHToken(address,address,address)", +"49ae8dc3": "getChildren(uint256)", +"49ae9b31": "canReadName(address,bytes32)", +"49af0af1": "baseEthCap()", +"49af63a9": "setWaitTime(uint8)", +"49afc6e5": "tokenBalance(uint256)", +"49afcc0e": "dataSourceGetSemiResult(uint256)", +"49b11f24": "dailyAuctionStartTime()", +"49b1b2d9": "newBonus_and_newPeriod()", +"49b2f5ff": "technicalCommunitySupply()", +"49b3b29f": "costs(uint256)", +"49b40402": "exchangeThreshold()", +"49b48e66": "setCheckOwner(bool)", +"49b54685": "updateDps(uint256)", +"49b5b541": "compute(address,uint256)", +"49b6313c": "getCurrentSellOffer(uint32)", +"49b71e47": "distributeWinnerPool(string,uint256)", +"49b76501": "getStorageRate()", +"49b7a9c2": "dividendManagerAddress()", +"49b7ef6c": "lockedSell()", +"49b85a16": "kycAddress()", +"49b88203": "declareProjectDefault()", +"49b88919": "setImageDescriptor(uint256,uint16)", +"49b8f5d9": "tokensDuringPhaseOne()", +"49b90557": "isAuditor(address)", +"49b9734d": "changeMainEndTime(uint256)", +"49b9a2d0": "address_to_tickets(address)", +"49b9a7af": "lastPriceUpdateTime()", +"49ba5a48": "checkSavedEthBalance(address)", +"49babd2a": "initiate(address,uint256,bytes32,address)", +"49bac542": "E4RowEscrowU()", +"49bedf42": "setLookup(address)", +"49beee4f": "adjust_Transfer_nodata(bool)", +"49bf2caf": "disputeTransaction(uint256)", +"49bf66d3": "addRegistryIntoNameIndex(address)", +"49bfb061": "txFeeDenominator()", +"49bff0d7": "setPI_edit_29(string)", +"49c03373": "changeGTOAddress(address)", +"49c04f27": "WorldBitEvent(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", +"49c15bd9": "Purchase()", +"49c16cc3": "CMCLToken(uint256,string,string)", +"49c16e15": "toUint()", +"49c1ad0f": "gotoNextState()", +"49c1d54d": "trusteeAddress()", +"49c2a1a6": "createProposal(string)", +"49c3567c": "ArbaCoin(uint256,string,string)", +"49c37f8c": "main(address,address)", +"49c3a91e": "getSponsorshipsTotal(address,uint256)", +"49c462d7": "createInvite(bytes)", +"49c53b2d": "doMidnightRun()", +"49c60cc9": "MICROMINESx()", +"49c6353c": "getInvId()", +"49c71fa8": "unholdTeamTokens()", +"49c7634f": "WorldwideGiftCode()", +"49c83e86": "unlist(address,uint256)", +"49c91267": "getSeedByWinner(address)", +"49c9d17a": "updateReceivers(address[])", +"49c9dcf5": "awardRafflePrize(address,uint256)", +"49ca30ab": "receiveIndex(uint256,uint256,uint256,uint256,bool)", +"49ca7656": "changeOwnerOfMonethaUserClaimStorage(address)", +"49ca8cc9": "getEventId(address,bytes32)", +"49cacb12": "dropOwner(address)", +"49cbe338": "tryRead(uint64)", +"49cc2eb1": "Fairsale(uint256,uint256)", +"49cc635d": "receivePlayerInfo(uint256,address,bytes32,uint256)", +"49cc8513": "_geneOfCrab(uint256)", +"49cc954b": "twoYearsPassed()", +"49cd4554": "afterIco(uint256)", +"49ce0a11": "hexToken()", +"49ce5804": "setSectorOwnerCut(uint256)", +"49cf211e": "storenumber()", +"49cf2eae": "certifierAddress()", +"49cf5f1b": "DSProxy(address)", +"49d0cd85": "functionSignatures()", +"49d10b64": "updateRegistry()", +"49d246e5": "getBetBasic()", +"49d24ae8": "withdrawAdmin(uint40)", +"49d2ca11": "Election(address,address,address,address,address)", +"49d3060f": "selectWinner50()", +"49d45693": "changeminprivatesale(uint256)", +"49d463e6": "sendBoard(bytes10,uint256,uint8,bytes32,bytes32)", +"49d4a344": "right99(uint256)", +"49d55d9d": "receiveTransfer(uint256)", +"49d596fe": "FSM()", +"49d689f4": "setJackpotAddress(address,address)", +"49d7e0b3": "mutiTransferFrom(address,address[],uint256[])", +"49d800a1": "ReleaseableToken(uint256,uint256,uint256)", +"49d834cd": "TSTEST()", +"49d8ef13": "ETHERFUNDME_ONLINE_FEE()", +"49d94871": "bonusRates(address)", +"49d94c83": "CappedCrowdsale(uint256)", +"49da847b": "iPay()", +"49daca7a": "tradeAddress()", +"49dbdf30": "initializeRefund()", +"49dc2b83": "miningFinished()", +"49dc5376": "getTokensBack(uint256)", +"49dc8fab": "Menu06(address,address,uint256)", +"49dcbc5e": "sendEth(address,uint256)", +"49dcd756": "getCurrentEthCapPerAddress()", +"49dd0fe3": "minechain()", +"49dd1262": "updatePrices()", +"49dd2880": "Gold(address,uint256)", +"49de0485": "addContributorManually(address,uint256,uint256)", +"49de3995": "EthlanceMessage(address)", +"49df7208": "addMember(address,bytes32)", +"49df728c": "withdrawTokens(address)", +"49e09da6": "genesisTransfer(address,uint256)", +"49e0cf2a": "createComunity(bytes32,bytes32)", +"49e0dada": "level_4_percent()", +"49e123c8": "monsterHealth()", +"49e1432c": "donateToPot()", +"49e1c2b7": "ATMToken()", +"49e284d1": "ZoologicalGarden()", +"49e347ae": "getContents(uint256[],uint256)", +"49e3ec5e": "setMediator(address)", +"49e4347b": "completeICO()", +"49e44f44": "ManagerProxy(address,bytes32)", +"49e4b3e5": "setPermissionManager(address)", +"49e51970": "CostilNetworkToken()", +"49e588df": "refundSubmission(address,uint256)", +"49e627d2": "getPreIcoTokenHoldersAddressesCount()", +"49e65440": "setSymbol(bytes32)", +"49e67544": "TeamFund()", +"49e6c454": "getMyEntityOwner(uint256)", +"49e77c8b": "hasEnoughTokensToPurchase(address,uint8)", +"49e9449a": "presalesCap()", +"49e9cee9": "GetMaxPrestigeLevel()", +"49ea33df": "icoEndDatetime()", +"49ead9b4": "createAsset(string,uint256,uint256)", +"49eb6d6f": "NumberAddresses()", +"49ec1ff0": "setSoftwareTokensWallet(address)", +"49ec7c3f": "giveBirth(uint256,uint256,uint256,bytes)", +"49edfb94": "FEE_OWNER()", +"49edfed9": "getEtherForStakes(uint256)", +"49ee161b": "getLockPosition1(address)", +"49ee2ae1": "getAllJingles(address)", +"49ee39ba": "nullBonusMessage()", +"49ee6c50": "getNewItemId(bytes32)", +"49ee72fc": "addCountryCities(uint256,uint256[],uint256,uint256)", +"49eee1a4": "setRoundRate(uint256,uint256,uint256)", +"49ef026f": "raisedFunding()", +"49efdbbf": "purchaseShow(uint256)", +"49f00964": "founders_2()", +"49f02baf": "YondToken()", +"49f0726d": "Centhereum()", +"49f0c90d": "adminSetAccountAdministrator(address)", +"49f12aa7": "hashState(address,uint256,uint256)", +"49f16ad1": "setTransferEnabled()", +"49f194a1": "setIco(address)", +"49f1fa67": "GetLiasonName(uint256,uint256,uint256)", +"49f202ff": "getTokenIdByIndex(uint256)", +"49f209af": "testThrow_3_invalidOwner_accessRestrictionThrow()", +"49f22b4a": "biddingComponent()", +"49f27c25": "ProdEToken()", +"49f298c6": "wallock()", +"49f2a049": "registerInternal(string)", +"49f30178": "nextFinalTimeout()", +"49f307a6": "setNewPriceToItem(string,uint256,uint256)", +"49f41a42": "updateAgent(address)", +"49f4cc17": "transferAssets(address,address,uint256)", +"49f4f5da": "XLifeCoin()", +"49f6444e": "buyLuckyStone()", +"49f65ce4": "handleDividends()", +"49f73d3d": "calculateCountryCut(uint256)", +"49f7825b": "lockAddressByKYC(address)", +"49f856ea": "setERC820compatibility(bool)", +"49f9231d": "LightCoinToken()", +"49f97939": "notEqual(string,string,string)", +"49f9b0f7": "calculateSaleReturn(uint256,uint256,uint32,uint256)", +"49f9c0e4": "transferEth(uint256,address)", +"49f9e95e": "withdraw_arbitrary_token(address,uint256)", +"49f9f4d0": "burnOwnerTokens(uint256)", +"49fa84ef": "hon1ninja()", +"49fa991f": "removeAttestation(address)", +"49fb2dc5": "add_to_association(uint256,uint256,uint256)", +"49fcea4a": "Lyfecoin()", +"49fcfce7": "saleInited()", +"49fd5791": "_removeLastOwnerHoldingsFromToken(address,uint256,uint256)", +"49fd5f64": "getAllAssembly(address)", +"49fdaea6": "isBrickOwner(uint256,address,address)", +"49fe5261": "CROSAIR_PRICE_INCREMENT()", +"49ffeb8f": "recursiveCalculation()", +"4a0023cd": "findAuraComposite(uint64,uint64)", +"4a00a522": "homebase(int256,int256)", +"4a00dc38": "getAreaPrice(uint8,uint8,uint8,uint8)", +"4a013296": "canEscapeTo(uint32,uint32)", +"4a024928": "D00KIE()", +"4a03707c": "draw(address,uint256)", +"4a03e7e3": "TrinityContract(address,address,uint256)", +"4a042f0d": "joinBattle(uint256)", +"4a046d82": "usdPerEther()", +"4a0473fe": "votings_(address)", +"4a0483c5": "trustedAddressLUT(uint256)", +"4a0767cc": "setIsPreventedAddr(address,bool,bool)", +"4a084736": "updateTokenToEthOrderWHint(uint32,uint128,uint128,uint32,int256)", +"4a09d3cf": "withdrawAdvisersTokens(address,uint256)", +"4a0a7f2d": "doDistributionRange(uint256,address[],uint256[])", +"4a0af245": "startPreSale(address,uint256,uint256,uint256)", +"4a0b132a": "TIME_TO_MAKE_1_SHITCLONE()", +"4a0ba49d": "pay(address,address,address,uint256)", +"4a0bb6a4": "WeQuest()", +"4a0cd926": "addBankerAddress(address)", +"4a0d89ba": "getSwap(uint256)", +"4a0d8b53": "setHasMaxPurchaseLimit(bool)", +"4a0f0bfe": "ServiceRegistry(address)", +"4a0f3134": "FundTransfered(address,uint256)", +"4a0f5974": "left27(uint256)", +"4a122266": "getForwardPurchaseFeesTo()", +"4a12389a": "MyToken(string,string,uint8,address)", +"4a123e1d": "setLev2(uint256)", +"4a1281c6": "numTokensIssued()", +"4a1311f9": "openingManualyMining()", +"4a14e3b2": "SentAmountToOwner(uint256,address)", +"4a150e2c": "getDonationsCount(address)", +"4a15ebce": "addCbAddress(address,bytes1,address)", +"4a16673b": "shouldSelectWinner()", +"4a168859": "getAvaIcoAmount()", +"4a169e4b": "setCoinInfo(address)", +"4a173383": "determineWinner(address,uint256,bytes32)", +"4a1753a6": "setCurrentGame(address)", +"4a176017": "finalizeAdd(uint256,address)", +"4a176ba5": "getaddr(uint256)", +"4a17bbde": "getEventId()", +"4a180cb3": "removeSpecialFeeTake(uint256)", +"4a184f51": "startCrowdsale(address,address)", +"4a186d69": "buyTokenFor(address)", +"4a187785": "aaandItBurnsBurnsBurns(address,uint256)", +"4a18c25e": "EUEBToken()", +"4a197057": "GameEnded(uint256,address,uint256,uint256,uint256,uint8,uint8)", +"4a1993e4": "firstDepositDate()", +"4a1a27a8": "qtAccount()", +"4a1a342b": "getOrderMoneyEscrowed(bytes32)", +"4a1a3ded": "createNewTask(uint256,uint256)", +"4a1a650d": "RecordNum()", +"4a1a89f1": "PHXTKNADDR()", +"4a1aa767": "claim_victory(uint256,uint8,uint8,uint8)", +"4a1ad538": "checkTransferMultipleDelegated(address,address[],uint256[],uint256,uint256,bytes)", +"4a1b13f0": "setPoliceTimeoutInBlocks(uint256)", +"4a1b504f": "distributeBonus(address[])", +"4a1b98b2": "exchangeUnderwrite(address,uint256)", +"4a1ba4ba": "Multibot()", +"4a1c13cd": "setIcoStartDate(uint256)", +"4a1c6549": "ETHBITA()", +"4a1d08af": "drawRandomItemWinner()", +"4a1df335": "addressCEO()", +"4a1e004c": "blockedTimeForInvestedTokens()", +"4a1f05f0": "setSaleImg(uint256,bool,address,uint256)", +"4a1f0bf6": "inheritToNextGeneration(address)", +"4a1f11a7": "MT()", +"4a1fb241": "fttIssued()", +"4a1fe393": "withdrawEther(uint32)", +"4a208c38": "setIV_R2(uint256)", +"4a21f8f7": "joinToPool(uint256,uint256)", +"4a2228f7": "_reducemoney(address,uint256)", +"4a222b74": "ecoLock23()", +"4a22c7fb": "tokens_rewards_allocated()", +"4a23418a": "foundersTokensWallet()", +"4a2388ff": "setAllowedForMinting(address,address)", +"4a23dc52": "FileStore()", +"4a2479c0": "initialOwnersShares()", +"4a24edd6": "startSale(uint256,uint256,uint256,uint256)", +"4a24f6d9": "getVendorApplicationScoringTrackCount(string)", +"4a254431": "MappingProposalIssued(address,address,uint256)", +"4a25780b": "RedRibbonCoin()", +"4a25b2fd": "deductCoin(address,uint256)", +"4a26410b": "SetGenesisBuyPrice(uint256)", +"4a268f52": "ExchBtcToken()", +"4a26920b": "sendTokens(address,address,address[],uint256[])", +"4a2697fc": "balanceOfIssuer()", +"4a272bff": "GetHoga(address,uint32,bool)", +"4a275a1e": "Blockdrop(address)", +"4a280a55": "transferFrom(address,address,address,uint256,bytes)", +"4a2929ee": "betLockTime()", +"4a2951d2": "AsianCapitalChain(uint256,string,uint8,string)", +"4a2a197e": "addBonus(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4a2a4ebc": "countries(uint8)", +"4a2b0c38": "DividendProfit()", +"4a2b22f9": "GameBase()", +"4a2b5235": "_addWhitelistAdmin(address)", +"4a2c3204": "getUserFLCEarned(address,address)", +"4a2cd48f": "getPreviousDate(bytes10)", +"4a2d5b6b": "getReleaseRatios(address)", +"4a2db4d8": "GetWinCards()", +"4a2dfbb4": "artWorkChangeRequest(uint256,string,uint8,bytes32,bytes32)", +"4a2e7752": "hashBid(address,uint256,address,address,address,uint256,uint256)", +"4a2ee75f": "addArticle(bytes,bool)", +"4a2f2333": "BitcoinMobile()", +"4a2f37a6": "updateItemTraits(uint256,uint256)", +"4a2fb1e4": "_mentors()", +"4a2fed3d": "test_SixtyPercentRules()", +"4a2ff078": "getRateFor(string)", +"4a303d30": "optAddressIntoHolding(address,uint256)", +"4a30f976": "censorship(uint256,bool,bool)", +"4a31259f": "totalNtsSoldWithBonus()", +"4a31dee2": "setTokenIdByIndex(uint256,uint256)", +"4a3270d7": "bytesStorage(bytes32)", +"4a330319": "tokensaleEndTime()", +"4a3310b8": "hasConfirmed(bytes32,address,address)", +"4a334c1c": "closePlacingPhase()", +"4a348da9": "getProductCount()", +"4a35035a": "dropNumber()", +"4a3573f1": "assignReservedTokens(address,uint8,uint256)", +"4a35d3ba": "SetBuildingSale(uint256,uint256,uint256,uint256)", +"4a35db7c": "restartValidation()", +"4a363fbc": "testNetworkDeployment()", +"4a366c46": "Th0m4z()", +"4a367140": "FoundersContract(address)", +"4a367827": "mintingStopDate()", +"4a367c68": "PrivateSaleStartTime()", +"4a367d73": "UpgradeMaster()", +"4a36870a": "firstRewardPeriodPercent()", +"4a36df25": "setMigrateContract(address)", +"4a375bc4": "FlagUint(uint256)", +"4a376c97": "OpenToThePublic()", +"4a37b5f7": "MyWill(address,string,string,string,address)", +"4a382c36": "freezeAccount(address,bool,uint256)", +"4a387bef": "removeLock(address)", +"4a393149": "onTransfer(address,address,uint256)", +"4a398c11": "SWIFTStandardToken(uint256,string,uint8,string)", +"4a39a5f4": "ALC_DECIMALSFACTOR()", +"4a3a835c": "withdrawAfterEnd()", +"4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", +"4a3a92f6": "minusFreezingTime(uint256,uint64)", +"4a3b0eec": "authorizeOpen(uint256,bool,string)", +"4a3b68cc": "referrers(address)", +"4a3bd672": "time1()", +"4a3bf377": "totalVotesFor(string)", +"4a3c4375": "getAllConsentTemplates()", +"4a3cdf21": "m_ETHPriceLastUpdate()", +"4a3d239c": "weiWithdrawed()", +"4a3d3510": "updateVotesOnTransfer(address,address)", +"4a3d3c09": "castleMinBrick()", +"4a3d5ec9": "ProofImpl(address)", +"4a3d72a1": "balancesContract()", +"4a3db7e7": "_generate(uint256,address)", +"4a3e2b21": "unpaid(bytes12)", +"4a3e4f90": "scamFlags(address)", +"4a3e8078": "emissionAddressUpdate(address)", +"4a3f17e7": "hodlers(address)", +"4a40e85b": "setMAYExchangeRate(uint256)", +"4a411f5a": "EventLuckyNumberRequested(address,uint256,uint256,uint8,address)", +"4a418b95": "logFlush(address,address,address,uint256)", +"4a418fb7": "numOfTransferableCompanysTokens()", +"4a41d1ac": "verify(address,bytes)", +"4a41d6f5": "_clearAllApproval()", +"4a41e045": "getUint8(int8)", +"4a420138": "scheduleHeartbeat()", +"4a4226a5": "TeamHeadsChoice(address)", +"4a42a397": "TakeSellOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"4a42d99b": "donGameGiftLineTime()", +"4a432a46": "updatePrice(string,uint256)", +"4a443471": "_money()", +"4a44664b": "withdrawVPCxTokens(address)", +"4a44bdb8": "getBlock(uint256,uint256)", +"4a4507ff": "testInitialBalance()", +"4a45b60b": "unregister(address,address)", +"4a45beed": "Accept(bytes32,string)", +"4a45d2e6": "setParam(uint256)", +"4a4666c1": "addAuthorizer(address)", +"4a4753bc": "BonusesDistributed()", +"4a48314f": "hodlerTime3M()", +"4a49ac4c": "removeFromBlackList(address)", +"4a4a2569": "getAudCentWeiPrice()", +"4a4a26d7": "EnChangToken()", +"4a4a2a97": "performReentrancyAttack()", +"4a4a2b52": "unfreezeAdministrationContract()", +"4a4b4eb0": "WISDOMCOIN()", +"4a4b674a": "setPenalty(uint256)", +"4a4b7202": "PPBC_API()", +"4a4b7de6": "deedContract()", +"4a4baed7": "setTokenControlInfos()", +"4a4c1bcd": "LeviusDAO()", +"4a4c560d": "whitelistUser(address)", +"4a4c5e59": "proceedTokenDeals(uint256)", +"4a4c82c6": "_resetSpentToday()", +"4a4e3bd5": "emergencyUnpause()", +"4a4e5776": "stepDuration()", +"4a4e6f95": "addFeedOut(address,address,int256,uint256,uint256)", +"4a4e8884": "getUserAddress(bytes32)", +"4a4ede50": "transferSalesAgentPermissions(address)", +"4a4ef738": "addAddressToPrivateWhiteList(address,uint256)", +"4a4f76d5": "getInitializeEndTime()", +"4a4fbeec": "isLocked(address)", +"4a4fd24d": "addMileagePoint(address,uint256,int256)", +"4a5033eb": "Reverted()", +"4a504a94": "Confirmation(address,uint256)", +"4a50c3a7": "EtherToWei(uint256)", +"4a5163b5": "numDefinedGames()", +"4a51dcea": "TIER3_CAP()", +"4a522e4e": "winCosFromGame(uint256,uint256,string)", +"4a52a5f8": "TerraFirma()", +"4a52e506": "enableLostAndFound(address,uint256,address)", +"4a53c127": "setTargetDiscountValue7(uint256)", +"4a54315c": "registerUser(bytes32,string)", +"4a54c00d": "sendRemainingTokensBool(address)", +"4a54fb0a": "updateProduct(bytes32,string,address,uint256,uint8,uint256)", +"4a55308c": "firstSellPrice()", +"4a562d81": "returnDeed(address)", +"4a574d18": "bonusMode()", +"4a5791e0": "UnFreezeProduct(uint256)", +"4a57c032": "IcoDiscountLevelsChanged(address,uint256,uint256)", +"4a57e1c9": "finalizeTransaction(uint256)", +"4a583ec5": "confirmSettlement(uint256,uint256)", +"4a588d87": "CYB(uint256,string,string)", +"4a5891ac": "changeEternalStorageContractAddress(address)", +"4a58c409": "changeStartSale(uint256)", +"4a58cf22": "totalSupplyInWei()", +"4a58db19": "addDeposit()", +"4a5a3d76": "setETHPriceManually(uint256)", +"4a5a831b": "EthlanceConfig(address)", +"4a5baa1b": "VULCAN_POD_EXTRACTION_BASE()", +"4a5c2d6e": "Change(address,uint256,address,uint256,address)", +"4a5c8f1a": "getEarnEachBlock()", +"4a5db3b5": "authorizeAddress(address)", +"4a5dcb5b": "Candy(address,address)", +"4a5dcdc9": "RANGEEND_9()", +"4a5dddd2": "proxyPurchase(address)", +"4a5df250": "nextContributionCaps(uint256)", +"4a5e1cf3": "initLottery(uint16,uint256,uint8)", +"4a5e4fa8": "setExpReward(uint32)", +"4a5e70c0": "ObitanChainToken()", +"4a5ecc66": "Sale(address,address)", +"4a5f41b6": "checkCanInvestInternal(address,uint256)", +"4a5fca4f": "offChainTokens()", +"4a5ff749": "teamAddr()", +"4a601994": "WesTechToken()", +"4a606c53": "_db()", +"4a60751f": "refundingEndtime()", +"4a61179b": "MANHATTANPROXY11THWEAVE()", +"4a617faa": "shaBid(bytes32,uint256,bytes32)", +"4a617fba": "gooDepositDivPercent()", +"4a61f347": "resetEditionLimits(uint256)", +"4a61fc1e": "getWinners(bytes32)", +"4a6213a1": "MAKERDAO_FEED_MULTIPLIER()", +"4a624310": "getAngelInfoByTile(uint16,uint8)", +"4a627e61": "someValue()", +"4a62cc73": "auditQueueExists()", +"4a62f5eb": "_isTokenActive()", +"4a63464d": "adminClaimAirdrop(address,uint256)", +"4a635d05": "testCampaignGoalReached()", +"4a63864b": "RATE_RATIO_SCALE()", +"4a63b3d3": "lockBlock()", +"4a63f8a4": "presellTimer()", +"4a6458ae": "Rescued(address,uint256,uint256)", +"4a64c23f": "removeCbAddress(address)", +"4a661152": "get_exchange_wei()", +"4a66ddff": "twin_contract()", +"4a67fa7d": "setLotteryFee(uint256)", +"4a681b1b": "EXPECTED()", +"4a683a65": "addBTCTransaction(uint256,bytes16,address)", +"4a68492c": "setTransferAgentStatus(address,bool)", +"4a6a225e": "proxyPayment(address,bytes4,bytes)", +"4a6aac33": "DATE_31_DEC_2020()", +"4a6b0b05": "NewArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", +"4a6b8cf6": "setPretgeAddress(address)", +"4a6b9473": "registerActionEvent(bytes32)", +"4a6bb4a5": "updateWallet(address,address)", +"4a6bfa2d": "salesActive()", +"4a6c121d": "uintToBytes32(uint256,uint256)", +"4a6cfca7": "getAccessory(uint256,uint256)", +"4a6d0292": "addSale(address)", +"4a6de5c3": "_getAvailableBalance()", +"4a6e2ffe": "calculateReferral(uint8)", +"4a6f2691": "setBoolF1(bool)", +"4a7004b9": "getTotalTokenDepositByAddress(address)", +"4a700545": "PrivateSaleAddress()", +"4a701fc3": "setownerInfo(address,bytes32,bytes32,bytes32)", +"4a7084bb": "setPublicOfferDate(uint256,uint256,uint256)", +"4a714378": "toggleVending(uint256,uint256)", +"4a714c24": "payers(address)", +"4a7160a2": "addSet(bytes32)", +"4a716adf": "transferVotes(uint256,address)", +"4a719a27": "getTargetRepMarketCapInAttoeth()", +"4a71a768": "setWeiCapPerAddress(uint256)", +"4a71d469": "collectRev()", +"4a720287": "setEarlyEndTime(uint256)", +"4a729fe1": "pay(address,bytes12)", +"4a733ded": "paybackContribution(uint256)", +"4a738bea": "withdrawWithFee(address,uint256,bytes32,address,uint256,bool)", +"4a74ca99": "disconnectOrderPrice(address,address,uint256,uint256)", +"4a751072": "rateBoundaries(uint256)", +"4a7510fc": "StealResources(uint256)", +"4a75c0ff": "StoreDocument(bytes32,string,string)", +"4a75e6c3": "servicePayment(address,uint256)", +"4a75e741": "add_owner(address)", +"4a765625": "AliParsafar()", +"4a76564e": "tokenReleased()", +"4a76869f": "commitOrder(string)", +"4a768eaa": "buytoken(address,uint256)", +"4a7759f8": "BALL()", +"4a776104": "canFinishPVP()", +"4a77f870": "migrateAll()", +"4a78a594": "getClaim(string,string,address,uint256)", +"4a78cdba": "jackPot()", +"4a7902d2": "changeRoot(address)", +"4a790540": "getPastWinnerPrizes()", +"4a793c0c": "cidTotalTokenSupply()", +"4a797494": "priceRound3()", +"4a7987a2": "setProvider(bytes32,address)", +"4a79d50c": "title()", +"4a7b1acc": "MapDemo()", +"4a7b26ec": "join_game(uint256)", +"4a7b7ec3": "mintMarketMakerCancel(address,address)", +"4a7b8f21": "addHarvestOperationEndorsement(string,bool,string,string)", +"4a7bb697": "AssignGGCPoolOwner(address)", +"4a7c7e46": "uintToAscii(uint256)", +"4a7cb0f5": "FoundationRequested(address,address,bytes32)", +"4a7d505c": "initBetType()", +"4a7d5899": "payOut(address[])", +"4a7d8bcc": "getCurrentTokenPricepreICO(uint256)", +"4a7d9f0f": "getSettlementPeriodEnd()", +"4a7dd523": "generate(uint256)", +"4a7de068": "finalizeSetDelegatedFrom()", +"4a7e00de": "rejectCompanyAllocation(address)", +"4a7e049e": "getFullCompany(address,uint256)", +"4a7e130e": "remainTime()", +"4a7ffcbc": "daoContract()", +"4a800b98": "cancelChampSale(uint256)", +"4a803387": "insert(uint256,uint256,uint256)", +"4a8075ac": "SaleAuction(address)", +"4a80dcab": "getProjectMilestonesCount(bytes32)", +"4a80f2ba": "registerKey(string)", +"4a812023": "logUniverseForked()", +"4a81db9a": "moneybackaddr()", +"4a81dc0f": "forceUpdatePrizes(uint256[])", +"4a82534b": "create(address,address,address,uint256,uint8,uint8,uint256)", +"4a825c68": "checkRoundEnd()", +"4a826823": "setCastle(uint64,uint64,uint64,uint64,uint64,uint64)", +"4a82804e": "setNewMessage(string)", +"4a8302a2": "SynixToken(uint256,string,uint8,string)", +"4a8305b4": "newCoinOwner(address)", +"4a838caf": "ethfortnite()", +"4a83cfa9": "burnMedal(uint256)", +"4a84fa81": "checkRokSold()", +"4a85223b": "addUser(address,string,string,int256,string)", +"4a85280e": "isAuthorizedAddress(address)", +"4a85512f": "awardInvation(bytes32)", +"4a85d0d5": "HeliumNetwork()", +"4a85dbcd": "setVal(string,uint256)", +"4a8646c3": "HomeLoansToken(uint256,string,uint256,string)", +"4a8671f1": "newWallet()", +"4a867488": "setVestingPercent(uint256)", +"4a87b419": "cancelApproveFee()", +"4a87e08a": "BUY_CITY_FEE()", +"4a881ac6": "addAddressDescription(string,address)", +"4a88eb89": "altDeposits()", +"4a88f9c7": "exFees(uint256)", +"4a891e7f": "FinalizeMove(address,string,string)", +"4a896384": "ask()", +"4a8967a6": "_today()", +"4a8a6eac": "CarRegistered(uint256)", +"4a8a83db": "calculateVestedTokensTime(uint256,uint256,uint256,uint256,uint256)", +"4a8b2b27": "testOne()", +"4a8b5389": "allocateBountyAndEcosystemTokens()", +"4a8beaf4": "decline(string)", +"4a8c1fb4": "isActivated()", +"4a8c2d64": "TopsXToken(uint256,string,uint8,string)", +"4a8c3129": "MultiOwners()", +"4a8cbae1": "charityPercent()", +"4a8e4d78": "getDuesIn(uint256)", +"4a8e5651": "resultAccept()", +"4a8ef4bd": "setOrderBookAcount(address)", +"4a8ef851": "pushTicketSetToAccount(uint256,uint256)", +"4a909d5f": "transferWithLockup(address,uint256,uint256)", +"4a910046": "getLastHash()", +"4a914e8c": "calculateTotalExpenseWithdrawableAmount()", +"4a915ea2": "votedHarvest()", +"4a91e536": "getWinnerDetails(uint256)", +"4a91ec80": "prospectors_dev_allocation()", +"4a91ee2a": "allowByPassword(bytes8,bytes)", +"4a91f195": "totalBought()", +"4a923199": "maximumTNB()", +"4a92fa06": "createPromoRide(address,string,bytes7,uint256)", +"4a92fb3a": "proxyTransfer(address,address,uint256)", +"4a943eb3": "numsuccesses()", +"4a945f8d": "setAddresses(address,address,address,address)", +"4a947bdb": "putMatingRequest(uint256,uint256)", +"4a950db6": "tradetxToken()", +"4a950f00": "TurkeyBurgerToken(uint256)", +"4a955659": "_getNewLotteryCreatedAt()", +"4a96712e": "confirm(bytes32,address,uint256,uint8,bytes32,bytes32)", +"4a96d129": "OfferTime()", +"4a975d6b": "allocateRestrictedTokenTo(bytes32,bytes32,bytes32,uint256)", +"4a980b49": "IRideToken()", +"4a98146a": "VILLAGE_START_PRICE()", +"4a994d22": "_getReleaseDate(uint256)", +"4a994eef": "setDelegate(address,bool)", +"4a9952c7": "setMintTokenOwner(int256,address,address)", +"4a9a6f15": "getFromFaucet(string)", +"4a9b3f95": "personUpdateName(uint256,string)", +"4a9b5c2e": "CREATOR_TOKEN_END()", +"4a9bdb65": "byuoutCount()", +"4a9cdfad": "setPlayerLAff(uint256,uint256)", +"4a9d367b": "RecipientChanged(address,address)", +"4a9d9172": "test_testableStandardCampaignAbsolvementAfterPayout()", +"4a9f0110": "setSellDailyLimit(uint256,bytes2,uint256)", +"4a9f6d4a": "setMaxPreCrowdAllocationPerInvestor(uint256)", +"4a9fefc7": "getReferrer(address)", +"4aa16737": "enter(uint8)", +"4aa1acb3": "withdrawEth(uint256,bytes)", +"4aa1d21b": "transferDryRun(address,address,uint256,uint256)", +"4aa1dde4": "isDisclosureFullySigned(uint256)", +"4aa2f0f5": "HKD_Omnidollar()", +"4aa3fcd3": "_getSkillConfigs()", +"4aa41e53": "minFinneyPerHedgeTransfer()", +"4aa47a50": "isIntermediateVault()", +"4aa4ba9b": "storeBatch(string)", +"4aa5a05d": "maxP1Cap()", +"4aa5b398": "voteCurrentResult()", +"4aa669d8": "Buy_Wall_level_in_wei()", +"4aa66b28": "getBonus(uint256)", +"4aa678c3": "getMyUnlockValue()", +"4aa6c09a": "setTargetDiscountValue3(uint256)", +"4aa735c0": "BST()", +"4aa74c27": "_emitFuture(bytes32,uint256,uint256,uint256)", +"4aa77c71": "Visualrocktoken()", +"4aa83079": "setSaleContractFinalised(address)", +"4aa880c1": "SetFactoryParams(bool,bool,uint256)", +"4aa8e57e": "buyBox1()", +"4aa8e773": "Cancel()", +"4aab421d": "tgrAmountCollected()", +"4aab8c14": "setPonzi(uint8,uint256)", +"4aabcec7": "SimpleWallet()", +"4aac390a": "hasLanguage(address,address,uint256)", +"4aac75a7": "setMainSaleDates(uint256,uint256)", +"4aaca86d": "saleStage()", +"4aacd437": "freezeAccountPartialy(address,uint256)", +"4aaceed3": "icoBonus2()", +"4aada45f": "KittensDroped(uint256,uint256)", +"4aae385f": "preSaleFirstStartDate()", +"4aaf4a12": "getOwner(string)", +"4aaf6b86": "contract_state()", +"4ab0c0ee": "testConcatMemory32Bytes()", +"4ab0fc08": "setDefaultURIEnd(string)", +"4ab1c98f": "requestControllerContractMigration(address)", +"4ab24cf3": "pornToken()", +"4ab273f0": "SellEggs()", +"4ab320b4": "viewSettingsChange(uint256)", +"4ab358c7": "recoverFunds(uint256)", +"4ab3bbdc": "_brokerFeeDistribute(uint256,uint256,uint256,uint256)", +"4ab3bc23": "getSelfCardDatas()", +"4ab3d487": "newEntry(uint256)", +"4ab40ac6": "allOpenTradesAmounts()", +"4ab5439b": "TEAM_POOL_ADDR()", +"4ab54530": "inPreSale1Period()", +"4ab5cc82": "latestValue()", +"4ab6d337": "getContributorsLength()", +"4ab74a1e": "tok()", +"4ab7508a": "multiWallet()", +"4ab788cb": "prebridge()", +"4ab798f1": "toggleTransfer()", +"4ab7cbfe": "getMinerHalvingHashRateOf(address)", +"4ab89400": "cancelRefund(address)", +"4ab9792d": "setTokenFrom(address)", +"4aba5f34": "getCandidatesList()", +"4aba76a3": "ESlotsToken()", +"4aba7f96": "setMixGenAddress(address,address)", +"4abad407": "startCrowdfund(uint256)", +"4abb525a": "moonIncContract()", +"4abb9d39": "depletable()", +"4abc8652": "inPrivateSalePeriod()", +"4abd89bd": "MDICOStage2(address,address,uint256,uint256,uint256,uint256)", +"4abd8e01": "putStcWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"4abd8f65": "updateEnabled()", +"4abdf2e0": "setWithdrawLimit(uint256)", +"4abe1a62": "settleEtherPolicy(address[],uint256[],uint256[],uint256[])", +"4abe34f2": "TecToken(string,string,uint8,uint256)", +"4abefa36": "getEmployees()", +"4abfacfd": "createTeam(string,string,uint32,uint32,uint256)", +"4abfbbe3": "getBlockInfo(uint8,uint8)", +"4ac0b6b0": "preparePaymentReferrer(address,uint256)", +"4ac0d66e": "newGreeting(string)", +"4ac1ad78": "getWeekday(uint256)", +"4ac1b5ff": "GoldmintUnsold(address,address)", +"4ac25224": "isChannelOpen()", +"4ac2d103": "miningReward()", +"4ac36201": "Yachtco()", +"4ac365c2": "DividendTransfered(uint256,address,uint256,uint256,uint256)", +"4ac38f13": "BlupassToken()", +"4ac39f37": "unsafeIsSigned(uint16)", +"4ac429f2": "ConstantinopleCheckFunction()", +"4ac54245": "_fulfill(bytes32)", +"4ac5aae5": "getTotalBonus()", +"4ac5dea9": "getRoundPointer(uint256,uint256)", +"4ac6b2be": "getCheckRecordCreator(bytes)", +"4ac6d5f4": "frostTokens()", +"4ac79795": "removeLogic(address)", +"4ac7becf": "SimpleSign()", +"4ac84218": "RequiredFeeNotMet(uint256,uint256)", +"4ac84242": "CWT(uint256,string,string)", +"4ac87af7": "frozenToken(uint256,string)", +"4ac87e47": "Bittwatt(uint256)", +"4ac8a529": "createDispute(uint256)", +"4ac9f0d7": "behalfer()", +"4ac9f881": "takeSellOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"4ac9fc37": "updateConvertionRate(uint256)", +"4acb17c8": "getPeggedTokenAddress(address,address,uint256)", +"4acb232b": "percentWeiMC()", +"4acb3e59": "QCOToken(address,address,address,address,address)", +"4acc50eb": "Invoked(address,address,bool,uint256)", +"4acceeea": "togglePrebrdige()", +"4acd058e": "auctionBonus(uint256)", +"4acd44db": "offChainManager()", +"4acd4d5c": "mintLockCashout(address,uint256)", +"4acdc150": "setupCrowdsale(uint256)", +"4acdd29a": "statusPred(address,uint256[],uint256)", +"4acddfa0": "register(address,string,uint256,string,string,string,bytes20)", +"4ace9ccc": "ratePlansOfVendor(uint256,uint256,uint256)", +"4acea254": "inviteAmountLimit()", +"4acefeb1": "ethartArtAwarded()", +"4acf071c": "setStepTwoTime(uint256,uint256)", +"4acf4a27": "withdraw(uint128,address,uint256,uint128)", +"4acf8867": "PillarToken(address,address)", +"4ad07b0e": "oracleOutcomes(bytes32,address)", +"4ad0a529": "currentMigrationTarget()", +"4ad1cbad": "withdrawTeamTokens(address,uint256)", +"4ad25557": "getMonsterNum(uint256)", +"4ad27ae1": "claimInternal(address,address)", +"4ad32970": "setUserAllocs(address[],uint256,uint256)", +"4ad37241": "destroyCard(uint256,uint16)", +"4ad37538": "DJPToken()", +"4ad42500": "ico26()", +"4ad447ba": "PutinCoin()", +"4ad4fa5d": "ERC223()", +"4ad59c54": "overpays(address)", +"4ad5a68c": "returnIdImage(uint32)", +"4ad5f440": "totalIcoTokensSold()", +"4ad6e648": "fightFactor()", +"4ad6f9f3": "checkTx(string)", +"4ad7799f": "VestingReleased(address,uint256)", +"4ad857a1": "etherSent(uint256)", +"4ad88363": "reset_application(address)", +"4ad8c869": "reCommentReward()", +"4ad8c938": "createSiringAuction(uint256,uint256,uint256,uint256)", +"4ad9b1c3": "addWallets(address[])", +"4ad9d7ab": "getGoldStatusRegistered(address)", +"4ada218b": "tradingEnabled()", +"4ada3b32": "approvedAccount(address,bool)", +"4adaedef": "send_allowed()", +"4adaf5f6": "changeFundOwner(address)", +"4adaf748": "eBlockPower()", +"4adbe551": "whitelistAdmin()", +"4adc0b09": "setMembershipPrice(uint8,uint256)", +"4adcbd19": "isThisHardforkedVersion()", +"4adf6591": "setReportTimestamp(uint256)", +"4ae00041": "call(address,bytes,uint256)", +"4ae0ac60": "FobsCoin()", +"4ae0f543": "publicAllocation()", +"4ae12e9f": "FHFToken()", +"4ae184f2": "createStandingOrder(address,uint256,uint256,uint256,string)", +"4ae2b849": "PHASE_DURATION()", +"4ae2c351": "createCrowdsaleTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", +"4ae3164d": "getNewGens(address,uint256)", +"4ae34a96": "changelp16(address)", +"4ae34bb1": "EfectiveToken()", +"4ae3643f": "phase_4_token_price()", +"4ae4dd6b": "KeyRewardPool(uint256,address,address)", +"4ae4e9ea": "m_currentTokensSold()", +"4ae51a9a": "transferDevTokens(address)", +"4ae55dd0": "amendedEarlyPurchaseIndexes()", +"4ae5d478": "setNodesVars(address)", +"4ae5eecb": "getUserP3DDivEarnings(address)", +"4ae6ab70": "_getRevisionTimestamp(bytes20,uint256)", +"4ae85627": "grindUnicorns(uint256)", +"4ae86038": "MultiBonusCrowdsale()", +"4ae8c55f": "getWwLength()", +"4ae8ef06": "setLastTier(uint16)", +"4ae8f9fb": "FSCP()", +"4ae90a40": "isNotaryAdditionValid(address,address,uint256,uint256,string,bytes)", +"4ae931cc": "setPresellUpToTime(uint256)", +"4ae96e77": "setTransformTarget(uint256)", +"4ae9af61": "getBotStats(uint256,uint256)", +"4aea0aec": "lendFee()", +"4aea5f0f": "Artcoin(address,uint256,uint256)", +"4aea7aa9": "SetIDChain(address,address)", +"4aeb0241": "LisaToken()", +"4aeba1a5": "removeCustomerService(address)", +"4aec4677": "migrateLosingTokens()", +"4aec6416": "removeTransferAndCallWhitelist(address)", +"4aecf91d": "_emitContractRemoved(address,address)", +"4aed8a76": "inPreSalePeriod()", +"4aeda70d": "changeAuctionContract(address)", +"4aeddad0": "ConvertBkp(uint256)", +"4aef05a5": "addSongWriter(string,uint256,address)", +"4aef8b7c": "_isOddFlag(uint256)", +"4aefc3c4": "ContributionStateChanged(address,uint8)", +"4af0700b": "isUniqueBlindedProposal(uint256,bytes32)", +"4af153a9": "_message(uint256)", +"4af165cb": "EPause(address,string)", +"4af1b8a7": "pullAddr()", +"4af1f96a": "getActiveSellSize(bytes32)", +"4af27ba2": "_redeem(address,address,uint256,bytes,bytes)", +"4af3182a": "move_x(uint8,uint8)", +"4af350eb": "transferTokens(address,uint256,address)", +"4af4a127": "bonusPeriod()", +"4af4c191": "TIER4_RATE()", +"4af54311": "burnSomeTokens(uint256)", +"4af56cb0": "getUseRegistry()", +"4af69189": "sponsoredJackpotToken()", +"4af6ffc2": "attest(uint256)", +"4af79ba2": "getChallengesForMentor(address)", +"4af7eedf": "VID(uint256,string,uint8,string)", +"4af80f0e": "setConversionWhitelist(address)", +"4af98f1b": "setFeeDivider(uint256)", +"4afb07c4": "getAccountActivity(address)", +"4afb09c2": "listDTH()", +"4afbac9c": "removeFromTokenList(address,uint256)", +"4afbb7d7": "getDepositary_function()", +"4afc0476": "RedPillCoin()", +"4afc7774": "_is()", +"4afce471": "test_requires_depth(uint16)", +"4afd74ff": "getRefunded(address)", +"4afd8a19": "getLendingInfo(address,uint256)", +"4afd8a98": "testEthIcoToken()", +"4afdcbde": "pauseOperator()", +"4afe2f80": "setRate(uint8)", +"4afe62b5": "placeBet(uint256,uint256)", +"4affb863": "isPartner(address,address)", +"4b00ebfb": "CheckExecution(string)", +"4b013f85": "_addVestor(address,uint256,uint256,uint256,bool)", +"4b023cf8": "setFeeAccount(address)", +"4b02e328": "IncorrectFee(address,uint256)", +"4b0304ab": "DonationReceived(address,uint256,uint256)", +"4b031397": "killAdminOnly()", +"4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", +"4b03a15e": "_terminateSchedule(address)", +"4b042c0b": "specialsInfo(uint256)", +"4b05de75": "seventhTeamWithdrawal()", +"4b0697e4": "Manager(address)", +"4b06e1c7": "declareWininingFighter(address)", +"4b06fb28": "eatUnicornsAlive()", +"4b0720a7": "customGasPrice()", +"4b079fa6": "ownerof()", +"4b084d49": "checkEnd()", +"4b089b12": "withdrawManagerBonus()", +"4b09b72a": "reserveAmount()", +"4b09ebb2": "e_exp(uint256)", +"4b0a0d04": "checkRequestSignature(bytes,address[],uint256,bytes)", +"4b0ad8fa": "getStakedShop(address)", +"4b0adf6c": "MintingAgentChanged(address,bool)", +"4b0babdd": "releaseTokens(uint256)", +"4b0bbf84": "addEntropy()", +"4b0bddd2": "setAdmin(address,bool)", +"4b0c79aa": "turnOnOraclize()", +"4b0d5417": "disableSellToken()", +"4b0daadb": "getStaticArray()", +"4b0df486": "assertEq23(bytes23,bytes23)", +"4b0e2c90": "enableInternalLock()", +"4b0e5044": "HoldToken(address)", +"4b0e7216": "setBurnAddress(address)", +"4b0ee02a": "totalBalanceOf(address)", +"4b0f43fd": "canExecute(address,uint256)", +"4b106893": "inactive_withdraw(address)", +"4b11281e": "returnCreatorAddress(bytes32,uint8,bytes32[2])", +"4b11452c": "changeFoundationAddress(address)", +"4b114691": "playerInfo(address)", +"4b1146ca": "TOKEN_SUPPLY_BOUNTY_LIMIT()", +"4b11982e": "setCooldown(uint64)", +"4b11e7a0": "getVotingStart()", +"4b12416c": "setHeroTokenContract(address)", +"4b12dd39": "BTSCoin()", +"4b1325ea": "setNewOwnersCountToApprove(uint256)", +"4b143bb5": "harapan()", +"4b14e003": "transferAll(address,address)", +"4b16304f": "setTokenAddress(address,bytes)", +"4b1700df": "TokenListingManager()", +"4b1740ad": "tier3()", +"4b17bdd8": "transferTokensFrom(address,address,address,uint256)", +"4b18be1d": "moveLeftOvertokensToartistPool()", +"4b19eb09": "isStatePublic()", +"4b1a5773": "createSwapTarget(bytes20,address,address,uint256,address)", +"4b1be424": "getVotesBetweenFor(uint256,uint256,uint256,address)", +"4b1c5597": "dissolveFund()", +"4b1c8506": "bonusesList(uint256)", +"4b1cab4e": "calculateEthToToken(uint256,uint256)", +"4b1cdc2d": "token6DivsOwing(address)", +"4b1cff0b": "pot_()", +"4b1d00ee": "releasedCount()", +"4b1d29b4": "maxLockPeriod()", +"4b1dc225": "founderWithdrawablePhase3()", +"4b1dd21a": "getWhitelistLimit(address)", +"4b1dd591": "firstDiscountCap()", +"4b1ebc5a": "perpetuum()", +"4b1ec20c": "setPropertyPrivateMode(uint16,bool)", +"4b1ef6e1": "getMyRecord(address,uint256)", +"4b1f15d1": "updateDragonPrice(uint256)", +"4b1fb6d4": "removeNacFromNetf(uint256)", +"4b1fe17e": "ENSResolver(address)", +"4b200fac": "ClearCoin()", +"4b20ae39": "create(address,address,address,uint256,uint256,uint256,uint256)", +"4b21433a": "CoolICOToken()", +"4b21a587": "sellerfeeDivide()", +"4b21aaae": "getBondPrice(uint256)", +"4b2233df": "buyTokenSub(uint256,address)", +"4b227176": "pID_()", +"4b236401": "claimPlot(uint256,uint256)", +"4b242252": "levelByToken(uint256)", +"4b24ea47": "controllerAddress()", +"4b24f3a6": "setJackpotFee(uint256)", +"4b24f7aa": "CSpacesToken()", +"4b24fd0d": "getKeyType(address)", +"4b256137": "lockingContract()", +"4b259b5c": "getCumulativeAllowance()", +"4b25bfce": "whitelist(uint256,address)", +"4b269a00": "withdraw(int256[])", +"4b2702b3": "TokenSwitch(address,address,bool)", +"4b272c4a": "Greenbit()", +"4b274458": "getUncleAmount(uint256)", +"4b27a2ca": "fechVoteMainInfoForVoterBySnapshotBlock(address,uint256)", +"4b28a674": "organizer2()", +"4b28bdc2": "allRevealed()", +"4b2930d0": "IsICOrunning()", +"4b29c448": "setGoal(uint256)", +"4b2a12da": "changeMinDeposit(uint256)", +"4b2a4e18": "TradersWallet()", +"4b2a649c": "ECRecoverWrapper(string,uint8,bytes32,bytes32)", +"4b2ac3fa": "swapID(bytes32,uint256)", +"4b2acaa0": "openGateway()", +"4b2ba0dd": "originalSupply()", +"4b2be022": "BinaxToken()", +"4b2c0706": "getPeriod(uint256)", +"4b2c2596": "MerchantDealsHistory(string)", +"4b2c89d5": "redeemDeposits()", +"4b2cbc9d": "etherCollected()", +"4b2d5164": "transfer_tokens_after_ICO(address[],uint256)", +"4b2f249a": "isTileLive(uint16,uint8)", +"4b2f9eb7": "declareNewMaster(address)", +"4b313043": "preIcoMaxLasts()", +"4b314b34": "LogPause()", +"4b319713": "totalWithdrawn()", +"4b321502": "addHours(uint256,uint256)", +"4b331ca0": "getCitation(uint256)", +"4b33eac2": "updateTicketStructure(uint256,bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"4b341aed": "totalStakedFor(address)", +"4b3544d5": "Jakov()", +"4b35ae33": "setTimeLimited(uint256)", +"4b369820": "setEntry(string)", +"4b36bca9": "WagerGames()", +"4b3727fb": "SshKey()", +"4b374fbe": "BTEN()", +"4b376513": "lastBlock_v13Hash_uint256()", +"4b376e45": "BoodooToken()", +"4b37c73f": "removeFactory(address)", +"4b37cf47": "littIsCapsule(bytes32)", +"4b3881ff": "StakeDestroyed(uint256,uint256,address,bytes32)", +"4b3955a5": "tier0LOT()", +"4b396ade": "TicketMultiTear(string,string[],uint256[])", +"4b3985a4": "shareTime()", +"4b398a5c": "mainnetLocked()", +"4b3a5fa6": "saleStartFirstDayEnd()", +"4b3ab5bf": "paySubscriptionFee()", +"4b3ab9c5": "getShare(address)", +"4b3afdd2": "setEthernautsStorageContract(address)", +"4b3b1d69": "notZero(uint256)", +"4b3b548f": "preMine()", +"4b3b6168": "SetNewBigContract(address)", +"4b3c45db": "getDealDataByNumber(uint256)", +"4b3ce14d": "set_minUETsPerReturnMoreThan(uint256)", +"4b3d81b6": "initialBlockTimestamp()", +"4b3ec03a": "TEAM_ACCOUNT()", +"4b3f3987": "_updateLock(uint256,address)", +"4b419b5f": "setcardPrice(uint256,uint256)", +"4b41c74a": "Ticker()", +"4b41cb60": "withdrawPreSigned(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32)", +"4b41eb4a": "ZyryanovKubSU2018()", +"4b41f4df": "transferableTime()", +"4b42d208": "getUint8FromByte32(bytes32,uint8)", +"4b432966": "max_fortunes()", +"4b43b582": "changeAdminWallet(address)", +"4b43dc51": "testTokensAreLockedDuringSale()", +"4b449cba": "auctionEndTime()", +"4b452958": "_setStakingEpochStartBlock(uint256)", +"4b467105": "walletCommunityReserve()", +"4b467157": "stopEmergencyWithdrawal()", +"4b468b0e": "JDAnteil()", +"4b469490": "RichToken(address)", +"4b471dd0": "setWithdrawalAndReinvestmentContracts(address,address)", +"4b496444": "azatipToken()", +"4b4a456a": "ChargeFix(uint256)", +"4b4a5088": "switchCompatible20(bool)", +"4b4af4db": "allocateTeam(address,uint256)", +"4b4b6338": "MECoin(uint256)", +"4b4b87c0": "PowerCoin()", +"4b4bb75b": "DSToken(string,string)", +"4b4c01f4": "RobincoinERC20(uint256,string,string)", +"4b4c0d7c": "BONUS2()", +"4b4c2039": "_B_sendToEthertoteDevelopmentWallet()", +"4b4e23e1": "TIMESTAMP_BUCKET_SIZE()", +"4b4e38df": "GetCurrentPoolAmount()", +"4b4f8e36": "addCZRLock(address,uint256,uint256,uint256)", +"4b4f90ef": "saleIsOn()", +"4b504ecd": "logNewPlayer(address)", +"4b50c9f0": "getGameStartTime()", +"4b513e82": "RegistrantApproval(address)", +"4b5243b5": "ETGTestCoin()", +"4b52f48f": "withdrawLeft()", +"4b52f89b": "setGiftToken(address)", +"4b530090": "nextDiscountTTWTokenId1()", +"4b534c48": "unlockProjectToken()", +"4b54d131": "wipeProposedActions()", +"4b54f1fb": "S1Coin()", +"4b561a16": "getMatchInfo(uint256)", +"4b563657": "setMessages(bytes32,bytes)", +"4b56b10d": "preIco()", +"4b56cd27": "depositBoth(address,uint256)", +"4b56dcf4": "LogChangeIsPayableEnabled()", +"4b57b0be": "wethToken()", +"4b57ed55": "EnonRToken()", +"4b57fbaf": "SetMinChequeValue(uint256)", +"4b5830b4": "SENC_CONTRACT_ADDRESS()", +"4b58484d": "_createPlayer(address,address)", +"4b58bb40": "timeUntilNextRound()", +"4b58d0bb": "reserveFundAddress()", +"4b59e880": "puzzle(address,bytes32,bytes32)", +"4b5a0e65": "getWinningStageInfo()", +"4b5a726d": "getProgramInfo(uint256)", +"4b5c0234": "throwsWhenHittingHardCap()", +"4b5c4277": "log(string,string)", +"4b5c8bdf": "stakeTotal()", +"4b5dc8cb": "roundMoneyDown3SFExt(uint256)", +"4b5dcad7": "ServiceStation(address)", +"4b5e8d63": "registerInvestor()", +"4b5f297a": "hasAttribute(address,uint256)", +"4b5f2fa4": "TravelZediToken(uint256,string,uint8,string)", +"4b5f3e0a": "getDate(bytes32)", +"4b5fd350": "withdrawHeldToken(uint256,uint256,uint256,uint256)", +"4b5fea8a": "milestoneRecipients(uint256)", +"4b602673": "artworks(uint256)", +"4b603a83": "mintTokens_(address,uint256,address)", +"4b61cf17": "SWLPerEther()", +"4b623178": "removeFromPublicWhitelist(address)", +"4b627107": "setValidatorDescription(address,string)", +"4b62e0d9": "buyIns(uint256)", +"4b63036d": "holderContract()", +"4b63189c": "softcapPreSale()", +"4b63e601": "scheduleCall(address,uint256,bytes)", +"4b641f52": "coinbaseInit()", +"4b64a00f": "DiscountApplied(uint256,uint256,uint256)", +"4b64e492": "execute(address)", +"4b650d0b": "getPlayerClickCount(uint256,address)", +"4b656b41": "totalWeiRaisedDuringPhase1()", +"4b66cb7e": "teamHolder()", +"4b6753bc": "closingTime()", +"4b67f6af": "name2()", +"4b689cf0": "setCommunityAccountOwner(address)", +"4b69c3d4": "getRegistryDataVendor()", +"4b6a3334": "setEtherPrices(uint256,uint256)", +"4b6a8604": "setBiddingRate(uint256,uint256)", +"4b6a9f1d": "STORES_TO_UPGRADE_1CENTER()", +"4b6acafb": "totalDividend()", +"4b6ad918": "isCurrentUserRefAvailable()", +"4b6b2300": "updateTopicAssetClass(bytes15,string)", +"4b6bc655": "isFreeze(address,address)", +"4b6bdf1d": "poker()", +"4b6c144a": "getClaimById(string)", +"4b6dfe4e": "initialFundBalance()", +"4b6e7d78": "Data()", +"4b6ea677": "oracleURL()", +"4b6ede29": "Users()", +"4b702afa": "accountS()", +"4b70cec4": "getTime(address)", +"4b71bff3": "airdropReward()", +"4b726f61": "checkCustomer(string,string)", +"4b729aff": "buyNumber(uint256)", +"4b72bbaf": "getSirePrice(uint32)", +"4b739b61": "payByEth(uint256)", +"4b73ca04": "flipsCompleted()", +"4b741395": "requestNewMint(address,uint256)", +"4b749535": "hardCapTokens()", +"4b750334": "sellPrice()", +"4b75f046": "tokensIssuedCrowd()", +"4b75f54f": "formula()", +"4b760612": "localsCointoken(uint256,string,uint8,uint256,string,string)", +"4b763fe7": "PersistLimitChanged(uint256)", +"4b766b95": "markRewardsSet(string)", +"4b76cb13": "get_status_user(address,address)", +"4b76fe19": "EtherPredict()", +"4b778445": "addRound(uint256,uint256,uint256)", +"4b77b8d3": "stopCrowdfunding()", +"4b77c468": "invite(address)", +"4b77d17d": "is_king_found()", +"4b7829f1": "token_claim_waiting_period()", +"4b7863fe": "setIBalance(uint256,uint256)", +"4b78ab61": "notarizationList(uint256)", +"4b798b82": "setFixes(string,string)", +"4b79e8ef": "getVariablesForDapp()", +"4b7a5cc6": "PLATINUM_AMOUNT_NDC()", +"4b7a7a14": "PresaleFirst(uint256,uint256,address,address)", +"4b7ae9f6": "returnMe()", +"4b7b2ed1": "confirmTransaction(address)", +"4b7b45b4": "DreamMaker()", +"4b7bb8e3": "CfoAddress()", +"4b7c1d2c": "TransactionConfirmed(uint256,uint256)", +"4b7e23b3": "ShapeshiftBotLookup()", +"4b7fa6db": "viewFn(uint256)", +"4b7fcee7": "ownerPausePayouts(bool)", +"4b802dde": "rentals()", +"4b803095": "processReferralSystem(address,address)", +"4b813478": "FinishBallot(uint256)", +"4b81780e": "ADDR_MAYA_ASSOCIATION()", +"4b82d416": "preSaleSecondEndDate()", +"4b82ee28": "frozenDaysForEarlyInvestor()", +"4b82f437": "setFirstReporterCompensationCheck(uint256)", +"4b836181": "BuyTicket(address)", +"4b8399f4": "setEnum()", +"4b841fa9": "redeem(string,uint256,uint256,uint8,bytes32,bytes32)", +"4b84ee81": "LogAddTokenPairWhitelist(address,address)", +"4b851b23": "hasDefaultRelease()", +"4b852c03": "setDuration(uint64)", +"4b855c62": "purchaseKingdom(string,string,bool,address)", +"4b8574ad": "AttestationManager()", +"4b85fd55": "setAutoBirthFee(uint256)", +"4b8624c4": "BONUS()", +"4b865846": "suspend(uint256)", +"4b866981": "LP(uint256,string,string)", +"4b869e15": "investeth2017()", +"4b86c225": "lock(address,address,uint256,uint256)", +"4b86faba": "claimHodlReward()", +"4b86fc5b": "isEligible(address,string,string)", +"4b8772c1": "buyUnit(uint256,uint256)", +"4b886f09": "VantageCoin(uint256,string,uint8,string)", +"4b891518": "_grantAccess(uint256,address)", +"4b89c41d": "setClosingTime(uint256)", +"4b8a3529": "borrow(address,uint256)", +"4b8adcf7": "pauseContribution()", +"4b8b4cee": "postExternalPayment(address,uint256,uint256,uint8,uint256)", +"4b8b704e": "icoTokensCount()", +"4b8b7a2a": "addCourse(string,uint256,string,string,string,string)", +"4b8ca215": "Ornament()", +"4b8d12f0": "migrateAddress()", +"4b8dbd1a": "VRFtoken()", +"4b8dc588": "closeRefundVault(bool)", +"4b8e1ba8": "isMinter(int256,address)", +"4b8e31a2": "_erc20token()", +"4b8e38db": "test(uint32[26],uint32[4])", +"4b8f4b5e": "MordernToken()", +"4b8f9f87": "ownerSetMinJackpoBet(uint256)", +"4b8fe5eb": "setPendingUserListLength(uint256)", +"4b8feb4f": "multiSigWallet()", +"4b901b72": "balanceOfByTranche(bytes32,address)", +"4b9081bf": "getBonusSale(uint256,uint256)", +"4b90ac86": "isBountySent()", +"4b9143f7": "setSold(uint256)", +"4b915a68": "aliceClaimsDeposit(bytes32,uint256,address,address,bytes20)", +"4b91ab35": "unfollow(bytes32)", +"4b922b12": "getDataColla_AB_01(string)", +"4b92738e": "migrateBalances(address[])", +"4b92f39e": "tradingClass(address)", +"4b930503": "registerName(address,string)", +"4b931600": "evaluateCategory(address,uint8,uint256,uint256)", +"4b932327": "novaluetoken(uint256,string,string)", +"4b93fec0": "BetContract()", +"4b944b9b": "post(bytes32,bytes32)", +"4b94f50e": "getTokenPrice()", +"4b95dcc0": "ViberateCrowdsale()", +"4b960794": "spotsLeft()", +"4b963025": "addUniqueSaleTokensMulti(address[],uint256[])", +"4b96b0ee": "registerZone(bytes8)", +"4b96f855": "burnPercentageDefault()", +"4b97aed9": "numOptions()", +"4b97e6cc": "withdrawEthBalanceSave()", +"4b991bde": "challenge(uint64,uint256,bytes,bytes,bytes)", +"4b997d9a": "sendTokens(uint256,address,bool)", +"4b99f0c5": "setTradingPairCutoffs(bytes20,uint256)", +"4b9a22af": "teamWon()", +"4b9b808d": "setResetVoteKindnessEvery(uint256)", +"4b9c4358": "betPlaced(address,uint256,uint256)", +"4b9c78e5": "buyEngineer(uint256[])", +"4b9cdbe7": "addCurrencyInternal(uint256)", +"4b9ce83c": "recordAssetPrice(uint128,uint128,uint128)", +"4b9d5047": "PlutoToken()", +"4b9d8624": "getLinks(address)", +"4b9de7a2": "dataIdentifiers(uint256)", +"4b9de81e": "endTimeRound2()", +"4b9e7ecd": "test_1_restrictDoubleVote_shouldThrow()", +"4b9eb771": "CAT_PER_ETH_FIRST_EARLY_BIRD_RATE()", +"4b9ed302": "setEarlyInvestorsBonus(uint256)", +"4b9ee106": "setMetaBetWeight(uint256)", +"4b9eea9b": "decodeKYCFlag(uint128)", +"4b9f5c98": "vote(bool)", +"4b9faf4c": "setTokenBalance(uint256,bool)", +"4ba034dc": "unlockGrowthPoolTokenSupply()", +"4ba0dd3c": "BotFarmer()", +"4ba1f098": "acceptRequest(uint256)", +"4ba20050": "getProduct()", +"4ba2363a": "pot()", +"4ba26466": "TPP2018TOKEN()", +"4ba2ab8a": "RockPaperScissorsAdvanced()", +"4ba2d5ff": "setThreePowerAges(uint256,uint256,uint256,uint256,uint256,uint256)", +"4ba336e5": "calculatePoolCut(uint256)", +"4ba4079a": "enableSwitch(bytes32)", +"4ba4c16b": "guess(uint8)", +"4ba4d784": "getMinutes(uint256)", +"4ba5b7b3": "crowdsaleRefund()", +"4ba6e72e": "advisoryTotalSupply()", +"4ba71f3c": "OxToken(address)", +"4ba79dfe": "removeAddress(address)", +"4ba8fde0": "_computeIncentiveCut(uint256,uint256)", +"4ba90201": "setFinishPreICO(uint256)", +"4ba9bb67": "arr(address,address,uint256)", +"4ba9fb71": "closeAskOrder()", +"4baa39be": "editBet(uint256,uint256,uint256)", +"4baa8160": "triggerAttack(uint32,uint128)", +"4baa9dc7": "addCashback(string,address,uint256[],uint256[])", +"4baaab80": "MyToken(string,string,uint256,uint256,address,address)", +"4bab0236": "wercoin()", +"4bad0881": "P4WDToken()", +"4bad294d": "asFunc(uint256)", +"4bad3327": "_mul(uint256,uint256)", +"4bae2ef1": "referrerBonus()", +"4bae6659": "fixedDeposit(uint256)", +"4baf4a76": "addToWhiteListMultiple(address[],address[])", +"4baf7a30": "TypesToBytes()", +"4bafa2a4": "totalMIT()", +"4bafa437": "setSECOND_STEP_MULTIPLIER(uint16)", +"4baffdc6": "_withdrawHoldVault(uint256)", +"4bb017a1": "destroySalesManager(address)", +"4bb07665": "whitelistUser(address,uint128)", +"4bb13055": "returnAllAvailableFunds()", +"4bb13e63": "setTripleRoomMin(uint256)", +"4bb22b5a": "execReturnValue(uint256)", +"4bb24399": "survive(address,address,uint256)", +"4bb278f3": "finalize()", +"4bb2e417": "SokToken()", +"4bb32e8c": "setDNoEditors(bytes32)", +"4bb37790": "restrictionExpiraton()", +"4bb4b260": "cashAllOut()", +"4bb593b2": "updateUser(address,string,uint256,uint256,uint256,string,bool)", +"4bb6e766": "checkTransferAllowed(address,address)", +"4bb72dea": "setPriceStep4(uint256)", +"4bb77d9d": "updateRates(uint256[])", +"4bb8596e": "managerSet()", +"4bb89c4d": "sendBounty()", +"4bb9962f": "HexelErc20Token(string,string,uint256)", +"4bba32fb": "round3StartTime()", +"4bba38b8": "getRef(address,address)", +"4bba863e": "getEthOfferor(uint256)", +"4bba8a58": "RepostiX(address,address)", +"4bbaa946": "getAllArea()", +"4bbb216c": "_target(address)", +"4bbb58b2": "setVirusInfo(uint256,uint256)", +"4bbbe0cc": "exporter()", +"4bbc142c": "allowOwnership(address)", +"4bbc2a4a": "changebank(address)", +"4bbcc1bc": "payoutSelf(address)", +"4bbcd6e8": "buyPresaleTokens(address)", +"4bbd3061": "DateCreateToken()", +"4bbf2c69": "excludeInvestor(address)", +"4bbf3a7a": "swapToken(uint256)", +"4bc091a3": "getCrowdsaleStartAndEndTimes()", +"4bc18a64": "deleteLock(address,uint8)", +"4bc1aa42": "VESTING_ADVISOR_CLIFF()", +"4bc24ec5": "right61(uint256)", +"4bc2a657": "setVoter(address)", +"4bc32ea2": "getBidCountForAuction(uint256)", +"4bc36600": "reorganizeMembers()", +"4bc3b153": "REWARD_FORWARD_POSITION()", +"4bc3df81": "BuyBooster(uint256)", +"4bc4549c": "todaySold()", +"4bc4d2ba": "KIN_PER_WEI()", +"4bc4e892": "startNextEra(bytes32)", +"4bc53249": "toB32(uint256,bytes,uint256,address)", +"4bc57a7c": "Medis()", +"4bc5d101": "CreatorWithdraw(uint256)", +"4bc70b1e": "withdrawFunds(uint16)", +"4bc8c477": "VirtualRealEstate()", +"4bc935d7": "verifyProof(bytes32[],bytes32,bytes32)", +"4bc9fdc2": "calcMaxWithdraw()", +"4bca4626": "ethWeiRaised()", +"4bca5cc0": "_setAdmin(address,bool)", +"4bca7f95": "NigeriaNairaToken()", +"4bca893d": "Count(uint256,uint256)", +"4bcb776f": "sliceIndexThrow()", +"4bcbcd89": "getEngineerLv1(address)", +"4bcd245d": "gameStatusSet(bool)", +"4bce2e9b": "totalEnjSold()", +"4bce79a1": "getAllSocialAccounts(bytes32)", +"4bcf244b": "ECRecoverWrapperF(bytes32,uint8,bytes32,bytes32)", +"4bcf74b2": "AccountMinterAdded(address,address)", +"4bcf8645": "returnFundsToClient()", +"4bd09c2a": "distributeTokens(address[],uint256[])", +"4bd1c253": "ChipExists(uint32)", +"4bd21127": "setAdminLevel(address,uint8)", +"4bd22521": "Electricity(string,string)", +"4bd22766": "refundETH(address,uint256)", +"4bd3a225": "setMultiplePreSalesSpecialUsers(address[],uint256)", +"4bd3af72": "sellGolds()", +"4bd3b4c6": "allowAuditor(address)", +"4bd4d93a": "transferFromWithMsg(address,address,uint256,string)", +"4bd4ddb9": "testThrow_invalidZeroValue1()", +"4bd4e770": "CheckSign(string,string)", +"4bd50dcf": "sendFromContract(address,uint256)", +"4bd544e8": "isEligibleToPlay(address)", +"4bd54f04": "dynamic()", +"4bd5610d": "jsonCat(string,string,int256)", +"4bd58c92": "LogBuyForFiat(address,uint256)", +"4bd67ced": "get_last_asset_document(bytes32)", +"4bd70ea3": "testFailGetUnset()", +"4bd7730b": "Senpona(uint256,string,uint8,string)", +"4bd79ac1": "lastCalculationRewardTime()", +"4bd889b4": "removePersonalLock(address)", +"4bd8ae6f": "endCoinFlip(bytes32,bytes32,bytes32)", +"4bd9d10e": "backOut()", +"4bd9d76c": "payUnderwriter()", +"4bda2ad0": "addNote(bytes20,string)", +"4bda3f2b": "test_insert_findWithHintPrevUpdateTail()", +"4bda87b5": "GCHToken(string,string,uint8,uint256)", +"4bdb7369": "hasBoughtEgg(address)", +"4bdbb944": "GodviewChain(uint256,string,uint8,string)", +"4bdbea2f": "latestBalanceCheck(address)", +"4bdc44ae": "setNote(uint256,bytes20,string)", +"4bdc4ffe": "ProposalTallied(uint256,uint256,uint256,bool)", +"4bdd6a8e": "KPOPIO_CONTRACT_ADDRESS()", +"4bde38c8": "platform()", +"4bdec44a": "VotingRightsGranted(address,uint256)", +"4bdf1b0e": "receiveApproval(address,uint256)", +"4bdf6667": "IsGenesisAddress(address)", +"4bdf7e8b": "_updateExperience(address)", +"4bdfa061": "postGenesisSales(bytes32,uint256,uint256)", +"4bdfa999": "Given(uint256,address)", +"4bdfbb75": "isCanvasFinished(uint32)", +"4be02f32": "getPlayerWithdrawal(uint256,uint256)", +"4be04fd9": "getMyLastScore()", +"4be185f0": "editionOf(uint256)", +"4be36323": "bonusRoundId_()", +"4be366d5": "purch(address,address,uint256)", +"4be39f2f": "FEED2()", +"4be422ae": "logOut()", +"4be42c08": "updateRewardAmount(bytes32,bytes32,uint256)", +"4be4343d": "InterfaceApp(address,address)", +"4be5739e": "PUBLIC_SALE_LIMIT()", +"4be62668": "MainSaleDistributed()", +"4be6c20a": "Error(uint8,address,address)", +"4be7183a": "init(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4be7ced7": "withdraw_team_fund(address)", +"4be860eb": "getMinGas()", +"4be9b992": "THRESHOLD3()", +"4be9d332": "jsonCat(string,string,string)", +"4bea4df7": "addLeaderboard(string,uint256)", +"4beb031b": "numBallots()", +"4beb536e": "allWagered()", +"4beb9e32": "approveByAddress(address)", +"4bebbf14": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4bebdab7": "uintArrayToString(uint256[])", +"4bec70a8": "setAffirmationsSigned(bytes32,bool)", +"4bec8335": "changeSafeguardStatus()", +"4becfd56": "getCurrentGameInitialMinBetSize()", +"4bed33b8": "SHARE_PURCHASERS()", +"4bed6c23": "donationAmount()", +"4bed81c8": "getWalletUser(uint152)", +"4beda18b": "BILLION()", +"4bee09e1": "changeTicket(address)", +"4bef5e51": "assetRegistrant(bytes32,int256)", +"4bef6de9": "determinePrize(uint256)", +"4bef71ac": "changeColorTeal()", +"4befc326": "temperatureMax()", +"4bf003fa": "After(uint256,bytes32)", +"4bf02421": "calculateAttributeTotals(uint256)", +"4bf0d331": "canDeposit(address)", +"4bf1b68d": "setTokenSupplier(address)", +"4bf1e60a": "newDev(address)", +"4bf2c7c9": "setBurnFee(uint256)", +"4bf2d314": "setAdvisoryPool(address)", +"4bf365df": "mintable()", +"4bf49313": "requestPayment(uint256,uint256,string,address)", +"4bf4e421": "client_address()", +"4bf5ac36": "saleAgent2()", +"4bf69206": "stakeFor(address)", +"4bf79cd9": "OutCloud(address,address)", +"4bf80d39": "giveConsent()", +"4bf899a3": "buyPosition(address,uint256)", +"4bf8e7a2": "getPriceInPastAuction(address,address,uint256)", +"4bf9407f": "changeRecipientAddress(address)", +"4bf96e60": "nextPurchasableBlocknumber()", +"4bfa0d11": "TDEEndDate()", +"4bfa798a": "getWarlordChestAvailable()", +"4bfad14d": "WinnerPicked(uint8,address,uint16)", +"4bfaf2e8": "getPendingVersionTimestamp()", +"4bfbe5df": "eventDate()", +"4bfc4782": "change_a(address)", +"4bfde393": "myWinShare()", +"4bfe2779": "setETHRate(uint256)", +"4bfe642d": "proWallet()", +"4bff1b95": "STARTING_KEBAB()", +"4bff5009": "getUserByName(string)", +"4bff8e51": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4bffc5e4": "allowance(address,uint256,uint256)", +"4c0019c3": "logDisputeCrowdsourcerCompleted(address,address,address)", +"4c007b35": "BigerToken()", +"4c0348ee": "nInvalidatedHashes()", +"4c04f7f2": "addTranslatorContent(address)", +"4c05a636": "Registrar(bytes32,uint256)", +"4c05b40e": "createShortId(bytes32,bytes32)", +"4c05df98": "startEarlyBird()", +"4c062c81": "moveNapkinsTo(uint256,address)", +"4c07fb4f": "editAddressDescription(address,string)", +"4c081138": "assign(uint256)", +"4c097cb4": "trigger(bytes32)", +"4c0999c7": "bytes32ToBytes(bytes32)", +"4c0a6532": "lrcTokenAddress()", +"4c0aac9a": "WithdrawFunds()", +"4c0b1c90": "getMarketer()", +"4c0b2973": "mfrOf(bytes32)", +"4c0bcfe5": "getTransferableBalance(address)", +"4c0bd3ef": "getLLV_edit_16()", +"4c0c0ac2": "rewardsAllocation()", +"4c0ddea8": "decodeTokenImbalanceData(uint256)", +"4c0e207a": "__outputCallback(uint256)", +"4c0e9e6a": "acquisitionsWallet()", +"4c0eceb5": "plusOnePonzi()", +"4c0ee2e1": "unPausePriceRaise()", +"4c0eed51": "addMarketMaker(address,address)", +"4c10d0a5": "addFrostTokensMulti(address[],uint256[],uint256[])", +"4c123019": "tokenFallback(address,address,uint256,bytes)", +"4c125e79": "cancel(uint64)", +"4c12b33f": "burning()", +"4c12d8b9": "recipientETH(address)", +"4c12f8bb": "creditCEO()", +"4c13017e": "Transfer(bytes32,address,uint256)", +"4c1334a8": "GoodTo(uint256,string,string)", +"4c1344b7": "isGuilty(address)", +"4c136ea8": "totalEDUSAllocated()", +"4c13fbb2": "ImageToken()", +"4c146f38": "getFrontEndTokenBalanceOf(address)", +"4c14743b": "UnlockedBalanceOf(address)", +"4c148efb": "CollectPayment(address,address,uint256)", +"4c14f334": "getCouponBonus(string)", +"4c15469c": "tresholds()", +"4c1674e5": "descOf(uint256)", +"4c167a6e": "approvePreSigned(bytes,address,uint256,uint256)", +"4c1736a0": "subFrozen(address,uint256,uint256,bool)", +"4c174ef0": "isWitness(address,address)", +"4c176b21": "WALLET_SALE()", +"4c17b322": "performRead2()", +"4c182a95": "doDeveloperGrant()", +"4c18e57e": "PositiveWhuffiesSent(address,address,uint256,string)", +"4c18e960": "allowRecurringBilling(uint256,uint256,uint256,uint256)", +"4c19a199": "openGameResult(uint256,uint256,uint256,string)", +"4c19dd1c": "VicDemToken()", +"4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", +"4c1b64cb": "deleteAccount(address)", +"4c1b8ffd": "voteCost()", +"4c1bbef8": "claimerKey()", +"4c1ccadf": "SmartexInvoice(address,address)", +"4c1d1fde": "withdrawTokens(address,uint256,uint256)", +"4c1d79ee": "setSalePeriod(string)", +"4c1d9d48": "tokenIndexById(uint256)", +"4c1e4169": "BIZDEV_WALLET()", +"4c1f20ec": "CEO_TEAM()", +"4c1f524f": "convertToMiniTtc(uint256)", +"4c1f7635": "getAccountRest(address)", +"4c1f85ae": "updateHydroMap(address,uint256,uint256)", +"4c1fbde8": "getPlayerColor(uint256,address)", +"4c20179e": "devAllocation()", +"4c2067c7": "expired()", +"4c207ac8": "setTraps(uint256,uint16,bytes)", +"4c21eb07": "put(string)", +"4c21fa45": "getNoteByIndex(uint256)", +"4c2233a5": "withdrawAll(uint256,address)", +"4c228656": "advisorsAllocationTokenSend(address,uint256)", +"4c22a8d1": "kvcAdd(uint256,uint256)", +"4c22b792": "calc_wei_rewards(uint256,uint256,uint256)", +"4c22c119": "isUser()", +"4c2324bb": "toBytes(uint256[])", +"4c23ba50": "removePeer(address)", +"4c24d4dd": "isPoliceNode()", +"4c25162a": "Babatoken()", +"4c2516de": "swapToken(uint256,address)", +"4c25727b": "viewPollData(uint8)", +"4c258eb1": "getQtyFilledOrCancelledFromOrder(bytes32)", +"4c25deb5": "USER_GROWTH_TOKENS_RESERVED()", +"4c26064b": "MVGcoin(uint256,string,string)", +"4c266e11": "setExchangeGroup(address,uint256)", +"4c26aaa2": "TokenExchange()", +"4c26b6eb": "total_buy()", +"4c281603": "getPlayerMax(uint256)", +"4c28a043": "adminGetFeeDial()", +"4c294188": "customer_tickets(address,uint256)", +"4c2a664b": "purchaseNotes(uint256)", +"4c2a799f": "checkFileProof(bytes32,bytes32[10],uint256[4],bytes32[],uint256)", +"4c2bc9a9": "assertEq26(bytes26,bytes26)", +"4c2bd226": "getDescriptionHash(address)", +"4c2d0378": "getAllTransactionIds()", +"4c2d71b3": "setConfigAddress(bytes32,address)", +"4c2d8649": "transferComplete(address,uint256,bytes)", +"4c2db6d8": "buyCoin(uint16)", +"4c2f04a4": "AddMessage(address,uint256,string)", +"4c2fac53": "requireFunction()", +"4c2fc8b2": "acceptProposedMilestones(bytes32)", +"4c2fe456": "right94(uint256)", +"4c2ff0ae": "getLLV_edit_31()", +"4c3052de": "submissionGasPriceLimit()", +"4c316f70": "mineCoins(uint256)", +"4c31a0ca": "mintFoundersRewards(address,int256)", +"4c31df50": "nextroundsolsforhire()", +"4c3221e1": "complexityForBtcAddressPrefix(bytes)", +"4c32a444": "_onCanvasCreated(uint256)", +"4c330471": "getReferralBalance()", +"4c33fe94": "cancel(address)", +"4c34c8de": "USDCToken()", +"4c34d7e9": "UNITED_NATIONS_FUND()", +"4c352323": "getNewVoting(uint256,bytes32[],address[],uint256[])", +"4c364ceb": "createAccessory(uint8)", +"4c36c36e": "resolveBet(uint256)", +"4c36cf16": "addRoundPrice(uint256,uint256,uint256,address[])", +"4c37077f": "chargeBuyer(uint256,address,uint256,uint256)", +"4c381350": "meteredPrice(uint256)", +"4c382d99": "terminateEmployee(address,uint32,uint8)", +"4c38661d": "lastPing(address)", +"4c387d82": "NSCToken()", +"4c38c366": "reLoadXaddr(uint256)", +"4c3997d4": "cancelBuyAuction(uint256,address)", +"4c3a00cb": "totalTradeRecords()", +"4c3a1a1a": "returnUserGrowthPoolTokens(address,uint256)", +"4c3a6ae0": "isMultiSigWallet()", +"4c3a9675": "ManagerProxyTargetMockV2(address)", +"4c3acb86": "debug(string,string)", +"4c3b67b4": "withdraw_for(address)", +"4c3ba268": "getBySemanticVersion(uint16[3])", +"4c3bf0b5": "changeInitialCost(uint256)", +"4c3d1f00": "EthDailyLimitChange(uint256)", +"4c3dff01": "InitialBasicBalance()", +"4c3ec50b": "FarziToken()", +"4c3eea9e": "generalLog(uint256)", +"4c3ef6dc": "minimumTokenThreshold()", +"4c3f333f": "Kalypso()", +"4c3f8ec0": "Tier_Wildcat_Registration()", +"4c409b80": "ChangeWallet(address,address)", +"4c413139": "minutesToPost()", +"4c418879": "getMyDino()", +"4c41a6c7": "blockThreshold()", +"4c41bf9d": "getOnBurnTargetValue()", +"4c4316c7": "donate(uint64,uint64,address,uint256)", +"4c433843": "parityOwner()", +"4c439436": "getTicketsAtAdress(address,address)", +"4c44d53f": "test_fourInvalidEqBytes32Message()", +"4c45c7ec": "setPhase(uint8,uint256,uint256,uint256,uint256,uint256)", +"4c466d37": "signer(bytes)", +"4c46e52c": "trancheOneBalanceOf(address)", +"4c46fb73": "stageCaps(uint256)", +"4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", +"4c4766e8": "KittenRegistry()", +"4c478b62": "ERC827TokenMock(address,uint256)", +"4c47e9ee": "setLockedConfig(address[],uint256[],uint256[])", +"4c480c2a": "ownerCandidat()", +"4c4870c6": "checkGoal()", +"4c488dac": "getChannelValidUntil(bytes)", +"4c49515d": "presaleTokensIssued()", +"4c4a386f": "refundEnabled()", +"4c4a4c67": "assertEq2(bytes2,bytes2)", +"4c4a9761": "tokenRate4()", +"4c4aea87": "getReleaseData(bytes32)", +"4c4bf936": "landData(int256,int256)", +"4c4c23dd": "upgradeGreatCoin(address)", +"4c4c447e": "cancelBattle(uint256)", +"4c4cb69e": "INVEST_AMOUNT()", +"4c4cea5a": "completeAt()", +"4c4cfc3b": "tokensForEcosystem()", +"4c4d07e7": "isBouncer(address)", +"4c4d460e": "LogCampaignCreated(address)", +"4c4dc6e0": "docCount()", +"4c4deecb": "__callback(uint256,string)", +"4c4e03f2": "_getExtraParam(bytes)", +"4c4e829c": "TransactionRevoked(uint256)", +"4c4efef7": "totalCLNcustodian()", +"4c4f1386": "WartecToken()", +"4c4fa89a": "getChildBranch(bytes32)", +"4c50ea27": "RHOC(uint256,address)", +"4c515fb5": "TEAM_VESTING_CLIFF()", +"4c51b021": "substract_individual_shares(uint256)", +"4c524be4": "selectWinner(uint256)", +"4c53adb0": "blackFridayEndBlock()", +"4c54cc1d": "managerETHaddress()", +"4c56e992": "refillContract()", +"4c574afe": "unblockSecondStake()", +"4c575fcc": "numberOfRawEarlyPurchases()", +"4c57fc28": "setTokenMintFeeReceiver(address,address,address,address)", +"4c5802c1": "getPhaseAddress()", +"4c585ce4": "approveMultipleUsers(address[])", +"4c5879cf": "WidinShares()", +"4c58994c": "TrypCrowdsale()", +"4c594c1e": "limitDateCrowdWave3()", +"4c59b47c": "EthereumLottery(address,address)", +"4c59f021": "CakCrowdsale(uint256,uint256,uint256,address)", +"4c5a2044": "licenseCostDenominator()", +"4c5a628c": "renounceWhitelistAdmin()", +"4c5a82cb": "reportTemperature(int8[],uint32[])", +"4c5a94fe": "_removeToken(address,uint256)", +"4c5b632a": "addcoin(string,string)", +"4c5be574": "getOdds()", +"4c5cbe9a": "getBalancesForTeam(address)", +"4c5d6d93": "totalCrowdSale()", +"4c5df57a": "createLoan(address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"4c5df737": "addCar(string,string,string,uint16,string,address)", +"4c5f338b": "CheckStudentofCourse(uint256)", +"4c5f97b6": "PayThrone()", +"4c610ba4": "totalRewardThisYear()", +"4c611268": "balanceOfUnclaimedCookie(address)", +"4c6226fc": "oraclizeFee()", +"4c62a644": "withdrawComission()", +"4c64384c": "maxPrivateSale()", +"4c64cf92": "mint_time_locked_token(address,uint256)", +"4c65b2b3": "ethOwner()", +"4c65c62e": "AgentContracteGalaxy(address,address,address,uint256,uint256)", +"4c661a2c": "DaoOwnershipTransferred(address,address)", +"4c66326d": "deregisterCallback(address)", +"4c6686d8": "CONFIG_FEES()", +"4c66bcc1": "WorldWideLoveToken()", +"4c67567a": "firstLockAmount()", +"4c676725": "fundTeamCompany()", +"4c68df67": "totalReserve()", +"4c69c00f": "setOracleAddress(address)", +"4c69ec93": "changeReceiver(address,address)", +"4c6a3334": "buyEthLootbox(address)", +"4c6adb31": "firstReporterCompensationCheck(address)", +"4c6b25b1": "results(bytes32)", +"4c6b6cad": "newProposal(string,bytes)", +"4c6c27a1": "judgeCustom(bytes32,bytes32,bytes32,uint256,bytes32,uint256[4],bytes32[10],uint256[4],bytes32[])", +"4c6c6a5c": "upgradeFrom(address,address,uint256)", +"4c6c8bc3": "distribute(address[],uint256[],bytes32[])", +"4c6d1d9e": "checkOutTag(string)", +"4c6d350b": "approveShutdown(uint256)", +"4c6d8aac": "hasParameters()", +"4c6e4453": "EcoLend()", +"4c6e5926": "send_to_side_chain(uint256,address,uint256)", +"4c6ebbbe": "maxIcoTokenLimit()", +"4c6fc20f": "setDisbursingAddr(address)", +"4c703ccd": "FirstERC20TestToken()", +"4c70b6b2": "deList(address)", +"4c714ed4": "DescriptionChanged(string,string)", +"4c7241f8": "Potentl()", +"4c738909": "getMyBalance()", +"4c73eef6": "card_black_minamount()", +"4c743c45": "FCTOKEN()", +"4c750bca": "bountyFunds(address,uint256)", +"4c75dc8f": "EFOcallBack(string)", +"4c75fbca": "getThirdAddressBalance()", +"4c76318e": "award(bytes32)", +"4c77a28d": "AppleCoin()", +"4c77c0e2": "period2Numerator()", +"4c77e5ba": "getAddressValue(bytes32)", +"4c780596": "UpgradeSpace(uint8,uint16)", +"4c783bf5": "isControllable()", +"4c78529e": "setOfficialUrl(string)", +"4c78b276": "getShare(address,uint256)", +"4c7940c5": "getWithFrozenStockBalance(address,address,uint256)", +"4c79afe0": "EventBuyShip(address,uint32,uint32)", +"4c7a0271": "buyMiner(uint256[8])", +"4c7a2254": "checkMyWithdraw()", +"4c7a5c0f": "ArtifactCoin(address)", +"4c7ab28d": "setMaxToSell(uint256)", +"4c7ae3ac": "getNameFromKoikeToken()", +"4c7b18fd": "ratioUpdateTime()", +"4c7b8fba": "contributionHashes(uint256)", +"4c7c3ca1": "KryptopyCrowdsaleMock(uint256,uint256,uint256,uint256,uint256,address)", +"4c7c71fe": "startTimes()", +"4c7ce18a": "withdrawReturns()", +"4c7cfd9b": "MarketboardListingPriceChanged(uint256,uint256)", +"4c7d3e3f": "icoIsClosed()", +"4c7d7d3f": "standardToken()", +"4c7e6bab": "tokensPerCentsDayOne()", +"4c7f0bdd": "isBackend(address)", +"4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", +"4c7fa728": "getPlayerLeftDividend(address)", +"4c803feb": "fib1(uint256)", +"4c808da8": "StageUpdated(string,string)", +"4c80b03b": "minTransAmount()", +"4c80c937": "getEpochData(uint256,uint256)", +"4c80f5c1": "minimumAmountToParticipate()", +"4c813d6d": "sendItDv(string)", +"4c81a1db": "addressPayableFunc(address,address)", +"4c81c4d7": "startStage2Time()", +"4c81e13a": "incentiveDistributionRoundDenominator()", +"4c81e48b": "testToUint()", +"4c8316a6": "showTokensStaked()", +"4c833532": "resumeTransfer()", +"4c839beb": "getContributionTokens(address)", +"4c840214": "getBackToken(address,address,uint256)", +"4c841e5d": "_setBlacklistedUser(address)", +"4c85a8f3": "isAllowedToMint(address,address)", +"4c85b425": "buyShares(address)", +"4c85d2e6": "addImmigrationOfCountry(address,uint256)", +"4c86c2e5": "setPortUpdate(uint16)", +"4c86e97b": "bonusTokensLeft()", +"4c873c48": "tokenSetup(address,address,address)", +"4c87effd": "delete(bytes32)", +"4c88bc26": "YEAR_TWO_SUPPLY()", +"4c899118": "getProposalFromID(bytes32,uint256)", +"4c89c4c7": "getHash(bytes10,uint8)", +"4c8b16f4": "setTimeStep(uint256)", +"4c8b8ca7": "distroyBuyerToken(uint256)", +"4c8bae93": "_isTradeable(uint256)", +"4c8c121e": "getGameHash(address,uint256)", +"4c8cab79": "largestStake()", +"4c8cc20b": "toContentID(address,string,string,address,uint256)", +"4c8d1e42": "DockCrowdsale(uint256,address,address)", +"4c8f3562": "computeCooldownSeconds(uint16,uint16)", +"4c8f4810": "buyMCT(address,uint256)", +"4c8fe526": "next()", +"4c8fea7d": "_convertSgnToSga(uint256)", +"4c90aaeb": "randomize(bytes32)", +"4c9151e6": "TransferStarted(address,address,uint256[],uint256)", +"4c922a9f": "changeColorPurple()", +"4c9297fa": "scheduleStart(uint256)", +"4c93505f": "setRevoke(bool)", +"4c9362aa": "addActiveUserListArr(address)", +"4c93c1a6": "GetUpTickPrice(uint256)", +"4c9478ce": "_yearThreeClaimed()", +"4c947c86": "getInitInputDataBytes(address,address,address,address)", +"4c94ac6a": "clearMilestones()", +"4c9599f2": "validityDate()", +"4c95baf3": "compoundingFreq()", +"4c95ca9c": "setRatePreICO(uint256)", +"4c95cb98": "OracleBase()", +"4c966822": "winnerWithdrawal()", +"4c96a389": "deploy(address)", +"4c96f0cc": "transferAllTokens()", +"4c96f281": "getAllPublishers()", +"4c97057a": "LogWinner(string)", +"4c970b2f": "foo(int256)", +"4c977972": "Soft_Cap()", +"4c97c836": "upgradeConstitution(uint256)", +"4c982872": "ElextroCoin()", +"4c985dfb": "newTokens(address,uint256)", +"4c98aec9": "CASHX()", +"4c990cc7": "startAirdrop(address[],uint256[])", +"4c9b30b4": "allow(bytes8)", +"4c9b60dc": "changeUserEthAddress(address,address)", +"4c9b760d": "changeMaxContribution(address,uint256)", +"4c9e2779": "balancesLocked2Y()", +"4c9e502e": "totalLoanAmount()", +"4c9ed763": "requestTokensBack()", +"4c9f166d": "bettingAllowed()", +"4c9f2bfc": "SOBU()", +"4c9f45eb": "repossessionBountyPerHundred()", +"4c9f66c7": "feePot()", +"4ca0a305": "GlobalIdolCoinToken()", +"4ca14270": "AddressChanged(string,address,address)", +"4ca15352": "airDropCount_()", +"4ca168cf": "register(bytes,uint256,address,string,uint256)", +"4ca18ebd": "reject(uint256,string,uint256)", +"4ca1c417": "isValidNameLength(string)", +"4ca1fad8": "addRequest(uint256)", +"4ca3a111": "getWeiPriceMicroKeys()", +"4ca3e9b8": "getProjectAddress(uint256)", +"4ca40518": "ReBornEnergyCoin(uint256,string,uint8,string)", +"4ca43f41": "transferAny(address[],uint256)", +"4ca50f59": "sellsTokens()", +"4ca5558c": "AllCaptcha()", +"4ca63a84": "TimeLimitedStoppable()", +"4ca64b3a": "bulkTransfer(address[],uint256)", +"4ca6ba2f": "AporooToken(uint256,string,uint8,string)", +"4ca6d7e6": "tier2Time()", +"4ca6fcfc": "registerVIP(address,address,uint256)", +"4ca7fbd0": "updateTokenPriceWeekTwo()", +"4ca82b52": "finalLoos()", +"4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", +"4ca8c1e8": "isInMaintainance()", +"4ca92e08": "deductExtraBalance(address,uint256)", +"4ca98997": "getAmount(uint256,uint256)", +"4ca9b258": "contributorRefund()", +"4caa1a09": "_calculatePaymentToOwner(uint256)", +"4caa7f37": "withdrawSnowflakeBalanceFromVia(string,address,string,uint256,bytes,bytes)", +"4caaf45f": "changeSigningAddress(address)", +"4cad12e0": "orders_sell_price(address)", +"4cad3438": "setRateFinalStage1(uint256)", +"4cad42d3": "testWager()", +"4cae5f99": "loanRepaymentNotification(uint256)", +"4caeebd0": "STAGE_FOUR_TIME_END()", +"4caf6231": "COLOR_WHITE()", +"4cb0c7a1": "getOrdersOfVendor(address,uint256,uint256,bool)", +"4cb10ed3": "hasStartTimePassed(bytes32)", +"4cb44f8d": "getConfigEntryAddr(bytes32)", +"4cb532db": "socWarefareAddr()", +"4cb5465f": "transferWithLock(address,bytes32,uint256,uint256)", +"4cb5a45d": "GSUMedal()", +"4cb5ef77": "closeVoteRevealPhaseIfAllowed(address,bytes32,bytes32)", +"4cb5f1c6": "totalsum()", +"4cb6bf73": "FZTToken(address)", +"4cb6d6af": "finalizeCrowdsale(address)", +"4cb6f4a5": "voteRequest(uint256)", +"4cb71b9b": "getAllReleaseHashes()", +"4cb79536": "presaleStartBlock()", +"4cb7da65": "abortMatch(uint256)", +"4cb7dd6f": "popLeader(address)", +"4cb84b9a": "getIcoCap()", +"4cb85312": "_addInvestor(address)", +"4cb85356": "BranchSender(uint256,bytes32)", +"4cb88ad8": "ABEToken()", +"4cb93ff8": "capTokenAmount()", +"4cba4ca4": "updateGene(uint256,bytes)", +"4cba5c6a": "setResults(uint256[4])", +"4cba67ce": "addAddressToAccountForUser(address,bytes,bytes,address,bytes32)", +"4cbabcdc": "invest(bool)", +"4cbac3d2": "calculatePurchasedTokens(uint256,uint256)", +"4cbb4a0a": "_removeTokenFromAllTokensEnumeration(uint256)", +"4cbb7532": "setBorrowAgreement(uint256,uint256,string,string)", +"4cbbb987": "DOSXToken()", +"4cbc07f2": "weisPerBigToken()", +"4cbc49ad": "claimRewardManually(address)", +"4cbc82cd": "getTrackByArtist(address,uint256)", +"4cbd2b74": "allowanceByLegacy(address,address)", +"4cbd7a26": "withdraw(address[],uint256[],bytes,bytes,bytes32)", +"4cbe02a5": "createAuthorDrawings(bytes32,bytes32,address,string)", +"4cbe552c": "myEntityStructs(uint256)", +"4cbee813": "logout(string)", +"4cbf3d4c": "getNumbersOfPick(uint256,uint8)", +"4cbf6ba4": "hasDNSRecords(bytes32,bytes32)", +"4cbf867d": "intervalSecs()", +"4cbfafd9": "DefaultReleaseDelayed()", +"4cbfbf47": "REAPER_INTREPID_MAX_CARGO()", +"4cc05a71": "withdrawCount()", +"4cc09eac": "tokenRatePre()", +"4cc0a885": "maxRevealSeconds()", +"4cc0ee3c": "modifyDescription(address,string)", +"4cc22528": "setRateForOrder(bytes32,uint256)", +"4cc22f9d": "getSaleEnd()", +"4cc2a4bb": "_preValidateTransfer(address,address,uint256)", +"4cc2b5d0": "addPolicy(bytes32,uint256,uint256,uint256,string)", +"4cc2c0fe": "getTotalFor(uint256,uint256)", +"4cc3a6b0": "ConvertQuote(uint256)", +"4cc45f50": "changeAddressQueen(address)", +"4cc47910": "oraclizeQueryIdsToBetIndices(bytes32)", +"4cc53838": "getSaleContractTargetEtherMin(address)", +"4cc60757": "getOperator(address,address)", +"4cc6083a": "totalTrading()", +"4cc62409": "EOSOwned()", +"4cc653c8": "calculateDividends_(uint256)", +"4cc682ee": "getPubKeyHash(bytes20,uint8)", +"4cc747c8": "unlistAllOpenProposals()", +"4cc78983": "setPreviousDungeoonId(uint32)", +"4cc7a88d": "sendLoveToken(uint64,string,string,string)", +"4cc82215": "remove(uint256)", +"4cc87328": "adminWithdrawMiscTokens(address,uint256)", +"4cc885d4": "right65(uint256)", +"4cc9f4e1": "lockTokenController()", +"4ccb5a33": "canClosePot(string)", +"4ccb908f": "auctionSuccessBonus()", +"4ccbd06b": "MIN_DEPARTURE_LIM()", +"4ccbe888": "getLongExtra()", +"4ccbf17b": "presaleAddressAmountHolder()", +"4ccc4c36": "getPendingOracleFor(address)", +"4ccc5da0": "sold(bytes32)", +"4cccb7ba": "unrestrictedWithdraw(uint128,address,uint256,uint128)", +"4ccd0e1e": "Flippitt(string,string,uint8,uint256,string)", +"4cce4d63": "addNewCompany(string,uint256,uint256,uint256,uint256)", +"4ccee9b6": "getAddr(bytes32)", +"4cceeccd": "setFee(uint32,address)", +"4ccef7e0": "averageSoldPrice()", +"4ccf05cd": "CompanyTokenPushed(address,uint256)", +"4ccf8a35": "TokenSupplied(address,uint256,uint256)", +"4cd06a5f": "iterateNext(uint256)", +"4cd08d03": "register(string,string,string)", +"4cd11943": "NewManualInvestor(address,uint256)", +"4cd18a83": "gimmeEtherr()", +"4cd217b7": "getPreEntranceTo()", +"4cd273d1": "tilePrice()", +"4cd280bc": "popClient()", +"4cd28aa6": "_queue(address,address)", +"4cd2b343": "RedBlueToken()", +"4cd36fb7": "Mine(address,uint256,uint256)", +"4cd3745d": "getRandomClassId(uint256)", +"4cd412d5": "transferEnabled()", +"4cd44519": "stageTokensBought(uint8)", +"4cd52207": "_claim(address,uint256,bool)", +"4cd5af91": "CrowdFundClosed(uint256)", +"4cd5d776": "FundingWithdrawn(address,uint256)", +"4cd6bd32": "withdraw(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"4cd7699a": "eventCardRangeMax()", +"4cd85837": "mintICOTokens(address,uint256,uint256)", +"4cd88b76": "initialize(string,string)", +"4cd995da": "registerCompany(address,string)", +"4cd9c3e4": "crowdsaleEndsAt()", +"4cdabb16": "MAX_PREMIUM()", +"4cdb48e4": "isValidNym(address)", +"4cdc6a73": "Marriage()", +"4cdc9549": "_isApprovedOrOwner(address,uint256)", +"4cdc9c63": "genesisBlock()", +"4cdcb334": "transferrers(address)", +"4cdd3002": "setNote(uint256,bytes32,bytes20,string,string)", +"4cdd3b43": "getScoreForName(string)", +"4cddae28": "recharge()", +"4cdfc605": "Refund_user()", +"4ce0032f": "TutorialToken(address)", +"4ce01d86": "totalBetValue()", +"4ce02a33": "overdraftCliff()", +"4ce053ab": "approveAndPayout(uint16)", +"4ce0ef95": "getStatus(address,uint256)", +"4ce11c52": "children(bytes32)", +"4ce149d7": "setCandyLandSale(address)", +"4ce14f8c": "FOMOCoin()", +"4ce18d6b": "getAmount(bytes)", +"4ce18ec3": "addInterval(uint256,uint256,uint256,bytes32)", +"4ce197f3": "GetTempStuffExpire(address,uint32)", +"4ce1e317": "TeamAndAdvisorsAllocation(address,uint256)", +"4ce309f8": "getElection(address,address,uint256)", +"4ce37426": "EtherOlympics()", +"4ce4f927": "getJackpot(uint256)", +"4ce51b92": "WithdrawSpecialEth(address,uint256)", +"4ce56c5d": "ethAvailable()", +"4ce61604": "InitializedTier(uint256,address)", +"4ce63074": "test_increaseBlockBy5000()", +"4ce6962c": "numPurchasers()", +"4ce6a521": "emitAdditionalTokens()", +"4ce6a74e": "testerNonReentrant()", +"4ce7033d": "LogWithdraw(address,uint256)", +"4ce71fac": "getRegionPurchasePixelPrice(uint256)", +"4ce75274": "setEnableSell(bool)", +"4ce99591": "Vegan()", +"4cea7af0": "MembershipChanged(address)", +"4ceab75e": "newIdTank()", +"4ceab858": "multiplex_add(address)", +"4ceaeb35": "PleasePayMe(uint256,uint256)", +"4ceb0173": "to(bytes32,bool)", +"4ceba015": "LogCollect(uint256)", +"4cec73b1": "checkClaimTokenByAddress(address)", +"4cecac6d": "requestReward()", +"4ced0a26": "SetData(string,string)", +"4ced4734": "isPreSale()", +"4cedf74e": "get_party1()", +"4cedfc02": "TornadoChain()", +"4cedfc0c": "activateWhitelist(bool)", +"4cee81cb": "Marriage(address,address,string,string)", +"4cef0cb9": "usdPerEthMax()", +"4cef0ff6": "approveMore(address,uint256)", +"4cef2221": "ZazToken()", +"4cef5a5c": "negligibleRateDiff()", +"4cf00716": "getCreateFeeTokenFeeWindowValue()", +"4cf045d5": "addSoftwareExecRecord(bytes32,bytes32,uint256,uint256)", +"4cf088d9": "staking()", +"4cf0afca": "changeWallet(address,uint8)", +"4cf1115d": "ethFee()", +"4cf125de": "Ledger()", +"4cf127bf": "modelSupply()", +"4cf178c6": "POWEROFTHREE()", +"4cf2010e": "addCar(uint256)", +"4cf21f5f": "CFNDToken()", +"4cf2c2a2": "Dexter()", +"4cf2e2dc": "GameStart()", +"4cf32de3": "getNumTransactions()", +"4cf33010": "purchaseShare(uint256)", +"4cf373e6": "addFortune(string)", +"4cf37429": "AMOCoinSale(address,address)", +"4cf43440": "Megaloh()", +"4cf439d8": "_addToPools(address)", +"4cf4a292": "getHouseEdge()", +"4cf50009": "genesisCreation()", +"4cf52fa2": "buyBulkPremiumCar(address,uint256[],address)", +"4cf5b6c7": "millWeiRate()", +"4cf61aba": "_canTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"4cf6475d": "getPlayerShipCount(address)", +"4cf76cca": "thirdDiscountPrice()", +"4cf78170": "allowedAddress()", +"4cf812ea": "rateRoundSeed()", +"4cf8b0f5": "BlipToken(string,string)", +"4cf8dce7": "balanceOfOre(address)", +"4cf91026": "isAirdropping()", +"4cf93599": "getPaidInfo(string)", +"4cf95c21": "shareholderIsToken()", +"4cf96509": "safeWithdrawalAll()", +"4cfb4c28": "roundProfit(address,uint256)", +"4cfc4d30": "VESTING_DURATION()", +"4cfd5a82": "phaseOneLimit()", +"4cfddcfb": "getMarketOrderCategory(uint256)", +"4cfe3e7f": "debitAccount(address,uint256)", +"4cfe4c69": "getProviderRateHistory(uint256,uint256,uint8)", +"4cfe50cb": "BAFCToken()", +"4cfe59a7": "simulateWithdrawalAmount(address,address)", +"4cfe62c7": "transferRole(string,address)", +"4cfea68a": "blocksPerDay()", +"4cfef220": "getSpankPoints(address,uint256)", +"4cff5d75": "setTokenAllocator(address)", +"4cff6ae5": "AltToken(address)", +"4cff7a82": "createDefaultGames()", +"4d003070": "timestamp(bytes32)", +"4d015fcc": "Pong()", +"4d0217b7": "firstSaleComplete()", +"4d023404": "removeIntermediary(address)", +"4d02438b": "getMaximumBetHome()", +"4d02a8fb": "judgeFakeToken(uint256)", +"4d047055": "monsterIdToNickname(uint256)", +"4d053af6": "removeAds(address)", +"4d056f6d": "coolDown()", +"4d057803": "TEAM_LOCK_TIME()", +"4d05a822": "JusticeTokenV2()", +"4d06068a": "airdropToken()", +"4d0633f6": "assignedAmountToCornerstoneInvestment()", +"4d07b23d": "buyPrice(uint8)", +"4d08e0b4": "mediaTokensName(address)", +"4d0a32db": "minAmount(address)", +"4d0a391c": "addPayment(uint256,uint256)", +"4d0a5dbd": "addPermission(address)", +"4d0ad141": "CAP_USD()", +"4d0b2a29": "NUM_TILES()", +"4d0c381a": "Token99(uint256,address)", +"4d0c5be4": "redemptionLocked(address)", +"4d0c69d9": "EnterSwap(uint256,uint256,bool,address)", +"4d0cac9d": "sendCancelValue(address,uint256,bool)", +"4d0d1cb9": "processTransfer(address,address,uint256,bytes)", +"4d0d35ff": "getPlayerAddr(uint256)", +"4d0d80a2": "_getRandom(uint32)", +"4d0de225": "getWorkerBalance(address)", +"4d0e8a5f": "MYEX()", +"4d126774": "validateWhitelisted(address)", +"4d1271e3": "VersionedToken(address)", +"4d129486": "max_shares_to_sell()", +"4d129fb5": "startPre()", +"4d12b695": "unbanUser(address)", +"4d12fca4": "exchanger()", +"4d130369": "interestPaid(address)", +"4d130e64": "_collectFee(address,address,uint256)", +"4d134f2f": "createAddresses(bytes32[],address[])", +"4d13507d": "releaseFund(address)", +"4d1387b4": "changeRatio(uint256,uint256)", +"4d13a583": "PrepaidTokensClaimedEvent(address,uint256,uint256,uint256)", +"4d13c565": "bVideoCost()", +"4d13d134": "publicAllocatingToken()", +"4d140467": "EARLY_CONTRIBUTOR_VESTING_CLIFF()", +"4d14c57e": "claimBasicResources()", +"4d14e344": "numberOfChoices()", +"4d15642a": "startMEAMission(uint256,uint256,uint8,uint256)", +"4d15d797": "_exists(int256,int256)", +"4d1636c3": "onSold(address,uint256,uint256)", +"4d16dd41": "communityUnvested()", +"4d17ed11": "LUVIToken()", +"4d17f7fc": "sta()", +"4d182bfc": "getEpisodeDataRandom(uint256,uint256,uint256)", +"4d1975b4": "gameCount()", +"4d199766": "WEI_CAP()", +"4d19cdf8": "DME()", +"4d1a08cd": "MIN_LIMIT()", +"4d1a9763": "T8CToken(address)", +"4d1b93b3": "allowedTransferWallet()", +"4d1bc2df": "expertThreshold()", +"4d1bd1fa": "product2_luckybuyTracker()", +"4d1bfe99": "BenefitGameToken()", +"4d1c43b2": "ETHUSDPRICE()", +"4d1c5f83": "EditMode()", +"4d1ed74b": "maxGuaranteedLimit()", +"4d1f8c31": "owner(uint64)", +"4d1f97ba": "LastResult(address,uint8,uint256)", +"4d1ff181": "setPaymentEnabled(bool)", +"4d207d9a": "identify(address)", +"4d20b992": "setLargeCapWhitelistParticipants(address[],uint256[])", +"4d20d4bc": "BET_TYPEHASH()", +"4d21a24c": "generateLockId()", +"4d22b9c8": "DMSContract()", +"4d22d1d1": "vestTime()", +"4d2301cc": "getEthBalance(address)", +"4d238c8e": "addValidator(address)", +"4d23aaa8": "foreignBuy(address,uint256,uint256)", +"4d242bbc": "adjustTotalSupplyCheckpoints()", +"4d253629": "updateChangeAttemptCount(address)", +"4d25cc91": "transfer_token(address,uint256)", +"4d268ddd": "payImporterBankForGoodsBought()", +"4d269617": "XENIACOIN()", +"4d27a548": "rICO(address,address)", +"4d28ca02": "addMultipleContracts(bytes32,bytes32,bytes32,bytes32,address[],bytes32)", +"4d298265": "isWhitelistedPresale(address)", +"4d2a16e6": "myTradeValue()", +"4d2a30c1": "customerDepositedEther()", +"4d2a99a5": "GVOptionProgram(address,address,address)", +"4d2b1444": "WAITING_TIME()", +"4d2c29a0": "tokenOfferingAddr()", +"4d2d0a3d": "token_totalSupply()", +"4d2d35bc": "TokenPartners(address,address,uint256)", +"4d2d3dfc": "_generateHash(bytes32,uint256,address,uint256)", +"4d2db81f": "alreadySold()", +"4d2e9d04": "ShowDepositInfo(address)", +"4d2ee8e7": "GetLoanInfo(uint256,bool)", +"4d2efe4e": "collectOwedDividends()", +"4d305073": "uintRound(uint256,uint256)", +"4d307e3f": "getCurrentReward(address)", +"4d30b6be": "balanceOf(address,bytes32)", +"4d314b5a": "ERC20MIST(uint256,string,string)", +"4d318b0e": "tallyVotes(uint256)", +"4d32a117": "documentsIds(uint256)", +"4d32ef8c": "hurifymint(address,uint256,uint256)", +"4d3314f4": "TotalFee()", +"4d33e6d7": "hasDisputeSolved(uint256)", +"4d341bbc": "findSubscriberIndex(address)", +"4d3465fd": "weicap()", +"4d34dce1": "AHS(uint256,bytes32,bytes32)", +"4d358a00": "PreSale(address,address)", +"4d366398": "runPeerBalance()", +"4d36dd87": "finalizeTransferChild(uint256)", +"4d37ec46": "__generateOrderHashes__(address[4],uint256[8])", +"4d380a0d": "revealBid(uint256,uint256,bytes32)", +"4d3820eb": "registerUser()", +"4d3830e5": "releaseFunds(uint16,address,address)", +"4d387d35": "lockAccount(address,address,uint256)", +"4d38f6c5": "signTruelove(bytes32,string,string)", +"4d3915e9": "testF3(uint256)", +"4d392341": "ICO_BONUS1_RATE()", +"4d392e49": "getSubjectById(uint256)", +"4d395384": "configString()", +"4d399cb3": "updateWhitelist(address,uint8)", +"4d39ed06": "initialFoundersAmount()", +"4d39f535": "transferFrom(uint40)", +"4d39fa7d": "getMultiplierAtTime(uint256)", +"4d3a01b1": "setLongAirdropPicker(address)", +"4d3a2f10": "lastReceivedMessage(address)", +"4d3b915e": "minTokenSale()", +"4d3bdb82": "KickcityToken()", +"4d3cd84e": "setCanAnyMint(bool,int256)", +"4d3ceef1": "freezeCheck(address,uint256)", +"4d3cf035": "tokens2ether(uint256)", +"4d3cfbcd": "NextStep(uint8)", +"4d3d096b": "isExist(string)", +"4d3d14f2": "calculateTransferFee(address,address,uint256)", +"4d3e7682": "DataSellToken()", +"4d3ec092": "LogReplaceToken(address,uint256)", +"4d3eff3c": "setICOSpec(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4d3f0a6e": "becomeRenown()", +"4d3fac53": "getRatingRange(uint256,uint256,uint256)", +"4d40ed9c": "setSanMaxFree(uint256)", +"4d40f03c": "SovietCoin()", +"4d414c18": "Victim()", +"4d41fee4": "logit()", +"4d425812": "getCountryCount()", +"4d428204": "getTransferTime()", +"4d4282e9": "bytes32IsEmpty(bytes32)", +"4d42b0e5": "getUserLogin(address)", +"4d42c7e4": "getTotalIndividualWeiAmount(address)", +"4d42c952": "destroyedToken()", +"4d42fc66": "gen0Profit()", +"4d437034": "getInvestedTokenBalance(address)", +"4d437a62": "TPCToken()", +"4d43bec9": "emitEvent(uint256)", +"4d4439fa": "ZipperMultisigFactory(address)", +"4d444fac": "isDepositAllowed()", +"4d4479a8": "FLC_address()", +"4d44f108": "checkProof(bytes32)", +"4d4549fb": "GDCNumber1()", +"4d4582a1": "submitChallenge(bytes32,bytes32)", +"4d461ed1": "completeSale()", +"4d46474a": "option10symbol()", +"4d474898": "mine(uint256)", +"4d474d63": "MAPT()", +"4d4765dc": "complete_buy_exchange()", +"4d47ae8c": "setPartyB(address)", +"4d47ce56": "seek(uint256,uint256,bool)", +"4d47feaa": "ShareholderDB(uint256)", +"4d480faa": "setMaxDelay(uint256,uint256)", +"4d486406": "addEmbassy(address)", +"4d492b50": "transferMulti(address[])", +"4d493f24": "maximumTokenIssue()", +"4d49451c": "candidateExchange()", +"4d4a919f": "bailout()", +"4d4aa77f": "getTicketDetails(int256,uint256,uint256,address)", +"4d4af36f": "setMins(uint256,uint256)", +"4d4b1a88": "addTokenTrust(address)", +"4d4b298e": "creditAccount(address)", +"4d4b3202": "getTrustedTransferSourceValue()", +"4d4ba1d7": "changeDivestFee(uint256)", +"4d4c277d": "MAINTENANCE_FEE_PERCENT()", +"4d4d2b1c": "hasVoted(address,address)", +"4d4eeaa8": "logoPng()", +"4d50169e": "distributionThresholds(uint256)", +"4d50d5f2": "firstPreSaleEndDate2()", +"4d51fad6": "Bittoq(uint256,string,uint8,string)", +"4d52a512": "getSoftCap()", +"4d536c03": "buySaleNonReferral(uint8)", +"4d536f9f": "validateNameExt(bytes)", +"4d536fe3": "doit()", +"4d53c30f": "t4tRaised()", +"4d547ada": "worker()", +"4d54dc96": "isNonlistedUser(address)", +"4d55a924": "KudosRouter()", +"4d561721": "etherandomSetNetwork()", +"4d562c82": "freezeProhibited()", +"4d563540": "HUN(uint256,string,uint8,string)", +"4d56a130": "BitfuryToken()", +"4d586512": "_rand(uint256,uint256)", +"4d589c5b": "curatorIDOf(address)", +"4d58e413": "pushDividendPaymentToAddresses(uint256,address[])", +"4d597b2d": "totalTokensCompany()", +"4d5a1173": "calculateMaximumBurnAmount(uint256,uint256,uint256)", +"4d5a225c": "ethCoin()", +"4d5ad11e": "getAnnualGrantsLength()", +"4d5b0081": "reward(address,address)", +"4d5b080c": "scheduleTransaction(uint256,address,uint256)", +"4d5b335d": "mintHeroAsset(address,uint256)", +"4d5b608b": "testTransfer(address)", +"4d5b85f1": "createLighthouse(uint256,uint256,string)", +"4d5c07aa": "CryptoSim()", +"4d5d528a": "FeibeiContract()", +"4d5de6ba": "stageThreeSupply()", +"4d5e58a4": "purchasedTokensRaised()", +"4d5e9a2a": "getInterestRatePunitory(uint256)", +"4d5eceac": "nextAssigneeIndex()", +"4d5f327c": "supportsToken()", +"4d5fc38a": "amountOfGames()", +"4d610837": "indPreSale()", +"4d61537f": "secretSigner()", +"4d620299": "postSale(address,bytes32,uint256)", +"4d622831": "getLast()", +"4d624906": "PriceChanged(address,uint256,uint256)", +"4d628c44": "setWagerWinner(uint256,address)", +"4d62a9da": "MindCoin()", +"4d62f83c": "_distributeAuctionTax(uint256,address)", +"4d655aff": "db()", +"4d65beb1": "getVipInfo(uint256)", +"4d66a3ab": "testtxorigin()", +"4d66d44d": "ArtToujourICO(uint256,uint256,uint256,uint256,uint256,address)", +"4d677d32": "Manager(address,address,address)", +"4d6804c2": "transferTokensFromVault(address,address,uint256)", +"4d68282f": "releaseFunds(uint256)", +"4d689543": "mmLibAddress()", +"4d6a26be": "tryOpenRoom(address,uint256,uint256,uint256)", +"4d6a304c": "GetLatestCheckpoint()", +"4d6a7d33": "collect(address,uint32[])", +"4d6a813a": "isCutieCore()", +"4d6aa2e5": "generateReferralAddress(address)", +"4d6aed53": "getIssued()", +"4d6b3d83": "Brave()", +"4d6bc04e": "totalPerTokenPayout()", +"4d6c3427": "REGULAR_TYPE_COUNT()", +"4d6c3b6b": "setCompte_4(string)", +"4d6f49b3": "updateChainlinkOracleWithENS()", +"4d6f58d5": "proveOwnership(bytes,int256)", +"4d70d1d7": "generateId(uint256)", +"4d712228": "Storesumdata(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint64)", +"4d71d6be": "finalizeDelegation()", +"4d720209": "withdrawDistributionCRL()", +"4d722c4c": "checkWinner(address)", +"4d729be4": "calculateFishermansFee()", +"4d730d51": "numOfPurchasedTokensOnEpBy(address)", +"4d73452e": "START_WEEK_3()", +"4d7439cb": "getBusiness(uint256)", +"4d7480ea": "_allowPublishSecret()", +"4d74d3b4": "setMetadataContractAddress(address)", +"4d754715": "burningEnabled()", +"4d7559a8": "totalGoldSupply()", +"4d7569ac": "TOKEN_SUPPLY_CROWD()", +"4d77551a": "eleventhTime()", +"4d782655": "confirmCertificate(uint256)", +"4d782cbc": "executeSellOrder()", +"4d78fdc6": "unblockAccount(address)", +"4d794cfc": "START_ETH_TO_CENTS()", +"4d79874e": "validateLandTakeover(address,uint256,uint256)", +"4d79ddb2": "getVotesForItemFromVoterIndex(uint256,uint256,uint256)", +"4d7a2052": "getTicketPrizeFromIndex(uint256)", +"4d7a7577": "DURATION_VIPPLACEMENT()", +"4d7ad1dd": "deleteProposal(bytes32,string)", +"4d7ad205": "gasRewardPercent()", +"4d7b8d2f": "DWBTICO(address,address,uint256,uint256,uint256,uint256)", +"4d7b9bd5": "checkBalance(address,uint256)", +"4d7ba587": "setDecider(address)", +"4d7bc8c9": "removeCompanion(address)", +"4d7c0192": "changeCanUpgrade(bool)", +"4d7c7485": "getActiveFlag(uint16)", +"4d7d003f": "dropCoinsSingle(address[],uint256)", +"4d7d13e1": "getUniqueIdOfPlayerByPlayerAndCountryID(uint256)", +"4d7d87b2": "prodTokens(address,uint256)", +"4d7d8a60": "marriageDate()", +"4d7d9a91": "transferCoadminship(address)", +"4d7dcfbd": "parseVarInt(bytes,uint256)", +"4d7e2a6a": "Token_Unlocked()", +"4d7e897f": "rollOne(address,uint8)", +"4d7ec628": "requestToken()", +"4d7ece70": "advisorVesting(address[],uint256[])", +"4d7edc15": "assignTokens(address,uint256)", +"4d7ee4ee": "changeGlobalOperator(address)", +"4d804e60": "WITHDRAWAL_TRIGGER_AMOUNT()", +"4d80bf14": "NewManager()", +"4d82f25c": "VestingTrustee(address)", +"4d831535": "allocatePVT_InvTokens(address[],uint256[])", +"4d83ffdd": "createUser(address,uint256,bytes32)", +"4d840bcc": "isWithdrawable()", +"4d843acd": "getSalaryTokensTotalAddress(uint256)", +"4d846a99": "getMin(uint128[])", +"4d846c8e": "getCurrentCandyAmount()", +"4d84ba37": "depositsAddress()", +"4d85006d": "Incredibles2RT()", +"4d853ee5": "founder()", +"4d8589c5": "getProofOfStakeRewardUpdateToken(address,address)", +"4d85b8d0": "checkEndOfChallenge()", +"4d86b498": "BucoTestCoin()", +"4d87a49b": "updateInvVault(uint256,uint256)", +"4d882c97": "EthPenis()", +"4d88a639": "getOrder(uint80)", +"4d88a8cf": "getExitBySlotId(uint64)", +"4d894d24": "getLevelByIndex(uint256)", +"4d8a666b": "EnterEntidadesdonaciones(address)", +"4d8a9310": "isCrowdsaleStopped()", +"4d8b7056": "Dd(address,address)", +"4d8bd784": "getGuestToken()", +"4d8c10a6": "AJCMToken()", +"4d8c3ea6": "getTxVoteDetails(bytes32)", +"4d8c61c1": "LogChangeTimestamp(address,uint256,uint256)", +"4d8caa7e": "setTokensPerWei(uint256)", +"4d8d9e92": "tokensPerSecond()", +"4d8dcc7a": "initDeposit(uint256)", +"4d8de4fc": "unbond(bytes32,uint256)", +"4d8e15f2": "KockToken()", +"4d8f00f4": "RatingsContract(address,address)", +"4d8fef1c": "produceWiner()", +"4d908a55": "InitiateCars()", +"4d909110": "EtherBank()", +"4d912393": "mintReservation(address[],uint256[])", +"4d918282": "addmoney(address,uint256,uint256)", +"4d91c096": "stakeCommence()", +"4d91d4f1": "incrementBasketsMinted(uint256,address)", +"4d9250c4": "TakeMyEther()", +"4d936889": "ConsentTemplate(string,uint256,string,string,string)", +"4d93d1db": "EventCreateAngel(address,uint64)", +"4d94994c": "lucky_number()", +"4d94cee7": "opetWallet()", +"4d9577af": "getFirstMilestoneStartsAt()", +"4d95a7a2": "tokensToRecieve(uint256)", +"4d95c76c": "activeCanvasCount()", +"4d964da6": "GBBCOIN(uint256,string,string)", +"4d96e062": "whenStakeCanBeReturned()", +"4d986c8f": "icoSalesSupply()", +"4d98a6ff": "createGroup(string,string,string,uint256,uint256,uint256,uint256,uint256,bool)", +"4d99055c": "getBonus(uint256,address,uint256)", +"4d9994e8": "setAccountNickname(string)", +"4d999756": "tokensPreICO()", +"4d9a3136": "findByName(string)", +"4d9a81d4": "IsDistribStarted()", +"4d9aa424": "crowdsaleEnd()", +"4d9b3735": "getFunds()", +"4d9b3d5d": "getbalance()", +"4d9b8fcf": "allowTransfer(address,bool)", +"4d9bcac4": "getProviderParameter(address,bytes32)", +"4d9c1bf3": "payTokenBatch(bytes32[],uint256[],address,address,bytes)", +"4d9e40af": "TOKEN_CREATORS_SUPPLY()", +"4d9e4e22": "Etheria()", +"4d9fb121": "Trade()", +"4d9fcee9": "getExportingAuthority()", +"4da07fe5": "getCardType(uint32)", +"4da0a4fc": "promoToken()", +"4da1397c": "durationOfLock()", +"4da1668d": "giftNFT(address,uint256,uint256)", +"4da1b25d": "weiFundingCap()", +"4da1e0b7": "cancelTokenSale(uint256,address,bool)", +"4da2317f": "payoutAll()", +"4da25c74": "triCmp(uint256,uint256)", +"4da2906b": "updateUser(bytes32,bytes32,bytes32,bytes32,bytes32)", +"4da2b48e": "getCat(uint256)", +"4da36913": "migrationIndex()", +"4da3b6db": "otherF3D_()", +"4da47ba0": "TokenSale(address,uint256)", +"4da51208": "OKMcoin(uint256,string,uint8,string)", +"4da5160f": "getFirstDocumentIdStartingAtValidFrom(uint256)", +"4da5598a": "syndicatePrecision()", +"4da5d4c0": "isEthernautsExplore()", +"4da5ed85": "disableContinuousDelivery()", +"4da74ee6": "setVoteIntention(uint256,bool,bool,string)", +"4da7c5d6": "LendingBlockTokenEvent(address)", +"4da837e3": "transferDevelopment(address)", +"4da845b3": "swapWinner()", +"4da86598": "getFileMd5(uint256)", +"4da8a771": "INHERITANCECrowdsale(uint256,uint256,uint256)", +"4da946d9": "TakeOffWorldwide()", +"4da9cb07": "LilithToken(uint256,string,string,uint8)", +"4daa1208": "SetPoolCreationFee(uint256)", +"4daaa98f": "doReward()", +"4daade18": "TravelCoinToken()", +"4daadff9": "extractCLNfromMarketMaker()", +"4dab54fd": "removeFromInxWhitelist(address)", +"4dab63ff": "_unpackItemData(uint256)", +"4dabb674": "changePhaseToNormalLife()", +"4dac7d6f": "renewableOf(uint256)", +"4dad66f5": "divForTank()", +"4dad9003": "transferManyLand(int256[],int256[],address)", +"4dadac8f": "STAKING_UNIT()", +"4daea42a": "TOWN_INCREASE_RATE()", +"4daf490c": "getFarm()", +"4daf890a": "invokeLottery()", +"4dafdc50": "exchangeId()", +"4db0040e": "createWonderNotAuction(string)", +"4db08aea": "SALE()", +"4db08e5b": "getSaleContractTokensMinted(address)", +"4db19e7e": "assertEq(bool,bool,string)", +"4db1ba5a": "repossessionBountyPerTen()", +"4db1c7b2": "changeId(uint256,uint256)", +"4db208ba": "Titanization()", +"4db2beef": "distroyToken(uint256)", +"4db347a3": "acceptChallenge(address)", +"4db3c6d7": "buyTokensWithReferal(address)", +"4db3da83": "scheduleCall(bytes4)", +"4db3eef8": "delegateFromBonus(uint88)", +"4db4eae6": "_topBonus()", +"4db4eff0": "hatchCoins(address)", +"4db52924": "setNumMessagesSigned(bytes32,uint256)", +"4db53a70": "VTest()", +"4db59565": "getHistoryRoundInfo(uint256)", +"4db5d52b": "getWagerOwner(address)", +"4db61d21": "compareNoCase(string,string)", +"4db6397f": "calculatePlayerValue(address)", +"4db77d9d": "getMaxJump(uint256)", +"4db8349e": "buyerToSentWeiOf(address)", +"4db8cbc9": "wordCounter()", +"4db94441": "limitAgentBets()", +"4db9bfe6": "getPostVoteCount(uint256)", +"4dbaa16b": "recoverLeftoversPreICO()", +"4dbac733": "INITIAL_RATE()", +"4dbb1964": "setSalesAgent(address)", +"4dbb37eb": "checkLeftToken()", +"4dbb4da5": "increaseMaxContribTime()", +"4dbb51f6": "Hashfex()", +"4dbbddff": "BOBTokenVesting(address,uint256,uint256,uint256,bool)", +"4dbbfcc6": "stageLength()", +"4dbc355a": "releaseTeam()", +"4dbdb0fd": "signUpForPVP(uint256)", +"4dbddc18": "getPoolID()", +"4dbe5889": "ownerClaim()", +"4dbf27cc": "follow(address)", +"4dbfb6fb": "PredictionMarket(uint256)", +"4dc0884f": "playerCards(uint256)", +"4dc08ce2": "GameWon(uint256,address)", +"4dc133a5": "stopTge(bool)", +"4dc13951": "vendingAttachedState()", +"4dc189ef": "createContractWhale(string)", +"4dc18c02": "finalSendTokens()", +"4dc1dbec": "priceToMint()", +"4dc266b4": "submitAnswerReveal(bytes32,bytes32,uint256,uint256)", +"4dc2c67a": "veriPass(string)", +"4dc3141b": "CalcAll()", +"4dc3ba8f": "assignVoterMoreVotes(address,uint256)", +"4dc3f289": "changeCommonDiscount(uint256)", +"4dc41210": "preStartTime()", +"4dc415de": "reject()", +"4dc43eaf": "setTreasury(uint256,uint256)", +"4dc49b25": "InitialPointUnit()", +"4dc59196": "icoAllocation()", +"4dc5c69f": "getTotalDiscount(address)", +"4dc5c771": "dividendsAccount()", +"4dc5fa4e": "MEDIA_SUPPORT_WALLET()", +"4dc65411": "GEM()", +"4dc666b3": "sendTokensManually(address,uint256,uint256)", +"4dc6b523": "divestFee()", +"4dc73428": "transferFromByModule(address,address,uint256,bool)", +"4dc7cc55": "terminateAlt()", +"4dc7d31b": "transferRwrd(uint256)", +"4dc8ed02": "ICObonusStages(uint256)", +"4dc936c0": "mintItem(uint256,address)", +"4dc958e1": "addToBounty(uint256)", +"4dc996d5": "updatetoken(string,string,string,string)", +"4dca2770": "BecomeMemberCandidate(bytes32)", +"4dcad927": "tokensSoldTotal()", +"4dcb05f9": "depositBond(uint256)", +"4dcbb8ee": "getAllAuditors()", +"4dcc889d": "Conference(string,uint256,uint256,uint256,string)", +"4dcd4fb1": "MetaChanged(bytes32,bytes32,bytes32)", +"4dcd85d8": "setPriceOfApis(uint256)", +"4dce4142": "opVaultAddr()", +"4dcee2e0": "hashes(uint16)", +"4dcf2917": "allowUpgrades()", +"4dcf7430": "receiveTokenLoot(uint256[],uint256,uint8,bytes32,bytes32)", +"4dd0f157": "getWinnerType(uint256)", +"4dd12329": "rightSharePrice()", +"4dd19434": "getLeaf2(uint256)", +"4dd1e81c": "tokenBuyable(uint256,uint256)", +"4dd33832": "tokensSoldAtIco()", +"4dd36a0e": "buyTokens(uint8,address)", +"4dd37f19": "getHashRateOfCurrentHalving(address)", +"4dd3e575": "endMinting(bool)", +"4dd4547d": "fireOnChanged(bytes32,uint256[])", +"4dd49680": "SetEvaluate(uint32,uint8,uint8)", +"4dd49ab4": "get(bytes,uint256)", +"4dd49e08": "deliverTokens(address,uint256)", +"4dd5df8c": "setPOOL_edit_16(string)", +"4dd60ff9": "buyNDC(uint256,uint256,uint8,bytes32,bytes32)", +"4dd7f293": "Kayako()", +"4dd83243": "hasNextKey(uint256)", +"4dd83cb1": "refreshPublicFundingTime(uint256,uint256)", +"4dd850fb": "UfoPonzi()", +"4dd8aefd": "DTT()", +"4dd93bd3": "getInvestmentValue()", +"4dd9e437": "transferUserToUser(address,address,address,uint256)", +"4dda1764": "CafeMaker()", +"4dda71a8": "newAuction(uint128,uint256,uint256)", +"4ddad616": "genesMarket()", +"4ddb5f01": "ROPCOIN()", +"4ddbf2b3": "teamTokenFund()", +"4ddc36df": "renounceClearingPriceValidator()", +"4ddc8f74": "SPEX()", +"4ddd108a": "money()", +"4ddd648b": "buyer_profit_pool_amount()", +"4ddddd4c": "SearchIPR(string)", +"4dde3fe1": "redemptionAddress()", +"4dde88ad": "getGroupMembers(uint256,uint256,uint256)", +"4dde8de6": "registerUBetCheck(address,string,string,string,uint256,string,int256)", +"4ddf6795": "getVoteRulesOfProposal(uint256)", +"4ddfd20f": "offer_id()", +"4de0089a": "becomeHipstermaster()", +"4de037c7": "getTitulaire_Compte_8()", +"4de0cdf2": "setICOParams(uint256,uint256,uint256)", +"4de1454f": "targetReached(uint256)", +"4de16053": "getLockProductCount()", +"4de162e4": "extractAccountLength()", +"4de1fc55": "submitAnswer(uint256[],uint256[])", +"4de2578c": "reproduce(uint8,address,uint256)", +"4de260a2": "hack()", +"4de261ef": "presalecap()", +"4de2d5d5": "checkPrize()", +"4de2eee9": "zapVillain(uint256,uint256)", +"4de2f146": "SentAmountToNeighbours(uint256,address)", +"4de315ea": "unlockAddressToken(address)", +"4de4145f": "_transferSenderPaysFee_byProxy(address,address,uint256)", +"4de4f479": "RiskPrice()", +"4de504cd": "setTransferLockFree()", +"4de5120e": "lastWithdrawalTime(address)", +"4de62cd6": "removeGemmyMusicLock(address)", +"4de799c2": "cancelTeamWithdrawal()", +"4de85639": "failDivideFractionalByZero()", +"4de8a799": "addPrivateSaleBuyer(address,uint256)", +"4de90f34": "minForNewTopic()", +"4de94320": "logic_contract()", +"4de946bf": "ideaProofDocument(bytes,uint256)", +"4de952c7": "cmulpow2(address,uint256)", +"4de970fd": "RATE4()", +"4de9e482": "ENDHarvest()", +"4dea208b": "upgradeKingdomType(string,uint256)", +"4dea4d15": "setConfig(uint64,string,uint256,uint256,address,string)", +"4deaad5f": "reverseBytes(uint256)", +"4deb68a3": "auctionStart(bytes32,uint256,uint256)", +"4deb9f47": "UnlockRig(uint8)", +"4deba2e0": "LogCreateToken(address,uint256)", +"4dec1014": "stageFokenCap(uint16)", +"4dec5dc4": "employeeExerciseOptions(bool)", +"4dec9b57": "testView()", +"4ded452e": "InviteCreated(address)", +"4ded6e89": "airdropParticipants()", +"4ded9bfe": "releaseMultiAccounts(address[])", +"4dee529a": "Muggelo()", +"4def0453": "setContentURI(uint256,string)", +"4defd1bf": "setCrowdsaleManager(address)", +"4df0b78a": "withdrewThisYear()", +"4df0ca7e": "EarlyAdoptersAddress()", +"4df17cdc": "maxEtherInvestment()", +"4df28ae4": "capTime()", +"4df34124": "RyxEx(address,address,address,uint256,uint256,uint256)", +"4df3ad68": "setTokenPriceInCent(uint256)", +"4df498b2": "getPreSaleEnd()", +"4df53a0f": "testSetApprovalDb()", +"4df62441": "percentOfPresaleSold()", +"4df65873": "getDefaultRgb(address)", +"4df679e3": "BonusAllocation(address,string,string,uint256)", +"4df68ada": "enable(bool)", +"4df6b45d": "delegateTransferFrom(address,address,uint256,address)", +"4df6ca2a": "setQuestionFee(uint256)", +"4df6d6cc": "allowedRecipients(address)", +"4df7e3d0": "b()", +"4df86126": "SECONDS_PER_HOUR()", +"4df93196": "Joe223()", +"4dfa2722": "CryptoWuxiaVoting()", +"4dfa3f18": "createNewUser(string,string)", +"4dfad511": "_redeem(address,uint256)", +"4dfb10bc": "realVotedSupply()", +"4dfb4807": "etherTotal()", +"4dfc7aa1": "existsDistrito(uint256)", +"4dfc97c5": "policyTokenBalance()", +"4dfcf67a": "NeroSupply()", +"4dfd14b2": "EMACCrowdsale(uint256,uint256,uint256,address,address)", +"4dfd1b02": "setUint8(int8,uint8)", +"4dfd964f": "TSTCallAPI()", +"4dfdc21f": "maxNum()", +"4dfdebe9": "ClientQty()", +"4dfe13e7": "distributeTokensToWallets(address[])", +"4dfe28e7": "releasedTokenOf(address)", +"4dfe950d": "purgeUpgrade()", +"4dfff04f": "approveSiring(address,uint256)", +"4e010942": "LogOraclizeCallback(uint256,bytes32,string,bytes)", +"4e0128fb": "watchPrice()", +"4e012918": "whitelister_address()", +"4e017994": "capEth()", +"4e01bb60": "RefundPeriodOver()", +"4e01bd10": "emergencyTokenWithdrawal(uint256)", +"4e02107a": "getWeddingData()", +"4e022f11": "setSpark(address)", +"4e023fc9": "FakeXUC()", +"4e028c67": "SAC()", +"4e02ed40": "CESCoin(uint256,string,string)", +"4e039d26": "setPreallocationWhitelist(address,bool)", +"4e0416a6": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", +"4e054a67": "setBlacklist(address)", +"4e05ded6": "ClassicCheck()", +"4e06369c": "getPurchasableAmount()", +"4e077f2a": "addGasEther()", +"4e07a7a5": "thirdStageMinted()", +"4e088eb7": "stopPrivateSale()", +"4e0896a1": "teamIndexToExist(uint256)", +"4e0a0f21": "preICOstartTime()", +"4e0a3379": "setCFO(address)", +"4e0ade00": "SmartWallet(address,address,address)", +"4e0b7888": "_updateStage()", +"4e0ba39d": "reserveAdd(uint256,uint256,uint256,uint256)", +"4e0be991": "removeChild(address,address)", +"4e0c4a9c": "setCommissioner(address)", +"4e0ce969": "moduleToken(uint256,uint8)", +"4e0d93a3": "increasePriceForNeighbours(uint256)", +"4e0e9675": "isIdentity(address)", +"4e0f1064": "getMonthlyTransactionVolumeReceiving()", +"4e102951": "can_claim(address,address,address)", +"4e1053cc": "RobinHoodPonzi()", +"4e10c212": "TxAttackWallet()", +"4e10c3ee": "transferWithoutReward(address,uint256)", +"4e116eb8": "unRegisterCertificationDb(address)", +"4e1243b6": "AddClaim(uint32,string,bytes32,bytes32,address,uint32)", +"4e1273f4": "balanceOfBatch(address[],uint256[])", +"4e12e51a": "getBonusList()", +"4e1339fe": "HALT()", +"4e13f066": "RedSoxRays48()", +"4e140274": "isDiscount()", +"4e1415ab": "testThrowExecuteSellOrderDaoChallengeRefusesZeroFunds()", +"4e14e4c8": "CyberCapitalInvestToken()", +"4e153418": "CreateLottery(uint32)", +"4e159a05": "clacCooperateNeedLockAmount(uint256)", +"4e15dfe9": "wholeTokensPerEth()", +"4e16bef5": "jack_max()", +"4e16e0c7": "participantCanParticipate(address)", +"4e18405d": "TOTAL_ARK()", +"4e18c1a7": "IcoPhaseAmountsChanged(uint256,uint256,uint256,uint256)", +"4e191701": "lamboPresaleAddress()", +"4e194cc0": "getCreateFeeToken()", +"4e195faf": "totalEthereumRaised()", +"4e19c112": "deleteOwner(address,uint8)", +"4e1a150b": "netherToken()", +"4e1a1853": "ParentCoinAddress(address)", +"4e1a50b7": "setBonuses(uint256,uint256,uint256,uint256)", +"4e1bdfdf": "withdrawOlder()", +"4e1cfa8c": "batchAddCandidateByIndex(uint256,address[],bytes32[],bytes32[])", +"4e1dc0d7": "LAYA()", +"4e1f6c14": "FUTURE_WALLET()", +"4e1fa837": "TestERC721()", +"4e205cee": "signedApproveAndCallHash(address,address,uint256,bytes32,uint256,uint256)", +"4e209678": "testFailBreach()", +"4e2133ba": "addExchangePartnerAddressAndRate(address,uint256)", +"4e21f25e": "soldPresale()", +"4e22102b": "LIMITS_END_DATE()", +"4e2280c4": "clearQuickBuyPath()", +"4e228d8f": "ExchangeableToken(address)", +"4e23176c": "buyRBCTokens()", +"4e232730": "ownerOn(address)", +"4e233065": "delKeyValue(uint256,bytes32)", +"4e23a144": "fundUser(address,uint256)", +"4e25658e": "setSegment(string,uint32,uint32,string,string,string,string)", +"4e2567d0": "addToAccountList(address)", +"4e25c92e": "ttlSply()", +"4e2611ae": "vnetToken()", +"4e2659a8": "createTeam(bytes32,bytes3,bytes3,bytes3,bytes3,bytes3,bytes3)", +"4e26c95e": "EASYLIFE(uint256,string,string)", +"4e272768": "remove_bounty()", +"4e2743b3": "setStack(uint256,uint256)", +"4e275295": "tokensSell()", +"4e2786fb": "roundNumber()", +"4e27e916": "voteLock(address)", +"4e2808da": "cancelOwnership()", +"4e280fd6": "SolarioToken()", +"4e284af1": "INCENT_FUND_NON_VESTING()", +"4e285acb": "setsendgoods(uint256)", +"4e29cba6": "disbursements(uint256)", +"4e2a953a": "gameStartedAt()", +"4e2aae36": "setzUint256(uint256,int256)", +"4e2ab933": "transferFrom(address,address,uint256,bytes,string)", +"4e2ad943": "mainSaleBonusEndTime()", +"4e2b57fe": "mincap()", +"4e2ba115": "DFVToken()", +"4e2bd9ce": "rescind(address)", +"4e2bdfd4": "getBetMutableData()", +"4e2c9524": "upgradeDuties()", +"4e2de9e1": "setGzeBonusOffList(uint256)", +"4e2e8a10": "setTime3(address,uint256)", +"4e2e94f7": "MAX_PRE_SALE_AMOUNT()", +"4e2f220c": "createCentralizedOracle(bytes)", +"4e2f2af4": "PayoutRedemption(uint256,uint256,uint256)", +"4e2fa68f": "crowdsaleStarts()", +"4e2fd44e": "setPriv(address)", +"4e304bfb": "CRAIC()", +"4e30506f": "dropLast()", +"4e30a66c": "safeToAdd(uint256,uint256)", +"4e317ead": "cancelTemplateProposal(address,uint256)", +"4e31aea3": "firstThawDate()", +"4e329bd3": "HealthCoin(uint256)", +"4e358ce7": "DITCOIN()", +"4e35aacf": "createCompany(string,uint256)", +"4e360eaf": "EmergencyStopActivated()", +"4e3673a6": "connectCrowdsaleContract(address)", +"4e36fddf": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256)", +"4e37af4e": "offlineCallback(bytes32)", +"4e38413f": "setBytes32(bytes32,bytes32,bytes32,bool)", +"4e385512": "setCampaignValidity(bytes32,bool)", +"4e38f205": "generateWithdrawalHash(string,uint256,address)", +"4e390f2a": "initLottery(uint256,uint256,uint256,uint256)", +"4e395e2a": "isExecutable(uint256)", +"4e3acafe": "Cr1tikalIsShort()", +"4e3b33d4": "prepareRefund()", +"4e3b52fe": "metaCoin()", +"4e3c2f47": "getCardDivs(uint256,uint256)", +"4e3c50a0": "addBuyTokensRequest(address,string,string)", +"4e3d2745": "ManoloToken()", +"4e3d539a": "newChainlinkWithENS(address,bytes32)", +"4e3dc2f1": "STAT_MAX()", +"4e3df857": "removeEA(uint32)", +"4e3e4035": "notEqual(int256,int256,string)", +"4e400bda": "getSenderStatus(address,uint256)", +"4e406167": "setContractICO(address)", +"4e4081ef": "pregnantBots()", +"4e41108d": "Bank()", +"4e417a98": "callData()", +"4e41a1fb": "symbol(uint256)", +"4e41ebf6": "createCommissionerAuction(uint32,uint256,uint256,uint256)", +"4e42b632": "WEBcoin()", +"4e43502a": "BDSMTOKEN(uint256,string,uint8,string)", +"4e43603a": "getUserStats(address)", +"4e448ffa": "winnerLuckyNumber()", +"4e44b5cc": "Kiwi(address,uint256,string,string,uint8,uint8)", +"4e44c855": "setGameStatus()", +"4e44d956": "configureMinter(address,uint256)", +"4e458cc2": "setNewEndTime(uint256)", +"4e458eb6": "posstoken()", +"4e45fba9": "getProviderDetails(address,uint256)", +"4e46869c": "accountAndSubcourtIDToStakePathID(address,uint96)", +"4e46fc2c": "finalizePreICO()", +"4e47d99a": "WubCoin(address)", +"4e4831d8": "removeDelegatorById(uint256,address,address)", +"4e485c52": "closeTransfer()", +"4e48a495": "checkTransfer(address,address,uint256,uint256)", +"4e4965ff": "AIPAY()", +"4e49954e": "createReceipt(address,string)", +"4e49acac": "setParams(address)", +"4e4a8c0d": "sendMessage(address,uint256,uint256,bytes)", +"4e4ab830": "amIOwner()", +"4e4ac577": "claimFeesForRound(address,uint256)", +"4e4afa1b": "minimumTickets()", +"4e4cf65c": "forwardMoney()", +"4e4d02db": "DeathFactor_iii()", +"4e4d3e56": "get_funds_left_for_reinvestment()", +"4e4e2d6d": "PaymentForwarded(address,uint256,uint128,address)", +"4e4e7862": "addWithdrawal(address,address,uint256)", +"4e4f776c": "TCT(uint256,string,uint8,string)", +"4e4fbee1": "renounceProxyManager()", +"4e4fe306": "getData(uint256,uint256)", +"4e500760": "CreditUnits()", +"4e504313": "Addr3()", +"4e505367": "initialTokenAmount()", +"4e51193b": "sealTimestamp()", +"4e5141eb": "buyTokens(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"4e5146a9": "hexToAscii(uint8)", +"4e520a94": "getNumRecords(address)", +"4e521a2a": "INCUToken()", +"4e523b91": "MonethaToken(address,uint256)", +"4e52622b": "eth6DivsOwing(address)", +"4e52678e": "digix()", +"4e53a0b9": "update(address[],uint256[],uint256[],uint256[])", +"4e53b564": "adminTransferContractBalance(uint256)", +"4e542bff": "_triggerPVPSignUp(uint256,uint256)", +"4e542c5f": "deleteById(uint256)", +"4e543b26": "setResolver(address)", +"4e5497de": "BuyoutDividend(address,address,uint256,uint256,uint256)", +"4e55936d": "NorthPoleMintingEnabled()", +"4e56925f": "updateMasternodeAsTeamMember(address)", +"4e57d27d": "_getAllRevisionTimestamps(bytes20)", +"4e58e920": "officialFacebook()", +"4e599551": "getPreviousWinners()", +"4e59f947": "SucToken()", +"4e5a33c5": "executeTokenRepartition(uint256)", +"4e5aabe6": "resetStellarBalance()", +"4e5ac744": "PDPCoin()", +"4e5acb1a": "changeAutherOwner(address)", +"4e5b0d29": "getVisaEntered(address,uint256,uint256)", +"4e5b3cb8": "EtherusPreSale(address,address,address,address)", +"4e5b5f54": "purchasePresale(address,uint256)", +"4e5bec6e": "addTypeAddressById(uint256,address,address,uint256)", +"4e5c0595": "tokenAdvisorsAllocated()", +"4e5d49a0": "DariumToken(address)", +"4e5d7186": "LogAccountRegistered(address,address,bytes32,bytes32,bytes32,bytes32)", +"4e5d793f": "setAsset(address,uint256,uint256,uint256)", +"4e5d8edd": "VOLUME_70()", +"4e5ed65b": "_indexAccount(address)", +"4e5f13bc": "landPriceCurrent()", +"4e5f8751": "newInvestWallet(address)", +"4e60321d": "userOddsMiniGame(address)", +"4e605688": "setBtcBuyer(address)", +"4e6093f8": "HeirChanged(address,address)", +"4e6106c5": "getRealisation()", +"4e61c362": "transferMul(address,uint256)", +"4e61df06": "DigixbotEthereum(address)", +"4e61efc5": "getWizzTypeOf(uint256)", +"4e637fab": "DepositsTransferred(address,uint256)", +"4e659145": "levPerUser()", +"4e6630b0": "ethBalance()", +"4e68354e": "LogLockStateTransition(uint8,uint8)", +"4e6885f3": "depositPresale(address)", +"4e6944cf": "totalStaticoinSupplys()", +"4e696d3c": "startCoinSale(uint256,address)", +"4e69d560": "getStatus()", +"4e6ab570": "insert_order(address,bool,uint32,uint128)", +"4e6b29ee": "returnIsParentAddress(address)", +"4e6b558a": "removeVerifiedAddress(address)", +"4e6b97f3": "transferMultiSameVaule(address[],uint256)", +"4e6ba0a9": "testCreateCostMultisig()", +"4e6c61aa": "testFailAddForeignChildNotChild()", +"4e6d1405": "invoices(uint256)", +"4e6d35ea": "currentlyReleased()", +"4e6d739d": "getSupernovaBalance()", +"4e6d73da": "LogUserUserRemovedFromWhiteList(address)", +"4e6e5d69": "unMint(address)", +"4e6e6928": "latestFriend()", +"4e6ec247": "_mint(address,uint256)", +"4e6f42ba": "changeSeizedTokensWallet(address)", +"4e6fedb7": "remainOfStage(address,uint256)", +"4e705549": "setDefinition(uint8,uint8,uint8,uint8,uint8)", +"4e7073f1": "setMinETH(uint256)", +"4e70a604": "Withdrawal(uint256)", +"4e70b1dc": "num()", +"4e7196c7": "setReg1(uint256)", +"4e71d92d": "claim()", +"4e71e0c8": "claimOwnership()", +"4e724f0f": "numBlocksLocked()", +"4e725b7a": "test_hasClaimableShares_nonZeroClaimableStake()", +"4e72ec91": "setPointer(uint8)", +"4e72f19e": "SendFundsToReceiver(uint256)", +"4e730025": "register(uint256,uint256,uint8,uint8,uint8,uint8,string)", +"4e7343ea": "verifyOrder(address,uint256,uint256,address)", +"4e7344d5": "ABitcoin()", +"4e7355d6": "RegistrantRemoval(address)", +"4e7445c8": "drainRemainingToken(address)", +"4e7455d0": "createMilestones(uint256,bool,uint256)", +"4e7602d3": "setRecipients(address[])", +"4e761a91": "STEP_SIZE()", +"4e7654fe": "buyTokens(uint256,uint256,bytes16,uint256,uint8,bytes32,bytes32)", +"4e76a725": "test_withAssertTrue()", +"4e76a846": "numParticipants()", +"4e76f5d2": "GetMinimumBet_ether()", +"4e77a38e": "releaseTrickleDownBonuses()", +"4e78e0c2": "setVerificationSlashingPeriod(uint256)", +"4e79909c": "WithdrawalApproved(uint256,uint256,bool,uint256,bytes)", +"4e79fd7c": "stepLockedToken()", +"4e7a540b": "doUpgradeInternal(address)", +"4e7a6978": "PersianTokenICO(uint256,uint256)", +"4e7ad367": "fireEventLog1Anonym()", +"4e7b1ce1": "PayNihilumToContract()", +"4e7ceacb": "getFeeAddress()", +"4e7cff38": "toBytes20(bytes,uint256)", +"4e7d656a": "EtherSpermBank()", +"4e7dbb29": "TTARD()", +"4e7e96f1": "buyBackInvestedValue()", +"4e7ec0e4": "setGlobalTimeVault(uint256)", +"4e7ec7e3": "RANGEEND_6()", +"4e7f1264": "leaveMessage(string)", +"4e7f9b19": "getReport(uint256)", +"4e80f241": "YCStandardToken(uint256,string,uint8,string)", +"4e8127f6": "icoSupply()", +"4e815698": "removeBlacklistAddress(address,address)", +"4e8182c8": "addJugada(uint256,string,string,uint256,uint256)", +"4e81b17d": "createMonthlyBill(uint8,uint256,uint256)", +"4e81eec9": "EventProductEndSale(uint32)", +"4e8204a4": "NewRoundStarted(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4e82844d": "countWishes()", +"4e82c134": "getAddressFromUsername(string)", +"4e83977a": "validationWallet()", +"4e840bea": "IGTToken()", +"4e84c614": "getWaitingState()", +"4e85a0e1": "cancelVoteForCandidateByIndex(uint256,address,uint256)", +"4e860ebb": "disableTokenIssuance()", +"4e876ecc": "directSellRate()", +"4e87c715": "DEFAULT_INITIAL_COST()", +"4e880082": "distributeTheSameAmountOfTokens(address[],uint256)", +"4e89eb98": "bonusDicrement()", +"4e8a411b": "deallocate(address,address,uint256)", +"4e8afc5f": "getRegister(string,bytes32)", +"4e8b759c": "BuyOrdersOf(address,uint256)", +"4e8b75d0": "IRtokenChain(uint256,string,string)", +"4e8be64d": "TokenToken(uint256,string,string)", +"4e8c185b": "setFeePropMaxGlobal(uint256)", +"4e8c2927": "FreeToken()", +"4e8eaa13": "cancelAuction(uint256,address)", +"4e8ec73e": "jockeyPr(uint256)", +"4e8f05d1": "setGrowthTokensWallet(address)", +"4e8f7fdf": "allocateTokenForTeam(address)", +"4e8fb35c": "referralBountyTokensAddress()", +"4e91025e": "Liquidate(address,uint256,uint256,uint256,uint256)", +"4e91ca3a": "updateModuleStatus(address,bool)", +"4e91db08": "setBytes32(bytes32,bytes32)", +"4e91f906": "getNewPetCard(uint8,uint8)", +"4e922731": "calcRefBonus(uint256)", +"4e926eab": "getInviteePIDs()", +"4e9282af": "setBDApprove(uint256,bytes)", +"4e930483": "addbtycmoney(address,uint256)", +"4e9384da": "addSecondPreferences(bytes32[],bool)", +"4e938539": "preSaleSecondBonus()", +"4e93bf32": "maximumBuyBackAmountInWEI()", +"4e9466f7": "withdrawToMany(address[])", +"4e94917a": "Claim_TRAC_20000()", +"4e94c829": "getAugur()", +"4e94fbcf": "setIntervalCoefficient(bytes2,uint256,uint256,uint256)", +"4e954f87": "IsEthereum()", +"4e961921": "getCurrentTokenRate()", +"4e96ea53": "addContract(address,address,address,string)", +"4e97bcfc": "EmergencyStop()", +"4e98323c": "setReturnAgent(address)", +"4e9833ac": "changeHoldingTaxInterval(uint256)", +"4e989a5b": "importPlayers(address,address[])", +"4e98a5b3": "receiveAssets(uint256)", +"4e99b800": "tokenBaseURI()", +"4e9b5db0": "BASEPRICE()", +"4e9c6b1f": "million()", +"4e9cc134": "JPG1Token()", +"4e9cf5b1": "changeOperational(bytes32,bool)", +"4e9de828": "registerAuthContract(address)", +"4e9e456b": "oraclize_query(uint256,string,bytes[1])", +"4e9ec8a6": "transferETHtoContract(uint256)", +"4e9ee738": "test_8_basicTransfersBetweenAccounts_increaseBlocksBy300()", +"4e9f0f06": "GimmerTokenSale(address,address,uint256,uint256)", +"4e9f9d37": "startTimeTwo()", +"4e9faaba": "_sell(address,uint256)", +"4e9feee6": "changeFrozenTime(uint256)", +"4ea05686": "countSet()", +"4ea0db6c": "HardCapReached(address,uint256)", +"4ea10c74": "FounderAllocationTokens()", +"4ea14479": "setProjectToVerify(address,uint256)", +"4ea1fcb6": "getWithdrawAmount(address)", +"4ea201cc": "betInfo()", +"4ea28ee6": "MyToken(uint256,uint256)", +"4ea2ea9f": "allocLastTxRewardByHand()", +"4ea2f66a": "_claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"4ea34cdb": "getActionContract(address)", +"4ea37fec": "presaleStartTimestamp()", +"4ea412f4": "setPrice3(uint256)", +"4ea44358": "setGen0Step(uint256)", +"4ea5195a": "participantRoundCalced(address,address,uint256)", +"4ea5a6ac": "getRocIndexToOwner(uint256)", +"4ea611cd": "setPartnerDurance(uint256,uint256)", +"4ea640da": "ManoAntrasToken()", +"4ea66c38": "buyinInternal(address,uint256)", +"4ea6c89e": "isPreviousStageFinalized()", +"4ea73b07": "APOTokenCrowdsale()", +"4ea7d483": "priceStar5Now()", +"4ea801c5": "writeRate(string,uint256)", +"4ea8b6d0": "changeProfilePicture(bytes32)", +"4ea9560e": "FoshaAirdrop()", +"4ea9a27a": "registerHolder(bytes32,address,uint256)", +"4ea9ea71": "_submitTransaction(address,uint256,bytes,bytes,address)", +"4eaaad7b": "left72(uint256)", +"4eab38f4": "depositReclaim(uint256,uint256)", +"4eab3998": "Allocations()", +"4ead4771": "getBIDList()", +"4eae51f4": "getHeirs()", +"4eae8e30": "isSenderApprovedFor(uint256)", +"4eaef8a2": "getCEOHashing(address,uint256)", +"4eb03f6e": "updateMinter(address)", +"4eb054e6": "createPinMoTrade(bool,uint256,uint256)", +"4eb06f61": "manualLockFunds()", +"4eb09bf4": "getParametersHash(uint256,uint256,uint256,uint256,address,address)", +"4eb1483d": "IcoAddress()", +"4eb166af": "right73(uint256)", +"4eb1e71c": "HashTestCoin()", +"4eb1f578": "saleValve(bool)", +"4eb21301": "currentSaleCap()", +"4eb259aa": "burnAndReturnAfterEnded(address)", +"4eb2a8fb": "Banear_Oraculo(address)", +"4eb3148e": "feesTakenFromPrize(uint256,uint256)", +"4eb333c7": "setSynthesizingAuctionAddress(address,address)", +"4eb37fe7": "Tournament(uint256,uint256,uint256,uint256,uint256)", +"4eb396cd": "mintByMintable(address,uint256)", +"4eb421e5": "MockFailUpgradeableToken()", +"4eb4fe80": "getBackLendingItem(uint64)", +"4eb5162e": "collectSellFee()", +"4eb56999": "claimRefundVaultOwnership()", +"4eb665af": "setLockDuration(uint256)", +"4eb7221a": "nameRegistry()", +"4eb7d857": "getSite(uint256)", +"4eb81ba4": "getSchellingRoundDetails()", +"4eb8ffb4": "ORACLIZE_GAS_LIMIT()", +"4eb933bf": "withdraw(bytes32[],address[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", +"4eb94102": "setAuctionManagerAddress(address,address)", +"4eb94872": "Err(string)", +"4eb95b97": "DropNotice(uint256,string,string,string)", +"4ebab5cf": "specificApprove(address,uint256)", +"4ebc31f3": "managerETHcandidatAddress()", +"4ebc7a9c": "processReinvest(address,bool)", +"4ebcdc2b": "SwapStarted(uint256)", +"4ebd7741": "extraMint(address)", +"4ebe2d46": "createMultisig()", +"4ebfa8bc": "getUserBettingInfo(address,uint256)", +"4ebfd6e8": "freeForAll()", +"4ebfff02": "setAddressAPI(address,address)", +"4ec06982": "paybackToDepositer(address,uint256)", +"4ec0744d": "UtrustToken()", +"4ec109f4": "receiveToken(address,address,uint256)", +"4ec1646d": "claimFreeAnimalFromAnimalFactory(string,string)", +"4ec18db9": "poolSize()", +"4ec19512": "calculateRunway()", +"4ec1adf1": "callAMethod2(uint256)", +"4ec24fa0": "getManagementProxy(uint32,int256)", +"4ec2b417": "getBankKYC(address)", +"4ec2cde6": "totalSupplyForCrowdsaleAndMint()", +"4ec2d0b6": "buyMiner(uint256[])", +"4ec32507": "parentBlockInterval()", +"4ec42e8e": "antToken()", +"4ec4878b": "donateJackpot()", +"4ec6396d": "TransChain()", +"4ec6a61a": "InitializeCoinToUser(address)", +"4ec70fde": "publicMin()", +"4ec7344e": "MetaFoxToken()", +"4ec735ae": "revokePermission(address,address,bytes4)", +"4ec79937": "approve(bytes32,bool)", +"4ec7a6e7": "externalSale(address,uint256,uint256,uint256)", +"4ec7b58b": "delSaleOwner(address)", +"4ec7ddc0": "addCommitteeVote(address)", +"4ec883d1": "editRestrictedAddress(address)", +"4ec8a8ff": "unpausecontract()", +"4ec9ef9c": "calculateTokenPurchase(uint256,uint256)", +"4eca4b19": "sendCoins(address,address,uint256)", +"4ecb02aa": "firstTierDiscountUpperLimitEther()", +"4ecb1390": "saleTokens(address,uint256)", +"4ecb35c4": "confirmations(address)", +"4ecb5e79": "IamGROOT()", +"4ecb8d0f": "transferOwnershipSend(address)", +"4ecc6eab": "setDefaultBuyerLastPaidAt(uint256)", +"4ecc7f59": "assignPreicoTokens()", +"4ecd4aa9": "createRequestAsPayeeAction(address[],bytes,int256[],address,bytes,string)", +"4ecd73e2": "DistributeDividends(uint256)", +"4ecd81b3": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32,address)", +"4ecdf165": "rareIdRange()", +"4ece90a8": "getERC20()", +"4ecf77d3": "getUnfinishedGames()", +"4ed0694f": "kkICOTest77()", +"4ed0efd1": "selfdestructs()", +"4ed250bf": "freezeTime(uint256,uint256)", +"4ed3881e": "setTokenTransferIdentifier(string,bytes4)", +"4ed3885e": "set(string)", +"4ed4831a": "all(bool[7])", +"4ed4d42a": "transferTokenAddress(address)", +"4ed577bb": "IssuedToken(string,string,uint256,uint256)", +"4ed600d1": "confirmVestingSchedule(uint256,uint256,uint256,uint256)", +"4ed767a1": "totalFinalised()", +"4ed7cb10": "XXXXXXXX10(address)", +"4ed8579e": "setGPSMaxEth(uint256)", +"4ed87713": "ADVISORS()", +"4edac8ac": "num_claimed()", +"4edba7bf": "adapterEnabled()", +"4edbca6e": "getCategory(uint256,uint256)", +"4edbe9f7": "MintCommandBonus()", +"4edc689d": "allowAddress(address,bool)", +"4edc8ccf": "registerEIP777Interface()", +"4edccd31": "replace_square(uint256,bool,uint256,address)", +"4edce4e1": "push(int256,bool)", +"4edd0d07": "setConsumeTokenAddress(address)", +"4edd74e8": "reservesBalance()", +"4eddbd8d": "getCurrentPrice(uint128,uint128,uint24,uint64)", +"4eddcf5b": "setReleaseBlockNumber(uint256,uint256)", +"4ede23c8": "addressNotNull(address)", +"4edefd31": "setExpireDelay(uint256)", +"4edefe83": "doBroadcast()", +"4ee0ab0d": "forceEnd()", +"4ee0b9a9": "DaoHubVerify()", +"4ee0cb8a": "CutieBit()", +"4ee0cd98": "setFundMintingAgent(address)", +"4ee0d066": "setTotalsContract(address)", +"4ee16aba": "contributeToPurse(uint256)", +"4ee1d045": "secPerBlock()", +"4ee29ec5": "getNumberOfAssertions(uint128)", +"4ee2a3df": "setTargetDiscountValue2(uint256)", +"4ee2cd7e": "balanceOfAt(address,uint256)", +"4ee3659d": "AGC()", +"4ee3ad07": "HareemCoin()", +"4ee3c579": "DurioToken(string,string,uint8,uint256)", +"4ee3dc91": "publicToken()", +"4ee4d731": "enableMETTransfers()", +"4ee4d8fa": "isGlobalConstraintRegistered(address,int256,address)", +"4ee51a27": "airdropTokens(address[])", +"4ee67d33": "Etheradium()", +"4ee7ca3a": "erc20FOBS(string,uint8,string)", +"4ee9eb70": "InformRebuyTo(uint256,address)", +"4eea636f": "GROWCHAIN(uint256,string,string)", +"4eea9a8d": "withdraw2(address)", +"4eec0185": "aomracoin()", +"4eec44b4": "beforeBalanceChanges(address)", +"4eeca076": "Counter()", +"4eecafdb": "ifEndGetting()", +"4eed8a45": "LogTokenAllocation(address,uint256,uint256)", +"4eed965e": "_createGame(string,address,uint256)", +"4eee121f": "setOrCacheTargetReporterGasCosts(uint256)", +"4eee424a": "removeClaim(bytes32)", +"4eee59b3": "guess(string)", +"4eee8c25": "tokenBuyCost()", +"4eee966f": "setTokenInformation(string,string)", +"4eeea29d": "transferPreSaleBalance(address,uint256)", +"4eeedef1": "BCALAttToken()", +"4eeee8ac": "updateFighterBattleStats(uint256,uint64,uint16,uint64,uint16,uint16)", +"4eef440c": "bonusLevel0PercentModifier()", +"4eef683d": "PALAIR()", +"4ef02cf3": "preicoEndDate()", +"4ef05de3": "evacuate()", +"4ef1a23a": "manualInsuranceResolution(bytes32,uint8,bytes32)", +"4ef20030": "_setTokenMeta(uint256,bytes)", +"4ef37628": "getChallengeNumber()", +"4ef39b75": "finalize(address)", +"4ef3f235": "changeMaintenanceTime(uint256,uint256)", +"4ef45cac": "Announcements()", +"4ef50711": "apply4Redeem(uint256)", +"4ef5710a": "WatchNumberOfPlayerInCurrentRound()", +"4ef65c3b": "setUint(uint256)", +"4ef6b8ce": "Certificate()", +"4ef8086a": "switchManagerAndRemoveOldOne()", +"4ef83a70": "withDrawEth(uint256)", +"4ef85140": "CAOsale(uint256,uint256,string,string)", +"4ef8885f": "getSocialAccountPw(bytes32,bytes32,bytes32)", +"4ef8ff33": "MIN_INVESTMENT()", +"4ef94e34": "setMilestones(uint32[],uint8[],uint32[])", +"4ef98616": "CelebsPartyGate()", +"4efa45a1": "addAddressSetting(string,address,address,address,string)", +"4efb023e": "totalModerators()", +"4efb04ff": "created_contracts(address)", +"4efb7296": "updatePlotData(uint256,string,string)", +"4efbb734": "PublisherRegistryReplaced(address,address)", +"4efbe933": "buyForHackerGold(uint256)", +"4efc067f": "getAuraValue(uint256)", +"4efcc69e": "ExMoneyToken(uint256,string,string,address)", +"4efd0848": "_refreshVoteForVoter(address)", +"4efd1551": "add(address,address,uint256,uint256)", +"4efd9e2c": "updateMinContribution(uint256)", +"4efdd4f9": "viewUnclaimedResearchDividends()", +"4efddcd9": "artWorkChangeByAdmin(uint256,string,uint256)", +"4efeb2cf": "crowdDistribution()", +"4eff13dc": "OFFER_SIZE()", +"4eff86e7": "RBFToken(uint256,string,string)", +"4f0016d0": "endContract(uint256,uint256,uint8,bytes32,bytes32)", +"4f002522": "set_creature_builder(address)", +"4f011d9d": "getIntermediary(uint256)", +"4f013184": "investInTheSystem()", +"4f013ea6": "_THOUSAND()", +"4f01541e": "setReceiverAddress(address,address)", +"4f01d77e": "manual_lottery(bytes32)", +"4f02c420": "minted()", +"4f03c340": "proposeTx(address)", +"4f046439": "updatePurchaseSize(uint256)", +"4f04a36e": "setDesignatedReportPayoutHash(bytes32)", +"4f04af35": "CORReserveAllocation()", +"4f052648": "XaurumDataContract()", +"4f052b82": "UNLOCK_OUTINGRESERVE()", +"4f057506": "Limit()", +"4f059a43": "getClaimAmountForBlock()", +"4f062c5a": "getTier(uint256)", +"4f065672": "Start(string,bytes32)", +"4f0693a1": "BONUS_LATCH()", +"4f069517": "removePublicSalesSpecialUser(address)", +"4f07307b": "setLoanCreator(address)", +"4f073130": "takeOrder(bool,uint256,uint256)", +"4f07a663": "close(address,uint32,uint192,bytes,bytes)", +"4f07b5f0": "startSale(uint256,uint256,uint256,uint256,uint256,address)", +"4f07cc4f": "ETH_MIN_LIMIT()", +"4f082843": "enableChain(uint256)", +"4f084c0c": "payLast(uint256)", +"4f089298": "Etch(bytes32)", +"4f089898": "updateBlackListTrader(address,bool)", +"4f090ab4": "burnPrimordialToken(uint256)", +"4f0913ef": "MANHATTANPROXY6THST()", +"4f092510": "allowIgnoreTokenFallback()", +"4f09cfc5": "changeDiviRate(uint256)", +"4f09eba7": "proxyApprove(address,uint256,bytes32)", +"4f0a195e": "totalBasicIncome()", +"4f0a746f": "blacklistAddress(address,address)", +"4f0a97b9": "test_basicThrow()", +"4f0b0deb": "gameCreate()", +"4f0b584e": "getCCH_edit_18()", +"4f0b8374": "addToPrivilegedList(address)", +"4f0b9a2b": "KarTokenERC20(uint256,string,string)", +"4f0c563f": "depositBonus()", +"4f0ca055": "getMiniPoolEdit_5()", +"4f0cae88": "balanceThis(address)", +"4f0cc59d": "swapID(address,bytes32,uint256)", +"4f0cd27b": "getCount(address)", +"4f0cdd29": "getAddressByUserName(string)", +"4f0cf7e1": "fillTradesInfo(bytes32,uint256,uint256[])", +"4f0d8533": "addNewStreetType(string)", +"4f0ddd27": "getTemplate(string,string)", +"4f0e3333": "wedaddress()", +"4f0e3dad": "USD_GOAL()", +"4f0e760a": "_takeOwnershipOfTokenFrom(uint256,address)", +"4f0e8656": "showAdmin()", +"4f0eaf96": "oraclizeCallbackGas()", +"4f0f4aa9": "getNode(uint256)", +"4f0f539e": "getActiveMessage()", +"4f0f97ab": "TokenForSale()", +"4f1069ad": "serchIndexByAddress(address)", +"4f10a0bd": "_createAvatar(string,address,uint256)", +"4f10acc1": "updateGoldFeeData(uint256)", +"4f1157aa": "EtheriumWall(string)", +"4f118ad7": "GenericToken(string,uint8,string,uint256)", +"4f11ca65": "distributeTeamTokens()", +"4f11e07d": "getProof(address,uint8,bytes32)", +"4f1243d7": "pepsToken()", +"4f139314": "compensateLatestMonarch(uint256)", +"4f13e130": "fightAsuriMonster()", +"4f13fc0a": "setCompte_30(string)", +"4f150787": "batchFillOrKillOrders(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"4f161245": "getUIntValue(string)", +"4f162f8f": "icoEndTimestampStage4()", +"4f18d6fb": "BITAD()", +"4f190ed2": "changeDekzAddress(address)", +"4f192fa3": "MajestyAssetsJunction()", +"4f197ee7": "transferPackageOwner(string,address)", +"4f19e977": "INVALID_ORDER_SIGNATURE(bytes32)", +"4f1a5b86": "tokenReserved1()", +"4f1a7678": "getInsuranceDataByID(uint64)", +"4f1a892b": "setSectionForSale(uint256,uint256)", +"4f1ae61a": "releaseFeesAndBountyJM(address,uint256)", +"4f1afb63": "ownerforce()", +"4f1b2d4f": "toBool()", +"4f1bbc4d": "SuccessAuctionEvent(address,address,uint256,uint256)", +"4f1c3417": "getSpawnProxy(uint32,int256)", +"4f1c3b66": "setAccountData(address,uint8,bytes32)", +"4f1c8d0f": "milkBalanceOf(address)", +"4f1d38c0": "activeCrowdsalePhase3(uint256)", +"4f1d76ef": "buyabletoken()", +"4f1e0d0b": "getGoldInfoCustodian(address)", +"4f1e4334": "setMinBalanceForContractCreation(uint256)", +"4f1ea770": "bc(uint256,address)", +"4f1eb4b2": "proposalInProgress()", +"4f1ef286": "upgradeToAndCall(address,bytes)", +"4f1f421b": "SuMain()", +"4f1f99aa": "changeOzreal(address)", +"4f1fa7ef": "streamityContractAddress()", +"4f20f35a": "payExpenses(address,uint256)", +"4f219ceb": "getPlayRate(uint256,uint256)", +"4f223fe3": "StatefulFactory(string,string,string)", +"4f224baa": "setMetaBaseUrl(string)", +"4f2253d4": "addStudent(string,string,string,bytes32)", +"4f22bcf8": "allocationAddressList(uint256)", +"4f232f77": "transferFromRoot(address,address,uint256)", +"4f238029": "getSaleAuctionAddress()", +"4f23cce0": "ownerBetsCount(address)", +"4f23e50a": "defineReward(string,address,uint256,uint256)", +"4f24186a": "newProposal(string)", +"4f242cde": "startICO(uint256,address)", +"4f245ef7": "auctionStart()", +"4f248409": "endICO()", +"4f24e471": "numRewardsAvailableSetForChildAddress(address)", +"4f255b80": "getCharacterIndex(uint32)", +"4f256693": "addFile(bytes32,bytes32)", +"4f2578ba": "getVestedFounderTokens()", +"4f25a319": "PUBLICSALE_STARTTIMESTAMP()", +"4f25d6dd": "solveTime()", +"4f25ec6e": "_transferFee(address,uint256,address)", +"4f25eced": "distributeAmount()", +"4f26ef80": "buyAd(uint256,string,string)", +"4f271740": "UNFREEZE_DATE()", +"4f27869e": "defaultExit(uint256,bytes,bytes32,bytes,bytes,bytes32,bytes,bytes)", +"4f27ce68": "setSlogan(uint64,string)", +"4f27de64": "ByteExtractor()", +"4f28216a": "lowContributionAward(address)", +"4f284594": "info_TotalSupply()", +"4f28af6a": "handleBet(uint256)", +"4f28c443": "AIRDROP_TOKENS_PERCENT()", +"4f297b2b": "TokensGiven(address,uint256)", +"4f2989af": "indexExists(bytes32)", +"4f2996ab": "getBalanceByEscrowId(uint256)", +"4f2af869": "lastCalculatedToken()", +"4f2b0e41": "preSaleFund()", +"4f2be91f": "add()", +"4f2c9196": "getUsedBySoftwareLength()", +"4f2cc469": "transferZeroTokensTest(address)", +"4f2cd9cc": "auditConfirm()", +"4f2d7ab5": "contributionMinimum()", +"4f2eebc3": "PreSaleStartTime()", +"4f318dd8": "confirmVestingSchedule(uint256,uint256,uint256,uint256,uint256)", +"4f31cc51": "frozenTokenTransfer(address,uint256,uint8)", +"4f31e3ec": "minRoundSize()", +"4f32c65b": "emitFuture(bytes32,uint256,uint256,uint256)", +"4f32de0a": "request_payout_holder()", +"4f33428a": "setConsolationRewardsRequiredFaith(uint256)", +"4f33a013": "artHash()", +"4f346a7d": "emit(address,uint256,uint256)", +"4f348b46": "getTokenAmountOnAdd(uint256)", +"4f3655a8": "verifyBet(uint256,uint256)", +"4f36fbdc": "setMinMaxPriceInWei(uint256,uint256)", +"4f36fec8": "hardCapSale()", +"4f3741b5": "RateChanged(address,uint256,uint256,uint256)", +"4f37edfd": "burnAndRetrieve(uint256)", +"4f383934": "setMyTokenList(address[])", +"4f39ca59": "drop(bytes32)", +"4f3b1fb6": "unlock(string,address,bytes32,string)", +"4f3b8938": "mythexTokenAddress()", +"4f3bb920": "lockDownPeriod()", +"4f3c1542": "getMarginRatio()", +"4f3d057a": "push(string)", +"4f3d1416": "SetOriginator(string,string,string,string,string,string,string,string,string,address,string)", +"4f3d1c27": "setLpMaxVolume(uint256)", +"4f3d3003": "participantRoundValue(address,address,uint256)", +"4f3d520c": "getClearance(address)", +"4f3ded8a": "getFinalPaymentAmount()", +"4f3df0a8": "getRemainingTimeOf(uint256)", +"4f3f2cbc": "changeFeeModifiers(address)", +"4f3f4211": "awardDailyLottery(address,uint256)", +"4f3f5746": "participatingIn(address)", +"4f3fc162": "removeOriginByIndex(uint256)", +"4f3fd173": "get10Animals(uint16)", +"4f3fed94": "tokenIncrease()", +"4f4027d0": "SHAREHOLDERS_SHARE()", +"4f4200e5": "setAddressOfERC20Token(address,address)", +"4f424da3": "Bounties_Wallet()", +"4f438a12": "provideTransactionFeedback(uint256,uint8,bytes32)", +"4f438ddb": "changePercent(uint256,uint8)", +"4f44728d": "ownerChangeOwner(address)", +"4f4522b0": "getIntelligenceValue(uint256)", +"4f452b9a": "isStormBirdContract()", +"4f4548f9": "registerAudit(bytes32,bytes,bool)", +"4f45779f": "mintTokensWithinTime(address,uint256)", +"4f45c308": "DocumentSigned(uint256,address)", +"4f466ce6": "TOTAL_T8EXTOKEN_SUPPLY()", +"4f4821e1": "createGiftTemplate(uint256,uint256,string,string)", +"4f48e46d": "get_all_payment(uint256)", +"4f494cad": "createAuction(uint256,uint128,uint128)", +"4f495513": "privateSaleTokens(address,uint256)", +"4f4a69c8": "TestTokkSale()", +"4f4a6a66": "GovernanceDelOwner(address,address)", +"4f4b30ba": "dropManualState()", +"4f4b890a": "getCET6ById(uint32)", +"4f4cd650": "getAllTellers()", +"4f4d022b": "upgradeQualificationByTokens()", +"4f4d4728": "offeringEnded()", +"4f4df442": "approve(address,uint256,uint256,uint256)", +"4f4e1b74": "founderSwitchRequest(bytes32,bytes32)", +"4f4e47f1": "stopAirdrop()", +"4f4ec991": "PubToken(uint256)", +"4f4ef121": "firstBonusSalesEnds()", +"4f4f23ef": "SundayFundayToken()", +"4f4fa5a6": "removeReferral(address)", +"4f501f27": "changeOuts(address,address,address)", +"4f504d72": "getBalanceInPlay()", +"4f50ef53": "allBids()", +"4f511102": "setDeveloper(address,address)", +"4f51bf46": "getBidIdList()", +"4f52b2bc": "findLockupIfCTD(address)", +"4f52ccfa": "beneficiary1()", +"4f53126a": "pauseGame(bool)", +"4f538ae1": "rain(address[],uint256)", +"4f53e83e": "smartProperty(uint256,string,uint8,string,address,uint256,uint256,uint256)", +"4f54f4d8": "getMatchDetails(bytes32)", +"4f5539c0": "SetPrice(uint256)", +"4f556b23": "onceoutTimePer()", +"4f558e79": "exists(uint256)", +"4f55f292": "convertIntoHtlc(bytes32,address,uint256,uint256,uint256,bytes32)", +"4f573cb2": "withdrawRevenue()", +"4f57641c": "getHorse(uint256)", +"4f58704c": "ARI()", +"4f58d5c9": "getTokenUSDRate()", +"4f5963fb": "calculateYourValueEven(uint256)", +"4f5a4eb9": "setAssetOwner(uint256,address)", +"4f5af739": "getBirthTime(uint256)", +"4f5b3318": "dateEndIco()", +"4f5b9f23": "power2(uint256,uint256,uint32,uint32)", +"4f5ba601": "airdropOn()", +"4f5c6e0a": "bonusOne(uint256)", +"4f5d06c2": "getPurchasePrice(uint256,uint256)", +"4f5d5295": "chairBalance()", +"4f5e6a8d": "whitelistedTransfer(address)", +"4f5f560a": "founderOf(uint256)", +"4f5fca97": "LimitEther()", +"4f5fcb34": "authorize(string)", +"4f6065e0": "get_presale_arbits_total(address)", +"4f60ae2e": "DividendReceived(address,uint256)", +"4f60f334": "multiAccessAddOwner(address)", +"4f610e74": "getDeclaration()", +"4f617b81": "unsetSectionForSale(uint256)", +"4f61db15": "VEGAS()", +"4f61ff8b": "kyberNetworkContract()", +"4f6247f8": "setThirdAddressBalance(address)", +"4f645993": "lastMiningBlock()", +"4f64808d": "createCustody(address)", +"4f64aa09": "advisorsLock()", +"4f64b2be": "tokens(uint256)", +"4f653f09": "_scheduleTournament()", +"4f655a61": "setMinimum(uint256,bool)", +"4f65cc3c": "ethToTokens(uint256,bool)", +"4f66a8ec": "getVotingData(uint256)", +"4f6716d3": "whitelistAddressArray(address[])", +"4f674164": "addBookSigner(bytes16,address)", +"4f67498e": "updateUSeqIndex()", +"4f6754d7": "tenEndTime()", +"4f67bd9e": "numberFor(uint256)", +"4f67fe22": "LOG_OwnerAddressChanged(address,address)", +"4f69dd3d": "triggerWithdraw(address)", +"4f6a441c": "getRandom8(uint8,uint8)", +"4f6a461a": "CatalogPlayers()", +"4f6acaa1": "getLedgerCount(string)", +"4f6adf48": "setPayOuts(uint256,string)", +"4f6b1a70": "vuePayETHDestination()", +"4f6b472d": "tokenSupplies()", +"4f6c3372": "CrowdSale_Halt()", +"4f6c63ea": "TeamRegistered(string,address,string,bool)", +"4f6c87fb": "STARTToken()", +"4f6cb43f": "advisers()", +"4f6ccce7": "tokenByIndex(uint256)", +"4f6d04e7": "createSeedCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"4f6d150d": "LuvCoin(uint256)", +"4f6d20a9": "getRewardForAddress(address,address)", +"4f6d3aed": "refundGas()", +"4f6d97ed": "MakeTransaction(address,uint256,uint256,string,string,uint8)", +"4f6d9e16": "_settleAndRestart()", +"4f6dcf74": "PoS()", +"4f6de652": "_getDepositedOrderDetails(uint256,address)", +"4f6de831": "testComplexCombination()", +"4f6fcc46": "getAirdropList()", +"4f7035b4": "DeleteAllRequests()", +"4f7132c0": "TokenDemo(uint256,string,uint8,string)", +"4f71473e": "withdrawAll(address,address[])", +"4f71ef81": "parse(bytes32)", +"4f72e1c3": "buyChamp(uint256)", +"4f731087": "checkTokenBalance()", +"4f734965": "setBBDPrice(uint256)", +"4f73928a": "setComment(bytes3,string)", +"4f739ff0": "addHouseStake()", +"4f73b7fa": "EthernityFinancialOracle()", +"4f73b8e6": "STAKE_BONUS_MIN_THRESHOLD()", +"4f73f1f8": "withdrawToAdress(address,uint256)", +"4f73f71d": "getOwlmasterReq()", +"4f7474cb": "closeAnnouncement(uint256)", +"4f74acfe": "buyEggs()", +"4f74d4f6": "ftechiz()", +"4f755fe7": "financialAccount()", +"4f75af3a": "tokensSuppliedFromReferral()", +"4f75c464": "startExit(bytes32[],uint256)", +"4f75e930": "UNLOCKINTERVAL()", +"4f7666a9": "VisionG8()", +"4f76a077": "addInvestorToWhiteList(address)", +"4f76c87c": "createSportEvent(string,uint8,uint256)", +"4f76cb02": "testGetBitFailIndexOOB()", +"4f772420": "changeFundContract(address)", +"4f779753": "DimaCoin()", +"4f77feec": "getPositionInterestRate(bytes32)", +"4f79409f": "LogBuy(address,uint256)", +"4f7ac7ab": "toteLiquidatorWallet()", +"4f7aede9": "add(uint8,address,uint256)", +"4f7baec0": "test_mint(int256)", +"4f7c6552": "calcDividends(address)", +"4f7cd683": "setReportRegistrationFee(uint256)", +"4f7d4951": "addVIP(address)", +"4f7d5de9": "setTimeRC(uint256,uint256)", +"4f7d87ac": "PoiseToken()", +"4f7dad6a": "buyToken(uint256,string,string)", +"4f7e7086": "iconiqToken()", +"4f7eb571": "getHowMuchUntilHardCap_(uint256)", +"4f7fc13f": "CLIENT_TIME_TO_DECIDE()", +"4f801270": "releasableBalanceOf(address)", +"4f802f8a": "unagreeAmendment()", +"4f803516": "getOrCreatePreviousPreviousFeeWindow()", +"4f8115a2": "tokensAddress(uint256)", +"4f817a2a": "tInstance()", +"4f81b930": "_sendFunds(address,uint256)", +"4f829ee8": "set2(uint256,uint256)", +"4f82ff41": "isCertified(uint256)", +"4f83fe64": "timeLocked(address)", +"4f840761": "demandTrial(uint256)", +"4f840c2b": "setMigrateToAddress(address)", +"4f8411e5": "_approvedFor(address,uint256)", +"4f851d73": "BineuroToken()", +"4f85769a": "closingTimePeriodOne()", +"4f8632ba": "user()", +"4f868b94": "etherSince20()", +"4f86bde2": "BuyFromFollower(address)", +"4f879ff0": "StackLottery()", +"4f883783": "CheckProofOfOwnership(bytes32)", +"4f88cc3c": "returnAllPollStakes(bytes32)", +"4f895031": "finalizeSale(uint256,uint256,uint128)", +"4f896d4f": "resolve(uint256)", +"4f8b9e64": "getBuyersList()", +"4f8c2a8a": "block02w()", +"4f8d40e1": "closeTournament(bytes32)", +"4f8da1fe": "RewardWallet(address,address,address,uint256)", +"4f8dd40a": "getOpinion(uint256)", +"4f8e2fdf": "LinkToken()", +"4f8e624e": "Greeter(string)", +"4f8fb544": "erc223Received(address,uint256,address,uint256)", +"4f8fc8ef": "setNonceForPublicKeyX(uint256,uint256)", +"4f8fe6a4": "THREE_YEAR_KEEPING()", +"4f8ffd1f": "set_contrib_arbits_min(uint256)", +"4f9000a0": "nextPrizePoolPercent()", +"4f932d44": "_generateIdentity(uint256,uint256,uint256,uint256)", +"4f935945": "capReached()", +"4f93995d": "saleNotEnd()", +"4f93b9e8": "setCommunityLock(address)", +"4f945a8a": "transferOwnCoins(address,uint256)", +"4f9559b1": "cancelOrdersUpTo(uint256)", +"4f958146": "LongLegs()", +"4f95a04b": "ethTransfer(address,uint256)", +"4f95ddec": "shopStorePrice()", +"4f95e960": "getTotalDropsOf(address)", +"4f961a6b": "RATE_TIER3()", +"4f962b72": "setPriceRate(uint256,uint256)", +"4f9660ed": "sendToTeam()", +"4f968868": "PauseTokenContract()", +"4f96ab8e": "retrieveUportInfo()", +"4f96baf1": "createNewAccount(address)", +"4f96bc00": "records(bytes32,uint16,bytes32,uint16)", +"4f96cddd": "calculatePreBonus(uint256)", +"4f96decf": "migratePlayerData1(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4f96e039": "waitingOracles()", +"4f96f446": "tier1LOT()", +"4f96fba7": "setAuditAssignBlockNumber(uint256,uint256)", +"4f97f97f": "lastCrowdsale()", +"4f9899c3": "PythonCoin()", +"4f990ef0": "card2PowerConverterSingle(uint256)", +"4f995d08": "getPeople()", +"4f996a07": "callerDel(address,address)", +"4f99a96e": "getBorrowingItemByObjId(uint64)", +"4f99b7c5": "currentDate()", +"4f99b82d": "setBurntWalletAddress(address,address)", +"4f9b7bc8": "totalTokensSale()", +"4f9bf601": "totalTxFeePercent()", +"4f9bfdac": "OVISBOOKED_BONUSTOKENS()", +"4f9c5253": "Store(string)", +"4f9c5bf3": "airdrop_percent()", +"4f9d482a": "HALF_TIME()", +"4f9d719e": "testEvent()", +"4f9da09f": "getAddressByIdSorteo(int256)", +"4f9de158": "_sendTokens(address)", +"4f9e01c3": "OCCT()", +"4f9ea1c3": "flightDone(uint32)", +"4f9ebe09": "getDonationPrice()", +"4fa037c4": "setTokenMintFeeProp(address,address,uint256)", +"4fa07325": "adddraw(uint256)", +"4fa0a4b7": "_getCanvas(uint32)", +"4fa10cfc": "getdata()", +"4fa11dd2": "setAirdorpList(address[],bool)", +"4fa20a52": "isDelayed()", +"4fa232fe": "getIcoDeflator()", +"4fa2cb50": "solved(string,string)", +"4fa3d029": "setSTFactory(address)", +"4fa3eeff": "withdraw3()", +"4fa406ee": "BeforeChipCost(uint32)", +"4fa43991": "getArtistTrack(bytes32,address)", +"4fa48a88": "isSameDay(uint256,uint256)", +"4fa4a531": "getbackTB(uint256)", +"4fa4d01a": "_averageSalePrice(uint256,uint256)", +"4fa519fa": "setValue()", +"4fa65d58": "WRLToken()", +"4fa679d8": "forward(uint256)", +"4fa6a6d5": "crowdSaleStartTimestamp()", +"4fa6caf6": "getSigner(bytes32,uint256)", +"4fa6cde4": "requestEthUsd(uint256)", +"4fa7e353": "pledgeFees(uint256)", +"4fa87fd3": "frozenFunds(address,uint256)", +"4fa88720": "setBypassStatus(address,bool)", +"4fa972e1": "maxSupplyForEra()", +"4fa99402": "spinnerCountsByType(uint256)", +"4fa99dd0": "Matching_Ethers()", +"4fa9b5d5": "seed_base_token()", +"4fa9e4dc": "getArticlesOwn()", +"4faa2d54": "getTimeElapsed()", +"4faa8a26": "depositEtherFor(address)", +"4fab2035": "newSchellingRound(uint256,uint256)", +"4fab2ca4": "testGetFrontend()", +"4fac7e41": "getOwnedTokenIds(address)", +"4fac9c65": "bonussale_WeiRaised()", +"4faca8f4": "sendTokenTeamAdvisor(address,address)", +"4fad404a": "confirmProposal(string,uint256)", +"4fad5c8a": "depositAgent(uint256,uint256,string,string)", +"4fad96dd": "DST_ICO()", +"4fae3254": "setMaxAuditDuration(uint256)", +"4faea4d6": "FrankTestToken1()", +"4faed396": "checkVotingForSendWeiFromExchange()", +"4faf9420": "airdropFor(address)", +"4fafee40": "lottoPrice()", +"4fb057ad": "ContractInstantiation(address,address)", +"4fb0a3cd": "claimTeamReserve()", +"4fb0d95e": "getLocalBountyBalance(uint16)", +"4fb19db5": "dollarCost()", +"4fb2e45d": "transferOwner(address)", +"4fb30d8b": "txs()", +"4fb31a6a": "replaceProto(uint16,uint8,uint8,uint8,uint8,uint8,uint8)", +"4fb320b2": "setClaimRate(uint256)", +"4fb34523": "deployStepFour()", +"4fb3d3b1": "getUserHistory(address)", +"4fb3fef7": "totalExecutedPerDay(uint256)", +"4fb46d5c": "getRoundStatuses(uint16)", +"4fb4bcec": "step5()", +"4fb4e833": "entryStorage(bytes32)", +"4fb4f5a3": "ETHMCoin()", +"4fb55858": "setTargetDiscountValue4(uint256)", +"4fb67111": "utfStringLength(bytes4)", +"4fb764c9": "orders()", +"4fb7f1d7": "getPastWinnerAddresses()", +"4fb8843c": "getAllBonus()", +"4fba68c5": "pWhitelist(address)", +"4fbc7e11": "enableTokenWithdrawals(address,bool)", +"4fbcd6d5": "DepositFunds()", +"4fbd051d": "verifyCertification(address,uint256)", +"4fbda01f": "LogPenaltyDisbursed(address,uint256,address,address)", +"4fbe30d4": "changeTokenRate(uint256)", +"4fbea8ea": "approveKyber(address[])", +"4fbf6e9f": "getFish(uint32)", +"4fbf6fbb": "getMultiRequestLastRequestId(uint256)", +"4fc09275": "tokenOfCreatorByIndex(address,uint256)", +"4fc0ee17": "setCreditMCCurator(address)", +"4fc28f68": "getUndistributedBalanceOf(address,uint256)", +"4fc2d3be": "setBaseExchangeRate(uint256)", +"4fc3f41a": "setCooldown(uint256)", +"4fc4b5a0": "highEtherBonusValue()", +"4fc573c7": "addrDevelopment()", +"4fc59e6b": "set_Rate(uint256)", +"4fc5a549": "StartAuction(string,uint256)", +"4fc63e02": "ExToke(address,address,address,uint256,uint256,uint256)", +"4fc78cf1": "add_reward()", +"4fc7a47d": "extra_time_bought()", +"4fc84791": "senderAddress()", +"4fc91633": "setNotLessThan(uint256)", +"4fc9584a": "messageSpanStep()", +"4fc9c91a": "identityOf(bytes32)", +"4fca3159": "rawBuy(bytes32)", +"4fca329a": "drawBookLotto()", +"4fcaadae": "_createDivCard(string,address,uint256,uint256)", +"4fcb2968": "kingSpirit()", +"4fcb9e2f": "getLastPayoutDate()", +"4fcc30d9": "AuctionSuccessful(uint256,uint256,address)", +"4fcc9e07": "getDynamicArraySize()", +"4fced032": "OneKeyToken(uint256,string,string)", +"4fcf1f39": "revealWinner(string)", +"4fcf8210": "eraseRecord(bytes32)", +"4fd0fcb6": "partnerAmountLimit(address)", +"4fd1519c": "getValidDurationBlocksData()", +"4fd23dd4": "transferMulti(address,address,address,address,address,address,address,address,address,address,uint256)", +"4fd2ee52": "getTargetContactPubKey(bytes32,address)", +"4fd394ba": "getMax(uint128[])", +"4fd3d125": "onlyAdminsCanDoThis()", +"4fd42e17": "_setLiquidationIncentive(uint256)", +"4fd4dbaa": "_emitError(bytes32)", +"4fd61333": "DataChanged(bytes32,address,string,string)", +"4fd6194d": "setup(string,address[])", +"4fd64591": "tokenClient()", +"4fd6b325": "test_5_generateSecondAccountBalance_increaseBlocksBy1000()", +"4fd6e8ac": "andTheWinnerIs()", +"4fd6ff6e": "CROSAIR_SHIP_PRICE()", +"4fd7718b": "firstStageDuration()", +"4fd798b1": "TsingDaToken()", +"4fd81926": "setMaxDividendDepth(uint256)", +"4fd839c6": "getRabbitDNK(uint32)", +"4fd8411c": "AddressChangeRequested(address,address)", +"4fd88a1c": "spendFunds(address,uint256,string)", +"4fd9c9ac": "ExposureClosed(bytes32,address,uint256,uint256)", +"4fdb7c47": "RtbRpay(address,uint256)", +"4fdb91ab": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE1()", +"4fdbe2c3": "changeFoundationAddress(address,string,address)", +"4fdc1a70": "icoCore(uint256)", +"4fdc4295": "_offerCanvasForSaleInternal(uint32,uint256,address)", +"4fdc53f6": "setTokenOwner(address,uint256)", +"4fdc5f65": "LiverpoolvsManCity()", +"4fdcd18d": "setHistory(address,uint256,uint256,uint256,uint256,uint256,string,string)", +"4fdd228d": "ownerOfPosition(bytes32)", +"4fde7cd9": "tokenToFounder()", +"4fdf4c9a": "Icebox(uint256)", +"4fdf64ce": "totalBorrowingItem()", +"4fdf8a03": "VLTMultisig()", +"4fdfcd42": "removeBytes32s(bytes32[])", +"4fe01d38": "setTokenReward(uint256)", +"4fe06988": "toTimestamp(uint256,uint256,uint256)", +"4fe0bd1e": "fundsAvailable()", +"4fe0ff1a": "submitInitialMerkleState(bytes32,uint64,bytes32[],uint256[],uint256,uint256,bytes32,uint256[2],bytes32,bytes32,uint8)", +"4fe2e15a": "checkTicket(uint256,uint256)", +"4fe2f085": "INVESTORS_TOKENS_RESERVED()", +"4fe47cb4": "emitStoreAndPay()", +"4fe47f70": "setMaxAmount(uint256)", +"4fe4a909": "returnToken(address,address,uint256,uint256)", +"4fe50bc6": "baseTokenGetRate()", +"4fe51ee6": "ValkyrieNetwork()", +"4fe5c2b4": "Vidnix()", +"4fe5f587": "CCXToken()", +"4fe61b9e": "disableBonus()", +"4fe6adb4": "NewToken(string,string,string,address)", +"4fe71e95": "withdrawUserReward()", +"4fe72439": "DEVELOPER_SUPPLY()", +"4fe7940b": "show_Balance_available_for_Sale_in_ETH_equivalent()", +"4fe81ffd": "artistsArtworks()", +"4fe82444": "addEthContribution(address,address,uint256)", +"4fe85563": "RAGTOKEN()", +"4fe87fe0": "FundsWithdrawnEvent(address,address,uint256)", +"4fe8b1a8": "changesoldierreplenishrate(uint256)", +"4fe8b4c1": "deleteData(uint256)", +"4fe8d03f": "bountyTokensTransferred()", +"4fe917fe": "reduceallmoney(address[],uint256[])", +"4fe9cc63": "InitHostBalance(address,uint256)", +"4fea572e": "ERC20Token(string,string,uint8)", +"4febb4f9": "WorldCupTeam(address,string)", +"4febe793": "NewText(string,string,address,uint256)", +"4fecf22d": "delegateManagement(address)", +"4fecf9cf": "Helex()", +"4fed1c94": "isTokenForSale(uint256)", +"4fed6a10": "teamTimelock()", +"4fed9a60": "Bonus(uint256,uint256)", +"4fedebf6": "numOfTeam()", +"4fee13fc": "startAuction(uint256,uint256)", +"4fee2437": "tokensaleStartTime()", +"4fee5360": "transferLike(address,uint256)", +"4fee63da": "securitiesOf(address)", +"4feeb18a": "priceQuerySent()", +"4ff0b071": "SILENT_Token()", +"4ff13571": "x2()", +"4ff1ddec": "TransactionConfirmedAfterExpiry(uint256,uint256)", +"4ff2bcb7": "getStageBonus(uint256,uint256)", +"4ff30c5f": "nextMintPossibleDate()", +"4ff3a989": "BLOCK()", +"4ff44fda": "_holding()", +"4ff45d73": "unapproveDisbursement()", +"4ff4ab6c": "ticketsOwners(address,uint256)", +"4ff57e9f": "airdropAndBurn()", +"4ff62627": "convertCore(address,uint256,uint256)", +"4ff6aa46": "deactivateTeam()", +"4ff6e86e": "getProviderPublicKey(address)", +"4ff7ff32": "withdrawERC20Tokens(address)", +"4ff92d6f": "getAssignedSupply()", +"4ffb01ce": "RemoveEvidence(bytes32)", +"4ffb32d3": "BlackSnailE()", +"4ffb861e": "_addAuthorization(address,address)", +"4ffc9204": "centralBankAddress()", +"4ffcd9df": "exchangeRates()", +"4ffcfefe": "m_weiBalances(address)", +"4ffd23a7": "sell(uint32)", +"50003ca6": "calculate(address)", +"5000a443": "jingZhiManager()", +"50010427": "bet(address,uint256,uint256,uint256)", +"50013a53": "LICERIOToken()", +"5001780b": "maxFundingGoal()", +"5001f3b5": "base()", +"50020560": "Accessible()", +"5002b2b9": "FusoraToken()", +"50035eb8": "getInUse(bytes20)", +"5003c2cc": "setPriceProgression(uint16)", +"5003c81d": "ERC223StandardTokenFactory(address)", +"5003d58f": "returnTokenBalance(address[2],uint256[8],uint8,bytes32[2])", +"5003e4d1": "Token(uint256,string,uint8,string,address)", +"5003efca": "extendedTokenCap()", +"50048174": "addItemLendingList(address,uint256)", +"5004e7a6": "CoinFast()", +"50050769": "changeRegistrationFee(uint256)", +"50051c20": "CELToken()", +"50058508": "getPubkey(address,address)", +"5005ba47": "setDestroyEnabled(bool)", +"50060f34": "getBatch(address,uint8)", +"5006bf0b": "internalExecuteDelegatecall(address,uint256,bytes)", +"5006e60a": "ownershipToCreator()", +"5007364f": "getLeaderboard(uint16)", +"50077f00": "jsonCat(string,string,uint256)", +"5007e47e": "getIntrospectionRegistry()", +"5007ec95": "IbzCoin()", +"5007ff15": "GridcubePlatformToken()", +"500844dd": "setTotalStakingHistory()", +"5008b7dd": "buyProduct(address,address,uint256)", +"5008cfcc": "votePerETH()", +"5008f699": "setRollover(uint256)", +"5009432d": "MAX_PRIVATE_FUNDING_SUPPLY()", +"500b6b3e": "calculationTotalSupply()", +"500b9426": "accountLocked(address)", +"500c6755": "DepositAmount(uint256,uint16)", +"500c6f21": "setManagementFeeChargePercentage(uint256,uint256)", +"500d22db": "setData_14(string)", +"500e73a4": "SSChainToken()", +"500e9eaa": "finishZeroDistribution()", +"500ec41b": "setAirState(bool)", +"50107c77": "addThing(string,bytes32,string,bytes32)", +"501146b4": "_updateNextPeriodPoints(address,uint256)", +"50114925": "transferDelegated(address,address,uint256,uint256,uint256,uint256,bytes)", +"50116afb": "decreaseAssetsCertified(uint256)", +"5011e399": "replaceSigner(address,uint256,uint8,bytes32,bytes32)", +"5012416f": "processAndCheckParam(string,address,uint8[],bytes32[],bytes32[])", +"50125546": "cancelRequest(bytes32)", +"50127418": "Question(address,string,uint256,uint256,string)", +"5012adca": "packInfo(address,bytes)", +"5012b772": "call_addr(address)", +"5012eb67": "trFee()", +"50133d50": "MinimumViableToken(uint256)", +"5013bb79": "TheTokenB()", +"50140fe5": "distributeBountyTokens(address,uint256)", +"50148ed2": "initEpochBalance()", +"5014a18e": "node_parent(uint256)", +"501578ca": "EntryAdded(bytes32,uint256,uint256)", +"50159de6": "ownerRemoveCeo(address)", +"5016128e": "isLock(address)", +"5016b9b1": "buyFromBlackMarket(uint256,uint256)", +"5016d29f": "refundedAmount(address)", +"5017f1f1": "constructor_()", +"50180944": "NEST()", +"50188301": "withdrawable()", +"5018a0fd": "withdrawAddr(address)", +"50192ae6": "test_31_assertGasUsage50Boards()", +"501957b8": "getManifest(address,bytes32,bytes32)", +"50197646": "rId()", +"501a4d68": "changeNameSymbol(string,string)", +"501a7a74": "uint256Min(uint256,uint256)", +"501b0b18": "receiveLoanOwnership(address,bytes32)", +"501bae76": "setr2VaultAddr(address)", +"501bfb60": "transferStampsToOwner(uint256)", +"501c5205": "_updateLandData(uint256,uint256,string)", +"501e3a2c": "_icoPercent()", +"501e8428": "getPart(bytes,uint256)", +"501fdd5d": "setSpecID(bytes32)", +"5020dcf4": "convertToEach(uint256,string,uint256)", +"5021051e": "setInflation()", +"50213c9f": "EXPERTS_POOL_ADDR()", +"502146db": "modify_addr(address)", +"5021783a": "addPerformer(address,string,uint8,string)", +"5021e534": "_dividendsSum(uint256[])", +"5022238f": "AVAILABLE_IN_PRE_SALE()", +"50228201": "getCollector()", +"5022d232": "CelebrityBreederToken()", +"5022e940": "experty()", +"50234173": "addNotary(address,uint256,uint256,string)", +"5023d124": "TestFactory()", +"50240158": "rejectContribution(address)", +"50240a34": "onLotteryInsurance(address)", +"502414e4": "marketMaker(string)", +"50248cd1": "ownerYHT()", +"50259cd3": "privatePreICOFreeBonusPercent()", +"5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", +"5028594a": "setBlockDotGasLimit(uint256)", +"502a86bf": "gameGiftUserDayTimes()", +"502aa3b5": "usersList(uint256)", +"502b31d2": "splitEther()", +"502b8bda": "synths(bytes4)", +"502be15e": "unregisterByList(address[],bool)", +"502c9bd5": "userAddresses(uint256)", +"502cc114": "KittyToken()", +"502d7599": "IssueTokens(address,uint256,uint256)", +"502dadb0": "disableWhitelist(address[])", +"502e3b46": "EffectAdded(uint256,uint8[])", +"502f2dee": "sendFromTeamWallet(address,uint256)", +"502fe251": "getUidLastUpdate(string)", +"5030c325": "signBuyer(uint256)", +"503129c3": "ISC()", +"50312c9e": "checkContractBalance()", +"503248fe": "minPriceForMiningUpgrade()", +"5032f33b": "TokenLocker(address,address)", +"50357beb": "buyCard(uint256,address)", +"5036258b": "disableAddress(address)", +"50364825": "InsertImage(string)", +"503667bd": "_burnFor(address,uint256)", +"503687bc": "getTokenReleasePercentage()", +"5036d610": "Presale()", +"50372085": "isTokenContract()", +"503765c6": "LOCKTokenCOINLock(address,uint256,uint256,uint256)", +"50379b5b": "IPFSHashStore(uint256)", +"5037ec62": "changeDelay(uint256)", +"5038c9c5": "getListingAtPosition(uint64)", +"50391932": "findContractVersionByAddress(address)", +"503919b1": "unblockTokens(address)", +"50392bcc": "CleanFoodCrypto()", +"50395188": "tan_lian()", +"5039c62c": "inviteHandler(bytes32)", +"503a0ef8": "requestLoans(address,uint256)", +"503a3609": "mainSaleSecondStartDate()", +"503adbf6": "changeableToken(uint16)", +"503b64c0": "setRequestProcessed(uint256,uint256)", +"503c449f": "decreasePregnantCounter()", +"503c849e": "cashOutRate()", +"503caa1b": "performPayout()", +"503caa53": "phase2TokenPriceInEth()", +"503de95b": "newCash()", +"503e11de": "getAssetIdCargoArray(uint32)", +"503e9d33": "changeWeTrustSigner(address)", +"503eb429": "destEthFoundation()", +"503ef9fe": "changeFeeAmt(uint8)", +"50400128": "RiskPrice(uint128)", +"5040307c": "amountOfOrderQueue()", +"50405fdf": "setMemberLevel(address,uint8)", +"50409041": "_computeSalesCut(uint256)", +"5040c6e7": "HardCap()", +"50411552": "challengeWinnerReward(uint256)", +"50416b93": "batchClaim(uint256,uint256)", +"5041742a": "bidOnEthSiringAuction(uint256,uint256,uint8,bytes)", +"50428f84": "insertLastPlys(uint256)", +"504291f0": "maxToSell()", +"5042ffbe": "contributeInIco()", +"504321e0": "toTeamEthContract()", +"504334c2": "setNameSymbol(string,string)", +"50449d9d": "whiteListPreSaleDuration()", +"5044b112": "getChecksumCount()", +"50473c82": "deathData_f15()", +"50479065": "cancelCreation()", +"5047b337": "changeName(bytes16)", +"5047f867": "setAirdropParams(bool,uint256)", +"5049b238": "potentialWinner()", +"5049f497": "nominate(address,address)", +"504ac982": "transfer(string,string)", +"504b0ae8": "LOG_ValueIsTooBig()", +"504b122f": "readMulti(bytes32,bytes32[])", +"504b91b5": "GeishaCoin()", +"504b97ae": "getcertifieddata(uint256)", +"504bcde7": "getAuctionTokenIDsOfOwner(address)", +"504c9582": "PARTNERS_SHARE()", +"504cceac": "purchaseTokens(uint256,address)", +"504d080b": "getActions()", +"504d27fd": "transferAmount()", +"504e6827": "setWhiteListInvestor(address)", +"504f1671": "getSize(address)", +"504f5e56": "floor(uint256)", +"504f6085": "serviceTransfer(address,uint256)", +"504fac70": "getGiftTemplateById(uint256)", +"504fbb19": "LifeChain(uint256,string,string)", +"50500934": "right28(uint256)", +"50500fac": "LaunchPartnersAddress()", +"50512420": "getPlayerDiscount(address)", +"505158bb": "getRecordsCount()", +"50515d5a": "resolveDispute(bytes16,bool)", +"50520b1f": "contribution()", +"5052587f": "Show_automated_Sell_price()", +"5052abad": "viewContribution(address)", +"50548d85": "LogMakeDeposit(address,uint256,string)", +"5054e8bf": "collectDevFees()", +"5055225f": "preSaleStartDate()", +"5055557a": "perform_selfdestruct(uint256)", +"50558dd5": "setPropheth(address)", +"5055d7c3": "withdrawnMelon()", +"50560a1a": "_oraclizeQueueWinner(bool)", +"5056a36a": "AuthorizationSet(address,bool)", +"5056b309": "getSetting()", +"50584827": "getInvestorBalances(address)", +"5058c460": "safeWithdraw(address,uint256)", +"5058f013": "periodWeek()", +"505903ba": "GetEthBalance()", +"50591478": "getChainDrawingsByChainID(bytes32)", +"5059d25a": "setContributor(address,bool)", +"5059fad1": "transferIssuer(uint256,address,address)", +"505a202b": "priceChangeName()", +"505a7bce": "pullEther(uint256,address)", +"505ba497": "processInvestment(address,uint256,address)", +"505c3c58": "MasAnu()", +"505c3d5e": "piecesOwned()", +"505d394d": "GetSeries2()", +"505da5c7": "_bonusToFighters(uint32,uint8,uint256)", +"505e71d0": "test_twoInvalidFalseEqLog()", +"505ed108": "createPetCardSeries(uint8,uint32)", +"505f2697": "rejectCertification()", +"505f5a8c": "freezeByValue(address,uint256)", +"505fb46c": "add(uint256,uint256,uint256)", +"505ff574": "register(address,uint256,bool)", +"506092f7": "getAmbientLightException(bytes32)", +"50609cea": "onTokenTransferCalled()", +"5061029d": "MINE()", +"50613afe": "getDropNotice()", +"5062ef16": "readOpentasks()", +"50635394": "claimBonus()", +"50635e2f": "CYPHERX()", +"50636a68": "ERC223Token(uint256)", +"50637dd2": "stageName()", +"5063f361": "addMembers(bytes32,address[])", +"50648403": "registerWithInviterID(uint256)", +"506535f3": "verify(address,bytes32,uint8,bytes32,bytes32)", +"50655d8c": "maker()", +"5065cbab": "geteth(address)", +"50669508": "DatasetHub()", +"50669a03": "unpauseToken()", +"5066a9ac": "setLPTargetPostion(uint256)", +"5066e2bd": "teamKeepingWithdraw(uint256)", +"5067f32d": "KALToken()", +"50685c81": "SwarmRedistribution()", +"50692d9a": "toContentID(address,string,string,address,bytes32)", +"50699e89": "requestBuywithFX(uint256)", +"5069a6a6": "calculateKebabSell(uint256)", +"506a0aaa": "reverseSplitTokensBeforeDistribution(uint256)", +"506a6a10": "tokenBonusForThird()", +"506aaede": "issueDividend()", +"506b56da": "centralBanker()", +"506bd3a6": "removeExchanger(address)", +"506bff11": "left7(uint256)", +"506cb188": "NewOrder(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"506cf560": "blackil()", +"506d54c7": "getBigWinner()", +"506d9ebd": "getData_8()", +"506dc7e1": "getUsageDetails()", +"506e106c": "setToS(string)", +"506ec095": "periodEnd()", +"506ee1ef": "traderNonces(address)", +"50710ef5": "_finalRoundWinnersFight()", +"50713dc0": "transferOwnershipManualMinter(address)", +"5071fcf0": "recoverSouls(address[],uint256[],uint256[])", +"5072a21b": "_createPotato(uint256,uint256,uint256,uint256,address)", +"5073eda3": "setPOOL_edit_25(string)", +"5074449d": "isTradable()", +"50750497": "VestingTransfer(address,address,uint256,uint256)", +"50754fac": "totalNetworkCollateralisation()", +"5076d445": "AdminClaimAirdrop(address,uint256)", +"5077ac0e": "registerImage(uint256,bytes,uint256)", +"507843f8": "assemblyShamir(uint256,uint256,uint256,uint256)", +"50787341": "normalizedEarlyPurchases()", +"507959e1": "newBeneficiary(address)", +"507a83ea": "arand(address,uint256)", +"507a8e40": "AssetToken(uint256,string,uint8,string,address)", +"507afbec": "processBuyAmount(uint256)", +"507b3450": "getKNCRateRangeSignatures()", +"507bbc7e": "isRunUpStage()", +"507d17bb": "MultiplyContract(address,address,uint256,uint256,uint256,uint256)", +"507d5954": "stopCrowdsale()", +"507d8887": "setCompte_19(string)", +"507e7888": "subscribe(string)", +"507e97a9": "setBUA(bytes32,uint256,address)", +"507eeff9": "trade(address[2],address,bytes,bytes)", +"50807ecc": "getSellerfee()", +"50818fbb": "internalGetHowMuchUntilHardCap(uint256)", +"50833515": "RestartReceivingContributions()", +"508335e6": "maxRentPeriod()", +"508343d6": "initiateEscrow(uint64,uint256,uint256,address,address,address,address)", +"5083b29f": "changeBookingFee(uint256)", +"508493bc": "tokens(address,address)", +"50849c3b": "placeoffer(uint256,uint256)", +"5084b2a3": "MintAuthority(address)", +"5084da18": "fipsOwner(bytes20)", +"5085c9f1": "numTokensInCurrentCompactData()", +"50867236": "debug_token_balanceof_faucet()", +"50872d1e": "onTransferFrom(address,address,address,uint256)", +"50872e32": "EUROQUINNToken(uint256,string,string,uint256)", +"50875b6c": "remainingLockDate()", +"508762c1": "right10(uint256)", +"5087abc7": "joinOutBattle(string)", +"50894456": "manuallyMakeOraclizeCall(uint256,uint256,bool,bool,bool)", +"508a0a9e": "NitrToken()", +"508a8976": "saleSuspended()", +"508ab47a": "showPoolContract(uint256)", +"508b0955": "testNoTokensTwoCalls()", +"508bb866": "getMyBet(uint256)", +"508cde13": "getMappingID(string,address)", +"508d0f57": "getNumberOfPeriods(uint256,uint256)", +"508d60aa": "teamETHUnlock2()", +"508df5df": "numResponseOptions()", +"508e3718": "setValidKYC(bool)", +"508f352d": "heapSort(uint16[])", +"508f46a0": "getGameSettings()", +"50904081": "purchasesCount()", +"509065b8": "mintTokensForFirstStage()", +"50909851": "ownerEmit()", +"5091c49e": "bonusSeed()", +"5091e7c4": "selfdestroy()", +"5091f881": "updateArtistCommission(uint256,uint256)", +"50921b6c": "EGGS_TO_HATCH_1CROCS()", +"509239c0": "amountContributedBy(address)", +"50928ba4": "canCreateGames()", +"5092f97e": "Company()", +"50930ca5": "doFailingTransferFrom()", +"50933a0f": "Bitnusu()", +"5093cb38": "setEtherDelta(address)", +"5093dc7d": "setValue(int256)", +"50944a8f": "setMembership(address)", +"509484d5": "setStakeContract(address)", +"509515b5": "getWinnerAccount()", +"50963bc4": "returnTokensTo(address)", +"50965f57": "currentWulinMasterPrice()", +"509720a6": "putUint(bytes32,uint256)", +"50977faf": "fetchTokenBalance()", +"5097e51f": "Public()", +"509a13dd": "RoundId()", +"509a7e54": "getRoot(bytes32,uint64,bytes)", +"509bf2bf": "axe()", +"509c3fc8": "createTestNetContract(address,address,address,uint256,uint256,uint256)", +"509c5df6": "reservedFunds()", +"509c5eee": "ASGToken()", +"509c90b3": "callTokenFallback(address,address,uint256,bytes)", +"509cd360": "Board()", +"509d6d72": "mediumPrice()", +"509d8c72": "VALUE()", +"509f0fe4": "setupFundingTime(uint256,uint256,uint256)", +"509f6ff8": "AquaToken(uint256,string,string,uint8,uint8,address)", +"509f7cf2": "testingForFun(uint256[])", +"509f8633": "create_account()", +"50a09c7a": "refBonusPercent()", +"50a09d60": "SaleIsLive()", +"50a0f733": "final_shares_sold()", +"50a107cc": "setVotingPhase()", +"50a13702": "denyChangesMultitoken(uint256)", +"50a14ea4": "returnPreSaleTokens(address,uint256)", +"50a1676e": "createdAt(uint256)", +"50a1debd": "robAll()", +"50a22ee1": "BancorGasPriceLimit(uint256)", +"50a2f067": "getfromid(address)", +"50a3bd39": "enterPool()", +"50a49f5f": "getBurnDelegates()", +"50a58b3f": "exist(address,address[])", +"50a5c872": "host_reveal(uint256)", +"50a5ebd9": "updateSpaceshipStatus()", +"50a675fe": "QQBToken(address)", +"50a6887c": "UpgradedNodelist()", +"50a6b423": "settlementPayOut(bytes32,uint256)", +"50a7755e": "newDad()", +"50a82265": "EventEmergencyStop()", +"50a8246f": "testRIPEMD160()", +"50a85d36": "DeathNode()", +"50a8d2b9": "getNumSigsOwned(bytes32)", +"50a9b541": "bootyToken()", +"50a9cbd1": "partyCoincieded(address,uint256,address)", +"50a9e127": "backup()", +"50a9eddb": "testControlSetNotUpdatableNotOwner()", +"50ab6f7f": "getMsgs()", +"50ac9828": "FileData()", +"50ad2f76": "vendGuardian(uint256)", +"50ad7321": "GPSDecayingTokenEnvironment(uint256,uint256)", +"50adc70a": "winning_country_string()", +"50adcdb7": "fundToken()", +"50ae28ea": "StandardCertificate(string,string,string,string,uint256)", +"50ae85d8": "reservedAddr()", +"50aeddcf": "censorChatMessage(uint256)", +"50b0021c": "currentRandom()", +"50b04a4e": "getCountryById(uint8)", +"50b066b2": "changelp13(address)", +"50b149a9": "setPriceStep1(uint256)", +"50b1a697": "toReferrer(uint256)", +"50b1ab69": "PET(uint256,string,string)", +"50b1f058": "fetchPaidOrdersForPayer(address)", +"50b2ae66": "transferChips(address,address,uint256)", +"50b44712": "tickets(uint256)", +"50b48c5e": "autonomousConverter()", +"50b58c06": "JuggernautToken()", +"50b5bc93": "unlockFirstTokens()", +"50b62939": "getAddressBalance(address,address)", +"50b6ba0b": "getWtoken(uint8)", +"50b79722": "setSanLength(uint256,uint256)", +"50b7b7a2": "setRating(bytes32,uint256)", +"50b7e942": "acquireTokens(uint256,uint256,address,uint256)", +"50b82a48": "objectSack()", +"50b91881": "setKycWhitelist(address,address,bool)", +"50b926fd": "UnityToken()", +"50b93b3b": "sendBuzzCafe()", +"50b9963f": "_continueTokenPurchase(address,uint256)", +"50b9c428": "oraclizeGasLimit()", +"50baa622": "withdrawToken(uint256)", +"50bacea9": "icoPhaseAmount1()", +"50bb117a": "defrostDate(address)", +"50bb4e7f": "mintWithTokenURI(address,uint256,string)", +"50bc051e": "lockedForAsset(bytes32)", +"50bc373d": "regionAvailable(uint256,uint256)", +"50bc4ae6": "_joinToProvider(uint256,address)", +"50bc6bba": "createSaleAuction(uint40,uint128,uint128,uint40)", +"50bd1933": "UberDelta()", +"50bd5cb9": "logDisputeCrowdsourcerTokensTransferred(address,address,address,uint256)", +"50bda35a": "setCharge(bool)", +"50bda77e": "updateJobRate(bytes32,uint256)", +"50be7503": "giveToken(address,uint256,address,bool)", +"50beb835": "getDeploy(uint256,uint256)", +"50beca78": "isTrainer(address)", +"50bed043": "sendFunds(address,uint8,uint256)", +"50bfeadc": "initialTokens()", +"50c007c6": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[5])", +"50c0f2b9": "licenseTermsRegistry()", +"50c0fbe4": "getBlockNumber(uint256)", +"50c15c93": "depositChecking(address,uint32)", +"50c2e4f6": "ADVISOR_SUPPLY()", +"50c34878": "priceOfAUnicornInFinney()", +"50c35227": "central_account()", +"50c38479": "resetCurrentTokenOfferingRaised()", +"50c3e676": "resolveErrorReport(uint256,bool)", +"50c40877": "Nai()", +"50c42921": "replicate()", +"50c4b64c": "_unpackAuraValue(uint256)", +"50c4ebc4": "finalTimestampOfBonusPeriod()", +"50c5c99a": "setScrapyard(address)", +"50c67734": "setPricingStrategy(address)", +"50c6784d": "ShareableMock(address[],uint256)", +"50c6a4e0": "_buyPixelBlock(uint256,uint256,uint256,uint256,bytes32)", +"50c6ef88": "setChampsName(uint256,string)", +"50c7ac75": "addint8(int8,int8)", +"50c8512b": "CollectibleNoLongerForSale(uint256,uint256)", +"50c88103": "setEruptionThreshold(uint256)", +"50c8dbd2": "totalBlocksMined()", +"50c90136": "fixedLog(uint256)", +"50c90af0": "unLockAddr()", +"50c946fe": "getNode(bytes32)", +"50ca6227": "getTokenInfoData()", +"50ca73c8": "aSetLaunch(uint256)", +"50cc5d4b": "totalWeiVolume()", +"50cca1e1": "rejectMail(uint256)", +"50ccf36b": "getWeiPriceOneUsd()", +"50cd4df2": "o()", +"50cd4f3f": "ScratchTickets(string,uint256,uint256,address)", +"50cdbb6b": "setEarlyParticipantWhitelist(address,uint256)", +"50ce761d": "NumberCreated(address)", +"50cee5a0": "addToWallet(address,uint256)", +"50cf20dd": "richtestff(uint256,string,uint8,string)", +"50cf569c": "getUserAttribution(bytes32,address)", +"50d00b95": "authorizeProcessor(address,address,string,string)", +"50d0b060": "createVestingForFounder(address)", +"50d12a72": "payReferrer(address,uint256)", +"50d15fbe": "skills(uint256)", +"50d17749": "BuyLimits(uint256,uint256)", +"50d279bd": "changeRewardMintingAmount(uint256,int256)", +"50d2bfab": "set_exchange_rate(uint256[])", +"50d491ab": "userGetPendingTxByAddress(address,address)", +"50d4a2b9": "crowdsaleGoalReached()", +"50d4bf15": "buy100ktickets()", +"50d50324": "stopSaleDepo()", +"50d5914a": "TOKENS_PER_ETHER_PRESALE()", +"50d6d893": "_rejectTransaction(uint256,address)", +"50d78f7d": "QueryFrozenCoins(address)", +"50d7bf09": "record(string,string,string,address,bool,string,string,string)", +"50d7d290": "withdraw_refund()", +"50d7da00": "GSH(uint256,string,string)", +"50d808d4": "StartTradable()", +"50d80fef": "addOffChainAddress(address,address)", +"50d8bcf3": "SMLToken(address)", +"50d925fb": "REBELCOIN()", +"50d9b932": "PatronOneWithdrawal()", +"50d9d472": "numberOfAuctions()", +"50da9f6d": "SellENS()", +"50dad350": "Hodling(bool)", +"50db7247": "maxCapPreSale()", +"50dc26ec": "TokenUser(address)", +"50dc43a1": "addGameMachine(address)", +"50dc4bfe": "addUserFeedback(address,uint256,address,string,string,string,string,string,string,uint8)", +"50dcce5a": "upPrice()", +"50ddd6f7": "addToEmployerAvgRating(address,address,uint8)", +"50de84c1": "CesiraeToken()", +"50deda1c": "addtoken(address,uint256,uint256)", +"50dede35": "marketDrugs()", +"50df10c3": "lockTill(address,uint256)", +"50df7eb4": "unsoldTokensAmount()", +"50df8f71": "isReady(uint256)", +"50e01e16": "Registered(address,bytes4,string)", +"50e036ff": "allowedContractsCount()", +"50e06b57": "Etherization()", +"50e08ddb": "devidendsOf(address)", +"50e14731": "BKEXComToken()", +"50e17308": "maxMineSize()", +"50e17975": "_badgeFreeze(uint256)", +"50e1b95a": "getShipProductClassByModel(uint16)", +"50e26c23": "getAssetBaseInfo()", +"50e27f2d": "TicTacToeLockedState(address,address,address,address,address)", +"50e28cb3": "SECOND_USER_CUT()", +"50e2ccad": "CoreTeamAndFoundersSupply()", +"50e343d0": "prWallet()", +"50e37961": "setWhitelisting(address,uint128)", +"50e38e63": "groupMemberInfo(uint32,address)", +"50e3b157": "sharesValue(uint256)", +"50e43c9c": "c(address,int256,int256)", +"50e4b069": "set0xExchangeWrapper(address)", +"50e513ac": "destroyUser()", +"50e59eb3": "isMinter()", +"50e706fb": "getProposalFunds(uint256)", +"50e72f61": "Break()", +"50e78690": "getHomeGasPrice(bytes)", +"50e7dde2": "setParetoToken(address)", +"50e81a3b": "setProviderCompleted(bool)", +"50e81e08": "_releaseToken(address)", +"50e84925": "saleEnd3()", +"50e8587e": "multiApprove(address[],uint256[])", +"50e862db": "mint(bytes32,string,uint256)", +"50e86e1e": "setOwnerValidateAddress(address)", +"50e878df": "updateOrderAmount(address,address,uint256,address,uint256,bool)", +"50e9f948": "initialFiatPerEthRate()", +"50ea1932": "lookupISO3116_1_alpha_2(bytes)", +"50ea1c95": "MyIdolCoinToken()", +"50ea53db": "transferIncorrectDisputeBondsToWinningReportingToken()", +"50ea9274": "TokenRefund(address,uint256)", +"50eb2d02": "BBNToken()", +"50eb7ec4": "SupercarToken()", +"50eba4eb": "voteSnapshotBalanceBatch(address[],uint256[])", +"50ec2a6a": "batchCancel(address[5][],uint256[6][],uint256[])", +"50ec5903": "blackListSwithcer(address)", +"50ec6b1b": "getNamelistLength()", +"50ed2a2c": "poke(uint128,uint32)", +"50ed6264": "lastStakings(address)", +"50edd8c2": "nestedFirstAnyToAny(uint256)", +"50ee6de2": "candyLand()", +"50eebaf7": "mininumPurchaseTokenQuantity()", +"50ef3bae": "getQuestionVote(string,uint256)", +"50efc7c0": "districtToBuildingsCount(uint256)", +"50f07cf9": "setReadingDelay(uint256)", +"50f0880e": "sendLimitTokensToCompany(uint256)", +"50f0f83d": "getTransferFromFromValue()", +"50f1179a": "setPriceOfAss(uint256,uint256)", +"50f1c695": "authorizedLoggers()", +"50f2fb7f": "getCalls()", +"50f3dd7a": "assembleUnicorn()", +"50f4556b": "WhiteRhino()", +"50f462a4": "validationFailed(address)", +"50f46eef": "calcToken(uint256)", +"50f49db1": "getSlideEndTime(uint256)", +"50f4f9f8": "addShare(address,uint256)", +"50f503c1": "isSspRegistered(address)", +"50f5ef78": "getWork(address,address,uint256)", +"50f71526": "necashToken()", +"50f7c204": "maxTokenSupply()", +"50f8fc97": "LogCertificationDocumentRemoved(address,bytes32)", +"50f91ee3": "withdrawTokensRemaining()", +"50f93381": "logDisputeCrowdsourcerContribution(address,address,address,address,uint256)", +"50f956db": "nextAmount()", +"50f96b5d": "minEthPerNotification()", +"50f9b39e": "getReward(address,uint256,uint256)", +"50fa5d13": "stage4BeginTime()", +"50fb5a92": "buyWithReferral(uint128)", +"50fcff5c": "extCheckHalfLife()", +"50fdb01a": "setNewWinner(address,uint256)", +"50fe533b": "getLevitatingBirds(bytes32,uint64)", +"50feacc5": "PriceManual()", +"50fed3b4": "buy(address,uint256,uint256,uint256,bool)", +"50fef2e4": "tokenAirdropLeft()", +"50ff0761": "R_N_D_WALLET()", +"50ff2015": "endAtBlock()", +"50ff722b": "getChannelsGuids()", +"50ffbe81": "checkBan(address)", +"51003cab": "minimumIcoRate()", +"510040cb": "releaseLocked()", +"5100602a": "preallocate(address,uint256)", +"5100beab": "luxuriumGold()", +"5100db6f": "SYCC()", +"51017702": "isOutcomeSet(bytes32)", +"5101880f": "CPXWallet()", +"510219cd": "defaultAuctionDuration()", +"51027320": "EUNOMIA()", +"5102ad69": "setImpactRegistry(address)", +"5102bc9d": "setTitle(uint256,string)", +"5102e238": "test_oneInvalidEqAddress()", +"5103a5a3": "certify(address,bytes32)", +"5104a3a7": "burnedTokensCount()", +"5104cb5c": "refundOnBehalf(address)", +"5105df3b": "buyTicketByEth(uint256,bytes32,bytes32,bytes32,bytes32)", +"5106b8fe": "transfer(address,address[],uint256)", +"510792c8": "hydroPartnerMap(uint256,address)", +"5107c0a8": "FBEE()", +"5107fde8": "lockedTeam()", +"510a3e2a": "round2Bonus()", +"510ae121": "Yangshuai(uint256,string,uint8,string)", +"510b1529": "issueTranche(uint256)", +"510b5158": "creator(uint256)", +"510bf040": "launchVesting()", +"510c27ad": "getOracleList()", +"510c58c9": "Gig9()", +"510c8243": "CategoryDeleted(uint256)", +"510ccb43": "getRewards(address[])", +"510de15a": "ICOSaleExtended(uint256)", +"510e23eb": "invalidEarlyPurchaseIndexes(uint256)", +"510e4235": "_createForecast(uint256,uint256,uint256)", +"510ea296": "_createDiamond(string,address,string,string,string,string)", +"510ec598": "computeCurrentReward(address,address)", +"510ef1ce": "changeQuarterSeason(int8)", +"510ef1de": "setTokenMetadata(uint256,string)", +"510f44cb": "TestFactoryUser()", +"510fbf8d": "setValue(address,string)", +"511075a9": "getIpfsForAssets(uint256[])", +"5110d31c": "TradeEthShop(address,uint256)", +"5111249e": "checkMultOverflow(uint256,uint256)", +"51114b24": "interSendWithOtherEvent(address,uint256)", +"51118f1d": "transferFromSystem(address,address,uint256)", +"5112f02c": "getCard()", +"51131017": "setUpdateGasCost(uint256)", +"511354a1": "phase2MaxTokenForSale()", +"5113d5f7": "BTCETC(uint256)", +"51142cc3": "secondStageCap()", +"5114a9aa": "TheBestICO()", +"5114cb52": "makePayment(uint256)", +"51172285": "TwoAfrica(uint256,string,string)", +"51175e01": "setNumRewardsAvailableForAddresses(uint256[],address[])", +"51180c63": "removeValue(bytes32)", +"51192814": "GenesisBuyPrice(address,address)", +"51193bad": "LUVTOKEN()", +"5119a342": "GetUserInfo()", +"511aae8b": "addFreelancerContract(address,address,uint256)", +"511acd53": "TOKEN_RATE_30_PERCENT_BONUS()", +"511b1df9": "addr(string)", +"511b445b": "nowperiod()", +"511bb41c": "rebateTwoFenmu_()", +"511bc0f6": "_addOwner(address)", +"511c5d66": "SetAddressForReturn(address)", +"511d2299": "processBNBContribution()", +"511e2613": "getoddAndEvenBets(uint256,uint256)", +"511e5639": "KamuToken()", +"511e84ce": "setIsAutoRestart(bool)", +"511eb8da": "confirmOrder(address,address,address,address,bytes32)", +"511fa487": "getMinSell(address)", +"5120429c": "TokenSold(uint256,uint256)", +"51206d81": "getRefWallet()", +"5120bb20": "transactionsOn()", +"5120f028": "sendAmount(uint256,address)", +"512202d7": "getOuvidoriaEndpoint(int256,address)", +"51223fdc": "LogClaim(uint256,address,uint256)", +"512267b0": "rewardScarcityFactor()", +"51228c4e": "addReferralProfit(address,address,uint256)", +"5122c6d1": "onSell(bytes32,uint256,address,uint256,address,uint256,address,address,uint256,uint256,uint256)", +"512392cc": "BITCOIMINIG()", +"51239fde": "multiDistribute(address[])", +"5123e1fa": "etch(address[])", +"51243676": "LogBookTicket(uint256,address,string)", +"5124ae95": "getNonces(address)", +"51252412": "crowdsaleTargetBRA()", +"51254729": "CynkciarzToken()", +"512570d6": "updateBrand(address,string,bool)", +"5125796a": "changeOraclizeProofType(bytes1)", +"51259770": "GetEthShop(address)", +"51274842": "logEvent(uint256,string,uint256,uint16,address,uint256,uint256)", +"5127a94a": "getRaisedAmount(string)", +"5127ad4c": "getTokens(address,uint256,uint256,uint256,uint256)", +"5127cab5": "rateFirstRound()", +"5128ab7b": "GetSaleInfo_Airdrop(uint8)", +"5129096c": "INGCL()", +"51290d06": "cofounderB()", +"51297cc6": "airDropTokenEnabled()", +"512a9c33": "startCrowdsale(string,string,uint8,uint256,uint256,uint256,uint256,uint256,uint256,address,string)", +"512b64c6": "_productDoesNotExist(uint256)", +"512b658d": "mintToAddress(uint256,address)", +"512c0b9c": "randomDS_updateSessionPubKeysHash(bytes32[])", +"512d62df": "getClass(uint256)", +"512d8a87": "EdwanzToken()", +"512dd020": "getItemsCount()", +"512f1e64": "orderBookLength()", +"512f8f92": "changeLottery(address)", +"512f9890": "airDropFinished()", +"512fcd60": "changeOwner3(address)", +"512ff2c9": "CHEXToken(address,address,uint256,uint256)", +"51306a80": "_isVotable(bytes32)", +"5130b405": "setMinimumBidAmount(uint256)", +"5130c857": "forking()", +"5131d3e9": "setUseFreeze(bool)", +"5131f01d": "available_shares()", +"51327a6a": "emptyToWallet()", +"513284c6": "createShop(address)", +"5132faca": "stakeTokenContract()", +"51331732": "ICO_start()", +"51331ad7": "getRoleManager()", +"513419e3": "updateStartTimeManually(uint256,uint256)", +"513485fc": "CallRejected(address,bytes32)", +"51349d5f": "scheduleTier(uint256,uint256)", +"5135077b": "setContentName(string)", +"51355362": "transferWithFee(address,uint256,uint256)", +"51355cfb": "getTier(uint256,uint256)", +"51356817": "doPull(address,uint256)", +"5135d28d": "getScore(uint256,uint256,uint256[])", +"5135dffa": "NonActivationWithdrawal(address[2],uint256[8],uint256)", +"5135f714": "Basic(address)", +"5136099c": "premium(bool,address,address,address,address[],uint256[])", +"513611e5": "setStatusTransferFrom(bool)", +"5136260d": "getLockedFundsReleaseTime()", +"51379adb": "Crowdsale(address[],uint256,uint256)", +"5137aa7b": "reveal(bytes32,uint256,bytes32)", +"5137dd99": "only666()", +"5137de7a": "privateReleaseTime()", +"5138574b": "setNextCommonTTMTokenId3(uint64)", +"51392041": "getDividendTokenBalanceOf(address)", +"513a0149": "setRocCoreAddress(address)", +"513a976e": "YaqootToken()", +"513ad9cb": "EvTokenRm(uint256,uint256,uint256)", +"513cb145": "convertToUSD(uint256,uint256)", +"513d085b": "Pandemica()", +"513d16a7": "setFundingStartTime(uint256)", +"513de1d3": "changeDivisor(uint256)", +"513f7d1e": "tokenValue(address)", +"513f99e7": "tokenFrozen(uint256)", +"513fdce9": "addClearingPriceValidator(address)", +"51401d4d": "gameMaxBetAmount()", +"51404cbe": "forceDivestOfOneInvestor(address)", +"51409f51": "currentTradingSystem()", +"5142ba74": "rolloverFeePeriod()", +"5142bc1e": "getAllowedRangeOfChoices()", +"5142c3ec": "assertEq13(bytes13,bytes13)", +"51430cb3": "claimMaxAmount()", +"51431800": "getSendableEther()", +"5143284d": "start4NormalPeriod()", +"5143659d": "claimCooldowns()", +"51436641": "convertToMiniCQS(uint256)", +"5143821e": "_moveToArea(uint16,address)", +"514385be": "disableConnectorPurchases(address,bool)", +"5143a9fe": "deposit(address,uint256,address,bytes)", +"5143e246": "mintLocked(address,uint256)", +"5143eea2": "addOwnerFromRecovery(address,address)", +"514403b3": "setnodemoney(address,uint256)", +"5144417c": "news()", +"51446e85": "CITRUX()", +"51464905": "updateGoldInvestor(address)", +"5146585a": "calcInterestRateNumerator(uint256)", +"5146690e": "reservesWallet()", +"5147af92": "buyGasLimit()", +"51489551": "getToken(bool)", +"5148ccb9": "DynamicCeiling(address,address)", +"5148de8d": "minimumTimeBeforeUpdate()", +"5149ffcb": "calculateSubmissionIndex(uint256)", +"514a48ae": "_changeApproveDate(uint256)", +"514a88ae": "revokeSchedule(address,address,address,address)", +"514ae8a6": "MagneticsToken(uint256)", +"514b13f2": "presaleConversionRate()", +"514d6e07": "horseShoeFS(uint256)", +"514d7067": "workOrderCallback(address,string,string,string)", +"514d717c": "developReserveWallet()", +"514dcfe3": "seller_accept()", +"514ec8ae": "TOKEN_CENTS()", +"514f0330": "changeProtocolFeeRecipient(address)", +"514f310f": "_NewChallenge(address,bytes32,uint256)", +"514f4711": "In(address,uint256)", +"514fcac7": "cancelOrder(uint256)", +"515053c6": "depositBond(address,uint256)", +"5150e8ce": "CPPGToken()", +"515134b3": "TianZhuCoin()", +"5151e2cc": "GREENBIT()", +"5152249c": "Paladin(uint256,string,string)", +"51524e5b": "AirDrop(address[],uint256[])", +"5152abf9": "OrderCancelled(bytes32)", +"515361f6": "assertEq(address,address)", +"515371a3": "getWinnerAddress(uint256)", +"5154865a": "crowdFundAddress()", +"51548a2d": "TOKEN_AMOUNT_ICO_STAGE2()", +"5155287a": "whitelistedMin(address)", +"51553205": "PreSale(address)", +"5155bafa": "maxPeriods()", +"5155d9c6": "getPetCardSeries(uint8)", +"51560da9": "topDogInfo()", +"51563527": "passDao()", +"51576510": "bountiesWallet()", +"51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", +"51584916": "allowexternalContract(address,uint256,bool)", +"5158c829": "RECFCO(address,address)", +"5158ea5e": "disallowUsers(address,address[])", +"51593759": "carCountOf(address)", +"515a20ba": "setExpiration(uint256)", +"515b1e41": "zss()", +"515b3557": "STARTING_CROCS()", +"515c1457": "emitTransfer(address,address,bytes32,uint256,string)", +"515cbcb4": "dropCoinsMulti(address[],uint256[])", +"515ced53": "best_submission_index()", +"515d4503": "getBarCodeDataAtIndex(bytes32,uint256)", +"515d4d52": "totalAmountsBet(uint256)", +"515da4b9": "transactionList()", +"515f128b": "COMMUNITY_POOL_TOKENS()", +"515f25ae": "launchShipOnMEA(uint256,uint8)", +"515fdde3": "migrateFunds(address,address[])", +"51602590": "threeHotHoursPriceOfTokenInWei()", +"51605d80": "imageHash()", +"5160a21e": "AddDomainInfoDocument(string,string)", +"51613683": "crowdSaleStart()", +"5162b2b2": "isAddressWhitelist(address,address)", +"5163311e": "getLastWinnerTicket()", +"51640fee": "getCertificate(uint256)", +"5164bb4d": "getCurrentStinkyLinkys()", +"51651003": "redenom_dao_fund()", +"516517ab": "make(uint256)", +"51656af5": "GuigsTokenSale(uint256,uint256,uint256,uint256,address,address,address,uint256)", +"51656f08": "AgesToken()", +"5165749e": "createToken(string,string,uint8,uint256,address)", +"516583fe": "depositFrom(uint256)", +"5165a03d": "payout(uint256,bytes32,bytes32,uint8)", +"5166b68f": "unfreezeTransfersUntil(string)", +"5166cf3d": "canAttack(address,address)", +"5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", +"5169ed0e": "getCCH_edit_29()", +"516a6b22": "PingoToken()", +"516ae993": "setChargeFee(uint256)", +"516af259": "setCurrentStage()", +"516b48fb": "insertList1(uint256,string,string,string,string,string)", +"516c731c": "setOwner(address,bool)", +"516cbe1a": "efwtest()", +"516cd39b": "revokePermissionFrom(address)", +"516d70c3": "lockAllocationAddress(address)", +"516dde43": "expiryDate()", +"516de876": "go(bytes16)", +"516dea30": "post_relayed_call(address,address,bytes,bool,uint256,uint256)", +"516e7be7": "contractFailed()", +"516e9aec": "lockAndDraw(address,uint256)", +"516ed622": "registerDINs(uint256)", +"516edc99": "UNITYCOIN()", +"516f279e": "location()", +"516f6afd": "Project_Enable(uint256)", +"516f8986": "TOKENADDRESS()", +"5170a9d0": "returnSender()", +"517125fa": "minTokensForSale()", +"51714d2d": "CIRCLECOIN()", +"517186f3": "ownerModOperator(address,bool,uint256)", +"5171bdec": "AllocationProcessed(address,address,uint256)", +"51720b41": "targetContractId()", +"51731f21": "changeFreezeTrading(bool)", +"51751612": "EtchToken()", +"51758666": "getMesa(uint256)", +"5175f65c": "_ownerApproved(address,uint256)", +"51764a94": "Lesson_3(address,uint256)", +"51768e4d": "updateItem(uint256,string,uint256,uint256,uint256)", +"51777183": "private_setRandomAPI_extract(string)", +"5177942a": "setFeeRate(uint8)", +"51780fdb": "w(address,address,uint256)", +"51784a75": "withdrawPlat()", +"517880df": "secondaryICO(bool)", +"51788439": "hashRequest(address,address,uint256,uint256,address)", +"517a626f": "getUserLengthOnEther()", +"517a70d4": "mintAmount3()", +"517a9d64": "share(address,address)", +"517afbcf": "votingController()", +"517b1d8f": "setRegionCurrentPixelPrice(uint256,uint256)", +"517b2fa8": "depositDaiFor(uint256,address)", +"517c48c3": "LATPToken()", +"517c8b12": "GetTicketOwner()", +"517cf73e": "getSupplyRate(address,uint256,uint256)", +"517d95fa": "addusermoney(address,uint256)", +"517e62ab": "getTxTimestampPaymentKWh(bytes32)", +"517ebace": "eosOf(address)", +"517ee2e8": "CSLottery()", +"517ee30d": "CreateHOLY(address,uint256)", +"517f4a23": "SalesManager()", +"517f6c51": "HardcodedCrowdsale(uint256,uint256,uint256,uint256,address)", +"517fe4de": "showUser(address)", +"51804743": "LandAccessControl(address)", +"5180629d": "transferByOwnerContract(address,uint256)", +"5181500d": "ExoplanetToken()", +"51819edb": "emergencyWithdrawParsecs(uint256)", +"5181aa01": "RELEASE_END()", +"51838717": "addSmartContract(address)", +"5183f10b": "getDataOfIdentity(bool)", +"51843b06": "supporterBalances(address)", +"51846028": "setColorsX8(uint16[8],uint256[40],uint256)", +"518496b2": "proposedWithdrawal()", +"5184c96d": "escrowList()", +"5184cc43": "getFactor()", +"5184ffc9": "setAmbiAddress(address,bytes)", +"51858e27": "emergencyPause()", +"5185b724": "allocateReservedTokens(address,uint256)", +"51867b19": "withdrawnFrom(address)", +"5187527f": "reversePurchase(address)", +"5187a7d7": "GetSign(string,address)", +"51883f6e": "RecievedAnonDonation(address,uint256)", +"5188875b": "withdrawalToken()", +"51888969": "weiRaisedPreIco()", +"5188f996": "addContract(bytes32,address)", +"51892c0f": "BIGER(address)", +"51892f07": "changeMintingAddress(address)", +"518995cd": "addClip(string)", +"518999f2": "TSTORZCo()", +"518a5b7a": "implementsMethod(address,bytes4)", +"518ab2a8": "tokensSold()", +"518ada3b": "GetUserBets(address)", +"518adacd": "notifyAuthority(string,string)", +"518b1a33": "ALLOC_LIQUID_TEAM()", +"518b4372": "getInvoices(address,uint256)", +"518b7a29": "totalDETsSold()", +"518bddd9": "getCustomer(string)", +"518bed3f": "calculateTokensAmount(uint256)", +"518c0f17": "tokensOnThisChain()", +"518d3b64": "getTotalSent()", +"518d6c2d": "_preApprove(address)", +"518d7981": "adjustBalance(address,address,int256)", +"518e62db": "createOrder(address,address,uint256,uint256,uint256)", +"518f2f10": "setAddressAuthorization(address,address,bool)", +"518fd40e": "cdtTokenAddress()", +"5190674b": "resignAsCurator(address)", +"51906bb0": "endTimeStamp()", +"51913124": "batchTransferMSM(address[],uint256[])", +"5191e37f": "listMultipleItems(uint256[],uint256,uint8)", +"51922341": "transferICOFundingToWallet(uint256)", +"5192f3c0": "boolToInt(bool)", +"519559ed": "contractMax()", +"5195e8c5": "mintData()", +"51965e75": "getRocrocId(uint256)", +"51971109": "UntungWaluyo()", +"51973391": "sentBonus()", +"51973ec9": "log()", +"5197c7aa": "getX()", +"519903f1": "unionBalance()", +"51992fcb": "addTokenAddress(address)", +"519936db": "StartAuction(string,uint256,uint256)", +"5199f1de": "lastYearTotalSupply()", +"519a078f": "getCommunitybyIndex(uint256)", +"519a1a41": "getSetup(address,bytes32)", +"519a73c3": "stopAcceptingDonation()", +"519af30e": "withdrawAllEth()", +"519be2f5": "resetDemo()", +"519bf602": "reward8()", +"519c6377": "signup(string)", +"519d1059": "setPurchased(address,address,uint256,uint256)", +"519e55da": "getStorage(string)", +"519e9a92": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1)", +"519ee19e": "tokenSold()", +"519f9590": "appointNewCFO(address)", +"51a073fb": "removeFromSpecialRatesMapping(address,address)", +"51a0aff0": "stockBuyOrder(uint256,uint256,uint256)", +"51a0c395": "myUsingOraclize()", +"51a11e94": "tokenIssued()", +"51a14c9f": "GetPartWeight(uint8,uint256)", +"51a1ad6b": "VikkyTokenAirdrop(address,address)", +"51a1c192": "get_solution()", +"51a282ae": "bidEMONTIncrement()", +"51a28572": "SALE0_RATE()", +"51a36e34": "changeCrowdfundContract(address)", +"51a3aed5": "getCompanyPreferences(string)", +"51a4cd73": "sellCoins(uint256)", +"51a4f7f2": "Har(address,address,address,uint256,uint256,uint256)", +"51a5f2f2": "ConsultingHalf(address,address)", +"51a6b851": "actual_feedout()", +"51a76924": "getSpeed(uint64,uint64)", +"51a784e3": "currentCirculating()", +"51a88a38": "PictureLibraryCoin(uint256)", +"51a8a8a4": "clearDividends(address)", +"51a8c3d7": "PausableCrowdsale(bool)", +"51a9111a": "BONUS_PRE_ICO()", +"51aa0199": "ethereumPrice()", +"51aa0a30": "modifyPMTAccount(address)", +"51aadcdf": "crowdSaleContract()", +"51ab351c": "BONUSONE_DATE()", +"51ab720d": "numOfTimesSteal()", +"51ac0d10": "getTimeBasedBonusRate()", +"51ad0299": "Ship(string,uint256)", +"51ae7f95": "COMPANY_TOKENS_LOCK_PERIOD()", +"51ae8754": "calcSectionTickets(uint256[],uint256[])", +"51af083b": "MONTH_IN_MINUTES()", +"51afc4af": "_getMinAuctionSeconds()", +"51b07a96": "getUSDT(uint256)", +"51b0b931": "updataLockPercent()", +"51b2270f": "getICOLength()", +"51b30900": "generateMemoryProof(uint256[],uint256)", +"51b3666f": "applyBooster(uint256,uint256)", +"51b3d7b9": "_transferWithReference(address,uint256,string)", +"51b41b62": "getAllOwnersOfCard(address)", +"51b42b00": "deactivate()", +"51b46399": "triggerUnpauseEvent()", +"51b488d4": "throwsWhenGettingTokensInNotInitiatedSale()", +"51b546af": "EDCoreVersion1(address,address,address,address)", +"51b59341": "MoncryptToken()", +"51b644c0": "roundedDiv(uint256,uint256)", +"51b6914a": "Lara(uint256)", +"51b699cd": "isAuthorised(address)", +"51b6fe96": "distributeTokens(address,address[],uint256[])", +"51b72a9a": "removeActivator(address)", +"51b79495": "performFeelessTransaction(address,address,bytes,uint256,bytes)", +"51b79d55": "maxPremium()", +"51b95400": "SophosToken()", +"51b98927": "_withdrawProfit()", +"51b9a2f8": "ballotVoters(uint32,address)", +"51b9c785": "step_level()", +"51ba24c7": "Token_ExchangeValue()", +"51ba5f04": "registerImpact(string,uint256,uint256)", +"51ba7534": "LastExec()", +"51babf0c": "sellToken(address,uint256,uint256,bool)", +"51bba1cc": "itemTransferred(bytes32,uint256,address,address)", +"51bcc53e": "checkFloatingOwnSupply(address,uint256,bool,uint256)", +"51bdd585": "currentChallenge()", +"51bdf229": "DummyContract(uint256,uint256,uint256[10])", +"51be2361": "InterCrypto_Wallet()", +"51c03b85": "makeBid(uint16)", +"51c08f4d": "gameTimeOut()", +"51c13af3": "MAX_ALLOWED_BOUNTY()", +"51c15991": "endGamblingParty(uint256,int256,int256)", +"51c1ae00": "DGClubCoin()", +"51c1bba1": "offlineGame(address)", +"51c221ec": "holderReserveTokens()", +"51c3934f": "getContractsByStatus(address,uint256,uint8)", +"51c3a2c6": "CPCEFundDeposit()", +"51c3a5d3": "getPollsSize()", +"51c3b8a6": "setFreezing(address,uint256,uint256,uint8)", +"51c40c6f": "setIntrospectionRegistry(address)", +"51c4e395": "logMarketCreatedCalled()", +"51c54c68": "buySprite(uint256)", +"51c54ec6": "transferAllBalance(address)", +"51c5d54d": "rateSecondWeekEnd()", +"51c65298": "exportFund()", +"51c69b12": "twoMonthsLater()", +"51c72c87": "ProofTeamVote(address)", +"51c74a9e": "addCertificate(bytes,bytes,bytes,address)", +"51c81f01": "setBursar(address)", +"51c85565": "nextTournamentBank()", +"51c875d2": "DB()", +"51c8d4d0": "get_arbits_whitelist(address,address)", +"51c8e02a": "setStore(int256)", +"51c9b233": "changepublicbonus(uint256)", +"51ca0eb8": "FACTOR_PRESALE()", +"51ca6966": "RefundableCrowdsale()", +"51ca7a94": "addNodes(string,address)", +"51cb21ff": "getgamecardname(uint256)", +"51cb6ecd": "addRandomFight2Death(uint256)", +"51cb860a": "setAccountNote(string)", +"51cb9712": "newExpertise(uint256,uint256)", +"51cbb299": "getClosingObligation(uint256)", +"51cc391d": "MULTI_SIG()", +"51cc4d1d": "payDemurrage(address,address)", +"51cc508d": "Zeinun()", +"51cc7cbe": "PawCoin()", +"51cd7c0f": "MatchPayoff(uint256,uint256,uint256,uint256)", +"51cdac6b": "find(address)", +"51ce3207": "getStockOwnerInfo(address,address)", +"51cf6b22": "burnInvestorTokens(address,address,uint256)", +"51cfa44b": "getStarTotalSupply(uint8)", +"51cfc731": "transferFromContract(address[],uint256[])", +"51cfdd58": "Dewcoin()", +"51cff8d9": "withdraw(address)", +"51d10161": "boughtToday(address)", +"51d20c7c": "Exchange_ETH2LuToken(uint256)", +"51d24a33": "addNewBoard(bytes32,string)", +"51d28a7e": "saleTokenPrice()", +"51d2a1e4": "getDepositRoot(bytes)", +"51d2a8fe": "BIKSPRO(uint256,string,uint8,string)", +"51d2cc8f": "grid(uint256)", +"51d31822": "setMarketAddr(address)", +"51d34040": "returnBet(bytes32)", +"51d38d5f": "addDeveloper(address,string)", +"51d467f5": "getLogFillArguments()", +"51d53bee": "HRHToken(uint256,string,uint8,string)", +"51d550d2": "getPendingBalance(address)", +"51d59a20": "impl_incomeOf10k()", +"51d5d98d": "hasEnoughTokensLeft(uint256)", +"51d5f44f": "saleHero(uint256)", +"51d6e547": "getNonce(bytes)", +"51d74ce5": "SetWageredWei(bytes32,uint256)", +"51d75dc6": "BUYER_STEP_2(bytes32)", +"51d962e1": "endRelease()", +"51d977a6": "TEST()", +"51d997b2": "isAbstainAllow()", +"51da463a": "_revokeAccess(bytes32,address,address)", +"51dabd45": "disapproveAll(address)", +"51dbc419": "_drainGame(bytes32,address,uint256[10])", +"51dc7659": "winNum()", +"51dc7f7d": "setPreferredCurrency(address,bytes4)", +"51dd3164": "getCurrentMinimum()", +"51dd8119": "announceFork(string,string,uint256)", +"51de097f": "e_Withdraw(uint256,uint256,uint256)", +"51de5541": "castUpgradeVote(uint8,address,bool)", +"51dea0ae": "updateOwnerShares(address[],uint256[])", +"51ded741": "rateThirdWeekEnd()", +"51df6d27": "GlobalLotteryToken()", +"51df9db9": "newPrice()", +"51dfc14d": "tokensOfferedOf(address)", +"51dff989": "redeemVerify(address,address,uint256,uint256)", +"51e00935": "Arrays()", +"51e09631": "totalVestedTokens()", +"51e0e26b": "allowedContracts(address)", +"51e10aa6": "calculateToFund()", +"51e16546": "_payFee(uint128,address)", +"51e1d427": "boolMemoryArray()", +"51e1ee12": "ContractorProposalClosed(uint256,uint256,address,uint256)", +"51e22125": "addPresaleWhitelist(address,uint256)", +"51e4eb07": "setContributionLockPeriod(uint256)", +"51e51b55": "startPreSalePhase()", +"51e55767": "getWeiPerContributor(address)", +"51e699a8": "setMainSaleDates(uint256)", +"51e6ba1d": "toggleContractFreeze()", +"51e6edee": "RETZO()", +"51e7f12e": "_doDestroyTokens(address,uint256)", +"51e82eec": "totalSetCredit()", +"51e94406": "weiRaisedPreSale()", +"51e946d5": "freezeAddress(address)", +"51ea468b": "getSupportersAddress()", +"51eace10": "unfreezeStartTime()", +"51eb5e93": "overdraftPeriodLength()", +"51ebe2f1": "bursarAddress()", +"51ec4285": "unvote(uint256)", +"51ec4525": "first_player()", +"51ec4fc7": "limitAddress(address)", +"51ec8433": "STTadmin2()", +"51ecabd6": "toPayable(address)", +"51ecfd16": "getCatPrice(uint256)", +"51ed17a4": "reservedTokensList(address)", +"51ed8288": "buyNFT(uint256)", +"51ed96b9": "enableContribPeriod()", +"51edbdbb": "setForeignBridgeErcToErcImplementation(address)", +"51edffed": "identifierIsOriginal(uint256)", +"51ee387d": "dividendsAvailable(address)", +"51ee43e5": "lottery(int8)", +"51eec810": "setCapitalization(uint256)", +"51eecc23": "setupBounty(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"51f1333e": "relievePool(uint256)", +"51f1fa97": "POHStartTime()", +"51f2f1d1": "timeTransferbleUntil()", +"51f364d5": "currentCostToPress()", +"51f3a7bd": "CoinFlip()", +"51f3b4bd": "collectFees(uint256,address)", +"51f468c0": "setClaimPrice(uint256)", +"51f4ec50": "setWriterId(bytes32,bytes32)", +"51f514d3": "computePayeeBalance(address,address,uint256)", +"51f550be": "IcoSupply()", +"51f59db2": "test_claimShares_emptyFeePool_notTranscoder()", +"51f68d80": "calculateLRCUnlockAmount(uint256,uint256)", +"51f6d8c6": "setBalances(address[],address,uint256[])", +"51f6f870": "createMicroModule(uint256)", +"51f80746": "DXBToken()", +"51f91066": "tag()", +"51f93215": "bond(bytes32,uint256)", +"51f96d33": "verifySignature(address,address,address,uint8,bytes32,bytes32)", +"51f9ff35": "lastDividendIncreaseDate()", +"51fa5810": "getEnginesIds()", +"51fa7efd": "returnAmountToMainAccount(uint256)", +"51fab7ff": "transferRemaining()", +"51fae45d": "astroIDPool()", +"51fafb72": "setSubscribe()", +"51fafd95": "cashierAddr()", +"51fb012d": "whitelistEnabled()", +"51fb3043": "tokensForPresale2()", +"51fb4001": "rateIcoMainSale()", +"51fba575": "NRB_Users()", +"51fbd91e": "donationsReceiver_()", +"51fbfe9d": "migrationCountComplete()", +"51fc6f59": "TokenManagerEntity()", +"51fd2c69": "quantityHeldInCustodyOfExchange(address)", +"51fdaf92": "checkExpiredfunds()", +"51ff1a06": "PaparazzoToken()", +"51ff4847": "signature()", +"51ffcab3": "bid(uint32)", +"51ffd9e7": "getRatePerTimeUnits(uint256,uint256)", +"52006050": "setBurnBounds(uint256,uint256)", +"5200d643": "OPENING_TIME()", +"52013484": "CalcWinnersAndReward(uint256[],uint256)", +"52019dc3": "payTokens()", +"5201effb": "setCompletionTime(uint256)", +"520282d0": "getBcouponAllocationFactor()", +"5202b615": "numberOfClosedGames()", +"52030899": "preSaleBlockNumber()", +"5204cfe1": "OpenRedEnvelope(string)", +"520543ab": "endStage2()", +"52058d8a": "tokenSupplyCap()", +"5205b80f": "getLeftToken()", +"52063985": "unlockAddr()", +"5206fea3": "_transfer(string,string,uint256)", +"5207c391": "setWhitelistedBatch(address[],uint256)", +"5208a157": "getCardsFromHash(uint256,uint256,uint256)", +"5208ce36": "STQPreICOTestHelper(address,address)", +"52091047": "changeVotingRules(address,uint256,uint256)", +"520929b6": "AlgeriaToken()", +"520aea97": "setNote(uint256,bytes32,bytes20,string)", +"520b1b65": "testGetAllCases()", +"520ba154": "changeAcct2(address)", +"520bbba3": "generateRequestAttestationSchemaHash(address,address,address,bytes32,uint256[],bytes32)", +"520bf4d8": "SmallInts()", +"520c37b7": "setOCGFee(address)", +"520c3db7": "relayRelease(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"520c5828": "whitelisting()", +"520c7c8c": "bountiesAllocation()", +"520c7d6f": "PAYOUT_ATTEMPT_INTERVAL()", +"520ce36a": "Permian()", +"520ce39e": "DamnRocks()", +"520d3f0d": "getrate()", +"520e12d7": "getCertAddressByID(string)", +"520e7b0e": "offer_energy(uint32,uint32,uint64,uint64)", +"520e8143": "returnTokenToWallet()", +"520eb620": "getTemplateByProposal(address,uint8)", +"520ee757": "NewSandwichTicket(string,address,string,string)", +"520fa2c1": "BetleyToken()", +"520fd799": "Nplay()", +"52108d4c": "setCCH_edit_30(string)", +"5210eb56": "targetAddress()", +"5211ac2e": "withdrawWei()", +"5211e91e": "CSTToken()", +"5211f843": "bbNetworkGrowthWallet()", +"52122abf": "JackpotHits()", +"52125b86": "eventcount()", +"5212e6ea": "firstExtendedBonusSalesEnds()", +"5213cca8": "AdvisorPoolAddress()", +"52146744": "AteamBets(uint256)", +"52159bcf": "CreateCityData(address,uint256,uint256)", +"5215ad0b": "batchTransfer(address,address[],uint256)", +"5215cb88": "onPresaleComplete()", +"5216509a": "numCandidates()", +"5216aeec": "totalInvested()", +"5217b774": "redeem_withdraw(address,address,uint256)", +"5217cdff": "greyToken()", +"52180208": "take(address,uint256)", +"5218402d": "claim_bix_with_not_start()", +"52185f0e": "isWithinAllocation(address,uint256)", +"5218bfbb": "getOffer(bytes32,address)", +"5218c37d": "bulkRejectTransfers(uint256[],uint256[])", +"5218f3b3": "CoinStocker()", +"52194acf": "addBank(address,address,uint256)", +"52196812": "getLoanCount()", +"5219823a": "hashMessage(bytes)", +"52199094": "setBurningPercentage(uint256)", +"5219a566": "hashForSignature(bytes32,uint256,address,bytes32)", +"5219a72a": "mcgregortoken()", +"5219ffb8": "withdraw_tokens_for(address)", +"521af962": "DataBrokerDaoToken(address)", +"521b20ec": "highestBidAddress()", +"521b601a": "setData_26(string)", +"521b7499": "setStageVolumeBonuses(uint256,uint256[],uint8[])", +"521be69c": "applyTokens(address,uint256)", +"521c82be": "getCCH_edit_17()", +"521cd656": "playersAmounts(address)", +"521ceba7": "pusherTracker_()", +"521d56c6": "regeneration()", +"521d80f8": "fundsTransfered()", +"521e5770": "fechCurrentSnapshotBlockIndex()", +"521eb273": "wallet()", +"521ec3af": "MGLTToken()", +"521ee1ae": "purchaseFor(address,address)", +"521f4195": "isOwn(address,uint64)", +"521fba45": "setTokenInfo(string,address,address)", +"521fba71": "getRandom256()", +"521fbd3a": "deploytime()", +"521fd5be": "getSingleBet(uint32,uint32)", +"52200a13": "getNumHolders(uint256)", +"522103fa": "changeUnicorn(uint256,address)", +"5222cd8a": "Deal(bool,uint8)", +"5223478a": "setIsPoop(bool)", +"52238fdd": "calculateFees(uint256)", +"522471fc": "setTotalWithdraw(uint256,address,uint256,address,bytes,bytes)", +"5224dfbe": "mainTokensPerDollar()", +"52251884": "setForwardPurchaseFeesTo(address)", +"52253542": "playSingleDiceBet(uint256,uint256)", +"5225528e": "getBadAddresses()", +"522567c8": "transferedTokenOf(address)", +"52256d44": "MuratCoin()", +"522577e9": "totalIncome()", +"522637e7": "CMCLToken(uint256,string,string,address)", +"52279295": "interestRatePerCycle()", +"52288195": "Sell(uint256)", +"5229c56f": "getDecreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", +"522a6cf3": "computeMilkSellPrice()", +"522afaec": "increase(address,uint256)", +"522bb704": "run(address)", +"522c8401": "bidOnSiring(uint256,uint256,uint256)", +"522dba5b": "GoldTokenMinter()", +"522dc0b1": "walletsFromUser()", +"522dd549": "advisor3Sum()", +"522de7d3": "verifySubmissionIndex(uint256,uint256,uint256)", +"522dff9a": "setMocount(uint256)", +"522e1177": "complete()", +"522e2d3c": "BiathlonToken(address,address,string,string,uint256,address)", +"522e35fb": "changeIssueManager(address)", +"522e4c8a": "addStaff(address)", +"522f6815": "withdrawEther(address,uint256)", +"522f9585": "setNewWallet2(address)", +"52306f4a": "isCBE(address)", +"52314508": "registerOutcome(string,uint256)", +"5232d457": "PayoutEvent(uint256,address,uint256)", +"52337ab0": "interact()", +"52346412": "transfers(address[],uint256[])", +"52353e5b": "assetsOnDeposit()", +"52357779": "currentRId_()", +"523615aa": "AddApprovedAddress(address,address)", +"52374af1": "bitPremiumToken()", +"52375093": "m_lastDay()", +"5237d235": "getRightToken()", +"5237e325": "getAdIdByCat(uint256,uint256)", +"52380eba": "entitled()", +"52380f65": "MoneyAddedForRefund(address,uint256,uint256)", +"52388c1b": "AndreisToken()", +"523898f4": "cooperativeClose(address,uint8,uint256,bytes,bytes)", +"523934bb": "registerExport(bytes8,bytes8,uint256)", +"52393d45": "SGDT()", +"523a0b0d": "privateMaxEtherCap()", +"523a3f08": "withdrawReward(uint256)", +"523ad959": "bullAmount()", +"523aee69": "changeTokenContract(address)", +"523afb0d": "bet(bool)", +"523b6ae3": "MycoinToken(address,address)", +"523c02f5": "getRateForExternal(string)", +"523ccfa8": "isKnownCall(address)", +"523d897e": "wsub(uint128,uint128)", +"523da442": "getCurrentBonusTier()", +"523deadb": "getOwner(address,address)", +"523e27d4": "currentInvestor()", +"523e57be": "mintForHolders(address[],uint256[])", +"523e9551": "increaseCap(uint256)", +"523f110e": "updateRegion(address[16],uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", +"523f52c6": "setTgeIssuer(address)", +"523f53a6": "IntigoTest()", +"523f891c": "totalEligibleVotes()", +"523fba7f": "tokenBalances(address)", +"5240346d": "TV()", +"52405f56": "getMilestoneInformation(uint256)", +"52411891": "add(uint256[2])", +"52415840": "testMe()", +"5241590d": "addToAddressBalancesInfo(address,uint256)", +"52416347": "ParameterSet(string,string)", +"5241b39d": "renewal()", +"52437187": "callLib(uint256)", +"5244128a": "_claimableTokens(address)", +"52441d7d": "getCurrentUserShareBonus()", +"52447ad2": "doMint(int256,uint256)", +"52447d92": "burn_from(address,address,uint256)", +"5244d9a8": "removeIdentifier(bytes32)", +"5244ed87": "joinToTrack(uint256)", +"524559a3": "periodPreICO()", +"5245849e": "allowedAmountToTransferToPool()", +"5246a8df": "verifySig(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,address)", +"524705ef": "getsysdayeths()", +"52476ceb": "shareTimeGap()", +"524773ce": "burnCount()", +"5247b9e9": "firstMintRound0For(address[],uint256[],bool[])", +"5248f2c8": "removeBankroll()", +"52494a14": "_isOwner()", +"5249be25": "tokenPriceUsd()", +"524a2ed9": "setBAUU(bytes32,address,uint256,uint256)", +"524a8131": "STARTING_ASSET_BASE()", +"524aa413": "ValidateWorldSnapshot(uint256)", +"524aae98": "getPromoLOTEarnt(uint256)", +"524b5cb9": "approveMintDelegate(address,int256)", +"524bd747": "getNbDemandes()", +"524d5ddb": "wagerPool5()", +"524d7daf": "verifyGame(uint256)", +"524d81d3": "numContracts()", +"524dcda3": "MINT_LOCK_DURATION_IN_WEEKS()", +"524e1149": "joinCreateGame()", +"524e2444": "setPI_edit_32(string)", +"524e4e61": "testDistribution()", +"524e65b9": "_getWinnerBetted(uint32,uint32)", +"524e915d": "player4Timestamp()", +"524eb29c": "setRequestBurnerContract(address)", +"524ee639": "setSpaceImpulse(address)", +"524f3889": "getPrice(string)", +"524fa7b9": "whitelistAdd(address)", +"52507790": "transferAfterDeadline()", +"52512599": "latpToken()", +"5251a343": "stopPurchaseTokens()", +"52529852": "W0kiT0ken()", +"5252cb2f": "generateUnsoldTokens(uint256)", +"525417f1": "getNextKeyTime()", +"52541b68": "takeAGuess(uint8)", +"525426fd": "increaseUSDRaised(uint256)", +"52545021": "AkshayToken(uint256,string,string)", +"52548946": "isSimple()", +"5254a38c": "onERC721Received(uint256,address,bytes)", +"5254b595": "TransferIndex()", +"5254b660": "canDeCompose(string)", +"5254c846": "getAction(uint8)", +"525550ea": "rescueAddress()", +"52556421": "getIssuer()", +"52556a46": "State(address[])", +"52558c2b": "CSPTToken()", +"5255a07b": "HeroTokenAuction(uint256)", +"5256a36e": "MAX_ICO_GOAL()", +"5256fcaf": "_giveRNG(uint256,uint256)", +"52573529": "setupPeg(address,address)", +"52578012": "createService(string)", +"5257c2b3": "soldTokenInPresale()", +"5257c508": "ico1Cap()", +"5257c825": "registerNameXIDFromDapp(address,bytes32,uint256,bool,uint8)", +"5257cd90": "randomNumbers(uint256)", +"5258d9f4": "unequipSingle(uint256)", +"5259347d": "default_helper()", +"52595c0d": "getOraFee()", +"5259fcb4": "centsRaised()", +"525a0ac8": "Claim(address,uint256,bool,string)", +"525a8cf0": "add_product(uint256,uint256,string,string,string,string,string)", +"525b25b1": "getDeploymentReward()", +"525b3fe3": "presaleLimit()", +"525c3966": "GMCB()", +"525cedae": "TeamTokensAllocation()", +"525d0537": "getWinnerFunds(uint256[])", +"525f8a5c": "setSaleStartTime(uint256)", +"525ffb7c": "ownersPayed()", +"52608d85": "rateEth()", +"5260de57": "numberOfTokensPerUser()", +"52613423": "OLOVE(uint256,string,string)", +"52617234": "changeSalePeriod(uint256,uint256)", +"5261ee83": "amountOfOwners()", +"5262c873": "calcGain()", +"52631ab4": "lastNonce()", +"52638d75": "create(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"5263ba87": "getLatestPatchTree(bytes32,uint32,uint32)", +"5263dbf3": "RooToken()", +"52642070": "DinarETHCrypto()", +"526441bb": "ExecutionFailure(uint256)", +"5264ff53": "test_forAgainst()", +"5265440c": "checkIsAttached(uint256)", +"5265565e": "_ecosysSupply()", +"5265a078": "getMemoryWordsLog2()", +"5265db80": "setPriceRatePhase1(uint256)", +"526606c9": "addFreezer(address)", +"52666403": "lockRewardToken(address)", +"5266cc7b": "init(address,uint256[],uint256,uint256,uint256,uint256,uint8,string,string,uint8,bool)", +"52675be3": "getElectionName(uint256)", +"5267bd0c": "allowedRefund()", +"5267e681": "Tokens_Per_Dollar_Numerator()", +"526825af": "updateFcontracts(uint256)", +"526938f8": "left35(uint256)", +"5269660c": "createInvestment(uint8[])", +"526a6b48": "transferTo(address,uint256,bytes,bytes)", +"526a99c8": "getJackpotLoseSide(address,address)", +"526aadc2": "mintBaseLockedTokens(address,uint256,uint256,uint256)", +"526b71f4": "InvestboxToken()", +"526b8462": "getPersiansOnTheBattlefield(address)", +"526b91d1": "transferSysAdmin(address)", +"526ba9fa": "TSB()", +"526bc7fa": "getGenCode()", +"526cb803": "getAllOfferingProposals(address)", +"526de5ea": "addChunk2ToWhiteList()", +"526e4d79": "requestRemainingTokens()", +"526e7f3a": "AWD()", +"526f652d": "propertyIdToOwner(uint256)", +"526ff1f0": "TLB()", +"52700ef0": "_changeClosingTime()", +"52704644": "transferFromInternalstaffdisbursementfund(address,uint256)", +"52709725": "owner2()", +"5270aa7d": "EtherGoToken()", +"5270d70d": "readBytes32s(bytes32[])", +"5271027b": "rentFlatDaily(uint256)", +"5271309f": "migrationInfoSetter()", +"5271500b": "batchAddCandidate(address[],bytes32[],bytes32[])", +"52736814": "dutchAuctionToBuy()", +"52748cfe": "addDataResponseToOrder(address,address,address,string,bytes)", +"52753640": "registerXRateProvider(address)", +"52757292": "getEventSecond(uint256)", +"527596bf": "getDeployedChildContracts()", +"5276b91c": "BlackHToken()", +"52772264": "Contract(bytes32)", +"52774565": "getMyLockedFunds()", +"527749a4": "add_bounty(uint256,bytes32)", +"5277fda5": "bookWithEth(uint256,uint256,bytes,string,uint256[],bytes32)", +"52782648": "emitSkillAreasSet(address,uint256)", +"527942ac": "secondWeekPreICOBonusEstimate()", +"52798dae": "buyTicketByEarnings(uint256,uint256,string)", +"5279a5f8": "levelThreeTokenNum()", +"527aea0a": "getWeiBalance(address,address)", +"527ba1e1": "setIV_S(uint256)", +"527c08ec": "Max_CAP()", +"527cc85a": "Zxcvbnm()", +"527d8f12": "ping(uint256,bool)", +"527f0900": "IncPrivateSupply(uint256)", +"527f4ff1": "setTransferAddressUser(address,address)", +"52802121": "depositEther(address)", +"528050a9": "salePreiodChanged(uint256)", +"5280b8ad": "getAmountBounus(uint256)", +"5280c3ee": "dealToken()", +"52810d5e": "UnitToken(uint256,string,string)", +"52812053": "outstandingQuarters()", +"5281947d": "cancelAdoptionOffer(bytes5)", +"5281bbe9": "contractExpirationTime()", +"5282f649": "risedUSD()", +"5283f339": "getAddress(address,string)", +"5283fd87": "giveReward(uint256[4],bool,uint32[4])", +"52848d8d": "kcck256strstr(string,string)", +"5284a4c7": "allocateReferalBonus(address)", +"5284b044": "Products()", +"5284e3d8": "RobotTradingIco(address)", +"5284e660": "_getEndOfLastMiningDay()", +"52855882": "confirmAddress(bytes16)", +"52860ea2": "ADDITIONAL_BONUS_DENOM()", +"528626fc": "updateNextStealTimeByOperator(uint32)", +"52879334": "requireNotZero(address)", +"52879ba6": "roleCheck(string,address,address)", +"5287ce12": "getDepositInfo(address)", +"52883fc6": "addTokenBalance(address,address,uint256)", +"52892478": "disburseAuthorizedPayment(uint256)", +"52892baf": "localConst()", +"52894449": "lastBlock_f17Hash_uint256()", +"528976de": "issueRefunds(address[])", +"528a683c": "keyExists(string,string)", +"528b5176": "zgetOtherContract()", +"528b8ed8": "MaxBusiness()", +"528ce7de": "withdrawByRndNo(uint256)", +"528d4156": "authorizedCreateTokens(address,uint256)", +"528d8797": "ModiTokenERC20(uint256,string,string)", +"528d9479": "FeeUpdated(uint256,uint256)", +"528eb417": "Demome()", +"528ebdd5": "noSales()", +"528eedcb": "sendSafe(address,address,uint256)", +"528ef5a1": "UNINAcoin()", +"528fa135": "changeStartTime(uint64)", +"528fd7b0": "manualPayExpiredDuel()", +"52909fc2": "dynamicExchangeChecks(bytes,uint256)", +"5290d773": "amountBurned()", +"52911bd8": "doesOwnEthHandle(bytes32,address)", +"52916687": "setAuditRegistrar(uint256,address)", +"52929a0c": "disable_throwing()", +"5292af1f": "sendBalance(address)", +"5292c1a9": "testThrowsRestartEnforceRevisions()", +"5292c8f1": "validContribution(address,address,uint256)", +"5293a436": "EscapeHatchCallerChanged(address)", +"5293f22f": "EOSRegistration(string)", +"5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", +"5294188b": "randomizerLottery(bytes32,address)", +"5294409f": "Mineable()", +"5294924d": "getMyLastFreeLotteryTimestamp()", +"5294bb2b": "unpayPooling()", +"5294d0e8": "tokensUnlockable(address,bytes32)", +"52954e5a": "makerTransferAsset(address,uint256)", +"52959d16": "ambiC()", +"5296085e": "callServer(address,uint256)", +"529865c9": "preBuy2()", +"5299ccc6": "isSubjectApproved()", +"529a7d6c": "BurnProposalAdded(uint256,address,uint256)", +"529ae0bf": "maxEthPerAddress()", +"529af369": "createAndSellAllAmountPayEth(address,address,address,address,uint256)", +"529b8e60": "ergebnis()", +"529d15cc": "sequence()", +"529d4800": "getLockedWalletGroup(address)", +"529db099": "viewAllControls(bool)", +"529dbdb5": "getMs(uint256)", +"529e65e1": "removeShopModerator(address)", +"529e6713": "setCustodyFactory(address)", +"529f0fb8": "setFee2(uint256)", +"52a00779": "bountyDelivered()", +"52a08c29": "jackpotPersent()", +"52a0b5ac": "registerBasket(address,address,string,string,address[],uint256[])", +"52a0cf38": "p2pUnlocker(address)", +"52a16bb0": "amountSold()", +"52a23bbb": "approveTokenTransfer(address,address,uint256)", +"52a2695c": "isReachedGoal()", +"52a2720c": "extraTokensTransferred()", +"52a27baf": "read_user_daily_limit(address)", +"52a36938": "initDisabled()", +"52a554a1": "voteBoardProposal(uint256,address,bool)", +"52a5b002": "lastInterestCycle()", +"52a6f970": "ZHEY()", +"52a74b82": "getDebugNumber()", +"52a7cae5": "BitAlphaAirdrop(address[])", +"52a80129": "unlistQualifiedPartner(address)", +"52a82b65": "digest()", +"52a8aeab": "controller1()", +"52a8fe93": "kscBurnWhenUseInSidechain(address,uint256,string)", +"52a9039c": "allocations(address)", +"52a94adb": "TRMCrowdsale()", +"52a982d3": "distributeTokensRange(uint256,uint256)", +"52a9a35e": "retireAdmin(address)", +"52a9cd2d": "changeOwnerVault(address)", +"52aa2ae9": "enterPreSale()", +"52aadf3b": "generateLuckFactor(uint128)", +"52aaead8": "priceLastUpdated()", +"52ac3235": "amountOfQuotations()", +"52ac882c": "retirementManager()", +"52ad2aa8": "__getStore(uint256)", +"52ad4116": "getCrowdsaleStartAndEndTimes(address,bytes32)", +"52ad6468": "SHARE_FOUNDATION()", +"52ae68f6": "getRoundBonusPot(uint256)", +"52af1c04": "parseMessage(bytes)", +"52af719f": "initialize(uint256,address[],address)", +"52af89af": "getsum(uint256[])", +"52afbc33": "scheduleCall(address,bytes4,bytes32,uint256,uint8,uint256)", +"52b1e14a": "insertUser(address,string,uint256)", +"52b33d64": "clientmanagerShare()", +"52b4643c": "Fallback()", +"52b4be89": "totalBuyCardNumber()", +"52b566e4": "CitiDynamicsCoin()", +"52b5e85c": "firstPhaseEndTime()", +"52b5ff39": "RBAC()", +"52b75219": "freezeToken(address,uint256,uint256)", +"52b7fddb": "createMechVRC(uint256,address)", +"52b860eb": "tokenBonusForFifth()", +"52baee20": "getAllHpbNodesByStageNum(uint256)", +"52bafbfa": "vestingBeneficiaryForIndex(address,uint256)", +"52bafde9": "playersSignedUp()", +"52bbde34": "BiddingRing(address,uint256)", +"52bca4c3": "phaseOneCap()", +"52bd6945": "sellReply(uint256,uint256,uint256)", +"52bd9914": "TimeEnd()", +"52bddee6": "uintCeil(uint256,uint256)", +"52bf74b3": "airDropCoin(uint256)", +"52c01fab": "isEntrant(address)", +"52c05ca5": "setWeiPerBlock(uint256)", +"52c0b9f7": "ICO_START3()", +"52c1c03a": "removeUnlockedAddress(address,address)", +"52c1d3d5": "ZenomeCrowdsale()", +"52c204d0": "ICOMeetupToken()", +"52c22a72": "cancelContract(address,address,uint256,string)", +"52c28fab": "add(address,address)", +"52c34e68": "getStandardRobot()", +"52c53cb7": "checkPoint(int256,uint8,int256,uint16)", +"52c5785b": "purchaseTokensPreSale(address)", +"52c5b4cc": "setAuthorizations(address,address[])", +"52c5d892": "withdrawOwnersFunds()", +"52c700ea": "crowdsaleStop()", +"52c743d2": "callDestination()", +"52c76b8e": "TokenGame(uint256)", +"52c76de9": "addDiscountPhase(string,uint8,uint256,uint256)", +"52c790ee": "confirmTokens(address)", +"52c7c9e4": "isSubmission(bytes32)", +"52c8df64": "getFund(uint256)", +"52c91d43": "getLinkedWETHAddress()", +"52c944b2": "removeFromTokenLocked(address[])", +"52c98e33": "checkClaim(address,uint256,uint256)", +"52c9b906": "founderTokenWithdrawnPhase1()", +"52cb2a7b": "calcTransfer(uint256)", +"52cb36cd": "_getUtTotal()", +"52cb7688": "suspendSale(bool)", +"52cbfe09": "summAirdrop()", +"52cc5fdc": "retrieveMyEth(string)", +"52cd972d": "PreSaleCloseTime()", +"52ceac34": "bytesToUint(bytes,int256,bytes)", +"52cf4078": "transfertWDiscount(address,uint256)", +"52cf46d4": "transferAllowed(address,uint256)", +"52cfd41f": "advisorFee()", +"52d005d6": "findNewExchangeContract()", +"52d08730": "DogeCoin()", +"52d0bf14": "setDataColla_AA_02(string,string)", +"52d214a7": "removeUnitMultipliers(address,uint256,uint256,uint256)", +"52d23633": "getNumDividends()", +"52d28a17": "muscFundDeposit()", +"52d2d83d": "setBoolValue(bytes32,bool)", +"52d35197": "JLL()", +"52d3592a": "VoteExecuted(uint256)", +"52d3642d": "sellToContract()", +"52d3a9dd": "rentAuctionContract()", +"52d472eb": "rewardPercentage()", +"52d4747f": "BurnTokensFrom(address,uint256)", +"52d48a95": "getXPub(address)", +"52d4e76c": "ControllerRetiredForever(address)", +"52d50408": "statusContribution()", +"52d5ad25": "currentRecords()", +"52d63b7e": "setNextSale(address)", +"52d6804d": "minimum()", +"52d714e8": "approveMintingManager(address)", +"52d7d861": "AddrChanged(bytes32,address)", +"52d850d1": "tstinx()", +"52d8bfc2": "recoverEther()", +"52dbb027": "newModelShipProduct()", +"52dc09a5": "test_4_assertGasUsage700Boards()", +"52dca247": "ttlInvestCount()", +"52dd336a": "_tokenAllocate(uint8)", +"52e021c2": "securityReg(address)", +"52e0d025": "maxUserPayment()", +"52e0d0fa": "BIPOOH_DAO_32_a()", +"52e11d12": "DanCoin()", +"52e1ea89": "setDonator(address)", +"52e2525f": "ownerSetFee(uint256)", +"52e2f9ea": "MerculetToken(uint256,uint8,string,string)", +"52e32a55": "bounty0xToken()", +"52e34245": "disputeTX(uint256)", +"52e3d369": "saleConversionRate()", +"52e40d96": "PPKToken()", +"52e43613": "approveToMint(uint256)", +"52e536ad": "icoLeftSupply()", +"52e578ad": "LOG_EmergencyAutoStop()", +"52e57d1f": "makeLogError(uint8,uint256,uint256)", +"52e60b90": "setTalentCardAddress(address)", +"52e686a0": "EnableReturnFunds()", +"52e68c46": "list_token_ask(address)", +"52e8f2c3": "deleteRecord(uint256,string,string,bytes32)", +"52e94beb": "setPrice(uint256,bool)", +"52e97326": "changeTotalSupply(uint256)", +"52ea5667": "getMPbyIndex(uint256)", +"52ea8a71": "setRandomApiKey(string)", +"52eae80b": "doProvideStateRoots(uint256,bytes32,bytes32[])", +"52eb2580": "Tethered(address,string,string,uint256,uint32,uint256,uint256,string)", +"52eb5751": "MedicoHealthContract()", +"52ec8a58": "mint_and_transfer(address,uint256)", +"52ece9be": "freezeAllowance(uint256)", +"52ecf7c4": "pickWinner(uint256,bool,bool,bool,bool,bool,bool)", +"52efd35f": "INCENT_FUND_VESTING()", +"52efea6e": "clear()", +"52effe11": "transferOwnershipTo(address)", +"52f17ce9": "pomda()", +"52f18042": "addAdditionalBonusMember(address)", +"52f1e07b": "ethRefundAmount(uint256)", +"52f1f48c": "setInv3(address)", +"52f29a25": "nextPunkIndexToAssign()", +"52f37c40": "isHodler(address)", +"52f445ca": "setAssociatedContract(address)", +"52f46769": "InitializedTier(uint256,uint256,uint256,uint256,uint256)", +"52f50db7": "initiate(uint256,bytes20,address,address,uint256)", +"52f59e0e": "AICH()", +"52f62195": "picops_enabled()", +"52f662bb": "sendTokensToInvestors(address)", +"52f6747a": "rules()", +"52f6ca76": "deadDragons()", +"52f6ee58": "exponent()", +"52f775c8": "ViewSecretBet(address)", +"52f7c988": "setFee(uint256,uint256)", +"52f804a8": "burnPollStake(address,bytes32)", +"52f84b1b": "BlangsakToken()", +"52f8a766": "TimeStampSubstructOneDay()", +"52f9058b": "getFreeRickAndMorty()", +"52f91acf": "triggerDispute()", +"52f97117": "createContract(bool,string)", +"52fa1ac2": "createUnicornForCandy()", +"52fa2650": "withdrawPercents(uint64)", +"52fa3712": "makeBet(address,uint256,bytes32)", +"52fb0561": "setWhitelistedTransferer(address,bool)", +"52fba25c": "attack(address,uint256)", +"52fbeb57": "transferToContractWithCustomFallback(address,uint256,bytes,string)", +"52fc01f9": "func_1(uint256,uint256)", +"52fd2c15": "ServiceStation()", +"52fdcc65": "GAME_SUPPLY()", +"52fdeef5": "_addToFundHWC(uint256)", +"52fe8163": "randomDS_sessionPubKeysHash()", +"52fea23c": "teamAllocator()", +"52fedceb": "getMarketComissionRatio()", +"52fedefa": "decrementBalance(address,address,uint256)", +"52ffeb30": "highestBidTime()", +"52ffff99": "addAllowContractList(address)", +"5300a306": "changeTransactionFee(uint256)", +"5301fa52": "setPromoCode(address)", +"5302470a": "submitPlaintext(uint32,uint32,uint256,uint256)", +"530266c7": "getSellOrderInfo(address,address)", +"5302a136": "fourthPriceTime()", +"53030d91": "investmentAddress()", +"5303a5d7": "RESEARCH_DEVELOPMENT()", +"53043490": "ownerTransferFrom(address,address,uint256)", +"53047154": "createPromoMovie(address,string,uint256)", +"53055262": "awardMarble(uint256,address)", +"53055481": "totalDeposited(address)", +"53056351": "DIGIPLACEDS()", +"53067968": "GetSellingTokenContractAddress()", +"53069df6": "getRepaidAmount()", +"5306a5af": "LogRollbackTransfer(address,address,uint256)", +"530795fb": "initNormal()", +"5308db4b": "finalizeBundleIPFS(bytes32,string,bytes32)", +"5309ce38": "PrintLimiter(address,address,address,uint256)", +"530abf0f": "distributeTokensToContributor(uint256,uint256)", +"530b1e1a": "recording(address,uint256)", +"530c435f": "whaleWantMyEther()", +"530c4ca6": "setGames(address)", +"530c515e": "stake(uint256,address,uint256,uint256,uint256)", +"530c6868": "getContributorETH(address)", +"530d26b0": "MattewWon(string,address,uint256,uint256)", +"530d44f4": "normalRate()", +"530dfad3": "addItemToUserDebt(address,bytes32)", +"530e3543": "addMemberToGroup(address,uint256)", +"530e784f": "setPriceOracle(address)", +"53105fbc": "tokenConversionFactor()", +"5310f0f4": "priceInUsd()", +"531163c1": "TOKEN_MAIN_CAP()", +"53127b88": "encrypt(uint32[26],uint32[4])", +"5312918b": "VestingEndedByOwner(address,uint256,uint256)", +"5312aa24": "Bigchaintoken()", +"5312ab19": "HoviiExchange()", +"5312b4bb": "pyrBalanceOf(address)", +"53135ca0": "presaleActive()", +"5313d890": "_markCredit(address,uint256)", +"53147d4f": "TokenCrowdsale(uint256,uint256,address,uint256,address,address)", +"531571a9": "connectTokens(address,address)", +"5315810e": "isSponsor(uint32,int256,uint32)", +"53176195": "witnesses()", +"53179413": "transfersBlocked()", +"5317e444": "removeUserPermission(address,bytes4)", +"5319418a": "transferLockedBalance(address)", +"5319ae10": "generateInstance(address[2],bytes,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", +"531a7f29": "dateProductCompleted()", +"531b6d98": "LogHodlSetStake(address,address,uint256)", +"531b97d7": "oneCentOfWei()", +"531c1b33": "getOperatingBudget()", +"531c267e": "getGameResolverData(uint256)", +"531c8628": "amount_referral_invest()", +"531c9a56": "iPayStar()", +"531ca478": "VantageCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"531ce262": "bankWithdraw(address,uint256)", +"531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", +"531e1ee0": "EarlyPurchaseInvalidated(uint256)", +"531e4827": "poolTimeLastMinted()", +"531ebce5": "getReceiverAddress()", +"531ef079": "setBvToBpFee(uint256)", +"531efbee": "_score(bytes32)", +"531f0ade": "_adjustValue(uint256,uint256,uint256)", +"531f4c40": "accept(bytes32,bytes32)", +"531ff93b": "setMrkContract(address)", +"53214e5a": "kilo()", +"53216223": "TravelCoin()", +"5321fe04": "subFromBalance(address,address,uint256)", +"5322f0c5": "getChannelOwner(bytes)", +"5322f9d1": "switchSale()", +"532399d9": "setTransContractLocked(bool)", +"5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", +"5323df9e": "getShipDetails(uint32)", +"53240172": "midiv(uint64,uint64)", +"53251389": "addBridgeNativeFeeReceivers(uint256)", +"5325dc16": "test_validShouldBe3()", +"53269475": "loveToken()", +"5326ba37": "setSaleAuctionERC20Address(address,address)", +"53270910": "deedOfOwnerByIndex(address,uint256)", +"5327f96e": "OwnerTransfer(address,address)", +"53286957": "CuboToken(uint256)", +"53290b3a": "setStateLoading()", +"53290b44": "getBalanceOf(address,address)", +"53290d1c": "founderGrant(address,uint256,uint256,uint256,uint8)", +"53295e44": "OtcgateToken(uint256,uint8,string,string,address)", +"53297b71": "completeReleaseAuction(uint256)", +"5329c681": "checkTimeout(uint256)", +"532af7d2": "calculateResult(uint256,uint256)", +"532b581c": "round2()", +"532b5f86": "createBytes32(bytes32,bytes32)", +"532c3dc5": "nAuditors()", +"532da8f9": "getDelayDays(uint256)", +"532e4849": "setTokenUriPrefix(string)", +"532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", +"532e87e4": "setTimeForCrowdsalePeriods()", +"532eb619": "_sellTokens(uint8,address)", +"532f1041": "setFormat(bool)", +"532f1179": "refundsEnabled()", +"532fb092": "isApproveConfirm(uint256)", +"532ff308": "setBonusRates(uint256[],uint256[])", +"532ff568": "Tutancoin()", +"533019cb": "kyberReserve()", +"5330a4c6": "buyMicroKeys(string)", +"5330bc61": "disallowTransfer(address,bool)", +"533178e5": "get_rate()", +"53322527": "EthlanceViews(address)", +"5332510b": "EthernautsLogic()", +"533265e6": "Database()", +"53329856": "secondBuyPrice()", +"5333c507": "allowTransferFor(address,bool)", +"5333ee4d": "buyEgg(uint256,uint256)", +"533425a5": "icoPeriod()", +"5334398f": "addRecordwithReward(bytes32,string,string,address)", +"53344481": "isInTier1(address)", +"5334c231": "currentSwapRate()", +"533574ca": "getLastDividends(uint256)", +"53358fc4": "castVote(address)", +"5336cd16": "_getEndIndexKey(uint256)", +"5337421a": "TrumpBingo()", +"5337448e": "payWinners()", +"53376d1f": "revokeAuthentication(address)", +"5337fa10": "awardPoint(int256,bytes32)", +"53384da7": "updateTier(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"5338b3e4": "miningTokenLeftInCurrent()", +"533945df": "editMemeTemplate(uint256,string,string,string,string)", +"53397be3": "lastConsolationPrize(uint256)", +"53398119": "emergency(bool)", +"533a645c": "minTx()", +"533ae8e5": "inTipperQueue(uint256,address)", +"533b180e": "LAcoin()", +"533c023b": "getGroupRight(string,string)", +"533d4270": "ClipperCoin(uint256,uint8,string,string)", +"533da8df": "getAreaOwner(string)", +"533de9e5": "addSmartContractByAddress(address)", +"533e00ec": "approveAndDo(address,uint256,address,bytes32,string)", +"533f6730": "clearInventory(uint256)", +"53400e7f": "debugNow()", +"534104df": "UnilotTailEther(uint256,address)", +"5341903b": "upgradeMe(address)", +"5341d618": "setDataColla_AB_02(string,string)", +"53423e50": "MaengDevToken()", +"5342da41": "testBeyond()", +"5343e6a4": "rateFinalStage1()", +"5343f1a0": "cancelOrderWithMerchant(string,address)", +"534439a3": "mintingDec()", +"53448316": "MIN_SALE_AMOUNT()", +"53449d26": "TourPool()", +"534514ee": "adminCharge_p3()", +"53458f5e": "defaultTreesOwner()", +"5345c415": "LogOwnerAdded(address)", +"534607fb": "info_OwnerOfContract()", +"53462d6b": "getReleaseTime()", +"53462fd8": "NCPTokenDeposit()", +"5346dcc5": "calculateTokensEnabledforAirdrop(address[],uint256)", +"5347d58c": "Paradime01()", +"534844a2": "withdrawAmount()", +"534878fb": "reply(address,address,bytes32,bytes32)", +"53488f0a": "activateAuction(uint256)", +"5348ac95": "makeTokensTransferable()", +"53490c67": "earlySuccessBlock()", +"53490fbb": "EPR()", +"53497794": "RepublicKey(address[])", +"534992c8": "showTokenBalance(address)", +"5349a335": "setThirdAdmin(address)", +"5349cdb6": "Testcoin()", +"5349efdc": "generatetoken(uint256)", +"534a2f7c": "WTechCoin()", +"534b0391": "getVerifiedInfo(address,address,string)", +"534c2609": "checkBtcRequestSignature(bytes,bytes,uint256,bytes)", +"534d5acb": "initialBSTSupply()", +"534d5ce3": "RobaToken()", +"534ddf19": "reclaimContributionDefault(address)", +"534e05c1": "_goldFreeze(uint256)", +"534e2645": "getLucy()", +"534e3f81": "finishPVP()", +"534eb1d4": "offerBonus(uint256)", +"534eec2c": "Yacksoncoin(uint256,uint256)", +"534f6a2d": "LogGrantClaimed(bytes32,uint256)", +"53501052": "extraTokensPercent()", +"53511819": "triggerAssertError()", +"53515226": "getEtherProceedsAccount()", +"5351ad81": "FrellyToken()", +"5352aadb": "allowedBetAmount()", +"5352b889": "isNewRound()", +"53535db9": "deployWallet()", +"53537303": "bonusRatePeriodOne()", +"5353a2d8": "changeName(string)", +"5353e168": "rlc_team()", +"53547d3f": "mintBooty()", +"53554015": "newZeusPriceTicker(string)", +"53556559": "exchange(uint256)", +"5355ee2f": "CryptoSneakersCoin()", +"535779ef": "removeFromAddresses(address)", +"5357b989": "calculateFee(uint256,uint256,uint256)", +"53584939": "bytesToBytes32(bytes,uint256)", +"5358677c": "BACKUP_FOUR()", +"5358c119": "getFaucetByCreator()", +"535999aa": "getarg_3_input()", +"535a920c": "setLANDRegistry(address)", +"535b27dd": "BitImageTokenSale()", +"535b4e58": "adminResetLottery()", +"535bf003": "appVersionList(bytes32)", +"535c69b6": "setEthAuction(address)", +"535d1ab3": "claimWork(uint256,uint256,uint256)", +"535d3f22": "RankingBallGoldToken(address)", +"535d4156": "killWithBenefits()", +"535d9289": "RDPTicks()", +"535dc2b0": "_b1(string,uint256,string)", +"535e401c": "check(bytes32,bytes32,bytes)", +"535f23ad": "mainSaleStartDate()", +"53601ec5": "_transferFees(uint256,uint256[],uint256)", +"5360cd82": "GetContractInfo(string)", +"53613273": "setTymTokensWallet(address)", +"53613769": "setDistributorAmount(address,bool,uint256)", +"53613dd3": "creatorFeePercent()", +"536253a9": "getRandomForContractClanwar(uint256,uint256)", +"53636220": "depositToExchange(uint256,uint256)", +"53645caa": "rewardDays()", +"5364e45d": "setStartBalance(uint256)", +"5364f721": "getArbInfo(uint256)", +"536529dd": "WarpSpeed()", +"5365939c": "unlockedTokensInternal(address)", +"5365ccf7": "CCH_MENA_1()", +"53661f87": "initStorageOwner(address)", +"53663c0b": "distributeAIC(address[],uint256)", +"53667f10": "getContracts(address,address[],uint256)", +"5366d0fd": "operationalExpensesWallet()", +"5366f338": "publishFor(bytes12,address)", +"53677154": "placeAnswer(uint256,string)", +"5368cc55": "getBack2()", +"536942b6": "finalizeAndRestart()", +"536a3ddc": "currentGameId()", +"536aace8": "setUserSignupTokens(uint256)", +"536ab151": "onFailedAffirmation(address,uint256,bytes32)", +"536bd93a": "SetAccessoryDataContact(address)", +"536c1ddd": "SampleERC23Token(address,uint256)", +"536c26e5": "MiniMeIrrevocableVestedToken(address,address,uint256,string,uint8,string,bool)", +"536c2e4a": "sendEmail(address,string,bytes32,string)", +"536c8c15": "jurySize()", +"536c9a7f": "dividendFundAddress()", +"536cb736": "setPreUri2(string)", +"536cfceb": "todaysSupply()", +"536d888b": "isServiceOwner(bytes32,address)", +"536d97c2": "setDividendsPercent(uint256,uint256)", +"536db4a8": "getParametersHash(uint256[14])", +"536dd8f9": "maxTokensToSold()", +"536e08bc": "getTokensBalance(uint256)", +"536e2800": "buyForWorkOrder(uint256,address,address,address,string,address,address)", +"536e2c75": "challengeCanBeResolved(uint256,bytes32)", +"536e3f6a": "getOracleData(uint256)", +"537038c3": "BOUNTY_PERCENT()", +"5370a049": "thebank()", +"5370e3d4": "Ozreal()", +"53718569": "generateRandomStats(string)", +"537187a3": "transferWithMsg(address,uint256,string)", +"53719b6e": "lockedTokens(address,uint256)", +"5371e490": "Presalezillion()", +"53729273": "getLLV_edit_9()", +"5372a9ce": "addService(address)", +"5372c1db": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool)", +"53734dc5": "refundContribution()", +"53738a4c": "distributeOwnedTokensFromOtherContracts(address,address,uint256)", +"53749313": "PortToken()", +"5374eec3": "hijack(uint256,uint256)", +"5375a828": "createLibraryWithFounder(string,string,address)", +"5375f182": "IronHandsCoin()", +"5376a03d": "getProfitOrLoss(address,address,uint256,uint256)", +"53770f9a": "isStateless()", +"53775572": "_claimOreAndClear(uint32,uint8)", +"53779c11": "claimDividendByIndex(address,uint256)", +"5377f047": "allowedMultivests(address)", +"53790097": "Exhibition()", +"53799e7d": "frozenType(string)", +"537a082c": "withdrawSaleRequest(uint256)", +"537a924c": "Pay()", +"537afe94": "eastadscreditsx()", +"537b9c93": "NotFomo3D()", +"537bf9a3": "updatePermissionName(address,bytes32)", +"537ca660": "_setPetValue13(uint256)", +"537dbb80": "claimUserToken(address)", +"537df3b6": "removeFromBlacklist(address)", +"537f5312": "updateSymbol(string)", +"537f74fc": "_transferFrom_byProxy(address,address,address,uint256,bytes)", +"537fcd6b": "_computeAndSetBaseParameters16_18_22(uint256)", +"537fdf59": "user_redeem()", +"538082af": "UKG_FUND()", +"53811553": "getCertificate(bytes32,bytes32,bytes32)", +"53813af8": "getmy(address)", +"5381464c": "PRE_SALE_START_TIME()", +"53819e85": "getTotalComission(address)", +"53822cda": "createShortId(bytes32)", +"53844552": "addPayees(address[],uint256[])", +"5384527a": "tokenResend()", +"5384602d": "craetePartnerBytes(address,address)", +"5384734e": "isConfirmedStackholder(uint256)", +"53850db3": "getParticipantById(uint256)", +"538548c5": "recevedEthFromEvabot(address,uint256)", +"538564de": "assegna_diritto_di_voto(address)", +"5385726e": "maxTIPSupply()", +"53865562": "CLOSING_TIME()", +"5386b7ad": "dtTestWorldSnapshot(uint256)", +"538739fa": "operatorManager(address[],uint8)", +"538741c5": "getAllowedContracts()", +"5387a233": "feeLottery()", +"538811cf": "hasAllocated()", +"5388842c": "mintTicket(address,string)", +"53892496": "finney2LemoRate()", +"538a289a": "getSandwichInfo(uint256)", +"538a3f0e": "initializeFactory(address)", +"538a849c": "newRound(uint256,uint256,uint256,uint256,uint256,bytes32,uint256)", +"538a8c21": "giveawayReserve()", +"538b9618": "createElectionVerify(bytes32,bytes32[])", +"538c91b2": "validCandidate(string)", +"538d1267": "Announcement()", +"538df6f2": "claimedPrepaidUnits()", +"538dfcac": "contributionRejected()", +"538e0759": "refill()", +"538e0ff4": "totUsers()", +"538e8ae0": "assertEq19(bytes19,bytes19,bytes32)", +"538eae06": "ZuperToken()", +"538f5997": "getBalanceSize()", +"538fb98c": "getCarProductCurrentPrice(uint32)", +"53900bdd": "incirculation()", +"5392279d": "CryptoWCRC(uint256,uint256,bool,address,address)", +"539407f6": "committeesNumber()", +"53941a74": "addInviteId(uint256)", +"5394772a": "MIN_BET_VALUE()", +"5394e49e": "getRandomPosition(uint8,uint8)", +"53954574": "withDrawBack()", +"5395dbb1": "createSchedule(address,uint256,uint256,uint256,uint256,uint256)", +"5397c83c": "distr0(address,uint256)", +"53994d51": "ThreeDJSToken(uint256)", +"53999040": "buyLandForCandy(uint256)", +"53999339": "prepareLiquidityReserve()", +"539af982": "changeStartDate(string)", +"539b9648": "icoSmartcontract()", +"539c0f14": "deposit2()", +"539e2bfb": "secondChainedCallback(uint256)", +"539f70d8": "setOperationState(uint8)", +"539ff41a": "ADVISORS_WALLET()", +"539ffb77": "cancelRedeem(uint256)", +"539fffc9": "WithdrawPrize()", +"53a01f68": "createWizzPanda(uint256[2],uint256,address)", +"53a023d1": "EUSBToken()", +"53a04b05": "play(uint8)", +"53a06609": "_incrementInventory(uint256,uint256)", +"53a1c51e": "getInitializeMarketValue()", +"53a3b71e": "tossIntoTheFire()", +"53a40850": "userHasPattern(address)", +"53a454e0": "SubtractAmount(uint256)", +"53a47bb7": "nominatedOwner()", +"53a4c8a3": "TriggminePresale()", +"53a4caee": "getMajorThreshold(address)", +"53a50f0f": "addDeal(uint256,uint256,string,string,uint256,bytes32)", +"53a5e2d9": "teamGrantsAmount()", +"53a5e68f": "CircusToken(address)", +"53a636dd": "updatePrice(uint256,uint256,string)", +"53a6e2c9": "Mantapjar()", +"53a73f6e": "setTotum(address)", +"53a8b307": "getObjective()", +"53a94aa6": "_computeNextSeedPrice(uint256,uint256)", +"53a9698a": "isProviderFor(uint256,address)", +"53a97873": "getPrice(bytes10)", +"53a9fc9c": "ELVToken()", +"53aa3f5e": "getUInt(bytes32,bytes32)", +"53aa7dcd": "setCallerFee(uint256)", +"53aaa63f": "collectBack2()", +"53aab098": "addPriceFeed(uint256,uint256,uint256,uint256,bytes)", +"53aab434": "buyIn()", +"53aaef7d": "weiToTokens(uint256)", +"53aaf7c7": "OperatorProductCommissionChanged(uint256)", +"53abf7f4": "parseTrade(bytes)", +"53ac36f4": "DropReward()", +"53acae4a": "RANGESTART_4()", +"53acb23f": "unlockPriceChange()", +"53adce21": "getGroup(address)", +"53ae8de6": "modify_Presale1StartDate(uint256)", +"53af5d10": "closingAddress()", +"53afda90": "initDiscounts(uint256[],uint256[])", +"53b0b620": "allocateBid1(address,bytes32)", +"53b15f31": "get_asset_details(bytes32)", +"53b1b49b": "Human()", +"53b239c7": "setPoWtfContract(address)", +"53b2dd41": "WGCToken()", +"53b382ea": "manuallyEnded()", +"53b5015c": "getClientSupply(address)", +"53b5306b": "getUnfreezingPrice(uint256)", +"53b54f5e": "transferWithoutDecimals(address,uint256)", +"53b5b427": "team4LockEndTime()", +"53b5b50a": "publish(bytes32,string,bytes32)", +"53b64b0b": "setNumDepositsSigned(bytes32,uint256)", +"53b6f766": "addTotalIndividualWeiAmount(address,uint256)", +"53b7a59b": "destinationWallet()", +"53b7b2e9": "cEthereumlotteryNet(bytes)", +"53b86342": "withdrawOwnersMoney()", +"53b8e278": "upgradedContract()", +"53b90b5b": "addWalletEmail(address,string)", +"53b93358": "_getPoS(address)", +"53ba11d0": "icoWalletAddress()", +"53babaf9": "processStellarReward()", +"53bad0b9": "boschcoin()", +"53bb2eb6": "buyOffer(uint256,uint256,address,bytes32)", +"53bc147e": "lastKickoffDateBuffer()", +"53bc1c12": "getJobState(uint256)", +"53bc1d9b": "ONTOPToken(uint256,string,string)", +"53bc373d": "SIT(address)", +"53bc7399": "play_stone()", +"53bc7d62": "setInvalidWithReturn()", +"53bd353b": "EarlyTokenSale(uint256,uint256,address,address)", +"53bd755a": "__setTokenPrice(uint256)", +"53bd8bdb": "isRequestExecutable(uint32)", +"53beb1f8": "checkHalfLife()", +"53bfd3d0": "getUserTearAward(address,uint256,uint256)", +"53c048ce": "TICToken()", +"53c06966": "startMining(address)", +"53c194af": "createIco(uint256,uint256,uint256,uint256,uint256,address)", +"53c1b31f": "MooToken(uint256,string,string)", +"53c24064": "EasyMineTokenWallet()", +"53c2828f": "rentalBalanceRemaining()", +"53c2e8ab": "FacebookCoin()", +"53c3419b": "bet(uint256,uint256,uint256,uint256,uint256,uint256)", +"53c37276": "frozenDaysForPreICO()", +"53c3a57d": "recalcFlags()", +"53c3cc1f": "ResumeEmergencyStop()", +"53c3fe8a": "hasICOClosed()", +"53c4aeac": "crowsaleSlots(uint256)", +"53c549da": "LemonContract()", +"53c64fbc": "peekQueue()", +"53c66d90": "YEEToken()", +"53c7186c": "test_token_creation()", +"53c7801c": "second_round_start()", +"53c8388e": "updateMetadata(uint256,string)", +"53c84526": "setSmartAffiliateContract(address)", +"53c86cfc": "UvoCash()", +"53c9843f": "preIcoCashedOut()", +"53ca1aa8": "GOLD_TO_COLLECT_1SWORD()", +"53cae7b8": "distributeAirdropMultiPresale(address[],uint256[],uint256[])", +"53caf582": "testThrowSetNotUpdatableNotOwner()", +"53cb26c6": "preciseDecimalToDecimal(uint256)", +"53cb430f": "setoldtoken(address)", +"53cc2fae": "unFreezeAccount(address)", +"53cc3e7a": "sysPrice()", +"53ce0a71": "USACoin()", +"53ce7de9": "participantIndex()", +"53ce910e": "getSafeKey(uint256)", +"53cea153": "claimableOwnerEth(uint256)", +"53ceee6c": "icoBuy()", +"53cf4d2b": "indexshow(address)", +"53cf51bc": "rewardSent()", +"53cfdda3": "setMonthlyPrice(uint256)", +"53d0f255": "STEP()", +"53d142a7": "setTokenInfo(uint16,string,address,uint64,uint256)", +"53d2822d": "isVesterManager(address)", +"53d3e848": "abortICO()", +"53d3ed60": "isBotAt(address,uint64)", +"53d3eeee": "profitsRatePercent()", +"53d413c5": "removeKey(bytes32,uint256)", +"53d590bc": "softUndelete(bytes32)", +"53d69b07": "setPreSaleStartAndEndTime(uint256,uint256)", +"53d6fd59": "setWhitelist(address,bool)", +"53d70700": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"53d736ed": "CreateCard(uint256,string,string,string,string)", +"53d73718": "voting_info()", +"53d74fdf": "totalHolders()", +"53d797c9": "GetGoodsInfo(uint32)", +"53d7edbc": "_crowdsalePaused()", +"53d838b6": "getMatchAwayPlayers(uint256)", +"53d97e65": "setPrizes(uint32[])", +"53d99c2a": "tokenToEthRate()", +"53d9d910": "create(address[],uint256,uint256)", +"53da0c7e": "bonusesForAmountsCount()", +"53da4859": "ACT()", +"53dad947": "oraclizeContract()", +"53db1deb": "DredgrSwap()", +"53db5fdb": "getCreatorTAOSettingDeprecation(bytes32)", +"53db6b21": "AUMToken()", +"53dba812": "Horizon0x()", +"53dc4cf1": "Greedy()", +"53dd1902": "strcat(bytes,string,bytes,string)", +"53dd8881": "tweakDailyDividends(uint256,uint256)", +"53de63e3": "isMasterWallet(address)", +"53e0b78f": "LandClaimContractSet(address)", +"53e0c46d": "nuoyilian(uint256,string,uint8,string)", +"53e1509c": "addExchangePartnerTargetAddress(address)", +"53e1a169": "doPayment(address)", +"53e1ead9": "companyAddress()", +"53e215f4": "getNodeInfo(uint256)", +"53e3926c": "compareNums()", +"53e4d8ef": "admin_set_withdrawable(bool)", +"53e4e607": "get_parameters()", +"53e551ff": "createContractItem(string,bytes32,address,address)", +"53e68147": "emissionInternal(uint256)", +"53e68720": "sendToBeneficiary()", +"53e7168b": "setUInt(bytes32,bytes32,uint256)", +"53e7d39c": "batchTtransferEther(address[],uint256[])", +"53e7daf2": "NewStandardToken(uint256,string,uint8,string)", +"53e86a88": "contributorsTotal()", +"53e8c040": "Winn()", +"53e9574a": "FOUNDERS_TOKENS_PERCENT()", +"53e9dcae": "attributeType(uint256)", +"53ea04fe": "AgencyLock2()", +"53ebf6bd": "setContractLock(bool)", +"53ecbdd2": "getTankType(uint256)", +"53ed5143": "getAll()", +"53ed589b": "LogNewProvider(address,string,bytes32)", +"53ee9114": "PassDao()", +"53eeb430": "allPurchasedSprites(uint256)", +"53ef5e03": "amount5()", +"53ef6781": "_start()", +"53efb13f": "setContractDurationInDays(uint16)", +"53f072e3": "numApis()", +"53f11cb3": "asm_clean(uint256,uint256)", +"53f24e33": "isUpgradeInterface()", +"53f25ca6": "isNameEmpty()", +"53f3807c": "STATE_PLAYING()", +"53f4a519": "queryResource()", +"53f4b36f": "calcFin()", +"53f4db01": "totalWeiRaised()", +"53f63bb3": "setPreSaleFinishDate(uint256)", +"53f65cf7": "forceRecoverCollateral(bytes32,address)", +"53f6740d": "setKpopItemContractAddress(address,address)", +"53f6ef28": "EUFBToken()", +"53f6f01f": "ADVISOR_STAKE_TWO()", +"53f754e0": "tokensDue(uint256)", +"53f818d6": "checkBetValue()", +"53f81ef8": "getSubscriptionTo(bytes32)", +"53f8e415": "SetDonateStep(uint256)", +"53f92e49": "UnableToRejectPayment(address,bytes8,uint256)", +"53f95cc6": "THIRD_TIER_DISCOUNT()", +"53f9ca96": "CCC(uint256,string,string)", +"53f9ec67": "setIsInvalid(bool)", +"53faa9a9": "changeRecovery(address,address)", +"53fafd15": "makeTransfer(uint256)", +"53fb9233": "checkDocument(string)", +"53fc3923": "safeAdd40(uint40,uint40)", +"53fc79d1": "setTargetDiscountValue5(uint256)", +"53fd0670": "sellArtworks(uint32[])", +"53fe12b0": "setusertoken(address)", +"53fe189c": "setAElfMultisig(address)", +"53fe7a59": "PURCHASER_MAX_TOKEN_CAP_DAY1()", +"53fefd7d": "changeMaxDeposit(uint256)", +"53ff7766": "_escrowTheAOPaymentEarning(bytes32,uint256,uint256,uint256)", +"53ffab1d": "disableconstruction()", +"53ffe1f9": "setRentalPricePerSecond(uint256)", +"5400a93e": "payoutMatch(uint256,uint8,bool)", +"54019949": "getShopOwnerCategorizedProducts(string,string)", +"540273bb": "changejp1(address)", +"54032862": "ZapCloud()", +"5403a0e5": "getTeamToken()", +"5404bbf7": "getEntropy()", +"54057aa6": "setPriceClaim(uint256)", +"5405e4f4": "SMILE()", +"54063f4e": "sendETHfromContract()", +"54070f83": "getTournamentAdmissionBlock()", +"54091a20": "removeFromTransactionDisallowedList(address)", +"540a5e4e": "cs()", +"540a9db3": "getVestingAccount(address)", +"540ae26f": "MassERC20Sender(address)", +"540b2255": "_invest(address,address)", +"540b34a0": "listMOC()", +"540c755f": "ethWithdraw()", +"540c97c8": "getAllRevisionIpfsHashes(bytes20)", +"540cafe0": "storeHeaderWithFee(bytes,int256,address)", +"540cc484": "getPreSaleTokensSold()", +"540cf75e": "getPendingPresaleTokens(address)", +"540d888e": "SendTaxFee(address,address,address,uint256)", +"540d915e": "serviceGroupChange(address,uint8)", +"540e2f5b": "customTokenDefrosting(address[])", +"540ea6db": "getuseraddress(uint256)", +"540f3d6d": "feeProcess()", +"540f5631": "isUnderwriter()", +"540fd4df": "addressFundFoundation()", +"54105974": "AdHiveToken(address,string,string,uint256,uint256)", +"54107401": "declareLove(string,string)", +"5410ac50": "raiseCap(uint256)", +"5411029d": "_validSignature(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"54114dee": "Caps()", +"5412af17": "Watsondog()", +"541334f6": "isUnicornContract(address)", +"5413d6f4": "ImmlaToken(address)", +"54147ecb": "withdrawForTokens(address)", +"54149777": "getAirDropedToday()", +"54149975": "DeleteToken()", +"54151bc3": "createPostboyAccount(uint256,uint256,bytes16)", +"54153f91": "getArrIntField1()", +"5415b8f8": "setAssetFeesList(address[],uint256[],uint256[])", +"5415c86e": "chngReNo(uint256)", +"5415f3a7": "buyStudioStake(address,uint256)", +"5416707c": "getEthOfferAmount(uint256)", +"541694cf": "get_exchange(uint32)", +"5416995e": "TGCToken()", +"5416a724": "isUserKYCed(address)", +"54186bab": "SolarDaoToken()", +"5418796c": "pubKeyToEthereumAddress(bytes)", +"5418bea9": "getCountReadyPlayerByTrackId(uint256)", +"5418ecdd": "setTokenHash(uint256,uint256)", +"54192046": "setAuctionStart(address,address,uint256)", +"541a01ed": "presaleTokenVault()", +"541a3656": "optionOrderCancelled(bytes32)", +"541ac2b3": "locked_since()", +"541aea0f": "put(uint256,uint256)", +"541afaf6": "getWarriorDistributedRandom(uint256)", +"541b2173": "IKT(uint256,string,uint8,string)", +"541bb358": "setRarityTargetValue(uint8,uint256)", +"541c15eb": "changeLock(address,uint256,uint256)", +"541d920c": "commit(bytes,string)", +"541dc9ba": "redeemPreSale(address,address)", +"541e22ea": "sendRefBonuses()", +"541e34a7": "QuantumPay()", +"541ee050": "bonusEnd10()", +"541f631a": "transferInternal(address,uint256)", +"54203101": "CTWorld()", +"54204ad4": "triple()", +"54215767": "upgradeTradeProfileImplementation(address)", +"54217c21": "Q2(address)", +"5421b037": "getDepositTransaction(address,uint256)", +"542241d0": "fifthExtendedBonusSalesEnds()", +"5422cf34": "sellPop(uint256,uint256)", +"54238645": "closeICO()", +"5423a05d": "GoToken(address,address,address,address,uint256)", +"54244518": "coinIssuedRewardPool()", +"54260cb6": "getBuyLandInfo(address,uint256)", +"5427789c": "MINT_AMOUNT()", +"54279bdd": "createAuction(uint256,uint256,address)", +"5427e4e1": "APS(string,string,uint256)", +"5427e8fa": "getTicketIsPaid(uint256)", +"54280260": "balancesLocked()", +"54290065": "getAsksCount()", +"54292c53": "rewardAvailableCurrentDistribution()", +"5429a417": "getBasicBallotsPer30Days()", +"5429d4b5": "mitfwdToken()", +"542a3368": "randomly_select_index(uint256[])", +"542a90bd": "remove_quote(bytes32,bytes32)", +"542aa99f": "stopSetup()", +"542aee37": "getTotalTonsClaimed()", +"542b5111": "MANXERC20()", +"542b9a40": "ProjectOwner_DisableProject(int256)", +"542bdb4d": "testMathOverloaded()", +"542bee82": "addGlobalBlockValueBalance(uint256)", +"542c8f37": "isOnSell(uint256)", +"542cad3d": "setCopaCoreAddress(address)", +"542cae98": "checkGameOverByUser()", +"542ccddb": "claimRoundReward(uint16,address)", +"542ceaad": "countRequest()", +"542cfdf0": "extendItem(address,uint256)", +"542d397c": "tokensBlocked()", +"542d3e34": "NewImage(uint256,uint8,uint8,uint8,uint8,string,string,string)", +"542d8dc0": "Mag50()", +"542de573": "BITHALALToken()", +"542df7c7": "getGameConstants()", +"542e8618": "dynamic_profits(address)", +"542e898e": "STC()", +"542e9b18": "logFeeWindowBurned(address,address,uint256)", +"542fce21": "KergToken(uint256,string,uint8,string)", +"542fd556": "getMakerProjects(address)", +"542fe6c2": "withdrawFromAbandoned()", +"54311422": "giveTokens(uint256)", +"54313b22": "tonextround()", +"5431dfb8": "stage3Sale()", +"5432202a": "isServiceAccount()", +"54353f2f": "example()", +"543577f3": "LandManagement(address)", +"543594b8": "verifySignature(uint8,bytes32,bytes32,address,bytes32)", +"5435a774": "Permissioned()", +"5435bac8": "itemsForSaleLimit(uint256,uint256)", +"5435dbd4": "CPF()", +"54361699": "registerContributorPool(address,uint256,int256)", +"54367179": "updateRealWorldPlayer(uint32,uint128,uint64,uint32,bool,bool)", +"5436c163": "createVillain(string,uint256,uint256,uint256)", +"5436e5a0": "getValueByHash(bytes32)", +"54370a8d": "QueryMyBonus(address)", +"5437988d": "setVerifier(address)", +"5437b39b": "hasUnprocessedDividends(address)", +"5437e401": "withdraw(address,bool)", +"5437f098": "changeStartBlock(uint256)", +"54385526": "setStatus(uint8,uint8,string)", +"5438a64e": "getContractSigners(bytes32)", +"5438c5d2": "hasListener()", +"54392a96": "simTotalObligation(bytes)", +"5439af13": "getIdeaDescription(uint256)", +"5439c6a1": "nonFungibleByIndex(uint256,uint128)", +"5439e185": "buyTreeTokens(address,uint256)", +"5439f5d2": "TimeToken(uint256,string,uint8,string)", +"543a3d62": "token_call()", +"543a86f6": "dblShaFlip(bytes)", +"543a9ce4": "setAStore(string,address)", +"543ad1df": "MIN_TIMEOUT()", +"543b4f6f": "endTimeTwo()", +"543ba50a": "FundsDeposited(address,uint256)", +"543e0a7b": "stringsEqual(string)", +"543e10b4": "contributeTo(address,uint256)", +"543e4dcd": "testFailUntrustedTransferFrom()", +"543e9954": "freeBalanceOf(address)", +"543e9c10": "containsAdmin(address)", +"543f8101": "activateOversightAddress(address)", +"54400c60": "right19(uint256)", +"544082e5": "authorShare()", +"54409599": "SHIVToken()", +"54413d29": "withdrawAllForAccount(address,address[])", +"544447bb": "unicornToken()", +"5445cbf3": "assetsCertified()", +"5445e38c": "_isCycleValid(uint256)", +"5446b604": "unlockMintDate2()", +"5446d669": "ShitToken()", +"544736e6": "isStarted()", +"544743d6": "getCharAt(uint256)", +"5447ad71": "newGame(bytes32)", +"5447b86f": "ipart(int256)", +"5447c05d": "updateTemplateReputation(address,uint8)", +"5447fab0": "serviceController()", +"5448c674": "IBCA()", +"544a026b": "protectCharacter(uint32,uint8)", +"544aa2cf": "LOG_BetLost(address,uint256,uint256)", +"544b1b24": "onlyHarvest(uint256)", +"544b9606": "ICO_BONUS2_SLGN_LESS()", +"544be427": "finalizeBurnUtility(address,uint256)", +"544c465c": "calcReward(uint256)", +"544cdbda": "send_to_owner(address,uint256,uint32)", +"544cfead": "reignBlocks()", +"544d6544": "transferPrivateSale(address,uint256)", +"544d8ca2": "registerLog(string,string,uint256)", +"544d9723": "itemAt(uint256)", +"544f113b": "startingAmount()", +"544f43e3": "getRatePlansOfVendor(uint256,uint256,uint256,bool)", +"544ffc9c": "proposalVotes(uint256)", +"5451436d": "EthLyte()", +"54517ddf": "transferFromByCrowdsale(address,address,uint256)", +"5451a1e1": "addressFounders()", +"5451cbcc": "ZEToken()", +"5451fb26": "increaseLoanOnBehalfOf(address,bytes32,uint256,uint256)", +"5452644d": "createNewDynamicPaymentAddress(uint256,address)", +"5452b7d4": "getReservedTokens(uint256)", +"545305fb": "finalizeCrowdsaleAndToken()", +"5453095b": "buyMNC(string)", +"545342a0": "ZaiZaiCoin()", +"5453f4e7": "createTokenUri(address,address,address,address,address,address,address,uint256)", +"545464ff": "ConsentFactory(string,address)", +"5454d6e0": "isMilestonesSetted()", +"5454fb7c": "ico1Sold()", +"54557250": "getAgentIdByPositionBet(uint256)", +"545599ff": "END_DATE()", +"5455e1b8": "setAddressesThatCanList(bool,address[])", +"54567923": "addServiceReward(uint256)", +"54569a86": "Needit()", +"5456d8d2": "removeSpecialBonusConditions(address)", +"54573835": "withdrawEtherInternal(address,address,uint256)", +"54573cfc": "setRule(uint256,uint256,uint256,uint256)", +"545842ff": "redeemLevAndFeeToStakers(address[])", +"545921d9": "providerRegistry()", +"545a153a": "getId(uint256)", +"545a5896": "changeSolidStampContract(address)", +"545ae0f6": "TokenFundTransfer(uint256)", +"545b2f0d": "getUpgradeAmt(uint256)", +"545c50f0": "pointRootNode(int256,address)", +"545c5a02": "setStepTwoLockEndTime(uint256)", +"545c5d54": "deliveryService(uint256,uint256,uint256)", +"545d2e29": "invalidateAdvertiserRefund(uint256)", +"545d5988": "claimCheckPriceReward()", +"545d8b55": "minCapFail()", +"545e6362": "PRE_ICO_BONUS_TIME_1()", +"545e7c61": "deploy(address,address)", +"545f6837": "returnSenderBalance()", +"54604eec": "stopAssign()", +"54605549": "setCoinBalance(address,uint256,uint8,bool)", +"5460687c": "test_chain2_3()", +"5460ef10": "sendWithExtraGas(address,uint256,uint256)", +"54610cea": "setProvider(address,uint256,uint256)", +"54612e27": "freeze(bytes32,bytes32,uint256,bytes)", +"54616911": "burnICOTokens()", +"54619b69": "eAccessTOKEN()", +"546216f1": "winningScore()", +"54622cef": "multiMintPreIco(address[],uint256[])", +"5462870d": "multisigAddress()", +"5463a2e4": "reasonableDiffInBps(address)", +"546434e3": "TwoStageSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"546455b5": "assert3(uint256)", +"54653352": "beView()", +"54657f0a": "setHiddenCurves(bytes32[])", +"54659685": "getTicketsCount(address)", +"54659d99": "SPINFund()", +"546639cf": "JacksToken(uint256)", +"546668bb": "conquesting()", +"54672768": "Instrument()", +"54674ebc": "HackableToken()", +"54675320": "EventProduct(uint32,string,uint32,uint32,uint256,uint256,uint256,uint256)", +"5467e0a7": "redemption()", +"5467f508": "indPresaleDeposit()", +"5468e4e1": "setGameStateFusion(bool)", +"5469a173": "getFifthRoundReleaseTime()", +"5469aabb": "_diviSplit(uint256,address,address,uint256)", +"546b270d": "getServer(uint256)", +"546b48b1": "makeSimpleBundle(uint256,address,bytes32,bytes32)", +"546c2b93": "paid(uint256,uint256,bytes32)", +"546d08fe": "dividendAddress()", +"546dc0ac": "collectAsset(address,uint256)", +"546dc71c": "approveWithdrawAddress(address,address,bool)", +"546dd883": "privateAmount()", +"546e1959": "changeOwnerStart(address)", +"546e428c": "modifySender(address,bool)", +"546ea281": "currentAction()", +"546efd98": "indiFundAndSocialVault()", +"547069bf": "crowdsaleWeiRaised()", +"5470b13b": "getWallet(uint256)", +"5470f6db": "setMaxSet(uint256)", +"547173da": "endPresaleDate()", +"54717ea9": "getValueBonusTokens(uint256,uint256)", +"54718917": "determineWinner(string)", +"5471d5d8": "VetLite(uint256,uint256)", +"5471dd4c": "FourthAddressBalance()", +"54722412": "OfferZone()", +"54734f7d": "setBoardAdd(address)", +"54738157": "OwnerCloseContract()", +"5473b4e9": "getTransactionConfirmCount(bytes32,uint256)", +"5473c701": "test_oneInvalidFalseEqLog()", +"54741525": "getTransactionCount(bool,bool)", +"54741f8d": "getMemBestPromouter()", +"5474d4d7": "_transferBag(address,address,uint256)", +"5474fbd3": "isDayThirtyChecked()", +"547505e3": "tokenAdministrator()", +"5475c22e": "bindOrderFunds(address,bool,int256)", +"5476bd72": "addToken(address,address)", +"5476ea9e": "auctionAddress()", +"5476f49d": "m_totalAppCount()", +"5477d33f": "price_constant1()", +"5477e571": "handleMultipleItems(address,uint256,uint256,uint256,uint256,uint256)", +"54786b4e": "getDSTSymbol()", +"5478786c": "IDLE()", +"5478dbb7": "play(uint256[3])", +"5478f06f": "updateMDTRewardAmount(uint256)", +"5478f468": "getHistoryLength()", +"54790b7d": "isOvertime()", +"547916ea": "finishRound()", +"54791f36": "_transferWithReference(address,uint256,string,address)", +"5479d940": "isUpgradable()", +"547a5168": "TomocoinTokens()", +"547a5eee": "setWhitelistSetter(address)", +"547ac053": "saveInitialParametersToStorage(uint256,uint256,uint256,address)", +"547c165f": "getApprenticeChestAvailable()", +"547c1b6a": "SALE_START_DATE()", +"547c4137": "setLLV_edit_32(string)", +"547c8011": "DemocraticPalette()", +"547cae29": "uintToString(uint16)", +"547cbaa5": "addFrozen(address,uint256,uint256,bool)", +"547dd162": "_newAgon(uint64,uint64,address,uint256)", +"547dfaf5": "WthdrawAllToCreator()", +"547e3f06": "changeReceiver(address)", +"547e6a5b": "simulate(uint256,uint8,uint8,uint8,uint8,uint8,uint8[176])", +"547eeac1": "acceptTransfer()", +"547fd950": "getTotalFrozenBalance()", +"54812d17": "initialize(address,address,uint256,uint256,address,uint256)", +"54817301": "setFreezeEnd(uint256)", +"5481c1ff": "referBenefitRate()", +"5481f43e": "getProviderTitle(address)", +"54823e66": "getStateHash(uint256)", +"54828eb7": "placeBetEven(uint256)", +"54829cad": "dubi()", +"5482d73c": "getDocument(bytes16,uint256)", +"5482d88e": "telcoin()", +"54830df7": "getApprovedTokenCount()", +"54840c6e": "tradable()", +"5484b5bf": "thelocation()", +"5485868a": "roundFactory()", +"5485bb82": "w_Team()", +"5486dfb3": "distributeSupply()", +"548707cd": "_bid(uint40,uint128)", +"54876921": "withdrawMoney(uint256)", +"5487e055": "PRICE_MID()", +"5488cc80": "currentCheckpointId()", +"548942e1": "UbecoinICO()", +"548ad42e": "chfScale()", +"548b273a": "outstandingEther()", +"548b5e6b": "contractStartDate_()", +"548c0ef4": "getRank(address)", +"548c20be": "getMyName(bytes32)", +"548d4a54": "updateTransferFeeRate(uint256)", +"548d91b1": "getPage(uint256[],uint256,uint256,bool)", +"548db174": "removeFromWhitelist(address[])", +"548dd51e": "newContract(address,address,uint256)", +"548e0846": "lastCallBlock(address)", +"548f896c": "setHouseEdgeMinimumAmount(uint256)", +"548fe136": "doWorkAndPayTOT()", +"549060bb": "Competition(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"54919a6c": "sendTokensSingleValue(address[],uint256)", +"549215a3": "amendEpoch(uint256)", +"54924aec": "adminsDisabledForever()", +"549262ba": "put()", +"5493a7f4": "importAmountForAddress(uint256,address,address)", +"549400bd": "valuee(uint256)", +"549503e5": "executeSell(address,uint256)", +"5495699f": "teamFund()", +"5495794b": "initialWei()", +"5495ca36": "MDC9Token(uint256,string,uint8,string)", +"5496b217": "createMintableBurnableToken(string,string,uint256,string)", +"549737e3": "setIBalance3(uint256,uint256,uint256)", +"549767c7": "balanceSpot(address)", +"5498e9e5": "AmericanAirlinesCoin()", +"5498eae4": "PAYA()", +"54990b15": "sendTranche(bytes32,address,uint256,bytes)", +"54999f6d": "initAmount()", +"5499c84e": "changeBonus(uint256,uint256,uint8)", +"5499dca5": "getMyStake()", +"549a9ffd": "changePiranhaName(uint256,string)", +"549aa194": "unreleasedAmount()", +"549bc193": "changeSwitchTime(uint256)", +"549bf4bf": "Liberty()", +"549bf9b9": "SFCapitalToken(string,string,uint8,uint256)", +"549c4627": "depositsOpen()", +"549c6bbb": "refundTokens(address,uint256)", +"549c7b58": "getAgon(uint256)", +"549caf35": "oxced()", +"549cbc7a": "startSale(uint256,uint256,uint256,address)", +"549d5e3b": "claimByAddress(address,address)", +"549d776a": "upgradeContract(uint256,address)", +"549ddcbd": "setFreezeHybridizationsCount(uint256,uint256)", +"549df19f": "resetAllWallets()", +"549eca74": "fpDiv(uint256,uint256)", +"54a019e2": "FOUNDER_FUND_2()", +"54a035aa": "_evaluateCategory(address,uint8,uint256,uint256)", +"54a04d2f": "setMigrateAgent(address)", +"54a0ebf5": "updateEntityName(uint256,bytes32)", +"54a1b431": "getVoteDetails(uint256)", +"54a1e232": "setSellOrdersContract(address)", +"54a28ded": "bhCheck()", +"54a2b2b8": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"54a325a6": "setKyberNetwork(address)", +"54a46211": "_removeInvestor(address)", +"54a598b0": "globalTokenTransferLock()", +"54a6c8c4": "toSmallrtc(uint256)", +"54a6ff68": "isVersionLogic()", +"54a874b4": "isSolved(address)", +"54a8b217": "qryModules()", +"54a8ca69": "transferAnyMEPToken(address,uint256)", +"54a8ed7b": "USD_CENT_PER_GZE()", +"54a9409e": "charge(address,uint256,uint256)", +"54a9de1c": "referrerBonus(address)", +"54aa0546": "MCNC()", +"54aa4e44": "setDisableBuyingTime(uint256)", +"54aac764": "SALE2_CAP()", +"54ab5561": "setOwnerTwo(address)", +"54ac2119": "EMJACTestToken()", +"54aca207": "iwithdrawal(uint256)", +"54acbe7b": "setSaleShare(uint256,bool,address,uint256)", +"54accc88": "OOREDOOCHAIN()", +"54ad2d22": "BitcoinCrown()", +"54ad7e1c": "setDividendDistributionPool(address)", +"54ad9718": "feePrice()", +"54adb7b1": "doNotAllocateBid(bytes32)", +"54adc686": "claimRewards(bytes32[],uint256[])", +"54ae8492": "CustodialForward()", +"54aee843": "MANHATTANPROXYMANAVE()", +"54af0d4c": "validAfter(address)", +"54af3548": "getSigner(address,uint256,address,uint256,bytes32,bytes32,uint8)", +"54afc9a9": "MyFirstToken()", +"54b025c5": "deleteRole(address)", +"54b02ba4": "cutoff()", +"54b0a26a": "getCPModel(uint256)", +"54b16510": "CreateProduct(string,string,string,string)", +"54b2a080": "valueAtIndexHasNext(uint256)", +"54b302c5": "maximumDeposit()", +"54b3fa58": "ServiceTask(string)", +"54b48428": "endTGE()", +"54b49859": "fmpContractAddress()", +"54b51fcc": "testNumberOfElements()", +"54b5aeac": "deleteDataPatternVoteRules(uint256)", +"54b61723": "round3Cap()", +"54b67057": "setTranformed(uint64,uint64)", +"54b6a520": "ICOFinished()", +"54b6ba95": "durationInDays()", +"54b6d871": "TempusToken()", +"54b6ed85": "AddNewCurrency(string,string,string,string)", +"54b7636e": "isKYCVerified(address)", +"54b84910": "needToReserve()", +"54b8c024": "fieldOrder()", +"54b8d5e3": "getName(bytes32)", +"54b8dd66": "countryItems(uint256,uint256,uint256)", +"54b8dfcb": "settleBuyer(address,uint256)", +"54b9b4fa": "UNLOCK_TEAM_1()", +"54ba34b5": "available_slots()", +"54ba7daa": "enter(bytes,bytes)", +"54bbd376": "getNextDate(uint32)", +"54bc16f2": "Exchanges()", +"54bdbd4d": "changeMinPeriod(uint32)", +"54be44f0": "updateMinimumStakingTokenPercentageEnabled()", +"54be50a5": "lastHoldingTax()", +"54beb2f4": "ProfitSharing(address)", +"54bec662": "removeValidation(address,bytes32)", +"54bef3b4": "getPlayerVaultsHelper(uint256,uint256,uint256,uint256,uint256)", +"54bf3a73": "playerToDungeonID(address)", +"54c0775f": "GetItems(address)", +"54c15020": "awardReferalBonus()", +"54c15b82": "isGeneScience()", +"54c29ce6": "assertOperationIsConsistent(bytes32)", +"54c35a3c": "setup(address,address,address,address)", +"54c3b0c4": "icoPhase3EndTime()", +"54c41fb9": "viewMerkleHash(uint16,uint8,uint8)", +"54c51813": "setFreelancer(bool,string,uint256,uint8,uint256[],uint256[],string)", +"54c552db": "setNumber(bytes32,uint256)", +"54c58dc9": "_getAllStorages()", +"54c5aee1": "collectReward()", +"54c5b696": "maxBonus()", +"54c5f850": "withdrawTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"54c72ead": "_getHardCap()", +"54c86628": "etsContract()", +"54c91295": "getEloScore(address)", +"54c916a1": "setOCPTokenContract(address)", +"54c93a4e": "lockTeamTokens()", +"54c990cf": "periodTimeFrame(uint256)", +"54c9cc44": "changePlayersName(string)", +"54ca435f": "PRESS_MARKETING()", +"54ca9095": "newEntity(bytes32,bytes32,uint256,uint256)", +"54cacaba": "QuarkChain()", +"54caf101": "bonus(uint256,uint8)", +"54cb5081": "getPromoMinPurchaseEth()", +"54cbe1e6": "gamePayoutResolver(address,uint256)", +"54cbffc4": "LimitOfMinutes()", +"54cc463b": "PreICOPrice()", +"54cc61bc": "Krown(uint256,string,uint8,string,address)", +"54ccdb0d": "seriesCSupply()", +"54cdac25": "usd2weiTopSales(uint256)", +"54ce0851": "round5TokensRemaning()", +"54ce7616": "TestTalk()", +"54cecb21": "AuthPending(address)", +"54cf2aeb": "swapFee()", +"54cf6668": "setEarlyInvestorExchangeRate(uint256)", +"54cfcd1b": "DEAWCOIN()", +"54cfe7d0": "nextForkName()", +"54d03b5c": "changeFeeMake(uint256)", +"54d05ad2": "changelp10(address)", +"54d06009": "whiteListAddress()", +"54d15005": "isDestroyed(string)", +"54d15347": "adminSuspendDeposit(bool)", +"54d18864": "totalProjectToken()", +"54d1b356": "GetBankerProfit(uint8)", +"54d1f77c": "UnpaidDivInt()", +"54d24f33": "TOKEN_PRESALE_LIMIT()", +"54d271fb": "unpause_1()", +"54d29b9a": "bidderWhitelist(uint256)", +"54d2a34a": "getHouseFee()", +"54d30c87": "release(uint256,bool)", +"54d3f3e4": "getTopInfoDetail(address)", +"54d41bbd": "unregisterAdmin(address)", +"54d4b7b2": "DateOfDeath()", +"54d4da57": "extractInvoicedLength()", +"54d50378": "winner_pool_amount()", +"54d5e127": "withdrawSettle(bytes32,bytes32)", +"54d68405": "LogFundAnswerBounty(bytes32,uint256,uint256,address)", +"54d6a2b7": "cancelSwap(uint256)", +"54d734e2": "createSubscriptionOffer(uint256,uint16,uint256,uint256,uint256,uint256,uint256,bytes)", +"54d79868": "getPositionBalance(bytes32)", +"54d7c34d": "transferAidrop()", +"54d87002": "showContributed()", +"54d89c92": "numberParticipants()", +"54d92ba9": "getCurrAuctionPriceTankID(uint256)", +"54d9d6f8": "findNextDay(uint256,bytes)", +"54da44db": "GetUserBetsInRaz(address,uint256)", +"54da5393": "Utils()", +"54da80c9": "Patney()", +"54dacb96": "numWhitelisted()", +"54daedc3": "transferCoins(address)", +"54db4547": "ethbuy(uint256)", +"54dcc49b": "_withdraw(address,uint256,bool,uint256)", +"54dcfb9b": "LinkToken(uint256,string,string,address)", +"54dd1da4": "releaseVestedTokens()", +"54ddd5d6": "retrieveRefund()", +"54dea00a": "getTokenRate(address)", +"54dfbca8": "setExtra(uint256,address)", +"54dfefb4": "DEEPPAYMENT()", +"54e030b7": "bonusDistributionAddress()", +"54e031cb": "setLockAccInfo(address,string)", +"54e08f76": "theInvestor()", +"54e0b451": "claimReward(bytes32,uint256)", +"54e0b464": "ICO_ADDR()", +"54e16753": "BLUECoin()", +"54e2cf2d": "_getPartLevel(bytes,uint256)", +"54e2dc8d": "getAdditionalTime(uint256)", +"54e30c37": "earlyBirdPrice()", +"54e33cf0": "getRewardsIndex()", +"54e35054": "getRoundResultInfoWithRoundID(uint256)", +"54e35ba2": "issueTokens(uint256,uint256)", +"54e4df26": "test_0_testGenerateTokens()", +"54e707a0": "START_WEEK_2()", +"54e76d74": "minimumPoolPurchase()", +"54e7aed8": "Frozenable(address)", +"54e7e98c": "PiexT(uint256,string,uint8,string)", +"54e8561b": "RDOCrowdsale(address,address)", +"54e8e4e4": "Test_SignedInteger_AdditionOverflow(int256)", +"54e921cb": "setFreezeMustCalculate(uint256,bool)", +"54e9244e": "orderFills()", +"54e9d5e1": "refundDonation(address)", +"54ea1538": "sellDrago(uint256)", +"54ea1af9": "flyDrop(address[],uint256[])", +"54ea4000": "identify(address[])", +"54eae3e6": "streamEnd()", +"54eb3f74": "getOptionState(address[2],uint256[7])", +"54eb9e88": "_preValidateICOPurchase(address,uint256)", +"54ec5d9b": "weiRaisedRound()", +"54ec6a43": "taxPaid()", +"54ecaba4": "COMPETITION_VERSION()", +"54ecd994": "ALLOC_BOUNTIES()", +"54ed08c8": "getPurchasedTokens(address)", +"54ed44f7": "generateCostFromAttributes(uint8[14])", +"54ed7b6e": "addHash(bytes)", +"54ee4d4b": "addCommunityGrant(address,uint256)", +"54eea796": "setEpochLength(uint256)", +"54ef356f": "isUserAdmitted(address)", +"54ef9c3c": "getEpisodeBranchData(uint256,uint256)", +"54f10ed0": "IknewToken()", +"54f11256": "retrieveCadvsLeftInRefunding()", +"54f12a2c": "isAllowed(string,string)", +"54f1469c": "shuffle(uint256[])", +"54f1bb4b": "Etheraffle(address,address,address,address)", +"54f363a3": "addition(uint256,uint256)", +"54f47346": "lastBlock_f12()", +"54f47be7": "transformSettingContract()", +"54f4824d": "myLastRef(address)", +"54f50f1b": "nicknameOf(uint256)", +"54f5164b": "isLocked(bytes32,uint256)", +"54f51d32": "SetCitySnapshot(address,uint256,bool,uint256,uint256,uint256,uint256)", +"54f5675c": "OfferedForSale(uint256)", +"54f56df1": "Shop(address)", +"54f60aea": "ONE_EMONT()", +"54f6127f": "getData(bytes32)", +"54f63105": "maxMintingPower()", +"54f63ee5": "resumePresale()", +"54f703f8": "factor()", +"54f78dad": "setBalanceSheet(address)", +"54f7b493": "getMinimumFundsInEuroCents()", +"54f7dd8c": "lotOfOwnerByIndex(address,uint256)", +"54f81786": "startTokenVotes(address[10])", +"54f83483": "needsTick()", +"54f8c2df": "getShipName(uint32)", +"54f9962a": "getAffiliateLevel()", +"54f9cbb3": "newVote(uint256,string)", +"54fa8044": "sendKrs(address,uint256)", +"54fac919": "decay()", +"54fbde65": "USDWEI()", +"54fbed37": "tokenIsBeingTransferred(address,address,uint256)", +"54fc85ac": "maxEth()", +"54fd4d50": "version()", +"54fead44": "_removeRecoverer(address)", +"54fef819": "throwsWhenRedeployingANT()", +"54ffb323": "MaxOffer()", +"54ffe626": "_getBonusTokenAmount(uint256,uint256)", +"550052b5": "iaOnInvested(address,uint256,bool)", +"5502109e": "actualCap()", +"550271c9": "Candle()", +"5502be83": "getBountiesByParticipant(address)", +"55036214": "priceRound2()", +"5503a659": "smallponzi()", +"5503d9ba": "numberOfPledgeAdmins()", +"55042668": "jobStarted(bytes16,address,address,uint256,uint256)", +"55044042": "CreateGUNS(address,uint256)", +"5504bf71": "attackerPrizeByToken(bytes32,address,address)", +"5504f45e": "getFrontEndTokenSupply(address)", +"5505075b": "validArb(address,uint256)", +"550538f6": "getOneTimeCosts()", +"550563ba": "Iscm(uint256,string,string)", +"55061ccc": "setImageBlurredAt(uint256,uint256)", +"55064d85": "exists(uint256,uint256,uint256)", +"5506aa6c": "weiMaximumGoal()", +"55072fef": "PRIVATE()", +"5507a82e": "setCalculatorAddress(address)", +"5507e9c0": "lockForAll(bool)", +"5509b160": "weightLostPartLimit()", +"5509f0f3": "minPurchasePreICO()", +"550b1f48": "eighthTime()", +"550b47b8": "setCoinPrice(uint256)", +"550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", +"550c99c6": "_createCutie(uint40,uint40,uint16,uint16,uint256,address,uint40)", +"550d8dca": "secondPeriodSupply()", +"550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", +"550e4f2b": "withdrawRemainingIPCToken()", +"550ed1f0": "getMaxBetAmount()", +"550ed61b": "jpyc()", +"55107916": "distributeMarketingShares()", +"5510f804": "acceptToken()", +"5510f8d7": "forkApprove(address,address,address,uint256)", +"55119b1a": "addBeneficiary(address,uint256,uint256,uint256,uint256)", +"55121498": "getLenderBalance(uint256)", +"55126d30": "LogEvent(address,uint256,uint256,string)", +"5512a353": "BONUSROLL()", +"5512a8d8": "myohoTest()", +"551336c5": "prophecise(bytes32,bytes32)", +"55138534": "Transaction()", +"55138d97": "addCar(address[4],uint256,uint256)", +"55139163": "refereesRateBonus()", +"5513a2ac": "claimByProof(address,bytes32[],bytes32[],uint256)", +"5513a34e": "getProductHistoryPrice(bytes32)", +"5514738f": "_packWarriorPvpData(uint256,uint256,uint256,uint256,uint256)", +"55152b9d": "DxChainToken()", +"55161913": "charge()", +"5516b6c5": "SECCoinSold()", +"55171365": "bitshmToken()", +"55173bb1": "ColaTokenToken()", +"55176f51": "FOUNDATION_POOL_TOKENS_VESTED()", +"55177ef1": "addressCoreSupply()", +"55181fba": "TEXBToken()", +"55186c99": "auditorCanWithdrawStake(uint256,address)", +"55189100": "payRewards(address,uint256)", +"551a450a": "tokenIdToListing(bytes5)", +"551a5376": "haltTokenTransferFromAddress(address)", +"551cacfd": "extractEther(address)", +"551dc401": "StateChanged(uint8)", +"551e2e39": "changeDefaults(uint256,uint256,uint256,uint256,bool)", +"551e44ca": "withdrawTokenForUser(uint256)", +"551e4c27": "setPeggleBot(string)", +"551e6ba6": "BoardRoom(address)", +"551ef860": "newRole(bytes32,address[])", +"551f3108": "versionSelectors(bytes32,bytes32,address)", +"551f8e2a": "add(address,address,uint256)", +"5520002a": "viewSharesSold()", +"552033c4": "RAY()", +"552079dc": "fallback()", +"55207a07": "changeMood(string)", +"55212c89": "seeleToken()", +"55219d5a": "tokenAllowed(address)", +"5521d17b": "betOnColor(bool)", +"552200f5": "check_part_location(uint256)", +"55234ec0": "remaining()", +"5523ec91": "fghcoin()", +"552405b0": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"55241077": "setValue(uint256)", +"55247a52": "wantToBeWhale()", +"5524defd": "onPayoutFailure(address,uint256)", +"5524e97a": "placeBet(uint256,uint256,uint256,bytes32,bytes32)", +"552548b5": "setMaxDiscountPermille(uint256)", +"55258a11": "updateAllScores()", +"5525d87f": "setOracleQueryType(string)", +"55265669": "showSupply()", +"55274378": "updateInterCrypto()", +"55291dbd": "claimEther()", +"552984b3": "stabilize()", +"552a41a3": "getRemainingBountyTokens()", +"552a6915": "getGood(uint256)", +"552ac31e": "prod(address,bytes32,uint128)", +"552b71aa": "executeDistributeCapital(uint256)", +"552c190e": "_DoubleDown()", +"552d2d5c": "getPerson(address)", +"552e387d": "XBVHandler(address,uint256)", +"552eb9e2": "ETStarPresale(address,uint256,uint256)", +"552f1270": "startWeek(address,uint8)", +"552f27f5": "setupEventsAdmin(address)", +"552f8224": "fechAllForCandidate()", +"552fee9d": "airdropTokens(address,uint256,uint256)", +"55302ebd": "hasUnionId(bytes32)", +"5530c519": "validate_pko(address,bytes32,bytes)", +"5531680c": "transferableBlock()", +"55325d87": "prizeWinners(uint256)", +"55326893": "setPOOL_edit_24(string)", +"5532edf2": "autorizadoraNuncaAutorizouCandidata(address,address)", +"5533639e": "toB32(bytes,uint256,bytes32,bytes)", +"5533ffad": "setUserNotifications(bool[],bool,uint8[],uint8)", +"5534236e": "AirDropPromo(string,string)", +"55347cce": "Setuppackagesale(uint256,uint256)", +"55348d9b": "addBeneficiaryVestor(address,uint256,uint256,uint256,uint256)", +"55352638": "updatePresaleMaxWei(uint256)", +"553543c5": "tokenSoldPreSale()", +"553594e4": "getActionHistorySize()", +"5535cd2f": "setPOOL_edit_1(string)", +"5535e7a8": "GameCreated(address,address,uint256,uint256,bytes32)", +"55367ba9": "pauseSale()", +"55368442": "removeMetadataObject(string)", +"5536deb6": "finalizePhase()", +"5536e2d6": "OCTACrypto()", +"5537f0ef": "betFinalize(uint256,uint8)", +"55380ed8": "GOOGToken()", +"5538210e": "tokenSweep(address,address)", +"5538689c": "changePartner3(address)", +"5538c964": "getPartnerInfo(uint256)", +"55390b0d": "PrestoToken()", +"5539a9c2": "refreshPublicFundingPersonalEthLimit(uint256)", +"5539d400": "authorizedAddress()", +"553a48fd": "isFunctionRemoveAuthorizedAddress(bytes)", +"553a5c85": "mintedTotally()", +"553a90b8": "updateStopGameOnNextRound(bool)", +"553aaafe": "MSPPlaceHolder(address,address,address,address)", +"553b196f": "setPurchasingPaused(bool)", +"553b6975": "setAmbassador(address)", +"553b6f83": "lastOracleFee()", +"553b74aa": "getNumberWallets()", +"553bf56d": "accept(uint256,string,uint256)", +"553c02ec": "getCountryBet(uint256)", +"553c6de9": "getPreIcoInvestor(uint256)", +"553cc48d": "Player(string)", +"553cd9c6": "MLC()", +"553d0d12": "transferTokensThroughProxy(address,address,uint256)", +"553df021": "deal()", +"553eb4db": "registerRewards(address[],uint256[],uint256)", +"553ec6be": "batchCancelSale(uint256[])", +"553f4fb3": "requestRand()", +"553f9157": "completeSale(uint256,uint256)", +"553fd043": "setMoneyRange(uint256)", +"553fd8ee": "ALLOC_FOUNDATION()", +"5540e6c1": "iMMCoinsellPrice()", +"55416e06": "voteA()", +"5541b817": "_leftChild(uint8)", +"554249b3": "delegateIncreaseApproval(address,uint256,address)", +"55426bad": "processPresaleOrEarlyContributors(address[],uint256[])", +"55427b42": "getBalanceofModifiedWeth()", +"5542f680": "retrieveToken(uint256)", +"55434bc9": "ToggleFreezeSelling()", +"55456f58": "maxcap()", +"554571db": "updateNarco(uint256,string,string)", +"5545f12b": "OnChainOrderBookV013bFactory()", +"5545f584": "soldForForth()", +"554600fa": "setOraclizeTimeTolerance(uint256)", +"554644d5": "_removeHolding(bytes12)", +"554652ce": "airdropToken(address[],uint256[])", +"554680f2": "updateActivation()", +"5546a12c": "setInformation(string,string)", +"5546e1ab": "getMyRefund()", +"5547d2d9": "setHtlcSettlePeriod(uint256)", +"554803c7": "RTCCOINTOKEN(uint256,string,string)", +"55485779": "minGas4Accts()", +"5548c837": "Deposit(address,address,uint256)", +"554917f5": "processMyRefund()", +"55491da8": "distributeJST(address[],uint256,uint256)", +"55494d1e": "fillBuyOrder(address,address,uint256,uint256,uint256)", +"5549563c": "claimManyTokenFor(address[])", +"5549ce5e": "WarriorSanctuary(address,uint32[])", +"5549ce6d": "ticketTransfersPerAmount(uint256)", +"5549f46c": "CustomerInsert(string,address,string,int256)", +"554a854e": "TransferCryptibles(address,uint256)", +"554ad7ff": "queryNTVUs(uint256,uint256)", +"554bab3c": "updatePauser(address)", +"554d0429": "getArrBoolField2()", +"554d184b": "getPrices(address,address[],address[])", +"554d27ca": "createOffer(address,uint256,uint256,bool,uint256)", +"554d578d": "getCap()", +"554d758e": "houseStatsOf(address)", +"554dbfc2": "EMISSION_FOR_SALESTAGE6()", +"554e00b4": "miniGameStart()", +"554e6c61": "getTargetBNumber()", +"554ed8b6": "escrowTransferList(uint256)", +"5550e4f3": "blackBoxAddress()", +"5551b6b6": "isDelegateEnable()", +"5551d1b7": "isAllowToIssue()", +"5552a483": "newOffer(address,uint256,string,uint256,uint256)", +"5552d1cb": "prizeIncr()", +"55532953": "LOCKED_ADDRESS()", +"5553dc1e": "THToken()", +"55540004": "createCampaign(address,uint256,string)", +"5555d6d6": "exist(uint256,address)", +"55560fd5": "mLoadAndReturn(address)", +"55566036": "getGamePool(uint256)", +"5556db65": "totalMined()", +"5556f3f6": "RareCards()", +"55575ddb": "setRevokeAddress(address)", +"55589cdd": "addressOf(address,string)", +"5558e1c3": "setMinToken(uint256)", +"555984fd": "cancelMintRequest(uint256,string)", +"5559d8d9": "getClamTax()", +"555aaff6": "calculate_range_attempt(uint256,uint256)", +"555ab116": "AhooleeTokenSale(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"555ae2c6": "STQPreICOBase(address)", +"555af8f4": "addressFundHolder()", +"555b6162": "allBalances()", +"555be5bd": "assignNewPlanet(address,uint256,uint256,uint256,string,string,string)", +"555befa8": "set1RoundTime(uint256)", +"555c4758": "distributeTimelockedTokens(address[],uint256[],uint256[],uint256[])", +"555d8e3c": "_printACourse(uint256)", +"555db767": "test_2_accessRestriction_newProposal_shouldThrow()", +"555e6582": "executeMintProposal(uint256)", +"555ea48c": "becomeHost(bytes32,uint8,bytes32,bytes32,string,string,string)", +"555f323a": "totalBurnedTokens()", +"555f498a": "getInvestorsTokens(address,uint256)", +"555fe48a": "batchTransferFrom(address,address,uint32[])", +"55605eee": "claimTokenReserveEcon()", +"5560ada8": "rateAddress(address,uint256)", +"5560d365": "horseShoeForSale(uint256,uint256)", +"5560ede2": "LYToken(uint256,string,uint8,string)", +"55616107": "setCOOAddress(address,address)", +"55619911": "emergencyTransfer(uint256,address)", +"5561c0e2": "registerChain(bytes8,uint256)", +"5563d919": "cancelCraftingAuction(uint256)", +"55642be7": "getRoundBets(uint16)", +"55642cf9": "CappedBonusSale(uint256)", +"55642e53": "blacklist(bytes32)", +"5564a08e": "setGame()", +"5565ca9d": "buyShip(uint16,uint16,uint8,bytes32)", +"5565ee7a": "exchangePointToCoin(address,uint256,string)", +"556665db": "expireTimeLimit()", +"55674064": "totalSupplyWithoutDecimals()", +"55674efe": "BondkickToken(string,string,uint8,uint256,int256)", +"55684aa6": "originBurn(uint256)", +"55688000": "burnIndexedFromByAddress(address,address,uint256)", +"5568fd5d": "icoPhase2End()", +"5569e58c": "EthereumPocket()", +"5569f5d0": "preSaleFinished()", +"5569fc0b": "CreateSale(uint256,uint256,uint256,uint64,address)", +"556a3689": "mint_Crowdsale(address)", +"556ae598": "depositBomb(uint256)", +"556b22c1": "get_record_count()", +"556b6384": "removeBlacklistDestroyer(address)", +"556bcece": "reinvest_color(address,uint256,uint256,uint256)", +"556cbc03": "setDefaultWhitelistVestingParameters(uint256,uint256,uint256,uint256,uint256)", +"556d5139": "getAverageTokenPrice(address)", +"556db16a": "validatePurchase(address,uint256)", +"556e2eb9": "TBL4TokenSale()", +"556e56d1": "BurnupGameFinance(address)", +"556e6edc": "indice()", +"556ed30e": "deactivated()", +"556f0dc7": "granularity()", +"556fe562": "notEqual(bytes32,bytes32,string)", +"55710346": "createTokensFromOther(address,uint256,address)", +"557119db": "withdrawForCharity(address)", +"5571954d": "_distributeRegistrationBonus(address)", +"55728d04": "setIssuer(address,uint256)", +"5572f9c6": "exchangeEther(uint256)", +"55737391": "LBRSMultitransfer(address,address)", +"5573a34c": "FP_SCALE()", +"5573c582": "walletTransfer(address,address,uint256)", +"5574cff5": "LOVEYOUFOREVER()", +"55764c81": "updatedTokensPerEth(uint256)", +"55765e9a": "createMeme(string,uint256)", +"5576af7d": "TransactionConfirmedAfterDispute(uint256,uint256)", +"5576b791": "transferWithVesting(address,uint256)", +"5577e89f": "testEqualityUint()", +"5578b51e": "CorelliCoin(uint256,string,string)", +"5578d24e": "addOldPresidents(uint256[],address[])", +"5579996d": "CHW()", +"5579ac74": "dna3(uint256)", +"5579ff8e": "walletBlogs()", +"557b0dc9": "addCar(string,string,string,uint16,string)", +"557bed40": "SocialMediaPayToken()", +"557d0195": "SuomenMarkka()", +"557d0479": "aidrop(address[],uint256)", +"557d0999": "userreinverst()", +"557dc796": "endRoundSeed()", +"557ed1ba": "getTime()", +"557f4bc9": "changeContractOwnership(address)", +"557f9ea6": "aDeposit(uint256,uint256)", +"557feee1": "setRegionCurrentImageId(uint256,uint256)", +"5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", +"55810d11": "appFund()", +"5581800c": "isCappedInEther()", +"5581be8d": "privatePresaleSupply()", +"558225fc": "setAtomSons(uint256,uint32)", +"558234f0": "USD_PURCHASE_AMOUNT_REQUIRING_ID()", +"55827137": "refreshVault(address,uint256)", +"5582c08d": "startMonarchyGameReward()", +"5582df33": "performInitialAllocations()", +"558305f9": "isFreezeEnabled()", +"55832ffc": "purchaseStartTime()", +"5583318a": "TOL()", +"55838881": "STAGE_ONE_BET_LIMIT()", +"5584002b": "_isSimulation()", +"55843fda": "getAdOwner(uint256)", +"5584c4f9": "getActiveProposals()", +"558599ea": "SQR_TOKEN_DECIMALS()", +"55866c8d": "isRefunded(uint256)", +"55869af1": "fromVersion()", +"558790d8": "testInitialTokenBalanceShouldBeZero()", +"5588227e": "restCrowdSaleAddress(address)", +"55889d01": "setMaxLockPeriod(uint256)", +"5588b929": "streamerContract()", +"558a7297": "setOperator(address,bool)", +"558a8f47": "sendFutureSupplyToken(address,uint256)", +"558b5aab": "setSellingToken(address,uint256,uint256)", +"558da2e3": "preSaleprice()", +"558e223f": "_buyPutToOpen(uint256,uint256,uint256,uint256,address)", +"558e44d3": "MAX_FEE_PERCENTAGE()", +"558f285f": "unsetMyIdentity(uint256)", +"558f46c8": "getZTKChecks()", +"55909da3": "spreadTokens()", +"5590e4d2": "toBytes32(bool)", +"55915b97": "initialSuppy()", +"55923471": "fiveHourCap()", +"55923cc5": "ElementToken(string,string,uint256,uint8)", +"5592d687": "settleBounty(uint128)", +"5592fc71": "getLotteryWinners()", +"55947d16": "XJJ()", +"5594e88c": "delegateToken(address,address)", +"559510d8": "left53(uint256)", +"55951e15": "dollarToLoveyRate()", +"55954b49": "initVesting(address,uint256)", +"559659fa": "getTotalRefund()", +"55976b05": "depositNotification(uint256)", +"5597801a": "addwhitelistedBatch(address[],address)", +"5597e9dd": "setCompte_36(string)", +"5597f3a5": "createRecord(string,uint256,address,string,string,string)", +"5598c576": "reveal_move(bytes32,uint8,bytes32,bytes32)", +"5598f8cc": "getCampaign(uint256)", +"559ac092": "getAirdropIdsByContractAddress(address)", +"559b0432": "yearCap()", +"559b0ed5": "giveBackOwnership(address)", +"559b1df4": "TokenStoreUpdated(address,address)", +"559b678c": "IsLimitPart(uint8,uint256)", +"559e5e06": "updateTokenAge()", +"559ec80d": "settleDeposit()", +"559ed339": "setTokens()", +"559f05dc": "canTrade(address)", +"559fb6f5": "assertAvailable(uint256)", +"559fd7ee": "setYearOneMultiplier(uint256)", +"55a01845": "forceFinished()", +"55a05335": "totalDragonLotteryNumber()", +"55a0b387": "getFreeToken(bytes32,bytes32,uint8)", +"55a129bd": "Tier(uint256,uint256,uint256,uint256,uint256,uint256)", +"55a36746": "newDigitalContract(string,address[])", +"55a373d6": "tokenContract()", +"55a392ac": "ExerciseEndTime()", +"55a3f425": "getBalanaceOf(address)", +"55a53ed0": "EtherSteem()", +"55a5a8d4": "DHUBTest02()", +"55a5dc3c": "SpegniCassaAutomatica()", +"55a5f702": "right45(uint256)", +"55a6b827": "setPrices(uint32,uint32)", +"55a85240": "random(bytes32,uint32,uint256)", +"55a964a7": "distributeALLY(address[],uint256,uint256)", +"55a9794a": "extract(uint256,uint256[])", +"55a9a87c": "fightMonster(uint16,uint8,uint8)", +"55aa8ad4": "Filesystem()", +"55ab314e": "setOrders(uint224,uint32,uint8,uint8,uint64,uint64,uint64)", +"55ad798f": "removeRobot(address)", +"55ae603e": "sell(uint16,uint16,uint8,address,uint256)", +"55aea767": "batchClaim(uint256)", +"55aed629": "SpinnersByAddress(address,uint256)", +"55af5c59": "editBalanceOf(address,uint256)", +"55afb12d": "isStbMintedForStaEx()", +"55afee43": "validateKYC(address,bool)", +"55aff5ba": "minTokParticipate()", +"55aff703": "updatedBet(uint256)", +"55b09c58": "myuseOf(address)", +"55b1182c": "stakeholdersPoolAddress()", +"55b12570": "TransferError(address,uint256)", +"55b1aa23": "DEEPPASA()", +"55b23f4c": "econVestingStages()", +"55b2bb0f": "MIN_FUND()", +"55b32c83": "sendFoundation()", +"55b37685": "balancePreSale3()", +"55b4bb4b": "HeavyLitecoin()", +"55b4f231": "vestTokensDetail(address,uint256,uint256,uint256,bool,uint256)", +"55b5ec64": "proceeds()", +"55b62dcf": "getThresold(uint256)", +"55b6ec79": "endCall(bytes32,uint256,uint8,bytes32,bytes32)", +"55b6ed5c": "allowances(address,address)", +"55b700af": "PRESALERATE()", +"55b71344": "FlexibleToken(string,string,uint8,uint256)", +"55b726bc": "adjustRate(uint256)", +"55b72f38": "getLongitude()", +"55b775ea": "setFeed(address)", +"55b8415e": "processReward()", +"55b860e1": "_updateDiscount(uint256,uint256)", +"55b8ef5e": "UserInfo()", +"55b93031": "minNumber()", +"55b954ad": "getRestTokenBalance()", +"55b9b9cf": "PXLToken(uint256,uint256,uint256,address,address)", +"55b9ca40": "withdrawCell(uint256)", +"55ba13da": "VaN(address)", +"55ba343f": "getMarket(bytes)", +"55bb34e5": "enableEmission(bool)", +"55bc0f07": "returnLongTokenAmount(address[3],bytes32)", +"55bc8725": "bannedAddresses(address)", +"55bcaf06": "halfMultiplier()", +"55bdd4ac": "offerCatForSaleToAddress(uint256,uint256,address)", +"55be1168": "view42()", +"55bf3dbb": "OrangeToken()", +"55bf5656": "crowdfundStartDate()", +"55bfe5b1": "chfRate()", +"55c01345": "coupon()", +"55c081d4": "setTier(address)", +"55c08200": "setSpecialPeacefulSkill(uint256,uint8)", +"55c0a5f4": "appendSource(address[],uint256[])", +"55c1743d": "SEOS(uint256)", +"55c1e611": "cancelBets()", +"55c208ad": "TimeDecayingTokenBoundaryRange(uint256,uint256,uint256,uint256,address)", +"55c28ed0": "zeuscoin()", +"55c2a0ac": "addQuantity(address,address,uint256,uint256)", +"55c33624": "mock_set(address,address,uint256,uint256)", +"55c39193": "removeBoardOnUser(address,address)", +"55c47867": "withdrawTokensForCloudexchangeTeam(uint256,address[])", +"55c4a8bf": "vig()", +"55c4b226": "pushUpdate()", +"55c4c5b3": "Cartycoin(uint256,string,string)", +"55c4e704": "enableAgency(address)", +"55c60500": "setRemainAirdrop(uint256)", +"55c623c6": "bidEth(uint256)", +"55c64ce1": "resetReward()", +"55c797ce": "setBonusWallet(address)", +"55c79f49": "payToEvaluator(uint256,uint256)", +"55c81595": "raffleState()", +"55c81ae9": "recipientContainer()", +"55c8c6fd": "tokensSupplied()", +"55c94f04": "closePosition(bytes32,uint256,address,address,bytes)", +"55c9e290": "DOI()", +"55c9e926": "getNumPlayers()", +"55ca92f8": "createBallot(uint256,uint256,address,string)", +"55cacda5": "minimumEpochInterval()", +"55cb155a": "WebcoinToken(uint256,address[])", +"55cb61ca": "EthTransferContract(address)", +"55cc4e57": "setIssuer(address)", +"55cd1915": "GA_chain()", +"55ce15f4": "transferAmount(address,uint256,uint256)", +"55ce3b9a": "setFundWallet(address)", +"55ce596b": "flowingHairAddress()", +"55ce76e6": "feeAmountThreshold()", +"55cf1008": "numberOfValidPartners(uint256,uint256)", +"55cf4e30": "setAccesser(address)", +"55cf969d": "transferReverseProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"55cfa833": "clientmanager()", +"55d0012d": "signupUserWhitelist(address[],uint256[])", +"55d04877": "_payRefund(bytes32)", +"55d13efe": "sha_data_group(int256[],int256)", +"55d17201": "OHC_Crowdsale(uint256,uint256,uint256,address)", +"55d17251": "CROWDSALE_CAP()", +"55d1b4d3": "softCapPrice()", +"55d1c5c7": "getEuroCollected()", +"55d1f799": "triggerSkill(uint32[11][32],uint8[32],uint8[4][31],uint8[3][3][31],uint8[5][11][32],uint16[11][32],uint32[3][11][32])", +"55d28f20": "configure(address,address,address)", +"55d374e9": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"55d39bc0": "setETHPriceUpperBound(uint256)", +"55d4956f": "setEndSaleDate(uint256)", +"55d55a76": "isActionAccount(address)", +"55d56ddd": "_adoptAxies(address,uint8,uint256,address)", +"55d595d1": "rollbackContract(uint256,address)", +"55d66c3e": "getMarketOrderWorkerpoolOwner(uint256)", +"55d67ba0": "Begin(string)", +"55d6d06e": "XIDToken()", +"55d6f3c0": "Telephone()", +"55d72a7d": "ActionStarUp(address)", +"55d7592d": "emergencyETHDrain()", +"55d79248": "miningTenPlat()", +"55d7fe2b": "RATE_SALESTAGE5()", +"55d8bbd5": "beginSell()", +"55d9275e": "payMoneytoAuthor(address)", +"55dac078": "SecuredNotes()", +"55daf6e6": "setInitialOwners(address[],uint256[],uint256[])", +"55db4092": "setTOS(address,bool)", +"55dc3b65": "DAVCoin()", +"55dd16cd": "CrowdsalePhase1(uint256)", +"55dd574c": "startPreSale()", +"55dd8171": "bbFounderCoreStaffWallet()", +"55ddc9f0": "mainSaleFirstStartDate()", +"55de28ae": "burnBadge(uint256)", +"55de5a93": "getCurrentEdition()", +"55de97ac": "OBR_Duration()", +"55deb8fc": "tell(uint256)", +"55df34f2": "leftOverTokens()", +"55dfb430": "Test1(int256)", +"55dfc97c": "limitSupplyPerYear()", +"55e0aece": "getListingService(uint8)", +"55e1726c": "LogSetStageStartTime(bytes32,uint256)", +"55e17544": "Tardis()", +"55e21474": "firstRoundCosmosTokensLimit()", +"55e2305e": "preauthorize(address)", +"55e37cec": "discountRatePreIco()", +"55e38f9b": "canAddNewClient(address)", +"55e3f086": "startRound()", +"55e40d98": "updateItem(uint256,string,uint256[6])", +"55e447aa": "queryBalanceOf(address)", +"55e46476": "createA()", +"55e61dcd": "operationsInQueue(uint256)", +"55e6b18e": "victorieumStaticToken()", +"55e6fc50": "deposit_fee()", +"55e79d29": "regex()", +"55e7a663": "setLowerPricePercentage(uint256)", +"55e7db94": "GBCToken()", +"55e97e93": "closeGenesis()", +"55e9c358": "weekLength()", +"55e9caa1": "log_move_fees(address,address,uint256)", +"55ea14f2": "atomicxSupply()", +"55ea2cf3": "GameBit()", +"55eb27c8": "getActualUserTokenBalance(address)", +"55ebcc83": "Market(bytes,uint256)", +"55ec4da9": "VaultMint(address)", +"55ec671a": "canBet()", +"55ee684d": "initLogo()", +"55ee6afb": "Wallet(address,address)", +"55eed9de": "developerFunds()", +"55ef2913": "isOperatorAuthorizedFor(address,address)", +"55efe565": "Caligula()", +"55f03816": "orderOnSaleAuction(uint256,uint256)", +"55f0690d": "transferAndLockMulti(address[],uint256[],uint256[])", +"55f0d02c": "ResidualValue(uint256,string,string)", +"55f13278": "presaleTokenCreationCap()", +"55f14c30": "minter2()", +"55f150f1": "desc()", +"55f1a3c8": "disableTokenSale()", +"55f21eb7": "getProvider(address)", +"55f25e3f": "getLavaTypedDataHash(bytes,address,address,address,uint256,uint256,uint256,uint256)", +"55f28260": "getOwnerAt(uint256)", +"55f29166": "cancelUpgrade()", +"55f2dcb2": "GouBi()", +"55f2de40": "abioSold()", +"55f39677": "phase2WeiRaised()", +"55f3c49c": "bookrequest(uint256)", +"55f413c9": "presale3_startdate()", +"55f48a46": "CUSTOM_ERC20_BURN_SERVICE_NAME()", +"55f54552": "setPaySize(uint256)", +"55f57510": "positions(address)", +"55f5856f": "transferToLimited(address,address,uint256,uint8)", +"55f6a412": "modify_NovumAddress(address)", +"55f78af8": "getLockBalance(address)", +"55f804b3": "setBaseURI(string)", +"55f82589": "tryExec(address,uint256)", +"55f86501": "exec(bytes)", +"55f92d23": "privateSaleContribution(address,uint256)", +"55f953e6": "getTokensCountOfUser(address)", +"55fa1348": "minimum_donation()", +"55fb8cee": "userCountsInAccount(uint256)", +"55fb9765": "UniversalGamingCoin()", +"55fbc8c2": "UpdateEthBalance(uint256,uint256)", +"55fbf10e": "PanterX(uint256,string,uint8,string)", +"55fe13ea": "setBuyingEscrowAddress(address)", +"55fecb0b": "payTheWinner()", +"55ff440a": "castStringToUInt(string)", +"55ff85c3": "returnBet(uint32)", +"56000acf": "processPayment(address,uint256,bool)", +"56003f0f": "createTemporary(bytes32)", +"5600e827": "elapsedMonthsFromICOStart()", +"5600f04f": "url()", +"5601477b": "addMilestone(uint256,uint256)", +"5601da3d": "innerTransfer(address,address,uint256,uint256)", +"5601eaea": "execute(uint256,uint256)", +"56025c9e": "DatareumCrowdsale(address)", +"5602a812": "sumICOStage5USD()", +"5602c05f": "AREF()", +"560334c6": "angelPool()", +"5603a50d": "checkVesting(uint256,uint256)", +"5603ac35": "NewBudget(address,uint256)", +"5603b9f9": "registerReferral(address,address)", +"56048edc": "getThresold()", +"56049a86": "riddle()", +"5604af49": "battleProvider()", +"560667f1": "setDocToAddress(address,bytes)", +"56075a98": "becomePlayer()", +"56078480": "GoneTrippinToken()", +"560791a9": "returnHolder(uint256)", +"5607a548": "m_ownerIndex()", +"5607f324": "checkLicense(address,address)", +"5607f408": "freezeTokens(address)", +"56084329": "SAATCoin()", +"5608b6d9": "changeprivatebonus(uint256)", +"5609825e": "partyOwnsAsset(address,address,string)", +"56098295": "getCandidateVotesByIndex(uint256)", +"560a665a": "buyTokensByReferrer(address,address)", +"560bb612": "SignatureValidator(address)", +"560bd3ec": "addCollaborate(uint256,address,bytes32,uint256)", +"560cb0a5": "SikobaContinuousSale(uint256)", +"560d3ca5": "toEXTwei(uint256)", +"560ecab5": "setSellCeiling(uint256)", +"560ed6a1": "refundEther()", +"560ef1bf": "getLockedToken(address)", +"560f5d4b": "currentStateSales()", +"561015e2": "notEqual(uint256,uint256,string)", +"56104861": "addEjariRule(string,string,uint256,uint256)", +"56105a08": "DgxSwap()", +"56111751": "respond(uint256,uint256,bytes32)", +"561187ae": "russianBounty()", +"5611bf3e": "AlerterAdded(address,bool)", +"56129134": "createPromoKitty(uint256,address)", +"561296e4": "GetReferralDataOfAddress(address)", +"5612acd3": "getScenariosInfo(bytes32)", +"5612e139": "getWebsite(address,uint256)", +"56131736": "wcf(address,uint256)", +"561337eb": "contractMessage()", +"5613680a": "whitelistInvestors(address[])", +"561387b1": "setPrice(string,string,string,uint256)", +"5614678c": "calculateDayOwnerCut_(uint256)", +"5615f415": "q2()", +"56161605": "TestGOATToken()", +"5616cafd": "setGasForCLI(uint256)", +"5616f7df": "getHatchCooldown(uint256)", +"5617fb0d": "TKDToken()", +"56189cb4": "approveInternal(address,address,uint256)", +"561960b5": "activateStartBlockOf(address)", +"56196d87": "pickReward(uint256)", +"56196dc9": "getTagByModuleType(uint8)", +"561a0d65": "serviceClaimOwnership()", +"561a28df": "market2018TokenCreated()", +"561a4873": "buyAd(string,string,string,uint256,uint8,address)", +"561b1d72": "iDeal()", +"561bbe1e": "getluckyprize()", +"561cce0a": "LONG()", +"561cd462": "balanceOfETH(address)", +"561e91a1": "makeBet()", +"561ef5b6": "for_sale()", +"561f1ba1": "sendToken(address,address,uint256,uint256)", +"561f39c0": "getGameMaker()", +"561fe29c": "createDeposit(address)", +"56200819": "updatePayoutAddress(address)", +"56206581": "MyInvestments()", +"5620d1d7": "lastCompleteEpoch()", +"56216916": "changeFinishSale(uint256)", +"5621df99": "ESMBCoin()", +"5622d195": "SvEnsRegistry()", +"562328ec": "LogBidConfirmed(bytes32,address,bytes32)", +"5623715b": "updateUpgradePoll(address)", +"56238b02": "setTokensPerEth(uint256)", +"56240b38": "PalestinePound()", +"56242e07": "customerDeposit()", +"56247e6d": "createKingdom(address,string,string,uint256,bool)", +"5624e064": "makePurchase(address,uint32)", +"562557f7": "accountsUsed(uint256,uint256)", +"56257ae1": "getFUTTotalSupply()", +"562605f1": "refundOn()", +"56264d6c": "setMaxTickets(uint256)", +"5626e246": "Stage2Allocation()", +"56277619": "setFiatRaisedConvertedToWei(uint256)", +"5628d443": "BTYCT(uint256,string,string)", +"5628fc09": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address,address,address,address,address)", +"5629365b": "playerWithdraw(uint256)", +"5629c69e": "ArtBC(uint256,string,uint8,string)", +"5629c6d9": "doExecution(address)", +"5629e70b": "NobarToken(uint256,string,string)", +"562b2ebc": "orderCalldataCanMatch(bytes,bytes,bytes,bytes)", +"562bde28": "transferMyName(address)", +"562bfb9f": "getAllCardsModifier()", +"562c45da": "withdrawDragonsPrime()", +"562c4784": "targets(address)", +"562c82ec": "aboveSevenBets()", +"562c9dfa": "test2_verlappingIntervalNewNode()", +"562cad23": "startCycle()", +"562cb622": "setAffiliateLevel(uint256)", +"562cc70c": "minWeiWhitelistInvestment()", +"562d4570": "refundStart(address,uint256,address)", +"562df3d5": "COMMISSION()", +"562e9df9": "addressTeam()", +"562ea884": "Explain()", +"562fa0df": "deposit(address,address[],uint256[])", +"56304e33": "addBalanceBlocks(address)", +"563183fc": "maskerOf(address)", +"56318820": "setTokenSwarmHash(address,bytes)", +"56323b5d": "BenderCoin()", +"5632b1fa": "payrolls(uint256)", +"56330403": "getDocsCount(string)", +"5633af60": "HeliumNetworkAddress()", +"5633c442": "lockedUpCount(address)", +"563433d7": "setStock(address)", +"5634653d": "verificationCountInt()", +"5634c88c": "sumOfNGeom(uint256,uint256,uint256)", +"563540a2": "startQueueing()", +"5636548f": "enableWithdrawal(bool)", +"56378983": "validTokenAmount(uint256)", +"56387fa3": "toogleMinting()", +"56394455": "getStageStartDate()", +"56397c35": "ledger()", +"5639bb3c": "buyPriceEth()", +"5639d152": "NewRC(address)", +"5639eb64": "IngridIsAHorribleHumanCoin(uint256,string,uint8,string)", +"563ad62b": "ConfToken()", +"563b1358": "approvePack(address)", +"563b54b9": "getQueuesLength()", +"563baca1": "fundForBounty()", +"563bd001": "tokenPriceForPreICO()", +"563bef94": "ShipSellMaster()", +"563bf264": "slash(address,address,address)", +"563c23a0": "timePaused()", +"563c78b0": "SendPreReserved4()", +"563e8233": "envio_dinero(uint256)", +"563ed6d0": "delAdminAddress(address,address)", +"563fce0b": "mappings()", +"56410637": "ethernautsStorage()", +"56411a0f": "ChrizzxToken()", +"56412d85": "getVote(uint256,uint32)", +"56416147": "getopenDdaListAssets()", +"5641ec03": "emergencyExit()", +"56423986": "DecreaseTheAllowance(address,uint256)", +"56430201": "InvestmentMade(address,uint256,uint256,string,bytes)", +"5643a711": "increaseMonsterExp(uint64,uint32)", +"56442869": "destroyCrowdsale()", +"56447520": "dteamVaultAddr4()", +"56451bc2": "removeBalances(address[],uint256[])", +"564566a8": "isSaleActive()", +"5646435b": "burnTokens(address,address,address,uint256)", +"564952d5": "trickleSum()", +"5649efbc": "superFeed()", +"564a187f": "getPopRemainingAsFixedPointForGameId(uint256)", +"564a565d": "disputes(uint256)", +"564a6b94": "cos(uint16)", +"564ad142": "testSubItem(bytes,uint256)", +"564ca533": "setRelayedMessages(bytes32,bool)", +"564e406f": "changeAgencyOwner(address)", +"564ef91d": "PRNG()", +"564f8d23": "rightmost_leaf(uint256)", +"564f9728": "get_row(uint256,uint256)", +"5650152b": "getNextAvailableReward(uint256)", +"5650e5e0": "Couchain(uint256,string,string)", +"565118f7": "lockReleaseDate2year()", +"565135ce": "removeUsersWhitelistB(address[])", +"56514d83": "distributeReserveFunds()", +"5651ce38": "priceStepDuration()", +"5652077c": "finalizeProposal(uint256)", +"56522390": "addEditTokenFee(bytes8,uint256,uint256)", +"565287c9": "votar(uint256,bytes32)", +"5652ced0": "OpnMind()", +"5652ec7e": "GnosisIssued()", +"5653de64": "tokenSold(uint256)", +"56544af0": "taxTillNow()", +"5654a341": "gameIndex()", +"5654b526": "sumHardCapICOStage8()", +"5654edb8": "btcUpdates(uint256)", +"56553a95": "transferIssue(address,uint256)", +"5655c490": "setProviderCurrentRate(uint256,uint8)", +"5655e37b": "CONTRIBUTION_MAX_NO_WHITELIST()", +"56570671": "GetContractStageLiving()", +"565707a8": "getDErc20(bytes32)", +"56575bd7": "setParticipateDailyLootContribution(uint256)", +"5658d212": "getFactoryForCountry(string)", +"565974d3": "details()", +"56597e65": "circulationCap()", +"5659856c": "addApprovedAddresses(address[],uint8)", +"565a2e2c": "getBeneficiary()", +"565a2ecf": "classicTransfer(address)", +"565a7c4c": "epm_system()", +"565af6a8": "referralRegistration(address,address)", +"565b3324": "intMin()", +"565cee48": "ALLOC_ILLIQUID_TEAM()", +"565e2220": "view24()", +"565e4fa1": "subtractScalar(int256[],int256)", +"565eab8e": "TransferMyGGTokens()", +"565ed5a2": "LogMigrationFinalized(address,address,address)", +"565f2da9": "lockTokensForTeamAndReserve(address)", +"565f3297": "bindkey(uint256)", +"565f3624": "testArgOutOfBoundsFail()", +"565fd2a7": "registerCoinData(address,uint256,uint256)", +"5660000a": "tokenRewardRate()", +"566038fb": "cancelTransferRight(address)", +"56605326": "DTFCToken()", +"56610400": "Proposals()", +"566150a3": "GenerateTokenContract()", +"5661ba15": "setDungeonTokenContract(address)", +"5661bcd8": "saosao3()", +"56624ce6": "minVoteWeightK()", +"56630bce": "KycVerified(address,bool)", +"56632637": "node_dupes(uint256)", +"5663896e": "setSecondsPerBlock(uint256)", +"56639a8e": "fixUSDPriceTime()", +"56639ef6": "PikewoodFund()", +"56640afe": "getCampaignLength(uint256)", +"5664a5a3": "MonsterCreatorInterface()", +"5666496a": "_applyForCertifation(string,uint256,bool,string,string,uint256)", +"5666da53": "RYXEX(address,address,address,uint256,uint256,uint256)", +"566735d8": "PreVNK(uint256,string,string,uint8)", +"5669c94f": "issueToken(address,string)", +"566a3cb5": "getTokensHolder()", +"566b28f0": "m_tokenDiscountThreshold()", +"566bbee7": "EventCentsPerTokenChanged(uint256,uint256)", +"566bd6c3": "offerSigner()", +"566c20fc": "writeMessage(string,string,string,string)", +"566c23ad": "setLock(bytes32,string)", +"566c37de": "teamTokenHolder()", +"566c8ed2": "TCI_client(bytes32,address,address)", +"566da66c": "OwnableContract()", +"566dccf4": "enableSaleAgent(address)", +"566dd702": "chargeAdvertiser(address,uint256,uint256,address)", +"566e638e": "createCard(address,uint16[5],uint16)", +"566e78fe": "TokenDistributionMock(uint256)", +"566eebd8": "test_claimShares_emptyRewardPool_notTranscoder()", +"566f4ac5": "payMasters()", +"566fc6de": "getProfitPercent()", +"566fca87": "GazpromCoin()", +"5670d6f1": "stopAirdrop(bool)", +"5670ef72": "setConfigs(bytes32[],uint256[])", +"56715761": "minDuration()", +"567188da": "getTotalBuyBySkull(uint256)", +"5671ec30": "totalCardCount()", +"5672f548": "physicalString()", +"5674a3ed": "runLottery()", +"5675527f": "EtherIco(address,uint256,uint256)", +"567556a4": "fundsTransfer()", +"5675db9c": "setShouldGenerateDna(bool)", +"5675ef9d": "BetPlaced(bytes32,uint8,address,bool,uint256,int32)", +"56765c51": "WITHDRAWAL_WINDOW()", +"56768538": "registerForeignAddress(address)", +"5676d075": "hardCapETHInWeiValue()", +"56780085": "TOKEN_DECIMAL_MULTIPLIER()", +"56782e5b": "hplus(uint256,uint256)", +"5678494f": "ProvePrivKey(bytes32,uint8,bytes32,bytes32,bytes32,bytes32,address,uint256)", +"5678524f": "nextBuyoutPrice(uint256)", +"5679623b": "initializationDelay()", +"567990ae": "LogNoticeMsg(address,uint256,string)", +"5679f636": "toggleBankrollReachedCap(bool)", +"567a03a7": "grantBurner(address,bool)", +"567a0f35": "testHitSoftCapPreDistribute()", +"567a9c79": "claimedBountyTokens(address)", +"567c08e2": "set_minFinneyToKeep(uint256)", +"567c31f7": "taxEarningsAvailable()", +"567c5b70": "getTicketParticipant(uint256)", +"567cc2b6": "setProduction(uint256)", +"567dbf18": "__forward(address,uint256,uint256,bytes)", +"567e75c4": "getLoanState(uint256)", +"5680a3ad": "childExists(address,uint256)", +"56813535": "const_contract_eth_value()", +"56814312": "NekoToken()", +"5681e00b": "getContractMetrics()", +"56820930": "purchaseMakeCard(uint256)", +"56826ee6": "receiveApproval(address,address,uint256,bytes)", +"568287ee": "ShopperlyGlobalToken()", +"5682d43d": "checkWithdrawAddress(address,bytes32,address)", +"56833b16": "AYA()", +"5683a9e0": "LASTTRIAL456()", +"56841b36": "payToReferer(address,uint256,string)", +"56845ca0": "updateProposalOwner(uint256,address)", +"56848c05": "awardMILsTo(address,uint256)", +"5684c219": "getReportingPeriodDurationInSeconds()", +"568531cc": "accountRegistryLogic()", +"5685f6bd": "DELTA_Token()", +"56860ddc": "GTDNToken()", +"56861322": "RecievedTip(address,uint256)", +"56861450": "isAtLeast(int256,int256,string)", +"5686b54b": "cancelAgreement(uint256)", +"5687f2b8": "emitApproval(address,address,uint256)", +"56885cd8": "crowdfunding()", +"56891412": "totalLocked()", +"568a2c55": "setNewStart(uint256)", +"568a8077": "gameResult(uint256,address)", +"568ab21e": "enter(bytes32)", +"568b5915": "votesMaskByOperation(bytes32)", +"568c2163": "END_OF_MINT_DATE()", +"568d13eb": "calculateRegionInitialSalePixelPrice(uint256)", +"568d3900": "getAgentIdByAddress(address)", +"568f57e1": "removeFromApproveList(address)", +"568f7830": "SECoin(uint256,string,string)", +"568f910d": "createPost(address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"568f9ce1": "activateDevice(bytes32)", +"5690d326": "initialize(address,address,uint256,address[],address,address,address,uint256,uint256,address)", +"5692b273": "finalTier()", +"5692e367": "decodedExpiration()", +"5692e54e": "test_0_ensureRegistryFunctions()", +"5693077a": "registerCampaign(uint256,address)", +"56930b55": "tokenOperationsFinished()", +"56939048": "disqualified(address,uint256)", +"5695dd8c": "FindX()", +"5695fa58": "getTotalDistributed()", +"56963c31": "setDistributeAgent(address,bool)", +"56979da7": "assignmentsClosed()", +"5698176a": "getPlayersPoints(address)", +"56982986": "lastBlock_a11()", +"5698fb44": "getTokenBonus()", +"56990301": "FoundersVesting(address,address)", +"56996f6b": "TDESupplyRemaining()", +"56997fb4": "potReserve()", +"5699c7b1": "getPendingWithdrawal(address,address)", +"569a7aab": "isLowercase(bytes32)", +"569aa0d8": "getPlayerSubmissionFromCompetition(string,uint8,address)", +"569bf836": "GYTToken(uint256,string,uint8,string)", +"569c5f6d": "getSum()", +"569ca935": "_setRolePermissions(address,address)", +"569d617b": "postRelayedCall(address,address,bytes,bool,uint256,uint256,bytes32)", +"569d623f": "setEstimatedWeight(uint256)", +"569e9c82": "burnByAgent(address,uint256)", +"569eaf61": "isPaidOut(uint256)", +"569f76e1": "teamOneDivsTotal()", +"569fa9f9": "releaseRecordsCount()", +"56a041fc": "exception(address,address)", +"56a060a2": "isTradingOpen()", +"56a24be0": "getPositionCallTimestamp(bytes32)", +"56a3015c": "Generation()", +"56a3f4ef": "collectMyReturn()", +"56a49b7a": "getStakeLockedStatus(address)", +"56a4e7f9": "GetGlobalProduction()", +"56a61fc4": "_trainPart2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"56a620aa": "decreaseAfterBurn(address,address,uint256)", +"56a6d9ef": "transferBalance(address,uint256)", +"56a70646": "giveBackEthers()", +"56a7564e": "undistributedTokens()", +"56a765c4": "whitelistBonusAmount()", +"56a7b0bf": "Burner(address,address)", +"56a807d9": "mintvestedTokens(address,uint256)", +"56a8a270": "competitionAddress()", +"56a9399d": "YUNXIN3Token(uint256,string,uint8,string)", +"56a9a68b": "updateAllowances()", +"56aa3892": "FooContract(address)", +"56aa772f": "Use_EmergencyCode(uint256)", +"56aa7cef": "PaymentFinished()", +"56ab4b5d": "TokenPurchased(address,uint256,uint256,uint256,uint256,uint256)", +"56abf07c": "giftStar(uint256,address)", +"56ac1efa": "AcceptsProof(address)", +"56ad2931": "_moveToken(address,address,uint256,bytes,bool)", +"56ad41c8": "XandraSupply()", +"56ad609e": "Addr1()", +"56ad9f57": "CROWDSALE_SUPPLY()", +"56ae89a3": "UpdateUserBitFlag(address,uint256)", +"56af3f2b": "PredatexTiga()", +"56af4d4e": "AanshuToken()", +"56afad92": "TSTORZContract()", +"56afd6e3": "howMuchCanIContributeNow()", +"56afeed6": "SQUIRREL_BOOST()", +"56b00cb5": "Horizon0x(uint256,string,string)", +"56b0443f": "getMarketPrice(uint8)", +"56b09382": "creditDaoAddress()", +"56b15308": "deleteProvider(address)", +"56b1ddbb": "HDT()", +"56b2c5bb": "doSucceedingTransfer()", +"56b30aec": "getPendingWithdrawlListCount()", +"56b30f33": "minAmountForDeal()", +"56b32da1": "gameStarter()", +"56b49ef0": "AuctusWhitelist(uint256,uint256)", +"56b4d760": "getHeroOwner(uint256)", +"56b54bae": "blockRewardContract()", +"56b558d3": "kingContract()", +"56b5d0eb": "_replaceModuleHandler(address)", +"56b6274b": "verifyEmail(address,string)", +"56b62e2d": "JetCoin()", +"56b63df7": "tokenLocks(address)", +"56b644b0": "changeRake(uint256)", +"56b6cb70": "foundersTokensWalletSlave()", +"56b6dbe9": "AustraliavsPeru()", +"56b7538b": "nextRoundDonation()", +"56b760f2": "numFabrics()", +"56b83dc5": "info_Symbol()", +"56b86bc2": "EtherDogCore()", +"56b8c164": "getCreatorTAOSetting(bytes32)", +"56b8c724": "transfer(address,uint256,string)", +"56b8edf0": "TransferEther(uint256)", +"56b9a8ab": "tokenSales()", +"56b9e9de": "getBrehonContract(bytes32)", +"56bb4d4a": "ICO4Period()", +"56bb9b43": "getAppCode(address)", +"56bc0c5e": "UserManager()", +"56bccf91": "depositTokens(address)", +"56bd182d": "privateSupply()", +"56bd928a": "platformLaunchDate()", +"56bdb5c4": "isMainSaleBonusTime()", +"56bdc4ae": "TokenLoot(address,address,address,address,address,address,address,address,address,address)", +"56c11ba3": "priceSelectFight2Death()", +"56c190ec": "processRefundEther(address,uint256)", +"56c21897": "PowerCoin(uint256,string,string)", +"56c23836": "transferDirect(address,uint256)", +"56c26f25": "getPlayerOwner(uint256)", +"56c290b8": "t_wallet()", +"56c2c1f6": "VESTING_TEAM_CLIFF()", +"56c38b2e": "vestingGrant(address,address,uint256,uint256)", +"56c3e31a": "mintContract(address,uint256)", +"56c4339f": "isMainBridgeContract()", +"56c46ac2": "getLockedContract(address,address)", +"56c49c2a": "contractFeeMinAmount()", +"56c4b246": "WrapperLock(address,string,string,uint256,address)", +"56c4e05a": "_balance()", +"56c51ea2": "getRestrictionStatus(uint256)", +"56c5df29": "PCFF()", +"56c686b1": "getPendingWithdrawl()", +"56c6a608": "WeBuyAnyHouse()", +"56c7627e": "tokenLimit()", +"56c7eb7c": "_destroyTokens(address,uint256)", +"56c7f461": "refundContributors()", +"56c82ae5": "sendBalanceForDevelop(uint256)", +"56c88f5f": "mintAll(address)", +"56c8c30c": "maxPossibleWithdrawal()", +"56c8e12e": "refundBalance(address)", +"56c8eaba": "KRE8()", +"56ca528f": "right18(uint256)", +"56ca623e": "toString(address)", +"56ca7143": "INITIAL_FUND_BALANCE()", +"56ca8d75": "setBuyingAmountRanges(uint256[])", +"56cac2e0": "letItRain(uint8,uint256)", +"56cb6655": "stopTokenMinting()", +"56cba008": "stopSales()", +"56ccdadb": "last_roll()", +"56ccf300": "ToptalToken()", +"56cd26eb": "Digiblock()", +"56ce0e6c": "updateMetadata(string,string)", +"56ce3f5c": "dCoinswapToken()", +"56ce4bc5": "receiveEtherFromForegroundAddress(address,address,uint256,address)", +"56ce6377": "WaveVoteContractRegistery()", +"56cea4b2": "addressFounders1()", +"56cff99f": "calcGav()", +"56d0adac": "freeToExtraMinting()", +"56d0bc9a": "updateProfileEmail(string)", +"56d13e6e": "setMaxReferrerBonus(uint256)", +"56d1c866": "getMsg(string)", +"56d1d4a2": "setExchangeThreshold(uint256)", +"56d26468": "appBase(bytes32,address)", +"56d27150": "TheMMORPGToken()", +"56d2ec1b": "internalBurn(uint256)", +"56d399e8": "stakingRequirement()", +"56d3e57d": "_generateRandomNumber()", +"56d400a1": "approveDispute(uint256)", +"56d40468": "lockBountyTokens(uint256,address,uint256)", +"56d44694": "PRICE_4()", +"56d58452": "containsSender()", +"56d59777": "setAdministrator(address[])", +"56d5f541": "_getApprovedAddress(uint256)", +"56d6cad0": "iFx()", +"56d73ad1": "getCertifierDb()", +"56d7bc54": "altCreateTokens(address,uint256)", +"56d7c0da": "ChooseAwea()", +"56d7c2c8": "transferERC20Token(address)", +"56d88e27": "len()", +"56d89b1f": "AuctusBonusDistribution()", +"56d906c7": "setBounty(address[],uint256[])", +"56d95932": "getActualTokensPerEther()", +"56d9bb9a": "viewAllCertificate(address)", +"56d9c0e3": "requestReading(address)", +"56da7743": "getBetsNums(address,uint256)", +"56da934e": "addTowardsTarget(uint256,uint256)", +"56daf2c1": "paymentWeiOwed(uint256)", +"56daf906": "THAW_CYCLE_LENGTH()", +"56db3df0": "weiForToken(uint256)", +"56db6353": "buildChainlinkRequest(bytes32,address,bytes4)", +"56dbc007": "isChild(address,address)", +"56dcd2fa": "ICO_LEVEL_3()", +"56ddbe7a": "setVRC(address,address,uint256)", +"56ddeea2": "getIcoDiscountPercentage()", +"56ddf404": "Executed(string)", +"56de9219": "Arina_amount()", +"56de96db": "setState(uint8)", +"56dfe628": "viewa2(address)", +"56e19e6e": "DDNToken(uint256,string,uint8,string)", +"56e1c40d": "burnFeeNumerator()", +"56e27ce6": "LuxToken()", +"56e2eab8": "listAddress(address,uint256,uint256)", +"56e379c1": "setICOLimit(uint256,address)", +"56e39c58": "ProtectedTransfer(address,address,uint256,bytes32)", +"56e3df97": "getGeneration(uint256)", +"56e40a32": "auctionEthEnd(address,uint256,uint256,bytes)", +"56e428fc": "LogAccessChanged(address,address,bytes32,address,uint8,uint8)", +"56e44954": "setExchangeRates(address)", +"56e49287": "auctionsEndTime()", +"56e4b68b": "supervisor()", +"56e4bc1f": "payed()", +"56e4e073": "TestETHToken()", +"56e523e2": "OpenSourceChainToken(address)", +"56e52cbb": "getMinWeiForDInit()", +"56e567e5": "balanceOfa(address)", +"56e5cf2e": "setBytesArray(bytes32,bytes32[])", +"56e5e12b": "fundariaPoolAddress()", +"56e60a31": "TokenExchangeFailed(address,uint256)", +"56e62326": "createMultiple(uint256[],uint256[],uint256[],address)", +"56e721b3": "_getRefBonus(uint256)", +"56e789eb": "checkTotalSold()", +"56e7bcd1": "putUsername(string)", +"56e7f6c7": "layerCount()", +"56e83e81": "randao()", +"56e8596f": "grantContributorTokens(address)", +"56e8b3ac": "PabloPlusToken()", +"56e8efd4": "EventNotarise(address,bytes,bytes)", +"56e8f53e": "_crownTotalSupply()", +"56e97617": "bullcrapToken()", +"56e9ae71": "OCTCOIN()", +"56e9d1f3": "deList(bytes32)", +"56e9ec88": "equipmentItem(uint256[],uint256[],uint256)", +"56ea84b2": "getMarketCurrentIndex(uint256)", +"56eaf1c0": "commissionPoints()", +"56eb5a79": "Bags()", +"56ebb303": "rewardContributors(address[],uint256[])", +"56ebd52d": "STRAAToken()", +"56ed8636": "membershipStatus(address)", +"56eeb3b0": "startAtBlockNumber()", +"56ef9296": "getMultiRequestFirstRequestId(uint256)", +"56f09125": "getConverters()", +"56f10988": "GDCNumber4()", +"56f14cf6": "_burn(address,uint256,uint256,uint256)", +"56f1594e": "UpdateMoneyAt(address)", +"56f19703": "rejectedBookingfc(uint256)", +"56f1d2dc": "increaseSystemCreatedCount()", +"56f1dd6b": "ifoodDev()", +"56f2b308": "GDCNumber2()", +"56f2eb90": "pendingRewardsToMint()", +"56f2fc89": "deployIdeas(address)", +"56f399a7": "getContractInvoices(uint256,uint8)", +"56f43352": "tradingFee()", +"56f464ea": "releaseFundsWhenBothSigned()", +"56f50473": "downPayment()", +"56f66f4c": "reportResult(uint32[],int8[],uint32,uint32,uint32,uint32,bytes32)", +"56f6e184": "addToWhitelist(uint8,address)", +"56f7cafe": "registry_exec_id()", +"56f91399": "trCut()", +"56f99fcb": "freezeLottery(uint32,bool)", +"56fa47f0": "split(address)", +"56fa9f6b": "allowRating(address,address,uint256)", +"56fadf8e": "createItem(string,uint256,uint256,address,uint256[6])", +"56fb46d7": "COOPERATE_REWARD()", +"56fb8a34": "getPivot(uint256,uint256,uint256)", +"56fbd029": "Saflok(bytes32,bytes32,bytes32,bytes32)", +"56fbdca3": "whitelistInvestor(uint256)", +"56fbf488": "setPrix(uint256,uint256)", +"56fc35d3": "BunzolaToken()", +"56fc6dae": "getUpline()", +"56fcb29f": "selfPayout()", +"56ff2318": "usersWithdrew(address)", +"56ff55d1": "_isSchemeRegistered(address,address)", +"56ff83c8": "crowdsaleWallet()", +"56ff918d": "getNextKillingAfter()", +"57006864": "checkBetParity(uint8)", +"5700cb10": "getMainRemainCoins()", +"570136ad": "liuToken(address,address)", +"57014fee": "domainOwner(string,string)", +"57016ded": "transfer_to_reserves(address,uint256,uint256)", +"57019b37": "setControllerAddress(address,address)", +"5701ac59": "calculateReferralFee(uint256,uint256)", +"5701e9c0": "TrustlessTransaction_Refunded(uint256,uint256)", +"570200c0": "setStarterPack(uint256,uint16)", +"5702b530": "byteToString(bytes1)", +"57035b60": "SWIZERStandardToken(uint256,string,uint8,string)", +"570468f0": "SupportRemoved(address)", +"5704b927": "ASXC(uint256,string,string)", +"57056261": "insert(uint256,bytes32[])", +"5705b612": "getUserId(address,address)", +"5706d99a": "STAGES()", +"5707812e": "addToLists(address,bool,bool,bool,bool)", +"5709013e": "changeToStage(uint8)", +"570919a6": "retrunError()", +"5709d7bd": "DevPromotionsMarketingWallet()", +"570a2a16": "right53(uint256)", +"570a8496": "uploadData(bytes32[])", +"570b615a": "tournamentDataIPFSHash()", +"570bc25f": "makeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"570ca735": "operator()", +"570d2f8f": "trustedWallet()", +"570d31b7": "ConsultaRegistro(bytes32)", +"570e0db5": "addDestination(bytes32)", +"570e6729": "getOptionHash(address[3],uint256[3])", +"570e997d": "gettnode(address)", +"570f65c4": "getProjectArbitrationFees(bytes32)", +"570fceb0": "updateHashrate(address,uint256)", +"570fe8c3": "cancel_payment(uint256)", +"571080ae": "getMyLobster()", +"5710ac73": "unlock(address,address[],uint256[])", +"5710de14": "newProof()", +"5710ed95": "contractBlock()", +"5711b311": "executeRemoveAuthorizedAddress(uint256)", +"571218fa": "priceModel()", +"57128ec1": "userGrowPoolAddress()", +"57135859": "BBBToken(uint256,string,string)", +"57138106": "verifyKyc(address)", +"5713fcb7": "compatible20()", +"5714db23": "AdvisoryPool(address,address)", +"5714e01f": "ownsAddress(string,address,address)", +"5714f6a1": "getTotalAvailableRelays()", +"57157189": "getListMarkets(address,uint256)", +"5715b530": "claimReservedTokens(string,address,uint256,string)", +"5715c5b7": "getTokenAddressByIndex(uint256)", +"57163cc3": "initAtx(address,address,address,uint256)", +"571694cd": "getHashOfSecret(bytes32)", +"57183698": "addProject(uint256)", +"57183c82": "instantiations(address,uint256)", +"5718b760": "withdrawSize(address)", +"5718b994": "checkEvent(address,bytes,bytes,uint256)", +"571959e0": "getServiceProvider()", +"57199334": "insertUser(address,bytes32,bytes32,bytes32,uint256)", +"5719a565": "SignerChanged(address)", +"5719dd22": "getTokenListLength()", +"571a045d": "change_game_stic(string)", +"571a0830": "withdrawAndKill()", +"571a1f66": "erc165UpdateCache(address,bytes4)", +"571a26a0": "auctions(uint256)", +"571af13b": "unlock10PercentTokensInBatch()", +"571b0227": "createUserLottery(uint32,uint32)", +"571b3d52": "createCitizen(address,uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"571c4539": "askQuestion(address,uint256,string,address[])", +"571e4a6d": "addEngineer(address,uint256,uint256)", +"571ebd3c": "addCandidate(address,bytes32)", +"571ec8d9": "addBoardScore(bytes32,bytes32,uint256)", +"571f4d9a": "getOffsets()", +"571fe016": "MAX_SALE_SUPPLY()", +"57204a1d": "unlockat()", +"57207703": "initBank(uint256)", +"5720988b": "QLANCE()", +"57211ac0": "getPaidOut(address)", +"5721b89a": "withdrawNoMoney(bytes32,address)", +"5721e419": "getBuyer(address)", +"5722e24a": "setLogger(address)", +"57230ff8": "createCity(uint256)", +"57240913": "vouched(bytes32,uint256)", +"57241f8e": "tokensOnSale()", +"5724630c": "Disbursed(address,uint256)", +"57246c1c": "getPartnerCash(uint8,bool)", +"57246d23": "jackpotSize()", +"57257a67": "startPrivateSales()", +"5725b8c5": "_initRandom()", +"57260364": "changeSubcourtTimesPerPeriod(uint96,uint256[4])", +"57263ce1": "_isProviderValid(uint256)", +"57266803": "casinoWithdraw(uint256)", +"57271a93": "bountyP()", +"57277b92": "storeEth()", +"5727dc5c": "BB()", +"5727e25d": "getCurrentRoundId()", +"5727e30b": "makeOraclizeQuery(uint256,string,string,uint256)", +"5727eec0": "speed_limit()", +"572816ef": "audit(uint8,uint8,uint256)", +"57282b96": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,bytes20,address,uint64)", +"5728ab6c": "kyberTrade(uint256,address,address,bytes32)", +"57292af8": "bonusRateOneEth()", +"572b130f": "addItem(uint256,uint256,uint256,uint256)", +"572b7a03": "minimumFeePlusDividendsPercentage()", +"572bcb3e": "setLockByPass(address[],bool)", +"572bcfe1": "deliverRewardedTokens(address,uint256,string)", +"572c1517": "transfer(uint256,string,bytes)", +"572c62ca": "poolSale()", +"572d5298": "setProduct(string)", +"572e85ec": "getCurrentPhase(uint256)", +"572f37b4": "notePrepurchase(address,uint256,uint256)", +"57315881": "getdoctor(uint256)", +"5731d433": "balanceInLottery(uint32,address)", +"5731d9cb": "seriesInfo(bytes32)", +"5731d9e3": "onefive()", +"5731f357": "oraclize_query(uint256,string,string,string)", +"5732788a": "validateCompanyName(bytes32)", +"57329424": "getPorscheByOwner(address)", +"5732a273": "backup_drawdown_amount(uint256)", +"573328ef": "advertising()", +"57332f08": "Lexcoin()", +"57337044": "randomByWeight()", +"57344e6f": "getCredit(address)", +"57347f24": "playerWithDraw(uint256)", +"573618f3": "eXchangeQualityCoin()", +"5736c9d4": "getStageBuyers(uint8,uint16,uint8)", +"57381228": "betInStageAndReturnExcess(uint256,uint256)", +"57381ee4": "sendTokens(address,uint256,uint256,bytes32)", +"57386c2a": "smallId()", +"5738fa56": "hasDataStream(bytes32)", +"57393674": "exhaustFusion(uint256)", +"573939de": "_resetFrozenInfo(address)", +"573c0bd3": "updateValue(uint256)", +"573d2411": "VeraCoinPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"573d3a23": "makeTransfer(uint256,uint256,uint256,bytes32)", +"573d559f": "_handleCoolDown(uint256)", +"573d72b7": "PERIOD_AFTERSALE_NOT_TRANSFERABLE_IN_SEC()", +"573dea96": "toWei()", +"573f642d": "_productDigest()", +"573f7af5": "mintNFTsForSale(uint256[],bytes32[],uint256[])", +"57400cf3": "currentJackPot()", +"57405301": "creatorad()", +"57408a98": "getNode(int256)", +"5740a4be": "CertifyDelegate(address,uint256)", +"5740d43c": "setDeprecated(address,bool)", +"57411a67": "getAddressDigit(address,uint8)", +"57417e78": "insetMoney()", +"5741fbce": "isPresellOpen()", +"574356b4": "VULCAN_PROMETHEUS()", +"5743cee0": "BwwToken()", +"57446636": "createContractOfAthlete(string,address,uint256,uint256,uint256)", +"574479e6": "currentPot()", +"574490cd": "ERC721Address()", +"57451104": "bonus_for_add_stage()", +"57478e38": "Free_Ether_A_Day_Funds_Return()", +"5747baf5": "Roles()", +"57481222": "get_all_project_information(uint256,address)", +"574844f4": "BLMFund()", +"574a5e31": "weiPerAtom()", +"574a89e9": "GOOGLE()", +"574bea92": "bonusPhaseOneDeadline()", +"574c339a": "HackerSpaceBarneysToken()", +"574c8776": "addAddressesToRole(address[],string)", +"574cc0fe": "addManyToWhitelist(address[],uint16,uint256)", +"574d6554": "setIPFSHash(string,string)", +"574e9063": "crowdfundPercentOfTokens()", +"574edd28": "updatePropertyData(uint256,string)", +"574f9a81": "setAttr0(uint256)", +"5750644a": "setProviderParameter(bytes32,bytes)", +"5750abfa": "BONUS_TIMES(uint256)", +"5750daa0": "GameToken()", +"57518243": "addToWhitelist(address,address)", +"575185ed": "createGroup()", +"5751892f": "increaseProjectCompleteLevel()", +"57530017": "setReservedTokensWallet(address)", +"57536e64": "GuessTheRandomNumberChallenge()", +"5753a6b2": "construct(bytes32,string,bytes32,address,uint128,uint256,uint64,uint64,uint256)", +"57548f32": "_tokenPurchased(address,address,uint256)", +"5754a042": "attempts()", +"5754aadc": "getEntryByName(bytes32)", +"57553101": "updateDetails(string,string,string)", +"5756572e": "Show_the_name_of_Option_B()", +"5757a66a": "_deployBallotChecks(bytes32,uint64)", +"5757dcdf": "getCooldownIndexFromGeneration(uint16)", +"5758537b": "payBonusAffiliate(address,uint256)", +"57593c23": "TokensDelegated(address,uint256,address)", +"57595e2a": "get_previous_global_audit_document(bytes32)", +"57597321": "_findpos(uint256,uint256)", +"57599dff": "curatorAddressOf(uint256)", +"5759e7af": "getMilestonesLength()", +"575a4187": "getClaimableStake()", +"575a7722": "setPOOL_edit_29(string)", +"575ab848": "MatCashToken()", +"575b4071": "currentPeriodEndTimestamp()", +"575b6efe": "EARLY_INVESTORS_SUPPLY_LIMIT()", +"575b8cc8": "kcck256str(string)", +"575cb0f6": "block()", +"575cea6b": "getUserReferrals(address)", +"575d462a": "phase1EndBlock()", +"575dfc4a": "Sale(uint256,uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,string,string,uint8)", +"575eaf98": "fractionalize(address)", +"575ed3de": "ViewGold()", +"575f7832": "InterestFinal(address,address)", +"5760168b": "ElearningCoin(uint256,string,uint8,string)", +"576077e2": "realtransfer(address[],uint256[])", +"57607ddd": "PUBLIC_SALE_END()", +"57611ba3": "offerCollectibleForSaleToAddress(uint256,uint256,uint256,address)", +"57614c2a": "resetLockReleaseTime(address,uint256)", +"576168fc": "partnerAddress()", +"57623d59": "AttachAsset(uint256)", +"5762a880": "standFeeBefore500()", +"5762f25f": "test_1_validShouldBe5()", +"57635dc1": "validate(address[5],address,uint256[12],uint256,bytes,uint256)", +"5763e103": "powercontract()", +"57646d5d": "OkkamiToken()", +"57650592": "getPlayerBackDataForMarketPlaceCards(uint256)", +"57651be6": "replaceUser(address)", +"57652f13": "assingAdminship(address,uint8)", +"5765a796": "addRegistered(address)", +"5765cc2a": "setmessiDevAddress(address)", +"5765dd1a": "MTC(address,address,address,address,address,address,address)", +"57670366": "getTargetReportsPerReporter()", +"576709a2": "finishingWithdrawing()", +"5767b9ab": "retrieveV(uint256)", +"5768bc4a": "_createArmy(string,string,uint256,uint256,uint256)", +"5768fca3": "paymentDestination()", +"57693e9a": "NBB()", +"576b8bba": "SeedMemberCanDraw()", +"576bc138": "NKCToken()", +"576c3de7": "getTier(uint16)", +"576c51bc": "countOfPublicKey()", +"576cecdc": "checkStubs(bytes32,bytes32,address)", +"576cfdd7": "window2EndTime()", +"576d067b": "StageOneDisable()", +"576d1ce1": "internalVerifyCert(bytes32,bytes32,address)", +"576d4e13": "_createLinglongCat(uint256,uint256,uint256,uint256,address)", +"576e6d4e": "_buyXaddr(address,uint256,bytes32)", +"576eac66": "setFundingGoal(uint256)", +"576f35e3": "setBatchSize(uint256)", +"576f7e31": "getApprovedBuyerMappingCount(address)", +"576f9cba": "isInDirectory(address)", +"577000a3": "onlyPartnersOrAdmin(address)", +"57712f37": "CappedBurnToken(uint256)", +"577131ac": "bankrupt(address[])", +"57717090": "transferWinnings(uint256,address)", +"5771d6e4": "readMessage(string)", +"5772437f": "unfreezeOf(address)", +"57727a04": "ZZCoinToken()", +"5772ae70": "setLoanManager(address)", +"5773faf9": "modifyVariable(address,uint256,uint256,uint256,uint256)", +"5774ce4d": "sendBonus(address,address,uint256)", +"5775b57e": "totalBuyOrdersOf(address)", +"57764094": "getRate(uint256)", +"5776af28": "shardAward(address,uint256,uint256)", +"57771a23": "del(uint256)", +"5778472a": "getOrder(bytes32)", +"57786394": "feeMake()", +"57788716": "doKeccak256(uint256)", +"577890f6": "presaleFallBackCalled()", +"5778bec2": "Deal()", +"57796e1c": "setVote(uint256,uint256)", +"577a75a0": "CRAWDSALE_END_DAY()", +"577bd336": "progress()", +"577c78f1": "SitcomToken()", +"577ccfe0": "tokenFrozenUntilNotice()", +"577ec5ae": "cookieProductionMultiplier()", +"577ef53d": "SetA(uint256)", +"577f7133": "PHOENIX_CORSAIR()", +"57806705": "addpatient(uint256,uint256,string)", +"5781d9e7": "isRegisteredRetailer(address,address)", +"57820829": "UP_etherWin()", +"578242c3": "CompositeCoinCrowdsale(uint256)", +"57831809": "payoutCount()", +"57835720": "setSetupCompleted()", +"578436a7": "CoinDisplayNetwork()", +"57850fc7": "getPotentialAmount(address)", +"578551aa": "goods(uint32)", +"5785b3f9": "VIRALTOKEN()", +"57861e65": "VVDBCrowdsale(address,address)", +"5786a552": "registerEmployee(address)", +"5786cbdc": "sendBackSurplusEth()", +"5786f28c": "regionsIsPurchased(uint256)", +"5786fd40": "getProductsCount()", +"57875631": "setAccessPolicy(address,address)", +"578799b3": "QRTok()", +"57880042": "bulkPurchageEgg()", +"57880c04": "releaseForce(address,uint256[],uint256[])", +"57885380": "ChannelAudited(uint256)", +"5788a081": "ownerAddressMap(address)", +"57894c1b": "createClone(address)", +"57895ca2": "setManagerContract(address)", +"5789a722": "LocusToken()", +"5789b1cd": "transferAdminMessage(address,address)", +"5789baa5": "isUnlockedBoth(address)", +"578a791d": "setExchangeFeeRate(uint256)", +"578aa665": "_createToken(string,address,uint256)", +"578affb4": "Logger(string,bool)", +"578b08e2": "GPUxToken()", +"578b2dab": "euroTeams(uint256)", +"578b3a56": "normaliseCardIndices(uint256[])", +"578bbdc1": "isSaleContract(address)", +"578bcc20": "reduceDebt(address,address,uint256)", +"578bcf35": "distributed(address)", +"578bcfca": "AddedToHolder(address,uint256,uint8,uint256)", +"578c3485": "iWantToKillMyself()", +"578c6642": "BONUS_BATCH()", +"578cf4a9": "testTemp1()", +"578d52b6": "GetDidPayOut(bytes32)", +"578de482": "OCE()", +"578de8aa": "addressToAsciiString(address,address)", +"578e2f7d": "verifiPost(uint256,bool)", +"578e9825": "burnEscrow(uint256)", +"578ee866": "getCurrentTimeBonusRate()", +"578f9658": "shopTome()", +"578ff67a": "new_hash(bytes32)", +"57901b19": "genRandomArray(uint256,uint256,uint256)", +"57902a75": "rateTier2()", +"579078cf": "TestAnyChain()", +"5790de2c": "ProposalAdded(uint256,address,uint256,bool,string)", +"579140e8": "BITSEACoinERC20Token(uint256,string,string,uint256)", +"579140f4": "tokenInitialized()", +"57915897": "faucet(uint256)", +"57918052": "setPriceIncreasingRatio(uint16)", +"5792b512": "Bettereum()", +"5792e1de": "CheckCarToken()", +"5792e262": "registration_fee()", +"579327fd": "TOTAL_ETHER_HARD_CAP()", +"5793511f": "playersList()", +"57938b2a": "requestCancellationMinimumTime()", +"5793bfdc": "createSDC(address,address,uint256,uint256)", +"579424e7": "HOWLToken()", +"579425b7": "feeBurnerContract()", +"57945e3e": "anyAssetHasChanges()", +"57945ed1": "FindMyFish_EnterBarcode(bytes9)", +"57946897": "Test11()", +"57946a86": "SPEKToken()", +"57950697": "testState()", +"57955f3b": "ExampleIntervalTree()", +"579599bd": "canCreateEdition(uint256,uint8)", +"57978a75": "updateInviteInfo(address,uint8)", +"5797cd52": "Settle(uint32,uint32)", +"57987d38": "PSCN()", +"57988a55": "card_gold_first()", +"57989b4c": "IsCityNameExist(bytes32)", +"5798d5bc": "rSetA(address)", +"579952fc": "transferFromTo(address,address,uint256)", +"579b9499": "estimatePurchasePayment(uint256,uint256)", +"579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", +"579cd3ca": "conversionFee()", +"579cdf17": "getAdminName(address)", +"579d4f7a": "changeHouseFeePercent(uint256)", +"579d5fba": "debug_hash3Int(uint256)", +"579da090": "needUpdate()", +"579db769": "getIudex(address)", +"579e0b87": "assignAnotherOwner2(address)", +"579f0789": "BNN_ALLOCATION()", +"579f20d8": "submitProxyVote(bytes32[5],bytes)", +"579f61d8": "valueDelete(string)", +"579fc25e": "contractFallback(address,uint256,bytes)", +"579fe761": "vote(uint80,uint80)", +"579fea7d": "setDolRate(uint256)", +"57a0685b": "privateSaleMinEth()", +"57a15c4f": "createOffspring(address,string,uint256,uint256)", +"57a1a58e": "setCycleResetTime(uint256)", +"57a218e6": "WeSource(bytes32)", +"57a27a76": "checkCompletedCrowdsale()", +"57a2e60c": "VoiceCoin()", +"57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", +"57a533e9": "logPromiseCreated(uint256,address,uint256,uint256)", +"57a756d3": "walletC()", +"57a83f25": "TKRToken()", +"57a858fc": "shares(uint256)", +"57a8c01f": "registerUser(address,uint256,uint256,uint256,uint256)", +"57a967ca": "waitingForClaimTokens()", +"57a96dd0": "proxyTransferWithReference(address,uint256,bytes32,string,address)", +"57a9838a": "Tronerium()", +"57aaafe2": "toggleArtworkVisibility(uint256)", +"57aaf08b": "getAlgosByCreator(address)", +"57abd75d": "_weiToMth(uint256)", +"57acc118": "setForward(address)", +"57ad693b": "MIN_UPDATE(bytes32,uint256)", +"57adc83a": "angelTime()", +"57aeb5c8": "convertToMiniCFT(uint256)", +"57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", +"57aeeb25": "becomeSquirrelmaster()", +"57af3eec": "STARTING_HIPSTER()", +"57afb890": "collectRemaining()", +"57b001f9": "unpause(address)", +"57b021f3": "dynamic_profits2(address,address,uint256)", +"57b07cd9": "getReleaseHash(uint256)", +"57b16811": "totalsInfo()", +"57b34be7": "_moveStage()", +"57b394bf": "walletWithdrawal(address,uint256,uint256)", +"57b45386": "removeCode(string)", +"57b473e2": "okamiMinPurchase_()", +"57b543e2": "getOwnersLength()", +"57b69e72": "_kittenContract()", +"57b70510": "parseResult(bytes)", +"57b7247e": "UserWallet(address,address)", +"57b7a0b6": "Paye()", +"57b8e8c3": "devcon2Token()", +"57ba8652": "getRank02()", +"57babe2e": "collectedBcy()", +"57bbf921": "salesaccount()", +"57bcccb6": "revokePermanentApproval(address)", +"57bce8b0": "sendWei()", +"57bcfc09": "HomeChain()", +"57bd2a65": "allocated3Year()", +"57bd4f7b": "getTime1(address)", +"57bf04be": "changeOwnedOwnershipto(address)", +"57bf66d4": "accountForIncrease(uint256,uint256)", +"57bfab93": "getAllABaddress()", +"57c07055": "scheduleCall(address,address,bytes4,bytes32,uint256,uint8,uint256)", +"57c19b4f": "postFreezeDestination()", +"57c1a709": "travelUnitFee()", +"57c1f9e2": "removeDistributor(address)", +"57c1feca": "BonusChanged(uint256,uint256,uint8)", +"57c393fa": "transferSuperuser(address)", +"57c3b376": "updateRandContract(address)", +"57c3f997": "isReserved(address)", +"57c508d3": "IsThisExternal()", +"57c60982": "calcProfit(address)", +"57c67ad1": "RobotTradingIco()", +"57c6c642": "MultiTranser()", +"57c85787": "batchMint(address[],uint256[],uint128[])", +"57c8b724": "addPresetTransfer(address,uint256)", +"57ca94fa": "_addUser(address)", +"57cb2fc4": "getInt8()", +"57cb48c9": "issuerTokenName()", +"57cb4947": "mintRequest(address,uint256,uint256)", +"57cc2d52": "testStoresParentChallenge()", +"57cc5941": "getTileClaimerAndBlockValue(uint16)", +"57ccbe28": "isPreICOPrivateOpened()", +"57ccc80e": "putSmartContractOnSale(bool)", +"57cd23a6": "TeamLockingPeriod24Months()", +"57cd650d": "sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", +"57cdd078": "isIcoInProgress()", +"57cdf799": "createContractItem(string,bytes32)", +"57ce0ec0": "MIN_PRE_ICO_SLOGN_COLLECTED()", +"57cea5c0": "weaponTokenIdToDamageForEncounter(uint256,uint256)", +"57cf9add": "showOwnerContract()", +"57cfd296": "getFurnace(address)", +"57cfeeee": "transfer(address,uint256,bytes32)", +"57cff409": "tpt()", +"57cff437": "getKunsByOwner(address)", +"57d0354b": "NothingToCancel(address)", +"57d083b5": "_evaluateSkill(address,uint8,uint256,uint256,uint256)", +"57d13917": "getCompany(uint256)", +"57d15c6a": "_time()", +"57d17805": "getTokensSold(uint256)", +"57d1c582": "TokenData(address,uint256,address)", +"57d25a0f": "retrieveAssets(address)", +"57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", +"57d444fd": "detachController()", +"57d4617b": "getAllocatedTokenAddress(address,address,uint256)", +"57d4f398": "unfreezeBalance(address)", +"57d55116": "_safeApprove(address,uint256)", +"57d55367": "publishResult(uint32,string)", +"57d56267": "getModuleCount()", +"57d5927f": "LogOraclizeCall(uint256,bytes32,string,uint256)", +"57d5939c": "IsValidated(string)", +"57d61f3c": "TokensSold(address,uint256)", +"57d62a30": "accountFeeModifiers(address)", +"57d6f5f2": "canLogIn(address)", +"57d70c0b": "getIcoRuleList()", +"57d713d5": "getPendingUserCount()", +"57d775f8": "epochLength()", +"57d786da": "_checkPolicyEnabled(uint8)", +"57d93329": "endCrowdsalePhase3Date()", +"57d9fd41": "orderLastDate()", +"57da1fb2": "isMonsterChampionship()", +"57da9166": "Dodol()", +"57db8024": "adminDeposit(address)", +"57dbefdd": "addExcluded(address,address)", +"57dc2658": "setLastCrowdsale(address)", +"57dc561f": "assignTokenIJK(address,uint256)", +"57dc5d9d": "adminer()", +"57dc9760": "DaoChallenge()", +"57dd2f26": "AntriexToken(uint256,string,string)", +"57dd8366": "jackpotGuaranteed()", +"57ddf217": "gameoverGetYUM(uint256)", +"57de26a4": "read()", +"57df844b": "getTokenTotalSupply()", +"57e07140": "testTransferFromCorrectlyAllowsDelegationOfTokenOwnership()", +"57e0b222": "ERC20Store(address)", +"57e18886": "reserveTokens(address,uint256,uint256,uint256)", +"57e1fae2": "transferChild(address,address,uint256)", +"57e233e2": "hardcapUSD()", +"57e25a79": "PullPaymentCapable()", +"57e2880d": "scheduleTransaction(uint256,uint256)", +"57e49ca8": "safeTransferChild(address,address,uint256)", +"57e4e95d": "burnerChangeable()", +"57e53d4e": "currentStageETHContributions()", +"57e5be05": "current_mul()", +"57e5eea5": "getCurrentBonus()", +"57e60c27": "removeAccountReader(address)", +"57e6a64c": "AddrRewardPlan()", +"57e6a6af": "METS6()", +"57e6c2f4": "isAuthorized()", +"57e71cd7": "setPreIcoHardCap(uint256)", +"57e7afd0": "addIPFSFile(string,uint256,string,bytes32,uint256)", +"57e871e7": "blockNumber()", +"57e8f401": "getUserLandLimit(address)", +"57e984cf": "changeMonthlyRate(bytes32,uint256)", +"57ea563a": "tokensByLtcTx(string)", +"57ea89b6": "Withdraw()", +"57eabab4": "defaultMintingAddress()", +"57eaeddf": "_isContract()", +"57eb3431": "recordPresalePurchase(address,uint256)", +"57eb95a7": "trainSpecial(uint256,uint256,uint256[2])", +"57ebc286": "approve_fixed(address,uint256,uint256)", +"57ebc7a8": "logLargeContribution(address,address,uint256)", +"57ee24af": "getNum(bytes32,uint256)", +"57ef58c1": "canDefrostAdvisors()", +"57f011b6": "destTokensEarlyInvestors()", +"57f032e7": "changeAgent(address)", +"57f04d2b": "updateLedger(uint256,address[],address,uint256[],uint256[])", +"57f1935f": "refundTokens(address,address)", +"57f196fa": "lastBidID()", +"57f1f6ca": "rareStartPrice(uint256)", +"57f232e1": "buyFucks()", +"57f2c6b7": "withdrawOfferForCollectible(uint256,uint256,int256)", +"57f2d763": "LongTerm()", +"57f32591": "changePriceChangeName(uint256)", +"57f46cbe": "collect(uint256[])", +"57f47bf9": "sh_doAgree()", +"57f4d5ec": "processDividends(address,uint256)", +"57f5abe5": "setERC20TotalPromo(uint256,uint256)", +"57f6280e": "FundManager()", +"57f65e24": "setArray(bytes32,string[])", +"57f664ed": "TOKENS_ALLOCATED_TO_PROOF()", +"57f70b21": "WorldToken(uint256,string,uint8,string)", +"57f7b905": "balanceBonusOf(address)", +"57f86b6a": "theRiver()", +"57f91458": "sacredToken()", +"57f94c82": "airDropTokenIssuedTotal()", +"57f9fb11": "internalRefund(address)", +"57fa7044": "_changeCycleValue(uint256,uint256)", +"57faa161": "TokenBonusGiven(address,uint256)", +"57fb25cc": "initialize(address,address,uint256,uint256,address)", +"57fbac06": "setAllowTransferExternal(bool)", +"57fbb9df": "withdrawContractBalance(address)", +"57fc3991": "returnTokens(address,address,uint256)", +"57fc8a20": "custom(address,bytes)", +"57fc990f": "_createAuction(uint256,uint256,uint256,uint256,address)", +"57fdf2b2": "transferrableBalance(address,uint256)", +"57fe5a5f": "FREEREWARDPPOINT()", +"57ffd7cc": "createNewContract(uint256,address,address,address)", +"57ffd863": "deleteHiddenPosition(bytes32)", +"5800827c": "mintExtraTokens(int256,uint256)", +"580101c8": "startingSnailAmount()", +"580215fc": "transferFinal()", +"580225d5": "HomeBridge(uint256,address[])", +"58022de4": "recoverSigner(bytes32,bytes32,bytes32,uint8)", +"58022e3f": "AkbulutTokenICO()", +"5802c695": "setPendingValue(uint256,bool)", +"5802f02d": "SavingsAccount()", +"58047913": "getWrappedContract()", +"58056392": "setLockBalance(address)", +"58057468": "confirmTransferOwner()", +"58057d81": "transferDomainToBuyer(uint64)", +"58058304": "clearFund(uint256)", +"580588a1": "havedAirDrop()", +"58062e66": "VIRTVEN()", +"5806ba15": "InbotToken(string,string,uint8)", +"580709cb": "downTheDrainImmediate()", +"58074d8b": "keyIndex()", +"5807630f": "transferEthToOnwer()", +"5807703d": "getMainGasPrice(bytes)", +"580786cf": "getRoundOpen(uint256)", +"58078a5a": "_checkAndAdd(bytes32,bytes32)", +"58079e7b": "setStartOfPresale(uint256)", +"580822da": "CoinLordToken(address)", +"5808e1c2": "betOnNumber(uint256)", +"5808ee15": "setDefroster(address)", +"5809ea99": "hitPrice()", +"580b72e1": "approveTokens(address,uint256,uint256)", +"580bd977": "distributeFunds(uint8)", +"580bdf3c": "disableBetting_only_Dev()", +"580c0fd8": "COMIKETCOIN()", +"580c2ae9": "numberOfPurchasers()", +"580c5072": "IsPremature(uint256)", +"580cf318": "tokenRemainCap()", +"580e77d4": "startMainSale()", +"580ea491": "PatronageRegistry(address)", +"580efd6b": "totalWageredForAddress(address,address)", +"580f2427": "LeeSungCoin()", +"580f3904": "requestTokens(address)", +"5810291a": "getplayerpool()", +"581191f7": "DNATIXToken()", +"58128969": "cycleStart()", +"5812f78a": "A2UToken()", +"58144fbd": "covmanAddress()", +"58150c8b": "GameRegistry()", +"581515fd": "howManyEtherInWeiToBecomeOwner()", +"5815528c": "setInviterEdge(uint256)", +"581627bc": "ownerWithdrawl(uint256)", +"58163c23": "calcBonus(uint256,bool)", +"5816ba9d": "unFrozen(address)", +"58172da1": "payBankroll()", +"581732dc": "setLev1(uint256)", +"5817465c": "RidgeToken()", +"58178168": "punkIndexToAddress(uint256)", +"581847d6": "changeDeveloperSFTDestinationAddress(address)", +"58189259": "CerradoToken()", +"58189e03": "processExits()", +"5819dde2": "getNumbersFromBytes(bytes3)", +"581a3aea": "ActiveSCO(bool,uint256)", +"581a81c1": "setMinHouse(uint256)", +"581aa8a3": "SRVSKCOIN()", +"581bdd23": "createCampaignAndChannels(address,uint256,string,address[],address[],address[],uint256[],address,string,bytes,uint32[])", +"581c1f47": "isFreeze(address,uint256)", +"581c281c": "getVotingStatus()", +"581c5ae6": "invest(address,uint8)", +"581c71d0": "ifClaimedNowPublic()", +"581ca8bb": "adjustCash(address,int160,string)", +"581d1015": "publicsalesTokenPriceInWei()", +"581d1d04": "devTokensIco3()", +"581d416a": "Paid(uint256)", +"581e69de": "pauseRoundD()", +"581f1125": "returnUnsoldSafeSmall()", +"581f3c50": "createAndOpen(address,address)", +"581fc2ad": "getNextReleaseTimeOf(address,address)", +"581ff6e2": "VerifyPublishedResults(uint16)", +"5820c9ae": "round4()", +"5820dce5": "abbuchen(uint256)", +"5821c831": "AcceleratorStart()", +"58226a76": "isInTime()", +"58229d91": "MasToken()", +"58240d5f": "listPrycto4()", +"582420bb": "calculateMatchPrice_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", +"582518ac": "updateclaimableTokens(address,uint16)", +"582527f8": "setNewData(uint256)", +"5825884f": "setOwner2(address)", +"5826344b": "frozenAccount()", +"582681d2": "compareDateTimesForContract(uint256,uint256)", +"582747ba": "PLCCToken()", +"58275869": "ETHReceived()", +"5827834a": "DecenturionToken(uint256)", +"5827b250": "completeInitialization()", +"5827c0c8": "SSE()", +"5828fa47": "ThawTokenTransfers(address,bool)", +"58292a3d": "emission(uint256)", +"58294575": "updateComplianceAddress(address)", +"5829d310": "entries(int256)", +"582a466a": "burnGasAndFree(address,uint256,address,address[],bytes)", +"582a5c83": "HWGCToken()", +"582ab0b4": "setup(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"582b4019": "updateCheckHourly(bool)", +"582b6add": "isDataSourceCallback()", +"582b6fe4": "crowdsaleUncappedTime()", +"582bd287": "snapshotDelegators(uint256,address)", +"582ca57b": "get_associations()", +"582cca06": "SafeCoin()", +"582d14f8": "updateHpbNodeWithString(address,string,string)", +"582d2d32": "removeFreeRoom()", +"582d6033": "listDda(address,uint256,uint256)", +"582d9008": "willyWantTalkToken()", +"582ee26e": "PendingFees(address)", +"582f5009": "calculateBonusToken(uint256)", +"58306772": "getAmountOfEtherSell(uint256)", +"5830da9c": "Escrow(address,uint256,uint256,bool,address)", +"5830f2ea": "subPrivateSale(uint256)", +"58317685": "getBuy(uint256,address,address)", +"5831e95d": "_burn(address,address,uint256,bytes,bytes)", +"58339a40": "CryptoScalper()", +"58341922": "totalSupplyLocked()", +"5835ac93": "extract(uint256,uint256,uint256)", +"5836746d": "deployStep()", +"58371ccd": "endSaleTime()", +"5837bb11": "ALLOC_FOUNDER()", +"5837e083": "move_history(uint256)", +"58392aaa": "setSibling(address)", +"583ae991": "BitCharityToken()", +"583b4715": "createTitty(uint256,string,uint256,address,string)", +"583ba757": "getrestrictTime(address)", +"583be14e": "isCampaignRegistered(uint256)", +"583c4be9": "PurchaseUnlocked()", +"583d175f": "clientClaim(address,uint64)", +"583d5435": "queryTokensOf(address)", +"583dbacc": "specialKitties(uint256)", +"583dbc09": "updateBonuses(address,bool)", +"583ed080": "End7()", +"583f0ae6": "purchaseMembership(address,address)", +"583f18ff": "totalRemainingTokens()", +"583fe287": "ReussitexCoin()", +"584084d9": "_setString(bytes32,string)", +"5840b0f8": "getPixelData(uint256)", +"5840f4ec": "applyRate(uint256,uint256)", +"58410259": "onBuy(bytes32,uint256,address,uint256,uint256,address,uint256,uint256,address,address,uint256,uint256)", +"58413194": "lmda()", +"5841b9bf": "kingCost()", +"58428322": "grantAccessDeploy(address)", +"58439b9f": "EtheraffleLOTPromo(address,address)", +"5843b811": "_setPendingUpgradeabilityOwner(address)", +"58441a58": "minimumBid(string)", +"58451f97": "totalAccounts()", +"58453569": "initializeSpendLimit(uint256)", +"58453fef": "updateBalance(uint256,uint256)", +"5845d13c": "NamdoToken()", +"58462b36": "contBuy(address,uint256)", +"58463e11": "FeedBackedCall()", +"58469cd1": "generateStakeForDelegationSchemaHash(address,uint256,bytes32,bytes32,uint256[],bytes32,uint256)", +"58476a7a": "mintForSale(address,uint256)", +"58480d41": "setVotesPerProposal(uint256)", +"584855f0": "shopShoes()", +"58487bee": "request(uint8,address,bytes4,uint256,bytes32[])", +"5848a7fa": "getOwnerPotatoes(address)", +"58491ad9": "ICNQCrowdsale(uint256,uint256,uint256,address,uint256,address)", +"58491ecb": "companyPeriodsElapsed()", +"5849cf77": "registerDINWithResolver(address,address)", +"5849f66b": "claim_ico()", +"584af2c3": "approveOwnerTransfer(bytes32)", +"584df977": "LimitPerUserEBC()", +"584e492a": "arr(address,uint256)", +"584e86ad": "suggestUrl(bytes32,bytes32)", +"584ed064": "getBattleCardList(address)", +"5851166c": "endOfRound()", +"58516661": "agents()", +"5851bc4f": "FJH()", +"5851f1e2": "trexdevshop()", +"58525fda": "tokenAllocation()", +"5852f5c1": "buildingToUnits(uint256,uint256)", +"58541aba": "jackpotLastPayout()", +"58543fbd": "getRoomIdxByNameElseLargest(string)", +"5855279e": "whitelistAccounts(address[])", +"58553baa": "cycleInfo()", +"5855da3d": "extractAddress(bytes,uint256)", +"5856db43": "isIcoClosed()", +"585789cd": "startPreDistribution(uint256,uint256,address,address,address)", +"5857b86f": "getAuctionByAuctionId(uint64)", +"5858e7d0": "bigBearCoin()", +"5858ef10": "testErrorNonOwnerCantBreach()", +"58593578": "toss(bool)", +"585a8aba": "getCredit(address,address)", +"585a9385": "icoProceeding()", +"585aa91e": "setSpecialDefense(uint256,uint8)", +"585ac3e8": "icoEnded()", +"585b0f05": "BitcoinMax()", +"585b143a": "getVariableReleasableAmount(address)", +"585b7752": "setOraclizeString(string,string,string,string)", +"585bc25b": "weiRaisedDuringRound(uint8)", +"585bc523": "cooAddManager(address)", +"585bf3e4": "totalLux()", +"585c6fc9": "EtherHealth()", +"585ce259": "VitToken()", +"585d2133": "newDeliverable(uint256)", +"585da351": "setUnitAttackMultiplier(address,address,uint256,uint256,bool)", +"585e1af6": "hard_cap()", +"585eb90c": "withDrawAmount(uint256)", +"585f9b7a": "addVoteOption(uint256,string)", +"58613568": "estimateNeumarkReward(uint256)", +"58619076": "OwnerRemoved(address)", +"58620daf": "RegistryAddress()", +"58623642": "minStartDelay()", +"5862fd31": "ethCrowdsale()", +"5863115e": "parseId(uint256)", +"586360ce": "distributedTokens()", +"5864c56c": "numberOfSuccessfulPings()", +"5865c60c": "getOperator(address)", +"58669d6d": "updateMinimal(uint256)", +"586a2d02": "Anastomos()", +"586a2d79": "_decreaseBalance(address,uint256)", +"586a4be5": "Bitsurge()", +"586a52e0": "GenerationSupply()", +"586a69fa": "getMaximumStackCheck()", +"586a94ba": "MassivelyMultiplayerOnlineGameToken()", +"586ab7a9": "MYSYMBOL()", +"586ac27d": "ProofOfPassiveDividends()", +"586b1c8f": "DetherCore()", +"586ccfa7": "deathData_f11()", +"586cf767": "MintedEthCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"586cf845": "setTierEndTime()", +"586dd1d5": "CCXTokenERC20()", +"586e416e": "updateMaxWei(uint256)", +"586e8283": "deliveredEth()", +"586facb4": "adminSetMarket(address,uint8,uint256)", +"586fc5b5": "lastMint()", +"58708479": "setWinningChance(uint256)", +"587097ab": "test_FiftySixPercent()", +"58712633": "GetCommission()", +"587181d1": "getVaultLock(address)", +"5872282d": "icoReferralBonusInPercentage()", +"5872fe45": "getAccountAddress(address)", +"5873533d": "playGame(uint256)", +"587378a4": "updateQualifiedPartnerCapAmount(address,uint256)", +"5873cbe6": "setFile(string,string,uint256,address)", +"587419d5": "depositStartTime()", +"58750784": "getUniqueKey(string,string,uint32)", +"5875caaf": "objectKnife()", +"587631eb": "PlayX5()", +"587695cd": "tokenGiveAway()", +"58769981": "transferAdminship1(address)", +"5876d2ef": "rwGas()", +"58793050": "Setup()", +"58793ad4": "submitHKGProposal(uint256,string)", +"5879f7ad": "myDroneList(address,uint256)", +"587ac47c": "sendFromAdvisorWallet(address,uint256)", +"587af98d": "GetConfirmRound(bytes32,uint8)", +"587b060e": "_setUpgradeContract(address,address)", +"587c2b8e": "setContributionDates(uint64,uint64)", +"587cde1e": "delegates(address)", +"587d044f": "saveHistory(address,address,uint256,uint32)", +"587d6a20": "ICOactive()", +"587ed791": "getPoolPayPeriodInBlocks(uint256)", +"587f2e50": "putInStud(uint256,uint256,uint256)", +"587fa8dc": "closeHouse()", +"587fae93": "release(uint8,address)", +"58802e24": "BancarCrowdsale()", +"5880b7da": "CAAction(address)", +"588100d4": "DIP_TGE()", +"588198c4": "getBonusByETH(uint256)", +"5882128d": "tradeActive()", +"588268a8": "tokensForCreators()", +"588378c8": "fillGoldSellOrder(address,uint256,uint256)", +"58838594": "anacoContract()", +"5884afe1": "setBetLimit(uint256,uint256)", +"5884f2f5": "GeneralUpdate(uint256,uint256,uint256)", +"5885c626": "allocateTokensToMany(address[],uint256[])", +"58864d04": "Clost(uint256,string,string,uint256)", +"588666e2": "updatePriceManualy(uint256)", +"5886c51e": "setnotice(string,string)", +"58883688": "setAvailableToken()", +"58888b40": "_calculateUnlockedTokens(uint256,uint256,uint256,uint8,uint256)", +"58892f63": "setCrowdsaleStartDate(uint256)", +"588a9db5": "CoreBuyShare(address,address,uint32,uint256,uint32,address,address)", +"588b1578": "contractEth()", +"588b5c7b": "approveExchange(address,address)", +"588bf28b": "addBonusForOneHolder(address,uint256)", +"588bf923": "removeEmailHash(uint256)", +"588c2a6d": "WithdrawReserve(address)", +"588cbbea": "changeSettings(uint64,uint8,uint8,uint8,uint8)", +"588cff4c": "emitPublicCapabilityRemoved(address,bytes4)", +"588d376f": "BoleroToken()", +"588d6a17": "findSemiRandomWinner(uint16)", +"588dadc6": "contestChampion(uint256)", +"588e6b83": "giveTurnToPlay(address)", +"588e730c": "numOfMythical()", +"588ec17f": "minContributionInUsdCents()", +"588ee29b": "debug()", +"588f27e6": "CloudCredit()", +"588f7e12": "lotteryRatio()", +"588f85b3": "IHPM()", +"588f9acc": "toggle(address)", +"58902cc6": "sendFromGftWallet(address,uint256)", +"5891215c": "getAllGas()", +"58919155": "DOGE()", +"5891c8aa": "removeExceptAddress(address,address)", +"58924b81": "getClaim(address,string)", +"589316f6": "level_2_amount()", +"58931f7a": "buyWhiteByName(bytes32)", +"58932f50": "btcTokenBoughtAddress()", +"58933dbc": "totalTokensRemind()", +"5893d481": "rndTmEth_(uint256,uint256)", +"58950108": "BucksCoin()", +"58958be3": "_getTxDataBlockNumber(address,bytes32)", +"58963c85": "setBilateral(bytes32,bool,bool)", +"5896521b": "getCurrentTotalFunders()", +"5896749a": "getAssetRate(address)", +"5896f37f": "getDistritos()", +"5897164a": "ADDR_MAYA_ORG()", +"589737fb": "getOwnPartnerMessage(uint256)", +"5897a1c6": "getValueToInvest()", +"5897a5a0": "setupInitialState()", +"5897e3e4": "splitTheBet(address)", +"5898f402": "compaundIntrest(uint256,bytes5,uint256,uint256)", +"58990372": "changeColorBlue()", +"589a1743": "creatorOf(uint256)", +"589b88bd": "pauseRoundC()", +"589c6beb": "_deleteDefender(uint32,uint8)", +"589d7a3c": "setupViaAuthority(string,string,string,string,address,uint8,bytes32,bytes32,uint256)", +"589dca45": "_emitEmission(bytes32,address,uint256)", +"589e5edd": "InvestorsQty()", +"589e74be": "giveSticker(address,uint256)", +"589f30c7": "FAPFundDeposit5()", +"589fd72a": "vehicleDates()", +"58a0bcdd": "checkPayout(address,uint32)", +"58a122a2": "cancelRequestUnpause()", +"58a191c3": "changeFactorySetupFee(uint256)", +"58a1cabf": "lastPayoutTime()", +"58a2982a": "_deleteSmallestBidder()", +"58a356d0": "sendMoney(uint32)", +"58a383fd": "jsonArrayLength(string,string)", +"58a3d1a1": "getUnclaimedTokenAmount(address,address)", +"58a4903f": "cards()", +"58a50ce8": "setEtherAddress(address)", +"58a53130": "getABaddress(uint256)", +"58a5b0f6": "tournamentStartTime()", +"58a687ec": "finalizeSale()", +"58a70a15": "acceptReturning(uint256)", +"58a74333": "singularDTVFund()", +"58a79319": "GetWildCardOwner(uint256)", +"58a87b69": "withdrawTokenFromCrowdsale(address)", +"58a94e73": "DigitalValleyToken()", +"58aa0f1b": "numOfRare()", +"58aabdf8": "MaxMinersXblock()", +"58aaf48a": "gasForShuffle()", +"58ab010d": "buyParticipationTokens(uint256)", +"58aba00f": "updateManager(address)", +"58acf31b": "findJob(uint256)", +"58ad4673": "LEXTokensContract()", +"58adc9ae": "transferToWalletAfterHalt()", +"58ae6242": "AOIS()", +"58ae8bcf": "voteInMasterKey(address)", +"58af7794": "create_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", +"58b092d7": "addRaiseTapProposal(string,uint256)", +"58b0a2aa": "setPriorityPassContract(address)", +"58b1effb": "bidOfBidder(address,uint256)", +"58b1f29c": "refundBounty(uint256)", +"58b255ea": "fechVoteNumForCandidate(address)", +"58b435fb": "MeritICO()", +"58b4370b": "round(int256)", +"58b4a3c4": "testInitalBalance()", +"58b4c035": "createNewGoBoard(uint256)", +"58b5525d": "depositCharge()", +"58b5e775": "batchAllocateExp(address[],uint256[],uint256[])", +"58b8dc61": "promoCreationPlayerCount()", +"58b92d57": "UserAuthorized(address,address)", +"58b9dcef": "registerVotingPrepareFailure()", +"58bad3eb": "setEarlyParticipantWhitelist(address,bool)", +"58bafdbc": "contribute(address,uint256,uint256,bytes)", +"58bb7d70": "checkEthSold()", +"58bc3456": "addtokensWL(address,uint256,uint256)", +"58bcdb5e": "collectCredits(address)", +"58be0830": "_refSystem(address)", +"58be98dd": "migrateBlockjack()", +"58beec9f": "summBounty()", +"58bf7067": "setBlockedAccount(address,bool)", +"58c0bde0": "feeNewThread()", +"58c16557": "disableTypeById(uint256,uint256)", +"58c1c328": "_validateId(bytes32)", +"58c23767": "setCXLExchangeRate(uint256)", +"58c264f6": "preico_holdersAmountInvestWithBonus()", +"58c31603": "loanCollectionNotification(uint256)", +"58c3b0eb": "updateTokensApproved()", +"58c3b870": "memo()", +"58c3c193": "newBatch(bytes32)", +"58c56f1e": "C20Token()", +"58c60d5e": "gracePeriodCap()", +"58c62b12": "SingularDTVWorkshopFee()", +"58c6bce8": "getCustomBuyerForIndex(address,uint256)", +"58c6f08b": "takeTokensBack()", +"58c721ce": "majorEvents(uint256)", +"58c75136": "currentPremiumSale()", +"58c757ba": "associateWithSig(bytes32,bytes32,address,uint256,uint256,bytes32,bytes32,uint8)", +"58c8c0a7": "getVoteNumberList()", +"58c8ca0c": "_clearInventory(uint256)", +"58c9e484": "buyPoints(uint256)", +"58ca5419": "CheckBest(uint256,address)", +"58cb7323": "MainnetETCSurvey()", +"58cc13f3": "asserts(bool)", +"58cda0ab": "requestData(address,address,uint256)", +"58cdddf9": "getRoundDifficultyBlock(uint32)", +"58ce4b48": "setFundingStartTime(uint256,uint256)", +"58cea888": "getWinOutcome(bytes16)", +"58cf7c71": "unfreezePrice()", +"58cf9570": "transferFeeRate(address)", +"58d0390b": "getCurrentICORoundInfo()", +"58d10aae": "BlackJack()", +"58d162da": "potSplit_()", +"58d168b7": "generatePermutationKey(uint8[4])", +"58d1aebd": "claim(string,string,string,bytes32,bytes)", +"58d213ae": "InToken()", +"58d25b93": "LogSendFunds(address,uint8,uint256)", +"58d2ab45": "numberOfPixels()", +"58d37dc5": "lastMintingAmount()", +"58d38231": "broughtSprites(uint256)", +"58d3b2c8": "babyBornEndVoting(string,uint256)", +"58d3b617": "Notifier(string)", +"58d3ce8a": "thirdExchangeRate()", +"58d40f7e": "existsUserByEmail(bytes32)", +"58d4e051": "YSS(uint256,string,string,uint8,address)", +"58d63255": "GandhiJi()", +"58d6a99e": "CTChinaCoin()", +"58d75180": "ECToken()", +"58d782be": "getLotteryDetails(uint16)", +"58d7bf80": "reserveRate()", +"58d80a8c": "doSetSettings(uint64,uint64,uint256)", +"58d8652e": "addIssue(string)", +"58d8f76f": "getPlayerBet(uint256,uint256,address)", +"58d90108": "COLOR_RED()", +"58d9e758": "DeleteUserByID(uint32)", +"58d9f95d": "VIETNAMTOKENTEST()", +"58d9fa04": "addUser(uint256,address)", +"58da3ca9": "jdecompose(uint256,uint256,uint256)", +"58da9bbc": "getAssetPackData(uint256)", +"58db3258": "removeFromPrivateWhitelist(address)", +"58dc03f9": "TigerCashToken()", +"58dc2a8b": "RESEARCH_AND_DEVELOPMENT_WALLET()", +"58dc8807": "updateMintAuthority(address,int256)", +"58dd0eb1": "propose(address,string,string,string,string,uint256,uint256,uint256,uint256)", +"58dd6f23": "setTokenTransfer(bool)", +"58df0383": "burnFinish()", +"58df8ed8": "adminGetEnabled()", +"58dfb058": "LNCH()", +"58e039bd": "listContractByModTextAndCttName(string,string,uint256,uint256)", +"58e0a9d7": "YanToken()", +"58e1c174": "RTI()", +"58e29e17": "initiateProof()", +"58e2cd76": "watch(address)", +"58e3815c": "BASalesPrice()", +"58e3e914": "devuelveNombreApp(address)", +"58e46275": "calculateTheEndPrice(uint256)", +"58e55365": "marketingBalance()", +"58e59c32": "get_entry(uint256,uint256,uint256)", +"58e5d5a5": "PunkBought(uint256,uint256,address,address)", +"58e61e12": "contribute(uint256[],bool,uint256)", +"58e66522": "CoolTourToken()", +"58e69c5a": "hashimoto(bytes32,bytes8,uint256,uint256[],uint256[],uint256,uint256)", +"58e71b15": "Organization()", +"58e756b6": "NewQ(string,bytes32)", +"58e77a92": "setSelfPretorian(address,address,address)", +"58e85e03": "LogTokensBought(address,uint256)", +"58e868c9": "DisableMember(address)", +"58e879f3": "nextThaw()", +"58e8922b": "payImportTax(address,uint256)", +"58e92fb0": "setFreezeForPEInvestors(uint256,address,uint256)", +"58e9a706": "checkLargeContributionsLock(address,address,uint256)", +"58e9b208": "Controlled()", +"58ea80e5": "setThroneCreationPrice(uint256)", +"58eae004": "awardBuyers()", +"58eafc37": "addVirusDefence(uint256)", +"58ebde43": "generic_holder()", +"58ec63bc": "setAccountMilestone(address,uint8)", +"58ecaa45": "StgThreebonusEnds()", +"58ed766d": "priceETHUSD()", +"58eda67a": "get_Holders(uint256)", +"58edaa9c": "getController(uint256)", +"58edbc84": "mkDelegation(bytes32,bytes32,uint256)", +"58ef82a0": "setMilFold(address)", +"58efa06f": "bytesToBytes5(bytes)", +"58efe3cd": "changeLink(bytes,address)", +"58f0cbc7": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"58f10528": "eggExists(uint256)", +"58f11566": "ReserveAccount()", +"58f1490f": "addTransaction(address,uint256,bytes,bytes,uint256)", +"58f24f3d": "transferFromGate()", +"58f33e98": "isTaker(address)", +"58f35f10": "createT513(uint256,address)", +"58f3a115": "tokenDistribution(address[])", +"58f3da21": "adminGetContractBalance()", +"58f4996f": "verifyIncluded(bytes,bytes32,bytes32)", +"58f4be1e": "getIntention(uint256)", +"58f4f160": "Halo3D()", +"58f5382e": "challenge(string)", +"58f65330": "_checkPixelUnderLeft(uint256)", +"58f693de": "tokenForSP()", +"58f7f6d2": "BNB()", +"58f816bf": "redeployProduct(bytes32)", +"58f8e99e": "Jackypot()", +"58f94f13": "CarParkCoin()", +"58fa67f9": "calculateMintTotal(uint256,uint256,int256)", +"58fa812b": "TRANSFERS_PER_TRANSACTION()", +"58fb9f36": "_addBonus(uint256)", +"58fc0151": "getRequired(address,uint256,bool,uint256)", +"58fd6aec": "register(bytes32,string,string)", +"58fd6fe2": "getBonusMultiplier(uint256)", +"58fd955c": "rateETHUSD()", +"58fd989b": "getLockedStructPulseLockHash(address,address,uint256)", +"58fe54a1": "GetBoilerInfo(address,uint256)", +"58fe8847": "BIRC()", +"58feb4a3": "earlyCommunityAddress()", +"58ff5111": "buyTokenForAddress(address)", +"58ff7613": "RxEALSaleContractExtended()", +"5900477a": "settleCancel(bytes,bytes)", +"59004b28": "checkIfExists(uint256,uint256[],uint256)", +"5900a09c": "addFunder(address,address,uint256,uint256)", +"59011400": "RewardDAO(address,address,address)", +"59015ed5": "getAccountModifiers()", +"59016c79": "getContent()", +"59032232": "setPatch(uint256,uint8,uint8)", +"59032614": "FipsTransfer(bytes20,address,address)", +"5903eff2": "root_10(uint256)", +"5903f01b": "giveEthBankRollAddress()", +"5904941b": "CoinealToken()", +"590528a9": "sellShares(uint256,uint8,uint256,uint256)", +"590589fd": "WithdrawToMember(address,uint256)", +"5905b171": "getNextAssignedRequest(uint256)", +"5905d314": "Added(bytes32)", +"5905e1c5": "askPrice(address)", +"590731b7": "secondarySaleCut()", +"590791f2": "getOwnerBalance()", +"59084ea9": "setWhitelistedWallet(address,bool)", +"5908984b": "foreignPurchase(address,uint256)", +"59092c29": "XtremCoin()", +"5909e897": "buyRate(uint256,uint256)", +"590a1c78": "LogBidFailed(address,uint256,uint256)", +"590a4595": "createNewChain(bytes)", +"590ba734": "getUint(int256)", +"590d431a": "wavesId()", +"590d5a67": "multipleTokenDistribute(uint256)", +"590daaec": "setTokenDeskProxy(address)", +"590def78": "IndonesiaRupiah()", +"590e1ae3": "refund()", +"590efa59": "setContrAddr(address,address)", +"590efee1": "isExec()", +"590f9ece": "getShow(uint256)", +"590fcc5b": "debugVal2()", +"591016bc": "generateId(bytes32,address)", +"591090ee": "ELIXAddressSet()", +"5910a18b": "addEntry(bytes32)", +"5910ce39": "_mint(string,string,uint8,uint256,bool,uint256)", +"591108a5": "setIcoStart(uint256)", +"59111d83": "add32(uint32,uint32)", +"59112e79": "payCow()", +"59117bae": "getRoomID(uint256)", +"59118221": "setTokenData(uint256,bytes32[])", +"59118ff2": "amount4()", +"5911fb9a": "setRate(address,address,uint256)", +"59125397": "indexedDocs(uint256)", +"59137533": "PillowCoin()", +"5913cacc": "unlockBonusDrop(address,uint256)", +"59144baa": "setFundContract(address)", +"591451fe": "setHostingProfitAddress(address)", +"5914589c": "RLC()", +"59151701": "VerifiedUser(bytes32,address)", +"591552da": "currentFee(address)", +"5915589e": "Dataset(address,string,uint256,string)", +"59161e57": "releseToken(address)", +"59167b9d": "setTokenContract(uint256,address,uint8[],bytes32[],bytes32[])", +"59167fcc": "getUserAccountInfo()", +"59169d06": "setBountyTokensPercent(uint256)", +"5916c2c9": "NeuroWire()", +"5916c5fa": "sellEgg(uint256,uint256,uint256,uint16,bool)", +"59179dbd": "createSaleAuction(uint256,uint256,uint256,uint256,uint256,uint256)", +"59187cec": "getEarningAmount()", +"5918bc7f": "addTerms(string,string)", +"5918f00c": "fillOrder(address,address,uint256,address,uint256)", +"5918f348": "hmcAddress()", +"59193981": "token_sale_end_block()", +"59194d0c": "totalEthBalance()", +"59197f51": "ethEt4Rate()", +"59198827": "initiateDocumentVote(string,bytes32)", +"5919896f": "Taracoin()", +"5919978b": "create_safe(address,string,string)", +"591a0d87": "foundersWallet2()", +"591a6ec4": "toBeDistributedFree()", +"591a89b2": "Voted(address,bool,uint256)", +"591b05b1": "domainHtml(bytes32)", +"591b41c6": "Multisend()", +"591beea8": "guardIntervalFinished()", +"591c515f": "append(string,string)", +"591d5236": "getDifference(int256,int256)", +"591d8bd0": "constantFn(uint256)", +"591ead36": "SplitTransfer(address,uint256,uint256)", +"591f36a6": "updatePreICOMaxTokenSupply(uint256)", +"5920375c": "thaw()", +"59208b8a": "userRefundWithoutGuaranteeEther()", +"59214765": "sendBonus(address,uint256)", +"5922b831": "refundPlayers(uint256)", +"592311ed": "freeze(address,address,bool)", +"592341df": "whatsMyJuryNumber(uint256,address)", +"5923c7f9": "maxSaleToken()", +"59242d11": "SmartIndustrialToken()", +"59245ff3": "fundAnswerBounty(bytes32)", +"59249c46": "duper()", +"5924f811": "tier2Reached()", +"592572e2": "getLoanCanceledAmount(bytes32)", +"5925cfe3": "getCCH_edit_7()", +"5926651d": "addBeneficiary(address)", +"592685d5": "getWindowStart(address,address)", +"5926b55a": "setArray(bytes1[],bytes8[],bytes32[],int256[],uint256[],bool[])", +"5926c826": "Mitronex()", +"5926cf13": "setGameId(uint256)", +"59275c84": "minerAddress()", +"59276653": "getTicketCount(address,string)", +"59287ce9": "setPbulicOfferingPrice(uint256,uint256)", +"5928aedc": "setEndStage2(uint256)", +"5928bdc4": "LatiumLocker()", +"5928c7db": "changeDividendWallet(address)", +"5928e80c": "updateNoteTitle(uint64,bytes12)", +"59291e2f": "MinedBlocks()", +"59292ef3": "gasLimitDepositRelay()", +"59296490": "CharityCommonweal(uint256,string,uint8,string)", +"59296e7b": "getCredit()", +"5929b837": "_setRate()", +"592a5f9b": "ValidToken()", +"592a97de": "encodeUInt(uint8,uint256)", +"592af188": "GaonToken()", +"592b5d17": "haltFX()", +"592b700a": "updateRegistrar(address)", +"592b71ab": "isRequestingEscapeTo(uint32,int256,uint32)", +"592bd705": "setowner(address)", +"592c0f09": "onLotteryFinalized(uint32)", +"592c518f": "ADDR_TKG_CHARITY()", +"592d4c7e": "CAD_Omnidollar()", +"592dc0a6": "setAyantDroitEconomique_Compte_2(uint256)", +"592e6f59": "initialise()", +"592ea64f": "LLV_v30_12()", +"592eef5a": "postIdToDonationAmount(address,uint256)", +"592efdab": "presaleWhitelistTokensLimit()", +"59301cb2": "_callRecipient(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"5930a295": "changeBetLimits(uint256,uint256)", +"5931228b": "endTimeDay()", +"59317ea2": "buyImplementation(address,uint64,uint256,uint8,bytes32,bytes32)", +"59318b2c": "unFrozenBalanceByIndex(uint256)", +"59328401": "getPlayerInfo(address)", +"5932c02c": "tradesCount()", +"59330b8e": "hashDetails(uint256,address,uint256,uint8)", +"59354c77": "changeSubcourtJurorFee(uint96,uint256)", +"59355736": "lockedBalanceOf(address)", +"59357045": "getDueTime(uint256)", +"5935fba5": "addContractor(address,uint256)", +"5936259c": "BullsFarmer()", +"59362835": "JPCoin()", +"5936387c": "checkOpposited(uint256,bool)", +"59366245": "bonusInPhase5()", +"5936812b": "changeLockedBalanceManually(address,uint256)", +"5937de14": "STATUS_DEAL_RELEASE()", +"5937e534": "appealSkip()", +"5937e86a": "setTokensQuantity(uint256[],uint248[])", +"5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", +"59388d78": "decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", +"59391a67": "earlyResolve(bytes32,uint256,bytes)", +"5939a84e": "isLawyer(address)", +"5939dd31": "setEthartRevenueReward(uint256)", +"5939ee04": "registrationPeriod()", +"593a5bff": "KUISToken()", +"593a6297": "getPlayerLaff(uint256)", +"593aa283": "setMetadata(uint256,string)", +"593af09f": "assertEq20(bytes20,bytes20)", +"593af4f1": "_fYou(address,uint256,string,string)", +"593af56a": "editionType(uint256)", +"593b4530": "proxyMergeMint(uint256,bytes32,address[])", +"593b79fe": "toBytes(address)", +"593be1f8": "_removeAuctionManager(address)", +"593c993c": "presaleWeiContributed()", +"593cca56": "checkExplore(uint256,uint256)", +"593d280d": "KToken()", +"593ea3e7": "VERDICT()", +"593efdf1": "setCurrentPassportLogic(string)", +"593f3a6c": "AllMarkingsProcessed(address,uint256,uint256,uint256)", +"5940f55c": "setEncryptionPublicKey(string)", +"594151e0": "Dice()", +"5941bb80": "transferFromBatch(address[],uint256[])", +"5941d8d4": "RtbSettlementContract(address,address,address,uint256)", +"5941ff52": "impl_yield7Day()", +"59423a7f": "BuySnail(address)", +"59424b78": "approveArtist(address)", +"594337a9": "investorsLength()", +"5944427b": "getRequestResult(uint256)", +"5944b7d9": "setCCH_edit_1(string)", +"594548d5": "newStakesAllowed()", +"5945793d": "getCorrectedTotalBPOfAddress(address,address)", +"5945841b": "ELIXAddress()", +"5945bdc5": "token2GT()", +"59462295": "WhiteWallToken()", +"5946e7eb": "Tier_Rainmaker_Registration()", +"594733c6": "getInvestorId(address,address)", +"594742da": "forecastOfToken(uint256)", +"59475891": "TransferHash(bytes32,bytes32,uint256)", +"59478411": "modifyProductPrice(bytes32,uint256,uint256)", +"5947cc6a": "level_2_percent()", +"5947d616": "updateAskingPrice(uint256,string)", +"59485790": "_emitPricesUpdated(uint256,uint256)", +"5948f733": "getAddressArray(bytes32)", +"5949a8f7": "notifyDeposit(uint256)", +"5949e525": "fundingUnlockFractionInvert()", +"594aa668": "getCourseList(string)", +"594afcff": "tgrContributedAmount()", +"594b18b5": "_transferToLock(address,uint256,string)", +"594bbe8f": "Corolexcoin()", +"594de857": "getDealsCount()", +"594eda64": "getBackend()", +"594ffb4e": "setReferralFee(uint8)", +"5950cb8c": "setCasinoName(uint16,string,string)", +"5950cee4": "checkProviderSupported(address,address)", +"5950d395": "recallPercent()", +"5951317a": "doFinalizeSale()", +"59514593": "addFreezableAddresses(address[])", +"595210ad": "openDispute(string)", +"5952176e": "removeBusinessOwner(address)", +"5953c806": "setSendCost(uint256)", +"5954c8c5": "manualWithdrawEther()", +"5954ee54": "actualPriceInCents()", +"595539cd": "modexp_naive(bytes,uint256,bytes)", +"5956b853": "soldAddresses(address)", +"5957eb17": "PeterToken()", +"5957ee49": "getProjectUsedTokens()", +"5958188d": "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(address[],uint256,uint256,address)", +"5958611e": "finishTime()", +"5958621e": "setRewardWallet(address)", +"595882b3": "mintAll()", +"5958978c": "day_blocks()", +"595a161b": "amountOfZeros(uint256,uint256)", +"595a30f1": "RateChanged(uint256)", +"595a4fc2": "recomputeAccountLastAverageBalance(address)", +"595a69e8": "add_address(address,address)", +"595a7273": "QbaseIssued()", +"595aed65": "_getChild(address,uint256,address,uint256)", +"595b1a3e": "getUsersLength()", +"595b35d1": "NUMBER_OF_COUNTRIES()", +"595c3f61": "FactomTalk()", +"595cb7a3": "changePrice(address,bytes32,uint256)", +"595d0392": "transferHoldFrom(address,address,uint256)", +"595d71a5": "MintFinished(uint256)", +"595da94d": "has_owners(uint256)", +"595dcb68": "BIFAToken()", +"595e1e20": "placeToken()", +"595e615f": "betPool(address)", +"595ecbb3": "Int256(uint256)", +"595ee7a4": "MajListVal()", +"595f0e5e": "test_CuratorRules()", +"595f40d6": "getDevelopersFee()", +"5960b74f": "advisorTimelock()", +"59622aa6": "maxAmountForSalePromotion()", +"5962581e": "isInRoundOneState()", +"59626877": "AiToken(uint256)", +"59627b84": "getReduce(uint256,uint256)", +"5962a941": "totalPurchases()", +"5962ad30": "dkSB(string)", +"59633a1c": "removeBeneficiary(address)", +"59647984": "isValid(address,uint256)", +"5965e7c3": "SimpleCrowdsaleBase(address)", +"59667c24": "withdrawRound(uint256)", +"59679b0f": "_implementation()", +"5967dee8": "transferLOT()", +"5968c2a4": "getOrderTokenAllocationStatus(uint256)", +"596925d6": "expByTable(uint8)", +"596939f5": "addAgent(address,uint256)", +"5969549e": "modifyBeneficiary(bytes32,address)", +"59695754": "setMinimumPayout(uint256)", +"5969c0e1": "resetSignature(bytes32)", +"596a072c": "setOraGasLimit(uint32)", +"596a2735": "DICE_RANGE()", +"596aadaf": "transferFromCrowdsaleToUserAdoptionPool()", +"596b975a": "maxFunding()", +"596bda14": "_set9()", +"596c02fb": "assertEq22(bytes22,bytes22,bytes32)", +"596c0531": "bch()", +"596c49bd": "TimeControlled()", +"596c8976": "close(uint256,uint256)", +"596d6f08": "Blizzard(uint256,string,string)", +"596ea3db": "allowTransferTime()", +"596f3473": "applyToBeAReviewer()", +"596fab6c": "calculateLockAmount(uint256)", +"59704013": "setVar(string,string)", +"5970c40a": "addForecast(bytes32,uint256,uint8)", +"59716eed": "lockedEthBalanceOf(address)", +"59724977": "getwin011050(address,uint256)", +"59727e83": "registryTransfer(address,address,bytes32,uint256)", +"5972e062": "deleteNodeGroup(uint256,uint16)", +"5973016b": "Multiven()", +"59748c98": "plain()", +"5974ec50": "founderTokenUnlockPhase3()", +"59756526": "getJobHash(bytes16,address,address,uint256,uint256)", +"59758ebe": "repayLoan(address,uint256,string)", +"5975ce80": "mintApproveReset(address,address)", +"59761fcb": "test(address[5],uint256[5])", +"59764714": "MyDFSToken()", +"59769073": "totalBalancingTokens()", +"5976ddd0": "getScenarioNamesAndEventStatus(bytes32)", +"59770438": "getToken(address)", +"59780224": "joinGameWithInviterIDForAddress(uint256,address,address)", +"59790701": "updateFeeSchedule(uint256,uint256,uint256)", +"59793b3a": "derivativeTokens(uint256)", +"597c255f": "receiveChild(address,uint256,address,uint256)", +"597c69cc": "saveToColdWallet(uint256)", +"597cae8d": "getFeeWindowBurnAmountValue()", +"597d4601": "crowdsaleFinalized()", +"597d5c6e": "BiSaiToken(address,uint256)", +"597d6640": "getFreeFairy()", +"597df768": "buyPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", +"597dfbaf": "confirmNode(uint256)", +"597e1fb5": "closed()", +"597ea5cc": "getUint8FromByte32(int8,bytes32,uint8)", +"597efd85": "UblastiToken(uint256,string,string)", +"597f7c35": "transferTechSupport(address,address)", +"597fef79": "funderBalance_()", +"59802e15": "makeBonus(address[],uint256[])", +"598052a3": "winPooling()", +"598077b9": "ownerPart()", +"5980d0d7": "_crowdSaleSupply()", +"5980e72d": "getSeedPercentageForGameId(uint256)", +"59810024": "VICETOKEN_ICO_IS_A_SCAM()", +"59813a0e": "allowToken(address,address,uint256,bool)", +"5981f187": "bookingBalanceOf(address,address)", +"5982688f": "revenueShareList(address)", +"59828c99": "FLIPPINESSROUNDBONUS()", +"5982a30f": "setFriendsFingersRateForCrowdsale(address,uint256)", +"5982a6bb": "DiipCoin()", +"59830bf4": "LogBidCompleted(bytes32,bytes32,bytes32)", +"5983ae4e": "hasher(address,bytes32,uint256)", +"59841fe9": "newRun(bytes32,address,string)", +"59849d30": "maxCreatorWithdraw()", +"5984d7ad": "buyHeart(address)", +"59852686": "transferEth()", +"5985ac40": "affiliateNetwork()", +"598647f8": "bid(uint256,uint256)", +"59869576": "TestERC20Token(string,string,uint8)", +"5986ce23": "setdteamVaultAddr1(address)", +"5986dbe4": "ccUserCount()", +"5987e370": "canJoin(uint256)", +"5987f859": "setInputs(string,string,string)", +"5988899c": "estimateDaiSaleProceeds(uint256)", +"59890fd2": "mod_product(uint256,uint256,string,string,string,string,string)", +"5989c283": "createChannelERC20(address,uint192)", +"598aa1fc": "checkEndorsement(address,uint256,address)", +"598ab2c9": "supplyRest()", +"598abc9c": "getListTeam(uint256)", +"598ac8f2": "permille(uint256)", +"598adef6": "addDepositor()", +"598af9e7": "allowance(address,address,uint256)", +"598b771d": "IOVContract()", +"598d34b7": "distributeBTR(address[])", +"598d772a": "changeEtherVault(address)", +"598db132": "setProviderIsForRent(uint256,bool)", +"598e3183": "newToken(string,string,uint256,address,uint256)", +"598e728a": "TIXIToken()", +"598e9eeb": "transferir(uint256,address)", +"598f512b": "Token(uint256,string,uint8,string,bool)", +"598f6dec": "reserveTimeLock()", +"5990e665": "NetworkSocietyToken()", +"59912df1": "totalTokensDestroyed()", +"59915fd3": "CheckRefundIsFair()", +"5991c0dd": "TSTEST3()", +"5991db0f": "contains(uint8[],uint8)", +"5991faf5": "contributors_countdownDate(address)", +"59923274": "sendFromBountyWallet(address,uint256)", +"59927044": "teamWallet()", +"5992f2a1": "_createVoter(string)", +"599312ec": "rescueCatHashCheck(bytes32)", +"599362d0": "_setBackgroundValue15(uint256)", +"59939e21": "getApprove(uint8)", +"599466fe": "abortCrowdfund()", +"5994d984": "TRUE()", +"59953744": "createVestingContract()", +"5996228e": "upgradeResistance(uint256)", +"599651f3": "setStartAuctionFee(uint256)", +"59966ae1": "allowClaimer(address[])", +"5996769e": "_getDefaultOperators(bool)", +"59970a08": "OneKeyToken(uint256,string,uint8,string)", +"59974e38": "distributeRewards(uint256)", +"5997ed4c": "DevFee()", +"59988dce": "newQuestioner(address)", +"5998e641": "getStrategyTokenByIndex(uint256,uint256)", +"5999917c": "get_cross_chain_nonce()", +"5999d385": "walletICO()", +"599b3e21": "buytokens2()", +"599b6808": "balanceList(uint256)", +"599c8761": "decodeParamsList(uint256)", +"599db6bd": "unsowed(address)", +"599dc6be": "setItemStoppedStatus(bool)", +"599e2364": "tokenItems(uint256)", +"599efa6b": "refundEscrow(address,uint256)", +"59a02589": "ico_PRICE()", +"59a02652": "miningWarContractAddress()", +"59a0b995": "AiraEtherFunds(address,string,string)", +"59a0e583": "lastBlock_v9()", +"59a131e2": "CrankysLottery()", +"59a23200": "authorizeTransaction(uint256,address)", +"59a29c6f": "no_of_tokens()", +"59a2c86f": "requestPayout(uint256,address,address)", +"59a3e577": "createClaim(address[],uint256,address)", +"59a4669f": "increaseJackpot(string)", +"59a536b0": "presaleWei()", +"59a547b0": "recordCommission(uint256)", +"59a58647": "setMaxCards(uint256)", +"59a591be": "setCrowdsaleTimes(uint256,uint256,uint256)", +"59a5f12d": "player2()", +"59a69426": "setStatuses(address)", +"59a765f9": "sendInvoice(string,string,string,string)", +"59a78c1a": "deathData_v8()", +"59a7b3fe": "hourlyRate()", +"59a7f754": "acquireWildcard(uint16)", +"59a80f0f": "setCurs(uint256)", +"59a83074": "set_participant_num_of_pro_rata_tokens_alloted(address,uint256)", +"59a87bc1": "buy(uint256,uint256,address)", +"59a8b6a3": "OptaToken()", +"59a941a6": "setApp(string,string,string,uint256)", +"59a9a63f": "isVulnerable(uint64,int8)", +"59a9a980": "isCosd(string)", +"59aa80b8": "getTransfer(string,uint256)", +"59aaa456": "tryAltOracles(bytes32,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"59aaaf86": "changeBlocPerEth(uint256)", +"59ab0306": "BuyTickets(uint256)", +"59ab0dd1": "JACKPOT_TOKENS_PERCENT()", +"59ac5b32": "createProject2()", +"59ac5c6d": "_shift(uint8)", +"59ac70ae": "totalTimeRange()", +"59acb42c": "createdAtBlock()", +"59acbcb1": "crownTransfer(address,uint256)", +"59adb2df": "returnUint256(uint256)", +"59adda9b": "checkOwnerFailedToSetTimeOnMeeting()", +"59ae2073": "GameNeedsTick(uint256,address,uint256)", +"59ae340e": "resumeMinting()", +"59ae6e34": "placeImage(uint8,uint8,uint8,uint8,string,string,string)", +"59aef196": "pauseCutoffTime()", +"59af143d": "beBanker()", +"59b09b25": "makeCount()", +"59b0a174": "transferLockUntil(address)", +"59b0d931": "removeBlockList(address)", +"59b112d8": "getServicesForApplication(address)", +"59b119dc": "ComeCoin()", +"59b11d6c": "setBetclose(bool)", +"59b17b43": "getTellerBalance(address)", +"59b25720": "fillUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", +"59b2da20": "Raffled(uint256,address,uint256)", +"59b350fb": "time_of_token_swap_start()", +"59b36e3e": "partnerSaleWei(address)", +"59b373f2": "getExistsStatus(uint256)", +"59b4993c": "userAddressCheck(bytes32)", +"59b4ee89": "addVpf(bytes32,uint256,uint256,uint256,string,uint256,uint256[])", +"59b51bd1": "approveCertification()", +"59b563b5": "addRobot(address)", +"59b56a59": "HYIPToken(address,string,string,uint256,uint256)", +"59b58dba": "createCloneToken(address,uint256,string,string)", +"59b62658": "AddFishByToken(address,uint256)", +"59b6a0c9": "maxCapacity()", +"59b6f377": "transferFromContract(address,uint256,uint256)", +"59b79610": "sendUnsoldTDETokensToPlatform()", +"59b8d74e": "ACasadiAmiciToken()", +"59b910d6": "setStorageAddress(address)", +"59b9510a": "isAddressAllowedInPresale(address)", +"59b95f5a": "buyBlocks(uint8,uint8,uint8,uint8)", +"59b9a192": "buildToken(uint192,uint192,uint160,uint32)", +"59ba1dd5": "_fulfillPreapprovedPayment(address,address,uint256,address)", +"59ba2628": "transferCampaignCreator(address)", +"59ba59f1": "ETHFundDeposit()", +"59badbec": "CheckPhException(bytes32,uint32)", +"59baef40": "setNewController(address)", +"59bb6b5f": "TretanToken()", +"59bb7867": "setTournamentEntranceFeeCut(uint256)", +"59bc3d47": "Agreement()", +"59be5e45": "getTotalSoldTokens()", +"59be7e99": "getDonationAmount()", +"59be9cc0": "devTokensHolder()", +"59bed9ab": "Transacted(address,address,bytes32,address,uint256,bytes)", +"59befd58": "releaseTime2()", +"59bf1abe": "getBlackListStatus(address)", +"59bf5d39": "getReserve()", +"59bf77df": "confirmationCount(bytes32)", +"59bfd388": "setupPeriodForSecondStep(uint256,uint256)", +"59c13403": "FEE_MIN()", +"59c140be": "insertBonus(uint8,uint256,uint256)", +"59c14cf1": "mastery(address)", +"59c19cee": "batchWithdraw(bytes32[])", +"59c21fd8": "initDepth()", +"59c27917": "GenChipLevel_Extra(uint256,uint256,uint256)", +"59c281da": "openFirstRound(uint256,bytes32)", +"59c2aad0": "unitsToSell()", +"59c2af55": "StagedCrowdsale()", +"59c2b584": "reserve_fund()", +"59c2e1ef": "changeEthDefaultBackRate(uint8)", +"59c2edee": "CrowdsaleContribution(address,uint256,uint256)", +"59c33f94": "PriceUpdate(uint256,address)", +"59c39094": "withdrawDate()", +"59c3f3e0": "setPoolContract(address)", +"59c3f7f0": "createWallets(uint256)", +"59c42f75": "unreleasedCount()", +"59c44539": "GotecoinToken()", +"59c4e612": "icoSoftcap()", +"59c55429": "refundBond(uint256)", +"59c634b0": "getContributorAmount()", +"59c656df": "allowRefunds()", +"59c77133": "createNewHodl(uint256)", +"59c7a893": "participantsOf(uint32)", +"59c87d70": "request(bytes32)", +"59c88347": "isEmitting()", +"59c8969e": "withdraw(address,uint256,bytes32[],uint256[],bytes32[],uint256)", +"59c8bf9c": "OrpheusMarinaBangkok()", +"59c8d647": "buy(bytes32,bytes32)", +"59c9e118": "buyAndTransfer(address,address,uint8)", +"59cbf125": "GetETH(address,uint256)", +"59cc334a": "getItem(uint256,uint256)", +"59cc721c": "BONUS_TIER1()", +"59ce0a8f": "RuletkaIo()", +"59ce0bb8": "_saveParams(uint256[])", +"59ceb36f": "last_demurrageable_balance()", +"59cf3173": "Reclaim(uint256)", +"59cf901a": "preIcoTokensDistributed()", +"59cfaf6e": "gameWithdraw(uint256)", +"59d1d43c": "text(bytes32,string)", +"59d20b55": "committedValidators(uint256)", +"59d213fe": "contributePreSale()", +"59d27be8": "endEthGetToken()", +"59d2af39": "testFooSend()", +"59d313de": "MatchResetDeadline(uint256,uint256)", +"59d33d73": "bountyReserveTokens()", +"59d3ce47": "Activate()", +"59d3d57e": "totalUserLost()", +"59d3d632": "verifierAllocation()", +"59d3dad9": "miscNotLocked()", +"59d4447a": "MingToken()", +"59d52e2b": "XmonetaSale()", +"59d5335b": "refPercent()", +"59d55194": "getPet(uint256)", +"59d5d02a": "transferFee(address,address,uint256)", +"59d5dc11": "PhardusNetwork()", +"59d667a5": "bid(address,uint256)", +"59d6b35b": "lastProof()", +"59d7d46f": "doInvest(address,uint256,address)", +"59d89175": "setSellCommissionBps(uint256)", +"59d90c19": "addLockedAmount(uint256)", +"59d96db5": "terminate(uint256,string)", +"59d998e4": "transferHashOwnership(uint256,address)", +"59d9b2b7": "getTokenOwnership()", +"59dac714": "hashTo256(bytes)", +"59db5bac": "VisitCount()", +"59db9eb0": "deallocate(address,uint256)", +"59dc6d5c": "setDollarBalance(address,int160)", +"59dc735c": "getClient()", +"59dd35da": "ICOPrice()", +"59dd7ad4": "batchTransferFroms(address,address[],uint256[])", +"59dd8f34": "NRB_Tokens()", +"59dfdec8": "totalPlayCount()", +"59e026f7": "internalTransfer(address,address,uint256)", +"59e02dd7": "peek()", +"59e05c5f": "delay_pool_drain_block(uint256)", +"59e08fe1": "isSaleOver()", +"59e09fec": "getLockedAmount_dakehus(address)", +"59e0b91a": "LMOSupply()", +"59e0cf23": "setOraclize(address)", +"59e148fc": "getLastOfferId()", +"59e1667d": "testControlCreateWithForeignParentNotInUse()", +"59e20f69": "addJobInvitation(uint256,address,string)", +"59e239af": "donateAsset(address)", +"59e23ccf": "computeBlockPrice(uint256,uint256,uint256)", +"59e2d30e": "testThrowBlobStoreNotRegistered()", +"59e30226": "getTradeOfferSenderItems(uint256)", +"59e33e35": "indexdate()", +"59e3e1ea": "testDivAdd(uint256,uint256,uint256,uint256)", +"59e415d3": "crowdETHTotal()", +"59e4c4ca": "createLover(string,string,string)", +"59e4eec9": "startMarket(uint32,uint256)", +"59e529cc": "extra_bonus()", +"59e54095": "getRefundValue()", +"59e541af": "getTokenInfoMaxPerBlockImbalanceList()", +"59e5d4b5": "hicsToken()", +"59e6800c": "depositToken(address,uint8,uint256)", +"59e777f6": "newHeir(address,uint256)", +"59e86488": "hasteamadjacency(uint16,uint16)", +"59e94862": "getEthToTokenOutputPrice(uint256)", +"59e994ca": "endTimeOfBids()", +"59e99db2": "_mint(bytes32,uint256,bytes32,address)", +"59e9fb1b": "IPFShash(string)", +"59ea2647": "yearTwoMultiplier()", +"59ea287d": "pre()", +"59ea6d80": "setNegativeArray(int256,int256)", +"59eb8224": "trancheCount()", +"59ebb321": "isManagementProxy(uint32,int256,address)", +"59ebbe35": "cancelFinishMintingRequest()", +"59ebeb90": "Open()", +"59ec29fe": "successICO()", +"59eca3e2": "manipulateSecret()", +"59eddf34": "getSchool(uint256,address)", +"59eecbf9": "assert1(bool)", +"59eee5c7": "hosting(uint256)", +"59efcb15": "execute(uint256,bytes)", +"59f02c4d": "getOraclizePolicyId(bytes32)", +"59f121a8": "setCreator()", +"59f1286d": "queryCredit(address)", +"59f47523": "newUserBonusCardTradable()", +"59f4bbd2": "indexPaidAffiliate()", +"59f568b9": "setDefaultNumberJuror(uint16)", +"59f5e0ce": "purchase(string)", +"59f61c74": "nextKey(uint256)", +"59f62cdc": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256)", +"59f69ab6": "enforceWhitelist(bool)", +"59f769a9": "activeBalanceOf(address)", +"59f8714b": "changeableTokenCount()", +"59f96737": "convertMetToEth(uint256,uint256,int256)", +"59f96ae5": "postSellOrder(address,address,uint256,uint256)", +"59f974ce": "checkFundingGoalReached()", +"59f9a58f": "_vouchersInSharedPool(uint16)", +"59f9edd0": "sultantoken()", +"59fa0663": "setWhitelistOut(address,bool)", +"59fa34df": "findCurrentIndex(address)", +"59faf062": "bidPrice(bytes32)", +"59fb34bd": "_createRide(string,bytes7,address,uint256)", +"59fc2ba4": "DRONEXTOKEN()", +"59fd510a": "extraBalanceNeeded(uint256)", +"59fd95ae": "BTCCToken()", +"59fde1e0": "distributeRevenue(uint256)", +"59fe2720": "updatePollDescription(uint256,bytes,uint8)", +"59fe7279": "ADMINISTRATOR()", +"59ff5b55": "getMagicNumber()", +"59ff6473": "redistributeFees(uint256)", +"5a0024ae": "VerifyCheque(string,string)", +"5a0089d3": "getChildContractAddress(uint8)", +"5a012b17": "landsSold()", +"5a0178af": "update(uint256,uint256,bytes32)", +"5a018e01": "RESERVES_STAKE()", +"5a02dcde": "budgetWallet()", +"5a02ec19": "depositVault(uint256)", +"5a0391f2": "BuyForEtherTransaction(address,uint256,uint256,uint256,uint256)", +"5a044e91": "get_difficulty_list()", +"5a04ce5b": "setMinBalance(uint32)", +"5a051c47": "_purchaseLoopFifo(uint256,uint256)", +"5a052dff": "buyPixel(address,uint16,uint24,string)", +"5a055a33": "Enterprise()", +"5a059a44": "composeJingle(address,uint256[5],uint256[5],string,string)", +"5a05fff0": "bountyRewards(address)", +"5a061a7a": "TradexOne(address,address)", +"5a0646e2": "InitAssignCTC()", +"5a06f1e3": "TMEXAddressSet()", +"5a071517": "existPublicKey(address)", +"5a0718d0": "ICOadvisor1()", +"5a0753ac": "devFeeBalance()", +"5a079207": "Hydro()", +"5a083f54": "transferFromCheck(address,address,uint256)", +"5a09f2f4": "setHouseFee(uint256)", +"5a0ae8d5": "emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", +"5a0b7663": "getMaxResponseStates(uint256)", +"5a0ce676": "setParams(uint256,uint256,uint256)", +"5a0d9627": "updatePlayerMask(uint256,uint256,uint256,uint256,uint256)", +"5a0db89e": "test_mul(uint256,uint256)", +"5a0ebf94": "TokensReceived(address,uint256)", +"5a0f385a": "reverseTransfer(address,uint256)", +"5a0f3c40": "_foundationSupply()", +"5a1024d5": "setSinistre(uint256)", +"5a10d868": "Diyflex()", +"5a119ef2": "addIcoAddress(address)", +"5a1230bf": "computeCallKey(address,address,bytes4,bytes32,uint256,uint8,uint256)", +"5a129164": "vestingBeneficiary()", +"5a129e97": "byte32ToString(bytes1[32])", +"5a12b581": "GetUser(string)", +"5a13340f": "GetApplicant(bytes32)", +"5a140df0": "_remove(uint256)", +"5a142887": "grantAccessDeposit(address)", +"5a149f08": "finalizeNextUpgrade()", +"5a15656c": "developerCommissionFee(uint256)", +"5a15c373": "transferByOwner(address,address,uint256)", +"5a17877a": "LCDToken(address,address,address,address,address,address)", +"5a17aa41": "getContentTip(bytes32,address)", +"5a181478": "setPayoutCumulativeInterval(uint256)", +"5a182b8b": "SellLoan(uint256,uint256)", +"5a186c77": "init(address,uint256,uint256,uint256,uint256[],uint256,uint256,uint8)", +"5a18ae3d": "apply(string)", +"5a18f9ff": "isFundingNeeded(address,address)", +"5a1a1b67": "zTransferWinningBets()", +"5a1a8593": "bidBatch(uint256[],address)", +"5a1b0c0b": "LogBidCanceled(uint256)", +"5a1b472c": "getmykeyid(address)", +"5a1b96a2": "FiduxaCoinCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"5a1bdaa1": "deusETH()", +"5a1cc358": "getChannelRank(address,uint256)", +"5a1e0a46": "cancelVote(uint8)", +"5a1e6ca1": "endRound(uint256)", +"5a1e6fc6": "setEmployeeAddress(uint256,address,address)", +"5a1e921b": "isTradeSupported(address,address,uint256)", +"5a1e9c79": "ProofOfKennyCoin()", +"5a1f3c28": "getCollection(uint256)", +"5a1f892c": "addPresaleContributors(address[])", +"5a2056ba": "rejectPayments()", +"5a212e99": "stringandbytes(bytes)", +"5a22d81a": "buyCEO()", +"5a236389": "getFileLoc(uint256)", +"5a237491": "nextWithdrawDayTeam()", +"5a23932b": "cryptaurus()", +"5a2450c3": "EventHub(address)", +"5a24c6a9": "chart_call()", +"5a272403": "SetAdmin(address)", +"5a275879": "toHex(address)", +"5a2791ed": "block24h()", +"5a28340a": "accessOperatingBudget(uint256)", +"5a297cae": "claimApis(address)", +"5a29ee7b": "sendRemaningBalanceToOwner(address)", +"5a2a3039": "setTopWinnerPrizes()", +"5a2a4452": "_addRole(address,string)", +"5a2a553f": "isCollateralWithinMargin(uint256,uint256,uint32)", +"5a2a75a9": "getTranscoderPoolMaxSize()", +"5a2b043c": "updateNextRound()", +"5a2b31d9": "B24Token()", +"5a2b488e": "calculateRefundedEth(uint256,uint256)", +"5a2bcc18": "mintAmount()", +"5a2bf25a": "setAddressValue(bytes32,address)", +"5a2c0f78": "mintMarketMakerApproval(address,address,uint256)", +"5a2de12f": "ChipTreasury()", +"5a2e311b": "capDefault()", +"5a2e4a11": "raisedWithdrawal()", +"5a2e73a2": "usd2Foken(uint256)", +"5a2ee019": "m()", +"5a2f71d4": "setEquipmentTrainingFeeMultiplier(uint256)", +"5a2fe63a": "isInMainSale()", +"5a30b194": "__address0__()", +"5a317cb3": "SHA256HashRegister()", +"5a31ab2f": "PresaleClosed(bool)", +"5a325fb3": "_setPlatformFeeRate(uint128)", +"5a32d070": "trickleDownBonusesReleased()", +"5a3320ff": "isCrowdsaleOpen()", +"5a338506": "airdropToAddresses(address[],uint256)", +"5a34508b": "delistAddress(address)", +"5a34ced1": "disableFundingWallets(address,address)", +"5a353193": "KrakenPriceTicker()", +"5a353f98": "T20coin()", +"5a354e04": "ProxyUser(address)", +"5a35eb7c": "isWinSlot(uint256,uint256)", +"5a36c394": "executeOrder(uint256,address,address,uint256,uint256,uint256,uint256)", +"5a36e0da": "getProjectCreator(uint256)", +"5a36f4f3": "setMintableProperty(uint256,bytes32,bytes32)", +"5a37ae58": "Show_the_name_of_Option_A()", +"5a388a43": "MVM()", +"5a390a5f": "breedingMarket()", +"5a3a05bd": "subRegistrar(bytes32)", +"5a3a6ef8": "TXL()", +"5a3b7e42": "standard()", +"5a3c0287": "claimTokensFromTokenAiNetworkToken(address)", +"5a3c8826": "dynamicCeiling()", +"5a3dd13f": "getScoreTotal()", +"5a3e251f": "halvingPeriod()", +"5a3f2672": "tokensOf(address)", +"5a3f88f0": "changeGeneration(uint40,uint16)", +"5a4071fe": "lockInternalAccount(address,bool,uint256)", +"5a40bb8f": "setAllergies(bool)", +"5a40ec7e": "verify(uint256,uint256,uint256,string,bytes32[2],bytes,bytes)", +"5a41217e": "underMaintenance()", +"5a414ff6": "getAuthorizedOwners()", +"5a416920": "swapFor(address,uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"5a41d508": "setFlightPrice(uint256)", +"5a42e85f": "SICX()", +"5a4362e5": "closeDown()", +"5a43fa90": "getTokenProposalDetails(uint256)", +"5a4426bc": "proposeLOC(string,address,uint256,string,uint256)", +"5a444139": "canBurnWhiteList()", +"5a446215": "setNameAndSymbol(string,string)", +"5a4528c2": "distributionContract()", +"5a4537b0": "TransferableMultsig(uint256,address[])", +"5a46bb2b": "initChain(bytes,uint32)", +"5a46d3b5": "lockOf(address)", +"5a46f06c": "BANCOR_CONVERTER_FACTORY()", +"5a470aff": "setNthByte(uint256,uint256,uint8)", +"5a470b65": "gamePlayedStatus()", +"5a476e5a": "buyOrderBalances(bytes32)", +"5a481a7e": "ARBITRAGEToken(address)", +"5a4877c0": "timeLockedBeneficiariesDisbursedTo()", +"5a4a04a7": "OWNER_CLAWBACK_DATE()", +"5a4bffb8": "tokenPurchaseAmount(address)", +"5a4c07a0": "fillBlank()", +"5a4c822d": "setAdminPercent(uint256,uint256)", +"5a4cc5da": "Dunhil()", +"5a4d8e59": "getBAU2Length(bytes32,address)", +"5a4ded51": "tokenBuyCalc(uint256)", +"5a4e69f0": "KyberContirbutorWhitelistOptimized()", +"5a4fc9c5": "lookup(int256)", +"5a500066": "WSXToken()", +"5a5132be": "ambix()", +"5a51d1df": "sendReward(uint256[])", +"5a520f8b": "buyDragon(uint256,uint256,bool)", +"5a525491": "safeIndexOfTaskId(uint256)", +"5a527afb": "testFooApprove(uint256)", +"5a52da30": "didVoteForName(address,string)", +"5a52ecf6": "getSignedConfiguration()", +"5a531015": "getLotteryAtIndex(uint256)", +"5a5383ac": "canExitPool()", +"5a53fe20": "multiApprove(uint256[])", +"5a543683": "BuyerLotteryTimes(address)", +"5a54cd46": "proceedEtherDeals(uint256)", +"5a54e755": "hashMachine()", +"5a55c1f0": "getVote(uint256)", +"5a5638dc": "policyTokenBalanceFromEther()", +"5a56a31c": "FeeApplied(string,address,uint256)", +"5a57a901": "VIPSToken()", +"5a5804b3": "getAllocation(uint256)", +"5a589fc9": "authUser(string)", +"5a58cd4c": "deleteContract()", +"5a591a4e": "promotionDataRecord(address,uint256)", +"5a592380": "vestingPlans(uint256)", +"5a593a6e": "totalreleaseblances()", +"5a596aa4": "CheckBalance(address,address)", +"5a5a433b": "checkHash(uint256,uint256,uint256)", +"5a5b32b7": "_setHatValue10(uint256)", +"5a5c8068": "oraclize_setNetworkAuto()", +"5a5d096c": "isOwner(uint256,address)", +"5a5d3350": "KKToken()", +"5a5ddcf6": "startStopICO(bool)", +"5a5e0024": "SecondEtherLimit()", +"5a5e0074": "etherForOwner()", +"5a5e861e": "currentPayment()", +"5a5ebebf": "withdrawRent(address)", +"5a5ec54a": "neglectOwner()", +"5a609b96": "investorsIter()", +"5a61c40a": "setwithtoken(address)", +"5a625393": "ValueTokenBase(uint256,string,string,uint8)", +"5a628525": "reveal(address,bytes32)", +"5a628e17": "getWishIdxAt(address,uint256)", +"5a63cba0": "checkSaleLimit(uint256)", +"5a63feb8": "__targetExchangeAndSpendCallback(address,uint256)", +"5a648bc5": "WithdrawAll()", +"5a64ad95": "mintingFee()", +"5a64b786": "deposit_dividends()", +"5a650f45": "numBountyCredits()", +"5a6535fc": "call(bytes)", +"5a657452": "COD()", +"5a658f6b": "directorNode()", +"5a65f004": "isSynthesizeAllowed()", +"5a67a20d": "endingPrice()", +"5a67f389": "timeGone(uint256)", +"5a6814ec": "thisisfine()", +"5a686699": "post(uint128,uint32,address)", +"5a69fe0e": "TokenERC20(address)", +"5a6ad1e1": "multivestBuy(address,uint8,bytes32,bytes32)", +"5a6af33b": "subtrBalance(address,uint256)", +"5a6b26ba": "withdrawal(address,uint256)", +"5a6b3a79": "assignBounty(address,uint256)", +"5a6c6408": "updatePolicy(bytes32,address,uint32,uint32,uint256,uint256,bool)", +"5a6c787e": "updateWithMPO()", +"5a6cd237": "latestTokenBalance()", +"5a6d663c": "notifyTransfer(address,address,uint256)", +"5a6dad3c": "setFreelancerParams(uint256,uint256)", +"5a6e8980": "editusetaddress(uint256,string)", +"5a6f7aef": "tweakUpgrading()", +"5a703223": "GetToken(address,uint256)", +"5a70686a": "mintChip(bytes32)", +"5a70fe72": "GetInvestedAmount()", +"5a71be21": "ethEur()", +"5a732dd5": "CCPayoutArb()", +"5a74a715": "setWeiForMcr(uint256)", +"5a74dee5": "multiAccessRemoveOwnerD(address,address)", +"5a7511d0": "put(uint256,string)", +"5a753c6e": "getWarlordDistributedRandom(uint256)", +"5a75aa1c": "ChangeRate(uint256)", +"5a75b8d5": "currentHodlerId()", +"5a764631": "setSkillName(uint256,bytes32)", +"5a766620": "neglectGuess(int256)", +"5a768e4a": "ECONOMY_BOOST_TRADE()", +"5a769366": "sadf(address)", +"5a76e73e": "getNoOfTokens(uint256,uint256)", +"5a778cf9": "batchPresale(address[],uint256[])", +"5a78897b": "setFunctionSixPrice(uint256)", +"5a7a4c1e": "_applyPct(uint256,uint256)", +"5a7a8850": "rollWithSeed(bytes32)", +"5a7adf7f": "preSale()", +"5a7b4097": "fundBalanceOf(address,address)", +"5a7b57f2": "MadoffCoin()", +"5a7cb38f": "tokenTransferAddress()", +"5a7da6b5": "burnUpdateTokenFrom(address,uint256)", +"5a7db533": "getRef(address)", +"5a803611": "addDealerForSender(string)", +"5a81018a": "getClientCount()", +"5a811766": "replaceAdmin(address,address)", +"5a813fd5": "test_insert_findWithHintPrevAtPosition(int256)", +"5a8194d2": "getVersionIndex(bytes32,bytes32,bytes32)", +"5a81b5b9": "collectMegaJackpot(uint256)", +"5a825cbb": "getPayment(uint256,uint256)", +"5a851ffb": "calculateDiceWinner(bytes32,bytes32,uint256)", +"5a857565": "buyTokensInternal(address,uint256)", +"5a85d2fa": "playerSignUp(address)", +"5a861838": "addHpbNodeBatch(address[],bytes32[],bytes32[])", +"5a8654ad": "End6()", +"5a86c914": "getRateIcoWithBonusByDate(uint256)", +"5a87053e": "privateBonus()", +"5a87c380": "getRewardListLength()", +"5a8830e2": "partial_refund_my_ether()", +"5a88b15f": "Halo3DShrimpFarmer(address)", +"5a89b376": "contractDecimalsUpdate(uint256,bool)", +"5a8ac02d": "second()", +"5a8b1a9f": "upgradeTo(string,address)", +"5a8b55e2": "IsWildCardCreatedForCategory(string)", +"5a8bbba9": "createNewSecret(string,bytes32,bool)", +"5a8bbee1": "Group_4()", +"5a8cadb1": "migrateAll(address)", +"5a8cf571": "changeControlWallet(address)", +"5a8d580e": "forceNSFW(uint256)", +"5a8d6cea": "transferUnsoldIcoTokens()", +"5a8dd79f": "getDesignatedCaller(address,uint256)", +"5a8e9d66": "settle(address,uint32)", +"5a8ef28a": "GBP(uint256)", +"5a90a49e": "exemptFromFees(address)", +"5a9156f0": "LogAddUser(address)", +"5a91e5e9": "removeFabric(address,address)", +"5a93bf71": "delReferral(address,address)", +"5a93cc8f": "addBonus(address,uint256)", +"5a93f1a1": "_deleteCompany(bytes32)", +"5a9448e2": "multisigFunds()", +"5a94cd0c": "requestChangeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", +"5a95edd9": "OTHERCRUISER_FTL_SPEED()", +"5a960216": "ethUsd()", +"5a969f94": "InternationalModelChain()", +"5a975128": "minGamble()", +"5a979a5c": "LockContractOwner(address)", +"5a97b84a": "finishUserDistribution()", +"5a983451": "totalTokenMintedAngel()", +"5a992188": "getUserBet(uint256,uint256)", +"5a99719e": "getMaster()", +"5a998a09": "totalRoyalty()", +"5a99b525": "payoutRoyalties()", +"5a99d123": "unsetNotaio(address)", +"5a9a49c7": "verify(bytes32[],bytes32,bytes32)", +"5a9aa592": "currentWallet()", +"5a9b0b89": "getInfo()", +"5a9bb087": "claimContractTokens(address)", +"5a9c0a49": "setBasePrice(uint256[20],uint256,uint256,uint256,uint256)", +"5a9c2724": "create(string,string,address)", +"5a9c3ee4": "mainSaleDeadline()", +"5a9c84f3": "maximumTokensForSecond()", +"5a9cfac8": "hasPosts()", +"5a9d27dc": "createReleaseTokenAuction(string,uint256,uint256,uint256)", +"5a9d5c3c": "PCPP()", +"5a9e03ca": "isIssuedBefore(bytes32,uint256)", +"5a9e426b": "refundMe()", +"5a9e75a2": "maxBorrowAmount(address)", +"5a9e91df": "zlotsJackpot()", +"5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", +"5a9f97d1": "currentSaleDay()", +"5a9ffc35": "circulatingFame()", +"5aa00cc4": "_emitJobCanceled(uint256)", +"5aa037dc": "purchasedTokenBalanceOf(address)", +"5aa1eb4c": "createAdjudicator()", +"5aa23a52": "sendRewardBILL(address,uint256)", +"5aa3952a": "GERCoinCrowdsale(uint256,uint256,uint256,address)", +"5aa3d2b0": "purchasedAmountBy(address)", +"5aa4470f": "setLogicContract(address)", +"5aa451e9": "updateOfferingReputation(address,uint8)", +"5aa4c8a9": "addToMap(uint256,uint256)", +"5aa5b9d1": "LogPersonNew(address,uint256,uint256)", +"5aa61ec6": "getExchangeRatesLength()", +"5aa63592": "DeadMansSwitch(address,address,uint256)", +"5aa68ac0": "getParticipants()", +"5aa6b1f0": "reduceFiatCurrencyRaised(uint256)", +"5aa6cf97": "payout(uint256,uint256)", +"5aa720c3": "linkTaskToUser(address,address)", +"5aa77d3c": "pendingContractOwner()", +"5aa83129": "store(bytes,uint256,uint256,address)", +"5aa86386": "getMinNextBet(string)", +"5aa8a42c": "updateOwners(uint256,address[])", +"5aa8e281": "freezeAccountCoin(address,uint256)", +"5aa94a68": "computeResultVoteExtraInvestFeesRate()", +"5aa97a3b": "agreeNeg(string,uint256)", +"5aa97e16": "BBCPrimeEx()", +"5aa97eeb": "getMarkets(bytes32[],address)", +"5aaa250a": "TokensCappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"5aaac1d1": "fundingMaxCapUSD()", +"5aab1822": "stateEndDate()", +"5aab25b6": "isRedenominated()", +"5aab4ac8": "motd()", +"5aac8aad": "ICO_TokenValue()", +"5aad0450": "addVestingAllocation(address,uint256)", +"5aad507b": "userTotalCredit(address)", +"5aad7c56": "calculatePMAFromFiat(uint256,string)", +"5aae456a": "potatoTotalSupply()", +"5aae843e": "doPreAllocations()", +"5aaec2b1": "isdelegatinglisted(address)", +"5ab01088": "joinPreSale(address,uint256)", +"5ab027b0": "masterAddress2()", +"5ab0e470": "getShortPositionState()", +"5ab14385": "doProxyAccounting(address,uint256,uint256)", +"5ab1a0e2": "JungleScratch()", +"5ab1bd53": "getRegistry()", +"5ab2ff61": "read_u64_array()", +"5ab30d95": "bobMakesEthPayment(bytes32,address,bytes20,uint64)", +"5ab31a60": "drawNumber(uint256,string)", +"5ab35302": "ProofofHumanity()", +"5ab3ae21": "privatesaleTokens()", +"5ab3ded3": "changeDonationWallet(address)", +"5ab3fbc9": "BGB_Token()", +"5ab47550": "firstDayCap()", +"5ab4f162": "getVote(address,address)", +"5ab50913": "_recalculateAirdrop(address)", +"5ab58d64": "totalLockedHavvens_limitedSum()", +"5ab5956e": "startICOStage6()", +"5ab5d07d": "CROWDSALE_MAX_ACES()", +"5ab68072": "carTaxiCrowdsale()", +"5ab6eb7a": "Tabbo()", +"5ab7603a": "multivestBuy(address,address,string)", +"5ab7f1a8": "donatedAmount()", +"5ab81246": "newItem(uint256,string,string)", +"5ab827f6": "claimableRefund()", +"5ab89248": "AAcontributors()", +"5ab92022": "frozenTransfer(address,uint256,uint256,bool)", +"5ab98b8d": "DragonReleaseableToken(address)", +"5ab9bb26": "changeBonus(uint8)", +"5abaaa01": "unicornTokenAddress()", +"5abacc89": "RANGESTART_9()", +"5abb37d6": "cancelGame(address)", +"5abc3339": "create(bytes32,bytes32,bytes32)", +"5abc52d4": "SALE2_RATE()", +"5abcc417": "createCastle(address,uint256,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"5abd7728": "setMinTaskValue(uint256)", +"5abedab2": "getAllTheFunds()", +"5abfafe2": "holdAddress3()", +"5abfc588": "CreatedDebt(uint256,address)", +"5ac04bed": "CreateMUSC(address,uint256)", +"5ac0dc11": "doTimeoutForComplainant(uint256)", +"5ac14935": "test_0_createOpenController_test_methods()", +"5ac1caa0": "_getCurrentRound(uint256)", +"5ac207ff": "totalLossAmount()", +"5ac2523a": "minimalTokens()", +"5ac26ebd": "devuelveTodasEncuestas()", +"5ac31e68": "getOrdersForNotary(address)", +"5ac36d70": "setTeams(address[],uint256[])", +"5ac3835d": "verifyTransferSignature(address,address,uint8,bytes32,bytes32)", +"5ac44089": "setHardCapInCents(uint256)", +"5ac48043": "slice(uint256[],uint256,uint256)", +"5ac49ba1": "CORE_TEAM_TOKENS()", +"5ac5c4f7": "Out(uint256)", +"5ac5ec65": "UsableToken(uint256,string,uint8,string)", +"5ac5f82c": "computeBonus(uint256)", +"5ac72734": "tkt()", +"5ac77ad1": "isLockedOpen()", +"5ac7a8d0": "UTBToken(uint256,string,string)", +"5ac7b9f3": "reapFarm()", +"5ac7d17c": "getMarketIsClosing(uint256)", +"5ac801fe": "setName(bytes32)", +"5ac849d2": "liveBlocksNumber()", +"5ac87d76": "addToWhiteList(address,uint256)", +"5ac942a7": "getIdentifierByIndex(address,uint256)", +"5ac9e90f": "readLib()", +"5aca6153": "setJackpot(uint8[4])", +"5acb053b": "toggleDead()", +"5acb6787": "createRegion(uint256,uint256,uint256,uint256)", +"5acba201": "canOverride(address,address,address,uint256)", +"5acbd8e1": "ProxyStorage(address)", +"5acce36b": "getEndowmentBalance()", +"5ace5128": "_emitBoardClosed(uint256,bool)", +"5ace83d7": "approveWinner()", +"5acee3d6": "getFutureTransLength()", +"5acf061a": "validateContract(address)", +"5acf34df": "check_data(bytes32)", +"5acf36ca": "fwithdrawal(uint256,uint256)", +"5acfefee": "sendProfits()", +"5ad1854b": "advisersPeriodAmount()", +"5ad22eb3": "canonizedPLCR()", +"5ad35ac0": "numberOfTokensAllocated()", +"5ad4997e": "getResult(uint8,uint8)", +"5ad550bc": "testAbsMax()", +"5ad55aa5": "setCurrentSchellingRound(uint256)", +"5ad5ca74": "createXMLYTrade(bool,uint256,uint256)", +"5ad64dc5": "deletePick(uint256)", +"5ad6ba47": "getChronus()", +"5ad701c2": "getTier()", +"5ad74742": "ICO_Contract()", +"5ad7c05c": "getUserRequests()", +"5ad82148": "getUserid(address)", +"5ad871d5": "CrowdWithUs(uint256,string,address,uint256)", +"5ad8803d": "mintAndCall(address,uint256,bytes,bytes)", +"5ad95948": "wmin(uint128,uint128)", +"5ad9ca10": "changeBonus(uint8,uint256,uint256)", +"5ada0f51": "setTkContractAddress(address,address)", +"5ada7bee": "updateVerifier(uint256)", +"5adada87": "getPaymentsHeld(address)", +"5adb5813": "_setTokenURIBase(string)", +"5adb6ddb": "unfreeze(address,address)", +"5adbe6fb": "ComputeMyEgg(address)", +"5adc02ab": "confirmWhitelistAddition(bytes32)", +"5adc0c68": "getAddTokenParameters()", +"5adcba0e": "getEntryStatus(address,uint32)", +"5adcf475": "loikikdidad()", +"5addc540": "forceToken()", +"5addcc8f": "finishFromDutchAuction()", +"5ade3f8f": "NectarChina()", +"5ade7c8a": "getMyChest(address)", +"5ade9c3a": "removePass(bytes32,address)", +"5adf292f": "updateKittenCoinsRemainingToDrop()", +"5adfafdf": "updateRewardPercentageByIndex(uint256,uint256)", +"5adfff91": "_hashTheSecret(bytes32)", +"5ae11d5d": "order(address,uint256,address,uint256,uint256)", +"5ae17907": "getLossCount(address)", +"5ae23da2": "host_claim_earnings(address)", +"5ae23f84": "getTimeRangeInfo()", +"5ae270aa": "GToken()", +"5ae28fc9": "setMaxAge(uint256)", +"5ae46e93": "RaffleDappBook(string,uint256)", +"5ae4c04a": "viewprice()", +"5ae59132": "havvensReceivedForNomins(uint256)", +"5ae5b24f": "eosPizzaSliceSafe()", +"5ae5df8f": "deleteRef(string)", +"5ae61377": "getMaxBusinessesPerCity(uint256)", +"5ae63989": "WaraCoin()", +"5ae7ab32": "revokeKey(address)", +"5ae81492": "canceloffer()", +"5ae82dfd": "ariseWarrior(uint256,address,uint256)", +"5ae8a1e0": "updateUserPolicy(bool,bool,bool,bool)", +"5ae8daea": "getRoundJackPot(uint256)", +"5ae9c4d8": "getLineData2(uint256)", +"5aea5955": "ltc()", +"5aea92f5": "LingYanToken()", +"5aea9905": "BitrustToken(address,address,address,uint256)", +"5aeb45dc": "TetherToken()", +"5aebd1cb": "isRefundable(address)", +"5aebf21a": "getProviderAdmin(address)", +"5aebfd14": "createFile(bytes)", +"5aec11d4": "canUnshelf(string)", +"5aec2247": "balanceOfPreSale(address)", +"5aec57d8": "NewRound(uint256,uint256,uint256)", +"5aec6259": "getUInt(bytes32)", +"5aed37ef": "manualWithdrawEtherAdditionalOnly()", +"5aed4fa0": "safetyCheck(uint256)", +"5aee1bc0": "AirdropBeggarsCommunity()", +"5aee42bc": "createICOToken()", +"5aee9431": "method1()", +"5aeee9f9": "incFightLose(uint256)", +"5aef2447": "getClaim(uint256)", +"5aef447c": "presaleBonusTokens()", +"5aef7de6": "avatar()", +"5aefd89d": "Freezing()", +"5af0649e": "confirmNewNotary(address)", +"5af0dc98": "blockSkills(address,uint256[])", +"5af0e1ae": "MyWillCrowdsale(uint32,uint32,uint256,uint256)", +"5af0f053": "approveMove(address,bool)", +"5af123f4": "bonusRate()", +"5af14603": "GetSetting(uint8,uint8)", +"5af1cf27": "foundersWallet1()", +"5af1e55d": "op1()", +"5af25671": "HugMathou()", +"5af2f821": "getCounterProposals()", +"5af36e3e": "refund(uint256,uint256)", +"5af3741b": "getAddressAnserKeccak256(uint256)", +"5af3d5bf": "CWCfallback(address,uint256,bytes)", +"5af3e9d7": "bonusLOT()", +"5af40b77": "buildPreICOStage()", +"5af4cd99": "canBurnAddress()", +"5af5f7ba": "setWhitelisting(bool)", +"5af6333d": "getGoldInfoSerial(address)", +"5af73f3f": "getMinimalBalance(uint256,address)", +"5af77fff": "Contract()", +"5af82abf": "director()", +"5af86018": "VPE_Token()", +"5af89094": "getPMul()", +"5af95010": "Lenders(address)", +"5af9f68f": "getTxPaymentMCW(bytes32)", +"5af9f9d5": "TheSchmeckle()", +"5afa5036": "isCertified(address)", +"5afa5bb6": "minValue2()", +"5afb408a": "Penchant()", +"5afb540c": "getTokenCount(bytes32,string)", +"5afbfd4f": "getPublicBattlePokemon2()", +"5afc190d": "DrawHouse()", +"5afc250f": "getDad(address)", +"5afc7e59": "issueFrts(address,address,uint256,uint256,uint256,address)", +"5afd7627": "setCrowdsaleCompleted()", +"5afdc02c": "_9_dataSmerti()", +"5afe16ca": "GetProfile(uint256)", +"5afe5207": "setTokenSaleAddress(address)", +"5afe9ee1": "verifySignedBy(bytes32,bytes,address)", +"5afeb106": "Sqrt()", +"5afecaaa": "getAllArtworksByOwner()", +"5aff457f": "createAuctionFromArray(address,uint256[],uint256,uint256)", +"5aff59e3": "addrCanPurchase(address)", +"5aff7e54": "returnBalance(address,bytes32)", +"5affcbb0": "cancelIndexedSaleByAddress(address)", +"5b00763e": "ProofOfTrevonJames2()", +"5b0088fb": "setPlotData(uint256,string,string,string,string)", +"5b01b5b3": "teamEmail()", +"5b01e233": "getyestodayget()", +"5b02b729": "setLockUpPeriod(uint256)", +"5b04cbb5": "current_state()", +"5b04e512": "defaultLockin(address,uint256)", +"5b050e77": "isInGame()", +"5b053c04": "maxPreSale1Token()", +"5b054f9b": "chainStartTime()", +"5b060530": "createToken(string,string,uint256)", +"5b064754": "LogChiSale(address,uint256)", +"5b067cce": "testCreateCostMain()", +"5b06fc49": "HASHPERETH()", +"5b07371e": "getAttackRanking()", +"5b0783f3": "setCapRec(uint256[],uint256[],uint256)", +"5b07d7d6": "_generateGene()", +"5b091f92": "updateID(address,uint256)", +"5b09a518": "process(bytes32,bytes[])", +"5b0a3843": "emergencyWithdrawal()", +"5b0a6c58": "EasyMineIco(address)", +"5b0ad787": "getBonusSetter()", +"5b0b02ec": "deathData_f4()", +"5b0b7cc8": "payday(uint256)", +"5b0c12a1": "DeploymentInfo()", +"5b0cfcd8": "KillContract()", +"5b0d4eff": "mineral()", +"5b0d5b55": "getTankEarning(uint32)", +"5b0d823a": "referalFundBalanceMap(address)", +"5b0dad8e": "bcdcMultisig()", +"5b0e1a2f": "releaseMyTokens()", +"5b0e52b0": "unlockExternalTransfer()", +"5b0e70ff": "RetireHodl(uint256)", +"5b0e8b82": "admin_list()", +"5b0ec73e": "MNCToken()", +"5b0ef4a4": "getEtherTicket()", +"5b0efb03": "MintAndTransfer(address,uint256,bytes32)", +"5b0fc9c3": "setOwner(bytes32,address)", +"5b1052f1": "getCoinBySlotId(uint64)", +"5b10b796": "_removeCapper(address)", +"5b10d05d": "donotDKKDappToken()", +"5b113414": "mul(uint32,uint32)", +"5b11380d": "ExTokeB()", +"5b1214c6": "setCrowdsale(uint256,uint256,uint256)", +"5b1295d2": "LNDToken()", +"5b12f1b6": "getAuthorizeContractIds(uint256,uint256)", +"5b135806": "test_basicWithTwoAssertAfterThrow()", +"5b14f183": "isPaused(address)", +"5b151fd2": "fifty_fifty()", +"5b154394": "GANA()", +"5b15afb6": "isOuvidoriaCadastrada(address)", +"5b16ebb7": "isPool(address)", +"5b174f0b": "EtheremonTransform(address,address,address,address,address)", +"5b17b190": "onLEXpaContract()", +"5b18056b": "contributionCount()", +"5b195526": "getMyCenter()", +"5b195c86": "transfer(address,uint24)", +"5b196dae": "getOuvidoriaNome(address)", +"5b19a8f3": "prossWinOrLoss(uint256)", +"5b1a77fe": "sentTokensToBountyOwner()", +"5b1aa9b1": "eugToken()", +"5b1b5d90": "getTransfer(bytes32,uint256)", +"5b1b9316": "firstRoundCosmosStart()", +"5b1c1625": "prepareClaim(bytes32)", +"5b1c893a": "UBC()", +"5b1cba31": "freezeAddress(address,address,bool)", +"5b1d0d1e": "getOwnerAccessoryCount(address)", +"5b1dac60": "getSharePrice()", +"5b1dadc7": "PRICE_PRESALE_WEEK2()", +"5b1ea858": "signedTransferSig()", +"5b1eca38": "getTotalDevs()", +"5b1fe0cb": "sendGift(uint256,address)", +"5b1fef12": "GetPVPData(address)", +"5b206edb": "initAmount_()", +"5b208f76": "PlayX2()", +"5b209615": "ecrecover1(bytes32,uint8,bytes32,bytes32)", +"5b21a8b0": "NILEX()", +"5b21ba6f": "calculateProfit(uint256)", +"5b21e539": "decline(uint256,bytes32,bytes)", +"5b225526": "permissions(address,bytes32)", +"5b225d25": "getLatestManifestByName(address,bytes32)", +"5b228f88": "CLCToken()", +"5b229869": "getSenderArmyCount()", +"5b2298c8": "getSumAmountOfDisputedDealsProPatient()", +"5b229ae4": "dungeonRequirements(uint256)", +"5b22bbd2": "maxRaiseAmount()", +"5b2329d4": "checkGoalReached(uint256)", +"5b23bf8a": "forcePayout()", +"5b24f87d": "addManyToAllocationList(address[],uint256[])", +"5b250462": "join_private_room(bytes32)", +"5b251342": "KAnsariCoin()", +"5b25c137": "kycVerifiedBonusBps()", +"5b25ed6a": "tokensLimit()", +"5b284ecd": "InsertRank(uint256,uint256,uint256)", +"5b28919c": "getShipType(uint256)", +"5b28ad15": "dna6(uint256)", +"5b290c1d": "continueRedeeming(uint256)", +"5b29f2e4": "icoSold()", +"5b2a0e96": "multiSend(address,address[],uint256)", +"5b2a372d": "setTxDataBlockNumber(bytes32,bytes)", +"5b2aa4ae": "getMatchInfoList01()", +"5b2b0168": "_refundTokensPurchase(address,uint256)", +"5b2b2194": "addRange(address)", +"5b2b345c": "TOKENS_ACCOUNT_MAX()", +"5b2c44e1": "updateWhitelistInternal(address,address,uint8)", +"5b2ccdec": "hirerCancel(bytes16,address,address,uint256,uint256)", +"5b2cdda3": "returnWalletAddress()", +"5b2d2bcf": "set_car_dealer(address)", +"5b2d7ad1": "calculate_shares_and_return(uint256,uint256,uint256,uint256,uint256,uint256)", +"5b2e1eb1": "ETHPonzi()", +"5b2e299c": "Hypercoin()", +"5b2e39e0": "releaseEcosystemJM(address)", +"5b2e9a81": "UpdateSellAgentSiteReg(address)", +"5b2ec3a5": "createInternalAuction(bytes32,bytes32,uint256,uint256,uint256,string)", +"5b2f515b": "artistName()", +"5b2f8752": "claimLoss()", +"5b303e16": "eatUnicorns(uint256)", +"5b30535d": "updateFactorReward()", +"5b30a647": "checkapproval(uint256,address,bool)", +"5b31035d": "getReward(uint64)", +"5b325e94": "AddTransactionAgainstExistingEntity(address,uint256,uint256,string,string)", +"5b329058": "DSGroup(address[],uint256,uint256)", +"5b33233b": "increaseOwnershipTokenCount(address,address)", +"5b34b966": "incrementCounter()", +"5b34f4e2": "newUserAccount(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"5b353cfa": "PMC()", +"5b35f9c9": "rewardsWallet()", +"5b364f3b": "chkend(uint256)", +"5b366096": "changeHDXcontract(address)", +"5b36fea6": "transferToICAPWithReferenceCallGas()", +"5b372532": "press()", +"5b378d39": "ContractorCreated(address,address,address,address)", +"5b379044": "dateTier3()", +"5b37e150": "create(bytes32,bytes)", +"5b387273": "allowWhiteList()", +"5b38863a": "btcRateMax()", +"5b389666": "USDCryptoToken()", +"5b389dbb": "powerUpContract()", +"5b38a8e6": "updateAssets(address,int256)", +"5b3a4895": "totalInvestedWithBonuses()", +"5b3a6f9e": "DomusToken()", +"5b3b136a": "getMyTokens()", +"5b3b20e1": "CLN_PER_ETH()", +"5b3b449f": "incentiveTokensLimit()", +"5b3bab74": "NeCashTokenSale()", +"5b3be4d7": "mintAirDropTokens(uint256,address[])", +"5b3bf07a": "getPrizeNumbers()", +"5b3d386b": "transferAnyCaerusToken(address,uint256)", +"5b3d4b16": "SCUDO()", +"5b3ddbf2": "firstAuctionConcluded()", +"5b3de1c8": "getBankEth(string)", +"5b3ea961": "ChangeSharedExpense(uint256,uint256,uint256)", +"5b3f4d24": "PrelievoProprietario(uint256,uint256)", +"5b405418": "CallSpread()", +"5b4078de": "decodePriceFeed(uint256)", +"5b40a584": "curId()", +"5b40d5dd": "unlockInBatches(address[])", +"5b419a65": "join(bytes32,bytes32)", +"5b42109d": "getNarcoLocation(uint256)", +"5b4246d4": "proportion()", +"5b440596": "getWithdrawValue(address)", +"5b453810": "changeEtherBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", +"5b454832": "declareDefaultAsBorrower(uint256)", +"5b45b999": "setMiniMeToken(address)", +"5b46016e": "KickTheCoinFactory()", +"5b467404": "getCounts(address)", +"5b472771": "level_8_amount()", +"5b475e22": "STARTING_ANTHILL()", +"5b477c53": "updoot(uint256)", +"5b4786ea": "getValusTokenIssuance(uint256,uint256)", +"5b48165f": "lastBlock_v17Hash_uint256()", +"5b482ec1": "disconnectModule()", +"5b485314": "IEFBR14()", +"5b48684e": "optIn()", +"5b48c11b": "regRefcode(bytes32)", +"5b48e66a": "changeCroStatus(address,uint8)", +"5b49ebdf": "GiantWeedKiller()", +"5b4a54a9": "isCrowdsaleOver()", +"5b4b1c0e": "orientation()", +"5b4b73a9": "setData(uint256)", +"5b4be32b": "setSellStatus(bool)", +"5b4c084a": "updateHpbNode(address,bytes32,bytes32)", +"5b4c3543": "options(bytes32)", +"5b4c6994": "setArbitratorI(address)", +"5b4cc249": "newSale(address,uint256,uint256)", +"5b4cc320": "onOwnershipTransfer(address,uint256,bytes)", +"5b4ccc9d": "addParticipants(address[])", +"5b4d20d2": "requireWhitelistedAddress()", +"5b4df1ca": "ROLE_CONTROLLER()", +"5b4ef70b": "eth(uint256)", +"5b4ef819": "increaseNumber()", +"5b4f472a": "tradingStarted()", +"5b4f5feb": "assignCardOwner(address,uint64)", +"5b500996": "bringuPort(address)", +"5b508cf0": "createRegulatorProxy(address)", +"5b511030": "activateSecondPreIco()", +"5b519132": "getInitHash(bytes32)", +"5b51a6d8": "getMintDelegates()", +"5b51acff": "migrationTarget()", +"5b525b2c": "changeItemName(uint256,string)", +"5b528aaf": "KaiKuangChain(uint256,string,string)", +"5b528ba1": "bonusPer(uint256)", +"5b52b9db": "WLMTfinney()", +"5b52c7fb": "GROWTH_SUPPLY()", +"5b530196": "tokensOfkitty(uint32)", +"5b53d291": "advisersTotal()", +"5b5416ca": "unfreezeTimestamp()", +"5b548ab4": "mixAuto(uint256,uint256)", +"5b54f077": "promissoryUnits()", +"5b55169c": "minContribAmount()", +"5b556bf0": "ZeroExHandler(address,address)", +"5b56af1e": "freezeAccountTimeAndValue(address,uint256[],uint256[])", +"5b56be8b": "prevEndTime()", +"5b56d57f": "getGameStartBlock(uint256)", +"5b588f26": "cfoWithdraw(uint256)", +"5b59af9c": "OwnershipAdded(address,address)", +"5b5a9160": "JackCoin()", +"5b5ae956": "Bytes4ToByteArrayWithLength4()", +"5b5aed3a": "identityExists(uint256)", +"5b5b45ef": "privateOfferingExchangeRate()", +"5b5bbb31": "changeSettings(uint64,uint64,uint8,uint8,uint16)", +"5b5c7705": "withdrawPlayer()", +"5b5cf8cf": "PacersvsCavaliers420()", +"5b5d1d88": "TMRToken()", +"5b5d2c8f": "updateValue(bytes32,uint256,uint256)", +"5b5ddb94": "read(bytes,uint256,uint256)", +"5b5e450b": "masterKeyIndex(uint256)", +"5b5e760c": "getTokenWinValue(uint256)", +"5b5e7bbe": "setAssetsOnDeposit(uint256)", +"5b5ecf19": "CryptoSagaArenaRecord(address,uint32,uint8,uint8)", +"5b5f8b88": "transerFrom(address,address,uint256)", +"5b5fa6ba": "ownerTemp()", +"5b60fa6b": "createTeam(uint256,uint256)", +"5b61291c": "aekS()", +"5b621b2c": "_setMintableProperty(uint256,bytes32,bytes32)", +"5b624b6e": "setinfo(string,string,string)", +"5b630d59": "EFH(uint256,string,uint8,string)", +"5b633cf2": "getItemsIdsByTypeAndOwner(string,address)", +"5b63831a": "getMinimumPurchaseVZTLimit()", +"5b6427fc": "nextNumberOfWagersToMinimumTimeout()", +"5b65b9ab": "setFee(uint256,uint256,uint256)", +"5b65da64": "getPhaseSupply(uint256)", +"5b6682aa": "Tom(uint256,string,uint8,string)", +"5b66cc84": "transferLog(address,uint256,string)", +"5b680aa6": "spentAllowance()", +"5b68a49d": "cancelVoteForCandidate(address,uint256)", +"5b68e09b": "appAccounts(uint256)", +"5b68f3a6": "Loggable()", +"5b6a42b8": "setNewMonster(uint256,uint32,address,string,string)", +"5b6a54bc": "adjustTransactionFee(uint256)", +"5b6a9eb4": "minCost()", +"5b6aa3c2": "isMinTokensReached()", +"5b6accb2": "manualBatchTransferToken(uint256[],address[])", +"5b6b431d": "Withdraw(uint256)", +"5b6beeb9": "getHash(string)", +"5b6c508c": "exitAll()", +"5b6ca99a": "setHint(string)", +"5b6e2492": "getDesignatedReporter()", +"5b6e7be2": "updateTokenBalance()", +"5b6edf78": "DISCOUNT_TOKEN_AMOUNT_T1()", +"5b7121f8": "getMinter(uint256)", +"5b714690": "valueBeforeFeesWereReduced(uint256)", +"5b715ae0": "referralProgrammeWallet()", +"5b7214b6": "m_ETHPriceUpperBound()", +"5b72b9fe": "pushId(bytes32)", +"5b72c3b7": "eraFromMokenData(uint256)", +"5b72cdd0": "estimateBalanceOf(address)", +"5b73024a": "opAddr()", +"5b73b332": "extendTge(uint256)", +"5b7450fc": "isOperable(address)", +"5b752d5d": "getjackpot()", +"5b754491": "transferFromTx(address,address,address,uint256)", +"5b75dd8d": "getSubscription(address,address)", +"5b7633d0": "signerAddress()", +"5b764811": "_jMul(uint256,uint256,uint256,uint256)", +"5b766089": "isCreditor()", +"5b766196": "hasWon(address,uint256)", +"5b767e86": "getArbiter(address)", +"5b791420": "isProxyForSender(address,address)", +"5b7991cd": "extensionsCount()", +"5b79b275": "_currencyToToken(address,uint256,bytes)", +"5b79dbe5": "reserveForTeam(address,address,uint256,uint256)", +"5b7a50f7": "setOldToken(address)", +"5b7a78c8": "test1_overlappingIntervalSameNode()", +"5b7ab891": "BAT()", +"5b7b716c": "tgrSettingsMaxStages()", +"5b7b72c1": "createCloneToken(address,uint256,string,uint8,string,bool)", +"5b7baf64": "claimRefund(uint256)", +"5b7c2dad": "getUserPosition(address)", +"5b7c38ad": "getLLV_edit_22()", +"5b7c569a": "trustedServer()", +"5b7ca9c6": "addPrizePool(uint256)", +"5b7d47a9": "betOnColor(bool,bool)", +"5b7d9043": "creditAccount(address,uint256)", +"5b7da338": "_balanceOf(uint256,bytes32)", +"5b7db24d": "addRemoveCountry(string,string,bool)", +"5b7dc56a": "updateLuckyblockSpend(bytes32,address[],uint256[],uint256)", +"5b7eed81": "T1898Token()", +"5b7f415c": "TOKEN_DECIMALS()", +"5b7fc27f": "getInitializParentUniverseValue()", +"5b7fd9b5": "brands(address)", +"5b806645": "badgeCount()", +"5b80f497": "getAvailableIds()", +"5b814e16": "freezing()", +"5b824208": "changeMinimumTimeBeforeUpdate(uint256)", +"5b82d694": "SetClaimFee(uint256,uint256)", +"5b8315e4": "TokenSCADAEntity()", +"5b833f1e": "nextTokenOwner()", +"5b839dd2": "initBonusSystem()", +"5b83b7f1": "investorExists(address)", +"5b84bb27": "MYTOKENNAME()", +"5b850d92": "PollCreated(address,address)", +"5b859394": "PunkBidEntered(uint256,uint256,address)", +"5b859500": "hardcapInEther()", +"5b863b5a": "ZenomeSale(address,address,uint256)", +"5b86914d": "bet_value()", +"5b869e68": "DeviceAddr()", +"5b86ce97": "buyEggWithToken(address)", +"5b86f599": "increaseBalance(address,uint256)", +"5b8710e5": "checkTransferRequirements(address,address,uint256)", +"5b87a2f2": "confirmreward()", +"5b8807d9": "claimReserveTokens()", +"5b88349d": "claimAirdrop()", +"5b889ab8": "ammount()", +"5b8943ff": "addAffiliate(address,address)", +"5b89a48a": "lockEpochsMap(address,uint256)", +"5b8aa811": "setRequiredParticipation(uint256)", +"5b8ad515": "isUtilityHolder(address)", +"5b8b4f91": "refererAllowed(address,address,address)", +"5b8bcb53": "CappedSale(uint256)", +"5b8be30c": "TheCoinSale()", +"5b8c6b58": "RoundBHardCap()", +"5b8d02d7": "payoutAddress()", +"5b8d8807": "setTokenMinAmountSell(address,uint256)", +"5b8e48df": "swypes(address)", +"5b8fa846": "payDividends(string)", +"5b8fb4ae": "EthKing()", +"5b905b6c": "newProposal(string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"5b90ed39": "emitEscrowUpdated(address)", +"5b91aa6b": "underNumber()", +"5b91fd60": "performTheMagicTrick()", +"5b9248aa": "correctResult(int8)", +"5b9283e7": "isInvalidEarlyPurchase(uint256)", +"5b92cdee": "bountyAffiliateWallet()", +"5b92e548": "CreateCBT(address,uint256)", +"5b93c2bc": "getWinnerAddressList()", +"5b940081": "releasableAmount()", +"5b945c0e": "getLableList()", +"5b947f36": "ItasToken()", +"5b94db27": "nominateOwner(address)", +"5b95f65e": "getAddressesByDocHash(bytes)", +"5b9632ca": "minValue1()", +"5b96c1e7": "oracleMasterCopy()", +"5b980628": "collectFunds()", +"5b984ff6": "enableWithdraw()", +"5b9900ce": "getWeiforTokens(uint256,uint256,uint256,uint32)", +"5b99cb2b": "joinGame(uint256,uint256,bytes32)", +"5b99df7f": "transferWithFee(address,address,uint256,address,address,uint256)", +"5b9a4690": "convertToMiniRYC(uint256)", +"5b9af12b": "addValue(uint256)", +"5b9b0609": "maxContribAmount()", +"5b9b44bf": "startDefinedGame(uint256)", +"5b9eb8ab": "CONVERSION_NUMINATOR()", +"5b9f0016": "stakedBalance()", +"5b9f7cbe": "createNode(bytes32,bytes32,bytes32,address)", +"5b9fdc30": "getSecret()", +"5ba05024": "getInsuranceByAddress(address)", +"5ba0cd78": "BitcoinZ()", +"5ba13abf": "createMulti(uint256,address[])", +"5ba17b2d": "NewtonTree()", +"5ba1a1d4": "viewKarmaVotesBySymbol(string,address)", +"5ba2dd22": "conflictRes()", +"5ba32008": "FDKToken()", +"5ba39782": "getCommentAccounts()", +"5ba3e63e": "MultiSigRules(address[])", +"5ba58955": "beneficiaryBalance(address)", +"5ba5b1b2": "setSoldPreSaleTokens(uint256)", +"5ba67330": "SendDivs()", +"5ba6c017": "setTotalSpentPerDay(uint256,uint256)", +"5ba83c0d": "getMEATime()", +"5ba87a4d": "getWithdrawedToken()", +"5ba88490": "privlocatumICO()", +"5ba88c28": "debug2()", +"5ba8c608": "activePoll()", +"5ba8eb42": "getClearance(address,address)", +"5ba91006": "Sports3D()", +"5ba92d7d": "_freeze(address,uint8)", +"5ba9e48e": "nextPriceOf(uint256)", +"5bab1a63": "totalEthxRecieved()", +"5babb758": "testSetUp()", +"5babe01b": "distributedBountyStakes()", +"5bac1e11": "ReclaimBegun()", +"5bad05bd": "hardCancelOrder(uint224)", +"5bad9fa7": "walletOut2()", +"5badbe4c": "requestCount()", +"5badcd08": "TokenFulfillment(address[2],uint256[7],uint8,bytes32[2],uint256)", +"5badf100": "fireOnChanged(bytes32)", +"5bae2120": "test_doubleVotingFor()", +"5bae3f75": "CategoryAdded(uint256,string)", +"5bae4e98": "getOwnerRating()", +"5bae510d": "deposits(uint32)", +"5bae8c36": "isNewParent(address)", +"5bae9ce9": "blacklisted()", +"5baef4f3": "INCREMENT_RATE()", +"5baf039f": "add(address,address,address,address)", +"5baf4a09": "ausgroupTransfer(address,uint256)", +"5bafecf5": "calculateFloatingValue(uint256,uint256,uint256,uint256,uint256,uint256)", +"5bb0fa46": "RESERVE_EXCHANGE_SHARE()", +"5bb18362": "isReadyToBear(uint256)", +"5bb2b102": "registerNameCore(uint256,address,uint256,bytes32,bool,bool,uint8)", +"5bb31436": "transferKnightOwnership(address)", +"5bb3e5f6": "fixNoCallback(bytes32)", +"5bb41203": "test_oneAssert()", +"5bb447a8": "NOTtoken()", +"5bb47808": "setFactory(address)", +"5bb4df3c": "assignFrom(address,address)", +"5bb59815": "claimWarranty(string,uint256,string)", +"5bb5b917": "insureClient(address,address,uint64)", +"5bb5bb86": "dtGetBuildingData(address,uint256)", +"5bb7cf11": "ERC20(address,uint256,string,uint8,string)", +"5bba11bd": "bonusTicketsPercentage()", +"5bba3307": "splTransferFrom(address,address,uint256,uint256)", +"5bba6a7c": "propagateRequest(address,uint256,bytes32,bytes32)", +"5bba7aa5": "_assignBlocks(bytes16,bytes16,uint8,uint8)", +"5bbb7c42": "CPCEFund()", +"5bbdc7c5": "accrueTeamTokens()", +"5bbe66a7": "lastBlock_a15Hash_uint256()", +"5bbe6790": "Electronero()", +"5bbe8a33": "EGYPTTEST()", +"5bbee518": "investmentETH()", +"5bbf9c94": "arbLocked(address)", +"5bbfd0d7": "mintedGBT()", +"5bbfe9b6": "_myGroupHelper()", +"5bc008a0": "getAccessLevel(address)", +"5bc02d5c": "GooGameConfig()", +"5bc07110": "numArticlesPublished()", +"5bc0b4db": "ONESATOSHIToken()", +"5bc22d1b": "getStart(uint256)", +"5bc24dd3": "changeSubcourtAlpha(uint96,uint256)", +"5bc34f71": "currentStep()", +"5bc4e163": "drainRemainingToken(address,uint256)", +"5bc550fe": "mining(bytes)", +"5bc5c1a8": "getRoundDividendPerBBTHelper(uint256)", +"5bc5cf42": "mocatoken()", +"5bc60cfc": "win(uint256)", +"5bc6d41d": "doDisableSellerCancel(bytes16,address,address,uint256,uint16,uint128)", +"5bc6e107": "GetEscrowCreationDate()", +"5bc72460": "alterBannedStatus(address,bool)", +"5bc7285f": "sumICOStage3USD()", +"5bc789d9": "tokenVault()", +"5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", +"5bc8a672": "setDetachmentTime(uint256)", +"5bc91b2f": "createRound(uint256,uint256,uint256,uint256)", +"5bc97d73": "Purchase(address,uint256,uint256,uint256)", +"5bca7f38": "set_pre_kyc_iconiq_bonus_numerator(address,uint256)", +"5bcabf04": "baseUrl()", +"5bcafcf3": "ProfitByCard(address,uint32)", +"5bcb2fc6": "submit()", +"5bcbc0f9": "PRICE_DIVIDER()", +"5bcc1072": "addressesToChatMessagesLeft(address)", +"5bcc209d": "getTokenAmountForEther(uint256)", +"5bcc29d7": "setDefaultURIStart(string)", +"5bcc437c": "revokePastDelegations()", +"5bcc7928": "saleType()", +"5bcc8198": "tokenCommissionReceiver()", +"5bcd3dba": "ACAToken(uint256,address,address)", +"5bcf6674": "setMinimumAllowedWei(uint256)", +"5bd1b8c5": "countCars()", +"5bd1f067": "OONE()", +"5bd26361": "sentTokensToPartner()", +"5bd2cc9f": "Notified(address,uint256)", +"5bd4349b": "getTotalGames()", +"5bd475fd": "destTokensDevs()", +"5bd479ac": "SoccerBet(string)", +"5bd489e1": "HelperPortion()", +"5bd54fa3": "setCryptoSagaCardSwapContract(address)", +"5bd5e89c": "decreaseArrivalTime(uint256,uint256)", +"5bd674dd": "gallerySeven()", +"5bd74490": "regProxy(address,address)", +"5bd7b9fd": "Rbank()", +"5bd7c609": "getEtherDiceProfit(uint256)", +"5bd7ebc5": "changeMinInvest(uint256)", +"5bd91213": "TransferKO(address,address,uint256)", +"5bd9279c": "placeBuyNowOffer(uint256,uint256)", +"5bd948b1": "useEIP712()", +"5bd9749c": "initialValidators()", +"5bd9abfb": "CreateTestCoin()", +"5bd9e637": "buyLC()", +"5bd9ea2e": "out5Done()", +"5bda1af0": "startCrowd(uint256,uint256,uint256,uint8,uint8)", +"5bda8fa4": "setSecondTime(uint256)", +"5bdaa6dd": "Token_Price()", +"5bdaeba2": "PausableTokenMock(address,uint256)", +"5bdb280f": "RESERVES_SHARE()", +"5bdb9ddf": "changeStepPricesLimits(uint256,uint256,uint256)", +"5bdc3c53": "setImmigrationCtrl(address)", +"5bdcc165": "batchTrasferByValue(address[],uint256[])", +"5bdcd0b0": "lifetimePayouts()", +"5bdf7b4f": "initilSupply()", +"5bdfaaff": "ASIABITSToken(string,uint8,string)", +"5bdff855": "gettotalCardDivs(uint256)", +"5be0497e": "getAdjacentCells(uint8)", +"5be1d5c3": "buyBlueStarEgg(address,uint256,uint16)", +"5be2aca0": "tokenRegistryAddress()", +"5be4d442": "setTrustedContract(address,bool)", +"5be53284": "GlobaleCash()", +"5be54515": "assignBountryToReferals(address,uint256)", +"5be5d9e3": "XdacToken(uint256)", +"5be5e3ec": "castVote(uint256,uint256,uint256)", +"5be60644": "sendcdd(address,uint256,address)", +"5be62401": "createUserWithProxyAndRecovery(address,address,uint8[],uint256,uint256[],uint256[])", +"5be6affc": "CloverCoin(address)", +"5be6d2eb": "exitPot()", +"5be782d1": "WORLDMOBILITY()", +"5be7cc16": "transferAdminship(address)", +"5be7fde8": "releaseAll()", +"5be80e85": "markCompromised()", +"5be89fac": "dAlterPull(uint96)", +"5be989d1": "CRYPTOBITECOIN(uint256,string,string)", +"5bea05b1": "getUSDBtc()", +"5bea0e1c": "calculateDividend(uint256,address)", +"5bea2941": "LYBT3Token(uint256,string,uint8,string)", +"5bea641a": "change_admin_commission(uint256)", +"5beb1d8f": "currentIcoPhaseMinimum()", +"5beb3f61": "WhitelistedStatusUpdated(address,uint256)", +"5bebe2c6": "getData_32()", +"5bebefdc": "checkForInterest(uint256,bool)", +"5bec1496": "ChangeQuota(uint256)", +"5bec9e67": "infinite()", +"5becf24c": "confirmChannel(uint256)", +"5bee29b7": "retrieveData(uint256)", +"5bee29be": "setSalary(uint256,uint256,uint256)", +"5bef1208": "getModuleIDByHash(bytes32)", +"5bef95a2": "setFiscalVerify(uint256,uint256,bytes32)", +"5befbb9b": "calceth(uint256)", +"5bf042e5": "setTradeAddress(address,address)", +"5bf0cb1f": "isTransferAllowedadv()", +"5bf1f2f8": "numberOfAbilitiesSold(uint256)", +"5bf2a4e9": "contains(bytes32,bytes32)", +"5bf339b1": "DogCore()", +"5bf3a315": "isTrustedContract(address)", +"5bf4063d": "minEthValue()", +"5bf47d40": "bntyController()", +"5bf5c29c": "_createHero(uint256,address)", +"5bf5d54c": "currentStage()", +"5bf608b8": "getBuyer(uint256)", +"5bf6e582": "getAllHpbNodesExtByStageNum(uint256)", +"5bf72bb1": "use_test_data()", +"5bf85c28": "CryptomniumChain()", +"5bf8633a": "nftAddress()", +"5bf95e43": "strategicAllocated()", +"5bf9755e": "setUint256(uint256,uint256)", +"5bfb1dab": "EIP20Token(uint256,string,uint8,string)", +"5bfb8ff2": "getRegistration()", +"5bfbbe39": "_transfer_internal(address,address,uint256,bool,bytes)", +"5bfc61c0": "claimPlot(uint256)", +"5bfd1ab8": "unBlockAddress(address)", +"5bfd8efe": "blockSettlementHash(uint64,uint64)", +"5bfdab26": "queryWithdrawed(uint256)", +"5bfdb8b2": "crowdsaleStartingBlock()", +"5bfdc700": "registerData(address,int256,bytes,address)", +"5bff1aa8": "EOSCToken()", +"5bfface4": "setBuyComission(uint256)", +"5c003af9": "TOKEN_WITHDRAWAL_END_DATE()", +"5c004bcc": "sendFrom(address,address,uint256)", +"5c006f75": "changeHoldByAddressIndex(address,uint256,uint256,uint256)", +"5c00ad5e": "ShowPercent(address)", +"5c0133d9": "filled()", +"5c016b91": "ownerDisablePayee(address,address)", +"5c01943a": "bountiesBalance()", +"5c0252fe": "setOnlineTime()", +"5c025e03": "authorizeOperatorByTranche(bytes32,address)", +"5c0286c0": "changeLOT(uint256)", +"5c0305ec": "EUTBToken()", +"5c042d0f": "BiQCrowdFund(address,address,address)", +"5c044b86": "roundThreeTime()", +"5c04e9f8": "firstXRChangeBlock()", +"5c062d6c": "currentDifficulty()", +"5c06d880": "getRateWithoutBonus()", +"5c071492": "hardCapLow()", +"5c073ac4": "basicTransferTest(address)", +"5c0796fd": "emitUserCreated(address,address,address,address,uint8[],uint256,uint256[],uint256[])", +"5c07993b": "investorInterest()", +"5c07ac94": "changeCrowdsaleRate(uint256)", +"5c084a25": "get_pvn_token_balance(address)", +"5c0a8177": "claimOCDividend()", +"5c0a9b8d": "transferToContractAddr(address,uint256)", +"5c0b51fb": "theList(address)", +"5c0ba18e": "BitBoscoin()", +"5c0c3dce": "setUserList(address)", +"5c0cc07a": "TAXChain()", +"5c0e6166": "Bill(address,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", +"5c0e6bc4": "icoTokenPrice()", +"5c0f82b7": "GetIdByAddr(address)", +"5c0f9a3e": "getStrandGenesisBlockHash(uint256)", +"5c0fc34c": "freedomcryptotoken(uint256,string,string)", +"5c0fed8e": "EOBIToken()", +"5c100cc2": "setPreIcoDiscount(uint256)", +"5c1020f9": "addPhenomenon(string,string,string,string,uint8)", +"5c102782": "reward(address,uint256,string)", +"5c10286a": "auctionsEnabled()", +"5c1098c3": "crowdSaleOverTimestamp()", +"5c109a59": "updateStatus(address,address,uint256)", +"5c10b2e8": "contributionsAddress()", +"5c10cab8": "collected_crowd_wei()", +"5c10ec87": "preSaleDurance()", +"5c10fe08": "proofOfWork(uint256)", +"5c12a0e8": "DroneShop()", +"5c12cd4b": "getPlayer(address)", +"5c12f040": "emergencyWithdraw(bool)", +"5c131d70": "burnMax()", +"5c135535": "gooBalanceOf(address)", +"5c1397de": "signup(bytes32)", +"5c13a439": "checkAccount()", +"5c13d06f": "checkLockedToken()", +"5c13e2b5": "end_ICOs()", +"5c142f2b": "freezeAccountWithToken(address,uint256)", +"5c146b80": "_existCaller(address)", +"5c148b47": "calcClaimableTokens()", +"5c1548fb": "getCollateral()", +"5c164624": "decisionOf(bytes32)", +"5c1671a6": "hasSameArrayLength(address[],uint256[])", +"5c16e323": "__executeOrderInputIsValid__(address[4],uint256[8],address,address)", +"5c1796ef": "sponsored(address)", +"5c17f9f4": "approve(address,uint256,bytes)", +"5c19a95c": "delegate(address)", +"5c1b3a68": "setPrvdWallet(address)", +"5c1b3ca1": "getConfigUint(int256,bytes32)", +"5c1b9377": "TestBNB(uint256,string,uint8,string)", +"5c1b94d1": "publicGetRound()", +"5c1bc695": "addSubDivision(address)", +"5c1d2215": "mintTokensLocked(address,uint256)", +"5c1f71af": "setAllowBurns(bool)", +"5c206c6b": "FreeTokensIssued(address,address,uint256)", +"5c206f41": "finalValue()", +"5c207547": "wantsBusiness(bytes32,bytes32,address)", +"5c20ad9e": "multiValueBatchTransfer(address[],uint256[])", +"5c20c1dc": "distributePuppyCoinSmall(address[])", +"5c20eec6": "twentyThirtyTokens()", +"5c221385": "preciowea()", +"5c221816": "burnAccountMoeny(address,uint256)", +"5c222bad": "getAsset()", +"5c22aaae": "setGameTransferFlag(address,bool)", +"5c2323e7": "authorizedToTransfer(address)", +"5c239e58": "createItemSaleMarkets(uint256,uint256)", +"5c23bdf5": "resolve(bytes32)", +"5c23d56f": "checkInbox()", +"5c242c59": "query1(uint256,string,string,uint256)", +"5c243f03": "GetLengthofList()", +"5c251cbf": "releaseStake(address,bytes32,uint256,uint256,uint256,bool)", +"5c253f52": "o_novo_problema(uint256)", +"5c25e903": "_lockNinja(uint256,uint16)", +"5c261556": "initFrozenTokenMap()", +"5c26a007": "IsEnable()", +"5c272fb2": "Unblocked(address)", +"5c27bbf6": "CryptoCompare()", +"5c27cdc3": "mintTeamTokens(uint256)", +"5c28c7e0": "privateSaleList()", +"5c2930ad": "shareholders(address)", +"5c2a8763": "percentageToReinvest(address)", +"5c2b0287": "BOXSToken()", +"5c2b1119": "getTop()", +"5c2b18e9": "VestingFund(address,uint256,uint256,address)", +"5c2bdc9f": "GainCard2(address,uint32)", +"5c2c2005": "issuePrice()", +"5c2c8db7": "withdrawToAddress(address,address)", +"5c2cc46d": "findResNameByAddress(address)", +"5c2ccaba": "GslStandardToken(uint256,string,uint8,string)", +"5c2d0e53": "KUNAsToken()", +"5c2e7a00": "setTokenBurnFeeProp(address,address,uint256)", +"5c2e7a13": "QuestionStore(address)", +"5c2e891c": "ECAP()", +"5c2eb1ef": "honestisFortbackup()", +"5c2ee908": "updateWinners(address[])", +"5c3004da": "getPpls(uint32)", +"5c30be8e": "callOracle(address,uint256)", +"5c314df0": "MINER_STAKE()", +"5c31f93b": "unpublish()", +"5c320516": "changeAmount(uint256)", +"5c32460b": "isAddress(address)", +"5c328e3d": "getMyAcceptance(address,uint256)", +"5c35b4e1": "exchangers(address)", +"5c35f464": "_modAccountBalance(bytes32,uint256)", +"5c361091": "PeerBetting()", +"5c36901c": "isActive(bytes32)", +"5c36a0bb": "collect(int32,int32)", +"5c36b186": "ping()", +"5c36e11c": "identified(address,address,bytes32)", +"5c37a17c": "saySomething(bytes)", +"5c390f82": "tokenEquivalent(uint256,uint256)", +"5c398d86": "_getHash(address,uint256,uint256,uint256,uint256,uint256)", +"5c39b671": "sendOwnerCommission()", +"5c39c1ab": "collectedAddressesCount()", +"5c39ec58": "addClaim(address,uint256,uint256,bytes,bytes,string)", +"5c3a4c3d": "startRick()", +"5c3c8c87": "putHere()", +"5c3cd827": "allOfferingSupply()", +"5c3cdec8": "getTotalFeeStake()", +"5c3d005d": "demote(address)", +"5c3d6a7d": "setSaleAuction(address,address)", +"5c3dcfde": "listedTokensAsBytes(uint256,uint256)", +"5c3e38ee": "updateMinSpend(uint256)", +"5c3e426c": "adminRetrieveDonations(address)", +"5c3f9765": "endDateClose()", +"5c3ffada": "getPlayerCardIdsForTeam(uint256)", +"5c40329e": "setPresaleTime(uint256,uint256)", +"5c40839f": "GenevExch(address,address,address,uint256,uint256,uint256)", +"5c40f6f4": "setStatus(bool)", +"5c416306": "extractApprovedIndexLength()", +"5c417695": "burnMana(uint256)", +"5c4271c9": "issueDividendRewardBips()", +"5c42d079": "getProvider(uint256)", +"5c4301f2": "multiExecute(address[],uint256)", +"5c435396": "show_the_name_of_Option_D()", +"5c43fce3": "showteam(address)", +"5c44a837": "RemainingTokenStockForSale()", +"5c44c3e5": "addAdv(address,string)", +"5c45079a": "dropToken(address,address[],uint256[])", +"5c45872e": "_addCategory(address,uint256,uint256)", +"5c4633a4": "_revealNumber(address)", +"5c469570": "ReiDoCoinToken()", +"5c473764": "RESERVE_FUND()", +"5c474f9e": "saleStarted()", +"5c475676": "getProposal(uint256,bytes32)", +"5c47e306": "advisorsTokensPercent()", +"5c47ead7": "getParticipantData(address)", +"5c481d8b": "convertToWei(bytes32,uint256)", +"5c492129": "totalGamesPlayed()", +"5c49660a": "privateIcoTokensForEther()", +"5c4978e0": "getCurrentYearGameMiningTokenCap(uint256)", +"5c49d96c": "nTickets()", +"5c4a627f": "totalPreICOAmount()", +"5c4b4c12": "transferPreSignedHashing(address,address,uint256,uint256)", +"5c4bade1": "transferEtherTo(address)", +"5c4bfa10": "buyout()", +"5c4c9f6f": "WithdrawToken(address)", +"5c4d3609": "getTargetDesignatedReportNoShowsDivisor()", +"5c4e10e8": "sendLimitTokensToFounder(uint256,uint256)", +"5c4f4024": "tryRoundEnd(uint256)", +"5c4fb1c5": "comisionGetter()", +"5c5020e7": "setValidatorStake(bytes32,uint256)", +"5c50c356": "getTotalBonded()", +"5c50c63a": "isTokenTransferLocked()", +"5c511a2a": "OrphanWalefareToken()", +"5c5204d6": "changeOwnerTo(address)", +"5c52b434": "Boxicoin()", +"5c52bba7": "countParticipants()", +"5c52c2f5": "resetSpentToday()", +"5c52e51e": "processPayout()", +"5c53ec59": "setReasonableDiff(address[],uint256[])", +"5c54305e": "InsufficientFunds(address,uint256,uint256)", +"5c552879": "bytesToBytes8(bytes)", +"5c552fab": "getMetadataUser(address)", +"5c5557e7": "setKWHForGas(uint256)", +"5c561fff": "removeAllowedTransactor(address)", +"5c56afa3": "priorTokensSent()", +"5c58ad8e": "processDiceBet(uint256,uint256,int256,bytes32,bytes32)", +"5c590683": "SomeRegister()", +"5c5991d4": "token_ratio()", +"5c5a8ad5": "LogBid(address,address,uint256,uint256,uint256)", +"5c5b9f8f": "depositTokens(address,uint256,uint256)", +"5c5ce16e": "NXTokenCoin()", +"5c5d625e": "getProof()", +"5c5dc9a0": "embark(uint16,uint16,uint256)", +"5c5df66a": "setRequiredExpIncreaseFactor(uint32)", +"5c5e0aca": "setGrowingMaxPerDay(uint256)", +"5c5e20b6": "revertAuction(uint256)", +"5c5e274e": "mMaxChainCode()", +"5c5e54c9": "hasBothAttributes(address,bytes32,bytes32)", +"5c5f786e": "s4(bytes1)", +"5c5f7c5b": "setAdvisorsTokensPercent(uint256)", +"5c60da1b": "implementation()", +"5c60f226": "deleteUser(address)", +"5c612167": "newMultiService(address[])", +"5c613a03": "bountyReservedBalanceOf(address)", +"5c617279": "registeredApps()", +"5c61c853": "getProposalIndex(uint256)", +"5c61d628": "changeFundingLimit(uint256,uint256)", +"5c61f9b4": "getBlockResult(uint256)", +"5c6224c9": "Operational(address)", +"5c622a0e": "getStatus(uint256)", +"5c622c09": "getIsSendingLocked(address)", +"5c629788": "totalLevel(uint256[])", +"5c634241": "CanaryV6()", +"5c64bb72": "getCurrentSale()", +"5c658165": "allowed(address,address)", +"5c659bdb": "declareHanged(address,uint256[])", +"5c665f89": "getFunds(address,bool)", +"5c66bd58": "addWeapon(address)", +"5c679f7b": "batchVote(address[],uint256[])", +"5c67a5db": "approvalRatio()", +"5c67ae76": "PRE_COIN_PER_ETHER_ICO()", +"5c67dd1e": "getBlockRoot(uint256,uint256)", +"5c67f7b0": "transferFromTgefund(address,uint256)", +"5c68908b": "CategoryCatalog()", +"5c693657": "setMaxPower(uint256)", +"5c69d5d6": "completeOrder(bytes32,uint256)", +"5c6a0246": "fundsClaimed()", +"5c6a6edd": "bloquear_contrato()", +"5c6ae355": "removeAuthorizeduser(address)", +"5c6baf3d": "createProxyAddressFor(address)", +"5c6bcad4": "transferFromOrigin(address,uint256)", +"5c6bd930": "calculateBonusToken(uint8,uint256)", +"5c6c8903": "Buy(address)", +"5c6cad31": "storeCryptoNames(string)", +"5c6ce321": "RDT()", +"5c6e0ebf": "getScenariosInfo(bytes32,string,string)", +"5c6eb2d2": "atl()", +"5c6eb7ae": "withdrawStock()", +"5c707f07": "setName(string,string)", +"5c714e90": "starterPackPrice()", +"5c71ae10": "EEZOToken()", +"5c71dec8": "FreezeAdmin()", +"5c72b160": "invalidatePendingWithdrawl(uint256)", +"5c72de09": "BONUS_ICO_ROUND3()", +"5c7460d6": "userRegistry()", +"5c752f6b": "incGen0Count()", +"5c7584b9": "isEarlyInvestors()", +"5c75df30": "churn()", +"5c76ca2d": "paidOut()", +"5c770267": "RefundVault()", +"5c7713d4": "CountCow(address)", +"5c77582f": "changeTeamCosts(uint256[])", +"5c778605": "borrowVerify(address,address,uint256)", +"5c78f9e2": "getDepositorsTokens()", +"5c796720": "CurrentIceDelta()", +"5c7a281d": "HugsByMathou()", +"5c7ae6e3": "ethDivsOwing(address)", +"5c7b0288": "gemAttackConversion()", +"5c7b35f8": "resetTokenOfAddress(address,uint256)", +"5c7b79f5": "cashOut(uint256)", +"5c7b9ccf": "BASE_POS()", +"5c7c43fa": "maximumBuyBack()", +"5c7c49c9": "validateKey(bytes32)", +"5c7c9aa4": "checkAccountState(address)", +"5c7cbb0f": "_decode(bytes32,bytes32)", +"5c7d6425": "setPVPEntranceFee(uint256)", +"5c7f3d9a": "hatchMorties(address)", +"5c7f7f63": "getGrantees()", +"5c7fe08e": "PURCHASE_AMOUNT_CAP()", +"5c803f19": "alarmRaised(uint256)", +"5c803f36": "empties(address)", +"5c80461e": "isInStage1()", +"5c80b448": "setMatingSeason(bool)", +"5c810f09": "disableSellerCancel(bytes16,address,address,uint256,uint16)", +"5c812737": "payoutMultiplier()", +"5c8136c2": "retrievedTokens()", +"5c81662e": "internalMint(uint8,address,uint256)", +"5c81b8f9": "MIRCOOToken()", +"5c838081": "getNota(address,uint256)", +"5c852231": "updateSizeBonus(uint256)", +"5c85267b": "PaymentChannel(address,uint256)", +"5c85974f": "setTxLimit(uint256)", +"5c8747cd": "getSoftwareVersionRecords(uint32)", +"5c87e40f": "SignatureCheckerChanged(address)", +"5c88da6f": "getUSD()", +"5c894469": "getPlayersByTrackId(bytes32)", +"5c89c10d": "setBannedCycles(uint256[])", +"5c8a1053": "extend(string)", +"5c8a694e": "FundableToken()", +"5c8a733a": "b32toString(bytes32)", +"5c8b94e7": "applyWithdraw(address,uint256,uint256)", +"5c8c02b3": "getWinnerById(uint256)", +"5c8cb8c0": "DBIPToken(uint256)", +"5c8cf750": "cancelTransaction()", +"5c8d1a6b": "setAtomMoth(uint256,uint64)", +"5c8e7376": "stageEco()", +"5c8f66f3": "getMinAuditPriceLowerCap()", +"5c8fe438": "books()", +"5c908ee5": "DawnX()", +"5c90b9a8": "createRequest(address[3],address,uint256[12],uint256,bytes)", +"5c919aa3": "getDemurrageableBalance()", +"5c91cdfa": "createPenguin(string,uint256,uint256)", +"5c91fa67": "test_3_assertGasUsage200Boards()", +"5c92abfd": "GameVerified(bytes32)", +"5c92e2f6": "castCommit(uint256,uint256[],bytes32)", +"5c9302c9": "currentDay()", +"5c9442a1": "addAdminList(address[])", +"5c97404a": "domainPrice()", +"5c975abb": "paused()", +"5c978499": "checkValidityOfBalance()", +"5c979fe4": "setRegistrar(uint256,address)", +"5c97efd6": "updateIcoStartTime(uint256)", +"5c97f464": "WNTOToken()", +"5c9920fc": "vaultClosed()", +"5c9a7a8b": "getCarType(uint256)", +"5c9b62b4": "comprarSala()", +"5c9c5a6f": "checkGameIndex()", +"5c9cc81f": "getFundDetails(address)", +"5c9d0fb1": "CROWDSALE_ALLOWANCE()", +"5c9d4528": "mainCapInWei()", +"5c9fa6ad": "bidSpread(bytes32,bool,int32)", +"5ca11c34": "minSalePrice()", +"5ca177cb": "LINK(uint256)", +"5ca1bad5": "CallScheduled(bytes32)", +"5ca1c5a0": "getNodeValue(bytes)", +"5ca1cacc": "changeMinEth(uint256)", +"5ca1e165": "getRoot()", +"5ca20102": "_checkPixelUnderRight(uint256)", +"5ca21490": "BitMilleCrowdsale()", +"5ca26ff9": "updateGuPhrase()", +"5ca3400c": "WithBeneficiary(address)", +"5ca3bf76": "setSendErrorValue(address,uint256)", +"5ca48d8c": "tokensLocked(address,bytes32)", +"5ca4d4bb": "disableScriptExecutor(uint256)", +"5ca5b054": "metherToken()", +"5ca5b334": "enableManager(address)", +"5ca6fa4a": "Nostradamus()", +"5ca7f2f0": "LivepeerVerifier(address,address[],string)", +"5ca81139": "createOnDay(uint256)", +"5ca86447": "put(address,uint256,uint256,uint256,uint256)", +"5ca8bc52": "returnIt()", +"5ca8e2ad": "ModultradeStorage()", +"5ca91d7f": "faddress(address)", +"5caa0dec": "currentSeries()", +"5caaa536": "confirmReference(address,uint256,uint256)", +"5caabecf": "transferFromWithReservingNet(address,address,uint256)", +"5cac0176": "MJT()", +"5cac79b2": "LockedCrowdSale(address)", +"5cac8b27": "amazing()", +"5cacd319": "nfcDetails(bytes32)", +"5cacdf29": "testChickenCnt()", +"5cad249c": "getLastWinNumber()", +"5cad7cfb": "getCrowdsaleStatus()", +"5cade372": "payAllOut()", +"5cae7767": "removeTrustedPartner(address)", +"5caed029": "tokenDecimal()", +"5cafbafb": "newMember(address)", +"5caff1a7": "Criptolira()", +"5cb047e8": "toInt(bytes,uint8,uint8)", +"5cb0887c": "contractExists(address,address)", +"5cb0c16f": "totalInCirculation()", +"5cb10016": "offchainSale(address,uint256)", +"5cb1470e": "_createRabbitInGrade(uint256,address,uint8)", +"5cb18a6d": "fipsLegacyRegisterMulti(bytes20[],address,bytes)", +"5cb24756": "unitEthWei()", +"5cb2d86e": "totalBlockContribution(uint256)", +"5cb2ffb5": "updateMinCapEthOnce(uint256)", +"5cb318bf": "unregisterUser(address,address)", +"5cb3ce15": "calculateMemoryState(uint256)", +"5cb4502c": "SCORE_TO_WIN()", +"5cb4f548": "partnerInfo(address)", +"5cb5de63": "recReward(uint256,uint256)", +"5cb603dd": "_getYearIndex(uint256,uint256,uint256)", +"5cb7226d": "prePreIcoStartAt()", +"5cb732be": "refundToken()", +"5cb7dd98": "BlueChipGame()", +"5cb85cd2": "changeCost(uint256)", +"5cb8dd09": "isAllowed(address,bytes32)", +"5cb92dc7": "_enableRefunds()", +"5cb9ceaa": "okAddress(address,address)", +"5cba658f": "setState(address[],uint256[],address,uint256)", +"5cba6caa": "notarizeHash(uint256,string,string,bytes32,string,string,string)", +"5cbaa74b": "canAttack(address)", +"5cbad0b5": "sumHardCapICOStage1()", +"5cbb122c": "transferBctToken(address,uint256)", +"5cbb2ac3": "purchaseTokenPointer()", +"5cbb7caa": "getFriends(address)", +"5cbbdfc9": "currentApplicationEntityAddress()", +"5cbc65b2": "getplayersurplus()", +"5cbc85d0": "returnBounty(uint256)", +"5cbcb302": "pre_ico_allocation()", +"5cbdf177": "emailVerified()", +"5cbe5f8f": "DIV_DIST()", +"5cbee9ba": "releaseLockedTokens(address)", +"5cbf0850": "BTN()", +"5cbfdd8d": "preBuy(address,uint256,bool)", +"5cc15001": "getContent(bytes32)", +"5cc18780": "StabilizationFund()", +"5cc1ad7f": "toTileId(uint8,uint8)", +"5cc2e6aa": "getFirstAuctionsRemainingDuration()", +"5cc2f6d8": "_processPurchaseInWei(address,uint256)", +"5cc3623a": "currentSection()", +"5cc373c7": "TestJ()", +"5cc39659": "preSaleBonus2Amount()", +"5cc3c951": "purchase_with_dai(uint256,address,uint256,uint256,uint256,address,bytes)", +"5cc3f5d7": "Deauthorization(address,address)", +"5cc41dad": "initiateCertificate(bool,string,uint256,uint256,uint256,uint256)", +"5cc422a1": "sumofsquares(uint256,uint256)", +"5cc501ce": "testFailSetNotTransferableNotOwner()", +"5cc52fba": "claimTokensBC(uint8)", +"5cc53bc7": "matchOpponents(uint256)", +"5cc57501": "_computeHeight(uint256,uint256,uint256)", +"5cc5c5cf": "jackpotDifficulty()", +"5cc5ca50": "formulaContract()", +"5cc8a6ed": "PRE_SALE_4WEEK_BONUS()", +"5cc8ce33": "dev_settledBalance()", +"5cc95422": "getVestingReleasedAmount(address,address)", +"5cca3905": "getDeveloperMiningPowerForGameId(uint256)", +"5ccb4f8f": "UmbrellaCoin()", +"5ccb5460": "ethInvestedDuringICO()", +"5ccb54c4": "BGD()", +"5ccbddeb": "IcelandvsCroatia()", +"5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", +"5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", +"5cce7dbb": "removeHolderAddress(bytes32,address,address)", +"5ccee1de": "newValidatorSet()", +"5ccf49ed": "isGenome()", +"5ccf9f43": "BonusCrowdsaleMock()", +"5ccfe157": "getDataById(uint8)", +"5cd03621": "periodRound()", +"5cd03a3f": "removeIdArrayItem(address,uint256[],string,address)", +"5cd137b4": "LogDonation(address,string)", +"5cd27e8d": "init3(int256[],int256)", +"5cd2f4d3": "approve(address,bytes32)", +"5cd31795": "HavenToken()", +"5cd31e83": "LastWillContract(address,address[],uint8[])", +"5cd3b917": "numberOfDeployedTokens()", +"5cd3f3a1": "decompress(bytes)", +"5cd42150": "KY8000Token()", +"5cd45e61": "getUuidsSize()", +"5cd48caa": "bet(uint256[],address)", +"5cd50b3f": "quater2()", +"5cd60dad": "add(address,int256)", +"5cd689e6": "sell_label(address,uint256)", +"5cd6bd0e": "getPlayerDividendByStage(uint256,uint256,address)", +"5cd72340": "SetEpochData(address,uint256,uint256)", +"5cd72b15": "setAllowedMultivest(address)", +"5cd7815b": "testInternalCall()", +"5cd7c8bc": "createLastDay()", +"5cd7d478": "isYesWinning()", +"5cd82ee5": "Act()", +"5cd85187": "MIN_ETHER()", +"5cd87c71": "supportsTradingPair(address,address)", +"5cd8d2ad": "buyAndTransfer(uint256,address,address)", +"5cd925cd": "assetSize()", +"5cd96091": "enable_refunds()", +"5cd9814f": "Mybalance()", +"5cda31dd": "GTN()", +"5cda4b41": "checkApproval(address,address)", +"5cdaab48": "previousEpoch()", +"5cdb0798": "burnMemberToken(address)", +"5cdb1bd7": "setRefundPercent(uint256)", +"5cdb88bc": "addClaim(string,string,uint256,string)", +"5cdbd2d1": "Constructor(string)", +"5cdc9eda": "peggedETHUSD()", +"5cdcf33d": "milieurs_per_eth()", +"5cdd7560": "STEToken()", +"5cdd95e3": "MintableToken(uint256,address,bool)", +"5cddb74b": "becomeShitClonelord()", +"5cddd93d": "referalsMinInvestLimit()", +"5cde15b9": "_Application(bytes32,uint256,string)", +"5cde871e": "_depositOrderBalance(uint256,address,address,uint256)", +"5cdf3450": "changeParticipationLimits(uint256,uint256)", +"5cdf76f8": "setServiceFee(uint256)", +"5cdfcd69": "car_expense(uint256)", +"5cdfd08c": "managementFees()", +"5cdfe733": "fastBuyBonus()", +"5ce1d810": "SmartN()", +"5ce22019": "getEtherInContract()", +"5ce2fea1": "CleosContract()", +"5ce308a7": "addEntry(string,string)", +"5ce32aca": "getAirdrop(bytes32)", +"5ce398c4": "Riddle()", +"5ce3dec1": "self_destruct()", +"5ce49fbf": "amountBets()", +"5ce4f8dc": "PoWHrGlass()", +"5ce57b50": "setPenalizedStatus(uint256,address,bool)", +"5ce5ba9b": "queryParent()", +"5ce62aa4": "checkStoredFile(address)", +"5ce7514e": "allowPublicWithdraw()", +"5ce75c7c": "PRESALE_SECOND_DAY_START()", +"5ce7c7e0": "tokenSetCrowdsaleManager(address,address)", +"5ce800ac": "user_off_freeze()", +"5ce8050f": "BuildCoinUtilityToken()", +"5ce83f70": "updateEndsAt(uint256)", +"5ce885ee": "initial_withdrawal(uint256)", +"5ce94328": "balanceOf(uint152)", +"5ce97dbb": "totalAirdrop()", +"5ceaa0bf": "modifyCurrentHardCap(uint256)", +"5ceb8bc8": "isPromoPause()", +"5cebcbf0": "setMaxGamePerBlock(uint256)", +"5cec2054": "dteamVaultAddr1()", +"5cec4cb9": "fundsTokensHaveBeenMinted()", +"5cec5ded": "balanceComisionOf(address)", +"5cecd728": "setWillContents(address,bytes)", +"5cedff32": "takeTokensForBacking(address,uint256)", +"5cee9ea7": "buyNew(uint256,uint256,uint256)", +"5cef51a6": "BdpDataStorage(bytes8)", +"5cf00394": "getResoPeriod()", +"5cf054f8": "SetRewAddr(address)", +"5cf0769c": "ETHERCOIN()", +"5cf1469d": "addPayout(uint256,string)", +"5cf28fa4": "minDai()", +"5cf29ecf": "forOwner()", +"5cf2befc": "getEthAddressesLength()", +"5cf2f261": "ProofOfBitconnect()", +"5cf3125c": "NASDAQ()", +"5cf34bcf": "getMinFee()", +"5cf3508a": "whiteListControllerAddress()", +"5cf38f24": "togglePlotBlockedTag(uint256,bool)", +"5cf3cd96": "payNode(bytes32,bytes32)", +"5cf3d346": "names(address)", +"5cf469ca": "tokenPreSaleCap()", +"5cf4ee91": "getPrice(uint256,uint256)", +"5cf5ad2e": "registerNameCore(uint256,address,uint256,bytes32,bool)", +"5cf5e386": "guardian2()", +"5cf6040b": "ERC20Token(uint256,uint8,string,string)", +"5cf6208a": "oraclizeTimeTolerance()", +"5cf625f0": "OffChainManagerImpl(address,address)", +"5cf6a536": "InternetWall()", +"5cf6a763": "receiveApproval(address,int256,address,bytes)", +"5cf858aa": "TOKEN_ESCALE()", +"5cf89f1e": "setDateRelease(uint256)", +"5cf8ca60": "isCase(uint256)", +"5cfa353a": "updateTotalGasCost(uint256)", +"5cfae3ba": "UNPC()", +"5cfaf2ef": "setNameTAOPositionAddress(address)", +"5cfb4aa4": "getMessageTimestamp(uint256)", +"5cfbcdbb": "committedEther()", +"5cfc1a51": "capacity()", +"5cfc53c1": "calculateForValue(uint256)", +"5cfc6432": "EcosystemPart()", +"5cfd5f89": "product4_pot()", +"5cfd8c24": "ResetPonzi()", +"5cfe237a": "TCGC(address)", +"5cfe585a": "calcDisputeEnds()", +"5cfea6fb": "TokensPerWei()", +"5cff876b": "carrotsCaught()", +"5d000c07": "getFreeFuck()", +"5d004e85": "getCommentsCountByAd(uint256)", +"5d01615f": "queryFusionData(uint256)", +"5d01b261": "_placeBet(uint256,address)", +"5d0213f7": "transferTokenOwnerShip(string,address)", +"5d029d1e": "indexedByTag(bytes32,uint256)", +"5d02b2f7": "hasPresaleEnded()", +"5d03147a": "ownership()", +"5d0341ba": "approvals(address)", +"5d036c8b": "payEther(address[],uint256[])", +"5d0413d1": "calculatePlotPrice()", +"5d04af9c": "iMMCoinbuyPrice()", +"5d064bab": "MoreGainCoin(uint256,string,string)", +"5d068051": "sendFees(address)", +"5d06a05c": "lockupAccounts(address[],uint256,uint256)", +"5d0792b7": "minimumInvest(uint256)", +"5d0808f2": "listedMartialsLength()", +"5d08225e": "getGidOfId(uint64)", +"5d088fc6": "changeRandomFight2DeathContract(address)", +"5d08c1ae": "salePaused()", +"5d09e625": "setMustSkipFee(address,address,bool)", +"5d0a740a": "GetSeries()", +"5d0a7628": "lockPresaleBalances()", +"5d0ad8d0": "testFail_set_owner_unauth()", +"5d0b4e5c": "isTradeFeasible(address,address,uint256)", +"5d0b6774": "counterFor(address)", +"5d0be9de": "softWithdrawRevenueFor(address)", +"5d0c0161": "IXCASHToken()", +"5d0cb15d": "TOKEN_SALE_SUPPLY()", +"5d0dd712": "bet_amount()", +"5d0e550a": "safetyModeOn()", +"5d0ef098": "burnUnsoldCoins()", +"5d0f4ee0": "isChampionAccount(address)", +"5d108ca2": "TokenChanged(address)", +"5d109aea": "maxResult()", +"5d10a60d": "createPost(string,string,bytes32)", +"5d113b03": "PayWinners(uint256,address)", +"5d121289": "addPreSaleEndDate(uint256)", +"5d123014": "setGameTax(uint8)", +"5d12ace4": "playGame(uint256,uint256,uint256)", +"5d12fc0c": "ONE_BILLION()", +"5d14076c": "lowercaseString(string)", +"5d145c5b": "setIcoTimeStartEnd(uint256,uint256)", +"5d14f925": "Invested(address,uint256,uint256,string)", +"5d15001e": "SupplyOp(uint256,uint256,uint256)", +"5d15b46a": "emitSkillCategoriesSet(address,uint256,uint256)", +"5d161310": "DataMining()", +"5d161c3f": "useAbility(uint256)", +"5d16a6f9": "lockedBalances(address,uint256)", +"5d16b8de": "take_back_money()", +"5d183b60": "supplyRound2()", +"5d184107": "AddCategory(string)", +"5d19212e": "markUserAsFounder(address)", +"5d19606e": "transferIssuer(uint256,address)", +"5d19a99f": "isLimitReached()", +"5d1a3b82": "getOutcome(bytes32)", +"5d1b45b5": "getEntityCount()", +"5d1b56c4": "TestUser(address,address,address,bytes32)", +"5d1bd962": "getArrayValue(uint256)", +"5d1be4e5": "deathData_f14()", +"5d1be58e": "pecunioToken()", +"5d1c01e0": "signedApproveAndCallCheck(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", +"5d1c3171": "luck()", +"5d1c985b": "setReceivers(address,address,address)", +"5d1ca631": "getId()", +"5d1ce03f": "tokensRaisedDuringRound(uint8)", +"5d1e2d1b": "split(address,uint256)", +"5d1edfa0": "checkContributedETH(address)", +"5d1f8098": "RoshaanCoin()", +"5d200f84": "GetPlayer(uint256)", +"5d201596": "getCategoryInfo(address,uint256,uint256)", +"5d202249": "totalCollectedETH()", +"5d204869": "slice(bytes,bytes,uint256,uint256)", +"5d208872": "setTimesEnabled(uint8,bool)", +"5d216562": "changeLockTransfer(bool)", +"5d2195dc": "getToBalance(uint256)", +"5d2230d7": "numfails()", +"5d2247a5": "stakeAirdrop(uint256,bytes)", +"5d228eb0": "getProviderDetailFields(uint256)", +"5d22a352": "manualWithdrawToken(uint256)", +"5d22e222": "BTCAir()", +"5d2392d6": "latchContract()", +"5d239d3e": "getSlice(uint256,uint256)", +"5d240c58": "addExperience(uint256,uint256)", +"5d2434ec": "transferFromTangibleassetdisbursementfund(address,uint256)", +"5d25cccc": "createVesting(address,uint256,uint256,uint256,uint256,bool,address,uint256)", +"5d25d021": "withdrawForeignTokensMultiple(address,address[],uint256)", +"5d267042": "PointlessToken()", +"5d268629": "Refund()", +"5d2694da": "BlackPearlETH()", +"5d270cdc": "setExpectedRate(address)", +"5d272468": "isLiquid()", +"5d27976a": "Final(string,string,uint8)", +"5d27bff3": "registerWithEncryption(string,string)", +"5d27e9a6": "SEPARATOR()", +"5d281384": "_isValidSignatureAndMethod(address,address,bytes)", +"5d285eca": "preICOspecial()", +"5d29206b": "createTokenEscrow(address,uint256,address)", +"5d293581": "ApplyForCertification(string,string,string,string,uint256)", +"5d2946f5": "futDevAddr()", +"5d295f67": "maxDGAME()", +"5d2973cd": "applyVIPLevel(address,uint256)", +"5d29bd40": "rollThree(address,uint8,uint8,uint8)", +"5d2a5d3d": "sentPreSaleTokens()", +"5d2a70a8": "getActualFee()", +"5d2a9b6a": "_randomIndex(uint256,uint8,uint8,uint8)", +"5d2aa757": "getSides(string,uint256)", +"5d2b811d": "getLastRegisterDate()", +"5d2bafed": "gee()", +"5d2c0af2": "Invest(address,bool,uint256,uint256,uint256)", +"5d2c53a7": "withdraw_funds(uint256)", +"5d2cce82": "LemonsDroppedToTheWorld()", +"5d2d5c37": "registered(string)", +"5d2dc5fa": "FraCoinAuct(string,uint256,address)", +"5d2dec87": "PRNG(address)", +"5d2fea9d": "reissuedTransactions(uint256)", +"5d302ba1": "UpgradeAgentEnabledToken(address)", +"5d306f34": "getRefundAmount(address)", +"5d307c6f": "giveToVoter(uint256,uint256)", +"5d3171d9": "transferFromPrivileged(address,address,uint256)", +"5d31c3bc": "deliveryApprove(address)", +"5d3235bd": "NutrioCoin()", +"5d3278f0": "LooneyFifty()", +"5d337b01": "largeSize()", +"5d3458ea": "DolToken()", +"5d346bd6": "addSaleOwner(address)", +"5d34b70c": "LavaDeposit(address)", +"5d354b4d": "foundingTime()", +"5d355804": "endPtopDeposit(address,address,bytes32)", +"5d359fbd": "transfer(address,uint64)", +"5d35a3d9": "approve(uint256,uint256)", +"5d3601d2": "_isRegularAddress(address)", +"5d36a791": "PartyToken()", +"5d36d182": "recycle(address,uint256)", +"5d37c840": "level_4_amount()", +"5d383eaa": "registerTokenPayment(address,uint256)", +"5d385031": "getCustomerTxOrigMcwTransfer(address,bytes32)", +"5d3899af": "place_to_push(uint256,bytes32)", +"5d397767": "publicBattlepm1()", +"5d3a08d7": "setNodePhases(address)", +"5d3a1f9d": "setText(string)", +"5d3a5e3b": "teamTokenAddress()", +"5d3a70f9": "YayyyToken()", +"5d3aac49": "PublishInterfaces()", +"5d3afb19": "CNYB()", +"5d3b2f37": "getNextGameId(address)", +"5d3bb19e": "XXXXXXXX09()", +"5d3c1d4c": "_getRequest(uint256)", +"5d3c7c9b": "AGASCrowdsale()", +"5d3c81a5": "feeWithdrawTokenAmount(address,uint256)", +"5d3ca4ab": "lotteryReinvest(string,uint256)", +"5d3cd79f": "endPrivateICO()", +"5d3d08a8": "cancelExchange(uint256)", +"5d3e64bf": "ttlPlayers()", +"5d3f4fe4": "withdrawMyTokens()", +"5d3fdd19": "updateDiscount(uint256)", +"5d40124e": "YunJiaMi(address,address,address,uint256,uint256,uint256)", +"5d40533f": "AnemoiToken()", +"5d40c0ae": "createAccessorySeries(uint8,uint32,uint256)", +"5d41363f": "rateRound1()", +"5d416cc2": "setIsTokenCanBeBuy(bool)", +"5d41dd6f": "ExampleToken(address[])", +"5d42513b": "test_withdraw()", +"5d428e08": "addTrader(address)", +"5d4293a0": "hatchPoohs(address)", +"5d439cf3": "transferEvent(address,address,uint256)", +"5d43e769": "batchTransfer(uint256,uint256[])", +"5d444ffb": "minMintingPower()", +"5d4453ba": "getGuess(address,uint8)", +"5d449d7d": "refererFeePercent()", +"5d44b508": "calculateRewardToWithdraw(uint32,address,address)", +"5d450bab": "setJobRating(address,uint8,uint256)", +"5d451a9a": "Wallet8()", +"5d4521dd": "updateWeedTotal(uint256,uint16)", +"5d452201": "ico()", +"5d4559ca": "get_coins_count()", +"5d45b4a7": "increaseMonthlyTransactionVolumeSending(uint256)", +"5d461de5": "sendAmount(address,uint256)", +"5d4626f6": "getInvoiceStatus(bytes32)", +"5d468d38": "releaseAuctionEnded(uint256)", +"5d469b74": "redeemUnderlyingInternal(uint256)", +"5d47762d": "Member_AssingTokensToProject(uint256,uint256)", +"5d47f4f2": "CanHandleAuth(address)", +"5d484e17": "StaticEthAvailables()", +"5d485e5d": "_hostContent(address,bytes32,string,string,string)", +"5d495aea": "pickWinner()", +"5d49705b": "getEmployer(address,uint256)", +"5d49719d": "SHA3_512()", +"5d49c199": "finishPreSale2()", +"5d4a8f74": "ATTRToken()", +"5d4aaf1c": "registerWithUserAgreement(address,bytes32)", +"5d4befc0": "emitSynthAdded(bytes4,address)", +"5d4c5cca": "participantsForPreSale(address)", +"5d4d061e": "keyValueStorage()", +"5d4dda72": "DirectInput()", +"5d4e1e5c": "substract(uint256,uint256)", +"5d4f012b": "tgeCurrentStage()", +"5d4f30e7": "get_address(address)", +"5d50601b": "getsumdata1(bytes32)", +"5d506a2e": "minPotSum()", +"5d51b550": "haltCrowdsale()", +"5d52fe64": "buyRemaining(address)", +"5d54322d": "canPurchase(address,uint256)", +"5d5483b3": "WatchAppliedFeePercentage()", +"5d54cb1f": "is_transfer_allowed()", +"5d54e612": "whitelistAll()", +"5d552c72": "BasicToken()", +"5d5576f8": "renounceCapper()", +"5d56550a": "buyCore(address,uint256,string)", +"5d5655dd": "BOOKIE()", +"5d567259": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address,uint64)", +"5d56e0a4": "developerMiningPower()", +"5d57135a": "KEBABER_TO_MAKE_1KEBAB()", +"5d582870": "requestInvestment(uint256,uint256,address)", +"5d585176": "GolemSupply()", +"5d586bfd": "deposit(string,address,uint256,string)", +"5d59072a": "OFFICAL_VOTING_DAY_OF_MONTH()", +"5d593462": "init(address,address,string,string,uint256,uint256)", +"5d5a1614": "STQCrowdsaleTestHelper(address[],address,address,address)", +"5d5aa277": "tokenSaleContract()", +"5d5b35f3": "dividendsTotal()", +"5d5b82fd": "Blockjack(address,address)", +"5d5b9021": "acceptTradeOffer(uint256)", +"5d5b92b1": "teamOneSharePrice()", +"5d5bc4cb": "BetOnRed()", +"5d5c3011": "ctyCoin()", +"5d5c606f": "DAOPolskaTokenICOregulations()", +"5d5d4fab": "TACTICALCRUISER_EXTRACTION_BASE()", +"5d5e22cd": "transferFromWithSender(address,address,address,uint256)", +"5d5e507b": "create_price()", +"5d61dd5a": "removeSingleAddressFromWhitelist(address)", +"5d62917b": "pickWinners(uint8,address,address,address,uint8,uint8,uint8)", +"5d63b758": "minAcceptedETH()", +"5d63b77c": "divideSafely(uint256,uint256)", +"5d644069": "request_face_proof(string,address)", +"5d6470a4": "STAGE_1_TIME()", +"5d64aa68": "dragonIndexToOwner(uint256)", +"5d651b62": "TimeLockSendCreated(address,address,uint256,address)", +"5d6542af": "way()", +"5d65432d": "IndorsePreSale()", +"5d65c37b": "Assessment(address,uint256,uint256,uint256,uint256)", +"5d666d3c": "getRurus(string)", +"5d667464": "usePrecompiledContracts(bytes32,uint8,bytes32,bytes32)", +"5d66ccf0": "updatePerSell(uint16,uint256,bool)", +"5d66d73f": "notarizeHash(uint256,string,string,uint256,bytes32)", +"5d671fc0": "switch_period()", +"5d6720b4": "getFreeMineral(address)", +"5d67830a": "doLogFighter(uint32,uint256,uint256)", +"5d685185": "periodITO_softCapInWei()", +"5d68564e": "ZontoToken()", +"5d6952d7": "changeSaleStartBlock(uint256)", +"5d69864e": "Bitscors()", +"5d69d600": "presold()", +"5d69f16f": "offerAsSacrifice()", +"5d69f68c": "getVotersName()", +"5d6af2af": "getOffChainRootAddress()", +"5d6b2f26": "destroyAllTokens()", +"5d6b70ae": "getSignedTable()", +"5d6b7798": "BCQ()", +"5d6c3ea7": "mined_coin_supply()", +"5d6c8e10": "getDHash(bytes13)", +"5d6cb67e": "ecosystemTokenSupply()", +"5d6cdfae": "EthereumPot()", +"5d6ceeb5": "returnMoneyToBuyers()", +"5d6d2992": "ownFiles(address,string,string)", +"5d705fe2": "MBCashSupply()", +"5d711db1": "get_candidates()", +"5d718818": "getHolderCountryCode(bytes32)", +"5d71cf46": "spendableAllowance(address,address)", +"5d723298": "PartialPayment(address,address,uint256)", +"5d728582": "hasAuthoritySignedSideToMain(address,bytes)", +"5d72b30d": "changePlayerName(uint256,string)", +"5d73e2bf": "startPlay(bytes32,uint8,bytes32,bytes32)", +"5d740d62": "YFJToken()", +"5d751443": "updateWebappMinBalance(uint256)", +"5d760b45": "forceWithdrawPayments(address)", +"5d766d35": "INITIAL_GLOBAL_DAILY_SUPPLY()", +"5d76a039": "PresaleReStarted()", +"5d771933": "BOUNTY_SUPPLY()", +"5d777893": "GetPlayers(uint8)", +"5d77aec8": "receiver3()", +"5d77d8d0": "getBlacklist(address)", +"5d78650e": "getAccountData(address)", +"5d796c05": "mintAuditCancel(address,address)", +"5d79eda7": "Digixbot(address)", +"5d7a6b10": "nextDerivativeTokenScheduled()", +"5d7b0758": "controllerMint(address,uint256)", +"5d7c3ad2": "ICO(address,address,uint256,uint256,uint256)", +"5d7c3b78": "costructor()", +"5d7c829d": "_messageToRecover(address,uint256)", +"5d7cf3e2": "Meltdown(uint256)", +"5d7e6b8d": "Schengencoin()", +"5d7e7219": "setFeeFor(address,uint128[2])", +"5d7e8c15": "ethToCents()", +"5d7e994a": "RewardStart()", +"5d801ec4": "SetmaxTokens(uint256)", +"5d80effc": "TimeBonusPricing(uint256[])", +"5d80f643": "Kujira()", +"5d818e6b": "recordDeal(uint256,address,uint32,uint32,bool,uint256)", +"5d81b206": "P3NGCT_v1(uint256,string,string)", +"5d8214db": "lastFactChangeValue()", +"5d8227e6": "FactoryBase(string,string,string)", +"5d82ddc8": "freezeEnabled()", +"5d8302f2": "CrypTollBoothToken(uint256,string,uint8,string)", +"5d831ca1": "FUT5()", +"5d8749ed": "workStages(uint256)", +"5d878b4f": "isInWhitelist(uint256,address)", +"5d88383e": "retrieveEth(address,uint256)", +"5d891d12": "foundersTokensWalletMaster()", +"5d895dac": "parse(string,uint256)", +"5d89c01a": "getCatIds()", +"5d8a776e": "award(address,uint256)", +"5d8aef9f": "_calculateLockedBalance(address,uint8)", +"5d8bc2a8": "assertEq12(bytes12,bytes12,bytes32)", +"5d8c5b87": "orderPlace(address,bool,uint256,uint256)", +"5d8ca2ac": "getApprovalsFor(address)", +"5d8d1585": "getUserInfo()", +"5d8d2904": "setKeyPermissions(bytes32,bool,bool,bool)", +"5d8d4415": "rawUseName(bytes32)", +"5d8dd304": "founderTokensAvailable()", +"5d8e0c2c": "isManualTradingAllowed()", +"5d8e7376": "DAOBalanceSnapShot()", +"5d8e772f": "gameCore(uint256,uint256,uint256,bytes32)", +"5d8f2640": "store(bytes32,bytes32,bytes32)", +"5d8f3b76": "createPercentageRequest(uint256)", +"5d90df32": "TRONIX()", +"5d9169f0": "ICO(address,address,address,address)", +"5d91e27b": "MVM24PeriodsCapUSD()", +"5d92e5d2": "ipyh()", +"5d946afa": "trashed(address)", +"5d94e35c": "contractRefundStarted()", +"5d94f108": "platformLogout(address,uint256)", +"5d956b3e": "changeGroveAddress(address)", +"5d95738b": "vHasVoted(uint256,address)", +"5d95a08b": "MizuCoin()", +"5d969f8f": "updateCustomerACC(address,address,address)", +"5d96ec65": "setAdministrator(address,string,bool)", +"5d975d70": "mx(bytes32)", +"5d977c02": "withdrawalFor(uint256,uint256)", +"5d9796eb": "WELTCOIN()", +"5d989a0c": "NyronChain_Crowdsale()", +"5d98d9ee": "ChannelCreated(string,address)", +"5d98fd9f": "Presale(address,address)", +"5d990791": "getDenominationByIndex(uint256)", +"5d99e02f": "myPinerTokenTest1()", +"5d9adc94": "withdrawPendingTransactions()", +"5d9c4f0f": "getFeeRecipient(address)", +"5d9d595c": "sendWingsRewardsOnce()", +"5d9d5b9a": "CreatedCAT(address,uint256)", +"5d9d8dd9": "makeupShiny(uint256)", +"5d9dacb5": "OPEN_VOTE_PERIOD()", +"5d9ec210": "signTransaction(uint256)", +"5d9fa6fc": "getContractBal()", +"5d9fd8b0": "listPersons()", +"5da01a5b": "configure(bytes32,bytes32,uint256,uint256,uint256,address)", +"5da03ff8": "EthergotchiOwnershipV2(address)", +"5da05e2e": "setCoinLimit(uint32)", +"5da08c42": "createSeedTeam(uint8,uint256[9],uint256[9])", +"5da0a987": "Run()", +"5da12d50": "Oduwacoin()", +"5da24f90": "closeTimer()", +"5da34093": "bonusRemain()", +"5da3d3d2": "minHEXCap()", +"5da47721": "getVIPLevel(address)", +"5da4a1d3": "setPercentage(uint256)", +"5da54cee": "DragonCrowdsale()", +"5da5a9b1": "ownerUpdateMinMaxNumber(uint256,uint256)", +"5da5f5ab": "Distribution()", +"5da6628a": "transferExt(address,uint256)", +"5da6bf67": "movePlayer(uint8[176],uint8,uint8,uint8)", +"5da6c04d": "getFeesOwedToOperator()", +"5da6c418": "burnMintFrom(address,uint256)", +"5da6e035": "_openAndJoinCDPWETH(uint256)", +"5da6ec5b": "t8exToken()", +"5da85a16": "setCEx(address)", +"5da888aa": "ChainKeyToken()", +"5da89ac0": "weiRefunded()", +"5da96520": "transferTeam2Tokens(address,uint256)", +"5da9781b": "readUint256s(bytes32[])", +"5da99f5e": "upgradeCardDamage(uint256)", +"5daa0c37": "referrerLinkedSales(bytes32)", +"5daa87a0": "Initialized()", +"5daab236": "runIco()", +"5dab2e0f": "left82(uint256)", +"5dac1601": "SimpleStablecoin()", +"5dac48bb": "approvePreSignedHashing(address,address,uint256,uint256)", +"5dac5682": "removeAuthorization(address,address)", +"5dac7044": "checkHardCap(uint256)", +"5dacf084": "THACO2()", +"5dada964": "expectedRateContract()", +"5dadf485": "takePosition(uint256)", +"5dae4e50": "makeItRain()", +"5daf08ca": "members(uint256)", +"5daf7514": "redeemTokens(uint256,uint256,bytes32[])", +"5daf8a71": "DestroyToken(uint256)", +"5db07aee": "mintFeeDenominator()", +"5db09db5": "getSplitPotAsFixedPointForGameId(uint256,bool)", +"5db17dab": "CDTToken(uint256)", +"5db2a233": "awailableDividends(address)", +"5db30bb1": "getMaxTotalSupply()", +"5db38c63": "nDemocs()", +"5db39a1e": "totalFails()", +"5db39d74": "HayaCoin()", +"5db3f963": "registerSimple()", +"5db3ffa5": "getUBetCheck(address,address)", +"5db42841": "createContractGameItem(string,uint256)", +"5db46961": "proxyExchange(address,uint256,string,bytes32)", +"5db4cd21": "ir()", +"5db524ad": "finishDividends()", +"5db5301f": "unsubcribe(address)", +"5db5d1fb": "startTimeTLP2()", +"5db5fc24": "alterInitialPricePerShare(uint256)", +"5db62dab": "getBalanceForUser(bytes32)", +"5db6687b": "Dev_TokenReleased()", +"5db6a31f": "transferBroker(address,uint256,uint256)", +"5db7ef3d": "intoverflow_mul(uint256)", +"5db8e202": "evaluateProposalAction(uint256)", +"5db8f084": "getNeighbourReward()", +"5dbb0ef8": "TuZaiCoin(uint256,string,uint8,string)", +"5dbbd139": "CentraSale()", +"5dbbfc47": "getMaxLoss(address)", +"5dbc374f": "UBCoin()", +"5dbe47e8": "contains(address)", +"5dc10a45": "whitelistMultiForTier(uint256,address[],uint256[],uint256[])", +"5dc11a89": "setNumTicks(uint256)", +"5dc1ba1b": "closeLotteryAndPickWinner()", +"5dc1bb52": "removeLocked(address,uint256)", +"5dc1c79d": "KANYE()", +"5dc2157d": "getBalancesOfAddress(address)", +"5dc22cce": "attackPlayer(address)", +"5dc2944a": "ratesForCurrencies(bytes4[])", +"5dc3d02d": "rc5()", +"5dc43f6e": "AddAuthority()", +"5dc49bf8": "SellENSCreated(address)", +"5dc4d8a6": "proposalTarget(uint256)", +"5dc4dcd1": "TicketPurchased(address,uint256,uint256,uint256,uint256)", +"5dc54308": "KickSportsManager()", +"5dc5aefe": "startIncentiveDistribution()", +"5dc6bfe4": "distributeLRN(address[],uint256)", +"5dc6f3df": "registerNameCore(uint256,address,bytes32,bool,bool)", +"5dc70cda": "_shareToPreviousOwner(address,uint256,uint256)", +"5dc774d7": "DrawingPrintToAddress(uint256)", +"5dc77e26": "andThen(string,address)", +"5dc824b9": "voteNoLock(address,uint256)", +"5dc86b85": "adminGetAmountAddressDial(address,address)", +"5dc94af6": "getTokensTotal()", +"5dc96d16": "burnEnabled()", +"5dca53d3": "right30(uint256)", +"5dcb6774": "_createBid(address,uint256,address,address,address,uint256,uint256)", +"5dcb71f2": "yoshicoin()", +"5dcb98c4": "CPO()", +"5dcbac7a": "registerBytes(address,bytes)", +"5dcbc01e": "addSellTokensRequest(string,string)", +"5dcbd8bb": "setLimit(uint16,uint64)", +"5dcc6dbc": "spawnAxie(uint256,address)", +"5dcd967d": "ndc()", +"5dcdddd1": "testSafeToAddFix()", +"5dce431b": "addGame(address,uint256)", +"5dce9948": "getTranscoder(address)", +"5dcf1b77": "fileMerkle(bytes32[],uint256,uint256)", +"5dcf451b": "CoinDogToken()", +"5dcf7c8c": "proxies(address,uint256)", +"5dd18a22": "setItemsNotForSale(uint256[])", +"5dd19463": "angelFoundationAddress()", +"5dd283cb": "pickSmallWinner()", +"5dd284e3": "getAllGoldTransactionsCount()", +"5dd39c12": "SOD()", +"5dd4599a": "usersCanTrade()", +"5dd48b04": "PURCHASE_PREMIUM_RATE()", +"5dd4a65f": "lookup(address,bytes32)", +"5dd588df": "isAuthorizedToTransferFrom(address,address,address)", +"5dd672ec": "latestBid()", +"5dd68acd": "setAddresses(address,address,address,address,address)", +"5dd68f36": "getTotalInvest()", +"5dd871a3": "canMint(uint256)", +"5dd8e1d5": "kek()", +"5dd8eb50": "rate4()", +"5dda837f": "mineBalance()", +"5ddae283": "transferRegistrars(bytes32)", +"5ddaf07f": "StarbaseToken(address,address,address)", +"5ddb2585": "icoStartTimestampStage4()", +"5ddb8a2e": "sendBonusTokens(address[],uint256[])", +"5ddbc632": "setHardCapToken(uint256)", +"5ddc98ba": "updateKYCWallet(address)", +"5ddd81b0": "firstPeriodCap()", +"5ddd8248": "setBurnerOwner(address,address)", +"5dddea66": "updateState(uint256,uint8,uint256)", +"5dde2066": "addBlocks(uint256,bytes,uint256[])", +"5ddf2998": "setOwnerValidatorAddress(address)", +"5de01497": "ownerWithdrawERC20Token(address,uint256)", +"5de047d3": "existPlatform(bytes32)", +"5de0e689": "startPromotion()", +"5de270c5": "adminFixCurve(uint32)", +"5de28ae0": "getStatus(bytes32)", +"5de2a21b": "onIncreaseApproval(address,address,uint256)", +"5de3ba97": "getAllIdentifiers()", +"5de40f30": "innerContract()", +"5de4381b": "_addItemToParent(bytes32,bytes32)", +"5de4c6fc": "lock(address,bool,uint256[],uint256[])", +"5de4ccb0": "upgradeAgent()", +"5de52fb7": "TakeMyEtherTeamAddress()", +"5de6dc55": "getTokensOfOwner(address)", +"5de6f040": "unlockFundrBal(bool)", +"5de7e350": "getTokensFromAddressEmits(address,address)", +"5de81534": "getEditionsCount(uint256)", +"5de910bc": "subSegmentation(address,uint256,uint256,uint256)", +"5de924bf": "DeepCoinToken()", +"5de97c8d": "setIntervalTimeAdjust(uint8)", +"5dea186c": "accept_relayed_call(address,address,bytes,uint256,uint256)", +"5dea19f5": "getHolderExternalIdByAddress(address,address)", +"5deab0ec": "grantLoanOwnership(bytes32,address,address)", +"5deb2cec": "fundsRecord(address,uint256)", +"5debb827": "SCFToken()", +"5debc7af": "get_tokenTime()", +"5dec18d4": "motto()", +"5dec74f8": "_finishTheBattle(uint256,uint256,uint256,uint8)", +"5dec7d49": "Transaction(bytes32,bytes32,address,bytes,bytes32,bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"5ded0235": "iRide()", +"5ded1865": "getCategoryProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"5dedd9cc": "resetWinners(uint256)", +"5dee2492": "AIR_2_SUPPLY()", +"5deeab39": "freeTokensIssued()", +"5deeffb2": "getSoftcapReached()", +"5def5814": "getByDistrict(uint256)", +"5defaec6": "createVirtualAddress()", +"5defe3d9": "grantAccessDeposit(address,address)", +"5deff965": "getEtherum()", +"5df285c8": "getBonusTokens(uint256,uint256,uint256)", +"5df29b4f": "settleBetUncleMerkleProof(bytes20,bytes20,uint40)", +"5df2df2f": "multiSendTokenComplete()", +"5df34ff2": "buyMintingAddress(uint256,uint256)", +"5df350ee": "setStableCoinAddress(address,address)", +"5df3bdb9": "ABRATOKEN()", +"5df3d87e": "bet1()", +"5df58352": "calculateScoresIfCellIsBought(address,address,uint256)", +"5df5f96f": "initialize(address,uint256,uint256,uint256,uint256,address)", +"5df607f0": "getMyEntry()", +"5df60977": "updateFrozenAddress(address)", +"5df6461d": "LOTTERY_FUND_SHARE()", +"5df6a6bc": "unbond()", +"5df70904": "giveToken(address,uint256,bool)", +"5df73398": "loadMesaVerify(bytes32,bytes32[],uint8[])", +"5df75bdf": "totalTokensICO2()", +"5df8122f": "setManager(address,address)", +"5df86d29": "etherInContract()", +"5df8d74e": "bytesCallWithArray(bytes,bytes32[4])", +"5df8f17b": "createVote(uint256,address[])", +"5df93f99": "MICL()", +"5df95255": "Rating(address,address,int256)", +"5dfb94cf": "nextBurnFeeProp(uint256)", +"5dfc09a4": "getCurrencySymbol()", +"5dfc273c": "Cloudbric(address)", +"5dfc2e4a": "noop()", +"5dfc3459": "maxIncrease()", +"5dfd1bff": "MeetingTimeSetFailure()", +"5dfd3278": "VOTE_AGAINST()", +"5dfde910": "STELLARGOLD()", +"5dfed2bb": "setCompte_14(string)", +"5dfee9bb": "refundTokens(uint256)", +"5dffe6dc": "contrEntrance(address)", +"5e0055e7": "ThreeStarToken()", +"5e007742": "Propethy()", +"5e00a177": "revokeVesting(address,string)", +"5e00b9a9": "incompletePercent(uint256[3])", +"5e00bd96": "DoNotBloodyDeployThisGetTheRightOne()", +"5e00e7b2": "getNoContributors()", +"5e01b2e6": "Gobi()", +"5e01d395": "getCapAtTime(uint32)", +"5e01eb5a": "getSender()", +"5e01ed34": "associatedAddresses(uint256)", +"5e02b84d": "Voiptoken()", +"5e031606": "round2TokensRemaning()", +"5e03d0c6": "getCreationDateOfHistoricalMetadata(string,uint256)", +"5e03d393": "setAccountFrozenStatus(address,bool)", +"5e04672b": "approveSynthesizing(address,address,uint256)", +"5e047822": "fundOf(address)", +"5e047975": "recoverSigner(bytes,address,uint256,uint256,uint256)", +"5e05bd6d": "timestampFromDateTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"5e05e84d": "buyCells()", +"5e068da5": "proxyVersion()", +"5e06911e": "SpecialTrained(uint256,uint256,uint256,uint256[2])", +"5e079aa5": "giveEthFundAddress()", +"5e07c354": "vestingTokens()", +"5e07f240": "shiftBitsLeft(bytes,uint256)", +"5e0842d7": "VEToken(uint256,string,string)", +"5e08f5fa": "setCGO(address)", +"5e0a6049": "LOG_newGasLimit(uint256)", +"5e0b1259": "end_block()", +"5e0b1597": "_unpackRatingValue(uint256)", +"5e0b4cb6": "setData_2(uint256)", +"5e0b5d9b": "changeStartAndEndTime(uint256,uint256)", +"5e0be607": "unlockAllTokens()", +"5e0be75c": "setDividendPayout(uint256,uint256)", +"5e0c8c8c": "getCountSales(uint256,uint256)", +"5e0c923a": "RinneganToken()", +"5e0d0f30": "krsUsd()", +"5e0e2118": "removeSignature(string,int256)", +"5e0e2957": "dumpOut()", +"5e0fac2e": "unlockedBalance(address)", +"5e0fec6a": "knownReserved()", +"5e0ff394": "setCompetitionAdmin(address)", +"5e10177b": "confirmDelivery()", +"5e101e51": "editionController(uint256)", +"5e1045ec": "addWhiteList(address[])", +"5e11544b": "newPeriod()", +"5e11dc0b": "openDistribution()", +"5e123ce4": "gameStarted()", +"5e131fa2": "removeLocker(address,address)", +"5e1372f4": "lockup(address,uint256,uint256)", +"5e159cd4": "LogOwnerRemoved(address,address,address)", +"5e15d642": "totalNumberOfTokensForSale()", +"5e1665f3": "SmartParkApp()", +"5e172fa3": "allowtransferaddress(address)", +"5e17580a": "setTime5(address,uint256)", +"5e1758fa": "addPermission(address,bytes32)", +"5e17b694": "promisedTokens()", +"5e17d423": "getBountyRate(address,address)", +"5e191293": "emitBoardRatingGiven(address,uint256,uint8)", +"5e1936d4": "testThrowSetNotTransferableNotOwner()", +"5e199157": "setWalletOut1(address)", +"5e199892": "forwardFee(uint256,address)", +"5e19b305": "isActive(uint32)", +"5e19d316": "clearICObyAddress(address)", +"5e19deda": "preCap()", +"5e1a01c3": "createAndJoinCDPAllDai()", +"5e1a6c17": "requesters(uint256)", +"5e1bd33e": "getBuildCost(int32,int32,bytes16)", +"5e1c8f89": "scoreOf(address,address)", +"5e1ce5b0": "phasePresale_To()", +"5e1d5482": "about()", +"5e1d7ae4": "changeFeeRebate(uint256)", +"5e1d832d": "giveChamp(address,uint256)", +"5e1d8cb7": "TextChanged(string)", +"5e1d9aba": "sanCurrentTotal()", +"5e1dca04": "shareholder1()", +"5e1e1004": "setPaymentAddress(address)", +"5e1e547d": "unsign(uint256)", +"5e1e5c88": "betByte()", +"5e1eabd2": "soldPerCurrentRound()", +"5e1f3fa8": "CREATE_REPO_ROLE()", +"5e1f56d9": "changeWalletOwner(address)", +"5e1f8b59": "_totalAssetSupply(uint256)", +"5e1fc56e": "close(uint64,uint256,bytes32,bytes32,bytes)", +"5e217162": "availableSTCDRTokensOF(address)", +"5e21f687": "getMarketID()", +"5e22a2fb": "getTokenIdByHash(string)", +"5e22b760": "buyDEV()", +"5e23464e": "TOTAL_REQUEST_TOKEN_SUPPLY()", +"5e24de11": "ownerSetCrowdsaleClosed(bool)", +"5e25495e": "getProviderSupply(uint256)", +"5e25f96d": "setYccContractAddress(address)", +"5e2642c9": "isInitialSupplied()", +"5e280e4e": "validateTransaction()", +"5e280f11": "endpoint()", +"5e29c47c": "walletCreatedTimestamp(address)", +"5e2a725c": "enableEmergencyBlock()", +"5e2bd421": "enableLogic(address)", +"5e2cb4f1": "BluToken()", +"5e2d13af": "addONG_AUDIT(bytes32,string,string,bool)", +"5e2d1f0d": "withdrawAfterTime()", +"5e2d285a": "GICTLock(address,uint256,uint256,uint256)", +"5e2d3798": "ETHERberry()", +"5e2dff7a": "foundersTokensLockedPeriod()", +"5e2e555f": "RogisterToVoteOnTransfer(address)", +"5e2ea5bd": "FIRST_PHASE_MAX_SPAN()", +"5e2ea799": "currentFlowerPrice()", +"5e2fe372": "getLastOrderIndex()", +"5e3013f1": "PlayX30()", +"5e3045c8": "getImpactTotalValue(string)", +"5e30b8a6": "refund(address,address)", +"5e30c961": "premium(address,address)", +"5e31005d": "scoreThresholdParams(address)", +"5e310670": "cancelTokenToEthOrder(uint32)", +"5e311cd7": "largestDonor()", +"5e318e07": "withdrawFees(uint256)", +"5e326b92": "setPreSaleStatus(bool)", +"5e331e62": "iterate_get(uint256)", +"5e33f94d": "ApolloSeptemCappedCrowdsale()", +"5e35359e": "withdrawTokens(address,address,uint256)", +"5e355dcc": "PJRToken()", +"5e3568b8": "session()", +"5e377b51": "Jackpot()", +"5e383d21": "values(uint256)", +"5e38ab4c": "BabyCoin(uint256,string,string)", +"5e38c77d": "getProductHistoryDate(bytes32)", +"5e393973": "get_contrib_arbits_max()", +"5e3b456c": "creatTokens()", +"5e3ba8ac": "usersGetter()", +"5e3bb4cc": "minimalSuccessTokens()", +"5e3bcaf7": "Fee(address[],string,uint8,string)", +"5e3cb7b0": "setTotalUsdAmount(uint256)", +"5e3cbb7c": "dayWithdraw()", +"5e3ced74": "callSurplus()", +"5e3d3b8a": "isPREICO()", +"5e3dbedb": "getTokenDescriptions(address,uint256[])", +"5e3df83f": "setFundingtokens(uint256)", +"5e3e2687": "transferFromParent(address,uint256,address,uint256,bytes)", +"5e3e37d1": "XfiniteAsset()", +"5e3e6092": "newService()", +"5e3e9158": "createWine(string,string,string,string,string,string,bytes32)", +"5e3fa843": "registerContract(string,bytes)", +"5e3fcbd1": "mintNewTokens(address,uint256)", +"5e402ae2": "getCurrentTokensPerEther()", +"5e402bb5": "setInfoTokenSilverRatio(string)", +"5e403a9c": "phase7Price()", +"5e404de3": "setMaximumCredit(uint256)", +"5e4293ba": "i_am_generous()", +"5e431709": "sealedBids(address,bytes32)", +"5e431a6f": "phasePublicSale1_To()", +"5e439f66": "changeAge(uint256)", +"5e43f719": "enablePublicTransfers()", +"5e44423c": "ChangePreSaleDates(uint256,uint256)", +"5e44daf3": "vote(uint256,int256)", +"5e44e0a4": "modifyHorseyTier(uint256,uint8)", +"5e46f419": "leed()", +"5e475bb6": "createKT(string)", +"5e48379a": "changePriceContract(address)", +"5e488540": "claimRefund(address,bytes32)", +"5e4887bd": "initializeTime()", +"5e48ce0f": "dequeue(bytes32)", +"5e48f58f": "PRESALE_PERCENTAGE_2()", +"5e49db8c": "getUsersFuelsIds()", +"5e49fbfc": "WOS()", +"5e4a1d36": "getSavingsBalance(address)", +"5e4a627d": "RN()", +"5e4a8a20": "setAppCode(bytes32,address)", +"5e4b587b": "_BLOCK_REWARD()", +"5e4b5f7d": "setColdAddress(address)", +"5e4ba17c": "remove(address[])", +"5e4e7cbc": "record(string,string,string,address,bool)", +"5e4f63ec": "extendLockPeriods(uint256,bool)", +"5e5098c2": "setmangerallow(address,uint256)", +"5e50f037": "reward(address,address,uint256,uint256,uint256)", +"5e511afa": "sendTokensBackToWallet()", +"5e5144eb": "change(address,address,uint256,uint256)", +"5e520c29": "tokensPerWei10()", +"5e5294b7": "endingTimestamp()", +"5e52a00b": "getReferrer()", +"5e53e2f9": "EXACOIN(uint256,string,string)", +"5e556a4a": "faucetTo(address,uint256)", +"5e5571ac": "pay(address,uint256,bytes32)", +"5e5650ef": "admin_set_Apply_Store_Id_Fee(address,address)", +"5e571440": "presalesTokenPriceInWei()", +"5e57966d": "addressToString(address)", +"5e58217d": "hardCapIco()", +"5e58331c": "SAGA()", +"5e585889": "claimDeposit(bytes32)", +"5e58f141": "shares(address,bytes,int256)", +"5e593cd3": "Funding_Setting_cashback_duration()", +"5e5a77e6": "getQuestionAnswer(uint256,uint256)", +"5e5a7eb0": "createCase(uint256,address,address,uint256)", +"5e5ae1fe": "invalidateAllPendingMints()", +"5e5b1e61": "closeTokensale()", +"5e5ca8d4": "BuyerSeller()", +"5e5d2adb": "HUBUToken()", +"5e5d4320": "deleteUser(bytes32)", +"5e5d73b5": "CloseSaleFund()", +"5e5d926c": "makeDai(uint256,address,address)", +"5e5de297": "getUidAsInteger(address,address)", +"5e5e305e": "bbAirdropWallet()", +"5e5e4cc5": "ownerToArmy(address)", +"5e5f2e26": "allowedTokens(uint256)", +"5e5f2e37": "startedNewVote(address,uint256,string,uint256)", +"5e5ff24b": "addUsersToGroup(bytes32,address[])", +"5e601fed": "changePaymentAddress(address,uint256)", +"5e604b60": "addWhiteListedContracts(address)", +"5e6096c5": "setMinimumTokenSell(uint256)", +"5e60d438": "LicerioToken()", +"5e615a6b": "getParams()", +"5e62463a": "TransferLimitedToken(uint256,address,address[],address)", +"5e62af4d": "grandJackpot(uint256,uint256)", +"5e645680": "getRegulatoryAuthorities(address)", +"5e64f392": "_completeTask(uint256)", +"5e6558e5": "addAtkPlayerQuest(address)", +"5e65db7f": "deleteThis(uint256)", +"5e66dfee": "regularPayment()", +"5e66eb1b": "phaseClaim()", +"5e675098": "addFoundation(address,uint256,uint256,uint256)", +"5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"5e68d459": "_getRNGValue(uint256)", +"5e6911af": "hardcapReached()", +"5e6936ac": "HitToken(uint256,string,uint8,string)", +"5e6992e3": "rcnFundDeposit()", +"5e6a7777": "setCompte_39(string)", +"5e6ad49d": "_setCosignerAddress(address)", +"5e6b4ee5": "increaseRate(uint256,address)", +"5e6b7a5c": "getUnitsDefense(address,uint256,uint256)", +"5e6c5d77": "number_of_deals()", +"5e6cbd6d": "_getRandom(uint256,address)", +"5e6db193": "Bithenet()", +"5e6e91ac": "Mint(uint256,address,string)", +"5e6eb33a": "CampaignClosed(uint256)", +"5e6f6045": "vestingContract()", +"5e6fa5ea": "inclusionEnExchange()", +"5e6fc129": "isRecord(string)", +"5e6fc8b4": "getChildrenCount()", +"5e7037d0": "removeSpriteFromSale(uint256)", +"5e7051cd": "setQuickPromoInterval(uint128)", +"5e70a6dc": "increaseLock(uint256,uint256)", +"5e715c16": "ICO_CONTRACT()", +"5e717e2d": "readDeal(string,address)", +"5e71823b": "numPositions()", +"5e71c7fa": "testCheckRokSold()", +"5e733baa": "openEgg(uint64,uint16)", +"5e734f5c": "revealBid(bytes32,uint256,address,bytes32,bytes32,uint256,uint256)", +"5e73dd37": "tokenCapPhaseOne()", +"5e7591e2": "register(bytes32,address,address,bytes32,bytes32)", +"5e763377": "ModifyMarking(bytes32,uint256,uint256)", +"5e763946": "setTaxationPeriod(uint256)", +"5e76a101": "onlyOwnerSetTeamWallet(address)", +"5e77eec0": "setAdminsAddress(uint256,address)", +"5e7893e2": "showprize()", +"5e78998e": "BatLimitAsk()", +"5e79f1cb": "approvedByAdmin(address,uint256)", +"5e7aa842": "createEvent(bytes32,bytes32[],address,uint256)", +"5e7b9832": "updateItem(uint256,uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"5e7be40d": "getBeneficiaries(address,address)", +"5e7c85b1": "totalContrib(address)", +"5e7cafa4": "startPayments(uint256,uint256)", +"5e7d6fd0": "airdropHasExpired(address,uint256)", +"5e7f092c": "_createNFTCollectible(uint8,uint256,address,uint256,uint256[5])", +"5e7f22c2": "postBuyOrder(address,address,uint256,uint256)", +"5e7f322b": "exchangeEthToEur(uint256)", +"5e8023d1": "cascades(uint256)", +"5e80377b": "buySaleReferred(uint8,address)", +"5e815320": "forward_pass2(uint256[],int256[],int256[],int256[],int256[],int256[])", +"5e816740": "rollDice(uint256,address)", +"5e81b958": "isNonFungibleItem(uint256)", +"5e81ba96": "DestroyedBy(uint256,address)", +"5e8254ea": "commitVoteOnProposal(bytes32,uint8,bytes32)", +"5e825564": "setFactory(address,address)", +"5e83b463": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32)", +"5e84d723": "publicSupply()", +"5e850225": "closePeriod(uint256,uint256,uint256)", +"5e8507f8": "destTokensAngel()", +"5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"5e85db0a": "getMinSkills(uint256)", +"5e8714d5": "changeSaleAgent(address)", +"5e871f0c": "dividendDistributionDuration()", +"5e885c63": "getPack(uint8,uint128)", +"5e89d92a": "Credentials(bytes32,bool)", +"5e8a6044": "foundersFundTimelock3Address()", +"5e8a79e1": "setRef()", +"5e8a8b00": "setDocHash(string,bytes32)", +"5e8aedce": "SubajToken()", +"5e8af735": "placeBet(uint256,string)", +"5e8be190": "getCar(uint256)", +"5e8c63bb": "vehicle_assembled(uint256)", +"5e8e9589": "_createPenguin(string,uint256,uint256)", +"5e8f5022": "issueTokensWithReferral(address,uint256)", +"5e8f6597": "distributeInvestorsTokens(address,uint256)", +"5e90852d": "proposeTransaction(address,uint256,bytes)", +"5e90a9ff": "_getLotteryNum(uint256,uint256)", +"5e916b46": "rinkeby2()", +"5e91ba21": "checkSecret(address,string,bytes32)", +"5e91c37d": "tokensSoldInPresale()", +"5e91c5ed": "specialTransfer(address,uint256)", +"5e91d8ec": "updateEmployee(address,uint256)", +"5e943a30": "calculateReferralBonus(uint256)", +"5e949fa0": "changeDestination(address)", +"5e956abf": "createMeshPoint(string)", +"5e959287": "getSignature(string)", +"5e95ff98": "updateFreeze(address)", +"5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", +"5e97894a": "TNPC()", +"5e983156": "getJudgeVoted(uint256,address)", +"5e983d08": "setPrices()", +"5e986ec7": "PoezenVoting(uint256,uint256)", +"5e987d32": "last_slot()", +"5e98e4c7": "abstain()", +"5e9a1849": "numDonations()", +"5e9a31fb": "MINBET_perSPIN()", +"5e9a523c": "assetPrices(address)", +"5e9a8c42": "get_deal_state(uint256)", +"5e9afc0e": "ERC223TestToken(string,string,uint8,uint256,address)", +"5e9bcab0": "getReferrerRates(address)", +"5e9d2b1f": "roundSize()", +"5e9d2e7b": "exchangesWallet()", +"5e9dbcb7": "_tag(string,string)", +"5e9e2226": "setOraclizeWinnerGasFee(uint256)", +"5e9f9613": "availableReserve()", +"5ea050ec": "InitiateCompanies()", +"5ea102b0": "Base()", +"5ea187c9": "BuildByteArray(bytes)", +"5ea194a3": "createScalarEvent(address,address,int256,int256)", +"5ea1bb17": "winInternal(address,bytes32)", +"5ea1d6f8": "commissionRate()", +"5ea1fc6a": "NAME_SATOSHI()", +"5ea27e40": "PRESALE_END_TIME()", +"5ea36bd6": "MultiHolderVault(address,uint256)", +"5ea39624": "ATTR_SEEDED()", +"5ea3ad0a": "doWithdrawal(uint256)", +"5ea40983": "addMember(address,uint256,bool,string)", +"5ea4cf50": "AMPTToken()", +"5ea56918": "BIAToken()", +"5ea63913": "getInvestorBalance(address)", +"5ea6474d": "getPVPBattleResult(uint256,uint256,uint256)", +"5ea67956": "CrowdtesICO()", +"5ea81231": "ownerAddRole(address,string)", +"5ea81e07": "editAccountData(address,string,bytes)", +"5ea82efb": "MariaToken()", +"5ea8cd12": "setMinPrice(uint256)", +"5ea8cf00": "PardiICO()", +"5ea94bcf": "updateUserTrustRankForMultipleChannels(address,bytes12[],int256[])", +"5ea95215": "SpaceXToken()", +"5ea98520": "changeNewExchange(address)", +"5ea9caff": "FrozenFund(address,bool)", +"5eaa6ca4": "_cancelMarkets(uint256)", +"5eaaa699": "SALES_SUPPLY()", +"5eaad235": "getDataByDeviceId(uint8,uint8)", +"5eab15e4": "devuelveApps(bytes32)", +"5eabc684": "updateIssuanceData(address,uint256,uint256)", +"5eabe01e": "saleSuccessful()", +"5eac1414": "UNIQ(uint256,string,string)", +"5eac6239": "claimRewards(uint256[])", +"5eac85d5": "burnGasAndFreeFrom(address,uint256,address,address[],bytes)", +"5ead330c": "getDungeonFloorDetails(uint256)", +"5ead8846": "updateFundsOwner(bytes32,bytes32)", +"5eadd607": "debugResetSubmissions()", +"5eae177c": "isTransferAllowed(address,uint256)", +"5eaefac1": "reservePricing()", +"5eaefb31": "CARD_TAKE_SHARE()", +"5eafe515": "newDeveloper(address,string)", +"5eb08d8a": "setBurnRate(uint8)", +"5eb101c3": "capped()", +"5eb17cdb": "setBeginTime(uint256)", +"5eb19ad1": "recalcAmountWithFees(uint256,bool)", +"5eb19eda": "InitiatePlanets()", +"5eb1f936": "JBToken()", +"5eb28fb2": "Robot()", +"5eb332da": "updateAward(uint256)", +"5eb38bef": "setcommissionPer(uint256)", +"5eb3f639": "assertTrue(bool,bytes)", +"5eb456c1": "goldIssueBurnFee()", +"5eb51d3c": "setTrancheMinTx(uint256)", +"5eb53bfa": "test_standardCampaignConstructionValuesFailsDueToNoParameterValidation()", +"5eb604bc": "GongChuangToken()", +"5eb61aa9": "executeSignedCall(address,uint256,uint256,bytes,bytes)", +"5eb62178": "getMinAmount(address)", +"5eb62d75": "sendPrivateSaleTokens(address,uint256)", +"5eb6a78f": "gamesCounter()", +"5eb7413a": "lockedTokens(address)", +"5eb7556f": "currentRoundIsActive()", +"5eb9bbf7": "founderTokenUnlockPhase4()", +"5eba2472": "Migrations3()", +"5ebad2ab": "GrowthPool_Supply()", +"5ebaf1db": "staker()", +"5ebb7077": "mkDomain(bytes32,address)", +"5ebc1db8": "positionScount1(address,address)", +"5ebc7826": "CasCoin()", +"5ebca187": "testFailTransferWhenStopped()", +"5ebcaf7e": "sendBuyAgent(int256,int256,int256,int256)", +"5ebcc621": "endFundraising()", +"5ebcfe50": "taxTransfer(address,address,uint256)", +"5ebd2196": "getMyBalanceDNT()", +"5ebd9a83": "add(bytes32,address,address)", +"5ebdd159": "tokenAvailable()", +"5ebe4746": "CCPLUS(uint256,string,string)", +"5ebe7c72": "reply(string)", +"5ebfed78": "buyRegion(uint256,uint256,uint256,string)", +"5ec01e4d": "random()", +"5ec0c707": "winnerFromGas(uint256)", +"5ec112a2": "setPreSaleOpened(bool)", +"5ec1b499": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"5ec1fc19": "convertMint(address,uint256)", +"5ec211a1": "accountOfN(address)", +"5ec2c7bf": "auctioneer()", +"5ec2dc8d": "depositReward()", +"5ec30be2": "assignListingDB(address)", +"5ec38bec": "updateFundWallet(address)", +"5ec3f160": "secondsInDay()", +"5ec4eb95": "GoldWhitelist(address,bool)", +"5ec5bc8e": "pushOrderOfOwner(address,uint256,bool)", +"5ec5bed6": "coupon(uint256,uint8,uint8,bytes32,bytes32)", +"5ec70cd2": "_getProviderPriv(uint256)", +"5ec72a90": "maxCumAcceptedDeposits()", +"5ec81130": "calcBonusRate()", +"5ec88c79": "getAccountLiquidity(address)", +"5ec93cb2": "withdrawal_gas()", +"5ec94770": "RhinexFundCoin()", +"5eca2aeb": "getBytesArrayIndex(bytes32,uint256)", +"5ecb16cd": "withdrawTokens(address[])", +"5ecb6594": "isCoreContract()", +"5ecb7d20": "testGetCaseCount()", +"5ecc33ac": "testPrivacy()", +"5ecc7975": "YUPVesting(address,uint256,uint256,uint256)", +"5ecd62b9": "divCut()", +"5ecef65f": "setTactics(uint256,uint8,uint8)", +"5ecf36f7": "Print(string,uint256)", +"5ecf71c5": "decreasePower(uint256)", +"5ecfdcfc": "KnownTokens(address,address,address)", +"5ecff851": "p_setDevAddress(address)", +"5ed0f3fd": "changeVariables(address[],uint256[],address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"5ed16294": "nacBalance()", +"5ed188c9": "MNTToken(address)", +"5ed18d95": "CollatLending()", +"5ed31991": "lastLockingTime()", +"5ed411e5": "setNewToken(address)", +"5ed4382f": "fourthStageMinting()", +"5ed49e9b": "ADVISERS_AND_FRIENDS_WALLET()", +"5ed4d7ae": "_getTokenAmount()", +"5ed50033": "myetherpay(uint256,string,string)", +"5ed5684c": "HCHToken(uint256,string,string)", +"5ed570f3": "toggleCanCreateGames()", +"5ed5ea28": "whiteListContract()", +"5ed65228": "sponsoredJackpotMin()", +"5ed66172": "getCertificateForWallet(address,address,address)", +"5ed66998": "usingOwnership()", +"5ed6a8e7": "setData_13(string)", +"5ed73bc7": "distribute(address,uint256,address[],uint256[],uint256)", +"5ed75366": "DEVELOPER_FEE_FRAC_TOP()", +"5ed7ca5b": "halt()", +"5ed81ebe": "getInspireTokens(address,address,uint256)", +"5ed84aa6": "getNymCenterAPIURL()", +"5ed85753": "ergoam(uint256,string,string)", +"5ed9ebfc": "soldTokens()", +"5eda17bc": "_tuneLambo(uint256,uint256)", +"5eda232d": "getTokenStakeByIndex(uint256)", +"5eda5b9a": "interestCollected()", +"5edabc99": "getPresaleEndTime()", +"5edb2fb3": "uint256ToBytes32(uint256)", +"5edc1ac8": "discountDecimal()", +"5edc9bff": "upgradeUnitMultipliers(address,uint256,uint256,uint256)", +"5edca2b4": "unsuccessfulWithdrawal()", +"5edd4436": "newOffer(bytes32,string)", +"5eddd157": "claim(uint256,uint256,bytes)", +"5edf34d4": "Transfer(address,address,address,address)", +"5edf413e": "burn(bytes32,address,uint256,bytes)", +"5edf8d3c": "SetAdOwner(uint256,address,address)", +"5edfa1f8": "calculateFees()", +"5edfd788": "completedGames()", +"5ee0f535": "_mint(address,bytes32,string,uint256)", +"5ee10f3b": "instruct_2()", +"5ee2a018": "deployMultiToken()", +"5ee2cec2": "issuerDateMinutes()", +"5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", +"5ee4e3f8": "LocklistAddressisListed(address)", +"5ee58efc": "distribution()", +"5ee5a409": "transfer_token1_toContract(address,address,uint256)", +"5ee5e9ee": "SaleStarted(uint256,uint256,uint256)", +"5ee679f9": "removePolicyFrom(address)", +"5ee6cc38": "buyToken(address,address)", +"5ee7144c": "_removeTopic(string)", +"5ee759e8": "encodeCurrency(string)", +"5ee760a5": "hashHardCap(uint256,uint256)", +"5ee7b392": "sendToken_internal(address,uint256)", +"5ee7cd23": "isBCFBuyMarket()", +"5ee7e96d": "grant(address,uint256,uint256,uint256,uint256,bool)", +"5ee857d1": "test_insert_findWithHintPrevUpdateTail(int256)", +"5eeb9ff9": "get_transferLock()", +"5eebc031": "newReadAddr()", +"5eebea20": "pending(address)", +"5eec743b": "minContributionMainSale()", +"5eec9df0": "softCapWei()", +"5eecbad8": "getFunderByIndex(bytes32,string,uint256)", +"5eecdec0": "unLockup()", +"5eed1f1a": "setTotalIndividualWeiAmount(address,uint256)", +"5eed3dcb": "donorList(uint256)", +"5eed886b": "minimumPerTransaction()", +"5eedbceb": "emitTransferFeeUpdated(uint256)", +"5eee006a": "secondStageStartsAt()", +"5eee7078": "sendETH(uint256)", +"5eeeee22": "setMaxWin(uint8)", +"5ef013d0": "Ico()", +"5ef17eff": "getSettingValuesById(uint256)", +"5ef1bfdb": "landPriceWei()", +"5ef27d1a": "hasRazCompleted(uint256)", +"5ef2a3f4": "giveAwayInProgress()", +"5ef2c79a": "getMyNmBet(uint256,uint256)", +"5ef3f3d1": "voteRelease()", +"5ef3f9e1": "BETS_CLOSING_TIME()", +"5ef4d2af": "_calculateTokenAmount(uint256)", +"5ef4ed42": "setBattleTokenAddress(address,address)", +"5ef505c0": "discoveryBlocksUntilAllowed(uint256)", +"5ef572ad": "stageMgmtSystem()", +"5ef5cdb2": "doFailedOffer(uint256)", +"5ef6228c": "bytesToAddr(bytes)", +"5ef652ad": "EtherFarmDevSim()", +"5ef6543c": "YDMediaToken()", +"5ef680df": "flushTokens(address,address)", +"5ef6ad57": "Delivery()", +"5ef74958": "Epam()", +"5ef78561": "cashWallet(address)", +"5ef79434": "DATE_PRESALE_END()", +"5ef7ac4d": "startRedeem(uint256,bool)", +"5ef7b303": "getPI_edit_14()", +"5ef80c87": "create20ContractToy()", +"5ef82429": "tixPromo()", +"5ef8ce5d": "setPollType(uint256,address)", +"5ef8da77": "Altruism()", +"5ef97145": "BokkyPooBahsAutonomousRefundathonFacility()", +"5ef9dde8": "removeApprovedGame(address)", +"5eface14": "numStakersForPoll(bytes32)", +"5efb4dc5": "deathData_a7()", +"5efb8266": "setGoldContractAddress(address)", +"5efbb728": "transferold(address,uint256)", +"5efbcfba": "minWeiToBuy()", +"5efbdc47": "setLastBidId(bytes32)", +"5efc156f": "Roles2LibraryAdapter(address)", +"5efd1682": "transferPreSigned(address,address,uint256,uint256,uint256,bytes,bytes32,bytes32,uint8)", +"5efd3c41": "whiteListEndBlock()", +"5efdb1e4": "percentToTakeAsSeed()", +"5efe2fcf": "releasedLockedAmount()", +"5eff7d8f": "getAccountLiquidityInternal(address)", +"5eff7dae": "getInstructors()", +"5eff8b48": "Prakashcoin()", +"5effd20d": "withdrawForAddress(address,uint256)", +"5f01b42f": "alloweRefund()", +"5f02116f": "claimRewards(uint256[],uint256[])", +"5f024e91": "testCheckEthBalance()", +"5f0379f5": "firstPriceChange()", +"5f038b6d": "refillFunds()", +"5f05b3e4": "HappyToken(uint256,string,uint8,string)", +"5f05b9df": "removeTWhitelist(address)", +"5f065346": "pay(address,uint256,uint256)", +"5f06541d": "resetOwner()", +"5f065b4a": "checkItem(bytes32)", +"5f06900b": "changeBattleFee(uint256)", +"5f073f49": "gatherDetails(uint64[])", +"5f07a3e5": "addAllNewTicket(uint256,bytes32[],uint256[],uint256[],uint256[])", +"5f07bd15": "take_fees_eth_owner()", +"5f09952e": "voteAllowTransactions(bool)", +"5f0b37e4": "VeritokenToken()", +"5f0d5296": "reserveAllowance()", +"5f0d995b": "developer_string_contract_verified(string,string)", +"5f0da25b": "sendDeposit(uint256,address,uint256,bytes32)", +"5f0da5c9": "create(string,address,address,address,address,bool)", +"5f0e3855": "ownerRefundUser(bytes32,address,uint256,uint256)", +"5f0edfb8": "create(bytes,bytes32,bytes1)", +"5f0f1f85": "transferProposalEnd()", +"5f0f7786": "IssuedToken(address[],uint256[],uint256,uint256,address,string,uint8,string)", +"5f0fc2e8": "RealMoneyToken()", +"5f104c5f": "SalesAgentPermissionsTransferred(address,address)", +"5f111074": "picopsCertifier()", +"5f112c68": "renounceMinter(address)", +"5f11301b": "setServiceURI(string)", +"5f1231ea": "getMemberInfo(address)", +"5f141a0f": "confirmWrite(bytes32,address)", +"5f14af16": "Subscribe(address,address,uint256,uint256,uint256)", +"5f14e108": "openTokensale(address)", +"5f159e60": "TimeBoundaryChanged(string,uint256)", +"5f167276": "getNumElements()", +"5f17114e": "TimeDeposit()", +"5f1768c1": "buyerHistory()", +"5f1845f6": "transferDecimalAmountFrom(address,address,uint256)", +"5f184eda": "withdrawFactoryResourceBalance(uint16)", +"5f185329": "submitOrder(bytes)", +"5f1877a8": "productPrice(string)", +"5f18aa0c": "decimals(bytes32)", +"5f196876": "allPromotions(uint256)", +"5f19c7b2": "doSetSettings(uint256)", +"5f1a6f4b": "BARL()", +"5f1b3ee6": "getAPAddressSize()", +"5f1b46ab": "inflateToken(address,uint256)", +"5f1ca2fc": "ReferralRegistered(address,address)", +"5f1d146e": "eeeeeeeeeeeee()", +"5f1d7037": "KEDToken()", +"5f1d804f": "checkTxProof(bytes32,bytes,uint256[],bytes,bytes)", +"5f1d90ae": "getCurrentOpinion()", +"5f1e1c28": "__transfer(address,address,uint256,bytes)", +"5f1e580d": "ETUToken()", +"5f1e8c1b": "MAX_MODULES()", +"5f1f6c5e": "delFromList(uint256,address[])", +"5f1fc571": "set_prices(uint256,uint256,uint256)", +"5f1ff549": "issued()", +"5f222da1": "latestMomentOf(uint256,address)", +"5f227bfc": "totalPlayerTokenContracts()", +"5f22c42f": "getBuyerReceipt(address)", +"5f238402": "lastAllowancePaymentTimestamp()", +"5f241c8e": "AnythingToken(uint256)", +"5f24f6fe": "setUpgradedAddress(address)", +"5f2536f7": "calculateMaxContribution(address)", +"5f27e47d": "GetWinnerAt(uint256)", +"5f27f6e3": "getPlayerGeneralAll(uint32)", +"5f27f946": "handleTokens(address,address,uint256)", +"5f28213b": "SCTC(uint256,string,string)", +"5f28b383": "minPerUser()", +"5f28cb74": "getSubscription(bytes32,address)", +"5f2961e1": "walletFounder1()", +"5f2a9f41": "MAX_GAS()", +"5f2aeae9": "executeCreator(uint256)", +"5f2af8d9": "Logocoin()", +"5f2b9ac0": "startPhase3()", +"5f2bb66e": "BatchTransfer(address)", +"5f2befb9": "hasTerminated()", +"5f2bf49a": "BitcoinRateUpdated(uint256,uint256)", +"5f2da7ec": "todayDays()", +"5f2e0c20": "giveConsent(uint8,bytes32,bytes32)", +"5f2e2b45": "freeFrom(address,uint256)", +"5f2e4b31": "testDisputedInvalidSequenceWrongWriteAddress()", +"5f2e686d": "Ethereum_eight_bagger()", +"5f2e8493": "addmoney(address,uint256)", +"5f2ebcf2": "GMRToken()", +"5f2ef12d": "tokenFactory(uint256)", +"5f2f83ba": "getMul(uint256)", +"5f2fb08e": "removeElement(address)", +"5f3040bf": "getMIRABALANCE()", +"5f304615": "earlyAllocation()", +"5f309123": "sale2(address,uint256)", +"5f30ed2a": "withdrawAmountFromToken(uint256,uint256)", +"5f31ea82": "holdTokenInvestors(uint256)", +"5f32714d": "ChannelSettled(address,address,uint32,uint192,uint192)", +"5f3292d7": "DMCTCoin()", +"5f330669": "dateMove(uint256)", +"5f33afdb": "preallocCoins()", +"5f33c5e1": "Payout(bytes32,address,address)", +"5f34165d": "isRightBranch()", +"5f3616eb": "getNextOnce(address,uint256,uint256,uint256)", +"5f3619b1": "getProfitFromSender()", +"5f373c22": "setHydroContractAddress(address)", +"5f37b43f": "_getType(uint256,uint256)", +"5f3893ef": "getReward(address,uint256,address)", +"5f399d28": "TokenIceBox(address)", +"5f39fd73": "approveUpdate(uint256,address,bool)", +"5f3aa2bb": "checkIfRewarded(bytes,uint256,bytes,bytes)", +"5f3bc04c": "addressFundInvestment()", +"5f3c15ed": "radtokenSupply()", +"5f3c23be": "isProposalNotExpired(bytes32,uint256)", +"5f3c6686": "challengeBook(address,address)", +"5f3c91ad": "accrueEther()", +"5f3ca167": "crowdSaleInitialized()", +"5f3cebcd": "incrementalInverse(uint256,uint256)", +"5f3d634f": "freezeMulti(address[],uint256[],uint256[],uint256[])", +"5f3d7fa1": "maxAttendees()", +"5f3e3db0": "increaseWeeklyTransactionVolumeSending(uint256)", +"5f3f703c": "gifter()", +"5f403edc": "addThenSub(uint256,uint256,uint256)", +"5f40fc27": "withdrawGoldMoney()", +"5f412d4f": "releaseTokenTransfer()", +"5f412ff1": "ownerEnablePayee(address,address)", +"5f41ccef": "multMint(address[],uint256[])", +"5f421776": "switchONfreeForAll()", +"5f429ba5": "Risk()", +"5f437e48": "settingsState()", +"5f43e49c": "isDataYes(bytes)", +"5f4402c5": "distributeTokenToAddressesAndAmounts(address,address,address[],uint256[])", +"5f45161f": "payToInviter(uint256)", +"5f45221d": "retrieveIncompleteProof(bytes32)", +"5f452df1": "approveCrowdsale(address)", +"5f456c1f": "assignedAmountToEcoReward()", +"5f45c179": "ABYSS(address,address[],address)", +"5f46d750": "amountOfDividendsPayouts()", +"5f4784a5": "allOf(address)", +"5f478f74": "Milestone(string,uint8)", +"5f47ba42": "Plendito()", +"5f4821ab": "ContractFactory()", +"5f4874e4": "multiTransfer(address[],address[],uint256[],string)", +"5f48f393": "maxAmount()", +"5f493f63": "convertToMini(uint256)", +"5f495491": "claimsCreated()", +"5f4964e0": "setMarketComissionRatio(uint256)", +"5f497a09": "adminCharge_p1()", +"5f49c5ac": "_addRecoverer(address)", +"5f49d562": "QSTPerEth()", +"5f4a47c3": "updateUpdater(address,string)", +"5f4b125b": "get_pre_kyc_bonus_numerator()", +"5f4b2873": "getDepositedValue(address)", +"5f4b9b4f": "getPolicyCount(address)", +"5f4c71f1": "getTotalETH()", +"5f4dd2d8": "mintPreico(address,uint256)", +"5f4eab65": "hasEditionInProgress(uint256)", +"5f4ed0b1": "rebalanceBucketsInternal()", +"5f4f35d5": "setFullName(string)", +"5f504a82": "ownerCandidate()", +"5f5082dd": "setLast(uint256,address)", +"5f51028d": "checkIsReleaseRecordExist(uint256)", +"5f515226": "checkBalance(address)", +"5f516131": "ReserveUnknown(bool,uint32,uint256,uint256)", +"5f51d526": "balanceMapPos(address)", +"5f51db02": "Memes()", +"5f52583b": "processStorageRoot(address,uint256,bytes,bytes)", +"5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", +"5f538fd4": "openMigrationPhase()", +"5f539d69": "addContract(address)", +"5f53e077": "setPausedTransfers(bool)", +"5f5404af": "PriceProvider(string)", +"5f542c94": "emitAreaEvaluated(address,address,uint8,uint256)", +"5f54a1c7": "requestEndCall()", +"5f54ae17": "buy50Price()", +"5f54fa98": "conventionId()", +"5f561763": "rolloverPosition(address,uint256,uint256,address)", +"5f56315b": "enableSell()", +"5f56b6fe": "safeWithdrawal(uint256)", +"5f56e134": "averageArtworkSalePrice()", +"5f5810ea": "UBIT2018069()", +"5f5868db": "freezedValue()", +"5f589599": "resultsPublished()", +"5f58ed2a": "disableBot(address,uint64)", +"5f596681": "setShpExchangeRate(uint256)", +"5f598510": "KVMToken()", +"5f59940c": "addressToSpentEther(address)", +"5f5a98ee": "dragonGirlLotteryPrice()", +"5f5bb161": "set(bytes20,uint256)", +"5f5d867b": "CryptoPoosToken()", +"5f5db5dc": "setVariables(string,address,uint256,int256,bool,bytes32,address[2],uint256[2],int256)", +"5f5df710": "updateCertifier(address)", +"5f5e38b6": "setBuyPrice(uint16,uint16,uint8,address,uint256)", +"5f5f23a0": "charityFactor()", +"5f5f2aef": "amendRetention(uint8,uint8)", +"5f5f62f9": "setControler(address)", +"5f5fa782": "getCurrencyByte(uint256,uint256)", +"5f5fca9a": "setEnforceAddressMatch(bool)", +"5f6076bf": "Access()", +"5f60a5d4": "CompleteWildcard(uint256,address)", +"5f60ef47": "get_heaps(uint256)", +"5f60f485": "updateStatus()", +"5f61a26e": "PRESALE_ETHER_MIN_CONTRIB()", +"5f61bf99": "claimG()", +"5f623e15": "divisible_units()", +"5f645f16": "setInputFile(uint256,bytes32)", +"5f647d5a": "ethSignedMessagePrefix()", +"5f64b55b": "tokenB()", +"5f65545d": "Raffle_Prize()", +"5f65d621": "setSkill(uint256,uint256,uint256,bytes32)", +"5f65d703": "setInfo(bytes32,uint256)", +"5f65faf1": "isProduct(bytes32)", +"5f677404": "INITIAL_VALUE()", +"5f68688f": "endFirstBonus()", +"5f68804e": "SimpleLotto()", +"5f689fed": "startPVE(uint256)", +"5f6a1301": "clearPending()", +"5f6a4546": "ROLE_REVIEWER()", +"5f6acfe9": "_updateRate(uint256,uint256)", +"5f6d0ded": "ReservationFund(address)", +"5f6dd297": "getProjectEndDate(bytes32)", +"5f6e388a": "ProofOfCloneWars()", +"5f6ea340": "revokeAccess(address,address)", +"5f6ecea0": "vestedTransfer(address,uint256,uint256)", +"5f6edff8": "assureDAppIsReady()", +"5f6f8b5f": "setExclude(address)", +"5f7033e5": "getCurrentStartTime()", +"5f704f3e": "updatePrice(bytes32,uint256)", +"5f70d9ac": "getBot(uint256)", +"5f7118c7": "setRevealOpen(uint256)", +"5f71249c": "changeOrganisationName(string)", +"5f722859": "updateHashValue(bytes32,bytes32)", +"5f723b50": "getInitialReportMinValue()", +"5f72a508": "playerPopMining(uint256,bool)", +"5f72f450": "check(uint256)", +"5f73d6c0": "promisedTokenBalance()", +"5f746233": "dispense(address)", +"5f74a5ec": "pecunioWallet()", +"5f74bbde": "vote(address,uint256)", +"5f74c16c": "getPrizePot()", +"5f75b5ef": "whitelistAddress(address,address)", +"5f75cb6b": "getCountTransferInsToken(address,address)", +"5f75d62d": "addCard(uint256,string,bool)", +"5f7619a4": "takeFee(uint256)", +"5f766118": "salutaAndonio()", +"5f76e49a": "addPerson(bytes32,bytes32,bytes32,bytes32,uint256,bytes32,address)", +"5f770d47": "HyperSale()", +"5f77ace0": "stop_token_time()", +"5f7807a4": "transferToUser(address,uint256)", +"5f788531": "buy5Price()", +"5f791c7c": "ZRSToken()", +"5f7a7bb5": "returnRegDate(address)", +"5f7b68be": "addKey(address)", +"5f7b73b2": "getInvestorCredit()", +"5f7b764f": "_getLuckySpaceshipMoney(uint256,uint256)", +"5f7bb7f1": "setMaxProfit(uint128)", +"5f7c944f": "mintAccount(uint256,uint256,uint16,bytes32,uint256)", +"5f7cbc39": "addressOfTokenUsedAsReward2()", +"5f7cfe49": "internalSalt(bytes32)", +"5f7d897e": "checkVendor()", +"5f7dfd3f": "totalPaidToFunders(bytes32)", +"5f7e61fa": "SendTo(address)", +"5f7e7138": "setDth(address)", +"5f7ee166": "setupOpenDistribution(uint256,uint256,address,address)", +"5f7eed5d": "LeajoeToken()", +"5f7f9482": "statusQuery()", +"5f800348": "balancesImporter1()", +"5f802448": "specialAttacks(uint256)", +"5f8162bb": "transferTokenContractOwnership(address)", +"5f824297": "SellOrderPlaced(uint32,address)", +"5f84d0f9": "tokenR0()", +"5f84e343": "Artemine()", +"5f84f302": "setInterestRate(uint256)", +"5f852975": "randomtests()", +"5f8534ae": "claimDeposit(uint256)", +"5f856dbf": "Token_AllowTransfer()", +"5f85abdc": "contains(int256,int256)", +"5f865912": "addContract(address,address,uint256,string,bool)", +"5f877108": "sendToCharger(uint256)", +"5f88bff0": "presaleFundingGoal()", +"5f88e83d": "checkAndCallTransfer(address,address,uint256,bytes)", +"5f88eade": "opened()", +"5f88ffed": "wallet10()", +"5f8909bd": "biddingPeriod()", +"5f8a3029": "Standard_4()", +"5f8a7eab": "getReleaseAmount()", +"5f8aaa69": "sourceToken()", +"5f8aaef7": "contractStakeToken()", +"5f8af054": "getMessageLength(string)", +"5f8b93d2": "SingularityTest13()", +"5f8bad42": "getCommunityBallotWeiPrice()", +"5f8c1fce": "nextBracket()", +"5f8c494f": "IntIDQuery(address)", +"5f8cb3f6": "bounty_paid()", +"5f8cf6c4": "SMILO_SALES_AMOUNT()", +"5f8cf7c5": "PermissionGroups()", +"5f8d96de": "getDeadline()", +"5f8e38e1": "depositERC20Compatible(address,uint256,uint256,uint256)", +"5f8eb4c7": "jsub(uint256,uint256,uint256,uint256,uint256,uint256)", +"5f8f0483": "buyBankerAgreementFromImporterBank()", +"5f9094f5": "GetCreditsPerEth()", +"5f9145ef": "RefundReceived(uint256)", +"5f918b05": "ServiceProviderDisabled(address,bytes)", +"5f91af39": "_increasePlayerDivis(address,uint256)", +"5f9209ad": "getPositioninterestPeriod(bytes32)", +"5f92dee8": "adminGetWorldSnapshot(uint256)", +"5f932d71": "walletSetSigner(address)", +"5f945733": "getTotalInvested()", +"5f94e3de": "setSecondaryOperator(address)", +"5f94e82c": "setBridgeValidatorsProxyOwner(address)", +"5f956244": "TribePlatform()", +"5f9590fc": "_isValidDataHash(bytes32,bytes)", +"5f95ad43": "HasNoEtherTest()", +"5f9602e8": "perClaim()", +"5f96d9fa": "gemSpeedConversion()", +"5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", +"5f984bf6": "changeFounder(address,string)", +"5f9973b9": "WeiToken()", +"5f99c1b2": "_landholderJackpot(uint256)", +"5f99e8f5": "GetSeries1()", +"5f9a2c23": "endFourthWeek()", +"5f9aa94f": "SpiceRates(address,uint256)", +"5f9ac1a5": "distributeLeaderboardRewards()", +"5f9adf84": "getUserSentTradeOfferId(address,address)", +"5f9b71ce": "bet(uint256,address)", +"5f9bad28": "saleBonus()", +"5f9c84b5": "transferirSala(address,uint256)", +"5f9cb50d": "updateMasks(uint256,uint256,uint256,uint256,uint256)", +"5f9dfc79": "minBuyTokenAmount()", +"5f9e1080": "settleBet(uint256,address,uint256)", +"5f9e3c98": "canSetNewOwnerPercentage(uint256)", +"5f9f3f46": "MakeSharesFromAmount(uint256)", +"5f9f4734": "birthday()", +"5fa13b49": "shweta()", +"5fa21f1f": "enableBetting()", +"5fa27af0": "GITC()", +"5fa382ea": "getPixelsOwned(address)", +"5fa3df98": "changeKYCStatus(address,bool)", +"5fa413b0": "ownerShareInPercent()", +"5fa44602": "tokenCreationDate()", +"5fa458b7": "buysoldiers(uint256)", +"5fa51277": "emergencyExtract()", +"5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", +"5fa58268": "approveRequestPause()", +"5fa60fc8": "DCAsset(address)", +"5fa67c00": "Credit(address,address)", +"5fa77dac": "all(bool[6])", +"5fa7b584": "removeToken(address)", +"5fa7dc56": "getCurrentRateWithBonus()", +"5fa7df6b": "setDelegateAndLockTokens(uint256,address)", +"5fa87163": "viewlisting(uint256,uint256)", +"5fa8c869": "_getRandomPartSubtype(uint256,uint8[])", +"5fab11a5": "startICO(uint256,uint256,uint256)", +"5fac4996": "findSignedSubscriberIndex(address)", +"5fad18e4": "Visualrockcoin()", +"5fad3b1a": "initialiseContract(address,uint256)", +"5fad663e": "expectedDividends(address)", +"5fae0576": "isWhitelistedAddress(address)", +"5faeb944": "setData_22(string)", +"5faeced2": "removeFromUserCounter(uint256)", +"5faf2880": "changeDna(uint256,uint256)", +"5faf6675": "forecastInfo(uint256)", +"5fb02f4d": "startContract()", +"5fb07a62": "getDrugs()", +"5fb0ac18": "birthDragon(uint256)", +"5fb130af": "retry(address)", +"5fb135f9": "distributeAff(uint256,uint256,uint256,uint256)", +"5fb1552c": "GanaLocker(address,address)", +"5fb1ef8e": "checkOrder(address)", +"5fb1f1d7": "getSketchesOnOffer()", +"5fb3b944": "privateSaleSoldTokens()", +"5fb3e119": "Auction()", +"5fb42c59": "goldListPeriod()", +"5fb437f2": "setWithdrowRate(uint256,uint256)", +"5fb4f78c": "finishConfiguration()", +"5fb500a5": "ETT(uint256,string,uint8,string)", +"5fb64fd6": "checkMembership(address)", +"5fb6bca2": "fighterCore()", +"5fb77b9c": "revealBracket(bytes8,bytes16)", +"5fb7a643": "enableServiceProvider(address,bytes)", +"5fb80f20": "weiPerAnimal()", +"5fb8dc8b": "MasternodeTransferred(address,address)", +"5fb8fed6": "PJR()", +"5fb93bb7": "transferDataEntryClerk(address)", +"5fba26a6": "getBorrowedBooksCount(uint256)", +"5fbaa390": "haltSale()", +"5fbabc49": "setSkill(uint32,uint8,uint32,uint32,uint32,uint32,uint32)", +"5fbddcf3": "isLivingMonarch()", +"5fbe4d1d": "tokenAddr()", +"5fbf0577": "sayYes(uint256)", +"5fbf17ac": "totalUBetCheckAmounts()", +"5fbf79a2": "EmergencyStopSell(bool)", +"5fbfd9f6": "crowdsaleController()", +"5fbff3e2": "preferentialRate()", +"5fbff3fc": "KuangJinLian()", +"5fc02dcd": "freezeAccountForOwner(address,bool)", +"5fc13e0f": "initTransaction(address,uint256,bytes)", +"5fc1a4b8": "treasurySupply()", +"5fc1afac": "forwarders_count()", +"5fc2b479": "unlock(address,uint256,uint8)", +"5fc2cb39": "buyTokensWithProperEvent(address,uint8)", +"5fc31aeb": "_rawGetTokenDelegation(address,address)", +"5fc378df": "sawcoin()", +"5fc3ea0b": "withdrawERC20(address,uint256,address)", +"5fc42ebf": "KTZ()", +"5fc483c5": "OnlyOwner()", +"5fc4a6f3": "getCurrentBonusSystem()", +"5fc5d48b": "burnUnsoldCoins(address)", +"5fc5e727": "investedSumOnIco()", +"5fc6bd17": "pendingParsecs()", +"5fc71288": "GOTPAY()", +"5fc75bf2": "viewCreatePetitionFee()", +"5fc7e71e": "liquidateBorrowAllowed(address,address,address,address,uint256)", +"5fc8cc16": "returnAmountOfELIXAddressCanProduce(address)", +"5fc9309c": "transferFrom(address,address,uint256,address)", +"5fc93ed7": "BirthdayBoyClickHere()", +"5fc9d392": "setMessageStatus(bool)", +"5fc9e75e": "historyCountOf()", +"5fca5a92": "set_arbits_max_contribution(address,uint256)", +"5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", +"5fcba9ae": "DURIANX()", +"5fcbd5b6": "countDown()", +"5fcc2edb": "IndividualityTokenRoot(address)", +"5fcc6277": "changeModuleBudget(uint8,uint8,uint256)", +"5fcc7ea1": "nextScheduledQuery()", +"5fcc9d0f": "hardCapPreIco()", +"5fcce279": "announcementType()", +"5fccf40a": "redeemBonusLot()", +"5fccfda4": "postICOSale()", +"5fcd7fe6": "OWNER_TOKENS()", +"5fce627e": "hasArea(address,uint256)", +"5fceab11": "incomingTransaction(uint256)", +"5fcee7a0": "CEOAddress()", +"5fcf0455": "interestEarnedAccount()", +"5fcf92ef": "received_tokens()", +"5fd030c0": "setLicenseNFT(address)", +"5fd0526e": "getReleasableBonusAmount(uint256,address)", +"5fd0f8b2": "smartContractSaleEnded()", +"5fd1bbc4": "publicStartTime()", +"5fd23730": "LogSwapToken(address,uint256)", +"5fd33b1b": "freezeTrading()", +"5fd357fc": "PortfolioContent(uint256,uint256,uint256)", +"5fd4b08a": "getName(address)", +"5fd56dfc": "AllInOne()", +"5fd56e98": "whoHadTheBiggestDick(uint256)", +"5fd5e3b4": "newEvent(uint256,address[],uint256,uint256)", +"5fd65f0f": "swapStorage()", +"5fd72d16": "addAllowance(address,address,uint256)", +"5fd7793a": "setStreamerContract(address,uint256)", +"5fd8c710": "withdrawBalance()", +"5fd8d3d1": "maxInvestorCap()", +"5fd9d610": "verifyGameResult(bytes32)", +"5fd9dff6": "allowance(address,address,bytes)", +"5fd9e124": "pStopBlock()", +"5fd9e693": "Crear_rifa(uint256,address)", +"5fda0dc1": "isOnExchange(uint256)", +"5fda83f6": "TokenTransferDisallowed(uint256,address)", +"5fdba1de": "setIBalance5(uint256,uint256,uint256)", +"5fdbba04": "debatePeriodOf(uint256)", +"5fdc1a97": "AllSportsCoin()", +"5fdc9e0a": "dropSupply()", +"5fdcd306": "check_status()", +"5fdd59f8": "messages(address)", +"5fde0ed5": "getCountBySeller(address)", +"5fde731c": "wdiv(uint256,uint256)", +"5fdf05d7": "two()", +"5fdf5357": "sortDescBy(uint256[],uint256[])", +"5fdf60fb": "circulation()", +"5fe07013": "revokePermission(address,bytes32)", +"5fe0e081": "changePeriod(uint256,uint256)", +"5fe16454": "Fragment()", +"5fe22c8b": "testFailTransferWithoutApproval()", +"5fe27ab0": "createHKG(address)", +"5fe2d689": "getInterest(uint256)", +"5fe36964": "TEAMS_TOTAL()", +"5fe3854e": "calculatePrice(uint256,bool)", +"5fe3b567": "comptroller()", +"5fe44141": "getRegistryDataRegistered()", +"5fe4c0f3": "validationTime()", +"5fe59b9d": "setMotd(string)", +"5fe5b825": "AuthComplete(address,address)", +"5fe6fb19": "ConsultaProva(string)", +"5fe736e9": "createContractPlayer(string,uint256)", +"5fe745ea": "unlockOwnFunds()", +"5fe75764": "specialAccounts(address)", +"5fe772c6": "buyStakes(address,address)", +"5fe78b9b": "_getCurrentBonus()", +"5fe825f8": "getHodlOwner(uint256)", +"5fe8e7cc": "getHolders()", +"5fe9219a": "transferToMainViaRelay(address,uint256,uint256)", +"5fe98f99": "_getPayOut()", +"5fea13f8": "distributeToken(address,uint256,uint256)", +"5fea3de9": "getDuration(uint256,uint256)", +"5fec4be9": "issue(address[],uint256[],uint16[])", +"5fec5d0b": "isDelegate(address,address)", +"5fed2091": "addLovers(bytes32,string,string)", +"5fed22a4": "payOffClientDebt(uint256,uint256)", +"5fed2edd": "pushArray(bytes32,bytes32)", +"5fee0aac": "giveBattleBonus(address,uint256)", +"5fee63c3": "calculatedTo()", +"5fee8a4b": "getCommitThreshold()", +"5fef2094": "qryModuleDetail(string)", +"5fef4d34": "setOwner(address,address,bool)", +"5ff149ba": "UpdateEthBalance(uint256,uint256,uint256,uint256)", +"5ff1569e": "developmentPercent()", +"5ff19392": "strToUnderlierType(bytes32)", +"5ff1a9c0": "setPlAAdress(address)", +"5ff3b980": "getCooloffPeriod()", +"5ff456cb": "refundToOwner(uint256,uint256)", +"5ff46857": "getEthToTokenMakerOrderIds(address)", +"5ff4909b": "setAbel(address)", +"5ff4ae32": "setGasForDCN(uint256)", +"5ff4f876": "NFTBalanceOf(address)", +"5ff63abc": "ETimesChain()", +"5ff65026": "addNodeToStakedList(address)", +"5ff65efe": "MaxPoSXblock()", +"5ff6b342": "getValidDurationNonce()", +"5ff6cbf3": "getMessages()", +"5ff6e9d0": "investtokens()", +"5ff77b22": "checkTeamToAdd(uint64,uint64,uint64)", +"5ff79c07": "DenmarkvsFrance()", +"5ff7ec2f": "SoldTokensFromCroupier(address,uint256,uint256)", +"5ff7f947": "setSinistre_effectif(uint256)", +"5ff85cc0": "feeUnit()", +"5ff8b778": "findWinners()", +"5ff97818": "setMetadata0(string)", +"5ffabbce": "teamReserveTimeLock()", +"5ffb1578": "pushArrayValue(uint256)", +"5ffbba3f": "relativeDateSave()", +"5ffc7cc7": "transferProfit(uint256,uint256)", +"5ffcb734": "setTokensControlInfo()", +"5ffcbe30": "voteForCandidateViaProxy(uint256,address)", +"5ffce121": "getTopCompanyCount()", +"5ffd59bd": "GetBalanceOwnerForTransfer(uint256)", +"5ffde7be": "priceUpdateInterval()", +"5fffad5a": "setselfdropvalue(uint256)", +"5fffb7c7": "changeTokenAddress(address,int256,address)", +"600005b3": "Delegation(address)", +"60003918": "AllWorksToken()", +"6000eb9f": "getTeamInvest(uint256,uint256)", +"6001279f": "decreaseApprovalByLegacy(address,address,uint256)", +"600160a3": "bet_luse()", +"6001b23e": "getCustomerTxAtIndex(address,uint256)", +"60027c25": "bankrollLockedUntil()", +"60035c3f": "swipeHoney()", +"600440cb": "upgradeMaster()", +"60048290": "Kanzhang()", +"60063887": "transferDebt(address,address,address,uint256)", +"6006eb9b": "Demor(uint256,string,string)", +"6006f178": "WitdrawLenderProfit()", +"600720c2": "sponsoredJackpotAmount()", +"6007c4f8": "isTokenSaleOngoing()", +"6007c836": "setIndividualMaxCap(uint256)", +"60084004": "getRectangleArea(uint256,uint256)", +"6008fb07": "EtherGit(address)", +"60095dcb": "stopCharging()", +"60098088": "deleteCar(uint256)", +"6009eed3": "crowdSaleOpen()", +"600a686e": "setResponse(address,string)", +"600b1ff2": "setBlackBox(address)", +"600c200e": "ANIToken(uint256,string,string)", +"600c523b": "LogIssue(address,uint256)", +"600cf0d9": "getOrdersOfOwner(address,uint256,uint256,bool)", +"600d05ac": "XZARToken()", +"600d0beb": "isInRaffle(address,address)", +"600d7003": "retrieveTokens()", +"600da23a": "checkTimeBonusPercentage()", +"600de26a": "getDigitFromUint(int256,uint256,uint256,uint8)", +"600e0ee7": "getMySeeds()", +"600e85b7": "tokenGrant(address,uint256)", +"600f8cfc": "registerByList(address[])", +"60104cef": "createGame(uint256,uint256)", +"6010d60c": "lockomio()", +"60116397": "Registrar(address,bytes32,uint256)", +"6012042e": "verifyPayment(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"60136123": "NTToken()", +"6013aa44": "testControlCreateSameNonce()", +"6013d092": "tokenSaleLimit()", +"6014e37c": "getLLV_edit_15()", +"60154e85": "payComision()", +"60155673": "TEC_TEAM_WALLET()", +"601570ea": "getResponseString(uint256,bytes32)", +"6016db70": "getAssetMinAmount(address)", +"6016dd4a": "credentials(address)", +"60173ede": "FondoNetwork()", +"60175bcb": "ActivityCore(address,address)", +"6017bb61": "Death()", +"6017d51d": "testInt(int256)", +"6019061b": "createSale(uint256,uint256)", +"60192799": "steps()", +"60196008": "replaceLevel(uint256,uint256,uint256)", +"601a0bf1": "_reduceReserves(uint256)", +"601a0e77": "pseudoRandomUint8(uint8)", +"601ab918": "CashBetCoin(uint256)", +"601b349c": "removeCollaborator(uint256,address)", +"601ba73a": "setMainSale(uint256)", +"601cd624": "transfersAreLocked()", +"601d3910": "reconcile(address[],int256[],uint8[],bytes32[],bytes32[])", +"601d54eb": "ZTCrowdsale(address,address,address,uint256)", +"601ee75e": "SPINToken(address,address,uint256,uint256)", +"601fba02": "activateBuyback(uint256,uint256)", +"601fc832": "getObserverAtIndex(uint256)", +"6020b90a": "_internalTransfer(address,address,uint256,bytes)", +"6020d2c5": "_newSaddle(uint256,uint256,uint256,bool,address)", +"60213b88": "getInitialWithdrawal()", +"60214c6f": "test_method()", +"60217267": "stakedBalance(address)", +"60219c7b": "totalTokensForSale()", +"6022e6f8": "createProposal(address,uint256,string,bytes)", +"602451ea": "showAuthorizerOneAmount()", +"60246c88": "getPoolInfo()", +"60249827": "Puzzle()", +"602501a1": "SGD_Omnidollar()", +"602512e1": "setDifficulty(uint256)", +"6025d3e5": "finalizeAll()", +"60261ce6": "deadlinePreIcoOne()", +"6026bb86": "battleUnitIdRange()", +"6026c151": "offerGanTokenForSale(uint256,uint256)", +"60274396": "createDutchAuctionToBuy(uint256,uint256,uint256,uint256)", +"60281080": "HBVToken()", +"6029755e": "_generatePersonalNumber(string,uint256)", +"60299843": "minWeightDeduct()", +"6029b13f": "collect(address,address,uint256,bytes32,bytes32,uint8)", +"6029bf9f": "distributeFees(uint256)", +"6029d66f": "setRecoveryContract(address)", +"6029f53f": "getOrderTakerTokenAmount()", +"602a3fee": "sendMiningProfit(address[],uint256)", +"602acca1": "InchainICO(address[],uint256)", +"602b7001": "updateRefundApplications(address,uint256,bool)", +"602bc62b": "getUnlockTime()", +"602cd226": "DelayedPayment(address,uint256,address)", +"602cf359": "IOXToken()", +"602d7d62": "stateFail(uint256)", +"602e2533": "_fee(uint256)", +"602e496c": "fundcruVaultLockTime()", +"602e6623": "minePool()", +"602ea880": "AlphoTestTokenCoin()", +"602fbd79": "afterCrowdSale()", +"603066a4": "foundationReserve()", +"60312cdd": "LazyToken()", +"60316801": "getTokenMetadata(uint256)", +"6031749c": "updatePassport(address,uint256,bytes32,bool)", +"60319f71": "EOEToken()", +"6032f4a6": "fulfill()", +"603318ad": "getContributions(uint256,address,address)", +"60339c7b": "resetUserPromoBonus(address,address)", +"6033abd5": "CafePayed()", +"6033cdc6": "voteToUpdateMaritalStatus()", +"60344938": "changeCongress(address)", +"603510cb": "USDYToken()", +"60351748": "genericAction(bytes32[],address)", +"603546b9": "UnMint(address,uint256)", +"603553df": "ReederemEvent(address,uint256,uint256,uint256)", +"603601d5": "esercita_potere_pubblico()", +"60368a33": "totalBribery()", +"60368f30": "XLedger()", +"603709e3": "get10Characters(uint16)", +"60393a55": "addPeriod(uint256,uint256)", +"6039c60c": "fiveTimes(address,uint256)", +"6039fbdb": "addTokens(address,uint256)", +"603a552e": "engineer()", +"603c1370": "onNewLoan(uint256,address,uint256)", +"603c5e52": "SetCreditsPerEth(uint256)", +"603ccf5e": "AMBASSADOR_SEVEN()", +"603d1b98": "guardian1()", +"603d1d1c": "setSellOpen(bool)", +"603d1ed9": "createdOn(uint256)", +"603daf9a": "getBuyer()", +"603e3a40": "bulkBuy(uint8[],bytes6[],uint32[],uint32[])", +"603f4d52": "saleState()", +"60425c48": "TokenSellPercentage()", +"604269d1": "isMain()", +"6042a760": "icapTransfer(bytes32,address,bytes32,uint256)", +"6042fbe1": "maxPower_()", +"60434dcf": "getGitHub()", +"60445142": "depositCntr()", +"604497a2": "_transferFrom(address,address,uint256,bytes,bool)", +"6044ce6e": "cancelAgonForce(uint64)", +"60456068": "appreciationStep()", +"60457034": "setVerificationStatus(bytes32,bool)", +"6045804f": "delManager()", +"60464627": "totalWithdrawals()", +"6046c37f": "activateEmergencyProtectedMode()", +"6046d718": "loggedTransfer(uint256,bytes32,address,address)", +"6046f71d": "getProposalEthReward(bytes32,address)", +"6047a00e": "bonusTokensPool()", +"6047f7f5": "getTotalBmcDaysAmount(uint256)", +"60483a3f": "submitEtherProposal(uint256,string)", +"6048e89e": "setEthToBeClaimed()", +"60493ea4": "ico4Raise()", +"604a4bc8": "createTrackFromBack(bytes32,uint256)", +"604a4f9d": "regularTicketPrice()", +"604a6fa9": "Random()", +"604aa2cb": "backResiliumOwner()", +"604b2399": "_hasFlag(uint256,uint256)", +"604bf292": "safeSubtrNCP(uint256,uint256)", +"604c0b60": "transferBuyer(address,uint256)", +"604c7ef4": "BCBtuCoin()", +"604ca461": "addStory(bytes12,bytes12,uint256,uint256)", +"604cc1a5": "startGiveaway(uint32,uint256)", +"604ce56c": "MAX_ACTIVE_CANVAS()", +"604d3943": "poolCut()", +"604e3588": "SmartDollar()", +"604e4732": "tryFinializeLastProposal()", +"604e5fb8": "structureIco(uint256)", +"604e7af6": "totalDropTransactions()", +"604f87d8": "transferFromCallGas()", +"604f90a8": "getGladiatorChestAvailable()", +"604fc446": "getAddOnNeeded(uint16)", +"60500245": "registerName(string,bool)", +"60506aff": "initialDeposit(address)", +"6050eeb4": "_createLibrary(string,string,address,address,uint256,uint256)", +"6051c7cd": "acquireTokens(uint256,uint256,address,uint256,address)", +"6051fa2c": "logTradingProceedsClaimed(address,address,address,address,uint256,uint256,uint256)", +"60521116": "showPoolInfo(uint256)", +"60528e7b": "proxyWithdraw(address)", +"6052a22b": "toTimestamp(uint256,uint256,uint256,uint256,uint256)", +"6052a849": "getEtherToBuy(uint256,bool)", +"60536172": "takeOwnership()", +"60542557": "SmartExchange(string,string,uint8,uint256)", +"60546602": "isAbsent(bytes32)", +"6054da0b": "setNextCommonTTMTokenId8(uint64)", +"60566675": "LeoCoin()", +"6056969b": "announce(bytes32)", +"6057361d": "store(uint256)", +"60577043": "tixFund()", +"6057f2ca": "addDealer(string,address,uint256)", +"60583488": "get_info()", +"60585358": "getByte()", +"60589137": "ListingCancelled(bytes32,uint256)", +"60595433": "Pass()", +"6059838b": "tierTwoPurchase()", +"605a18c2": "setTokenTransferFeeProp(address,address,uint256)", +"605a42db": "superDragon(uint256)", +"605a8ea3": "AvailableCommission()", +"605ae1d0": "BIDTToken(address)", +"605b24be": "gcard(uint256,address)", +"605c0209": "ZorffToken()", +"605c2dbf": "ManagerChanged(address,address)", +"605c43de": "getBetById(uint256)", +"605cee71": "delWallet(uint256)", +"605de51d": "getTotalSponsorship(uint256)", +"605e5ee1": "delWhiteList(address)", +"605f2ca4": "distributeTokensToContributorByIndex(uint256)", +"605ff295": "CelebrityToken()", +"60608438": "setCurrentAndNextSnapshotBalance(address,uint256,uint256)", +"60616ae2": "BllotPro(bytes32[])", +"6061d692": "month30Unlock()", +"60621984": "Mining24(uint256,uint256)", +"606224f8": "sendPendingAmounts(uint256,uint256,address)", +"60643652": "maxEntrants()", +"6064d863": "revealedCeilings()", +"6065140b": "setKYCVerificationContract(address)", +"60654e47": "getLotteryBalance()", +"60659a92": "tokensAvailable()", +"6065fb33": "genesisAddress()", +"60662fe2": "TOKENS_TOTAL_SUPPLY()", +"60668e58": "getData_5()", +"6066b066": "isSaleMarket()", +"6066ed11": "getCombatsCount()", +"6067be79": "getInvestedSumToRound(uint256)", +"60689557": "Rock()", +"6069272c": "getAllEntityIds()", +"60694549": "withdrawUserPrize()", +"60699026": "mulSafe(uint256,uint256)", +"60699d92": "createPersonalTime(address,uint256)", +"606a1f7a": "EtheremonTrade(address,address,address,address)", +"606a405e": "getAddressPlayNumber(uint256,uint256,uint256)", +"606a7f01": "Addr4()", +"606a9584": "_forwardPoly(address,address,uint256)", +"606aed30": "withdrawOwedToken(uint256,uint256,uint256)", +"606baff8": "minCrowdsaleAllocation()", +"606bc9a5": "setOwnerHoverText(address,uint256[2])", +"606ce3bf": "set(uint256,uint256,uint256,uint256)", +"606d0d14": "executeOffer(uint256,bytes)", +"606d2e96": "battles(uint256)", +"606d55b1": "getY(uint256,bool)", +"606da54e": "XBLContract_addr()", +"606dc104": "openRaceCount()", +"606deecd": "requestData()", +"606ec65d": "TransferUpdated(address,uint256)", +"60702417": "MakeERC20(uint256,uint256,string,string)", +"60704108": "getAssetProxy(bytes4)", +"60708ae3": "issueAndCommit(address,address,uint256,uint256)", +"6070f1be": "NodeMCU_Endpoint()", +"60711058": "getUserDeposit(address,uint256)", +"6071eb5c": "ecosystemReserve()", +"60721b7c": "debitAmountToRefund()", +"607267d3": "getPlayerRoundDividend(address,uint256)", +"60726abb": "copy()", +"60727416": "newUserFrom(address,string,string)", +"6072ec64": "auditData()", +"60733572": "setUnicornToken(address)", +"60734859": "changeSaleTokenLimit(uint256,uint256)", +"6073660a": "findNextDay(uint256,bytes2)", +"60737a7c": "FaucetToken(string,string,uint8)", +"6073d045": "userDepositedWei(address,address)", +"6074123c": "AthlierToken()", +"607485fe": "firstYearMinedTokenCap()", +"6074b806": "updateOrderbook(address)", +"607531b6": "bitownToken()", +"6075eb7d": "openChest(uint256)", +"6076a3d5": "setEarlyParams(bool,uint256,uint256)", +"60771261": "scalarBaseMult(uint256)", +"6077759c": "bubbleSortAllMatches()", +"6078268b": "advisorsTokens()", +"60785bd1": "easyUpdateMatriarch(address)", +"6078b87e": "communityPeriodLength()", +"60795d80": "requestAllowance()", +"607a124f": "setAttrs(address,address,address,uint8,uint256,uint256)", +"607af216": "getRepresentedDTH(address)", +"607afbb5": "mySum(uint256,uint256)", +"607b463a": "getCash(address)", +"607b9169": "toOwner()", +"607b9f97": "safetyWallet()", +"607cbaff": "viewPetitionShareholder(uint256)", +"607d35c4": "uint5ToStr(uint256[5])", +"607db616": "tokenAllocate()", +"607dbae5": "ProofOfIdleness()", +"607dc1d6": "createNewCSCResource(string,string,uint256)", +"607eaf70": "investorBankroll()", +"607ecd96": "checkAccBalance()", +"607fa5a4": "updateRequired(uint256)", +"60805e5a": "unlockAddress(address,bool)", +"60808037": "numTokensForContributor(uint256)", +"6080af05": "setVoterStakesContract(address)", +"6081f5cb": "calculateBonus(uint256)", +"60820d80": "getOwnedTokens()", +"60827be8": "IDChain()", +"60829f8a": "unstake(address,address,uint256)", +"6082a02c": "getPriceIdv(bytes32)", +"6082a6ad": "Punani()", +"60834493": "Veetune(uint256)", +"60836aa4": "changeDevCut(uint256)", +"6083e59a": "maxDeposit()", +"608427e6": "ApolloSeptemTokenPurchase(address,address,uint256,uint256)", +"608458eb": "TOKEN_FOR_SALE()", +"6084747f": "mostRecentBlock()", +"60851f28": "viewThirdLotOfClauses()", +"6085e6af": "tokenSellData()", +"6086e22f": "calculateInitialPayerDeposit(uint256)", +"608716ad": "CryptoMoviesToken()", +"60874b27": "SpankICO()", +"60887081": "IEOStarted()", +"6088a917": "artworkRegister()", +"6088caf3": "tier4Time()", +"608980eb": "intervalsAt(uint256,uint256,int256)", +"6089e3c4": "BitCashPlatform()", +"608a0ff0": "transferBet(address,address,uint256)", +"608bc08c": "airDrop(address,address,address[],uint256,bool,address)", +"608bd7f4": "setLong(address)", +"608be57f": "_startNextAccountingPeriod()", +"608cadb8": "Goldmint(address,address,address,address,address)", +"608cb457": "SLACK_PERIOD()", +"608cc40a": "createRules(address,address[])", +"608d031a": "checkMiningActive()", +"608d576b": "getMultiRequestRegistrar(uint256)", +"608d670a": "XfStandardToken(uint256,string,uint8,string)", +"608e7fa6": "addAlias(bytes32,address)", +"608e9122": "InbestToken()", +"608eaa6a": "setFiscalVerify(bytes32,uint256,uint256,uint256)", +"608eba96": "_createCard(uint256,uint256,address,address)", +"608f102e": "District0xContribution(address,address,address,address,address[])", +"608f1f7e": "DGDTalk()", +"608fc07a": "updateSalesWallet(address)", +"60900c88": "coinprice()", +"60909c51": "closeDataResponse(address,address,bool,bool,bytes)", +"6090befe": "setCompanyWalletAddress(address)", +"60913244": "botOnSale(uint256,uint256)", +"6092019a": "MAX_FUNDING()", +"6092e55b": "createCDPLeveragedDai(uint256)", +"60938601": "approveOnly()", +"6094fae8": "finishTransfer(uint256)", +"609526c2": "generateRandomNumber(uint256,uint256)", +"60953744": "Mul(uint256,uint256)", +"60958192": "getProposalTTL()", +"6095c2d5": "setExchangeCommissionAddress(address)", +"60961955": "addFakeVisitors()", +"609619b4": "SecurityDepositRegistryReplaced(address,address)", +"60965dc0": "firstRoundWMStart()", +"609669eb": "StopIcoManually()", +"6096bbde": "_getGameAuctionGap()", +"60970da4": "updateCustomer(address,string)", +"609725ef": "getCurrentPassportLogic()", +"60972a84": "reissuedTransactions()", +"60975988": "PING_ORACLE_INTERVAL()", +"60979759": "p_setOwner(address)", +"6097bca9": "atnSent()", +"60994bb0": "_createRoc(uint256,string,uint256,address)", +"6099af40": "setConfigBool(bytes,bool)", +"6099ecb2": "pendingRewards(address,uint256)", +"609a54b0": "get_all_sellable_token()", +"609ab538": "newSchellingRoundEvent(uint256,uint256)", +"609ada00": "logEntropyTxDetails(string,uint256)", +"609b5785": "_mainsaleSupply()", +"609b8394": "setAnimator(address)", +"609ba988": "approveAdvertiserCharges()", +"609bdc71": "MintableMultiownedTokenTestHelper(address[],uint256,address)", +"609bec67": "period3Denominator()", +"609bf323": "VestedTokenMock(address,uint256)", +"609bf6ba": "GetGuestCount()", +"609d2bc5": "oraclize_setConfig(bytes)", +"609da897": "setupCompleted()", +"609df32f": "listNode()", +"609e5ca4": "getTournamentAmt()", +"609ec605": "toBytes(bytes4)", +"609f8fe2": "verify(string,uint8,bytes32,bytes32)", +"609f9a8e": "betFromGame(uint32,bytes32)", +"609ff0fb": "developersRecipient()", +"609ff1bd": "winningProposal()", +"60a10fa7": "setBridgeHeight(uint256)", +"60a11672": "safeTransferFromWithData(address,address,uint256,bytes)", +"60a1623f": "_withdraw(string,string,bool)", +"60a1f397": "_evaluateArea(address,uint8,uint256)", +"60a22932": "totalSaledToken()", +"60a22fe4": "nextMinimumBond()", +"60a31921": "dividendsOf(address,address)", +"60a4a929": "Assigned(address,uint256,uint256)", +"60a4d104": "dteamVaultAddr2()", +"60a4d1a5": "AddNewCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", +"60a4d599": "getPreICOLength()", +"60a59bdb": "random_number()", +"60a60fd8": "testProxyCallWithValue()", +"60a64947": "getAdv(address)", +"60a703ea": "ReceivedOwnership(address)", +"60a72c29": "getAppData(address)", +"60aa0e1c": "ICO_token_supplyCap()", +"60aa6b9e": "changeDueDate(uint256)", +"60ab5852": "issueTokens()", +"60acf888": "token_transfer(address,address,uint256)", +"60ad2391": "settlement(uint256)", +"60ad5bd0": "getCountrySpots(uint16)", +"60ad970d": "getLoansForAddress(address,uint256)", +"60ad9d7b": "burnByAddress(address,uint256)", +"60ae1eb5": "buySaleCardFromSys()", +"60aeac18": "neverPayBack()", +"60aef331": "buyTokensBonus(address)", +"60af9f91": "masterRecruitment()", +"60b0b0f0": "contribute(uint256,address)", +"60b1e057": "EVMSCRIPT_REGISTRY_APP_ID()", +"60b1e173": "getProof(uint256,address,address)", +"60b2a56a": "drawWinner(uint256)", +"60b35739": "_multiMint(address[])", +"60b38880": "TemperatureMeasurementA(address,int8,int8,uint16,string)", +"60b431a4": "testGetSig()", +"60b4a8fd": "getLastBidId()", +"60b6aa92": "privateIcoEndTime()", +"60b6ff5c": "ioucoin()", +"60b73223": "refundMoney(address,address)", +"60b7b3f6": "getCurLotIndex()", +"60b82e2e": "getRandomNumberList()", +"60b831e5": "cancelCall(bytes32)", +"60b95da5": "YclDoCoins(uint256,string,uint8,string)", +"60b99afb": "getIconiqMaxInvestment(address)", +"60baabf3": "nizk_setup()", +"60bba03d": "setTeamMember(address,bool)", +"60bc59b7": "__addressToString(address,address)", +"60bc5a06": "airdropManually(address,uint256)", +"60bce2f4": "usdPerEth()", +"60bd409e": "setAllowSellLands(uint16)", +"60bd7a9d": "statuses()", +"60bddc04": "getRateScore(uint256)", +"60be3547": "newLottery(uint256,uint256)", +"60be5f70": "newUser(address,bytes20,uint64)", +"60bea672": "createPorscheTicket(address,uint256)", +"60bebe98": "translateTileToWidth(uint16)", +"60bf1d2f": "ownsHive(address)", +"60bf46ea": "setQuotePriority(address,uint256)", +"60bf4dd5": "PGO_INTERNAL_RESERVE_CAP()", +"60bf9a84": "getbetData(uint256,uint256,address)", +"60bfe04e": "setRewardOpen(uint256)", +"60bff45c": "_addHolder(address)", +"60c1461f": "setNewICOTime(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"60c17d1d": "freedWosPoolForSecondStage()", +"60c17eec": "eventPaid(address,uint256,uint256,uint256)", +"60c1e433": "getSellerTransaction(address,uint256,uint256)", +"60c20c16": "addOffer(string,uint256,address)", +"60c2db45": "walletTwitter()", +"60c2f663": "toUINT128(uint256)", +"60c311fd": "doBurnFromContract(address,uint256)", +"60c31544": "exporterReceivedPayment()", +"60c326ea": "setModel(address)", +"60c46821": "fundContractForRefund()", +"60c5cc3a": "acceptProposal(uint256)", +"60c6171c": "calculateGoldBuySimple(uint256)", +"60c66c5c": "maxNumOfPayoutCycles()", +"60c677ff": "commanderAlive()", +"60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", +"60c6ccb2": "removeMonsterIdMapping(address,uint64)", +"60c6ec6f": "validState()", +"60c71546": "enableTransferEarlier()", +"60c72285": "submitRemoveOwnerTransaction(address)", +"60c79d00": "setNumTranscoders(uint256)", +"60c7bb5a": "host_lottery(bytes32)", +"60c7d295": "cache()", +"60c82d6f": "addAddressToWhiteList(address,address)", +"60ca46cd": "toTokens(uint256)", +"60ca6890": "_submitTransaction(address,uint256,bytes,bytes,address,uint256)", +"60cb5fac": "deleteChannel(bytes32)", +"60cb66d0": "sum(int256[])", +"60cb8884": "TokenBank()", +"60cb96be": "CollectibleIndex0()", +"60cc2e8c": "maxGoalReached(uint256)", +"60cce8a5": "getValuableTokenAmount()", +"60ccf311": "getPlayerMerits(address,uint256)", +"60cd4ba4": "getTimeBasedBonus(uint256)", +"60ce03d5": "totalTokenIssued()", +"60cf7133": "testSetPermissions()", +"60cfc624": "setLLV_edit_26(string)", +"60cfd359": "mainSale()", +"60d12fa0": "getExecutive()", +"60d1c056": "usedPaymentSupply()", +"60d1ce36": "collectibleIndexToApproved(uint256)", +"60d26f01": "ownerTransferWei(address,uint256)", +"60d2bee9": "addArtistSignature(uint256,bytes)", +"60d3b4b0": "frwd()", +"60d3e4c5": "isDistributionInProgress()", +"60d4c79b": "burnOneBroGlobal(uint256)", +"60d50130": "FineArtsToken(uint256,string,string)", +"60d586f8": "getValue1()", +"60d60d2e": "countcomp()", +"60d60dad": "mainSaleFirstEndDate()", +"60d63425": "StakePool(string,string,uint8,uint256,uint256)", +"60d704db": "getBank()", +"60d8c2d2": "oneTokenWei()", +"60d938dc": "isPresaleActive()", +"60d975c9": "GG()", +"60d9c823": "removeClientAuthority(address)", +"60d9f0a8": "setNotarius(address)", +"60da4bd7": "batchCancelVoteForCandidate(address,address[],uint256[])", +"60dab6be": "ActionAgon()", +"60dccd89": "getContentAccount(uint256)", +"60dd5f90": "getPolicy(string)", +"60ddd8e8": "sumICOStage2USD()", +"60dddfb1": "votingWeightOf(address,uint256)", +"60dde4c2": "queueFront()", +"60de94d0": "setCCH_edit_11(string)", +"60e036a0": "EtheremonAdventurePresale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"60e092c6": "cancelOrder(address,address)", +"60e11e16": "Lira()", +"60e232a9": "changeVault(address)", +"60e2f6e8": "createProxyAndCall(bytes)", +"60e30a02": "ChinaInvestmentExchangeToken(uint256,string,uint8,string)", +"60e393c6": "DEVELOPER2()", +"60e39f73": "PotatoToken()", +"60e45f04": "UBSexToken()", +"60e474e3": "_issue(address,uint256)", +"60e4c1ac": "LogReceived(address,uint256)", +"60e519c0": "computeMarginAmount()", +"60e587f9": "goldReward()", +"60e5ef3a": "getPrice(uint8,uint8)", +"60e65bb8": "startTrading(bool)", +"60e68a25": "dash()", +"60e6cfd8": "addKey(bytes32)", +"60e6fb26": "resumePurchases()", +"60e708b3": "balanceOfUnlockTokens(address)", +"60e794de": "stageDataStore(uint256)", +"60e7a381": "o_aprendiz(uint256)", +"60e805c5": "LogMigrationCanceled(address,address,address)", +"60e85674": "checkLogin(address)", +"60e99b77": "getProposalState(bytes32,bytes32)", +"60e9c78b": "isNeedCheckTickets()", +"60e9f17e": "CRDToken()", +"60ea110b": "fromToken(uint256,uint256,uint256)", +"60eabebd": "CreateAPP(address,uint256)", +"60eb2826": "Badge()", +"60ebb498": "adminCancelWithdrawal(address,uint160,string)", +"60ec4f73": "starVoting(uint256,uint8)", +"60edc4c4": "timeOf(uint256)", +"60ee66c9": "setSubcontinentDiscoveryVotingContract(address)", +"60ef6037": "buySaddleShop(uint256)", +"60f01452": "updateEggs()", +"60f14509": "hodl()", +"60f17941": "tokensGranted()", +"60f1d148": "getMaximumBetAway()", +"60f247b5": "confirmTransaction(uint256,address)", +"60f2b9af": "setDocumentData(string,string,string,string,string)", +"60f2e1c0": "buyAndCrave(string)", +"60f2f673": "setcoe(uint256)", +"60f38d91": "endEarlyStage1()", +"60f5ac86": "campaignOpen()", +"60f5d0d8": "ReloadKeys(uint256,uint256,uint256)", +"60f61a4c": "buyUnitRaffleTicket(uint256)", +"60f66701": "useCoupon(string)", +"60f69dc0": "partnerReservedSum()", +"60f6e71d": "KuendeToken()", +"60f6fb2e": "chunkedWeiMultiple()", +"60f75530": "countRemaining()", +"60f75f3b": "closeMarketOrder(uint256)", +"60f8af90": "refundRound()", +"60f8bbb8": "setPuppySports(address,address)", +"60f8dab7": "userRefund()", +"60f8e036": "manageStatus()", +"60f96a8f": "parent()", +"60fb4aa0": "founder4Wallet()", +"60fd0668": "WAVcoin()", +"60fd0e91": "mintlist(address[],uint256[])", +"60fd1e66": "_movePendingToSetting(uint256,uint8)", +"60fd902c": "gnosisToken()", +"60fdd1c9": "setStakeRate(bytes32,uint256)", +"60fdf8ff": "GameEnded(uint256,uint256,uint256)", +"60fe103e": "logFeeWindowMinted(address,address,uint256)", +"60fe136e": "BogdanoffCoin()", +"60fe47b1": "set(uint256)", +"60fece43": "percentForTeam()", +"60ff77cc": "ledgerRecordAdd(uint256,bytes32,uint256,string,uint256,bytes32,uint256)", +"61001cd3": "testIsStarted()", +"61004364": "depositTokenTo(address,address,uint256,uint256)", +"6100b1e1": "resetDiscounts()", +"610103d9": "changeTxFee(uint256)", +"61012e15": "phaseLength()", +"6101a1f7": "unitStealingCapacity(uint256)", +"6101d16b": "getNumberOfSharesForAddress(uint256,address)", +"6101d4f5": "payTheMan(uint256)", +"6101f748": "FundsRegistryWalletConnector(address[],uint256)", +"61025532": "permitBurning(bool)", +"61027f78": "paying()", +"610285d2": "testControlRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"6102c049": "getBatchNumber(address)", +"6102d419": "getEthForMetResult(uint256)", +"6102e4e4": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[11])", +"610358ae": "removePrivelegedWallet(address,address)", +"61039bef": "releaseLocked(address)", +"6103ae75": "AGENCY_ADDR()", +"6103d70b": "withdrawPayments()", +"6103d915": "Winners(uint256)", +"6103dda6": "mutate(bytes32,bytes32)", +"6104464f": "previousPublishedVersion()", +"61046d8b": "setRLCPerETH(uint256)", +"61047ff4": "fibonacci(uint256)", +"6104d75a": "deathData_f13()", +"61050bb7": "_fetchPaidOrdersForPayer(address)", +"61053cd3": "tokensByUsdTx(string)", +"6105b499": "artCopyright()", +"6105c8af": "stubFunction(address,uint256)", +"61064b48": "GetInvestorAddress()", +"61064b5a": "processMarkings(address,uint256)", +"61066dc3": "enableServiceMode()", +"610757e4": "_wallet()", +"6108b5ff": "channel_deposit_bugbounty_limit()", +"6108bd0e": "sowCorn(address,uint8)", +"61096820": "CETH()", +"6109e255": "EtherSent(address,uint256)", +"6109ff33": "BihuaToken()", +"610af570": "voteOnDraft(bytes32,bool)", +"610b16ab": "onTransferStack(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"610b1abd": "lottery(uint256,uint256)", +"610bafaa": "getTotalBPOfAddress(address)", +"610bbebd": "Sensor()", +"610be654": "closeContract()", +"610c1d68": "addNtf(bytes32,uint256,address)", +"610c3009": "badgeName()", +"610cbcc7": "logHash(uint256)", +"610d006c": "getSourceConstraint(int256,uint256,uint256,uint256)", +"610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", +"610da891": "debug3()", +"610e9ed0": "postDisputeEth()", +"610efc86": "RegisterMine(string,uint256)", +"61101bed": "getTAmount(uint256,uint256)", +"611067a1": "Rate7()", +"6110e614": "duringSale(uint16)", +"61116d1d": "masternodeDeregister()", +"6111bd91": "cyberEntry2(address,bytes32)", +"6111ca21": "enroll(address,uint256)", +"6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", +"61129a80": "getEarlyIncomeMul(uint256)", +"6112c2ab": "summPartnerships()", +"6112c7c9": "RedirectChanged(address,uint256)", +"6112e8ac": "mint(address,uint256,uint8)", +"6113611f": "stakeVoted_Eth()", +"611408ff": "latestReleaseUrl()", +"6114dc0f": "lastFlight(address)", +"61150aae": "ethusd()", +"61161aae": "bury()", +"61162182": "storeDoc(string)", +"6116ec49": "VotingFinished(address,bool)", +"6117525b": "initialClaesOffering()", +"6117b80c": "getFixedAndShareFees()", +"6117c9db": "retainedTokensVault()", +"61186e23": "getCountdownDate()", +"611a20ae": "IotcToken(uint256,string,uint8,string)", +"611b4095": "isWhitelisted()", +"611c4662": "getPriceByDayIndex(uint16)", +"611c7f50": "Core()", +"611cb25f": "failStage()", +"611cb6aa": "Vault(address,uint256,uint256,uint256)", +"611daa7e": "EmergencyBalanceReset(uint256)", +"611eb470": "maximumICOCap()", +"611ef452": "cancelDelivery(string)", +"611efc09": "sale(address,uint256)", +"611f1fbe": "itsLikeChicago()", +"611f64f9": "setTokenPrice(uint128)", +"611f69de": "__proxy_motion(address,uint256,uint256,bytes)", +"611fd026": "showApproveToken(address)", +"61203265": "organizer()", +"6120ada7": "setAuto(uint256)", +"6120e125": "TUMIYUNTOKEN(uint256,string,uint8,string)", +"6120ffbc": "accountsPayableHeld()", +"61211087": "firstAuctionsHighestBidder()", +"6121e522": "teleportPrice()", +"612249fb": "communityContributionSupply()", +"6123218b": "registerPurchase(bytes32,address,uint256)", +"61235639": "AcreToken(address,address)", +"6123c63f": "removeEmbassy(address)", +"6123dfc3": "NoWinner(string)", +"6123f7ba": "onlyWithValidSignatureAndMethod(bytes)", +"61241c28": "setTokenRate(uint256)", +"612472fe": "toZT(uint256)", +"6124a577": "whitelistController()", +"6124e4e7": "dividendContract()", +"612544b3": "getReservedTokens(address)", +"6125fd20": "voteForRefund(bool)", +"6126cb99": "registerAsset(address,bytes32,bytes8,uint256,string,string,address[2],uint256[],bytes4[])", +"6127421d": "tokenPayments(address)", +"6127a1ad": "_setRarityValue1(uint256)", +"6127cfd9": "verify_withdraw()", +"6127f246": "getActiveTasks()", +"61282631": "tokenMintedSupply()", +"612845fc": "claimQueen(uint8)", +"612867c2": "calcRefund(bytes32)", +"6128a4f3": "investorsLosses()", +"61296540": "rewarded_refresh()", +"6129f25f": "setReferralPercent(uint256)", +"612a711f": "SimpleERC20Token(uint256,address)", +"612a7562": "setBountyRegistry(address)", +"612ab238": "balanceOfOnForHolder(address)", +"612acecc": "frozenForever()", +"612bfae2": "description4()", +"612c0968": "privateSaleRate()", +"612c56fa": "submitVote(uint256,bool)", +"612c9dea": "unreserveFor(address)", +"612d6061": "getExpectedMinReturn(address,address,uint256)", +"612d669e": "setMinStakingAmount(uint256)", +"612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", +"612e731d": "TheGreatEtherRace(string)", +"612eb5e7": "revokePermission(uint8,address)", +"612ecc48": "MINIMUMCONTIB()", +"612ed785": "winningTeamIndex()", +"612ee726": "isOnAuctionToBuy(uint256)", +"612ef473": "betRevealed(uint256)", +"612ef6e9": "isRefundApplied(uint256)", +"612ef80b": "marketLiquidity()", +"612f2f37": "setMaintenance(bool)", +"612ff19e": "PolicyPool(address)", +"61301409": "minereum()", +"61309e2a": "tryFinalizeProposal(uint256,address[],bool,int256)", +"6130ced2": "UniCoin(uint256,string,string)", +"6130d537": "createPartnerPlayer(uint256,uint256,uint256,address)", +"61314ee3": "managerAddressMap(address)", +"6132ca1a": "getResult(uint32,int8)", +"6133a0eb": "PRE_SALE_300_ETH()", +"61347782": "getStakingRegistry()", +"6135a0ad": "getCallback(bytes32)", +"6135e084": "myDividendTokens()", +"6135f602": "contractPartTwo(uint256)", +"61362b68": "reInitialize(address,address)", +"613696eb": "burnCadvsLeftInRefunding()", +"6137412c": "monethaGateway()", +"6137d670": "submitWhitelistRemoval(address[])", +"6138889b": "distribute(address[])", +"61389e8b": "getTokensManual(address)", +"6139a008": "numTokensLimit()", +"6139faa6": "getAllTimes()", +"613a626b": "SnipCoin()", +"613aa6e7": "ResetCardPriceAdmin()", +"613bc081": "ExternalAccountWalletConnector(address)", +"613c36ae": "sendToStocks()", +"613d8fcc": "oracleCount()", +"613de7cb": "subWizard()", +"613e0fb8": "reservationWallet()", +"613e2de2": "getContractInfo(bytes32)", +"613f4594": "totalBetAmount()", +"613f5b9f": "TokenContractAddress(address,address)", +"613f5fe8": "MAX_USER_TOKENS_BALANCE()", +"613f7665": "getClosedSaleWallet()", +"613f8dac": "sellShitClones()", +"613fd87a": "calcBigPromoBonus(uint256)", +"613fd998": "messageSpecial()", +"613ff46f": "rewardPerNode()", +"6140128f": "getTupleDetails()", +"61402596": "setInitialSupply(uint256)", +"6140af43": "preICOcollected()", +"6140c54c": "createProxy(address)", +"6140ca78": "setIsMiningOpen(bool)", +"6141b54b": "FundsWithdrawn(uint256,address)", +"6141d5d0": "CoffeeToken(address)", +"6142101a": "last_buyer()", +"61425d79": "numRequesters()", +"61426df4": "STCListing()", +"6142e78f": "allowedAmountTransferedToPoolTotal()", +"6142ff70": "createShipment(address,string,string,int256,int256,uint256,uint256)", +"61432e81": "ConsumeGas(uint256)", +"6143a80a": "isGameEnded(bytes32)", +"6143abba": "totalCreatedOfType(uint256)", +"6144a8a1": "ZJFPrivate()", +"61461954": "execute()", +"61463838": "getMyPlumbers()", +"61463b64": "_hashToAscii(bytes32)", +"61465a32": "distribute(uint256,uint256,uint256,uint256)", +"61472fd4": "CSGOBets()", +"61476d55": "GetTotalAmountForMultiplicator()", +"614781f9": "atkBoss(uint256)", +"6147a55c": "SwapPaused(uint256)", +"6147bcb9": "getPVPState()", +"6148fed5": "pollMap(uint256)", +"614939b2": "allocateTokensForTeam()", +"61493b97": "set_minimum_payment(uint256)", +"61494714": "_createNewGame(uint64)", +"61496b83": "endSplitAgreement()", +"614984d1": "getUnicornGenByte(uint256,uint256)", +"614a31bf": "setII_R2(uint256)", +"614af914": "_updateMargins()", +"614b3e7f": "BCSToken()", +"614baf5c": "withdrawAffiliateRewards()", +"614bbc33": "privateContribution(address,uint256)", +"614be0c4": "getRemainShareAmountInternal(address)", +"614cb904": "isFinalizeAgent()", +"614d08f8": "CONTRACT_NAME()", +"614d5f07": "stepForPrice()", +"614d85e1": "timeOut()", +"614f2b3a": "_diff(uint256,uint256)", +"614f3994": "SpeedyNetwork()", +"61515334": "returnUserAccountAddress()", +"615155dd": "getVesting(uint256)", +"61523f2e": "changeEthReward(uint256)", +"61537010": "Whitelisted(address,uint256,uint32)", +"6153b827": "BancorHandler(address)", +"6154274d": "deleteProposal(string)", +"61543801": "currentPeriodIndex()", +"6154c16f": "MineOwner(uint256)", +"6154db6e": "UroToken()", +"61558349": "BitTeamToken()", +"615664ba": "Market()", +"6156e892": "checkOnlyContractOwner()", +"61571ddd": "distributionFinishing()", +"6157c5ec": "getGoldInfoSku(address)", +"615815f5": "releaseSecondUnlock()", +"61584936": "sealedBids(bytes32)", +"615878c8": "SkrumbleCandyToken()", +"61591a7c": "personUpdateDOB(uint256,int256)", +"61592b85": "getOrderDetails(uint32)", +"615a4e0f": "ChangeMainAccount(address)", +"615a604f": "setMarketer(address)", +"615acbae": "Freeze()", +"615af5fb": "areTokensSended()", +"615c2971": "Gametest()", +"615dbebb": "setContract(address,address,address,address)", +"615df83a": "remainderHolder()", +"615dfa5c": "defaultParams()", +"615ea899": "changeHello(string)", +"615ef639": "tokensClaimedAirdrop()", +"615f9f1f": "testFailTransferNotEnabled()", +"615fa416": "totalAtom()", +"61616292": "STCBonus(uint256,uint256)", +"6161eb18": "_burn(address,uint256)", +"61625c3a": "setLockByPass(address,bool)", +"61632d4d": "institutionStageSetting()", +"616361a7": "getArrUintField3()", +"61638ed5": "depositFunds(uint256,uint256)", +"61641bdc": "add(bytes32,address)", +"61649472": "getPoolFreezePeriod()", +"6165234c": "setPermissions(address,bool)", +"61665e40": "_premoveByValue(address)", +"61669dfa": "setSpecialBonus(address,uint256)", +"61679629": "UniversalRewardProtocolToken()", +"616852e9": "GoldBought(uint256,address,bytes32,string,string,bytes32,string,string,bool)", +"61688a85": "Lwcoin()", +"6168ba3c": "getWeiAggregateMayInvest()", +"6168c9c3": "tosell(address,uint256,address,uint256,address,uint256,uint256)", +"6169a7ed": "CashForHardwareReturn()", +"616a0997": "TokenPurchase(address,address,uint8,uint256,uint256,uint256,uint256)", +"616a3420": "verifySig(bytes32,bytes,bytes)", +"616a6371": "SingleAccountRules(address)", +"616b40e3": "totalInvest()", +"616b59f6": "deleteBytes(bytes32)", +"616b829d": "SwappedTokens(address,uint256,uint256)", +"616c9469": "Finalized(address,uint256,uint256)", +"616ceda7": "setJOYTokenAddress(address,address)", +"616d1fab": "distributeToAlternateAddress(address,address)", +"616d5058": "userAccounts(uint256)", +"616d50c3": "GCToken()", +"616dcf0c": "calculateTotalSupply(uint256)", +"616e2fd0": "FortaToken()", +"616e9f8f": "getInterval(uint256)", +"616eba4a": "getLocksrootIdentifier(address,address,bytes32)", +"616f7bc9": "addAddressesSet(address)", +"616fbee7": "changeMinimumBet(uint256)", +"616fca9b": "adopt(address)", +"616fe92a": "emitFeePoolUpdated(address)", +"616ffe83": "read(string)", +"61708908": "prepareDisputeValid()", +"6170a23e": "transferTech(address)", +"6170b162": "join(bytes)", +"6170feec": "getWinIndex(address,uint256)", +"61711115": "RegistrationStatusChanged(address,bool)", +"61718141": "totalSupplyIsLocked()", +"61719785": "clockmaker()", +"6171d7fc": "adjustTotalCoins(int32)", +"61725795": "setAquaman(address)", +"6172c0df": "updateDeposit(address,uint256,uint256)", +"6172f071": "setIsAllTransfersLocked(bool)", +"6173a70c": "initRandom(address)", +"6173e456": "setAMLWhitelistedBulk(address[],bool[])", +"617421c9": "calTripleRoom(uint256,uint256,uint256,bytes32)", +"61751577": "addCET6(uint32,uint64,uint64,uint64,uint16,uint16,uint8,uint8,uint8)", +"6175adee": "icoStandardPrice()", +"6175bc9c": "preStartBlock()", +"6175f9e2": "dragonHandler(uint256)", +"617605a1": "Zillion()", +"61764f59": "BitDATAToken()", +"6176caed": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,bool,uint256)", +"617708dd": "getEscapeRequest(uint32,int256)", +"61774704": "verifyBid(bytes32,bytes32)", +"61775ee1": "onlyBouncerRemoveExtension(address)", +"6177a197": "GoGoPay()", +"6177fa04": "setGenerateAddr(address)", +"6178a8b1": "splitStarFunds()", +"6178ac90": "_createCompanies(bytes32[],bytes32[])", +"6178efee": "returnToken(uint256)", +"617914be": "AUTH_CHANGEOWNEDOWNER()", +"61794267": "oldExecuteDecayFunction(uint256,int256,int256,uint256,uint256)", +"61798287": "safeToNextIdx()", +"6179ed72": "ProofOfSecret()", +"617a0951": "feeModifiers()", +"617a2a15": "icoStartP2()", +"617ac9a1": "SOSRcoinToken()", +"617b293e": "getInvestStatus(uint256)", +"617b390b": "approvePreSigned(bytes,address,uint256,uint256,uint256)", +"617bb8f5": "reject(uint32,uint32)", +"617c2fb8": "sell_Exchg_Reg(uint256,uint256,address)", +"617d2c84": "PRIMEx()", +"617d3c47": "RemovalPriceSet(uint256)", +"617d6bb4": "distributeEarningsBasedOnNumberOfCells(address,address)", +"617e80b4": "getPlayerShipModelByIndex(address,uint256)", +"617ee3a7": "MoonInc()", +"617f171f": "reopenDO()", +"617f4e3e": "set_got_refunded()", +"617f8666": "testFailRestartNotOwner()", +"617fba04": "getRecord(address)", +"617fc592": "priceStages()", +"61806891": "idVerification(address,address,uint256)", +"6180e4ac": "getAvailableNumbersForRaz(uint256)", +"6181d565": "getExpectAmount(uint256,uint256,uint256)", +"6181fb0a": "ERC20(uint256)", +"618293ba": "_updateState(uint256,uint256)", +"61829677": "claimdivs()", +"61836b0e": "lastUpdateEtherPrice()", +"61837e41": "get_stats()", +"6183c5d6": "EthereumAI(address)", +"618407e5": "tokenDrain()", +"61840c69": "getSaleSold(uint256)", +"61851416": "modifyCurrentVideoGamePrice(uint256,uint256)", +"61851679": "Protecthor()", +"6185bb50": "AOC_available()", +"6186b3e3": "showMoneyTransfer(uint256)", +"6186fe71": "CloseForecasting(uint16)", +"6187ce34": "gameRandon2()", +"61886014": "combineDice(uint8,uint8)", +"61888b40": "_percentSoldInPreICO()", +"618943c3": "WhitelistItemChanged(address,bool,uint256,uint256)", +"6189be15": "columnround(uint256,uint256)", +"618a057a": "_bidFirstShip(uint256,address,address)", +"618a1ec2": "getGoldDepositOfAddress(address,address)", +"618b870f": "setAmount2Claim(uint256)", +"618c5772": "removeTransferableAddresses(address[])", +"618cb85b": "GitCoinCrowdsale(uint256,uint256,address,address)", +"618ce6d7": "setWhitelistedAddressMain(address[],bool)", +"618de286": "addWhiteListMulti(address[])", +"618ea1c4": "terra()", +"618fa9ce": "getBotBillingIndex(uint256,uint256)", +"618fb1a6": "unsoldContract()", +"61903971": "MajListAll()", +"6190c931": "unclaimedCreditsWithdrawn()", +"6190c9d5": "cycle()", +"6190e9ca": "authorizedTokenUsers(address,address)", +"61919a08": "getWorks(bytes32)", +"6191fe9d": "FFC()", +"61927adb": "setDelegatedFrom(address)", +"61930630": "tokenStore()", +"61931f39": "zGetBothContractBalances()", +"61936d0a": "Wings(address,address,address,address)", +"619385bd": "newShare(address,uint256)", +"619419d8": "setTopic(uint256,string)", +"6194416b": "getProof(string,string,string)", +"6194acb6": "_validateOrder(uint256,uint256,bytes32,address,uint256,uint256,uint256,uint256)", +"6195c713": "against_proposal()", +"61962265": "PRESALE_MAXIMUM_FUNDING()", +"6196ac5b": "RubidSupply()", +"619792ba": "OwnershipGranted(address,address)", +"6197aadd": "JANDA()", +"6197bbab": "createRareAuction(uint256,string)", +"61983863": "MintedTokenCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"6198e339": "unlock(uint256)", +"61990759": "maxRandom(uint256,address)", +"6199ca26": "AmbrosusSale()", +"619a794d": "setAtomIsReady(uint256,uint32)", +"619c83ed": "completeTransfer(uint256)", +"619c89fe": "changeForeignBridge(address)", +"619caafa": "Reward(address,uint256)", +"619cba1a": "requestEthereumChange(address,string)", +"619cec73": "DSHAckCoin()", +"619cf5f9": "batchtransfer(address[],uint256[])", +"619d2671": "acceptContract()", +"619d3063": "getNftId(uint256,address,uint256)", +"619d36ef": "DRAW()", +"619d5194": "setLock(bool)", +"619e6e7c": "userWalletTokenBalances(address)", +"619ebc4f": "GetTimeWeightedBet(uint256,uint256)", +"619f5e72": "takeExcess()", +"619fabfd": "addMultiplePublicSalesSpecialUser(address[])", +"619fc641": "backup_exchangeStaStb(uint256,uint256)", +"61a00f6d": "Ballot(bytes32[])", +"61a07bc9": "AhihiToken(address,address)", +"61a12160": "getPendingAddReserveData()", +"61a1d8fa": "SchmeckleToken()", +"61a215e4": "Controller(address,address,address,address)", +"61a227b6": "mtdAmount()", +"61a23f42": "loadReferredInvestors(bytes32[],address[])", +"61a2493a": "Jancok()", +"61a255b5": "vote(string,string,uint256,bool)", +"61a25f07": "lotteryFinished()", +"61a2d076": "isWhitelistOnlyPermissionSet()", +"61a39946": "depositAgent(uint256,uint256,address[],uint256[],uint256)", +"61a3a281": "deployDefaultVestingContract(address,uint256)", +"61a5c4bd": "updateTokenAmount(uint256)", +"61a65433": "pot_total()", +"61a65e2a": "discountSaleEnd()", +"61a71303": "setMainSaleTLYperETH(uint256)", +"61a76900": "decode(uint256)", +"61a7b2f5": "transferFromIco(address,uint256)", +"61a99c4b": "ethDeposits()", +"61aa19d3": "icoAmountBonus1()", +"61aa8d93": "processFee()", +"61ab8904": "updateStats(uint256,uint256,uint256)", +"61ad08b5": "setSupervisor(address,address)", +"61ad487c": "PRESALE_PERCENTAGE_3()", +"61adeef4": "setUUID4Bytes(bytes16)", +"61aebe59": "stopSell()", +"61af1abd": "increasePriceAndDifficulty()", +"61afc1d5": "IsActiveUser(address)", +"61afd5ac": "denyAccess(address)", +"61b121f5": "OneCoinOneBeerToken()", +"61b1bd04": "HumanEvent(address,uint256,address,address)", +"61b20d8c": "retrieveFunds()", +"61b2bb37": "setHalfLifeTime(uint256)", +"61b3516e": "MyCoins()", +"61b3b8e3": "p_setInvestorFundPercent_out(uint256,uint256)", +"61b46d61": "buyHunterLicence()", +"61b65fbe": "UpdateRank(address,uint256,uint256)", +"61b6683c": "destroyedBots()", +"61b69abd": "createProxy(address,bytes)", +"61b6f889": "handleOffchainWhitelisted(address,bytes)", +"61b7542d": "absMax(int256,int256)", +"61b79ea4": "incentiveDistributionRound()", +"61b7d7f4": "FiveBalanceToken()", +"61b87f0d": "getTokenAddressIndex(address)", +"61b8ce8c": "nextId()", +"61b930ae": "ICOfundsReceiverAddress()", +"61b94bc7": "LiverpoolvsRoma()", +"61b9739a": "setPayTo(address)", +"61b97435": "Register(address,bytes4,bytes18)", +"61b98cb3": "buyShips(uint256,uint256,bool)", +"61b9c6a3": "useBottle(address,uint256)", +"61b9c9f4": "buySeat(string,string,string)", +"61b9e2bb": "proveInUnconfirmedBalances(bytes,bytes32,bytes32)", +"61ba228b": "LukSevenToken()", +"61ba3377": "WatchLastTime()", +"61ba89d4": "NSCDistributionContract()", +"61bb246c": "secondBonus()", +"61bb9c52": "baseValue()", +"61bc1a49": "depositBalance()", +"61bc221a": "counter()", +"61bc6c57": "unauthoriseAddress(address)", +"61bcbe6f": "goodluck(uint256)", +"61bd12e0": "FAILED_STATUS()", +"61bdc978": "unfreezeFrom(address,uint256)", +"61be8456": "updateMarketData(address,address,uint256,uint256,uint256)", +"61beb1d7": "createAuction(address,uint256,uint256,uint256)", +"61bec256": "setContractActive(bool,bool)", +"61bec4fd": "QLANCEGO()", +"61bedcdc": "registerEmployee(address,address)", +"61bf2829": "RegistrationStatusChanged(address,bool,uint256,uint256,uint256,uint256)", +"61bf49ee": "plots(uint256)", +"61bf7692": "withdrawFoundationFunds()", +"61bf9c2a": "updatePoolContract()", +"61bfdc5d": "PatentCoinPreICO(address,address)", +"61bfe61b": "testAddUser(address,uint256)", +"61bffe01": "addIdentities(bytes32[],bytes32[])", +"61c003a7": "buyerNumDeals()", +"61c028e7": "getTokenURI(address)", +"61c083b9": "updateInflationRate()", +"61c1f224": "Q8ECOIN()", +"61c2c9c0": "getHowMuchUntilHardCap()", +"61c2e349": "create_a_new_market(address,address,uint256,uint256,uint256)", +"61c3b7f1": "setCharityBeneficiary(address)", +"61c52660": "Said(address,bytes)", +"61c5623d": "Vanadium()", +"61c61309": "setTokenController(address,address)", +"61c651b9": "oneQuarterInSeconds()", +"61c6a8e4": "addMutagenFace(uint256,uint256)", +"61c6bc82": "create(string,string,uint8,address)", +"61c748c7": "TressexToken()", +"61c76231": "resetBeneficiaryList()", +"61c7eb81": "Millionaire()", +"61c91c69": "webGiftLineTime()", +"61c9559b": "get_arbits_presale_open()", +"61c99b92": "msgsender()", +"61cac1fb": "partnersReward()", +"61cb5a01": "testString(string)", +"61cc576d": "evaluateOdds()", +"61cd5683": "testToByte(bytes)", +"61cd756e": "prevRegistry()", +"61cd90b0": "revealY(uint256,uint256)", +"61cdb1d7": "getByMesa(uint256,uint256,uint256)", +"61cdd2dc": "rightAndRoles()", +"61cec717": "changeCurrentCirculating(uint256)", +"61cf6d1c": "investeth2018()", +"61d027b3": "treasury()", +"61d0ad9e": "TransferFunds(uint256,uint256)", +"61d11318": "RedEnvelope()", +"61d161ea": "unitsPerTransaction()", +"61d3ba8a": "addWhitelistAddresArray(address[])", +"61d3d7a6": "isUpgradeAgent()", +"61d3d902": "getPlayerReferrerID(uint256)", +"61d43971": "updateGasCost()", +"61d49ea8": "reveal(uint256,uint256,bytes32)", +"61d51df8": "SKYSWAP()", +"61d5593c": "calculatePoohSell(uint256)", +"61d585da": "state(bytes32)", +"61d5f225": "minBetSize()", +"61d60021": "getCourseID(address,address)", +"61d61998": "implementsERC721YC()", +"61d689fa": "register(uint8)", +"61d68b54": "requestConsent(address,address,uint256)", +"61d6d385": "withdrawUnsold()", +"61d7c713": "validPayDest()", +"61d81aed": "exitBuyRequest(uint256)", +"61d942f3": "_removeLicenseTerms(bytes32,bytes32)", +"61d97c41": "GetPartyRole(address,address)", +"61da1439": "read(bytes32)", +"61da46c4": "joinDraw(uint256)", +"61db17ab": "_validatePurchase(uint256)", +"61dbbc80": "LARGE_PURCHASE()", +"61dbfc3f": "changeConfig(uint32,uint256,uint8)", +"61dc648f": "LogExternal(uint256,address,bytes32)", +"61dcd7ab": "createTime()", +"61dd8d13": "DexAlpha()", +"61ddf923": "_getTokenAmount(address,uint256)", +"61df46f6": "DatCoin()", +"61df5c4d": "getEncounterResults(uint256,address)", +"61dfacf2": "removeBuildingFromServer(uint256,uint8[10],uint8[10],uint8)", +"61dfdae6": "setData(address)", +"61e01356": "randNonce()", +"61e062a4": "_emitHardcapFinishedManually()", +"61e0f7a8": "swypeCode(address)", +"61e1077d": "decreaseApprovalWithSender(address,address,uint256)", +"61e1fe91": "setFreeDino(uint16)", +"61e214d8": "isValidPurchase(uint256)", +"61e25d23": "numActiveTranscoders()", +"61e3564f": "approveAccount(address,bool)", +"61e360b7": "maximumIndividualCap()", +"61e3c944": "setUint(uint256,uint256)", +"61e3f0a4": "setTimeBasedBonus(uint256[],uint256[],uint256[])", +"61e42039": "priceString()", +"61e49344": "buyinReturn(address)", +"61e4a23a": "expireGame(uint256)", +"61e4fd2b": "approveEscrow(address,uint256)", +"61e539da": "testFailWrongAccountTransfers()", +"61e5f5f2": "balEth()", +"61e60550": "TransactionDisputed(uint256)", +"61e6e66b": "DestroyedBlackFunds(address,uint256)", +"61e76056": "denyByDelegate(bytes8,bytes8)", +"61e7662b": "getAccountSpendingLimit(address)", +"61e88f9a": "test_0_validOwner_construction()", +"61e8ee04": "TOXTToken()", +"61e91ea1": "getDataContractAddress()", +"61ea6ed7": "transferFromBase()", +"61eb2e1a": "UNITStagesManager(bool,address)", +"61eb3836": "getProjectStatus(address)", +"61eb71c1": "setSellable(bool)", +"61eba552": "getMetaData(uint256)", +"61ecc8b5": "isLogo(address)", +"61ed2094": "demicals()", +"61ed373b": "comment(uint256,bytes32,bytes32)", +"61ed8097": "SEOToken()", +"61eda968": "cancelAssessment()", +"61edfe6e": "p_setBankOfEthProfitPercent(uint256,uint256)", +"61ef265b": "spaceAfterReturns()", +"61ef669b": "dateTier2()", +"61ef8d91": "setErc20Rate(string,uint256)", +"61efc7db": "resolveDelegation(address,address)", +"61efc807": "transferbatch(address[],uint256[])", +"61f00da2": "OMIVIAToken()", +"61f127dd": "_price_tokn()", +"61f134fa": "OZRealestatesToken()", +"61f15236": "addHolder(address,uint256)", +"61f17532": "tune(uint256,uint256)", +"61f188de": "createTree(string,string)", +"61f1c5ba": "vaultWallet()", +"61f1d889": "setFlag(uint256,uint256)", +"61f2c8b0": "_addShareToNewOwner(address,uint256,uint256)", +"61f2de50": "spawn(uint256,address)", +"61f30408": "emitTimeAdded(uint256,uint256)", +"61f37dff": "calculateIcoTokenAmount(uint256)", +"61f3c006": "setRoundMaxPerUser(uint256,uint256)", +"61f3c62e": "remain()", +"61f3cfb1": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256,string)", +"61f43285": "gubberment()", +"61f529af": "initEthMultiplicator(address)", +"61f54a79": "getNextUnsortedOffer(uint256)", +"61f61867": "addSettingDeprecation(uint256,uint256,address,address,address)", +"61f66dc4": "updateUserClaim(address,uint256)", +"61f6b429": "myAvailableFunds()", +"61f70161": "placeOrder(bytes16,address,address,uint256)", +"61f7025f": "fetchBalanceByAddress(address[])", +"61f721e8": "HGFCToken()", +"61f76d67": "withdrawEtherToOwner()", +"61f82156": "receiveCashback(uint256,address)", +"61f8cdd6": "transferETHToContract()", +"61f8e91a": "unitTestModifyStaker(uint256,uint256)", +"61f9ca4d": "modifyGroup(uint256,string,string,string,uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"61f9e04d": "getWithdrawn(uint256)", +"61faee9e": "noTransfer(address)", +"61fba37d": "investorBalanceOf(address)", +"61fbdf4e": "gameIsCalculated(uint256)", +"61fc3790": "Monthprofitend()", +"61fc65a0": "checkBirth(uint256)", +"61fc703c": "Danku_demo()", +"61fd718f": "getOrderAllocatedToFundPool(uint256)", +"61fd8f1b": "sendTokensToCompany()", +"61fda640": "ownerUpdateContractBalance(uint256,uint256)", +"61fdfa9b": "returnDeed()", +"61fe51a1": "rootAuthority()", +"61fec3a4": "clearSponsorableJobApprovals(address,uint256,address[])", +"61ff715f": "deploy(uint256,bytes)", +"61ff8191": "CirculationEnabled()", +"6200979e": "AngelInvestmentAddr()", +"6201124f": "employeeDenyExerciseOptions()", +"6201510a": "getPreSaleRank(address,uint256)", +"62016083": "removeDestinationChain(bytes8)", +"62017ebc": "left46(uint256)", +"6201d683": "createTokenUri(string)", +"62024dce": "forceCrowdsaleRefund()", +"62026229": "validateLand(address,int256[],int256[])", +"6202745f": "specialPeacefulSkills(uint256)", +"62027c1e": "changeCJTeamWallet(address)", +"620346c6": "setStopReceive(bool)", +"6203f09f": "MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE()", +"62040de3": "numberOfBoardMeetings()", +"62040e50": "Bitscreen(bytes32,uint8,uint8,uint8,uint8,string)", +"62043bd8": "DIVIDER()", +"62059839": "_setOwner(uint256,address)", +"62066eb3": "getMinimumAmount()", +"6206880b": "contributorsLockdown()", +"62074c31": "getProjectMaker(bytes32)", +"62075af4": "giff(uint32,address)", +"6207c802": "getSubjectIdentById(uint256)", +"6207d239": "privSaled()", +"620892bd": "NRB_address()", +"620a9c95": "BITSToken(uint256,string,uint8,string)", +"620b0f23": "getMyAnthill()", +"620b2731": "_getClientProviderUID(address)", +"620b5cd2": "Crypto()", +"620b75df": "portfolioManager()", +"620d025c": "roundFunds()", +"620db609": "rubyToken()", +"620eb8ee": "setDisbursementEndTime(uint256)", +"620edb32": "allocatePrivateToken(address[],uint256[])", +"620ffe99": "testFooUdate(uint256)", +"6211db22": "querybalance1()", +"621277cb": "hardCaps(uint256)", +"62133a6c": "getPlanetName(uint256)", +"62135491": "distributeTokensToMembers(uint256,uint256)", +"62150b3f": "KaoPuToken(address,uint256)", +"6215be77": "depositToken(uint256)", +"6215f292": "updateBasePrice(uint256,uint256[],uint256[],uint16)", +"62161235": "getRandomNumber(uint16,uint8,address)", +"6216bde5": "TokensRewarded(address,address,uint256,address,uint256,uint256)", +"6217229b": "sellRate()", +"62173282": "updateMVNRate(uint256)", +"6217903f": "BNB_TOKEN_PRICE_NUM()", +"62182636": "setParams(uint256[],uint256[])", +"6218e5cd": "setGuardianVend(uint256,uint256)", +"6218fd8b": "icoEndsAt()", +"6219004d": "setPosttgeAddress(address)", +"621a25f8": "right66(uint256)", +"621a61ac": "STATE_NOT_FINISHED()", +"621ab11a": "bonustokn()", +"621b23e2": "getOwner(uint32)", +"621bc379": "setReverseRate(address,int16)", +"621bd8d7": "getPreviousReportingWindow()", +"621c3275": "disembark(uint16,uint16,uint256)", +"621d388c": "senderIsAdmin()", +"621de5ac": "AUSBToken()", +"621ded8b": "FinishCompetitionEvent(uint32)", +"621df4be": "getCurrentElectionCycleBlock()", +"621e9a45": "BAQToken()", +"621f7e45": "setPeriodRound(uint256)", +"621fb946": "getLLV_edit_27()", +"62205bd8": "privatesaleFinalized()", +"622104d9": "integration()", +"62219866": "getPercent(uint256,uint256)", +"6221c805": "supplyRound3()", +"6221dc20": "HackableETH()", +"6221e77b": "Logs(address,uint256,uint256)", +"622235e6": "getPage(address[],uint256,uint256,bool)", +"62228c17": "CTADevilleToken()", +"62246c41": "setNickName(bytes32)", +"62251182": "_withdrawOwnerTokens()", +"6225924e": "_mint(bytes32)", +"6225a8ad": "GetResult(uint256)", +"6225b759": "setForceExecuteOfUsers(bool)", +"6226bddb": "getProductStructById(uint256)", +"6226d4b2": "addAddressToAdmin(address)", +"6227ed6e": "createPerson(string,string,uint256,uint256,uint256)", +"6227fd3a": "firstItemWrong()", +"622a0a19": "playerBudget()", +"622a10fd": "CORECoin()", +"622a2d31": "setDistanceAndPrice(uint16,uint16)", +"622ac8ed": "countWishesAt(address)", +"622ae7aa": "getDeployedTokens()", +"622af809": "setMintContactAddress(address)", +"622b0b29": "StakeEvent(address,uint256,uint256,uint256)", +"622b2a3c": "validDelegate(address,bytes32,address)", +"622b6659": "doBigDrop(uint256,uint256,uint256,uint256)", +"622c77fe": "totalSupplyLocked2Y()", +"622d6c97": "ExecutionError(string)", +"622d82df": "Buddha()", +"622dda96": "chooseRandomNumber()", +"622ddaba": "getGenesForSaleBySeller(address)", +"622e5026": "Insurance()", +"622e88cb": "testBitsXorSuccess()", +"622f9730": "forward(bytes,address,address,uint256,bytes,address,uint256)", +"622fe39f": "getLoanData(uint256)", +"6230ebda": "defrostFrozenTokens()", +"6231775b": "miniGameId()", +"623195b0": "setABI(bytes32,uint256,bytes)", +"623406d2": "setRecordContract(address,address)", +"6235e3a2": "getAddressCreatorById(bytes32)", +"6235eef3": "getCurrentReportingWindow()", +"62362cc2": "COIN_SUPPLY_TOTAL()", +"623659b4": "doTransfer(address,address,uint256,uint256)", +"623670b2": "sendTokensToPartner()", +"62373537": "current_start_divholder()", +"6237564c": "isDopeRaiderDistrictsCore()", +"6239f13d": "triggerSoftCap()", +"623ba5c9": "callBackGasAmount()", +"623d2295": "Minado(address,address)", +"623d2b62": "getRequiredBetAmount(uint256)", +"623d5652": "projectExists(address)", +"623d5e56": "devolverBici()", +"623d96ed": "preDuration()", +"623decaa": "unlockedTokensOf(address)", +"623e4fb8": "BBCToken()", +"623eff55": "tokensTransferred()", +"62400e4c": "supplyOf(address)", +"6240282c": "LiquidDemocracyControllerFactory(address)", +"6240c7aa": "COENXToken()", +"6241bfd1": "Token(uint256)", +"6244326d": "humanityFund()", +"6244b7ed": "unWhiteListInvestor(address)", +"624522f9": "accountFrozen(address)", +"6245adff": "DirectlyDeposited(address,uint256)", +"6245eb07": "setProvenance(address,uint256)", +"62463079": "tier2End()", +"62464576": "stage_2_add()", +"62465f0a": "GenesisManager(address,address,address,address,uint256)", +"62469353": "firstDepositTimestamp()", +"6247c38f": "updateChargingRate(uint256)", +"6247cfd9": "priceForKeys(uint256,uint256)", +"6247f6f2": "whitelistToken(address)", +"62486d42": "getTokensAmount()", +"6248cf49": "_donationSupply()", +"6248d6bf": "getOracleMetaData(address)", +"6248fd10": "SLC()", +"62491332": "lockPurchase()", +"62492e9d": "preIcoBonus()", +"624964c3": "getBancorContractAddress()", +"6249a5c7": "UnpauseEvent()", +"624a8bc3": "MyTotalWithdrew()", +"624aba21": "_getWinCountWeight(uint256)", +"624adc4c": "OwnershipTransferCompleted(address)", +"624ae5c0": "rID_()", +"624ba0a4": "maxImports()", +"624bb58f": "marketingSupply()", +"624bb8b3": "setCBaddress(address,address,address)", +"624bd6c4": "depositToken(address,uint16,uint256)", +"624c3dbd": "imageUploadComplete(uint256)", +"624c5673": "USDollars()", +"624cc0a5": "teamMemberAtIndex(uint256)", +"624d4309": "USBcoin()", +"624dd6a9": "getInvestmentsByCountry(uint16)", +"624de3d9": "InterfaceSignature_ERC721Optional()", +"624dee7c": "_release(address,address,uint256)", +"624e3b36": "totalearners()", +"624ecda9": "Sleep()", +"624f011d": "doStop()", +"62502169": "sendCollateral(address,uint256)", +"62502fe7": "getNameDigest(string)", +"6250bfa3": "createOrder(bytes32,bytes32,address)", +"625101d5": "getOwnerMoney()", +"625126ed": "shift_left(uint32,uint32)", +"6251aee6": "icoPhase3End()", +"625295fd": "distributeCollectiblesTo(address)", +"6252c127": "onCrowdsaleEnd()", +"6252d651": "setForegroundColors(bytes3[])", +"62531721": "getStack(uint256)", +"6253367a": "queryChallenge(bytes32)", +"6254add1": "PRIVATE_SALE_POOL()", +"6254cf80": "setGameHostAddress(address)", +"62564c48": "getProposals()", +"62568d83": "min_buy_block()", +"62571cac": "getTodayOwnerName()", +"625785bb": "productionCardIdRange()", +"62581b79": "CubaazCoin()", +"6258683e": "devMiningRewardTransfer(address,uint256)", +"6258d524": "saveEther()", +"62598ae6": "PaymentExpected(bytes8)", +"62599964": "usesThem()", +"625a6726": "fixClock(bytes32,uint64)", +"625adaf2": "setTokens(address[])", +"625b666c": "Luxury()", +"625b8e60": "_redeemByPartition(bytes32,address,address,uint256,bytes,bytes)", +"625bc37b": "releaseTeamTokensAfter12Months()", +"625becbc": "showLockState(address)", +"625cbb23": "setWhiteListAddresses(address)", +"625cc465": "baseDonation()", +"625cfc46": "sellRateZeroQuantity(uint256)", +"625d1fe2": "viewSecondBatchOfClauses()", +"625fcce7": "dealer_cut()", +"625fe9ec": "updateCrowdsale(uint256,uint256,uint256,uint256,uint256)", +"6260f55b": "ETH_USD()", +"62612c6d": "PatronTwoWithdrawal()", +"62614ae6": "BNT_CONVERTER()", +"6261c662": "bonusStart()", +"626263c5": "calculateEthToChargcoin(uint256)", +"626340b2": "block0()", +"626452df": "test_feePoolShare_noClaimableStake()", +"6266e135": "Gmt()", +"62674e93": "getStepFunctionData(address,uint256,uint256)", +"62676d78": "RANGEEND_8()", +"6267967b": "batchReservedTokenAllocation(address[],uint256[])", +"6267c456": "organizer7()", +"6268a0cd": "stakeSDC(address,address,uint256)", +"6268e921": "acceptGame()", +"6269420e": "seedAndPresaleTokenIssuedTotal()", +"62694b68": "lastSignedBlockNumber()", +"62695eae": "allowedTransfer(address)", +"62697f69": "getLLV_edit_17()", +"6269ae48": "tokenToContributor()", +"6269f9fc": "getGameId(string,string,uint16,uint64)", +"626a0e1c": "addSoundEffect(uint256,uint256[])", +"626a413a": "activateBounty(uint256,uint256)", +"626b1070": "beneficiaryDeposit(uint256)", +"626be567": "totalToken()", +"626c0a45": "stock(uint16,uint16,address,uint256)", +"626c6bc6": "ETO()", +"626d0358": "setTokenDefaultPartitions(bytes32[])", +"626d4a36": "right55(uint256)", +"626d666c": "theDao()", +"626e4675": "directorLockDays()", +"626e8fd3": "setBonusDate1(uint256)", +"626ebe39": "toggleReceiveEth()", +"626f9e20": "calculateMaxEthIssued()", +"626fc458": "finalizeTrade(address,uint256,address,uint256,uint256)", +"626fd353": "getSelection(uint256)", +"627045bf": "changeActiveNameIndexTo(uint256)", +"6270b780": "DebitClient(address)", +"62714a14": "getPhone(address)", +"62715547": "castVote(bytes32[])", +"62721129": "getMultiSigWallet()", +"6273106a": "payoutPool()", +"62731ff1": "onDeposit(address,address,uint256,uint256)", +"62735618": "finalizedCapital()", +"62738998": "getInt()", +"62744fee": "PallyCoin()", +"6274a35c": "team_total_lock_days()", +"6274ca4b": "setWeiPerUSDinTGE(uint256)", +"62751a06": "SFT_PER_ETH_FIRST_EARLY_BIRD_RATE()", +"6275448e": "batchApprove(address,uint32[])", +"62754563": "CelebsParty()", +"62765eb7": "receiveApproval(address,uint256,address,string)", +"6276b368": "rateOfCharging(address)", +"62770252": "needsFuneral(uint256)", +"62773951": "TrustReso(uint256[3],address,address,address[])", +"627749e6": "closeTime()", +"62779e15": "payFees()", +"62797ef5": "dayPotHighscore()", +"627992c7": "VULCAN_POD_MAX_CARGO()", +"627a326b": "getBytes32Slice(bytes,uint256)", +"627a3311": "QvoltaToken(address)", +"627aa6d2": "buyAndTransfer(address,address,bytes,uint8)", +"627adaa6": "revealMulti(uint256[],uint256[],uint256[],bool[],bytes32[])", +"627b3d9a": "BTCAUC()", +"627c2516": "WizardsvsCeltics()", +"627c2d1e": "getTX()", +"627c34ad": "removeSubscriber(address)", +"627c81ff": "erc20ContractByIndex(uint256,uint256)", +"627d6f9f": "get_multiple(uint256,uint256)", +"627e64d2": "getQuote(address,uint64)", +"627e667b": "StandardToken(address,uint256)", +"627eb56c": "setMaxContributionPhase1(uint256)", +"627f09c3": "setConfiguration(address)", +"627f22fe": "GiftMetadata(uint256)", +"627f47c6": "transferWithLock(address,uint256,uint256[])", +"627fd3bb": "addCbAddress(address,bytes1)", +"6280382a": "cancelTrade(address,uint256,address,uint256,uint256)", +"62806296": "transfer_coins(address,uint256)", +"6280b0bb": "batchRegularTransfer(bytes32[],bytes32[])", +"6283051f": "setOraclizeQuery(string)", +"6283440b": "wingsTokensReserv()", +"62838d8b": "getLastAddress(bytes32)", +"628392bd": "bonusPhase1()", +"62848f36": "tokenRate30()", +"6284ae41": "exitFee()", +"6284fd22": "getMyPubKey(bytes32)", +"62850233": "transferWithDividends(address,uint256)", +"6285a259": "calculateTokensEnabledOne(address,uint256)", +"6285d703": "NERO()", +"6288020f": "endThirdWeekICO()", +"6288a63c": "NotaryChain(uint256)", +"6288a9a3": "maxUserContribution()", +"62890063": "WhitePrivilegeToken()", +"62891b5d": "multiAccessChangeRequirement(uint256)", +"6289fdbe": "VenomToken()", +"628a01ce": "stakingMintRate()", +"628b75bf": "slashDownRequest(uint256,address,uint256,bytes32)", +"628c225c": "roomNight(uint256)", +"628c2778": "DEXToken()", +"628c866e": "setCurrentActiveGameID(uint256)", +"628d5ef1": "setWeiUsdRate(uint256)", +"628da35e": "get_termAmount(uint256)", +"628dda8d": "VDGToken()", +"628e50b5": "brokerFee()", +"628e7a38": "_initializeVesting(address,uint256,bool)", +"628eaa88": "GeocashToken(uint256,uint256,uint256,address)", +"628ee84f": "in_dispute_phase()", +"6290a009": "bids_sorted_count()", +"62932301": "importer()", +"62935a98": "getContractDataSK()", +"6293a989": "TRONVSupply()", +"6293b5bb": "presaleMaxEtherCap()", +"6293fd1e": "payBack(address)", +"6294f858": "distributeFinancialAward(address[],uint256[])", +"6295c61a": "transferItem(address,address,uint256)", +"6297c16c": "deleteToken(uint256)", +"6297dbf4": "existsMesa(uint256)", +"62981b18": "deployBallot(bytes32,bytes32,bytes32,uint64[2],bool[2])", +"62985882": "VSTA(string,string,uint8,uint256)", +"62985b87": "NebuliToken()", +"62986e27": "Canary(address,uint16)", +"629873b2": "createRequestAsPayeeAction(address[],address[],int256[],address,address,string)", +"6298c93a": "usdCap()", +"6299a6ef": "update(int256)", +"6299f8cf": "stop(uint256)", +"629a9ce7": "coreTeamUnlockedAt()", +"629ad124": "chancesBought()", +"629aef56": "QuintToken(address)", +"629b656e": "PryzeToken()", +"629b9cb1": "takeProjectBonus(address,uint256)", +"629bc0b4": "getPlayerPayout(uint256)", +"629bf9a8": "updateMinMaxBetPrice(uint256,uint256)", +"629c1b67": "SoftCapReached()", +"629c37c2": "HSShopSaleFee()", +"629cefee": "adjustTiming(uint256,uint256)", +"629d0f2f": "teamd()", +"629d93db": "removePromo(bytes32)", +"629e89a0": "setMinDai(uint256)", +"629f1486": "YoonContract()", +"629f4028": "getVoteNum(address)", +"629f4b3b": "StatsTotal()", +"629fb53d": "getOrderbookLength()", +"62a09477": "changeOwner()", +"62a0b56b": "testUnset()", +"62a1029c": "YUPIE_PER_ETH_PRE_SALE()", +"62a144d9": "safeMod(uint256,uint256)", +"62a17a46": "AXPCoin()", +"62a31c4a": "dynamicLength(bytes4,bytes)", +"62a36a54": "Application()", +"62a39ff7": "setShareHolder(address)", +"62a44fe9": "has_voted()", +"62a49ae3": "depositTokensFor(address,uint256,address)", +"62a4b230": "setLockedRatio(uint256)", +"62a4be31": "buyTokensByProxy(address)", +"62a4cd14": "endFunding(uint256)", +"62a51eee": "move(uint80,uint80)", +"62a52ed6": "set_price(bytes12,uint256)", +"62a59ade": "distributePuppyCoinCLarge(address[])", +"62a5af3b": "freeze()", +"62a76ce1": "accrueAdvisorsTokens(address,address,uint256)", +"62a7c5a6": "nextWithdrawDayFoundation()", +"62a80b42": "newToken(string,address)", +"62a87466": "STATE_DONATION_ROUND_1()", +"62a974b6": "vote01NoCount()", +"62aa9a00": "enehtoken()", +"62aabb9e": "SafeToken()", +"62aac84d": "setHaltSale(bool)", +"62aaf089": "getExchangeRate(uint256)", +"62ab1216": "updateWithOracle()", +"62ab8cc1": "howMany()", +"62abb560": "transferSuperOwnership(address)", +"62abda69": "totalIssuanceDebt()", +"62ac6115": "updateRequireKYC(bool)", +"62aca822": "setNation(address)", +"62ad1b83": "operatorSend(address,address,uint256,bytes,bytes)", +"62ad9bda": "newProvider(address,string,bytes32,uint256)", +"62addeed": "HumanX()", +"62ae4d29": "OBIMOLOGIA()", +"62aecc47": "totalBondSupply_BULL()", +"62aee544": "ADVISOR_SHARE()", +"62afd64a": "unpaidPercentage(bytes32)", +"62aff4d5": "commitPeriodStartedTimestamp(bytes32)", +"62b08e70": "setVotingContractAddress(address)", +"62b0ae87": "pack(bytes)", +"62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", +"62b26f95": "totalFish()", +"62b3b833": "createCoupon(string)", +"62b40489": "businessPlannedPeriodEndTimestamp()", +"62b40918": "addPersonalCaps(address[],uint256)", +"62b40f9f": "destroy(address,address)", +"62b45318": "exchangeEtherForNominsAtRate(uint256)", +"62b4faa7": "Edujano(uint256,string,uint8,string)", +"62b52b49": "LADCToken()", +"62b6a282": "left42(uint256)", +"62b6a963": "_batch2_icosaleEndTimestamp()", +"62b6dc8e": "RektToken()", +"62b78bc4": "team_coins()", +"62b83c6b": "balanceAsCreator()", +"62b96a18": "teamUnvested()", +"62ba1649": "stopLottery(bool)", +"62ba4aef": "payInvoice(bytes32,uint256)", +"62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", +"62bb7533": "getTokenToEthOrderList()", +"62bb758f": "userSecurity(address)", +"62bc56e6": "getCompany(address)", +"62bc63c4": "getCozyAgain(uint256)", +"62bca778": "withdrawalFX(uint256)", +"62bd689c": "setBonusPercent(uint256)", +"62be3172": "Message(address,address,address,string)", +"62beaa82": "toData()", +"62bf6fa7": "medalDecimals()", +"62c01b2d": "apply_compensation(uint80)", +"62c06767": "sweep(address,address,uint256)", +"62c0e3b7": "SpoutMintableToken()", +"62c0ffa8": "getDCountedBasicBallotID(bytes32,uint256)", +"62c13ff3": "initSale(uint256,uint256)", +"62c19061": "getYearDay(uint256)", +"62c1adb0": "KittenCoin()", +"62c1f389": "swap(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", +"62c24067": "blockFunds(uint256)", +"62c2b7c8": "getTTTAddress(string)", +"62c335c1": "checkCallback(address,uint256,bytes,bytes)", +"62c375a7": "library15function()", +"62c3dd5a": "prepareForRefund()", +"62c3fdb2": "getFundsOwner(bytes32)", +"62c47064": "setArbitrator1and2(address,address)", +"62c48e20": "capFiatAndETH()", +"62c49256": "whitelistBasketFactory(address)", +"62c4c89e": "getMixParticipantByPubKey(uint256)", +"62c509c3": "XYTgas()", +"62c5aecc": "getEthToTokenAddOrderHint(uint128,uint128)", +"62c5c03a": "getbalance(uint256)", +"62c5c254": "changeFounderMultiSigAddress(address)", +"62c63e31": "NotFinalized(bytes32,bytes32)", +"62c655f5": "removeVoters(uint256[])", +"62c6beea": "_buy(uint256,address,uint256)", +"62c7855b": "getConfigBytes(bytes32)", +"62c7e96c": "deathData_f16()", +"62c7fa76": "lockStartTime()", +"62c95aa1": "getMaxTickets()", +"62c99e84": "_Approval(address,address,bytes32)", +"62c9da62": "setCompte_1(string)", +"62caf484": "GDCAcc03()", +"62cb1ac2": "validateOrderHash(bytes32,address,uint8,bytes32,bytes32)", +"62cdd872": "verifySignatures(uint8[],bytes32[],bytes32[],bytes32)", +"62ce071c": "publicTokenCap()", +"62ce7043": "reloadEarnings(uint256,uint256)", +"62cee7ad": "staffInfo()", +"62cf0197": "getVIATokens()", +"62cf54c8": "setDeposits(uint64,address,uint16,uint64)", +"62d020d9": "addVersion(address,string,string)", +"62d027bf": "GXVCSentByToken(uint256,address,uint256)", +"62d05c78": "cancelOffer()", +"62d0af7a": "set_BCDB_contract()", +"62d0ce45": "TOKEN_RATE_05_PERCENT_BONUS()", +"62d176cb": "buyTokens(bytes32,address)", +"62d1dac2": "setUnofficialApplicationSignUpFee(uint256)", +"62d1fee3": "addLegitDevAddress(address)", +"62d21602": "bkaddress()", +"62d246a4": "getBetsMas(uint32)", +"62d2c393": "GenkiProject()", +"62d2ecb9": "setMaxSpend(uint256)", +"62d3755b": "fullTokenWallet()", +"62d3b5c5": "maxAmmount()", +"62d55b6d": "VOTING_TIMESPAN()", +"62d576bd": "periodITO_mainCapInUSD()", +"62d590ac": "GrantToken(address,uint256,string)", +"62d5acb1": "rebateOneFenzi_()", +"62d6b7fb": "percentageOfRaisedAmountThatRemainsInContract()", +"62d7216c": "unregister(uint256,bytes)", +"62d72c08": "RozowkaCoin(uint256,string,string)", +"62d73eb8": "startElection()", +"62d91855": "delAdmin(address)", +"62d93527": "setBrokerFee(uint256)", +"62d966c9": "changeEmployee(address)", +"62d9c267": "ICOEnded()", +"62dbc55c": "DevTokensHolder(address,address,address)", +"62dbdfef": "CompanyToken()", +"62dbf261": "getTokensForEther(uint256)", +"62dc0133": "HIGHER_PRICE_RESET_PERCENTAGE()", +"62dc6e21": "PRESALE_PRICE()", +"62dc9ced": "Roulette(uint256)", +"62dd748c": "toUpper(string)", +"62dd9c71": "checkWinNobody(uint32)", +"62de871e": "startBattle(string)", +"62df5b7d": "BD0Token()", +"62e05175": "setMotionDB(address)", +"62e1de00": "test_polarBoardInstance()", +"62e23e9e": "NAME_NOT_AVAILABLE()", +"62e26e45": "loanCompleted(uint256,uint256)", +"62e28f7d": "channelModule(uint64)", +"62e2aa00": "burn(uint256,string,uint256)", +"62e2d0de": "get_foo()", +"62e4aeb8": "customExchange(address,address,uint256)", +"62e534d2": "setBlocklancerToken(address)", +"62e5b1f2": "_owns(address,address,uint256)", +"62e69886": "RecipientUpdated(address,address)", +"62e6e7c7": "disTrustDealer(address)", +"62e76013": "management(uint256)", +"62e7707e": "whitelistAddresses(address[],bool)", +"62e7ba3f": "consumptionPointer()", +"62e838ef": "returnBet()", +"62e881a4": "nextTournamentRound()", +"62e888bb": "STRIKE_PRICE()", +"62e8b948": "stepOneLockEndTime()", +"62e8e8ac": "changeTokenPrice(uint256,uint256)", +"62ea82db": "bids(address)", +"62eb0068": "redeemByPartition(bytes32,uint256,bytes)", +"62eb33e3": "cr()", +"62eb4c89": "is_started_payouts()", +"62eb5789": "setLLV_edit_33(string)", +"62eb6da1": "registeredToken()", +"62eba54c": "doesUserOwnItem(address,uint256)", +"62ebcdcf": "setRtmContract(address)", +"62ec8e53": "adminAddBallot(string,uint256,uint256)", +"62ed4f04": "SSBToken()", +"62ee0082": "setTokenContractsAddress(address)", +"62ee37aa": "InfluToken()", +"62ee4b26": "AUORANEX()", +"62ee6d29": "changeHashtoLowOrHigh(uint256)", +"62ee7b03": "startTakeToken()", +"62ee922b": "unofficialApplicationSignUpFee()", +"62ef0e65": "withdrawPresale(address[])", +"62ef1f81": "confirmPayment()", +"62ef7738": "total_money_back()", +"62f03290": "payRefund(bytes32,uint256)", +"62f2296e": "_transfer(address,address,uint256,string)", +"62f3ed92": "PowerQuantumCoin()", +"62f3febf": "isUserBlockedByContract(address)", +"62f44d8a": "Dadyys()", +"62f4ed90": "isAuthorized(bytes32)", +"62f54c18": "removeAllowedTokenInternal(address)", +"62f57ff6": "GudTesteContratoF()", +"62f5a23f": "transferToToken(address[])", +"62f5aa4c": "getAirdropIds()", +"62f5c2e3": "maxContributionPhase1()", +"62f5ed61": "add_to_bounty()", +"62f60954": "_reAdjustDifficulty()", +"62f63c6e": "EarthMedz()", +"62f69039": "unlockVault()", +"62f6cf7f": "getRegisteredModuleAt(uint256)", +"62f91eff": "AnythingAppToken()", +"62f927d4": "getDefaultReportingFeeDivisor()", +"62f96fc1": "splitBalanceAccordingToRatings(int256,int256,int256)", +"62fb09b2": "getRefDescr(uint256)", +"62fb0ff8": "morties_TO_HATCH_1RickAndMorty()", +"62fb6fe1": "getMonster(uint256)", +"62fb9697": "diffSeconds(uint256,uint256)", +"62fc178b": "gasPriceOraclize()", +"62fca3fa": "mintTokenBulk(address[],uint256[])", +"62fdaf1d": "removeFromBattle(uint64)", +"62fde48a": "LogDeposited(address,uint256)", +"62fe3b4d": "setEndOfPresale(uint256)", +"62fec51b": "icoEndTimestampStage2()", +"62feff3a": "developerAllocation()", +"62ffb195": "REFERRAL_REWARD_PERCENTAGE()", +"62ffb3bf": "trueUSD()", +"630061f3": "getTokensDistributeds()", +"6300c768": "takeEther(address,uint256)", +"63018e1a": "minTokensToSale()", +"63036f86": "totalIssuedEarlySale()", +"63037b0c": "payees(uint256)", +"6304335b": "betsCloseAt()", +"6304fa3a": "Test(uint256,string,uint8,string)", +"63052d82": "getOwnersIndex(address)", +"63055d79": "fetchRate()", +"6305d010": "registerTeam(string,address,string,bool)", +"63066434": "getPlayerVaults(uint256)", +"63069a35": "assign2(address,uint256)", +"63079315": "lengthOfCommonPrefix(bytes,bytes)", +"63086b5e": "afterSoftCapDuration()", +"6308769e": "LogFinishICO(address)", +"6308a76f": "_approveMint(uint256)", +"6308ae65": "managersCount()", +"6309242c": "setUserHatchRate()", +"630a9f94": "viewMemory(uint256)", +"630babac": "WhitelistParticipant(address)", +"630bae99": "payoutWithFee(uint256)", +"630bcd99": "drawRandomItem(string,uint256)", +"630c010e": "getElements(uint256[])", +"630cd1e9": "ratePrivateSaleStage()", +"630cea8e": "submitSignature(bytes,bytes)", +"630d0552": "ColorPurchased(address,address,uint256,uint256)", +"630d43cc": "DoroDiamond()", +"630db9ee": "getRemoveMarketCalled()", +"630dbe79": "StandardERC20Token(string,string,uint8)", +"630dc19d": "_payoutJackpot()", +"630dd52f": "TOKEN_TREASURY()", +"630e07f1": "RESERVED_TOKENS_FOR_ICO()", +"630e0ae6": "createPersonGen0(string,string,uint64,bool)", +"630e1d5f": "hasEnoughStake()", +"630eb125": "getAuditAssignBlockNumber(uint256)", +"630f1e6c": "withdrawAsset(bytes,uint256)", +"630f479e": "perStageNxc()", +"630f6f47": "betWithAff(address)", +"630fd0ac": "totalSupplied()", +"6310c722": "convert(address,uint256,uint256)", +"6310d902": "getAddressBoughtCount(uint16,address)", +"631121ca": "ISCToken()", +"63121665": "countPeriod(address,bytes5)", +"6313bd30": "DEP()", +"631407a2": "setTokenSupplierAddress(address)", +"6315592b": "orderModify(uint256,uint256,uint256)", +"63155d2b": "craft(uint16[16],uint16[16],uint16[16],uint16[16])", +"63157e2b": "issue(uint32,uint8,uint256,bool)", +"6316f6d1": "getNotConstant()", +"63175913": "StandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"63176ad9": "changeDealDate(uint256,uint256)", +"6317cc5b": "tokenCapForThirdMainStage()", +"631859d0": "calculatePotentialPayout(uint256)", +"6319d32f": "DOJI()", +"631a4231": "createContract(string,string)", +"631a925c": "Weekycoin()", +"631b0520": "getPaimentTime(address,uint256)", +"631b3672": "roundSetUp()", +"631b7e83": "LogResult(bytes32,address,uint256,uint256,uint256,int256,bytes)", +"631bdb63": "playerCurrentlyRegistered(address)", +"631c07f0": "getBonusByDate()", +"631c42ae": "ethExchangeWallet()", +"631c56ef": "depth()", +"631ccb1d": "getInfoMarketItem(bytes16)", +"631d3f3b": "liveDragons()", +"631d551b": "FAMEToken()", +"631d9b1f": "LuxProject()", +"631dc853": "EquitySharingSystem()", +"631dd1a2": "transferFreeze(address,uint256)", +"631de4d6": "replace(address,address)", +"631e0c69": "addMessage(string,string)", +"631f0d66": "upgradeAddress()", +"631f637f": "preSaleMaxCapInWei()", +"631f9852": "isSealed()", +"63200443": "FindLettuce()", +"6320212b": "refreshReputation(bytes32,address[])", +"63204648": "setMultiWallet(address)", +"6321f298": "MeraToken()", +"632261c3": "removeVendor(uint256)", +"63228b57": "KarmaToken(uint256,string,uint8,string)", +"6322961d": "getAddressByUsername(string)", +"6322bb39": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"6323b526": "transferFromTokenSell(address,address,uint256)", +"6323dc26": "GCRTokenERC20()", +"632447c9": "updateReward(address)", +"632473da": "CNC()", +"632488ff": "POOH()", +"6324af1f": "advisorsBalance()", +"6324e70b": "offerToLend(uint256,uint256,uint256)", +"63258462": "setHomeMaxPerTx(uint256)", +"63263858": "ethartArtReward()", +"6326cb5b": "_purchaseCompany(uint256)", +"6328af59": "YeedToken(uint256)", +"63299226": "teamOneId()", +"6329cfa5": "settleLend(bytes32[8],bytes,address,uint256,bytes,bytes,bytes,bytes)", +"632a3e52": "vestTokens(address,uint256)", +"632a8144": "midasFounderAddress()", +"632a9a52": "vote()", +"632ca5c9": "getArts()", +"632ccecd": "IkuraAssociation()", +"632ce0f8": "whoIsAdmin()", +"632e082a": "isMainFirstDay()", +"632e1dfe": "OWNER_ADDR()", +"632e2b95": "addWire(address,uint256,uint256)", +"632e44af": "distributeBonusTokensByList(address[])", +"632ebd6b": "changeIsOpenFlag(bool)", +"632f0ba6": "descriptionHashes(bytes)", +"632f83eb": "realWorldPlayerFromIndex(uint128)", +"632fbda4": "replaceController(address)", +"63301198": "AetherCore()", +"63302789": "TOKEN_FOUNDERS()", +"63304bc3": "m_lastFundsAmount()", +"6330ac09": "get_price(string)", +"6331e7d4": "beforeEach()", +"6331eae0": "saveTokenValues()", +"63334c58": "transferETC(address)", +"63340338": "fuint32(uint32)", +"633423be": "paymentAddress()", +"6335010d": "getVestingRevokeDate(address,address)", +"63365651": "InterfaceId_ERC721Enumerable()", +"63367f4d": "tagline()", +"6336ac19": "setTTGCoin(address)", +"63385ad1": "addNewAccount(address,uint256,uint256)", +"63385b64": "BerryToken()", +"633891c4": "getPlayerAff(uint256)", +"6338977e": "setMetadataUser(string)", +"6338f693": "Airdropped(address,address,uint256)", +"63391689": "withdrawForFourStep()", +"63392843": "decrease(bytes32)", +"63396109": "createGen0Token(address)", +"63397825": "changeMerchantAccount(address)", +"633982c5": "viewLatestEthTransactionRequest()", +"6339b5f6": "SUSIToken(uint256,string,string)", +"6339be39": "totalStarSupplyRemaining(uint8)", +"6339fbcb": "finishGame(uint32,bytes32)", +"633a6dde": "deathData_a9()", +"633a7574": "CowToken(address,address,uint256)", +"633ab5e0": "callchecked()", +"633b1954": "finalizeMigration(address)", +"633b4c04": "o_velho_problema(uint256,uint256)", +"633b5b1f": "presaleTotalWei()", +"633c78b5": "create(uint256[],uint256[])", +"633ce1d2": "premiumDomainK()", +"633d17eb": "toAscii()", +"633de6aa": "setTime2Rest(uint256,uint256)", +"633dfc70": "vote(bool,address)", +"633f7a82": "queryType()", +"6341b3fe": "subBrokerNum()", +"6341ca0b": "retrieveTokens(address,address)", +"634363f3": "amountOf()", +"63443679": "rateUpgrade(uint256)", +"6344a898": "setWeiRaiseLimit(uint256)", +"63453ae1": "distribute(address)", +"63456fa9": "getTokenById(uint8)", +"634663a5": "setPriceRatePhase2(uint256)", +"634667b2": "claimAndTransfer(address)", +"634710ae": "BYTC()", +"63472fad": "setVote(address,string,uint256,address,bool)", +"634758e5": "TodaNetwork()", +"6347a377": "nextAuction()", +"6347bb42": "SGACoin()", +"63482cf0": "eachUnlockCounts()", +"63488772": "WanersiLinkToken(uint256,string,string)", +"6348c4cf": "Money(address)", +"6348eae6": "neverPauseAgain()", +"634965da": "sendEther(uint256,address,address)", +"634993c6": "refill(bytes32)", +"6349cafa": "changePrice(uint16,uint256)", +"634b3df9": "minPriceInWeiForPre()", +"634b4a8f": "setOperater(address)", +"634b5043": "collectWinnings()", +"634b8dc3": "Altn()", +"634bc7db": "create(bytes32,bytes32)", +"634c5c51": "authorized_triggerStashedPayoutTransfer(uint256)", +"634c688a": "burnAllowed()", +"634d27c3": "getProviderIsForRent(uint256)", +"634d6e57": "investorFullInfo(address)", +"634df88e": "ENTA()", +"634e66ac": "admin_isWithdrawable(bool)", +"634eaff1": "ETERNAL_APPROVAL_VALUE()", +"634ec9f9": "buyKnowledge()", +"634ef3ce": "Mqthereum(uint256,string,string)", +"634ef8da": "_setSetting(string,uint256)", +"634f752b": "optionLibrary()", +"634fcb8e": "setupCrowdsale(address,bool)", +"634fe2a6": "others_prize()", +"63505ae8": "getBidsCount()", +"63506c16": "transferfromOwner(address,uint256)", +"6350b2c2": "mints(uint256)", +"6350ec6f": "changeYumAddress(address,address)", +"6351546d": "settleTransactionByMediatorFee(uint256,uint256)", +"635179ca": "setHiddenCeilings(bytes32[])", +"6352211e": "ownerOf(uint256)", +"6352585c": "ENCToken(uint256,string,uint8,string)", +"6352c538": "TokensWithdrawn(address,uint256)", +"63534dd8": "seedContract()", +"6353586b": "reward(address)", +"63542c26": "approvedToken(address,uint256,bytes)", +"635439ac": "updateCurrentGameCardId(uint256,uint256)", +"635550a6": "blockchainExchangeFrom(address,uint256,uint256,bytes32)", +"63558f5c": "transferEscrowship(address)", +"6355bf2f": "optionsSet()", +"635639b4": "_unpackPlayerData(uint256)", +"6356443e": "TokenPreSaleTransfer(address,address,uint256)", +"6356739d": "Sent(address,uint256,uint256)", +"63567673": "createBet(address,address,uint256,uint256,bytes32[])", +"63569ca8": "rewardProjectCompletion(uint256)", +"6356cdac": "Bonus(uint256)", +"6357cc12": "startpublicBattle(uint256,uint256)", +"6357ddaa": "getRandomTime(uint256)", +"63581c04": "setFactoryAsset(uint256,uint16)", +"63586d6a": "claimBondReward()", +"635875d9": "changeMinimumCommission(uint256,uint256)", +"6358aac0": "isInterestStatusUpdated()", +"6359036b": "redeemDaoBounty(bytes32,address)", +"63591d09": "poolMaxAmount()", +"635994fd": "create(address,bytes32,address,bytes32,address,bytes32)", +"6359a656": "EUnpause(address,string)", +"6359a974": "TOTAL_TOKENS_TO_DISTRIBUTE()", +"6359b5b1": "totalIssuingCollateral_limitedSum()", +"635a5d7b": "setHeartbeatTimeout(uint256)", +"635b9047": "ExpandCoin()", +"635ba8a1": "ApexTalk()", +"635ca669": "addBoardOnUser(address,address)", +"635cfda2": "Incrementer()", +"635d0239": "toUint(bytes,uint8,uint8)", +"635da243": "autorizar(address)", +"635e2abf": "_btcToken(address)", +"635eecea": "privateEventTokens()", +"635f6a79": "method3(string)", +"6360edc1": "getAllForPubKeyBetween(bytes32,uint256,uint256)", +"6360fc3f": "bought_tokens()", +"63615149": "withdraw(bytes32,bytes32)", +"63617328": "setJackpotCompleted()", +"6361d3e0": "unpauseActivity(uint16)", +"6361d9e9": "testConstructorUsingDeployedContract()", +"6362102d": "rebalanceEtherDelta(address,uint256)", +"63621532": "setGasUpperBound(uint256)", +"6362ffd3": "rebuyInformTime(address)", +"63637c87": "createNewPlayer(string)", +"636544be": "changeVeredictum(address)", +"63655ebb": "DiaryLog(uint256,bytes)", +"63657855": "_removeFromDebtRegister(bytes4,uint256)", +"6365dfd9": "RaisrToken()", +"63665f2e": "addAirdrop(address,uint256)", +"63669424": "EthBird()", +"6366b936": "freeUpTo(uint256)", +"63670e42": "UpdateSellAgentSiteReg(address,address)", +"636760a2": "Cyncrohnis()", +"636822fa": "FearOfMissingOut()", +"63689b4a": "moveTokens(address)", +"6369313d": "isHouse()", +"636a36e3": "ThingsbookChain()", +"636ae15d": "BROYALCOIN()", +"636b2ac3": "createDefaultGen0LinglongCat(uint256,address,uint256,uint256)", +"636b7e56": "pendingFunding()", +"636bb5ae": "CalculateStageValue()", +"636bd9dc": "cooAddress3()", +"636c6524": "Superpack()", +"636ca6c2": "EAAS()", +"636ce4d7": "BTL_SPARTAN()", +"636d37b1": "precrowdsalepricing(address,uint256)", +"636d98b1": "referrerPercent()", +"636f12fe": "b2sother(bytes32,bytes32)", +"636f6159": "tokenExchange()", +"636fa3c6": "preIcoToken()", +"636ff44e": "BAGToken()", +"63704e93": "getDocCount()", +"6370920e": "grant(address,uint256)", +"6370ef19": "updateDomainPrice(bytes32,uint256)", +"63722de4": "AllowSomeoneToViewMyKeys(address,string)", +"63723373": "checkSignature(address,uint8,bytes32,bytes32,bytes32)", +"63727449": "getMfgDetails(string)", +"6372ba1a": "dateEndICO()", +"63732cf0": "RCN()", +"63735598": "getPriceOfCampaign(bytes32)", +"6373786a": "SaturnPresale(address,address,uint256)", +"637431ae": "testCreatePricelevelUsingNewContract()", +"63746113": "resetCrowdSaleAddress(address)", +"63746b03": "createContractRide(string,bytes7)", +"63749225": "getPVPEntranceFee(uint256)", +"63750dfb": "changeLedger(address)", +"63755c16": "withdrawStandardTokens(address)", +"637666ce": "removeFromBlackList(string,address)", +"6376c910": "StageThreeEnable()", +"63772f33": "growthTokensPercent()", +"6377aaa6": "setAdsContractAddress(address)", +"6377ebca": "close_time()", +"6377ff20": "totalInactive()", +"6378378a": "NxahCoin()", +"63784191": "frozenForTeam()", +"63791e3c": "setPriceSetter(address)", +"63798661": "payPlace(uint256)", +"6379a852": "multiOperatorSend(address,address[],uint256[],bytes,bytes)", +"6379ed9d": "distributeFUD(address[],uint256,uint256)", +"637af51c": "updateUpdater(address)", +"637b2541": "_allocateTokens(address,uint256)", +"637b55eb": "exchangeEtherToToken()", +"637b93ed": "getInsuranceBalance(address)", +"637bcd2a": "userIsWhitelisted(address)", +"637c39d8": "systemAddresses(address,address)", +"637cc5c6": "XBlockToken()", +"637d3e00": "ProjectOwner_EnableProject(int256)", +"637dda3f": "getBalanceByIndex(uint256,address)", +"637e12f7": "getBlocksDesc(uint256,uint256)", +"637e86eb": "totBOTs()", +"637ea3e5": "setlogaddr(address)", +"637ec389": "activated_time_()", +"637fcf95": "getBoardMember(address)", +"63808773": "acceptContribution(bytes32)", +"63809953": "secondsPerDay()", +"6381ca26": "refundTransactionByMediator(uint256)", +"63820550": "OwnerEvents(address,uint8)", +"63822fdc": "addConsentTemplate(string,uint256,string,string,string)", +"6382789d": "currentLowestCount()", +"63839777": "getReturns(address,address)", +"63844a57": "mul32(uint32,uint32)", +"638560cf": "registerBool(address,bool)", +"6385cbbe": "minimalGoal()", +"6385f2fb": "DAZ()", +"63860139": "nextPrizePool()", +"63862fd5": "isSenderOriginalOwner()", +"6386c1c7": "getUserInfo(address)", +"63875261": "paladinAddress()", +"6388fafa": "niceguy1()", +"63891019": "testFailStartTooEarly()", +"63892068": "create(string,string,bool)", +"6389654e": "changeDailyWithdrawalLimit(uint256)", +"63897c7e": "changeSettings(string,string,uint256,uint256,address,address,address,address,uint256)", +"6389e019": "graceTransfer(address,uint256)", +"638a9ce9": "setProxy(address,bytes32)", +"638b1b14": "developmentAddress()", +"638b4463": "completeClosed()", +"638b9119": "soldCards()", +"638bcce3": "multilevel(uint256)", +"638c5ddc": "BonusListUpdated(address,address)", +"638d4788": "draw(uint8,uint8)", +"638dd56a": "getNumberOfEligibleMembers()", +"638e1e5d": "payTip()", +"638e3724": "Locker(address,uint256,address[],uint256[])", +"638eea8d": "PLATFORM_MONTHLY()", +"638f6575": "timeStarted()", +"638f8da4": "castleMaxLevelGap()", +"638fade2": "getMerchantPublicKey()", +"63905232": "balanceAll(address[])", +"63907180": "getDebrisNum(bytes32)", +"6390f519": "getNumTeams(uint16,uint8)", +"6391c315": "FundsWithdrawnAndTokenStareted(address)", +"6391d3b2": "getCountSenderLands(address)", +"63921a74": "canReceiveListing(bytes32,uint256,bool,address,uint256,uint256)", +"63929d3e": "getPendingKNCRateRange()", +"6392a51f": "balancesOf(address)", +"63937651": "batchTransferDiff(address[],uint256[])", +"6393b4eb": "expect(address,uint256,bytes,bytes32)", +"6394536d": "cosign(uint256,uint256)", +"639475ca": "TRIANGLE()", +"63958b5f": "sellSpecialTokensForPublicSale(address,uint256)", +"63981b33": "changedeposito(address)", +"63981bbc": "TotalSpenders()", +"63991a36": "getGenomeChildren(uint32,uint32)", +"639937d7": "maxSpinners()", +"639a9a67": "saleOpened()", +"639ab80b": "YTTD()", +"639bbb37": "donated()", +"639bd0bf": "proposeBountyTransfer(address,uint256)", +"639bef41": "setRecommender(address,address)", +"639cba6e": "getDetailsBattles(uint256)", +"639cd59c": "totalFeesAvailable(bytes4)", +"639d3e69": "listSubName(bytes32,bytes32,uint256,uint256,uint256)", +"639d57f2": "testGetBitSuccess()", +"639d71eb": "mixAmt()", +"639e01dd": "Team()", +"639ec4d2": "checkTokDev()", +"63a0557b": "teamAvailable(address)", +"63a0607b": "buyRock(uint256)", +"63a10042": "approveComponents()", +"63a1512e": "setOPM(address)", +"63a167f2": "collectorWeiCap()", +"63a24174": "GxCoinTotals(address)", +"63a2c393": "safeMulPercentage(uint256,uint256)", +"63a2de29": "crearJuegos()", +"63a2fdbf": "claimZeronium(uint64,uint64,uint64,uint64,uint64,uint64)", +"63a37503": "test_rewardPoolShare_noClaimableStake()", +"63a3c452": "getUnsold()", +"63a3cc80": "currentTotalTokenOffering()", +"63a3d383": "edoToken_()", +"63a411c0": "addDriver(address)", +"63a4b67b": "setArray(bytes32,uint256[])", +"63a599a4": "emergencyStop()", +"63a5bc71": "eitherAdminOrAdvisorCanDoThis()", +"63a6568f": "getPropertyLastUpdaterBecomePublic(uint16)", +"63a66d59": "bountyDeposit()", +"63a6cc7d": "getBuyers(uint16,uint8)", +"63a846f8": "admin(address)", +"63a8b945": "removeCounter(address,uint32)", +"63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", +"63a97d3f": "decreaseAllowed(address,address,uint256)", +"63a999cc": "uddr()", +"63a9c3d7": "verify(address)", +"63aa109c": "summFounders3()", +"63aa289b": "ownerTreesIds(address,uint256)", +"63aa56b1": "amend(address[],address[])", +"63ab7a25": "clearWaitPairBets()", +"63aba603": "AlphaToken(string,string)", +"63abc381": "alreadyParticipated(address)", +"63abfbaa": "tokensToFunds(uint256)", +"63abfd86": "CCChainToken()", +"63ac0f99": "depositBonus(address,uint256)", +"63ad0bbe": "templateProposals(address,uint256)", +"63ad803f": "EditTile(uint256,uint256,string,string,string,uint256)", +"63ae10fe": "getClientProviderUID(address)", +"63ae2bae": "updateUserCertification(string,string,string,string,uint16)", +"63ae71ca": "affiliateProgramWalletAddress()", +"63ae8d6c": "setBuyPrice(uint256)", +"63aea3e0": "PlayerInfo(uint256)", +"63aec5ce": "getActiveUserLists()", +"63af8570": "tokensToGenerate(uint256)", +"63b03896": "gcd(int256,int256)", +"63b0545f": "transferfrom(address,address,uint256)", +"63b0a5c3": "IdentityRegistry()", +"63b0e66a": "helper()", +"63b1152a": "releaseVault()", +"63b1806f": "NewReferralTransfer(address,address,uint256)", +"63b20117": "totalTokensSold()", +"63b2c2a9": "unlockTeamBBT(uint256,string)", +"63b3c007": "canDefrost()", +"63b3f4e6": "WinnerPayedTicketBought(address,address)", +"63b452fb": "ICO_RATE4()", +"63b45bd9": "socoreCheck()", +"63b4f786": "about(address,uint256)", +"63b56431": "PRCT100_ETH_OP()", +"63b57e34": "remainCap()", +"63b6240d": "computeEndowment(uint256,uint256,uint256,uint256,uint256)", +"63b68040": "lastBlock_v14Hash_uint256()", +"63b6b31f": "transferBalance(address)", +"63b700ff": "getStoryExpiryTime(bytes12)", +"63b75b59": "setAssetValue(uint64)", +"63b7f00a": "calculatePercentsFor(address)", +"63b80379": "AcceptDiscipleOffer(uint256)", +"63b82524": "ethReceivedPresaleTwo()", +"63b851b9": "updateMinimumEpochInterval(uint256)", +"63b87bb8": "openSale(uint256,uint256,uint256,uint256)", +"63b8bd44": "getBalanceofEthAgent()", +"63b8f7f7": "W4T()", +"63ba26fa": "QwasderToken()", +"63ba2c76": "toUintThrow()", +"63ba5e44": "fundem()", +"63ba7319": "BUILDING_PRICE()", +"63bafb96": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"63bb51a9": "setHash(address,bytes32,address,bytes32,uint256,uint256)", +"63bbe1b5": "transferAuthorizations()", +"63bce4e7": "softCapUsd()", +"63bd1d4a": "payout()", +"63be8fc8": "createNew(address)", +"63beeab1": "executeConstant()", +"63bf15c2": "_buildTimberCamp(address,uint256,bytes)", +"63bf8194": "mineFor(address,address,uint8,bytes32,bytes32)", +"63bf81cf": "createDiscipleSale(uint256,uint256,uint256,uint256,uint256)", +"63bf8d6a": "removeToken(uint8)", +"63bfe3d8": "SkillBeatsLuck()", +"63bfe52a": "addAddressToCraneList(address[])", +"63c05650": "addAddress(address,uint256)", +"63c06fe9": "mintForwarder(uint256,bytes32,address[],int256)", +"63c194f1": "NTFoundationAddr_()", +"63c1b753": "getAddressIndex(uint256)", +"63c281a1": "hitFoundationBalance()", +"63c3600b": "__stringToUint(string)", +"63c36549": "QueueIsEmpty()", +"63c37984": "thirdExchangeRatePeriod()", +"63c3e2e3": "clearTransferValue(uint256)", +"63c43415": "view60()", +"63c439a6": "secondCrowdSaleDate()", +"63c454ca": "ifFreeze(address)", +"63c4f031": "stop(bytes32)", +"63c6082f": "buyWithCustomerIdWithChecksum(uint128,bytes1)", +"63c65056": "TradeEthShop(uint256)", +"63c69f08": "getUserOrders(address)", +"63c6fe04": "addCities(bytes32[],uint256[],uint256[])", +"63c78e87": "withdrawEtherFromTrade(uint256)", +"63c7d473": "GoldAmountMelted()", +"63c988f9": "isAlive(uint8[176],uint8)", +"63ca7aaf": "FeeUpdated(address,address,uint256,uint256)", +"63cb2afb": "reserve1Address()", +"63cb344e": "setNctEthExchangeRate(uint256)", +"63cbab8c": "SELLER_STEP_1_OPEN()", +"63cc23ae": "Lesson_4(address,uint256)", +"63cc4aa2": "transferRemainingTokens()", +"63ccedfe": "MensariiCoin()", +"63cd1c51": "_createLottery()", +"63cd1da7": "dspcoin()", +"63cd44c9": "GetType(bytes32)", +"63cd99cb": "moo()", +"63cdcc57": "motionConfirming(uint256)", +"63cea450": "closePresale()", +"63ceb60d": "sponsor(uint256,address)", +"63cf1442": "JACK_DIST()", +"63cf2ef3": "limitLessThan(uint256,uint256)", +"63cf6ffa": "sellFish(uint16,uint16,uint8,address,uint256)", +"63d06dd4": "createContractPow(string,uint256,uint256)", +"63d08ae5": "Timebankc(uint256,string,string)", +"63d1055c": "proposeGame(string,string,uint256,bytes)", +"63d177e6": "unpauseICO()", +"63d17806": "operatingFund()", +"63d1e70e": "PHXroll()", +"63d256ce": "revoked()", +"63d29135": "SetEventData(uint256,string,string)", +"63d292d7": "STQCrowdsale(address[],address,address,address)", +"63d2be9d": "ratingOf(uint16)", +"63d36c0b": "calculateFinalPrice(uint8,uint8,uint256,uint256,uint256,uint256)", +"63d494ea": "becomeVoter()", +"63d4d4a9": "bonusRateInPercent0()", +"63d5243a": "getDaysPassedSinceLastTeamFundsBallot()", +"63d5502f": "presaleCap()", +"63d578c5": "ApolloSeptemTokenSpecialPurchase(address,address,uint256)", +"63d60745": "transferCreditsInternally(string,uint256,uint8,string)", +"63d64159": "max(uint8,uint8)", +"63d6519a": "CPCEPrivate()", +"63d6727a": "setStartStage3(uint256)", +"63d74226": "add_bounty()", +"63d7edb9": "VRCOIN_DECIMALS()", +"63d8c5b7": "RefundVaultWithCommission(address,address)", +"63d91851": "PUBLIC_CROWDSALE_CAP()", +"63d93f88": "transferFromWithoutAllowanceTest(address)", +"63d9b4b1": "sendGift(address,uint256)", +"63d9b770": "exploit()", +"63d9df85": "presaleContract()", +"63da5531": "tokenPerUsdNumerator()", +"63da9cf8": "signAttribute(uint256,uint256)", +"63db30e8": "minInvestedAmount()", +"63db3e63": "IPST()", +"63dc5400": "queryCurrentContractFunds()", +"63dcf376": "offChainPurchase(address,uint256,uint256)", +"63dcfa9e": "athleteAlreadyClaimed()", +"63ddbb99": "WBToken()", +"63ddc54d": "mmLib()", +"63de5323": "applicants(uint256)", +"63de6ad6": "purchaseCard(uint64)", +"63de882b": "wlStopBlock()", +"63deb2c5": "changeMemberAddress(address)", +"63def590": "untrustClient(address)", +"63df9769": "setReached(bool)", +"63e0c2f8": "whitelistAccount(address)", +"63e0f8c3": "StanleyNickels()", +"63e0f8c7": "referalBonus()", +"63e12cdc": "addCCUser(bytes32)", +"63e16fff": "nextGen()", +"63e1d57c": "getMaxSize()", +"63e27a63": "unlockTeamTokens(address)", +"63e2c349": "transferTokenAndLock(address,uint256)", +"63e321fe": "setDefaultHashes(uint8,uint8)", +"63e33e96": "totalSupplyUnits()", +"63e38ff3": "id_for_nym(uint256)", +"63e3eab3": "batchDeleteCandidateCache(address[])", +"63e3fbbd": "StopQuiz()", +"63e49fcd": "startPtopDeposit(address,address,bytes32,uint256,uint256)", +"63e4bff4": "giveTo(address)", +"63e4e5cc": "bountyPercentage()", +"63e561b6": "checkOrder(uint32[])", +"63e60df5": "GolemNetworkToken(address,address,uint256,uint256)", +"63e79315": "TokenERC20(uint256,string,string,uint256)", +"63e8dd96": "getCurrentOwners()", +"63e94cee": "getStage0End()", +"63e95a3c": "isNegligable(uint256,uint256)", +"63ea0143": "setTotalDeposit(uint256,address,uint256,address)", +"63ea6e44": "NewKing(address,uint256)", +"63eaa14d": "relock(address,uint256,uint256,int256)", +"63eac2d4": "getMyFalcon()", +"63eb963a": "dat()", +"63ebb3cf": "isValidSubmitter(address,bytes32)", +"63ebd4ff": "getFunctionAuthorized(address,address,string,bytes32)", +"63ebf801": "ChelleToken()", +"63ec3eb5": "WHENToken(string,string,address,address,address)", +"63ec96b7": "LogVictory(uint256,uint8)", +"63ed6d5d": "LogWhitelistRemove(address)", +"63eda29d": "prevSeriesSelloutHours()", +"63ee7c8d": "totalEscrows()", +"63ee8b88": "ico2Sold()", +"63eeb79a": "setMinEsteemAmount(uint256)", +"63eed1d7": "Alice(address)", +"63ef8d9e": "resetLotto()", +"63f019f6": "canBurnSecurity(address,uint256)", +"63f07aa4": "preSaleTokens(uint256,uint256)", +"63f0ae2e": "ProfitDelivered(address,uint256)", +"63f0ca5a": "BOUNTY_TOKENS()", +"63f114f2": "checkWithdrawValueForAddress(address,uint256)", +"63f160e6": "sentReveal(uint256,address)", +"63f1a089": "_mint(uint256,uint256,uint256)", +"63f1a9dc": "LogInvestorMigrated(address,uint256,uint256,uint256)", +"63f1de17": "ICONSORT()", +"63f225a7": "addLOCtoLHT(address,address)", +"63f22c24": "checkDelegation(address)", +"63f2493f": "settleETHBatch(address[],int256[],uint256,uint256)", +"63f32f63": "Price(uint256)", +"63f3dbe5": "VESTING_CLIFF()", +"63f55fc0": "setHolderGroup(address,uint256)", +"63f5679e": "changeDragonsStatsContract(address)", +"63f6100d": "buySome(uint256,uint256,uint256,uint256)", +"63f6271f": "LEGLToken()", +"63f75343": "setF2mAddress(address,address)", +"63f80de3": "issueCoin(address,uint256,uint256)", +"63f8a211": "sellOneStep(uint256,uint256,address)", +"63f9cb0e": "HLWCOIN()", +"63fa32f1": "newWinner(uint256,uint256,address,uint256)", +"63fa5716": "changeSoulReward(uint256,uint256,uint256)", +"63fa9888": "PredatexDua()", +"63fb5a1a": "putBuyOrder(address,uint256,uint256,uint256)", +"63fbc7bc": "expectPayment(bytes8,bytes32)", +"63fc98e3": "judgeEnableForTransfer(address,uint256)", +"63fcabcb": "BilancioMinimoAccount(uint256)", +"63fcf5de": "addtoContributos2(address,address,uint256,uint256)", +"63fd420c": "payoutMining(uint256)", +"63fd7552": "owedAt(uint256)", +"63fd7eb0": "chickenOf(address)", +"63fd91dc": "signUpForTournament(uint256[])", +"63fd9e38": "minInvest()", +"63fdca37": "HitCash()", +"63feeaaf": "smartContractStartDate()", +"63ff195d": "stakeOnBehalf(address,uint256,bytes32,uint256,uint256,uint256)", +"63ff6125": "donateToFeePool(uint256)", +"64004ea5": "getUserTotalPromoBonus(address)", +"640075f3": "isPositionClosed(bytes32)", +"64009184": "threeHotHoursEnd()", +"64017ea7": "submitExit(uint64,address,uint256,address,uint256)", +"640191e2": "channelManagerAddresses()", +"64020842": "isDisavowed()", +"640241b8": "acceptOnwership()", +"64027fbb": "minbet()", +"6402aca9": "getAllCardAddressesPriceOfOwner(address)", +"6402efd3": "tier2Rate()", +"64030441": "addCardsHash(uint256,string)", +"6403a9ed": "getVoteCountForOption(uint8)", +"6404865e": "OneOhana()", +"6406605b": "MetadataUpdated(uint256,address,string)", +"640708d6": "PRIORITY_SALE_START()", +"64070b6f": "p_setNextRoundSeedPercent(uint256,uint256)", +"6407e432": "mintTokens(uint256,address,address)", +"640853bb": "amountSoldPerPeriod()", +"640959bc": "getQuoters()", +"6409a4e3": "giveTokens(address,uint256,string)", +"640a404a": "getgamecardpos(uint256)", +"640a4d0c": "_deposited(address,address,uint256)", +"640bdd70": "setDividendFee(uint256)", +"640c3dbd": "isChipPassword(uint256,string)", +"640d3017": "SetMinSum(uint256)", +"640d84b5": "SetApplicant(uint32[],uint64[],uint32[],uint64[],int256,uint64[])", +"640ec47a": "assertTrue(bool,bytes32)", +"640efb0d": "setTravelPrice(uint256)", +"640f244b": "findSuitableGen()", +"640fe1e9": "availableForWithdraw(address)", +"64100038": "deleteUserClaim(address)", +"64109848": "tokemon20()", +"64109ae0": "MAINT_PRICE()", +"6410c41a": "priviledgedAddressBurnUnsoldCoins()", +"6411273f": "tapFab()", +"6412aeb1": "setBountyTokens(uint256)", +"641446eb": "splitPayment(uint256)", +"641579a6": "setMultiplier(uint256)", +"641620a2": "createMulti(uint256,uint256)", +"6416ec30": "Geet()", +"64179c1b": "ActivatedContract(uint256)", +"6417c08b": "implementsERC721d()", +"6417dec3": "setHSShopSaleFee(uint256)", +"6418345e": "updateMinimumInvestment(uint256)", +"6418b903": "transferRewardPool()", +"6418f643": "ClaimBlessings()", +"641a5f66": "getSendCoin()", +"641a8cb3": "MANHATTANPROXYBRDWY()", +"641ad8a9": "poolState()", +"641b58c2": "checkBet(uint256[],uint256[],uint256[],uint256,uint256)", +"641bbdfe": "claim(uint256,uint8,bytes32,bytes32,uint8)", +"641ca23f": "availableICO()", +"641d55e0": "buyClixToken()", +"641d6075": "getDailyWinners()", +"641e3f15": "notifyTokenIssued(uint256,uint256,uint256)", +"641e6b9d": "TestingEnabled()", +"641e8cca": "updateGameProprietaryData(uint256,string)", +"641e90de": "price5()", +"641f3b46": "isTokenExchange()", +"641f83a1": "calcEnvHash(bytes32)", +"6420e71c": "rateForPhase1()", +"64217bdf": "requestInterest(uint256,uint256)", +"6421fc04": "LockedMANA(uint256)", +"642231a6": "legendsCrowdfund()", +"6422816b": "betBLenght()", +"64228857": "getRevisionCount(bytes32)", +"642289f2": "MarketEnabled(address,address,address)", +"6423690f": "SmartDice()", +"64239cce": "purchaseUpAndSpend(uint256,uint256,bytes32)", +"6423b5f0": "miniMeToken()", +"6423db34": "Reset()", +"6423dbad": "getGreeter()", +"64245502": "STRegistrar()", +"6424bd8c": "Remove()", +"6424d686": "getEngineerCurrentVirus(address)", +"64253d2f": "HashnodeTest()", +"64256611": "collectedFunds()", +"6425fbed": "getJobStatus(bytes16,address,address,uint256,uint256)", +"64265b1a": "share_transfered(string)", +"6428366a": "payToGorgona()", +"6428925d": "toSTAR(uint256)", +"6428a652": "setPornstarsContractAddress(address,address)", +"6428fed4": "pendingJackpotForWinner()", +"6429161b": "createSaiLimitedEdition(uint256,address)", +"642ab4b1": "lastBidTime()", +"642b1759": "getMerkleLeave(uint256)", +"642b4a4d": "mainNetLaunchIncentiveReserveWallet()", +"642bdd15": "calculateNewPrice()", +"642c53e2": "GetData(bytes32,string,bytes32)", +"642c7aa2": "snatchHero(uint256)", +"642d345c": "byMaximum(bytes32,uint256)", +"642d63a3": "buyLottery(uint8)", +"642dfe55": "Bitmos(uint256,string,uint8,string)", +"642e8271": "NigeriavsArgentina()", +"642f1ddc": "nome_candidato_da_indice(uint256)", +"642f2eaf": "transactions(bytes32)", +"642f722c": "createRecord()", +"642f825a": "randomPetAuraBoost(uint64,uint8)", +"642fd0f6": "getPixelColour(uint256)", +"64308a6a": "_getPartSkillColor(bytes,uint256,uint256)", +"643124cf": "INZEI()", +"64319ae6": "updateUserEmail(address,string)", +"64322c9c": "drawingIdToCollectibles(uint256)", +"64325ddb": "currentClaimPrice()", +"6432679f": "getUserCapInWei(address)", +"64326c71": "getTotalGas()", +"64329400": "setHardParticipationCap(uint256)", +"6432dc4e": "sell_ppc()", +"6432e3cd": "CaDataContract()", +"6432e9e0": "calculatePayrollRunway()", +"6433ef42": "adjustWithdrawRate(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"64341c0c": "getIPFSCode(bytes32)", +"643537aa": "getBFEX(address)", +"64362587": "SetRevealBlock(bytes32,uint32)", +"6436434e": "getAddressDnaIds(address)", +"6436b1b9": "getSpawningForCount(address)", +"64370755": "removeDistributionSources(address[])", +"64371977": "set(uint256,string)", +"64377452": "getUserHash(address)", +"64379150": "setNumberClaimToken(uint256)", +"6437ab0b": "checkCommitPeriod(bytes32)", +"64385828": "setDataColla_AB_01(string,string)", +"6438c43e": "getCurrentSchellingRound()", +"6438f449": "noviceDungeonId()", +"64392a80": "balanceOfOwnerInVault(address,address)", +"6439437e": "cloneIt()", +"643a7695": "verifyParticipant(address)", +"643ac0bd": "_unregisterAttack(bytes32)", +"643aff0f": "investorWallet()", +"643b18b6": "teamWallet_1()", +"643c6d1f": "PureChainToken()", +"643ce525": "teamLimit()", +"643d1be5": "setMainSaleStart(uint256)", +"643d6dc0": "getInfos()", +"643d71a2": "KODB(address)", +"643e1aa5": "SetStartTimeTLP2(uint256)", +"643e7365": "initialSaleContract()", +"643e77d8": "calculateProfit(uint8,uint256,uint256)", +"643f7cdd": "DAOpaidOut(address)", +"643f9b72": "SherolexToken()", +"643fcd27": "addieren(uint256,uint256)", +"64422ede": "createPoolsIfNeeded()", +"64422f3c": "multiDeltaBalances(address[],address,address[])", +"64425055": "returnedDataDecoded()", +"644280e2": "tokensForBounty()", +"6442af8d": "_totalRemaining()", +"644443ed": "addContractRole(bytes32,string)", +"64445d9e": "adminEditBallotOption(uint32,uint32,string)", +"6444a288": "setMinTokenForSP(uint256)", +"6446169b": "sellStar(uint256,uint256)", +"64461a55": "Synergy(address)", +"6446a339": "addAddressToPublicBuyerList(address)", +"6446afde": "getMappingElement(uint256)", +"6446ebd8": "deleteResources(address,address[],bytes4[])", +"644843f3": "LogNote(bytes4,address,bytes32,bytes32,uint256,bytes)", +"6448adc6": "tierLevel()", +"6448b46f": "pushCap(uint256)", +"6448b6cb": "closeVaultAccess()", +"644998ae": "maintain(int256,uint256,uint256)", +"644a3d42": "ANKR()", +"644a803d": "BlockTogether(address,uint256,uint256,uint256)", +"644a9db8": "sign(uint256,address,uint256)", +"644b1d1a": "CompetitionCompliance(address)", +"644b7a43": "getTokenByIndex(uint256)", +"644b7dc6": "_isOperatorFor(address,address)", +"644cf307": "preSaleBonus2Percent()", +"644d8164": "getDesc()", +"644d8cce": "burnMas(address[],uint256[],uint256)", +"644e4e4e": "LogVotes(uint8,uint256)", +"644e8b24": "getPrices(uint256,uint256,uint256[],uint256)", +"644fab74": "setTimeLock(address,uint256)", +"64506302": "okamiCurrentPurchase_()", +"6451447d": "buyoutFeePercentage()", +"6451ab58": "activeuser()", +"6452a10f": "emergencybeneficiary()", +"6452f344": "sayGoodbye()", +"6453558e": "founderTokenWithdrawnPhase3()", +"6455058e": "getStakedAudits(address)", +"6455780c": "getImportingParty()", +"6455cb97": "EPTest()", +"64561370": "oraclize_query(uint256,string,bytes[5],uint256)", +"6456d071": "addPatientReply(address,string,string,address)", +"64571245": "withdrawATN(address)", +"6457237b": "indexOf(uint256[],uint256)", +"64584b14": "executeOrders(address[],bool[],uint256[],uint256[],address[],address[],address[8][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[],uint256)", +"64584d16": "CardFootballers()", +"6458de1e": "ensOwnerPx()", +"6459361d": "setDetail(string)", +"6459a8dc": "PerseiToken()", +"645a8570": "teamAndAdvisorsAllocation()", +"645ac00b": "transferSignership(address)", +"645b8b1b": "status(address)", +"645bcd3a": "checkBasketExists(address)", +"645bd436": "clearDelegateAndUnlockTokens()", +"645c4625": "get_orderAddress(address,address,uint256,uint256,uint256)", +"645c6fae": "registerContract(bytes32,address)", +"645c9931": "SHPToken()", +"645c9ac8": "returnMixType()", +"645cd046": "bundleToken(uint256)", +"645d95d4": "LogBidAccepted(uint256,address,uint256,bytes32,uint256,bytes32)", +"645dbfd4": "updateRandom()", +"645dce72": "updateRelease(uint32,uint32,uint32,bytes20,bool)", +"645dfad7": "sellATR(uint256)", +"645e175c": "publicGetNote(uint64,bytes2)", +"645e6ddc": "bookingBalanceOf(address)", +"645f0d11": "toggleFactoryPower()", +"645f754a": "OZTToken()", +"6460c353": "PoWMiB()", +"64610c73": "ADA(uint256,string,string)", +"646156aa": "cancelTournament()", +"6461ed00": "TOTAL_TOKENS_SUPPLY()", +"6461fe39": "transferFromWithReference(address,address,uint256,string)", +"64631be6": "signatureOf(uint256,uint256)", +"6463d6bc": "getMaxBidder(uint256)", +"646439a3": "tradeStream()", +"64648589": "fundICO()", +"6464b107": "TRIUM(uint256,string,string)", +"6465d25a": "Aliencoin()", +"64663ea6": "withdrawAndSend(address,uint256)", +"646668b6": "getMaxBet()", +"64669d1b": "BadBitchCoin()", +"6466cfa1": "changeSellFee(uint256)", +"64679356": "Controller()", +"64679806": "last_number()", +"6468328e": "executeTransfer(address,uint256,bytes)", +"6468c099": "addAnimalType(uint128)", +"6469c348": "maintain()", +"6469c89b": "getNiceBets(uint256)", +"6469e87f": "isKickoffEnabled()", +"646cd69b": "postponeDueDate(uint256,uint256)", +"646cf24d": "assignTokenContract(address)", +"646d4f53": "PlayX100()", +"646d525a": "NetCents()", +"646d978b": "getKudosById(uint256)", +"646e90e7": "getAddBal()", +"646eba48": "releaseTokens(bool)", +"646f22c5": "getTicketsLeft()", +"646f2942": "CryptoJade()", +"646f7834": "lockCountingFromTime()", +"646fe5ee": "OwnershipTransferConfirmed(address,address)", +"646fec02": "ProposalAdded(uint256,address,uint256,string)", +"6470db2f": "removeAllowed(address)", +"647151b5": "sellUnicorn(uint256,uint256)", +"647308ee": "verifyWithdrawSignatures(bytes32,address,address,uint256,bytes,bytes)", +"64738c23": "makeOrder(address,address,address,uint256,uint256)", +"6473b34a": "batchAllocate(address[],uint256[])", +"64744d22": "getPoolDepositQspWei(uint256)", +"6474dd4c": "LuckyWorldCupToken()", +"6475e3d3": "MIN_BET_AMOUNT()", +"6475e47d": "DGT_contract()", +"647734b2": "setValidationAddress(address)", +"64779ad7": "pausedOwnerAdmin()", +"647846a5": "feeToken()", +"64794403": "setAddressOfERC20Tocken(address,address)", +"647aac0c": "race(uint32)", +"647b5ced": "pubsaleCap()", +"647b6065": "tokenIdToOwnerArrayIndex(uint256)", +"647d02d2": "closeFail()", +"647d5f14": "dividendinfo()", +"647dd08c": "callSender(address,address,address,uint256,bytes,bytes)", +"647e61f1": "setLargeInvestorApproval(address,uint256)", +"647f7058": "Commitment()", +"64801da1": "reliefRatio()", +"64802918": "div(uint16,uint16)", +"6480d014": "preicostarted()", +"64812751": "finaliseState()", +"6481f081": "sellVouchers(uint256)", +"64821338": "hasVoted()", +"648236e3": "acceptBidForSketch(uint256,uint256)", +"64826b7a": "publicSaleCap()", +"6482c535": "rateOfParking(address)", +"64832c4c": "heatUp(address,uint256)", +"648345c8": "setMessage(uint256,string)", +"648351b9": "MarbellaCoin(uint256,string,uint8,string)", +"64836227": "notifyWatcher()", +"64838603": "skinColor(string)", +"6483a330": "getPeriodInDispute(uint256)", +"6483ec25": "append(bytes32)", +"64847739": "isProposePhase()", +"6484ae80": "_addCharacters(address,uint8)", +"648583b4": "updateCandidate(address,bytes32,string)", +"6485cc52": "GBP_Omnidollar()", +"6485d678": "setActive(bytes32,bool)", +"6485e2e5": "_removeController(address)", +"64861329": "DiamondProjectToken()", +"648619dc": "serviceUnpause()", +"648621ec": "xnotify(string)", +"64864ca6": "Expand(address)", +"64868f97": "roundTokenLeft(uint256)", +"6486aa51": "isConfirmed(bytes32)", +"64887334": "setCompactData(bytes14[],bytes14[],uint256,uint256[])", +"6488c20e": "TransferableChanged(bool)", +"64893fcb": "totalVestedAmount()", +"648a0c91": "updateExchange(address)", +"648a5903": "isShortPositionExpired()", +"648aa3b1": "getComponentByName(string)", +"648ad97f": "setMain(uint256,uint256,uint256,uint256,uint256)", +"648b3514": "CheckpointToken(string,string,uint256)", +"648b45f6": "unequipMultipleUnits(uint256[])", +"648b7ce8": "Increment()", +"648bf774": "recover(address,address)", +"648c51eb": "isMyPlanet(uint256)", +"648c925e": "backToAll(uint32)", +"648d6367": "DocumentaryContract()", +"648d7219": "setOCG(address)", +"648d9e26": "startPublicIco(address)", +"648e3006": "getPurchasedTokens()", +"648e49e6": "dSET_XBL_ADDRESS(address)", +"648e625a": "confirmTransaction(uint256,address,uint256)", +"648f0bde": "Play(string)", +"648f4f0f": "tokenStoreAddress()", +"648fb06f": "mintMultiple(address[],uint256)", +"648fd473": "EBRK()", +"6490c7a8": "getArea(uint256)", +"64913477": "setMultisigWallet(address)", +"64916fcf": "WhitelistedCounterUpdated(uint256,uint256)", +"6491f0b7": "setLLV_edit_6(string)", +"64921844": "getTimePassed()", +"64928d24": "wasSaleEnded()", +"649371e0": "oracleCurrentInt()", +"649375da": "addEarned(uint256)", +"6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", +"6493e64c": "upgradeTo(string)", +"6494b55b": "ceoAddCoo(address)", +"6494cde1": "endTransfer()", +"6494d477": "saltHash()", +"649564b3": "getOtherContractParticipant(address,uint256,address)", +"649677e1": "entranceFee()", +"64968f58": "set_presale_iconiq_arbits_per_ether(uint256)", +"6497129c": "getRoundNumber(uint256)", +"64976b4d": "setNplay(address)", +"64978c7f": "jembex()", +"6497b400": "_getFashionParam(uint256)", +"6497bd3a": "newPriceTicker(string)", +"6497d32e": "setCCH_edit_18(string)", +"6498156e": "preICOBuy()", +"64994978": "setFounder()", +"64996a43": "_computeCycleSkip()", +"6499e2d9": "ERC777DemoToken(string,string,uint256)", +"649ae9c6": "lockDate()", +"649c07d5": "is_contract(address)", +"649c0b21": "addressOfMSF()", +"649d56db": "getContractProps()", +"649e3c46": "createDoc(string,string,string,string)", +"649eea7f": "_transferCar(address,uint256,bool)", +"649efd6e": "mintForEverybody()", +"649f0153": "fiatBalance()", +"64a04d07": "ReconOwned()", +"64a08260": "adminRemoveRole(uint256,address,uint256)", +"64a20e2d": "getImpactDonor(string,uint256)", +"64a237f4": "VEGANToken()", +"64a31b80": "getRequiredReportsPerReporterForlimitedReporterMarkets()", +"64a41399": "contributeInCreditsToken()", +"64a48499": "getIntegerValue()", +"64a4a5d7": "testBitsEqualSuccess()", +"64a5a632": "getCompanyByName(bytes32)", +"64a640ef": "Bosscoin()", +"64a666f2": "getAuthorizedInsertAgents()", +"64a68943": "dividentSent(uint256,address,uint256)", +"64a7cc4b": "purchase(uint128)", +"64a7d7c7": "bidAuction(uint256)", +"64a80c0c": "openStream(address,uint256)", +"64a83d8b": "_removeTokenFromTranche(address,bytes32,uint256)", +"64a8a11f": "voteJUR(address,address,uint256)", +"64aabe92": "tryExec(address,bytes,uint256)", +"64ab23c9": "finalizeChangeStakingFees()", +"64ab374b": "getUnreadMessagesArrayContent(uint256)", +"64ab4702": "voteWeightUnit(uint256)", +"64aba263": "setInternalInfo(address,uint256,uint256,uint256,uint256)", +"64ac12b1": "multisig(address[],uint256)", +"64ac2c4a": "WavesPresale()", +"64acdb77": "disablePurchasing()", +"64acef7d": "newBP(bool,address,uint256,uint256,string,string)", +"64ad6027": "updateOrderNumber3(uint256)", +"64adc403": "getUserRewardPayouts(address,address)", +"64ae4451": "stateIs(uint8)", +"64aea551": "randnum()", +"64afab72": "remove(address,bytes32)", +"64afcf2e": "minSecondsBetweenPublishing()", +"64b09402": "setMetadataProvider(address)", +"64b13270": "registerDeed(string,string)", +"64b2eb2c": "publicOfferingExchangeRate()", +"64b3302d": "safeMult(uint256,uint256)", +"64b3b844": "getSaleInfo(uint256)", +"64b494d9": "setValInt(uint256)", +"64b4e6eb": "payRef(address,uint256)", +"64b55e8b": "SULTANT()", +"64b7571f": "distributeDividends(address,uint256)", +"64b7f1d3": "Rules()", +"64b837ab": "stopBlockjack()", +"64b9ca08": "noAdvert()", +"64bc6a74": "AllPartnersSet(uint256)", +"64bc82c3": "delegateAddresses(uint256)", +"64bd3066": "dispute(address,bool)", +"64bd7013": "wait()", +"64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", +"64be8453": "NewUserAdded(address,address)", +"64beb745": "lockOwnership(uint256)", +"64bebead": "_FreeDom()", +"64bfc9a5": "stopBountyMint()", +"64c176eb": "setSmartToken(address)", +"64c2555d": "buyDay(uint16,uint256,string)", +"64c27f2a": "isOwnerOrOps(address,address)", +"64c2b768": "powered_up()", +"64c33c33": "setPrice(uint16,uint16,uint8,address,uint256)", +"64c34364": "hodl(uint256,uint256,uint256)", +"64c37043": "buyRareItem(address,uint256,uint256)", +"64c403d4": "getETHx2(uint256)", +"64c40bbc": "DCoin()", +"64c422d0": "participantToUBObought(address)", +"64c487ef": "isStoppingIcoOnHardCap()", +"64c638d5": "withdrawTokenToClientAccount(bytes32,bytes32,address,uint256)", +"64c66395": "getUIntValue(uint256)", +"64c76117": "endDistribution()", +"64c79bf3": "AddresstoString(address)", +"64c7b3bf": "Journal(uint256)", +"64c7b78c": "addOrg(string,string,string,string,string,string)", +"64c877f1": "depositLiquidateThePool(uint256)", +"64c88d62": "calcDemurrage(uint256)", +"64c8cd8c": "unlockMinedBalances(uint256)", +"64c8e825": "PooCoin()", +"64c96322": "setAllocationOpen(uint256)", +"64c96572": "TokenLMTC(uint256,string,uint8,string)", +"64ca55d0": "checkUserDivsAvailable(address)", +"64ca6478": "createImage(uint256[],uint256,uint256,bytes32[],string,string,string)", +"64cab0e3": "setCurrentPrizePool(bytes4)", +"64caf214": "setPlayerDetectGroup(address,address,uint8,uint32)", +"64cb5338": "FundedAmount(uint256)", +"64cbbd34": "WalletChanged(address,address)", +"64cbbdc7": "addDividendsForAddress(address,address)", +"64cbfdd6": "p_update_planetCryptoUtilsAddress(address)", +"64cc7327": "retrieve(string)", +"64cc7719": "getUserDataOnEther(uint256)", +"64ccd7a0": "getAutomatedReporterDisputeBondToken()", +"64cd1f69": "requestInvestment(uint256,uint256,bool)", +"64cd4a1a": "round4TokensRemaning()", +"64ce1068": "lockExpiration()", +"64ceed99": "foundersTimelock()", +"64cefc90": "fliqToken()", +"64cf6d71": "toBytes1(bytes,bytes,uint256)", +"64cf9167": "Numisma()", +"64d03095": "getSpecificTransaction(address,uint256,uint256)", +"64d03144": "Plaak(uint256)", +"64d05519": "createLastWill(address,string,string,string)", +"64d0bbc4": "increaseGenerationCount(uint256,uint8)", +"64d0d64c": "testControlCreateWithParentNotInUse()", +"64d0e83b": "jackpotWinCount()", +"64d12ec6": "getRevisionIpfsHash(bytes20,uint256)", +"64d17c08": "setServiceTokenAddress(address)", +"64d188eb": "fixAssetsAboveLimits(bytes32,bool)", +"64d34045": "setCCH_edit_20(string)", +"64d3e7c9": "ReserveToken(string,string)", +"64d40354": "limitAmount(uint256,uint256)", +"64d414bf": "getTokens(uint256,uint256,uint256)", +"64d4702f": "getNextKeyPrice(uint256)", +"64d4c819": "TYPE_HASH()", +"64d538d3": "StartIco()", +"64d563f1": "doubleClaimSegmentSlash(uint256,uint256,uint256,uint256)", +"64d57a03": "GainTempStuff(address,uint32,uint256)", +"64d582c0": "incentiveDistributionInterval()", +"64d5922f": "pingBlock()", +"64d5d024": "isValidBox(uint8,uint8,uint16)", +"64d6a95f": "changeGameParameters(uint256,uint256)", +"64d75891": "XXXXXXXX03(uint256)", +"64d79f20": "internalRegisterCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", +"64d85348": "deleteOffer(address,address)", +"64d905c0": "awaitingParticipants()", +"64d98bd3": "ownerTransferJackpotToken(address,uint256)", +"64d98f6e": "isSolved()", +"64d9a9e9": "AirDropToken(string,string,uint8,bytes32,uint256)", +"64da8ad3": "settleSeller(address,uint256)", +"64dab033": "landmarkPriceStepDenominator()", +"64dab283": "getWHGDonationAddress()", +"64dad32f": "isTokenUser(address)", +"64db3a8a": "buyAura()", +"64db5aa8": "ARDBatchTransfer()", +"64dc68b8": "ILove0xBTC(string)", +"64dc807a": "burnUndistributedTokens(uint256)", +"64dd891a": "attack(uint256)", +"64ddc605": "lockupAccounts(address[],uint256[])", +"64dde40f": "isTournament()", +"64ddedc6": "Triangle(uint256)", +"64ddfa29": "getAdminAddresses()", +"64de4c1d": "setTatAddress(address,address)", +"64df049e": "protocolFeeRecipient()", +"64df19da": "removeCustomTimeLock(string)", +"64dfe85e": "Dsteem()", +"64e08644": "stakeRemainingToVote_Eth()", +"64e0bbc5": "checkMyTransactions()", +"64e19bdd": "ownerAirdrop(address,uint256)", +"64e1f38b": "howManyKeysCanBuy(uint256)", +"64e21c9e": "DirectFundingProcessed()", +"64e24f4b": "UpdateClientTokenAccount(address)", +"64e28148": "clear(address,uint256,uint256)", +"64e28636": "getLateFee(address)", +"64e2ec50": "collectOtherTokens(address)", +"64e2fdfa": "ToukenToken()", +"64e31d74": "RaffleLedger(string,uint256)", +"64e36d04": "hardCapInEther()", +"64e39b87": "setFundsWallet(address)", +"64e40eb9": "withdrawTokens(address,address,address,address)", +"64e4596e": "_getPVPContendersCut(uint256)", +"64e48fcd": "testResetBet()", +"64e48fde": "findPossibleDelegatorsOfRaw(bytes32)", +"64e4a8fb": "xaurCoined()", +"64e50fb9": "setIco()", +"64e593c0": "setStartTimeIco(uint256)", +"64e5c8be": "getRoundPrizeShare()", +"64e62afc": "setSegmentOwner(string,uint32,uint32,string,string)", +"64e749ff": "getPosition(bytes12)", +"64e779b1": "unmint(uint256)", +"64e7e4a4": "transferNotification(address,uint256,uint256)", +"64e8687f": "withdrawTalao(uint256)", +"64e8d682": "pre_startdate()", +"64eaa454": "crowdsaleAmountLeft()", +"64eaff54": "getSquirrelmasterReq()", +"64eb7327": "_getContent(bytes32)", +"64ebd70d": "the365address()", +"64ec8bdb": "creatorWithdraw()", +"64ed31fe": "authVotes(address)", +"64eda74b": "setIsFrozen(bool)", +"64eded20": "_getTokenAmountWithBonus(uint256)", +"64edfbf0": "purchase()", +"64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", +"64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", +"64ef563c": "reveal_registration(uint256,address,address)", +"64f018d8": "issue(address,uint256,string,string)", +"64f05fd7": "calculateWithdrawableAmount()", +"64f06b39": "setPC(uint256)", +"64f101f0": "closeMint()", +"64f15430": "fundVesting(address,uint256)", +"64f1873b": "ICOstarttime()", +"64f39b47": "return_funds()", +"64f40a3c": "RESERVED_TOKENS_FUTURE_OPERATIONS()", +"64f42a99": "addUser(address,bytes32)", +"64f4b094": "getLowestBid(uint8)", +"64f54a17": "getLatestItemRaffleInfo()", +"64f65cc0": "setFinished()", +"64f67f33": "DIPToken()", +"64f6f7b9": "setup(address,uint256,uint256)", +"64f8ad1f": "get_default_approval_duration()", +"64f951e9": "sessionBlockSize()", +"64fa3070": "getEscrowFee(address)", +"64faf22c": "left18(uint256)", +"64fb7d68": "coinMinter(uint256,uint256)", +"64fc2d9d": "_tryCreateEtherMonster(uint256,uint256)", +"64fe5cde": "MAX_UINT48()", +"64ffb47b": "getTotalMicroKeys()", +"65011760": "DOCToken()", +"650271d2": "makeMove(uint8)", +"65030adb": "RESERVED_TOKENS_ICO()", +"65030e75": "setSecretContract(address,uint256)", +"6503178a": "setMinVeriAmount(uint32)", +"65033845": "XiaoshiToken()", +"65036ca9": "zethrBuyIn()", +"6503a701": "InitiatePayout(address,string,string)", +"6503e5ff": "mFUNDING_BONUS()", +"65045a2b": "bottomName()", +"650462ab": "tokensMasterNodes()", +"650500c1": "whatIsTheMeaningOfLife()", +"65050e27": "checkCandy(address)", +"65054e55": "claimSellerFunds(address,address,address,uint256)", +"65058f4c": "requestPayout()", +"65061957": "EMPTY_RESOURCE_SET_ID()", +"65066810": "WHITELIST_SALE_LIMIT()", +"650669d2": "getCompte_1()", +"6506b0d6": "setData(string,string,string,string,string,string)", +"6506b623": "rotateBitsLeft(bytes,uint256)", +"65084b76": "OpenRegistryRules(address)", +"6508978b": "updateLatestSaleState()", +"65089dd8": "freezeStatsSumHours(uint256)", +"65093661": "newCommunity(address)", +"650944a6": "beneficiaryStash(address)", +"650955d4": "HashToken()", +"65098bb3": "calculateCrossConnectorReturn(uint256,uint32,uint256,uint32,uint256)", +"6509c195": "setPartnerPool(uint256,uint256)", +"6509e776": "CC()", +"650b147d": "paidToPartners()", +"650c2b28": "tokensPerDollar()", +"650c4226": "changeFees(uint256,uint256,uint256,uint256)", +"650ce14c": "registerPublisher(address,bytes32[5])", +"650d0aa3": "ChangeFee(uint16)", +"650d22e8": "countryTimeLock()", +"650d5d6b": "get_status(uint256)", +"650d993b": "getCustomer()", +"650dd4fb": "_createCountry(string,uint256)", +"650e1505": "createLock(address,uint256,uint256)", +"650e85af": "setUserRoles(address,uint256)", +"650ee1ee": "NewSale(uint256,address,uint256)", +"650f1dd3": "isSupplier(bytes16)", +"651006c0": "getCreateMarketDenominationTokenValue()", +"6510076f": "giveTokensOne(address,uint256)", +"65103f6e": "hasFees()", +"651044a2": "BitcoinpalletToken()", +"6510cc17": "INITIAL_mulFactor()", +"6510ef4d": "oraclize_query(uint256,string,string[5])", +"65113528": "getBoosterType(uint256)", +"65114459": "getOpenPackageId()", +"6511a98b": "testRegisterProduct()", +"6511eadb": "marketingProfitAddress()", +"65121205": "calculateDevCut(uint256)", +"65121f68": "add1Y(address,uint256)", +"6512c9b5": "OwnersProductCommissionChanged(uint256)", +"65131f63": "getMembersOfTier(uint256)", +"65132ad3": "Police_3()", +"651398e6": "allocateTokenForAdvisor(address,uint256)", +"6513fafe": "resistWhiteList(address)", +"65141c20": "setRemixCount(uint256,uint256)", +"65147784": "Pasband()", +"65149a76": "calculateWinnings(bytes32,address)", +"6514aaca": "minimumCommission()", +"65153632": "assertEq11(bytes11,bytes11,bytes32)", +"65158b3b": "contributor(uint256)", +"6515c1fa": "defineMecenas(address)", +"6515c6a9": "paused2()", +"6515d28c": "getLockingTypeCount()", +"6516395a": "lockCustomer(address)", +"651680af": "stage5Deadline()", +"65170435": "FASDF(uint256)", +"651738a3": "setMinScaled(int8)", +"6517ef33": "getNumberOfOrders(uint256)", +"65181ad3": "GET_METADATA()", +"6518361e": "SCT(uint256,string,uint8,string)", +"651883c1": "batchSpawnAssetWithCreator(address[],uint256[],uint256[],uint256[],address[])", +"6518ad22": "placeETHBid(uint8)", +"65195bc7": "DPNPlusToken()", +"6519fac2": "userExisted(address)", +"651bb617": "tokenlength()", +"651bc2fb": "reserveNIMFAAddress()", +"651bfd2d": "itemPrice(address,uint256,uint256)", +"651c2ff9": "preTge()", +"651c45d2": "addTicket(address,uint256)", +"651c5c84": "TokenWalletHolder()", +"651c5d2d": "getGiver()", +"651c9e99": "GOGRN()", +"651cd08d": "validateStart(address,address)", +"651dd0de": "values(bytes12)", +"651ed944": "startPreICOStage()", +"651f066a": "playerBalance()", +"6520715a": "approveClaim(bytes32,string)", +"6520768d": "modName(string)", +"652084c0": "storeKey()", +"6520ca0d": "levelUpMining(uint256)", +"6520fde5": "auctionPaused()", +"652106d8": "tokenTribe(uint256)", +"65213840": "prizeMoney()", +"652139e2": "setAngelFinishDate(uint256)", +"65216a41": "airDrop(address[],uint256[])", +"6521c03c": "createContribution(address,uint256)", +"65225665": "getPlayerAddress(uint256)", +"65227c7d": "RenCap()", +"65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6522bff1": "update(uint256,string,string,string)", +"65243f87": "findNextWeekday(uint256,bytes2)", +"6524f107": "BlobStore()", +"6525a233": "ORACLIZE_COMMISSION()", +"6525c29d": "rejectAdvertiserCharges()", +"6526db7a": "remove(uint256,uint256)", +"6526ecee": "KingOfTheEthill()", +"652740a7": "TransparencyRelayer(address)", +"6528ef46": "BBY(uint256,string,string)", +"6528f4cb": "getDivRate(uint256)", +"652918bc": "updateProfit(uint256)", +"6529abba": "setSellComission(uint256)", +"6529d1c9": "pricesOfDate(uint256,uint256,uint256[],uint256)", +"652b51eb": "RefundEnabled(uint256)", +"652b810c": "setInternalStakingAddress(address)", +"652c00c9": "maintainPlayer(address,uint256)", +"652ca8f4": "cofoundersSupplyDistributed()", +"652d38fc": "getTotalIn(address)", +"652da5ff": "b(bool)", +"652dad7b": "batchDecreaseApproval(address[],uint256[])", +"652db9ab": "_distribute(address,uint256)", +"652de5ad": "countPerfManagers()", +"652ebb4c": "tokenPriceInETH()", +"652edd41": "purchaseDatesEdition(uint256)", +"652f1f16": "addSignature(string)", +"652f6494": "treasuryOfficials(uint256)", +"652f78cc": "allocateCommunityToken(address[],uint256[])", +"6530b7f9": "_createDrink(string,address,uint256)", +"6530e008": "STAGE2_TIME_END()", +"6531041b": "updateMIN_CONTRIBUTION(uint256)", +"6531a708": "getHolderEditions(address)", +"6531dbff": "totalFundedEther()", +"65325871": "transferableTokensOf(address)", +"6532b646": "SFI()", +"65343fcb": "TrustEth()", +"6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", +"6534ccd2": "addHouse(address)", +"6534eb76": "recycling(uint256)", +"653704b1": "_changeName(string,uint256)", +"65372147": "result()", +"65375f38": "updateCustomerKYC(address,address,address)", +"6537e401": "setIII_S(uint256)", +"653853c0": "AMLToken()", +"6539335a": "toTipoEnte(uint8)", +"65395242": "MathisTestToken()", +"65397d5e": "refundOIDIndex_()", +"653a8f14": "getNumTilesFromBoard(uint16)", +"653abf37": "setDecision(bytes32,address,address)", +"653ac422": "invest(address,address,uint256)", +"653c3174": "investorsNumber()", +"653c95b8": "getContribution(address,uint256)", +"653c968a": "Bethopia(address,address)", +"653c9eea": "isBS(address)", +"653cfd2f": "testTemp4()", +"653d1ca4": "getPI_edit_21()", +"653e0f7f": "participants(bytes32)", +"653e2e0d": "setLastPositions()", +"653f23f8": "registerJuryMember(string,address)", +"653f7219": "AddVerifiedInfo(bytes32)", +"653fbca1": "payableEtherReceived()", +"653fcf4c": "pewdiepie()", +"65401882": "setDB(address)", +"6540742f": "MIN_BET()", +"6540dc07": "_destroyImpl()", +"6540fcc2": "PRICE_PRESALE_WEEK1()", +"654142c7": "getBoolField2()", +"65419516": "bettingStart()", +"654259dd": "availableAmount(address)", +"654286d1": "changeFrozenBalanceAll(uint8)", +"6542fed7": "evaluateShareholders(address,address)", +"65433e7f": "AntFundRobotToken()", +"654470fc": "getTotalSellingItem()", +"65449436": "CryptoConseilSuisse()", +"65450a90": "ACEBlock()", +"6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65472731": "lastBlock_a5()", +"6547c080": "Renmin(uint256,string,uint8,string)", +"65483f69": "getBNTBalance(address)", +"65488541": "Harimid(uint256)", +"6548b40d": "depositErc20(address,uint256)", +"6548e9bc": "setRelayer(address)", +"65497caf": "limitDateSale()", +"654a1855": "CentToken(uint256,string,uint8,string)", +"654a95f2": "calculateEggSell(uint256,address)", +"654a9f69": "CappedCrowdsale(uint256,uint256,uint256,uint256,address)", +"654af496": "callDividend(address)", +"654b3110": "allowIssua()", +"654b6105": "DestiNeedToken()", +"654c2111": "Cash311()", +"654c6daf": "totalTeams()", +"654c7381": "listItem(uint256,uint256,address,bytes32)", +"654c8748": "setBitSTD(address,address)", +"654cf88c": "store(bytes32)", +"654d146a": "costAndBuyTokens(uint256,uint256)", +"654e27f9": "callBtoWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"654e51e7": "setRewards(uint256,uint256)", +"654f18b1": "DragonPriceUpdated()", +"654f1ccb": "getGamesLength()", +"654f4575": "getTopN(uint256)", +"654f4b61": "bidHash()", +"654f7d40": "ETHERRED()", +"654f97a3": "setClaimStatus(bool)", +"655012a9": "sumPrice()", +"655042ee": "OSCoinToken()", +"655059db": "create(bytes32,bytes32[])", +"655187b2": "Aragon()", +"6551fb11": "localsStore(address,address)", +"65521111": "isAble(address,uint8)", +"6552a562": "updModule(string)", +"6552d8b4": "removeReceiver(address)", +"655330f4": "NLog(uint256)", +"65536ab3": "BFEXToken()", +"655388be": "walkTowardsBlock()", +"65538c73": "fireEventLog0()", +"65538da0": "preSaleOpened()", +"655391c9": "updateBaseTokenURI(string)", +"6553b03c": "cloneContractor(address,uint256)", +"65540940": "partnerAllocateRestrictedTokenTo(bytes32,bytes32,uint256)", +"6554d179": "attachedSystemActive()", +"65550e70": "getNextAvailableCard()", +"6555394b": "updatePrice(address,bytes32[],uint256[],uint256)", +"655584d6": "ChangeDate(uint32)", +"6556f767": "getBytes(address,bytes32)", +"6557a47c": "Tier_Wildcat()", +"6557b677": "lowTokensToSellGoal()", +"6557dfc8": "AnimeToken()", +"65581793": "S2()", +"6558488a": "scheduleSetBool(address,uint256,bool)", +"6559aeb2": "transferTimelocked(address,uint256)", +"6559c08d": "checkProblemsSolved()", +"655a4ebf": "revokeAttribute(address,address,bytes32,bytes)", +"655b08eb": "getRandom(uint256,uint256)", +"655b3667": "TOKEN_SUPPLY_AIRDROP_LIMIT()", +"655b97db": "ownershipLookup(address,uint256)", +"655bb0e8": "transferSubcontractsOwnership(address)", +"655bb565": "changeGasPrice(uint256)", +"655c737c": "getPositionOwedToken(bytes32)", +"655cc366": "LogGoalReached(address,uint256)", +"655d0862": "createSignedMessageOracle(bytes32,uint8,bytes32,bytes32)", +"655d225f": "myTime()", +"655d65c4": "limitSell(uint256)", +"655dc4c2": "getLawyerCount()", +"655e0d38": "changeBroker(address)", +"655e4224": "addEntryInSecondsPeriods(address,uint256,bool,uint256,uint256)", +"655e51f2": "MIN_GOAL_EBC()", +"655ec3e4": "transferSoul(address,address)", +"655f8294": "PreviousTime()", +"655fc4db": "vault_releaseDeposit()", +"655fcaf5": "feeReceiverWallet()", +"65604a11": "VESTING_WALLET()", +"6560a307": "suggestedGas()", +"656104f5": "_setOrganiser(address)", +"6561e6ba": "feeWithdraw()", +"6561e921": "becomeRenown(bytes32)", +"6561ffb9": "LOTTECHAIN()", +"65620283": "transferTokens(address[],uint256[])", +"65622cfd": "transferFor(address)", +"65630493": "ERC20Impl(address,address,address,address)", +"656362b5": "regFactory()", +"6563b2fc": "tokensLeftInPhase(int8)", +"6564a7af": "DeployENS()", +"6564ad28": "IFNToken(address,address,uint256,string,uint8,string)", +"65651b6e": "addSkillName(address,bytes32,address)", +"65670adc": "teamSupply18Months()", +"65675074": "getAllTokensOfUser(address)", +"65676c9e": "baseExchangeRate()", +"65679536": "month24Unlock()", +"65687008": "fundraiserAddress()", +"65688182": "recomputeLastAverageBalance(address)", +"65688cc9": "newGuard()", +"6568a279": "withdrawAll(address[])", +"656afdee": "register(string,bytes32)", +"656b275c": "expandY()", +"656b9952": "produce()", +"656ca11d": "CONFIG_FEES_MUL()", +"656d2f63": "ManagedAccount(address)", +"656d3091": "createEthSaleAuction(uint256,uint256)", +"656d677e": "releaseTotal()", +"656e8d6f": "getTutorialBabyGen(uint16)", +"656ea1f6": "snikerts()", +"656f416d": "uponTransferFrom(address,address,address,uint256)", +"656f64f5": "pendingGDPOracle()", +"656f6873": "ActualizePriceBeforeStart(uint256,uint256,uint256,uint256)", +"65704506": "currentGame(address)", +"657128a2": "altTokenOf(address,address)", +"657157e5": "canTrade(address,address)", +"657206ef": "getSignedAddresses()", +"6572ab5b": "shareCycleIndex()", +"6572ae13": "calculateWinner(uint256,uint256)", +"6573ee1e": "doFailingApprove()", +"6574bdd2": "newDream(address,string,string)", +"65757eeb": "removeDiscounts(uint256[])", +"65766b64": "stageBegin()", +"6577ab77": "_checkSeal(address,address,address,uint256)", +"65781994": "SESAPACToken()", +"65783c66": "checkTicket(uint32)", +"6578d920": "_canSendGameGift()", +"65791e46": "setTimeTransferAllowance(uint256)", +"65794de3": "secondStageDuration()", +"657a2ffa": "Register(uint8,string)", +"657a37ad": "depositAndSell(address,address,uint256)", +"657ad078": "moveOwner(uint256[3],uint256[4],uint8[176],bytes32,bytes32,uint8)", +"657ad479": "presalePerEth()", +"657ba57b": "show_The_name_of_option_C()", +"657c5dae": "ApproveTitle(uint256)", +"657d38b8": "endICOp3()", +"657db38d": "ten_wallet()", +"657edc11": "removeLootbox(address)", +"657f3ab0": "getPricePoint(uint256)", +"657f4783": "getRealGoldBought()", +"658030b3": "tokenInstance()", +"65826666": "executePullPayment(address,string)", +"658268c1": "StableCurrencyToken(uint256,string,string,uint256)", +"658311ab": "jackpotLevel()", +"658389cb": "isFromCountry(address,address,uint256)", +"6583e239": "STATUS_DEAL_APPROVE()", +"6584a5b5": "removeLock(address[])", +"6584ceb0": "StartNewEpoch()", +"6584fcce": "ATCReserveLocker()", +"658523d9": "StrategicToken()", +"65855010": "rateSale()", +"658577e9": "buyXid()", +"65857a5e": "parkingOn(address,uint256)", +"65859862": "add_arbits(address,address,uint256)", +"6585c27c": "getrandoms()", +"6585dc12": "enableRefundPeriod()", +"658612e9": "gasFee()", +"65862330": "TestableStandardCampaign(string,uint256,uint256,address,address)", +"65863b24": "getTotalCollectedPromoBonus()", +"6586bb25": "MAXIMUM_PARTICIPATION_AMOUNT()", +"6586bd51": "getNodalblockSender(string)", +"65879e72": "JED()", +"6587ab3d": "toggleSafetyMode()", +"6588875e": "ShutterToken()", +"6588c11c": "_startSwap()", +"658a5692": "_totalEthCollected()", +"658b98a9": "pointMultiplier()", +"658bc083": "initDistribution(address,address,uint256)", +"658bf147": "setArea(uint256,bytes32)", +"658c55ed": "saleProceedsFiat(uint256)", +"658cc376": "getCensuringCount(uint16)", +"658d3423": "getGameMinAmountByBet(uint256)", +"658dc76f": "addChunk4ToWhiteList()", +"658df3f7": "approveCompletedMilestone(uint256)", +"658e587f": "getWithdrawConfirmationCount(uint256)", +"658eefd1": "notifyRefundToken(uint256,address)", +"658f2ad6": "CrowdSale_Resume()", +"658fbfbc": "transferOnError(address,uint256)", +"659010e7": "m_spentToday()", +"65909081": "Brothel(address)", +"6590f0ed": "DUKCoin()", +"65921f02": "paladinEquity()", +"65926a20": "changeSaleOn(uint256)", +"6593643c": "CreateIND(address,uint256)", +"65937ab9": "isUpdateAuthorized(address,uint256)", +"659382fb": "payoutETH()", +"6594479f": "LTYP()", +"6594d99b": "isDataNo(bytes)", +"6594ea6c": "EGGS_TO_HATCH_1SQUIRREL()", +"65957bf5": "getShareToken(uint256)", +"6595c94e": "calculateTierBonus()", +"6596217b": "HAYATO_FTL_SPEED()", +"659621b5": "r0()", +"65968727": "innocoinToken()", +"6596cff3": "setCrowdsaleContract(address)", +"65975691": "getDividends(uint256,uint256)", +"6597a076": "getBonuses()", +"6598afb9": "yearlyBlockCount()", +"65995733": "getSalaryTokenValue(address,address,address)", +"65995cc8": "uploadAdvertisement(uint256,string,address,uint256)", +"659a46e8": "coinLockRmoveMultiple(address[])", +"659a7486": "inTradingTime()", +"659a9cbc": "coinsUnit(uint256)", +"659ae215": "saleDateFinish()", +"659b586e": "readQuantityList(address,uint256,uint256)", +"659b9c72": "UsersNumber()", +"659bd174": "TransferredTimelockedTokens(address,address,uint256)", +"659d1185": "angelTimeLock()", +"659d20eb": "getFoundersGames(address)", +"659d6bd1": "readPower()", +"659d7aaa": "sendEtherManually(address,uint256)", +"659de63b": "distributeToken(address[],uint256[])", +"659e0729": "getFirstAmount(bytes32,bytes32)", +"659e27b0": "setWhitelistingAddress(address,address)", +"659e69e9": "setDelegateAdmin(address,address,string,bool)", +"659eeabc": "tokensWithAmount()", +"659eeef1": "increasePaymentsBalance(address,uint256)", +"659f9e3c": "lastEpochBlockHeight()", +"659fb968": "getOracleOutcomes(bytes32[],address[])", +"65a096dc": "changeWithdrawableRound(uint256)", +"65a114f1": "resetTime()", +"65a178c0": "getTlength01()", +"65a20ef9": "hasRole(uint256,address,uint256)", +"65a26185": "updateGranted(address,address)", +"65a31545": "doDeposit(address,uint256)", +"65a3d8f0": "setEtherCentPrice(uint256)", +"65a4c957": "resultsDelay()", +"65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", +"65a572dc": "EGREngravedToken()", +"65a5e708": "Upgraded(uint256)", +"65a5f1cd": "changeFoundation(address)", +"65a61ab4": "RWSC()", +"65a6bb29": "getAllOracles()", +"65a707bf": "DrugDealer()", +"65a7dcec": "addWinners()", +"65a8a483": "setColdWallet2(address)", +"65a91d4a": "createAmountFromTmedForAddress(uint256,address)", +"65aa96bd": "postJobOffer(uint256,address,uint256,uint256,uint256)", +"65aade1a": "getEmployeeId(address)", +"65ababe9": "createERC20Token(string,uint8,string,uint256)", +"65abb3f2": "_doAddPollOption(uint256,bytes)", +"65ac0d8b": "Withdrawl(address,uint256)", +"65ac2320": "ownerName()", +"65ac4341": "getTotalAmount()", +"65ac8c2a": "getSellOrdersInfo()", +"65ad9f34": "setHardCap(uint256,uint256)", +"65ae247e": "issueLockedTokensCustom(uint256,uint64)", +"65aebe7b": "ind(address,address)", +"65aec658": "_createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"65af2a7d": "investedDDT(address)", +"65afa594": "Member_GetMyTokens()", +"65b040c8": "setPriceWithBonus(uint256)", +"65b051b8": "MEWSToken()", +"65b06136": "makePayouts()", +"65b0bc85": "createNameAndPoint(bytes32,address)", +"65b0d711": "updateApprovalOfToken(address[],bool)", +"65b0e5b3": "setethrate(uint256)", +"65b1b92d": "unLinkNewHouse()", +"65b1c987": "resetBurntTokens()", +"65b1fdf4": "scheduleIssuePOIs()", +"65b27205": "testFailMintWhenStopped()", +"65b2a863": "revoke(string)", +"65b36bbb": "countpat(uint256)", +"65b37d70": "HotManChain(uint256,string,uint8,string)", +"65b3a7ca": "isGameExpired(uint256)", +"65b686b0": "burnRemainTokenOffering()", +"65b6cd66": "setUserTransactions(string)", +"65b6d9e2": "a(uint256,string)", +"65b70e45": "UpMineLVL(uint256)", +"65b7a89d": "DeDeContract(address,address,address,uint256,uint256,address,address,uint256)", +"65b7b357": "getVotersAnswer()", +"65b892a1": "withdrawForOneStep()", +"65b980ab": "performTransaction(address,bytes32)", +"65b9e37d": "hardParticipationCap()", +"65ba12b8": "percentWeiJackpot()", +"65ba331b": "IcoStagePeriod(uint256)", +"65ba36c1": "interfaceHash(string)", +"65baf5db": "tier2Start()", +"65bb193e": "createInsurance(string,address)", +"65bbb26a": "Linamyd()", +"65bc35fa": "Streem(uint256,string,string,uint8)", +"65bcaf4a": "Ubiou(uint256,string,string)", +"65bcfbe7": "payouts(address)", +"65bdadf6": "ninthTime()", +"65bf1ffc": "authorizedStartTrading()", +"65bfdb0b": "_receiveChild(address,uint256,address,uint256)", +"65c04faf": "random(uint32,uint256)", +"65c09830": "changeStatusGame(uint8)", +"65c0eecf": "BitcoinLiza()", +"65c13fdb": "changeGasPriceLimit(uint256)", +"65c19af0": "getStringLength(string)", +"65c24799": "getYayNum(uint256)", +"65c2c60f": "checkName(bytes32)", +"65c2d3a0": "romper()", +"65c2e8a1": "bossAdmin()", +"65c2fab2": "NewIssue(address,uint256,uint256)", +"65c301ab": "getDriver(address)", +"65c40b07": "bonusesDates(uint256)", +"65c4a861": "cordY(uint256)", +"65c4b463": "_tag(bool,string)", +"65c5826f": "ENC()", +"65c5e683": "mine(address,uint8,bytes32,bytes32)", +"65c683cf": "metadataOfToken(uint256)", +"65c724cd": "dividendsCollected()", +"65c72840": "getDay(uint256)", +"65c7b711": "MockToken()", +"65c91b0b": "testFailTransferOnlyTrustedCaller()", +"65c95a6b": "setUFee(uint256)", +"65c9e51e": "setDepositPeriod(uint256,uint256)", +"65cacaa4": "getVaultAddress()", +"65ccb687": "PULSToken()", +"65cd048b": "setDividendFee(uint8)", +"65cd1bea": "PayToken(address,address,uint256)", +"65cd3686": "setIsSendingLocked(address,bool)", +"65ce47fb": "_myDecimal()", +"65ce5222": "specificTransferFrom(address,address,uint256)", +"65ce7395": "setMinVote(uint256)", +"65cf3a48": "bonusPrice()", +"65d0a890": "Daio(uint256)", +"65d0e4a7": "addBot(address,address)", +"65d1926d": "dropAddress()", +"65d1df24": "s2s()", +"65d27248": "setSellPrice(uint16,uint16,uint8,address,uint256)", +"65d300ea": "CreateAds(address,uint256)", +"65d43868": "allowedOracleChangePercent()", +"65d48d0b": "freezeBalancesOf(address)", +"65d4bdab": "targetEth()", +"65d51dd5": "_phase2Supply()", +"65d5b48d": "PRECOMMITMENT_VESTING_SECONDS()", +"65d61ad6": "PwdHasBeenSet(bytes32)", +"65d6759a": "getGenome(uint256)", +"65d68308": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"65d6dbbd": "unPromisedPop()", +"65d6e6a4": "jackpotMaxTime()", +"65d73851": "calculatePrizeCut(uint256)", +"65d7d3d0": "LegacyReputationToken()", +"65d80117": "getResource(string)", +"65d8a20a": "updateTransactionFeePercentage(uint8)", +"65d8e32e": "setProfileHash(string)", +"65d967b0": "ETH_HARD_CAP()", +"65d9d8e2": "depositEtherForUser(address)", +"65d9df9c": "totally_decrease_the_supply(uint256)", +"65d9f31e": "addressFounders3()", +"65d9f55a": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"65da1cfc": "AdminClaimed(address,address)", +"65da5603": "produce(uint256)", +"65db63d0": "kittensDroppedToTheWorld()", +"65db6c8c": "OPTIONAL_POOL()", +"65dba2b3": "removeTeamMember(address,bytes32)", +"65dbcc0f": "addThenSubUInt(uint256,uint256,uint256)", +"65dc128e": "p_setAirdropPercent(uint256,uint256)", +"65dc4e3a": "addCollateralMarket(address)", +"65ddf33b": "productsShipped()", +"65de1eb3": "getVendor(uint256)", +"65df517e": "CTHToken()", +"65df7933": "totalDevelopers()", +"65dfc20f": "setWalletFees(address,uint256)", +"65e00beb": "createFlowerAuction(uint256,uint256,uint256,uint256)", +"65e0c718": "DisputeResolved(bytes32)", +"65e0e117": "getSendersCalcTokens(address)", +"65e0e9a2": "preIcoState()", +"65e14731": "_kittenOwner()", +"65e16933": "buyPRETDETokensWithoutETH(address,uint256,uint256)", +"65e16a09": "transferadmin(address,address,uint256)", +"65e17c9d": "feeAccount()", +"65e1cc85": "foundersPercent()", +"65e21cb0": "transferNewBunny(address,uint32,uint256,uint256,uint32,uint32)", +"65e23ce3": "minimumEther()", +"65e2406a": "takeEthForExchange(uint256)", +"65e2409b": "getPlayerEnergyByAddress(address)", +"65e4349c": "NewStage(uint256,uint256)", +"65e44d06": "BITOToken()", +"65e47208": "lcBalance()", +"65e49444": "claim_bix_with_maturity()", +"65e4ad9e": "isAuthorized(address,address)", +"65e60ef2": "read(bytes32,bytes32)", +"65e62ee6": "getInvestorKycLimit(bytes32,uint8)", +"65e7096d": "allMaskGu_()", +"65e7ee50": "RCCContractTest()", +"65e807ab": "getTokenLossValue(uint256)", +"65e83ae1": "getCrowdsaleTokens()", +"65e8faf6": "isValidIndex(uint256,uint256)", +"65e93b3f": "getUserVotes()", +"65e9cc4e": "contributionPending()", +"65ea19a8": "set_notary(address)", +"65ea2b77": "ethaddrc()", +"65ea62ff": "initTransfer(address,uint256,uint256)", +"65eb0dec": "changeAllowedTakerBetsPerMakerBet(uint256,uint256)", +"65ec4c2e": "retirarDinero(uint256)", +"65ed16af": "_addBridgeNativeFee(uint256,uint256)", +"65ed4a45": "getVerifiedNumOrganizers()", +"65ed6e23": "getAllocations()", +"65ed8a4a": "proposedTotal()", +"65eec589": "_markWithdraw(address,uint256)", +"65ef1a3f": "setHotWalletAddress(address,address)", +"65ef617d": "AdminWalletUpdated(address)", +"65ef7b95": "getStoreAddressById(uint256)", +"65efd3a3": "addCertAdmin(address,bytes32)", +"65f0a00b": "ONETIDC()", +"65f17913": "monarchsByNumber(uint256)", +"65f27bea": "testSubBalanceFailsBelowZero()", +"65f2bc2e": "unitsOneEthCanBuy()", +"65f3c31a": "Put(uint256)", +"65f41211": "validStoreDest()", +"65f42e7a": "APTV()", +"65f4d9f6": "failInvestPercents()", +"65f520a7": "kittyData()", +"65f5463e": "CLIP()", +"65f594a7": "revealCurve(uint256,uint256,uint256,bool,bytes32)", +"65f63c1b": "queryToken(uint256)", +"65f68c89": "getId(address)", +"65f6a049": "sellGrimReapersAgainstEther(uint256)", +"65f6c15e": "ordersOf(uint256,uint256)", +"65f6d6a2": "FOUNDERS_TOKENS()", +"65f77c63": "getCertAddressByID(string,bytes32)", +"65f7aaff": "endRoundDecision()", +"65f84cbe": "_createWeightedMultiplierLot(address,uint256,uint256)", +"65f88c0d": "getNumUsers()", +"65f926ff": "getIdArrayItemsCount(address,address,string)", +"65f937ed": "sumOfAvailableIcoCoins()", +"65f97082": "startIco2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65fa2b97": "calculate_with_fees(uint256)", +"65fa2f7f": "getLastPrice(uint256)", +"65facff0": "_isMember()", +"65fae654": "Mychatcoin()", +"65fb99ba": "findUnConference(string)", +"65fba60d": "crowdsaleAllowance()", +"65fbc99f": "distributedSaleStakes()", +"65fc1253": "setExternalDependencies(address[])", +"65fc535b": "withdrawBenefit(address,uint256)", +"65fc783c": "getNumOfVoters()", +"65fcb49e": "maxContractBalance()", +"65fcf1b5": "releaseFirstUnlock()", +"65fddc81": "reducer()", +"65ff0f5a": "TradeListing(address,address,address,uint256,uint256,uint256,bool,bool)", +"65ff8220": "sampleContract()", +"65ffe43d": "lastFund()", +"66003666": "bountyTokens(address,uint256,string)", +"66005ede": "vc1Wallet4Pct()", +"6600811c": "tokenSaleHalted()", +"6600d282": "releaseAngelFirstVested()", +"6601345c": "changeTierController(address)", +"66013bdd": "withdrawToken(address,address,uint256,address,uint256,uint256,address)", +"6601cd77": "getExchangeDetails()", +"66025047": "isCategory(uint256,uint8)", +"660357f2": "removeWhiteListedContracts(address)", +"66035cc0": "adPriceHalfDay()", +"66040458": "signedApproveAndCall(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", +"66042e7a": "etherToSendFund()", +"6604ca6b": "STO_KEY()", +"66056e8b": "destructSale()", +"6605bfda": "setTreasuryAddress(address)", +"6605ff66": "totalSales()", +"660686de": "cutBAU2Length(bytes32,address,uint256)", +"6606873b": "setMem(uint256)", +"6606b7d4": "democFee()", +"6606fe1e": "CABCrowdsale()", +"66081ec1": "JACKPOT_WALLET()", +"66092ea8": "ignited()", +"66098d4f": "plus(uint256,uint256)", +"66099706": "getChannelCred(address,uint256)", +"660a333e": "assetOwnerAdded(bytes32,address,address)", +"660aab8e": "profileOf(address,bytes32)", +"660b24b4": "emergencyTokenDrain(uint256)", +"660b7ad5": "rentDue(bytes32,string)", +"660ba74e": "_availableBetting(uint256,uint8,uint256)", +"660c325e": "evPayOut(address,uint256,address,uint256)", +"660c6813": "crowdsaleStopDate()", +"660d0d67": "dataStore()", +"660d5887": "registeredUsers()", +"660dee82": "addTask(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"660ef82d": "advisersAllocation()", +"660f77aa": "CVDToken()", +"6610a38a": "mountCitadel(address,address)", +"6610f7a8": "previousBurners(address)", +"6611611c": "MIN_INVESTEMENT()", +"661195bc": "transferFromLowFunds(address)", +"6611f5f2": "ZTR_ETH_extra_price()", +"6612283d": "subdivisionEnabled()", +"66125b25": "boolFunc(bool,bool)", +"661309ac": "allowedTransfers(address)", +"6613221f": "burnLand(uint256)", +"66134794": "exploreCount()", +"6613ee9c": "_isSigned(address,address,bytes32,uint8,bytes32,bytes32)", +"66154885": "getIncomingValueAsEth()", +"6615827b": "LogEscrowEthReq(uint256)", +"6615dd83": "setSeedSourceB(address)", +"6615e357": "setPortfolio(bytes32,bytes32[],uint256[])", +"66161ed4": "setStopContract(bool)", +"66167617": "bet_various()", +"66167663": "subdomainTarget(string,string,string)", +"66168bd7": "depositTokens(address,uint256)", +"6616c886": "canSetBanker()", +"6617e11a": "NiceGuyTax()", +"66180bc7": "testTransferTwoTokensAndReturnFunds()", +"66188463": "decreaseApproval(address,uint256)", +"66188a26": "forwardable(address)", +"6618b008": "cancelSellOrder(address)", +"66194d72": "childToken(address,uint256)", +"661956fb": "depositInvestment()", +"661990bc": "earlyInvestorWallet()", +"661aba0d": "setMntpMigrated(address,bool,string)", +"661ad427": "setOraclizeUrl(string)", +"661b6dae": "eth2qiuRate()", +"661b9065": "getRelationWith(address)", +"661be157": "account_address()", +"661c866c": "requestNewEtherRealID(string,string,string,bool)", +"661d3470": "LUXREUM()", +"661e3605": "ConstructorContract(uint256)", +"661e5ec2": "getPlayerValues(uint8[],uint8[],uint8[])", +"661edfee": "rewardFor(address)", +"6620a935": "sendToOwner()", +"6620cc3c": "GanNFT()", +"6620ffd3": "getNumAnimalsXType(uint8)", +"66210532": "setVestingMasterAddress(address)", +"6621b7be": "fiatValueMultiplier()", +"66234c4a": "ReleaseManagerSet(address)", +"6623fc46": "unfreeze(uint256)", +"662457c6": "nextProposalID()", +"6625123b": "COINBIG()", +"662512f1": "testThrowTranferZeroTokens()", +"6625b349": "RESERVE_ALLOWANCE()", +"6626b26d": "off()", +"66272374": "setWithdrawRate(uint256)", +"662723bb": "bulkTransfer(uint32[],address[],uint256[])", +"66273fc6": "bountyTokenSupply()", +"6627ace5": "getDCommBallotsEnabled(bytes32)", +"662959cc": "southadvisor()", +"662a3b81": "getHouseAddressTwo()", +"662a6137": "developmentTokensWallet()", +"662a719b": "RewardHalvingTimePeriod()", +"662ad59b": "pixels()", +"662bca97": "SetInRate(uint256)", +"662c6230": "LogResultNoWinner(uint256,uint256,bytes)", +"662d2ec8": "freeze(address,uint256[],uint8[])", +"662d5aa9": "EduMetrix()", +"662da459": "newCostToken(uint256)", +"662dbe96": "getNodeHeight(bytes)", +"662de379": "registerAddress(bytes32,address)", +"662e2536": "cordZ(uint256)", +"662e3470": "getSectionIndexFromRaw(uint256,uint256)", +"662e4db0": "c_preICOBonusPercent()", +"662e4ee4": "changeowner(address)", +"662f0763": "sendTokenReward(address,uint256)", +"662f94c0": "approveBlacklistedAddressSpender(address)", +"662fa2fb": "ProofOfRarePepe()", +"662fac39": "mining()", +"662feffc": "addStore(string)", +"663083f6": "moneyTotal()", +"663152d1": "phaseOneEnd()", +"6631ff1d": "grantToken(address,uint256,uint256,uint256,uint256)", +"6632a507": "testSetupPrecondition()", +"66331bba": "isPriceOracle()", +"6633a2bb": "_newPresserFee(uint256)", +"66341c97": "changelp14(address)", +"6634cec6": "findProductAndIndexById(uint256)", +"6634d917": "startEarlyStage2()", +"66357f57": "descriptionUpdate(string)", +"6635da25": "Voting(bool)", +"6635e0ea": "BlocklabTokenV1()", +"6635e511": "availableForInvestment()", +"66365082": "dealRevert(uint256)", +"6636fca8": "retainers(address)", +"6637324a": "Deploy(address,uint256,uint32,uint256)", +"6637b882": "setDao(address)", +"66383d32": "getCurrentRoundIndex()", +"663890b1": "FinalizableCrowdsaleImpl(uint256,uint256,uint256,address)", +"66389f1f": "OwnerProclaimedDead(address,address,uint256)", +"6638c087": "createCloneToken(string,uint8,string,uint256,bool)", +"6638d82f": "freezeTo(address,uint256)", +"6639016b": "releaseETH()", +"663960cd": "NewWinner(address,uint8)", +"6639dc8e": "emissionLimit()", +"663a0ebb": "tokensAmount()", +"663a339d": "IsSetReferrer()", +"663b0534": "disablePayable()", +"663b3f62": "balancesImporter6()", +"663b8c5a": "_newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", +"663bc990": "test_1()", +"663c01af": "getAllProductIds()", +"663c2e30": "claimPrize(bytes4)", +"663c920a": "redenomiValue()", +"663cebfc": "VeiagCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", +"663d1e84": "createVotacion(bytes32,bytes32[],uint256[])", +"663d6612": "defaultOperatorsTranche(bytes32)", +"663e0f88": "getSpecifiedDecimal()", +"663e90d9": "setBuyNowListing(bytes32,uint256,bool)", +"663f2670": "AccountLinked(address,address)", +"663f70c3": "calculateBounty(uint256)", +"663f8549": "mintReserved(address,uint256,uint256)", +"663f9c0d": "loginState(address)", +"663fc7e0": "highRoller()", +"663ff5a9": "create(bytes32,address)", +"6640ca84": "AgreementPen(address)", +"6641179e": "artistsEditions(address)", +"66417115": "positionOfJingle(uint256)", +"6641cc27": "eliminarVotacion(bytes32)", +"6641cc64": "kycApproved(address)", +"6641ea08": "ROUND_DURATION()", +"6642c0bc": "executeExploit(address,address)", +"66435abf": "getWeight(bytes32)", +"6643caba": "generousDonation()", +"6645167d": "YourCrowdSale()", +"664519bd": "wwamICOcontractAddress()", +"6645c0dc": "transferVotes(address,uint256)", +"66476fcc": "flipTokenReward()", +"66479c08": "payOraclize(uint256)", +"6648cb52": "setPurchasePeriod(uint256)", +"66494ab6": "THAW_CYCLE_FUNDER()", +"6649dfd5": "preCrowdsaleOn()", +"664a1ad6": "fundWallet()", +"664abc0f": "packedToEndTime(uint256)", +"664b3350": "createTransfer(address,uint256,bytes)", +"664b885e": "AddNewPrestige(uint256,uint256,uint256)", +"664c7bf7": "ethEurFraction()", +"664d8629": "withdrawAuctionDklBalance()", +"664dcb93": "getMHTTotalSupply()", +"664dd24f": "getUserTransactionIndexes(address)", +"664e9704": "RATE()", +"664eb12e": "updateCompanyPrice(uint256,uint256)", +"664f4904": "sealMinter(bytes32)", +"66505d1d": "BitcoinisDumb()", +"665289d2": "adjustPriceAndOwnerOfPlayerDuringPresale(uint256,address,uint256)", +"66533014": "supportMessage(uint256)", +"6653be1a": "getGameCardId(uint256)", +"665502ec": "ContractToken(address,string,string,uint256)", +"66550624": "CityLifePlusToken()", +"66552e15": "addVestingForBeneficiaries(address[],uint256[])", +"6655d7dd": "RedeemTokens(uint256)", +"6655ff3d": "WebsiteHostingToken()", +"66566947": "associateWithTeam(bytes32)", +"66566abd": "multSender(address[],uint256[])", +"66576514": "mintDRSCoin()", +"665788f8": "firstCrowdSaleDate()", +"6657b2c0": "reloadTickets(uint256,uint256)", +"665814d8": "_presaleStartTimestamp()", +"6658238c": "Peculium()", +"6658357e": "setCINTokenAddress(address,address)", +"665851bb": "wangxihaoToken(address,address)", +"66587cf6": "MIRT()", +"665905c6": "manuallyResetGame()", +"665939cc": "setupFundingRate(uint256)", +"6659889d": "setPromoWallet(address)", +"66599a40": "setEtherPriceInPoundPences(uint32)", +"665a11ca": "liquidityPool()", +"665a6ab0": "calcBurntFees()", +"665b0d5b": "_taskError(string)", +"665b1bc0": "_mint(string,uint256)", +"665b51ce": "getusedAPI()", +"665bcc32": "ProcessGames(uint256[],bool)", +"665beae7": "ExecutableBase(bytes)", +"665c0b8e": "purchaseMembership(address)", +"665ca475": "VUToken()", +"665d8a53": "MAIN_SALE_END_TIME()", +"665de19b": "mutiSendCoinWithDifferentValue(address,address[],uint256[])", +"665df460": "sqrt(int256)", +"665e06ac": "OATToken(address,uint256)", +"665eba29": "playerForceGameEnd(uint256)", +"665f09fa": "addCoinAmount(address,uint32)", +"665f5149": "JOZ()", +"665f9719": "investInfo()", +"665fb66a": "YBToken(uint256,string,uint8,string)", +"66605ba4": "rename(string)", +"66605c47": "GetBuildingData(uint256)", +"6660b210": "kMinStake()", +"6660da77": "addDiscountStruct(bytes32,uint256,uint256[2],uint256[],uint256[],uint256[])", +"6660ead1": "RANGEEND_11()", +"66612f66": "MAX_DAILY_COSIGN_SEND()", +"666192b9": "___upgradeToAndCall(address,bytes)", +"66625bbd": "revokeContract()", +"6662e4be": "isWinningBet(uint256)", +"66634a16": "getAnimalCount()", +"666375e5": "set_allow_contributions(bool)", +"6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", +"66648dd3": "setRateIco(uint256)", +"6665e0fd": "tradeActive(address)", +"66663d78": "XPAAssets(uint256,address,address,address)", +"6666490c": "getPlayerSpaceshipBattleLossesById(uint256)", +"66666aa9": "rewardPool()", +"6666d22c": "timeBetweenRounds()", +"66671c30": "FBLFounderFund()", +"66671c71": "BaseScheduler(address,address)", +"66675c57": "updateDecimals(uint256)", +"66679ac7": "interfaceTransfer(address,address,uint256)", +"6668df7f": "subCoinAllowance(address,address,uint256)", +"6668ffc6": "isAuditor(address,address)", +"666923ea": "lastBlock_v15Hash_uint256()", +"6669749f": "HamzaCoin()", +"666a3427": "removeOwnership(address)", +"666afadc": "preparePreContribution(uint256,uint256,uint256)", +"666b7d32": "disableICO()", +"666b9132": "PartialCoin()", +"666be68a": "setIcoTokenSupply(uint256)", +"666c11fa": "getuserdayruns(address)", +"666c7ed0": "WIZE()", +"666cd4bd": "calcId(uint128,address,address,address,address,uint256,uint64,bytes)", +"666cdaa0": "getAnime(uint256)", +"666da64f": "claimShare()", +"666de8d5": "setSecretBonusFactor(uint256)", +"666e1b39": "owner(address)", +"666e587d": "fundICO(uint256,uint8)", +"666efa0a": "walletFees()", +"666f0354": "getMonthRefferals(address)", +"666f4cad": "totalWeiWagered()", +"666f6843": "reservedAddress()", +"666fc4d4": "minimunEthereumToInvest()", +"6670bdd8": "getDOwner(bytes32)", +"66731e95": "LogNewWhitelistUser(address,uint256,uint256)", +"667336d8": "available_without_bonus()", +"66734eb0": "MainController(address,address)", +"66735f4e": "_pickWinner()", +"667390c7": "SendmoneyTransfer(uint256)", +"6673ce2b": "Results_of_the_last_round()", +"6673d5c6": "totalSoldTokenCount()", +"6674bfaf": "closeOption(address[3],uint256[3])", +"6676871d": "reserved_funds()", +"6676aaa2": "MplusCrowdsaleB(address,address)", +"66772438": "computeResponse(uint16)", +"6677cef1": "getCrowdsaleManager()", +"6677febe": "get_all_accepted()", +"667815a2": "getCanSellBalance()", +"6678887f": "replacesOldContract()", +"66792ba1": "send(string)", +"667a2f58": "createDepositAddress()", +"667b39b9": "nameOfToken(uint256)", +"667cb72d": "soldIdeaWeiPreIco()", +"667d5d22": "wager()", +"667ec46c": "getCurrentTierStats()", +"667f1656": "preSaleBotReserve()", +"667f9510": "getBundinha()", +"667fc6b9": "IchigoToken()", +"66801384": "STAGE_2()", +"6680285a": "AuthorizedCreateToPrivate(address,uint256)", +"66802a92": "tokenGenerationState()", +"668038e0": "claimDividends()", +"66805de5": "closePool()", +"6680624e": "gasPriceMaximum()", +"66816e2a": "setBaseStrength(uint256)", +"6681b9fd": "fundsRaised()", +"66829b16": "changeToken(address)", +"6682eaf1": "setsecure(uint256)", +"6683381b": "setDiscountToken(address,uint256,uint256)", +"66836acf": "updateBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"6683ee49": "BlockPlanet()", +"6683f9ae": "isSettling(bytes32)", +"6684ffcd": "burnerSet()", +"66855dcc": "removeInt256s(bytes32[])", +"6686e174": "tokensReleasedAmount()", +"66874cc5": "brokers(address)", +"66875554": "resumeTokenSale()", +"66875a31": "FOUNDER_TWO()", +"668767bd": "transferFromForExchange(address,address,uint256,string)", +"6687aa35": "onExecuteAffirmation(address,uint256)", +"6688e305": "EIP20(uint256,string,uint8,string)", +"66894d76": "releaseThreeHotHourTokens(address)", +"6689e28b": "distribution(uint8,address[],uint256[],uint256[])", +"668a0f02": "latestRound()", +"668a2001": "removeParticipant(address)", +"668a2f67": "boom(address)", +"668aa824": "oraclePrice()", +"668abff7": "lastRoundLengthUpdateStartBlock()", +"668ad45f": "MyToken(uint256,string,uint8,string,string)", +"668b1b7e": "AOCTrader()", +"668bd511": "BithelloToken()", +"668c1a46": "refundBNBContributor()", +"668c8573": "DATING()", +"668cc7d8": "registerContest()", +"668cf93d": "LOSER_LOCK_TIME()", +"668d5f48": "addBrick(uint256,string,string,uint32,string,bytes32[],uint256)", +"668e0f6a": "addEntry(string,string,string,string,address)", +"668e157f": "StandardQuickConverter()", +"668eef5b": "test_2_method()", +"668faae8": "CollectibleIndex3()", +"668fde45": "advSend(address,uint256,bytes)", +"66901c5b": "clearTimeMap()", +"66901efb": "getOwnerInfoByIndex(uint256)", +"66905ba0": "overwrite(string,string)", +"66907d13": "setNextOrderId(uint80)", +"6690864e": "setTeamAddress(address)", +"6690f30b": "set_Name(string)", +"66914614": "getJackpotTotalValue()", +"6691461a": "updateTokenAddress(address)", +"6693b694": "unfreezeSupply()", +"669459a7": "removeRegistryFromOwnerIndex(address)", +"66949b56": "endMatch(uint256,int256,int256)", +"6694e845": "numRewardedAxies(address,bool)", +"669529df": "removeFromWhitelistMultiple(address[])", +"669541d6": "setGasCost(uint128)", +"66957377": "batman()", +"669585a4": "_figthExecutor(address)", +"6695b592": "stemPriceInWei()", +"6695f930": "calculateAndSetRate(uint256)", +"6696ca51": "forceBurnFrom(address,uint256)", +"66971c8a": "setCurrentFundingRound(uint256)", +"66973129": "PHEPToken()", +"6697aa84": "getRequiredMinor()", +"6698baaa": "STAGE_TWO_TIME_END()", +"6698f141": "releaseTeamTokensAfter18Months()", +"6699d9cd": "Securities_2()", +"6699e4c7": "isReadyForClose(uint256)", +"669a55ec": "initialPrizeBov()", +"669a828b": "getProgramsValue()", +"669b7e69": "getBlockAddressCount(uint256)", +"669cab39": "cancelBetByOwner(uint256)", +"669d8dff": "AddorModifyRig(uint256,uint256,uint256,uint256)", +"669dafe8": "toWei(uint256)", +"669e48aa": "get(uint256,uint256)", +"669e6684": "_rebalanceTree(bytes32)", +"669eb768": "registerDonation(uint32)", +"669ee827": "RegisterDevice()", +"669ef86d": "getPriceByDayIndex(uint256)", +"669f6d80": "bountyRewardPercent()", +"66a03098": "receivedFrom(address)", +"66a0b81e": "safeMode(bytes4,bytes1,address)", +"66a11615": "revokeMintingManager(address)", +"66a192c6": "CurrentRate()", +"66a200ba": "TokenDemo(uint256,string,uint8,string,address,address,address,address)", +"66a23c01": "ETOKEN2()", +"66a26419": "cancel(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"66a39350": "FAIL_FLAG()", +"66a3de2a": "_safeTransferFrom(address,address,uint256,bytes)", +"66a4b6c0": "usdDecimals()", +"66a51d1d": "UcCoinMinimumSellingChanged(uint256,uint256)", +"66a659b3": "readcolorXteam()", +"66a65c99": "getLegacyCount()", +"66a6cf1a": "mateWithAuto(uint256,uint256,uint8,bytes)", +"66a78b40": "depositAgent(uint256,uint256,string,string,uint256)", +"66a78e6c": "maxReward()", +"66a857f4": "ChangeTokenSymbol(address)", +"66a8c45b": "StarmidFunc()", +"66a908a5": "foundersTokensUnlockTime()", +"66a9234c": "addPhase(uint256,uint256,uint256)", +"66a92cda": "releaseOnce()", +"66a9bc0d": "teamTokenVesting()", +"66aa01ca": "permittedAddresses(address)", +"66aa56c5": "initiate()", +"66aa6f26": "payFee(bytes)", +"66aa9aff": "adminDeposit()", +"66aac9e4": "TPLusToken()", +"66ab4e5f": "Grid(uint256,uint256,uint256)", +"66ab5290": "transferSgaToSgnHolder(address,uint256)", +"66ac1c36": "stageFokenUsdPrice(uint16)", +"66ac777e": "rotate_right(uint32,uint32)", +"66ac8075": "payoutPrizes(address[])", +"66ad3ffc": "building(uint256)", +"66ad484c": "newfirst_player(address)", +"66adeb3a": "SmartToken()", +"66adeb8c": "transferBalance()", +"66adf835": "_setup(address,address,uint256,bool)", +"66adfbbd": "sgc(uint256)", +"66ae924b": "toUint16Throw()", +"66ae935f": "balanceEqual(address,uint256,string)", +"66aecfa7": "bankToCharm(string,uint256)", +"66aee0fc": "investorsProfit()", +"66aef95b": "increaseTimeIfBidBeforeEnd()", +"66af3914": "getTradeIsOpen()", +"66af77ca": "totalMarks()", +"66b005ee": "QueryUnlockTime(address)", +"66b0a536": "MomaCoin()", +"66b10f70": "learnMove(uint256,uint256)", +"66b3e4b9": "stageMarketing()", +"66b3f6bf": "invested(address)", +"66b3fe66": "setTimeScale(uint256)", +"66b42dcb": "register(address,string,uint256,string)", +"66b43da5": "computeSha3(uint256[8])", +"66b46149": "fstring(string)", +"66b464de": "goldBoxPrice()", +"66b4ad74": "KudanilToken()", +"66b52b93": "addMeByRC()", +"66b567da": "getNumMyHatchingUnits()", +"66b5e2d8": "getCountMembers()", +"66b625d4": "bountiesAllocAddress()", +"66b62bde": "isSetTeamWallet()", +"66b668de": "RFUDToken()", +"66b68516": "Finalized(address,uint256)", +"66b728d5": "getVoteOptionId(uint256,string)", +"66b7afbf": "init_level()", +"66b7d5c6": "receivedWais()", +"66b847e5": "assertQuantity(uint256)", +"66ba2670": "setOriginalPriceGen0()", +"66ba707f": "ConsultaRegistro(string)", +"66bab099": "getCurrentSupplyVote()", +"66badf4b": "BITCOINGAM()", +"66bb28be": "_transferMultiple(address,address[],uint256[])", +"66bb83b6": "batchlimits()", +"66bc0d6d": "withdrawFundsAndStartToken()", +"66bcc860": "TransferSiteReg(address,uint256)", +"66bd6ff6": "DecentralizedExchangeHotPotato()", +"66bd78fd": "getBalanceContract()", +"66be24ba": "blockUntil()", +"66bea821": "sendSupplyTokens(address,uint256)", +"66c0276e": "CryptonewsIndonesia(uint256,uint256)", +"66c0e5e0": "revealPhaseMinSecondsWaitForReveals()", +"66c14e0a": "dropCount()", +"66c2355c": "requestNameChange(string,string)", +"66c2aa0e": "getStackholderTransactionCount(bool,bool)", +"66c2ae95": "setHgtRates(uint256,uint256,uint256,uint256,uint256,uint256)", +"66c2d620": "getTot(uint256)", +"66c2d6a0": "BettingToken()", +"66c313c6": "ETHER_THRESHOLD()", +"66c31f12": "emitUserBinded(uint256,address,bool)", +"66c376a1": "setResult(uint32,int8,int8)", +"66c42517": "refundToken(bytes8,address,uint256)", +"66c49da5": "viewThirdBatchOfClauses()", +"66c5c4a0": "unfreezeAll()", +"66c5cdf8": "updateTotal(uint256)", +"66c618d4": "sameWhiteList(address,address)", +"66c630bc": "honourWhitelistEnd()", +"66c71952": "setDiscountPercent(uint256,uint256)", +"66c76592": "_raffleDraw()", +"66c7d1ed": "RozelCoin(uint256,string,string)", +"66c7fb77": "generateDeed(string,bytes)", +"66c82de8": "ContributorPool(address,uint256,int256,uint256,int256)", +"66c89a13": "getAssetEmmiter(uint256)", +"66c91053": "doubleTransfer(address,address,address,uint256,uint256)", +"66c99139": "trans(uint256)", +"66c9bc38": "etherExchangeLikeCoin()", +"66c9d697": "executeVerdict(bool)", +"66ca2bc0": "sendSignal(bytes32)", +"66cab1f3": "isSponsorshipRefunded(address,uint256)", +"66cab95c": "isDeployer()", +"66cc6064": "getPayout(uint256,uint256,uint256)", +"66cd0663": "setCrowdsaleFinished()", +"66ce10b7": "publicKeyVerify(uint256,uint256,uint256)", +"66ce3bd2": "walletBalanceOf(address)", +"66ce5c52": "minWeiToPurchase()", +"66cf058a": "endIcoSaleRound2()", +"66d003ac": "recipient()", +"66d0c603": "addExternalContributor(address)", +"66d10688": "getBoughtTicketCount()", +"66d11c1a": "ContractAddress()", +"66d12fad": "getStakeInOutcome(bytes32)", +"66d16cc3": "profit()", +"66d1cac9": "updatePost(uint256,string,string)", +"66d29324": "defrosting()", +"66d2da12": "setUser(address,address,string,string,bytes32,uint256,uint256,uint256[],string,string)", +"66d38203": "setup(address)", +"66d39035": "getContribution(bytes32,bytes32)", +"66d42b3f": "Betting(uint256,uint256)", +"66d49bab": "updateTotalSupply(uint256)", +"66d598f0": "E18()", +"66d5c8ed": "node_left_child(uint256)", +"66d5eb9b": "openZoneShop(bytes2)", +"66d76bb2": "rateETH_ROK()", +"66d7ffde": "left24(uint256)", +"66d8c463": "reveal(bytes32,string)", +"66d8d040": "dividendsRightsFixUpdate_(address,address,uint256)", +"66dacc48": "afterFirstRefundRoundFundsReleaseDenominator()", +"66db11e7": "nodeExists(bytes32,bytes32)", +"66db2a59": "competitorPAY(uint256)", +"66dc860a": "getBreedingFee(uint40,uint40)", +"66dd3bc0": "terminateAccount()", +"66de5a4f": "createWorkerPool(string,uint256,uint256,uint256)", +"66de6fa4": "isReachedLimit()", +"66de84ec": "withdrawBonus()", +"66df8fe6": "secondStageTotalSupply()", +"66e13d36": "stakeForWithLockup(address,address,uint256,bytes)", +"66e144f9": "Futurescoin()", +"66e159b8": "CreatedNIMFA(address,uint256)", +"66e16aff": "mdbToken()", +"66e1aa99": "assignCertificate(address,string,string,string,string)", +"66e1cebd": "getStakingGains(uint256)", +"66e20b51": "crowdsourcers()", +"66e20e77": "priceNumerator()", +"66e23276": "ADVISERS_SUPPLY()", +"66e264be": "p2Of(uint256)", +"66e305fd": "isEligible(address)", +"66e34dc6": "registerUsername(bytes32)", +"66e3c230": "callLibSet2(uint256)", +"66e3cb68": "upgradedFrom(address)", +"66e3e5e4": "contractTokenBalance(address)", +"66e41cb7": "test2()", +"66e41cd7": "GetTime(uint8)", +"66e4f8c8": "getLastSpinOutput(address)", +"66e5cb50": "stopTransfer(uint256)", +"66e61a31": "outProjectBinding(uint256,address,address)", +"66e65eb1": "checkLocked(address,uint256)", +"66e6c8af": "authorise(address)", +"66e7107e": "SCARABToken()", +"66e722b0": "SecurityToken(string,string,uint256,uint8,address,uint256,uint256,uint8,address,address,address)", +"66e72baa": "transferWithLock(address,uint256,uint256,uint32)", +"66e7ea0f": "incBalance(address,uint256)", +"66e84652": "resetContribution()", +"66e8a4d7": "testGetBonus()", +"66e8cd81": "allBalances(address,address[])", +"66e98c31": "createCoin(string,uint256,uint256,string,string,address)", +"66e99a11": "lxhcoin4()", +"66e9b336": "removeReturnableToken(address)", +"66eb463f": "changeRootAdmin(address)", +"66eb50b2": "startLeaderboard(uint64,uint64,uint64)", +"66eba165": "PlaceBuy(address,address,uint256,uint256,uint256)", +"66ec60c7": "getFineLevelOfUsername(string)", +"66ecc9e2": "require_limited_change(uint256)", +"66eccfbf": "token_batchTransfer(address,address[],uint256[])", +"66ecded4": "setRelativeAddress(address)", +"66eec532": "getSellerFullInfo(address)", +"66f0a3f6": "getTokenRemain()", +"66f1e438": "getMiniPoolEdit_7()", +"66f2d859": "setSellRatio(uint256)", +"66f36b34": "Birth(uint256,string,address,bytes32)", +"66f3882f": "setIcoPhase(uint256,uint256)", +"66f3a2b8": "totalPreBuyers()", +"66f4e1c7": "MAX_GRANTEE_TOKENS_ALLOWED()", +"66f516fe": "changeTimeAndMax(uint256,uint256)", +"66f5f332": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"66f7d730": "WithdrawalEnabled()", +"66f7d9da": "accumulatedHours()", +"66f83e91": "getRandom(address)", +"66f84d30": "setParent(uint256,string)", +"66f8bbe0": "DMarketToken(address,uint256,uint256,uint256,uint256)", +"66f8e86f": "MLQD()", +"66f928d3": "updateShareRuleGroup(uint256,uint256,uint256,uint256,uint256)", +"66f9785a": "EtherShuffle(address[])", +"66f99a11": "setOpenValueGasLimit(uint256)", +"66f9c99e": "setUpgradeAddress(address)", +"66fa2be9": "tickets(bytes4,uint256)", +"66fa6efb": "unverify(address,address)", +"66fb3831": "VALUEBACK()", +"66fbc154": "earlier()", +"66fc0dd7": "walletTeamAdvisors()", +"66fc6937": "lastCharge(address)", +"66fcf285": "distributeMulti(address[],uint256[])", +"66fd3cd8": "commit(bytes)", +"66fd555f": "Comission(address,bytes32,uint256)", +"66fda50b": "removeOracles(uint256,address[])", +"66fe16e9": "emitIssued(address,uint256)", +"66fe25a0": "IcoEndDate()", +"66fe513a": "free_supply()", +"66fe825a": "Gruptecoin()", +"66fea1d4": "setRandomSeed(uint256)", +"66ff8201": "GetChipNum(address,uint32)", +"66ffebb8": "changeHolderPercentage(uint256)", +"67013719": "enableControl(bool)", +"67016c14": "issueTokensToBuyer(uint256)", +"6702416e": "addDoctorTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"67025dcf": "transferAll(address,uint256[])", +"670396e7": "CashToken()", +"6703c429": "ETCReturn(address,uint256)", +"67043001": "isEIP20Token()", +"67043cae": "registerOffChainDonation(address,uint256,uint256,string,bytes32)", +"67061a55": "teamSharePercent()", +"67069544": "issueAssetToAddress(bytes32,uint256,string,string,uint8,bool,address)", +"67069916": "OwnershipTransferCanceled()", +"670733b5": "setBitwordsWithdrawlAddress(address)", +"670744cf": "_createCobeFriend(uint256,uint256,uint256,uint256,address)", +"6707b8aa": "BestEtherSupply()", +"67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", +"67084eb3": "houseBalance()", +"67085633": "getMyGenes()", +"67085dab": "bnCheck()", +"6708cc63": "becomeKing()", +"6708f91d": "Rurchase(address,uint256,uint256)", +"6709b337": "Token(string,string,uint256,bool,bool,string,string,uint256,uint256,uint256,bool)", +"670a1e6f": "getEligibleAmount(address,uint256)", +"670be445": "initialEPXSupply()", +"670c00d0": "getMotPrice(bytes32)", +"670c1500": "CoinCool()", +"670c314e": "TimeFinish()", +"670c3ac2": "priceUpdateTimeline()", +"670c5370": "addCandidateByIndex(uint256,address,string,string)", +"670c884e": "setup(address,uint256,uint256,uint256,address)", +"670ca672": "NTVToken()", +"670d14b2": "keys(address)", +"670da6f8": "getOwnerPetCount(address)", +"670e2e7f": "DatumGenesisToken()", +"670e64c8": "setWhitelistingAgent(address,address,bool)", +"670eedba": "strConcat(string,string,string,string,string,string,string)", +"670f4bd4": "releaseDivTokens()", +"670f8755": "_0xZibitToken()", +"670fe0ff": "TootrTokenSale()", +"6710e801": "_createRabbit(uint256,uint256,uint256,uint256,uint256,address,uint8)", +"6712a67f": "addNodesCache(address[],bytes32[],bytes32[],bytes32[])", +"6712e0be": "tokenGenerationMin()", +"67130e8c": "getWeiOwed(address)", +"6713263d": "crowdsaleTokens()", +"6713640d": "TierStarterDividendAddress(address)", +"6713e230": "isTrusted(address,address)", +"67141690": "getEnabledTokensInformation()", +"67141732": "createContractCity(string)", +"6714cfe2": "GetLuckyGamblers(uint256)", +"6714e027": "deal(uint256[3],uint256,bytes32,bytes32,uint8)", +"671528d4": "isCapped()", +"6716a692": "setDVIP(address)", +"6718484f": "create(uint256,address,string,string)", +"67194bee": "AirdropClaim()", +"67198207": "EARLY_CONTRIBUTION_DURATION()", +"671baae3": "Sepp(uint256,string,uint8,string)", +"671bd594": "setBigPrice(uint256)", +"671bdc3d": "PrimebankCoin(uint256,address)", +"671c7d68": "test02()", +"671d3315": "bookAfternoonVisit(uint256)", +"671d6429": "setTreasurer(address)", +"671dacdc": "CalculateSqrt(uint256)", +"671de554": "mintPreICO(address,address,uint256,uint256,uint256)", +"671e4405": "isFinalize()", +"671ec66c": "setDomainOwner(bytes32,address)", +"671fa0a0": "Inscription(string)", +"67202d40": "fetchAllVotersByIndex(uint256)", +"6720ceb1": "sendPayment()", +"6721ebe2": "airdropThroughput()", +"67220fd7": "adminClaimAirdropMultiple(address[],uint256)", +"67221df0": "isPendingA(address)", +"672324ac": "cashInRate()", +"672350bd": "getFreeExtension(bytes32)", +"6723c20d": "testTrip(uint256[3])", +"6723eab5": "batchCreateETHCardAsset(uint8[],uint256[],uint256[],uint256[],address[])", +"67243482": "airdrop(address[],uint256[])", +"67249254": "mintWithLock(address,uint256,uint256,uint256)", +"672566a0": "Upgradeable()", +"6725bed6": "CCH_RE_2()", +"67268bbc": "removeTransfer(uint256)", +"67272999": "claimETH()", +"672781ed": "priceClaim()", +"6727cc2d": "removeWhiteListAddress(address[])", +"67286a83": "getGoldStatusAuditcount(address)", +"6728b711": "RealAssetToken()", +"672acef0": "participantCapTier2()", +"672c8dca": "ownerTakesAllNotClaimedFunds()", +"672ce152": "HodlBox(uint256)", +"672d2921": "zasxzasxqaq()", +"672e06d0": "withdrawForOneYear()", +"672e20fe": "allocateRemainingTokens(address)", +"672f412c": "setAllowDisbursePaymentWhenPaused(bool)", +"672fcd82": "createBet(uint256,bool)", +"67301dde": "IWWEE()", +"67316b3f": "addWhiteListAddress(address[])", +"67337d1a": "ReporterTokenSale()", +"673441db": "TokenAltPurchase(address,address,uint256,uint256,uint256,string,string)", +"673448dd": "isApproved(address)", +"673478c3": "getAssetIdOwnerIndex(uint256)", +"6735a1cc": "previousStage()", +"67374f3a": "setTargetWallet(address)", +"673756d8": "SOFT_CAP_EUR()", +"6737c877": "setAttributes(bytes)", +"6738426c": "enablesTransfers()", +"67387d6b": "testThrowCreateWithNonceExistingNonce()", +"67389944": "voteB(uint256)", +"67389d17": "SuppliedTo(address,uint256)", +"6739afca": "network()", +"6739f3a4": "getAuctionDuration(uint256)", +"6739fc52": "testOrd()", +"673a2a1f": "getPools()", +"673a456b": "setNumActiveTranscoders(uint256)", +"673a5ae3": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"673a7e28": "updatePrice()", +"673b57e9": "deauthorizeProvider(address)", +"673c0e53": "readAllFrzAcc()", +"673cd98e": "total_amount()", +"673df0e0": "horseMaster()", +"673f3807": "sell(uint256,uint8)", +"673fa8c9": "APaymentToken(uint256)", +"674106d8": "checkDragon(uint256)", +"67412045": "balanceOf(address,uint8)", +"6741629c": "wasEmergencyCancelled()", +"6741953e": "getPOOL_edit_15()", +"674197f8": "getBuyRequestCount()", +"67426ba4": "callgDistributed()", +"67441f52": "LOOMIA1()", +"6744ea49": "GetEscrowTokenSymbol()", +"67457022": "rmul(uint256,uint256)", +"67460c25": "createWikiPage(string,string,string,uint256)", +"67460d58": "setGate(uint256,uint16)", +"67465daf": "StorageExample()", +"6747830d": "calculateRequiredFillingAmount(uint256)", +"6747a33f": "accrualDeposits()", +"6747f09e": "cashOutFallbackAmount()", +"6748a0c6": "releaseFinalizationDate()", +"6748a106": "powLimit()", +"674942eb": "VOTING_PREPARE_TIMESPAN()", +"6749ec48": "issueLicenseNFT(bytes32)", +"674a1574": "claimedIdeas(address)", +"674a62d0": "coinIssuedMkt()", +"674aaa44": "transferToAnotherAddr(address,address,uint256,bytes32)", +"674b3bd5": "originalArtwork(bytes32,address)", +"674c20a1": "test0_firstInterval()", +"674c5eaf": "setReceiver3(address)", +"674c85a7": "mdiv(uint128,uint128)", +"674cc1f5": "getMarketHashes(bytes32[])", +"674d13c8": "totalReservedSupply()", +"674d4691": "_getWeiValueOfTokens(uint256,bool)", +"674e4e0e": "extendUnlockDate(uint256)", +"674ea3cb": "closeAgreement(bytes,uint8[2],bytes32[2],bytes32[2])", +"674ebb3e": "cancelKimAuction(uint256)", +"674ed066": "minQuorumDivisor()", +"674ef6c3": "initializeTier(uint256,address)", +"674f220f": "previousOwner()", +"6751676f": "recentBuyers(uint256)", +"6751ad3d": "_insertAttackLog(uint256,uint256,uint16,uint32,uint8,uint32,bool)", +"67524d62": "setJackpotThreshold(uint256)", +"67532c8e": "sendPurchase()", +"67535a42": "setEthmainAddress(address,address)", +"6753a3c1": "setMajorEvent(string,string,string)", +"6753fc59": "PurchaseAdmin()", +"67541efa": "AlfaCoin()", +"67546967": "EthBtcEscrow()", +"6754ff3a": "addcrontime(address)", +"67550a35": "vox()", +"67551857": "clearAllRequest()", +"675518b8": "mintAndCreatePreIcoBitex(address,address)", +"67558b3a": "AzlanToken()", +"67561d93": "authorizeContract(address)", +"675629fe": "appendOnly()", +"6756b1ae": "GameTable()", +"67571f68": "handlePayouts_(uint256,uint256,uint256,address,address,address)", +"67578f65": "users(bytes20,uint8)", +"67579ad4": "currentwealth()", +"675879d5": "GrantedOrganization(bool)", +"6758aa3f": "requestApproval(string,string)", +"6759fac0": "CatsToken(address)", +"675a1f0f": "batchAddCandidate(address[],bytes32[])", +"675a4633": "dnaMixer()", +"675a54b9": "getHalvingOf(address)", +"675a690c": "setBleachDailyLimit(uint256)", +"675abc96": "corporateSupply()", +"675ac67a": "escrowCount()", +"675b09cd": "Niobium()", +"675c3048": "getTxTimestampPaymentMCW(bytes32)", +"675c9fcd": "setSecretSignerList(address[])", +"675cc788": "getDiplomaOrganizerById(uint256)", +"675cef14": "etherMinimum()", +"675d43cf": "buyPixel(uint16,uint16,uint24)", +"675d9c35": "XRT()", +"675df16f": "updateSubmissionGasPriceLimit(uint256)", +"675ec1cf": "minimalUSD()", +"675f6537": "settleBet(bytes32)", +"675f6d1e": "callBackVariations()", +"675f818e": "disapproveInvestor(address)", +"675f9ad9": "initStages()", +"6760115a": "BuyerFund()", +"67602c59": "burnSequence()", +"67608d38": "ICO_TOKEN_SOFT_CAP()", +"676095b2": "profit2eggs()", +"67630f43": "buyNapkins()", +"6763150e": "setKyberAddress(address)", +"67636574": "consumed()", +"676391d3": "_removeWhitelister(address)", +"6763da56": "dish(string,address)", +"67642794": "_withdraw(address,uint256,bool)", +"676452f4": "t3tokenExchangeRate()", +"6764765d": "burnMyTokens(uint256)", +"67653f3b": "test_threeInvalidEqUint()", +"6765b49b": "getPunishXPA(address)", +"67669e29": "rocketIsLaunched(uint256)", +"6766d1ba": "getTimeUntilStart()", +"6766fafe": "disableTransferWhitelist()", +"676796b6": "releaseFounderCoins()", +"6767e368": "ValueTrader()", +"67682441": "UserUpdate(address,address)", +"6768893c": "AppHub()", +"6769c20b": "setPicture(address,bytes)", +"6769d1f9": "soldToken()", +"6769eb46": "createMasker()", +"676a38d7": "get_current_price()", +"676a675a": "changeJohanNygrensAddress(address)", +"676aa496": "IbnzEtc20TestToken()", +"676b064e": "allForPopulate(uint256)", +"676b57ad": "getNays(uint256)", +"676c0d77": "updateTokenPrice(uint256)", +"676c902f": "drawNumbers()", +"676cb63d": "getMintingFinished()", +"676cdcd6": "BurnExecuted(uint256,address,uint256)", +"676cfec6": "rocks(uint256)", +"676d1d9c": "WEI_TO_COGS()", +"676d20ba": "WorkerToken(uint256,string,uint8,string)", +"676d23a5": "isChangePriceLocked()", +"676d2e62": "migrationMaster()", +"676d7769": "test_curatorDoesNotVeto()", +"676e2eb1": "_addDemoc(bytes32,address,address,bool)", +"676fc32b": "maximumTokensForThird()", +"67701187": "updateFighter(uint256,uint8,uint8,uint8,uint8,uint32,uint64,uint16,uint64,uint16,uint16)", +"6770260e": "ContributionMade(address,uint256)", +"67707337": "CryptocarToken()", +"6770da62": "_stealCardWithSocialIdentity(uint256,uint256)", +"67716abc": "learnFee()", +"677170e1": "_span(address,address)", +"677342ce": "sqrt(uint256)", +"6773b75f": "propertyIndexToApproved(uint256)", +"6774f8e1": "getMonarchyController()", +"67756fe9": "depositPayment(address)", +"6776ddd0": "currentHodler()", +"6776e56a": "validateProposedKingdomName(string)", +"6777d177": "icostarted()", +"6777e4eb": "dollarMultiplier()", +"677885d3": "BITIFEX()", +"677913e9": "setAmount(int32)", +"677978ec": "increaseTokenCap(uint256)", +"6779da43": "setAwardTokens(bool)", +"677a7444": "Votaciones(bytes32)", +"677a7735": "Shares(bytes32,bytes8,uint256,uint256)", +"677a8870": "TeamWallet()", +"677ab197": "processContribution()", +"677ab667": "INITIAL_STARTTIME()", +"677b1f0d": "_buyTokensFromSystem(uint256)", +"677ba3d3": "onTokenTransfer(address,address,uint256)", +"677bcb89": "regularMinPerPerson()", +"677c102d": "getHostOrders(address,address)", +"677cee54": "SafeConditionalHFTransfer()", +"677e2dc4": "setDailyPrice(uint256)", +"677e2ef2": "getReplyFee(uint256)", +"677e6fa4": "betOnColumn(uint256)", +"677ebf2c": "InvestmentAsset(address,address,address,string,string,uint256,uint256,uint256,address)", +"677f768d": "isOnTrading(uint256)", +"677ffb0d": "exerciseLong(address[2],uint256[8],uint8,bytes32[2])", +"6780a311": "transferStop()", +"6780b32e": "moveAccount(bytes32)", +"67814109": "_mintTimelocked(address,uint256,uint256)", +"6781cc04": "addPolicy(uint8,uint256[],uint8[])", +"678212d9": "tokensAuctioned()", +"67821686": "setETHUSDRate(uint256)", +"67823a4a": "limitDateCrowdWeek2()", +"678365ca": "RHEMA()", +"678377d2": "core(address,uint256,address)", +"67845835": "Irapid()", +"67845daf": "claimTokensERC777(address,address,address,uint256,uint256,bytes,uint8,bytes32,bytes32)", +"67848d9c": "PayEther(address,uint256,uint256)", +"6784b075": "removeValidContract(address)", +"6784ccb7": "Deceum()", +"67854643": "getGenerationMemberLength(uint256)", +"6785744d": "phase1Price()", +"6785a8f6": "getCandidateIndexArray()", +"6785b500": "getChannelsAddresses()", +"67863c07": "earlybird()", +"6786ed0e": "setPriceRate(uint256)", +"6787416d": "NRM()", +"6788317a": "UnitySale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"678886b4": "updateTokens2PerEth(uint256)", +"678892c0": "rand_num()", +"67899248": "processKick()", +"678a1013": "monsterNFT()", +"678a6baf": "ROUND_3_PRESALE_BONUS()", +"678a7dca": "setShareFee(uint8)", +"678ae6a1": "updatePools(bytes32,uint256)", +"678bbf24": "getEarningsAmountByGoodsIndex(uint256)", +"678d2204": "shouldFail()", +"678d6eff": "createFuel(uint256)", +"678d9758": "setTile(uint256,string,string,uint256)", +"678dd961": "getProviderClosed(uint256)", +"678ee795": "ComputationService()", +"678f4467": "allocateTokenForTeam(address,uint256)", +"678f7033": "set_percent_reduction(uint256)", +"679019ba": "freezeDeliverMultiStandalone(address[],uint256[],uint256[],uint256,uint256)", +"67907404": "recruitNarco(uint256,string,string)", +"6790d2b5": "getRoomInfo(uint256)", +"6790f3fe": "getAccumulatedDistributionPercentage()", +"67923240": "hatchsubscribers(address)", +"6793c8e1": "currentMilestone(uint256)", +"6793d383": "registryContractAddress()", +"67946ea4": "getIdMax()", +"67955ffa": "maxGIRL()", +"679577a5": "getEmployerFeedbackOn(address,uint256)", +"6795dbcd": "getAddress(bytes32,string)", +"67975213": "AddSWAndClaim(string,string,bytes32,bytes32,bytes32,string,bytes32,bytes32,address,uint32)", +"6797b106": "strikePricePctX10()", +"6799c0e0": "vpe_per_Keos()", +"6799d737": "releaseForEcosystem()", +"679a7a46": "WhoisOwner()", +"679aefce": "getRate()", +"679b4567": "preicoStartDate()", +"679b948b": "switchSplitBonusValue(address,bool)", +"679b9935": "setLeagueRosterContractAddress(address,address)", +"679c0d40": "invariantBroken()", +"679d0ecb": "getMetForEthResult(uint256)", +"679d38e0": "selfdestruct()", +"679dffb4": "getProfit()", +"679e1149": "AcoraidaMonicaWantsToKnowTheNewAnswerHash(bytes32)", +"679e5977": "EventRemoveAdmin(address,address)", +"679ebf1a": "transferTicket(uint256,address)", +"679f4d63": "CEEDCOIN()", +"679f699e": "EOSERC20(uint256,string,string)", +"679fecd6": "refillArray(address[],uint256[])", +"67a09c23": "payment(address,uint256)", +"67a0a550": "_cancelOrderWithMerchant(string,address)", +"67a19b20": "withdrawEthMaker(uint256,address)", +"67a1b7dd": "addTicket(uint256,uint256,uint256)", +"67a1bd55": "withdrawStuck()", +"67a1d653": "YOO_UNIT()", +"67a1f526": "curatorWrite(uint256,bytes32[])", +"67a2072c": "setEtherHolder(address)", +"67a2534b": "test(address[5])", +"67a26cbc": "DuqueBrewingCompany()", +"67a27811": "BonusGranted(address,uint256)", +"67a3eb65": "totalHardCap()", +"67a449b8": "getLastRoundData()", +"67a4e7c4": "isDecentBetToken()", +"67a52fdb": "purchaseGold()", +"67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", +"67a5cd06": "drip(address)", +"67a6ae62": "TOKEN_RATE_25_PERCENT_BONUS()", +"67a7390d": "fundTransferred()", +"67a7804b": "influenceByToken(uint256)", +"67a884e5": "latestBidder()", +"67a88f78": "createBitcoinAddressPrefixTask(bytes,uint256,int256,uint256,int256,address)", +"67a9c971": "tgrSettingsAmount()", +"67aa23e2": "getTicketsByOwner(address)", +"67aa50ae": "updateBrokerVerifierContract(address)", +"67aa863f": "setXto2()", +"67ab263a": "thisIsTheEnd(address)", +"67ab4381": "UnConf(string,address)", +"67ab5486": "GET_MAX_UINT256()", +"67aba225": "sellableToken()", +"67acd805": "lowerMinWager(uint256)", +"67ae9e8f": "hybridizationList(uint256)", +"67aea7d5": "buffs(uint256,uint8)", +"67af1c81": "getRoundIndex()", +"67af1cff": "ethRec(uint256,uint256)", +"67af26fb": "transferOtherFrom(address,address,address,uint256)", +"67aff484": "setUserRole(address,uint8,bool)", +"67aff919": "autoreleaseInterval()", +"67b07d48": "entangleQuanticCloudIOTData(uint256)", +"67b0e070": "FaceTech()", +"67b14a21": "getProposal(uint16,uint16)", +"67b16407": "buyCup()", +"67b16cd6": "getRealRndMaxTime(uint256)", +"67b172c9": "Bloxxor(address,address,address,uint256,uint256,uint256)", +"67b1f5df": "setExchange(address)", +"67b21506": "claimTokenReserveDevelop()", +"67b220a5": "unblock(address)", +"67b26cab": "getLastMaxInvestments()", +"67b327fa": "proposeMilestones(bytes)", +"67b40639": "Dain()", +"67b50af9": "gasAmount()", +"67b5496a": "loseWager(uint256)", +"67b55bf9": "getClickMetadata(uint256)", +"67b65656": "setStateStartTime(bytes32,uint256)", +"67b78d00": "fromHexChar(bytes1)", +"67b7a4aa": "START_PRICE_IN_CENTS()", +"67b7c034": "on()", +"67b7d525": "getBlockPointer()", +"67b830ad": "fillOrder(uint256)", +"67b886e8": "left97(uint256)", +"67bb474f": "allowBundling()", +"67bb6d63": "maxWiteList()", +"67bc480e": "MYSTERYCLASSICCOIN()", +"67bd15e3": "contractInitializationTime()", +"67bd69a6": "getLastDuel2()", +"67be0854": "partyHash(address,address,address,address)", +"67be5eac": "claimLeftTokens()", +"67be97a5": "BYToken()", +"67bea493": "whitelistedPools(address)", +"67beaccb": "scheduleCall(bytes)", +"67bfc445": "AddNewChallenge(uint256,uint256,uint256,uint256,uint256,bool,string)", +"67c1fb11": "christmasStocking()", +"67c21fe5": "setFiscalVerify(uint256,bytes32)", +"67c25a14": "TeamCreated(uint256,uint256[])", +"67c281a9": "validateContentHash(address,uint256,bytes32)", +"67c2a360": "authorizeUser(address)", +"67c33c80": "getInt8FromByte(bytes14,uint256)", +"67c353b3": "LKCTotalSupply()", +"67c36757": "IranToken()", +"67c3a6d9": "Khatamor()", +"67c3ad8e": "burnStake(uint256,address)", +"67c3e25e": "revokeAccessDeploy(address,address)", +"67c45872": "ZzStandardToken(uint256,string,uint8,string)", +"67c51be7": "viewTokensSold()", +"67c5d6b1": "multihash(bytes32,string)", +"67c623cf": "getTokenMetaData(uint256)", +"67c6389e": "refreshlockedBalances(address,bool)", +"67c6e39c": "convert(address,uint256)", +"67c7f3a8": "setBwValidCaller(address)", +"67c84919": "issueByPartition(bytes32,address,uint256,bytes)", +"67c9b017": "getEthPrice()", +"67c9d266": "freezeUntil(address,bool)", +"67ca1fdf": "market_communityStorageVault()", +"67ca2298": "updateTokenName(uint256,string)", +"67cab29d": "testGetAbiVersion()", +"67cb103a": "PartnerUrl()", +"67cb61b6": "getChoice()", +"67cb9316": "get_header(uint256)", +"67cc4882": "TokenHolder()", +"67cd3f64": "UNLOCKSTART()", +"67cd5323": "PUBLIC_SALES_SPECIAL_USERS_RATE()", +"67cd64dc": "LENDXCOIN()", +"67cdbe8f": "newShip(uint16,uint256,uint256)", +"67cdc1c2": "percentageToTeamEthContract()", +"67ce38fb": "Vertex_Token(uint256,address)", +"67ce940d": "getOverhead()", +"67cf17c2": "transferPrimordialTokenFrom(address,address,uint256)", +"67cf7d9c": "createTeamTokens()", +"67cf91c9": "lastKickoffDate()", +"67cfdfc9": "getBrokerIncoming(address)", +"67d0661d": "doPause()", +"67d13f27": "receiveFromVendor(address,bytes32)", +"67d15775": "PromToken()", +"67d198cc": "getVaultsRoot()", +"67d22967": "set_iconiq_pre_kyc_bonus_numerator(uint256)", +"67d326ef": "finalizeFundAddress(address)", +"67d3d0ec": "changeEthBalance(address,uint256)", +"67d3eff4": "setTeamWallet(address,address)", +"67d41253": "secondCheckpoint()", +"67d42a8b": "release(bytes32)", +"67d49909": "secondWinnerTimestamp()", +"67d4e98c": "RemoveShare(address,uint256,uint256)", +"67d4f541": "window1TotalSupply()", +"67d520bb": "deployWill(uint256)", +"67d5fae1": "getPremiumCount()", +"67d6bcbf": "distributeBonusTokens(address)", +"67d6d142": "getPI_edit_19()", +"67d96c24": "compensatePreSaleInvestors(address[])", +"67da2831": "revealHiddenPosition(uint32,int64,bytes16)", +"67da299b": "mcrAmmountForGas()", +"67da7b7a": "LabCoin(uint256)", +"67dbaf93": "updateValueAndBurn(uint256,uint256)", +"67dbf587": "Bridge(uint256,uint256,address,address)", +"67dcec06": "WealthInternet(uint256)", +"67dd1730": "destPrecision(address)", +"67dd74ca": "buyTicket(uint256)", +"67dd7bb4": "tradingLocked()", +"67de698d": "adjustCap()", +"67de80db": "createMultiple(uint256[],uint256[],uint256[],address[],uint8[])", +"67de81e8": "fundSucceeded()", +"67deced2": "checkIn(uint256,string)", +"67df1187": "buysubscribers()", +"67df5189": "archiveCrowdsale(uint256)", +"67dfe2d3": "addEthForSell()", +"67e04a22": "initInviteAddr(address,uint256)", +"67e06858": "Add()", +"67e0badb": "getNum()", +"67e0d78f": "sendFundHomeAmt(uint256)", +"67e13ee0": "getDeveloper(address)", +"67e1aee9": "setStage1()", +"67e1c253": "getMyInviteCode()", +"67e22888": "bigMoney()", +"67e2a647": "createAwardTokens()", +"67e2d2ad": "wireInvestment(address,uint256,uint256)", +"67e33df5": "SwftCoin(uint256,string,uint8,string)", +"67e404ce": "sender()", +"67e4373f": "CARIToken()", +"67e43e43": "gsf()", +"67e445d9": "FOMO()", +"67e476d7": "getPublicSaleInfo(address)", +"67e4ac2c": "getAssets()", +"67e4d41d": "ProdAToken()", +"67e523bb": "iPeso()", +"67e53196": "getAuthByCode(string)", +"67e54367": "battleContractAddress()", +"67e5f18c": "getCurrentTierRatePercentage()", +"67e6869d": "Withdraw_4()", +"67e6bc2e": "hash(string,uint256,uint256,uint256)", +"67e6bf06": "testPresaleRefund()", +"67e70e99": "setselfrdroplist(address[])", +"67e7646f": "removeDelegate(address)", +"67e817f4": "XOV()", +"67e828bf": "source()", +"67e874c0": "testMeta(uint256)", +"67e8cd0f": "bidOf(bytes32,uint256)", +"67e8d3d2": "bonus2()", +"67e8f6e1": "_multipleTransfer(address,address[],uint256[])", +"67e8f90c": "heightAt(uint256)", +"67e902c7": "right92(uint256)", +"67e902d9": "ListingBought(uint256,uint256,uint256,address)", +"67e933f6": "checkCustomer(address,address)", +"67e94ae0": "listingFeeInWei()", +"67e988e7": "bountyAvailabilityTime()", +"67e9b860": "CreateSwap(uint256,uint256,bool,address)", +"67ea2fa0": "tasksSize()", +"67ea43bd": "producedBronzeCaps()", +"67eae672": "sendCoinFrom(address,uint256,address)", +"67eb5fbe": "_train(uint256,uint256,uint256,uint256)", +"67eb9bab": "createIssuerContract(string,string,string,uint256,uint256)", +"67ec00c0": "depositFrom(string,address,uint256)", +"67ec68c4": "winningNumbersFor(uint256)", +"67ecb82d": "transferAndLock(address,uint256,uint256,uint256,uint256)", +"67eccc12": "founderTokenWithdrawnPhase2()", +"67ed583f": "addPresaleHolder(address)", +"67edad0a": "preSaleSecondEtherCap()", +"67ee5f09": "getTotalDividends()", +"67eeba0c": "dailyLimit()", +"67ef5a37": "debugStuff()", +"67ef5cb9": "setPrice(uint32,uint32)", +"67efbab1": "changeAssignedAdmin(address,uint256,string)", +"67f01c04": "ETH(uint256)", +"67f04688": "LIMIT_TRANSFERS_PERIOD()", +"67f06f78": "_checkPixelAboveRight(uint256)", +"67f12ecf": "validate(address,uint256,uint256[101][])", +"67f17405": "majorEvent(bytes32,bytes,uint256)", +"67f239dd": "entry()", +"67f4224f": "eventPause(bool)", +"67f690b5": "hasRequestedForMigration()", +"67f6a258": "verifyCert(bytes32,bytes32,address)", +"67f718a9": "getTokenIds()", +"67f76863": "EnishiCoin(address[])", +"67f809e9": "DynamicPyramid()", +"67f83481": "isFounderUser()", +"67f8a8b8": "emergencyRefund(address,uint256)", +"67f8ca42": "usingCanvasBoundaries()", +"67f8df84": "playerId(uint256)", +"67fad28d": "RCLTOKEN(uint256,string,string)", +"67fbb7ba": "ownerAddSanSlotBatch(address[],uint256[])", +"67fbd289": "destroyTokens(uint256)", +"67fc1c6a": "validateProposedMonarchName(string)", +"67fd9da3": "multicastTransfer(address[],uint256[],uint256[])", +"67fdc2fe": "CricketToken()", +"67fdd509": "setIdRange(uint256,uint256)", +"67fdff26": "REQUIRED()", +"67fe5a0c": "accepted()", +"67fe6b47": "contractIsCompleted(string)", +"67fe6f0e": "checkOverExceed(address)", +"68014cec": "participantExists(address)", +"68019d75": "COCTokenBase(uint256,string,string,uint8)", +"6801db98": "devoteToCar(string)", +"6802c8a1": "FreeCoin()", +"6802ff77": "seedSupply_()", +"6803641c": "claimAllTokensForInvestor(address)", +"680478b1": "offerAsSacrifice(address)", +"68049361": "teamWallet_4()", +"6805b84b": "getPaused()", +"680660d4": "bulkAddCompany(address[],uint256[])", +"6806fdce": "assignGenesisAddresses(address[])", +"6807b84d": "Timebound(uint256,uint256,bytes32)", +"6807f752": "deleteBuyRequestInternal(uint256)", +"680819eb": "setRate(bytes32,uint256)", +"680a50cb": "shortenDeadline(uint256)", +"680add7b": "preSoldSharesDistributed()", +"680b0c5c": "tresholds(uint256)", +"680b3bdf": "migrateAll(address[])", +"680b5eba": "setHouseAddressTwo(address)", +"680b9d49": "getStakedAddresses()", +"680bd2f4": "RiseCoinToken()", +"680c26bc": "ATP(address,address)", +"680caed2": "Contract(address)", +"680def61": "market2019TokenCreated()", +"680e354a": "setSaleWindow(uint256,uint256)", +"680e6c9b": "receiveTokens()", +"680eba27": "GEN0_CREATION_LIMIT()", +"680f07b4": "getinitializeFeeWindowIdValue()", +"680f0938": "pay_dividend(string)", +"680f0eda": "set_harvest_amount(uint256)", +"680fb685": "OpenClose(bool)", +"6810e139": "shopSack()", +"68111cce": "getProduct(string)", +"6811444a": "getLastComment(address)", +"68116177": "getbalance(address)", +"681185ab": "_extractRawResource(address,uint256,bytes)", +"68118e95": "numberOfBlocksToEndLimitationPeriod()", +"6811c332": "distributeTeamTokens(address,uint256)", +"681232ad": "cosigner()", +"68125a1b": "isFriend(address)", +"681312f5": "setRoundLength(uint256)", +"6813947f": "contributionOf(uint256,address)", +"681478ab": "LegacyRepToken(address,uint256,address)", +"68155ec1": "transferTokens(address,address,address,uint256)", +"6815c19c": "DropdCoin()", +"6815c992": "grantPermissionP(address,address,bytes32,uint256[])", +"681617c7": "changeEscapeCaller(address)", +"68163034": "defaultTimeoutLength()", +"6816521a": "teamAllocation()", +"6816d920": "guaranteedBuyersLimit()", +"6816fcd6": "evMgmtDistributed(address,uint256,uint256,bool)", +"6817031b": "setVault(address)", +"68171516": "assetMethodIsAllowed(address,bytes4)", +"68173bcf": "deactivateToken(address)", +"68177733": "MixinToken()", +"6817c76c": "mintPrice()", +"681833d9": "bindAddr(address,bytes)", +"6818da44": "setPlatformManager(address)", +"68197360": "getVotes(uint256,address)", +"681b23dd": "senderETH()", +"681b3314": "get_pre_kyc_iconiq_bonus_numerator()", +"681b5651": "setEthToUSDRate(uint256)", +"681b742f": "changeFund(address)", +"681c2ad0": "getTknOfferPrice(uint256)", +"681c3251": "addTotalSuply(uint256)", +"681c7808": "setMinTime(uint40)", +"681c7e2b": "VAAToken()", +"681cb449": "VIcoin()", +"681ce98a": "getNextPrice()", +"681d52de": "tokenImporter()", +"681d8345": "getATMTotalSupply()", +"681e237d": "CommonToken()", +"681e3356": "transferBankOwnership(address)", +"681f01f2": "IsICOOver()", +"681f3e6d": "getUsername()", +"681f6486": "SimpleBid(address,uint256,uint256)", +"681f8116": "makeTradeable(uint8)", +"681fd129": "addInvestContract(address)", +"681fe70c": "isEmpty()", +"68203417": "thirdStage()", +"6820f8d2": "setOneContract(uint256)", +"68213256": "crr()", +"68216ca7": "addNewBranchInEpisode(uint256,uint256)", +"6821928b": "AddAuthority(address)", +"6822abae": "getMinimumCallCost(uint256)", +"68234a27": "getTransactionDescription(uint256)", +"68240412": "calculateWeiForStage(int256)", +"68250963": "preICODeadline()", +"682594db": "totalAllowedFreeze()", +"68259880": "ChangeOfRules(uint256,uint256,address)", +"6825c843": "_address(uint256)", +"682677e8": "TunDrMahathirMohammad()", +"6826ebf8": "r(bytes)", +"6827b9db": "getMonsterGender()", +"6827e764": "devFee()", +"682806a0": "ICOContract()", +"68281708": "restrict(address)", +"68283f4d": "claimBets()", +"6828d549": "rejectContribution(bytes32)", +"68296073": "setSnowflakeAddress(address,address)", +"682a5e89": "returnDuration(uint256)", +"682a90d2": "Store(bool,uint256)", +"682a9449": "setCustomerService(address,address,bool)", +"682ab756": "LogItemRegistered(address,uint256,uint256,bytes32,bytes32,bytes32)", +"682b6706": "___Kill()", +"682b7100": "deleteRoom(uint256)", +"682baa3a": "HATCH_COOLDOWN()", +"682bc77e": "setStarterPackOnSale(bool)", +"682bea5c": "setCallTable(uint256,uint256)", +"682d1138": "failExecute()", +"682d3bb0": "pdfCertificateProof(bytes)", +"682e1bb0": "isSTOProposed()", +"682e60a9": "presses()", +"682ed9ea": "sanMaxAmount()", +"682f3d36": "OrderMatch(address,int256,address,int256,uint256,uint256)", +"68302467": "paySeller(uint256)", +"68306e43": "dividends(address)", +"6830cdc4": "getJobCount(address)", +"6831c169": "totalPayedOut()", +"6831e272": "mintTokens(address,uint256,uint256)", +"683328bf": "takePet(uint64)", +"6833716f": "ProofShrimpFarmer(address)", +"6833d54f": "contains(string)", +"6833f60d": "triggerPause()", +"68342b33": "ownerInfoOf(uint256)", +"683431e2": "SelfDesctruction()", +"68347fdf": "ICO_MIN_DEPOSIT()", +"68348dfe": "_newGame(bytes32)", +"6835df3e": "SFT_PER_ETH_BASE_RATE()", +"6835f32c": "build(bytes)", +"68365eb7": "NewProject(address)", +"683674dc": "disconnectOrderUser(address,address,uint256,address)", +"683799e6": "setMaximumPurchaseFraction(uint256)", +"6837ff1e": "newContract(address)", +"68381874": "Trade(address,uint256,address,uint256,address,address,bytes32)", +"68381b96": "getHighestUnitPriceIdxFromSell()", +"68388b80": "banAccounts(address[])", +"6838e7c5": "PrinzeToken()", +"68393a4c": "getBonusByTime(uint256)", +"683a6858": "Recoverable()", +"683ad727": "getDeed(uint256)", +"683b4184": "inflation_complete()", +"683cde49": "upgradeBalanceOf(address)", +"683cecc2": "addressFunc(address)", +"683d4a4b": "minWithdrawalCoolingPeriod()", +"683d69e4": "checkEligibility(bytes32,address,address)", +"683de015": "switchUpgradable(bool)", +"683e0bcd": "ethPriceInUsd()", +"683e2929": "getPSlotLength(address)", +"683e3451": "CioCoinERC20Token(uint256,string,string,uint256)", +"683e70b6": "createWhaleTokens(address,uint256)", +"683f7f27": "removeParticipant(uint256)", +"68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", +"68404cd9": "setValueSome(uint256,uint256)", +"6840721d": "searchReport(string)", +"6840c67d": "vestPartnerEquityReserve()", +"6840f8e8": "returnEth(address,uint256)", +"68412058": "getRank06()", +"68412063": "distributeTokens(address,uint256,uint64,uint64,bool,bool)", +"6841f253": "currentRoundLocked()", +"6841fd27": "remining(uint256)", +"68428a1b": "saleActive()", +"68437b58": "bet_purchased(address)", +"6843aef9": "increaseLockReward(uint256)", +"68445ce1": "insertNodeBefore(uint256,uint256,address)", +"68447a55": "fetchFunds()", +"68447c93": "referrer()", +"6844ab43": "testControlCreateSameItemId()", +"68458fcf": "assignInitialAddresses(address[],address)", +"6845950f": "getScriptActionsCount(bytes)", +"6846187f": "farmItems(address[],uint256[])", +"684641b4": "cumulativeInverse(uint256,uint256,uint256)", +"684649a6": "createProxy()", +"6846fe64": "_sellCallToClose(uint256,uint256,uint256,uint256,address)", +"684876a1": "migratePlayerRoundsData(uint256,uint256,uint256,uint256,uint256)", +"6849cb9d": "transferIssuer(address)", +"684b369e": "everisumToken()", +"684b49f5": "PriIcoSale2(address,uint256,uint256,address,address)", +"684bd9d6": "getRemainCount(address)", +"684d63bf": "mintAuditApproval()", +"684d9a04": "quarterSecond()", +"684e2345": "AishaCoin()", +"684ecd59": "getData_9()", +"684edea8": "ponziPriceInWei()", +"684efc40": "TravelNationCoin(uint256,string,uint8,string)", +"684f19c9": "WorldCupFactory(uint256)", +"684fa447": "AppAdded(address,string,address,uint256,bool)", +"684fbfdb": "sinLimited(int256,int216)", +"68503cdf": "getAvailableBalanceByAddress(address,address)", +"68504158": "toggleTransfers(bool)", +"68507757": "faucetBB0()", +"6850fa6d": "onoff()", +"6853367f": "withdrawDevelopersCut()", +"68533a1d": "closeUndercollaterizedPosition()", +"68536341": "ratePerOneEther()", +"6853920e": "removeRole(address,bytes32)", +"6853e3a4": "setToKnown(address)", +"685485fb": "eth_sent()", +"6854df55": "scannedDiamondCaps()", +"6854f668": "buyDragoOnBehalf(address)", +"6855ded3": "WHITELIST_END_DATE()", +"685705ae": "getWeiValue()", +"68573107": "batchMint(address[],uint256[])", +"6857ab40": "seq()", +"6857cb06": "manualTransfer(address,uint256)", +"68581ebd": "getJobs()", +"68583bc0": "FC1Token()", +"68586e57": "setPet(uint8,address,string,uint8,uint16,uint16,uint16)", +"6859274b": "checkMembership(bytes32,uint64,bytes)", +"6859d08f": "addToActiveGroup(address)", +"6859dc10": "rejectRequest(address,uint256)", +"685a73e0": "claimHodlRewardsFor(address[])", +"685adf5e": "ALDEToken(uint256,string,uint8,string)", +"685ae2a9": "itoEndTime()", +"685b2d8f": "transferPermissions(address)", +"685b47c7": "updatePresaleNumbers()", +"685c234a": "checkAuthorization(address,address)", +"685c60de": "transferERC23(address,uint256,bytes)", +"685ca194": "withdrawalAllowed(address)", +"685d1135": "recyclingRemainToken()", +"685e2486": "migration(address)", +"685e78fb": "SecondPriceAuction(address,address,address,address,address,uint256,uint256)", +"685ffd83": "registerNameXname(string,bytes32,bool)", +"6860dc1f": "isRefAvailable()", +"6860fd58": "Fees(uint256)", +"686174ec": "QQQTokenBase()", +"6861d3b8": "firstStageStartsAt()", +"68621711": "assetMeta()", +"68624bd7": "lockedValueOf(address)", +"68639a29": "setActivation(address)", +"6863d3c7": "CreatedIRC(address,uint256)", +"68649c8a": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[3][4])", +"68654ef8": "bonusBalanceOf(address)", +"68660b93": "updateDonateTokenAddress(address,uint256)", +"68664430": "supplyDAICO()", +"6866537d": "getCardPrice(uint256)", +"6866566a": "Priced(uint256)", +"6866d144": "_tokenPrice(uint256)", +"6866da59": "_lockOrUnlockAmount(uint24,uint256,uint256,uint256,uint256,uint256,uint8)", +"686790e5": "freezeSignatureChecker()", +"6867edeb": "getBuyOrderPrices()", +"68690dd0": "NeedRefresh(uint256)", +"68699224": "offlineAdjust(uint256,uint256)", +"6869b20e": "saveToken(uint256)", +"6869fb30": "maxWeiTier0()", +"686b2812": "addWhitelistUsers(address[])", +"686b88cd": "calculateWinnerGameType1(uint256,uint256)", +"686caf04": "lastBlock_a1()", +"686d2d5c": "getCurrentBonusPct(uint256)", +"686d5e00": "unRegisterCampaign(uint256)", +"686da8ab": "UpdateRecord(uint256,address,uint256,bool)", +"686e2284": "isCosmosSale()", +"686e8aaa": "GetMoney()", +"686f21ba": "gainKarma(int256)", +"686f2c90": "collectAllFees()", +"686f4564": "redeemedCards()", +"686fa3f7": "getGameId(address,string,string,uint16,uint64)", +"68700891": "RLPReaderTest()", +"6870c65a": "InitialRateChange(uint256,uint256,uint256)", +"6870ef86": "getCurrentTokenFee()", +"68715a75": "GCCHToken()", +"68716e7a": "EutinMokoToken()", +"6871819b": "getUserCollegeEducationDetails(string)", +"6871d26b": "addMeterPoint(int256,address,int256)", +"6872e300": "COPPER_AMOUNT_SKL()", +"68742da6": "withdrawFunds(address)", +"68750bbc": "sendReserveTokens()", +"6875b6eb": "changeRestrictions()", +"6875b746": "updateRelease(uint256)", +"6875c319": "escalateDisputeToMediator(uint256)", +"687711ec": "s25(bytes1)", +"6877dca7": "Token1_Transfer(address,address,uint256)", +"68784493": "votesUser(address,uint256)", +"68788868": "decodedAmount()", +"6878ac7d": "applicableRate()", +"68794b87": "setState(string)", +"687981ac": "getValidatorIndex(uint64,address)", +"687a46c4": "upgradeQualificationByEther(uint256)", +"687a48a1": "getBurnedCarCount()", +"687bf382": "_useName(address,bytes32)", +"687c317c": "setTokensUsedForReinvestment(uint256)", +"687cc2fd": "preSaleTokensAvailable()", +"687cde1a": "tokenSelled()", +"687d493c": "EverOwnedTokens(address)", +"687d5aa9": "setBuyAllowed(bool)", +"687db864": "END_ICO_TIMESTAMP()", +"687e6b5f": "MavenCoin()", +"687e6f44": "withdrawEthers()", +"687f8427": "devCATDestination()", +"68802712": "get_hedge()", +"688057fc": "registerWalletForFeeSharing(address)", +"68808769": "backers(address,uint256)", +"6880ff5b": "secondReserveWallet()", +"6881385b": "payday()", +"6881f6f1": "minTradingStartTime()", +"688225d6": "onemonth()", +"688257e0": "SmartContractWorkshop(string)", +"688263d7": "largestPenisOwner()", +"6882d481": "priceStar4()", +"68832d14": "___proxyTarget()", +"6883477f": "canBePurchasedByEMONT(uint16)", +"688507e1": "SellEgg()", +"688511bb": "timeoutBlock()", +"688521b4": "coinsIssuedTotal()", +"6885c572": "allowByDelegate(bytes8,bytes8)", +"6885edcd": "desiredPrice(uint256)", +"6885f63b": "TrustToken()", +"6886bf1c": "mostSent()", +"6886ce25": "ForkEthereum()", +"68873375": "CBRToken(uint256,string,string)", +"6887398d": "getContestTeamCount(uint32)", +"68879e5f": "RecoverySha3(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"68882b30": "buyCrab(uint256)", +"68888300": "updateAngelCardSeries(uint8)", +"68889db8": "setFreezingPeriod(address,bool,uint256)", +"68894a16": "changeMaxContribution(uint256)", +"68895979": "getUint256()", +"6889cf86": "icoOver5()", +"6889d646": "transferMoneyToOwner()", +"688a54dc": "ATxAsset()", +"688a7044": "CryptoRoulette()", +"688abbf7": "myDividends(bool)", +"688af37f": "QRL_Token()", +"688b410f": "sendTokenUpdate(address,uint256)", +"688b5c2b": "isMiningWarContract()", +"688ba636": "walletTeam()", +"688bf035": "calculateUSDcValue(uint256)", +"688cdba8": "ownerRate()", +"688cf404": "setAyantDroitEconomique_Compte_4(uint256)", +"688d3922": "isHardCapReached()", +"688d54b7": "getLLV_edit_34()", +"688dcfd7": "setProofType(bytes1)", +"688def07": "MMOToken()", +"688e69d8": "ownerPowerUpContract()", +"688f5ed2": "gracePeriodAfterRound1Target()", +"688fad5d": "updateIdentitySocialURL(address,bytes32)", +"68907360": "setRewardsContractHash(address,bytes32)", +"68915c14": "seedInvestors()", +"6891656e": "buyWithCustomerId(address,uint256,uint256,uint128,uint256,bool)", +"68927cd2": "isValidBNBContribution()", +"68931b21": "getTotalBooks()", +"68934e54": "approveBurnDelegate(address)", +"6893cc22": "toUint(bytes32)", +"6893e8d2": "_setLimits(uint256,uint256)", +"6893f63f": "getTokensPerEth()", +"689490a0": "whitelistedAddresses()", +"6895179d": "testToken()", +"68955fb1": "icoPhase()", +"6895adbb": "_addModule(address,bytes,uint256,uint256)", +"68963dee": "ICOMinTresholdReached(uint256)", +"68968564": "SaveYouAndMeToken()", +"6896a342": "ADVISOR_STAKE_ONE()", +"6896b999": "xConvertPrioritized(address[],uint256,uint256,bytes32,bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"6896ef4b": "currentRoundIndex()", +"6896fabf": "getAccountBalance()", +"68970ab4": "Created(address,address,uint256,bool,uint256,string)", +"689786d0": "test_oneValidEqBytes32Message()", +"6897a1a2": "startingCostToPress()", +"6897c1b6": "PrepareToStart(string,uint256,uint256,uint256,address,address)", +"6897e974": "removeWhitelistAdmin(address)", +"689827b0": "modInverse(int256,int256)", +"6898730f": "eip20Transfer(address,address,uint256)", +"6898f148": "beforeSale()", +"6898f82b": "play(uint256)", +"68999d76": "exportTank(address,uint32)", +"6899d8c2": "recoverAll()", +"6899dac5": "finishVotingTeam(uint256)", +"689a4608": "Test20()", +"689a521d": "changeContractState(bool)", +"689b2d24": "AcceptsElyxr(address)", +"689b3e2d": "Moonraker(address,address)", +"689b732c": "FundValue(uint256,uint256,uint256,uint256)", +"689da08e": "dad()", +"689dcb02": "Buyin(address,uint256,uint256)", +"689e87c1": "GIRLBUFFERSIZE()", +"689effad": "BookingTimeUtils(address)", +"689f2456": "partial_refund()", +"689f3f99": "unclaimedPlotPrice()", +"689ffd82": "addressSalesSupply()", +"68a1e07f": "_currencyToToken(bytes,bytes)", +"68a287d8": "getTeamVault(address)", +"68a29a31": "balanceEthPrivate(address)", +"68a52509": "getLastOrderId()", +"68a52851": "setTokensContract(address)", +"68a596c7": "ownerToTokenIds(address,uint256)", +"68a59805": "setPayoutDistributionHash(bytes32)", +"68a67030": "finalizeSale1()", +"68a6b26b": "setWeiRaisedInPresale(uint256)", +"68a6e74b": "preICO()", +"68a72fba": "crowdTarget()", +"68a7d7ea": "setAgriChainData(address)", +"68a7e1c4": "setDelegadoDeEscuela(bytes32)", +"68a7effc": "getOrCreateCurrentFeeWindow()", +"68a7f6d6": "playerFastFlight(uint256,uint16)", +"68a8659d": "SellOrdersOf(address,uint256)", +"68a8c5eb": "WyvernDAOProxy()", +"68a958bc": "payrollSystem()", +"68a9674d": "depositFrom(address,address,uint256)", +"68a9de13": "changeEndtime(uint256)", +"68a9f31c": "secondOwner()", +"68aafcd9": "setUsageReportingAddress(address)", +"68ab3db2": "createDefaultGen0EtherDog(uint256,address,uint256,uint256)", +"68ab56ca": "get_bounty_count(uint256)", +"68abf22b": "BAC(uint256)", +"68acb7b7": "TOTAL_COMMUNITY_ALLOCATION()", +"68acfcbb": "changeLinkedAddress(address,address)", +"68ad1412": "registerUser(address,bytes32,address,bytes32,bytes32)", +"68ad6719": "valueChanged(string,string)", +"68aee9e8": "wed()", +"68af1378": "playerGuess(int8)", +"68af37df": "letter()", +"68af4971": "registerListening()", +"68afc7c4": "test_rewardPoolShare_isTranscoder()", +"68b017ec": "sarahtoken()", +"68b07ebb": "_getMaxAuctionSeconds()", +"68b0d82e": "TransferredGNS(address,address,uint256)", +"68b1a6d0": "GetBestWalletAddress(uint8)", +"68b2cee0": "removeAssetsOwner(address)", +"68b35396": "gemPerMiner()", +"68b43f38": "privateLockTime()", +"68b47d87": "SSOTHEALTH_FUNDS_ADDRESS()", +"68b49b78": "changeKey(address,address)", +"68b51ac7": "checkValidSignature(address,bytes)", +"68b5c351": "tokenTrueUSD()", +"68b670af": "wmulfloor(uint128,uint128)", +"68b6d55d": "potSize()", +"68b85aa5": "maxTimeout()", +"68b8c5a1": "numberOfAuthorizedPayments()", +"68b91201": "createInvestorTokenTimeLock(address,uint256,uint256,address)", +"68ba170c": "isRegisteredTranscoder(address)", +"68ba745c": "releaseTeamVested()", +"68bae934": "getAuctionItem(uint256)", +"68bba4d0": "HARD_CAP_T()", +"68bd6efa": "getContract(address,address)", +"68be7887": "getOrganisationByAddress(address)", +"68be8007": "_updateRegionOwner(address[16],uint256,address)", +"68be948d": "setRegisteringContractAddress(address)", +"68bee793": "LevelWhitelistedIICO(uint256,uint256,uint256,uint256,uint256,address,uint256)", +"68c14a61": "AirdropCentral()", +"68c197dd": "isWorkerPoolRegistered(address)", +"68c31649": "checkWithdrawAmount(address,uint256,uint256)", +"68c35c4b": "setEmail(address,string)", +"68c49cc9": "collectOtherTokens(address,address)", +"68c4cac6": "tokensPerEther1()", +"68c4eb74": "changeInvestorsAddress(address)", +"68c51f8e": "lhkjTNB()", +"68c64670": "RapidProfit(address)", +"68c646f3": "LifeFactor_i()", +"68c6b11a": "subtract(address,uint256)", +"68c6f45e": "issuedByStabilityBoard()", +"68c84260": "addEmployee(address,address[],uint256)", +"68c92b51": "doCall(address,uint256,bytes4,bytes32[])", +"68cbce31": "setWinner(uint256,uint256)", +"68cdafe6": "tokenTransfer(address,uint256)", +"68cdf759": "getReffAdd(string)", +"68ce77d0": "grant(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"68ce90ac": "handlePayment(address,uint256)", +"68cf5cf8": "setAdvisor(address)", +"68cff8a9": "notEmpty()", +"68d06724": "weisSoftCap()", +"68d12938": "setDonatorReward(uint8,uint256[],uint8)", +"68d155a0": "remove_participant()", +"68d317f1": "buildGame(address,string,string,uint256,uint256,uint8,uint8,uint8)", +"68d324e7": "changeCrowdSale(address)", +"68d32aed": "getVerifiedHashID(address,bytes32)", +"68d3d433": "specialDefenses(uint256)", +"68d3fb7b": "initRegister()", +"68d5a014": "reveal(uint256,uint8[5],bytes32)", +"68d5cb1a": "purchaseBuilding(uint256,uint256,uint256)", +"68d64514": "getRemovableIdArrayItems(address,uint256,string,string,string)", +"68d6a790": "timeOfreservations(address)", +"68d77366": "Coinlancer()", +"68d7e4b5": "addDeal(uint256,string,string,uint256,string,bytes32,string)", +"68d7f8d6": "nextPrice(uint256,uint256)", +"68d830ae": "get_unlock_time()", +"68d85d3e": "CloudexchangeCrowdsale(uint256,address)", +"68d88c25": "serviceRedirect(address,address,uint256)", +"68d89792": "setCatAttributeValue(uint256,uint256,string)", +"68d967dd": "changeDoublr(address)", +"68d9e8c4": "DKoin()", +"68da480b": "maxWeightBonus()", +"68da5ee5": "guess(uint256[])", +"68dae6bb": "RoundClose(uint256,uint8,uint256,bytes32)", +"68db96a6": "whitelistBonusRate()", +"68dbc6c1": "fortune_bid(uint256)", +"68dc3926": "unchanged(address)", +"68dc9528": "giveTokens(address,uint256)", +"68dd43f6": "maxNumInterests()", +"68df0d53": "_removeTokenFromOwnerEnumeration(address,uint256)", +"68df4dda": "removeWhitelistedTokenAddr(address)", +"68df5ca4": "testMinReturn0WithoutReturn()", +"68e03bf9": "setEthEurRate(uint256)", +"68e09ab5": "tokenEscape(address,uint256)", +"68e114db": "PFG(uint256,string,string,bool)", +"68e12fa8": "addressCallWithArray(address,address[3])", +"68e1569a": "parking()", +"68e1bba4": "eth_ratio()", +"68e1f526": "WeMediaChainToken()", +"68e2076a": "Hub()", +"68e39aac": "proxyWorking()", +"68e453ed": "totalSaled()", +"68e47f59": "accept(address,bool)", +"68e4bd99": "testSetBitSuccess()", +"68e5a07e": "getExcludes(uint256,uint256)", +"68e5e22f": "buyAnalysis(address)", +"68e67402": "RoomPlayersAdd(uint8,address,uint256,uint8)", +"68e757a0": "create_public_sale_token(address,uint256)", +"68e76403": "getTotalFeesCollectedCount()", +"68e7bdba": "disableApi(address)", +"68e7e309": "_saveVerification(address,address,uint32)", +"68eb59b0": "startGladiatorWithCoin(uint8,uint8,address)", +"68ebd450": "bioLock()", +"68ec0d99": "refundable(address)", +"68ec8446": "RentartoICO()", +"68ec9dba": "emptyPendingUserList()", +"68eca613": "numShareholders()", +"68ecabcf": "ankcwdsleToken()", +"68ee137e": "bonusClaimedTokens()", +"68ef7946": "zazSupply()", +"68ef8661": "isValidParticipant(bytes32)", +"68efa030": "Dao1901()", +"68efb367": "exile(uint8,uint8,uint8,bytes4)", +"68f04bbb": "openAirDrop()", +"68f06b29": "redeemable(bytes32)", +"68f0bcaa": "atomicize(address[],uint256[],uint256[],bytes)", +"68f15aac": "DMChainToken(string,string,uint8,uint256)", +"68f16293": "transferCooldown()", +"68f169e1": "sellCut()", +"68f269b4": "RATE_ETH_TXK()", +"68f2ab8e": "Currency(string,string)", +"68f2c86a": "changeUserPerms(address,bool,bool,bool)", +"68f2d6e2": "GEN0_MINIMAL_PRICE()", +"68f319b1": "placeBet(uint8,bool,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"68f399f4": "BetSetAnswer(uint256)", +"68f5aa0f": "setShareholderDB(address)", +"68f5ccdf": "devFeePaid()", +"68f5d173": "addAdminister(address)", +"68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", +"68f67330": "finalizedCrowdfunding()", +"68f6e75f": "percent1()", +"68f7ef1b": "BLKToken(address)", +"68f88a26": "getMatchSummarizeInfo(uint256)", +"68f8957a": "setAyantDroitEconomique_Compte_1(uint256)", +"68f8fc10": "buyToken(address,uint256)", +"68f91814": "mainMultisigEther()", +"68f9dab2": "hash(bytes,bytes,uint256)", +"68fa8134": "removeAdministrator(address)", +"68faaa6f": "getTotalSellCount()", +"68fad504": "burnExtraTokens()", +"68faecdb": "depositedMYB(address)", +"68fb81b7": "iCoTokensSold()", +"68fbbab8": "giveMultipleItemsToMultipleRecipients(address[],uint256[])", +"68fbd0a8": "TPTSchedules()", +"68fcb6ee": "purchaseCard(uint256,uint256)", +"68fd0455": "contractorCancel(bytes16,address,address,uint256,uint256)", +"68fd22d3": "_addToList(address[],address)", +"68fe4405": "getBondHolder()", +"68ff8c4c": "UserList()", +"68fff456": "blackMask()", +"69008fb6": "buyTileAuction(uint8,uint256,address)", +"6900a3ae": "toString(uint256)", +"6901f668": "validate()", +"690252c8": "addSshKey(string)", +"69025b5f": "_addTokenToOwnerEnumeration(address,uint256)", +"6902a416": "AUMXToken()", +"69030397": "addLocker(address,address)", +"69032f15": "cantSetReferrer(address)", +"69043895": "exOwner(address)", +"6904c104": "getCampaignValidity(bytes32)", +"6904c94d": "company()", +"6904efc5": "BeatTokenIcoPhase3Started()", +"6904f583": "econVestingStage()", +"6905877a": "totalOwedForApi(uint256)", +"69061355": "claimOwnership(uint8,bytes32,bytes32)", +"6906679b": "getHistory(uint256,uint256)", +"6906a137": "checkCharger(uint256)", +"69070772": "MyFreeCoins(uint256,string,uint8,string)", +"69071418": "poolCLock()", +"6907baa9": "Campaign(address,address,address)", +"69081199": "WithdrawFunds(address)", +"69086c21": "a(bool,bool,bool)", +"6908d99c": "Extract(address,uint256)", +"6908ea00": "_checkVotes(uint256,bytes32,bytes32)", +"690973b6": "placeSpectatorBetOnGladiatorBattle(uint256,bool,uint256)", +"6909f5bf": "generateTokenWithAttributes(string,string,string)", +"6909fd44": "isWhitelisted(uint256,bytes32)", +"690a946b": "getProjectEndDate(uint256)", +"690b1897": "AragonTokenSale(uint256,uint256,address,address,uint256,uint256,uint8,bytes32)", +"690c11d5": "getcoursesLenght()", +"690c5de8": "phase4Cap()", +"690cf0d1": "preSaleStarted()", +"690d0b1d": "STARCrowdsale()", +"690d23be": "getItemAmountOf(uint256,address)", +"690d3750": "lockBalances()", +"690d8320": "withdrawETH(address)", +"690e1d22": "showLockNum(address,address)", +"690e7c09": "open(uint256)", +"690eb3f8": "getTicketSumToRound(uint256)", +"690f2f8e": "_addTokenAddress(address)", +"690f411b": "VividoTokenTMP()", +"690f4559": "createPersonalDepositAddressFor(address)", +"690fa5df": "getPlayerRefById(uint256)", +"69102190": "checkCount(address)", +"69111865": "LINDOToken()", +"69115768": "hasItBeenReleased(uint256)", +"69129b4f": "StandardToken(uint256,string,string)", +"6912c8ba": "thirtyPercentWithBonus()", +"69132d43": "useBalanceOf(address)", +"69132f72": "SALE2_END()", +"6913a63c": "addGuard(address)", +"6913d82d": "adminSetBlock(uint256,uint256)", +"6914db60": "tokenMetadata(uint256)", +"6914f40f": "getPI_edit_27()", +"69161b9e": "addAddressToGrantAccess(address,uint256)", +"6917fd5e": "BONUS_ICO_PERIOD_ONE()", +"6919d09a": "Y(uint256,uint256)", +"6919ff17": "test_insert_findNoHintAtPosition(int256)", +"691a38ab": "canBeWhitelisted(bytes32)", +"691a3f64": "buyFrom(address)", +"691a5842": "totalEtherRaised()", +"691ae7c9": "setCandyPowerToken(address)", +"691b7ce0": "transferCMO(address)", +"691ba73a": "race()", +"691bf023": "LockTokens(address,uint256,string)", +"691bfc89": "goods(uint16,uint256)", +"691c65d4": "mintItem(address)", +"691c71bd": "endTime2()", +"691c9484": "registerInvestor(address)", +"691cdb51": "CoinoorCrowdsale(address,address,address,address,address,uint256)", +"691d58e7": "_applyRefund(uint256)", +"691d933a": "getDeedByAddress(string,uint256)", +"691de4a4": "add(string,bytes32)", +"691e9961": "we_test_token()", +"691ed382": "THIRD_TIER_SALE_START_TIME()", +"691edfda": "devAccount()", +"691f2216": "User_1()", +"691f3431": "name(bytes32)", +"691fb8ea": "jumpIn()", +"692058c2": "dex()", +"69205dfc": "TUNEZ()", +"6921278a": "rateFee()", +"69215eb3": "ethMined()", +"692193cc": "MarketplaceAccessor(address)", +"6921af97": "payOutBounty(address,address)", +"69229b43": "ChangeOwnerContract(address)", +"6922eb06": "sellPackToAddress(uint16,uint16,address)", +"692345ee": "elapsedPeriods()", +"692397a4": "testIssueTokens()", +"69244c55": "getIcoReward(uint256)", +"69245009": "cage()", +"6925ad77": "multiplex_target(address)", +"6925b015": "contributionBy(address)", +"6925ebb9": "fluxFeed(uint256,bool)", +"6926890b": "createSale3()", +"69269371": "newAmendment(string,uint256,uint256)", +"6926cc7b": "_canSetReferrer(address,address)", +"692740b6": "_areStakeAndWithdrawAllowed()", +"6927bc38": "_isValidSignature(address,bytes)", +"6927cac5": "trustedSender()", +"6927e45a": "TOKEN_SHARE_OF_ADVISORS()", +"6927f800": "Tango1Token()", +"69288540": "setDEV(address)", +"6929dd0b": "confirmOrderCompletionByDoctor(bytes16,bool)", +"692aa97e": "isOpened()", +"692ad3a9": "round(uint256,uint256,uint256,uint256)", +"692b3712": "DMINT()", +"692bf818": "isIntermediary(address)", +"692cd610": "nextRewardPlayNo()", +"692d9ee5": "SALE_TOKENS()", +"692dfe8e": "maxStakeHolders()", +"692f74aa": "getvehreqdetails(uint256,address)", +"69306f24": "numberOfCommittees()", +"69307c80": "rotateBits(bytes,int256)", +"6930a020": "bruler(uint256)", +"6930a7e9": "adminMode(bool)", +"6930c5da": "depositSavings(address,uint32)", +"6930fd2a": "claimAll(uint256)", +"693103a0": "addAffiliates(address[],uint256[])", +"69318a79": "makeComment(string)", +"6931b550": "claimEthers()", +"6931e19f": "productPrices(bytes32)", +"69328dec": "withdraw(address,uint256,address)", +"6932af36": "proxies(bytes32)", +"6932c9c5": "getSaleContractDepositAddress(address)", +"6932cf81": "getName(string)", +"69335938": "vestedDate()", +"693382a9": "addToWhiteList(bytes32,address)", +"693391fe": "createNewUser(address,address,string)", +"69347990": "ownerWithdrawl()", +"69358e2e": "getCompanyList()", +"6935a0d0": "addNewEventToBusiness(uint256,address,string,string,uint256,uint256,uint256,uint256)", +"6935a290": "OriginsTraceChainToken(address)", +"69361de3": "I21Token()", +"69361fe2": "FeeCalculated(uint256,uint256,uint256,uint256,uint256)", +"693649aa": "mintRewardCore(address,uint256,uint256,uint256,uint256,uint256)", +"6936c1cf": "XoloChain()", +"69389cac": "setPlayerForm(uint256,uint8)", +"6938d9b0": "allocatePresaleTokens(address,uint256,uint256)", +"6939864b": "lotteryState()", +"693ac4fb": "getProof(bytes)", +"693b2b3f": "ticketTransferersAmount(address)", +"693bd2d0": "cardContract()", +"693cf8ce": "amountToSeedNextRound(uint256)", +"693d0141": "retireWildEasy(uint64,uint64,uint64,uint64,uint64,uint64)", +"693d0df2": "claimFunds(address)", +"693dde5c": "getAppId()", +"693e2279": "burntFounder()", +"693e26dd": "createVirtualEntity()", +"693ec85e": "get(string)", +"6940030f": "disableTrade()", +"69401027": "acceptClockmaker()", +"694094fd": "M5Token()", +"69414e7b": "SaveCryptoNetwork()", +"6941a061": "IdxCoin()", +"69422924": "hasVotedOnDocumentPoll(uint8,bytes32)", +"69423429": "getMyDividendAmount()", +"694244f8": "PreSaleStart()", +"694278da": "publicKeyYForX(uint256)", +"69428d97": "OwnableSimple()", +"6942dc03": "EnvironToken()", +"6942eac7": "Currency()", +"6942eff7": "_unverifyAddress(address)", +"69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", +"69433e12": "setExchange(uint256)", +"6943935e": "DPOS()", +"69443bf4": "CTAuction(address,address)", +"694463a2": "totalEntrants()", +"69454b86": "pairs(address,address)", +"6945c5ea": "setPlatform(address)", +"6946e33b": "GXVCNoToken(uint256,address)", +"694702ec": "CommonTokensale(address,address,address,address,uint256,uint256)", +"694719d8": "MIN_REFUND_RATE_DELIMITER()", +"69488271": "AllocatePresale(address,uint256)", +"6949a058": "sendOwnerEther()", +"6949e1d4": "AngleToken()", +"6949ed67": "omec(uint256,string,string)", +"694a813f": "bet1deltaOf(uint256)", +"694b1727": "addServer(string,uint8,uint256,uint256)", +"694c00d1": "reclaimBySender(address,address,bytes32)", +"694c11eb": "buyCore(address,address)", +"694d3757": "isAuthDisabled(uint256)", +"694dcecc": "preCrowdsaleStartTime()", +"694df50a": "freezeAddress(address,bool)", +"694e0d5b": "StringPasser(uint8[])", +"694e4277": "payment(uint256,address,uint256,bool)", +"694e80c3": "changeThreshold(uint256)", +"694ebe05": "createEscrow(address,uint256,address,uint256)", +"694f5a08": "_clearTotalNormalTokensByAddress(address)", +"694f6276": "_approvedFor(address,uint40)", +"6951b995": "grantCompanyCoins(address,uint256)", +"695338b9": "ChillIssued()", +"6953ace4": "finalTokenExchangeRate()", +"6953ba9a": "nextStarIndexToAssign()", +"69541be8": "DefaultReverseResolver()", +"6954abee": "owner_supplied_eth()", +"69557669": "changeContracts(address,address,address,address,address)", +"6955c8fc": "getBuyPriceAndPreviousRecord(bytes32)", +"69569a51": "setFrontend(address)", +"6956f3d5": "_totalTokens()", +"69573648": "remove(bytes,bytes)", +"695741f8": "waitTimeBlocks()", +"69580f63": "setVendorName(address,bytes32)", +"6958420b": "arbYes(uint256,address,uint256,string,uint256)", +"69594cfa": "transactionLog(uint256)", +"69598efe": "totalPartitions()", +"69599168": "onEmergencyChanged(bool)", +"6959d5c7": "getCitationRecord(string,uint256)", +"695a4cad": "finishTransferFeePayment()", +"695a7e9d": "CheckAmbientLightException(bytes32,uint32)", +"695addc9": "newProposal(bytes32,address,uint256,bytes)", +"695b4700": "transfer_token_from(address,address,uint256)", +"695c5a26": "getCurrentPhaseCloseTime()", +"695ca8c8": "Rhodium()", +"695d027b": "EMoney(uint256,string,string)", +"695d7297": "updateRewardForDrawing(uint256)", +"695d7797": "makeWallet(uint256)", +"695dcfa4": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", +"695e1341": "UNGT()", +"695e2a30": "METAXCrowdSale()", +"695e54c3": "setCountWinnerPlace(uint256)", +"695ec793": "secondRelease()", +"695f9db3": "createRocSaleMarkets(uint256,uint256)", +"69606c61": "CompalTestCoin1(string,string,uint256,uint256)", +"6960947d": "stockSize()", +"6960a0ed": "getArtWorkChangeFee(uint256)", +"69615c0c": "TransferSalPay(address,address,uint256)", +"69623ae2": "addPlugin(address,address)", +"6962b010": "freezeEndsAt()", +"69632f56": "unitAttack(uint256)", +"69639749": "getMemberRole(address)", +"696495f9": "GetLettuce(address)", +"6965193f": "_processTransactionFee(address,uint256)", +"69652fcf": "resign()", +"69658cf3": "checkMyTokens()", +"69666811": "collectAllReturnBalance(address)", +"69671622": "depositToken(address,uint8,uint256,uint256)", +"69683080": "totalRestrictedAssignments()", +"6968ce29": "refundNonKYCInvestor()", +"6969d216": "topLevelDomainOwner(string)", +"6969d5d8": "appointAdministrator(address)", +"696a7253": "setConstraint(bytes32,bool,bool)", +"696b1030": "enableLimit()", +"696b5fb7": "getAssetID()", +"696bda86": "submitProposal(uint256,bytes)", +"696c58c4": "getRefund(address)", +"696c9c0a": "create(address,uint256,bytes)", +"696cd82c": "_register()", +"696d25fb": "calcVestableToken(address)", +"696d7ee9": "airdropPrize(address)", +"696d816a": "endSell()", +"696df08e": "FULL_TOKEN_WALLET()", +"696e6a6a": "Octiron()", +"696e7a85": "listPrycto3()", +"696ecc55": "trade(uint256,uint16[],uint8,bytes32,bytes32)", +"696f541c": "getOrg(string)", +"696f8a95": "CrowdCoinICO(address,address,address)", +"696fcc7c": "abortTime()", +"696fd28a": "SBSToken()", +"696fd68c": "makeTransferable()", +"697025b6": "transferEnablingDate()", +"6970402c": "areAllTokensRegistered(address[],address)", +"69706d9d": "unlockAmounts(uint256)", +"69708616": "push(address,uint16,uint256[4],uint256[2],uint8[11])", +"6970f46b": "BitFwdToken()", +"69712ffa": "removeTokenLock()", +"69719706": "Huangdashi(uint256,string,uint8,string)", +"6971d64c": "func_0AB9()", +"69732d4b": "ProjectX()", +"6973a4f8": "backTransfer(address,uint256)", +"6973cf58": "createEthSiringAuction(uint256,uint256)", +"6973e6db": "extraDataToNbJurors(bytes)", +"6974c632": "getItemPriceById(string,uint256)", +"6975846a": "getCurrentBidAmount(uint256)", +"6975aa9f": "minGoalReached()", +"69766079": "buyin()", +"6977083e": "updateStrategyAddress(bytes15,address)", +"69774c2d": "topup()", +"69776b1b": "tranchePeriodInDays()", +"6977aa62": "mintUnreleasedCard(uint8,address)", +"6977d9de": "addEmployerTotalInvoiced(address,address,uint256)", +"6977edc6": "dataControlAddOwner(address,address)", +"69793570": "_deleteOperation(bytes32,bool)", +"69794795": "getRiskParams()", +"697952af": "updateHolder(uint256,bytes32,bytes32,bytes32,bytes32)", +"697a2902": "HDhundun()", +"697a3083": "destroyforsecurities(uint256)", +"697a60b3": "updateContract(string,address)", +"697aefe2": "certificato(string)", +"697b139e": "changeGift(uint256)", +"697c37c5": "cd1(address)", +"697ca8bf": "getContributorInfo(address,string)", +"697cca66": "safeRelease()", +"697d1eaf": "getGroupTeamInvest(uint256,uint256)", +"697d2e19": "getDisputeTimeoutState(uint256)", +"697ee181": "DemeterCrowdsaleInstance()", +"697fa3e6": "forCommand()", +"697fa43d": "isBatchCeateDrawings()", +"697fb220": "addLockAddressInternal(address,uint256)", +"697fc672": "creatorClaimFundTransfer(uint256)", +"697fd39e": "randomNumberIncome()", +"6980f4fb": "heroTypeIds(uint16,uint256)", +"69810d0c": "TOTAL_SHIP()", +"69815435": "isAbove(uint256,uint256,string)", +"69817410": "investHappened(address,uint256)", +"69817dd4": "ProspectorsDevAllocation(address)", +"6981b5f4": "getLength(string)", +"6981c879": "updateDate(address)", +"69820a80": "birthBlock_()", +"698232fe": "balances1(uint256)", +"6982c6f4": "tickets100price()", +"6982f45a": "AutomobileCyberchainToken()", +"69833668": "allocateEndBlock()", +"69837721": "accForBounty()", +"6983f908": "isAllowedToBuyByAddress(address)", +"69843940": "getValue(bytes32)", +"6984d4a8": "getBigPromoPercent()", +"6985a022": "Pause()", +"6985a1b0": "endInstance(address,address)", +"6985c57e": "createRare(string,uint256)", +"6985e46e": "getConflictResolver()", +"69863520": "getOrganizerName(uint256)", +"6986ab82": "getNeedLockFundsFromPeriod(uint256,uint256)", +"6986d405": "elapsedDays()", +"6988e9cc": "tokenTotalSupply(address)", +"69898d64": "removeGift(uint256)", +"698a92fe": "CNKTToken(uint256,string,string)", +"698afd98": "withdrawFrom(string,address,uint256)", +"698bdd6f": "ViewtMyBets()", +"698c1d17": "CoinBX(address)", +"698d67aa": "registerBarcode(bytes9,bytes3,string,string,bytes19)", +"698d8a1e": "completeProvision(address,uint32,uint256,uint256)", +"698edc76": "getLawyer(address)", +"698f16aa": "pauseTrueUSD()", +"698f2e84": "setVirtualExchange(address)", +"698fbe92": "setWhitelisted(address,uint8)", +"69902ffb": "buyPerUnit(address,uint256)", +"699084f4": "CNBCoin(uint256,string,uint8,string)", +"69919447": "sclToken()", +"6991bad0": "number_of_token()", +"6991cb13": "EthlanceSponsorWallet()", +"69921c26": "checkAccount(address)", +"6993176a": "setMtdAmount(uint256)", +"69934ee7": "becomeRichest()", +"6993b507": "getDoublePeriod()", +"69940d79": "getRewardToken()", +"6994436e": "Shefo()", +"699450e8": "student()", +"699487c2": "getRecordNameToken(bytes32)", +"69949c77": "getRestricted()", +"6994a62b": "getRedemptionStatus(bytes32)", +"6994a7a0": "getPlayerAmount(uint256,uint256,address)", +"69950bd6": "addNewVendor(address)", +"69953501": "setUtils(address)", +"69958ab9": "cancelGame(uint256)", +"69972e07": "unvouch(bytes32,uint256)", +"6997545f": "SetParticipantStatus(address)", +"6997bcab": "totalSpending()", +"6997d166": "USER_VOTE(uint256,uint256)", +"6997f429": "MacroProxyContract()", +"69986073": "mainSaleSuccessfull()", +"6998a85b": "setTimeToBorn(uint256)", +"69995128": "updateAccount()", +"6999579f": "consolationRewardsClaimPercent()", +"69997696": "updateLoveStoryWithData(bytes16,bytes32,bytes32,string)", +"69997987": "distributeIQTToken()", +"6999d38f": "cancelBetByB(uint256)", +"699a195d": "addEA(string,string,string,uint32,address,address,string)", +"699a3a7f": "etherSince100()", +"699abb3c": "setTaxPercentage(uint256)", +"699ac46f": "mintTransfer(bytes32,uint256,bytes32,address)", +"699b328a": "randomize()", +"699be1bb": "lastBlock_v9Hash_uint256()", +"699c1687": "getProductBuyer(uint256)", +"699c181e": "currentTokenPerETH()", +"699c267a": "Jii()", +"699dc8ff": "proxyMintTokens(address,uint256,bytes32)", +"699dde66": "SiniCoin(string,uint256,uint8,string)", +"699e2bc6": "getTradeInfo(uint256,address,address)", +"699ef40c": "updateProfileAboutMe(string)", +"699f0c72": "getOfferPriceEth(uint256)", +"699f1fa9": "thisIsFork()", +"699f200f": "addresses(bytes32)", +"699ffd88": "get_database_id()", +"69a0188a": "setHashToFalse(bytes32)", +"69a046f2": "wadd(uint128,uint128)", +"69a0b5c0": "isSolved(uint8[9][6])", +"69a1aa95": "bulkPurchageLand()", +"69a1b0e2": "claimB1()", +"69a1bca9": "refundSale()", +"69a26fb8": "BuyStatus(uint256)", +"69a300f6": "getRangeID(uint256)", +"69a3a65a": "HBXToken(address)", +"69a44176": "aTransfer(address,address[],uint256[])", +"69a479e2": "IPETToken()", +"69a4c408": "AdminSupply()", +"69a4eda5": "calculatePositionProfit(uint256)", +"69a56df4": "testNewCounterValueAfterAIncrease()", +"69a5e902": "multiAccessCall(address,uint256,bytes)", +"69a683f1": "pollCompleted()", +"69a68f5f": "setPhase1AccountTokensMax(uint256)", +"69a69658": "createCoreRequestInternal(address,address[],int256[],string)", +"69a75868": "firstYearGameMiningTokenCap()", +"69a8c3bf": "CurrentGameId()", +"69a9e6b8": "togglePayment(uint256,string)", +"69aa2c9f": "burnMultNom()", +"69aaa388": "changeMultiSignatureWallet(address)", +"69aab7e3": "withdrawNAC(uint256)", +"69aad305": "getFromBalance(uint256)", +"69ab0005": "setThreshold(uint256,uint256,uint256)", +"69ab3404": "withdrawPartialDevelopersCut(uint256)", +"69ab7895": "get_payment_by_id(uint256,uint256)", +"69ab8c76": "ADVISORS_MONTHLY()", +"69ab8e52": "IsICONotStarted()", +"69ab98dd": "worldCupResultPart4()", +"69abed8f": "updateReferralBonus(uint256)", +"69ac5721": "unlockDate()", +"69ad56de": "_nextFifoStorageKey(uint256)", +"69add113": "tradeBancor(address[],uint256,uint256,address)", +"69addb6e": "IssueToken(uint256,address,uint256,uint256)", +"69ae7757": "registerAntique(bytes32)", +"69af0634": "cancelAllBuyOrders(address,uint256,uint256)", +"69afa869": "setRoundTwo(bool)", +"69b041bb": "swarmFundAddress()", +"69b0abea": "remainingPurchaseAmount()", +"69b144eb": "testThrowsCreateNewRevisionNotOwner()", +"69b29b51": "saleLimitReachedForCurrentStage()", +"69b31548": "ForwarderDeposited(address,uint256,bytes)", +"69b41170": "DELAY()", +"69b492f9": "weisMinInvestment()", +"69b4a1ef": "NUM_STAGES()", +"69b59e75": "collectFee(address)", +"69b5fb58": "setAuthorName(string)", +"69b6438e": "FUNDS_WALLET()", +"69b71e06": "unblockFunds(uint256)", +"69b7215d": "doesProofExist(bytes32)", +"69b7ca85": "getCaptainInfo(uint256)", +"69b8f38d": "ICO_PERCENTAGE_2()", +"69b94cf0": "_transferWithData(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"69b9b787": "deposit2(address,address)", +"69b9e96b": "setBuyoutDividendPercentage(uint256)", +"69ba0fe9": "getStringValues(bytes32)", +"69ba3c06": "rejectErx20TransactionRequest()", +"69ba820e": "retrieveWalletForVanity(string)", +"69baa4ba": "TransferredToken(address,uint256)", +"69bb4dc2": "availableTokens()", +"69bba72f": "getAirdropStats(address)", +"69bbe5c7": "checkRound()", +"69bc1a55": "testFail_doubleVoting()", +"69bc513a": "setGGEAddress(address)", +"69bcdb7d": "getCommitment(uint256)", +"69bd01c4": "getvalue()", +"69bd28f0": "_buyToken(address)", +"69bd3436": "debatingPeriodInMinutes()", +"69bd4ec5": "processSellRequest(string,address,uint256,uint256)", +"69bdd5dd": "appSet()", +"69bdfd3a": "toContractDie(bytes,bytes,uint256)", +"69be51bb": "TOKENS_EARLY_BACKERS()", +"69bee8a1": "getWorkerPoolsCount(address)", +"69bef517": "balanceOfOnForHolderUpdate(address,uint256)", +"69c0ad93": "setInternalDependencies(address[])", +"69c19d4c": "getOutcomeTokenDistribution(address)", +"69c1a712": "lastHeartbeat()", +"69c1da7c": "GetManifestoByCategory(string)", +"69c212f6": "getUserByAddress(address)", +"69c254b9": "getSSPRegistry()", +"69c261ed": "setFreelancerCategories(address,address,uint256[])", +"69c338ff": "SomeContract()", +"69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", +"69c46821": "checkReferrer(address)", +"69c5c229": "testControlUpdateLatestRevisionNotUpdatable()", +"69c5f36e": "getTokensForContribution(uint256)", +"69c63434": "RaffleInternetBook(string,uint256)", +"69c6a5d2": "derive_sha256(string,uint256)", +"69c6f18d": "_transferItem(address,address,uint256)", +"69c74033": "withdrawSnowflakeBalanceFrom(string,address,uint256)", +"69c7c180": "m_orderCount()", +"69c7e386": "decreaseICOStartTime(uint256)", +"69c87817": "minimumWithdraw()", +"69c89774": "removeWhitelistedTransfer(address[])", +"69c8b344": "ownedToken(address)", +"69c8c7ef": "subtrReferralDeposit(address,uint256)", +"69c92c5a": "removeAddressFromBackend(address)", +"69ca02dd": "Transfer(address,uint256)", +"69ca16fa": "eventLogHand()", +"69cb418a": "RTeamCoin()", +"69cbb042": "getEncPubkey()", +"69cbd0fe": "MintableBaseCrowdsale(address)", +"69ccacd4": "setPercent4(address,uint256)", +"69cd5df1": "icoTokens(uint256,uint256,uint256)", +"69cd61be": "lockOwner()", +"69cdba9a": "approveChangeOwner(uint256)", +"69cef46c": "uploadData(bytes)", +"69cf7ac3": "miningToken()", +"69d01268": "concatUInt(uint256)", +"69d0292d": "addPresale(address,uint256,uint256)", +"69d03738": "setNFTAddress(address)", +"69d0b5e2": "buyInMarket(uint256,uint256)", +"69d0e33c": "getPlayerPlayedTimes(uint256)", +"69d0ef84": "callAndFailWithDivisionByZero()", +"69d196e1": "canAcceptPayment(uint256)", +"69d19c19": "BDSM()", +"69d1d1ca": "postGoods(string,uint32,string,uint256)", +"69d20762": "MassivelymultiplayeronlineVideoGames()", +"69d24f63": "lifetime()", +"69d25ff2": "updateCustomFee(uint256,address,address,address,address)", +"69d29832": "startBonuses()", +"69d2ce29": "countGames()", +"69d38ed2": "FINAL_AML_DATE()", +"69d3b252": "newVox()", +"69d3e20e": "mint(uint128)", +"69d4e250": "_safeSubtract(uint256,uint256)", +"69d4f28e": "officialSold()", +"69d516b3": "acceptExecutorOwnership()", +"69d565a9": "closeWithoutCounterparty(bytes32,uint256,address)", +"69d58d41": "minimumContributionPhase5()", +"69d5f38a": "setMembershipPrice(uint256)", +"69d62bf4": "revertTransfer(uint256,uint256,uint256,uint256,uint256,uint256)", +"69d6b880": "mintAmount1()", +"69d714c3": "getLargeInvestorApproval(address)", +"69d77740": "left92(uint256)", +"69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", +"69d87ab1": "setETHUSDPrice(uint256)", +"69d89575": "releaseFunds()", +"69da1b43": "NonceTick(uint256)", +"69da66ea": "referralPromille()", +"69dae8b0": "callAndReward_3(string,string,uint256)", +"69db054c": "userComment(uint256)", +"69dbe3e1": "StepFunction(uint256,uint256,uint256)", +"69dcafe9": "createGovernance()", +"69dceb6a": "getCoinAge(address,address,uint256)", +"69dd312f": "mintForContributorPool(uint256)", +"69dd3b2e": "transfer(address,bytes32,bytes32)", +"69dd4524": "crowdsaleTransfer(address,uint256)", +"69ddaad1": "resetQuote()", +"69dded0e": "validateSet(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"69de374d": "getProposalUint(uint256)", +"69de4e84": "NimCoin()", +"69ded293": "reserveBountyRecipient()", +"69df3671": "friendsWith(address)", +"69dfae6e": "productTokens(string)", +"69dfc66e": "TestableStandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"69e01731": "setDesignatedReportDisputeDueTimestamp(uint256)", +"69e01e8d": "dividendsOwing()", +"69e0e346": "inWhiteList(address)", +"69e111ba": "needRelease()", +"69e15404": "feeAmount()", +"69e1b5ce": "NewStage()", +"69e22b20": "addRequest(address,string,string,address)", +"69e24b48": "getCrabStats(uint256)", +"69e255c9": "removeHorseOWN(uint256)", +"69e2c927": "canRecvEthDirect()", +"69e6bcdf": "smartUnBlockAddress(address)", +"69e6e6c9": "amountOfPopDeveloperShouldMine(uint256)", +"69e78499": "removeKey(address)", +"69e795be": "teamTokensCap()", +"69e7ae85": "ipfsAttributeLookup()", +"69e82500": "SoundbitToken()", +"69e8d80f": "ednation()", +"69e91994": "getReturnValue(uint256)", +"69e936f0": "isMultiply()", +"69e9ca8a": "calculatePayoutForAddress(address)", +"69e9f8a8": "activateCurrentRound()", +"69ea1771": "updateRate(uint256)", +"69ea80d5": "HEIGHT()", +"69eac83a": "_emitOracleAdded(bytes4,address)", +"69eadd76": "canAcceptTokens_()", +"69eb6d32": "Annihilated(address,uint256,uint256)", +"69ebb7e9": "getCurrentRound(uint128)", +"69ecc3cf": "invalidate(bytes32)", +"69ed1b83": "callSomeFunctionViaInner2()", +"69ed87b0": "FeesCalculated(uint256,uint256)", +"69ed8a42": "LRKToken(uint256,uint256)", +"69edd4fe": "callElection(uint256)", +"69efe2bf": "stageAdmin()", +"69efe471": "transferLimits(address)", +"69f08449": "m_sale()", +"69f0a549": "mintOther(address,uint256)", +"69f10ce1": "issueRIU(address,uint256)", +"69f1256f": "createTokensFromEther()", +"69f173dc": "waveCap4()", +"69f18967": "testSetBitFailIndexOOB()", +"69f18b8c": "ROB()", +"69f30401": "bid(address,uint256[],uint256[])", +"69f3331d": "nextOwner()", +"69f35883": "updateBloomFilter(bytes,address,bytes32[])", +"69f3c66e": "Movieum()", +"69f40ebc": "forwardInvestorTransaction(address,bytes)", +"69f467c1": "unicorns(uint256)", +"69f4aefc": "LATPTransaction(uint256,uint256,uint256)", +"69f66950": "holderBountyTokens()", +"69f6b766": "getSumInByLottery(uint32)", +"69f80b4a": "addAddress(address,address,uint256,address)", +"69f80c7a": "additionPrice()", +"69f8408a": "MigratableToken()", +"69f8ef0c": "flushETH()", +"69f94209": "NewDrawReadyToPlay(uint256,bytes32,uint256,uint256)", +"69f95967": "vminEtherPerPurchase()", +"69f99001": "hashDataBlock(string)", +"69f9ad2f": "char(bytes1)", +"69fa2cae": "createMintableSale(uint256,uint256,uint256)", +"69fbad65": "_depositOldTokens(address,uint256,address)", +"69fbae6c": "_sendToTeam(uint256)", +"69fbfcc4": "upgradeStructure(uint256)", +"69fc3481": "fundsRaisedFinalized()", +"69fc551a": "create(address,uint256,string)", +"69fcbf70": "setPreSaleAmounts()", +"69fd75b1": "GUPToken(address,uint256)", +"69fe0e2d": "setFee(uint256)", +"69ff2d11": "TOT()", +"69ff5277": "set_activity_details(uint256,string,address)", +"69ffa08a": "claimTokens(address,address)", +"69ffadc9": "TDz(uint256,string,uint8,string)", +"6a00da87": "sellBuyerTokens(uint256)", +"6a011ae5": "minRandomPrivilegeValue()", +"6a018302": "mul2Revert(uint256)", +"6a01b6e6": "createToken(uint256,uint256,uint256,uint256,uint8,uint256,address)", +"6a01f09c": "swapLimit()", +"6a02209c": "getMaxParticipants()", +"6a028692": "totalAvailableEdition(uint256)", +"6a0323b2": "MusiconomiToken()", +"6a0324b0": "_getBool(address,bytes32)", +"6a032a3b": "isTimelocked(address,address)", +"6a032a73": "generateTokensManually(uint256,address)", +"6a03eaf9": "finalizeTime()", +"6a048ddb": "createContractChar(string,uint256)", +"6a049b62": "_buyMulti(address,bytes32)", +"6a054250": "update(uint256,uint256,uint256)", +"6a0665a4": "calculateGoldSell(uint256)", +"6a06bf92": "enjinTeamAllocation()", +"6a07089f": "Contents()", +"6a08b403": "setFine(uint16)", +"6a092e79": "transferTokens(address,address)", +"6a0a1f8e": "claimGrant(uint256)", +"6a0ac115": "libpow2(address,uint256)", +"6a0b50e4": "pickFood(uint256,string,string,uint256)", +"6a0b96b7": "IkuraTransferFee(address,address,address,uint256)", +"6a0c3809": "likeArtist(address)", +"6a0c5068": "getParticipantesA()", +"6a0c5723": "getHasVoted(uint256,address)", +"6a0c8730": "getTransactionPrice()", +"6a0cd52e": "admin_commission_activated()", +"6a0d017c": "inviteReferee(address,address)", +"6a0d3450": "sentTokensToFounders()", +"6a0d783c": "Crowdsale(string,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"6a0e605f": "MyToken(uint256,string,uint8,string,address)", +"6a0e7c24": "teamVesting(address[],uint256[])", +"6a0f7b7c": "getProductContractClients(address)", +"6a0fd45c": "getMeter(string)", +"6a100f37": "startAuctionFee()", +"6a10ad64": "tokenAllocToCrowdsale()", +"6a10c71c": "secondsLeft(address)", +"6a10d4d6": "createToken(address,uint256)", +"6a11138c": "doRandom(uint64)", +"6a12209c": "setRequestLimit(uint256)", +"6a12b86c": "continueGeneration()", +"6a1353c9": "setMintPayoutThreshold(uint256)", +"6a13af72": "giveRiskToken(address,uint256)", +"6a140b27": "_transferToContract(address,address,uint256,bytes)", +"6a142015": "assignGenesisCallerAddress(address)", +"6a146024": "WAD()", +"6a14d131": "creatorsCreatedCount()", +"6a15a080": "distribute_NRT(uint256)", +"6a16ae40": "wct2()", +"6a172536": "firstPreSaleDate1()", +"6a1729aa": "paymentAffiliate(address)", +"6a19b647": "addSuperPlayer(address,bytes32,uint8)", +"6a1af8b8": "setHeroData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", +"6a1b52e1": "expirationCheck()", +"6a1be7c6": "approveCollateral(address,uint256)", +"6a1bf209": "setCCH_edit_8(string)", +"6a1c3a4c": "getLastAPPeriod()", +"6a1c6fc0": "costs(string,uint256)", +"6a1cd82c": "crowdsaleRaised()", +"6a1cdefb": "incBlockCount(uint256,uint256,bytes32,uint256)", +"6a1cf721": "voteYes(uint256)", +"6a1d8713": "setMaxReferrals(uint256)", +"6a1db1bf": "changeFee(uint256)", +"6a1dbf03": "getTokenMinted()", +"6a1eb83f": "MeDao(address,address,address,address,address,uint256)", +"6a1ecbbf": "maxHopefulsNumber()", +"6a1f9e19": "breakIt()", +"6a206137": "cancelOrder(address,uint256)", +"6a2129d6": "delegateRecordExists()", +"6a21857f": "manualSend(address,bytes5)", +"6a221688": "TokenSaleQueue(address,address,address,address,uint256,uint256,uint256)", +"6a226077": "bidOnBreedingAuction(uint256,uint256)", +"6a226a49": "addMessage(string)", +"6a22b09a": "lastAssigned()", +"6a23b9df": "sumICOStage2()", +"6a23e308": "getIncubatorHashing(address,uint8,uint256)", +"6a23e7cf": "setFeeDistributionAndStatusThreshold(uint8,uint8[5],uint256)", +"6a24d595": "ModifyVigencia(uint256)", +"6a25000c": "token_per_wei()", +"6a254198": "ClaimTokensEvent(address,uint256,uint256,uint256,uint256)", +"6a256b29": "settle(address)", +"6a261353": "Lesson_5(address,uint256)", +"6a263f02": "_sqrt(uint256)", +"6a26b7fe": "setClaimableToken(address)", +"6a272462": "sell(address,uint256,uint256)", +"6a27c41d": "revealVote(address,bytes32,bytes32,address,uint256,uint256)", +"6a280317": "isAuctionManager(address)", +"6a2875c1": "incrementDIDFromContributions(address,uint256)", +"6a28db13": "getQrLength()", +"6a28f000": "unfreeze()", +"6a28f828": "issueIndex()", +"6a29150e": "totalFundsWithdrawn()", +"6a293d04": "setAlias(string)", +"6a294a80": "maxActivatedSalesTotalCount()", +"6a29605f": "BOHUpgradeableToken(address)", +"6a2a4c06": "get_released_by_manager()", +"6a2a6657": "validateToken(address,uint256,uint256,uint256)", +"6a2aac2b": "flowerBalances(address)", +"6a2ab790": "PRIVATE_STAGE_MAX_CAP()", +"6a2b171a": "applyDiscount(address,uint256)", +"6a2b5656": "changeTransactionFeeRecipient(address)", +"6a2b9e9d": "ERC20WithMetadata(string)", +"6a2c1ace": "getStateHash(bytes,uint256)", +"6a2d1cb8": "MIN_INVEST_ETHER()", +"6a2d5028": "getRaisedAmountOnToken(address)", +"6a2dda87": "SettingAutoGame_BettingRankRange(uint256,uint256,uint256)", +"6a2ddfce": "dragonsStatsContract()", +"6a2e882b": "getBlockLimit()", +"6a2f78a6": "submitStakeholderTransaction(address,bool)", +"6a2f9536": "calculateFraction(uint256,uint256,uint256)", +"6a30eb24": "hogsmashToken()", +"6a310bac": "bizp()", +"6a31c6df": "getAdjustedAccountValues()", +"6a327b7d": "getSupportManager()", +"6a333e51": "removeAvailablePack(uint256,bytes4)", +"6a33440a": "MANHATTANPROXY12THAVE()", +"6a3350c8": "invalidAirDrop(address)", +"6a33803b": "mintSaleTokens(uint256)", +"6a343df3": "allowPrice()", +"6a34480b": "MAX_INVESTORS()", +"6a357465": "payHours(address,uint256)", +"6a368486": "Ethraffle()", +"6a369137": "AfterSaleTransferableTime()", +"6a3845fe": "artTokenoken()", +"6a385043": "approveTokenTo(uint256,address)", +"6a385ae9": "getBalances(address,address[])", +"6a38c0fa": "DragonLock()", +"6a3a2119": "injectEther()", +"6a3b5aea": "setC4FContractProviderLock(address,bool)", +"6a3baaea": "newForge(bytes32,bytes32,address)", +"6a3bb8cc": "setFiscal(uint256,bytes32)", +"6a3c1198": "_projectCancelNew()", +"6a3c167b": "setInitialize(bool)", +"6a3c62a7": "beginReclaim()", +"6a3c7945": "RequestUpdated(uint256)", +"6a3d2a15": "AdvisorsAmount()", +"6a3d42ef": "ANT(address)", +"6a3d5a07": "AuctionCancelled(uint256,address,uint256)", +"6a3f3b97": "HolderBase(uint256)", +"6a3f5146": "auctionExpired()", +"6a3f79f4": "RaffleIssued(uint256,uint256,uint256)", +"6a3f89f4": "setProofImpl(address)", +"6a40515a": "enhancer()", +"6a40dbd6": "mintInvestor(address,uint256)", +"6a4113c7": "releaseLockFounders2()", +"6a41ade3": "walletCoreTeam()", +"6a420614": "setFreeCount(uint256)", +"6a420bbc": "setHaltPurchase(bool)", +"6a42b8f8": "delay()", +"6a4349a9": "getMicroModulesIds()", +"6a43aae7": "removeName(string)", +"6a43dc9a": "totalSupplyByLegacy()", +"6a4509f0": "paymentMax()", +"6a457ee9": "allocatedBonus()", +"6a470988": "getkEthPhiRate()", +"6a474002": "withdrawDividend()", +"6a47aa06": "halvingInterval()", +"6a48c04d": "GenExtWeightList(uint256,uint256,uint256)", +"6a4967d6": "addToWhitelist(address,uint256,uint8,uint8)", +"6a4987dc": "MARKETING_POOL_ADDR()", +"6a4a39e9": "presaleEndsAt()", +"6a4a6b6e": "_myAddressHelper()", +"6a4ad948": "setConvertionFee(uint256)", +"6a4aef9d": "fromReal(int256)", +"6a4b1b10": "setPresidenteDeMesaVerify(bytes32)", +"6a4b22da": "changeFallbackAccount(address)", +"6a4b27f4": "getRenter(address)", +"6a4b3eca": "checkBankBalance()", +"6a4b6aa5": "untrustedChildWithdraw()", +"6a4b8a3d": "BoxxToken()", +"6a4b96d5": "PledgePayed(uint256)", +"6a4c62ef": "getSecondUnionIds(bytes32)", +"6a4d4bb8": "getInvestorPosition(uint256)", +"6a4f5495": "test_0_ensureServiceRegistryFunctions()", +"6a4f8f39": "RNGenerator()", +"6a4fcddb": "Remyt()", +"6a502578": "totalSoldOnPresale()", +"6a50e3df": "PayWinners(address,address,address)", +"6a514db7": "REOToken()", +"6a51b918": "cities(uint256)", +"6a523c5e": "depositForUser(address)", +"6a5371b8": "nextTier()", +"6a537e40": "getCollectiblePrice(uint256,uint256)", +"6a5392d7": "generatedGze()", +"6a53ab64": "undestroyable()", +"6a53f98a": "pendingTxs(uint256)", +"6a54293a": "internalOwnerOf(uint256)", +"6a54932c": "processTransaction(address,uint256)", +"6a561c11": "ownerResumeGame()", +"6a561cb8": "testSender()", +"6a5690f6": "ICO_GOAL()", +"6a56947e": "transferVerify(address,address,address,uint256)", +"6a56a48b": "_getRandomMineralId()", +"6a570b98": "InGRedientToken()", +"6a585fa3": "tokensPerWei20()", +"6a596455": "getBatlordReq()", +"6a59d0a4": "transferAndLockForever(address,uint256)", +"6a59dc8c": "_unpackAgilityValue(uint256)", +"6a5a3625": "getTotalReqAmt(uint256[],uint256[])", +"6a5b0151": "setGasForKWH(uint256)", +"6a5b459c": "receivedWeiMin()", +"6a5bbc1d": "withdrawToOwner(uint256)", +"6a5c2cf2": "getTotalDividendsByAddress(address)", +"6a5c44a9": "STTadmin1()", +"6a5cf2d0": "WifiBonusCoin()", +"6a5d7206": "doSafeSendWData(address,bytes,uint256)", +"6a5da6e5": "followCampaign(uint256)", +"6a5e2650": "unlocked()", +"6a5e4628": "externalFundDAO()", +"6a5fd362": "shitFund()", +"6a61e5fc": "setTokenPrice(uint256)", +"6a625bc8": "issueToMany(address[],uint256[])", +"6a627842": "mint(address)", +"6a62936b": "PLUTUSTOKEN()", +"6a630559": "tokenLocked()", +"6a630ee7": "__transferWithReference(address,uint256,string,address)", +"6a63606c": "set_tokens_total(uint256)", +"6a63d2f9": "getLastestRequestFundID()", +"6a643ce6": "setBB(bytes32,bytes)", +"6a64790c": "toWholeShareUnit(uint256)", +"6a666c86": "addressToPunkIndex()", +"6a66a693": "beneficiaryContract()", +"6a67acc5": "getAuctionData()", +"6a67ec63": "minimum_buy_value()", +"6a68d2d5": "nextGamePotSplit()", +"6a69424b": "PaymentTimer()", +"6a6ae271": "assertPause()", +"6a6b8077": "StartICO()", +"6a6ba5d7": "addressIsCrowdsale(address,address)", +"6a6c526e": "AcceptsLYNIA(address)", +"6a6d31db": "externalEnter()", +"6a6e79bb": "WithdrawPaymentForTest(address,uint256)", +"6a6e88ba": "getBuyerInfoAt(uint256)", +"6a6f03a0": "returntrueifcurrentplayerwinsround()", +"6a704d7b": "AddedToGeneration(address,uint256)", +"6a7149f6": "changeAgency(address)", +"6a71a584": "getFreeAllowance()", +"6a71df43": "amountOfTokensPoolB()", +"6a7245ef": "changeBurnBoundsOperation()", +"6a7254a3": "specUWallet()", +"6a7283ac": "buyTokenFromGame(address,address,address)", +"6a7301b8": "setDestroyer(address)", +"6a7360d8": "updateNav(uint256)", +"6a7381bd": "TokensBought(address,uint256,uint256,uint256,uint256,uint256)", +"6a739a9b": "getTokensUnlockedPercentage()", +"6a739c44": "checkRegistrationStatus(address)", +"6a73de2c": "ZZZToken(uint256,string,uint8,string)", +"6a745ce9": "PRESALE_ETH_RAISE()", +"6a748ecf": "upLimit()", +"6a749986": "issuePreferedTokens(uint256,uint256)", +"6a749f6d": "indexshow2(address)", +"6a751710": "transferTraderBalance(address,address)", +"6a75f03d": "partnersAddress()", +"6a75fac0": "pullBack(address)", +"6a7625ca": "setRegionForSale(uint256,uint256,uint256)", +"6a76c522": "totalContractMiniGame()", +"6a7798ee": "EndAuction()", +"6a77e17a": "initialSeedFarmingAdress()", +"6a785191": "referralTokens(address,uint256)", +"6a7882f2": "requiredGoldIncreaseFactor()", +"6a7a88aa": "isValidSignature(address,address,bytes)", +"6a7b28a2": "show_the_minimum__reward_period()", +"6a7b988c": "votePopularity(bytes32)", +"6a7bf76a": "create_game(bytes32,uint32,uint32,uint8,uint16,uint8,address,uint256,bool)", +"6a7c09a0": "rewardPrivate()", +"6a7c0bae": "OWN_burnAddress(address,uint256)", +"6a7c0e81": "setBatchLimit(uint32)", +"6a7c4cdf": "H2G2()", +"6a7c594e": "CTVToken(uint256,string,uint8,string)", +"6a7d1a7e": "getPlayersUnitTickets(address)", +"6a7d3c1c": "FishbankChests(address)", +"6a7d6b52": "updateOldOwnerProfit(uint256)", +"6a7dabb9": "DEVCLASS_MAX_CARGO()", +"6a7eaf8f": "vestingRules()", +"6a7f0c69": "toTimestamp(uint256,uint256,uint256,uint256)", +"6a7f42e4": "closeBetByCanceling(uint256)", +"6a7fc8b7": "setDailyWithdrawLimit(uint128)", +"6a8141a1": "ParrotCoin()", +"6a816548": "cancelOrder()", +"6a81af17": "setConfigClass(uint32,uint8,uint8,uint8,uint32)", +"6a822760": "betB()", +"6a8269b4": "frozenList(address)", +"6a8296d7": "_setPrizePoolAddress(address)", +"6a833a6c": "addDelegateSigned(address,uint8,bytes32,bytes32,string,address,uint256)", +"6a83662e": "getYESVotesByEntity(uint256)", +"6a83b924": "btycownerof()", +"6a84e143": "destroyUnsoldTokens()", +"6a85ac88": "answerCompare(uint256,bytes32)", +"6a85d12e": "changeOuts(address)", +"6a85e252": "ElementTransferred(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"6a868363": "CreatedVUP(address,uint256)", +"6a86a0f0": "DCCAdvancedToken(uint256,string,string)", +"6a871e27": "airDropHeight()", +"6a87f66d": "specialManagerOff(address)", +"6a8896b6": "getPots()", +"6a893a8c": "stopWorkInternal()", +"6a897999": "drainStack(bytes32,bytes32)", +"6a89a51e": "_delete_()", +"6a8aa343": "m_maxTotalSupply()", +"6a8ae136": "getContractBalance(address,address)", +"6a8b9f7b": "BecomeSpiderQueen()", +"6a8ba0fa": "createPromoPet(uint256,address,uint256,uint256,uint256,uint256)", +"6a8be019": "cancelEscrow(uint256,uint256,address,uint256)", +"6a8c2437": "totalRescues()", +"6a8c55b8": "_getSaleRound()", +"6a8c9cce": "BITMUZE()", +"6a8cdb52": "setBondAddress(address)", +"6a8d0bf4": "ReceiverChanged(uint256,address,address)", +"6a8d3575": "UniversalToken(uint256,uint256,uint256)", +"6a8d7eb3": "isLSNFT()", +"6a8d86db": "rawTransfer(address,address,uint256)", +"6a8e8711": "max_bet()", +"6a8ef2d3": "getMyShitClone()", +"6a8f91ff": "createAccount(bytes32,bytes32,address,address)", +"6a907a78": "UserAddTicket(bytes5[])", +"6a90ac63": "unlockWithdrawals(uint256)", +"6a91205a": "rentLand(uint256,bool,uint256)", +"6a91431e": "RefundableCrowdsale(uint256,uint256)", +"6a914911": "getPlayerByBoard(bytes32,uint8)", +"6a92a8b8": "UserAddressLoaded(bytes32,string)", +"6a92fcf6": "paymentEnable()", +"6a931aa8": "tokenVendor2()", +"6a93316c": "getInvestorStatus(address)", +"6a938567": "isValid(bytes32)", +"6a9412bd": "refundAvailable(address)", +"6a95dff4": "NOBSToken()", +"6a96c63e": "getCreateUnicornFullPrice()", +"6a98085a": "totalAmountToWhale()", +"6a9812f9": "getPolicyByTaxCode(string,uint256)", +"6a993130": "Ownables()", +"6a9b4daf": "Etros()", +"6a9b515d": "TokenAuctionCreated(uint256,address,uint256)", +"6a9ba3ce": "maxCapNotReached()", +"6a9c97d6": "refundSender(address,uint256)", +"6a9cd450": "upgradeKernel(address)", +"6a9d02e9": "tokenFrozenSinceNotice()", +"6a9d2afd": "playToWinTest(uint256)", +"6a9d69a7": "rentalTotalTime()", +"6a9d7629": "getOpenInterestInAttoEth()", +"6a9db57a": "playerAmountOfBets(address)", +"6a9dc9a8": "enrollUser(address)", +"6a9e8480": "FinalLottery(address)", +"6a9e8f27": "stockTransfer(address,uint256,uint256)", +"6a9ecd21": "BidFailedEvent(address,uint256,string)", +"6a9f9ff9": "isVisible(uint256)", +"6aa084d7": "getBoardStatus(uint256)", +"6aa0fd32": "performRebalance(bool,address,uint256,bool,uint256,uint256,address,bytes)", +"6aa179d9": "_secondRoundLosersFight()", +"6aa3141f": "removeCustody(address,uint256)", +"6aa31b1f": "starSell()", +"6aa3bf8b": "finishBetFrom(address)", +"6aa3e64d": "emptyTo(address)", +"6aa4b3cc": "calculateId(address,bytes32)", +"6aa52288": "FisrtSupply(address,uint256)", +"6aa5b37f": "maxBuyLimit()", +"6aa5cdfa": "setLatestEdition(uint8)", +"6aa633b6": "isEnabled()", +"6aa66cd4": "targetDiscountValue10()", +"6aa68a15": "phase2EndBlock()", +"6aa737e0": "enableSellToken()", +"6aa8e220": "WeaponRegistry()", +"6aa96d7c": "Storychain()", +"6aa9c59b": "_addMinions(uint32,uint8,uint64)", +"6aa9c82b": "withdrawControl()", +"6aaaae68": "tokensForFoundersAndTeam()", +"6aaab6f2": "updateTreasury(address,uint256)", +"6aaacb3f": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", +"6aab223d": "bonusMatchPayoutInPercent()", +"6aaba012": "ErrorGenerator()", +"6aabd369": "verifyGame(uint256,bool)", +"6aabe577": "getPuntos(uint256)", +"6aad1a6b": "adminSetGasLimit(uint256)", +"6aad70b6": "getAddTokenSignatures()", +"6aaee3f7": "biAdvance(uint32,uint64[2],uint64[2],int64[2],uint64)", +"6aaf0a0d": "endRegisterTime()", +"6aafb887": "getNewMaxProfit(uint256,uint256)", +"6aafd194": "Fosha(uint256,uint256,uint256,uint256,uint256)", +"6ab03a7f": "OGPToken()", +"6ab09a5e": "listUsersBets()", +"6ab15436": "price(bool)", +"6ab22536": "SMEToken(uint256,uint256,uint256,uint256)", +"6ab28bc8": "lockedAmount()", +"6ab368f8": "Burned(address,address,uint256)", +"6ab3846b": "updateEndTime(uint256)", +"6ab3c5bd": "KING_WIN_MULTIPLE_PER()", +"6ab4936d": "presaleFail()", +"6ab5bcd0": "withdrawedTokens()", +"6ab71276": "getOwners(address,uint256)", +"6ab76510": "bulkTransferFrom(uint32[],address,address[],uint256[])", +"6ab872f0": "setMaxBetThresholdPct(uint256)", +"6ab8bd2b": "POOH_TO_CALL_1PLUMBER()", +"6ab92ba7": "PEPL()", +"6ab9aa21": "MAX_REVENUE()", +"6ab9eb45": "getItemAllowancePrice(uint256,address,address)", +"6aba2a0d": "donatorBonus(uint256)", +"6aba899b": "refundStartTime()", +"6abac115": "getActiveState()", +"6abacfa4": "etherMasterWallet()", +"6abb4a50": "getPartner()", +"6abb51a5": "_completeTask(uint256,uint256)", +"6abc3fe4": "directMintAgent()", +"6abd3b88": "getWins(uint256,uint256,uint256)", +"6abf31eb": "confirmTransaction(address,uint256,uint256)", +"6abfbf6f": "allowTokenContract(address)", +"6ac084fe": "OrderFilled(address,uint256)", +"6ac0bf9c": "transferableSynthetix(address)", +"6ac0fe25": "BUYER_STEP_5_CANCEL(bytes32)", +"6ac26d3d": "executeAddMemberProposal(uint256)", +"6ac290e7": "getFirstReferrer()", +"6ac29bcc": "FBR()", +"6ac36029": "get_invester_length()", +"6ac3a100": "HLCN()", +"6ac47db5": "CloudbricSale(address,address)", +"6ac4d582": "registrants(uint256)", +"6ac4d97c": "createInitialCards(uint32,uint16,uint16)", +"6ac4e08b": "dynArrayFunc(int256[])", +"6ac4f8e4": "StocksAddress()", +"6ac50065": "getBidsByAdunit(uint256,uint256)", +"6ac50f2f": "sizeOfUserAddresses()", +"6ac54d62": "stopPreIcoAndBurn()", +"6ac54eb0": "posMint()", +"6ac59dd5": "setIcoParametersSet(bool)", +"6ac5db19": "max()", +"6ac6016f": "pepFarm(address,address,address,address,uint256)", +"6ac6205c": "addDataPoint(int256,uint256,bool,string)", +"6ac68f7f": "getBestBidder(uint256)", +"6ac777d3": "EEFucksToken()", +"6ac878f3": "multiTransferDecimals(address[],uint256[])", +"6ac96df8": "removeAddressesFromRole(address[],string)", +"6ac98840": "SGCC()", +"6acd58d4": "arrayIndexOf(address[],address,address)", +"6acd89f6": "Testerr()", +"6acd8e4a": "getAddedTime(uint256,uint256)", +"6acdf42b": "arrayOfNonTrivialAccounts(uint256)", +"6ace6dc8": "setApprovedBuyer(address,address,bool)", +"6ace7d87": "getLastCandidates()", +"6acf5cb3": "isUserKYCVerified(address)", +"6acfb852": "ZiggleToken()", +"6ad001a5": "metalworksCities(uint256)", +"6ad03feb": "GBTAddress()", +"6ad0d6ce": "_startNewRound(address)", +"6ad1246e": "content(string,uint256,uint256,address,uint256,uint256)", +"6ad1a6d5": "PauseTradable()", +"6ad1fe02": "sale()", +"6ad26611": "removeFee(address)", +"6ad2a0b3": "buildContract(address)", +"6ad34a7a": "BAILSToken(uint256)", +"6ad34dab": "getstartBlockNumber()", +"6ad35d1a": "CMO()", +"6ad38e61": "transmit(address,address,uint256)", +"6ad3f723": "getContentAddress()", +"6ad43a54": "setRateICO(uint256)", +"6ad44174": "getVolumebasedBonusRate(uint256)", +"6ad49245": "FundingManagerEntity()", +"6ad50ed4": "investmentEntryInfos()", +"6ad5b3ea": "walletAddress()", +"6ad60e3d": "BubbleToneToken(address)", +"6ad6d45b": "setLister(address)", +"6ad7541c": "Kokos()", +"6ad7aeb5": "BitsumCash()", +"6ad80326": "walletFounder3()", +"6ad95317": "batchInvests(address[],uint256[])", +"6ad95843": "icoUnitPrice()", +"6ada94e0": "setDataInt(string,string)", +"6adacb48": "priceStep4()", +"6adc674e": "WaltixToken()", +"6adcef6b": "payDividends(uint256)", +"6addb663": "tokenInfo()", +"6addc649": "weekBonuses(uint8)", +"6addf029": "setReferralRequirement(uint256)", +"6ade6cea": "currentstageplayer2()", +"6ade8aa2": "emptyWallet(address)", +"6ade9bd1": "tokensFortorch()", +"6adf3279": "leekStealOn_()", +"6ae00c4f": "ShareRoomDATA(address,string)", +"6ae0646a": "_computeRollFee(uint256)", +"6ae17283": "MinterAdded(address)", +"6ae1a976": "numAffirmationsSigned(bytes32)", +"6ae22740": "reward7()", +"6ae38577": "accPreICO()", +"6ae413ab": "updateWebappAddress(address,address)", +"6ae459bd": "bulkMint(address[],uint256[])", +"6ae4feed": "subtract(address,address,uint256)", +"6ae6151e": "acceptOffer(bytes32,address,uint256)", +"6ae6921f": "_addPayee(address,uint256)", +"6ae6b459": "setLockup(uint256)", +"6ae76777": "addressBounty()", +"6ae81ae1": "icoPhase3TimeBonusInPercentage()", +"6ae85216": "countAssets(uint256)", +"6ae85e0d": "isAddressNotVoted(address,address)", +"6ae8f49a": "WebCoin()", +"6ae8fefa": "NetareumToken()", +"6ae9eea8": "s39(bytes1)", +"6aea5f1b": "current_supply()", +"6aea6cce": "breakCompleteness(uint256,uint256,address)", +"6aeaef97": "inheritedView()", +"6aeb1ce7": "m_paymentChannels(uint256)", +"6aebbbd9": "subUIntValue(bytes32,uint256)", +"6aebc603": "Villj()", +"6aebff5d": "lccxTeamAddress()", +"6aec47b4": "getBalancesAgent(uint256)", +"6aec82b3": "setSalesPipe(address)", +"6aec95cc": "registerBalanceForReference(address)", +"6aedc282": "MarriageContract(address,address,uint256,string)", +"6aede5cd": "globalTimeVault()", +"6aedf1d1": "SupportAdded(address)", +"6aeeec7f": "_setStakingEpochDuration(uint256)", +"6aefef17": "test01CrowdsaleInit()", +"6af04a57": "newContractAddress()", +"6af1898a": "refundErc20(address,address)", +"6af1fdf7": "delegateTokens(address,uint96)", +"6af2da2f": "testKeyedHash()", +"6af41534": "withholdToken()", +"6af422fc": "RSPLT_H()", +"6af53f2f": "MaPToken2()", +"6af58d83": "getMin(uint256)", +"6af630d1": "DARKNODE_FEES_DENOMINATOR()", +"6af6b06f": "setNextLotteryTTMTokenId9(uint64)", +"6af6e64a": "VendorRegistry(address)", +"6af78ab1": "startWeekFour()", +"6af79112": "priceInWei(uint256)", +"6af7dbbe": "sendPriceRequestToOracle(bytes16,uint256)", +"6af81d6f": "_mintCategory(string)", +"6af91799": "totalTokenSaled()", +"6afa0381": "minInvestmentLimit()", +"6afa7b80": "toETH()", +"6afb434f": "getPreIcoInvestment(address)", +"6afb92a1": "MeepCoin()", +"6afbd04f": "Mintable()", +"6afc3474": "saleRoundsSet()", +"6afd767f": "addParticipant(address,bool)", +"6afe74c9": "test_oneValidEmptyAddress()", +"6afeada3": "finishBountyAt()", +"6afef23f": "submitPoliceReport(address,address,uint256,bytes,bool)", +"6aff1a64": "TIER2_PRICE()", +"6affdc39": "saleEndDate()", +"6affe07b": "CirclesTokenOffering(address,uint256,uint256,uint256,uint256,uint256,address)", +"6b0028b9": "initialSupplyInFrac()", +"6b007e4f": "logMarketFinalizedCalled()", +"6b015897": "minimumRewardWithdrawalLimit()", +"6b01acf5": "counterToTokens(uint256)", +"6b0235a0": "tla()", +"6b038742": "Archetypal()", +"6b03ed5f": "clearClaim()", +"6b041da2": "SEVENTNET()", +"6b04f110": "mint_for(address,uint256)", +"6b061d7a": "changeRestarTime(uint32)", +"6b06548c": "EarlyInvestorsTokensHolder(address,address,address)", +"6b068e01": "collectWorks(bytes32,bytes32)", +"6b069710": "scheduleCall(address,bytes,uint256,uint256,uint8)", +"6b06afe7": "getEcoSystemWallet()", +"6b06c3d4": "ActivateEscrow(uint256,uint256,uint256,uint256,address)", +"6b06ea88": "ElementToken(uint256,string,string)", +"6b06f908": "buyToken(string,address,uint256)", +"6b074a07": "isProvider(address)", +"6b08a833": "EDUTURN()", +"6b08f2ef": "convertForPrioritized2(address[],uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"6b091695": "getReward(address,address)", +"6b095ca1": "apply(uint256,uint256,bytes32,bytes)", +"6b097cd0": "KKOGToken()", +"6b0bfc80": "feedAndMultiply(uint256,uint256,string)", +"6b0c537b": "generateRequestId()", +"6b0c932d": "lastDay()", +"6b0c9d6a": "distributeA()", +"6b0cba9c": "getUniqHash()", +"6b0cc513": "_DifficultyCalulate(uint16,uint16)", +"6b0d0329": "getTicketInfo(uint256,uint256)", +"6b0dd90f": "getVote(address,uint256)", +"6b0dfb76": "getLandDefender(uint8,uint32)", +"6b0ead6a": "iudexIdToString(bytes32)", +"6b0f02e6": "firstExchangeRate()", +"6b0f182e": "changeCofounderA(address)", +"6b0f65d7": "indSeedDeposit()", +"6b1092f2": "ADV_BTY_SUPPLY()", +"6b11c87a": "RealEstateCryptoFundBounty(address)", +"6b11dabd": "MTYToken()", +"6b128b2f": "upgradeFinance(address)", +"6b12a7bf": "buyRealm(uint256,uint256,uint256)", +"6b13fabf": "SampleToken()", +"6b140854": "totalWinValue()", +"6b1426a4": "getWinners(uint256)", +"6b149aac": "Cryptassist()", +"6b14dfe1": "SPEED_STAT_MAX()", +"6b14ea36": "ASK_STAKE_RATIO()", +"6b153322": "activateCampaign(string,uint256)", +"6b15c47c": "tokenCalculate(uint256,uint256)", +"6b1781b6": "Emergency()", +"6b17864f": "CommunityPool(address,address)", +"6b1786bb": "cVideoCost()", +"6b178b90": "NBACoin()", +"6b178f47": "poolIssue()", +"6b190ee1": "MemeNetworkToken(address,uint256)", +"6b194a4a": "ALLOCATION_LOCK_END_TIMESTAMP()", +"6b1970ab": "TheCoin()", +"6b199471": "updateMasks(uint256,uint256,uint256)", +"6b19e692": "getPaymentSupply()", +"6b1ac900": "setPXLPropertyContract(address)", +"6b1af75e": "sendReward(address,address,uint256)", +"6b1b3997": "ChronoDragonPowerCoin()", +"6b1b68ad": "URMBToken(uint256,string,string,address)", +"6b1bfd33": "setFundAccount(address)", +"6b1c86fe": "sendBreakup(address)", +"6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", +"6b1d4db7": "ethToTokenSwapOutput(uint256,uint256)", +"6b1da364": "getWinnerInfo(uint256)", +"6b1e0420": "blockPendingTx(uint256)", +"6b1e564a": "challengeWinningOutcome(bytes32,uint16)", +"6b1f513b": "makeDailyInvest(uint256)", +"6b1f78c8": "joinSqr(uint256)", +"6b1fbfdb": "sendWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"6b1feeeb": "get_my_sig()", +"6b212960": "offer(address,uint256)", +"6b2148c2": "Deluxo()", +"6b21a636": "startDisbursement()", +"6b227a8f": "OrderApprovedPartTwo(bytes32,bytes,address,bytes,address,uint256,uint256,uint256,uint256,uint256,bool)", +"6b2327d2": "previewStageEndTime()", +"6b2351aa": "lockWithAfter(address,uint256,uint256)", +"6b235bdc": "ChangeBeneficiary(address)", +"6b236730": "solveChallenge(bytes32)", +"6b24d827": "WalletHolder()", +"6b252b47": "advisorsWallet()", +"6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", +"6b259690": "feesPool()", +"6b263efa": "multiOwnableCreator()", +"6b270056": "Corporation()", +"6b27909d": "getStopLockTime()", +"6b27be9f": "mayorcoin()", +"6b281b64": "totalBalanceUp()", +"6b28d7a2": "blockTransfer()", +"6b28f834": "getPeggedTokenCount(address,address)", +"6b298df0": "disbursements(address)", +"6b2a2691": "winBrickReturn()", +"6b2a77ed": "End5()", +"6b2a86be": "dropToken(address[])", +"6b2accac": "toDRP(uint256)", +"6b2ae2ab": "Notify_String(string,string)", +"6b2bb92a": "finishTournament()", +"6b2c0f55": "removePauser(address)", +"6b2c116c": "AmateurPlatinumToken()", +"6b2cd752": "getGpgKey()", +"6b2ce4ce": "stakeForDuration(address,uint256,uint256,bytes)", +"6b2ce7f1": "togglePresale(bool)", +"6b2d95d4": "getLockedTokens(address)", +"6b2e36b0": "canUpdateAmountToTakeAsRake()", +"6b2ec90f": "_vestedDown(uint256,uint256,uint256,uint256)", +"6b2ed1c0": "sellFci(address,uint256)", +"6b2f4632": "totalEthereumBalance()", +"6b2f65b0": "isArtist(address)", +"6b2f68f5": "assertEq22(bytes22,bytes22)", +"6b2f73c2": "preICOLedger()", +"6b2fa6cc": "lastBlock_v7Hash_uint256()", +"6b2fafa9": "getHash(uint256)", +"6b2fd0e7": "catGenes(uint256)", +"6b3032c6": "getSingleGuessInfo(uint256)", +"6b308ee7": "subTourFreezingPrice()", +"6b30f243": "VCChainToken()", +"6b318270": "addFile(bytes32)", +"6b319f36": "tokenUnfreezeTime()", +"6b31ee01": "jackpot()", +"6b32bb25": "containsValue(address,uint256,string,uint8[])", +"6b32c591": "userClaimAmt()", +"6b334e49": "senderCheck(address,address)", +"6b335b8c": "buyXname(uint256,string)", +"6b33aeb8": "YSH()", +"6b33e45d": "setWithdrawTo(address)", +"6b3416b5": "transfer(uint256,uint256,uint256,uint256,uint256,uint256)", +"6b342eb8": "_minimumBuy()", +"6b3559e1": "mintAndSetData(address,uint256)", +"6b3578f2": "paymentEnabled()", +"6b35bed2": "addAirdropParticipants(address[])", +"6b35f7c1": "deleted()", +"6b36028e": "setReferenceType(bytes32,string)", +"6b361c80": "TokenPriceUpdated(uint256)", +"6b36a76e": "MIPCoin()", +"6b3868db": "getMemberByIdx(uint256)", +"6b3905c4": "getNextVestingTime(address)", +"6b392680": "setFeeAmount(uint256)", +"6b3a87d2": "WatchWinningPot()", +"6b3a8e90": "tournamentJackpot()", +"6b3ac430": "crowdsaleLive()", +"6b3ad4f8": "setColorWhite()", +"6b3b1d17": "tHasBeenPenalized(uint256,address)", +"6b3b261c": "addSpaceshipMoney(uint256)", +"6b3bc4b6": "ovcPerEther()", +"6b3c9757": "advisorSecondLockTime()", +"6b3ce49b": "getRoomBalance(uint256,uint256)", +"6b3cedd6": "mintTokensForCrowdsaleParticipants(address[],uint256[])", +"6b3d998c": "Apputoken()", +"6b3e2f97": "updateDiamond(string,string,string,string,string,uint256,uint256,string)", +"6b3e8ca0": "setPrePresaleTokens(uint256)", +"6b3ec0ac": "vestingExists(address)", +"6b3f5f84": "OwnerReclaim(address,uint256)", +"6b3f94ab": "GoldMintToken()", +"6b3fb674": "noHash()", +"6b3fdc5a": "oraclize_setNetwork(uint8)", +"6b3fdf16": "EXT_COMPANY_THREE()", +"6b3ffb91": "changevanity(string,address)", +"6b404955": "depositDelta()", +"6b407837": "sellerRequestCancel(bytes16,address,address,uint256,uint16)", +"6b4097b2": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6b40bba1": "requiredPeriodSeconds()", +"6b424d47": "h2g2()", +"6b425093": "sortTopPosts()", +"6b433ccf": "_totalLandholderTax(uint256)", +"6b440e9a": "finalAllocation()", +"6b441abc": "VIRTUALTALK()", +"6b453fac": "hardWeiCap()", +"6b454d4c": "next_item_index()", +"6b45adf3": "cellsOf(address)", +"6b45c9f2": "getPiece(uint256)", +"6b462936": "transferQueue(address[],uint256[])", +"6b4660f8": "getStockLength()", +"6b46c8c3": "payoutAmount()", +"6b475df7": "release6m()", +"6b486818": "hashFirst()", +"6b489028": "DEVCLASS()", +"6b4a6ded": "TOKENS_PER_ETHER()", +"6b4a8b78": "token_allowance(address,address)", +"6b4b1f3a": "stringToAddress(string,address)", +"6b4b63fa": "Bank_With_Interest()", +"6b4bfeae": "checkClaimExpiry()", +"6b4c0789": "freezeContract(bool)", +"6b4c5856": "WyeContract()", +"6b4ca2a8": "getMatchData()", +"6b4dd158": "getPrice(bytes)", +"6b4dff1f": "validateGasPrice(uint256)", +"6b4e243d": "callOperator(address,address,address,uint256,bytes,bytes,bool)", +"6b4e8bb0": "lastInflationUpdate()", +"6b4ed21b": "holdersCount()", +"6b4f518a": "preICOTokenReward()", +"6b4f6865": "unlockForWork(address,address,uint256)", +"6b50b6b3": "_multiSigWallet()", +"6b512327": "_deleteIPFSHash(bytes32)", +"6b516ef0": "_handleDeposit(address)", +"6b523b68": "periodCrowdsale()", +"6b52a071": "SALE_FUNDS_ADDR()", +"6b52a86f": "DesTokenSale(address,address)", +"6b5396dc": "batchPresaleVesting(address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"6b5424b3": "HACHIKO()", +"6b54821f": "setupAuthentication(address,bool)", +"6b550dd3": "setAgriChainDocuments(address)", +"6b55264d": "setRegionName(uint16,string)", +"6b55ddd0": "getJobEmployerName(uint256)", +"6b55e991": "transferEther(address)", +"6b56476b": "removePost(address,address)", +"6b5648f5": "enabledMint()", +"6b565345": "CANAToken()", +"6b57825c": "getCurrentUserTotalPromoBonus()", +"6b57cb34": "lockedStagesNum(address)", +"6b584b10": "testFreeSpace()", +"6b588775": "rateOfSpecificTier(uint256)", +"6b58b2bc": "calculateInternalTokensAmount(uint256,uint256,uint256)", +"6b590248": "getDigit()", +"6b59084d": "test1()", +"6b59f495": "tokenized()", +"6b5a61ac": "changeTeamNIMFAAddress(address)", +"6b5ae41c": "execute0(address,uint256,bytes)", +"6b5aed93": "executeTransfer(string,string,uint256,uint256)", +"6b5b6285": "PBKtoken()", +"6b5bbf5f": "setCommunityMultisig(address)", +"6b5c4b16": "dateRelease12()", +"6b5c5f39": "croupier()", +"6b5c8fba": "confirmParties()", +"6b5ca27d": "finalizeCampaign(uint256)", +"6b5caec4": "setBot(address)", +"6b5cd8d0": "getWeaponDamageFromTokenId(uint256,uint256)", +"6b5d18fd": "getProposedIpfs(bytes32)", +"6b5d3287": "sellTokensForUsd(string,address,uint256,uint256)", +"6b5de05a": "tokensForTournament()", +"6b5e1a18": "payoutThreshold()", +"6b5e3ca4": "StaffWallet()", +"6b5e7b06": "getPenndingBalances()", +"6b60386d": "init(uint256,uint256,address,address,address,uint256,uint256,address,uint256,bool)", +"6b6093c2": "FreezeBalances(address)", +"6b61c3c7": "acceptBet(bytes32,bytes32,bytes32,bool)", +"6b628816": "getYumerium(address)", +"6b6292d9": "securityTokensPercent()", +"6b62cb1b": "createName(bytes32,address)", +"6b62cd65": "bankerAllDeposit()", +"6b634440": "tokensForPartners()", +"6b63d145": "OWNER_TOKENS_PERCENT()", +"6b6438cc": "payoutCursor_Id_()", +"6b64c769": "startAuction()", +"6b655e45": "getJuryMembers(uint256)", +"6b6566f0": "DiceOffline()", +"6b65a834": "ratePlanIsExist(uint256,uint256)", +"6b65be60": "usedPositions()", +"6b668601": "preSaleConversionRate()", +"6b676966": "tokenNeedForBonusLevel1()", +"6b683896": "getImplementation(string)", +"6b6872c7": "OeTestCoin()", +"6b68db6a": "FipsData(bytes20,address,bytes)", +"6b68dd4b": "tokensOfOwnerWithinRange(address,uint256,uint256)", +"6b693027": "collateralizations(address,uint256)", +"6b698377": "DogecoinPrivate()", +"6b69ac58": "upgradeHealth(uint256,uint256)", +"6b6a08dc": "hashRevealedPositions(uint32,int64[])", +"6b6a53fa": "testThrowsRestartNotOwner()", +"6b6b2740": "RetailLoyaltySystemBase(uint256,string,string,uint8)", +"6b6c5a7e": "getBracketData()", +"6b6cc239": "isMaintenanceMode()", +"6b6d294e": "worldCupResultPart3()", +"6b6d5c82": "encryptedBallots(uint256)", +"6b6e71b9": "makeTransaction(address,uint256,uint256)", +"6b6ece26": "ban(uint256)", +"6b6ee875": "tokenSealer(uint256)", +"6b6ef0ed": "transfer0(address,uint256)", +"6b6f4826": "minInvestmentICO()", +"6b6f4a9d": "discount()", +"6b7006d7": "lockMana(address,uint256)", +"6b709a36": "lockWorker(address,address)", +"6b7128ec": "getBetCount(uint256)", +"6b71d93b": "VerifiedProxy(uint256)", +"6b722a32": "christmasTree()", +"6b727312": "easyCommit(uint256,uint256,uint256)", +"6b7285d7": "transferP2P(uint256,address)", +"6b74401a": "BuyTokensDirect(address,uint72,uint88,uint88)", +"6b74c3d8": "getTxn(address,uint256,uint256)", +"6b755aa2": "reCommentRewardPool()", +"6b764632": "KongToken()", +"6b76484e": "swap(address,address)", +"6b76bd94": "CreateUser(string)", +"6b78aa08": "MarketHub(uint256)", +"6b790be4": "getWeightMinusFees()", +"6b792c4b": "emergencyWithdrawETH(uint256)", +"6b7976c8": "calculateObtainedINA(uint256)", +"6b7a247e": "setlvlSign(string)", +"6b7ae8dc": "foundationWallet()", +"6b7ae8e6": "left74(uint256)", +"6b7b0472": "getLastHash(bytes10)", +"6b7c0379": "HOPPToken()", +"6b7cc44f": "detail()", +"6b7d5205": "Diamond()", +"6b7d5dfd": "setTangibleAssetDisbursementAddress(address)", +"6b7d90ff": "unVerifyKyc(address)", +"6b7d9a5c": "createPromoPuppy(uint256,address,uint16,uint16,uint16,uint16)", +"6b7db8fc": "sendDividend(address,uint256)", +"6b7e4175": "EphronIndiaCoinICO(address,address,address)", +"6b7eba7d": "instantTransfer()", +"6b7f3a32": "Jojo(uint256,string,uint8,string)", +"6b7fad1b": "ethToDividendsNeeds()", +"6b7ffb92": "revote()", +"6b802108": "checkValidSignatureAndMethod(address,bytes)", +"6b8184e2": "ImpeachmentAccepted(address)", +"6b8263ed": "resumeOffering()", +"6b8287a6": "getetherpriceinUSD(address,uint256)", +"6b8393dd": "getSold(address,uint256)", +"6b845d7e": "updateWithdrawalMode(uint32[])", +"6b847dc0": "setDayWithdraw(uint256)", +"6b8487be": "GigToken(bool)", +"6b84dfcd": "setTransferRight(address[],address[])", +"6b863578": "noVoteSum()", +"6b872309": "x(address,uint256,address,uint256,bytes32,bytes32)", +"6b87d9f7": "BUBBLEToken()", +"6b881724": "assetWallet()", +"6b886888": "isTemporary(bytes8)", +"6b88719a": "PHOENIX_CORSAIR_FTL_SPEED()", +"6b889cce": "call_test()", +"6b88f4ae": "resetIndex(uint256)", +"6b89be03": "getActiveShareholdersArrayLength()", +"6b89bfc7": "getStatusOf(address)", +"6b8ab97d": "reset(address)", +"6b8b3268": "mintCrown(uint256)", +"6b8c261e": "prizeByNow()", +"6b8c4c48": "setDaxInBtcSatoshi(uint256)", +"6b8c7180": "setupPeriodForPreSale(uint256,uint256)", +"6b8cc89d": "INVESTMENT_USER2()", +"6b8ce30e": "partnerInfo_for_Owner(address,bytes32,uint8,bytes32,bytes32)", +"6b8da9a2": "tgrLive()", +"6b8f155a": "numberWhitelisted()", +"6b8f9c43": "setPayoutWallet(address)", +"6b8fd600": "priceOfElements(uint256[])", +"6b8fe0f0": "NewPlayer(address,uint256)", +"6b8ff574": "getName(uint256)", +"6b90ce93": "simulated_snt()", +"6b915d43": "melonToken()", +"6b9168e6": "clearAngelsFromBoard(uint16)", +"6b919488": "removeOwner(uint256)", +"6b930927": "preTgeTokenSupply()", +"6b931cad": "replaceAdministrator(address,address)", +"6b944bd6": "GoBlock()", +"6b946680": "parentKidsLink(uint256,string,string)", +"6b94692a": "isPresaleBuyer(address)", +"6b95767d": "giftSpaceship(uint16,address)", +"6b962c27": "transaction_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[4])", +"6b963f20": "changeOVISReservedToken(uint256,int256)", +"6b96668f": "setRateContract(address)", +"6b97be1f": "transferPayable(uint256)", +"6b97c6d7": "_transferOwnershipOfItemsStorage(address)", +"6b97e5eb": "UnicronToken()", +"6b9808a1": "buyWine()", +"6b98419a": "_approveFor(address,uint256)", +"6b9896ba": "AddAccountsInfo(address,uint256)", +"6b98c85c": "bltMasterToSale()", +"6b98d78c": "setLandSlogan(uint256,string)", +"6b99a13e": "editNumber(uint256)", +"6b9a1db9": "wanUnit()", +"6b9b1006": "TransactionRecorder()", +"6b9b2679": "setReserveForFoundersFirst(address)", +"6b9c1d22": "managementFeeWallet()", +"6b9c6116": "PULSCrowdsale()", +"6b9c9b9c": "TerraByte()", +"6b9cadc1": "isValidMsgValue(uint256)", +"6b9cf534": "_minimumBuyAmount()", +"6b9da657": "sendNewEntry(string)", +"6b9db4e6": "getLock(address)", +"6b9f96ea": "flush()", +"6ba0b4f2": "isKnownSelector(bytes4)", +"6ba0b8bc": "getBonusPercent(uint256,uint256)", +"6ba0f114": "EtherChain()", +"6ba15807": "evntCreateContract(address,address,address,address,uint256,string)", +"6ba20015": "maxplayers()", +"6ba2482d": "GetUserNickName(address)", +"6ba2aefc": "transferMultisig(address,address,uint256)", +"6ba42aaa": "isKeeper(address)", +"6ba44d3c": "get_address(string)", +"6ba47299": "buyDiscountTTWByETH(uint256,address)", +"6ba4c290": "modifyEscrowPrice(uint256,uint256,uint256)", +"6ba4f143": "_setAuraValue23(uint256)", +"6ba4fadb": "changePhaseToPreICO2()", +"6ba55c6d": "coinIssuedFoundation()", +"6ba5ef0d": "setMin(uint96)", +"6ba6984c": "setHBT(uint256)", +"6ba6e2e0": "TGCToken(address)", +"6ba75608": "claimAssetPack(uint256)", +"6ba7d28a": "checkVestingWithFrozen(address)", +"6ba7e31c": "PriceSet(string,uint64,uint8)", +"6ba7ffd5": "requestCnt()", +"6ba8d421": "transferHackoinTokenOwnership(address)", +"6ba951c4": "EtherModifierTigro()", +"6ba9a40b": "withDrawBalance(uint256)", +"6ba9fd38": "openMinting()", +"6baa0f8e": "createSystemAuction(uint256)", +"6baa2ff7": "preSale(address,uint256)", +"6baae8e5": "_prand(uint256)", +"6bacc0fa": "hasSaleEnded()", +"6bacdc87": "InterestFreeLending(address,address,uint256,uint256)", +"6bacfe43": "getCCH_edit_16()", +"6bad77e1": "getNumProducts()", +"6bad8ed8": "freezingPercentage()", +"6bae05cf": "preRegister(address)", +"6bae116f": "getBonusMultipierInPercents(uint256)", +"6bb0ae10": "print(uint256)", +"6bb15940": "getCurrentSaleRate()", +"6bb1605b": "filehash()", +"6bb164c9": "isCantonEmployee(address)", +"6bb20f9b": "searchWhitelist(address,address)", +"6bb27584": "capRound1()", +"6bb2c12f": "createRequest(address[4],address,uint256[12],uint256,bytes)", +"6bb3130e": "disbursementWei()", +"6bb35840": "PowerGiggs()", +"6bb3c065": "round4Sold()", +"6bb4cf76": "createToken(string,string,uint8,address[],uint256[],uint256[])", +"6bb4d573": "evMinTokensReached(address,uint256,uint256)", +"6bb50f4c": "_openGamePlayNo(uint256)", +"6bb53c90": "ticket(uint256,uint256,uint256,uint256,uint256)", +"6bb56e8b": "crowdsaleEth()", +"6bb60475": "_insertSortMemory(uint32[11])", +"6bb6126e": "exec(address)", +"6bb6ea30": "createInterceptor()", +"6bb72c97": "numTokensInLottery()", +"6bb7b7a4": "rare()", +"6bb7f336": "updateUnsoldTokens()", +"6bb7f98e": "getHighestMilesOwnerAt(uint256)", +"6bb80acc": "_createCovfefe(string,string,uint16,address,uint256)", +"6bb80d51": "dividendPercentage()", +"6bb82e82": "addToWhitelist(address,uint256,bool)", +"6bb9b9ab": "getTodayDividendsByAddress(address)", +"6bba3f2f": "kappa()", +"6bba5c15": "changeParameters(uint256,uint8,uint256,uint256,uint256)", +"6bbadf09": "addPokemonDetails(string,uint256,uint256)", +"6bbae823": "LIMIT_STAR4()", +"6bbbc182": "addVerified(address[])", +"6bbbec85": "updateGameMeta(uint256,string,string)", +"6bbc5748": "FeeChanged(uint256)", +"6bbe0410": "NewTransaction(string,uint64,string,uint64,uint8)", +"6bbe24d4": "dataSourceGetQuarterResult(uint256)", +"6bbe6f7f": "buyCoinsPreview(uint256)", +"6bbea781": "getApproveValueFor(address)", +"6bbeb9de": "loginUser(address)", +"6bbeba8a": "setService(bytes,address)", +"6bbf54a4": "PCF()", +"6bbf592d": "bytesCallWithArray(bytes32[4])", +"6bc02730": "approveBreeding(address,uint256)", +"6bc0b3ba": "jackpotAddress()", +"6bc0f7fb": "isProxyLegit(address,address)", +"6bc138f6": "getNumberOfIds()", +"6bc1f1e4": "updatePriceAndInventories(uint256,uint256,uint256,uint256,uint256,uint16)", +"6bc21808": "CategoryAuction(address)", +"6bc2805d": "cancelAllEnter()", +"6bc31311": "EFFCoin(address)", +"6bc32c7b": "get_train_data_length()", +"6bc344bc": "payforflag(string)", +"6bc388b2": "canFreeze(address)", +"6bc3b437": "newService(string,string)", +"6bc3e0f0": "verifySecondHalf(uint256[4],uint256[4],uint256[4])", +"6bc3e4a8": "claimMultiple(address,uint256)", +"6bc46fb2": "totalHatcheryShrimp()", +"6bc5063c": "VestedTokensReleased(address,uint256)", +"6bc507b1": "getBlackflag(uint256,address)", +"6bc59f13": "transferFromChangeAllowanceTest(address)", +"6bc5b964": "getMemberWhisper(address)", +"6bc5c0cd": "releaseBonus()", +"6bc6147e": "unlockMainSaleToken()", +"6bc64e0f": "preSaleEnd()", +"6bc65778": "getAllProductList()", +"6bc789cd": "getONG_AUDIT(bytes32)", +"6bc85107": "isMemberInDescendant(address,bytes32)", +"6bc8a260": "getUserWinInTournament(uint256)", +"6bc99824": "VoltToken()", +"6bc9b0d7": "getPromiseIds(uint256,uint256,address,bool)", +"6bca81d4": "revealBid(bytes32,address,uint256,address,address,bytes32,uint256,uint256)", +"6bcaaed9": "PetmancoinToken()", +"6bcab76c": "setDApp(address)", +"6bcc035a": "getStatusAndOutcome()", +"6bcc28a9": "kittensRemainingToDrop()", +"6bcc311c": "tokensForBonus()", +"6bcc7241": "getPriceWei(uint256)", +"6bce23be": "setupTokenRate(uint256)", +"6bce6569": "reservedPercentTotal()", +"6bce8a96": "whitelistedAddressCount()", +"6bceead7": "setSquareWins(uint256,uint256,uint256)", +"6bd0021c": "bonusPhase()", +"6bd31a56": "hardCapLowUsd()", +"6bd37274": "Pixiu_Beta()", +"6bd3a1c3": "PresiamDrop()", +"6bd3d406": "totalPresale()", +"6bd46bd2": "setTokenBurnFeeReceiver(address,address,address,address)", +"6bd484c4": "oracleCallbackGasLimit()", +"6bd4dfce": "setStarterClass(uint256,uint32)", +"6bd5084a": "number_of_claims()", +"6bd50cef": "getConfiguration()", +"6bd58db5": "Total_Patient(uint256)", +"6bd5e26a": "lockTo(address,string)", +"6bd61a66": "nonHighestBidderRefund()", +"6bd6775f": "Presale(address,address,address,address,uint256,uint256)", +"6bd68a8f": "referralAmount()", +"6bd70a1f": "MIN_IVESTMENT()", +"6bd7e7dd": "CatBought(uint256,uint256,address,address)", +"6bd7eeeb": "maximumTokensForFirst()", +"6bd87c86": "Try2222()", +"6bd8fd12": "currentMinBid()", +"6bd92f7c": "activateAllowanceRecord(address,address)", +"6bd9b4da": "setMinETHin(uint256)", +"6bda3422": "Token(uint256,string,string)", +"6bdaa520": "forciblyRequest_callback()", +"6bdbc918": "BaseTransactionService(address,address)", +"6bdbf8e6": "concat()", +"6bdc06f5": "cancelRegistration(address)", +"6bdc1d2a": "GoldRex()", +"6bdc62b9": "composeJingle(string,uint256[5])", +"6bdc9546": "setCommunicationUri(bytes32)", +"6bdcdb2d": "getAutomatedReportDueTimestamp()", +"6bdcdeaa": "setMagicStore(address,address)", +"6bdd44aa": "createCard(string,uint256)", +"6bde2e7f": "_setBodyColorValue3(uint256)", +"6bdea7eb": "AddBonus(uint256)", +"6bdebcc9": "destory()", +"6bdee200": "enableTicker()", +"6bdee235": "Zeroexchange()", +"6bdfd723": "getNewEnglandBets(address)", +"6be00229": "exitAddress()", +"6be03bd2": "configTimeInc()", +"6be050d2": "FibokenUsed(uint8,address,uint256)", +"6be0c670": "chipSize()", +"6be13c92": "coldWallet()", +"6be202cf": "addSomeDETsTo(address,uint256)", +"6be24a47": "create(address,address,address,address,address,address,address,string,string,string)", +"6be2f28e": "totalAmountOfWeiCollected()", +"6be32e73": "tokenCallback(address,uint256,bytes)", +"6be343cc": "setFoundAcc(address)", +"6be39bda": "getTerms(bytes32)", +"6be4097c": "currentLotteryId()", +"6be422b2": "determinReferrer(address)", +"6be47418": "latchFciUserController(uint256,address)", +"6be47618": "deleteContract(uint8[],bytes32[],bytes32[])", +"6be4cf1f": "buyTokensFor(address)", +"6be4d9b0": "changeResolverAllowances(address[],uint256[])", +"6be505f5": "selectWinner(bytes32)", +"6be598b4": "SIGTToken()", +"6be5f4a6": "checkVictoryByScore(uint256)", +"6be60f8b": "underwrite(uint256)", +"6be67db3": "contractNameUpdate(string,bool)", +"6be6fa14": "getTransferFromValueValue()", +"6be7eeba": "Vtoken(uint256,string,uint8,string)", +"6be80de7": "investorIDs(address)", +"6be82168": "NeycoinToken()", +"6be86f21": "bonussale_TokesSold()", +"6be9564a": "ListingBought(bytes5,uint256,uint256,address)", +"6be99794": "getTransferToValue()", +"6be9a8df": "GetGuestQueueNumber()", +"6be9f7a0": "emitDeposited(address,uint256,address)", +"6bea0b79": "getAccountData(address,string)", +"6bea8215": "createGenerator(uint256,string,uint256,uint256,uint256)", +"6bea989d": "AUTH_FREEZEACCOUNT()", +"6bea9d81": "BLOCKPIX_Coin()", +"6beace8f": "AllocateFounderTokens(address,uint256)", +"6beadfc7": "approveandcall(address,uint256)", +"6beb509d": "updateCanRefund(bool)", +"6bec32da": "mintToken(address,address,uint256)", +"6bec454a": "buyCity(uint256)", +"6bec51cc": "generate(address,address,uint256)", +"6bece548": "preSaleBonus1Time()", +"6bed09be": "buyTokensUpdateState()", +"6bed6de5": "sendObjectWithApproval(uint256,address)", +"6bedb845": "MultiSig()", +"6bee2cc3": "registerLottery(uint256)", +"6bee5131": "FW(uint256,string,uint8,string)", +"6bee73db": "testAllowance()", +"6bee76ea": "withdrawBond(address,uint256,uint256)", +"6bee9cfa": "offsetFeeRate()", +"6bef2a94": "earlyPurchaseTokenAmount()", +"6bef90f8": "VUP_PER_ETH_BASE_RATE()", +"6befa297": "WCT1(address)", +"6bf006c8": "capReached(uint256)", +"6bf06fde": "transferToNewContract(address,uint8,bytes32,bytes32,bool)", +"6bf0873a": "birth(uint256,uint64[])", +"6bf0a3bf": "LIQUID_ALLOCATION_PPM()", +"6bf0c7fd": "getBracket(address)", +"6bf0f4a1": "roll(uint8)", +"6bf13959": "endAtCheck(uint256)", +"6bf20a77": "unfrozenATAccount(address,address)", +"6bf2606a": "PATCH_VERSION()", +"6bf30259": "checkIncentivisingBalance()", +"6bf32504": "markAsFailed(string)", +"6bf341e7": "_fundowner()", +"6bf4223b": "getRoundEnd(uint256)", +"6bf42646": "holdTokenInvestorsCount()", +"6bf42ea5": "TokensBought(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6bf4398d": "saniwallet()", +"6bf51a18": "stepLockCheck()", +"6bf52ffa": "Vote()", +"6bf5595d": "CrowdSale(uint256,uint256,uint256,address)", +"6bf6dd6f": "associate(bytes32,bytes32[],address[])", +"6bf807fc": "unlockTimes(address)", +"6bf82d74": "ethFundMain()", +"6bf84e51": "BECEXTEAMTOKENS()", +"6bf8b92d": "changeSeed(uint32)", +"6bf8bfab": "DutchAuction(address,uint256,uint256)", +"6bf8f85a": "forceFinish()", +"6bf91c63": "configOf(uint64)", +"6bf99bbf": "ICOResumed(uint256,uint256,uint256,uint256,uint256)", +"6bf9b3e7": "approveWithdraw(address,address,uint256)", +"6bf9b731": "claimFor(address,address,address)", +"6bf9e633": "winnerIsA()", +"6bfa379e": "readyTokens(address)", +"6bfa5edc": "operatingOfficerAddress()", +"6bfaa903": "increaseOwnershipTokenCount(address)", +"6bfae928": "calcReserve(uint256,uint256,uint256)", +"6bfb0d01": "itemCount()", +"6bfbbdf5": "DutchAuctionToCraft(address,address,address)", +"6bfbc9f7": "HongToken(uint256,string,uint8,string)", +"6bfbf5e6": "levelChanger()", +"6bfc8bb5": "setIPFSHash(bytes32,string)", +"6bfc9561": "sellStake()", +"6bfd9716": "SaleTracker(bool)", +"6bfdb7eb": "getBeneficiary(address,address)", +"6bfdd3dd": "_sanMint(uint256,address,string,string)", +"6bfe6bc0": "setEthPricies(uint8)", +"6bfee863": "CipherToken(uint256,string,string)", +"6bff1901": "coreTeamSupply()", +"6bff6575": "DaysToNextDestroy()", +"6c00161a": "distributeWithMilestone(address,uint256,uint8)", +"6c00bb44": "AuctionSuccessful(address,uint256,uint256,address)", +"6c012923": "feeForSplitterCreation()", +"6c021968": "RefundTransfer(uint256,uint256,uint256,address)", +"6c026f59": "ii()", +"6c02a931": "tokenName()", +"6c0360eb": "baseURI()", +"6c03cd49": "getInviteRate()", +"6c04066f": "BlockLockSet(uint256)", +"6c042689": "endStage1()", +"6c043773": "sendPacket(address,bytes)", +"6c047c36": "evaluateProposalMetricStart(uint256)", +"6c049b89": "toggleCrossForking()", +"6c04c1c9": "LuckyEthereumLotteryToken()", +"6c050eae": "look()", +"6c052cd8": "getGroupMembers(bytes32)", +"6c054113": "setPhaseSale(uint256,uint256,uint256)", +"6c054ad0": "createContractor(address,address,bool,address,string,string,bool)", +"6c055ce2": "withdrawToPartner(address,uint256)", +"6c060a7a": "_batchPopularitySetting(uint256[],uint8[])", +"6c062806": "addAdminAddress(address,address)", +"6c062cc7": "Forge()", +"6c064d63": "_setCompositionPrice(uint256,uint256)", +"6c08729e": "TransferToSAToE(address,uint256)", +"6c08faf7": "getCaseCount()", +"6c096192": "fetchCreatedOrdersForPayer(address)", +"6c0a1117": "doCancelAll()", +"6c0a1605": "EthTurnWCG(uint256)", +"6c0b1e8c": "VESTING_START_TIME()", +"6c0b66b9": "PGO_UNLOCKED_LIQUIDITY_CAP()", +"6c0c27e1": "acceptBet(uint256)", +"6c0d2c8b": "getHeroPower(uint256,uint256)", +"6c0daed8": "getRate(string)", +"6c0db60e": "CatexToken()", +"6c0e1ccd": "getAllCitizens()", +"6c0eb56f": "LOG_EmergencyWithdrawalProposed()", +"6c0ebc6c": "perform_withdrawal(address)", +"6c0f7ee7": "multiAddDSource(bytes32[],uint256[])", +"6c10dcdf": "ProvidenceCasinoToken()", +"6c118f46": "TimeWindowUpdated(uint256,uint256)", +"6c11bcd3": "sellTokens(uint256)", +"6c1247e5": "databaseContract()", +"6c131dbe": "multiMint(int256,uint256[])", +"6c1334bf": "SetDescript(string,string)", +"6c13b5f2": "totalReceive()", +"6c1475ad": "tryAdvance()", +"6c14bb42": "buyAutos(uint256)", +"6c14f2d1": "m_ETHPriceLastUpdateRequest()", +"6c150f42": "initLeftICOTokens()", +"6c15e8e6": "GlobalConstraintRegistrar(int256)", +"6c169818": "isFreezeAccount(address)", +"6c16c740": "Start9()", +"6c172095": "gameCenter()", +"6c17729b": "JoygoEOS(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"6c17b018": "airDrop(uint32,uint64)", +"6c182e99": "lastTokenIsTransferableDate(address)", +"6c188593": "setMinBetAmount(uint256)", +"6c189c46": "releaseAmisToken()", +"6c18cc1e": "firstSellHSShop(uint256,uint256,uint256)", +"6c194b59": "lastTransactionRec()", +"6c197ff5": "sell(address,uint256)", +"6c19e783": "setSigner(address)", +"6c1a5b8c": "TOKEN_TARGET()", +"6c1c6d93": "setVipAddress(address,address)", +"6c1c86f7": "PlanEX()", +"6c1d0157": "distributeMoney(address,address,uint256)", +"6c1d4fd9": "advisorsTokensThirdReleaseTime()", +"6c1e039a": "playerRoll(uint8,uint8,address)", +"6c1f05d2": "breakIdMaintenance(int128,address)", +"6c1f27fe": "icoBonus5()", +"6c1f2fb3": "ico3Sold()", +"6c1ff101": "Crowd()", +"6c204fd7": "certifyMany(bytes32[])", +"6c2066bf": "MAX_TOKENS_ADVISORS_PARTNERS()", +"6c20ceb4": "DeltaChainToken()", +"6c20d755": "getItemRafflePlayers(uint256)", +"6c20fcdd": "MerkleTreeRootAdded(uint8,bytes)", +"6c2187e7": "GameEnded(uint256,address,uint256,uint256,uint8,uint8)", +"6c224487": "DEHT()", +"6c226eef": "_processGameEnd()", +"6c231060": "buyCar(uint256)", +"6c237c1c": "admin_token_burn(uint256)", +"6c23c7b0": "canOperatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", +"6c2412ae": "GetChipInfo(uint32)", +"6c241bb1": "getCityData(uint256)", +"6c24a76f": "getAvailableBalance(address)", +"6c24c87d": "latestSenderOf(uint256)", +"6c24d0e6": "toTimestamp(uint256,uint256,uint256,uint256,uint256,uint256)", +"6c24e2db": "maskpot()", +"6c26493c": "MyTestToken1()", +"6c265dc3": "calcFeeE8(uint64,uint256,address)", +"6c26df09": "addFootballMatch(uint256)", +"6c27149f": "testInt(uint256)", +"6c27b211": "registerBalanceForReference(address,uint256)", +"6c286ff1": "removeCrowdsales(address,address)", +"6c28faee": "migration(address,uint256,bool)", +"6c295936": "changeOptional(uint40,uint64)", +"6c295e34": "Add_Doctor(uint256,uint256,string,string,string)", +"6c29d714": "totalMarketplaces()", +"6c2af4e5": "MithrilAxe()", +"6c2b04fd": "isGovernment(address)", +"6c2bcfdd": "MAXSALESCAP()", +"6c2c5a19": "addCarSigned(string,string,string,uint16,string,address,bytes32,bytes32,uint8)", +"6c2d5d26": "symbol(address,bytes32)", +"6c2ec9ef": "guess_tx(bytes32)", +"6c2f64fe": "removeContractAddress(address,address)", +"6c303e1b": "Bitescia()", +"6c3051c9": "setWonTeam(uint256)", +"6c30ba53": "setTitulaire_Compte_4(uint256)", +"6c30d170": "renounceIssuance()", +"6c30f765": "testing(uint256)", +"6c326a46": "prizeFundHWC()", +"6c32c0a6": "gap()", +"6c32e01c": "sendJackpot(address,uint256)", +"6c33e7eb": "setMockAddress(bytes4,address)", +"6c341889": "toUint(bytes,bytes,uint256)", +"6c343afc": "destTokens(address)", +"6c343ffe": "withdrawfunds()", +"6c349e57": "addrunmoney(address,uint256,uint256,uint256)", +"6c34c97a": "setFIRST_STEP_LIMIT(uint256)", +"6c376cc5": "maintenance()", +"6c3772fd": "totalpaidout()", +"6c3824ef": "removeTokens(address[])", +"6c38d4e4": "pauseMint(uint256)", +"6c3919fc": "getProviderCurrentRate(uint256)", +"6c39b7ee": "gamesPlayed()", +"6c3a208d": "VistaToken()", +"6c3a4b80": "canBePurchasedByETH(uint32)", +"6c3aaab7": "snailPot()", +"6c3aacf9": "getTokenToEthOrder(uint32)", +"6c3b6591": "right83(uint256)", +"6c3c221b": "setFunctionTwoPrice(uint256)", +"6c3e6a75": "forceBonds(address)", +"6c3e6e0c": "iconomiTokenSupply()", +"6c3e8e19": "_vestedAmount(address)", +"6c3ea721": "memberHasRight(address,string)", +"6c4019f4": "createContest(string,address,uint32,uint64,uint64,uint128,uint128,uint32,uint32,uint8,uint32[])", +"6c4040c5": "firstSaleSpenderTxDetails(uint256)", +"6c419326": "STC(address,uint256,uint256,uint256)", +"6c43a2ca": "increaseAllowance(address,address,uint256)", +"6c4470fb": "participants()", +"6c456d0f": "getERCContractAddress()", +"6c457528": "createUsername(string)", +"6c463635": "getDistValues(string)", +"6c464c3d": "recieveRelocation(address,uint256)", +"6c46a2c5": "addOwners(address[])", +"6c46ae22": "phasePublicSale3_To()", +"6c4820bb": "callModifiedWithdraw(uint256)", +"6c48a097": "amount_investments()", +"6c494843": "multiAccessChangeOwnerD(address,address,address)", +"6c4b3197": "getSecureFees()", +"6c4be791": "hasAirdrop(address)", +"6c4bf16b": "icoOwner()", +"6c4c174f": "hack(address)", +"6c4ceaff": "getSourceHash(uint256,uint256,uint256)", +"6c4d032e": "SOFTCAP_TIME()", +"6c4d0c00": "wasGoalReached()", +"6c4d4f21": "setVotingProxy(address)", +"6c4d7c59": "getBetProps(bytes32)", +"6c4db7cc": "sendFoundersBalance(address[],uint256[])", +"6c4dfffe": "BIKS(uint256,string,uint8,string)", +"6c4e5c86": "decreaseLockBalance(address,uint256)", +"6c4e838a": "wantNewTokens(uint256[])", +"6c4e86af": "dailyGrowth_ppm()", +"6c4eca27": "tokenTransfer()", +"6c4ef21e": "canUnstakePartial(address,uint256,uint256,bytes8,uint256,uint256,uint256,uint256)", +"6c4f5e51": "testingContracts2(string)", +"6c4f8c65": "DeviceIsActivated(address)", +"6c4fbaa4": "requestCore()", +"6c4fe255": "p_setMaxInvestment(uint256)", +"6c5077b1": "MintPaused(bool)", +"6c5091e3": "getERC721AddrPawn(uint256,address)", +"6c50bc2e": "getGeneralLength()", +"6c510377": "transferOutAllEthers()", +"6c51af67": "setPOOL_edit_17(string)", +"6c525b13": "unregisterSelf(address)", +"6c525d04": "endMigration()", +"6c526503": "AmountRaised()", +"6c52660d": "checkIfNameValid(string)", +"6c530ee3": "weiPerEth()", +"6c5376c9": "addPassword(string,string,string)", +"6c543c08": "_emitSkillCategoriesSet(address,uint256,uint256)", +"6c54d1c1": "KRYPSTRONG()", +"6c54df52": "getCurrentPrice(address,uint256)", +"6c5541b5": "changeSpender(address)", +"6c556859": "createGame(string,string,uint256,uint256,string,string,string,string)", +"6c55e385": "minimalFreeze()", +"6c5649d8": "setCommunityBallotCentsPrice(uint256)", +"6c56a3f1": "startRelease()", +"6c56bf3e": "CreateARCD(address,uint256)", +"6c56bfc0": "InitiateGame()", +"6c572104": "TotalSantaCoinsGivenByNorthPole()", +"6c57c01f": "MAXIMUM_CONTRIBUTION()", +"6c57dbaa": "_max(uint256,uint8,uint256)", +"6c57f5a9": "isDisabled()", +"6c587491": "playGame(address,uint256)", +"6c595451": "addApp(string,address,uint256)", +"6c597e41": "getCreditBitAddress()", +"6c59fb29": "allocateToken()", +"6c5a7d1e": "setDisabled(bool)", +"6c5aad6e": "fetchOrderByIdWithMerchantByAdmin(string,address)", +"6c5aaf50": "getDelegateDetails(address)", +"6c5af719": "getHoldEarnings(address)", +"6c5b685f": "icoPart()", +"6c5bde2a": "CoInsureBlockToken()", +"6c5c671f": "cancelIntl()", +"6c5ca1fa": "exchangeRateRoundOne()", +"6c5ccfe8": "distributeFundsInEscrow(address,address,uint256,address)", +"6c5d2787": "setTymTokensPercent(uint256)", +"6c5d6156": "burn(address[])", +"6c5dc78b": "setPublicSaleFinishDate(uint256)", +"6c5dee17": "getFileAt(uint256)", +"6c5e9ac1": "cmpEq(uint256,uint256,bool)", +"6c5e9e18": "_phase1Supply()", +"6c5f71c7": "numberOfPingsReceived()", +"6c5f8394": "DeneumToken()", +"6c609906": "getTotalTokensAgainstAddress(address)", +"6c6101fd": "ContractManagementUpdate(string,address,address,bool)", +"6c610f53": "getMinUnitPrice(uint8)", +"6c617048": "reinvestFor(address)", +"6c61d60f": "directTransfer(address,uint256)", +"6c626ec6": "removeWinner(address,address,address)", +"6c6288e4": "Thechampcoin()", +"6c6295b8": "setValidRateDurationInBlocks(uint256)", +"6c64a678": "unfreezeToken()", +"6c658a2c": "UpdateICOPhase(address,uint256,uint256)", +"6c65c455": "swapETHMKR(uint256,uint256)", +"6c65fd6a": "isFreezer(address)", +"6c675ae6": "tokens_buy()", +"6c677d82": "SpentTokens(address,address,uint256)", +"6c68b5d5": "TicketOwner(uint256,uint256)", +"6c68c837": "verifyBalanceProof(address,uint32,uint192,bytes)", +"6c690142": "redeemAllowedInternal(address,address,uint256)", +"6c698882": "getActualNum(uint256)", +"6c699905": "revealWinner()", +"6c69ab24": "multitokensCount()", +"6c6b23d2": "updateBalances(address,address)", +"6c6b298a": "getMigrateInBonusIfInForkWindowValue()", +"6c6b9870": "updAirDropTokenEnabled(bool)", +"6c6c21af": "CappedCrowdsale(uint256,uint256,uint256)", +"6c6c39fb": "votersLength()", +"6c6c7e05": "amountLocked()", +"6c6ce21a": "setInvoice(bytes32,uint256,bool,string,string,string,string)", +"6c6d2653": "CrowdsaleChanged(address,address)", +"6c6e5108": "StoriqaCash()", +"6c6eb9d1": "base(uint256)", +"6c6f1d93": "getContractCreationValue()", +"6c6f31f2": "allow(address,uint256)", +"6c6f360e": "userRegister()", +"6c6fbd70": "EnergiToken()", +"6c7018cf": "single_card()", +"6c706093": "logUniverseCreatedCalled()", +"6c70abda": "use(uint8,uint8,uint8,uint8[176])", +"6c70ad0d": "PublicMineCallsCount()", +"6c7113e4": "getFundManager()", +"6c712471": "testControlRetractLatestRevisionEnforceRevisions()", +"6c71b1aa": "setGasReq(uint256)", +"6c71d01d": "ratings(bytes32)", +"6c720446": "isVotingPrepare()", +"6c7272ce": "registerVendor(address,address)", +"6c73d230": "logResult(string)", +"6c741950": "setTTL(uint256)", +"6c749c26": "EXA()", +"6c74e341": "setFoundingTeam(uint256[],address[])", +"6c751622": "MacQueenToken()", +"6c7521cb": "updateReputationScoreInBulk(address[],uint256[])", +"6c767f20": "playerOneReveal(bytes32,bytes32)", +"6c768200": "burnByOwner(address)", +"6c76b8f4": "_changeReward(uint256)", +"6c779d57": "levelSplits(uint256)", +"6c77f989": "joinLottery()", +"6c780868": "getBurnLine()", +"6c784995": "getBeneficiaryMarket()", +"6c786b65": "bonusAccountCount()", +"6c787229": "availableOwnerWithdraw()", +"6c788a0d": "bookingFee()", +"6c789092": "Resource(bytes32,bytes32,bytes32,address)", +"6c78cb81": "ETCToken(address)", +"6c78da22": "getPrefixPrice(string)", +"6c79e379": "setGallerySevenPrice(uint256)", +"6c7afaba": "regSpots(uint16,uint16,bytes32)", +"6c7bc902": "tgrCurrentPartInvestor()", +"6c7c7c73": "bePure(uint256,uint256)", +"6c7c909f": "FreshWaterFlow()", +"6c7ca99f": "RequestBankrollPayment(address,uint256,uint256)", +"6c7cc6d8": "sell(uint256,address,bool)", +"6c7d4c4c": "unwhitelistAddress(address,address)", +"6c7dde15": "validPayBuff()", +"6c7de422": "investmoretokens()", +"6c7e0236": "isNotaryVeredictValid(address,address,address,bool,bool,bytes)", +"6c7e7082": "overflowAmount()", +"6c7f1542": "balanceOf(bytes32)", +"6c7f3f17": "totalBuys()", +"6c811247": "showPlayerSafeByAddress(address,uint256)", +"6c814509": "setAdAccount(address)", +"6c81fd6d": "AddModerator(address)", +"6c82337e": "payJackpot4()", +"6c825035": "withdrawLRC()", +"6c830f4b": "getCompletedTasks()", +"6c83444d": "FLOQI()", +"6c8381f8": "candidate()", +"6c8429fd": "jpMinBet()", +"6c843605": "BrownieCoin()", +"6c84a4bf": "tokenContributionCap()", +"6c84ae04": "setFirstYearAllowancePercentage(uint8)", +"6c85acec": "RNCTokenERC20(uint256,string,string)", +"6c85c727": "removeBankroll(uint256,string)", +"6c85cf67": "canTransfer(address,address)", +"6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"6c86ac5a": "getPublicData(uint256)", +"6c8716d8": "etherLowLimit()", +"6c876e5d": "s2(bytes1)", +"6c8830c5": "_maxtotalSupply()", +"6c8a59f2": "addresses6(uint256)", +"6c8ae38c": "r()", +"6c8b052a": "numStakers()", +"6c8b37eb": "MTRCToken(address,string,string,uint256,uint256)", +"6c8b4e60": "communityLock()", +"6c8d0b1e": "getSubscriberStatus()", +"6c8d0bcf": "getUserDAOsId(address,uint256)", +"6c8d65dc": "phepsToken()", +"6c8dea3b": "claim_ENS_name()", +"6c8e44c3": "ProductionUnitToken(address,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"6c8e53e0": "PreSale()", +"6c8f093d": "PayForServiceCHLEvent(address,uint256)", +"6c8f455c": "checkMembership(bytes32,uint256,bytes32,bytes)", +"6c90c3df": "setCanClaim(bool,bool)", +"6c90fe09": "CcoindDigital()", +"6c912080": "minListingSeconds()", +"6c922038": "CMAPToken()", +"6c9230db": "getCurrentTimestamp()", +"6c94d0e4": "INBETToken()", +"6c953719": "CCASH(uint256,string,string)", +"6c958f74": "tokensOfferedOf()", +"6c963fc7": "PoWAdvCoinToken()", +"6c965a81": "claim(address,bytes32,string,bool,uint256,bytes32,uint256,bytes)", +"6c973248": "getVoteCount(uint256,uint256,uint256)", +"6c9740c1": "transferOwnership(address,uint8)", +"6c9784b1": "_getTokenRaised(uint256)", +"6c9789b0": "finalize(bool)", +"6c97a812": "UTExchangeRate()", +"6c97b731": "TimeEndChanged(string,uint256)", +"6c97c237": "firstSellSaddleShop(uint256,uint256,uint256)", +"6c981488": "paymentPeriods()", +"6c996bbd": "disputeOpened(address)", +"6c99b0da": "setFWDaddrETH(address)", +"6c9a1e2a": "setPOOL_edit_12(string)", +"6c9a5c61": "resolveExpiredBets(uint256)", +"6c9c1d41": "checkServiceFee(address)", +"6c9c2faf": "getSupply()", +"6c9c5944": "freeze(address,uint256,uint256,uint256)", +"6c9c97d8": "refundByToken(uint256)", +"6c9cb82f": "freeCash()", +"6c9d99da": "teamTokensWallet()", +"6c9e27d6": "ALLOC_WINGS()", +"6c9e89b6": "addVesting(address[],uint256[],uint256[])", +"6c9eafe7": "stillAllowed()", +"6c9f65c5": "getBidInfo(uint32)", +"6c9fa59e": "shareToken()", +"6c9fca89": "updateAppInstance(bytes32)", +"6ca0101e": "unopened_bid()", +"6ca06072": "getAttributeAdminAddr(address,bytes32)", +"6ca0a099": "getInitialBlockHeight(uint256)", +"6ca0f321": "setValue1(uint256)", +"6ca100fb": "firstWeekMainICOBonusEstimate()", +"6ca13df1": "decreaseOwnershipTokenCount(address,address)", +"6ca1f933": "setTest(uint256)", +"6ca32280": "percentageBuyBackFund()", +"6ca34ea2": "balances_(address)", +"6ca35ae4": "addDoctor(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"6ca3b5f6": "set_maxgasprice(uint256)", +"6ca3daf2": "_vouchersDistributed(uint16)", +"6ca3fc3b": "distributePrizes(uint256)", +"6ca562d6": "switchCompatible223ex(bool)", +"6ca596fa": "isPreICOClosed()", +"6ca5b5b0": "r1()", +"6ca5bdf2": "testIntDynArray(int256[])", +"6ca621bd": "setEmbassy(address)", +"6ca78a1c": "anyRequestAvailable()", +"6ca78a1e": "setBorrowerReturnEthPerFiatRate(uint256)", +"6ca7b99b": "getDirection(uint256,uint256)", +"6ca7c216": "gas()", +"6caa2bda": "OxyToken()", +"6caa736b": "fundDeposit()", +"6caabc6f": "addCompany(string,address,uint256)", +"6caca63a": "WhiteTigerToken()", +"6cad3fb0": "updateFeePercentage(uint256)", +"6cadd040": "EtherAuction()", +"6caddb04": "orders(uint256,address)", +"6cae8f67": "setSellableToken(address)", +"6caed305": "changeBonus(uint256,uint256)", +"6caf25ce": "price1()", +"6caf3673": "getPlayerSpaceshipBattleStakeById(uint256)", +"6cb04993": "forceNeuroChainAddress(address,string)", +"6cb0e9f0": "TXToken(address)", +"6cb136ba": "isActive(uint16)", +"6cb1630f": "withdrowTokens()", +"6cb24199": "withdraw(bytes32,uint256,address,uint256,address)", +"6cb30fee": "nettingContractsByAddress(address)", +"6cb31171": "_currentHalfYear()", +"6cb39448": "getMarketerKey()", +"6cb3c94e": "Filler()", +"6cb3d30a": "triggerTryAuth()", +"6cb3e8ef": "getApprovers()", +"6cb45694": "LogDisbursement(address,uint256)", +"6cb520c6": "_play(string,uint256)", +"6cb5291e": "ICO_PRICE1()", +"6cb5714c": "_sendByTranche(bytes32,address,address,address,uint256,bytes,bytes)", +"6cb5d070": "getCoinsSinceLastHatch(address)", +"6cb69c2c": "setDevTokensWallet(address)", +"6cb69f42": "getSystemInfo()", +"6cb6ea82": "CBITokenCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"6cb7223c": "maxPurchaseOnce()", +"6cb76408": "returned()", +"6cb78983": "purchaseMIT(address)", +"6cb90a2c": "pre_ico()", +"6cb942ab": "GameItemNew()", +"6cba45b8": "setDayFirst()", +"6cbad471": "Rappo()", +"6cbae51b": "firstPreSaleDate2()", +"6cbaecbd": "normalRoomMin()", +"6cbb1afa": "setTokenBag(address)", +"6cbb9d19": "releaseEscrow(bytes20,address)", +"6cbc2ded": "endGame()", +"6cbc9ca0": "ADDR_OWNER()", +"6cbceeec": "theAddress()", +"6cbdb7d0": "takers(uint256)", +"6cbec01c": "Steel()", +"6cbef5a7": "sumVote()", +"6cbf3c8c": "ICO_POOL()", +"6cbf9c5e": "commitVote(uint256,bytes32,uint256,uint256)", +"6cc03315": "getPaymentLogN()", +"6cc09081": "getActualPrice()", +"6cc23437": "setIsContainerForFeeWindow(bool)", +"6cc25db7": "ticket()", +"6cc2c668": "_presaleEndTimestamp()", +"6cc301e3": "permitted(address)", +"6cc341f1": "getIndexOrder1(uint256)", +"6cc37048": "EFFToken(address)", +"6cc48d81": "_emitHeartBeat(bytes32,int256,int256)", +"6cc5ab24": "digithothToken()", +"6cc5f3ad": "getGames(uint256[])", +"6cc5fdaa": "setBytes32(bytes,bytes)", +"6cc61d86": "setSingleWithdrawMin(uint256)", +"6cc67aa5": "resetExplicitState(uint32,int64[2],int256,uint64,int8)", +"6cc6971b": "setNewStartDate(uint256)", +"6cc6cde1": "arbitrator()", +"6cc70ee1": "GovernanceChangeMinApproval(uint8)", +"6cc762d8": "lastWeiPricePerCWC()", +"6cc7d828": "investBalanceGot()", +"6cc919c8": "updateConfig(address)", +"6cc95f8d": "ALAX()", +"6cca5065": "QripplexToken()", +"6cca60ba": "gripWallet()", +"6cca7023": "DoubleSend(address,address,uint256)", +"6cca940a": "RusgasCrowdsale()", +"6ccab1f3": "wwasCoin()", +"6ccb5d02": "getShareholder(uint256)", +"6ccbb0ab": "withdrawBalances()", +"6ccbdbf9": "getHodlAmount(uint256)", +"6ccc3bdd": "whitelistBonusPercentage()", +"6ccce7a8": "getCapOfWei()", +"6ccd563d": "queueAuditRequest(uint256,uint256)", +"6ccd5cbe": "getClassInfo(uint32)", +"6ccd993b": "getDestroySharesFxpValueValue()", +"6ccde640": "getGoodPreset(bytes32)", +"6cce15d8": "ICOFails()", +"6ccf93d3": "HeyueToken(address,uint256)", +"6cd02297": "processOfflinePurchase(address,uint256)", +"6cd05e41": "takeAllTheMoney(address)", +"6cd0f102": "setHouseEdge(uint256)", +"6cd186ce": "setUncleSafeNr(uint256)", +"6cd1b26c": "setQueue(uint256)", +"6cd22eaf": "updateAuthority(address,bool)", +"6cd2ad56": "distributeTo(address)", +"6cd2b458": "splitsTotal(uint256,uint256)", +"6cd2f731": "setTimePerPeriod(uint256[5])", +"6cd38ea0": "NebulasToken(address,uint256)", +"6cd3d326": "getTotalChild(address,address)", +"6cd40993": "setNeironixProfitAddress(address)", +"6cd44d55": "pushOrderOfVendor(address,uint256,bool)", +"6cd49925": "currentLocation()", +"6cd51833": "initiateWithdraw(uint176,uint64)", +"6cd522f2": "getContributionRNTB(address)", +"6cd56641": "EYrickCoin()", +"6cd56878": "setDeveloperWallet(address)", +"6cd5c39b": "deployContract()", +"6cd6043a": "emitAndStore()", +"6cd61739": "getbuyprice()", +"6cd69864": "Total_Companies()", +"6cd7d86e": "setClaimRepository(address)", +"6cd8015d": "setVestingWithDefaultSchedule(address,uint256)", +"6cd8c204": "BuyEgg()", +"6cd8f433": "canExport()", +"6cd8f772": "fights()", +"6cd8fa85": "burnTrusted(address,uint256)", +"6cd902d0": "Casa()", +"6cd9786a": "setCapETH(uint256)", +"6cd98f30": "getResponseQueryType(uint256)", +"6cd9db29": "sub_matricola(string,uint256)", +"6cdacfc4": "startStage(uint256,uint256,uint256)", +"6cdae459": "YuanBaoCoin()", +"6cdb3389": "getEntriesCountForCompetition(uint256)", +"6cdb711e": "ProposalAdded(uint256,address,uint256,uint256,address,uint256,uint256)", +"6cdc644d": "CMTC()", +"6cdcb1ca": "DEVELOPER_supply()", +"6cde3c75": "frozenAccountICO()", +"6cde6380": "setHash(uint256,bytes32)", +"6cde71ee": "enteredTotalAmount()", +"6cde95ee": "getAccountAllowance(address)", +"6cdf4c90": "ownerSetMinBet(uint256)", +"6cdf7cdf": "FRO()", +"6cdfcc6e": "getTokenList(address,uint8,uint256,uint256)", +"6cdffb3c": "fetchJugadas()", +"6ce066af": "Give(bytes32)", +"6ce079fe": "getNumGames()", +"6ce07efa": "AddSale(uint256,string,string,string,uint256)", +"6ce0a6a4": "SafeBoxCoin()", +"6ce12737": "OX_TOKEN()", +"6ce1417e": "Fund()", +"6ce15a54": "genericAction(address,bytes32[])", +"6ce27c7b": "DECIMAL_INDEX()", +"6ce37387": "KindAdsToken()", +"6ce3fc06": "sendPrize()", +"6ce41ab4": "Garuda()", +"6ce4499c": "adjustCoins(address,int32,string)", +"6ce4a9a8": "RAMTOKEN()", +"6ce5b3cf": "releaseHeldCoins()", +"6ce62c61": "changeAllowances(address[],uint256[])", +"6ce6833d": "test_updateKey_increaseNoHint()", +"6ce768dd": "GetMainInvestor()", +"6ce76ae3": "openOldCrates()", +"6ce7e739": "getBonusRate(uint256,uint256)", +"6ce912ab": "LongevityToken()", +"6cea50a1": "crowdSaleStarted()", +"6ceac6e1": "TankDeposit()", +"6ceba55e": "change_fee(uint256)", +"6cebad98": "newUser()", +"6cebd885": "waraCoinTransfer(address,uint256)", +"6cec0ceb": "setDenominator(uint256)", +"6cec7f92": "canManage(uint32,int256,address)", +"6ceccc82": "changeICOAddress(address)", +"6cecdad9": "UpdateAttribute(uint256,address,bytes32,bytes32)", +"6cedc6ea": "tHasSubmitted(uint256,address)", +"6cee0d8b": "checkIfAllIQTDistributed()", +"6cee2d45": "STTR(uint256,string,uint8,string,address,address)", +"6ceec70d": "whitelistAdd()", +"6cef5ff4": "FundingAssetAddress()", +"6cf124c6": "toJackPotfromEveryTicket()", +"6cf1a452": "chgExchangeRate(uint256)", +"6cf1cb29": "setGen0SellerAddress(address)", +"6cf27311": "randomNumbers(address)", +"6cf32dde": "getMyGolds()", +"6cf339f8": "CardiumToken()", +"6cf35782": "m_funds()", +"6cf3b9e9": "checkBalance(uint256[])", +"6cf3c25e": "small()", +"6cf3d099": "dropEnd()", +"6cf43347": "returnString()", +"6cf49694": "tweakDailyDividends(uint256)", +"6cf4c88f": "removeApprover(address)", +"6cf69811": "trade(address,uint256,address,address,uint256,bool)", +"6cf6d675": "unbondingPeriod()", +"6cf70679": "removeFees(uint256)", +"6cf72694": "OAToken()", +"6cf75170": "cancelVote(address,uint256,uint256)", +"6cf761d4": "getMinConfirmationsByAddr(address)", +"6cf7cff6": "icoETHContributionLimit()", +"6cf7da53": "setMinerPrice(uint256)", +"6cf843ac": "LuckyToken()", +"6cf9bbf8": "setJackpotFactor(uint256)", +"6cf9cc58": "registerResource(bytes,uint256,bytes,string)", +"6cf9ea99": "Rhinex()", +"6cfab740": "RequiredBondRules(address)", +"6cfb0a4a": "test_oneValidEqBytes()", +"6cfb2c9c": "payoutToAddress(address[])", +"6cfb7101": "_emitMonthLimitChanged(bytes32,uint256,uint256)", +"6cfb782f": "TestWithdraw()", +"6cfc4512": "authorSignUp(address)", +"6cfc4ac5": "getGameEnd()", +"6cfc82ed": "trancheSize()", +"6cfdc242": "isSalesManager()", +"6cfe5947": "getCurrentICOPhaseBonus()", +"6cfedade": "refundTeamTokens()", +"6cff6f9d": "payoutOrder()", +"6cff8244": "controllerSucceeded()", +"6cffa0cd": "_transter(uint256)", +"6cffd817": "burnByAmount(uint256)", +"6cfff605": "releaseThreeHotHourTokens()", +"6d011a12": "scribes_hisory(uint256)", +"6d013618": "mint(address,uint256,uint256,string,string)", +"6d01d12b": "XeToken()", +"6d022003": "ALLOC_SALE_PRIVATE()", +"6d029f6a": "totalYUPIESAllocated()", +"6d02a595": "_setMintFeeAbs(uint256)", +"6d03d3ec": "HolderAdded(address,uint256,uint256,uint256)", +"6d03fa87": "getReferer(address)", +"6d04f50d": "mtronix()", +"6d0501f6": "mediator()", +"6d052b37": "getRequestByIndex(uint256)", +"6d052f56": "testBitsSetSuccess()", +"6d05c24d": "calcWidthraw(string,uint256)", +"6d05cef4": "getStageSupplyLimit()", +"6d05da7e": "tranchesCount()", +"6d061b69": "deathData_a3()", +"6d064875": "transferEducatedTokenOwnership(address)", +"6d064962": "getOwnerByShipId(uint256)", +"6d069c10": "_updateRaceWinner(uint256,uint256)", +"6d06bf0d": "celebOf(uint256)", +"6d06de2d": "haveAttributes(address,bytes32,address,bytes32)", +"6d076966": "VESTING_1_AMOUNT()", +"6d0797fc": "_isMatingPermitted(uint256,uint256)", +"6d07e3de": "sexToken()", +"6d07f295": "minEatable()", +"6d081d83": "zero_fee_transaction(address,address,uint256)", +"6d082bbb": "startSpreadingBlock()", +"6d0831f0": "BNNToken()", +"6d08bad2": "currencyToHash(string)", +"6d08e8f9": "initiateChallengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"6d09e2ec": "commitCurrency(address,uint256,uint256)", +"6d0a98cc": "blockResolveDispute(uint64,uint64,bytes)", +"6d0b5ee2": "TeamFundsTokens()", +"6d0ca12a": "tokensBack()", +"6d0cc895": "getVersions()", +"6d0def6c": "SimpleDividendToken()", +"6d0e5c03": "stampToken(uint256,uint256,uint256)", +"6d0ecb88": "SohaibCoin()", +"6d0f131a": "DrawEvent(uint256,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"6d0f157d": "setAllFreeze(uint256,uint256)", +"6d0f2a84": "changeDefendFee(uint256)", +"6d0f8806": "refundAdveriser(uint256)", +"6d102f71": "acceptOrder(bytes16)", +"6d106885": "unitUserBalanceLimit()", +"6d1150de": "endCurrentPhaseIn(uint256)", +"6d11cf72": "berrycoin()", +"6d11fe82": "_initAwardInfo()", +"6d121b91": "getMaxCap10X()", +"6d12301c": "getBetValue(bytes32,uint8)", +"6d12fb5b": "setSellable(uint32,bool)", +"6d1478e9": "_addToDebtRegister(address,uint256)", +"6d14b2a8": "JackpotAmount()", +"6d156add": "finalizePRETDE()", +"6d15a659": "Distribution(address,address,uint256,uint256)", +"6d15cecd": "getTokenRaised()", +"6d15dc5a": "BetPayout()", +"6d15f208": "reject(string,uint256,uint16,address,uint256)", +"6d160f31": "confirmReservedTokens(address,uint256)", +"6d161bc1": "setdot(address)", +"6d1669e1": "approveAndCall(address,address,uint256,bytes)", +"6d16f79c": "__transferWithReference(address,uint256,string)", +"6d16fa41": "transferControl(address)", +"6d171f0e": "changeRemainingSupply(uint256)", +"6d17af94": "ContributionMinted(address,uint256,uint256)", +"6d181a42": "FTV(address,address,address,address,address)", +"6d1821aa": "OrenCoin()", +"6d1884e0": "getEvent(uint256)", +"6d189422": "EtherFlipRaffleToken()", +"6d18c778": "PSIToken()", +"6d18dc63": "ATTR_TRADABLE()", +"6d1909fc": "transferIDCContractOwnership(address)", +"6d1917b5": "maxPurchaseNonWhiteListed()", +"6d19ce04": "STARTING_Dragon()", +"6d1a0d34": "ShowTime()", +"6d1af018": "getAmountRaised()", +"6d1b229d": "burnTokens(uint256)", +"6d1d71c5": "Note(address,string)", +"6d1da953": "createWithNonce(bytes32,bytes)", +"6d1e1f8d": "updateSale(uint256,uint256,uint256)", +"6d1e2194": "SALES_ALLOCATION_PPM()", +"6d1e8095": "transferGameOwnership(address)", +"6d1e839c": "changeMaxCap(uint256)", +"6d1ea3fa": "approvedTokens(address)", +"6d1eab7d": "getRegistryVersion()", +"6d1f00a6": "ThroneMaker(uint256)", +"6d1f451b": "multiSigWalletAddress()", +"6d201095": "PRICE_PRESALE_START()", +"6d214c66": "MBSibalCoin()", +"6d21f638": "SmartshareStandardToken(uint256,string,uint8,string)", +"6d224b7b": "weiPerABIO()", +"6d236703": "createMemoryArray(uint256)", +"6d2381b3": "addressAndBalance()", +"6d23bf0b": "ingresarFondos()", +"6d23c516": "s8(bytes1)", +"6d23cda3": "sub(uint16,uint16)", +"6d245bda": "lockUnlockGamblingPartyForBetting(uint256,bool)", +"6d2570fe": "Before(uint256,bytes32)", +"6d25924d": "setn(uint256,uint256,uint256)", +"6d25ba1d": "setTechBonus1(uint256,string)", +"6d2666b9": "lockInLastSixteenPrize()", +"6d275e9e": "distributeEbyte(address[],address,uint256,uint256,uint256)", +"6d277279": "getAuctionsCreated(address)", +"6d278b29": "setHoldMax(uint256)", +"6d27a326": "turnOnFurnace(uint16[5],uint128)", +"6d28e805": "getInsurance(bytes32,uint256)", +"6d290d34": "setAllocation(address,uint256,uint256,uint256,uint256)", +"6d295e24": "callDefaultAction()", +"6d2980f6": "TEAM_LOCK_DURATION_PART1()", +"6d2a7c8b": "createAuction(uint256,uint256,uint256,uint256,address,uint64)", +"6d2ab982": "presaleFemaleDiscount()", +"6d2bf99c": "updatePercentBase(uint256,uint256,uint256)", +"6d2c51a7": "countrySupply(uint256)", +"6d2cb794": "airaTransfer(address,address,uint256)", +"6d2d4e52": "lockSupplierAndLockPosition1(address,address)", +"6d2d525d": "FFUELCoinTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", +"6d2dd1a9": "getDividendsForOnePeriod(uint256,uint256,uint256,uint256)", +"6d2ff3d3": "Geniota(uint256,string,uint8,string)", +"6d301f38": "MIDO()", +"6d3036a7": "MAGNITUDE()", +"6d308c40": "changehiddenOwner(address)", +"6d30921c": "proceedDividends(uint256)", +"6d30d07f": "getMiniPoolEdit_6()", +"6d312683": "feeInCirculation()", +"6d32028d": "bigAward(address,uint256,uint256)", +"6d320b17": "minimumEntryThreshold()", +"6d32a4a6": "finishRoundD()", +"6d32dc4b": "startElection(uint256)", +"6d338bd0": "setCCH_edit_22(string)", +"6d339f02": "_oldConfig()", +"6d33b42b": "changeLimit(uint256)", +"6d33f5a6": "updateNoteContent(uint64,bytes)", +"6d34a775": "getDatas()", +"6d35b1dc": "getExtraDays()", +"6d35bf91": "seizeVerify(address,address,address,address,uint256)", +"6d361694": "getModel(uint256)", +"6d36ebf8": "addPlayer(address,bytes32)", +"6d37a9dc": "LCT()", +"6d38156f": "getCountOfIntegerTypes(uint8[])", +"6d399eb7": "MAX_AIRDROP_VOLUME()", +"6d3b5f18": "getUserByID(uint256)", +"6d3c7ec5": "setDefaultPrice(uint256)", +"6d3d0a8f": "disagree()", +"6d3de7ea": "beManagerInsurance()", +"6d3e141e": "functional(address,uint256)", +"6d3e1a74": "PiBetaToken()", +"6d3e4502": "DatToDtrcDenominator()", +"6d3f008a": "FinalizedTier(uint256,uint256)", +"6d3f1277": "flagAndFinalize(uint256)", +"6d4045a8": "EXOSO()", +"6d40ee41": "CloseDonation()", +"6d40f3b0": "PHASE_OPEN()", +"6d417064": "expirationBlock()", +"6d41a3fb": "firstAuctionsExtendedChunkDuration()", +"6d425249": "minerNum()", +"6d435421": "transferOwnership(address,address)", +"6d43b489": "freeTokens(address,address,uint256)", +"6d4419e5": "listTopics()", +"6d44a9cf": "KudosPresaleTokenLockup(address,address)", +"6d4546a2": "changeTsaLink(string)", +"6d46398b": "newChannel(bytes32,address,address,bytes,uint256,bytes,bytes)", +"6d467f04": "ContractTransfer(address,address,uint256,bytes)", +"6d46c6f5": "referrer1Percent()", +"6d4717fe": "noFeesList()", +"6d47ab72": "sellers(address)", +"6d47fb71": "changeICO(address)", +"6d47fc60": "Changepro()", +"6d489314": "terminateLastMilestone(bytes32,address)", +"6d48ae25": "best_submission_accuracy()", +"6d492f54": "sendFyle(address,address,string)", +"6d493bf9": "SOLARCHAINToken(string,string,uint8,uint256)", +"6d498093": "presaleFinalized()", +"6d49817b": "refundPayment(address)", +"6d4a37ef": "cancelEscrow(bytes16,address,address,uint256)", +"6d4b38a2": "infraIndexToOwner(uint256)", +"6d4bae72": "_register2(address,bytes32)", +"6d4be70f": "ethereumSHA3(bytes20,uint24,uint32)", +"6d4c80ea": "removeNamespaceMember(string,address)", +"6d4ce63c": "get()", +"6d4d907c": "maxNumVotesPerAccount()", +"6d4ee68f": "SendBobsCoin()", +"6d4fd0ad": "isNull(address[])", +"6d4fd338": "PPToken()", +"6d4fe435": "counter_in()", +"6d505b49": "randgenNewHand()", +"6d50a2b5": "deleteAllBackgroundImages()", +"6d50ef2a": "timelockedTokensDisbursed()", +"6d510a64": "ourTEAM()", +"6d510f6c": "updatePartners(address)", +"6d5210d9": "showprize(address)", +"6d522b19": "multiAccessChangeRequirementD(uint256,address)", +"6d52f9d5": "mapToNewRange(uint256,uint256)", +"6d53393b": "getInitializeCreatorValue()", +"6d538264": "setMigrateAddress(address)", +"6d53aa4e": "GetProd(address)", +"6d540318": "revokeOracle(address,uint256)", +"6d5433e6": "max(uint256,uint256)", +"6d54340a": "Blockbin()", +"6d544e6e": "setStackSize(uint256)", +"6d54ec91": "registerAndActivateDevice(bytes32,bytes32,bytes32)", +"6d568c43": "weiToCents(uint256)", +"6d56d9f4": "setAuction(uint256,uint256,uint256)", +"6d578781": "changeStageBlcok(uint256)", +"6d57b2b1": "tokenInitialDetails()", +"6d57dee4": "sendTokenAw(address,address,uint256)", +"6d57e2a9": "getAgonIdArray(address)", +"6d580320": "G2UFundDeposit()", +"6d580bcb": "FOUNDERS_CAP()", +"6d584266": "ALLOC_SALE_GENERAL_3()", +"6d5860d4": "revert(string)", +"6d58c88f": "changeDepositAddress(address)", +"6d599136": "personal_withdraw(uint256)", +"6d59c3be": "buyUFT(address)", +"6d5b0f6f": "transferCustodian(address,address)", +"6d5b9427": "onlyWithValidSignature(bytes)", +"6d5c1621": "LogInsert(address,uint256)", +"6d5cae52": "QiongB(uint256,string,uint8,string)", +"6d5d21a9": "setStubFund(address,address)", +"6d5d7612": "MAX_WITHDRAW_PCT_DAILY()", +"6d5da09a": "LockChain()", +"6d5e136d": "_getApproved(uint256)", +"6d5e3587": "needsEther(string)", +"6d5e53f6": "createInt256(bytes32,int256)", +"6d5e78f9": "depositorLimit()", +"6d5f3e15": "settleBet(address)", +"6d5f6639": "objectProposal(bytes32)", +"6d608402": "sendBPESOToken(address,uint256)", +"6d60bf39": "getPreEntranceFrom()", +"6d60e6b4": "trustAddress()", +"6d619daa": "storedValue()", +"6d624e86": "SideJobCoin()", +"6d62a4fe": "canTransfer(address,address,address,uint256)", +"6d63fa32": "getPixelNumber(bytes1,bytes1)", +"6d640637": "testBetId()", +"6d643308": "icoDeadLine()", +"6d64694f": "etherdelta()", +"6d64a472": "claimSalesAgent()", +"6d64abd6": "takeEther(address)", +"6d650b2d": "level_7_percent()", +"6d66264f": "specifyController(address)", +"6d6712d8": "hasPermission(address,address,bytes32)", +"6d6755a6": "gvpe_per_eos()", +"6d6908bd": "mintTokensBatch(uint256,address[])", +"6d69fcaf": "addSupportedToken(address)", +"6d6a01f6": "second_partner_address()", +"6d6a2859": "assetID()", +"6d6a4889": "nextReleaseTime()", +"6d6a6a4d": "decimalFactor()", +"6d6a761e": "setCouponToken(address)", +"6d6bc5f5": "identifierToCoordinate(uint256)", +"6d6c0ec4": "mintProxy(address,uint256)", +"6d6c2074": "totalTokensForSaleDuringICO3()", +"6d6caeb2": "poolCapUSD()", +"6d6d69b6": "allowedToSell()", +"6d6d70d9": "connectModule()", +"6d6dcbe7": "deleteResponse(uint256)", +"6d6e2710": "clearCrowdsaleOpenTimer()", +"6d6e8312": "addProviderAdmin(address)", +"6d6ead75": "reject(uint256,address,uint256,uint256,address)", +"6d6ebb01": "thawSomeTokens(address,uint256)", +"6d6f385c": "isSaleFinished()", +"6d6fa6b1": "FNKOSToken()", +"6d6fb665": "CUSTOM_ERC20_MINT_SERVICE_NAME()", +"6d701f0a": "Eos()", +"6d704159": "wdBefore()", +"6d705ebb": "register(address,uint256)", +"6d70f7ae": "isOperator(address)", +"6d717daf": "Albarit()", +"6d71be4c": "increaseReserve(uint256,uint256)", +"6d7221d5": "doubleClaimSegmentSlashAmount()", +"6d72da47": "addElection(address,uint256)", +"6d72dc38": "getSwapLifetimeLimits()", +"6d730453": "TokensTransferedToOwner(address,uint256)", +"6d736fac": "feeAccount2()", +"6d763a6e": "getLeaderboard()", +"6d771f77": "one_month()", +"6d773cd0": "balance_out()", +"6d77cad6": "isOperatorForPartition(bytes32,address,address)", +"6d77e144": "removeBlacklistItem(address)", +"6d786740": "billingPeriod()", +"6d788933": "_distribution(address[],uint256[])", +"6d78a434": "IntegrativeWalletToken(uint256,uint256,uint256,address)", +"6d78e48a": "candidateTillXPAAssets()", +"6d79207c": "SALE_DURATION()", +"6d796253": "configRoundKey()", +"6d7a0f89": "EmptiedToWallet(address)", +"6d7a2609": "setSpenderAddress(address)", +"6d7a37b6": "OCPresale(address,address,uint256)", +"6d7ab187": "AcceptsGMOON(address)", +"6d7b3706": "setfees(uint256,uint256,uint256,uint256)", +"6d7bc487": "RESERVED_TOKENS_FOR_FOUNDERS_AND_FOUNDATION()", +"6d7bd3fc": "BANCOR_FORMULA()", +"6d7cb00c": "CoinMarks(uint256,address)", +"6d7d083f": "handleFunds()", +"6d7da0b1": "MyContract()", +"6d7fa14e": "CQC(uint256,string,uint8,string)", +"6d7fd1bf": "getIpfs(uint256)", +"6d7fd8a3": "pauseRefund()", +"6d80244d": "createUnitOmni(uint32,address)", +"6d805b2d": "withdrawMana(uint256)", +"6d813e63": "owner_viewOnFlight()", +"6d81779b": "teamCap()", +"6d836cde": "updCouponBonusEnabled(bool)", +"6d8370e9": "upgradeTusdProxyImplTo(address)", +"6d842ad5": "NewBOP(address,address,uint256,uint256,string,string)", +"6d843c2f": "participatedInAirdrop(address)", +"6d84dbb0": "BeijingCoin()", +"6d853ab6": "isSubUser(address)", +"6d863fd7": "airDropSingleAmount(address[],uint256)", +"6d86ac59": "DUMPSACK()", +"6d871c44": "set_a(uint256)", +"6d8758c7": "editCuts(uint256[6])", +"6d877f91": "Bob()", +"6d87b65c": "setPropertySalePrice(uint16,uint256)", +"6d88885e": "schoolOrdering()", +"6d892f7e": "deauthorize(address,address)", +"6d893a5a": "deathData_a8()", +"6d8941cb": "smallBonusPercent()", +"6d8a3650": "dedex(address,address,address,uint256,uint256,uint256)", +"6d8a5f8f": "CAP_ICO()", +"6d8a74cb": "getRoom(uint256)", +"6d8a9f92": "setSavedEthBalance(address,uint256)", +"6d8ab124": "containsPosition(bytes32)", +"6d8b529a": "OwnerBase()", +"6d8c3912": "AicToken()", +"6d8ccf2a": "sellToEther(uint256)", +"6d8d151b": "determineBonus(uint256)", +"6d8d16b9": "StandardToken(string,string,uint8,uint256)", +"6d8f01d1": "CEOSignature()", +"6d8f4221": "masternode()", +"6d8f83cf": "_getBonusAmount(uint256)", +"6d90164e": "GetPrice()", +"6d916598": "stakingUnits(address)", +"6d91acba": "proposalText(uint256)", +"6d9218e5": "Notes(address,address)", +"6d927db0": "withdrawBalanceMaxSteps(uint256)", +"6d94425c": "_maxPeriodSalesLimit()", +"6d94dce1": "createAndBookCanvas(address)", +"6d952117": "maxBuyPrice()", +"6d9634b7": "releaseTokens(address[])", +"6d963a81": "buyp3d(uint256)", +"6d96a2aa": "delegateAddress()", +"6d96b537": "_computeIncentiveReward(uint256,uint256)", +"6d974ee2": "AcceptRealmOffer(uint256)", +"6d97537a": "TestRushCoin()", +"6d97786e": "sell(address,uint256,string)", +"6d97c665": "tokenBonusForSecond()", +"6d9814e1": "BToken()", +"6d98571a": "generalTokens()", +"6d9860d0": "makeFinality(uint256,address,address,bytes32,bytes32,uint256,uint256)", +"6d98c5e7": "AppleToken(uint256,string,string,bool)", +"6d98e9fc": "totalWei()", +"6d98ee4e": "getInitialState()", +"6d991cce": "openGroupNumber()", +"6d99aafd": "Collected_Ether()", +"6d99f652": "resetRaffle()", +"6d9aa034": "setNamePublicKeyAddress(address)", +"6d9af813": "updateprice(uint256,uint256)", +"6d9b06e8": "setProposalDeposit(uint256)", +"6d9b501a": "returnWalletTxCount()", +"6d9c2bda": "ADV_TEAM_LOCK_TIME()", +"6d9c8e86": "getCurrentSaddlePrice(uint256)", +"6d9cb37d": "govtAccount()", +"6d9cdbc6": "WALLET()", +"6d9cebb2": "setDiscount(uint8)", +"6d9d39b6": "isItOpen()", +"6d9d495f": "minMktTokens(address,uint256)", +"6d9dcdb9": "tgrNextPartContributor()", +"6d9f4eeb": "artistTrackCount(address)", +"6d9fed84": "getJackPotInfo()", +"6da05cc7": "sectionAvailable(uint256)", +"6da05f0f": "_requestRandom(uint256)", +"6da1339c": "_deposit(address,uint256)", +"6da1833c": "getInstitutionByName(string)", +"6da1d37a": "sumWei()", +"6da246ac": "approvePartnerAllocation(address)", +"6da28481": "balanceOfLockup(address)", +"6da36c06": "contract_admin()", +"6da3cd1a": "verifiedUsersOnlyMode()", +"6da44d61": "SportX()", +"6da49b83": "nodeCount()", +"6da4edff": "getPriceSpeedPercent()", +"6da4fd5c": "TheBeardToken()", +"6da4fe26": "nextReward()", +"6da50777": "FreddieToken(address)", +"6da61d1e": "payoutOf(address)", +"6da66355": "pause(string)", +"6da705f5": "isOwnerOfJob(address,bytes)", +"6da72e7a": "reclaimByReceiver(uint256,address,bytes32)", +"6da78903": "SwapCreated(address,uint256)", +"6da79a93": "bid(uint256,uint256,uint256,address)", +"6da84ec0": "calcMarketFee(bytes32,uint256)", +"6da9a969": "toBRFWEI(uint256)", +"6daa212f": "applyPayback(address,uint256)", +"6daa2d44": "raiseDispute()", +"6daa9f56": "setExhaustionTime(uint256)", +"6daaf67b": "REFERRAL_PROGRAMS()", +"6dabccc9": "setmsg(address)", +"6dabd069": "emission(address,uint256,bytes32,uint256)", +"6dac8bea": "PREMIUM_CATEGORY()", +"6dacda85": "LOCKPERIOD()", +"6dad2a91": "getWinningAmount()", +"6dae014c": "test_basic_sanity()", +"6dae022f": "verifyTx()", +"6daf0866": "Hungrify()", +"6dafc6b7": "destructOne(bytes32)", +"6db1218d": "getAPSchedule()", +"6db14a1c": "PaulSportsCoin()", +"6db17f8d": "KriptoNeed(uint256,string,uint8,string)", +"6db19eb8": "specialGym()", +"6db31c25": "pay(string,address,uint256,bool,bytes)", +"6db3a788": "createHero(string,uint256,uint256,uint256,uint256)", +"6db4ba51": "requireNotEmptyAddress(address)", +"6db4bbf0": "donotYYYDappToken()", +"6db5c8fd": "maxDuration()", +"6db5d3b7": "modifyCommission(uint256,uint256)", +"6db66268": "remainingTokensPerPeriod()", +"6db736df": "Writers(address)", +"6db75799": "set_amount(uint256,uint256)", +"6db76efd": "decreaseFrozenBalances(address,uint256)", +"6db7f77c": "requestEarlySettlement()", +"6db90900": "returnAllRoomsBalance()", +"6db9ec44": "IWTfund()", +"6db9ee4d": "MixenCoin()", +"6dba46ac": "aprMintAdjustment()", +"6dbb7bcd": "getExecutorRegistry()", +"6dbd6689": "gupSold()", +"6dbe060d": "hashTest(string)", +"6dbe21b8": "setBounty()", +"6dbe2ebc": "calcUserDivsTotal(address)", +"6dbe31eb": "testSubBalance()", +"6dbe4bee": "MoonToken(uint256,string,string)", +"6dbf8108": "withdrawBounty(address)", +"6dc043d7": "draw_number()", +"6dc0a997": "pushAllocation(address,uint256)", +"6dc12f1c": "EvMigration(address,uint256,uint256)", +"6dc1a075": "setMaxOpenAttacks(uint256)", +"6dc1f360": "VersionControl()", +"6dc214af": "bitCrystalEscrow()", +"6dc34462": "Timed(uint256,uint256,uint8)", +"6dc37dee": "changeReviewRules(uint256)", +"6dc3e97e": "addGame(bytes32,address,address,uint256)", +"6dc3edcf": "executeExecutable(uint256,uint256)", +"6dc455a4": "WinnerWithdrew(address,uint256,uint256)", +"6dc4faea": "withdrawnTeam()", +"6dc51f1e": "advisoryBoardFundManager()", +"6dc55f7e": "RANGEEND_7()", +"6dc56397": "career_path()", +"6dc57da6": "getTimestampOfDayStart(uint256)", +"6dc585b6": "toRICH(uint256)", +"6dc7a627": "canClaim()", +"6dc7d164": "addSignature(uint256,uint256,address)", +"6dc88e1f": "addAngelIdMapping(address,uint64)", +"6dc8dbd4": "calculateMaxTokensIssued()", +"6dc92426": "makeSellOrder(address,uint256,uint256)", +"6dc944f6": "withdrawTotalDevEarned()", +"6dc9ab89": "get_orderAddress(address,address,uint256,uint256,uint256,uint256)", +"6dca35da": "newCampaign(uint256,address,uint256)", +"6dcb0cf8": "typeOf(address)", +"6dcb672b": "EBanker()", +"6dcba059": "goToNextStep()", +"6dcd16d7": "computeBids(uint256)", +"6dcd6eb9": "withdrawPendingAmounts()", +"6dcdd00f": "Allowance(address,address)", +"6dce14cd": "LBTokenSale(uint256,uint256,uint256)", +"6dcea85f": "setMarket(address)", +"6dd01116": "getWishContent(uint256)", +"6dd0c3d8": "setENGDevAddress(address)", +"6dd0c51e": "RESERVED_STAFF_GROUP()", +"6dd0d091": "retaliate()", +"6dd13a29": "ICOStarted(uint256,uint256,uint256,uint256)", +"6dd186c4": "YeYingOil()", +"6dd1f71c": "RTokenMain(uint256,string,string,uint8,address)", +"6dd22ccd": "getMixParticipant(bytes32,uint256,uint256)", +"6dd23b5b": "constructor(address,address,address)", +"6dd28241": "deprecatedSince()", +"6dd2bfca": "setDevfee(uint256)", +"6dd35c7b": "topBalance(address,uint256)", +"6dd3a823": "Neptun()", +"6dd40168": "preSaleMinimumWei()", +"6dd40905": "getQuestionVotesAllCount(string)", +"6dd43d1f": "attachSubscriptionModule(address)", +"6dd4927b": "reName(string,string)", +"6dd4c13c": "allowsSignup()", +"6dd5b69d": "getConfig(bytes32)", +"6dd5bb11": "oraclize_query(string)", +"6dd6e673": "buySanSlot(address,uint256)", +"6dd6e87b": "checkOut(int256)", +"6dd749ba": "getSpaceById(uint256)", +"6dd77c5d": "etherToUSDRate()", +"6dd7d8ea": "vote(address)", +"6dd8d3bf": "buy_energy(address,uint32,uint32,uint64,uint32,uint64)", +"6dd9fde9": "transferTokensToNonEthBuyer(address,uint256)", +"6dda1291": "hotPotatoPrize()", +"6dda9b24": "bva(address,uint256,address)", +"6ddc7e65": "gracePeriodAfterRound0Target()", +"6ddcb442": "getPhaseStatus(uint256)", +"6ddd07f8": "getEngineById(uint256)", +"6ddd707f": "TDTToken()", +"6dde33ea": "deathData_a13()", +"6dde8b18": "removeWhitelistedTransfer(address,address)", +"6ddeaae0": "investorReferrals(address,address)", +"6ddf09c4": "ICToken()", +"6ddf12ae": "ecdouble(uint256[3])", +"6de00927": "GetUserRank(uint8,address)", +"6de09e28": "affiliatesAllocAddress()", +"6de0b375": "openBet(uint256)", +"6de12905": "updateMeta(string,string)", +"6de343cd": "SNTPlaceHolder(address,address,address,address)", +"6de3afc9": "EduCoin()", +"6de53001": "clearApproval(address,uint256)", +"6de5897c": "ECOMCASH()", +"6de60a07": "ContinueSuspendedEmployee(address,uint32,uint32)", +"6de6220b": "OwnerO()", +"6de65097": "OwnerRemoved(address,bytes32)", +"6de685f6": "START_TIME_SALE()", +"6de725a3": "callTx(bytes,address,uint256,bytes)", +"6de74bbe": "setratePreSale(uint256)", +"6de758a1": "PWGLToken(address,address)", +"6de79d17": "TIANYECoin()", +"6de7a31d": "getEvotTokenAddress()", +"6de84a4f": "bankMultisig()", +"6de996b4": "getPlayerSpaceshipAuctionPriceById(uint256)", +"6de9ebb1": "setBlogRegistry(address)", +"6de9f32b": "tokensMinted()", +"6dea2088": "MAX_FUNDS_RAISED_DURING_PRESALE()", +"6deaf623": "calculateEthToVibe(uint256,uint256)", +"6deb515d": "disapproveInvestorsInBulk(address[])", +"6dec665e": "motionWaiting(uint256)", +"6dec7a93": "setInfo(string,string,string)", +"6ded82f8": "isPaid(address)", +"6dee2032": "getOpenOrdersOf(address)", +"6dee275a": "c_STQperETH()", +"6deebae3": "subtract()", +"6deefc7a": "sellable()", +"6def1efc": "getPreviousFeeWindow()", +"6defbf80": "ready()", +"6defd595": "getCovfefe(uint256)", +"6defe0b9": "isTimeOver()", +"6defe888": "Criptomedicina()", +"6df006f3": "frozenToken()", +"6df03165": "setTimeOutAuthentication(uint256)", +"6df088bf": "winnerDecided(uint256,address,uint256)", +"6df0a7e7": "setContract(string,string)", +"6df0b557": "getPlayerSpaceshipAuctionById(uint256)", +"6df15719": "STWY()", +"6df1667c": "same(string,string)", +"6df26327": "additionalEmission()", +"6df26d14": "startEarlyStage1()", +"6df3edef": "getSavedBytes()", +"6df55024": "LogBuyTokens(address,uint256,string)", +"6df5ee2b": "withdrawPresale()", +"6df6ca7a": "getDivsBalance(address,address)", +"6df7f38f": "sellForBitcoin(address,uint256)", +"6df83012": "startLockUpSec()", +"6df8359f": "WorkOrderStarted(uint128)", +"6df86816": "ActionAgonPlat(address)", +"6df99d81": "CCH_TEL_AVIV_01()", +"6dfa8d99": "totalEarned()", +"6dfada86": "mintToken(address,uint256,address)", +"6dfc15a4": "changelp6(address)", +"6dfc2fa8": "isInProgress()", +"6dfd3c5a": "interestReceived()", +"6dfe512e": "initPGOMonthlyInternalVault(address[],uint256[])", +"6dfe869b": "Preallocation(address,uint256)", +"6dfe8a34": "setSkillName(address,uint256,bytes32)", +"6dff8216": "cbAddresses()", +"6e008b35": "calculateResult()", +"6e034f4d": "tokensaleBuyTokens()", +"6e038c4f": "firstTotalSupply()", +"6e051dba": "ReserveTokensHolderMock(address,address,address)", +"6e0550e5": "stepOneEndTime()", +"6e0560c3": "doNotAutoRefund(address)", +"6e05d3ca": "Z1CoinGenesis(address)", +"6e064f6a": "HedglyStakingToken()", +"6e06a9ce": "changeTimeOneSession(uint256)", +"6e06ac9d": "UNSPAM(string,string,uint256,uint256,bool)", +"6e0712b1": "setIcoParams(uint256,uint256,uint256,uint256,bool,bool,uint32,uint32,uint256)", +"6e075e30": "reinvestAmount(uint256)", +"6e0763f3": "RPNCoin()", +"6e07979d": "tokenBlogs()", +"6e080d86": "register(string,string,bool,string,address,uint256,uint256)", +"6e083bc7": "credoEthExchangeRate()", +"6e094b67": "TPS()", +"6e09a4ab": "diff(uint256[],uint256[])", +"6e0b0c80": "MIToken()", +"6e0bd282": "destroy(bytes32)", +"6e0c7867": "createDataObject(bytes32,address,bytes32,address,bytes32)", +"6e0cd415": "isPositionCalled(bytes32)", +"6e0d98fe": "setProbabilities(uint32[])", +"6e0da3ee": "WoodToken(uint256,string,string)", +"6e0da971": "tokensSoldIco()", +"6e0dd984": "setCapUsd(uint256)", +"6e0e7e85": "withdrawERC20Compatible(bytes32,uint256,uint256,uint256[])", +"6e0f8d68": "stage_1_price()", +"6e0fb1c5": "FOUNDER2_STAKE()", +"6e101967": "set_iconiq_pre_kyc_bonus_denominator(uint256)", +"6e106628": "getWinningReportingParticipant()", +"6e114511": "decreaseTotalSupply(uint256)", +"6e1180f8": "setOversightAddress(address,bool)", +"6e120023": "TimestampScheduler(address,address,address)", +"6e125009": "contractTokensAvailable()", +"6e1286fc": "getReward(uint256[])", +"6e12b46e": "requiredPoints()", +"6e13cdfe": "claimH2()", +"6e13d418": "stakeAddress(uint256)", +"6e140e6c": "TetherToken(uint256,string,string,uint8)", +"6e1479c0": "testControlCreateNewRevisionNotOwner()", +"6e14b71b": "PetsCoin()", +"6e15266a": "fifty_two_weeks()", +"6e1636bb": "logOrderCanceled(address,address,address,bytes32,uint8,uint256,uint256)", +"6e164e23": "claimTokens(uint256,address)", +"6e16f9ed": "iBird()", +"6e173a7f": "storeBlockHeader(bytes,bytes)", +"6e17e7c2": "nextFieldIndex()", +"6e18980a": "transferByLegacy(address,address,uint256)", +"6e18eba5": "ethUSDPrice()", +"6e18ff05": "getRefInfo(address,address)", +"6e1907cc": "test21(uint256)", +"6e1a1336": "setString(string,string)", +"6e1b6bcc": "checkMyBet(address)", +"6e1bd323": "MAX_TOKEN()", +"6e1cf038": "getNumNiceBets(uint256)", +"6e1d3c0d": "sudoku()", +"6e1d7d5e": "EtherIbe()", +"6e1e063f": "claimableRefund(address)", +"6e1e34c7": "TokensBoughts(uint256)", +"6e1ece25": "totalFeesValue()", +"6e1f777d": "createTokenToTeam()", +"6e2117f7": "forFunction()", +"6e217d30": "setBuyCourse(uint256)", +"6e219667": "p3()", +"6e21fc87": "_airdrop(address)", +"6e223710": "getRockInfo(uint256)", +"6e224034": "totalCrowdCoin()", +"6e22aea0": "AIW(uint256,string,string)", +"6e22d33e": "getBytesValue(string)", +"6e22e32b": "setMonethaAddress(address,address,bool)", +"6e233918": "buyTank(uint32)", +"6e241c5c": "_createExoplanet(string,address,uint256,uint32,string,uint32,uint8,string)", +"6e247f29": "Transfer_of_authority_logic(address)", +"6e2653ca": "AirSwapHandler(address,address,address)", +"6e275bd2": "transferFrom(address,address,address,address,uint256)", +"6e27d889": "lockTokens(uint256)", +"6e2857f2": "setEscrow(address,address)", +"6e287154": "setLocalRevenuPercent(uint256)", +"6e293817": "transferWithReference(address,uint256,bytes32,string)", +"6e2940eb": "NhCoin()", +"6e2a2d0a": "result_amount()", +"6e2adeee": "SweetToken(string,string,address)", +"6e2bf348": "getDiscountByAmount(uint256)", +"6e2c10a1": "unitedNations()", +"6e2c732d": "add(uint64,uint64)", +"6e2cde85": "drawPot(string,string)", +"6e2d53a6": "TreasureCoin()", +"6e2d604a": "thrash()", +"6e2da4b3": "proposeAction(address)", +"6e2db8d7": "addWhiteList(address,uint256)", +"6e2e2e4d": "showMessage(bytes32,uint256,string)", +"6e2e9c3b": "contributedUsd()", +"6e2e9ee1": "setKYCRequiredToReceiveFunds(bool)", +"6e2ede03": "getCollateralMarketsLength()", +"6e2edf30": "ETCSurvey(address)", +"6e2f0bb8": "newSaddleryCon(address)", +"6e2f10bd": "changeMerchantBeneficiaryAddress(uint256,address)", +"6e2f5f12": "sendToFaucet(uint256)", +"6e2fd470": "sharedExpenseWithdrawn()", +"6e30418b": "totalPlayerBalance()", +"6e30d411": "showDevBalance()", +"6e317da7": "changeRedeemer(address)", +"6e31f704": "DARIC()", +"6e321105": "losePercent()", +"6e32295e": "mDestroyTokens(address,uint256)", +"6e329aa9": "getPotato()", +"6e32cf8e": "admin_transfer_tempLockAddress(address,uint256,uint256)", +"6e33bc13": "COINS_TO_HATCH_1STRIPPERS()", +"6e349188": "MAXSOLD_SUPPLY()", +"6e34b4e4": "getPoolOwner(uint256)", +"6e3532fa": "getSubscriptionFee()", +"6e353435": "inputauction(uint256,uint256,string)", +"6e353a1d": "emergencyWithdrawal(address)", +"6e359afa": "changeTrueUSDOperation()", +"6e36893a": "ICOInvestment(address,uint256,uint256,uint8)", +"6e3706c8": "PRE_DURATION()", +"6e377202": "isAuthed(address,address)", +"6e3825d2": "checkMyTicket(uint32)", +"6e39891c": "currentDividendAmount()", +"6e39eb85": "resetNumberOfCandidates()", +"6e3a1e5c": "requestEthereumChange(string,string)", +"6e3ae353": "changeOrigDev(address)", +"6e3aff90": "getOrderString()", +"6e3bbebd": "ZJLTToken()", +"6e3c5759": "claim_partnerPreICOTokens(address)", +"6e3d5a9d": "getTopCompanyBlocksInBetween()", +"6e3de78a": "UNFOMO(string,string,uint256,uint256,bool)", +"6e3e1318": "takeFee(uint32)", +"6e3e82f9": "_computeCut(uint256,uint256)", +"6e3f3f1a": "proposal(address,uint256,address)", +"6e3f7ba0": "TokenFrozen(uint256,string)", +"6e3f8550": "walletReserve()", +"6e403cd7": "sendBread(address,uint256)", +"6e40975d": "ICOToken()", +"6e415d37": "farewellTo(address)", +"6e417c69": "executeRequest(uint256)", +"6e41a78f": "DRC()", +"6e41b1ad": "nameTaken(uint256)", +"6e41efb2": "ThawTransfers(address,bool)", +"6e4264ce": "initiateDeposit()", +"6e4324a3": "Cryptopus()", +"6e439078": "makeLogCancel(address,address,address,address,uint256,uint256,uint256)", +"6e441752": "teamToken2019()", +"6e44fcea": "isHoldTokens()", +"6e459cf1": "CrowdSale(address,uint256)", +"6e4602c8": "TimereumX()", +"6e46408d": "indexOfOwners(address,address)", +"6e4647d6": "vendingCreateCollectible(uint256,address)", +"6e468a8a": "CelticsCoin()", +"6e48670f": "zeroSub(uint256,uint256)", +"6e48a035": "closeVote(uint256)", +"6e49b1e1": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6e4a6874": "setReceiver4()", +"6e4a7b26": "initializeCoins()", +"6e4a9f4d": "Nguen()", +"6e4ac25f": "TokenData(address,address)", +"6e4b0222": "setactivelevel(uint256)", +"6e4bfb37": "GenaroTokenSale(uint256,uint256,address,uint256,bytes32)", +"6e4c42a0": "getGameSides()", +"6e4c9829": "amountsOf(address)", +"6e4ca716": "totalEthRecieved()", +"6e4dd931": "GetPotInfo()", +"6e4df96e": "produceWine()", +"6e4e5c1d": "revealedCurves()", +"6e4e87e0": "sendQuickPromoBonus()", +"6e4eb9cb": "getSeedsSinceLastEvent(address)", +"6e4ed796": "blocksPerRound()", +"6e4f33b0": "change_delay(uint256)", +"6e4f68b5": "PONO()", +"6e4f749e": "freezeMethod(address,bool)", +"6e500306": "Bst()", +"6e50640c": "WinikToken()", +"6e506ee4": "managementTokenAllocation()", +"6e50c39c": "serializeState(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256)", +"6e50eb3f": "setEndsAt(uint256)", +"6e51be3d": "UmmahDinar()", +"6e52dcd6": "pauseChannels()", +"6e5320d1": "changeTokenInformation(string,string)", +"6e53909a": "setLockAdmin(address,bool)", +"6e5390d2": "woodAddress()", +"6e5406e3": "_0xLitecoinToken()", +"6e54181e": "right75(uint256)", +"6e5452fe": "OUTCOME_RANGE()", +"6e553f65": "deposit(uint256,address)", +"6e555a18": "testCreateContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", +"6e556725": "initialEndPrice()", +"6e56dce5": "collectEtherBack()", +"6e56e5eb": "_emitUserBinded(uint256,address,bool)", +"6e56e895": "test_defaultPermissions()", +"6e575537": "MAX_OWNER_PERS_SITE()", +"6e57e7e0": "payOut(address,uint128,int256)", +"6e581673": "buyPackWithERC20Tokens(uint8,address)", +"6e593210": "getActiveSellOrders(uint256)", +"6e596aef": "moveCeiling(uint256)", +"6e59e570": "sendToOtherBlockchain2(string,string,address)", +"6e59f3f3": "createChannel(address)", +"6e5ac882": "root(address)", +"6e5aef4d": "getInitTime(uint256)", +"6e5b064c": "basicPricePerEth()", +"6e5deca4": "YaoDun()", +"6e5ecdff": "updateDependencies()", +"6e5f375e": "setGameStartedDividendPercentage(uint256)", +"6e5fd38d": "registerMultiple(address[],bool)", +"6e609af2": "FulfillmentUpdated(uint256,uint256)", +"6e60cf61": "freedWinPoolToTeam()", +"6e6260fa": "thresholdNewTokenPair()", +"6e62825a": "SCDCToken1()", +"6e62cdab": "nextRoundWinner()", +"6e62de19": "fundFailed()", +"6e63015c": "getCertifiersCount()", +"6e630649": "changeState(uint256,uint8)", +"6e635673": "deletePullPayment(uint8,bytes32,bytes32,string,address,address)", +"6e638d3b": "claimIFSReward(address)", +"6e640f4c": "candidat()", +"6e658fbe": "myFundsExpireIn(uint256)", +"6e6656d8": "setCallStackSize(uint256)", +"6e66644d": "changeStakingFeesOperation()", +"6e667c35": "contentURI(uint256)", +"6e66cc38": "TraceToToken(address,uint256,uint256,address)", +"6e66f6e9": "tokenReward()", +"6e676b69": "changeVotingRules(uint256,uint256,uint256)", +"6e67b803": "bid3(address,uint256[],uint256[])", +"6e680ee7": "CREATORS_WALLET_ADDRESS()", +"6e68751c": "revokeVestedTokensFor(address)", +"6e68ec59": "getSoilHumdtyException(bytes32)", +"6e69e7d7": "maximumNumberOfLoops(uint256,uint256)", +"6e6a1dc3": "weightedVoteCountsOf(uint256,uint256)", +"6e6a42ec": "retraitStandard_1()", +"6e6b4bed": "getArt(string)", +"6e6b8004": "upgradeGemsSpecial()", +"6e6beb07": "PreSaleBuy()", +"6e6bfca0": "cancelJobByProvider(bytes32)", +"6e6c4c58": "CrowdTmoney2()", +"6e6ca42f": "RefundError(address,uint256)", +"6e6ca6f5": "getLastTransferred(address)", +"6e6d83d2": "cancelLoanRequestAtIndexByLender(uint256)", +"6e6d9a6c": "Token(address[],uint256[])", +"6e6e8a02": "addWhitelist(address,address[])", +"6e6ed399": "priceValidSeconds()", +"6e6f2fe5": "DentacoinToken()", +"6e6fe3d6": "ClaimMTU(bool)", +"6e6ff8a9": "lockDays()", +"6e70096e": "withdrawEarnings(uint256)", +"6e70cb07": "getAssetHolders()", +"6e70de82": "transitionState()", +"6e720693": "RevokeEvent(address,address,uint32)", +"6e722fcb": "getIsBonusClaimed(uint256,address)", +"6e725302": "getRatio(uint256,uint256,uint256)", +"6e730a67": "setSecondStageEndsAt(uint256)", +"6e733f50": "getCap(string)", +"6e743fa9": "punkBids(uint256)", +"6e74774a": "MHCTokenIssue(address)", +"6e752548": "finalizeStartTime()", +"6e754efb": "daysnumber()", +"6e761a73": "claimDevReward(address)", +"6e76a89f": "validateReserves()", +"6e76fb4c": "MemberRemoved(address)", +"6e779481": "ADVISORS_CAP()", +"6e77d4bb": "CryptoMountainsToken()", +"6e787a48": "correctOriginalSupply()", +"6e78e95f": "CryptoLeaders()", +"6e79ae56": "deleteOpenAction(string,string,string,string,string)", +"6e7a824f": "TestCoin(uint256,string,string)", +"6e7b698f": "drops(address[],uint256)", +"6e7bc3e5": "addContractOwner(address)", +"6e7c1700": "getJobName(uint256)", +"6e7c1c2b": "getWithdrawDigest(bytes32,address,uint256,uint64)", +"6e7c77b6": "testClaimTokens()", +"6e7d9dc6": "transferCreatureOwnership(address)", +"6e7e3b2b": "contributors()", +"6e7f26ab": "distributeToken(uint256,address[])", +"6e80a869": "minimalInvestmentInWei()", +"6e823b47": "controlledBurn(address,uint256)", +"6e82e86a": "getHash(uint256[])", +"6e843a74": "AgreementUrlRu()", +"6e8480e0": "TokenMetadata(string,uint8,string,string)", +"6e8595f5": "CheckAddressVerified(address)", +"6e861c0e": "deauthorizeContract(address)", +"6e8755af": "updateRewardsFor(address)", +"6e880e4d": "PreminedAsset()", +"6e88147e": "tradeReport()", +"6e88274b": "GetBetBalance()", +"6e883095": "checkPrizes(address)", +"6e8851a9": "initSale2()", +"6e885bd7": "workerPoolHub()", +"6e88865a": "teamAddressFreezeTime()", +"6e88a7bd": "referrerFee()", +"6e88b4ef": "tgeStageBlockLeft()", +"6e88d5fa": "judgeFakeTokenAndTransfer(uint256,address)", +"6e899550": "setString(bytes32,string)", +"6e89d517": "Deposited(address,uint256,bytes)", +"6e8a3438": "TransferStatusChanged(bool)", +"6e8a3d4b": "SerpentIsRunning()", +"6e8a6d12": "updatePriceAddress(address)", +"6e8ab641": "Arbitragebit()", +"6e8ac0c8": "developersAllocation()", +"6e8add02": "setMainsale(address)", +"6e8b7c23": "numcalls()", +"6e8c2caf": "gameRunning()", +"6e8c57e6": "minBalanceToAllowContractCreation()", +"6e8d3007": "CapitalTechCrowdsale(address,address,address)", +"6e8d82af": "swapToken(address)", +"6e8dad74": "retrieveAccountBalance(bytes,bytes)", +"6e8dba91": "getInitialData()", +"6e8dc135": "WinnerSelected(address,uint256,uint256,uint256)", +"6e8ddc7a": "LuxArbitrageToken()", +"6e8de595": "setBoardMember(uint256,uint256,uint256)", +"6e8e39d1": "QRG(uint256,string,string)", +"6e8f7142": "put(address,string,string)", +"6e8f8d69": "getInvestorsCount(uint256)", +"6e900256": "addData(bytes32,bytes32,bytes32,bytes32[],uint256[],uint256[],uint256[],uint256[])", +"6e9067fb": "getRole(string)", +"6e90a590": "expectedTotalSupply()", +"6e914d97": "requestAdminTokenTransfer(address,address,uint256,string)", +"6e929838": "PAXToken(address,address,address,bool)", +"6e929d4c": "sendIBTCTokenToMultiAddr(address[],uint256[])", +"6e932270": "dewhitelist(address)", +"6e939d05": "moveFromState(bytes32,int8[128],uint256,uint256,bytes)", +"6e93dbdc": "koCommissionAccount()", +"6e940a29": "changeHost(address)", +"6e942390": "howMany(uint256,uint256)", +"6e942f82": "buildingCostWei()", +"6e947298": "getETHBalance()", +"6e94d278": "burnReputation(uint256,address,address)", +"6e95a066": "IouRootsPresaleToken(string,string,uint8)", +"6e96433f": "multiPartyTransferFrom(address,address[],uint256[])", +"6e96463f": "BonusesUpdated(address,bool)", +"6e965a89": "calculateWeeklyTokensSupply()", +"6e968bca": "getSidesArray(uint256)", +"6e96bbeb": "crowdsalePurchasesLoaded()", +"6e96dfd7": "_setPendingOwner(address)", +"6e97041e": "SCPS1Token()", +"6e970dfd": "retireMaster(address)", +"6e974fd6": "approveWalletFeeData(uint256)", +"6e977865": "dadFab()", +"6e978d91": "right90(uint256)", +"6e98a92b": "fundManagementAddress()", +"6e995bd9": "updateChannelState(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"6e9960c3": "getAdmin()", +"6e997972": "modSymbol(string)", +"6e99d52f": "COOLDOWN_PERIOD()", +"6e9a41c3": "DraftCrowdsale(uint256,uint256,uint256)", +"6e9af3f7": "giveForce(address)", +"6e9b134e": "LogCancelDelivery(address,string)", +"6e9b41d4": "releaseForGoolaTeam()", +"6e9c3683": "getIndexByProposalId(bytes32)", +"6e9c4650": "prepaidUnits()", +"6e9c4d0a": "rateTenant(uint256)", +"6e9c931c": "stake(uint256,address,uint256)", +"6e9cfb79": "itemReturn()", +"6e9d3b9d": "AtoOneCoin(uint256,string,uint8,string)", +"6e9e48ef": "tokenIdToOwner(uint256)", +"6e9ffe2b": "updateTransferRestrictionVerifier(address)", +"6ea007b3": "dailyLimitLeft()", +"6ea056a9": "sweep(address,uint256)", +"6ea07a36": "recoverSimple(bytes32,uint8,uint256,uint256)", +"6ea11f65": "togglePublicMatches()", +"6ea141cb": "AddBonusToList(bytes32,uint256,uint256)", +"6ea150e2": "changeWithdrawTimeRange(uint256,uint256)", +"6ea16f3a": "tryRefund()", +"6ea16f81": "houseTraits(uint256,uint256)", +"6ea34ce4": "getPartById(uint256)", +"6ea38199": "getMoreAuctionDetails(uint256)", +"6ea3b6d1": "ICO_Finished()", +"6ea3f1cb": "GetFreebie()", +"6ea405d3": "Tax()", +"6ea412b1": "Exchanged(address,uint256)", +"6ea42555": "pack(uint256)", +"6ea451e4": "setSaleLimit(uint8)", +"6ea51811": "icoStartP4()", +"6ea521d9": "_voteAs(address,uint256,uint256,uint256,string)", +"6ea68360": "newMasterCopy()", +"6ea69c91": "closePositionOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"6ea6b71b": "tokensRaised()", +"6ea6d76d": "initGame(string,bool,uint256)", +"6ea6db3c": "token(uint256,string,uint8,string,address,uint256)", +"6ea6f0c3": "initializeTopUpLimit(uint256)", +"6ea7064b": "contractorProposal(uint256,address,uint256,string,bytes32,address,uint256,uint256,uint256)", +"6ea79583": "team_wallet()", +"6ea798bc": "MyMiniToken(uint256)", +"6ea8efea": "getGameNum()", +"6ea928d9": "getSymbolHash()", +"6ea96bcd": "defaultBuyerLastPaidAt()", +"6eaa0f16": "CCTOKEN()", +"6eabb2f6": "getWineryOperation(string,address,uint256)", +"6eabcd69": "__abortFuse()", +"6eac86d4": "settleTransaction(bytes32)", +"6eaccf4c": "privilegedTransfer(address,address,uint256)", +"6eacd48a": "ownerPauseGame(bool)", +"6eadcc87": "tokenSetup(address,address,address,address,address)", +"6eaddad2": "setDevPercent(uint256)", +"6eadeba0": "resolve_block_hash(uint256)", +"6eae0843": "getTeam(uint16,uint8)", +"6eae555d": "amendDisputeDispersal(uint256[])", +"6eaefc87": "tokenExchangeRateBase()", +"6eafbe88": "ChangeTeamHolder(address,address)", +"6eb060ea": "setMinBuyPublic()", +"6eb09ce2": "ethbalance(address)", +"6eb1546d": "_removeBid(uint256)", +"6eb1e09a": "fechVoteMainInfoByStage(uint256)", +"6eb21929": "softcapReached()", +"6eb227ce": "getCurrentWeek()", +"6eb25ed8": "distributionOne(address)", +"6eb267ab": "CxNtoken(address)", +"6eb2a749": "isMaySale()", +"6eb2f0cc": "payShareholders(uint256)", +"6eb305aa": "getTimestampInSeconds()", +"6eb47ea7": "linkTeamToUser(address,bytes32)", +"6eb5197d": "getFirstAdmin()", +"6eb58224": "castDocumentVote(uint8,bytes32,bool)", +"6eb5ad4f": "lockPriceChange()", +"6eb5bef0": "addressSupporters()", +"6eb5ebae": "FidgETHSpinner()", +"6eb6c8fb": "MoneyToken()", +"6eb6ffa7": "initialQuorumPercent()", +"6eb769d2": "tokenTotalSold()", +"6eb7b4c2": "underdogInfo(uint256)", +"6eb7c67b": "_getEthPrice()", +"6eb85627": "Stalincoin()", +"6eb86537": "getAllPackage()", +"6eb91683": "donateForContractHealth()", +"6eba2b13": "getOrder(address)", +"6eba68f9": "ICOFactoryVersion()", +"6ebb6d80": "attack(address,uint8)", +"6ebbe863": "updatePublishContract(address)", +"6ebbfd5a": "addItemTo(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6ebc0af1": "tranche()", +"6ebc6200": "CURRENSEE(address,address,address)", +"6ebc8c86": "getContract(uint256)", +"6ebcf607": "_balances(address)", +"6ebd9d7f": "setApiRegistryContractAddress(address)", +"6ebdac12": "removeProductFromCart(uint256)", +"6ebe299f": "adventureDataContract()", +"6ebf10fe": "storeHeader(bytes,address)", +"6ebf5223": "ProofOfSheepM()", +"6ec012e7": "saleIndex()", +"6ec03f7a": "removeCrydrView(string)", +"6ec05f13": "EURWEI()", +"6ec069f8": "teamOneDivsUnclaimed()", +"6ec0ce6e": "_isController(address)", +"6ec232d3": "gasprice()", +"6ec236ed": "calculateTaskDeposit(uint256)", +"6ec23e53": "OPTIToken()", +"6ec25a06": "tokenCreated(address,uint256,string)", +"6ec2e979": "bothHaveAttribute(address,address,bytes32)", +"6ec2f223": "createVestingInternal(address,uint256,uint256,uint256,uint256,bool,address,uint256)", +"6ec32f9c": "getRepayAmount(uint256)", +"6ec386d3": "AutoChainTokenCandy()", +"6ec3af26": "addTrustedIssuer(address,bytes)", +"6ec40f9e": "GAME_POOL_INIT()", +"6ec4c951": "claimWithdraw(address,uint256)", +"6ec4e5b8": "callERC165SupportsInterface(address,bytes4)", +"6ec5239f": "setAvatar(string)", +"6ec62f29": "assertEq28(bytes28,bytes28)", +"6ec6d4a6": "setMinLimit(uint256)", +"6ec7743d": "getSubjectClaimSetEntryAt(address,uint256,uint256,uint256)", +"6ec782d9": "changeWaitTime(uint32)", +"6ec84711": "organizer6()", +"6ec99dd0": "testGetBlobStore()", +"6ec9b125": "EtherSphere()", +"6eca017e": "releaseForYoobaTeam()", +"6eca4a50": "UKTTokenController(bytes32,bytes32)", +"6eca6a9e": "updateRecordName(uint256,string)", +"6ecaa195": "coolness(uint256)", +"6ecb97cd": "getInitializeNumOutcomesValue()", +"6ecbb556": "UAPCrowdsale(uint256,uint256,uint256,address,address)", +"6ecc7bcf": "CeezetTokin()", +"6ecc9ad9": "getInstallments(uint256)", +"6ecd1129": "nextAvailableLevel()", +"6ecd7b70": "CancelSale(uint256)", +"6ece5937": "endGame(uint256,string,address)", +"6ece7d88": "doVote(uint256,uint256)", +"6eced029": "getMsgGasAfter()", +"6ecf9f7b": "hype()", +"6ed0b9d7": "changeStage(uint8,uint256,uint256)", +"6ed28ed0": "store(uint256,uint256)", +"6ed2d8c6": "giantFYou(address,uint256)", +"6ed2fc5c": "PRESALE_WEI()", +"6ed33343": "dsp()", +"6ed33b98": "addSupportedToken(address,address,uint256,uint256,uint256)", +"6ed34394": "totalLockPrincipal()", +"6ed3f468": "sendsignature()", +"6ed40f9d": "isValid(string,string,uint256,uint256)", +"6ed43eb0": "getInvestorList(uint256)", +"6ed4d0c7": "dataCenterGetResult(bytes32)", +"6ed51d94": "isValidBuyOrder(address,address)", +"6ed55eb5": "setUserRating(address,uint8)", +"6ed5777e": "BuyHORSEtokens()", +"6ed5f880": "withdrawGTA(uint256)", +"6ed65dae": "sendCount()", +"6ed6da9e": "getUserById(uint256)", +"6ed6e17a": "updateCurGamePrizeInfoWithDraw(uint256,address,uint256)", +"6ed776b2": "createToken(address,address)", +"6ed7c013": "move_monsters()", +"6ed7e058": "rememberAllRequiredBlockHashes()", +"6ed84231": "TOURNAMENT_BATTLE()", +"6ed89fbc": "_transport(uint256,uint256)", +"6ed963b7": "EthereumTravelCrowdsale(uint256,address,address)", +"6ed9c19f": "calculateMasked(address,uint256)", +"6ed9fd89": "avgGas(address)", +"6edb2e8a": "sellPropertyAndChangeOwnership(address)", +"6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"6edb9ab0": "batchDepositTo(address,address[],uint256[])", +"6edbba2e": "numFree()", +"6edbd134": "hasHash()", +"6edbeb1c": "verificationHoldersTimestampMap(address)", +"6edc7ba7": "getExchangeFunctionSignatures(address)", +"6ede2106": "EtherIn(address,uint256)", +"6ede696b": "PaymentProcessor(address)", +"6edf1cc4": "getWithdrawalForAddress(address,address,uint256)", +"6ee0400d": "ICOBonusPercent1week()", +"6ee1844e": "KnownOriginDigitalAsset(address)", +"6ee18573": "addWhitelistOperator(address)", +"6ee2627b": "maxFundLimit()", +"6ee2e362": "CleanCurrentRoomAndRound(address)", +"6ee2ed5d": "totalSpinners()", +"6ee31a18": "upgradeToken(address)", +"6ee3d453": "modifyGameItemPrice(uint256,uint256)", +"6ee3e896": "setDefeats(uint256,uint16)", +"6ee4b475": "InitialBlockCount()", +"6ee4d553": "cancelOracleRequest(bytes32,uint256,bytes4,uint256)", +"6ee5d676": "getSumCourse()", +"6ee61483": "changeBuyin(uint256)", +"6ee63f1f": "MineableToken()", +"6ee64345": "endMainSale()", +"6ee678ae": "_burn(address,address,uint256)", +"6ee74b3c": "Test5()", +"6ee7826f": "_getRoundedPrice(uint256)", +"6ee78aea": "isMultiple(uint256)", +"6ee7a063": "createInstance(address,bytes32,address,bytes32,bytes)", +"6ee8067f": "whitelistManagerAddr()", +"6ee84bb7": "SDD_Erc223Token()", +"6ee88301": "getRoomOwner(uint256)", +"6eea4820": "QBT()", +"6eeb553f": "pollBurnCompleted()", +"6eeb7a36": "setCreator(address,bool)", +"6eeba5c6": "short_party()", +"6eebad9e": "Jitech(uint256,string,uint8,string)", +"6eebb73f": "activateZone(int32[],int32[],uint8[],uint8[])", +"6eec21d6": "vault_deposit(address,uint256)", +"6eec2dd2": "Released(bytes32)", +"6eec3db6": "allocateAdvisorTokens()", +"6eecb7c2": "getDomainTypehash()", +"6eecf81a": "SetPrcntRate(uint256)", +"6eedc46d": "tokenWalletChange(address)", +"6eee2dad": "mintRewardTokens(address,uint256)", +"6eeeca03": "finalizeSale2()", +"6eef0326": "placeBetOdd(uint256)", +"6eef2cb7": "functionTwo()", +"6eef7a05": "bytesToString(bytes32)", +"6eef908f": "startReceiveTicket()", +"6ef0a5cf": "singleTransferToken(address,uint256)", +"6ef0c864": "SetDataAddress(address)", +"6ef0f37f": "setHome(address)", +"6ef181a8": "setRarityMultiplier(uint8)", +"6ef1a114": "transfersRemaining()", +"6ef1f3a6": "luckyOne(uint256)", +"6ef27042": "CentraToken()", +"6ef33b8f": "getInfo3(address,address)", +"6ef3732d": "fixDividendBalances(address,bool)", +"6ef3ef7e": "approveData(address,uint256,bytes)", +"6ef4e8db": "getCalcToken()", +"6ef61092": "withdrawn(address)", +"6ef72aaa": "BattleResult(address,address,uint256[],uint256[],bool,uint16,uint256,uint32,uint32)", +"6ef791bb": "WylSistContract()", +"6ef8c661": "addInfoListItem(bool,address,address,uint256,string)", +"6ef8d66d": "renouncePauser()", +"6ef958df": "changeSource(string,string,uint256)", +"6ef98b21": "withdrawOwner(uint256)", +"6ef9bc29": "phase3EndingAt()", +"6ef9e145": "weiBalances(address)", +"6efa0621": "SPPSeriesB(uint256,string,uint8,string)", +"6efa629d": "releaseFees()", +"6efa6a67": "PAYOUT_PCT()", +"6efab8f2": "overloadedMethod(address)", +"6efaf16c": "disableAutoSeller()", +"6efbb60a": "addONG(bytes32,string,string)", +"6efbd610": "coownerPrice()", +"6efd1adf": "RATE_EXPONENT()", +"6efd5974": "signedApproveHash(address,address,address,uint256,uint256,uint256)", +"6efe39a3": "getEncryptedKeyFromRequest(uint256,uint256)", +"6efef04d": "setLevelEndDate(uint256,uint256)", +"6eff2044": "onlyOwnerOrManager()", +"6eff8071": "addFuelFree(uint256,uint256,uint256,uint256)", +"6eff96f2": "rafflepot()", +"6effb219": "changeCreditFundNIMFAAddress(address)", +"6effb579": "stop_sell(uint256)", +"6effdda7": "Trade(address,uint256,address,uint256,address,address)", +"6effe1c7": "startSale2Phase()", +"6effec50": "forwardCall(address,uint256,bytes)", +"6f00a3cf": "DumpDivs()", +"6f00ad8a": "lastmoney()", +"6f00fd97": "createTokenTransaction(address,uint256,uint256,uint256,uint256,address,uint256)", +"6f015889": "Activate(address,uint256,string)", +"6f0166c4": "GeoGems(address)", +"6f01d915": "addHedge(address,uint256,uint256,bytes3,bytes3,uint64,bytes32,bytes32)", +"6f020775": "totalCoinLock()", +"6f022ac4": "cancelMigration(address)", +"6f02483f": "EtherGang()", +"6f024899": "Destructible()", +"6f025aec": "MolikToken()", +"6f025c84": "MithrilDemo()", +"6f03e307": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[])", +"6f03e4f9": "getClientBalances(address)", +"6f0470aa": "candidates()", +"6f04ff33": "increaseSalesBalance(address,uint256)", +"6f0503ad": "setDerivePayoutDistributionHash(bytes32)", +"6f05994e": "addBalanceFor(address,uint256)", +"6f0663f0": "RadioCoin()", +"6f069cfe": "technik()", +"6f06fdb3": "hasAgreement(uint256)", +"6f079f90": "getPricingEndsAt()", +"6f086122": "preSignedHashing(bytes8,address,address,uint256,uint256,uint256,uint8)", +"6f08effa": "manualBonus()", +"6f09240f": "runScript(bytes,bytes,address[])", +"6f0963b0": "isMemberBlocked(address)", +"6f096f75": "investorPayment(address,uint256)", +"6f0a150f": "restartRound(bool,bool)", +"6f0a74d5": "_8_poluchaetLesha()", +"6f0ac394": "getCP(address)", +"6f0b5180": "buyFor(address)", +"6f0cd3a6": "m_active()", +"6f0cfab6": "DNSResolver()", +"6f0d0a38": "CrocsFarmer()", +"6f0f45d2": "OPERATIONS_ADDRESS()", +"6f0fccab": "getTokenName(address)", +"6f0fdce8": "Task(address)", +"6f1003c4": "minEsteemAmount()", +"6f109879": "impl_transferMSM(address,address,uint256)", +"6f10d1a0": "addNewToken(bytes32,address,address)", +"6f10fdbd": "totalPlay()", +"6f117190": "getInitialTerrain(uint256,uint256)", +"6f11a859": "availableAirdrop(address)", +"6f1236e1": "ETHPriceProvider(string)", +"6f1296d2": "wrapEther()", +"6f13b95d": "editTokensForHour(uint256)", +"6f13e01b": "EthVenturePlugin()", +"6f13eb09": "BlockChainZB(uint256,string,string)", +"6f1427b2": "icoInProgress()", +"6f147f5c": "addWhiteListed(address[],uint256[],uint256[])", +"6f14dc62": "storehouse(bytes32)", +"6f152670": "max_fundingGoal()", +"6f15847f": "recordInfo(bytes32,uint256,string)", +"6f159c4f": "founder_token()", +"6f16a595": "PRICE_MIN()", +"6f17a516": "ln_fixed3_lnr(uint256,uint256)", +"6f181303": "ScriptCallable()", +"6f18337d": "IHF(address,uint256)", +"6f18d3f5": "traded_token_is_seeded()", +"6f1a5b72": "updateTokenHolder(address)", +"6f1a78cc": "deleteWebsite(address)", +"6f1aa1f5": "requestTokenIssue(address,uint256,string)", +"6f1ae5de": "_itemRemoveMarkets(uint256)", +"6f1c8a51": "_getHash(address,bytes32)", +"6f1ca0c2": "preicoSupply()", +"6f1cecd8": "unreadMessages(address,uint256)", +"6f1db0b7": "createNewBid(string,uint256)", +"6f1e54c3": "sellMyTokensAmount(uint8,uint256)", +"6f1e6419": "MANHATTANPROXYYORKAVE()", +"6f1e738c": "updateISIN(string)", +"6f1fb766": "sealedBids()", +"6f200ce3": "transferBlock(address,address,uint256)", +"6f204f20": "getChannelInfo(address,address,uint8)", +"6f2130d3": "amountOfCRs(address)", +"6f2223c5": "getRefereeAddress(address)", +"6f227851": "USDValue()", +"6f2293ab": "transferFrom(address,address,uint256,bool)", +"6f22993c": "moveTokens(address,address,uint256)", +"6f22d6a5": "losses()", +"6f24fe30": "notifyPledgeNotPayed(uint256)", +"6f253319": "CurrentGoldPrice()", +"6f259077": "STAGE_ONE_TIME_END()", +"6f2594a0": "moduleMultiOwner(address)", +"6f264776": "buy10tickets()", +"6f264b2e": "requiredTokenAddress()", +"6f26d566": "dailyLottery()", +"6f28a853": "assertNotSpent(uint256,int256,bytes32,bytes32)", +"6f28ee09": "storeHash(string,string)", +"6f290893": "Refund(address,uint256,uint256,int256)", +"6f29c88a": "exchangedNum()", +"6f2b1226": "upgradeBank(address)", +"6f2f098b": "Cite(bytes32)", +"6f2f7a57": "getWinNumber()", +"6f2fc06b": "proxyPayments(address)", +"6f2feb0a": "approveAndSell(uint256,uint256)", +"6f307dc3": "underlying()", +"6f30e1ee": "PunkBidWithdrawn(uint256,uint256,address)", +"6f3165d3": "UpgradeRig(uint8,uint256)", +"6f320970": "vernamCrowdSale()", +"6f322fef": "Atra()", +"6f326ac6": "checkStorageProof(bytes32[],address)", +"6f32a937": "min256(uint256,uint256,uint256)", +"6f32b2ac": "setRSPScienceAddress(address)", +"6f32b4cb": "mainICOSecondWeekEndTime()", +"6f3355af": "isBreakingCap(uint256,uint256)", +"6f335870": "sections()", +"6f3395b2": "_tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"6f33ae68": "HouseFeeUpdate(uint256)", +"6f341804": "activeteICO(uint256)", +"6f34a7ff": "sanctuary()", +"6f35c749": "SECONDS_OF_DAY()", +"6f362c2b": "latestSpender()", +"6f3640f7": "getRealUsdAmount()", +"6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", +"6f370b20": "Austriachain()", +"6f373cb7": "PullRequestClaimed(uint256,uint256)", +"6f374a12": "setBool()", +"6f37f48b": "firstToken(address)", +"6f38e410": "maxLevels()", +"6f3921ee": "extended()", +"6f3a7561": "SimpleAuction(address)", +"6f3ad341": "ICO_ONE()", +"6f3b2819": "secondChainHNw2()", +"6f3b4759": "lockMultiple(address[])", +"6f3b60d6": "latestOrderId()", +"6f3b6d00": "RESERVED_TEAM_SIDE()", +"6f3b8ce2": "getArrayAddress(bytes32)", +"6f3b97a4": "DeactivatedContract(uint256)", +"6f3bb97f": "unsetVipAddress(address,address)", +"6f3be1da": "lift_ban()", +"6f3be6b7": "ELEXTROCOIN()", +"6f3bf6ea": "GMC()", +"6f3c8566": "redeemWarriors()", +"6f3d8043": "valueAfterReducingFee(uint256)", +"6f3f6870": "CertAdmins(address)", +"6f3fe404": "updateBalances()", +"6f414fbb": "sale1Started()", +"6f4215b1": "setEthRate(uint256)", +"6f42879f": "wantsToFight(uint256,uint256)", +"6f42934d": "getTimePurchase()", +"6f42c901": "teamAddresses(address)", +"6f43233a": "getAnyAddressTokenBalance(address,address)", +"6f44c4d7": "recipientVIP()", +"6f4618d8": "firstReserveAllocation()", +"6f468289": "CONTRIB_PERIOD2_STAKE()", +"6f475e7f": "validateTransfer(address,address)", +"6f476cbc": "opMinted()", +"6f479f57": "changeSellingPrice(uint256,uint128)", +"6f47b075": "test_set_get_Policy()", +"6f47e218": "sharesRaised()", +"6f4812e2": "testFailControllerInsufficientFundsTransfer()", +"6f48455e": "checkMinMaxInvestment(uint256)", +"6f488063": "getPOOL_edit_7()", +"6f494049": "registerPublicKey(uint256,uint256)", +"6f49a3c0": "openChest()", +"6f4a2cd0": "distributeRewards()", +"6f4b31cc": "Bastonet()", +"6f4bda17": "numberOfPlayers()", +"6f4be234": "EMJAC()", +"6f4c6443": "invite(address,address)", +"6f4ca36e": "Tracto()", +"6f4ce56a": "indexOf(bytes32)", +"6f4d469b": "addMembers(address[])", +"6f4d6f5d": "ShitToken(address)", +"6f4d80e5": "m_state()", +"6f4db6a7": "hasRepeat(uint8[4])", +"6f4dd69c": "testSetBalanceUpdatesSupply()", +"6f4dfede": "GetExpireTime()", +"6f4eb87e": "test_removeFromRegistry()", +"6f4ebb70": "calculate_reward(uint256,address,uint256)", +"6f4efd53": "POTJ()", +"6f4f2ec3": "ERC20Template(string,string,uint8,uint256,address)", +"6f500df5": "claimCofounditTokens(address)", +"6f503750": "LogPermit(bytes32,bytes32,bytes32)", +"6f503e67": "vestingOf(address,uint256)", +"6f512e61": "setSgdToEthRate(uint256)", +"6f51d01f": "getUserBlockNumber(bytes32)", +"6f52167d": "payDuel(address,string,address,string)", +"6f53a48a": "Bitprize()", +"6f53da8f": "benefitFunds()", +"6f53df6c": "EtheraffleLOTPromo()", +"6f540fe0": "setCampaign(address)", +"6f54e4df": "candyper()", +"6f54e89e": "getMaximumFunds()", +"6f5736c6": "getFreeFalcon()", +"6f5831cb": "startTokensSale(address,uint256,uint256,uint256,uint256)", +"6f584bd8": "View_TrustlessTransaction_Info(uint256)", +"6f58659b": "totalRewardIssuedOut(address)", +"6f59a5cc": "curBubbleNumber()", +"6f5b286d": "tokenUnsold()", +"6f5cca83": "withdrawForCompany()", +"6f5d616b": "execPermissions(address)", +"6f5d64fa": "FSNASAddress()", +"6f5d712e": "TOTAL_TOKEN_CAP()", +"6f5da839": "Token(uint256,string,string,uint8)", +"6f5da961": "transferEntityOwnerPull(address)", +"6f5e7398": "dasToken()", +"6f5eb4b5": "publicSell(uint16)", +"6f5f20ce": "INITIAL()", +"6f5f7ba2": "CreatedYUPIE(address,uint256)", +"6f5f8f74": "Cryptoloans()", +"6f5f9498": "InitializedManager(address)", +"6f6007bb": "StartdatePresale()", +"6f609714": "FrameworkToken()", +"6f625567": "roleAdd(address,string)", +"6f62cba3": "resetUserRefBalance(address)", +"6f62e755": "changeGatewayAddr(uint32,address,string)", +"6f63d2ec": "left66(uint256)", +"6f64234e": "sendFunds(address,uint256)", +"6f64824b": "setErc677token(address)", +"6f64ccf5": "checkVestingTimestamp(address)", +"6f652e1a": "createOrder(address,uint256,uint256,uint256)", +"6f6541e0": "SetLot(uint256)", +"6f656c2d": "getPhaseEmissionType(uint256)", +"6f6640c1": "AnthillFarmer()", +"6f66d23b": "adminGetWorldData()", +"6f6781d3": "getPosition(uint8)", +"6f68d634": "acceptTrusteeOwnership()", +"6f68fffd": "setEndSaleTime(uint256)", +"6f691500": "getMySecondAmount()", +"6f698fb5": "setMinimumQuorum(uint256)", +"6f6aadfb": "SnovPresale()", +"6f6b32ad": "PVXToken()", +"6f6b6963": "VestingCreated(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"6f6bdbe3": "specialUsers()", +"6f6c0244": "generateShortLink()", +"6f6c0759": "onlyPayForFuel()", +"6f6c7234": "setApoderadoVerify(bytes32,bytes32,bytes32)", +"6f6cd9f5": "isElectionPeriodProposal(uint256)", +"6f6d3694": "removeRound(uint256,uint256)", +"6f6eacee": "availbleToken()", +"6f6f828e": "removeAllTournamentContenders()", +"6f6f9bef": "getLandInfo(uint256)", +"6f6ff3bc": "setVesting(address)", +"6f7030f6": "calculateCuts(uint256)", +"6f704aa6": "TreasureToken(address,address)", +"6f70a22f": "deadlineThree()", +"6f70b9cb": "getWinningChildUniverse()", +"6f7154c8": "getIsStopFunding()", +"6f71f407": "freeze(address,uint8)", +"6f72fd20": "calculateBonus(uint256,uint256)", +"6f74174d": "finalizeIt(address)", +"6f741cff": "getPauserList()", +"6f7429ab": "modifyDescriptionManual(uint256,address,string)", +"6f7495cb": "unproducedCaps()", +"6f74dafe": "getGodAddress()", +"6f752f09": "backendContract()", +"6f75b00c": "removeBuyer(address)", +"6f75cd14": "DappToken()", +"6f766f20": "refundTRA()", +"6f7705c2": "becomeRichest(string)", +"6f77926b": "getUser(address)", +"6f784c5b": "totalAmountOnICO()", +"6f78ee0d": "rap(bytes32)", +"6f7920fd": "tokenCreationCap()", +"6f79301d": "getCreationTime(bytes32)", +"6f796d86": "JACK(string,string,uint8,uint256)", +"6f799cf9": "_amountRaised()", +"6f7b5a56": "getDEditorArbitraryData(bytes32,bytes)", +"6f7d9acf": "setupInitialSupply()", +"6f7f461d": "manager1()", +"6f7fc989": "teamIssue(address,uint256)", +"6f80602b": "NewOrleansCoin()", +"6f80dc23": "obfuscatedHashDataBlock(string,string)", +"6f8177f4": "MentalhealthToken()", +"6f81adf6": "Resilium()", +"6f81bdd8": "setRate(uint256,bool)", +"6f826a7d": "testIsEmpty(bytes)", +"6f82e068": "initialSupplyPerChildAddress()", +"6f838a8e": "TESTCOIN1()", +"6f8489af": "CreateGMT(address,uint256)", +"6f84eb6c": "setPatronReward(uint256)", +"6f853964": "setPriceCoeff(uint256)", +"6f8543a6": "CoWithdraw()", +"6f85c7e4": "WAITING_PERIOD()", +"6f85e62c": "buyTokens(string)", +"6f863c21": "inviteIter_()", +"6f872022": "setSectionForSaleToAddress(uint256,uint256,address)", +"6f874abb": "setgasUsed(uint256)", +"6f87dddd": "getPlayerStageKeys()", +"6f882086": "KNCBalance()", +"6f893e0d": "LeeroyPremiumToken()", +"6f8b44b0": "setMaxSupply(uint256)", +"6f8b7574": "createTransaction(address,address,uint256,string,uint256,uint256)", +"6f8c33a6": "getGoldDepositOfAddress(address)", +"6f8c3c0e": "MIToken(uint256,string,uint8,string)", +"6f8c3e4c": "SaraAndMauroToken()", +"6f8c9575": "yearFor(uint256)", +"6f8d3eb0": "withdrawPAXTR(uint256)", +"6f8d998c": "dist(uint256,uint256)", +"6f8dca87": "GetCost(uint256,uint256,uint256)", +"6f8e0a08": "getreward()", +"6f8e1fb6": "testOverflowResistantFraction()", +"6f8ee91c": "level_6_amount()", +"6f8f1de5": "mock_resetLatestPayday(address,address)", +"6f8fb2c3": "CROWDSALE_WEI_GOAL()", +"6f8fccd7": "BioChainCoin()", +"6f9090db": "setwinPercent(uint32)", +"6f90be06": "playFromBalance()", +"6f910c4b": "checkProviderOwnerSupply(uint256,bool)", +"6f9125a5": "pylonSelled()", +"6f9170f6": "isWhiteListed(address)", +"6f919068": "LogUnPause(bytes32)", +"6f91cec0": "ProvideWorkOrder(address,address,address,uint128)", +"6f92096b": "setGasForward(address)", +"6f923a7c": "LockSAToE()", +"6f925535": "revokeAccess(address,uint8)", +"6f92f186": "multiply(address)", +"6f93638e": "isSolvent(uint256,uint256)", +"6f941290": "SelfDropTokens(address,uint256)", +"6f9477c0": "BanAccount(address,bool)", +"6f947d6d": "_emitPublicCapabilityAdded(address,bytes4)", +"6f94e260": "buybackPriceOf(uint256)", +"6f94e502": "getVoter(uint256,uint256)", +"6f954161": "changePreJackpotBidLimit(uint256)", +"6f95dd0b": "RATE_DAY_21()", +"6f9607e5": "countYears()", +"6f964659": "depositMint(address,uint256,uint256)", +"6f969c2d": "getNonFungibleBaseType(uint256)", +"6f96f269": "Mehrancoin()", +"6f977413": "Property(string,string)", +"6f993a74": "rollFour(address,uint8,uint8,uint8,uint8)", +"6f9a023c": "theultimatepyramid()", +"6f9a5eab": "createTx(uint256,address,uint256)", +"6f9b0b7d": "getCurrentGameState(bytes32)", +"6f9b4c1d": "createCastleSale(uint256,uint256,uint256,uint256,uint256)", +"6f9ba978": "_reward(address)", +"6f9c3c8f": "fundReserve()", +"6f9c6194": "P2E()", +"6f9cd7b2": "mirtestToken()", +"6f9cdccd": "setMarketMaker(address,address)", +"6f9d257d": "CONFLICT_END_FINE()", +"6f9d73db": "BuyRocketForSaleEvent(address,address,uint32)", +"6f9f51c7": "RefundsDisabled()", +"6f9fb98a": "getContractBalance()", +"6f9fbd7c": "generateCrabHeart()", +"6f9fdd66": "trust()", +"6f9ff0fa": "GetDynamicCardNum(uint32,uint256)", +"6fa00f07": "agreementSignedAtBlock(address)", +"6fa01c8e": "init(bool,address,uint128,uint128,address,uint64,address,uint256)", +"6fa07d0d": "oraclize_query(uint256,string,bytes[5])", +"6fa0bf39": "getRankDynamic(uint256)", +"6fa1532e": "UpdateBalance(address,uint256,bool,address)", +"6fa15c21": "setPreIcoEndDate(uint256)", +"6fa1d6da": "totalAwardCalculation()", +"6fa23eac": "ShouWangXingAIGO(uint256,string,uint8,string)", +"6fa23f73": "setSupplyLimit(uint16,uint16)", +"6fa25d9a": "Log2_fnc(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256)", +"6fa28249": "getClaimsIdByType(uint256)", +"6fa4095e": "emitHavvenUpdated(address)", +"6fa42742": "arbitrator_question_fees(address)", +"6fa4c766": "revertFunds(address,address,uint256)", +"6fa4f5f7": "setRefPercent(uint256)", +"6fa58335": "tgeDuration()", +"6fa64cd6": "miningIncentiveTokens()", +"6fa65c4f": "MICRODOLLARS_PER_DOLLAR()", +"6fa668f3": "weiForPayment()", +"6fa6ad21": "getDeprecated(bytes32)", +"6fa6c360": "validateTranscriptHash(address,uint256,bytes32)", +"6fa81a3a": "IcoTimeRangeChanged(address,uint256,uint256)", +"6fa87f66": "Moongang(uint256,uint256,uint256)", +"6fa88aa3": "BrazilvsCostaRica()", +"6fa8de90": "changeMeatParameters(uint256,uint256)", +"6fa9ba07": "ShowMsg(bytes)", +"6fa9e255": "LiftUpVets(string,string,uint8,uint256)", +"6faa22a5": "polyToken()", +"6faa52b3": "getOwnerHistoryAt(bytes32,uint256)", +"6faaeca2": "finishBallot(bytes32)", +"6fab5ddf": "Fal1out()", +"6fab94c1": "BitplusToken()", +"6fac46e5": "numberOfRazzes()", +"6fad0a4d": "KPOP_CELEB_CONTRACT_ADDRESS()", +"6fae3d76": "access(address)", +"6faed0e5": "set_master_exchange_rate(uint256)", +"6faf4803": "BitcoinDiamondTest()", +"6faf9323": "TokensPurchased(address,address,uint256,uint256)", +"6fb1eb0c": "commissionFee()", +"6fb1edcd": "sellAllOutcomes(uint256)", +"6fb2d01e": "calculateBonusForHours(uint256)", +"6fb37c18": "TChainToken()", +"6fb3ba9e": "setWorking(bool)", +"6fb438dc": "getTotal(uint256[])", +"6fb487fc": "getListener(address)", +"6fb4adff": "changeFundWallet(address)", +"6fb642de": "setActionContract(address,bool)", +"6fb65c7f": "grantReserveToken()", +"6fb66278": "ratePreICO()", +"6fb6fde6": "AuthAdmin(address,bool,uint256)", +"6fb7110f": "BuckySalary()", +"6fb7b52e": "addCheck(address,address,uint256,bool)", +"6fb7e588": "encodeTokenId(int256,int256)", +"6fb7f147": "getPendingExplore(address)", +"6fb7fc8b": "deltaBalances(address,address,address[])", +"6fb84e84": "fetchVoteInfoForVoterByIndex(uint256,address)", +"6fb8a70d": "responseCounts(uint256)", +"6fb8b885": "RESERVED_TOKENS_FOR_ROI_ON_CAPITAL()", +"6fb93e15": "BuyARXtokens()", +"6fb99dfb": "EventRemoveManager(address,address)", +"6fb9a2b4": "newCrowdsale()", +"6fba4aa9": "GUOcoin()", +"6fba7544": "setMinStartingPrice(uint256)", +"6fbaaa1e": "currentMultiplier()", +"6fbb222a": "setExtendedPlayerAttributesForPlayer(uint256,uint8[])", +"6fbb439e": "assign(string)", +"6fbc15e9": "upgradeTo(address,bytes)", +"6fbc8456": "setUID(uint256,uint32)", +"6fbcbd4f": "WarriorGenerator(address,uint32[])", +"6fbcd0f6": "AnitiToken(address,uint256,uint256)", +"6fbcd1fb": "_getAltarRecord(uint256)", +"6fbd6f6b": "acceptContactRequest(address)", +"6fbdae47": "getArrayInfoForDepositCount()", +"6fbde40d": "setSaleAuctionAddress(address)", +"6fbe769d": "cards_black_total()", +"6fbf466c": "unscannedCaps()", +"6fc141da": "lastPaydayTS()", +"6fc14837": "setMaxStake(uint256)", +"6fc1cbbd": "RexToken()", +"6fc21429": "setgamecardintro(uint256,string)", +"6fc351c2": "Elsevier(uint256,uint256)", +"6fc3911c": "checkVerificationStatus(address)", +"6fc39a38": "changeAgencyReceiver(address)", +"6fc3b0b6": "getTime4(address)", +"6fc3c817": "confirmer()", +"6fc4f2c2": "isOnPreAuction(uint256)", +"6fc559bb": "tokenGrants(uint256)", +"6fc651f3": "TokenAGC(uint256,string,string)", +"6fc65924": "getDisputeEndTime()", +"6fc6df36": "fYou(address,string,string)", +"6fc8e920": "icoBonus4EndDate()", +"6fc90a2f": "submitSolution(uint256,string,bytes)", +"6fc98ee1": "mintTokens(address,address,uint256)", +"6fc9958a": "initBundle(uint8,uint256)", +"6fc9d5e4": "changeCompareTo(uint256)", +"6fca2023": "getSharedAccountsLength()", +"6fcac869": "BONUS_4_DAYS()", +"6fcaea0c": "set_iconiq_presale_open(bool)", +"6fcb0153": "issuanceLastAverageBalance(address)", +"6fcb1500": "defaultSweeper()", +"6fcb4463": "signUpOn()", +"6fcbb546": "extractOre(string)", +"6fcc52e7": "gujarat()", +"6fcdcb3e": "setOwnerLink(address,uint256[2])", +"6fce2d65": "updateAccount(uint256,uint16,bytes32,uint16,bytes32)", +"6fceaea2": "convertToMiniGGC(uint256)", +"6fcebff8": "ConversionSentToShapeShift(uint256,address,address,uint256)", +"6fceecf8": "withdrawRestriction(address)", +"6fcfbe85": "FAFA(address)", +"6fd075fc": "addPlayer(address,uint256)", +"6fd09735": "createDistrito(uint256,address)", +"6fd1bdea": "setProduct(uint256)", +"6fd2e6d0": "TFFC()", +"6fd37039": "WebPaisa()", +"6fd396d6": "lastRewardTo()", +"6fd3a2bc": "createTokensManually(address,uint256)", +"6fd3db86": "withdraw(uint256,bytes32,uint256)", +"6fd42b32": "safeWithdrawal(address)", +"6fd44086": "adviserSupply()", +"6fd463ed": "addressOfTokenUsedAsReward1()", +"6fd5036d": "userChannelsCount(address)", +"6fd507f2": "Tube()", +"6fd5790d": "getCuota(uint256)", +"6fd59b01": "foundationFundMultisig()", +"6fd5ab58": "getTextBytes96()", +"6fd5ae15": "level()", +"6fd63728": "feeFunds()", +"6fd7c035": "EventRedeemStatic(address,uint128,uint256,uint256)", +"6fd7c34c": "setMemberRegistry(address)", +"6fd8282f": "priceLastUpdateRequest()", +"6fd86d44": "emitAccountUnfrozen(address)", +"6fd902e1": "getCurrentBlockNumber()", +"6fd9101f": "ACAToken(uint256,address)", +"6fd9227e": "TokenSold(address,uint256,uint256,bool)", +"6fd98bee": "updateTimes(uint256,uint256)", +"6fda5534": "rockOwningHistory(address)", +"6fdada81": "proofOfRich(string,string)", +"6fdb4f42": "revokeUsers(address[])", +"6fdbc590": "CreateDil(string)", +"6fdc202f": "ownerTransfership(address)", +"6fdc45a3": "BangdiToken(address)", +"6fdca5e0": "setOpen(bool)", +"6fdcc8a9": "listRecords()", +"6fdd2ab4": "createStage(uint8,uint256,uint256,uint256,uint256)", +"6fdd5f58": "ShopKeeper(address)", +"6fde3dc0": "getRunesValue(uint256)", +"6fde8202": "upgradeabilityOwner()", +"6fde90bc": "setCCH_edit_2(string)", +"6fdf9a3f": "sendToRstForAddress(address)", +"6fdf9f28": "setBDError(uint256,bytes)", +"6fe00356": "investorIDs()", +"6fe02e98": "tier3Rate()", +"6fe0e395": "initialize(string,string,uint256,uint256)", +"6fe11695": "isMajority(uint256)", +"6fe12f07": "proverka6()", +"6fe1dbec": "sendSupportETH(address,uint256)", +"6fe1f6b4": "BAD_ERC20()", +"6fe33720": "YOTOKEN()", +"6fe356ea": "moduleIsExist(string)", +"6fe3a567": "tokenMigrated()", +"6fe3ef7c": "resolveEntityAddress(address)", +"6fe497f0": "lockStatus(address,bool)", +"6fe4c195": "lockAddress(address,address,uint256)", +"6fe5091e": "collectPayout(uint256)", +"6fe5b536": "testFailSetEnforceRevisionsNotOwner()", +"6fe64289": "RepuToken()", +"6fe665e9": "SlotMachine()", +"6fe691dc": "getUserTransactions()", +"6fe69dee": "RealtyCashToken()", +"6fe7567b": "_subPurchasedFrom(address,uint256)", +"6fe7f51c": "saleWasSet()", +"6fe83236": "getAllCardAddressesCountOfOwner(address)", +"6fe8c29e": "JEY()", +"6fe8f9c5": "freeTokens()", +"6fe9e7d7": "freezeUserFunds(address,address,uint256,uint256)", +"6fe9f632": "preICOrates(uint256)", +"6febfd02": "getSiteRewards(uint256)", +"6fee558c": "getHookOperatorContractAddress()", +"6fee8458": "burnExcess()", +"6feef2bf": "cancelTknOffer()", +"6fef4fa9": "setAllowedToSell(bool)", +"6ff026e7": "purchased_snt()", +"6ff03fc2": "_removeMaster(address)", +"6ff08dd6": "calcWhiteBase(uint256)", +"6ff10dd7": "TrioPeriodicTransfer(address)", +"6ff1c9bc": "emergencyWithdraw(address)", +"6ff1ed71": "pickUp(uint256)", +"6ff1f2b8": "refererPercent()", +"6ff26ebb": "longBuy()", +"6ff2817c": "batchDetachAssets(uint256[])", +"6ff28657": "Josephtoken()", +"6ff2c12a": "setMiniPoolEdit_6(string)", +"6ff36340": "eTimesChain()", +"6ff46ba7": "deathData_a10()", +"6ff5a670": "PortalToken()", +"6ff6c4b8": "setCreatorFeePercent(uint256)", +"6ff73201": "setCooldownTime(uint256)", +"6ff79410": "numberOfComponents(address)", +"6ff89159": "revokePermission(address,string)", +"6ff8a27e": "buyTokens(address,uint16,address)", +"6ff8e332": "allowedAirDropTokens()", +"6ff93476": "tokensAllocatedForFs(address,address)", +"6ff968c3": "successor()", +"6ff97f1d": "allTokens()", +"6ff9db5b": "msgHash(bytes)", +"6ffa1257": "etherSoftCap()", +"6ffa1caa": "double(int256)", +"6ffa1d48": "LogCreateICO(address,address,uint256)", +"6ffa1ea7": "getRegulatorProxy(uint256)", +"6ffa714d": "extractDepositCommitmentRecord(address[],uint256[])", +"6ffb341e": "calculateKebabBuy(uint256,uint256)", +"6ffbff9c": "importMET(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", +"6ffc0896": "checkIfSuccess(bytes32)", +"6ffc13ab": "POMPAMCOIN()", +"6ffc22b8": "finalizeReservedAddress(address)", +"6ffcc719": "bet(uint256,uint256)", +"6ffd673d": "getcomp()", +"6ffe67f2": "autoDestruct()", +"6ffea7bd": "preToken()", +"6fff0652": "changePlayerTeam(uint256,uint256)", +"6fff15ee": "percPoints(uint256,uint256)", +"6fffffff": "HDK_Crowdsale()", +"70011870": "credexx(address,address,address,uint256,uint256,uint256)", +"7001a2a2": "elcoin()", +"7001fcc2": "closeImports()", +"700215d0": "SellFinishedAutos()", +"70021705": "watchVideoC(address)", +"7002a4e0": "setPartIndex(uint256,uint256[])", +"7003433a": "setRealityCheck(address)", +"70037a71": "setPresaleWhitelist(address,bool)", +"7003a1a3": "EosBlock()", +"7003ce6f": "UController()", +"70049c1c": "forwardEherToOwner()", +"7004a914": "ArbitraryLocker(address,uint256,uint256,uint256,uint256)", +"7006d538": "verificaCertificato(string,bytes32)", +"7007adc9": "finalBlockNumber()", +"7008a4a3": "firstWavePrice()", +"70090164": "PRIVATE_ADDRESS()", +"70097106": "addContent(string,string,uint256)", +"700a7db1": "setCriterionTime(address,uint256)", +"700b7025": "EthereumHotCoin()", +"700c9474": "addUsers(address[])", +"700d3230": "isPiSale()", +"700dd5eb": "AuthorityNotified(string,string)", +"700df1f6": "setMigrationStabitcoinAddress(string)", +"700e17b5": "setData(uint256,uint256,uint256,uint8[])", +"700e8660": "Marriage(string,address)", +"700ef803": "SafeBox()", +"700f1a77": "clampMax(uint256,uint256)", +"700f3a1d": "addToken(string,int256,bytes)", +"700f4e40": "test_invalidProxyOwnershipTransfer()", +"700f55b2": "addTx(address,address,uint256,uint256)", +"700f9d03": "logEndBal()", +"7010129a": "tokenTransferVIP(address,uint256)", +"70101735": "releaseReservedTokens()", +"70103ea7": "setPaperFee(uint128)", +"70107c43": "_zthToken(address)", +"70119d06": "incBy(uint256)", +"70133e4f": "Xerium()", +"70144f8f": "activate_kill_switch()", +"70150282": "FMWorld(address,address,address)", +"701513c0": "addBooking(uint8,uint256)", +"70152dcf": "getPrivacyCoins()", +"7015913c": "end(bytes32)", +"70165470": "ICOFailed(uint256,uint256)", +"70183a4d": "stakingExpiration(bytes32)", +"70185b7e": "updateSafeBalance(uint256)", +"7018665b": "transferMS(address,uint256)", +"7018dcb9": "getCastleNum()", +"7018e950": "affiliatesAllocation()", +"701969e5": "Penny()", +"701ab8e2": "exitOnHaltFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", +"701adee0": "setRequireWhitelistedAddress(bool,address)", +"701b4063": "balanceOfAtBlock(address,uint256)", +"701b4631": "hasPayroll(address)", +"701b8826": "forwardTo(address,address,address,uint256,bytes)", +"701c3c28": "setApprovalRequirement(bytes4,uint8)", +"701d9ced": "setTransferOCE(bool,bool)", +"701dfb92": "HTL()", +"701e1dfc": "lastInvestorsProfit()", +"701e5729": "canInvest(address,uint256,uint256)", +"701e5e71": "_purchaseCar(uint256)", +"701fd0f1": "reveal(bytes32)", +"702056de": "REKTtoken()", +"70206b05": "RepoHandler(address)", +"7020940a": "NewHope()", +"7020b511": "chainlinkTokenAddress()", +"702123ae": "unitCoinProduction(uint256)", +"70212761": "saleFinalize()", +"7021fad7": "CheckoutLimDay(address,uint256)", +"70220023": "participantsFor3rdSale(address)", +"70228400": "isDonatedEthTransferred()", +"7022b58e": "confirm()", +"70232f00": "ClaimESC(address,uint256)", +"70239222": "testSHA256()", +"70239f0b": "serverEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", +"70243248": "PeggleCoin()", +"70245bdc": "adoptCat()", +"7024ce7b": "BONUS_ICO_ROUND1()", +"702510be": "payoutSelf()", +"7025b3ac": "ROLE_KYC_VERIFIED_INVESTOR()", +"70260363": "setSignatures(bytes32,bytes)", +"702617e7": "ERC20(string,string,uint8)", +"70267867": "_addBridgeTokenFee(uint256,uint256)", +"70269774": "changeOwnerOfMonethaUsersClaimStorage(address)", +"7026aa04": "getProveHash(address,bytes32,string,bool,uint256,bytes32,uint256)", +"70279554": "budgetAllocation()", +"7028439e": "bonusPreIco()", +"70284d19": "grant(address)", +"7028875e": "changeStrikePrice(uint256)", +"7028b3b9": "GetConsentDataCount()", +"7029144c": "init(string,string)", +"702921f5": "month()", +"70296790": "clever()", +"702a3eff": "advisorsCliff()", +"702a5f4f": "setLLV_edit_31(string)", +"702b5f0b": "calcHash(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", +"702b7bc3": "insertValueBonus(uint8,uint256,uint256)", +"702c25ee": "nextMinimumPodSize()", +"702c728e": "changeCloudsPerEth(uint256)", +"702c789e": "select_bua_position(uint256)", +"702c9535": "distributeBalances(address[],uint256[])", +"702cbbae": "isTokenAvailable(uint256)", +"702d58d8": "JiJieHao(uint256,uint8,string,string)", +"702efdf3": "suspended()", +"702f23a6": "transferAndFreezeMulti(address[],bytes32[],address,address,uint256[],uint256[],uint256[])", +"702f9019": "Start_qui_qz(string,string)", +"702fc7da": "ReviewModel()", +"70316f00": "getUserPayedInCurrentRound(address)", +"70320126": "newWitness(address)", +"70320234": "calcBonusTokens(uint256)", +"70324b77": "darknodeBalances(address,address)", +"70327ea1": "disableSelfDestruction()", +"70328770": "logBalance(uint256)", +"7032d758": "SevillavsBayern()", +"7033e4a6": "supportsHistory()", +"7033f1ac": "TNTCoin()", +"7034c939": "test_2_destroyTokens()", +"7034d190": "MainSaleBuy()", +"70354053": "UCCoinSaleIsOff(uint256)", +"70357e79": "func_08D3()", +"70359b36": "makeSuperVisor(address)", +"7036f9d9": "force_partial_refund(address)", +"7037602a": "setAccountData(address,uint256,uint256)", +"7037ec6f": "payEntryFee()", +"70385f0d": "LogPolicyAccepted(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"70387c59": "hashVerification(bytes32)", +"70393686": "getCOOHashing(address,uint256)", +"703950ff": "viewKarmaVotes(uint256)", +"7039dcdc": "setBEY(address)", +"703a6beb": "getUnitsPerPeriod()", +"703aca29": "competitorExists()", +"703add31": "animatorAddress()", +"703b1411": "requestSellforFX(uint256)", +"703bf4a5": "disableGame(address)", +"703bf91f": "betSingle(uint256)", +"703c8a99": "_openProvider(bool,string,string,uint256,string,uint8,bool,address)", +"703dbd81": "setPI_edit_8(string)", +"703df793": "updateHardCap(uint256)", +"703e905b": "getIndexByHash(string)", +"703eb724": "addShare(address)", +"703ee574": "CoinvillaSupply()", +"703f5e8a": "CaDataAddress()", +"703fa81c": "DOSTToken()", +"7040bcc9": "createPlayer(uint256,uint256,string,string,string,string,string,string,address,uint256)", +"7040f3e5": "Allowance()", +"70416f7e": "getCurrentEthFee()", +"7041d925": "outsize(bytes4,bytes)", +"704248ec": "tokensale()", +"7043ca8e": "getOwnerNickName(address)", +"7044ce75": "setTKC(address)", +"70459be2": "transferLeftover()", +"7045b469": "TotlePrimary(address)", +"704691e1": "LuckToken()", +"70477e2b": "Rozium()", +"70480275": "addAdmin(address)", +"7049a425": "MarketboardListingDestroyed()", +"7049cd98": "LinglongCatCore()", +"704a60f1": "failUserRefund(uint256)", +"704b164d": "setTradeIsOpen(bool)", +"704b6c02": "setAdmin(address)", +"704d4051": "periodSalesLimit()", +"704d4ab1": "getLostAndFoundMaster()", +"704d4db0": "poolTotal()", +"704dcedd": "LSC(uint256,string,string,uint8)", +"704dd019": "changeFeeCut(uint8,uint8)", +"704e3dda": "TokenSalePaused(bool)", +"704e7437": "bountyPart()", +"704f1b94": "registerUser(string)", +"704f236c": "freezeAccount(address,address,bool)", +"70502c5a": "testDeleteItem()", +"70505653": "arbitrationAddress()", +"705099b9": "refundTicket(address,uint256)", +"7050a1ea": "TimetechToken()", +"705145c4": "quickCloseChannel(bytes32,address,uint256,address,uint256)", +"7051a831": "setIsContainerForReportingParticipant(bool)", +"7051b075": "TransferToBuyer(address,address,uint256,address)", +"705211f4": "approveAccess(address)", +"7052dad9": "withdrawRemainingTokens(uint256)", +"7053fe8d": "finalize_contract()", +"70544b74": "emergencyDrain(uint256)", +"70544eb9": "hijackPrice()", +"7055011b": "escrowHistory(address,address,uint256,uint256)", +"7055060f": "bulkStoreHeader(bytes)", +"7055410b": "retrait_5()", +"70557298": "testTransferFrom()", +"7055d368": "vote(uint256,uint256[])", +"7056b50f": "blockstillcontracthackable()", +"7056d1f4": "burnLotIdsByAddress(address)", +"70578bda": "SPMTToken(address,uint256)", +"705791f2": "TOKEN_STARTED()", +"7057c20d": "CFD(address)", +"705882f2": "setPOOL_edit_22(string)", +"7058901e": "mtcDailyLimit()", +"70590ca2": "batch(uint256[],address[])", +"7059194e": "deletePlayer(uint256)", +"70597cb1": "startCompanySell()", +"70598a8e": "subTokenBalance(address,uint256)", +"705a3644": "block3()", +"705a940a": "disableBondingCurve()", +"705b164f": "acquireFreeEgg()", +"705b37f4": "getTotalF1()", +"705b5c27": "transferVestingMonthlyAmount(address)", +"705b7efd": "preSaleContributions()", +"705b8845": "askQuestion(string,string)", +"705bbf6b": "updatePrenup(string)", +"705bbfe6": "eastadscredits()", +"705bd32a": "fundDevelopment(string)", +"705ca5cd": "getMultiRequestIdGivenRequestId(uint256)", +"705d528d": "_addMoney(address,uint256)", +"705dae11": "cancelCraftAuction(uint256,address)", +"705e798e": "getLastRoundInfo()", +"705eeb90": "MultipleConstructorTest(bool)", +"705f4630": "chfCentsPerEth()", +"705f911d": "FareBase(uint16,uint16)", +"705fbf3d": "burnTokensAndRefund(address,address)", +"705fe7c6": "testEqualityBytes()", +"7060054d": "dynasty()", +"70606cda": "supportFreezeQuorum()", +"7060bfe4": "busyWork(address,uint256)", +"706194b9": "elenctraToken()", +"7061e777": "Etats_financiers_10111011()", +"70620168": "createBroker()", +"706247a1": "SetVotingDescripion(string)", +"7062640a": "newDeal(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"706332d1": "right46(uint256)", +"70634626": "getBTCAddr(bytes32,int256,bytes32,int256)", +"70646896": "DOWN_etherWin()", +"70646de9": "canSend(uint32,uint32)", +"7064aa96": "APPROVE_CONTRACT()", +"7064b5aa": "getPendingExploreItem(address)", +"7064d509": "tokenBonus()", +"7064e50c": "tokenIssuedMainSaleIco()", +"7064f0af": "COMPANY_ALLOCATION()", +"7065bedc": "getSettingValuesByTAOName(address,string)", +"7065cb48": "addOwner(address)", +"706605b9": "withdraw_arbitrary_token(address)", +"70660f7c": "stakeExistingContent(bytes32,uint256,uint256,bytes8,uint256)", +"70670a20": "Ethash(address[3])", +"7067e881": "RATE_FACTOR()", +"7067f915": "Constructed(address,uint256)", +"706910ff": "buy(uint256,address,uint256,uint256)", +"7069e746": "stakingEpochStartBlock()", +"706a3604": "sethardcap(uint256)", +"706a99fb": "codeExportEnabled()", +"706aba4a": "RNDInvestor()", +"706b5759": "RegisterDomain(string,string)", +"706bfed4": "accessCheck()", +"706df8d6": "getDonationInfo(uint256)", +"706dfe54": "getIssueState(uint256,bytes32)", +"706e11bc": "StartRebuy()", +"706e5b6e": "getOTCTotalSupply()", +"706eb3ab": "ethUSDOracle()", +"706ed71b": "Bomx()", +"706f6496": "goldRate()", +"706f6937": "airdropTokens(address[],uint256[])", +"706f8856": "jiGouTotalBalance()", +"706ff617": "mint(uint256,uint256,address,uint256)", +"70708a3c": "LocalToken()", +"70712939": "removeAuthorizedAddress(address)", +"70713209": "TJCoin()", +"7071688a": "getValidatorCount()", +"707188c1": "changeTime(uint256,uint256)", +"70720fe4": "_maxTokenSoldICO()", +"7072a977": "gasForOraclize()", +"7072aaa3": "newSubdomain(bytes32,bytes32,bytes32,address,address)", +"7072c6b1": "restricted()", +"70732188": "getUserTaskAtIndex(address,uint256)", +"7073c072": "getRegisteredUsers()", +"70740aab": "purpose()", +"70740ac9": "claimPrize()", +"707424fe": "contributorsIndex()", +"70743768": "voteStake(bytes32,uint256)", +"70747544": "currentCapLevel()", +"7074c091": "preSaleBonus1Percent()", +"7075b1d8": "latestMonarchInternal()", +"7076738b": "_emitWorkPaused(uint256,uint256)", +"70767f6c": "fillBidByAddress(address)", +"7076e27f": "riskcoins(uint256)", +"70775a59": "_generic(bytes,uint256,address)", +"707789c5": "setOpsAddress(address)", +"7077c11f": "SubOnHold(uint256,bool,address)", +"70780a7a": "shareholder2()", +"70788340": "Marcelo()", +"7078f424": "getHint(int256,uint256)", +"707913f0": "Add_totalLotteryValue()", +"707a4e96": "start(uint256,uint256,uint256,uint256)", +"707a7ab3": "acceptOwnerTransfer()", +"707a92b8": "FoodCoinToken(uint256,string,uint8,string)", +"707afb1d": "closest(uint256,uint256,address)", +"707b543d": "createNumber(uint256)", +"707ba39e": "VilzToken()", +"707bd28b": "endAirDrop()", +"707bda7a": "GetLastRoomAndRound(address)", +"707bdf58": "MaxTokens()", +"707c4f05": "sendAllFunds()", +"707c6b4d": "blocksInSecondCapPeriod()", +"707c750e": "sixthTime()", +"707d4349": "createPromoCity(address,string,uint256)", +"707d5fe1": "payoutBonuses()", +"707dd840": "TAGCASH()", +"707e8128": "all_referrals_count_by_address(address)", +"707f4ecd": "crowdTokensTLP2()", +"707fe454": "MODXCOIN()", +"70809757": "dispute(uint256,uint256,bytes32)", +"7081150a": "iconToken()", +"7081d5da": "getPoolAvgHatchPrice()", +"708238a0": "mainSaleFirstBonus()", +"708260b4": "teamToken2018()", +"7082b421": "parseBlockHeader()", +"7082d203": "lend(address,uint256,uint256)", +"70835d98": "CoinAllocation(address,int64,int64)", +"70835f6b": "approveAddTokenData(uint256)", +"70844f7a": "sendBadge(address,uint256)", +"708484db": "blikedUntil(address)", +"708547f3": "testUpdateLawyer()", +"70858679": "YDHTOKEN_M(string,string,uint256)", +"70859da8": "TokenReturn(address,address,uint256)", +"7085b579": "b2s(bytes32)", +"70862562": "distributeTokens(address,address,uint256)", +"7086528e": "DemocracyVote()", +"70876c98": "purchase(uint256,uint256)", +"7087b272": "Coneus()", +"7087ed2c": "getClaimSeed(address)", +"70887eb9": "totalSoldTokensWithBonus()", +"7088abf0": "WhiteListCrowdsale(uint256)", +"7089e4f0": "LogBuyEnabled(bool)", +"708a4947": "getOptionState(address[3],uint256[3])", +"708b2097": "TKCC(uint256,string,string)", +"708b34fe": "submitMessage(string)", +"708b9d01": "lockThreshold()", +"708bf79a": "updateMember(address,address,uint256,uint256,string,uint256)", +"708c2956": "YouGive(uint256,uint256,string,string,address,address)", +"708cfb25": "setTeamTokensHolder(address)", +"708d0c57": "updateResolver()", +"708d9fd3": "group_key_confirmed()", +"708da969": "verifyAddress(address,string)", +"708ddf7b": "submitted()", +"708e03d9": "distributionOfTokens()", +"708eef42": "transferOwnershipWithHowMany(address[],address,uint256)", +"708f29a6": "getTotalPayments()", +"708f8940": "getEXECUTION_GAS_OVERHEAD()", +"70905dce": "emergencyAdmin()", +"7091e0c5": "setNewOwner(address,uint256)", +"70926370": "EGGS_TO_HATCH_1BANKER()", +"70936880": "defaultWaitTime()", +"70936a6e": "freezeOf()", +"7093ab11": "privateSell2LockEndTime()", +"70948956": "PolicyPalNetworkToken(uint256,address)", +"7094d21e": "isSuccessOver()", +"70961774": "getBlockCreatedOn()", +"70964be7": "startSellingPhase()", +"7096b6cb": "receiverContractAddress()", +"7097048a": "claimDerivativeTokens()", +"70983e91": "startBoardProposal(uint256,address)", +"70984e97": "bigBlind()", +"70985eb6": "setCrowdsaleContract(address,address)", +"7098ad13": "PropertyCoin()", +"7098e670": "getFincontractInfo(bytes32)", +"70994b31": "getCollectibleDetails(uint256)", +"709a36e6": "getMiningMeta(uint256)", +"709a5359": "updatepresaleRate(uint256)", +"709bc0ff": "AntitiredToken(uint256,string,uint8,string)", +"709be206": "registerCreatorsPools(address[],uint256,int256)", +"709cc16e": "NewCup(address,uint256)", +"709cf8c0": "saleTokensVault()", +"709d8c4e": "DSPLT_A()", +"709e6ed4": "upgradeIdRange()", +"709eaa93": "minerCreatedCount()", +"709ecb39": "findPublisher(address)", +"709ef231": "sellTokens(uint256,uint256,uint256)", +"709f5ccc": "setDivisor(uint256)", +"709f6f25": "setData_19(string)", +"709f84a4": "PriceStrategy()", +"70a0014e": "projectFundingFail()", +"70a01b3d": "addInvestor(address,bool)", +"70a0246a": "toPony(uint256)", +"70a06777": "getTankAuctionEntity(uint32)", +"70a08231": "balanceOf(address)", +"70a0c458": "getBindAccountAddress(string)", +"70a0f1fe": "numChametzForSale()", +"70a14c21": "LogBump(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"70a2b84a": "toggleAvailability()", +"70a4fc11": "toggleDataViewWindow(uint256)", +"70a6c4bb": "receiverWithdraw()", +"70a7b3e8": "_validEstimate(uint256,uint256,uint256)", +"70a7e2dd": "getBunny(uint32)", +"70a8609e": "test_someOtherTest()", +"70a89986": "addContribution(address,uint256,uint256)", +"70a951ce": "TripCash()", +"70aac052": "getRequestedProductsBy(address)", +"70ab2359": "MAX_CROWDSALE_CAP()", +"70ab2822": "assertEq21(bytes21,bytes21,bytes32)", +"70ab8ba8": "creditUpdate()", +"70ac4bb9": "right32(uint256)", +"70ac62ec": "getTranslationLanguageList()", +"70ac970b": "test_24_assertGasUsage700Boards()", +"70aca69a": "lockUpEnd()", +"70acbe0e": "rate_change(uint256)", +"70aceae8": "upX(uint256)", +"70ad0cc6": "delAddr(uint256)", +"70ad858b": "infoWithdraw13()", +"70ae882f": "finishNextGame()", +"70ae92d2": "nonce(address)", +"70ae992a": "pubKeyToAddress(bytes)", +"70aecf61": "getContractReceiver(address)", +"70b0d4ac": "GetAccountIsNotFrozenForReturnCount()", +"70b1d9d4": "requestCanonicalFormat(bytes)", +"70b257a4": "pushClient(address,bytes32)", +"70b2a30f": "tokenToEth(uint256)", +"70b2ef56": "EntropyTestToken()", +"70b2fb05": "bettingEnd()", +"70b3b0e5": "countriesWallet()", +"70b3c7de": "CrypteloPublicSale(address,address,address,address)", +"70b3d68c": "signHash(uint256)", +"70b3db6f": "getCoinAge(address,uint256)", +"70b45ca0": "_rateFromDay(uint256)", +"70b57415": "product2_pot()", +"70b581ad": "finalize(string)", +"70b60760": "getNodeIdsLength()", +"70b7596b": "getWinnings()", +"70b7f9f3": "setTradingAllowed(address,bool)", +"70b80d77": "WCME()", +"70b8206c": "getRoundRefIncome(address,address,uint256)", +"70b84e50": "joinToGame(uint256,uint8)", +"70b8d29a": "saveMsgByAdmin(string,string)", +"70ba1113": "percent()", +"70ba3339": "cancelTransaction(bytes32)", +"70bab35d": "systemStartingPriceMin()", +"70bad87e": "revokeFarmerCertificate(address)", +"70bb478f": "makeTrade(address,address,uint256,uint256,uint256,uint256)", +"70bc52fb": "protectAddress(address,bool)", +"70bdd155": "oracle_price_decimals_factor()", +"70be4ffa": "testErrorUnauthorizedSetPackage()", +"70be564b": "Trump()", +"70be61d1": "ApplicationInFundingOrDevelopment()", +"70be89c1": "addAddressesToWhitelist(address[],uint256)", +"70be8a86": "ownedCoin(address,uint256)", +"70bf7b96": "_collect_fee(address,address,uint256)", +"70c0b647": "getOwed(address)", +"70c0c516": "directMintLimit()", +"70c0f689": "getApplicationState()", +"70c10578": "takeProfit()", +"70c18199": "getResponse(uint256)", +"70c1854e": "FLOCK()", +"70c31afc": "tokenImprint(uint256)", +"70c33b31": "changeGasRequired(uint256)", +"70c35951": "referralPercentOfTotal()", +"70c40842": "_setTokenOwner(address,uint256)", +"70c4488d": "validNick(string)", +"70c494fc": "ATC()", +"70c4ce24": "newListing(string,uint256,string)", +"70c4f2e1": "MIN_SHARE_OF_POWER()", +"70c55e1f": "getTradingPairCutoffs(address,address,address)", +"70c5f786": "TEAM_CAN_CLAIM_AFTER()", +"70c5fc9d": "clearTickets()", +"70c690f4": "MultiOwnable(address[],uint256)", +"70c6abf5": "resetAllData()", +"70c6b20c": "newEntity(uint256,uint256)", +"70c7e230": "change_status(string)", +"70c80630": "isOwner(uint32,int256,address,address)", +"70c8251d": "AttributesSet(address,uint256)", +"70c83314": "airDropToken(address,uint256)", +"70c8405b": "GiftGenerated(address,address,address,uint256,uint256,string)", +"70c8658a": "getNewRegistry()", +"70c8f8ad": "createFirstRound()", +"70c9edb7": "BTCRelayTools(address)", +"70ca4c26": "getLinkedAddress(address,address)", +"70ca6446": "AnotherMethod(uint256,uint256,uint256)", +"70cbed78": "oracleCallbackGasPrice()", +"70cc5e45": "kgtHolderCategory()", +"70ccd928": "hashesLength()", +"70cd89eb": "CRLperMicroEther()", +"70cd9bfd": "GPRDSQToken()", +"70cda533": "updateCoeff(address,uint8,uint128,uint256)", +"70cddf74": "addApproval(address,address,uint256,uint256)", +"70ce0765": "createPromoListing(uint256,uint256,uint256)", +"70ce90d5": "ConfirmManager()", +"70cef2b8": "getVisaPrice(address,uint256,uint256)", +"70cf7508": "isValidAirDropForIndividual()", +"70cfaa8d": "calledUpdate(address,address)", +"70cfab63": "chargeFeeAndLockEthBalance(address,uint256)", +"70d01861": "adminSetCity(address)", +"70d02691": "getAssetBalances(address)", +"70d07575": "awardTokens()", +"70d084c0": "SingularDTVCrowdfunding()", +"70d0c5d8": "EOUNCE()", +"70d0cc86": "getElementView(uint256)", +"70d12c31": "resetPeerWallet()", +"70d1383d": "createEditionMeta(uint256)", +"70d17adb": "isDrawn(uint256,address,uint256)", +"70d19a43": "itemCancelMarketsWhenPaused(uint256)", +"70d1cde4": "randomCount()", +"70d1e6b4": "minimalWeiTLP2()", +"70d22f14": "addHash(address)", +"70d25a9f": "lockUpAmountStrOf(address)", +"70d271ab": "StartCampaign()", +"70d290b5": "getDoneAddresses()", +"70d37810": "makersCount()", +"70d383dc": "createManyProxies(uint256,address,address)", +"70d4d119": "giftEth(address,uint256,string)", +"70d4d7b4": "promoGen0()", +"70d53be5": "find()", +"70d54287": "VantageToken()", +"70d5ae05": "burnAddress()", +"70d60adf": "acceptBid(string,uint64)", +"70d66693": "drainToken()", +"70d695f7": "VerifyEd25519Packed(bytes)", +"70d70e9b": "getCofounders()", +"70d72d63": "getAllPixels()", +"70d762c2": "basicDayPercent()", +"70d7a0e7": "authorizeKyc(address[])", +"70d81666": "LogS(string)", +"70d8915a": "getApplicationAddress()", +"70d94ed0": "getHoldAmount(address,uint256)", +"70d9f7dc": "awardItemRafflePrize(address,uint256)", +"70db69d6": "maxBuy()", +"70dbb783": "AMBASSADOR_TWO()", +"70dc4de5": "withdrawKRI(uint256)", +"70dc8259": "totalDistributedi()", +"70dc86cd": "EARLY_FOUNDERS_CAP()", +"70dd2e06": "setMinActivatedToken(uint256)", +"70ddeb03": "CRMTToken()", +"70de1e30": "getItemItemId(uint256)", +"70de8c6e": "start(string,uint64,uint8,uint32)", +"70dea79a": "timeout()", +"70df42e1": "changeBurnBounds(uint256,uint256)", +"70e0abb1": "returnInvestmentRecursive(uint256)", +"70e0bd61": "setTrustedMinterAddr(address)", +"70e18692": "cancelIncompleteOrders()", +"70e32ae7": "firstBonusLimitPercent()", +"70e3ccf7": "initMiaoMiaoAddress(address)", +"70e44c6a": "Withdrawal()", +"70e4b809": "_setBuyTime(uint256,uint32)", +"70e5bf4d": "queryVote(uint256)", +"70e6b2b9": "makePayableRegistration(bytes32)", +"70e6d387": "evolveCryptoAvatar(uint256,uint256,uint256,uint256,uint256)", +"70e71ea3": "etherandomSeedWithGasLimit(uint256)", +"70e7732d": "getSpecificSellerTransaction(address,address,uint256)", +"70e87aaf": "move(uint8)", +"70e8c1b3": "test_complexNewProposalAndVoting()", +"70e8dffa": "TokenHold(address,uint256)", +"70e9a612": "BariCoin()", +"70e9ff60": "cancelBuyOrder(address,uint256)", +"70eaa1b4": "Error(uint32)", +"70eae6c0": "travelTotalEarning()", +"70eb6424": "setSmsCertificationRequired(bool)", +"70ebf814": "addUntrustedSelfDelegation(bytes32,bytes32,bytes32[2])", +"70ed00e2": "repayBorrowBehalfInternal(address,uint256)", +"70ed0ada": "getEthBalance()", +"70ed1664": "organizer3()", +"70ed2726": "updateUtilizedFundsByUser(address,address,uint256)", +"70ee555c": "returnTickets(uint256)", +"70ee9edd": "PublicMiningReward()", +"70ef14de": "Drops(uint256)", +"70f0c351": "purge()", +"70f0dfee": "MultisigWalletZeppelin(address[],uint256,uint256)", +"70f18295": "TokenPETER()", +"70f18bcd": "UnlockToken()", +"70f199d2": "indAddress()", +"70f37d27": "fundPool()", +"70f4a7b2": "Th_stage3(uint256)", +"70f4c18c": "oracleQueryType()", +"70f5b71c": "createController(address,address)", +"70f5d3de": "WthdrawToCreator(uint256)", +"70f6489e": "WHOIS(address)", +"70f65977": "_migrateToken(address,address)", +"70f6ac15": "RegistrationDeposits(address,address)", +"70f6c906": "_refundWEICustomer(uint256,uint256)", +"70f705ba": "ChargersCount()", +"70f74228": "TokenATC(uint256,string,uint8,string)", +"70f79b84": "SEO()", +"70f80828": "reactions(uint256)", +"70f85731": "setPhaseEndingCriteria(uint256,uint256,uint256,uint256)", +"70f8de1f": "changeGasFee(uint256)", +"70f9c021": "forcePay(uint256,uint256)", +"70fa66db": "deauthorizeCasino(address,address,uint8,bytes32,bytes32)", +"70fbf6e5": "openGamePlayNos(uint256[])", +"70fd37cf": "totalInvestments()", +"70fde32c": "mul(uint96,uint96)", +"70fe19a3": "blocktubeFarming()", +"70ff6325": "withdrawTuneBalances()", +"70ffe53d": "mood()", +"71007509": "refundTokens()", +"7100a4e6": "addAccessory(uint256,string,uint256,uint256)", +"710164e7": "getVATCompensations(uint256,uint8,uint256,uint8)", +"71026acc": "EXPECTED_START()", +"7102b728": "vested(address)", +"7102c138": "Standard_Token(uint256)", +"7102f74d": "recalcTokenPrice()", +"71037b1e": "flagUSInvestor(address)", +"71039256": "BUCToken()", +"7104a142": "getNumberOfVerifiers()", +"71056a78": "ChangeEtherGasProvider(address)", +"71061398": "getRoles()", +"7106312c": "emergencyAddr()", +"7106bd46": "mintContractByIndex(uint256)", +"7106cdb6": "CloudexchangeCrowdsale(uint256,uint256,uint256,address)", +"7107283f": "create_tablet(bytes32)", +"7107d7a6": "minBuy()", +"710908c9": "levelThreeBonus()", +"71098a35": "startStop()", +"71098e15": "totalSTC(uint256,uint256)", +"710ad128": "getHatchingEggData(address)", +"710b2d8c": "getAddressRatio(address)", +"710bf322": "proposeOwnership(address)", +"710c6705": "updateCapFlex(uint32)", +"710cba8b": "isAllowedOverrideAddress(address)", +"710d6a61": "unPauseTransfers()", +"710dff42": "isdrawadm(address)", +"710e5d2f": "setMaxFee(uint256)", +"710ed77a": "revokeAccessbyDelegate(bytes32,address,address)", +"710edb10": "multisignWallet()", +"710ee68e": "DOGEToken()", +"710f3953": "add_entity(string)", +"710fe6f8": "getWithdrawBalance()", +"710ffc72": "changeTribeOwner()", +"71101891": "DharmCoin()", +"711085b2": "arr(address,address,uint256,uint256,uint256)", +"7110ce25": "MyRefReward()", +"7110eed7": "createRegistryInstance(address,address)", +"7111abf2": "SessionOpen(uint256,uint256)", +"7111ed97": "TopPayCoin()", +"71135f8b": "setStopped()", +"7113d35d": "pickFood(uint256,string,string,uint256,uint256)", +"7113e5e2": "findKey(address,uint256,uint256,uint256)", +"71140942": "MIN_ETH_FUND()", +"71145486": "rebuildManagerList()", +"71147d32": "STRC_ADDR()", +"7114a96e": "transferReferral(address)", +"7114c13a": "sendTaster(address)", +"71156c73": "TheFund()", +"7115c8bd": "xdao(uint256,string,string)", +"7115c988": "Batch(address)", +"711619de": "setPubEnd(uint256)", +"711748a3": "removeModuleAtIndex(uint256)", +"71175249": "INEXToken()", +"7118f854": "icoSuccess()", +"711953ef": "setGameAddress(address)", +"7119a490": "setBtcPriceProvider(address)", +"7119c873": "transferSSPRecord(address,address)", +"711b4871": "getOptionBuyOrders(uint256,uint256)", +"711bf9b2": "setAuthorized(address,bool)", +"711bfa89": "month12companyUnlock()", +"711c2b94": "setTestMarket(bytes32,bool)", +"711caf40": "transferStep3(address)", +"711cbc26": "PartyRegistry()", +"711d11bf": "ev(string,address,uint256)", +"711d4407": "updateBonuses(address,address,bool)", +"711d649b": "getCatNames()", +"711f63bf": "toBytes32(bytes,bytes,uint256)", +"7120d381": "getUpdateTokenAge(address,address,uint256)", +"7120fab4": "discountCollect()", +"71215af6": "DAYS_28()", +"712173de": "CrowdsaleStarted(uint256)", +"71221e38": "RareCoinAuction(uint256)", +"7122e857": "setParticipantWhitelist(address,bool,uint256)", +"7123691e": "removeSERAPHIM(address)", +"71236b92": "Owner(address,uint256)", +"712394b6": "nexumToken()", +"71245f6e": "BTCValue()", +"7124abf3": "getLastPayouts()", +"7124c683": "setUpdateInterval(uint256)", +"7124d613": "changePaymentAddress(address)", +"71254d9b": "setFeesDistributionPercentages(uint256,uint256,uint256)", +"7126a855": "configure(uint256,uint256,uint256,uint256,uint256)", +"7126b6ff": "_grantAdmin(address)", +"71270b46": "initCards(uint256)", +"7128ad73": "PaymentReceived()", +"7128defb": "removeSupervisor(address)", +"712980a2": "banUser()", +"712a10bf": "COIN_SUPPLY_ICO_PHASE_2()", +"712a5094": "balanceOfTheContract()", +"712aa191": "isValidCustomerTxPaymentForKWh(address,bytes32)", +"712ac60e": "onRemoval(string)", +"712b1ed0": "triggerInput()", +"712bb1b8": "getDataColla_AA_01(string)", +"712c0c5a": "withdrawDirectDebit(address[],bool)", +"712c3f7a": "addressPartnershipsAndExchanges()", +"712ca0f8": "getOrder(string)", +"712dd575": "raiseSellOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"712f22a0": "getVolumeBonus(uint256)", +"712f4d70": "_generateShortLink()", +"712f5e72": "SetRoundTime(uint256)", +"712f7790": "publicGetStatus()", +"713081d0": "setPromoter(address)", +"7130d7ce": "get_asset_event_details(bytes32,uint256)", +"71313365": "ICO076()", +"7132d337": "citadelTransfer(address,uint256)", +"7132ebcd": "switchPaused(bool)", +"7133c0c0": "calcAmount(uint256,uint256)", +"713494d7": "setReferralFee(uint256)", +"7136982b": "getHolderCount()", +"7136d509": "playCEELO(bytes32,uint256[6])", +"7137047a": "setDealCancelRate(uint256)", +"7137b024": "Banliang()", +"7137e072": "getAllTemplateProposals(address)", +"7137ed47": "setProxyContract(address)", +"7138364b": "adventureItem()", +"7138bc92": "transfer(address,address,address)", +"7138e0c9": "divForSellBack()", +"7138ef52": "right9(uint256)", +"71393c60": "storeLedgersInIpfs()", +"713942f7": "getUserVerified(address)", +"713955e8": "ico2endTime()", +"71395818": "ItemsMarket()", +"71398637": "batchToApplyMilestone(uint8,address[])", +"7139b1ca": "balanceOfRoutingCode(bytes32)", +"7139b595": "withdrawDthShopAdmin(address,address)", +"713a7eef": "Xingqiub()", +"713b563f": "database()", +"713be000": "checkoutCart()", +"713be126": "changeRateSetter(address)", +"713d30c6": "updateState(int128,uint128,uint8,bytes32,bytes32)", +"713eba52": "OwnershipRequested(address,address,bytes32)", +"713ec905": "recordAddress()", +"713f5e4d": "sendEthToContract()", +"713fd253": "Limit_Amount()", +"713ffc3b": "setNextGameSettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"714064f3": "BreakableBond(address,address,uint256)", +"7140bdf3": "get_all_best_offers()", +"7141856d": "getNumProps()", +"7141aa8b": "getTitulaire_Compte_3()", +"7142087c": "allowTransferGlobal()", +"71427ac1": "SuperLitecoin()", +"7142b17d": "dataForOwner(address)", +"7142b191": "MultiplesaleAirdrop(address[],uint256[])", +"7143059f": "getParticipant(address)", +"714383ad": "HYPEToken()", +"71443c4d": "soldDragons()", +"714490ab": "WithdrawToBankroll()", +"7144e81e": "Cremit()", +"71450e30": "tierIndexByWeiAmount(uint256)", +"7145644c": "calculateBTS()", +"71461be9": "getCurrentMilestoneProcessed()", +"7146bd08": "MAX_PURCHASE()", +"71476f35": "clear(address,address,int256)", +"71478fae": "_getTokenIdFromBytes(bytes)", +"714897df": "MAX_VALIDATORS()", +"71489835": "isRed()", +"7148ba36": "_createCard(string,uint256)", +"71492685": "getTo()", +"714a2f13": "assertEq(int256,int256,string)", +"714b1443": "CancelBuyOrder(bytes32,address,uint256,address)", +"714b4465": "MakerTransferredEther(address,uint256)", +"714c5d9d": "BMT(uint256,string,uint8,uint256,string)", +"714ca446": "adopt(uint32,int256)", +"714ccf7b": "setVault(address,address)", +"714d497a": "maxPerExchangeBP()", +"714d582e": "sdc(address)", +"714d5fae": "cancelRemoveOwnerRequest2()", +"714d9537": "cancelEvent(bytes16)", +"714dc20d": "ownerChanged(address,address,address)", +"714e2ec9": "vanilCoin()", +"714e42a1": "getSaleRate(uint256)", +"715018a6": "renounceOwnership()", +"71506977": "EXCHANGE_RATE_DECIMALS()", +"7150773d": "donateFunds()", +"7150d8ae": "buyer()", +"71513e9d": "reSet()", +"71515a36": "SXSYCoin()", +"7152f800": "gameResult()", +"71535f0d": "tenthTime()", +"71543cfc": "unWhitelistUsers(address[])", +"71543f39": "Eetgccoin(uint256,string,string)", +"715469d0": "logoX()", +"7154ae61": "CheckNumbers(uint8[5])", +"7154b798": "addExploreData(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7154b8b5": "setPercent(uint256)", +"71551178": "testDisputedInvalidSequenceWrongReadAddress()", +"71560f80": "emulatePurchase(address,address,uint256,uint256)", +"71582f54": "IsSetReferrer(address)", +"715851a0": "getCheckingBalance(address)", +"71586383": "totalTokensReceived()", +"71587988": "setNewAddress(address)", +"71589d6b": "newponzi()", +"7158e346": "NatCoinCrowdsale(uint256,uint256,uint256,address)", +"7159271d": "publicsalestartTime()", +"71599987": "increasePendingTokenBalance(address,uint256)", +"7159a618": "operate()", +"7159db81": "lastTier()", +"715b208b": "getAllAddress()", +"715b99f8": "_isSignedPrefixed(address,address,bytes32,uint8,bytes32,bytes32)", +"715d4a64": "sellsubscribers()", +"715d574e": "CarboneumToken()", +"715db6ea": "TheMark()", +"715e0e4e": "repurchase(address,uint256)", +"715ed24b": "setVIPThreshold(uint256)", +"715eddda": "starbaseEpAmendment()", +"715ede94": "auction(bytes32)", +"715ef43d": "newPurchase(address,uint8,uint8)", +"715ef4ff": "resendFailedPayment(uint256)", +"715f8975": "JOINT_PER_ETH()", +"7160138c": "unlockedTeamStorageVault()", +"71608d05": "getBalanceModificationRounds(address,address)", +"71612620": "transferFST(address,uint256)", +"71616b84": "calculateTokenCrowsale(uint256,uint256)", +"7161c5df": "setBracketPrice(uint256,uint256)", +"7161c66d": "RunManager(bool)", +"716210d8": "addHodler(address,uint64)", +"7162f182": "resetRip()", +"716344f0": "preIcoEndTime()", +"716437b5": "testApproveTransfer()", +"71645971": "toList()", +"71658552": "getUint(address,bytes32)", +"71658896": "getTopic(uint256)", +"71674ee5": "maximumIcoRate()", +"7168e5d3": "ownerSetAdmin(address)", +"71697efa": "getSumWithdrawals()", +"7169a63e": "IcoCancelled()", +"7169afa6": "getOldFrozenAccount(address)", +"7169dd5d": "intial_supply()", +"716adc36": "setMyOracle2(address)", +"716af639": "minePoP(address,uint256)", +"716c0a31": "computingCharge(uint256)", +"716d3c6c": "adjustReward(uint256)", +"716e5604": "startItemRaffle(uint256,uint256)", +"716f10bf": "isWhitelistOn()", +"71716992": "ThankYouToken(uint256)", +"71726f69": "HOWEOToken()", +"7172a1f2": "testLedgerCreation()", +"7172d9f0": "OtomatizToken()", +"71740d16": "numDarknodesPreviousEpoch()", +"7174164b": "XPTToken()", +"71748a8b": "WSR(address)", +"7174ac9e": "setEscrowedTaskBalances(uint256,uint256)", +"71752d06": "getOwnerByItemTypeAndId(string,uint256)", +"7175d709": "SPARCAddress()", +"71765e74": "VendMultiSigWallet(address[],uint256)", +"71766ae3": "disableManuallyBurnTokens(bool)", +"71773fc2": "lasttimereduce()", +"7177a7dd": "canTransferTokens()", +"71781a79": "subToken(address,uint256)", +"71784312": "distributeVariable(uint256,address[],uint256[])", +"71793195": "__isFeatureEnabled(uint256)", +"7179d079": "mainFundBalance()", +"7179ed22": "autoPrice()", +"717a195a": "setOutcome(int256)", +"717a945a": "USD_Omnidollar()", +"717b3726": "transferFromBank(address,uint256)", +"717cb858": "ZUE()", +"717cee7d": "updatePeriodDuration(uint256)", +"717d5527": "getMoney(address)", +"717de52e": "creditCommons()", +"717e1418": "VebionX()", +"717e9745": "setNewControllerAddress(address)", +"717f24c6": "emergencyWithdraw(address,uint64)", +"717f6f7f": "MYCCToken(uint256)", +"717fecea": "vesting2Withdrawn()", +"717fedf0": "getFirstActiveDuel1()", +"717ffe91": "buyTokensAsset(address,address,uint256)", +"7180dd8a": "_giveToken(uint256,uint256)", +"718167c4": "AddValues(uint256,uint256)", +"718228fa": "totalTeamContributorIdsAllocated()", +"7182774d": "exchanged()", +"71827791": "nextContributorIndexToBeGivenTokens()", +"718350a9": "_removeMaliciousValidatorAuRa(address)", +"7183616c": "notarize(string)", +"7185354b": "changePerEthToBlocNumber(uint256)", +"7185393c": "updateAppExec(address)", +"7185637b": "DailyDivsSavings()", +"71857000": "setLogic(address)", +"7185acb8": "viewMyComponent(uint256)", +"7185f163": "stopTrading()", +"71863031": "isPublicIcoActive()", +"71868032": "addOffChainAddresses(address[])", +"71873971": "PROOF_TOKEN_WALLET()", +"71882ab0": "distributeContest()", +"7188c8a4": "reFunding()", +"71892e3f": "getMyKnowledge()", +"718aa629": "NEX()", +"718b0a32": "withdrawBuyDemand(uint256)", +"718bd6dd": "setRequestUntil(uint8)", +"718c025a": "ethPreAmount()", +"718c6569": "TimeSecondToken(uint256,string,string)", +"718cc769": "makeBet(uint256)", +"718d763a": "playerCost()", +"718da639": "addNewSecretHash(bytes32)", +"718da7ee": "setReceiver(address)", +"718df9d7": "getPlayerSpaceshipUpgradesById(uint256)", +"718dfb7e": "hasPreICOClosed()", +"718e6302": "play(string)", +"718e6c44": "isManageable(address)", +"718eaa50": "setLayerParent(address)", +"718ec079": "setMarketCreationCost(uint256)", +"718f81c2": "getCCH_edit_11()", +"71906087": "airdropToAdresses(address[],uint256)", +"719102d7": "createItem(uint256,uint256,uint256,uint32)", +"7191474b": "pendingUFT()", +"71929547": "OceanScapeCoinAdv(uint256,string,string)", +"7193ab70": "balanceUnlocked(address,address)", +"7193b1e4": "refundCfd(uint128)", +"7193f2f0": "supported(bytes32)", +"719591c7": "requestComputation(string,string,uint256,uint256)", +"7195d944": "dataOfPart(uint256,uint256,uint256)", +"7195eed2": "EtalonGlobalToken()", +"71974cbe": "lastBidBlock()", +"7197c6d2": "firstTTax()", +"719874da": "profitFromCrash()", +"7198801d": "getWorkTime(uint256,uint256)", +"7198e08c": "createLoveBlock(string,bool)", +"7199139f": "TheAbyssDAICO(address,address,address,address,address,address,address,address,address,address,address,address)", +"7199f6d4": "safedrawal(uint256)", +"719a0f8c": "removeOfficer(address)", +"719b2e07": "setDisputeRoundDurationInSeconds(uint256)", +"719c78ac": "setCodedate(uint256)", +"719c86e3": "team_lock_count()", +"719ce353": "Brokenwood()", +"719ce73e": "prizePool()", +"719f2fb7": "_calTeamAttribute(uint8,uint8,uint8,uint32[11])", +"719f3089": "getLocks(address)", +"719f8d3a": "checkIfWhiteListed(address)", +"71a009ad": "BRLTOKEN()", +"71a03078": "TMCToken(uint256,string,string)", +"71a04009": "newIssuer()", +"71a18bfb": "emergencyDrain(address)", +"71a2e46d": "OWN_transferOwnership(address)", +"71a2f964": "newPaymentAddress(address)", +"71a4dc5e": "getLuckyblockEarn(bytes32)", +"71a5367f": "setAllowPaymentsWhenPaused(bool)", +"71a66e7c": "addOrUpdateHolder(address)", +"71a67aa9": "getFunctionAuthorizationHash(address,address,string,bytes32)", +"71a7462e": "balance_(address,address)", +"71a7c439": "distribute21ST(address[],uint256)", +"71a80ba3": "setBurnFeeReceiver(address,address)", +"71a8270a": "buyObizcoinTokens(address)", +"71a8ba25": "getEtherBoxes(address)", +"71aa60fd": "calculateTokens(uint256)", +"71aad2dd": "preICOamountBonusLimits(uint256)", +"71ab0e3c": "sellDai(uint256,uint256,uint256,uint256)", +"71ac5c60": "WeToken(address,string,string,uint256,uint256)", +"71ad3e73": "isMakePermitted(uint256,uint256,address,address,uint256,uint256)", +"71ada3fb": "getCash(uint256,address)", +"71ae8f02": "fundingMinimumTargetInWei()", +"71ae973e": "createGen0Auction(string,string)", +"71aeae44": "hasBallotEnded(uint32)", +"71aed703": "addCandidateCache(address[],bytes32[])", +"71af5d0e": "setFailedVerificationSlashAmount(uint256)", +"71af8630": "_suicide()", +"71afc713": "marketingTokenAmount()", +"71b1d2d3": "RANGEEND_PRESALE()", +"71b22e61": "EnableRefund()", +"71b2354d": "MINC()", +"71b3659e": "currentTokenPrice()", +"71b397cf": "getCurrentRoundIsFinished()", +"71b3e7f4": "payOffLoan(address)", +"71b45696": "StcToken()", +"71b475d0": "STQPreICO3(address,address)", +"71b4f4ef": "setDEXContractAddress(address)", +"71b505ad": "setLargeCapWhitelistParticipant(address,uint256)", +"71b5ee71": "allowTokenTransfer()", +"71b6663e": "play1(address,uint256)", +"71b6a376": "setNumberOfPlayers(uint256)", +"71b6d36d": "isNotaio(address)", +"71b6d6ea": "getAttributeTimestamp(address,bytes32)", +"71b7d5c4": "priceUpdateWaitingTime()", +"71b804ee": "getBettingPrice()", +"71b80b8f": "upgradeCardConfig(address)", +"71b9b646": "saleEnabled()", +"71ba3612": "Plasma()", +"71bad4d8": "jackpotMinimumAmount()", +"71bb263d": "contractPartThree(uint256)", +"71bb3cc8": "GivethCampaign(uint256,uint256,uint256,address,address)", +"71bbefc7": "payPlatformOutgoingTransactionCommission()", +"71bc9d62": "_generateDetail(uint256)", +"71bd1f47": "MinCapReached(uint256)", +"71bdb914": "softCapLimit()", +"71bdbc9a": "SetCityData(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"71bde852": "_startNextCompetition(string,uint32,uint88,uint8,uint8,uint16,uint64,uint32,bytes32,uint32[])", +"71be0c27": "preSale5()", +"71be1851": "ShopDeployed(address,uint256,uint256,uint32)", +"71be8766": "Contribution(address,address,uint256)", +"71beae97": "currentCoinsCreatedPercentage()", +"71bf35b6": "minMinutesPeriods()", +"71bf439e": "CANVAS_WIDTH()", +"71bf5a95": "setENS(address)", +"71bfa03f": "getRedemptionBlockNumber()", +"71bfabca": "resultOf(uint256)", +"71bfd48b": "content(string,uint256,string,string,uint256)", +"71c02b7b": "BSAFE()", +"71c03d76": "get_rest(uint256)", +"71c10778": "weiToPresalersFromICO()", +"71c147fb": "addAccount(string,uint256,string,string,uint256)", +"71c157d1": "addInsuranceProduct(uint256,string)", +"71c1d196": "numContributors(uint256)", +"71c1dde5": "get_presale_arbits_per_ether()", +"71c24e37": "narrowRoundPrize(uint256)", +"71c2835e": "operater()", +"71c396cc": "migrationAddress()", +"71c4275a": "setWeight(bytes32,uint256)", +"71c4980b": "getBlanace()", +"71c57772": "eucDist2D(uint256,uint256,uint256,uint256)", +"71c58b25": "internalTransfer(uint256,uint256,uint256)", +"71c59097": "MainnetSurvey(uint256,string,bytes32[])", +"71c66459": "LogPaymentReceived(address,uint256)", +"71c6d4dc": "pearlContract()", +"71c6dc50": "ProofOfCraigGrant()", +"71c6e049": "addUsers(address,uint256)", +"71c78ce7": "totalAirDropped()", +"71c79588": "releaseName(bytes32)", +"71c7e923": "dDisableErc20OwnerClaim(bytes32)", +"71c80c67": "COOPET(uint256,string,uint8,string)", +"71c82c14": "setOraclizeGasPrice(uint256)", +"71c847b2": "detailsOfEdition(uint256)", +"71c85da2": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"71c8e333": "getSundownGraceTargetBlock()", +"71c93fc7": "processDiceRoll(address,uint8)", +"71c95040": "EFF(address)", +"71c9572b": "maxBidInCentsPerAddress()", +"71c9a754": "topiToken()", +"71c9e177": "SpudToDivs(uint256)", +"71ca2117": "isAuditorRegistered(address)", +"71ca337d": "ratio()", +"71cabfb8": "getYumerium(uint256,address)", +"71cacc9e": "addLotteryPrize(uint256,string,uint256,uint256)", +"71cb9769": "addIdentity(bytes32,bytes32)", +"71cbb22a": "fixed_value()", +"71cbef8a": "sendTokensAfterCrowdsale(uint256,uint256)", +"71cc4f35": "Alecrypto()", +"71cc805a": "refund(string,address)", +"71cce314": "Kolak()", +"71ce52ed": "senderIsAdvocate(address,address)", +"71ce9a4a": "forwardCallGas()", +"71cea5ae": "transferAccessOff(address)", +"71ced69d": "mintNewDNC(address,uint256)", +"71cf586f": "CanISuscribeTrial(uint256)", +"71cf5979": "market_AcceptBid(uint256,uint256)", +"71cf866e": "_redeemIsAllowed(uint256)", +"71d06675": "getInteres(address)", +"71d0cf01": "setCustomerSignature(address,uint256,bytes)", +"71d0ed05": "betsKeys(uint256)", +"71d141f9": "doOraclize(bool)", +"71d1995e": "changeEmployee1(address)", +"71d30a17": "Match(address,address,bytes32,bytes32,uint256,uint256)", +"71d31a13": "withdrawTokens5(uint256)", +"71d3de1b": "setStates(uint256,uint256,uint256,uint256)", +"71d3de2b": "JincorToken()", +"71d49910": "_emitAreaSet(uint256,bytes32)", +"71d4aa3a": "fomo3D4eva()", +"71d4edaf": "setSaleLot4StartTime(uint256)", +"71d50cc8": "payBets(bytes32)", +"71d5af66": "Upfinex()", +"71d5afb5": "extendCrowdsale(uint256)", +"71d5b5dd": "getBonusPoolTotal()", +"71d5d1c2": "updatePrincipal(uint256,uint256,bool)", +"71d5ffbe": "totalETHWagered()", +"71d6dbe1": "isClaimSegmentVerified(uint256,uint256,uint256)", +"71d6e229": "queryRole()", +"71d76096": "ICOcollected()", +"71d7c621": "createDownRequest(address,uint256)", +"71d7e4a9": "transferTokens(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"71d87948": "FixedSupplyToken(string,string,uint256,uint8)", +"71d8d421": "_isValidLicense(uint256)", +"71d8d7af": "setMaxRate(uint256,uint256)", +"71d93cb0": "interuser(address)", +"71d9ffce": "priceChange()", +"71da0e63": "_getValidRandomGenes()", +"71daca00": "grantBackerToken()", +"71dc761e": "enableERC721()", +"71dd46a9": "left19(uint256)", +"71dd8862": "IndexOf()", +"71dd99fe": "BigRisk()", +"71ddd3ad": "multifunctioncoin()", +"71de2ffc": "claimRefund(bytes32)", +"71de6362": "certificateSigners(address)", +"71df8d09": "bigInt(uint256)", +"71dfc116": "Cryptolotto10Minutes(address,address,address,address)", +"71e030d3": "TokensTransferedToHold(address,uint256)", +"71e07813": "issueDevsTokens()", +"71e11354": "updateRegistration(string,string)", +"71e12726": "getBlockStats()", +"71e1fa95": "getHtlcTimeoutBlock(bytes32,bytes32)", +"71e28126": "canFinalize()", +"71e2a657": "addMinters(address[])", +"71e2d919": "lol()", +"71e30719": "ZEC()", +"71e365a0": "AICQ()", +"71e3c76e": "claimGrant(bytes32)", +"71e3c819": "DSToken(string)", +"71e3fdc4": "moveMintTokens(address,address,uint256)", +"71e4cfd7": "ROF()", +"71e5b9ec": "scanAddresses(address)", +"71e5ee5f": "arr(uint256)", +"71e60fe6": "testFailTransferEnableNotTransferable()", +"71e68cad": "claimUsername(bytes32)", +"71e70133": "TotalTokens()", +"71e777ae": "getMemBestInvestor()", +"71e928af": "issue(address)", +"71e9f016": "CompetitionChainContract(uint256,string,string)", +"71ea29df": "blockedContract()", +"71ea3aad": "CollectERC20(address,uint256)", +"71ea6c73": "VIBEXToken()", +"71ea87ee": "getPeriodRange(uint256)", +"71ea980c": "rewardPoolWallet()", +"71eb125e": "oracleAddresses(address)", +"71eb9710": "getDebitDigest(bytes32,uint256,uint64)", +"71ec4cc1": "depositPayout(uint256,uint256)", +"71ec98dd": "issueTokensFromOtherCurrency(address,uint256)", +"71ed4664": "refundTo(address)", +"71edfe35": "hashOfTheDocument()", +"71ee2ce1": "getResponses(uint256)", +"71ee329f": "useCaptainAbility(uint256)", +"71ee872f": "TransactionSettledByMediator(uint256,uint256,uint256,uint256,uint256)", +"71eedb88": "refund(uint256,bytes32)", +"71eee1f4": "IssueStateLoaded(bytes32,string)", +"71ef0d0f": "phxCoin()", +"71ef7862": "seventhTime()", +"71efb7f7": "SimpleSafeToken(uint256,uint8,string,string)", +"71efdc21": "usedTickets(uint256)", +"71efeff1": "transferCommunityBank(uint256,address)", +"71f027fa": "updateOwnerOfWeapon(uint256,address)", +"71f098c8": "LecBatchTransfer()", +"71f0ad64": "TestCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"71f11552": "changeDNNHoldingMultisig(address)", +"71f124c5": "getDropsOf(address)", +"71f16739": "_createContract(address,uint64)", +"71f297cc": "XaurumToken(address)", +"71f4c9ae": "GameClosed(uint256)", +"71f4f65e": "yearlyOwnerTokenWithdrawal()", +"71f52bf3": "connectorTokenCount()", +"71f5584f": "sponsoredLeaderboardDataContract()", +"71f64a68": "executeTopic()", +"71f6ec3c": "get_car_propse(uint256)", +"71f6fb88": "transferWithReservingNet(address,uint256)", +"71f7aaca": "dragonIndexToApproved(uint256)", +"71f7ebf4": "_doTrade(address,address,uint256,uint256)", +"71f805bf": "numFpBits()", +"71f84164": "_sendTo(address,uint256)", +"71f8746f": "registerBuy()", +"71f90109": "hideDonations(address)", +"71f90fe6": "initializeABIHashForMod(uint256,bytes)", +"71f96211": "assetOf(address)", +"71f9b7f3": "addMultipleAddressesToPublicBuyerList(address[])", +"71f9ff89": "preICOcap()", +"71fa632f": "newVoterAllocation()", +"71fa7f37": "createNewProject(uint256,uint256,address)", +"71fcc672": "setCryptaurRewards(address)", +"71fdd6d3": "_canBreedWithViaAuction(uint256,uint256)", +"71feaac5": "greatgreatcoinERC20Token()", +"71ff01b0": "maxSupplyReached()", +"71ffcb16": "changeFeeAccount(address)", +"72004a65": "getPremiumStatus(bytes32)", +"72012ef6": "test_oneInvalidEqString2()", +"72016f75": "getNodeLength()", +"7202997e": "LogAccepted(uint256)", +"72030d03": "addresses2(uint256)", +"72052773": "deleteChallenge(bytes32)", +"72054df4": "compatible223ex()", +"72067d49": "getBountyBalance()", +"72076c57": "ColorBayToken()", +"72078e3b": "CORNERSTONEAMOUNT()", +"7207c19f": "MyToken(uint256)", +"7207d711": "RewardHalved()", +"7207f9ce": "transactionFeeMax()", +"7208b8f7": "setSkills(uint256,uint32,uint32,uint32,uint32,uint32)", +"7209036a": "fundReservCompany()", +"720b43e8": "intercrypto_cancelConversion(uint256)", +"720b7ee4": "getCardId(string)", +"720be6c7": "CrapToken1A()", +"720c142d": "setRNGCallbackGasPrice(uint256)", +"720c4798": "workshop()", +"720c5732": "TextMessage()", +"720de551": "deleteVoterForCandidate(uint256)", +"720e2a06": "GadielToken()", +"720ed642": "getModuleById(uint256)", +"720edd13": "theanswer()", +"720ee37c": "decrementBalance(address,uint256)", +"72104205": "rewardMint(address,uint256)", +"72108714": "updateHash(bytes32,bytes32,uint256)", +"7211138c": "FreedomCoin()", +"72112286": "closeChannel(address,uint256,uint256,bytes32,bytes32,bytes1)", +"72112ebc": "set_Total(uint256)", +"72117821": "GetTokenAddress(address)", +"72121dac": "FooToken()", +"7212b67e": "add_potion(uint16)", +"7212eadd": "trigger_game_end(uint256)", +"7213cff1": "hasLockedUp(address)", +"7213e335": "guthabenAnzeigen(address)", +"72142c67": "MSECStandardToken(uint256,string,uint8,string)", +"7214d6c3": "isUIntPublic()", +"721547eb": "maintainExternalContractTokenBalance(address,uint256)", +"7215513f": "addTokenClaim(uint256,uint256,uint256)", +"72159335": "voteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", +"7215b96d": "CheckAllowance(address)", +"7216ab38": "getByteFromBytes14(bytes14,uint256,bytes1)", +"7216b95c": "checkLicense(bytes32,uint8,bytes32,bytes32)", +"7216e02d": "getOracleByName(string)", +"7216ee00": "totalTrainer()", +"7217523c": "addDays(uint256,uint256)", +"721868f8": "queryTinyOracle(bytes)", +"72198ead": "setDSTMultiSig(address)", +"7219d7f7": "OrigamiTokenPurchase(address,uint256,uint256,uint256,uint256)", +"7219dd7f": "allocateTokenETHConvert(address,uint256)", +"7219fa11": "EIP20(uint256,string,string)", +"721a1f57": "endorseCredit(address,uint256,uint256)", +"721a37d2": "revokeTokens(address,uint256)", +"721b67ab": "CNYTokenPlus()", +"721bba59": "getTokenBasicData(address)", +"721c555e": "queryEscrow(address,address)", +"721d7d8e": "currentContract()", +"721dd850": "getOwnedAvatars()", +"721e117b": "getPurchaseRequirements(uint8)", +"721e9969": "getPressCount()", +"721ed9ec": "tokensICO()", +"721fa630": "pubs(uint256)", +"721fefac": "startNewDraw(uint256)", +"721ff138": "tokenMintCap()", +"7220426f": "verifyTokens(uint64,uint64)", +"7221a26a": "storeValue(uint256)", +"7221c3c0": "withdrawJackpotBalance(uint256)", +"72229abf": "setBetFee(uint256)", +"7222e9e3": "sampleToken()", +"7222fe1e": "MNY()", +"72237d97": "setTargetDiscountValue10(uint256)", +"72239313": "addAccountMinter(address)", +"7223cd19": "set(address,int256,uint256)", +"7224267c": "addDeposit(address,uint256,uint256,uint256)", +"72258f96": "allergy(string)", +"72259875": "addCourse(string,uint256,uint256,uint256,string,string)", +"72262699": "forwardOnBehalf(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"7226d055": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"722713f7": "balanceOf()", +"7227bff2": "setTransferOwnership(address,address)", +"7227c5dd": "fundMark(uint256)", +"7227c7ce": "hashNext()", +"7228057f": "ibcFunded()", +"7228b9db": "etherCap()", +"7228becb": "crowdsaleDuration()", +"72298b82": "setEndTime(uint32)", +"722bb4a8": "getSuperManagerContractAddress()", +"722bd85a": "bonusForDate(uint256)", +"722c885a": "endSeedStage()", +"722d1267": "forceWithdrawTokensToAnAddress(address)", +"722d1d13": "setProductCompletionDate()", +"722ded24": "exeSequence(uint256,uint256[])", +"722e1677": "getTotalPublicKeysCount(address)", +"722e9c6d": "Luck()", +"722f0835": "startPrivatePreICO()", +"722fe823": "getActionHistoryItem(uint256)", +"72309714": "setPresellOpen(bool)", +"7230bce8": "add(uint256,string)", +"7230eb42": "AllocatedCrowdsaleMixin(address)", +"7230ef7f": "totalGen0()", +"72317e7b": "totalWeiRaisedDuringICO1()", +"7231a876": "itemsOf(address)", +"7231af39": "getTotalGamesStarted()", +"72325c5b": "initSiriusFund()", +"72337396": "unholdFunds()", +"7233d860": "BitcoinRich()", +"7234ba0c": "MIN_CROWDSALE_TIME()", +"7235c8dd": "PeerReview(address,bytes)", +"7235d2b1": "maintenanceMode(bool)", +"7236f851": "exchangeByAdmin(uint256,address)", +"72378554": "sendToken(uint256,address)", +"7237e031": "tokenToEthTransferInput(uint256,uint256,uint256,address)", +"72388610": "paybackAll()", +"72388f7c": "mintSpecificCards(address,uint8,uint256[])", +"7238ccdb": "getLockInfo(address)", +"72397287": "createOfAthleteCard(string,string)", +"723b2b58": "getMemberListCount()", +"723c308f": "ahs()", +"723c37f7": "TokensTransferrable()", +"723e357a": "pushRound(uint256,uint256,uint256,uint256,bool)", +"723e435f": "setTokenRateInGwei(uint256)", +"723eb2cc": "hurmint(address,uint256)", +"723f291d": "cancelOpenBids(bytes32)", +"723fdfe5": "PaoTestToken()", +"724020be": "GSCT()", +"72405ab0": "approve(uint256,string)", +"7240976c": "trades(address,address)", +"7240eccf": "approveLess(address,uint256)", +"7240f67b": "countActiveType(uint256)", +"72411849": "ChangeTankSellMaster(address)", +"724121ae": "contentExists(uint256)", +"72413a3b": "VOLUME_BONUS()", +"72414501": "SMILO_FOUNDERS_AMOUNT()", +"7241450c": "deliver(address,uint256,string)", +"7241eb8c": "_bpto(uint256,uint256,uint256,uint256,address)", +"72422024": "lockMoneyOnCompoundCreation(address,uint256)", +"72432965": "AdvisorsAddress()", +"7243cfbb": "releasableAmount(address,address)", +"72440c31": "finalizeEndTime()", +"72453422": "directSellSupply()", +"7245f6e7": "stageEnd(uint256)", +"72460869": "test_threeFalseAssert()", +"72468368": "setBlockTargetDelay(uint256)", +"724693ce": "TokenSale(uint256,uint256,address,uint256)", +"7246de3d": "sanityCheck()", +"72470a14": "ShopManager(address)", +"7247390b": "vote_beneficiary(string)", +"72479140": "CreateTicket(address,uint8,uint8,uint8)", +"7247959a": "referral(address)", +"7247a50d": "virtualInvest(address,uint256)", +"7247aafd": "Callous()", +"72490c69": "GREENECO()", +"7249733c": "businessPercentage()", +"7249fbb6": "refund(bytes32)", +"724a5144": "MuneebCoin()", +"724a6246": "claimSeasonPrize(address,int8)", +"724a8487": "getTargetBlocks()", +"724ae9d0": "getMinInvestment()", +"724bc3de": "getAirdropAmount(address)", +"724bdbaf": "externalTxs(uint8,bytes32)", +"724c8393": "changeCrown(address)", +"724dbf36": "isNewBattle(string)", +"724df10a": "alreadyWithdrawn()", +"724edf00": "startTokenDistribution()", +"724fcd4c": "buyAndSetDivPercentage(address,uint8,string)", +"7250dc36": "getMemberName(uint256,address)", +"7250e224": "addDistributor(address)", +"72511fb4": "EventAddressChange(address,address,uint256)", +"72519531": "BagholderAddr()", +"7252518c": "setLockend2(uint256)", +"7252bbf2": "ethBalanceOf(address)", +"7253160b": "convertByteToStr(bytes1)", +"725326dc": "setAllowedForTransfer(address,address)", +"7254895a": "readCards()", +"7254e1ba": "afterGeneratorHook()", +"72558b73": "destroyValue(address,uint256)", +"7255d729": "createGame()", +"7255f7ad": "getLastImageId()", +"72561235": "getCreditbitAddress()", +"72565e3f": "offChainMint(address,uint256)", +"7257dac1": "removeSomeUETsFrom(address,uint256)", +"7258b901": "masterCut()", +"72593831": "withdrow(address)", +"72593b4c": "ordersCanMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes)", +"7259ac60": "Rethen()", +"7259bce3": "preSaleTokenPrice()", +"725a731d": "setPendingKNCRateRange(uint256,uint256)", +"725a7eea": "MEGA_HERO_MULTIPLIER()", +"725ad47f": "TransferERCXTokenInitiationEvent(uint256,address,string,address,address,uint256)", +"725c8bdd": "LMITOKEN()", +"725cedd3": "calculateReward()", +"725d8524": "getOption(bool,address,uint128,uint128,address,uint64)", +"725da7b4": "withdrawMicroDivs()", +"725e70a3": "getnumDeposits()", +"725ef390": "mod(uint16,uint16)", +"72601e77": "setOracleFee(uint256,uint256)", +"72601faa": "ROUND_DATA_COUNT()", +"726199b5": "notarizeHash(uint256,string,string,string,bytes32)", +"7261e469": "burn(address,uint128)", +"7261ffad": "spendGameLockedToken(address,uint256)", +"7262561c": "unsubscribe(address)", +"7262eb66": "PRE_ICO_POOL()", +"726300c7": "releaseEscrow(uint256,uint256)", +"72630a6d": "UpdateIndividualContributorCap(address,uint256)", +"7264727d": "STCToken()", +"7265d040": "startAtBlock()", +"72664744": "setDelegadoDeDistritoVerify(bytes32,uint256)", +"726678e7": "level2Bonus(uint256)", +"7266f4a4": "X3()", +"72670119": "payBonus1Address(address)", +"72675562": "extraTokensWallet()", +"7267a25b": "mainSaleMinimumWei()", +"7267f24a": "lrcReceived()", +"726802a4": "addAddressToAccount(address,bytes,bytes,bytes32)", +"7268475b": "ITSMToken()", +"7269a327": "isNonFungibleBaseType(uint256)", +"7269daa5": "requestChangeStaker(address)", +"726a3ad1": "removeReservedTokens(address)", +"726a431a": "TARGET_USER()", +"726ab4ef": "getParentHash(bytes)", +"726aeb20": "costToCreateGame()", +"726b23bf": "changeMinNac(uint256)", +"726b5bad": "endAirdrop()", +"726bd6bf": "oraclizePrice()", +"726c12c8": "FileDataInt()", +"726c6382": "Error()", +"726d0a28": "getRequest(address,uint256)", +"726d50ee": "totalCampaignsBy(address)", +"726d82a0": "SEN()", +"726df9cc": "grantService(address,address)", +"726ea051": "calculateCoinBuySimple(uint256)", +"726ee493": "withdrawStakeTokens(uint256)", +"726ef3da": "getCurrentWinnerMoveCount()", +"726f63f6": "setTokenOffering(address,uint256)", +"727089f1": "extractAllowanceLength()", +"72712bb8": "trophyAddress()", +"72729ff2": "amountRaisedInWei()", +"7272ad49": "decreaseApproval(address,uint256,bytes)", +"7274f35b": "getCoinIndex(bytes32,address)", +"72750dc1": "PANICPERIOD()", +"7275c8cb": "getRecord(bytes32,string)", +"72761e96": "execute_transfer(uint256,uint256)", +"727648a3": "submitWork(address,address,uint256,string)", +"7276509c": "purchaseBuilding()", +"72771d40": "sendList(address)", +"7277236b": "icoInvestment(address,uint256)", +"7278d080": "BTCEarth()", +"7278d623": "CurrentEntityState()", +"7278ef8e": "createExchange(uint256,string,string,uint256,uint256,uint256)", +"727a00a5": "LetsFunds()", +"727a666a": "totalLevelValue()", +"727a899a": "setHashes(uint8,string,string,string,string)", +"727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", +"727b4094": "transferStep()", +"727b4276": "setBitGuildToken(address)", +"727c2ff0": "purchaseWithGze(uint256)", +"727cdf87": "setCut(uint256)", +"727d508a": "isOpenForPublic()", +"727da487": "TTGOracle()", +"727e2422": "StudioToken()", +"727f0067": "nextHash()", +"727fc9fc": "SCAM()", +"72801b53": "isInTimeRange(uint256,uint256)", +"728064cd": "GetTotal()", +"7280850e": "getHandRank(uint32)", +"728171ba": "addressRegister(address,address)", +"7281854d": "GetCategoryValue(uint8)", +"7282c5b1": "WithdrawFeeBalance(uint256,address,uint256)", +"72840e32": "rentPeriod()", +"72841e0c": "isMaxCapReached()", +"728435a0": "ReverseProposed(string,address)", +"7284e416": "description()", +"72850e7a": "priceNeedsUpdate()", +"728516c2": "getProjectedPayout(bool,uint256,uint256)", +"72852fe5": "attackTile(address,uint16,uint256,bool)", +"72855080": "demurringFeeDenum()", +"72879610": "sencHardCap()", +"728880c2": "payOutVoterByAddress(address)", +"7288b0a9": "numberOfPingsAttempted()", +"7288b50c": "engraveNamespace(string,string,bytes32)", +"72892f4f": "newPlay(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"7289f28e": "setLastRound(uint256)", +"7289f9aa": "setDiscountedInvestor(address,bool)", +"728a6755": "buyBookLotto()", +"728addbc": "token_balanceOf(address)", +"728af7ec": "getInterest(uint256,uint256)", +"728b763c": "extendTde(uint256)", +"728c3ea2": "getBorrower(bytes32)", +"728c97ca": "returnEther(address)", +"728cbc44": "userHeldTill(address)", +"728cd741": "SnapshotAndDistributePot()", +"728cf508": "bookingMetadataForKey()", +"728d0e2b": "accrueDividendandCoupons(uint256,uint256)", +"728d3dd2": "newRaceDistCon(address)", +"728d5e94": "baseTokensPerEther()", +"728de91c": "preSale(address,address,uint256)", +"728ec9f1": "YourCustomToken()", +"728f31e7": "setTransferEnablingDate(uint256)", +"728f3a21": "isApprovedWallet(address)", +"72909e28": "calculateIdeaSell(uint256)", +"7290c21d": "auctionCancelled(uint256,address)", +"7290f691": "horseShoePr(uint256)", +"72910be0": "setTitle(string)", +"7291acdf": "SaleWindowUpdated(uint256,uint256)", +"72923378": "RockPaperScissors(address,address,uint256)", +"72927b1e": "deleteEntryByName(bytes32)", +"72929b56": "getKudosPerProject(address)", +"7294789b": "getWhaleCard()", +"7296359a": "fog()", +"729680c3": "epsAddress()", +"7296dae6": "jsonCat(string,string,address)", +"7297be7f": "changeFixedCommissionFee(uint256)", +"72987457": "blocktrade()", +"7298b261": "_calcEditorKey(bytes)", +"7299054c": "random(uint256,uint256,uint256)", +"72998d8e": "LotteryGameLogic(address,address)", +"72998ee1": "addPreSalePurchaseTokens(address,uint256)", +"729ad39e": "airdrop(address[])", +"729aeea6": "isSetupRunning()", +"729b3881": "setNewRound(uint256)", +"729c04fd": "_yearTwoClaimed()", +"729cc83e": "getPlayerKeyCount()", +"729e3ef8": "YOPT(uint256,string,uint8,string)", +"729e6f2b": "getGameChance()", +"729ee75b": "updateUSDXGE(uint256)", +"729ef530": "additionalBonus()", +"729f0e8e": "cmct()", +"729f2439": "addK(uint256)", +"72a02f1d": "finalizeInit()", +"72a06b4d": "returnInt8(int8)", +"72a0c16e": "tulipToApproved(uint256)", +"72a1a8ae": "CanSignIn()", +"72a1b73f": "createSale(uint256,uint256,uint256,uint256,address)", +"72a1e258": "updateUser(address,string,uint256,uint256,uint256)", +"72a20c78": "powers()", +"72a22014": "firstAuctionsHighestBid()", +"72a22d51": "unlockValueOf(address)", +"72a2d90c": "quickWithdraw()", +"72a4a02f": "runPreMint()", +"72a4d94b": "release(bool)", +"72a503be": "transfer(address,address[],uint256[])", +"72a52851": "checkProof(bytes32[],bytes32,bytes32)", +"72a56d2c": "ICO_RATE1()", +"72a66507": "_isNewUser()", +"72a6a480": "_validRating(uint8)", +"72a7019c": "saleHardCapEther()", +"72a74d5b": "confirmOffer(uint256)", +"72a7655e": "timestampMint()", +"72a7b8ba": "multiDecreaseApproval(address[],uint256[])", +"72a7c229": "right41(uint256)", +"72a7d8c9": "lengthEqual(bytes32[],uint256,string)", +"72a7ff87": "isKYCRequiredToSendTokens()", +"72a85604": "min_amount()", +"72a86693": "ambassadorsNumber()", +"72a88673": "nthRoot(int256,int8)", +"72a984b2": "blockMinedAt()", +"72a9e232": "reserveFunds()", +"72aa18d7": "WALLET_ECOSYSTEM()", +"72aa343a": "removeProof(address,bytes32)", +"72aa9349": "maxTickets(uint256)", +"72aab7d7": "setGPSEndTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"72abee88": "PreIco(uint256,uint256,address,uint256)", +"72acad56": "check_reward()", +"72ad21c7": "protection(uint32)", +"72ad3c9f": "OTCChain()", +"72ad5bbe": "_isErcToNativeBridge(address)", +"72adc407": "getGuardianVend(uint256)", +"72adcadd": "TOTAL_CONTRIBUTOR_COUNT()", +"72ae74dd": "getCoinRemains()", +"72ae9e54": "blocksCoordinates(uint256,uint256)", +"72af7b43": "SkyeCryptoPrivate(uint256,string,string)", +"72af805e": "sendPreIcoTokens(address,uint256)", +"72b0d90c": "withdrawTo(address)", +"72b28d27": "getNext(address,uint256,uint256,uint256)", +"72b2ee75": "investorsNum()", +"72b30d39": "setLLV_edit_30(string)", +"72b38ab9": "refundUser(address)", +"72b3936d": "EWBToken()", +"72b3f570": "endBuy()", +"72b44b2c": "getSaleReturn(address,uint256)", +"72b4e98f": "Aecium()", +"72b4f111": "COOPToken()", +"72b50845": "eliminateSDCC(address,address,uint256)", +"72b556c7": "emissionReleaseTime()", +"72b59c68": "createNote(uint16,bytes2,bytes12,bytes)", +"72b5e050": "LOCKED_ALLOCATION_PPM()", +"72b60682": "lockEndDate()", +"72b614af": "itemsPerPage()", +"72b7094a": "tokensPerEthPresale()", +"72b75585": "getOriginalClient()", +"72b7f893": "metaIncreaseApproval(address,uint256,bytes,uint256,uint256)", +"72b81b1c": "resolveLotteryByHand(uint32,uint32)", +"72b8a5cf": "bonusPersent()", +"72b8de14": "isChallengePeriodOver()", +"72b902a7": "setvolumebounus(uint256,uint256,uint256)", +"72b91e61": "seen(address)", +"72ba8259": "testMinting()", +"72baa12e": "withdrawQR(address)", +"72baa779": "setItoEndTime(uint256)", +"72bc56fe": "IsMultiFreeze(address,address[],bool)", +"72bc8fc6": "ether2tokens(uint256)", +"72bc8ff2": "isOMITokenLockContract()", +"72bc9240": "etherPerSale()", +"72be346c": "ZTR_ETH_initial_price()", +"72becdee": "_generic(bytes,address)", +"72bedcee": "operationState()", +"72bf079e": "adjustPrice(uint256)", +"72bff5ad": "freezeMintingFor(uint256)", +"72c03508": "contributorClaim()", +"72c0e7a4": "setThreshold(bytes32,uint256,uint256,address)", +"72c1591c": "testFail_basic_sanity()", +"72c174db": "mintTokensForAdvisors()", +"72c1df4c": "transferDirectorB(address)", +"72c27b62": "setFeeBps(uint256)", +"72c3015c": "mint(int256,address,string)", +"72c4639e": "SummRew()", +"72c4ae6b": "walletForCommunity()", +"72c537e6": "FirstCryptoBank(uint256,string,string)", +"72c5c349": "NinjaCore()", +"72c5cb63": "getAmountTransferred()", +"72c60b1d": "tokenAddressToAssetData(address)", +"72c691b2": "setWarTokenAddr(address)", +"72c70758": "setBountyFundWallet(address,address,uint256)", +"72c7c85a": "minority()", +"72c7e48d": "addAddressesToWhitelist(address[],string)", +"72c87075": "testBlockHeaderFetch()", +"72c87e37": "MahamHasanTestCoin()", +"72c91cdd": "maxTokenForPreSale()", +"72c9a5e3": "approveFST(address,uint256)", +"72c9e9e0": "placeBid(uint64)", +"72ca7fce": "TrueVeganCoin()", +"72cb8942": "everyCoin(address,uint256)", +"72cb8a89": "TokenWithdraw(address,uint256,address)", +"72cc1f5a": "knightAddress()", +"72ccd03a": "delWord(string)", +"72cd5576": "getImpactLinked(string)", +"72cd700b": "totalSupplyExpansionTokens()", +"72cd7b89": "foundationTarget()", +"72cde347": "setMiniPoolEdit_5(string)", +"72cee8ea": "getReferralProfit(address,address)", +"72cef34b": "getRevisionIpfsHash(bytes32,uint256)", +"72cf3b40": "recharge(bytes32,uint256,address)", +"72cfea69": "presaleClosingTime()", +"72d00e9f": "activeContracts(uint256)", +"72d0774a": "presaleFinishTime()", +"72d0979a": "AddBonusToListFromArray(bytes32[],uint256[],uint256[])", +"72d16358": "Oratium()", +"72d209f5": "processRequest(bytes32[],bytes5,address)", +"72d29f64": "setValidatorName(address,string)", +"72d2f8b8": "createHodler(address,bytes16,uint64)", +"72d32586": "STOREDIG()", +"72d32968": "withdrawBonus(uint256)", +"72d376b6": "proofTokensAllocated()", +"72d3880e": "mainICO()", +"72d39ee4": "Credo(address,address,uint256,uint256)", +"72d475db": "getTotalHeartsByDappId(uint256)", +"72d4b93c": "VitManToken()", +"72d5637f": "AxieCore()", +"72d5fe21": "changeProposer(address)", +"72d744e0": "feeFromTotalCost(uint256,uint256)", +"72d8c1c7": "ForestCoin()", +"72d8e442": "hasBeenRevealed(address,uint256)", +"72d9733e": "add_AUTO_MANU()", +"72d99675": "getCollectible(uint256)", +"72d9b86f": "unpauseCrowdsale()", +"72d9f13d": "setMaxEarningsClaimsRounds(uint256)", +"72dad9f9": "SuperCoinViewToken()", +"72db2339": "ERC677Transfer(address,address,uint256,bytes)", +"72dd236a": "setTokenOffering()", +"72dd529b": "totalsupply()", +"72dd52e3": "coinContract()", +"72dee32b": "getEndGameStatus()", +"72df02a7": "setMintThresholds(uint256,uint256,uint256)", +"72dff527": "drawTertiaryBWinners(uint256)", +"72e05569": "_sendRefund()", +"72e09d48": "mokenId(string)", +"72e0e984": "prime(uint256)", +"72e18c12": "placeSellOrder(uint256,uint256,uint256,uint256)", +"72e208eb": "targetAddr()", +"72e2cac8": "BONUS_WINDOW_4_END_TIME()", +"72e2f8f5": "checkFreeze(address)", +"72e38003": "treefs()", +"72e3c5c2": "toggleEmployeeSuspension(address,uint32)", +"72e3f040": "richestRoundId()", +"72e4030d": "_freezeTransfer(address,uint256)", +"72e496f3": "setRestrictedState(bool)", +"72e4dc06": "changeProductAvailability(uint256,uint256)", +"72e4f262": "annotationLength()", +"72e4f5cc": "CreateOffer_internal(uint8,bool)", +"72e5186c": "depositTo(uint256,address,uint256)", +"72e5c84f": "_getTokenBonus(uint256)", +"72e67d06": "setPendingManager(address)", +"72e6aca3": "isWithinICOTimeLimit()", +"72e6e21a": "exchangeableTokens()", +"72e7a69c": "isHardCapAchieved(uint256)", +"72e861ee": "private_setRandomAPIKey(string)", +"72e87c35": "giveProduce(uint256,string)", +"72e8e6a4": "PublicMined(address,uint256)", +"72e91fee": "initialPartnerAccount(uint8)", +"72e98a79": "transferBZxOwnership(address)", +"72ea1eb0": "addressBytesFrom(address,uint256)", +"72ea2e6d": "finishInitialExchangingPeriod(uint256)", +"72ea4b3d": "TestToken(uint256,string,uint8,string)", +"72ea4b8c": "getNumInvestors()", +"72ea61e8": "dist_developer(address,uint256)", +"72ea7243": "generateLand()", +"72ea8bfe": "executeBet(address,address,bool,uint256)", +"72eab193": "COMPLIANCE()", +"72ead941": "getDelegate(address,uint8)", +"72eae629": "multiMintBounty(address[],uint256[])", +"72ebe2aa": "verifyYourBalance(address)", +"72ec1993": "enablerefund(address,address)", +"72ece81c": "_create_island(bytes32,address,uint256,uint256,uint256,uint256)", +"72ed2c7f": "setQualifiedInvestor(address,bool)", +"72eda05f": "tokensAllocatedToCrowdFund()", +"72ee91c2": "configSignOrganizers()", +"72eec3a7": "refundToken(bytes32,string,address,address)", +"72eefb8a": "getRareItemsOwner(uint256)", +"72ef149e": "whiteListRegistrationEndTime()", +"72ef5458": "transferTokenOPSPlatformTokens()", +"72ef6a08": "rgbLimit(uint256)", +"72ef90e4": "Shop(address,string,string,uint256,uint32)", +"72efa4ef": "Showcoin()", +"72f0424f": "getPriceToken()", +"72f12814": "_setIDLE(uint256)", +"72f1301a": "USCCToken()", +"72f159b7": "migratePlayerData2(uint256,address,uint256,uint256,uint256,uint256)", +"72f3b3c4": "ownerAbandonOverride(uint256)", +"72f41f11": "approvedRatio(uint256)", +"72f443be": "ChangeLicense(address,bool)", +"72f4ecab": "Balances()", +"72f4f5f9": "TOKEN_REFERRAL()", +"72f52a3e": "getAttoTokensAmountPerWeiInternal(uint256)", +"72f57f1f": "withdrawUnsoldTokens(address)", +"72f5ae5f": "setCertificationManager()", +"72f5bb30": "UKToken()", +"72f5fccd": "releaseToMgmtTeam(address,uint256)", +"72f65dea": "BitstartiToken(uint256,string,string)", +"72f69a72": "getBurnRequestsLength()", +"72f6c3b5": "coinPercentage()", +"72f702f3": "stakingToken()", +"72f71894": "backTTCOwner()", +"72f74af8": "crowdfundAddress()", +"72f79b56": "btcEthRate()", +"72f83d3a": "poolSub(uint256)", +"72faebdb": "addCustomerFromACC(address)", +"72faf84a": "tokenSTCDRforBurnInControlWallett()", +"72fb54e5": "PHASE_2_PRICE()", +"72fb6f75": "MIN_INVEST_SUPPORT()", +"72fb9703": "challenge(address)", +"72fc493d": "decFeeDeposit(uint256)", +"72fc75d7": "_changeTrancheIfNeeded()", +"72fd1a7c": "changeRateSale(uint256)", +"72fd8772": "toekensForOthers()", +"72fdbf25": "increaseDividendPayments(address,uint256)", +"72fecf84": "upgradeUnitId(uint256)", +"72ff1773": "bonus_percentage()", +"72ff285e": "_calculatePayout(bytes32,uint256)", +"72ff3d87": "signedBySystem(bytes32,bytes)", +"73032446": "censorAndCover(address,uint256,string)", +"730369a7": "tokensBounty()", +"7303a559": "getCreatorMetadata(string)", +"7303ed18": "trustedUniverseBuy(address,uint256)", +"73047e93": "timeslucky()", +"73053410": "newVersion(uint16[3],address,bytes)", +"73053f70": "tokenDeposit(address)", +"7305c695": "_orderTokens(address,uint256,uint256,address)", +"7305dce1": "createPromoCollectiblesWithMining(uint256[],address[],uint256[],uint256[],uint256[],uint256[])", +"73069f94": "_claimTokens(address)", +"730720b8": "testControllerValidTransfers()", +"730736c9": "DelSocialAccount(bytes32,bytes32,bytes32)", +"730740f8": "_resumeWork(uint256)", +"7307b805": "dismissTokenOperator(address)", +"73086e58": "isFreezeTimeout()", +"730a04fd": "ArnoldCoin()", +"730a0d80": "unhold(address)", +"730a1a16": "_medalUnFreeze(uint256)", +"730a3127": "RECORDICO(address,address,uint256,uint256,uint256,uint256)", +"730a9f1c": "UncleToken()", +"730ad454": "vote(bytes32,address,bool)", +"730afd06": "_proposeAmendment(address,uint256[],uint256[],bytes32)", +"730b1952": "test_insert_updateHead()", +"730bdc96": "getHeroDetails(uint256)", +"730c1faa": "LogUnpause()", +"730c635a": "_checkToiletFlush(bool,uint256)", +"730d2221": "CWS(uint256,string,string)", +"730db1f8": "setNum(uint256,int256)", +"730e90b7": "addTipBalance(uint256,address,uint256)", +"730ef269": "getNumberOfItems()", +"730f2a96": "_transfer(address,address)", +"73107c99": "ICDStartTime()", +"7310c2e0": "Daisee()", +"73124ced": "transferLock()", +"73124ee9": "ContractDetector()", +"7312aaae": "singleWithdrawMax()", +"7312c065": "Receiver()", +"7312d625": "paySuperprize()", +"73137bd0": "buildInternalSalt(uint128,address,address,uint256,uint64)", +"73138e4f": "PRESALE_SUPPLY()", +"73139c0d": "getTokensForStage(uint256,uint256)", +"7313b3b1": "Drawing()", +"7313ee5a": "vestingPeriod()", +"7314221e": "_createDeveloper(string,uint256,uint256)", +"7315acc8": "getAllShareholdersOfArtwork(uint256)", +"7315af6f": "LandmarkCoin()", +"7315f446": "votedKickoff()", +"7316453e": "setPrice1(uint256)", +"7317a88d": "transferSingle(address,address,uint256)", +"7317c4f3": "replaceAnimal(uint8,uint16,bool)", +"731859bc": "batchLockArray(address[],uint256[])", +"7318b453": "setVotetUntil(uint8)", +"7319b43e": "playersList(uint256)", +"7319e5aa": "calculateBonus(address)", +"731a00f5": "calculateVestedTokens(uint256)", +"731a3b06": "unstakeFrom(address,uint256)", +"731ac7ed": "choosePerk(uint8)", +"731b185e": "LogSetPreICO(address,string)", +"731b3284": "Lockable()", +"731bed8b": "WithdrawalStarted(address,uint256)", +"731c2f81": "feeRebate()", +"731c7c62": "setServiceRegistryEntry(uint256,address)", +"731e1c94": "setLastPrice(uint256,uint256)", +"731e1ecd": "preMarketingSharesDistributed()", +"731f03fc": "setMinimumBuy(uint256)", +"731f49b7": "lastIdGen0()", +"731f93c5": "updateCertification(uint256,string,string,string,uint16)", +"731fb32e": "PRE_SALE_GMR_TOKEN_CAP()", +"73201667": "tokenUnlock(address,uint256,address,uint256)", +"73206348": "raiseDollarsWithdrew(address,uint160,int160)", +"7320753b": "approveConnection(address,address,uint256)", +"7321a17b": "getTotalBonusTokensByAddress(address)", +"7321ffa6": "distributeFunds(address,uint256,address,address,address)", +"73221a55": "unblock(address,bytes32)", +"732264b4": "getCommitmentsOf(address)", +"73228786": "setTokenAddresses(address[6])", +"7322dccd": "lastBlock_a16()", +"7323febe": "aa(uint256)", +"73247269": "getPoolContractPolicy(uint256)", +"73251628": "doAirdrop(address)", +"732519d5": "getSellable(uint32)", +"73252322": "RandomProofFailed(bytes32,uint256,uint256)", +"73256a8d": "SharesChainTokenCrowdFunding(address,address,uint256,address,address,address)", +"7325b084": "GdprCash()", +"732606fc": "getCooldownIndexCount()", +"732617bb": "switchAdmin(address)", +"7326b901": "getPropertyCount()", +"7326cac8": "ethIn_()", +"732726d1": "increaseLockedAmount(address,uint256)", +"732783ac": "tokensBought()", +"7328c6ec": "submitNewContract(string,address[],string,bytes32)", +"7328f531": "evaluateSkill(address,uint8,uint256,uint256,uint256)", +"7329036a": "getBlocksLeftInCurrentKick()", +"732a37c9": "SnowdenAffact()", +"732b6963": "emitEnd()", +"732bdbbf": "clearApprovalAndTransfer(address[16],address,address,uint256)", +"732c227f": "contributionCaps(uint256)", +"732d2da4": "testHasCinderToken()", +"732d565b": "ONE_YEAR_KEEPING()", +"732e632e": "assemblyTest()", +"732e77d0": "EGGS_TO_HATCH_1SHRIMP()", +"732e78d1": "_sign(address)", +"732ef12c": "fee_registration()", +"732f5d0c": "AdvancePayplus()", +"732fe2ff": "buyerCapLowEther()", +"73305f14": "Quicketh()", +"7330aba2": "getOracleAddresses()", +"7330aca4": "_isTransferAllowed(address,address)", +"7330daac": "isOnList(address)", +"73311631": "addBrand(address,string)", +"733122aa": "fromMemory(uint8[])", +"73321f03": "GateToken()", +"733261bf": "bountyAdress()", +"7332b520": "getRewardsCount(uint256)", +"73333128": "out3Done()", +"73335b46": "GlobfoneToken()", +"73339a13": "setNetworkState(uint256)", +"7333fd00": "lock4Dividend(uint256)", +"73342168": "BFToken(string,string,uint8,uint256)", +"733452bc": "Descript()", +"733480b7": "transferToICAP(bytes32,uint256)", +"7334a63f": "whatWouldPurchaseDo(uint256,uint256)", +"7334b2d7": "isBurnWallet(address)", +"7334d5e2": "editSpecial(uint256,uint256,uint16)", +"73357018": "RATE2()", +"73373879": "RecoveryQuorum(address,address[])", +"733746ba": "Snickers()", +"73379c54": "SecretNoteUpdated(address,bytes32,bool)", +"7337c993": "initiate(uint256,bytes20,address,address,bool,uint256)", +"73383832": "barrierPrice()", +"73384fd5": "addMultipleAddressesToUncappedAddresses(address[])", +"7338c25c": "hasAttribute(address,bytes32)", +"7338ddcc": "acm()", +"7338faba": "setHardCapEther(uint256)", +"73396ff4": "getLoanToDepositRatio()", +"7339affc": "UbiqTalk()", +"733ad6e3": "BHMBLU()", +"733b679e": "PRESALE_LEVEL_2()", +"733bdef0": "getStakerInfo(address)", +"733bf2f2": "setPercentageCut(uint256)", +"733ccaba": "setResolver(string,address)", +"733d8053": "containsToken(address)", +"733dca75": "registerCoin(bytes4,string,string,address)", +"733e193c": "saleHasEnded()", +"733ef936": "drainFunds()", +"733efe16": "numSkinOfAccounts(address)", +"7342048a": "transferOwnershipOfContract(address)", +"7342c484": "airdropDistributedTokensAmount()", +"73440745": "listItem(uint256,uint256,address,bytes32,address)", +"73454fe4": "StuckOnStupidToken()", +"7345a3a2": "payExcess()", +"7345da39": "logPayerStatement(string)", +"73463965": "notifyPlaceSellOrder(uint256,uint256)", +"73463c9c": "ReceivedETH(address,uint8,uint256)", +"7346ec57": "tokensToWei(uint256)", +"73475373": "trySell(uint256,uint256)", +"73479f39": "totalT8EXSold_CORNERSTONE()", +"7347a25d": "BitcoinTrade()", +"7348ac1f": "ecoSupplyAddress()", +"73493f09": "getTokensCost(uint256)", +"734a2c72": "ProjectTestToken()", +"734a56f0": "preSaleEtherPaid()", +"734b4861": "addOpenAction(string,address,string)", +"734b9a87": "mod(uint64,uint64)", +"734bb97e": "checkcoursestudent(address)", +"734ce665": "newProposal(address,uint256,bytes32,bytes32)", +"734d8287": "unclaimedFees()", +"734e21bd": "getToken(address,address,uint256,address)", +"734e3015": "newMegabox(address,uint256,uint256)", +"734f2838": "FinishCompetition(uint32)", +"734f8a4d": "kycValid()", +"735056a3": "SpoolAmount()", +"73520a2b": "getReservedTokenDestinationList()", +"7352e4b8": "setAffiliate(address,address)", +"735307fb": "createTimeLockContract()", +"73535aa7": "PixelUpdate(uint32,uint8)", +"7353a21d": "queuedAmount()", +"7353f62b": "testGetApprovalDb()", +"73545d44": "landmarkOwnershipCount(address)", +"73549604": "getFinalTime(bytes32)", +"7354eb04": "rocCoreAddress()", +"7355303e": "_priceOf(uint256,uint256)", +"7355a424": "getDataCount()", +"735631ad": "revokeTransaction(uint256)", +"7356a8a9": "getTile(bytes)", +"73580358": "ColorBayTestToken(uint256,string,string)", +"73582884": "releaseGrant(address,address,bool)", +"735958f2": "XPAAssetToken(string,string,uint256)", +"73596cfc": "Bitcoincredit()", +"73599205": "ProdDToken()", +"7359f5cf": "FundAddress()", +"735a3326": "getLeftTickets()", +"735a80b1": "test_voteSpammingAgainst()", +"735af2eb": "Rate10()", +"735b232c": "addWhitelistedTransfer(address)", +"735b266d": "icoStage1Deadline()", +"735b38a3": "getCardCanPresaleCount()", +"735b81ab": "circulationAt(uint256)", +"735bae84": "migrateRoundData(uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"735bb742": "sha256Docs(bytes32)", +"735cfff2": "valueTotalSupply()", +"735d3e81": "updatedBalance(address)", +"735d45e1": "RADIUM()", +"735d8876": "getCurrentExpirationTime()", +"735dcc8b": "devfeetodev()", +"735e9cbb": "disableModule(bool)", +"735f11b4": "updateAndWithdraw(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"735fb8e0": "fundOwner()", +"7360ab6e": "mint(address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"73611c48": "send3MilWeiToPong()", +"73618371": "Molecule(uint256,string,string)", +"7362377b": "withdrawEther()", +"73627826": "getTime(uint256)", +"7362d9c8": "addWhitelistAdmin(address)", +"7363d85b": "TMEXAddress()", +"73646c91": "updateMirroir(address,address)", +"7364a8dc": "MyBalance(uint256)", +"73654b6d": "userTransferFrom(address,address,uint256)", +"7365870b": "bet(uint256)", +"7365babe": "MIN_TOKEN_INVEST()", +"7365e1fd": "setPriceCutoff(uint256)", +"7365e2d7": "totalPresaleTokensSold()", +"736660ac": "determiningWinner()", +"7366794e": "distributeTokens(uint256)", +"73668b06": "XCCCrowdsale(address)", +"7366c68d": "calculateCommission(uint32)", +"7366e3ff": "raisedInPresale()", +"73671268": "vestToAddress(address,uint128)", +"73674ecc": "admin_deposit(uint256)", +"7367df4b": "Syndicate(uint256)", +"7367e302": "ContractCreationTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", +"7367f156": "gameSettings(uint256,uint256)", +"73681818": "EICQ()", +"73688914": "owner1()", +"7368a8ce": "create(bytes32)", +"7368b3cb": "DinsteinCoin(uint256,uint256,uint256,string,string)", +"736a0102": "bonusETH()", +"736a1b9a": "AdjustClientAccountBalance(bytes32,bytes32,bytes32,string,uint256,string,uint256)", +"736b13ae": "setRefillFor(string,uint256,uint256)", +"736c24b5": "AdsharesToken(address,address,address,uint256)", +"736c3e82": "onPayment(address,uint256,bytes)", +"736c983a": "setCurrentRevision(address)", +"736d323a": "setPausable(bool)", +"736d7c52": "isAlreadyDelegate()", +"736d7ee9": "revokeAccess(address,int256,address)", +"736ead2c": "optionsCalculator()", +"736ec05c": "setMigrateTo(address)", +"736eec58": "TransferAnimalToAnotherUser(uint256,address)", +"736fafd3": "setPreIco()", +"736fe565": "withdrawAmount(address,uint256)", +"73705090": "teamOnePrefix()", +"7370a38d": "getNumPackages()", +"7372014e": "midnight()", +"73720de9": "receiveMonthlyNRT()", +"7372196c": "PHASE_4_PRICE()", +"7372c2b5": "pull(address,address,uint256)", +"73732024": "isDeposited(address)", +"737377fe": "getTokenVolumebasedBonusRateForPhase2(uint256)", +"7373af84": "numberOfNarcosByDistrict(uint8)", +"7373f41d": "getEthereumBalance()", +"73741171": "createVCXVault(uint256,address)", +"73743fbe": "prospectors_team()", +"7374b013": "buyTDETokensWithoutETH(address,uint256,uint256)", +"737517f5": "powerUp(address,uint256)", +"73752db4": "getKYCPayload(bytes)", +"7375c0c3": "PonderGoldToken()", +"7375e0fe": "testSimpleObject()", +"7375ed82": "LogLoss(address,uint256,uint256)", +"7376678b": "finalizePreSale()", +"7376fc8d": "right67(uint256)", +"73770c01": "Updater()", +"737732b2": "DEVELOPERS_BONUS()", +"7377a036": "CloudexchangeToken(address)", +"737a7698": "transferAssigner(address)", +"737aa5a0": "remainingTokensWallet()", +"737c2d8c": "checkAvailableTokens(address,address)", +"737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", +"737ce916": "MT(uint256,string,string)", +"737d5f39": "AccessAdmin()", +"737d8c8e": "ChangeTokenWalletAddress(address,address)", +"737e2835": "_minHouseEdgeClassic()", +"737e7d4f": "getByVersionId(uint256)", +"737f18ff": "_weiToVouchers(uint256)", +"7380fbf3": "removeMemberArrayToken(address,address,uint256)", +"73815ab7": "nfc_simplehq()", +"738198b4": "cast(uint256)", +"738228cd": "testUmlaut()", +"73826a93": "updateTokenDetails(string)", +"7382901e": "serverSeedHash()", +"73835f35": "checkIfEligable(address)", +"7383d709": "buyItem(uint256,address)", +"7383d8ee": "getEachBindAddressAccount()", +"73845cfa": "setLocked(address,uint256)", +"738486bd": "BeerCoin(uint256)", +"7385c4be": "deleteHiddenPosition(uint32,int64[],bytes16)", +"7385e1f3": "level_5_amount()", +"7386c2be": "Exilium()", +"7386f0a7": "reservedTokensDestinations(uint256)", +"7387479e": "reclaim_art_token()", +"73889677": "ownerLives()", +"73889f4a": "getHoldersCount()", +"7388fb2b": "AltTokenDistribution(address)", +"73898796": "Tier_Classic_Registration()", +"738a2679": "left85(uint256)", +"738a2cf8": "nextPaymentTime()", +"738acb3b": "sha(string)", +"738b2fac": "setSignedPublicEncKey(string)", +"738b31b5": "minimumWithdrawal()", +"738c2931": "rewardTwo()", +"738d8d82": "numberWikiPages()", +"738ddabe": "getContentIndexedAccountCred(uint256,address,address)", +"738e6d78": "checkRefund(address)", +"738fa7a4": "userRank()", +"738fdd1a": "reg()", +"7390a673": "MyEtherTellerEntityDB()", +"7390c786": "getRandomResult()", +"739112da": "safeSubtrCPCE(uint256,uint256)", +"73913545": "fundVesting(uint256)", +"73916918": "getinfowinning(address,uint256)", +"73918980": "multiTransferEth(address[],uint256[])", +"73925694": "take(uint256,address[])", +"739294d2": "setAssignedID(address,address,uint256,string)", +"7392ce80": "TokenDeployed()", +"73930ce2": "validAmount()", +"73931bbf": "getGame(bytes32)", +"73932bfd": "withDrawal()", +"7393d262": "goldenTicketUsed(address,string)", +"7393e0b2": "DayTrader()", +"7394cb3f": "addLocationRecord(uint256,uint256,string,string)", +"73962b26": "isReleased(uint256)", +"73963bf0": "setIdArray(address,address,string,string,uint256[])", +"73964787": "batchAddCancelledOrFilled(bytes32[])", +"7397d5f1": "getMintForReportingParticipantAmountValue(int256)", +"73980d69": "dollarRaised()", +"739826c5": "changeAllowTransfer()", +"739838be": "DigitalEnthusiasts()", +"73984188": "delOwner(address)", +"739890f0": "disqualifyTeam(address)", +"7398ab18": "getPosition()", +"7399646a": "theRun()", +"73998758": "smpToken()", +"739ab361": "needApprovesToConfirm()", +"739b47ca": "recordWin(address)", +"739b5014": "Snatch(uint256,address,address)", +"739b6214": "doProveMemoryWrite(uint256,bytes32,bytes32[])", +"739b78ed": "LogSell(address,uint256,uint256)", +"739b8c48": "setForwardedOutcome()", +"739bdcff": "pricePause()", +"739beded": "mintSendTokens(int256)", +"739cb57d": "setEndtDate(uint256)", +"739d3307": "SetWho(address)", +"739d980e": "address(address,uint256)", +"739e40b7": "getMyPunchCards()", +"739e7f48": "TeamChoice(address,uint256)", +"739f2224": "SetActive(bool)", +"739f763e": "getListing(bytes5)", +"739f888c": "setNewEstimate(int256,int256)", +"739f9202": "dev_share()", +"739fab1b": "getAvailableWithdrawInvestmentsForOwner()", +"73a070bc": "addressReserveFund()", +"73a077a4": "sub16(int16,int16)", +"73a17e6d": "setCompte_31(string)", +"73a19dd2": "Deposited(address,uint256,uint256)", +"73a1e7f5": "allReceivedEth()", +"73a1f366": "founderTokenCount()", +"73a22e62": "fetchPaidOrdersForMerchantByAdmin(address)", +"73a26a12": "CryptoDiamondCoin()", +"73a29b5e": "get_presale_arbits_sold()", +"73a2d1ff": "MexicovsSweden()", +"73a3d9e4": "canUpdatePercentToTakeAsSeed()", +"73a40efb": "_computeRarity(uint256,uint256,uint256,uint256,uint256,uint256)", +"73a4c307": "COMMUNITY_SUPPLY()", +"73a55389": "setRarePrice(uint256,uint256)", +"73a5717e": "BaironSupply()", +"73a5f508": "getAuditorRegistry()", +"73a699ad": "isGenesMarket()", +"73a6b2be": "isAccountValid(address)", +"73a72b18": "setFountainFoundationOwner(address)", +"73a75c1f": "addVineyard(string,uint16,uint24,uint32,uint16)", +"73a7b8b2": "storeStages(uint256[])", +"73a7dfda": "we()", +"73a80336": "prizeWon()", +"73a80b74": "_mintSqr(uint256,address,uint256,uint256)", +"73a91544": "showMigrationStabitcoinAddress(address)", +"73a95ddd": "redemptionPaused()", +"73a97787": "sgcToken()", +"73a97f42": "MetaRules(address,address[])", +"73aad472": "guaranteedBuyersBought(address)", +"73ab7503": "FlightPlan(address)", +"73abecbb": "kill1()", +"73ac4739": "getOnSellCardIds()", +"73acbcb2": "switchBleachAllowed(bool)", +"73acee98": "totalBorrowsCurrent()", +"73ad2a15": "AllowedRecipientChanged(address,bool)", +"73ad468a": "maxBalance()", +"73ad6c2d": "setMarketplace(address)", +"73ae277b": "getDepositAddressVerify()", +"73aef263": "FDSToken()", +"73aef2b6": "unFrozenControl(address,uint256)", +"73af6308": "setTierLimit(uint256)", +"73af652c": "setCollectibleExposure(address)", +"73b1184e": "setupVote(uint256)", +"73b14098": "getTotalDevelopmentFundEarned()", +"73b1edce": "_lock(address)", +"73b24ca0": "indInflation()", +"73b2c384": "_computeBorder(uint256)", +"73b2e80e": "hasClaimed(address)", +"73b34271": "ETH420on49()", +"73b38101": "wipe(bytes32,uint256)", +"73b3dcde": "maxDestroyThreshold()", +"73b4086b": "loans(address)", +"73b40a5c": "forwardTo(address,address,uint256,bytes)", +"73b4484f": "registerA(string,string,string,address)", +"73b47908": "_updateCounters(uint256,bytes32)", +"73b4df05": "createToken(string,address,uint256)", +"73b51d38": "startWork(string)", +"73b51f0b": "_tokenDelivery(address,address,uint256,uint256)", +"73b55eaf": "registerData(address,int256,bytes32,address)", +"73b5abaa": "PresaleDiscountPercentageChanged(address,uint8)", +"73b6656f": "relay(address)", +"73b68be8": "preicoAddresses()", +"73b6a48a": "GetDataRequest(uint256,bool,string,uint256)", +"73b793a8": "PrizeFund()", +"73b8a8c1": "MeetOneCommunityBonus()", +"73b913fa": "safeTransferManyFrom(address,address,uint256[])", +"73b972bc": "bonusTokensIssued()", +"73b9aa91": "account(address)", +"73baae7a": "KingKongCoin()", +"73bbda81": "standardTokenDefrosting(address[])", +"73bc1b2f": "customerPool()", +"73bc8b2f": "kvcSub(uint256,uint256)", +"73bc8b77": "SPIDER_BOOST()", +"73bda17e": "restrictedTokens()", +"73be0a99": "getData_7()", +"73be6ddd": "allowEscrow()", +"73bf2ce0": "getMilestoneHashById(uint256)", +"73bfb566": "withdrawFromProject(address,uint256)", +"73c107b3": "checkWins(uint256,uint256,uint256)", +"73c1af76": "deleteFreezeList(address)", +"73c24cb1": "Buy(uint256,address,uint256,uint256,uint256,bytes16,bytes32)", +"73c261f4": "getRegionUpdatedAtPurchasedAt(uint256)", +"73c28692": "disallowFunding()", +"73c2ec65": "sendbal(address,uint256)", +"73c32a71": "get_property_basic_info(uint256)", +"73c4726b": "minHouseStake(uint256)", +"73c4942a": "depositStopTime()", +"73c6a4ec": "acknowledgeCopieExecutoire(bytes32)", +"73c6aa7d": "ExchangeEfx()", +"73c74103": "recoverTokensTo(address,uint256)", +"73c8c4bf": "Leverages()", +"73c8d8a2": "setMaxPaymentInEther(uint256)", +"73c8de54": "issueByTranche(bytes32,address,uint256,bytes)", +"73c90b43": "calcBidAllocationFee(bytes32)", +"73ca1b28": "WHYPHY()", +"73cb0620": "fluffyCatAddress()", +"73cb8ab7": "enableTokensTransfer()", +"73cbd8ce": "getPublicSupply()", +"73cc3ec7": "iceFundDeposit()", +"73cc9153": "MeshPointManager()", +"73cce6f1": "presaleAllocateTokens()", +"73cd0a19": "allowanceBurn(address,address)", +"73cd148e": "VariableConstructor(string)", +"73cdcac4": "getPostsFromPublisher(address,string,uint256,bool,uint256)", +"73ce3c72": "UpStats(uint256,uint256,uint256,uint256)", +"73ce9920": "parseOrder(bytes)", +"73cf013c": "isBlacklist(address,address)", +"73cf8f97": "registryRequestSku()", +"73d00224": "swapTokens()", +"73d01ead": "prepareForMigration()", +"73d08bc5": "prefill(address[],uint256[])", +"73d0d693": "Set(address,uint32[],uint24[])", +"73d0fe48": "totalLockedHavvens()", +"73d28995": "isMidGrade(uint256)", +"73d31240": "removeGame(uint256)", +"73d3172e": "MXY_chain()", +"73d384c8": "hasDeposits(address)", +"73d45ba4": "owner_ActivatePOS(bool)", +"73d4a13a": "data()", +"73d4c0ff": "m_aOwner()", +"73d4d500": "transferPayable(address,address,uint256)", +"73d4d9f9": "checkMAC(bytes32,bytes32[],bytes32)", +"73d55379": "Beneficiary()", +"73d65c00": "GEN0_NO()", +"73d69720": "checkWhitelistAddressValue(address,uint256)", +"73d6c2ec": "init_ico(address)", +"73d901d6": "activityClosed()", +"73d9170d": "GKBToken(uint256,string,string)", +"73d9fd0c": "placeTokenBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8,uint256,address)", +"73da968d": "buySection(uint256,uint256,string)", +"73dae7d6": "issueTokensForPrivateInvestor(uint256)", +"73db0844": "ETHUSD()", +"73db2350": "commentsLength()", +"73dc7635": "openAttacksCount(address)", +"73dd9073": "secondStage()", +"73de3570": "calcaultePrizes(uint256,uint256)", +"73de3e72": "_refundTokens()", +"73de975c": "alreadyMintedOnce()", +"73def2b7": "subFreezingPrice()", +"73df6b19": "visitLength(uint8)", +"73e1743a": "buildDSBasicAuthority()", +"73e1851b": "migrateMyTokens()", +"73e1c5c9": "getMyFreeCoin(address)", +"73e2212e": "changepresalebonus(uint256)", +"73e2ab69": "_removeWhitelistAdmin(address)", +"73e2d75f": "changeClons(address,uint8,bool)", +"73e2faa8": "destructionContractAddress()", +"73e30e49": "majorEventFunc(uint256,bytes,bytes)", +"73e3ce80": "fact()", +"73e3de70": "CardSwap(address,uint256,uint256)", +"73e3e7a7": "getAdultByAddress(address)", +"73e40ed4": "REWARD_SUPPLY()", +"73e4d829": "createLandmark(uint256,uint256,address,uint256)", +"73e52855": "crownUnFreeze()", +"73e538fc": "availableTokensOnCurrentStage()", +"73e55a57": "DAOstackPreSale(address,uint256,uint256)", +"73e58a75": "balanceTeam()", +"73e61cf2": "changingEnabled()", +"73e67a38": "GameGoldToken()", +"73e6fc1b": "parseUint(string,uint256)", +"73e7c8ce": "setErrorRest(bytes,uint256)", +"73e81d88": "TrustMarketHubToken()", +"73e87d74": "OTM()", +"73e888fd": "contribute(address)", +"73e8b3d4": "exist(bytes32)", +"73e9f3e6": "Crowdsale(address,uint256,uint256,uint256,address,address)", +"73eab74b": "SoulTransfer(address,address)", +"73eaddf0": "OMGBalance()", +"73ec6bb5": "AMOUNT_PER_PHASE()", +"73ec7df0": "joinCommunity(address)", +"73ecac3b": "setGiftTokenAmount(uint256)", +"73ece9c4": "setEmployee(address,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint8)", +"73eda3cc": "finalizePublicSale()", +"73eec3c5": "payoutDividends(address,uint256)", +"73eef753": "coinSendSameValue(address[],uint256)", +"73ef6357": "selectplayer()", +"73efc627": "addAction(bytes32,bytes32,string,uint256,bool,uint256,uint256,uint256,uint256,bytes32)", +"73f00fb3": "emissionlocked()", +"73f01104": "reveiveToken(address,uint256)", +"73f029cd": "setOrUpdateRecord(string,string,string,string,address,uint8,bytes32,bytes32)", +"73f03d53": "crowdSaleFinalized()", +"73f1e6d7": "resolveLotteryByOraclize(uint32,uint32)", +"73f28451": "tokensRate()", +"73f310df": "multiAccessRemoveOwner(address)", +"73f3312d": "setMentorsTokensWallet(address)", +"73f3bd1f": "earlyInvestors()", +"73f42561": "burned()", +"73f440fe": "prevRoundTweetId()", +"73f58acd": "createTeamTokenTimeLock(address,uint256,uint256,address)", +"73f5cfb1": "isPhaseValid(uint256)", +"73f5edce": "UpPlayerResult(string,address,uint256,uint256,uint256)", +"73f5f8ee": "tokensAvailableAtCurrentTier()", +"73f64212": "supplyMultiplier()", +"73f69bc5": "TrustedDocument()", +"73f8edc3": "configureMarketItem(uint256,uint8,uint8,uint8,string)", +"73f8fd4b": "getUserTokenBalance(address,address)", +"73f93a48": "getAccountContentTip(address,uint256)", +"73f9421d": "getUpgradeCardsInfo(uint256,uint256)", +"73f9d5a0": "eostContract()", +"73f9ff23": "RaffleMakersBook(string,uint256)", +"73fa9ce8": "getAmTokenBalance(address)", +"73fac6f0": "confirmReceived()", +"73fb7878": "dividendFor10kDaily()", +"73fba0e8": "airdropReserve()", +"73fc115f": "RubiToken(address)", +"73fc83fa": "updateDireccion(address,bool)", +"73fc8420": "deployedOn()", +"73fc9643": "calculateFLC(address,uint256)", +"73fcfea1": "withdrawPLAT()", +"73fddd16": "refundEndTime()", +"73fe1673": "cpow2(uint256)", +"73fe747c": "TransferCreators(address,uint256)", +"73fee090": "setfee(uint256)", +"73fef35a": "setStartTimeIcoStage2(uint256)", +"73ff4d48": "getPlayerForCard(uint256)", +"73ff81cc": "getOwnersCount()", +"73ffd5b7": "transferEther(uint256)", +"73ffd969": "setMap(uint256,uint256,uint256)", +"73ffecd0": "getPlayerHistories(address,uint256)", +"74002b6c": "getTokenPriceInWeiAndPhaseIdxsForDate(uint256)", +"7400ed3b": "acceptDeposit(address,address,uint256)", +"74019f87": "BATSafe(address)", +"7401aaa3": "getPlayerRoundBought(uint256,uint256)", +"7401f9c0": "flag(uint256,address)", +"740227d1": "receiveFunds(address,uint256)", +"7402a9aa": "isFirstStageFinalized()", +"74030531": "bet(string)", +"7403db08": "getVerifiedHash(address,uint8,address,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"7403e980": "initPGOMonthlyPresaleVault(address[],uint256[])", +"74040424": "startPartnerSale(uint256)", +"74040cd2": "setBidFeePercents(uint256)", +"74041d1f": "liquidPledging()", +"74043a70": "FRPUSD()", +"740528a7": "GrantRevoked(address,uint256)", +"7405322e": "checkBalance(address,string)", +"74056b73": "crowdsaleMinUSD()", +"7405cee9": "CGCToken(uint256,string,string)", +"74063cc1": "tokenOfMakerByIndex(address,uint256)", +"74068480": "setPresaleFail()", +"7406d1a7": "updateRegistratorStatus(bool)", +"7406d943": "BIGTPrivate()", +"740707cf": "cancelSaleOfMintingAddress()", +"74087040": "testBitsNotEqualSuccess()", +"740907ea": "buySale(address)", +"74091685": "setReservesForExchangeTokensPercent(uint256)", +"7409e2eb": "swapTokenToToken(address,uint256,address,uint256)", +"740a2a90": "registerEmployer(string,string,bytes32,uint256,uint256,uint256[],string,string,string)", +"740ab8f4": "partitionsOf(address)", +"740b63f9": "set_hedgeAddress(address)", +"740b91b6": "horseOwnerIndex(uint256)", +"740d0a6f": "getAmbientHumidityException(bytes32)", +"740d73f3": "addToWhiteList(address[])", +"740e2a29": "setFundRepository(address)", +"740ed4e0": "addNewStakeDiceGame(uint256)", +"7411b2b2": "TrendNetworkToken()", +"741273d6": "testThrowRegisterContractAgain()", +"7412c223": "getCurrentTier()", +"74135154": "func1()", +"7413801a": "initializeAdvisorVault(address)", +"7413dcc3": "DelistTitle(uint256)", +"74141266": "arbiterList(uint256)", +"741430ad": "VINCToken()", +"7414edc4": "ERC20Token(string,string,uint8,uint256,address,uint256)", +"74151a2a": "retrieveUnsoldTokens()", +"74158cd8": "updateAdministratorKey(address,address)", +"7415fbdb": "_getGameInfoPart2(uint256)", +"74163ab1": "minsignupeth()", +"741677a5": "makeTrade(address,address,uint256,string)", +"741685e5": "EtherFuture()", +"7417040e": "numberOfParticipants()", +"7417575c": "_releaseEarning(bytes32,bytes32,bytes32,bool,address,uint8)", +"74182009": "CreateWolk(address,uint256)", +"74192209": "getTokenEnhanced(uint256,bool)", +"7419e77a": "setMarketplace(address,bool)", +"7419f190": "stakeStartTime()", +"741a35c4": "getTx(address,uint256)", +"741ad7a3": "transferDividends()", +"741b0508": "isSplitable()", +"741b2239": "unfreeze_period_time()", +"741b3c39": "depositBond()", +"741bcc93": "fillOrKillOrder(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", +"741bd9c8": "ETHDeposir()", +"741be410": "getOpenPackageIdOfOneAgency(address)", +"741bef1a": "priceFeed()", +"741c251d": "changeGamemaster(address)", +"741cb9ce": "setCurve(address,bytes32,int256,int256[])", +"741cdf27": "Library()", +"741e2345": "registerMany(address,uint256,int256,uint256,bytes20,address,bytes)", +"741e3576": "getBonustokens(uint256)", +"741ed475": "AnkitVictoToken()", +"741f0434": "check(bytes20,uint32,int24[4],int24[4],uint32[4],bytes32[])", +"741f7034": "CrowdsaleToken(string,string,uint256,uint8,bool)", +"74214c92": "StandardERC223Token(uint256)", +"74220f3d": "burnApproval(address,address,uint256)", +"74229301": "isTokenized()", +"7422a127": "is_valid_event()", +"7423ab57": "Project_RemoveToken(uint256,uint256)", +"7423d96e": "txnTax()", +"7423e225": "getDataPointForSubject(int256,uint256,uint256,int256)", +"7424bab1": "currentAirdropAmount()", +"7424bebc": "bonusBasePoints()", +"7426172d": "addPurchaseFromOtherSource(address,string,uint256,uint256)", +"74268ff2": "deleteOffer(uint256)", +"74281f95": "FNAToken()", +"74287872": "investedAmountOf()", +"742887ff": "deleteAddress(address)", +"7428c5f4": "Gamble()", +"7428eed3": "IndieGameToken(string,string,uint8,uint256,address)", +"74294070": "_createItem(string,address,uint256,bytes32,address,address)", +"742978da": "getAssets(address)", +"7429c086": "repeat()", +"7429d78b": "SUCC(uint256,string,uint8,string)", +"7429f1eb": "multiAccessSetRecipientD(address,address)", +"7429fd67": "initHolderConfig()", +"742a1a56": "CCTE()", +"742a9fa0": "recursiveFloor(uint256,uint256,uint256)", +"742aa578": "AddressRecovered(address,address)", +"742b8b9d": "_CallRejected(bytes32,bytes15)", +"742ba8de": "declareProjectNotFunded()", +"742bff62": "SoftDude()", +"742c81e4": "approveOwnership()", +"742cd75d": "mintPCD(address,uint256)", +"742d5355": "calcTokenOwnerReward(uint256)", +"742d9f0b": "lastBlock_v7()", +"742d9fa3": "userOfferSubmitElement(uint256,uint256,uint256,uint256,uint256,uint256)", +"742e2ebd": "AllowedSet(address)", +"742e54b2": "_airdropSupply()", +"742f79d5": "preRate()", +"7430faf4": "fechSnapshotBlockByIndex(uint256)", +"74313b4a": "releaseTokens(address,address)", +"7432542d": "_remainReward()", +"74331be7": "sete(address)", +"7434206e": "validateReceipt(string,uint256,bytes32,bytes32,bytes,bytes,bytes32)", +"743438ad": "id_for_address(address)", +"7434d180": "removeSmartContractByAddress(address)", +"7434e60d": "HamsterToken()", +"7435039d": "calculateBountyRewards(uint128)", +"743521c6": "rewardBountyMany(address[],uint256[])", +"7437681e": "maxTx()", +"74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", +"74389991": "breakit()", +"7438b0df": "WIN_CUTOFF()", +"74396ed1": "makeWithdrawal(address,address,uint256,uint256)", +"74398d45": "setGlobalTokenTransferLock(bool)", +"7439a3bd": "verifyClaim(uint64)", +"7439e787": "getUserValues(address)", +"743a3252": "addAddressAsMultiOwner(address,string)", +"743ab538": "validateNameSignature(string,uint256,address,string,uint8,bytes32,bytes32)", +"743b179e": "giveRefund(address)", +"743b8e1a": "ROHH(uint256,string,string)", +"743bd681": "OWNERS_AUCTION_CUT()", +"743bdcef": "MAX_WITHDRAW_PCT_TX()", +"743c006b": "iWantXKeys(uint256,uint256)", +"743c6775": "investorBaseInfo(address)", +"743c7f6b": "setPreSaleDate(uint256)", +"743e0c9b": "receiveTokens(uint256)", +"743e92ee": "getNode()", +"743f78ab": "WalletSet(address)", +"743f978f": "addValueToCovfefe(uint256)", +"74400873": "execute(uint256,address,uint256,uint256)", +"744013c4": "Gnome()", +"74418368": "getAdvertisementStorageAddress()", +"7441b8bb": "lockBalance(address)", +"7442f427": "subUserTokenLocalBalance(address,uint256)", +"74439ca7": "classic()", +"74449ca4": "getContentCount()", +"7444b006": "transferCopyFrom(address)", +"7444b227": "getMidgradeCarsForVariant(uint256)", +"7445690b": "getLotteryClass(uint8[7],uint256)", +"744598cd": "Phase1AccountTokensMaxUpdated(uint256)", +"7445af4b": "pay_by_bond_contract(address,uint256)", +"7445d659": "foreignBridge()", +"74467a1e": "FOR_SALE()", +"7446ce1c": "addJob(bytes32,uint256)", +"74478bb3": "isClaimable()", +"74479db0": "fcontr()", +"7448d386": "getStageData(uint8,uint256)", +"744927fd": "getWinnerWithRank(uint8)", +"744a8f77": "chefPrice()", +"744b4b3f": "createNormalBank()", +"744bb8d2": "crowdsaleHardCap()", +"744bfe61": "withdrawFunds(uint256,address)", +"744c7c7f": "proposeMinting(uint256)", +"744c8c09": "chargeFee()", +"744d0a92": "MINI_GAME_BONUS()", +"744d3411": "getBidCount(uint256)", +"744d8b4f": "recordWin(uint256,uint256)", +"744f4994": "getBrickIdsByOwner(address)", +"744f5f1a": "modifyTaxRate(uint256)", +"744f7c7d": "toUint256Safe(int256)", +"744fa2c8": "submitTokenToEthOrder(uint128,uint128)", +"7451bf71": "admin_transfer(address,address,uint256)", +"745332fe": "getRestarTime()", +"74536403": "getAvar()", +"74539f98": "getEventResolvers()", +"7453a417": "__address4__()", +"7453cfa1": "EtherPaint()", +"7453de96": "approveTransaction(uint256,uint256,string,uint256)", +"745400c9": "requestWithdraw(uint256)", +"74544e2d": "setGrandFactory(address)", +"7454e74c": "setAudit(address,address)", +"74552650": "left95(uint256)", +"74556ee9": "getQST()", +"7456be7d": "rent(uint256)", +"7456f2b9": "getDistributionTime()", +"74573f80": "lastPlayTimestamp()", +"7457412e": "THIRD_PARTY_LOCKUP_ADDR()", +"7457a9e1": "Coupon(uint256)", +"74580e2f": "changeCreator(address)", +"745828ef": "ProofOfLongHodlV2()", +"74583772": "adminSendTokens(address,uint256)", +"74590f64": "setApoderado(bytes32)", +"745911d5": "getHolidayByIndex_(uint256)", +"745944d5": "setCampaignValidById(bytes32,bool)", +"7459a5e1": "KriptoPark()", +"7459f2a3": "registerArbiter(uint256,uint256,uint256,uint256,uint256)", +"745a8be2": "flip32(bytes)", +"745ab73d": "BrainIsToken()", +"745ce3bb": "iaInvestedBy(address)", +"745ced49": "CORE_TEAM_PORTION()", +"745cf221": "ArjunaCoin()", +"745d1d64": "ethCollector()", +"745dcd4d": "stop(string)", +"745e77f9": "_createAnimecard(string,string,string,string,uint256,address)", +"745e9da2": "GameProgress(uint256,uint256,uint256)", +"745ea0c1": "registerNameXnameFromDapp(address,bytes32,bytes32,bool)", +"745f2860": "_buyTokens(address,uint256,uint8)", +"74601c3c": "availableToMint()", +"746022c2": "oneGetMoneyBack()", +"74607d91": "patient(uint256)", +"74609d0c": "createDApp(bytes32,uint32,bytes,bytes32)", +"746178ed": "escrowTokensWallet()", +"7461dbff": "setOwnerAirDropRate(uint32)", +"7462260b": "KEM()", +"7462beec": "renewSubscriptionByDays(uint256,uint256,uint256)", +"7462e4f9": "Etheropoly()", +"74635cfc": "setMembers(address[])", +"74646086": "StreamityTariff(address)", +"7464d5d8": "rewardDistributionStart()", +"74651594": "tgeSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"746584b4": "setMintingContractAddress(address)", +"7465df26": "totalAccessories(uint256)", +"74664b34": "interestNextInPercent()", +"7466b2d0": "transferIsPossible()", +"7466e67d": "mintToOtherCoinBuyer(address,uint256,string)", +"7466ee48": "getAppAddress(uint32)", +"74674256": "temroyToken()", +"746796f0": "_setProfitSharingParameters(uint128,uint128)", +"7467af07": "EladToken()", +"7467bc92": "disbursementHandler()", +"7467bcd9": "minPaymentWei()", +"74689990": "schedulePayoutOraclizeCall(uint256,bytes32,uint256)", +"746a9af2": "printCertificate(string,string,string,uint16,string)", +"746abc79": "distributeRegistrationBonus(address)", +"746ac67e": "PCNCrowdsale()", +"746c9171": "m_required()", +"746d3024": "perPrice()", +"746df633": "getTeamBallers(address)", +"746eff8c": "_cancelRolePermissions(address,address)", +"746f79d9": "TIER2_PERCENT()", +"746fc8d0": "right47(uint256)", +"74703123": "proceedKYC(address)", +"74707e0d": "deleteWallet(address,address)", +"747082b9": "FsTKAuthorityChanged(address)", +"7470a835": "OliToken(uint256,string,uint8,string)", +"7470f760": "createTeamTokenByPercentage()", +"74711285": "restartSale()", +"74715432": "renounceAuctionManager()", +"7471ea81": "IPayX()", +"7471f6f6": "buy_beer(uint256,uint256)", +"747293fb": "addCaller(address)", +"7473f4e0": "grantAccessbyDelegate(bytes32,address,address,string)", +"74748460": "balanceOfAtInternal(address,uint256)", +"7474dfd0": "_getBetAmount(bytes32)", +"74754282": "manufacturer()", +"747586b8": "setInt(int256)", +"74759f43": "numberOfInvestments()", +"7475baa6": "AirDropPayBitsBounty(address[])", +"7476865f": "ToggleMaintenance()", +"74772667": "changeMinContrib(uint256)", +"74775cdd": "buyAtPrice(uint256)", +"74780111": "assertEq16(bytes16,bytes16)", +"747853bc": "test_validBoardFundTransfer()", +"74796cc2": "getPlayersInGame(uint256)", +"7479aa04": "getCurrentRoundStartTime()", +"7479b9ac": "founderToken()", +"747ad1c1": "getPeriodIdx(uint256)", +"747bcd72": "SCORE_UNITARY_SLASH()", +"747c1d87": "getInvestorsAmount()", +"747cb030": "SALE_3WEEK_BONUS()", +"747d6dd0": "_getCrabPartBonuses(uint256)", +"747dff42": "getCurrentRoundInfo()", +"747e0670": "UseWish(string)", +"747f3380": "phoneNumber()", +"747fc0d2": "maxReferrals()", +"7480a676": "Cryptosquirrel()", +"74816d1e": "webGiftUnTransfer(address,address)", +"74817d9b": "startPublicSale(uint256)", +"74818530": "Creedex()", +"7481a8aa": "TokenizedSplitter(string,string,uint248)", +"7482e533": "EventLuckyNumberRevealed(address,uint256,uint256)", +"7483883d": "getOrAddMasterWallet(address)", +"74845024": "scribes_hisory_length()", +"748467b9": "callBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"7486a8e3": "get_publisher(bytes32)", +"748837b2": "getIsBonusUnlockExempt(uint256,address)", +"74888914": "setHatchDurationMultiByGeneration(uint32[])", +"7488aa3c": "getNextBonusIndex()", +"7488ad7c": "minDepositInCents()", +"74891e1b": "getCoinAgeInternal(address,address,uint256)", +"7489308f": "lpTargetPosition()", +"7489472a": "step_pay()", +"748949e8": "setGalleryFourPrice(uint256)", +"7489ec23": "cancelOrder(bytes32)", +"748b659d": "pauseCollectToken()", +"748b95b6": "decimls()", +"748ce291": "addRewardforNewContributor(address,uint256,string)", +"748d071d": "seriesCreated(bytes32)", +"748d1078": "updateDukeHistory(string,bool,string,address,uint256,uint256)", +"748dd2fc": "GAME_TYPE_DICE()", +"748de225": "getFreezeAccount(address)", +"748de5d3": "UpdateAddressPayForService(address)", +"748e4f40": "sendTokensToTeam(address)", +"748ed9a8": "getTargetIncorrectDesignatedReportMarketsDivisor()", +"748efab5": "_copyToBytes(uint256,bytes,uint256)", +"748f0810": "ProposalTallied(uint256,uint256,uint256,uint256,bool)", +"748f7215": "getUnlocktime()", +"748fa599": "someUnsafeAction(address)", +"748ffa5b": "cei(uint256,uint256)", +"74900c92": "MINIMUM_ETHER_SPEND()", +"74912463": "tokenEmission()", +"74914710": "getCrySolObjectsByOwner(address)", +"7491ef60": "PrecommitmentAdded(address,uint256)", +"7492384a": "backTixOwner()", +"7493357b": "reservedOwner()", +"7493539b": "KOALAPROJECT()", +"74935f11": "PLS()", +"74942868": "rate8_end_at()", +"74942c0f": "tokens_received()", +"7494ad81": "judge(uint256,address)", +"749510d4": "BOUNTY_FUND()", +"749555cd": "toggleIsLive()", +"7495a1e4": "buyFor(string,address)", +"7497a061": "getAuthorDrawings(uint256)", +"749843ea": "setPlatinumAddress(address,address)", +"74991569": "setVestingContract(address)", +"74998f33": "Infinix()", +"749a47b7": "minPreviewInterval()", +"749aa2d9": "endRound()", +"749b7820": "canBuy(address,uint256,uint256,uint256,bytes8)", +"749be0c0": "GetTotalPot()", +"749c190b": "getHashsLength()", +"749ca1f3": "setGameOnoff(uint256)", +"749cab54": "setBlocks(uint256,uint256)", +"749db2f6": "Contract(string,string,address)", +"749dd65d": "_currentMonth2ndDayTimestamp(uint256,uint256)", +"749e8b88": "BUYPRICE()", +"749e93fc": "actualPriceDivisor()", +"749ea598": "leaders(address)", +"749f1bc3": "agendaOf(address)", +"749f9889": "changeAllowedRecipients(address,bool)", +"749fe7c4": "getPlayerEnergy(uint32)", +"74a042b5": "ClaimEthersEvent(address,uint256,uint256,uint256,uint256)", +"74a0cd8c": "getCombinedWarriors()", +"74a205d9": "ZIMBOCOIN()", +"74a25d43": "startAuction(uint256,uint256,uint256,uint64)", +"74a32dd7": "TotalAirdropRequests()", +"74a37efc": "setSalary(uint256,uint256)", +"74a3c5d5": "getVestingAmountByNow(address)", +"74a46050": "offer(address,uint256,uint256)", +"74a76649": "payTheWinner(uint256)", +"74a76816": "dividendsOf(address,bool)", +"74a7d6b9": "initNewPlayer(address,bytes)", +"74a7d77c": "sellTokensNow(uint256)", +"74a814fe": "getGeneral(uint32)", +"74a85571": "addAccount(address,uint256,bool)", +"74a8f103": "revoke(address)", +"74a93e6c": "setTokenHolder(address,address)", +"74a9446e": "_removeAllActiveTasksWithHoles(uint256,uint256)", +"74a9ced9": "createPoll(string)", +"74a9e440": "createProposal(uint256,address)", +"74aa9e2c": "PRESALE_RESERVERED_AMOUNT()", +"74aac084": "joinDelta()", +"74aaefcc": "SundaToken()", +"74ab3e4b": "updateCardStatistics(address)", +"74ac5bb4": "erc20KGS(uint8)", +"74ac6112": "HOPE()", +"74acb5d6": "isAirdrop(address)", +"74acf0b1": "communityDevelopmentWallet()", +"74ad74e9": "getMinLockedAmount(address)", +"74ae26f7": "checkReleaseAmount(address)", +"74af10cf": "setNeedToGetFree(uint256)", +"74af3ee1": "getTournamentState()", +"74b00a6c": "convertNums(uint256[])", +"74b04fa7": "setArtistAccount(bytes16,address)", +"74b10ae5": "checkWhale(uint256)", +"74b26fa1": "delegateReferralTokensBulk(address[],uint88[])", +"74b27b9b": "indexextend(address)", +"74b38531": "stopBet()", +"74b39158": "validateAttack(address,address)", +"74b3ee18": "getFlag(string)", +"74b433bd": "TOKEN_SUPPLY_MKT()", +"74b491ff": "airdropCurrentTotal()", +"74b527b0": "getMintedCounts()", +"74b5545a": "delCertAdmin(address,bytes32)", +"74b57486": "DebugContract()", +"74b58489": "setWeiMinContribution(uint256)", +"74b58ae7": "setCCH_edit_10(string)", +"74b5fb06": "_payout()", +"74b67b27": "GameCoin()", +"74b78b26": "payeth1(address,uint256)", +"74b799af": "disableEdition(uint256)", +"74b874a6": "liquidationTimestamp()", +"74b9dc6b": "assertEq9(bytes9,bytes9,bytes32)", +"74b9f229": "buyTokensPreSale()", +"74bb3cb4": "getOrderActualTotalRefundHelper(uint256,uint256)", +"74bd6261": "AdsVenture()", +"74bdb7ee": "createApprovalEvent(bool,address,address,uint256)", +"74bde311": "scheduleNewDerivativeToken(address,uint256)", +"74be3c7f": "TRONV()", +"74bfb965": "addNewProxy(address)", +"74bff257": "getCartItemInfo(address,uint256)", +"74c06f5d": "saleHasFinished()", +"74c1328a": "bytesToUInt(bytes)", +"74c13fda": "defaultToken()", +"74c1438c": "DeepGold()", +"74c166e9": "phase1MaxTokenForSale()", +"74c16b23": "registryAdmin()", +"74c1b1c9": "refundOpen()", +"74c1d7d3": "_best(address,address)", +"74c21059": "totalInvested(uint256)", +"74c272b7": "Begin(string,string)", +"74c40f2e": "dexTestTransferFrom(address,address,address,uint256)", +"74c42e5d": "setuserlevel(address)", +"74c43f26": "setFundariaBonusFundAddress(address)", +"74c57fa1": "LogTeamTokensDelivered(address,uint256)", +"74c65206": "Buy_Offer(uint256,uint256,uint256)", +"74c6bd74": "privateSaleLockEndTime()", +"74c77b52": "SetupToken(string,string,uint256,uint256,uint256,address,address,uint256)", +"74c80467": "createNewElections()", +"74c85591": "fundDepositAddress()", +"74c90d0d": "sellAllCookies()", +"74c950fb": "TOKEN_TOTALSUPPLY()", +"74c97c99": "manaToken()", +"74cad0b7": "ForTester()", +"74cb55fb": "fundsDistributor()", +"74cc991c": "getBetValue(bytes32,uint8,uint8)", +"74ccd7cc": "walletLock(address,uint256,bool,bool)", +"74ccf06f": "addParsel(uint256,uint256,address[])", +"74cd5a31": "HXTtoken()", +"74cd5c0b": "getOneWithdrawRec(uint256)", +"74ce52ce": "Kildoneum()", +"74ce9067": "isCommitPhase()", +"74ce97fe": "year3LockAddress()", +"74cf6f49": "withdrawNoLimit(address,uint256)", +"74cfa35f": "ambassadorAddressOf(address)", +"74d04f83": "addtoPrivateSale(address,address,uint256,uint256)", +"74d050fb": "cardNumbersOf(uint256)", +"74d15357": "virtualc()", +"74d16c37": "getAssetsValue()", +"74d1eb3f": "MANToken(string,string,uint256,uint256)", +"74d21ae0": "unlike(uint256)", +"74d301d6": "sizeBonus()", +"74d33745": "REAPER_INTREPID_FTL_SPEED()", +"74d3475c": "PowerofBubble()", +"74d393f0": "setValue2(uint256)", +"74d3b7cd": "LTR3Token()", +"74d42916": "IINEToken()", +"74d4ab27": "fipsRegister()", +"74d50c1c": "TOPB()", +"74d53cc2": "sendReferral(address,uint256)", +"74d55ceb": "Rhemaxcoin()", +"74d5e1ea": "setteam(address,uint256)", +"74d5f2aa": "BoxTrade()", +"74d618cb": "setTransferActive(bool)", +"74d699b6": "Sale(string,uint256,address)", +"74d6aa1f": "getOrCreateFeeWindowForForkEndTime()", +"74d76bc4": "_getGameInfoPart3(address,uint256)", +"74d88c50": "submitEthToTokenOrder(uint128,uint128)", +"74d89c47": "testUpdateNameDb()", +"74d8b268": "getGunByIdPart1(uint256)", +"74d9c2ef": "tokenTosale()", +"74da564f": "registerMeOnTokenCore(address,address,uint256,string)", +"74dacc7a": "m_attaching_enabled()", +"74daf5cc": "setValidPriceDurationInBlocks(uint256)", +"74db5b27": "totalOf(uint256[])", +"74dbe5e6": "GetSpud(address)", +"74dc1e04": "TokensDestroyed(address,uint256)", +"74dcfd37": "NotakeyVerifierForICOP(address,address)", +"74dd7be9": "setCompte_42(string)", +"74de4ec4": "addReward(uint256)", +"74de8caf": "ERC20transfer(address,uint256,bytes)", +"74de9ebb": "MintEvent(uint256,address)", +"74dfcabc": "changeFreezeTransaction(string)", +"74dff9d8": "stopCycle()", +"74e00730": "DISTRIBUTION_COMMUNITY()", +"74e048d5": "settleBetUncleMerkleProof(uint256,uint40)", +"74e09606": "setSignatureTimeout(uint256)", +"74e104d3": "BITWORKCOIN()", +"74e24367": "ownedTokensIndex(uint256)", +"74e29ee6": "deleteService(uint256)", +"74e4435f": "getUserAddress(uint256,bytes32)", +"74e4f31d": "ZJLToken()", +"74e5530d": "testHasRole()", +"74e57397": "BrandUpdated(address,address,string,bool)", +"74e59296": "MYE()", +"74e5b122": "changeGenerator(address)", +"74e5b186": "_mint(string,address)", +"74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"74e7493b": "changeRate(uint256)", +"74e74f24": "rulesProposal(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"74e8288c": "SaiContest_Gaia()", +"74e861d6": "getHubAddr()", +"74e95828": "_distributeWinnerAndLandholderJackpot(uint256,uint256)", +"74e99f87": "AIWEBToken()", +"74e9e102": "GetTempStuffList(address)", +"74ea9437": "transferICOToken(address,uint256)", +"74eac2e6": "Beruqtoken()", +"74ead7b7": "unstakePrimordialTokenFrom(address,uint256,uint256)", +"74eb7c90": "withdrawSaleManagerBalances()", +"74eb936b": "ethQuantity()", +"74eb9b68": "isAccountLocked(address)", +"74ebe3ec": "isSet(address)", +"74ec8682": "walletForETH()", +"74ec89cb": "H2CToken()", +"74ecf4b5": "getWinningNumber(uint256)", +"74eead66": "SFT_PER_ETH_SECOND_EARLY_BIRD_RATE()", +"74eedd46": "fundingEndTime()", +"74ef109b": "ChinaLifeCoin(uint256,string,uint8,string)", +"74f0314f": "SECONDS_PER_DAY()", +"74f059ad": "dateDefrost()", +"74f0765a": "mintSeq(address[])", +"74f079b8": "txCounter()", +"74f12933": "devPaid()", +"74f1d6ce": "keccak(address,address,uint256)", +"74f28eaf": "_set11()", +"74f47a7a": "nextDrawTime()", +"74f519db": "setLastTimestamp(uint256,uint256)", +"74f569e7": "EriCoin()", +"74f61642": "rewardsRedeemed()", +"74f760e4": "WithdrawWinnings(uint256)", +"74f78412": "market_DeclareBid(uint256)", +"74f78437": "FD(uint256,string,uint8,string)", +"74f79c8e": "DEFROST_INITIAL_PERCENT()", +"74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", +"74f8f7ac": "increaseUpdateMetadataCounter(uint256)", +"74f91b56": "setXTVNetworkContractAddress(address)", +"74fa01c9": "MilcToken()", +"74fa4874": "getResultStatus(uint256)", +"74fa98f5": "setInviteCodeFree(string)", +"74fb381a": "inject(address,address)", +"74fbbc86": "rate(uint256,uint256,string)", +"74fc27c1": "xfitcoin()", +"74fcd919": "tokenMsg()", +"74fd08cd": "whatSatoshiSays()", +"74fd6176": "removeBulk(address[])", +"74fe6dea": "nameCat(bytes5,bytes32)", +"74fe9247": "AddRevocationBounty(bytes32)", +"74fefa2c": "findEndpointByAddress(int256,address)", +"74ff2324": "requestMinimum()", +"74ff32e9": "_percUp(uint256)", +"74ff90ba": "Disbursement(address,uint256,uint256)", +"74ffdcd0": "WEI_PER_ETH()", +"75012c35": "setBonusTokenInDays(address,uint256,uint256)", +"750142e6": "totalReward()", +"7501f741": "maxMint()", +"750225d0": "completeSale(uint256)", +"750240a2": "setMaxResolvedAgonId()", +"75030996": "getServiceName(address)", +"7503af06": "Test9J()", +"7503cda7": "getLogOwnerAddr()", +"7503cda9": "thinkLength()", +"7503e1b7": "tournaments(uint256)", +"750446a3": "howManyTokensAreReservedFor(address,address)", +"750482ba": "ownersBalance()", +"75048ebd": "claimUnsold(address)", +"7504aaaf": "updateTargetedMoney(uint256)", +"750509ba": "getStateRoot(bytes,bytes32)", +"75052882": "modifyProductPrice(bytes32,uint256)", +"75056811": "accountClaimedReward(address)", +"75067219": "MAX_UCCOIN_SUPPLY()", +"75071c4c": "founderFund()", +"750732ec": "addVineyardByRegulator(string,string,uint16,uint24,uint32,uint16)", +"7507b2e5": "OVOToken()", +"7507ba39": "remit()", +"750852b3": "test_invalidThrowWithAsserts()", +"7508f147": "setOperationalReserveAddress(address)", +"75090ebf": "changeDomain(uint256,uint256,uint256,address)", +"750a687c": "GetRevealBlock(bytes32)", +"750a96ac": "_createPermission(address,address,bytes32,address)", +"750c47a1": "TOKEN_PER_ETHER()", +"750c77cb": "AccountMinterRemoved(address,address)", +"750cae6a": "enableBetting_only_Dev()", +"750cc645": "_sendToken(address,address,uint256)", +"750dd523": "getContractCreationTxOrigin()", +"750e1f59": "transfer(address,uint256,bytes1[])", +"750e443a": "voteAgainst(uint256)", +"750e75d5": "distributeJackpot(uint256)", +"750ee24a": "changeIcoEndBlock(uint256)", +"750f0acc": "withdraw(uint64)", +"750f2d81": "ChangeFreezeTime(uint256,uint256)", +"750f7daf": "hashBiometricTemplates(string,int256,string,string)", +"750fd1d1": "startTimeRefund()", +"7510a98c": "updateConfig(uint32,int256)", +"7510c5a0": "encoding_description()", +"75114bcc": "addPhrase(string)", +"7511828e": "Laxz()", +"7511ef65": "setWithdrawAddr(address)", +"7512071b": "doApprove(address)", +"75121c2c": "FCOIN1448Token(uint256,string,string,uint256)", +"751318f4": "bountyAdded()", +"7513eaa7": "HolyCoin()", +"75143ef2": "mintFinished()", +"75151f6b": "addCountryCode(uint256)", +"751559e8": "transactionfee()", +"7515b583": "exchangeCoin(uint256)", +"7515b84a": "releaseRoto(address,bytes32,uint256)", +"75160a20": "pay_royalties()", +"751634d9": "ChangeRules(uint256,uint256,uint256,uint256)", +"751686f7": "_maint_setBlockLimit(uint256)", +"75172a8b": "reserves()", +"7517b57e": "withdrawTaxEarning()", +"7517ea47": "configureSale(uint256,uint256,address,uint256,address,address,address,address)", +"751823f2": "changePartnerCoinPercentage(uint256)", +"751827ac": "setRareAddress(address,address)", +"7518af71": "VGWToken(address)", +"7518fa98": "tokensContract()", +"7519dd8e": "starsOf(uint256)", +"751a0225": "addElement(address,bytes32)", +"751a2d06": "Token_4()", +"751a9108": "balancesof(address)", +"751accd0": "executeGovernorProposal(address,uint256,bytes)", +"751c4d70": "contributeDelegated(address,uint256)", +"751ce8fb": "sendRewardBlockCDN(address,uint256)", +"751d9e65": "WALLET_FOUNDER()", +"751e1079": "compareAndApprove(address,uint256,uint256)", +"751ecea0": "FUTURE_DEVELOPMENT_POOL()", +"751ef753": "toggle(uint256)", +"751fef65": "sellUnit(uint256,uint256)", +"7520320f": "registerCustomer(address)", +"7520767f": "createNew(string)", +"7520bf60": "gas_price_max()", +"75217477": "Debit(address)", +"75218a54": "getUserReactionCount()", +"75219e4e": "transfer(address,address,uint256,bool)", +"75229e28": "lockcheck(uint256)", +"7522aff5": "rejectContract(bytes32)", +"752329ec": "retainedEarning()", +"7523a46e": "HARITECOIN()", +"75247ccb": "_calculateReward(uint256)", +"75250e85": "limitDateCrowdWeek1()", +"752551c9": "_END_DATE()", +"75257013": "appendToDistributionList(string,address,uint256,uint8)", +"7526f98c": "getMin(uint16[])", +"7527313d": "minedBlock(uint256)", +"75286211": "finalizeChange()", +"75287bab": "fetchAllResultByIndex(uint256)", +"75288d95": "platformSupply()", +"7528a6ab": "icoPhase4Start()", +"75298734": "getShare()", +"7529b1d9": "upgradeHasBegun()", +"752a3df6": "transferIfHardForked(address)", +"752b016d": "DeletePatient()", +"752bacce": "getExecPrice()", +"752bece8": "Minus(uint256,uint256)", +"752bf6f8": "sale_pause()", +"752c5628": "callSend(address,uint256)", +"752c8777": "setArenaPool(address)", +"752d2bfb": "addDividend(uint256)", +"752d349c": "depthCheck(int256,int256)", +"752da85a": "endContribution()", +"752dd0dc": "unfreezeBonuses()", +"752dd635": "ETHButton()", +"752efafc": "TIER5_RATE()", +"752f3c8c": "relinquishOwnershipAddress()", +"752faa51": "setLockedGroup(uint8,bool)", +"752fc70e": "howManyEthersToChangeSymbolName()", +"7530b54d": "PRESALE_LEVEL_3()", +"7530d99d": "addForgivedChar(string)", +"7530fe1d": "getContractMessages(uint256)", +"753117ff": "stealTheLeek()", +"7531e032": "resolveExchangeAddress()", +"75321c35": "TransferAgentSet(address,bool)", +"75321c4a": "getOpen(uint256)", +"75322e47": "change(uint256)", +"7532b4ac": "percent(uint256)", +"7532eaac": "signedTransfer(address,address,uint256,uint256,uint256,bytes,address)", +"7532ef1c": "accRecive()", +"75335702": "GSDToken()", +"753384fa": "TOKEN_BONUS_RATE()", +"7534a714": "checkExpectedTokens(address[],uint256[],uint256)", +"75355e34": "giveExchangeRateAdvice(uint256)", +"7535679a": "faucet(address,address)", +"7535927a": "importAmountForAddress(uint256,address)", +"7535c930": "priorityCap()", +"75367ab5": "addToWinners(address,uint256)", +"75383265": "TON()", +"753868e3": "lockContract()", +"753899e9": "alive()", +"7539189c": "getData_3()", +"75395a58": "finalizeBlock()", +"753af202": "SpermToken()", +"753b0dc1": "createFashion(address,uint16[9])", +"753b8c02": "EthernautsMarket(uint256)", +"753c619c": "emitTransferEvents(address,address[],uint256[])", +"753ca259": "PiXS()", +"753cb4eb": "fetchVoteNumForCandidate(address)", +"753cba93": "isPlatinumLevel(address,string)", +"753d764c": "unlistSubName(bytes32,bytes32)", +"753d93e4": "changePlatform(address)", +"753ded15": "failsOf(address)", +"753e88e5": "upgradeFrom(address,uint256)", +"753ea1be": "_transferCoins(address,address,address,uint256)", +"753ed1bd": "ceiling()", +"753f313f": "setPOOL_edit_26(string)", +"753f416a": "send1(address)", +"75401eac": "_isSaleContract()", +"7540b097": "inflateCount()", +"75421e93": "buyIcoTokens()", +"75424253": "BoughtToken(address,uint256)", +"75426ec8": "tokenFulfillmentDeposit(address[2],uint256,uint256[8],uint8,bytes32[2])", +"75428615": "getCallData(bytes32)", +"7542890d": "editIt(uint128,uint64,bytes32[],string,string,string)", +"75432ec4": "setStorageFee(uint256,address,uint256)", +"75438e49": "fillGas()", +"7543af9c": "amount3()", +"7543e3f0": "setReferral(address,address)", +"7544ac1f": "CSAToken(uint256,string,string)", +"75456b49": "fillIndexedBidByAddress(address,uint256)", +"75457583": "Return(address,address,uint256)", +"7545c449": "confirmOrderCompletionByPatient(bytes16,bool)", +"7545f9a1": "processTicketBuying(string,uint256,address)", +"7546006b": "ContractCall(address,uint256)", +"754628d0": "cancelTopUpLimit(uint256)", +"75479c34": "newPlayer()", +"7547c7a3": "stakeTokens(uint256)", +"7548014d": "recoverOnlyOnChainFunds()", +"7548f65b": "END_AMOUNT()", +"754a347a": "transferViolated(string)", +"754a77f5": "fcc()", +"754ad981": "MoveFish(uint256,uint256)", +"754b9e3d": "hashFromHash(string)", +"754c16e8": "getAmountOfProposals()", +"754c175e": "getTip()", +"754c301d": "sumOfFreezing(address)", +"754c3957": "benecifiary()", +"754c67ad": "setTokedoToken(address)", +"754d71e7": "getCurrentBuyOffer(uint32)", +"754db89b": "gameExists(bytes32)", +"754dea40": "setBackendOwner(address)", +"754e0b74": "solveDispute(bytes32,address,bool)", +"754e1764": "DiceRoll()", +"754e1e8e": "invalidateEarlyPurchase(uint256)", +"754efc98": "throwOnGasRefundFail()", +"754f579d": "ownerSetGameName(string)", +"754f9b37": "BasicAccessControl()", +"754fd352": "addOwnerFromRecovery(address,address,address)", +"75504b6e": "getAwardCost(uint256)", +"75524ffd": "mintBase()", +"75526ed5": "setServiceAccount(address,address,bool)", +"7553044b": "setUserServerPermission(address,string)", +"75543074": "getOrganisation(uint256)", +"75545949": "countMails()", +"75545cb2": "processMyVestingRules()", +"75549490": "isEarlyBird(address)", +"7554fffd": "successFee()", +"75556e32": "totalMaxBuyin()", +"7555bfd7": "exchangeAndWithdrawToken(uint256)", +"7556c9e9": "SilentNotaryToken()", +"7556e07f": "hasRate()", +"75570ea7": "closeBets(uint256)", +"7557b2ae": "Advertisement()", +"7558d81e": "contractProgress()", +"7558d9a6": "wallet_Mini_Address()", +"75593a39": "fixPrice()", +"755a11dc": "winnersPot()", +"755a29f4": "set_minCWCsPerSaleMoreThan(uint256)", +"755a8d31": "getBattleTeamSize()", +"755b5b75": "setNumUnits(uint256,uint256)", +"755b9d63": "_addOrder(address,uint64)", +"755bdcc1": "completeTrade(address)", +"755c020e": "withdrawALTokenss(address)", +"755c30a4": "earlyInvestorsBonus()", +"755cc41e": "mintTimes()", +"755d43d3": "calculateAmountReceived(uint256)", +"755d766c": "s27(bytes1)", +"755d80ab": "MintDarioToken(int256,address,int256,uint256)", +"755d98a3": "getTotalDividendPool()", +"755db762": "addVestingAddress(address,uint256)", +"755dc018": "FANBASEToken()", +"755e3e28": "tokensAllocated()", +"755f047b": "projectDescription()", +"755f12db": "totalTokensSoldInThisSale()", +"755f99c2": "AddNewSmallContract(address)", +"755fa815": "getAllIndexesByAddress(address)", +"755fd25c": "mintEditionCards(address,uint8,uint8)", +"75608264": "get_hash(uint8,bytes32)", +"7560a8d9": "_devTokens()", +"7560cab5": "createListing(bytes5,uint256,uint256)", +"75619ab5": "setDistributor(address)", +"7562b0cf": "process(address,uint256)", +"7563113b": "mintPromoEtherBro(uint16)", +"7563c81f": "WorldBetToken()", +"75640ef3": "calculateTotalMinePay(uint256,uint256)", +"75643e1f": "setReward(uint128)", +"75659508": "hasPayroll(address,address)", +"7565a2b6": "transferTokens(address,address,uint256,uint256,uint256)", +"7565d2eb": "coinfabrikAddress()", +"7565ef66": "getTodayLotteryNumber()", +"75661f4c": "calcPlayerICOPhaseKeys(uint256,uint256)", +"75662b0e": "ChainSign()", +"75669274": "XXXToken()", +"7567281d": "_addrunmoney(address,uint256,uint256)", +"75678491": "AMSBToken()", +"7568353c": "isKilled(uint256,uint8)", +"7568a9af": "claimNametagToken(address,bytes32)", +"7568d562": "AssetToken(uint256,string,string,uint8,address)", +"75698524": "UpdateUSDETHPriceAfter(uint256)", +"7569b369": "updateUnclaimedDividend()", +"7569b3d7": "contributorsCount()", +"756a288e": "getStageTokensSold(uint8)", +"756a515f": "test_insert_findNoHintUpdateTail()", +"756abb98": "timeSlicesCount()", +"756af45f": "withdrawBalance(address)", +"756afcab": "Mari()", +"756b1140": "Readings()", +"756b397a": "GainmersSALE(uint256,uint256)", +"756bae5c": "finish(bytes32,bytes32)", +"756bf6e9": "Popcore(uint256,string,uint8,string)", +"756d5e0d": "EvGroupChanged(address,uint8,uint8)", +"756dc34a": "PHASE_NUMBER()", +"756dd3a4": "getSubmission(bytes32)", +"756e15e5": "test_spamApproveAndFreeze()", +"756e8ed3": "innerGuess(uint32,uint16,uint32,address)", +"756f6049": "CORE_NAMESPACE()", +"756f7ce8": "fundariaStakesFrozen()", +"756fb8c9": "getOptionChain()", +"756feedc": "KingXChainToken()", +"75700437": "query1_withGasLimit(uint256,string,string,uint256)", +"757007f6": "CONFIG_MIN_VALUE()", +"757085e3": "fetchAllVoteResultForCurrent()", +"7570acd4": "indVesting()", +"75718e2c": "_increaseTotalDivis(uint256,uint256)", +"7571ca36": "getTerminated()", +"75724990": "addShareholder(address,uint256)", +"7572ead0": "halfyearteam()", +"7572f341": "subtractWee(uint256,uint256)", +"757387d0": "nextInListToReturn()", +"75749f52": "LOCKED_BOARD_BONUS_TOKENS()", +"757501c5": "districtsCore()", +"7575594b": "buyShip(uint16)", +"7575884d": "InTokenTest11(uint256,string,uint8,string)", +"75759319": "wthdraw(address,uint256)", +"7575db0a": "invalidateCache(bytes32)", +"7575ecf6": "validateAndLower(string)", +"75765249": "saveLottery(uint32,uint256,uint256)", +"75766294": "teamPeriodAmount()", +"757765f8": "setMaxBuyLimit(uint256)", +"75776fa4": "createPromoPony(uint256,address)", +"7577732e": "createController(address,address[],uint256)", +"75780127": "testExecuteSellOrderShouldIncreaseBuyerTokens()", +"75785afc": "createDefaultGen0CobeFriend(uint256,address,uint256,uint256)", +"757861eb": "start_play_and_gain(string,string)", +"75790787": "getFeeCollectedByAsset(address)", +"75792f0d": "_transferToICAPWithReference(bytes32,uint256,string,address)", +"75794a3c": "nextTokenId()", +"75796f76": "setWithdrawalWallet(address)", +"7579f2c9": "ArollaToken()", +"7579fcb3": "mintPackSaleCard(uint8,address)", +"757a449e": "approveWithIndex(address,uint256,uint256)", +"757a5522": "channelPartTimeout(uint64)", +"757a61b9": "buyAssetPack(address,uint256)", +"757bd312": "getCrystalWrapper(address,uint256)", +"757be78e": "PlayersStorage()", +"757ccd3b": "canCreate()", +"757d9b97": "getTradeRate(address,address)", +"757de573": "setOwnerCut(uint256)", +"757dfdcc": "SafeWalletCoin()", +"757e5e73": "_giveShares(address,uint256)", +"757f70fb": "SAMPLEToken()", +"757f7302": "updateStateChangeAgent(address,bool)", +"75806e6e": "setIssuerDelegate(address)", +"75811c15": "ownerChange(uint256,address)", +"75812019": "getBurningReward(uint256)", +"7581a8e6": "enableBurning()", +"7581aa5f": "setActivityState(bool)", +"7581d62f": "genesisProtocol()", +"75821d21": "changeTokenWallet(address)", +"75829def": "transferAdmin(address)", +"75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", +"758357b8": "fstPrice()", +"7583902f": "getProviderInfo(address)", +"7583a523": "maxEarlyPresaleEDUSupply()", +"75846a5e": "ZoueToken()", +"75849902": "forwardPurchaseFeesTo()", +"75854fbd": "b(bool,bool)", +"75862df4": "TokenWithEStop(address)", +"75864416": "MeritToken(uint256)", +"7586cd45": "getPokemonCurrentPrice(uint256)", +"7586fcc5": "AutoCoin(string,string,uint8,uint256,uint256)", +"75872a5a": "evolveMonster(uint256,uint16)", +"75874f3e": "Divineum(uint256,string,uint8,string)", +"758822e6": "checkForValidity(string)", +"75885f6a": "approveAndCall(address,uint256,bytes1)", +"758866f0": "TOSToken()", +"7588f82b": "currentVestedAmount()", +"75892cf1": "convert(address,address,uint256,uint256)", +"75894e8c": "getEntity(address)", +"758971e8": "ownerTakeProfit(bool)", +"7589ca40": "BCV()", +"758b31df": "premiumMod()", +"758b5172": "setPlayersPerRound(uint256)", +"758befae": "tokenPresaleCap()", +"758e08d0": "Authorization(address)", +"758ed826": "addDAppContract(address)", +"758f39b8": "verifyProofOfStake(address,bytes32,uint64,uint256,bytes32[],uint256[],uint256,uint256)", +"758fabcd": "MAX_CONTRIBUTION_SLOTS()", +"759014f0": "getChallenge()", +"7591dfa0": "dmlToken()", +"759234ec": "POLE()", +"759242fd": "WorldReserveCurrency()", +"75924b95": "changeWinConfig(uint8[],uint8[])", +"7592550b": "transferHomeViaRelay(address,uint256,uint256)", +"759343d4": "sendTo(address,bytes,uint256)", +"7593473c": "set_brain(address)", +"7593ca71": "setExchangeInterval(uint256)", +"75949c13": "sendHalf(address)", +"7596732f": "MorzeF()", +"759793c1": "buyInternal(uint256,address)", +"7597eede": "isHoliday(uint256)", +"7597fd6b": "escape(uint32,int256,uint32)", +"7599609d": "getEventForHousePlaceBet(uint256)", +"7599f8d9": "private_setRandomAPIURL(string)", +"759a2753": "StakeIncreased(string,address,uint256,uint256)", +"759b2ac4": "removeRole(uint256,address,uint256)", +"759bca86": "TEMWallet()", +"759c01dc": "SonDepTrai()", +"759c676d": "removeAddressToWhitelist(address)", +"759c7a58": "setAdOwner(uint256,address)", +"759e6558": "changelp9(address)", +"759f0914": "createObject(string)", +"759f8712": "nonActivationShortWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"75a0a7a4": "generateNumberWinnerQuery()", +"75a0ff93": "BTKToken()", +"75a2b407": "createPromoFighter(uint256,uint8,uint8,uint8,uint8,address)", +"75a35191": "Travelercoin()", +"75a374ee": "transferMined(address,uint256)", +"75a3eac0": "checkExistsOwnedAngel(uint64)", +"75a4894b": "setReaderId(bytes32,bytes32)", +"75a4e3a0": "unlock(bytes4)", +"75a4ea52": "updateCandidateAddr(address,address)", +"75a52506": "display(bytes32)", +"75a53a8f": "changeTrusteeOwner()", +"75a5425a": "DTesh()", +"75a55a44": "CR7()", +"75a5b1ab": "registerDuration()", +"75a5ba80": "delegateDklSiringAuction(uint256,uint256,bytes,uint256)", +"75a66774": "stampDocument(bytes32,uint256)", +"75a6a332": "testThrowRetractNotRetractable()", +"75a6dbda": "delAdminUsrs(address)", +"75a73ed3": "createMessage(bytes32)", +"75a747dc": "_mint(address,uint256,bytes32)", +"75a75ba9": "TRANSFERS_ALLOWED()", +"75a7db40": "existenceSymbol(address)", +"75a806cd": "transferLoss(uint256,address)", +"75a88bcf": "getPreClaimTimeStamp(address)", +"75a90144": "voterExists(address)", +"75a90e02": "readisnameregistered(string)", +"75a949a3": "transferBlocToUsers()", +"75a94af5": "JadetToken()", +"75aa39bd": "getTeamScore(uint256)", +"75aa8705": "begin(bytes32)", +"75ab9782": "tokensToSend(address,address,address,uint256,bytes,bytes)", +"75ac3b08": "presaleEndBlock()", +"75ace438": "setRdCollectorAddress(address)", +"75ad319a": "makeLiquid(address)", +"75ad31a0": "vesting1Withdrawn()", +"75ad4787": "_processRefund(address,uint256)", +"75ad97bb": "_initSpaceship()", +"75ada3d3": "getLicenseReimbursement()", +"75ae267d": "setCanTransfer(bool)", +"75ae51ce": "minForceOffsetAmount()", +"75aecd8d": "ContributionAdded(uint256,address,uint256)", +"75af370f": "ChainToken()", +"75af65d1": "discounts()", +"75b03941": "retrieveGains()", +"75b0d9cd": "totalSupplyOf(uint256)", +"75b1e894": "ProposalLog(uint256)", +"75b238fc": "ADMIN_ROLE()", +"75b3a83e": "START_ICO_TIMESTAMP()", +"75b3ea8e": "calculateExcessTokens(uint256,uint256,uint256,uint256)", +"75b3f9f5": "currentRateLevel()", +"75b44aea": "getEthRate()", +"75b466d1": "sendOrderedTokens()", +"75b4d78c": "bonus()", +"75b5243d": "editBasePrice(uint256)", +"75b599c0": "changeFashionAttr(uint256,uint16[4],uint16[4],uint16)", +"75b5ec08": "DcatNetwork()", +"75b65abf": "claim(uint16,uint16,uint16,uint16)", +"75b77c4b": "PRICE_MAX()", +"75b82a66": "distributeGameDividend()", +"75b88b82": "Beebit(bytes32)", +"75b8de15": "encodeInt(int256)", +"75b8fa6f": "contractMoneyBalance()", +"75b91305": "_removeDeposits(address,uint256)", +"75b94133": "validatorReward()", +"75b975b7": "askArbitrator(address,bytes32)", +"75b99fb1": "HonestisnetworkICObalances()", +"75b9b357": "updateData(uint256,string,string)", +"75b9c384": "UpdatePay()", +"75b9fd47": "BuyAcorns()", +"75bac6fd": "getLastDeedTimestampByAddress(string)", +"75bae755": "AariTestToken()", +"75bba189": "setModerator(address)", +"75bbc15d": "isNeedDrawGame(uint256)", +"75bbc204": "addJackpotGuaranteed(uint256)", +"75bc369a": "_triggerCoolCountDown(uint256)", +"75bcf09f": "getFibo(uint256)", +"75bd3237": "listingExists(bytes32)", +"75be5846": "unlockForever()", +"75bedf12": "valueOf(uint256,uint256)", +"75bf4777": "Presale(address,uint256,uint256)", +"75bfb140": "teamInstantSent()", +"75c0ae13": "getSalaryTokenAddress(address,address,uint256)", +"75c14f7d": "buyoutAndSetReferrer(uint256,bool,uint256,uint256,address)", +"75c1b643": "setconfig(uint256,uint256,uint256)", +"75c268f3": "rateFeesDenominator()", +"75c26c3f": "closeCrowdfund()", +"75c3039c": "finalizeCapReached()", +"75c304f7": "matchable(address)", +"75c34d94": "BitcoinElena()", +"75c48942": "restrictedVault()", +"75c4a4d6": "isClaimable(int8)", +"75c4aaa6": "addUnderDog(uint256)", +"75c4e9ec": "token_reward()", +"75c589a0": "getMinimumCallCost()", +"75c5efd8": "teamFundsAddress()", +"75c66e2f": "mintTokens(uint256,uint256,address)", +"75c69e39": "SOLUSCRSToken()", +"75c7d4e1": "sellMyTokensDaddy()", +"75c81ad0": "minProfit()", +"75c8a66e": "MANHATTANPROXY7THST()", +"75c8f04b": "addTenant(address)", +"75c9c4a4": "SQUIRREL_BASE_REQ()", +"75c9ee06": "teamFrozenTokens()", +"75c9f351": "maxTokenNum()", +"75ca1fad": "setcommissionPer(uint8)", +"75ca3b2e": "getKittyInfo(uint256)", +"75cb14bc": "panicOff()", +"75cb1bd1": "setWallets(address,address,address)", +"75cb2672": "configure(address)", +"75cbe239": "rulesProposals(uint256)", +"75cc21bd": "LogInvestshare(address,uint256)", +"75cc499f": "LogTokenPurchase(address,uint256,uint256)", +"75cc90b3": "ADMINS_COUNT()", +"75cd109a": "BurnSplit(uint256)", +"75cd51ed": "accountExists(address)", +"75ce2913": "pushOwnedToken(address,uint256)", +"75ce738e": "base_token()", +"75cf567a": "TOKEN_RATE_15_PERCENT_BONUS()", +"75cf77fb": "buyPoohs()", +"75d04628": "updateMatchStartTime(uint8,uint256)", +"75d049bb": "ApplyDividentsMultiplicator()", +"75d0c0dc": "contractName()", +"75d14478": "Chi_available()", +"75d16a1e": "JaxBox()", +"75d1722d": "_cancelOrderWithPayer(string,address)", +"75d2fd7f": "setERC20compatibility(bool)", +"75d32381": "Gave(uint256,address,address,uint256,uint256)", +"75d3bda6": "Product()", +"75d4066d": "getKeccak256(string,string)", +"75d4115e": "orderSubmitter(bytes32)", +"75d427e2": "greaterHash(bytes32,bytes32)", +"75d53a73": "approveMe(address)", +"75d57f44": "Benable()", +"75d5a7c6": "torchContractBalance()", +"75d60ba1": "PayToContract()", +"75d7036b": "getOuvidoriaEnteTipo(address)", +"75d7348a": "makeReferalBonus(uint256)", +"75d74f39": "get_s()", +"75d79399": "LogNotifyOfArbitrationRequest(bytes32,address)", +"75d7e4bd": "hydroTokenAddress()", +"75d7e8ea": "canTransferIfLocked(address,uint256)", +"75d9085a": "buyCardXname(uint256,string)", +"75d91db8": "cancelAuctionByMaster(uint256)", +"75d955f7": "realWorldPlayerMetadataForPlayerTokenId(uint32)", +"75d96718": "RELEASE()", +"75d9aa1a": "migrateFromLegacyReputationToken()", +"75da33bd": "tokpereth()", +"75dbc1aa": "LiquidHome()", +"75dc6471": "getSalesCity(uint256)", +"75dc7d8c": "calcFee(uint256)", +"75dcb701": "getBonusTierCount()", +"75dcb70a": "updateEditionTokenURI(uint256,string)", +"75dd3799": "NetWexCoin()", +"75dd82b8": "setPreMineAddress(address)", +"75ddbc4e": "setBalanceOfPendingToken(address,uint256)", +"75ddfa11": "ChannelBought(string,address,address)", +"75deadfa": "endTimes()", +"75df1fe8": "lockReleaseDate1year()", +"75df9fdb": "backVISTAcoinOwner()", +"75e01780": "startExchange()", +"75e0747e": "referrerBonus1()", +"75e2f405": "product1_luckybuyTracker()", +"75e2ff65": "setMigrationAgent(address)", +"75e3661e": "unblacklist(address)", +"75e372f2": "BlocklancerDataHolder()", +"75e3921c": "ETH_VTA()", +"75e39f26": "getHeroInfo(uint256)", +"75e3e4d4": "_sendTokens(address,address,uint256)", +"75e42744": "balanceOf(address,bytes32,address)", +"75e456c3": "validInvestment()", +"75e5598c": "ACTION_KEY()", +"75e6f675": "redemptionPercentageOfDistribution()", +"75e71d6d": "beneficiaryExists(address)", +"75e87642": "getRoundBetAmount(uint256,uint256)", +"75e88e3a": "getForceOffsetBooks(address)", +"75e8b1a3": "changeWithdrawnTime(uint256)", +"75e8f289": "depositWalletAddress()", +"75e8f757": "ERC20PreICO(address)", +"75e96908": "saveLifeEvent(string,string,string)", +"75e9c91f": "dropNectar(address[],uint256[])", +"75e9e3e2": "Ldt()", +"75ea1b68": "completeDeliverable(bytes32,address,address)", +"75ec899a": "addBodyParts(uint8[])", +"75ed5604": "referralLinkRequirement()", +"75ed8f89": "tOS(address)", +"75ee1908": "whitelistManyUsers(address[])", +"75ee549c": "seteUSD(address)", +"75ee7315": "IcoPaused()", +"75ee85bd": "salsa20_8(uint256,uint256)", +"75eeadc3": "hasWon(uint256)", +"75f0a874": "marketingWallet()", +"75f12b21": "stopped()", +"75f208bf": "testFailCreateWithParentNotInUse()", +"75f289bc": "setDiscountBonus(uint256)", +"75f2e45d": "charityPayed()", +"75f33ed6": "EtherReceival(address,uint256)", +"75f40f40": "underdogPayoutFund()", +"75f41f4a": "initExchangeUser(uint256)", +"75f45878": "scheduleCall(bytes,bytes,uint256)", +"75f46563": "setVLTMultiSig(address)", +"75f6641f": "GoldBackedToken(address)", +"75f7cc4a": "PeriodStarted(uint256,uint256,uint256,uint256,uint256,uint256)", +"75f7d866": "tokenReserved2Deposit()", +"75f7e6f0": "saneIt()", +"75f829a9": "BetAccepted(uint256,uint8,address,uint256,uint256)", +"75f890ab": "setContract(address)", +"75f91ec8": "getTokenAmount()", +"75f96ead": "Guess(uint256)", +"75f9ae86": "setCertificateSigner(address,bool)", +"75f9e6da": "initialIssueMintingDate()", +"75fa1bd3": "_reserveTokens(address,uint256)", +"75fc8e3c": "goodbye()", +"75fcc6f1": "OWN_burnToken(address,uint256)", +"75fd4c23": "test_basicUnitTest()", +"75fd776a": "STRATEGIC_PARTNERS_POOL_ALLOCATION()", +"75fda973": "tokenDistributeInDividend()", +"75fe06dd": "claimXmasGift(address)", +"75fe2cb8": "setDnaExist(uint64,bool)", +"75fe2e33": "getMonsterObjId(address,uint256)", +"75ff0664": "ERC223TokenMock(address,uint256)", +"76005c26": "fulfillData(uint256,bytes32)", +"76014a2d": "senderETH(address)", +"760163af": "getLastGames()", +"76017bbd": "getRewardWei(address)", +"7603ac4b": "registerFileClosing(string,uint256,string,string)", +"7603b02d": "houseCommission()", +"76041376": "devTeamAddress()", +"76045702": "AcceptsDividendFacial(address)", +"7604b6d7": "testGetBlobStoreFromFullBlobId()", +"76052df8": "setPurchasable(bool)", +"760672df": "weiToTokensAtTime(uint256,uint256)", +"7606f781": "getMetrics()", +"7607422a": "CSCS(address)", +"76098303": "futxMiner()", +"7609c5a9": "transferFromToICAP(address,string,uint256)", +"760a221c": "LOCK_RELASE_TIME()", +"760a45cf": "lockStrategy(address)", +"760a812c": "ChangedNeighbourReward(uint256)", +"760a8c2a": "setActive()", +"760ac21b": "testFailBadTransfer()", +"760b8f62": "bonusAll()", +"760bb006": "isUser(bytes32)", +"760c1fa3": "loadX(uint8[],uint256,uint256,int256)", +"760cd8e1": "transferAgent()", +"760cfa57": "GeneratedERC20Contract()", +"760df4fe": "_isCarousal(uint256)", +"760e2cf3": "buyUpgradeCard(address,uint256,uint256)", +"760eab1a": "ZodiacCore()", +"760ee49c": "setCurrentState(bool)", +"760f7382": "shipTokens(address,uint256)", +"76102b3c": "PRICE_PRESALE_WEEK3()", +"76105fe7": "tarifOf(address)", +"7611f50d": "periodStage()", +"7612115d": "setTokenPartner(address)", +"76124dac": "vote(bytes32,uint256,address)", +"76124db7": "Update_TrustlessTransaction(uint256)", +"761390b9": "BCX()", +"76147a0e": "notification(address,uint256)", +"7614e727": "baseMineTokenAmount()", +"761522af": "TradeBits()", +"76164085": "seek(int256,int256,bool)", +"76165adf": "buy(address,address,uint256,uint256,uint256)", +"76167a89": "getMessageSender()", +"7617f814": "sumPreICO3()", +"7617fbbd": "PreOrder(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"76190f8f": "isSiringClockAuction()", +"76192200": "finishMinting(address)", +"7619317b": "redemptionWallet()", +"76196c88": "setDnsrr(bytes32,bytes)", +"76197591": "finalizedICO()", +"7619d22e": "LEGAL_EXPENSES_2_TOKENS()", +"761a5b0e": "updateERC20rewardMultiple(uint8)", +"761a832f": "setBaseRewards(uint256,uint256)", +"761aef78": "BuyTicket()", +"761b59ac": "crabPartDataFromGene(uint256)", +"761ba894": "getPremiumMultiplier()", +"761bb70a": "train3(uint256,uint256)", +"761c1cf9": "SetupGWT(string,string,uint256,uint256,uint256,address,address,uint256)", +"761c3688": "remark2()", +"761c4524": "SHARE_TEAM()", +"761c7cfe": "resolveChallenge(uint256)", +"761d9e68": "getUserPolicy(address)", +"761dc416": "Megaton()", +"761e0d2d": "DEFAULT_MINING_BIT()", +"761e64c4": "setPI_edit_31(string)", +"761fe6fe": "totalAmountsBetStage1(uint256)", +"76207a5b": "getOrderInfo(bool,uint256,uint256)", +"7620a65b": "Publisher()", +"7620f4bb": "fipsNotaryLegacy68b4()", +"76227f3b": "burnAdminAmount(uint256)", +"76235b49": "getUUIDS(bytes32)", +"76247776": "getDirectory()", +"762506b6": "lrs(uint256)", +"7625391a": "distribute(uint256,uint256)", +"762549e0": "minThresholdUnits()", +"76266ce9": "logResources()", +"76271346": "_parent(uint8)", +"76278e7b": "limitDatePresale()", +"7627c9ad": "grantTransferRight(address)", +"7627e941": "validateOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"76285b5b": "_is360thDay()", +"76289f71": "setMasterAddress2(address)", +"7628e728": "PRE_ICO_TILL()", +"7629cca0": "ContractDisabled()", +"762a4f35": "updateClosingTime(uint256)", +"762a66a2": "getAuction(address,uint256)", +"762ac19d": "startICOPhaseOne()", +"762c38fd": "askQuestion(uint256,string,address,uint32,uint32,uint256)", +"762c7ab2": "setPercentForHelpCoin(uint256)", +"762ced87": "prcntRate()", +"762d739a": "vigencia()", +"762e3816": "TOURNAMENT_WALLET()", +"762ede1e": "ETHCONEarlyBirdToken()", +"762fdc0c": "getRatePlan(uint256,uint256)", +"762ffc42": "VanityReserved(address,string)", +"76305a89": "CoinCrowdICO(address,uint256,uint256)", +"763091ff": "initCreator(uint256)", +"76309e70": "CTT()", +"7630ad34": "getInfoD(uint256)", +"76319190": "removeSupportedToken(address)", +"76323253": "createRounds(uint256)", +"76324597": "dropStart()", +"763250e1": "GizerToken()", +"763265de": "setMaxCap(uint256)", +"7632b18b": "WICCrowdsale(address,uint256,uint256,uint256,address,address)", +"76338028": "functionCalls(bytes32)", +"763430b8": "mFUNDING_SALE_TIMESTAMP()", +"7634d45d": "titlesSold(address)", +"7634ecc0": "debitEqually(address[],uint256)", +"7634ed39": "saveNewAnchor(bytes32)", +"763542ce": "BucketBuy(bytes32,uint256,address,uint256)", +"7635761b": "getusersCount()", +"7635e1de": "changeTokenManager(address)", +"7635e409": "createZombie(uint8,bytes32,uint16,bool,address)", +"763730bd": "whitelistAddresses(address[],uint256,bool)", +"76375c5c": "splitterContract(address,uint256)", +"763770d2": "getTokensManual(address,address)", +"7637a12e": "GoldmintMigration(address,address)", +"7637da03": "MINER_STARTING_PRICE()", +"76385f2a": "PeriodOfAccount(address,uint256)", +"76389260": "EthlanceSearchFreelancers(address)", +"76390144": "getCorrectedStats(uint256)", +"76399bc6": "getFoundtionAddres()", +"763a6390": "setWeightLostPartLimit(uint8)", +"763a666a": "withdrawLiquidityPoolTokens(address,uint256)", +"763a738c": "allNames()", +"763ac589": "createStake(address,address,uint256,uint256,bytes)", +"763add8f": "KPCS(address)", +"763b144e": "EmpireCrowdsale(uint256,uint256,address,uint256,uint256,uint256)", +"763cbde0": "_addPassportLogic(string,address)", +"763cf9aa": "feed100(uint256)", +"763d2500": "getTotalNbOwners(uint256)", +"763e29ad": "CherishToken()", +"763f337e": "setAllowReferral(bool)", +"763f4011": "mintMarketing(address,uint256)", +"763fd2ab": "TOTAL_PRESALE_TOKENS()", +"763ffcec": "setupDisbursement(address,uint256,uint256)", +"7640304d": "_lastSnapshotId(address)", +"76405122": "buyImplementation(address,bytes32,uint256,uint8,bytes32,bytes32)", +"76418809": "private_withdrawBankFunds(address)", +"7641a8c6": "SetFinalBlock(uint256)", +"7641e6f3": "burn(uint256,string)", +"76421887": "OWNER_LOCK_BLOCKS()", +"7642249c": "mintadd()", +"76429844": "MultiSendToken()", +"7642dc0f": "calcVesting(address)", +"764300bf": "ALLOC_MARKETING()", +"764358e6": "logSweep(address,address,uint256)", +"764423a4": "buyerAddressTransfer(uint256,address,address,address)", +"764499e5": "GamePlayed(bytes32,bytes32)", +"7644d361": "hashMessage(string,string,string,uint16,string)", +"7644ecbf": "BallotO(address[],uint256[])", +"76456887": "startSecondPhase()", +"76466d42": "setAllowedContract(address,address)", +"7648c929": "returnRemainingEther()", +"7648f99b": "ProposalSubmitted(uint256,uint256,address,uint256,uint256,string,address,uint256,uint256)", +"764912ef": "totalTokenCount()", +"76495ce7": "tokensFor1EthP4()", +"76496e34": "earlyCommunitySupply()", +"764ab11b": "WalletV2(address,address)", +"764b08c3": "STATS_SIZE()", +"764c499b": "contract_terminated()", +"764c6dd3": "voteToFreeze(address)", +"764c86bd": "totalDistanceRun()", +"764c8e54": "depositBoth(uint256)", +"764c92f2": "trustedOrderTransfer(address,address,uint256)", +"764c98c1": "getIntArrayDynamic()", +"764c9d32": "sleepContract()", +"764d1e04": "getFreelancerParams()", +"764d9969": "XubiToken()", +"764e50eb": "priceUpdated(uint256,uint256,string)", +"764e5cd9": "getSkills(address,uint256)", +"764e971f": "add(uint256,bytes32)", +"764ea3fe": "walletEhterCrowdsale()", +"764f3aa8": "getTokenBalances(address)", +"764fe7d1": "totalMiners()", +"76520713": "setLock(string,bool)", +"7652ce3b": "getRoot(uint64,bytes)", +"7653740f": "addCbAddress(address,bytes1,bytes)", +"765388ae": "createCrab(uint256,uint256,uint256,uint256,bool)", +"7653d31c": "_clearQueue()", +"7653f795": "CarTaxiIco(address,address)", +"7655e825": "unsafeWriteUint8(uint256,uint8)", +"765718d7": "register(uint256,bytes)", +"76577eae": "distributeEarnings()", +"76586bcb": "doWithdrawal(address,uint256)", +"76587847": "buyDepots(uint256)", +"76587921": "transferFromWithNarrative(address,address,uint256,string)", +"7658c574": "setQuantityFactor(uint256)", +"7658d5ef": "totalICO()", +"76596a1a": "hasTeamMember(address)", +"7659de23": "snapshotBlockHeight()", +"7659fd71": "BitcoinProtocol()", +"765aa39e": "startMulti()", +"765af8bf": "getNumArtworksXType()", +"765b1766": "tryFinishInterface(address)", +"765b59d2": "getStatus(uint256,address,address)", +"765b8dee": "transferStep2(address)", +"765bfac6": "setEscuela(uint256)", +"765c9c7f": "bionic()", +"765dd7a0": "addTeamAddress(address)", +"765e0159": "getNext(address)", +"765f09f2": "GetCurrencyInformation(uint256)", +"7660473a": "EconomyTaxed(string,string,string,string,string)", +"7661129e": "updatePromoEthCommission(uint256)", +"76617156": "burnAmountAllowed(address)", +"7662850d": "init(uint256,uint256,uint256,uint256)", +"7662c9a7": "GetAskSeries(address)", +"7663265c": "_setGameSettings()", +"7663680e": "setTotalBurntCoins(uint256)", +"76636e73": "PREICO_BONUS()", +"76637dcd": "WhoIsTheContractMaster()", +"7663f171": "getCardIndexOfOwner(address,address)", +"7663f228": "testBurnThis()", +"7663f822": "exists(address,address)", +"76640648": "payforRefund()", +"7665f6a7": "setTransferOwnership(bool)", +"7666ee8f": "addCustomerToRegistry(address)", +"76671808": "currentEpoch()", +"766719f0": "optInXferGas()", +"766954b4": "hashString(string)", +"7669c0c4": "showPhaseCount()", +"766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", +"766a5f09": "setSalesPool(address)", +"766b0823": "addWhiteBackersByList(address[])", +"766b1818": "PYCToken()", +"766bd930": "Duanwu()", +"766d30aa": "setDefaultRecommAddr(address)", +"766d5235": "isOpening()", +"766d8365": "resetRoundStartTime(uint256)", +"766e33f4": "releaseStart()", +"766e4f2c": "issueTokensToUser(address,uint256)", +"766e866c": "setMaxGasRefund(uint256)", +"766e8b27": "tokensaleTokensPerEtherNow()", +"76703ef1": "AVIU()", +"767180d0": "impl_purchase(address,bool,bool)", +"767392b3": "equal(bool,bool,string)", +"7673faf0": "wallet4()", +"76740de0": "isPlayer()", +"767418b0": "alterBalance(uint256)", +"76745dbb": "increaseTotalStake(uint256)", +"76748f2a": "default_price()", +"7674cee3": "paymentMin()", +"76753b04": "ledgerUserBetContribution(address)", +"76775c10": "addReferrer(address,uint256)", +"76779829": "randomC()", +"767800de": "addr()", +"7678369a": "dayfund(address)", +"7678473d": "BTCDOGE(uint256)", +"7678f8bb": "getBid(int256)", +"76792ad9": "setDaily()", +"76793f47": "kwhFund()", +"7679a816": "handleFund()", +"767a11ca": "verifiedAttributes(address)", +"767a99ee": "legalContract()", +"767b6190": "constructor(uint256)", +"767b79ed": "register(string,uint8)", +"767bc136": "cards_titanium_total()", +"767bcab5": "setRandomizer(address)", +"767c732e": "enterBidForCollectible(uint256,uint256,int256)", +"767c9d18": "getMigrateInAttoTokensValue()", +"767d65ba": "ASEChain()", +"767eb651": "getRemainingAmount(address,address)", +"767eb8ad": "isValidName(bytes16)", +"767f0215": "MAIN_SALE_BONUS_PERCENTAGE_PHASE3()", +"767f61ac": "putTitle(bytes32,string,bytes32,bytes32,bool,string)", +"767f7b01": "User(string,address)", +"767fa723": "getPresaleInfo()", +"767fb1c4": "RecoverableController(address,address,uint256,uint256)", +"76809973": "BeneficiaryChanged(address,address)", +"76809ce3": "decimal()", +"76814692": "BusToken()", +"76823637": "startNewTurn()", +"768255ca": "TokitRegistry(address)", +"7682e6ff": "getTrustSetting(address)", +"768356c1": "TUI_ADDRESS()", +"768433c2": "topFab()", +"76849376": "addNode(bytes32,address)", +"768549aa": "KpopItem()", +"76855764": "enableSudo(bool)", +"76858faf": "ViralToken()", +"7685e1df": "NPTToken(address)", +"7686136a": "updateCourseRate(address,uint256)", +"76865eea": "unHalt()", +"7686cea9": "etap()", +"76884153": "AirTransfer(address[],uint256,address)", +"76888a3e": "TheTokenF()", +"76890c58": "transferOut(address,uint256)", +"76894bd9": "tokensToEthereum(uint256,uint256)", +"76897b90": "setReserved(uint8,uint8)", +"768a3326": "myxTest()", +"768a3a7d": "GetSender()", +"768aa331": "addHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[])", +"768afcec": "buyKeys(uint256,string,string)", +"768b4ce0": "updateWorldScore(uint256,uint256)", +"768bd5cd": "THULYA()", +"768c326d": "validatePhaseDates(uint256,uint256)", +"768c9af4": "Approval(address,address,bytes32,bool)", +"768e7220": "ownerLockedBalance()", +"768f930d": "checkSignersByAddress(bytes32,uint256,uint256,uint256)", +"76907bc7": "setCoinBalance(address,uint256)", +"7690bee4": "NextGenHyip()", +"7690ed70": "_changeLockDate(uint256)", +"7691471c": "PRE_SALE_TOKEN_CAP()", +"76917b68": "updateMC(uint256)", +"76918f5d": "setAdPriceMultiple(uint256)", +"76922f78": "auctusPreSaleAddress()", +"7692ac94": "createEtherMonster(uint256,uint256,uint256)", +"7692ba9a": "claimOwnership(string,string,uint256,uint256)", +"7692c4d8": "testCantFinalizeNotEndedSale()", +"7693488b": "finalizeTokenSale()", +"76937a3f": "airDropCustom(address[],uint256[])", +"7694df16": "scaledRemainder()", +"76959b6a": "hasSDC(address,address,uint256)", +"7695be1d": "DaleOR()", +"7695d79b": "nftTokenCount()", +"769643bc": "reclaimTokenOwnership()", +"76965867": "getStakedBalance()", +"7696c042": "secondsPerMonth()", +"7696cf52": "bonusFirstWeekPeriod()", +"7696f0db": "frozenCellCount(address)", +"769794dd": "TildeCoin()", +"769796fe": "resetAction(uint256)", +"7698da24": "affirmationsSigned(bytes32)", +"76992d7c": "SettingsChanged(uint256,uint256,uint8,uint8,uint8,uint8,bool)", +"769988b3": "p_update_mEmpireScoreMultiplier(uint256)", +"76999896": "KingOfTheEtherThrone()", +"769af180": "EGGS_TO_HATCH_1BAT()", +"769bf742": "unregisterRecord(bytes32)", +"769c9226": "setLockAll(bool)", +"769db61d": "addNewCard(uint256)", +"769dc523": "GetCategoryNumber(bytes4)", +"769e86cd": "getMyAccountBalance()", +"769edf6a": "createHash(uint256,address)", +"769f194f": "FOUNDERS_TOKENS_VESTED_2()", +"769ffb7d": "setDirectMintAgent(address)", +"76a04af5": "CompensateChips(address,uint32[])", +"76a133ca": "KabirTestToken2()", +"76a24f25": "originalPrice()", +"76a25c5c": "calculateReward(uint256,uint256,uint8)", +"76a310a5": "addAuction(uint32,uint256,uint256,uint8,uint32)", +"76a327fc": "hitMobster(uint256,uint256)", +"76a3f9c9": "addToWinningsArray(uint256,address)", +"76a43abc": "_createPony(uint256,uint256,uint256,uint256,address,uint16)", +"76a4a44d": "AssignGGEPoolOwner(address)", +"76a54c60": "sendEth(address)", +"76a5b431": "removeTip(address,bytes32)", +"76a5b5b9": "LogTransfer(address,address,uint256,bytes)", +"76a64cbf": "BasicToken(string,string,uint256,uint256)", +"76a6676a": "IssuerTransferred(uint256,address)", +"76a67a51": "pause(address)", +"76a684de": "denyAllowanceProxyAccess(address)", +"76a6bf52": "isExecuted(uint256)", +"76a766f7": "Dashgold()", +"76a85d54": "setExchangePrice(int256)", +"76a8bc10": "setExpiry(address,uint256)", +"76aa2f74": "increaseJackpot()", +"76aad651": "paymentSupply()", +"76ab5ea6": "changeDifficultyAndPrice(uint256,uint256)", +"76aba714": "refundMany(uint256,uint256)", +"76abc03b": "getShareDistribution(uint256)", +"76ac2323": "WinkSale(uint256,uint256,uint256,address)", +"76acb5e8": "BuyTicket(uint256)", +"76acb968": "TESTTOKEN1()", +"76ad3abf": "unregisterTraderAccount(address)", +"76ae684d": "setSaleOngoing(bool)", +"76aed2e1": "getTokenType(uint256)", +"76aef5e0": "doubleSend(uint256,address)", +"76af7837": "Loss(address,uint8,uint256)", +"76af9a1a": "balancePreSale4()", +"76b07186": "isPass(address)", +"76b088a9": "check_lock(address,address)", +"76b1514f": "getMaxFreeTeams()", +"76b15836": "changeStatusModerator(address,bool)", +"76b18618": "changeUnitsOneEthCanBuy(uint256)", +"76b1f3d3": "grantAccessToAddress(address)", +"76b3131e": "createvillage()", +"76b33367": "refundsIssued()", +"76b34d2f": "changeCrowdsale(bool)", +"76b39cf9": "activateInTestMode()", +"76b3c8a8": "getLotteryInfo(uint256)", +"76b547b8": "AthaYOGAToken(address,address)", +"76b5d926": "unreserve(uint256)", +"76b63576": "mintFounderTokens()", +"76b69d77": "apiRegistryContractAddress()", +"76b707b7": "getRelease()", +"76b95761": "setVestingStartDateTime(uint256)", +"76ba242c": "bonusTokens()", +"76ba6009": "approveRequest(bytes32)", +"76babef7": "Puzzled(address,bytes32,bytes32)", +"76bc21d9": "fireEventLog2Anonym()", +"76bc522c": "getZIndex(uint16)", +"76bd28bf": "ORNETCOIN()", +"76bd4220": "depositBank()", +"76bd4d2d": "submitProblem(uint256)", +"76bd5f3c": "changeMintedCappedIdx(address)", +"76be0b89": "HIROTOKEN()", +"76be166c": "toAsciiString()", +"76be6c24": "mintLVE(address,uint256,uint256)", +"76bef6b4": "getOneByOneRootHash(uint256)", +"76bf2392": "getCurrentDisplacement()", +"76bf8044": "pledge(bytes32)", +"76bf9f57": "wildcardCount()", +"76bfa5f6": "ProvideSale(address,address)", +"76bfba0e": "splitPay(address[],uint256)", +"76bfba56": "depositForDividend(uint256)", +"76c158cf": "minBankerEther()", +"76c2c0aa": "oresLeft()", +"76c2c296": "SYSTEM_CREATION_LIMIT()", +"76c2f9e7": "HitToken(string,string,uint8,uint256,address,address,address,address)", +"76c30794": "mint0(address,uint256)", +"76c390fe": "Display()", +"76c3b445": "calculateTotalTokenPerContribution(uint256)", +"76c44a80": "openIEOStarted()", +"76c46a70": "changeUnitUserBalanceLimit(uint256)", +"76c535ae": "isExpert(address)", +"76c6c685": "assertItDoesntThrow(string)", +"76c6dc8b": "isPosBitOne(uint256,uint256)", +"76c6fc9a": "checkOwnerShare(address)", +"76c70431": "CRCToken()", +"76c75958": "startCrowdsale(uint256,uint256,uint256,address)", +"76c7a3c7": "MIN_FEE()", +"76c7b434": "developersCut()", +"76c7fc55": "removeBorrower(address)", +"76c82e92": "minAcceptedAmountPresale()", +"76c87548": "scoreBracket(address)", +"76ca0225": "initTwo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", +"76ca9e48": "indexPaidBonus()", +"76cb69e9": "KOIN(uint256,string,uint8,string)", +"76cb6f9b": "removeOffChainAddress(address,address)", +"76cba420": "stcOrginalBuy(uint256)", +"76cc1c5c": "landManagement()", +"76ccb1fe": "getSpinOutput(uint256,address,uint256)", +"76cce072": "setBlance(address,address,uint256)", +"76ccf063": "calSimpleRoom(uint256,uint256,uint256,bytes32)", +"76cd005d": "distillGodOwner()", +"76cd470c": "getCurrentAccountingPeriodId()", +"76cd7cbc": "sign(bytes)", +"76cd940e": "currentBatch()", +"76cdb03b": "bank()", +"76cfc366": "depositOffchain(address,uint256,uint256,bytes)", +"76d06add": "issueTokensWithCustomBonus(address,uint256,uint256,uint256)", +"76d0998f": "Odin2(address)", +"76d173a9": "addressAndBalance(address)", +"76d1d35e": "numberOwners()", +"76d260bb": "setInitialVaribles(address,address)", +"76d2d717": "GetFreeTokens()", +"76d33951": "bid(string,address)", +"76d380cb": "IrisTokenPrivatSale()", +"76d438b0": "sendReward(uint256,uint256)", +"76d47bf5": "unlockAddress(address,address)", +"76d57aad": "amountInLock(address,uint256)", +"76d57ad3": "getMixerInfo(bytes32,uint256)", +"76d60a91": "TokensMinted(address,uint256,uint8)", +"76d66f5d": "_Transfer(address,address,bytes32)", +"76d690bb": "BountyList()", +"76d6c296": "getPresale1()", +"76d6da67": "TokenMintingEnabled(address,bool)", +"76d738d9": "DAZToken()", +"76d75952": "getLabelType()", +"76d76b9d": "marketRegisterCost()", +"76d83cb3": "getTerminalCount()", +"76d865dd": "addAdminOwners(address,string,string)", +"76d8f03e": "getBonusCount()", +"76d92428": "setGatekeeperAddress(address)", +"76da5667": "admin_kill()", +"76dad223": "showNumber()", +"76db2e84": "setMinimumEtherAmount(uint256)", +"76db6c8d": "isRedeemable(address)", +"76db76f1": "clearNextPrizeTime()", +"76db7fd4": "setExchangeFlag(bool)", +"76db9b14": "CXTCContract()", +"76dbd108": "calculateProof(string)", +"76dc4c0a": "isFundRequestToken()", +"76dc6643": "threeHotHoursCapInWei()", +"76dc74cb": "sendHoldComisions()", +"76dc76e7": "getUserNumbersOnToken(address,uint256)", +"76dc97d9": "_saveMessage(uint256,uint256,address,string)", +"76dd1f86": "totalMintLimit()", +"76ddfc39": "MIN_HARD_CAP()", +"76de03d0": "weiTotalRefunded()", +"76de1684": "generateOrderByMerchantWithPayee(address,address,uint256,string,string,string)", +"76dffa4e": "MedCann()", +"76e00ed7": "_fromNanoNIL(uint256)", +"76e0f978": "navAdmin()", +"76e20e53": "getMyBets(uint256)", +"76e277c1": "ChickenFarm()", +"76e29114": "nfsPoolCount()", +"76e2bbc7": "paymentInternal(bytes32,uint256[])", +"76e403ec": "balancesLocked1Y(address)", +"76e40c9c": "lendEther()", +"76e44ed8": "lockAll()", +"76e4660c": "getSumAmountOfDisputedStepsProPatient()", +"76e4ca0d": "voteQuorum(uint256,bool)", +"76e4f921": "parachute()", +"76e51e96": "TokenModuleManager()", +"76e53221": "participationCaps(address)", +"76e55338": "mytest()", +"76e57d4b": "withdrawalAddressFixed()", +"76e5c0ca": "WineryOperations()", +"76e608c7": "buyExistFactory(uint256)", +"76e6d2b4": "unLock(address)", +"76e6dbc7": "tokenBaseRate()", +"76e702ee": "tokenDeliveryDue()", +"76e71dd8": "delegateTotalSupply()", +"76e7430e": "finally(address)", +"76e75e05": "getPurchaseRecord(address)", +"76e7b151": "GOFCoin(uint256)", +"76e83bcb": "listModule(uint256,bytes32,bytes32,string,bytes4)", +"76e92559": "totalMembers()", +"76e93db5": "totalMaxBuy()", +"76e9d4fb": "Hybrid(uint256,string,uint8,string)", +"76ea1c6a": "BuyOnSecondaryMarket(uint32)", +"76ea430a": "STAGE1_TIME_END()", +"76ea909d": "indSale()", +"76eaef99": "CatOffered(uint256,uint256,address)", +"76eb5ce0": "END_PREICO_TIMESTAMP()", +"76ec477d": "cancelGame(uint256,string,uint256)", +"76edb1b5": "ReleaseUpdate(uint256,uint256,uint256,string)", +"76edc29d": "TelegramOpenNetwork()", +"76ee2d68": "lokedMint(address,uint256,uint256)", +"76ee3a87": "mainICOStartTime()", +"76ef5d14": "divX(uint256)", +"76f10ad0": "getSnapshot(uint256)", +"76f14c98": "personalizeSquare(uint256,bytes,string,string)", +"76f187ab": "tokensTransferredToHold()", +"76f1dbd4": "Authenticate(address)", +"76f28a4f": "setMarket1(address)", +"76f2a59a": "instantMint(address,uint256)", +"76f2a94b": "acceptWithdrawals(uint256[],uint256[],uint256[])", +"76f30ca1": "toContentID(address,uint256,string,bytes)", +"76f31513": "decreseApproval(address,uint256)", +"76f3264b": "getProviderSupply(uint256,uint256)", +"76f36dec": "ETHC(uint256,string,uint8,string)", +"76f39b28": "SetMaxAllowedBetInTokens(uint256)", +"76f4d8ad": "exchangePlayerTokenCount()", +"76f6218a": "promoBonus()", +"76f660f6": "batchTransferFrom(address,address[],uint256)", +"76f6de69": "RTCCOINERC20(uint256,string,string)", +"76f70900": "oraclesCount()", +"76f75e7f": "orderList(uint256)", +"76f7c522": "hasOneStepWithdraw()", +"76f86e18": "order_buy(address,uint256)", +"76f88781": "pow2Constant()", +"76f9378d": "getWords(uint256)", +"76f95818": "stopFlagOn()", +"76f9b8d9": "getTokenInfoSignatures()", +"76f9e018": "greedIsGood(address,uint256)", +"76f9fd38": "castVote(string,uint16)", +"76fb7c72": "setAllowedAgentsForOtherSource(address,bool)", +"76fc53c0": "extDistributeBondFund()", +"76fd7951": "MacoTestCoin()", +"76fd7b11": "requestWeiPrice(string)", +"76fe192a": "forceResetPeriod()", +"76fe3efa": "itemNameAddress(uint256)", +"76fe47eb": "returnBooleanInverted(bool)", +"76fe8228": "getHorseSex(uint256)", +"76fede7a": "get_term_deposit_end_date(address)", +"76fee774": "getNewPetCard(uint8)", +"76fee8e0": "MineBlocksAddr()", +"76ff1d24": "MailhustleCrowdsale()", +"76ff87cc": "VYRAL_REWARDS()", +"76ffb887": "failure()", +"77002fcf": "getBadge(bytes32)", +"77009c5c": "EYCryptoTradingGOLD()", +"7701c52d": "withdrawMarginPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", +"7701f361": "test_newProposalAndNotEnoughVotes()", +"7702b8e4": "confirmOneSell()", +"770342ee": "ChannelClosed(address,uint256)", +"7704533d": "arbitrationWallet()", +"77049457": "median()", +"770506c1": "withdrawMobileAppCoin(address)", +"7705b6f4": "claimBoard(uint256[81])", +"7706390b": "handover(uint256,address)", +"77073437": "alicoinToken()", +"77076855": "isInOpenMakeOrder(address)", +"77079f55": "YohoToken()", +"7707c69a": "set_sale_owner(address,address,bool)", +"7707e2b2": "withdrawHoldVault(uint256)", +"770850c8": "accountIndexOf(address)", +"770864ad": "addOpenMakeOrder(address,address,uint256)", +"77086d94": "addSpaces(uint256[],uint256[],bytes)", +"7708b441": "founderWithdrawablePhase2()", +"7708e321": "setaddress(address,address)", +"7708e43b": "getNumBets(uint256)", +"7708ea1d": "ROLE_CEO()", +"77097bfa": "testerReentrant()", +"77097fc8": "mint(uint256,string)", +"7709bc78": "contractExists(address)", +"7709c0d3": "setMaxWhitelists(uint256)", +"770a4265": "updatePrizeDist(uint8,uint8,uint8,uint8,uint8)", +"770ae2af": "setMinAllowedBetInEth(uint256)", +"770b210e": "canBuyLimit()", +"770b5414": "getCurrentData()", +"770b80b6": "returnBalanseToTarget()", +"770b8aab": "RecoveryModeActivated()", +"770bb9ae": "_createDrawings(bytes32,bytes32,address,string)", +"770c59b8": "purchaseParrot(uint256)", +"770c6bde": "removeItemLendingList(address,uint256)", +"770c6cbb": "WithDrawPreForkChildDAO()", +"770cde1b": "ContractExample(string)", +"770d64c6": "LogLate(address,uint256,uint256)", +"770d6591": "_setArmorValue8(uint256)", +"770d8e79": "ADDR_TKG_TEAM()", +"770e3106": "getAccountsCount()", +"770e9e85": "takeTheTorch(address)", +"770eaebe": "Send_Data(address,uint16)", +"770eb5bb": "set_label(bytes12,bytes32)", +"770f75b7": "fireCancelProposalEvent(address,uint256)", +"770f9feb": "clyckterium()", +"770fe154": "ApplyVote()", +"77109b05": "depositEther(address[2],uint256[7],uint8,bytes32[2])", +"7710f29f": "setupPeriodForICO(uint256,uint256)", +"77115c9d": "seedRoundEndTime()", +"771282f6": "currentSupply()", +"77129790": "Crowdsale(address,address,uint256,uint256,uint256)", +"7712acd2": "getABname(uint256)", +"7712c870": "slammerTime()", +"7713b431": "getContactsLength()", +"7713ba04": "setPI_edit_11(string)", +"77146255": "_nextTokenId(uint256)", +"771548e2": "moveAccount(bytes32,bytes32)", +"771602f7": "add(uint256,uint256)", +"77169fbd": "gainsOfVault(uint256,address)", +"7717403b": "ALLOC_CROWDSALE()", +"7718238f": "addFee(address,uint256)", +"7718ce93": "player5()", +"7719f57e": "Seedex420(uint256,string,uint8,string)", +"771a2af4": "getCitationRecordsLength(string)", +"771a3a1d": "taxRate()", +"771acf31": "fluffyCatCut()", +"771ad078": "BuyGenesis(address,address)", +"771ad635": "getContentCred(address,uint256)", +"771c04ae": "ARCToken(address,uint256,uint256)", +"771c288b": "next_stone_id()", +"771c3ec7": "setVendingAttachedState(uint256,uint256)", +"771c7ad1": "hotwalletAddress()", +"771cbe3d": "_mintCard(uint8,address)", +"771ce552": "readownerXname(string)", +"771d7b47": "finishedMigration()", +"771d9d05": "ecosystemAllocated()", +"771e4326": "wingsETHRewards()", +"771eee16": "freezeToken(bool)", +"771feb74": "getPrecious(uint256)", +"771ff086": "allocatenonCSTokens(address,uint256)", +"7720295a": "STARTING_CLAIM_PRICE_WEI()", +"7720e74c": "changeSaleEnd(uint256,uint256)", +"77215c8d": "getObserverCount()", +"772199a1": "getJob(address,uint256)", +"77226237": "isCompetitionAllowed(address)", +"77228659": "query2(uint256,string,string,string)", +"7722d01f": "TokenChanger(address,address)", +"77231e6c": "tokens_sold()", +"77233e90": "setTo(address)", +"7723e2f3": "ArtToken()", +"77241a5f": "makerDaoContract()", +"77248e3d": "claimReservedTokens()", +"7724bdbf": "setStatusInternal(address,uint8)", +"772506bb": "jackpotFraction()", +"77253984": "DPToken(uint256,string,string)", +"7725686f": "thawGlobalTransfers()", +"7726a59a": "WINNER_COUNTRY_CODE()", +"7726bed3": "setEnable(bool)", +"7727c9ad": "changeMinStake(bytes32,uint256)", +"77282b70": "polymathRegistry()", +"7728579a": "isIcoFinalized()", +"77287520": "donate(string,address,string,int256)", +"77289b50": "setMedium(uint8)", +"7728c75a": "LoanRepaid(address,address,uint256,string)", +"7728f48b": "destroyRobot(uint256)", +"772a3835": "customerExchangeFiat(uint256,address,string)", +"772b7a73": "getTxOrigMcwTransfer(bytes32)", +"772bcc79": "DexAgeTest()", +"772c1863": "increaseStellarBalance(uint256)", +"772c658b": "getVIPBounusRate(address)", +"772cb26b": "isStringEq(string,string)", +"772ce10b": "setFuelDestination(address)", +"772e1c6f": "getTrustValue(uint256)", +"772e6f03": "votingProposal(string,bytes32,uint256)", +"772fdcb1": "isContributorInLists(address)", +"77300338": "setActiveTimes(uint256[],uint256[])", +"773041ce": "setInvestor(address)", +"77312cdc": "setMultiETH(address[],uint256[])", +"773183e3": "buyEmptyLocation(uint256)", +"7731cd2a": "Acc(address)", +"7732b2a4": "getNextCrystalReward(address)", +"7732b322": "PinMoCrown()", +"773355bf": "script(bytes)", +"77337d37": "tstart()", +"7733f24f": "ratePreSaleStage()", +"77343408": "setURL(string)", +"7734da3c": "NewPassContractor(address,address,address,address)", +"7734e398": "setFirstBonus(uint256)", +"773531f3": "tokenOwnerBurner()", +"77364291": "taskInfo(uint256)", +"773721b3": "receivedCWCreturn(address,uint256)", +"77372213": "setName(bytes32,string)", +"77381082": "Virtonomi()", +"77390f8b": "_envelopes(string,address)", +"773984dd": "closeIt()", +"7739ad70": "markAsScam(address)", +"773a1154": "generateRandomNumber()", +"773a8597": "HashTokenAward(uint256,string,string)", +"773adc70": "getAllowedStepAmount()", +"773b5b5e": "maxUpdates()", +"773b82a3": "addPerson(bytes32,bytes32,uint256)", +"773b90db": "_lotteryCardNoSend(uint256)", +"773c3f50": "DPPToken()", +"773c5049": "solvency()", +"773c84ee": "exec(address,bytes,uint256,uint256)", +"773d33f5": "transferAndCallback(address,uint256,bytes)", +"773da57d": "DGZTokensWithdraw(address,uint256)", +"773dcb98": "startTransfers()", +"773dfb86": "_extendRound()", +"773e04a9": "log2Ceiling(int256)", +"773e1e84": "fight(uint32,uint16)", +"773e236b": "createLockbox(string,address,uint256,uint256,string,string,string,address[],string)", +"773e8b0f": "testDAO()", +"773ee5a3": "execute_transfer()", +"773eef36": "stopRefund()", +"773ef1cf": "saleOn()", +"773ef38e": "PRICE_RATE_SECOND()", +"773f4873": "Ecopay()", +"773f5edc": "guess(uint256,string)", +"773f7665": "processVIPBenefit(address,uint256)", +"773ff502": "LogMake(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"7740f667": "mtStartTime()", +"77410c03": "adminLockdown()", +"774120fa": "merge(address)", +"77413267": "getAuctionByTokenId(uint256)", +"774190dd": "showUserPoolAddresses(address)", +"7741ad4e": "play_game(uint8)", +"7741b4ec": "RandomNumberFromSeed(uint256)", +"7741fc52": "LottoCount()", +"7742ede4": "IMARK()", +"77439e8b": "doYourThing(address,address)", +"77446767": "destinationOf(uint256,uint256)", +"77453df7": "Ex()", +"7745d3b1": "getUsername(address,address)", +"7746167f": "transferBlockValueToBattleValue(uint16,uint256)", +"77463b50": "getEggsToHatchDragon()", +"77467197": "tokensVested()", +"774685c7": "CPO_SHARE()", +"77469275": "getLegacyRepToken()", +"77472b6f": "minEtherCap()", +"7747c993": "competition(uint256)", +"77482b18": "getDeveloperFee()", +"7748b07e": "usersNTD(address)", +"7749d667": "getIncreaseTime(uint256)", +"7749e693": "setCategory(uint256,uint256,bytes32)", +"774a63a5": "CDSToken()", +"774a97cf": "getCurrentTapAmount()", +"774b71d6": "TokenPriceProposalSet(uint256,uint256,uint256)", +"774bafdf": "unlockMe()", +"774dba58": "playHome()", +"774e88dc": "hasUnlockDatePassed()", +"774eb322": "close(string,bytes32,uint8,bytes32,bytes32)", +"774ec644": "setUserPrice(uint256)", +"774f787a": "ShitsToken()", +"77507425": "buyerFunded(bool,address)", +"7750b2b1": "__setDeadline(uint256)", +"775146c3": "request(bytes32,uint256)", +"77517765": "getTotalActiveStake(uint256)", +"7752182b": "AddReserveToNetwork(address,bool)", +"77524af9": "wethTransfer(address,uint256)", +"775274a1": "requestRefund(bytes32)", +"77532fa8": "TotalClosedDeposits()", +"77538407": "Ap()", +"7753ec49": "in_registration_phase()", +"77542194": "setTokenTransferStatus(bool)", +"7754305c": "getURI()", +"7754ec29": "WinCoin()", +"7755a0f5": "ResolutionProposalSubmitted(uint256,uint256,address,string,string)", +"7756c908": "transferLocked(address,uint256)", +"7757fc5d": "withdrawalOpen()", +"7758bf86": "maxBridgeWidth()", +"7758c4f8": "quickBuy(uint256)", +"7758d407": "nextCommonTTWTokenId2()", +"775915ce": "stepTwoEndTime()", +"77598626": "TZCoin()", +"77599026": "calculateYourValue2(uint256)", +"775a25e3": "getTotal()", +"775a8f5e": "toBytes(uint256)", +"775a91ac": "timeLockTokens(uint256)", +"775ad527": "allow(address,address)", +"775af9df": "MiningRigFarmer()", +"775b9c13": "setWhiteList(address[])", +"775c300c": "deploy()", +"775c46cd": "startFunding(uint256,uint256)", +"775dec49": "keccak()", +"775e38f7": "NO_MONSTER()", +"775eb900": "signed(bytes32)", +"775ee3ef": "view56()", +"775f5ec0": "finishRitual(address)", +"775f731c": "addSomeUETsTo(address,uint256)", +"775fc127": "operation()", +"77609a41": "challengeCanBeResolved(bytes32)", +"7760da7f": "reclaimTokens(uint256)", +"77610ba2": "setDollar(uint256)", +"77617a7d": "BuyToyMoney()", +"776184b1": "test_oneValidEqString()", +"77620729": "forward(address,address,uint256,bytes,bytes32,bytes)", +"776247c4": "withdrawEthFromBalance()", +"77627a1d": "Goutex(uint256,string,uint8,string)", +"7762df18": "VVDB(address)", +"7762df25": "potentialOwner()", +"7762f046": "setContractBridgeAddress(address)", +"77640f9c": "setClaim(address,bytes32,bytes)", +"7764d878": "checkstatus()", +"7764f771": "getBackBNB()", +"776532de": "Numa()", +"7765c52c": "getAuctionStatus(uint256)", +"776676d6": "newRC(uint256,uint256)", +"77669b2d": "setCompte_33(string)", +"7767ecc3": "inSdcForAdmin(address,address,uint256,uint256)", +"7768dec0": "isTokenSale()", +"77695d39": "getDb(uint256)", +"77699a06": "reclaimExpiredSwap(bytes32,bytes32)", +"7769d384": "revokeAndPublish(address,bytes32,bytes32,address)", +"7769ea0a": "addPool(uint256)", +"776a038e": "PurchaseToken()", +"776ab634": "unpauseToken(uint256)", +"776b37e2": "editCertificate(string,address)", +"776b6b27": "setRoscaAddress(address)", +"776bf795": "pieceTransfered(uint256,address,address)", +"776c3b70": "setNewSalesManager(address)", +"776d1a01": "setTarget(address)", +"776d62f6": "costs()", +"776d89ba": "delPhase(uint256)", +"776dba67": "VioRewardERC20Token()", +"776df027": "testFailDisownNotOwner()", +"776e7fc1": "checkRedbullQuest(address)", +"776f3b99": "burnByPercentage(uint8,uint8)", +"776f9663": "PeerBet()", +"776fd7ce": "setEscrowTransfer(address,uint256,uint256,bool)", +"77703d29": "getBuyOrder(uint80)", +"7770bd15": "crowdSale()", +"777256c4": "Greeter()", +"77725b88": "SetFFSettings(address,address,uint256,uint256)", +"7772a380": "isInGeneration(address,uint256)", +"7772ba07": "setDelays(uint256,uint256)", +"77738ce7": "fundAccount(address,uint256,uint256)", +"7774c394": "isNecromancer(uint256)", +"7774d64c": "testCreateOrder()", +"7774e950": "createUnit(uint256)", +"7775eec9": "getCompte_29()", +"7776466c": "preSaleToken()", +"777665b8": "transferTOKENtoProviders(address,address,uint256,address,uint256)", +"77773d90": "amountOfTokensPerEther()", +"7777789f": "_mint(address,uint256,uint256[])", +"7777d088": "lotteryTokensPercent()", +"777850f9": "payAfter(address,uint256)", +"77790081": "updateMaritalStatus(string)", +"777955b1": "updateReferralGu(uint256)", +"7779b0e4": "_buyTokens(uint256,uint8,address,address)", +"777a5dc5": "explodePhoenix(uint256)", +"777ab367": "mk_contract_address(address,uint256)", +"777ac349": "totalWins()", +"777ac522": "_createTree(string,string,uint256)", +"777aff7d": "updateHistory(address,uint256)", +"777b4547": "ICO(address,address,address)", +"777c1bb2": "eosLITE(uint256,uint256)", +"777c658f": "getTotalDonations()", +"777cfd5f": "createSubmission(address,string,bytes32,bool,bytes32,string,uint256)", +"777d1a8d": "HealthCoin(uint256,string,string)", +"777dff4a": "transferCTO(address)", +"777e479d": "getRoundBlockNumber(uint256)", +"777e6b1c": "getEntitledFunds()", +"777e82ca": "BookERC20EthV1p1()", +"777e940c": "excessRefund(address,uint256)", +"777ecb74": "LogPaused()", +"777eceb8": "tokensForOneEther()", +"777f942d": "changeMinStake(address,bytes32,uint256)", +"777feff5": "getCertificationDbAtIndex(uint256)", +"7780ae85": "desimls()", +"77810380": "getRegistrationToken()", +"77818808": "Electrium()", +"7781eafa": "considerPerseus(uint256)", +"77826b0c": "setMaxReceiveEther(uint256)", +"778317c4": "setWinLossAmount(uint256,uint256)", +"77838c63": "distributedToOwner(uint256)", +"7783c06b": "newArt(string,string)", +"7785859f": "altCapitalization()", +"7785954b": "produceRandom(uint256)", +"778639cb": "checkValidFighter(address,address)", +"77863b61": "CrossWhitehatWithdraw(uint256,address)", +"7786b22d": "ELRUN()", +"77870bce": "BeatOrgTokenPostSale(address)", +"7787dfaf": "test_9a_transferShouldBeFalse()", +"77886028": "setTokensContractAddress(address,address)", +"7788d126": "REFERRAL_BONUS_LEVEL3()", +"77895ef4": "listedMonForClass(uint64)", +"7789f844": "backTokenOwner()", +"7789fc90": "createBet(bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8)", +"778a56ce": "toggleBurn()", +"778a5978": "guessNumber(uint16)", +"778b5aee": "getWalletsCount()", +"778c2cea": "onlyLocklistedCanDo()", +"778d00f0": "pushPrivateInvestment(uint256,uint256,address)", +"778d491e": "wd(uint256)", +"778e388e": "parseInt_(uint256)", +"7790a5d2": "Token_5()", +"77913fbc": "getModuleId(string)", +"7791dc1f": "AuthEnd()", +"77921952": "contributorCounter()", +"77922220": "getRegionProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"77922e57": "batchCancel(address[],uint256[],uint256)", +"7793868c": "RostToken()", +"779454ff": "boardAddress()", +"77952161": "didDepositCollateral(bytes32,address,uint256)", +"7795820c": "getCommitment(bytes32)", +"7796fb95": "setSink(address)", +"7798e525": "countUBetChecks()", +"779972da": "setLockPeriod(uint256)", +"779997c3": "bump(bytes32)", +"779a3611": "makeBet(uint256,uint256,uint256)", +"779a5a7f": "getContributorByAddress(address)", +"779ad324": "getIEOId()", +"779b2e11": "getCurLevelKeyNum()", +"779b8dc0": "load(bool,address,address,address,address,address)", +"779beca0": "getNumOfSalesWithSameId(bytes)", +"779beedf": "registerWallet(address)", +"779c4a26": "getUserSponsorships(address)", +"779c9b19": "_emitCategorySet(uint256,uint256,bytes32)", +"779ce152": "WIN_PERCENT_PER_DISTANCE()", +"779d2e20": "setLawSupportProfitAddress(address)", +"779d6fc7": "logInitialReportSubmitted(address,address,address,uint256,bool,uint256[],bool)", +"779de55d": "paymentsByBenefactor()", +"779dec5b": "bZRxTokenContract()", +"779e170d": "isSaleOn()", +"779e5ad8": "gvOptionToken20()", +"77a0e875": "destTokensSit()", +"77a1ec4b": "hodlCountdown()", +"77a28225": "delegateFromReferral(uint88)", +"77a28461": "ownerSetupBankrollInterface(address)", +"77a28fec": "DealCancelRate(uint256)", +"77a3a0a2": "removeMarketFrom()", +"77a43129": "publicSellLockEndTime()", +"77a54b38": "checkForNewStellar(address,uint256)", +"77a54eb8": "blacklistAddresses(address[])", +"77a6acfb": "tokenDemo(uint256,string,string,address)", +"77a6cb64": "TokenEscrow()", +"77a714ae": "ERC721Token()", +"77a7354d": "addExperience(string)", +"77a74a20": "expressingTraits(uint256)", +"77a7d968": "walletBalances(address,address[])", +"77a7e6be": "getRefTotal(uint256)", +"77a8bc86": "untrustedExecuteRuling(uint256)", +"77a9037b": "updateLastVotedOnParameter(bytes32,address)", +"77a9e152": "redeemToken(uint256,uint32)", +"77aaafd2": "interfaceFrozenTransfer(address,address,uint256)", +"77aad873": "proposeLaborHourToken(address)", +"77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", +"77acbb22": "manager2()", +"77ad619d": "get_commit_no()", +"77ae6c47": "requestBatchInsatalmentsLoans(uint256,uint128,uint256,uint24,uint40)", +"77afd7e6": "shitRate()", +"77b02a33": "getGameLock(address)", +"77b08df0": "Migrations4()", +"77b0c751": "getNextPayDay()", +"77b0dd70": "depositAndInitiate(uint256,uint256,address,bytes32,address,uint256)", +"77b11de3": "setPlayerHasGetFree(address,address,bool)", +"77b1788e": "postTrade(bytes32,uint256)", +"77b19cd5": "getCallBaseGasPrice(bytes32)", +"77b1b2eb": "MAX_CANVAS_COUNT()", +"77b1bba6": "ChangeCollector(address)", +"77b1da93": "crowdSaleClosed()", +"77b2d590": "_set3()", +"77b38e2a": "MasternodeDeregistered(address,uint256)", +"77b440e9": "WALLET_FOUNDATION()", +"77b4a9c1": "getMakerBalance(address)", +"77b57073": "sponsorList(address)", +"77b68dae": "devDivRate()", +"77b71df0": "stake(int256)", +"77b74692": "setKYCAddress()", +"77b76ec3": "checkBalance(address,address)", +"77b77a4f": "PlatoPresale()", +"77b7b5f3": "returnCreator(uint256)", +"77b92c07": "Approve(uint256)", +"77bad015": "GetMyEgg()", +"77bb09eb": "addSweeper(address,address)", +"77bb5e34": "ChillCoin()", +"77bbc957": "returnReclaimed(uint256,address)", +"77bbf28a": "createDividend(uint256,uint256,address,uint256)", +"77bc222c": "_eraseSingleNode(bytes32)", +"77bc48f8": "view_owner()", +"77bc57e7": "Agencies()", +"77bd1bfe": "ITT(uint256,uint8,string,string)", +"77bd35fc": "claimPremium(address,uint256)", +"77bd775c": "setMinPurchaseAmt(uint256)", +"77bdab19": "OtoniToken()", +"77bdbccc": "registerCertificate(address)", +"77bde142": "setTargetBondingRate(uint256)", +"77bdfcfa": "cards_metal_check(address)", +"77bf8b91": "CelebSold(uint256,uint256,uint256,string,address,address)", +"77bf8e6f": "myShare()", +"77bf96d4": "claimProfitEquivalent()", +"77bf9776": "stopUpdate()", +"77bffc9a": "getRemainingStars(address)", +"77c07c19": "storageControllerAddress()", +"77c0891f": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"77c13323": "closing_requests(bytes32)", +"77c2f72e": "LightenToken()", +"77c2fb9b": "updateMokenName(uint256,string)", +"77c34ee7": "tokensRemainingIco()", +"77c427b7": "TemperatureMeasurementB(address,int8,int8)", +"77c4fd07": "availableEarlyPlayerShares()", +"77c626e3": "getStageAvailableTokens(uint256)", +"77c68aa7": "IGTMYR()", +"77c71396": "charityBeneficiary()", +"77c76449": "AVAILABLE_IN_MAIN()", +"77c78df9": "getCurrentLevel()", +"77c82476": "viewPetition(uint256)", +"77c846af": "changeUsername(string)", +"77c8d5a0": "computeTimeBonus()", +"77c90dd4": "VaporCoin()", +"77c93662": "sponsor()", +"77c9dd4b": "iOwner()", +"77ca4d11": "loadVotesForParticipant(bytes32,bytes32,uint8)", +"77caa61a": "updateExchangeRates()", +"77caa7e6": "endICOp2()", +"77caf711": "transferValue(uint256)", +"77cb6b7f": "AbccCoinToken()", +"77cb8edd": "_robot()", +"77cc437c": "institutionWallet()", +"77cdd2e5": "icoBtc()", +"77ce4fd1": "changeBlocksToExpire(uint256)", +"77ce52f8": "totalInfo()", +"77ce9bdd": "createPersonalDepositAddress(bytes32)", +"77cebd89": "isAllowedToBuy(bytes32)", +"77ceded8": "mintGrey(int256,address,uint256)", +"77cf0369": "totalPreICOavailibleWithBonus()", +"77cfe1c1": "isValid(string,address,uint256)", +"77cff22d": "init(address,address,uint256,uint256)", +"77d1f95d": "AntCoin()", +"77d223b2": "setLowestClaim(uint256,uint256)", +"77d2f203": "neg(uint256)", +"77d317d0": "destroy(uint256,string)", +"77d32e94": "ecrecovery(bytes32,bytes)", +"77d3550b": "commissionPercent()", +"77d447d6": "ContractorManagerSet(address)", +"77d4c48b": "arr(address)", +"77d4e5bc": "secondTimeLine()", +"77d555b7": "RateSetterChanged(address,address)", +"77d55755": "getMiningReward(bytes32)", +"77d56a04": "getReserveBalances()", +"77d58f21": "_safeContract(address,address,address,uint256,bytes)", +"77d630ae": "activationFee()", +"77d6a880": "saleOrNot()", +"77d6cfeb": "setGoalReached()", +"77d70b1f": "jackpots()", +"77d79d10": "getGame(uint8)", +"77d821a2": "testOnlyMultisigCanDeployANT()", +"77d83b81": "confirmGetFreeQuest(address)", +"77d89406": "bankerFeeDataRecord(address,uint256,uint256)", +"77d8ffc0": "getTokensFromBuy(address)", +"77d99ef5": "createBattleboard(uint256,uint8)", +"77d9d1fb": "maxHEXCap()", +"77d9e5fd": "isElectionValid(uint256,uint256)", +"77da0add": "seeAsset(uint256)", +"77dac983": "abandonEscrowService(uint256)", +"77daeb80": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256,uint256,bool)", +"77db5206": "checkStatus(address,uint256)", +"77dbbd76": "transferFrom(address,uint256,uint256)", +"77dc0413": "small_payout(uint256)", +"77dc657c": "checkPassword(bytes)", +"77dc6ac7": "tokensSelling()", +"77dcb4f9": "doPresaleMinting(address,uint256)", +"77dcba6d": "writeConversion(string,address,uint256,uint256)", +"77dd3323": "setts50(uint256,address)", +"77dd8ea7": "ethFnkRate1()", +"77df3013": "calculatePurchaseAndBonuses(address,uint256)", +"77dfec3c": "exchangeRateTimestamp()", +"77e13c10": "playerMakeBet(uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"77e17039": "startSettlement()", +"77e17191": "COIN_SUPPLY_MARKETING_TOTAL()", +"77e19824": "numSubmissions()", +"77e26762": "getErbutongHao(uint256)", +"77e2965b": "updateTokenAge(address,address)", +"77e2a6ed": "openGiveAway()", +"77e2e5ce": "ICO_setParameters(address,uint256,uint256,uint256,uint256,address,uint256)", +"77e303d2": "_Deposit(bytes32,uint256,uint256)", +"77e49660": "addAddressAliasUnsafe(address,address)", +"77e4fb04": "testFailNotEnoughValue()", +"77e5bf84": "getTxGasprice()", +"77e5d8f8": "advisersUnvested()", +"77e5f6d0": "setGizerItemsContract(address)", +"77e60f42": "marginForMajority()", +"77e6bb15": "getCurrentBonusPercent()", +"77e71ee5": "getForkEndTime()", +"77e75b07": "mintAndAllocateZCO(address,uint256)", +"77e7645b": "CoinSaleActive()", +"77e7ff41": "kickTheCoin()", +"77e8a52e": "SEARCH()", +"77e91f26": "getAyantDroitEconomique_Compte_10()", +"77ea8c72": "RGLSToken()", +"77eaa420": "_clearAuthorization(address,address)", +"77eab3e3": "changeMinimumAmount(uint256)", +"77eb4c50": "hasSponsor(uint32)", +"77eb74a1": "PassportInterfaceID()", +"77ec0feb": "dividendPerToken()", +"77ee311c": "totalMember()", +"77eefa5a": "pullBack(address,address,uint256)", +"77ef2c91": "whitePaperHash()", +"77ef9581": "Registry(address)", +"77f051c3": "AcceptsToken3D(address)", +"77f122bd": "setBlockValueBalance(uint256)", +"77f172b6": "_wager(uint256)", +"77f18090": "Citizen()", +"77f18ed3": "isImmortal()", +"77f25566": "setOne(uint256)", +"77f27251": "paybackDelta()", +"77f2d0b0": "partnerInfo_for_Owner(address)", +"77f325df": "submitAnswer(bytes32,bytes32,uint256)", +"77f3293a": "endPreICO()", +"77f37cd1": "luckyBonus(uint256)", +"77f38024": "BountyPart()", +"77f3c0cd": "InvokeTransfer(address,uint256[],uint256)", +"77f3e3d1": "Bounty_Supply()", +"77f3f782": "UserBalances(address)", +"77f41164": "stageTwoClosed()", +"77f46346": "CheckIfIsAllowed(address)", +"77f48f94": "spin(bytes32)", +"77f50f97": "claimAdmin()", +"77f51246": "tokenIsLocked()", +"77f53095": "createBasicToken(string,string,uint256,string)", +"77f54a82": "setICOParams(uint256,uint32,uint32,uint256,uint256,bool)", +"77f6f7e8": "YoloToken()", +"77f74b6b": "getTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", +"77f83bce": "PruebaCoin()", +"77f8afc3": "FixSale(uint256)", +"77f929fb": "DeveloperCoin()", +"77f98616": "getTotalProduct()", +"77f9bc13": "getVendorApplicationStatusTrack(string,uint256)", +"77f9c101": "testDeployNewTokenWithTheTestContractAsOwner()", +"77f9c862": "GetSellOrderDetails(address)", +"77f9db33": "disableTokenTransfers()", +"77fa3d32": "addAuction(uint32,uint256,uint256,uint8,uint8)", +"77fa4c21": "getRewardPot()", +"77faba66": "setRewardPercentageK(uint256)", +"77faffa0": "nextround()", +"77fb6269": "migrateData(address,uint256,uint8)", +"77fbe611": "forTeamETH()", +"77fc35e5": "_burn(string)", +"77fcb91d": "forward(address,bool)", +"77fcbebe": "TokenLimitReached(uint256,uint256)", +"77fcc493": "TOKEN_MIN_PRICE_THRESHOLD()", +"77fcce68": "setSignatureValidatorApproval(address,bool)", +"77fd347a": "makePredictions(int16,string)", +"77fe2a0d": "unfrozePerDay()", +"77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", +"77fed1c7": "addOverview(uint256,string,string)", +"77ff24f4": "test0()", +"77ffd2e8": "setCurrencyExchangeRate(uint256,uint256,uint8)", +"780004ac": "systemFreeze(uint256,uint256)", +"7800313f": "getCurrentTokensByType(uint32)", +"7800a9f6": "getP3DInfo()", +"78013292": "optionAddress()", +"78018581": "Allysian()", +"7801fc3e": "totalReceivedEth()", +"780211a2": "refundOrder(address,address,address,bytes32,address,address)", +"78021e7c": "ownersOfToken(uint256)", +"780249cd": "DC()", +"7802857a": "BONUS_TIER_8_LIMIT()", +"7802cbaf": "addTokenOwnerReward(uint256)", +"7802f4e4": "nada(uint256)", +"78030b83": "makeWildCardToken(uint256)", +"78044965": "setACLRole8972381298910001230(address)", +"78044ba5": "transferToBuyer(address,uint256,address)", +"7804a5dc": "canCreate(address)", +"7805862f": "Unpause()", +"7805a548": "_createItem(uint256,uint256,uint256,uint256,address)", +"7805dd1c": "_totalUsersBets()", +"7807e826": "calculateWeiNeeded(address,uint256)", +"78080c9d": "rateStage1()", +"7808dc69": "createSale(uint256,uint256,address,address,address)", +"780900dc": "create(uint256)", +"7809231c": "DistributeAirdrop(address,uint256)", +"7809dd64": "_receiveRefund()", +"780a4d74": "RecipientUpdated(address,address,address)", +"780aa037": "receiveTokenFromContract(uint256)", +"780ae915": "completeMigration(address,uint256)", +"780aee73": "newGame(string,bytes32)", +"780bbe60": "createChamp(address)", +"780bd739": "giveOut(address[])", +"780be5be": "AggiungiNegoziante(address)", +"780bfed0": "addPermission(bytes4,string,string,string)", +"780c4a73": "addCounter(address,uint32)", +"780c5316": "payMinAuctionEther()", +"780c5689": "writes(bytes32,address)", +"780cbf65": "_queryCallback(uint256,bytes)", +"780d2328": "recordVisit(address,string)", +"780e4b96": "setConsolationRewardsClaimPercent(uint256)", +"780f4987": "systemMessage(string)", +"780ff8d1": "viewLatestErc20TransactionRequest()", +"78108368": "atxRate()", +"78121b60": "KeyedCollection()", +"781224f4": "setVendorWallet(address)", +"78122f3a": "fail(string)", +"78127ee7": "GOLDBARToken()", +"781327de": "createStrategy(string,string,string,address[],uint256[],bytes32)", +"78152bbe": "setPresaleStart(uint256)", +"78155bf4": "PaymentCompleted(address,uint256,uint256)", +"78160d6b": "numChipsClaimed()", +"78166097": "isValidCustomer(address)", +"7817364d": "ChillTalk()", +"7817a60f": "acceptMember(address,string)", +"7817abee": "getOwnerRatingTuple()", +"7817eedd": "rawOwnerOf(bytes32)", +"78186f51": "etherPriceInDollarOut()", +"7818e9ef": "opencode(bytes32)", +"7819d30d": "updateNameResolver(string,address)", +"781a2cca": "Pay(uint256)", +"781a4a74": "getTokensIcoSold()", +"781c0db4": "finishFreeGet()", +"781c4dad": "tierNo()", +"781cc3d3": "cancelAction(bytes32)", +"781cd99d": "START_TIMESTAMP()", +"781db835": "_buyTokens(address,uint256)", +"781e48e4": "MYCareCoin()", +"781e9892": "cumulativeRatios()", +"781f5a83": "registerIdentity(address,address)", +"782037dc": "reserveTeamRecipient()", +"78205f67": "testThrowTransferEnableNotTransferable()", +"7820cd94": "flexibleRewardLevel(uint256)", +"7821a514": "addReserves(uint256)", +"7822b902": "setSaleAmountCap(uint256)", +"7822ed49": "bankAddress()", +"78231978": "totalSaleSupply()", +"782378d1": "MIC(uint256,string,uint8,string)", +"78238cf0": "setCmd_control(uint256)", +"7824407f": "tokenSupply()", +"78248880": "decreasePaymentsBalance(address,address,uint256)", +"7825396b": "setPrices(uint16[])", +"78258c41": "ZXToken()", +"78261878": "saleCompleted()", +"78263edf": "changeMaturity(uint256)", +"7826bbc3": "fstPrivateSalePortionDenominator()", +"7826bfa8": "ethereumLottery()", +"7826f28f": "S1()", +"7827b226": "froze_contract()", +"782841cd": "changeMintingState()", +"78296854": "origMktValue()", +"782a0170": "etherPriceInUSD()", +"782a2737": "vestingMap(address)", +"782addbd": "isInvulnerableByArea(uint256)", +"782b2340": "getStartIcoTimestamp()", +"782b3602": "taker()", +"782b9d50": "setCitizenAddress(address,address)", +"782c6ef8": "refundSender(address,uint256,uint256)", +"782c9689": "DeliverToClaimers(address[],uint256[])", +"782ce79c": "burnClosedToken(bytes32)", +"782da1ea": "transferFromInternal(address,address,uint256,bytes)", +"782e1e6c": "tokenTarget()", +"782e34c9": "ownerSafeWithdrawal()", +"782ec023": "transferMultiAddressFrom(address,address[],uint256[])", +"782f08ae": "setUri(uint256,string)", +"782fb5d4": "getVoteCounts(bytes32)", +"7830b7f8": "PowerNetCoin()", +"783110dc": "increaseStep()", +"78312435": "updateIssuer(address)", +"78321efb": "pushElement(uint256)", +"78329d61": "processPurchase(address,address,uint256,uint256)", +"7832bbf7": "temporaryEscapeHatch(address,uint256,bytes)", +"78330101": "ESlotsICOTokenDeployed(address)", +"783370b5": "setEditionLimits(uint256,uint8,uint8,uint8)", +"7834a504": "buyCoin(address)", +"78351502": "hasPastFreezTime()", +"78357e53": "Manager()", +"78367e46": "enterSmall()", +"783680a7": "ico2Min()", +"78375f14": "requireisfine(uint256)", +"78375f61": "BetTest111()", +"7837848c": "expire(bool)", +"7837e170": "lockBalance(address,uint256)", +"7838415b": "MeetOneToken()", +"783870eb": "rubusBlackAddress()", +"78388eb6": "allocationsOverTime(uint256)", +"78393237": "MAT_PARTNERS_SUPPLY_LIMIT()", +"783a2cca": "approveWithdrawal(address,uint256,bytes32,bytes32,uint256)", +"783ac3ee": "offThreshold()", +"783b4569": "rawRegister(bytes32)", +"783b7b1e": "sendJackpot(address)", +"783c2088": "lookupRegName(address)", +"783c8db0": "minimumFundingAmount()", +"783cc9dc": "CNNToken()", +"783ce458": "expmod(uint256,uint256,uint256)", +"783d5dec": "_limitTeamWithdraw(uint256,uint256,uint256,uint256,uint256)", +"783ddace": "mintAdvisersTokens(address,uint256)", +"783e7a06": "removeVerificatorAddress(address)", +"783f28e6": "adminUpdMinSign(uint256,uint256)", +"783f6af5": "people()", +"783f7b98": "setEtherQuota(uint256)", +"78405234": "indexOf(uint8[],uint8,bool)", +"7840c781": "_setTokenOwner(uint256,address)", +"78415956": "after_test_2_method()", +"7841a530": "set_tokens_sold(uint256)", +"7841b780": "isPaymentSettled(uint256)", +"78420d4a": "validateLock()", +"784279d8": "setSupportedTokens(address,bool)", +"7842a3a4": "payReward()", +"7842aded": "getLotteryMoney()", +"7842dca8": "allTime()", +"7843184b": "setMultiBonusTokens(address[],uint256[],uint256)", +"78446bc1": "timeLockPeriod()", +"7844ce81": "hodling()", +"78451d64": "SplitPayment(address[],uint256[])", +"78452d65": "CATContract(address,string)", +"784547a7": "isConfirmed(uint256)", +"7845b86e": "fundingRatePredictionBonusClaimWindow()", +"7845cbef": "GOLDT()", +"7845d5aa": "UpgradeAgentSet(address)", +"7845d76b": "tune(uint256,uint256,uint256,uint256)", +"7846188d": "_getCrabTotalStats(uint256)", +"7846c3c8": "minimumContributionPresalePhase2()", +"784712f2": "pendingPayouts(address)", +"78473485": "getSellDemand(uint256)", +"7847352a": "setBettingCondition(uint256,uint256)", +"7848033e": "distributeCHENDE(address[])", +"784813e0": "lookupBet(uint256,uint256)", +"78483632": "secondsaleOpen()", +"78489ed6": "compareIntValue(bytes32,int256,bytes1)", +"78498818": "getTokensBought()", +"784a3e40": "bountiesIssued()", +"784aa7d2": "setTitulaire_Compte_5(uint256)", +"784ba0f5": "yearteam_trade_date()", +"784d17f9": "DarkrenlandToken()", +"784f47ff": "reduceCredits(string,uint256,uint8,address)", +"784f6654": "activateMe(string)", +"784fcb94": "MARXToken()", +"784fdf26": "totalExternalSales()", +"7850a6b2": "transferDoftManagment(address)", +"7850b72f": "LSDCrowdsale()", +"7850c2ac": "holdersAllocatedAmount()", +"7850f0a4": "setPromotedGame(uint256,bool,string)", +"785105f6": "savedBalance()", +"78517536": "updateBlockNumberOfGladiatorBattle(uint256)", +"7851bcbd": "safePerc(uint256,uint256)", +"78524b2e": "halveMinQuorum()", +"785250da": "kyberNetworkProxyContract()", +"78533046": "getMetaInfo(uint256)", +"78533e90": "setTokenMinter(address)", +"78537808": "union(address[],address[])", +"7853c945": "bitcoinKey()", +"7854216b": "autoAirdropAmount()", +"78547d5f": "processPurchase(address,uint256)", +"7854b798": "addauction(uint256,uint256,uint256,uint256,uint256,string,string)", +"78566845": "allocateTicket(uint256,address,string)", +"78572816": "addAffiliate(address,bytes32)", +"78579d7c": "addEntry(address,uint256,bool,uint256,uint256)", +"7857f6e7": "setReverseRate(address[],int16)", +"7857fcda": "assertEq3(bytes3,bytes3)", +"78581a46": "getBatchCreateDrawingsAddress()", +"785826a7": "sendReferrer(uint256)", +"78583275": "updateMinSale(uint256)", +"7858651e": "getConnection(address,address,bytes32)", +"7858eb7b": "setScore(string)", +"7858f93a": "addressFundTeam()", +"78591e1d": "findAllCliWithPendingTask()", +"7859f9e6": "purchaseCarAdv(uint256,string,string)", +"785b1eb4": "PayEIF()", +"785b804a": "transferEtherInitiation(address,uint256)", +"785bc758": "setBaseStorage(bytes4,uint256,string)", +"785cc997": "mint(uint256,string,bytes)", +"785ce7ca": "walletBlockOf(address)", +"785da817": "unterminateFunding()", +"785e64a1": "whatIsMocount()", +"785e9e86": "erc20()", +"785fa627": "prizeAmount()", +"785fb499": "burnFoundersTokens(uint256,uint256)", +"78607c33": "FundWithdrawed(uint256)", +"7860ed56": "secondItemWrong()", +"78629c0f": "lockAddressToken(address)", +"7862affa": "calculateTimeBonus(uint256)", +"78635049": "MarzCoin()", +"786420d1": "getEstate(uint256)", +"786431c1": "MAX_OPS()", +"78644a4a": "userOfferAcceptElement(uint256,uint256,uint256)", +"7865f463": "mmul(uint128,uint128)", +"7865f611": "LogBet(address,bool,uint256,uint256,bool)", +"7866ed6e": "getBloodline(uint256)", +"78670289": "MAX_END_BLOCK_NUMBER()", +"7867060d": "approveComponent(string)", +"78683654": "convertMainchainGPX(string,string)", +"7868c89d": "getRateByStage(uint256)", +"786926fa": "existenceBalanceOf(address)", +"78698e45": "_updatePrices(uint256,uint256,uint16,uint256[],uint256[])", +"786ab4b6": "addAccountWithBalance(uint16)", +"786b844b": "closeGame()", +"786bfd76": "SimpleConstructorString(string,string)", +"786c5065": "closeDistribution()", +"786caff8": "claimerOfSocialIdentity(uint256,uint256)", +"786cf3ee": "DurioTEST()", +"786d02d0": "getHoldingsCount()", +"786d8a25": "test_falseEqNoLog()", +"786e06f3": "sendETHtoBoard(uint256)", +"786e4799": "removeRatePlan(uint256,uint256)", +"786ecf16": "doRestart()", +"786edae0": "registerEndpoint(string,int256)", +"786ef70a": "earnedEthWei()", +"786fb317": "requestOutput(bytes4)", +"787089bd": "PandoraToken(uint256,string,string)", +"787091e9": "EABToken(string,string)", +"7870f889": "MyWhiteList()", +"78710d37": "seven()", +"78710f72": "canBuyTokens()", +"787112be": "set_saleAgent(address)", +"78719b15": "likeCelebrity(uint256[],uint256[],uint256)", +"78719ee8": "DAppNodePackageDirectory(address,address)", +"7871a9ff": "Crypterium()", +"78720063": "EligmaSupplyContract(address,address)", +"7872e3da": "disbursementDuration()", +"78730d65": "nextLotteryTTMTokenId9()", +"7873447b": "getFrozenAccountList()", +"7873832e": "SingularDTVLaunch(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"787394fc": "setJackpotIncrement(uint256)", +"7873bc61": "contestant(uint256)", +"787414ac": "ABC123ABC()", +"78744754": "getClassName(uint32)", +"7874b66f": "ReferralActivated(address)", +"7874d32c": "unblockTokenTime()", +"78753818": "MAIN_SALE_VALUE_CAP()", +"7875bbe2": "DividendPaid(address,uint256,uint256,uint256)", +"7875d41b": "takeBet(uint256,uint8)", +"78761590": "findTargetCell(uint256,uint256)", +"7877f72d": "getHours(uint256)", +"78782027": "enter(string,address)", +"7878903c": "hasPreSaleEnded()", +"7878b66a": "isPauseSave()", +"7879e19e": "CollectAllFees()", +"787a08a6": "cooldown()", +"787addc3": "FideliumToken(uint256,string,string)", +"787b586f": "setMediumProbability(uint8)", +"787b6725": "removeProduct(address)", +"787bd6f9": "setDistribution(uint256[5])", +"787c17d9": "privateSell1Token()", +"787c23e0": "whitelistWallet(address)", +"787ccb61": "replenishPool(uint256)", +"787d024d": "mintLzToken(address,address)", +"787d64e4": "m_multiOwnedRequired()", +"787dbaf1": "feedTweet(uint256,uint256,string)", +"787dc68f": "createPromoAthlete(address,string,address,uint256,uint256,uint256)", +"787dc9f1": "getFee(bytes8,uint256)", +"787e9137": "collectedTokens()", +"787ed1f8": "sayOwnerHello(string)", +"787ed54f": "payDividendsManually()", +"787eda49": "assertEq20(bytes20,bytes20,bytes32)", +"787f9710": "namespaceTaken(bytes32)", +"787f9cc3": "ManualPriceChange(uint256,uint256)", +"787fd167": "GameJoined(address,address,uint256,uint256,uint8,uint256)", +"788023ff": "changeShareable(address[],uint256)", +"78809c52": "ratePerEthPhase1()", +"788102ff": "reservedFundsParking(address)", +"788222ae": "tokenEmail()", +"78831239": "deleteTopic(bytes15)", +"78831b36": "setDividendsWallet(address)", +"7883985b": "addrExecutor()", +"78843a95": "isTier1(address)", +"7884e787": "getDni()", +"78862e69": "deathData_f9()", +"788649ea": "unfreezeAccount(address)", +"7886b526": "checkRecords(uint256[])", +"78879d74": "betAmountAfterRakeHasBeenWithdrawnAndProcessed(uint256)", +"78880f4a": "population()", +"788873ea": "logFeeWindowTransferred(address,address,address,uint256)", +"7888e957": "storageToUint(int256,string)", +"788a8c8b": "ARBI()", +"788ac4a8": "Petrocoin()", +"788acd7e": "issueBounty(address,uint256,string,uint256,address,bool,address)", +"788b2ba2": "Stock(string,string,uint256,string,uint256)", +"788bb8df": "EUR_Omnidollar()", +"788bc78c": "setVersion(string)", +"788bc8c0": "tokensToUsd(uint256,uint8)", +"788c26b4": "createNewVesting(address,uint256,uint256,uint256,string,uint256,bool)", +"788c4023": "isWalletLocked_Receive(address)", +"788c5999": "mintMode()", +"788ce6f2": "icoAddress()", +"788d135b": "GoForLaunch()", +"788d1fa6": "setInt8(int8,int8)", +"788d3851": "voteOpen()", +"788d5881": "licenseTermsHasMinCost(bytes32,bytes32)", +"788e0760": "shpExchangeRate()", +"788e26e7": "sponsorDeposit()", +"788e2c3c": "getRoundRemaining()", +"788e31bf": "addBoolSetting(string,bool,address,address,string)", +"788e72a5": "purchaseProduct(bytes32,uint256)", +"788e7909": "testTransferFromDoesNotAllowTransferOfMoreThanExistingTokensByDelegate()", +"788efb9e": "get_taker_fee()", +"788fa540": "CANONICAL_PRICEFEED()", +"78912dee": "FINTRUX_RESERVE_FTX()", +"78912eae": "sendTransaction(address,uint256,uint256,string,uint256,bytes)", +"7891663d": "HDXToken()", +"78918e89": "deleteCell(address)", +"7892cabf": "mixGenes(uint256[2],uint256[2],uint256,uint256,uint256)", +"7892d29e": "calcTradeFee(uint256,uint256)", +"7892fd29": "ROUND_TIME()", +"7893d936": "associate(bytes32,bytes32)", +"7893f4c2": "DBToken()", +"7894aafa": "createDivCard(string,uint256,uint256)", +"7894d1d0": "makeConcept(address[],uint256[],uint256,bytes,address)", +"789533e9": "getTeamPrice(uint256)", +"78954b3b": "previousContract()", +"7895dd21": "claimTokensFromSeveralAuctionsAsSeller(address[],address[],uint256[],address)", +"7895f853": "isFundLocked()", +"78960df6": "policyCandyBalance()", +"7896904e": "DaaToken(string,uint8,string,uint256)", +"7896cd95": "exchangeEnableCost()", +"789770f4": "ethToToken()", +"7898278f": "emergencyFreezeAllAccounts(bool)", +"78984793": "setLimit(address[],uint256)", +"7898acef": "usernameOf(address)", +"7898b917": "getKey(address,string)", +"78990684": "closeAllSales()", +"789a12fd": "getRafflePlayers(uint256)", +"789b2e6c": "payDay()", +"789b4690": "diviRate()", +"789c617c": "intStorage(bytes32)", +"789c6740": "testEmptyCart()", +"789cf5e2": "auctionSumPlat()", +"789dfc91": "SafeNetToken(uint256)", +"789e4e53": "createContractCollection(string)", +"789ea7dc": "becomeBatlord()", +"789fdcb6": "DoMusicPayout(uint256)", +"78a17883": "_batch4_icosaleEndTimestamp()", +"78a1b7c2": "pct(uint256,uint256)", +"78a2157a": "erc20ECT(uint8)", +"78a21a20": "_setStake(address,uint96,uint128)", +"78a29c66": "votesAvailable(address)", +"78a2e101": "TOKENS_FOR_PRESALE()", +"78a32742": "Pinged(address,uint256)", +"78a5b1b0": "blockHeaders(bytes32)", +"78a5f0ca": "withdraw_dao_fund(address)", +"78a62e9d": "isAppCode(uint32)", +"78a6c6d2": "createBreedingAuction(uint40,uint128,uint128,uint40)", +"78a70de5": "safeMathDiv(uint256,uint256)", +"78a71d78": "sendMail(address[],uint256,bytes32,uint256,bytes32,uint256)", +"78a72e0d": "encodeTransfer(uint96,address)", +"78a77b84": "closeRaffle()", +"78a7b804": "setKittyCoreAddress(address)", +"78a7e17d": "convert10MTI()", +"78a83232": "violaToken()", +"78a89567": "getTokenCount()", +"78a8b1fb": "ZTKGamers()", +"78a90a59": "presaleStop_13_December()", +"78a9e88a": "parseBitcoinComFeed(string)", +"78a9eeed": "listAll()", +"78aa08ed": "lotteryFee()", +"78aa34bf": "test_6_assertGasUsage2000Boards()", +"78abafaf": "limitAmount()", +"78abf854": "_budgetEndAndOfficalVotingTime(uint256)", +"78abfbeb": "finalization()", +"78ac19f9": "GexPayTest2Token()", +"78ad76e6": "DeBiToken()", +"78adf55e": "PreICOPart()", +"78ae12d8": "PRE_SALE_1000_ETH()", +"78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", +"78af5058": "picosSold()", +"78af63ac": "btcRaised()", +"78afda07": "firstContractAddress()", +"78b04df0": "Play(address,uint256,uint256,uint256,uint256)", +"78b0cb23": "addGpgKey(string)", +"78b14f0a": "addCharity(address)", +"78b150bd": "contractUpgradable()", +"78b17bd1": "supercustomhash(bytes)", +"78b17ccf": "CANCELLATION_FEE()", +"78b226c4": "updateMemberAddress(address,address)", +"78b27221": "mintFungible(uint256,address[],uint256[])", +"78b290b5": "OPERATION_HOLDER()", +"78b29105": "forceBuy(address,address)", +"78b5a576": "updateDexterity(uint256,uint8)", +"78b6e20c": "untrackTreasuryToken(uint256)", +"78b71079": "hasEnoughGrantAmount(address,uint256)", +"78b83360": "freezingBalanceInfoOf(address,uint256)", +"78b8a6c2": "issueTokensInternal(address,uint256)", +"78b8c58c": "getTokenInfoNumToknes()", +"78b99c24": "pricingStrategy()", +"78ba24f2": "addContractBalance(uint256,uint256)", +"78bb5164": "whitelistLength()", +"78bb9e54": "niceguy4()", +"78bba530": "communityHolder()", +"78bc254b": "setPreIcoParameters(uint256,uint256,uint256,uint256)", +"78bc6460": "getCallGasPrice(bytes32)", +"78bca3e7": "NeuralNetwork()", +"78bcd39a": "accountLockCheck(bytes32)", +"78bd7935": "getAuction(uint256)", +"78be0496": "MTF(uint256,uint256)", +"78beda71": "createPromoMineral(bytes32,address,uint256,uint256)", +"78bee6b4": "transferToAnotherAddr(address,uint256,bytes32)", +"78bf2b53": "setToken(address,uint256)", +"78c01961": "EmitEntityIds(address[])", +"78c24e9b": "adminSetFeeDialNumber(uint256)", +"78c2c849": "burnUnicorns()", +"78c37a45": "amendCount()", +"78c38a79": "setOwnedArea(address,uint256)", +"78c3b3a5": "futureRoundWallet()", +"78c3df77": "addProfitPerShare(uint256,address)", +"78c3e2ec": "createTask(address,string,string,uint256)", +"78c3e7a4": "generateCardsFromClaimForOpponent(address,address)", +"78c3f298": "pvtTokens()", +"78c53533": "getPoolOwner()", +"78c5e86f": "crowdsaleClosedTime()", +"78c62ca4": "changeDestinationAddress(address)", +"78c68573": "getLineUpEnable_miner(address)", +"78c6d437": "founders_addr()", +"78c70a4e": "allowAddressToSendMoney(address,address)", +"78c7524d": "versionIndex(bytes32,bytes32,address)", +"78c83f71": "rebalance_insert(uint256)", +"78c8cda7": "removeWhitelist(address)", +"78c91d29": "getCountCanAdd()", +"78c9f9cf": "computeEarningsAmount(uint256,uint256,uint256,uint256,uint256)", +"78ca923d": "nearestKnownBlock()", +"78caa728": "getLLV_edit_12()", +"78cac18d": "updateInfo(address,address,uint256)", +"78cb2f56": "DENtoken()", +"78cc180b": "bpSaleIssue(address,uint256)", +"78ce14dd": "CryptotalksToken()", +"78ce341a": "enablePayable()", +"78cf19e9": "reserveTokens(address,uint256)", +"78cfccb5": "REDDCCOIN()", +"78cffc09": "set_location(uint256)", +"78d012a6": "roundIn()", +"78d0a415": "getDthTeller(address)", +"78d18198": "getNextSnapshotBalance(address)", +"78d18bef": "withdrawalsInitiated()", +"78d19e42": "MintableToken(uint256,string,uint8,string)", +"78d22ab0": "getStageMinWeiAmount(uint256)", +"78d34986": "updateKittensRemainingForSale()", +"78d3633b": "illiquidBalance(address)", +"78d38d1a": "SenegalvsColombia()", +"78d45eb6": "checkAccess(address,bytes1)", +"78d46c3f": "listSpriteForSale(uint256,uint256)", +"78d4e808": "fetchCancelledOrdersForPayerByAdmin(address)", +"78d55ac1": "MRCCToken(uint256,string,string)", +"78d5e123": "unstakeTokensManually(address)", +"78d63908": "doBuy(address,uint256,bool)", +"78d63c59": "AMFBToken()", +"78d6525f": "test_validEmptyEqEmpty()", +"78d6fd25": "getRecTransactions()", +"78d74f60": "LyCI(address,string,uint8,string,string)", +"78d7ccea": "ComputeEggsSinceLastHatch(address)", +"78d8615f": "addEvent(uint256,string,bytes32,bytes32,string,bytes32)", +"78d8e17b": "totalGenesisTokens()", +"78d8fed8": "setUnlock(bool)", +"78d9472f": "setDefendBoostMultiplier(uint256)", +"78d9b048": "teamPoolInstant()", +"78d9c387": "newContest(uint32,uint256,uint256,uint32,uint256,uint32)", +"78da32f2": "setUintF1F2F3(uint256,uint256,uint256)", +"78da7ba1": "presaleEndTimestamp()", +"78dbce5f": "GetStakingNow()", +"78dbfd91": "createBuyOrder(address,uint256,uint256,uint256)", +"78dc6b7e": "transferring(address,address,uint256)", +"78dc7017": "getYellowCards()", +"78dc70c0": "feePeriodStartTime()", +"78dda193": "getCarState()", +"78df0fe1": "getProfits(address)", +"78dfd3a9": "getNumParticipants(uint256)", +"78e03373": "operationalAddress()", +"78e0a0bd": "flashSale(uint256,uint256,uint256)", +"78e24ab5": "SALE1_RATE()", +"78e2df0e": "soft_cap()", +"78e4ca77": "Connect4eth(address,address,uint256)", +"78e4d750": "PenPalToken()", +"78e5d841": "HaltableToken(address)", +"78e619df": "DOOMCOIN()", +"78e65d2e": "bridgeValidatorsImplementation()", +"78e7058e": "advisorsTokensHolder()", +"78e77477": "releasedAdvisorsTokens()", +"78e7e5ea": "LAND_ADDRESS()", +"78e80b39": "UserGetPrize()", +"78e8356c": "removeBet(string,uint256)", +"78e8488d": "gameGiftSentAmount()", +"78e870cd": "balances_available_for_crowdsale()", +"78e88c3c": "getMyFee(address)", +"78e89085": "Dispute(uint256)", +"78e8b8fc": "dataSourceCallbackGroup(uint256,uint8,uint8)", +"78e8cab5": "gcpm(uint256)", +"78e90190": "mokenBytes32(uint256)", +"78e95645": "noteChainFee()", +"78e97925": "startTime()", +"78e9f1ba": "minimumBetAmount()", +"78e9f81f": "assignRoleWithExpiration(address,bytes32,address,uint256)", +"78ea787b": "getDefaultAllowance(string)", +"78eb890b": "checkErrors()", +"78eba8fc": "icoCheckup()", +"78ec0adf": "scannedSilverCaps()", +"78ec1eb4": "checkIfEligable(address,address)", +"78ec383a": "MRC()", +"78ec6dbd": "Beth()", +"78ec81a0": "sendEarnings(address)", +"78ec96a0": "GREEN()", +"78eca227": "getBuyOrderInfo(address,address)", +"78ecabe6": "changeAvailableSpend(uint256)", +"78ed2178": "linkFileToTask(address,bytes32)", +"78ed43c1": "administrationContractFrozen()", +"78ed8dfd": "allocateUnsoldTokens()", +"78ed9156": "diary(uint64)", +"78ee6035": "cancelPledgePayment(uint256)", +"78eef9d4": "move_excess_for_bucket(uint256,uint256)", +"78efa1db": "COIN_SUPPLY_ICO_TIER_3()", +"78f0161a": "setGreyGreenPrice(uint8)", +"78f08268": "getUsersCount(address)", +"78f08f2e": "getLineStat(uint256)", +"78f13614": "ATTR_LEASABLE()", +"78f1a5ce": "addTeamAndAdvisoryMembers(address[])", +"78f2144b": "_originalBuyPrice()", +"78f22cc0": "getAuditRegistrar(uint256)", +"78f305c6": "getStartDate()", +"78f55622": "calCurrentVirus(address)", +"78f55de4": "sxpNumber()", +"78f5958f": "setblocksPerMonth(uint256)", +"78f5e0ec": "CampingCoin()", +"78f5e59f": "TOTAL_SUPPLY_VALUE()", +"78f74fbe": "tokenIssuedPrivateIco()", +"78f76779": "batchOrderTrade(uint8[2][],bytes32[4][],uint256[8][],address[6][])", +"78f79187": "DailyAndSnapshotable(uint256)", +"78f7aeee": "tokenAllocated()", +"78f7d9c6": "payBill(uint8,uint256)", +"78fad7bc": "champToken()", +"78faff96": "isSet(address,address)", +"78fbc9ea": "weiToCollect()", +"78fc3cb3": "canTransfer(address)", +"78fc52b3": "processDiceRoll(address,uint256)", +"78fca301": "Menu03(uint256)", +"78fd98d1": "freezeAmount(address,uint256)", +"78fddd69": "MedAIChain(uint256,string,uint8,string)", +"78fe2951": "enableService(uint256)", +"78ff54eb": "updateRestrictedVault(address)", +"7900438b": "registerDevice(bytes32,bytes32,bytes32)", +"79008da5": "addRandomTile(uint16,uint8)", +"790105ff": "withdrawEIP20Token(address)", +"79018524": "Token(uint256,address)", +"79028df3": "GetFirstName(uint256)", +"79032fa7": "storeHorsey(address,uint256,address,bytes32,uint8,uint8)", +"790377dc": "getLastAuditId(address)", +"7903d8c8": "canSend()", +"79049227": "lockupSeconds()", +"7904d388": "ethRec(uint256)", +"7904f688": "distributePrizes(uint16)", +"79053739": "damage(uint8[176],uint8,uint8)", +"790587d1": "updateIpfsGateway(string)", +"79061e96": "withdraw_ether()", +"7906305b": "upgradeTier(string)", +"790683d3": "getTopicByOffset(uint256)", +"79081feb": "getCardLeaseLength(uint8)", +"7908f25c": "thirdTeamWithdrawal()", +"79099e15": "MAX_USD_FUND()", +"7909da6f": "createExchange(uint256,uint256,uint256)", +"7909f569": "gasForFLKD()", +"790a091e": "test_rewardPoolShare_notTranscoder()", +"790b1656": "ThreeEtherFree()", +"790be9b5": "SETC(uint256,string,string)", +"790c33b8": "getReportingTokenOrZeroByPayoutDistributionHash(bytes32)", +"790ca413": "launchTime()", +"790cbfa0": "createMeshPoint(int256,string)", +"790d4e11": "getLosersOnePercent(uint256)", +"790dd0f5": "fuint256(uint256)", +"7910085d": "fipsIsRegistered(bytes20)", +"79103c2e": "RejectedApplication(address,uint256,string)", +"7910830a": "setCrowdSaleStatus(bool)", +"7910867b": "isApproved(uint256)", +"7911d80a": "Presale1Sold()", +"7912b0f1": "HOPEToken()", +"79132085": "APSP()", +"79141f80": "getBetInfo(uint256)", +"791455dd": "addPieceAndHash(string,string,string,address)", +"79147cf0": "_result()", +"79147d07": "UnsoldAllocation(uint256,address,uint256)", +"7914d10f": "setminContribution(uint256)", +"7915785e": "accountsToAllocate()", +"791581c6": "addTime(uint256,uint256)", +"7915c069": "register(string,address,address)", +"7915c9e0": "verifyTransfer(address,address,uint256,bool)", +"79162aeb": "pauseEmergence()", +"79164773": "nextForkBlockNumber()", +"7919233f": "emitWorkOrder(address,uint256)", +"7919792b": "doThrowOnDivByZero()", +"791ac4e5": "_getUtilizationRate(uint256)", +"791af2b6": "dkBB(bytes32)", +"791af8e4": "totalExtraTokens()", +"791b1150": "notify_payment_reject(uint256)", +"791b51f1": "Consulting(address,address)", +"791bbe35": "TheDeadShitCoin()", +"791cbc4f": "stopConvertTokens()", +"791dd41c": "ownerOverride(uint256)", +"791f0333": "equalStrings(string,string)", +"792037e3": "shut(address,bytes32,address)", +"79203dc4": "totalAllocation()", +"7920d804": "getKing()", +"7920f72c": "_tag(int256,string)", +"79214878": "regionExists(uint256)", +"792166b8": "createEscrow(uint256,uint256,address,address)", +"79216aec": "ManagedToken(address,address[])", +"79216f5f": "add_monster(uint16,uint16,uint16)", +"79217982": "preIcoMinInvest()", +"79219a24": "getLockRecordCount()", +"7922841c": "registerAssetHeader(int256,string,string,string,string,string)", +"7923715b": "RPEICO_TOKEN_SUPPLY_LIMIT()", +"79250dcf": "getApprovePreSignedHash(address,address,uint256,uint256,uint256)", +"792544af": "get_DB_info(uint256)", +"79254bb8": "right29(uint256)", +"792651b0": "app_storage()", +"7927448a": "getTicketTime(bytes32)", +"7927bc0c": "list_token_bid(address)", +"79287790": "get_milestones_information(uint256)", +"792a152d": "addRegion(uint16,uint256,string)", +"792ad365": "lastBlock_f15Hash_uint256()", +"792b22c6": "returnCoupon(address[3],bytes32)", +"792b476b": "getPositionCount1(address,address)", +"792c02ea": "stagesLength()", +"792c91c2": "setRecordId(uint256,bytes32)", +"792cb544": "_setCertificateSigner(address,bool)", +"792e1ffc": "authorize(uint8,bytes32,bytes32,address)", +"792e79c5": "stealCardWithTwitterId(uint256)", +"79304063": "depositsSigned(bytes32)", +"7930a433": "withdrawDelta(uint256)", +"7930acd6": "getCCH_edit_27()", +"79318d81": "closeRefunds()", +"7931a765": "Issued(uint32,address)", +"793267f0": "vaildBalanceForTokenCreation(address)", +"79326c01": "isSaleOwner()", +"7932f07f": "getRegionBlockUpdatedAt(uint256)", +"793318eb": "MMMPCoin()", +"79332159": "Bet(address,address,uint256,uint256,uint256)", +"79341ca1": "getRoundAmtPot(uint256)", +"7934b50f": "_lockToken(uint256)", +"7934f4ed": "processPayment(uint256,bytes)", +"7935326b": "preICOTokensAllocated()", +"79362167": "getBillboard(address)", +"79372f9a": "ClaimReward()", +"7937f46d": "setBBO(address)", +"79381c80": "performRefund(bytes32,uint8,uint256,uint256)", +"7938cc42": "allocateProofTokens(uint256)", +"7939a10b": "getSellValue(uint256)", +"793a2cd1": "isPausedICO()", +"793a8c95": "owner_updatePayout(uint256)", +"793c0fd4": "authorizeSpender(address,bool)", +"793ca3fe": "getFirstCycleBlock()", +"793cd71e": "cashOut()", +"793cf430": "option30name()", +"793d424e": "getBLAddress()", +"793d7165": "fSqrt(uint256)", +"793dae12": "acceptSettlement()", +"793e9b0b": "OPTION_POOL_ALLOC()", +"793ec6c2": "turnOffCanUpdateBackWindowAdjustmentRatio()", +"79409b19": "EthToUsd()", +"79412da6": "withdrawalTokens(address,address,uint256)", +"7941a062": "getBlocksRemaining()", +"7941d7bd": "changeTokenOwnerByAdmin(uint256,address)", +"79420fb1": "tierTotal()", +"79428570": "getTeamId(uint256)", +"7943f2ec": "withdrawCoinToOwner(uint256)", +"79444ad3": "handleForTokenId(uint256)", +"7944875b": "StopSale()", +"7944b4b9": "mileStone(address,uint64,uint8)", +"79456cb6": "test_1_method()", +"79459ac3": "buy10(address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"794752c7": "askForgiveness(string)", +"79480a4c": "getOrderValuesFromData(bytes)", +"79480fe3": "nextMintFeeAbs(uint256)", +"79485d41": "DeauthorizeServiceProvider(address,address)", +"7948a9c5": "TokensWithdraw(address,uint256)", +"7948f523": "setAmbiAddress(address,bytes32)", +"79491370": "closeSale(address)", +"79492f30": "allocationFor(uint256)", +"7949859e": "UpdateToeknLimitICO(address,uint256,uint256)", +"794ab0a8": "etherPriceInDollarIn()", +"794b0c62": "DAICO()", +"794b0e6b": "addExperience(address,uint256[],int32[])", +"794c0c68": "stakingEpoch()", +"794cea42": "search(address,address[])", +"794d0d8d": "WithdrawVault(address)", +"794df640": "updateUsdEthRate(uint256)", +"794e9434": "awardWeeklyLottery(address,uint256)", +"794ee205": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes)", +"79501a83": "isBiometricLocked(address)", +"79502c55": "config()", +"7950c5f8": "verifyingKey()", +"7951357e": "Suspended()", +"79515566": "calcAllowedWeisToInvest(uint256)", +"7952a0ed": "MetaProject()", +"79530087": "BirCoin()", +"79538e47": "addVpf(bytes32,uint256,uint256,uint256,uint256,int256[])", +"7953ae77": "MainSaleDeadline()", +"7953e0ab": "dateEcoRelease3()", +"79544754": "getBonus(address,uint256,uint256)", +"79557e4f": "traded_token_balance()", +"7955a65f": "adminWithdraw(address[3],uint256[3],uint8,bytes32,bytes32)", +"7955dd45": "player_withdrawPendingTransactions()", +"795612d6": "buyItem()", +"79564072": "directorLockUntil()", +"7956f46a": "AggiungiProfessore(address)", +"7957170b": "getApproveRecord(uint256)", +"795741c8": "withdrawEscrowFees()", +"79583e22": "buyOrder(address,uint256,uint256)", +"7958533a": "meta(uint256,bytes32)", +"795a16e3": "setRecipient(string)", +"795b0e16": "TransferAllowed()", +"795b5b83": "createSaleCardToPlayer(uint256[],address,address)", +"795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", +"795bfd7b": "togglePreventDoublePurchases()", +"795c1713": "FCoinToken()", +"795c6437": "isWorkflowState()", +"795da78f": "coinsIssuedCmp()", +"795dbede": "idx()", +"795e09ef": "privilegedAccountsCount()", +"795e4547": "changeContractUpgradability(bool)", +"795ebb68": "setTokensDecimals(uint256)", +"795fcd6e": "RelentlessConscience1Token()", +"795ff8aa": "safeTokenWithdrawal(uint256)", +"7960d19b": "MediatedTransactions_Log(uint256)", +"79618233": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256,bytes32)", +"79624add": "MAX_DAILY_SOLO_SPEND()", +"7962525c": "getRoundNumberOfBets(uint256)", +"79630bd8": "rate10()", +"7963b478": "assertEq28(bytes28,bytes28,bytes32)", +"79644576": "newProposal(uint256,address,uint256,string)", +"796485f9": "back_giving(uint256)", +"7964dd2b": "excludeAddressFromStaking(address,bool)", +"7964ea87": "claim(bytes32,uint256,bytes)", +"79655bd0": "getStages()", +"7965bb86": "STQPreICO2(address,address[])", +"79662bd5": "withdraw(string,address,uint256,string)", +"796676be": "urls(uint256)", +"796686a9": "book(uint256[],uint256)", +"7966c431": "subString(string,uint256,uint256)", +"796736f0": "tradeBalances(address,address,uint256,uint256,address,uint256,bytes32)", +"7967a50a": "preSaleEndDate()", +"7968196c": "amountRaisedInUsdCents()", +"79681c94": "buyRoundDataRecord(uint256,uint256)", +"79683e63": "inviteInit(address,address)", +"79687166": "uintToBytesForAddress(uint256)", +"79694f08": "topUpDelegate(address,address,uint32,uint192)", +"796a6ec9": "Credited(address,uint256,uint256)", +"796a8076": "updateAuctioneer(address)", +"796b89b9": "getBlockTimestamp()", +"796c0c78": "allocatedTokens(address,uint256)", +"796c5b08": "getPenaltyFactor(uint256)", +"796c5e5b": "saveHash(bytes8,string)", +"796c8902": "getInvestor()", +"796d67da": "numberOfProposals(bytes32)", +"796d8950": "StromkontoProxy()", +"796dc916": "pauseResumeContract(bool,bytes32)", +"796f6281": "tokenFront()", +"7970785d": "withdraw(address[],uint256[],address[])", +"79710f07": "drainERC20(address)", +"79716e43": "confirmTransaction(bytes32)", +"7972d079": "setMfgValues(string,string,string,string,string,string)", +"79735d54": "hasEnoughStake(address)", +"7973830a": "getMapValue(uint256)", +"7973b370": "ProudOfYourCoin()", +"7973c57f": "fechVoteNumForCandidateBySnapshotBlock(address,uint256)", +"7974a9e6": "publishOption(uint256,uint256,uint256)", +"7974f8fe": "changeTime(uint256)", +"7974fdbd": "secondStageRefund()", +"79753e82": "initAirdrop()", +"7975752c": "ScabbageToken()", +"79758d46": "reading_card_at(uint8)", +"7975c56e": "oraclize_query(uint256,string,string)", +"7975c609": "accountLevels()", +"7975ce28": "buyTokens(uint256,uint256)", +"7976eaa2": "getBonusTokens(uint256)", +"79770d5f": "minBidDifferenceInSzabo()", +"7977f708": "addRoleCapability(uint8,address,bytes4)", +"79787196": "killTotalSupply()", +"7978c7ed": "exotownToken()", +"7978f1b2": "licenseCostNumerator()", +"79798ccb": "startTokenSale()", +"79799193": "FreezedCash()", +"797a49b6": "createPoll(string,uint8)", +"797af627": "confirm(bytes32)", +"797b5877": "NCU(uint256,string,string)", +"797bfaf3": "ico1endTime()", +"797c6f3a": "advertisingUse(uint256,uint256)", +"797d660f": "getCandidateNumberList()", +"797d8b85": "calculateDividend()", +"797d9437": "loadedRefund()", +"797df209": "configureVesting(uint256,uint256)", +"797e2aec": "addCharacters(uint8)", +"797f6bb1": "raiseTraderUnregistered(address)", +"797f73ff": "alreadyClaimed()", +"797f87ba": "chests()", +"79808552": "cancel_lottery()", +"7980a1ab": "increasePaymentsBalance(address,address,uint256)", +"7981e7f1": "generateTokensByList(address[],uint256[])", +"7981fd67": "loikikd()", +"7982abf0": "testTransferGas()", +"7983eb31": "distributeEvenly(uint256)", +"798405fc": "Hold(address,address,uint256,uint256)", +"79843715": "crowdSaleMax()", +"79848daa": "setReleaseManager(address)", +"7984932e": "releaseNow(uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", +"79853c7e": "payFromCampaign(bytes32,address,address)", +"79859a78": "setMaxAgonCount(uint256)", +"7985b860": "AboutBill(uint256)", +"7985ee8f": "deleteRewards()", +"7986c724": "BOUNTY_TOKENS_LIMIT()", +"7986cbfc": "getGroupbyIndex(uint256)", +"798764ec": "ShowCoinToken()", +"79878757": "passTokensToTheTeam()", +"79881b5a": "setPresaleStartsAt(uint256)", +"79885b91": "LIB()", +"79891359": "getOnePlayCoin()", +"798929da": "distributeCoins(address,uint256,uint256,uint256)", +"798974dd": "getNumProposals()", +"798a970b": "setUnitCoinProductionIncreases(address,address,uint256,uint256,bool)", +"798b18fd": "currentRateM()", +"798b3ecf": "processCooldown(uint16,uint256)", +"798b7a71": "callOnce()", +"798bede1": "advisorSupply()", +"798c1f2a": "do_bet(uint256)", +"798c6e0f": "clearStages()", +"798ce54f": "payoutPartial(uint256)", +"798d05fa": "getCountTeams()", +"798ec637": "transferEtherToSender(uint256)", +"798f3e85": "PublicTokenReleased(uint256)", +"798f9790": "getResoDetails()", +"798fd178": "getFrom()", +"79902299": "recalculateTotalFees()", +"79905753": "reclaimFundMultiple(address[])", +"7991c63a": "MetaChanged(uint256,bytes32,bytes32)", +"7992e39f": "TierAmount()", +"7993e5c2": "Devcon2TokenForTesting()", +"7994f55b": "setEndpointParams(bytes32,int256,bytes32[],int256)", +"79953633": "ownersProductAdded(address,uint256,address)", +"79955b4c": "richardAddr()", +"7995b15b": "nowInSeconds()", +"7995ba90": "withdrawExcessToken(address,address)", +"7995ed8c": "ClaimedWei(uint256)", +"79968b77": "sellLicense()", +"79974ce8": "MiningAttemptEvent(address,uint256,uint256,uint256,uint256)", +"79978630": "settleChannel(address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)", +"7997b997": "doMelt(uint256,uint256)", +"79981387": "setWhiteList(address[],address,bool[])", +"79984882": "getProxyExecID(address)", +"79987504": "ECN(uint256,string,string)", +"7998a1c4": "identifier()", +"79991997": "enter(bytes32,bytes8,uint16)", +"799957d2": "TTC()", +"7999c7ca": "myUsername()", +"799a5359": "transferToken()", +"799ae223": "flipCoin()", +"799b3864": "getVersionLength()", +"799b7bb8": "PRE_ICO_ADDR()", +"799c0468": "withdrawMarketingAndCommunityOutreach()", +"799c7b69": "_resetGame()", +"799c8ef2": "callScheduler()", +"799cd333": "sign(bytes32)", +"799d916b": "getObjectValueByKey(string,string)", +"799dcf7e": "staticArrayTests()", +"799efef0": "setLockedWalletAmount(address,uint256,bool)", +"799f0c5d": "locked_funds_for_revealed_spins()", +"799f4079": "unholdSubscriptionOffer(uint256)", +"799f7043": "recordBet(bool,uint256)", +"79a0e5be": "changeMessage(uint16,string)", +"79a18b3a": "isRoundThreeSalePeriod(uint256)", +"79a1c1f6": "proposalStatus(bytes32)", +"79a1ed16": "WithdrawalQuick(address,uint256,uint256)", +"79a2bbec": "_addResources(address[],bytes4[])", +"79a2bfa5": "PRE_SALE_MIN_BUY()", +"79a34619": "startTimeMain()", +"79a3510d": "thisVoterExists()", +"79a37bd0": "tellTime()", +"79a410a7": "bonusesOf(address)", +"79a411ff": "ScareERC20Token()", +"79a4b4bd": "sellPrice(uint8)", +"79a4ee93": "testDeregisterCustomer()", +"79a6877f": "initializeToken(string,uint256,uint256)", +"79a7cfee": "setAddress(bytes32,bytes32,address)", +"79a7de4f": "buildId(address,uint256,bool)", +"79a8416e": "checkPayment()", +"79a84750": "createTokensTo(address,uint256)", +"79a85e6c": "getProductInfo(uint256)", +"79a87b19": "migrationDestination()", +"79a88683": "startCrowdsalePhase3Date()", +"79a8945c": "isDeveloper()", +"79a89b06": "releaseExpiredEscrow(address,address)", +"79a8ba40": "createRequest(uint256,address,uint256,string)", +"79a8f2fa": "processRoulette(address,uint256,bytes32,uint256)", +"79a958c2": "codeUpdateState()", +"79a9986c": "addBadge(string,uint256)", +"79a9e9ea": "IkuraToken()", +"79a9f14d": "getBcouponBalances(address)", +"79a9f23f": "transferAllowedAdd(address)", +"79a9fa1c": "buyback(uint256)", +"79a9fd36": "SUAPPToken()", +"79aa024e": "setAirdropAdmin(address,bool)", +"79aa668d": "setEventsContract(address)", +"79ab295f": "SALE1_CAP()", +"79abb2f5": "play_paper()", +"79aca4e0": "acceptSmartTokenOwnership()", +"79ae0c0a": "updatePrice(bytes32,uint32,uint64,uint32)", +"79ae1c36": "setStopDefrost()", +"79ae77cf": "OEM_Wallet()", +"79ae9c5e": "clearLC()", +"79af55e4": "increaseLockTime(uint256)", +"79af6547": "addLockStep(uint8,uint256)", +"79af8380": "addCrowdsaleContract(address)", +"79b0797c": "AmIPlayer1()", +"79b2614d": "currentMintNonce()", +"79b37a86": "usdRate()", +"79b45b18": "removeEmployeesWithExpiredSignaturesAndReturnFadeout()", +"79b466b0": "TOTAL_TEAMS()", +"79b4a2c7": "transferMultiAddress(address[],uint256[])", +"79b5b1d1": "EvaCurrency(string,string)", +"79b7b30b": "endTrading(bool,bool)", +"79b80455": "onTimeLock()", +"79b9a060": "changePayout(uint256)", +"79ba5097": "acceptOwnership()", +"79ba50b1": "LAME()", +"79ba7b61": "ServiceCoin()", +"79baa8a9": "BasicIncome_CoFund()", +"79bae8a1": "test_failed_payment_throwing_token()", +"79bc2040": "canbuynum()", +"79bc46b3": "SELL_HARD_LIMIT()", +"79bcabf4": "Authority()", +"79bcae2a": "createFuel(uint256,string,uint256,uint256,uint256)", +"79bd04f2": "_bidLaterShip(uint256,uint256,address,address)", +"79bd42cf": "END_DURATION_BETTING_BLOCK()", +"79be02af": "Read(address)", +"79bed048": "turnOffCanUpdateAmountToTakeAsRake()", +"79bf8df3": "mModeratorKeys(uint256)", +"79bfaaeb": "visaLength(address,uint256)", +"79c0909e": "getRandomFromBlockHash(uint256,uint256)", +"79c0b9fb": "sanityCheck(uint256,uint256,int8,int8,int8)", +"79c0d5ae": "tokensInvested()", +"79c0f30e": "advancedThreshold()", +"79c12db5": "EventTicket(uint256,uint256)", +"79c20b41": "changeArtName(string,string)", +"79c30e49": "openCdp(uint256,uint256,uint256,uint256,address)", +"79c310a6": "increasePlayersJadeProduction(address,uint256)", +"79c3199d": "preIcoStartDate()", +"79c36409": "DifToken(uint256,string,uint8,string)", +"79c3dd32": "thirdLevelPrice()", +"79c3ddc1": "isPackageOwner(string,address,address)", +"79c3f694": "_getPVPFeeByLevel(uint256)", +"79c4264a": "earlyBirdMinPerPerson()", +"79c4264b": "matchCount()", +"79c597ff": "ends()", +"79c5ba97": "enterBidForGanToken(uint256)", +"79c5c6b6": "MyWill()", +"79c5cb1c": "createItem(string,uint256,uint256,uint256)", +"79c62711": "createJob(string,uint256,uint256)", +"79c63c40": "dxfOpen()", +"79c65068": "mintToken(address,uint256)", +"79c66892": "EmrCrowdfund(uint256,uint256,string,string)", +"79c69195": "setParamsTotalSupply(uint256)", +"79c6a1b8": "registerAdmin(address,string)", +"79c6b667": "registerPoA(string,bytes32,uint64[],uint64[],address,address,string)", +"79c6c11a": "takeEther(uint256)", +"79c7180d": "Erc20SummaryLogic(address)", +"79c73464": "numAdrs()", +"79c749cd": "generateContentID(string)", +"79c74a38": "Fomo5d()", +"79c7c806": "proofExists(string)", +"79c7f38c": "_freezeAccount(address,bool)", +"79c84100": "getFreezeHourglass(bytes32,bytes32)", +"79c88f20": "datacoin()", +"79c8fe30": "setMaximumGasPrice(uint256)", +"79c9e396": "test_oneInvalidEqBytes2()", +"79ca0792": "beneficiaryMultiSigWithdraw(uint256)", +"79ca9ad4": "tokensToEth(uint256)", +"79caf670": "ethealController()", +"79cb5a2f": "setEtheraffle(address)", +"79cb650f": "testAliceFooKill()", +"79cb657a": "setRateStalePeriod(uint256)", +"79cbfd18": "computeCurrentPriceImpl(uint32,uint64)", +"79cc6790": "burnFrom(address,uint256)", +"79cc90c4": "repossess()", +"79ccd1a1": "BetherBank()", +"79cce1c5": "getReleaseHashes(uint256,uint256)", +"79cd421d": "ERCTestToken()", +"79ce0515": "removeCP(address,address)", +"79ce37e1": "deadline_modify(uint256,uint256)", +"79ce9fac": "transfer(bytes32,address)", +"79cef607": "_purchaseTokens(string,address,uint256)", +"79cf3a7a": "zeroOut()", +"79d007f7": "forceOffsetExtraFeeRate()", +"79d00c5d": "EasyCrowdsale()", +"79d10a76": "SedPosToken()", +"79d116ed": "setWhiteListingAdmin(address)", +"79d1d4fa": "verify(bytes,bytes,bytes,bytes32)", +"79d220ae": "setCrowdsaleOpenTimerFor(uint256)", +"79d28ac9": "balanceOfCreator(address)", +"79d2e48d": "upgradeFinalize()", +"79d303ae": "doStart()", +"79d3d547": "grantToken(address)", +"79d42bfe": "CLNRaised(address,address,uint256)", +"79d4fe00": "totalTokensICO3()", +"79d60cdf": "LongChain()", +"79d6348d": "sign(string)", +"79d68f79": "COIN_PER_ETHER_BOARD()", +"79d88d87": "forbid(bytes32,bytes32,bytes32)", +"79d8cc7b": "setFlights(uint16[],uint16[],uint256[],uint256[])", +"79d95c5a": "setMaxCap10X(uint256,string)", +"79d9e979": "minimumDealAmount()", +"79da06a2": "BlockSwapWrapperGolemNetworkToken()", +"79da9747": "switchCrowdsale()", +"79db228a": "RegisterList(address[],bool)", +"79db5f67": "removeRole(address,uint256)", +"79db671d": "upadateContributorsCount(uint256)", +"79db77a3": "removeStaffWhitelist(address[])", +"79dbdbb9": "CKYAdv(uint256,string,string)", +"79dc04c0": "BCTVToken(uint256,string,string)", +"79dc10a6": "takeOwnershipFeePercents()", +"79dd02cb": "PerfectCoinControl()", +"79dd822a": "setSignatureRest(bytes,uint256)", +"79ded380": "setRabbitMother(uint32,uint32)", +"79df2a4c": "ReferredInvestorAddition(address,address)", +"79df4fa2": "startDeposit()", +"79df896d": "ScandinavianEKrona()", +"79e05a36": "getUintField2()", +"79e097f0": "addVotePair(address,address)", +"79e0ef1b": "withdrawBalanceAmount(uint256)", +"79e0f59a": "setEarlyParicipantsWhitelist(address[],bool[],uint256[],uint256[])", +"79e1250d": "setTotalToken(uint256)", +"79e12f7e": "getBoardByHash(bytes32)", +"79e1c9dc": "changeAmountPerEther(uint256)", +"79e1fa2e": "convertToEur(uint256)", +"79e23483": "addLockValue(address,uint256)", +"79e2bbea": "getLifeVal()", +"79e35d0b": "poolcoin(uint256,string,string)", +"79e468ef": "createLand(address)", +"79e54e6e": "AleKoin()", +"79e58973": "coinBalanceOf()", +"79e58cfd": "transferIcoship(address)", +"79e79023": "KuaiMintableToken(address,uint256)", +"79e8b8eb": "lastSubTokenCreatorOf(uint256)", +"79eaaf61": "totalTiers()", +"79eac7c3": "confirmOccupancy()", +"79eb16d4": "calculateShareETH(address,uint256)", +"79eb26cc": "RANGE_SCALE()", +"79eba0b6": "showPrivateVars()", +"79ec3864": "getMemberAtAddress(address)", +"79ec4f19": "setStartAndEndTime(uint256,uint256)", +"79ed13a7": "availableOptions()", +"79ed3d69": "setNextCommonTTMTokenId2(uint64)", +"79edfa7d": "setMetadataUrl(string,string)", +"79ee54f7": "getRewards(address)", +"79eee392": "DEVELOPERS()", +"79ef6858": "addItemToMenu(bytes32,uint256)", +"79ef704e": "addLogic(address)", +"79efb507": "oldData()", +"79f00703": "setEthartArtReward(uint256)", +"79f015b2": "getCarProductName(uint32)", +"79f0b427": "log_demurrage_fees(address,address,uint256)", +"79f0c524": "ParseHeaderData(bytes)", +"79f0cd62": "revertTokensByKYC(address,address)", +"79f0f7b3": "safeMulWithPresent(uint256,uint256)", +"79f119cd": "PXP()", +"79f1433c": "post_energy_balance(int256)", +"79f16ba1": "ShanDianLian()", +"79f1987d": "thirdExtendedBonusSalesEnds()", +"79f1a6ef": "_noMatchingPairs()", +"79f3b481": "putTreeOnSale(uint256,uint256)", +"79f57e68": "getAsAddress(bytes32)", +"79f59f09": "ParsecTokenERC20()", +"79f645ea": "RANDOMIZER_RETRY_COUNT()", +"79f64720": "cancelAndReissue(address,address)", +"79f68f85": "forwardFunds(bool)", +"79f74fd5": "ControllerSet(address)", +"79f7a873": "isAtLeast(uint256,uint256,string)", +"79f7e600": "setApproveOwner(uint8,bool)", +"79f90d6c": "ownerPauseContract()", +"79f9578c": "queryBalanceMinter()", +"79f96600": "getCurrentFeeWindow()", +"79f9b10b": "registerAsExportingAuthority(address)", +"79f9cc72": "setGasLimits(uint256,uint256)", +"79fb18ac": "transferSmartTokenOwnership(address)", +"79fc3682": "addressBalances(address)", +"79fc4687": "receiveDividends()", +"79fd86cc": "airDrop_(address,address,address[],uint256)", +"79fd8c24": "PriceUpdate()", +"79fdc915": "_decideMarket(uint256)", +"79fdf548": "updateTokenInvestorBalance(address,uint256)", +"79fe3b06": "setPercentTokensToSale(uint256)", +"79fed7cb": "checkMinContribution()", +"79ff69d9": "paymentSettle(uint256)", +"79fff7a9": "logReputationTokenMinted(address,address,uint256)", +"7a00698f": "_doProposal()", +"7a0092b5": "Aunder()", +"7a009c22": "increaseBank()", +"7a00cf46": "isCloseable()", +"7a00e2e3": "removeReferrer(address)", +"7a013105": "ico_start()", +"7a02a973": "resetStaking()", +"7a02dc06": "getInfo(bytes32)", +"7a02eb1d": "Maesawa()", +"7a039beb": "GXX()", +"7a041e7e": "fundsFromPreSale()", +"7a044323": "accumulated()", +"7a04581c": "getBetclose()", +"7a04855a": "EplusCoinToken()", +"7a04f9ea": "getPhaseExpiry()", +"7a060b53": "GOLD_AMOUNT_TPT()", +"7a07424e": "promotionRatio()", +"7a08339d": "setFakeTime(uint256)", +"7a091f95": "batchPunchIn(address[],uint64[])", +"7a09588b": "cashoutEOSBetStakeTokens_ALL()", +"7a096f53": "getTransfer(address,address)", +"7a09defe": "totalMonster()", +"7a0a2e00": "auctionEndHashing(uint256,uint256)", +"7a0b0a3f": "MAX_STAGE_1_LIMIT()", +"7a0b294c": "buyPresaleTokens()", +"7a0c396d": "giveMeNILs()", +"7a0ca1e2": "attach(address)", +"7a0d819e": "casinoDeposit()", +"7a0e03ec": "getUInt8Value(bytes32)", +"7a0e09aa": "getConsent(uint256)", +"7a0e2d1a": "updateUser(bytes32,bytes,bytes32,bytes32)", +"7a0ecfc2": "LogUpdatedInitialTimestamp(uint256)", +"7a0fee37": "MinerRandomNumber(uint256)", +"7a10f17b": "PIN_PRICE()", +"7a1126f0": "houseWithdraw(uint256)", +"7a118fdc": "SHNZ()", +"7a11dfb4": "redeemBounty(uint256,uint256,uint8,bytes32,bytes32)", +"7a12cabf": "owner_updateRelay(address,bool)", +"7a12cdb8": "cybToken()", +"7a1395aa": "setDecimals(uint8)", +"7a13d14c": "disputeAutomatedReport()", +"7a1439d7": "payOffClaim(bytes32,uint256)", +"7a14f465": "crosairSoldCount()", +"7a152c11": "unpause(uint256,uint256)", +"7a153043": "disbursements(address,uint256)", +"7a1593d6": "freeze(address,string,uint256,uint256,uint256)", +"7a15eb8d": "lottoIndex()", +"7a16c6dd": "setsetperiod(uint256)", +"7a16cbe3": "setData_4(uint256)", +"7a178741": "getMemberAddr(uint256)", +"7a17feff": "setTransferLimit(uint256)", +"7a186ebf": "WHITELISTED_PREMIUM_TIME()", +"7a1903f2": "checkBonus(uint256)", +"7a1a0604": "AuctusTokenSale(uint256,uint256)", +"7a1a7e7f": "itemCancelMarkets(uint256)", +"7a1ab407": "bountyOwnersTokens()", +"7a1ac566": "registerSale(address,address)", +"7a1aeb3c": "getTokenCount(bool)", +"7a1b26a8": "TransactionAccepted(uint256)", +"7a1b63bc": "buyCMTAgainstEther()", +"7a1bba3a": "TestFoo()", +"7a1bbb40": "getNegativeArray()", +"7a1bcae9": "playerDecision()", +"7a1bf7f6": "PreIcoClosedManually()", +"7a1c0063": "emitExecuted()", +"7a1c39cb": "setIII_R2(uint256)", +"7a1c44f8": "DappleAirdrops()", +"7a1cf806": "configureTokenDividend(address,bool,address,bytes)", +"7a1d66dd": "determinePosition(address,address)", +"7a1d8570": "getSendVal()", +"7a1e16bc": "signEscrow(uint256)", +"7a208990": "Arcus()", +"7a20ff15": "getWeiAllowedFromAddress(address)", +"7a223758": "detOwner()", +"7a22393b": "setTokenSeller(address)", +"7a233fb3": "redeemPrice()", +"7a26924f": "timeToFinishTokensSale()", +"7a2756f2": "getWager(uint256)", +"7a276bb6": "getDeveloper(uint256)", +"7a28399b": "approveProvider(address)", +"7a28e60f": "EXTRADECOIN(string,string,address)", +"7a28f8bc": "accountData()", +"7a290fe5": "burnRemainToken()", +"7a29332d": "buyAllOutcomes(uint256,uint256)", +"7a294055": "VoteReceived(string,address,uint256)", +"7a2a0456": "swapEtherToToken(address,uint256)", +"7a2a3931": "galleassetTransferFrom(address,address,uint256)", +"7a2a530d": "getAllDevices()", +"7a2b0587": "isReserve(address)", +"7a2b2dd7": "Metaexchange(address,address,address,uint256,uint256,uint256)", +"7a2b78e5": "findIndex(uint256,uint256)", +"7a2b9116": "checkValidTk(address)", +"7a2c1b71": "CheckProfit(address)", +"7a2c8506": "getUserReward(address,bool)", +"7a2cc6d8": "_createPermission(bytes32,address[],bytes4[])", +"7a2e1c61": "getSoldCountOfPackage(uint256)", +"7a2e41d1": "InitiateCryptoGamers()", +"7a2ecfdb": "setMostSent(uint256)", +"7a309005": "devSENSDestination()", +"7a30ebed": "holyFoundersFundDeposit()", +"7a3130e3": "migrateFrom(address,uint256)", +"7a314ce2": "FUND_GATHERING_TIME()", +"7a319590": "changeFees(uint256,uint256,uint256)", +"7a31ee21": "MinimumFundingGoalChanged(uint256)", +"7a32c84c": "getDonatee()", +"7a341bc7": "setFounder(address)", +"7a34cedb": "purchaseWithBTC(address,uint256,uint256)", +"7a350141": "BalanceChanged(address,address,uint256)", +"7a360ec3": "forwardWei()", +"7a3629dc": "setMinimumStakingRequirement(uint256)", +"7a362fe1": "ICO_START1()", +"7a366d14": "softCap(uint256)", +"7a37f56e": "PandorasWallet()", +"7a38012e": "handleEarlySaleBuyers(address[],uint256[])", +"7a38417b": "delayOpeningTime(uint256)", +"7a386e88": "setupAmbi2(address)", +"7a387bc2": "returnNote(uint256)", +"7a38f9eb": "isZero(uint256)", +"7a396264": "winAmount2()", +"7a3979da": "pay_money()", +"7a39bb28": "FirstPeriodCapUpdated(uint256,uint256)", +"7a3a0e84": "fundingGoal()", +"7a3aa8ea": "CoXxMoXx()", +"7a3abce9": "withdrawComB()", +"7a3b0b5d": "positive_terms_of_Service()", +"7a3c4c17": "currentPrice(uint256)", +"7a3cbbe4": "TIMER_STEP()", +"7a3d2e5c": "changeArtUrl(string)", +"7a3d4b1a": "createSwap(uint256,address)", +"7a3dae68": "_createKT(string)", +"7a3dbc16": "getInitialPrize(uint256)", +"7a3e0013": "setArbitrator0(address)", +"7a3e286b": "currentCollectRound()", +"7a3eeb57": "setdteamVaultAddr2(address)", +"7a3f5781": "setAllowRefunds(bool,uint256)", +"7a3fa650": "IONIA()", +"7a4058dd": "confirmDealCompletionByPatient(bytes16,bool)", +"7a40618d": "emitContractRemoved(address,address)", +"7a408454": "burn(bytes32,uint256)", +"7a4093b8": "SETUP_DONE()", +"7a427d98": "forceReturn()", +"7a42a9cd": "checkOwner(bytes32)", +"7a43cb62": "positionWeightOf(uint256,uint256)", +"7a442a9b": "isClaimable(string)", +"7a444072": "getDeveloper()", +"7a44d730": "PGM_Coin()", +"7a457855": "getNumeroMensajes()", +"7a468170": "ethCap()", +"7a4690fb": "TOKEN_SALE1_NORMAL()", +"7a476a42": "queryPublishedContractTemplate(uint256)", +"7a479160": "getRequestArgs(uint256)", +"7a4822d7": "addTransaction(address,uint256,string,bytes)", +"7a4843ca": "product3_luckybuyTracker()", +"7a48b408": "MCIM()", +"7a48f5c7": "start_pg_quiz(string,string)", +"7a4aa92f": "provideTeamHolderToken()", +"7a4b7075": "getMake(uint256)", +"7a4b762b": "synechronToken()", +"7a4bfebb": "FixedGameToken(bytes32,uint256,address)", +"7a4c2e9a": "access_hidden_layer(int256[],uint256[],uint256)", +"7a4c96ad": "vote(string,string,uint256)", +"7a4cac15": "removeUserAsset(address,uint256)", +"7a4e320c": "MINIMAL_PRE_ICO_INVESTMENT()", +"7a4e365d": "destroyFreezeFunds(address)", +"7a4f2fde": "decreaseSalesBalance(address,address,uint256)", +"7a4f7b92": "getInitializedFeeWindow()", +"7a4fb678": "Operation(uint8,bytes32[8])", +"7a504ceb": "endCrowdsale(uint256)", +"7a50aeb5": "ProofToken(address,address,uint256,string,string)", +"7a518d9f": "epoch_release_count()", +"7a51a611": "getOptionIdForPoll(uint256,uint256)", +"7a52ad76": "ChangeMainSaleDates(uint256,uint256)", +"7a530f03": "createPromoFlower(uint256,address)", +"7a5310b9": "confirm2stage()", +"7a53bcfc": "batchSend(address[],uint256[])", +"7a5402e9": "getPolicyData(uint256)", +"7a543a94": "isIcoFinished()", +"7a545b0c": "preIcoSold()", +"7a554786": "saveUserWallet(address,address)", +"7a55cece": "PlusPay()", +"7a55d4bd": "getCurrentBragKing()", +"7a5615c0": "changeTokensPerUSD(uint256)", +"7a58b058": "read_max_dgx_available_daily()", +"7a58ce90": "CryptoLinkNet()", +"7a5977be": "MAX_TOKENS_ADVISORS()", +"7a5984c4": "burn(uint32)", +"7a5a35ad": "setUSDEth(uint256)", +"7a5a59ec": "angelAllocation()", +"7a5b4f59": "getMetadata()", +"7a5bed43": "deleteSharedAccount(bytes32,bytes32,bytes32)", +"7a5c8432": "paymentqueue()", +"7a5c9028": "getLengthClassPlayers(uint256,uint256)", +"7a5ced61": "batchcollecttaxes(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7a5d5345": "signControllerChange(address)", +"7a5db3f3": "renounceInvestor()", +"7a5dbc21": "ipow(int256,int216)", +"7a5df22b": "getStakedAddress(address)", +"7a5e842a": "nizk_verifyproof(string,string,string,string,string,string,string)", +"7a5f5021": "closeBets(bytes32,bytes32,uint256,uint256)", +"7a5f715c": "SetCityName(bytes32)", +"7a5f973b": "INITIAL_SUBSIDY()", +"7a62b77c": "ShowChargeTime(address,uint256)", +"7a631201": "resetEvents()", +"7a63626c": "ownerIndexToERC20Balance(address,address)", +"7a63c290": "mintCapInTokens()", +"7a645975": "InexProject()", +"7a6506f6": "dividendsPayedIndex()", +"7a6543e2": "getRegistered()", +"7a654915": "BitcoinTRONIX()", +"7a657c53": "checkVotingForSendWeiFromPayment()", +"7a6615d4": "NewPAIReceipt(address)", +"7a66e5cf": "paySolutionReward(uint256,uint256)", +"7a67011f": "setMoneyline(int256,int256)", +"7a6838ec": "ownerBank()", +"7a690951": "_endBetListing(uint256)", +"7a6994dc": "getSpaceByIndex(uint256)", +"7a69e225": "settleMissedJackpot(bytes32)", +"7a6a00bb": "balanceEthOf(address)", +"7a6a18cf": "CrowdsaleMintFinished()", +"7a6ad926": "getUint(bytes32,bytes32)", +"7a6adab6": "getAdsLength()", +"7a6b1c7c": "authAccess()", +"7a6b2a2c": "lookupAmountUserDonatedToCampaign(address,uint256)", +"7a6b456f": "countShips(uint16,uint16,uint8,bytes32)", +"7a6b8361": "zeroBytes()", +"7a6ba98c": "getHashKey(address,uint256)", +"7a6c7783": "_consume(address,uint256)", +"7a6cb1aa": "getReceiverVesting(address,address)", +"7a6ce2e1": "getMsgSender()", +"7a6d6f3d": "gettormow()", +"7a6d8030": "BLOCKMALL()", +"7a6e1384": "priceForBuyingCostume()", +"7a6e2b49": "payService(bytes32,address,address,uint256)", +"7a6e5949": "getwithdrawEthertoAmountValue()", +"7a6e9df7": "getTimestamp(bytes)", +"7a6e9e41": "withdrawSellDemand(uint256)", +"7a6ee304": "IAMRefundedForWei(address,uint256)", +"7a706ac7": "setBuyRatio(uint256)", +"7a70abda": "updateAvatar(uint256,uint256)", +"7a71055d": "setAvgMinedPerDay(uint256)", +"7a713023": "finalizeSettingDeprecation(uint256)", +"7a71dee0": "onePotWei()", +"7a72416f": "security_address()", +"7a72c30d": "checkMilestoneStateInvestorVotedNoVotingEndedNo()", +"7a72c32f": "Paraboloid()", +"7a740a68": "communityReservation()", +"7a74b672": "clearEndpoint(bytes32,int256)", +"7a766210": "XYZA()", +"7a766460": "getStake(address)", +"7a773293": "setMarketingRates(uint8,uint8,uint8)", +"7a783d91": "Leeroy(address)", +"7a78cccc": "DAMIToken(address)", +"7a78ee2c": "lastBlock_a12Hash_uint256()", +"7a791524": "setNextFeePercentage(uint8)", +"7a792fa0": "get_reward(uint256)", +"7a79940d": "getSharedAccountPw(bytes32,bytes32)", +"7a7cdfa9": "createT(string,string,string,string,string,string,uint256,uint256)", +"7a7d4937": "secondsPerBlock()", +"7a7ebd7b": "channels(bytes32)", +"7a805504": "getAuditReportBlockNumber(uint256)", +"7a80760e": "ERC20Token()", +"7a81f972": "releaseCelebrity(uint256)", +"7a824b1d": "cooperativeSettle(uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"7a827634": "_emitContractAdded(address,address)", +"7a828b28": "terminate(uint256)", +"7a837213": "setAllowedAccount(address)", +"7a83e89e": "_endBetBlock()", +"7a840a52": "PKBCoin()", +"7a84d13e": "getNumberOfCandidates()", +"7a852c7e": "transferTokensWei(address,uint256)", +"7a8566ae": "richToken()", +"7a85c02a": "tokensOfEdition(uint256)", +"7a85e031": "finalizeInternal()", +"7a86d3d6": "addWithdrawTransaction(address,uint256,bytes)", +"7a872547": "defaultInput()", +"7a875ade": "fishPromoHelpers(address)", +"7a87f51a": "emergency_eth_withdraw()", +"7a888ca9": "startOptionsSelling()", +"7a88aabb": "getAddressOfTokenUsedAsReward()", +"7a899cdc": "_setPermission(address,address,bytes32,bytes32)", +"7a89d33e": "testdynamic_income(uint256,uint256)", +"7a8a5cf3": "totalMigratedIn()", +"7a8a8720": "firstUnitStartTime()", +"7a8b0114": "setA_ASM(uint256)", +"7a8b089b": "developerFundDeposit()", +"7a8bd25a": "get_bet_nfo(uint256)", +"7a8bd93e": "flipRewardAmount()", +"7a8df1b9": "getAffiliateInfo(address)", +"7a8e3d8d": "withdrawEth2Wallet(uint256)", +"7a8e832f": "MyBalance()", +"7a8f7be6": "HAYATO_EXTRACTION_BASE()", +"7a8fa666": "addPoweruser(address)", +"7a8fe3b1": "getProductBuyersWithUnconfirmedRequests(uint256)", +"7a9036cd": "registerFixedToken(bytes32,uint256,address)", +"7a906be0": "createAuction(uint256,uint128)", +"7a90a7a3": "feeBurnerWrapperContract()", +"7a9110d5": "klik()", +"7a91d5f9": "dilutePower(uint256,uint256)", +"7a91e53d": "isNotSelf(address,address)", +"7a926165": "manageAdmins(address,bool)", +"7a927429": "TokenValue(uint256,string,uint256)", +"7a935644": "I30Token()", +"7a93b917": "Lirux(string,string,uint256,string)", +"7a943538": "Victory()", +"7a954d5d": "investedInPreICO()", +"7a95e305": "escrowedForAsset(bytes32)", +"7a95f174": "CGT()", +"7a960154": "numOfPurchasedTokensOnCsBy(address)", +"7a9839c2": "fun(uint256)", +"7a99b018": "withdrawClient()", +"7a99ba4f": "investETH(address)", +"7a99bb0a": "_getTokenAmount(uint256)", +"7a9a032d": "addProposal(string,uint256,uint256,string,string)", +"7a9b0412": "setChainlinkOracle(address)", +"7a9b486d": "deposit(string,string)", +"7a9c960b": "DayDayToken(address)", +"7a9d366a": "debug_bool(bool)", +"7a9db28a": "_setPriceFactor(uint256)", +"7a9df8c0": "sellChickenParkCoin(uint256)", +"7a9e19de": "nextOffsetIndex()", +"7a9e5e4b": "setAuthority(address)", +"7a9ee2dc": "SogetiCoin()", +"7aa064ef": "intersubuser(address,uint256)", +"7aa0eb97": "LogSendTokens(address,uint256,string)", +"7aa11238": "Flow(uint256,string,string)", +"7aa1688e": "setUser(address,string,string,bool,bool,bool)", +"7aa1a77d": "rawWipeAttributes(bytes32,bytes32[])", +"7aa2096a": "setPI_edit_15(string)", +"7aa2bcd6": "bonusCompaignOpen()", +"7aa306a2": "numOwnerAddress()", +"7aa3295b": "trusted(address,address)", +"7aa356af": "phaseTwoRate()", +"7aa359f8": "changemem(uint256,bytes32)", +"7aa3803c": "takeRent(address)", +"7aa3976f": "DragonStone()", +"7aa3b39b": "_vest(address,uint256)", +"7aa3f6cb": "setKyberProxyAddress(address)", +"7aa3ff67": "AlterMediatorSettings(address,uint128)", +"7aa41ed5": "getNumPieces()", +"7aa50c56": "performDifferent(address,address[],uint256[])", +"7aa5a1a8": "set_eth_as_seeded()", +"7aa63a86": "getTotalElements()", +"7aa86e2f": "fetchProfit()", +"7aa98fb3": "timeLock(address,uint256,uint256)", +"7aa9a7f9": "getNumberThree()", +"7aaa3470": "getInterest(address)", +"7aaae78c": "preSaleBonus1Amount()", +"7aacd17d": "MyToken(string,string)", +"7aacf03c": "auctionIndex()", +"7aada63b": "maxEarlyStage()", +"7aae42c9": "endIcoPreICO()", +"7aaeb37c": "SimpleTGEContract()", +"7aaf334d": "offFreeze_Bounty(address)", +"7aaf58d7": "creatUserPurchase(address,address)", +"7aaf87d2": "getallresutl()", +"7ab0089e": "YiLiaoLian(uint256,string,string)", +"7ab03c25": "reserveTokensProjectAndFounders()", +"7ab0b998": "signRecoveryChange(address)", +"7ab13461": "decreasePrice(uint256)", +"7ab13ba9": "isProgress()", +"7ab14aae": "createBattle(address,uint256[],bytes32,uint256)", +"7ab21613": "getStopReceive()", +"7ab2af2b": "isRegistrationOpen()", +"7ab38e88": "issueTokensPresale(address,uint256)", +"7ab42bbd": "grantXPTokens(address,uint256)", +"7ab4e968": "oneEDG()", +"7ab528c9": "revokeDelegate(address,string,address)", +"7ab5e1e1": "reservedTokensFunctionality()", +"7ab61372": "totalRunePurchased()", +"7ab672c4": "GrabRedHarvest()", +"7ab7a9fa": "aurasCompatible(uint64,uint8)", +"7ab7ab2e": "AcceptsHalo3D(address)", +"7ab7d55b": "calculateHash(uint256,uint256,uint256,bool,bytes32)", +"7ab7e492": "RANGESTART_2()", +"7ab7fa9f": "UBEX()", +"7ab91b3a": "hash(uint64[8])", +"7ab96fda": "testBalanceCanbeWithdrawn()", +"7aba2249": "StoppableMock()", +"7aba4d23": "delToken()", +"7aba6f37": "setLock()", +"7aba86d2": "bonusMax()", +"7abaf552": "nexium()", +"7abb03bc": "noticeWinner(uint8)", +"7abbe9c0": "DEFAULT_GAME_COST()", +"7abc06aa": "tokensPerCents_gte50kUsd()", +"7abcc5bc": "bidInfo(string)", +"7abccac9": "getTokenMetaData(address)", +"7abdf949": "getUpgradePrice(uint256)", +"7abe24d4": "Firechain(uint256,string,string)", +"7abeb6a0": "createMarket(address,address,uint24)", +"7abec356": "Deposit(address,uint256,int256)", +"7abf75fd": "CFNDCrowdsale()", +"7ac02331": "ethMultisigWallet()", +"7ac07dcc": "isCaller(address)", +"7ac1cb30": "setbili(uint256,uint256)", +"7ac26aeb": "getTag(string,uint256)", +"7ac37d58": "ownerTransferEther(address,uint256)", +"7ac3c02f": "getSigner()", +"7ac40b10": "thedate()", +"7ac4b05e": "returnMyMoney(uint256)", +"7ac4ed64": "getAddress(address,bytes32)", +"7ac59d43": "getSellerSignature(string)", +"7ac5bb54": "getFlight(uint16,uint16)", +"7ac5d8a9": "RoundNumber()", +"7ac6e6a8": "objectHelmet()", +"7ac7ef85": "Msg()", +"7ac81da5": "useProps(uint256[],uint16[],uint16[])", +"7ac8dc26": "subFundPrecent()", +"7ac91cc2": "testFailOwnedAuth()", +"7ac94409": "sixthExtendedBonusSalesEnds()", +"7ac9f013": "removeVal(address,bytes32,address)", +"7aca84a1": "createVaultAccess(uint256)", +"7aca97b5": "changeDeadline(uint256)", +"7acb3e67": "EthTraderDAO(address,bytes32,address,address,address)", +"7acb4b0f": "isGroupInPolicy(bytes32,bytes32)", +"7acb7757": "stake(uint256,address)", +"7acbfb65": "setOwner(uint256,uint256)", +"7acc0b20": "products(uint256)", +"7acc6f74": "addSingleAddressToWhitelist(address)", +"7acc8678": "transferAdminQuickly(address)", +"7acd0412": "newInvest(address,uint256,uint256)", +"7ace341b": "getCurrentOwner(uint256)", +"7ace41f2": "CoinvestToken(uint256)", +"7ace58d8": "changeBranch(uint256,uint8)", +"7acee816": "claimIFactor2(bytes32,bytes32)", +"7acf16c3": "findLowestBenefactor()", +"7acf4892": "isNotPaused()", +"7ad00589": "getAffiliateSenderPosCode(uint256)", +"7ad06be3": "recycleAppearance(uint128[5],uint256)", +"7ad0bf86": "exchangeRegulatorWallet()", +"7ad1428d": "m_record(string)", +"7ad157b9": "buy(uint256,address,bool)", +"7ad226dc": "refund(uint256,address)", +"7ad2856f": "info(string,uint8)", +"7ad28c51": "changeTimeLock(uint256)", +"7ad2a0ce": "doAirDrop(address[],address,uint256,uint256)", +"7ad3c119": "ContractInfo()", +"7ad3def2": "updateToken(address)", +"7ad4b0a4": "setAttribute(address,bytes32,bytes,uint256)", +"7ad53eae": "sani()", +"7ad59e20": "end_Dec_21_2017()", +"7ad5a045": "_ReparameterizationProposal(address,string,uint256,bytes32)", +"7ad77fd9": "firstWeek()", +"7ad7e846": "robocoinToken()", +"7ad8800f": "ShowPrice(string)", +"7ad9642f": "changeMiniumBet(uint256)", +"7ad979a3": "setupFund(string,address,uint256,uint256,address,address,address,address[],address[],uint8,bytes32,bytes32)", +"7adaa3f8": "right39(uint256)", +"7adac0e6": "stopTransfers()", +"7adb7ced": "ekkoBlock(uint256,string,uint8,string)", +"7adbf973": "setOracle(address)", +"7adc22d8": "bujankkoin()", +"7add0106": "initBronze()", +"7addc766": "ADDR_MAYA_MARKETING()", +"7ade8d6a": "Totti(string,string,uint256,uint256)", +"7adec1c9": "DepositAcceptedEvent(address,uint256)", +"7adee0e3": "setJoinDelta(uint256)", +"7adfec71": "allTasksCount()", +"7adff2cb": "auth(uint8,bytes32,bytes32)", +"7ae046d5": "joinGame(uint256,address,string)", +"7ae0c915": "SmartBondsSale()", +"7ae11443": "getCurrentStakingPeriod()", +"7ae145cb": "Badge(uint256,string,uint8,string)", +"7ae15a19": "createKingdom(string,uint256,uint256,uint256,uint256)", +"7ae1cfca": "getBool(bytes32)", +"7ae26546": "setApprovedContractAddress(address,bool)", +"7ae26773": "revokeAllowance(address,address)", +"7ae2a331": "goldenTicketFound(address)", +"7ae2aa34": "teamVestingStage()", +"7ae2b5c7": "min(uint256,uint256)", +"7ae316d0": "getTotalFee()", +"7ae38a95": "isDestructionStarted()", +"7ae488c3": "priceOfPlayer(uint256)", +"7ae4bff8": "changeStage(uint256)", +"7ae506ac": "minimumPurchaseValue()", +"7ae5dfe5": "TTC(uint256,string,uint8,string)", +"7ae68ada": "getReferralCode()", +"7ae6b763": "updatePartner1_will(string)", +"7ae7024c": "_realBalanceOnToken(address)", +"7ae74432": "PhilToken()", +"7ae77ecf": "onlyBouncerCreateContract(bytes)", +"7ae79345": "ZeroChain()", +"7ae79e86": "crowdfundEndsAt()", +"7ae81801": "userUpgradeElement(uint256,uint256,uint256)", +"7ae8b321": "withdrawGNT(uint256)", +"7ae8c854": "getMaturity(bytes32)", +"7ae9c430": "getMinFunds()", +"7ae9c856": "getassignTokensperType(uint8)", +"7aeaa864": "storePhoto(string)", +"7aeabb39": "lastPaymentDate()", +"7aeb0763": "habichnet()", +"7aeb9500": "getAutoInvestStatus(address)", +"7aec05b6": "TemroyToken()", +"7aec2277": "ValueCyberToken()", +"7aece878": "receiveObject(uint256,address)", +"7aef1cdc": "airDropDestinations(address)", +"7aef1d4d": "setMinEther(uint256)", +"7aef2226": "MIKETANGOBRAVO18Crowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7aef951c": "bid(string)", +"7aefec13": "followTraderPreSignedHashing(address,address,bytes32,uint256,address,uint256)", +"7af05516": "claimRewardTillRound(uint64)", +"7af0ed7e": "NewStatic()", +"7af1337b": "updateCrystal(address)", +"7af20a0a": "LITECORE()", +"7af2a28e": "createContractElement(string,uint256)", +"7af30442": "testToggleBitFailIndexOOB()", +"7af327a0": "deposito()", +"7af3670c": "NewToken()", +"7af52ade": "collectEntryFee()", +"7af5878e": "safeSend(address,address)", +"7af5dc37": "safeSub(int256,int256)", +"7af85411": "DisableReturnFunds()", +"7af8b87d": "verificationRate()", +"7af8c4f2": "changeTokenSaleAddress(address)", +"7af91032": "getPoolDoneCount()", +"7af915af": "setResourcesBanker(address)", +"7afa0c66": "lockedMonsterStatsCount()", +"7afa1eed": "generator()", +"7afa8388": "transferFromWithReferenceCallGas()", +"7afbe4f1": "Add(uint256,uint256)", +"7afc84df": "NKHOIToken()", +"7afcb524": "foundersBalance()", +"7afd4762": "auctionPriceLimit()", +"7afde96b": "isInPreSale()", +"7afea44f": "kycManager()", +"7aff5061": "penalizeNode()", +"7afff425": "reclaimAllocated()", +"7b01127c": "getValue(bytes32,bytes32)", +"7b012ff6": "IcoCap()", +"7b015ff7": "crowd_start_date()", +"7b019f89": "squareRoot(uint256)", +"7b02347d": "distributeRef(uint256,uint256)", +"7b02b2c9": "sendMsg(address,string)", +"7b02b6de": "initialChargeFee(uint256)", +"7b02f6e1": "_vote(address,address,uint256)", +"7b0383b2": "initializeDispute(uint256)", +"7b039576": "setCreditStatus(bool)", +"7b039bb6": "createVariation(uint256,uint256)", +"7b03e5f0": "_getUint(address,bytes32)", +"7b0472f0": "stake(uint256,uint256)", +"7b04a2d0": "onApprovalReceived(address,uint256,bytes)", +"7b04b1f8": "prePaidFee()", +"7b053195": "testItems(bytes)", +"7b05d785": "redeemTokens(string)", +"7b069edb": "createNewGame(string,uint8,uint256[],uint256[])", +"7b06e907": "teamAddressOne()", +"7b07788e": "removePrecondition(uint256)", +"7b0862e1": "getLatestSettingId(uint256)", +"7b0863de": "beginClosingPeriod()", +"7b087636": "testToUint96()", +"7b088543": "setDollarForOneEtherRate(uint256)", +"7b0934ab": "KRTR()", +"7b0a2340": "issueBook(uint8)", +"7b0a3a8d": "maxRecords()", +"7b0a47ee": "rewardRate()", +"7b0a7bf8": "disableContactMint(address)", +"7b0b5b93": "MannaCoin(address,address)", +"7b0c15ff": "ApolloSeptemStarted()", +"7b0de015": "teamTokensAddress()", +"7b0f6f18": "executeArbitrage(address,uint256,address,bytes)", +"7b0f94ed": "advisoryEthWallet()", +"7b103999": "registry()", +"7b10a1d9": "changeInviteReward(uint256)", +"7b10b293": "requestMembership()", +"7b10e717": "received_wei()", +"7b1278e9": "setStageLength(uint256)", +"7b129c48": "TrueTHB()", +"7b12df39": "userProfits()", +"7b12e074": "getSiringWithId(uint256)", +"7b144a84": "testFunded(uint256)", +"7b146f6f": "contributorPoolAddr()", +"7b15013c": "JPPreICO()", +"7b151be0": "market_WithdrawWei()", +"7b169f8c": "refBonusOf(address)", +"7b16c028": "HumaniqICO(address,address,address)", +"7b16f7a0": "transferAll(uint256,address,address)", +"7b1707ee": "sendAliceBlue(address,uint16,uint256,bytes)", +"7b1760da": "computeCertHash(address,bytes32)", +"7b17e543": "user(uint32,uint32)", +"7b1837de": "fund(address,uint256)", +"7b19bbde": "fundValues(uint256)", +"7b1a4909": "transferETH(address,uint256)", +"7b1a547c": "registerAs(address,string,uint256,string,address)", +"7b1aa45f": "ownerDeposit()", +"7b1ae67a": "OrganicumOrders()", +"7b1b0c8a": "isWeekdayInsideTimestamps(uint256,uint256,uint256)", +"7b1b1de6": "pricePerToken()", +"7b1bc329": "bountySend(address,uint256)", +"7b1bd162": "NatureSeedToken()", +"7b1c5368": "fetchVoteMainInfoForVoter(address)", +"7b1c6c83": "MangGuoToken(string,string,uint8,uint256)", +"7b1c88be": "transferIncome(address,uint256)", +"7b1cbb13": "getChannelValue(bytes)", +"7b1cdd4f": "withdrawWallet3()", +"7b1e855a": "setBountyCoin(address)", +"7b1e8871": "_transferBilrew(address,address,uint256)", +"7b1f1f83": "SgdToWeiRateSet(uint256)", +"7b1f337d": "endingBlock()", +"7b23f37d": "ownerRandomNumber()", +"7b24343e": "salvageOtherTokensFromContract(address,address,uint256)", +"7b2454c2": "InvestmentAnalytics()", +"7b24d867": "TokensImport(address,uint256,uint256)", +"7b253fe6": "getWithdrawableAmountAS(address)", +"7b2581c2": "totalPurchase()", +"7b25aeca": "totalLimitUSD()", +"7b25de45": "isNewToken()", +"7b25ec58": "getTierTokens(uint8)", +"7b2643f2": "receiveNVT(uint256,uint256)", +"7b266b21": "durationh()", +"7b26de4b": "newPlayer(address,uint256,address)", +"7b26ff88": "JuryMemberAdded(string,address)", +"7b274afc": "stopIco()", +"7b27739c": "LSCKcoin()", +"7b283b71": "RATE_TIER1()", +"7b28aa4c": "orderCancel(address,uint256,address,uint256,uint256)", +"7b292909": "square(uint256)", +"7b294495": "lastActiveTs()", +"7b2abb34": "doProveMemoryRead(uint256,bytes32,bytes32[])", +"7b2b24e9": "isCurrentOrPastUser(address)", +"7b2bff9d": "getRobotsForUser(address)", +"7b2c5148": "catReleaseToPrice(uint32)", +"7b2c8905": "FailedToClaim(address,uint256)", +"7b2ca96c": "ProdPresale()", +"7b2d1b30": "getDragonPriceNo()", +"7b2d3b27": "getStageDiscount(uint8)", +"7b2e0046": "createAddress(bytes32,address)", +"7b2e5086": "withdrawFounderFunds()", +"7b2feaaa": "blockStart()", +"7b30074d": "trustedCancelOrderTransfer(address,address,uint256)", +"7b303965": "getStats(uint256)", +"7b304179": "createMainNetContract(uint256,uint256)", +"7b3051db": "get_minimum_trade()", +"7b30de25": "setConfig(string,string)", +"7b316db2": "enterBidForCollectible(uint256,uint256)", +"7b3179bc": "setEconomyParameters(uint128,uint128,uint128,uint128,uint128,uint128,uint128)", +"7b317ef6": "payoutPendingWithdrawl(uint256)", +"7b31db17": "intMax()", +"7b327104": "addBidToStack(bool)", +"7b32daf8": "contractTimeout()", +"7b3303b1": "startcrowdsale()", +"7b33e01a": "increaseApproval(address,uint256,bytes,string)", +"7b33fa25": "confirmReturn()", +"7b34203d": "getNumberOfDisputedStepsProPatient()", +"7b352962": "isFinished()", +"7b35819f": "setPresaleEndDate(uint32)", +"7b362143": "inactive_withdrawable()", +"7b36277e": "tier2Total()", +"7b367343": "IPv7Token()", +"7b370a01": "crowdsaleDistributedUnits()", +"7b37b6a3": "RAXToken()", +"7b38f391": "p1_white_duration()", +"7b3941d7": "Redeem(uint32)", +"7b395487": "voteForUltimateOutcome(bytes32,uint16)", +"7b3aa441": "contributeWithAddress(address)", +"7b3ae1f1": "addClaim(string)", +"7b3bfc35": "setRound(uint256,uint256,uint256,uint256,uint256,bool)", +"7b3c24ac": "compensate(uint256,address)", +"7b3ca1c6": "registerNameXname(string,bool)", +"7b3cf41a": "setExplosivePower(uint256,uint256)", +"7b3d398f": "getTicketHolderCount()", +"7b3d9338": "market_is_open()", +"7b3e2ce0": "BuyTicketUseVaultSeed(uint256)", +"7b3e5e7b": "amountRaised()", +"7b3ed808": "withdrawlOwner()", +"7b3f0fb7": "updateRevertSuspendedPayment(bool)", +"7b3fdcd8": "removeVerifier(address,address)", +"7b40b291": "RetractRoutingNS(bytes32,bytes32,uint256,bytes)", +"7b4126f4": "buyContent(bytes32,uint256,uint256,bytes8,string,address)", +"7b413985": "tokenValueInEther(uint256)", +"7b422184": "giveBirth(uint256,uint256)", +"7b424c0d": "changeRelease12m(address)", +"7b42f6f7": "intervalAt(uint256,uint256,int256,uint256)", +"7b436460": "Kubic()", +"7b436fa4": "garanteSystemDepositInOneFund()", +"7b43a8e6": "commits(address)", +"7b43adfb": "checkBalanceContract()", +"7b449206": "changeClearance(uint256,uint256,uint256,uint256,bool)", +"7b44eb51": "UPO(uint256,string,uint8,string)", +"7b464e93": "prescriptions(bytes32)", +"7b46b80b": "unfreeze(address,uint256)", +"7b473783": "EcoValueCoin()", +"7b47457f": "MintTokens(address,uint256)", +"7b47cb68": "lifeFactor_ii()", +"7b47ec1a": "burnToken(uint256)", +"7b48ba20": "testThrowDisownNotOwner()", +"7b48de6b": "returnTransactionPrices(uint256)", +"7b4938c3": "LinkNaturePower()", +"7b49e4c0": "DelphyToken(address[],uint256[])", +"7b4b5e4e": "changeYUMAddress(address,address)", +"7b4fcdcf": "GetAccess(address)", +"7b4fd96e": "token_price()", +"7b5005e8": "ZRXToken()", +"7b50a573": "functionOne(uint256,uint256,uint256,uint256)", +"7b510fe8": "getAccountInfo(address)", +"7b51c463": "hasDebris(bytes32,uint8)", +"7b523c35": "request(address,address,bytes,bytes,uint256,uint256)", +"7b5330a7": "getEntitlement()", +"7b540dd2": "ChangeHold(address,address,uint256,uint8)", +"7b54a994": "safeAdd(uint256,uint256,uint256,uint256)", +"7b550233": "deathData_v18()", +"7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", +"7b55f66e": "manualCloseBet(uint16,uint16)", +"7b563e3a": "hourPotLeader()", +"7b564b7f": "test_insert_updateTail()", +"7b568081": "trade(address[],uint256,uint256)", +"7b575b33": "operate(bytes)", +"7b58120f": "preSaleSecondStartDate()", +"7b5825d5": "get_amount_buy(uint256)", +"7b58d46e": "changeWikiID_Name(uint256,string)", +"7b58d7ee": "Jawn()", +"7b599b5b": "COOLBTCEXCHANGE()", +"7b59af16": "registerName(string,address)", +"7b5a08c5": "TradeList(uint256)", +"7b5bc2e4": "isVoted()", +"7b5bd741": "getIdentityWallet(address)", +"7b5bee1d": "_getItem(uint256)", +"7b5c7b7b": "privilegedTransfer(address,uint256)", +"7b5cc75d": "lastDividendTime()", +"7b5d2534": "semaphore()", +"7b5d5d1a": "halvingStartBlock(uint256)", +"7b5e400d": "recipientsMap(bytes32)", +"7b5eb564": "approveWithData(address,uint256,bytes)", +"7b5ecb32": "test_twoValidEqUint2()", +"7b5f4fc9": "get_all_attender()", +"7b5f7267": "getTokenPriceUSDWEI()", +"7b61b201": "getHouseCard(uint8)", +"7b61c320": "tokenSymbol()", +"7b627879": "Conference()", +"7b632c41": "TimestampScheduler(address,address)", +"7b641fbc": "getMembers(bytes32)", +"7b647652": "LittleEthereumDoubler()", +"7b647d72": "BITIC()", +"7b65d0ec": "initialBuyCard(uint8,string,string,string)", +"7b663d30": "ChangeClaimAmount(uint256)", +"7b66c032": "HashBuxICO()", +"7b66da95": "calLast5RoundProfit(uint256)", +"7b66e17f": "getDonator(uint256)", +"7b6750bf": "getTokenDelegate(uint256)", +"7b680deb": "SpiceUpPrizePool(address,uint256,string,uint256)", +"7b68533f": "earlybird_percentage()", +"7b68a8f0": "getPixelColor(uint256)", +"7b698602": "NEXMESH()", +"7b69db5c": "increment(int256,int256)", +"7b6a3e27": "out2Done()", +"7b6a6f4a": "roundUp(uint256)", +"7b6a912c": "etherCost()", +"7b6ae58f": "AMICoin()", +"7b6b3f46": "preMining()", +"7b6c0492": "allowanceSubId(address,uint256,uint256)", +"7b6c4b27": "BidRevealed(bytes32,address,uint256,uint8)", +"7b6c4dc7": "AgriChainProductionContract()", +"7b6c7a14": "transferAuthorship(address,bytes32)", +"7b6ccf85": "LogRefund(bytes32,address,uint256)", +"7b6d79f1": "cancelBet()", +"7b6d7a4a": "VoteIntentionSet(uint256,bool,bool)", +"7b6e49a8": "fetchVoteNumForVoterByIndex(uint256,address)", +"7b6e7603": "levelClearTime()", +"7b6e8740": "changeCATDestinationAddress(address)", +"7b6f5a4c": "getCurrentRoundMinimumTime()", +"7b6ff689": "setImmediateAllowancePercentage(uint8)", +"7b70209f": "isBeneficiary()", +"7b7054c8": "__approve(address,uint256,address)", +"7b707e9c": "getNumberOfCreatedTokens()", +"7b70cdcd": "dayFor(uint256,uint256)", +"7b70ed51": "setAngelDate(uint256)", +"7b71aec8": "ethPropagate()", +"7b7330cc": "return_eth()", +"7b73aef8": "setNote(bytes32,bytes32)", +"7b73c2ef": "defaultDeadline()", +"7b74644d": "WKToken()", +"7b74e5c3": "buyByAddress(uint256,uint256)", +"7b755373": "amountPercentage(uint256,uint256)", +"7b75a302": "MatContract()", +"7b75ea7b": "rewardPayableDays()", +"7b760537": "updateLatestRevision(bytes20,bytes32)", +"7b7670f6": "gasForXaurDataUpdateAtBlock()", +"7b76ac91": "day()", +"7b775ec3": "wallet89()", +"7b777517": "teamVestingStages()", +"7b777ecc": "getMaxReportsPerLimitedReporterMarket()", +"7b77bbc8": "dyn_call(address,bytes)", +"7b789b3d": "agreement(bytes,bytes,bytes)", +"7b7a43eb": "setMINfinney(uint256)", +"7b7a720a": "chrissycoinToken()", +"7b7b81c5": "loikikdi()", +"7b7c343d": "setRequiredConfirmations(uint256)", +"7b7ccc66": "burnSaleTokens()", +"7b7d4655": "releaseTokenCornerstone()", +"7b7d6c68": "setController(address,address)", +"7b7d7225": "_approve(address,uint256)", +"7b7d8888": "permanentlyOwnMyCompany(bytes32)", +"7b7e97f1": "isIncluded(uint256,uint256)", +"7b807a51": "devTimeLock()", +"7b80889b": "lockedBalance()", +"7b80a0ca": "endEarlyStage2()", +"7b8108c6": "isIn(address,address[])", +"7b813089": "team4Token()", +"7b816719": "testToInt(bytes)", +"7b81c3cd": "claimIcoContribution(address)", +"7b8208b7": "destroyUselessContract()", +"7b821410": "createPlotVineyard(address)", +"7b8239fa": "fun3()", +"7b82d9ee": "canDouble(address)", +"7b830854": "unlockTokenTransfers()", +"7b831c30": "isRoundEnded(uint256)", +"7b834bcc": "marketTime()", +"7b841eff": "turnOffCanUpdatePercentToTakeAsSeed()", +"7b84de4e": "StarFishCoin()", +"7b851f65": "hasIcoEnded()", +"7b86120a": "foundersReserve()", +"7b865061": "CAPToken(address)", +"7b87312a": "timeToOpenPresents()", +"7b875aab": "addrSale()", +"7b891cf7": "YBCLiveToken()", +"7b898c71": "_checkLoanBalance()", +"7b89a582": "Management()", +"7b89eef2": "getMyAverageDividendRate()", +"7b8a1898": "setStore(string)", +"7b8ac66b": "deliver(uint256,uint256)", +"7b8b7364": "isAddressVerified(address,address)", +"7b8b82a8": "createManyProxies(uint256,address,bytes)", +"7b8bf4fd": "set_fee(uint256,uint256,uint256)", +"7b8c0e0f": "offlineExchange(address,uint256)", +"7b8cfbe1": "howManyEtherInWeiToKillContract()", +"7b8d56e3": "setValue(uint256,uint256)", +"7b8d771e": "_buyTicket(uint256,address)", +"7b8d9930": "AxieDependency()", +"7b8de6d0": "executeTokenFallback(address,uint256,bytes)", +"7b8e3514": "allowedValidators(address,address)", +"7b8e7964": "JPGToken()", +"7b8e8bdd": "modifyCloseTime(uint256)", +"7b8eeb96": "StarMarket()", +"7b8f186e": "updateIdx()", +"7b8f2e07": "addCreature(uint16,uint8,uint8)", +"7b8fa867": "setAllowedAdd(address)", +"7b8fac4f": "AC(uint256,string,string)", +"7b907094": "solidityCompileVersion()", +"7b926c2a": "IFSBalances(address)", +"7b929c27": "development()", +"7b92a2de": "Reservation(address)", +"7b93253c": "validateClaim(address,bytes32)", +"7b9358a0": "changeRegistrationStatuses(address[],bool)", +"7b936934": "artistFees()", +"7b936ac2": "getCFO()", +"7b9417c8": "addAddressToWhitelist(address)", +"7b94ffb5": "grantBounty(address,uint16,string)", +"7b9504d5": "_isOwner(address,uint40)", +"7b965785": "EVER()", +"7b969dcd": "_checkPixelAboveLeft(uint256)", +"7b97008d": "purchaseTokens(uint256)", +"7b979b41": "leakEther()", +"7b97c621": "Transferred(bytes32,address,address)", +"7b9884b9": "addallrunmoney(address[],uint256[])", +"7b991c1a": "findEmptySlot(uint32)", +"7b9940b6": "initambassadors_()", +"7b9a3f4c": "TotalFunds()", +"7b9a9926": "RESToken()", +"7b9b9c89": "augmintToken()", +"7b9c34e0": "requestRN(uint256)", +"7b9c4756": "SanchitToken()", +"7b9c5794": "test_YayIsOverSixtyPercent()", +"7b9c7437": "LUCToken(uint256)", +"7b9daba8": "wa()", +"7b9dbf95": "FulfillmentAccepted(uint256,address,uint256)", +"7b9dc066": "tokenTransfersFrozen()", +"7b9e5bec": "getAsBytes(uint256,uint256)", +"7b9e9073": "buyLimitSupplyMin()", +"7b9f87d3": "Setup(address,address)", +"7b9fa595": "_getCrowdsaleTokenAmount(uint256)", +"7ba016d0": "icoDiscountLevel2()", +"7ba04809": "assertFalse(bool,string)", +"7ba0e2e7": "mint(bytes)", +"7ba121ff": "EventBonusPercentChanged(uint256,uint256)", +"7ba1e407": "tokenBack(address[],uint256[])", +"7ba201c5": "refundSingleUser(address)", +"7ba22e1e": "changeWorkerBalance(address,uint256)", +"7ba36880": "_secondLevelEth()", +"7ba38916": "changeAdminFromBoard(address)", +"7ba3c804": "AiEXToken()", +"7ba3f08d": "grantPermissionTo(address)", +"7ba46004": "totalRuneWithdrawn()", +"7ba49b81": "lastMintedTimestamp(address)", +"7ba4a58a": "addressToken()", +"7ba5f145": "mod256(uint256,uint256)", +"7ba64e40": "removeBeneficiary(address,uint256)", +"7ba70bf2": "gettoken(address)", +"7ba79848": "processReferral(address,uint256,uint256)", +"7ba7acc9": "initTokenSale(address,address,uint256,uint256,uint256,uint256,uint256)", +"7ba7dcea": "setRefundable()", +"7ba8c064": "VotedEvent(uint256,address,bool,uint256,string)", +"7ba8c12d": "addWhitelistUser(address,uint256)", +"7ba992fc": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool,address)", +"7baa4524": "emptyRemainingsToOwners()", +"7baa73c6": "_updateCreditedPoints(address)", +"7bab59f4": "feedTransfer(address,address,uint256)", +"7babf021": "RLCOIN(uint256,string,string,bool)", +"7babfffc": "transferDelegation(address)", +"7bacd526": "withdraw_admin(uint256)", +"7bacfb0c": "PresaleEndTimeChanged(uint256)", +"7badc7af": "gaveVote(address)", +"7bae0585": "approveMany(address[],uint256[])", +"7bae3f27": "changeTransferFeeOwner(address)", +"7bae50e0": "mintGen0Spinners()", +"7baf5b84": "startUnlock()", +"7baf71f9": "claimPrizePool(address,uint256)", +"7bb050cf": "migratePlayerPhrasesData(uint256,uint256,uint256)", +"7bb0688d": "claimedUsers()", +"7bb0aefe": "hasAuthoritySignedMainToSide(address,address,uint256,bytes32)", +"7bb0b3c6": "checkifCapHasReached()", +"7bb1a312": "transferToTeam(address,uint256)", +"7bb1efa1": "manualInitializeTreasure(uint256)", +"7bb20df6": "isExistingBattle(string)", +"7bb25d60": "withdrawInProgress()", +"7bb26a1b": "ethFoundDeposit()", +"7bb305ef": "set_foundtion_addr(address)", +"7bb31dbb": "calcBetResult(uint256,bytes32)", +"7bb333d6": "EBankerICO(address)", +"7bb34a23": "bva(address,uint256,uint256,address)", +"7bb3546b": "hgs()", +"7bb3ca86": "addReferralHashrate(address,uint256)", +"7bb43e6e": "returnUnsoldSafeXLarge()", +"7bb4493c": "FBI()", +"7bb476f5": "getAvailableAmount()", +"7bb4c4da": "nAuditorsAlarm()", +"7bb55287": "assignRaffleWinner(address)", +"7bb5e1d1": "Cowboy()", +"7bb6a4c6": "uno(uint256)", +"7bb6fc6b": "LoveToken(uint256,string,uint8,string)", +"7bb7adb6": "hugeContributionBound()", +"7bb866c1": "GetBoosterCount()", +"7bb8c4e5": "setCut(uint16)", +"7bb96acb": "getBlockHeight()", +"7bb98a68": "balances()", +"7bb9c776": "ticket(bool)", +"7bb9dc13": "setPublicSaleWallet(address)", +"7bba0613": "attackCountry(uint8)", +"7bbb3a60": "inactivityTimeout()", +"7bbba97e": "CreateEstate(address)", +"7bbbd75b": "_getNow0()", +"7bbbe9fd": "claimGameReward(address,uint256,uint256)", +"7bbc101b": "distributionStart()", +"7bbc33f0": "vet(address,bool)", +"7bbc5c01": "calcRefund(address)", +"7bbc816e": "UTCToken(uint256,string,string,uint256)", +"7bbd3f19": "removeLastRace()", +"7bbf2300": "claimAccountOwnership(string,string,uint256,uint256)", +"7bbf4a3f": "callers(address)", +"7bbfb0bd": "startTokenPriceWei()", +"7bbfbaee": "MAX_SUPPLY_USPN()", +"7bc046ef": "ClaimRemoved(address,address,bytes32,uint256)", +"7bc0e005": "setDirectDebit(bool)", +"7bc0ff20": "setupExportFee(address,uint256)", +"7bc120c2": "isView()", +"7bc14a67": "Initial_Supply()", +"7bc21b6b": "bbAdvisorWallet()", +"7bc25372": "UserCheckBalance(address)", +"7bc25da8": "Alaves()", +"7bc363f9": "serviceTransferOwnership(address)", +"7bc36e04": "setPrivateSalePrice(uint256)", +"7bc49a95": "play(uint256,uint256)", +"7bc4be40": "isGlobalLock()", +"7bc4d6a6": "testInitial1of3()", +"7bc58805": "balanceFinney()", +"7bc5af10": "getAwarding(address,bytes32)", +"7bc62dc3": "ALD()", +"7bc69bbc": "getBonusByRaised()", +"7bc6a02e": "isAutoridadElectoral()", +"7bc6aa07": "omniTeamAddress()", +"7bc74225": "getTotalStake()", +"7bc76388": "test_set_owner()", +"7bc775db": "GxOwned(address)", +"7bc835da": "UpdateConfirmed(address,address,uint256)", +"7bc8649f": "NewTKLNToken(address)", +"7bc89ae7": "registerNameXNAME(string,address)", +"7bc9165b": "offchainPayment(address)", +"7bc94872": "FinishReceivingContributions()", +"7bc9d4ba": "TielseEendrachtCombinatie()", +"7bc9eb8c": "p_setSoft_deadline_duration(uint256)", +"7bca38be": "heartbeatTimeout()", +"7bcaf585": "checkSignature(string,uint32,string,string,bytes32,bytes32,uint8)", +"7bcc1ff6": "allowanceInternal(address,address)", +"7bcc9c6f": "sendBackTokens()", +"7bcd7fad": "getRecordAtIndex(uint256)", +"7bcdc2f0": "_forwardApprove(address,uint256,address)", +"7bcdfd4f": "setEpochData(uint64,uint64,uint256)", +"7bce366f": "minBlockPurchase()", +"7bce89cc": "currentMarketRate()", +"7bd13f08": "recoverAddressFromBalanceProof(uint256,bytes32,uint256,bytes32,bytes)", +"7bd1a731": "deleteIdentity(string,string)", +"7bd216c6": "teamAddressThree()", +"7bd2593d": "XfiniteUtility()", +"7bd26969": "ChannelNew(address,address,address,uint256)", +"7bd2bea7": "gem()", +"7bd352b7": "relay(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32,uint8,uint128)", +"7bd379b3": "PaymentProcessed(address,uint256,uint256)", +"7bd3acbb": "pointArrayOf(uint256)", +"7bd53618": "TaiyuanCoin()", +"7bd63411": "defaultPercent()", +"7bd6c0e4": "setMigrationHost(address)", +"7bd703e8": "getBalanceInEth(address)", +"7bd7c0ac": "armyDronesCount(uint256)", +"7bd7c891": "becomeFalconmaster()", +"7bd85cb3": "LZLTokenDeposit()", +"7bd95a85": "rewardPoints(address)", +"7bd97ca7": "editMemeTemplate(uint256,string)", +"7bd9e8fd": "CTO_SHARE()", +"7bd9f47a": "Best_Bank_with_Interest()", +"7bdb7a90": "setCdRate(uint256)", +"7bdbab0c": "tokenMintInit()", +"7bdc011e": "Pray4Prey()", +"7bdc297c": "TimeLockedWallet(address,address,uint256)", +"7bdc60d9": "getTokenById(uint256)", +"7bde5628": "addNuja(address)", +"7bde7fcf": "maxApenSell()", +"7bde82f2": "redeem(uint256,address)", +"7bdef3f8": "gameMiningTokenCap()", +"7bdf9d56": "MANHATTANPROXY5THST()", +"7be00510": "lastInvest(address)", +"7be122a3": "isSchoolAllowed(uint256)", +"7be1e747": "initAddress()", +"7be266da": "isRegisteredInPreviousEpoch(address)", +"7be296d8": "filmamount()", +"7be2d5a2": "setDropNumber(uint8)", +"7be33b36": "getSoundcoinsAddress()", +"7be34109": "diffMonths(uint256,uint256)", +"7be4ce4b": "updateRngAddress(address)", +"7be4ed55": "fixPayAmt()", +"7be5b5ae": "setBuyDirectMode(bool,address)", +"7be68454": "optionsRegistryAddress()", +"7be6d2de": "transferToContract(address,uint256,bytes,bool)", +"7be80b39": "forceWithdraw()", +"7be8352e": "getPixelCount()", +"7be8630f": "lastHotPotatoHolder()", +"7be8f86b": "done(address)", +"7be96b1a": "AAA(address,uint256)", +"7bea7112": "TheOneToken()", +"7beb2e1e": "minNumbPerSubscr()", +"7beccd70": "revokeTransferManager(address)", +"7becd54a": "destErc20()", +"7bedcb7f": "DemirPara()", +"7bee30ce": "createSspAndChannels(address,uint256,string,address[],address[],uint256[],address,string,bytes,uint32[])", +"7bee86d6": "lastImageId()", +"7beeb945": "isRole(address)", +"7bef29f7": "BittechToken()", +"7bf08621": "payTo(address,uint256)", +"7bf0a8f3": "operationsTokens()", +"7bf0cd0d": "getTargetBlock(uint256)", +"7bf0e054": "getLotteryDetailsB(int256)", +"7bf1648a": "setContract(uint256,address,address)", +"7bf1a627": "ethToken()", +"7bf1ca1f": "TransferToken(address[],uint256,uint256)", +"7bf212f8": "getCondition(uint256)", +"7bf21aa4": "generatePresaleHouses()", +"7bf21ab8": "sellPBTTAgainstEther(uint256)", +"7bf26182": "calculateVestedTokens(bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"7bf2bb10": "arbiters(address)", +"7bf3f900": "gameManagerPrimary()", +"7bf437e6": "transferCoinUserToUser(address,address,uint256)", +"7bf47cda": "cancelSellOrder(address,uint256,uint256,uint256,uint256)", +"7bf4b18f": "tokenSetMintFeeAbs(address,address,uint256)", +"7bf57ca8": "_taxesDue(address)", +"7bf5b04b": "processDividends()", +"7bf5b5d6": "distributeWalletTokens()", +"7bf6f26e": "setMaintenanceMode(bool)", +"7bf796dc": "SmartAgreement(bytes,address[])", +"7bf92690": "changeArrangerFee(uint256)", +"7bf992ac": "GoodKarma(uint256,string,uint8,string)", +"7bf9d052": "firstRankForFree()", +"7bfa6e1a": "gameShouldRestart()", +"7bfaad96": "addNode(bytes,address)", +"7bfb0934": "value(bytes32)", +"7bfbe091": "creatorRejectRequestFundTransfer(uint256)", +"7bfbfecb": "BurnCoin()", +"7bfe950c": "withdraw(address,address,uint256,uint256)", +"7bfe97ce": "IBMISOFT()", +"7bff0a01": "createRandomZombie(string)", +"7bff9797": "canTeamKeepingWithdraw(uint256)", +"7c0012d4": "ZiipToken()", +"7c0081f5": "petCardSeriesCollection(uint8)", +"7c0176df": "starUp(uint256,uint256,uint256,uint256)", +"7c0207cb": "isActiveTranscoder(address,uint256)", +"7c024fe2": "getNowTimestamp()", +"7c027ed9": "bonus01Start()", +"7c02e1ea": "addressChangeBlock()", +"7c03d6f9": "ApprovalFlower(address,address,uint256)", +"7c051d47": "seedSaleFinished()", +"7c052478": "setSports3DContract(address)", +"7c05ba7a": "accreditInvestor(address,address)", +"7c05caf3": "testCreateCostAuth()", +"7c0656ac": "LogEtherBounty(address,uint256,string)", +"7c06db04": "doManualTrade(address,address,uint256)", +"7c06eb7c": "IGTRMB()", +"7c0712ae": "setAdd(bytes32,address)", +"7c07329f": "returnUserBalance(address,address[2],uint256[8],uint8,bytes32[2])", +"7c078723": "saleExchangeRate4()", +"7c08ab5b": "BITToken()", +"7c098bc3": "getBonusPercent(uint256)", +"7c0a893d": "blockAccount(address)", +"7c0ab7be": "setBidding(uint40,uint256)", +"7c0b2484": "enableInviteOfSU(string)", +"7c0b582f": "WORLD1Coin()", +"7c0b8de2": "NFT()", +"7c0c19b3": "zrcoin(uint256,string,uint8,string)", +"7c0cc0be": "setActivator(address)", +"7c0d021e": "CreateIssue(uint256,uint256,uint256,address)", +"7c0e2a5a": "SetLockDate(uint256)", +"7c0efb8b": "revokeManagerPermission(address,string)", +"7c0f6b35": "getAllMembers()", +"7c0f884b": "SlidebitsTestToken(string,string)", +"7c0fbc31": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes,address)", +"7c0ff00c": "WithdrawTokensToBankroll(uint256)", +"7c1008d5": "getLastTipTime(address,bytes32)", +"7c108f84": "UBToken()", +"7c10e00e": "setMinBetForOraclize(uint256)", +"7c116ec9": "respectRequiredToRecruit()", +"7c11ef87": "calcUSE(uint256,uint256,uint256)", +"7c1288b5": "distAgent()", +"7c129c1c": "voteXId(uint256,bool)", +"7c12b6f2": "_handleWin(uint256,uint256)", +"7c12f1a4": "addgamecard(string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"7c132f2c": "crossForkBlockNumber()", +"7c134a38": "DetailedERC20()", +"7c13b331": "OysterShell()", +"7c13ed68": "setIPGInfo(address,address)", +"7c153534": "tokenFrom()", +"7c157d12": "_synthesizeWith(uint256,uint256)", +"7c1595f2": "setLockupContract(address)", +"7c161409": "BetexToken(uint256,uint256)", +"7c163fb8": "myLoveBlocks()", +"7c170237": "ElectroneumGold()", +"7c1716af": "payToken(bytes32,uint256,address,bytes)", +"7c17357d": "totalVesting()", +"7c17dc02": "AddFish()", +"7c183b4b": "LogRef(address,address)", +"7c18a32f": "deductionToken(address,uint256)", +"7c194295": "BurnableTokenMock(address,uint256)", +"7c197c09": "fullSupplyUnlocked()", +"7c19e1f0": "replaceInFrontRequest(address,uint256)", +"7c1a35d7": "RECYCLE_TIME()", +"7c1a4ee8": "SITExchanger(address,address,address)", +"7c1b6afe": "getGrantCount()", +"7c1b814f": "openCrowdFunding(bool,uint256,uint256)", +"7c1c05dd": "gapInPrimaryCrowdsaleAndSecondaryCrowdsale()", +"7c1c7860": "TMEDsalesToken()", +"7c1e5ced": "transferTemp(address,uint256)", +"7c1f9d5e": "tokenFeeMin()", +"7c204c27": "MinerX()", +"7c21ae12": "activeShareholdersArrayLength()", +"7c21c7e2": "getToggleOwner(uint256)", +"7c22232a": "playersPoints(address)", +"7c236c3b": "confirmStackholderTransaction(uint256)", +"7c23d1cb": "removeLevel(uint256)", +"7c2464f3": "startICOTime()", +"7c24b295": "votedYes()", +"7c24dfb0": "FundTransfer(address,string,uint256)", +"7c25d997": "getRarityValue(uint256)", +"7c25f260": "Government()", +"7c261929": "query(string)", +"7c262269": "isWorkFailState()", +"7c265200": "NameGame(uint256,uint256,uint256)", +"7c267b07": "Cryptrust()", +"7c280f44": "generate_random(uint256,string)", +"7c28ddc1": "fiatPerAssetUnit()", +"7c2926a8": "getHTLCHash(uint256,uint256,uint256,bytes32,int256)", +"7c29c514": "AgroeconomyToken()", +"7c29e89a": "mintUnlockTimeBatch(address[],uint256[],uint256)", +"7c2b00fc": "SGCL()", +"7c2b07e3": "EtherX()", +"7c2b11cd": "arraySum(uint256[])", +"7c2b606a": "isAddressManager(address)", +"7c2b8d0a": "votedFreeze(address)", +"7c2cf543": "ROLCToken()", +"7c2d2326": "PostIL()", +"7c2d86f7": "usePluginWhitelist()", +"7c2da7aa": "setValue(string,uint256)", +"7c2db5ff": "payoutX(address,uint256)", +"7c2e08a3": "isMinimumGoalReached()", +"7c2eb1c8": "distributeEther(uint256,uint256)", +"7c2efcba": "v()", +"7c2ffbb3": "returnRate()", +"7c3064f1": "refundStake()", +"7c313baa": "buyPriceAtIndex(uint256)", +"7c31975f": "SolClub()", +"7c320853": "initialSale()", +"7c331b52": "FlightDelayAddressResolver()", +"7c337086": "CryptoDegree()", +"7c33774d": "CluckCoin()", +"7c3382ae": "setIcoTokenExchangeRate(uint256)", +"7c33ebfd": "transferToMany(address[],uint256[])", +"7c34689b": "ACchainToken()", +"7c34752f": "stringToSig(string)", +"7c34e853": "getCombinedTotalHP(uint256,int256)", +"7c35384f": "addTradeRecord(uint256,uint256,uint256,uint256,address,address)", +"7c359dc3": "manualTokenTransfer(address,uint256)", +"7c35b6ed": "setPriceBeforeGoalReached(uint256)", +"7c35be7a": "isOpen(bytes32)", +"7c360d1e": "calculate(uint16,uint8)", +"7c3625e3": "SatoExchange()", +"7c366cb5": "LADToken()", +"7c372277": "ReserveTokensHolder(address,address,address)", +"7c37559e": "CreateGLX(address,uint256)", +"7c37605c": "startSellingGenes(uint256,uint256,address)", +"7c377d74": "getForkReputationGoal()", +"7c38ce18": "tokensIssuedLocked()", +"7c38ee53": "addContactRecord(string,string,string,address,string,string,int256,string,int256,address,string,int256)", +"7c396b83": "f6()", +"7c39759b": "kscBurnWhenMoveToMainnet(address,uint256,string)", +"7c399142": "ITSToken()", +"7c3a00fd": "interestRate()", +"7c3a1d32": "setWithdrawCreator(address)", +"7c3aef0e": "cardDescription(uint8)", +"7c3b1e06": "setcompany(string,uint256,string)", +"7c3ba89e": "early_bird_minimal()", +"7c3be5fb": "setVernamOriginalToken(address)", +"7c3bf42d": "applications(address)", +"7c3c0f89": "eastadsCredits()", +"7c3c2611": "Retained(address)", +"7c3c4c83": "ARBITRAGECrowdsale(address,address)", +"7c3d30fd": "_bid(uint256,uint256)", +"7c3e50ff": "balanceLocked(address,address)", +"7c3eef61": "AbyssToken(address,address[],address)", +"7c3fe278": "endSto()", +"7c3ffdee": "awardCup(uint8)", +"7c405325": "unlockTokens(uint256)", +"7c4057ae": "removeMasterNodes(address,uint256)", +"7c41de34": "_AwardedMissedBlockBonus(address,address,uint256,bytes32,uint256,uint256)", +"7c423f54": "getAlerters()", +"7c4338af": "getEarlyIncomeBalance(address)", +"7c434fbb": "AT(uint256,string,uint8,string)", +"7c435e6f": "updateEursPerEth(uint256)", +"7c436a6d": "ownerEnableRefunds()", +"7c437918": "addPreSaleBuyer(address,uint256)", +"7c44066c": "summCashwolf()", +"7c44546e": "SiliconValleyToken()", +"7c44f160": "Tier_Starter_Registration()", +"7c45c98a": "removeSpectatorBetFromGladiatorBattle(uint256)", +"7c45ef6c": "stringToSig(string,string)", +"7c46a5e7": "Unhalted()", +"7c4734f4": "getParticipantsHash(address,address)", +"7c475ade": "IOV()", +"7c479343": "investSum()", +"7c47965e": "isInCurrentGeneration()", +"7c47ac44": "getProjectVerification(uint256)", +"7c47df2f": "removeEligibleBurner(address)", +"7c48bbda": "tokensIssued()", +"7c48f8e7": "penaltyFraction()", +"7c4a0552": "freezeBlocks()", +"7c4a7831": "concludeSeason(int8,uint256,uint256)", +"7c4aa44c": "saleStartEpoch()", +"7c4b414d": "depositTokens()", +"7c4c27c8": "isThisPuritanicalVersion()", +"7c4cafd9": "startSecondaryCrowdsale(uint256)", +"7c4d18bd": "setMockBool(bytes4,bool)", +"7c4d972b": "setRoundEnd(uint256,uint256)", +"7c4db77d": "saleWallet()", +"7c4deecb": "checkGameContinues()", +"7c4e7fbb": "QKL()", +"7c4ecead": "startPresale(uint256,uint256)", +"7c4edde7": "withdrawFrom(address,address,address[])", +"7c4f8958": "SPECIALIST_STAKE_ONE()", +"7c513a21": "arrIdx2lost(uint256)", +"7c519ffb": "setTrading()", +"7c524b2e": "set_sell(bool)", +"7c52b934": "getTokenOrder(uint256)", +"7c535f1f": "bonusAmount(uint256,address)", +"7c54aa1a": "deployCommunityBallot(bytes32,bytes32,uint128)", +"7c559d5f": "bonusPattern(uint256)", +"7c567bfe": "isSale(address)", +"7c56b798": "addProject(address)", +"7c56d40b": "LogFunderInitialized(address,address,string,uint256)", +"7c57ad45": "newAsset(string,uint256,string,string)", +"7c57d947": "tokenMinter(uint256)", +"7c5817e1": "indexOfProvider(address)", +"7c582304": "updateInvestmentTotal(address,uint256)", +"7c58a4ed": "canPlatformFundingWithdraw(uint256)", +"7c59cb3d": "setCSInterface(address)", +"7c59f828": "getWizzType(uint256[2])", +"7c5b4a37": "adminWithdraw(uint256)", +"7c5b5b06": "lastProcessedVaultId()", +"7c5bfe81": "INITIAL_EXCHANGEABLE_TOKENS_VOLUME()", +"7c5c2cef": "nPolls()", +"7c5ca5a6": "ICOFY()", +"7c5d4949": "calcInvesting(address)", +"7c5d7980": "addRC(address)", +"7c5df29b": "auctionDeklaEnd(address,uint256,uint256,bytes)", +"7c5e16fd": "MAX_ALLOWED_BY_STAGE_2()", +"7c5e2795": "INITIAL_PRICE()", +"7c5e6949": "setlvlUpdate(string)", +"7c5e83cc": "Bullex()", +"7c609885": "allowWorkersToContribute(address,address[],address)", +"7c60fa60": "minReq()", +"7c612409": "setClient(address,address,string,string,string)", +"7c61b482": "coinAgeRecordForAddress(address,address,uint256)", +"7c61d567": "transferRegion(uint256,uint256,address)", +"7c622a65": "TEBT()", +"7c623ce2": "boughtWithWhitelist()", +"7c62965e": "excess_withdraw()", +"7c62e2a4": "getDog(uint256)", +"7c63144e": "TokenUsed(uint8,uint8)", +"7c645c21": "getPlayerLength()", +"7c64a45c": "TOTAL_VOTE_PERIOD()", +"7c64ac43": "vestingEnds()", +"7c652e26": "CENT_DECIMALS()", +"7c654303": "isFunded()", +"7c65452c": "newValue()", +"7c65f503": "initVault()", +"7c66ae22": "play(uint256,uint256,address)", +"7c674695": "MarkedAsScam(address,address,uint256)", +"7c67fb9f": "MIN_STARTING_PRICE()", +"7c67fdf5": "bltOwnedAcc()", +"7c67ffe7": "ownerSetBankroll(address)", +"7c686c15": "setBonusPrice()", +"7c68bebe": "getUserDepositsAmount(address)", +"7c68e078": "_createMonster(uint256,uint256,uint256,uint256,uint256,bytes,address)", +"7c68ec4c": "_compareStrings(string,string)", +"7c695384": "bet(uint8,uint256)", +"7c699401": "getAllRevisionIpfsHashes(bytes32)", +"7c69b5d1": "NewDeposit(uint256)", +"7c69ef8d": "market2020TokenCreated()", +"7c6aafd1": "getRegularCarsForVariant(uint256)", +"7c6ac2af": "withdrawal_Lem(uint256)", +"7c6b2d6a": "setV_R1(uint256)", +"7c6b5b10": "amountFirst()", +"7c6bd3e8": "preGrant(address,uint256)", +"7c6bd96d": "extendStart(uint256)", +"7c6db9b5": "changeMinimumWei(uint256)", +"7c6e19a8": "UpdateTokenDailyExchangeAmount(address,address,uint256)", +"7c6e481c": "bancorChanger()", +"7c6e5809": "AEZtoken()", +"7c6e607d": "SuicideContract()", +"7c6e94e3": "migrationStarted()", +"7c6eb7bb": "generateNewRandom()", +"7c6fa5c2": "attackPrizeRatio(address)", +"7c6fb02a": "getCrydrViewStandardName()", +"7c6fb59d": "updateCreditBalance(address,uint256,uint256)", +"7c6fdec5": "getStrategyTokenPrice(uint256,uint256)", +"7c6fe7a9": "getAddressIdArray(address,uint256,string,string)", +"7c709fbe": "mxrjjToken()", +"7c70b205": "windowLength()", +"7c70c444": "DOXToken()", +"7c70e791": "removeInspector(address)", +"7c70e7fe": "currentRewardReleasePercentageRatePerYear()", +"7c71c0eb": "getIsProjectBonus()", +"7c7202e5": "setReceiver2()", +"7c72d868": "sendDividendsEthers()", +"7c72e273": "auctionFinalize(bytes32)", +"7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", +"7c74d4d4": "JCCoin()", +"7c759d0d": "lock(address,uint256,uint256,uint256,uint256)", +"7c75c1b4": "distributeWithPolicy(address,uint256,uint8)", +"7c774111": "OF()", +"7c77b7c4": "getNumberOfDisputedDealsProDoctor()", +"7c77fad6": "AddMatch(string,string,uint256)", +"7c78cb13": "decrementQuantity(uint256)", +"7c7959e0": "CryptoNumismat()", +"7c796a83": "setGasUsage(uint256)", +"7c799e90": "str2bytes(string)", +"7c79c167": "stageHardcap(uint8)", +"7c79ebce": "expired(uint64)", +"7c7a52bf": "newChallenge(uint256,address)", +"7c7b0ff4": "getRide(uint256)", +"7c7b13b0": "PlayX50()", +"7c7c7695": "getAccountID(address)", +"7c7c7c3c": "SUPER_ADMIN()", +"7c7ce7df": "mintToPool(uint128,uint256,uint128)", +"7c7d14cf": "getPawnId(uint256)", +"7c7d809b": "saleEndUnixTime()", +"7c7dc098": "early_supporters_distribution(address[],address,address,uint256)", +"7c7dd391": "TokensWithdraw(address,address,uint256)", +"7c7ead51": "Wscchain(uint256,string,string)", +"7c7edd68": "PRHXToken()", +"7c7eeaa1": "hirerLastResortRefund(bytes16,address,address,uint256,uint256)", +"7c80bb4f": "getNameByAddress(address)", +"7c80feff": "getTokenIndicies(address,address[])", +"7c812015": "HedgeCoinCapitalToken()", +"7c81ff56": "TGE_SUPPLY()", +"7c8255db": "sendGifts(address[])", +"7c82a1d4": "reserveKY()", +"7c82eff7": "getZero(uint256)", +"7c831bd9": "rateCoefficient()", +"7c83b25c": "gettimelineandgoal()", +"7c83fdf7": "createFiatInvestorRequest(uint256)", +"7c842e5e": "updatePriceFromRealUnicornPrice()", +"7c84b40c": "makePrivate()", +"7c84c69b": "assertEq(bytes32,bytes32)", +"7c853cc1": "WithdrawFromKickTheCoin()", +"7c857566": "destructGame(address)", +"7c858e02": "smallestUnit()", +"7c85a757": "updateGooConfig(address)", +"7c85ab3a": "boardMemberCancel()", +"7c85df24": "setWHaddress(address)", +"7c871d31": "setIcoDates(uint256,uint256)", +"7c88e3d9": "mintBatch(address[],uint256[])", +"7c89e504": "removeSomeEthers(uint256,address)", +"7c8af704": "resolveRound()", +"7c8b1fa2": "ShNShToken()", +"7c8c2234": "pushMilestone(uint16,string,string,uint64,bool)", +"7c8c6643": "unhint(bytes32)", +"7c8d56b8": "numeraiTransfer(address,uint256)", +"7c8db773": "CSE()", +"7c8dc575": "rejectConsent()", +"7c8de59a": "DCM(uint256,string,uint8,string)", +"7c8e040f": "confirmAtkBossQuest(address)", +"7c8e17e5": "teamOneTotalPlayers()", +"7c8e4e25": "credosReserveAccount()", +"7c8e8e69": "MarkLesterMiranda()", +"7c8f76a1": "issueTokens(address[],uint256[])", +"7c8f8278": "setTotalTokenSupply(uint256)", +"7c8ff8ac": "tokenProof(uint256)", +"7c905c9f": "preICOprice()", +"7c9143c9": "_hash(uint256,bytes32)", +"7c91e4eb": "DISTRIBUTION()", +"7c92a217": "c_MinFunds()", +"7c930a10": "ETHERECASHTOKEN(uint256,string,string)", +"7c935183": "test_deposit()", +"7c937700": "revokeAllVulnerable()", +"7c9473f6": "sellNoDecimals(address,uint256)", +"7c94830b": "kairosOwner()", +"7c9542bd": "LogWalletUpdated(address)", +"7c955583": "pendingWhitelistHash(address[])", +"7c95ef3f": "privatePlacementSupply()", +"7c9677be": "allocateTeamToken()", +"7c968f5d": "get_token_data_buyable(uint256)", +"7c96f680": "MyAdvancedToken(uint256)", +"7c97479b": "cardSupply()", +"7c976dbd": "tokenCreationCapOverall()", +"7c97ffe2": "DeusToken()", +"7c987ba4": "getMemberPayed(address)", +"7c989b45": "setBonus(uint256,uint256,uint256,uint256,uint256,uint256)", +"7c996d9e": "IndiaStocksCoin()", +"7c99922d": "founderTokensVested()", +"7c9b0892": "lnUpperBound(uint256,uint256)", +"7c9b387b": "maximumClaimPriceWei()", +"7c9c3d89": "mintCoinsForOldCollectibles(address,uint256,address)", +"7c9cbd38": "changeTeamTokens(address)", +"7c9cd7df": "changeDeveloper_only_Dev(address)", +"7c9d564f": "_pRand(uint256)", +"7c9d8bdb": "getBetsByCategory(bytes32)", +"7c9f4941": "SplitSend(address,address)", +"7c9fe2a7": "train2(uint256)", +"7ca005b3": "generateProof(string,address,address,uint8)", +"7ca013e6": "getRateToPxlAmount(uint256,uint256)", +"7ca01b2a": "getTestFour()", +"7ca1a66c": "resumeLotto()", +"7ca1cb48": "approveCurrencyTokenAddress(address,bool)", +"7ca21b37": "setMinPersonalCap(uint256)", +"7ca24d95": "changeEndTime(uint64)", +"7ca2795f": "AdvanceQueue()", +"7ca31724": "tokenId(address)", +"7ca54248": "lastSaleInHGT()", +"7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", +"7ca5d8fa": "read_u8()", +"7ca60997": "rewardComment(address)", +"7ca63061": "LibraCreditNetwork(uint256,string,uint8,string)", +"7ca64683": "hasFiveStepWithdraw()", +"7ca823d5": "getAverageChainWork()", +"7ca828d0": "_canBreedWith(uint256,uint256)", +"7ca9429a": "getOfferCount(address,address)", +"7caae38c": "calluseraddress(address,address)", +"7cab5e8c": "removeApproval(address)", +"7cab9ba2": "setReceiver()", +"7cac4c7d": "JOY()", +"7cac9736": "computeResult()", +"7cad997f": "purchaseByEMONTImpl(uint16,uint256,uint64,address)", +"7cae6cb5": "determineEdition(uint256)", +"7cae8509": "delete_blockedAddress(address,address)", +"7caf3115": "MovieWorld()", +"7caf59d9": "addPullRequest(bytes32,bytes32,uint128)", +"7cb04b87": "running_id()", +"7cb070c7": "OPL()", +"7cb1442c": "f1(uint256,uint256)", +"7cb1bb0b": "setOraclizeGasExtraArtwork(uint32)", +"7cb25bc7": "dividendCount()", +"7cb2b79c": "setTokenManager(address)", +"7cb2c15b": "getTXdatabyCode(bytes32)", +"7cb34d2d": "register(bytes32,bytes32,bytes32,string)", +"7cb46307": "NewContent(bytes32)", +"7cb4e22a": "IEIP165()", +"7cb4ef0e": "getHashRateOf(address,uint256)", +"7cb51761": "setMaxPayments(uint256)", +"7cb56698": "rescueLostFighter(uint256,address)", +"7cb5d0ef": "Airchain(uint256,string,uint8,string)", +"7cb6a6b2": "generateContract(uint256,uint256)", +"7cb6b35d": "adjustLimitBetweenIssueAndNormal(uint256,bool)", +"7cb6cf3e": "ETH_SIGN_PREFIX()", +"7cb8adc7": "s9(bytes1)", +"7cb916b9": "withdrawAlltokenFunds(address)", +"7cb91d84": "slots_left()", +"7cb97b2b": "set_owner(address)", +"7cb9cf54": "removeSeller(address)", +"7cb9da88": "setIncludes(uint256,uint256)", +"7cba3f04": "PriceWeekThree()", +"7cbab0cb": "updatewallet(address)", +"7cbae071": "setPresalePerEth(uint256)", +"7cbb6934": "generateRandomNum()", +"7cbba335": "get_order_book_length(string)", +"7cbbf1da": "proofType_Native()", +"7cbc2373": "redeem(uint256,uint256)", +"7cbc4eb6": "lost(uint256)", +"7cbc6903": "totalBidCount()", +"7cbcc254": "__reset__()", +"7cbd3508": "_unpackExpValue(uint256)", +"7cbd5444": "isPriv()", +"7cbd9e8d": "existCaller(address)", +"7cbe0f32": "addOpenAction(string,string,string,string,string)", +"7cbe9e41": "DANKSIGNALS()", +"7cbf2bdc": "CapFlexed(uint32)", +"7cbfb8a5": "TransferTokens(address,uint256)", +"7cc07974": "HFTCrowdsale(address)", +"7cc08d53": "partProvider()", +"7cc0c3a7": "controllers()", +"7cc0e670": "freezeAccountForContract(address,bool)", +"7cc1303a": "trade(uint8[2],bytes32[4],uint256[7],address[6])", +"7cc1c640": "getActualPriceOfCardOnBuyAuction(uint256)", +"7cc1e28d": "setValidatorRewardPool(bytes32,uint256)", +"7cc1f867": "getContractInfo()", +"7cc2fe49": "setResourcesPrimaryManager(address)", +"7cc35d99": "historyIt()", +"7cc3ae8c": "endAt()", +"7cc3b48e": "withdrawKrowns(address,uint256)", +"7cc3beb2": "acceptArbiter()", +"7cc48875": "Slots()", +"7cc49427": "RemoveLock(address,uint256)", +"7cc4e55f": "lowestAskPrice()", +"7cc4ef14": "purchaseLand(uint256,uint256,uint256)", +"7cc589f9": "BlocklancerEmploymentContract(string,address)", +"7cc666da": "MoratoriumTransfers(uint256,address[],address[])", +"7cc9e4f0": "registerParticipant(address)", +"7ccaa9fa": "calcMerkle(bytes32[],uint256,uint256)", +"7ccc5aea": "DSPParametersChanged(address)", +"7ccc7e94": "inv_contract()", +"7ccce851": "isBlacklistedUser(address)", +"7ccd099d": "test_32_assertGasUsage100Boards()", +"7ccd3f79": "setAA(uint256)", +"7ccec110": "TestWorldSnapshot(uint256)", +"7ccefc52": "minimumMakerProtocolFee()", +"7ccf0d44": "_setAuctionObj(address,uint256,uint256)", +"7ccfd45a": "removeSubUser(address)", +"7cd022d4": "gen0PresaleLimit()", +"7cd07e47": "migrator()", +"7cd208b6": "requestRefunding()", +"7cd30fe3": "MarketingDevelopmentAddress()", +"7cd3229a": "board()", +"7cd3969d": "getUnsoldReceived(uint256,address,address)", +"7cd44272": "getConversionRate(address,address,uint256,uint256)", +"7cd4559c": "_rewardApprovers(address)", +"7cd49414": "participate(address,string,bytes32[],bytes32[])", +"7cd49fde": "_counter()", +"7cd50577": "setTradable(bool)", +"7cd64c79": "AdvancedERC20(uint256,string,string)", +"7cd6a7fd": "setSettings(uint256)", +"7cd73941": "withdrawBAT(uint256)", +"7cd7c2bd": "setAnimalMeta(uint256,string)", +"7cd87ee9": "Libertax()", +"7cd9b0f8": "userHasHunterLicence(address)", +"7cda71a6": "preSaleTotalSupply()", +"7cdacb98": "setContractPartner(address)", +"7cdbae63": "addRegistryIntoTagsIndex(address)", +"7cdcc514": "replyThread(uint256,string,string)", +"7cdcdf23": "RenderTokenCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"7cdd053a": "addRace(uint8,uint8,uint8)", +"7cdd8419": "getEtherPriceforDapp()", +"7cddc1de": "checkBonusTokenHoldingPeriodRemained(address)", +"7cde2a7e": "setCount(uint256,uint256)", +"7cdee6fb": "buySpaceship(uint16)", +"7cdef83c": "debtEngine()", +"7cdf6d0b": "TranslateME()", +"7cdf8ace": "adminCommand(uint8,address,uint256)", +"7ce01daf": "rollSystem(uint256,address)", +"7ce1b194": "ModernTokenPlus()", +"7ce1db53": "ShowNextCliff(address,uint256)", +"7ce1e2eb": "releasedBountyTokens()", +"7ce2432b": "lbrsToken()", +"7ce26195": "approveGame(address)", +"7ce2d863": "_calcCheckoutTime(uint256)", +"7ce335ac": "amountwon()", +"7ce3489b": "setFeePercent(uint256)", +"7ce50441": "updateTimer(uint256,uint256,uint256)", +"7ce52eb6": "distributePrizes()", +"7ce56303": "deployVestingContract(address,address,uint256,uint256,uint256,bool)", +"7ce5b85e": "transferBuy(address,uint256)", +"7ce5f9da": "DIYToken()", +"7ce645a6": "fundsAreAvailable()", +"7ce65725": "TEC()", +"7ce67d60": "initLoan()", +"7ce6e4ca": "getData_1()", +"7ce7c990": "transfer2(address,uint256)", +"7ce7d660": "CAF1(address)", +"7ce84784": "createtoken(string,string,uint256,address,address)", +"7ce85957": "setEthCollector(address)", +"7ce8e196": "test_claim()", +"7ce901e7": "TestContract(address)", +"7ceac0b8": "TokenSale(address,uint256,uint256)", +"7cead212": "dissolvedIndexToApproved(uint256)", +"7cec3a3a": "getBUS(bytes32,uint256)", +"7ced3d4c": "validArb2(address)", +"7ced55c2": "pvpPaused()", +"7cee8e70": "subTotalSponsored(address,address,uint256)", +"7cee919c": "getCurrentHash()", +"7cee9ee8": "placeBet(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"7cef6047": "getNavHistory(uint256)", +"7cef6966": "addLaureato(string,string,string,bytes32)", +"7cefcc52": "burnedCount()", +"7cefd9f8": "initCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"7cf0ffcb": "forceDivestAll()", +"7cf12b90": "unFreeze()", +"7cf12ff8": "registryRequestSerialNumber()", +"7cf141fd": "removeGlobalAdmin(address,address)", +"7cf2b9e4": "updateVotingContractAddress(address)", +"7cf2f670": "Pinakion(address,address,uint256,string,uint8,string,bool)", +"7cf37493": "finalizeNOK()", +"7cf4c543": "createTransaction(uint256,address)", +"7cf52f3c": "getPrevRoundWinner(uint256)", +"7cf5d66f": "notifyTokensReceived(address,uint256)", +"7cf5dab0": "increment(uint256)", +"7cf62838": "EIP20ByteCode()", +"7cf6babf": "BasicSprout()", +"7cf6be2c": "createBid(bytes32,address,address,address,uint256,uint256,uint256)", +"7cf7b9f4": "determineDate()", +"7cf7e0e2": "VLCCoin()", +"7cf7f740": "getBuildingInfo(uint256)", +"7cf846c9": "registerManoContract(address,bool)", +"7cf90fcc": "addItem(address)", +"7cf99c33": "getIsMigratingFromLegacy()", +"7cfa1133": "Baxgold()", +"7cfb1e66": "TeamSum()", +"7cfb6052": "setPremium(int256)", +"7cfbc7a5": "setMaxBetAmount(uint256)", +"7cfe18c0": "internalCalculateEthersWithBonus(uint256)", +"7cfe19af": "A_Free_Ether_A_Day()", +"7cfe7a25": "BankhadCoin()", +"7cff33c7": "setMainSaleParameters(uint256,uint256,uint256)", +"7d007ac1": "setProposalDuration(uint256)", +"7d00818c": "allowedAddressesOf(address)", +"7d00848a": "getSinistre()", +"7d019f87": "isPreSaleClosed()", +"7d02bc1c": "getOldest()", +"7d02db72": "CryptoRUB()", +"7d036b0d": "finishProofPhase(uint256)", +"7d0381a7": "notify(address,uint256,uint8,uint8,uint8,uint256,uint256,bool)", +"7d0385c2": "createPromotionalRenewal(uint256,uint256)", +"7d03c394": "Logs2(uint256,uint256,uint256,uint256,uint256,uint256)", +"7d03e603": "GetUserExtraData2(address)", +"7d03f5f3": "newGame()", +"7d049675": "fechAllCandidatesByStage(uint256)", +"7d04d239": "setTokenMintApproveReset(address,address,address,address)", +"7d051cf3": "getTokensAcquired(address)", +"7d052a2e": "processReservationContribution(address,uint256)", +"7d06053b": "perturb(bytes32)", +"7d065c93": "getPayout()", +"7d075efb": "withdraw(address,address,address,bytes)", +"7d087715": "getwithdrawableAmount(address)", +"7d087f47": "gamblerevent(address,uint256)", +"7d091a7e": "pct(uint256,uint256,uint256)", +"7d094533": "announceVictory(string)", +"7d0981dd": "ModifyMine(address,bool,string,uint256)", +"7d09f560": "Equio(string,address,address,bytes32,uint256,uint256)", +"7d0a5e3b": "fightWIthMob(uint256,uint256)", +"7d0b4c8b": "withdrawEquity(uint256,bool)", +"7d0b4d60": "migrationEnded()", +"7d0bc9c6": "tier_action(uint8,uint256,uint256,uint8,uint256,uint256)", +"7d0bd79a": "publicSaleTokensPurchased()", +"7d0c269f": "isWhitelister(address)", +"7d0cf8b5": "Seele()", +"7d0e6aa9": "BitrootCoin()", +"7d0e6b6f": "setNextDiscountTTMTokenId1(uint64)", +"7d0e750d": "getMyTime()", +"7d0eb9b9": "RemoveVerifiedInfo(bytes32)", +"7d0f023d": "_deleteBytes(bytes32)", +"7d0f7528": "getFromList_(uint8,uint256)", +"7d103f14": "getBallotBook(uint256,uint256,uint256)", +"7d1108f5": "getAssetData(uint256)", +"7d112d64": "authenticateVoter(string)", +"7d1157c8": "rawSendEther(bytes32)", +"7d1173b0": "DGAMEToken()", +"7d11f020": "oracleName()", +"7d124a02": "setRewardAddresses(address,address,address)", +"7d1286f6": "InterfaceId_ERC721Exists()", +"7d128d2e": "checkAgentSign(address,address,bytes32)", +"7d12b689": "checkPoolsDone()", +"7d136133": "SimpleATM()", +"7d13a256": "highFundingGoalReached()", +"7d14500a": "Sukiyaki()", +"7d14c8df": "setStaleTime(uint256)", +"7d150529": "countdownTimeLeft()", +"7d1541ad": "listDapp(string,string,string)", +"7d1710e4": "saleBalanceOf(address)", +"7d1842ec": "getPayeeBalance(bytes32,uint8)", +"7d18a197": "IndoAset()", +"7d19514d": "addFunds(uint256,uint256,bytes32,uint256)", +"7d19c777": "Emission(address,uint256,uint256,uint256,uint256,uint256)", +"7d19e292": "transferTokensToContractOwner(uint256)", +"7d19e596": "getEscrow(uint256)", +"7d19ec9d": "getUserAccount(bytes32)", +"7d1a6e3f": "compareTo(string,string)", +"7d1b2666": "fibokenCreatedCount()", +"7d1bd3ea": "setClientSupply(address,uint256,uint256)", +"7d1ca9fd": "setBeneficiary2(address)", +"7d1d0553": "convertToMiniUI(uint256)", +"7d1d7fb8": "settlementFee()", +"7d1e97a1": "cardTokenAddress()", +"7d1ea6d4": "m_token()", +"7d1f067c": "EthBankRoll(uint16)", +"7d1f561b": "set_pre_kyc_iconiq_bonus_denominator(uint256)", +"7d2026cd": "distributeWinnings()", +"7d2044cc": "AuctusStepVesting(address,uint256,uint256,uint256)", +"7d211c75": "peth()", +"7d21ce4d": "_Mint(address,uint256)", +"7d2211d6": "setStatus(string)", +"7d22e9df": "clearAllocatedAndSalaryTokens(address,address)", +"7d22f431": "delegatePercent(uint256,uint256,uint256)", +"7d230dfd": "wedding()", +"7d236928": "getGenesMarketAddress()", +"7d2402d6": "inPresale()", +"7d240b9c": "setLockToken(bool)", +"7d2429a8": "long_party()", +"7d242ae5": "setBasePrice(uint256,bytes)", +"7d24a8a1": "returnToken(address,uint256)", +"7d24cd18": "onExecuteMessage(address,uint256)", +"7d25d7cd": "tokensToTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"7d263245": "COOLDOWN_TIME()", +"7d264bad": "adexTeamAddress()", +"7d268ac1": "ArtworkCore()", +"7d27ecf9": "phase1TokenSold()", +"7d287697": "testTryGetUnset()", +"7d298ee3": "beforeExecute(address,uint256)", +"7d29beff": "placeVoxel(uint8,uint8,uint8,uint8)", +"7d29f868": "ChangeUSDto1ETH(uint256)", +"7d2a0f7a": "isWhiteListedValueValid(address,uint256)", +"7d2a47b9": "findShareholder(address)", +"7d2aeb8a": "releaseVestedTokens(uint256)", +"7d2b48bb": "getMaxAssignedRequests()", +"7d2b9cc0": "setRequiredSignatures(uint256)", +"7d2c93d7": "validateTypeReference(uint256,bool)", +"7d2d661f": "genLimit(uint256)", +"7d2d92ac": "withdrawTheUnsoldTokens()", +"7d2dfc30": "FourCrowdsale(uint256,uint256,uint256,uint256,address,address)", +"7d2f42c3": "updateRating(address,bool)", +"7d309331": "Bitceun()", +"7d3157bf": "confirmBeneficiary(uint256)", +"7d320ef8": "proofStorage_IPFS()", +"7d326635": "getLendingObjId(address,uint256)", +"7d32e7bd": "transfer(address,bytes32)", +"7d34c2e3": "setMarketingAndRNR(address)", +"7d34f5ac": "dailyTotals(uint256)", +"7d3533da": "ownerSetAllowPublicWithdraw(bool)", +"7d35f656": "count_customer_deposits()", +"7d363718": "BitcoinXChainToken()", +"7d363720": "getCurrentBonusFactor()", +"7d368f88": "afterEnded()", +"7d36e478": "ClaimBalance(address,uint256)", +"7d37fcba": "setManagementContractAddress(bool,address)", +"7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", +"7d38a772": "updateDeveloperMiningPower(uint256)", +"7d394f90": "addMasternode(address)", +"7d398a86": "SourceChanged(string,string,uint256)", +"7d3b2d81": "PayXToList(address[],uint256)", +"7d3bfaee": "withdrawSurprisePotUser(uint256,uint256,uint8,bytes32,bytes32)", +"7d3c42d2": "EtherBrosMaker()", +"7d3c5961": "middleTimestamp()", +"7d3c6da5": "CreateLudumTokens(address,uint256)", +"7d3d220d": "CitizenOne(uint256,address,uint256)", +"7d3d6522": "goalReached()", +"7d3dcbc3": "setTRM1BonusActive(bool)", +"7d3ee409": "setPatient(string,uint256,address,string,string,uint256,uint256)", +"7d3fa29e": "addressToGoldDeposit(address)", +"7d3fcaff": "getMatchReport(uint256)", +"7d40189a": "timeAdjustPlus()", +"7d40583d": "setRoleCapability(uint8,address,bytes4,bool)", +"7d408b44": "getMemberTokenRemain(address)", +"7d40e9e0": "purchasedAmountOf(address)", +"7d40eb25": "TITANCORE()", +"7d4120a9": "insChainToken()", +"7d41cc60": "modifyAuthorizedCaller(address,address)", +"7d426826": "INTREPID_VOUCHER_PRICE()", +"7d42af97": "PrivateSaleEndTime()", +"7d436d76": "consume(bytes32,bytes32[])", +"7d443e57": "getInitInfo()", +"7d445654": "lastLargestHODLERBalance()", +"7d4504e0": "totalETHraised()", +"7d451aa7": "zgetOwner()", +"7d457ac3": "CompensationSentEvent(address,uint256)", +"7d459c71": "Multiexshares()", +"7d46702b": "icoCollected()", +"7d472f1c": "xnotifications(uint256)", +"7d475c32": "LogAccessPolicyChanged(address,address,address)", +"7d478407": "gameEncryptedText()", +"7d47b4e7": "setAIRDROPPrice(uint256)", +"7d48441f": "_isContract(address)", +"7d487532": "setMember(bytes32,address,bool)", +"7d48dcd7": "onPurchase(address,address,uint256,uint256,uint256)", +"7d49300d": "initGame(address,uint256,uint256,uint256)", +"7d49e51d": "getSpaceshipUpgradePriceByModel(uint16,uint8)", +"7d4a899e": "SafeSender()", +"7d4af159": "marketMakerFee()", +"7d4c1403": "get(address,address,string)", +"7d4c258a": "Set(bytes32)", +"7d4c4a04": "saleStartSecondDayEnd()", +"7d4c7806": "disputeCrowdsourcerCreated(address,address,address,uint256[],uint256,bool)", +"7d4cb964": "MAX_ENTRIES()", +"7d4ce874": "maxInvEth()", +"7d4cf602": "buildDSBalanceDB()", +"7d4d3128": "startTransferToken()", +"7d4d42c5": "_addGraffiti(uint256,string,string)", +"7d4da754": "CoiinToken(address)", +"7d4deda1": "setAirLimitCount(uint32)", +"7d4e1353": "erc20TRFT(uint8)", +"7d4e1eb0": "stop_game()", +"7d4f0406": "PPY(uint256,string,string)", +"7d4f128b": "createLockTokenHistory(address,uint256,uint256)", +"7d4f1883": "closeMonthlyInvest()", +"7d50bef3": "account(address,address,uint256)", +"7d5224d3": "registerNewUser(address)", +"7d53223a": "setVestingReleasedAmount(address,address,uint256)", +"7d53409a": "setMaxbonds(uint256)", +"7d534aa0": "disableCharity()", +"7d549e99": "totalTokensMinted()", +"7d54a3ba": "CROWD_WAVE1_PERIOD()", +"7d55094d": "toggleMinting()", +"7d55758f": "underMint(address,uint256)", +"7d55923d": "click()", +"7d55f64d": "fixedFeeInWei()", +"7d564056": "getUserProperty()", +"7d564f11": "setsystemprice(uint256)", +"7d574678": "setICOIsFinished()", +"7d57a85c": "preIcoFinish()", +"7d57edf3": "HOPE(uint256,string,string)", +"7d580939": "_HOLDersPayRoll()", +"7d58eb76": "hasResolver(string,address)", +"7d59a938": "month6companyUnlock()", +"7d5a9b41": "init(uint256,uint256,address,uint256,uint256,uint256,address,uint256)", +"7d5bc9fe": "Account_balances(address)", +"7d5c1914": "getWalletInfo(address)", +"7d5db5e0": "Dagelas()", +"7d5dc538": "getToJackpot(uint256,uint256)", +"7d5dec2a": "multiplex_remove(address)", +"7d5f66f2": "mintBounties()", +"7d5fbcab": "setMystr(string)", +"7d5fec5a": "setOwner(uint8,uint8,address)", +"7d606100": "BetOverlap()", +"7d60b6ce": "setCommissionWallet(address)", +"7d60e291": "FIFTY_THOUSANDS_LIMIT()", +"7d60e343": "getFileListSize()", +"7d619d9b": "holdCoin(address,address)", +"7d61b9fe": "intervalsCount(bytes32)", +"7d61de37": "foundersRewardTime()", +"7d620130": "getCardCount()", +"7d635502": "buyEgg()", +"7d636d9b": "refferal(address)", +"7d63a93a": "REKT(uint256,address)", +"7d64bcb4": "finishMinting()", +"7d652335": "changeAssetsState(bool)", +"7d656a72": "NewPost(bytes32,uint256)", +"7d65b2f7": "hasCompleted()", +"7d65e3fe": "totalInterestCycles()", +"7d661e3c": "giveToken(address,uint256,string)", +"7d6651b9": "claimEthIfFailed()", +"7d683b95": "unsoldUnlockedAt()", +"7d684a9d": "RENEEKROM(address,address,address,uint256,uint256,uint256)", +"7d68582a": "manuallyExchangeContractPreDGZtoDGZ(address,uint256)", +"7d68bee7": "LogPollDeleted(bytes32)", +"7d692faf": "readMailByAdmin(uint256,bytes16)", +"7d6979e7": "canBeChanged(uint256)", +"7d69880b": "addBalance(uint256,uint256,uint256)", +"7d69f335": "changeColorRed()", +"7d6a59ed": "getInvoiceCount()", +"7d6a5f7b": "requireNotPaused()", +"7d6ad4cd": "triggerAutorelease()", +"7d6b4278": "outcomeState(address,uint256,uint256)", +"7d6bc260": "maxTiers()", +"7d6c1ff1": "addMake(address,uint256,uint256)", +"7d6c8388": "INVECH(uint256,string,string)", +"7d6c864e": "withDrawable()", +"7d6cf2df": "get_deploy_fee()", +"7d6d28ef": "setComisionInTokens()", +"7d6dc737": "getBylawsMinTimeInTheFutureForMeetingCreation()", +"7d6e061c": "getFinishDates()", +"7d6e3751": "_addVouchers(address,uint256)", +"7d6ebe94": "setDoubleClaimSegmentSlashAmount(uint256)", +"7d6f0d5f": "changeFundsWallet(address)", +"7d6f174e": "invalidateSignature(uint8,bytes32,bytes32)", +"7d6f3781": "userChallenge()", +"7d6fb089": "setBGXTokenInterface(address)", +"7d7106ad": "_updateStats(uint256,uint256)", +"7d71a19b": "setAccountInfo(address,address)", +"7d720296": "airSender()", +"7d722a30": "Funding_Setting_cashback_before_start_wait_duration()", +"7d72aa65": "addRole(address,string)", +"7d736d0d": "weekPotExpiration()", +"7d74039d": "getAmountOfShareholders()", +"7d7452aa": "DSVCoin()", +"7d7714fb": "coinAllowance(address,address)", +"7d7786a3": "GetGuestName()", +"7d77c8f9": "allowTransferBetweenUsers()", +"7d780e2a": "blocked_amounts(address)", +"7d78b94d": "claimNihilum()", +"7d78ef4a": "BKKToken()", +"7d790630": "setContractFrozen(bool)", +"7d79265b": "REDEEM_METHOD()", +"7d79c192": "awayTeam()", +"7d7a1a80": "UCToken(uint256,string,string)", +"7d7a31b6": "max(uint64,uint64)", +"7d7a3a1a": "bittravelxToken()", +"7d7a9ca4": "MachineToken()", +"7d7b0099": "API()", +"7d7b2051": "finalizeExits(address)", +"7d7be90f": "Splitter(address[])", +"7d7c2a1c": "rebalance()", +"7d7c7258": "adminSendMoneyToUser(address,uint256)", +"7d7ca00c": "JSONpath_int(int256,string,string,uint256)", +"7d7d4a68": "start_service(address)", +"7d7e5e3d": "setFlagPair(uint256,bool,bool)", +"7d7eee42": "setPreSalePrice(uint256)", +"7d7f0050": "TradeEnabled(bool)", +"7d7f1699": "freeBet(address)", +"7d7fa215": "getSaleData()", +"7d7fef7e": "receivedEtherFrom(address)", +"7d802655": "delLimitedWalletAddress(address)", +"7d80def3": "setENDPhase()", +"7d81d62f": "doGroupRefundPayoutsSuccess(address[])", +"7d820414": "GeXCHANGE()", +"7d82bf73": "getBonusTokens(uint8)", +"7d836281": "getBetState(address)", +"7d83e527": "PensionCoin()", +"7d851a13": "signerIsWhitelisted(bytes32,bytes)", +"7d851c70": "getTokensBack()", +"7d85445d": "EducationToken()", +"7d85facd": "transferred()", +"7d862a7e": "changeDutchIdxAddr(address)", +"7d87bb7b": "HATCHING_COST()", +"7d87e97d": "makeMemberOfGroup(address,uint256)", +"7d882097": "totalDeposits()", +"7d882e9b": "resetWinner()", +"7d886976": "testMintGuyAuth(int256)", +"7d8966e4": "toggleSale()", +"7d8978db": "addCasino(uint16,uint256,string,string)", +"7d897ccd": "KPCSAdministrator()", +"7d89ae63": "__findRef(string)", +"7d89f040": "AddAmount(uint256)", +"7d8be627": "activateLineItem()", +"7d8c0c7c": "adminSetRegisterCost(uint256)", +"7d8ccd59": "debug_uint(uint256)", +"7d8cfd1a": "flag_hash()", +"7d8d4878": "updateETHEUR(uint256)", +"7d8f442e": "getPrice(uint40)", +"7d8f94a0": "slackUsersCap()", +"7d8fcfb4": "transferSuperAdminOwnership(address)", +"7d8fe090": "REFERRAL_BONUS_LEVEL5()", +"7d902311": "gameGiftLineTime()", +"7d917fcb": "Registered(bytes32,address)", +"7d919a43": "tohash(bytes32,address,address,uint256,uint8,bytes32,bytes32)", +"7d91da87": "buyPixelTokenFor(uint24,uint256,uint24,address)", +"7d9201cc": "rspToken()", +"7d921af0": "disableTimelock()", +"7d92561d": "NewBuyer(address,uint256,uint256)", +"7d92654c": "endRoundAndStartNextRound()", +"7d92bb6e": "getClaimKeys()", +"7d92f6be": "goldRegistry()", +"7d9375b8": "authorizeContract(address,string)", +"7d9383c3": "valid_creature(address)", +"7d93ccdf": "Halo3DDoublr(uint256,address)", +"7d940912": "addArea(uint256,uint8,uint8[],uint256,string,uint256,bool,uint32)", +"7d94792a": "seed()", +"7d94d4aa": "SergeToken()", +"7d95dcd7": "createPromoArtwork(string,string,uint32,address)", +"7d961218": "REGTMProc()", +"7d962e44": "addHash(bytes16)", +"7d96f693": "getDepositAmount()", +"7d97597d": "DEFAULT_AUCTION_LENGTH()", +"7d97b1f6": "VestingScheme()", +"7d98ebac": "exchange(address,address,address,address,uint256,bytes)", +"7d99ae17": "issue(address,bytes32,bytes32)", +"7d9a4e2c": "safeToMultiply(uint256,uint256)", +"7d9a9046": "resolveDisputeBuyer(string)", +"7d9a9096": "icoFinishedAt()", +"7d9c68f7": "getUserBattleValue(address)", +"7d9d4bed": "secondStageEnd()", +"7d9d972d": "guardian3Vote()", +"7d9e5243": "BonusAmountUpdated(uint256)", +"7d9f298e": "setLockedState(bool)", +"7d9f6db5": "auction()", +"7d9f8cf2": "startFirstStage()", +"7d9fb742": "fourthRoundPercent()", +"7d9fc342": "PreICODays()", +"7da028d6": "SaleCompleted(address,uint256,uint256)", +"7da0389d": "referralProgram(address[],uint256[],uint256)", +"7da0399a": "CloseAuction(bytes32)", +"7da0e079": "_closeMotion(uint256)", +"7da16762": "executeParentDaoSplit()", +"7da208aa": "deleteArrayAddress(bytes32,uint256)", +"7da21a1a": "WaltonToken()", +"7da25928": "announcedTimeStamp()", +"7da3400b": "_contractExists(bytes32)", +"7da39157": "poWtfContract()", +"7da3c3ab": "revert()", +"7da3e219": "testInitialTokenBalance()", +"7da3f613": "lockAddress()", +"7da40b65": "isPlatformOrSupportManager(address)", +"7da4d24b": "activationOpen()", +"7da5efc8": "drop(address,address[],uint256[])", +"7da63c59": "changeValuePerToken(uint256)", +"7da7a437": "Clinicoin()", +"7da7d5ab": "nextGameRakePercent()", +"7da81364": "getProposalAction(uint256)", +"7daa10ce": "getMyInfo()", +"7daa9fcd": "buyGems()", +"7dab61b6": "setBlack(bool)", +"7dab84d8": "ShowTestU(string,uint256)", +"7dabb4d6": "addKycVerifiedInvestor(address)", +"7dac0547": "VIRGOToken()", +"7dac9048": "addArgumentToRequestUint(uint256,bytes32,uint256)", +"7dae6e95": "noOfTokenAlocatedPerICOPhase()", +"7daeef25": "objectTome()", +"7daf06fd": "withdrawPart(uint256)", +"7db0799f": "EnduranceToken()", +"7db12abc": "contractorWithdraw()", +"7db1c36f": "setFeedBackFee(string,uint256)", +"7db2cff8": "old_address()", +"7db33f99": "setLeaseCard(uint8,uint256,uint256)", +"7db4149d": "RegisterTokenTransaction(address,uint256,address)", +"7db42b6c": "AutoBusinessFinance()", +"7db45975": "register(uint256,uint256,bytes32,string,bytes32)", +"7db48416": "_getMinions(uint256)", +"7db6a91d": "checkDeck(uint8[],bytes32,bytes32)", +"7db6cbfc": "_addDefaultOperator(address)", +"7db724b6": "MAIN_QUESTION()", +"7db7c239": "tranchesPayedOut()", +"7db8782a": "uint256At(uint256,bytes,uint256)", +"7db91595": "setOwnedBonus()", +"7db9743b": "Registry()", +"7dbb82a8": "setLicenseTermsRegistry(address)", +"7dbbc0cd": "EliteShipperToken()", +"7dbbf2e6": "RecallTokensFromContract()", +"7dbc1d6f": "modifyPrivateList(address[],bool)", +"7dbc827b": "vestingWithdraw(address,uint256,uint256)", +"7dbc9fba": "amendClaim(uint8,uint8,uint8,uint8)", +"7dbd0139": "softCapOk()", +"7dbd33c1": "_percDown(uint256)", +"7dbdab18": "CreatedAngel(uint64)", +"7dbdc2eb": "getQueryPrice()", +"7dbdf168": "EtherBetIO(address,address)", +"7dbecc54": "EDColiseum()", +"7dbece3c": "usdCurrencyFunding()", +"7dbedad5": "createReward(uint256,uint256)", +"7dbf1fe6": "Towers(uint256)", +"7dbf67a7": "setDebt(uint256)", +"7dbff420": "donationUnlockTs()", +"7dc0015d": "centToken()", +"7dc09e4a": "getRequestedProducts()", +"7dc0d1d0": "oracle()", +"7dc0d451": "CHINESE_EXCHANGE_2()", +"7dc10df5": "Jackpot(address,uint256,uint256,uint256)", +"7dc2268c": "minting()", +"7dc28eb2": "LOCKAMOUNT4()", +"7dc379fa": "getTicket(uint256)", +"7dc45e27": "setCryptoMatchValue(uint256,string)", +"7dc4da2e": "initiate(uint256,bytes32,address,uint256)", +"7dc4feb7": "setConstraint(bytes32,address,address,uint256)", +"7dc5cc64": "getTotalDivis(uint256)", +"7dc5cd32": "_patternToNumber(bytes)", +"7dc673bc": "closeRegistration()", +"7dc6c3d9": "deactivateAdSlot()", +"7dc7363b": "LogNewTemplateProposal(address,address,address,uint256)", +"7dc74473": "tokenPrivateMax()", +"7dc79375": "delOracle(address)", +"7dc7c5a5": "debug1()", +"7dc7f7c4": "Pitcheum()", +"7dc8c73e": "canTokenUnlocked(uint256)", +"7dc8e069": "shorten_end_block(uint256)", +"7dc8f086": "getOutcomeCount()", +"7dcab440": "SubinGuhan()", +"7dcaf720": "getReadme()", +"7dcb422e": "setPresaleStartDate(uint32)", +"7dcb6b92": "testegy()", +"7dcbd078": "thirdPay()", +"7dcc3f0c": "LukapToken()", +"7dccd4d6": "setIndividualCertificate(string,bytes32,bytes32,bytes32)", +"7dcd17d9": "sumHardCapICO1()", +"7dcd277b": "SimpleTingToken()", +"7dcda7df": "initiateProviderCurve(bytes32,int256,int256[],address)", +"7dcdace2": "Deposit(address,uint256,uint256,bool,string)", +"7dcdec34": "sendTokenFundsToManager(uint256)", +"7dce4595": "sendToken(address,uint256,string)", +"7dce6bdb": "freeCrawDeadline()", +"7dce8461": "GSENetwork()", +"7dce8dd4": "GenesisSalesCount()", +"7dcfb801": "veryAngry()", +"7dcfd3d5": "blockTransfers()", +"7dd003f1": "test_chain2_4()", +"7dd02c8e": "transferETHFromContract(address,uint256)", +"7dd07097": "tgeSettingsPartProject()", +"7dd0d61c": "check_hash(address,bytes32,bytes32)", +"7dd10e4f": "newUsers()", +"7dd15d40": "getData_13()", +"7dd1f126": "optionTaker(bytes32)", +"7dd256ff": "PATToken(address)", +"7dd26660": "getMegaboxIndex()", +"7dd2899f": "changeDividentContract(address)", +"7dd2e993": "removeTenant(uint256)", +"7dd3cf54": "ChangeCostByManager(uint256)", +"7dd45999": "lockDomainOwnershipTransfers()", +"7dd563c3": "setMainSaleParams(uint256,uint256,uint256,uint256)", +"7dd56411": "ownerOf(bytes32)", +"7dd91734": "compositeReputation(string)", +"7dd9d27f": "exiteEntidad(address)", +"7dd9f846": "buyCard(address,uint256)", +"7dd9fcf7": "latestprice()", +"7dda48a5": "WhatTimeIsNow()", +"7ddaa56a": "tokenContributionMin()", +"7ddb3c00": "total_pay_claimed()", +"7ddb5e65": "votingReward()", +"7ddbf0ed": "setLockedTokenAddress(address)", +"7ddbf1a7": "passFundsToTheTeam()", +"7ddc02d4": "isOwner(address,address)", +"7ddcbfd9": "TegTokensSale(uint256,string,string)", +"7ddd0ce1": "getBetDivisor(uint256)", +"7ddd130f": "PRBCoin()", +"7ddd20ba": "getRequiredStateNumbers(uint256)", +"7dddb66f": "collectOwnRew()", +"7dde0138": "modifySupplyLimit(uint256)", +"7ddfffbf": "mint(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7de06cfc": "startTge()", +"7de09476": "getSpecificBuyerTransaction(address,address,uint256)", +"7de0cc65": "preMcFlyWallet()", +"7de11a8f": "getBlockVerifierAddressesCount(uint256)", +"7de14129": "approveInvestor(address)", +"7de1a631": "confirmETH(bytes32)", +"7de295d2": "withdrawalsCTR()", +"7de2d523": "setbonus(uint256,uint256)", +"7de2e95c": "TransferCow(address,uint256)", +"7de2fe4d": "linkToMasterWalletInternal(address,address)", +"7de32b17": "CuratedTransfers(address,address[],address[])", +"7de36138": "setPreICO(address)", +"7de47b3f": "fundingGoalUSD()", +"7de4800f": "withdrawEscrow(bytes32)", +"7de480c6": "aiurExchangeOracle()", +"7de4ceb2": "DebugValue(string,uint256)", +"7de50c44": "TIME_LOCK_END()", +"7de548d8": "releaseStake(uint256,address,address)", +"7de576cd": "vote(uint16,uint256)", +"7de5ad89": "setJntController(address)", +"7de6c905": "LetItPlayToken(address,address,address,address,address,address,address,address)", +"7de77700": "bytes32ToBytes(bytes32,bytes32[],bytes32)", +"7de7a18d": "setShare(address)", +"7de7ea78": "TokenHNC(uint256,string,string)", +"7de7edef": "changeMasterCopy(address)", +"7de8bb63": "Commons()", +"7de976dc": "amountFundHolder()", +"7de9f212": "colorfilter(uint256)", +"7dea9118": "setIdentityName(bytes32)", +"7deb6025": "buy(uint256,address)", +"7debb959": "calculateAllocation(address)", +"7dec2299": "getStagesInfo()", +"7dec3d35": "FOUNDERS_WALLET()", +"7dec4ce8": "SettleBond(uint256)", +"7ded0c15": "getStakeTokenBalanceFor(uint256,uint256)", +"7ded2210": "setPreIcoCap(uint256)", +"7dee2cad": "CancelMyInvestment()", +"7def2fdf": "changeStakeRate(address,bytes32,uint256)", +"7def7351": "teamTokensFirstShare()", +"7df02c0e": "getLinglongCat(uint256)", +"7df042a2": "totalRegularTokensSold()", +"7df19a78": "BetPlaced(address,uint256,uint8)", +"7df1f1b9": "borrower()", +"7df23b6a": "ReleaseOracle(address[])", +"7df2e3e3": "getRcdExchange(uint256)", +"7df38c5b": "wad()", +"7df3a229": "PissToken()", +"7df432c9": "minSelfBuyPrice()", +"7df4732e": "seeZombieStar(uint256)", +"7df47407": "SigProof()", +"7df4c235": "kolidat()", +"7df52ba8": "Arbitrate(uint32,uint32,bool)", +"7df545c7": "MaximumSellableTokensChanged(uint256)", +"7df54c73": "setMiniPoolEdit_4(string)", +"7df5f4ae": "_upper(bytes1)", +"7df65a1d": "getMinersByAddress(address,address)", +"7df68a8b": "addPeriod(uint256)", +"7df73e27": "isSigner(address)", +"7df7ec18": "test_invalidEmptyEqVal()", +"7df82cc9": "veztUsers(uint256)", +"7df83cd0": "getDepositWithdrawList(address,uint256[])", +"7df841cd": "setPlayerVirusDef(address,uint256)", +"7df855f2": "getAuditAddress(address,address)", +"7df8833a": "createEvent(string,uint256,uint32)", +"7df9bb31": "heredar()", +"7dfa0b3f": "canSell(address,uint8,uint8)", +"7dfa7d79": "claimUnsoldTokens()", +"7dfac5a2": "accMinterOne()", +"7dfb0ba5": "getRecordOffers(address)", +"7dfb6626": "withdrawRewards(bytes32)", +"7dfbc19c": "HaltTime()", +"7dfbdf6d": "returnFundsFor(address)", +"7dfc64ca": "getTotalBudget()", +"7dfce5e9": "withdrawExcessReserves()", +"7dfce6d7": "MAX_INTEREST_AMOUNT()", +"7dfda44c": "AssignAddress(uint256)", +"7dfe1674": "CTB(uint256,string,string)", +"7dfe4302": "privateSaleTokens(uint256,uint256)", +"7dfe58d0": "clearEscapeRequests(uint256[],uint256[])", +"7dfe7741": "InviteAccepted(address,address)", +"7dfebff3": "addEth(uint256,uint256)", +"7e007c1e": "minimumWEI()", +"7e00d6d6": "enablePurchase()", +"7e00d77a": "mintExtendedTokens()", +"7e01c088": "removeWhitelistedAddr(address)", +"7e029bde": "setEthUsd(uint256)", +"7e02bb0f": "finish(address,address,address)", +"7e03ad1a": "numImports()", +"7e057b8e": "IYMAYA()", +"7e06ec93": "MDOSToken(address,address)", +"7e070df6": "rootOwnerOf_(uint256)", +"7e07877a": "hasFailed(address,uint256)", +"7e080911": "TRUEToken(address)", +"7e08a846": "tokenCollectedOf(uint256,address)", +"7e09d09b": "theFloatMultiplier(uint256)", +"7e09f0aa": "predictMarket()", +"7e0a16b1": "forwardAllRaisedFunds()", +"7e0be7e3": "upgradeGooCost(uint256)", +"7e0c1792": "oracle_address()", +"7e0c240d": "LianJieToken()", +"7e0cfc3d": "truncate(uint8[],uint8)", +"7e0d149e": "getGameAddresses(uint256)", +"7e0d8b27": "leekStealToday_()", +"7e0e20ba": "HighGasAmount()", +"7e0e471d": "Licensium(uint256,string,uint8,string)", +"7e0f7a87": "getUnixTimeStamp()", +"7e1028b2": "_doTradeWithEth(address,uint256,address,uint256)", +"7e1055b6": "icoEndTime()", +"7e111f59": "sell_toContract(uint256)", +"7e11f453": "ETH_Rate()", +"7e12180e": "setSaleDuration(uint256)", +"7e133564": "donateDna(address,uint256,uint8)", +"7e13b0be": "changeTokenDecimals(uint256)", +"7e150d66": "maxTxSize()", +"7e1629ab": "token_transfer(address,address,uint256,bytes,string)", +"7e167198": "_preValidatePurchase(address,uint8,uint256)", +"7e168086": "preallocate(address,address,address,address)", +"7e169860": "createNewEvent(bytes32,string,string,uint256,uint256,string,string)", +"7e16cfde": "getGameBlockNumber(uint256)", +"7e16eca0": "getContractTimestamps(bytes32)", +"7e1721ee": "LMAOtoken()", +"7e179816": "setRefShare(uint256)", +"7e18dd21": "motodoughToken()", +"7e1934f9": "swpFund()", +"7e199b70": "startCrowd(uint256,uint256,uint256)", +"7e1a6753": "Destruct()", +"7e1ab812": "utrToken()", +"7e1b52f6": "doftManager()", +"7e1c06b6": "newOwner(uint256)", +"7e1c0c09": "totalTokens()", +"7e1c4205": "query2(uint256,string,string,string,uint256)", +"7e1cae40": "changeRefundToken()", +"7e1cb559": "members(bytes32,address)", +"7e1cd42f": "convertIcoBalance100to70()", +"7e1cd79c": "Voting(bytes32[])", +"7e1db495": "addPendingWithdrawl(uint256,address,bool,bool)", +"7e1db516": "init3_block_height()", +"7e1e06ea": "EventTransferWasReset()", +"7e1e1ff6": "Giorgi()", +"7e1e447e": "total_wins_count()", +"7e1f2bb8": "createTokens(uint256)", +"7e1f89c8": "PRE_SALE_START()", +"7e20e7c0": "getRegistryDataMinter()", +"7e2224bd": "compress(bytes)", +"7e23f7cd": "teamKeepingLockEndBlock()", +"7e241c64": "getServiceNameByAddress(bytes32,address,address)", +"7e241dbf": "unlockMiner()", +"7e245fac": "PHXTKN()", +"7e24cb8f": "reservedFundLeft()", +"7e25ac5b": "destroyRewards()", +"7e25b7d6": "implements(address,bytes4)", +"7e266385": "setPrefix(uint8)", +"7e26639f": "saleLimit()", +"7e27133f": "tradingMonDataContract()", +"7e274f7e": "Reederem(string)", +"7e288822": "pendingWithdrawal()", +"7e298249": "setPriceInWei(uint256,uint256)", +"7e29d2a3": "TokenCoin4()", +"7e29dad0": "testBuyExceedHardLimit()", +"7e29f242": "changeDiscount(uint256,uint256,uint256,uint256)", +"7e2a0141": "removeToken(address[16],address,uint256)", +"7e2a6db8": "trusted()", +"7e2ac454": "disagree(bytes32,bytes32,bytes32[])", +"7e2bc821": "SaturnPresale(address,address,uint256,uint256,uint256)", +"7e2bef39": "calldata(uint256)", +"7e2bf3c6": "freezeCreditScore(address,uint256,string)", +"7e2c0459": "_transfer(bytes32,bytes32,uint256)", +"7e2c83fc": "seriesByAddress()", +"7e2ce380": "_calculateOwnerCut(uint256)", +"7e2e3958": "setBUS(bytes32,uint256,string)", +"7e2e756e": "testToUint32()", +"7e2f014f": "addResolversDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", +"7e2f0843": "updateMaxTokensCollected(uint256,uint256)", +"7e2f6e3b": "getReserveSupply()", +"7e2fc2b6": "_Crowdsale(address,uint256,uint256,address)", +"7e2fdb0c": "dataForBuy(address)", +"7e2ff5f9": "setPreSale()", +"7e300fc6": "crowsaleShare()", +"7e319e4a": "getNextAssignedPolice(uint256,address)", +"7e31c53a": "HodlWithdrawn(uint256,address,uint256)", +"7e32456d": "STRC_SUPPLY()", +"7e327168": "allocatePresaleTokens(address,string,uint256,string)", +"7e32a592": "repairTheCastle()", +"7e32baea": "TRIPToken()", +"7e32fc47": "registerAsset(string,bytes32)", +"7e331a99": "setUserMessage(string)", +"7e33e361": "setRowQuiter(bool)", +"7e340b01": "getLatestPayday(address,address)", +"7e342507": "gameIndexToBuy()", +"7e3475a8": "lockQtyToAllowTrading()", +"7e347b82": "REALCrowdsaleMock()", +"7e34dbe0": "deposit(uint256,uint256,uint8,bytes32,bytes32)", +"7e363ffa": "setupCost()", +"7e36edce": "RATE_DAY_28()", +"7e373bc0": "bulletAmount()", +"7e380099": "addOrgCertificate(string)", +"7e38b424": "reverseFiatPurchase(uint256)", +"7e38d065": "ADVISORS_AND_CONTRIBUTORS_TOKENS()", +"7e39082f": "escrowedMYB(address)", +"7e3bfa1d": "removeRecoveryAddress(address)", +"7e3d15ae": "nextHolder(address)", +"7e3d45ef": "gameMiningToken(uint16)", +"7e3d8813": "setup(address,uint256,uint256,uint8)", +"7e3da027": "approveAndCustomCall(address,uint256,bytes,bytes4)", +"7e3dbf96": "addr(bytes,bytes)", +"7e3df726": "EZEtherMarketplace()", +"7e3e40ec": "getRequiresKing(bytes)", +"7e3e7bdf": "checkReward(address,uint256,uint256)", +"7e3ef7cd": "getMyBalance(address)", +"7e3ef935": "setReleaseMake(uint256,bool)", +"7e3f2b2d": "getDocumentSignsCount(uint256)", +"7e3f5b70": "JFBToken()", +"7e3faec1": "GoldTxFeePool(address,address,bytes)", +"7e402eb0": "setSecondAdmin(address)", +"7e410427": "aDay()", +"7e4115ba": "toAddress(string)", +"7e4241b4": "ownerTake(uint256,address)", +"7e429f02": "burnMultDen()", +"7e42be1a": "quarantineAddress(address)", +"7e42f8b4": "setRefund(bool)", +"7e42f94d": "horsePr(uint256)", +"7e43185a": "showCollectorsAddresses()", +"7e4358c3": "used_in_contract_fees()", +"7e43828e": "bountyTokenWithdrawal()", +"7e441048": "hasCategory(address,uint256,uint256)", +"7e445d44": "setEndICO(uint256)", +"7e456808": "reclaimUnusedEtherBalance()", +"7e457b85": "startEarlyStage3()", +"7e458492": "addInspector(address)", +"7e45d15c": "___coinAddress()", +"7e466bb4": "forTeamCOT()", +"7e470882": "setStrF1(string)", +"7e482379": "totalEthInWeiForSecondIco()", +"7e4929c4": "priceBox2()", +"7e4930ae": "modifyCap(uint256)", +"7e495dae": "changeMinters(address,address,address)", +"7e4985c5": "LookUpAvailableDivLarge(address)", +"7e49aa05": "testSelfdestructIsRevertedWithMinReturn()", +"7e49d530": "fechVoteMainInfoBySnapshotBlock(uint256)", +"7e4a1731": "returnWallet()", +"7e4a82b1": "foreignBuyTest(uint256,uint256)", +"7e4b5eb5": "getPhControlLimits(bytes32)", +"7e4c3b2e": "requestRate(string,string,bool,uint256,uint256)", +"7e4d25c5": "Refundably_if_gasprice_more50gwei_Send_Votes_From_Your_Balance(address,uint256)", +"7e4d4495": "getEthCapPerAddress()", +"7e4d4653": "echoTest(uint256)", +"7e4d5ea1": "STARTDATE()", +"7e4e46e7": "withdraw_profit(address,address)", +"7e4e95d7": "airDropPercent_()", +"7e4eb35b": "left43(uint256)", +"7e4f1a9f": "AKMJCHAIN()", +"7e4f6b95": "MyAdvancedToken(uint256,string,string)", +"7e4f9397": "gSetAlive(bool)", +"7e4fdd0b": "SetherStarted()", +"7e545305": "firstBalance(address)", +"7e5465ba": "approve(address,address)", +"7e549814": "setEscrowedProjectPayees(uint256,address)", +"7e54b8e2": "AddCandidate(string)", +"7e551b75": "hashOf(uint256)", +"7e55a212": "JustTheTipCrowdsale(uint256,uint256,uint256,address)", +"7e55a311": "getPurchaseSeconds()", +"7e55b83c": "readValidDate(uint8)", +"7e55ec25": "CryptoPokemon()", +"7e569e66": "TDEContributorCount()", +"7e56d25f": "ReplyShare(uint256,string,bool,string)", +"7e56fde5": "calculateEggBuySimple(uint256)", +"7e5713d9": "setGenesisAddressArray(address[])", +"7e574098": "confirmEthTransactionRequest()", +"7e575524": "poolMintAmount()", +"7e577274": "onAuctionEnd(bytes32)", +"7e580d30": "ZCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"7e58f815": "pauseRoundA()", +"7e59092e": "getVersionById(uint256)", +"7e5912d7": "reputationHashSubmissions(address)", +"7e59d513": "deathData_f1()", +"7e5a4dde": "getMarriage(uint256)", +"7e5a66df": "uniqueSpinnerOwners(uint256)", +"7e5a9ed9": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", +"7e5af26c": "BugisContract()", +"7e5b1cdd": "GOToken()", +"7e5c344a": "Upgrade(address,address,uint256)", +"7e5c86a2": "moveFundToOwner(uint256)", +"7e5cd5c1": "disableMinting()", +"7e5e190c": "getBaseTypeStats(uint256)", +"7e5fc6f4": "calculateIcoBonus(uint256,uint256,uint256)", +"7e600c87": "doSend(address,address,address,uint256,bytes,bytes,bool)", +"7e602078": "assertInvalidState(address)", +"7e60a4bf": "removeLockFunds(address[])", +"7e61c768": "isClient(address,address)", +"7e61e6ef": "GasWar()", +"7e621667": "sendFromOwn(address,uint256)", +"7e626e58": "getUnPurchasedProducts()", +"7e62eab8": "withdraw(int256)", +"7e638974": "CalculateFinalDistance(bytes32,bytes32,bytes32,bytes32)", +"7e63dd86": "seed_additional_token(uint256)", +"7e64721f": "viewNumberOfMessages()", +"7e6503bb": "getActiveOrderCounts()", +"7e655ddd": "tokensSoldInThisRound()", +"7e6667c9": "Invoked(address,bool,uint256)", +"7e6688a2": "lastJackpotPayout()", +"7e668cd2": "fSqr(uint256)", +"7e66f15f": "nowSupply()", +"7e67429f": "switchToCrowdsale(string)", +"7e687a8b": "getTotalInvoicesCount(address,uint256[])", +"7e69671a": "distributeFees(uint256,uint256)", +"7e69ba22": "ethForTokens(uint256)", +"7e69e0fc": "ETH420on420()", +"7e6a0720": "removeClaim(uint32,int256,string,string)", +"7e6b867f": "insertProductIntoCart(uint256)", +"7e6bdb95": "getTransactionHashes(uint256,uint256,bool,bool)", +"7e6beae1": "team2018TokenCreated()", +"7e6c945c": "FileHashInt()", +"7e6d0fa0": "isWithdrawAllowed()", +"7e6d6928": "SmartBusinessToken()", +"7e6d86ff": "BOUNTIES_SHARE()", +"7e6dce9c": "throwIn()", +"7e6e65f3": "acceptSellOffer(uint32)", +"7e6eee20": "olympusTest()", +"7e6f6947": "setTokenBurnFeeAbs(address,address,uint256)", +"7e71496b": "TRCToken(uint256,string,string)", +"7e71572b": "_checkCap(uint256,uint256)", +"7e71ccd8": "HShoe_Limit()", +"7e71fb09": "transferOwnershipImmediately(address)", +"7e72fb52": "buyToken(address)", +"7e7307c5": "Contribute(bool,uint8)", +"7e737551": "setMaxWhitelistLength(uint256)", +"7e7388b1": "NewRiskAdr(address)", +"7e742432": "addNewDegree(string,bytes32)", +"7e74325f": "turn(address)", +"7e74a1ed": "depositRate()", +"7e754146": "getCurrentImpeachmentUrlDetails()", +"7e761240": "setMyName(bytes32,bytes32)", +"7e766e1f": "IonixxToken(uint256,string,string)", +"7e76b836": "minter1()", +"7e7712f2": "standardReleaseAmount()", +"7e773d9d": "testTimestamp()", +"7e77509e": "isRoundingErrorFloor(uint256,uint256,uint256)", +"7e779985": "isTransactionSuccessful(uint32)", +"7e77c503": "initialize(string,string,uint256,address,address)", +"7e780157": "PERCENT_100()", +"7e7894e4": "PendingETHs()", +"7e79a562": "TripPay(uint256,string,string)", +"7e79e8ba": "getEmail()", +"7e7a2fbf": "contribute_toTheGame()", +"7e7af34f": "setPostICOSale(bool)", +"7e7be158": "validatePurchaseAndDistributeFunds(uint24[],uint24[],uint256[])", +"7e7c16de": "secsPerBlock()", +"7e7c4243": "getTheBet(address)", +"7e7c8c6e": "catToken()", +"7e7d5689": "requireTrade(address)", +"7e7d76ad": "SPORT(uint256,string,uint8,string)", +"7e7db227": "lastAccountNum()", +"7e7dd581": "oldDBAddress()", +"7e7e4b47": "getOutcome()", +"7e7e5a75": "changeIdentityNarcoRespect()", +"7e7f1bfd": "total_refunded()", +"7e7f8e1e": "AddItem(uint256)", +"7e809973": "hash(address)", +"7e815fb4": "ScooterCoin()", +"7e81701a": "sitExchanger()", +"7e81b6aa": "KingdomFactory()", +"7e823bd1": "OMGToken()", +"7e82d0e6": "dbkWithdraw()", +"7e83027f": "setRegionForSaleToAddress(uint256,uint256,uint256,address)", +"7e8306ae": "profitrate()", +"7e83185b": "updateImageAddress(string)", +"7e835e86": "minechaincointest(uint256,string,uint8,string)", +"7e837ccc": "dispute_confirmed()", +"7e84adda": "setGameState(bytes32,int8[128],address)", +"7e85477f": "myInner1()", +"7e86e0f2": "BKFToken()", +"7e86f8e5": "blockedDeadLine(address)", +"7e873c2c": "uniq(uint256[])", +"7e87cf30": "tokenOpen()", +"7e888767": "getNumUsersToPayout(bytes32)", +"7e88f603": "returnDeposit()", +"7e893159": "changeIssuer(address)", +"7e8a9db9": "BasketEscrow(address,address,uint256)", +"7e8ab941": "_play(uint256,uint256)", +"7e8bca6f": "Tenteniy()", +"7e8bf1cd": "calculateCurrentMarketPixelPrice()", +"7e8c3ab6": "distributePartnerTokens()", +"7e8ca5f6": "unlockAdvisorTokens()", +"7e8d1a39": "finishIssuing()", +"7e8d2c19": "reserveForJackpot()", +"7e8e13e4": "Lesson_7(address,uint256)", +"7e8e353c": "setValidatorForND(uint256,uint256,uint256,uint256)", +"7e8e6d45": "setScaleContractAddress(address)", +"7e8ecf4f": "balanceOfInvestor(address)", +"7e8ff036": "submit(bytes32[])", +"7e904a48": "getNumContents(uint256)", +"7e904f7b": "stakePrimordialTokenFrom(address,uint256,uint256)", +"7e90819a": "unofficialApplicationSignUp(string)", +"7e9266bb": "ChallengeToken()", +"7e926b4b": "renounceOwnership(bool)", +"7e92a7e8": "getPublicBattlePokemon1()", +"7e93150b": "_transferHelper(uint256)", +"7e93163b": "tip(bytes32,bytes32)", +"7e932d32": "setFrozen(bool)", +"7e93810b": "playe1Bid()", +"7e93e4db": "KhabibvsMcGregor()", +"7e944756": "getPlayersCollection(address)", +"7e945935": "oneTokenInCents()", +"7e947347": "changeWeiCostOfToken(uint256)", +"7e94cf0c": "getValidityBondAttoeth()", +"7e951bc6": "update_coeff()", +"7e95385c": "setJackpot(address)", +"7e95cd27": "forbid(address)", +"7e95d2f6": "doSend(address,address,uint256,bytes,address,bytes,bool)", +"7e968195": "batchTransferETH(address[])", +"7e969692": "EthRateChange(uint256)", +"7e97ca29": "registeredInDay(address)", +"7e98bc8f": "Accumulate(address,uint256)", +"7e990ad8": "isRentals()", +"7e999cd9": "revokeMintDelegate(address,int256)", +"7e9a8685": "getWager(address)", +"7e9abb50": "getUnavailableTakerTokenAmount(bytes32)", +"7e9ad046": "upper(string)", +"7e9aef53": "elementsAreSet()", +"7e9b98ae": "transferFromWhiteList(address)", +"7e9ba301": "getResponseAddress()", +"7e9cd30c": "rescueLostHero(uint256,address)", +"7e9d2ac1": "burnAll(address)", +"7e9d7f68": "namiCrowdSaleAddr()", +"7e9de0bc": "buyTile(uint8,uint256,address)", +"7e9e1561": "getStakerFromDelegateKey(address)", +"7e9e1637": "getStockTotal(address)", +"7e9e1cb6": "Execution(bytes32)", +"7e9e3b3b": "RESERVED_TOKENS_BOUNTY()", +"7e9e3d51": "TokenERC20(string,string,uint8,address,uint256)", +"7e9e4b5d": "firstStageTokensSold()", +"7e9e511d": "issueAndActivateBounty(address,uint256,string,uint256,address,bool,address,uint256)", +"7e9e940a": "ClaimDisbursement(address,uint256)", +"7e9eaf41": "getMinBorrowedValue()", +"7ea01c0d": "currentLowest()", +"7ea074b3": "GetJackpots()", +"7ea11880": "VestedPayment(uint256,uint256,uint256,uint256,uint256,address)", +"7ea15da1": "priceUpdateAt()", +"7ea17a1d": "ORACLIZEQUERYMAXTIME()", +"7ea1a871": "announce(uint256,uint256,uint256)", +"7ea1b7ba": "_closeSale()", +"7ea1e2d9": "ethpause()", +"7ea23fa6": "unlockEthBalance(address,uint256)", +"7ea2bbac": "getOwnerGennezise(address)", +"7ea2be2b": "log32(uint32)", +"7ea2ddeb": "randomNumber(address,uint256,uint256)", +"7ea2e31c": "EligmaMintingContract()", +"7ea2fc89": "cancelBetByPlayer(uint256)", +"7ea30d5d": "BuyCreditsByEth(uint256)", +"7ea310d4": "getCurrentPrice(uint40)", +"7ea31352": "getReadableStats()", +"7ea31ded": "isBuyBackOne()", +"7ea46993": "revokeMultiplePermissions(address,bytes32[])", +"7ea531e7": "_generateNewHorseShoe(uint256,uint256,address)", +"7ea5d50e": "tokenWinRatio()", +"7ea5e7d3": "reserveDeployment(address,bytes32,address,uint256,uint8,bytes32,bytes32)", +"7ea60eb8": "roleEditorAddress()", +"7ea61ed7": "withdrawInternal(address)", +"7ea6c6ba": "MemoLandCoin()", +"7ea80eb2": "_receiveBuyLandForCandy(address,uint256)", +"7ea83869": "increasePreSaleSupply(uint256)", +"7ea84748": "addPlayerOrder(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7ea868e1": "makeInvest(uint256,bytes5)", +"7ea8f250": "isRunningPreIco(uint256)", +"7ea94985": "calcHashes(uint32,uint32)", +"7ea95733": "emissionReleaseThreshold()", +"7ea9b2bc": "REQUEST_URL()", +"7eaa0c29": "LogTransactionFailed(bytes32,address)", +"7eaa4389": "finish(uint8,uint8,uint8)", +"7eab4e48": "openGiftFromSanta(address)", +"7eac7382": "getCAOAddres()", +"7eae1626": "getBack()", +"7eae6759": "_setBalance(address,uint256,uint256)", +"7eae75a8": "EtherMango()", +"7eaef50c": "over()", +"7eaf45f8": "SaveAccountBuyingGodz(address,uint256)", +"7eafcdb1": "updateGroupName(address,address,bytes32)", +"7eb13d8a": "_SetEducationQualificationOf(uint256)", +"7eb14990": "isBuyer(address,uint256)", +"7eb1bfb9": "feeWithdrawEthAll()", +"7eb2b856": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32)", +"7eb30cd0": "checkTreeStructure(address,address)", +"7eb312b1": "SUCCESS_BONUS()", +"7eb41ce5": "modifyCfo(address)", +"7eb4b376": "UpgradeSpaceETH(uint8,uint256)", +"7eb52145": "_preValidateFinalization()", +"7eb5df39": "equal(uint256[],uint256[],string)", +"7eb60591": "NVISIONCASHTOKEN()", +"7eb6634c": "phasePresale_From()", +"7eb69ba1": "hint(int256,bytes32,string,bytes20)", +"7eb82601": "getHighestBlockNumber(uint256)", +"7eb96aa3": "setCurrentWeekPool(uint256)", +"7eb9f04a": "updatePriceInWei(uint256,uint256)", +"7eba7ba6": "getSlot(uint256)", +"7ebaaa60": "MemberBoughtToken(address,uint256,uint256,uint256,uint256,uint256)", +"7ebadcd8": "acceptPayments(bool)", +"7ebd02f8": "typeA()", +"7ebd89ee": "TokenSale(address)", +"7ebdab54": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[],uint256[])", +"7ebdc478": "settleTimeout()", +"7ebdf4ac": "setMaxAllowedBetInEth(uint256)", +"7ebdf57d": "icoTimeBonusPhase1End()", +"7ebe7626": "FreezeTokensReleaseTime()", +"7ebedc34": "hasEndedIco()", +"7ebf65fd": "changeGasLimitOfSafeSend(uint32)", +"7ec0c39c": "whitelistPrincipleLockPercentage()", +"7ec0f30d": "ack(string)", +"7ec13996": "getBytes32Value(string)", +"7ec1c1aa": "acceptPAIReceiptOwnership()", +"7ec20127": "createPoolIfNeeded()", +"7ec2402f": "freezeSupply()", +"7ec27000": "AiTokenToken()", +"7ec2ae46": "setSparkDividends(address)", +"7ec2e264": "_generateCode(address,uint256)", +"7ec2fd36": "capReleaseTimestamp()", +"7ec2fd95": "DrawCom()", +"7ec36494": "osmCoin()", +"7ec3e63e": "getsubscribersSinceLastHatch(address)", +"7ec4a5a6": "requestReturn(address)", +"7ec4edbe": "offset(address,address)", +"7ec509c4": "external_call(address,uint256,uint256,bytes)", +"7ec54bdc": "eosShareDrop()", +"7ec62cf7": "MthereumToken()", +"7ec650db": "__mul(bytes,bytes)", +"7ec69c50": "changeWhitelistingStatus()", +"7ec72d3c": "setSwap(address,uint256)", +"7ec80c27": "priceStep6()", +"7ec82929": "setFunctionIdVoteRules(bytes4,bool,uint256[5])", +"7ec8ff4f": "crosairVoucherSoldCount()", +"7ec9084d": "RRCoin()", +"7ec9290b": "setCouldTrade(uint256)", +"7ec9c3b8": "per()", +"7ecab507": "registerPresale(address,uint256,uint256,bool)", +"7ecacb95": "Example7()", +"7ecaf696": "createMultiple(uint256[],uint256[],uint256[],address[])", +"7ecb6475": "aggiungiFrase(string)", +"7ecc2b56": "availableSupply()", +"7ecc866f": "changeAllowAllWhitelistIssuances(bool)", +"7eccc40a": "contains(uint256,address)", +"7ecdb299": "SetEthBalance(address,uint256)", +"7ecdbf61": "SPPSeriesA(uint256,string,uint8,string)", +"7ece75dd": "lockPeriodStart()", +"7ecedac9": "allInitialOwnersAssigned()", +"7ecef543": "_getAppliedPolicyIndex(address,uint8)", +"7ecf9142": "depositToken(address[2],uint256[7],uint8,bytes32[2])", +"7ecfa8a8": "ico(address,address,uint256,uint256,address[],uint256[])", +"7ecfae65": "invokeFor(address)", +"7ecfb675": "stdBalance()", +"7ed02af9": "acceptNegotiationTenant()", +"7ed02cbe": "fireLottery(uint8)", +"7ed040f2": "prod(bytes32,uint128)", +"7ed04cf2": "getTokenNames(address,uint256[])", +"7ed05315": "newGubberment()", +"7ed06cf3": "nativeProof_verify(string,bytes,bytes)", +"7ed0c3b2": "write(bytes)", +"7ed0f1c1": "redeemed(uint256)", +"7ed18aa5": "WhitelistUpdated(address,uint8)", +"7ed19af9": "multiAccessRevoke(bytes32)", +"7ed1ca6a": "BetExecuted(uint256,address,uint256)", +"7ed273e9": "_mintToken(uint256,string,address)", +"7ed2d5ae": "getBlockBalance(uint256,uint256)", +"7ed32df6": "buyRtc()", +"7ed37b8d": "setPotato(string)", +"7ed40602": "IsICOstarted()", +"7ed4e321": "CakeToken()", +"7ed51b47": "getResult(uint256,uint256,uint256,uint256,uint256)", +"7ed57fa0": "pregnantHorses()", +"7ed5a6d4": "TYPE_EXPLORER_FREIGHTER()", +"7ed5d621": "Crowdsale(address,address,address,uint256,uint256,uint256)", +"7ed65c87": "closeProvider()", +"7ed67185": "getPoolTimeoutInBlocks(uint256)", +"7ed7101d": "mainIcoStartBlock()", +"7ed77c9c": "setContract(bytes32,address)", +"7ed788c8": "push(address,uint256,uint256)", +"7ed83d50": "INCO()", +"7ed8a719": "addItem(string,string)", +"7ed8b225": "createMesaVerify(bytes32[])", +"7ed9c734": "burnRemainingToken(uint256)", +"7ed9d3a3": "_error(uint256,bytes32)", +"7eda09e8": "test_me(int256,int256,int256)", +"7edaabd8": "sendApprovedTokensToInvestor(address,uint256,string,string)", +"7edaca89": "DAToken(uint256,string,uint8,string)", +"7edba6c8": "sam()", +"7edd9060": "_nominCap()", +"7eddea21": "STAKEHOLDERS_POOL()", +"7ede036d": "minimumSupply()", +"7edea039": "private_addPermittedRoll(uint256)", +"7edebaf1": "buyXname(string)", +"7edee605": "receivePayment(uint256,uint256,bytes)", +"7ee0cda4": "validate(string,uint256)", +"7ee0d91c": "isKycRequired(address)", +"7ee212bb": "planetIndexToApproved(uint256)", +"7ee23d59": "removeNodeFromStakedList(address)", +"7ee26b2e": "callKoikeToken(address,address,uint256)", +"7ee26e63": "_alreadyInList(address)", +"7ee2ea76": "isSafeHavenToken()", +"7ee42e6d": "_createToken(string,bytes5,address,uint256)", +"7ee54b82": "TYU(uint256,string,uint8,string)", +"7ee54eec": "onTicketPurchase(uint32,address,uint16[])", +"7ee55c97": "isICO()", +"7ee5c97a": "returnReferral(address)", +"7ee5eef2": "changeToPublicSale()", +"7ee62440": "highEtherBonusLimit()", +"7ee65635": "LookAtDepositsToPlay()", +"7ee6b2d0": "fundingMinCapInWei()", +"7ee7f42a": "MIN_RELEASE_DATE()", +"7ee80d17": "isScheduled()", +"7ee81902": "DatoDEX(address,address,address,uint256,uint256,uint256)", +"7ee8703a": "getProgressOfAddressAndId(address,address,uint32)", +"7ee96f6d": "getEnd(uint256)", +"7eeb5906": "createCountry(string,string,uint256)", +"7eec20a8": "cancelTask(uint256)", +"7eed2814": "transferAD()", +"7eee1ab6": "HahaCoin()", +"7eee288d": "unlock(address,uint256)", +"7eee56f9": "issueIcoCoins(address,uint256)", +"7eee6d1f": "getUserQuickPromoBonus(address,address)", +"7eeec2cf": "GigaWattToken()", +"7eefe47e": "editCode(uint256,string)", +"7ef01fb9": "totalLockedBonus()", +"7ef0356a": "littafiTimeCapsule(bytes32,string,string,string,string,uint256)", +"7ef039f8": "candySentAmount()", +"7ef09476": "transfer(uint64,address)", +"7ef1925b": "getShareRange(uint256,uint8)", +"7ef1a396": "YOU9COINToken(string,string,uint8,uint256)", +"7ef1ab2c": "payoutRange()", +"7ef224ee": "getContractOrNormal(address)", +"7ef26d42": "HardCapEthereum()", +"7ef2bd52": "currNumOfUpgrades()", +"7ef3bb63": "createKitties()", +"7ef3e741": "totalEtherReceived()", +"7ef4cabb": "nextSupplyAfterBlock()", +"7ef50298": "registry(bytes32)", +"7ef581cc": "whitelistAdmins()", +"7ef58e73": "totalGooProduction()", +"7ef59d01": "setTrader(address,bool)", +"7ef5b6ea": "refillTokens(uint256)", +"7ef5e6a2": "rescale(int128)", +"7ef61e28": "dayEthInLimit_()", +"7ef72eb5": "AlphaMarketCoin(address)", +"7ef7ce92": "revokeMint(uint256)", +"7ef81a34": "TestableTwoStageSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7ef9016e": "MultiTransferValue(address[],uint256)", +"7ef92867": "Faucet(address)", +"7ef95c6f": "extractAccountAllowanceRecordLength(address)", +"7efa1433": "EVNTToken(address)", +"7efc05ae": "TUBECOIN()", +"7efc2315": "minPaymentForAnswer()", +"7efcbb33": "getTradeRecord(uint256)", +"7efce4ff": "TransactionRefunded(uint256,uint256)", +"7efce591": "TokenRDN(uint256)", +"7efd3441": "DynamicSKx2(uint256)", +"7efd9112": "decodeTokenId(uint256)", +"7efe0e76": "PhoenixFundDeposit()", +"7efe294c": "removeFromFreezedList(address)", +"7efe3d86": "dataControlChangeMinApproval(uint8)", +"7efe64ba": "InfinityHourglass()", +"7eff1465": "setAccountAllowance(address,address,uint256)", +"7eff275e": "changeProxyAdmin(address,address)", +"7effb427": "TTTToken()", +"7efff887": "topUpBalance()", +"7f002ffe": "setTradeable(bool)", +"7f004afa": "participantRoundChange(address,address,uint256)", +"7f005c7c": "showHiddenValue()", +"7f006ce1": "reading_card_upright_at(uint8)", +"7f008a0a": "cancelSell()", +"7f01bb38": "getVestingRevocable(address,address)", +"7f052e03": "commitPlasmaBlockRoot(bytes32)", +"7f053808": "approveAndAuction(uint256,uint256,uint256,uint256)", +"7f0554ca": "mntToken()", +"7f056637": "testExecuteSellOrder()", +"7f05c3a6": "supportAccounts(address)", +"7f067ff7": "Bitcoinsummit()", +"7f069942": "transferToBeneficiary()", +"7f070a9b": "withinRefundPeriod()", +"7f0899f2": "AddTicket(bytes5[])", +"7f08a250": "testPoint(uint256[3])", +"7f08ea8b": "getBetPool(uint256,uint256)", +"7f08ea8f": "getTotalTokensPerArray(uint256[])", +"7f09171b": "addAd(address,uint256,uint256,uint256,string,string)", +"7f095bfb": "multiSendB(uint256,uint256)", +"7f09ad64": "drainMe(uint256)", +"7f09bd1d": "setEthPreAmount(uint256)", +"7f09beca": "moveToWaves(string,uint256)", +"7f0a1bed": "bidderPlaceBid()", +"7f0b61f7": "ManagerEnabledEvent(address)", +"7f0bd881": "wanport()", +"7f0c949c": "setJurisdication(string)", +"7f0cd33c": "ApproveAndtransfer(address,uint256)", +"7f0d35e2": "totalPublicSaleWei()", +"7f0da94e": "cooloffIncrement()", +"7f0ed037": "setKickOff(uint8,uint256)", +"7f0f04a8": "unregister(bytes32,address,uint256,uint256,uint256)", +"7f0f09af": "EtherdeCoin()", +"7f102c16": "currentGameStatus()", +"7f10a3c0": "presaleBonusAddress()", +"7f1165c1": "getSencBalance()", +"7f1482b1": "round3Bonus()", +"7f15a21c": "modify(address,address,uint256)", +"7f15a6a3": "setCCH_edit_31(string)", +"7f16ab50": "replaceAuthorised(address,address)", +"7f16d7b3": "TRL2()", +"7f1731b6": "unsetRegistrar(uint256,address)", +"7f17b05d": "OwnerAddress()", +"7f17b79d": "setGameCost(uint256)", +"7f17ce9b": "DIGIPLACED()", +"7f180db7": "kudos(uint256)", +"7f187d2d": "score(bytes32,string)", +"7f18b569": "setKncPerEthBaseRate()", +"7f18f10c": "setGeneContractAddress(address,address)", +"7f191255": "punchOut(address,uint64)", +"7f1926c7": "GagarinToken()", +"7f1a2a73": "getEmployerAvgRating(address,address)", +"7f1a4c1f": "withdrawContributorsTokens(address,uint256)", +"7f1a8749": "purchaseMakeAdv(uint256,string,string)", +"7f1b1e51": "testTooFewTokens()", +"7f1b8cc3": "getUsersByBalance()", +"7f1bb473": "daysFrom(uint256)", +"7f1bffc1": "_removeToken(uint256)", +"7f1c25d0": "HolaMundo()", +"7f1ce417": "isITOFinished()", +"7f1ebc4d": "reentrantGuard()", +"7f1ecfe0": "getCurrentBid()", +"7f1f0507": "publicRate()", +"7f205a74": "SALE_PRICE()", +"7f205c8c": "getOraclizeCallback(bytes32)", +"7f205f02": "changeBoolean()", +"7f21d498": "getMinBid(uint256)", +"7f23fb92": "setGenres(string)", +"7f2438cb": "sellFor(address,uint256)", +"7f25c1e4": "etherRaisedByState(uint256)", +"7f2609eb": "LogFinalizeMatch(uint256,uint8)", +"7f26fc7d": "removeCreator()", +"7f279a73": "Cashing(address,uint256)", +"7f2857b6": "viewFunc()", +"7f28c44f": "isIcoSuccessful()", +"7f290d2d": "ExpiringMarket(uint64)", +"7f293e02": "ChangeCoinCrowdsale()", +"7f294b10": "setPI_edit_26(string)", +"7f298f93": "crowdsaleEndBlock()", +"7f2a4784": "KYC_VERIFICATION_END_TIME()", +"7f2aeea4": "getType(bytes32)", +"7f2b06ed": "bonusLimit3()", +"7f2b88ea": "getThirdPhaseCap()", +"7f2c1633": "prenesiKovance(address,uint256)", +"7f2c4ca8": "getLastBlock()", +"7f2e01fb": "ListValidated()", +"7f2e0ec2": "remainRewards()", +"7f2e98ad": "PoissonData()", +"7f2f506b": "CLAIM_INTERVAL_DAYS()", +"7f300576": "startThrowing()", +"7f301b83": "setMetadataHash(string)", +"7f31b480": "changeMasterAddress(address,address)", +"7f31cbfa": "batchShareAmount(address[],uint256[],uint256,uint256,uint256)", +"7f32f6de": "isSoftCapCompleted()", +"7f33375b": "getReturnedData()", +"7f334bd1": "_generateRandomId(string)", +"7f33c1e1": "Ethurem()", +"7f3436ef": "addOrganisation(address,string,string,string)", +"7f349329": "currentRoundSupply()", +"7f35571f": "Sell(uint256,address)", +"7f3681f6": "setKNCRate()", +"7f3745ad": "execute_transfer_all(uint256)", +"7f3745db": "getTracksByArtist(address,uint256,uint256)", +"7f37b905": "salesCounter()", +"7f37fab6": "addActionToRole(string,string,string)", +"7f3800ba": "setMultihash(bytes32,string,bytes)", +"7f386b6c": "minimumPrice()", +"7f38a4a7": "updateUSDETH(uint256)", +"7f38b980": "setTokenDistributionPool(address)", +"7f38e526": "pendingPayments(address)", +"7f390088": "QYCC()", +"7f3a2472": "reserveIssue(address,uint256)", +"7f3a98b7": "burnMyBalance()", +"7f3ad651": "KayoToken(address,address,uint256,string,uint8,string,bool)", +"7f3bd56e": "disburse(address,uint256)", +"7f3c26b1": "rejectHours()", +"7f3c2c28": "registerContract(string,address)", +"7f3cb47b": "minimumAmountWei()", +"7f3cd28e": "tokenSalesByOwner(address,uint256)", +"7f3d5c4c": "ICOPaused()", +"7f3ded93": "voxFab()", +"7f3df4bb": "addBonus(uint32[],uint64[])", +"7f3e1841": "endSecondPeriodTimestamp()", +"7f3e4d1b": "setAtkNowForPlayer(address)", +"7f3f3398": "transferAndCallExpanded(address,uint256,bytes,address,address)", +"7f3f81c0": "confirmProposal(bytes32,address,uint256)", +"7f404b7f": "updateInt256(bytes32,int256)", +"7f40d9d8": "delayDonPhase(uint256,uint256)", +"7f4316ec": "getDefendPlayerList()", +"7f4384a8": "RichNiggas()", +"7f440d57": "getProjectReport(uint256)", +"7f445c24": "subRegistrar(string)", +"7f44fcfa": "_getPoints(uint256)", +"7f453951": "CBMDToken()", +"7f45b835": "getPrimaryRecord(string)", +"7f45ec91": "emitIssuance(uint256)", +"7f460693": "ownerPutCapital()", +"7f46550f": "CrowleyToken()", +"7f476471": "setRCContractAddress(address)", +"7f480f9d": "processDividends(address)", +"7f486ca6": "cancelChibiForFusion(uint256)", +"7f493ce6": "disableTokenTransferability()", +"7f497550": "scheduleTransfer(address,uint256,uint256)", +"7f498ffc": "setEnd(uint256)", +"7f4a1c52": "setExceed(uint256)", +"7f4a9691": "depositTokenToVault(address,uint256,uint256)", +"7f4ab1dd": "messageForTransferRestriction(uint8)", +"7f4ae68d": "restrictedAddress()", +"7f4af951": "pixelPrice(uint256,uint256)", +"7f4bf7d1": "Inerex(bytes32)", +"7f4c7064": "ESCROW_TOKENS_PERCENT()", +"7f4d5150": "CheckItemExists(uint256)", +"7f4d6aa4": "LogResumed()", +"7f4da132": "goldFee()", +"7f4db7fb": "testPrivate(uint256)", +"7f4e4669": "raiseInitialSupply(uint256)", +"7f4e4849": "getContractState()", +"7f4ec5a7": "toAddressThrow()", +"7f4ed2c7": "addToWhitelistMulti(address[])", +"7f4ed5ac": "sumHardCapICOStage2()", +"7f4edd72": "getAllAdIdsByUser(address)", +"7f4ef9d4": "getText(uint256)", +"7f4fd78e": "BTCCollected()", +"7f50c74b": "FIXED()", +"7f51bb1f": "updateTreasury(address)", +"7f52fcae": "tokenAmountPerUser()", +"7f5341da": "startTimeSale3()", +"7f5369f1": "DEFAULT_REVOCABLE()", +"7f5375c1": "getLastWin()", +"7f53b15d": "_ICOSale(address,uint256)", +"7f555b03": "erc20Proxy()", +"7f55b2d9": "cleanBalance()", +"7f55b87f": "createCountry(string)", +"7f564472": "resetAmountBonuses()", +"7f5651d7": "setNamehash(string,bytes32)", +"7f56c072": "SIEChain()", +"7f56c0b4": "setTeamFundWallet(address,address,uint256)", +"7f56ca73": "Volkstest2()", +"7f573a4f": "UNSOLD_SOLD_RATIO()", +"7f582b47": "howMuchWithdrawed()", +"7f58b9ee": "allQueryIds()", +"7f592be4": "TRANCHE2_ACCOUNT()", +"7f592cfe": "setLLV_edit_12(string)", +"7f59cbcc": "withdrawFromRelay()", +"7f5a259f": "FIXED_RATE()", +"7f5a285a": "notInWhitelistAllow()", +"7f5a448c": "switchToWhaleMode(bool)", +"7f5ae339": "isAdminister(address)", +"7f5b47cd": "eventApproval(address,address,uint256)", +"7f5b503c": "toB32(bytes,uint256,address)", +"7f5ba3cc": "REGULAR_TYPE2()", +"7f5ba79f": "registerNewProduct(uint256,string,string,string)", +"7f5bfe30": "PaymentExecuted(uint256,address,uint256)", +"7f5d3dc8": "getStats(uint256,uint256[7])", +"7f5d85f8": "testBurnGuyWithTrust()", +"7f5dfd16": "approveProxy(address,address,uint256,uint8,bytes32,bytes32)", +"7f5e495d": "defaultLimits()", +"7f5f0d6a": "resumeIco()", +"7f5f17b1": "getCompte_8()", +"7f5f9128": "alreadyReservedForTeam()", +"7f601a50": "getHouseCardsNumber()", +"7f602231": "tip(bytes32,address,uint256)", +"7f60b20a": "getSlice(uint256,uint256,string)", +"7f60bb7c": "applyBonusAmount(address,uint256,bytes32)", +"7f6150cb": "getRoundCurKeyNo(uint256)", +"7f626f1a": "setStore(uint256)", +"7f630259": "getSuperReferrerRate(address)", +"7f63040b": "CompcoinCash()", +"7f630b4c": "share(string)", +"7f63af42": "deployConsortium(address)", +"7f64727b": "getTreesOnSale()", +"7f649783": "addToWhitelist(address[])", +"7f64c34e": "deadline365()", +"7f64d2d3": "NCAAChampionship()", +"7f654b1c": "setLatestPayday(address,address,uint256)", +"7f6578d3": "REFUND_PERIOD()", +"7f6597e0": "AcuteEthereumCloudMiningunion()", +"7f660b01": "FEE_COLLECTOR()", +"7f66af09": "card_titanium_first()", +"7f66ccbe": "EthereumVerge()", +"7f66d1f8": "mOnApprove(address,address,uint256)", +"7f671c1b": "insert(int128)", +"7f686259": "migrateBalancesFromLegacyRep(address[])", +"7f695f28": "isFlying()", +"7f6a731c": "donationAmountInWei()", +"7f6ae0c0": "canUpdateDeveloperMiningPower()", +"7f6d8955": "RegisterOne(uint32,address,address)", +"7f6ec891": "withdrawNonTopForTeam(address,uint256)", +"7f704657": "RESERVED_FOR_TEAM()", +"7f71f1f9": "controllerApproval(address,address,uint256)", +"7f725862": "_setNewEstimate(uint256,uint16)", +"7f7376e8": "launchSale()", +"7f74ac15": "ownerContract()", +"7f7575c9": "FixedSupplyCrowdsale(uint256,address,address,uint256)", +"7f760335": "PurchaseTokens(uint256,address)", +"7f761472": "canRedeemUTXOHash(bytes32,bytes32[])", +"7f7624d0": "MjolnirAddress()", +"7f7634ba": "winnerConfirmed()", +"7f76bd3a": "lastBlock_v18()", +"7f76d76d": "minCapIco()", +"7f784da7": "addNews(string)", +"7f78636a": "BASE_URL()", +"7f790b7b": "getCreateUniverseParentPayoutDistributionHashValue()", +"7f791790": "roll(uint16[],uint16)", +"7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", +"7f792910": "setExchangeable(bool)", +"7f7977d1": "isFundraiser(address)", +"7f7985cf": "setEthUSD(address)", +"7f79cbfe": "MANHATTANPROXYLEXINGTONAVE()", +"7f7b1393": "getLocation(uint256)", +"7f7b17a0": "SetupPreSale(bool)", +"7f7c1491": "remove(address,address)", +"7f7d31dd": "sub32(uint32,uint32)", +"7f7d711e": "setRequireCustomerId(bool)", +"7f7dcdbf": "isContractOwner()", +"7f7de185": "handleProductionDecrease(address,uint256)", +"7f7fde8e": "sellAssets(address[],uint256[])", +"7f81f0b9": "setTransferLock(uint256)", +"7f83a4a6": "canRefund()", +"7f83bf7d": "setMinimumPayment(uint256)", +"7f84017f": "SELL_SOFT_LIMIT()", +"7f848ccb": "_packMakeData(address,uint256,uint256)", +"7f85066e": "Reflex()", +"7f853e7e": "MLCToken()", +"7f85c599": "addOrder(bytes32,address,uint256,uint256)", +"7f860330": "batchReturnEthIfFailed(uint256)", +"7f863cab": "Bid(address,uint256,address,uint256)", +"7f8661a1": "exit(uint256)", +"7f869d98": "stepFour(int256)", +"7f86cd3f": "parseLoanOfferRates(uint256[10],uint32[4])", +"7f86d985": "drunkness()", +"7f86f7f4": "walletPlatform()", +"7f877710": "recoverUnawardedMILs()", +"7f879229": "setSalesUser(address)", +"7f88616f": "onlyAdminAndNotInit()", +"7f89ce48": "initTiers(uint256[],uint256[])", +"7f8b8f48": "Ledger(address)", +"7f8b9478": "getImpliedRoot(bytes,bytes,uint256,bytes32[])", +"7f8c263f": "dragonBalance(address)", +"7f8d429e": "isFinalized(bytes32)", +"7f8d53c6": "put(address,uint256)", +"7f8dafef": "unsoldAllocationCount()", +"7f8fdcfb": "suspendDeposit()", +"7f9144ce": "token_member_order_pop(address,address,uint32)", +"7f91fb7d": "isSignedBy(address)", +"7f9245d0": "_clearTokenApproval(uint256)", +"7f924c4e": "testDeposit()", +"7f925c93": "withdrawSeller(address[2],uint256[7],uint8,bytes32[2])", +"7f93354b": "multiVoteNoLock(address[],uint256[])", +"7f9343ad": "playNumberSuit(uint256[])", +"7f93de95": "deposit100Percent()", +"7f947168": "TimeTransferAllowed()", +"7f949386": "updateMessage(uint256,string)", +"7f949ac0": "ethashContract()", +"7f94a8fa": "getWriteTimestamps(bytes32[])", +"7f95d6f6": "accountBalances(uint256)", +"7f95d919": "DistrFinished()", +"7f967a8c": "IsExchanged(address,string)", +"7f9785b0": "_resetList()", +"7f97e836": "didCommit(address,uint256)", +"7f98444f": "randomEnd()", +"7f99e11a": "isMiningOpen()", +"7f99f3c4": "MaybePerformOpen()", +"7f9ac04f": "balancesStaticoin()", +"7f9b48bc": "setCompte_9(string)", +"7f9bf9e4": "startMinting(string)", +"7f9c23e0": "_determineHitPoints(uint256)", +"7f9c8974": "getAssetCollectedOreBallancesArray(uint256)", +"7f9c9d91": "_getBorrowAmount(uint256,uint256,uint256,uint256,bool)", +"7f9cbfc1": "checkPayments()", +"7f9d139a": "positionScount(address)", +"7f9d2044": "UniBowToken()", +"7f9d314e": "autoBirth(uint256)", +"7f9df012": "VoteRevealed(address,uint256,uint256,uint256)", +"7f9f5495": "levelTokens()", +"7fa0c10f": "DeleteUserByAddr(address)", +"7fa0c908": "newChow(address)", +"7fa22001": "assertEq0(bytes,bytes,bytes)", +"7fa24846": "SetSAToEContract(address)", +"7fa28d75": "transferRightIfApproved(address,bytes32)", +"7fa34e92": "preIcoAddr()", +"7fa39958": "RateAdd(address)", +"7fa3f3d0": "addLock(uint256)", +"7fa400e4": "totalTokensAvailableForSale()", +"7fa40a42": "sumICOStage8()", +"7fa44926": "setMinMaxInvestValue(uint256,uint256)", +"7fa4cacb": "setDestinationAddress(address)", +"7fa5aa9d": "registerPreSignedHashing(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"7fa6c365": "phase3MaxTokenForSale()", +"7fa6c745": "_setNewStartTime()", +"7fa767bc": "createBox()", +"7fa7a7c8": "buyInWithAllBalance()", +"7fa7acf8": "createCertification(uint256,uint256)", +"7fa87949": "unblockAccountFunds(address,uint256)", +"7fa8c158": "startICO()", +"7fa9aa76": "owner_updateBaseFee(uint256)", +"7faa0044": "renderString(string)", +"7fab541c": "exec(bytes32,bytes)", +"7fab624b": "purchaseGenes(uint256,uint256,bool)", +"7fabbd7b": "unilateralRefund(bytes32)", +"7fabe1a5": "allPendingRefs()", +"7fad54e4": "distributeGame(uint8,uint256)", +"7fad9b53": "BASE_TEAM()", +"7faddcfb": "currentDistributionAmount()", +"7faff876": "updateUser(bytes32)", +"7fb00168": "CryptekZ()", +"7fb0a445": "systemSaleAddress()", +"7fb0fe14": "voteCandidateTwo()", +"7fb158c5": "ChannelSettled(address,address,uint32,uint192)", +"7fb181c1": "swapTime()", +"7fb191a5": "TokenVestingContract(address,address,bool,bool,bool,address)", +"7fb1a5ed": "AirdropController()", +"7fb33170": "transferAdmin(address,uint256)", +"7fb33dc6": "burnTokensWhenFinished(address)", +"7fb3d459": "GetChipsInfo(address)", +"7fb419b6": "WalletBoss()", +"7fb5d847": "delTransferWhiteList(address)", +"7fb5ff3e": "MNTP()", +"7fb7b5ed": "enableTeamWithdraw()", +"7fb9e405": "getTitulaire_Compte_10()", +"7fbb1b56": "claimEgg(uint8)", +"7fbb345e": "getInvestorsTokens(address,address)", +"7fbc0c48": "_mint(uint256,address,string,string)", +"7fbc9c55": "calculateMultiplierAfterConversion(uint256,uint256,uint256)", +"7fbcef65": "BTH(address[],uint256,address,uint256,uint256,uint256)", +"7fbd778a": "getTotalScientists()", +"7fbe0680": "MIN_PURCHASE_OTHERSALES()", +"7fbea955": "getCanvasByState(uint8)", +"7fbf28f7": "_withdrawDivis(address)", +"7fc29fc9": "authorisedMinter()", +"7fc32915": "ThrowbackThursdayToken()", +"7fc38e04": "SponsorshipReceived(string,string,string,uint256)", +"7fc3bb26": "endPostICO()", +"7fc3f49e": "getReinvestableTokenAmount(address)", +"7fc446f2": "changeCustomDefrostingRate(address,uint8)", +"7fc4d6c3": "isPhaseExist(address)", +"7fc53fb5": "returnInvestmentsToInternal(address)", +"7fc543ec": "_donations(uint256)", +"7fc55eb4": "ContributionWallet(address,address)", +"7fc56856": "IOXDistribution(address)", +"7fc5af95": "getWinnerList()", +"7fc5f05c": "changeVoters(bytes32,address,string)", +"7fc611f0": "multiCall()", +"7fc729c2": "_buy(address,uint256,bytes)", +"7fc7e643": "SetUp(uint256,uint256,uint256,address)", +"7fc88fe2": "timelockContractAddress()", +"7fc8b612": "interadduser(address,uint256)", +"7fc8fd9e": "Update_MediatedTransaction(uint256)", +"7fc90182": "Pool(uint256)", +"7fc90a5c": "batchAssignTokens(address[],uint256[],uint256[])", +"7fc96619": "getPartner(uint256)", +"7fca432e": "FHFTokenCrowdsale(address)", +"7fcac0fb": "USDBCoin()", +"7fcae430": "PendingApplication(address,uint256,string)", +"7fcaf666": "setString(string)", +"7fcb024a": "secondLockTime()", +"7fcb2386": "MorrowToken()", +"7fccb4ba": "transferAppOwner(bytes8,address)", +"7fcd3ce2": "maxBetPrice()", +"7fcdd1f0": "setConfirm(uint256)", +"7fcf3a2f": "throwFooBar()", +"7fcf440a": "getOwnerBalance(address)", +"7fcf532c": "Withdrawal(address,uint256)", +"7fcf64b2": "updateEarnedBy(uint256,uint256)", +"7fcfb422": "increaseApprovalWithData(address,uint256,bytes)", +"7fcfc4a0": "ApisToken()", +"7fd004fa": "submitWhitelistAddition(address[])", +"7fd13532": "whitelistMany(address[],uint256,uint256,uint32)", +"7fd169d6": "createGroup(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7fd19692": "setLockAddress(address,bool)", +"7fd2304f": "_maximumBuy()", +"7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", +"7fd26dd1": "tokenUsers(uint256)", +"7fd2ffa7": "InvestorWhiteListAddition(address)", +"7fd30df0": "mintBulk(address[],uint256[])", +"7fd39247": "setOwner(uint256,address)", +"7fd42617": "safeWithdraw()", +"7fd5bb31": "propose(address,bytes32,address[],bytes32[])", +"7fd5dd04": "APPROVE_OWNER()", +"7fd6f15c": "feePercent()", +"7fd751a8": "PRICE_ICO2()", +"7fd84609": "setOwnerThree(address)", +"7fd8601e": "deathData_v5()", +"7fd8d339": "changeicoBackend(address)", +"7fd8d51d": "stakeGLXForContributors()", +"7fd8ee68": "computeNameHashExt(bytes)", +"7fda8d52": "internalEnableRefunds()", +"7fdac6f1": "getCurrentCreditsExchanged()", +"7fdafafa": "totalTreePower()", +"7fdb0d6b": "Latcoin()", +"7fdb5031": "transferableTokens(address,uint256)", +"7fdb5efb": "GDCAcc01()", +"7fdb6720": "teamFundAddress()", +"7fdbd0f2": "ERC721DutchAuction(address,uint256)", +"7fdc5bd6": "LANA()", +"7fdc8290": "isUnderscore(bytes1)", +"7fdd458d": "createWithParents(bytes32,bytes32,bytes32[])", +"7fdd5403": "clearApproval(uint256)", +"7fdd69f6": "setMaxAllowedReservingPercentage(uint256)", +"7fddc0de": "getBiddingInfo(uint16,address)", +"7fde1c8a": "addRole(address,uint256)", +"7fde24c7": "addToPrivateWhitelist(address)", +"7fdea25b": "newVoting(uint8)", +"7fdf6911": "checkRoundAndDraw(address)", +"7fdfbe1b": "getBytes(string,uint256,uint256)", +"7fe02f94": "fireFightResultsEvents(uint8[4])", +"7fe0518a": "asyncSend(address,uint256)", +"7fe09003": "NewBlock(uint256)", +"7fe0c38b": "JOCKEY_LIMIT()", +"7fe0ff52": "StorageFee(address,uint256)", +"7fe11990": "authoriseManyAccounts(address[])", +"7fe11adc": "resetStage(uint8)", +"7fe18cf7": "_getInStageIndex()", +"7fe1a801": "setBountyCampaign(address)", +"7fe1dc7e": "getToken(bytes)", +"7fe1feb0": "initEmployee1()", +"7fe23f62": "winPool()", +"7fe275d4": "culmulative_demurrage_collected()", +"7fe320ab": "mvpExists()", +"7fe38fc3": "etherwow()", +"7fe3dc2e": "getGasCost()", +"7fe551fd": "clearingPrice(bytes32)", +"7fe5850b": "_redeemByDefaultPartitions(address,address,uint256,bytes,bytes)", +"7fe60640": "updateBtsPoint(int256,uint16,int256,uint16)", +"7fe650b1": "finalizeICOOwner()", +"7fe6eee0": "fundingLimit()", +"7fe846ba": "isSubjectDestruction(uint256)", +"7fe864b8": "MAX_TOKEN_CAP()", +"7fe88885": "storeHash(bytes32)", +"7fe8ca66": "sendInput(int256,int256)", +"7fe97bc5": "getSqrY(uint256)", +"7fe98ae0": "updateEthICOThresholds(uint256,uint256,uint256,uint256)", +"7fe9d39c": "changebeginnerprotection(uint256)", +"7fea061a": "TimeTransferAllowanceChanged(string,uint256)", +"7fea0d4b": "beforeAll()", +"7feb4685": "Chende()", +"7febd721": "presaleAmountRemaining()", +"7fec1b7a": "WBT()", +"7fec5d33": "Eightk()", +"7fec8d38": "trigger()", +"7fecd538": "isWaiting()", +"7feda59a": "revokeAttribute(address,string,bytes)", +"7fee4ecb": "GAS_PER_DEPTH()", +"7feec9be": "sams(uint256,string,string)", +"7feed5b6": "price_exponent1()", +"7fef036e": "totalEntries()", +"7fef21d4": "getBoundingBox(uint256)", +"7fef2d38": "updateMatchInfo(uint256,string,uint64,uint64)", +"7fefde53": "WillRegistry()", +"7ff02139": "updateCrytal(address)", +"7ff0346b": "getContents(bytes32[])", +"7ff276bd": "totalEthFundCollected()", +"7ff2acb7": "getData_2()", +"7ff2c70a": "ipo_price()", +"7ff2cf93": "getcertifieddatacount()", +"7ff31d2b": "setData_28(string)", +"7ff3366f": "TeamAddress()", +"7ff44544": "GetCurrentSalePrice(uint256)", +"7ff44a91": "getAllKeyNum()", +"7ff4b630": "action(bytes32[])", +"7ff6ea1c": "WolkCreated(address,uint256)", +"7ff6f83a": "_distributeTax(uint256,address)", +"7ff701dd": "TrackerToken()", +"7ff70a89": "getOwnedTokenList(address)", +"7ff729fc": "fillUpProject(uint256,uint256)", +"7ff860f6": "batchCreateAssetSale(uint256[],uint256[],uint256[],uint256[])", +"7ff86a35": "HappyBirthday(address,uint256)", +"7ff91228": "Stake(address[],address,address,uint256,address)", +"7ff92d6e": "set_address__Arina(address,address)", +"7ff931bd": "lastWinningNumber()", +"7ff988c5": "setKtcAddress(address)", +"7ff9b596": "tokenPrice()", +"7ffaae3e": "balanceEth(address,address)", +"7ffb8577": "totalGains()", +"7ffc0712": "getLifeRate(uint256)", +"7ffc80cf": "queryRandomTryTime_()", +"7ffcb093": "addVoter(address,bytes32[])", +"7ffce58e": "getTokenForInvester(address,uint256)", +"7ffdf53e": "conversionRate()", +"7ffe8be1": "setKycAddress(address)", +"7fff9f1a": "getProposalVoteCount(uint256,uint256)", +"7fffb7bd": "HelloWorld()", +"80007e83": "isVerified()", +"80008794": "round1Target()", +"80009630": "setCore(address)", +"8001553a": "OwnerRemoval(address)", +"80017cbc": "cancelLine(uint256,string)", +"80033408": "CANSale()", +"8003524e": "calcDoHash(string,bytes32)", +"800362ae": "loveStoriesCount()", +"80054c5d": "FreedomToken()", +"80056b5b": "changeAdminPrivilege(address,bool)", +"80057b9a": "getColor(uint256)", +"80059593": "numberAccounts()", +"8005993e": "getProfileHash(address,address)", +"800626a6": "AIR_1_SUPPLY()", +"8006692f": "stage3Deadline()", +"8006745b": "getPayout(address)", +"8006a5d3": "delegateAddresses()", +"8006f807": "COBAIN()", +"8007604b": "Stage1Deadline()", +"80078a0f": "ForFood()", +"8007acbf": "getActiveShareholdersArray()", +"80087745": "closeInvest(bytes5)", +"8008d5bc": "inSale()", +"8009484b": "getMaxBetAmount(uint8)", +"80097484": "transfer(address,uint32)", +"80097a8e": "adjustedPotBalance()", +"800a320a": "TokenGameTransfer(address,uint256)", +"800ab784": "verifyMerkleProof(uint256,uint256)", +"800bbd1f": "getCountTokens(address,uint256)", +"800c5086": "giveERC20AllowanceToKyber(address[])", +"800c7e38": "getCurrentPageCount()", +"800d0f6a": "LCToken(uint256,string,uint8,string)", +"800d41a3": "newExitWallet(address)", +"800deda5": "yoyoTransfer(uint256,string,string)", +"800ed545": "MWSToken()", +"800edb9d": "changeCap(uint256)", +"800f8e52": "placeBetWithInviter(uint256,address)", +"80105295": "maxUserPower()", +"801137e7": "setDepositPercents(uint256)", +"80113832": "ORDER_MODIFY(address,address,uint256,uint256,uint256)", +"801145bd": "sig_to_add(bytes16)", +"801161b0": "setMain(address)", +"80117026": "FRAC_BOT()", +"801298fa": "changePaymentFlagger(address)", +"80130383": "LGCY()", +"801336cb": "STARTING_RickAndMorty()", +"8013f267": "calcUnMaskedGuEarnings(uint256)", +"8013f3a7": "dev2()", +"8014f238": "editCard(uint8,string,string,string)", +"801512af": "SvinChainToken()", +"8015a96d": "For_admin()", +"8015e6f3": "getDungeonPower(uint256)", +"8016b6ed": "getKeyValue(address,string)", +"80173a19": "geneManager()", +"8017732d": "LDT()", +"801a115d": "transfertCopieExecutoire(bytes32)", +"801a1467": "swapFor(address)", +"801aaffb": "potWithdrawTo(uint256,address)", +"801aba56": "etherProceeds()", +"801b4189": "claimRental()", +"801c334e": "auctionIncreaseBid(bytes32)", +"801db9cc": "MIN_CAP()", +"801e2593": "maxAllowedAmount(address)", +"801f568e": "SpenderAuthorization(address,bool)", +"80200e12": "subFreelancerTotalInvoiced(address,address,uint256)", +"802028c9": "createDerivative(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", +"802049ac": "setUpgradeableTarget(address)", +"8020f54e": "addAssetToNetwork(address)", +"8020fb77": "getCurPayTable()", +"8020fc1f": "isDeregistered(address)", +"802114a8": "_removeRole(address,string)", +"80218eeb": "tokensIssuedTillNow()", +"802293c2": "getResultblockHash(bytes32)", +"8022fb7a": "setFrozenCoin(bool)", +"8023769f": "getPCAddress()", +"8023ffbd": "getOverallSize()", +"80249468": "getUserHSCeducationDetails(string)", +"8024c400": "limitPerDay(uint256)", +"8025e303": "VERSION_NUMBER()", +"802608a2": "setExpirationDate(address)", +"802644a4": "fundingEndUnixTimestamp()", +"8026efaa": "token18KstepCAP()", +"8026fe24": "FundTransfer(address,uint256,uint256,bool)", +"8026ffd9": "_move(address,address,uint256)", +"80270b33": "CSCResource(string,string,uint256)", +"80274db7": "preRelayedCall(bytes)", +"8027dece": "updateShare(address[],uint256[])", +"8028bdc4": "returnedCWC(address,uint256)", +"8028ce6b": "claimRefundsFor(address[])", +"80296dec": "admin_check(address)", +"802a350f": "addCustomerService(address)", +"802b1d93": "officiant()", +"802b45e2": "ISBCoin()", +"802b8453": "setPerventValue(uint256)", +"802bbab2": "ChainStarBase(uint256,string,string,uint8)", +"802c8cda": "_cancelEscrow(address,uint256)", +"802cd15f": "changeDistributor(address)", +"802d1848": "setLimitations(uint256,uint256,uint256)", +"802daa62": "latinotoken(uint256,string,uint8,string)", +"802de8fc": "setPremiumFactors(bytes32,uint256,uint256)", +"802deb22": "TokenTrader(address,uint256,uint256,bool)", +"802ea720": "getTotal(bytes)", +"802eb89c": "_getWeight(uint256)", +"802f2ffa": "_addPayment(address,uint256,uint256,uint8)", +"802f5bae": "ADDITIONAL_PORTION()", +"802fcc0d": "internalSafeTransferFrom(address,address,uint256,uint256,bytes)", +"80311bf9": "buyCore(uint256,uint256,uint256,uint256)", +"8031233c": "inflationCompBPS()", +"80318be8": "transferOverride(address,address,uint256)", +"8031e85c": "calculatePremium(uint256,uint256,uint256,uint256,string,string,string)", +"80322cbd": "isNowApproved()", +"80325b2d": "queryN(uint256,string,bytes,uint256)", +"8032751b": "returnInvestments(uint256)", +"803287de": "_frozenTokens()", +"80330982": "sendEther(address,address)", +"80334b8f": "TomBit(uint256,string,uint8,string)", +"8033c643": "ROSCAv1(uint16,uint128,uint256,address[],uint16)", +"8033cc70": "StealthToken()", +"8033fe49": "releaseEnd()", +"80341744": "contactsAddresses(uint256)", +"803435d7": "startDefinedGameManually(uint256)", +"80355798": "isAlreadyUsed(uint256)", +"803587ae": "invalidateCertificate(bytes32)", +"8036b5db": "setPresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"8036d757": "getRateUpdateBlock(address)", +"80373436": "setSecondaryGameManager(address)", +"80378b78": "setShopRunning(address,bool)", +"8037bfe0": "unRedeemedMTU()", +"803965c4": "amountFixed()", +"803a62ea": "Register(uint256,address,address)", +"803b4c11": "OwnerUpdate(address)", +"803c64c3": "GetCardList(address)", +"803c6fa9": "getWeiTokensOwed(address)", +"803c8383": "getKey(address,address,uint32)", +"803cc0d0": "kscTransfer(address,uint256,string)", +"803d65ff": "_sendtoken(address,address,uint256)", +"803e8fbb": "lengthOf_dataPattern_to_voteRulesHash()", +"803ea2ee": "MoneyTransfered(address,uint256)", +"803fbe5b": "paymentRegularTokens(uint256,uint256)", +"803fcd43": "check(address,address,address,address,uint256)", +"80402564": "addrList(uint256)", +"8040cac4": "testOverflow()", +"80412042": "decrementOwnedTokensLength(address)", +"8041fcc4": "AVMToken()", +"8042b215": "developerPctX10K()", +"8042fba5": "newEscrow(address,address,address,uint256,bytes32,bool)", +"8043154d": "post(address,bytes32,bytes32)", +"804327bb": "buyPreIcoTokens(uint256)", +"8043c9c0": "eventName()", +"8043cf2d": "mintB()", +"8044c67e": "updatePrizes(uint256[])", +"804518a8": "nic()", +"8047ba70": "getTokensAmountUnderCap(uint256)", +"8047cb93": "createGame(bytes32,uint256,address)", +"8047cf41": "init(uint256,string,uint8,string,address)", +"80496fd6": "CaData()", +"804afd9e": "vigAddress()", +"804afffb": "tokenIndexToPrice(uint256)", +"804b55d5": "finaliseAs(address)", +"804ba97a": "tryGet(bytes)", +"804c68aa": "allocateTCLRinTeamTokens()", +"804c7fa0": "_migrateExoplanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", +"804d564c": "whitelist10Addresses(address[10])", +"804d77c8": "approveLoanIdentifier(bytes32)", +"804e11dc": "testThrowsDisownNotTransferable()", +"804e1c53": "_updateProfit(uint256,bool)", +"804e8063": "setAffiliateEdge(uint256)", +"804ee2b5": "addProduct(uint256,uint256,string)", +"804f82d3": "showLastBidValue()", +"804fe7ac": "acceptBid(address,bytes32,uint256,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32,uint8)", +"805013c2": "setPresalePhaseUInt(uint256)", +"80504271": "fundingExchangeRate()", +"80519ac7": "getItem(bytes,uint256)", +"8051d02d": "getBlockNumber(bytes20,uint8)", +"805210b7": "AmIPlayer2()", +"8052191e": "dip(address)", +"8052474d": "Name()", +"80528865": "changeWithdrawState(uint8)", +"80529172": "setUsdPerEthRate(uint256)", +"805484b7": "getUpperMaximum(uint256)", +"8054b2f2": "NKN()", +"805553e8": "randMod(uint256)", +"80559357": "setTokenAvailable(bool)", +"805593db": "storeProductReference(address)", +"8055d33a": "exchangeSgnForSga(address,uint256)", +"8055dbb5": "GetExchangePoint(uint8)", +"8055f9d7": "Moderated()", +"80560a0a": "setIsProjectBonus(bool)", +"8056696e": "loadController(address,address)", +"80570d69": "JoshuaCoin()", +"80571e93": "UranBank()", +"80576150": "BoughtViaJohan(address,uint256)", +"8057b96d": "buyTokensForSelf()", +"8057e0b0": "DutchAuction(address,uint256,uint256,uint256)", +"8059382a": "setGasInTokens(uint256)", +"805996f2": "AccountCreated(address)", +"80599e4b": "remove(string)", +"8059e804": "ethealMultisigWallet()", +"805abe6a": "destoy()", +"805b8455": "bumpRound(uint256)", +"805b90d6": "unlockTokensAmount(address)", +"805bc096": "Roll100()", +"805c2b6c": "broadcastOpinion(string)", +"805c3abd": "getPreviousHashUint()", +"805c3d89": "SimpleLSTDistribution(address,address,uint256,uint256,uint256,address)", +"805c733b": "lottoBalance()", +"805d2679": "rndIssue(address,uint256)", +"805e99e0": "isFirstRound()", +"805f4cfc": "TosTeamLockContract()", +"80603faa": "isTakePermitted(uint256,uint256,address,address,uint256,uint256)", +"80615ffa": "receiveApproval(address,bytes)", +"806186f3": "LogRewardAllocated(address,uint256,uint256)", +"8061a159": "TokenSoftCapReached(uint256)", +"8061d365": "FINANCE_CAP_PER_ROUND()", +"8062d3e6": "insertAndCheckDo(bytes32)", +"8063ab78": "setWalletsDelegate(address)", +"8064696b": "getOraclizePrice(string)", +"80650f76": "sigCheck(bytes32,bytes32,bytes32)", +"80657151": "patronRewardMultiplier()", +"8065eaa6": "CreatorWithdrawAll()", +"80661555": "commandMintBonus(address)", +"80664ba0": "ProofTeamVote()", +"80667509": "MYGREATTOKEN()", +"80667aa8": "CBN(address)", +"8066f3c8": "totalSTACoin()", +"8067f7ba": "read_i16()", +"80690e01": "IsAirdrop()", +"80691858": "GoalReached(address,uint256,bool)", +"8069dc2d": "ThundervsJazz()", +"806a2a3c": "investors_needed_until_jackpot()", +"806ad169": "getWithdrawal()", +"806ad57e": "addWorker(address)", +"806b0365": "changeBountyWallet(address)", +"806b39ab": "crownTotalSupply()", +"806b6c28": "GetCurrentTypeSalePrice(uint256)", +"806b984f": "lastBlock()", +"806ba6d6": "founder2()", +"806bd2b6": "challengeCooldownTime()", +"806c6188": "adjustMinimumPledgeAmount(uint256)", +"806cdc0b": "getBonusBalance(uint256,uint256)", +"806e085e": "transferBatch(address[],uint256)", +"806ee278": "collectionFunds()", +"806f208a": "invalidPayments(address[],uint256[])", +"806f3319": "multipleTokenDistribute(address,address[],uint256[])", +"80710f39": "withdrawAllToOwner()", +"8071a7ba": "PCTToken(address)", +"8071aa05": "multisend3(address[],uint256[],uint256[],address[],uint256[])", +"807283df": "Patronage(string,address,address)", +"80738c4d": "USTM01()", +"80744a9c": "LoyelaTestCoin()", +"8074dc59": "gift(address,uint256,uint256,string,string)", +"8074e31d": "Victory(uint256,string,uint8,string)", +"8074f332": "droneIndexToOwner(uint256)", +"8074fe33": "minerCurrentChallenge()", +"80759f1f": "getRootHash()", +"8075acd0": "couponBonusEnabled()", +"80766b68": "Bitcoin1()", +"807693b6": "grantPermissionToChange(address,uint256,bool)", +"8076bd41": "set_sale_closed()", +"8076f005": "cancelledOrFinalized(bytes32)", +"8077ccf7": "etherTokens(address)", +"80780801": "LimitedSetup(uint256)", +"80787f2c": "terminateSale()", +"80788cba": "CancelSubscription(address,address)", +"807896d5": "voteProposal(uint256)", +"8078cc57": "_changeLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"807a599c": "mintFinish()", +"807a87ed": "YouAreHere(uint256)", +"807b08c7": "runScript(bytes)", +"807d2da3": "start_ICO()", +"807d782e": "crcWithdrawAccount()", +"807d94a7": "maxIssuableSynths(address,bytes4)", +"807e5cee": "WhitelistUnset(address)", +"807eb7cd": "sumICOStage1()", +"807f08ea": "totalDepositedEthers()", +"807f0ac5": "slice(bytes,uint256)", +"807f3bce": "adminGetLastSignedTime(address)", +"807fb834": "resetRaz(uint256)", +"80806362": "IssueTokenFactory()", +"808134c8": "setBoardMember(uint256,uint256)", +"8081a1e7": "ecmul(uint256,uint256,uint256)", +"8082a929": "holderAt(int256)", +"8082ee0d": "Exchange(address,string)", +"80833d78": "unauthorise(address)", +"80836cab": "enableUpdates()", +"8084ee58": "setMaxLimit(string,uint256,uint256,uint256)", +"8085de8b": "MOBToken()", +"808615ac": "stake(address,address)", +"8086b8ba": "accountOf(address)", +"80870bc1": "trackBuy(address,uint256,uint256)", +"808757ac": "getFreeBat()", +"8087da3a": "order_number()", +"8088e0b6": "turnOffCanUpdateNextGamePotSplit()", +"80892b8a": "calculateTokensReceived(uint256,uint256)", +"8089d001": "getHashOfBlock(uint256)", +"808a69e2": "tokenAddressesSet()", +"808ab1d6": "getCertificationDbCount()", +"808ac94d": "getWeaponIds()", +"808ae9f8": "MoveLearned(uint256,uint256)", +"808c1499": "setIcoPhase2(uint256,uint256)", +"808cf58e": "initial_reward()", +"808e0ae2": "platformLogin()", +"808f30f3": "BitEyeToken()", +"808f3652": "calcHash(string)", +"808f4d21": "incentivisingEffortsAddress()", +"808f8292": "Menu03()", +"808fc72c": "wasSaleStarted()", +"8090114f": "percentRate()", +"809051db": "ipfs_hash()", +"80906b13": "controllerClaim(address,uint256)", +"80908b11": "Advertisement(address,address,address)", +"8090b131": "fetchNumber()", +"8090d83c": "jackpotProportion()", +"8090e4d5": "core(uint256,uint256,uint256,uint256,uint256)", +"8090f92e": "revealVotes(uint256[],uint256[],uint256[])", +"8091bfc9": "STEM()", +"8091d7a5": "addCustomField(uint256,bytes32,bytes32)", +"8091f3bf": "launched()", +"8091fbe1": "gen0PresaleCount()", +"8091fc76": "isValidICOInvestment(address,uint256)", +"80921070": "AvocadoToken()", +"8092285e": "setODEMClaim(address,bytes32,bytes,bytes32)", +"809282b2": "EtherTower()", +"80929e5b": "setBurnable(bool)", +"80943252": "numGamesTimedOut()", +"80947d17": "Verification()", +"80948ddd": "calculateTokenToEth(uint256,uint256)", +"8094ebe3": "joinGame(address,uint256,address,address)", +"80956021": "Concept(address[],uint256[],uint256,bytes,address)", +"80956e8b": "setMintFeeProp(uint256)", +"80959721": "poster()", +"80959cb6": "getCloseAmounts(uint256,uint256,uint256)", +"8095ab76": "songWriterSign()", +"8095cc36": "createForecast(uint256,uint256,uint8,uint8,bool,uint8,uint8)", +"8096bac6": "setNewMaxDeposite(uint256)", +"80972a7d": "ok(uint256)", +"809837c1": "ITECToken(uint256,string,string)", +"809841aa": "getCompte_25()", +"8098e45e": "getRamdon()", +"8098f67c": "ApexIssued()", +"80994e15": "STUDToEth()", +"80999b71": "removeBaseWhitelist(address[])", +"80999cc0": "MarketplaceInformation(address)", +"8099f357": "milliTokensPaid()", +"809a12de": "addRelatedAddress(uint256,address)", +"809a6173": "testCompare()", +"809a812c": "immlaToken()", +"809a9e55": "getExpectedRate(address,address,uint256)", +"809ae91e": "setBattleStart(bool)", +"809b296d": "consumeOperation(bytes32,uint256)", +"809c5b9e": "votingDescription()", +"809d7902": "rejectBid(address,uint256)", +"809d8988": "getTribe(string)", +"809d9a94": "transferMonster(address,address,uint64)", +"809dab6a": "getAvailableBalance()", +"809e243d": "LanxangCash()", +"809e4a2d": "claimUnrented()", +"809e52b2": "updateExperience(uint256,uint32)", +"809ef92f": "crowdsaleStarted()", +"809f8cc9": "VersumToken(uint256,string,string)", +"809fc4f8": "MKRUSD()", +"809ffb20": "setShopModerator(address)", +"80a0155c": "RBACMock(address[])", +"80a0c461": "updateMinimumPodSize(uint256)", +"80a15ad9": "setRocketValues(uint256[],uint256,uint256[],uint256[],uint256[])", +"80a1a86b": "countPayment(address)", +"80a1ba6a": "getTimeLeftToNextCollect(address,uint256)", +"80a1ec2e": "initUser(uint256)", +"80a23ddf": "mintBadge(int256,address,uint256)", +"80a2ddad": "founder4()", +"80a37e23": "recordHighScore(uint256,address)", +"80a3a783": "presaleStartDate()", +"80a3f8b4": "getWorkflowName(uint256)", +"80a3f9b3": "bonusCapUSD()", +"80a429ee": "VitaminToken()", +"80a507c6": "is_started_bonuses()", +"80a51c5e": "ownerDeclareRefundStart()", +"80a54001": "parentToken()", +"80a5cca3": "approveViaProxy(address,address,uint256)", +"80a6ee7d": "totalTokenBetValue()", +"80a738bf": "withdrawHighscorePot(address)", +"80a92b67": "payReward(uint256,address,uint256)", +"80a973e6": "sendTeamBalance(address,uint256)", +"80a979e1": "crowdsaleTransfer(address,address,uint256)", +"80aa5757": "getEtherForTokensOld(uint256)", +"80aab099": "nextAllowancePeriod(bool)", +"80ab611e": "cancelRecurringPayment(bytes32)", +"80abb85b": "refereds(address)", +"80ac5448": "operatingAddress()", +"80ac613f": "BatchCreateSales(uint256[],uint256,uint256,uint64,address)", +"80ac80b0": "iterStart()", +"80acaafb": "profitDistribution()", +"80ad17b2": "removeSiteSet(uint256,uint256)", +"80ad2cf3": "setCap(address,uint256)", +"80ad639d": "deleteAddressDataPatternVoteRules(address,address,uint256)", +"80adede0": "currentLoanAmount()", +"80ae4ebc": "_initialize()", +"80aed05f": "LooneyDice()", +"80af6002": "minimumICOCap()", +"80af6d79": "addEmissionProvider(address,uint256)", +"80afd844": "getPrivateFundAddres()", +"80afdea8": "appId()", +"80b022e8": "changeBurner(address)", +"80b20208": "thePot()", +"80b29f7c": "revokeDelegate(address,bytes32,address)", +"80b30c13": "tokensToSold()", +"80b38c2d": "ProcessTxFee()", +"80b3c3d8": "buyTokensWithIcon(address,uint256)", +"80b44c1b": "extraStatsForGen(uint256)", +"80b51fe3": "getPoolTimeOfStateInBlocks(uint256)", +"80b52136": "MoneyCoinCoin()", +"80b525ce": "BurnableTokenWrapper(address)", +"80b57824": "discount(uint32,uint256)", +"80b63e7e": "wakeUp(uint256)", +"80b6518a": "createEmptyTrack()", +"80b69199": "releaseBonusTokens(address,uint256,address,bytes1)", +"80b7ca90": "OrderList(address)", +"80b855d6": "ZiggyToken()", +"80b8e6d1": "changeWhitelistStatus(address,address,bool)", +"80ba4b75": "getActionsCount()", +"80bb3360": "exchangeToIco(address)", +"80bc150d": "Bounty(uint256)", +"80bc99cb": "teamLocker()", +"80bd0936": "Multivest()", +"80bd2723": "SecurityChainToken()", +"80be3cc4": "BurnTokensNew(uint256)", +"80bf099e": "orphantoken(address)", +"80bf549a": "maxICOSecondSupply()", +"80bf98f8": "makeSwapInternal()", +"80bfbe68": "setWhitelist(address,address,uint256)", +"80bfc599": "sellVouchers()", +"80bfe883": "wins(uint256)", +"80c05bc6": "random_callback(bytes32)", +"80c0a250": "fetchVoteResultForCandidate(address)", +"80c18d45": "addAddressToFounders(address)", +"80c190cf": "getReservedTokensListValInPercentage(address)", +"80c2fb7d": "currentTreasure()", +"80c30f3d": "buyContract(address,uint256)", +"80c324cf": "isBallotInProgress(uint32)", +"80c3780f": "schedules(address)", +"80c399f4": "refundInvestors()", +"80c3f96d": "addFarmer(address)", +"80c4237f": "tryToWin()", +"80c4e5c5": "changeSynthesizeAllowed(bool)", +"80c5bef8": "UGToken()", +"80c6ff73": "keepaliveBlock()", +"80c7507a": "getMigration(uint256)", +"80c80611": "Withdraw_3()", +"80c810d5": "MucToken()", +"80c81c16": "getStateInfo()", +"80c86c30": "CommonError(bytes)", +"80c8a270": "tokenReserved4Deposit()", +"80c8fde7": "perTokenAmount()", +"80c951bf": "currentClaimPriceInFinney()", +"80c96527": "getAssociatedTAOSetting(bytes32)", +"80c99dd2": "getPeriodicalBudget()", +"80ca7aec": "forceReseed()", +"80caac1d": "setTitleImage(string)", +"80cae007": "cleanOcean(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"80cd0015": "migrateUsername(bytes32,uint256,uint256,address)", +"80cd2464": "offer(uint256,uint256,uint256)", +"80cd5ac3": "newAppInstance(bytes32,address)", +"80cda248": "EGGS_TO_HATCH_1TOAD()", +"80cdc9c9": "RESTRICTED_PERIOD_DURATION()", +"80ce60d1": "setResult(uint8)", +"80ce98e7": "distributeDividends(uint256,address)", +"80cecea9": "transferToContract(address,uint256)", +"80cf264d": "getFirstPhaseCap()", +"80d07ce8": "Gifto()", +"80d10934": "freeXLMG()", +"80d1bd47": "jackpotHit()", +"80d1cb35": "getDeploymentBlock()", +"80d24e9d": "SISKTechnologyGroupToken()", +"80d2c1a6": "CatRescued(address,bytes5)", +"80d32dbb": "ChaoExToken()", +"80d32f85": "isSoftCapReached()", +"80d52ed9": "switchToNextRound()", +"80d5398e": "logOrderFilled(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes32)", +"80d563d7": "LogCancelContractProposal(address,address,uint256)", +"80d61012": "canReceive(bytes32,address,address,uint256,bytes,bytes)", +"80d7bcba": "incomingTokensTransactions()", +"80d7d81a": "giveMeBackMyMoney()", +"80d7f7ac": "TaxicToken()", +"80d7f92a": "_address(address,uint256)", +"80d85911": "initialize(uint256,uint256,uint256)", +"80d8b380": "setQtyStepFunction(address,int256[],int256[],int256[],int256[])", +"80d8ce23": "publishBytes(string,bytes)", +"80d95b42": "supplySeed()", +"80d9eaa6": "refCount()", +"80daa1c6": "setDiscountForPlayer(address,uint256,uint256)", +"80db79d9": "StructAndFor()", +"80dbb7d2": "RacingClubPresale()", +"80dbde63": "PI_EDIT_4()", +"80dcaf27": "getRefNumber()", +"80dcbff1": "getAdminArray()", +"80dce0b4": "getAwardTime()", +"80dceec4": "setHuntingPrice(uint256)", +"80ddcc62": "SUPPLY_HARD_CAP()", +"80ded586": "removeFromTokenHolders(address)", +"80dee9d1": "miningStorage()", +"80df2cee": "TeddyChain()", +"80df4123": "NucleusVisionTimeVestingTokensMinted(address,uint256,uint256,uint256,uint256)", +"80dfa34a": "saveBatch(string)", +"80dfb104": "setCoOwner1(address)", +"80dfee5c": "NewSale()", +"80e039f9": "rocketGetResourceValues(uint256)", +"80e0c053": "MassERC20Sender()", +"80e13b10": "CompanyTokenIssued(address,address,uint256,uint256)", +"80e15b56": "cancelCredit(address)", +"80e15f76": "setBuildPrice(uint256)", +"80e183a3": "CLASS_PLANT()", +"80e1b9c4": "finishBattle(uint256,address,address)", +"80e2517c": "TokensPerEther()", +"80e2653e": "setDougAddress(address)", +"80e2d53b": "rateWaitingEnd()", +"80e339fc": "balancewof()", +"80e37b5f": "maxIssuableNomins(address)", +"80e3f1ad": "toggleWhitelist(bool)", +"80e47e71": "maximumValueWithoutProofOfAddress()", +"80e52f31": "EtherCash1()", +"80e5d7b0": "Voted(uint256,uint256,uint256,bool,address)", +"80e5e069": "ITO_TOKENS()", +"80e64e8b": "buyBottle()", +"80e6bffb": "CalculateBankCredit()", +"80e74b04": "testControlUpdateLatestRevisionEnforceRevisions()", +"80e8b12a": "_createDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"80e9071b": "reclaim()", +"80e9a1da": "STATUS_LENT()", +"80e9e9e1": "getClaimIdsByTopic(uint256)", +"80e9f98c": "getRacer(uint32,uint256)", +"80ea8273": "SetBonus(uint256)", +"80eb1cbc": "monsterIdToIVs(uint256,uint256)", +"80eb6b7f": "LogRemTokenPairWhitelist(address,address)", +"80ebb08e": "updateResult()", +"80ebed20": "createBook(address,address,address,uint256,int8)", +"80ec35ff": "awardByRndNo(uint256)", +"80ec4a96": "CrowdsaleFinished(uint256)", +"80ede329": "getDocumentDetails(uint256)", +"80edef8e": "owner_address()", +"80ee9792": "_ethDeposit()", +"80ef353d": "tryClose(bytes32)", +"80efa4af": "extBuyTokens(address,uint256,uint256)", +"80f034b1": "getContractBytecode(string)", +"80f03fa6": "getTotalPets()", +"80f183ce": "visitCost()", +"80f20363": "lockToken(uint256)", +"80f29894": "getWeiForCent(uint256)", +"80f2fa03": "getSellPrice(address)", +"80f34c14": "ContortedCoin()", +"80f393c8": "ProofOfIdiot()", +"80f3f094": "setGGCAddress(address)", +"80f41e76": "calcMintFee(uint256)", +"80f4432a": "inception()", +"80f4531f": "closeTimerElapsed()", +"80f4ab5f": "seeMyNumbers()", +"80f4bcb8": "tokenTeamAllocated()", +"80f55605": "market()", +"80f5a37c": "Crowdsale(address,address,address,uint256,uint256)", +"80f5e0a1": "shouldBoost(bytes32)", +"80f6c383": "setshares(uint256,address)", +"80f6d782": "swapAddress()", +"80f7d0ab": "storeReading(uint256)", +"80f7e238": "ANIMETOKEN()", +"80f86009": "Initialize()", +"80f89a31": "ballotNames(uint32)", +"80f89bce": "distributeDRMK(address[],uint256,uint256)", +"80f8d688": "redTeamAddress()", +"80f8ea60": "Put_BRTH_GFT(address)", +"80fa272f": "TokenWithMint(string,string,uint8,uint256)", +"80fa4517": "completedTasksCount()", +"80fa7902": "getPlayersBattleStats(address)", +"80fa7942": "tokensForReserve()", +"80fa860f": "executeElectionMandate(uint256)", +"80fc16c8": "setAffiliateFee(uint256)", +"80fe4958": "createBetWithPayable(bytes32,bytes32,bytes16,bytes32,uint256)", +"80febdbd": "updateMe(string)", +"81001f3c": "collectFee(address[])", +"810164f7": "getTotalBPOfAddress(address,address)", +"81016509": "getBtcRequestHash(bytes,bytes,uint256)", +"8102387d": "burnRedRibbonCoin(uint256)", +"81030e35": "ALAP()", +"810405d6": "numOfPurchases()", +"81042183": "ExpeditingToken()", +"81045ead": "getIndex()", +"8105a6d7": "calculate_bond_token_to_bix_rate(uint256)", +"8105aa55": "grantAdvisorTokens(address)", +"81064e2d": "getCreditorAmounts()", +"8106d57a": "getCityPendingBuildings(uint256,uint256)", +"8107b269": "Novatore()", +"81081184": "bursarPayOutNetContractBalance(address)", +"8108592c": "calcKncStake(uint256)", +"81086763": "placeNewBid(uint256)", +"81086918": "delAcceptedToken(address)", +"8108e54c": "marketAllocation()", +"810a192b": "transferCollateral(uint256)", +"810a217f": "pValidationState()", +"810a3919": "hard_limit()", +"810a882f": "setConfigBytes(bytes32,bytes32)", +"810ac3ce": "IssueOffer(address)", +"810ba058": "Public_Sale_SUPPLY()", +"810bbec3": "claimHelper()", +"810be182": "_updateCountries(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"810c0af8": "depositTokenByAdmin(address,address,uint256)", +"810c547a": "_rebase(uint256)", +"810cbbd0": "bat_match(uint256[39])", +"810cf6cb": "MRazaAnisTestCoin()", +"810d54a0": "lockBalanceChanges()", +"810e4ff0": "cashOut(address,address,uint256)", +"810e78ab": "declareIcoFinished()", +"810e9720": "GlobalCoin()", +"81104666": "advisoryWithdraw()", +"8111e0ad": "updateMaxTxGasPrice(uint256)", +"8111ecef": "FinalizeStage()", +"8111f24e": "isFreezed(address)", +"81120dd7": "myLastRef()", +"8112821f": "EthVentures()", +"8113e285": "withdrawTokenPayment()", +"8115a2ac": "getOnMintTargetValue()", +"8115f52d": "Evacuated(address)", +"8116c063": "claimOwnersEarnings()", +"811743e7": "fighterIndexToOwner(uint256)", +"81183633": "setStandard(bytes32)", +"8118e0ae": "dtValidateWorldSnapshot(uint256)", +"81193a30": "returnRequestCancel(uint256)", +"81195993": "allocateEcoFundToken(address[],uint256[])", +"8119c065": "swap()", +"8119f4ae": "getRoc(uint256)", +"811a0a85": "saleComplete()", +"811aecf4": "finishPhase()", +"811b1268": "noteSale(address,uint256,uint256)", +"811bab32": "GenesisCallerAddress()", +"811c626d": "changeIcoRoundEnding(uint256)", +"811c66ac": "nameSuccessor(address)", +"811de206": "isConfirmedByOwners(uint256)", +"811e1468": "computeAccount(uint256)", +"811e4f71": "DisburseEarnings()", +"811e539c": "campaign()", +"811ea6de": "transferToken(address,address,uint256,bool)", +"811f273d": "hasThreeYearWithdraw()", +"811fe466": "beginTime_()", +"81207183": "deployGLX()", +"8121b0d4": "verifyStoredData(bytes32)", +"8121dbc1": "MyPizzaPieTokenPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"8121ddd7": "RATE_DAY_7()", +"81236e47": "setUserYan(address,uint32)", +"812403f6": "bonusPhaseThreeDeadline()", +"81240b9c": "subWithdrawFor(address,address)", +"8124bb0f": "continueExecution()", +"81252548": "getContractServerBlackWhiteListType(string)", +"81252680": "getBaseQuick(bytes32)", +"8125c102": "BountySent(bytes32)", +"8125c6fd": "_getDividendsBalance(address)", +"8125ceb2": "showMessage()", +"8125fc44": "thirdPreSaleEndDate()", +"81263fed": "getStrandCount()", +"81267bd0": "_transferMeme(address,address,uint256)", +"812699a9": "Quiricos()", +"81269a18": "voteBalance(address)", +"81269a56": "checkMintSolution(uint256,bytes32,bytes32,uint256)", +"8126c38a": "allPunksAssigned()", +"8126cb1e": "rejectRewards(uint256,string)", +"8126e4e3": "philanthropise(string)", +"81281be8": "placeBid(address,uint256,uint256,uint256)", +"81290a80": "AviciiCoin()", +"8129212e": "getCommonInitBlockNum()", +"8129519d": "setLoading(uint256)", +"8129aa75": "TransferFeeRateProposalAdded(uint256,address,uint256)", +"8129fc1c": "initialize()", +"812a4f47": "BeatTokenIcoPhase2Started()", +"812af8ec": "getAccountData()", +"812ba50c": "preEndBlock()", +"812c3251": "Escrow(address,address,uint256)", +"812c86e0": "updateTokenContract(address,string)", +"812cbf38": "sellFci(uint256)", +"812cddf2": "getSavedString()", +"812cf740": "ArrayPractice()", +"812d504d": "transferToOwner(address)", +"812d6c40": "changePercent(uint256)", +"812e1d1d": "APT(address)", +"812e6741": "Mountain(bytes32,uint256,uint256,uint256,address)", +"812ed5cc": "report(address,address,bytes)", +"812f55c3": "get10Ads(uint256)", +"812fd5d7": "payToProvider(uint256,address)", +"813051bc": "createGOP(address,string,uint256)", +"8130c9b2": "untrustedTokenNumerator(uint256)", +"8132581c": "amountRaisedInEth()", +"8132e223": "internalSafeTransferFrom(address,address,uint256,bytes)", +"81333d57": "LKB(uint256,string,string)", +"8134064b": "setMotherCount(uint32)", +"81350bd4": "releaseTimeTeamAdvisorsPartners()", +"8135e137": "getPresciption(int256)", +"8136c1b9": "registerUserOnToken(string)", +"8136f02d": "setAddressOfERC20OldToken(address,address)", +"8136fd26": "createJob(string,uint256,uint256,address)", +"81395866": "numberOfAdmins()", +"8139bc2f": "ecothereum()", +"813a573a": "CheckPurchaseCount(address,uint32)", +"813b024f": "addProductInUsd(uint256,uint256,bytes32)", +"813b65aa": "setNewCajutel(address)", +"813d13cb": "getBB(bytes32)", +"813d599f": "getValidatorAddress(int256)", +"813d6c9a": "bonusPercentage()", +"813d89e1": "artExplain()", +"813df488": "preMinedFund()", +"813e7847": "withdrawalNormal()", +"813e9aca": "init(address,uint256[],uint256,uint256,uint256,uint8)", +"813f4db4": "isStakingPeriod()", +"813f563a": "devsHolder()", +"813f5717": "LinkRevenue()", +"813faa53": "getVoteRulesOfProposalTransaction(uint256,uint256)", +"813fdec8": "getContestStatusForDate(uint32)", +"8140ce63": "kvtOwner()", +"8140d0dc": "setContact(string)", +"8141fd37": "tickRequiredLog()", +"8142453f": "_saveRequest(address,address,uint32)", +"8142a25a": "testAliceFooSend()", +"8142b8d7": "editGardener(uint256,uint256,uint256)", +"8143e3da": "allBonus(address,uint256)", +"8143eb2d": "gameOpened()", +"8143f8a8": "totalGas(bytes)", +"8144650a": "transferTokenTo(address,uint256)", +"814487c4": "addSuperReferrer(address,uint8)", +"8144ee2f": "adventureSettingContract()", +"8146f323": "isFinalised()", +"8147bcf7": "deletePlatform(bytes32)", +"8148d2fe": "getNodeId(bytes32,bytes32)", +"8149657b": "closeEthPool(uint256)", +"814971de": "issueReward(uint256,uint256,uint256[],uint256)", +"8149ea9b": "randomSkill()", +"814a78f4": "KM(uint256,string,string)", +"814ab9f1": "salesSupply()", +"814ae0ba": "gcf()", +"814b3fe0": "dividends(uint256)", +"814b53b0": "killCoin()", +"814c25fc": "setTokenInformation(bytes32,bytes32)", +"814c2aa1": "changeTotalExchange(uint256)", +"814e23c8": "calculatePayout(uint256,uint16)", +"814e3bd3": "ContribToken(uint256,string,string)", +"814e5c9b": "totalSaleAmount()", +"814e6d44": "_unpackIdValue(uint256)", +"814eba9e": "simPunitiveInterestRate(bytes)", +"814f737d": "phaseThreeEnd()", +"814f9201": "payUserIncomingTransactionCommission(address)", +"814fbd8f": "RefundBTC(string,uint256)", +"81508615": "getBeneficiaryDevelop()", +"81516c7b": "initialTIPsupply()", +"8152c7ed": "adminSetRandomInput(string)", +"81531c64": "Strike()", +"81547f25": "CONI()", +"8154b57c": "secondsAfter()", +"8154d4de": "setMarket(bytes32,bytes32)", +"81550287": "PRESALE_CLOSING_TIME()", +"81553709": "releaseEndTimeOfStage(address,uint256)", +"815639ea": "read_u64()", +"8156afdf": "Aletheia(address,address,address)", +"8157d4b5": "bindContract(address)", +"81580761": "getUniqueLineCount()", +"815847df": "_addBonusOfReferrer(address,uint256)", +"81584ff3": "CutieBitToken()", +"81587463": "sendTradeEvent(uint256[],address[])", +"81592aab": "instantUpdate()", +"81597d0c": "mintIcedToken(address,uint256)", +"815a4876": "setEthereumWallet(address)", +"815bc7a0": "vote_reward_pool_amount()", +"815c326d": "ProducerOperations()", +"815d1fe5": "RewardChannel(address,address,address)", +"815dcd36": "dailyAccounting()", +"815def1a": "changeAllocation(address,int256)", +"815eb7c1": "satoeContract()", +"815ec64a": "zReceiveFunds()", +"815f73f0": "m_walletAddress()", +"816036ae": "removeSmartContract(address)", +"8160b246": "BONUS_TIER3()", +"8160f0b5": "minimumQuorum()", +"81613a62": "LogPause(bytes32)", +"816163b1": "checkGameResult(bool)", +"81617f8f": "reLoadXaddr(uint256,address)", +"816194f8": "refreshVoteForAll()", +"81619954": "DAOFactory(address,address,address)", +"8161c5e5": "main_balance()", +"8161dfa6": "EmailSent(address,uint256,string,string)", +"8161f0e1": "execID()", +"816273f6": "computeAmountBonus(uint256)", +"8162de9c": "getCryptoAvatar(uint256)", +"8162f631": "LogFunderInitialized(address,address,string,uint256,uint256)", +"8163681e": "isValidSignature(address,bytes32,uint8,bytes32,bytes32)", +"816413f8": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256,bytes)", +"81641ff7": "casinoBank(address)", +"81646be8": "setCloseTime(uint256,uint256)", +"8165354e": "setOracleRegistry(address)", +"8165913d": "withdrawEthBalance(address,bytes)", +"81671042": "setOptionLibrary(address)", +"81676ecd": "FGorToken()", +"8167d996": "deAuthorize(address)", +"8168b41e": "TokenTWL(uint256,string,string)", +"816a873f": "createMorePaymentChannelsInternal(uint256)", +"816b6574": "LogCrowdsaleFinalized(bool)", +"816bf490": "transferTokens(uint256,address[],address,address)", +"816bff5f": "CIFCoin()", +"816c4ad1": "baseIntCalc()", +"816c66c9": "updateRank(bytes32,bytes32,uint256,bytes32,uint256)", +"816c76e3": "GoozeToken(uint256,string,uint8,string)", +"816c7da4": "approveAllAndCall(address,bytes)", +"816ca77c": "CollateralSeized(address,uint256)", +"816d199c": "SIGMA_FTL_SPEED()", +"816d3da9": "purchaseAdmin()", +"816d3dc1": "get_info(address)", +"816dbae4": "monethaVault()", +"816dcd91": "updateBitComparisonMask(bytes32)", +"816e117c": "setMaxSize(uint256)", +"816e24b0": "setupDeposits()", +"816ed336": "emitFeeSet(uint256,address)", +"816f3438": "maxFoundationCapUSD()", +"816f3f4d": "madKing()", +"816fceb7": "MultiTransaction(address,address[],uint256[])", +"816ffbab": "Uint256Oracle(int256,uint256)", +"81702c34": "refund_me()", +"8170733d": "MyBitFoundation()", +"81710c78": "getMyPolicies()", +"8171362a": "votingByXid(uint256,bool)", +"81715d8c": "pIdIter_()", +"817189df": "setEarlyLimits(uint256,uint256,uint256)", +"817246cf": "setsalesdeadline(uint256)", +"817287d0": "isOwnner(address)", +"8173832a": "LogUnsortedOffer(uint256)", +"8173b813": "setNumCities(uint256,uint256)", +"8173e363": "hard_cap_wei()", +"817472c0": "TOKEN_INIT(bytes32,bytes32,bytes32)", +"8174b6d7": "ownerCutPercentage()", +"81751312": "getAllCardsModifierPrimaryVal()", +"81758fb4": "bohwa()", +"8176419f": "SCCC(uint256,string,string)", +"81767aed": "getIdentifiers(address)", +"817725aa": "disableChangesMultitoken(uint256)", +"81776ba4": "backup_refund(uint256,uint256)", +"81777b78": "Take(bytes)", +"8177ffae": "PresaleContract(address)", +"81788e2b": "addAllowedAddress(address)", +"8178a943": "add_scribe(address)", +"8178ab99": "_transferFromSenderPaysFee_byProxy(address,address,address,uint256)", +"8179c2b3": "Result(uint256,address,uint256)", +"817ad683": "XHO()", +"817afff8": "_updateWithdrawCountry(uint256,uint256,uint256,uint256)", +"817b106e": "setChangeIdentityNarcoRespect(uint256)", +"817b1cd2": "totalStaked()", +"817b90fe": "getCategoryId()", +"817c1e52": "startICO(uint256,uint256,uint256,uint8)", +"817c7483": "settleLeague()", +"817c8966": "getLevel(address)", +"817d62a4": "shouldGetHighFive()", +"817e8332": "STAKE_BONUS_RATIO()", +"817e9d31": "setFactor(uint256)", +"817eca0c": "ConstructByEth(uint256,uint256)", +"817edbd2": "set(uint32,uint8)", +"817f0023": "recievePayment(address)", +"817f688f": "BLAAICOIN()", +"81807a07": "calculateBonusAmount(uint256)", +"818097c5": "getVotesForCandidate(address)", +"8180f2fc": "approve(address,uint256,bytes32)", +"81813963": "claimEDEX(address)", +"8181b029": "confirmImplChange(bytes32)", +"818211f8": "getProposalsNum(address,uint256)", +"8182173c": "PricesUpdated(address,uint256,uint256)", +"81824d53": "setData_1(uint256)", +"8182c6a7": "IssueToken(string,string)", +"81830593": "adminAddr()", +"818438ca": "getWizzPandaQuotaOf(uint256)", +"8185402b": "buyAllAmount(address,uint256,address,uint256)", +"8185b8e9": "getWeiPerCent()", +"81862f25": "newThreadComment(bytes32,bytes32,string)", +"81884756": "citationCount()", +"8188f71c": "holders()", +"81895b73": "registry(bytes32,address,address)", +"818a19b5": "FeeAddr1()", +"818a4b48": "preSaleMinAmount()", +"818ad300": "TeamVesting(address,uint256,uint256)", +"818b4564": "DefineType(address,uint32,string)", +"818c2858": "HPCToken(uint256,string,string)", +"818c606f": "NewAuction(address,uint256,uint256,uint256,uint64,uint256)", +"818d4b5d": "owns(address,uint256)", +"818e8cfa": "setLogoURL(string)", +"818f7d01": "checkTransferFunctionPrivateSale(address,address,uint256)", +"818f92c7": "createPurchaseOrder(address,uint256,uint256,bytes32)", +"818fd7a1": "beforeBuy()", +"81904676": "lastDistributedAmount()", +"8190cf07": "setRate_ETHUSD(uint256)", +"81915a67": "EventSetContract(address,string,address)", +"8191745f": "Description()", +"8191ab45": "setUsdConversionRate(uint256)", +"8191b9a2": "__tokenAndWalletBalancesMatch__(address,address,address)", +"8191d30f": "crossForking()", +"81923240": "mine(address)", +"8192433f": "receiveTokenDeposit(address,address,uint256)", +"8193327b": "test1Bob()", +"8193844b": "linkIssuerName(bytes32)", +"819384a2": "payoutToReferrer()", +"8194aff3": "Matchpool()", +"8195031f": "Bitsta()", +"819512cd": "buyTokens(address,uint256,address)", +"81961946": "NETR()", +"8196410b": "GustavoCoinCrowdsale(uint256,uint256,uint256,address)", +"8196b8c7": "getValueOrZero(bytes32)", +"81980c27": "SOLOBOT()", +"81981f7c": "getMyFranklin()", +"819891ac": "_newGroup(address,uint256)", +"8198c2bd": "ICCCOIN()", +"8198edbf": "getFeeRate(address)", +"819912a2": "setGame(address)", +"819927e7": "transferUserTokensTo(address,address,uint256)", +"819abe80": "giveFreeUnit(address,uint16)", +"819ad6d6": "EstimatedICOBonusAmount()", +"819b0293": "validPosition(uint256,uint256,address,uint256)", +"819b25ba": "reserve(uint256)", +"819b9773": "PaymentAvailable(address,uint256)", +"819c5773": "withdrawForMany(address[])", +"819cfdf1": "YFTToken(uint256,string,string)", +"819e3903": "LogTrade(uint256,address,uint256,address)", +"819ee03a": "InterfaceId_ERC721()", +"819f2494": "createOffer(uint64,uint256)", +"819f255a": "is_passcode_correct(uint256,bytes32)", +"819f5e24": "burnAndFinish()", +"819f8927": "setMilestonesList(uint256[],uint256[],uint256[])", +"81a00361": "YONDcoin()", +"81a03133": "authorizePayment(uint256)", +"81a084fd": "remainingGasRefundPool()", +"81a09bf0": "mergeMedal(uint256,uint256)", +"81a1384b": "LockedVotingTokens()", +"81a1fa02": "itemsCounts()", +"81a22b41": "PaymentsProcessed(address,uint256,uint256)", +"81a22bee": "reservePart()", +"81a238b5": "thirdWavePrice()", +"81a2568d": "setXToken(address)", +"81a2824f": "getUserBet()", +"81a28c28": "isSecured()", +"81a33a6f": "bytesToUInt(bytes32)", +"81a3b17f": "removeFace()", +"81a46662": "rolloverPercent()", +"81a4af15": "rewardTokens(address,uint256)", +"81a5ad6d": "YamatoCoinCrowdSale()", +"81a5e88b": "ICOCompleted(uint256)", +"81a60c0d": "getResults(uint256)", +"81a73ad5": "getTokenSymbol(address)", +"81a752ef": "removeSdaContract()", +"81a7a503": "ActiveProposalNum()", +"81a7ac54": "MAX_PERCENT_OF_SALE()", +"81a8e78a": "getGalaxies()", +"81a955b0": "editInfo(uint256,bytes)", +"81aa5067": "addLockedAccount(address,uint256,uint256)", +"81aa8a4b": "pre_PRICE()", +"81abb800": "lengthOfKeys(uint256,uint256)", +"81ac9b93": "AuctionCancelled(address,uint256,address)", +"81accd0b": "create(bytes1,bytes32,bytes32)", +"81add559": "partners()", +"81ade307": "query(string,string)", +"81ae20b2": "setInvestorsBatchSize(uint256)", +"81aea668": "atNow()", +"81aee4f4": "getNoteDesignatedReport()", +"81af0750": "Simt()", +"81af8949": "getPackBuy(address,address,uint256)", +"81af95fc": "startAuction(uint256,uint256,uint256,uint256,address)", +"81afc50d": "delegateCustodian(address,address)", +"81aff6ec": "get_presale_arbits_sold(address)", +"81b074ab": "user_on_freeze()", +"81b1c6bb": "getWinLoseAmountByBettingIdInGamblingParty(uint256,uint256)", +"81b23042": "burnMonster(uint64)", +"81b2d07b": "showBalance()", +"81b2dad9": "setByeSayer(address,bool)", +"81b3171c": "extGoalReached()", +"81b31cec": "setNextCommonTTWTokenId2(uint64)", +"81b3ea13": "getResponseError(uint256)", +"81b54498": "seedStartTime()", +"81b69494": "fee_ratio()", +"81b72d88": "startRequest_callback()", +"81b736e9": "createChild(uint256,address)", +"81b7c6e7": "stop_it()", +"81b7f157": "_updateSpendAvailable()", +"81b890fc": "setName(uint256,bytes16)", +"81b93757": "ADEVA()", +"81baf3ab": "sendTokens(address[],uint256[],address)", +"81baf55e": "processBuyRequest(string,address,uint256,uint256)", +"81baf820": "BlockScheduler(address)", +"81bb1277": "_calculatePointsAndRewards()", +"81bb2b20": "payFee(bytes32,uint256)", +"81bb59bf": "goodsNotOK(uint256)", +"81bb73af": "signArchive(bytes32,string)", +"81bb9470": "DNCEQUITY()", +"81bc3657": "migrateSinglePlanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", +"81bc50ef": "getBUA(bytes32,uint256)", +"81bc8742": "BCToken(uint256,string,string)", +"81bd24d1": "revertTest()", +"81bd66fe": "upgradeMeAdmin(address)", +"81bdc78d": "getProposalAmount(uint16,uint16)", +"81bf1cff": "ThailandVsMyanmar()", +"81c0ddc3": "villageinfo(uint256)", +"81c1346d": "setFundsCreditDaoAddress(address)", +"81c2d4b6": "freeToken()", +"81c2d875": "getConsensusRules()", +"81c385b5": "safeWithdrawEther()", +"81c405c6": "registerCustomer(address,address,bytes32,uint256)", +"81c485e7": "getDiscipleSale(uint256)", +"81c4e1c8": "User(address,address,address)", +"81c56dfb": "d27d7bad()", +"81c59c8d": "getStrategyTokenCount(uint256)", +"81c5b206": "addMeToGame(uint256)", +"81c648e2": "betYours()", +"81c64ea2": "SixPlayerRoulette()", +"81c70870": "ClientUpdated(address,address)", +"81c79fd5": "transferMerchantProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"81c7ae3b": "miningEveryDay()", +"81c8149d": "timeOfLastProof()", +"81c81cdc": "setContractStatus(address,bool)", +"81c8b563": "coinLockRemove(address)", +"81c92486": "ProcessRooms()", +"81c9786c": "administratorsLength()", +"81ca3ea1": "hasEitherAttribute(address,bytes32,bytes32)", +"81cb79ca": "createEmptyTrack(uint256)", +"81cbeaf0": "getValidated(address,address,uint256)", +"81cc49dd": "secondLoos()", +"81ccb678": "Confiscate(address,uint256)", +"81cd2ffb": "ConversionFeeUpdate(uint32,uint32)", +"81cd30a8": "round_c_begin_date()", +"81cd4570": "Moneytoken()", +"81cd5eec": "bonusPot()", +"81cd8194": "transferPrice()", +"81cd872a": "deals(bytes32)", +"81cda317": "MINTING_HARDCAP()", +"81cde1a9": "GOOD_ERC20()", +"81ce7184": "TestText()", +"81cebf7e": "vestingPaid()", +"81cedafc": "Nodalblock()", +"81cf7fef": "registerSmartID(string,string,string,bool,bool)", +"81d01ed3": "p2()", +"81d12c58": "requests(uint256)", +"81d136cb": "presaleAllocation()", +"81d16e0d": "_isDiamondVerified(string)", +"81d2c871": "SetMinFee(uint256)", +"81d2fd9c": "setFaucetAmount(uint256)", +"81d36f4e": "KEVINTOKEN()", +"81d38ada": "Remove_member(address,address)", +"81d38f2d": "SheetMusic(address)", +"81d3c435": "setAddresses(address)", +"81d434e9": "transferToICAP(string,uint256)", +"81d44053": "reading_length()", +"81d45a5c": "isPreICOPublicClosed()", +"81d5e753": "CuratedWithWarnings(address[],address,address[],address[])", +"81d693be": "claimDay(uint16)", +"81d6c866": "harvestabledivs()", +"81d77862": "newMostInviter_()", +"81d92ed4": "shp()", +"81d96005": "sigDestinationTransfer()", +"81d961e4": "eligible(uint256,uint256)", +"81d97051": "setOwnerOne(address)", +"81d9c5e4": "handleIncomingPayment(address)", +"81dafe0e": "calculateDuration(uint256)", +"81db6c28": "redeemVoucher(uint256,address,address[],uint256)", +"81dc66f4": "checkTankAuction(uint256)", +"81dca05c": "setAuthorization(address,address,bool)", +"81dd70db": "kickoffQuorumPercent()", +"81de10e2": "getContentAt(uint256)", +"81ded5b8": "numOfConfirmationNeeded()", +"81df464f": "totalRaisedIco()", +"81df893c": "withdrawMon(uint64)", +"81e1ccba": "stakingPercentage()", +"81e2ef3a": "ReceivedETH(address,uint256,uint256)", +"81e529cd": "setOwnerFreeDay(uint256)", +"81e559ae": "clientKeys(uint256,uint256)", +"81e69eff": "publishMetaData(bytes32)", +"81e6c686": "returnMaxGoal(uint256)", +"81e6e083": "getLifetime()", +"81e75dd0": "testPublicBuy()", +"81e7645f": "findFigures(uint256,uint256)", +"81e77878": "getChooses()", +"81e7a97e": "killMonster(uint16,uint8)", +"81e7e20e": "user(address)", +"81e7e329": "test_6_accessRestriction_removeMember_shouldThrow()", +"81e83991": "howMuchInEscrow()", +"81e8927b": "getValidationsCount()", +"81e8a1f7": "newRandomByte(bytes)", +"81e9abef": "_updateEarnedBy(uint256,uint256)", +"81ea4408": "getCodeHash(address)", +"81ea6834": "getEvilMortyAddress()", +"81eac2ee": "checkClientFunds(address)", +"81eaf99b": "lockSupply()", +"81eb3e01": "setValueStep1(uint256)", +"81ebd8de": "setDeveloperStatus(address,address,bool)", +"81ebdeea": "testThrowCreateWithNonceRetracted()", +"81ec792d": "getPackSummary(uint256)", +"81ed8680": "pingTimestamp()", +"81edaae4": "serviceFee(address,uint256)", +"81edc308": "insertAndApprove(uint256,address[],uint256[])", +"81ef1b18": "startFundraising()", +"81ef93ae": "lastFueledFundingID()", +"81efc01d": "withdrawHouseStake(uint256)", +"81f0c440": "MikeChanCoin()", +"81f1a41b": "CROWD_SUPPLY()", +"81f1aad7": "setCancelApproveFee(uint256)", +"81f1d75c": "updateUserEmail(address,bytes32)", +"81f1f92a": "withdrawSoftwareProductDevelopment()", +"81f1fa93": "RKCAcquired(address,uint256,uint256)", +"81f2a3f1": "GetDownTickPrice(uint256)", +"81f2d44c": "getStarIdAtPosition(uint8,uint8,uint16)", +"81f2d4ee": "updatePartner2_will(string)", +"81f3e897": "getSettingData(uint256)", +"81f4f9bf": "ticketHolder()", +"81f59f51": "shareService(bytes32,address)", +"81f5f75c": "getApprovedProxies()", +"81f65883": "CompetitionStore()", +"81f6bf7d": "deleteCertificate(string)", +"81f6c7e5": "_release(uint256)", +"81f799e2": "reveal_end_time()", +"81f86241": "ExGirlfriendCoin()", +"81f8658a": "DATE_OPEN_ON_FLOOR()", +"81f87d6d": "deleteCandidateCache(address)", +"81f8a6f7": "checkTokenSupported(address)", +"81f8b722": "LogIncomeAllocation(address,uint256)", +"81f91c4a": "transfer(address,bytes32[8])", +"81fab567": "maxPayments()", +"81fb1fb4": "participants(uint256,uint256)", +"81fb2585": "isOfficial(uint16)", +"81fb3803": "einzahlen()", +"81fbc084": "mul27(uint256,uint256)", +"81fbf0a5": "totSupply()", +"81fbffe1": "getGiftoAddress()", +"81fc4d90": "increaseLockAmount(bytes32,uint256)", +"81fc7f2b": "accountFrozenStatus(address)", +"81fcef3c": "bitcoinContract()", +"81fcfbcc": "allocateBountyTokens()", +"81fd552f": "storageOwner()", +"81fd63c2": "kanaabbcwalletcoin()", +"81fdbeff": "TransferCoinsFrom(address,address,uint256)", +"81fe5786": "max(int256,int256)", +"81fedc73": "Casinowo(uint256,string,uint8,string)", +"81feed27": "awardName(uint8)", +"81ff01f7": "REPOPCore()", +"81ff4d0b": "TEAM_TOKENS()", +"81ffdfab": "getTokenAmountForCampaign(bytes32)", +"82004053": "ownerSetZlotsAddress(address)", +"8200a57f": "changeOwner(address,address,bool,bytes)", +"8201ff14": "setNewTerrain(uint256,uint256,bytes32)", +"820203a3": "ztx()", +"82023707": "updateSecondUnionIds(bytes32,bytes32)", +"82024a14": "PromissoryToken(address,uint256)", +"820267ff": "diminishPool(uint256)", +"82027b6d": "isAllowed(bytes32,address)", +"820333a2": "seeAddress()", +"8203e7f3": "justSendDonations()", +"8203f5fe": "initContract()", +"82043443": "transfer_(uint256,address,address,uint256)", +"820447fc": "TrimpoToken(uint256,string,string,address,address,address)", +"8204ecdd": "getFee(bytes)", +"820537b7": "getDaoists()", +"8205e8e7": "setPayment(uint256,uint256,bool,address)", +"82067cc0": "pauseRoundB()", +"8206ba89": "MAX_STAGE_2_LIMIT()", +"82076979": "TeamTokenHolder(address,address,address)", +"820776de": "DivsToRefundpot()", +"8207b07d": "lastPurchasePrice()", +"8208921d": "getWalletFor(address)", +"8208df23": "stack(address,uint256,uint256)", +"820935dd": "HDILToken()", +"82094fa4": "setAddressAdmin(address)", +"8209b38a": "Freecoins24()", +"8209d121": "a_viewSellOffersAtExchangeMacroansy(address,bool)", +"820a5f50": "fundedAmount()", +"820b9f1e": "kncPerETHRate()", +"820bec9d": "receivedETH()", +"820c05db": "FPINCOIN(uint256,string,string)", +"820c1dd0": "pollBurnQtyMax()", +"820c59bb": "GetIsPauded()", +"820c7468": "isVendorOf(address,address)", +"820c815e": "EGGS_TO_HATCH_1DINO()", +"820cfa06": "LogUserRemoved(address)", +"820dc540": "lockBalanceIndividual(address,uint256)", +"820e0d1f": "getChallenger(bytes32)", +"820e5e0b": "DividendRecycled(address,uint256,uint256,uint256,uint256)", +"820e79ed": "cstBalanceLimit()", +"820e93f5": "email()", +"820ecdaf": "iou_purchased(address)", +"820f52bc": "validPeriods()", +"820f9b85": "changeBetRange(uint256)", +"82100be6": "getWinningPayoutDistributionHash()", +"82100e3f": "deploymentBlock()", +"82104786": "Profit1000()", +"8210f13b": "BatchCancelSales(uint256[])", +"82123075": "safeExit()", +"82123cd2": "prizeReferee()", +"8213dafc": "setupAirDrop(bool,uint256,uint256)", +"82142370": "preICO(address)", +"82147bb4": "getGuardianNum()", +"8214fe03": "setMetadataChannels(string,string)", +"82154075": "Rentable()", +"8215c35d": "bincentiveErrand()", +"821648f4": "accessHolder(address)", +"8216ed6c": "getCompte_22()", +"82173d11": "KentKoinToken()", +"82189551": "buy(uint256,bytes)", +"8218e540": "insertHash(uint16,uint8,uint8,string)", +"821919fd": "getPetCanPresellCount()", +"821b771f": "targetBondingRate()", +"821b98f3": "closeTheoreticalClosedAuction(address,address,uint256)", +"821bee73": "vestings(uint256)", +"821c9a57": "test_testableStandardCampaignRefund()", +"821d7356": "setMainnetLocked(bool)", +"821e2491": "MyBetting()", +"821e3759": "payDivsValue(uint256)", +"821e4496": "isVerifiedCode(address,bytes32)", +"821e9169": "testFailControllerChargeMoreThanApproved()", +"821f830f": "addPack(address)", +"82202a15": "fetchCurrentSnapshotBlockIndex()", +"8220e945": "FactoryChangedEvent(address)", +"8221ac6f": "_createHolderId(address)", +"822221a6": "setContractToken(address,address)", +"82222674": "changeEndBlock(uint256)", +"822296d4": "isList()", +"8222a5ce": "insurance_Token()", +"8222aa1e": "settle(address,uint64,uint64,bytes)", +"8222b7e9": "getBonusPercentage()", +"8223188c": "Rose43()", +"82233b7a": "returnHostCut(uint256)", +"8224b76b": "StartOK()", +"8224ca2b": "SaleEDUSupply()", +"82251512": "divCeil(uint256,uint256)", +"8225172f": "getVowInfo(bytes32)", +"82251b99": "DRONECOIN()", +"8225757b": "getAddressByUserId(uint256)", +"822785e4": "_setTokenDescription(address,uint256,string)", +"82281104": "incise(uint256)", +"82286755": "MyRefundableCrowdsale(uint256)", +"82288e89": "setAccountIsNotFrozen(address,bool)", +"8229268b": "StageThreeDisable()", +"822942aa": "placeDeal(bytes16,address,address,uint256)", +"822a46ae": "setTiimPrivateSaleAddress(address)", +"822b08d0": "grantManagerPermission(address,string)", +"822b0be3": "teamTimeLock1()", +"822b1747": "_getEpicPlusRarity(uint32)", +"822bd0dd": "BOT_ELEMENT_3()", +"822c7671": "testControllerShouldBeSet()", +"822cba69": "setUint64(uint64)", +"822d487d": "getBrands()", +"822d9b4e": "onlyOwnerGetBountyWallet()", +"822daf60": "timeFactor()", +"822e1506": "_bonusRatio2()", +"822e57f1": "depositHelper(uint256)", +"822ee26c": "canMovetoken()", +"822f31e2": "AlexCoin()", +"822f7eb4": "setFeeReceAccount(address)", +"823113c7": "thresholdsByState(uint256)", +"82311e25": "checkStage1Over()", +"823126d5": "_createToken(address,uint256)", +"8231ee98": "lastTimeGen0()", +"823213ef": "removeExclusiveRate(address)", +"823287b7": "chargeQuarterlyRate(bytes32,address)", +"8232e09e": "DeleteUser(address,address)", +"82330505": "setCommissionPoints(uint256,int256)", +"823374e3": "changeDedicatedProxy(address)", +"8233fbcb": "getTotalProfit(address)", +"82348bab": "setMinSlippageFactor(uint256)", +"823506af": "getData_29()", +"82351b43": "getLinearRelease()", +"82357105": "bl()", +"8236342c": "hashToPoint(bytes32)", +"82367b2d": "updatePrice(uint256,uint256)", +"8237ab8d": "IsSeedMember(address)", +"8237bbf0": "min_shares_to_sell()", +"82381c96": "WatchCurrentMultiplier()", +"8238520f": "getParentBranch()", +"8238b968": "BeatOrgTokenMainSale(address)", +"8238cc8f": "getFIRST_STEP_MULTIPLIER()", +"823914d9": "multisigETH()", +"82396bc6": "lnLimited(int128,int256)", +"82396f60": "getTokensInAction()", +"8239773a": "NePay()", +"8239b1e7": "getSequenceId(uint256)", +"8239b29d": "periodITO_hardCapInUSD()", +"823ab43b": "returnedTo(address)", +"823ac373": "verify(bytes32,bytes,address)", +"823b5e9f": "getAuditTimeoutInBlocks()", +"823b7475": "UpgradeAgentSet(address,address)", +"823ba0b8": "burnFormula()", +"823ba381": "InvestClose(uint256,uint256,uint256)", +"823bce43": "zasxzasx()", +"823c73ec": "MarginToken()", +"823c82ca": "FREEZE_PERIOD()", +"823cfd70": "changeMinStakingTime(uint256)", +"823e1832": "ChangeClientCategory(address,uint256)", +"823e569e": "controlWallet()", +"823e6e79": "validateBalance(address)", +"823edd48": "getComponentId(uint256,uint256)", +"823f57ca": "withdrawFromAmt()", +"82401f06": "transactionSwitch(bool)", +"82402743": "createPromoNarco(string,string,address)", +"8240ae4b": "challengeReparameterization(bytes32)", +"82419e92": "numberToString(uint256,uint256)", +"8242216d": "jackpotOfHouseEdge()", +"82425d7c": "hasNoBids()", +"82428323": "updatePeriodically(uint256)", +"82430c07": "_sendOwnership(address,address,uint256)", +"824338bd": "founderAllocation()", +"8243a036": "presaleFemaleTokensLimit()", +"8243fd61": "addMilestone(uint256,uint256,uint256,uint256,string)", +"8244208c": "FrescoToken()", +"8244b8c8": "findEndpointByAddress(int256,address,address)", +"8244ee58": "Amberella()", +"824563f6": "mintingContractAddress()", +"82457d53": "periodTable(uint256)", +"82474b1b": "teamName()", +"8248159e": "registerApprove(bytes32,uint8,bytes32,bytes32)", +"82484a36": "vestingToken(address)", +"82484c0b": "BetstreakICO()", +"824891f8": "changeMinimumCap(uint256)", +"82489311": "_buyNationInternal(uint8,uint256)", +"8248e722": "updateConfig(uint256,uint256)", +"824916b6": "playersAmounts()", +"82495626": "getVoteAccount(uint256,uint256,uint256)", +"824989c3": "changeLifetime(uint256)", +"824a5166": "ChannelCloseRequested(address,uint256)", +"824be3c7": "TheRichestWins()", +"824d1b4b": "preICOStartDate()", +"824d5603": "getIndex(uint16,uint16)", +"824d84d5": "createVestingContractWithFloatingPercent(address,uint256,uint256,address,uint256[])", +"824dbc9a": "changeMembership(address,uint256,bool,string)", +"824e5ebf": "distributeETHOS(address[],uint256)", +"824eddd9": "removeSupportedToken(address,address)", +"824eec3b": "editionOfTokenId(uint256)", +"824f0f7e": "tittyContractAddress()", +"824f2f1f": "globalConstraintsCount(address)", +"82507c5a": "Radix()", +"8250ea7d": "getReferralPool()", +"8250f7e5": "isInvestmentPermitted(address,uint256,uint256)", +"82518c2a": "exercisePut(uint256,uint256,uint256)", +"82520e07": "receiveFrom(address)", +"82528791": "setWallets(address,address,address,address,address)", +"8252ad9c": "totalAuction()", +"8252b2cf": "acceptCreatureOwnership()", +"8252e391": "transferInternal(address,address,uint256,bytes,bool,string)", +"825374ba": "buyATCToken()", +"8253adf1": "createBet(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", +"82544c1f": "GoWalletToken()", +"8256687c": "addClaim(bytes12,bytes12)", +"82568a24": "p_update_planetCryptoCoinAddress(address)", +"82576dd6": "Laundromat(uint256,uint256)", +"8257f610": "canPurchase(uint256)", +"8258cbbd": "getContractETH()", +"825918ee": "delgodaddress(address,address)", +"82594f09": "iMaliToken(address)", +"825993ab": "totalCouponsUSD()", +"8259c78c": "depositPpm()", +"825a229e": "setEditor(address)", +"825af86b": "processJackpots(bytes32)", +"825b8b42": "buy(uint16[])", +"825bdb74": "setSecondaryManager(address)", +"825c3e36": "closeGame(bytes32,uint8)", +"825d7034": "RiptoBuxToken()", +"825e04d3": "dfs()", +"825edfd3": "getClassMechValue(uint256)", +"825f5a93": "RoundDSold()", +"825f6552": "SVET()", +"82609d51": "failedDonations()", +"82611dfe": "setOption(string,uint256)", +"8261b6bf": "receiveTokenLoot(uint256[9],uint256,uint8,bytes32,bytes32)", +"8261c4c7": "MINERS_HOLDER()", +"8261cfe4": "travelTo(uint256,uint256)", +"8261eb1b": "frtToken()", +"82629384": "shareStoredTokens(address,uint256)", +"8262963b": "setInfo(string,uint256)", +"8262fc7d": "addrBalance(address)", +"8263a938": "getProposalLength()", +"8263e953": "_claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", +"826446fa": "parse2wei(uint256)", +"82645725": "Planetagro(address)", +"82648222": "retrieveWCT2()", +"8264fe98": "buyPunk(uint256)", +"8265d137": "checkRegistrationStatus(bytes32,address)", +"8265d577": "TestreplayAnser(uint256)", +"8265dbc1": "bonusAndBountyTokens()", +"8265fb13": "optionPoolMembersAmount()", +"82661dc4": "splitDAO(uint256,address)", +"826679a1": "getFundSPBalance()", +"82672304": "GeneratePublicKey(string,string)", +"82672482": "vestingRegistered()", +"826776fa": "claimTeamTokens(address,uint256)", +"8267a9ee": "deleteIntValue(bytes32)", +"82688f14": "bn128_multiply(uint256[3])", +"8268efcd": "RunningAuctionsEvent(address,uint256,uint256,uint256)", +"82692679": "doSomething()", +"82699367": "CicadaToken()", +"8269cf4d": "seo(uint256)", +"8269d3c0": "buyTokensT4T(address)", +"8269df9b": "getLastCategory()", +"8269ee3d": "Issued(address,uint256,uint256)", +"826a483f": "_emitHashSet(address,bytes32,bytes32)", +"826a49c9": "removeGameInfoFromArray(uint256)", +"826c10d9": "exhaustBattle(uint256)", +"826c2447": "PGDToken()", +"826c69b8": "participantBalance(address)", +"826c6f73": "addServer(string,uint256)", +"826cc57a": "referral_address()", +"826d3379": "tierPrice(uint256)", +"826db6c8": "SLFYCoin()", +"826e9def": "initPresaleTokenVault(address[],uint256[])", +"826efb6d": "payBonus(address[])", +"826f57a1": "endBetting()", +"826f8a00": "createOrder(string,string,string,string,string,string)", +"827037d6": "modCEOAddress(address)", +"827037db": "icoStart()", +"8270c41e": "setPriceToken(uint256)", +"82712aeb": "purchaseWolkEstimate(uint256,address)", +"827147ce": "returnString(string)", +"8271bd99": "payoutAmount(address)", +"8271bedc": "getUserBetsLength(uint256)", +"8272d083": "isSupported(address,bool)", +"82731247": "isB(address)", +"8273a411": "allBalancesOf(address)", +"82744368": "minimumEtherAmount()", +"82757f99": "withdrawTeamPot()", +"82760c88": "GoGlobals()", +"82766b1b": "setAmount(address[],uint256[])", +"82768708": "weiMinimumGoal()", +"8276bd19": "PROPOSED_STATUS()", +"8276ccf2": "setHeroName(uint256,string)", +"82771c8e": "isSane()", +"82771ff4": "endPlaceOrder(uint256)", +"82776521": "strConcats(string,string)", +"8278337a": "writeAttributeFor(bytes32)", +"8278fcea": "AirdropReward()", +"82790c19": "SideBridge(uint256,address[],uint256)", +"82792ce8": "getInsideCallSender()", +"82797bea": "Preesh()", +"8279c7db": "setReceiverAddress(address)", +"8279ea54": "change_bounty_manager(address)", +"827aeb16": "_changeTittyPrice(uint256,uint256)", +"827bc64b": "setLeftoverTokensBuffer(uint256)", +"827bfbdf": "setLocation(string)", +"827c049e": "emission()", +"827c1e41": "getTittyByWpId(address,uint256)", +"827cc452": "withDrawMoney(uint256)", +"827d084a": "getActiveBusinessesPerCity(uint256)", +"827d7ba9": "Fosha(address)", +"827e4cf1": "manuallySetNumRewardsAvailableForChildAddress(address,address,uint256)", +"827ef325": "_parseMsgData(bytes)", +"827ef4c7": "m_fundsAddress()", +"827f143e": "setPresentMoney(uint256)", +"827f32c0": "generateTokens(address,uint256)", +"827fc57c": "ChickenFarmer()", +"827ffcea": "horas()", +"8280114b": "addressOfERC20Token()", +"828033da": "getFlag(uint256,string,string)", +"82803c22": "sell_tokens(uint256)", +"8280b498": "setFrozen(address,bool,uint256)", +"82812aed": "BuyPriceSet(uint256)", +"828183bc": "getSwapInfo(uint256,address,address,address)", +"8281da38": "refundBet(address,bytes32)", +"8281feaa": "QuestionIs(string,string)", +"828282e9": "bonusRates(uint256)", +"8282e1e4": "SEPA()", +"828363b4": "transferAdviser(address[],uint256[])", +"828375e8": "computeTokensWithBonus(uint256)", +"82838c76": "subTotalSupply(uint256)", +"8284f2a7": "proposeGame(address)", +"82857a03": "approveAndCallWithSender(address,uint256,bytes4,bytes)", +"8285d272": "GOAL_REACHED_CRITERION()", +"82862275": "getDeadline(uint256)", +"82872491": "setCaps(uint256,uint256,uint256,uint256)", +"8287ccb4": "onDeposit(uint256)", +"8287d6ce": "_createDeposit(address,uint256,bool)", +"828806cd": "submitTransactionWithSignatures(address,uint256,uint8[],bytes32[],bytes32[])", +"8288196d": "THANKSTEST1()", +"8288edd0": "nonTransferrableBalances(address,address)", +"828909bd": "getIntValue()", +"82892dd9": "blockMember(address)", +"828a33b9": "FreeDiceCoin()", +"828ae96d": "cdc()", +"828c06cd": "expLimited(int256,int256)", +"828ca03c": "getTaskListSize()", +"828d671c": "dyn_sig()", +"828dfbca": "user_acq_address()", +"828eab0e": "defaultResolver()", +"828f1b42": "buyObject(address)", +"828f4057": "numberofGamePlay()", +"828f5fba": "air2(uint256,uint256,uint256)", +"828f717c": "fixPlayerID(uint256,uint256)", +"828f8581": "tokenTransferFunctionIdentifierMap(bytes32)", +"8290d1e0": "StandardTokenDeployable(string,string,uint256,uint256,address)", +"8290fe25": "finalizeExits(uint16)", +"8291286c": "contractId()", +"82914e5d": "getObjectData(bytes32[],uint8[])", +"82916381": "execute(address,uint256,uint256,bytes)", +"82917320": "increaseLockedBalance(address,address,uint256)", +"8293779c": "isOps(address,address)", +"82939b27": "getPreSaleData()", +"8293a114": "unbanAddress(address)", +"8294a796": "WelfareHandout(address,uint256,uint256,uint256,uint256)", +"829534d7": "m_pendingIndex()", +"8295a9ba": "checkDupe(string)", +"829644a6": "freelanceReinvest(address)", +"82964696": "ZSYCoin(uint256,string,string)", +"8297b90c": "PRESALE_LENGTH()", +"8297d46d": "BTL_ATHENIAN()", +"8298c3b5": "itemVoteDn(address,uint256)", +"8298c5dc": "last_winner()", +"829923bf": "admin_setAdmin(address,bool)", +"829965cc": "epochCount()", +"82996d9f": "rent()", +"829981fb": "FinalToken(uint256,string,string)", +"829a34c6": "getUserInfo(bytes20)", +"829a92f4": "hardcapChanged(uint256[])", +"829b38f4": "getMaxEscrowAmount(uint256)", +"829bd99c": "balanceOfByLegacy(address)", +"829c3428": "startTransfer()", +"829c38e1": "claimSolve(uint256[],uint256,uint256,bool)", +"829c3dee": "createDebt(bytes32[8],bytes,uint256)", +"829e9ece": "deathData_v16()", +"829ebdcd": "upgradeFor(address,uint256)", +"829ed3a5": "ownerTokenTransfer(address,address,uint256)", +"829efd71": "TonhaoCoin()", +"829f0667": "verify_sk_knowledge(uint256[2],uint256[2])", +"82a0888b": "totalSaleWei()", +"82a09cc5": "TokenCreated(uint256,address,string)", +"82a123ea": "WhitelistUpdated(uint256,string,uint256)", +"82a147cd": "addYouCollectContract(address,bool)", +"82a18331": "MOONCOINCONTRACT()", +"82a1ce1b": "setSourceToken(address)", +"82a352e4": "firstStagePriceOfTokenInWei()", +"82a35706": "tokenSoldPreICO()", +"82a3e5df": "STATE_CLAIM_ENABLED()", +"82a3f98d": "VOTING_PERIOD_DURATION()", +"82a5285d": "getMinBetAmount()", +"82a60a59": "CollectibleIndex2()", +"82a62137": "activateAccount(address)", +"82a66d93": "earlySponsor()", +"82a7cf1e": "ownerOf(uint16)", +"82a86cda": "getRarePLATInfo(uint256)", +"82a90545": "funComputeRoundTime(uint256)", +"82ab890a": "update(uint256)", +"82ab8a82": "startDeal(bytes32,uint256)", +"82ac1d99": "getNodeValue(bytes32)", +"82acaa39": "getChildrenAgainstAnimalId(uint256)", +"82ad5ecf": "yeedToken()", +"82ad6f35": "refund(address,address,uint256)", +"82ade405": "forceChooseRandomWinner()", +"82ade466": "getWithdraw(address,address,uint32,bytes32[],uint256)", +"82ae2227": "createUser(uint32,uint64)", +"82af3526": "addGift(address,uint16)", +"82afd23b": "isActive(uint256)", +"82b00403": "finalFundGoalReached()", +"82b022e0": "set_species(uint256)", +"82b0444e": "CityMayor()", +"82b0627c": "changeFundingTime(uint256)", +"82b0862f": "addBps(uint256,int256)", +"82b1ad50": "totalPrize()", +"82b1b4f3": "WithdrawToAdmin(uint256)", +"82b1b617": "ViewSellOrder(address)", +"82b1fb0d": "setGlobalMultisigWallet(address)", +"82b2a559": "buy(uint256,uint256,address,address)", +"82b2e257": "getTokenBalance()", +"82b2f95f": "DEVELOPER1()", +"82b49248": "BlockOne()", +"82b57b96": "MONUMENT_UN_FEE()", +"82b58599": "WeiHash(address)", +"82b61a3e": "Rectangle(address)", +"82b68f4f": "actionVotedRate()", +"82b74b89": "lockTransfers()", +"82b7b500": "find(string)", +"82b7fa4e": "cancelGladiatorBattle(uint256,bytes32)", +"82ba614f": "setRound(uint256,uint256)", +"82bb326b": "isGoldMigrated(address)", +"82bbcc2c": "removeIdArrayItem(address,uint256[],string,uint256)", +"82bbd1fe": "setlastprize()", +"82bbdbec": "nameAvailable(string)", +"82bbe9cc": "getGameFee(uint256)", +"82bc07e6": "lastRound()", +"82bcd463": "DAKUToken()", +"82bcef79": "increaseAllowanceProxy(address,address,uint256)", +"82bd5a71": "warriorToApproved(uint256)", +"82be0ccd": "distributeTokensToApprovedUsers()", +"82be415d": "BonusDealer()", +"82bf6464": "DAOrewardAccount()", +"82bf9a75": "setPip(address)", +"82bfa9f2": "upgradeStorage(address)", +"82bfc739": "reLoadXaddr(address,uint256,uint256)", +"82bfefc8": "TOKEN()", +"82c00a50": "getCourseLength()", +"82c0287e": "deleteEtherBox(address)", +"82c058d9": "showTrnsactionLog(uint256)", +"82c0652a": "calcMultiplier()", +"82c174d0": "preSigned(bytes32,address)", +"82c198ef": "fxpDiv(int256,int256,int256)", +"82c20f84": "preSaleBonus3Percent()", +"82c26c6a": "GOCToken()", +"82c30220": "Earthcrypt()", +"82c4175d": "privateRate()", +"82c48f9e": "_batchTransfer(address,address[],uint256[])", +"82c51376": "LENRCoin(uint256,string,uint8,string)", +"82c59c81": "getGameBlocks(uint256)", +"82c6b2b6": "OfficalHold()", +"82c7340e": "GetPlayerRound(address)", +"82c7bac7": "callOnExchange(uint256,bytes4,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"82c7bf2f": "Zigger()", +"82c7f4d6": "setMessagefromdovie(string)", +"82c8ac27": "DatCrowdPreSale(address)", +"82c8c76f": "blocktube(uint256,string,uint8,string)", +"82c9004a": "computeArtistGenesisSaleFee(bytes32,uint256)", +"82c97b8d": "collectReward(address)", +"82ca116d": "changeBankAddress(address)", +"82ca49a8": "sendOwnerFee(uint256)", +"82cac6df": "lastRate()", +"82cb08aa": "MoveToBase(uint256)", +"82cb9df9": "addrFinance()", +"82cbb2e4": "Dagelane()", +"82cbdc0f": "create(string,string,string,address)", +"82ccef76": "GameEnded(address,address,uint256,uint256,uint8,uint8)", +"82cdc0fb": "setRunTimeAfterSoftCapReached(uint256)", +"82cdc93e": "getPlayerInstWinning(uint256,uint256,uint256)", +"82ce6523": "IWasFirstShareToken()", +"82cee91c": "BonusPeriodFor(uint256)", +"82cf114c": "setProfitAddress(address)", +"82cf2116": "transferAndAuction(uint256,address,uint256,uint256,uint64)", +"82cfd1e0": "turn_flag_OFF()", +"82cfee4d": "BitcoinSapphire()", +"82d04bd4": "_complianttransfer(address,uint256)", +"82d1407c": "calcTicketEarnings(uint256,uint256)", +"82d18650": "minPay()", +"82d1bc89": "Darks(address,address)", +"82d22377": "infraIndexToApproved(uint256)", +"82d288c2": "setMintingCurator(address)", +"82d29195": "FundingStageNum()", +"82d2dcfb": "UETH()", +"82d33374": "updateLastTransactionTime(uint256)", +"82d40041": "getAbilitiesForCollectibleId(uint256)", +"82d419f5": "fullUnlockAngelsAccounts(address[])", +"82d4685c": "setAllocations(uint256,uint256,uint256,uint256,uint256,uint256)", +"82d559de": "catchMonster(address,uint256,uint32,string)", +"82d5eb98": "playerIdToExtendedAttributes(uint256,uint256)", +"82d708c4": "dividendRecentBuyersPercentage()", +"82d74005": "YUPTimelock(uint256,uint256,address,uint256)", +"82d82983": "RuralBank(uint256,address[])", +"82d8dff6": "getMaxPrice()", +"82d95df5": "setStartDate(uint256)", +"82d9ac39": "percentForBounty()", +"82d9b9bb": "turnOffCanUpdateNextGameMinAndMaxBlockUntilGameEnd()", +"82db9bd4": "setCaissa()", +"82dc107d": "SECOND_TIER_SALE_START_TIME()", +"82dc1ec4": "addPauser(address)", +"82dc5c9d": "UnionChain()", +"82dc7836": "openGate()", +"82dc87b6": "RefundPeriodStart()", +"82dced63": "testHitPresaleCapPresale()", +"82dd6012": "_aremoveByIndex(uint256)", +"82dd87dc": "deleteUser(uint256,uint256)", +"82ddad13": "Auction(address,uint256,uint256,uint256,string)", +"82de6df7": "getGameBegin()", +"82deb6cd": "m_publiclyDistributedTokens()", +"82decb49": "_maint_setCustomSeed(uint256)", +"82dfc5f7": "WETH_ADDR()", +"82dfe1fb": "changeTreeAttributes(uint256,string,string)", +"82e1250f": "DaysToMyDestroy()", +"82e2f767": "finalizedNextUpgrade()", +"82e3036c": "StandardToken(string,string,uint8,uint256,address)", +"82e37b2c": "getPlayerName(uint256)", +"82e380ef": "auctionInformation(uint256)", +"82e41258": "unregisterPrefix(string)", +"82e43a3b": "TheFrozenSolidShitCoin()", +"82e46b75": "setCoin(address)", +"82e5d073": "getRewardTokenCount()", +"82e615fc": "bidRegistry()", +"82e61d79": "PayoutDividends(uint256,uint256)", +"82e6bbd2": "onlyBouncerExecuteDelegatecall(address,uint256,bytes)", +"82e6d3d6": "foundationSupply()", +"82e77165": "_setAllKeys(uint256,uint256)", +"82e93309": "importGenesisPairs(address[],address[])", +"82e94ac5": "eject()", +"82e96916": "setCoinPercent(uint256)", +"82e97740": "initAffiliate()", +"82ea3985": "clearNextArenaTime()", +"82ea84a3": "getIssuedScoreAmount()", +"82ea872c": "refHandlerAddress()", +"82ea97b3": "tokensForIco()", +"82ebaec4": "distributeTEST(address[])", +"82ebe9ba": "photoData()", +"82ec5ddc": "BioToken(address,address,address,address,address)", +"82ec623c": "_noThrowImplements(address,bytes4)", +"82edaf94": "tokenContractAddress()", +"82ee27cc": "setCoinBalance(address,uint32)", +"82ee282b": "thirdBonusSalesEnds()", +"82eed60c": "pauseCrowdsale(address)", +"82ef351a": "getTotalMonster()", +"82ef6483": "RabbitCore(string,string)", +"82ef8fa8": "adminClaim()", +"82f0151c": "MetaHash()", +"82f0622a": "teamReward()", +"82f0b31c": "getLife(bytes32)", +"82f0d875": "makeHash()", +"82f128f7": "MJOYToken()", +"82f16872": "raffle_balance()", +"82f19e3a": "deltaTFunc(uint256,uint256,uint256,uint256,uint256)", +"82f1ec1f": "getActivityAccountInfo(address)", +"82f2045c": "getEntitiesCount()", +"82f2a164": "addCET6(uint32,uint32,uint32)", +"82f2d8d7": "moveMarketData(uint256[],uint64[],uint64[],uint128[],address[])", +"82f39e2f": "mktTokenCap()", +"82f43303": "roundMax()", +"82f4b3a8": "badgeIfFreeze(address)", +"82f4ef73": "getStageName()", +"82f56556": "udgradeAttack(uint256,uint256)", +"82f5a3e1": "withdrawTotalBalanceDonateWei(address)", +"82f5e31b": "convertFromWei(bytes32,uint256)", +"82f66ff0": "RabbitCoin(uint256,string,string)", +"82f68dc4": "rankOf(uint256)", +"82f7325e": "CRYPTOVENO()", +"82f768d4": "tokenbeneficiary()", +"82f78260": "acupuncturecoin(uint256,string,string)", +"82f7d5c3": "divideNumberBy()", +"82f8152c": "account2()", +"82f858e8": "addresses4(uint256)", +"82f867a4": "BpsToken()", +"82f8767d": "SuperPAC()", +"82f87fdb": "checkFundingStateFailed()", +"82f8b6e9": "roundInterval()", +"82fa3421": "push(uint256,bytes32)", +"82fa7f8b": "weiPerWholeToken()", +"82fa9c0d": "isPersonalBonuses()", +"82fac352": "getPricesOfLatestTradeRecords(uint256)", +"82fb3b7c": "voteNoLockByAdmin()", +"82fb63c7": "getImageCurrentRegionId(uint256)", +"82fbbe47": "Ticked(uint256,uint256,uint256)", +"82fbdc9c": "register(bytes)", +"82fc49b8": "setCosignerAddress(address)", +"82fd5bac": "getDeal(uint256)", +"82fe1e46": "JaneToken()", +"82fef47d": "addToLists(address,bool,bool)", +"82ffee45": "approveRemoveOwnerRequest2()", +"82fffde0": "get_articolo(bytes,bytes10)", +"830010f3": "setReferrerRewards(uint256[])", +"8300399d": "aqwsaqws()", +"8301cfec": "backVenusCoinOwner()", +"8301fb2e": "cashOutTank(uint32)", +"8301fb61": "userHasSmartSpeed(address)", +"830245e3": "sumICOStage7()", +"830321be": "PGUC()", +"83037b81": "checkInterest(address)", +"830402c1": "startGameGas()", +"83054b6a": "GetConsentDirectiveCount()", +"8305d1c3": "GGGToken()", +"830639ac": "isWhitelisted(address,uint256)", +"83076a73": "updateCfo(address)", +"83084b3f": "setNotInWhitelistAllow(uint256)", +"8308c786": "minBlockGap()", +"8308d7e9": "set(address,uint256,uint256)", +"830953ab": "claimAmount()", +"830adf56": "get_previous_user_recast_from_item(bytes32,bytes32)", +"830b3a1e": "setIsFixed()", +"830b6868": "getPriceCredentialItemId(bytes32)", +"830b6b87": "MyOffer(uint256,string,uint8,string)", +"830cbbbd": "redeemToken(address,uint256)", +"830ced52": "TIER_1_CAP()", +"830d0627": "giveCdpToProxy(address,bytes32)", +"830d77d4": "ETHERONEUM()", +"830e8e64": "callAmendment(uint256)", +"830ebd7f": "transferFromNotFullAllowanceTest(address)", +"830ef41b": "transferERC20(uint256,address,address,uint256)", +"830f2935": "icoAgent()", +"830f3d8a": "Diploma()", +"83100580": "PriceWeekTwo()", +"8310d61c": "getLastGame()", +"83111397": "blacklistAddr(address[])", +"831121dc": "getLockedStateAddress()", +"83123f30": "setRole(address,bytes32,bytes32,uint256)", +"83123fa6": "coinsIssuedIco()", +"8312a886": "tokenValueCount()", +"8314b490": "earlyContribList(uint256)", +"8314dcb4": "unAuthorizeContract(address)", +"83150a93": "opetTokenBalance()", +"83160d71": "setPrices(uint256,bool)", +"8316394e": "allow(bytes32,string,address,bool)", +"83186be0": "startICO_w1()", +"83187cf4": "cryptaurRecovery()", +"8318e40b": "transferBcoupons(address,uint256)", +"83197ef0": "destroy()", +"8319da07": "setOwnerCut(uint16)", +"831a1754": "TOKENS_HARD_CAP()", +"831a1a3c": "ECPoints()", +"831a987a": "getSoulByEth(uint256)", +"831aab01": "setData_15(string)", +"831aba43": "referralsOf(address)", +"831b19c2": "KOToken()", +"831b3f67": "convertDustToEther(uint256)", +"831b55d6": "get_balance(address,uint32)", +"831bb4f2": "setAcceptedLegacyAugmintToken(address,int256,bool)", +"831c2b82": "getChannel(bytes32)", +"831d3e09": "offFreezing()", +"831dc22c": "CATCrowdsale(uint256,uint256,uint256,address,address,address)", +"831e0485": "twitterIdOfClaimerAddress(address)", +"831e1deb": "changeExchange(uint256)", +"831e6270": "isSaleFinalized()", +"831e80f2": "create(string,string,uint8,uint256)", +"831ed348": "clearJoinedCrowdsales()", +"831f5ad2": "remainBalanced()", +"831f750e": "claim(address,string,string)", +"832018aa": "BitSelectProtegido()", +"832048d4": "TokenLoot(address,address,address,address,address,address)", +"83206e78": "marriedAt()", +"83212e74": "updatePreSaleCloseTime(uint256)", +"83219a8a": "editMetadata(uint256,string)", +"8322cb91": "addTicket2(address,uint256)", +"8322fff2": "ETH()", +"83234aa6": "FileInfoManager()", +"8323550b": "TUSD()", +"8323bebb": "TokenSold(address,uint256,uint256,uint256)", +"8324a852": "partner(address,address,uint256)", +"8325229a": "playerWithdraw(address)", +"83253cfa": "cancelMarginCallOnBehalfOf(address,bytes32)", +"83255d6e": "getOwnProducts()", +"8325a1c0": "borrowInterestRate()", +"8327a313": "test_initialize()", +"832880e7": "getUser()", +"83289567": "meetingDate()", +"8328b610": "setStakingRequirement(uint256)", +"8328dbcd": "migrationAgent()", +"8328e032": "setStandardPackPrice(uint256)", +"8329ac52": "voteForCandidate(string,string)", +"8329df0a": "allowReferrals()", +"832a66a2": "purchaseCardinal()", +"832b0dc3": "testThrowOnTransferToNullAddress()", +"832b2c60": "specialManagerAddressNumberMap(address)", +"832b9eb2": "MANHATTANPROXY6THAVE()", +"832bc28d": "getPoolHistoryCount()", +"832bff3a": "setForkEndTime(uint256)", +"832df980": "lockEmission()", +"832e02ef": "getUpgradeValue(address,uint256,uint256,uint256)", +"832f6412": "getCenturion(uint256)", +"832f6924": "shuliang()", +"83315b6e": "CONTRACT_FEATURES()", +"83318574": "maxPreSaleStage()", +"83324e8c": "numGroups()", +"833270d8": "preIcoEnd()", +"833331e8": "totalJadeProduction()", +"8334278d": "reserves(uint256)", +"83343d80": "deleteItem(bytes32)", +"833472ba": "TCOCOIN()", +"83347622": "newTeam(string,string)", +"83349122": "crowdsaleIsOpen()", +"8334d195": "viewToken(uint256)", +"8334e170": "SellableToken(address,address,address,uint256,uint256)", +"83366ab0": "addBytes(bytes32,bytes)", +"8337077b": "returnToken(string,address,uint256)", +"83370c25": "FFFToken()", +"833747f8": "getLovers(bytes32)", +"8337680a": "getMyCommitmentCount()", +"833888f0": "LAF()", +"83393882": "contracteeWithdraw(uint256)", +"8339e153": "SETPointerToken()", +"833abf3a": "registerAssetProxy(bytes4,address,address)", +"833b1fce": "getOracle()", +"833b4596": "testApproveSetsAllowance()", +"833be5d5": "getTotalLoans()", +"833c202e": "UNITTransferWhiteList()", +"833cde52": "SaleToken()", +"833cf6fc": "TransCompleteds(address[])", +"833d56c7": "doSwarm(address,uint256)", +"833ea306": "soldForThird()", +"833eaa8b": "incise(address,uint256)", +"833eccc5": "batch_transfer(address[],uint256[])", +"833f43c2": "refill(address)", +"833ffb63": "removeOverride()", +"83405ddb": "unstakeCommunityTokens()", +"83408d73": "burnRemainingTokens()", +"8340f549": "deposit(address,address,uint256)", +"8341f26c": "icoTokenLimit()", +"834292a3": "CanYaCoin(address)", +"8342a9d9": "crowdfund()", +"8343816d": "AcceptCastleOffer(uint256)", +"8343e416": "asideTokensHaveBeenMinted()", +"83442b1e": "opt(address)", +"834472a5": "buildICOStageOne()", +"8344d26d": "TryUnLockCreatorBalance()", +"834614dd": "freeSub(address,uint8,bytes32)", +"8346378b": "transferBenship(address)", +"8346aa47": "spentParsecCredits()", +"8346d3c6": "MultiVesting(address)", +"8347a0d1": "issueTokenAndTransfer(uint256,address)", +"8348bfb9": "setICOAddress(address)", +"8348cf1e": "authorizeAmount(address,uint32)", +"8348d71f": "strConcats(string,string,string)", +"8348fe61": "createCenturion()", +"83492ff1": "deletePrice(string,string,string)", +"83499fdf": "BitcoinRed()", +"834b1aa1": "m_owner20()", +"834be978": "getRewardedSumByRound(uint256)", +"834c3351": "getGoldDataWeight()", +"834c6c84": "setCCH_edit_19(string)", +"834cc6fc": "createEscrow(address,address)", +"834d42c6": "serverForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"834e0565": "GiveRNG(uint256)", +"834e476f": "newAuctionID()", +"834e6261": "CreateICO(address,uint256)", +"834ee417": "start_time()", +"834eebe8": "calculatePremium(uint256,uint256,uint256,string,string,string)", +"834f199d": "_calculateRequiredManaAmount(uint256)", +"834f54d0": "CarPark()", +"8350dfaf": "fetchdivstopot()", +"8350eb5e": "getHashInDataObject(bytes32[])", +"835164a0": "INBCToken(uint256,string,string)", +"8351a0d4": "getCumulativeProfit()", +"83525394": "NONE()", +"83533d63": "setNumAffirmationsSigned(bytes32,uint256)", +"83537b5f": "test_threeValidEqInt()", +"8353bb51": "ROLE_STATE_PROVIDER()", +"8353c9c8": "SetFreezingEvent(address,uint256,uint256,uint8)", +"8353ffca": "Withdraw(uint256,address)", +"835409f0": "InfimonkCoin()", +"835436b4": "evictWorker(address)", +"835592f8": "passed(address)", +"8355c263": "frozenMinDeposit()", +"8355e15c": "withdrawTokens2(uint256)", +"8356027e": "unfrozenTokens()", +"83563dc6": "_getYear(uint256)", +"83565503": "setMember(address,bytes32,address,bool)", +"83565cc7": "additionalAction(bytes32,uint256[])", +"8356a5b5": "weekOneStart()", +"8357417d": "WithdrawDevFunds()", +"8357c2f0": "setAmountToReceive(uint256)", +"835850f9": "_bytesToAddress(bytes)", +"83586713": "computeResult(uint32,uint32)", +"835939d5": "vote(address,bool,string)", +"8359f045": "range(int256,int256,int256)", +"835a749d": "partialRedeem(uint256,address[])", +"835ac5ce": "softcapUSD()", +"835b3720": "setGeneKind(uint8)", +"835b42fc": "testThrowUpdateLatestRevisionNotUpdatable()", +"835b862f": "OneGameToken(address)", +"835bbd55": "reserveTokens(address)", +"835c1154": "checkInvestments(address)", +"835c19f3": "receivePayment()", +"835c6386": "isPurchasePossible()", +"835c853b": "notaryFee()", +"835cb53b": "MAXIMUM_NON_WHITELIST_AMOUNT()", +"835d2d2e": "executeTransfer()", +"835e119c": "availableSynths(uint256)", +"835e33e7": "DianJingToken()", +"835e98d7": "bonusShare()", +"835eb9f8": "ShieldNetwork()", +"835ec6ef": "CreateDDFT(address,uint256)", +"835f6775": "setBonusesForAmounts(uint32[],uint32[])", +"835fa3ac": "icoSuccessful()", +"835fc6ca": "withdrawal(uint256)", +"835fcab3": "NAME_HAWKING()", +"836028a2": "disputeOpen()", +"83607b02": "calculateDevCut_(uint256)", +"836115fe": "unlockedTokens(address)", +"83617782": "startLive()", +"83624c17": "getPartyA(bytes)", +"83627b8e": "getEmployeeId(address,address)", +"8362f6eb": "balanceSender(address)", +"83634ad7": "fnv(uint256)", +"83636209": "RecoveryKeccak256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"83638710": "getOwnerOf(uint256)", +"83638c12": "GCOIN()", +"83640881": "getTokenOrdersLength()", +"8364c078": "ownerGetUser(address)", +"8365172c": "num_levels()", +"8366437d": "RegisterUser(bytes32,bytes32[8])", +"83664dd3": "substituteManagerContract(address)", +"8366ee2b": "getPayeeLenght()", +"83672f3e": "setWallets(address,address,address,address)", +"8367e120": "apiUrl()", +"836826a6": "highestBet()", +"83685488": "TECHToken()", +"836880d3": "softcapAchieved()", +"8369ff08": "log2ForSmallNumber(uint256,uint256)", +"836a1040": "mint(uint256,address,uint256)", +"836a107f": "removeFromKYCList(address)", +"836a1e23": "collectExcess()", +"836adfd9": "libbibatchbacktest(uint64,uint32[],uint64[],uint64[],int64[],int64[])", +"836b680f": "createProductionUnit1()", +"836c67d7": "BAC()", +"836cca1d": "privateIcoMax()", +"836d6d66": "WeeklyLotteryB(address,uint256)", +"836d8b2a": "SolusPlatform()", +"836d9665": "removeUsersWhitelistA(address[])", +"836dea0b": "myEther()", +"836e4158": "numOrdersOf(address)", +"836e643f": "endStake(address,address,uint256)", +"836e8180": "round1()", +"836e9431": "updateUsersList()", +"83711c70": "ContributionResolved(bytes32,bool,address,address,uint256,uint256)", +"83714834": "factorial(uint256)", +"83714b27": "_safeMul(uint256,uint256)", +"837150cf": "paused(bool)", +"837197b2": "sendTokens(address)", +"8371e1e9": "rescale(int256)", +"83725a91": "Payment(address,address,uint256,uint256,address,uint8,uint256)", +"837356b1": "doNotAlwaysRequireCosignature()", +"837381fa": "withdrawFromContract(address,uint256)", +"837386ca": "candidateXPAAssets()", +"83739eda": "allocationsInitialised()", +"8373ae71": "cancelTradeOffer()", +"837564dd": "CNotes(string,string,uint8,uint256,uint256)", +"83771e56": "BSCToken(uint256,string,uint8,string)", +"83773de8": "_transfer(uint32,address)", +"83781340": "registerTradeProfile(bytes,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,bytes,uint256)", +"83786f8c": "getBalanceOfToken(address)", +"83788fce": "nextBlock()", +"8378ce42": "readStamped(bytes32)", +"837929b6": "getEventful()", +"83794502": "payForTask(uint256,uint256)", +"8379d75b": "BDC()", +"837a7ba5": "testThrowTransferDisabled()", +"837a8eb3": "CATWithdrawn(uint256)", +"837ada41": "cens()", +"837b68c8": "requestTokenExchange(uint256)", +"837cfb34": "LADYCoin(uint256,string,string)", +"837d52d8": "RAIT()", +"837e4cd9": "getNameAndAge()", +"837e60e6": "removePA(uint32)", +"837e6a94": "setOverride(address)", +"837e7cc6": "rollDice()", +"837f1bf7": "_appendTagged(string,string)", +"838006c0": "OwnableOZ()", +"83804c69": "verifyTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes32,bytes32,bytes,bytes)", +"8380edb7": "isUnlocked()", +"8381ada3": "GOLDEQ()", +"8381f58a": "number()", +"83829bf1": "Involve()", +"8382a574": "Factory(address,bytes32,address)", +"8382b460": "getSlashRewardPart(bytes32)", +"83835c01": "accuracy()", +"8383671b": "mintTokens1(address,uint256,uint256,bytes32)", +"8383bfc8": "EscrowFoundry()", +"83841e0c": "change(string,string)", +"838445e8": "EtherAds(address,address,address)", +"83852cf6": "setEnablePurchase(bool)", +"8385fa0f": "ESCROW_WALLET()", +"838661eb": "unfreeze_periods()", +"8386927a": "ToSponsor()", +"83876bc9": "newProposalInWei(address,uint256,string,bytes)", +"83879c15": "cooRemoveManager(address)", +"8387aa39": "addChainlinkExternalRequest(address,bytes32)", +"83894548": "getTokenBalanceOf(address)", +"838985d7": "gymFee()", +"8389f353": "setNumCities(uint256)", +"838a05e4": "part20Transfer()", +"838a48d6": "disableBlackListForever()", +"838bdce2": "team3Token()", +"838c29b6": "checkInterval()", +"838c63b7": "avgRate()", +"838ca346": "currentFunds()", +"838d6e05": "getChannelInfo(uint256,address,address)", +"838eb17e": "takeSnapshot(uint256,uint256)", +"838f0602": "SOLEToken(address,uint256)", +"838f5165": "refundFor(address[])", +"838f7f94": "getTotalAmountOf(uint256)", +"839006f2": "rescue(address)", +"8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", +"83914275": "getUserBonusBalanceByType(address,bytes1)", +"83917229": "_createGameItem(string,address,uint256,uint256)", +"8391a1c4": "get_table_size(uint256)", +"8391e45c": "dividendsOwing(address)", +"8391e48d": "WCoin(uint256,string,uint8,string)", +"83924dea": "MyTestToken(uint256,uint256,string,string)", +"83944a4b": "CreateWTE(address,uint256)", +"83947ea0": "acceptRelayedCall(address,address,bytes,uint256,uint256,uint256,uint256,bytes,uint256)", +"839484a7": "Iou_Token()", +"8394f639": "SimpleExchange(address,uint256)", +"83955bb2": "SpecialPurchased(address,uint256,uint256)", +"8395aa94": "PLATINUM_AMOUNT_SKL()", +"83960e3c": "importTokens(address,uint256,address)", +"8396392d": "add(string,string,string,address)", +"839655c8": "BetOnHardFork()", +"83973dc3": "withdrawBAT()", +"83975e7d": "PapaBearToken()", +"83979803": "setNewRateLevel(uint256,uint256)", +"8397a260": "getAction(bytes,uint256)", +"8397cc94": "tokenFallback(address,uint256,bytes32)", +"8397f3bc": "isBonusPayable(address,string,uint256,uint256,uint256,uint256)", +"839849c0": "changeBaseMultiplier(uint256)", +"83985082": "disarm()", +"83988ef5": "accountNoneFrozenAvailable(address)", +"839930ba": "getMinimumBet()", +"839972f9": "lockToken(address,uint256,uint256)", +"83999223": "release_all()", +"8399f93f": "reservedFund()", +"839a01be": "privateLockedAmount()", +"839acf14": "buyMonument(uint256,uint256)", +"839affc3": "batchDepositTokenTo(address[],address[],uint256[],uint256)", +"839b2386": "ReverseRegistrar()", +"839b240e": "setHardCapCrowdSale(uint256)", +"839b913e": "getTargetReportsPerLimitedReporterMarket()", +"839daf1d": "migrate2(address,uint40,uint40,address,address)", +"839dbbb1": "iconicsCount()", +"839df945": "commitments(bytes32)", +"839ea3c4": "startVotingTeam(uint256)", +"839ff719": "FML()", +"83a076be": "gift(uint256,address)", +"83a07765": "drawTicketCount()", +"83a18678": "total_racers()", +"83a1a3aa": "setC4FContractRequesterLock(address,bool)", +"83a1a4f2": "YesNo(string,string,string,string,string,string,bytes32,address,string,address,uint256)", +"83a1f52a": "GetManifestoByCategory(string,uint256,uint256)", +"83a287dd": "closeGame(bytes,address,uint256,uint256[],bytes,bytes)", +"83a37262": "stopQueueing(uint256)", +"83a41f93": "descentX()", +"83a4f2f5": "whitelistOperators(address)", +"83a51213": "takedaily(address)", +"83a51ad0": "oraclize_setConfig(bytes32)", +"83a6595f": "setMinDonation(uint256)", +"83a68993": "gameOp()", +"83a6ad6b": "grantAccessDeploy(address,address)", +"83a6b565": "payCommission(uint256,uint256)", +"83a74acc": "gift(uint256,uint256)", +"83a7b701": "masternodeRegister()", +"83a9094f": "PRICE_RATE_THIRD()", +"83aa4958": "getContributeAmount()", +"83aa9985": "ownerTwo()", +"83ab12e7": "Auctions()", +"83abd7e2": "removeIdentifier(address,bytes32)", +"83ac44e6": "marketingAccount()", +"83ac4ae1": "_sendWinnings()", +"83ac98fe": "transfer_Different_amounts_of_assets_to_many(address[],uint256[])", +"83ae0839": "ETNToken()", +"83ae5266": "addCertificate(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,string,bytes32[],bytes32[])", +"83ae62c4": "_frozeAmount()", +"83aec57c": "getUsersForDate(uint32)", +"83af3c40": "getRemainingTokenAmount()", +"83b01a83": "updateTAOContentState(bytes32,address,bytes32,uint8,bytes32,bytes32)", +"83b14c0a": "toAddr(uint256)", +"83b23b40": "cEthereumlotteryNet()", +"83b2c476": "updateLibrary(address)", +"83b2d77f": "signFact(bytes16)", +"83b3999a": "addToAddresses(address,address)", +"83b3c85f": "pecul()", +"83b40eb7": "creditEqually(address[],uint256)", +"83b47a4d": "whitelist_addys(address[],bool)", +"83b4918b": "reinvest(uint256)", +"83b49485": "BurnablePayment(bool,address,uint256,uint256,string,string)", +"83b572d1": "getPlayerStake(uint256)", +"83b58323": "setTransferFeePercentage(uint256)", +"83b5ff8b": "ownerCut()", +"83b60a33": "transferToken(uint8,address,uint256)", +"83b665b9": "purchase(uint152,uint256)", +"83b7db63": "getExtensions()", +"83b83c1c": "setOpGas(uint256,uint256)", +"83b8b9f0": "ForceCloseContract()", +"83b8c8f6": "bonusLevel100()", +"83b9e9f7": "train3(uint256)", +"83ba3a97": "sendTeamSupplyToken(address)", +"83baa6f4": "presaleopeningTime()", +"83bd5f42": "distributeDevCut(uint256)", +"83bd72ba": "stopGame()", +"83be9d54": "placeBet(bytes32,address)", +"83bebcc2": "changeSellPriceForAthlete(uint256,uint256)", +"83bebced": "_rate()", +"83bf1cbc": "delayDefaultRelease()", +"83bf4609": "createTemplate(string)", +"83c08784": "Incrementer3()", +"83c0dd25": "LogNewAllocation(address,uint256)", +"83c10844": "percentLeftFromTotalRaised()", +"83c17c55": "setFactoryAddress(address)", +"83c1f2e6": "unlb()", +"83c218c2": "oraclizeId2proposalId(bytes32)", +"83c28ddc": "getRefundAmountForFunder(address)", +"83c28ecc": "getTokenWithdrawHold()", +"83c3bd6b": "isEqualLength(address[],uint256[])", +"83c4c2e9": "makeSuccessor(address)", +"83c4cc46": "StartCrowdsale(address,address,uint256)", +"83c51a38": "thesimplegame()", +"83c56fc8": "dailyTotals()", +"83c592cf": "stake(uint256,bytes32)", +"83c5e3c9": "removeBRA(address)", +"83c68f48": "AIChain()", +"83c6aa47": "arrangeUnsoldTokens(address,uint256)", +"83c75ed5": "setGatewayB(address)", +"83c7d7c1": "sumMultiplayer()", +"83c7f14c": "bytesToBytes4(bytes)", +"83c81bec": "Arbiter(address)", +"83c99722": "lockforTransfer()", +"83ca8632": "_getCrabPartData(uint256)", +"83cb2fee": "INITIAL_SEED_FARMING_AMOUNT()", +"83ccc2b5": "_0xBitcoinCash()", +"83ccc8b8": "getEtherContributed()", +"83ccdcc3": "detailsOfWindow()", +"83cd5e13": "debug_multiplehash(uint256,uint256)", +"83cd9cc3": "setDelegator(address)", +"83cdb517": "transfer_to_0(uint256)", +"83ce63b5": "doRouletteBet(bytes,uint256,bytes32,bytes32,bytes32)", +"83ce8a61": "changeMPO(address)", +"83cfab42": "unFreeze(address)", +"83cfbd7f": "revokeOwnership(address)", +"83cfc5f2": "changeNameRestricted(string)", +"83d158f0": "ShadowToken()", +"83d2421b": "setWorkerPort(uint256)", +"83d4f946": "round0EndTime()", +"83d51a38": "concatString(string)", +"83d52f36": "OpenAIChainToken()", +"83d53895": "interfaceSupported(address,bytes4)", +"83d6236c": "amIin()", +"83d66353": "LotteryGames()", +"83d67039": "Register(string,string,string,uint256,uint256)", +"83d67fc1": "_addAddressToGrantAccess(address,uint256)", +"83d7529f": "reservationFromBackend(uint256,bytes32,address,uint256,uint256)", +"83d852d9": "shutdownTransactions()", +"83d880d0": "setParticipationCap(address[],uint256)", +"83d8a90f": "theDonkeyKing()", +"83d8bae3": "listItem(uint256,uint256,uint256,address)", +"83d8e480": "registerCoin(address,string,string)", +"83da4d86": "ApolloCoinToken(uint256,uint256,address,address)", +"83db0680": "TOTALSHARES()", +"83db1548": "addPost(uint256,uint256)", +"83db8e31": "HMCToken()", +"83dbb27b": "invalidOrder(address)", +"83dbc55b": "verifyXOR(bytes32,bytes32,uint8)", +"83dbff4b": "get_first_item_in_state(bytes32)", +"83dc077d": "acceptContribution()", +"83dcecd3": "CompanyTokensIssued(address,uint256,uint256)", +"83dd7aa4": "setBankName(bytes32)", +"83de6ed6": "changeStageTwo()", +"83dea2a8": "renounceExcluded()", +"83df762f": "BDayToken()", +"83df7d21": "updFreezeEnabled(bool)", +"83dfd040": "isPresaleFull()", +"83dfe5fd": "C()", +"83e03c3d": "HumanERC223Token(uint256,string,uint8,string)", +"83e06ead": "setPercentages(uint256,uint256,uint256,uint256,uint256)", +"83e07382": "setMovePermissionStat(bool)", +"83e19248": "afterStart()", +"83e19a95": "MANAGEMENT_LOCKED_PERIOD()", +"83e1bb4f": "dequeueIngot()", +"83e219eb": "removeFromTotalSupply(uint256)", +"83e256dc": "gameIdGame(uint256)", +"83e2a0c4": "joinGame(address,uint256,address)", +"83e3607c": "fourthBonusSalesEnds()", +"83e48d43": "_sptc(uint256,uint256,uint256,uint256,address)", +"83e49c53": "burnWithData(address,uint256,bytes)", +"83e4eed0": "apply(string,string)", +"83e5cb26": "ownerAddCeo(address)", +"83e78b31": "bet(uint8,bool,uint8)", +"83e7f347": "ICOBank()", +"83e811a6": "founderLockup()", +"83e83b54": "payBounty()", +"83e8dbb8": "calculateSaleAmount(uint256,uint256)", +"83e99a93": "balanceOfUnclaimedTT(address)", +"83ea0620": "packageExists(string)", +"83ea5111": "MESH(uint256)", +"83eb7257": "companySupply()", +"83eb72ac": "getStrandDescription(uint256)", +"83ec0648": "BlockStackCoin()", +"83ec0bd2": "showPeopleInQueue()", +"83eca581": "setReferrerReward(uint256)", +"83edf023": "totalWeiRecieved()", +"83eed3d5": "queryN(uint256,string,bytes)", +"83eeecc0": "ethInWei()", +"83ef0c23": "buyEgg(uint256,uint256,bool)", +"83f0b184": "calculateMaxContribution()", +"83f0bb45": "_getPartSkillLevel(bytes,uint256,uint256)", +"83f11daf": "SetCandidatePrincipal(uint8,uint256)", +"83f1211b": "transfersLocked()", +"83f12f91": "grantFounderTokens(address)", +"83f12fec": "batchTransfer(address[],uint256)", +"83f13e7f": "setNewDividendContract(address)", +"83f2a8ca": "dividendsCalculated()", +"83f3c3df": "PaymentGot(bool)", +"83f4a27b": "TATCOIN(uint256,string,string,uint256)", +"83f537cc": "LendingBlockToken(address)", +"83f57fd7": "_addDemoc(bytes32,address)", +"83f5a47e": "tokenOfOwnerAndCreatorByIndex(address,address,uint256)", +"83f5b46f": "refSystem()", +"83f5e360": "_unpackClassValue(uint256)", +"83f66212": "getTop11_20Messages()", +"83f6cc69": "transferAllowedOf(address)", +"83f6d9a4": "validateNameInternal(string)", +"83f7a095": "setCoefficient(bytes2,string,uint256)", +"83f7b8e1": "getNumberOfPhotos()", +"83f7e2d7": "reduce(uint256)", +"83f94db7": "upgradeImplementation(address)", +"83f95f13": "openClaim(string)", +"83f9a788": "BlockTubePrepaid(address)", +"83fa07fd": "fechAllCandidates(uint256)", +"83fa2039": "Dealer(address,address)", +"83fa7e02": "isSiringClockAuctionStorage()", +"83fa87f2": "activateAdSlot()", +"83fae425": "setPresaleAllocation(address,uint256)", +"83fb42ba": "proposeBurning(uint256)", +"83fbbc7a": "OnlineSocialChainToken(uint256,string,uint8,string)", +"83fbc2b4": "weiRised()", +"83fc58b4": "tranferOwnership(address)", +"83fcafbb": "GetPrizeFund()", +"83fcb85e": "revertFunction()", +"83fcf308": "getPropertyRating()", +"83fcf973": "unlockVestedTokens()", +"83fcfafe": "LooqCrowdsale()", +"83fd65d8": "setETHExpectedFee(address,uint256,uint256)", +"83fd8a64": "CBCK(uint256,string,string)", +"83fe05f1": "PutFreeEther()", +"83fe10e4": "isMetered()", +"83fee16d": "finalizeUpdate(uint256,address)", +"83ff0189": "buy_tickey_free()", +"83ff1bb6": "approve(string,uint8)", +"83ff5bf2": "Bittobit()", +"83ff9bec": "petCardDataContract()", +"8400c307": "isRecipientAllowed(address)", +"8401824f": "compactFraction(uint256,uint256,uint256)", +"84019cae": "WOWToken()", +"8401e614": "lengthOfPermissions()", +"8401f8d1": "addMultipleToWhitelist(address[])", +"8402181f": "pull(address,uint128)", +"8402ac99": "firstYearEnd()", +"84035e07": "amendEarlyPurchase(uint256,address,uint256,uint256)", +"8403be91": "isAppRegistered(address)", +"84048497": "listMultipleItems(uint256[],uint256[],address,bytes32[])", +"84054d3d": "cashout()", +"8406ab82": "deleteGame(address)", +"8406c079": "relayer()", +"84073164": "transferFromPie(uint256)", +"84083c89": "addWhitelistUser(address)", +"84086357": "crowdfundFinalized()", +"8408643a": "getBlockTimestamp32()", +"840880f2": "TeamLockingPeriod18Months()", +"8408cb9d": "setPreICOPrice(uint256)", +"840aab14": "_hasName(address)", +"840b7403": "computePayout(uint256,uint256)", +"840bc19c": "NON_PAYABLE_AMOUNT()", +"840c0ca9": "setMaximumClaimPriceWei(uint256)", +"840c401f": "pruneRestrictStock(address,uint256)", +"840cfffd": "burnIndexedByAddress(address,uint256)", +"840d7fb6": "createLottery(address,string,string,uint32,uint32,uint8)", +"840dea74": "COMBINED_WEI_GOAL()", +"840e2673": "startTransferTime()", +"840e78fd": "projects(address)", +"840eb43e": "removeLicenseTerms(bytes32,bytes32)", +"84100d5c": "selectRandomTrait()", +"841016d0": "setAdditionalOwners(address[])", +"8410956a": "initialise(address,uint256,uint256,uint256,uint256,uint256)", +"84109e50": "setTiimKyberGoAddress(address)", +"84120645": "setMasterRewardsPercent(uint256)", +"841237b7": "Wallet9()", +"841244a8": "FeedCreated(uint256,string)", +"84125e0b": "withdrawBalancesToNFC()", +"84126e01": "cancelPayment(string)", +"841302ce": "getHash1(uint8[5],uint8,bytes32)", +"84132cf5": "deposit(address,uint8,bytes32,bytes32)", +"84140c40": "delFromVestMap(address)", +"841410cd": "maxETHContribution()", +"84160ec0": "getAddressesAccounts()", +"84168c01": "tradesUnlock(address)", +"8417fa2f": "goPublic()", +"8418cd99": "contribute(address,uint256)", +"8418dc36": "teFoodsAddress()", +"84191f62": "changeController()", +"8419604e": "SendingBounty(bytes32,uint256,address)", +"8419c986": "foundTime()", +"841a12bd": "setKittyTokenAddress(address,address)", +"841b4cd8": "registerForRaffle3()", +"841baf2c": "m_tokensClaimed(address)", +"841d0ac3": "init_daylimit(uint256)", +"841e6ce9": "betFee()", +"841eb7f8": "paymentRewardTokens(uint256)", +"841efac4": "updateFieldss(uint256,uint8,uint256)", +"841f3729": "howManyTokensAreReservedForMe()", +"84219204": "minVotedTokensPerc()", +"8421ec8a": "MyCash()", +"842249cb": "weiTotalReceived()", +"8422927d": "cancelPayment(uint256)", +"8422b3bf": "RailzToken()", +"8423157b": "getWinAmount(uint256,uint256)", +"84248a51": "changeDrawFee(uint256)", +"84249ed0": "manualBuyPrice(uint256)", +"8424b40d": "setLotteryCore(address)", +"8424f952": "IMEIM()", +"84268051": "payoutToOwnerIsLimited()", +"84269ed9": "transferFrom(address,address,uint32)", +"8426a452": "getSellingItem(uint256)", +"84270db0": "selfdestructTokens()", +"84281dcc": "isBalanceSufficientForContractCreation(address)", +"8428cf83": "recoverAddress(bytes32,uint8,bytes32,bytes32)", +"84297029": "getIdxBatchByUsername(bytes20[])", +"84298882": "setLogo(uint256,string)", +"842a6415": "DTRC()", +"842acf9d": "mintDSBIToken(address,uint256)", +"842b6357": "checked_in()", +"842b8efa": "FailedMarking(bytes32,bytes32,uint256,int256)", +"842bc37b": "GetSmallCotractIndex(address)", +"842bd2db": "getDeduction(uint256,uint8,address)", +"842bfad2": "updateParticipantCapTier2(uint256)", +"842c17be": "firstStageMinted()", +"842c45c5": "ROBIES()", +"842e062f": "p_setCurrentRoundJackpotPercent(uint256,uint256)", +"842f10d1": "dropMultiple(address[])", +"842ff2bd": "numPolls()", +"84300859": "setTokenUnlock()", +"84304ee5": "chronus()", +"84311353": "totalAmountOfPurchasesInCny()", +"84313086": "divCutMaster()", +"84317008": "setprice(uint256,uint256)", +"84317143": "INITIAL_EARLYBIRD_TOKENS()", +"84321b41": "ligerAdminAddress()", +"843296d6": "DealCancelationReason(uint256,address,uint32,uint32,uint256,string)", +"8433acd1": "collectTokens()", +"8433d6f2": "from_Initialisation_to_cycleDeVie()", +"84344415": "chargeMoney()", +"84345b35": "createRandomZombie_ZOB_goldpack()", +"8434c80d": "cleanArray(uint256[])", +"843545be": "getPrinciple(uint256)", +"843584f1": "log_recast_fees(address,address,uint256)", +"8435be4b": "getLastFarm(uint8,uint8)", +"8435da61": "getTile(uint16,uint16,uint8)", +"8435f147": "bytes32Func(bytes32,bytes32)", +"8436bd4e": "MintyMcCringleToken()", +"84370813": "subscribe(uint256,uint256)", +"8437b2a5": "tier(uint256,uint256)", +"84385c6f": "assignOperator(address)", +"84386004": "channelsSold()", +"84394e6f": "addValidation()", +"8439ec4a": "setBlacklistBulk(address[],bool,bool)", +"8439f80d": "accumulatedBalanceOf(uint256)", +"843a7f74": "getCKNPriceNow()", +"843aa0db": "insert(uint256,uint256,uint256,uint256)", +"843ad7b5": "dailyMintable()", +"843b1a09": "spendNonce()", +"843b4386": "addComment(string)", +"843bd641": "itemExists(uint256)", +"843cbae4": "EtherBattleCoin()", +"843cfb9e": "vestingTotalPeriods()", +"843e240e": "getAuditContractUri(uint256)", +"843e8d27": "downVote(bytes12,bytes12)", +"843fcf90": "EOSGold()", +"843ff6f6": "getTitulaire_Compte_7()", +"8440b3b0": "BUY_INCREASE()", +"8440d167": "getCategory(address)", +"84413b65": "airdropAddress()", +"8441f89e": "deleteWitness(address)", +"8442171d": "bonusLimit2()", +"84429480": "TokensBought(address,uint256,uint256)", +"84429579": "getRunningTokenPairs(address[])", +"844323fa": "xtime()", +"8443f07c": "UVIDIFYTOKEN()", +"8444b391": "getUpgradeState()", +"84465fa5": "changeFeeOwner(address)", +"844669b3": "accountC()", +"844706a6": "UsdCapUpdated(uint256,uint256)", +"84477036": "tempTokensBalanceOf()", +"8447c02f": "takeAGuess(uint256)", +"8447c4fa": "LibraToken()", +"84488126": "isForceExecute(address)", +"844891a0": "ABTCETHER()", +"8449129e": "EthereumNova()", +"8449133b": "initQuoteBalance()", +"84491566": "getPrevRoundWinnerCount()", +"8449b0af": "PRICE_MULTIPLIER_ICO5()", +"8449d772": "withdrawM5()", +"844bdea4": "LhsToken(uint256,string,uint8,string)", +"844c3edc": "setThresholdSendToSafeWallet(uint256)", +"844c4264": "cycleEndTime()", +"844c7d95": "updateBalances(address,bytes32,string,address,uint256)", +"844d38ee": "view_get_Gains()", +"844d65c5": "whitelistedMax(address)", +"844dbf67": "RecurringPayment(address,uint256,uint256,address)", +"844e774d": "joinraffle()", +"844e89a9": "Unregistered(bytes32,uint256)", +"844ea6f9": "E25()", +"844ef097": "bridgeValidatorsOwner()", +"845051d3": "testContractsNotNull()", +"8450b12e": "getSupplyLimit(uint16)", +"8451738d": "rentHo(uint256)", +"8451d312": "showAllFunds()", +"845238fe": "lookup(address[],address,address,bool,bool)", +"84533794": "setEthRate(uint16)", +"845381c0": "FailedVote(address,string)", +"84539789": "useNeonMarbles(address)", +"8453a8c8": "Factom()", +"84545ef8": "setRegionPurchasedPixelPrice(uint256,uint256)", +"8454665d": "startingInsuranceBalance()", +"84553e16": "AccessAddress(address)", +"84564676": "tokenSetAdmin(address,address,address,address)", +"8456cb59": "pause()", +"84570d0d": "assertEq5(bytes5,bytes5)", +"84571235": "minimum_bet()", +"84585099": "TransferTo(address,uint256)", +"8458644c": "play(bytes32,address,address)", +"845890c3": "buyATR()", +"8458bd70": "getHp(uint256)", +"8459857f": "mentors()", +"845a51ec": "rewardPoolAddress()", +"845a7468": "getStakersAndAmounts()", +"845ab425": "getProjectDescription(uint256)", +"845b6aca": "buyBasicCards_Migrate(address,uint256,uint256)", +"845c8801": "checkHasPermissionForPack(address,address,uint256)", +"845c9306": "participate(uint256)", +"845d586f": "publicTransfersEnabled()", +"845dcc2b": "_isSoldOut()", +"845e76b3": "getStudentArray(bytes32)", +"845eaedb": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,bytes,bytes)", +"845ec8de": "FOUNDER_EXCHANGE_SHARE()", +"845f5593": "initStages(uint32[],uint32[],uint128[],uint128[],uint128[],bool[])", +"846030a0": "hasClaimableShares()", +"84605d0d": "total_iou_withdrawn()", +"8460a9d9": "suicideSend(address)", +"84610618": "registerRequest(int256,int256)", +"846153b5": "registerAddresses(address[])", +"8462151c": "tokensOfOwner(address)", +"84622425": "onlyPrimaryMock()", +"8462df7f": "diff(uint256[],uint256)", +"8463bcf5": "countClients()", +"84644ec9": "addPromise(uint256)", +"8464878d": "emergency_used()", +"84653605": "DateCoin(uint256)", +"84658e2a": "sendtoken(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"846639dc": "currentAwards()", +"8466c3e6": "aa()", +"846786f1": "openIco()", +"8467d9cf": "refundPayment(uint256,uint32,uint32,uint256,string)", +"8467f7cb": "resetContract(uint256)", +"84680fc2": "autoSelectOpponentForGladiatorBattle(uint256,bytes32)", +"84682fbb": "auxWorstPoints()", +"84691cd8": "grapesToProduceBottle()", +"84696810": "winningCountry()", +"846a09e1": "AddAuthorityAddress(address)", +"846a284e": "_addTicket(address,uint32,uint8)", +"846a5dde": "delayPayment(uint256,uint256)", +"846b055a": "startCrowdfund(uint256,uint256)", +"846b0ef0": "proxiedContribution(address)", +"846b23d4": "getEmployerInvoicesByStatus(address,address,uint8)", +"846b68e3": "MERCULET()", +"846e5851": "LogStudentUncertified(address,uint256,address)", +"846e832d": "getStateAt(uint256)", +"846e980d": "setFreeLobster(uint16)", +"846f1185": "sendEthProportion(address,bytes,uint256,uint256)", +"846f652b": "getSpawned(uint32)", +"8470ffd6": "_transfert(address,address,uint256)", +"84716854": "investInCharger(uint256)", +"84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", +"8473e55f": "amountForSale()", +"8475bfed": "div18(uint256,uint256)", +"8475f6f9": "getPublicKeyG()", +"8476f105": "Menu08(uint256)", +"847760ee": "getArtToken(uint256)", +"847778ad": "edit(address,address)", +"84780009": "getFinishStatus()", +"84788f01": "mvnperethBonus()", +"847927ed": "icoEtherMaxCap()", +"847a1ca6": "raiseSellOrderCreated(address,uint32,uint32,uint80,uint256,int160)", +"847a5e99": "getPlayerStats()", +"847af92c": "setMintMode(uint256)", +"847bd61c": "processPurchase(uint256[])", +"847c096d": "removePresaleContributor(address)", +"847d97ab": "add(string,address,string,uint256)", +"847dc0a7": "percentageETHReserve()", +"847dc59e": "MicoinToken(uint256,string,string)", +"847dd67c": "buyEth(uint256)", +"847e09f2": "TOKEN_HARDCAP()", +"847e12c4": "FixyNetwork()", +"847e27d9": "wanToken()", +"847e2ba1": "revokeAccessMint(address)", +"847ec2de": "totalBunny()", +"847eefb6": "ICOHardcap()", +"847f2177": "Electron()", +"847f4a88": "stopSaleType(uint8)", +"847f8a10": "Refund(uint32)", +"8480021c": "crowdfundDeadline()", +"8480544e": "getCAOAmount()", +"848125ea": "issueBlockReward()", +"8481573e": "contractBalanceOf(address)", +"8482167e": "makeCall(address,uint256,bytes)", +"84837981": "BTCT()", +"8483dfcc": "isOverflow(uint256,uint256)", +"84841523": "Buttcoin()", +"8484dc24": "removeEmissionProvider(address,uint256)", +"8484ff59": "setTokenCollectable(bool)", +"8485b90c": "proposalAuthor()", +"84861e93": "auctionState(uint256)", +"84869679": "isDistributionDue(address)", +"8486d444": "_getUsdAmount(uint256)", +"848784e5": "transferPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"8487b73a": "Milestone_BankLicenseFailed(string)", +"84883795": "ico_rejected()", +"84885ed6": "getData_19()", +"8488e58a": "setReturnableToken(address)", +"848a0327": "dividendForYearly()", +"848a2130": "releaseChecksum(uint8)", +"848b3821": "fundingCapReached()", +"848b86e3": "updateWallet(address)", +"848c0a39": "buildLeft(address,uint256)", +"848dd14e": "CostStuff(address,uint32,uint256)", +"848e3442": "automaticThreshold()", +"848efb3d": "rentOut(uint256)", +"848f002f": "setBoolF1F2(bool,bool)", +"848f1470": "disableRefundPeriod()", +"848f6d8d": "OneBroGlobal()", +"848faed7": "BAI20()", +"84900b04": "whitelistContract()", +"8490d598": "wholeTokensReserved()", +"8491b49c": "rain(address[],uint256[])", +"84922374": "isDistConfig()", +"84924b60": "findAndPayTheWinner()", +"849292bc": "emitStateContractChanged(address)", +"8492aa9c": "getAddressNickname(address)", +"8493407b": "CorporateNews(uint256,string,uint8,string)", +"84934e40": "DappUpgraded(address,address,address)", +"8493a06e": "returnLongTokenAmount(address[3],bytes32,uint256)", +"84941984": "_removeTokenFromPartition(address,bytes32,uint256)", +"8497a8d8": "ESCToken()", +"84987faa": "getNodeRightChild(bytes32)", +"8498f706": "EthPalace()", +"84995370": "TheFoolRareToken()", +"8499bc63": "GeneBlockChainUserIDs(address)", +"8499ee3a": "newToken(string,uint8,string)", +"849a7337": "approveBountyTransfer(address,address)", +"849a7cb7": "convertBytes4ToArray(bytes4)", +"849aaf8e": "minimumValue()", +"849ab974": "HasOwner(address)", +"849ae5ea": "isBlockpassInvestor(address)", +"849bb2db": "withdrawServiceFee()", +"849cf588": "addSynth(address)", +"849d0d24": "TVCrowdsaleContract()", +"849d16d2": "BffDoomToken()", +"849d926b": "parseBlockHeader(bytes)", +"849e3dcd": "SangusToken()", +"849e6b17": "MakeBuyOrder(bytes32,address,uint256,uint256,address)", +"849e961a": "ICO_PRE_SALE()", +"849f94bf": "getMatchIndex(uint8)", +"84a014d8": "oneTimeSold(address)", +"84a0f604": "transferMultipleDifferentValues(uint256[],address[])", +"84a11df9": "ismaster()", +"84a1f5a5": "claimTokensFor(address[])", +"84a2f00b": "order(bytes32,uint256,uint256)", +"84a2f5a4": "MoonDust()", +"84a34caa": "BaseMPHToken()", +"84a37273": "addTransaction(address,uint256)", +"84a429a0": "createDklSiringAuction(uint256,uint256)", +"84a438de": "Course(string,string,uint256)", +"84a4974c": "MintAndTransferEXH(address,uint256,bytes32)", +"84a6469a": "setNewMintRequest(address,uint256)", +"84a64c12": "cancel1(uint256)", +"84a68690": "withdrawRequest(uint256,uint256,uint256,uint256)", +"84a6a68a": "releaseTeams(uint32,uint32[])", +"84a7b223": "Canary(address)", +"84a80c6b": "getB0()", +"84a83662": "changePassword(string,string)", +"84a97ab7": "removeAddressFromAccount(address,address)", +"84a9b91c": "capWEI()", +"84a9d711": "assertThrows(string)", +"84ab2cdb": "byte_to_bits(bytes1,uint256)", +"84ac33ec": "deregister(address)", +"84acdae7": "getAuctionStartBid()", +"84ad6ff3": "ReversibleDemo()", +"84ad8e8f": "discountPrice()", +"84aeb4f0": "getTokenContribution(address)", +"84afaa7c": "getReceiptAmount(uint256)", +"84afb526": "marketor()", +"84afd121": "bytesToUint2(bytes)", +"84b00eb6": "fetchVoteNumForCandidateByIndex(uint256,address)", +"84b06191": "CampaignAccount(address,uint256)", +"84b08d41": "partner2_signed()", +"84b0e001": "setEventResult(string,uint32,uint8)", +"84b1fcb6": "TokenOwnedFund()", +"84b2e59d": "lower(string)", +"84b35fbb": "proposeFoundationTransfer(address)", +"84b366dc": "dest()", +"84b3b232": "depositofferToken()", +"84b4340b": "failWithReason(string)", +"84b46829": "San4Contract()", +"84b4d3f6": "determineGoalScoringCardIds(uint256[],uint256[],uint256)", +"84b60937": "getRollUnder(uint256,uint256)", +"84b735c2": "address1a()", +"84b76824": "cancelWithdraw()", +"84b7964f": "isClient(address)", +"84b79b3d": "eosBASE(uint256,uint256)", +"84b83a96": "finishChampionGame()", +"84b8d6a5": "Airdrop(address)", +"84b98987": "getPrice(address,string,string,string)", +"84b9a4a5": "SALE_STEP()", +"84ba2642": "mint(address,uint256,address,string)", +"84ba745e": "totalClass()", +"84bc8d2e": "read_purchase_at_index(uint256)", +"84bcd93e": "setSealableProperty(uint256,bytes32,bytes32)", +"84bcefd4": "collected()", +"84bd3a28": "TierRainmakerDividendAddress(address)", +"84bdaf85": "centsInPhaseOne()", +"84be4079": "Lendr(string,string,address)", +"84be414d": "KryptopyCrowdsaleMock(address)", +"84be59d1": "giftPool()", +"84beac36": "KRCToken(address)", +"84bf6fac": "mEtherValid()", +"84c019e3": "noBonusTokenRecipients()", +"84c14b25": "sellDentacoinsAgainstEther(uint256)", +"84c2473f": "mainIcoEndBlock()", +"84c344fe": "_register(bytes4,string)", +"84c3edf9": "getHoldAmountAccounts()", +"84c4ee9e": "getHivePot()", +"84c5c34d": "transferFromToICAPWithReference(address,string,uint256,string)", +"84c615e2": "giveKingdom(address,string,string,uint256)", +"84c64a19": "setApp(address,address)", +"84c6774c": "safeMathMul(uint256,uint256)", +"84c6a9fe": "setFABAcompanyTokensPercent(uint256)", +"84c6f650": "PAYOUT_TIME()", +"84c7bf4c": "setBlocking(address,address,bool)", +"84c830d3": "getDepositByIndex(address,uint256)", +"84c8d5fa": "xenograft(uint256,uint256,uint256)", +"84c8df88": "testMemoryIntegrityCheck31Bytes()", +"84c99b6d": "tokenIssuedAirDrop()", +"84ca65e0": "addOperationType(string,string)", +"84cb4fec": "_getBlocksPerYear(uint256)", +"84cba6da": "registerUsers(address[],uint256[])", +"84cbc92f": "buyPotato(uint256)", +"84cc315b": "getCurrentPrice(address)", +"84cdbb4b": "relaseLock()", +"84ce8f1e": "getTotalF3()", +"84cfa08c": "startKilling()", +"84cfc5aa": "WABnetwork(uint256,string,string)", +"84cfca00": "setMaxPlayers(uint8)", +"84d062b4": "updateEthToTokenOrder(uint32,uint128,uint128)", +"84d0aad8": "loadOldData()", +"84d24226": "claimableTokens(address)", +"84d2688c": "getDarknodePublicKey(address)", +"84d2731c": "namesOf(address)", +"84d43f66": "setAffiliateSetter(address)", +"84d452ff": "resetRound()", +"84d46860": "getMyStageBet(uint256,uint256,uint256)", +"84d47dee": "DayDayCrowdsale(uint256,address,address)", +"84d4c178": "_escrowInflationBonus(bytes32,uint256,uint256,address,address,bool)", +"84d5d944": "transferAndLock(address,uint256,uint256)", +"84d60043": "CioCoinERC20180629Token(uint256,string,string,uint256)", +"84d61a32": "showFPInterest()", +"84d62f47": "bindSmartIdentityByRegulator(string,string,string)", +"84d6bd43": "requiredEvidence()", +"84d7c99d": "deleteUInt8Value(bytes32)", +"84d7ea12": "setMilestonesContractAddress(address)", +"84d80057": "hasDeadlinePassed(bytes32)", +"84d83f07": "GetLoanIdFromPortfolio(uint256,uint256)", +"84d8529f": "refundInternal(bytes32,address,address,uint256)", +"84d9390a": "TEAM_PERCENTAGE()", +"84d9bee2": "bidCC(uint256,bytes32)", +"84da7e38": "setColorRed()", +"84da92a7": "updateName(string)", +"84dac46e": "Fucksign()", +"84db71a3": "getRefereeRewards()", +"84db8d1e": "_nextPotTax(uint256)", +"84dc1028": "getBonustwo(uint256)", +"84dc2b10": "_saveData(address,bytes32,address,bytes32,uint256)", +"84dcde97": "removeSynth(bytes4)", +"84dd4332": "lastCallPUST()", +"84dd9591": "getTotalHoldAmount(address)", +"84df87c3": "SPITEST()", +"84dfb2bd": "setETHAddress(address)", +"84dfbfe2": "setLpFee(uint256)", +"84e0b689": "_yearThreeSupply()", +"84e10a90": "getTotals()", +"84e11251": "setMinInvestmentLimit(uint256)", +"84e192a7": "getArbiterCandidates()", +"84e1bf74": "emissionOn()", +"84e2341d": "internalSetDestinationMultisigWallet(address)", +"84e2d578": "OperationAddress()", +"84e336fc": "ANUNYA()", +"84e37ad9": "prefixedHash(uint256)", +"84e3ac94": "oneTokenInWei()", +"84e45689": "authorize(address[])", +"84e4c52b": "getTimeLockSecondsRemaining(uint256)", +"84e4d3a8": "freezeAccount(address,bool,uint256,uint256)", +"84e4d57f": "ApplyForCertification(string,string,string,uint256)", +"84e527ad": "IMDESale(uint256,uint128,uint256,uint256,uint128,string)", +"84e60e8b": "ico_promo_reward(address,uint256)", +"84e64a1f": "stageStartDate(uint8)", +"84e67523": "getSumAmountOfOpenSteps()", +"84e6ee4b": "setMainnetAccount(string)", +"84e70093": "cloneOrder(address,uint256,uint256,uint256)", +"84e700ee": "totalAllocatedPurchase()", +"84e7686b": "setAdmin(address[],bool)", +"84e77095": "GetEvidence(bytes32)", +"84e77da2": "updateKryptoroToken(address)", +"84e79842": "addAgent(address)", +"84e7e3d3": "MINT_INTERVAL()", +"84e83ee2": "SparksterToken()", +"84e84506": "onContribution(address,uint256,uint256,uint256)", +"84e85974": "YGO()", +"84e8a7df": "_soldOutside()", +"84e8b36e": "GetAskingTokenDecimal()", +"84e8bff9": "burnaftersale(uint256)", +"84e9ec37": "bonusTokenRateLevelFour()", +"84ea2e31": "GetDOTNumRevokableHashes(bytes32)", +"84eb11ce": "DoggyToken()", +"84eba00c": "tokenholder()", +"84ebd065": "NunesTestCoin()", +"84ebde52": "Under_the_Hood()", +"84ec480c": "marketToken2020()", +"84ecdaf6": "advanceState()", +"84ececf2": "userCreateSaleIfApproved(uint256,uint256,uint256,uint256)", +"84ed49a7": "isPoweruser(address)", +"84ef0778": "tokensIssuedTotal()", +"84efe4d6": "backSkinCoinOwner()", +"84eff1d0": "walunlock()", +"84f06570": "createAllTokens()", +"84f08cd9": "TokenContract(address)", +"84f0bb96": "NMRToken()", +"84f10c35": "testTransferCreator()", +"84f19f37": "createVoting(bytes32)", +"84f1b0b8": "__flooredLog10__(uint256)", +"84f1bd4e": "fpart(int128)", +"84f1cdb7": "intFunc(int256,int256)", +"84f32395": "setAssetToExpire(uint256)", +"84f3597b": "availableRefunds()", +"84f54874": "startWeekThree()", +"84f85951": "founderWithdraw()", +"84f88cbf": "TonToken()", +"84f94221": "getRoot(bytes32)", +"84f9c928": "get_signature_block(address,address,bytes32)", +"84fa2c97": "totalCentsCollected()", +"84fae760": "hello(address)", +"84fb24a5": "_addCourse(uint256,string,uint16,uint16,string,string)", +"84fb427c": "_transferHolder(address,bool,uint256)", +"84fc8050": "nugget(uint256)", +"84fd176b": "bonusPhaseTwoDeadline()", +"84fd5477": "isAuthorizedAccount(address)", +"84fd7ef0": "TOKEN_FOUNDATION_CAP()", +"84fdab0d": "pickConsolationPrize(uint256[])", +"84fde1c6": "calculateScorersForTeamIds(uint256,uint256)", +"84fdec83": "ownerCanWithdraw()", +"84fe5029": "weiCap()", +"84feab93": "Emit_OffchainPaymentFlag(address,address,bool,bool)", +"84feed25": "VoxelX()", +"84ff2e45": "coreTeamTokenSupply()", +"84ff435f": "UpdateUserNickName(address,bytes32)", +"84ffc422": "BountiesTokensHolder(address,address,address)", +"84ffcb5d": "setContractsMiniGame(address)", +"85000a86": "TitleUpdated(uint256,uint256,string,string,string,uint256)", +"85002354": "ZillowBlockchain(uint256,uint256)", +"85003d30": "CollateralTransferCanceled(uint256)", +"85007e54": "Zakat()", +"8500d919": "getBorrower(uint256)", +"85011eec": "Movie(string,string,uint256)", +"8502293b": "newCs(address)", +"85025396": "setProviderClientsCount(uint256,uint256)", +"8502935a": "maxInflationRate()", +"850382c8": "prova3(uint256[])", +"8503a6bf": "ERC721TokenMock()", +"8503b6a5": "addProposal(address,uint256,address,string,uint256)", +"850595c1": "contributorID(uint256,address)", +"8505a074": "ClassyCoin()", +"85071d9c": "SCARABToken1()", +"8507bee8": "joinedCrowdsalesLenMax()", +"850895dc": "CheckValidDate(uint8,uint8,uint16)", +"8508a693": "doTeamMinting()", +"8508d88f": "sendICOSupplyToken(address,uint256)", +"85093668": "jackpotBank()", +"8509a001": "rewardDenominator()", +"850a1532": "voteSnapshotBalance(address,uint256)", +"850a2e78": "setResults(address,uint256,uint256[2])", +"850a4621": "emitActiveChanged(bool)", +"850a7eca": "endTimeLockedTokensAdvisor()", +"850c1a0c": "earlyResolveA()", +"850c362a": "initCard1()", +"850d8a14": "CryptolottoToken()", +"850d9afb": "ENDTIME()", +"850db35d": "didPayInterest(bytes32,address,address,address,uint256,bool,uint256)", +"850e141a": "updateYearsSinceRelease()", +"850e2bc4": "setLLV_edit_22(string)", +"850e3760": "getShine(uint16)", +"850e47db": "KudoCoin()", +"850f2e2c": "findTileByAddress(uint16,uint16,address,address)", +"850fb62d": "transferProcess(address,address,uint256)", +"85107367": "stakeAddress()", +"8510b43f": "isSaleRunning()", +"85113156": "etherERC20()", +"8511b843": "addSpaceshipMoney(uint256,uint256,uint256)", +"85138313": "PureAirToken(uint256,string,uint8,string)", +"8513c619": "addManager(address,address)", +"8513db86": "test_threeValidAndInvalidEqAddress()", +"851545de": "transformAgent()", +"8515e413": "payUserOutgoingTransactionCommission()", +"851645e6": "getRandomUint(uint256)", +"85174a31": "transferToSelf(uint256,bytes)", +"85177f28": "EthReceived(address,uint256)", +"8518b0ad": "scheme()", +"851a33e9": "getBylawsMilestoneMinPostponing()", +"851a61d7": "Dist(address,uint256,address)", +"851ad4d6": "getNumDragons()", +"851aea7a": "setUser(string,string,string,bytes32)", +"851b6ef2": "getAllVotes()", +"851bb3c3": "bonusEnds15()", +"851c0cf6": "bltMaster()", +"851c27de": "earlyStageSetting()", +"851c4414": "getEvabotContractAddress()", +"851c5bf6": "addVestTokenAllocation(address,uint256)", +"851c9d11": "DGB()", +"851cad90": "THOUSAND()", +"851cc7f9": "coinMultiplayer()", +"851d1c27": "_transferFrom(address,address,address,uint256)", +"851d46f3": "internalCheck()", +"851e6b3a": "buy100Price()", +"851ee3e2": "ApproveERC20()", +"851f9e20": "chargeOff(address)", +"85203aa2": "lengthNotEqual(uint256[],uint256,string)", +"85209ee0": "contractState()", +"85216449": "checkCustodian()", +"8521b59c": "addDataPoint(int256,uint256,bytes32)", +"852263aa": "LogThresholdChange(address,uint256)", +"8522ac8c": "testTransferOwnership()", +"85233869": "NumberOfMiners()", +"8523930a": "calculateNoOfTokensToSend()", +"85252e82": "setTransferFee(address,uint256)", +"85255ab0": "Nero()", +"8526492f": "getTokensAmount(uint256)", +"85265ee6": "press_address()", +"8526d092": "isValidContributorAddress(address)", +"85271fa1": "_validateUSDAmount(uint256)", +"85276721": "DevReward(address,uint256)", +"8527831b": "getIndex(bytes32)", +"8527c3b0": "changePriceRandomFight2Death(uint256)", +"8528b7b0": "WILDToken()", +"852980a0": "addCourses(string,string,string,string,string,string)", +"852987f3": "getRecoverSigner(uint40,uint256,uint8,bytes32,bytes32)", +"8529d576": "toUint(bytes)", +"852a12e3": "redeemUnderlying(uint256)", +"852a6bd4": "getBalanceOfPlayer(address)", +"852a7d6c": "setExtraDistribution(address,uint256)", +"852ada4b": "nonFungibleOfOwnerByIndex(uint256,address,uint128)", +"852b6121": "setInitialBlockTimestamp(uint256)", +"852c061a": "axiesPrice(uint256,uint256,uint256)", +"852c5662": "adjustFlame(uint256)", +"852ccf2b": "YIYSToken(address,uint256)", +"852da11d": "tokenCreationCapPreICO()", +"852dbfc6": "pickURL()", +"852dc589": "setQuitLock(address)", +"852dce8d": "changeOraclizeGasLimit(uint256)", +"852e9f46": "transferAndFreeze(address,uint256,uint256)", +"852ede8d": "removeToken(string,int256)", +"852f31c6": "teamStageSetting()", +"852f6662": "isProgramFactoryContract()", +"852f8b74": "getBookSigner(bytes16)", +"85307bef": "TronToken(address)", +"85318217": "RegisterMine(string,uint256,uint256)", +"8531bb56": "SaleHasEnded()", +"8532137c": "Lexzoom()", +"853255cc": "sum()", +"853262a2": "tgrSettingsPartContributorIncreasePerStage()", +"85349e01": "totalDeveloperCut_()", +"8534b3a8": "setParticipateFee(uint256)", +"853504f3": "OpenToken()", +"8535490f": "redeemEther(uint256)", +"853552d7": "_slotAddNew(address)", +"8535d2ec": "sendBatch(address[],uint256[])", +"8536a50e": "_setBurnFeeProp(uint256)", +"8536bf8f": "BuyIPG()", +"85370965": "distributeVault(uint256,uint256,uint256,uint256,uint256)", +"853717bb": "calcBurnAmount(uint256)", +"85378346": "getChancePowerWithBonus(address)", +"853828b6": "withdrawAll()", +"853a4ec2": "grantReserveToken(address)", +"853a9d32": "EGGS_TO_HATCH_1HIPSTER()", +"853b59d7": "phase_1_token_price()", +"853d814e": "MyFairToken()", +"853df275": "duel(address)", +"853e88fe": "hashVM()", +"853f636b": "sendAllTokensToFounder(uint256)", +"853f7e98": "BDLToken()", +"85423912": "setDiscipleItem(uint256,uint256)", +"854254e8": "buildLoanOrderStruct(bytes32,address[6],uint256[9])", +"85431ec8": "setRate333()", +"85439f82": "someFunction4()", +"8544023a": "nokuMasterToken()", +"85443a2b": "CampaignContract()", +"85444de3": "getChildChain(uint256)", +"85445829": "numMatches()", +"85448c59": "getBountyAddress()", +"85461f69": "calcReward(uint256,address)", +"854642e1": "mintNewDrawings(uint256)", +"8546d393": "Anatomia(uint256,uint256)", +"85473be1": "maximumCoinsPerAddress()", +"85476d6e": "GetCurrentTypeSaleItem(uint256)", +"854772ea": "getUserTotalReward(address,bool,bool,bool)", +"8547af30": "lastBidder()", +"8547bb3a": "publicSaleMode()", +"85482f89": "setOnePowerAge(uint256,uint256)", +"8548cc21": "allocateOwnerTokens()", +"8549b326": "isSettable(uint256,string)", +"8549d6f4": "MayanProtocolContract(uint256,uint256)", +"854a3d64": "LogStartSale(uint256,uint256)", +"854a9cc4": "ImpeachmentProposed(address,string,uint256,address)", +"854b1cdf": "curPayTableId()", +"854bb344": "NoblesseOblige()", +"854bec87": "payback()", +"854c2e1e": "HitToken(string,string,uint8,uint256,address,address,address)", +"854c4a0d": "DownSuccess(string,address)", +"854c584d": "AdsventureToken()", +"854cb674": "TheIlluminati()", +"854cd978": "ClaireToken()", +"854cff2f": "setWhitelist(address)", +"854e32cc": "revenueShareDistribution(address)", +"854e85c6": "lifeEvents(uint256)", +"854ecd23": "Vaynix()", +"854f1663": "setNonprofitDisbursementAddress(address)", +"854f1a1c": "VIVARefundVault(address)", +"854f3988": "eighth_withdrawal(uint256)", +"854f4817": "buyKissBTCWithCallback(address,uint256)", +"85502264": "deptcheckrespond(address)", +"85506473": "GnosisToken(address,address[],uint256[])", +"855085b8": "interCrypto()", +"8550aaf0": "BONUS_TIER_9_LIMIT()", +"8550cf46": "buyGameCoin(uint256)", +"855114c9": "buyNation(uint8)", +"85511d5f": "setEmergencyCode(uint256,uint256)", +"85512e5b": "EthlanceUser2(address)", +"8551884a": "authorizeListingService(address)", +"8551b896": "pre_tokensSold()", +"8551e3fe": "savePost(bytes32,uint256)", +"85522831": "numIntervals(uint256)", +"85528394": "currentClaimPriceWei()", +"85529636": "getSiteTokenId(uint256,uint256)", +"85530d7c": "setPetLastBreedingTime(uint64)", +"85535cc5": "setVaultAddress(address)", +"8553f6fb": "hardCapDividends()", +"855460d8": "externalBuy(address,uint256,uint256)", +"8554d60a": "addTenParticipants(address,address,address,address,address,address,address,address,address,address)", +"8554d92c": "verify(uint256,uint256,uint256,uint256,uint256)", +"85550c6b": "tradeKey(bytes32,bytes32)", +"8555cde9": "Permissioned(address,address,bool)", +"8555de47": "BlackPyramid()", +"85561120": "TPTToken(uint256)", +"85564b97": "MasterWithdraw()", +"85565585": "crowdsaleOwner()", +"85580c5b": "userinverst(uint256,address)", +"85586e8a": "allocateCommunity(address,uint256)", +"85587375": "restartAssign()", +"855876d5": "countCliDreams(address)", +"8558c0af": "createBag(uint256)", +"8559fd88": "requestRandom(uint8)", +"855b7f5b": "getAdvancedTransfer(bytes32,bytes32)", +"855b842d": "isUserInBlackList(address)", +"855c145b": "specialManagerCountInt()", +"855c45e7": "EIP20Factory()", +"855c8999": "GetSlug(address)", +"855c95f1": "createETHAuction(uint256,address,uint16,uint256)", +"855ce579": "setTwoPowerAges(uint256,uint256,uint256,uint256)", +"855ceb7d": "AirToken()", +"855d0700": "insertList2(uint256,uint256,uint256,uint256,string,uint256,string)", +"855d7c21": "updateTokenBaseRate(uint256)", +"855e0629": "setIconRate(uint256)", +"855eafa7": "get_maker_fee()", +"855f2b3a": "createGen0Auction(uint256[2])", +"855fe4c0": "ifSuccessfulSendFundsTo()", +"855fe6ed": "getConfigEntryInt(bytes32)", +"85602ad5": "getPreviousValidators()", +"85609b1c": "compose(string)", +"8561d136": "currentRunningAddress()", +"8561dc0b": "tokenPostIcoUsdCentPrice()", +"8562e452": "ADVISORS_SHARE()", +"8564b2cd": "listItem(uint256,uint256,address,uint256)", +"8564c284": "setCompte_34(string)", +"85652d1f": "getInvoiceAddress(uint256)", +"85654c9c": "setMembershipRoster(address)", +"85663119": "initialPrize()", +"85666a7c": "TEAM1()", +"85673296": "DepositBalance()", +"85673fb8": "follow(address,uint256,address)", +"8569cc4e": "release_4()", +"856a89fd": "drawRaffle(uint256)", +"856b3108": "UpdateInitiateContractAddress(address)", +"856b7d2c": "SignDividend(uint256)", +"856bb9cc": "addConsent(address)", +"856c0181": "countriesStatus()", +"856c486b": "WoodyToken()", +"856c6bd1": "checkRose(bytes32)", +"856c71dd": "isAvailable()", +"856c8922": "getGameRules(uint256)", +"856cddb0": "DummyOVOToken()", +"856dc78e": "getWarriors(uint256[])", +"856de136": "FAPFundDeposit3()", +"856deacf": "findTag(string)", +"856df931": "LYB(string,string,uint256)", +"856e8488": "erc20TokenContract()", +"856eb2d1": "submitTransactionWithSignaturesToken(address,address,uint256,uint8[],bytes32[],bytes32[])", +"856ed703": "currentCap()", +"856f3080": "WhatWasMyHash(bytes32)", +"8570153e": "publish(string,string,bytes,address[])", +"85716e2f": "changeAdminer(address)", +"8571baff": "SimpleCrowdsale(address,address,address,address)", +"8572e364": "scale(uint256,uint256,uint256,uint256,uint256)", +"8573d4aa": "OwnershipTransferPending(address,address)", +"8574ddf9": "snailmasterReq()", +"8575052a": "set_fees(uint256,uint256)", +"857512b4": "airdropCountLimit2()", +"85760377": "PixelTransfer(uint16,uint16,uint256,address,address)", +"857637c9": "ShopDexToken2()", +"85766cc3": "Calculation(string,string,string,string,address)", +"8577efc5": "DIGI()", +"8577ffc1": "unofficialUserSignUpFee()", +"857835f9": "getPostsFromIds(address[],string[],uint256[])", +"85787c8b": "encode(uint256[],uint256[])", +"85796a2d": "bonusClosingTime0()", +"8579c10e": "payDevelopersFund(address)", +"8579cbde": "getPrice(string,uint256,address)", +"857ac1c9": "TokensBurned(address,address,uint256)", +"857b3224": "setOAR(address)", +"857b575e": "qquizwinnerToken()", +"857b7dfc": "buyLittleDragonGirlLottery()", +"857ba7fb": "MAX_CONTRIB_CHECK_END_TIME()", +"857bcb2c": "adminAddTrustedCurrencyContract(address)", +"857cc1c4": "ExchangeGift(string)", +"857cd569": "FundDeposit(address,address)", +"857cdbb8": "getPublicKey(address)", +"857cfff9": "homeDailyLimit()", +"857d39d7": "CCH_LLV_FIFA_1()", +"857d4c07": "throwScraps(uint256)", +"857e6a99": "decreaseTokens(address,address,uint256)", +"857f4864": "getNextSnapshotTime()", +"857f54e4": "MonethaGateway(address,address)", +"8580563c": "finalize(bytes,bytes,bool)", +"8580b71b": "getLoanIDbyClient(uint256)", +"8580eb2f": "setFeeBalance(uint256)", +"858110a5": "proposeShutdown(uint256)", +"858155e4": "subcontractExecuteCall(address,uint256,bytes)", +"8581dc7c": "SociBit()", +"85820925": "getCompte_17()", +"8582ac21": "getIcoInfo()", +"8582b7dd": "OrxERC20()", +"8582e554": "transferBy(address,uint256)", +"858310d8": "getPreICOAddress(uint8)", +"85839731": "setKittyContractAddress(address,address)", +"8583b1b8": "_setUserInfo(address,uint256,uint256)", +"85861b15": "setUnboundedLimit(address,bool)", +"85867cd5": "BDSMtoken()", +"8586b2f0": "getPermission(address,string)", +"8586e75b": "ChangedResource(bytes32)", +"8587be6e": "ceil(uint256,uint256)", +"8587edbb": "lockEndBlock()", +"8588b2c5": "adopt(uint256)", +"85899cee": "CryptoThreeKingdoms()", +"8589c725": "deleteWork(uint256)", +"858ac4d8": "TransferOwner(address)", +"858c7559": "chainIDSeed()", +"858ced35": "setUser(address)", +"858e41b4": "lemonContract()", +"858e58d6": "RemapImportedNotUsed()", +"858f84e7": "WTFToken()", +"858fa2f5": "setArrayIndexValue(bytes32,uint256,address)", +"85903f67": "setUnofficialUserSignUpFee(uint256)", +"85908ffa": "buyTokensPostHook(address,uint256,uint256)", +"85909ac6": "operate(address)", +"8592b778": "_rand()", +"8594bed0": "cancelMintRequest()", +"85952454": "newOwner(address)", +"8595c9ff": "diff(uint256[])", +"8595f8b1": "getGasPricePctOfBetValue()", +"8596982d": "getNotesCount()", +"8596d9ed": "transferInternal(address,uint256,address)", +"8597705f": "DataEquip(address)", +"8597eb6e": "ericukis(uint256,string,uint8,string)", +"859832e6": "locationsLength()", +"85984e69": "WavesCommunityToken()", +"859971dc": "initialFunding()", +"8599d0d8": "buildIdentifier(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"859a711d": "icoBonus2EndDate()", +"859a954b": "peace(string)", +"859b97fe": "cancelAuction(address,uint256)", +"859bbfee": "floatAdd()", +"859bcc71": "allowDisbursePaymentWhenPaused()", +"859ccc72": "setPlayerVirusNumber(address,uint256)", +"859d1bc7": "updateLeftLottery()", +"859da4e3": "transferParityOwnership(address)", +"859e0547": "createBounty(address,string)", +"859e25df": "giveProjectMoreVotes(address,uint256)", +"859e7d32": "getEpochData(uint256)", +"859f5717": "AuctionSuccessful(address,uint256,uint256)", +"859f63dc": "checkRewards(uint256[])", +"85a013e0": "setAnswer(uint256)", +"85a08f41": "buyLimitSupplyMax()", +"85a09f6f": "withdraw123()", +"85a10b30": "burningAdress()", +"85a143f4": "DailyRoi()", +"85a156af": "activityFunds()", +"85a17a1a": "isValidBet(uint8[4])", +"85a1c242": "PSM_PRICE()", +"85a227fd": "APC()", +"85a242d7": "teamTokensAccount()", +"85a2675b": "isConfirmedWithdraw(uint256)", +"85a26d7d": "getAllPeople()", +"85a2dd15": "hasAccess()", +"85a2f6af": "donateToken(address)", +"85a30c33": "changeContractAddress(address)", +"85a33ce9": "exitinverst(address)", +"85a345e2": "disTrust(address)", +"85a34f4a": "getGameSums(uint256)", +"85a38635": "votingEnd()", +"85a4757e": "releasedAmountBlocksIn(uint256,uint256)", +"85a49f2e": "verifyPass(address)", +"85a52584": "SettingsChanged()", +"85a735dd": "partAllocationLength()", +"85a8f42e": "diff(int256[],int256)", +"85aa6103": "auctions()", +"85aa6e09": "granted(address)", +"85aa92a7": "storageAddress()", +"85aaff62": "transcoder(uint256,uint256,uint256)", +"85ab0c19": "tokenProvenance(uint256)", +"85aba275": "assign(address)", +"85ac2f7b": "getListedTime()", +"85add95b": "Spike()", +"85ae067b": "func_040B()", +"85ae2f1c": "sunFinished()", +"85ae6d2d": "OfferingOpens(uint256,uint256)", +"85af4142": "verifyTeam(uint256)", +"85b018e9": "isSubjectRaiseTap(uint256)", +"85b09a01": "DIVC()", +"85b12c7c": "launch(uint256)", +"85b1423e": "returnAll()", +"85b142ed": "getAccountState(bytes32)", +"85b2ff8f": "getWeightedRandomMember(uint256)", +"85b31d7b": "myInfo()", +"85b39fc1": "CONTRACTIUM()", +"85b3c420": "createWeight(uint256)", +"85b3ed4e": "GoalReached(uint256,uint256)", +"85b443b6": "econReserveWallet()", +"85b4bb53": "getSettings()", +"85b51737": "addSafe(uint256,uint256)", +"85b55c07": "withdrawFeesToPoolOwners()", +"85b6824f": "setMinterWallet(address)", +"85b688de": "PRIVATE_STAGE_START()", +"85b73d3c": "testCreateNewRevision()", +"85b75b1e": "toogleStatus()", +"85b86188": "isSaleClockAuction()", +"85b8c64a": "bonusFreeLOT()", +"85b8d86f": "CrowdSaleFinished(string)", +"85b923ca": "getCandidates(bytes32)", +"85b94536": "debug_judge(bytes32[13],uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", +"85b9c729": "OnWithdrawTo(address,address,address,uint256,uint64)", +"85b9f607": "buyTokensWithGuarantee()", +"85ba0052": "stringToUintNormalize(string)", +"85ba9a99": "setMinimumHydroStakes(uint256,uint256)", +"85bac237": "addPayment(address,uint256)", +"85bb7d69": "answer()", +"85bb821b": "WTO()", +"85bb8e29": "continuousSale()", +"85bbb53a": "ancestorBuffPercentage()", +"85bdc4a2": "lastBlock_v16()", +"85bddb97": "addOnOneStage(address,uint256,uint256)", +"85bde3f2": "SaddlePr(uint256)", +"85be2f02": "SampleCrowdsaleToken(string,string,uint8,uint256)", +"85be8fe6": "confirmReceivedAt(uint256)", +"85bf96a0": "JOP(uint256)", +"85bfe55d": "getUserByEmail(bytes32)", +"85bfff9c": "sayNoNo(uint256)", +"85c07546": "TransformCoin()", +"85c09f26": "topTotalSupply()", +"85c1057b": "payAndHandle(uint256,address,uint256)", +"85c15d9a": "exchangeRates(address)", +"85c3649f": "registerSelf(bytes32)", +"85c373c3": "releaseAccount(address)", +"85c3bb6f": "getMsg2()", +"85c4e3d1": "sendSubscriptionBonus(address)", +"85c53cf1": "giveAccess(address,bytes32)", +"85c5e9f8": "mimin(uint64,uint64)", +"85c64029": "set_prices(uint8,uint8,uint8)", +"85c653ba": "Divsforall()", +"85c78fac": "retryOraclizeRequest(uint256)", +"85c7a953": "WithdrawFullBalanceFromBankAccount()", +"85c855f3": "setStake(uint96,uint128)", +"85c8d362": "CTM()", +"85c8f447": "totum()", +"85c95d30": "setResourcesOtherManager(address,uint8)", +"85c9dd72": "GCOXToken(string,string,uint8,uint256)", +"85ca165a": "count_donors()", +"85cb2e6e": "refreshEmissionReleaseTime()", +"85cb469a": "getIcoFund()", +"85cb4ea2": "getPunchCardsInternal(address)", +"85cba6b1": "getFallback()", +"85cba722": "EGLSold()", +"85cbc881": "totalUSDRaised()", +"85cc3114": "doDeposit(address)", +"85cc51c2": "destTokensTeam()", +"85cc63ec": "getCurrentMinigamePrizePot()", +"85cc6fba": "boomrToken()", +"85cc9a2b": "issueKey(bytes32,address)", +"85cd233c": "getResidualEtherAmount(uint256,uint256)", +"85cdafa6": "teamOneVolume()", +"85cf61ef": "payRake(uint256)", +"85cfdec7": "buyKWHAgainstEther()", +"85d02c8a": "changeMaximumInvestmentsAllowed(uint256)", +"85d178f4": "withdrawWallet()", +"85d19a25": "getPositionId(uint256)", +"85d1be13": "preSaleSecondPrice()", +"85d3b5bd": "policyID(uint256)", +"85d45d34": "comments2()", +"85d51d19": "contributorETHBalance(address)", +"85d544be": "transferAndLockUntil(address,uint256,uint256)", +"85d559ee": "TbookToken(uint256,string,string)", +"85d5c971": "logTransfer(address,address,bytes32)", +"85d5e631": "disableTokenTransfers(bool)", +"85d61e2a": "supplyNum()", +"85d63cce": "REMAINING_SUPPLY()", +"85d71df1": "investxPlatform()", +"85d77e5f": "priceExpiration()", +"85d80458": "m_deployer()", +"85da1192": "setMaxFaucet(uint256)", +"85daafe6": "capitalRaisedTarget()", +"85dacd5b": "voteSnapshotBalanceAuto(address,uint256)", +"85db2dda": "PayoutQueueSize()", +"85db2e3a": "PoD()", +"85db66e8": "addGroupMembers(bytes32,address[])", +"85dc3004": "setFundAddress(address)", +"85dc6721": "emptyShipCargo(uint32)", +"85dcbb5a": "returnMember(address)", +"85dcee93": "descriptionHash()", +"85dcfbd4": "VernamWhiteListDeposit()", +"85dd1fbd": "bet_on_team_1()", +"85dd2148": "getSaleDate(bytes16)", +"85ddb747": "transferFromPosttgefund(address,uint256)", +"85ddf726": "dismissOperator(address)", +"85de4841": "uint2str(uint64)", +"85de4f72": "luckybuyTracker_()", +"85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", +"85defaf4": "voteEnds()", +"85df508f": "tip_rate()", +"85df51fd": "blockHash(uint256)", +"85e00e4b": "bezpolToken()", +"85e040b1": "Invested(uint256,address,uint256)", +"85e050e4": "get_property_contact(uint256)", +"85e05445": "MartiniumToken()", +"85e0832c": "totalMintSupply()", +"85e1684c": "computeS(uint256,uint256)", +"85e344f7": "SmartInvestmentFundToken(address)", +"85e36cc2": "foundationAmount()", +"85e3f058": "getIdentity(uint256)", +"85e41e7e": "TokenFree(uint256)", +"85e436bf": "setBuyRate(uint256)", +"85e567d4": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[1])", +"85e57f3c": "updateLogoUrl(bytes32,bytes32)", +"85e5908e": "Group_3()", +"85e5bb3a": "Security_AddPasswordSha3HashToBankAccount(bytes32)", +"85e5d7ee": "mintAll(uint256[])", +"85e5f08a": "updateVerifiedSign(address,address,string,uint8,string)", +"85e612e4": "getBirthYear()", +"85e61b4a": "processFundingSuccessfulFinished()", +"85e61e67": "set_arbits_whitelist(address,address,bool)", +"85e68531": "revokeAccess(address)", +"85e7d4cb": "CCC()", +"85e870b3": "default_rate()", +"85e91347": "initializeSaleWalletAddress()", +"85e99be4": "updateHighestPrices_(uint256,address)", +"85e9bd2b": "setAdminAddress(address,address)", +"85eac05f": "changeOwnerAddress(address)", +"85eb6109": "getAddressClaims(address,address,uint8)", +"85ec419a": "setTokenTwdt(address)", +"85ed5cf9": "resetAlias()", +"85eddeea": "setReward(address[],uint256[])", +"85edf68d": "initVestingStages()", +"85ee292c": "airdropTesterFinal(address[],uint256)", +"85ef4ae7": "f_internal()", +"85ef5a8a": "GermanCoin(address,address)", +"85efa3aa": "setHold(address)", +"85efb721": "fillTheBank()", +"85eff0ef": "hardcoreBattleWith(uint256,uint256)", +"85f01859": "setWord()", +"85f07a2b": "CALLER_EXCHANGE_SHARE()", +"85f07b64": "confirmedAmount()", +"85f07bbe": "MIN_PLAYERS()", +"85f0e72c": "uintToStr(uint256,uint256)", +"85f0f098": "allowWithdrawals()", +"85f16544": "EdgarRichardWunsche()", +"85f19bc4": "giveDividend()", +"85f255ea": "getUserFactoryContractAddress()", +"85f2aef2": "team()", +"85f2d854": "createManyDrinks()", +"85f2e4b1": "_strConcat(string,string,string,string)", +"85f3c568": "LogContribution(address,uint256,uint256)", +"85f45250": "addFunds(uint256,uint256)", +"85f517d4": "account3Address()", +"85f52912": "TGRUPToken()", +"85f52984": "addPrecondition(address)", +"85f59db3": "CheckN2Exception(bytes32,uint32)", +"85f63a4a": "preICOBeneficiaryAddress()", +"85f671a6": "requestWithdrawal(bytes32,uint64,bytes32[],uint256[],uint256[2],uint256)", +"85f67ae4": "addEpisode(address)", +"85f8c16d": "claimHours(int256)", +"85fa33eb": "declareDividend(uint256)", +"85fab341": "transferTokensAfterEndTime(address,uint256,uint256,uint256)", +"85fae602": "getInsurance(uint256)", +"85fbd17f": "PonzICO()", +"85fbdd47": "_order(uint256,uint256,uint8)", +"85fbdefc": "masterBalanceOf(bytes32,address)", +"85fc835e": "getSoftcapUsd()", +"85fcb4a8": "findPrevOrderId(uint128,uint128)", +"85fcd363": "votesArr(address)", +"85fceea8": "getCountSubscribers()", +"85fdeba7": "vendorAllocation()", +"85fe0448": "testThrowRestartNotUpdatable()", +"85fe551a": "ownerGrace()", +"85fe6200": "recordEndedGame(uint256)", +"85fed812": "ERC20Lookup()", +"85ff5e13": "SkinCoin()", +"85ff70de": "_payFees()", +"85ff96a7": "getTotalSellingMonsters()", +"86001519": "totalProfit()", +"86005b14": "allocateVestable(address,uint256,uint256,uint256)", +"8600e40b": "notifyWithdraw(address,uint256)", +"8600f2ec": "totalChildTokens(address,uint256)", +"86013322": "withdrawSaleBalances()", +"860241c2": "TAXToken()", +"8602c8b6": "countryofN(address)", +"8602c8d3": "ethSendDifferentValue(address[],uint256[])", +"8603d31a": "auctionDetails(uint256)", +"860427fc": "setGPSRatio(uint256)", +"86047946": "_processHistoryItem(bytes32,bytes32,uint256,address,address,uint256,bytes32,bool)", +"86048c9a": "totalCashout()", +"8605c97e": "setMarginThresholds(uint256,uint256)", +"86060884": "SafeGuard(bytes20,uint256,uint16)", +"86066750": "HelloWorld(string)", +"86068367": "DYITToken(uint256,string,string,uint8)", +"8606f905": "balanceOf(address,bytes)", +"86070cfe": "recoveryVaultAppId()", +"86073441": "signToApproveAddTokenData()", +"860772a9": "establishBorrowerReturnFiatPerEthRate(uint256)", +"860779e7": "setMinBuy(uint256)", +"860838a5": "frozenAccounts(address)", +"8608e58b": "sendOwnerDeposit(address)", +"86096578": "getRetailer(uint256,address)", +"860aefcf": "limits()", +"860bb34a": "SIGMA()", +"860c5ed6": "testVote()", +"860c851a": "votePrice()", +"860caf69": "HashAdded(address,string,uint256)", +"860d7273": "masterKeyActive(address)", +"860e6185": "commitTo(bytes32)", +"860e9960": "BetPriceLimit()", +"860e9b0f": "updateRegistryPrice(uint256)", +"860f5048": "baseSupply()", +"861004ae": "Visus(address)", +"861080ae": "transferMembership(address)", +"8610f045": "withdrawOffer(uint256)", +"86115c1d": "MyPurchaseContract(address)", +"8611643a": "Withdraw(string,string)", +"86116c12": "PerkscoinToken(uint256)", +"86117319": "buy_the_tokens(bytes)", +"8611e330": "FishbankBoosters()", +"86127ecf": "oraclize(bytes32,bytes,bytes,bytes,string,bytes,bytes,uint256,bytes)", +"8612d049": "isLocked(address,address)", +"8612ee13": "addMatch(string,string,string,bool,uint8,uint8,uint256)", +"86145875": "contributeInternal(address,uint256,uint256)", +"861654f7": "updatefundingStartTime(uint256)", +"8616865d": "ReferredInvestorAdded(string,address)", +"8616bc8b": "contributedTotal()", +"8617457a": "start_()", +"86188c97": "fetchOrdersForMerchant()", +"86190d62": "buyable(address)", +"86192c36": "privateOfferingPercentage()", +"861c3385": "blocksquare()", +"861c3a09": "queryByUser(bytes)", +"861c9c79": "transferToComposition(address,uint256)", +"861cab52": "canSendGameGift()", +"861d4e51": "NOETToken()", +"861d7daf": "deleteImage(uint256)", +"861dd0a5": "releaseCats(uint32,uint256,uint256,string)", +"861e2e43": "orderCore(uint256,uint256,uint256)", +"861e5d6a": "CryptoKotik()", +"861ec457": "SILVER_AMOUNT_TPT()", +"861ed3ea": "controllersByPartition(bytes32)", +"861f8a52": "testThrow_2_invalidOwner_accessRestrictionThrow()", +"861fcefb": "Token1Token()", +"86200842": "getSellDailyLimit(uint256,bytes2)", +"8620410b": "buyPrice()", +"86212913": "queryAuction()", +"86216ace": "NotThrowingToken(uint256)", +"8622031f": "setModuleAddress(string,address,bool)", +"862235f5": "EthertoteAdminAddress()", +"8622a689": "expiresAt()", +"86231246": "returnsOneNamed(uint256,uint256)", +"86231b9e": "contentHostPaidByAO(bytes32)", +"86237e7b": "setAngel(uint8,address,uint256,uint16)", +"862440e2": "setURI(uint256,string)", +"86260cfe": "UpdateUserEmail(string)", +"86269a88": "checkBetNumber(uint8)", +"86271d8b": "minPurchaseInEth()", +"8627df46": "buyTickets(uint256,uint256)", +"862882e5": "startAuction(string,uint256)", +"8628892e": "Initialize(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256)", +"8628aca9": "setIds(uint256,uint256)", +"862a4bf2": "tokenHolder(uint256)", +"862b092b": "getTokenName()", +"862b525c": "gameMiningTokenStartTime()", +"862b6683": "setValues(uint256,uint256,uint256,uint256)", +"862c5e16": "validatePurchase(address,uint256,int256[],int256[])", +"862cb14e": "DMI()", +"862cdef3": "auctionTank(uint256,uint256,uint256,uint256)", +"862d0d4b": "_weiToFinney(uint256)", +"862eb9c0": "setGoldReward(uint256)", +"862ed594": "XmonetaToken()", +"862f4517": "hasVoting(uint256,uint256)", +"862fd38c": "concat(uint8,bytes32,bytes32)", +"86312b1b": "TripsCoin()", +"86314af9": "BetOnHashV84()", +"8631890e": "PLANET_PRICE()", +"86318bc4": "ethBioxRate2()", +"86321f95": "switchClaimerAndRemoveOldOne()", +"86323e85": "isSellingNow()", +"8633497f": "angelCurrentAmount()", +"863451dd": "donateEther()", +"86346c42": "awards(uint8)", +"86348afa": "ColorReserved(address,uint256)", +"863524b1": "partnersKey()", +"86356ab9": "finalizeRefunding()", +"8635b527": "resetPainting(uint256)", +"8635f45d": "getSpaceshipProductAttributesByModel(uint16)", +"863682f4": "getScore(uint32)", +"86377b63": "registerLoanReplaceDuplicated(address,uint256,uint256)", +"863843bc": "bonusSupply()", +"8638aa65": "DEBUG_MODE()", +"8639ae69": "getAllCrySolObjects()", +"8639b0d7": "getBalanceDiscrepancy()", +"863a0372": "hex2dec(uint256)", +"863a03e0": "salvage(address)", +"863ac22b": "EtherGame()", +"863b3b66": "purchaseThemedSpinner(string,uint256)", +"863c51a9": "setCustomerSignature(address,uint256,bytes32)", +"863c607c": "ReactioonToken()", +"863d62ac": "Goldmint(address,address,address,address,address,address)", +"863da000": "disburseAuthorizedPayments(uint256[])", +"863e24d6": "updateBonusTicketsPercentage(uint8)", +"863e76db": "ONE_DAY()", +"863e7e4b": "getCurrentPhraseInfo()", +"863e8320": "initGPS()", +"863f2a19": "adjustTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"863f40ac": "syp1(address)", +"863f52b4": "makerBetsCount()", +"864059ac": "clearingPriceComponent()", +"86420710": "setReceivers(address[],uint256)", +"8642269e": "buyProduct(uint256)", +"86428900": "SetPeriodITO_startTime(uint256)", +"86432925": "profitDistributionContract()", +"8643d01d": "throwsSaleWalletIncorrectSaleAddress()", +"8644ddd9": "WOB(uint256,string,string)", +"86452295": "getPointOf(uint256)", +"86457702": "authorize(string,address)", +"8645a3da": "ATTR_PRODUCIBLE()", +"8646b5cb": "marketTotalEarning()", +"8646fb43": "Electrominer()", +"864757a8": "minFinneyToKeep()", +"8647a5dc": "getTimeLock(bytes32,bytes32)", +"86481d40": "getLevel(uint256)", +"864824a0": "phase9Price()", +"86485cdf": "setCurrentExchangeRate(uint256)", +"86489ba9": "initialize(address,address,uint256,uint256,uint256,uint256)", +"8648c0ce": "neumarkCap()", +"8648f24c": "changeVariables(uint256)", +"86496e2e": "TcToken(uint256,string,uint8,string)", +"8649c0a4": "SetEndTime(uint256,uint256)", +"864a1057": "Start4()", +"864a9a09": "__mod(bytes,bytes)", +"864aef45": "buyCard(address,uint256,uint256,uint256)", +"864af3f4": "Menu02(address[],uint256)", +"864b525c": "GoldDollar()", +"864c189b": "LBCToken()", +"864c2e94": "service_founder()", +"864ca300": "goldBalanceOf(address)", +"864ce5dc": "getWeekBonus(uint256)", +"864d1d72": "getUserCountByRole(string)", +"864d7e14": "approveAsset(uint256)", +"864da88c": "_clearBlocksProducers(uint256)", +"864dd17d": "Controller(address,address)", +"864e8cc1": "setMaxCharacters(uint256)", +"864f4e54": "PeerWalletsToken()", +"864fda69": "minNum()", +"864fff0a": "DealCompleted(uint256,address,uint32,uint32,bool,uint256)", +"86508380": "_getUncreditedPoints(address)", +"8650b6ef": "endTimePre()", +"86517df4": "concludePresale()", +"8651dc1e": "confirm(uint256,uint256)", +"865232fb": "setarg_3_input(uint256)", +"86544e11": "STARTING_SNAIL_COST()", +"8654b78d": "AttoresDigitalCertificates(address)", +"865508ef": "minSend()", +"86556071": "gracePeriodStart()", +"8655f0da": "copyAllHpbNodesByStageNum(uint256)", +"8656dcb6": "distributeTeam()", +"865733da": "MercuryCrowdsale()", +"86575e40": "changeName(string,string)", +"86578375": "withdrawFund(uint256,bool)", +"865891b0": "PlanToken()", +"8658b8b9": "checkPermission(address,address,bytes32)", +"86590955": "changeHeight(uint256)", +"86591bd6": "testFailMintWhenStopped(int256)", +"86598549": "_withdrawTokensFor(address)", +"8659d573": "getCountPosition(uint256,uint256)", +"865a4253": "prcSum()", +"865ad6c2": "levelUpCar(uint32,uint32,uint32)", +"865b0d30": "SingularityTest15()", +"865c79b2": "setImageDataLength(uint256,uint16,uint16)", +"865cc6a3": "getDErc20OwnerClaimEnabled(bytes32)", +"865dc0d9": "EndChanged(uint256,uint256,address)", +"865e288b": "getAvailableWithdrawProfitValue(address)", +"865eb3d3": "getWorkerProfit()", +"865fd239": "transfer_token_ownership(address)", +"865fe035": "addressIco()", +"86602b6b": "testControlRetractLatestRevisionNotOwner()", +"86602c84": "frozenAmount(address)", +"86609b37": "_createCard(address,uint16,uint16)", +"8660b220": "buyerRate(address)", +"8660b32b": "getSumInByGame(uint32)", +"8660bb8b": "updateAllPixelDetails(uint256,uint8,uint8,uint8,uint256,string)", +"8660cbf5": "battleDecider()", +"8661009b": "checkPayments(uint256)", +"866192a2": "getLastAuditDocumentation(address)", +"866278a8": "level_7_amount()", +"86628eed": "weisDeposited(address)", +"86630b7b": "getSaleData(uint256)", +"86633571": "DestructibleMiniMeToken(address,address,uint256,string,uint8,string,bool,address)", +"8663b4c7": "StudyCoin()", +"866408eb": "getPlayerKeysCount()", +"86647821": "NeuroDAO(address,uint256)", +"86647bac": "getBountyArbiter(uint256)", +"8666107c": "eth_received()", +"86667435": "getPercent5(address)", +"8666fca5": "holdingsOf_BEAR(address)", +"86673464": "assertEq15(bytes15,bytes15,bytes32)", +"8668a416": "assignMultipleParcels(int256[],int256[],address)", +"8669ccf4": "getFreelancers(address,uint256)", +"8669e08c": "migrationFinishedTime()", +"866b5674": "totalBountyinWei()", +"866b9323": "mintForReportingParticipant(int256,uint256)", +"866c03eb": "_unmintedTokens()", +"866d840a": "setCompte_44(string)", +"866df234": "setLink(bytes)", +"866e5162": "oslikToken()", +"866eb7b5": "initialParameter(address,address[],address,uint256,uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint32[])", +"866f4555": "Basic23TokenMock(address,uint256)", +"866f6736": "trustedChildWithdraw()", +"867022d1": "Initialise(address)", +"86703c9c": "getProviderClientsCount(uint256)", +"86707026": "midEtherBonusLimit()", +"8670cc7c": "BlueDragon()", +"8670e183": "createLegendaryAuction(uint256,string)", +"8671090e": "setSavedBalanceToken(uint256)", +"86715acf": "BodyOneToken(address)", +"8671b894": "cancelOrder(uint256[3],bytes32,bytes32,uint8)", +"8671ef4d": "grg(address)", +"86723215": "createMarket(bytes,uint256,uint256,address)", +"8672e853": "LogOwnerAdded(address,address,address)", +"8672f1bc": "isProposalActive()", +"8673094f": "allGuGiven_()", +"867387d4": "BurnableToken(address[50])", +"86749d97": "ZOOToken()", +"8675cf9e": "MaxToken(uint256,string,string)", +"8676993f": "setTransformAgent(address)", +"86773cae": "setPromoEndTime(uint256)", +"8677ebe8": "isSigned(address,bytes32,uint8,bytes32,bytes32)", +"8678446e": "preSaleMinEth()", +"8678c2b9": "HodlEth(uint256)", +"867904b4": "issue(address,uint256)", +"86795e8d": "set_master(address)", +"867a66ac": "ownerCredit(address,uint256)", +"867b36fe": "setFiscalVerify(bytes32)", +"867b3d4b": "updateEtherPrice()", +"867b79a1": "withdrawalRange(uint256,uint256,address)", +"867befba": "SUV_TYPE()", +"867c0547": "newPonziFriend(uint256)", +"867c2857": "transferAgents(address)", +"867c6e23": "CryptoRides()", +"867c7eda": "getProposalByID(uint256)", +"867e248c": "feePercantage()", +"867e958f": "NAEC()", +"867ea029": "WESSToken()", +"867eed11": "privilegedTransferLock()", +"867f990a": "changePriceUSD(uint256)", +"867fbe6d": "AnotherOwnerAssigned(address)", +"86804aad": "queryData(address)", +"8680e52d": "emitJobOfferAccepted(uint256,address)", +"86813c53": "sellerIdOf(address)", +"86814819": "_prePurchaseAmount(uint256)", +"868149da": "TRONCLASSIC()", +"8681a07f": "ownerSetRandomApiKey(string)", +"868203ea": "ZeroChainToken()", +"86820a7d": "createInputData(uint256,uint256)", +"86834610": "registerEscapeRequest(uint32,int256,bool,uint32)", +"8683612b": "exists(bytes32,bytes32)", +"8683e4b4": "WHUToken()", +"86842bc2": "verifyNonces(bytes,uint64[],uint64[])", +"86845f9a": "theCyberGatekeeperTwo()", +"868467e6": "deliverTokens(uint256)", +"86849a6c": "TeamTailsChoice(address)", +"86852dca": "getElectionInfo()", +"86852fd7": "bountySupply()", +"86863ec6": "init(address,address,uint256)", +"86867740": "trueSupply()", +"86869eae": "totalClosedContracts()", +"86886a38": "transferAccessOn(address)", +"8688b5fe": "getMyContractsByType(uint256)", +"86897cb8": "Addresses()", +"8689a500": "putToken()", +"868a8813": "calculateGrapeBuySimple(uint256)", +"868d2b62": "ZeusCoin()", +"868d5383": "transferFromWithData(address,address,uint256,bytes,bytes)", +"868defd0": "getRemovableIdArrayAddressItems(address,uint256,string,string,string)", +"868df7f6": "alterFeaturedLength(uint256)", +"868e3c52": "EosPizzaSliceSafe(address)", +"868eb6bf": "removeOrders(uint256,uint256)", +"868f2564": "Iconss(address,address)", +"868f9c57": "Administrator(string,address)", +"86908b3f": "TransferInternalLedgerAT(address,address,uint256,bytes32)", +"86908f93": "FFG(uint256,string,string)", +"8690d6d5": "CentrallyIssuedToken()", +"8691162a": "TlcCoin()", +"86913884": "ShroomeryFarmer()", +"8692ac86": "transferOwnershipNow(address)", +"86936ed5": "isReceiptClaimable(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", +"86954ecc": "Finished(uint256)", +"86964032": "getHash(address,uint256,uint256,uint256,uint256)", +"8696807d": "addABaddress(address,address,string)", +"8696eec4": "setTokedoTokenFeeDiscount(uint256)", +"86973b0f": "RewardDemoChannel(address,address,address)", +"86985bee": "getTeamSalary()", +"86994b71": "RND()", +"869984c8": "addrOwner()", +"8699a65f": "rewardsCount()", +"869ac8dc": "getReferenceCurrency(address,uint256)", +"869af1ff": "finishTransferGet()", +"869b22fd": "toEthertoteDevelopmentWallet()", +"869b3f6a": "testThrowsRetractNotOwner()", +"869c63c1": "batchOrderTrade(uint8[2][],bytes32[4][],uint256[7][],address[6][])", +"869c8bd4": "buyChannel(string)", +"869d436d": "approvedAddressLUT(uint256)", +"869d785f": "removeModerator(address)", +"869d7d93": "countLeadingZeros(uint256,uint256)", +"869e0e60": "decreaseSupply(uint256,address)", +"869f1c00": "presaleParticipationMinimum()", +"869fe15d": "setFirstWinner(address[])", +"86a046d5": "lastRefrralsVault_()", +"86a17f29": "modifyLevelCap(uint256,uint256)", +"86a1ea7a": "HeliosToken()", +"86a2ef34": "Indemnisation_4()", +"86a2f98a": "getPersonalStakeForAddresses(address,address)", +"86a3171f": "removeAllAttachmentsFromCollectible(uint256)", +"86a33a0b": "RoundBSold()", +"86a3736e": "increaseTokenBalance(address,uint256)", +"86a3c902": "If(address,bytes32,bytes32)", +"86a3e0a7": "allocated1Year()", +"86a40e63": "_removeExcluded(address)", +"86a4f6ee": "MOM()", +"86a50535": "voteFor(uint256)", +"86a57f6f": "byteArrays(bytes1,bytes)", +"86a5ebe1": "getPlayerDetails(address,address)", +"86a5ff97": "changeStatus(string)", +"86a61c81": "medicos()", +"86a66dc3": "getVoteResults()", +"86a7b995": "maxContributionInWei()", +"86a8da37": "getNumWinners(uint256)", +"86a91ab4": "Scale(int256,bytes32)", +"86a9443e": "WellyPai()", +"86aa354a": "PUBLIC_SALES_2_PERIOD_END()", +"86aa552a": "lockAbsoluteDifference()", +"86aa6c09": "P3D_address()", +"86ab3f7b": "RESERVED_TOKENS_FOR_ICO_BONUSES()", +"86abfce9": "Voted(uint256,bool,address)", +"86acb16d": "register_creature(address)", +"86ace9b1": "setICOWeek1Bonus(uint256)", +"86ae5fec": "getParticipantCount(uint256)", +"86aecb9d": "_lotteryToken(uint256,address,address)", +"86af6ba5": "addDeed(address,uint256)", +"86afa110": "lockTrading()", +"86b08228": "getInvestorAddr(uint256)", +"86b0befc": "congress()", +"86b0fc9d": "startsWithDigit(string)", +"86b14583": "EzPoint()", +"86b27391": "startCrowdsale(uint256,uint256,uint256,uint8)", +"86b2be73": "ICO_RATE2()", +"86b35f79": "read_u16()", +"86b3610f": "wei2usd(uint256)", +"86b46073": "getCurrentBidOwner(uint256)", +"86b46694": "currentWave()", +"86b467f2": "tokenSaleContractAddress()", +"86b5e2b9": "dataSourceCallbackRoundOfSixteen(uint256,uint8)", +"86b6b721": "Anaco()", +"86b6ec6c": "showLastChange(address)", +"86b6f462": "updateMaxContribution(uint256)", +"86b714e2": "s()", +"86b715bd": "setAutoNewbond(bool)", +"86b76d6c": "MunishExchange(address)", +"86b7b8f6": "setBalanceHolder(address)", +"86b88af0": "setLLV_edit_10(string)", +"86b8f0a2": "teamAllocations()", +"86b945b0": "getRoundStatus()", +"86b9a1f4": "logShareTokensTransferred(address,address,address,uint256)", +"86ba793e": "setProviderCountry(uint256,uint256)", +"86bb1b24": "pegEtherValues(uint256,uint256,uint256,uint256,uint256,uint256)", +"86bb1e03": "toCollect(uint256)", +"86bb5a48": "buyAsset(address)", +"86bb7121": "getBlocksPerRound()", +"86bb8f37": "claimReward(uint256,uint256)", +"86bc2338": "isConsumable()", +"86bd4ef7": "lockPayment(bytes32,address,uint256,address)", +"86bdea3f": "postTrade(bytes32,uint256,address)", +"86be3981": "dividendsForUser(address)", +"86be53d3": "isPresaleOn()", +"86beaece": "doPurchase(uint256,uint256,uint256,address,address,uint256)", +"86bfbd44": "setDailyPrices(uint256,uint256)", +"86c02e88": "allocateFundToken()", +"86c23d54": "EliteShipperToken(uint256,string,string)", +"86c2b53d": "EximchainToken()", +"86c2e8e3": "accept(uint256,address[],uint256[],uint256)", +"86c3ceae": "setVAtomOwner(string,string)", +"86c455ee": "team2LockEndTime()", +"86c57fcc": "b32ToBytes(bytes)", +"86c59418": "USDToken()", +"86c5bc1c": "totalExchanged(uint8,uint8)", +"86c6f66b": "buySilver(uint256,uint256,uint8,bytes32,bytes32)", +"86c8c491": "setTransferAdmin(address,bool)", +"86c99779": "blocktubeUser()", +"86ca32b5": "claimExist(string)", +"86cb034f": "KIBIS_Token()", +"86cb531b": "mintPartnerWithLock(address,uint256,uint256)", +"86cb5cdb": "feeForFirstArtWorkChangeRequest()", +"86cba22b": "getAllBuyers()", +"86cc5a1d": "testIsOptionPairRegistered(address,uint256,address,uint256,uint256)", +"86cd71be": "getNumberOfMinters()", +"86cdbae9": "append(string)", +"86ce0285": "allocateTokens(address,uint256)", +"86ce8327": "updateStarScore(address,uint256)", +"86ce9835": "transferMoney(address)", +"86cef432": "CONTRIB_PERIOD3_STAKE()", +"86cf1e39": "GetherCoin()", +"86d01727": "setPendingTaxParameters(address,uint256)", +"86d08447": "getTestThree()", +"86d0b46d": "foundersTokensPercent()", +"86d0b48c": "round3Sold()", +"86d12325": "preSaleDistributionContract()", +"86d1a69f": "release()", +"86d23143": "getLastAcceptedProposal(bytes32)", +"86d263fe": "MarketCollateralPool(address)", +"86d2ee85": "HOLDING_START()", +"86d2fe57": "privateSaleStartDate()", +"86d35ed9": "getCrypton(uint256)", +"86d3a2b8": "setContributorCap(uint256)", +"86d3cf0d": "crazyearners(uint256)", +"86d3f4b7": "ethRateURL()", +"86d4c423": "UBTC()", +"86d4ebf7": "test_BasicThrow()", +"86d4fe9c": "viewTokensRemaining()", +"86d4ff1d": "canSell(address)", +"86d518bf": "grantAccessMint(address)", +"86d53469": "sendPreSaleETH()", +"86d54fe1": "EtherFundMeCrowdfunding(string,string,string,uint256,uint256,uint256,address,address)", +"86d59996": "deleteValidationData()", +"86d5c5f9": "getPassportLogicRegistry()", +"86d5e9a6": "setTokenNameSymbol(string,string)", +"86d6c8a0": "getTankProduct(uint32)", +"86d6c9d1": "canHolderTransfer()", +"86d74037": "distributeToken(address)", +"86d8aab4": "cancelMultipleOrders(address[3][],uint256[3][],uint8[],bytes32[],bytes32[])", +"86d922a9": "lastCallTime(address)", +"86d9b0c5": "make(address,uint256,bool)", +"86da69f0": "gamble()", +"86dbfa98": "DINTToken()", +"86dc88ff": "addMadeTX(address,uint256,uint256,uint256,uint256)", +"86dc8ace": "pendingVestingPool()", +"86dcbefc": "test_registerWithoutCertification()", +"86dd03bd": "setRedeemLevel(uint256)", +"86dd5e03": "setBossRoundNumber(uint256)", +"86de99dd": "SetStatus(uint256,uint256)", +"86def3b9": "getDukeDate(string)", +"86df3d5b": "getCreateOrderMinGasNeeded()", +"86e1e589": "NamiAddr()", +"86e261c9": "updateSecondAmount(bytes32,bytes32,uint256)", +"86e2c40c": "removeAffiliate(uint256)", +"86e3060d": "nextFlexibleReward()", +"86e32cb5": "setSpecialFeePercent(address,uint256)", +"86e32ed0": "setAllowedContract(address)", +"86e36ce2": "speechOfOwner(address)", +"86e37ae7": "tokensForFight()", +"86e399c1": "priceDivisor(uint256)", +"86e476dd": "communityAddress()", +"86e49407": "setFeeUnit(uint256)", +"86e4993c": "issue(uint256,uint256,address[],uint256[])", +"86e4a33e": "countBtcAddressLeadingOnes(bytes,uint256)", +"86e4e178": "CheckTickets(address,uint256,uint256)", +"86e58bef": "del_user(bytes32,bytes32)", +"86e58c0c": "getGalleassTokens(address,bytes32,uint256)", +"86e5ceb4": "previousRoundJackpot()", +"86e6361e": "setSellInfo(uint8,uint256,uint256)", +"86e6eee1": "INEX_Token()", +"86e8c57a": "secondroundprice()", +"86e92957": "lastDecimal(uint256)", +"86e97442": "mora(uint8)", +"86e99bdb": "XTOToken()", +"86eb23ca": "getOrganizerSymbol(uint256)", +"86eb3899": "lockPeriodForBuyers()", +"86ec6177": "endEvent()", +"86ec8f62": "validateTokenProperties(uint256)", +"86ecce90": "test_5_assertGasUsage1400Boards()", +"86ed60e9": "getSpawned(uint32,int256)", +"86ee8f01": "masterAddress1()", +"86ef1be2": "getRegistered(uint256,uint256)", +"86efb94e": "addressHistoryOf(uint256)", +"86f10e8b": "divForEthertoteLiquidatorWallet()", +"86f1865d": "_bcto(uint256,uint256,uint256,uint256,address)", +"86f19dde": "phase6Price()", +"86f1f2d4": "mintDigitalArt(string)", +"86f254bf": "minConversionRate()", +"86f28fe3": "token_member_order(address,address,uint256)", +"86f2907a": "doesEventExist(bytes32)", +"86f2e5cf": "_setHairColorValue7(uint256)", +"86f32586": "checkIfFundingCompleteOrExpired()", +"86f328a9": "episodes(uint256)", +"86f35b7c": "FeeCalculation()", +"86f3c026": "UpdateMoney(address)", +"86f3d0cd": "limitedDeposit()", +"86f5114e": "voteName()", +"86f5bf88": "interestPermil()", +"86f6e410": "adminIsAdmin()", +"86f7313d": "ico_enddate()", +"86f7993e": "acceptCooOwnership()", +"86f79edb": "getMessage(uint256)", +"86f822fa": "DunkPayToken()", +"86f876e2": "hyperEnable(address,bool)", +"86f8950a": "getUnclaimedBalance(address)", +"86f8bce9": "tixFundDeposit()", +"86f8e4ef": "mintFinalize(address,uint256)", +"86fa0671": "tokenShareShow(address)", +"86fa18df": "throwsWhenTransferingFundsDuringSale()", +"86fb8715": "ArbitratedBuyDeposit(address,string)", +"86fbb494": "DigixbotConfiguration()", +"86fbeb8c": "investors(uint16)", +"86ffe00f": "preSaleMaxTokens()", +"87000d42": "clearBetMap()", +"8700522a": "setLandProductionMultiplierCCUser(bytes32,address)", +"8700ceb2": "sellCertainOrder(uint256,uint256,uint256)", +"87011092": "refundContributor()", +"8701a2f0": "finishBet()", +"8702735c": "setCapitol(uint256,uint256)", +"8703b7d8": "setPOOL_edit_4(string)", +"8703e506": "stage4Bonus()", +"87040a86": "AddHOLDer(address)", +"87045369": "setCanCall(address,address,bytes4,bool)", +"870488f9": "sendTokensToInvestors(address,uint256)", +"8704c6ac": "MAXIMUM_CONTRIBUTION_LIMITED_PERIOD_USD()", +"87055008": "euroLock()", +"8705ae63": "migrationChain(uint256)", +"8705f218": "RemoveOwnerAddress(address,address)", +"8705fcd4": "setFeeAddress(address)", +"87067595": "MagicToken(uint256,string,string)", +"8706ab57": "setE4RowPartner(address)", +"8706b052": "PGD()", +"8707ee3e": "formatDate(uint256)", +"8708b5b2": "sourcePrice()", +"870911ff": "onExchangeTokenToEther(address,uint256,uint256)", +"87092940": "calculateInterest(address,address)", +"8709bece": "availablePrivateICO()", +"870b399a": "LOCKUP_6M_ICO_TIMESTAMP()", +"870b8b94": "hasFiveYearWithdraw()", +"870baf84": "sendToGiveth()", +"870bb8c2": "CROWD_WEEK1_PERIOD()", +"870bfc75": "lockMultis()", +"870c426d": "getUniverse()", +"870c8079": "getGovernmentAddress()", +"870dbae0": "TOTAL_MAX_CAP()", +"870e5405": "insert(bytes32,bytes32,int256)", +"870f0e27": "developmentLockEndTime()", +"870f892d": "getGTOAddress()", +"8710296f": "totalEarlyPurchaseRaised()", +"871105cc": "setVaultContractAddress(address)", +"871113c3": "oraclize_query(string,string[1],uint256)", +"87113b88": "managerListMap(uint256)", +"87114b8c": "versionInfo(uint256)", +"87115a9d": "setRemainingHealthAndMana(uint256,uint32,uint32)", +"8711e4a9": "lockTimeout()", +"8712523e": "lastTransferBlock(address)", +"87127f85": "ZeonToken()", +"8712c1c5": "freeTotal()", +"87136940": "tokenRateInUsdCents()", +"871388c9": "SetGene(uint256,bool,uint64)", +"8713d931": "BONUS_100_250()", +"8714b028": "offers(uint256,uint256,uint256)", +"8715d65d": "TierWildcatDividendAddress(address)", +"87161e59": "commandGetBonus()", +"871625e2": "retraitStandard_2()", +"871745aa": "presaleAddTree(address,address)", +"87174c3e": "refundManager()", +"87178668": "RATE_DAY_14()", +"8717ef27": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"87182d47": "totalSecondICOSupply()", +"87191e41": "isWhalePaying()", +"87195d23": "getInstallments(bytes32)", +"87196863": "_lower(bytes1)", +"8719715e": "walletAvatar()", +"8719e8ac": "setStatus(uint256,bool)", +"871b4e3c": "getCardBuyAuction(uint256)", +"871c7aab": "total_freeze_term()", +"871caa98": "dataOf(uint256)", +"871cc9d4": "decrementNumber()", +"871ced4a": "HeartBoutToken()", +"871cf692": "pullEtherFromContractAfterPreICOPrivate()", +"871d3eab": "addExtraDays(uint256)", +"871da475": "GetSellPrice()", +"871e0155": "pushNodeGroup(uint256,uint16)", +"871e5fac": "contributorsCurrentPeriod()", +"871fe6e1": "_validateHardCap(uint256)", +"872053e6": "releaseThisBonuses()", +"8720bb42": "liantoken()", +"87210f63": "tokenMainSale()", +"87214728": "contractIsCanceled(string)", +"8721db89": "requireKyc(address[])", +"8722860e": "isThereAnOnGoingProposal()", +"8722a57c": "forwarderOf(address)", +"8722d4d9": "enforceAddressMatch()", +"8723202e": "NewSmartSharingContract(string,uint256,uint256,string,string,string)", +"8723c377": "shiftOut(bytes,uint256)", +"8724025e": "AENIGMAZ()", +"8724e751": "Panax()", +"87250a35": "getSkull(uint256)", +"872519cd": "VerifyAccount(address,bool)", +"872539e7": "numberOfLeafs()", +"872588ba": "lock(bytes32,bytes32,bytes32)", +"8725d6be": "createToken(uint256,uint256,uint256,address,uint8)", +"872628e8": "setPriceStep2(uint256)", +"8726baf7": "unapproveArtist(address)", +"87275aba": "preMinting(uint256,uint256,uint256,uint256)", +"8727b7fc": "calculateAmountBonus(uint256)", +"87280324": "callMe(bytes32)", +"87281fab": "VestingReleased(uint256)", +"87283f0f": "ActivationRequest(address,bytes32)", +"87287fd7": "setMinFee(uint8)", +"872887c2": "getPeriodStartTimestamp(uint256)", +"87297093": "previousWithdrawal()", +"8729fff4": "buyCommission()", +"872a4e32": "change_min_price(uint256)", +"872a7810": "revocable()", +"872b31b6": "_removeStakeholder(address)", +"872bac57": "UpdateEmployee(address,uint32,uint32,uint16)", +"872bc83a": "GCCExchangeCore()", +"872d637f": "DivvyUp(bytes32,bytes32,uint8,uint8,uint256,uint256,uint256,address)", +"872dbdab": "advert_machine()", +"872dd49b": "getMigrateOutAttoTokens()", +"872dd84b": "priceBeforeGoalReached()", +"872f2526": "getGuestOrders(address,address)", +"872f5459": "toUINT120(uint256)", +"872fe620": "withdrawByResque()", +"87319e1e": "changeContractRegisterOwner(string,string,string,string,address)", +"8731a8d9": "deposit(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256,string)", +"8731cce5": "PledgePaymentCanceled(uint256)", +"87324ef0": "ecrecover2(bytes32,uint8,bytes32,bytes32)", +"8732d065": "ignoreKYCLockup()", +"87330b85": "getString1()", +"87336473": "unblockTransfer()", +"87338e98": "jackPotBestHash()", +"8733d130": "ownerManualMinter()", +"8733d4e8": "identityOwner(address)", +"8733f360": "initialize(address,address,uint256,uint256,address,address,address,address,address,address,uint256)", +"8734ffc9": "authorizedETH(address)", +"87355084": "transferCrowdsale(address,uint256)", +"8736381a": "contractCount()", +"87369c4b": "BOUNTY_EXCHANGE_SHARE()", +"87369e04": "refundTransactions(uint256)", +"8736fd16": "getRefStatus(uint256)", +"87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", +"8739cacf": "getJobRating(address,uint256)", +"8739f930": "queryGameHistoryLength()", +"873a2878": "acceptWork(uint256)", +"873a5690": "VikkyToken()", +"873ab2ce": "computeFeeRate(address)", +"873b3009": "getKeyRevisionNumber(uint32,int256)", +"873bdee0": "systemWithdraw(address,uint64)", +"873c56d7": "officialLimit()", +"873cb0ab": "redeemedKarmaOf(string)", +"873cdb03": "Litas()", +"873db84c": "queryN_fnc()", +"873dc3b3": "bountyOnlineGW()", +"873dc71d": "getCycleInfo()", +"873ebe6a": "collect(address[],uint256[])", +"873f610c": "Contractors(uint256)", +"873f9a6a": "registerDIN(address)", +"873fd089": "isStaker(uint256,address)", +"87407993": "inQuitLock(address)", +"8740b73d": "EthereumGoldPro()", +"87412a4b": "TeamAndPartnerTokensAllocated(address,address)", +"8741ab49": "setupCompleteFlag()", +"8741f15e": "tileBalance()", +"874252ef": "giveProgectTokens(address,uint256)", +"8742792f": "changeNameByEveryone(string)", +"8742fc3b": "getVoteResult()", +"8744e974": "CallOption(address,uint256,uint256,uint256,uint256,uint256)", +"87451d52": "addQuickPromoBonus()", +"8745ddb3": "jailAmountOf(address)", +"8746656f": "extendDuration(uint256)", +"874752b4": "SpiceMembers()", +"8747a674": "getWrapperBalance()", +"8747f9b1": "resultReject()", +"8748ecda": "Dynamic1_5x(uint256)", +"87491c60": "closeMinting()", +"874a7036": "placeNotes(uint256[],uint256[],uint256)", +"874b4fcc": "setSigningPublicKey(string)", +"874b953a": "changePrimaryApprovedWallet(address)", +"874d6d81": "getWeek()", +"874d73a7": "addLottery(string,uint32,uint32,uint32,uint32,uint32,uint32)", +"874f33a1": "doStuff()", +"874f874c": "reminderCalc(uint256,uint256)", +"874f8ef6": "getAdv(uint256,uint256)", +"874fe370": "finalizeTS()", +"874ff7ed": "YOYOW(address)", +"8750367e": "FundRequestPublicSeed(uint256,uint256,address)", +"8750c2d7": "priceInTokens()", +"8751775b": "cancelRewardsWithdrawal()", +"87521056": "createMineForToken(uint256,uint256,uint256,uint256)", +"87524581": "accounts(address,uint256)", +"87526b0a": "totalPendingPayments()", +"87528d5e": "setInitAttr(address[],uint256,uint256)", +"87529f0f": "getTeam(address)", +"8752cff2": "isUserExisted(address)", +"8753b16e": "requestOwnership(address)", +"87541c9e": "setLLV_edit_3(string)", +"87543ef6": "upgradeController()", +"87548fcf": "getTracks()", +"8754b1d1": "createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"8754b29c": "buyCore(address,address,uint256)", +"87551db0": "getChecksum(string,string,string)", +"8755b065": "initialTransfers(address[],uint256[])", +"875606a1": "freezeTransfer()", +"8756f3e7": "LogErrorMsg(uint256,string)", +"8757a2cd": "test_depth(uint256,uint256)", +"8757d620": "firstBuy(string)", +"87585707": "buyVouchers()", +"87586b32": "getPI_edit_2()", +"8758ba8f": "approveForGeneLab(uint256)", +"875991eb": "dealLog(uint256[2],bytes32,bytes32,uint8)", +"875999e0": "getLastKeyTime()", +"8759afc9": "_initStages()", +"8759c2f1": "getHappinessCitizens(uint256)", +"8759d1c3": "sendReceivedTokens(address,address,uint256)", +"875a8dfc": "post(address,string)", +"875ac8f1": "PAYOUT_DATE()", +"875ad967": "DopeRaiderCore()", +"875c330c": "LogPush(address,uint128,string)", +"875c7143": "setSecondYearAllowancePercentage(uint8)", +"875cb3e5": "closeSuccess()", +"875dc0ee": "changePaymentDestination(address)", +"875de431": "phaseOneBonusPercent()", +"875e7bb4": "FactoringChain(address)", +"875ea5e7": "dividend(uint256)", +"875ed7ae": "unitEquippedItems(address,uint256)", +"875f0671": "crowdsaleStatus()", +"875f71a3": "ETHDistributor()", +"875fde3d": "createErc20Token(string,string,uint256,uint256)", +"876012fc": "composeJingle(string,uint32[5],uint8[20])", +"87609d1a": "__price()", +"8760b171": "getBPhashFromBPTokenId(address,uint256)", +"87612102": "loadRefund()", +"87615cb2": "enableRegulator(address,string)", +"8761fb7c": "escrowAdmin()", +"87627869": "setCopaMarketAddress(address)", +"8762d50b": "_xx()", +"87630a2e": "activateContract(address,address)", +"876339b8": "_sellPutToOpen(uint256,uint256,uint256,uint256,address)", +"8764159e": "findContractByModName(string,string)", +"8764edd0": "VerificationAccountOnJullar()", +"876588b8": "Apply_Store_Id_Fee()", +"876590c3": "setTeamPrice(uint256[],uint256[],uint256)", +"876777d0": "TTCoin()", +"87679684": "checkProof(bytes,uint256,bytes,bytes)", +"876848d3": "valid(uint80)", +"876911ca": "ArrAccountIsFrozen(uint256)", +"8769817a": "CROWD_WEEK1_BONUS()", +"87699aa6": "TOKENMOM()", +"8769bc7e": "currentSpiderOwner()", +"8769beea": "openESOP(uint32,bytes)", +"8769c281": "allowRefunds(bool)", +"8769c28c": "bogotacoin()", +"876b0946": "NucleusVisionToken()", +"876b0a95": "getDiceWinAmount(uint256,uint256,bool,bool)", +"876b1566": "getTokenHolders()", +"876ba3cd": "transferModeratorship(address)", +"876cf0ef": "getCrystals(address)", +"876da006": "TOKECOIN()", +"876e79f6": "targetDiscountValue7()", +"876ee240": "EthWuxia()", +"876f1c27": "replaceAnimal(uint16)", +"876f20b1": "crownSymbol()", +"876f5746": "ShitcoinCash()", +"876f9795": "mineSalary(uint256)", +"877046a2": "CGCCoin()", +"87708311": "OBEFAC(address)", +"87717cb1": "_hackoinToken()", +"8772a23a": "configured()", +"8772ae3c": "setMinimumBet(uint256)", +"87730ed7": "allocateFundsBulk(address[],uint256[])", +"87734d53": "getBet(address,uint256,uint256)", +"8773c0d0": "buySoul(address)", +"8774e5d0": "setPriceInWei(uint256)", +"87757835": "Ducker()", +"8775a557": "DadaCollectible()", +"877653f0": "_storeBalanceRecord(address)", +"8778205d": "TransferDisable(uint256)", +"8778c090": "arrayOfNonTrivialAccounts()", +"87793dc7": "invokeOnceFor(address)", +"877aaf4f": "tosToken()", +"877af5b4": "subFundAccount()", +"877b9a67": "isIssuer(address)", +"877c2184": "getIntValue(string)", +"877c3650": "getproductprices()", +"877c4f6e": "submitPeriod(uint256,bytes32,bytes32)", +"877cedb8": "Lockup12m(address)", +"877d481c": "startStage3()", +"877ddd77": "commission_ratio()", +"877f5618": "isAllowClaimBeforeFinalization()", +"87800ce2": "MD5FromMarketingKeywords(string)", +"87801cc3": "setNextRoundDonation(uint256)", +"87804708": "_validate()", +"8781249f": "getCntByRarity(uint8)", +"8781382e": "WBU()", +"878170d1": "fetchValue()", +"878314c9": "crowdsale_eth_fund()", +"878377e7": "RAM_Token()", +"8783bf1a": "EGGS_TO_HATCH_1DRAGON()", +"8783d407": "feeReplyThread()", +"87848727": "writedb(string,string,string)", +"8784ea96": "getCommit(bytes32)", +"87864af8": "UNFREEZE_TEAM_BOUNTY()", +"87873b6d": "MoneyTreeToken()", +"87874e02": "getNextAvailableLevel()", +"87877e4d": "setSponsor(string)", +"8787c9ff": "approveCertificate(address,address)", +"8787f75d": "Kodobit()", +"878808af": "tokensSoldGoal()", +"87881ede": "getStackholderConfirmations(uint256)", +"8789dfbf": "instContAllocatedTokens()", +"878a18ef": "tokensSentDev()", +"878c1484": "cause()", +"878d4204": "testInitialCrowdsale()", +"878d5ff7": "partnerInfo(address,address)", +"878de0ae": "userEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", +"878e10e4": "SEHR_WALLET_ADDRESS()", +"878e8827": "getActionParameterByIndexes(uint256,uint256)", +"878eb368": "cancelAuctionWhenPaused(uint256)", +"878eb4ca": "serviceDeposit()", +"878edb66": "getVotesByPollingStation(address)", +"878ef7fe": "RealMadrid()", +"878fb316": "btycsell(uint256)", +"87902997": "acceptAndAdditionals(bytes32,uint256[])", +"87903097": "timeoutPlayer(uint256,address,uint256,uint8)", +"879125a4": "setMaximumRate(uint256)", +"87914c6f": "prolongateContract()", +"879206a2": "lastPayerOverflow()", +"87924815": "ownerAddressSize()", +"87925132": "PandaCore()", +"879281c4": "login(bytes32)", +"87932e0f": "setAddress(bytes32,address,address)", +"87934ec8": "skinCreatedLimit()", +"8793ae52": "getCurrentDaoStakeSupply()", +"87943859": "getRefBonus()", +"879499f4": "newUriBase(string)", +"87950f49": "setDistributorAddress(address)", +"879611bb": "removeGlobalConstraintPost(int256,address,int256,address)", +"879647e2": "getindex()", +"8796a7ba": "totalPrivateSaleStage()", +"8796d43d": "activeToken()", +"8796ec86": "getDocumentHash(uint256)", +"879736b2": "swapValidatorKey(address,address)", +"87982928": "launchPeerWallet(address[],address[],uint256[])", +"879844b9": "crowdsaleAddressSet()", +"87986f52": "getOrderSupportCancel()", +"879a2d2a": "getApplication(address)", +"879a6f7a": "recoverWarriors(uint256[],address[])", +"879a83fc": "LogWithdraw(uint256)", +"879abc11": "applyRuntimeUpdate(address,address,uint256,uint256)", +"879b18b6": "getMemberCanVote(address)", +"879bfa27": "Investors()", +"879ce676": "withinExecutionLimit(uint256)", +"879cffdf": "TokenBuy(address,uint256,uint256,string)", +"879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", +"879e4b1a": "empty(bytes32)", +"879e84ab": "minChequeValue()", +"879f30ad": "burnSent(uint256)", +"879f4dfe": "_getCampaign(bytes32)", +"879f9c96": "purchased()", +"87a01164": "teamTransferFreeze()", +"87a04b67": "KUYOOToken()", +"87a07692": "setWinner(string,uint8)", +"87a07adb": "getSharedAccounByIndex(uint256)", +"87a09877": "AdvisorGPX(address[],uint256)", +"87a16f12": "addScriptExecutor(address)", +"87a2a9d6": "_MAXIMUM_TARGET()", +"87a2afb3": "releaseBets()", +"87a378fb": "holdSubscription(uint256)", +"87a3903e": "buy(uint16,uint16,uint16,uint16)", +"87a3be75": "init(address,uint256[],address[])", +"87a3e445": "icoBonus4()", +"87a407a1": "setBurner(address,address,bool)", +"87a675ca": "DataContacts(address,address,address)", +"87a767e3": "removeCA(address,address)", +"87a796a1": "_fetchCancelledOrdersForPayer(address)", +"87a846a5": "getBonus(uint256,uint256,uint256)", +"87a88c43": "iDistribution()", +"87a91506": "PlayChainPromo()", +"87a97752": "setInitialEnemyCombination(uint32[4])", +"87a9a8ef": "totalSupplyAtCheckpoint()", +"87a9be0d": "BitSelectArrojado()", +"87a9c6c5": "buyAndTopup(address)", +"87aa14d2": "freezeEventOutcome(uint256,uint256)", +"87aa2bf9": "rmul(uint128,uint128)", +"87ab42b3": "MysteriumTokenDistribution()", +"87ab8403": "transferScoreToAnother(uint256,address,address,uint256)", +"87adab57": "VISTAcoin()", +"87ae00a3": "ZebiMainCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address,uint256,uint256,uint256,uint256,int256,uint256)", +"87ae0dbe": "yearSeconds()", +"87af74ab": "calculateNumberOfNeighbours(uint256,address,address)", +"87afe179": "getTotalTicketSetsForRound(address,uint256)", +"87b01dc9": "setSale(uint256,bool,uint256)", +"87b0be48": "releaseTokens(address)", +"87b0d60c": "sumICO1()", +"87b15c0b": "periodITO_wei()", +"87b234ec": "createReferralGiveAways(uint256,uint256,address)", +"87b261ad": "coeff()", +"87b2fe7f": "luckynum()", +"87b30845": "exchangeDIDForEther(uint256)", +"87b3be7d": "Ring()", +"87b47e4f": "transSupply()", +"87b4e60a": "newTokens()", +"87b547e5": "balanceOfDirectoryToken(uint256)", +"87b551b5": "tokenPayout()", +"87b55705": "mintingThreshold()", +"87b57fa7": "GetMinerRigsCount(address,uint256)", +"87b5914c": "exchangeRateETHToUSD()", +"87b5c21f": "OCTWasteToEnergyJV()", +"87b5f114": "xpTokenAddress()", +"87b73795": "verifyKYC(address,address)", +"87b751ae": "TokenTrader(address,uint256,uint256,uint256,bool,bool)", +"87b7a068": "updatesAreAllowed()", +"87b8963c": "badgeDecimals()", +"87b9a544": "DataController(address)", +"87b9e310": "nominPool()", +"87ba67be": "nextLevelPercent()", +"87ba67dd": "Arascacoin()", +"87bab806": "getNumOrganizers()", +"87bb25b5": "UndermineComponent(uint256,address,uint256)", +"87bb675c": "indexTracker()", +"87bb6aa6": "_revealBid(bytes32,address,uint256,address,address,bytes32,uint256,uint256)", +"87bb7ae0": "getTicketPrice()", +"87bc0fc6": "TokenAirdrop(address,uint256)", +"87bc6906": "BitGuildTrade()", +"87bd499b": "lastLevelChangeBlock()", +"87be727b": "getSum(uint16)", +"87bea35f": "getCreatePrice(uint16,uint256)", +"87bf26b9": "GetGrade(uint256)", +"87bf740b": "YYToken(uint256,string,uint8,string)", +"87bfce9e": "claimedYesterday()", +"87c00626": "calcTokensToEthers(uint256)", +"87c05510": "setNewlockAccount(address,uint256,uint256)", +"87c19bcb": "votelog(bool,address,uint256)", +"87c1be6e": "globalPause(bool)", +"87c1ed12": "transferToOwner(uint256)", +"87c23143": "totalEthBankrollCollected()", +"87c2ee62": "secondStageEndsAt()", +"87c38114": "Emojicoin()", +"87c4aaea": "totalTokenVested()", +"87c50df5": "erectBarrier(uint16,uint8,uint8)", +"87c55589": "blockTube(uint256,string,uint8,string)", +"87c5d1be": "LEDTEAM_TOKENS()", +"87c60d89": "getAllSubcontracts()", +"87c70d21": "expressReloadNums(uint256,uint256,uint256[])", +"87c79d1d": "getColors()", +"87c84933": "LogParticipation(address,uint256)", +"87c86277": "setPetName(string,uint64)", +"87c8ab7a": "changeAllowance(address,address,uint256)", +"87c95058": "setAdministrator(address,bool)", +"87cb15f7": "move(uint256)", +"87cc1e1c": "setExporterBank()", +"87ccb440": "getReg2()", +"87ccb57b": "testExecuteSellOrderShouldNotChangeBuyerBalance()", +"87ccccb3": "PublicMine()", +"87ccd8b3": "_isComplete(uint256)", +"87cef144": "updateVIPs(address)", +"87ceff09": "getBlockTime()", +"87cf34cf": "getUserContributionReclaimStatus(address)", +"87cf7768": "walletG()", +"87cfc1d8": "disableAgency(address)", +"87d14a36": "MaxPlayers()", +"87d25299": "tessrX()", +"87d2544d": "CMOSignature()", +"87d3525f": "CancelSimpleOffer_internal(uint256,bool)", +"87d36176": "False()", +"87d3764b": "ROLE_LEVEL_PROVIDER()", +"87d3a184": "makeZero(uint256)", +"87d4ca93": "escrowFrom(address,address,uint256)", +"87d517c9": "fetchInitialDetails(string)", +"87d5418f": "aSetEnd(uint256)", +"87d570c0": "OHGRiverResort()", +"87d5c6b8": "rentalElapsedTime()", +"87d67208": "changeIcoStartBlock(uint256)", +"87d741c9": "getPaidETHBack()", +"87d76f09": "calculateEstimateToken(uint256)", +"87d79f8a": "buyIceDrangon()", +"87d7d24d": "ownerconfirm()", +"87d803a3": "setResult(uint8,uint8,int8)", +"87d81789": "payments(uint256)", +"87d87090": "setMinRefEthPurchase(uint256)", +"87d9d224": "TokenDistribution(uint256,uint256,uint256,int256)", +"87da18ee": "getRankPriceEth(uint256)", +"87da3208": "CollateralToken(string,string,uint256,uint8)", +"87da9cad": "ApprovalToken(address,address,uint256)", +"87db03b7": "add(int256)", +"87dba600": "_set6()", +"87dc0c55": "getAuctionEnd()", +"87dcd2b6": "superOwner()", +"87dcfd2d": "numTokensLeft()", +"87dd1908": "_voteAndContinue()", +"87ddc521": "rewardController(address,bytes5)", +"87dde4ad": "get_candidate(uint8)", +"87ddf6cd": "setAddressArrayIndex(bytes32,uint256,address)", +"87def081": "getFeeRecipient(int256)", +"87df4838": "CancelSell(uint256)", +"87dfc909": "queryMap(uint8,int256[],int256[])", +"87e06546": "PLATINUM_AMOUNT_XPER()", +"87e0f794": "TwistoToken()", +"87e1029a": "newStar(uint8,uint8,uint256)", +"87e12235": "_filiate()", +"87e19cc5": "EBETCrowdsale()", +"87e25e0e": "deleteCertificator(address)", +"87e412f4": "SecurityDeposit(address)", +"87e42622": "KONSTANTOR()", +"87e44935": "IDOToken()", +"87e46baf": "transferVoxel(address,uint8,uint8,uint8)", +"87e4e64d": "getBalanceMy()", +"87e6835f": "tokensDrukker(address,uint256)", +"87e70933": "VoteMusic(uint256,address)", +"87e7dc5f": "ICOStarted(uint256,uint256,uint256,uint256,uint256)", +"87e854d3": "addRate(address,uint8)", +"87e89845": "getBabyMommas(uint256)", +"87e8a980": "godChangeGod(address)", +"87e97e82": "AuctionStarted(bytes32,uint256)", +"87ea8581": "setTemp(uint40)", +"87ea8893": "PGGameToken()", +"87ea9d52": "INK()", +"87eba3c7": "GetBuyingTokenAddress()", +"87ebd76c": "initContract(string,string,uint256,uint256)", +"87ecaf0d": "check2(uint256,uint256)", +"87ed1bd0": "grantAccess(address,uint8)", +"87ed5112": "setApoderadoVerify(bytes32)", +"87ed90ba": "securityWallet()", +"87edb2f5": "decode(bytes,uint256,uint256,uint256,uint256,uint256)", +"87ede474": "MicinRasaJamur()", +"87eeddf8": "confirmAndExecuteWithdrawal()", +"87efeeb6": "singularDTVToken()", +"87f06ec0": "getForkDurationSeconds()", +"87f0b8c5": "getStrong(address)", +"87f0bf31": "addResources(address[],bytes4[])", +"87f0fae9": "setKingdomFactory()", +"87f162c8": "initialEBETSupply()", +"87f1e7f3": "c_softCapUsd()", +"87f24484": "hashPass()", +"87f29fdd": "removeDiscountPhase(uint256)", +"87f3e5d6": "contributorsOfCauldron(uint8)", +"87f404cd": "getContractRhemBalance()", +"87f40ba4": "supplyReserveVal()", +"87f503fd": "DEV_TEAM()", +"87f51ac2": "athToken()", +"87f5c846": "ethBalanceOfNoFee(address)", +"87f6be15": "houseCredits(address)", +"87f74e7c": "updCouponBonusConsumed(string,bool)", +"87f7cab9": "removePerson(bytes32)", +"87f7e2a1": "getTeamCost(uint256)", +"87f9534b": "getLinkedIn()", +"87fc00f7": "setTPTContractAddress(address)", +"87fcd708": "StartICO(uint256)", +"87fcdbc1": "updateConversionRate(uint256)", +"87fd0421": "TheEthereumLottery()", +"87fdc401": "make(address,uint256,bytes)", +"87feba8f": "getInstallmentDuration(uint256)", +"87fef15b": "purchase(bytes32,bytes32,bytes32)", +"87ffe5a7": "dataSourceGetRedCards()", +"8800052e": "preSaleTokensLeftForSale()", +"88016da5": "allocateFrom(address,address,uint256)", +"88017e05": "setContribution(uint256)", +"8801b4fc": "paused_()", +"8801c928": "createJob(bytes32,uint256)", +"88026706": "Template()", +"88034bc5": "CreateTIX(address,uint256)", +"88037e1c": "view_get_gameData()", +"88046818": "getFeeSharingWallets()", +"8804863f": "payWithToken(uint256,address,address)", +"8804d119": "sendNextRewardTo(address)", +"88053eef": "RebuyInformEvent(address,uint256)", +"88054039": "NordstromOnlineRetailDigitalCoin()", +"880613ee": "getMadeTXCount()", +"88064637": "registerAssetDetail(int256,string,string,string,string,string,string,int256)", +"88064b07": "setNextLotteryTTMTokenId10(uint64)", +"88065236": "approvedAmount(uint256,address)", +"88072700": "itemIndexToApproved(uint256)", +"8807592c": "_calculateCommission(uint256)", +"88077b51": "setPrivateFundEnd(uint16,uint8,uint8,uint8,uint8,uint8)", +"8807a110": "isCrowdsaleClosed()", +"8807a468": "getOrgByIndex(string,uint256)", +"8807f36e": "lastInitializedRound()", +"88088a54": "getTransformState()", +"8808f3d0": "canPledge(uint256,uint256)", +"8809540d": "globalReinitialization()", +"8809716c": "setDungeonDifficulty(uint256)", +"880a0664": "getRoundFinish(uint32)", +"880ad0af": "transferOwnership()", +"880ade5b": "foundNewGamblingParty(uint256,uint256,uint256,uint256,uint256,uint256)", +"880b36e7": "getLastCaller()", +"880b844f": "getRoundWeight(uint256,uint256)", +"880c0b9d": "lpAskPrice()", +"880c5f3d": "EtherBTC()", +"880c7864": "ResearchGroupAddr()", +"880cab29": "Founder2()", +"880cdc31": "updateOwner(address)", +"880cfc2f": "deposite(address,uint256)", +"880dc4e6": "isWithdrawEnabled()", +"880e73a3": "OTA()", +"880e87ed": "setUnlimitedMode(bool,address)", +"880ead7e": "returnOtherCrypto(address)", +"880fc14c": "inRate()", +"88102583": "safeCastSigned(uint256)", +"881056ba": "GMR_TOKEN_SALE_CAP()", +"8810ac6c": "BuyCarFailed(address,uint256,uint256)", +"8810c990": "sha3(string)", +"88116d13": "checkReferalLink(uint256)", +"8811a0ae": "addressCount(address)", +"8811e191": "setDebugMode(bool)", +"8812e897": "getCurrentBonus(address)", +"8812ec52": "adviserWallet()", +"8813304b": "forwardOnBehalfWithRevert(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"881362b4": "changeUserInfo(bytes32)", +"881461be": "burnAddress(address)", +"88149fb9": "beginTime()", +"8814fa3f": "Log0(string)", +"88157942": "icoStartP3()", +"8815ee86": "purchaserList(uint256)", +"8815f3d3": "judgement(bool)", +"8817a198": "priceToBuyInFinney()", +"8817ecde": "_getPeriodFor(uint256)", +"88180ff6": "underwrite(address,uint256)", +"88185aad": "airDropTokens(address[],uint256)", +"8819dd8e": "getCurrentPeriodKey()", +"881abe3e": "addProposalVote(uint256,address)", +"881adeaa": "abioToken()", +"881b2666": "xTokenPercent_()", +"881be8f7": "undo()", +"881c255e": "updateStageBySaled()", +"881cfeb6": "addInternal(address,address)", +"881d3bd0": "LongBought(address[2],uint256[3],uint8,bytes32[3],uint256)", +"881dac8e": "ECHO()", +"881ed6db": "lockStart()", +"881eeaa5": "createEstateWithMetadata(int256[],int256[],address,string)", +"881eff1e": "setMaxBet(uint256)", +"881fae6c": "endSTO()", +"881fcab3": "getShipProductCurrentPriceByModel(uint16)", +"881fcefc": "updateEnabled(string)", +"881fd690": "isSecondStageTokensMinted()", +"881fe0ce": "ZealconToken()", +"881fe258": "_emitRecord(bytes32,uint256,uint256,uint256)", +"88203417": "AthleteTestToken()", +"8820401a": "_tokenPurchase(uint256)", +"8820e2d6": "newVote(address,string,uint256,uint256,uint256,uint256)", +"8820f6bd": "economy()", +"8821bb43": "change_owned(address)", +"8822048e": "isTransferAllowed(address)", +"8823a9c0": "changeFeeTake(uint256)", +"8823da6c": "removeAccess(address)", +"88254efa": "hideSubcategory(uint256)", +"88257016": "getNthBallot(bytes32,uint256)", +"882645fe": "preICObonusMultipiersInPercent(uint256)", +"8826ce84": "uint8ToString(uint256)", +"8826db7a": "getNextPoliceAssignment(address)", +"8826fa2e": "setStakedBalances(uint256,address)", +"88275b68": "mintLockupTokens(address,uint256,uint256)", +"88279320": "prizeValue()", +"8827a985": "durationPhaseIndex()", +"8829a5a7": "transferAndWriteUrl(address,uint256,string)", +"882a1dee": "KrisTest()", +"882a1fa0": "getDivCard(uint256)", +"882b4e68": "User_2()", +"882bc3e1": "RemoveAllConsentDirectives()", +"882d851c": "tokenMinus(address,address,uint256)", +"882dd41e": "updateTokenBalance(uint256)", +"882e2606": "icoEndLine()", +"882e9709": "record(string,string,string,bool,string,string,string)", +"882ee532": "getBylawsMilestoneMaxPostponing()", +"882f327b": "addLock(address)", +"882f3e16": "forceWithdraw(address)", +"882f7e83": "changeRigoblockAddress(address)", +"88301f57": "subDevOne()", +"88308ca1": "hardCapInCents()", +"8830a718": "BTHRTokenSale(uint256,address)", +"8830e09a": "ATTContribution()", +"88318834": "abandon()", +"8831e9cf": "setPlatformWallet(address)", +"8832243a": "profitSharing()", +"8832bc29": "ETH_PRICE()", +"8832ebe8": "lolita()", +"88331b6f": "amountPower()", +"883356d9": "isBurnable()", +"8833ae6f": "aquaman()", +"8834277e": "emitErrorCode(uint256)", +"8834526a": "MARKET_CAP()", +"883462ca": "removeFromKyc(address)", +"8835097d": "assignedAmountToPrivateEquityFund()", +"88352a29": "signedApproveAndCallHash(address,address,address,uint256,bytes,uint256,uint256)", +"8835ba24": "Legolas()", +"88362d4b": "setDailyLimit(uint256,uint256)", +"88369d6b": "getTokenBalance(address,address,bytes32)", +"8836f3ef": "getNumberOfBounties()", +"8838af8a": "rarityMultiplier()", +"8838b68e": "etherLeft()", +"88394fdc": "startRoundA()", +"8839515c": "OWN_ChangeToken(string,string,uint8)", +"88398fbc": "PreSaleHardCap()", +"883a3ea8": "LottoNumberTest()", +"883a584c": "RichiumToken(uint256,string,string)", +"883a6476": "IsAirDropEnabled()", +"883a92e1": "setFreezeEndTime(uint256,uint256)", +"883a98e7": "addTileBonus(uint256,uint256,uint32[8])", +"883ba26b": "getIsSettled()", +"883ba466": "changeHiddenOwnership(address)", +"883cd1a5": "cloudsPerEth()", +"883cdeb9": "newTrack()", +"883cf630": "resetBucket()", +"883d0ac6": "totalnSupply()", +"883dfaba": "getWinBalancesOf(address)", +"883fd348": "hasAvailableRewards(address)", +"883fdd6f": "IWABOO()", +"88400fbe": "ICO_TEAM()", +"884095f6": "getWineryMappingID(string,string)", +"8841520b": "SpinnerCountsByAddress(address)", +"88416792": "usersPause()", +"88417820": "LBSN()", +"884179d8": "ipfsAttributeLookup(address)", +"8841937a": "setTileHp(uint16,uint8,uint32)", +"8841ac11": "buyItem(uint256,uint256,uint256,uint256)", +"8841dd3c": "thirdRewardPeriodPercent()", +"88426aec": "getStageDeadline(uint8)", +"8842bfa0": "Chain4()", +"8843641e": "removeAmountForAddress(uint256,address)", +"8843c1ba": "listAcceptedTokens()", +"8843c222": "MIN_ACCEPTED_AMOUNT_FINNEY()", +"8843ffba": "signup(uint256)", +"88445e29": "sha3(uint256)", +"884543c0": "TokenBought(address,uint256,uint256,uint256)", +"8846594b": "checkKYC(address)", +"8847092d": "upgradeMaterial(uint256)", +"884790de": "agentInvo(address)", +"8847df97": "ChangeEmissionRate(uint256)", +"88482233": "Lizambo()", +"884870c7": "setParameters(uint256,uint256)", +"884879d6": "startSecondStage()", +"88488c33": "finalizeTask(uint256)", +"8848fb0d": "addEmployerJob(address,address,uint256)", +"884a2308": "setCompte_5(string)", +"884a26da": "massBurn(uint8[],address[],uint256[])", +"884a47b4": "setNews(string)", +"884ade03": "ForceSeller(address)", +"884ae10b": "saleWalletAddress()", +"884b5dc2": "fill(uint256[])", +"884b850b": "BurnAssignedFees(address,address)", +"884bf67c": "getPrizePool()", +"884c1480": "LacesToken(uint256,string,string)", +"884c6440": "BuyItem(uint256)", +"884ca7b1": "getButtonPrice()", +"884edad9": "Withdraw(address,uint256)", +"884f3db0": "check_the_rule(address)", +"884fafcd": "totalJackpotEven()", +"88508a18": "getRecentPlayers()", +"885124c0": "Coin5941()", +"88516a89": "ownerFraction()", +"88519ea4": "availablePreICO()", +"8852024f": "max_TotalSupply_limit()", +"88524780": "saleAuctionERC20()", +"885349a2": "payToBank(uint256)", +"88535e90": "changeMinimumContributionForPublicPhase(uint256)", +"8853636b": "revealResult(uint256,bytes32)", +"885363eb": "landOf(address)", +"88537daf": "checkMiningAttempt(uint256,address)", +"88538c36": "candidateInformation(uint256)", +"885463fd": "strategicAllocation()", +"8854baa8": "AddReturnsMapping(uint256)", +"88550b6a": "getTokenBuyPrice()", +"88559aaf": "processAllocation(address,uint256)", +"8856cd84": "medicaxess()", +"8856d517": "GetReferralInfo()", +"8857322d": "DOLLAR_DECIMALS_MULTIPLIER()", +"885819c2": "getVatIdByAddress(string)", +"8858287b": "vendorCount()", +"8858ad6c": "Exploreon()", +"8858adc6": "setColor(uint16,uint24)", +"8858fa3b": "totalEthReceivedInWei()", +"8859c6d6": "operatorCampaignID(address,uint256)", +"885a3b75": "currentTotalSupply2()", +"885a5ec2": "lastBlock_f10()", +"885a5ef2": "getMinEtherInvest(uint256)", +"885b63da": "setAuctionStartBid(uint256)", +"885b6cfb": "addZethrAddress(address)", +"885c69b5": "clearMetadata(address)", +"885e2750": "groupsCount()", +"885e401e": "lifeFactor_i()", +"885ec18e": "left6(uint256)", +"885f5011": "calcRatioNext()", +"8860565f": "GetBeneficiaryInfo()", +"8860805a": "extractMax()", +"8860bf94": "showworker()", +"8860d49f": "_transferInternal(string,address,string,address,string,uint256,uint256)", +"8861026f": "complianceWallet()", +"8862198a": "MasterContract(address)", +"8862d26a": "offeringType()", +"88631e18": "distribute(address,uint256,uint256,address[],address,uint256[])", +"88635b06": "createContractPerson(string,uint256,address)", +"8863c8d5": "concludeCrowdsale()", +"8863dd1a": "transferOwnerShip(address)", +"8863f31d": "Controller(address,address,address)", +"8864a5fd": "processPendingTickets()", +"8864d074": "RADCOIN()", +"8865015d": "g(uint256[20])", +"886588ac": "confirmVerbose(bytes32,address,uint256,bytes)", +"8865cbd6": "cancelAllOrdersByTradingPair(address,address,uint256)", +"88668d21": "getReplyRaw(bytes32,uint256)", +"88671acc": "FundAllocation()", +"88672f82": "setEtherRate(uint256)", +"88684aa5": "nextUnLockTime()", +"88685cd9": "releasePayment(uint256)", +"886b148d": "setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16,bool,uint256,uint256,uint256)", +"886b4954": "secToNextInterestPayout()", +"886bb359": "chown(address)", +"886bbe0c": "submitProof(bytes32,bytes32,uint256[],bytes,uint256)", +"886c0ee6": "Develop()", +"886d3db9": "uintToBytes32(uint256)", +"886d969b": "calc_partnerPercent(uint256)", +"886db803": "_setBigWinner(address,uint256,uint256)", +"886e549b": "PineappleArcadeTrophy(uint256)", +"886ed2d1": "enableRealWorldPlayerMinting(uint128[],bool[])", +"886ef644": "getRate(address,uint256)", +"8870155c": "getNumTknOfferors()", +"88702cc4": "debug_hash256Double(bytes)", +"88705f7d": "NeoCrowdsale(uint256,uint256)", +"8870985b": "getFreeBalance(address)", +"887159a2": "treatRemaintoken()", +"887240d0": "generateFileID(string,string,string,string)", +"887263cf": "EnigmaToken()", +"88727ba9": "_depositEthers(address)", +"8872bb2a": "_createElement(bytes32,uint256)", +"8872c094": "getUnsoldToken()", +"8872c68a": "sampleStorage()", +"8873704c": "addRequest(string,address)", +"8873d247": "THANKSTEST()", +"8874fa28": "CurrentRevision()", +"88753343": "maxResolvedAgonId()", +"88758581": "unregisterEmployee(address,address)", +"8875a40b": "endTimeTLP2()", +"88760a18": "loadStarbaseEarlyPurchases(address)", +"887651cc": "isAlreadyIn()", +"887699f3": "periodContributionOf(uint256)", +"88770cb0": "extendEndTime(uint256)", +"88776a7e": "testThrowTranferFromEmptyBalance()", +"88780b8e": "safeBalance()", +"88782386": "UnicornMilk()", +"8878356d": "testBetAmount()", +"88786272": "startingTimestamp()", +"8878990e": "changeCollateralSeizer(address)", +"8878adac": "refund_claims(string)", +"8878d726": "buySpecialBuilding(uint256,uint256,uint256)", +"8878db7f": "setCRYPTON_CUT(uint16)", +"887a8e33": "AgencyLock1()", +"887b00db": "TESTTESTICO(address,address,address,address)", +"887b1b0b": "recalculateTokensToBuyAfterSale(uint256,uint256[])", +"887bae74": "addReferenceParentWineryOperation(string,uint256,string,address,int256)", +"887bbef5": "setMinInvestment(uint256,uint256)", +"887bdcfc": "accountBalance(address,address)", +"887c3e5d": "updateAddress(bytes32,address,address)", +"887c4646": "approveIndexedByAddress(address,address,uint256)", +"887c4f68": "ludumTokensPerEther()", +"887c7f92": "remainingReserveSupply()", +"887ccc82": "getStake(uint256,uint256,address,bytes32)", +"887cfc3e": "orderToTransfer(address,address,address,uint256,string)", +"887d23a6": "isBeforeEndTime()", +"887d813d": "serviceGroupGet(address)", +"887e0c07": "runPlugin(address,uint40,uint256)", +"887e22b1": "tier5Time()", +"887f6178": "genericTransfer(address,uint256,bytes)", +"887ffc9c": "referalPayByNum(address,uint32)", +"88806b37": "transferZone(uint256,address)", +"8880a933": "transferTokensToNonEthBuyerToMany(address[],uint256[])", +"8881d3a2": "CompensationFailEvent(address,uint256)", +"8882349b": "vppToken()", +"88824bd1": "PonziUnlimited()", +"88827c16": "addPost(bytes32)", +"8882ddc9": "maxCharacters()", +"8883478e": "preicoAndAdvisors()", +"8883c52a": "getNumberOfAssetPacks()", +"88840671": "Milkcoin()", +"888419ed": "setData_8(string)", +"88849e71": "BasketToken(address[],uint256[],uint256)", +"8884b807": "getVoters(uint256,uint256)", +"8884cd7c": "changeBuyFlag(bool)", +"8884fbec": "checkTotalsAndMintTokens(address,uint256,bool)", +"8885f2a3": "setzBool(bool)", +"88865347": "grapesToBuildWinery()", +"88865ee3": "cleanupEven()", +"8886a667": "registerNameXIDFromDapp(address,bytes32,bool)", +"8886ca33": "getHeroBP(uint256)", +"88873eea": "blocktubeClip(string,uint256,uint256,address)", +"888764c8": "addBouncer(address)", +"888808ba": "Bittelux()", +"88888f61": "purchase(uint256,bytes32)", +"8889025a": "increaseJackpotTimeAfterBet()", +"88896a0d": "deliverPrize(address,bytes)", +"88897c37": "request_close()", +"888a3f79": "_approvedFor(bytes32,uint256)", +"888aab22": "addWithdrawal(address,uint256,uint256,uint256)", +"888ade0a": "publicKey(address)", +"888b6557": "minFundingGoalWei()", +"888d5917": "limitDateCrowdWave2()", +"888ea120": "saleDeadline()", +"888f2b13": "SALE_RATE()", +"88908546": "refund_eth_value()", +"889087b1": "meltCrystals(uint256[])", +"8890e13d": "isArenaContract()", +"88922e7a": "raiseAppeal()", +"889231c1": "promoLimit()", +"889258ea": "startICOStage1()", +"88929931": "UnlockDateExtended(uint256)", +"8892bb73": "createChildUniverse(bytes32,uint256[],bool)", +"8892d571": "withdraw_Leim(uint256)", +"8893240d": "setPeonyAddress(address)", +"88933e07": "getSMPTokensLeftForICO()", +"8893eb13": "getActivated()", +"88945187": "updatePurchasingState(address,uint256)", +"8894dd2b": "addEther()", +"88951352": "distributeTokens(address[])", +"889569cd": "getKoikeContract()", +"88968b94": "rateOwner(uint256)", +"88968bc3": "clearKyc(address[])", +"8897b1a7": "PRESALE_HARDCAP()", +"8897c1f4": "randomNumber(uint256,uint256,uint256,uint256,uint256,bytes32)", +"8897df9d": "addEpisode()", +"8899568c": "createDefaultZodiac(uint256,uint256,uint256,address,uint256,uint256)", +"8899fa0d": "onUnVote(address,int256)", +"8899fffd": "myFinneyValue()", +"889b59d9": "getDBallotsN(bytes32)", +"889c10dc": "addDelegate(address,address,bytes32,address,uint256)", +"889cd532": "upsertOne(address,uint256,bool,bool,uint256)", +"889d227d": "newPaymentAddress(address,bytes4)", +"889d9550": "getCryptoCupTokenContractAddress()", +"889e175e": "__slash__(address)", +"889e5073": "getStatus(address,address)", +"889eaa0d": "nextRate(uint256)", +"889f0c99": "withdrawFor_(address)", +"889fa1dc": "getFighter(uint256)", +"889fb53e": "incrementCoin(address,uint256,bool)", +"88a0e990": "BridgeTheChain()", +"88a12f7a": "_getUint(bytes4)", +"88a15f11": "secondMaxAmount()", +"88a17bde": "allocation()", +"88a1e895": "test2Fails()", +"88a2653c": "unwhitelistAddresses(address[])", +"88a2995d": "MyToken(uint256,uint256,string,string,uint256)", +"88a49164": "testErrorUnauthorizedTransfer()", +"88a4e86c": "balanceOfRaw()", +"88a525c4": "withdrawTokenBalance(uint256)", +"88a55c8b": "setBustRange(uint256)", +"88a6c749": "getFirstTranscoderInPool()", +"88a6cc53": "lockPurchasedTokensClaim(uint256)", +"88a6f02b": "deleteRecord(uint64)", +"88a74525": "fraction(int256,int256,int256)", +"88a79003": "addWhitelistInternal(address,address,bool)", +"88a7ca5c": "onTransferReceived(address,address,uint256,bytes)", +"88a89dd0": "add_to_buy_bounty()", +"88a8b341": "setVoteInternal(uint256,uint160,bool,bool)", +"88a8c95c": "changeDev(address)", +"88a8d602": "management()", +"88a95495": "removeFromMap(uint256[])", +"88aa1001": "checkJoinAirdropQuest(address)", +"88aa8bee": "getTokenDetails(address)", +"88aaa229": "AcceptsIDK(address)", +"88abc4a2": "coinIssuedPrivate()", +"88ac76ca": "cthereum(uint256,string,uint8,string)", +"88ad52f0": "DouYinToken()", +"88adbf8f": "addressOfTokenUsedAsReward()", +"88aebe00": "calculateWineBuy(uint256,uint256)", +"88aece7f": "setBuyOrdersContract(address)", +"88aed238": "ixix()", +"88af30c3": "_mainAddress()", +"88af6534": "VRF_EGG_COST()", +"88af883b": "adm_trasfer(address,address,uint256)", +"88af8ed4": "removeInvestor(bytes32)", +"88afdeba": "totalCreatedGame()", +"88afe426": "_removeAgonIdByOwner(address,uint64)", +"88b02acd": "displayTable()", +"88b11ee2": "DZoneCoin(uint256,string,uint8,string)", +"88b2ed1a": "addPlotAndData(uint24[],string,string,uint256)", +"88b322c3": "setAdvisors(address)", +"88b3a538": "projectManagers(uint256)", +"88b44c85": "assertEq(uint256,uint256,string)", +"88b45046": "income()", +"88b4b861": "proposeTo(address)", +"88b51ac0": "gernerateVoting(uint256,uint256)", +"88b55641": "buyTokenIco(address,uint256)", +"88b59734": "vendueClosed()", +"88b5f6f3": "PimpToken()", +"88b75493": "getLastAuditAuditor(address)", +"88b7a17c": "functionName(bytes32)", +"88b7a89d": "test0_create()", +"88b7e6f5": "returnInt128(int128)", +"88b7f5e5": "advisersWallet()", +"88b8c487": "playerWithdraw()", +"88b9022f": "semanticVersion()", +"88b95242": "PricingEnergy(uint256)", +"88b9a469": "initVault(uint256)", +"88b9e10e": "seizeTokens(address,uint256)", +"88bac2b8": "Mediated_Transfer(uint256,address,address,uint256)", +"88bb0c73": "teamsReward()", +"88bb18fc": "mintDSBCToken(address,uint256)", +"88bb6e68": "AkershoekToken()", +"88bb9fb1": "MultivestSet(address)", +"88bc65e3": "getFreelancerAvgRating(address,address)", +"88bec9da": "deleteMember(uint256)", +"88bf60b7": "transferMinimumFee()", +"88bff117": "setDrop(bool,uint256,uint256)", +"88c058a5": "subDefence(uint256,uint256)", +"88c0b8a7": "setChangeFee(uint32)", +"88c0bc8e": "buyTokensWithReferrerAddress(address)", +"88c12be2": "deathData_f0()", +"88c190a4": "NiMingToken(uint256,string,uint8,string)", +"88c2a0bf": "giveBirth(uint256)", +"88c30278": "getMinerOffsetOf(address)", +"88c3ba85": "ParallelGambling()", +"88c3ffb0": "getRoundInfo(uint256)", +"88c463af": "contributorsOfCauldronRound(uint8,uint32)", +"88c4e888": "get_token_state()", +"88c55c47": "initializeVesting(address,uint256)", +"88c600d0": "CryptoCongress(address,uint256,uint256)", +"88c662aa": "getController(address)", +"88c6abf8": "currentIteration()", +"88c7b6e6": "CrowdSaleMacroansyA()", +"88c7e397": "buyable()", +"88c8475c": "batchFreezeAccount(address[],bool)", +"88c8da99": "deactivate_admin_comission()", +"88c912b8": "sendToAddressWithBonus(address,uint256,uint256)", +"88c91d24": "computeCooldownTime(uint128,uint256)", +"88c91fb1": "transferExtender(uint256)", +"88c9a7d5": "setPixels(uint32,uint32[],uint8[])", +"88c9cb3c": "timer()", +"88c9ebbd": "getKeyPrice(uint256)", +"88cac17d": "setNextLotteryTTWTokenId3(uint64)", +"88cb214e": "editWhitelist(address,bool)", +"88cb8a73": "setPixelBlockPrice(uint256,uint256,uint256)", +"88cbc84a": "buyInvestmentPackage(uint256)", +"88cbdf13": "toUint32Throw()", +"88cc58e4": "getFactory()", +"88cc81de": "PaymentExpectationCancelled(bytes8)", +"88cc852a": "notZero(address)", +"88cca295": "addressToPurchasedBlocks(address,uint256)", +"88ccf2b9": "SetTokenInfo(uint256,address,uint256,uint256)", +"88cd2d47": "UserCRUD()", +"88ce3048": "lastweek_winner3()", +"88cee87e": "adminRemoveRole(address,string)", +"88cf2bc6": "buyStarCoin()", +"88cf6648": "liquidationPriceWad()", +"88d0443d": "bounty_address()", +"88d0820e": "selfFreeze(bool,uint256)", +"88d0b42d": "getRecentActivity()", +"88d115af": "PonyCore()", +"88d116b8": "_createPlayer(string,uint256,address,uint256)", +"88d12a4d": "totalWeiReceived()", +"88d18ea4": "featureSprite(uint256)", +"88d21ff3": "pollExists(uint256)", +"88d2faf9": "publishMemberEvent(address,uint256)", +"88d450e4": "setArtistsAddressAndEnabledEdition(uint256,address,address)", +"88d52ef7": "poolContract()", +"88d60e27": "setPercentTokenAllocation(uint256,uint256,uint256)", +"88d695b2": "batchTransfer(address[],uint256[])", +"88d723ac": "TetherToken(uint256,string,string,uint256)", +"88d761f2": "finishMigration()", +"88d7cd97": "externalStorage()", +"88d7e087": "withdrawChi()", +"88d8c702": "Summary(address,uint128[])", +"88d8da5f": "equals(string,string)", +"88d937a3": "createnation(uint16[],string,uint256)", +"88d97c30": "getGroupPageCount(string)", +"88d9fc4d": "updateReserveVault(address)", +"88da9bfd": "getUserNumbersOnEther(uint256)", +"88db84bc": "getRequiredStateChanges()", +"88dbe7a7": "dividendBonus(address,uint256,uint256)", +"88dc0d49": "TRcoin()", +"88df13fa": "multiMint(uint256,uint256[])", +"88df31f0": "minDiscountEther()", +"88dfee60": "setOtherFounder(address,uint256)", +"88e01a98": "closeRound(uint256)", +"88e072b2": "checkTransfer(address,uint256)", +"88e114cc": "log_approve(address,address,uint256)", +"88e16190": "ItemCreatePrice()", +"88e2af0e": "initialBattle(uint256,uint256)", +"88e2ca21": "getClue4()", +"88e2da99": "randDelay()", +"88e2f29b": "updatedPrice()", +"88e3c5d6": "addVerifiedUser(address)", +"88e3cfda": "setResult(string)", +"88e3ffeb": "updateMinimumWeiRequired(uint256)", +"88e47f29": "_ChallengeSucceeded(uint256)", +"88e490eb": "getInfoCellBalance()", +"88e4b6ad": "calculatePotCut(uint256)", +"88e5581e": "twitterDropSingleAmount(address[],uint256)", +"88e62721": "revoke(address,bytes32)", +"88e67d96": "isAccess(address,string)", +"88e694aa": "MANNCOIN()", +"88e765ff": "maxBuyAmount()", +"88e814e6": "getTopPlayers()", +"88e85127": "ModeratorAdded(address,address,bool)", +"88e854e0": "SDR(uint256,string,string)", +"88e8e26a": "ServiceToken()", +"88e90253": "NewRateSet(uint256)", +"88e951dd": "totalContributors(uint256)", +"88e9d45d": "ButtonClickGameContract()", +"88e9fb4f": "keyEmployeesAllocatedFund()", +"88ea41b9": "setMinBet(uint256)", +"88ea70ee": "bountyTokensAddress()", +"88ea8ee5": "bonusCRS()", +"88ea8fd8": "manualUpdatePrice()", +"88eb615c": "LogWhiteListed(address,uint256)", +"88eb7af7": "_isHuman()", +"88eb944b": "addDedication(uint256,string)", +"88ebf975": "setDebt(uint256,address)", +"88ec6f42": "Cef()", +"88ec838f": "configParams()", +"88eccb09": "addLevel(uint256,uint256)", +"88ed8b36": "notRandomWithSeed(uint256,uint256)", +"88ede276": "hasBeenConstructed()", +"88ee4b2d": "_getIdIfValid(bytes32,uint256)", +"88eea4f3": "WhiteBitcoin()", +"88ef59fb": "releaseOldBalanceOf(address)", +"88efc97b": "activateEscapeHatch()", +"88efedf4": "AIRDROPS_PERIOD()", +"88f020bb": "drawWinner(uint8)", +"88f1ccf2": "cancelInvestment(address[])", +"88f2b12e": "SerpentHead()", +"88f34bc2": "depositAndVote(uint256,uint256,uint256)", +"88f53db1": "getDataRequest(uint256)", +"88f5eb36": "exchangeRateForBTC()", +"88f6d5a4": "constructCoinbaseTx(uint256,uint256)", +"88f7c6d6": "setExchangeStatus(bool,bool)", +"88f9ff98": "_random256()", +"88fabb3a": "SetMessage(string)", +"88fad42a": "EthereumRisen()", +"88fb4af0": "ShootRobinHood(uint256,string)", +"88fc0825": "unregisterNode(uint256)", +"88fc176c": "DucToken(uint256,string,uint8,string)", +"88fc65fb": "isTransferable(address,uint256)", +"88fcba88": "fundingDeadline(bytes32)", +"88fd0b6e": "getMembershipPrice(uint8)", +"88fd35e8": "setConfiguration(uint256,uint256,int256)", +"88fdf3d4": "setWinnerPrizes(uint32)", +"88fedd04": "houseProfit()", +"88ff2dcc": "createProject(string,address,address)", +"88ff9416": "initialize(address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256[])", +"88ffc33e": "bltMasterAcc()", +"88ffe867": "pledge()", +"89009ab0": "purchaseAd(uint256,uint256,string,string)", +"8901b9ae": "withdrawBalanceFromAdmin(uint256)", +"89020fe3": "PacifistFarmer()", +"89029d8c": "get_all(uint256,uint256)", +"89034082": "issueToken(address)", +"8905fd4f": "reclaimERC20(address)", +"89064fd2": "approveWithSender(address,address,uint256)", +"89065e9a": "getPlayerSpaceshipOwnerById(uint256)", +"89077ad2": "SharderToken()", +"8907e787": "isAccountWhitelisted(address)", +"89080102": "verifyDSHash(uint8,bytes,bytes)", +"8908017f": "calculatePhoenixPoolCut(uint256)", +"890814f8": "bountyValue(uint256,uint256)", +"890853d9": "HuatUSD()", +"8908e693": "setTokenCurator(address)", +"890a018d": "externalSales(uint8[],bytes32[],address[],uint256[],uint256[])", +"890a7ef7": "publish(bytes,string)", +"890a9917": "privateSaleMinContrAmount()", +"890ac366": "mintReserve()", +"890b2adc": "Reply(bytes32,bytes32,uint256)", +"890c6848": "WallCoin()", +"890d6908": "solve()", +"890e2a6b": "updInvestorPreSaleEnabled(address,bool)", +"890e839f": "isOnSale()", +"890e9d2f": "getAllowanceSpenderValue()", +"890ea91a": "creditsOf(uint256,address)", +"890eba68": "flag()", +"890ed1cb": "dealHouseCards()", +"890ede44": "TokenCoin5()", +"890f2168": "crowd_end_date()", +"8910b070": "NUC()", +"8910cd58": "substractLockedAmount(uint256)", +"89110058": "Investments(address)", +"89113858": "IHCToken(uint256,string,string)", +"8911cd9a": "silverPercentage()", +"8911cf0d": "unsafeResignOwnership()", +"8911e26b": "isUnrestricted()", +"89128b70": "get_submission_queue_length()", +"8912ab5c": "dropVotes(address[])", +"89135ae9": "setAdministrator(bytes32,bool)", +"891363a6": "lastCWCETH()", +"8913b809": "initPlayers(uint32,uint32)", +"891407c0": "purchaseTo(address,uint256)", +"8914f1e1": "getDepositAmountFor(address)", +"89158ff9": "assignDispute(string,address,string,address)", +"89165dcb": "changeEtherDeltaDeposit(address)", +"8916cbc6": "minRedeem(address,uint256,uint256)", +"8918485b": "setEthlanceSponsorContract(address)", +"8918ab1b": "Sumte()", +"89198fed": "fulfilled(bytes32,address)", +"8919e3b6": "VinzCoin(uint256,string,uint8,string)", +"891a2f31": "buyItem(string,uint256)", +"891a3e23": "gettotalEth()", +"891a8b85": "ethPriceInUSD()", +"891aab6a": "addStaffWhitelist(address[])", +"891acff7": "updatedPrice(string)", +"891c738a": "isTransPaused()", +"891d4fe8": "printContent()", +"891de9ed": "fromTLA(string)", +"891df671": "registeredAt(uint256)", +"891e6f43": "thisContract()", +"891e75bf": "preSaleCreated(uint256,uint256,uint256)", +"891f5ce5": "successfulFunding()", +"891fa67d": "PsyMultiSig(address[],uint256)", +"891fe103": "typeBuffPercentage()", +"89206411": "batchAttachAssets(uint256[])", +"8920bcf9": "mediaToken()", +"8921329f": "registerBlog(string)", +"89222698": "SetWriter(address,bool)", +"89224227": "haltDirectTrade()", +"892250a7": "commonBudgetAdress()", +"89225c5a": "bountyManagerAddress()", +"89231bcc": "getDataNum()", +"89233fbd": "getPlayerGuessNumbers()", +"892412f0": "availableInventoryOf(uint256)", +"89244e2a": "dateEnd()", +"8925d7bb": "getTotalBrags()", +"8925f9e9": "getWorseOrderId(bytes32)", +"89266fca": "tokensSoldOnPublicRound()", +"8926f723": "GMBCToken()", +"89273f15": "addStorage(string)", +"89281963": "setServicestationAddress(address,address)", +"8928378e": "getMarketPrice(uint256)", +"89286abd": "freezeAccountTransfers(address)", +"892886e1": "PresaleTokenPurchase(address,address,uint256,uint256)", +"89291b05": "updateSubscription(address,bool,uint256)", +"892a0e42": "releaseToSeller()", +"892ad596": "changeTimes(uint256,uint256,uint256,uint256)", +"892c0214": "NumberOfCurrentBlockMiners()", +"892cd384": "CreditHydraToken()", +"892d31e8": "setEndCloseSale(uint256)", +"892db057": "isTokenEscapable(address)", +"892dfdf6": "transferDisabled()", +"892e0614": "distributeDivs(uint256)", +"892e243a": "directorName()", +"892e3f98": "setContributionInWei(uint256)", +"892e8dd9": "getViewDataByIndex(uint256)", +"892ee1a2": "removeUserFromBlacklist(address)", +"892ef672": "getACLRole8972381298910001230()", +"892f81df": "initializeTreasure(uint256)", +"89301afc": "Registrator()", +"8930c702": "updateWhitelist(address,address,uint8)", +"89311e6f": "startIco()", +"8931c998": "calculateTokenPresale(uint256,uint256)", +"89320239": "WHP()", +"89320771": "FDC(address,string)", +"89325127": "test_require()", +"89327ad5": "transfer_single_token_balances(address)", +"8932da79": "additional_price_money()", +"8932dc3d": "publishResult(string,string)", +"893372ca": "cancelPending(bytes32)", +"89337e84": "createTokens(bytes32[])", +"89341f6e": "TCASH()", +"89349217": "GamersCoin()", +"8934d115": "verifyUrl(string,string)", +"8935556d": "setDividends(uint256)", +"8935860d": "transferAgent(address)", +"8935b613": "setContentsManager(address)", +"8935ced5": "weightOf(uint256,address)", +"8936b8d4": "getCurrentRateInCents()", +"8937a0e8": "Guestbook()", +"8937d3dd": "Champion()", +"8937e223": "distoryAndSend(address)", +"8938656b": "getGeneratorsIds()", +"893880b6": "purchaseShareContract(address)", +"8939f5f6": "recoverCat(uint256)", +"893ae703": "bonusInPhase4()", +"893b3dd5": "setFreeze(string,bool)", +"893b746a": "cooperateRewardSupply()", +"893b8b0a": "getCategoricalMarketNumTicks(uint256)", +"893c1d31": "bountyReserveTokensDistributed()", +"893cebb3": "createSalesOffer(bytes32,address,uint256,bool)", +"893cf478": "chargeVerificationFee(address,address)", +"893d20e8": "getOwner()", +"893d4948": "JTEToken()", +"893fb18e": "buyout(uint256,bool,uint256,uint256)", +"89400fcc": "SkillCoin()", +"89402a72": "__default__()", +"8940aebe": "publicKey(uint256)", +"8940afe7": "testFailBurnGuyNoAuth()", +"8941db65": "addTime()", +"894306d5": "CanChange()", +"89443aac": "bttsVersion()", +"89452488": "NEBC(uint256,string,string)", +"8945a8af": "TOKEN_RESERVE1_CAP()", +"8945b1fc": "takeOwnership(string)", +"8945d643": "m_softCap()", +"8945e00d": "getForkCalled()", +"89462c38": "setContract2(address)", +"89465d2e": "dataForWithdraw(address)", +"8946d33f": "SplitterEthToEtc()", +"89473a0e": "PRCT100_D_TEAM()", +"89476069": "withdrawToken(address)", +"894766dd": "setTotalCoins(uint32)", +"89483926": "checkGainsToReceive()", +"894875cf": "_decimals18()", +"8948fe67": "wlDuration()", +"89495172": "convictFinal(uint256,uint256)", +"8949e109": "curReward()", +"894a62b3": "addContributionList(bytes10,string)", +"894a93e2": "tgeSettingsPartInvestorIncreasePerStage()", +"894b8d2e": "victorieumStatic1Token()", +"894ba833": "disableContract()", +"894ca160": "CanToken()", +"894cd9b6": "placeBuy(address,uint256,uint256)", +"894cdcc1": "ADXToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"894d05b5": "buy_drink(uint256,uint256)", +"894d6ef9": "TripCoinTeamAddress()", +"894d7b08": "claimTokenBonus(address)", +"894e036d": "callAndReward_2(string,string,uint256)", +"894e5e1f": "GEE()", +"894e5f2d": "isUserAuthorized(address)", +"894ee6d9": "_getTimeValue(address,address)", +"894f6531": "SingleTokenLocker(address)", +"894fefeb": "TokenHeld()", +"89506a44": "MAX_TRANCHES()", +"89514f6e": "setSummary(string)", +"89519c50": "refundTokens(address,address,uint256)", +"895224db": "testControlBlobStoreNotRegistered()", +"89523d77": "removeProperty(bytes32)", +"895274bb": "getPlayerSpaceshipBattleLevelById(uint256)", +"8952877b": "storeProof(bytes32)", +"8952f965": "isTransferConfirmed(uint256)", +"8954f5b1": "winChoice()", +"895594f6": "setEarlyParticipantWhitelist(address,bool,uint256,uint256)", +"895595d5": "firstRoundICODiscount()", +"8955ed7e": "claimBalanceOwnership()", +"895678a2": "expireDelay()", +"89568a13": "TSTEST1()", +"895693a9": "getToBalance()", +"8956fceb": "addAlt(address,uint256,uint256)", +"89574144": "GXESwapper()", +"89578145": "checkIfYearHasPassed()", +"8957d6f2": "numOfLegendary()", +"8957f8bf": "getLastMoveTime(uint16)", +"89596409": "getMigrateState()", +"89597595": "HCLCToken(uint256,string,string)", +"8959cbfe": "punksOfferedForSale()", +"895a8cfb": "secondWeekMainICOBonusEstimate()", +"895ab68c": "canCallDefault(address)", +"895abac9": "landPriceCandy()", +"895b327e": "isTokenActive(address)", +"895b4da7": "RunSale()", +"895bf2e1": "tickets10price()", +"895c1596": "getExpectedTotalTokens()", +"895c1bdb": "setStatus(address,address,uint8)", +"895c4c39": "unlockDevSupply()", +"895c666a": "createCommonPlayer()", +"895cf354": "validCertificators(address)", +"895d4e1b": "getMiningDetail(uint256)", +"895e8b23": "_tokenExists(uint256)", +"895ec54c": "getPack(uint256)", +"895ee30d": "Purchase(address,address)", +"895f468b": "markAllRead()", +"895fb022": "purchase_car(uint256)", +"89604ed0": "rebalance_delete(uint256,bool)", +"89611d0a": "checkIfSignedBy(bytes32,address)", +"89612f95": "setPrivateSaleTokensSold(uint256)", +"896131ca": "NewEntry(address)", +"896147e1": "ratePre()", +"8962aead": "setPOOL_edit_23(string)", +"896317b8": "getAssetType()", +"89637214": "presalePiTokensLimit()", +"896372b4": "addLogBlock(uint256,uint256,uint256,string)", +"89638de3": "setItemNotForSale(uint256)", +"8963c04b": "tokenSaleTokenBalance()", +"8963dab4": "getNodeId(bytes,bytes)", +"89658163": "setPath(uint256,uint256,bytes,bytes)", +"8966321e": "canTransfer(address,address,uint256,bool)", +"89666fd6": "adminSetPercentInvite(uint256,uint256)", +"8966768f": "confirmOracle(address,uint256)", +"89668a39": "addOpenRoomCount(address)", +"89675cac": "set(address,address)", +"89676b27": "storePrizeMoney()", +"89685242": "isValidPeriod(uint256)", +"8968c17c": "BlockchainCutiesCore()", +"8968db88": "GazeCoin()", +"896941e1": "ethTransfertoKYC(address,uint256)", +"89698f02": "recordContract()", +"8969fb5f": "USDETHRATE()", +"896a17a4": "releaseRestBalanceAndSend(address)", +"896ca3f4": "put_purchase_for(uint256,address,address,uint256,uint256,uint256,address,bytes)", +"896ce019": "getDailyTransactionVolumeSending()", +"896d505a": "setReport(uint256,bytes)", +"896d807a": "setAttribute(bytes32,string,uint256)", +"896e0349": "TokensClaimed(address,uint256)", +"896ed75a": "refuseAddress(address)", +"896f40dd": "ownerOnly()", +"896f8b4c": "changeEthBackRate(address,uint8)", +"897032e3": "ClipToken()", +"8970430e": "IcoContributed(address,uint256,uint256)", +"8970a0f4": "getFinalPayoutDistributionHash()", +"8970d84c": "_tokens()", +"89712af3": "longTermHolding()", +"8971739b": "getVIPCount()", +"8972feba": "reserveTokensGroup(address[],uint256[])", +"8973123c": "saleStartDate()", +"8973d0cf": "CoinwareToken()", +"8973e316": "resolveSellCityForEther(uint16)", +"8974372d": "payFund()", +"897463aa": "startContribution()", +"89749adb": "BuyTokens(uint256)", +"8975e45f": "currentNumberOfUnits()", +"89760e0a": "stateIndexToOwner(uint256)", +"89765328": "totalInvestmentOf(address)", +"8976762d": "setA_Signature(uint256)", +"8977f909": "UTCStart()", +"89781912": "setAllowedAddresses(address,bool)", +"8978fc79": "batchDistributeFees(uint256,uint256[])", +"89790192": "WithFee(address,uint256)", +"897a7dab": "createTokens(uint256[],address[],bytes32[],uint256[],uint256[],bytes32[])", +"897b0637": "setMinAmount(uint256)", +"897c41dd": "showInvestorVaultFull(address)", +"897c8613": "payContributorByAdress(address)", +"897cb036": "softCapTokens()", +"897cceee": "lockContract(bool)", +"897d2b10": "getPixelArray()", +"897d55cd": "migrationGetBoard(bytes32)", +"897e47f5": "setDateMainEnd(uint256)", +"89800cc2": "mtrContractAddress()", +"89804ddc": "getSagaExchanger()", +"89805f30": "s32(bytes1)", +"89805fc6": "PPCContract()", +"8980f11f": "recoverERC20(address,uint256)", +"89813984": "isWhitelistAddressListed(address)", +"8981a7ca": "actionA(uint256)", +"8981d077": "lockForWork(address,address,uint256)", +"8981d513": "owner(bytes12)", +"89826963": "changeICOStartTime(uint256)", +"8982b185": "buySEKU(uint256,uint256)", +"8982d772": "submitInitialEmptyState(bytes32,uint64,uint256[2],bytes32,bytes32,uint8)", +"898366d7": "ETH888CrowdsaleS2(address,address)", +"8983d2e9": "goldSymbol()", +"8984034f": "emitPriceUpdated(uint256,uint256)", +"898403c3": "getCurrentBlockTime()", +"8984e5dd": "_subBalance(address,uint256,address)", +"89850fae": "nextStep(uint256)", +"89852db2": "PARSEC_CREDITS_MINIMAL_AMOUNT()", +"89853691": "readUint256(bytes32)", +"89859b50": "updateLatestTree(bytes32)", +"8985a309": "setAllowedAddress(address,address)", +"8985abc8": "publicSaleAmount()", +"898644cc": "getFreeMiner(address)", +"89864915": "TyzonSupply()", +"89869163": "claimFailedConsensus(address)", +"8986ff32": "setEndTimeIcoStage3(uint256)", +"898855ed": "changeName(bytes32)", +"89885a59": "tokenOwnerOf(uint256)", +"8988b284": "isMod(address)", +"8988c1ff": "LogWhitelistUpdated(address)", +"8988d59e": "Transfer(address,address,uint256,address,bytes,bytes)", +"89895d53": "orderBlockNumber(bytes32)", +"89897104": "_buyRank(address,uint256)", +"8989851c": "operationList(uint256)", +"898a1813": "expectationsLeft()", +"898aa23b": "setPriceInCents(uint256)", +"898ad5ec": "set_arbits_presale_open(bool)", +"898b7663": "add_profit(address,uint256)", +"898c94b7": "SetDidPayOut(bytes32,bool)", +"898ce10c": "ChangeItemOwnerID(uint256,uint256)", +"898dc9b6": "setData_31(string)", +"898e3950": "addWinner(address,uint256,uint256)", +"898f767b": "precioether()", +"898fb033": "updateDescription(bytes)", +"898fdf94": "claimRate()", +"8991dede": "Falcon()", +"89920edf": "mintLockCashout(int256,address,uint256)", +"899231ef": "PRE_ICO_MINIMUM_CONTRIBUTION()", +"8992ae0e": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_PATH()", +"8993021b": "risks(bytes32)", +"899346c7": "nextPositionId()", +"89935c39": "getAmbientTempControlLimits(bytes32)", +"8994fa53": "TopUpMember()", +"89952097": "releaseRestBalance()", +"8995305e": "AsterionWorldToken()", +"89975389": "newVoting(string)", +"89976229": "setAmout(uint256)", +"8997f8cf": "getTokenUpdatedCounter(uint256)", +"8998470d": "tradeIntentOf(address)", +"8998ef19": "withdrawTokenMaker(address,uint256,address)", +"899942b8": "Devcon2Token()", +"899967b7": "redeemExcluded(address[],uint256[])", +"8999dd63": "ESoulToken()", +"899a0e7e": "OpenAIBlockChainToken()", +"899a1e36": "addBounty(address,uint256)", +"899aa65c": "Judged(uint256,bool,address,bytes32)", +"899ae006": "createBabies(uint256[],uint256[],uint256[],uint256[])", +"899b3414": "updateCoupleImageIPFShash(string)", +"899b53c9": "RICHToken()", +"899b64d9": "tokensPerEther_denominator()", +"899b6713": "VIRTToken()", +"899bf897": "isAllowedToRedeemNow()", +"899c0360": "getVIPRank(address)", +"899c4434": "testValidateTrade(address,address,address)", +"899d1556": "firstRoundICOTokensLimit()", +"899d840f": "PayPoker(string,string)", +"899e0fc9": "balanceOfPot()", +"899e37b9": "mintAndLock(address,uint256,uint256)", +"899e87f3": "AmountSet(address,uint256)", +"899ecf2b": "phase3EndBlock()", +"899f107d": "roomNightsOfOwner(uint256,uint256,bool)", +"899f9d29": "YCBToken()", +"89a0b679": "setContributor(address,address,bool,uint16,uint16,address)", +"89a2662f": "NeonCoin(uint256,string,string)", +"89a27984": "phepToken()", +"89a30271": "USDC()", +"89a3a00d": "addMinutes(uint256,uint256)", +"89a3e807": "Corban(address)", +"89a419e1": "set_stage_Days(uint256)", +"89a451fb": "getPriceChannel(string)", +"89a45223": "testFailCreateWithParentsParentNotInUse1()", +"89a4931d": "maxContributionAmountContract()", +"89a4bd1b": "foundationHashed()", +"89a4c1a0": "DevAddress()", +"89a5f2df": "privateSaleBonus()", +"89a69c0e": "setSubRegistrar(bytes32,address)", +"89a7adcc": "DelSocialAccount(bytes32,bytes32)", +"89a81e83": "validPurchase(uint256,uint256,uint256)", +"89a83701": "level(address,address,uint256)", +"89a8814d": "GetLastName(uint256)", +"89a9453a": "removeAllowedContracts(address[])", +"89a9d38e": "_approve(address,address,bytes32)", +"89a9d6b4": "tokensRemainingStage3()", +"89aaad29": "currencyUpdateAgent()", +"89abeb19": "ProcessGameExt(uint256)", +"89ad0a34": "setLocked(address,bool)", +"89ad0efd": "calculateAmountOfUnits(uint256,uint256)", +"89ad50e3": "CindicatorTalk()", +"89ada759": "availableBountyCount()", +"89ae1c90": "nativeReputation()", +"89aeca76": "registrars(address)", +"89af049d": "removeNacFromNLF(uint256)", +"89af175c": "RiservaETH(uint256)", +"89af2dce": "getBalanceFrom(address)", +"89afaf9d": "AddMod(address,address,bool)", +"89afc0f1": "operatorFee()", +"89afcb44": "burn(address)", +"89b13814": "Killable()", +"89b1714b": "simpletransfer(address,uint256,uint256)", +"89b1802c": "feesRateCongres()", +"89b1fa0a": "ROLE_TRANSFER()", +"89b2050b": "addExtraBalance(address,uint256)", +"89b2b09e": "ABDEL_ADDRESS()", +"89b2df31": "getTurn(uint16)", +"89b337a7": "GetCityData()", +"89b38d2f": "getInvoicingAddressByIndex(string,uint256)", +"89b3f8c7": "Flames()", +"89b49d61": "checkCapNotReached(uint256)", +"89b4a36f": "Depot()", +"89b4c550": "checkAndSendPromoBonus(uint256)", +"89b51f94": "setCommunityAddress(address,address)", +"89b52360": "referralCount()", +"89b52b9b": "sendCoin(address[],uint256[],bytes32)", +"89b540aa": "FuckYou()", +"89b5b514": "maxFinalStage()", +"89b5ea24": "outputMoney(address,uint256)", +"89b61a85": "updateVeifyFee(uint256)", +"89b68f40": "releaseFounderTokens()", +"89b7e746": "getMyOpenedCount(address)", +"89b898b8": "batchConvertIntoHtlc(bytes32[],address[],uint256[],uint256[],uint256[],bytes32[])", +"89b8b492": "read(uint64)", +"89b8db55": "minBounty()", +"89b933cd": "serviceFallback(address,uint256,bytes,uint256)", +"89b9572f": "RBTToken()", +"89b97d07": "totalSite()", +"89b9defb": "buyTokenForAddressWithEuroCent(address,uint64)", +"89ba3b23": "confirmDepositQuest(address)", +"89ba8e61": "getExplicitStrategyState()", +"89bb55c7": "apply(bytes32,uint256,string)", +"89bc0e6e": "UnitedToken()", +"89bc2006": "BagPackToken()", +"89bc455d": "THO()", +"89bca2d5": "addAuctionItem(uint256,uint256,address,uint256)", +"89bcbee2": "DemoToken()", +"89bcf968": "timeExpires()", +"89bdb217": "totalTeamFundMinted()", +"89be87a1": "openChannel()", +"89bfc6be": "PIVOTCHAIN()", +"89c0b25c": "openDispute(address,string)", +"89c1108d": "isTimeVault()", +"89c186d5": "addNewBusinessWallet(address)", +"89c18b48": "EtherusToken(address)", +"89c19ddb": "concat(string,string)", +"89c2443e": "executeSelfdestruct()", +"89c29b61": "calculatePaycheck(uint256)", +"89c44def": "sendMileStone(address,uint256,uint256)", +"89c5077f": "withdrawDevFee(address,uint256)", +"89c55845": "setBonus(uint8[5])", +"89c5ee3b": "executeAfterFinalize(bytes)", +"89c67976": "getAcceptance(bytes32,address)", +"89c698d4": "CrypteriumToken()", +"89c73565": "birthBlockThreshold()", +"89c766fd": "pause_for_maintenance()", +"89c77dfe": "mintValue()", +"89c7abfd": "removeAdministator(address)", +"89c7e70c": "BitliquorStandardToken(uint256,string,uint8,string)", +"89c98c06": "getMaxGasPrice()", +"89c9c44a": "EmontFrenzy(address)", +"89c9c586": "slopeDuration()", +"89c9e80f": "PotOwner()", +"89cb29dd": "nextEscrowId()", +"89cbc416": "tokensRedeemed()", +"89cc5c2b": "createdBlockOnRevealsPhase(uint256,address)", +"89cc5ea8": "bid(string,address,uint256)", +"89cc81c1": "contribute(bytes32)", +"89ccd39a": "set_address_A(address,address)", +"89ccf28c": "checkCapAndRecord(address,uint256)", +"89cd4b5e": "decidingBlock()", +"89cda6a8": "pausePVP()", +"89ce16cc": "maxRange()", +"89ce33bd": "delegateERC820Management(address)", +"89ce555c": "devFeesAddr()", +"89ced196": "setNotUpdatable(bytes32)", +"89cf3204": "insurance()", +"89cf5604": "releaseReserveTokens()", +"89cf9f94": "_reserveRefTokens(address,uint256)", +"89cfa823": "addPendingWithdrawal(address,address,uint256)", +"89cfd71b": "setPrivate(uint256)", +"89d2fca3": "DoctorChainToken()", +"89d3a15b": "addNewBlock(bytes32[],bytes32,bytes32)", +"89d3ed8d": "defineDiscountBorderLines()", +"89d410e9": "setIcoOwner(address,address)", +"89d4a66c": "internalDeposit(address,uint256)", +"89d59ee5": "createPersonalDepositAddress()", +"89d5da3b": "AlphaMarketICO(address[])", +"89d61942": "nextAuctionSupply(uint256)", +"89d61d77": "setOrganizer(address)", +"89d67775": "window1TokenCreationCap()", +"89d6d69d": "stampIndexToApproved(uint256)", +"89d700a5": "TheGTokenTest(uint256,string,uint8,string)", +"89d75221": "revokeSignToCancelAgreement(uint256)", +"89d77f82": "blocksToWaitLong()", +"89d86c5d": "getRetailer(uint256)", +"89d8b472": "_error(string)", +"89d8ca67": "drawPot(bytes32,bytes32)", +"89d8f96f": "getDirectOffersComissionRatio()", +"89d9b059": "refillRatifiedMintPool()", +"89d9ed38": "reserveFunds(address,address)", +"89da85d3": "getNumberOfArticles()", +"89dbeb64": "fundForAirdrop()", +"89dc8719": "getUserMaxPurchase(address)", +"89dcbbf9": "getFreeLobster()", +"89dcd64f": "saiTub()", +"89dd9e22": "changeBrick(uint256,string,string,string,bytes32[])", +"89ddeff3": "neurodao()", +"89de2581": "SetStorageContract(address,address)", +"89df1b01": "setMultiRequestLastRequestId(uint256,uint256)", +"89e198b4": "validContract(uint32,uint32,address)", +"89e2605d": "setReleaseAmountToCreator(uint256)", +"89e28a47": "getGameResults()", +"89e2c014": "allocateVestedTokens(address,uint256,uint256,uint256,uint256)", +"89e2d8bb": "handlePayableSharesDelta(uint256,uint256)", +"89e40af2": "stageSum(uint256)", +"89e42346": "enableRefund()", +"89e478f6": "minGasForDrawing()", +"89e4e22b": "pingDelta(uint256)", +"89e52771": "getTeamAddresses()", +"89e582c4": "FuturXe(uint256,string,string,uint8)", +"89e6359f": "preIcoEthers(address)", +"89e63a60": "conversionHashes(bytes32)", +"89e6579b": "registerExchange(address,address,bool,bytes4[])", +"89e6b5fb": "transferOwnership(address,bytes32)", +"89e7b8f6": "frozenFundsOf(address)", +"89e7f5cb": "OCZAPI()", +"89e85217": "teamBalance()", +"89e877a3": "activateWhitelist()", +"89e8beb3": "_strConcat(string,string)", +"89e94513": "advance(bytes15,uint32,uint64,uint64,int64,uint64)", +"89e96773": "BEY()", +"89ea2cb7": "onRefundPollFinish(bool)", +"89ea642f": "getString()", +"89ea770a": "grantTokensAdvisors(address,uint256)", +"89eaa610": "userAccess(address)", +"89eb313a": "isReadyToMate(uint256)", +"89eb4fee": "MYJ256()", +"89ebe846": "loyaltyWallet()", +"89ecd0e8": "disableAllowBuy()", +"89ed0b30": "setOraclizeGas(uint32)", +"89ed2ebf": "_transferDrone(address,address,uint256)", +"89ede784": "starbaseCrowdsale()", +"89edf114": "referralOwnerPercent()", +"89ee8758": "Daz()", +"89eea0eb": "tetherCount(address)", +"89eedf00": "setPdfHash(bytes,bytes)", +"89ef40e7": "numberOfHealthyGenerations()", +"89ef75b1": "purchaseWithPromoter(address,address)", +"89ef8292": "bulkTransfer(address[],uint256[],address)", +"89efa1b5": "registerEtherBalance(address)", +"89f0151c": "addAttribute(bytes32)", +"89f03ebc": "Incrementer2()", +"89f0ccba": "pre_start()", +"89f12d00": "minBlockNumber()", +"89f12ed9": "novaAddress()", +"89f182aa": "createMilestoneAcceptanceProposal()", +"89f1c26e": "minterTransferFrom(address,address,address,uint256)", +"89f1d38d": "Swap(uint256)", +"89f21090": "singleValueAirDrop(address[],uint256)", +"89f224a8": "EthlanceJob(address)", +"89f27d55": "transferItem(uint256,address,uint256)", +"89f37c45": "test_invalidThrow()", +"89f395de": "tos()", +"89f47b64": "doCrowdsaleMinting(address,uint256)", +"89f4ed7a": "getLastTag(uint256)", +"89f4fd57": "getUserProxy()", +"89f63f50": "teamb()", +"89f650fd": "next(bool)", +"89f6709c": "longRecord(address,uint256)", +"89f6e826": "drainRemainingToken()", +"89f71d53": "lastAction()", +"89f85a4b": "BalanceLocked(address,uint256,uint256,uint256)", +"89f8601e": "Engraved(address,bytes32)", +"89f88d7a": "Chess(bool)", +"89f8ab94": "lastRateUpdateTimesForCurrencies(bytes4[])", +"89f91592": "agreeWithdraw(uint256)", +"89f915f6": "getNumbers()", +"89f9b01e": "countingMeme()", +"89fa413d": "tradeRobot()", +"89facb20": "INTERVAL()", +"89fb75f9": "amountOfStage(address,uint256)", +"89fc01f6": "GetBidSeries(address)", +"89fcd099": "getApproval(address,address)", +"89fd14a1": "raiseTrivialThreshold(uint256)", +"89fdd81d": "PRE_ICO_LIMIT()", +"89fe141a": "maxSupplyPossible()", +"89fe253a": "BountyCampaingWallet()", +"89fe5273": "getTokensToSend(uint256)", +"89fe8507": "setNumbers(uint256)", +"89fee530": "CBSToken(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"89ff7fe0": "getCurrentBlockNum()", +"8a007d86": "preSaleMinPaymentWei()", +"8a007f30": "endGame(uint256,string)", +"8a00a82f": "withdrawRewardFor(address)", +"8a010c22": "changeBankAccount(address)", +"8a0193ac": "getGameExpired(uint256)", +"8a024a3f": "releaseINAToken()", +"8a03ad86": "getUserAddressById(uint256)", +"8a0490db": "PrakashToken()", +"8a0520fb": "isApprovable(address,uint256)", +"8a054ac2": "d()", +"8a059493": "fetchRoundIndexBySnapshotBlock(uint256)", +"8a05ad20": "TokensIssued(address,address,uint256)", +"8a05e478": "instantiate(address,address,bytes32)", +"8a063d91": "rewardThree()", +"8a066045": "unescrowFrom(address,uint256)", +"8a06cb71": "get_config()", +"8a06ce1b": "setTotalSupply(address)", +"8a0807b7": "indexOf(string,string)", +"8a0904da": "mainSale_EndDate()", +"8a098cd7": "bucketManager()", +"8a0a53d5": "BicycleSupply()", +"8a0c47cd": "changeWallet(uint8,address)", +"8a0cbf50": "VCCoin(address)", +"8a0cc3c6": "SMILO_COMMUNITY_AMOUNT()", +"8a0e5a75": "addToPublicSaleWhitelist(address[])", +"8a0e859f": "isDiamondAuction()", +"8a0f1e52": "PlayerBet(uint256,uint256)", +"8a107a31": "generate(string,address,address,bytes32,uint256,uint256)", +"8a1129f1": "unfreeze_start_date()", +"8a120dc9": "testBitEqualFailIndexOOB()", +"8a124744": "SiuToken()", +"8a127931": "profit5eggs()", +"8a13796e": "CERB_Coin()", +"8a13aa4b": "takeEth()", +"8a13aa4f": "WorldToken()", +"8a13eea7": "erc20Token()", +"8a1427d1": "addReferrerDefaultRate(address)", +"8a1489e3": "viewInvestorDividendHistory(uint256)", +"8a14f12c": "totalWagered()", +"8a155171": "availableForWithdrawal(address,address)", +"8a157df3": "createAuction(uint256,uint256,uint256,uint256,uint256)", +"8a157fae": "getEthBase()", +"8a1678a4": "LUMA()", +"8a17041a": "_founder_one()", +"8a17164c": "distributeTokenSaleJackpot(uint256,uint256)", +"8a172f2e": "getPawnEngine(uint256)", +"8a175ac2": "enableContribution(bool)", +"8a186788": "lookupIndex(uint256)", +"8a18a804": "UnsoldTokensBurnt(uint256)", +"8a18c55f": "SMT()", +"8a192c70": "setWLMTfinney(uint256)", +"8a194223": "Cryptolotto6Hours(address,address,address,address)", +"8a196437": "VRJToken()", +"8a19ac6d": "fechAllVoteResultPreRoundByBlock(uint256)", +"8a19b4d2": "addAdmin(address,address)", +"8a19c8bc": "currentRound()", +"8a19e355": "addToBalance(uint256)", +"8a1abbcf": "_getClientSupply(address,uint256,uint256)", +"8a1af4c4": "addOperator(address,address)", +"8a1b991d": "SBCE(uint256,uint256)", +"8a1bb169": "getJsonToTokens(string,uint256)", +"8a1bba96": "InvestorSum()", +"8a1bda63": "LogRedistributeTokens(address,uint8,uint256)", +"8a1be474": "CCNCrowdsale(address)", +"8a1d42f4": "setData_4(string)", +"8a1d8ae6": "x32323(uint32,string,uint8,string,address)", +"8a1dd162": "getPixel(uint256,uint256)", +"8a1e1404": "showFPLowerlim()", +"8a1f7a1b": "getMesa(uint256,uint256)", +"8a1fde4b": "setMaxwin(uint16)", +"8a20d00c": "buyTokensFromContract(uint256)", +"8a20f724": "currentRoundIndexByDate()", +"8a20f73c": "isInstrument(address)", +"8a213adb": "testFailMintGuyNoAuth()", +"8a237f27": "F2D()", +"8a2418ab": "nextSeedHashA()", +"8a24fd78": "convertGeneArray(uint256)", +"8a252194": "betGanjilGenap(bool)", +"8a252831": "asyncSend(address)", +"8a25aefa": "TEST_HOUSE()", +"8a2693e5": "kycVerification(address,address,uint256)", +"8a26d4c4": "GBTToken()", +"8a27a31c": "currentBanker()", +"8a27a51c": "transferGiveaway(address)", +"8a27a88b": "recoverAddressFromBalanceProofUpdateMessage(uint256,bytes32,uint256,bytes32,bytes,bytes)", +"8a294c60": "blacklisting(address)", +"8a29b77d": "receiveApproval(bytes)", +"8a2a0879": "TAUKEAYAM()", +"8a2a60ef": "foreignDailyLimit()", +"8a2ade34": "DonationClaimed(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"8a2ae2ab": "killTile(uint16,uint8)", +"8a2bfdf2": "add2Auction(uint256,uint256,uint256,uint256,uint256)", +"8a2cb24d": "castleExpAdjustment()", +"8a2e196c": "NTRYAvailableForSale()", +"8a2e2bf8": "updateLuckpool(uint256)", +"8a2e467c": "firstRoundTime()", +"8a2f6f94": "getRoleStatus(address)", +"8a30442e": "validTransfer(address,address,uint256,bool)", +"8a306c21": "mainSaleSupply()", +"8a31ffda": "replaceBoardMembers(address[])", +"8a323b38": "Contract(uint256,string,uint8,string)", +"8a329809": "setFeeContractAddress(address)", +"8a331846": "dividendParentsPercentage()", +"8a333b50": "max_supply()", +"8a33f585": "getOrder(address,uint32)", +"8a340eab": "BKToken()", +"8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", +"8a34396a": "personalCapActive()", +"8a344477": "putDeed(bytes32,uint256,bytes32,bytes32,uint256,string)", +"8a349cc4": "subscribtionLittafi(uint256,string,string)", +"8a34bb24": "changeContractFee(uint256)", +"8a355a57": "removeProvider(address)", +"8a359d6e": "getEducationCitizens(uint256)", +"8a35b8c7": "invested(address,uint256)", +"8a35f788": "_getWinner()", +"8a36c3dc": "TeamToken(string,string,address)", +"8a36ebc2": "showSmallProfit()", +"8a36f5a2": "Debug(uint256)", +"8a38ab2c": "createCourse(string)", +"8a3907b9": "buyPerSell(uint16,bytes32)", +"8a394c4c": "eraseUnsoldPreSaleTokens()", +"8a39ebdc": "globalPresaleLimit()", +"8a3a84a8": "Total_Payouts()", +"8a3aa194": "endCrowdSaleTime()", +"8a3b0199": "transferOnBehalf(address,address,uint256)", +"8a3bacd1": "backup_drawdown()", +"8a3bc2bc": "iPropose(bytes,uint256,bool)", +"8a3c36cb": "DollHair()", +"8a3c44a5": "Constructor()", +"8a3d6290": "addBountyTransferredTokens(uint256)", +"8a3d7cdc": "tiles(uint256,uint256)", +"8a3db05f": "_myTokeName()", +"8a3e37c3": "StarbaseMarketingCampaign(address)", +"8a3e44d4": "assetMoveInformation(address,address)", +"8a3e99ff": "HighCastleToken()", +"8a3f6e2a": "transferFromAndDepositTokenFunction(address,uint256,address)", +"8a3f8a23": "queryChibi(uint256)", +"8a4068dd": "transfer()", +"8a40bd00": "allowedToUpgrade()", +"8a40c4c4": "Youdeum()", +"8a426b1b": "handleExternalBuyers(address[],uint256[],uint256[],uint256[])", +"8a42b68c": "approveOrderHash(bytes32)", +"8a42ebe9": "set(string,uint256)", +"8a433274": "executeVoting(uint256,bytes)", +"8a43fc7e": "return_rejected_payment(uint256)", +"8a449c2c": "VividoRaidenToken()", +"8a44ae91": "setAUM(uint256)", +"8a45242d": "newGame(bytes32,uint256,uint256,uint256)", +"8a45557e": "flowerTotalSupply()", +"8a4577ea": "returnTokensFromTeamAddress(uint256)", +"8a462fbc": "calculateNewPrice(uint256)", +"8a46467d": "reloadCore(address,uint256,uint256)", +"8a4660fe": "MINIMUM_INVESTMENT()", +"8a468e15": "TBowner()", +"8a469c16": "addGeneralMilestone(string,string,uint64)", +"8a46bf6d": "testFallback()", +"8a47cadb": "SunPowerToken(address,uint256)", +"8a48941f": "getDistributionFacts()", +"8a48ac03": "getAccounts()", +"8a49a3cc": "updateTrustScore(address,uint256,uint256)", +"8a4a8718": "GoinbitToken()", +"8a4a9aab": "xhstoken()", +"8a4af069": "TotalTokenSupply()", +"8a4b08d9": "getPriceRate()", +"8a4be59e": "incentiveDistributed()", +"8a4c81c2": "SEADToken(uint256,uint256,uint256)", +"8a4cae0e": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256,int256[])", +"8a4d5a67": "content()", +"8a4db4fa": "allowedToBuyBack()", +"8a4e3025": "addStaff(string,uint256)", +"8a4e4639": "pregnantPoniesies()", +"8a4e7a7c": "endCrowdsalePublic()", +"8a4ea479": "addUndergraduate(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"8a4fb16a": "getWithdrawal(uint256)", +"8a4fbead": "setTokenAllowance(address,uint256)", +"8a4fe8ac": "membersNumber()", +"8a505b4c": "setAutoBuyFee(uint256,uint256)", +"8a5144c0": "estProviderFee(address,uint256)", +"8a519fb9": "BlockChainEnterprise()", +"8a51d0fc": "totalEarlyInvSupply()", +"8a51e8ed": "_timeLimit()", +"8a529159": "KinguinKrowns()", +"8a53360f": "GrantUpdated(address,uint256,uint256)", +"8a53862d": "refundPartCollateral()", +"8a53c3b1": "TeamTokensHolderMock(address,address,address)", +"8a53f230": "noError()", +"8a545aec": "getEngineerPrizePool()", +"8a547932": "sendFounderAndTeamTokens()", +"8a54d6a4": "recordVotes(uint256[])", +"8a55b001": "Sleipnirwallet()", +"8a55d36e": "isStart()", +"8a5651e3": "EMISSION_FOR_PRESALE()", +"8a56b230": "setMiningWarInterface(address)", +"8a56ca45": "lastOwner()", +"8a56d115": "lagDefrost()", +"8a56e85e": "_createRandomDna(string)", +"8a56f3ee": "burnFrom(uint256,address)", +"8a56fe46": "orderExpired(address,address)", +"8a570230": "IDK()", +"8a57af6b": "lockAfter(address,uint256,uint256)", +"8a585214": "BogpillToken()", +"8a5910a5": "RewardTimePeriod()", +"8a593cbe": "pre_ico(address,uint256)", +"8a59eb56": "updateStatus(bytes32)", +"8a5a68f4": "richtokenIndexToOwner(uint256)", +"8a5be698": "balanceOfDerivative()", +"8a5c19c0": "getWeekNo()", +"8a5c9098": "_mint(address,uint32,uint32,uint32)", +"8a5cca14": "AccountTransfersFrozen(address,bool)", +"8a5cd1ca": "updateBlockVoter(uint256,address,bytes32,uint256,uint256)", +"8a5cf5ee": "quarter3()", +"8a5d815e": "finishContract()", +"8a5ddd9b": "emergencyAndHiddenCapToggle()", +"8a5ddf9d": "emergencyRedeem(uint256,address[])", +"8a5fb3ca": "currentFeePercentage()", +"8a604017": "pendingParticipants(uint256)", +"8a6083d2": "changeCrowdfundState()", +"8a609155": "totalUniquePlayers()", +"8a6158f7": "startSettlementProcess()", +"8a61a2a6": "NewKoth(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"8a61b26d": "startICOPhaseTwo()", +"8a61bb91": "initiateBoardMemberVote(string,bytes32,address[])", +"8a61dcb7": "MiningReward()", +"8a626ba1": "offerPriceCandy(uint256)", +"8a6281f6": "getOwnerInfos()", +"8a62e9e9": "setIgnoreRequestIds(bytes32[],bool[])", +"8a62fd12": "NVTFallback(address,uint256,uint256)", +"8a6508ce": "removeCooldown(uint256)", +"8a653c93": "extGetLock(uint256)", +"8a654a64": "lockedAccountThresholdEth()", +"8a65d874": "userStats(address)", +"8a662b59": "SOLID()", +"8a6655d6": "vote(uint256,uint256,uint256)", +"8a6700e8": "Dex(address,address,address,uint256,uint256,uint256)", +"8a67456a": "contractPaused()", +"8a67c544": "setSchemaValidity(bytes32,bool)", +"8a67f04b": "_payoutMining(uint256,address,address)", +"8a67f4bf": "getRewardsBalance(address)", +"8a684f97": "EthMsig()", +"8a689784": "blocksDelay()", +"8a68ae3c": "transferPaladinOwnership(address)", +"8a69218c": "getLastRewardTime(uint256)", +"8a699023": "phase8Price()", +"8a69fead": "getTitulaire_Compte_1()", +"8a6a3584": "clearAccount(address)", +"8a6a8b6c": "getMonthlyTransactionVolumeSending()", +"8a6b114b": "getBet(address,uint256)", +"8a6b6877": "withdrawMineral(uint256)", +"8a6b9be4": "allowToWithdrawFromReserve()", +"8a6bc85a": "getInterestor(address)", +"8a6c02ae": "safeWithdrawal3(address)", +"8a6c0b26": "registerCreatorsPools(address[],uint256)", +"8a6d2d7b": "MATOU()", +"8a6d39b9": "Leak()", +"8a6db9c3": "minterAllowance(address)", +"8a6e0a8e": "_increaseApproval(address,address,uint256)", +"8a6ee066": "_releaseWithReward()", +"8a7097ce": "checkWithdrawalsgross(address)", +"8a7180ae": "team_token_percentage_max()", +"8a72ea6a": "offers(uint256)", +"8a738683": "sweep(address,bytes32)", +"8a7398e7": "getAllRoundRefIncome(address,address)", +"8a74b45c": "editApi(uint256,uint256,address,string)", +"8a74ee43": "allowTransferFrom(address)", +"8a74f69d": "transferMod(address)", +"8a758625": "setStrF1IntF2StrF2UintF2(string,int256,string,uint256)", +"8a75f56a": "setArbiterLocked(address,bool)", +"8a769d35": "miningTarget()", +"8a76a63e": "whitelistedInvestorCounter()", +"8a76d99b": "buyTicket(uint32,uint32,uint32,uint32,uint32,uint32)", +"8a775ab6": "RiskPrices(uint128[])", +"8a77ba1a": "companyVault()", +"8a78b7fb": "test_invalidProposalExecution()", +"8a78f5e2": "changeMember(address,bool,bool,uint256)", +"8a7a7e03": "ETH_PER_LARE()", +"8a7a8f46": "HJF()", +"8a7c20d7": "setReferralFund(uint256)", +"8a7c2ad7": "buyService(address,uint256,bytes)", +"8a7c2be2": "payEth(address,uint256,uint256)", +"8a7c2d6d": "hasOpenApplicationFromSource(address,address)", +"8a7c63c5": "privateStartTime()", +"8a7cc2ca": "RemapImported()", +"8a7d124b": "destroyToken(uint256)", +"8a7e30a1": "token_set()", +"8a7e5144": "addWhiteList(uint8,address,uint256)", +"8a7ed05c": "MAX_BID_FRAC_TOP()", +"8a7ef3df": "testFailCreateWithParentsParentSameItemId1()", +"8a7f1146": "RetrieveFunds()", +"8a7f800c": "preCensor(bool)", +"8a808acf": "Yaraq()", +"8a8090b8": "_setUint(bytes32,uint256)", +"8a80d9a3": "isRefundPaused()", +"8a80dfb1": "isFirstBadgeEle(uint256)", +"8a8146d0": "end_ICO_PreICO()", +"8a814cfe": "MyCrowdsale()", +"8a827eb9": "setSecondary(address)", +"8a82a09d": "MISTT1()", +"8a83d4a0": "burnMythexTokens(address,uint256)", +"8a863fbd": "juryOnlineWallet()", +"8a8672dc": "DINRegistry(uint256)", +"8a871c5f": "crosairVouchersMinted()", +"8a874084": "updateInteface(address,address)", +"8a87873a": "create(bytes32,address,bytes32[3],bytes32,bytes32)", +"8a87aeb9": "EthToOwner(address,address,uint256)", +"8a87b5c5": "dailyAdminAllowance()", +"8a87d8ea": "hasLicenseTerms(bytes32)", +"8a881e0e": "isExists(bytes32)", +"8a88c349": "addVestingMember(address,uint256,uint256,uint256)", +"8a88c4fe": "replaceOwnerIndexed(address,address,uint256)", +"8a890695": "logPurchaseViaFiat(address,uint256,bytes32)", +"8a892271": "initiateLocking(uint256)", +"8a89b338": "set_commandPercent(uint256)", +"8a8a0aab": "_b2(string,address)", +"8a8b4d61": "MediaBroadcast()", +"8a8b51b8": "setAddGas(address,uint256)", +"8a8b7deb": "CAT()", +"8a8b7e02": "whitelist_enabled()", +"8a8b98dd": "ETHT()", +"8a8bbd5c": "ThanhnvToken()", +"8a8bf82a": "batchTransferToken(address,address,bytes32[])", +"8a8c523c": "enableTrading()", +"8a8c8c42": "TokenCoin()", +"8a8cd78d": "setTurnoverTo(address,uint256)", +"8a8e2028": "getCurrentTranche(uint256)", +"8a8e3999": "_unsafeEncodeTokenId(int256,int256)", +"8a8e5239": "get_power(address)", +"8a8e5afb": "shaCommit(uint256)", +"8a8ede8a": "hasStatus(address,address,uint8)", +"8a8f1f25": "setAccountSpendingLimit(address,uint256,string)", +"8a8f5b79": "newXPAAssets()", +"8a905482": "createIpo(address,uint256,uint256,string,string)", +"8a926d0f": "maxTokenAmount()", +"8a933eac": "setSmartContractPrice(uint256)", +"8a93d70d": "MakerWithdrewEther(uint256)", +"8a93dbdf": "getInvestorDividend(address)", +"8a946339": "ERC20Token(string,string,uint256)", +"8a955876": "incrementCountSales(uint256,uint256)", +"8a957929": "setFeeAuthority(address)", +"8a957f15": "ccReleaseBlock()", +"8a95a746": "pie()", +"8a95addc": "NewPotentialOwner(address,address)", +"8a95f59f": "setHHRAddress(address)", +"8a96e27e": "CTTCToken()", +"8a973e17": "borrowEther(uint256)", +"8a97d915": "TokenMetadataUpdated(uint256,address,string)", +"8a983fbc": "KulouCoin()", +"8a98a9cc": "gen0SaleCount()", +"8a98cbd0": "SalePaused()", +"8a98deca": "setEtherCostOfEachToken(uint256)", +"8a9920b7": "emergentWithdraw()", +"8a99aa69": "_setStore(address)", +"8a99e917": "activatedPhases(uint256)", +"8a99fc87": "checkWhenContributorCanTransferOrWithdraw(address)", +"8a9b2b36": "_fillCardStruct(uint8,address,string,string,string)", +"8a9b35a7": "totalPresaleWei()", +"8a9b4067": "ren()", +"8a9b809b": "ChargCoinContract()", +"8a9ba931": "setContract(address,address,address,address,address,address,address)", +"8a9bb02a": "getRoundInfo(uint256,uint256)", +"8a9c497b": "totalBunniesCreated()", +"8a9c636c": "setAquiferInstituteCoinAdd(address)", +"8a9cb361": "hundredPercent()", +"8a9cba3c": "set_result_of_game(uint8)", +"8a9cf23a": "isEarlybird()", +"8a9d1fbf": "uniquePet(uint64)", +"8a9d3839": "setBountyWallet(address)", +"8a9d43e2": "getPlayerFee(uint256)", +"8a9d6bb1": "GEZI()", +"8a9d7982": "getActiveBetsRefund(address)", +"8a9e0876": "tokensReleased()", +"8a9e8671": "totalBid()", +"8a9f8a43": "set_block(uint256)", +"8a9fb135": "humaniqToken()", +"8a9fc475": "wipe(address,bytes32,uint256,address)", +"8a9ffb90": "transfer(string,string,bool)", +"8aa001fc": "getSecond(uint256)", +"8aa08617": "mintInitialTokens(address,uint256)", +"8aa0fdad": "mint(string,string)", +"8aa10435": "getContractVersion()", +"8aa14a07": "transferToAddress(address,uint256,bool)", +"8aa1949a": "executionMaxPerTx()", +"8aa19ef7": "setOraclizeQueryGasPrice(uint256)", +"8aa2c280": "newAuction(uint128,uint256,uint256,uint256)", +"8aa31cbf": "ICO_PRICE8()", +"8aa33776": "setMsgPrice(uint256)", +"8aa35083": "PRE_CROWDSALE_DURATION()", +"8aa3cc5a": "setMonsterAssetAddress(address)", +"8aa43284": "getNbProjects(string)", +"8aa4e240": "payoutOCDividend(address,address)", +"8aa4e315": "setExchangePrice(uint256)", +"8aa5440e": "setXCPlugin(address)", +"8aa5b2c3": "changeStartTime(uint256)", +"8aa6e6de": "approveMint(uint256)", +"8aa6f1b1": "setUltimateOutcome(bytes32)", +"8aa7d975": "DOCC()", +"8aa81eac": "ixentest()", +"8aa91406": "createIdea(address,address[],string)", +"8aa94f56": "updateUserCreatedPerformance(uint256)", +"8aa96f38": "collectAllocations()", +"8aa978be": "Pricing(address)", +"8aa986f6": "minimumContributionPhase2()", +"8aa99826": "IsTradeable()", +"8aaa559a": "ProtectedApi(address)", +"8aaaa197": "getCurrentRoundEndTime()", +"8aab811e": "setLOCdata(string,address,int256,address,uint256,string,uint256)", +"8aabb56f": "setMigrateIn(bool)", +"8aabe700": "refundTokensForAddress(address)", +"8aabff06": "getPVECooldown(uint256)", +"8aac0fa4": "transferGasFee(uint256)", +"8aac1708": "_deleteOperation(bytes32)", +"8aac61e9": "assetArray()", +"8aadf70a": "generateUniquePets(uint8)", +"8aae13cb": "getTokensByUSD(uint256)", +"8aae1f50": "withdrawOperationFees(uint32[])", +"8aae45be": "lastBonusMultiplier()", +"8aaf09a1": "getInitialInvestAddres()", +"8aaf699d": "sendCommunitySupplyToken(address,uint256)", +"8aafef65": "ITC(uint256,string,string)", +"8ab058b1": "AllocateToken(address[])", +"8ab11869": "sign(string,string,string,string)", +"8ab1a5d4": "sell(uint256,uint256,bool)", +"8ab1d681": "removeFromWhitelist(address)", +"8ab21fb6": "delegateVote()", +"8ab30e9f": "test_validShouldBe3_increaseBlocksBy100()", +"8ab3580c": "bigbomToken()", +"8ab3e33f": "removeKey(address,address)", +"8ab422a1": "addEmployee(uint256,string,string,string,string)", +"8ab476bf": "setDevelopers(address)", +"8ab49873": "isSubmitterAccepted(uint256,address)", +"8ab4ca8a": "lockRound(uint256)", +"8ab4d1ca": "PapyrusAirdrop(address)", +"8ab5212b": "teamVault()", +"8ab5fcc5": "setTypePrice(uint256,uint256)", +"8ab63380": "setContractAddresses(address,address,address)", +"8ab7f807": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8ab8064f": "continueITO()", +"8ab8342e": "changeInsurerOperation()", +"8ab905d4": "existedOnWhitelist(address)", +"8aba9215": "initialBlockHeights(uint256)", +"8abab8fb": "saleAccepting()", +"8abadb6b": "setAccountLevel(address,uint256)", +"8abb0e1f": "MRDSPrivateSale()", +"8abcb485": "InvestorBonusGet(address[])", +"8abdb005": "addCard(string,uint256,int256,string,uint256,uint256,address)", +"8abdf5aa": "serviceFee()", +"8abe09f2": "now()", +"8abe5593": "hashLength()", +"8abe59ea": "outcomeTokens(uint256)", +"8abe789b": "mulToResult(int256)", +"8abf344d": "callStages()", +"8ac01eaa": "SHARE_CRYSTAL()", +"8ac0ca36": "buyViaJohan()", +"8ac0e150": "fatigueBlock()", +"8ac0eef9": "changeUserKey()", +"8ac1a8d6": "weiRaiseLimit()", +"8ac1f290": "changelp20(address)", +"8ac2571f": "publish(address,bytes32,bytes32)", +"8ac27f5f": "investors()", +"8ac2b5f2": "_claimLoanToken(address)", +"8ac2c680": "minInvestment()", +"8ac341c6": "numModules()", +"8ac3ea2c": "recordEvaluation(uint32,uint32,uint8,uint8,uint8,uint8,uint8)", +"8ac44de2": "TBT_MINER()", +"8ac4e1d8": "TemperatureOracle()", +"8ac6a869": "isObsolete()", +"8ac78c80": "Docsign()", +"8ac81296": "ethTokenRatio()", +"8ac91be7": "unPause(bytes32)", +"8ac97efb": "whitelistDayCount()", +"8ac9fa73": "getTrustState()", +"8acb99ac": "owned(uint256)", +"8ace1732": "burnerOwner()", +"8ace4131": "CryptoTestCoin()", +"8aceaa4a": "GetTotalGamblerNum()", +"8acf94df": "setTierData(uint256,uint256,uint256)", +"8ad141ec": "updatePlayerContinusFund(address,uint256,uint256)", +"8ad14ee6": "setSuccessful()", +"8ad17f00": "setJackpotFeeRate(uint256)", +"8ad1896c": "bonusOptionsPromille()", +"8ad1d846": "getDebtorsDebts(address)", +"8ad20640": "allowedSinceReadable()", +"8ad2739b": "UMCCToken()", +"8ad2eaea": "has_token_sale_started()", +"8ad2f289": "checkPermission(address,address,bytes4)", +"8ad30473": "set_crowdsaleClosed(bool)", +"8ad46ba0": "b32toHexString(bytes32)", +"8ad476d7": "foundationReservation()", +"8ad47c47": "Dragon()", +"8ad5d779": "increaseOffsaleCountByOne()", +"8ad68253": "HostingDNS(uint256)", +"8ad682af": "ROLE_OWNER()", +"8ad8998c": "tokenTotalClaim(address)", +"8ad9a976": "getServiceStat(uint64)", +"8ad9c8c3": "GetUserConAddr(string)", +"8ada066e": "getCounter()", +"8ada1957": "TOKEN_WALLET()", +"8ada80a2": "getWinnersLen()", +"8adb208d": "withdrawDukeOwnersMoney()", +"8adba5a9": "cap4(address)", +"8add359d": "WorkerPoolHub()", +"8adde811": "test2_addingSecond()", +"8addf3ca": "performUpdateMemsize()", +"8ade246a": "makeBet(uint256,address)", +"8ae0368b": "challengeNumber()", +"8ae06cf7": "SAFeth()", +"8ae0a7ec": "uniq(uint32[])", +"8ae18dfd": "setRemainingLockDate(uint256)", +"8ae1d8d4": "StatsTotalSupply()", +"8ae3beb2": "setPending(bool)", +"8ae4200a": "revokePrivilege(string)", +"8ae470a9": "set_time(uint256)", +"8ae475a9": "notorize(string)", +"8ae5e0ec": "allowManyTokens(address[],address,uint256[],bool[])", +"8ae5e372": "getMouthValue(uint256)", +"8ae63d6d": "blockNum()", +"8ae69807": "sendAirdrop(address[],bool)", +"8ae69caa": "getCountryOwnershipList()", +"8ae76b77": "createToken(uint256,address,bool,uint256)", +"8ae79c8c": "LovelockPayment(address,bytes32,uint256)", +"8ae83bf3": "DISPLAY_CLASSIQUE()", +"8ae85b80": "storeN(uint8[],uint256,uint256,uint256)", +"8ae881a6": "initMetadata(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,address)", +"8ae8c1f3": "transferFromCrowdfund(address,uint256)", +"8ae986cf": "registrantApprove(address)", +"8aea12b6": "c_paymentChannelBonusPercent()", +"8aea2f6e": "totalFundingAmount()", +"8aeb8f98": "isNotEmpty(string,string)", +"8aebebd9": "restartCycle()", +"8aece8b0": "MRNToEth()", +"8aed434a": "oracle_values(uint256)", +"8aee0443": "getNumberOfPurchases()", +"8aee3a54": "enableATMExchange()", +"8aef16d0": "appendSupplyChanges(address,bool,uint256)", +"8aef91f5": "TimeLeftBeforeCrowdsale()", +"8af1bac9": "isMoron(address)", +"8af1c825": "SALE_MIN_BUY()", +"8af2c328": "buyTokensFor(address,uint256,uint256)", +"8af2ce26": "districtLimit()", +"8af2d152": "limit6()", +"8af49ab7": "maintain(uint256,uint256)", +"8af51833": "_transfer(address,string,address,string,uint256)", +"8af57597": "getSingleDeveloper(address)", +"8af6c259": "totalDuration()", +"8af784dc": "expectEventsExact(address)", +"8af82a2e": "getFirstUnsortedOffer()", +"8af9f493": "reap(address)", +"8afa08bd": "setDrawDate(uint256)", +"8afa46b1": "refunds()", +"8afa7c6a": "createBasket(string,string,address[],uint256[],address,uint256)", +"8afbcdd0": "setEmissions(uint256[])", +"8afbf669": "withdrawRemainingTokens()", +"8afc3605": "Ownable()", +"8afcf1c9": "_transferSignership(address)", +"8afdc26e": "currentIcoPhaseBonus()", +"8aff794d": "milestoneSystem()", +"8b00299b": "setSellComissionUnits(uint256)", +"8b008f0f": "setBuyBackPrice(uint256)", +"8b00c467": "growthTokensWallet()", +"8b0133d5": "calcBonus(uint256,uint256)", +"8b018bca": "maxDividendDepth()", +"8b01bcc3": "isJobCancel(uint256)", +"8b021df4": "safePayback(address,uint256)", +"8b0254b6": "bilateralCancelOrder(bytes32)", +"8b02c8b2": "addFundTX(uint256,uint256)", +"8b031e1c": "_checkFundingGoalReached()", +"8b034136": "totalBids()", +"8b036ee2": "PRE_SALE_BONUS_PERCENTAGE()", +"8b038f7f": "edrBalance()", +"8b03fcfd": "backersRedeemed(address)", +"8b043e08": "getPublisher(address)", +"8b044a50": "getCofounditTokenAddress()", +"8b0451d9": "CAT_PER_ETH_SECOND_EARLY_BIRD_RATE()", +"8b048091": "getTicketsSoldToday()", +"8b048645": "setCCH_edit_26(string)", +"8b05afd2": "saveBytes(bytes32)", +"8b06a662": "submitTotalSellOrder(bytes32,uint256,uint256)", +"8b072f0e": "migratePlayer(address,address,uint256,uint256,uint256)", +"8b073bb3": "changeStageBlock(uint256)", +"8b077355": "saleDistributorAddress()", +"8b07b006": "_tokensToSell()", +"8b07edba": "getI1()", +"8b08292d": "isValidAirDropForAll()", +"8b087f3f": "signToCancelAgreement(uint256)", +"8b092580": "preIcoHasEnded()", +"8b095904": "getBalancePercentageLimit()", +"8b0980d9": "Phoenixcurrency()", +"8b0b8820": "transactionStructFromBytesSeriality(bytes)", +"8b0b9cac": "setLatestTokenAllocation(address,address,uint256)", +"8b0b9ed4": "getWinningNumber()", +"8b0c7f67": "CROWD_WAVE2_PERIOD()", +"8b0d0258": "amount(uint256)", +"8b0e093c": "INEXTokenNew()", +"8b0e9f3f": "totalStake()", +"8b0ee5a3": "GAS_PRICE()", +"8b0fc015": "submitChoose(address,uint256)", +"8b0fc19a": "TokenSaleAfterSplit(uint256,uint256,uint256,address,address,bool,uint256)", +"8b10297c": "test_0_ensureControllerWorks()", +"8b104534": "tokensPerBatch()", +"8b1097c1": "setGeneMixerAddress(address,address)", +"8b110e0a": "MeshPoint(int256,string,address)", +"8b11fb3e": "secureTokenPay(uint256)", +"8b121c9d": "airdropMinting(address[],uint256[],int256)", +"8b121cf0": "TransactionEscalated(uint256)", +"8b122274": "setPriceIncrease(uint256)", +"8b128249": "MASSTokenPreSale(address,uint256,uint256)", +"8b12befe": "accrueBonusTokens(address,address,uint256)", +"8b12c25f": "updateReferralMasks(uint256,uint256)", +"8b12dc23": "DewToken()", +"8b133c56": "WatahaToken()", +"8b13b64b": "timeFrame()", +"8b13d4e0": "addTeamMember(address,bytes32,address)", +"8b13dd7b": "getAcceptance(address,uint256)", +"8b14251f": "setNarcosCoreAddress(address,address)", +"8b144851": "getCompanyWallet()", +"8b14592a": "EtherNex(uint256,string,string,uint8)", +"8b147245": "update(bytes32)", +"8b148ef6": "usedHashGuard(bytes32)", +"8b156d4c": "EthernautsUpgrade()", +"8b157515": "tokensInfoOfOwner(address)", +"8b15a605": "proposalDeposit()", +"8b169c7a": "coinageContract()", +"8b17ab2f": "calculateOptions(uint256[9],uint32,uint32,bool)", +"8b1928a5": "getAllergies()", +"8b19a476": "oraclize_query(string,string,uint256,uint256)", +"8b1acf9e": "ZcnoxToken()", +"8b1ad6c6": "AuctionFinished(address,uint256)", +"8b1b4036": "newTrade(string,string,uint256,uint256)", +"8b1b925f": "isValid(address)", +"8b1c80e2": "MAIN_SALE_BONUS_PERCENTAGE_PHASE2()", +"8b1c8792": "Blocktix(string,uint256,uint256)", +"8b1cc4f4": "tokenBurner(uint256)", +"8b1cf21c": "unlocked(uint256)", +"8b1cffe0": "newBrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"8b1d37d4": "testUserCanSignUpAndLogin()", +"8b1d67f9": "initial_disbursement()", +"8b1db910": "hasSuicided()", +"8b1f3206": "addlockAccount(address,uint256,uint256)", +"8b20468b": "updatePalette(uint8,uint8,uint8,uint256)", +"8b20d082": "_getPlayerThemeEffect(bytes,uint256)", +"8b20d9fa": "get_probability(bytes32,uint32,uint32)", +"8b214d5d": "imOwner()", +"8b21d307": "createProxyAddress()", +"8b220a31": "addProcessableAllocation(address,uint256)", +"8b223943": "stage3BeginTime()", +"8b22c7b3": "keeppetToken()", +"8b22e1df": "raiseDay1()", +"8b23397a": "_getFashionParam(uint256,uint16,uint16,uint16)", +"8b235f04": "lastSignedBlockHash()", +"8b24793d": "revealCeiling(uint256,uint256,uint256,bool,bytes32)", +"8b24c3e0": "getRequiredMajor()", +"8b257d3d": "isValidSignature(bytes32,uint8,bytes32,bytes32)", +"8b259bdb": "setupIco(uint256,uint256)", +"8b278707": "addFeeFeedBack(address,string)", +"8b278a30": "updateBanThreshold(uint256)", +"8b27c179": "maxPlay()", +"8b281018": "sendFunds(uint256)", +"8b2886ca": "setNorthPoleAddress(address)", +"8b28ab1e": "calculateFee(address,uint256)", +"8b28df17": "NCCUyen()", +"8b2909cf": "tokensFromPreviousTokensale()", +"8b290a72": "employeeShare()", +"8b294960": "balanceInTranche()", +"8b299903": "turn()", +"8b29b4fc": "setArray(string,string)", +"8b29e88b": "icoTokenCap()", +"8b2a6f58": "cancelEpochUpTo(uint256)", +"8b2a81ed": "HashGardToken()", +"8b2a9606": "addDigitalArtSellingItem(uint256,uint128)", +"8b2ad32e": "getSketchesOnOfferWithHolder(address)", +"8b2ae073": "setCouponMulFactor(uint256)", +"8b2b423a": "privateSaleAmount()", +"8b2be40e": "firstCurrentAmount()", +"8b2c434c": "CryptoGiants()", +"8b2d2dca": "setAllowMarketplace(bool)", +"8b2d4ed1": "creatorsPoolAddrs(uint256)", +"8b2de796": "housePercentOfTotal()", +"8b2e2b07": "CAKSale()", +"8b2e31dc": "STARTING_LOBSTER()", +"8b2e41b2": "getPlayerShipBattleWinsById(uint64)", +"8b2e6dcf": "publish(bytes32)", +"8b2e92ce": "rewardAngel()", +"8b2ef965": "securityDepositRegistry()", +"8b2f1652": "transcoderStatus(address)", +"8b2f7af3": "CalculateAllocatedUcash()", +"8b3049e1": "lotteryByETH5(address)", +"8b31aaca": "ZOB()", +"8b31bd50": "appreciationRate()", +"8b322791": "confirmCrowdsaleEnd()", +"8b325902": "totalTokenMintedOpen()", +"8b3272dc": "setUseService(bool)", +"8b3294e5": "addRecipientUpdate(bytes32,bytes32)", +"8b32f62a": "TEAM_AMOUNT()", +"8b33b4b2": "operations()", +"8b3437c5": "setDebugNow(uint256)", +"8b343e8f": "getMemberCredit(address)", +"8b34839f": "claimTokensEnabled()", +"8b34a4b3": "nestedSecondAllToAll(uint256)", +"8b35a244": "partner2()", +"8b360f4d": "teamSupply24Months()", +"8b36ed08": "CmmToken()", +"8b37112b": "doReclaim(address,uint256)", +"8b37691b": "TxOriginContract()", +"8b37e656": "getCallScheduledBy(bytes32)", +"8b384f9f": "getMenu()", +"8b392dff": "mModerators(address)", +"8b39bdba": "tokensDaily()", +"8b3aa967": "getDepositDelta()", +"8b3ac630": "buyShip(uint256,address)", +"8b3c4f6f": "Register(bytes4)", +"8b3ca352": "CFL()", +"8b3caf37": "Operatable()", +"8b3cda96": "IotPC(bytes32,bytes20,uint256,address,uint256,uint256)", +"8b3d10bf": "BMCTToken()", +"8b3dd749": "getInitializationBlock()", +"8b3e23d9": "preIcoSupply()", +"8b3edbdf": "changeManufacturerWallet(address)", +"8b3f0337": "extractNibble(bytes32,uint256)", +"8b3f863f": "getUserType(address)", +"8b40594d": "tokenExchangeRatePreSale()", +"8b409cec": "addRelease(bytes32,string)", +"8b42ad37": "test_twoFalseAssertNoMessage()", +"8b43234b": "endPeriodB()", +"8b449ffd": "woyaoqianqian(uint256)", +"8b44af0e": "transferETHS(address[])", +"8b44c99a": "capture(bytes32)", +"8b44f194": "TBOT()", +"8b45ab24": "SoccerBet(string,uint256,address)", +"8b45ce03": "_cancelVote(address,address,uint256)", +"8b46e1f1": "getVercodesOfCampaign(bytes32)", +"8b473c3d": "getKeysByDeviceId(uint8,uint8)", +"8b477adb": "transferFromByLegacy(address,address,address,uint256)", +"8b47c10b": "ERC721token()", +"8b490893": "CBO()", +"8b49644d": "test_invalidProposalBytecode()", +"8b4a781c": "getVoters(bytes32)", +"8b4b891b": "Duarte()", +"8b4b8a26": "updatePriceTier(uint8,uint256)", +"8b4bf731": "setEtherPriceUSD(uint256)", +"8b4c40b0": "donateETH()", +"8b4c4307": "EstLiquidationCap()", +"8b4ce7ce": "updateRegionPixelPrice(uint256,uint256)", +"8b4d199e": "recordTransaction(address,uint256,uint64,uint64,uint64)", +"8b4d3f20": "Xin(uint256,string,string)", +"8b4d56de": "createAndJoinCDPDai(uint256)", +"8b4e79c2": "delegateFromPool(uint96)", +"8b4e8a6a": "MedED()", +"8b4ef7d4": "ContractAdded(string,address)", +"8b4fac8e": "testsignature()", +"8b4fff3e": "register(address,string,string,string,uint256,string)", +"8b50cd34": "attackTile(address,uint16,uint256,bool,bool)", +"8b51365b": "set82Mode(bool,bool)", +"8b519e09": "mainSaleEnd()", +"8b51ca42": "roleList(bytes32,bytes32,address)", +"8b51d13f": "getConfirmationCount(uint256)", +"8b52463a": "commissionerAuctionCancelled(uint32)", +"8b533562": "giftsOfOwner(address)", +"8b534dd3": "goldenTicketMoved(address)", +"8b53808b": "ForwardToEIF()", +"8b53cbaa": "addNode(string,uint8)", +"8b5406af": "angelLockingPeriod()", +"8b542d74": "test_twoValidEqInt()", +"8b543b80": "maximumCredit(address)", +"8b5462da": "getMy()", +"8b55c1b3": "pushPlayer(address)", +"8b56aff8": "createPromoMonster(uint256,address)", +"8b57192b": "Woleum()", +"8b57ebc6": "claimSegments()", +"8b57f150": "newUserReward()", +"8b587b82": "createPuppySiringAuctiona(uint256,uint256,uint256,uint256)", +"8b58c64c": "getUserCap(address)", +"8b595440": "setBurnAdminApproval(address,address,address)", +"8b5a17df": "frozedCount()", +"8b5a64fb": "registerNameXname(string,bytes32,bool,uint8)", +"8b5b1c9a": "setPools(uint16,uint16,uint16)", +"8b5b4228": "listTiers()", +"8b5b9ccc": "getPlayers()", +"8b5bc550": "WPAYReward()", +"8b5c37c3": "L19_Token()", +"8b5caa66": "backendWithdraw(address,uint256)", +"8b5dc8a5": "IsAllowed(address)", +"8b5de2d9": "FunFairSale()", +"8b5e331c": "HatchEgg()", +"8b5e6679": "setNewIco(uint256,uint256,uint256,uint256,uint256)", +"8b5f42ca": "addDataStream(address,string,bytes32)", +"8b5ff1d9": "batchDeleteHpbNodeCache(address[])", +"8b603300": "updateLocation(int256,int256)", +"8b6084e4": "switchState()", +"8b615813": "fundLockTransfer(address,uint256)", +"8b629cbc": "m_ETHPriceUpdateInterval()", +"8b63c0e8": "returnTokenDepositState(address[2],uint256[7],uint8,bytes32[2])", +"8b63c86f": "setupRace(uint32,uint32)", +"8b64574b": "nextFreeze()", +"8b6497b9": "s41(bytes1)", +"8b649b94": "roundLength()", +"8b64b3af": "advisors_address()", +"8b64d70e": "owner_set_time_limit(uint256)", +"8b66bf68": "takeMyMoney(bytes32)", +"8b66d153": "STSTEST()", +"8b66e3b4": "hasPlayersInRound(uint256)", +"8b6715cd": "getTotalRankTokens()", +"8b673e7a": "setConfig()", +"8b67430e": "voteToCandidateIndex(uint256)", +"8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", +"8b67d56e": "getContributorsWallet()", +"8b67ef19": "distance(uint8,uint8,uint8,uint8)", +"8b68cd9d": "rndMax_()", +"8b692479": "addProduct(uint256,uint256)", +"8b6932f1": "saleTimeOver()", +"8b69759d": "removeAuthorizer(address)", +"8b699fbb": "KiemTra(uint256)", +"8b6aacc8": "stopSendWebGift()", +"8b6bd650": "ChangeCoinPresale()", +"8b6bf3dd": "intervalueToken(uint256,string,string)", +"8b6c1cfb": "totalHeldSupply()", +"8b6c69e5": "presaleLimitUnits()", +"8b6d6e48": "GoldPurityToken()", +"8b6d6f1d": "checksOn()", +"8b6dde89": "OwnerFreeze(uint256,address)", +"8b6df6bf": "DEMOHASHTOKEN(uint256,string,uint8,string)", +"8b6e10ac": "allBalances(address[],address)", +"8b6f8646": "CHCTokenERC20()", +"8b6f894f": "releaseEscrow(address)", +"8b6fb3ac": "GetOrganNumber()", +"8b6fc452": "tip(address,uint256)", +"8b7001d0": "ReceivedBCH(address,uint256,string)", +"8b7116e4": "reviewActiveMembers(uint256,uint256)", +"8b7261bd": "fetchAllVoteResultForNodes(uint256)", +"8b72a2ec": "transferPunk(address,uint256)", +"8b72ddf7": "setMinimalTokens(uint256)", +"8b7314e3": "BEToken()", +"8b7358a0": "getPoliceReportResult(uint256,address)", +"8b73a46b": "getNumberOfMembers()", +"8b73c10e": "buyChibiWithFcf(string,string,uint8,uint256)", +"8b745ff2": "valueBlocked(address)", +"8b76e976": "setRef(uint256,address)", +"8b77071c": "profitEth()", +"8b78a388": "reduceallrunmoney(address[],uint256[])", +"8b79bb43": "MTelCoin()", +"8b7a01e3": "depositOwnership(address)", +"8b7afe2e": "contractBalance()", +"8b7b45d9": "hashSchema(string,string)", +"8b7bcc86": "numWinners()", +"8b7bf3eb": "getAdminCount()", +"8b7c34d4": "setCompte_12(string)", +"8b7d38a1": "sPerDate()", +"8b7d6b05": "makerUnlockedKnc(address)", +"8b7e7a2e": "TBEToken()", +"8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", +"8b7f4cb7": "_calcDate0(uint256)", +"8b7fe5be": "DonationEvent(address,uint256)", +"8b800e6f": "migrationCounter()", +"8b805e65": "setUsers(address)", +"8b80bd19": "Migrated(address,uint256)", +"8b80fd5a": "extraDataToSubcourtIDAndMinJurors(bytes)", +"8b810c36": "epoch(address)", +"8b81b1af": "getLastOwner()", +"8b8211a1": "closeSale1()", +"8b82f4bc": "PAYCOINLY()", +"8b83209b": "payee(uint256)", +"8b832705": "getAmountOfGrantAccessInvestor(address)", +"8b833318": "getArtworkGroup()", +"8b8373ca": "AMBASSADOR_SIX()", +"8b8414c4": "getPoaConsensus()", +"8b845c1d": "withdrawCommisionToAddressAltCoin(address,uint256)", +"8b8519a2": "frozenTimeOf(address)", +"8b859409": "setRelease(bytes32,bytes32,string)", +"8b863095": "setContractorProposal(uint256,bytes)", +"8b87c544": "getInventory(address)", +"8b87e3b6": "bountyMinted()", +"8b886d04": "setCatchable(uint32,bool)", +"8b88a687": "getCost(address)", +"8b88c9cf": "setSpaceCraftAddress(address,address)", +"8b8c1177": "changeTokenOffer(uint256)", +"8b8c5ed9": "scheduleUnderwriteOraclizeCall(uint256,bytes32)", +"8b8d7c04": "writeConditions(uint8,string)", +"8b8e5fe2": "secondRewardPeriodEndBlock()", +"8b8ecffa": "teamAndFoundersWallet()", +"8b8f8504": "NodeManager(address[],address[])", +"8b906ca5": "enterBidForSketch(uint256)", +"8b90a378": "STATE_DONATION_ROUND_2()", +"8b91124d": "getSubscriptionClosedAt(bytes32)", +"8b91d5f6": "PRICE_CROWDSALE()", +"8b91e9a2": "getSubscriptionNonce(bytes32)", +"8b91f4a3": "ProofOfBitConnect()", +"8b9299dc": "authorizeMany(address[50])", +"8b93509f": "addTeamtoBoard(uint16,address,uint8)", +"8b935fb1": "keys(uint256,uint256)", +"8b93d3fc": "stake(uint256,bytes32,uint256,uint256,uint256)", +"8b959014": "DPC(uint256,string,string)", +"8b9596ed": "Eladporat()", +"8b95ec0c": "testAddBalance()", +"8b96801e": "soldTokensCount()", +"8b969c33": "editTokenProperties(string,string,int256)", +"8b96e41c": "_preMcFly()", +"8b9724d1": "setExclusiveRate(address,uint256,uint16,uint32)", +"8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", +"8b975028": "setCooldown(uint256,uint256,uint256)", +"8b9801b0": "TheHashSpeed()", +"8b9847a5": "AmazonBestsellerLabs(uint256,string,uint8,string)", +"8b986566": "TokenTESTToken()", +"8b9997fd": "getOwnerHoverText(address)", +"8b99b742": "arbitrateCancelCampaign()", +"8b9a167a": "aliceClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", +"8b9add74": "minCapReached()", +"8b9af5c1": "wmul(uint256,uint256)", +"8b9b1cbd": "withdrawRemainder()", +"8b9b62b1": "toB32(uint256,bytes,address)", +"8b9bde27": "setNameHashByWriter(address,bytes32,address,bytes32)", +"8b9c7a36": "initialStartPrice()", +"8b9ce419": "getBorrowAmount(uint256,uint256,bool)", +"8b9ce6a6": "create(uint256,uint256,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"8b9d6899": "lockedAmountOf(address)", +"8b9e2832": "mintRep(address,uint256)", +"8b9e4768": "_level()", +"8b9e5385": "MeterSlock(uint256,uint256,address)", +"8b9efe2d": "lastCountAddress()", +"8b9fae3f": "getETHback()", +"8b9ff6b6": "left91(uint256)", +"8ba19d4f": "EGGS_TO_HATCH_1CRAB()", +"8ba1c353": "_scaleExp(uint32,int32)", +"8ba1ebce": "updateGenVault(address)", +"8ba209b6": "isAccountVerified(address)", +"8ba28961": "spawn(uint32,int256,address)", +"8ba39ea8": "getChecksum()", +"8ba3ee95": "setConverterRamp(address)", +"8ba45307": "basePunish()", +"8ba47bdd": "ticker()", +"8ba4cc3c": "airdrop(address,uint256)", +"8ba5306b": "getDefaultRecommAddr()", +"8ba5758b": "HumanStandardToken(uint256,string,uint8,string,uint256)", +"8ba5807c": "raceCount()", +"8ba5882a": "manualOverrideEditionHighestBidAndBidder(uint256,address,uint256)", +"8ba64328": "getParentOperation(bytes32,uint8,uint8)", +"8ba677fa": "sendPremiumPack(uint256)", +"8ba7bdc4": "adminClaimTokenForUser(address)", +"8ba7e570": "executeCall(address,uint256,uint256,bytes)", +"8ba7e7f2": "createHash(address,bytes32,bytes32)", +"8ba7fe81": "updateActiveStatus(bool)", +"8ba88c9c": "internalRemoveManager(address)", +"8ba8da61": "payback(uint64)", +"8ba8ffc6": "buyGrapes()", +"8ba92763": "ABsCoin(address,uint256)", +"8ba93fcb": "magicStore()", +"8ba9a7bb": "FACTOR_4()", +"8ba9d9b0": "EmailSent(address,string,string)", +"8ba9f354": "testClearBitSuccess()", +"8baa28f7": "allocate(address,uint256,uint256,string,uint256)", +"8baa8b1f": "staker(bytes32,address)", +"8bab6718": "investorsInfo(address)", +"8bab8791": "testPkgUpdate()", +"8baba52a": "allStates()", +"8bace235": "kycAddresses(address)", +"8bace717": "getPresaleAllocation(address,address)", +"8baced64": "isInPool(address)", +"8bad5de9": "checkMinBalance(address)", +"8bad8d8e": "reserveManyTokens(uint256[],uint256)", +"8badbb8b": "ETPToken()", +"8bae2a03": "getStoredFib()", +"8baecc21": "revive(uint256)", +"8baeefce": "stopTrade()", +"8baf612f": "Ownable2()", +"8baf7a0c": "CryptoPrueba()", +"8bb04875": "executeRuling(uint256)", +"8bb0faee": "setRef(string,string)", +"8bb19439": "isPending(uint256,uint256)", +"8bb1a5ef": "executeDeal(uint256,string)", +"8bb204d4": "setCaptainIndexToCount(uint32,uint256)", +"8bb28de2": "minShare()", +"8bb307a2": "getMyTokenBalances()", +"8bb36848": "pollDataMultihash()", +"8bb55cae": "beforeExecuteForFutureBlockCall(address,uint256)", +"8bb5d9c3": "setCounter(uint256)", +"8bb64abe": "releasableBonus(address)", +"8bb75533": "split(string,string)", +"8bb7819f": "curMaxBet()", +"8bb87f5b": "isTank(address)", +"8bb88db6": "EtherSmart()", +"8bb8b2db": "getTokenPerEth()", +"8bb93173": "getNextTimeAtkPlayer(address)", +"8bb9fe58": "addStruct(uint256,string)", +"8bba143c": "getNumberOfContributors()", +"8bbade4e": "usdEth()", +"8bbb594a": "createActiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", +"8bbb5af7": "test1Fails()", +"8bbb668b": "ItemSelling()", +"8bbb9fca": "buyPresale(address)", +"8bbbc7a2": "BitnanRewardToken(address)", +"8bbd309c": "BLTCoin(address)", +"8bbd7f87": "removeMemberById(uint256,address,address)", +"8bbda7e3": "setContent(string,bytes)", +"8bbdcf67": "_createProduct(uint256,uint256,uint256,uint256,uint256)", +"8bbdfaa6": "approveChange(address,uint256,bool)", +"8bbe005d": "setGateGas(uint256)", +"8bbe4719": "donateToPool()", +"8bbec9e4": "WALLET_T8EX_ADMIN()", +"8bbf037c": "addService(string,string,int256,uint256,uint256,uint256)", +"8bbf51b7": "DOW_WED()", +"8bbf7330": "FlyCareToken()", +"8bc008e6": "xra()", +"8bc04eb7": "DECIMALSFACTOR()", +"8bc05609": "setNotaryAddress(address)", +"8bc05808": "addLockTokenAllocation(address,uint256)", +"8bc05833": "setTotalSupply()", +"8bc0b887": "initializeAfterTransfer()", +"8bc12fd1": "cancelOrder(address[4],uint256[7],bool,uint8,uint8,bytes32,bytes32)", +"8bc19bda": "setupRaffle(string)", +"8bc19c04": "getPlacedNotes()", +"8bc30096": "numDrops()", +"8bc4a65f": "unPackDecision(uint256)", +"8bc5816a": "startStage1()", +"8bc5aab0": "FundsRecovered()", +"8bc5b3c5": "getExchangeInfo()", +"8bc5f845": "sendToken(address[],uint256)", +"8bc6a72b": "adjustCut(uint256,uint256)", +"8bc70769": "BTToken(uint256,string,uint8,string)", +"8bc7fa9c": "getCrop(uint256)", +"8bc82c9b": "registeredInMeeting(address,uint256,uint256,uint256)", +"8bc85b03": "bonusEnd()", +"8bc88d7c": "nameMiner(uint256,string)", +"8bc97754": "popcnt64(uint64)", +"8bc9b67f": "endOfGame(address)", +"8bca15d6": "balancesCanSell(address)", +"8bcad96a": "AdminstratorAdded(address)", +"8bcb4250": "_bytesToUint(bytes)", +"8bcb6f01": "getLoserAddressList()", +"8bcba0b2": "_transferToContract(address,uint256,bytes)", +"8bcba45a": "secondPartOfTeamTokensClaimed()", +"8bcbb60b": "betsArePayed(address,uint256)", +"8bccae3f": "tokensForCrowdsale()", +"8bccb1b4": "EosPizzaSlice(uint256)", +"8bccbf62": "setShares(address,uint256)", +"8bcd0680": "CrowdsaleiPRONTOLiveICO()", +"8bcddd5d": "getLogsNum(address,uint256)", +"8bcdecd7": "getIssuerStatus(address,address)", +"8bce09fa": "resolutionProposal(string,string,address,uint256)", +"8bcea54f": "viewComponent(address,uint256)", +"8bcf0eea": "GCAP()", +"8bcf649d": "GetRank(uint16)", +"8bcff416": "asyncSend(address,address,uint256)", +"8bd031fe": "submitIssue(uint256)", +"8bd0ba67": "addChild(address,address)", +"8bd0f12b": "_deleteBool(bytes32)", +"8bd1b610": "deleteTeller()", +"8bd25857": "joinManual(address,uint48)", +"8bd30ba1": "KekToken()", +"8bd317eb": "reclaim(address,uint256)", +"8bd379b5": "itDevAddr()", +"8bd50488": "Policy(string,address,address,string)", +"8bd50c1f": "privateSaleCloseTime()", +"8bd53bea": "oraclizeFees()", +"8bd56066": "WXC()", +"8bd5d30f": "scoreGroups(bytes32,bytes32,bytes32,bytes32)", +"8bd61f26": "tokensRemainder()", +"8bd66bb3": "ModifyMine(uint256,bool,string,uint256,string)", +"8bd6da16": "distributeXAIN(address[],uint256,uint256)", +"8bd76535": "currentExchangePrice()", +"8bd7920d": "BitcoinCashPrivate()", +"8bd7df6e": "sharePot()", +"8bd82b20": "getInCar()", +"8bd8669e": "transferAllTokensToOwner()", +"8bd87a69": "TimeMachineToken()", +"8bda1540": "getOldBalance(uint256,address)", +"8bdac196": "KLSToken(uint256,string,uint8,string)", +"8bdbbca9": "GameChannel(address,uint256,uint256,address,address,uint256)", +"8bdbee39": "str_length(string)", +"8bdc16fe": "changeHouseOracle(address,uint256)", +"8bdc558d": "hash_ack()", +"8bdc5a5f": "withdraw(address,address,uint8,bytes32,bytes32)", +"8bde7fc3": "ClickButton()", +"8bdff161": "getBonus()", +"8be1049d": "getTypeFromIndex(uint256,uint256)", +"8be13d71": "countOpenPackage()", +"8be18df9": "getOutcomeOfFirstPeriodByEntity(uint256)", +"8be3a897": "_v3()", +"8be3df0a": "vipPlacementNotDistributed()", +"8be4339b": "packsPerClaim()", +"8be4886c": "PUBLIC_RESERVED()", +"8be52783": "decreaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", +"8be7a96a": "registerLockedTokens(address,uint256,uint256)", +"8be7f4f5": "FOUNDER_FUND_1()", +"8be7fe95": "CreateDigitalAssetToken(uint256,uint256,string,string,string,string)", +"8be8f944": "lastBlock_f6()", +"8be909a3": "mainSaleWeiCap()", +"8be90b52": "averageGasPrice()", +"8be94a45": "Gallery_MuYi_No1()", +"8be97285": "MIN_TOKENS_TO_EXCHANGE()", +"8be9ca21": "GerritCoin()", +"8bea6a39": "safeSubtr3DL(uint256,uint256)", +"8beac22d": "STAEtoken()", +"8beb1af1": "PresalePool(address,address,address,uint256,uint256)", +"8beb60b6": "setAdminFee(uint256)", +"8beb9f12": "moveBlockValue(uint8,uint8,uint8,uint8,uint256)", +"8bec5b31": "reserveOwnership(address)", +"8bec683f": "getID_control()", +"8bee241b": "delegateOperation()", +"8bee78e6": "buySharesFromListing(uint256)", +"8bef5222": "CONFIG_MAX_TICKETS()", +"8bef7ba5": "updateBalances(address)", +"8bf0af3e": "purchaseTokens(uint256,uint256)", +"8bf13a30": "UTCStop()", +"8bf34237": "addPartner(address)", +"8bf35316": "givePermission(address,address,uint256)", +"8bf4515c": "read(bytes)", +"8bf57f4e": "getTimestamp(address)", +"8bf60537": "setDividendManager(address)", +"8bf62f14": "EtheropolyShrimpFarmer(address)", +"8bf68690": "mintToken(uint256,address,uint256,bytes32,uint8)", +"8bf74527": "EMISSION_FOR_SALESTAGE7()", +"8bf85ef0": "SigmaIOToken()", +"8bf87123": "_transfer(address,address,uint40)", +"8bf8a338": "getAttribute(bytes32,string)", +"8bfa4b4e": "tokenAdvisor()", +"8bfac3bb": "updateBalances(address,bytes32,string,uint256)", +"8bfb07c9": "release(address,address,uint256)", +"8bfb85c3": "agreeAmendment()", +"8bfbc753": "setEthBonus(uint256)", +"8bfc2f33": "delegateDAOTokens(uint256)", +"8bfe0aec": "getNextExit(address)", +"8bfe4e0b": "GaillardToken()", +"8bfe88c5": "ArteufToken(address,address)", +"8bffc74d": "mainstreetToken()", +"8bfff5a0": "setPurchaseableMode(uint256,bool,uint256)", +"8c003134": "Raffle_ID()", +"8c00ce76": "unhalt_30day()", +"8c0124fb": "transferAndFreezeMulti(address[],uint256[],uint256[],uint256[])", +"8c02d13f": "MAX_NUMBER_OF_PREMIUM_SALES()", +"8c02e029": "save2(address,bytes,string)", +"8c0320de": "payforflag(string,string)", +"8c041d7c": "editProfile(string,bool,string,bool,uint256,bool,bool,bool,string,bool)", +"8c042317": "startQuater()", +"8c04b985": "readSellTokenAmount()", +"8c063686": "getRelayAuthority()", +"8c06fa18": "PRICE_PREICO()", +"8c088d98": "winMultiplePer()", +"8c08ae0d": "withdrawEtherRemaining()", +"8c09138f": "fourth()", +"8c0989ab": "MultiServiceFactory(address)", +"8c09bfdc": "shake(uint256)", +"8c0a41f2": "gibtesnet()", +"8c0b1588": "createNFT(uint256,address,bytes32,bytes32,bytes4)", +"8c0b372d": "e6c65e93()", +"8c0b4ae5": "setGenesMarketAddress(address,address)", +"8c0bae5b": "releaseRedTeamTokens()", +"8c0c0368": "_confirmOneSell()", +"8c0c9c07": "updateCampaignAbi(string)", +"8c0cf897": "develop()", +"8c0d0c29": "mark()", +"8c0d4199": "lock(address,address,uint256,uint256,bool)", +"8c0d6593": "CustomDealICO(uint256,uint256,uint256,address,uint256,uint256)", +"8c0dacf2": "deleteRecord(bytes32)", +"8c0dee9c": "operatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", +"8c0e156d": "scheduleCall(bytes4,uint256,uint256)", +"8c0e299a": "proposeCompanyAllocation(address,uint256)", +"8c0e2a31": "regProxy(address)", +"8c0e45f6": "test_openRegistryRules()", +"8c0ead61": "_updateMLBPlayerId(uint256,uint256)", +"8c0ec0d1": "changeClient(address)", +"8c0f082c": "setFLKDForGas(uint256)", +"8c0f8e11": "getWorkerScore(address)", +"8c0ff5b7": "maxWithdrawal()", +"8c10671c": "addManyToWhitelist(address[])", +"8c115322": "isP2PKH(bytes,uint256,uint256)", +"8c118cf1": "verify(uint256,uint256,uint256,string,string,bytes32[2])", +"8c12324a": "Mire()", +"8c1256b8": "Recovered(address,uint256)", +"8c12c35c": "BTWO_CLAIM_PERCENT()", +"8c12d8f0": "arithmetics(uint256,uint256)", +"8c133a77": "previligedBalances(address)", +"8c133c25": "changeBetPrice(uint256)", +"8c13aabe": "lockStages(uint256)", +"8c14db73": "testThrowsSaleWalletIncorrectBlock()", +"8c155b5b": "tradeForTokens(address[2],address,bytes,bytes)", +"8c156213": "generateHash(address,string)", +"8c160095": "deleteInt(bytes32)", +"8c165146": "initSale1()", +"8c165932": "sendShip(uint32,uint32,address)", +"8c167076": "setHoldersList(address)", +"8c172fa2": "getEvent(bytes32)", +"8c17c5ab": "setNowTime(uint256)", +"8c17fc91": "getWeaponsArmy2(uint256)", +"8c19773f": "addBlock(address)", +"8c19c175": "getStageState(uint256)", +"8c19d2ca": "setCombatWonTeam(uint256,uint128)", +"8c1ab426": "WithdrawalofFunds(uint256)", +"8c1c7acc": "icoThreshold2()", +"8c1d01c8": "defaultPayment()", +"8c1d4a0a": "GreenEcoMinerToken()", +"8c1d8941": "transferLockedBalances(address,address,uint256)", +"8c1d92af": "distributePresaleTokens(address[],uint256[])", +"8c1d9f30": "isValidCandidate(bytes32)", +"8c1e04a6": "updateGenerationDict(uint256,uint64)", +"8c1e21da": "tokenPreSale()", +"8c1f85e5": "FeeSetup(address,address,uint256)", +"8c206979": "_freeze(uint256)", +"8c2081b5": "RewardsCoin()", +"8c217d06": "zsjz(uint256,string,string)", +"8c21f6bb": "getLockedGroup(uint8)", +"8c21ffba": "supplyLockedB()", +"8c22ac8b": "Account_frozen(address)", +"8c2305fd": "stakeBela(uint256)", +"8c25466a": "mintPreSale(address,uint256)", +"8c254c0b": "walletDev()", +"8c259654": "getRegistryDataRegistry()", +"8c25f54e": "linkContracts(address)", +"8c261e2c": "getHashRightPad()", +"8c26691e": "RanToken(address,address)", +"8c267b97": "cmoAddress()", +"8c26a340": "generateOrderByAdminWithPayee(address,address,address,uint256,string,string,string)", +"8c26c937": "STQPreICO3TestHelper(address,address)", +"8c26ebf7": "EgretiaToken()", +"8c272dba": "_buyin(address,uint256)", +"8c273a98": "getRefBonus(address)", +"8c2779f5": "gold_token_storage()", +"8c28c16e": "STAGE_TWO_ETHRaised()", +"8c28fd6e": "mintHelper()", +"8c2962b9": "setBuyAgent(address)", +"8c299d0c": "AdoptionOfferCancelled(bytes5)", +"8c29bce5": "setJoule(address)", +"8c2a5938": "setAllowedToBuyBack(bool)", +"8c2b8283": "WeiLaiExToken()", +"8c2d1549": "getTotalMined()", +"8c2d396f": "TelegramOpenNetworkContract()", +"8c2e6b3f": "ChangeSellRate(uint256)", +"8c2ec28d": "TestCTR()", +"8c2f04d9": "distributeUsingVaults(uint256,uint256,uint256,address)", +"8c2f6458": "calculatePreviousPrice(uint256)", +"8c30079a": "generateTeamTokens()", +"8c30779b": "getAvailableVestingAmount(address)", +"8c3088c6": "HeritableWallet(address,address,uint256)", +"8c308a71": "Anemoi(uint256,string,string)", +"8c3135f2": "poolTokenBalance()", +"8c31d67e": "getNoOfSoldToken()", +"8c324604": "MAX_TOKENS_EARLY_INVESTORS()", +"8c32c568": "Airdrop(address,uint256)", +"8c32e774": "isMaxTokensReached()", +"8c33417c": "WankCoin()", +"8c335b4b": "oceanBonus()", +"8c339a58": "QSHUCOIN()", +"8c33a5c4": "RESEARCH_AND_DEVELOPMENT_TOKENS_PERCENT()", +"8c343aee": "TestIssued()", +"8c346690": "toggleHalt(bool)", +"8c34dbec": "bitcoing()", +"8c363fda": "AbstractToken()", +"8c366dd3": "newinitialSupply(uint256)", +"8c3692c3": "popToken(address)", +"8c36ae89": "clearReward(address)", +"8c374d8d": "releaseApproval(address)", +"8c3753d7": "WEI_PER_FINNEY()", +"8c377ca6": "UnsetUsername(string,address)", +"8c379133": "Water(string,string)", +"8c37ce04": "MeetTokenBase()", +"8c37e152": "bountyTokensReserve()", +"8c37e31e": "setSpawningManager(address)", +"8c37edc4": "USN(address,address,bytes32,uint256,uint256,uint128)", +"8c382e22": "checkIsAssetPartOwner(bytes32,address)", +"8c3846e8": "ConsumerAddition(address)", +"8c38eddd": "_clearAddressFromCrowdsale(address)", +"8c397363": "setFinancialAddress(address,address)", +"8c39bf96": "DredgrSwapSolo(bytes5,bytes5,bytes32,bytes32,uint256,bytes32,bytes32,uint256)", +"8c39cb93": "makeClaim(bytes32,string,uint256,bytes32,uint256,uint256,uint8,uint256)", +"8c3b4fea": "_addVesterManager(address)", +"8c3b6f0e": "getCrystalGeneKindWeight(uint256)", +"8c3c00aa": "overdraftPeriodAmount()", +"8c3c4b34": "getSaleStatus()", +"8c3d5897": "MANHATTANPROXY2NDAVE()", +"8c3e1ff1": "modexp(bytes,uint256,bytes)", +"8c3e9e1a": "verifyYourself(string,uint256)", +"8c3f71b2": "_getCurrentTradableToken()", +"8c3f914a": "spread(bool)", +"8c3fae8c": "BeeUnity(uint256,string,string)", +"8c404cf1": "stablesCities(uint256)", +"8c41399c": "view30()", +"8c41d101": "LogAgreementAccepted(address)", +"8c421815": "RefundedTokens(address,uint256)", +"8c43a6f0": "updateBlockVoterProposal(uint256,address,bytes32)", +"8c4406c1": "setInputName(uint256,uint256,uint256)", +"8c4430b4": "setFinalLotteryAddress(address)", +"8c44cb27": "creationQuantity()", +"8c44dfb5": "bids_computed_cursor()", +"8c45cf24": "addJobContractMessage(uint256,string)", +"8c461e97": "setValueAirDrop(uint256)", +"8c46c7cd": "betAmount_()", +"8c47ddcc": "refundOwner()", +"8c4899ab": "ownerOfPlanet(uint256,uint256,uint256)", +"8c497285": "ChangeAddressTrust(address,address,bool)", +"8c4a6f62": "delMinter(address,address)", +"8c4af723": "changeNewRoundDelay(uint256)", +"8c4b0c58": "FrozenProfit(address,bool)", +"8c4b0e7e": "setOrganiser(address)", +"8c4b7300": "ViewBet()", +"8c4b87d2": "chris()", +"8c4c26a3": "BunToken(address)", +"8c4c564d": "deletePoll(bytes32)", +"8c4d3193": "getOrderDealTimeInterval()", +"8c4d59d0": "ticketCounter()", +"8c4dd5cd": "Democracy()", +"8c4e3f32": "_setApprovalForAll(address,address,bool)", +"8c4e8c21": "nextMintTime()", +"8c4e9c50": "prepareSell(address,uint256)", +"8c4ef31a": "getremainTokensperType(uint8)", +"8c4f7dae": "getMatchCount()", +"8c500418": "getICODate()", +"8c50d756": "bidSuccess(uint256,address,uint256)", +"8c518026": "_preSale(address,uint256)", +"8c523e27": "setFechHpbBallotAddrAddresss(address)", +"8c529628": "getVoteFromProposal(uint256,uint256)", +"8c52dc41": "enableRefunds()", +"8c5344fa": "countThisRecursive(uint256)", +"8c534d54": "getTokenTxnNum()", +"8c53f61d": "receiveETH(address)", +"8c546f81": "GNT()", +"8c549ef7": "COLOR_BROWN()", +"8c55041c": "Announcement(address[],uint256,uint256)", +"8c551742": "createItem(string,uint256)", +"8c55284a": "confirm(uint256,bool)", +"8c5597fd": "finalizeContributionEvent()", +"8c561592": "canUpdateInvoicingAddress(string,address)", +"8c564ebf": "freezeBypassing(address)", +"8c5871bf": "getLocksUnlockDate(address,uint256)", +"8c590917": "contribute(uint256,uint256)", +"8c590b5d": "getAllMatingAnimals()", +"8c59f7ca": "cancelOrder(address[5],uint256[6],bool,uint8,uint8,bytes32,bytes32)", +"8c59fba0": "DATP()", +"8c5a03bb": "SimpleDistributor()", +"8c5aae96": "LocalsMembership()", +"8c5ae183": "RemoveMod(address,address,bool)", +"8c5b830e": "getInviteeInfo(uint256)", +"8c5cc61c": "approvedreg(string,string,string,string)", +"8c5ce82a": "powerTest(uint256,uint256,uint32,uint32)", +"8c5d5e87": "ownerSetMod(bool)", +"8c5e06b1": "Channel(address,address)", +"8c5e2b0e": "MainSaleStart()", +"8c5f2d5d": "get_all_payment(uint256,address)", +"8c5f6d5a": "SetDebugExtra(uint32,uint8)", +"8c5f997e": "NewEntry(address,uint256,uint256,uint256)", +"8c5fb7fb": "modifyMember(string,string,string,string)", +"8c60e806": "closeContributions()", +"8c614502": "addCountry(address,uint256)", +"8c618066": "addressOfName(string)", +"8c6310ac": "NextOpen()", +"8c638152": "setApoderado(bytes32,bytes32,bytes32)", +"8c64400d": "updateTierDuration(uint256,uint256)", +"8c648117": "actualPrice()", +"8c6486c4": "sendRegistration()", +"8c64eb4f": "switchCrowdState()", +"8c655550": "advisorsAllocatedAmount()", +"8c6589b2": "getLastSTCPrice()", +"8c65f15d": "clearBonuses()", +"8c662ffa": "LogCollect(address,uint256,uint256)", +"8c663229": "lastSellPrice()", +"8c663ffc": "getBounsWithRoundID(uint256)", +"8c66c9fc": "findBest()", +"8c66d04f": "setFeeCalculator(address)", +"8c66f294": "distributeFeeRewards(address[],uint256)", +"8c676aaa": "CUZ()", +"8c67f63a": "calculatePayment(uint256)", +"8c682bde": "setWinnerAndWithdrawAllFunds(address)", +"8c6838ba": "getPost()", +"8c68bc3e": "SetContractorManager(address)", +"8c69554d": "OwnerRefunded(address,address,address,uint256)", +"8c69930d": "getNewFallbackDepositEffectuation()", +"8c69c559": "Crypbest()", +"8c6aefcf": "chip(uint256)", +"8c6b6085": "supportNewVoter(address,address)", +"8c6ba233": "isLateBy(address)", +"8c6c8323": "buyTokens(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"8c6f2ec1": "setCompte_17(string)", +"8c6fc437": "standardICO(string,string,uint8,address,uint256[],uint256[],address[2],address[])", +"8c6fd8ec": "removeByIndex(uint256)", +"8c701ba8": "releaseRoots()", +"8c717138": "lastBlock_a1Hash_uint256()", +"8c71bed2": "unlockTeamTime()", +"8c71eaf1": "TokenBEN(uint256,string,uint8,string)", +"8c71ec16": "create(address,uint256,uint256,uint256)", +"8c7229cb": "pantura()", +"8c727fa3": "oldCirculatingSupply()", +"8c72c54e": "publisher()", +"8c72d4a4": "getStageTokenAmount(uint256,uint8)", +"8c733fdf": "weiToUsd(uint256)", +"8c73596c": "init(address,uint8,uint256,uint256,uint256,uint32,uint256)", +"8c748334": "cancelBuyOrder(uint256,uint256)", +"8c74c5c0": "bonusOff()", +"8c74d62c": "LockedInToken()", +"8c7565dc": "ADChainGrants(bytes32,bytes8,bytes32,bytes)", +"8c756b1d": "balanceByAd(address)", +"8c7698df": "lowerCase(bytes32)", +"8c76b4b7": "addTrustedContracts(address[])", +"8c771a8e": "newEscrow(address,uint256)", +"8c787768": "abbcwalletcoin()", +"8c789fb2": "setTokenBudget(address,uint256)", +"8c794114": "prizeWithdrawal()", +"8c79a24d": "refName(uint256)", +"8c79ca5d": "AddMember(address,uint256)", +"8c7a63ae": "getTokenInfo(uint256)", +"8c7a8140": "extractVestedOptionsComponents(uint256,uint256,uint256)", +"8c7c35b9": "internal_tester()", +"8c7c4016": "GameLogicContract()", +"8c7c9e0c": "eth()", +"8c7d1e8a": "MyKillerContract()", +"8c7d3241": "total_iou_available()", +"8c7d58aa": "isTimeExpired()", +"8c7dd9ec": "_canReveal(address,address)", +"8c7e1227": "setupStakingPriceFeed()", +"8c7e5008": "maxDonationInWei()", +"8c7e763b": "HSCC()", +"8c7f7806": "AfeliCoinPresale(address)", +"8c7fcd46": "BLVToken(uint256,string,string)", +"8c80fd90": "setMinStake(uint256)", +"8c812c51": "PhoenixExchangeFund()", +"8c817b6e": "registered(uint256,address)", +"8c82790b": "getReg3()", +"8c82dccb": "updateStatuses(bytes32[])", +"8c832ef4": "GalaxyCoin(uint256,string,string)", +"8c849f3f": "getMemes()", +"8c85ec66": "getCurrentDayRestDepositLimit()", +"8c864dfe": "_updateChecksum()", +"8c86ec20": "NMC(uint256,string,string)", +"8c877527": "allowTransfert()", +"8c87b2fc": "Identity(bytes32,bytes32)", +"8c882958": "LEToken()", +"8c88512f": "initializeCrowdsale(address)", +"8c88752a": "ContributorList(uint256)", +"8c8885c8": "setDecimals(uint256)", +"8c88b85f": "_finalizeRound()", +"8c88d716": "transferIfRequirementsMet(address,address,uint256,bool)", +"8c89b1c7": "setINCENTIVE_POOL_ADDR(address)", +"8c8a03ac": "setBucketManager(address)", +"8c8a261a": "devMiningRewardChanges(uint256)", +"8c8a40bd": "hashNotFound(address)", +"8c8b31ab": "dhanaToken()", +"8c8b6fc5": "challengeSubmitted(bytes32,bytes32)", +"8c8b802e": "getLimitPeriod()", +"8c8b9d54": "setEmployeeStorage(address)", +"8c8bc5ce": "ChangeICOStart(uint256)", +"8c8d067f": "chosenProposal()", +"8c8d2ede": "team1()", +"8c8d36c2": "THANKSTEST3()", +"8c8d98a0": "toTimestamp(uint16,uint8,uint8)", +"8c8df7cd": "GOTokenCrowdsale()", +"8c8e2478": "convertTokens()", +"8c8e5f1f": "BlockTubePrepaid()", +"8c8e8fee": "token_address()", +"8c8ee490": "checkReleaseAt(address)", +"8c8f94f5": "DeletePrice(uint256)", +"8c8f95fb": "lockFunds(uint256)", +"8c8f9c0e": "issueTokenToAddress(address,uint256,uint256)", +"8c8fc30b": "addAd(uint32,uint32,string,string,string,uint256)", +"8c907c0d": "LanderToken(uint256,string,uint8,string)", +"8c90b2ea": "pay055(address)", +"8c9151ae": "voteProposal(uint256,bytes32)", +"8c91bd3e": "addMoves(uint256,uint256[2])", +"8c91daac": "startRoundSeed()", +"8c920a38": "testSanityCheck()", +"8c924e9c": "incrementRead()", +"8c93256e": "transferReward(address)", +"8c934d71": "forceRefundCfd(uint128)", +"8c937da3": "WALLET_LB_TEAM()", +"8c9425e4": "privateLockAddress()", +"8c943b6c": "setDistrictCode(bytes32)", +"8c944339": "setActiveSkin(uint256)", +"8c944bb2": "_createPrimordialLot(address,uint256,uint256,uint256)", +"8c945d38": "takeOffItem(uint256,uint8,address)", +"8c94db38": "MMCoin(uint256,string,string)", +"8c9512bc": "companyTokens()", +"8c9515ea": "doPayouts(uint256[49],address[49],uint256)", +"8c9540d3": "isCommittee(address)", +"8c95acee": "getTreshold(uint256)", +"8c96a2c9": "getAssetPackPrice(uint256)", +"8c96a538": "COO_SHARE()", +"8c96e34b": "betIsSettled()", +"8c98117c": "getBill(uint256,uint256)", +"8c988a46": "isLinkedWallet(address)", +"8c9924d5": "AddrMarketing()", +"8c99d363": "updateTokensToInvestor(address,uint256)", +"8c9a4f13": "FundsTransferred(address,uint256)", +"8c9ae56f": "QueryPlayerBonus(address,uint256)", +"8c9b2cd1": "ModultradeProposal(address,address,address)", +"8c9c2977": "newMember(uint8,bytes32,address)", +"8c9ce20c": "_addressNotNull(address,address)", +"8c9cf205": "SignVersion(string,string)", +"8c9d8300": "withdrawForAdmin(address,uint256)", +"8c9dd650": "Etherlott()", +"8c9e81e5": "triggerICOState(bool)", +"8c9ecd00": "toDec()", +"8c9f7074": "setInterestFeePercent(uint256)", +"8c9f7b39": "endSale(address)", +"8c9f8935": "ClaimSet(address,address,bytes32,bytes32,uint256)", +"8c9fcfe2": "payForUpgrade(address,uint256)", +"8ca0dd20": "tgeCap()", +"8ca10f9b": "sendRemainingTokens(address)", +"8ca17755": "etheraffle()", +"8ca17995": "divest(uint256)", +"8ca3b448": "addUser(address,address)", +"8ca3c553": "setData(string,string)", +"8ca47688": "WhiteListUpdated(address,bool,address)", +"8ca4eef6": "getBuild(bytes32)", +"8ca517dd": "getActiveBuyDetails(bytes32)", +"8ca51f82": "setMinimumClaimValue(uint256)", +"8ca5d525": "removeAllowedHICAddress(address)", +"8ca5da35": "mintManual(address,uint256)", +"8ca6c287": "InsurContract()", +"8ca6f747": "potatoBalanceOf(address)", +"8ca74163": "BZCToken(address,uint256)", +"8ca79351": "ethPriceIn()", +"8ca84d40": "preparationPeriodTrainingFeeMultiplier()", +"8ca9ac01": "LogBeerClaimed(address,uint256)", +"8ca9e721": "finalizeCrowdSale()", +"8caa0083": "teamCount()", +"8caa5c91": "DataBase()", +"8caaaae6": "totalWeiPrice()", +"8caaab4d": "verifyProofOfStakeInternal(uint256,bytes32,bytes32,uint256,bytes32[],uint256[],uint256,uint256)", +"8caad7b5": "changeMinDepositAmount(uint256)", +"8caba7b7": "startCharging()", +"8cac1939": "TOKEN_TEAM()", +"8cac3b42": "addDividend()", +"8cac5f55": "feeForTheStakingInterval()", +"8cad5826": "FundTransfer(uint256,bytes32,address,address)", +"8cadaa5d": "TokenFreeze()", +"8cadd6a2": "getVestedBalance(uint256,uint256,uint256,uint256)", +"8cae013e": "signatureFunc(bytes)", +"8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", +"8cae59dd": "heapSort(uint32[])", +"8cae711f": "mintLiquidToken(address,uint256)", +"8cb09d4d": "GCTToken()", +"8cb0a511": "approve(uint256,address,uint256)", +"8cb18ef6": "needFightToAdult()", +"8cb1b614": "setWhitelisted(address,address,uint256)", +"8cb1e9c1": "unlockedAt()", +"8cb240b0": "saasPayment(address,uint256)", +"8cb36aef": "requestCoinToUSD(string,bool,uint256,uint256)", +"8cb3728c": "getAllRevisionTimestamps(bytes32)", +"8cb39385": "getMinBid()", +"8cb3c89f": "loadEthBalances()", +"8cb47a2f": "CrowdForceSampleToken()", +"8cb5497c": "setOperator(bytes32,bool)", +"8cb56999": "GetExpireTime(uint256,uint256)", +"8cb5a0c0": "removeCoordinator(address)", +"8cb858cb": "PRCVToken(uint256,string,uint8,string)", +"8cb996df": "LogMigrationEnabled(address)", +"8cbb02ad": "Marijuana()", +"8cbb13e7": "TokenRHT()", +"8cbb6593": "SHNZ2()", +"8cbba6cf": "isPreWhiteListed(bytes32)", +"8cbbe25f": "NIMFA_PER_ETH_PRE_SALE()", +"8cbc8c0b": "lockholderNumber()", +"8cbcbca2": "_payChicken(address,uint256)", +"8cbcca07": "fillBuyOrder(uint256)", +"8cbdf1d1": "mintARC(address,uint256)", +"8cbe775a": "Bitdepositary()", +"8cbe898d": "CommitteeLimits(uint256,uint256)", +"8cbeb340": "ControlContract(address)", +"8cbf4145": "confirmPrintProxy(bytes32)", +"8cbfa1ec": "quoteAsk()", +"8cc02403": "cobrarImpuesto(uint256)", +"8cc04ebb": "_appendUintToString(string,uint256)", +"8cc17117": "forceRecoverCollateralInternal(address)", +"8cc2f547": "DiceGameCrowdsale(address)", +"8cc30c6f": "buyStageDataRecord(uint256,uint256,uint256,uint256)", +"8cc34ed7": "zilla_remaining()", +"8cc40d71": "dividend_amount()", +"8cc4ab11": "getPurchaseTimestampEnds()", +"8cc50ecd": "addBlock(string,uint256,string)", +"8cc519bf": "companyTimelock()", +"8cc51eda": "kitties(uint256)", +"8cc5510f": "setTeamAddress(address,bool)", +"8cc55473": "bulkTokenMint(address[],uint256[])", +"8cc57368": "getUserTokens(address,uint32)", +"8cc5cde2": "isLunyrToken()", +"8cc5e56e": "revokeLockByIndex(address,uint256)", +"8cc60a61": "isStoreActive(uint256)", +"8cc60eca": "SS()", +"8cc63bfb": "marketingFunds()", +"8cc6acce": "updateConfig(bytes)", +"8cc78a40": "option20symbol()", +"8cc7ea0e": "Xian()", +"8cc89e1b": "TCCoin()", +"8cc8baaf": "getBuyPriceTimes()", +"8cc8c236": "_transfer(address,uint256,bytes)", +"8cc9638c": "fundBurn(address,uint256)", +"8cc98bc3": "approveEliminate(address,uint256)", +"8cc99aa3": "getAmountForCurrentStage(uint256)", +"8cca5a3f": "withdrawWallet(address)", +"8cca8f64": "canClaimRefund(address)", +"8ccb381b": "tenthTotal()", +"8ccb4daf": "getPositionMaxDuration(bytes32)", +"8ccb59e8": "revealWinner(uint256)", +"8ccb9f2d": "del_admin(address)", +"8ccbd6da": "freezeToken()", +"8ccc04ea": "proofOfConceptCap()", +"8ccc4781": "Math(int256)", +"8cccc341": "initiateChallenge(address)", +"8cccf2df": "viewServiceReward()", +"8ccd227c": "gameRequestTokens(address,uint256)", +"8ccdcf80": "tokenSalePausedTime()", +"8cce10c8": "rank(address,address,uint256)", +"8cce49c9": "mokenData(uint256)", +"8cce7e92": "removeMarketFromWasCalled()", +"8cceb1e8": "notifyBurn(address[])", +"8cd0a573": "transferWithCustomReserving(address,uint256,uint256)", +"8cd0fc3d": "TRONClassic(uint256,string,string)", +"8cd221c9": "roundId()", +"8cd25904": "calculateAndCreateTokens(uint256)", +"8cd3751b": "newProposal(address,uint256,uint256,bool,bool,address,uint256,uint256,uint256,uint256)", +"8cd3f064": "acceptToken(address)", +"8cd41fae": "StartCompetition(uint8,uint8,uint8,uint8,uint80,uint32)", +"8cd41fd8": "referrerBonus2()", +"8cd42991": "getTimeRemaining(uint256)", +"8cd47415": "zkWithdrawTrusted(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[],uint256)", +"8cd4d21a": "x(uint256,address)", +"8cd4fdf1": "maxGamble()", +"8cd53767": "withdraw(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"8cd5dce3": "setNextRoundRequiredBetAmount(uint256)", +"8cd6c7fa": "seedSingleSaleCount()", +"8cd70e72": "isInitalized()", +"8cd85846": "totalTranches()", +"8cd85dc2": "getWinNumbers(uint256)", +"8cd8bd05": "IanCoin()", +"8cd8db8a": "init(uint256,uint256,uint256)", +"8cd90e31": "EAToken(uint256,string,uint8,string)", +"8cda2a15": "SafePromo(string,string)", +"8cda4430": "lookupRoyalty(address)", +"8cdb1719": "approveCertification(uint256)", +"8cdbd8fb": "remainToken()", +"8cdc86a6": "sort()", +"8cdcbdef": "closeBlock()", +"8cdcdae1": "testControlUpdateLatestRevisionNotOwner()", +"8cde43dc": "getCrowdsaleMaxRaise(address,bytes32)", +"8cde4667": "BANKNET()", +"8cdf31fa": "Cryptoya()", +"8cdfb1e6": "transferIfHF(address)", +"8ce0080f": "updateGuMasks(uint256,uint256)", +"8ce05b54": "bornFamedStar(address,uint256)", +"8ce060fb": "FounderSwitchRequestEvent(address)", +"8ce0bae8": "Canceled(address,uint256,address,address,uint256,address,uint256,uint256)", +"8ce0bd46": "Deposit(address)", +"8ce113dc": "right60(uint256)", +"8ce187fd": "raisedUSD(uint256)", +"8ce25a93": "numAccounts()", +"8ce2ae2d": "creator_new()", +"8ce2e0ea": "addLastTwoAmbassadors(address,address)", +"8ce2f386": "AcceptsOmniDex(address)", +"8ce3ee62": "transferEmpire(address)", +"8ce450de": "assetThaw()", +"8ce4f1b2": "setGasRewardPercent(uint256)", +"8ce53e5b": "getMaximumInvestmentPerDay()", +"8ce5877c": "removeSpender(address)", +"8ce69b72": "USD_IN_ETH()", +"8ce74426": "protocol()", +"8ce795f5": "SerbiavsBrazil()", +"8ce7be01": "getUniqueSpinnerPrice()", +"8ce7ff4a": "getVote(uint256,uint256,uint256)", +"8cea577a": "allowFunction(bytes32,bytes4)", +"8ceaa23f": "setAvailablePositions(uint256)", +"8cead4bf": "currentProfit()", +"8cec9176": "SimpleMultisigWallet(address[],uint256)", +"8cec9f4c": "playlotto(uint256)", +"8cecd03e": "INVESTOR_TOKENS()", +"8cece594": "countClaimBackers()", +"8cecf66e": "_inverse(uint256)", +"8ceda04d": "getCounting(bytes32)", +"8cee3b4d": "getPolicyByCostumerCode(string,uint256)", +"8cee8778": "crear(uint256)", +"8ceeaaa8": "getTodayOwnerAddress()", +"8ceedb47": "cage(uint256,uint256)", +"8cef1ed9": "xpectoTTF1Token()", +"8cef2b93": "CECNaypyidaw(address,uint256)", +"8cefad63": "setAirEndtime(uint256)", +"8cefaf1a": "setSalesEndTime(uint256)", +"8cf0c191": "rum()", +"8cf19975": "createLottery(string,uint256,uint256,uint256,uint256,uint256,uint256)", +"8cf1c5c4": "LogFeeEvacuation(uint256)", +"8cf20038": "engDevAddress()", +"8cf228cd": "DNNTDE()", +"8cf3313f": "calculateWeightedMultiplier(uint256,uint256,uint256,uint256)", +"8cf3562b": "DEC15Recursive()", +"8cf37ece": "InformRebuy(uint256)", +"8cf39a9c": "TicTacToe(address,address,uint256)", +"8cf3a181": "addRRA(address)", +"8cf3e683": "isAddressExcept(address,address)", +"8cf49cad": "ReleaseDate()", +"8cf4dbfb": "collectBalance()", +"8cf57cb9": "rewardAddress()", +"8cf5dbc6": "recruitHero()", +"8cf7b7a4": "slashAddressLikeUsername(string,uint256)", +"8cf7d906": "playAndFinishJackpot(uint256,uint256,uint256,uint256)", +"8cf80438": "winningBid()", +"8cf8151f": "appWasMade(bytes32)", +"8cf907fb": "EndRefund()", +"8cf92ade": "distributeBountyTokens(address[],uint256[])", +"8cf9f5e7": "getPreSelledInPool()", +"8cfa8eea": "getWeiToUsdExchangeRate()", +"8cfaabcc": "managementTransfer(address,uint256)", +"8cfae7e4": "TransferUnsoldTokensBackToTokenContract(address)", +"8cfb3088": "defaultExpiry()", +"8cfb7c02": "updatePopularity(bytes32,uint256)", +"8cfb8f21": "isKnownUniverse(address)", +"8cfd6d4c": "CCH_LLV_FIFA_2()", +"8cfd8901": "_incBlock()", +"8cfdacb0": "STARTING_PACIFIST()", +"8cfe6a09": "tokensToEthereum_2(uint256)", +"8cfe7c32": "bTransfer(address,address,address,address[],uint256[])", +"8cff1990": "isSignedByAndrey()", +"8cffa21c": "getOwnedItems()", +"8d000903": "createTokenToMarket2018()", +"8d003a0f": "addCurrentTime(uint8)", +"8d008989": "Multisig(address,address,address,address)", +"8d00abb6": "setAElfCommunityMultisig(address)", +"8d012295": "presaleVesting(address,uint256,uint256,uint256,uint256,uint256)", +"8d0128cb": "transferMintKey(address,int256)", +"8d01308c": "PRESALE_START_WEEK3()", +"8d03b102": "testing()", +"8d044c06": "unpauseRedemption()", +"8d049190": "mapWidth()", +"8d0515dc": "HenryMiniToken(uint256,string,uint8,string)", +"8d0522c5": "set_contrib_arbits_max(uint256)", +"8d0528ec": "Withdraw_referral()", +"8d05ad4e": "NLL()", +"8d062046": "testTokensAreTransferrableAfterSale()", +"8d068043": "requiredSignatures()", +"8d0716c4": "approveScoupons(address,uint256)", +"8d07ae9f": "getBidDetails(address)", +"8d086da4": "withdrawShares()", +"8d089930": "limitEndDate()", +"8d08eefa": "setCORAddress(address)", +"8d09b9cc": "TeCToken()", +"8d09c674": "Donated(address,uint256,uint256,uint256)", +"8d0a3b6d": "bonusByAmount()", +"8d0a5fbb": "getOrderCount()", +"8d0a73e3": "tokenDistributionStartTime()", +"8d0aadca": "playerDelayOnExit(address)", +"8d0ae472": "AsheToken()", +"8d0b3d9b": "_add(uint32,address)", +"8d0b4be5": "setXPContractAddress(address)", +"8d0bba03": "MINIMUM_CONTRIBUTION()", +"8d0caef5": "bonusStage1()", +"8d0cf786": "MatchAdded(uint256,uint8,uint16)", +"8d0d018c": "havedDistDevCoin()", +"8d0d27ba": "queryPlayerType(uint32[11])", +"8d0d3ccf": "getBonusTier()", +"8d0d877f": "LZZ()", +"8d0dd3c0": "setBUU(bytes32,uint256,uint256)", +"8d0e5136": "isPlayerInQueue(address)", +"8d0eda03": "isInvestorLocked()", +"8d0f403a": "adminAddAction(bytes32)", +"8d0f8cef": "drop(address,uint256)", +"8d0fc05a": "votesYes()", +"8d10215e": "grantAccess(uint256,uint256,string)", +"8d106690": "setPropertyFlag(uint16,uint8)", +"8d111ac6": "checkTokSold()", +"8d119d41": "AngelCoinV1()", +"8d121247": "changeProductionFeeRecipient(address)", +"8d12aba7": "IMCOToken()", +"8d134175": "CellTokens()", +"8d1343e0": "issueDate()", +"8d13d972": "getUsdFee(bytes32,uint256)", +"8d13ea34": "changeUserProjectExp(bytes32)", +"8d14670a": "multiUnlock(address[])", +"8d149b3c": "compareInts(int256,int256)", +"8d152d78": "pushBytesArray(bytes32,bytes32)", +"8d1540c1": "CoinBuy(uint256,address)", +"8d159787": "buyDragon(uint256)", +"8d15a218": "LogRedeem(address,uint256)", +"8d15b307": "privateEventActive()", +"8d16fd83": "sellDai(uint256,uint256,uint256)", +"8d17664d": "getSecret(uint256)", +"8d182f01": "removeSale(bytes32)", +"8d1a4b28": "getGame(address)", +"8d1a7765": "getPlayerGeneral(uint64)", +"8d1b2afd": "logFeeWindowCreated(address,uint256)", +"8d1bc93d": "buyWuxiaMaster()", +"8d1c3b8b": "sHasDownvoted(uint256,uint256,address)", +"8d1c8048": "transport(uint256)", +"8d1ca4ec": "addGuess(int256)", +"8d1d1572": "transferFeeAddress()", +"8d1d22d8": "renameMonster(uint64,string)", +"8d1d2c21": "categoricalEvents(bytes32)", +"8d1d8639": "getcanuserun(address)", +"8d1dff6b": "mintTokens(uint256,address,bool)", +"8d1e6b56": "issueCompanyTokens()", +"8d1eaf78": "registrarInfo()", +"8d1fdf2f": "freeze(address)", +"8d20194d": "getWhiteUsersFrom(uint256,uint256)", +"8d215adc": "Bettings(uint256,uint256)", +"8d216186": "roll(uint256,bytes32)", +"8d22651e": "MAX_NUM_OF_CHOICES()", +"8d227fc0": "getPeriodInfo()", +"8d22b345": "getAppTokenCode(uint32)", +"8d24abbc": "closeAndTransferTokenOwnership()", +"8d24d147": "rvDeposit()", +"8d24f5bc": "tokensByBtcTx(string)", +"8d256b0a": "ExchangeRate(uint256)", +"8d258104": "setManager()", +"8d25827a": "countOpenPackageOfOneAgency(address)", +"8d259d65": "_sellCallToOpen(uint256,uint256,uint256,uint256,address)", +"8d25af04": "restartGame()", +"8d26d88f": "feeWithdrawTokenAmount(uint256)", +"8d26eb2b": "edgePigmentG()", +"8d272b0a": "TaeCoin()", +"8d2810fe": "GenesisBuyPrice(address)", +"8d288e93": "toRefund()", +"8d28da21": "ECT(uint256,string,uint8,string)", +"8d298851": "initialIssue()", +"8d29a239": "finalizeHoldingAndTeamTokens(uint256)", +"8d2a0910": "getTotalDividendsPaid()", +"8d2af65d": "claimTokenReserveFinan()", +"8d2c8ce8": "RrcToken()", +"8d2c929a": "bridgeNodes(address)", +"8d2d2563": "saleFirstEarlyBirdEndBlock()", +"8d2d3f41": "getKeyRevisionNumber(uint32)", +"8d2dcb2d": "TokenPool(address,address)", +"8d2ea8dc": "withdrawAvailableToken(address,address,uint256)", +"8d2f349f": "TransCompleteds()", +"8d2f7272": "CariToken()", +"8d300458": "updateInvested(address,uint256)", +"8d30241b": "HasGoods(uint32)", +"8d30d418": "ContractRemoved(address)", +"8d30e65d": "claimReservedTokens(address,uint256)", +"8d3121b3": "releasedTokenTotal()", +"8d317de2": "OctusToken()", +"8d323fdc": "LogAddressTokenCapChange(uint256,string)", +"8d331996": "setTimeWindow(uint256)", +"8d334529": "restrictions(address)", +"8d348b7c": "mintToClient(address,uint256)", +"8d357fa3": "getKeys(uint256)", +"8d35b9ce": "ARXpresale()", +"8d361e43": "removeSigners(address[])", +"8d361f6e": "bonusTokensDistributed()", +"8d375da2": "testMakeItFail()", +"8d37f52c": "addAgingTime(uint256)", +"8d38b237": "calculateCountOfInvestmetnsInQueue(uint256,uint256)", +"8d38f5a0": "Burn(address,uint256,bytes)", +"8d3945e4": "setCounter()", +"8d3965be": "buyerApprove(uint256,bytes)", +"8d3972d5": "FABIToken()", +"8d399ce3": "submit(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"8d3a5ded": "initPlatinum()", +"8d3af7eb": "withdrawLemontokens()", +"8d3b6d08": "registerSsp(address,uint8,uint16)", +"8d3bd1f8": "teamTokensGenerated()", +"8d3c7415": "JuzixTokenManager()", +"8d3d523b": "bet2Of(uint256)", +"8d3d6576": "maxContribution()", +"8d3d70df": "takeBet(uint256,address,uint256,uint256)", +"8d3d8587": "GanaPreSale(address,address,address)", +"8d3def46": "oryza()", +"8d3ef87d": "getuserlistlength(address)", +"8d3f0ed5": "allocateTokens(address,uint256,uint256)", +"8d3fd859": "sellFucks()", +"8d442ae0": "toUint8(bytes,bytes,uint256)", +"8d447e39": "getLatestWhitepaper(address)", +"8d44c90b": "BurnMyTokensAndSetAmountForNewBlockchain()", +"8d44f13b": "claimFromPool()", +"8d4572be": "rens()", +"8d45e221": "Partial23Transfer()", +"8d467f22": "getKeysFromEth(uint256,uint256)", +"8d472709": "contribute(address,address,uint256)", +"8d475461": "m_teamId()", +"8d4777c8": "claimGooDepositDividends(address,uint256,uint256)", +"8d47c7d7": "getTokenListed()", +"8d498158": "DaleoneToken()", +"8d49cd7f": "getTeam(uint32)", +"8d49da75": "stopCollection()", +"8d4a2d39": "addSeconds(uint256,uint256)", +"8d4d801c": "addRecipient(bytes32,string,string,address)", +"8d4d8e19": "unregisterAsDelegate()", +"8d4e4083": "isFinalized()", +"8d4e57e6": "ROLE_TOKEN_CREATOR()", +"8d4ea1ba": "addEtherForOraclize()", +"8d505019": "addNote(bytes32,string)", +"8d50b6d0": "doSelectDisputedStateRoot(uint256,bytes32,uint256)", +"8d51faec": "setOwnerTestValue(uint256)", +"8d521149": "bonus_received()", +"8d52a1fc": "setStrikePrice(uint256,uint256)", +"8d539b35": "resetPendingContribution(address)", +"8d53b208": "revokeAccess(bytes32,address)", +"8d551860": "horseNotForSale(uint256)", +"8d553538": "addSecondaryRecord(string,bool,string,bool,string,string,string)", +"8d5555f2": "priceFor(uint256)", +"8d55719e": "_withdrawEther(address)", +"8d55b6ac": "thirdRate()", +"8d565abf": "createTx(address,address,uint256)", +"8d56ac74": "REALEX()", +"8d56bc62": "Bankroi()", +"8d574383": "setDemurrageFrequency(uint256)", +"8d578bee": "totalSaleCap()", +"8d5802e2": "getAssetOwner(uint256)", +"8d59cc02": "register(address,string,string)", +"8d59d1f1": "donate(uint256,string)", +"8d5a225e": "assignReserveSupply(address)", +"8d5c4456": "pIndex()", +"8d5c84cd": "isStart(bytes32)", +"8d5cc102": "traded_token()", +"8d5ceeca": "checkShares(address)", +"8d5d1e97": "priceStar3()", +"8d5d3429": "requestLoan(uint256)", +"8d5d88c9": "LTYG()", +"8d5dee05": "EGGS_TO_HATCH_1TURTLE()", +"8d5e4f9c": "BroFistCoin()", +"8d5f3f96": "nextInvestorsProfitSum()", +"8d5f8d1c": "forwardFundToCompanyWallet(uint256)", +"8d5fa05c": "setAreas(address,uint256)", +"8d6014a8": "FixedCeiling(uint256,uint256)", +"8d60be98": "ICO_TOKENS_PERCENT()", +"8d60e30b": "reward(address,uint256,bool,string)", +"8d60ed85": "setDevCutPercentage(uint256)", +"8d614474": "AdvancedEthVocToken(uint256,string,string)", +"8d622749": "award(address,address,string)", +"8d627e91": "isTryedFinishCrowdsale()", +"8d62b845": "isMakersSignatureValid(address,bytes,string,address)", +"8d63c77b": "WizardReplacedEvent(address,address)", +"8d63cfa7": "getPixelOwner(uint16,uint16)", +"8d647185": "setBaselineRate(uint256)", +"8d647d3a": "allowPrivateParticipant(address,uint256)", +"8d64bcf1": "maxWhitelistPurchaseWei()", +"8d65095e": "PI_EDIT_3()", +"8d656b83": "minWeiInvestment()", +"8d664d6a": "setFeeRates(uint8,uint8,uint8)", +"8d670a2e": "unlockPlayerFunds(address)", +"8d6731b0": "LudumToken()", +"8d67799e": "MAX_SIZE()", +"8d6819be": "mintTokens(uint256,address,uint256)", +"8d688b6e": "EthPyramid()", +"8d68cf59": "sendFunds()", +"8d69121d": "addDocument(bytes32,string,string)", +"8d69ca74": "wdEthereum(uint256,address[])", +"8d69e95e": "serviceProvider()", +"8d6a2ed5": "minimumBuyAmount()", +"8d6a6d4b": "_allocatePromoTokens(address,uint256)", +"8d6a6fbd": "proxyTransfer(address,address,uint256,bytes,string)", +"8d6b5d3e": "getScouponAllocationFactor()", +"8d6c58ab": "isTransferToICAPAllowed(address,bytes32,uint256)", +"8d6cc56d": "updatePrice(uint256)", +"8d6cd879": "FOUNDATION_STAKE()", +"8d6cd8de": "buffPtr()", +"8d6e56e1": "manyInputsNoReturn(uint256,uint256,uint256,uint256)", +"8d6f24d4": "hash_msg()", +"8d702122": "ownerKill()", +"8d70650f": "getSiteId(uint256,uint256)", +"8d70baaa": "BattleOfTitansToken()", +"8d70c0ce": "transferToExchange(address,uint256,uint256)", +"8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", +"8d711776": "sendCrypto(address,uint256)", +"8d7117d4": "etherRatio()", +"8d715d9d": "Backdoor()", +"8d71f131": "TOKEN_RESERVE2_CAP()", +"8d72920b": "getAllowedAmountToContribute(address)", +"8d72a473": "deductFunds(address,uint256)", +"8d72f856": "deleteVip(uint256)", +"8d734b30": "setupMintableAddress(address)", +"8d73c027": "mintWithApproval(address,uint256,address)", +"8d747928": "isDrivezyPrivateTokenAcceptable()", +"8d748148": "monitor(address,bool)", +"8d74fd52": "GlobalTourToken()", +"8d75533f": "mint(address,string,bytes)", +"8d7570fc": "doBurn(uint256)", +"8d75fe05": "mintedTokens()", +"8d7601c0": "addResolvers(address[],uint256[])", +"8d77090f": "TriggmineToken()", +"8d776457": "sellBNT(uint256)", +"8d78c90b": "EventUpgrade(address,address)", +"8d79283d": "query1_fnc()", +"8d792964": "TD(uint256,string,string,uint8)", +"8d7a55bf": "PubKeyHashTypeAdded(uint8)", +"8d7af473": "numberOfProposals()", +"8d7b5243": "minerTotalReward()", +"8d7cdcf4": "setLLV_edit_8(string)", +"8d7cffb7": "transferWrappedContractAdmin(address)", +"8d7d2e5b": "minerPreSupply()", +"8d7daf95": "isTokenPairWhitelisted(address,address)", +"8d7e5be0": "getClue1()", +"8d7e7958": "userGrowsPoolSupply()", +"8d7e8a57": "approveSpenders()", +"8d7eca6f": "FUNDING_END_TIMESTAMP()", +"8d7f26e9": "setIPAddress(bytes32,bytes32,address)", +"8d7fe693": "Helios()", +"8d8001ad": "updateMintingStatus(uint256)", +"8d809b0e": "project_wallet()", +"8d80c34e": "unblockAccount(uint256)", +"8d80c922": "getAddressById(uint256)", +"8d81a1ce": "setClamTax(uint256)", +"8d81a88f": "BP_ATHENIAN()", +"8d81e2c0": "getTankTotalEarned(uint32)", +"8d81f51e": "safeTransferChild(uint256,address,address,uint256,bytes)", +"8d822615": "setFeeForArtWorkChangeRequest(uint256)", +"8d835674": "euroRaised(uint256)", +"8d837f38": "getEthBalTeller(address)", +"8d83cc95": "getNextSnapshotBalanceOfMul(address[])", +"8d842fad": "stopPreICO()", +"8d84a7fd": "credit(string,uint256)", +"8d854fde": "getDisputeId()", +"8d859f3e": "PRICE()", +"8d85a70f": "Vote(address,uint256,bool)", +"8d860880": "CheckOut()", +"8d86484c": "setPercentUnfrozenAfterAwardedPerPeriod(uint256)", +"8d8660bc": "setQuantity(string,int256)", +"8d86faa6": "getAmountToGive(address,address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint256)", +"8d87b102": "amountOfStakeToBeReturned(address,uint256)", +"8d8833bf": "periodPreITO_wei()", +"8d89873c": "updateAndGetRemaining()", +"8d8a7f07": "VLBRefundVault(address)", +"8d8a88fc": "pay(bytes32,uint256,bytes)", +"8d8acee9": "setupMultisig(address,address)", +"8d8b1b88": "mixGenes(uint256,uint256)", +"8d8bd44f": "TokenSaleFinished(string,address,uint256,uint256,uint256)", +"8d8c36e9": "purchasedBy(address)", +"8d8d22ba": "changeServiceAddress2(address)", +"8d8d50d0": "createUnicorn()", +"8d8d92fa": "theBid()", +"8d8e2ea9": "Tablow()", +"8d8e4561": "theGrid(uint256)", +"8d8e5da7": "emergencyWithdrawal(address,address,uint256)", +"8d8f2adb": "withdrawTokens()", +"8d8f7780": "GEE100()", +"8d8f95d1": "collectDrugs(address)", +"8d909ad9": "getSeedAndState(string,address)", +"8d91801a": "RxEALTestSaleContract()", +"8d91931f": "longLock()", +"8d91e803": "buyWhiteCore(uint256,uint256,uint256,uint256)", +"8d920b02": "rejectPayment(uint256)", +"8d927069": "getTrace(uint256)", +"8d927b34": "maxPendingBalances()", +"8d928af8": "getVault()", +"8d92910c": "isLegalAttack(uint256,uint256)", +"8d92c187": "testFinalize()", +"8d92ce46": "submitBlockHeaders(bytes)", +"8d92fdf3": "withdrawAsset(uint256)", +"8d93758e": "PRESALE_STAKE()", +"8d93eac2": "mintFeeNumerator()", +"8d93ec88": "poolWallet()", +"8d94053f": "verifyAutoridadElectoral(bytes32)", +"8d949635": "endRefundableTime()", +"8d949c8b": "D(uint256)", +"8d956f1e": "tokenTransfer(address)", +"8d95f245": "sellkey(uint256)", +"8d976d76": "investCommission()", +"8d977672": "tasks(uint256)", +"8d977d9e": "checkGameClosed(address)", +"8d98ee43": "_verifyAddress(address)", +"8d98f4e3": "getAllCardsDefence()", +"8d9940b9": "createRetainer()", +"8d995f94": "transferAndFreeze(address,uint256)", +"8d99b2eb": "endPoll()", +"8d9a7b49": "pricePerMessageChanged(uint256,uint256)", +"8d9ad08e": "getAllInvestments()", +"8d9afc0f": "getStageId()", +"8d9b449b": "addRevenueShareCurrency(address,string)", +"8d9d851c": "toggleVaultStateToAcive()", +"8d9e6e47": "setFinalICOPeriod()", +"8d9e8a76": "CMGG12StandardToken(uint256,string,uint8,string)", +"8d9efa3f": "LogPhaseSwitch(uint8)", +"8d9f39d1": "_clear(uint256)", +"8d9f95c4": "PresaleEntry(address,uint256)", +"8da03997": "getNativeReputation(address)", +"8da15531": "SimpleCoinToken()", +"8da16e48": "geraHash(string,string)", +"8da198cd": "simpleAssert(bool)", +"8da1e722": "minGamePlayAmount()", +"8da2a2a1": "reserveDistribute()", +"8da2defb": "WE(uint256,string,uint8,string)", +"8da2fc26": "Burn(address,uint256,uint256,bytes)", +"8da3d736": "addToList(uint256,address[])", +"8da46db4": "DistributeXcel(address)", +"8da4d3c9": "claimCount()", +"8da4d776": "newCommune(address)", +"8da58897": "starttime()", +"8da5cb5b": "owner()", +"8da5fd77": "unlockSecondaryTokens()", +"8da66e67": "LogCollectAmount(uint256)", +"8da76874": "mintFromTrustedContract(address,uint256)", +"8da7d0b5": "totalChildContracts(uint256)", +"8da8023c": "endTimeOfStage(address,uint256)", +"8da8524f": "LogFrozenStatus(bool,uint256)", +"8da87ac6": "addressFundPlatform()", +"8da8a5ae": "nativeBlockhash(uint256)", +"8da8f235": "_addController(address)", +"8da91d04": "unset(uint32[])", +"8da9b772": "getHello()", +"8daaaa2f": "HOUSE_EDGE()", +"8daaf0a2": "addTokens(address,address,uint256)", +"8dab38da": "BONUS1_LIMIT()", +"8dac0e8c": "GetEtherPrice()", +"8dac7191": "initialTokenOwner()", +"8dad52f4": "dive4(address)", +"8dae3d68": "awardLuckyCoin(uint256,uint256)", +"8dae5adc": "FundTransfer(address,address,address,uint256)", +"8dae9364": "_stakeAmountValid(address,uint256,uint256,bytes8,uint256,uint256)", +"8daed4c4": "allocateShareholder(address,uint32)", +"8daf08d9": "requestStempas(bytes32,address)", +"8daf4dcf": "getTournamentRate()", +"8daf5033": "TokenPurchased(address,address,uint256,uint256)", +"8db02d79": "Tiguan5Coin()", +"8db0816a": "claimC2()", +"8db0e83b": "getBytesArray(bytes32)", +"8db1296d": "token_creation_cap()", +"8db1ccac": "PUBLIC_SALES_1_RATE()", +"8db23385": "balanceOfTotalUnclaimedCookie()", +"8db261e0": "hardWithdrawAll()", +"8db49b57": "GrantDeleted(address,uint256)", +"8db4dad2": "contractSignedTime(string)", +"8db517fb": "GMQToken(uint256,string,string)", +"8db518f3": "ContractiumToken()", +"8db54c90": "getTotalSendingAmount(uint256[])", +"8db57994": "fundLoan()", +"8db6c17e": "ISCoin()", +"8db7183a": "dateMarketing()", +"8db783ce": "addHourToProject(uint256,uint256)", +"8db78a37": "setBountyVault(address)", +"8db7cd54": "getTournamentEntranceFee()", +"8db8053b": "mintPresaleTokens(uint256)", +"8db8f8bc": "ELACoin(uint256,string,string)", +"8db9653f": "getTotalIssued()", +"8db974e4": "optionTotalSupply()", +"8db9c13c": "removePolicy(uint8)", +"8dbb908a": "clearAllrequest()", +"8dbbbe10": "getFeeTake(uint256)", +"8dbc2fd1": "setNewEndtime(address,uint256,uint256)", +"8dbd7d54": "addCashier(address,address)", +"8dbdbe6d": "deposit(uint256,uint256,address)", +"8dbdfae7": "referalBonusPercent()", +"8dbe3be5": "isCeilingStrategy()", +"8dbe6c33": "_setUserInfo(address,uint256,uint256,address)", +"8dc01209": "CJC()", +"8dc07e46": "picops_is_enabled()", +"8dc1c44d": "testFailCreateWithParentSameNonce()", +"8dc2a2cd": "GMCCERC20(uint256,string,string)", +"8dc401ae": "withdrawAllDevelopersCut()", +"8dc43256": "AFRTokenERC20(uint256,string,string)", +"8dc45377": "getDuel1(uint256)", +"8dc4c6ab": "recoverable(address)", +"8dc654a2": "withdrawLink()", +"8dc6af54": "UsdToTokenConvert(address,uint256)", +"8dc6e2f1": "onMarketFinalized()", +"8dc71928": "minimumTargetReached()", +"8dc73521": "clearLock(address)", +"8dc850dc": "currentCoinsCreatedInteger()", +"8dc889f6": "requestDisbursement(uint256)", +"8dc949e8": "SapienToken()", +"8dc95182": "AssignWhitelistManager(address)", +"8dc9650f": "claimdram()", +"8dc98851": "Billboard()", +"8dca05c9": "airFropPot_()", +"8dca5511": "usdPerEve()", +"8dca7a01": "unicornManagement()", +"8dcb25e0": "balanceOf2Internal(address,address)", +"8dcb8c21": "coinsFlipped()", +"8dcd555f": "_buyNextRank(address)", +"8dcd64cc": "createAndEndowD(uint256,uint256)", +"8dcd992e": "_setBabzBalanceOf(address,uint256)", +"8dcdfe12": "distributeCrowdsaleTokens(address,uint256,uint256)", +"8dcf7892": "setAllocateTokenDone()", +"8dcfdaad": "removeMany(address[])", +"8dcff4f9": "setupAssetOwningListener(address)", +"8dd05b56": "getImageDataLength(uint256,uint16)", +"8dd14802": "setBridge(address)", +"8dd1e732": "YYBToken()", +"8dd1e96c": "getAngelFundAddres()", +"8dd21b0f": "redTeamLockingPeriod()", +"8dd3c196": "addInvestment(bytes32)", +"8dd42808": "removeHolder(address)", +"8dd47d91": "Wthdraw()", +"8dd4f292": "getRemainingSellingToken()", +"8dd5ac24": "SaveToken()", +"8dd5e298": "canEnterPool(address)", +"8dd66012": "incChildren(uint256)", +"8dd6908e": "ambassadorMode()", +"8dd6ce79": "setRatePrices(uint256)", +"8dd745bb": "adminSendTokens(address,uint256,uint256)", +"8dd747ec": "balanceOfKyCToBeApproved(address)", +"8dd7d6d1": "newPuppet()", +"8dd7e44b": "withdrawalComplete()", +"8dd8596c": "sendDonation()", +"8dd9054b": "MATCoin()", +"8dda811c": "GameChannelBase(address,uint256,uint256,address,address,uint256)", +"8ddab3dc": "_preValidateRefill(address,uint256)", +"8ddab515": "MedicayunLink(uint256,string,string)", +"8ddb428a": "currentGeneration()", +"8ddc9aa7": "UpgradeProposed(address)", +"8ddcf81e": "get_deal_status(uint256)", +"8ddd8b69": "renounceFreezer(address)", +"8dde60fa": "transferCoin(address,uint256)", +"8dde907e": "FooBurnableToken()", +"8ddf52bd": "earlyContribShare()", +"8ddf792b": "setOraclizeGasLimit(uint256)", +"8de022b7": "dropAnchor(uint16,uint16)", +"8de04f87": "authorized_updateCardReserved1(uint256,uint8)", +"8de0ece7": "THEWOLF10XToken(uint256,uint256,uint256,uint256,address,address,address,address,string,uint256)", +"8de12845": "init(string,string,string,string)", +"8de1dcea": "rateAngelsDay()", +"8de21650": "getBooleanValue(string)", +"8de2947c": "chkLockedTokens(address,uint256)", +"8de2a051": "setUint(uint256,uint8,uint16,uint32,uint256)", +"8de3317d": "withdrawDRPU(uint256)", +"8de4f42f": "addNewAirdrop(uint256,string,uint256,address)", +"8de5104b": "startPreICOStage2()", +"8de575e4": "Veen()", +"8de69284": "subscribe(address,uint256)", +"8de69c3c": "AcceptsDailyDivs(address)", +"8de69f66": "allocateAdvisorTokens(address[],uint256[])", +"8de6b343": "deleteFromBlacklist(address)", +"8de74aa1": "setEstateRegistry(address)", +"8de85908": "ProjectCall(address,uint256)", +"8de8d47c": "sendObjectWithoutApproval(uint256,address)", +"8de8de61": "CC5Coin()", +"8de8e295": "setSupplyLimit(uint32,uint32)", +"8de93222": "purchase(address,uint256)", +"8de9ee05": "TakeBuyOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"8dea60cc": "CryptopediaCoin()", +"8dec1720": "invites(address)", +"8dec3daa": "destroy(uint256,address)", +"8dec818a": "LogPaused(bool)", +"8dede3f5": "pendingInvestContractsIndices(address)", +"8dedeca8": "costAndBuyTokens(uint256)", +"8dee53b9": "setBoardMember(uint256,uint256,uint256,uint256)", +"8def14f3": "ether_per_token()", +"8def1d3b": "distinctInvestors()", +"8def32b6": "addOrderBatch(bool[],uint128[],uint128[],uint32[],int256,bool[])", +"8defbc5e": "right31(uint256)", +"8df068ab": "initialTransferToDevTeam()", +"8df0fda1": "isApplicationExits(string,string)", +"8df10469": "refundInvestor(uint256)", +"8df15e19": "tokenLock(address,uint256)", +"8df1a8db": "ENJAllocation(address)", +"8df208b7": "StopQ()", +"8df272d2": "CosmoCoin(address,address)", +"8df301aa": "tradeKyber(address,uint256,uint256,address)", +"8df35abe": "setManagerAndClaimer(address,address)", +"8df388c1": "totalUnvestedAndUnreleasedTokens()", +"8df3a24c": "canAcceptBuyNow(uint256,address)", +"8df41c32": "allocationAddressICO()", +"8df4235f": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8df465ea": "Zendad()", +"8df48935": "uncooperativeClose(address,uint32,uint192,bytes)", +"8df4d225": "GLXChain()", +"8df554b3": "Dividend()", +"8df583bd": "exchangeBBDBalance()", +"8df5fc7a": "_RewardClaimed(address,uint256,uint256)", +"8df61294": "totalAmountOfOrders()", +"8df6ad66": "isArrAccountIsNotFrozenForReturn(address)", +"8df6af63": "setCHGUSDPrice(uint256)", +"8df793d6": "leaseCard(uint8,string,string,string)", +"8df8228c": "x888()", +"8df87c66": "_getTokenLockType(uint256)", +"8df8ac87": "recevedTokenFromEvabot(address,uint256)", +"8df8c008": "getFreeTurtles()", +"8df8cc4c": "_removeOperator(address)", +"8dfa6fcb": "endTimeAddBonus()", +"8dfa703f": "BitkerToken()", +"8dfaf7f0": "getTeamsInfo()", +"8dfb015f": "increaseInvestedWei(uint256)", +"8dfb04fe": "getExistCell(address)", +"8dfb9950": "transferTokensManually(address,uint256,uint256)", +"8dfbcf36": "addCapper(address)", +"8dfced82": "amountBonusEnabled()", +"8dfd1242": "updateStarScoreInBulk(address[],uint256[])", +"8dfda5ae": "getIndexByAddress(address,address)", +"8dfde39d": "abi(bytes32)", +"8dfef745": "bonussale_StartDate()", +"8dff1762": "RpsGame()", +"8dff4abd": "activateRevenueShareIdentifier(string)", +"8dffe343": "kvcDiv(uint256,uint256)", +"8dffe5c0": "buyPlace(uint256,string)", +"8dfff9f2": "changePrepaymentFee(uint256)", +"8e005553": "setFee(uint16)", +"8e006db0": "setProductStock(bytes32,uint256)", +"8e007cfa": "giveEthxAddress()", +"8e008b59": "_createTeam(address,uint32[])", +"8e01d34b": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint8,uint8,uint8)", +"8e0273bb": "Existing(address)", +"8e0294a8": "_removeProposal(address)", +"8e035ac1": "BetOnHashV82()", +"8e045031": "isTokenCollected(uint256,address)", +"8e048315": "investorDeposit(address,uint256)", +"8e0488a8": "transferirSalaDePara(address,address,uint256)", +"8e04977d": "currentLotteryValue()", +"8e056fe6": "setBirthBlock(uint256)", +"8e05beb3": "token(bool,address,address,address,address,address[],uint256[])", +"8e05d59d": "signToApproveTokenControlInfo(uint256)", +"8e05d8a5": "_computeNextGen0Price()", +"8e068b11": "virtualReserveBalance()", +"8e07d7da": "confirmKittyActions(uint256,uint256[8])", +"8e082555": "changeOwnship(address)", +"8e08b2ec": "MinesOnTrade(uint256)", +"8e08cf38": "updateBonus(uint256,uint256,uint256,uint256,uint256)", +"8e09c8cd": "addCallSpenderWhitelist(address)", +"8e09ead7": "isTokenBankroll(address,address)", +"8e0a5faa": "invariant(address)", +"8e0adbf5": "getLLV_edit_11()", +"8e0af993": "setPrivateFund(address,uint256,uint256)", +"8e0b017d": "setSellRate(uint256)", +"8e0bba69": "iown()", +"8e0c2882": "drain_alltokens(address,uint256)", +"8e0c36c4": "verifySeed(bytes32,bytes32)", +"8e0c8999": "zkWithdraw(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[])", +"8e0cac02": "redeemMarketingAndRNR()", +"8e0d5075": "claimDividendsForBlock(uint256)", +"8e0db0d9": "keyAtIndex(uint256)", +"8e0e8fb2": "approveProvider(address,uint256)", +"8e0ea5cf": "ReturnTokensFor(address,address,uint256)", +"8e0eef8e": "getTicketValue(uint256,uint256)", +"8e0ef033": "defrostTokens()", +"8e0f65eb": "isBelow(int256,int256,string)", +"8e0f9b85": "Smartcarblockchain(address,uint256)", +"8e0fee1f": "withdrawRefBalance()", +"8e101867": "maxTotalAmount()", +"8e1069f3": "getPlayRecord(address,address)", +"8e10be33": "primaryOwner()", +"8e111ef6": "addressOfERC20Tocken()", +"8e120f36": "prepareToPayWinners(uint32)", +"8e1227b2": "KTCWhiteList()", +"8e12823b": "getCompanyHash(address)", +"8e13435b": "MathPractice()", +"8e14cc91": "CreateTokens()", +"8e151947": "newBitsoAddress(address)", +"8e15e94b": "countOfCell()", +"8e15fc87": "clearDeposits()", +"8e165058": "sendTokensToBuyers()", +"8e17de8b": "Controlled(address)", +"8e180733": "_validCrowdsale()", +"8e1876ee": "permaStop()", +"8e19899e": "withdraw(bytes32)", +"8e19ee4c": "Recovery(uint256,address,address)", +"8e1a1c30": "WithdrawLeftToOwner(uint256)", +"8e1a55fc": "build()", +"8e1aa2c4": "bts_address1()", +"8e1b9f42": "CROWDSALE_WALLET_ADDR()", +"8e1bb633": "triggerRecovery(uint256,address,uint8,bytes32,bytes32,uint256)", +"8e1d9545": "setTokenSaleHalt(bool)", +"8e1dfd48": "isMerhantAlreadyRegister(address)", +"8e1e2add": "tradeABIHash()", +"8e1e3e6c": "POMACOIN()", +"8e1e3eb1": "setMinBuyEth(uint256)", +"8e1eeb09": "BarrelAgedFOMO()", +"8e1f0614": "EGYPT()", +"8e1fda84": "WorkcoinCrowdsale(address)", +"8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", +"8e207fa0": "getApproveValueValue()", +"8e22e8de": "Cryptolotto7Days(address,address,address,address)", +"8e236cea": "setAnnualPrice(uint256)", +"8e242d54": "withdrawSharesTo(address,uint256)", +"8e25071a": "setProxyCurrator(address)", +"8e263e6f": "firstAttack(address,uint256,uint256[],uint256[])", +"8e268934": "LogSendPOSTokens(address,uint256,string)", +"8e26a223": "getPoSReward(address,address)", +"8e26c09d": "waitPeriod()", +"8e26c30c": "carTransferState()", +"8e26e582": "_mintDataStream(address,uint256,bytes32,bytes32,uint256)", +"8e273ef4": "buyLicenseForERC20(address)", +"8e27d719": "deposit(string,uint256)", +"8e280dce": "findNextYear(uint256,bytes)", +"8e2832b7": "ethereumToTokens(uint256)", +"8e298549": "migrateListing(bytes32)", +"8e29d149": "claim_block()", +"8e2a37b2": "privateAllocated()", +"8e2a6470": "allocateShares(address,uint256)", +"8e2a8312": "EmjacToken()", +"8e2ab359": "_transferToAddress(address,address,uint256,bytes)", +"8e2ae564": "mintingDone()", +"8e2c6f4d": "initiateVerification(address,bytes,bytes)", +"8e2d0699": "getCompte_32()", +"8e2e0776": "doInitialDistribution(address,address,address)", +"8e2e2077": "setTokensForSaleCount(uint256,bool)", +"8e2f0f46": "ownerSetMarginPremium(uint256)", +"8e303097": "BestWallet(address)", +"8e3047d9": "getBonuses(address)", +"8e3047e0": "getCrossConnectorReturn(address,address,uint256)", +"8e3058f3": "getPostFromId(address,string,uint256)", +"8e3073a6": "getEth(uint256)", +"8e314783": "addTotalPaid(address,uint256,uint256)", +"8e316327": "calculateEggSell(uint256)", +"8e3177e1": "purchaseIpfsAfterTitle(bytes32)", +"8e32217a": "calculateTokensQtyByEther(uint256)", +"8e327dd3": "setInvestor(address,uint256)", +"8e32e421": "expiredTime()", +"8e3390b4": "contributeMethodABI()", +"8e339b66": "controllerApprove(address,address,uint256)", +"8e343516": "balanceWinPoolToWinSystem()", +"8e351097": "MintedTokenCappedCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", +"8e3571c0": "testNewCounterValueAfterAIncreaseAndADecrease()", +"8e357b6f": "AirTrafficControllerROS(address,int256,address)", +"8e36a9f1": "Neurus()", +"8e370b3d": "UnsoldTokensReturned(address,uint256)", +"8e372dcd": "refineCoke(uint256)", +"8e37adec": "setAddressArr(address[])", +"8e37c1e0": "collectorWeiCollected()", +"8e391cb2": "ProxyERC223()", +"8e3957d9": "RandomNumber()", +"8e3ab913": "transferToMany(address,address[],uint256[],uint256,uint256,address)", +"8e3af93f": "finalizeMint(uint256)", +"8e3b4525": "setExchangeLimit(uint256)", +"8e3bd6fa": "SetTradeable(bool)", +"8e3d4e5e": "Fibonacci(bytes)", +"8e3d5303": "addRegistrar(address,string)", +"8e3d63e3": "multiSendEth(uint256,address[])", +"8e3d7ae7": "drawFortune()", +"8e3dbf53": "getSalesPartnerAmount(address)", +"8e3dcc60": "sell_spice_melange(uint256)", +"8e3e1d86": "fisherYates(uint256)", +"8e3ed7d7": "sendEthers(address,uint256)", +"8e406072": "getKingdomCount()", +"8e414295": "Elixer()", +"8e416b9b": "randomFight2DeathContract()", +"8e417b30": "GTokenContract(uint256,string,string)", +"8e424f16": "onlyOwnerSetCompanyWallet(address)", +"8e434b82": "DADCoin()", +"8e438b70": "ConpayToken()", +"8e43e70e": "ParentKidsLinkToken(uint256,string,string)", +"8e44e74e": "DEFROST_MONTHLY_PERCENT()", +"8e452fc0": "findAvailableGame(address)", +"8e4553a4": "script(address,bytes)", +"8e455a1d": "_createVote(uint256,uint256,uint256)", +"8e468a88": "donationMap(address)", +"8e46afa9": "getDefaultGracePeriod()", +"8e46b68b": "keysRec(uint256,uint256)", +"8e46f716": "CoinX(uint256,string,string)", +"8e46fbb2": "testBitsXorFailIndexOOB()", +"8e4748cf": "MintingERC20(uint256,uint256,string,uint8,string,bool,bool)", +"8e47b87b": "FundsReceived(address,uint256)", +"8e47dd03": "currentProfitPct()", +"8e48474a": "chooseWinner(string,string)", +"8e496832": "DataContract()", +"8e497470": "displayNick(address)", +"8e499bcf": "numTokens()", +"8e49a2c2": "turnmigrate()", +"8e49a41f": "getVestingFromContract(address,address)", +"8e49cf5c": "soldSoulBecause(address)", +"8e49dd3f": "Failed(uint256,address,uint256,address,address,uint256,address,uint256,uint256)", +"8e49ff47": "AntzToken()", +"8e4a23d6": "Unauthorized(address)", +"8e4a943d": "IcoResumed()", +"8e4ab74b": "BANKROLL()", +"8e4adf4e": "tokenUpgrader()", +"8e4afa51": "checkTransferToICAP(bytes32,uint256)", +"8e4b0190": "deleteWorkerAdress(address)", +"8e4bf820": "settleBet()", +"8e4c64c0": "grantsController()", +"8e4cb2a9": "balances_after_buy(address)", +"8e4d0a83": "setLockupList(address,address,uint256)", +"8e4d5053": "getcontractBalance()", +"8e4e0f03": "teamAndExpertsTokens()", +"8e4f9606": "updateReputationScore(address,uint256)", +"8e4fa788": "accountHasCurrentVote(address)", +"8e5051f0": "weiToOwner(address,address,uint256)", +"8e50a65d": "prepareDividends()", +"8e514018": "getRandomPrice()", +"8e5152d6": "addToAngelExperienceLevel(uint64,uint256)", +"8e51b069": "ownerAddMarket(address,address,address)", +"8e51d624": "failsafe_addition(uint256,uint256)", +"8e52019d": "ECASH()", +"8e52cb51": "getRecordKey(bytes,bytes,bytes)", +"8e535ade": "lrcInitialBalance()", +"8e53d5e4": "cumulative(uint256)", +"8e53f4fb": "preicoSale()", +"8e543a12": "getLoanAmount(address,address)", +"8e550bd1": "lastNewInterest()", +"8e57d397": "modifyHorseyFeedingCounter(uint256,uint8)", +"8e588306": "getAutonomousSoftwareOrgInfo()", +"8e5919b6": "setEdoRate(uint256)", +"8e592caf": "KittyKendoCore()", +"8e599d50": "joinFunction()", +"8e59a15b": "checkMinGoal()", +"8e5b2899": "check(bytes20,uint24,uint32,bytes32[],uint16)", +"8e5c2e8a": "LogContractOwnershipChangeCompleted(address)", +"8e5d97a2": "releasePendingTransfer(uint256)", +"8e5e91ac": "executeStakeholderTransaction(uint256)", +"8e5ee9ec": "currencyToToken(bytes32[8],bytes)", +"8e5ef4ea": "DataShieldCoin(uint256,string,string)", +"8e5ef8fe": "ChivesToken()", +"8e5fd5fa": "validateReservation(address,uint8)", +"8e604b1d": "queryItems(bytes32,uint256,bool[6],bool)", +"8e611cee": "deductFromUnminted(uint256)", +"8e62bbd9": "DigitalCoin()", +"8e62c982": "initialARXSupply()", +"8e634029": "communityContract()", +"8e637a33": "authorizePayment(string,address,uint256,uint256)", +"8e63d7e1": "getTopLevel(uint256,uint256)", +"8e63ef75": "icoEtherReceivedPrivateSale()", +"8e641963": "_mintCards(uint32)", +"8e64a720": "PlendsToken()", +"8e65f7e4": "logAllTransactions(address)", +"8e6635a5": "toUint128Throw()", +"8e66ca5f": "setFirstBonusLimitPercent(uint256)", +"8e66da2f": "cancelBet(uint8,uint256)", +"8e66fea2": "TTCTokenERC20(uint256,string,string)", +"8e68f000": "oneTokenInWei(uint256,uint256)", +"8e690315": "AttributaOwners()", +"8e69367e": "RandomizedPriceFeedApi()", +"8e694807": "PHOENIX_CORSAIR_MAX_CARGO()", +"8e6954de": "totalFci()", +"8e69ceec": "dispatchTokens(address,uint256)", +"8e69e204": "getPeriodsWithdrawal(address,bytes32)", +"8e69eeb9": "setDefaultVoteRules(uint256[5])", +"8e6a1b24": "PIXToken(address)", +"8e6a2afa": "MAX_PERIOD_COUNT()", +"8e6b5462": "setOrCacheDesignatedReportNoShowBond(uint256)", +"8e6b551c": "sumHardCapPublicSale()", +"8e6b77a2": "interestArray()", +"8e6b851d": "valueGet(string)", +"8e6bee97": "pay(uint256,bytes32)", +"8e6ce1b1": "getActiveSellDetails(bytes32)", +"8e6d2599": "_activeness2level(uint256)", +"8e6d531d": "setSubPromoter(address)", +"8e6d7db8": "updateInstitutionAsset(string,string,address,address)", +"8e6ddab1": "createMonster(uint256,uint256,uint256,uint256,uint256,bytes)", +"8e6df32f": "exerciseOptions(address,uint256,uint256,uint256,bool)", +"8e6f2353": "ln(int256)", +"8e6f843f": "EarlyExchangeRateChanged(uint256)", +"8e6fdd31": "raisedEth()", +"8e6ff99a": "addVineyard(bytes32,uint16,uint24,uint32,uint16)", +"8e70fdbc": "setIsNotAdmin(address,bool)", +"8e71decb": "findWinner()", +"8e71f4fd": "_hasAllSigs(address,address)", +"8e728fec": "configTimeInit()", +"8e7296b1": "MOACSupply()", +"8e72a926": "bankRollBeneficiary()", +"8e72ca91": "proxyIncreaseWithdrawalChunk()", +"8e735547": "getUserByEmailVerify(bytes32)", +"8e739461": "getBalance(bytes32)", +"8e73d42c": "lunyrMultisig()", +"8e7418cb": "isSecondRound()", +"8e744f54": "tranferMinterOwnership(address,address)", +"8e74a528": "avarageBlockTime()", +"8e752b40": "startTeamTrade()", +"8e7547cb": "setWithdrawWallet(address,address)", +"8e755125": "testIntFixedArray(int256[3])", +"8e7558cd": "closeStage(uint256)", +"8e75dd47": "companyCount()", +"8e75f23c": "get_collateral_bix_amount()", +"8e760afe": "verify(bytes)", +"8e76581e": "getManifestId(address,bytes32,uint256)", +"8e767411": "setWhaleIncreaseLimit(uint256)", +"8e768288": "isSane(address)", +"8e76e3ba": "BillofLaden()", +"8e77304c": "YOUToken()", +"8e77afc5": "BSCore()", +"8e77d147": "transactionfeeAmount()", +"8e77fe2f": "blacklistAddresses(address)", +"8e77ff1f": "setMigrateTokenContract(address)", +"8e78eff6": "get_add(uint256)", +"8e78f0f2": "remOperator(address)", +"8e7952c6": "davToken()", +"8e79dc91": "set_participant_arbits(address,uint256)", +"8e7a1697": "setDepot(uint256,uint256)", +"8e7a9687": "check_vote(string)", +"8e7b36be": "payFor(address)", +"8e7b90e4": "setTgeAddress(address)", +"8e7c9e50": "logFloor(int256,uint8)", +"8e7cb6e1": "getIndex(uint256)", +"8e7cd5a7": "distributeExternal(uint256,uint256,uint256,uint256)", +"8e7d0f44": "publicKeyConsensus()", +"8e7e060f": "buyCards(uint8)", +"8e7e34d7": "fromHex(string)", +"8e7e879f": "migrateAll(uint256[])", +"8e7e99b8": "TotalSupply(uint256,uint256,address)", +"8e7e9a3c": "calculatePrizes()", +"8e7ea5b2": "getWinner()", +"8e7fd292": "trySetSubnodeOwner(bytes32,address)", +"8e7fdc6c": "LogBetProperties(uint256)", +"8e7fffe8": "individualRoundCap()", +"8e80ade9": "hodlTokens(address,uint256,uint256)", +"8e818aa1": "acceptAdminWithdraw()", +"8e81bc9c": "addWhitelistedBurn(address,address)", +"8e81c579": "poolEthSold()", +"8e81c64d": "burnTokens(uint256,uint256)", +"8e821b24": "persians()", +"8e84844e": "changeWeight(address,address,uint256,uint256)", +"8e84d413": "isFree(uint256[],uint256)", +"8e854ed8": "getResult(uint256,uint8)", +"8e8556b4": "privateSaleEtherRaised()", +"8e86077b": "foundingTeamSupply()", +"8e8622f9": "_getTAOIdByName(string)", +"8e869843": "sellfloaksAgainstEther(uint256)", +"8e86d030": "getMessageRequestHash(address,uint256)", +"8e8758d8": "tokenAllowance(address,address,address)", +"8e87f57c": "setCompare(bytes2)", +"8e87fcbf": "transformFrom(address,uint256,uint256)", +"8e885cbb": "LARGE_PURCHASE_BONUS()", +"8e894a6f": "getTileIDByOwner(uint16,address)", +"8e89ad00": "setMaxDailyPerUser(uint256)", +"8e89f6e2": "Crowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"8e8a3983": "paySomeone(address,address)", +"8e8a4a20": "userTenantHashExists(bytes32)", +"8e8afc34": "setSlaveServer(uint32)", +"8e8b34bc": "createNewSecurityDeposit(string,string,uint256)", +"8e8bc816": "TokenBonus(address,address,uint256)", +"8e8cf4a8": "getThisBalance()", +"8e8df687": "processedTokens()", +"8e8e4675": "gur(address,address)", +"8e8e75fb": "addExternalController(address)", +"8e8f1e84": "setPublicSaleParams(uint256,uint256,uint256,uint256)", +"8e8f39d3": "getBlockNumberM1()", +"8e8fe845": "IsDistribRuSTMingFalg_()", +"8e9030f4": "maximumNonWhitelistAmount()", +"8e90b71a": "changeStatus(bytes1,bytes32)", +"8e90ccbe": "Governance(address[],uint256,uint256)", +"8e90e1e9": "_createCutie(uint40,uint40,uint16,uint256,address,uint40)", +"8e9185cb": "NON_TRANSFERABLE_TIME()", +"8e9206a0": "EOM()", +"8e928076": "setMaxGas(uint256)", +"8e92aea3": "_fetch(uint256)", +"8e92ee66": "redeemShardsIntoPending()", +"8e93907b": "FamilyResourceControl(uint256,uint256,uint256,uint256,uint256[])", +"8e93c883": "setMarketingTokensWallet(address)", +"8e940bb7": "test_testableContributionCaseExpectFailure()", +"8e943c8b": "checkParticipants()", +"8e94a5f3": "sellerRefund(uint256)", +"8e955978": "pushProposal(address)", +"8e95b0cd": "getSponsorshipsTotalRefunded(address,uint256)", +"8e95b28b": "delegateUrl()", +"8e964de9": "COPPER_AMOUNT_XPER()", +"8e9674c8": "WEMACOIN()", +"8e96eb3e": "coePerEthOffset()", +"8e979bad": "setwinPercent(uint256)", +"8e984ccd": "joinGameAndBattle(uint256,uint256)", +"8e98c6b9": "getLeaderboardPlayers()", +"8e98cee1": "update_session(uint32,uint64,uint64)", +"8e9a5890": "danGold()", +"8e9a7159": "LZLPrivate()", +"8e9aed2e": "HACHIROKU()", +"8e9b7ab8": "Partners(address)", +"8e9bf09c": "issueTokenToAddress(address,uint256)", +"8e9c3ce2": "assetOfBitmark(uint256)", +"8e9ccd04": "computeIndexId(address,bytes)", +"8e9e5c37": "requiringAuthorization()", +"8e9e697d": "reset(uint256,uint256,uint256,uint256,string)", +"8e9e8b14": "marketingPartnerSupply()", +"8e9f2738": "_transferAllArgs(address,address,uint256)", +"8e9f9072": "signedMessageECRECOVER(bytes32,bytes32,bytes32,uint8)", +"8ea04cb3": "getUpgradability(uint256,address,address,string)", +"8ea06c68": "BLMToken(uint256,uint256)", +"8ea0926a": "addBaseStats(uint256,uint8[8])", +"8ea0b540": "getProjectInformation(uint256)", +"8ea0d898": "DestroyedBy(address)", +"8ea1ee86": "DapCarToken()", +"8ea1ff21": "OwnedExample(address)", +"8ea25644": "XYY()", +"8ea390c1": "getOwedDividends(address)", +"8ea44bab": "setProviderAdmin(uint256,address)", +"8ea51696": "JRT()", +"8ea5220f": "devWallet()", +"8ea55bd7": "_pushContributor(address,bytes32)", +"8ea56e57": "ADV()", +"8ea64376": "opsAddress()", +"8ea67eb0": "ETCharPresale(address)", +"8ea69e37": "TestToken(uint256)", +"8ea6dd82": "BotAdded(address)", +"8ea7296b": "deleteChild(address)", +"8ea73a7c": "setDonationReward(uint256)", +"8ea74d95": "transferDaico(address)", +"8ea77300": "RELEASE_START()", +"8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", +"8ea83031": "swapContract()", +"8ea83681": "mintTreasuryTokens(address,uint256)", +"8ea8dc9d": "APP_MANAGER_ROLE()", +"8ea8e149": "removeService(address,address)", +"8ea8f83c": "activate(uint256,uint256)", +"8ea91bf3": "createVestedToken(address,uint256,uint256,uint256,uint256)", +"8ea95cbc": "lastDepositorAmount()", +"8ea98117": "setCoordinator(address)", +"8ea98db4": "Mmchain(uint256,string,string)", +"8eaa1e29": "getContentByData(address,uint256,string,string)", +"8eaa5d1c": "amount50kUsdInCents()", +"8eaa6ac0": "get(bytes32)", +"8eaa8d4f": "RefundedInvestor(address,uint256,uint256)", +"8eaa9c91": "Client()", +"8eaaeecf": "getUserCapInTokenWei(address,address)", +"8eac494c": "tierWhitelisted(uint256)", +"8eadb561": "IntelliToken()", +"8eaeb531": "setAccountA(address)", +"8eaf1dab": "PRCT100_R2()", +"8eafe0f0": "getCustomerRating(string)", +"8eb04f02": "setRefundManagerContract(address)", +"8eb066ce": "init(address[5],uint256[6],uint8,bytes32,bytes32)", +"8eb0e73e": "bonusPctSteps(uint256)", +"8eb179ad": "maxHardCaphardcap()", +"8eb206d1": "deletePage(bytes32,bytes32)", +"8eb36e3d": "initData()", +"8eb3e0e3": "socERC20(uint256,string,string)", +"8eb45cbf": "frozenProfitDate()", +"8eb4e0ad": "batchRelay(bytes16[],address[],address[],uint256[],uint16[],uint128[],uint8[],bytes32[],bytes32[],uint8[])", +"8eb547d4": "squareOfSums(uint256,uint256)", +"8eb5a7ac": "changePermission(address,bool)", +"8eb5f650": "ETIN(uint256,string,string)", +"8eb6418e": "LoritaBi()", +"8eb64b3d": "multi(address[],uint256)", +"8eb64b61": "MAX_NON_SALE_SUPPLY()", +"8eb689f7": "giveFor(address)", +"8eb6d683": "coinAllowanceOf(address,address)", +"8eb6ffaa": "withdrawBloc(uint256)", +"8eb717fc": "increaseCap()", +"8eb76eed": "emitUserRatingGiven(address,address,uint256)", +"8eb7ffe8": "assignInBatches(address[],uint256[])", +"8eb831fe": "ChangeOperator(address)", +"8eb857f8": "getData_25()", +"8eb88c1b": "EvergreenHealthToken()", +"8eb89a61": "getPointsBalance()", +"8eb976ca": "assertEq17(bytes17,bytes17)", +"8eb98150": "NOT_ENDED_FINE()", +"8eba2966": "RESERVE_PORTION_MULTIPLIER()", +"8ebaae08": "createListing(uint256,uint256,uint256,address)", +"8ebac11b": "getHash(address,uint256,uint256,uint256)", +"8ebb2ce7": "setProfitContainerAddress(address)", +"8ebb5aee": "calculateTokenBuy(uint256,uint256)", +"8ebc266d": "getCurrentUSDCentToWeiRate()", +"8ebe555b": "allocateShares(uint256,uint256)", +"8ebed616": "CRF()", +"8ec3167f": "calculateGoalsFromAttributeTotals(uint256,uint256,uint256[],uint256[],uint256)", +"8ec3272d": "addPicture(string,bytes32,string,address)", +"8ec48bcb": "BitCharity()", +"8ec49939": "switchOFFfreeForAll()", +"8ec4dc95": "getPerson()", +"8ec521a8": "setupStakeholders(address[],uint256[],uint256[],bool[],uint256[],uint256[],uint256[])", +"8ec5a309": "testHash(string)", +"8ec5ff41": "isUid(string)", +"8ec63da9": "checkIsOnlyProxy(bytes32)", +"8ec6677d": "registerUsername(string,address)", +"8ec84812": "updateProfit()", +"8ec86497": "clearname()", +"8ec89e4f": "_isActive()", +"8ec8fcad": "ADV(uint256,string,string)", +"8ec9925e": "jackpotToken()", +"8ec9a5de": "getLeaf(bytes32,uint256)", +"8ecaa140": "_refundHighestBidder(uint256)", +"8ecbc4e9": "setNewBRXPay(address)", +"8ecc0643": "BuyAd(address,uint256,string,string,string,uint256,uint8,address)", +"8ecc0950": "returnToOwner()", +"8ecc107f": "buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"8ecc4353": "adddayruns(address,uint256)", +"8eccf58e": "getTokensCountPerEther()", +"8ecd2fe8": "testMul256By256()", +"8ece19f6": "setTokenLock()", +"8ece39cd": "startOraclize(uint256)", +"8ece85a4": "ETpay(uint256,string,string)", +"8ecebf34": "MorpheusToken()", +"8ecf0d0b": "getCreated()", +"8ecfc412": "workForce()", +"8ed06b62": "getShipPrice(uint256,uint256)", +"8ed08711": "saleMinimumWei()", +"8ed09bc9": "registerVoter(bytes32,address)", +"8ed0ac8b": "closeTrancheAddition()", +"8ed1858e": "distributeELTCSmall(address[])", +"8ed20fa0": "tokenWeiToSale()", +"8ed2395f": "ZCNYToken(address)", +"8ed33545": "sub_presale_arbits_sold(address,uint256)", +"8ed34751": "performHealthCheck(uint8)", +"8ed399ca": "teamWallet_2()", +"8ed3fa7c": "codexCoin()", +"8ed5047c": "updateCokeTotal(uint256,bool,uint16)", +"8ed5f2ca": "newTestableCampaign(string,uint256,uint256,address)", +"8ed67a44": "setPrice(uint16)", +"8ed6910f": "limitSell(uint256,uint256)", +"8ed7c3d3": "sendTokensManager(address,uint256)", +"8ed7ca93": "finishExam()", +"8ed8067e": "FundContract()", +"8ed882c5": "designatedReporterWasCorrect()", +"8ed91318": "nextAssetId()", +"8ed9be36": "temp(uint256,uint256,bytes32,bytes32)", +"8ed9fd75": "ICO_Supply()", +"8edb726d": "modifyEndFundingTime(uint256)", +"8edbf436": "getPriceInfo(address)", +"8edc4f8f": "isValidCap(uint256,uint256)", +"8edc707b": "adoptionOffers(bytes5)", +"8edcf21d": "getCurrentYearGameMiningRemainToken(uint16)", +"8edd6eb6": "getFund()", +"8eddc306": "__exchangerCallback(address,address,uint256)", +"8eddc804": "notifySale(uint256,uint256)", +"8eddf665": "onInvest()", +"8ede1817": "getReturnTime(uint256)", +"8ede3a34": "KeplerToken()", +"8ede74c1": "changeRage(uint256)", +"8ede94b4": "setLineUpEnable_miner(address,uint256)", +"8edeb15d": "donation()", +"8edec689": "wd()", +"8edfaef8": "getSetupParameters()", +"8edff3db": "getTerminal(uint256)", +"8ee030bd": "FaceterToken(address,address)", +"8ee070d9": "MYEMPEROR()", +"8ee0942b": "setSignatureROFR(bytes)", +"8ee0ffe8": "sendStakingContract()", +"8ee1409e": "TitanToken()", +"8ee17e0a": "MarvinCoin()", +"8ee21b8e": "get_default_keys()", +"8ee365fa": "removeAddressesFromAdmins(address[])", +"8ee36f05": "isVoted(address,uint256)", +"8ee3f472": "BoutsCrowdsale(uint256,uint256,uint256,address,address,address)", +"8ee3f72f": "PinCode()", +"8ee4d44b": "addAddressToOperators(address)", +"8ee4fd8a": "claimWithSignature(bytes)", +"8ee553cc": "getCroById(uint256)", +"8ee5a8b3": "UpgradeProposals(uint256)", +"8ee6540c": "seventeen()", +"8ee6f301": "readvalidrollsXteam(uint16)", +"8ee78046": "draw(address,uint8[])", +"8ee833cc": "isValidTenant(string,address,uint256)", +"8ee8a5c4": "Charity(string)", +"8ee93cf3": "post(string)", +"8ee97ff4": "VirtualRewardToken()", +"8eeb203e": "exchangeWeight()", +"8eeb33ff": "crowdSaleAddr()", +"8eeb3b0e": "KJCPerEthereum()", +"8eeb5073": "_bundle(address,uint256,uint256[])", +"8eeb5c97": "cancelDo(bytes32)", +"8eeb7d11": "unlockAllocationAddress(address)", +"8eeb8e5a": "MUC()", +"8eec5d70": "getPoolCount()", +"8eec6f7b": "lockETH(uint256)", +"8eec99c8": "setNewAdmin(address)", +"8eecddcf": "betBlockNumberOf(address)", +"8eecf64d": "createContractWithMeta(address,uint64,bytes,string)", +"8eee1cd6": "buyerExceededApprovedAmount(uint256,address)", +"8eef059e": "_lowerDown(uint256,address)", +"8ef0f09a": "createPromoPow(address,string,uint256,uint256,uint256)", +"8ef1a6b6": "makeProfit(uint256)", +"8ef1e886": "RESERVE_PERCENT_EVE()", +"8ef22afe": "getCostToCancel()", +"8ef25a7a": "KeplerTokenExtraSale(uint256,address,address)", +"8ef26a71": "coinSentToEther()", +"8ef28249": "totalGuesses()", +"8ef2826e": "HODLWallet(address[],uint256[])", +"8ef292fc": "BTM()", +"8ef326ea": "getCubeCount()", +"8ef44301": "tokenRecoveryFromTrade(address,address,address,uint256)", +"8ef47296": "StorageController(address,address,address,address)", +"8ef483eb": "getMyWager()", +"8ef490ea": "fullname()", +"8ef4c807": "lockedBalanceOf(address,uint256)", +"8ef53edf": "InitAssignOK()", +"8ef5ae21": "setupInfo(string,string,string)", +"8ef5ce28": "test1_addingFirst()", +"8ef5eaf0": "drop(address[])", +"8ef6e7fe": "build(string)", +"8ef6ed53": "_getRandom(uint256,uint256)", +"8ef72d15": "backEthRatio()", +"8ef79e91": "setTokenBaseURI(string)", +"8ef7c649": "getTicketPrice(uint8)", +"8ef8125e": "frontRunnerSetTimestamp()", +"8ef82010": "orderExecution(bytes32,uint256)", +"8ef85e04": "secondWeekTokenPrice()", +"8ef87843": "randomSkinAppearance(uint256,uint128)", +"8ef8f241": "getEmployerInfo()", +"8ef9c904": "NewAmbassador(address,address)", +"8efa00e2": "getPRETDETokenExchangeRate(uint256)", +"8efa23d1": "RELEASE_WALLET()", +"8efa3e21": "setIsMinter(address,address,bool)", +"8efbd512": "getAccountNumber(address)", +"8efc777f": "isBeta(bytes)", +"8efd4c75": "QUARTERLY_RELEASE()", +"8efd5f92": "divIntervalDays()", +"8efe6dc4": "changeMonthlyWithdrawLimit(uint256)", +"8efe7801": "showWinnersSort()", +"8efe8c1c": "EPTToken(address,address)", +"8eff3c29": "getRecords()", +"8effda0d": "IndorseSaleContract()", +"8f003a2d": "StarSportsToken()", +"8f00c0af": "has_contract_ended()", +"8f00cbfa": "winnerIndex()", +"8f00f49b": "totalAssetTokens()", +"8f0165e1": "min_pay_wei()", +"8f01932a": "mntpToMigrateTotal()", +"8f01e1e2": "getactiveleveltime(uint256)", +"8f02bb5b": "setTransferFee(uint256)", +"8f03850b": "numContributors()", +"8f038a5a": "initializeEthReceived()", +"8f039a10": "changelp8(address)", +"8f03f5c3": "firstUnlocked()", +"8f0427b1": "sellPosition(uint256)", +"8f049de5": "endBetRed()", +"8f054bf3": "referralList(address)", +"8f0563b9": "substring(string,int256)", +"8f061ef5": "Token(string,string,uint256,uint256)", +"8f06492d": "callOnRemoval()", +"8f0816bc": "PERKToken()", +"8f08288a": "clearBets()", +"8f08a60a": "transfer2(uint256,address[],uint256[],bytes,bytes,bytes,bytes)", +"8f08d44d": "burnAsset(uint256)", +"8f08e369": "withdrawApplication(address)", +"8f094efb": "getMineableSupply()", +"8f0a4c1b": "startPreSales()", +"8f0a6ecb": "returnBountyTokens(address,uint256)", +"8f0bc152": "claim(address,uint256,bytes)", +"8f0c724c": "setOperationsCallGas(uint256)", +"8f0d16da": "emitIssuersUpdated(address,bool)", +"8f0d3b8b": "_buy(uint256,uint256)", +"8f0d67ef": "activationTime(uint256)", +"8f0ec6b3": "ZanCoin()", +"8f10cad0": "StreampayToken()", +"8f10fd45": "getBuyCount()", +"8f112370": "addToAffiliate(address,uint256)", +"8f11e5f9": "checkWithdrawValue(uint256)", +"8f1224ce": "fixInvestment(address,uint256,uint256)", +"8f12355d": "assertEq7(bytes7,bytes7,bytes32)", +"8f1327c0": "getRound(uint256)", +"8f134025": "rewardSent(uint256)", +"8f13fd29": "setPriceValue(bytes32,uint256)", +"8f140568": "isServiceAddress()", +"8f142842": "getByAlias(string)", +"8f142907": "stables()", +"8f14b76b": "sendReferrer()", +"8f14d8a3": "reclaimContractTokens()", +"8f15024f": "ticketsSold()", +"8f152d0e": "vestingConfigured()", +"8f158e76": "remainingPublicSaleCap()", +"8f163497": "AgaCoin()", +"8f16eb1a": "setI_R1(uint256)", +"8f188b40": "migrateInvestor(address,uint256,uint256,uint256)", +"8f19ff45": "_handleTokensReceived(uint256)", +"8f1a422c": "minterWallet()", +"8f1a927a": "numTicksSinceAuctionStart(uint256)", +"8f1af992": "claimTwitterId(uint256,address,uint8,bytes32,bytes32)", +"8f1b0b02": "bulkTokenMint(address[],uint256)", +"8f1c204c": "test_fiveAssertFalse()", +"8f1cc85e": "SAGAcrowdSale(address)", +"8f1cc94e": "HashTypeAdded(uint8)", +"8f1d5f7e": "getLedgerNameHash()", +"8f1d8f41": "ethInvestment(address,uint256,uint256,uint256,uint256)", +"8f1d90b1": "tokenBearer()", +"8f1df4f7": "setPrices(uint256,uint256,uint256,uint8,uint256,uint256,uint256)", +"8f1eda37": "wmul(uint128,uint128)", +"8f1f761a": "Rewards_Supply()", +"8f1fc530": "startSplit()", +"8f1fc6bb": "testRemoveProductFromCart()", +"8f1fdbb9": "offerEth(uint256)", +"8f212eb7": "BITSDTokenInitialized(address)", +"8f217d6b": "lastChar(string)", +"8f22964d": "NegativeWhuffiesSent(address,address,uint256,string)", +"8f22d128": "testdigiToken()", +"8f24f2a3": "takeBuyOrder(address,uint256,uint256,uint256,address)", +"8f25159c": "getDayDepositLimit(uint256)", +"8f259117": "numcallsinternal()", +"8f25eec1": "BetWon(address,uint256,uint256)", +"8f26a5ab": "setSaleAgent2(address)", +"8f272c0b": "minor_partner_address()", +"8f2757d8": "Bitshopandearn()", +"8f282b87": "getSold()", +"8f283970": "changeAdmin(address)", +"8f287be5": "PitEur(address)", +"8f288526": "TokensPurchased(address,uint256)", +"8f288644": "getHighestBid(uint256)", +"8f2900d5": "timeLocks(uint256)", +"8f291158": "listBBO()", +"8f296759": "UTILITY_ROLE()", +"8f29f09a": "fetchPaidOrdersForMerchant(address)", +"8f2a3093": "freeBeerOnMe(string)", +"8f2a6d3e": "YOOBAToken(address,address,address,address,address)", +"8f2abe9a": "Voting(uint8,address,uint256)", +"8f2adbee": "tileBonuses(uint256,uint256,uint256)", +"8f2bab07": "getChainLength()", +"8f2be8e0": "MauiWowieToken()", +"8f2c2ab7": "checkAndCloseDeposit(uint256,bool)", +"8f2c3af8": "lastBlock_v10Hash_uint256()", +"8f2c44a2": "UnicornMilker()", +"8f2e695c": "ICO_state()", +"8f2e8d4a": "createTrack()", +"8f2e9ee7": "theDay(uint256)", +"8f2eabe1": "isValidatorFinalized(address)", +"8f2ec012": "dayToBlockNumber(uint256)", +"8f2ee2df": "mainPot()", +"8f2ef6b7": "CMGF()", +"8f303df9": "priceExpired()", +"8f30435d": "getCompetitionValues(string,uint8)", +"8f32106e": "CreateALLY(address,uint256)", +"8f32cf0c": "team_address()", +"8f32d59b": "isOwner()", +"8f33221e": "addContract(address,uint256,uint256)", +"8f33c285": "getAyantDroitEconomique_Compte_8()", +"8f33df77": "countAllVotes(uint256)", +"8f34296b": "Applied()", +"8f348cfe": "InsertProject(string,string,address,address,string,string,address)", +"8f34ac6e": "setCoOwner(address)", +"8f350624": "contributionOpen()", +"8f356f97": "lottoHighestNumber()", +"8f35a75e": "getInvestor(address)", +"8f36039c": "holdContract()", +"8f367001": "numTokensAbleToPurchase()", +"8f368359": "getTimeUntilInterestIncrease(bytes32)", +"8f3684bf": "returnTotalDividend()", +"8f36d03e": "_finishSpin(address)", +"8f36f8f1": "redeemStake(address,address,uint256,uint8,bytes32,bytes32)", +"8f37a0f9": "getTo(uint256)", +"8f382a00": "ETHEAL_UNIT()", +"8f38a896": "BRONZE_AMOUNT_XPER()", +"8f38bf34": "updatePrices(uint256,uint256[],uint16,uint256[],uint256[])", +"8f38d8cc": "S(string)", +"8f38f309": "buyXid(uint256,uint256)", +"8f3956a4": "ChangeUpgradeMaster(address)", +"8f395eb6": "addIntComparison(bytes32,int32,bytes1)", +"8f398180": "isUnknown(address)", +"8f3984b5": "setRole(address,string,bool)", +"8f3b6b84": "centsPerToken()", +"8f3b8c3a": "setTokennCrowdsale(address,uint256)", +"8f3bab85": "readFromCart(uint256)", +"8f3bed06": "pickUniquePacks(uint256[])", +"8f3de282": "onSealed(address,address,uint256)", +"8f3e568a": "findOutInterestByClientCategory(address,uint256,uint256)", +"8f3e8747": "getGasForMcrData()", +"8f3f50fc": "startICOTimestamp()", +"8f40104c": "init(address,uint256[],uint256,uint256,uint256,uint8,uint256,bool)", +"8f409b85": "Coin(uint256,string,uint8,string)", +"8f41e442": "breakTie(uint256)", +"8f420866": "DEFAULT_SEND_GAS()", +"8f426437": "getTankOwner(uint32)", +"8f42a864": "TitaToken()", +"8f43166b": "getGivenCount()", +"8f44097a": "TokenRDC(address,address,address)", +"8f449a05": "subscribe()", +"8f456125": "setCrowdSaleAddress(address)", +"8f4613d5": "left10(uint256)", +"8f4646b7": "transferPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"8f46b586": "withdraw_team_fund(address,uint256)", +"8f4708bd": "mintingBountyFinish()", +"8f477c55": "updateLink(address,bytes)", +"8f4783f1": "_generateRealmSale(uint256,uint256)", +"8f47dd19": "bulkInit(address[],address[],uint256[])", +"8f484394": "manual_withdraw()", +"8f48c14a": "updateMinCompanyValue(uint256)", +"8f49a264": "provide_eth()", +"8f49ccf4": "reportUsage(uint256,uint256,address)", +"8f49da4b": "distributedToken()", +"8f4a2a51": "defaultWallet(address)", +"8f4b4b98": "messagesSigned(bytes32)", +"8f4ccce8": "startTokenVotes(address[15])", +"8f4ce746": "buyDeferredPresaleTokens(address)", +"8f4d8723": "_CallExecuted(address,bytes32)", +"8f4d874a": "referralTokensAddress()", +"8f4dc0d1": "updateAvailable(uint256,uint256,bool)", +"8f4e4321": "accountOf(uint256)", +"8f4e5158": "increaseFrozenBalances(address,uint256)", +"8f4ed333": "step2()", +"8f4f3c70": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", +"8f4fde42": "crossForkCount()", +"8f4ffcb1": "receiveApproval(address,uint256,address,bytes)", +"8f50fb06": "getTrapInfo(uint256)", +"8f50fdd6": "walletAddressesSet()", +"8f512c47": "getSponsorships(address,address)", +"8f518475": "NewKoth(uint256,uint256,address,uint256,uint256,uint256)", +"8f52d420": "CryptoStrippers()", +"8f52da60": "technicalWallet()", +"8f535904": "CROWDSALE_REWARD_WALLET()", +"8f541730": "advisor1Sum()", +"8f55a850": "getArtistList()", +"8f56015f": "setRequirement(uint256)", +"8f5665ce": "nthWagerPrizeN()", +"8f571461": "ICOPRICE()", +"8f580996": "enablePurchasing()", +"8f58190e": "setLLV_edit_19(string)", +"8f581a53": "giveRegistration(address)", +"8f5949f9": "isContractActive()", +"8f5a5a39": "verifyPayment(bytes8)", +"8f5ab3ab": "transferdata(address,uint256,bytes)", +"8f5ab947": "getNextDropTime()", +"8f5b0b1c": "timeCheck()", +"8f5bae2e": "anchor(bytes32,uint256)", +"8f5bc587": "TokensForSale()", +"8f5c2eff": "getPurchaseInfo(uint256,uint256,uint256,uint256,uint256,bool)", +"8f5c5d40": "validTranscodingOptions(string)", +"8f5cbe36": "testCreateSale()", +"8f5cf7b9": "vestingStageTime()", +"8f5d23f6": "TOKENS_FOUNDATION()", +"8f5e0b3f": "UserBondByOffset(uint32)", +"8f5e514a": "diff(uint256,uint256)", +"8f5e619b": "publishEtherBox(bytes32,string,uint256)", +"8f5e9ca7": "acceptTOS(address,bool)", +"8f5f20c2": "LMA()", +"8f5f657d": "rateboc()", +"8f5fa4a4": "changeReceiverAddress(address)", +"8f608f4f": "exchangeRateMNY()", +"8f60cf17": "increaseSalesBalance(address,address,uint256)", +"8f6107ef": "MatthewWon(string,address,uint256,uint256)", +"8f612102": "createCarrier()", +"8f617fcd": "icoFinishTimestamp()", +"8f61da35": "getDebtLength()", +"8f620487": "expirationDate()", +"8f62077d": "getPlayerShips(address)", +"8f6218a3": "rollDices()", +"8f6245e1": "parseBool(bytes32)", +"8f627aab": "BlockIntervalCrowdsale(uint256)", +"8f62905f": "mintTokens(int256,uint256,uint256,address)", +"8f62b028": "updateUSeqgret()", +"8f632311": "doMint(address,uint256,bytes)", +"8f632a34": "MeetupToken(uint256,string,uint8,string)", +"8f6348b8": "stopFeeding()", +"8f63534a": "totalAuctionsCount()", +"8f64337d": "getHashedData(uint256,uint256,bytes32,bytes32,uint256)", +"8f652ec7": "_getVerifierInfo(address)", +"8f654175": "auditorAddress()", +"8f6612c9": "distributedAutonomousExchange()", +"8f679b2d": "EtheraffleICO()", +"8f67bd4d": "SBITokenCrowdsale(address,address)", +"8f67f9d7": "ILLIQUID_TOKENS()", +"8f6811a3": "mintTokensFor(address,uint256)", +"8f68b36f": "getMysubscribers()", +"8f68ca70": "setWhiteListContract(address,bool)", +"8f6963df": "initShareRule6()", +"8f699f6c": "calcInvalidKeys(uint256,uint256)", +"8f69fa25": "startLockingPeriod()", +"8f6a3deb": "_activateZoneLand(int32,int32,uint8,uint8)", +"8f6a7286": "refundMultipleUsers(address[])", +"8f6ac8d7": "FinalizableCrowdsale(uint256,uint256,uint256,address)", +"8f6b875a": "OWNER_POOL_COMMISSION()", +"8f6bc659": "ownerWithdrawExcessTokens(uint256,address)", +"8f6caf63": "sendPoint(uint32,uint32,int256,address)", +"8f6ede1f": "mintWithEther(address)", +"8f6f3275": "getLease(uint8,uint256)", +"8f6f6115": "getOraclizePrice()", +"8f6f988c": "setUltimateOutcome(bytes)", +"8f6fa4c2": "ICO_details()", +"8f6fba8c": "FEATURE_TRANSFERS_ON_BEHALF()", +"8f70009d": "id_for_address(address,address)", +"8f701eaa": "addguess()", +"8f702afa": "sellerNumOpenDeals(address)", +"8f70585f": "bid(address,uint256,uint256,uint256)", +"8f70bfa0": "processDeposit()", +"8f70ccf7": "setTrading(bool)", +"8f7140ea": "receivePlayerNameList(uint256,bytes32)", +"8f717e80": "totalCreationCap()", +"8f71b3db": "etherToUSDrate()", +"8f71f3cb": "getBdpPriceStorage(address[16])", +"8f728516": "initNewGame()", +"8f729925": "receivePercent()", +"8f72e065": "StabitCoin(uint256)", +"8f72fc77": "getOrders(uint256,uint256)", +"8f731077": "extractAllowanceRecordLength(address)", +"8f73c5ae": "distributeReward()", +"8f7445e6": "setStageThirdBegin()", +"8f7451ae": "GetStoreInfo()", +"8f750271": "prose()", +"8f75362d": "emergencyWithdrawAdmin()", +"8f75374d": "incrementSupply()", +"8f754a1e": "affectedCount()", +"8f755c7c": "getOptionState(address[3],uint256[3],uint256[2],bool)", +"8f760988": "forceStopCyle()", +"8f76691a": "margin()", +"8f76a1f7": "lastClaimedRound(address)", +"8f76dfc3": "allTokenICO()", +"8f770ad0": "supplyCap()", +"8f77339f": "sendToken(uint256,uint256,uint256,string)", +"8f775839": "settled()", +"8f776ff1": "allowanceBalance()", +"8f778bb9": "setEmployer(string)", +"8f77c2bf": "contractTransferOwnership(address)", +"8f78b34a": "lockAccounts(address[],uint256[])", +"8f790507": "teamEthContract()", +"8f7a1fe0": "static_income(address,uint256)", +"8f7a4738": "censure(uint16,uint32)", +"8f7a844b": "getAdminData()", +"8f7b7bce": "isTeamLockInPeriodOverIfTeamAddress(address)", +"8f7ba0a1": "registerbot()", +"8f7d33cf": "addCashback(string,uint256,address,uint256[],uint256[])", +"8f7d4dad": "getFirstPoints()", +"8f7d79da": "nextRoundMaxDonors()", +"8f7db6ee": "_setProviderSupply(uint256,uint256)", +"8f7dcfa3": "head()", +"8f7fe231": "ValidetherOracle()", +"8f80269d": "getClientSupply(address,uint256)", +"8f807f6b": "enqueue(address)", +"8f80b7bc": "registerTokenInternal(address,string)", +"8f80d339": "roundClaimICOKeys(uint256)", +"8f81ecfc": "removeChild(bytes32,bytes32)", +"8f81fd4a": "changeIcoDiscountPercentages(uint8,uint8,uint8)", +"8f8203c0": "transuser(address,uint256)", +"8f828c9e": "totalSupplyAtInternal(uint256)", +"8f82b8c4": "getWhiteListCount()", +"8f8336b7": "setFeesMaxUptoCoin(uint256)", +"8f835871": "addRealWorldPlayers(uint128[],bool[])", +"8f83719c": "getTreasuryBalance(address,address)", +"8f83743f": "Fricacoin()", +"8f838478": "getInstantiationCount(address)", +"8f842851": "dateManager()", +"8f847076": "removeNFToken(address,uint256)", +"8f84aa09": "ownerAddress()", +"8f850163": "flipsWon()", +"8f855433": "newCreator()", +"8f85f92c": "isPoDEnded()", +"8f860c5f": "createWallet(address,address)", +"8f86f5ea": "finishSale()", +"8f872bb1": "advisorsAndAmbassadorsAddress()", +"8f87932c": "fix_amount(uint256)", +"8f87c84b": "transferOutEth()", +"8f87e387": "updateSspManagerContract(address,string)", +"8f88110d": "updateRecordWalletAddress(string,address)", +"8f88708b": "retrieve(uint256)", +"8f88a00e": "calculateRewardStructures()", +"8f88aed0": "populateFromItemRegistry(uint256[])", +"8f88b792": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"8f8949e6": "setTotalCardCount(uint256)", +"8f8a5832": "reLoadXid(uint256,uint256)", +"8f8b2c9b": "totalEthJackpotRecieved()", +"8f8bbb8c": "ObjectedVote(bytes32,address,uint256)", +"8f8bcae6": "minting(address,address)", +"8f8bd64c": "calculateNetworkTokenBonusPercentage(uint256,uint256,uint256,uint256,uint256)", +"8f8bde82": "MicroDAO()", +"8f8c7c50": "_randomMeme()", +"8f8d322e": "melt(address,uint256)", +"8f8d49ac": "setStore(string,uint256)", +"8f8db737": "buyDirectInMarketplace(uint256)", +"8f8e7419": "sharedStorage()", +"8f8e8f9d": "refundETHToCustomer(address,address,uint256)", +"8f8eabea": "ZNA(uint256)", +"8f8eb474": "burnBid(uint256)", +"8f8f6b52": "freezTwo()", +"8f907195": "rpow(uint256,uint256)", +"8f9087f5": "hashBytes(bytes)", +"8f908cbd": "setCaptainTokenContract(address,address)", +"8f90f2bb": "getNewRabbit(address)", +"8f9139fb": "Pokecoin(uint256,address,address)", +"8f924560": "addEntity(string,uint256,uint256)", +"8f929c4a": "createAccount(bytes16,string)", +"8f92d308": "viewFeaturePetitionFee()", +"8f937574": "OwnerHelper()", +"8f93bffe": "getOrCacheReportingFeeDivisor()", +"8f940f63": "typeId()", +"8f94f6a0": "piTokensForSale()", +"8f9593f4": "winnerFirst(uint256,uint256)", +"8f96a1ea": "addThing(bytes32,bytes32,bytes32,bytes32)", +"8f975a64": "sendERC20(address,address,uint256)", +"8f97ad89": "claimTokensFor(address,address)", +"8f97cff0": "getPersonsCount()", +"8f97d03f": "IbizaERC20Token()", +"8f97e3a0": "requestPayout(uint256)", +"8f984115": "AUEBToken()", +"8f98767e": "fundingMaximumTargetInUsd()", +"8f98ce8f": "transferFeeNumerator()", +"8f98e0e1": "MBToken()", +"8f99d31b": "betLow()", +"8f99ea43": "setDividendDB(address)", +"8f99fdab": "SafeDeduct(uint256,uint256)", +"8f9a42b8": "philadelphiaBets()", +"8f9a57ef": "minSignId()", +"8f9a6da1": "queryOracle(string,string)", +"8f9abae1": "accessControlled()", +"8f9abe52": "isValidSellOrder(address,address)", +"8f9ade5e": "create(address,bytes32,uint256)", +"8f9b7eb7": "updateReleaseAmount()", +"8f9bbf16": "getSecurityTokenData(address)", +"8f9bf95d": "_payCommission(address)", +"8f9d1cba": "zss(address)", +"8f9d390a": "toteLiquidatorTransferComplete()", +"8f9de24b": "uniqueSpinnersActive()", +"8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", +"8f9e1409": "removeSection(bytes32,bytes32)", +"8f9f5b2f": "getMemoryWrite(uint256,uint256)", +"8f9fa9ec": "chngDL(uint256)", +"8f9fb0e4": "getAssetString(uint256)", +"8fa148f2": "currentRoundStartBlock()", +"8fa17580": "claimEgg(uint256,bytes32,bytes32)", +"8fa1ae05": "batchTransferSingleValue(address[],uint256)", +"8fa32111": "addInvestor(address[])", +"8fa366df": "changePhaseToICOweek3()", +"8fa3a84c": "validateTransaction(address)", +"8fa4c0b1": "tokenPlus(address,address,uint256)", +"8fa54b81": "setUserBattleValue(address,uint256)", +"8fa5614f": "getBylawsProposalVotingDuration()", +"8fa56215": "_createToken(string,string,string,uint256,address,uint256,uint256)", +"8fa566e8": "tokenIdOfUUID(string)", +"8fa5a6e9": "pmtAccount()", +"8fa65488": "startRefundInvestorsBallot()", +"8fa6da99": "Modultrade(address,address,address,address)", +"8fa81bb0": "PrivateSale(address,uint256)", +"8fa8b790": "cancelAuction()", +"8fa906b2": "addFounder(address,uint256)", +"8fa9cc09": "HeritableWalletFactory()", +"8fa9e55c": "signIn(address)", +"8faa6cb7": "partnersLockEnd()", +"8faa77b2": "deployers(uint256)", +"8faab3a7": "BatchAttachAssets(uint256[10])", +"8faad4c4": "createPromoTeam(string,address,uint256)", +"8fab0549": "setInvestorsPercentage(uint256)", +"8fabd326": "mPausedTime()", +"8fac3d3e": "feesGathered()", +"8fad8334": "_timeRemaining()", +"8fad8eec": "EnterRentToken()", +"8fadd08b": "betHigh()", +"8fae065c": "setStartIcoPreICO(uint256)", +"8fae4857": "finaliseChannel()", +"8fae60a5": "agree()", +"8fae8850": "ICOmint(address,uint256)", +"8faef6a5": "getTierForLastMiniting()", +"8faf682d": "payeeWithdrawCapital()", +"8faf850d": "addUser(bytes32)", +"8fafb286": "claimResearchDividends(address,uint256,uint256)", +"8fafebca": "TokensPurchased(address,uint256,uint256)", +"8fb0de08": "getCurrentRoundInfo2()", +"8fb197d1": "getUserDataOnToken(address,uint256)", +"8fb21a4b": "setMinReferrerBonus(uint256)", +"8fb25f82": "sellCells()", +"8fb29d6c": "pastAgreement(uint256)", +"8fb2f8b4": "isCollectTokenStart()", +"8fb2fbe1": "getTokenToEthUpdateOrderHint(uint32,uint128,uint128)", +"8fb48844": "noOfreservations(address)", +"8fb4b573": "start(uint256,uint256)", +"8fb50078": "joinProvider(address)", +"8fb51ccd": "QosinusCoin()", +"8fb5202b": "setFinancialAddress(address)", +"8fb5a482": "getPrices(address[])", +"8fb67f60": "aPurgeMessages()", +"8fb6d997": "updateStorageContract(address)", +"8fb74077": "HoursFromNow(uint256)", +"8fb74ae9": "isBannedUser(address)", +"8fb807c5": "totalAssetSupply()", +"8fb84bb0": "marketBuy(uint256)", +"8fb8f109": "addressToPersonId(address,address)", +"8fb96635": "decreaseBalance(address,uint256,uint256)", +"8fba273c": "m_investmentsByPaymentChannel(address)", +"8fba8d5c": "toHexString(uint256)", +"8fbb3c17": "CROWDSALE_PHASE_2_START()", +"8fbb9b49": "_isProduct(address)", +"8fbc3ecd": "BUFFER()", +"8fbc7eb0": "balanceOfToken(address,address,address)", +"8fbd4fa5": "claimPrizes(uint256,uint256,uint256,uint256)", +"8fbe382c": "totalFoundCoin()", +"8fbea5c9": "totalCommissionOwed()", +"8fbeee23": "sendOutEtherWithGasAmount(uint256)", +"8fc01623": "activatePackage(uint256)", +"8fc1d08b": "transferFromPublicAllocation(address,uint256)", +"8fc202ae": "currentKeyRound()", +"8fc264e0": "allocateTokens(uint256,uint256)", +"8fc3047d": "checkPrice()", +"8fc3c33b": "GenerateFortuneCookie(uint8)", +"8fc469b1": "setPricesDecimals(uint256,uint256)", +"8fc4ea4c": "ownerPetCollection(address,uint256)", +"8fc5668b": "processRequest()", +"8fc5efd4": "c_centsPerTokenFirst()", +"8fc5fd83": "FRPoint()", +"8fc6ad2d": "getParameterValueByTitle(bytes32)", +"8fc6bf7f": "ico3endTime()", +"8fc7a25d": "getEthAmount(uint256)", +"8fc8a134": "DepositBeneficiary(address,uint256)", +"8fc95403": "saleSecondEarlyBirdEndBlock()", +"8fc9bff6": "_claimRewardBlank(address,string)", +"8fca3057": "pastPlayRoundsCount()", +"8fcb4e5b": "transferShares(address,uint256)", +"8fcbeeb7": "getFreeDragon()", +"8fcc9cfb": "setMinDeposit(uint256)", +"8fcd558e": "GetDataRequestLength(uint256)", +"8fce0ee7": "secondLineWrong()", +"8fce6b07": "_addKeeper(address)", +"8fced626": "resolveBet()", +"8fcee83f": "getRoomStatus(uint256)", +"8fcf31e3": "createCardFromName(string)", +"8fd0290f": "YZChain(uint256,string,uint8,string)", +"8fd0b051": "buyTokens(address,uint256,uint256,uint256)", +"8fd0de57": "identityCommitments(uint256)", +"8fd16541": "referrer2Percent()", +"8fd1b1f2": "maxCardUpgradeLevel()", +"8fd21139": "MixMall()", +"8fd23762": "IOSToken()", +"8fd237e1": "setJackpotWinPercent(uint256)", +"8fd28bcf": "testFailAuthorityAuth()", +"8fd3ab80": "migrate()", +"8fd4f899": "setVipRate(uint256)", +"8fd57396": "winAmount5()", +"8fd5a39e": "distributeSMILE(address[],uint256)", +"8fd5d753": "EternalToken(uint256,string,string)", +"8fd5eb06": "_decodeSettle(bytes)", +"8fd611be": "eventManager()", +"8fd65890": "getCurrentAvailableFunds()", +"8fd7124e": "BeginRound()", +"8fd712ae": "PRICE_STAGE_ONE()", +"8fd79669": "setPokemon(uint256,string,address,uint256,uint256)", +"8fd7aab6": "unfreezeAccount(address,uint256)", +"8fd88225": "GetChipList(address)", +"8fd88ed1": "setManagerIncome(address,uint256)", +"8fd8b429": "vanishCoins(uint256)", +"8fd90960": "UpgradeProposalSubmitted(uint256,uint256,address,address,address)", +"8fd9f1b4": "DaoRules()", +"8fda183a": "hasPoolRole(address)", +"8fda356d": "activateContract()", +"8fda5c8e": "creatorsPoolMintQuota()", +"8fdb385b": "Trc(uint256,string,string)", +"8fdb7189": "double()", +"8fdb72f3": "gzeEth()", +"8fdc054f": "purchaseCrates(uint8)", +"8fdc24ba": "left94(uint256)", +"8fdf51d5": "getMyAllAuction(address)", +"8fdf741a": "_batch3_rate()", +"8fdfac6b": "setMAXfinney(uint256)", +"8fe10615": "walletLocked(address)", +"8fe10ae4": "FundsAdded(address,uint256)", +"8fe13b92": "addExchange(bytes32,address)", +"8fe26bf5": "TailsToken(uint256)", +"8fe2b355": "getGameVars()", +"8fe2eb9e": "setSellDividendPercent(uint256,uint256)", +"8fe316fe": "withdrawNotification(uint256)", +"8fe3579f": "addCharacter(string,address,uint256)", +"8fe3ec6d": "setDefendBoostCap(uint256)", +"8fe44adf": "ico4Min()", +"8fe47625": "showMyTokenBalance(address)", +"8fe52aea": "checkList(string,address)", +"8fe58eb9": "Triger()", +"8fe5f77d": "hackTenuous(address)", +"8fe60df1": "calculateCounterReceived(uint256)", +"8fe6677d": "addToWhitelistMultiple(address[])", +"8fe89502": "calculateFNKRate()", +"8fe8a0a6": "abcLottoResolver()", +"8fe8a101": "isKilled()", +"8fe8cb79": "promotionIndexToClaimant(uint256)", +"8fe91976": "activateWithdrawal()", +"8fe92aed": "votedPerCent(address)", +"8fe9a12f": "BKUToken()", +"8fea1e4d": "decreaseAllowance(address,uint256,address)", +"8fea64bd": "Hourglass()", +"8feaa243": "callTest(address,address,uint256,bytes,string)", +"8feadcb7": "setPeriod(uint256,uint256,uint256)", +"8febb1e5": "getPlayerHasAff(uint256)", +"8fedc959": "hedgeAddress()", +"8fedd2f2": "getTestTwo()", +"8fee3dab": "updateStat(uint256,uint256,uint256,uint8,uint8)", +"8fee7687": "allocatePresaleTokens(address,uint256)", +"8fee7b57": "registerQuarterSeason(int8)", +"8ff0c391": "isBuyBackTwo()", +"8ff11282": "parseKey(bytes32)", +"8ff1a583": "ICO_HARDCAP()", +"8ff21e0d": "LogBounty(address,uint256,string)", +"8ff255d6": "getHighestPrice(uint256)", +"8ff49347": "LOG_InvestorCapitalUpdate(address,int256)", +"8ff591b4": "addMinutes(uint256)", +"8ff5cbc3": "ApproveERC20(address[])", +"8ff5f021": "tokenAlreadyUsed(uint256)", +"8ff6650a": "Lending(uint256,uint256,address,uint256,uint256,uint256)", +"8ff67e35": "EthereumPro()", +"8ff6c8dd": "ICOSaleEnd()", +"8ff6e971": "isSecondary(uint256)", +"8ff72293": "getLotteryStatus(uint256)", +"8ff813fd": "transferVester(address)", +"8ff82a97": "TransferLockedToken(address,address,uint256,uint256)", +"8ff8754c": "getShareIndexDebugForTestRPC()", +"8ff936ea": "NoahCoin()", +"8ff95fa8": "catNames(bytes5)", +"8ff9b84e": "newStorage(address)", +"8ffa9690": "getBoolValue(bytes32)", +"8ffb4dc7": "nextStage(bool)", +"8ffb5e67": "getEvents(uint256,string,uint256)", +"8ffbcb81": "endIcoSaleRound3()", +"8ffbd95b": "setFcfContractAddress(address,address)", +"8ffc024f": "login(address,address)", +"8ffc831a": "testMemoryIntegrityCheck32Bytes()", +"8ffcdc15": "ContractDeployed(address)", +"8ffd2a1b": "add(uint256,address,uint8,string,address,address,string)", +"8ffe9b94": "transferTo(address,address,uint256,uint256)", +"8ffeb5c8": "MyBoToken(uint256,string,uint8,string)", +"8ffec6ee": "vinciCap()", +"9000b3d6": "addVerifier(address)", +"9000fcaa": "killAllowanceContract()", +"900104da": "updateAddressInfo(address,address,uint256,bool,uint256,bool,uint256,bool,string,bool)", +"90014f06": "ownerSetJackpotOfHouseEdge(uint256)", +"90018343": "_forwardFundsWei(uint256)", +"9002dba4": "right17(uint256)", +"900334b1": "investorDividendsAtNow(address)", +"9003adfe": "collectedFees()", +"9003ff51": "XET2()", +"90042baf": "createContract(bytes)", +"90044d18": "phaseTwoBonusPercent()", +"90045412": "withdrawloss(address,address)", +"900526b3": "getAuthorizeContract(uint256)", +"90059aed": "_daysToDate(uint256)", +"90061292": "Bazzhtoken()", +"90063fd4": "payContributorByNumber(uint256)", +"90065125": "PropertySet(address)", +"900683d0": "subtraction(uint256,uint256)", +"90070cb3": "Contribution(address,address,address,uint256,uint256)", +"9007127b": "getIntValue(bytes32)", +"900726c2": "sellOpen()", +"9007cdf3": "TOXBToken()", +"9007d53f": "withdrawTokens4(uint256)", +"900863e7": "depositTeamPerfit(uint256)", +"900888a3": "unsetERC777(address)", +"9008d64f": "getHolderInfo(bytes32)", +"90099ece": "preIcoOpen()", +"900a0285": "double(bytes32,uint8,uint256)", +"900a974e": "end(string)", +"900b7b62": "getWorkerAddress(uint256)", +"900cf0cf": "epoch()", +"900cff49": "getEsgoTXFund(uint256)", +"900d33d9": "createContractCar(string)", +"900d3812": "registerTransaction(string,address,uint256)", +"900d6f39": "maxStage1AllocationPerInvestor()", +"900d85fa": "updatePreReleaseTree(bytes32)", +"900dd918": "newTransferManualTokensnewTransfer(address,address,uint256)", +"900ddb58": "WCF()", +"900e1248": "sendlimit()", +"900e1561": "changePersonalMincap(uint256)", +"900eb5a8": "currentValidators(uint256)", +"900f080a": "reveal(uint256[],bool[],bytes32[])", +"9010470d": "markAsComingAndFreeze()", +"90107afe": "setAddresses(address,address)", +"9010c70b": "defaultLockBlocksForPool()", +"9010f726": "getKeysByPurpose(uint256)", +"90126acf": "optionsExercised(bytes32,address,address)", +"9012c4a8": "updateFee(uint256)", +"90135fec": "maxReached()", +"9013ad18": "activateUser(address,address)", +"9013d1ed": "startChallengePeriod(bytes32,bytes,address)", +"9014b075": "clockairdrop()", +"90152ddb": "Liutestcoin(uint256,string,uint8,string)", +"9015e1dc": "getPlayerAddressById(uint256)", +"9016bc21": "client_address(address)", +"9016dd4b": "push(address,uint256[2],uint8)", +"9017006e": "getDevFees()", +"901717d1": "one()", +"90171e57": "setBonusRound1(uint256)", +"9018c431": "serServerStatus(string,uint256)", +"901b2036": "totalSpins()", +"901b4301": "evacuate(address)", +"901b9249": "round(int256,int256,bool)", +"901c4e4f": "deployVault()", +"901c7518": "commRate(uint256)", +"901c947f": "showContractBalance()", +"901cea7b": "allocateEcosystemTokens()", +"901d7775": "voteOutMasterKey(address)", +"901da0df": "ownerTokenTransfer(address,uint256)", +"901fe291": "_deposit(uint256,address,address,uint256)", +"902025bd": "OfficalHolding()", +"9021c03d": "creditDividends(uint256)", +"9021dd30": "MinBetAmountChanged(uint256)", +"90232694": "toMemory(uint256,uint256)", +"90236e76": "Short()", +"9023c993": "YupieToken()", +"90255c6a": "salmanCoin()", +"9025ab6d": "ethTransfertoKYC(uint256)", +"9025e64c": "networkId()", +"902650aa": "initCards()", +"9026ad2e": "AbstractSweeper(address)", +"9026bd65": "RaffleGraphBook(string,uint256)", +"9026dee8": "checkAdmin(address)", +"902753f4": "verificationOff(address)", +"9028353a": "founder2Address()", +"9028f20b": "bodyElementBySubtypeIndex(uint256)", +"9029444a": "getMemberAddress(uint256)", +"9029a32b": "updateRausPoint(uint16,int256,uint16)", +"902a83cd": "addReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"902ab12f": "TestTest()", +"902c0dcc": "BalancesInitialised()", +"902c3ad7": "LOOMIA1_ADDR()", +"902c6811": "ProtectedReclaim(address,address,uint256)", +"902c92b7": "playHand(uint8,uint8,uint8,uint8[5],uint8[],uint8[],uint8[])", +"902d55a5": "TOTAL_SUPPLY()", +"902e64e5": "Oath()", +"902eded3": "eip165Supported(address)", +"902f1492": "registerPayment(address,uint256)", +"90300e38": "calNewTokens(uint256,string)", +"90304341": "safeToSub(int256,int256)", +"9030e40f": "totalFundRaised()", +"903171ae": "foundationTokenWallet()", +"9031bd2f": "_buyTokensFromSeller(uint256)", +"90323075": "TrustlessTransferStatusModified(uint256,bool)", +"9032bfc8": "setDaySecond()", +"9032f1a9": "createBenzTicket(address,uint256)", +"9033de61": "FricaCoin()", +"90347678": "numclaimed()", +"9034b427": "numDonors()", +"9035b4ff": "Biniu(uint256,string,string)", +"9036420a": "Cosmo()", +"9037ada9": "getTokenForEdit(address,string,string,string,uint256,uint256,uint256)", +"903833cc": "setMemorySize(uint256)", +"90393fc8": "maxPerTeam()", +"9039e01d": "newDay()", +"903a3ef6": "finalizeIco()", +"903a8298": "subscriptionCounter()", +"903b1f20": "enact_withdrawal_less(address,uint256,uint256)", +"903cc583": "calculateTokens(uint256,uint256)", +"903d0ac0": "publicAllocationTokens()", +"903d3340": "balanceOfFlower(address)", +"903d772a": "addDelegatorById(uint256,address,address)", +"903d9b2f": "Webrypto()", +"903db106": "x(bool)", +"903e95a9": "DeskToken(address)", +"903f2c48": "isAuthenticating()", +"903ff4fc": "AssetDK3()", +"90414116": "Period()", +"9041bdeb": "BNW()", +"9041f2c8": "WithdrawProposalFund(uint256)", +"9041f960": "manageTransferLock(address,bool)", +"90427b6c": "dev4Wallet2Pct()", +"9042aa27": "paymentForkIndexes(uint256)", +"9042bbf3": "prizeClaimed()", +"9042dcd9": "prizeMoneyQuantity()", +"90430c00": "getVersionImplementations(bytes32,bytes32,bytes32)", +"90431b6e": "withdrawAllFromToken(uint256)", +"90445e9f": "getPlayerNb(uint256)", +"9046fefd": "NewCurator(address)", +"904740cd": "getOscar()", +"9047ad74": "activateProject(address)", +"90483aa1": "PowerLedger(address)", +"9048816f": "resultConfirmed()", +"9048f510": "createContractGame(string,uint256)", +"9049681c": "addBuyOrder(uint256,uint256)", +"904a7d4c": "midasDeposit()", +"904aaf8f": "foreground()", +"904adc3d": "ERC23TokenMock(address,uint256)", +"904b46a1": "NEOToken()", +"904b67c2": "IcoClosedManually()", +"904bd6d0": "setTokensPerEther(uint256)", +"904c6094": "contractHash()", +"904cbd79": "depositCommission()", +"904d2248": "betHashOf(address)", +"904d3f47": "IADAddress()", +"904d5ed6": "Update_Cash_Proof_amount(uint256)", +"904da3d7": "Buyout(address,address,uint256,uint256,uint256,uint256)", +"904dc85d": "providerRewardLib(address)", +"904de64e": "TRSOffset()", +"904e1c88": "sales(bytes16,uint256)", +"90502c2e": "collectTokens(address[])", +"9050b560": "obligations()", +"9051d18a": "tokenEnabled(uint256)", +"90525c05": "devLimit()", +"905295e3": "unlockAccount(address)", +"9052b3d5": "_contains(address[],address)", +"9053ef56": "onReceivePrivate(address,address,uint256,bytes)", +"9053f420": "trade(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"905473cf": "updateMaxJump(uint256,uint256)", +"9054bbb6": "INITIAL_TAP()", +"9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", +"9055172d": "UVDToken()", +"905529be": "startCrowdsales(uint256)", +"9055bc12": "QRToken()", +"9055ffb0": "trackTreasuryToken(uint256)", +"9057bc48": "canStopWork()", +"9057f289": "createListing(address,uint256,uint256,uint256,uint256)", +"9058c8a4": "setBuyFeeBps(uint256)", +"9058e228": "buy(address,bytes32)", +"90596dd1": "controllerBurn(address,uint256)", +"905a7649": "RegisterTransaction(address,uint256)", +"905a90fe": "numberImmortals()", +"905ae5f5": "fechCurrentStageIndex()", +"905b7256": "_rewardLotteryWinners(uint256,uint256)", +"905b8000": "CountStudentnRequests()", +"905bd5e4": "superTransfer(address,address,uint256)", +"905bebe9": "solveProblem(uint256)", +"905c949e": "AURIX()", +"905d326c": "_newCampaign()", +"905dca52": "haveEitherAttribute(address,bytes32,address,bytes32)", +"905e6e42": "JSON_Test()", +"9060091c": "setAmountToken(uint256)", +"90603bdb": "getEscrowsByOwner(address)", +"90604005": "cln()", +"9060e35d": "Voronezh()", +"9061a6e9": "increaseSoldSaleSupply(uint256)", +"9061aedd": "fundOnContract()", +"9061da22": "MANHATTANPROXYEASTENDAVE()", +"9062145a": "CreateXPA(address,uint256)", +"906273a3": "asyncTokenSend(address,uint256)", +"9062a445": "setGameAddress(address,address,address)", +"9063e860": "transferOrigin(address,uint256)", +"90645840": "newHash(uint256)", +"90646b4a": "setGateway(address)", +"9066314e": "toggleLastChance(bool)", +"90664cf5": "armyAircraftCarriersCount(uint256)", +"906686a6": "totalIssueTokenGenerated()", +"9066c472": "addRoyaltyReceiver(address,uint256)", +"90676901": "stallionWith(uint256,uint256)", +"9067b677": "getEndTime(uint256)", +"906802cf": "tokensUnlocked()", +"906860d9": "Whitelist(address,address)", +"906a114c": "getAllMoneyOut()", +"906a26e0": "softCap()", +"906ab111": "preIcoTokenSales()", +"906b23be": "TOKEN_FOUNDINGTEAM()", +"906c7c68": "internalGetApproved(uint256)", +"906ca728": "viewReservedTokens()", +"906d5785": "setTeamContract(address)", +"906d895d": "getAvailableSeats()", +"906e1ec0": "canWriteName(address,bytes32)", +"906e9400": "newManager(address)", +"9070222e": "getCardIdByRank(uint256)", +"9070b18d": "_getAllRevisionBlockNumbers(bytes32)", +"9070e8a5": "validContracts(address[])", +"90714770": "finalizeFirstStage()", +"9072d58a": "registerPullPayment(uint8,bytes32,bytes32,string,string,address,address,string,uint256,uint256,uint256,uint256,uint256)", +"907316a9": "_getEarnings(address,address,uint256)", +"90731848": "minPriceForNextRound(uint256)", +"9073280b": "SFTPRECOE()", +"9073576c": "UnfreezeAccountByTime(address)", +"90742e52": "initsegmentation(address,uint256,uint256)", +"90753533": "activateMainIco()", +"90754979": "sendPriceRequestToOracle(bytes16,bytes16)", +"9075726e": "SeeSourToken()", +"9075b10c": "LogWhiteListedMultiple(uint256)", +"9075becf": "multisigWallet()", +"9075f124": "setAccountVerified(address)", +"90762a8b": "ownerBurnToken(uint256)", +"907631fc": "toBool(bytes,uint256)", +"9076a38a": "getBackgroundImageCount(address)", +"9076aff7": "lastBlock_a4()", +"9076c166": "setAllocation(address,uint256)", +"9077309b": "burnSoupTokensForDay(uint256)", +"90778ab9": "issueToken(address,address,uint256,uint256,uint256,uint256)", +"9077dcfd": "submitCoding(string,uint256)", +"90785418": "addPiece(string,string,bytes32,address)", +"9078b596": "changePrice(bool)", +"90795e18": "borrowInternal(uint256)", +"90797634": "ident()", +"907a37c5": "getCandidateDetailOnElection(address,address,uint256,address,address)", +"907af6c0": "unit()", +"907b0305": "createERC20(address,uint256,string,uint8,string)", +"907b270b": "priceEthPerToken()", +"907b503d": "depositedToken(address)", +"907be394": "operationsFundAddress()", +"907c5082": "assignTeamTokens()", +"907dff97": "_emit(bytes,uint256,bytes32,bytes32,bytes32,bytes32)", +"907efd7a": "createToken(string,string,uint8,uint256,uint256,uint256,uint256)", +"907f67ee": "pauseBuyback()", +"907f7aa8": "cancelSellOfferInternal(uint32,bool)", +"9080345d": "Role(bytes32,address[])", +"9080c78c": "tixNumberforSale()", +"90810c77": "multivestBuy(address,address,uint256)", +"9081c3db": "markHours(bytes32,int256)", +"90825c28": "getMarketCap()", +"90828c78": "nextPromiseId()", +"90828cdd": "getCreateMarketUniverseValue()", +"90835848": "getCurrentRoundTotal()", +"90836822": "DXC()", +"90838e09": "totalInvested(address)", +"9083998b": "TechnoBit()", +"908408e3": "Initialized(address)", +"90843cd9": "fetchAllCreatedOrders()", +"90843d04": "numIncrement()", +"9084f1f9": "closeMotion(uint256)", +"90855c31": "ACT(uint256,string,string)", +"9085b77f": "allowed(address,bytes32,address,bytes4)", +"9085e88d": "giveBlockreward()", +"90862d1b": "unfreezeTokens(address)", +"908687a9": "Simoleon()", +"90869e9f": "getMartialNumber()", +"9086de3b": "isWhitelised(address,address)", +"90888aa1": "StakeObjects()", +"908921fc": "ceo()", +"90895e1c": "setAllocatedToken(address,address,address,uint256)", +"9089e0c2": "UnicornCoin()", +"9089f616": "removeClient(address)", +"908ab6a5": "roleHash(address,bytes32)", +"908b8cfc": "withdrawOperationalExpenses()", +"908c3a6a": "tokenUserCounter()", +"908ccc5e": "numberOfRecordEntries()", +"908d16de": "BountyAgentChanged(address,bool)", +"908da4e8": "timeTier1()", +"908dd411": "getFundAlterations()", +"908e049b": "destory(uint256)", +"908e2d2a": "maxCoinCap()", +"908e2f06": "mails_to_deliver()", +"908f68ee": "unrespondedCnt()", +"909006fc": "setDirectOffersComissionRatio(uint256)", +"90900df4": "addDebt(bytes32,uint256)", +"90905360": "setDividendsPercent(uint256)", +"9090ce1f": "CANCELATION_DATE()", +"90912d09": "pausingMechanismLocked()", +"9092b623": "PotOfEther()", +"90935301": "setCryptaurReserveFund(address)", +"90938792": "canVoteAs(uint32,int256,address)", +"9093bc3d": "addCoins(uint8,uint8,uint256)", +"9093f5d1": "ReverseBugBounty()", +"90949f11": "getNumberOne()", +"9094b22f": "setAttribute(address,address,string,bytes,uint256)", +"9094c763": "vote(uint32)", +"9095269d": "mintExtraTokens()", +"909540cb": "ERC165()", +"90954483": "createLandmark(string,address,uint256)", +"90957363": "removeFromFutureExpanstionMap(address)", +"9095b2cd": "IPcoin()", +"9095df68": "library2function()", +"90971fea": "ecrecoverWrapperView(uint8,bytes32,bytes32)", +"90972e89": "LogReceivedEther(address,address,uint256,string)", +"90974795": "getall()", +"90979943": "IRB()", +"909862b7": "updateSalary(address,address,uint256)", +"9098f074": "buyServiceByAdmin(uint64,uint64,address)", +"909c36b5": "newEntry(bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"909c9fca": "reclaimExpiredSwaps(bytes32,bytes32)", +"909d22c7": "many_cryptobanks()", +"909d2cc1": "hasTeam()", +"909d3bc9": "isIdle(address,uint64)", +"909d6877": "preSaleLimit()", +"909e4ab6": "getLog()", +"909e8f92": "unlockFirstPrivate()", +"909ec524": "KyberAirDrop(address)", +"909f2c3a": "ChangeNumber(string)", +"909f617e": "fill(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"90a08e70": "balanceOfUnclaimedGoo(address)", +"90a0a2ab": "GetPriceOfTroops(uint256,uint256,uint256)", +"90a1d580": "TSTEST2()", +"90a2005b": "transfer(bytes32[])", +"90a251da": "createNewTankWeapon()", +"90a25f28": "WeBetCrypto()", +"90a2e1ef": "emergencyReserve()", +"90a3d87e": "addLanguage(string)", +"90a4d287": "bovBatchDistributed()", +"90a53085": "votesCountByOperation(bytes32)", +"90a59ea1": "BasicAccountInfo(uint8)", +"90a5c7af": "Lesson_1(address,uint256)", +"90a6267a": "canRescue(address)", +"90a650e8": "UpgradeAgent(address)", +"90a70139": "pauseTransfer()", +"90a72a3f": "FundingCapSet(uint256)", +"90a744fe": "BossCoin()", +"90a7ba5b": "ticketsPurchased()", +"90a85119": "checkBetResult(uint8)", +"90a897c6": "frozenAddress(address)", +"90a971a8": "setPI_edit_27(string)", +"90a9cc02": "namiPresale()", +"90aa2185": "dailyCount()", +"90aa835c": "IsAuthorityAddress(address)", +"90ab54dc": "configureMigrate(bool,address)", +"90ab7d34": "deployRuntimeContract()", +"90abcb08": "TronyCurrencyContract(uint256,uint256)", +"90ac11a3": "designs(uint256)", +"90ac1866": "setMinGasPrice(uint256)", +"90ac3f4c": "_getTokenAmount(uint256,address)", +"90ac7588": "profitsLockedUntil()", +"90acc740": "transferCompanyTokens(address,uint256)", +"90ad304f": "ContractOwnershipTransferred(address)", +"90addc9a": "calculateMyRewardMax(address)", +"90ae144e": "swap_able()", +"90ae631d": "assignAll()", +"90ae6863": "gyCF()", +"90af1333": "allBoxNumbers()", +"90afca4c": "addPhases(uint256,uint256,bool,uint256,bool)", +"90b0636f": "rapidGrowthProtectionmMaxInvestmentAtNow()", +"90b06593": "landClaim()", +"90b08a52": "getSendAmount()", +"90b0e078": "discountTime()", +"90b17f99": "directPaymentThreshold()", +"90b22d03": "set_parameters(uint256,uint256,uint256)", +"90b25207": "GoogleChainToken(address)", +"90b26043": "NameRegistered(address,uint256,string,uint256)", +"90b2ae49": "verifyDeployment(address,bytes32)", +"90b2ce6f": "mvnpereth()", +"90b30251": "is_finalized()", +"90b3195f": "SHAREPERIOD()", +"90b398ff": "SetFreeGWT(uint256)", +"90b3d963": "trade(uint64,uint64)", +"90b4cc05": "mintAdvisorTokens()", +"90b4cc72": "numTransactions()", +"90b5561d": "insert(uint256)", +"90b5e6d9": "presaleFinished()", +"90b625f9": "stockSellOrder(uint256,uint256,uint256)", +"90b67185": "setPrivilegeState(bool)", +"90b6b209": "bonuses()", +"90b6f7e6": "RashidToken()", +"90b7ddd7": "t02_createContractMac(bytes32,bytes32)", +"90b7df75": "addAuthByPhone(string,string)", +"90b98a11": "sendCoin(address,uint256)", +"90b9be4a": "RetailerManager(address)", +"90b9c31a": "purchaseFinished()", +"90ba0e6c": "getNumOfBettersForMatchAndPrice(uint256,uint256)", +"90ba34cc": "refundClaimAddress()", +"90baaa5c": "checkPoolEnd(uint256)", +"90bb5ad0": "Eth2USD(uint256)", +"90bb6153": "withdrawTokenBalance(address)", +"90bb807e": "getVolumeDiscountsCount()", +"90bc1693": "burn(uint128)", +"90bd301e": "_validCharm(string)", +"90bdb275": "costOfTxShares()", +"90bde517": "getUser(address,address)", +"90be0bd9": "enableAuthentication()", +"90bee6aa": "getTransformRate(address,uint256,uint256)", +"90bf0301": "changemp(address)", +"90bf348f": "crowdSaleMinAmount()", +"90bf495d": "tokensReleasedToEarlyInvestor()", +"90bf693b": "logoFee()", +"90bf87a3": "setRestriction(address,uint256)", +"90c1288e": "setAddressF1(address)", +"90c2365e": "_addWeiAmount(uint256)", +"90c26736": "countRecommendFund(uint256)", +"90c32295": "bountySent()", +"90c3a370": "AuctionMaster()", +"90c3f38f": "setDescription(string)", +"90c40776": "donotIronDappToken()", +"90c459a3": "lnLimited(int256,int256)", +"90c46985": "calculate_difficulty_attempt(uint256,uint256,uint256)", +"90c4ce57": "getReportingWindow(uint256)", +"90c6087b": "_getName(string,uint256)", +"90c6b18a": "CreationTime()", +"90c6d1b9": "SetFreeTokens(uint256)", +"90c79af9": "startAcceptingFundsBlock()", +"90c8a72d": "sendOwnerShares(address)", +"90c8abd3": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", +"90c985a1": "buyCertificate(uint256)", +"90c98a7b": "resolveRankBoard()", +"90c9d6f8": "BankerExit(uint8)", +"90ca20e5": "init_wallet(address[],uint256,uint256)", +"90ca27f3": "vote(string,uint8)", +"90ca38d9": "setAdvisorsTokens(uint256)", +"90ca9dbf": "getGradeByQuailty(uint16)", +"90caa2b4": "getFreezeUntilDetails()", +"90cad537": "poolMintRate()", +"90cb04e1": "buy(string,uint256,uint16)", +"90cb4854": "createTokens(address,uint256,uint256)", +"90cbcf92": "getFibonacci(uint256)", +"90cbfa19": "abort(address)", +"90ccdafb": "increaseArrayOfBeneficiariesBalances(address[],uint256[])", +"90cd0d06": "registerApproveRequest(bytes32,bytes)", +"90cd5860": "VehicleRTO(address)", +"90cd6170": "getActiveSkin(address)", +"90cd8020": "licenseTermsMinCostPerSec(bytes32,bytes32)", +"90cddcc5": "getEpisodeDetail(uint256)", +"90ce9e5b": "getPreIcoInvestorsAddressesCount()", +"90cf3fed": "AKAIITO()", +"90cf581c": "voteYes()", +"90cf72de": "_getCommonPlusRarity(uint32)", +"90cf76fa": "bundleOfOwner(address)", +"90cf7ab4": "existsUser(uint256)", +"90cfce5a": "setgetgoods(uint256)", +"90d16b30": "resolveDisputeBuyer(address,string)", +"90d19241": "_removeAddress(address)", +"90d1c593": "Summary(address,address[],address[],address[],uint128[])", +"90d22eeb": "setIcosMinLimit(uint256,uint256)", +"90d240c6": "get_data(uint256,uint256)", +"90d28075": "getBasketArranger(address)", +"90d2cd5c": "getCurrentUserBigPromoBonus()", +"90d2f727": "signedApproveAndCallCheck(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", +"90d370ba": "canReceive(address)", +"90d49b9d": "setFeeWallet(address)", +"90d4bcc0": "inject()", +"90d4bd45": "wetCoin()", +"90d58a70": "tgrCurrentPartContributor()", +"90d61290": "traded(address,uint256)", +"90d63e5d": "addAuthor(bytes)", +"90d68bb6": "getCallTypes(uint256)", +"90d6b45f": "kyc()", +"90d783bb": "BEEFJERKY(address)", +"90d83301": "SPAM()", +"90d8a4be": "badge(bytes)", +"90da7c3c": "isGeneMixer()", +"90daaf67": "getMinimalDeposit()", +"90db2aa9": "SellOrder(uint256,address,uint256,uint256,uint256,uint256)", +"90db623f": "increaseApprovalAndCall(address,uint256,bytes)", +"90db78f9": "crowdsaleInfo()", +"90dbf4fc": "getRequestBaseInfo(uint256)", +"90dc0636": "GetHoldersCount()", +"90dcba22": "addressPeople()", +"90dd027e": "migrateFrom(address,uint256,uint256,uint256,bool)", +"90dd2395": "listPrycto6()", +"90dd9d17": "perSaleWithDrawal()", +"90de4495": "dive5(address)", +"90de8234": "adminMode()", +"90de9ed9": "TOKEN_SALE_CAP()", +"90df44b4": "addDocument(string,string,string,string,uint256,uint256)", +"90dfb092": "privatePresale()", +"90e10134": "burnAdminApproval()", +"90e10250": "setCreated()", +"90e1de68": "allowedForwards()", +"90e2160a": "setMaxUpdates(uint256)", +"90e2b94b": "t0special()", +"90e2d4cc": "refreshLockUpStatus()", +"90e33e9c": "totalDDTforInterest()", +"90e3c278": "getShares(uint256[128])", +"90e47957": "erc165InterfaceSupported(address,bytes4)", +"90e4a130": "getMyDonations()", +"90e50ba7": "registerAltPurchase(address,string,string,uint256)", +"90e517e7": "logoY()", +"90e575f5": "auctionEnds(string)", +"90e57cac": "confirmProposalAndTransferFunds(uint16,uint16)", +"90e5e12a": "existenceTransferTest(address)", +"90e64d13": "hasExpired()", +"90e72127": "closeOrder(address)", +"90e761cd": "recoverAddressFromSignature(uint64,uint256,bytes32,bytes32,bytes)", +"90e7760e": "makeLive()", +"90e7a074": "codexStakeContract()", +"90e8265d": "tierDuration(uint256)", +"90e8317c": "rateWorkerSkills(uint256,address,uint256,uint256,uint256[],uint8[])", +"90e8edd8": "JincorTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"90e8f758": "liveEtherSportCampaign()", +"90e99b09": "finishRestore()", +"90ea0fb8": "isSignedByEugene()", +"90eb9632": "PROMETHEUS_PRICE_INCREMENT()", +"90ebed43": "getNumberOfCourses()", +"90ec028d": "LogPollCreated(bytes32)", +"90ec57f1": "Approve(address,uint256)", +"90ed6bf4": "startWithdraw()", +"90ee2ec2": "FCCPlaceHolder(address,address,address)", +"90ee4331": "getStartClaimDate()", +"90eed0ce": "SetCert(uint32,bytes32)", +"90eede26": "COMM_ADDR()", +"90ef08a1": "getdrawtoken(address)", +"90f08b32": "contract2Address()", +"90f098bb": "setFeeTake(uint256)", +"90f0a5bd": "BecomeTadpolePrince()", +"90f0dbd5": "CRSAllocation()", +"90f0f4f4": "ReserveFundAmount()", +"90f0fef0": "test2ContractVote()", +"90f1d909": "Ixellion()", +"90f25eb3": "getPercentages()", +"90f2c86d": "convertToWei(uint256,string)", +"90f2dc88": "getObjClassId(uint64)", +"90f3b693": "initialIssueMinted()", +"90f3deb1": "getTeamUnlockAmountHelper(uint256)", +"90f4c33a": "transferSaleWallet(address)", +"90f4d2fd": "checkMaxCapReached()", +"90f50cd9": "setPromo(address[],uint8[])", +"90f52ade": "LOTT()", +"90f549ba": "getLockCountForAddress(address)", +"90f551ec": "offerBtcFromApp(address,uint256)", +"90f5c2ca": "canRef(address,address,uint256)", +"90f5f99d": "DHUBTest()", +"90f6b2b3": "getInvestorByValue(address,address)", +"90f81702": "BaseToken()", +"90f8c118": "hyip()", +"90fa17bb": "constructor()", +"90fa337d": "storeBlockWithFeeAndRecipient(bytes,int256,int256)", +"90fa775e": "_calculateInflationBonus(uint256,uint256,uint256)", +"90fa8910": "GetBasePrice(uint256,uint256)", +"90faa3e9": "setPrice(string,uint64,uint8)", +"90fab7ce": "just50Send()", +"90fad1e6": "remove_from_whitelist(address)", +"90faeb62": "DolarToday()", +"90fbf84e": "trustedFeeWindowTransfer(address,address,uint256)", +"90fc2a32": "CaptainGameConfig()", +"90fcf551": "getTRIOs()", +"90fd4300": "releaseState4()", +"90fd53ec": "farmTile(uint8,uint8,int8)", +"90fd5452": "blockState()", +"90fd67fc": "setDepositAddressVerify()", +"90fdf36b": "_vouchersToWei(uint256)", +"90fe5609": "startVoting(uint256,uint256)", +"91006745": "isAdmin(address,address)", +"91014fcc": "_updateWhitelist(address,uint8)", +"91019db2": "getSellerTransaction(address)", +"9102bcc8": "Teacher(address)", +"91030cb6": "lockPercent()", +"9103321d": "TOTAL_TOKENS_AVAILABLE()", +"91039c83": "updateEndTimeManually(uint256,uint256)", +"9103cfb6": "TheophanesToken()", +"9103e368": "winnerTimestamp()", +"9104b6f4": "getPendingWalletFeeData()", +"9104c316": "internalBurn(uint8,address,uint256)", +"9104dbd2": "_createCompany(string,address,uint256)", +"91051e06": "poolWithdraw()", +"910545ff": "TOKEN_PRESALE()", +"91057f53": "ERC20TokenCPN()", +"91060168": "fetchString(address,bytes4,bytes32)", +"9106d7ba": "totalSold()", +"910887bc": "setPublisherCut(address,uint256)", +"91093ba4": "setUintF1F2(uint256,uint256)", +"910cbda6": "buyTokensFor(address,address)", +"910d52ea": "getPaperFee()", +"910eba1d": "buyBonds(address)", +"910f3b52": "bidFromEtherScrolls(uint256,address)", +"910f5b81": "preIcoStartTime()", +"91104f82": "bountyTokenAmount()", +"911058df": "setMockedNow(uint256)", +"91125fb7": "thirdWeekBonus()", +"91127c1f": "_clearApproval(address,uint256)", +"91136d3f": "Settlement(uint8,bool)", +"911402f1": "masterServer()", +"9114557e": "vestedBalance(address)", +"911463d2": "setPOOL_edit_27(string)", +"911475cc": "incNonce()", +"91147dfa": "restoreContract()", +"91149e85": "resetOfferingStatus()", +"91152c5c": "airdropTokens()", +"911550f4": "getBetterOffer(uint256)", +"9115abf4": "getDetails(uint256,address)", +"9115ca43": "getPayerString()", +"9115e9ee": "ExtractEtherLeftOnContract(address)", +"911644fa": "maxIceDragonsCount()", +"9116ee03": "testHasCorrectPriceForStages()", +"91174790": "addEvidence(bytes32,uint256,bytes32)", +"91174cb6": "roundnum()", +"91176f39": "presaleUnlimitedStartBlock()", +"91177db4": "batchTransferFrom(uint256[],address,address)", +"9117c6df": "balanceOfReadable(address)", +"9117e32e": "expireOf(address)", +"91184159": "getOptionHash(address[3],uint256[3],uint256[2],bool)", +"9118575a": "setTokenSale(address,address,uint256)", +"91194aab": "tixFoundersDeposit()", +"9119e5fb": "submitTransactionWithSignatures(address,uint256,bytes,uint256,uint8[],bytes32[])", +"911a40c9": "ARPToken()", +"911a56bc": "totalSupplyWithZeroAddress()", +"911a739e": "winnerLimit()", +"911a9ac0": "preSeasonGame()", +"911adc1a": "pay(address,uint256,bytes)", +"911b5f4e": "sub(uint64,uint64)", +"911cec25": "getMountTokenIds(address,uint256,address)", +"911d0189": "minJackpot()", +"911d3101": "escapeFreeze(uint256)", +"911d731a": "DWBTToken(uint256,uint256,uint256,uint256)", +"911d84cb": "updatePlayerRecommend(address,address)", +"911eb255": "approvePromise(address)", +"911ef2e9": "Voted(uint256,bool,address,uint256)", +"911ef508": "pausedTimestamp()", +"911fa5c9": "totalTokenSellAmount()", +"911ff22b": "EthereumRateUpdated(uint256,uint256)", +"911ffbdb": "lastRewards(address)", +"91214841": "usdraised()", +"912221d5": "tokenCost()", +"9122acd8": "KUYCToken()", +"912308dc": "withdrawToInvestor()", +"91240f44": "getReferee(address)", +"9124f1cf": "getOrderHash()", +"912525f4": "WideEnergy()", +"91256ed0": "freezeMustCalculate(uint256)", +"9125ecf1": "bountyVaultAddr()", +"9127bc2a": "FOUNDERS_TOKENS_LOCK_PERIOD()", +"9127d3d7": "EXPECTED_TOTAL_SUPPLY()", +"9127da7e": "RRcoinToken()", +"912875bc": "ICO_PRICE6()", +"91287962": "artworkRegister(address)", +"9128bbc6": "Tanaka()", +"91294ed1": "minContributionWei()", +"912bcb79": "betGame(uint256,uint8)", +"912c3fbf": "EYToken()", +"912c8b75": "claimGold(uint64,uint64,uint64,uint64)", +"912d6e28": "approveTokens(address,address,uint256)", +"912de8de": "fixBalance()", +"912eb6d9": "amountOfUBOsold()", +"912ee23d": "SaleStarted()", +"912f6ba4": "getAtheniansOnTheBattlefield(address)", +"912f6c71": "IssueIQTToken()", +"912f952f": "Ulti()", +"912ff8f6": "getServerState(uint256)", +"91301852": "CyberClassicToken()", +"91304f1f": "isKYCRequired()", +"913093aa": "initialSupply(address)", +"913158f7": "getIsland(uint256)", +"91318874": "setRates(uint32,uint32)", +"9131d803": "testSetFrontend()", +"91324514": "InfiCoin()", +"91324bea": "EscrowContract(address,address,uint256)", +"91329493": "charityCount()", +"9132b81d": "VotingStarted(address,uint256,uint256)", +"9132c26c": "calcSELLoffer(uint256)", +"9132dfca": "CATA()", +"913579b6": "updateWhiteListImplementation(bool)", +"913594ae": "JETUSA()", +"9135ac08": "addInInitialSupply(uint256)", +"91361f64": "getRankPriceCandy(uint256)", +"913683fc": "IODTOKEN()", +"9136d392": "KothWin(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"91373711": "stopFlagOff()", +"9137471b": "setGoldBought(uint256)", +"91375e8d": "getGameEndTime()", +"91378400": "POSAddress()", +"91378456": "publicTGEEndBlockTimeStamp()", +"9137b6e6": "addAction(uint256,string,string,uint256,bytes32,uint256)", +"9137c1a7": "setStorage(address)", +"9137d10a": "refreshDirectSellParameter(uint256)", +"9137f9b1": "viewSecondLotOfClauses()", +"9138f38b": "claimTokensERC20(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"913918a6": "changeSaleInfo(uint256,uint256,uint256,uint8,uint256)", +"913967d0": "getNextFeePercentage()", +"91398f25": "getTransferringFor(address)", +"913b1ecc": "setGroupWinner(uint256,uint256[])", +"913b2958": "appealRuling(uint256,uint256)", +"913cc77f": "setEthValueAmount(uint256)", +"913cf5ca": "eos()", +"913d23e2": "distributeMnyAfterSwap(address,uint256)", +"913d30b0": "LIDToken()", +"913d6906": "VotingToken(string,string,uint256,string,string,string,address,address,address,address)", +"913dd846": "PRESOLD_ADDRESS()", +"913e0887": "FundingRulesSet(address,uint256,uint256,uint256)", +"913e77ad": "collector()", +"913f424c": "_ecMul(uint256,uint256,uint256,uint256)", +"913f4766": "Refound(address,uint256)", +"913fb60b": "colorLeaderboard()", +"913fbd04": "aidPoolWallet()", +"913fc67a": "bidoohAdminAddress()", +"91404af8": "updateTokenRatio(uint256,uint256)", +"91407479": "Eth2USD_power18(uint256)", +"9140a101": "checkRegistrar()", +"9140a499": "updatePublicCheck()", +"9140f6ee": "releaseRestPreSaleTokens()", +"9140f968": "newInvestment()", +"91410c97": "stake_reward_rate()", +"91410e41": "getMyRecordCount(address)", +"91415ce9": "TRANSFERMANAGER_KEY()", +"9141bfae": "LogReveal(uint256,address,uint256)", +"9141d6f9": "unset(bytes32)", +"91421cf6": "ECRCTOKEN()", +"91423ef2": "getClientLastSupplyID(address)", +"91432155": "setBaseInterest(uint256)", +"91436eee": "issueLeftToken()", +"91441589": "run(bytes,uint8[4],uint8[2][4])", +"91449def": "_owns(address,uint256,bool)", +"9144f267": "ALBtoken()", +"91458ee8": "GameCreated(bytes32,string,string,uint16,uint64)", +"9145a7fd": "CrowdsaleEnded(uint256)", +"9147dd1b": "pricePresale()", +"9148018a": "getChatMessageAtIndex(uint256)", +"914810a3": "claimRepository()", +"91481123": "contestOverTime()", +"9148148b": "migrate_game_balance()", +"9148b237": "takeAllOrRevert(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", +"91492956": "getPrices(uint256)", +"914946aa": "getSignerAddresses()", +"914980d4": "setBonus(address,uint256,bool)", +"91499e2d": "disableService(uint256)", +"914a1e76": "getWinRate(address)", +"914a5b24": "popPlayer()", +"914ae352": "getCurrentNumberOfUsedServiceTokenWei()", +"914b7fd2": "calculateSellGoldFee(uint256,uint256)", +"914b857e": "unlockEscrow(bytes32)", +"914bdef8": "_transferWithData(address,address,address,uint256,bytes,bytes,bool)", +"914d581d": "fiatRaisedConvertedToWei()", +"914dde1c": "isProposed(address)", +"914de6d6": "MarketingAllocation(address,uint256)", +"914e1ee1": "resetSearchStartIndex()", +"914f716d": "BalanceHolder(address)", +"914ff398": "batchFill(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"915009a7": "getPaperFromMeta(uint256,uint256)", +"915015c5": "setColorBlack()", +"91508264": "getNextPrice(uint256,uint256)", +"9151c7e4": "GrandFraternityChain(uint256,string,string)", +"9151e092": "RisuToken(address)", +"9152486c": "currentInitPart()", +"9152f0b2": "getLastRequestId(uint256)", +"9152f764": "WorldCup(string,string,uint256,uint256,string,uint256)", +"9153d09a": "stringFloatToUnsigned(string)", +"915489f6": "futureTokens()", +"91548ccf": "ticket_address_added(address)", +"91555559": "getNumWeiAddressMayInvest(address)", +"9155b01a": "setSelfClaim(bytes32,bytes32)", +"9155cc2c": "HitToken(string,string,uint8,uint256,uint8,uint8,address,address)", +"91565aba": "updateUsableBalanceOf(address)", +"9156a003": "totalTokensIssued()", +"9156fb60": "addressERC20Token()", +"9157e556": "isQualitifiedAddress(address)", +"915a405f": "updateTransferMinimumFee(address,uint8)", +"915b5bfc": "NeoWorldCash()", +"915cfeac": "getTransferAgentStatus(address,bytes32,address)", +"915d44f6": "setRFFSessionsAdd(address)", +"915db230": "marketBuyOrdersNoThrow(uint256,bytes[])", +"915e1044": "strFunc(string)", +"915e5d44": "apply_compensation()", +"915ed87e": "LiveStarsTokenPresale(uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"915f3209": "changeMaximumValueDuringGuaranteedPeriod(uint256)", +"9160342e": "Sale(address)", +"91603691": "HDTTokenTest()", +"91607530": "RaisedByPartner(address,uint256,uint256,uint256)", +"9160aabc": "getPendingBetCount()", +"91613e4b": "FTC()", +"9161f789": "getRoundFunds()", +"9162a905": "GDCNumber5()", +"9162ab43": "MiningStolenPayout(address,address,uint256,uint256)", +"9163f897": "block6()", +"91647938": "saveMatchJoinAddr(uint256,address)", +"9165543a": "deleteUser(uint256,address)", +"91656aa9": "changelp11(address)", +"916576c8": "fundForSale()", +"91658639": "ChampionSimple(uint256,uint256)", +"916635c6": "log_mint(address,uint256)", +"91667aef": "getTokensPurchased()", +"9166a449": "totalTokenSaleCap()", +"9166b10a": "IcoAbandoned(string)", +"9166cba4": "sai()", +"9167c5ad": "removeClientToken(uint256)", +"91684f8d": "MMR(address)", +"916891aa": "allocateReserveAndFounderTokens()", +"916a2b29": "_removeHorseFromStud(uint256)", +"916a476e": "save3(address,bytes,string)", +"916a4b57": "addPet(uint256,uint256,uint256,uint256,uint256,uint256)", +"916b5cfa": "TIMEstartICO()", +"916be4fe": "HELP4HUMANITY()", +"916c99fd": "getCampaignEndPointById(bytes32)", +"916dbc17": "getPlayersFromCompetition(string,uint8)", +"916dbc9e": "Coin786token18()", +"916df92a": "Round()", +"916dfea2": "getPersonalBonus(address)", +"916e5901": "teamTokensLock()", +"916e93f8": "ecrecoverFromVRS(bytes32,uint8,bytes32,bytes32)", +"916eb6eb": "SetRoundResult(uint8,uint8,uint8,uint8,uint8)", +"916f5de1": "_emitJobOfferAccepted(uint256,address)", +"916f7c23": "setSelled(uint256,bool)", +"91702ddc": "highCompose(uint256,uint256,uint256)", +"91704e1e": "getBid(bytes32)", +"917105d4": "_takeOwnershipOfToken(uint256)", +"917116f2": "NewSellPrice(uint256)", +"917180c7": "setColdWallet1SplitPercentage(uint256)", +"91735092": "assignToEarlyBirds(address[],uint256)", +"9173a610": "createGame(string,uint256,bytes32[])", +"917418c1": "setMinRoundSize(uint256)", +"917569a8": "weiPresaleMax()", +"917603e5": "getNumberOfMyGamesCompleted(address)", +"917640b5": "getSELabels()", +"91778b9c": "changePrice(uint8,uint256)", +"9178732f": "warriorsOnTheBattlefield(address)", +"917ada14": "testControlCreateShortIdAlreadyExists()", +"917b4f8b": "TQXToken()", +"917d009e": "getAuctionPrice(uint256)", +"917d2be2": "wolkGenesis(uint256,uint256,address)", +"917ec8e2": "removeApp(uint32,string)", +"917f635c": "wct()", +"917fcc5d": "addJobProposal(uint256,string,uint256)", +"917fd839": "buyGEN0Chibi(string,string,uint8,uint256)", +"91814577": "renameStoreTo(bytes32)", +"91816981": "getProfitPercentForData(uint256)", +"91818130": "totalCharityPrize()", +"91828a2e": "extra_bonus_duration()", +"918307fd": "getRemainOfStage(address,uint256)", +"918359c6": "needsBirth()", +"91837535": "getgateway()", +"9183d360": "CreateINDI(address,uint256)", +"9183d8ab": "returnAndRevert(bool)", +"9183fd01": "getSeedPrice()", +"91854684": "pollBallot(uint256,uint256)", +"91858734": "takeControl()", +"9185c694": "_deleteAccount(address)", +"9186485a": "readKYC(address)", +"918657cb": "token_information()", +"91872a91": "isEmpty(string,string)", +"9187300e": "getTokensForSale(bool)", +"91876e57": "withdrawAuctionBalances()", +"91878995": "MYCOIN()", +"9188451b": "transferUserGrowthPoolTokens(address,uint256)", +"91885e1d": "nextWeaponID()", +"918898a5": "frozenRules(address,uint256)", +"9188d312": "getCard(uint256)", +"9189a59e": "sweeper()", +"9189edd2": "Zinoder()", +"9189fec1": "guess(uint256)", +"918a15cf": "toEthSignedMessageHash(bytes32)", +"918a2e0c": "AccessoryCollection(uint256)", +"918b8326": "startSto()", +"918c00c6": "LogCommit(uint256,address,bytes32)", +"918c783a": "hasPurchased()", +"918ca01d": "BurnConfirmed(uint256,address,uint256)", +"918d407d": "acceptOffer(uint256,address)", +"918e2c3d": "GetUserExtraData3(address)", +"918f1bb5": "ProjectKudos()", +"918f49ec": "NDCOIN()", +"918f5f74": "setMinBonusTrigger(uint256)", +"918f644e": "getScriptsCount()", +"918f8674": "DENOMINATOR()", +"91914b30": "setTokenUrl(address,string)", +"91915ef8": "setCapacity(uint256)", +"91916a5e": "Test(uint256,uint256)", +"9191b520": "PlatinumToken(uint256,string,uint8,string)", +"919203a0": "moveTokensFromStockToSale(uint256)", +"91923d7f": "delSuperInvestor(address)", +"9192f48e": "setLocked(address)", +"9193b2e3": "request(address,uint256,uint256,address)", +"9193ba0b": "createForwarder(address)", +"91959fe3": "getCalFactor(uint32)", +"91962739": "setWhiteListOwner(address)", +"9196bdd5": "ggc(address)", +"9196e481": "getAllSteps()", +"91970cba": "saftInvestorAllocation()", +"919747fb": "depositFunds(address)", +"91975e22": "ManagerDisabledEvent(address)", +"91977c56": "setDTR(address)", +"9197b7cd": "earlyWithdrawal()", +"919823df": "getHashExists(string)", +"919840ad": "check()", +"91988783": "IMDEXdepositToken(address,uint256)", +"9198e08c": "Linfinity()", +"919987bc": "rewardPool_()", +"9199a8bb": "dnnHoldingMultisig()", +"919a41dd": "endFight(uint256,uint256)", +"919aa4fa": "ZIGICOIN()", +"919acf1e": "getperiodlasttime(address,address)", +"919b30cf": "FTXToken()", +"919baade": "ProposalsEntity()", +"919be880": "createEscrow(bytes16,address,address,uint256)", +"919beeb1": "calculateRate()", +"919bf699": "EggsPurchased(address,uint256,uint32)", +"919c9d4a": "getAfterIcoPeriod(uint256)", +"919ca82d": "EtherprisesLLC()", +"919d3401": "MAXIMUM_ICO_TOKENS()", +"919d8bb2": "TokenTrader(address,address,address,uint256,uint256,uint256,uint256,bool,bool)", +"919e144c": "predict(uint16,uint8)", +"919e1967": "Ubiq()", +"919e7f42": "supportNewMoon(address)", +"919edc7c": "getChainySender(string)", +"919f31c2": "Ankr()", +"919f8cfc": "makerDepositEther()", +"919f90ca": "sendCommissionToOwner(uint256)", +"91a01414": "getPreviousBlock(uint256,uint256)", +"91a0ac6a": "equity()", +"91a0ba00": "icoRound1()", +"91a1896e": "setReserveForFoundersSecond(address)", +"91a1f16a": "getMaxWin()", +"91a266ac": "totalEthCharityRecieved()", +"91a34006": "getInitializeOutcomeValue()", +"91a3cec0": "receiveEtherFormOwner()", +"91a49300": "purchaseEnable()", +"91a553df": "developer_add_cost_of_transfers(string)", +"91a57544": "affiliatePercentage()", +"91a5b0c7": "bestSum(uint8[])", +"91a67e1e": "tokenFrozenUntilBlock()", +"91a73892": "getOrderStateHelper(uint256,uint256)", +"91a73a27": "cleanSellShareOutput()", +"91a7aa37": "Chain2()", +"91a852f6": "changeTicketFee(uint256)", +"91a89712": "link(address)", +"91a90014": "_updateTokenRates(uint256)", +"91aa94f1": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,bytes32)", +"91aabeb5": "checkArea(uint32[],address)", +"91aac477": "addNacToNetf(uint256)", +"91aadff6": "OPEN_SALE_STAKE()", +"91aaf2e9": "presaleTokenAmount(address)", +"91ab0ca0": "authorisedContract()", +"91ac2c3f": "testCreateElection()", +"91ac46f5": "centRaised()", +"91ac7e65": "indexOf(uint256)", +"91ac96a9": "pendingWinners(uint256)", +"91acd8fb": "DEJToken()", +"91ad1ada": "VernamPrivatePreSale()", +"91ad27b4": "getInterval()", +"91ad48a1": "DataToSetting(uint8,bool,uint8)", +"91af8d14": "recalculateTopScores(uint256,uint256,uint256)", +"91afc432": "setUpdaterAddress(address)", +"91b1a02a": "SwissCryptoExchange(address,address,address,uint256,uint256,uint256)", +"91b22ebf": "getTokenAmountPerHeritor(address,address)", +"91b23419": "developerFund()", +"91b2413f": "HplusToken()", +"91b25b35": "revokeAndSetNewMember(uint8,bytes32,address)", +"91b2b30e": "LogI(uint256)", +"91b43d13": "fundingEndBlock()", +"91b4a0e7": "Difficulty()", +"91b4ded9": "lastPauseTime()", +"91b56822": "gameTick(uint256)", +"91b584f3": "_insertValidator(address,uint256)", +"91b6a086": "WithdrawToInvestor(address,uint256)", +"91b7ad06": "calculateTokens(address)", +"91b7d3e0": "redeemSurplusERC20(address)", +"91b7f5ed": "setPrice(uint256)", +"91b8a49a": "lastDonor()", +"91b97997": "endFirstWeekICO()", +"91b9b640": "getDApp(string)", +"91ba5d6a": "preICOMany(address[],uint256[])", +"91baabba": "CCLToken()", +"91bb2534": "impl_price()", +"91bb4816": "m_Database()", +"91bbb21a": "trialDeadline()", +"91bbb87b": "GetPurchaseInfo()", +"91bbbe4d": "_payoutTaxes(uint256)", +"91bbd6f6": "VeiagToken(address)", +"91bbdcc7": "convert()", +"91bc85a9": "SetTrustee(address)", +"91bc8a45": "bonusAdd()", +"91bdc458": "blockNewSpinnerPurchase(uint256)", +"91bdf9da": "isTen(uint8)", +"91be0b31": "setPriceChanger(uint256)", +"91be2f8d": "changeCCCoinAddress(address)", +"91be90c8": "_dust(address)", +"91bf9c50": "test_CampaignRulesFail()", +"91bfeb98": "CrystiumToken()", +"91c03391": "TraToken()", +"91c05b0b": "distribute(uint256)", +"91c11cae": "disputeTransaction(uint256,uint256)", +"91c1e2c1": "burnedBalanceOf(address)", +"91c20375": "setArtEsc(string,string)", +"91c23928": "divSafe(uint256,uint256)", +"91c259ea": "transferby(address,uint256)", +"91c27b2a": "setTransTimes(uint32)", +"91c3352e": "test_invalidEmptyEqVal1()", +"91c3e5ee": "rb(address)", +"91c3e7f8": "showlvzhou(address)", +"91c4529f": "isBlacklistSpender(address)", +"91c49026": "rebalanceEnclaves(address,uint256)", +"91c4c78f": "fund(address,uint160)", +"91c62a5a": "LogBounty(address,uint128,string)", +"91c71e2b": "disableLock(bool)", +"91c72d88": "holdSubscriptionOffer(uint256)", +"91c79a9a": "CON0217()", +"91c827a0": "AddOwnerAddress(address,address)", +"91c873cb": "getAdminContract(address,uint256)", +"91c8e336": "exchangeSupply()", +"91cadaf6": "evolvePrice()", +"91cb4316": "endOf24H()", +"91cb98af": "getPendingAmount(uint256)", +"91cca3db": "dev()", +"91cd242d": "setMeta(bytes32,bytes32,bytes32)", +"91cd450c": "AlienFarm()", +"91cd7e9a": "ChannelDeleted(address,address,address)", +"91cdecab": "TOTAL_DINOTOKEN_SUPPLY()", +"91ce8ca9": "IQTCrowdsale()", +"91ce8e04": "setTwo(uint256)", +"91cee1fd": "baseStats(uint256,uint256)", +"91cef6a8": "payAffiliate()", +"91cf2164": "transferFunction(address,address,uint256)", +"91cf7aca": "upgradeFrom(address,address)", +"91cfb7b6": "ceilings(uint256)", +"91d0b3fd": "_mine(address,uint256)", +"91d0dd17": "accrueCouponsPerXTokenETH()", +"91d15735": "left11(uint256)", +"91d15a91": "weiRaisedIco()", +"91d1addb": "plutocracylvlAchieved(string,string)", +"91d23a1a": "lastRewards()", +"91d2939d": "per(uint256,uint256)", +"91d4357b": "myBonus()", +"91d43b23": "right76(uint256)", +"91d462d9": "hashUnderlyingPrices(uint32,int256[])", +"91d558b7": "startCrowdsaleY0(address)", +"91d55c41": "RuiXueToken()", +"91d5d7d6": "out1Done()", +"91d6212a": "address5a()", +"91d625e5": "setupCore(string,string,address,uint256)", +"91d6367b": "reserveForTeam(address,uint256,uint256)", +"91d739ea": "updateRegistratorStatus(address,bool)", +"91d76bbb": "getTotalMigrated()", +"91d781ba": "kkTestICO1()", +"91d80948": "_checkAndCallTransfer(address,address,uint256,bytes)", +"91d8b14e": "BuyTickets()", +"91d91df3": "FesBerto()", +"91d96541": "refundedSat(address)", +"91da7aa8": "transferAndCall(address,uint256,uint256[])", +"91da9178": "WALLET_LB_ADMIN()", +"91db7b0d": "updateLockPeriod(uint256)", +"91dbd4c3": "payTournamentWinner(uint256)", +"91dc077b": "submitApplication(string,string,string,string,string,string,string,string)", +"91dc11fe": "setClaimParameters(uint256,uint256)", +"91dc1b1d": "mintCUSD(address,uint256)", +"91dc6d36": "pauseForDividend()", +"91dc956d": "addLog(string)", +"91ddadf4": "clock()", +"91de4f88": "claimCoreTeamsTokens(address)", +"91de5474": "getPurchaserCount()", +"91ded8fa": "getTokenByAddress(address)", +"91df0c08": "addReserve()", +"91df9562": "BSPToken()", +"91dfa960": "report(uint16,uint16)", +"91dfe428": "addFees(uint256,uint256)", +"91e05922": "contractICO()", +"91e078bb": "startAuction(uint256,uint256,uint256)", +"91e0a5a0": "checkHolderStep(address)", +"91e0b6c0": "ProofPublicVote()", +"91e0e39c": "resetDragonBalance(address,uint256)", +"91e1397d": "rcnFund()", +"91e145ef": "f(string)", +"91e192b7": "MintedToken(address,address,uint256)", +"91e1cc5a": "freezeAccount(address,uint256,uint256,uint256,uint256,uint256)", +"91e22c90": "interfacesSupported(address,bytes4[])", +"91e23a4d": "updateInterCryptonode(bytes32)", +"91e2f2c5": "HoQuToken(uint256)", +"91e30ec3": "buyDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"91e3387b": "numBrews()", +"91e50314": "isActivityCore()", +"91e52b91": "buySecond()", +"91e569c3": "recordBook(address)", +"91e59bcf": "testSetName()", +"91e6d028": "getFIRST_STEP_LIMIT()", +"91e6f274": "FirstUserDestroy()", +"91e7137d": "price2ndWeek(uint256)", +"91e732b6": "setInvestRestriction(uint256,uint8,bool)", +"91e79c72": "hodlerTotalValue()", +"91e7f7bc": "claimVotingRight()", +"91e8609f": "getParentId(bytes32,uint256)", +"91e863ca": "setBigPromoInterval(uint128)", +"91e88106": "abiLength(address[])", +"91e8d3dc": "testBitOrFailIndexOOB()", +"91e8fc34": "createPipe(uint256,uint256,bytes32)", +"91e9f106": "historyWinner(uint256)", +"91ea294e": "LogSetWithdrawer(address)", +"91ea4d07": "snatchedOn()", +"91ea59eb": "buyGuaranteed(address)", +"91ea8a05": "add(bytes32,bytes32,uint256)", +"91eb97ea": "pharmatrix(uint256)", +"91ebc861": "noFeeTransfer(address,uint256)", +"91ec1623": "_shutDown()", +"91ec845e": "isAtMost(int256,int256,string)", +"91ec910e": "OwnableImpl()", +"91ecda3c": "Menu10(address)", +"91ed6851": "createPromoCompany(address,string,uint256)", +"91ede45f": "Deposited(address,uint256,uint256,uint256)", +"91ee7bbf": "dispute(bool)", +"91ef14b4": "setApprove(address,address,uint256)", +"91f02379": "hundredKInvestor()", +"91f02f9c": "DelayChanged(uint256)", +"91f09f7c": "redeemPowerTokenBal()", +"91f11a9c": "lastWinNumber()", +"91f1cf05": "crafting()", +"91f1f310": "totalOffers(uint256)", +"91f2700a": "drop(address)", +"91f2ebb8": "heir()", +"91f34dbd": "transfer(uint256,address[],uint256[],uint256[3],bytes,bytes,bytes)", +"91f39f10": "getContactAddressByIndex(uint256)", +"91f3c4a2": "GSY(uint256,string,string)", +"91f4b7ff": "soulBookPage(uint256)", +"91f5637a": "frozenBalanceCount()", +"91f5c3a8": "donateAndCreateGiver(address,uint64)", +"91f5f3c9": "MAX_TOKEN_GRANTEES()", +"91f6c7e6": "getCurrentICOPhase()", +"91f72ebb": "is128Bit(uint256)", +"91f7cfb9": "availableAmount()", +"91f85480": "updateValidOrg(address,address,bool)", +"91f8668e": "setTokenUri(uint256,string,string,string,uint256)", +"91f90157": "highestBidder()", +"91f9bb85": "setAdvisorVault(address)", +"91f9f4a2": "getRateIncludingBonus()", +"91fa0555": "getParentAddress()", +"91fa196d": "getDesignatedReportReceivedTime()", +"91fa2df4": "addPaid(bytes32,uint256)", +"91fb4583": "reachedMajorityForTeam(uint256)", +"91fb9437": "isStoring()", +"91fc437e": "nameTaken(string)", +"91fc5696": "confirmBusinessOwner(address)", +"91fc7c70": "TreeCoin()", +"91fd1c7d": "getSenderByHash(string)", +"91fdbb55": "releaseUrl(uint8)", +"91fdf6b1": "electActiveTranscoder(uint256,bytes32,uint256)", +"91fe5a64": "_totalBurnedTokens()", +"91fe7bab": "mintTokensWithApproval(address,uint256,address)", +"91fea350": "checkFreezeValue(uint256)", +"91fed1c0": "RaffleResult(uint256,uint256,address,address,address,uint256,bytes32)", +"91feea93": "withdrawBoth(address,uint256,uint256)", +"91ff6baf": "requestsFunded()", +"92008bfa": "setResourcesSecondaryManager(address)", +"9200b04c": "myDeposit(address)", +"9201ac94": "getCON()", +"9201de55": "bytes32ToString(bytes32)", +"92031600": "setBonuses(uint256[],uint256[],uint256[])", +"92039b87": "balanceVested(address)", +"9203cb9e": "forwardWin(address,address,bytes,bytes32,bytes)", +"9204764f": "setHookOperator(address)", +"9204b2bd": "maxVeriAmount()", +"9204c013": "QKCCoin()", +"9205ab3c": "sendRefund()", +"9205dce7": "Usdcoins()", +"9205ec4d": "refundSponsorship(address,uint256,uint256)", +"9205fbc2": "testAuthorityAuth()", +"92066346": "setCastleLootDistributionThreshold(uint256)", +"92069ebd": "_getMarketPrices()", +"920775d4": "subVirus(address,uint256)", +"92093dd6": "getLastResult()", +"92093e7d": "addUserRefBalance(address)", +"92099fdb": "refundableEthBalanceOf(address)", +"9209b3c0": "getCrtDetails(bytes)", +"9209eebe": "SentToContractor(uint256,uint256,address,uint256)", +"920b0280": "noIcoPeriod()", +"920b3a7e": "getFundersCount()", +"920bb680": "ledgerWallet()", +"920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", +"920dce19": "getAngelCardSeries(uint8)", +"920dd47b": "first_partner_address()", +"920dfe52": "EFARMCoin()", +"920e3c96": "setUserStatus(address,uint8)", +"920e4da9": "created(string,string,address,uint256)", +"920ffa26": "ownerOf(string)", +"9211448f": "finalizeClaim(bytes32,string)", +"921193cf": "changelp3(address)", +"921200ed": "setBonusTokenRateLevelFour(uint256)", +"9212051c": "numJobs()", +"921233b9": "addBuyRequest(bytes32,address)", +"92123470": "mintTo()", +"921237a4": "createPlayer(address,address)", +"92127126": "canTransferByPartition(bytes32,address,uint256,bytes)", +"9212d0c1": "closeBetsIfEventNotSuccess(bytes16,bytes16,uint256,uint256)", +"92140775": "prefixedTest(uint8,bytes32,bytes32,address,address)", +"92140bb9": "getTransactionByTransactionAndEntityId(address,uint256)", +"921456e7": "modifierEx()", +"921496a9": "adminWithdrawTokens(uint256)", +"9214b644": "married()", +"9214e527": "Crowdsale(uint32,uint32,uint256,address)", +"9215b58e": "GoldMineChain(uint256,string,uint8,string)", +"9216728a": "cooWallet()", +"9216b7ad": "winTokenReward()", +"9216cf13": "licenseSalesContractAddress()", +"921710e9": "getShareRewardPercent()", +"9217500c": "setFightAuctionAddress(address,address)", +"9217c438": "getOracleAddress(uint256)", +"921828ac": "commitProposal(string)", +"921b004b": "depositFunds(address,uint256)", +"921b15ae": "LaborHourToken(address,int256,string,uint256)", +"921b2d64": "mintTokens(int256,address,uint256)", +"921b45f7": "checkAndCloseDeposit(uint256)", +"921bd6f0": "upgradeTimestamp()", +"921d72ed": "CreatedAccessory(uint64)", +"921dec21": "registerNameXID(string,uint256,bool)", +"921e1537": "dailyHash()", +"921e7ba6": "withdrawCoins(string,address)", +"921f5dec": "getBlockVoter(uint256,address)", +"921f98bb": "resolveFailVote()", +"921fb890": "buyGood(address,string)", +"92202126": "ETU()", +"92207bd8": "getMyCarsIdxCount(uint256)", +"9220d426": "_nowDateTime()", +"9220d5fa": "DiminishToken(address,address)", +"92223e7a": "BlueRedTokenERC20(uint256,string,string)", +"9223de05": "contributionAmounts(address)", +"922427de": "canSort()", +"922497fc": "regularTokenMaxSales()", +"92250c6a": "localBuy(uint256,address,address)", +"922587ff": "addMintable(address)", +"9226084e": "tier_cap_1()", +"92262375": "transferByDate(address,uint256[],uint256[])", +"922775e3": "createNewTrade(address,uint256,uint256)", +"92277933": "abc()", +"9227bed6": "bucketAmount()", +"922856da": "getPicksForUser(address)", +"9228e90d": "developer_BSR()", +"9229c504": "new_mainPlayer(address)", +"9229e3cd": "submitProof(bytes32,bytes32[],uint256)", +"9229f3c1": "KVLToken()", +"922a8425": "paymode()", +"922b01ca": "walkTokenLots(address,address,uint256,uint256,bool,bool,bool)", +"922b041d": "_getStatsSumHours(uint256)", +"922ba128": "calculateCurrDynamicPrice()", +"922bedf7": "mintNFTsNotForSale(uint256[],bytes32[])", +"922c64ef": "batchDistributeTokens(address[],uint256[])", +"922da521": "RocketPoolPresale(address)", +"922dd59a": "icapTransfer(bytes,address,bytes,uint256)", +"922dd7d9": "generateKey()", +"922f17ce": "emptyEther()", +"922f7124": "changeStrategyAddress(address)", +"922fc84b": "taskProcessedNoCosting(uint256)", +"923020d9": "whitelistMainSaleAddress(address,bool)", +"9231e0f9": "setPresidenteDeMesaVerify(bytes32,uint256,bytes32)", +"923211f5": "showLiveDividends()", +"9232494e": "BANCOR_NETWORK()", +"9232fdb5": "addUserExp(address,uint256)", +"9233c030": "_reward(uint256)", +"9233c1d6": "battle(uint256[],uint256)", +"9233d561": "setUnpaidPercentage(bytes32,uint8)", +"92346ed7": "test1(bytes)", +"92348055": "sellSoul(string,uint256)", +"9234c1fd": "MAX_REVEAL_DURATION_IN_SECONDS()", +"92363a42": "createProduct(uint256,uint256,uint256,uint256,uint256)", +"923689e4": "startRecovery()", +"92369bd5": "calculateAndDecreasePhaseSupply(uint256)", +"9237a125": "seedDeposit()", +"9237e074": "manager(uint256,address,string,uint256,bool)", +"9237e61b": "InvestmentSucceeded(uint256)", +"9239520b": "setQuorumPercent(uint8)", +"923a1abb": "SBCE(uint256)", +"923a2e61": "JinGangCoin()", +"923a367f": "PBToken(address,address)", +"923a4227": "CiceroToken()", +"923a69ae": "getCardRevenue(uint8)", +"923b3e75": "publishContractTemplate(uint256,string,address,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"923b9480": "getDatasCount()", +"923b9bae": "EventCreatePet(address,uint256)", +"923ce65f": "draftNewCard()", +"923d566d": "buyKey(uint256,uint256)", +"923db49b": "informOffChainBuy(address[],bytes32[])", +"923de8e2": "checkTransferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,bytes)", +"923e1b84": "sendToEtheroll(uint256,uint256)", +"923e2645": "DonationGuestbook()", +"923f098e": "CLNRefunded(address,address,uint256)", +"923f1788": "convertChest(uint256)", +"923f8455": "BACE_ETH()", +"923f9bae": "testLedgerPayback()", +"923fa0fe": "ChildContract(uint8,address,bytes32)", +"92403b35": "tier2Count()", +"9240551b": "changeCurrentEtherRateInCents(uint256)", +"9240f699": "landmarkSize()", +"92414146": "preIcoWasSuccessful()", +"92414f92": "OpenDate(uint256)", +"92418cf6": "withdrawKncFee(uint256)", +"924320b5": "isMajorityShareholder(address)", +"9243e088": "setEnforceRevisions(bytes20)", +"9244c21e": "preicoUSD()", +"9244f496": "addAddressToWhiteList(address)", +"92450ac9": "setDataColla_AA_01(string,string)", +"9245290d": "changeFeeCollector(address)", +"9246177b": "changeTicketOwner(address)", +"9246ab77": "addWhitelist(address[],address)", +"9246e531": "getSignature(string,int256)", +"924720bd": "pizzaPrice()", +"9247ff59": "getAccountData(uint256)", +"9248019e": "addMonsterIdMapping(address,uint64)", +"924806a0": "returnToken(address)", +"9248d4ec": "getEthNeeded(uint256)", +"92491f21": "subTourFreezingTime()", +"9249993a": "BANCOR_GAS_PRICE_LIMIT()", +"9249bc75": "set_sale_open()", +"9249d865": "getAllLawyers()", +"924b1235": "price1stWeek(uint256)", +"924b39ae": "refundToWallet(address)", +"924b573a": "lastWagerTimeoutTimestamp()", +"924bb1d0": "updateETHPrice(uint256)", +"924c28c1": "ContractInterface(address,address,address)", +"924ca55e": "LindaPresale(uint256,uint256,uint256,uint256,uint256,address,address)", +"924ca61a": "coupon(address,address,uint256)", +"924dd50a": "startSelling(uint8,uint256,uint256,uint128)", +"924dedca": "getEpisodeDataCommand(uint256,uint256,uint256)", +"924e63f6": "setDisputeResolver(address)", +"924f6be0": "CONTEST_INTERVAL()", +"924fdaf6": "drawPorsche()", +"925012f6": "agingTimes(uint256)", +"9250640d": "INIT_TOKENS()", +"925074ca": "getAllPlots()", +"92509c16": "lock_by_manager()", +"9250b080": "picops_user()", +"9250d59f": "setIsSoftCapAchieved()", +"925176d6": "sellRate(uint256,uint256,uint256)", +"92524725": "mintToMany(address[],uint256[])", +"9252e819": "IGCoin()", +"92535862": "custodyCounter()", +"92536070": "RoomManager()", +"925382c0": "setMigrated()", +"92541925": "skynacoin()", +"92549366": "remainingCapInEth()", +"9254c2a8": "changeTotalRemaining(uint256)", +"92550bdd": "applyMigrate(uint256)", +"9256759c": "addressFundAirdrop()", +"9256c71d": "getPriceFeedsByOwner(address)", +"92573a0c": "token_callg()", +"925753d3": "TokenGenerationDisabled()", +"92579f34": "Aracle()", +"92584d80": "finalize(bytes32)", +"92588071": "saveAddress()", +"9258c8f8": "Applicationcoin()", +"9258d5a3": "isIcoRunning()", +"925aa2ad": "purchaseWithEth()", +"925ac216": "isICOOpen()", +"925ad1e7": "collectAllForce(address[],address)", +"925b83a7": "getCobeFriend(uint256)", +"925cbdd1": "createCost(uint256)", +"925cd80d": "contract_start()", +"925d3ec8": "dDowngradeToBasic(bytes32)", +"925f2573": "batchTransferDirectoryToken(uint256,address[],uint256[])", +"925f7239": "veztUserRegistered(address)", +"9260587e": "_removeTokenFrom(address,uint256)", +"92609315": "addAuctionManager(address)", +"9260e726": "giveReward(uint256)", +"9260faf8": "issueForEuro(uint256)", +"9262bba9": "titsTokenAuthor()", +"9262d759": "getAddress(uint256,uint256)", +"9263b559": "ethReceivedMain()", +"9263e371": "mint(bytes32,string,string,string,string,string)", +"9264a169": "tranferFrom(address,address,uint256)", +"9264ee57": "valuePerMicroKey()", +"92656b6d": "calculateHash(address[],uint256[])", +"9265996c": "getEventResult(uint32)", +"92664190": "PriceUpdate(uint256,uint256)", +"92670dc8": "currentBonus(uint256)", +"9267a36d": "founderVestingContract()", +"9267b291": "getGameStarted()", +"9267daba": "depositToGateway(uint256)", +"9268037a": "FortressToken()", +"92682b5f": "PauseOn(uint256)", +"9268e2d6": "setCLOUDForGas(uint256)", +"92698814": "reserved(bytes32)", +"926994e6": "testFailSoftLimit()", +"9269c0a7": "setABalances(address[],uint256[])", +"9269e464": "bountyTokenAllocation()", +"926a2456": "cancelIndexedSale()", +"926a4765": "getRoundStart()", +"926a9af0": "distributeForFoundersAndTeam()", +"926aa0a8": "sendEthTo(address)", +"926b33c6": "playSpecificDoubles(uint256,uint256)", +"926baab2": "proofImpl()", +"926bd180": "isGameVerified(uint256)", +"926c196a": "depositAndTransfer(address,uint256,bytes)", +"926d212e": "createGenerator(uint256)", +"926dfd5e": "becomeYouTubemaster()", +"926f0c7b": "partnersFund()", +"926f949e": "calculateWolkToBurn(uint256)", +"9270040f": "drawHeroLottery(address,bool)", +"92708ce1": "aletoken(string)", +"92710c60": "finalizePublicICO()", +"92716054": "freezer()", +"9271b8df": "totalPaidToFunder(bytes32,address)", +"9271b997": "setHighScore(uint256)", +"92721b86": "dividendRate(address,uint256)", +"9272e3f5": "many_currencies()", +"927319ba": "DCCToken()", +"92731aaa": "changesLocked()", +"927332da": "MaxChildLevel(address)", +"92736527": "freezeGame(uint32,bool)", +"92749978": "minBets()", +"9274c16b": "tokensDistributedToContributors()", +"9275ddd7": "SetFreeQPY(uint256)", +"92760a3e": "loveName()", +"92763585": "uniquePetsCount()", +"927675b8": "run(bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],uint256,uint256,uint256,uint256)", +"92771e0f": "getCertificateMetaData(bytes32,bytes32,bytes32,uint256)", +"927726ea": "_openPrize(uint32,uint32,uint256,uint256)", +"927731c8": "payDepositByCandidate()", +"9278c418": "targetWalletVerified()", +"9279011c": "nextroundlength()", +"927a11b6": "getBranch(uint256)", +"927a4a7b": "transferWithLockAfter(address,uint256,uint256)", +"927a90da": "icoOpen()", +"927aaa7c": "setGeneManager(address)", +"927ac4f5": "approveContractReceiveGameLockedToken(address)", +"927bcac3": "emergencySplitToggle()", +"927c4151": "finalizePresale(address)", +"927c60de": "BIKQuery(address)", +"927d9ab4": "set_building_amount(uint256)", +"927da105": "allowance(address,address,address)", +"927db818": "initPresale(address,uint256,uint256,uint256,uint256)", +"927db81f": "new_entity(address,string)", +"927e434b": "rocketAddFunds(uint256,uint256,uint256)", +"927e69e2": "_getBattleBonus(uint256,uint256,uint256,uint256,uint256)", +"927ed13a": "newClient(uint256,address)", +"927f1086": "MAX_RANDOM_DELAY()", +"927f4be0": "exhaustAfterBattle(uint256,uint256)", +"9280b836": "spreadGold(address,uint256)", +"9280df59": "Swapcoinz()", +"928161ca": "recoverFundsAndDestroy()", +"92817184": "redeemPurchasesForVendor(address)", +"928187a8": "BonumPreICO(address,uint256)", +"9281aa0b": "setWhitelisted(address,bool)", +"9281cd65": "changeApproval(address,uint256,uint256)", +"9281e270": "matchOrders(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)", +"92824c24": "changeClaimAddress(address)", +"92829174": "preCrowdsaleTokensWallet()", +"9283032c": "storeWeekUnclaimed()", +"9283da60": "TeamtokenRelease1()", +"9283e6cb": "acquisitionsStatus()", +"92842802": "changeTierAdmin(address)", +"928432c0": "releasedSteps()", +"92844ddd": "_setUserRole(address,uint8,bool)", +"92846ab6": "put_transfer(address,address,address,uint256,bool)", +"92848c9e": "create(uint256,uint256,uint256,uint256)", +"9284cb0c": "getTotalPreSelled()", +"9286904c": "set_doctor(uint256,uint256,string)", +"928693c6": "RusaToken()", +"928771bb": "janPot_()", +"92878bd0": "forwardFunds(address,uint256)", +"9287c877": "getNavLength()", +"92885e86": "CountryPurchased(uint256,address,uint256)", +"9288cebc": "totalRollsByUser(address)", +"92890b09": "SmithToken()", +"92893fb9": "hasAddressVoted()", +"92898900": "allowTokenTransfer(address)", +"928993dd": "setBuyComissionUnits(uint256)", +"928a00d2": "deleteCoin(uint256)", +"928b06b5": "EAsset()", +"928b4cd2": "preICOTokenHardCap()", +"928b685c": "_buyPutToClose(uint256,uint256,uint256,uint256,address)", +"928b792e": "withdrawBonuses(bytes32,uint256,address,uint256,address)", +"928c5fb3": "getArrIntField3()", +"928c82a2": "createAsset(string,string,string,uint256,address)", +"928d09dd": "coreTeamAddr()", +"928d20fc": "_unpackPetValue(uint256)", +"928d4144": "verify(uint256,uint256,string,uint8,bytes32,bytes32)", +"928d81c1": "withdrawERC20Token(address,uint256)", +"928e6592": "sellingPriceInDayOf(address)", +"928e6b16": "getUint(bytes4)", +"928f0cc7": "ChangeStartByManager(uint256)", +"928f16e3": "geCompoundTimestampsFor12Months(uint256)", +"928fca1d": "withDrawlocked()", +"928fd553": "Migrated(address,address,uint256)", +"929066f5": "isParticipant(address)", +"9291b1f3": "tradeDealConfirmed()", +"92925c3b": "supplyTokens()", +"9293cc10": "TOU(uint256,string,uint8,string)", +"9293eb2f": "totalScammedRepaid(address)", +"9293f41e": "sendInviteDividends(uint256,uint256,uint256,uint256[])", +"92940bf9": "transferERC20Token(address,address,uint256)", +"92946284": "_placeSellTokenOrder(address,uint32,uint256)", +"9294e012": "sendOracleData()", +"92956506": "StarxCoin()", +"92958b7d": "markTokensToSell(uint256,uint256)", +"9295d038": "loyaltyPart()", +"92968125": "getUserDetails(address,uint256)", +"92979037": "teamTwoDivsUnclaimed()", +"9297afa2": "Eliminate(address,uint256)", +"9297c24c": "command()", +"9297d758": "DiceManager()", +"929911be": "takeSnapshot(address)", +"9299e552": "cancelListing(bytes32)", +"9299f294": "_buy()", +"929a3c18": "EMGwithdraw(uint256)", +"929a79b1": "getTitle(uint256)", +"929aa851": "maximumTokensForFifth()", +"929ac519": "changeOwnersWallet(address)", +"929ba8bf": "transferFromRwrd()", +"929c4649": "startUpgrading()", +"929c52a7": "changeClosingTime(uint256)", +"929d2033": "takeUpWork()", +"929de7c9": "setData_21(string)", +"929e626e": "getShareDistribution(bytes32)", +"929e902d": "curVotes()", +"929ec537": "getLockedAmount(address)", +"929f11ea": "withdrawOwnerAmount()", +"929f8dd4": "createBet(address,address,uint256,bytes32[])", +"92a04621": "maxPurchaseNum()", +"92a08dd1": "getCustomField(uint256,bytes32)", +"92a0fd64": "reserveTokenWallet()", +"92a11827": "canRevokeVesting(address,address)", +"92a20d0c": "ANONIMX()", +"92a2b44b": "offerTkn(uint256,uint256)", +"92a38e71": "createOpenValentineRequest(string,string,string)", +"92a39634": "VoltOwned(address)", +"92a42704": "verifyOwnership()", +"92a48bea": "setOfferContract(address)", +"92a4cc25": "readFrom(uint256,int256)", +"92a5f340": "BasePrice()", +"92a69395": "setTotalAirDrop(uint256)", +"92a70756": "m_thawTS()", +"92a70c42": "deployerHash()", +"92a73fb8": "testbool(bool)", +"92a781d8": "changeBaseValue(uint256)", +"92a7843c": "lastRefundedIndex()", +"92a79148": "getCryptoVersusReward()", +"92a793d0": "release_3()", +"92a81127": "BasicMilestones(address,address,bool)", +"92a8424d": "setPercentageCW(uint256)", +"92a93d33": "payAltCoin(bytes32,address,address,uint256,uint256,bytes)", +"92aaa019": "Inventor()", +"92abb859": "overrideBlock()", +"92acb4d6": "contributorList(address)", +"92ad728b": "staff_2()", +"92ae0530": "canUpdateFrontWindowAdjustmentRatio()", +"92aea05a": "expLimited(int128,int256)", +"92af0605": "playSystem(uint8,uint8,uint8,address)", +"92af7ce0": "throwsWhenGettingTokensWithEndedSale()", +"92afac6d": "reserveY1()", +"92afc33a": "ROLE_MINTER()", +"92b03120": "CONTRIBUTION_START()", +"92b0c5b2": "pow(int256,int256)", +"92b0d721": "mold(bytes32,uint256)", +"92b0fed8": "ChannelFactory()", +"92b1696d": "CNYToken(uint256,string,uint8,string)", +"92b18819": "getPoolFirstExpertStaker(uint256)", +"92b19872": "changemincap(uint256)", +"92b1b0ce": "RachelToken()", +"92b1b418": "tokenFallbackTest(address,uint256,bytes)", +"92b25a71": "Wallet(bytes32)", +"92b3228c": "getIreg()", +"92b39bf4": "assignPatient(uint256,uint256,uint256,uint256)", +"92b46390": "changeDevAddress(address)", +"92b4b68a": "get_bettor_nfo()", +"92b4bb50": "rps()", +"92b4ddeb": "phase_3_Time()", +"92b6641a": "hardCapHigh()", +"92b6ebfa": "getPreIcoBonus(uint256)", +"92b7bd27": "removeOwner_(address)", +"92b7bfbb": "TransferRate()", +"92b7d5b9": "getCurrentGaslimit()", +"92b863f3": "AbabPreICOToken()", +"92b87751": "_balanceOfUnclaimedMilk(address)", +"92b9308c": "getRespectiveValue(address)", +"92b96432": "setBpTime(uint256)", +"92b9fe8b": "Xenon()", +"92ba4ba6": "GridMember(string,uint256,bool,address,address)", +"92ba77ca": "setVeto(uint256,bool)", +"92bad6f4": "getNumber(uint256,uint256,uint48)", +"92bb3e6a": "setCoverImage(uint256,bytes)", +"92bbf6e8": "E()", +"92bc3251": "getCuts()", +"92bccb80": "pauseRedemption()", +"92bcf0d5": "ICO_PHASE2_LIMIT()", +"92bd38bc": "fundCampaign(uint256)", +"92bd3f16": "mainsaleTotalNumberTokenSold()", +"92bdf9ba": "lockedCollateral(address)", +"92be2ab8": "setRegisterFee(uint256)", +"92be5d13": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256)", +"92be675f": "Y1_lockedTokenAmount()", +"92bec526": "GameChannelConflict(address,uint256,uint256,address,address,uint256)", +"92bec5c3": "distribute(uint256,uint256,address)", +"92bf2bf1": "changeMinimumContribution(uint256)", +"92c00590": "getAddReserveSignatures()", +"92c00a3f": "transferState()", +"92c00f3c": "investorsTokens()", +"92c19394": "packStore(address)", +"92c2bcb4": "changeRecipient(address)", +"92c31e61": "ZOINToken()", +"92c40344": "getReferralCode(address)", +"92c4a5ed": "MinBetUpdate(uint256)", +"92c537e9": "hatchStartTime()", +"92c54f92": "sit(uint8)", +"92c5769d": "unlockAddressAfterITO(address,address)", +"92c6b697": "claimGanaTokens()", +"92c6bf28": "getWalletsData()", +"92c70af1": "MAX_UN_LOCK_TIMES()", +"92c787ae": "register_recurcively(uint256)", +"92c8412f": "buykey(uint256)", +"92c87280": "joinProvider(uint256)", +"92c88a40": "CollectibleToken()", +"92c8eb96": "DSFalseFallbackTest()", +"92c9a11a": "getPrices2(uint256,uint256,uint256)", +"92c9a926": "stateStartDate()", +"92c9a9e2": "activateDestruction()", +"92ca3a80": "SingleTransact(address,uint256,address,bytes)", +"92cb5f19": "TokenTemplate(uint256,string,uint8,string,address)", +"92cb9030": "getFeeWindowForForkEndTime()", +"92cbda09": "subbtycmoney(address,uint256)", +"92cbeb59": "OracleBitstamp()", +"92cc2c94": "drainRemainingTokens()", +"92cd1ff2": "ETH_DECIMALS()", +"92cd2b99": "asciiToUint(bytes1)", +"92cdaaf3": "fulfillEthereumPrice(bytes32,uint256)", +"92cdb7d5": "deathData_a15()", +"92cf1d49": "setStop()", +"92cf9d45": "scriptAddresses(uint256)", +"92cfd461": "_createMedal(address,uint8)", +"92cfebd6": "LanaCharleenToken(uint256,string,string)", +"92d09ceb": "collateralAmount()", +"92d09f22": "pendingInvestContracts(uint256)", +"92d0d153": "t()", +"92d16464": "gameIsOver(uint256)", +"92d1abb7": "CONVERTER_CONVERSION_WHITELIST()", +"92d25259": "iBlock()", +"92d267c1": "setEthUsdRateInCent(uint256)", +"92d282c1": "Send()", +"92d2f118": "burn(uint8)", +"92d33200": "MAX_CRATES_TO_SELL()", +"92d3be79": "escrowWallet()", +"92d42475": "bbReserveWallet()", +"92d44650": "tokenApproves()", +"92d4d9ac": "verify(bytes32,address,uint8,bytes32,bytes32)", +"92d519de": "ATSXToken(address,address)", +"92d588a0": "INITIAL_COINS_FOR_VIPPLACEMENT()", +"92d59aff": "Take_payout()", +"92d60433": "CirculatingSupply()", +"92d66313": "getYear(uint256)", +"92d68619": "Multiplication(int256)", +"92d69a39": "addNodesToList(string,address)", +"92d7b620": "judge(bytes32[13],uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", +"92d7f787": "getAccountWhitelist(uint256,uint256)", +"92d8c8cf": "setupImportFee(address,uint256)", +"92d98e95": "content(string,uint256,address,uint256,uint256,uint256)", +"92d996d7": "getPopularityByOffset(uint256)", +"92d997bd": "QuantityInitial()", +"92d9e3b8": "isAcceptingPayments()", +"92da29d2": "validPurchase(uint256,uint256,bytes)", +"92da856d": "currentStepIndexAll()", +"92dac258": "getAuctionItems(uint256[])", +"92daec51": "setLastBuyer(address)", +"92dbf585": "appendEarlyPurchase(address,uint256,uint256)", +"92dcf35d": "fourthExchangeRatePeriod()", +"92dd1246": "updateListReq(uint256,uint256)", +"92dd38ea": "arrayaccess(uint256)", +"92df61e8": "withdrawTokensFor(address)", +"92df6e91": "fortune_limitbreak()", +"92df94ec": "updateDream(address,string,string)", +"92dff48a": "backers()", +"92e0ba2a": "goldBought()", +"92e11e24": "teamAmountLeft()", +"92e16740": "scheduleOraclize()", +"92e18d9f": "setYcmContractAddress(address)", +"92e1ab17": "includesAddressesSet(address)", +"92e33d14": "enableWithdraw(bool)", +"92e405ac": "transferPartner(address)", +"92e41c69": "identityEthAddress()", +"92e4226a": "nextTransferFeeAbs(uint256)", +"92e423b5": "agent(address)", +"92e4b733": "_transferTokens(address)", +"92e4b8a4": "collectAuthorizedPayment(uint256)", +"92e4cd75": "icoTokensUnsold()", +"92e598f3": "test_fourInvalidEqInt()", +"92e5c9c9": "isBusinessOwnerConfirmed(address)", +"92e8202b": "withdrawInvestmentsOwner(address,address)", +"92e8438c": "issueTokensMulti(address[],uint256[])", +"92e8d866": "DailyGrowthUpdate(uint256)", +"92e9fd5e": "ColdWallet(address,address)", +"92eaa642": "transferLoveStory(bytes16,bytes32,bytes32,uint256)", +"92eada50": "lastBlock_a16Hash_uint256()", +"92eb35bc": "preSaleBonuses(uint256)", +"92ebf860": "invalidateTaskListingAtIndex(uint256)", +"92ec6ea8": "updateAsset(uint256,string,uint256)", +"92ecf577": "getCurrentTerm()", +"92ecf690": "grantToSetUnburnableWallet(address,bool)", +"92ed888b": "CcifToken()", +"92ee0334": "currentUser()", +"92eeee63": "createAndBuyAllAmount(address,address,address,uint256,address,uint256)", +"92eefe9b": "setController(address)", +"92efd277": "countOfDeedsByOwner(address)", +"92f00233": "minterContract()", +"92f00d37": "TalkToExpertToken()", +"92f1fc7d": "bytes32_to_bytes(bytes,bytes)", +"92f351f9": "openTimer()", +"92f461ed": "getTeamsOfOwner(address)", +"92f48846": "updateTokenSellAmount(uint256)", +"92f4d225": "spankToken()", +"92f52ddf": "DICE()", +"92f53757": "GLAM()", +"92f5cea7": "bytes32ToString(bytes32,bytes32)", +"92f692ea": "setInvitationValidPeriod(uint256)", +"92f6a74f": "totalTokenCapToCreate()", +"92f7ba17": "MELONPORT_COMPANY_STAKE()", +"92f8de45": "MXToken()", +"92f926e5": "makeMoveBro()", +"92f96115": "setPartialTransfers(address,bool)", +"92fa1453": "BankAccount()", +"92faad99": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"92fb4acd": "terminatePackage(address)", +"92fb7ef8": "burnPoll(uint256)", +"92fd1c2d": "bat_match(uint256[])", +"92fd1f01": "getPayeeAddress(bytes32,uint8)", +"92fe028b": "PokerWinner()", +"92fe4098": "b32ToBytes(bytes32)", +"92fee51a": "setICORatio(uint256)", +"92ff0d31": "transferable()", +"92ff3751": "getMatchHomePlayers(uint256)", +"92ff4be4": "finalLottery()", +"92ff7859": "newFutureLottery(uint256,uint256)", +"93003033": "tokenSalesAll(uint256)", +"93004e62": "initPayoutTable(uint256,uint256)", +"93012d5f": "Loan(uint8)", +"9301bc88": "mapping(address,uint256)", +"9301eb36": "setItemOption(uint256,string)", +"9303633e": "tier_rate_2()", +"930429ea": "setFOUNDERS_POOL_ADDR(address)", +"93046a13": "withdrawEtherPayment()", +"9304ddc8": "setUnitCreationFee(uint256)", +"93051424": "KIUSToken()", +"9305b0f8": "WorldSafetySecurityToken()", +"9306099f": "GxOrders(address)", +"930622ed": "assignedAmountToMarketExpand()", +"9306635a": "PETRO(uint256,string,uint8,string)", +"93072684": "revokeDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address)", +"9307ca0f": "houseKeep(int256,uint256)", +"93080cd4": "replaceChannelContractAddress(address)", +"9308151b": "crowdSaleTokens()", +"9308353f": "payin()", +"9308a865": "total_raised()", +"930916b2": "setInviteCode(string)", +"930a0daa": "checkMinimumQuota(address,uint256)", +"930a80b4": "testAuthorizedSetPackage()", +"930a9d92": "tradeOrder(address[3],uint256[5],int256,int256,uint8,bytes32,bytes32)", +"930ae8b0": "setSaleFlag(bool)", +"930b7a23": "approveOnce(address,uint256)", +"930bbbed": "changeBeedingCost(uint256)", +"930c0bba": "getWithdrawalEntryForFunder(address)", +"930c1198": "crowdsale(address,uint256)", +"930c2003": "victim()", +"930c57f3": "PublicSale(address,address,uint256,uint256,uint256)", +"930cb83e": "registerUsers(address[],uint256[],uint256[],uint256[],uint256[])", +"930cbf89": "ProposalAdded(uint256,address)", +"930cd62e": "getIcoInvestorsAddressesCount()", +"930d54b4": "revealSeckey(uint256,bytes32)", +"930db1ab": "setHijackPrice(uint256)", +"930ddb8e": "getIdea(address)", +"930e1173": "tokensReadyForRelease(uint256)", +"930e23b9": "_STCnContract()", +"930ed251": "getSavedVar()", +"930f5fbe": "setApplicationChecksum(bytes32)", +"930fed29": "EnkronosToken()", +"931010eb": "tokPrizes(uint256)", +"93107071": "PDAToken()", +"9310ba96": "TIX(uint256,address,uint256[],uint256[])", +"93119312": "returnMoney()", +"9312434e": "cryptocompareUsdOracleUrl(bytes32)", +"931274c8": "createContractScene(string,uint256[])", +"9312766d": "BSTokenData(address)", +"9313053e": "createItems(address)", +"93138faa": "isProviderParamInitialized(address,bytes32)", +"9313919a": "multipleShotTokenRepartition(uint256,uint256)", +"9313dc43": "claimTokensFromErc677(address,address)", +"9314be9d": "lock(bytes32,bytes32)", +"931634fd": "PGTBToken()", +"93167204": "teamTokensPercent()", +"931688cb": "updateBaseURI(string)", +"9316c3e7": "transferBulk(address[],uint256[])", +"931742d3": "commissionAddress()", +"9317cb37": "CUTOFF_PRESALE_ONE()", +"9317d6d3": "totalReceived(bytes32)", +"93183dc9": "paymentManager(address,uint256)", +"93192c65": "ProposalAdded(address,uint256,uint256,string,bytes32)", +"931983ad": "Connection(address,address)", +"9319f44d": "rateTierNormal()", +"931a4c5b": "maxContributionPhase2()", +"931a5256": "addOrder(uint256,uint256,address,address,uint256,address)", +"931b3385": "claimToken(address,string)", +"931c0040": "carrotsMultiplier()", +"931c6246": "VestingWallet(address)", +"931c8ba7": "count_products()", +"931cd0cc": "setBQL(uint256)", +"931dab50": "allocationAmount(uint256)", +"931df75f": "validateProposedThroneName(bytes)", +"931e44e2": "BuyLandsByEth(uint256)", +"931e7daa": "BettingKing()", +"931fbdd8": "Trenggalek()", +"9321cb7d": "SGT()", +"9321dc5f": "initRequest(uint256[])", +"9321e603": "changeMtcDailyLimit(uint256)", +"932354c1": "updateLocation(string)", +"93237833": "CONTRACT_HOLDER_BONUS()", +"9323eaad": "awardUnitRafflePrize(address,uint256)", +"9324dfff": "addWhitelistedTokenAddr(address)", +"93253a9d": "PublickOffering()", +"93257d33": "CheckForFloating(address,uint256)", +"93272baf": "getTokenType(address)", +"93275889": "ChangeTax(uint16)", +"9327891e": "testSetRole()", +"932838a1": "setCell(address,uint256)", +"9328bfc1": "getNumMessages(address,address)", +"9328fa02": "capitalAllocatedTo(address)", +"9329066c": "getJackpot()", +"93299395": "revokeEditAgentAuthorization(address)", +"9329f2fe": "postico_startdate()", +"932a0ee7": "getShowTextBytes96()", +"932a7b2e": "addApp(address,address)", +"932adda2": "newNode(bytes32,bytes32,bytes32,bytes32,bytes32)", +"932ae363": "buyerNumDeals(address)", +"932bead7": "updatePlanetURL(uint256,uint256,uint256,string)", +"932c1081": "closedHour(uint8)", +"932c360d": "SpaceRegistry()", +"932c90f3": "SUPPLY_FOR_TEAM()", +"932cd73e": "tokensReleasedToTeam()", +"932db761": "profitsFromBitnationDebitCard()", +"932def2e": "tgrCurrentStage()", +"932e1c76": "distributeEbyteForETH(address[])", +"932e2e95": "_withdrawEthereum(uint256)", +"932f4588": "RaffleResult(uint256,uint256,uint256,address,address,address,uint256,bytes32)", +"932f9f89": "testThrowInvalidProvider()", +"932fad1f": "totalWageredForOutcome(uint8)", +"932fd99f": "toHighestDenomination(uint256)", +"932fec40": "refundToken(address,address,uint256)", +"9330f97f": "removeDestinationByIndex(uint256)", +"93311632": "getTokenClaim(uint256)", +"93316cdf": "selltoken(uint256)", +"9331a922": "get_layer(uint256)", +"93320f2e": "expRequiredToReachLevel(uint256)", +"93325812": "addFreelancerTotalInvoiced(address,address,uint256)", +"9332b62c": "changeAllowAllWhitelistTransfers(bool)", +"93331892": "batch(address[],uint256)", +"9333a122": "ITECH()", +"9333cf5e": "communityPeriodAmount()", +"9333d6c0": "MILL()", +"933426f5": "GoolaToken(address,address,address)", +"93348f45": "ovedclaimBountyairdropMultiple(address[],uint256)", +"9334ab61": "Infos()", +"9334ad0d": "getVersions(address,bytes32,address,bytes32)", +"9335427c": "fullWithdrawnProfit()", +"93358320": "withdrawOwnerToken(uint256)", +"9335dcb7": "ownerWallet()", +"93361078": "confirmStartWork(uint256)", +"9338cbdd": "monToTrainer(uint64)", +"93395d99": "TalksChain()", +"93399949": "GTDCStandardToken(uint256,string,uint8,string)", +"9339c01a": "validICOPurchase()", +"9339e942": "check_flag(bytes32)", +"933aa667": "isPermission(bytes4)", +"933ba413": "totalEthInWei()", +"933bf760": "extend_life_of_contract(uint256)", +"933c798c": "next_payout()", +"933dc51b": "setUint256(int256,uint256,uint256)", +"93402e17": "setRewardManger(address,address)", +"934076f1": "BetOnMatch(address)", +"9341231c": "sendOrThrow(address,uint256)", +"9341287d": "setMetadataUrlPrefix(string)", +"9341aa4e": "initializeDistribution(address)", +"9341bc00": "drones(uint256)", +"934209ce": "rank()", +"9342160b": "eligibleCheckAndIncrement(uint256,uint256)", +"93423e9c": "getAccountBalance(address)", +"934354e7": "finishSpin()", +"93437b52": "Fibremoney()", +"93439950": "test_chain2_2_increaseBlocksBy5()", +"9344a0b6": "addAddressToRegistry(address)", +"9344b0d6": "playerCompleteGames(address,uint256)", +"9344c50f": "getNameOf(address,address)", +"93465da6": "Error(uint128)", +"934689a9": "getTokenCreator(uint256)", +"93469800": "minPower_()", +"93470fa8": "listMultipleItems(uint256[],uint256,address,uint256)", +"93474a4b": "getParticNum()", +"93478221": "LogSender2(address,address)", +"934865d0": "TransactionBlocked(address,uint256)", +"9348b810": "contractorTransferFrom_Bcoupon(address,address,uint256)", +"9348caf7": "testBuyTenTokens()", +"9348cef7": "reveal(uint256,uint256)", +"9348ff61": "setUSDRaised(uint256)", +"9349ba44": "AirRopToken()", +"934a029d": "getVoteAtTxForUser(bytes32,address)", +"934a0b57": "AXXToken()", +"934aa023": "charity()", +"934bb037": "MainBank()", +"934bc29d": "exampleFunction(uint256)", +"934c563f": "dataOf(uint256,uint256)", +"934d8a2e": "TokToken()", +"934db458": "Big()", +"934e03a4": "toBool(bytes32)", +"934e860d": "addOnHold(uint256)", +"934ea572": "w_Reserv()", +"934f92af": "ZebiCoinTempMgr(address,address,address)", +"93503337": "isAllowed(bytes32,uint256)", +"9351327f": "USD_PER_ETHER()", +"935146d0": "createMatch(string,string,uint256,uint256)", +"93519d66": "requestClearing(bytes32)", +"9351a8d7": "managementWithdraw(uint256)", +"9352fad2": "run(string)", +"93545a79": "isAmountBonus()", +"93559bc6": "lifeCoin()", +"9355d6db": "MadTok()", +"9355eb25": "privilege()", +"935600ce": "subRegistrationPeriod(bytes32)", +"9356b1fe": "BWCHToken(uint256,string,string)", +"9356e87f": "getLastMulti()", +"935814a6": "confirmRewardsWithdrawal()", +"93588a14": "setTop(uint256,address,uint256,bool)", +"9358928b": "circulatingSupply()", +"93595b66": "tokenSetMintFeeReceiver(address,address,address,address)", +"935aae40": "MINIMUM_BET()", +"935b1624": "get_first_global_audit_document()", +"935b2b1f": "buyBox2()", +"935b7dbd": "buyFor(address,uint256,uint256)", +"935bb767": "setPrices(uint256,uint256,bool)", +"935c1fb1": "addressIndex(address)", +"935cac39": "internalTransferFrom(address,address,uint256)", +"935d29d6": "BPToken()", +"935d647f": "getPublicForSecretFor(bytes32)", +"935dfb71": "adjusted()", +"935e1533": "processFinishLottery(address)", +"935e97c2": "settleTransactionByMediator(uint256,uint256,uint256)", +"935eb35f": "addToBlacklist(address[])", +"935ebb78": "MAX_USD_FUNDING()", +"935eeddc": "CarUpdated(uint256)", +"935f43b2": "ipart(int128)", +"935f4c18": "sendPayment(address,uint256)", +"935fb955": "Mytoken(uint256)", +"93602379": "_transferCar(address,uint256)", +"936061cd": "claimWinner(address)", +"93608dfb": "earlySuccessTimestamp()", +"9360b138": "sendTokensTo(address[],uint256)", +"936224b8": "midEtherBonusValue()", +"93623fb8": "changeAcceptDice(bool)", +"936241b7": "hunterLicenceEarning()", +"93627f42": "globalMax()", +"9362917c": "FuckKuanLi()", +"9362e50e": "changeDeveloperSENSDestinationAddress(address)", +"936315d6": "canReveal(address)", +"93632ddd": "totalBNBContributed()", +"93634702": "isValidSignature(bytes32,address,bytes)", +"9363933c": "GizerItems()", +"9363a141": "getDepositCount()", +"9363c812": "floorPrice()", +"9363fb71": "totalFreeTokensDistributed()", +"9364003c": "HDC()", +"93643a5b": "fazzycoin()", +"936597da": "mLoadAndReturn(bool)", +"9366804f": "checkForJoin(uint256,address,uint256)", +"9366fd5c": "getEvaluationByRecorderID(uint32,uint64)", +"936710bf": "getBalanceOfAccount(address)", +"9367a863": "t_Andrey()", +"9367f8de": "SPCToken()", +"93683f3d": "changeReserveBountyRecipient(address)", +"9368f482": "_betterThan(address,address)", +"9368f72c": "burnFromToken(address,uint256)", +"93694f67": "opponent()", +"936b360d": "Tachyon(uint256,string,uint8,string)", +"936b603d": "contributorTokens()", +"936bbf9a": "totalPostIcoContributorIds()", +"936bfa40": "the120address()", +"936bfc63": "OrcERC20()", +"936c9bc9": "ICOdeadline()", +"936cfb0e": "transferInternal(address,address,uint256,bytes)", +"936d2b0f": "addProductAtId(uint256,string,uint8)", +"936e9904": "AUCoin()", +"936ec951": "afterEach()", +"936f67ea": "CryptoStorage()", +"936f8a40": "setMinBuy(uint256,uint256,uint256)", +"936fddcb": "VULCAN_PROMETHEUS_EXTRACTION_BASE()", +"93709788": "forwardManyTransaction(uint256[])", +"9370a07c": "TSVC()", +"9371c369": "applicationRejected(address,address)", +"9371de6e": "unsoldVUPDestination()", +"93720b2f": "giveAways(address,uint256,uint256)", +"93736419": "UpdateUserExpire(address,uint32)", +"9373ad6c": "inviteFinished()", +"9373b8bd": "claimAddresses(address[],uint256)", +"9373e2a1": "CircleCrowdsale(uint256,address)", +"9373f432": "setWithdrawWallet(address)", +"93741a3e": "iterate(string)", +"93742d83": "makeBet(uint8,uint8,uint8,uint8,uint8,uint8,address)", +"9374c487": "overshoot()", +"9374ec98": "whiteListMge()", +"9375206a": "setAllowed(address[],uint8,bool)", +"93762cff": "_resetMine()", +"93766a57": "trade(address,uint256,address,address,uint256,uint256,bool)", +"93768820": "isCommunityToken(address)", +"9377530f": "grandTotalClaimed()", +"93778e2d": "setCompte_6(string)", +"9378a9e2": "setUInt(uint256)", +"9378f08f": "ScamStampToken()", +"9379077f": "bookDayVisit(uint256)", +"93790f44": "getKey(address)", +"93791262": "performInit()", +"93796317": "InternationalTourismPublicChain(uint256,string,uint8,string)", +"93798ff5": "BuurmansToken()", +"9379d936": "calculateBonus(uint8,uint256,uint256)", +"937a7ac5": "moveStageWithdrawn()", +"937a9151": "WBIToken(uint256,string,string)", +"937adbe6": "isInTerm(address)", +"937b19ef": "EtherRoyalToken()", +"937b7cf1": "contractFallback(address,address,uint256,bytes)", +"937c0cdf": "priviledgedAddress()", +"937c0d0a": "aaa()", +"937c9e3c": "CandyLandSale(address)", +"937cde20": "hasPass(address)", +"937dc72f": "AppCoins()", +"937e09b1": "minimumContribution()", +"937e909b": "reservesPerTokenDest(address,uint256)", +"937ebbd2": "sendTokensToBountyOwner()", +"937ef8e3": "getUserReferralsProfit(address)", +"937f2e33": "claimMyTokens()", +"937f6e77": "setInfo(string)", +"937fd355": "initializeBasicFundraiser(uint256,uint256,uint256,address)", +"93801acb": "deleteList()", +"93806144": "getPunitoryInterest(uint256)", +"93808351": "setPriceInternal(address,uint256)", +"9380b8e7": "testFailAddingMembers()", +"93813782": "Tasoha()", +"938199a5": "getDateOfLastPayment()", +"9381da6e": "getEstateData(uint256)", +"9381e53f": "TokensCollected(address,uint256)", +"9381ebfa": "EUAHTOKEN()", +"9382ef65": "prvdWallet()", +"93830c74": "solUpDownVote(bool,uint32,address)", +"9383d4e6": "SingularityTest14()", +"93847d54": "TRLCoinSale(address)", +"9384f31e": "SingularityTest19()", +"93854494": "factHash()", +"93859188": "amount_bonus()", +"93867fb5": "roleAdmin()", +"9388b560": "TOKENS_ALLOCATED_TO_SERVUS()", +"9389c5b5": "setPackPrice(uint256,uint256,uint256)", +"938a465e": "TOKETH_PRESALE_ONE()", +"938ae4cc": "testThrowDisownNotTransferable()", +"938b5f32": "origin()", +"938b643b": "TimeToMeet()", +"938bcd67": "getChannelIdentifier(address,address)", +"938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"938d0444": "SmileToken()", +"938d2f46": "escrowDeletion(address,address,uint256)", +"938d9632": "activekey()", +"938da22d": "secondReleaseTime()", +"938db92e": "ICO_Tier()", +"938e6fcc": "MiningStart(uint256,uint256,uint256)", +"938f3cc4": "create(address,address,address,address,address,address,address,string,string)", +"938f407a": "removeFromWhitelistInternal(address,uint256)", +"938f6c5f": "getBountyTokens()", +"938f7064": "createTopic(string,string,uint256)", +"93904aae": "coinToBurn()", +"939090f8": "deposit4(address,address)", +"93911ff8": "addTrades(address[],uint256[])", +"93920e8f": "invest(address[],uint256)", +"93924147": "MoveFromBase(uint256)", +"93928c91": "thirdBonus()", +"9392e5b5": "erase(uint256,uint256)", +"93930020": "getLastConsolationPrize()", +"9393c09c": "addFabric(address,address)", +"93940e0a": "INTLToken()", +"939528b1": "transferProposalCooldown()", +"939624ab": "removeStake(uint256)", +"9396a7f0": "getQuickBuyPathLength()", +"9396df32": "advertisingPercent()", +"939729c1": "installerPercentage()", +"9397afcb": "PlayingCrypto()", +"9397f2a2": "weekOneRate()", +"939802af": "getDataForTokenId(uint256)", +"93986193": "realizedTokenBalance(address)", +"9398e0cd": "data(int256)", +"9398ecb6": "setMaxParcels(uint256)", +"939935cb": "startTimeInMinutes()", +"93997075": "AddCommitteeVoteEvent(address,address)", +"9399869d": "getContractCount()", +"9399dcfb": "PointGameProcess(address,uint256)", +"9399dd7e": "serverEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,bytes32,bytes32)", +"939a470e": "updateDescriptionHash(string)", +"939a79ac": "demo(string)", +"939a8dc1": "CryptoPepeMarketToken()", +"939b73aa": "getAthlete(uint256)", +"939b7842": "approveMigration(uint256)", +"939bfc79": "TTAC()", +"939c0a66": "AirDrop()", +"939c23b6": "setProtectionForMyUnprotectedCrypton(uint256,uint256)", +"939cda3f": "DgxDemurrageReporter(address,address,address,address)", +"939d3ac4": "sendCommunity()", +"939d8729": "_postValidatePurchase(address,uint256,uint256)", +"939de809": "checkSale()", +"939e014e": "optionTransfer(address,uint256,uint256)", +"939e436c": "weiPerContributor(address)", +"939ea4f8": "bombs(uint8)", +"939fb3bf": "Owanble()", +"93a00d27": "rektCoinCashSafe()", +"93a09352": "setValue(string)", +"93a0c742": "getIdeaParties(uint256)", +"93a0dc08": "disableAffiliate()", +"93a2f88d": "gettopid(address)", +"93a2fa6c": "Emission(uint8,uint256)", +"93a31509": "LEXToken()", +"93a32f62": "assignToken(address)", +"93a378da": "addHodlerStake(address,uint256)", +"93a408d7": "priceUSD()", +"93a422bb": "updUserBlackList(address[],address[])", +"93a45612": "SetPresaleHandler(address)", +"93a52980": "getTotalEtherPool(uint8)", +"93a595f5": "repayLoan(address,uint256)", +"93a5a9da": "resignTrustee()", +"93a69ae0": "eForecastGambleToken()", +"93a8333e": "Count()", +"93a91682": "curPrice()", +"93a91f25": "setInitialAllocation(address[],bytes32[],uint256[])", +"93a95fa8": "superPowerFulDragonOwner()", +"93a962fc": "addUndergraduate(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"93a991af": "withdrawDai(uint256)", +"93aa3014": "BarryUtilityCoin()", +"93aa5ca8": "BITNOT(bytes32)", +"93aababc": "setlockBalance(address,uint256)", +"93aacd7d": "ownerLabel()", +"93abc530": "getSubscriptionOwner(bytes32)", +"93ac3638": "setAuctionAddress(address)", +"93ac3905": "lastGateway()", +"93ac5048": "BitallexToken()", +"93ac7c83": "EVTCToken(address,uint256)", +"93adf28b": "PumpAndDump()", +"93aef871": "checkSolved()", +"93af0292": "complete(address)", +"93af339f": "cardDrawPrice()", +"93af8ed4": "maybeChangePrice()", +"93afbdae": "repriceAuctions(uint256[],uint256[],uint256[],uint256)", +"93affe51": "getBoth()", +"93b14daa": "right14(uint256)", +"93b155af": "win(bytes32)", +"93b16ff5": "IkuraBurn(address,uint256)", +"93b1d4c7": "OfferingRegistry(address)", +"93b212bc": "subWithdraw(address)", +"93b21c8c": "destroyThreshold()", +"93b2467e": "totalSold(uint256)", +"93b30efc": "doSellerRequestCancel(bytes16,address,address,uint256,uint16,uint128)", +"93b3a368": "getCorrespondingIntegerValue(bytes32,uint8,uint256)", +"93b3bb35": "VisualFodderCoin()", +"93b3cc6b": "getRandomSeed()", +"93b4a73c": "KITTOKEN()", +"93b4c69b": "_assignRole(address,bytes32,address,uint256)", +"93b557db": "dSetArbitraryData(bytes32,bytes,bytes)", +"93b69f86": "getPlayerCoin(address,address,uint256)", +"93b71fe5": "Dao1901Votes(address)", +"93b7e7cb": "addCancellation(address)", +"93b8386d": "agencyOf(address)", +"93b8e90d": "isMasterAccount(address)", +"93ba3f15": "propose(address,uint256,bytes)", +"93baa6ef": "InterfaceImplementerSet(address,bytes32,address)", +"93bb3aee": "betAddressArray(uint256)", +"93bbafd1": "earlyBirdInvestments(address)", +"93bc771a": "ceoDevfund()", +"93bc96fa": "withdrawTo(uint256)", +"93bcabb7": "pullRow(uint256)", +"93bd0142": "ETHERDELTA_ADDR()", +"93bd1484": "mintApproveClear(address,address)", +"93bd27de": "IOweYou()", +"93bd4fc4": "depositAgent(uint256,uint256,uint256,string,uint256,string)", +"93bd90c4": "richtokenIndexToApproved(uint256)", +"93be0f83": "MSPT()", +"93bebdec": "corporationContract()", +"93c0771c": "getGamesPlayers(uint256)", +"93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", +"93c19e18": "rate0()", +"93c2c7f0": "getClosingSettle(bytes32)", +"93c2f482": "maxRound()", +"93c32e06": "changeFounder(address)", +"93c38965": "getData_15()", +"93c434e5": "getOptionInfo(uint256,uint256)", +"93c4ade0": "viewMaxShares()", +"93c5186c": "isNewPrice()", +"93c573c0": "maxChequeValue()", +"93c5ace0": "walletTokenTeam()", +"93c6475c": "processBet(uint8,uint256,uint256,int256,bytes32,bytes32)", +"93c69927": "sizeOfBool()", +"93c7ca84": "countBet()", +"93c7e009": "AddTrustedContractAddress(address,address)", +"93c8b0d4": "addForeignChild(bytes32,bytes32)", +"93c92b73": "exchangeRateArray()", +"93c94acb": "calculateRewards(uint256[3][3])", +"93c958f3": "ManufactorWallet(string)", +"93c98cbc": "ApplicationQualityCoin()", +"93c9b63e": "SGTCoin(uint256)", +"93ca5de7": "CIzTezt(string)", +"93cb1a4e": "originalHash()", +"93cc6d85": "transformDataContract()", +"93cc9162": "taskRejected(uint256,uint256)", +"93cca918": "place()", +"93cd22b8": "addAdministrators(address)", +"93cddbcf": "goldToEur()", +"93ce9791": "emergencyFinalize()", +"93cfd79f": "getVisitorCount()", +"93d07d07": "hoursCount()", +"93d087a2": "setData_33(string)", +"93d0de98": "AirDropContract()", +"93d1217e": "lastBlock_v3Hash_uint256()", +"93d18e92": "processOrder(bytes32)", +"93d22e52": "setEFContract(address,address,uint256)", +"93d25fbc": "getroommoney()", +"93d3173a": "delegateDecreaseApproval(address,uint256,address)", +"93d4673f": "BTCTKN()", +"93d48b11": "zombieToken()", +"93d51daf": "amountofp3d()", +"93d5276b": "investInternal(address)", +"93d5825e": "calculateTokenSell(uint256)", +"93d5908a": "harapan(address,uint256)", +"93d5c520": "DelegateCallToken(uint256)", +"93d60990": "teamWithdraw(uint256)", +"93d68cfa": "preferredSaleStartTime()", +"93d759b8": "allowedAccount()", +"93d76f0e": "DEVELOP_CAP_PER_ROUND()", +"93d79105": "hashRelease(bytes32,bytes32)", +"93d7c6bf": "researchDivPercent()", +"93d81d58": "cancelSubscription(address)", +"93d84bf0": "oraclize_newRandomDSQuery(uint256,uint256,bytes,uint256)", +"93d865e3": "tokensFromPresale()", +"93d88409": "suspendSale()", +"93d90a4e": "HostingIcos()", +"93d91eae": "getFractionalAmount(uint256,uint256)", +"93d96049": "burn_lost()", +"93d9df16": "setCounter(int256)", +"93d9fd74": "getTitulaire_Compte_4()", +"93da1db1": "Profiterole(address,address,address)", +"93da4cfd": "getInvertedPriceInfo(address)", +"93dafba2": "getSubpot(uint256)", +"93db7716": "get_sale_arbits_sold()", +"93dc12e6": "closeProject(uint256)", +"93dd4133": "signedByCLevel(bytes32,bytes)", +"93dd738e": "notifyLegacyClaimed(address)", +"93dd9443": "Community()", +"93dd9866": "summEccles()", +"93de2527": "RegisterStaff(address,string,string,string)", +"93de6c51": "CHGUSDPRICE()", +"93dfbbcb": "setTokenExchangeRate(uint256,uint256,uint256)", +"93dfea8f": "ong()", +"93e02d13": "FallenLeaders()", +"93e1021a": "Participant()", +"93e1595d": "ATTR_CONSUMABLE()", +"93e24b7a": "teamVaultAddr()", +"93e3fca1": "stopGameOnNextRound()", +"93e40f7e": "claimedLength()", +"93e426de": "MIN_WITHDRAW_WEI()", +"93e42dfa": "_withdrawInvestor(address,uint256)", +"93e432d4": "refillGift()", +"93e43bbe": "getPost(bytes32)", +"93e4bf4f": "addPrecommitment(address,uint256,uint256)", +"93e5365f": "maxAddresses()", +"93e580ea": "storageRoot(address,uint256)", +"93e59dc1": "whitelist()", +"93e67bff": "IPFSHash()", +"93e7155b": "swapActivityHandler()", +"93e7d6c6": "createInviteName(bytes32)", +"93e84cd9": "play()", +"93e96174": "getNextDiniRequestId()", +"93e9a084": "lastTime()", +"93ea0e02": "batchTokenTransfer(address[],uint256[])", +"93eade00": "tokenAssignExchange(address,uint256,uint256)", +"93eb049d": "dp()", +"93eb33b3": "notifyDeathConfirmation()", +"93eb3c62": "Send(address,address,uint256)", +"93ed013d": "ecosystemAddr()", +"93ed4426": "extraBonus()", +"93eda78d": "getClaimData3(uint256)", +"93edaf59": "freezers(uint256)", +"93edbe36": "CHELCOIN()", +"93eeb3fb": "checkRate(address,address)", +"93eec1fb": "setName(uint8,uint8,string)", +"93efbdbb": "DPIcoWhitelist()", +"93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"93f1b685": "LuckyPackage()", +"93f27be2": "_assignOverlfowData(uint256)", +"93f2ad91": "ExtremeToken()", +"93f2ba24": "testdiv256_128By256()", +"93f2fa04": "ThingToken()", +"93f32659": "getInitialWithdraw()", +"93f33b88": "notifySale(uint256,uint256,uint256)", +"93f43863": "getEmployerJobs(address,address)", +"93f5ddf2": "ICOStarted(uint256,uint256)", +"93f63e70": "setBenefit(address)", +"93f6fd85": "createCampaign(uint256,bytes32,bytes32,bytes32)", +"93f7cc99": "getPlayerAccount(address)", +"93f826c9": "portfolioSummary(address,address)", +"93f84cfe": "mintTeam(address,uint256)", +"93f85021": "numLeaders()", +"93f8e9f7": "mediumMod()", +"93fa47f1": "lockGoldTransfers(bool)", +"93faf781": "loggedAsStatement(uint256)", +"93fb28bd": "getUnitAttackMultiplier(address,address,uint256)", +"93fc2c8b": "winnerIsDraw()", +"93fc5ebb": "_secondRoundWinnersFight()", +"93fe0237": "updateWhitelist(uint256[],bool)", +"93fe4248": "deleteUIntValue(bytes32)", +"93fea184": "CONTRIBUTIONS_MAX()", +"93fea3fc": "supportValidator(address)", +"93fea8f3": "MahamTestCoin()", +"93feb13b": "ForceSendHelper(address)", +"93ff3e4a": "insertNewUser(uint32,bytes32,address,uint256,uint256,uint256,uint32,bool)", +"93fffddc": "previousContractAddress()", +"94002b57": "goldToken()", +"940064e3": "periodPreITO_hardCapInUSD()", +"94009bbc": "powerUp(address,address,uint256)", +"940147ac": "tribeProducts(address)", +"94014dc0": "weiRaisedPreICO()", +"94018e20": "removeRoles(bytes32[],address,address)", +"9401c82b": "CAECToken()", +"9401d547": "lockExternalTransfer()", +"9401e4e7": "TokensFlushed(address,uint256)", +"94025211": "refundToOtherProcess(address,uint256)", +"9403e8dd": "casino()", +"94044c75": "_invokeTokenRecipient(address,address,uint256,uint256,uint256,uint256)", +"94056c42": "mintTRCToken(address,uint256)", +"9405b406": "ProposalManager()", +"9405c78f": "setQuantity(uint256,uint256)", +"9405de64": "checkAllowance()", +"9405dfdd": "listingId()", +"94062a9d": "minBuyingAmount()", +"94066fb1": "cancelOfferAlice(uint256)", +"9406aea9": "startCall(uint256,uint8,bytes32,bytes32)", +"9406cf59": "setChallengeFeeMultiplier(uint256)", +"9406e273": "NBELToken()", +"94074b03": "getNetworkName()", +"94077c50": "updatePriceAgent(address)", +"9407a688": "allowedForwards(bytes32)", +"9407ea98": "setMarketplaceFee(uint256)", +"94081387": "administrate(uint256)", +"940834be": "MidnightCoin()", +"940900b8": "bookOvernightVisit(uint256)", +"94097168": "burnTokenBurn(uint256)", +"9409962f": "withdrawExtraTokens(address)", +"940a4e45": "distributeReward(uint256)", +"940a6cf5": "getAdministratorCount()", +"940a82a3": "distributeCTS(address[],uint256,uint256)", +"940aa73f": "setMinimumVotingWindow(uint256)", +"940b29b2": "etherReceivers(uint256)", +"940bb344": "burnUnsoldTokens()", +"940beaf5": "getTransactionIds(bool)", +"940c154b": "lockBet(uint256)", +"940c17c0": "CROWD_WEEK4_PERIOD()", +"940d0780": "AdmChange_README(string)", +"940d553f": "FoodTransferEvent(address,address,uint256,address,uint256,uint256)", +"940d5e08": "Alpon()", +"940d72ec": "buyPack(uint8)", +"940dab4c": "prefixedHash()", +"940dbf3e": "invokeOnce()", +"940de97e": "privateSaleStartTime()", +"940df414": "claimAddress(address,uint256)", +"940ebef7": "secondsRemaining()", +"940f02e0": "setDevelopersTokensWallet(address)", +"940f0661": "PrivateLedger()", +"940f851c": "Ballot(uint8)", +"940fae9e": "confirmBoosterQuest(address)", +"9410579d": "_calculatePriceComplement(uint8)", +"94106200": "testFailCreateSameNonce()", +"94107690": "checkPurchaseRecord(address)", +"9411c88b": "TokenContract(uint256)", +"9414d0bf": "initializeUsdReceived()", +"9415931d": "getLastDividendsAmount()", +"941660e5": "getRoundMaxPerUser(uint256)", +"9416893b": "addDemoData()", +"94169f25": "preIcoTotalCollected()", +"9416b423": "toLower(string)", +"94181d27": "lastReparation()", +"94182798": "dna4(uint256)", +"9418b8a6": "closeUsingTrustedRecipient(address,address,uint256)", +"9418d25a": "proveBuy(bytes,int256)", +"94194be4": "openingTimeB()", +"9419768d": "checkBetting(uint256,address)", +"941993f8": "changeCofounderB(address)", +"9419a2da": "setPaymentDetails(uint256,string)", +"9419f17c": "decraseTimeToAction(uint256)", +"9419fd29": "getWidth(uint256)", +"941a4bc7": "getPartnerCash(uint8,address)", +"941a5074": "controllar_account()", +"941a8486": "ownerChangeSellerfee(uint256)", +"941b0161": "addMarket(uint256,uint256,uint256,uint256)", +"941da7b8": "testExpiredBalance()", +"941e98a8": "EMISSION_FOR_SALESTAGE1()", +"941f9580": "rewardKey(address,uint256)", +"94201882": "artistEmail()", +"94224066": "setCityValues(uint256[],uint256,uint256[],uint256[])", +"942273bd": "SAMURAI()", +"942324c3": "getSponsoringCount(uint32)", +"94235f77": "apLockUp(address)", +"9423719b": "tokenBonusForFirst()", +"942385eb": "getPayroll()", +"9423f443": "submitGameResults(uint256)", +"9423fc54": "transferClearingFunction(address)", +"94248eaa": "isStateProjectInProgress()", +"9425753c": "licenseProductId(uint256)", +"9426e226": "validatorSet()", +"94272356": "_setReferrer(address,address)", +"9427aa96": "getBonus(uint256,uint256)", +"9427dfea": "ownerRecoverTokens(address)", +"942802e7": "VULCAN_POD_FTL_SPEED()", +"94282357": "EFASCOIN()", +"9428522a": "getNode(string)", +"9429d441": "reclaimBySender(uint256,address,address,bytes32)", +"942a8ad3": "getAQL(address)", +"942ab177": "MintToggle(bool)", +"942ab286": "buyTicket(uint256[],address,uint256,uint256)", +"942ac303": "goalInEthers()", +"942ae0a7": "renderHelloWorld()", +"942b765a": "getList()", +"942b90d3": "getRewardTable()", +"942bc8d4": "unpauseAngelToken()", +"942d468b": "transferArray(address[],uint256[])", +"942d73b1": "readAddr()", +"942dac28": "amounRefferalWon()", +"942ea466": "getNumber(address)", +"942ff8fc": "inituser(address,uint256)", +"94306ecb": "AutoreleaseDelayed()", +"94313c5b": "getPositionOwedAmount(bytes32)", +"94313f9f": "cleanConsents(bytes32[],address[])", +"943153cf": "StonePaper()", +"9431e412": "getCommunityRates(uint256)", +"9431f5f0": "withdrawFees(bytes)", +"943215ae": "investmentFundWallet()", +"943250c4": "SquirtCoin()", +"9432c92c": "setStartTimeIcoStage1(uint256)", +"9432f0c7": "receiveClosePositionPayout(bytes32,uint256,address,address,address,uint256,uint256,bool)", +"9433a498": "totalFountainSupply()", +"9433a81e": "personIndexToApproved(uint256)", +"9434c981": "createNewMartial(uint256,uint256,uint256)", +"9434d765": "allocated12Months()", +"94353c70": "postMonForClass(uint64,uint32)", +"9435c887": "cancelBid()", +"9437563c": "logPriceBefore()", +"943814f0": "getWhitepaperAt(address,uint256)", +"9438cca8": "cancelEscrow(uint256,uint256)", +"9439060f": "getGameNumber(uint256)", +"943911bc": "getWorseOffer(uint256)", +"943a32bc": "Relay(address)", +"943a5e28": "RENEX_ATOMIC_SETTLEMENT_ID()", +"943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", +"943b82f1": "getLimit(uint16)", +"943bd25d": "addNewBetAmount(uint256)", +"943dfef1": "bounty()", +"943e170d": "neededSignatures()", +"943e8216": "vote(uint256,uint8)", +"943eb504": "supplyLocked()", +"943fa364": "MPhoneSeller()", +"943fcc9d": "buyRoseETH(string)", +"943fd51c": "claim2Ply(uint64,uint64,uint64,uint64)", +"9440f01f": "buyCoins(address,uint256)", +"9441268b": "updateGlobalTokenAge()", +"944126f4": "acceptSupport()", +"94412943": "bountyOf(address)", +"9441e646": "addWhiteList(address,address)", +"9442936f": "d(address,address,uint256)", +"94429fa6": "withDrawAnyERC20Token(address,uint256)", +"9442fad9": "deployTokens(uint256[],address[])", +"94431f80": "getAvailableEtherCommissions()", +"94432deb": "fairsale_protection()", +"944358e0": "getContributedAmountInWei(address)", +"9443b9be": "TokenTimeLock(address)", +"9444991d": "getVotingListCount()", +"9445eb3a": "Terminate()", +"94465bf6": "adjustDuration(uint256)", +"94477104": "vestedOf(address)", +"9447fd0a": "until()", +"9448807a": "secondPay()", +"9448bcea": "getPlayerRoundNums(uint256,address)", +"94493c43": "getLockCount()", +"94495468": "totalTokenRice()", +"9449a361": "setStakeRequirements(uint256,uint256)", +"944a1a75": "CELION()", +"944abc22": "_updateCurrentPeriod()", +"944ac0c6": "MAIN_SALE_START_TIME()", +"944af2ae": "TegTokens(uint256,string,string)", +"944b7c3f": "getMaxNumberOfTokens()", +"944c1d97": "resetPeriod()", +"944c8929": "checkBeatingPrice(uint256,bool)", +"944d4505": "IqraChishti()", +"944da654": "editModule(uint256,uint256,address,bytes4)", +"944dc22c": "addRemovableIdArrayItem(address,uint256[],string,string,string,uint256)", +"944ea02d": "checkTokenBalanceState(address)", +"944ea477": "OPERATION_AMOUNT()", +"944f0499": "transferTokensFromTeamAddress2(address,uint256)", +"944f0e64": "tokenInfoParametersReady()", +"9450b1c8": "addCharityFundation(string,string,string)", +"9451bca7": "result_votes()", +"9451f865": "TestConf()", +"94525e12": "lowRate()", +"94532ced": "blockSettle(uint64,uint64,bytes)", +"9453b95d": "addOrUpdateAccounts(address[],uint256[],uint256[])", +"9453f381": "getBeneficiaryCash(address)", +"9453f767": "createOrder(string,address)", +"94543c15": "isDeprecated(address)", +"94544e64": "transferFeePercent()", +"94555d1a": "addSubscriber(address)", +"94558862": "setRewardClaimed(address,uint256)", +"9455924f": "getTotalVolumeToken(address)", +"94566d25": "jobPost()", +"9456e5b5": "stockSet()", +"9456f7e9": "getHashByTokenId(uint256)", +"9456fbcc": "withdrawERC20(address,address)", +"94579680": "changeUserGrowthAddress(address)", +"9457c1dc": "enableMigration(address)", +"9457c68a": "forceEndCall()", +"9458434f": "mainWeiRaised()", +"94594625": "distributeAirdrop(address[],uint256)", +"9459c254": "refund(address,string,uint256,uint256,uint256)", +"945a2555": "queryPermissions(address)", +"945aab47": "tokenSaleCap()", +"945ade92": "initialDate()", +"945c6cf8": "burn_all_unsold()", +"945c7438": "sign(address,int256)", +"945c7c59": "distributeTokenSale(uint256,uint256,uint256,uint256)", +"945d7b7e": "tranchesSent()", +"945ddb52": "mainSaleTotalSupply()", +"945e5f24": "roughSupply()", +"94602869": "receiverWithdrawal(uint256)", +"9461446d": "setProcessingFee(uint256)", +"94615fc1": "setFreezingStatus(uint8)", +"946267ec": "mintComplete(uint256,int256)", +"9462eae5": "ChangeContractor(address)", +"9462f02f": "tactics(uint256)", +"9462f4bc": "bytarr(bytes32[])", +"94636cee": "createPromoMonster(uint32,bytes,address)", +"9463d582": "teamOneWin()", +"94642f96": "investorWhiteList(address)", +"94644764": "lookUpClaimerAddress(uint256,address)", +"94650fb8": "Goal()", +"94655f2b": "printMoney()", +"94658690": "parseUserInivte(uint256,uint256)", +"9465c114": "vanishToken(uint256)", +"946644cd": "fun()", +"94679ce7": "changeEtherPrice(uint256)", +"946941ec": "Contribute(bytes24)", +"946a893d": "shopDoublet()", +"946ad94d": "tokenContractEnableTransfers(bool)", +"946ae8df": "FMGHEALTHCARE()", +"946ba496": "ShishuToken(uint256,string,string)", +"946bcc30": "getFounder()", +"946bf4d7": "winningProject()", +"946c0344": "getChallenges(uint256)", +"946ca295": "userTransfer(address,uint256)", +"946d1480": "ethToUsd(uint256)", +"946d8806": "getMyPacifist()", +"946d9204": "initialize(address,address[])", +"946f8876": "updateTierStatus(uint256,uint256)", +"94704818": "fillOrder(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,uint256,bytes)", +"94705167": "enableArbiter(address)", +"94707a95": "_setRate(uint256)", +"9470b0bd": "withdrawFrom(address,uint256)", +"94727b41": "deleteProduct(bytes32)", +"9472b32c": "sale_period()", +"9472eb76": "setPayerString(string)", +"947355df": "addToList(string,address[])", +"94737987": "referralProgram(bool,uint256)", +"94741017": "failCrowdsale()", +"94756e22": "VikoChain(string,string,address)", +"94759c36": "createQuote(uint256,uint256,bytes32)", +"9476760d": "AthletiCoin(address,address)", +"947721dd": "refundEndDate()", +"947846a4": "RefundableCrowdsale(uint256)", +"9478a7c9": "getReferralOf(address)", +"9478ab8c": "ethUsdPrice()", +"9478ba47": "calcUnclaimedFees(uint256)", +"9478f7cf": "_receiveEth()", +"9479a732": "sell_car(uint256)", +"9479f2c7": "STAKE_DEADLINE()", +"947a3168": "token_name()", +"947a36fb": "interval()", +"947aca55": "addMasterAccount(address)", +"947af462": "setBurnRequestAddressMap(uint256,string,address)", +"947bc72d": "MAX_TRANSFER_TIMSPAN()", +"947bd798": "rawManuallyMintTokens(address,uint256)", +"947cbc1e": "dariatest()", +"947e8a26": "TOKEN_MINTING()", +"947f7d1d": "newRandom()", +"947f8ede": "IcoCapChanged(address,uint256)", +"947f97cc": "getUnsoldTokens(uint256)", +"947f996d": "testGreatherThan()", +"947fd341": "getCoefficientMultiplier(string,string,string)", +"9480cd1a": "getPillarRoundsKitties(uint8,uint256)", +"94828ee8": "DelightToken()", +"94836dab": "sendFounders()", +"9483e91a": "withdraw(address,uint256,bytes,uint256)", +"9483f25c": "updateProfile(string,string,string,string)", +"948623dd": "buy(address,bytes,bytes32)", +"94868f7d": "airDropPayableTag()", +"948759d5": "transfermulti(address[],uint256[])", +"94876995": "isHandleAvailable(bytes32)", +"9489fa84": "calcSharePrice()", +"948a70d7": "SingularityTest16()", +"948b557a": "getDispute()", +"948b6790": "getTokensPrice(uint256,bool)", +"948bc5d6": "XfinityUtility()", +"948cd942": "getDronePot()", +"948cfd0c": "updateBootyBase(address)", +"948d902d": "getTokensByETH(uint256)", +"948e1a1c": "AVAILABLE_TOKENS()", +"948f1daa": "mintLockPeriod(address,uint256,uint256)", +"948f5076": "setCache(address)", +"949076b6": "ensureInterval()", +"94910d60": "createContract(address,address,uint256,string)", +"9491a8eb": "updatemktValue(uint256)", +"949201d7": "LOG_FailedSend(address,uint256)", +"94923fd7": "LogRevokeNotice(bytes32,address,uint256)", +"9492fbf7": "BGS()", +"94930138": "getLoanUnavailableAmount(bytes32)", +"949319b1": "verifyService(address)", +"9493242c": "returnLender(uint256)", +"9493ac07": "setBattleFee(uint256)", +"9493b9b0": "createMiner()", +"9493f012": "batchSafeTransferFrom(uint256[],address,address)", +"949430f0": "BTC_SUISSE_TIER_1()", +"94953294": "downTheDrain()", +"94954967": "setMaxWhitelistLengthInternal(uint256)", +"9495ad6c": "listExists(bytes32)", +"9495f8c6": "upgradableState()", +"9496df3f": "freezeQuorumPercent()", +"94974aea": "unlockedAtBlockNumber()", +"9497b7a1": "yearlyTeamAmount()", +"9498a265": "updateCertifier(address,address)", +"9498bef5": "overloadedMethod(address,uint256)", +"9498fb26": "ELIX()", +"94992b76": "ICOSTART()", +"94993e52": "_breedWith(uint256,uint256,address)", +"94996680": "setStartTimeStamp(uint256)", +"9499e018": "destructContract()", +"949a6868": "RefundTicket(address,uint256)", +"949a9d59": "receiveWithData(bytes)", +"949b56ef": "whitelistPrincipleLockPeriod()", +"949b9e10": "createHumanStandardToken(address[],uint256[],string,uint8,string)", +"949ba7c3": "GNCCrowdsale(address,address,address)", +"949c5099": "isAwaitingPRETDETokens(address)", +"949c89a0": "BitBaBeToken()", +"949cc9ea": "tokenSupplyBackedByGold()", +"949cfc64": "restTime(address)", +"949d225d": "size()", +"949db658": "rateProvider()", +"949dcdab": "forceWithDrawToInviter(address,uint256)", +"949dfa63": "calculatePurchaseReturn(uint256,uint256,uint8,uint256)", +"949e8acd": "myTokens()", +"949eabff": "fundsRaisedInWei()", +"949eb1c6": "bankersLimit()", +"949f80b0": "RandomExample()", +"949f80c5": "getResult(uint256,uint256)", +"94a08c69": "TOTALSUPPLY()", +"94a0b878": "fromTileId(uint16)", +"94a0c1cc": "cancelVoteForCandidateBySnapshotBlock(address,uint256,uint256)", +"94a1710d": "testNonOwnerCantBreach()", +"94a1be9c": "addVotes(uint256)", +"94a1d75c": "withdrawBidForSketch(uint256)", +"94a224c0": "withdrawExpenses()", +"94a2301e": "tokensInEth()", +"94a535fc": "TokenAdd(uint256,address)", +"94a53d41": "minimal()", +"94a5601a": "getMaxCap(address)", +"94a5c2e4": "maxValue()", +"94a5cccb": "deposit_period(uint256)", +"94a66da2": "GamePlayerCoin()", +"94a66df3": "objectGloves()", +"94a74249": "panicked()", +"94a754e0": "resolveChallenge(uint256,bool)", +"94a771d7": "getReportTimestamp()", +"94a7ef15": "addWhitelistAddress(address)", +"94a80dd9": "getPoolValue(uint256)", +"94a82671": "unRegister(address,string,address)", +"94a89233": "isPluginInterface()", +"94aa6775": "newDeposit(address,address,uint256)", +"94aa8174": "AddParticipant(address,address,string,uint8,string,string,bytes32)", +"94ab9608": "XRRtoken()", +"94abbeaf": "PieToken()", +"94ad4f89": "icoDays()", +"94ae2341": "exchangeHelenium(uint256)", +"94ae4899": "onMintCalled(int256)", +"94ae7ac3": "allowanceAdd(address,uint256)", +"94aef022": "getVariables()", +"94af9da8": "createNewCombination(address)", +"94b0780f": "burntokens(uint256)", +"94b2ffc0": "StarterCoin(uint256,address)", +"94b31fbd": "getTokenAllowance(address,address,address)", +"94b367a3": "_takeOwnership(uint256,address)", +"94b44f3e": "addressToBlock(address[],bool)", +"94b4c93d": "MomentalyOwned()", +"94b5255b": "distributePreBuyersRewards(address[],uint256[])", +"94b5c9f3": "getChampReward(uint256)", +"94b5ed6d": "minorOwnerShares()", +"94b66386": "attackIsland(uint256,uint256)", +"94b67b1c": "getWeakenedDefensePower(uint256)", +"94b8896c": "holdAddress2()", +"94b8e58e": "resetWith(address,address)", +"94b8e72a": "Allocate(address,address,uint256,uint256,bool)", +"94b918de": "swap(uint256)", +"94b91deb": "construct()", +"94b91f06": "PARTNERS()", +"94b941db": "investorInfo(uint256)", +"94b9b62f": "getPacifistmasterReq()", +"94b9bdc4": "BlueDiamond()", +"94b9f152": "cancelConversion(uint256)", +"94bab061": "getVersionNo(bytes)", +"94bacfef": "distributeVLD(address[],uint256,uint256)", +"94bb136f": "minFinnRequired()", +"94bb7d64": "itemHistoryOfPlayer(uint256,address)", +"94bbfb56": "changeAffiliatePercentage(uint256)", +"94bc7df4": "BlocksToGo()", +"94bcdb4c": "Example2()", +"94bd5cb6": "newParityOwner()", +"94bdb93b": "MessageAdded(address,string,uint256)", +"94be2423": "setAtomGen(uint256,uint8)", +"94beb9b2": "ConstructBitcoinClue(bytes32,bytes32,bytes32,bytes32)", +"94bf804d": "mint(uint256,address)", +"94bf8862": "numBoards()", +"94c06a58": "descending()", +"94c0ac22": "ExchangeZWCToToken(address,address,uint256)", +"94c0f3e2": "PRESALE_PERCENTAGE_5()", +"94c176e4": "distributeAll(uint256)", +"94c19fb8": "LogSaleClosed(uint256,uint256)", +"94c1d810": "partFromProvider(uint256,address)", +"94c21ff3": "STATEMENT_HASH()", +"94c275ad": "maxConversionFee()", +"94c33163": "getTotalTokensSold()", +"94c33d90": "districtToBuildings(uint256,uint256)", +"94c3fa2e": "getLastBlockHashUsed()", +"94c41bdb": "getPreferedQtySold()", +"94c467d0": "banAuditor(address)", +"94c475ec": "setAltDeposits(uint256)", +"94c4e3c6": "_getVolumeBonus(uint256,uint256)", +"94c6116f": "getNextPeriodTimestamp()", +"94c62fb5": "SPARCPresale()", +"94c64a2e": "updateBtcRate(string,string)", +"94c69715": "bonusInPhase3()", +"94c70cb1": "bonusEnd20()", +"94c77969": "setTokenContract(address,uint8[],bytes32[],bytes32[])", +"94c87a84": "withrawAllEthOnContract()", +"94c89af5": "FeeProvider()", +"94c8cd62": "AreebaCoin()", +"94c90cac": "EliteCoin()", +"94c9b647": "sendTransaction(address,uint256,int256)", +"94ca9f90": "highestBalance()", +"94cace04": "enableMix()", +"94cb0947": "availableTokens(address)", +"94cc0898": "___test()", +"94ccbc1f": "transferPattern(bytes32,address,string,uint8,bytes32,bytes32)", +"94cdbea1": "SetDappinfo(string,address,address,string,string)", +"94cddaf1": "unlockTeamAndReserveTokens()", +"94cec87b": "preSale3Finished()", +"94cf9b1b": "FGCToken()", +"94cfb3d8": "getItemTempHolders(uint256)", +"94d0025e": "getNumberOfOpenSteps()", +"94d008ef": "mint(address,uint256,bytes)", +"94d02fff": "Authored(string,string,uint8,uint256)", +"94d036bf": "validInitialBuyoutPrice(uint256,uint256)", +"94d10c41": "spendUserBalance(uint32,uint64)", +"94d127a8": "calculateSeedBuy(uint256,uint256)", +"94d1330d": "spinnerCounts(uint256)", +"94d1b7e8": "triggerFailFlags()", +"94d26cb5": "getBetterOrderId(bytes32)", +"94d2b21b": "unauthorizedAddress()", +"94d2bdfe": "addSkill(bytes32)", +"94d2ca12": "getByAlias(bytes32)", +"94d2d7a7": "getCreatorAddress()", +"94d3d38d": "registerHello(bool,uint8,int64,int64,string,string)", +"94d3de83": "TeamVesting(address)", +"94d44f12": "createBattle(uint256)", +"94d453db": "MIN_INVESTMENT_PHASE1()", +"94d45856": "placeBet(bytes32,bytes32,bytes32)", +"94d54581": "EICQERC20()", +"94d5539d": "transferLocked(address,uint256,uint256,uint256[])", +"94d63afd": "left3(uint256)", +"94d645a8": "resolveClaim(address)", +"94d702a4": "tgeNextPartInvestor()", +"94d762c3": "Vault(address)", +"94d77363": "getTokenSold()", +"94d95f8f": "MAX_CONTRIBUTION()", +"94d96fa1": "BTC7200on420()", +"94d9c9c7": "setObserver(address)", +"94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", +"94da0746": "PRESALE_TOKEN_ALLOCATION()", +"94dafb16": "geteam(address)", +"94db4d05": "changeStakingContract(address)", +"94dba872": "o_automata(uint256)", +"94dbc70e": "lockState(address)", +"94dbe74e": "removeEscrow(address,address,uint256)", +"94dc6f6b": "splitShares(uint256)", +"94dc7cec": "minBuyForPrize_()", +"94dc84ca": "AUTH_INITCONGRESS()", +"94ddc8c0": "submitBallot(bool)", +"94de3825": "_transferToAnotherAddr(address,uint256,bytes32)", +"94df682d": "loginVerify(bytes32)", +"94dfd38a": "test_invalidValue1EqValue2()", +"94e08fc2": "addProduct(bytes32,uint8,uint8)", +"94e09511": "sendTokenToPlatform(uint256)", +"94e0d371": "stage3()", +"94e0e328": "torchRunner()", +"94e0f844": "totalSellOrdersOf(address)", +"94e10784": "_getRate()", +"94e16386": "teammatesworld(address)", +"94e21fa0": "multiPay(address[],uint256[],address)", +"94e25c37": "unlockCustomer(address)", +"94e2662f": "setRequireWhitelistingBeforeDeposit(bool)", +"94e47e61": "create_block()", +"94e4a822": "split(address[])", +"94e4c808": "IPFSStore()", +"94e50e7a": "getSigner(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"94e5b7e6": "getPlace(uint32)", +"94e5e890": "peculOldAdress()", +"94e8075d": "Development()", +"94e8767d": "uintToBytes(uint256)", +"94e93017": "_deployBallot(bytes32,bytes32,bytes32,uint256,bool,bool)", +"94ea9987": "sendEthersToWinnerAddress(address,uint256)", +"94eb463b": "Unset(address,uint32[])", +"94eba0b5": "StarCoin()", +"94ebd374": "purchaseAccessory(uint256,uint256,string,uint256)", +"94ec233f": "boolCallWithArray(bool,bool[4])", +"94ec3756": "resister(uint8,uint256,uint256)", +"94ec3a0d": "playersRequired()", +"94ec7cf2": "setA_Signature(int256)", +"94ed9b77": "append(address,address)", +"94eedaa4": "hirerReleaseFunds(bytes16,address,address,uint256,uint256)", +"94ef987e": "minimumPayment()", +"94efadea": "zoPrice()", +"94efafe9": "publishTemplate()", +"94effa14": "WithdrawETH(uint256)", +"94f0080c": "getBalancePremiumsPaid(address)", +"94f0b43c": "TripusCandyToken()", +"94f13f4a": "getGameItem(uint256)", +"94f183cb": "get_votes()", +"94f188be": "createIssuedToken(address[],uint256[],uint256,uint256,string,uint8,string)", +"94f29cb3": "medalIfFreeze(address)", +"94f2e623": "setLLV_edit_11(string)", +"94f2ed53": "_unlockNinja(uint256,uint16)", +"94f3217c": "MINIMUMINVESTMENTSALE()", +"94f38799": "GoChain()", +"94f3f81d": "removeAuthorization(address)", +"94f47146": "put(bytes)", +"94f5a1af": "LATOPreICO()", +"94f5ffd5": "betMake(uint256,uint8)", +"94f60a63": "getKudosLeft(address)", +"94f61134": "executeOrder(uint256)", +"94f649dd": "getDeposits(address)", +"94f6ba1c": "getMonsterClassBasic(uint32)", +"94f6e8ed": "initBallotProxy(uint8,bytes32,bytes32,bytes32[4])", +"94f75b96": "PerkToken()", +"94f7624f": "NAP()", +"94f8e954": "cancelInvestment()", +"94f92322": "getTotalPrediction(uint256,uint256)", +"94f976c3": "confirmProduct(uint256)", +"94fa3131": "claimBonus(uint16)", +"94fa5bcd": "setNewApproves()", +"94fabfb3": "getDocData(uint256)", +"94fb54d5": "euroThreshold(uint256)", +"94fb86c0": "referral_ledger()", +"94fd1c1c": "SAIToken(address,address,address)", +"94fdb8df": "HolyBible(uint16,uint16,uint16,uint16)", +"94fdbbb2": "createRedeemMessageHash(uint256,bytes4,bytes32,bytes32)", +"94fe344d": "SimpleToken(uint256,string,uint8,string,bool,bool)", +"94fe6ed1": "kTikTakCoin()", +"94ff1426": "_setTransmuterAddress(address)", +"94ff4b2b": "getServerFee(uint256)", +"94ffb819": "addApprover(address,string)", +"94ffe2c7": "PolicyRegistry(address)", +"95005a00": "LIANGToken()", +"95005b8b": "GetPlayerID(bytes32)", +"9500aa12": "MockController(address,address,address,address)", +"950108d7": "WithdrawForeign(address)", +"95029f34": "PendingOwner()", +"9502bb8a": "renounceMaster()", +"9502d761": "ProposalSubmitted(address,uint256)", +"950311ab": "setCurrentAction(uint256,uint8)", +"95032b62": "rand(uint256,uint256)", +"9503c4b4": "SmartRouletteToken()", +"95040933": "mrk_contract()", +"950463fc": "calculateRefundedEthWithDiscount(uint256)", +"9504f28a": "THBCToken()", +"95050862": "optimalExp(uint256)", +"95059465": "textFor(bytes32)", +"9505b2a7": "createPanda(uint256[2],uint256,uint256)", +"9506681f": "updateminContribution(uint256)", +"95066e33": "getTopic()", +"95068886": "change(address,uint256,address,uint256)", +"95069136": "requestLiquidation(uint256)", +"9506a57a": "Marriage(address)", +"9506a75c": "setChild(address,bytes32,bytes32,bool)", +"9507b53a": "SchedulableToken(address,uint256,uint256)", +"9507d39a": "get(uint256)", +"9508614b": "addStage()", +"9509a265": "allocateDividends()", +"9509ba0c": "getJackpotBalance()", +"950b5273": "currentARXtokenSupply()", +"950b550a": "fourth_withdrawal(uint256)", +"950c004d": "PiXD2019()", +"950c3d79": "LizunToken()", +"950c84e4": "presalePart()", +"950cb89e": "_editPriceOf(uint256,uint256,uint256)", +"950d22f2": "setCheckKYC(bool)", +"950da0c8": "calculation()", +"950da0e6": "hasMinRating(address,address,uint8)", +"950dad19": "burnToken(address)", +"950dff20": "cancelCodeUpdate()", +"950ef8c7": "setAuthorityContractAddress(address)", +"950f4170": "gubbermentOverthrown()", +"950f9813": "rejectPartnerAllocation(address)", +"950fabf3": "Lottery(uint256)", +"95101181": "removeAdminAddress(address)", +"9511309a": "setMinimumCollateralInEthAmount(uint256)", +"951166c0": "totalMessages()", +"9512243e": "TokenPurchase(address,address,uint256,uint256,uint256,uint256,uint256)", +"95127634": "upgradeOracle(address)", +"951303f5": "withdrawableAmount()", +"951367ad": "internalExchange(uint256)", +"951382bf": "mainSaleHasEnded()", +"95139780": "checkTokTotal()", +"951481b4": "addEmployee(uint256,uint256,string)", +"951506d3": "withdrawFeeRateE4()", +"9515a524": "BUSINESS_DEVELOPMENT_SUPPLY_LIMIT()", +"9515af55": "AetherClockAuction(address,uint256)", +"95163f39": "_finalizeStage()", +"9516a104": "getAllAddresses()", +"951717e2": "withdrawPrivateCoinByMan(address,uint256)", +"9518589a": "cost1token()", +"95199b24": "claimWin(bytes32,uint8,bytes32,bytes32)", +"9519e398": "aDeposit(uint256)", +"951b01c5": "setCertifierDb(address)", +"951b22fb": "swap(uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"951b26a3": "changeable()", +"951b73b1": "updateEndTimeManually(uint256)", +"951cfa47": "getScope()", +"951d0332": "_price_tokn_ICO1()", +"951d6c9c": "getDevRewardPercent()", +"951d86a4": "setBlockPerHour(uint256)", +"951e17a1": "totalSupplyForDivision()", +"951ea5f1": "setMarketingTokensPercent(uint256)", +"951f4a6e": "_triggerNFTEvent(address,address,uint256)", +"95206396": "numberLoop()", +"9520a06f": "DEFAULT_CREATION_LIMIT()", +"9520bd46": "multiPay(address[],uint256[])", +"9520cc72": "EtherTradex()", +"9520f878": "NaxomartToken()", +"9521000c": "setOnlyShowPurchased(bool)", +"95210e59": "setBattleRemoveContractAddress(address,address)", +"95217ec9": "newAttack(uint32[])", +"9522ca89": "Message_To_Investors()", +"9524bdf8": "_refundTokenCustomer(uint256,uint256)", +"9525c0cc": "cancelVote(bytes32)", +"9525f382": "finalizeSettingCreation(uint256)", +"95260a29": "PEP()", +"95263183": "setACmarge(uint8)", +"95270cd1": "setOraclizeFee(uint256)", +"95275e5e": "minerLockTime()", +"95286077": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_SHA512()", +"952868b5": "onMaintenance()", +"9528724f": "votedFreeze()", +"952882fd": "addtoEarlyInvestors(address,address,uint256,uint256)", +"9528a278": "getAllInvestorPositions()", +"9528d109": "authorSigned(address)", +"9528fcb5": "numSubscribed()", +"952a84ed": "Rocketship()", +"952a9320": "HexanCoin(uint256,string,uint8,string)", +"952ad7cb": "forwardSomeFunds(uint256)", +"952b264c": "FundsReleased(uint256)", +"952c0f9f": "initGold()", +"952d6c22": "tokenSaleEnd()", +"952f2f6f": "setAccountIsFrozenByDate(address,uint256)", +"95306706": "logTraderTradingTx(string[])", +"953078cd": "withdrawDivsWithContract(address)", +"95311142": "dOwnerErc20Claim(bytes32)", +"9531c536": "ReceivedGBP(address,uint256)", +"9531d072": "refundETH(uint256)", +"953203b5": "doMigration(address)", +"9532c476": "setParcelUsd(uint256)", +"953307d8": "revealScissors(string)", +"95331bf7": "commitPhases()", +"95334db2": "toIndex(address)", +"953440f9": "nCeilings()", +"9534e637": "closePoll(uint256)", +"9535ce12": "getBool(string)", +"95360a02": "calCurrentCrystals(address)", +"95364a84": "isPresale()", +"953669be": "tokenHolders()", +"9536c05f": "doCheckSendBounds()", +"9536e0bb": "returnDirectPayments(address,bool,bool)", +"9537796f": "addSubscriptionBonus(address)", +"95377ad9": "testInequalityUint(int256)", +"9537e8d1": "signContract(uint256)", +"9538833c": "changeOwnerAccept()", +"9539c4de": "withheldAmount(address,address)", +"9539ed7e": "changeFlipper(address)", +"953a03ca": "minMillPurchase()", +"953a7fab": "testMoveBalance()", +"953aa435": "GetPrice(uint8)", +"953b42b3": "buyClusterToken()", +"953b7ef8": "withdrawTeamTokens()", +"953b8fb8": "targetAmount()", +"953bad32": "verificationAddressMap(address)", +"953e3450": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"953e474a": "setKoCommissionAccount(address)", +"954056f7": "setRedemptionWallet(address)", +"9540cb80": "End1()", +"9541945a": "registerNode(bytes16,uint16)", +"9541bc41": "getUSDAmount(uint256)", +"954290f4": "guessPassword(address,uint256,bool)", +"95437056": "AUTH_ADDOWNER()", +"95438548": "DONATION_RATE()", +"95441f9f": "ZEEWANTtoken()", +"95449ad5": "changeTimeInvest(uint256)", +"9545c42c": "minForExistingTopic()", +"95470497": "OTHERCRUISER_EXTRACTION_BASE()", +"95475c1f": "makeChild()", +"9547b44d": "Prepurchased(address,uint256,uint256)", +"95480879": "setDefaultMetadataURI(string)", +"9549355e": "oracalizeReading(uint256)", +"954969f6": "godSetInterfaceContract(address)", +"9549c330": "freezeFrom(address,uint256)", +"9549fea9": "MENSA(address)", +"954a5c19": "addPot()", +"954a8f8b": "TransferWithRef(address,address,uint256,uint256)", +"954ab4b2": "say()", +"954b2be9": "SelflleryYouToken()", +"954cbe3f": "mintSpecial(string,string,uint8,uint256,uint256)", +"954d2cfd": "updateUrl(address,bytes32[5])", +"954db474": "newProject(string,string,uint256)", +"954e8c2d": "buyShares(uint256,address,uint256,uint256)", +"954f3b20": "getTransferHash(address,address,uint256,uint256,uint256)", +"954ff2ad": "founderTokenWallet()", +"9550c023": "AllocationRevoked(address,address,uint256)", +"9551dd58": "listener()", +"955214d1": "LogRecordWin(address,uint256)", +"95522e54": "WeaponTokenize()", +"95523f7d": "newMember(string,uint256)", +"95533f17": "isTokenInList(address)", +"95534e00": "getAccountBlocks(address)", +"95535569": "LianBaoCoin()", +"9553652b": "Goldencloudtoken()", +"9553a19b": "BrengsTeamToken()", +"95543693": "ONE_DECIMAL_QUANTUM_ANZ_TOKEN_PRICE()", +"9554a202": "changeSwapperAdd(address)", +"9554c8e5": "getCrydrStorageAddress()", +"9554f920": "fillChannel(uint256)", +"9554fa12": "multiplies(uint256,uint256)", +"9555a942": "withdrawFrom(address,address,uint256)", +"9555c9d9": "capAdjusted()", +"95564837": "seed(uint256)", +"9556a31d": "GVOptionToken(address,string,string,uint256)", +"9556b05d": "OraclePoloniex()", +"95578ebd": "useDELEGATECALL()", +"95579063": "_bidderHasAnActiveBid(address,uint256,address)", +"9558abde": "sycCrowdsale()", +"9558e916": "teamWithdrawalRecipient()", +"9559225c": "debug_hash3Byte(bytes)", +"955b1535": "checkForNewLeader(uint256)", +"955b5e72": "CTCToken()", +"955d14cd": "getLastTime()", +"955d1721": "availableBalanceInLockingPeriodForInvestor(address)", +"955d4412": "addLocation(uint256)", +"955d4d16": "Wixlar()", +"955d50b7": "TestMasterToken(uint256,string,string)", +"955ef429": "closedown()", +"955f0460": "sgpc(uint256)", +"955ff603": "Viviox()", +"95607ced": "retrieveAll()", +"95608083": "_abortCurrentRound()", +"95612ec0": "allowInvestment()", +"95617dc3": "reportGame(string,uint8,bytes32,bytes32)", +"9561a038": "nextContributorIndex()", +"9561f0d8": "setTradingLive()", +"95621ccd": "theBet(uint256,uint256,uint256)", +"95623641": "marketAddress()", +"956248aa": "determinePayout(uint8,uint8,uint8)", +"95635b37": "addMiner(address,uint256,uint256)", +"9563dbcf": "setPeriods(uint256)", +"95645e34": "initialDistribution()", +"956483c1": "lastBlock_f14Hash_uint256()", +"95648f1b": "getFunctions()", +"95652e4f": "revokeAuthority(address,uint256)", +"95655f04": "getWilds(address)", +"9565f2fe": "AllCash()", +"9565feeb": "isBonusPeriod()", +"9566880b": "s16(bytes1)", +"95669952": "debtor(address,uint256)", +"95671958": "getFileListTail()", +"95671ed7": "logEvent(string,bool)", +"9567a161": "newBet()", +"95693aad": "CompositCoinCrowdsale(uint256)", +"956a2d03": "balance(bytes32,string,address)", +"956a2ea7": "setBidRegistry(address)", +"956a538a": "CoinsRemainAfterICO()", +"956a860d": "getMartialInfo(uint256)", +"956ab5d9": "getParetoBalance(address,address)", +"956b76f7": "setVicepresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"956cc859": "INIT_SUPPLY()", +"956d2172": "setAttackFee(uint256)", +"956e5f00": "LogEtheraffleChange(address,address,uint256)", +"956e958a": "dungeons(uint256)", +"956f4361": "getCampaignsByCountry(string)", +"956fd9df": "balanceOfPlayers(address)", +"956fffd3": "setFinishICO(uint256)", +"95701be3": "rolloverFeePeriodIfElapsed()", +"9570370f": "bondsOf(address)", +"95709441": "mintReputation(int256,uint256,address,address)", +"95722371": "storeX(uint8[],uint256,uint256,uint256,int256)", +"95722e66": "payPool()", +"95725d8a": "emitRoleAdded(address,uint8)", +"957287ce": "market2()", +"9574f4e1": "createMatch(string,string,uint256,string)", +"957563ec": "setProviderLock(bool)", +"95761c77": "SBCS()", +"9576b180": "initGoldData(uint256,bytes32,bytes32,bytes32)", +"9576bfbd": "setWhiteLister(address)", +"9576e5b3": "registerContract(address,bytes32,bool)", +"9577941d": "LogKill(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"9578bce2": "setCreditsTokenPrice(uint256)", +"957908d1": "dequeue()", +"95792430": "grant(address,uint256,uint256,uint256,uint256,uint256,bool)", +"957a2772": "lastBlock_f9()", +"957a6254": "bonusScheme()", +"957aa3d1": "goldmintTeamAddress()", +"957aa58c": "live()", +"957ac9ad": "HappyBeeToken()", +"957b2807": "getPlayerPlayInfo(uint256,uint256,uint256)", +"957b2e56": "reinvestDividends()", +"957b52fb": "fidaPerEther()", +"957b781c": "mintBonus(address)", +"957b8d98": "publicsaleTokens()", +"957bb1e0": "bid(bytes32)", +"957c0ff2": "testNoTokensOneCall()", +"957d8250": "allocateBid(address,bytes32)", +"957dcb1e": "mintReservationTokens(address,uint256)", +"957e05d6": "setAllowTransferLocal(bool)", +"957f050b": "merchantAccount()", +"957f120e": "inPublicPreSalePeriod()", +"957f371f": "totalAmountOfEarlyPurchasesWithoutBonus()", +"957f9a0b": "tryFlush()", +"95803d6c": "STARTING_BULLS()", +"95805dad": "start(uint256)", +"9580811c": "setBalanceAdmin(address,uint256)", +"9580c4bc": "migrateFunds()", +"95816a16": "contributionCap()", +"958174a3": "ParentToken(uint256,string,uint8,string)", +"95818603": "fromTweiToFp(uint256)", +"958222aa": "isTokenTransferable()", +"95829738": "institutions(bytes32)", +"9583102a": "verify_send(address,uint256)", +"958343f9": "setOrderDealSpeed(uint256)", +"9583cf17": "claim_period()", +"9584894c": "getElementInfo(uint256)", +"9584fbfc": "TOKEN_SHARE_OF_TEAM()", +"9585a877": "isGameActivated()", +"958689d7": "emitMintEvent(address,uint256)", +"95878da6": "CurrentICOpublicSupply()", +"958799cb": "recordPurchase(address,uint256)", +"95880360": "setExchangeRatePreIco(uint256)", +"9588378e": "reputationOf(address,bytes32)", +"95883871": "TradeListing(address,address,address,uint256,uint256,bool)", +"958993a5": "allocatePrivatePresaleTokens()", +"958a3698": "setITTMultiSig(address)", +"958a41dd": "upgradeToAndCall(string,address,bytes)", +"958a9937": "createProduct(bytes32,uint128)", +"958b12b9": "ICOCap()", +"958b3f20": "final_fundraise()", +"958b6f55": "checkTokenVesting(address,uint256)", +"958c4be7": "makeCollectibleUnavailableToSale(address,uint256,uint256,int256,uint256)", +"958ce2d5": "Spoke(bytes16,string)", +"958d1725": "getChild(bytes32,uint256)", +"958e0028": "SoarCoin()", +"958f3624": "totalTokenWinValue()", +"958fde82": "newPinnedAppInstance(bytes32,address)", +"95907291": "CaptureTheFlag(string)", +"9590d4b9": "testCount()", +"9590ef13": "Option(string,string,uint8,uint256,address)", +"95910d46": "ownerPrimary()", +"95925814": "undo_deadline()", +"95929d22": "_updateNextAmount()", +"9592d424": "totalNodes()", +"95930b1c": "getAssetPacksUserCreated(address,address)", +"95932df3": "addCustody(address)", +"9593aa9a": "JTOKEN()", +"95949823": "setRemark2(string)", +"959499b6": "withdrawProfit()", +"95955d22": "escrowTransfer(address,address,uint256,uint256)", +"9595898a": "updateCard(uint256)", +"95966c3b": "get_eth_balance(address)", +"95969ba4": "enabledAddresses(address)", +"95977749": "IvoryTest()", +"95978868": "strConcat(string,string,string,string,string)", +"95980858": "currentText()", +"95982228": "Multiowned(address[],uint256)", +"95982f44": "GetLottery(uint8)", +"9598790d": "priceTokenSellWei()", +"95988a26": "proposalsRank()", +"95997c51": "withdraw(uint128,address,uint256)", +"9599ab63": "crowdsaleBonus(uint256)", +"959a1f08": "Hive()", +"959ac484": "push(uint256)", +"959b3fa0": "createSkin(uint128,uint256)", +"959b6916": "setCollectTokenTime(uint256)", +"959b8c3f": "authorizeOperator(address)", +"959c265b": "makePlayerID(address)", +"959ca192": "createCoupons(uint256)", +"959cb555": "address_register(address)", +"959d51f6": "W3SchoolToken(uint256,string,string,uint256)", +"959e4748": "totalIssuanceLastModified()", +"959e90ff": "totalTransactionCount(address)", +"959f601e": "getLimitMaxCrowdsale()", +"95a01505": "presaleStorageVault()", +"95a039ba": "getContractAddress(string,string,string,string)", +"95a078e8": "hasAccess(address)", +"95a08221": "tokensTotalSupply()", +"95a0f5eb": "totalMigrated()", +"95a0f9c7": "removeOffer(uint256)", +"95a1297a": "totalRewardsRedeemed()", +"95a13ff3": "polyComplianceAddress()", +"95a1c14d": "addThreeWayLine(uint256,string,uint256)", +"95a2251f": "redeem(address)", +"95a235ae": "set_deposit_address(address)", +"95a23c3a": "adminsPercent()", +"95a2d14b": "IcoCloseTime()", +"95a3bf6e": "getPayoutRequestedState()", +"95a3e2af": "isAddressFrozen(address)", +"95a47652": "getMintingStatus()", +"95a4f76d": "maxSaleNum()", +"95a50a9d": "monarch()", +"95a51233": "totalSupplyCeiling()", +"95a51669": "buyWithETH(address,uint256)", +"95a5418d": "_patternToNumber(bytes4)", +"95a59ac4": "PacificaToken()", +"95a5dfc0": "yes(uint256,string,uint256)", +"95a6f9ab": "makeProposal(string,uint256,uint256,uint256,uint256,address)", +"95a70863": "setOwner(uint16,address)", +"95a8c58d": "hasRole(address,uint8)", +"95aaa5d9": "BatakToken()", +"95ab32a3": "securityPercent()", +"95ad3d98": "ConnectCoin()", +"95addb90": "questions(bytes32)", +"95adfe72": "getPlayerPrice(uint256)", +"95ae0bf9": "extCreateNinja(uint256,uint256,uint256,uint256,address)", +"95ae66a5": "MilestonePricing(address,uint256,uint256[])", +"95af7006": "setFirstBonusPercent(uint256)", +"95afc05c": "withdrawRefunds()", +"95b1157d": "setLockAccount(address,uint256)", +"95b18bbe": "Created(address,uint256,uint256)", +"95b1e4f2": "addClaim(uint256,address,uint256,bytes32,bytes32,string)", +"95b1f93b": "changeStakerOperation()", +"95b2110a": "queryAirCrash(string)", +"95b25a1c": "Biograffi()", +"95b2d128": "TokenFund(address)", +"95b34f71": "_getTokens(uint256)", +"95b3559f": "CertifyDelegate(address)", +"95b3c92f": "TioToken()", +"95b3dc77": "setTransferableTime(uint256)", +"95b4b88d": "allowanceSub(address,uint256)", +"95b505f0": "getMigrateOutReporterValue()", +"95b537d5": "selfOn()", +"95b5d5ac": "token_ask(address,uint256)", +"95b68fe7": "getTokenToEthInputPrice(uint256)", +"95b6a08d": "canDisburseMultipleTimes()", +"95b71187": "getByFromCount(uint256)", +"95b7c348": "ICOCappedRefundableCrowdsale(uint256,uint256,uint256,address,address)", +"95b7ea26": "GetMaximumBet_ether()", +"95b7f0aa": "_removeAuction(address,uint256)", +"95b890d6": "purchaseTokensWithoutDevelopmentFund(uint256,address)", +"95b8cf55": "signalBackupWithdraw(address)", +"95b8fdef": "setCompte_22(string)", +"95b96e11": "PeriodEnd(uint16,uint256,uint64)", +"95b9bb68": "setCompositionAddress(address)", +"95ba64c9": "LogForbid(bytes32,bytes32,bytes32)", +"95bad022": "countTeam()", +"95bb733b": "CurrentCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"95bb8d46": "publicSaleTransfer(address[],uint256[])", +"95bb9fcf": "getHolding(uint256)", +"95bbbe45": "transferFundWalletWallet(address)", +"95bc2673": "remove(bytes32)", +"95bc3bd0": "lockAmount(address)", +"95bc7eec": "payFunction()", +"95bc8515": "setHolder(address,uint256)", +"95bc9538": "changeStatus(uint8)", +"95bda19d": "register(address,uint256,address)", +"95bda742": "_create_user(address,address)", +"95bdca94": "isTyped(address,uint256)", +"95be55a6": "increasePrice_20_February()", +"95be7542": "CoinLLeague()", +"95be9ace": "NewDeal(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,string)", +"95c02700": "ACN()", +"95c08f92": "investmentOf(address)", +"95c0954c": "ownerOfUUID(string)", +"95c0c3f6": "confirmGameEnded(bytes32)", +"95c0c447": "getLimitTypeOf(address)", +"95c0d65c": "editRank(uint256,uint256,uint256)", +"95c0e6c3": "transferOwnershipAtomic(address)", +"95c21ebf": "blueOs()", +"95c26d93": "thirdTierDiscountUpperLimitEther()", +"95c2d845": "driveCar(string)", +"95c303bc": "pyramid(address,uint256,bytes32)", +"95c30910": "unFreeze(address,address)", +"95c3be0b": "participantIndex(uint256)", +"95c3fc9b": "_setPowerBalanceOf(address,uint256)", +"95c43d84": "PHASE2_SUPPLY()", +"95c47416": "VoteOnMyTeslaColor()", +"95c4e59b": "AXIACOIN(address,address)", +"95c55798": "WZCoinToken()", +"95c5a2cc": "halfPercent(uint256)", +"95c5ed9d": "getVoterStatus(bytes32,address)", +"95c6fa61": "keyOf(bytes32,bytes32)", +"95c7a23f": "AutoBuy()", +"95c7b007": "setFreezeTx()", +"95c8d4ee": "grantAllocation(address,uint256,bool)", +"95c92d98": "viewTotalAffiliateCommissions()", +"95c93f8b": "setTierRates(uint256,uint256,uint256,uint256)", +"95c96554": "cancelVote()", +"95c97432": "nSubmittedHashes()", +"95c9f53f": "scaledDividendPerToken()", +"95cc2e8b": "DATE_ICO_START()", +"95cc74fe": "buyFromPartner(address)", +"95ccea67": "emergencyWithdraw(address,uint256)", +"95ccf8bf": "forward(address,address)", +"95cd73a2": "OpCoin()", +"95cd76fa": "getMaxOwners()", +"95ceb4b3": "winningProtocal()", +"95d12000": "ownerPercent()", +"95d22683": "MyUserName(string)", +"95d2b4b4": "_createMonster(uint256,address,uint256,bool,bool,bool)", +"95d38ea8": "mintableToken()", +"95d395dd": "XDToken()", +"95d47f2f": "lastBlock_f8Hash_uint256()", +"95d4f7dd": "primaryGasLimit()", +"95d5766c": "foundersContract()", +"95d5a1be": "SignatureReg()", +"95d5f6fd": "officialSite()", +"95d643a8": "earnings()", +"95d6718a": "grantOf(address)", +"95d697c4": "ProofOfReadToken(uint256,uint256,string,uint8,string)", +"95d793d9": "deposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"95d84b30": "_replaceContract(address)", +"95d84d99": "setColorPurple()", +"95d89b41": "symbol()", +"95d8f60d": "sumHardCapICOStage6()", +"95d9a030": "externalControllerCandidate()", +"95d9cc18": "setStdOwner(address,address)", +"95db03fe": "krypteum()", +"95dba6c9": "getHealthForCost(uint32)", +"95dbee2d": "gift(address,address,uint256)", +"95dcac25": "IGTSGD()", +"95dd489b": "winningsPerRound()", +"95dd9193": "borrowBalanceStored(address)", +"95ddb3a6": "setJewelContract(address)", +"95de00a2": "getReservedDestinationInfo(address,bytes32,address)", +"95dea05b": "cleanActions(bytes32[])", +"95e05110": "sumHardCapICOStage3()", +"95e16e97": "validateraffle()", +"95e19fab": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[])", +"95e1d9f7": "getGamesForAdmin(address)", +"95e2a953": "etherRatioForInvestor()", +"95e2c773": "privatePreICOdepositors(address)", +"95e2db3d": "getDistributionContracts(address)", +"95e396f9": "crowdsaleTokensWallet()", +"95e3c50b": "tokenToEthSwapInput(uint256,uint256,uint256)", +"95e3cd5c": "preAllocation(uint256,uint256)", +"95e4c1bf": "hasConfirmedRecord(bytes32)", +"95e4d456": "DUNGEON_CREATION_LIMIT()", +"95e517be": "Offer(address,string,address)", +"95e52d98": "documentsCount()", +"95e66ea1": "isLeftTokenIssued()", +"95e77a05": "testItemStrict(bytes)", +"95e7b3c5": "angelRate()", +"95e87385": "availableRef()", +"95e8a67e": "toB32(bytes,bytes)", +"95e8d644": "requestRemoveOwner(address,string)", +"95e8f3e7": "get_hash()", +"95e911a8": "feeBase()", +"95eb84c0": "takeLoanOrderOnChainAsTraderByDelegate(address,bytes32,address,uint256,address,bool)", +"95eb8f15": "Attempt(address,uint256)", +"95eced5f": "ZToken(uint256,string,string)", +"95ecef72": "gSetRunning(bool)", +"95ed857c": "mintPredefinedTokens()", +"95ee1221": "isCancelled()", +"95ee4cfd": "set_percentFeeTimes5(uint256)", +"95ee8bae": "getInt(address,bytes32)", +"95eeb240": "disableApproval()", +"95ef9178": "setTokenSaleContractAddress(address)", +"95f0684b": "getPackageNameHash(uint256)", +"95f0f107": "_setBridgeAmount(uint256,address)", +"95f11ce6": "deleteCandidate(address)", +"95f1260b": "balanceToWithdraw()", +"95f16de8": "companyWithdraw()", +"95f17bce": "cancelCost()", +"95f20e88": "RANDCRYPT(uint256,string,string)", +"95f22405": "getImageInfo(uint256)", +"95f28272": "salesTokenHolder()", +"95f382bc": "depositVault(uint256,uint256)", +"95f47e4e": "setRegulatorAccessLevel(address,uint8)", +"95f5784f": "FIBASK()", +"95f59fe1": "vote(string,string,string)", +"95f62fb9": "registerDevices(bytes32[],bytes32[],bytes32[])", +"95f847fd": "transferToContract(address,uint256,uint256)", +"95f9432d": "ThankYouToken()", +"95fa7430": "get_iconiq_tokens(address,address)", +"95fbdcd9": "MeshToken()", +"95fbfa0d": "testBurningUndistributed()", +"95fc6354": "PLAYER_START_PERIODS()", +"95fc799f": "allocateRestrictedTokenToPartner(bytes32,bytes32,uint256)", +"95fcb00d": "addVesting(address,uint256)", +"95fdc999": "getFlag(uint256)", +"95fdd612": "hasRequested(bytes32,address[])", +"95fe0e65": "createD(uint256)", +"95fe27d3": "SmartCripto()", +"95fe4608": "revokeCert(bytes32,bytes,bytes32,bool,uint256)", +"95fe5234": "setSubnodeOwner(bytes22,address)", +"95fe6865": "checkIfCanUseTokens(address,uint256)", +"95fe6f1d": "isAddressReserved(address)", +"95ff24e3": "SellTokens(address,uint256,uint256,uint256)", +"95ff3cc1": "getMyApples()", +"95ffff09": "getMyBananas()", +"960024ff": "rebuyStarted()", +"96002aef": "offerProductOwnership(bytes32,address)", +"9600ead9": "RESELLING_UNLOCK_COUNT()", +"9600ec92": "transfer(address[],address,uint256[])", +"9600f294": "refundTokenPayment(uint256,address,string,uint256,address)", +"9601065d": "reachedMajority(uint256)", +"96013c9c": "testLatestPkgGetter()", +"960173b5": "aliceClaimsDeposit(bytes32,uint256,uint256,address,address,bytes20)", +"9601deb8": "LogTransferOwnership(address,string)", +"96023032": "updateContractAddr(string,string,string,string,address)", +"9602339d": "AlfaTowerShares()", +"96023cbf": "registraToken(bytes32)", +"96026d61": "BucketAndValuationAndCommitted(uint256,uint256,uint256)", +"9602bb20": "AMBTICO()", +"9602e9d5": "withdrawDev()", +"960384a0": "getValue(string)", +"96038f8f": "ICO_Graphene()", +"9604702a": "matchExistingBids(bytes32)", +"960491d7": "setNextRndTime(uint32,uint32,uint32)", +"9604a24b": "getPoolCapSize(uint256)", +"960524e3": "getInvestorCount()", +"96063049": "rollDice(uint8)", +"96066cf9": "MintConfirmed(uint256,address,uint256)", +"96069ee1": "CIPToken(address,uint256)", +"96074e70": "addBeneficiary(address,uint256)", +"9607610a": "withdrawFor(address,uint256,uint8,bytes32,bytes32)", +"960787a2": "sendFoods(address[500],uint256[500])", +"9607a1db": "claimShare(uint256,bool)", +"9608088c": "setAddress(address,address,address,address)", +"960834f4": "dAddBallot(bytes32,uint256,uint256,bool)", +"9608740e": "verifyBid(uint256,bytes32)", +"9608e9df": "DataWasRecorded(address,uint256,bytes32,uint256,string)", +"960954af": "chargeAdvertisers(address[],uint256[],address[],uint256[])", +"960983f4": "addArtifact(string,string,bytes32)", +"9609e488": "TootyrCrowdSale()", +"960a48ae": "createPreIco(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"960a57fc": "SHA256HashRegister(bytes32)", +"960ba088": "createFinancialStrategy()", +"960bfc9b": "_owns(address,uint64)", +"960bfe04": "setThreshold(uint256)", +"960d3f56": "impl_mining(address,uint256,bytes)", +"960d8cd3": "testFailUpdateLatestRevisionNotOwner()", +"960d94bb": "get_presale_goal()", +"960e55a8": "ChannelCloseRequested(address,address,uint32,uint192)", +"960e80b7": "trans()", +"960ecf0c": "addNewStage(uint256,uint256,uint256,uint256,uint256)", +"960fa70f": "synthGenes(uint256,uint256)", +"96102d7d": "ownerSetWallet(address)", +"9610b1bc": "resumeTokenTransferFromAddress(address)", +"9610e068": "GetAskingUnitPrice()", +"9610f0e6": "pveBattleFee()", +"96119f12": "SkribbleToken()", +"9611bfc5": "_getExistingTileAt(int32,int32)", +"96131049": "withdrawal(address)", +"96132521": "released()", +"9613bc90": "isEvolvementAllowed(uint256,uint256)", +"9613e19b": "createAuction(uint256,uint256,uint256,uint32,uint32)", +"96147933": "ContractEnabled()", +"9614c769": "setDesc(string)", +"9615ecb2": "wasSuccess()", +"9616b410": "incFreezeIndex(uint256)", +"96176797": "LogTransition(bytes32,uint256)", +"96178c20": "totalSupply2()", +"9617d90d": "cartaxiToken()", +"96186b6e": "MAX_PERCENT_OF_PRESALE()", +"961891d5": "changeEscapeController(address)", +"9619367d": "minBet()", +"961a16f2": "secondExchangeRate()", +"961a9218": "setLLV_edit_17(string)", +"961a929c": "gasPriceLimit()", +"961b16a1": "addInTeamBalanceMap(address)", +"961b2b96": "assignBountyAddresses(address[])", +"961be391": "cash()", +"961c2470": "refundRoots()", +"961c9ae4": "createAuction(address,uint256,uint256,uint256,uint256)", +"961cc569": "airdropReceiversLimit()", +"961cd8ce": "ticketsForWithExcess(uint256)", +"961d1284": "isRefundingEnabled()", +"961d30cc": "getMasterNodesDates(address)", +"961d3cd3": "setExclude(address,bool)", +"961e99d9": "startBuyBackTwo()", +"961f1d96": "RANGESTART_3()", +"961ffc68": "GatewayInterfaceAddress()", +"9620b995": "transfterForProjectManagement(address,uint256)", +"96214735": "setDeployer(address)", +"962174b6": "LotteryClaveChain(address)", +"9621bcf7": "publishTaskListing(string,address,uint256,uint256,uint256,uint256)", +"9621f497": "SetMaxAirDropXblock(uint256)", +"96221dc9": "mulX(uint256)", +"962318b8": "teamKeepingPercentage()", +"96242f41": "getFrontEndTokenSupply()", +"96246eb8": "Zmbc()", +"9624e534": "setBlockDotNumber(uint256)", +"9625a6c6": "hardLimitICO()", +"9627bf02": "preIcoEndsAtChanged(uint256)", +"96283310": "setHouseAddressShare(uint256)", +"96284fb6": "getNizkStruct()", +"96286cc9": "isTokenOwner(address)", +"96289427": "transferRestTokensToOwner()", +"9629da17": "withdraw(uint64,address,address[],bytes32[],address[],uint256[])", +"962a64cd": "convert(string)", +"962aab81": "blockEnded()", +"962ba36f": "quarantine(address,address[],uint256[])", +"962ba969": "ExceedIOToken(uint256,string,string)", +"962c9898": "SOLUSToken()", +"962c9c8d": "MAX_VOTED_TOKEN_PERC()", +"962ca53e": "Cosby()", +"962d0c72": "overRaisedUnsend()", +"962dae57": "getPriceContract()", +"962ffeae": "totalCurrentFunders()", +"9630961d": "createRole(bytes32,address[])", +"9631c1bd": "FounderFeeInPercent()", +"9633303f": "setSrc(address)", +"96344d05": "creatorRequestFundTransfer()", +"963476e5": "listBackers()", +"9634ef56": "start_of_report_period()", +"9635024c": "TANDER()", +"96354f6d": "BONUS_ICO_STAGE1_PRE_SALE3()", +"9635eaf7": "fundsToAddress(address,uint256)", +"9635fc2c": "yahooOracleUrl(bytes32)", +"963630a3": "ETGOLDToken()", +"963632d3": "Prosperity()", +"96365d44": "poolBalance()", +"96370fa2": "savePic(string)", +"963749b6": "calculateWinnerPrize(uint256,uint256)", +"963812c3": "createItemId()", +"96382f0b": "gameStatus(bool)", +"96383c04": "setPrice(uint256,uint8)", +"96386ab3": "myMethod2(string)", +"96389bd7": "OwnedController(address,address)", +"9638a89c": "DataRecordIndexStructs(uint256)", +"963a9a13": "startInvite()", +"963c0724": "Lucky()", +"963c1121": "set_pre_kyc_iconiq_bonus_numerator(uint256)", +"963c11df": "totalScammed(address)", +"963c3397": "winning_year()", +"963c6017": "postGoldPeriod()", +"963d62fb": "tokenLossRatio()", +"963dd1dd": "Diatom()", +"963de4d2": "GetBet(uint256,uint256,bool)", +"963e2680": "setMinSiteTipPercentage(uint256)", +"963e49c7": "FindCarrot()", +"963e63c7": "minValue()", +"963f2334": "settleCaller(address,address,uint256)", +"96401470": "TutorialToken(uint256,string,uint8,string)", +"96406391": "setTokenDistribution()", +"9640da30": "ethRedeemed()", +"96419497": "PAXToken(bool)", +"9642a19c": "optInGas()", +"9642ccdf": "functionName(bytes20,address)", +"9642ddaf": "testMint()", +"9643aef4": "testControlCreateWithParentSameNonce()", +"9644fcbd": "changeMembership(address,bool,string)", +"96450a6d": "walletWithdraw()", +"9645337a": "removeOrder(uint256)", +"9645bae5": "newAuction(uint256,uint256)", +"964620d2": "TheMostPrivateCoinEver()", +"96463fc6": "createTrade(uint256,uint256)", +"96468249": "getFoundation(address)", +"96469132": "setPonziPriceInWei(uint256)", +"9646b85d": "getMintableAddress()", +"9646df4d": "presaleEnds()", +"9647259c": "dividendDistribution()", +"9647df97": "TES()", +"9648c9f4": "sessionId()", +"9649650c": "removeBank(address)", +"96497258": "withdrawOverdraftTokens(address,uint256)", +"964997a4": "MoacSupply()", +"9649ccaa": "updateSubscriptionOffer(uint256,uint256)", +"9649d98b": "restrict()", +"964a4ac7": "ULTRA_HERO_MULTIPLIER()", +"964ad434": "TIER1_CAP()", +"964afe08": "addSomething(uint256)", +"964b97de": "box2Star5()", +"964c0b40": "ExtensionCalled(bytes32[8])", +"964c7d84": "addressToBlock(address,bool)", +"964c836c": "receiveExecutionNotification()", +"964ecc09": "forceRefunding()", +"964f61f9": "getCosigner(uint256)", +"964f6dcd": "Elephant()", +"964f8fba": "totalDinoSold()", +"964fad94": "fundingGoalOf(uint256)", +"964fb96d": "test_init()", +"965232c0": "getTotalAllowed(address)", +"9652389c": "setPreSaleOn()", +"9652713e": "runSigned(uint40,uint256,address)", +"96532d1c": "mintingAllowed()", +"9653dee5": "tokenSwap()", +"9653f8a1": "etherBalances(address)", +"965447d9": "toPowerOfTwoThirds(uint256)", +"965582d6": "requestNewID(string,string,string)", +"9655943e": "validMCAmount()", +"9655e4b0": "sellIdeas()", +"965693ee": "TicketsPurchased(address,uint256[],uint256[],uint8[])", +"96574919": "removeStakerFromArray(address)", +"96577caa": "getLowWinPercent(uint256)", +"9657f8ad": "TopiToken()", +"96581de1": "registerPayments(address[],uint256[],uint256[])", +"9658522c": "createPlayerOnAuction(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,uint256)", +"96594efb": "WorldBit(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", +"9659867e": "mintCount()", +"965a324e": "OxShelterEye()", +"965a3b7e": "targetDemographics()", +"965a79fb": "getAllJobs()", +"965acc73": "setCampaignBudgetById(bytes32,uint256)", +"965b0cc4": "signedApproveAndCallCheck(address,address,uint256,bytes,uint256,uint256,bytes,address)", +"965b2bae": "setFinancierParticipationAdd(address)", +"965b5aa8": "paySolutionRewardGoodRep(address,uint256)", +"965b71bc": "cfoWithdraw()", +"965bdf33": "SetAuditedAssetSize(uint256)", +"965be457": "registerApp(bytes32,address,bytes4[],address[])", +"965beae8": "bulkTokenSend(address[],uint256)", +"965c643f": "setReference(bytes32,string)", +"965c90e3": "getNodeByIndex(uint256)", +"965edec5": "_publishSecret()", +"96603e88": "hotPotatoHolder()", +"9660ab3a": "setContractUser(address,bool)", +"9660aeeb": "isMatching(int256,int256,int256)", +"96617ba4": "ClientsNotified(string,string)", +"966203e7": "Product(bytes32,bytes32,address[],int256,int256,address,address)", +"9662355e": "generateAttestForDelegationSchemaHash(address,address,uint256,bytes32,bytes32,uint256[],bytes32)", +"96637b10": "getEscuela(uint256)", +"9663871f": "recursiveRound(uint256,uint256,uint256)", +"9663a496": "awardBronze(address,address,address)", +"9663f88f": "getBlockHash()", +"96642cfc": "_isAuctionExist(uint256)", +"9664ca94": "date_string(string,int8,int8,int16)", +"9664d2d9": "resourceIndex(address,bytes4)", +"9665688e": "setGame(uint256,uint256,uint256,uint256,uint256,uint256)", +"966588d4": "cloneWithTwoPops(uint256,uint256)", +"9665b658": "changeExecutor(address)", +"9665ef09": "bitmask_show(address)", +"9665f170": "pregnantEtherDogs()", +"96661b04": "closeDataResponse(address,bool)", +"9666856d": "stopList(uint256)", +"9666cbfa": "getDeployedMatches()", +"9666e1f9": "isCosignerSet(uint256)", +"966704c2": "autoTransferLocked(uint256,uint256)", +"96682704": "TransferToReferral(address,uint256)", +"96686560": "Setup(string,string)", +"96687919": "_preSaleSupply()", +"9668b281": "AKContract()", +"966933ce": "DURATION_PER_VESTING()", +"96696da8": "getHives()", +"966a1961": "get_time()", +"966a360c": "newExchange(address,uint256,address,address,uint256)", +"966a3b29": "setJMETHExchangeRate(uint256)", +"966a7dca": "payOrder(string)", +"966aa252": "addProperty(bytes32,bytes32,bytes32,bytes32,bytes32,uint256,bytes32,bytes32,uint256)", +"966acb38": "testThrowTransferNotTransferable()", +"966aeece": "changeWhitelister(address)", +"966b3514": "contract_address()", +"966b7d91": "AdminChangedFundingWallet(address,address)", +"966dae0e": "factoryAddress()", +"966dcd26": "intertransfer(address,address,uint256)", +"966e6ead": "DefaultReleaseCalled()", +"966edae7": "lastBlock_a3()", +"966f697c": "_getSubscription(bytes32,address)", +"966ff650": "totalBurnt()", +"9670078c": "burnDNC(address,uint256)", +"9670591b": "giveAwayHoldership(address)", +"9670c0bc": "getPrecision()", +"9671ef91": "WEI_TO_INSIGHTS()", +"9673d6a3": "events(string)", +"96744afb": "ADDR_TEAM_TOKENS_ACCOUNT()", +"967506be": "deleteTokenAddress(address)", +"9675bb9c": "totlePrimary()", +"967743a8": "unlock20Done()", +"96778446": "addVestingUser(address,uint256)", +"967826df": "maxAllowedManualDistribution()", +"96784f45": "balanceOf2(address,address)", +"9678a1e8": "ProxyCreated(address,address)", +"9678df74": "MerlinCash(uint256,string,string)", +"9678eb05": "SafeDiv(uint256,uint256)", +"9678fb88": "TACTICALCRUISER_MAX_CARGO()", +"96793725": "registerWallet(address,address)", +"9679dd7d": "tokenLeft()", +"967a08f7": "raiseTransferEvent(address,address,uint256)", +"967b2692": "SaleCount()", +"967b3c21": "unitEpicGrowth()", +"967c33b3": "Deployer()", +"967dd0ae": "orderFor(address)", +"967e6e65": "getAge()", +"967e8611": "placeCube(uint64,uint64,uint64,uint256,uint256)", +"967f1cc6": "ownerPause()", +"967ff23e": "blocks()", +"96800dfd": "updateCap(string,uint256)", +"96817396": "bonus20end()", +"96821fc1": "MAX_MILESTONE()", +"96834e36": "ownerSetStandardFee(uint256)", +"9683d11d": "OHWOWW()", +"9683fe3e": "create(address,bytes32,uint256,address)", +"9684da1a": "createGenesisUniverse()", +"9684fe92": "interestCycleLength()", +"9685e736": "stopAvatarCreation()", +"96862e2d": "PattyCoin(uint256,string,string)", +"968790d0": "reclamaPagamento()", +"96879353": "CreateIco(address,uint256)", +"968803e3": "CYC()", +"96881d20": "CoinParkToken()", +"968858c8": "tokenreward()", +"9688738b": "TokenContract()", +"968908a3": "createMarketMaker(uint256,uint16,uint256)", +"968997fb": "FootballToken(uint256,string,uint8,string)", +"9689ac95": "TYPE_NOT_AVAILABLE()", +"9689e535": "CBCC()", +"968b12aa": "Crowdsale(uint256,uint256,uint256,address,uint256)", +"968bb12c": "setLegalFileLink(string)", +"968bd60d": "LogSendReward(address,address,string)", +"968be45d": "MYPPToken()", +"968c15de": "inscription(uint256)", +"968d1cff": "percentForCommunity()", +"968d73d8": "start_service2(uint256,address,uint32)", +"968d901b": "getCurrentGame()", +"968ed600": "totalFunds()", +"968f0a6a": "getBidBySiteIndex(uint8,uint256)", +"968f9dc3": "EtherReserved(uint256)", +"968fc02a": "DogRace()", +"9690be37": "deleteGame(bytes32)", +"9690caa6": "Umint21()", +"9691a8bf": "changeIndividualCapInWei(uint256)", +"969235a4": "getSaleStart()", +"969283e2": "availableVolumeEnclaves(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"969295ae": "changeReferral(address)", +"96934e88": "isReward()", +"96937617": "Rpct()", +"96938d5b": "watchedAddress()", +"969464f6": "isCauldronExpired(uint8)", +"9694f039": "founderSupply()", +"96957869": "verifySignature(bytes32,uint8,bytes32,bytes32)", +"9695e3c0": "EOMarketToken()", +"9696e59a": "totumPhases()", +"9696ef66": "SLOTS()", +"9696fbf5": "Daschain(uint256,string,string)", +"96974e47": "setMinAllowedBetInTokens(uint256)", +"96984631": "RANGESTART_10()", +"9698d611": "setSaleManageContract(address)", +"9699ca16": "getPublicKey(bytes32,uint8,bytes32,bytes32)", +"969ac477": "PRIZE_POT_PERCENTAGE_MAX()", +"969be87e": "testGetNewItemId()", +"969bece3": "setRegionOnSale(uint16)", +"969bf358": "getCurrentTokenSaleId()", +"969ca0eb": "scavengeEscrow(uint64)", +"969cb4da": "changeSubmissionPrice(uint256)", +"969cb7c3": "getPublisher(uint256)", +"969d5b94": "changeMultiSigWallet(address)", +"969da324": "updatedEtherPrice(string)", +"969ddd71": "getMaxCap(address,uint256)", +"969e3756": "exchange(address,address,uint256)", +"969ea336": "maximumInWei()", +"969eb430": "updateVerifiersPerShard(uint256)", +"969ef40d": "updateFinishFlag()", +"969f1af4": "addMinerQuest(address)", +"969f8a83": "getConfirmations(bytes32)", +"969fa9d2": "EmergencyWithdrawalSucceeded(address,uint256)", +"969fbf12": "contructor()", +"96a04925": "retreiveTokens(address)", +"96a16793": "changeOraclizeAccountingSettings(uint256)", +"96a1e85c": "get_total_quantity()", +"96a34fc7": "exchangeToken(uint256,address,address)", +"96a44d35": "devuelveApproles(bytes32)", +"96a49d60": "getCircle()", +"96a51fde": "OilVisionShare()", +"96a566be": "PartnersNotSet(uint256)", +"96a625a5": "plantcToken()", +"96a68b91": "makeUndestroyable()", +"96a69d04": "totalSquareStakes(uint256,uint256)", +"96a6a748": "POHStopTime()", +"96a70169": "tradeETH(uint256)", +"96a77176": "setPresaleTwo()", +"96a7cf6a": "callDestruct()", +"96a80699": "postAllocateAuctionTimeMints(address,uint256,uint256)", +"96a942c7": "minTokenPurchaseAmount()", +"96a952a5": "setInstallmentsLoanData(uint128,uint256,uint24,uint40,uint32)", +"96a9df88": "_withdrawAirdrop(uint256,bytes)", +"96aa6305": "totalNotCompleted()", +"96aab4f6": "setBountyAddresses()", +"96ab97a5": "hasVested(address)", +"96ac591e": "postICO(address,address,address,address,address,address,uint256)", +"96ad4131": "getRequiredAdmin()", +"96ad6c8a": "deposit_address()", +"96ad704a": "addToken(address[16],address,uint256)", +"96adad2e": "sellStores()", +"96adfe42": "mintWithData(address,uint256,bytes)", +"96ae44f6": "addAcceptedArbiter(address)", +"96afb365": "reclaim(bytes32)", +"96afc450": "emissionRate()", +"96afccb3": "withdrawDonation(uint256)", +"96b01c37": "warriorToOwner(uint256)", +"96b116c6": "statusDoacao()", +"96b1348a": "claimTokenFunds(address)", +"96b1e4d4": "isFreeze(bytes32,bytes32)", +"96b2c923": "changePlatformWithdrawAccount(address)", +"96b47f0d": "soldOnStage()", +"96b55f7d": "tierCount()", +"96b58ac8": "tokensLeftForSale()", +"96b5a755": "cancelAuction(uint256)", +"96b5c5f4": "FeeWallet(address,uint256,uint256)", +"96b5f7b6": "ParallelWorld()", +"96b6af5a": "submitCustodianDoubleSign(address,uint256,bytes32[],uint256[],bytes32[])", +"96b76c23": "stand(uint256)", +"96b828b4": "Lock(uint256,uint16)", +"96b86436": "foundersAllocatedAmount()", +"96b86e1d": "PLCRVoting(address)", +"96b90b05": "Apex()", +"96b9a9d0": "medalBoostAndBurn(uint16,uint64)", +"96bb1fef": "claimStakingRewards(address)", +"96bba9a8": "slashSmallUsername(string,uint256)", +"96bc0f94": "onlyAdminsFriends()", +"96bc1a89": "getLockedAmount_investors(address)", +"96bc2287": "PRE_FUNDING_GOAL()", +"96bc3f3a": "getForecastScore(uint256)", +"96bc4a40": "bsWallet()", +"96bc5ab7": "setOracleURL(string)", +"96bcf236": "am_i_on_the_whitelist()", +"96bd09a1": "edit_safe(address,string,string)", +"96bd8dae": "transferAllowance(address,uint256)", +"96be8878": "team2Balance()", +"96bf15bf": "gamePrice()", +"96bf4ed5": "TOTAL_TOKENS_FOR_CROWDSALE()", +"96bf5022": "MRIDUL()", +"96bfc229": "isInWhiteList(address)", +"96c0fb8b": "setWhiteListInBatch(address[])", +"96c108c9": "assignToBeneficiary(address,uint256)", +"96c12acb": "Fuck()", +"96c14d92": "closeContract(bytes32,bytes32,uint256,uint256,uint64,uint64,bytes32,bytes32,bytes32,uint64)", +"96c16735": "UselessAirdroppedToken()", +"96c237b4": "getDeedInfo(address)", +"96c266ca": "developersKey()", +"96c28881": "fundraise_max()", +"96c2d498": "XTL()", +"96c2d4c9": "totalTipForDeveloper()", +"96c36170": "icoEtherBalances(address)", +"96c38294": "getETHUSD()", +"96c52fc3": "____forward(address,uint256,uint256,bytes)", +"96c5406d": "tokenFree()", +"96c5743a": "test03AliceBuyToken()", +"96c5ea93": "icoBeginDate()", +"96c62b27": "BalanceBook()", +"96c72144": "GrimReaperAddress()", +"96c74715": "NBW()", +"96c7a2a3": "BlockRxToken(uint256)", +"96c81be5": "unicornsOf(address)", +"96c824a8": "createAccountFundContract()", +"96c82e57": "totalWeight()", +"96c85b59": "TestBancorFormula()", +"96c8da45": "oneTokenInEur()", +"96ca7653": "LottixTest()", +"96cb4bc5": "RESERVED_ECOSYSTEM_GROUP()", +"96cc7be7": "updateCeleb(uint256,uint256[6],uint256[6])", +"96ccacb0": "hour_blocks()", +"96cdb027": "InstallerEscrow()", +"96ce0795": "denominator()", +"96cea3f7": "confirmWithdrawTransaction(uint256)", +"96ced078": "getPlayerNumbersInGame(uint256,address)", +"96cf5227": "changeLockTime(uint256)", +"96cfd124": "signedTransferHash(address,address,uint256,uint256,uint256)", +"96cfda06": "getCourseCount()", +"96cff3df": "getMinimumCallCost(uint256,uint256)", +"96d002a0": "subFundBalance()", +"96d02099": "rsplit()", +"96d122ea": "getStoreAddress(string)", +"96d195bd": "getWitnesses()", +"96d1c952": "filterBuyers(bool)", +"96d28e00": "spinDeposit()", +"96d2ede5": "preBalanceOf(address)", +"96d3196b": "getSumActiveToken()", +"96d373e5": "cast()", +"96d37936": "finishTokenMinting()", +"96d43cc6": "getMinimumFundingGoal()", +"96d46500": "ICO_CAP2()", +"96d4cb9b": "FipsRegistration(bytes20,address)", +"96d4d091": "advisorAddress()", +"96d4ebf1": "finneyPerToken()", +"96d4f640": "createOrder(address,uint256,address,uint256,uint256)", +"96d6401d": "TRANSFER_PROXY()", +"96d66cf8": "expertsAccount()", +"96d6c134": "coreVUPDestination()", +"96d7a9ed": "_menu(bytes32)", +"96d7f3f5": "lastTimeMinQuorumMet()", +"96d811b7": "TokenVesting(address)", +"96d8b050": "claimTokensToOwner(address)", +"96d8f4f3": "minimumDonation()", +"96d8fe3b": "_updateHistory(address,address)", +"96d92a72": "changeRNGenerator(address)", +"96d99568": "MMMTokenCoin()", +"96d9a881": "manualDeleteEditionBids(uint256,address)", +"96da1fba": "sendETHToContributionWallet(uint256)", +"96da2848": "gasForCLI()", +"96dbab81": "stub()", +"96dbad1e": "sellCityForEther(uint16,uint256)", +"96dbb486": "updateFinishTime(uint256)", +"96dbbc5f": "Token_Description()", +"96dbe56e": "ImpCore(address)", +"96dc461f": "setBountyTokensCount(uint256)", +"96de0c20": "_makeWithdrawForPeriod(bytes32,uint256)", +"96de56d2": "getPlayerFlips(address,uint256)", +"96de6caa": "qtyValidators()", +"96de9c8c": "cnyBtcRate()", +"96dea936": "proposalData(uint256)", +"96df3540": "TLD_NODE()", +"96dfa78b": "price_per_eth()", +"96dfcbea": "checkState()", +"96dfcc21": "weAreClosed()", +"96e05fdb": "PaymentAccepted(address,bytes8,uint256)", +"96e0ef33": "send(address,address,address[],uint256[])", +"96e1a657": "timeBetweenEditions()", +"96e264ff": "ownerSetPayOutDivisor(uint256)", +"96e332f3": "mainSaleMaxTokens()", +"96e438a1": "reclaimDeposit(uint256)", +"96e4ee3d": "convert(uint256,uint256)", +"96e4f67d": "icoEtherReceivedMainSaleDay()", +"96e50a8c": "saveNonce(uint256)", +"96e583a9": "getLetter(uint256)", +"96e6e65f": "ETCN(uint256,string,string)", +"96e76fa7": "Unregistered(string,uint256)", +"96e83a40": "refund(uint256,address,address)", +"96e8cace": "dripMe()", +"96e8d14c": "newRecord(string,string,string)", +"96e9df8d": "deployNewContract()", +"96e9f6f2": "lastBlock_v12()", +"96ea7487": "Opacity()", +"96ea76b7": "OnWithdrawTo(address,address,uint256,uint64)", +"96ea8b9c": "referralPercentage()", +"96ea9f49": "FundTransfer(address,uint256,uint256,uint256,uint256)", +"96ebabba": "distributeSuccessfulCampaignFunds(uint256)", +"96ebfb89": "generalManager()", +"96ec1ca2": "tipUser(bytes32,bytes32,bool)", +"96ec6fec": "APP()", +"96ec7114": "COMMUNITY_SALE_START()", +"96ecf3c4": "subtractFrozenBalances(address,uint256)", +"96ed10a4": "issuePOIs()", +"96edb898": "callTokenFallback(address,address,uint256)", +"96ee03d6": "__concat(string[6])", +"96eecf95": "saleSuccessfullyFinished()", +"96ef7aa0": "cash_transfered(string)", +"96efbb9b": "getActiveItemAt(uint256)", +"96f099bc": "preSaleTokenRaised()", +"96f0aa8f": "findNextSecond(uint256,bytes)", +"96f1370d": "TotiMed()", +"96f17aa5": "potTarget()", +"96f2710d": "managerOn(address)", +"96f27b29": "getContract(bytes32,uint256)", +"96f36997": "CLIBUXCoin()", +"96f392f4": "elixir()", +"96f42876": "buyerAddressTransfer(address,address,address)", +"96f429ba": "stateIsFinishedReplay(uint256)", +"96f47800": "investInternal(address,uint128)", +"96f494d1": "printCourse0(uint256)", +"96f6706f": "cancelOfferBob(uint256)", +"96f68782": "right62(uint256)", +"96f74e88": "setOrganizationName(string)", +"96f76f11": "contractFinished()", +"96f7807a": "getDuel2(uint256)", +"96f93e65": "Expire(address,address)", +"96f9cffa": "shareBonus()", +"96fb2e62": "Party(string,address,string)", +"96fbab31": "getZombiesFullInfoByOwner(address)", +"96fc00c2": "setPresale(uint256,address,uint256[])", +"96fc2256": "verify(address,uint8,bytes32,bytes32)", +"96fcbf65": "numOfSampleTypes()", +"96fcd214": "slaveServer()", +"96fd1c42": "flush(address,uint256)", +"96fd1df7": "isEndedTrack(uint256)", +"96fd550a": "betWithCredits(uint64)", +"96fe1338": "storageTime()", +"96fe5418": "contestEndTime()", +"96fe6e74": "external_oraclize_randomDS_setCommitment(bytes32,bytes32)", +"96fedaf7": "extraMinted()", +"96fef3f1": "submitTransactionToken(address,address,string,string,uint8[],bytes32[],bytes32[])", +"96ff0306": "retireWildHard(uint64,uint64,uint64,uint64,uint64,uint64)", +"96ff4483": "setTokenAsideAddresses(address,address,address)", +"96ff7631": "SetupYOU(string,string,uint256,uint256,uint256,address,address,uint256)", +"96ff7e97": "requestIdentity()", +"96ffa690": "countLocalRecursive(uint256)", +"96ffac0b": "setupRace(uint256,uint256,address)", +"97004255": "aliceClaimsPayment(bytes32,uint256,uint256,address,address,bytes)", +"9700d0f0": "stage_2_TokensSold()", +"970129be": "getCardInfo(uint256)", +"9702795d": "REFERRAL_SHARE_RATE()", +"97028899": "play(bytes1,bytes1)", +"97034ed0": "get_HoldersProfit(address,uint256)", +"970388b5": "setContractActive(bool)", +"9703ef35": "cancelBid(uint256)", +"9703fa2e": "airdropQty()", +"9704122c": "getFeeAmount(uint256)", +"97046afc": "burnProvider(address)", +"970574ac": "lnUpperBound32(uint256,uint256)", +"9705a592": "getUnprocessedQueryCount()", +"97062e8a": "ico3Bonus()", +"9707f708": "Totalsupply()", +"970875ce": "currentSnapshotId()", +"9708e250": "maxSellCap()", +"9709709a": "MomentumToken()", +"9709cdbc": "getExchangeGroupsKeyAt(uint256)", +"9709d040": "NewPayroll(address)", +"970a5fa8": "exchangeRateIdx(uint256)", +"970afd9b": "MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE()", +"970db3df": "SPECIALIST_STAKE_TWO()", +"970e5904": "safeGetPartialAmountCeil(uint256,uint256,uint256)", +"97100be9": "setLiveTx()", +"97107d6d": "setProxy(address)", +"9710f014": "completeStatus(string)", +"971130b5": "MulaCoin()", +"9711715a": "snapshot()", +"9711e944": "Queue(uint256)", +"9711f20d": "isSanctuary()", +"971217b7": "values()", +"9712a57e": "purchasePotato(uint256)", +"9712a764": "takeBounty()", +"9712da8b": "getCompte_20()", +"97135d19": "santai()", +"971362c9": "partnerWithdraw()", +"9714378c": "extend(uint256)", +"97145273": "setHidden(address)", +"9714a27c": "miningOneFree()", +"9714f05c": "_minimumContribution()", +"9715a81f": "SurvivalRanchTestCoin()", +"9715d80e": "getCanShareProfitAccounts()", +"9715f05d": "OBSERVER(uint256,string,string)", +"97169426": "Owned1()", +"9717137a": "TLN_TOKEN_NAME()", +"97172664": "getIcoAddrCount(uint256)", +"97173a7a": "referalPayCount(address)", +"971751af": "lockAndDeliverTokens(address,uint256,bytes1)", +"9717ae9d": "DTCC_ILOW_5()", +"9717b2ae": "DividendsTransfered(address,uint256)", +"9717d76f": "getCandidatePosition(address,uint256)", +"9717df19": "fillFromQueue()", +"97187ac8": "coinSaleStarted()", +"9718b524": "newTreasury(address)", +"9719f290": "lockTeamTokens(address)", +"971a3593": "updateClosetime(uint256)", +"971a9091": "crystal()", +"971a9a29": "CbxeToken()", +"971b2b2e": "getFreelancerFeedbackOn(address,uint256)", +"971bd1b4": "estimateDistribution()", +"971c803f": "getMinimumStackCheck()", +"971ccc16": "addERC20Token(address)", +"971d2bd8": "getProposalByHash(bytes32)", +"971dbe0e": "getNbrOfPartyFor(address)", +"971e668f": "updateTokenToEthOrder(uint32,uint128,uint128)", +"971e80cb": "setWallet()", +"971ec3ce": "globecoin()", +"971f34a1": "SellPriceChanged(uint256)", +"971fe56b": "poolWeight()", +"971fff63": "setAdsStorageAddress(address)", +"972030bb": "mixGenesRabbits(uint256,uint256,uint256)", +"97203543": "getGuestCount()", +"972041e4": "getTokenTime(uint256)", +"97204d8e": "delegateProxyImplementation()", +"972072a2": "resolveChallenge(string)", +"9720dd5a": "kBit()", +"972161f7": "getFullState()", +"97217085": "maxBetDoubleDice()", +"9721dd4c": "GoldenChain()", +"972205d4": "Untethered(address,string,string,uint256,uint32,uint32,uint256,uint256,uint256)", +"97227325": "simulate_ico()", +"9722cdc6": "EarningsWithdrawal(uint256,address,uint256)", +"97235a1e": "receiveToken(address,uint256)", +"97246156": "HoQuBurner(address)", +"9724fc95": "getTotalProposalsCount()", +"9725b4a5": "BOXIcoin()", +"9725bd80": "preIcoEnded(uint256,string)", +"97267ae9": "startDividendDistribution()", +"972711cc": "KoreaShow(uint256,uint256,address,address)", +"97271615": "contract_newOwner()", +"9727e379": "addMeter(uint32,string,string)", +"97294e58": "register(address,string,address)", +"97296421": "joinTheHunt(string,string)", +"972973e7": "setOfferPrice(uint256)", +"97297467": "checkAndVerify(bytes)", +"972993e6": "b2bcToken()", +"97299d8a": "lendingDays()", +"9729d040": "_slashPower(address,uint256,bytes32)", +"9729ec26": "generateWarrior(uint256,uint256,uint256,uint256)", +"9729f9b9": "getBlockComission(uint256)", +"972ab95a": "bennylamToken()", +"972afc80": "ownerSetEmergencyStatus(bool)", +"972c169e": "datboiSupply()", +"972ca383": "MONTANATOKEN()", +"972d1ae2": "_getNextTokenId()", +"972e6151": "operationalReserveAddress()", +"972fa53f": "createTeam(string)", +"97304ced": "mintTokens(uint256)", +"973069f8": "transferRemaining(address,address,uint256)", +"97306c27": "getData3(uint256,uint256,uint256,uint256)", +"9730b305": "burnTokens(uint256,address)", +"9731a897": "famedStarMassToIds(uint256)", +"9733348a": "ProdToken()", +"9733dc79": "ManagerContract()", +"97346423": "HCOIN()", +"9734855d": "WhitelistAddressenable(address)", +"973516f2": "getH1Amount()", +"973549ea": "_setAddress(bytes32,address)", +"973628f6": "currentEra()", +"97365a0b": "safe(uint256,string,string)", +"97365df2": "sameOdd()", +"9736a590": "DistributedTokens(address,uint256)", +"9736aeb4": "OwnershipTransfered(address)", +"97374d89": "preIcoAllocation(uint256)", +"97379c32": "CBIX(string,string,uint256,uint8)", +"9737bc41": "ShineCoinToken(address,address,uint256,string,uint8,string,bool)", +"9738418c": "getVersions(bytes32)", +"973880e8": "getMinesInfo(uint256[])", +"973882e9": "returnPollStake(address,bytes32)", +"97388497": "getNumberOfRequests()", +"973885c0": "test_setMaxSize_decreaseSize()", +"9738968c": "canUpgrade()", +"9738b602": "getElementInfoView(uint256)", +"9738f92c": "transferLogicAuthority(address)", +"97391e2d": "PurchaseMade(address,bytes8,uint256)", +"9739203b": "view52()", +"9739951c": "tokenEmission(address,uint256)", +"9739db9d": "createOwnershipOffer(address)", +"973ad270": "removeArbitrator(address)", +"973b56e8": "MIN_FREEZE_DURATION()", +"973bc8cf": "getParticipantsChannel(address,address)", +"973cbc75": "testFailAppendTranch()", +"973d641e": "SplitPayment(address,address)", +"973dbfb7": "withdrawalValue()", +"973e315b": "setMigrateFromLegacyReputationToken(bool)", +"973e9b8b": "getAllowance()", +"973e9c5c": "Radiance()", +"973ea9d5": "team2Address()", +"973f6129": "adminArray(uint256)", +"973fcaef": "SIMCOIN()", +"973fe7ef": "secondWeekBonus()", +"97409192": "addRequest(uint256,string,string)", +"9740e4a2": "left87(uint256)", +"9741efe4": "currentBankroll()", +"974207fb": "logfolio(bytes32)", +"974238fd": "CreditMC()", +"97425a54": "ANMFutureVesting()", +"9742ca46": "setMiner(address)", +"9742d64a": "destroyBeneficiary(address)", +"974317dc": "ThreeDL()", +"9743ad98": "totalReservedAndBonusTokenAllocation()", +"9743c6c3": "joinMain()", +"9743dfc1": "jesterAutomaticCollectFee()", +"9743efe5": "kin()", +"974463d6": "ronerToken()", +"9744a1b1": "depositWithToken(bytes,uint256,uint256,uint256,uint256)", +"9745ac4d": "getResponseUint(int256,uint256,bytes32)", +"9745ad9c": "stageIT()", +"974626b4": "LotsaFucksToken()", +"97463b75": "getPOOL_edit_27()", +"974654c6": "finishPresale()", +"974654f4": "requiredGas()", +"9746f42b": "getBalanceTeam(address)", +"9747145b": "claimStorageForProxy(address,address,address)", +"974811fb": "tokensToEthereum_1(uint256,uint256)", +"9748334b": "PskERC20()", +"97487af8": "TOTAL_SUPPLY_ACES()", +"9748a3f2": "getOpenProposals()", +"9748bf5b": "bucketValue(bytes32)", +"9748db00": "DragonKing(address,address,address,address)", +"9748dcdc": "punish(address,address,uint256)", +"97495cce": "rate_toTarget()", +"974a832d": "rejectCertificate(uint256,uint256)", +"974b2525": "removeBurningMan(address,uint256)", +"974bd64b": "PromissoryToken(bytes32,address,uint256)", +"974c86b5": "Buy()", +"974cf025": "lockDonationReceiver()", +"974e7dc9": "_getWeekTotalStake(uint256)", +"974ee3bb": "_updateLockUpAmountOf(address,address)", +"974ef924": "parseBool(string)", +"974fa121": "GiveAnAngelCS(uint256,address)", +"974fd2f3": "setLastBattleResult(uint64,uint16)", +"975057e7": "store()", +"97508f36": "pollNonce()", +"97514d90": "sellOrder(uint256)", +"97518f74": "_OmnesCoinToken()", +"975289fd": "getPriceVolume(uint256)", +"9752bcd3": "guaranteedBuyersLimit(address)", +"9752f163": "deployAgent()", +"975347b8": "removeAddressFromAccessControl(address,uint8)", +"97537bdf": "BotCoin()", +"9753a84e": "PCHAlN()", +"9754a4d9": "grantVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool)", +"9754a7d8": "pauseSell()", +"97557f6a": "QTB(string,string,address)", +"9755a710": "hasWinner()", +"97566aa0": "getMintDigest(uint256,bytes32,bytes32)", +"97567579": "getTokenWithdrawalAllowance(address,address)", +"975739a5": "maxKudosToMember()", +"9757e8a3": "customerCount()", +"97584b3e": "_hasAvailability()", +"9758af1e": "doesEntryExist(bytes32)", +"9758fd0d": "closeChannel(bytes32,uint256,address,uint256,address,uint256)", +"9759512b": "LogRefund(uint256)", +"9759c160": "BuyCore(address,uint256,uint256)", +"975b123e": "get_firstbytes(bytes,address)", +"975bad75": "_createCountryId(uint256)", +"975be231": "emitPricesUpdated(uint256,uint256)", +"975c2308": "getHeir(uint256)", +"975c5cab": "getSanageLink(uint256)", +"975c95da": "ICO_PERCENTAGE_5()", +"975dfff9": "monsterIdToTradeable(uint256)", +"975e001a": "tokenBonusForForth()", +"975e463a": "addInvoice(address,uint256,uint256,uint256)", +"975e76b3": "transferAdvisorsToken(address,uint256)", +"97603560": "rescueTokens(uint256)", +"9760b450": "_Stand()", +"97614302": "playCount()", +"976160fa": "SetDesignatedRouterSRV(bytes32,uint256,bytes,bytes)", +"9761cd63": "reduceHatchCooldown(address,uint256)", +"97623b58": "removeContract(string)", +"97624631": "assertEq(bytes,bytes)", +"9762737a": "remove_branch(uint256,uint256,uint256)", +"9762e9ea": "icoStartedTime()", +"9762f802": "hardCapReached()", +"976371c9": "_isTokenOwner(address,uint256)", +"9764053b": "_price_tokn_ICO2()", +"9765b4d7": "autoSend()", +"9766178c": "tradeDealRequested()", +"97668720": "set_centralAccount(address)", +"97672729": "releaseLockedTokens(uint8)", +"97679646": "whitelistMinTok(address)", +"9767dae8": "userWithdrewWei(address,address)", +"9767fff7": "setImageOwner(address[16],uint256,address)", +"976898c7": "bid(string,string,string,string)", +"976934ac": "dCHF()", +"9769eacf": "setBuyOpen(bool)", +"9769f0b0": "sellToken()", +"976a0b82": "vettingTime()", +"976a77b6": "freeForCarrots(uint256)", +"976a8435": "units()", +"976b01c0": "setNotRetractable(bytes20)", +"976b59b5": "ElyxrShrimpFarmer(address)", +"976bd47d": "LOOMIA2()", +"976bdba4": "makeOrder(address,address,bytes32,uint256,uint256)", +"976c3d04": "calculateTokenPrice(uint256,uint256)", +"976d00f4": "auditSecret(bytes32)", +"976d16d5": "getTotalAccessories()", +"976d36d0": "totalSupply1()", +"976e0da9": "getNextPrice(uint256)", +"976e14d6": "salePriceWei()", +"976f37fd": "lowCompose(uint256,uint256)", +"976f6c92": "lastBlock_a19Hash_uint256()", +"976fcda7": "WithdrawlRemainingPAT()", +"97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", +"97709ce7": "setRaffleAddress(address)", +"977174ff": "normalRoomMax()", +"9771ccc8": "removeERC20(uint256,address,uint256)", +"97722acf": "getCapOfToken()", +"9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", +"9773252a": "isInBonusList(address)", +"9773489a": "forceOffsetExecuteMaxFee()", +"97734b85": "BNB(uint256,string,uint8,string)", +"9773b22e": "_HachirokuToken()", +"9774c190": "ShieldCureToken()", +"977564ed": "Zylli()", +"977567a4": "ico(uint256,address,uint256)", +"977615a3": "startDatetime()", +"9776415f": "setConntractEnable(string,uint256)", +"9776aacf": "addToken(bytes32,address)", +"9777487d": "sponsorValue()", +"977785c5": "testInitalBalanceUsingDeployedContract()", +"97779e1b": "isStop()", +"9777a30e": "EYHToken()", +"9777aa49": "owner_endGetting()", +"97788180": "GetCitySnapshot()", +"9778a177": "ManualPurchase(address,address,uint256)", +"977919bf": "adjustFeeAmount(uint256)", +"97792f2f": "PembiCoinICO()", +"97799d47": "Tmc4(uint256,string,uint8,string)", +"9779dcd9": "sendInvestmentsToOwner()", +"9779e135": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256)", +"977a5ec5": "hold(address,uint256)", +"977a8f1b": "logTokenTransfer(address,address,uint256)", +"977ab3c2": "mintarget()", +"977af81c": "changeMessage(bytes32,string,uint8,bytes32,bytes32)", +"977b055b": "maxPurchase()", +"977cdc7e": "completeDefaultOperators()", +"977d0f9b": "escape(uint256[],uint256[],uint256[],uint256[])", +"977d2c45": "totalWallets()", +"977d6276": "getOrderPriceInfo(address,address,uint256,uint256)", +"977d996d": "createEvent(uint256)", +"977e09e6": "addGameRecord(address,uint256,int256,uint256,uint256,address,uint256,uint256)", +"977ed151": "fetchCancelledOrdersForPayer()", +"977eda79": "txLog(uint256)", +"977f1213": "FucksToken()", +"977f3b05": "calculateRegionSalePixelPrice(uint256)", +"977f7c7e": "bet_on_team_2()", +"977f9e24": "offlineDonate(uint256,uint256)", +"977ff98f": "currentSaleAddress()", +"97810850": "setPlaySeed(address)", +"9781a37e": "setCooldown(address,uint256)", +"9781c3ca": "buyTokensSigned(address,bytes)", +"9782c9ef": "unfreezeTrading()", +"9782e1ec": "ProxyMock()", +"9783585d": "setState2WithStop(uint256,uint256)", +"9783bef4": "EighthContinentSocialMarketplaceToken(uint256,string,uint8,string)", +"978414bd": "transferZTXOwnership(address,address)", +"9784696c": "PauseOff(uint256)", +"97848574": "NevadaBlackBook(address)", +"9784af62": "createTokenContract(string,string,uint8,uint256)", +"9784f585": "crowdsaleHardEndTime()", +"97871e56": "EtherPush()", +"9787a6b3": "setUint8(int8,uint8,uint8)", +"97883d1f": "tokenPriceMultiplies(uint256)", +"9788a8e7": "HOU(uint256,string,uint8,string)", +"9788c342": "HardCapReached()", +"9788d5ff": "_updatePrices(address[],uint256[])", +"9789103f": "fallbackProposal(address)", +"9789f9da": "crowdsaleFinishTime()", +"978ab53b": "withdrawFundInsurance()", +"978afdc8": "getBountyAmount(address,address)", +"978bbdb9": "feeRate()", +"978bc247": "_checkSetSkill(uint256,address,uint8,uint256,uint256,uint256)", +"978c5b15": "LOCKED_2Y_DATE()", +"978ca331": "mintSub(address,uint256)", +"978cb570": "firstTimer()", +"978d5c0e": "ASCCoin()", +"978d602a": "withdrawETH(address,address)", +"978d6cff": "ICO_TOKENCAP()", +"978dabbe": "test_fourValidEqBytes32()", +"978f68b5": "cancelListing(bytes5)", +"978f8934": "createPromoKydy(uint256,address)", +"9790268b": "setRewardBlockThreshold(uint256)", +"97905a88": "recoveryKey()", +"97907827": "sharesHeld()", +"97911fd7": "MyGameToken()", +"97912c2f": "startPreICOTime()", +"979141ea": "logFeeTokenBurned(address,address,uint256)", +"979260bd": "reserve2Address()", +"97936258": "GetBaseN(uint256,uint256,uint256,uint256)", +"9793714f": "approveSettingDeprecation(uint256,bool)", +"9793ebf4": "getBooleanMapValue(string,address,address)", +"97950740": "roomForBirth()", +"9795a644": "BITWhaleBalance()", +"9795aabf": "setNewTokenOwner(address)", +"97971c69": "TwentyOneMillionToken(address,uint256)", +"97976d15": "raisedUsing(uint256)", +"9797f51f": "ELTToken(address,string,string,uint256,uint256,uint256,address)", +"9798532f": "_priceToTax(uint256)", +"9798a106": "isNullAddress(address)", +"9798dfc2": "ReinvestAmount()", +"9798e639": "distributeLCWP(address[],uint256)", +"97990635": "SmartInvestmentFundToken(address,address)", +"97992a04": "villainIndexToOwner(uint256)", +"97994b96": "changeOpenNumber(uint256)", +"97997ebb": "stakeWithdrawDisallowPeriod()", +"979a5e1a": "set_presale_arbits_sold(address,uint256)", +"979af14d": "checkAccount(string)", +"979b49de": "checkBonusTokenAmount(address)", +"979b6f6f": "RoundInfo()", +"979bc638": "withdrawBidForPunk(uint256)", +"979bfba7": "PUMPHODL()", +"979c2441": "times7()", +"979c7a38": "MultiWhitelist(address)", +"979ca729": "IcoContract(address,address,uint256,uint256,uint256)", +"979cf824": "tokenSaleEnabled()", +"979d6dc7": "HUT34_WALLET()", +"979e0f22": "AuctionResumed()", +"979e199d": "setProceedsAccount(address)", +"979e8852": "existsEscuela(uint256)", +"979f1976": "tryInsertSequenceId(uint256)", +"97a09338": "freeMoney()", +"97a0a3ec": "SpeedCashTokenContract()", +"97a1c2cd": "preSaleFirstDay()", +"97a1d3f7": "_emitHolderOperationalChanged(bytes32,bool)", +"97a28819": "resetDividends()", +"97a315ff": "CHF_Omnidollar()", +"97a33431": "toContractDie(bytes32,bytes32,uint256)", +"97a42022": "scanOutputs(bytes,uint256,uint256)", +"97a432ff": "addressesToUsernames(address)", +"97a53219": "setSwapToken(address,uint256,uint256,uint256,uint256,bool)", +"97a55722": "get_win_coefs()", +"97a6278e": "removeAgent(address)", +"97a629aa": "shareholdersBalance()", +"97a6ef4a": "AutoCoinToken()", +"97a7293d": "getCCH_edit_5()", +"97a75fe8": "seriesASupply()", +"97a7804e": "FrozenToken()", +"97a7cfb4": "takeTheTorch_(uint256,address,address)", +"97a8c6ec": "emitEvent(string,address,address,uint256,uint256,string,string)", +"97a95086": "getBAU(bytes32,address)", +"97a97005": "transferAllArgsYesAllowance(address,address,uint256,address)", +"97a989c2": "__getbalance()", +"97a993aa": "buyers(address)", +"97aa28b4": "publicUnlock(address,uint256)", +"97aaa73c": "timeBasedBonus(uint256)", +"97aab362": "setReg(address)", +"97aae114": "setDeprecatedManual(uint256,address,bool)", +"97ab4786": "reserved(uint8)", +"97ab5baa": "withdraw_if_failed()", +"97ab9e7a": "contestStartTime()", +"97aba7f9": "recoverSigner(bytes32,bytes)", +"97ac37de": "_purchase(address,uint16,address)", +"97ac3b51": "CHXToken()", +"97ac3cd9": "noMoreNextRoundSetting(bool)", +"97ac4a25": "isRoundActive(uint256)", +"97acb3bb": "addAction(address,bytes4,bytes32[])", +"97acb94d": "withdrawalFrom(address,address,uint256)", +"97ad1cbf": "alterDividendCooldown(uint256)", +"97ae4491": "serviceFeeWithdraw()", +"97aeb405": "IFIN()", +"97aeb7ad": "setTeamByAddress(uint8,address)", +"97aeecd0": "AtraToken()", +"97af34db": "listActiveBets()", +"97af77b8": "getVisaAmountPaid(address,uint256,uint256)", +"97af90ae": "_userRefund(address,address)", +"97afb40c": "request_withdrawal(address,uint256)", +"97b0484e": "TOKEN_ICO2_LIMIT()", +"97b081ef": "setOrderDealTimeInterval(uint256)", +"97b09aa6": "tokenSaleAgreement()", +"97b0ad7d": "Fizzy()", +"97b10976": "removeAmountForAddress(uint256,address,address)", +"97b150ca": "tokenAmountOf(address)", +"97b1b2b7": "getFundStatsMap()", +"97b1ff1d": "getNumberOfBeats()", +"97b27c46": "decision(bytes32,string,address[],uint256[])", +"97b2f556": "numPlayers()", +"97b3116e": "setPrePaidFee(uint256)", +"97b34e1f": "readBools(bytes32[])", +"97b3ab70": "BetComplete(bool,uint256,uint256,uint256,address,uint256,bool)", +"97b3b441": "isAvailable(uint40)", +"97b4ddac": "currentGenesisAddresses()", +"97b51442": "setMinimumWait(uint256)", +"97b61c68": "giveOwnership(uint256,address)", +"97b68b60": "finishFreeGetToken()", +"97b6cf42": "icoParametersSet()", +"97b73c5c": "setMockUint256(int256,bytes4,uint256)", +"97b740e2": "addAuction(uint40,uint40,uint128)", +"97b817c9": "beginGame(address,uint64)", +"97b9d025": "past_present_future()", +"97ba42b3": "getsometoken(address,uint256)", +"97ba89c9": "setBetUnit(uint256)", +"97bb0de0": "mintLockedTokens(uint256)", +"97bb2a63": "newvow(uint256,address)", +"97bd820a": "divRound(uint256,uint256)", +"97bdc7c8": "changeWhitelist(bool)", +"97bdc9cc": "setBytes(address,string)", +"97bec0ec": "unlockCZR(address,uint256)", +"97bfd8cb": "_setClassMechValue19(uint256)", +"97bff97f": "broadcastTransfer(address,address,uint256)", +"97c0262a": "commissionWallet()", +"97c06deb": "debit(address[],uint256[])", +"97c08da6": "assignBurner(address)", +"97c112d5": "ItemInfo(uint256)", +"97c25f95": "coupon(address,uint256)", +"97c2a9b7": "withdrawFoxt(address,uint256)", +"97c3ccd8": "ban(address)", +"97c414df": "registerAccount(address)", +"97c5ed1e": "showMeTheMoney(address,uint256)", +"97c6006e": "SetFreeQDA(uint256)", +"97c6e24d": "ARMOR()", +"97c8f311": "distributeTokens(address[],uint16[])", +"97c9085f": "fromBytes96(bytes32,bytes32,bytes32,uint8)", +"97c911d5": "InitMaster(address)", +"97c93398": "test_insert_atPosition()", +"97cb2c17": "getSpaceshipProductPriceByModel(uint16)", +"97cbdfc9": "transferAbnormalERC20Tokens(address,address,uint256)", +"97cc3070": "setOrderFill(bytes32,uint256)", +"97ccd07b": "medium()", +"97cd1829": "copyEntireGlofile(address)", +"97cda349": "getLargeBonus()", +"97cdcbfd": "trainEquipment(uint256,uint256,uint256)", +"97ce3a4b": "getUnitsInProduction(address,uint256,uint256)", +"97ce8c43": "setFashionSuitCount(uint16,uint256)", +"97ceb310": "setHardCapInEther(uint256)", +"97d02e00": "DaoChallenge(address)", +"97d0b02c": "setUserManager(address)", +"97d11588": "createStandardDerivative()", +"97d159e7": "setMinTransfer(uint256)", +"97d32a12": "afterCrowdsaleAddress()", +"97d33c33": "burnNotDistrTokens(uint256)", +"97d351b3": "_doTradeForEth(address,uint256,address)", +"97d3624c": "TransferableMeetupToken(string,string)", +"97d3c683": "priceStep8()", +"97d425cb": "canBeTransfered(address,uint256)", +"97d47a60": "registerAccountant(bytes,address)", +"97d4cfb9": "initialTokenSupply(address,uint256)", +"97d4f342": "playerOneCommit(bytes32)", +"97d551a1": "TEC_TOKENS_NUMS()", +"97d5c6a1": "setEndTime(uint256,uint64)", +"97d5f823": "sendPOSTokens()", +"97d61c46": "getRedeemValue(uint256)", +"97d63f93": "initSupply()", +"97d68c77": "resolveSupply(address)", +"97d6ce76": "companyTokensInitial()", +"97d6daba": "expropriate(uint256)", +"97d74abd": "dataSourceCallbackTeamId(uint256,uint8)", +"97d7f2ee": "FundToken()", +"97d814c3": "withdrawCeo(address)", +"97d870c8": "tokenWithdraw(address,address,uint256)", +"97d88cd2": "subAllowance(address,address,uint256)", +"97d8a7e9": "getFreelancerHourlyRate(address,address)", +"97daa043": "register(bytes,address,address,uint256,bytes)", +"97db0a7b": "soccerGo()", +"97db7edb": "stopEmergency()", +"97db9a95": "changeAuthority(address,address)", +"97dbfc5a": "ICOEnabled()", +"97dc4a13": "airdrop(uint256)", +"97dc4c6f": "earlyBirdMaxPerPerson()", +"97dc97cb": "authorizedCaller()", +"97dd9892": "getCurrentRoundTeamCos()", +"97ddeb77": "LimitReached(address,uint256)", +"97dedb06": "strToBytes32(string)", +"97df212b": "getPersonaAttributes(address)", +"97df5028": "winProbability(address)", +"97df573e": "storageAddr()", +"97df8a50": "changeSuperContract(address)", +"97e10a79": "transferERC20(address,uint256,address)", +"97e12b0d": "lastRoundEndTimestamp()", +"97e1754c": "previousEntries(uint256)", +"97e18af3": "crowdsaleLock()", +"97e1d68d": "PRESALE_BASE_PRICE_IN_WEI()", +"97e1e9b5": "ILFManagerCandidateKeyHash()", +"97e1f48b": "userReinvest()", +"97e30fc4": "setPendingValue(uint256,address)", +"97e42023": "setRebuyThreshold(uint256)", +"97e484d2": "ElementeumTokenProxy(uint256,address[],address[])", +"97e4c28b": "transferPrefix(string,address)", +"97e4fdea": "pause_2()", +"97e4fea7": "exists(bytes8)", +"97e5d18a": "thirdLoos()", +"97e645f3": "isCallbackDone(address)", +"97e6c7f7": "getWeeklyDividends()", +"97e6dada": "_own(uint8)", +"97e851f6": "updateOptionalCommission(uint256,uint256,address)", +"97e8b490": "edit(uint256,address,uint256,string,string,string,string,uint256,address,uint256,string,string,string,string)", +"97e8e520": "stakeToMany(uint256[],uint256[])", +"97e92794": "digitalSignature()", +"97e950f7": "setMaxInvocations(uint256)", +"97e9a0bf": "contractPrice()", +"97e9beef": "withdrawUser(uint256,address)", +"97ea403d": "getCityResources(uint256)", +"97ea6e15": "bytesToBytes7(bytes1[7])", +"97eb0eab": "addAirdrop(address,uint256,bool)", +"97eb147d": "rlc_bounty()", +"97eb1800": "investorsStockInfo(address)", +"97ebe0d6": "approveTokenCollection(address,address,uint256)", +"97ec23cb": "getCreationTime(uint256)", +"97ec642c": "MAX_WITHDRAWAL()", +"97ec72b8": "STLHToken(string,string,uint8,uint256)", +"97ecd379": "nPlatCurTotalEth()", +"97ecfaab": "delWhitelist(address)", +"97ee041b": "incrementBasketsBurned(uint256,address)", +"97ee0a05": "SendPreReserved3()", +"97eea08b": "Mineral()", +"97eede11": "FACTOR_10()", +"97ef9779": "TransferBase(uint256,string,string)", +"97efff39": "amountToWithdrawOnDate(uint256)", +"97f1943c": "ROG()", +"97f22ea9": "addToPresaleWhitelist(address)", +"97f28419": "getAdminAddressIndex(address)", +"97f2b4b0": "isBetActive(bytes32)", +"97f2f5c3": "maxTokensForSale()", +"97f3016b": "finishLock()", +"97f3bb0c": "removeLocking(bool)", +"97f3c21e": "isUpgradeFinished()", +"97f3de37": "SetDataServerAddress(address)", +"97f46527": "getNextVestingQuantity(address)", +"97f58e91": "isLiquidating()", +"97f59897": "_nextOwner()", +"97f606eb": "ShowUnrelease(address,uint256)", +"97f735d5": "isBanned(address)", +"97f7b4f7": "getBid(address,uint256,uint256)", +"97f8fee1": "CORPAddress()", +"97f9653a": "statisticaldata(uint256,address,address,uint256[5],uint256[5])", +"97f990f2": "KNOWLEDGE_TO_GET_1FRANKLIN()", +"97fa346d": "sellTank(uint32,uint256,uint256,uint256)", +"97fb070b": "registryRequestDocumentation()", +"97fb2a14": "JTU()", +"97fb2cea": "getCustomerAtIndex(uint256)", +"97fbbfd1": "CoinstocksToken(uint256,string,string)", +"97fc93ab": "cashBack(address)", +"97fcb54e": "transfer_eth(address,uint256)", +"97fce1bb": "setGameLogicContract(address)", +"97fcedba": "setTotalInvestedToken(address,uint256)", +"97fdf5f2": "FOUNDERS_TOKENS_VESTED_1()", +"97fe5ea3": "addAdvocatedTAOLogos(address,uint256)", +"97fe728a": "useName(string)", +"97fe9129": "setCCH_edit_27(string)", +"97fea4e3": "showPlayerBetInfo(uint256,address,address)", +"97feb926": "depositERC20(address,uint256)", +"97fed5f2": "TokenXGroup()", +"97ff335b": "AddNewCourse(string,string,string,string)", +"97ff5be4": "getData_12()", +"97ff6d10": "cancelPlatformWithdrawal()", +"98004a2a": "processContributions(address,uint256)", +"980054be": "icoIsFinished()", +"9800fc16": "removeAllowedContract(address)", +"98019a41": "adjustAddressWealthOnSale(uint256,address,address,uint256)", +"9801ca60": "getWeeklyTokensForHoldersAmount()", +"9801cb8e": "ProofOfExistence()", +"98024a8b": "getPartialAmount(uint256,uint256,uint256)", +"98024f18": "testThrowsTransferDisableNotEnabled()", +"9802dd1a": "Dpc()", +"98036e7a": "ADVISORS_PERCENTAGE()", +"98041ea3": "addMember(address,uint256)", +"980481e0": "isABatchOpen()", +"98057510": "addLockedTokeB(address,uint8,uint256)", +"980591f4": "pause(bool,string,address,uint256)", +"9805d7d2": "landsOf(address)", +"98063de4": "LogPollVoted(bytes32,address,uint256)", +"98066221": "FlowchainToken()", +"980934ec": "create(address,string,bytes32,uint256)", +"9809a38b": "supplyPerColor()", +"980b05e0": "_createCollectible(bytes32,uint256,uint256)", +"980b5335": "getAvailableAmountWithdrawal(address,bytes32)", +"980c2f21": "releaseForeignToken(address,uint256)", +"980cf053": "stage4Bounty()", +"980d75ab": "Readcoin()", +"980dc482": "addOrder(address,uint256,uint256,uint256)", +"980e6e08": "timeLeftToCook()", +"980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", +"980ee29f": "MakeDai(address,address,uint256,uint256)", +"980f62b1": "kickoff()", +"980f8e5e": "createPaper(string,bytes32,uint256,uint256[],address,address[])", +"980fb0aa": "abortByBroker()", +"980ff6c6": "executeProposal(bytes32)", +"981012f2": "AddressChecker()", +"9810e089": "return_owner()", +"98110106": "_ownerTransfer(address,address,address,uint256)", +"981101f5": "VERToken()", +"981111ef": "factorial()", +"9811c7c1": "target(uint256)", +"98123528": "numThings()", +"98129013": "left47(uint256)", +"981489b8": "setWidthrawFor(string,uint256,uint256)", +"9814d0ee": "isProposalEnded(bytes32)", +"981566ce": "LotteryCore(address)", +"9816006c": "DeWeiSecurityServiceToken()", +"98163597": "getTotalVolumeEth(address)", +"9816af58": "getUserPools(address)", +"98179c41": "burnBalance(address)", +"98182950": "TARGET_TOKENS_ADDRESS()", +"98191a20": "inPreSale3Period()", +"981a1327": "tokenToExchangeTransferOutput(uint256,uint256,uint256,uint256,address,address)", +"981a60f5": "extractNameFromData(bytes)", +"981ae401": "ACTION_TAX()", +"981b24d0": "totalSupplyAt(uint256)", +"981b405b": "willChangeCost()", +"981b69b7": "soldForFifth()", +"981c6946": "holderAdded(uint256,address)", +"981c80b3": "Maia(address)", +"981c9e07": "PBSU()", +"981cc7ae": "GetRichQuick()", +"981dd797": "process_contribution(address)", +"98203e6b": "setDeprecated()", +"982078b8": "requestTokensFromCrowdsale()", +"98221166": "changeTypeHash(bytes32)", +"982270e7": "setPOOL_edit_6(string)", +"98229465": "_isAuthorizedOrOwner(address)", +"982296a8": "emitEvent(string)", +"9822e501": "exchangeOwner(uint256,uint256)", +"98234a6c": "max_crowd_vitas()", +"982371b4": "cancelOrder(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"9824425a": "takeOrder(uint256,uint256,uint256,uint256)", +"982475a9": "approveKyc(address[])", +"982495c7": "attend(address[])", +"9824cec8": "CryptoTicketsICO(address,address,address,address,address,address,address,address,address,address)", +"9824e7f7": "userWalletTransferEther(address,address,uint256)", +"98251353": "grantedWallets(address,address)", +"98257d84": "changeDefaultTimeLock(uint256)", +"982657f3": "startGame(uint256,uint256,uint256,uint256)", +"98270d24": "atxToken()", +"982713e1": "ComplexExchanger(address,uint256,uint256,address[],uint256,address)", +"98278bc8": "DefaultSweeper(address)", +"9827a996": "terminateProject(bytes32)", +"98290c53": "stakeBelaSplit(uint256,address)", +"98296c54": "assertEq(uint256,uint256)", +"982a2376": "settingExist(uint256)", +"982a83eb": "createCrowdsale(uint256,address,string,string,uint256,uint256,uint256)", +"982a96e3": "bonusRemaining()", +"982b5dd2": "processVestingRules(address,address)", +"982b6689": "transferMultiple(uint256,address[])", +"982bb5d8": "setDepositsSigned(bytes32,bool)", +"982c0455": "getSpecifiedComment(address,uint256)", +"982d1270": "shiftIn(uint256,bytes32,bytes,address)", +"982e5721": "getRateNow()", +"982f4a21": "INFOCORP_DONATION()", +"983032c2": "newShare()", +"983086df": "HMTCrowdsale(address,uint256,uint256,uint256,address,address)", +"9830a8fd": "getCustomerTxRegistry(address)", +"9830aa07": "UBlockChain(address)", +"98313b10": "splitTokensAfterDistribution(uint256)", +"98315249": "getUsersMicroModulesIds()", +"9831ca4d": "joinMiniGame()", +"983234b6": "setAmounts(uint256,uint256)", +"9832ee65": "resultsWeightedByTokens()", +"98337afb": "largeCount()", +"983485e1": "buyEthereumToken()", +"98358f82": "cap_in_wei()", +"9835efaf": "setAmountToDistribute(uint256)", +"98366d1c": "isMint(int256,address)", +"98390730": "takeAllEther(address)", +"98391c94": "muteMe(bool)", +"9839eafd": "getTicketNumbers(uint256)", +"983a7f47": "setDNA(uint256,uint256)", +"983a8c8a": "_setRoles(address,uint8[])", +"983a95b2": "trackClick(address,address,address,address)", +"983b2d56": "addMinter(address)", +"983b94fb": "finalizeAuction(bytes32)", +"983bc49d": "currentBalance(address,address)", +"983c09ee": "steal(address,address,uint256)", +"983c0a01": "closeCrowdsale()", +"983c4647": "TunTokenERC20()", +"983c7630": "setPermissionByAddress(uint8,address,bool)", +"983c8449": "VzanToken(uint256,string,string)", +"983ce499": "_set2()", +"983df7cd": "isOperatorAuthorizedBy(address,address)", +"983e1318": "Hack()", +"983ef725": "getDifficulty(uint256)", +"983f724b": "getCassetteType_()", +"9840a504": "NFCToken()", +"9840a6cd": "getSubscriptionValue(bytes32)", +"9840a8f8": "minAllowedBetInTokens()", +"98413ff1": "extensionByIndex(uint256)", +"98416339": "KRYPTONIUM()", +"98419ec5": "shouldThrowOnAttemptToTransferWhenNotOwner()", +"9841a2d8": "startSale1Phase()", +"9842692b": "_contractFallbackERC223(address,address,uint256)", +"984274af": "preTgeCap()", +"9842a37c": "__callback(uint256,bytes32)", +"9842ec30": "drawItemLottery(address,uint256)", +"9843e648": "setItemsEC(address,address)", +"9843eae3": "airdropActive()", +"984413b8": "_eraseNode(bytes32)", +"9844347b": "createCertificate(bytes,bytes,uint256,bytes)", +"98445e6f": "getCurrencyPayment(address,uint256)", +"9844613e": "ViewCoin()", +"984474fb": "price_token()", +"9844c294": "existenceAllowance(address)", +"9844d5a7": "Martcoin(uint256,string,string)", +"984572d0": "privatePreICOBonusPercent()", +"9845b448": "PHASE5_START_TIME()", +"98475e30": "BTCETH(uint256)", +"9847d267": "GoodLuckCoin()", +"984809bf": "setPublicOfferingLimit(uint256,uint256)", +"984877b0": "GoalHitWithdrawl()", +"9848fef8": "tokensReleasedToEcosystem()", +"984a27be": "m_SMRMinter()", +"984a470a": "forwardedOutcome()", +"984a74f7": "TazitToken()", +"984ac378": "lotteryTitle()", +"984bc8c5": "placeTicket()", +"984c0450": "withdraw(bool,uint256)", +"984c14ac": "setupVolumeMultipliers(uint256[],uint256[],uint256[])", +"984ce0fd": "transfertoacc(string,uint256)", +"984d11fc": "validSupply()", +"984d4a93": "setAdminsAddress(address)", +"984ddfe8": "DevTokensHolderMock(address,address,address)", +"984e1ff4": "mock_setShouldSucceedTransfers(bool)", +"984e2829": "_updateState(address,int128,uint128,uint256)", +"984e5a0b": "FunKoin()", +"984ec03e": "_storeStakes(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"984fba49": "removeInvestorFromWhiteList(address)", +"9850d32b": "maintainer()", +"98512d72": "round1TokensRemaning()", +"9851553b": "EthereumTravelToken(address,uint256,string,string)", +"9851663f": "_computeCurrentPrice(uint256,uint256,uint256,uint32)", +"98519340": "setParameters(uint32,uint32,uint32,uint32,uint32,uint32)", +"9851b2bd": "AIN()", +"9851fd9a": "eventStatus()", +"9852099c": "depositId()", +"9852595c": "released(address)", +"9853b234": "createPhoenix(uint256,uint256,uint256)", +"98544710": "setKeyHash(bytes32)", +"98547a45": "donacionCruzRoja()", +"985540b9": "remove(int8,int8)", +"98575188": "removeUser(address)", +"9857650c": "claimIFactor(bytes32,uint256)", +"9858cf19": "FREE_SUPPLY()", +"9859387b": "createAccount(address)", +"98593b7a": "SenseProtocol()", +"98596560": "get_activity_by_id(uint256,uint256)", +"98596726": "note(uint224)", +"98597629": "max_value()", +"98598905": "subVirusDef(address,uint256)", +"985989d2": "ROLE_UNDER_MINTER()", +"9859adf0": "_payByEth(uint256)", +"985a882c": "MINEX()", +"985b71f1": "calcBindedBlindHash256(string,address)", +"985bcf34": "canExit(bytes32)", +"985bdd43": "isExchangeAlive()", +"985c7564": "getNextTournamentData()", +"985d43f1": "TOTAL_APC_SUPPLY()", +"985d5702": "ExShellStock()", +"985dea23": "getETH(uint256,address)", +"985df3a7": "setHeroAssetAddress(address)", +"985e2cdf": "updateExchange(address,address,bool,bytes4[])", +"985e4634": "CreateLPT(address,uint256)", +"985e4cd0": "sumBalanceOf(address)", +"985f26f6": "AddOwners(address[])", +"985fc7ea": "destructionAddress()", +"98603cca": "disableBurning()", +"98608111": "getStorageNameHash()", +"9860d0a5": "setTransferFee(uint32,uint32)", +"98636f32": "isException(address)", +"98646d68": "setNumDesignatedReportNoShows(uint256)", +"98650275": "renounceMinter()", +"98668b24": "tokensVotedForDisable()", +"98672215": "getTearAward(address,uint256,uint256)", +"98683105": "CCH_EDIT_1()", +"98686304": "Elance()", +"986876e6": "ChannelCreated(address,address,uint192)", +"98688a95": "Ai()", +"9869aca0": "setSchedule(uint256,uint256)", +"9869b736": "ONE_MILLION()", +"9869f1b7": "migrateTokens(address,address)", +"986b3a9a": "getCanvSize()", +"986b5676": "loveID()", +"986bb99a": "setPOOL_edit_30(string)", +"986bf5e8": "addAudit(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"986c1938": "setRegistrarAuth(address)", +"986c7cc7": "BitArbToken()", +"986cc311": "executeProposal(uint256,uint256,uint256)", +"986ccc7f": "setHelper(address)", +"986d08a8": "OSECOIN()", +"986dcd4d": "setCycleLimit(uint256)", +"986e791a": "getString(bytes32)", +"986e7ed3": "AssignGGCOwner(address)", +"986ec464": "tokensLeftDrain(uint256)", +"986ee316": "VoteMemberCandidate(uint256)", +"986f3c9b": "addComment(address,address,bytes32,bytes32,bytes32)", +"986f737b": "onrs(uint256)", +"98702402": "refPercentage(address)", +"9870d7fe": "addOperator(address)", +"987196ae": "HabibaTokenCoin()", +"9871cb8f": "Moneto(address)", +"9871e4f2": "makeSubscriptionId(address,uint256)", +"9871e510": "hashExists(string)", +"9871ee02": "PCT()", +"98729c37": "_changeUpPrice(uint256)", +"9872a20a": "registerUInt(address,uint256)", +"98738f97": "preIcoBonuses(uint256)", +"9874a3d0": "WAIT_BLOCKS()", +"9874cdf4": "performRefund(bytes32,bytes32)", +"9874f5d7": "addString(string)", +"9875958c": "PlaceRocketForSale(uint32,uint80)", +"98764f22": "setPrice(uint32,uint64)", +"9876962a": "setstart()", +"9876ee61": "coinsAddresses(uint256)", +"98772e80": "disrupt()", +"987757dd": "settle(bytes32)", +"98779240": "transfersAllowDate()", +"9877bdff": "Alice()", +"9878cc51": "MELON_ASSET()", +"98791010": "deleteHpbNode(address)", +"987b7967": "BLOCKMALLToken()", +"987b904b": "BOUNTY_LIMIT()", +"987bc844": "HolikopterTokenToken()", +"987c4311": "setPublicChainlinkToken()", +"987c6b9d": "swap(address,string,string,uint256,uint256,uint8,bytes32,bytes32,uint256)", +"987c9efd": "PayIreward()", +"987cb9b0": "updatePublicSale(uint256)", +"987cec61": "converted(uint256)", +"987d9768": "ILF(address)", +"987e565d": "buyKim(uint256)", +"987ea899": "addAssetManager(address)", +"987eae8f": "totalPets()", +"987eeee5": "createMain()", +"987f3bdb": "_playGame(uint256,uint256,uint256,bytes32)", +"987f710a": "TIME_TO_COOK()", +"987faf18": "prevJackpotsLength()", +"9880472f": "multiSigOutputAddress()", +"98804938": "deposit_eth(uint8,uint256)", +"98806bf0": "convertTokens(address)", +"98827d5e": "createCoins()", +"9882e15e": "withdrawOverdue(address,address)", +"9883521e": "presaleProcessed()", +"9883548a": "fint32(int32)", +"9883b9f4": "addAmendment(string)", +"98842c3b": "ipfsGet(uint256)", +"988483d4": "convertMsgValueToBytes20()", +"98864aaf": "getPropertyFlag(uint16)", +"98866c1a": "personUpdateDOD(uint256,int256)", +"98866ead": "_gensGenerate()", +"9886de1f": "multiTransfer(uint256,address[])", +"98876609": "create(bytes32,address,bytes32[])", +"98880043": "addGame(string,string,uint256,uint256)", +"9888103f": "buyTokensInternal(address)", +"988a18f6": "claimTokens(address[],address)", +"988a9fb5": "getTokenIdOfAddressAndIndex(address,uint256)", +"988b1d86": "remoteApprove(address,uint256)", +"988b590f": "withdrawBSAFE(address,uint256)", +"988ba8e8": "finishPreSaleRound()", +"988bfcfa": "_buyToken(address,uint256)", +"988bfd47": "ProxyCreationAndExecute(address)", +"988da80f": "getUserName(uint256)", +"988fc9a8": "fetchOrderByIdWithWithPayerByAdmin(string,address)", +"9890220b": "drain()", +"9890d6bc": "GetDisputesAtTheMoment()", +"9890eabe": "distributeDividendsOnTransferFrom(address,address,uint256)", +"9890f48a": "LocalStarRoster()", +"9891d61c": "getEnabledTokensLength()", +"9892003a": "TexasHoldem(string,uint8,uint8)", +"98924050": "addtoLottery()", +"98924dd6": "_doesUserExist(address)", +"9892977b": "_attributeSale(address,uint256)", +"98934c0a": "payEther(address[],address,uint256[])", +"9893f27e": "allowancePresetTransfer(address)", +"9894221a": "SendCashForHardwareReturn()", +"98943c88": "getAllWeaponData(uint256)", +"9894ba7c": "transferOut(address)", +"9894eb8e": "hashSecretKey(bytes32)", +"98951b56": "approveProposal(uint256)", +"98951bfc": "foundersAmountLeft()", +"9895dd78": "setRegularTransTime(uint32[])", +"98968f15": "purchase(address,uint256,uint256)", +"98969906": "PassportToken()", +"9896b6cb": "testToUint16()", +"98973f2b": "setRestrictedAddress(address)", +"9897e8a5": "scalarEvents(bytes32)", +"9897f916": "manualRelease(address,uint256)", +"98981756": "teamExists(uint256)", +"98983cc5": "isCrowdsalePaused()", +"9898e18c": "tokenSender()", +"9899276b": "getOwnedTokensLength(address)", +"9899722d": "newRateTime()", +"9899a2c5": "aliceClaimsDeposit(bytes32,uint256,bytes32,address,address,bytes20)", +"989a55fa": "_increaseApprovalAllArgs(address,uint256,address)", +"989b595f": "shuffleSeed(uint256)", +"989ceab1": "WhitelistAddressAdded(address,address)", +"989ced26": "updateTokenContract(address)", +"989db511": "Input()", +"989ddfce": "AdminDeleted(address)", +"989e4a8c": "_processPurchase(address,uint256,address)", +"98a05bb1": "deletePermission(address)", +"98a05cfb": "arbitroAprovaPagamento(bool)", +"98a0871d": "buyXaddr(address,uint256)", +"98a0bf6e": "ForeverChain()", +"98a0e1c8": "computeKnockoutPoints(uint8,uint8,uint8,uint8,uint8,uint8,bool)", +"98a10993": "finalizeWhenForked()", +"98a1803c": "ICONotCompleted()", +"98a1b397": "ROLE_OPERATOR()", +"98a1e1ba": "ownerSetLimits(uint256,uint256)", +"98a26497": "payCeo()", +"98a29a58": "testControlDisownNotTransferable()", +"98a2f59f": "ToLend()", +"98a30f76": "totalTokensPreICO()", +"98a322ae": "ownerComission()", +"98a33bfe": "addGlobalConstraint(int256,address,int256,bytes32,address)", +"98a34fef": "withdrawBeneficiary()", +"98a36ebf": "setTradeEventEnabled(bool)", +"98a42ec4": "verificationAddressNumberMap(address)", +"98a595a5": "requiresInitialization()", +"98a6a6c0": "isTokenSaleActive()", +"98a73afa": "getAwards(uint256)", +"98a7cafd": "setData_27(string)", +"98a87f7d": "CPCToken()", +"98a892c9": "getBylawsCashBackVoteRejectedDuration()", +"98a9ae44": "remaindersSet()", +"98a9bfd4": "is_max_goal_reached()", +"98ab1c72": "setBackgroundImage(uint256,bytes)", +"98aca922": "getReceiver()", +"98acd7a6": "getBaseToken()", +"98ad004c": "GetCollectionInfo()", +"98ad2f12": "getid(address)", +"98af629b": "winnerDecidedGas()", +"98b00ee0": "getFinalBytes()", +"98b01fe3": "totalBonusTokensIssued()", +"98b04c16": "SportistToken()", +"98b0787e": "playerTwoCommit(bytes32)", +"98b1e06a": "deposit(bytes)", +"98b23a29": "TimeShareEstate()", +"98b35e73": "saveReading(string,string)", +"98b3dfd6": "NamCoin(address)", +"98b41763": "publicGetAdvertisement(uint256)", +"98b547e0": "transfer_ownership(bytes32,address)", +"98b78849": "preStakingDistribution()", +"98b7db75": "PayForFlag(uint256)", +"98b90fe1": "closeOption(address[3],uint256[3],uint256[2],bool)", +"98b9a2dc": "changeWallet(address)", +"98b9d151": "InsuranceHolder(address,address)", +"98ba2453": "canSynthesizeWith(uint256,uint256)", +"98ba676d": "getEntry(uint256,uint256)", +"98bbc47e": "addPerson(uint256,string,string,string)", +"98bca41a": "removeSeenAddress(address)", +"98bcfbb8": "minimumTokensBeforeSale()", +"98bd359c": "deposit(address,uint128,string,uint32)", +"98bd5663": "confirmTime()", +"98bdf6f5": "tokenIdCounter()", +"98be22f7": "forfeitGame(uint256)", +"98be7c62": "minterFeePercent()", +"98be7df7": "releaseEthers()", +"98bf043d": "clearUnusedDeposit(uint256,uint256)", +"98bffb2a": "manualRecovery(address)", +"98c07938": "votersCount()", +"98c086d8": "_amountReq()", +"98c0bb94": "returnante(address)", +"98c16888": "SToekn()", +"98c20c00": "addToAllocation(uint256)", +"98c23836": "schellingDB()", +"98c31b1d": "addEvent(uint256,uint256,uint8,string,string)", +"98c39cc2": "AnubisToken()", +"98c5166c": "inResources(address,bytes4)", +"98c547b8": "setContentExtraData(bytes32,string)", +"98c562b3": "contributionsBySender()", +"98c66b7f": "_startTokenTransfer(uint256)", +"98c69648": "DEFAULT_NAME()", +"98c6a46f": "setPayoutDistributionId()", +"98c6e760": "migrateTo()", +"98c7458e": "getEventsByIds(uint256[])", +"98c83a16": "PRIVATE_SALE()", +"98c8bde6": "GICTBalance()", +"98c9cdf4": "getMinimumCallGas()", +"98c9faac": "cancelActiveAuction(uint40)", +"98ca667f": "FOUNDERS_SUPPLY()", +"98cb12dc": "isRandomPlayer()", +"98cb2342": "getNumEvenSplits()", +"98cba526": "TeamAndAdvisorsAllocation(address)", +"98cbb277": "Admined()", +"98cbefbe": "init(string,string,uint8,address)", +"98cc223f": "BiboToken()", +"98cc2c53": "VerifiedKYC(address)", +"98cc6754": "dumpBalance(address)", +"98cdf0ca": "updateConfig(uint16)", +"98ce476a": "EPTCrowdfund(address,address,uint256)", +"98cef4bd": "earlyBirds()", +"98cf6dd3": "deleteInvestorTokens(address,uint256)", +"98cf6f22": "queryN(string,bytes)", +"98cfa44e": "setFSTPrice(uint256,uint256)", +"98d0573e": "_getActiveMessageId()", +"98d07356": "getDepositValue()", +"98d0a6c7": "setBcouponAllocationFactor(uint256)", +"98d0b85f": "isNonZeroAccount(address)", +"98d0de03": "addPlayerToServer(uint256,uint256)", +"98d15134": "companiesManager()", +"98d24806": "GetPlayerById(uint256)", +"98d2e3b1": "calcTokenToWei(uint256)", +"98d30c50": "winnerCheck()", +"98d31a13": "AIR_2()", +"98d35f20": "anchors()", +"98d41484": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"98d48567": "disapproveUserKYC(address)", +"98d4cacb": "_assemblyCall(address,uint256,bytes)", +"98d4e59c": "decreaseOffsaleCountByOne()", +"98d501ca": "OysterPearl()", +"98d5a1b1": "burnFromIco()", +"98d5fdca": "getPrice()", +"98d6ceb3": "BetSetAnswer(address,address,uint256)", +"98d6d8ed": "isPresaleStarted()", +"98d70779": "contRefer50x50()", +"98d714ac": "ethereumFromAltar()", +"98d7352f": "setTokenURI(address,string)", +"98d7456f": "ShowInfo(uint256)", +"98d764be": "Myastheniagravis()", +"98d78fe2": "soldDuringTokensale()", +"98d8adc0": "DividendDistribution(uint256,uint256)", +"98d8d7b4": "Vlicoin()", +"98da2133": "SEC_contract()", +"98da8121": "lock_vote_amount(bool)", +"98daa8c2": "changeJoysoWallet(address)", +"98dacb46": "setLockPostion(address,uint256,uint256,uint256,uint256)", +"98db173f": "calcaultePrizes()", +"98dc6ae2": "divX(uint256,uint256)", +"98dc8b44": "getStageIndex()", +"98dd0293": "changeBonusFrequency(uint32)", +"98dd0baa": "getNumOfLotto()", +"98dd4b7c": "getCountStakesToken()", +"98de4f35": "purchaseTokensfor82(uint256,address,uint256)", +"98de921f": "removeLoanFromPortfolio(uint256,uint256)", +"98dec601": "REGULAR_RATE()", +"98dedf30": "getBySchool(uint256,uint256)", +"98df3d00": "getNote(bytes32)", +"98df67c6": "revealSecret(uint256)", +"98e00e54": "getCallWindowSize()", +"98e02be7": "abandonShip()", +"98e09333": "valueGet(address,string)", +"98e0fb08": "ICO_TOKEN_SUPPLY_LIMIT()", +"98e12d12": "updateAnimal(uint256,string,string)", +"98e15065": "info256(string,uint256)", +"98e1a322": "LivepeerTokenFaucet(address,uint256,uint256)", +"98e1b410": "getMoney()", +"98e1b6cd": "stopPromotion()", +"98e23dcf": "finishPreSale5()", +"98e25733": "currentRoundNum()", +"98e314a2": "distributeDonationTokens()", +"98e364d6": "saasApiProfitAddress()", +"98e3d1d3": "getWineProductionRate()", +"98e4053f": "changeVerify(address)", +"98e47e49": "LoomToken()", +"98e4f581": "getSkin(uint256)", +"98e527d3": "getProposalsCount()", +"98e52f9a": "decreaseSupply(uint256)", +"98e54c55": "setAsTest()", +"98e6176a": "_isProxy(bytes32)", +"98e73df9": "hasOutstandingChallenges()", +"98e76e06": "buyValue()", +"98e7ea43": "reward(uint32[],address[])", +"98e8c54f": "testerCanReentrant()", +"98e8f365": "getYourRewardStock(address)", +"98ea1c51": "ecrecovery(bytes32,uint8,bytes32,bytes32)", +"98ea5fca": "depositEther()", +"98ea6536": "_beginOfICO()", +"98eaca94": "inKissBTC(uint256)", +"98eaf11c": "getBool(bytes32,bytes32)", +"98eb1096": "CalculateCreateFee(uint256)", +"98ec341d": "addThing(bytes32,string,string,bytes32)", +"98ec9095": "total_distribution()", +"98ecd12c": "test_mixValidEqBytes32Message()", +"98edc9ce": "distributeLottery()", +"98ef4b0b": "total_iou_purchased()", +"98ef5bf9": "BuyItem(uint256,string)", +"98f038ff": "migrateRegistry(uint256)", +"98f04128": "getRoundJackpot(uint256)", +"98f1312e": "MINT_CAP()", +"98f1e0e7": "sendTokensWindow(uint8)", +"98f20367": "Curatable()", +"98f22786": "FireToken()", +"98f23a6d": "createToken(string,string,uint32,uint256,uint256)", +"98f25c44": "removeCurator(address)", +"98f28571": "ClientOrderEvent(address,uint8,uint128,uint256)", +"98f2af3a": "createGame(uint32,uint64,uint32,uint32)", +"98f31c82": "price2Of(uint256)", +"98f32d1d": "getCatRequestPrices()", +"98f3b81a": "getShares(address,bytes32[],int256[])", +"98f3c443": "CROWDSALE_WEI_CAP()", +"98f423b2": "bitsmileToken()", +"98f42e3b": "payoutInvestors()", +"98f44c62": "resetTokenOwnerReward()", +"98f4b1b2": "rateOracle()", +"98f4f54f": "KhairulRamadhan()", +"98f52c52": "firstChainHNw1()", +"98f5ee5d": "spawningManager()", +"98f69aeb": "_addChildToParent(bytes32,bytes32)", +"98f6c7e5": "refereeInvitations(address)", +"98f6ff63": "unlock(string,address,address,uint256)", +"98f72f42": "COSS()", +"98f7ba63": "UBCToken()", +"98f8193b": "replaceTokenFix(address[],uint256[])", +"98f87496": "setRateFinalStage2(uint256)", +"98f8fe90": "accessCostMYB(uint256)", +"98f96c3a": "AboutKelvin()", +"98f9724f": "holderAmount()", +"98fa6c8a": "batchTransferETHs(address[],uint256[])", +"98faa9a1": "getStageBonus(uint256)", +"98fabd3a": "DAO()", +"98faf5d1": "TBsell()", +"98fb0ac5": "tokenGenerationEvent()", +"98fb2eca": "voteStopped()", +"98fc2e0a": "GetTickSize(uint256)", +"98fc55d8": "whitelist(address,uint256)", +"98fcc93e": "getNumberOfBets(uint256)", +"98fdb377": "REOC()", +"98fdfd8e": "changeMallcoinTokenAddress(address)", +"98fe2b49": "NotifierChanged(address,address)", +"98ff116d": "deposit3(address,address)", +"98ff1ba1": "tokensGenerated()", +"98ff8075": "claimBounty(address)", +"990030cc": "trusted_contracts(address)", +"9900c978": "ScudoCash()", +"99013562": "Reject(address,string)", +"99016142": "claim(uint256,address,uint256,bytes)", +"9901bc77": "YRX()", +"9902ef5b": "blockLeft()", +"990333be": "salesDeadline()", +"99035895": "approveERC20()", +"9903745f": "SetsecondTTaxAmount(uint256)", +"990386e8": "dailyRelease()", +"9903a2bd": "calcReleaseToken(address)", +"9903c29c": "SALE_MAX_CAP()", +"990460c1": "ownerKill(address)", +"990484a7": "valueToToken(address,uint256)", +"9904a68d": "requiredDays()", +"9904e174": "sellTokens()", +"9904ed8d": "Reputation()", +"990502d0": "GasBuy()", +"9905b744": "logUint(uint256)", +"99061a08": "AltCrowdfunding(address)", +"9906352f": "MANAGE_CAP_PER_ROUND()", +"9906f41c": "setDevelopeo(address)", +"9906f81b": "Entrant(address)", +"99076eca": "IHubToken()", +"990816bb": "BitcoinSilver()", +"9908b25b": "publicTransferToken(address[],uint256[])", +"9908d3cf": "AMEBToken()", +"99091c93": "insertLawyer(address,uint256)", +"990986dd": "getRawPendingAmount(uint256)", +"9909afed": "has(address,string)", +"9909d1a2": "createTestData()", +"990a6a64": "SC_locked()", +"990ae727": "clearZoDailyLimit()", +"990c5485": "proxyMergeMint2(uint256,bytes32,address[])", +"990c75ed": "getWhitelistedAmount(address,address)", +"990c8f79": "returnValue()", +"990ca3ff": "tokensToBeAllocated()", +"990cc5c9": "buyFromCurrentOwner(uint256)", +"990d6fd2": "getNextTranche(uint256)", +"990dc9db": "transferFunds(address,uint256)", +"990dec94": "signToResetAddTokenData()", +"990e178a": "_revealBlock(address)", +"990e1c9b": "withdrawStep()", +"990e2979": "submittedAmount()", +"990e713b": "buyTokens(address,uint256,bytes4,bytes32)", +"990e80a3": "setAddressOf(string,address)", +"990ed905": "setNewBonusScheme(uint256)", +"990eda99": "FreezeAddress()", +"990f3f53": "computeResponseSecondHalf(uint256,uint16)", +"990f412f": "setAssetHolder(address)", +"990fa439": "setLLV_edit_1(string)", +"99110d3c": "PRESALE_END_TIMESTAMP()", +"991162db": "getDank(uint256)", +"99116354": "errorAndRefund(string)", +"99119290": "getCryptodiamondAddress()", +"9911ec1e": "freezeTokensToInvestor(address,uint256,uint256)", +"991257a2": "getSenderLands(address)", +"9913380e": "_getInt(address,bytes32)", +"99133c9f": "matched(address)", +"9913dcbb": "AEFToken()", +"9914038a": "getBankRollGrowthForGameId(uint256)", +"99141a47": "iffun()", +"99142b5f": "send(address,string)", +"99154b49": "ARK()", +"9916233e": "LimitOrder(address,bool,uint256,uint256)", +"99166f7d": "getTotalAddresses()", +"991678bf": "LogRefundETH(address,uint256)", +"9916c350": "numberEthUpdates()", +"9917ccb8": "HongmenToken(uint256,string,uint8,string)", +"9918925d": "setClaim(address,bytes32,bytes32)", +"9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", +"9919c9cf": "getGoldBackedByEachToken()", +"991a3b5e": "ARCD_FUND_DEPOSIT()", +"991a9fa9": "etherHasBeenReturnedToInvestors()", +"991b650d": "dataIdentifierCount()", +"991bcae8": "setup(address,address,address,address,address,uint256,uint256,uint256[])", +"991c9ae5": "set(uint32[],uint24[])", +"991cc283": "distributeICOTokens(address)", +"991d79b5": "EtheremonAsset(address,address,address)", +"991dd5b6": "read_user_purchase_at_index(address,uint256)", +"991e0139": "completeJob(bytes32)", +"991e47ff": "CoinWindow(uint256,string,string)", +"991e86bb": "c_maximumTokensSold()", +"991ef443": "publishers(uint64)", +"991f6798": "updateEQUIPrice(uint256)", +"991fa5af": "BinaryOption(address,address,address)", +"991feab5": "MMToken(uint256,string,uint8,string)", +"991ffd4e": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8,uint256)", +"99209e33": "setEndOfCrowdsale(uint256)", +"9920ecb8": "buyPhaseTokens(address)", +"9921cac5": "AlbertCoin()", +"992204e6": "GoldFee()", +"9922ea86": "allocateTokens(uint256,address)", +"99244d1a": "testvalue()", +"99248d3e": "AxieAccessControl()", +"992495e2": "minerRandomNumber()", +"9924ab31": "CIVCoin()", +"9924ad7c": "ovatel()", +"9924ba1a": "updateInfo(address,address,uint256,uint256)", +"9925b9c1": "setMintFeeAbs(uint256)", +"9925d68e": "createPreSaleShip(string,uint256,uint256)", +"99260144": "rewardMintOwner(address,uint256)", +"9927482d": "proxy(address,string,address,uint256)", +"992817b9": "recordGet(address)", +"9928811b": "testBroken()", +"99288dbb": "saleOpen()", +"9929057b": "executeDelayedSetStakes(uint256)", +"992a3e75": "changeBountyPaysTokens(uint256,bool,address)", +"992ae976": "isSafePunctuation(bytes1)", +"992b2f0f": "addSlogan(uint8,string)", +"992bb01e": "eval(bytes32[])", +"992bc0ce": "pay_to_OEM()", +"992c15fc": "MIN_VALUE()", +"992c3ff1": "TrekChain()", +"992c4435": "UETO()", +"992c870d": "transferName(bytes,address)", +"992cb59f": "getOrCreateDisputeCrowdsourcer(bytes32,uint256[],bool)", +"992d4196": "GNR(address)", +"992e0aa0": "purchaseBonus(uint256)", +"992e2a16": "getReportingEndTime()", +"992e74a9": "maxRefererTokens()", +"992e820e": "burnValue(address,uint256)", +"992ebc52": "setCounterLimit(uint256)", +"992ee4b6": "raiseTap(uint256)", +"992ee874": "WithdrawToken(address,uint256)", +"992fa380": "OmnisBit()", +"99304cd4": "AssetWithdraw(address,uint256)", +"993090d0": "adjustPrices(uint256,uint256)", +"9931a916": "TokenRK70Z()", +"99325442": "getCollectedOreBalances(address)", +"9932dc05": "codeToAddress(string)", +"9932fa28": "API2()", +"993301b2": "libbatchbacktest(bytes32,uint64,uint32[],uint64[],int64[])", +"9933a24a": "allowDirectDebit()", +"9933c6b5": "getPokemonLock(uint256)", +"9933d225": "addSpecial(address,uint16)", +"993480cf": "calculateRequiredVerifiers()", +"99348e90": "rewardsFunds(address,uint256)", +"99348f8e": "eggAvailable(uint16)", +"99351742": "distributePrize(uint256)", +"99352c42": "updateBtsPoint(uint16,int256,uint16)", +"99358876": "maxMintCookie()", +"9935935f": "setResolveHandler(bytes,address)", +"9935b968": "jesterBank()", +"9936746a": "DepositReceived(address,uint256)", +"99369801": "presaleTokenBalance()", +"99372321": "test(bytes32)", +"993783fc": "eraFromMokenData(bytes32)", +"99379718": "GimmerToken()", +"99384976": "setFounder(uint256,address)", +"9938579b": "getStatusTransferFrom()", +"9938b0de": "setPublisherCut(uint128)", +"9938be42": "getPOOL_edit_19()", +"9938fdd1": "downTick(address,uint256)", +"99393132": "onBurnCalled()", +"99395b1e": "OffMenuMorsel()", +"993ab58e": "setTournament(address)", +"993ae7e9": "updateUserBalance(address)", +"993af624": "BrehonContract(address,address,uint256,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"993b4f71": "transferBag(address,uint256)", +"993b8cde": "countPurchasedPixels(address[16])", +"993bcc63": "enableTokenBurn()", +"993c78fa": "getMintApproval(address)", +"993ca7e3": "RTB1()", +"993d1123": "BoltToken()", +"993d13bd": "PRE_ICO_MAX_CAP()", +"993d29fc": "Mindmap_Token(uint256,address)", +"993d3489": "investorShortInfo(address)", +"993eaefa": "TravelWithMeToken()", +"993eda02": "giveArtworks(uint8[],address,uint256)", +"993f3197": "TOSInstitutionsHoldingContract()", +"993fd4de": "setTokensSource(address)", +"99404433": "levelup(address,uint256)", +"99405ad7": "NewTokenSale(address,address)", +"9940fb5d": "convertToMeth()", +"99413b4e": "connectToken(address)", +"994162cd": "BasicTokenStorage()", +"99418a21": "signEthereum(bytes32)", +"9941e3d0": "setCallAddress(address)", +"9942aa4d": "create(address,address,address,address,address,address,address,string,string,string,string)", +"9942ce36": "_initializeLockupStages()", +"9942ec6f": "f2()", +"99433fc3": "GreenWorldFarmToken()", +"99434669": "fabricoin()", +"99439089": "validatorContract()", +"99444e30": "ICOprice()", +"9944b729": "withdrowTokens(address,uint256)", +"9944d5e7": "burntBounty()", +"99456542": "getLargeBonusStopTime()", +"9945e3d3": "redeem(bytes)", +"99464c89": "freezeAll()", +"9946b9a5": "disable(uint256)", +"994828a1": "BabyBearToken()", +"9948e493": "calcMarketFee(bytes,uint256)", +"99497349": "setData_29(string)", +"994977e5": "finalizeRent(uint256,uint256)", +"9949f0c8": "convertEthToWeth()", +"994a69d1": "centsToTokens(uint256)", +"994aca84": "TrenoToken()", +"994b1a0f": "changeDivCardAddress(address)", +"994cc574": "setAyantDroitEconomique_Compte_9(uint256)", +"994d3969": "whitelistStart()", +"994d3be3": "publishFunctionMessage(uint256,string,string,string)", +"994e5267": "SetMaxAttempt(uint8)", +"994ebbe3": "signUpForPVP(uint32)", +"994f2e10": "getUpdateDerivePayoutDistributionHashValue()", +"994fb25f": "FileNameInt()", +"994fe290": "verificationListMap(uint256)", +"994ff619": "setKitty(address)", +"9950ace1": "rollRoom(uint256,address)", +"9951a2c8": "createTeamSaleAuction(uint8,uint256[9],uint256,uint256,uint256)", +"9951fc72": "TokenVesting()", +"99522297": "preCrowd_tokens_scaled()", +"9952b63d": "_receiveDonation(address,uint256)", +"995344da": "_updateVoucherMthEthRate()", +"99538898": "addTeamAddressInternal(address,uint256,uint256)", +"99540fe0": "normikaivo()", +"9954cf22": "JUST()", +"99552af1": "multiInvokeWith2Args(address,string,address[],uint256[])", +"99554e7b": "getNextFetchTime()", +"99554fb7": "distructVault()", +"99556615": "calculateProfitGameType2(uint256,uint256)", +"9956587e": "REGISTERFEE()", +"9956a28c": "mediumBuy()", +"995771b9": "CarnageToken()", +"995783d9": "ERC20(uint8)", +"9957ad05": "withdrawCreator()", +"9957f3e6": "KvantorToken()", +"99583417": "transferMultiple(address,uint256[],uint256[])", +"995893e6": "_createRole(bytes32,address[])", +"9958c661": "getstate(address)", +"9958d553": "max_creation_rate_per_second()", +"9958f045": "drasticMeasure()", +"995a15a8": "TouristToken()", +"995a299e": "setCurrentSeller(address)", +"995a2b52": "DeusETH(address)", +"995a7174": "_toLeconte(uint256)", +"995ab62e": "GAS_LIMIT_IN_WEI()", +"995b129f": "setAirDropManager(address,address)", +"995b2cff": "executeAffirmation(address,uint256,bytes32)", +"995b2e2c": "getUnreadMessage(uint256)", +"995b40f3": "_getNextAuctionPrice()", +"995b4a80": "LogTokenSent(address,bool,string)", +"995b5aae": "feeInfo()", +"995cb4ec": "doWorkAndPayEAT()", +"995cc82b": "powerTotalSupply()", +"995cd653": "createSale(uint256,uint256,address)", +"995d9ab7": "getTags()", +"995e4339": "getResult(uint256)", +"995e599d": "ARCONA()", +"995f80e9": "NewSoftCap(uint256)", +"995fac11": "migration(address,address)", +"99600baa": "SVIP()", +"99603bfe": "CryptoDuelCoin()", +"9960d947": "grantKudos(address,uint256)", +"99613a3f": "metaSet(address,uint256)", +"9961476c": "MatchBetting(string,string,uint256,address,address,uint256)", +"996301e4": "claimTimeoutEnded(bytes32)", +"9963181e": "setAyantDroitEconomique_Compte_10(uint256)", +"9963a8e0": "fund(bytes32,string,address,uint256)", +"99645ba2": "changeStepLockFlag(bool)", +"9964622c": "_setPendingAnchorAdmin(address)", +"9964935e": "makePayout()", +"99649d06": "setInitialDeposit(uint256)", +"996517cf": "mintLimit()", +"99651db8": "addShares(uint256)", +"99653fbe": "submitVote(uint256,uint8)", +"9965b3d6": "claimProxyOwnership()", +"9965ea53": "setPFManager(address)", +"99671dfb": "Sacacoin()", +"99678b43": "setFunctionThreePrice(uint256)", +"9968b87b": "SogetiTestCoin()", +"99693026": "setInitialState(address[],uint256[],address[],uint256[100][],uint256[],uint256,uint256,uint256,uint256)", +"99694cf2": "WIKICOIN(uint256,string,uint8,string)", +"9969b256": "sendOwnersBalance(address,uint256)", +"996a4be3": "uintToBytes(uint256,uint256)", +"996a8046": "__callback(bytes32,string,bool)", +"996b434a": "littID()", +"996b8b76": "updateIndividualCertificate(string,bytes32,bytes32,bytes32)", +"996cba68": "claim(address,address,uint256)", +"996ccf0b": "CockToken()", +"996d21aa": "privateTotalSupply()", +"996d2d65": "addAtkBossQuest(address)", +"996d310d": "resumeTransfer(uint256)", +"996ea781": "getOrganName()", +"996ec1f3": "BigBlockCoin()", +"996ed6e1": "TransactionSucceeded(address,uint256,string,address)", +"996f3247": "closeWall()", +"996f677b": "icoInvestmentsCount()", +"996f7602": "GetTotalMinerCount()", +"99704b65": "isAcceptedImportingAuthority(address)", +"997072f7": "getMemberCount()", +"9970e26b": "ParyToken(string,uint8,string)", +"9971b98d": "getDesign(uint256)", +"9971c6ce": "gupToken()", +"99721229": "amountForBonus()", +"9972b76c": "haltedFX()", +"9973b827": "totalLotteryValue()", +"997402f2": "liquidityAdd()", +"9975038c": "burnAll()", +"9975091a": "pausePreSaleRound()", +"997519f2": "SingularityNetTokenMock(address,uint256)", +"99753de7": "clear_level()", +"99755bab": "ICOCents()", +"9975c06b": "logDebug(string)", +"99761662": "YouWin(address,uint256,uint256)", +"997636ec": "play(string,uint256)", +"997664d7": "totalDividends()", +"997676c3": "checkWhitelistExist(address)", +"99767aa9": "FLC(uint256,string,string)", +"9976d32a": "coinOwner()", +"9976f5c5": "ProofOfDoge()", +"9976f9e1": "setAgriChainCultivation(address)", +"99771006": "GLORY()", +"99777d9d": "isPublicTokenReleased()", +"9977a108": "isCollected(address,bytes32)", +"9977b698": "startTokensSale(uint256,uint256,uint256,uint256)", +"99789670": "Initialized(uint256,uint256)", +"9978be95": "TOKENS_ADVISORS()", +"9978f01b": "setExchangeRate(address)", +"997995ec": "revealResultUncleMerkleProof(uint256,uint40)", +"9979b7aa": "CETACEA(address)", +"9979c009": "buyItem(uint256,uint256)", +"9979ef45": "placeBid(uint256)", +"997a0229": "_newPrice(uint256)", +"997a12fa": "attowethBalance()", +"997a2c1c": "numberOfMyComponents()", +"997aa31f": "sellChannel(string,uint256)", +"997bc6c9": "int2str(int256)", +"997c44e4": "setLockRate(uint256)", +"997c88ba": "calculateCurrentDistanceInRange(address)", +"997ce600": "endauction(uint256)", +"997cf69c": "dataset_sha256checksum()", +"997d2df8": "asserti(bool)", +"997d8473": "reserveBalanceMap(address)", +"997dd1c6": "dealHitCard()", +"997e02d9": "wormholeIsOpen()", +"997f0198": "setImageHeight(uint256,uint16)", +"997f35ac": "RewardOffer(address,address,bytes32,uint256,uint256,uint128)", +"997f50d8": "getCurrentTierHardcap()", +"997f51e6": "GAMToken()", +"997fdb1f": "setLockTime(address,uint256,uint256)", +"997ffd13": "quarterFourth()", +"99801bce": "dagheAcqua(uint256)", +"99808aff": "winningTicket(address)", +"9980dee2": "calculateHash(address,address,uint256,uint256,uint256)", +"9980ec86": "getAmount(uint256)", +"99817b47": "releaseVestedTokensForBeneficiary(address)", +"9981bd61": "requestTokenExchangeMax()", +"99820e96": "finishSunning()", +"9982257b": "hotQuestion(uint256,uint256,uint256)", +"998282e9": "winners(uint32,uint32[],uint64[])", +"9982e7ed": "updateBillionsCoinsRemainingToDrop()", +"998446a8": "acceptRequest(uint256,bytes)", +"99847f77": "addUnsoldTokens()", +"9984f30d": "setMaxValue(uint256)", +"99851eac": "updateCards(uint8,uint256[])", +"99863b5c": "canChangeOwnerParams()", +"9986d936": "setRestrictedPercent(uint256)", +"9987680b": "play(address,bytes32)", +"99878d5b": "play_scissors()", +"99879bb9": "startTimeInSec()", +"9987b2d2": "getProposalIndex(address,uint256,bytes32)", +"99882cdb": "propose(bytes32)", +"9988807d": "centsReceived(address)", +"9989a5ae": "setLimitOfParticipants(uint256)", +"998a1f96": "preICORaised()", +"998ac104": "AIRDROP_TRANSIT_ADDRESS()", +"998b022e": "_mintPrimordialToken(address,uint256)", +"998b723b": "waterTree(uint256)", +"998b894a": "isLegalTime()", +"998bac16": "bulkTransfer(address[],address,uint256[])", +"998be0d7": "sendTokenToSingleAccount(address,uint256)", +"998c4f5a": "setEthExchangeWallet(address)", +"998cab7e": "getTransformTarget_pool(address)", +"998eb4cf": "getRank03()", +"998f9203": "INCash()", +"9990b3a3": "getPreSaleWallet()", +"9990db92": "CryptoSureToken()", +"999122f4": "BHK()", +"999377ec": "acceptBlokTokenOwnership()", +"9993fa94": "balanceOfSender()", +"9994e112": "AddContact(address,bytes32,bytes32,bytes32,bytes32,bytes32)", +"9995bbf7": "ethforp3dbuy()", +"99967819": "lastaction()", +"9996eb64": "batchNewAccount(address[])", +"99999342": "GetBonusInv()", +"9999aae5": "EYTToken()", +"9999bd2e": "RATE_PRESALE()", +"9999d2ae": "getSubmissionCount()", +"999a9965": "setMany(uint256,int256,uint256,bytes,address,bytes)", +"999b078e": "isSoftCapHit()", +"999b5c72": "FASET(uint256,string,uint8,string)", +"999cbaf5": "Deposit(address,uint256,uint8,uint256)", +"999cef04": "PublishWorldCupResults(bytes32,bytes32,bytes32,bytes12)", +"999d350d": "totalBonusGiven()", +"999d3947": "getGenes(uint40)", +"999d46b9": "transferInterviewer(address)", +"999dd03e": "poolAddressCapTier2()", +"999eb6b1": "balanceOfThis()", +"999f18a6": "unsigned()", +"999f4b38": "sellDividendPercent()", +"999f5644": "Stoppable()", +"99a032ce": "isCurrentAccountReader(address,address)", +"99a03c70": "realBalanceOf(address)", +"99a17344": "setHiddenLogic(address)", +"99a1a412": "getModeratorCount()", +"99a2e1ec": "roundLatLngFull(uint8,int256)", +"99a3e03f": "testNegativeIntegerKeyValue()", +"99a3f0e8": "right70(uint256)", +"99a44e68": "BEXP()", +"99a48638": "packSettings(uint256)", +"99a48e17": "FinalizableToken(string,string,uint8,uint256,address,uint256,address[],uint256[])", +"99a5d747": "calculateFee(uint256)", +"99a6993b": "KCCTOKEN()", +"99a6f7d2": "createReserveTokens()", +"99a752d7": "setPriceETH(uint256)", +"99a79790": "startTimeSale2()", +"99a7b857": "FundsWithdrawal(address,uint256)", +"99a7b884": "getBuyerFullInfo(address)", +"99a7e9db": "get_presale_iconiq_arbits_per_ether()", +"99a856e3": "firstBonusRate()", +"99a88ec4": "upgrade(address,address)", +"99a8f2fe": "EncryptedToken()", +"99a9a04c": "BITStationERC20()", +"99a9ccb2": "preMinedSupply()", +"99a9f1b5": "totalStakingUnits()", +"99aa5d97": "Pixel()", +"99aa93c8": "numSales()", +"99aba8e3": "distribute(address,uint256,uint256,uint256)", +"99abaabb": "addMarketToWasCalled()", +"99abd788": "FIRSTSALE_TOKENCAP()", +"99ac4569": "withdraw(uint64,address[],uint256)", +"99acc3fd": "prizeshow()", +"99ad91c7": "AddAdmin(address,address)", +"99ae6a16": "Winner(address,uint32,uint32,uint256)", +"99aeade3": "iterateTable(uint256,uint256)", +"99aef94a": "getMyEntitySimple(uint256)", +"99af4114": "createPet(uint256,uint16,address)", +"99afb9b9": "createValidatedRequest(address[4],address,uint256[12],uint256,bytes)", +"99b0dc4d": "areAllUppercase(bytes16)", +"99b1adbf": "isUserMember(address)", +"99b22701": "delBackend(address)", +"99b29044": "getPropertyEarnUntil(uint16)", +"99b2a233": "offlineGuardianSold(uint256,address,uint256)", +"99b465cb": "currentSegment()", +"99b47af8": "reveal_test_data_groups_block_size()", +"99b4a0c6": "BTRL()", +"99b55343": "termsNumber()", +"99b58f06": "icoPushAddr(uint256,address)", +"99b5b2fa": "horseIndexPrice(uint256)", +"99b632e4": "winnovate()", +"99b6f5a1": "sendAdvisorsTokens()", +"99b721a5": "rewardEthAnd(address[])", +"99b77032": "setMinBuyLimit(uint256)", +"99b83f3d": "setMaxRedemption(uint256)", +"99b8a3f0": "charityBalance()", +"99b8e366": "reloadPlayerInfo(address)", +"99bac5c9": "setMinCustomerBalanceETH(uint256)", +"99bad2cd": "testAddExistingVoter()", +"99bb8134": "approveMany(address,uint256[])", +"99bb875c": "funeralAndBirth(bytes,int256,bytes)", +"99bc0aea": "expiryTime()", +"99bc826e": "intMemoryArray()", +"99bcb1a1": "thirdWeekMainICOBonusEstimate()", +"99bdc9c2": "AdminAddition(address)", +"99bea0bd": "AllForOne()", +"99c0058c": "getAttackPlayerList()", +"99c20c34": "percentToFoundersAfterICO()", +"99c24d85": "SetCurrentRoomAndRound(address,uint8,uint256,bool)", +"99c27d40": "updateGlobalMin(uint256)", +"99c2af56": "setRateEarlyStage2(uint256)", +"99c2b93b": "startCrowdsalePhase1Date()", +"99c2bb40": "listAssetDocumentsFrom(bytes32,bytes32,uint256,bool)", +"99c32025": "TwoPhaseTransfers(address[],address[])", +"99c4644a": "putIdentityProvider(address,string)", +"99c49852": "cancelOrder(address)", +"99c59bdc": "MadeBet(uint256,uint8,address)", +"99c69d40": "getPremiumsAvailable()", +"99c6d2de": "depositToken(address,uint256,uint256)", +"99c6da4a": "UTWD()", +"99c724ef": "skipInLine(uint256,uint256)", +"99c75517": "GetCompetitionInfo(uint32)", +"99c8055d": "Enable()", +"99c8268b": "totalBattle()", +"99c87629": "getFibonziPlayers()", +"99c8d556": "tax()", +"99c8fcba": "agreeBetWinner(uint256,uint8)", +"99cac223": "getBallotIndex(address,bytes32)", +"99caf208": "updatePendingManager(address,uint256)", +"99cb0823": "presaleBonus()", +"99cbc1b9": "Bet(address,bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8,address)", +"99cc00d1": "getImageHeight(uint256)", +"99ccbec6": "claimByTeam()", +"99ccf3da": "_increaseToken(address,uint256)", +"99ccfd34": "forkUpgrade(address,address)", +"99cd211d": "bountyTokensWallet()", +"99cd40aa": "_setBytes(bytes32,bytes)", +"99cdee0e": "own()", +"99ce00a9": "VREO_SALE_OPENING_TIME()", +"99ce12c1": "getAssetClaimString(uint256)", +"99ce919c": "goods(bytes32)", +"99ceb6e6": "BTCReceived()", +"99ceed71": "OwnerTokensBurned(uint256,uint256)", +"99cf5582": "burnVotes()", +"99cfe1e1": "issueCofoundersTokensIfPossible()", +"99cfe743": "TotalGenesisAddresses()", +"99cffe4d": "LinearBeam()", +"99d0f06c": "removeNotes(uint256[],uint256[],uint256)", +"99d136f5": "multiSend(address[])", +"99d18937": "getAllDSP()", +"99d1c413": "isEggFactory()", +"99d1d002": "debug_blockHeaderMerkle(bytes)", +"99d1e755": "getTeamWallets()", +"99d22e48": "founderAllocated()", +"99d3acd3": "EtherDeltaDepositToken(address,uint256)", +"99d413f4": "createDividendPercent()", +"99d43acc": "organizerRegistration(string,string)", +"99d4aec9": "getPurchaseRequests()", +"99d50d5d": "getComponents()", +"99d52baf": "test_startBool()", +"99d5af62": "unLockBatchAddr()", +"99d64ab0": "maximumFunding()", +"99d67084": "numberOfInvestorsToWithdraw()", +"99d76e49": "setDragonName(uint256,string)", +"99d786ca": "lastMonth()", +"99d792a2": "releasePrivateSupplyVested()", +"99d7dd25": "isEcoAllocated9()", +"99d80ed9": "addService(bytes32,uint256)", +"99d83b77": "BuyRC(address,bytes,uint256,uint256,uint256)", +"99d897f8": "sellForOtherCoins(address,address,uint256)", +"99d9b306": "trancheMinTx()", +"99d9d1e0": "KNB()", +"99db626c": "LOG_SpinExecuted(bytes32,address,uint256,uint256)", +"99db7eb7": "TapPoll(uint256,address,address,uint256,uint256,uint256)", +"99dbff01": "buyCourse(uint256,uint256)", +"99dc79d1": "getBracketScore(bytes8)", +"99dd1ed9": "estLiquidationCap()", +"99ddb29b": "addressType(address)", +"99de4fc5": "UNK()", +"99def960": "getcredibilityScore(bytes12,bytes12)", +"99df3d7a": "setFunctionAuthorized(address,string,bytes32)", +"99dfa711": "GetCurrentTypeStartTime(uint256)", +"99dfedb4": "getTeamSumSkills(uint256)", +"99e0021f": "mergencyCall()", +"99e07caf": "updateItem(uint256,string,string,string,uint256)", +"99e0dd7c": "setTokenURIPrefix(string)", +"99e133f9": "init(address,address,address,address,address,address)", +"99e1cc47": "calculateAndSendRefund(address,uint256,uint256,uint256)", +"99e1d127": "filterWarriorAuras(uint256,uint256)", +"99e2ab0e": "UpdateMinFee(uint256)", +"99e3a723": "verifyOwner(bytes32,address,uint8,bytes32,bytes32)", +"99e47b2d": "DinoFarm()", +"99e487a9": "F2UPhone()", +"99e71b64": "secondBalance(address)", +"99e74ce8": "tokenIdToHeroInstance(uint256)", +"99e7c00a": "yaaay()", +"99e7cedf": "cobeneficiary()", +"99e8f303": "getM5Reward(address)", +"99e91527": "dequeueAuditRequest(uint256)", +"99e9376c": "buyWithCustomerId(uint128)", +"99ea0fd5": "disputeAllReporters()", +"99eb6603": "initalize(uint256)", +"99eb975c": "TransID()", +"99ec140d": "Tokensale()", +"99eca69f": "withdraw(uint256,address[])", +"99ecba80": "maxMinutesProposalPeriod()", +"99ed7b87": "getStrengthValue(uint256)", +"99ee9076": "defendFee()", +"99ef111c": "stopAddresses(address)", +"99eff1f7": "nextElectionIndex()", +"99f02ab5": "getWinnerContractAddress(uint256)", +"99f02b60": "IHFVesting(address,uint256)", +"99f07bed": "_clearCommittedValidators(uint256)", +"99f16c6e": "validateContribution(uint256)", +"99f1718a": "getSiteItem(uint256,uint256)", +"99f3379f": "getSolverAddress(bytes32,string)", +"99f3487b": "testBoolKeyValue()", +"99f49f0d": "vitPerWei()", +"99f4b251": "mine()", +"99f5c357": "modultradeStorage()", +"99f5c904": "momentValueOf(uint256,uint256)", +"99f6021d": "durationSec(bytes32)", +"99f65122": "getParam(uint256)", +"99f6a693": "setMasterName(uint256,string)", +"99f6d9af": "getTotalNumberOfRegisteredCompanies()", +"99f91c5d": "updateAllRewPaid()", +"99f9be87": "TEX()", +"99fa6ed7": "EthPledge()", +"99fb15d2": "distributionActive()", +"99fbe995": "Wallet(address[],uint256)", +"99fbf3a2": "setRentPrice(uint256,uint256)", +"99fca937": "amountOfEthersOwnerCanWithdraw()", +"99fd12f6": "etc()", +"99fd9489": "endCrowdsale(bool)", +"99fdc17e": "redenominatedValue(uint256)", +"99fe18b9": "fightBoss()", +"99fe6c88": "CashTCoin()", +"99ff0246": "onRefund(address,uint256)", +"9a003b61": "checkRequiredChange(uint256,uint256)", +"9a008d7b": "startPaymentProcess(address)", +"9a01b4d5": "getChannel(address)", +"9a02d3ac": "unapproveWithdrawal(bytes32,bytes32,uint256)", +"9a02edfe": "maxTokensPerAccount()", +"9a033782": "addContractToTokenFallbackWhiteList(address,address)", +"9a037aa0": "setReferralBonus(uint256)", +"9a03d9a3": "setERC721Address(address)", +"9a03fe1d": "Div(uint256,uint256)", +"9a0475e9": "ASHLEY_ADDRESS()", +"9a04a4ed": "setOpenInterestInAttoEth(uint256)", +"9a04ab73": "safeAddI(int256,int256)", +"9a04b89e": "setGiftoAddress(address)", +"9a04e602": "mintBounty(address,string)", +"9a04f704": "guest()", +"9a04fc8b": "getNodeParent(bytes32)", +"9a05cd66": "_setNarcosCoreAddress(address,address)", +"9a065a60": "discountTokenAmount()", +"9a065aae": "LMYY_Token()", +"9a06671e": "CoinsRetrieved(address,uint256)", +"9a06b113": "createPool()", +"9a06c2d3": "getRnMmasterReq()", +"9a073742": "setFeesWithdrawalAddress(address)", +"9a0750d5": "tokenFundDeposit()", +"9a0846f1": "MyKidsEducationFund()", +"9a08623a": "withdrawFromToken()", +"9a0907c2": "contributeAndVest()", +"9a09a8ef": "getCoinByCount(uint64)", +"9a0af2ec": "getStLength()", +"9a0b2db3": "withdrawFeeEntitlement()", +"9a0ca07d": "changeLocked(bool)", +"9a0d4f40": "PRESALE_PERIOD()", +"9a0d6247": "withdraw(uint8,bytes32,bytes32,uint256,uint256)", +"9a0e4ebb": "multiMint(uint256[])", +"9a0e7d66": "getTotalVotes()", +"9a0e7e8e": "secondSaleDelivery(address,uint256)", +"9a0e9e50": "newPoll(uint256,uint256,uint256)", +"9a0f1561": "prizeDeposit()", +"9a10f719": "setFreezeAddress(address,bool)", +"9a10f819": "buyOracle(bytes,address)", +"9a114fb0": "_Challenge(bytes32,uint256,uint256,string)", +"9a116ca1": "implementationCall()", +"9a1295d9": "getPassportLogic(string)", +"9a14228e": "getEntryPrice()", +"9a158883": "BOBOToken()", +"9a15f4f3": "getBlockHeader(int256,int256)", +"9a160ad9": "MeissaToken()", +"9a163c44": "currentVotingAmount()", +"9a165f6c": "currentCapTokens()", +"9a166299": "getMyAddress()", +"9a167613": "forceConsume(uint256)", +"9a16a7e3": "getAccountInputSdcslength()", +"9a18a5ba": "NEXPARA(uint256,string,string)", +"9a19a953": "setInt8(int8)", +"9a1a661e": "entranceFeePool()", +"9a1ac4b2": "OpenAddressLottery()", +"9a1b420b": "OraclizeAddrResolver()", +"9a1ca8d2": "SALE_ETHER_MIN_CONTRIB()", +"9a1e7ea0": "randomSatoShiTime()", +"9a1e9dc3": "Buy(bytes32,address,uint256,uint256,address,address)", +"9a1f6a0f": "setPacksPerClaim(uint16)", +"9a1fd3d5": "armyPlanesCount(uint256)", +"9a1fdc10": "createHorseShoe10(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"9a1ff4f4": "Ruthenium()", +"9a202d47": "removeAdmin()", +"9a206ece": "isSpender(address)", +"9a20821b": "claim_winnings(address)", +"9a21213e": "_getProviderOwner(uint256)", +"9a2160a7": "currentBetNumber()", +"9a221876": "project_contract()", +"9a22dec5": "buyAllAmountPayEth(address,address,uint256,address)", +"9a234885": "storeUserDataHash(uint256,bytes32)", +"9a2392b2": "getFirstBuyNum(bytes32,bytes32)", +"9a23ab61": "XXXXXXXX06(address,address,uint256)", +"9a2457c1": "getMiningAttempt(uint256,address)", +"9a251185": "isValidCertificate(bytes32,bytes32,bytes32)", +"9a267230": "END_TS()", +"9a276186": "getLentTime(uint256)", +"9a27b7ed": "setBounty(address,uint256)", +"9a2828f3": "setTechnicalWallet(address)", +"9a285ffb": "myDividendsYes()", +"9a28910a": "PrivateSaleBuy()", +"9a29ccf7": "_determinePid(address)", +"9a2a1f75": "CrowdsaleLeviusDAO(address,address)", +"9a2a224a": "setWallet(address,address,address,address,address)", +"9a2b4bdf": "ChangeTotalSupply(uint256,uint256)", +"9a2d2692": "withdrawToPoolOwnerFee(uint256)", +"9a2dcadf": "fundoShares(uint256)", +"9a2e27f8": "presaleEndDate()", +"9a2e6b40": "vote(uint80,bool)", +"9a2f9e92": "keeCrytoken()", +"9a2fb8c1": "startTimePrivatePreICO()", +"9a307391": "operator(address)", +"9a314b8e": "Group(string)", +"9a317cca": "getHWCAddressByIndex(uint256)", +"9a31a5f0": "transferManual(address,uint256)", +"9a31ac53": "setLastRegistration(string,int256,uint256)", +"9a31b14e": "set_totalSupply(uint256)", +"9a323ac4": "MAXfinney()", +"9a3241a6": "AddParticipant(address,uint256)", +"9a325e52": "exchangeRateRoundTwo()", +"9a336fed": "removeTotalCoinLock()", +"9a33aff9": "startDocumentPoll(bytes32)", +"9a33c610": "addPA(string,string,string,address,address,uint32,uint32,address,address,uint32,string)", +"9a33e300": "projectName()", +"9a344170": "test_insert_full()", +"9a347dd9": "tokensToFunder()", +"9a35f886": "__dig_then_proxy(uint256)", +"9a36f932": "feeDivisor()", +"9a37d1b7": "distributeEbyteForETH(address[],uint256,uint256,uint256)", +"9a38330d": "setIssuer(address,address)", +"9a388bd2": "CORAddress()", +"9a38ac79": "requireAuthorisation(bool)", +"9a38aeb1": "verifySignature(address,uint256,bytes32)", +"9a38bfae": "voteHash(address)", +"9a3a8c85": "ExiliumToken()", +"9a3aed36": "setMainAdmin(address)", +"9a3c4158": "setEthWallet(address)", +"9a3ce541": "price(bytes12)", +"9a3d1f3f": "twentyThirtyVault()", +"9a3dc23f": "_removeWhitelisted(address)", +"9a3ea7cc": "provas(bytes32)", +"9a3fc225": "getMinAuditStake()", +"9a3fc66d": "iouTokens()", +"9a3fd1fb": "tokenFallBack(address,uint256,bytes)", +"9a3fdfd0": "bountyTokensPercent()", +"9a406338": "VESTING_DATE()", +"9a40a316": "betting(uint256,uint8,uint256)", +"9a40d8f5": "equal(address[],address[],string)", +"9a41c1e6": "walletToVault(address,uint256)", +"9a429d2f": "setDisclaimer(string)", +"9a42adb3": "change_ico_start(uint256)", +"9a42af48": "getLastPrice(bytes32,uint8)", +"9a42c935": "forLottesy()", +"9a42f3aa": "reveal(uint256,uint8,bytes32)", +"9a4363cb": "setlockall(bool)", +"9a436c9b": "burnBasisPoints()", +"9a4373a6": "_internalTransfer(address,address,uint256)", +"9a437da2": "lookupPriorLottery(uint256)", +"9a438c5f": "ChangeInsuranceFeesOperationEvent(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256,uint256)", +"9a43e59a": "VAA()", +"9a4435c6": "BitcoinGame()", +"9a443955": "setNumVotesRequired(uint256)", +"9a44690e": "finalizeSettingUpdate(uint256)", +"9a454b99": "deployedAtBlock()", +"9a459f75": "setShortDescription(string)", +"9a45a263": "decentBetMultisig()", +"9a45e3fe": "getChannelExist(bytes32)", +"9a465b85": "lastBlock_a10()", +"9a46793e": "roundsManager()", +"9a471416": "bountyFunds(address[],uint256[])", +"9a47700f": "checkExpires(bytes32)", +"9a4772cd": "LogClaim(address,uint256,uint256)", +"9a478b49": "join(uint256,bytes32)", +"9a47cee3": "convertGene(uint8[48])", +"9a48007d": "hasHourlyRateWithinRange(address,address,uint256[],uint256[])", +"9a483a8e": "exerciseExpiredEmployeeOptions(address,bool)", +"9a48eb3e": "tokenTransferProxyContract()", +"9a49eab5": "MINER_CREATION_LIMIT()", +"9a4a0fb2": "centralBank()", +"9a4ac102": "tinyIPFShash(string)", +"9a4b19e4": "SiaCashCoin()", +"9a4b1d5c": "verifyTransfer(address,address,uint256)", +"9a4b87f1": "setDrop(bool)", +"9a4b8fc9": "lockInSemiFinalPrize()", +"9a4bca21": "setMintTap(uint256,int256)", +"9a4ca3cb": "itemsOfOwner(address)", +"9a4cbb92": "getDamage(uint256,uint256,uint256)", +"9a4cd266": "test_fourValidEqBool()", +"9a4d19f8": "getAmountAccredited(address)", +"9a4dfa87": "OfferCanceled(uint256,address)", +"9a4e36d9": "antiques(bytes32)", +"9a4e9bff": "FXPay()", +"9a4ed149": "getBlocksquareFee()", +"9a4f1e2c": "ETCrossPotatoPresale(uint256,uint256)", +"9a4f78cc": "decreaseShares(uint256,address)", +"9a4fd88d": "crowdsaleSucceeded()", +"9a4fdf66": "nextBro()", +"9a507d9b": "feeHoldingAddress()", +"9a508c8e": "finalizeUpgrade()", +"9a5199fc": "goodbye(uint256)", +"9a51a31a": "ToToken()", +"9a526b97": "setPreIco(address)", +"9a52b339": "checkInterest()", +"9a54596b": "Token(uint256,string,uint256,string,string,address)", +"9a5483e6": "addRole(uint256,address,uint256)", +"9a556a59": "getCooldown(uint256,uint16,uint8)", +"9a56193b": "getNumberOfDerivatives()", +"9a565169": "ETHERGOLD()", +"9a5666b8": "SVLightBallotBox(bytes32,uint64[2],bool[2])", +"9a571d9f": "isAlphaLower(bytes1)", +"9a573786": "getKeysManager()", +"9a581271": "cursedContract()", +"9a586d26": "MAX_SALE_VOLUME()", +"9a58c33d": "batchAssetTransfer(address,uint256[])", +"9a592415": "LostPayment(address,uint256)", +"9a593b9a": "startCrowdfund()", +"9a599e37": "burnfromAdmin(address,uint256)", +"9a5a2d4e": "lastTimePriceSet()", +"9a5a6483": "milliTokensSent()", +"9a5c0abc": "sellCards(uint256,uint256)", +"9a5dd735": "getRichest()", +"9a5e095c": "_buyTokensInCurrentStage(address,uint256,uint256)", +"9a5eb28f": "BUYER_CAP_LOW_USD()", +"9a5f17ee": "ccEndTime()", +"9a5f54b3": "getTetherInts(address,uint256)", +"9a6203e9": "getClosingObligation(bytes32)", +"9a628121": "random256()", +"9a62b752": "becomeTurtlemaster()", +"9a63157a": "addressBankPartners()", +"9a64a276": "findById(uint256)", +"9a650fd8": "isTerminated(address)", +"9a651f0b": "firstStageRefund()", +"9a6524f1": "TOKEN_CAP()", +"9a65ddec": "getAddressByName(string)", +"9a65ea26": "startMinting()", +"9a661e66": "getGratitudesSizeOf(address)", +"9a670bbc": "secondPreSaleEndDate()", +"9a68323c": "getRoundDetails()", +"9a684658": "_getBlockIndex(uint256,uint256)", +"9a6921e4": "getOpGas()", +"9a6a30a4": "reclaimEther(address)", +"9a6a68e9": "numberWinner()", +"9a6b32e1": "claim_reward(uint256,bytes32)", +"9a6b607f": "distributeTokensToMembers()", +"9a6bd379": "powerUp(uint256)", +"9a6ced6d": "bountyAgents(address)", +"9a6d3aaa": "bet(uint256,bool)", +"9a6d7cb8": "_canMateViaMarketplace(uint40,uint40)", +"9a6d9671": "combineMyGirls(uint256,uint256)", +"9a6dac14": "getLOTBalance(address,address)", +"9a6dfeff": "totalVotesForParty(uint256)", +"9a6e9914": "deleteArrayString(bytes32,uint256)", +"9a6ec511": "_buildId(address,uint256,bool)", +"9a6edad1": "Jupiter()", +"9a6f978d": "DIP()", +"9a6fb6df": "productionUnitTokenContractCount()", +"9a6fcbdd": "popElement()", +"9a6fe50c": "getLatestForContractAddress(address)", +"9a701075": "WITHDRAWAL_END()", +"9a702ad5": "AVAILABLE_JOINTTOKENS()", +"9a70855e": "exchangeFlag()", +"9a70eb1a": "onSaleAmount()", +"9a713233": "pre_end()", +"9a71825e": "sellKnowledge()", +"9a721302": "SUPPLY_FOR_BOOUNTY()", +"9a722769": "autoFinishTime()", +"9a727526": "getManagementInfo()", +"9a729d03": "token_bid(address,uint256)", +"9a72afb6": "setIsDisputeActive(bool)", +"9a730617": "init(address,uint256,uint256,uint256,uint256)", +"9a7394f5": "setData_34(string)", +"9a7443da": "stageUsdCap(uint16)", +"9a74adda": "moveAccountIn(address)", +"9a74c10c": "getDefaultReportingGasPrice()", +"9a751072": "applyChangeWalletAddress(address,address)", +"9a75aa06": "emitPublicCapabilityAdded(address,bytes4)", +"9a7614ee": "acceptEther(uint8)", +"9a7615a2": "burnOwner(uint256)", +"9a772bce": "TokenCappedCrowdsale(uint256,uint256,uint256)", +"9a7754d6": "StagedCrowdsale(uint256)", +"9a777d5d": "buyCoins()", +"9a7853cd": "postTX(address,string,uint256,uint256,uint256)", +"9a78afc6": "reduceDiv_()", +"9a78c066": "checkExistsInArray(address)", +"9a78c562": "setSellingTime(uint256,uint256)", +"9a797128": "withdrawed()", +"9a79f4a8": "testFailHeaderInsufficientFee()", +"9a7a3293": "NoFakeCoin()", +"9a7a7c11": "makeRoll(uint256)", +"9a7b5b7b": "tryClose()", +"9a7baa81": "EcomethToken()", +"9a7be471": "updateMinDeposit(uint256)", +"9a7d5211": "TheDigitalStandard()", +"9a7db5d9": "adminSendWorldBalance()", +"9a7e00ef": "acceptBet(uint64)", +"9a7e9e1f": "executeByAction()", +"9a7ee18c": "AccountIsNotFrozen(address)", +"9a7efb7f": "giftFor(address,address,uint256)", +"9a8061e8": "setLicenceShopPrice(bytes2,uint256)", +"9a80e52f": "updateTknPrice(uint256)", +"9a819e5e": "forceLiquidation()", +"9a82031e": "getRoundWinnigNumbers(uint32)", +"9a824f00": "transferTobucketTwoContract(address)", +"9a828a71": "oracalizeReading(uint256,string)", +"9a82a09a": "cancelled()", +"9a82c93c": "PRESALE_ENDTIMESTAMP()", +"9a82f890": "isOracle()", +"9a8318f4": "total_withdraw()", +"9a8335e0": "sendTo(string)", +"9a841413": "deleteDeployer(uint256)", +"9a84792b": "onReturned(address,uint256,uint256)", +"9a84d0c4": "addToken(address,string,string,string,uint8,bytes32,bytes32)", +"9a862c2d": "stage2StartTime()", +"9a863892": "NewProposal(uint256)", +"9a86acda": "getHeld(uint256)", +"9a86cd04": "shittyRand(uint256)", +"9a87ebb5": "changeAllowances(uint256,uint256)", +"9a880629": "dStartsNow()", +"9a880848": "attackhill(uint256)", +"9a881ab4": "payToFines(uint256)", +"9a882b7a": "createtoken(string,string,string,string,string)", +"9a891058": "keyIndex(bytes32)", +"9a89ad65": "within6Confirms(int256,int256)", +"9a8ae2fa": "changeLastFreeBlock(uint256)", +"9a8b3d8f": "getClientProjects(address)", +"9a8ca12c": "icoEnds()", +"9a8cea55": "testPush()", +"9a8cea82": "calculateDevFee(uint256)", +"9a8d10a3": "addData(uint256,bytes32)", +"9a8d36fa": "_openGameRange(uint256,uint256)", +"9a8d86c5": "CrowdSale_Finalize()", +"9a8e7b02": "ProposalClosed(uint256,uint8,uint256,uint256,bool,uint256,uint256)", +"9a8f09bd": "newKing(address)", +"9a8f139d": "getPercent1(address)", +"9a8f4dbf": "CancelSellOrder(uint32)", +"9a8f71f7": "saveData(bytes32,uint256)", +"9a8f72d1": "pruebacn123()", +"9a900e8c": "changeDepositWalletAddress(address)", +"9a903ca7": "allocateTokens(address,uint256,uint256,uint256)", +"9a9249a8": "_calculateCurrentPrice(uint256,uint256,uint256,uint256)", +"9a92b7e7": "EthVenturesFinal()", +"9a93e940": "testFailCreateNewRevisionNotUpdatable()", +"9a94ab9c": "addDelegate(address,string,address,uint256)", +"9a953408": "CHLORINETOKEN()", +"9a954af9": "getFreeToken()", +"9a956915": "icoInvestors(address)", +"9a95ca48": "presaleCapReached()", +"9a95d0e4": "DEEO()", +"9a960778": "SBK()", +"9a961416": "gameNext()", +"9a967e3b": "nextMember()", +"9a969768": "distributeProfits(uint256)", +"9a96f829": "devs()", +"9a97043b": "depositIdx(address)", +"9a98aa1e": "Scorpio(uint256,string,string)", +"9a98ac88": "GCSToken()", +"9a999359": "priceUpdatedTime()", +"9a99ebf4": "drainGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9a99f7e0": "isModOrCreator()", +"9a9a5cdb": "checkEthBalance(address)", +"9a9b1709": "PGGamePlatform()", +"9a9b5323": "AlforroCoin()", +"9a9bc131": "aidrop(address[])", +"9a9c29f6": "settle(uint256,uint256)", +"9a9c437d": "CryptFillToken()", +"9a9c9c53": "DepositToBankAccount()", +"9a9d0935": "totalBountySupply()", +"9a9d6515": "APPC()", +"9a9e3fd8": "successful()", +"9a9ed624": "ProfitLoaded(address,uint256)", +"9a9f1304": "drawMini()", +"9aa035dd": "dev_multisig()", +"9aa03cc6": "calculateExchangeFee(uint256)", +"9aa07ed7": "DietEthereum()", +"9aa0a50e": "btcDeposits(bytes32)", +"9aa0ff7b": "SALE_END()", +"9aa1001b": "withdrawRewardPool(address,uint256)", +"9aa10ebf": "Story()", +"9aa13f04": "contractStart()", +"9aa1dab7": "removeOversight(address)", +"9aa26f06": "registerBytes32(address,bytes)", +"9aa287d9": "setIco1Tokens(uint256)", +"9aa3a443": "acceptContribution(address)", +"9aa4a64e": "set_patient(uint256,uint256,string,string)", +"9aa57922": "Bhtd()", +"9aa5ee73": "finalizeConfirmationPeriod()", +"9aa5f467": "phase_3_token_price()", +"9aa615ee": "initCrowdsale(uint256,uint256,uint256)", +"9aa72320": "EthereumCare(uint256,string,uint8,string)", +"9aa727f6": "mult(uint256,uint256)", +"9aa72b71": "shareAmount(address,uint256,uint256,uint256)", +"9aa74525": "increaseWithoutCounterparty(bytes32,uint256)", +"9aa84b0b": "blockNode(address)", +"9aa92f0c": "previousRounds(uint256)", +"9aa93224": "sendOre(address,uint256)", +"9aa99dc8": "ownerPauseJackpot(bool)", +"9aa9f27b": "privateSell2Address()", +"9aaa38a6": "ChangeComission(uint256)", +"9aaa3eec": "updateNickname(address,string)", +"9aaa4696": "transferRaw(address,uint256)", +"9aaa5750": "addGoldTransaction(string,int256)", +"9aaa6b4d": "getAttackAddress()", +"9aaac864": "isInitialBlockTimestampSet()", +"9aab0c7a": "BitUPToken()", +"9aac9e91": "EndPreSale()", +"9aacb10a": "setNewCreator(address,uint256)", +"9aacb18c": "getSolution(uint256,uint256)", +"9aae3d0e": "maxWeiTier1()", +"9aaf442c": "applyCensorship(uint256)", +"9aaf5e05": "allocateTokensBeforeOffering(address,uint256)", +"9aaf9f08": "getVersion(bytes32)", +"9aafbff0": "addEntryIn24WeekPeriods(address,uint256,bool,uint256)", +"9ab060de": "milestoneBonus()", +"9ab06fcb": "setPayment(address)", +"9ab102ac": "isAffiliated(address)", +"9ab1416c": "accept_B_coupons(address,uint256)", +"9ab1b484": "distributeTokens()", +"9ab1d468": "privateSaleTransfer(address[],uint256[])", +"9ab253cc": "transferToICAPWithReference(string,uint256,string)", +"9ab2cf0d": "checkLockedBalance(address,uint256)", +"9ab3161d": "AnimalFactory(address,address)", +"9ab361a2": "unlockTimeLine()", +"9ab3a1fd": "setMvpExists(bool)", +"9ab3bfd7": "Tier_Basic_Registration()", +"9ab42287": "getAllAnimalsByAddress(address)", +"9ab422f3": "register(string,uint256,uint256,uint256,uint256,address[])", +"9ab448d9": "updateForkValues()", +"9ab4833e": "viewToken()", +"9ab4b22f": "releasedBalance()", +"9ab4d3a8": "checkInvestorReturns(address)", +"9ab567ba": "batchTransferForSingleValue(address[],uint256)", +"9ab61631": "_removeVesterManager(address)", +"9ab79905": "withDiscount(uint256,uint256)", +"9ab7d0b7": "setTheName(string)", +"9ab7f298": "add_user(bytes32,bytes32,int256)", +"9ab80f14": "BuyPrice()", +"9ab86b78": "getVoteHubDetails()", +"9ab90ba0": "realityID()", +"9ab95202": "babzBalanceOf(address)", +"9ab9ee73": "prPool()", +"9abb08ed": "migrateStateFromHost()", +"9abb2c16": "getAuctionsCountForUser(address)", +"9abb9e78": "powerDayEthPerPerson()", +"9abc03d2": "auctionsStartTime()", +"9abd3572": "claimDividend(uint256)", +"9abd7d50": "SelfDestructTime()", +"9abe275f": "closeChannel(address,bytes32,uint256,bytes32,bytes)", +"9abe3906": "closePreICO()", +"9abec159": "DISCOUNT_STAGE_THREE()", +"9abeddf8": "getLastUnionId(bytes32,uint8)", +"9abfba20": "DeleteBillModerator(address)", +"9ac08dfd": "receiveApproval(address,uint256,address,bytes1)", +"9ac17057": "execute(uint128,uint128)", +"9ac18b19": "REQUIRED_SIGNATURES()", +"9ac1f9a1": "add_commitment(uint256)", +"9ac22e5b": "test_oneTrueAndFalseAssert()", +"9ac233f3": "Monarchy()", +"9ac2ba20": "start_all()", +"9ac3317b": "grantMultiplePermissions(address,bytes32[])", +"9ac3fce6": "getBankReg(address)", +"9ac467f9": "getAllSigners(uint256)", +"9ac4fa49": "isAirdropStopped()", +"9ac50a62": "tenmatest()", +"9ac58d58": "get_len()", +"9ac785ba": "LockDate(uint256,uint256)", +"9ac8cd1b": "calcJackpotFee(uint256)", +"9ac97e84": "getNumDIDHolders()", +"9ac9940f": "assetOwner()", +"9aca6e2e": "calculate_total_shares(uint256,uint256)", +"9acab88c": "forwardFunds(uint256,address,address)", +"9acade7e": "testFailTransferDisableNotEnabled()", +"9acae9fc": "createChannel(bytes32,uint256,uint256)", +"9acb1506": "_createMeme(string,uint256,address)", +"9acb1ad4": "right37(uint256)", +"9acb3824": "getHorsesInStud()", +"9acba2af": "durationSeconds()", +"9acbdcab": "updateNoteButContent(uint64,uint16,bytes12)", +"9acd07b5": "closeChannel(uint8,uint256,bytes32[4])", +"9acd5e0e": "getGuestNotes(address,address)", +"9acdc0e3": "setCommunityTokensHolder(address)", +"9acf603b": "token_wallet_address()", +"9acf6ff4": "distributeRemaining()", +"9acfb1a8": "getCCH_edit_25()", +"9ad0a5ac": "addWhitelisted(address[],uint8[],uint256[])", +"9ad0c86c": "IouRootsToken(uint256,address,string,string,uint8)", +"9ad10d79": "PELOMemberIDMap(uint32)", +"9ad1b348": "getKNCRateRange()", +"9ad1c999": "setdevFeeAddress(address)", +"9ad25a68": "COSMOTokenERC20(uint256,string,string)", +"9ad26744": "removeAuthorizedAddressAtIndex(address,uint256)", +"9ad3a7ba": "renounceWhitelister()", +"9ad4eccf": "sentTokensToFounder()", +"9ad4f658": "CATToken(address,address,address,uint256,uint256)", +"9ad4f98e": "BlocksureInfo()", +"9ad55220": "getPrivate()", +"9ad5be7b": "setPlayValue(uint256)", +"9ad73f20": "runPluginSigned(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"9ad74f81": "setAllowTransferGlobal(bool)", +"9ad7ebc3": "specialPoolsRate()", +"9ad89ac4": "settleCancel(bytes32[8],bytes)", +"9ad8b5b7": "addAttachmentToCollectible(uint256,uint256)", +"9ad900d6": "get_first_asset_document(bytes32)", +"9ada7a4c": "NumberTaken(uint256)", +"9adba14b": "logStr(string)", +"9adc15ef": "ShaBi()", +"9adcb5eb": "acceptBet(uint256,uint8)", +"9add2ad9": "MIN_ETH_TRANS()", +"9ade76f4": "VestingCreated(address,uint256,uint256)", +"9aded5dc": "deathData_a6()", +"9ae000c6": "WeedToken()", +"9ae0140c": "removeRoleCapability(uint8,address,bytes4)", +"9ae06672": "getDailyTimeLeft()", +"9ae066b0": "foundationDeposit()", +"9ae082a4": "PooShitToken()", +"9ae120dd": "closeZoneTeller(bytes2)", +"9ae13375": "groupDates(uint256)", +"9ae1a635": "Q500()", +"9ae1c4f8": "mintToken(uint256,int256)", +"9ae21121": "lastowner()", +"9ae2835c": "balanceOfIssuer(address)", +"9ae38844": "newMembers()", +"9ae466bf": "recipientETH()", +"9ae4e388": "ChangeClientTokenAccount(address,bool)", +"9ae51a1f": "getTeamlistSupportInTournament(uint256)", +"9ae568b1": "CreateSEEDS(address,uint256)", +"9ae5dc91": "setNTToken(address)", +"9ae6303d": "getHatchDurationByTimes()", +"9ae6309a": "currentMintableTokens()", +"9ae65eea": "addProposal(string,string,string,address)", +"9ae6892b": "transferOwnershipToken(address)", +"9ae6b186": "bZxTo0xV2Contract()", +"9ae6cac7": "SemainToken()", +"9ae6ef15": "getCumulativeIncome()", +"9ae7a909": "multiPartyTransfer(address[],uint256)", +"9ae8886a": "p()", +"9ae8ac3c": "TRADING_STARTED()", +"9ae8b6a1": "WMCToken()", +"9ae980a8": "setMinWager(uint256)", +"9ae9d383": "getnotice()", +"9ae9ff6a": "withdrawBeforeVoting(uint256)", +"9aea020b": "sellDeadline2()", +"9aea5485": "revealMove(uint256,uint8,uint8,string)", +"9aeb14a5": "sumHardCapPreICO()", +"9aeb5947": "payToCharm(string,uint256)", +"9aeb69a2": "withrawWin(address,uint256)", +"9aebdf7e": "updateJackpotLeft(uint256)", +"9aece83e": "set_manager(address)", +"9aecea62": "finalizeIPO()", +"9aeceb1d": "transferBallance()", +"9aecfb8a": "Etharea()", +"9aed58c6": "_destroyRobot(uint256)", +"9aed6ac9": "registerPresaleContributor(address,uint256)", +"9aed7c15": "sendBalanceERC20(address,uint256)", +"9aedabca": "valueOfShares()", +"9aedb1f1": "setVotingQuestions(string,string)", +"9aee046b": "callOracle(uint256,uint256)", +"9aeea806": "MARKET_CHANGE(address)", +"9aef0c6c": "privateSaleClosingTime()", +"9aef319f": "closeBlacklistSwitch()", +"9aef8999": "removeWhiteList(bytes32)", +"9aefff29": "totalSupplyPreSale()", +"9af003bd": "ChangeConversionRate(uint256,uint256)", +"9af041aa": "currentSaleStage()", +"9af1d35a": "fees()", +"9af1ef32": "offerHelp(address,address)", +"9af22f9c": "Shiner()", +"9af25d07": "releasedRoundCount()", +"9af26b78": "finishMinting(bool)", +"9af28b65": "NEXT_POT_FRAC_TOP()", +"9af2b100": "Permissions()", +"9af2cad2": "CryptoCoin()", +"9af32035": "addIcoPurchaseInfo(uint256,uint256)", +"9af3352d": "updateGuReferral(uint256,uint256,uint256)", +"9af3b527": "getOwnerOfCardsCheapestWager(address,address)", +"9af4afb3": "BlueOs()", +"9af4b5c8": "isOwedFreeReferralPack(address)", +"9af55773": "minSumICOStage6USD()", +"9af605cb": "__proxy(address,bytes,uint256)", +"9af6489d": "CheckTree(address)", +"9af64d80": "previousstageplayer1()", +"9af6549a": "beneficiaryWithdraw()", +"9af75b29": "tokensMintedForOperations()", +"9af88ebd": "_createOpinionSet()", +"9af8c4ba": "respond(uint256,address,bytes)", +"9af8f5de": "totalEDUSLeft()", +"9af917f4": "addRentable(bytes32,uint256,uint256,uint256,uint256)", +"9af95a4b": "dateBonus(uint256)", +"9af9f012": "wavesAgent()", +"9afa3dc7": "ADVISOR_STAKE_THREE()", +"9afb24ab": "setCLIForGas(uint256)", +"9afb93cb": "buyTicket(uint256,string)", +"9afbe49a": "tokenAmountOfPeriod(uint256,address)", +"9afcfba3": "getBurnRequestStatus(uint256)", +"9afd46a3": "closeTurnByHand(uint32)", +"9afd8b1d": "LiteBoxToken(address,string,string,uint256,uint256)", +"9afd9d78": "rollback()", +"9afe340f": "OasisToken()", +"9afebd18": "contract_finish()", +"9afec0ae": "ESOPLegalWrapperIPFSHash()", +"9aff301f": "FightClockAuction(address,uint256)", +"9affa42d": "increaseApprovalBatch(address[],uint256[])", +"9b012dec": "denyTransfer()", +"9b013aee": "getBidPrice(uint256)", +"9b01c7ac": "getFishIdByAddress(address)", +"9b02e258": "changelp12(address)", +"9b03a211": "transferPresaleTokens(address,uint256)", +"9b04564a": "proposeTeamWithdrawal(address)", +"9b046ed3": "getCharacterTraits(uint256)", +"9b05535f": "checkpointBlock()", +"9b059309": "GoshenCoinCash()", +"9b05934c": "calculateSecretHash(uint256,bool,bytes32)", +"9b0646f6": "wadmin_setContrAddr(address,address)", +"9b06e9f5": "seTJackpotPersent(uint256)", +"9b087b2d": "totalTransferred()", +"9b08a22f": "allowTransfer()", +"9b08ace1": "bonusSecondWeekPeriod()", +"9b08e8fc": "changeParent(address)", +"9b092f73": "safemul(uint256,uint256)", +"9b09768a": "maximumPoolPurchase()", +"9b09dfbd": "addArrayItem(address,string,string,address)", +"9b0a4764": "AkirasToken()", +"9b0a541e": "LogAllowedToAddress(address,bool)", +"9b0a5e67": "buy(string,uint256,uint256)", +"9b0aac15": "maxTokenSupplyPublicSale()", +"9b0ac9b0": "refundTime()", +"9b0b5bb2": "MIN_BANKROLL()", +"9b0b9c07": "acceptBankDraft()", +"9b0c1e51": "BONUS_MAX_DURATION()", +"9b0d1b2c": "getSpawningFor(address)", +"9b0ec5ae": "newSeed()", +"9b0ee7b7": "updateAirdropEndTime(uint256)", +"9b0f2510": "placeLong(address[2],uint256[8],uint8,bytes32[2])", +"9b0facaa": "existIdBeforeVersion(bytes32)", +"9b10394c": "IsOnSale(uint32)", +"9b10e9f7": "rawDetailsOf(bytes32,bytes32)", +"9b110f4b": "GayPersonalAdsToken(uint256,string,uint8,string)", +"9b11503e": "PUBLIC_SALE_START()", +"9b121e7c": "wethWithdraw(uint256)", +"9b12664f": "referralMinimum()", +"9b129181": "LTE()", +"9b12a4a1": "setCanDisburseMultipleTimes(bool)", +"9b132392": "createTrainer(string,uint16)", +"9b139504": "addPlayer(string,address,uint256,uint256)", +"9b13d209": "buyGuardianRune(uint256,uint256,uint256,uint256)", +"9b15ef2e": "END_PRESALE_TIMESTAMP()", +"9b16250a": "finishSign(uint256)", +"9b164ce3": "TestApprove()", +"9b173d57": "withdrawPolicy(uint256,uint256,uint256,address)", +"9b17b2dc": "checkWeather()", +"9b181e39": "_isAccepted(address,address)", +"9b18d79a": "one_ether_usd_price()", +"9b19251a": "whitelist(address)", +"9b19a92b": "year1LockAddress()", +"9b1a78c0": "ClaimGMT(address,uint256)", +"9b1a9b23": "destinationAddress80()", +"9b1ad792": "destroyToken(address,uint256)", +"9b1b0ab3": "buyingEscrowAddress()", +"9b1b615e": "pool(uint256,uint256)", +"9b1b8f62": "_gapOfSquareSum(uint256,uint256)", +"9b1bb323": "initContract(address,address,address)", +"9b1cbccc": "finishDistribution()", +"9b1cdad4": "postBounty(uint128,uint256,string,uint256,uint256,uint256[8])", +"9b1d767f": "fstTotalSupply()", +"9b1d8032": "clz32(uint32)", +"9b1d834c": "genPot_()", +"9b1dd3e5": "pullRipCord()", +"9b1e3825": "approveFundTransferToSupplier(address)", +"9b1f46cd": "allMilk()", +"9b1f70d1": "BET_RELEASE_DATE()", +"9b1f9e74": "_burn(uint256)", +"9b1fe0d4": "isApprovedInvestor(address)", +"9b21003b": "notPauseable()", +"9b2112c7": "ShopDexToken()", +"9b217f90": "getVestingTime(address,uint256)", +"9b21929a": "TOTAL_SUPPLY_BOTTOM_BOUND()", +"9b227a97": "ETH_TLD_LABEL()", +"9b22c05d": "test(int256)", +"9b234a9e": "tokensByWavesTx(string)", +"9b248798": "_InsufficientFunds(address,uint256,uint256)", +"9b24b3b0": "getRoot(uint256)", +"9b250f76": "clientInit()", +"9b252b7e": "t3Token()", +"9b256f46": "changeRoundBlock()", +"9b25e6f1": "ReservedTokensDistributed(address,uint8,uint256)", +"9b263eca": "providerContract()", +"9b267540": "unblockTokens(address,uint256)", +"9b26bae3": "AliciaToken(string,string,uint8,uint256)", +"9b276964": "STARTING_BAT()", +"9b27bf3a": "setWhiteListStatus(bool)", +"9b2843e2": "randomDNA(uint256)", +"9b285582": "ChangeIp(bytes32,bytes32)", +"9b28db50": "getWalletId(address,bytes32)", +"9b28f644": "setupFunctionalAddresses(address,address)", +"9b28f75a": "reclaimBalanceTokens()", +"9b29a295": "Payable(address,uint256)", +"9b29cb23": "getDailyPayment()", +"9b29f133": "userCancelActiveGame(uint256)", +"9b2a9d19": "origDev()", +"9b2aab1d": "frozenAccountOf(address)", +"9b2b0031": "updateDescriptiveInformation(address,string,string,string,string)", +"9b2b89d4": "UCAL(uint256,string,uint8,string)", +"9b2bdc20": "claimAllowanceOwnership()", +"9b2cb5d8": "minAmount()", +"9b2d2cbd": "orePrice()", +"9b2e5d32": "claimItems(uint256,uint256)", +"9b2ea4bd": "setAddress(string,address)", +"9b30a187": "nextWave()", +"9b30c7db": "changePortalAddress(address)", +"9b311b17": "averageMinerSalePrice()", +"9b322b7e": "HuandeToken(uint256,string,uint8,string)", +"9b3235bf": "getAbel()", +"9b33093f": "createNew(address,address,uint256)", +"9b332a91": "payDate()", +"9b33d7b3": "createAuction(uint256,uint256,uint256,uint256,bool)", +"9b33f055": "cancelSubscriptionOffer(uint256)", +"9b343342": "getRandomPrice(uint256)", +"9b343525": "highestContribution()", +"9b343e35": "createChildContract(string,uint256,uint256)", +"9b347f42": "teamVesting2Years()", +"9b34ae03": "winningOutcome()", +"9b350e12": "isEscaping(uint32)", +"9b351087": "cancelTreeSell(uint256)", +"9b3544f6": "postAssertion(uint128,uint256,uint256,uint256)", +"9b35928f": "RXBbitToken()", +"9b35b35a": "lockTs()", +"9b36057c": "registerGame(address)", +"9b3662bf": "currentParticipants()", +"9b367370": "confirmBlackFlag(uint256,bool)", +"9b36c3bc": "setMaxTotalAmount(uint256)", +"9b3725e8": "stageGenomes(uint8)", +"9b39caef": "COIN_PER_ETHER()", +"9b39f377": "getAnimalByIdVisibility(uint256)", +"9b39f9bf": "remainingTokensForSale()", +"9b3a300b": "SNK(uint256,string,string)", +"9b3a36c0": "calculateTokensWithBonus(uint256)", +"9b3b24ba": "VESTING_AMOUNT()", +"9b3ba79f": "maxAllocation()", +"9b3bc6fb": "checkERC20Balance(address)", +"9b3cbdf6": "CrowdSale(address)", +"9b3d17b1": "tokenSPUsdCentPrice()", +"9b3dfce0": "isPoDStarted()", +"9b3e28cc": "TokenReceivingEchoDemo(address)", +"9b3e9a48": "changeFreezeTime(uint256,bool)", +"9b3ee16e": "initialize(address,address,uint256,uint256,address,address,address,address)", +"9b3fd75d": "beginGame(uint256,address,address)", +"9b3fdf4c": "EVMSCRIPT_REGISTRY_APP()", +"9b409510": "creditAdvertiser(address)", +"9b415b2a": "erc20Payment(bytes32,uint256,address,address,bytes20,uint64)", +"9b41a9c5": "SedoPoWToken()", +"9b41b00b": "Sorus()", +"9b426e62": "assignTester(address)", +"9b44cb3c": "lastTrade()", +"9b46301e": "playersPerRound()", +"9b46461e": "getAnimalIdAgainstAddress(address)", +"9b46a71c": "setContractCap(uint256)", +"9b4778e4": "get_arbits_sale_open()", +"9b480435": "setPublicPlacementNum(uint256)", +"9b487f3f": "_forwardTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"9b49413c": "GetItemInfo(uint256)", +"9b4a6bdb": "test_spamVoting()", +"9b4a7fe9": "setCCH_edit_17(string)", +"9b4b2d77": "processOffchainTokenPurchase(address,uint256)", +"9b4b973d": "acceptSettlement(uint256,uint256)", +"9b4bb9f0": "schedulePriceUpdatesFixed(uint256[])", +"9b4c1290": "_getFishPrice(uint16,uint16,uint8,address)", +"9b4c1902": "getGovtApplicationByIndex(string,uint256)", +"9b4c7b70": "redemptionFundTotal()", +"9b4d54fc": "startCrowdsale2(address)", +"9b4d9ecc": "setGrowCost(uint256)", +"9b4e533e": "isLastWithdraw(address)", +"9b4f19c6": "getMonths()", +"9b4f1ecb": "initialCost()", +"9b504387": "controllerTransfer(address,address,uint256)", +"9b51e35a": "getSchemePermissions(address,address)", +"9b52cacc": "ListingCreated(bytes5,uint256,uint256,uint256,address)", +"9b539a17": "setEncryptKey(string)", +"9b53a396": "calcKicks(uint256)", +"9b53d87c": "isManagerEnabled(address)", +"9b550e55": "nextMineId()", +"9b563fa3": "save(uint256,string,string)", +"9b566564": "withdrawAirdrop(uint256,bytes)", +"9b56730d": "compoundInterest(uint256,uint256,uint256,uint256)", +"9b5696b0": "notCollectedAmountAfter24Hours()", +"9b56d6c9": "getCollateral(address)", +"9b5719a6": "setSalesContract(address)", +"9b58316a": "EBANKTOKEN()", +"9b58b463": "retire(address,address)", +"9b58e46b": "createProduct(string,bool,uint256)", +"9b5906e5": "getLifeCoin()", +"9b598caf": "pastProposalTimeRules()", +"9b59ffd7": "verifyGame(bool)", +"9b5a2e13": "setBadgeGiver(address)", +"9b5a66e6": "insertInPlace(uint8[],uint8)", +"9b5adea2": "setMinter()", +"9b5b094f": "ANMOToken()", +"9b5b4019": "EtherWild()", +"9b5b969f": "transferSub(address,uint256)", +"9b5c0b5e": "burnPerweiYearly()", +"9b5cc9f4": "transferOwner1(address)", +"9b5cfcdd": "account1Address()", +"9b5d2e78": "TPI()", +"9b5d7d0b": "addBalanceReplenishment(uint256,uint256,uint16,bytes32,uint256)", +"9b5d8e63": "Multiplexor()", +"9b5e5d8c": "newCustomFutureLottery(uint256,uint256,uint256,address,uint256)", +"9b5f8abb": "getAllSponsors()", +"9b5fde7d": "payOut(uint256,string)", +"9b601c4d": "getQueryPrice(string)", +"9b60a443": "payto1()", +"9b612a1b": "freezeStaking(address)", +"9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", +"9b61cf09": "MOBILITYCREDIT()", +"9b624e7b": "setRound(uint256)", +"9b632829": "refundAll(address)", +"9b6349a8": "TokenDCCB(uint256,string,string)", +"9b63d0f4": "core(bool)", +"9b63eb4b": "getTicketsByGameIndex(uint256)", +"9b666d7a": "cos(int256)", +"9b6687ac": "getNumPositionProduct(bytes32,uint8,string)", +"9b671604": "proposeVoter(bytes32)", +"9b678bfc": "calcRates()", +"9b67bfa3": "fiatValue(uint256)", +"9b6806c9": "getCompanyShareholders(uint256)", +"9b68c992": "SubmitSecretBet(bytes32)", +"9b69608f": "read_dgx_inventory_balance_ng()", +"9b69de79": "transferLockAmount(address,uint256)", +"9b6a2b2f": "spriteOwningHistory(address,uint256)", +"9b6a6709": "presaleMint(address,uint256)", +"9b6aa1fa": "TransferData(address,address,uint256,bytes)", +"9b6b838c": "reinvestment_share()", +"9b6c5283": "createPool(string,uint256,uint256)", +"9b6c56ec": "debt(address)", +"9b6d86d6": "adminSetRegistrationDisabled(bool)", +"9b6d96c5": "create(int256,int256,int256)", +"9b6dbc8a": "closeShop()", +"9b6e407d": "setPercentUnfrozenAfterBuyPerPeriod(uint256)", +"9b6ec1cb": "HerbsChainToken()", +"9b7143eb": "creditsClawbacked()", +"9b71a7c9": "addAddressToRole(address,string)", +"9b71dec3": "getVineyardCount(string,address)", +"9b727e80": "CNiteToken()", +"9b73a5d9": "hasTwoYearWithdraw()", +"9b743cbd": "allocated18Months()", +"9b7502c3": "getLastAuditExtradata(address)", +"9b769ce3": "JsCoin()", +"9b76a25c": "transferFee(address,address,address,uint256)", +"9b76c1de": "team3LockEndTime()", +"9b76fbd6": "_recordPlatformFee(uint256)", +"9b771346": "ImportTestB()", +"9b772524": "partner1_signed()", +"9b7750f1": "addBranchInEpisode(uint256,uint256)", +"9b77c21a": "getClaimStatus()", +"9b77d69f": "addTagByModuleType(uint8,bytes32[])", +"9b7812ff": "add_quote(bytes32,bytes32,uint256,uint256)", +"9b781ce4": "updateExcludedAddress(address,address,bool)", +"9b782070": "TSSECOND()", +"9b786d68": "profitSharing(address,string)", +"9b788752": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", +"9b78cf9c": "medalFreeze(address,uint256,uint256)", +"9b7a67bd": "getAccountPar(uint256)", +"9b7b59db": "setdrawtoken(address)", +"9b7c08b8": "ERCToken(uint256)", +"9b7c288f": "lastDeploy(address)", +"9b7c5517": "committ_payment(uint256,uint256)", +"9b7d83e7": "porcoToken()", +"9b7defe3": "returnTokensFromHoldAdvisorsAddress(uint256)", +"9b7e5531": "ownershipDeadline()", +"9b7edbdb": "buyLimit(uint256)", +"9b7eeb12": "setScrapMinEndPrice(uint256)", +"9b7ef38c": "BatchUtils()", +"9b7efac7": "subUInt(uint256,uint256)", +"9b7f1687": "iUventaCoin()", +"9b7faaf0": "lockOver()", +"9b80c9e8": "payMoneytoOwner()", +"9b815057": "changeMakerDAO(address)", +"9b818ace": "SLChainToken(uint256,string,uint8,string)", +"9b819d38": "getNowTime()", +"9b81c8d3": "updateMeterValue(uint256)", +"9b82171f": "houseTotal()", +"9b828609": "reclaimContributionWithInterest(address)", +"9b82abdb": "LogBought(address,uint256,uint256,uint128)", +"9b831dcb": "RateUpdate(uint256)", +"9b8342d4": "getPlayerDividendByRound(address,uint256,uint256)", +"9b836d1a": "_payout(address,uint256)", +"9b83d121": "transferFokenBonus(uint256)", +"9b8430eb": "distributeRevenue(uint256,uint8,uint8)", +"9b850322": "escrowDecision(uint256,uint256)", +"9b855a85": "releaseEQUITokens(bytes32,uint8,bytes32,bytes32)", +"9b85b9c9": "createDrug(bytes32,uint256)", +"9b85bc85": "CocacolaToken()", +"9b865999": "InitialOwnerAddress()", +"9b86975d": "ANemoiSaleContract()", +"9b880fee": "registerVestingSchedule(address,uint256,uint256,uint256,uint256)", +"9b8831df": "hasArtist(bytes32)", +"9b8906ae": "saleEnded()", +"9b894703": "maxTickets()", +"9b8a74f0": "cancelOffer(address)", +"9b8abe0b": "thousandtimes()", +"9b8b03a2": "strongHands(address)", +"9b8b365d": "deathData_a5()", +"9b8b6037": "findModuleVersionByAddress(address)", +"9b8b7160": "setPreFundingtokens(uint256)", +"9b8d1dd4": "CARDANOCLASSIC()", +"9b8d3064": "setFinance(address)", +"9b8d34d9": "addAgreement(bytes32,uint256,address[])", +"9b8da66c": "getEthFundDeposit()", +"9b8eb288": "setPercentWeiDividend(uint256)", +"9b8eb7b4": "getSocialAccountByIndex(uint256)", +"9b8ebc54": "checkVoter(address)", +"9b8f2493": "updateBurnBal(uint256)", +"9b8f5acf": "CyberChainToken()", +"9b8f5d4a": "setTilePosition(uint16,uint8,uint8)", +"9b8f7113": "dateSoftCapWasReached()", +"9b8fdf1b": "cancelExpectedPayment(bytes8)", +"9b901d00": "_createTeamSale(uint256[9],uint256,uint256,uint256,address)", +"9b9073e4": "allocationPool()", +"9b9111ee": "commonConfigure(address,address)", +"9b914973": "prebuyPortionTotal()", +"9b91f9be": "Gol()", +"9b922d97": "setCoinsaleactive(bool)", +"9b9279ec": "StartRefound(bool)", +"9b92adf3": "EnableTokenMinting(bool)", +"9b93aaf4": "addNewLoggerPermission(address,address)", +"9b945097": "getRandom(address,uint256,uint64)", +"9b9545eb": "Rython()", +"9b9692f6": "TokensDistribution(address,uint256)", +"9b96c4ba": "AdvisorPart()", +"9b96eece": "getBalanceOf(address)", +"9b973803": "transfer10(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9b97cee5": "getWorkCount()", +"9b985b30": "bountyMaxTokens()", +"9b986550": "getAllForPubKey(bytes32)", +"9b98a94b": "getLockTokens(address)", +"9b991d9b": "votingInfoTeam()", +"9b9958af": "getAllCardsClaimed()", +"9b99a8e2": "reserveTokenCount()", +"9b9a09a6": "HackContract()", +"9b9a236b": "SuperToken()", +"9b9a47e3": "getlastDividendPoints(address)", +"9b9b0b87": "mainICOFourthWeekEndTime()", +"9b9ba572": "oraclize_query(string,string[3])", +"9b9be9cb": "mainSale_TokesSold()", +"9b9bedf8": "getContractCreated()", +"9b9cc2ca": "getPrivateSaleAgentAddresses()", +"9b9ce1bc": "sendTokensBulk(address[],uint256[],uint256[])", +"9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", +"9b9d2cc8": "RESERVED_TOKENS_ADVISORS()", +"9b9e07e1": "TeamtokenRelease3()", +"9ba11c0a": "coinunits()", +"9ba1a7d8": "preValidation()", +"9ba30c3b": "Healthcoin()", +"9ba319bf": "detangleQuanticCloudIOTData()", +"9ba33ab3": "refundLeftOverWei(uint256,uint256)", +"9ba3c2e0": "advisersAddr()", +"9ba3d8cf": "updatePromoFishCommission(uint256)", +"9ba4d4ee": "investedETH()", +"9ba4dbc2": "USDBTC(uint256)", +"9ba4eb5f": "SPINFundDeposit()", +"9ba58333": "AspirationCoin()", +"9ba5b4e9": "getEventHashes(bytes32[])", +"9ba65fff": "addNewcard(uint256)", +"9ba73d43": "deregisterCustomer(address,address)", +"9ba89492": "getNumAccounts()", +"9ba896cc": "refundTokensSale(address[])", +"9ba8975f": "changeFundsKeeper(address)", +"9ba8e37d": "withdrawFromToken(address,uint256)", +"9baa504e": "unrestrictedMint(address,uint256,uint128)", +"9bab0da3": "EVACASH()", +"9bab3988": "DongriToken(uint256)", +"9babdad6": "removeShareholder(address)", +"9bac6e8d": "currentMinter()", +"9bac8602": "testFailAddBalanceAboveOverflow()", +"9baca66b": "getElementOfWinnerTicketList(uint256)", +"9bacc97c": "specialAddress(address)", +"9bacf1ed": "createSynthesizingAuction(uint256,uint256)", +"9baddd98": "sendBountySupplyToken(address,uint256)", +"9bae56da": "getEstimatedRound(uint256)", +"9baeac78": "TOKEN_SUPPLY_PRESALE_LIMIT()", +"9baf7ffb": "etherToSendBankroll()", +"9bafd01a": "freeStorage(address)", +"9bafd22b": "DocumentCertoChainContract()", +"9bb00ae3": "ledgerCount()", +"9bb01b5f": "ElcoinDb(address)", +"9bb04895": "nominalValue()", +"9bb0e4df": "getUint(int256,bytes32,string)", +"9bb0f599": "hasToken(address)", +"9bb186d2": "MatchingMarket(uint64)", +"9bb192fd": "getVotes(uint32)", +"9bb1cfd6": "hasAvailableRewards()", +"9bb1dbea": "commonWithdraw(uint256)", +"9bb1fd66": "force_stop()", +"9bb2ea5a": "setMaxValidators(uint256)", +"9bb32be3": "challengeFinality(uint256)", +"9bb3bcaa": "setArrIntField1(int256[])", +"9bb5239a": "CheckPrize(address,uint256)", +"9bb5c96c": "isContributorsRewarded()", +"9bb5ce30": "participationFee()", +"9bb5d450": "getMonsterCount()", +"9bb5f901": "UCToken()", +"9bb603bb": "create(string,string,uint8,string,bool)", +"9bb639a8": "changeTokenCostInEth(uint256)", +"9bb6831f": "millCap()", +"9bb74bbd": "tokensSoldToInvestors()", +"9bb848e7": "isRunningIco(uint256)", +"9bb84cd0": "addSellTokensRequest(address,string,uint256,uint256)", +"9bb8b563": "POKCC()", +"9bb8ec22": "SmartAdvancedCoin(uint256,string,string)", +"9bb8fde4": "startTimeStage1()", +"9bb90467": "initTokenAndBrackets()", +"9bbba3a8": "getTokensOnSale(address)", +"9bbc156b": "AllLock()", +"9bbc574a": "closeUser(address)", +"9bbdb25a": "getPartners(address,uint256)", +"9bbeafc1": "setMarketFees(bytes32,uint16,uint16,uint16,uint16,bool)", +"9bbedbbc": "deliver(address,address,uint256)", +"9bbfa582": "Lambotoken()", +"9bc0fd25": "setBlocklancerContractHolder(address)", +"9bc13360": "standardrate()", +"9bc2bc71": "createEvent(string)", +"9bc30adb": "upgradeBalance(address,uint256)", +"9bc3135b": "buyoutDividendPercentage()", +"9bc33b8a": "MediatedTransactions_TransactionHeight()", +"9bc52a39": "logClassic(string,uint8)", +"9bc53cec": "Moontrail()", +"9bc5689d": "NUM_OF_CHOICES()", +"9bc61d06": "MeetupContract(string,string,uint256,uint256,uint256)", +"9bc64cc8": "saiTap()", +"9bc6b571": "ChangeExtension(uint256,bool)", +"9bc6d815": "BestCountTokens(uint256)", +"9bc6f0ec": "createChildDeposits(uint256)", +"9bc706e8": "publishedCountOf(address)", +"9bc72d5f": "worstCaseRateFactorInBps()", +"9bc742fe": "setStepOneLockEndTime(uint256)", +"9bc85302": "burnUserTokens(address)", +"9bc896f9": "orderCancel(uint256)", +"9bc8e9ee": "setMintingDec(uint256)", +"9bca3596": "Ubecoin()", +"9bca8a1e": "setTableTypesSize(uint256)", +"9bcb8dff": "BallzToken()", +"9bcc2b27": "ctrlZee()", +"9bcc9123": "rejectNegotiation(address)", +"9bccfe49": "actionsCount()", +"9bcdd9e8": "forgetCube(address)", +"9bce51e3": "sendCrowdsaleTokens(address,address,uint256)", +"9bcef169": "getLeaderboard(string)", +"9bcf497b": "setUserPaybackPool(address)", +"9bcf7352": "setEnableInternalLock(bool)", +"9bcf8ca2": "addresses(uint256,uint256,uint256)", +"9bcf9ea2": "PIVOT()", +"9bcfcee8": "minting(address,address,address,address)", +"9bd03774": "TokenContractImpl(uint256,uint8,address,address)", +"9bd0a967": "isEndsWithHpb(string)", +"9bd1ff8b": "tokenFallback(address,address,uint256,bytes,string,uint256)", +"9bd26234": "contrubutedAmount(address)", +"9bd2af03": "trent()", +"9bd2d912": "ZipflaxToken()", +"9bd33457": "totalOnDeposit()", +"9bd3651b": "Authenticate(uint256,address,uint256)", +"9bd41f7c": "createToken(bytes32,string,string,string,string,string)", +"9bd4d455": "addMember(string,address,string,uint256,uint256)", +"9bd4e13e": "bettor_reward(address)", +"9bd4e925": "CROWDSALE_ETH_IN_WEI_FUND_MIN()", +"9bd5679e": "getCurrentICOExpirationTime()", +"9bd6030c": "nbagame()", +"9bd658d9": "whoOwnsYou()", +"9bd69528": "addToKyc(address)", +"9bd695b0": "hasRequiredSignaturesToValidate()", +"9bd6a4de": "initPublicityAddr()", +"9bd702e4": "sellCrab(uint256,uint256)", +"9bd7d688": "checkAncestors(uint32,address,uint64,uint64,uint64)", +"9bd80dcf": "calculateMasked(uint256,uint256)", +"9bd8e081": "gunsFundDeposit()", +"9bd90aae": "maxTokensToCreate()", +"9bd99195": "multiAccessChangeOwner(address,address)", +"9bd9bbc6": "send(address,uint256,bytes)", +"9bda8678": "externalDeposit(address,uint256)", +"9bdbb4c7": "market_WithdrawBid(uint256)", +"9bdc6523": "setUserWhiteListContract(address,bool)", +"9bdce046": "DICE_HIGHER()", +"9bdd070d": "withdrawTokenToDefault(address,address,uint256,uint256,uint256,address)", +"9bdd7cdb": "forceRelease(bytes32)", +"9bde88f0": "getcan(address)", +"9bdf5a7c": "Zenix()", +"9bdf6f62": "soldTokenCount()", +"9bdff8eb": "oracleB()", +"9be07908": "left79(uint256)", +"9be08a4e": "NCPPrivate()", +"9be0f105": "OxChainNetwork()", +"9be0fc75": "toggleDrop()", +"9be1eab7": "setContractStakeToken(address,address)", +"9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", +"9be2385a": "depositOldTokens(address,uint256,address)", +"9be2faed": "isSchemeRegistered(address,address)", +"9be2ff64": "setAllowPlayer(bool)", +"9be3b286": "endOffering()", +"9be4d15e": "split(bytes32,uint8,uint256)", +"9be50784": "drawBenz()", +"9be56c67": "support(uint256,uint256)", +"9be572f6": "getTotalUsers()", +"9be5ad78": "_saleState()", +"9be5b3b1": "MetadollarOption()", +"9be6178e": "acceptBet(bytes16,bytes16,bytes16,bool)", +"9be6d404": "destructSelf(address)", +"9be7f1dd": "buyerfee()", +"9be88a01": "_rotateLeft(bytes32)", +"9be8a212": "FoundersFund()", +"9be95517": "_createRandomMonster(uint32)", +"9bea62ad": "restore(uint256)", +"9beaa524": "getActivityName(uint256,uint256)", +"9bead36f": "resolveEntityAddressAndOwner(address)", +"9beb6c6b": "_saleFinalized()", +"9bed31e4": "setParameters(uint32,uint256,address)", +"9bedb2c7": "MyReferrals()", +"9bee3365": "sayYes()", +"9bee757b": "requestExecution(bytes,uint256)", +"9beebe20": "setTrustedTransfer(bool)", +"9beef73f": "stageDistributed()", +"9bef0c47": "getUserPictureByWallet(address)", +"9befa8b4": "DisqusBot()", +"9befd45a": "payFee(bytes32)", +"9bf0093c": "LIV()", +"9bf037e5": "BaseCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", +"9bf070b5": "ethRaisedWithoutCompany()", +"9bf08a06": "joinArena()", +"9bf1c389": "stage_1_add()", +"9bf1f148": "requestAudit(address,bytes32,uint256)", +"9bf22189": "Validated(string)", +"9bf2926d": "Proposal(address,uint256,string)", +"9bf2ab46": "preSalesEndDate()", +"9bf30bac": "handleIncomingPayment(address,uint256)", +"9bf34e30": "ecrecover3(bytes32,uint8,bytes32,bytes32)", +"9bf39dce": "contributionTime()", +"9bf4c5c5": "destroyedNinjas()", +"9bf677e4": "phase_1_rate()", +"9bf68006": "testControlSetNotTransferableNotOwner()", +"9bf6b0a8": "withdrawForFiveStep()", +"9bf6deaf": "ChangeEmissionRateCoefficient(uint8)", +"9bf6eb60": "mintTokensExternal(address,uint256)", +"9bf74ae0": "periodICOStage1()", +"9bf7ef63": "verifyMultiSig(address,bytes32,bytes,uint256,uint256)", +"9bf865d0": "numberToAddress(uint256,address)", +"9bf8df7d": "recoverLost(address,address)", +"9bf97bd9": "get_deployed_forwarders()", +"9bf97e74": "BNN()", +"9bf9cd26": "PreSaleSold()", +"9bfa1f33": "ORDER_FILL(address,address,address,bool,uint256,uint256,uint256)", +"9bfa835b": "privateMin()", +"9bfa882e": "updateAddress(address,address)", +"9bfaa24b": "startTradable(bool)", +"9bfafdc2": "ERC223Transfer(address,address,uint256,bytes)", +"9bfb9717": "additional_incentive()", +"9bfb9752": "setTime1(address,uint256)", +"9bfba3c6": "ico2cap()", +"9bfc80fc": "TopSciFiVoter()", +"9bfd8d61": "totalStaked(address)", +"9bfdbf8a": "getOrganizerRegistrationStatus(uint256)", +"9bfdce3e": "deal(address,uint8)", +"9bfdd1bb": "setSchema(string,bytes32,string,uint256,uint256,uint256,uint256)", +"9bfdf68d": "requestLoans(uint256[],bytes32[])", +"9bfe171a": "STASToken()", +"9bfe7bd5": "getNumOrdersByOwner()", +"9bfeda53": "_getRewardTokenAmount()", +"9bff209d": "softSub(uint256,uint256)", +"9bff662c": "notify_payment_acceptance_request(uint256)", +"9c001bcc": "TOKEN_SHARE_OF_BOUNTY()", +"9c0051db": "setProfitTransferTimeSpan(uint256)", +"9c007973": "resolveDispute(bytes16,address,address,uint256,uint256,uint8)", +"9c01e1f5": "addNFToken(address,uint256)", +"9c01fdaa": "PimmelToken()", +"9c03b04f": "testItStoresAValue()", +"9c03f17f": "sencToken()", +"9c03facb": "sold(uint256)", +"9c041ebd": "create(address,address,address)", +"9c043783": "eachUnfreezeValue()", +"9c049dd0": "hydroStakingMinimum()", +"9c04e4e7": "pre_sale_end()", +"9c04ece9": "lastBlock_f7()", +"9c05093b": "setTeamTokensWallet(address)", +"9c05ba60": "getIndexName(bytes32)", +"9c066eab": "seeRaised()", +"9c0770fe": "ZIL()", +"9c07b2cd": "resetTotalSales()", +"9c080f5d": "showBalance(address)", +"9c08606c": "lockedDays()", +"9c08d549": "startICO(uint256,uint256)", +"9c0953cf": "setProducer(address,address,bool)", +"9c09a64c": "claimSMR()", +"9c09b32c": "ProcessTransaction(uint256)", +"9c09bb4e": "getBestMatch()", +"9c09c3bb": "attestForIdentity(address)", +"9c09c7c6": "addGuessWithRefund(int256)", +"9c09c835": "enableWhitelist(address[])", +"9c09f869": "PixelSelling()", +"9c0a4bbc": "AlwaysFail()", +"9c0b7c08": "terminateFunding()", +"9c0baa2d": "_getRate(uint256)", +"9c0bd57c": "withdrawDragons()", +"9c0c2238": "withDrawEther()", +"9c0cc30c": "getAllArtworks()", +"9c0d010e": "_checkOpenGame()", +"9c0df4f2": "blessings()", +"9c0e3f7a": "write(uint256,uint256)", +"9c0e7d66": "leftoverTokensBuffer()", +"9c0ee65b": "Hold(address,uint256,address,address,address)", +"9c0f16ed": "tokensOfTeamAndAdvisors()", +"9c0fc1e4": "AIC()", +"9c117f0f": "get1(uint256)", +"9c118238": "withdrawBalanceFromServer(address,uint256,bytes)", +"9c1193ea": "GreeterA(bytes)", +"9c121aff": "LogClaim(bytes32,address,uint256)", +"9c121b6d": "meltHorseShoe(uint256,address)", +"9c1230c1": "amount_stages()", +"9c128493": "Lol1CoinCoin()", +"9c12ca21": "setGroupBounty(address[],uint256)", +"9c12deab": "isVendor(address,address)", +"9c135572": "documentsIds()", +"9c147688": "bulkMint(uint32[],address[],uint256[])", +"9c14c77b": "getBuyTime(uint256)", +"9c14e25b": "DonQuixoteToken(address)", +"9c1500f0": "registerMany(address,uint256,int256,uint256,bytes,address,bytes)", +"9c15b047": "getInitialOwners()", +"9c15b04b": "showDividendsAvailable()", +"9c15be0b": "left65(uint256)", +"9c161d1a": "setNextImagePart(address[16],uint256,uint16,uint16,uint16,uint256[])", +"9c16667c": "getAnswer()", +"9c166d31": "LukaToken()", +"9c172f87": "EthVentures4()", +"9c1747e5": "addRewardPercentage(uint256)", +"9c1817e4": "Saddle_Limit()", +"9c19aa9f": "setOrderSupportCancel(uint256)", +"9c19f170": "TotalRaised(uint256)", +"9c1a056f": "visitLength()", +"9c1a32fe": "setTake(uint256)", +"9c1b9408": "preMultisigEther()", +"9c1b987c": "setComment(uint256,bytes3,string)", +"9c1b9c1b": "assignTokens(address,uint256,uint256,uint256,uint256)", +"9c1cb7cf": "PaymentStatusBlockNum(address)", +"9c1d8fa2": "GPN(uint256,string,string,address)", +"9c1d9790": "sendBatchCS(address[],uint256[])", +"9c1e03a0": "crowdsale()", +"9c1f020a": "sendCrowdsaleTokens(address,uint256)", +"9c1f332f": "returnLastBuyerIndex()", +"9c1f6133": "registerVIP()", +"9c1fcc4c": "logicAddress()", +"9c2062ad": "RISK()", +"9c2108eb": "transferGoldFromHotWallet(address,uint256,string)", +"9c211755": "RequstOwnership()", +"9c225b33": "teamAndAdvisorsAllocations(address)", +"9c2412a2": "monarchyStartReward()", +"9c24654c": "presalestartTime()", +"9c24ea40": "setLinkToken(address)", +"9c24eedb": "upvote(uint256,int256)", +"9c24fc55": "presaleBalances(address)", +"9c250dd8": "etherTransfer(address,uint256)", +"9c253011": "print(int256,address)", +"9c255312": "addressETHDeposit()", +"9c25d975": "packLocation(uint64,uint64,uint64)", +"9c2622e2": "addOne(address)", +"9c2625fd": "TEAM_TOKENS0()", +"9c269c34": "TBL4Token()", +"9c27a6f4": "buyTicket(uint8,uint16[],address)", +"9c27ea08": "setNextLotteryTTMTokenId5(uint64)", +"9c27ff9b": "calculateFEE2Distribute()", +"9c286837": "devCut()", +"9c293792": "release_all(address)", +"9c2a7b89": "setTokenInfoHeritor(address,address,uint256)", +"9c2b1a95": "getManagementFee()", +"9c2c1b2b": "addDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address,uint256)", +"9c2cdd5a": "MULTISIG_TKN()", +"9c2e29c6": "LocalLambosEscrows()", +"9c2ea2ec": "setEthExRate(uint256)", +"9c2f0067": "EPIToken(address,uint256)", +"9c2f4092": "DEVP()", +"9c2f5f8f": "closeCurrentGame(uint256)", +"9c2f7a43": "getCrystal(uint256)", +"9c2f88fa": "CoinBundleToken()", +"9c2fa55d": "buyFirst()", +"9c30936f": "removeCertificationDocumentFromSelf(bytes32)", +"9c30ad7e": "isPending()", +"9c31200b": "oraclize_query(uint256,string,bytes[1],uint256)", +"9c315684": "periodPreICOStage()", +"9c31c5ec": "setItemsContract(address)", +"9c323436": "getFixedEndTime(uint256)", +"9c33b66e": "checkAvailableTokens(address,uint256)", +"9c34a15f": "c(uint256,uint256)", +"9c34ae54": "setICODates(uint256,uint256,uint256,uint256,uint256,uint256)", +"9c351fec": "SNDToken(address,string,string,uint256,uint256)", +"9c36e141": "defaultTimeLock()", +"9c3723df": "windowBonusStep2()", +"9c38019b": "verifyProofOfMembershipInternal(uint256,bytes32[],bytes32,bytes32)", +"9c3807e6": "STARTING_STRIPPERS()", +"9c388d30": "LogAccountAmount(address,uint256)", +"9c392e5c": "VirginMToken()", +"9c39857b": "setTeamAdd(address)", +"9c3a39a2": "getPaymentData(uint256)", +"9c3b936f": "killBalance(uint256)", +"9c3b9aa3": "MundoGamerToken(uint256,string,uint8,string)", +"9c3bcd65": "deliverPresaleFuelBalance(address,uint256)", +"9c3c7b2c": "transferredPresale()", +"9c3c97a1": "prohibitFreeze()", +"9c3db309": "getCurrentMiningDifficulty()", +"9c3e0f3f": "icoStarts()", +"9c3ed1ae": "unitsUserCanBuyLimit()", +"9c3f1e90": "orders(bytes32)", +"9c3f7ca2": "acceptOffer(uint256,uint256,bytes32)", +"9c3fe721": "finishedIssuerMinting()", +"9c402944": "sendAVR(address,uint256)", +"9c40478c": "canClaimAuditReward(address,uint256)", +"9c4063ce": "WALLET_T8EX_TEAM()", +"9c409e4d": "VoteOnTransfer(address)", +"9c40ea5c": "setGRForGas(uint256)", +"9c41adfd": "withdrawDepositById(uint256)", +"9c41e591": "XGoldToken()", +"9c421665": "transferToMe(address,uint256)", +"9c4261b9": "VOLUME_EXTRA_BONUS_CONDITION()", +"9c43d950": "registration(uint256,uint256,uint256)", +"9c43eb54": "snapshotTimestamp()", +"9c44f090": "AlquilarBici()", +"9c45510d": "FootBallCoin()", +"9c472c70": "rateSecondWeek()", +"9c473bb2": "setTokenName(address,bytes32)", +"9c4780d8": "currentRoundNumber()", +"9c481c9e": "crowdsaleContractAddress()", +"9c489edb": "setNewExchangeAddress(address)", +"9c492b9e": "raisedFromFiat()", +"9c499b53": "getFeesAvailableForWithdraw()", +"9c4abe06": "getEthOfferPrice(uint256)", +"9c4ae2d0": "deploy(bytes,uint256)", +"9c4b653d": "sendFundsToMsgSender(uint256)", +"9c4b9c8a": "getFreezeTimestamp(address)", +"9c4baf27": "Skywalker(address,address)", +"9c4bcaa5": "setMinBuyPrivate()", +"9c4c557c": "startSale(bool)", +"9c4ca8cb": "IChain(address,uint256,uint256)", +"9c4de81f": "havven()", +"9c4e0f52": "setMaxTokenSellAmount(uint256)", +"9c4e3788": "earlyInitProjectSupply()", +"9c4eda5c": "balanceA()", +"9c4fc41a": "getWineCount()", +"9c4fc563": "_findParticipant(uint256)", +"9c50450f": "amountToCreate()", +"9c50e7ca": "tgeDateStart()", +"9c513bdd": "BwinCoin()", +"9c526380": "getUserTotalCredit(address,address)", +"9c52a7f1": "deny(address)", +"9c536640": "confSetupMixer(bytes32,uint256,uint256,uint256,uint256)", +"9c544e72": "removePending(address,uint256)", +"9c54b91f": "setApprovalCount(uint256)", +"9c54df64": "addAdmins(address[])", +"9c55519b": "optionsConversionDeadline()", +"9c561a42": "Wallet4()", +"9c566cad": "cards_start(uint256)", +"9c5686db": "isERC821()", +"9c579839": "QUOTE()", +"9c57d584": "verifyFingerprint(uint256,bytes,int256)", +"9c58b753": "getWriterId(bytes32)", +"9c58be11": "claimMyToken()", +"9c58c509": "buyIcoToken2(uint256)", +"9c591412": "lifeReserveWallet()", +"9c5945d9": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16)", +"9c5b33ae": "wb()", +"9c5bbc89": "setApprovedAddress(address)", +"9c5c53b3": "lockBonusTokensClaim(uint256)", +"9c5d5e98": "JACKPOT_WINNER()", +"9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", +"9c5d7291": "PhoneCoin()", +"9c5de58b": "startRC()", +"9c5e078f": "createBBODocument(bytes32)", +"9c5e108c": "_getFreezeTime(uint8)", +"9c5e9023": "confirmBeneficiary()", +"9c5fafa4": "balanceOfComisionHold(address)", +"9c6034a7": "sendIfNotForked()", +"9c60839e": "mintBonusTokensForGames(int256,uint256)", +"9c623683": "setWinner(uint256,address)", +"9c62622d": "IHate0xBTC(string)", +"9c632c77": "getServiceTokenAddress()", +"9c6393f2": "TokensWithdrawn(uint256)", +"9c639db4": "UltiCoin()", +"9c63dae5": "depositorCurrency(address)", +"9c644221": "PRICE_STAGE_ONE_BONUS()", +"9c66452e": "checkTime(bytes32,bytes32,uint256)", +"9c665819": "Talent()", +"9c66fe00": "priceOfLandmark(uint256)", +"9c6735c7": "ProfitRate()", +"9c675eaa": "ownerAddr()", +"9c67f06f": "registryStarted()", +"9c67f2fb": "returnEth4Sender(uint256)", +"9c681f86": "totalTokenTransfers()", +"9c6891c5": "set_bountyPercent(uint256)", +"9c68bd60": "payPledge(uint256)", +"9c695a7b": "_isInStage(uint256)", +"9c69763b": "setICOManager(address)", +"9c697750": "getRemainingLimit(address)", +"9c6a5bca": "RiptideCoin()", +"9c6a97ee": "deleteMyCat()", +"9c6c3439": "burnReputation(uint256)", +"9c6e199a": "sendTokensManually(address,address,uint256)", +"9c6e1d46": "emitJobCanceled(uint256)", +"9c6f87e9": "getPseudoRandomNumber()", +"9c700b70": "withdrawOwnerEth(uint256)", +"9c707dcf": "_mthToVouchers(uint256)", +"9c7081df": "prestige()", +"9c709343": "split(bool,address)", +"9c70b899": "KYC_ETH_LMT()", +"9c715535": "confirmPendingChange(address)", +"9c71d169": "OfferCancel(uint8)", +"9c71efef": "STARTING_CraigGrant()", +"9c71fda4": "WALLET_LB_RESERVED()", +"9c7264d7": "fillOrder(address,uint256)", +"9c73048b": "distributeCastleLoot()", +"9c732203": "DoDev(uint256)", +"9c7336fe": "getValueOfRemainingTokens()", +"9c737e8f": "fundPot()", +"9c7387c7": "finishContribution()", +"9c73ff7d": "DANK()", +"9c7409b0": "_getProtectionParams(uint256,uint256,uint256)", +"9c75089f": "Tresdk()", +"9c755f2f": "stuff()", +"9c756200": "ContractOwnerWithdraw(uint256)", +"9c756ec9": "PREICO_PERIOD()", +"9c76a6ac": "buybackPrice()", +"9c775e1f": "delegateApprove(address,uint256)", +"9c787ab2": "YUNXINToken(uint256,string,uint8,string)", +"9c7912ff": "setXzlkcjqowhoqhwoihsiaoquweizxoiuo(uint256)", +"9c792938": "estimate(uint256)", +"9c79af26": "issueExchangeRate(address,address,address,uint256,uint256,uint256)", +"9c7a39e6": "doCustomAirdrop2(address,address[],uint256[])", +"9c7ab767": "numSubscribers()", +"9c7b3c45": "TextToken()", +"9c7b3d79": "ARTISTCOIN()", +"9c7b7a2d": "SingleSourceIdentity()", +"9c7beb8a": "mintingAgents(address)", +"9c7c2498": "OnChainOrderBookV013b()", +"9c7c722b": "rename(string,string)", +"9c7dcdeb": "hostAccount()", +"9c7e6e6e": "checkRokBalance(address)", +"9c7e8a03": "addParticipant(address,address,uint256)", +"9c7eaac5": "makeTrade(address,address,uint256)", +"9c7ebb30": "SellTokens(uint256)", +"9c7ed6cb": "AgiCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256)", +"9c81806d": "WithdrawSpecialEth(uint256)", +"9c81a5f6": "getVestingsCount(address)", +"9c821ac4": "testFailsIfReturnLessThanMin()", +"9c82f2a4": "setSwapper(address)", +"9c830beb": "setStateHolding()", +"9c839bdd": "nextWithdrawDayCommunity()", +"9c83a1e3": "deleteDeposit(address)", +"9c83b0a1": "ValeoTestToken()", +"9c841c16": "checkCorrectRate(bool,uint8)", +"9c84d1f7": "News()", +"9c84eebe": "ERC20Token(uint256,address)", +"9c851ebc": "new_entry()", +"9c85a28a": "infoMessage()", +"9c8615ac": "is_entity(address)", +"9c865645": "calculateFactorFlushDifficulty(uint256)", +"9c86b241": "createPromoArt()", +"9c88b7bf": "enableNewPurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9c88cbb6": "getCurrentBracket()", +"9c893d73": "LinkCoinToken()", +"9c89a0e2": "getReputation(address)", +"9c89a10a": "presaleOwner()", +"9c89ddb5": "addCourse(string,address)", +"9c89e828": "BidSubmission(address,uint256)", +"9c8a5a56": "bribedCitizen()", +"9c8aeedd": "breakIdMaintenance2(uint256,address)", +"9c8b8585": "txAboveLimits(bytes32)", +"9c8bb5d0": "confirmBoardScore(bytes32,bytes32)", +"9c8bcd6d": "WbtToken()", +"9c8e1d50": "getChipValue()", +"9c8f8569": "Scc()", +"9c8f94bd": "widthrawBondFunds(address)", +"9c8f9f23": "removeLiquidity(uint256)", +"9c90224b": "assertEq1(bytes1,bytes1,bytes32)", +"9c908f61": "acceptTokens(address,uint256,uint256,uint256,uint256)", +"9c91ae20": "getGeneration(uint40)", +"9c91dd56": "paymentContract()", +"9c9205b6": "Token(address,address,uint256)", +"9c926061": "HashProject(address)", +"9c92bfda": "testReceiveSubmittal()", +"9c93a52f": "SALE_TOKENS_SUPPLY()", +"9c9421c3": "Testtoken()", +"9c94e6c6": "notice()", +"9c960cbb": "setAyantDroitEconomique_Compte_6(uint256)", +"9c97114b": "s(bytes)", +"9c977e43": "requestOraclizeBalance()", +"9c978442": "TransferToAllAccounts()", +"9c981fcb": "getString(string)", +"9c9a1061": "buy(bytes32)", +"9c9a2365": "getFungibleTokenAddress()", +"9c9a4b72": "TokenVesting(address,address)", +"9c9b1170": "setoraclelimitgas(uint256)", +"9c9b2e21": "addReward(address)", +"9c9b8fcc": "ALC_FOUNDATION_ADDRESS()", +"9c9c344c": "getTotalUpdates()", +"9c9cc12a": "getCatRelease(uint256)", +"9c9d07c1": "STARTING_DINO()", +"9c9de4dc": "INT(address)", +"9c9e2752": "SBGCrowdsale()", +"9c9ecedb": "InitialArray()", +"9c9ef44a": "setDiscountValueOn()", +"9c9ef978": "addDataToList(bytes32,bytes32,bytes32,bytes32)", +"9c9fb68b": "GetGamblerChoices(address)", +"9c9fe2a4": "FundsClaimed(address,uint256,string)", +"9c9fe83a": "setBA(bytes32,address)", +"9c9ff934": "ETH_HEROCOIN()", +"9ca0e5e1": "setGoldBonus(uint256)", +"9ca0f19d": "GemsPlay()", +"9ca15d59": "oldInviteAddr()", +"9ca2b9e4": "AdvancedDeposit(bytes32,bytes32)", +"9ca3669d": "cancelCommissionerAuction(uint32)", +"9ca3c29c": "getCost(string)", +"9ca423b3": "referrals(address)", +"9ca44515": "ketqua()", +"9ca5454e": "distributes(uint256)", +"9ca5f4a7": "SafeERC20Helper()", +"9ca67a6e": "notapproved()", +"9ca6e670": "apply(uint256,uint256,string)", +"9ca74595": "BobMarleyCoin()", +"9ca75320": "searchNode(address)", +"9ca77f3c": "kingdomsByNumber(uint256)", +"9ca7c912": "ownerTime()", +"9ca9dcab": "getMemeCount()", +"9caaa154": "setLuckPrice(uint256)", +"9caaa7f4": "get_this_balance()", +"9caab55a": "ParticipantAgent()", +"9caabfac": "dateEcoRelease9()", +"9cad74b0": "randomNumber(uint8,uint8)", +"9cadb159": "settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)", +"9cae6100": "addAward(string)", +"9cae9e03": "getPropertyInfo(uint8)", +"9caeab45": "periodICOStage5()", +"9caf34c4": "getBalanceEth()", +"9caf9695": "paleyer2show(uint8,uint8,uint8,uint8,uint8)", +"9cb02e8c": "delayPhaseEndBy(uint256,uint256)", +"9cb04d18": "newPresale()", +"9cb08312": "DMTToken()", +"9cb157d9": "VNT()", +"9cb15a94": "FreeCoin(uint256,string,string)", +"9cb1e9fe": "cubicContract()", +"9cb21f6d": "ImperialCredits()", +"9cb230ec": "Lockup(address)", +"9cb29034": "CCECOIN()", +"9cb2b69b": "getCreated(uint256)", +"9cb31079": "setLowLimit(uint256)", +"9cb33309": "BasicTokenMock(address,uint256)", +"9cb35327": "ceilDiv(uint256,uint256)", +"9cb42db4": "PDS()", +"9cb481ea": "getBountyAmount(uint256)", +"9cb4b31c": "tokenTimelockAddress()", +"9cb61295": "getVoterFromProposal(uint256,uint256)", +"9cb64a2d": "debtor()", +"9cb6a504": "addColor(string,string)", +"9cb6ed7e": "escape(address)", +"9cb6fc77": "confirmUpgrade()", +"9cb74ab6": "mgmtInvestProject(address,uint256)", +"9cb7595a": "getBridgeInterfacesVersion()", +"9cb75b2f": "sendBonusEgg(address,uint256)", +"9cb78df8": "minSuccess()", +"9cb7de4b": "setHandler(address,bool)", +"9cb8a26a": "selfDestruct()", +"9cb931f9": "setReferralPromille(uint8)", +"9cb998dc": "increase(bytes32)", +"9cb9b8f5": "withdrawBomb(uint256)", +"9cb9c14f": "Issuance(address,uint256)", +"9cba3559": "globalAmounts(uint256)", +"9cba60a7": "bitmask_check(address,uint256)", +"9cba713e": "reserveTreasury(uint256)", +"9cbad951": "withdrawAllTokensFromBalance()", +"9cbafcb6": "Pharamore()", +"9cbb165e": "isOnBorrow(uint256)", +"9cbb9460": "fetchOrdersForMerchantByAdmin(address)", +"9cbc2d62": "get_member_info(address)", +"9cbc87a3": "bytes32ArrayToString(bytes32[])", +"9cbcfcc7": "calculateGotTokens(uint256)", +"9cbd695f": "show(uint256,uint256)", +"9cbd7da5": "resumeICO()", +"9cbdffc6": "unblock()", +"9cbe5efd": "currentRoundId()", +"9cbf1b85": "exchangeRateAt()", +"9cbf73a9": "purchaserAddresses(uint256)", +"9cbf9e36": "createToken()", +"9cc04ea0": "newRecord(uint256)", +"9cc0c5e3": "experty_io()", +"9cc1c97b": "test_threeValidEqAddress()", +"9cc24569": "ExKnox(address,address)", +"9cc28aa0": "BdpOwnershipStorage(bytes8)", +"9cc2bcc6": "AhieldCureToken()", +"9cc33024": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", +"9cc3b949": "Bookmark()", +"9cc429dc": "getBattlesCount()", +"9cc477b2": "createFashion(address,uint16[9],uint16)", +"9cc4a319": "CarToken()", +"9cc4d3dd": "convertNumSec(uint256[],uint256[])", +"9cc4da3b": "WHAuthorizeAddress()", +"9cc579af": "MarketJob(address[],uint256[],uint256[],address,address,bytes)", +"9cc5dd95": "_removeOwnersAproves(address)", +"9cc73a6f": "raiseDay3()", +"9cc74299": "withdrawFromManager(uint256,address)", +"9cc7d917": "earlyBirdsAddress()", +"9cc7f708": "balanceOf(uint256)", +"9cc8295a": "EnoughClaims(uint256)", +"9cc84564": "envelopeCounts(address)", +"9cc9299e": "killSwap()", +"9cc946ee": "OlivToken()", +"9cc9b86d": "disableService(address)", +"9cca1c64": "getNonFungibleIndex(uint256)", +"9cca7ac3": "QueueDemandesEnCours()", +"9ccaec98": "getAuctionInfo(uint40)", +"9ccb6e8d": "SentToContractor(uint256,address,uint256)", +"9ccbbc6a": "minimumPowerUpSizeBabz()", +"9cccaea9": "StreamityContract()", +"9cccb272": "BatchPaint(uint8,uint256[],bytes3[],uint256[])", +"9cccd2a4": "getSumAmountOfSuccessfulSteps()", +"9ccd0b51": "getCountCourse()", +"9ccd7d86": "setWinery(address,address,bool)", +"9ccdd994": "Pume(uint256,string,string)", +"9ccf1a68": "prepareURL()", +"9ccfceed": "MANHATTANPROXY10THAMSTAVE()", +"9cd0126a": "gemHpConversion()", +"9cd01605": "exchangeAddress()", +"9cd04996": "DiscountedPreICO(uint256,uint256)", +"9cd08464": "transfer_eth_from_contract(address,uint256)", +"9cd08bae": "CevacToken(uint256,uint256)", +"9cd0c511": "depositMintAndPay(address,uint256,uint256)", +"9cd0f778": "setLuckPool(address)", +"9cd106a8": "cancelRecurringBilling(uint256)", +"9cd19074": "createKey(bytes32)", +"9cd1a121": "delegateTransfer(address,uint256,address)", +"9cd2021c": "mintRefs()", +"9cd22211": "getPlayerGameInfo(uint256,address)", +"9cd23707": "setTransferable(bool)", +"9cd3cb5d": "withdraw_token(address)", +"9cd417d7": "rejectCurrentValidation()", +"9cd43690": "GENTATOKEN()", +"9cd4fb47": "Tier_Classic()", +"9cd5c9a8": "setAssetWallet()", +"9cd70235": "setAmountToClaim(address,uint256)", +"9cd758d0": "setPOOL_edit_2(string)", +"9cd77457": "createInactivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"9cd84ead": "APPToken612()", +"9cd994b4": "updateAuctionTime(uint256,uint256,uint256)", +"9cda1ec5": "setDistributor(address,bool,uint256)", +"9cda5a12": "calcPoseBits(uint256,uint256,uint256)", +"9cdacdb3": "Setup(address)", +"9cdaef4d": "_set4()", +"9cdaf438": "ARCCToken(address,uint256)", +"9cdb4fe8": "addEvidence(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"9cdbaa21": "tokenTransferLocker()", +"9cdbc070": "addVoting(uint256)", +"9cdd2e76": "getHeroLocation(uint256)", +"9cdec2bb": "getCompte_18()", +"9cdee922": "RushCoin()", +"9cdf1872": "getOut()", +"9cdf4dd3": "Token(address,string,string)", +"9cdf8a1f": "WTBNToken()", +"9cdfa3df": "getAddrForPrivilege(address)", +"9ce04e35": "enableInvestorTransfer(address)", +"9ce21f3c": "fundingWalletAddress()", +"9ce2c7f2": "AumentaQuantitaVoti(uint256,address)", +"9ce318f6": "withdraw(uint8[],bytes32[],bytes32[],bytes)", +"9ce31fe1": "StudToken(uint256)", +"9ce3961f": "nextVersionAddress()", +"9ce3f461": "UP_winBets()", +"9ce51c7c": "sendNewTalentsAndPartnerships()", +"9ce682bd": "BetFromTransaction(address,uint256)", +"9ce80efc": "test_twoInvalidAssertFalse()", +"9ce840d4": "withdrawNotATokens(address)", +"9ce8fc4e": "LogForkSigned(uint256,bytes32)", +"9ce962ca": "payWallet()", +"9ce9e380": "_burnAllArgs(address,uint256)", +"9cea127f": "CMTTT()", +"9ceb5c6d": "icoBonus1EndDate()", +"9ceba90b": "startWeekFive()", +"9cec2789": "gettags(address)", +"9cecba34": "addPoliceNode(address)", +"9cecc80a": "setReserve(address)", +"9ced0e9b": "initialTime()", +"9ced5c29": "enableNode()", +"9cede14c": "checkAndGetSendersID()", +"9cee1773": "Mednus()", +"9cee9492": "setMaxRewardPercent(uint256)", +"9cef2a6a": "addLand(address,uint256)", +"9cef8873": "reclaimLand(int256,int256)", +"9cef9cfe": "isNumBlack(uint8)", +"9cefa50b": "winner(uint256,bytes32)", +"9cf17d5f": "ScamCoin()", +"9cf21342": "AnimeCoin()", +"9cf21d90": "ETCH3dV()", +"9cf2c727": "sumHardCapICOStage7()", +"9cf3123b": "sellWolkEstimate(uint256,address)", +"9cf3566d": "promotionAllocate(address,uint256)", +"9cf4124f": "enableContinuousDelivery()", +"9cf48365": "getInvestedToken(address)", +"9cf488ad": "sendPlayerBack(uint256[])", +"9cf4910c": "preDistriToAcquiantancesEndTime()", +"9cf4cb1e": "_getVotes(uint256,uint256,uint256,address)", +"9cf5453d": "bid(address)", +"9cf55cfb": "sampleBoolRetTrue()", +"9cf5c613": "setVerified(address,bool)", +"9cf60b86": "addRefBalance(address,uint256)", +"9cf66013": "whitelistRegistrantsFlag(address)", +"9cf66997": "clearLand(int256[],int256[])", +"9cf6f1eb": "CBVO()", +"9cf78527": "UAPToken(address)", +"9cf8ccfd": "currentPlayers()", +"9cf9342e": "createContract(bool,string,bool)", +"9cf94943": "whitelistAdd(address[])", +"9cf9d4c0": "setPOOL_edit_9(string)", +"9cf9e3ab": "TokenReleased(address,uint256)", +"9cfa0f7c": "maxTokensToBuy()", +"9cfa750f": "isParticipant(uint64,address)", +"9cfad128": "calculateFee(address,bool,bool,uint256,uint256)", +"9cfcab47": "NovoToken()", +"9cfd5dc4": "validPurchase(uint256,address)", +"9cfda697": "setColorsX4(uint16[4],uint256[20],uint256)", +"9cfdd04d": "BCN()", +"9cfdfe42": "AXIS()", +"9cfe42da": "addBlacklist(address)", +"9cfe6c86": "count_tokens()", +"9cff53e0": "nDeposits()", +"9cff621a": "withdrawDispersal()", +"9cff799c": "GetCuentaSocio(uint16)", +"9d000e78": "VUP_PER_ETH_PRE_SALE_RATE()", +"9d00ffa5": "isMessageValid(bytes)", +"9d01e730": "EarlyEndTimeChanged(uint256)", +"9d038cd3": "TEST1()", +"9d042f87": "dTimeoutCurrentStage()", +"9d0506ae": "checkData(bytes)", +"9d05414f": "Referral(address,address)", +"9d0617f9": "_send(address,uint256)", +"9d063ed8": "FIFSRegistrar(address,bytes32)", +"9d069353": "getAngel(uint64)", +"9d06a1d5": "removeFromWhiteList(string,address)", +"9d0714b2": "tgeSetLive()", +"9d079b18": "acceptProposal(bytes32)", +"9d07b653": "_createUnit(uint256,uint256,uint256,uint256,address)", +"9d07ff80": "ln_fixed3_lnr_18(uint256,uint256)", +"9d083222": "becomeMember()", +"9d0880a3": "transferUnsoldTokens(address)", +"9d09390b": "isValidAuthority(address,uint256)", +"9d097471": "getUserBounty(address)", +"9d09798f": "DemurringFee(address,uint256)", +"9d09f8e5": "changeRebackRate(uint256)", +"9d0b2c7a": "pendingStake(address,uint256)", +"9d0c0c35": "generateCrabGene(bool,bool)", +"9d0c1e6f": "walletETH()", +"9d0cfc2c": "closeDepositSubRound()", +"9d0d0a5a": "getTotalToggleGameDivsProduced()", +"9d0d9f1c": "azatipsToken()", +"9d0df9b5": "getPOOL_edit_11()", +"9d0e0cd3": "getTotalTAOsCount()", +"9d0e5871": "shipping(address)", +"9d0effdb": "revokePermission(address,address,bytes32)", +"9d0f17c8": "unsoldTokenIssued()", +"9d0f8763": "cancelOrderByAdmin(uint80,bool)", +"9d0fb699": "tokensToBeClaimed()", +"9d106954": "_getUserMinersAt(address,uint32,uint32)", +"9d1080c5": "UnilotToken()", +"9d10fda8": "escrow_fee_denominator()", +"9d118770": "destroy(uint256)", +"9d119a4e": "EmergencyUnPause()", +"9d119a7b": "getDepositTxMap(string)", +"9d11aaaa": "transferFeePercentage()", +"9d11f09f": "getTxAmountKWh(bytes32)", +"9d129afd": "prevBlock()", +"9d12e775": "zec()", +"9d13156c": "claimRefundOwed(uint256)", +"9d134185": "setauctionsystem(uint256,uint256)", +"9d1362a9": "getAllInvestmentsWithdrawnByBeneficiary()", +"9d139ff2": "LajokiCoin()", +"9d140fa2": "inPreSale2Period()", +"9d144f8a": "_preventedByNationalityBlacklist(address,uint256)", +"9d145866": "loadRate(uint256)", +"9d14f134": "getRepo(bytes32,string)", +"9d153495": "withdrawRefund(uint256)", +"9d1672c4": "getAffiliateRate()", +"9d16aca6": "changeExchangeContract(address)", +"9d170c5d": "getRef(string)", +"9d176556": "setDistConfig(address[],uint256[])", +"9d189473": "calculateAndMintTokens(address,uint256)", +"9d18e405": "approveAndBuyAffiliated(uint256,address,uint256,bool,address)", +"9d1a9ff9": "rebatePeriod_()", +"9d1acead": "periodPresale()", +"9d1b0fd1": "createProduct(bytes32,string,bytes32,bytes32)", +"9d1b464a": "currentPrice()", +"9d1b8945": "requestedRedeem(address,uint256)", +"9d1bbd7e": "CancelRoundAndRefundAll(uint256)", +"9d1be930": "autopayfee()", +"9d1c3f03": "isMaximumPreFundingGoalReached()", +"9d1c4d42": "buyAnalysis(uint256,uint256,address)", +"9d1d14e0": "setEtherExchangeLikeCoin(uint32)", +"9d1ddca5": "fiveYearGrace()", +"9d1e0d48": "buy(address,string,uint256,uint256,uint256,uint256)", +"9d1e351c": "totalBonusToken()", +"9d1e641b": "CROWD_WEEK3_BONUS()", +"9d1eb451": "MAT_CROWDSALE_SUPPLY_LIMIT()", +"9d1ebfd6": "nextReleaseAmount()", +"9d1eeb97": "redemptionBurn(address,uint256)", +"9d1f2800": "doPush(address,uint256)", +"9d1fd89c": "getFirstBorrowAgreementTool(address,address)", +"9d1ffed9": "_certify(bytes32)", +"9d2044e1": "setContrAddrAndCrwSale(bool,address,address,address,bool,bool)", +"9d20467a": "changeTiming(uint256,uint256)", +"9d209048": "getNode(address)", +"9d20b314": "TotalpresaleSupply()", +"9d210369": "resetMaxBonusThreshold()", +"9d210bdd": "getStoriesLength()", +"9d21328f": "sharedExpense()", +"9d21dd78": "getGameTime()", +"9d2235e7": "_leapYearsBefore(uint256)", +"9d22c693": "before_test_method_increaseTimeBy30000()", +"9d23c4c7": "tokenRegistry()", +"9d240cf2": "Workshop()", +"9d245238": "getWinNumbers(string)", +"9d248477": "BeaverCoin()", +"9d248e08": "burn3(uint256,uint256,uint256)", +"9d24c49f": "_payloadOffset(uint256)", +"9d24e482": "theWinner()", +"9d255663": "EthMonoPoly(address)", +"9d2620bf": "RealEstateCouponToken()", +"9d2668d4": "setPurchased(address,address,uint256)", +"9d273b20": "refundStatus()", +"9d2754a9": "createTokenToTax()", +"9d2777f4": "IntermediateWallet()", +"9d277a49": "unregisterPublisher(address)", +"9d2870c3": "LPAIToken()", +"9d29255b": "setCSCERC721(address)", +"9d29cac4": "getMonsterClass(uint32)", +"9d2a1eab": "GrantAdded(address,uint256)", +"9d2a8cf0": "unwhitelistAddress(address)", +"9d2ab46d": "BUZZToken()", +"9d2ae623": "depositJackPot()", +"9d2affd5": "transferFrom(address,address,address,address[],uint256)", +"9d2be721": "insertTopic(bytes15,address,bytes32,bytes15)", +"9d2cc436": "RESERVE()", +"9d2cd67c": "collect_main_fee()", +"9d2d912e": "futureDevLock()", +"9d2e4777": "vestingTransfer(address,uint256,uint32)", +"9d2ec188": "setFeeParams(uint256,uint256)", +"9d2f1cbb": "changeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", +"9d2fc3c8": "adjudicate(uint256,uint256)", +"9d2fcb8c": "setInvestmentAddress(address)", +"9d2ff29c": "ICDSupply()", +"9d30584c": "setHard_Cap(uint256)", +"9d323193": "RTCToken()", +"9d327229": "fechVoteResultForCandidateByStage(address,uint256)", +"9d340b71": "buyTokensfor82()", +"9d3565ce": "transferOr(address)", +"9d35dcac": "NewUser(uint256,address,address,uint32)", +"9d36c500": "freeAnimalsLimit()", +"9d38cdbf": "OwnedUpgradeabilityProxy(address)", +"9d38cea3": "stopPreIco()", +"9d390d83": "setIsWeiAccepted(bool)", +"9d3995c2": "setHeroPost(address,uint256)", +"9d3ac6d5": "getBuyerContribution(address)", +"9d3acf23": "isResolvedForDefendant(uint256)", +"9d3aee8d": "st4ckHeight(uint256)", +"9d3c015e": "PChannel(address)", +"9d3c3b5d": "getArrayHashMarketItem(bytes16)", +"9d3c663f": "isBreakingCap(uint256,uint256,uint256,uint256)", +"9d3cc187": "changeSetRateAddress(address)", +"9d3d1d82": "userSponsorshipsPred(address,uint256[],uint256)", +"9d3d741c": "testAboveLength()", +"9d3d9b4d": "FETCOIN()", +"9d3de343": "addVictim(string,string)", +"9d3de95a": "getPortfolioInfo(address,uint256)", +"9d3e069c": "StartDraw()", +"9d3e1ab8": "walletRemaining()", +"9d3ec1a7": "getMarriageDetails()", +"9d3f2e5f": "stakeEthForGas(uint256,address)", +"9d3fae04": "applyAuditorsCheckUpdate(address,address,uint256)", +"9d3fe4c2": "AGAVETHER(string,string)", +"9d4022c8": "OrderStatisticTree()", +"9d406a13": "getLocksLockedFor(address,uint256)", +"9d408b93": "gasBefore_()", +"9d4095cc": "getAmbientTempException(bytes32)", +"9d41198e": "startnewround()", +"9d41a9af": "getOccupation(address)", +"9d41d6fc": "testInitialBalanceWithNewRGXToken()", +"9d421ea7": "claimTeamToken()", +"9d42829a": "getGoldInfoDocumentation(address)", +"9d42d1a9": "sendEvent(uint256,bytes32)", +"9d4323be": "drainToken(address,uint256)", +"9d4327a0": "stockBuyCertainOrder(uint256,uint256,uint256,uint256)", +"9d433c71": "sharesOfSPS()", +"9d442102": "BuyRocketForSale(uint32)", +"9d44ac4f": "permissionExists(uint8,address)", +"9d44d93b": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,address,uint8,bytes32,bytes32)", +"9d44fca2": "computeEthConstant(uint256)", +"9d451c4d": "right77(uint256)", +"9d45b9d2": "soldTokensPreIco()", +"9d45d077": "raiseSellOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", +"9d463520": "lastMintTime()", +"9d463b99": "addPool(uint256,uint256,uint256)", +"9d471837": "updateTextForHolder(bytes32,bytes)", +"9d478656": "sendp(address,uint256)", +"9d481848": "propose(address,bytes)", +"9d484693": "payouts(address,uint256)", +"9d4936f9": "MINING_OUTPUT()", +"9d4971b7": "getOrderLength()", +"9d499363": "faucetTokenAddress()", +"9d4ab2a3": "setInvestAgent(address)", +"9d4aba7c": "getTimestamp_()", +"9d4ace0b": "reg_bountyHunter(address,address)", +"9d4b1239": "tokensDistributedCrowdsale()", +"9d4c162d": "executeProposal(bytes32,int256)", +"9d4c5451": "minTokens()", +"9d4c662c": "sell_id()", +"9d4c7737": "creditStatus()", +"9d4c8eed": "getChildCount(address)", +"9d4cc8ad": "Poppins()", +"9d4cf268": "isERC165Interface(bytes32)", +"9d4d8db3": "Happy()", +"9d4e85ce": "getUserDeposits(address,address)", +"9d4e9a60": "addContractERC20(address)", +"9d4ea0f3": "canMove(uint16,uint8,uint8)", +"9d4ff8ad": "enter(string)", +"9d5176fd": "getPremiumFactors(bytes32)", +"9d51d9b7": "setMaxBalance(uint256)", +"9d523f4c": "_getNextOwed()", +"9d52f74b": "getFreezeGap(bytes32)", +"9d532041": "createCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,bool,uint8)", +"9d535056": "punterWaiting()", +"9d5367c5": "KIDToken()", +"9d53827f": "MAX_TRANSFER()", +"9d53f19e": "getInvestorInforMin(uint16)", +"9d54c79d": "notary()", +"9d54f419": "setUpdater(address)", +"9d55fba7": "updateCommission(uint256)", +"9d564d9a": "unlockTokens(address,uint256)", +"9d56998d": "my_message()", +"9d5708ff": "myTulipsBatched(uint256,uint16)", +"9d575582": "depositToken(address,uint256,address)", +"9d5779ce": "Site(string)", +"9d5839e3": "getFirstMilestone()", +"9d585f7f": "loanAmount()", +"9d58a5b6": "unitExists(uint256,uint256)", +"9d58aa41": "changeRestrictedtStatus(address,address,bool)", +"9d58b15d": "addMember(address,address)", +"9d59011e": "setAmount(uint128)", +"9d599cbf": "hashClaimable(bytes32)", +"9d59beb1": "listTokenFee()", +"9d5c6061": "getMsgGas()", +"9d5c6e20": "setPrivateSaleEndDate(uint256)", +"9d5c7be8": "collectionCountsOf(address)", +"9d5de12e": "STQPreSale(address,address)", +"9d5eab46": "setItemOption(address,uint256,uint256)", +"9d5eb078": "buyTemplate(uint256)", +"9d5efb6b": "tokenContractSupply()", +"9d5f2422": "createDifficultyOracle(uint256)", +"9d5f5cd3": "mktValue()", +"9d5f658e": "viewFirstBatchOfContractState()", +"9d61193a": "passoverStartTime()", +"9d617fae": "pendingFills(address)", +"9d619dad": "currentTournamentBank()", +"9d61e624": "hardcapInEth()", +"9d625241": "powermayorCutPercentage()", +"9d62f07b": "BlockGrainCoin()", +"9d636359": "initialMarketSales()", +"9d63848a": "tokens()", +"9d64a5e5": "newFoundationCandidate()", +"9d64d474": "cancelExplorationByIndex(uint256)", +"9d652118": "presaleclosingTime()", +"9d66a9cd": "getDetail(uint256)", +"9d66e913": "callStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"9d67b404": "addChunk6ToWhiteList()", +"9d68521a": "revokeOperatorTranche(bytes32,address)", +"9d69d5c6": "CERTIToken()", +"9d69fdff": "Ecometh()", +"9d6a4d77": "allotToken(uint256)", +"9d6abbcd": "unlockedEscrow(bytes32)", +"9d6abe4f": "getLink(address)", +"9d6ad799": "computeTokenWithBonus(uint256,address)", +"9d6adeaf": "HitToken(string,string,uint8,uint256)", +"9d6b74f8": "DISPLAY_CLASSIQUE_ET_VIDEO()", +"9d6bf036": "setIsLimited(bool,string)", +"9d6d22b5": "ProgrammerdaddysToken()", +"9d6d2321": "dividendsFull(address)", +"9d6d78e4": "chunk3IsAdded()", +"9d6d8598": "depositTokens(bool,uint256,address)", +"9d6dcf53": "Smilebitbuy(uint256,string,uint8,string)", +"9d6e0c22": "setBroker(address,address,uint256)", +"9d6e4eaa": "ReleasableToken(string,uint256,string,uint256)", +"9d6eaad5": "returnTokensToOwner(string)", +"9d6f78c1": "LineToken2()", +"9d6fa618": "requestTransferOwnership(address)", +"9d6fac6f": "cooldowns(uint256)", +"9d6fb020": "isRefunding()", +"9d70085e": "cap3(address)", +"9d707d03": "resetAuctionStart(address,address)", +"9d7150fe": "isAffiliateValid(address)", +"9d7233d4": "MIN_CONTRIBUTION_WEIS()", +"9d72d8d3": "luckyBuy(uint8)", +"9d733f0c": "submissionPrice()", +"9d735286": "forwardFunds()", +"9d7354c0": "BuyHandler(uint256)", +"9d735fc5": "RewardPoint()", +"9d73cecc": "validatePeer(address)", +"9d7437b8": "WALLET_ADVISOR()", +"9d74b37d": "getBool(address,bytes32)", +"9d74b959": "test_basicWithAssertBeforeThrow()", +"9d74fb7c": "ContributionMock()", +"9d755367": "getOwnerOfTicket(uint256)", +"9d75c113": "_joinCDP(bytes32,uint256)", +"9d7616a5": "preEtherCap()", +"9d76ea58": "tokenAddress()", +"9d770e49": "abstractResolver()", +"9d773a1b": "catsForSale(uint256)", +"9d77bd68": "luCat()", +"9d77e4f8": "getChainFees(uint256)", +"9d77f85a": "buyCollectible(uint256,uint256,int256)", +"9d79468a": "claimRewardTo(address,uint256,string)", +"9d7a63e9": "changeDripAmounts(uint256,uint256)", +"9d7acf74": "BluechipToken()", +"9d7b5621": "numberOfTokenId()", +"9d7b7636": "Neymar()", +"9d7b8887": "addAddressMappingProposal(address)", +"9d7bf73c": "PLUS()", +"9d7d6667": "multipliers()", +"9d7da479": "mintTokens1(int256,address,uint256,uint256,bytes32)", +"9d7e2730": "issueCoins(uint256,address)", +"9d7e6ca8": "setResponseAddress(address)", +"9d7eb375": "updateUserDetails(string)", +"9d80ac4d": "WithdrawedEthToWallet(uint256)", +"9d80c818": "addressCount()", +"9d815818": "validReleasedToken(uint256)", +"9d8168f0": "removeManyWhitelist(address[])", +"9d821c1a": "setManualSaleFlag(bool)", +"9d827eb9": "CreationFeeChangedEvent(uint256)", +"9d8374b4": "removeFromBlacklist(address,address)", +"9d837ccd": "ETH_CAP()", +"9d83ee1b": "getAllCardDatas()", +"9d84934d": "mintStartYear()", +"9d84ae69": "readAddress(bytes32)", +"9d856bdc": "queen()", +"9d858a80": "Pheonix(uint256,uint256)", +"9d85fca3": "findIndexFromRandomNumber(uint32)", +"9d866527": "Strange()", +"9d86ad52": "CloseIfBug()", +"9d86fd0c": "test_threeTrueAssert()", +"9d87a373": "transferFromMany(address[],address,uint256[],address)", +"9d87e7f0": "getWeiAvailableToReturn(address)", +"9d882b5d": "Sotoin()", +"9d88584e": "removeFamily(address)", +"9d888e86": "currentVersion()", +"9d88f3a1": "setLotteryAddress(address,address)", +"9d89add1": "createMechETH(uint256,address)", +"9d89e7d4": "challengeAmount()", +"9d8a0212": "costOfOneToken()", +"9d8a18ea": "VT(uint256,string,string)", +"9d8a8c43": "totalTokenMintedPreSale()", +"9d8abff3": "miningAttempts(uint256,address)", +"9d8b0834": "verifyLoanOfferingRecurse(address,address[9],uint256[7],uint32[4],bytes32,bytes)", +"9d8b157b": "teamCup()", +"9d8c3994": "giveAllToCharity()", +"9d8c428e": "addRoundMode(uint256,uint256,uint256)", +"9d8c7243": "CreateKRM(address,uint256)", +"9d8c997b": "getInfoByUnionId(bytes32)", +"9d8ca531": "closeLottery(uint256)", +"9d8cb45c": "foundationSupplyRemaining()", +"9d8d22f4": "grantReserveTokens(address)", +"9d8d911e": "_createCryptsy(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,address)", +"9d8dbd20": "remove_kycer(address)", +"9d8df6dd": "cancelAdoptionRequest(bytes5)", +"9d8e2177": "UNIT()", +"9d8ee943": "right71(uint256)", +"9d8f2b17": "LCAP()", +"9d8f4c27": "priceUpdateAddress()", +"9d902fc0": "precisionFactor()", +"9d913c64": "addTokenLock(uint256,uint256)", +"9d9231b1": "_unpackLevelValue(uint256)", +"9d925fc8": "REFUND_RATE()", +"9d930f02": "newTeamOnEnd(uint64,uint64,uint64)", +"9d932a93": "validateSignature(bytes,bytes32)", +"9d94743a": "CND(address)", +"9d94a8fa": "_thresholdTwo()", +"9d94c343": "POSV()", +"9d94dac8": "fightEtherMonster()", +"9d95f1cc": "addNode(address)", +"9d963289": "NewLeader(address,uint8[])", +"9d96be58": "maxMintBlock()", +"9d96f200": "Factory(string)", +"9d97bcd7": "allocatePreICOTokens()", +"9d988d03": "X(address)", +"9d989b20": "chargeDailyRate(bytes32,address)", +"9d98cd78": "drawETH(uint256)", +"9d9a5e1c": "startPrivateICO()", +"9d9a7fe9": "completed()", +"9d9ab2d8": "setEtherUsdRate(uint16)", +"9d9ae444": "StatsReserved()", +"9d9aeb7f": "setInterestAllocationPercentage(uint256,uint256)", +"9d9afce9": "claimTokenReserve()", +"9d9b2e82": "RevenueSharingContract()", +"9d9b4d20": "DST_R_N_B_PROGRAM()", +"9d9b5342": "editInfo(string)", +"9d9bfb02": "throwsWhenNonMultisigDeploysANT()", +"9d9c9439": "tokenInitialised()", +"9d9c9a0d": "testControlCreateWithParentParentSameItemId()", +"9d9ca28d": "isWinner(address)", +"9d9cc8e9": "TestCrowdsale_Noname()", +"9d9d432f": "updateGenVault(address,uint256)", +"9d9db392": "makePayment(address,uint256,string)", +"9d9dcf81": "getXPL()", +"9d9fcc72": "checkWithdrawals(address)", +"9da065cb": "ReddyToken()", +"9da0c7b1": "nowCanProvideHash()", +"9da0d7d4": "dutchAuction()", +"9da0dc0a": "preICOWeiRaised()", +"9da1814c": "FremenTradeToken()", +"9da19acc": "isRedemptionReady()", +"9da1b02a": "createSale(uint256)", +"9da1bc7b": "updateBearCount(address)", +"9da26320": "registrations_confirmed()", +"9da2b791": "assignDNI(uint256)", +"9da30467": "payForOrderInTokens(uint256,address,uint256,address,uint256)", +"9da32c14": "Defapacoin()", +"9da43ef4": "getExtraPoints(uint32)", +"9da46ee3": "getPool(uint32)", +"9da59934": "getInbox(address,uint256)", +"9da5e0eb": "initDaylimit(uint256)", +"9da67e71": "OpenMoneyPresale()", +"9da680f3": "adjustRegistrationFee(uint256)", +"9da69180": "commitVote(uint256,bytes32)", +"9da78649": "getNewRecordInHistoryRecord(uint256)", +"9da8be21": "initWallet(address)", +"9da8e7e2": "createProxy(string)", +"9da9650e": "Cothereum(uint256,string,string)", +"9da9df3e": "withdrawContract()", +"9daa7b46": "STTCToken()", +"9daa9ecd": "percentAllocationFeeDenominator()", +"9daaae94": "setClient(bytes32,address)", +"9dab2054": "priceAt(uint256)", +"9dab3cd4": "userRight(address,bytes1,uint256)", +"9dab4607": "ACCEPT_DICE()", +"9dabff25": "sendReward(address)", +"9dac83e4": "allowWorker(address)", +"9dace789": "EOSGold(uint256,uint256)", +"9dad9382": "closeStream()", +"9dae2e80": "payoutDonations()", +"9dae6081": "createTournament()", +"9daf57cf": "getBdpDataStorage(address[16])", +"9daf77a5": "GetContractStateTerminatedMisrep()", +"9daf9b6b": "insertNodeAfter(uint256,uint256,address)", +"9daf9ce3": "computeTotalEthAmount()", +"9dafb4df": "prizeOwner()", +"9dafbc13": "initBlock(uint256)", +"9db02721": "refuseWork()", +"9db028ab": "getMetadataHistoryLength(string)", +"9db069d8": "bountyOwner()", +"9db09a08": "createContractMovie(string)", +"9db11039": "existenceTransferFromTest(address)", +"9db1b8af": "msc()", +"9db1cafa": "SuccessLife()", +"9db28672": "isOfferingStarted()", +"9db340de": "eraseNodeHierarchy(uint256,bytes32[],bytes32)", +"9db3956e": "setDatabase(string,uint256)", +"9db40718": "SearchIPR(string,string)", +"9db4372c": "num_tickets_current_round()", +"9db4577f": "addListToWhiteList(address[])", +"9db5d993": "putString(bytes32,string)", +"9db5dbe4": "transferERC20(address,address,uint256)", +"9db67cd0": "funcFromC3()", +"9db70e19": "tokenIdToRank(uint256)", +"9db7ff9e": "changeGameRuningblock(uint256)", +"9db834fe": "setColorPink()", +"9db8d393": "setCostToCancel(uint256)", +"9db91e78": "insecureMode()", +"9dbbcca3": "ChangePreICOStart(uint256)", +"9dbc041c": "requiredBid(uint256)", +"9dbc4f9b": "participantDetails(uint256)", +"9dbd1b96": "getRecipient(bytes)", +"9dbda902": "getHighestMortgageRate()", +"9dbdfe0d": "LocusOne()", +"9dbe3501": "LongPlace(address[2],uint256[8],uint256)", +"9dbf0087": "TokenERC20(uint256,string,string)", +"9dbf0543": "price_constant()", +"9dbf5eca": "updateRelayer(address,bool)", +"9dbf7014": "depositMineral()", +"9dbfe1b8": "setSaleRate(uint256,uint256)", +"9dc04184": "allowDraw()", +"9dc080d3": "angelToken()", +"9dc10d15": "preAllocatedTokensVestingTime()", +"9dc11280": "numDataOf(uint256)", +"9dc1d961": "message(bytes32,bytes32,string,string)", +"9dc27fe3": "setICOStatus(bool)", +"9dc29fac": "burn(address,uint256)", +"9dc2c8f5": "fireEventLog4Anonym()", +"9dc35799": "updateReading(uint256)", +"9dc371bd": "ULTRIXCOIN()", +"9dc42f16": "_removeOwner(address)", +"9dc43f2d": "newEmployeePoolPromille()", +"9dc4b9c9": "currentLevel()", +"9dc4ca42": "getWalletDigest(bytes32,address)", +"9dc4ef99": "_registerArtist(address)", +"9dc5b35e": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address)", +"9dc64f8e": "getWidthrawPercFor(string)", +"9dc6c12b": "TaiwanRepublic(uint256,string,string)", +"9dc6f173": "LogBidAccepted(address,uint256,uint256)", +"9dc7a49a": "RegisterUsername(string)", +"9dc7f01c": "pay_dividended()", +"9dc8832c": "JiucaiToken(uint256,uint8,string,string)", +"9dc905bb": "insertMilestone(uint8,uint256,uint256)", +"9dc90bd8": "GreeningDesertChainToken()", +"9dc9281b": "LjwToken3()", +"9dca362f": "createAccount()", +"9dca4e0a": "matchWinnerOk(uint8,uint8,uint8,uint8)", +"9dcb0f55": "fundingStartAt()", +"9dcb5c65": "resultsWeightedByEther()", +"9dcbed8b": "totalUnrestrictedTokens()", +"9dcbf7ea": "Rename(string,string)", +"9dccc5bf": "getRegistration(bytes32)", +"9dcd4beb": "optionExerciseSpan()", +"9dcee160": "voteC()", +"9dcf56b4": "proofType_TLSNotary()", +"9dd05af9": "setEarlyExchangeRate(uint256)", +"9dd0a30f": "iwithdrawal(uint256,uint256)", +"9dd0ff01": "max_bet_this_spin()", +"9dd1687e": "withdrawBasicTokens(address)", +"9dd21928": "whiteListAddress(address,bool)", +"9dd28e34": "registerVendor(uint256,bool,bytes,bytes)", +"9dd3045b": "TransferToken(address,uint256)", +"9dd373b9": "setStakingContract(address)", +"9dd409d3": "setPlayPrice(uint256,string)", +"9dd4fdd3": "MarketPrice()", +"9dd52927": "AuthorityController(address,address[],uint256,uint256,address)", +"9dd5b9a3": "_lockAllAmount()", +"9dd63c3a": "setOwnerPrice(uint256)", +"9dd74964": "dividendsSum()", +"9dd7b3c3": "getSellBallers()", +"9dd7e749": "getOffsaleCount()", +"9dd819cc": "test_fourValidEqInt()", +"9dd9c24b": "canPerform(address,bytes4)", +"9dda456a": "_firstLevelEth()", +"9ddae7f5": "determineOutcome(uint256,uint8[],uint8)", +"9ddaf5aa": "proofs(uint256)", +"9ddc4a47": "setTransformTarget_default(uint256)", +"9ddccc99": "TelonToken()", +"9ddd503e": "PlayChainToken()", +"9dde6eb6": "placeBidFromEtherScrolls(uint256)", +"9ddee5f9": "SlopeIncreased(uint256)", +"9ddf65e1": "AUTSCoin()", +"9ddf840d": "withdrawDivs()", +"9de0111f": "tokenWithdraw(uint256,address,uint256)", +"9de0eb04": "dappId()", +"9de12300": "updateICOmask(uint256,uint256)", +"9de18f9c": "controla(address,bytes32,bytes32)", +"9de2bd2f": "RYZToken()", +"9de2f796": "getMintAmount(uint256)", +"9de315f1": "getTargetContactPubKey(address)", +"9de39cb3": "testStartsWith()", +"9de4f41c": "seMurio()", +"9de518ba": "divertDividendsToBankroll()", +"9de66604": "erc20old()", +"9de6ba52": "ArtCore()", +"9de6c162": "acquireGauntlet(uint256,uint8,uint256)", +"9de6c45b": "addBox(uint256,string,string,string,uint256,uint8)", +"9de6d9aa": "changeGasLimitAndPrice(uint256,uint256)", +"9de7d032": "createPerson(uint32,string,uint256)", +"9de8302f": "createGen0Auction(uint256,uint128,uint128,uint40)", +"9de8535e": "readiscolorregistered(uint256)", +"9de91ccd": "getCCH_edit_12()", +"9de9205a": "getNujaNumber()", +"9de92f7e": "submitInput()", +"9de9d57e": "multiDistributeAdviserBounty(uint256[],bool)", +"9de9f1b8": "payJackpot3()", +"9dea34ad": "currBetID()", +"9deab49e": "_processERC20TokenPackPurchase(uint8,address,address)", +"9deb0b41": "createConsentFile(address)", +"9dec2189": "metaApproveHash(address,uint256,uint256,uint256)", +"9dec365e": "setCrowdsaleTotal(uint256)", +"9deca9ee": "disputeRounds(uint256,uint256)", +"9decaecc": "addEntryInMonths(address,uint256,uint256)", +"9decde19": "repriceAuctions(uint256[],uint256[],uint256[],uint256,address)", +"9ded1817": "sendCryptoVersusReward()", +"9ded35c8": "unpauseChannels()", +"9df06411": "addDepotEth(address,uint256)", +"9df08a9f": "getStatusEventCloseSuccess(bytes16)", +"9df0a5df": "ADDR_MAYA_TEAM()", +"9df0c176": "createCategoricalEvent(address,address,uint8)", +"9df184ae": "stageTwoEnd()", +"9df196ec": "getWhitelistDetailsFor(address)", +"9df1e2b0": "transferOtherToken(address,address,uint256)", +"9df1f9a1": "getYesCount(uint256)", +"9df21154": "AddToDB(address)", +"9df21bfd": "updateShareAddress(address,address)", +"9df39b4a": "removeCitation(address)", +"9df4867c": "transferSectors(uint16[],address)", +"9df4d0fe": "isChallenged()", +"9df51b89": "claimProfits()", +"9df537c6": "increaseBeneficiaryBalance(address,uint256)", +"9df5a643": "setAllowClaimUser(address,address)", +"9df5cbda": "isSucceed(uint8)", +"9df806d6": "setBurnerAddress(address)", +"9df8f631": "Ur()", +"9df93754": "Log2(bool,string)", +"9df94560": "leekStealTracker_()", +"9df971c1": "subFees(uint256)", +"9df9a1db": "disableKYC()", +"9dfaa207": "OWNERS_AND_PARTNERS_ADDRESS()", +"9dfad52d": "Expand()", +"9dfb071c": "WHITELISTING_MAX_CONTRIBUTION()", +"9dfb64fd": "toggleRefunds()", +"9dfb9de8": "getPawnLoanId(uint256)", +"9dfbb584": "refundNonWhitelistedPerson(address)", +"9dfcc05c": "isExpiredDeadline()", +"9dfcf372": "Lescovex_CYC(uint256,string,string,address)", +"9dfd1de3": "Token20(uint256,string,string)", +"9dfd4e2f": "MAX_ETH()", +"9dfd8b02": "getBuilding(uint256)", +"9dfde201": "Price()", +"9dfe29b5": "nextTokenType()", +"9dfecdcc": "openLottery()", +"9dff78de": "buyAnts()", +"9dfffa36": "countUp(address)", +"9e0112b8": "RESERVED_RESERVE_GROUP()", +"9e014cf1": "PrepareRollEvent(address,uint256,uint256)", +"9e01f9b9": "getUser2()", +"9e0234a1": "PHILCOIN()", +"9e036add": "NBCL(uint256,string,uint8,string)", +"9e03a5d0": "AndxorLogger()", +"9e03c589": "Delinetod()", +"9e03c971": "BuyKeys(uint256)", +"9e05c118": "availableCount()", +"9e05de62": "setFeeSharingValue(uint256)", +"9e060fb6": "updAcceptAdminWithdraw(bool)", +"9e07d205": "attorneySign()", +"9e098d9f": "LjwToken5(address,address)", +"9e0a2280": "TOKEN_SALE_ALLOWANCE()", +"9e0b7a1c": "approveCertificate(uint256,uint256)", +"9e0bb35e": "gamingDividendsReception()", +"9e0c0152": "lola()", +"9e0cb27b": "fetchOrderByOrderIndex(uint256)", +"9e0cbb64": "usersSpriteOwningHistory(address)", +"9e0cea05": "buyerCount()", +"9e0d8126": "PreICOEndTime()", +"9e0f35a2": "transfersSuspended()", +"9e0fd998": "updateEditionPrice(uint256,uint256)", +"9e0fdb26": "cancelSwap()", +"9e11b66c": "getLowerMaximum(uint256)", +"9e1224ce": "lotteryCloseInsurance(uint16)", +"9e126449": "registerForRaffle()", +"9e12c9b9": "sellCoin(address,uint256)", +"9e12d725": "NewTokenGrant(address,address,uint256,uint64,uint64,uint64)", +"9e12f15b": "units50percentExtra()", +"9e136878": "Transferred(uint256)", +"9e13baa4": "BNCConverterFactory()", +"9e13d3e1": "VietnamGemstoneChain()", +"9e140cc8": "ENCRYPTION_KEY()", +"9e1533a9": "getFounderMembersInvest(address)", +"9e159db0": "Lambo()", +"9e15bc25": "totalInput()", +"9e163aca": "getDocumentsCount(bytes16)", +"9e179b91": "addFreeMineral(address,uint32)", +"9e1832b5": "ListingCreated(bytes32,address,uint256,uint256,uint256,uint256,address)", +"9e196881": "sellBlock(uint256,uint256,uint256)", +"9e1a00aa": "sendTo(address,uint256)", +"9e1a4d19": "tokenBalance()", +"9e1ad320": "XERA()", +"9e1b9078": "addLandRevenue(uint256,uint256,uint256)", +"9e1be663": "SeedMarket(uint256,uint256)", +"9e1bf732": "addNewTokenTo(address,uint256)", +"9e1c6d6b": "transferFromFund(address,uint256)", +"9e1d14f1": "getThresholdsLength()", +"9e1e1ca9": "monstersForSale(uint8)", +"9e1e60c7": "depositOffchain(address,uint256,uint256)", +"9e1e6528": "uncertify(address)", +"9e1e9338": "getBuyerTransaction(address,uint256,uint256)", +"9e1eae34": "addReferrer(address,uint8)", +"9e1f5599": "executeTokenTxn(uint256)", +"9e20437c": "digits()", +"9e206ed5": "blockSkills(uint256[])", +"9e208922": "scheduledTopUp()", +"9e20a9a0": "registerToken(uint32,address,uint8)", +"9e20afdf": "weekly_disbursement()", +"9e20b768": "distributedBonusStakes()", +"9e20f6c9": "walletEmail()", +"9e211ee8": "dayFinished(uint16)", +"9e213fb7": "callReplaceCallback(string,address)", +"9e2262f5": "testCreateCostData()", +"9e229c55": "StatEventI(string,uint256)", +"9e22bd72": "lengthArrayApproval()", +"9e231e2d": "abortGame(uint256)", +"9e23602e": "hasAllAttrs(uint256,bytes2)", +"9e238366": "getCraftingAuction(uint256)", +"9e239ace": "itemOwner(bytes32,uint256)", +"9e23c209": "removeDeveloper(address)", +"9e243259": "frozenRate()", +"9e24edca": "TOKEN_FOR_INVESTER()", +"9e251c6f": "DonationReceipt(address,string,uint256,uint256,uint256,bytes32)", +"9e254262": "contractDurationInDays()", +"9e254d13": "Child()", +"9e25ec01": "KAL5Token()", +"9e25fd58": "SotkoCoin()", +"9e27a305": "sachin()", +"9e281a98": "withdrawToken(address,uint256)", +"9e282328": "getEditionReleaseTime(uint256)", +"9e28739d": "LogAddressTokenCapCalculated(uint256,uint256,uint256,string)", +"9e288374": "getContributor(address,address)", +"9e28abaf": "ShareActive()", +"9e29559c": "teamKeepingQuota()", +"9e29739e": "setContributionLevel(address,uint8)", +"9e29eb0f": "getUsersAwaitingForTokens()", +"9e2abcb5": "getddd(uint256)", +"9e2b8488": "getAuthor(uint256)", +"9e2d0478": "addNotaryToOrder(address,address,uint256,uint256,string,bytes)", +"9e2ed686": "cancel(address,bytes32)", +"9e2f04bf": "chooseWinner(uint256)", +"9e306d32": "MintableToken(uint256)", +"9e307955": "etherPrice()", +"9e30dd5f": "buyRareItem(uint256)", +"9e315d46": "payoutAmount(uint256)", +"9e31f9b6": "numGamesCheated()", +"9e321f42": "changeWhitelistOnly(bool)", +"9e3249ab": "setMinShards(uint8)", +"9e325b80": "SocialRemitToken(uint256,string,uint8,string)", +"9e326858": "private_AddGameBar(uint256,string,string,string)", +"9e331188": "startIco3(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9e33f72c": "reclaimStarted()", +"9e34070f": "isClaimed(uint256)", +"9e340ffb": "endFreeGet()", +"9e34ba2f": "VUP_PER_ETH_ICO_TIER3_RATE()", +"9e34d78e": "getDrawCount(uint256)", +"9e352721": "PreBuy(uint256)", +"9e3572b5": "getCurrencyContract(bytes32)", +"9e35ff3e": "storeCarrotsCredit(address,uint32)", +"9e36fde7": "regName(string,address)", +"9e37273b": "getMintDigest(uint256,bytes32)", +"9e37c923": "subscriptionOf(address,address)", +"9e3809a9": "setFiscalVerify(bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"9e385fa4": "raiseEmergency(bool)", +"9e38ac15": "ownerShip(address)", +"9e38c76e": "lockRedemption(bool)", +"9e39db38": "initChestsStore()", +"9e3a33b2": "_fetchPaidOrdersForMerchant(address)", +"9e3b34bf": "times()", +"9e3b77af": "lendingManager()", +"9e3b94f1": "CONFIRM_LIMIT()", +"9e3b9dc1": "secondTarget()", +"9e3c671c": "citizensAddresses()", +"9e3cd3f5": "_calculateRepayment(address,address)", +"9e3d0636": "numOfDeliveredCrowdsalePurchases()", +"9e3d154e": "vote(bool,bool,bool)", +"9e3d1b99": "Bakt(address,bytes32,address)", +"9e3d2d06": "totalEtherBetValue()", +"9e3d49db": "walletBounties()", +"9e3d7809": "setParamsTransfer(bool)", +"9e3df458": "twentyThirtyAllocation()", +"9e3e230b": "setSubmissionClosed(uint256)", +"9e3e6878": "allCatsAssigned()", +"9e3edce9": "setImageHash(uint256,string)", +"9e3f1f71": "isPartOfOrg(string)", +"9e416812": "creditGameAddress()", +"9e4195f1": "releaseOrderStakes(address,uint256,uint256)", +"9e41a9cd": "viewCertificateByCourse(address,string)", +"9e41b73f": "getWeapon(uint256)", +"9e422447": "clamp(uint256,uint256,uint256)", +"9e4307cf": "_95_ebetSmartContracti()", +"9e43692c": "FOUNDATION_POOL_TOKENS()", +"9e439ff8": "thirdPeriod()", +"9e455939": "getContractAddr()", +"9e459174": "_addDroneInternal(address)", +"9e45de73": "PieceTransferred(uint256,address,address)", +"9e45e0d0": "darknodeRegistry()", +"9e47214a": "isHarvestEnabled()", +"9e4734ba": "nextTimeout()", +"9e484dd4": "getMembersOfTierCount(uint256)", +"9e48d2fd": "setPayouts(uint256,string)", +"9e4902c9": "ZZCoin(address)", +"9e492aa6": "updateBLAddress(address)", +"9e497967": "CosmicPowerToken()", +"9e49e976": "importIssuerData(address[],uint256[])", +"9e4a5ade": "tokenICO()", +"9e4a613f": "setCertificate(string,string,string,uint256,uint256,string,string)", +"9e4a993b": "getGameStake(uint256,address)", +"9e4a9f2f": "SCComplianceService()", +"9e4ba1be": "testBuyTwoTokens()", +"9e4ba75b": "donateDividends()", +"9e4be339": "getPartners(address)", +"9e4bec3f": "senderIsProvider()", +"9e4c1357": "purposeWeiRate()", +"9e4d4d0c": "updateIcoEnding(uint256)", +"9e4ea320": "getterForTest(uint256)", +"9e4ece80": "getInvestorUnPaidAmount(address)", +"9e509af3": "NggaToken()", +"9e51051f": "initialRate()", +"9e524caa": "subMinutes(uint256,uint256)", +"9e5288a0": "getStep()", +"9e536132": "GetUserPools(address)", +"9e5406bf": "paymentWithCurrency(address,string,uint64,string)", +"9e544fff": "unclaimedReward(address)", +"9e551567": "PonziToken()", +"9e570d6f": "updateFighterStats(uint256,uint8,uint8,uint8,uint8,uint32)", +"9e58280c": "profit2()", +"9e584658": "newStandardCampaign(string,uint256,uint256,address)", +"9e58963f": "_clear(address)", +"9e58ad97": "getNormalCardList(address)", +"9e58cfd1": "decreaseBeneficiaryBalance(address,uint256)", +"9e58e1a7": "_addPartExperience(uint256,int32)", +"9e58f77f": "AddCandidateResult(uint256,address,uint256,uint256,uint256,uint256)", +"9e5914da": "setReferral(address)", +"9e59eb14": "getAllocated(address)", +"9e5ad3ea": "test_insert_findNoHintUpdateHead(int256)", +"9e5b241a": "getBorrowInfoByIndex(uint256)", +"9e5b53bb": "Crowdsale(uint256,uint256,string,string)", +"9e5cdaf0": "initialBankrollGrowthAmount()", +"9e5d0258": "regularDonations(uint256)", +"9e5d4c49": "executeCall(address,uint256,bytes)", +"9e5e86fa": "setEnforceKyc(bool)", +"9e5ece98": "updateLockDate(uint256)", +"9e5ee522": "tokensSoftcap()", +"9e5f1889": "partner2_address()", +"9e5faafc": "attack()", +"9e6031c6": "ZigZagToken()", +"9e60f8d6": "getPlayerSpaceshipBattleWinsById(uint256)", +"9e6371ba": "retire(address)", +"9e639858": "winPercent()", +"9e647aac": "getParameter(string)", +"9e6480fa": "A(uint256,string,string)", +"9e654dfa": "redeemForkedTokens()", +"9e65741e": "exchangePrice()", +"9e65a03a": "cancelSellCityForEther(uint16)", +"9e65c7e5": "updateLatestRevision(bytes20,bytes)", +"9e65fab0": "priceIsFrozen()", +"9e66cd38": "free(uint64)", +"9e67fa6a": "createArtwork(string,address,uint256)", +"9e686c0d": "getStaffLength()", +"9e687b6c": "retrieve(bytes32,address)", +"9e68ca82": "preValidatePurchase(address,uint256)", +"9e69383d": "TokenBatchTransfer()", +"9e697cd3": "startDateOfRestoreUnsoldTokens()", +"9e6985e2": "setbuyPrice(uint256)", +"9e6992b5": "BcengCoffeeToken()", +"9e69940d": "eachAirDropAmount()", +"9e69a6d2": "bountyTokensNotDistributed()", +"9e69c732": "take(string,string)", +"9e69f2bb": "premine()", +"9e6a5767": "previousTokenVesting()", +"9e6af2e3": "exchangeEthStb(uint256,uint256)", +"9e6afbda": "decreaseSpeed(uint256)", +"9e6b0faf": "addTimeForOpponentSelectForGladiatorBattle(uint256)", +"9e6bcba5": "getBoostFromTile(address,address,address,uint256)", +"9e6bdea0": "RegisterChallengeCreators(address,string)", +"9e6c0877": "__hasRole(uint256,uint256)", +"9e6cb42b": "voteEndTime()", +"9e6d4cd0": "joinRaceAndFinish(uint256,uint256)", +"9e6d6925": "setper(uint256,uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9e6d95c7": "checkHGame(uint256)", +"9e6eda18": "fee(address,uint256)", +"9e6f2ea2": "Kin()", +"9e6f505b": "BiigoToken(address,uint256)", +"9e6fb394": "companionsListCount()", +"9e7010a8": "Dashidai()", +"9e72942c": "getBoosters()", +"9e72a9d8": "sendToMarket(uint16)", +"9e750316": "pushBlock(uint256,uint256,bytes32,bytes32,string)", +"9e757e7f": "bookOVISSale(uint256,uint256,int256)", +"9e75a7c8": "bitplusAddress()", +"9e75c483": "busted(uint256,uint256,uint256,uint256)", +"9e761bbb": "beneficiaryList(uint256)", +"9e76a007": "removeConverter(address)", +"9e76e30d": "tokenRateUsd()", +"9e776ff5": "getTotalBattleboards()", +"9e79800d": "getOwner(uint16,uint8,uint8)", +"9e7a13ad": "people(uint256)", +"9e7b8d61": "giveRightToVote(address)", +"9e7cf86b": "changeSettings(uint256,uint256,uint256,uint256)", +"9e7d101e": "setMaxLeaders(uint256)", +"9e7d24df": "move(bytes32,uint256,uint256)", +"9e7e514b": "DiceGame()", +"9e7fec98": "owner_time_limit()", +"9e80138c": "LendConnect(address)", +"9e80b731": "test_threeValidAssertFalse()", +"9e80cab0": "ownerSetRecommendProportion(uint16)", +"9e8110e6": "setQuery(string)", +"9e813938": "expiresAfter(address,uint256)", +"9e817c03": "ROUND_LENGTH()", +"9e81c4b3": "sendFunds(address,uint256,uint256,uint256)", +"9e81e254": "_getMaximum(bytes32)", +"9e8385d6": "regadr(address)", +"9e83abe3": "newExit(address,uint256,uint32[])", +"9e84158e": "setPLATAddress(address,address)", +"9e845173": "getCCH_edit_34()", +"9e84d44d": "challengerConvicted(uint256)", +"9e8558a0": "setSellExchangeRate(uint256)", +"9e85742e": "approveEscrow(uint256,uint256)", +"9e86d7a8": "setVnt(address)", +"9e86f8c5": "RequestFactory(address,address,address)", +"9e86fb86": "investOffer(uint256,uint8[])", +"9e87a5cd": "getPriceFeed()", +"9e87c1c6": "getLastSingle()", +"9e87fac8": "Paused()", +"9e8836e2": "THORToken()", +"9e890cb3": "netAmountBought()", +"9e893d64": "TheUltimateWorldDigitalCurrency()", +"9e8a0f57": "getWinRate(uint256)", +"9e8a41f4": "getOutCar(uint256)", +"9e8ab40c": "ICOReserveWithdrawn()", +"9e8af7e9": "migrateInvestorFromHost(address)", +"9e8bf603": "curReleaseAmount()", +"9e8c3543": "setAuditAuditor(uint256,address)", +"9e8c39ed": "updateHolidayState(uint8,string)", +"9e8cfe20": "insert(int8,int8)", +"9e8e23b7": "lastBlock_v5()", +"9e8e3ef4": "nftExits(uint16,uint256)", +"9e8e4add": "changeTurnLast(uint256)", +"9e8ee59a": "addNewTicket(address,uint256,uint256,bool)", +"9e8f152c": "showLock(address)", +"9e8f2750": "withdrawInviteReward()", +"9e8fcbe9": "previousRoundId()", +"9e906157": "FundingRules()", +"9e90ce6c": "tokensIssuedForBonusRangeOne()", +"9e90f9aa": "blackHole()", +"9e916157": "STAGE_2_START()", +"9e9188ea": "setDividends(address)", +"9e918c0a": "setMaxArtworks(uint16)", +"9e9198c2": "layers(uint256)", +"9e920587": "testOwnedAuth()", +"9e92448e": "setRepAvailableForExtraBondPayouts(uint256)", +"9e925746": "_checkAndCallSafeTransfer(address,address,uint256,bytes)", +"9e92c991": "getTotalRollMade()", +"9e92dfd8": "getFiatTransactionsCount(string)", +"9e931e6b": "getRequesters(bytes32,uint256)", +"9e93d0e4": "reinvestReturns(uint256)", +"9e945ff2": "amendPurchase(uint256,address,uint256,uint256,uint256,string,uint256)", +"9e9548cb": "LabelSold(address)", +"9e95670d": "erc20Received(address,uint256,address,uint256)", +"9e9593ce": "RewardPoolAddress()", +"9e95f280": "setRatePreIco(uint256)", +"9e962b39": "minimumContributionPhase1()", +"9e964025": "bonusTokenThreshold()", +"9e965f7e": "revertSuspendedPayment()", +"9e96a23a": "give()", +"9e975ca6": "NSPToken()", +"9e976d38": "toMonth(string)", +"9e9785ad": "payoutCursor_Id()", +"9e985ea6": "changeControllerContract(address,address)", +"9e987b20": "treePot()", +"9e997121": "getConfigAddress(bytes)", +"9e9a783a": "canCallWithAssociation(address,address)", +"9e9a87e5": "agree(address)", +"9e9aed62": "contractTokenBalance()", +"9e9b6d06": "createOption(bool,address,uint128,uint128,address,uint64)", +"9e9bdb9b": "setMaxTransactions(uint16)", +"9e9ce791": "BrainLegitCoin()", +"9e9d0718": "Invested(address,uint256,uint256)", +"9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", +"9e9e5b85": "ARIToken(address,address)", +"9e9ea24b": "PRE_ICO_TOKENS()", +"9e9eb444": "winFreeGo(uint256,uint256)", +"9e9ec9e3": "getHashAddresses()", +"9ea03ccb": "fundingUnlockPeriod()", +"9ea064b2": "getLevelConfig(uint32,uint32)", +"9ea0b8f0": "addTeamGrant(address,uint256,uint256,uint256)", +"9ea0c08c": "announcementName()", +"9ea134bf": "getRedeemableReputationStaker(bytes32,address)", +"9ea1b79d": "getContentChannel(uint256)", +"9ea2104d": "firstReleaseAmount()", +"9ea23080": "STQPreICO3TestHelper(address,address[])", +"9ea27016": "setTokenIdsIndex(uint256,uint256)", +"9ea28b5c": "VestingMemberAdded(address,uint256,uint256,uint256)", +"9ea30fae": "getPokemonOwner(uint256)", +"9ea407be": "updateTokensPerEth(uint256)", +"9ea480ec": "allowanceFlower(address,address)", +"9ea55bb0": "updateFeeAmount(uint256)", +"9ea57930": "stampIn(address,uint256,uint256)", +"9ea58112": "setLethalBonusAtHits(uint256)", +"9ea67876": "returnNumber(uint256)", +"9ea69541": "updateTileBlockValue(uint16,uint256)", +"9ea71c37": "getDesignatedReportingDurationSeconds()", +"9ea73895": "hitCharacter(uint16,uint16)", +"9ea76475": "subFreezingTime()", +"9ea776cd": "currentFundingRound()", +"9ea82706": "removeRealWorldPlayer(uint128)", +"9ea8a418": "updateFunds(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", +"9ea94877": "getLandIdByKey(bytes8)", +"9ea98d55": "intersect(address[],address[])", +"9eaa4812": "isLastMilestoneAccepted(bytes32)", +"9eab0e29": "FinalisedCrowdsale(uint256,uint256)", +"9eab503a": "dividendAddr()", +"9eab5253": "getMembers()", +"9eabebe7": "setTransferTime(uint256)", +"9eacc166": "transferAnyERC20Token(address,address,address,uint256)", +"9ead1478": "setMaxAnimals(uint16)", +"9ead1b00": "loanBalanceOf(address)", +"9ead7222": "tokenList(uint256)", +"9eadd77c": "roundMoneyDownNicelyET(uint256)", +"9eae2453": "setSchedule(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,uint256)", +"9eae6555": "earlyContribList()", +"9eaeca9f": "getTokenReturnRate()", +"9eaeccf1": "TestToken(string,string,uint8,uint256)", +"9eaf17a1": "getCarveUpTokens()", +"9eb05f3a": "EarlySuccess()", +"9eb0ad03": "Exchange(address,address,address,uint256,uint256,uint256,uint256)", +"9eb180a7": "identifierToPrice(uint256)", +"9eb20aa7": "setPetLastTrainingTime(uint64)", +"9eb32fdb": "initializeContract()", +"9eb360cc": "updateRausPoint(int256,uint16,int256,uint16)", +"9eb44784": "getTokensForPresale()", +"9eb45706": "get_previous_asset_document_from_document(bytes32,bytes32)", +"9eb4da1c": "okamiTotalPurchase_()", +"9eb51bf1": "Goodluckcoin()", +"9eb59e00": "updateCursETHtoUSD(uint256)", +"9eb6c932": "ResetAllAmount()", +"9eb7294d": "transferRemainingTokens(address,uint256)", +"9eb7d170": "withdrawPendingBalance(address)", +"9eb81bd0": "unFreezeTransfers()", +"9eb866cc": "isBonusTime()", +"9eb8cbf3": "set_activity_details(uint256,string)", +"9eb9c68f": "stepBonusList(uint256)", +"9eb9dd3b": "getBetsProcessed()", +"9eba0196": "DYCOIN()", +"9ebafad6": "getLastAttackCount(uint256)", +"9ebb1250": "withdrawFinal()", +"9ebb5d3c": "getFreeCraigGrant()", +"9ebbf231": "setMinOrderSizeEth()", +"9ebc8c95": "isNeedLoan()", +"9ebca4ad": "setMasterRecruitmentAddress(address,address)", +"9ebe13a2": "END_ADDRESS()", +"9ebe4d98": "percentageQuarter2()", +"9ebee96c": "buyVirtTokens(address,uint256)", +"9ebf6d92": "Whitelist()", +"9ec0505a": "BING(uint256,string,string)", +"9ec12cfa": "sellsIngrWithoutDepletion(address,uint256,string)", +"9ec272b4": "getPremiumPack(uint256)", +"9ec32d45": "challengeWinningOutcome(bytes,uint16)", +"9ec35352": "returnRandom()", +"9ec3a90c": "verifyTimelock(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes)", +"9ec40d1c": "checkCode(string)", +"9ec5a894": "rewards()", +"9ec68f0f": "multiSend(address,address[],uint256[])", +"9ec7486a": "GiveERC20()", +"9ec760df": "_sendMoney(address,uint256)", +"9ec7888f": "Available()", +"9ec79e99": "requestConsent()", +"9ec7e1c6": "nOS()", +"9ec8b026": "sort(uint256[])", +"9ec8eec9": "TokenImpl()", +"9ec92d42": "getSecondPhaseCap()", +"9eca085c": "isSupervisor()", +"9eca672c": "withdrawFor(address)", +"9ecbf341": "adminRescueFunds()", +"9eccf691": "setICOEnd(uint256)", +"9ece1d9c": "WeiToEther(uint256)", +"9ecf12cb": "HEART(uint256,string,string)", +"9ecf9037": "getNumberDonators()", +"9ed153c0": "master(address)", +"9ed1e4c6": "singleDigitBlock()", +"9ed26fe8": "setEtherInUSD(string)", +"9ed3b61b": "getTrustContract()", +"9ed3edf0": "transactionFee()", +"9ed44c91": "CharitySplit(uint256)", +"9ed474b3": "author2()", +"9ed49005": "completeIcoPart1()", +"9ed4ad43": "getMax(uint8[])", +"9ed53f88": "starExists(uint256)", +"9ed57360": "getPaintingSpeed(uint256)", +"9ed58c7a": "provideData(address,address,uint256,bytes)", +"9ed5c84c": "salePeriod()", +"9ed74a23": "createCloneToken(uint256,string,string)", +"9ed7772c": "OwnerSetPrizePool(address)", +"9ed78285": "GENEOS()", +"9ed78489": "Worldtvcoin()", +"9ed78df0": "PRESALE_TOKEN_SOFT_CAP()", +"9ed798be": "CrestToken()", +"9ed81bc9": "deregisterProducer(address)", +"9ed93318": "create(address)", +"9ed99951": "changeBntyController(address)", +"9eda7d23": "isContributor(uint256,address)", +"9edc7b44": "revokeStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"9edcebbb": "updateTabRap(bytes32)", +"9edd1bd2": "TestEvmStack()", +"9eddc441": "lockedAccountThresholdUsd()", +"9eddfb1b": "delay_pool_change_block(uint256)", +"9ede7a37": "voteCount(uint8,uint8,uint8)", +"9eded57a": "paybackLast()", +"9ededf77": "width()", +"9edf256d": "getShipPrice(uint256)", +"9edf42ff": "pendingNumbers(address)", +"9edfb647": "senderAllowedFor(address)", +"9edfb9ee": "acceptOwnershipOfVesting(address)", +"9ee035c9": "lookupCanonicalFormat(bytes)", +"9ee04661": "withdrawTeamFunds()", +"9ee06759": "setSquarePrice(uint8,uint256,address)", +"9ee0933f": "joinBounty(address)", +"9ee1bd0f": "whoIsOwner()", +"9ee22f9a": "setCompte_32(string)", +"9ee29ef2": "updateTargetToken(address,uint16,uint16)", +"9ee3518e": "setTeamMember(address,uint256)", +"9ee398ce": "getTierStartAndEndDates(uint256)", +"9ee484ce": "withdrawCerneuTokens(address)", +"9ee5451d": "PriceOneDisable()", +"9ee5555f": "setGovTax(uint8)", +"9ee60142": "_processBonus(address,uint256)", +"9ee61c9d": "testExistingVoteWeight()", +"9ee679e8": "requestWithdrawal(uint256)", +"9ee6a7c3": "onlineTime()", +"9ee6c0e1": "test_2_someTest()", +"9ee6ff70": "testSafeMul(uint256,uint256)", +"9ee71fae": "LogPolicyDeclined(uint256,bytes32)", +"9ee7fbd9": "extraRate(uint256,uint256)", +"9ee837f5": "total_empire_score()", +"9ee85a23": "Bitstoken()", +"9ee85a9f": "isPreSaleTokenRaised(uint256)", +"9ee8e2ff": "_addAmountBlocks(uint256)", +"9ee8fa93": "yearLength()", +"9ee94556": "TestTokensMigration(address)", +"9ee9c8b5": "chetan(uint256,string,uint8,string)", +"9ee9dd5c": "vault_state()", +"9eea480f": "TotalRequestsAmount()", +"9eea4a3a": "address2()", +"9eea67e8": "_addPerk(uint8)", +"9eeaa7f4": "exitDuration()", +"9eeb30e6": "turnoff()", +"9eeb4920": "setLockup_simus(address,uint256,uint256)", +"9eeb5a6a": "Manageable()", +"9eeb6c11": "setBatchCeateDrawingsAddress(address,address)", +"9eeb79b2": "buildUrl(address,uint256,uint256)", +"9eec22e7": "reclaimEtherDeadline()", +"9eec4bac": "payoutFromContract()", +"9eec6e89": "TokenLogic(address,address,address)", +"9eed8369": "neWon()", +"9eee5787": "Standard_1()", +"9eee8041": "getPointSize(uint32,int256)", +"9eee85fe": "bookEarnings(address,uint256)", +"9eeea0d0": "PAOCoin()", +"9eeef510": "bidCustomAuction(uint256,uint256,address)", +"9eef6f65": "addRequest(address,address,bytes32)", +"9eefdd87": "enableAddress(address)", +"9eefde81": "BasicKNOW()", +"9ef0653c": "setICO4Phase()", +"9ef065bb": "fDiv(uint256,uint256)", +"9ef1204c": "vote(bytes32,uint256)", +"9ef13593": "decayedBalanceOf(address)", +"9ef1fbc4": "MudshotsToken()", +"9ef279d1": "burn(address[16],uint256)", +"9ef27b00": "closedAt()", +"9ef35c01": "setJackpotFeePercent(uint256)", +"9ef36bd1": "queueCount()", +"9ef40238": "getcoinsvotes(string)", +"9ef45a31": "someFunction2()", +"9ef46973": "guessFlip()", +"9ef48a31": "setBonusTokenRateLevelThree(uint256)", +"9ef5233f": "setByteSize(bytes32,uint256)", +"9ef53400": "getStaticArraySize()", +"9ef63e97": "paybackToOwner(address)", +"9ef6bf79": "store_ETH_to_contract()", +"9ef6ca0f": "left33(uint256)", +"9ef7a463": "exchangeRateForETH()", +"9ef7e723": "withdrawContractToken(uint256)", +"9ef887ec": "makeItRain(address[],uint256[])", +"9ef916ab": "setOriginalSupply()", +"9ef95545": "CheersWangToken()", +"9ef965d1": "RealEstateToken()", +"9ef974bb": "checkGlobalBalance()", +"9ef9df94": "transcoderTotalStake(address)", +"9efa776d": "tokenFallback(address,uint256,uint256[])", +"9efbae81": "FundTransfer(address,address,uint256)", +"9efbc411": "PICOPSCertifierUpdated(address,address)", +"9efc0190": "YORITEX()", +"9efc81fe": "minimal_token_sell()", +"9efc94a6": "kycLevel()", +"9efd1f0c": "startNextEra_(bytes32)", +"9efe6454": "Rena()", +"9efedc91": "getMyAccuAmount()", +"9efeefa5": "betAgainstUser(uint256,uint256)", +"9effb6a6": "CrowdFunding(string,string,string,uint256,address)", +"9f00237b": "minContribution(uint256)", +"9f005920": "accept(address)", +"9f00c0de": "btycsubmoney(address,uint256)", +"9f020d3a": "equalsNoCase(string,string)", +"9f022f05": "IMDEXsetAdmin(address,bool)", +"9f03711a": "withdrwleftovereth(uint256,address)", +"9f03c3b8": "hicsTokenPrice()", +"9f03d82f": "CGTToken()", +"9f047f3c": "fundProject(string)", +"9f04873d": "VILLAGE_INCREASE_RATE()", +"9f04996d": "bid(uint256,address)", +"9f052fea": "setMintRequestAddressMap(uint256,int256,string,address)", +"9f054b15": "SushiCoin()", +"9f05a36d": "getEnd()", +"9f0650d9": "etherPriceUSD()", +"9f06a579": "ViewBet(address,uint256)", +"9f06aa08": "collateralize(uint256)", +"9f0812cb": "_registerIfNeeded(uint256)", +"9f084b3a": "CAMS()", +"9f08a68c": "working()", +"9f08fc38": "subGlobalBlockValueBalance(uint256)", +"9f095e88": "asdf()", +"9f0a11ee": "buyPrice_wie()", +"9f0b17e3": "forward_transaction(address,uint256,bytes)", +"9f0b7f16": "Foo(string)", +"9f0be144": "getGreeksBattlePointsBy(address)", +"9f0d5f27": "depositAll(address)", +"9f0d6d0f": "ship(uint256,address)", +"9f0de490": "challengeOutcome(int256)", +"9f0e1986": "createGen0Auction(uint256,uint64)", +"9f0e3107": "get_timestamp(bytes32)", +"9f0e591b": "ABCDToken()", +"9f0e7d44": "companyReserves()", +"9f0eed0f": "GetCurrentICOCycle()", +"9f0f78ca": "profitsTotal()", +"9f10a990": "userEntries(address)", +"9f117317": "releaseManyStakes(uint256[],address[],address[])", +"9f118536": "initiated()", +"9f11e9cd": "setRegistrant(uint256,address)", +"9f126281": "updateFirstBuyer(bytes32,uint8,bytes32,address)", +"9f12fde0": "modifyBet(uint256,uint256)", +"9f1306cb": "P3DReceive()", +"9f132677": "MAX_CONTRIBUTION_WEIS()", +"9f13c4c7": "sealableProperties(uint256,bytes32)", +"9f147c41": "tokenPriceInCent()", +"9f15e729": "setgamecardname(uint256,string)", +"9f161d39": "BaseCrowdsale(uint256)", +"9f165304": "STAGE_PRESALE_ETHRaised()", +"9f166cf1": "multiBalanceOf(address,address[])", +"9f16b7d0": "setStarAuction(uint8,address,address)", +"9f16d65f": "fifthMonthEnd()", +"9f16f0e2": "_deposit(uint256,uint256,address,uint256)", +"9f174c6f": "AIRDROP_SHARE()", +"9f180cf1": "calculateAccountValues(address)", +"9f181b5e": "tokenCount()", +"9f184dd5": "aggregateValues(address,address)", +"9f186edb": "setSpawner(address,bool)", +"9f19296b": "getGroupStatistic(uint256)", +"9f1aa404": "refundAllInvestorTokensPurchases(address)", +"9f1ae1c1": "FSATToken()", +"9f1ae6ac": "MAX_CARS_TO_GIFT()", +"9f1b3bad": "Receive()", +"9f1cda42": "ValidateEventStorage(bytes,bytes)", +"9f1eaa4c": "getUnsoldTokensWithDecimals(uint256,uint256)", +"9f1f07fe": "iWAMToken()", +"9f1f238e": "isChecksumValid(bytes32)", +"9f1f2d77": "_updateReferrerFor(address,address)", +"9f203255": "setAuditor(address)", +"9f204a47": "sendIncentivisation(address,uint256)", +"9f21edf6": "setLevelPAO(uint256,uint256,uint256,uint256)", +"9f223167": "ownerEth()", +"9f22af8e": "add2Y(address,uint256)", +"9f233c76": "Seiyuu()", +"9f237b43": "deathData_v9()", +"9f242bf5": "NUTScoin()", +"9f245957": "totalDiscountedItemsForSale()", +"9f275dec": "investBalanceOf(address)", +"9f2763d2": "newPurchase(string)", +"9f28f7c4": "toSCL(uint256)", +"9f28f8c2": "changeWhitelistedAddressCapAmount(address,uint256)", +"9f296b62": "getPaymentTotal(address)", +"9f29e1a1": "thisContractTokenBalance()", +"9f2a1471": "erc820Registry()", +"9f2a6374": "platformWalletAddress()", +"9f2b03b6": "LAB()", +"9f2b22c7": "CanYaCoin()", +"9f2bbcfd": "LoggerAuthorized(address)", +"9f2bc32b": "preITO()", +"9f2c1fd8": "ERC20(uint256,string,uint8,string)", +"9f2c9503": "mintAndLock(address,uint256)", +"9f2ccbcc": "buyAnimalsFromAnimalFactory(string,string)", +"9f2ce678": "vote(bytes32,bool)", +"9f2e0f9c": "managePlayer(address,uint256)", +"9f2e7ce3": "prevXRPCToken()", +"9f2eaf4e": "verifyCanWithdraw(address,address,uint256)", +"9f2ee8b8": "getBlocksByOwner(uint256,uint256,address)", +"9f2f077c": "totalTransformedTokens()", +"9f2f58ec": "void_race()", +"9f2ff221": "teama()", +"9f2ffaff": "_0xGoldToken()", +"9f30ca9a": "getOpenBidsByBidder(bytes32,address)", +"9f318ae8": "HKHCToken(address,uint256)", +"9f31de2e": "updateTokensForCloudexchangeTeam(uint256)", +"9f327124": "ReflexCoin()", +"9f329b15": "SpareCurrencyToken()", +"9f334696": "isNumRed(uint8)", +"9f337cce": "_createTeam(string,address,uint256)", +"9f33d9cb": "joinAsBuyer()", +"9f34ab0c": "PXGToken()", +"9f34ce14": "activateConflictResolution()", +"9f351fc0": "totalRedeemedCheque()", +"9f35910c": "getTeamOwner(uint32)", +"9f35caee": "getAllChainIDsOfUser(address)", +"9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", +"9f37092a": "buyItem(address,uint256)", +"9f373a7a": "updateCandidate(address,string,string,uint256)", +"9f37b53f": "verificationSlashingPeriod()", +"9f396cff": "voteAgainst()", +"9f3c4416": "claimInheritance()", +"9f3ce55a": "sendMessage(address,uint256,bytes)", +"9f3d7b0b": "addProposal(address,uint256)", +"9f3e1846": "EscobarcoinToken()", +"9f3edbe1": "emissionStatusUpdate(bool)", +"9f3ef430": "payTokenHolderBasedOnTokenCount(address,uint256)", +"9f3f736a": "LIMITED_ADMIN()", +"9f3fab58": "a(bytes32)", +"9f3ff73a": "setExternalCurrencyProcessor(address)", +"9f403a3d": "addProfit(address,address,uint256)", +"9f406c8b": "isPreICOFinished()", +"9f408251": "TaTaTu()", +"9f4085fd": "setAddressKYC(address,address)", +"9f4216e8": "userList(uint256)", +"9f4283fa": "jdaleveridgesyscoin()", +"9f43daf7": "sendEthTweet(string)", +"9f43ddd2": "expirationTimestamp()", +"9f4478a2": "modifyRate(uint256)", +"9f44b34c": "EXT_COMPANY_TWO()", +"9f44fa19": "FeedbackUpdated(uint256,uint8,bytes32)", +"9f454f2b": "LEU(address,uint256)", +"9f45b45c": "getModuleByName(uint8,bytes32)", +"9f45c8ec": "nodeCheck(bytes32)", +"9f45f982": "PATH(uint256)", +"9f489e4e": "getDeposit(uint256,address)", +"9f494565": "LogMint(address,uint256)", +"9f49cefb": "addStage(uint256,uint256)", +"9f4aaaef": "asmName(address)", +"9f4ba0ee": "setInitialPrice(uint256)", +"9f4cd0ef": "current_item_index()", +"9f4e8405": "updatePaymentManager(address)", +"9f4f4808": "setCrowdfundAddress(address)", +"9f4f903e": "TicketToken()", +"9f4f9886": "getRateAt(uint256,uint256)", +"9f4fae14": "getAmountWeeklybyNum(uint32,uint8[4])", +"9f509ab1": "FUNDING_PRESALE_MAX()", +"9f5185b6": "EventCashOut(address,uint256)", +"9f51cf67": "balance_available_for_custom_voting()", +"9f5215dd": "availSupply()", +"9f5227c2": "confirmWithdrawal(address,string,uint256,string,address)", +"9f52b74e": "apt()", +"9f52f381": "startAllocation()", +"9f530cc9": "JACKPOT_CHANCE()", +"9f535821": "mint(uint256,uint256,string,uint8,bytes32,bytes32)", +"9f536edd": "setScore(address)", +"9f53e07b": "channelMaxSize()", +"9f544434": "sendFood(address,uint256)", +"9f548613": "MyUserToken(uint256,string,string)", +"9f549015": "Max_Mintable()", +"9f54c01c": "addProducer(bytes32,uint256,bytes1)", +"9f54c24f": "LogGive(address,uint256,string)", +"9f550293": "getTotalRaised()", +"9f55857d": "testBazMethod(uint32,bool)", +"9f55ecab": "currentVotingDate()", +"9f569ab4": "requestOfTime(address,uint256)", +"9f569e66": "sendTokensTo(address[],uint256[])", +"9f572048": "getCanvasByOwner(address)", +"9f5755ae": "announcement()", +"9f577c15": "setContractProvider(address)", +"9f57d16e": "getCurrentJackpot()", +"9f5892a7": "hash(string,uint256,uint256,address)", +"9f58d881": "executeOr(bytes32,bool)", +"9f591fa5": "deathData_v15()", +"9f59fc5a": "GetConsentDirectives()", +"9f5a5ff8": "Police_4()", +"9f5a851f": "configure(uint256,uint256,uint256,uint256,uint8,address)", +"9f5a9b7c": "getTotalBurnt()", +"9f5ac8f7": "creator(bytes32)", +"9f5b1d2c": "GITHUB_LINK()", +"9f5bd866": "setNodalblockURL(string)", +"9f5c11c4": "two_card()", +"9f5c671e": "MultipleErrorsContract()", +"9f5ce849": "CNT_Token()", +"9f5cfe03": "roundsCount()", +"9f5f0520": "myVault()", +"9f5f0826": "_bonusToPartners(uint256)", +"9f5f7c7f": "tokenSplit(address,address,address,uint256)", +"9f5ff50a": "calcTokens(uint256,uint256,uint256)", +"9f614b61": "addTitleTransfer(string,string,string)", +"9f6163ee": "lastBlock_v4()", +"9f621075": "ICO_AllowPayment()", +"9f624701": "DZONetwork()", +"9f6264d3": "setArray(bytes32,bytes32[])", +"9f62e202": "CrowdSale_AssignOwnership(address)", +"9f637851": "endICODate()", +"9f63f5c3": "approveLoan(address,uint256)", +"9f64b6fb": "sendAffiliateValue(uint256,address)", +"9f654dd2": "sellTokensIco()", +"9f659296": "createCardForAcquiredPlayers(uint256[],address)", +"9f65f242": "Itube()", +"9f665e1a": "offerAccepted(address,uint256)", +"9f668bba": "getGameIds()", +"9f674147": "accruedBonus(uint256,uint256)", +"9f674eb3": "myAccessLevel()", +"9f678cca": "drip()", +"9f6822b4": "startEscrow(bytes20,address,uint256)", +"9f684a0d": "disableATMExchange()", +"9f69b5a0": "updateEscrow(uint64,uint256,uint256)", +"9f6a4fbe": "CyteCoinERC20Token()", +"9f6b4cce": "BetPlaced(address,uint8,uint256)", +"9f6bd2a9": "isArbitrator(address)", +"9f6c20f6": "MRC(uint256,string,string)", +"9f6c3dbd": "join(address,address,uint256)", +"9f6dcd9d": "ETHtoZCOrate()", +"9f6e3456": "SOPHIYA()", +"9f6e4bb5": "weiAllowedToReceive(uint256,address)", +"9f6f99ee": "updateAPIPublicKey(bytes)", +"9f6fb2ba": "createRichContract(string)", +"9f6ff2e1": "EInvoicingRegistry()", +"9f70c3dc": "doWithdraw(address,address,uint256)", +"9f70db12": "removeEmployee(address,address)", +"9f727c27": "reclaimEther()", +"9f73bef1": "getSubjectsCount()", +"9f73dbc0": "getCurrTeamSizes()", +"9f7496ec": "_firstUnlockAmmount()", +"9f753df6": "MELON_BASE_UNIT()", +"9f75ccc8": "onSuccess()", +"9f75e990": "ReceivedCall()", +"9f7623b8": "sign(address,address)", +"9f769807": "setTokenState(address)", +"9f77920c": "Revoke(address)", +"9f789a0c": "setSchellingRoundDetails(uint256,uint256,uint256)", +"9f7904af": "available_with_bonus()", +"9f7a2ef5": "TEAMmint()", +"9f7a53a1": "sendBountyBalance(address,uint256)", +"9f7b0fc8": "getParent(address,uint256)", +"9f7b4579": "create(uint256,uint256)", +"9f7b967e": "SampleERC677Token(address,uint256)", +"9f7ba828": "getTokenToEthMakerOrderIds(address)", +"9f7c8851": "otherSupply()", +"9f7c94aa": "payoutWinners()", +"9f7d9f62": "deprecateDefenceSubtype(uint8)", +"9f7d9f92": "AggiungiMiner(address,bool)", +"9f7e03cc": "deposit70Percent()", +"9f7e1fed": "Lock(bytes)", +"9f7ed5b8": "startTimeTLP1()", +"9f7f0784": "appVersionListAt(bytes32,uint256)", +"9f7f2bd1": "createDog(uint256,address)", +"9f7f760c": "SimpleDice()", +"9f7ff381": "COMPLETION_STATUS()", +"9f8049ea": "distributeELTCLarge(address[])", +"9f807962": "buyMorties()", +"9f80d1b2": "presaleGoing()", +"9f810510": "ZONTEX()", +"9f8106cf": "transferAllUnsoldTokens(address)", +"9f819b13": "updateFunders(address,bytes32,string)", +"9f81c4d6": "bitcoingo()", +"9f83008a": "teamReserveWallet()", +"9f839d22": "getOptionPair(address,uint256,address,uint256,uint256)", +"9f853717": "duplicates(uint256)", +"9f855bd5": "shipLocation(uint16,uint16,address)", +"9f856de5": "doPurchase()", +"9f871242": "computeTokenAmount(uint256)", +"9f8743f7": "getRound()", +"9f87acd0": "exec(bytes32,bytes32,uint256)", +"9f87f419": "closeTierAddition()", +"9f881e0b": "MobSquads()", +"9f881f46": "checkPassed(address)", +"9f8970dd": "bountyTokensAccount()", +"9f8a13d7": "isActive(address)", +"9f8abede": "fixPermission(address,address,uint8,bool)", +"9f8adeb8": "givecandyto()", +"9f8ae5d3": "roundFourTime()", +"9f8aef2b": "ERC721Token(string,string)", +"9f8c45cf": "getQuestionDetails(uint256)", +"9f8c7c4c": "insertSums(uint256)", +"9f8e8209": "Cillionaire()", +"9f8f0dc3": "test_twoValidEqBool()", +"9f8f4c45": "developerPctX10()", +"9f8f4fb5": "withdrawAcquisitionsToken()", +"9f8f9b8e": "SetEvaluate(uint256[],uint8,uint64[])", +"9f8ff91d": "getSponsorFee()", +"9f90279e": "f_priv()", +"9f903ff6": "setEmitter(address)", +"9f90688a": "SmartCityToken(address,uint256)", +"9f912d25": "abort(uint16)", +"9f915aca": "Tier_Starter()", +"9f91d145": "draftNewCardWithReferrer(address)", +"9f923388": "secondStageTokensSold()", +"9f9248c7": "DepositInterest(uint256,address,uint256,uint256)", +"9f927be7": "getNextCall(uint256)", +"9f941f69": "getDesignatedReportingEndTime()", +"9f943039": "Ethershares()", +"9f94d684": "irreducibleOf(address)", +"9f94fb7a": "endAtkBoss()", +"9f95de64": "transferToGrant(uint256,uint256)", +"9f961c5a": "salesPipe()", +"9f963c4e": "periodPercent()", +"9f96de0f": "getResourceCount()", +"9f9727ce": "QuotaManager(address)", +"9f977b21": "getBob(uint256)", +"9f97a024": "testEscapedQuoteInString()", +"9f97d937": "start_declaration()", +"9f97fdbb": "setDonationReceiver(address)", +"9f9827fa": "adviserPart()", +"9f98985d": "endGame(uint256,uint256)", +"9f98a45a": "fillOptionOrder(address[3],uint256[3],uint256[2],address,bool,uint96,uint8,bytes32[2])", +"9f98df30": "give(address[],uint256)", +"9f98e0f3": "addMerchant(address,string,string)", +"9f9936e7": "BullToken()", +"9f9938fa": "SILALAHI()", +"9f9a9b63": "getCategoryLength(bytes4)", +"9f9a9b7d": "NDUXBase()", +"9f9ae633": "LademiA()", +"9f9b1048": "holderExists(address)", +"9f9b3d98": "softcap2Reached()", +"9f9b4c9d": "Unhalted(uint256)", +"9f9ea29d": "decodeLock(bytes)", +"9f9eac67": "ChangeName(string)", +"9f9f1fbe": "getRegionTax(uint16)", +"9f9f83dd": "remainingIssuableSynths(address,bytes4)", +"9f9fb968": "getDeposit(uint256)", +"9f9fe6bb": "acceptProvider(address)", +"9fa0f763": "buyDrugs()", +"9fa0fc4c": "pgoVault()", +"9fa2526f": "offline()", +"9fa45fa6": "sellMyStake()", +"9fa46754": "releaseBonus(address,uint256)", +"9fa4b6cb": "BetDex()", +"9fa50ab2": "voteDescription()", +"9fa5adca": "buyP3D(uint256)", +"9fa5df9c": "decreaseAllowed(address,uint256)", +"9fa5e5d5": "setARKowner(address)", +"9fa6a6e3": "current()", +"9fa6f886": "NewParticipant(address,uint256,uint256,uint256)", +"9fa778d8": "UECToken()", +"9fa77b20": "reserveOf(address)", +"9fa80c6e": "rewardDistributionEnd()", +"9fa8e5a0": "SetEvaluate(uint32,uint8,uint64)", +"9fa92f9d": "home()", +"9fa9440c": "BDAYSALE()", +"9fa9559c": "getLastYearOfInflation()", +"9fa95bfe": "_emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", +"9fa987d5": "curPosition()", +"9fa9b04c": "ADVISOR_ONE()", +"9faa3c91": "beta()", +"9fab63c7": "ICOBIDToken()", +"9fabf4da": "remainigTokens()", +"9fac68cb": "burn(uint256,bool)", +"9fac6ddc": "withdrawLeftoverWei()", +"9fac9abf": "icoHasEnded()", +"9faceee4": "MemeToken()", +"9fad2dcb": "setTaxInBps(uint256)", +"9fae8fd8": "GayBananaToken()", +"9faea9c6": "setUnavailableFlat()", +"9faec3c9": "adminWithdraw(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32,uint256)", +"9faec927": "withdrawChunk()", +"9faefe0c": "sendNow(uint256)", +"9faf52ee": "teamTwoVolume()", +"9faf6fb6": "removeAddress(bytes32)", +"9faf7000": "manualSend(address,uint256)", +"9fafcf72": "PersonaRegistry(address)", +"9fb03244": "softcapMainSale()", +"9fb03c7f": "countLayersGasLimit(uint256)", +"9fb14d9b": "getRemainingBytesTrailingZs(uint256,bytes)", +"9fb1b5fb": "setJackpotGuaranteed(uint256)", +"9fb25d9e": "LeaderMessage()", +"9fb31475": "refundable(bytes32)", +"9fb3b7dc": "_setWeights(uint256[])", +"9fb3d489": "cancelProposalByCreator(uint256)", +"9fb42b1f": "numRequests()", +"9fb4c63d": "assertEq21(bytes21,bytes21)", +"9fb4d1b0": "_getDepth(uint256)", +"9fb52b6e": "dividendsGetPaid(uint256)", +"9fb5bdb9": "registerAsSeller(address,string,string,string,string)", +"9fb632c1": "private_withdrawBankFunds(address,uint256)", +"9fb65754": "FishProxy(address,address)", +"9fb65968": "presaleTokensDistributed()", +"9fb69839": "getTransactionInformation(uint256)", +"9fb6c796": "mint(bytes32,uint256,string)", +"9fb755d7": "setHotWallet(address)", +"9fb8657b": "getNodes(string)", +"9fb876c0": "getAllOwnersClaimPriceOfCard(address)", +"9fb8dd1a": "getBaseLockPercent()", +"9fb95205": "getWithdrawSum()", +"9fba2578": "summaryData(address)", +"9fbc6a1a": "EtherHellHydrant()", +"9fbdcef0": "setauctionotherfree(uint256)", +"9fbf538f": "addApprovedBattle(address)", +"9fc04ce2": "setMaxReferrerTokens(uint256)", +"9fc18031": "getNodesBatch(bytes32,bytes32)", +"9fc18d4b": "migrateDisabled()", +"9fc1d0e7": "forcedTransfer(address,address,uint256)", +"9fc1ff30": "InooviToken()", +"9fc20f60": "priceForSaleAdvertisement()", +"9fc21eeb": "wdrawBfr()", +"9fc23a74": "totalContractsAvailable()", +"9fc3587a": "releaseSupply(uint256)", +"9fc39549": "removeInvestorList(address[])", +"9fc3b4e7": "checkQuorum(uint256)", +"9fc3e53a": "controlstampdissolution(bool,uint256)", +"9fc53f30": "getIdByHash(bytes32)", +"9fc5852e": "BytePeachCoin()", +"9fc5ce2a": "initialMint()", +"9fc6ceac": "SponsorsQty()", +"9fc6d585": "percentageRecipient2()", +"9fc71314": "KontolToken()", +"9fc71b31": "transferToken(uint256)", +"9fc75354": "isMasternodeOwner(address)", +"9fc7a200": "startNumber()", +"9fc880f4": "weiRaisedAfterDiscounts()", +"9fc89294": "productTypes(uint8)", +"9fc8ed76": "serviceAtIndex(uint256)", +"9fc9141d": "calculateHash(bytes8,uint256,uint32)", +"9fc91980": "JoailyToken(uint256,string,string)", +"9fc9278e": "returnAnyERC20Token(address,address,uint256)", +"9fc9ceb8": "HRWtoken(uint256,string,uint8,string,address)", +"9fc9d6c0": "FrannickToken()", +"9fcaa5ef": "extendMembership(uint256)", +"9fcb114c": "addSomeTokens(uint256)", +"9fcb29fc": "_assign(address,address,uint256)", +"9fcb7100": "approveAndCall(address,int256,bytes)", +"9fcbc6f1": "bitvimToken()", +"9fcbc738": "setIntermediate(address)", +"9fcc4767": "set_referral_fee(uint8)", +"9fcdec61": "buyPresale()", +"9fce2d80": "didCommit(bytes32,address)", +"9fce5c8e": "indexOf(address[],address)", +"9fce89a4": "intercrypto_recoverable()", +"9fcf11bb": "determineCurrentStage()", +"9fcf4115": "updateRoundEndTime(uint256)", +"9fcf89ee": "lastBlock_a13Hash_uint256()", +"9fd033ed": "isHolder(address,address)", +"9fd03ed8": "XENIA()", +"9fd0506d": "pauser()", +"9fd1bd1f": "changeSelfAddress(address)", +"9fd1e7f6": "purchaseTokensERC20(uint256)", +"9fd3ad34": "setFunds(address,uint256)", +"9fd4da40": "totalInitialSupply()", +"9fd4f7d1": "replaceWizard(address)", +"9fd52984": "burnAfterSoldAmount()", +"9fd547fb": "PayeeWithdrawCapital(address,uint256)", +"9fd55832": "BrancheProportionalCrowdsale(uint256,uint256)", +"9fd58182": "withdrawManagerIncome(bytes32)", +"9fd64fea": "findAuditor(address)", +"9fd6adb3": "unVote(uint256)", +"9fd6d285": "AirdropMined(address,uint256)", +"9fd6db12": "mintingEnabled()", +"9fd7ca8a": "getCurrentTrancheIdx(uint256)", +"9fd859ee": "disablePreminer(address,address,address)", +"9fd8914d": "GameAAAToken()", +"9fd8b4f1": "redirectToPurchase()", +"9fd8bfb3": "voteCandidateOne()", +"9fd8c361": "CHECKgamberOne()", +"9fda3675": "MYYG()", +"9fda5ad2": "confirmedTimesByOwners()", +"9fda6271": "setElectionInfo(uint256,uint256,uint256)", +"9fdb35e7": "retriggerDrawOnOraclizeError()", +"9fdc0ea6": "getDirectoryLength()", +"9fdc3255": "_permittedPartnerTranferValue(address,uint256)", +"9fdc4d13": "isBuyable(string)", +"9fdc53b1": "registerLoanReplace(address,uint256)", +"9fdd32cd": "_drawFailure(uint32,uint8,string)", +"9fdd983f": "setAmount(uint256,uint256,uint256,uint256)", +"9fddd5a7": "SeedTestToken()", +"9fde4ef8": "winningOption()", +"9fdeeb5e": "teamVestingContractAddress()", +"9fdf057f": "setMiningToken(address)", +"9fdf9625": "seizeForWork(address,address,uint256,bool)", +"9fe005e8": "horseShoeNotForSale(uint256)", +"9fe03c59": "PayForPrivKey(address)", +"9fe14580": "BONUS_TIER_1_LIMIT()", +"9fe17cc2": "icoContractAddress()", +"9fe21fc4": "depositAndInitiate(uint256,bytes32,address,uint256)", +"9fe304a0": "catch_the_thief(address)", +"9fe34d9f": "isAllowedUser(address)", +"9fe39d85": "CHINESE_EXCHANGE_1()", +"9fe4712d": "schedule(address,bytes,uint256[8],uint256)", +"9fe4b663": "buyTokensInternal(address,uint256,string)", +"9fe5e868": "NewWallets(address,address)", +"9fe634b9": "getReleaseAuctionEndTime(uint256)", +"9fe6999a": "tokensFor1EthP5()", +"9fe72acd": "airDropsClaimed()", +"9fe7ac12": "removeBool(bytes32)", +"9fe7ba47": "updateFirstUnionIds(bytes32,bytes32)", +"9fe802f1": "transferEx(address,uint256)", +"9fe81f52": "changeTimeLimitMinutes(uint256)", +"9fe93231": "ICOEndedSuccessfuly(uint256,uint256)", +"9fe9bde0": "tripleRoomMin()", +"9fe9f623": "setTransferEnabled(bool)", +"9fe9fc1a": "SoldBlock(uint256,uint256,uint256,uint256,uint256,address)", +"9feb8d23": "amendClaim(uint8,uint8,uint8)", +"9fec4ac4": "SputnikPresale(address)", +"9fec8e3b": "addToWhiteListMultiple(address[])", +"9fec8e96": "claimedAmounts(address,address,uint256,address)", +"9fecb69f": "finishGame()", +"9fecf214": "XChain(uint256,string,string)", +"9fed35a6": "createBulkContributions(address[],uint256[])", +"9fed39c5": "numWhitelistedInvestors()", +"9feda172": "totalRice()", +"9fedb749": "setTeam(uint256,string)", +"9fee14ae": "getAllot(bytes32,uint8,uint8)", +"9fee597b": "extractEther()", +"9fef0ae1": "BetherFund()", +"9fef26ce": "buyTokens(address,uint256,string)", +"9fef93f8": "buyKey(uint256)", +"9ff00adc": "betOnOddEven(bool)", +"9ff031ce": "createEscrow(uint256,uint256,uint256,address,address)", +"9ff12bba": "removeContractMiniGame(address)", +"9ff1b56f": "lockInTime2()", +"9ff25fa4": "InitialDateChange(uint256,uint256)", +"9ff32b18": "grantAllowanceProxyAccess(address)", +"9ff33fd1": "getByInternalId(uint256)", +"9ff34878": "IPTVcontract()", +"9ff3487f": "ConsumerRemoval(address)", +"9ff36b54": "isClientPayed(uint256,address)", +"9ff390c1": "currentTotalBuyin()", +"9ff394a8": "goShort()", +"9ff4125a": "ICOendTime()", +"9ff47485": "isBetPossible()", +"9ff512fa": "getTransactionDetail(uint256)", +"9ff61487": "myBackerToken()", +"9ff652cb": "setToContractAddr(address)", +"9ff71ccb": "modifyCategory(uint256,string,string)", +"9ff7422d": "SurgeTestToken()", +"9ff7971b": "setWeiPerToken(uint256)", +"9ff8c63f": "issueMaxSynths(bytes4)", +"9ff9007d": "lastweek_winner1()", +"9ff93088": "settleGame(uint256,uint256)", +"9ffa0711": "CashOut(uint256)", +"9ffa43ce": "buyFST(address)", +"9ffaf32e": "resourceDelete(address,bytes4)", +"9ffb2ed5": "showRewards(address)", +"9ffbb57f": "SongTokenAdded(address,bool)", +"9ffc981f": "getDepositOwner(address)", +"9ffcc4c3": "getPayoutCumulativeInterval()", +"9ffd1c10": "TrueFlipICO(address,address,address,address,address,uint256)", +"9ffdb65a": "validateName(string)", +"9ffea547": "_purchaseOneUnitInStock(uint256)", +"9fff19ef": "_setValidatorWrotePart(uint256,address)", +"9fff37e0": "JACKPOT_SIZE()", +"a000812c": "Y1_lockedTokenReleaseTime()", +"a000aeb7": "weiReceived()", +"a0013419": "ShanxiCoin()", +"a001ecdd": "feePercentage()", +"a001ef87": "TestOneToken(string,uint8,string)", +"a00223ec": "_recordFirstClaimTimestamp(uint256)", +"a002b179": "getCandidateForApoderado(bytes32)", +"a003371e": "PreICOEarlyDays()", +"a003651d": "getNumberOfChoices(bytes32)", +"a0041286": "changeURL(string)", +"a00413bd": "resetReportTimestamp()", +"a004737a": "startPrePreIco(uint256)", +"a004ee5a": "isCustodianOf(address,address)", +"a00545b2": "claimPrize(address,uint16)", +"a00553a5": "WinnerIndex(uint256)", +"a005b87b": "NullMapTest()", +"a006b0e2": "_regName(bytes32)", +"a006e0e5": "phaseTwoLimit()", +"a0071552": "sellItem(uint256,uint256,uint256,uint256)", +"a007bc45": "getRateStages(uint256)", +"a008d288": "Pethreon(uint256)", +"a008d893": "isReferee(address)", +"a008f5eb": "_isNativeToErcBridge(address)", +"a0099b60": "deltaEFunc(uint256,uint256,uint256,uint256,uint256,uint256)", +"a00a3440": "mainSale1Limit()", +"a00a7a6d": "determineNewRoundMostInviter(uint256,uint256)", +"a00aede9": "scheduleCall(uint256,address)", +"a00afaa0": "ADMIN_GET_FEE()", +"a00b043e": "bonusTokenVault()", +"a00b603c": "getDNI()", +"a00c0a28": "Log2(string,uint256,uint256)", +"a00c3e72": "ExtendLife()", +"a00c9374": "afterSaleMinting(uint256)", +"a00ce377": "getIsContractValid()", +"a00ce6a5": "mintForReportingParticipant(address,uint256)", +"a00d7740": "setCUSDAddress(address)", +"a00d7b27": "myFirstHelloWorld()", +"a00dc9dd": "changesp1(address)", +"a00ddad1": "verifyBalance(address)", +"a00ec993": "setStarRate(uint256)", +"a00ee946": "existAccount(uint256)", +"a00f198a": "confirmOrder()", +"a00f64d6": "_soldOutsidePMZ()", +"a00f77e1": "getMemInvestor(address)", +"a00fd3c8": "register(uint256,string)", +"a00fd7c8": "getPayOut()", +"a00fe86b": "SaleAborted(uint256)", +"a00fff6f": "pendingManager()", +"a0109c9f": "incrementFee()", +"a0111086": "ParentFee()", +"a0113f18": "isCrowdsaleFull(address,bytes32)", +"a0129b00": "redeemSurplusETH()", +"a01317cb": "BlockHipo()", +"a0132df2": "validationTime(address)", +"a0135b2b": "updatefee(uint256)", +"a0135d04": "seSigner(address)", +"a013ab77": "isBuilt(uint256)", +"a013ad54": "BONUS_DURATION()", +"a013e4d0": "GouShiTokenFunc()", +"a014b9bd": "addReferralOf(address,address)", +"a015cb10": "claimOwnerEth(uint256)", +"a01701dc": "capPerAddress()", +"a01729a4": "communityCliff()", +"a0175360": "Approval(address,address,address,uint256)", +"a0175b96": "changeAllCosigners(uint256,address[],uint256[3],bytes,bytes,bytes)", +"a0179949": "feeAccount1()", +"a017ed35": "G12Coin(uint256,string,uint8,string)", +"a0187f91": "DataExternalValidation(address)", +"a0189345": "outOfLimitAmount()", +"a018f2b2": "delegateProxyAssert(address,bytes)", +"a0193ff9": "allowed_contract()", +"a01a3a07": "LogTicket(uint256,address,uint256)", +"a01a478c": "getEnemyCombinationOfAddress(address,address)", +"a01a4cfa": "getMyInstancesOfAPackage(uint256)", +"a01b0c27": "getRegisteredContract(uint256,uint256)", +"a01bc729": "monster_attack(uint256)", +"a01bc8f6": "setdaily(uint256,uint256)", +"a01bfa79": "adminWithdrawBCEOPreSale()", +"a01c144e": "addPriceChange(uint256,uint256)", +"a01c489d": "setMaxFeeTrade(uint256)", +"a01c62f7": "isTransferLocked()", +"a01cb43d": "WithdrawFee(uint256)", +"a01de7ae": "BFToken()", +"a01e1a21": "setPendingReserveData(address,uint256,address)", +"a01e5490": "isUnconfirmedGblock(bytes32)", +"a01eacc2": "Aerosyn()", +"a01fdbef": "approvePullRequest(bytes32)", +"a0214c1c": "mintClose()", +"a02172d3": "getAssData(uint256)", +"a0218b66": "getAccountAmount(uint256)", +"a021d76d": "deleteIssuer(uint256)", +"a022ac81": "test3Args()", +"a022c15e": "getTaskReward(bytes32)", +"a022da29": "increaseLoanOnBehalfOfRecurse(address,address,bytes32,uint256,uint256)", +"a022e283": "APOLLOCOIN_COMPANY_AMOUNT()", +"a0234a91": "supplyLockedA()", +"a023d4a7": "Redicon()", +"a023e7d3": "updateTrustRankAfterStoryExpiry(bytes12)", +"a023ea47": "burnAdminTokens()", +"a024284d": "participantsForCustomSale(uint256,address)", +"a024ea16": "MAX_BOUNTY_ALLOCATED_TOKENS()", +"a025bcc3": "calculateFee(bool,bool,uint256,uint256)", +"a026348c": "pitboss()", +"a0263a5a": "addgodaddress(address,address)", +"a0268aea": "fcomToken()", +"a026946d": "ieth()", +"a026d7c4": "SunflowerToken()", +"a026da8c": "teamClaim(uint256)", +"a0270dbc": "resolve(uint8)", +"a02745af": "setarg_2_input(uint256)", +"a0275c05": "appendStock(uint256)", +"a02853ef": "BitcoinExchange()", +"a028554e": "setInitialMintingPowerOf(uint256)", +"a0285c01": "initiateChange(bytes32,address[])", +"a028aa1b": "distributeVariable(address[],uint256[])", +"a028d749": "caculateFee(address,uint256,uint8)", +"a028e63c": "setName(uint256,bytes32,bytes32)", +"a02a338a": "tokensPerOneETH()", +"a02a34cd": "skinOfAccountById(address,uint256)", +"a02b114c": "setArray(bytes32,address[])", +"a02b161e": "unregister(uint256)", +"a02b1a51": "getPaid(bytes32)", +"a02b7fbe": "MANAGEMENT_TEAM_SUPPLY_LIMIT()", +"a02b9aac": "getPaymentDataByAddress(address)", +"a02c40e1": "qbxSourceToken()", +"a02c4b97": "holdAddress5()", +"a02c5279": "testIntegerKeyValue()", +"a02cf937": "feePct()", +"a02d2376": "SubContract()", +"a02e98df": "getAdd(bytes32)", +"a0305398": "getOtherMapValue(uint256)", +"a030b8e6": "restartsys()", +"a03189b3": "devPayed()", +"a03243cf": "getMinimumTribute()", +"a0326040": "weekPot()", +"a0326fae": "_removeFromList(address,uint256)", +"a033fcd4": "collectFees(address,uint256)", +"a0340625": "unfrozen()", +"a03435d1": "authorizerAddress()", +"a0345fca": "finalize(bytes)", +"a034b6cb": "vote(uint256,uint256,uint256,string)", +"a0354921": "setSTMPPrice(uint256)", +"a0355eca": "setTime(uint256,uint256)", +"a0355f4e": "decline(uint256)", +"a035b1fe": "price()", +"a036f0f8": "getUsableXPA(address)", +"a0376dfe": "getAskByUserID(uint32)", +"a0378730": "addReceivers(address[],uint256[])", +"a0385e1c": "superTransferFrom(address,address,uint256)", +"a038af35": "GetChallengeBetsInformation(uint256)", +"a0392897": "_decreaseApproval(address,address,uint256)", +"a039e3c7": "testSetNotTransferable()", +"a03b1ea9": "_getFee(uint256,uint256)", +"a03b66e5": "ZilleriumPresale()", +"a03c5832": "getPermissionParam(address,address,bytes32,uint256)", +"a03cc0b2": "setExchangeToken(address)", +"a03d0f06": "lockAccount(address,bool)", +"a03df051": "rentedLand()", +"a03eb806": "recoverAddressFromSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes)", +"a03f254f": "getWebsocketUri()", +"a03f633a": "resetListing(bytes32)", +"a03fa7e3": "transferTo(address)", +"a03fb4c0": "makeTradeable()", +"a0417c9a": "updateAsset(uint256,string,uint256,uint256)", +"a0422d02": "COLOR_NOT_AVAILABLE()", +"a0422d31": "getApiById(uint256)", +"a0426fb2": "preSaleEnded()", +"a0428bbc": "balancesStaticoin(address)", +"a042b9c1": "newComment(bytes32,bytes32,string)", +"a04369f8": "addBoosterQuest(address)", +"a0437f63": "rewardBounty(address,uint256)", +"a043bb16": "tokensBoughtInBonusProgram()", +"a0440426": "purchaseProduct(uint256,uint256)", +"a044b070": "a(address,uint256)", +"a0452bfb": "dividendFee_()", +"a045fdff": "scheduleCall(address,bytes)", +"a0469b02": "inputToDigit(uint256)", +"a046c5f6": "NewStaticAdr(address)", +"a0472d6c": "blocksInADay()", +"a0489ac2": "draining()", +"a0493834": "unconfirmedSum()", +"a04a0908": "execute(address,bytes,uint256)", +"a04a59cc": "randMod()", +"a04a6ac8": "auctionEndPrice()", +"a04a7b1f": "getPoolMinStakeQspWei(uint256)", +"a04a85c0": "checkFrozen(address)", +"a04b3c2d": "mine_jade_ex(uint256)", +"a04bd02f": "getIsStartable(uint256)", +"a04cc350": "_addDefaultOperatorByTranche(bytes32,address)", +"a04ce2c5": "setArrayIndexValue(bytes32,uint256,uint256)", +"a04d4c60": "getDataColla_001_001(string)", +"a04da725": "SEXNToken()", +"a04e34bc": "weiAllowedToReceive(uint256,uint256,uint256,uint256)", +"a04f7bd1": "MMONToken()", +"a04fce5b": "MINDBODYToken()", +"a050975b": "requestReclaimContract(address)", +"a050d07d": "getNumWizards()", +"a05190f4": "BOT_ELEMENT_2()", +"a051b6b1": "phase_5_rate()", +"a052c595": "addTrustedPartner(address,string,string)", +"a052eae4": "writeStuff(uint256,int256,uint256)", +"a052f024": "addDonator(address)", +"a053ce1f": "referralRate()", +"a053eb9d": "OPERATION_STAKE()", +"a0548d2f": "redistributeLosingReputation()", +"a054cbea": "isPlatform()", +"a054d3ef": "checkWithdrawal(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"a0557818": "getSireId(uint256)", +"a055d455": "run(uint40,uint256,address)", +"a055fe64": "_projectCommitNew(address)", +"a056469a": "extractFeeLength()", +"a0566330": "LJCJ()", +"a05693c6": "clearSmet()", +"a0572fda": "titleIds(uint256)", +"a0577762": "changeTechAccountAddress(address,address)", +"a0579801": "icoStoppedManually()", +"a057dade": "blackListUser(address,address)", +"a05801b7": "metadataOfTokenByIndex(uint256)", +"a05809ff": "calculateTotalPayoutAmount()", +"a058ce51": "DigiCash1()", +"a059ffa6": "createNewTourament(uint256[])", +"a05a1218": "triggerStealManually2(string)", +"a05a70a7": "QTLToken(address)", +"a05b8ed8": "_execute(bytes32)", +"a05bba46": "getAllDepositorsCount()", +"a05c47ca": "ico2Max()", +"a05c7bda": "AuthorizeToTransfer(address)", +"a05d03fd": "currentSale()", +"a05d068d": "foundationTokensVested()", +"a05e1db7": "getBuyerfee()", +"a05e3bb0": "setBasicBallotsPer30Days(uint256)", +"a05e822a": "howManyOwners()", +"a05fc749": "CoinLotto(address)", +"a05fccef": "transferMultiple(address[],uint256[])", +"a0605a79": "ZTTBToken(uint256,string,string,uint8)", +"a060d498": "KillSwitchEngaged(address)", +"a060ecce": "checkPosition1(address,address,uint256)", +"a0617ad0": "totalMaxSupply()", +"a061eba0": "proposeVersion(address)", +"a0626939": "setFoundersTokensReserve(uint256)", +"a06285ed": "CharityInProgressSupply()", +"a062d5fe": "TOTAL_SATOSHI()", +"a063dae8": "equal(int256[],int256[],string)", +"a0641288": "redeemableBalance(address)", +"a064481e": "BokkyPooBahWuzHere()", +"a065a2bf": "distributeFAITH(address[],uint256,uint256)", +"a0660943": "computeSlaves(address,address)", +"a067412b": "assignInitialAddresses(address[])", +"a0684251": "remainder()", +"a068e8d3": "convict(uint256,uint256,uint256,uint256)", +"a068edb5": "determineOutcome()", +"a0695f24": "assertBalances()", +"a0695fc2": "startIcoOne()", +"a06ac637": "listUserRecasts(address,uint256,bool)", +"a06aceb2": "ATCController()", +"a06b7eb0": "decreaseLockedAmount(address,uint256)", +"a06c5a24": "monthlyPrice()", +"a06caae8": "TransactionSettled(uint256,uint256,uint256)", +"a06cab79": "Registrar(address,bytes32)", +"a06ced75": "RESERVE_LOCK_TIME()", +"a06d083c": "credit()", +"a06db7dc": "gracePeriod()", +"a06dd6dc": "emergencyFlush()", +"a06de4d9": "rand8(uint256,uint8,uint8)", +"a06e09f1": "PrivateSale(address)", +"a06e58ac": "isResolvedForComplainant(uint256)", +"a06ef4f2": "icoAmountBonus3()", +"a0712c3d": "feesRateTeam()", +"a0712d68": "mint(uint256)", +"a07245fd": "getHtlcPaymentBlock(bytes32,bytes32)", +"a0726b72": "getPresaleRaisedAmount()", +"a072f02b": "idvRegistry()", +"a0742666": "isParticipant(address,address)", +"a074d5ee": "unClaimedEther()", +"a0759e14": "setEmontRewards(uint256,uint256)", +"a075e164": "setup(uint256,uint256,uint256,bool)", +"a076da7a": "notifyExecuteSellOrder(uint256,uint256)", +"a076e223": "Declaration()", +"a077321c": "restrictUntil()", +"a0775baf": "AUTBToken()", +"a0776a59": "getTokenSupply(string)", +"a07778ec": "icoBonus3EndDate()", +"a077b298": "restrictions()", +"a077c657": "giveRightVote(address)", +"a078f737": "hasUserRole(address,uint8)", +"a0790cb7": "setFreezed(address,bool)", +"a0796236": "rejectWithdrawal(address)", +"a07b206f": "totalWhiteListed()", +"a07b2461": "proveIt(address,string)", +"a07c132b": "setPrevOwner(address)", +"a07c4fcf": "getTapRemaining()", +"a07c765f": "END_TIMESTAMP()", +"a07c7ce4": "burnable()", +"a07c8ed9": "changeName(bytes,bytes)", +"a07c9156": "UpdateWhiteListImplementation(bool)", +"a07da887": "deploy(address,uint256,uint8,address,uint256[])", +"a07daa65": "newRequest(uint256)", +"a07ead73": "setColdWallet1(address)", +"a07f0a98": "DEFROST_AFTER_MONTHS()", +"a07f3a56": "isAttended(address)", +"a07f3bb0": "UpgradeableStandard23TokenMock(address,uint256,bytes32,bytes32,uint256)", +"a07f5f84": "beneficiary3()", +"a07f8f19": "isCrowdSaleFinished()", +"a07fc020": "moveToRST()", +"a080249b": "BonusPoolSupply()", +"a08038be": "setPreferredCurrency(bytes4)", +"a0807404": "setBZxOracle(address)", +"a080c8ba": "getLamboModel(uint256)", +"a081fc19": "deathData_f6()", +"a082022e": "Sell(address,address,uint256,uint256)", +"a0821be3": "availableBalance(address)", +"a0823111": "removeAffiliate(address,bytes32)", +"a08299f1": "divisionby0(uint256)", +"a082c86e": "DEADLINE()", +"a0831fdb": "BNBB(uint256,string,uint8,string)", +"a0836e28": "getaddressret(address,address)", +"a083cb48": "TokenBase(uint256,string,string)", +"a0844bb5": "_computeRarityBonus(uint256,uint256)", +"a0847a95": "updateRoundBalance(uint256)", +"a084af95": "Trust(address[],uint256,address,bytes)", +"a084ee76": "removeReturnAgent(address)", +"a0851928": "convert_valuation_to_art(uint256,uint256)", +"a0852bbd": "SynTokenAddress()", +"a0859845": "emitPreferredCurrencyChanged(address,bytes4)", +"a0876445": "artworkCount()", +"a0877304": "minSale()", +"a08783bf": "Moviecoin()", +"a087ac0c": "perDeadLine()", +"a087ae89": "calculatePeriodsCountAndNewTime(uint256,uint256)", +"a0893ef2": "releaseSupply()", +"a0895ec1": "LogUnfrozenTokens(string,address,uint256)", +"a089feea": "kill_switch()", +"a08aa298": "NewSupplyAdjuster(address)", +"a08b1447": "presaleAmountETH()", +"a08b3367": "EC()", +"a08c0908": "getFiatTransaction(string,uint256)", +"a08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", +"a08df770": "changeRecoveryFromRecovery(address)", +"a08e3f0e": "restTokensMoved()", +"a08e8b36": "totalFunctions()", +"a08ed1cb": "initUnstake()", +"a08f1b09": "getArrUintField2()", +"a08f8428": "BasicTokenWrapper(address)", +"a08fcabb": "setUint(bytes4,uint256)", +"a09037a9": "totalContracts()", +"a09107e1": "only6()", +"a0922e15": "calcTransferFee(uint256)", +"a0927a6a": "authorizedPayments(uint256)", +"a0929cda": "salvageTokensFromContract(address,address,uint256)", +"a092ae25": "getMyAllowance()", +"a094a031": "isReady()", +"a0954a49": "changeEarnings(uint256)", +"a09635b0": "_transferToICAP(uint256,bytes32,uint256,string,uint256)", +"a09686c4": "getRoundsCount()", +"a096ea1b": "bltRetainedAcc()", +"a0979332": "Bitcoineum()", +"a098a04b": "getRandomAnimalId()", +"a0996799": "getMyBulls()", +"a0997b66": "ROLE_RBAC_ADMIN()", +"a0999436": "ESOPAddress()", +"a099ad85": "workingState()", +"a099d079": "getEarlyIncomeByAddress(address)", +"a099e6be": "updateTokenExchangeRatio(uint256)", +"a09a05e0": "AllocateUnsoldTokens(address,address,uint256)", +"a09a1e22": "dealSellContract(uint256,string,uint256,uint256,string)", +"a09ae0aa": "absDiff(uint256,uint256)", +"a09b39ae": "WorldCup(string,string,uint256,uint256,string)", +"a09b7e2b": "totalPresaleBase()", +"a09cca93": "ownerTransferOwnership(address)", +"a09cec67": "_setData(uint256,uint256,uint256)", +"a09d4240": "UacCrowdsale(address,address,address,address,address,address,address,address[])", +"a09d4ae4": "returnTempTokens(address)", +"a09d9c09": "setTransferRate(address,int16)", +"a09ddd4f": "setSaleAgent(address,bool)", +"a09ddf4e": "getCurrentRgb(address)", +"a09de28d": "approveAndCall(address,uint256,bytes,address[],uint256[])", +"a09e3d0a": "getChildCount(bytes32)", +"a09e9c1d": "startBidding(uint256)", +"a09f6691": "LogGetMoneyBack(address,uint256,string)", +"a09f8659": "newConflictRes()", +"a09fb22e": "updateReputation(string,uint256,uint256,string,string,address)", +"a0a0d331": "COMPANY_WALLET()", +"a0a1082a": "createCustomVUP(address,uint256)", +"a0a2b573": "setTimestamp(uint256)", +"a0a2c11d": "ListValSince(uint256)", +"a0a2f629": "setReferralId(uint256,address)", +"a0a337e2": "getSetupFunctions()", +"a0a3ec6d": "getDividentsFromShare(uint256)", +"a0a4cb6c": "reveralSupply()", +"a0a4d9df": "batchTransferORSB(address[],uint256)", +"a0a4f93b": "setGasused(uint256)", +"a0a5cd92": "OkapiToken()", +"a0a695fe": "registerTier1Users(address[])", +"a0a6e940": "finalizePresale()", +"a0a7131c": "test_twoValidAssertFalse()", +"a0a7299b": "feeInBps()", +"a0a76eb0": "charactersOf(address)", +"a0a7dc2e": "withdraw_1Completed()", +"a0a7e0f8": "GameCellCoin(uint256,string,uint8,string)", +"a0a8045e": "getEthUsdPrice()", +"a0a86de3": "PreSaleTokenSoldout()", +"a0a8e460": "contractVersion()", +"a0a95502": "reading_card_count()", +"a0a986f1": "price0()", +"a0aaa87f": "secondStageMinted()", +"a0ab2847": "tfg()", +"a0ab308c": "BidAskX()", +"a0ab7091": "_isCooldownReady(uint256,uint256)", +"a0ab9653": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes,address,uint256)", +"a0abdba0": "allocatorAddress()", +"a0ac47fe": "_ethereumToTokens(uint256)", +"a0ac5776": "claimBooty(uint256)", +"a0acb9dd": "getA(string)", +"a0ad04c0": "changePhaseToICO()", +"a0ad51a6": "KNOW()", +"a0aead4d": "getAssetCount()", +"a0af0127": "world(uint256,uint256,uint256)", +"a0af3252": "thirdCurrentAmount()", +"a0afd731": "dividendBalance(address)", +"a0afebbc": "emitContractAdded(address,address)", +"a0affbfd": "upgradeHGT(address)", +"a0b06190": "addOneUserIntoWhiteList(address)", +"a0b091e4": "sellMFCoins(uint256)", +"a0b1b385": "playerSetInput(address,uint256)", +"a0b1f668": "GetRandom_In52(uint256)", +"a0b28861": "createAndBuyAllAmountBuyEth(address,address,address,uint256,address,uint256)", +"a0b2995a": "GetParticipantRole(address,address)", +"a0b2becb": "getLastAcceptedProposals()", +"a0b31d58": "addPacksToNextPremiumSale(uint32[])", +"a0b3bef0": "NVBToken(uint256)", +"a0b4388a": "activateShip(uint32)", +"a0b43a4e": "getWinnerPot()", +"a0b45df2": "transferOwnershipAndToken(address)", +"a0b498a4": "issuedTokens(address)", +"a0b55095": "allGames(uint256)", +"a0b5cf5f": "changeResolverAllowancesDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", +"a0b65332": "getProposalIdByIndex(uint256)", +"a0b70e87": "capTokens()", +"a0b76d49": "JToken()", +"a0b7967b": "getNextSequenceId()", +"a0b7dcb4": "_transferInternal(address,address,uint256,bytes,string)", +"a0b7ebbd": "isExistingPlayerInBattle(string,address)", +"a0b7f0f8": "updateContributorAddress(address,address)", +"a0b873f2": "updatePlatformFeePercentage(uint8)", +"a0b87d1e": "MuseumsChain()", +"a0b946f0": "calculateMatchWitnessHash(address[],uint256[])", +"a0b9e8d5": "getRaisedAmountOnEther()", +"a0b9f0e1": "checkPause()", +"a0bb233c": "changeFeeAndCheatWarrant(uint256,uint256)", +"a0bb7508": "_addSig(bytes32,address)", +"a0bc572b": "benefactor(uint256)", +"a0bcfc7f": "setBaseUri(string)", +"a0bd1ec1": "hodlerTransfer(address,uint256)", +"a0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", +"a0bdb04e": "tier1Start()", +"a0bdcd3a": "BCNewToken()", +"a0bde7e8": "getShareDistributionWithTimestamp(bytes32)", +"a0bde945": "buyCity(uint16)", +"a0be06f9": "adminFee()", +"a0be2d9d": "Inco(address)", +"a0bee465": "BrylliteToken(address,uint256)", +"a0befa94": "getStake(uint256,uint256)", +"a0bf0539": "_checkThreshold()", +"a0bf775f": "canTransferBefore(address)", +"a0c01e58": "divForPrice()", +"a0c07002": "ArcBlockToken()", +"a0c16fb6": "HuobiPoolToken()", +"a0c1ca34": "migrateIn(address,uint256)", +"a0c1e119": "unhaltFundraising()", +"a0c32df7": "TRMToken(address,string,string,uint256,uint256)", +"a0c354ea": "getSumAmountOfOpenDeals()", +"a0c3bc68": "setOverflowBounds(uint256,uint256)", +"a0c42ed1": "getPOOL_edit_12()", +"a0c567a2": "blackListActive()", +"a0c57eb4": "checkCrowdsaleState()", +"a0c642bd": "multisendFrom(address,address,address[],uint256[])", +"a0c66283": "ZEROCoin()", +"a0c66b43": "maxActiveCastle()", +"a0c6e65e": "getResourceBalance(uint16,address)", +"a0c73e7c": "HDAToken(uint256,string,string)", +"a0c86718": "assetOwnersIndexes()", +"a0c8ad10": "removeAuthorizedExternal(address,address)", +"a0c8c156": "emptyCart()", +"a0c8e0ff": "testCanSendEthToContractWhenCrowdsaleInProgress()", +"a0c95e24": "disableBuyingTime()", +"a0c96e43": "getCommissionTarget()", +"a0c97bce": "paySeller()", +"a0c99c51": "paymentInfo(address,string)", +"a0ca0a57": "backlogLength()", +"a0cce3d2": "getAssetIdCreator(uint256)", +"a0cde1f0": "finishCrowdCoin()", +"a0ce4ff8": "priya()", +"a0ce8a0e": "SingleSourceAuthority()", +"a0cecb3b": "findOutInterestByBank(uint256,uint256,uint256)", +"a0cf01d4": "MoneroGold()", +"a0cf17da": "amountFunded(bytes32,string,address)", +"a0cf8857": "setTransferFeeAbs(uint256)", +"a0cfbc1b": "getDeploytimeBlocktimeBlocknumber()", +"a0cfc196": "getNumWineryOperation(bytes32)", +"a0d045bc": "AppleToken()", +"a0d0b13d": "addBook(string,string,string,string)", +"a0d0be4f": "calculateValue(uint256,uint8)", +"a0d0ee3b": "buildTokenContract()", +"a0d121a9": "addPolicy(uint256,uint256)", +"a0d1de29": "sendSeedAndHash(bytes32,bytes32)", +"a0d1f9e9": "serviceIncreaseBalance(address,uint256)", +"a0d3253f": "spawn(uint32,address)", +"a0d39949": "_rewardUnnapprovers(address)", +"a0d46c87": "validateRequestParams(address[3],address,uint256[12],uint256,uint256)", +"a0d578f4": "isServerEnable(string)", +"a0d605c6": "addCertificationDocumentInternal(address,bytes32)", +"a0d63f7e": "setDistributionMinimum(uint16)", +"a0d7bb1b": "addReserve(address,bool)", +"a0d80e65": "internalNoter(uint256,uint256)", +"a0d81b21": "ConsentFile(address)", +"a0d87fc2": "burnFromOwner(address,uint256)", +"a0d8848c": "getTicketStartPrice()", +"a0d8ad85": "_updatePayment(uint256,address,uint256)", +"a0d8b4bd": "changePresaleDiscountPercentage(uint8)", +"a0d8b4e9": "ownerMintRate()", +"a0d8e231": "SmartpoolVersion()", +"a0d9669c": "test_invalidAddressNotZero()", +"a0da3236": "ActionMining(address,uint16)", +"a0da7d2e": "addressLocked(address)", +"a0db0a22": "right4(uint256)", +"a0db844f": "F2UPAY()", +"a0dbd8d6": "startBlockNumber_()", +"a0dbde9d": "logBase2(uint256,uint256,uint256)", +"a0dc6b74": "emergencyPay()", +"a0dce445": "nothingLib()", +"a0dd678b": "VCFToken()", +"a0ddb418": "currentKey()", +"a0dde02a": "AftabCoin()", +"a0df9538": "walletOwnerAddress()", +"a0dfc61f": "DICE_LOWER()", +"a0e06c8a": "weekPotHighscore()", +"a0e0c317": "getTradeOfferRecipient(uint256)", +"a0e1001e": "IiinoCoin(string,string,uint8,uint256,int256,uint256)", +"a0e16fed": "getFinalizationTime()", +"a0e1f42c": "addPurchaser(address)", +"a0e23ebd": "openAt()", +"a0e2abf7": "getFirstActiveGamble()", +"a0e4d7d4": "getManifestIdsByName(address,bytes32)", +"a0e5588a": "paymentAction(uint256,address,uint256)", +"a0e5bb69": "setPI_edit_17(string)", +"a0e5e821": "recordDealCancelReason(uint256,address,uint32,uint32,uint256,string)", +"a0e67e2b": "getOwners()", +"a0e6a44b": "getCustomerTxPaymentMCW(address,bytes32)", +"a0e7192e": "requestEthereumLastMarket(string,string)", +"a0e724d3": "ReserveKnown(bool,address,uint256,uint256)", +"a0e7b4dc": "lastAmountSent()", +"a0e8b6b0": "the_address_for_option_A()", +"a0e8d21f": "join(address,string,string,uint256)", +"a0e8ef3d": "SetUSDPerETH_byContract(uint256)", +"a0ea0ef9": "constructionStart()", +"a0ea83dd": "SetSummRew(uint256)", +"a0eaa5dd": "lastTokenIsTransferableNumber(address)", +"a0eb5dd1": "AIRDROP_TOKENS()", +"a0ec4e09": "getUltimateOutcomes(bytes32[])", +"a0ec7f89": "transferPresaleTokens()", +"a0ed4cff": "MiniMeToken(address,address,uint256,string,uint8,string,bool)", +"a0ed6707": "EtopayNetwork()", +"a0eda9f2": "_transferFee(address,uint256,string)", +"a0edc204": "noOfPhases()", +"a0edc671": "USDtoHAV(uint256)", +"a0edcd7a": "burnPercentage100m()", +"a0ee153e": "isOwnerOrApproved(uint256,address)", +"a0ef8647": "BlueToken()", +"a0ef91df": "withdrawEth()", +"a0efe255": "m_categoriesCount()", +"a0f029fc": "ContractorInterface(address,address,address)", +"a0f04c38": "getKittyPower(uint256)", +"a0f0e95f": "DDJBTC()", +"a0f15b87": "registryICAP()", +"a0f1665b": "PriceSet(uint256,uint256)", +"a0f1ba62": "isOpenDistributionSetup()", +"a0f24ea7": "getTotalTokens(uint256,uint256)", +"a0f4a9a9": "Challenge()", +"a0f4d3df": "getRandomForContract(uint256,uint256)", +"a0f52da0": "startMigration(address)", +"a0f561ca": "ExtractDepositTime(address)", +"a0f61310": "FakeRelay(bytes)", +"a0f72985": "PassToken()", +"a0f78572": "Leaderboard()", +"a0f7bbcd": "sendTokensToAdvisors(address)", +"a0f82817": "Max()", +"a0f8be8c": "startOf(uint8)", +"a0fa0fb4": "ConstructorTest(uint256,uint256)", +"a0fa930a": "Ethercoin()", +"a0faf6a1": "getPortion(uint256,uint256,address)", +"a0fb1497": "deleteDocument(uint256)", +"a0fb7f57": "GMET()", +"a0fc4994": "setX(int256)", +"a0fcd161": "depositToken(uint256,bytes32,uint256)", +"a0fe6202": "SHA256(string)", +"a0ff1705": "depositTokenFunction(address,uint256,address)", +"a0ffe7bb": "registerInNewMarketplace()", +"a0fffd5f": "rand(uint32,uint256)", +"a1007e68": "TokenAmountToPay()", +"a10132ad": "callbackGas()", +"a1013abb": "TOKENS_DISTRIBUTED()", +"a1017649": "updateWalletLock()", +"a101c2d3": "time_out()", +"a101f7cd": "bountyFee()", +"a1022294": "Guess(string)", +"a1029aff": "findTile(uint16,uint16,uint16)", +"a102e8a5": "addMeterpoint(int256,address,int256)", +"a103983c": "BitShopperToken()", +"a1049c06": "Zolox()", +"a104dcd4": "changeUpgradeAgent(address)", +"a104e5e1": "recordNewOwner(uint256,address)", +"a1057852": "addToken(address,uint256,string,string,string,string)", +"a106320a": "icoFinalized()", +"a1063d20": "addIntermediateAddress(address)", +"a106832b": "disableInitialAmbassadorStage()", +"a106dbc8": "participantsFor1stSale(address)", +"a106f0bf": "bonusAmtThreshold()", +"a107994e": "test_validProxyOwnershipTransfer()", +"a107ceb6": "affiliateUtility()", +"a10874d9": "SquirrelGims()", +"a1088571": "CEO()", +"a10889fa": "setVersion(uint32,uint32,uint32,string,string)", +"a10954fe": "reserveBalance()", +"a109a089": "addWalletAddress(address)", +"a109b8bd": "feesCal(address,uint256)", +"a10a7782": "defaultReputationReward()", +"a10b10f5": "setFriendsFingersWalletForCrowdsale(address,address)", +"a10b3ffd": "ALLOC_PARTNER()", +"a10bee85": "_transferFromWithReference(address,address,uint256,string)", +"a10c0fd5": "ROLE_MULTIOWNER()", +"a10c44fb": "s18(bytes1)", +"a10cda99": "isWhiteListed(address,address)", +"a10d4f56": "updateCaps(uint256[])", +"a10d6a51": "officialTelegram()", +"a10d80de": "quitBattle(uint256)", +"a10daf4b": "GroupMultiplier(uint256,uint256)", +"a10e057c": "preIcoMinimumWei()", +"a10e6d28": "arbitrationFeePerJuror()", +"a10ec6e5": "initialize(address[4],address,uint256[12],uint256,bytes)", +"a10edc55": "GeneralPurposeProfitSplitter()", +"a10ef122": "WWWToken()", +"a10f0f5a": "addField(string,uint256)", +"a10f42c4": "isICOEnded()", +"a10f43a3": "bountyReward()", +"a10f5610": "authoriseAddress(address)", +"a10fc32f": "setInstantTransfer(bool)", +"a110063a": "createGOP(address,string)", +"a1103f37": "attrUUID(address,uint256)", +"a110d350": "finalPot()", +"a1119bf2": "bountyFeeCount()", +"a111b0da": "InternationalTourismCoin(uint256,string,uint8,string)", +"a111bab9": "totalLockAmount()", +"a11223da": "airdropTokens(address[],uint256)", +"a1130d04": "createTemplateAndAskQuestion(string,string,address,uint32,uint32,uint256)", +"a1131e14": "withdrawSale3()", +"a113bf2c": "ZITOKEN()", +"a114b5ae": "_createZodiac(uint256,uint256,uint256,uint256,address,uint256)", +"a1155286": "deleteOrg(string)", +"a1155f5c": "buyBlockCDN()", +"a1158c43": "commissionCheck(uint256[],uint256[],uint256[],uint256)", +"a1159838": "removeFreeze(address)", +"a115e38f": "VirtueToken()", +"a11674b0": "divsOf(address)", +"a1169d72": "_payChain(uint256,address,uint256)", +"a11748fd": "ReceiveGBP(address,uint256)", +"a1183d50": "FixedSupplyToken()", +"a1188e56": "getCurrentDifficulty()", +"a118babd": "withdrawPayment()", +"a118ca27": "validateStep(uint256[],uint256[])", +"a118f249": "addAccess(address)", +"a1190a36": "withdrawOtherTokens(address)", +"a11976f6": "confirmTransactionAfterDisputeFee(uint256)", +"a119a65a": "gettodayget()", +"a11aab78": "createGame(uint256[],uint256[],uint256,uint256)", +"a11ab71a": "fundsToCommunity(uint256)", +"a11bab06": "GChain(uint256,string,uint8,string)", +"a11df9c7": "PlanetZeroToken()", +"a11e1645": "registrationRights(address)", +"a11e22d9": "toDate(uint256)", +"a11e7f5e": "get_iconiq_presale_open()", +"a11ed157": "setBirthFee(uint256)", +"a11f8de4": "FomoToken()", +"a1206d4e": "setUserContract(address)", +"a1207708": "confirmDividends()", +"a120fdbd": "dayTokenAddress()", +"a1210a69": "endIcoDate()", +"a1211bc0": "finalizeCampaign()", +"a121d8df": "testFailCreateWithParentSameItemId()", +"a122e060": "rateForPhase3()", +"a12301f5": "promethCount()", +"a1232723": "playerPrizes()", +"a123422e": "_setContributor(address,uint256)", +"a12396aa": "setName(uint256,bytes32)", +"a123c33e": "owner(uint256)", +"a12412f0": "CAT_PER_ETH_BASE_RATE()", +"a12433fa": "getLastAttack(uint256)", +"a1243ad3": "mintPartners(uint256)", +"a12498dd": "ownerEnablePayee(address)", +"a125c824": "setDefaultTokenURI(string)", +"a1264994": "setfounderAddress(address)", +"a126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", +"a126d601": "closePosition(uint256)", +"a127cfb6": "LogRequestAccepted(address)", +"a12842cc": "sellMyTokens(uint8)", +"a1291f7f": "ownerTransfer(address,address,uint256)", +"a1298368": "stringEqual(string,string)", +"a129cb94": "summPremineBounty()", +"a129ecda": "SetdivForSellBack(uint256)", +"a12a52dc": "allOwners()", +"a12a6bb0": "KYC()", +"a12c2564": "preEndTime()", +"a12c7dd8": "presaleContribute(address,uint256)", +"a12cad70": "getPayer(bytes32)", +"a12d2de3": "withDrawToPoolOwnerFee(uint256)", +"a12d7e2c": "WubCoin()", +"a12da89f": "Deviser()", +"a12e429c": "getDiscipleNum()", +"a12e55d9": "rollIt()", +"a12e9670": "setMaxETHContribution(uint256)", +"a12ee7ba": "changeMaintainer(address)", +"a12f69e0": "divides(uint256,uint256)", +"a1315b7e": "createPricing()", +"a132a785": "removeOwner(address,bool,bytes)", +"a132aad1": "startPresale(uint256)", +"a132ab82": "startAirdropTime()", +"a132e336": "changeDeedPrice(uint256,uint256)", +"a1338118": "increaseAllowance(address,uint64)", +"a1344589": "vestedTo(address,address)", +"a1347622": "t_Michail2()", +"a1350c00": "migratePropertyOwnership(uint16[10])", +"a13615a5": "desposeBear(address)", +"a1365fda": "dev_streamsLength()", +"a136aadc": "getMinerHashRate(uint256)", +"a136c448": "updateTokenSellingPrice(uint256,uint256)", +"a1391297": "ETH_CLEAR()", +"a139dee2": "_deleteHybridization(uint256)", +"a13a7cee": "createChildren(uint32,uint32)", +"a13ae1ee": "updateTokens(address,int256)", +"a13c24c7": "BithubCommunityToken()", +"a13c58f7": "logCoinAgeRecord(address,address,uint256)", +"a13d2733": "updatePatientHealthData(string,string,uint256)", +"a13d3832": "deactivateTokenSwitch()", +"a13d8ec4": "generateFinished()", +"a13e3351": "transferRefPercents(uint256,address)", +"a13f9e58": "RESERVATION_CAP()", +"a1405522": "MilkCow(address)", +"a140a687": "localsService()", +"a140e4ee": "getDropNotices()", +"a140e79c": "setMinimumDebatePeriod(uint256)", +"a1410994": "intelligentmasschainToken()", +"a141ce6a": "packageOfferInfo(address,uint256)", +"a142040b": "Dil()", +"a142d608": "escapeHatch(address)", +"a1446287": "LKYToken(uint256,string,string)", +"a1448fa7": "secondRewardPeriodPercent()", +"a144a3e0": "whitelistTransferFrom(address,address,uint256)", +"a1450c8a": "XDRAC()", +"a1454830": "getExpirationTime(bytes32)", +"a145492a": "transferToPartnerAccount(address,uint256)", +"a145636b": "artworkIndex(uint256)", +"a14598e6": "changeBonusPercentage(uint256)", +"a14779c9": "airdropWallet()", +"a1490581": "Deal(address,uint256)", +"a1490d50": "getTradeHash(address,uint256,address,uint256,uint256)", +"a14977d5": "getCustomerTxCount(address)", +"a1498f50": "check_result()", +"a14a5648": "bonus02Start()", +"a14b877b": "refundEverybody()", +"a14c1c4f": "setSTO(address,uint256,uint256,uint8)", +"a14c36ce": "dGetPool(uint8,uint8)", +"a14c9bed": "resetCurrentIdTo(uint256)", +"a14cf394": "generateInitialCard(uint16)", +"a14d191c": "PausePublic(bool)", +"a14d427a": "transferBonusToken(address,uint256)", +"a14d6517": "tweetIt(string)", +"a14e0e4e": "runInit()", +"a14e88fe": "firstTokenCap()", +"a14ea9c0": "selfRegisterDIN()", +"a14eaada": "tipCreator()", +"a14fc1e7": "aDropedThisWeek()", +"a14ff857": "setBytes32(bytes32,bytes32,bytes32)", +"a150be7a": "distributionPreIcoCount()", +"a152479c": "_computeNextCommissionerPrice(uint128)", +"a152b23e": "UKW()", +"a15348fa": "TitleRegistry()", +"a1536211": "AtacToken()", +"a153b399": "ZeePinToken(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a15404b7": "createUnicornPrice()", +"a15454ba": "payTransactionFee(uint256)", +"a154aa36": "getTotalGoals()", +"a154ce82": "disableContract(address)", +"a155beb8": "buyerDatabase(address,uint256)", +"a156ce7b": "totalReimbursedWei()", +"a157696b": "setWhitelistedOnly(bool)", +"a1578d53": "EventBuyTank(address,uint32,uint32)", +"a157979c": "netOutcomeTokensSold(uint256)", +"a1580f1a": "damage()", +"a1581821": "transferWholeTokens(address,uint256)", +"a158e377": "statusICO()", +"a158e632": "lastLapId()", +"a1594d21": "DividendClaimed(uint256,address,uint256)", +"a159c548": "amountOfTokensPoolC()", +"a159c937": "getReferencePriceInfo(address,address)", +"a15a2289": "GameNumber()", +"a15a8613": "VoteCountPerProcess()", +"a15a9a15": "Presenca()", +"a15afb48": "Replicator()", +"a15b4d2d": "getAllCardByAddress(address,address)", +"a15b53ad": "pre_minContribution()", +"a15b9769": "addRandomClass(uint32)", +"a15bb363": "createBoardHash(bytes32,address)", +"a15c1788": "checkForLog(string)", +"a15cdbf7": "moveERC20Tokens(address,address,uint256)", +"a15d59ce": "totalVestedBalance()", +"a15db1c5": "_validateTokensAmount(uint256)", +"a15e3919": "getCrowdsaleUniqueBuyers(address,bytes32)", +"a16085ce": "the_address_for_option_D()", +"a16094d1": "burnMarketMakerApproval()", +"a160bdf5": "expiration(bytes12)", +"a1616429": "testBitOrSuccess()", +"a1616c92": "hasFreelancerMinRatingsCount(address,address,uint256)", +"a16249e2": "__min__(uint256,uint256)", +"a162a71f": "addToOwnerlist(address)", +"a162c04c": "buyTicketsFor(address)", +"a1636db0": "stepThree(int256)", +"a16383e2": "getTrustedTransferAttotokensValue()", +"a1639c6b": "customerConsents(address)", +"a163a624": "Test()", +"a163c090": "maxArtworks()", +"a164845a": "TheImmortalsPhoto(string,string,address,address)", +"a1654379": "isAllowed(address,address)", +"a1658fad": "canPerform(address,bytes32,uint256[])", +"a1659822": "UncursedToken()", +"a16618ae": "updateClientVersion()", +"a1663c48": "MIN_PRE_FUNDING_GOAL()", +"a1664ae2": "icoStartTimestampStage1()", +"a166b4b1": "addParticipant(address[])", +"a1672717": "getMinContributionInWei()", +"a1687d31": "isPlayer1sTurn()", +"a168d873": "gameAddress()", +"a1696076": "CCH_EDIT_3()", +"a1698315": "setExtraTokensWallet(address)", +"a169ce09": "boom()", +"a16a3179": "multiTransfer(address[],uint256)", +"a16bed3a": "changeTradeFee(uint256)", +"a16c6a73": "setClaim(uint256,uint256)", +"a16c86f7": "withdrawRefund(address)", +"a16cdbb1": "maxLockDuration()", +"a16d5960": "setPartner(address)", +"a16e5326": "CryptoSagaCorrectedHeroStats(address)", +"a16f3774": "getReservedTokens()", +"a16fa142": "generate_token_for(address,uint256)", +"a1702265": "keyEmployeesAllocation()", +"a17042cc": "getMsgValue()", +"a17177a1": "marketingTokensDistributed()", +"a171b694": "RefundIssued(address,uint256)", +"a172045d": "PUSH1()", +"a172db06": "portalAddress()", +"a1731366": "withdraw_to_reward_contract()", +"a173ba2f": "deathData_v2()", +"a1741d0f": "checkLiquidationValue(uint256)", +"a1743410": "_refundExceededValue(uint256,uint256)", +"a1744812": "setMaxCoordinate(uint16)", +"a174a8e9": "addNewColor(string)", +"a174c4c6": "mintAmount5()", +"a176d7c9": "createAndTransfer(address,uint256)", +"a176f6bc": "freezeTimeOf(address)", +"a1775db5": "isContract(address,address)", +"a1779a3d": "getFieldData(uint256)", +"a1784139": "updateChildMinLogos(address,uint256)", +"a1786803": "getCreationCost()", +"a1786d1b": "changeMessage(uint256,string)", +"a1787880": "createCustomToken(string,string,uint8)", +"a17a2685": "canUpdate()", +"a17a9e66": "A(uint256)", +"a17b229d": "total_fund()", +"a17ca853": "round(uint256,uint256)", +"a17cc7eb": "storedData(address)", +"a17d4228": "SingleApproval()", +"a17d5f44": "initializeWhitelist(address)", +"a17d713a": "stringToUint32(string)", +"a17dd26c": "buyWithReferral(address)", +"a17de881": "DigitalIntelligentToken()", +"a17e463c": "NbtToken()", +"a17ea25b": "getAppChainCode(uint32)", +"a17eb09f": "ExtraHolderContract(address,address[],uint256[])", +"a17ecf9e": "kill(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", +"a17eee56": "setGasRefundForClaimLoot(uint256)", +"a17f0bbd": "ICO_BONUS_TIME_3()", +"a17fa5f2": "fillRandomCars(uint256[],uint256)", +"a17feadb": "airdropAmounts(address[],uint256[])", +"a1804e67": "buyWithBalance(uint256,uint256,uint256)", +"a181b040": "SlammerTime(address)", +"a18232e8": "estimateTokenNumber(uint256)", +"a1826a9a": "CMK()", +"a182da60": "crowdSupply()", +"a1837d21": "ChangeBonus(uint256)", +"a183e9a5": "ErrorMessage(string)", +"a18473c2": "RequestCurrencyContractInterface(address,address,address)", +"a1848b61": "someMethod(uint256)", +"a1857f4a": "OTHERCRUISER_MAX_CARGO()", +"a1865376": "changePrice(uint256[],uint256)", +"a186e120": "setTokenTransferState(bool)", +"a18717a9": "addressToPass(address,bool)", +"a1883d26": "setTaxAddress(address)", +"a1885d9b": "whitelistWeiRaised()", +"a18861a3": "getHistoryCount()", +"a1888c34": "setGamblingFee(uint256,uint256)", +"a188b8fd": "accountAddressForSponseeAddress()", +"a188fcb8": "orderDepth(bytes32)", +"a189a487": "status(uint8)", +"a18a186b": "getCurrentOwner()", +"a18a2092": "changeTokenHolder(address)", +"a18a7bfc": "setReferrer(address)", +"a18bf6e9": "addFundAccount(address)", +"a18c1ab0": "burnToAddr()", +"a18c751e": "set(bytes,bytes)", +"a18ccc8a": "transferToWallet(uint256)", +"a18cd06c": "distribute(address,address)", +"a18dda19": "releasePayment(bytes32,address,uint256,address,uint256,uint256,address)", +"a18e0ce4": "addBorrowingItem(address,uint256,uint256,address,bool,uint256,uint256)", +"a18e133e": "registered_racers()", +"a18e2eb9": "left69(uint256)", +"a18ef171": "ALLN()", +"a18f43ef": "hasForfeitedBatch(address,uint8)", +"a18f7567": "Thecap()", +"a18f9b11": "drawWinners(uint256,uint256,uint256)", +"a1900c22": "takeTokenProfits(address)", +"a1903737": "addressOfTokenUsedAsReward5()", +"a1903eab": "submit(address)", +"a190500a": "tokenSecondPeriodPrice()", +"a1907386": "debugLatestPurchaseCentsValue()", +"a1920586": "offer(uint256,uint256)", +"a1920f36": "reservingStep()", +"a192274d": "initializeBread(uint256,string)", +"a192a425": "Founder1()", +"a192fdba": "bonusEnds10()", +"a1931ff9": "tryAnotherOne()", +"a1943113": "devWithdrawn()", +"a1945458": "getIdentityInfo()", +"a1960d80": "deferredKyc()", +"a19638e6": "betsCountToUseFreeBet()", +"a196593c": "findTenAmUtc(uint256)", +"a1965dca": "move(uint8,bytes,uint8,bytes32,bytes32)", +"a196981b": "withdrawCrowdsaleDragons()", +"a196bea0": "isDirectDebitEnable()", +"a1972fc4": "updateDividends(address)", +"a1975c38": "Token77G(address,address,address,uint256)", +"a197c042": "checkCustomer(address)", +"a197ec5d": "excessTokensBurnt()", +"a1988458": "readGlobalPurchasedToday()", +"a198a418": "LKLZ()", +"a1992419": "createCandidateOnElection(uint256,address,address,string)", +"a19b5493": "successed()", +"a19b8766": "transferTEST(address,uint256)", +"a19beba9": "addCompanion(address)", +"a19c1f01": "burnRemainder(uint256)", +"a19c406a": "newIdTankWeapon()", +"a19c9cd1": "getEthfromUSD()", +"a19cb5ee": "addHash()", +"a19db682": "defaultFoundersRewardTime()", +"a19e1d00": "bonusInPreSalePhase1()", +"a19e29a9": "claimUnsold(uint256)", +"a19ed39d": "finalizeFunding()", +"a19ee7a3": "changeMinMakerBetFund(uint256)", +"a19fab4c": "setWhitelisted(address,uint256)", +"a1a04486": "monthLength()", +"a1a0ee90": "LogPolicyApplied(uint256,address,bytes32,uint256)", +"a1a17ec3": "rentSign(uint256)", +"a1a1efe7": "addBallot(bytes32,bytes32,address)", +"a1a200c5": "getRankList()", +"a1a3e4c7": "UserIDChanged(address,bytes32)", +"a1a49a09": "unlockTimes(address,uint256)", +"a1a59f52": "_renew()", +"a1a5d118": "deployNetwork(address)", +"a1a66e56": "deductFunds(uint256)", +"a1a6d5fc": "transfer_(address,address,uint256)", +"a1a71a20": "buyCommon(address,uint256,uint256)", +"a1a71a83": "checkUsernameVerified(bytes32)", +"a1a7405a": "destTokensSgt()", +"a1a74aae": "removeMember(uint256)", +"a1a79f64": "_winAmount(uint128,uint16,uint16,bool)", +"a1a7e68b": "mintTreasuryTokens()", +"a1a85253": "ReturnBack()", +"a1a887b8": "isUserExists(address,address)", +"a1aab33f": "weight()", +"a1aad09d": "setBondPrice(uint256,uint256)", +"a1ab46d0": "DepositReceived(uint256)", +"a1ac727f": "airdrop(address,address[],uint256)", +"a1ac8c56": "balanceOfOwnerAndCreator(address,address)", +"a1acd4b2": "AWD_SHARE()", +"a1acf069": "ArtChainToken()", +"a1ad2b99": "removeExchangeAccounts(address,address)", +"a1ad54e6": "holdingToken()", +"a1ad7cef": "tokenBurned()", +"a1adbb25": "addCandidate(bytes32,bytes32)", +"a1add510": "hasRelation(bytes32,bytes32,address)", +"a1aeb1c2": "paybackToOwner(address,uint256)", +"a1aec173": "COLOR_SILVER()", +"a1af90ad": "funcalls()", +"a1afaa19": "previligedUnLock(address,uint256)", +"a1b0f3a0": "userChallenge(uint256)", +"a1b140b6": "getDistributionStatus()", +"a1b162a8": "set_timeframes(uint256,uint256)", +"a1b16e5c": "returnAgents(address)", +"a1b1cb43": "hasAccess(address,uint8)", +"a1b1e507": "addMintingFactory(address)", +"a1b22154": "preemption()", +"a1b22c19": "delExcluded(address)", +"a1b235af": "popLanguage()", +"a1b258c1": "firstWeekBonus()", +"a1b289dd": "TulipToken()", +"a1b2acc1": "cancelApproval()", +"a1b35c79": "getSection(bytes32)", +"a1b39c38": "_removeMarkets(uint256)", +"a1b3ef4b": "flightDone()", +"a1b40946": "getWordIndex(string)", +"a1b4dd2d": "DXBCToken(address)", +"a1b4f57c": "joinBattle(string)", +"a1b5b581": "ymtest(uint256)", +"a1b608c9": "setMainPoolCutPercentage(uint256)", +"a1b64c86": "TokenMock(string,address)", +"a1b6b1b5": "updateUnlockData(address,address,uint256,bytes32)", +"a1b6d4ae": "REPLACES()", +"a1b77835": "getRefPercentsByIndex(uint256)", +"a1b7887f": "logShareTokenBurned(address,address,uint256)", +"a1b7ae62": "setdirectorName(string)", +"a1b7ffb2": "_checkRequireERC20(address,uint256,bool,uint256)", +"a1b86605": "getHourglassBalance()", +"a1b8c40f": "lastDepositIndex()", +"a1b94c0b": "timeOfWin()", +"a1b9af31": "unlockBets()", +"a1b9cb8f": "getTitulaire_Compte_6()", +"a1b9e03f": "Unagold(address)", +"a1ba0331": "CoinTroops()", +"a1ba444d": "createOrder(uint256,uint256,uint256)", +"a1ba7554": "fibokenUsedCount()", +"a1bb6220": "halting()", +"a1bb7828": "make_transfer(address,uint256,uint256,bytes32)", +"a1bba310": "DonationDoubled(address,uint256)", +"a1bc13ad": "forgeItems(uint256,uint256,address)", +"a1bc76d1": "extendPRETDE(uint256)", +"a1bc7a8f": "sha3_512()", +"a1bd55c2": "TimeDecayingToken(address,uint256,string,uint8,string)", +"a1bda122": "returnInt16(int16)", +"a1bdd146": "setEndorsement(address,uint256,uint256)", +"a1be79a0": "equipUp(uint256[6])", +"a1bed0be": "GOAL()", +"a1bf8a9d": "endICO_w1()", +"a1bffefa": "emitCancelled()", +"a1c0539d": "scheduleCall(address,bytes4,bytes)", +"a1c14350": "getUpdateMarketPhaseCalled()", +"a1c1519a": "calcNewSkinAppearance(uint128,uint128)", +"a1c15f56": "CipherPlay(address,address)", +"a1c29db6": "MAX_FUNDING_AMOUNT()", +"a1c2f644": "address4()", +"a1c308d0": "ProspectorsGoldToken()", +"a1c448f1": "kingdomCreationFeeWei()", +"a1c4774b": "getCostToKick()", +"a1c4db02": "eth_meth()", +"a1c51915": "getB()", +"a1c68880": "final_share_price()", +"a1c6d088": "airDropTokenDestroy()", +"a1c80cea": "getUriCount(address)", +"a1c8ca7e": "removeClaim(address,bytes32)", +"a1c90a11": "updatePlayersCoinByPurchase(address,uint256)", +"a1c91040": "requestEvidence()", +"a1c93169": "DividendClaimed(address,uint256,uint256)", +"a1c934b6": "TestNetworkToken()", +"a1c95ac2": "GSIToken(uint256,string,uint8,string,address)", +"a1c9d235": "minimumElectionQuorum()", +"a1ca00c0": "ELIXAddressSetter()", +"a1ca70f4": "totalDiv()", +"a1ca8f8d": "LTRToken()", +"a1cb31b7": "_state()", +"a1cbae6c": "communityTokens2()", +"a1ccc49c": "addDataPatternVoteRules(uint256,uint256,bytes,bytes,uint256[5])", +"a1cd150d": "_calculateFee(uint256)", +"a1ce5ba7": "getIncentiveNum()", +"a1ce7e03": "openOrder(uint64,bytes,bytes32)", +"a1cea675": "cryptaurRewards()", +"a1ceb253": "mintAdvisorsTokens(uint256)", +"a1ceb359": "CryptoStrategiesIntelligence()", +"a1d0846c": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a1d0a48f": "addCurrency(string)", +"a1d0ab04": "allocateContributorsToken()", +"a1d10d11": "StoneLog(uint256,uint256)", +"a1d20653": "setVersion(bytes32,string)", +"a1d25205": "lowEth()", +"a1d27925": "personalContract()", +"a1d280d3": "releaseValue1()", +"a1d3612c": "DKS()", +"a1d36cb0": "checkClaimEntitlementofWallet(address,address)", +"a1d48aa8": "PaymentChannel(address,address,uint256)", +"a1d4c7ce": "_emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", +"a1d4c820": "Signum()", +"a1d53160": "Capital()", +"a1d5b36e": "calculateTxHash()", +"a1d61b07": "dateTier4()", +"a1d707a3": "setReleaseCar(uint256,bool)", +"a1d7d1dd": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[])", +"a1d7ecbb": "updateShareETH(address)", +"a1d82cfd": "EBANK()", +"a1d86608": "_claimedSurroundingTiles(uint256)", +"a1d915b8": "ClaimTokens()", +"a1d91ee0": "technologyContract()", +"a1da2fb9": "retrieveDAOReward(bool)", +"a1da32be": "Shopiblock()", +"a1dab23e": "sellFloor()", +"a1dabfb2": "OAIToken(address,address)", +"a1db9782": "withdrawERC20(address,uint256)", +"a1dc139d": "setSigner(address,address,bool)", +"a1ddcd2d": "USDCX()", +"a1dddf70": "registerEthHandle(bytes32,address)", +"a1dea137": "checkBlacklist(address,address)", +"a1df7eb3": "YBKToken(string,string,uint256,uint256,string)", +"a1dfe545": "logShareTokenMinted(address,address,uint256)", +"a1e03f57": "ratePerWeiInSelfDrop()", +"a1e04406": "preSale4Finished()", +"a1e0c2c9": "winnerCounter()", +"a1e15c33": "canuseOf(address)", +"a1e3b16d": "Crypseum()", +"a1e3c008": "mainSendTTC()", +"a1e4cb30": "investorsTotalSupply()", +"a1e4d3c2": "MembershipRoster()", +"a1e4eaf1": "updateUserBalance(uint256,bool,uint256,uint256,uint256,address,address)", +"a1e4f73d": "construct(bytes32,string,bytes32,address,uint128,uint256)", +"a1e51a79": "emitDestruction(uint256)", +"a1e564b1": "CashOut()", +"a1e59471": "HashBux()", +"a1e66038": "getTrusteeTable()", +"a1e6a255": "nextUserId()", +"a1e7e21c": "crowdsaleBurnAmount()", +"a1e89aec": "saleCount()", +"a1e8a780": "getAdPriceMultiple()", +"a1e93b63": "withdrawTipBalance(uint256,address,uint256)", +"a1e95792": "eatUnicornsAlive(uint256)", +"a1ea00bc": "isUserTakerFeeEnabled(address,uint256)", +"a1eb0bae": "eliminarjugador(uint256)", +"a1eb84b0": "transferOwnedOwnership(address,address)", +"a1ecb43c": "incrementLimitTeam()", +"a1ee7855": "ATT()", +"a1ee8c78": "issueToken()", +"a1ef9b8f": "reallocate(address,address,address,uint256)", +"a1f1aa66": "cancelVoteInternal(bytes32,address)", +"a1f1de65": "getPrizeAmount(uint256)", +"a1f24b3d": "getAssetDetails(uint256)", +"a1f36a78": "EROSCOIN()", +"a1f43f40": "UNICToken()", +"a1f4b9c8": "updatePlayerGen(address,uint256)", +"a1f54adf": "nextPremiumSale()", +"a1f56b0a": "getRollOutput(uint256,uint8,uint8,uint256,address)", +"a1f7f269": "_breedWith(uint256,uint256)", +"a1f841d7": "unlockFund()", +"a1f8adac": "investorList()", +"a1f8ea3b": "numOfDeliveredEarlyPurchases()", +"a1f902a7": "ComputeVestSpend(address)", +"a1f91057": "updateLock(bool)", +"a1fa39c4": "getRaisedPercents(address)", +"a1fa540d": "changeVotingBlocks(uint256,uint256,uint256,uint256,uint256)", +"a1fa566e": "getChannelPartners(bytes32)", +"a1fac24c": "Follow(bytes32,bytes32,bool)", +"a1fafe0c": "sendResidualAmount(uint256)", +"a1fb03f2": "GooCrowdsale(uint256,uint256,uint256,uint256,address)", +"a1fb1de9": "Message()", +"a1fb34c1": "setCustomExtraData(bytes32,uint256,bytes32,bytes32)", +"a1fc21f4": "setStaffDisbursementAddress(address)", +"a1fcc3bc": "stage2()", +"a1fd49b7": "getMFBalance(address)", +"a1fd92f5": "destinationMultisigWallet()", +"a1feba42": "tokensLocked()", +"a1ffba04": "PPGT()", +"a2008eb9": "acceptBidForStar(uint256,uint256)", +"a200dc73": "getNextShareholder(address)", +"a201222d": "recalculate(address)", +"a201bf26": "settleETH(bytes32)", +"a201d102": "VOTING_END_TIME()", +"a201ed8b": "transferMultiple(address[],uint256[],uint256)", +"a2023ff8": "setStartEndTimeTLP(uint256)", +"a202e476": "last_hash()", +"a20348c4": "ToPeriod()", +"a2035fef": "changeCustomTimeLock(string,uint256)", +"a20495d3": "Managed()", +"a20741dd": "getOperation(uint32)", +"a207b7fa": "SALE_FUND()", +"a208b3b7": "findFigures(uint256)", +"a2093e1b": "migrateCatOwnersFromPreviousContract(uint256,uint256)", +"a209a29c": "getStringValue(bytes32)", +"a20aede0": "phaseThreeRate()", +"a20b77ad": "getDocHash(uint256)", +"a20b8ab3": "ttlInvestAmount()", +"a20bbb8b": "addBadge(uint24,int16,int16,uint24,uint256,string,string,string,uint256)", +"a20bc7fe": "allownce(address,address)", +"a20c15cf": "_generateCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"a20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a20cc495": "bytesFunc(bytes,bytes)", +"a20cd047": "moveTokenToAccount(address,uint256)", +"a20cf0e7": "setTokenNAVMicroUSD(uint256)", +"a20ddfb6": "getPartnerAddresses()", +"a20def62": "checkExistsOwnedAccessory(uint64)", +"a20e2525": "UnlockWei(uint256)", +"a20efba3": "mintGrey(address,uint256)", +"a20f46c6": "searchAddress(address)", +"a20f4ee6": "pixelCost()", +"a210a676": "buyBunny(uint32)", +"a210bf55": "updateJackpotFeePercentage(uint8)", +"a210c6a9": "creatorPaid()", +"a210f934": "rateEarlyStage2()", +"a21174bb": "DefaultReverseResolver(address)", +"a2119377": "createToken(string,address)", +"a2119a3a": "allocateForRefund()", +"a2125232": "addItem(uint256,uint256)", +"a213051c": "individualMinPurchaseWei()", +"a21383cb": "permissibleTokenWithdrawal(uint256)", +"a213972c": "ViewBet2(address,uint256)", +"a213c280": "DayByDayToken()", +"a21515e3": "computed_shares_sold()", +"a2152e32": "testOracle()", +"a215457a": "transferBurnRole(address)", +"a215cd92": "setMinConversionRate(uint256)", +"a2167ac4": "_donations()", +"a216e0aa": "transferRobot(address,uint256)", +"a2177ff0": "getKeyLength()", +"a2187de0": "available_tokens()", +"a218d8ca": "clearAndDestoryAfterTwoWeeks()", +"a2190b46": "calculateTakerFee(address,uint256)", +"a21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", +"a21a32cb": "Securities_1()", +"a21a65ae": "getIntArrayLength(bytes32)", +"a21d5b9f": "utilityLockedDate()", +"a21d942f": "checkResult()", +"a21df9f0": "THIRTY_DAYS()", +"a21e14fe": "reportInvalidDeposit(bytes32[])", +"a21ea6b7": "CrabCoin()", +"a21eea2a": "assertValidChallenger(address)", +"a21eef95": "getBarrierNum(uint16)", +"a21f0368": "History(uint256)", +"a21f74b8": "fundGooResearch(uint256)", +"a21f836e": "pubCount()", +"a21fbc92": "isAllowed()", +"a2200278": "checkStatus(bytes32)", +"a2200fbe": "AgreementUrlEn()", +"a220a90e": "transferLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", +"a220d6c4": "tCampaignStart()", +"a2210352": "doRebuyTo(address)", +"a22107b4": "createRandomZombie(int256)", +"a222a52f": "firstPostIcoContributorId()", +"a222c98d": "declareWinnerForRaz(uint256,uint256)", +"a22304cd": "_specialDistribution(address,uint256)", +"a2233631": "withDrawal(address,address,uint256,bytes)", +"a2233c4d": "BancorConverterFactory()", +"a22352e2": "getDisputeFee(bytes32)", +"a2240eb0": "Scope()", +"a2248be0": "set_pre_kyc_bonus_numerator(uint256)", +"a224a5b3": "push_key(uint256,uint256,uint256)", +"a224c745": "setWhitelistAddress(address)", +"a224dcb7": "withdrawClaim(uint256)", +"a224f4ce": "earningsFromScore(address,address)", +"a2252aaa": "referralProgramOwner()", +"a225d0be": "setTokensByWaveIndex(uint256,uint256,uint256)", +"a2261508": "tokenSpender()", +"a2267a3a": "newProposal(uint256,uint256,string)", +"a2271b15": "m_presaleFinished()", +"a22838b9": "ExecuteTrade(uint256,address,address,uint256,uint256)", +"a229090a": "dropTo(string)", +"a22913b5": "addTeamAddress(address,uint256,uint256)", +"a229b901": "transferApprover(address)", +"a22a12de": "submitWithMetaHash(bytes32,bytes32)", +"a22a31dd": "Forged(uint256)", +"a22b35ce": "_burnFrom(address,uint256)", +"a22b5a1c": "getFiles(bytes32)", +"a22b97f5": "withdrawOnBehalf(address)", +"a22ba787": "allocateETH(bool)", +"a22bb384": "GBAChain(uint256,address)", +"a22c81ec": "MIDGRADE_TYPE2()", +"a22cb465": "setApprovalForAll(address,bool)", +"a22cd657": "getImpactValue(string,address)", +"a22ce93d": "getActiveConsentTemplates()", +"a22d5a51": "deleteActivity(uint16)", +"a22dff2c": "getMainBalance()", +"a22e9009": "epm()", +"a22ec476": "setSireStop(uint32)", +"a22ed371": "mentalBalanceOf(address)", +"a22f2b2e": "set_lock_list(address,address,uint256)", +"a22fb98b": "updateBounty(string,uint256[])", +"a2302af9": "queryWinningTeam(uint256)", +"a2309ff8": "totalMinted()", +"a230c524": "isMember(address)", +"a231a84f": "ssp()", +"a232155d": "getbetresultfirst(address)", +"a2325259": "buyTokensWithUpdateRate(address,uint256)", +"a23281e6": "numPositionsExpired()", +"a2328e2e": "_FIVEHUNDRED()", +"a23291b6": "QUIOToken()", +"a232e64b": "createForum(string)", +"a235ae52": "setWithoutFee(address,bool)", +"a2362aca": "HyunJaeToken()", +"a2368e11": "setAirDrop(bool)", +"a236a3d7": "configRoundKeyAdd()", +"a236e665": "buyNac(address,uint256)", +"a236eb85": "subdivide(uint256,bool,bool,uint256,uint256,string,string)", +"a236f388": "getGameWin(address,uint256)", +"a23744f0": "tryCreateCheckRecord(bytes)", +"a2375d1e": "getC()", +"a237f4d8": "developerFundAddress()", +"a2393922": "getTokenDealRange()", +"a23951c8": "WidthdrawEarnings(uint256)", +"a239756d": "setRandom(uint256,uint256)", +"a239d260": "KinTokenSaleMock(address,uint256)", +"a23a373f": "DrawWinning(uint256,uint256)", +"a23a49c1": "setEscrowTokensWallet(address)", +"a23a5315": "SkyToken()", +"a23b5bd1": "getRandomUint256(uint256)", +"a23b791a": "Bitcoin()", +"a23bbb11": "GroupClosed(uint32,uint256)", +"a23bc6fe": "setTokenHolderAddress(address)", +"a23bec7b": "constrcutor()", +"a23bfd84": "weiPerCHF()", +"a23c3397": "getTokensPaidToGame(address)", +"a23c86c0": "allocateBulkTokens(address[],uint256[])", +"a23d20f4": "blockedDivisionJurisdictions(bytes32)", +"a23d3c35": "founderWallet()", +"a23d64c4": "isReturnRequested(address)", +"a23da130": "FundsRegistry(address[],uint256,address,address)", +"a23e21f7": "change(uint8,bytes32,bytes32,bytes20)", +"a23e3e89": "removeToken(address,uint256,uint256)", +"a23f41e2": "curs()", +"a2407c7b": "verifyUpdate(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"a240d8ad": "changeWeeklyRate(bytes32,uint256)", +"a241c089": "updateContract()", +"a2420f73": "EthermiumTokenList(address,address,uint256,uint256)", +"a24247f1": "getStartLockTime()", +"a242519b": "Technology3G(address)", +"a242f049": "ICOEndTime()", +"a243b6c1": "setPrice(uint256,uint256[],uint256[])", +"a243f512": "removeTrack(bytes32)", +"a243f874": "takePayment()", +"a244e03d": "definirMessage(string)", +"a244f365": "SbuyToken()", +"a245b774": "lockedFundsForthefuture()", +"a24636c1": "InvalidState(bytes)", +"a246d83b": "relaySellerCannotCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"a2471fa5": "RecoverableWallet(address)", +"a2473cc1": "stakeOf(address,uint96)", +"a2478c8d": "CT(uint256,string,string)", +"a247bc32": "payouts()", +"a24835d1": "destroy(address,uint256)", +"a248da12": "Exam()", +"a248de8f": "own(bytes32)", +"a248df4f": "XFC()", +"a249225e": "setAuthorizedUser(address,bool)", +"a2495ace": "transferCongress(address)", +"a2497b5c": "ETQuality()", +"a24a21fa": "TheBillionCoin()", +"a24bcf46": "calculateTokenAmount(uint256)", +"a24beff7": "closeBet(uint256)", +"a24c9737": "BUYER_CAP_HIGH_USD()", +"a24d23eb": "ProcessGame(uint256,uint256)", +"a24d9658": "revokeConsent(string)", +"a24dbe76": "StatusContribution()", +"a24e20de": "withdraw_dao_fund(address,uint256)", +"a24ea666": "withdrawedFundrasingPart()", +"a24ea868": "PROOF_MULTISIG()", +"a24ed4e5": "isLimitedWalletAddress(address)", +"a24ed8aa": "newLeader()", +"a24f1e82": "publiclyDistributedParts()", +"a25047a2": "hasEntry(address)", +"a25057de": "_transferToICAP(bytes32,uint256)", +"a250f43b": "verifiedWinnersLastCount()", +"a25236fe": "requestVotingRights(uint256)", +"a25277f3": "totalTokensCrowdSale()", +"a25287c5": "allowChangePrice()", +"a25367ff": "method2(bool)", +"a253c06e": "_circulatingSupply()", +"a25401ea": "PapyrusToken(address[],uint256[])", +"a254e662": "managementTokensDelivered()", +"a2550108": "alt_buyCollectible(uint256,uint256)", +"a2554c36": "walletForPresale()", +"a2558ee2": "holderReward()", +"a255d68d": "ticketTransferees(address,uint256)", +"a2564afc": "activatePermissionsBot(bytes32,bytes32)", +"a2564f7c": "randomNumberGen(uint256,uint256)", +"a2578f1c": "armyCountBattlesWon(uint256)", +"a258dafc": "getTopInfo(uint256)", +"a2594b83": "greylistMany(address[])", +"a2596576": "submitMint(int256,address,uint256)", +"a2596ebe": "returnTokensFromHoldProgectAddress(uint256)", +"a2597659": "changeMinAccEthers(uint256)", +"a25983e5": "lockTokens(address,uint256,uint256)", +"a25a34b1": "findPositionInMaxExpArrayTest(uint256)", +"a25b859d": "soldIdeaWeiIco()", +"a25b9384": "isUserAllowedToTransfer(address)", +"a25bc80c": "setPresaleState(uint8)", +"a25be434": "notifyTranferToken(uint256,address,address)", +"a25c1f3a": "presalePurchasesLoaded()", +"a25d8973": "createSale2()", +"a25e6898": "withdrawForeignTokens(address,address,uint256)", +"a25eb5d9": "exchangeToken()", +"a25f2d7e": "ReinvestmentWithdrawal(address,uint256)", +"a25f55d4": "getBatchSize()", +"a25f5e98": "doAdditionalMinting(address,uint256,int256)", +"a25fc8dc": "adminAddCity(string,uint256,uint16)", +"a25fdcec": "editPlanet(uint256,uint256,string,string)", +"a25ff42d": "HumanStandardToken2(uint256,string,uint8,string)", +"a2605dc1": "EventLuckyNumberRequested(address,uint256,uint256,uint8)", +"a2609759": "transferPreSignedMany(address,address[],uint256[],uint256,uint256,uint8,bytes32,bytes32)", +"a260c045": "PROMETHEUS_SHIP_LIMIT()", +"a260d8da": "makePresaleReady()", +"a26176b1": "testInequalityUint()", +"a2624afe": "raiseJackpot()", +"a262c092": "CollectChipBag()", +"a26329f0": "finalizeRefunds()", +"a2635401": "getCurrentGameId()", +"a263601c": "find_contribution(address)", +"a26388bb": "testRevert()", +"a263c7ba": "changeBuyPrice(uint256)", +"a263e793": "EdittedEntry(address,uint256)", +"a2644eb0": "withdrawFullTokenBalance(address)", +"a264f18e": "CROWDSALE_ETH_IN_WEI_ACCEPTED_MIN()", +"a2651d30": "purchaseAreaWithData(uint24[],uint24[],uint256[],string,string,uint256)", +"a2657960": "DolyToken3()", +"a26636f3": "StpacToken()", +"a266b0f2": "CoinStacks()", +"a266c820": "changeARIWallet(address)", +"a266f4da": "liquidateFund()", +"a26730e1": "minRelease()", +"a26759cb": "addFunds()", +"a267b5cf": "TokensTransfered(address,uint256)", +"a268b332": "testBitXorFailIndexOOB()", +"a269202f": "setHash(address,bytes32,address,bytes32,uint256)", +"a269e31f": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a26a1bc9": "clearLockUser(address,uint256)", +"a26ac680": "BoBoToKen()", +"a26b0e34": "dbVal(address,uint256)", +"a26b2d76": "StepCoin()", +"a26b8822": "tokensSoldExternal()", +"a26bddb4": "LockedTokens(address)", +"a26c7810": "mintToTeamAccounts()", +"a26d494d": "getEscrow(address)", +"a26d6de6": "LogWithdrawal(uint256)", +"a26d7b94": "isCrowdSaleClosed()", +"a26dbf26": "totalParticipants()", +"a26e1186": "deposit(string)", +"a26e7a6c": "_initOpinion(uint256,string)", +"a26efcf8": "startGame(bytes,address,uint256,uint256[],bytes)", +"a26f644c": "Transfer_of_authority_data(address)", +"a270907c": "Btcandres()", +"a270a737": "venue()", +"a270cdf3": "getMarketInfo(bytes32)", +"a2720018": "freelanceFillBonds(address)", +"a2729a01": "updateDelegatorWithEarnings(address,uint256)", +"a273079a": "addLog(string,string)", +"a2730c23": "EthToAFW(uint256)", +"a273738c": "preICOEndTime()", +"a27411d8": "Earthpayment()", +"a2741bdb": "MAX_CITIES()", +"a2744a22": "addProduct(uint256,uint256,string,uint256)", +"a2752df9": "tokenSetTransferFeeProp(address,address,uint256)", +"a275ee1b": "getDeployTime()", +"a27678c9": "preDGZToken()", +"a277051f": "userAddr()", +"a277b787": "CARXTOKEN()", +"a277d5b1": "totalTokensPurchased()", +"a277fa88": "setWhitelistOn()", +"a2788b58": "ConflictResolutionManager(address)", +"a278ce66": "backWindowAdjustmentRatio()", +"a278fdfb": "bidOnAuctionToBuy(uint256)", +"a27966dd": "finishselfdrop()", +"a2798f0a": "GetQueueNumber()", +"a279c488": "addPending(address,uint256)", +"a27a9e7f": "publicAmount()", +"a27aebbc": "extendTime(uint256)", +"a27b9bf4": "matchcoin(uint256,string,string)", +"a27c1756": "ECONOMY_BOOST()", +"a27c3a2d": "HngCoin(uint256,string,string)", +"a27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", +"a27c794b": "insertDetails(string,uint256,uint256)", +"a27c9af0": "gameDestroy()", +"a27d8298": "leader_3()", +"a27e0e67": "QLFY()", +"a27ee939": "payto3()", +"a280b3db": "preSaleBonus3Time()", +"a280ce8f": "distributeWinnerPot()", +"a280e67a": "leftnum()", +"a28103f2": "batchTransfer2(address[],uint256[])", +"a283063c": "ChargeFee()", +"a2832c97": "CappedDividendToken(uint256)", +"a283c9c5": "getLastBidAmount()", +"a283f907": "addOrderContract(address)", +"a283fd00": "getPendingPaymentAmount(address)", +"a284b6d3": "maxTicketAmount()", +"a28504b4": "isSwapDone()", +"a28555d5": "setTAOFamilyAddress(address)", +"a28576aa": "LogUserRegistered(address)", +"a285f19f": "signedTransfer(address,address,address,uint256,uint256,uint256,bytes,address)", +"a2860050": "estimateReturns(address,uint256)", +"a28641cc": "_buyTile(address,uint256,bytes)", +"a2866a78": "HouseICO()", +"a28812c2": "existingIds()", +"a288237c": "MeSum()", +"a288b609": "releaseOf(address)", +"a288fb1f": "setConfigUint(int256,bytes,uint256)", +"a2890972": "synthesize(uint16[5])", +"a289409b": "addAddressesToAdmins(address[])", +"a289673b": "fipsChangeOwner(bytes20,address,address)", +"a289d187": "depositDividend()", +"a28a1564": "GBToken()", +"a28b1ffd": "isLive(uint32,int256)", +"a28bc99a": "TipSmartToken()", +"a28c644d": "setACLRole5999294130779334338(address)", +"a28c76cc": "initialize(address,address,address,bytes32,uint256,uint256,uint256)", +"a28d0185": "removeComponent(uint256,uint256)", +"a28d57d8": "btc()", +"a28e68d3": "setOnceMintAmount(uint256)", +"a28ecf0b": "sendCryptedHand(bytes)", +"a28f19f8": "AddDroneItem(address,uint256,uint256)", +"a29063c1": "LuckyNumberImp()", +"a290f4f2": "logoPrice()", +"a2919502": "getWalletLibrary()", +"a29256bd": "Ethereum()", +"a292f7d3": "paymentEscrow()", +"a29337bd": "tokensToCompany()", +"a293688b": "triggerFindWinner()", +"a293cba1": "LETSCOIN_Token()", +"a293d1e8": "safeSub(uint256,uint256)", +"a29445a9": "EnclavesDEXProxy(address,address,address,address,uint256,uint256,address,bytes32,bytes32)", +"a294542f": "setPreSaleTLYperETH(uint256)", +"a2948cdf": "futureDevelopment()", +"a294ed7a": "voterAddressOf(uint256,uint256)", +"a2950fd8": "Birth(address,uint256,uint256,uint256,uint256,uint256)", +"a2958b76": "_transferOwnershipOfStorage(address)", +"a29626c2": "createSingleSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"a296b323": "setTransfer(bool)", +"a296fed8": "HitToken(uint256,string,string)", +"a297d43c": "openDistributionContract()", +"a2987245": "getIntArrayIndex(bytes32,uint256)", +"a298ba7c": "AntiqueCoin(address,uint256)", +"a299b155": "setInitialTokensBalance()", +"a29aaad6": "MatreXaCrowdsale(uint256,uint256[],uint256[],uint256,uint256,uint256,uint256)", +"a29b7fa0": "TklnAirdropToken()", +"a29c3574": "OrgonToken()", +"a29cc6c8": "allocateVestedTokens(address,uint256,uint256)", +"a29cd847": "changeEndPreSale(uint256)", +"a29d4859": "drpuToken()", +"a29d578a": "changeABaddress(string,address)", +"a29dbf46": "isAllowedToSend(address,address)", +"a29f9fb9": "onChainAddresses(bytes32)", +"a29fe9b1": "UBOToken()", +"a29ff28d": "receivedStaAmount()", +"a2a02202": "smg(uint256)", +"a2a0d0fc": "pre_endTime()", +"a2a140f9": "MinInvestment()", +"a2a1521a": "SignalPylon(address)", +"a2a17629": "addrBroker()", +"a2a206c0": "ImperoITCoin()", +"a2a23fb2": "getVersionsLength()", +"a2a256b9": "AirDroppedTokens(uint256)", +"a2a3d051": "B3(uint256,string,uint8,string)", +"a2a483ee": "setCS(address)", +"a2a51ccd": "transferToCrowdsale(address,uint256)", +"a2a5243c": "_calculateExcessBonus(uint256,uint256)", +"a2a53c7c": "Exercise(uint256)", +"a2a6aa11": "TileClaimed(uint256,uint256,uint256,address)", +"a2a6ca27": "setMinPerTx(uint256)", +"a2a746e1": "moveToInitiator(address,address,uint256)", +"a2a8336f": "claimEtherSigner(uint256)", +"a2a84a5d": "zonesSwarmAddress()", +"a2a8e279": "getTokensForEther2(uint256,uint256)", +"a2a957bb": "setFee(uint256,uint256,uint256,uint256)", +"a2a96799": "totalSuply()", +"a2a9a6c1": "satellite()", +"a2a9d1ef": "initReverseENS(address)", +"a2aa0724": "enterLottey()", +"a2aaa10e": "DigiCrowdSale()", +"a2ab2686": "participatePresale()", +"a2ac0a1a": "getUserAssetBalance(address)", +"a2ac5360": "calculateFounderCut(uint256)", +"a2aca613": "buyLicense(address,address,string)", +"a2ad16ed": "WinEToken()", +"a2ad360f": "SUV()", +"a2adaf15": "isOpened(uint256,uint256)", +"a2ae72ec": "open_commitment(uint256)", +"a2ae86ac": "setUntsqm(uint256)", +"a2af0e37": "assignPlayer(string,address)", +"a2af5fe9": "content(string,string,string,uint256)", +"a2b038b3": "addOffChainRaisedContribution(address,uint256,uint256)", +"a2b0867d": "Admined(address)", +"a2b0f9f6": "setMaxWeiForVerificationLevels(uint256,uint256,uint256)", +"a2b144f0": "getGasForMcr()", +"a2b1da51": "inflat(uint256)", +"a2b21d7d": "trainSpecial(uint256,uint256,uint256[2],uint256[2])", +"a2b40d19": "changePrice(uint256)", +"a2b424b1": "firstPresaleEnd()", +"a2b475f3": "levelOneBonus(uint256)", +"a2b5591c": "oraclize_query(uint256,string,string[],uint256)", +"a2b60f43": "EmployeeMigrated(address,address,uint256,uint256)", +"a2b6cbe1": "deleteTxDataBlockNumber(bytes32)", +"a2b6f0ec": "addRewardToPendingWithdrawals(uint32)", +"a2b7976d": "bbye()", +"a2b7a18b": "BCE()", +"a2b7e23d": "queueMode()", +"a2b8891e": "getFreeKebaber()", +"a2b8bc77": "domain_reward(address,uint16)", +"a2b946aa": "getNewGame()", +"a2bad039": "getCompte_27()", +"a2bb5d48": "get_username(address)", +"a2bb635a": "WhitelistedAddress(uint256)", +"a2bbeac2": "Shares(string,string,uint256,uint256)", +"a2bc0e31": "testCheckRokTeam()", +"a2bc183f": "secondPlacePot()", +"a2bc1cd4": "getNumEthOfferors()", +"a2bc2eef": "CipherPlayToken(address,address)", +"a2bcb304": "setfanbei(uint256)", +"a2bccae9": "plyrRnds_(uint256,uint256)", +"a2bcee8b": "build_creature()", +"a2bd018c": "targetDiscountValue3()", +"a2be1761": "addDiscounts(address[],uint256)", +"a2be19fb": "assignPoliceToReport(uint256)", +"a2be23cd": "BASIC_RATE()", +"a2be427d": "updatePlayer(uint256)", +"a2bf1d06": "DURATION_NONUSETEAM()", +"a2bf68b9": "membership()", +"a2bf6939": "setTokenValue(uint256)", +"a2bf6f7e": "ClaimedStatus(address)", +"a2bfae64": "mmin(uint128,uint128)", +"a2c030a5": "changeRootAuthority(address)", +"a2c17459": "getCreateUnicornFullPriceInCandy()", +"a2c25131": "LogItemUpdate(uint256)", +"a2c2ed9b": "killContract(uint256)", +"a2c3a542": "getFallbackDepositPeriod()", +"a2c3b256": "receiveCheck(address)", +"a2c3bd83": "TokenInvestment(address,address,uint256)", +"a2c41366": "getIcoBonus()", +"a2c44503": "doesUserHaveBalance(address)", +"a2c4895a": "encodeOperator(uint256,uint256)", +"a2c4a06f": "startTimeOne()", +"a2c4c336": "getPurchaseReturn(address,uint256)", +"a2c4d268": "addToRef(uint256)", +"a2c52c4d": "CoreMediator()", +"a2c6fa83": "transferFromStudio(address,address,uint256)", +"a2c77e68": "isLeftTokens(uint256)", +"a2c8b76b": "getPriceFor(uint256,uint256,uint256,uint256)", +"a2c93406": "blinc()", +"a2c99d47": "rateAfterValidation(uint256,bool)", +"a2c9d630": "manualPrice()", +"a2cc1f62": "disagree(address)", +"a2cdd471": "cc()", +"a2cdd82f": "setAuctionObj(address,uint256,uint256)", +"a2ce0f87": "min_contribution()", +"a2ce4215": "TOKEN_PREICO_CAP()", +"a2ce588d": "roundExpired()", +"a2cff990": "getHeroCurrentLevel(uint256)", +"a2d0b147": "RedTicket(uint256,address)", +"a2d0f942": "canRedeemUTXOHash(bytes32,bytes)", +"a2d10ba5": "kyber()", +"a2d1c624": "checkKingFounder(address)", +"a2d1cf11": "propheciseExecute(address)", +"a2d24c5e": "getFirstTranche()", +"a2d39bdb": "addKey(address,uint256)", +"a2d3e2be": "ReleaseTimeChanged(address,uint256,uint256)", +"a2d435d4": "icoTotalCollected()", +"a2d46832": "speech(uint16)", +"a2d4db9c": "newUpload(bytes32,string,uint16,bytes32)", +"a2d57853": "receiveApproval(address,uint256,bytes)", +"a2d5b8bf": "withdrawBoardMeetingFees()", +"a2d6a926": "CapCoinInternational()", +"a2d6d382": "videos(bytes32)", +"a2d6f8de": "startEarlyStage4()", +"a2d74227": "spendToken(uint256)", +"a2d74b29": "setJobHiringDone(uint256)", +"a2d819b4": "getSenderSig()", +"a2d83b5e": "update(address,uint256)", +"a2d89edf": "bountyInit()", +"a2d97fa7": "TimeLockr()", +"a2da2b47": "ausGroupReleaseDate()", +"a2da84f8": "setCAOAmount(uint256[])", +"a2db644e": "vestingTransfer(address,address,uint256)", +"a2dc7dcf": "initialize(address,address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256[])", +"a2dc9d9c": "ChangeMessage(string,string)", +"a2dcb5d4": "bindUserWithBoard(uint256,address)", +"a2dd2e96": "InitCancel(address)", +"a2dd3283": "setICOContract(address,address)", +"a2dd9dd3": "canMateWith(uint256,uint256)", +"a2de29d4": "setReleaseAmount(address,uint256)", +"a2de45b7": "Listed_Validated(uint256,string)", +"a2de5b50": "buyWithPromo(address)", +"a2dea26f": "sendAllocation(address)", +"a2deadbd": "getTransactionHash(bytes)", +"a2dee527": "setSaleBonus(address,address,uint256)", +"a2df26f5": "printMarket(int256)", +"a2df6c42": "splitFirst(string,string)", +"a2df7465": "DeepToken(address,address,address,address,address)", +"a2dfa2f0": "buySampleTokens(address)", +"a2e0ee3e": "theWinningReferral()", +"a2e1a8d8": "isOwnerAddress(address)", +"a2e23a51": "TAIL_EMISSION()", +"a2e2842e": "ChannelSecretRevealed(bytes32,address)", +"a2e2998c": "setPricePerMessage(uint256)", +"a2e3750c": "preSaleCSSC()", +"a2e38b54": "getTransactionIds()", +"a2e40e50": "endorse(bytes32)", +"a2e55e88": "IQB()", +"a2e5f168": "DaoAccount(address,address)", +"a2e62045": "update()", +"a2e65477": "changePeriod(uint256,uint256,uint256)", +"a2e7223e": "isNewPlayer(address)", +"a2e7241c": "citizensAddresses(uint256)", +"a2e800ad": "rounds()", +"a2e841ba": "getUnprocessedQueryBytes32(uint256)", +"a2e855a5": "batchFillOrKill(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"a2e91477": "publicSaleStarted()", +"a2ea2aaf": "CreateToken()", +"a2ea771f": "receivedTokenOf(address)", +"a2ea7c6e": "getSchema(bytes32)", +"a2ea80f9": "setPayableEnabled(bool)", +"a2ea9883": "OwnerChanged(address)", +"a2eaa896": "winningBidder(string)", +"a2eb0d01": "gift_CreateTINAmotleyLine(string)", +"a2eb164d": "lockUpdateTokenAccount(address,bool)", +"a2ebaa1d": "TEAM_PERCENT_EVE()", +"a2ebb20b": "icoHolder()", +"a2ec191a": "addDSource(string,uint256)", +"a2ec258f": "future()", +"a2ec2957": "updateInvestorDates(uint256,uint256)", +"a2ec5414": "getAllowanceExpiration()", +"a2ee1a27": "sellPrice_wie()", +"a2ee4000": "cancelSalesOffer(bytes32)", +"a2ee8669": "PussyToken(uint256,string,string)", +"a2eeb5d4": "pyramid(uint256)", +"a2f09dfa": "addFund()", +"a2f1607c": "_calcLockRewardPercentage()", +"a2f16d80": "dexWithdrawCollectedFees()", +"a2f182d4": "setLimits(uint256,uint256,uint256,uint256,uint256)", +"a2f23659": "VPCx()", +"a2f26fb2": "FTTIssued(address,address,uint256,uint256)", +"a2f3139c": "stagedVestedLockUpAmounts()", +"a2f35f44": "addNewAddress(address)", +"a2f37360": "addSponsorshipAmount(address,uint256,uint256)", +"a2f39dc6": "OLDSPTI()", +"a2f3ba5b": "setSynthetixState(address)", +"a2f3ede2": "computeNameHash(bytes)", +"a2f44e72": "p_update_action(uint256,address,address)", +"a2f45660": "Purchase(address,address,address)", +"a2f4f550": "getDataPointForSubject(uint256,uint256,int256)", +"a2f56b2c": "refundEth(bytes32,address,uint256)", +"a2f5ee48": "CarbonExchangeCoinToken()", +"a2f6e5fb": "ViewMyDivs(address)", +"a2f77bcc": "getGame(uint256)", +"a2f78d7a": "startICO(address,address)", +"a2f792d5": "AdministratorAdded(address,address)", +"a2f7a2e0": "changeIcoPhaseAmounts(uint256[])", +"a2f7b3a5": "instances(uint256)", +"a2f7b7fd": "callTokenFallbackIfNeeded(address,address,uint256,bytes)", +"a2f7f58f": "getBetAmountOf(uint256,uint256)", +"a2f91af2": "cage(uint256)", +"a2f95b44": "committeesArray(uint256)", +"a2f9eac6": "persons(uint256)", +"a2fa0157": "isAssetActive(address)", +"a2fb1175": "winners(uint256)", +"a2fb342d": "lend(address,uint256)", +"a2fb98fa": "starting_clones()", +"a2fba23c": "holderGroup(address)", +"a2fbe98c": "haveIWon()", +"a2fc0bd5": "BuyEvent(address,uint256,uint256,uint256)", +"a2fc2254": "LAFINAL3()", +"a2fcd1af": "amountRaisedInUsd()", +"a2fd0179": "unlockBatchOfAddressesAfterITO(address[])", +"a2fdea11": "getBonusCoefficient()", +"a2fe802b": "isExit()", +"a3000128": "getContributionHash(address,uint256)", +"a3006abf": "buyBoosterPack()", +"a3006f5f": "CETFToken()", +"a300aa66": "RIKCoin(address,address)", +"a300c6ae": "confirmCollRecv(uint256)", +"a300eadf": "_getAllParents(bytes32)", +"a3011a02": "WatcharaHashCoin1()", +"a301b493": "Milestone_IcoFailed(string)", +"a3022667": "modifyAllLevelCaps(uint256[])", +"a302fdf1": "WHITELIST_BONUS_RATE()", +"a3030b10": "getTournamentBattleResult(int256,int256,uint256,uint256,uint256)", +"a3031b77": "getTradeCount()", +"a3032f25": "claimTreshold()", +"a3035454": "WeiControllerFactory(address)", +"a30376b7": "getReferralCount(uint256)", +"a3045113": "payUp()", +"a304f625": "updateInheritedEarlyParticipantWhitelist(address,uint256)", +"a3053236": "SafeInvestments()", +"a305ac76": "futureHolder()", +"a306e754": "batchIssueTokens(uint256)", +"a3078815": "darknodeOwner(address)", +"a307b727": "refund(bytes32,string,address)", +"a3082be9": "GoodLuck(uint256,uint256)", +"a30872db": "tierContract()", +"a308c2a7": "validReferralCode(string)", +"a30955af": "balanceToken()", +"a309800c": "_withdrawWei(uint256)", +"a309f2ee": "setBalanace(bytes32,address,uint256)", +"a309f589": "crowdsaleRatio()", +"a30a86fe": "setMainSaleParameters(uint256,uint256,uint256,uint256)", +"a30b5c69": "AttributeModel()", +"a30bdea4": "isOffchainWhitelisted(address,bytes)", +"a30c5f17": "get_root()", +"a30cc5f6": "multiFixed(uint256[2][6])", +"a30d5627": "ItemToken()", +"a30d59c9": "getEggsCount()", +"a30eb0ef": "freeTokenTime()", +"a30eddcc": "bitSlice(uint256,uint256,uint256)", +"a30ef9e7": "toBase32(bytes)", +"a30f786f": "allowedRewardTokens()", +"a30fb52d": "sendGameGift(address)", +"a30fbae1": "endBuyBackDate()", +"a310293e": "weiDonated()", +"a31052e8": "clearReleaseTime(address)", +"a3106b95": "setMinterAddress(address)", +"a310f36a": "test2(bytes,uint256)", +"a3111d7c": "withdrawListing(uint256,address,bytes32)", +"a311a08e": "setPartners(bool,uint256,uint256)", +"a311c7c2": "collateralisationRatio(address)", +"a311d157": "addContributor(address,uint256,uint256)", +"a311d970": "TokenTycoonIGO()", +"a311dd70": "setArray(uint8[10])", +"a31271f5": "updCrowdSaleEnabled(bool)", +"a313c371": "memberInfo(address)", +"a31477b4": "getSncTokenIssuance(uint256,uint256)", +"a314acfe": "attemptToClaimCard(address,address[3])", +"a314dc2d": "feePayed()", +"a3155013": "month60Allocated()", +"a315acf5": "minter_address()", +"a315cda0": "priceOfSmartContract()", +"a316aa93": "setActivityDetails(uint256,string)", +"a3179fe0": "getAccountsNumber()", +"a317abc7": "defaultMax()", +"a318d521": "disableBeforeActivation()", +"a3194d50": "setFinished(uint8,bool)", +"a319b232": "VTCoin(uint256,string,uint8,string)", +"a31a9752": "Payout(uint256,bool)", +"a31b858d": "_buyDiscountTTM(uint256,uint256,address,address)", +"a31c5436": "TOKEN_AMOUNT_PRE_ICO()", +"a31caec8": "AkilosToken()", +"a31cc317": "evaluateContract()", +"a31cd710": "_getExpMultiple(int256)", +"a31d291a": "HOHO(uint256,string,string)", +"a31d30a5": "WhitelistUpdated(uint256,string,address,uint256)", +"a31d5580": "Registrar(address,bytes32,address)", +"a31e3678": "addExceptAddress(address,address)", +"a31e5e97": "setHouseAddressOne(address)", +"a31e88c2": "numIntervals()", +"a31f2c52": "partner2_voted_update_prenup()", +"a31f61fc": "setGroupCap(address[],uint256)", +"a31f79fb": "slopeReleasePercentage()", +"a31ffa30": "setCtuContract(address)", +"a3201daa": "setPrices(uint256)", +"a3208c1e": "addUserIntoBlacklist(address)", +"a3210e87": "sendeth(address,uint256)", +"a3221c8e": "step8()", +"a3223d50": "ETHER_MIN_CONTRIB_USA()", +"a322accf": "tokenFallbackExpanded(address,uint256,bytes,address,address)", +"a322c40e": "toString(int256)", +"a322d49e": "FirstTradingEcosystemCoin()", +"a323a748": "SBT()", +"a323af85": "hasTwoStepWithdraw()", +"a323bdb4": "currentPublicSale()", +"a3240455": "offerStarForSale(uint256,uint256)", +"a3246549": "stageOneClosed()", +"a324ad24": "getMonth(uint256)", +"a324cca0": "optimalLog(uint256)", +"a324ed9f": "BurnUnsoldToken(uint256)", +"a324f8bf": "tanksBeforeTheNewTankType()", +"a32508a1": "Carpati()", +"a3262e57": "burnCoin(uint256)", +"a32710eb": "setRole(address,address)", +"a3273535": "tdeDuration()", +"a327a958": "numCourse()", +"a327c45d": "dev1()", +"a328f90b": "_nextBudgetStartAndEndAndOfficalVotingTime()", +"a3293c0e": "handToCards(uint32)", +"a32a6737": "setTotalDeposit(address,uint256,address)", +"a32ac9e1": "Bitcoin_IDToken(uint256,string,uint8,string)", +"a32af535": "depositAndFreeze(address,address)", +"a32affeb": "loadEarlyParticipantsWhitelist(address[],uint256[])", +"a32bf597": "getCurrentRound()", +"a32c3bd6": "GetBounty(address,uint256)", +"a32cb608": "getReverseRate(address)", +"a32ce11e": "approvals(address,address)", +"a32e935a": "allocateTokenForTeam()", +"a32f0f41": "testFailControllerUnapprovedTransferFrom()", +"a330814c": "unregisterAuditor(address,address)", +"a3316ccc": "RATE_SALESTAGE7()", +"a3318359": "sendPrizes()", +"a331939d": "freezeAdmin()", +"a331cd38": "toKeyValue(uint256,string)", +"a3322a12": "getFilesCount()", +"a332853a": "futureDevelopmentFundAddress()", +"a3330574": "checkAndMint(uint256)", +"a333658f": "addTreasuryManager(address)", +"a333f96d": "LogRefundProcessed(address,uint256)", +"a33467cf": "getClue2()", +"a334edf6": "consumeWine(uint256)", +"a3358ae4": "REAPER_INTREPID_EXTRACTION_BASE()", +"a335b828": "FUS()", +"a337840c": "setGuardianRune(uint256,uint256)", +"a338bd2c": "showTopBonusBalance()", +"a338eba5": "sendTokens(address[],uint256)", +"a3393a35": "getDrawEthAmount(uint256,address,uint256)", +"a3395a52": "searchTicketsXaddr(address)", +"a339aaf7": "addOracles(bytes4[],address[])", +"a339abd5": "crowdsaleOpeningTime()", +"a339c18f": "ACNNIco(uint256,uint256,uint256,address,address)", +"a339c21a": "addContractTestToBounty(address,address)", +"a33a5225": "allRefererTokens()", +"a33b7510": "shareAddEtherValue()", +"a33bea16": "GENEOSSale(uint256)", +"a33c0972": "tokenAllocToCompany()", +"a33cbc55": "TCI_admin()", +"a33d4968": "Tripler()", +"a33d5d9d": "EthDev()", +"a33d652e": "setFunding(uint256)", +"a33dd801": "setTreasuryBalance(uint256)", +"a33e1d16": "drapcoin()", +"a33e6b07": "AccountFrozen(address,bool)", +"a33e8d62": "RxEALTokenContract()", +"a33eaa0b": "_setTokenUri(uint256,string,string,string,uint256)", +"a33ed39d": "numRef()", +"a33eff5a": "createResource(bytes32,bytes32,bytes32)", +"a33f3939": "setNetwork()", +"a340295a": "setPhoenixOwners(address[19])", +"a340ceac": "transfekbolOwnership(address)", +"a340cf79": "paid(address)", +"a340d587": "offlinePurchase(address,uint256)", +"a3414653": "COIN_COST_ICO_TIER_1()", +"a3429689": "TaiCoin()", +"a3435da5": "BONUS_LEVEL_3()", +"a3451568": "airdropBatchTransfer(address[],uint256)", +"a3454712": "AssetCreated(address)", +"a34560be": "updateEtherCap(uint256)", +"a34574f0": "gamers()", +"a346b62d": "CaptainKitties()", +"a346e536": "week_winner()", +"a3472270": "mock_getAddress(uint256)", +"a347ef84": "calcpustprice(uint256,uint256)", +"a348ea79": "contests(address)", +"a34945db": "maxAllowedBetInEth()", +"a3494fdc": "expectRefund(uint256)", +"a349bfa2": "addOwner(address,uint256,uint256)", +"a349d683": "FRP()", +"a34ad6b6": "clockmint()", +"a34bbf51": "getGeneralInfo()", +"a34c6716": "testHashing(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32,bytes32)", +"a34cc845": "win(address)", +"a34d2ff7": "votingBymy(bool)", +"a34d42b8": "setContractOwner(address)", +"a34d5312": "registryRequestVendor()", +"a34d5f82": "GiveBlockReward()", +"a34d7c11": "flipCoinWithEther(uint8,uint8)", +"a34d9270": "setMinInvestedLimit(uint256)", +"a34d942b": "FUXEToken()", +"a34dffba": "SILVER_AMOUNT_NDC()", +"a34e5990": "setTier(uint256,uint256)", +"a34e9e66": "approveBcoupons(address,uint256)", +"a34edc03": "assertTrue(bool,string)", +"a34f42a9": "LogRandom(uint256,uint256)", +"a34f82f4": "summFounders()", +"a34fc5ac": "_lockTokens(address,uint256)", +"a350539e": "makeBid(uint32)", +"a3508b17": "getOpenedStageIndex()", +"a35132ac": "SMSReward(address)", +"a3515b98": "initializeWeekData(uint256)", +"a352f1a8": "calcSHA3(bytes)", +"a3536b0c": "calculateHolderPiece(address)", +"a353c600": "Ponged(uint256,string)", +"a35523da": "currentLoanDayTime()", +"a356fdf3": "getPreICOPercentage(uint8)", +"a3577e93": "depositFunds(bytes,uint8[2],bytes32[2],bytes32[2])", +"a357880d": "whitelistedAddrs(address)", +"a3580695": "inSpecialSalePeriod()", +"a358aa18": "_transferFromInvestor(address,address,uint256)", +"a35a319b": "delFromBlackList(address)", +"a35aae9c": "roundID_()", +"a35ae3ab": "Bam()", +"a35bc497": "remainTime(uint256)", +"a35bd437": "toUSD()", +"a35bd591": "newRound(uint256)", +"a35bfcac": "ownerRemoveRole(address,string)", +"a35cad77": "maxLeaders()", +"a35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", +"a35d631a": "PausableMock()", +"a35d6dd6": "rDEX()", +"a35d78a6": "_approvedGen1(address,uint256)", +"a35da419": "setlock(bool)", +"a35e617f": "setMaxCount(uint256)", +"a35e83ea": "getReplay(uint256,uint256)", +"a35f9514": "calcDstQty(uint256,uint256,uint256,uint256)", +"a360098f": "Immigration(address,address)", +"a360b26f": "Migrations()", +"a361b184": "move(bytes32,bytes32)", +"a3624b72": "finalizeTransferAddressType()", +"a362858a": "EthereumCashPro()", +"a36298c7": "totalLimit()", +"a362cf0c": "TrueWorld(uint256,string,string)", +"a363f269": "watchMovie()", +"a3641c84": "card_metal_first()", +"a364b5c1": "setProposalNames(bytes32[])", +"a365bd9f": "BaseToken(string,string,uint256)", +"a365f3cc": "Util()", +"a3666d23": "weekTwoPriceRiseBegin()", +"a367b891": "SplitPhaseDistribution(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"a367d99a": "investStart()", +"a367e565": "setIBalances(uint256[],uint256[])", +"a368107b": "SetRecordType(uint32)", +"a369658c": "TARGET_EVE()", +"a369b0ac": "depositsClosed()", +"a369bb28": "SaleWallet(address,uint256,address)", +"a36a0551": "createCarrierFromVault()", +"a36a48a5": "ETH500on719()", +"a36a7526": "setOp(address)", +"a36b15d0": "enableBundlingMultitoken(uint256)", +"a36b8af1": "LogItemModified(address,uint256,uint256,bytes32,bytes32,bytes32)", +"a36badd7": "hasJobRecommendations(address,address,uint256)", +"a36be43a": "SetFreeYOU(uint256)", +"a36be9a1": "paybackDeadline()", +"a36c2cbe": "informarOng(address)", +"a36c8ec2": "UpdateContractorAddress(address)", +"a36db282": "SendLCRTokens(address,address,uint256)", +"a36ddfae": "_0xForkTokenToken()", +"a36f127e": "removePresetTransfer(address)", +"a36f259d": "campaignOf(address)", +"a36ff98b": "team1Points()", +"a36ffd4d": "ADEToken()", +"a37173e9": "transfer_left_funds_to_project()", +"a37218ed": "MAMECOIN()", +"a3721adc": "contractCreationBlockNumber()", +"a37330ea": "getDestroyedWhenRoundOver()", +"a3743afc": "getProjectHour(uint256)", +"a374480a": "placeValue(address)", +"a3744828": "GetPriceByN(uint256)", +"a3747fef": "register(bytes,bytes)", +"a375de4f": "addTokensToBank(address,uint256)", +"a37641ff": "MAX_RING_SIZE()", +"a3766f88": "tokenVendor()", +"a376c19d": "setEventResult(string)", +"a377104c": "init(string,uint256,uint256,uint256)", +"a377b34e": "YoloToken(uint256)", +"a377ff17": "setHorseDataAddr(address,address)", +"a3787858": "resumeBlockNumber()", +"a37889a9": "createPromoGirl(uint256)", +"a378bba5": "gameEnds()", +"a3792985": "getBonusDropsOf(address)", +"a37936f9": "SuspendEmployee(address,uint32)", +"a379e626": "ownerPerThousandShareForBuying()", +"a37a3859": "configPerFund()", +"a37a778f": "SetIPR(string,string,address,string,string,uint256,string)", +"a37ba32a": "duration(bytes32)", +"a37be00f": "transferBackTo(uint256,address)", +"a37be75f": "ethBase()", +"a37c314d": "set_iconiq_tokens(address,address,uint256)", +"a37ccabc": "PositionBought(uint256,uint256,uint256,address,uint256,uint256)", +"a37d1556": "refAmount(address)", +"a37da615": "showInvestedNum(address)", +"a37dec33": "calculateWineSell(uint256,uint256)", +"a37e66f5": "ethPendingManagement()", +"a37e6f69": "failedByDeveloper()", +"a37f00f7": "getItemByTokenID(uint256)", +"a37fd390": "setHomeAdv(uint256,string)", +"a380dcb9": "wpp()", +"a381de54": "bonusAddress()", +"a382aee2": "fourthExchangeRate()", +"a382edfd": "SeeleGold()", +"a38320e6": "TITANToken()", +"a3833a13": "balanceOfColdWallet()", +"a3848b1a": "getMonsterIVs()", +"a384af00": "market_BuyForSale(uint256)", +"a384d6ff": "lowerBound()", +"a38591fc": "test_percOf1()", +"a3863d81": "buyTokensLowLevel(address,uint256)", +"a38717f4": "exFeeTotal()", +"a3875883": "etherPriceUSDWEI()", +"a387cf34": "closeTokenSale()", +"a3885413": "withdrawOwner(address,uint256)", +"a388a836": "DDAContract(address)", +"a3893a33": "changeExchanger(address)", +"a3895fff": "changeSymbol(string)", +"a389783e": "isApproved(address,address)", +"a389ef53": "receiveDeposit(uint256,uint256)", +"a38b68cb": "nonzeroAddressesLengthForApi(uint256)", +"a38b8469": "TokenADSVENTURE()", +"a38b9a19": "printQuotation()", +"a38c48b6": "createProductionUnit2Beta()", +"a38ce2b4": "revokeAddress()", +"a38deeab": "Grid(uint16,uint256,uint256,uint256)", +"a38eb622": "pauseBuy()", +"a38f18a0": "RedBlueToken3()", +"a3907d71": "enable()", +"a3908e1b": "convert(uint256)", +"a3912ec8": "receiveEther()", +"a3916164": "withdrawInvestments()", +"a391c15b": "div(uint256,uint256)", +"a3922eac": "setCategories(address,uint256,uint256)", +"a3926f14": "PixelsMain()", +"a392f54a": "giveMeCoins(uint256)", +"a3934de4": "Upgrade(uint256,address,address,address)", +"a39385de": "transferWithReferenceCallGas()", +"a393dc44": "_totalsupply()", +"a393fb0f": "reducemoney(address,uint256)", +"a39417f9": "LOG_NewBet(address,uint256)", +"a39495f0": "isPreallocated()", +"a394bbc8": "isRegisteredParticipant(bytes32)", +"a395e2cc": "TPLAYToken(uint256,string,string,uint8)", +"a3961207": "amountOfRedemptionPayouts()", +"a3964cb9": "toB32(bytes,address,bytes)", +"a396541e": "getPongvalTxRetrievalAttempted()", +"a397d8e0": "getUnusedBalance(address)", +"a398063a": "setEmergentHalt(bool)", +"a3980dd7": "Readycoin()", +"a3988500": "CloudexchangeCrowdsale(uint256,uint256,address)", +"a398b89b": "receivedEther(address,uint256)", +"a39953b2": "startCrowdsale()", +"a399eb76": "ZoharTC()", +"a39a2b76": "dropUnitPrice()", +"a39a45b7": "replaceOwner(address)", +"a39a70a9": "developReserveTimeLock()", +"a39aaec6": "getCompte_37()", +"a39ab3a3": "bla(address)", +"a39ad747": "minVote()", +"a39b10d2": "lastBlock_a17()", +"a39d716d": "WithdrawBalance()", +"a39db022": "changeBonus(uint256,uint256,uint256)", +"a39dc9be": "HOUR()", +"a39e1149": "getSECOND_STEP_MULTIPLIER()", +"a39eede8": "settleAssets()", +"a39f7449": "startTimer()", +"a39f9712": "sendTokensAfterBuy(address,uint256)", +"a39fa2f6": "VPE_address()", +"a39fac12": "getAddresses()", +"a3a06c54": "endICOPhase()", +"a3a0b937": "transferFokenWhitelisted(uint256)", +"a3a0ee24": "evFreeze(address,uint256)", +"a3a183c1": "overflow(address)", +"a3a187cf": "TokenBought(address,uint256)", +"a3a1cd6d": "getNumberOfKnownPropertyAddresses()", +"a3a1d015": "failUserRefund(uint256[])", +"a3a27105": "stakeholderPayment(address)", +"a3a402a7": "deletefromblacklist(address)", +"a3a40323": "ArtificialNeuralNetwork()", +"a3a40ea5": "getCurrentPhase()", +"a3a4851a": "deliveryReject(address)", +"a3a48785": "unsetClaim(uint256)", +"a3a4a18b": "test_claimShares_emptyFeePool_isTranscoder()", +"a3a4ba31": "createChild()", +"a3a4c74d": "closeAutoFree(address)", +"a3a51983": "updateCurrentStage()", +"a3a5650a": "currentStageMaxSupply()", +"a3a6a43e": "approveUserKYC(address)", +"a3a6c73e": "_isIdExisted(string)", +"a3a7647c": "tier1Count()", +"a3a7b804": "changeMaxGasprice(uint256)", +"a3a7e7f3": "transferAll(address)", +"a3a81d40": "totalBGX()", +"a3a82678": "collectRef(address)", +"a3a9196a": "dexTestNormalTransfer(address,address,uint256)", +"a3a93721": "SYLVIe()", +"a3a9d67b": "AdviserCasperToken()", +"a3aa1913": "balanceDetails(address)", +"a3ab5045": "isNewTile(uint16)", +"a3aba50e": "referrerEnable()", +"a3ad1676": "isPurchasedEpisode(uint256,address)", +"a3adb958": "transferToggleRequester()", +"a3ae2f5c": "award(uint256,address)", +"a3ae88a0": "totalUSD()", +"a3b01f23": "intoverflow_add(uint256)", +"a3b0bff4": "getPersonalStakeActualAmounts(address,address)", +"a3b0c661": "setLineUpEnable_default(uint256)", +"a3b1dc52": "logEscapeHatchChanged(bool)", +"a3b2363d": "parentAddress(address)", +"a3b24dcd": "getSumsHash(address)", +"a3b2938d": "updateStatusInternal()", +"a3b2c41e": "readArticle(bytes32)", +"a3b34190": "unlockSecond()", +"a3b3fff1": "getVotingToChangeMinThreshold()", +"a3b42cba": "register(bytes8,bytes8,uint256)", +"a3b4ab48": "BBPToken(address,uint256)", +"a3b4b07f": "ACL_APP()", +"a3b6120c": "dateStart()", +"a3b61cf0": "getuserprize(address)", +"a3b62bc3": "AdminRemoved(address)", +"a3b65d29": "getarg_3()", +"a3b80993": "WorkValley()", +"a3b8cd3b": "_equipDownOne(address,uint16)", +"a3b908ff": "unusedOf(address)", +"a3b922ca": "buyPandaERC20(address,address,uint256,uint256)", +"a3b959da": "change_dev(address)", +"a3b9b8d1": "receivePaymentForOraclize()", +"a3bbc294": "galleassTransferFrom(address,address,uint256)", +"a3bbf81b": "USACOIN()", +"a3bc3fce": "getFillOrderMinGasNeeded()", +"a3bc6163": "getMessageGas()", +"a3bdc655": "getRemainingTimeTillExpiration()", +"a3be094d": "countTokens(uint256)", +"a3bef4d7": "numVotes()", +"a3bf5b9a": "revokePermission(address)", +"a3bfdf47": "closeSession(uint256)", +"a3bfe069": "_sumActivePerks(uint8[32])", +"a3c07c6a": "removeHatchingTime()", +"a3c0a477": "crowdsaleIsActive()", +"a3c1954e": "supporter()", +"a3c1d83d": "forgiveMeOnBehalfOf(address)", +"a3c28dfc": "eventExists(uint256)", +"a3c2c462": "totalReceived()", +"a3c441e7": "setAdvisoryWallet(address)", +"a3c49da0": "DollarCoin()", +"a3c50b32": "orderDetails(bytes32)", +"a3c66c1d": "notEqual(bytes32[],bytes32[],string)", +"a3c68e3d": "CancelGameAfterResultsPublished()", +"a3c86bef": "AcademyToken(address)", +"a3c88b31": "addInternalBalance(uint256)", +"a3c8ef7a": "signedByWhiteHat()", +"a3c9df3f": "plutocrat()", +"a3c9fc7d": "_withdrawTo(uint256,uint256,uint256,uint256)", +"a3ca17b2": "getUSDETHPrice()", +"a3cb3e97": "removeHatchingTimeWithToken(address)", +"a3cb679d": "getTotalBets()", +"a3cbf67d": "NewBOP(address,address,address,uint256,bool,uint256,string)", +"a3cc8b9c": "changeRateUSD(uint256)", +"a3cd2d78": "nextReward(uint256)", +"a3cd4065": "ReceiveBTC(address,uint256)", +"a3cf3ec0": "lowestAddressReserving()", +"a3d07452": "fightAuction()", +"a3d2078b": "TokenSaleOpened()", +"a3d23e52": "round2Cap()", +"a3d3a265": "setCreditBond(address)", +"a3d4e4b5": "buyItem(uint8,uint8,uint256,uint256)", +"a3d53934": "MegaToken()", +"a3d5e8e0": "_update(uint256,string)", +"a3d5ec39": "PlynToken()", +"a3d646fe": "ETHEUR()", +"a3d658dc": "extendLiquidationPeriod(uint256)", +"a3d6f9a9": "publicKeys(address)", +"a3d7bd43": "doSend(address,uint256)", +"a3d823ad": "changeORACLIZE_GAS_LIMIT(uint256)", +"a3d87805": "TerraToken(uint256)", +"a3d88453": "isAvailableAccount(address)", +"a3d8fdd5": "totalAccessorySeries()", +"a3d94402": "safeMathAdd(uint256,uint256)", +"a3d9c3d1": "ApprovalHash(bytes32,bytes32,uint256)", +"a3dab216": "setOpeningClosingTime(uint256,uint256)", +"a3dc65a7": "wipe(address,bytes32,uint256)", +"a3dc8a7a": "exrate()", +"a3dcb4d2": "receiverAddr()", +"a3dceacb": "MessageSent(uint256,uint256,string,string)", +"a3dd2619": "getCurrentStatus()", +"a3dd2b3e": "projectInfo(address)", +"a3dd3aa7": "setGBT(address)", +"a3ddc24a": "purchaseDeposit(address,uint256)", +"a3de9354": "createDividendWithCheckpoint(uint256,uint256,uint256,int256)", +"a3def923": "create(address,bytes32)", +"a3df30b4": "GIDe()", +"a3df870a": "hentaisolo()", +"a3dfc364": "StartGame()", +"a3dfcb0d": "_setUniqueValue0(uint256)", +"a3dfdf30": "read_i64_array()", +"a3e135fa": "reclaimTokien(address,address,uint256)", +"a3e14d74": "getLowerBoundBlocksTillGameEnd()", +"a3e1f666": "getCreatorMetadataOfHistoricalMetadata(string,uint256)", +"a3e20625": "giveReputation(address,bool,string)", +"a3e20d71": "transferUnPaidFundAccount(address,uint256)", +"a3e29360": "ownedTicketIdList(address)", +"a3e298d1": "VIBETPerEther()", +"a3e2b1de": "getProjectArbiter(bytes32)", +"a3e2ce24": "getTokensAndAmounts()", +"a3e31246": "setLucky()", +"a3e3a8e0": "withdrawEthPool(uint256,uint256)", +"a3e486d1": "ptc_balance(address)", +"a3e4c0c4": "setRandomizer(uint256)", +"a3e667b3": "releaseMany(uint256,uint256)", +"a3e67610": "tokenOwner()", +"a3e7061d": "getPaintingIdAtIndex(uint256)", +"a3e76c0f": "receive()", +"a3e787b5": "FITToken()", +"a3e831b4": "NewTokenFromFactory(address,address,uint256)", +"a3e860fe": "DEFAULT_RATE()", +"a3e8b6db": "MetrumcoinShares()", +"a3ea1376": "removeListingInternal(uint64)", +"a3ea478f": "setTier1Participants(address[])", +"a3eb6436": "TOKETH_PRESALE_TWO()", +"a3ebb0b3": "getConsideration(uint256)", +"a3ebeab7": "testConcatMemory4Bytes()", +"a3ec138d": "voters(address)", +"a3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", +"a3ecbc33": "DSPUnregistered(address)", +"a3efc756": "transferPreICOFunds()", +"a3f144ae": "OFFSET19700101()", +"a3f1bd35": "getDouble()", +"a3f1ee91": "RequirementChange(uint256)", +"a3f22739": "payout(uint256,uint256,bytes32,bytes32)", +"a3f2a813": "StartsAtChanged(uint256)", +"a3f2d2b5": "SZA(uint256,string,string,uint8)", +"a3f31b80": "teamPayment(address)", +"a3f36da3": "ProRataDistribution()", +"a3f3dd32": "Verifier(uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"a3f424c2": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[10])", +"a3f4df7e": "NAME()", +"a3f5a178": "approveTakeover(uint256,address)", +"a3f5c03d": "launchInvestment()", +"a3f5c1d2": "nexus()", +"a3f66b46": "newQuestion(string)", +"a3f67d6d": "playersCount()", +"a3f70ed3": "party_a()", +"a3f7c989": "enableStorage(bool)", +"a3f7e26d": "finishMintingIssuer()", +"a3f8eace": "releasable(address)", +"a3f991a5": "totalPot_()", +"a3face0b": "setInteractionPrice(uint256)", +"a3faef60": "MicroBitCoin()", +"a3fb5917": "getFirstOrder()", +"a3fb8f15": "getRaisedPOLY()", +"a3fbbaae": "changeManager(address)", +"a3fc136a": "signedApproveSig()", +"a3fc32c8": "getWLInfo()", +"a3fc81cb": "buyTokensViaBackend(address,uint256)", +"a3fca677": "LogBuy(address,address,uint256,uint256)", +"a3fcafb9": "soldCoins()", +"a3fcf9bc": "operationsPercentOfTotal()", +"a3fd6d0e": "feePaid(bytes4,uint256)", +"a3fdfee3": "deny()", +"a3fe0dc7": "userCrateCount(address)", +"a3fe70cb": "exchangeEnd()", +"a3ff0ea2": "issueAsset(bytes32,uint256,string,string,uint8,bool,address)", +"a3ff31b5": "getTokenStatus(address)", +"a3ff428e": "angelCardSeriesCollection(uint8)", +"a3ffac0d": "td()", +"a400594d": "lockAddress(address,address)", +"a4009e23": "TEST_MODE()", +"a400be54": "coinSendSameValue(address,address[],uint256)", +"a401d24d": "assignToken(address,uint256)", +"a401e585": "withdraw_privatefund(bool)", +"a4036b1c": "getAdPriceHour()", +"a4039098": "StartCompetitionEvent(uint32)", +"a4039a2a": "createNonRepeatableVpfFactory(string,bytes32,uint256,uint256,int256[])", +"a404f291": "microRate()", +"a40544c3": "notifyCancelSellOrder()", +"a4055f62": "freezeAccounts(address[],bool,bool)", +"a40668f5": "testDeregisterProduct()", +"a407db23": "GHK()", +"a407ee79": "bytes32ToAlphabetString(bytes32)", +"a4083849": "right44(uint256)", +"a4086854": "approveTransfer(uint256,address)", +"a4093718": "issueToken(uint256,uint256)", +"a4094a0d": "calculateFeeForAccount(uint256,uint256,address)", +"a409eb7b": "hasRequested(address)", +"a40a485f": "deathData_v3()", +"a40a99ac": "getInsertPointForNumTokens(int256,address,uint256)", +"a40ae4b7": "_uintToBytes(uint256)", +"a40bc352": "crowdSalePause()", +"a40c0a54": "USDGamblingToken()", +"a40c5221": "updateTokenAmount(address,uint256,uint256)", +"a40c8ad0": "addGenesisCatGroup()", +"a40cd3f3": "minContributionInWei()", +"a40cee9c": "updateIdentityImageURL(address,bytes32)", +"a40d32fe": "minPaymentAmount()", +"a40e0b91": "testGoalReached()", +"a40edb07": "processVerification(bytes32,string)", +"a40f1796": "prefixedHash(address)", +"a40fbd2b": "makeKebabs(address)", +"a410424e": "isMoneySent()", +"a4109017": "VanityTransfered(address,address,string)", +"a410a7f2": "getParticipantTickets(address)", +"a410f4b1": "changeFeePercentage(uint8)", +"a4112088": "Add_Company(uint256,string,string)", +"a412c6fc": "getRules(string)", +"a412f87c": "verifyInvestment(address,uint256)", +"a412fcc7": "defineType(string,uint8,uint8,uint32,uint8,uint32,uint8,uint32[5],uint32[5],uint32[5])", +"a413245a": "deductFromBond(address,uint256)", +"a41347e3": "usersCanTransfer()", +"a4136272": "MAX_TOKEN_SALES()", +"a4136862": "setGreeting(string)", +"a4144681": "RK40Z()", +"a414b00d": "SUNToken()", +"a414b379": "addContact(address)", +"a414e089": "Dimacoin()", +"a415833b": "numPurchasesOf(address)", +"a415965c": "refillMultiSigMintPool()", +"a415a93e": "initWithShips()", +"a415b8eb": "getCCH_edit_31()", +"a416b263": "charAt(bytes32,uint256)", +"a416b48c": "getActionCount(uint256)", +"a417357c": "unpauseTokens()", +"a419165e": "TokenCappedCrowdsale()", +"a41942a4": "transferCuratorship(address)", +"a419b0e7": "set_milestone_details(uint256,string,string,string,string,string)", +"a419f1e7": "NewPlayerAdded(uint256,uint256)", +"a41a9445": "getStopTransfer(address)", +"a41b3887": "setPrefixPrice(uint256,uint256)", +"a41b9c31": "unconfirmAddress(address)", +"a41d0584": "fixAddress(address,uint256)", +"a41da348": "fomo3d()", +"a41dedcc": "testAbs()", +"a41e61a4": "minSaleBalance()", +"a41e7d51": "updateERC165Cache(address,bytes4)", +"a41f0069": "GershToken()", +"a41fd917": "getUnprocessedQueryList()", +"a41ff1e5": "maxMintingDays()", +"a4201125": "sanToLower(string)", +"a4202504": "getPhaseSold(uint256)", +"a4202615": "makeAdoptionOfferToAddress(bytes5,uint256,address)", +"a4204e39": "getQuotes()", +"a42214b2": "cancelAuctionEmergency(uint256)", +"a422b761": "tokensIssued(address)", +"a422c0ca": "updateBonusParameters(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4230bd5": "addAdmin(address,bool)", +"a4238d31": "receiveBalanceUpdate(address)", +"a4245527": "getPaintingOriginal(uint256)", +"a424fa49": "NPXSToken()", +"a42533c8": "tubParamUpdate()", +"a4254fb4": "couponTokenBountyAddr()", +"a425b752": "destroyStake(address,bytes32,uint256,uint256)", +"a4262254": "calcFib(uint256)", +"a4268de6": "oracleItQuery(uint256,string,string,uint256,uint256)", +"a426cd19": "validPLAContract(uint32,uint32)", +"a4275535": "XTYF()", +"a4276533": "getProposalNum()", +"a427c5d9": "bonus(uint256,address[],address,uint256[])", +"a427ee36": "FruoCoinBETA()", +"a428033f": "minechaincoin(uint256,string,uint8,string)", +"a428517b": "Converted(address,uint256)", +"a4288d17": "tokensForReservedFund()", +"a429845e": "newCrowdsale(bytes32,uint256,uint256,uint256,uint256)", +"a42aa488": "checkRevert(uint256)", +"a42ac803": "getBonusAffiliate(uint256)", +"a42ad8b3": "NomuraDynamicsCoin()", +"a42b0d88": "advisorsPool()", +"a42b6bf1": "setStorageContract(address,bool)", +"a42cb160": "updatePlayerFund(uint256,address,uint256,uint256,uint256,uint256)", +"a42d630c": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a42dc008": "newKudosToken(string,string,string,uint8,address)", +"a42dce80": "setFeeCollector(address)", +"a42e16fd": "MultiSig(address[],uint256)", +"a42e36c6": "scheduleTransaction(address,bytes,uint8,uint256[5],uint256)", +"a42ea491": "MrFibreToken()", +"a42ec1bc": "reserveWallet(uint256)", +"a42ecd5c": "setRealRef(address,uint256)", +"a42ef788": "potSwap(uint256)", +"a42f126c": "charityClaim()", +"a42f1edb": "market1()", +"a42f3f9d": "getTAOCurrencyBalances(address,address,address,address)", +"a4316c46": "MarketingToken()", +"a4325485": "getCreatorBalance()", +"a43293b4": "getTransaction(address,uint256)", +"a432cdb0": "Tier_Rainmaker()", +"a432e6d6": "switchToNextPeriod()", +"a4331929": "createNew()", +"a433a0b9": "addRecordByProvider(bytes32,address,string,string)", +"a433d5c6": "IsActiveUser(address,address)", +"a433f390": "approveAndTransferFundToCreator()", +"a4341ab0": "setCount(address,uint256)", +"a4343ae9": "onContribution(uint256,address,uint256,uint256)", +"a43569b3": "getValidatorDescription(address)", +"a43655c4": "rejectRequestPause()", +"a4366a8a": "processPayment(address,uint256,uint256,uint256,bool)", +"a4368de7": "addBonus(string,uint256,uint256,uint256,uint256,string,uint256,string,uint256)", +"a437164b": "assignUserWallet(string,address)", +"a43772bd": "thirdXRChangeBlock()", +"a43796ce": "getSecretSigner()", +"a437ab52": "setDevelopersFee(uint8)", +"a437e07a": "signAuthorship()", +"a437f91f": "doDistroAmount(address[],uint256[])", +"a4381dd4": "StanleyToken()", +"a438d208": "VOTING_DURATION()", +"a43914da": "getRootEdge()", +"a4399263": "finalise()", +"a439d3fa": "ChangeOfRules(uint256,uint256,int256)", +"a43b2ed0": "Test6()", +"a43b5e46": "buyWeapon(uint256)", +"a43b7cd5": "carTaxiToken()", +"a43b92a2": "tournamentIncentiveCut()", +"a43b9423": "triggerPreJackpotLimit()", +"a43be57b": "endPresale()", +"a43c49fc": "mul16(int16,int16)", +"a43c5415": "lastBlock_a3Hash_uint256()", +"a43c6002": "getTokensByGame(uint32)", +"a43cbe1c": "setThirdPartyDepositorDisabled(bool)", +"a43d12a7": "getParticipantesB()", +"a43d76e9": "isValidPrice(uint256,uint256)", +"a43d8654": "getSeason(uint256)", +"a43dc510": "yesBuyer(uint256,uint256)", +"a43e04d8": "removeContract(bytes32)", +"a43e0c2b": "calclulateBonus(uint256)", +"a43ea59b": "PublicSale(address,address,address)", +"a43fecbc": "setUsername(bytes16)", +"a4406bcd": "placeSellOrder(uint256,uint256)", +"a44081d1": "startPhase1()", +"a440a190": "getKeyPrice()", +"a440b21a": "setPortfolioManager(address)", +"a440dd87": "sigExists(bytes32,address)", +"a441698b": "getStockOrderInfo(bool,uint256,uint256,uint256)", +"a441c302": "operationAddress()", +"a442414f": "sumInvested()", +"a4425c55": "lastInvestorsProfitSum()", +"a442b824": "respawnGame()", +"a442d820": "verifyExtraData(bytes32,bytes32,uint256)", +"a4430321": "eachPUSTprice()", +"a4438334": "updateSettings(uint256,uint256,bytes32)", +"a4439890": "sweepUnallocatedDividends()", +"a4439dc5": "commitPeriodActive(uint256)", +"a444502b": "whitelistAccount(address,uint256)", +"a4447515": "getMakerBetBasicInfo(uint256,address)", +"a444ae41": "sourceContract()", +"a444f5e9": "run(uint256)", +"a4453336": "depositGTA(uint256)", +"a4453a96": "totalBuyersMapping()", +"a4453ecf": "splitEth()", +"a445dc5a": "tokensBoughtWithBTC(address,uint256)", +"a445f30d": "setFeeDistributionAndStatusThreshold(uint8,uint16[5],uint256)", +"a4464252": "priceUnitFix(uint256)", +"a447089e": "eniggerToken()", +"a447405e": "_getTravelPrice(address,uint256)", +"a447ff4f": "DXContracts()", +"a4482f41": "setUniquenessIndex(uint32)", +"a448afda": "BalanceChanged(address,uint256)", +"a448f8e0": "OuterContract()", +"a449a62e": "setDSTWalletLMNO(address)", +"a44a00c3": "areTokensSold()", +"a44b1756": "getMyDrugs()", +"a44b47f7": "TotalSupply()", +"a44b6b74": "setColor(uint256,string)", +"a44cff28": "CypressOrganization(bytes,uint256)", +"a44d0eb3": "MAKJLEB()", +"a44da065": "NigerTokenICO()", +"a44dd0f1": "ico2Cap()", +"a44de4e7": "decreaseStepPct()", +"a44e09db": "wadmin_burn(uint256,bool)", +"a44ead73": "ApplyforCertification(string,string,string,string,string,string)", +"a44eda3c": "checkWithdraw(address,uint256,address)", +"a44f40e3": "optionPoolMembersUnlockTime()", +"a4502cb8": "setExportFee(address,uint256)", +"a45066e5": "SingularityTes25()", +"a4516bb1": "SnapshotTaken()", +"a4516fad": "currentGameNumber()", +"a4520aee": "collect(address[])", +"a45230ec": "get_amount_sell(uint256)", +"a4530b4b": "testUpdateProgress()", +"a4534ef7": "remainingSupply_()", +"a453b639": "wuguAddr()", +"a4546876": "roots(address)", +"a454b07b": "checkString(string)", +"a454c5dc": "unlockStep()", +"a45563ed": "UpdateSellAgentBounty(address,address)", +"a4563e03": "totalPendingWithdrawals()", +"a4575296": "pepFarm()", +"a457c2ae": "clientSeed()", +"a457c2d7": "decreaseAllowance(address,uint256)", +"a457e1c0": "purchaseAsset(uint256)", +"a457f27f": "card_titanium_minamount()", +"a45858b6": "setzUint256Array(uint256[2],int256)", +"a458e34f": "setNewContractManager(address)", +"a459ae28": "collectSellFee(address)", +"a45a7371": "executeUpdateTransferFeeRateProposal(uint256)", +"a45b1795": "getAllCardsModifierSecondaryVal()", +"a45c793f": "restore(uint8[176],uint8,uint8)", +"a45cbbf4": "sendAdvisorsTokens(address,uint256)", +"a45cd953": "canPurchase(address,address,uint256)", +"a45d82bd": "signArchive(bytes32,string,string)", +"a45e11ab": "orderMatchBuy(uint256,uint256,uint256,uint256,uint256)", +"a45e1a6e": "getTokenCounters(uint256)", +"a45e7cb5": "addEntry(string,string,string,string,string,address)", +"a45ee32c": "nameOfIdentity()", +"a45f2057": "caltoken()", +"a45f4bfc": "kittyIndexToOwner(uint256)", +"a45f5685": "setOwnerEarnings()", +"a45f71ff": "increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", +"a4604a33": "changeBuyFeePercent(uint256)", +"a460b817": "updateTicketStatus(uint256,uint8)", +"a460bd6c": "presaleRemaining()", +"a4618691": "squak()", +"a4619682": "registerWithDAI(uint256,address)", +"a461cadf": "WHOLE_ETHER()", +"a461fc82": "SELFDESTRUCT_DELAY()", +"a4620d67": "shareholder3()", +"a4623cc4": "addHero(string,address,uint256)", +"a462f87f": "AICoinToken()", +"a462fb7b": "getFinalAnswer(bytes32)", +"a4633704": "NotifyMe(address,address,uint256)", +"a463685f": "AllocatedCrowdsale(address,address,uint256,uint256,uint256,address)", +"a463a500": "setUpgradeHasBegun()", +"a464d265": "editor()", +"a4659ba2": "stakeConfirmed_Eth()", +"a465e6ba": "committeeKickVoters(address,address)", +"a46841e1": "cnyEthRate()", +"a4689d48": "getroundendtime()", +"a4699cad": "resetWithdrawls()", +"a469b809": "getBetAmount(bytes32)", +"a469e5aa": "getOwnerItemIds(address)", +"a46a1219": "AcceptRouting(bytes32,bytes32,uint256,bytes)", +"a46a891e": "fromBase(uint256,bytes8)", +"a46a96d9": "calculateRegionSalePixelPrice(address[16],uint256)", +"a46afef1": "getSponsoring(uint32)", +"a46b3e9b": "treasuryDemurrageAmount(uint256)", +"a46b6593": "sendCandy(address)", +"a46b8171": "excToken()", +"a46c3637": "getWinnerCount()", +"a46c792c": "assignAgent(address)", +"a46c8fee": "ItdFund()", +"a46d11dc": "gType()", +"a46dfb45": "ResolveChips(uint32[])", +"a46efdb5": "getTokensForPreSale(uint256,uint256)", +"a46f3c7a": "getLiveMaxBet()", +"a46fbe1a": "fulfillEthereumChange(bytes32,int256)", +"a46fe83b": "numAssets()", +"a47001a8": "receiveEthPrice(uint256)", +"a470afa7": "Evernal(address)", +"a47255d7": "TimeWeekThree()", +"a472969c": "WithdrawFee()", +"a472c868": "_storeReward(address,int32)", +"a4754fac": "getValidated(uint256)", +"a475b5dd": "reveal()", +"a476f3d3": "demurringFeeNum()", +"a4776955": "setselfdroptoken(address)", +"a4785dfd": "ecverify(bytes32,uint8,bytes32,bytes32,address)", +"a47905cd": "getBondMultiplier(uint256,uint256)", +"a47abd0f": "testIsSuccessful()", +"a47ae542": "getCurrTotalInvest()", +"a47ae71f": "getCurrTypePrice(uint256)", +"a47b1a6c": "getContractsAddrs(address,address)", +"a47c4d64": "isAllocated3()", +"a47c6b84": "cofounderSwitchAddress(address)", +"a47c84bd": "getShiftedTokens(address,uint256)", +"a47ce954": "bonussale_TokenCap()", +"a47e7110": "AnnoMedal()", +"a47e713c": "ACCToken()", +"a47f519b": "CPCE()", +"a47fcc7c": "proposePartnerAllocation(address,uint256)", +"a4800172": "buyDiscountTTMByETH(uint256,address)", +"a48028aa": "valueOf(address)", +"a480ca79": "collectFees(address)", +"a481247c": "isKeyExist(address,address)", +"a48205cb": "emaValue()", +"a4821719": "buyToken()", +"a48255b7": "nextPVPBatleBlock()", +"a4828bca": "TrineChain()", +"a48296d9": "purchasePhoenix(uint256)", +"a484f413": "payJosh()", +"a48515fc": "castConstitutionVote(uint8,address,bool)", +"a48566ba": "serverSeed(address,bytes)", +"a487bcd8": "winners()", +"a487fd07": "ethFundsWallet()", +"a4893536": "_bonusToBettor(uint32,uint8,uint256)", +"a4898fd5": "deployContract(address)", +"a489a2c7": "sanityBounds()", +"a48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", +"a48bdb7c": "results()", +"a48be00b": "activateTokensForJury(uint256)", +"a48c98dd": "deployerAmount()", +"a48cef4a": "oracleInterfaceCountdown()", +"a48d9e70": "getIcoSupply()", +"a48de68b": "createPromoHero(uint256,address)", +"a48e1ff7": "BonusWithdrawn(address,uint256)", +"a48fb972": "_sendReward(address,address,uint256)", +"a49062d4": "MAX_LEVEL()", +"a490a697": "totalBadges()", +"a4923b8f": "placeIndexToOwner(uint256)", +"a492ef60": "Participant(string,address)", +"a4935f1f": "_tokenMetadata(uint256,string)", +"a4938313": "getAdvancedTransfer(bytes32,uint256)", +"a493b39f": "getAdPriceWeek()", +"a494411c": "allocateTokenForAdvisor(address)", +"a4945a07": "ftestnetico()", +"a494817b": "setIdle()", +"a4951771": "MeshPoint(string,address)", +"a4952f19": "LogPolicyPaidOut(uint256,uint256)", +"a4952f80": "getBytesName(string)", +"a49545ec": "useTokens(address,address,uint256,uint256)", +"a495c942": "set_topl_address(address,address,uint256)", +"a4963c0b": "SAPOVAM(address,string,string,uint256,uint256)", +"a49687d1": "stage4Deadline()", +"a4975aff": "raiseNumberOfCheckmarks(uint256)", +"a4978a15": "applyLOT(uint256)", +"a497d8c6": "privateTokenCap()", +"a497e674": "setAuctionDuration(uint256)", +"a4983079": "transferBalanceForPreSale(address,uint256)", +"a49886ce": "testToBytes32(bytes)", +"a4997fac": "propertyAddressOf(uint256)", +"a499bc4a": "DECEX()", +"a49a1e7d": "setMetadata(string)", +"a49a42e1": "CrytoWorldCup()", +"a49bb55c": "currentRoundMultiplier()", +"a49c2bbb": "getBeneficiaryCash(bool)", +"a49cc76c": "createCurrency(string,string,uint8,uint256,string)", +"a49d03bc": "privateSell1Address()", +"a49d53a1": "SmartRevshare()", +"a49d6be2": "shekel()", +"a49e0ab1": "complex()", +"a49e4540": "mintCapInETH()", +"a49ea0ab": "rankOf(bytes)", +"a4a01e33": "payoutRewardsFor(address)", +"a4a0d801": "valueOfContract()", +"a4a1485b": "createEthInvestorRequest(uint256)", +"a4a1a78d": "CertAdminAdded(address)", +"a4a1a9bc": "fightTeams(uint16,uint8,uint8)", +"a4a1e263": "getUsersCount()", +"a4a249d6": "quicksort(uint256[])", +"a4a2a9f6": "init(address,uint256,uint256)", +"a4a33638": "NAST()", +"a4a339ee": "doMint(uint256)", +"a4a3513c": "Accelerate(uint256)", +"a4a46f45": "LOG_InvestorEntrance(address,uint256)", +"a4a47582": "Pyrgressive()", +"a4a4c224": "setAngelLastBattleTime(uint64)", +"a4a5a46e": "EUNO()", +"a4a5e241": "setPrizeEndTime()", +"a4a5f550": "price_exponent2()", +"a4a6795a": "ReserveSupply()", +"a4a68e44": "userlogin(address)", +"a4a691ce": "parseResultCompatible(bytes)", +"a4a75c6e": "tokensSoldAmount()", +"a4a75edc": "registerDeal(address,address)", +"a4a7cf5c": "redeemWinnings(bytes32)", +"a4a83317": "emitChange(bytes32)", +"a4a85b22": "fund(address,address)", +"a4a8f8ea": "migrationHost()", +"a4a92dd0": "_createToken(string,address)", +"a4a94567": "setTokenContract(address,address)", +"a4aac6ec": "diff(int256[])", +"a4ab3e45": "buyerAddressTransfer(bytes32,address,address)", +"a4ab69cd": "cancelBuyOffer(uint32)", +"a4ac3e7d": "FrozenFu(address,bool)", +"a4acbcd6": "pregnantpuppies()", +"a4ad1a5f": "verEntidades()", +"a4adb24b": "createCourse(string,string,uint256)", +"a4adc2f7": "freezeTokens(uint256)", +"a4adc431": "fechVoteResultForCandidate()", +"a4adcde3": "getSingleGuessInfo(uint32)", +"a4ae32fd": "sampleBool(bool)", +"a4af1d1a": "totalPublicSaleStage()", +"a4afaeb0": "AutoKen()", +"a4b03f52": "internalLockAccount(address)", +"a4b06df2": "heapSort(uint8[])", +"a4b0a36f": "exchangeRateUSDToToken()", +"a4b159c0": "benefitMicros()", +"a4b16449": "transferTokensFromRetailersAddress(address,uint256)", +"a4b195ff": "numVoters(uint256)", +"a4b1b020": "transferLockedTokensBackToUser(uint256)", +"a4b1ce55": "scheduleCall(address,address,bytes4,bytes,uint8,uint16,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4b31eb1": "bitWatt(uint256)", +"a4b32bd7": "modifyRent(uint256)", +"a4b3b042": "RDXToken()", +"a4b48828": "getOffer(address,address)", +"a4b52ef2": "hgt()", +"a4b5fa56": "blacklist()", +"a4b7459a": "transferFromToICAPWithReferenceCallGas()", +"a4b7f5ce": "resolutions(uint256)", +"a4b8a543": "sacarETH()", +"a4b8c2e7": "restart(bytes20,bytes32)", +"a4b910fb": "WithdrawToken(uint256)", +"a4b916e2": "mintB2BC(address,uint256)", +"a4ba2971": "addMemoryImageSlice(uint256,bytes)", +"a4ba5bdb": "Leonidas()", +"a4bad0ae": "vestingsBalance(address)", +"a4bb1324": "initGame(address,uint256,bytes32,bytes32,bytes32)", +"a4bb252e": "LogGameCreated(uint256)", +"a4bb43d2": "Beonbox()", +"a4bbded4": "MAX_ICO_SUPPLY()", +"a4bbf1a7": "LAUCHCONTRACT()", +"a4bc51d4": "PrivateSocialPlatform()", +"a4bce83c": "CSCToken()", +"a4bd7a20": "currentBoundary()", +"a4bd7b8d": "countApproval()", +"a4be2ea2": "HardClear()", +"a4be64a4": "warriorBlock()", +"a4beda63": "lockTime(address)", +"a4bef732": "userCancelOrder(address,address,uint256,uint256,address)", +"a4beffa7": "increaseInvestment()", +"a4bf594b": "CORENETCOIN(uint256,string,uint8,string)", +"a4c089be": "debug_finalizeBundleIPFS(bytes32,string,bytes32)", +"a4c0ed36": "onTokenTransfer(address,uint256,bytes)", +"a4c0fd51": "onlinenewsbalita()", +"a4c1e9c0": "depositToUser(address)", +"a4c3dfa4": "buff()", +"a4c3e789": "RUB_Omnidollar()", +"a4c44074": "setCashbackManager(address)", +"a4c4dfea": "WGNToken()", +"a4c4f172": "_arrayContains(uint8[],uint8)", +"a4c5bf66": "removeSkipPrice(uint256)", +"a4c64d78": "getContractDividends()", +"a4c6569b": "isWhiteListed(bytes32)", +"a4c673c5": "pauseInvest()", +"a4c6fcde": "allowEscrow(bool)", +"a4c756c7": "tokenAllocToTeam()", +"a4c7c7b3": "partner1()", +"a4c89322": "ethToTokens(uint256)", +"a4c8b35d": "moneyManager()", +"a4c93cab": "setDistributionSize(uint256)", +"a4c97967": "proof_of_public_key()", +"a4c9b0ca": "deleteTx(bytes32)", +"a4c9bb28": "VLOGCoin(uint256,string,string)", +"a4ca80be": "lockFile()", +"a4cae72b": "_createEtherDog(uint256,uint256,uint256,uint256,address)", +"a4caeb42": "periods()", +"a4ccd1ba": "breakevenLevel()", +"a4cdbd14": "changeSwapLifetimeLimits(uint256,uint256)", +"a4ce48c0": "addProposal(bytes32,uint256,bytes32)", +"a4ce8683": "create(string,string,uint8,address,string,address)", +"a4d1f29f": "BifrostToken()", +"a4d22c13": "enableDonation()", +"a4d28b62": "getMedalsBurned(uint16)", +"a4d33646": "setELIXAddress(address)", +"a4d4f070": "get_token()", +"a4d55686": "totalEthFundRecieved()", +"a4d575ce": "_forward(address,bytes)", +"a4d5a3a5": "airdropAmount(uint256)", +"a4d5a519": "TXwithCode(bytes32,uint256)", +"a4d5e30e": "removeHatchingTimeFee()", +"a4d66daf": "limit()", +"a4d66f1e": "calcReleaseToken(uint256)", +"a4d67d63": "finishGenerating()", +"a4d69fd3": "payoutMethodABI()", +"a4d6bb2b": "latestPayout()", +"a4d714c7": "addressToBytes2(address)", +"a4d72886": "PRE_ICO_RISK_PERCENTAGE()", +"a4d755ff": "setFactoryName(uint256,string)", +"a4d82f95": "Wallet6()", +"a4d840a8": "getInvestorInforMax(uint16)", +"a4d8b40a": "order2Shares(uint256)", +"a4d904ba": "foundersStake()", +"a4d91b02": "createtoken(string,string,string,string,string,string)", +"a4d924b6": "extractableFraction()", +"a4d95c76": "setRobotCoinContract(address)", +"a4d97569": "ACLYDCoinContract()", +"a4d99522": "setCryptaurRecovery(address)", +"a4da79a7": "_tokensOfOwner(address)", +"a4db2e9a": "initDao(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4db8c73": "BieberToken()", +"a4dbafbb": "batchReturnTokens(uint256)", +"a4dbbbf1": "joinWithCandy(address,uint256,uint256)", +"a4dd73cd": "isMinimumValue()", +"a4ddf312": "numberOfPunksToReserve()", +"a4de3c19": "setFeeAccount(address,bool)", +"a4de64c4": "isFundedMini()", +"a4df0758": "isClaimed(address,address)", +"a4df320d": "end_LOCKUP()", +"a4df6c6a": "freezeTokens(address,uint256)", +"a4df8ca1": "See_TokenPurchaser_Number()", +"a4dff0a2": "zzz()", +"a4e01230": "RamenContract()", +"a4e02fcc": "transferProfit(address,uint256)", +"a4e24173": "getUsersArtefactsIds()", +"a4e2d634": "isLocked()", +"a4e3374b": "transferDelegated(address,address,uint256)", +"a4e339c1": "validate(address,uint256,bytes32,bytes,bytes32)", +"a4e360c8": "getApprovals(uint256)", +"a4e4a7bb": "avatar(address,bytes)", +"a4e6dd3a": "coinDrain()", +"a4e85358": "getTEth(uint256,uint256,uint256)", +"a4e8e360": "enterFreeRaffle(uint256[],uint256)", +"a4e9bcb8": "vxtestPrivateSale(address,address)", +"a4ea471f": "getBoardRowDetails(uint256,uint8)", +"a4eacb34": "removeFromBountyProgramMap(address)", +"a4eaec5f": "targer()", +"a4eb5710": "needReleaseFor(address)", +"a4eba44d": "setPriceCoolingPeriod()", +"a4ebf74d": "CorsariumAccessControl()", +"a4ec0620": "getAllCoins()", +"a4ec11b1": "getStepFunction(uint256)", +"a4ece52c": "pop()", +"a4ed22b6": "testInsertLawyer()", +"a4edff47": "addNote(string)", +"a4ee7c18": "_computeCommission(uint256)", +"a4eed4dd": "setupWhitelist(address,bool)", +"a4ef2cbb": "setWhiteListAgent(address)", +"a4efc580": "lastPriceCheck()", +"a4f0d9b1": "setCut(uint256,uint256)", +"a4f15498": "projectedPrizeForPlayer(address,uint256)", +"a4f2613d": "bid(string,string)", +"a4f28bdd": "fundingMinInEth()", +"a4f29aad": "setTokenName(string)", +"a4f35b65": "minTransfer()", +"a4f3fa10": "getToday()", +"a4f4662f": "getOwnersTokenIndex(address,uint256)", +"a4f5b8c1": "bonusCreationRate()", +"a4f63ec8": "setBytesArrayIndex(bytes32,uint256,bytes32)", +"a4f6d5ce": "BeeGims()", +"a4f7c2b7": "getLeftChildI(uint256)", +"a4f82f27": "allocationOf(address)", +"a4f89235": "SALE0_CAP()", +"a4f91a2e": "remainingOwner()", +"a4f927d5": "certifyAccount(address,bool)", +"a4f939a1": "_touched(address,address)", +"a4fa75cf": "StartIcoStage()", +"a4fa8d57": "reward(uint256,uint256)", +"a4fac56e": "rateForOnePTM(uint256)", +"a4faf89e": "incentivesOut(address[],uint256[])", +"a4fd3cea": "getToken(uint256,uint256)", +"a4fd6f56": "isEnded()", +"a4fda741": "usedResidualAmount()", +"a4fde8bc": "player_declare_taking_too_long()", +"a4fefad6": "_currentSupply()", +"a4ff83f5": "warriorsByPlayer(address,address)", +"a4ffd7fa": "noOfICOPhases()", +"a5007da7": "openEgg(uint256,uint256)", +"a50097f2": "getUserEthVolumeSaldo(address)", +"a501123d": "doRollBet(uint256,uint256,bytes32,bytes32,bytes32)", +"a501553e": "getAssetLength()", +"a501ab39": "sendToMe()", +"a501e88d": "Content()", +"a5021a17": "getNodePrice()", +"a5025222": "addressExists(address)", +"a502aae8": "getNextGenerationId()", +"a502bfbd": "invest(address,uint256,bytes)", +"a503473a": "mul2Assert(uint256)", +"a50395cf": "totalPetCardSeries()", +"a504bd0d": "nextTradeEvent()", +"a50569b7": "addUNISSUEDBALLOTPAPERS(uint256,uint256,uint256,uint256,uint256)", +"a50643b7": "getPrizePoolSize()", +"a506e5dc": "transferLand(uint256,uint256,address)", +"a5075567": "RegistrationAntique(bytes32)", +"a50776dd": "managementLocked()", +"a507afd5": "burniEther(uint256)", +"a508ae0f": "P2TCToken()", +"a508dd1d": "OldCanYaCoin()", +"a509b030": "recentActivityIdx()", +"a50a1fe6": "remainingAmount()", +"a50b21c8": "getInputData(uint256,uint256)", +"a50c386a": "exFeeRate()", +"a50cd8e7": "votesFor(address)", +"a50cf84e": "ICO_PHASE2_PERIOD()", +"a50d81c7": "mintForOwner(address)", +"a50e20c1": "checkProfit(address)", +"a50ec326": "deposite()", +"a50ed19b": "setCooldown(uint256,uint256)", +"a50edca0": "fiat()", +"a50f2a25": "AirdropSingle(address,uint256)", +"a510921e": "SaleStop()", +"a510f776": "setCompany()", +"a510fd2b": "returnBetFromGladiatorBattle(uint256)", +"a512fb25": "Purchased(address,uint256)", +"a5135634": "avalibleSTCTokens()", +"a51548a1": "CryptoPainting()", +"a515aaeb": "cdFee()", +"a5171828": "MillionDollarToken()", +"a5177400": "minimumContributionPhase3()", +"a5181756": "AdameToken()", +"a519419e": "depositoryDelegate()", +"a51a38cf": "MasharibCoin()", +"a51a6054": "roundLeader()", +"a51a8682": "saleTransfer(address,uint256)", +"a51ad03f": "isFirstYear()", +"a51aea2d": "changeMaxMultiplier(uint256)", +"a51af4c5": "distributorAddress()", +"a51b79e3": "changeYumAddressTo(address,address)", +"a51ba542": "deleteMonsterIndexToApproved(uint256)", +"a51bb77a": "getInvoiceHashAddresses()", +"a51d5924": "transferMain(address,address,uint256)", +"a51d5f02": "RemoveOwners(address[])", +"a51db46b": "changeDX(address)", +"a51e62a1": "developmentAuditPromotionWallet()", +"a51e81bb": "TRexCoin()", +"a51f3782": "investor_getMediumInfo(address)", +"a51f41a0": "setConfig(uint256,uint256,string,string,uint256)", +"a51fbb3f": "approveTokensWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"a51fe113": "start(uint256,uint256,address)", +"a52079ea": "balanceBlocksIn(address,uint256,uint256)", +"a521036c": "feePaymentEnabled()", +"a5214f77": "setContext(bytes32,address)", +"a521ebfa": "refundPresale(address,uint256)", +"a521f09f": "Greenbow()", +"a522ad25": "withdrawTokens(address,address)", +"a523b88a": "like()", +"a524ce4f": "deliverPresaleTokenToClient(address,uint256)", +"a525663a": "updateOwnerProprietaryData(uint256,string)", +"a525f42c": "transferFromToICAP(address,bytes32,uint256)", +"a526c826": "ICOBuyer(address,address,uint256,uint256)", +"a526f74f": "PRICE_AFTER_SOFTCAP()", +"a527096e": "preallocate(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a5289158": "end(address,address)", +"a528cb4f": "currentNumberOfRares()", +"a528fec4": "setSecureFees(bool)", +"a5290f74": "phase_2_rate()", +"a5294f93": "CryptoTradeToken()", +"a5295ae4": "AaaToken(uint256,string,uint8,string)", +"a5298955": "setAllHatchConfigs(uint32[],uint256,uint32[])", +"a52a0f8e": "getIntervalCoefficientMultiplier(uint256,uint256,uint256)", +"a52b121e": "faucetThresholdSecs()", +"a52b2b88": "hasWon(address)", +"a52b904b": "ScoreToken(string,uint8,string,string)", +"a52bc175": "Essential()", +"a52c0512": "getNumIncorrectDesignatedReportMarkets()", +"a52c101e": "send(uint256)", +"a52c11a6": "setBalance(uint8,address,uint256)", +"a52c34c3": "shopSettings()", +"a52c9efd": "updateIncrease(uint256)", +"a52cf5a4": "HanlinTestToken(string,string)", +"a52dc2e7": "blockN()", +"a52e6180": "setDiamondAuctionAddress(address)", +"a52ef9b0": "look_for_node(address)", +"a52f365a": "dissmisPurse(uint256)", +"a52f89fa": "nujaBattleTransfer(address,uint256)", +"a5304fc3": "ownerSetJpMinBet(uint256)", +"a5313069": "StairStepDecayingTokenFunction()", +"a53260c1": "migrateEthers()", +"a53290ab": "getClassTransformInfo(uint32)", +"a53324b5": "mint(uint256,string,uint8,string)", +"a53367dc": "ICOBuy()", +"a533daf7": "investmentPositions()", +"a533fb8d": "_mintToPool(uint128,uint256,uint128)", +"a534150c": "feePpm()", +"a536ae38": "payBidAllocationFee(bytes32,uint256)", +"a536cffd": "assertEq6(bytes6,bytes6,bytes32)", +"a536dbe8": "getCurrentPrice(uint256,uint256,uint8)", +"a5374005": "paymentsProcessor()", +"a537b716": "applyWithdraw(address,uint256)", +"a53818ca": "setNodeAllocation(address)", +"a53830e3": "numVotes(address)", +"a538d287": "getMinMax()", +"a53a1adf": "approve(bytes32)", +"a53a4747": "setOperatingCost(uint32[5])", +"a53aeb4e": "accumulate()", +"a53b1c1e": "setInt256(int256)", +"a53bfcf5": "varTokenAllocation(uint256)", +"a53c6dd4": "splitComissions(uint256)", +"a53c7b45": "setGameStatus(bool,string)", +"a53cb8ca": "setWhitelistTokens(address,bool,uint256)", +"a53d5205": "stepTwoLockEndTime()", +"a53d66e4": "changeAuxPartner(address)", +"a53ec007": "changeAirLimitCount(uint256)", +"a53f0e14": "addGrant(address,uint256,bool)", +"a53f138a": "updateTeamsTableAttributes(uint256,uint256,uint256,uint256)", +"a54016a0": "set_price_in_micro_ether(uint256)", +"a5403b3b": "secondaryLedgerCount(string,address)", +"a540db73": "triggerCooldown(uint256)", +"a5410a66": "kycVerified(address)", +"a5417f64": "decreaseICOEndTime(uint256)", +"a541a2a2": "projectCreator()", +"a5422d8a": "mineSoul()", +"a542a02f": "lookupAllSprites(uint256)", +"a542c3d7": "stageDevelop()", +"a54315fd": "SetBuyoutPrice(uint256,uint256)", +"a543a7e5": "addLockUpData(address,uint256[],uint256[])", +"a543bae7": "createSwap(bytes20,address)", +"a5440fa0": "GetAll()", +"a54447aa": "purchaseCard(uint256)", +"a544594e": "donateDAI(uint256)", +"a544805c": "CentralityGiftShop()", +"a544f062": "finanReserveWallet()", +"a54527d5": "AllSpringChainToken()", +"a54580f2": "drive()", +"a545ff0c": "withdrawRemainingEthAfterAll()", +"a5460352": "_validatePurchase(address,uint256,uint256)", +"a54677e3": "getOptionTitleForPoll(uint256,uint256)", +"a5468081": "Pyramid(address)", +"a546cbf7": "core(uint256)", +"a546f2e7": "changeNewHDX20Contract(address)", +"a5473276": "slice(uint32[],uint8,uint8)", +"a5473f78": "withdrawOrderRefundToOrder(uint256)", +"a54799bd": "Person(string,address)", +"a547adce": "lastBlock_f16()", +"a547ec4c": "setTime(uint256,uint256,uint8)", +"a548617c": "SampleCrowdsale(uint256,uint256,uint256,address,uint256,string,string,uint8,uint256)", +"a5488a37": "allowTransactions()", +"a54940b1": "Devable()", +"a5496781": "NamiMultiSigWallet(address[],uint256)", +"a5496e60": "newProposal(uint256,string,string,uint256,uint256)", +"a549ac10": "mintNFTForSale(uint256,string,uint256)", +"a54a2b8b": "testBlockHashFetch()", +"a54b2a73": "burnPool()", +"a54baeda": "removeAllowedLock(uint256)", +"a54c03e2": "distributeStakingShare(bytes32,uint256)", +"a54c2a9a": "removeListing(uint64)", +"a54cd4f7": "minParticipants()", +"a54d396e": "internalAction()", +"a54e1ec4": "SubpreferToken()", +"a54efb1e": "BKB()", +"a54ff9ac": "downvotePost(bytes32)", +"a5500c30": "setAirdropAmount(uint256)", +"a5502b01": "Total_Players()", +"a550f86d": "named(bytes32)", +"a5512db0": "setTSTC(address)", +"a5513af5": "checkPrevOwner(bytes32)", +"a55168ea": "SendEtherToAsset(uint256)", +"a551878e": "fix()", +"a551de87": "MonethaAddressSet(address,bool)", +"a55231f4": "declareEmergency(string)", +"a552c8a0": "LogSendFail(uint256,bytes32)", +"a553506e": "checkData(bytes32)", +"a5536fe7": "mutable()", +"a553748e": "listingActive(uint256)", +"a5537586": "conversionOfferedAt()", +"a553a597": "configure(uint256,uint256,uint8,address)", +"a553c4d2": "tier2LOT()", +"a553e1da": "getUserTokensCount(address)", +"a5541ca2": "AICT()", +"a554a72e": "POINTS_TO_SPEND()", +"a55526db": "touch()", +"a55545a9": "EthVocToken(uint256,string,string)", +"a556a057": "ZAPAX()", +"a557f834": "month24companyUnlock()", +"a558410a": "test_twoValidEqUint(int256)", +"a5584456": "addDiscount(address,uint256,uint256)", +"a559217c": "raisedEther()", +"a5595683": "lockBalance(address,uint256,uint256)", +"a559ec20": "upgradePendingExchange(address,uint256)", +"a55a2577": "addHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"a55b13c8": "validOtherSource(string)", +"a55bbff9": "setDatePayout(address,uint256)", +"a55bfdc4": "getPhasesCount()", +"a55c51d8": "havven_escrow()", +"a55c974f": "tokenXstepCAP()", +"a55cab95": "getName(uint8,uint8)", +"a55cc1cc": "newTokenWeiPrice()", +"a55cd51c": "updateMaxBet(uint256)", +"a55d260d": "depositNoRef()", +"a55deccb": "locked(address[],uint256[])", +"a55e9370": "getDateCount()", +"a55ec39d": "BulkTransfer(address[],uint256[])", +"a55ee823": "BYN()", +"a56024d8": "deleteUserForUser(string,uint8,bytes32,bytes32)", +"a5603f02": "getCurEarlyIncomeByAddress(address)", +"a5609ab5": "enableDepositTo(bool)", +"a560a956": "duelAnotherCovfefe(uint256,uint256)", +"a5613724": "Start1()", +"a561b1c2": "executeBatchTransfer(address[],uint256[])", +"a56226ef": "officialApplicationSignUp(string)", +"a5622c94": "xEURCoin()", +"a5627d32": "callDeposit(uint256)", +"a564871f": "ctWallet()", +"a56539a4": "_addLock(uint256,uint96,address,uint256)", +"a565efff": "countWinners()", +"a566d383": "softCapCHF()", +"a5670c80": "get_sale_arbits_per_ether()", +"a56793ae": "addCoin(uint256)", +"a567d371": "prepareForRefund(address,address)", +"a568907a": "SUCToken(address)", +"a568a09d": "BuyShareWithDividends(uint32,uint256,uint32,address,address)", +"a56a1de0": "Mortal_HelloWorld()", +"a56b3d11": "setNewCdFee(uint128)", +"a56b60ee": "_removeFromBlacklist(address)", +"a56be205": "developer_new_price(string)", +"a56befd1": "required_number_players()", +"a56c2ac0": "totalWeiRefunded()", +"a56c5be1": "WithdrawConfirm(uint256,uint256)", +"a56d1de3": "valueOfVault(uint256,address)", +"a56d7601": "getPlayerTickets(address,uint256,uint256)", +"a56d96bb": "unmint(uint256,string)", +"a56d9dda": "getCosigner(bytes32)", +"a56dfe4a": "y()", +"a56e7213": "unpausePending()", +"a56e7bae": "getTitleAddress(uint256)", +"a56f2d5f": "AutoMOBILEtoken()", +"a56f5b53": "withdrawDonations(address)", +"a56f9bea": "KarTokenERC20Advanced(uint256,string,string)", +"a5705d17": "performUpdateStackPtr()", +"a57229bd": "linkToNewHouse(address)", +"a572ba41": "CEL(uint256,string,uint8,string)", +"a5731c1c": "getTXSAddress(uint256)", +"a57366e7": "changeSubcourtJurorsForJump(uint96,uint256)", +"a573a9f4": "Bilateral()", +"a57429e2": "getWinConditionInLibra(bytes32)", +"a5749710": "getCurrentBalance()", +"a574cea4": "getMetadata(uint256)", +"a5752034": "changeRound(uint256,uint256,uint256,uint256)", +"a57544da": "right36(uint256)", +"a5758552": "redeemTokens(address)", +"a5766aa6": "setFeePercentage(uint8)", +"a577efd4": "closePot(string)", +"a578ae32": "getApprobation(uint256,address)", +"a578e38a": "RadiumSupply()", +"a5790bde": "toBytes1(bytes)", +"a57918dc": "ptc_addr()", +"a579349a": "currentStageRemainingJM()", +"a579e461": "SetAdminContract(address,address)", +"a57a84a6": "sendPending()", +"a57b54b7": "excTx(uint256)", +"a57c0919": "update(uint256,uint8,address,address,string,string)", +"a57c6e86": "sellTokens(address,uint256,uint256,address,bytes)", +"a57ce52f": "_removeKeeper(address)", +"a57d1560": "lottery(uint256)", +"a57d814b": "MONACOESTAT()", +"a57e768c": "SetLockAddress(address,bool)", +"a57f57f8": "TBToken()", +"a57f59c0": "getMatchInfoList02()", +"a57f6500": "readCTDdata(uint256)", +"a5804521": "StateChanged(bool,string)", +"a58079fc": "FIXED_PRESALE_USD_ETHER_PRICE()", +"a58091cd": "privateSaleSencPerMEth()", +"a58092b7": "getSanityRate(address,address)", +"a580a5b0": "setRepayment()", +"a58180b4": "_batchBuild(uint256[],int256[],int256[],uint8[])", +"a581a27a": "owner_balance()", +"a581c333": "getSHA256(bytes)", +"a581ff0e": "CopyrightExchangeToken(uint256,string,string)", +"a5820daa": "issueTokens(uint256)", +"a5828b7d": "payBonus(address)", +"a583535d": "addCutie(uint32,uint256,uint256)", +"a5841194": "sync(address)", +"a5842415": "Cubes(uint256)", +"a5843f08": "init(uint256,uint256)", +"a5847862": "sizeOfString(string)", +"a584d8cc": "startProduct(string,string,string,int256)", +"a58561ec": "DISCOUNT_STAGE_TWO()", +"a5857318": "getIdArrayItemsCount(address,uint256,string)", +"a586fd0f": "_substring(string,int256,int256)", +"a587686d": "addCardToEdition(uint8,string,uint8,uint8,uint256,uint256,uint256)", +"a5878c65": "addPrivatePresaleTokens(address,uint256,uint256)", +"a587c9f7": "bountyTokenAddress()", +"a587cd36": "DisableSetTransferable(address,bool)", +"a587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", +"a588a968": "rushitesticoToken()", +"a5891bb0": "modifyWhitelistMulti(address[],bool[])", +"a5898832": "getReferrerRewards()", +"a58ac1a1": "buyTokensInternal(uint256)", +"a58b2e43": "LendingLiquid()", +"a58b55a9": "StreamityEscrow(address)", +"a58b7eed": "setFlags(address,address,uint256)", +"a58ba458": "multiTransferTightlyPacked(bytes32[],address)", +"a58c07ee": "fetchOrderByIdWithPayerByAdmin(string,address)", +"a58c30c5": "block2()", +"a58d3ad1": "dumpCube(bytes,bytes32)", +"a58daf76": "setAuthorizedToDraw(address)", +"a58fd85b": "setReflectSwitch(bool)", +"a58ff4fc": "deletThisContract()", +"a590529e": "updateWithPositionHint(uint32,uint128,uint128,uint32)", +"a590799a": "refundInvestment(address,uint256)", +"a59162eb": "OWEToken()", +"a5917019": "SecurityDepositCreated(uint256,address,string,string,uint256)", +"a5917baf": "vestingVault()", +"a5917dea": "processInternalRequest(string,bool,uint256,uint256)", +"a591a59b": "tuple(uint256)", +"a591d4a6": "getMsgValueAfter()", +"a5925b5b": "clearAuthorization(address)", +"a59307e8": "Play(address,bytes1,uint256)", +"a593845f": "_rollCriticalDice()", +"a594056f": "getPriceInExoTokens(uint256)", +"a59455dc": "getPacket(uint256)", +"a594a117": "giveGen(uint256)", +"a594a236": "_updateClaims(string,string,string)", +"a594b29b": "PRE_SALE_START_4()", +"a595a94d": "_sendGameGift(address,uint256)", +"a595b655": "Gimli()", +"a595f2eb": "quantidadeDeAutorizacoesNecessariasParaUmaNovaOuvidoriaPoderSeCadastrar()", +"a5967039": "cancelMigration(address,address)", +"a5968cc6": "PresaleTokenVesting(address,uint256)", +"a5976f97": "allocateReservedFunds()", +"a59799e6": "updateAvatarInfo(uint256,string,uint256)", +"a5982885": "assertFalse(bool)", +"a5982aee": "closeregistrationphaseandchoosefirstselector(address,address)", +"a5985e8c": "getLevel()", +"a5987c9e": "getMyKilo()", +"a5989dbe": "nines(uint256)", +"a599ef65": "enroll(uint256,uint256)", +"a59a3750": "getWeapon(uint8[176],uint8,uint8)", +"a59ac6dd": "buy(address,uint256,uint256)", +"a59aef4e": "nickOf(address)", +"a59af340": "isInvestorApproved(address)", +"a59b193a": "setRecord(bytes32,string,string)", +"a59b7de5": "consumeCoinForNova(address,uint256)", +"a59cacb2": "setMinWeiAllowed(uint256)", +"a59d6986": "recoverLostFunds()", +"a59d8898": "transferByDateSingle(address,address,uint256,uint256)", +"a59d930b": "ownerSetEtherwowAddress(address)", +"a59dbfb7": "gift_Transfer(address,uint256)", +"a59def62": "ABYSS()", +"a59eca54": "getPlayerIdByAddress(address)", +"a59f3e0c": "enter(uint256)", +"a59f8a2b": "GFCB()", +"a59f9d56": "ChangetokenManagerAddress(address)", +"a5a01bc7": "addCarInit(address,uint32,uint32,uint32,uint64)", +"a5a0545f": "FCChainTokenTest(uint256,string,string)", +"a5a2286b": "ReserveAddress()", +"a5a2aa33": "purseExchange()", +"a5a2cb19": "buyUpgrade(uint256)", +"a5a2fc4a": "claimableFeesOf(address,uint256)", +"a5a32c3a": "GEMCHAIN()", +"a5a3ad0b": "ValidatorBond(address,address)", +"a5a45785": "setRescue(address,bool)", +"a5a54ea5": "SM()", +"a5a584a2": "QuestionToken()", +"a5a5f468": "WorldCupAuction(uint256,uint256,bool,address,address)", +"a5a65bba": "checkvehrespond(uint256,address)", +"a5a6a7b2": "after20Seconds()", +"a5a6d7b3": "sellMyBanana(uint256)", +"a5a7d086": "ethereumFoundationTickets()", +"a5a7dadf": "preCrowdsaleEndTime()", +"a5a83e4d": "right91(uint256)", +"a5a89837": "createPrimera()", +"a5a899ec": "halts()", +"a5a8c53d": "setmessiCommunityAddress(address)", +"a5a98d78": "inflate()", +"a5a9ba8d": "getSellReturn(uint256)", +"a5a9cf0d": "sixthTeamWithdrawal()", +"a5aa0545": "createHumanStandardToken(address,uint256,string,uint8,string)", +"a5aa4348": "setTitulaire_Compte_9(uint256)", +"a5aa542e": "remainingFunds()", +"a5ab3436": "Payouts(uint256,bool,address,uint256,uint256)", +"a5ab5479": "generateNum2Win()", +"a5ab89ff": "setHost(string)", +"a5abe7f6": "isConstant()", +"a5acb022": "LOG_BetWon(address,uint256,uint256)", +"a5acc46e": "PauseInfrastructure(bool)", +"a5acd206": "updateStateFromOracleFoo(address)", +"a5ad0588": "transferFrozenTokens(address,uint256)", +"a5ad1348": "checkPosition(address,address,uint256)", +"a5adb226": "setABackend(bytes32,address)", +"a5ade117": "candyPrice()", +"a5ae65ba": "getGen()", +"a5aeb9b7": "totalWeiContributed()", +"a5af66c5": "HowLongIsDisputeRevealStillRunning(uint256)", +"a5b067b3": "INKCToken()", +"a5b0930d": "getAddressArray()", +"a5b19937": "endVesting(address,address)", +"a5b1e13d": "settle(address,address,uint256,uint256)", +"a5b209df": "doEthDistro(address[],uint256)", +"a5b222c9": "setData_20(string)", +"a5b2235d": "register(address,address[])", +"a5b36a36": "stalePeriod()", +"a5b3720b": "BulkTransfer()", +"a5b3d1a9": "tenmarionCoin()", +"a5b4069e": "DataCoin(address)", +"a5b41c0e": "AK48Coin(uint256,string,string)", +"a5b482c2": "getAmountOfSubcontracts()", +"a5b4aaab": "editMilestone(uint256,uint256,uint256,uint256,uint256,string,string)", +"a5b4f7d3": "setAgentVerificationByAgent(bytes32,address)", +"a5b538f9": "nextBonusPayout()", +"a5b589ce": "mHostFee()", +"a5b6420e": "_setBool(bytes32,bool)", +"a5b6ea8f": "spin(uint256)", +"a5b70519": "multiValueAirdrop(address,address,address[],uint256[])", +"a5b75814": "bonusPhase3()", +"a5b781e1": "lockPostion1Add(uint8,address,uint256,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8)", +"a5b78bfa": "NebulaToken()", +"a5b87ef7": "StgFourbonusEnds()", +"a5b9b45d": "tokenConsumed()", +"a5b9e922": "getContentTimetamp(uint256)", +"a5ba3b1e": "tokenClaims(uint256,address)", +"a5bb9162": "tokenadd(address,uint256)", +"a5bbc311": "getNCSTotalSupply()", +"a5bbc423": "withdrawByEmergency(string)", +"a5bbd67a": "lockedAddresses(address)", +"a5bbe7bf": "takeOrder(address,uint256,uint256)", +"a5bc770c": "tokensPerKEther()", +"a5bd1566": "getDiscipleVend(uint256)", +"a5bdbb28": "buyBlock(string,uint256,uint256,uint256,uint256)", +"a5be0c5e": "ERC20Proxy(string,string,uint8,address)", +"a5be1a4d": "multipleTransfer(address[],uint256)", +"a5beb4e5": "claimRefundFor(address)", +"a5bebf48": "founderTokenUnlockPhase1()", +"a5bf7aae": "CPSTestToken1()", +"a5bfa9a9": "claimToken(bytes32)", +"a5bfd16a": "getAllLoans()", +"a5c02493": "setChain(string,address,address,address)", +"a5c04bfe": "allocateTeamBonus(address,uint64,uint64,uint64)", +"a5c102a2": "setMinterFeePercent(uint256)", +"a5c12df9": "OpenANXToken(address)", +"a5c154b3": "setMiniPoolEdit_2(string)", +"a5c1db32": "CrosspaysToken()", +"a5c28b1e": "getGovtApplication(string,string)", +"a5c3eb03": "UbbCoin(uint256,string,string)", +"a5c464b3": "isOnSaleAny2(uint256,uint256)", +"a5c5436f": "preCaution()", +"a5c5463f": "getCurrentlyRunningTier()", +"a5c5762b": "PVT_INV_TOKENS()", +"a5c57b18": "BITDINERO()", +"a5c58944": "dSetEditorArbitraryData(bytes32,bytes,bytes)", +"a5c5edee": "updateGameMetadata(uint256,string,uint256,bytes32[])", +"a5c6ac0d": "percentagePerMonth()", +"a5c7ac13": "test_updateKey_decreaseNoHint()", +"a5c81622": "signedApprove(address,address,uint256,uint256,uint256,bytes32,address)", +"a5c860ba": "eth_minimum()", +"a5c8a201": "geth(uint256)", +"a5c8b7a1": "transferPublisher(address)", +"a5c978c0": "TIA()", +"a5c9cd82": "TOKEN_UNIT()", +"a5ca2afa": "VESTING_INTERVAL()", +"a5ca35f5": "Trade(uint256,address,uint256,address)", +"a5cae60c": "getAppInfo(uint32)", +"a5cb66c0": "ChronosCore(uint256,uint256,uint256,uint256)", +"a5cbe71c": "getCooldownEndBlock(uint256)", +"a5ccd855": "setConstractDeployTime(uint32)", +"a5ccfb06": "sellCard(uint256,uint256)", +"a5cd184e": "free(bytes32,uint256)", +"a5cd3fd0": "steemh()", +"a5cd761f": "getTokenOwner(uint256)", +"a5cd806b": "BONUS_PCT_IN_VREO_SALE_PHASE_1()", +"a5cda792": "distribution(address[],address,uint256[],uint256[])", +"a5ce0693": "endBlockBonus1()", +"a5ce3eb0": "totalPaidAmount()", +"a5ce413b": "unstakeTokens()", +"a5ceefa2": "computeTokenAndETHRewards(uint256,uint256)", +"a5cf3898": "verifyExtraData(bytes32,uint256)", +"a5cf38da": "createCrowdsaleTiers(bytes32[],uint256[],uint256[],uint256[],bool[],bool[])", +"a5cf56f2": "ethReceivedPresale()", +"a5cf599c": "ENDING_TIME()", +"a5cfefde": "updateChainlinkAddresses()", +"a5d048d3": "create(address,uint256,uint256,address)", +"a5d0bab1": "buyPartial(uint256,uint256)", +"a5d18cb6": "checkGameAmount(uint256)", +"a5d1c0c0": "gameTime()", +"a5d33c2b": "MessageSentToChannel(address,string,string,uint256)", +"a5d3845b": "tokenEventAddress()", +"a5d572c4": "fixedTotalSupply()", +"a5d57bb7": "ApproveAndDo(address,uint256,bytes32,string)", +"a5d5ca54": "PolyCustomers()", +"a5d5db0c": "depositCollateral(address,uint256)", +"a5d638f1": "transferOwnershipRequest(address)", +"a5d677ab": "getFileByIndex(bytes32)", +"a5d68bfd": "RATE_WHOLESALE()", +"a5d6d4c3": "mintAuthorizedBatch(address[],uint256[])", +"a5d7a14f": "ContractorProposalAdded(uint256,uint256,address,uint256,uint256)", +"a5d8628a": "AgriChainDescription()", +"a5d871c0": "AddressChanged(uint256,address)", +"a5d8746e": "canMakeBet()", +"a5d8b72b": "midasAdvisorOperateMarketingAddress()", +"a5d8cdf2": "deploy_time()", +"a5da0bf5": "addAfterId(address,uint32,uint128,uint128,uint32)", +"a5db83e4": "marketRegisterToken(address)", +"a5dcf458": "uintToBetsArray(uint256)", +"a5ddfef1": "getTotalAmountOfTokens(uint256)", +"a5de12ab": "ITBITSToken()", +"a5de3619": "admins()", +"a5de811f": "checkMyWithdraw(address,address)", +"a5def8cb": "numbOfFrozenAmCount(address)", +"a5dfd89a": "getPrize(address,uint256,bytes3,uint16)", +"a5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", +"a5e00e53": "QNTU(address[],uint256[])", +"a5e09282": "_burn(address,address,uint256,bytes)", +"a5e108af": "addEmployerContract(address,address,uint256)", +"a5e11729": "maxPower()", +"a5e1c5b5": "setVal(bytes32,uint256)", +"a5e20eaa": "getProjectStartDate(bytes32)", +"a5e220c2": "Owner(address)", +"a5e2dbfb": "_scto(uint256,uint256,uint256,uint256,address)", +"a5e33048": "generateTokens()", +"a5e45bec": "range(uint256)", +"a5e4e9a0": "maxCWCsPerReturnLessThan()", +"a5e4fedc": "LogTransferFromOwner(address,address,uint256,uint256,uint256)", +"a5e52c08": "ImmediateProfit(address,uint256)", +"a5e53bfe": "checkRandomFromRandao(uint256)", +"a5e558a3": "MIN_FUND_AMOUNT()", +"a5e57fcf": "GetUserBitFlag(address)", +"a5e5e034": "swapTop(uint256)", +"a5e62f02": "fallbackRP()", +"a5e7131e": "transferFundsAdminOnly(address,uint256)", +"a5e767cd": "frozenAccount(address,address)", +"a5e7a31c": "summReserveFund()", +"a5e82807": "deletedTeamIds(uint256)", +"a5e8c5d6": "setVoteRight(address,uint256)", +"a5e90eee": "setManager(address,bool)", +"a5e9585f": "xxx(uint256)", +"a5e99c4e": "createSubmission(uint256,string)", +"a5e9fffa": "calculateAmount(address,uint256,uint256)", +"a5ea11da": "getParameters()", +"a5eb1c6d": "Ovation(uint256,string,string)", +"a5eb7a4e": "operated()", +"a5ebb9ef": "backERRLCoinOwner()", +"a5ebc10b": "blocktubeClip(string,uint256,uint256)", +"a5ebf389": "getMoneyTotals()", +"a5ec4fae": "changeBaseVerifierFee(uint256)", +"a5ecacae": "getContributionTime(uint256)", +"a5ece941": "marketingAddress()", +"a5eceaf1": "bet1000_1eth()", +"a5edcd9e": "ethtotalSupply()", +"a5ee79d3": "extendRequestTimeLock(bytes32)", +"a5ef0dd6": "setGen0Profit(uint256)", +"a5ef69ea": "icoEndAt()", +"a5ef9915": "jotAllowance()", +"a5f02b00": "markCombatEnded(uint256)", +"a5f0dea2": "saleFinalized()", +"a5f11474": "Tronix()", +"a5f128fb": "stopSelling(uint256)", +"a5f18c01": "getStartBlock()", +"a5f1e282": "lockedOf(address)", +"a5f257e7": "transferDividendToShares()", +"a5f26760": "updateTimeMintBalance(uint256)", +"a5f2a152": "transferTo(address,address,uint256)", +"a5f2e079": "borrowerReturnAmount()", +"a5f357de": "MAXROUNDS()", +"a5f3c23b": "add(int256,int256)", +"a5f4648c": "getNextTurnColor(uint256)", +"a5f4864d": "ELBT()", +"a5f4af33": "playerWithdrawPendingTransactions()", +"a5f4c6ff": "publicStart()", +"a5f732e5": "distributeLTCW(address[],uint256)", +"a5f75a5e": "dollars_per_kilo_ether()", +"a5f7823e": "onlyAdmin()", +"a5f7c148": "transfer(address,int256)", +"a5f8b874": "wasProxyStorageSet()", +"a5f8cdbb": "buyTicket(address)", +"a5f9b5c2": "gameRound()", +"a5f9fd99": "splitShare()", +"a5fa2490": "smxSold()", +"a5fa5e52": "showTime(address,address)", +"a5faa125": "getAuthor()", +"a5fadf93": "modify_Presale3StartDate(uint256)", +"a5fb929a": "userRewarderCount(address)", +"a5fba4e1": "isDistributionDue()", +"a5fbd808": "globalBurnAmount()", +"a5fbdd41": "updatePremiums(address)", +"a5fbf287": "isSupported(address,uint256)", +"a5fc2994": "sendStore(address,uint256)", +"a5fd0a18": "chargeChannel(uint256)", +"a5fd1838": "getBonus2(uint256)", +"a5fdc5de": "collateral(address)", +"a5fefcfd": "thirdMonthEnd()", +"a5ff2551": "LOCIcoin(uint256,string)", +"a60014e3": "buyCore(uint256)", +"a60110ee": "ProposalTalliedEvent(uint256,bool,bool)", +"a6021ace": "ERC20Address()", +"a6024524": "PRE_ICO_FINISH()", +"a6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", +"a6044f28": "virtualEntitiesCreated()", +"a604c1ad": "Blocker_send(address)", +"a6060fcb": "Bitdore(uint256,string,string)", +"a6065c96": "brokerVerifierContract(uint64)", +"a6066523": "payment_amount()", +"a6069146": "setItemRangeURI(uint256,string)", +"a606b94a": "transferBalance(address,address,uint256)", +"a6070967": "minSumICOStage8USD()", +"a60745aa": "getBountyData(uint256)", +"a608067b": "getDrugPrice(uint256)", +"a608a65b": "CryptoAdsToken(uint256)", +"a6091b32": "removeControllerByPartition(bytes32,address)", +"a60956a6": "newItem(uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool,address)", +"a6099372": "payDiff(address,uint256)", +"a609e209": "BIRTHDAY()", +"a609f034": "getByteFromBytes14(bytes14,uint256)", +"a60b693d": "getTotalCap()", +"a60b8aa9": "minusTourFreezingTime(uint256,uint64)", +"a60bbcd3": "ModelCoordinator()", +"a60c8043": "totalDistributionAmountInWei()", +"a60c9cdb": "TheBolthDAICO(address,address,address,address,address,address,address,address)", +"a60dc38a": "convertToWei(uint256)", +"a60e043e": "CappedRefundableCrowdsale(uint256,uint256)", +"a60e8bd6": "setVotingProxy(uint8,address)", +"a60eb299": "setRewardGenerationComplete(bool)", +"a60f3588": "payoutIdx()", +"a610fe9b": "chargeHoldingTax()", +"a6113c0d": "getSynthesizationResult(address)", +"a6117f39": "validPrePurchase()", +"a611e0e6": "forceRentalEnd()", +"a612c638": "emergencyRestart()", +"a6138ed9": "pricer()", +"a613c42d": "NWT()", +"a6145ba2": "isAllowContribution()", +"a614d54e": "GlobalAdmin()", +"a6151a84": "isDestroyed()", +"a615237e": "rebrand(string,string)", +"a615d7ee": "withdrawTokenToInvestorOwner(address)", +"a6178731": "usingInterCrypto()", +"a617aff1": "brideAddr()", +"a61855a4": "changeCommonRebate(uint256)", +"a618993c": "setGBA(uint32)", +"a618f50c": "distributeSSENTE(address[])", +"a619486e": "masterCopy()", +"a61bd76d": "purgeInformation(uint256)", +"a61c48f0": "getPollResultsSize()", +"a61c5b82": "numStudentRequest()", +"a61d0aed": "maxBets()", +"a61d6829": "getPosterInfo(uint256,uint256)", +"a61e1fc1": "_shuffle(uint8[])", +"a61e67aa": "testFailMintGuyWhenStopped()", +"a61e9f4d": "momentBlockOf(uint256,uint256)", +"a61ef635": "translateToStartingTile(uint16)", +"a61fe970": "candyBalance()", +"a6208622": "refusePayment(uint256,uint8)", +"a621344a": "setTokenWallet(address)", +"a621d679": "XPZ()", +"a6223a58": "testAccess(address)", +"a622510b": "TranslationService()", +"a623e9bf": "PresaleDistribution(address,address,uint256)", +"a62438e2": "getPeriodKey(uint256)", +"a6245974": "getUpgradeProposalCount()", +"a6248874": "totalFirstICOSupply()", +"a62533e6": "diffString(string,string)", +"a62552b3": "modificaPuntos(uint256,int256)", +"a6256644": "setDonationsReceiver(address)", +"a625d78d": "MasterDeposit(address,address,uint256)", +"a626c089": "changeSettings(uint256,uint256,uint256)", +"a626c3fe": "assignBountyTokens(address,uint256)", +"a626f445": "GlobalPersonalInsuranceChain()", +"a62784e2": "setCCH_edit_3(string)", +"a6279dbd": "getPartialAmountCeil(uint256,uint256,uint256)", +"a62819ed": "AddExec(string)", +"a62875d9": "getMyPastWins(address)", +"a62a07dd": "release_dates(address)", +"a62a86a0": "associateWithTaskAddress(address)", +"a62adfec": "buyTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"a62ce8ce": "capitalization()", +"a62d4df3": "_absSubtraction(uint256,uint256)", +"a62d7801": "resumePhase()", +"a62d9ba3": "withdrawToPlatformFunding(uint256)", +"a62e4246": "CampaignBeneficiary()", +"a62e5a7d": "sellComission()", +"a62ea098": "buyLCRTokens()", +"a62f3503": "updateBankAmount()", +"a630a92e": "ownerTransferWeiFirstWallet(uint256)", +"a6314342": "deleteManager()", +"a63234e0": "issuerAddress()", +"a6327ffc": "convert2PlatinumToken(uint256)", +"a632a2e5": "setnumber(uint256)", +"a632d5e1": "MANHATTANPROXLENAV()", +"a633d8d4": "getDougAge(uint256)", +"a633f61f": "getPositionOwedAmountAtTime(bytes32,uint256,uint32)", +"a6345859": "setEscapeRequest(uint32,uint32)", +"a635d31e": "Vote(address,bool)", +"a635e7c5": "BuyEBETtokens()", +"a636f4a1": "VoterAdded(address)", +"a6372087": "starNoLongerForSale(uint256)", +"a63744e0": "addPoll(uint256,bytes,uint8)", +"a63832a0": "dateFunc(int256)", +"a6391823": "awardsOf(address,uint8)", +"a6393784": "BiddableEscrow(address)", +"a63a9fa6": "setNextSnapshotBlock(uint256)", +"a63aeed9": "tokenSaleResumedTime()", +"a63b91f4": "autoBurn()", +"a63c500f": "is_locked()", +"a63c7ba2": "payoutToBeneficiary()", +"a63d0be6": "findAndTrade(address,address,uint256,uint256)", +"a63d6f05": "setRewardLevel(uint256,uint256,uint256,uint256[],uint256[])", +"a63d914f": "confirmAction(uint256)", +"a63dcbd7": "updateRtbSettlementAbi(string)", +"a63e10fa": "getUnreadMessageCount(address)", +"a63f1350": "getParentUniverse()", +"a63f5e2a": "candyToken()", +"a63f8020": "scWithdrawCall(address)", +"a6403636": "resolve(uint8,bytes32,bytes32,bytes32)", +"a64085cc": "getAllClients(address)", +"a641d28e": "revokeDelegateSigned(address,uint8,bytes32,bytes32,string,address)", +"a641edc7": "BOC(uint256,string,string)", +"a6424d22": "setVigAddress(address)", +"a64278ce": "lost_and_found_master()", +"a642c032": "getEdition(uint256)", +"a643c1a0": "updateAddresses(address)", +"a6441979": "StexIssued()", +"a6459042": "agencyReceiver()", +"a645a33a": "VotingFinished(bool)", +"a645e840": "getCurrentGameInfo()", +"a645ff5f": "send(address[],uint256[])", +"a646f9ad": "userWithdraw()", +"a6472906": "getAxie(uint256)", +"a6474a58": "setnotice(string,string,string)", +"a647e8ec": "mint(address,uint256,uint256,uint256)", +"a6482858": "boxPrice()", +"a648567b": "placeBet(uint8,uint8)", +"a648fec2": "updateAllTurnover(uint256)", +"a6491545": "_giveToken(address,uint256)", +"a64968ac": "joyToken()", +"a64a1c0b": "totalSoldTokensWithoutBonus()", +"a64ad595": "getDelegator(address)", +"a64b0b62": "addDevReward()", +"a64b63a8": "ParcelXGPX(address[],uint256)", +"a64b6e5f": "transferTokens(address,address,uint256)", +"a64bb045": "Test7J()", +"a64c7e2a": "Crowdsale(address,address,address)", +"a64d1c09": "hashOrder(uint8,address,uint256,uint256,uint256,uint256)", +"a64ded31": "tttTokenAddress()", +"a64e7969": "balancesCannotSell(address)", +"a64e920d": "vrcCount()", +"a64ed8ba": "tokensCount()", +"a64f0ca4": "getEtherInEuroCents()", +"a64f197e": "allocateBid4b(bytes32)", +"a64f829a": "addDungeonRewards(uint256,uint256)", +"a64fa869": "PrezzoCMT(uint256,uint256)", +"a650ebbc": "transferFromInternalStakingfund(address,uint256)", +"a6515a98": "admined()", +"a652477b": "STSTEST3()", +"a6534b63": "EtherBet(address,uint256,uint256)", +"a65465ff": "pank15()", +"a65491d5": "yeezy()", +"a654cfab": "pots()", +"a655fb4e": "level_9_amount()", +"a6567a9a": "calculateNewTime(uint256,uint256)", +"a656e51f": "lastInvestorsProfitDay()", +"a657242b": "Hardcap()", +"a6572c87": "getemployee(address)", +"a657cb9c": "submitRedeem(uint256)", +"a6593562": "getamountvotes()", +"a65a0068": "getAccountBalances()", +"a65a26e8": "returnAddressList()", +"a65a7753": "Zentum()", +"a65ac961": "batchTransferValues(address[],uint256[])", +"a65ae513": "ownerDeclareFailure()", +"a65b37a1": "buyXname(bytes32,uint256)", +"a65b62c9": "priceRound(uint8)", +"a65c3097": "_distributeRest()", +"a65e53e2": "prizeWithdrawTo(uint256,address,uint256)", +"a65e91b8": "baseTokensSold()", +"a65eacdc": "delManager(address)", +"a65ecbeb": "getMaxTokenAvaliable()", +"a65f0f79": "Ethereal_Smart_ID(address,address,string,string,bool)", +"a65f1193": "weiToUsdCents(uint256)", +"a65f51c8": "gapTime_()", +"a6605a77": "_updateTradingVolume(uint256,address,address,uint256)", +"a660698e": "TheInternetDigitalCurrency()", +"a660a326": "balancesHold(address)", +"a660f827": "bonusEnds5()", +"a6624bf4": "ISBToken()", +"a6632904": "tier_cap_4()", +"a663b5de": "viewCoinsKarma(uint256)", +"a664225c": "exchangeFinished()", +"a6656096": "invalidateGame(uint256)", +"a6658dea": "BitSelectConservador()", +"a6661901": "totalNormalContributorIds()", +"a6662a3c": "initMetadataDisabled()", +"a6666f0f": "TTGCoin()", +"a6667e18": "RemoveWhitelist(address)", +"a666ff3c": "lockedTokenAddress()", +"a66712ae": "usersOfAccount(uint256,uint256)", +"a6674aa3": "Resigned(address)", +"a6678b60": "setJadeCoin(address,uint256,bool)", +"a668d7c9": "NiceGuyPonzi()", +"a66939ad": "hostileTakeover(address,uint256)", +"a669b56b": "pay_day()", +"a669c9f9": "registeredServices(address)", +"a669d972": "c_centsPerToken()", +"a66ac7bc": "payout(bytes32,bytes32)", +"a66b62e6": "gameOverByUser()", +"a66b7748": "follow(bytes32)", +"a66c0b1c": "setGoldmintTeamAddress(address)", +"a66c53b2": "buyCore(uint256,uint256,uint256,string)", +"a66cb0ee": "GetBonus()", +"a66d5ef7": "createNamespace(string)", +"a66db704": "getPOOL_edit_23()", +"a66ddf43": "mainSaleRateP3()", +"a66df701": "chargeFee(address)", +"a66e6e5c": "etoken2Symbol()", +"a66ee056": "internalTransfer(int256,address,address)", +"a66f32e5": "stage3Bounty()", +"a66f42c0": "boost()", +"a66f7ad6": "signRelease(uint256)", +"a66fd42b": "mintToggle(bool)", +"a670b9e7": "nestedSecondSome(uint256,uint256)", +"a670c133": "numTeamDeposits()", +"a6712778": "investBct(address)", +"a672990c": "whitelistContract(address,bool)", +"a6735023": "getProfilePicture(address,address)", +"a673b130": "Reserved(address,uint256[])", +"a6741cfd": "injectEtherToDividend()", +"a6747670": "senderToProxy()", +"a675807e": "totalLevs()", +"a675887e": "EtherReceivedFromRelay(address,uint256,address)", +"a676b174": "frozenAccountProfit()", +"a677fbd9": "example2Func()", +"a6780857": "fireEventLog0Anonym()", +"a6784488": "cleanOut()", +"a67909bd": "LOCKTC()", +"a6791568": "burnAllTokens(address)", +"a67a6eab": "bearToken()", +"a67ad1b2": "sellICloudSecsAgainstEther(uint256)", +"a67aee1f": "tokenConverter()", +"a67afd30": "vest2all(address,address)", +"a67ba5d2": "changeAdminCharges(uint256,uint256,uint256)", +"a67bb583": "tokenCapForSecondMainStage()", +"a67c2730": "getBonusPerShare()", +"a67c2dcb": "accept_ownership()", +"a67c8bc4": "mintFundsTokens()", +"a67cace9": "AIT_TokenERC20(uint256,string,string)", +"a67d2602": "getSafeAddr()", +"a67de805": "DWalletToken()", +"a67e91a8": "TOKENS_MAX()", +"a67eb8d7": "STRIMToken(address,address,uint256,uint256)", +"a67ebf73": "Voting(uint8,address,uint256,uint256)", +"a67f122f": "_1_vozrast()", +"a67f9997": "LIQUIDATION_RESERVE_RATIO()", +"a67fc3fa": "getRewardAmount(bytes32,bytes32)", +"a6801cbd": "reset(uint256,uint256,uint256)", +"a6808c3c": "_setAgilityValue17(uint256)", +"a6809af0": "setOdds(uint256)", +"a680baaf": "backendWallet()", +"a681bf23": "LegalBot()", +"a681f950": "setMinMax(uint256,uint256)", +"a6823189": "parseAddr(string)", +"a682d5ad": "clampMin(uint256,uint256)", +"a682dd4f": "SWAP(address,address,address)", +"a6832d53": "allowedTransfer(uint256)", +"a68393a2": "debug_getCoinbaseTxOutputLen(uint256)", +"a6843f34": "right48(uint256)", +"a6846026": "TokenMintingDisabled(address,bool)", +"a684bc9f": "tokenReserved3()", +"a684ff03": "bet(uint16,bytes32)", +"a68567ac": "IDToken()", +"a6856e9d": "JTEBIT(address,uint256)", +"a685a41e": "parseLoanOffering(address[9],uint256[7],uint32[4])", +"a685ae66": "minerTimeOfLastProof()", +"a685ea57": "getROFRStatus()", +"a68602fb": "SignalingDisabled(address,uint256)", +"a687be48": "RocketsAndResources()", +"a6885e88": "getStageData()", +"a6895b5a": "getDailyLimit()", +"a6896bdf": "isRightPosition(uint128,uint128,uint32,uint32)", +"a68a2884": "TournamentCore(address,address,address,address)", +"a68a76cc": "createForwarder()", +"a68b51ed": "addProposal(address,uint256,uint256,string,uint256,bytes)", +"a68b91ab": "getContractData()", +"a68c5ca1": "SDTToken(uint256,string,string)", +"a68c68b4": "get_asset(uint32)", +"a68c9bbb": "getBid(address,address)", +"a68cfb25": "getSecondAmount(bytes32,bytes32)", +"a68d9a62": "_setDownRequest(address,uint256,uint256,uint256)", +"a68dfb2d": "TTToken()", +"a68e27b7": "getLuckProps(address)", +"a68e4578": "totalLBSold_CORNERSTONE()", +"a68e5ad0": "depositTokensForTrading(uint256)", +"a68eb555": "payVATToBusinessOwner(uint256,uint8,address)", +"a68f0bc1": "TOTAL_LARE_FOR_SALE()", +"a68fff3f": "GenRandom(uint256,uint256)", +"a6903278": "beginBlock()", +"a69032ee": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"a69177b1": "addTotalSupplyAmount(uint256)", +"a6921956": "tokenStatus()", +"a692c2f9": "_toTileId(int32,int32)", +"a692d5ae": "migratePriceLeader(uint8,address,uint256)", +"a6934950": "_confirmOneBuy()", +"a69358aa": "voteForTap(bool)", +"a693600b": "poolAmount()", +"a69364fc": "ProofOfTheRich()", +"a6940238": "growth()", +"a69416f6": "getNodeType(address)", +"a6948cd9": "calculateArea(address[16],uint256)", +"a694dabd": "STARTING_SNAIL()", +"a694fc3a": "stake(uint256)", +"a69520aa": "alchemy(uint256)", +"a695cacf": "getGameIdsByCategory(bytes32)", +"a69709ae": "toHexString64(uint256)", +"a69722de": "validateDescription(string)", +"a6973fa1": "computeS(uint256)", +"a697ca14": "finishSingleLock(address,address)", +"a6980a17": "addPromo(bytes32,uint256,address,uint256,uint256)", +"a6983932": "SeckeyRevealed(bytes32)", +"a6988576": "walletTokenBounty()", +"a699cd20": "getGrowingControlStartAt()", +"a699d9b0": "saosao6()", +"a699fb18": "payoutWorth(address)", +"a69a2ad1": "totalBalances()", +"a69a5588": "set(bytes12,bytes32)", +"a69ade72": "LED_MULTISIG()", +"a69bd4a8": "regStartTime()", +"a69beaba": "vote(bytes32)", +"a69c22be": "getYays(uint256)", +"a69c5bbf": "bucketClosureTime(bytes32)", +"a69c6597": "getPlayerName()", +"a69cbb50": "_getEarlyBonus()", +"a69dde14": "checkPassiveAndNull(address)", +"a69df4b5": "unlock()", +"a69e894e": "createTokens(address,uint256)", +"a69eae7c": "changeAllowanceToMint(address)", +"a69f7d1f": "FOUNDATION_PERCENT()", +"a69f886a": "withdrawRaised(uint256)", +"a6a1858f": "whale()", +"a6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", +"a6a34dd3": "_setMinCardPrice(uint128)", +"a6a3a439": "getNumTransactions(address,uint256)", +"a6a3ba2b": "pausestatus()", +"a6a5bfe3": "getStage2Start()", +"a6a62d58": "lastBlock_f2()", +"a6a633af": "ROA()", +"a6a68606": "findOnePercent(uint256)", +"a6a6a0d8": "becomeFrom()", +"a6a6f1c7": "registerLicense(string,string)", +"a6a86130": "usdToWei(uint256)", +"a6a9a099": "privateIcoMin()", +"a6aa7f7a": "onlyFounders()", +"a6ab1216": "getWeaponsArmy1(uint256)", +"a6ab36f2": "initialize(uint256,uint256,address)", +"a6aba1b5": "BitCoix()", +"a6abbad6": "assertEq16(bytes16,bytes16,bytes32)", +"a6ac9225": "getJackpotResults(uint256)", +"a6ad57e6": "difficultyScaleMultiplierLimit()", +"a6ae0aac": "coinbase()", +"a6afd5fd": "getBets()", +"a6afed95": "accrueInterest()", +"a6b01e50": "isMultiOwner(address)", +"a6b05af6": "INITIAL_BONUSLIST_TOKENS()", +"a6b08498": "isOps()", +"a6b10dd1": "showToken_For_Circulation()", +"a6b11fb3": "factorial_ICO()", +"a6b165ee": "total_investors()", +"a6b197aa": "Order(address,uint256)", +"a6b1caa3": "gasScalar(uint256)", +"a6b206bf": "doSomething(uint256)", +"a6b26697": "EthRefundReceived(address,uint256)", +"a6b2c437": "confirmRequest(uint256)", +"a6b2df9b": "requestDocument(uint256,string)", +"a6b3abba": "getMyTokenBalance()", +"a6b402ec": "MGU()", +"a6b4492f": "servusToken()", +"a6b4b0f4": "testCreateGames(uint256)", +"a6b513ee": "finalPrice()", +"a6b55eec": "unlock(bytes16,uint32)", +"a6b57b5d": "sharesOwned(address,uint256)", +"a6b7fa36": "withdraw(uint32,uint192,bytes)", +"a6b87b52": "erc()", +"a6b909e1": "trades()", +"a6ba250c": "fechVoteInfoForVoterBySnapshotBlock(address,uint256)", +"a6bb012b": "penalizeInactiveArbitrators(address[],uint256[])", +"a6bb1667": "updateMatch(uint8,uint8,uint8)", +"a6bc18f9": "setTrader(address)", +"a6bd5427": "getOptionCount()", +"a6bd853b": "mtdPreAmount()", +"a6bdcc17": "isAtLeast(uint256,uint256)", +"a6bf3df0": "oraclize_query(string,string[2],uint256)", +"a6bf45a9": "getNumberOfDeedsByAddress(string)", +"a6c01cfd": "isInGeneration(uint256)", +"a6c09381": "_setPackedTimestamp(bytes32,uint256)", +"a6c0d5a8": "YukiChainToken()", +"a6c1d611": "getAngelLockStatus(uint64)", +"a6c1f87f": "partial_refund(address)", +"a6c216c2": "UpgradeEvent(address,address)", +"a6c226f0": "lock(address,address,uint256[],uint256[])", +"a6c23bc4": "setTokensPerUsdRate(uint256)", +"a6c24b38": "getRequiredPrice()", +"a6c2591e": "get_header(uint256,uint256)", +"a6c2f3b2": "getAllAgreements(uint256)", +"a6c30b29": "startGasCalculation()", +"a6c3e6b9": "author()", +"a6c4cce9": "registeredApps(address)", +"a6c4d58c": "MetronomeToken()", +"a6c4ec0e": "hasUser(address)", +"a6c5612e": "areTokensFree()", +"a6c58b63": "getJobStatus(uint256)", +"a6c62c90": "snake(uint256)", +"a6c662ea": "Cmc()", +"a6c66575": "processInviterBenefit(address,uint256)", +"a6c6aee1": "ODEEPToken()", +"a6c7bf8a": "setMasterWallet(address)", +"a6c7f715": "MoimToken(uint256,string,string)", +"a6c8210e": "getVotingParams()", +"a6c93349": "createContract(uint256,uint256,int256,int256,int256,int256)", +"a6c94d2e": "durationVoting()", +"a6c95de1": "transferBountyTokens(address,uint256)", +"a6c98142": "SquirrelFarmer()", +"a6ca0a98": "PARAMOUNT()", +"a6ca322b": "refundCompleted()", +"a6ca54bd": "lawEnforcementRole()", +"a6cb4654": "catchYou(address,uint256,uint256)", +"a6cb9e64": "scheduleCall(address,bytes,bytes)", +"a6cbcdd5": "numSignatures(bytes4)", +"a6cc0428": "withdrawCryptoCurrencyNetworkTokens(address)", +"a6cd5ba3": "MaxMasternodesAllowedChanged(uint8)", +"a6cd8c68": "Match_Maker()", +"a6ce25b2": "In(uint256)", +"a6ce69a2": "changeSupply()", +"a6ce8c29": "HandsOnToken(uint256,string,uint8,string)", +"a6cea881": "KayiToken()", +"a6ceaeb8": "getSoldTokens()", +"a6ceb1f3": "sendAirdrop(address[],uint256[])", +"a6cfaf2e": "MMC(uint256,string,string)", +"a6cfb7a3": "getBack(uint256)", +"a6cfbb7f": "revenueBalance()", +"a6d00693": "getMeshPointByCreator(int256)", +"a6d150e0": "updateWhitelists(address[],bool[])", +"a6d15124": "coinsLeftInTier()", +"a6d15963": "createChannel(address,uint192)", +"a6d23e10": "payments()", +"a6d2bff6": "getTeamTokens()", +"a6d34fa8": "JackpotPayoff(uint256,uint256,address)", +"a6d40d39": "unlockFounder(uint256)", +"a6d49dca": "emitTransferEvent(address,address,uint256)", +"a6d4b5c2": "getGroupResult(uint256)", +"a6d4e9da": "tokensByTx(uint8,string)", +"a6d544e9": "sumHardCapPreICO1()", +"a6d6d046": "LetsfairToken()", +"a6d6ec85": "Add_Product(uint256,uint256,string,string)", +"a6d72407": "interface()", +"a6d7d72e": "addTwinAddress(address)", +"a6d87f7d": "myReferralDividends()", +"a6d8adf9": "compensateAll(address)", +"a6d930bb": "FundCrowdsale()", +"a6d93a9a": "_sell(uint8,bytes6,uint32,uint32)", +"a6d958c6": "getLastInput()", +"a6d96af6": "_createCompany(bytes32,bytes32)", +"a6da1e7d": "depositAndLock(address,uint256,uint256)", +"a6da3761": "StoneumToken()", +"a6da467c": "buyCozyAffiliated(uint256,uint256,bool,address,address)", +"a6da54a3": "validCoordinate(uint256,uint256)", +"a6dacdd7": "right59(uint256)", +"a6dc0173": "BRFCrowdsale(uint256[3],uint256[3],uint256[3],uint256[3],address,uint256,uint256,address,uint256,address)", +"a6dc15bd": "PriceChanged(uint256)", +"a6dc1ada": "setMaxStage3AllocationPerInvestor(uint256)", +"a6dc6771": "third()", +"a6dc84f0": "balanceOfFrozen(address)", +"a6dcb12d": "candyTotalSupply()", +"a6dcc834": "getUserInventory(address,address)", +"a6dd06e1": "getPOOL_edit_34()", +"a6ddcc96": "FillBuyOrder(address,address,uint256,uint256,uint256,uint256,uint256)", +"a6ddce13": "setDisable(address,bool)", +"a6de42c8": "AuthorizedAddresses()", +"a6dea55e": "sendEthToAddress(address,address,uint256)", +"a6ded200": "redeem_funds(address,uint256,uint256,bytes32)", +"a6defd45": "ZeroHooStandardToken(uint256,string,uint8,string)", +"a6df0344": "REF_CREDITS_PER_AXIE()", +"a6df33a2": "creationInvestmentSupply()", +"a6df6c30": "minCWCsPerReturnMoreThan()", +"a6e0264a": "_checkMyVesting(address)", +"a6e158f8": "redeemTokens(uint256)", +"a6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", +"a6e1bc7c": "IndoCrypt()", +"a6e26e96": "batlordAddress()", +"a6e2eab1": "recycleAfterEnd()", +"a6e315ff": "addExemptionAddress(address)", +"a6e3289d": "addNextMemberPayment(address,uint256,uint256)", +"a6e3a8a7": "findMinAuditPricesStats()", +"a6e3f533": "redeemKmPardsBal()", +"a6e3fcf6": "setBaseTokensSold(uint256)", +"a6e4002e": "DividendManager(address)", +"a6e497b6": "getUserContractAddress(address)", +"a6e4ae01": "gcp(uint256)", +"a6e5291f": "UniversalGiftToken()", +"a6e5303a": "SLKToken()", +"a6e53b99": "PHASE1_ACCOUNT_TOKENS_MAX()", +"a6e5f2f5": "Show_Address_for_option_C()", +"a6e7469c": "getSendersHash(address)", +"a6e77af1": "setEntryPrice(uint256)", +"a6e7f409": "STATE_OWNED()", +"a6e81e7c": "refundWei(address,uint256)", +"a6e826e8": "startsecurities()", +"a6e8a859": "target2()", +"a6e915b6": "confirmOpening(uint256,uint256)", +"a6e9e95f": "setCoinAllowance(address,address,uint256)", +"a6ea7ad2": "dexTestTransfer(address,address,uint256)", +"a6eaab99": "DGCASH()", +"a6ebbe5a": "NewDeposit(uint256,uint256,address)", +"a6ec01f7": "clearPendingWithdrawal(address)", +"a6ec0708": "setCompte_28(string)", +"a6ec3022": "getCurrentYearRemainToken(uint16)", +"a6ecfff8": "is_btc()", +"a6ed563e": "getBytes32(bytes32)", +"a6ee5eed": "changeFinishPreSale(uint256)", +"a6ee6fd9": "max_schrems_addr()", +"a6eea7f3": "liquidationPeriod()", +"a6effaed": "DetailedERC20(string,string,uint8)", +"a6f07a5c": "bigbomMultiSigWallet()", +"a6f0cba6": "DarioAdministrator()", +"a6f0e577": "isLeapYear(uint16)", +"a6f1c939": "getPick(uint256)", +"a6f1fd51": "addDeposit(uint256)", +"a6f20445": "LogCancelReservation(address,uint256)", +"a6f257cc": "AgroTechFarmToken()", +"a6f2ae3a": "buy()", +"a6f2e80d": "lockFunds(address)", +"a6f2fd5c": "disable(bool)", +"a6f48c90": "freeCount()", +"a6f4ab2e": "setStalePeriod(uint256)", +"a6f55282": "addNacToNLF(uint256)", +"a6f57199": "CrowdsaleExtended(uint256)", +"a6f5a22b": "openShop()", +"a6f6a8a6": "_setPrices(uint256)", +"a6f6d8bb": "getObligation(bytes32,uint64)", +"a6f70594": "SpoutCrowdsale(address,uint256,uint256,address)", +"a6f7257a": "getSigns(uint256)", +"a6f7541c": "maroonToken()", +"a6f81668": "gameInfo(uint256)", +"a6f87bc6": "WumingToken(address,address)", +"a6f935f6": "exporterAcceptedIBankDraft()", +"a6f9885c": "MAX_LENGTH()", +"a6f99922": "EcologicalShield()", +"a6f9dae1": "changeOwner(address)", +"a6fb08ae": "contractWithdraw(uint256)", +"a6fb475f": "transferFrom(address,address,uint16[])", +"a6fbf3d2": "getInt(bytes32,bytes32)", +"a6fc2823": "continueIco()", +"a6fc5c03": "getCode(uint256)", +"a6fd0085": "sub(uint128,uint128)", +"a6fd2487": "recordName()", +"a6fd96b0": "MultiService(address,address[])", +"a6fda231": "ICO_RATE3()", +"a6fdedef": "aimeIncreasePerTrip()", +"a6fe178c": "getRegisteredExchanges()", +"a6fe7a28": "removeService(address,uint32)", +"a6fea6f4": "registerVendor(address)", +"a6ff20a3": "addVehicle(uint256,uint256,bytes32,bytes32,uint256,uint256)", +"a6ff85e2": "ReceiveDonate(address,uint256)", +"a6ffefae": "balancesListNumberMap(address)", +"a701229f": "ChangedOwner(address)", +"a7016023": "setOwnership(address)", +"a7021bc5": "executorAlive()", +"a70284be": "soldBeercoins()", +"a702be14": "feedSecondaryPot(uint256)", +"a703078c": "sortAuction(uint256[])", +"a7030a53": "extractAndStoreBitcoinAddresses(bytes32,uint256,bytes,bytes)", +"a703c751": "batchWhiteListInvestors(address[])", +"a705245e": "setReserveVault(address)", +"a70616de": "platformWithdrawalRecipient()", +"a7068d66": "addDelegate(address,bytes32,address,uint256)", +"a706a2e2": "requestUnlock(bytes32,address,bytes4,address)", +"a706d26e": "DragonTreasureToken(address,address,address)", +"a7070373": "setAllowance(address,address,address,uint256)", +"a707300f": "addAcceptedContribution(address,uint256,uint256)", +"a7074a82": "getCrowdsaleStatus(address,bytes32)", +"a707ce55": "changePass(bytes32)", +"a707fc81": "payback(uint64,address[])", +"a708142b": "addressSCComplianceService()", +"a7084516": "VictoryX(uint256,string,uint8,string)", +"a7086536": "withdrawOfferForCollectible(uint256,uint256)", +"a7096ac8": "addLogicVersion(uint256,address)", +"a70a92f7": "setLiquid0(bool)", +"a70a9ad7": "switchDeity(address)", +"a70b015d": "stageICO()", +"a70b21a3": "ReceiverPays()", +"a70beb13": "processSellOrder(uint256,uint256)", +"a70c41b4": "getTransferFromPreSignedHash(address,address,address,uint256,uint256,uint256)", +"a70ce015": "safeGetPercent(uint256,uint256)", +"a70d7006": "StinkyLinky()", +"a70e82d4": "changeFreeUntilDate(uint256)", +"a70f101c": "useEmergencyCode(uint256)", +"a70f84c3": "registerName(address,bytes32,uint256)", +"a70fc3ba": "setCap(uint256,string)", +"a70fc680": "fundraising()", +"a71168e3": "setTrainingScienceContract(address)", +"a7120433": "setItemContract(address)", +"a7134993": "lifeD(uint256)", +"a7134f73": "acquire()", +"a713a3f7": "loggedTotalSupply(uint256)", +"a7154d22": "cancel(address,uint32)", +"a7157c72": "withdrawToTeamStep2(uint256)", +"a715bf33": "ICO_PRICE()", +"a715df58": "setUnownedName(uint256,string)", +"a715ff59": "EtherandomProxy()", +"a716144a": "getStack(bytes32)", +"a7177ebf": "getSpellAbilityCost(uint8)", +"a718309f": "CryptoCurrencyExchange()", +"a7188b4e": "setEditModeBool(bool)", +"a718d11b": "addWhiteList(address,bool)", +"a718e288": "Robet(uint256,string,string)", +"a718e774": "closeWeeklyInvest()", +"a718f4b3": "searchJobs(address,uint256,uint256[],uint256[],uint8[][4],uint8,uint256[],uint256[],uint256)", +"a7194e2a": "returnTokensListOfAddresses()", +"a71962c2": "GAME_STARTED()", +"a719804d": "Spank(string,string,uint8,uint256,uint256)", +"a71a3dde": "DEFAULT_LOCK_COST_PER_HOUR()", +"a71acabc": "newSection(bytes32,bytes32,bytes32,uint256)", +"a71aec73": "isTradable(uint16)", +"a71b4c26": "auctionSumGwei()", +"a71bd1cd": "getCurrentDay(uint256,uint256)", +"a71be2c0": "Clip()", +"a71d6f9f": "setTRCExchangeRate(uint256)", +"a71d8181": "createCeleb(string,uint256)", +"a71e12e5": "JoinGameAsPlayer(uint8,uint256,uint8)", +"a71e46d3": "maxRecordID()", +"a71ee0c6": "changetradestatus(bool)", +"a71ef84d": "getVotingWinner(address)", +"a71f94c8": "scheduleSetUInt(address,uint256,uint256)", +"a71fa796": "addResearch(address,uint256)", +"a7205062": "constructor(address,uint256,uint256)", +"a720cbb8": "create(address,address,address,string,string,address,uint256,uint256)", +"a720e0a8": "ebyteToken()", +"a720faa9": "maxPreICOSupply()", +"a721c06c": "LENTToken()", +"a721d9d9": "EmiratesCoin()", +"a721ebe8": "numberSyndicateMembers()", +"a72299dd": "MetadollarShare()", +"a7232aae": "setGPSMinEth(uint256)", +"a723761a": "investEtherForDID()", +"a723cda8": "AQUAOIN()", +"a7240d45": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", +"a72460d1": "getProviderEndpoints(address)", +"a724e54c": "newCollectible(uint256,string,uint256,uint256,uint256,string,uint256,string)", +"a724f68a": "CratesOpened(address,uint8)", +"a7256621": "addInt(uint256,int256)", +"a725c4a4": "StrategicPartners(address,uint256)", +"a725fa1f": "CpublicgoldToken(address)", +"a7261f79": "isPayableEnabledForAll()", +"a72670b8": "getReportingWindowByTimestamp(uint256)", +"a726be9a": "get_token_data(uint256)", +"a727390d": "GetDomainInfo(string)", +"a727632f": "Date_Finished()", +"a7281bbf": "CollectTaxes(uint256)", +"a728fa93": "getMyCraigGrant()", +"a7292c74": "amountEthRaised()", +"a72a05f7": "getReceiversCount()", +"a72aa163": "setPropertyMode(uint16,bool,uint32)", +"a72b1444": "minimumSupport()", +"a72cb9aa": "editAddress(int256,address,string,address)", +"a72cc1e8": "updateTask(address,string)", +"a72dc52e": "fixedExpUnsafe(uint256)", +"a72dc950": "StageOneEnable()", +"a72ec7a0": "TokenLiquidityPlatform()", +"a72f3dea": "removePVPContender(uint256)", +"a72f5aaa": "preDistribute(address,uint256)", +"a72ff7de": "buySmartContract()", +"a7304287": "godUnpause()", +"a731c4ec": "addUserTokenLocalBalance(address,uint256)", +"a731f31a": "getBoxes(address)", +"a7321096": "mainSaleBonus()", +"a7322d9d": "DURATION_SALESTAGELAST()", +"a7324134": "parseLoanOffering(address[11],uint256[10],uint32[4],bytes)", +"a732d6c4": "calculateAffiliate(uint256,uint256,uint256)", +"a732f9ac": "increasePlayersGooProduction(address,uint256)", +"a7334c93": "addSales(uint32,uint256,uint16,uint16,uint64,uint64,uint32,uint8)", +"a733800d": "Shipia()", +"a73381d5": "EYInnovationCoin()", +"a733e21d": "twice(address,uint256)", +"a733f702": "isValidSize(uint256)", +"a73467bd": "TestCitySnapshotInternal(address,uint256)", +"a73598fd": "tryFinalizeStage()", +"a73638a7": "selectGod(uint16)", +"a7365ea9": "Gealena()", +"a7368afb": "allocateTokens(address[],uint256[])", +"a7374b21": "sendFundsInternal(uint256,address,bytes)", +"a737ec3d": "GxAdmins(address)", +"a737ecc9": "getProfitToAddress(uint256,address)", +"a7384c1e": "eth2erc20()", +"a739013f": "buy(address,address,uint256,bool)", +"a7397d27": "xaurForGasLimit()", +"a73b60f4": "buttonClicks()", +"a73b9bcb": "FTFExchangeToken()", +"a73c0ba2": "play(uint256,uint16,uint8)", +"a73c52e7": "getLastPerUser(address)", +"a73c7140": "amountTotal()", +"a73d633c": "addWhitelist(address,address)", +"a73d907e": "inboxIsEmpty(address)", +"a73e01cb": "WPTokensBaskets(address,address,address,address,address)", +"a73e38ce": "generateICOcrowdsale(uint256)", +"a73e9837": "newEnterWallet(address)", +"a73ee331": "MAIN_HOLDER_ADDR()", +"a73f7f8a": "addRole(address,bytes32)", +"a73fc4cd": "get_pre_kyc_iconiq_bonus_denominator(address)", +"a7403160": "vestingsReleasedRemain(address)", +"a74035b5": "setEvabotContractAddress(address)", +"a740a194": "getGasToReport()", +"a740a6fa": "clearRAM()", +"a740cf90": "TGIF(address)", +"a740de43": "nameLocked()", +"a7419b51": "setAirLiftPrice(uint256)", +"a742a942": "create(address,bytes32,address,address[],address,bytes32)", +"a7432434": "refferalPreICOBonus(address)", +"a743a61f": "checkStudentsApply()", +"a743fa50": "beneficiaryFunded(address)", +"a744a633": "getWeeklyTransactionVolumeReceiving()", +"a745863b": "startRebuyTime()", +"a745953e": "buyStarInitial(uint256,string)", +"a745ec70": "bountyDistributorAddress()", +"a7467039": "sharesToManager(uint256)", +"a747007f": "AffiliateProgram(address)", +"a7483f74": "CATFreezer(address,address)", +"a74905db": "reportProfit(int256,address)", +"a74915cf": "getadd()", +"a7491b48": "votesByAddress(address)", +"a7497fa5": "tge()", +"a749870d": "etherValueAllowStale(uint256)", +"a749e97b": "_setPaymentSchedual(uint256,uint256,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"a74a1831": "post(bytes32)", +"a74baaa4": "amountOfHolders()", +"a74e01cf": "unFreezeAllTransactions()", +"a74e493f": "pregenTokens(address,uint256,uint256)", +"a74ecb12": "setMasterAddress1(address)", +"a74f277a": "MaintenanceUpdate(bool)", +"a7502a3f": "totalTeamWithdrawSupply()", +"a7507df2": "loveUrl()", +"a75252ea": "sellToAddress(uint256,address)", +"a75261f2": "certbot()", +"a75274e9": "setMarkup(uint256,uint256)", +"a752c2c5": "UniversalSchemeMock()", +"a75343bf": "claimOwnership2()", +"a753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", +"a753fd08": "setWinNetworkFee(uint256)", +"a7542448": "addRef(bytes32,bytes32)", +"a75439d1": "minValuePre()", +"a755a47e": "triggerAllRefunds()", +"a7560bec": "EBITOKEN()", +"a7565888": "m_Paused()", +"a75688b2": "oldMillionEther()", +"a756f362": "Th_stage1(uint256)", +"a75761f1": "returnUint16(uint16)", +"a7577542": "addCrowdSaleTokens(address,uint256)", +"a757ac4b": "privatesaleAddress()", +"a757fc42": "buyTwo(uint256,uint256,uint256,uint256)", +"a758ac6a": "MaecenasCrowdsale()", +"a759822b": "performCalculations()", +"a75a1d6c": "claimRefundTokens(address,address)", +"a75a4e4a": "updateScoreAndBalance(uint256,uint256,address,address)", +"a75a9049": "setInitialOwner(address,uint256)", +"a75aef40": "SYCEarlyPurchase()", +"a75c6f65": "updatedCirculation(string)", +"a75c8546": "determineDiscountRate()", +"a75c981d": "totaltokensold()", +"a75d0042": "signedTransferCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"a75dd0d4": "AddPrivateKey(string,string)", +"a75df814": "knownAddress(address)", +"a75e2853": "transferForICO(address,uint256)", +"a75eb727": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256)", +"a75fe8e1": "removeWallet(address)", +"a7603a86": "getDefaultValidityBond()", +"a76044a4": "binary()", +"a760d1d0": "setRateAgain()", +"a760e442": "setLosers(uint256)", +"a76188b9": "setRewardPercentages(uint256,uint256,uint256,uint256,uint256)", +"a7633064": "getRandomType(uint16)", +"a7638346": "setFinaliseTime()", +"a7638c4d": "disableStakingPeriod()", +"a764eb45": "setCurrentIssuanceData(address,uint256)", +"a7651147": "loyaltySupply()", +"a76594bf": "getPlayersCount()", +"a7668eba": "calcTokenCost()", +"a766f3d1": "storeStub(address,bytes32,bytes32)", +"a76769a5": "fillOrderWithEth()", +"a76774f5": "jackpotCompleted()", +"a7677ee3": "AslanToken()", +"a767d8be": "preIcoMaxCap()", +"a76a155e": "getBetsFromAddress(address)", +"a76bb04e": "setRewardPoolWallet(address)", +"a76d368a": "candyPowerToken()", +"a76d50ad": "multipleTransfer(address[],uint256,uint256)", +"a76dd676": "TIER3_PERCENT()", +"a76decce": "_createNFT(uint256[5],address,uint256)", +"a76ee2d8": "fillBuyOrder(address,address,uint256,uint256,uint256,uint256)", +"a76eeab2": "updateVitality(uint256,uint8)", +"a76f3543": "getUpgradePointer()", +"a76f43a0": "bancorDaiSmartTokenRelay()", +"a77078e7": "withdrawForOp(address)", +"a7721e0f": "multiplyTokensSend(address[],uint256[])", +"a7724b16": "bingo()", +"a7728589": "setMintAgent(address,address)", +"a7731150": "StoreFile(bytes32,string,string,string,string,string,uint256,bytes)", +"a7737b93": "NumberOfPart()", +"a77384c1": "setTotalShares(uint256)", +"a773d98a": "getAssetIDHash()", +"a7741827": "deleteAllUris()", +"a7743462": "setFounderTokenWallet(address)", +"a774f163": "adjustDefaultSpritePrice(uint256,uint256)", +"a775511a": "isMainsalePeriod()", +"a775b1c4": "NAORIS_TEAM_TOKENS()", +"a7760d79": "preICOendTime()", +"a77674a7": "buy_energy(address,uint32,uint32,uint64)", +"a7771ee3": "isVoter(address)", +"a7775bd7": "YDToken()", +"a777aa5d": "changeMaxTokenSell(uint256)", +"a777d0dc": "hello(string)", +"a777deca": "thirdRelease()", +"a777eca9": "MinerRewardChanged(uint256)", +"a77a8230": "allowence(address,address)", +"a77aa49e": "setIntValue(bytes32,int256)", +"a77adc23": "WaxToken()", +"a77ae839": "approveRewards(uint256)", +"a77b2e37": "Coin()", +"a77b4d8b": "setBaseCurrency(address,bool)", +"a77b6efb": "mintCoins(uint256)", +"a77beea1": "transfer(address,address,address,address[],uint256)", +"a77c1b08": "checkTransfer(address)", +"a77c61f2": "cobinhoodUserIDs(address)", +"a77ee38c": "promoTypeNum()", +"a77f7c8c": "whitelistMany(address[])", +"a78036b7": "clearDeposits(address,uint256)", +"a7807b84": "transferByRelatedToken(address,address,uint256)", +"a78082aa": "TokenSafe(address)", +"a78085ef": "lockMainSaleToken()", +"a780b2f3": "parseRate(string)", +"a7811732": "totalERC20Contracts(uint256)", +"a78118a4": "onlyDevs()", +"a781384e": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256,bytes32)", +"a7819ad7": "_challengePart2(uint256,uint256,uint256)", +"a783a4f1": "get_hash(uint16)", +"a78488af": "startTokenRaffle(uint256,address,uint256,bool)", +"a78488e1": "WSTO()", +"a784d969": "setAssetsCertified(uint256)", +"a784ef22": "_calculateScore(uint256,uint256,uint256,uint256)", +"a7859131": "m_initialSettingsSet()", +"a785b96a": "TDEStartDate()", +"a786c1d2": "BONUS_DAY1_DURATION()", +"a7878831": "splitTokens()", +"a78810f8": "subscribeMe(uint8,bytes32)", +"a788aa07": "test_threeValidEqUint(int256)", +"a789e29c": "getContributorData(address)", +"a78a43c1": "getAllTeamScores()", +"a78a651a": "processContribution(address)", +"a78adf57": "UserAddressRegistry()", +"a78adfec": "setButtonParams(uint256,uint256,uint32,uint32)", +"a78b3d96": "addSubOwner(address,address)", +"a78bcf6e": "changeBankroll(address)", +"a78c5476": "SaleStarted(uint256)", +"a78c81ea": "changInviteAmountLimit(uint256)", +"a78cb567": "getCosignerFee(uint256)", +"a78cdfed": "gana()", +"a78d4316": "_near(uint256)", +"a78db39c": "blockedUntil()", +"a78deefa": "isGameEnd()", +"a78e635c": "XToken()", +"a78e887c": "calculatePurchaseReturn(uint256,uint256,uint16,uint256)", +"a78f0489": "secondTierDiscountUpperLimitEther()", +"a78f16ba": "setWhitelistedStatusInternal(address,address,uint256)", +"a79094b7": "changePolyRegisterationFee(uint256)", +"a7909e47": "DAppReady()", +"a791c665": "WojakCoin()", +"a791da46": "buyXwithdrawForContract(address,uint256,uint256)", +"a7932d20": "marketToken2019()", +"a7944579": "sit()", +"a79726b7": "tokenSpin(uint256)", +"a7972a80": "MoviePass(string,string,uint8,uint256)", +"a7977ffc": "isWhiteListedAndAffiliate(address)", +"a7985ae4": "SNAILMASTER_INCREASE()", +"a7987b58": "LendroidSupportToken()", +"a799464c": "isMyInfra(uint256)", +"a7996adc": "_safePaymentActionAtIco(uint256,address,uint256)", +"a799de7e": "anotherTransferTo(address,uint256)", +"a79a3c30": "teamAlloacting()", +"a79a3cee": "isConfirmed()", +"a79a416d": "SetCommissionRate(uint256)", +"a79ac3be": "ReleaseTokenForReserveFund()", +"a79b2752": "validate(address[4],address,uint256[12],uint256,bytes,uint256)", +"a79c7faf": "test_threeInvalidEqBytes()", +"a79ca634": "_setSubnodeOwner(bytes32,address)", +"a79dad23": "GetBetNums(uint256)", +"a79deb4f": "acceptTradeDeal()", +"a79ec95a": "oneEtherIsHowMuchFST()", +"a79f26dc": "force()", +"a79f4773": "buy_ETH(uint256,bytes8)", +"a79f7412": "withdrawCoinExt(uint256)", +"a79fdbb4": "presalePaused()", +"a7a066b7": "AxtrustICO(uint256)", +"a7a0d537": "something()", +"a7a1019d": "tixPresale()", +"a7a1e0a7": "auditNTVUText(uint8,uint8,string)", +"a7a1ed72": "pass()", +"a7a260cf": "TokenDeployed(uint256)", +"a7a2720e": "processFunding(address,uint256)", +"a7a38f0b": "history(uint256)", +"a7a39daa": "getBrickIdsByBuilder(address)", +"a7a3ba54": "SponsorMusic(uint256,uint256,address)", +"a7a44eba": "getFirstUnionIds(bytes32)", +"a7a5e00b": "updateCustomer(address)", +"a7a604b2": "mintUptoCap()", +"a7a60580": "MeteorToken()", +"a7a62aee": "init(address,uint256,address,string,string)", +"a7a7be1a": "newWriteAddr()", +"a7a8add2": "setSaleAgentContract(address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"a7a957ff": "getSaleDayNow()", +"a7aac32d": "withdrawAdvisorTokens()", +"a7aad3db": "voterReward(address,uint256,uint256)", +"a7aaf58c": "getPollID(uint256,uint256)", +"a7ab6961": "withdrawalDelay()", +"a7abb8cc": "BM_MasterClass_Reserved()", +"a7abc124": "activate(bool,bool)", +"a7ace55d": "incrementDivisor()", +"a7ae9756": "startNewStakingInterval(uint256,uint256)", +"a7af0b99": "Nerdearla()", +"a7afc1ca": "deactivateCurrentRound()", +"a7b0793b": "setAdvisorFundWallet(address,address,uint256)", +"a7b07acc": "AssetSplit(address,address,address,address)", +"a7b2042f": "phasePublicSale3_From()", +"a7b2bfc7": "multyTransfer(address[],uint256[])", +"a7b2d313": "LogAnswerReveal(bytes32,address,bytes32,bytes32,uint256,uint256)", +"a7b2d4cb": "remove(int256,address)", +"a7b2fc00": "updateTokenNameSymbolAddress(string,string,address)", +"a7b314ac": "stepProfit()", +"a7b3a6fc": "Mine(address,uint256,uint40)", +"a7b4b60f": "erc223Fallback(address,uint256,bytes)", +"a7b69ed9": "PostLicense()", +"a7b71dca": "getJobValue(bytes16,address,address,uint256,uint256)", +"a7b7eefb": "JustmakeToken()", +"a7b7f1d4": "getLatestUnitRaffleInfo()", +"a7b83225": "AgriChainSeal()", +"a7b86824": "lockup(address,uint256)", +"a7b88506": "canRead(address,bytes32)", +"a7b8c868": "startCrowdsaleTime()", +"a7b91780": "getTokensSale()", +"a7b94972": "newBen(address)", +"a7ba0cb5": "createChatRoom(bytes32)", +"a7ba44c3": "isFinalizerSane()", +"a7ba9fb1": "epsilon()", +"a7bb1cf4": "_setRarityBonusValue20(uint256)", +"a7bb5803": "splitSignature(bytes)", +"a7bb959a": "Apen()", +"a7bc2efd": "transferGroupIntertrade(uint256,address)", +"a7bc3cb9": "SafeLocked(uint256)", +"a7bc8c46": "howManyVoters(bytes32)", +"a7bd4791": "MakeItWeinSec()", +"a7bda7e3": "extractNameFromDataET(bytes)", +"a7bdf16e": "isValidBump(uint16[3],uint16[3])", +"a7be2648": "unTrackToken(address,uint16)", +"a7be85c6": "AUTHOR()", +"a7bf1b6c": "purchase(uint256,uint256,address,address)", +"a7bf1cbf": "unfreezeTransfersSince(string)", +"a7bf8921": "freezeContract(bool,uint8[],bytes32[],bytes32[])", +"a7c19841": "preSaleInit()", +"a7c1a708": "LogGameStarted(uint256)", +"a7c1a75b": "maxAuditDuration()", +"a7c1abf1": "decodeMessage(string)", +"a7c1e629": "cancelTransfer(address)", +"a7c25c5a": "setMileagePointPrice(uint256)", +"a7c368c0": "pushBuyerList(address)", +"a7c3ce60": "distributeRegisterFee(uint256,uint256,bytes32,uint8)", +"a7c3d71b": "icoStartTime()", +"a7c41e28": "zennitToken()", +"a7c4abdb": "calculateTokenAmount(uint256,uint256,uint256)", +"a7c5052e": "buildDSTokenRegistry()", +"a7c591c4": "setBest(uint8)", +"a7c5c2a2": "BirthFee()", +"a7c6c83a": "getMystr()", +"a7c6f483": "exchangeRateAuth()", +"a7c742c9": "CommissionEarnedEvent(address,uint256)", +"a7c7d2a0": "airdropValue()", +"a7c7e2a0": "assignOwner(address,address)", +"a7c7fdeb": "transferTokensToOwner()", +"a7c83514": "inflationChange()", +"a7c8e68a": "sealManualMigration(bool)", +"a7c961d5": "bonussale_Cap()", +"a7c9771b": "getVATDeductions(uint256,uint8,uint256,uint8)", +"a7c98748": "test3_searchNext()", +"a7c99f2c": "changeCompetitionAddress(address)", +"a7c9d92f": "HammBones()", +"a7ca3010": "getWithdrawTransactionCount(bool,bool)", +"a7cac846": "weights(address)", +"a7cadc50": "Dagelan()", +"a7cb6edc": "tokenRestriction(address,bool)", +"a7cbe06f": "MaxFunds(address,uint256,uint256)", +"a7cc440e": "getCityResourceRichness(uint256)", +"a7cc90e9": "calculateCounters(uint256,uint256,uint256,uint256)", +"a7cd21ea": "transferPrivilege(string,address)", +"a7cd674e": "whitelist_enable()", +"a7cdc2ad": "getAddressExist(address)", +"a7cebd4d": "createActivity(uint16,uint16,uint128,uint64,uint64)", +"a7cec1d2": "DataStorage()", +"a7cf7edd": "mimul(uint64,uint64)", +"a7cfe365": "addAuction(uint40,uint256)", +"a7d0b6ce": "payoutForResult(uint256)", +"a7d0c490": "keybuy(uint256)", +"a7d0f8af": "callStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"a7d27056": "readMessage(uint256)", +"a7d2b73f": "SharkProxy()", +"a7d2d2ab": "AngelCoin()", +"a7d30400": "window1TokenExchangeRate()", +"a7d4549c": "test(uint8,bytes32,bytes32,address,address)", +"a7d4bbe6": "modexp(uint256,uint256,uint256)", +"a7d4e89d": "migrationOperator()", +"a7d512d6": "getCertificateInfoByNo(address,uint8)", +"a7d55b76": "tryDismissRoom(uint256)", +"a7d5d4fa": "approveAddToken()", +"a7d68896": "updateCap(uint256)", +"a7d77305": "chargeMonthlyRate(bytes32,address)", +"a7d8287d": "MyFreezeContract(address)", +"a7d82b00": "setGoldCertVerifier(string)", +"a7d89168": "getLockedAmount(address,address)", +"a7da611f": "commission_mom()", +"a7da74f8": "addQuoter(address)", +"a7daf6dd": "eligibleForDividence(address)", +"a7dbb402": "changeAddress(string,address)", +"a7dbfcaa": "setCostOfToken(uint256)", +"a7dc0aee": "test_threeValidEqString()", +"a7dd7a59": "unchainedMultisigVersionMinor()", +"a7dd7e37": "distrust()", +"a7de83e6": "generate(address,address)", +"a7de9c63": "quantityFactor()", +"a7dea7e4": "getMyPastLosses(address)", +"a7dee615": "_NewListingWhitelisted(bytes32)", +"a7dfc420": "investorAmountTokensToBuy(address)", +"a7dfc874": "unregister(bytes,address,uint256,bytes)", +"a7e03dcb": "mintPerBlock()", +"a7e1a8ee": "setAttributeType(uint256,string)", +"a7e1b516": "unban_user(address)", +"a7e1c4ac": "YunbeiToken(uint256,string,string)", +"a7e1f6a2": "doubleDown()", +"a7e21e80": "hold(address)", +"a7e25683": "testShortOutput()", +"a7e2cca9": "setFinished(bool)", +"a7e328d4": "setSomeValues()", +"a7e33a0c": "sendChatMessage(string)", +"a7e350f7": "payOutGovernors()", +"a7e45699": "buyWildcardToken()", +"a7e47920": "createItems(uint256[],address[])", +"a7e48375": "MikadoToken()", +"a7e53987": "EthCapInWei()", +"a7e5a338": "HIDERA(uint256,string,string,uint256)", +"a7e5cb3e": "getWhoBet(address,uint256,uint256)", +"a7e5f1bc": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"a7e5f3c5": "likeBlock(uint256)", +"a7e74377": "_preValidateTransaction(address,uint256)", +"a7e74ab7": "setMx(bytes32,address)", +"a7e7d2f4": "BBXCoin()", +"a7e81d22": "lastBlock_f5Hash_uint256()", +"a7e86daa": "executeBidFor(address,uint256,uint256,uint256)", +"a7e92fb5": "unagree()", +"a7e93e87": "retractLatestRevision(bytes20)", +"a7e94542": "approve(address,uint32)", +"a7ea48cf": "CoinBroToken()", +"a7ead565": "FiO()", +"a7eb3848": "transferRewardWithoutFee(address,uint256)", +"a7eb685b": "mintFeeTokens(uint256)", +"a7eb891f": "isClientPaidUp(address)", +"a7ebc5bd": "privilegedAccountStatus(address)", +"a7ec619f": "getCurrentStageDiscount()", +"a7ecce5f": "removeQuitAccount(address)", +"a7ecd0ad": "getSpecialAddresses()", +"a7ee323e": "VULCAN_PROMETHEUS_FTL_SPEED()", +"a7eea700": "sale2Started()", +"a7eeea37": "NewContributor(uint256)", +"a7ef4329": "getHelloWorld()", +"a7f01e4d": "getLockedFunds(address)", +"a7f07011": "tradeExecutor()", +"a7f0b3de": "genesis()", +"a7f17bd5": "Bodcoin()", +"a7f18b5a": "setPOOL_edit_14(string)", +"a7f1b77a": "addReferralDeposit(address,uint256)", +"a7f2cc54": "feeCalculated()", +"a7f2f4e2": "getMembershipStatus(address)", +"a7f31e0a": "getCelda(uint256)", +"a7f32edd": "OfflineCastleSold(uint256,address,uint256)", +"a7f365ae": "setLockoutPeriod(uint256)", +"a7f36c2e": "setProviderPriv(uint256,bool)", +"a7f39d8a": "tokenSaleWeiGoal()", +"a7f3e70f": "setSaleTimes(uint256,uint256)", +"a7f43779": "remove()", +"a7f43acd": "reserveContract()", +"a7f49e1d": "maximumBuyBackAmountInCents()", +"a7f58c24": "computeInitialPrice(uint8)", +"a7f5eccc": "previousReturnValue()", +"a7f738df": "getRoundAheadAmount(uint256)", +"a7f7417d": "preICOFreeBonusPercent()", +"a7f81863": "thirty_wallet()", +"a7f86c63": "_removeRoomNight(address,uint256)", +"a7f879ea": "teleportToken()", +"a7f8a53c": "ownerSetControllerAddress(address)", +"a7f8fbd4": "cancel_contract()", +"a7f95a92": "HardcodedCrowdsale(address)", +"a7f9801b": "TakedFunds()", +"a7f987ee": "getDebugNow()", +"a7f9df38": "investWithBitcoin(address,uint256)", +"a7f9fe72": "getAllRecords()", +"a7fab81a": "impl_redeem(address,uint256)", +"a7fb95f6": "changeTeamName(uint256,string)", +"a7fbe7ad": "safeLastDate()", +"a7fbed9e": "getCurrentPhaseIndex()", +"a7fc7a07": "addController(address)", +"a7fca953": "getSrcQty(address,address,uint256,uint256)", +"a7fdb4f5": "finishedSale()", +"a7ff0a4e": "TransferTokens()", +"a7ff2373": "multiSendFrom(address,address[],uint256[])", +"a7ff7a40": "MANACrowdsale()", +"a7ffb2db": "getMaximumRound(uint256)", +"a7ffe560": "batchSpawnAsset(address,uint256[],uint256[],uint256)", +"a8006dfe": "exec_admin()", +"a801ea25": "launchLotto()", +"a801fd63": "setNewValue()", +"a802257d": "addr_Saddlery()", +"a8026912": "setSource(address)", +"a802afa1": "minOfArray(uint256[])", +"a80325bd": "toB32(bytes)", +"a804903a": "FOUNDER2()", +"a80498f1": "AdvancedDeposit(bytes32,uint256)", +"a804cc7d": "setUser(address,address,string,string,bool,bool,bool)", +"a804da18": "cliffReleasePercentage()", +"a804fcb4": "COMMUNITY_PERCENT()", +"a805bfef": "addInvestors(address[],uint256[],uint256[],address[])", +"a8074b55": "bundlingDenied()", +"a807598e": "incluirUsuario(address)", +"a8077951": "updateLastBuyKeysPIDs(uint256,uint256)", +"a807ea0f": "newMostInviteTimes_()", +"a8083b74": "setContributionSettings(uint256,uint256,uint256)", +"a8084938": "CryptoCupToken()", +"a80955b1": "setFoundersTokenAllocation(uint256)", +"a80a60fb": "saleFirstPresaleEndBlock()", +"a80a9e40": "setActive(address,address,uint256)", +"a80acfd3": "DisableSelling()", +"a80aee59": "isActiveDelegate()", +"a80bf3e6": "tokenLocker()", +"a80bffb6": "tokensOfSell()", +"a80c609e": "tokenImbalanceData(address,uint256)", +"a80c89d2": "RollbackedContract(uint256,address,address)", +"a80d2fb4": "getPeerMessageCount(address,address)", +"a80d4e9a": "EtherAuction(uint256)", +"a80da0f1": "SpursvsWarriors419()", +"a80da34a": "propertyAreaSqFtOf(uint256)", +"a80db9fb": "nextStealTimestamp()", +"a80dca57": "recharge(string)", +"a80de5ea": "lottery(uint8)", +"a80e3659": "testDisputedReadValid()", +"a80e6c01": "getClassPlayers(uint256,uint256,uint256)", +"a80f54ca": "transferToExchange(address,uint256)", +"a80f9e2d": "RankingBallGoldCustomToken(address)", +"a80fe377": "Goahead()", +"a8103621": "dividendsPayed()", +"a810385e": "setBla(string)", +"a8103c80": "SSHToken(uint256,string,uint8,string)", +"a81077a7": "usersRegistered()", +"a810a54c": "withdraw(bool)", +"a810bc13": "ETCharPresale_v2(address)", +"a8132a46": "hardCapInToken()", +"a8140c95": "OceanScapeCoin(uint256,string,string)", +"a8150e72": "removeOrderOfVendor(address,uint256)", +"a8154e17": "teamUnfreezeDate()", +"a815a85d": "getItemCounts()", +"a815ff15": "set(string,address)", +"a8164a84": "ThxMsg(address,string)", +"a816899e": "icoBalances(address)", +"a817163b": "BusTokenLock(address,address)", +"a817ccac": "threeParams()", +"a817d2de": "extract20(bytes32)", +"a817f668": "findPlayer(address)", +"a8181851": "dapCarToken()", +"a8182cd3": "serverCancelActiveGame(address,uint256)", +"a818a222": "TokenAdded(address,uint256,uint256)", +"a819515d": "updateParentTotalTheoreticalSupply()", +"a819819b": "sweepDeityCommission(uint256)", +"a819c36c": "ClapToken()", +"a81a3e4d": "hasOpenApplication(address)", +"a81afa57": "sellSpecialTokens(address,uint256)", +"a81c3bdf": "ethFundDeposit()", +"a81c804e": "addToWhitelistBulk(address[])", +"a81d18d7": "setTokenMeta(uint256[],uint256[],uint256[])", +"a81d3424": "getFrozenToken(address)", +"a81daf29": "ETHernitymining(address)", +"a81dfde0": "CBT()", +"a8201894": "getCurrAuctionPriceAuctionID(uint256)", +"a820b44d": "iterateStart()", +"a820d02e": "MarketingDevelopmentAmount()", +"a8222adf": "sellerNumOpenDeals()", +"a82375d1": "ToGoConcert(uint256,string,string)", +"a8239d0b": "getPrice(string,address)", +"a8243ff4": "getactlen()", +"a824bd9a": "autoSell(address,uint256)", +"a824e636": "walletSend(address,uint256,address)", +"a82524b2": "presaleStartTime()", +"a8267482": "msp()", +"a826b422": "addCbAddress(address,bytes1,address,bytes)", +"a826ee78": "submitResult(uint256,uint256[])", +"a8276d97": "SetcashOutTime(uint256)", +"a827ef0a": "EvLoveItemAdded(bytes32,address,uint256,uint256,string,string)", +"a828251e": "voteProposal(bytes32,address,address,uint256,bytes32,string,bytes)", +"a8287f79": "addProduct(address,uint256,string,string,string)", +"a828eec5": "pureFn(uint256)", +"a828f441": "redeemFromEscrow(uint64)", +"a82970d7": "SetWorldData(uint256,uint256,uint256,uint256,uint256)", +"a829c3d1": "requestArbitration(bytes32,uint256)", +"a829d8ec": "VUP_TOKEN_SUPPLY_TIER4()", +"a82aa270": "updatePick(uint256,uint256)", +"a82b3640": "getDrawP()", +"a82ba2d5": "renounceKeeper()", +"a82cb091": "BuyDoubler()", +"a82d1d1a": "TwinkleToken()", +"a82d4ac1": "Crowdfunding(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a82e0dcc": "theCyberMessage(string)", +"a82e1374": "changePublicallocation(uint256)", +"a82e3179": "jingleContract()", +"a82fc94f": "issueTokensPresale(address[])", +"a8308665": "add5NewTraits(string,string,string,string,string,bool)", +"a8311aa8": "getParties()", +"a831751d": "addPartOwner(address)", +"a8319481": "cancelRole(address,address)", +"a831f0bb": "compareStringValue(bytes32,bytes32,bytes1)", +"a8321459": "topUpAvailable()", +"a8324a3f": "batchRestoreWebGift(address[])", +"a832d7df": "newSell(uint32,address,uint256)", +"a83332d5": "TokeniVOX(uint256,string,string)", +"a833386b": "toBytes32()", +"a833c7ab": "incentivisationAllocation()", +"a83467a1": "dividendcommission()", +"a8347f6a": "maxCrowdsaleCap()", +"a834c43d": "buyAccess(string)", +"a83500e0": "check_redeemed(string)", +"a8351c03": "pauseCrowdsale()", +"a83627de": "updatePeriod()", +"a8366fef": "TOKEN_STANDARD_ERC20()", +"a8370492": "setTrFee(uint256)", +"a83723f3": "runRotateTime(uint256[],bytes32,bytes32)", +"a8372511": "STCoin(uint256,string,string)", +"a837aeb2": "AdminStartDraw(string,bytes32)", +"a837c35e": "createAmountFromEXORForAddress(uint256,address,address)", +"a8385231": "sendTokensToAddress(uint256,address)", +"a839fc56": "setGoalAchieved(bool)", +"a83b1e21": "reply(string,bytes32)", +"a83cf7fe": "RefundVault(address)", +"a83e1d10": "getUserQuoteIds(address)", +"a83f9429": "extend1Week()", +"a840617f": "LogKycRefused(address,uint256)", +"a840d2a8": "GTO()", +"a8418d01": "BECToken(uint256,string,string)", +"a841da4b": "lockJackpots()", +"a841f1eb": "handleFunds(address,address,uint256)", +"a842375e": "refundToken(address)", +"a842f0f2": "upgradableContractAddress()", +"a843c51f": "transferContractOwnership(address)", +"a843c97f": "attack(uint256,uint256,uint256[])", +"a844545d": "completeMinting()", +"a84524a4": "getDetailedPollResults(uint256,uint256)", +"a84694c8": "permissionIndexOf(uint8,address)", +"a8469ce9": "MINING_REWARD()", +"a846c2fd": "payback(uint256)", +"a846fa37": "waitQuery()", +"a8474a30": "_computeRunes(uint256)", +"a847a1b3": "StarbasePresaleWallet(address[],uint256,uint256)", +"a847a71c": "isOnTrading(uint64)", +"a8484938": "doApprove(address,uint256)", +"a848e2ec": "tokenSupportSoftLimit()", +"a8492f46": "pickTicket(bytes4)", +"a84950df": "calculateTimeBonuses(uint256)", +"a8496426": "getOrderId()", +"a849cef8": "minDeposits(uint256)", +"a84a70aa": "lockedTime(uint256)", +"a84b9de0": "dequeueDouble()", +"a84c5330": "createNewRevision(bytes20,bytes)", +"a84c6362": "ICO_CAP4()", +"a84d073a": "interfaceMintTokens(address,uint256)", +"a84dd3a6": "teamWallet_3()", +"a84e5f40": "CRYPTONEREUM()", +"a84eb999": "removeAddresses(address[])", +"a84ebb58": "setVM(bytes32[10],uint256[4])", +"a84f3e5a": "overdraftUnvested()", +"a84f763b": "TokenTransferred(uint256,address,address)", +"a84fa137": "transferToRound(uint256)", +"a8514113": "_emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"a85165e0": "checkSubPrice(bytes32)", +"a8516d21": "_withdrawTokens(address,uint256)", +"a851e2f6": "LogCreateNET(address,uint256)", +"a852995d": "bonus1StartETH()", +"a852d5ba": "emergency_withdraw(address)", +"a853d2cd": "getUserByUsername(bytes20)", +"a8540daa": "getSellPriceDecimals()", +"a8542f66": "ANY()", +"a8545830": "transact_token1(address,address,uint256)", +"a855d4ce": "uintStorage(bytes32)", +"a8565523": "AquaPay(string,uint256,uint8,string)", +"a8567a1c": "bidderUpdateBid()", +"a85688d2": "_rewardPoS()", +"a856b9c2": "lastRandom()", +"a85717d3": "open(bool)", +"a8575102": "getDnasCount()", +"a8590135": "issuanceEnabled()", +"a85923aa": "ZibPay()", +"a859a092": "minToken()", +"a859eb81": "BONUS_TIER_4_LIMIT()", +"a859fffe": "SweDexDividends()", +"a85a726d": "NewUser()", +"a85aba19": "setPreURI(string)", +"a85ade82": "FOUNDERS_VESTING_DURATION()", +"a85adeab": "endTimestamp()", +"a85b13b9": "claimBitNauticTokens()", +"a85c06b7": "_packRaceData(uint256,uint256,uint256,uint256)", +"a85d11b3": "verifyCode(bytes32,uint256)", +"a85d3179": "getMiningRate(address)", +"a85e07e2": "getMesa(uint256,uint256,uint256)", +"a85e59e4": "transferFrom(bytes,address,address,uint256)", +"a85ef579": "appendDarknode(address,address,uint256,bytes,uint256,uint256)", +"a85f3761": "repayments(uint256)", +"a85f5c2e": "tradingData()", +"a85ffd1a": "setAutoDistributionViaETHContributions(bool,bool)", +"a85ffe4f": "manualSell(address,uint256)", +"a860bfa2": "BRCToken()", +"a860d119": "communityTokenHolder()", +"a861baea": "presale_address()", +"a861e16f": "setEmployeeSalary(address,uint256,uint256)", +"a861f99a": "getClientPaidUpTo(address)", +"a8627c15": "LINICOIN()", +"a863f595": "Btczocker(uint256,string,uint8,string)", +"a86416e2": "CROWDSALE_PRICE()", +"a8644cd5": "contract_eth_value_bonus()", +"a86477ad": "offeringEnabled()", +"a8648aad": "TokenFunctions()", +"a8659216": "setInitialLockinDays(uint256)", +"a8660a78": "vestingStartTime()", +"a866665a": "ConsoToken()", +"a8670711": "isCloseSale()", +"a8681169": "withdrawWhiteList(uint256)", +"a868378b": "returnOfIncome(address,uint256)", +"a8683df7": "TokenMyUnicoin(uint256,string,string)", +"a868cd6f": "LogPolicyManualPayout(uint256,bytes32)", +"a868ec85": "setName(uint256,uint256)", +"a86abb3d": "allFilmsInfo(uint256)", +"a86b73f0": "toByte(uint8)", +"a86bc181": "EXPECTED_END()", +"a86c938b": "balanceOf(bytes8,address)", +"a86e3576": "symbol(address)", +"a86ed5e4": "thirdMaxAmount()", +"a86ee746": "restoreCutieToAddress(uint40,address)", +"a86f7212": "_allocatePlayerTokensTo(address,uint256)", +"a870a0a5": "getChannelClosingSettler(bytes32)", +"a870be8a": "setVendingStepValues(uint256,uint256,uint256)", +"a870ddc2": "moveTokensFromSaleToCirculating(address,uint256)", +"a871da91": "SHORT()", +"a871ffdc": "Getsafe(uint256)", +"a87253c7": "getlastuser()", +"a873b155": "GetMinimumBet()", +"a8740a71": "getCreditLedger(uint256)", +"a8754caa": "purchaserMapping(address)", +"a8756337": "getCurrentValidatorsLengthWithoutMoC()", +"a87595ce": "buynowPrice()", +"a875b2ed": "setIsBatch(bool)", +"a87607af": "Show_address_for_option_B()", +"a8762854": "numberInRaffle()", +"a8766017": "ARXToken()", +"a876a8a0": "_round()", +"a877b557": "TransferMinimumFeeExecuted(uint256,address,uint8)", +"a877db9f": "none()", +"a878ad27": "createTokenToOperation()", +"a878aee6": "withdrawAllTokens(address)", +"a8790533": "distribution(address[],address,uint256,uint256,uint256,uint256,uint256)", +"a879af45": "oldTokenBalance(address)", +"a879fcbb": "assetInfo(uint256)", +"a87af57b": "setTokenForSale(uint256,uint256,address,bool)", +"a87b1cd2": "whitelistedBeforeActivation(address)", +"a87b73c7": "StageOpened(uint256)", +"a87ced35": "startDispute(bytes32,address,int256)", +"a87d2321": "Gummy()", +"a87d8b6b": "walkClientOrders(address,uint128,uint128)", +"a87d942c": "getCount()", +"a87de9cc": "ADD(uint256,uint256)", +"a87e0c33": "newAgon(uint64,uint64)", +"a87e5d3f": "setPriceUpdateFrequency(uint256)", +"a87e7552": "isValid(bytes,bytes)", +"a87e8aad": "getMyCat()", +"a87ebcb5": "setJackpotMinimumAmount(uint256)", +"a87f32a2": "ownFiles(string,string,string)", +"a87f84fc": "updatePersonLocation(uint256,string)", +"a87ffd1d": "GenesisInitialSupply(address,address)", +"a880319d": "addToken(address,string,string,uint8,bytes,bytes)", +"a880531f": "getOraclizeCbAddress()", +"a8817403": "addFamedStar(string,uint256,uint256)", +"a881f85e": "clearTokenSale(uint256)", +"a8825650": "slice(bytes32[],uint256,uint256)", +"a8826602": "getAllCellIds()", +"a882d49f": "replaceMultisig(address)", +"a8834aac": "getPointer(uint8)", +"a8836844": "returnPayees()", +"a883aab3": "GlobalAmountCapHard()", +"a883b0c4": "changeRate(uint256,uint256)", +"a883fb90": "getPendingVersion()", +"a884a248": "getFill(bytes32)", +"a885508a": "removePermissionManager(address,bytes32)", +"a885dab6": "getTokensPerDay(uint256)", +"a8862fcc": "isEscaping(uint32,int256)", +"a8865bda": "masternodeIsValid(address)", +"a886d66f": "crowdsaleList(uint256)", +"a8870d6f": "mintingDataUpdatedAtBlock()", +"a88775e0": "rememberOldestBlock()", +"a887d816": "checkTransferRequirements(address,uint256)", +"a888e4c9": "releaseSingleAm()", +"a8893a6e": "getNumOfSalesWithSameId(bytes16)", +"a88b2562": "AZLTEST()", +"a88b61aa": "isIncreasedEnough(address)", +"a88be96b": "RESERVE_EXCHANGE_RATE()", +"a88c0a9f": "LAMP()", +"a88c5ef7": "NextPayout()", +"a88c906c": "_buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"a88d1902": "get_asset_count()", +"a88e34cb": "setERC20address(address)", +"a88ec6fa": "showUnpaidDepositPercent(address)", +"a88ef2d3": "CarlosToken()", +"a88fa4b4": "updateStartTimeManually(uint256)", +"a88fe42d": "setPrices(uint256,uint256,uint256)", +"a88fe73a": "discountValue10()", +"a89004c5": "modifyQuanticCloudIOTData(uint256,uint256)", +"a89026a3": "teamProfitAddress()", +"a890b7d9": "finalize(address,bool)", +"a890d257": "IsThisPrivate()", +"a8915c7e": "periodPreITO_weiPerToken()", +"a89171e3": "checkHasilBet(address)", +"a89196a6": "eraExists(bytes32)", +"a891af67": "megaCandy()", +"a891fdc3": "earlybirdEnded()", +"a8928b45": "withdraw_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[4])", +"a8929183": "LinkyexToken(address,address)", +"a894878d": "createPromoMeme(address,uint256,string,uint256)", +"a8967557": "isPresaleClosed()", +"a896d92d": "isRegularAddress(address)", +"a8977041": "Plenum(uint8,uint256)", +"a8978434": "softResolveAnswer(uint256)", +"a8986327": "minTokenForSP()", +"a899e615": "raiseRatio()", +"a899ef57": "parentSnapshotId()", +"a89a4f09": "creatorBalanceChecker()", +"a89acca4": "setCrowdsaleDates(uint256,uint256)", +"a89ae4ba": "oracleAddress()", +"a89c5be0": "MAX_TOTAL_TOKEN_AMOUNT()", +"a89c8c5e": "setTokenAddresses(address,address)", +"a89cdad9": "nextSnapshotTime()", +"a89d1eb9": "foobarToken()", +"a89f173c": "setUint(int256,uint256,uint8,uint16,uint32,uint256)", +"a89f5f85": "cmp(uint256,uint256,bool)", +"a89fb977": "investorDeposited(address,address)", +"a8a01c3e": "cvcOwner()", +"a8a1d27b": "firstRoundWMTokensLimit()", +"a8a403df": "MaptPresaleToken(address,address)", +"a8a4bf11": "startNewAuction(uint64,uint64,uint64,uint64)", +"a8a52747": "getRelayedSender(bytes16,uint8,uint128,uint8,bytes32,bytes32)", +"a8a54008": "registerAddress(address)", +"a8a5c22c": "refineCost()", +"a8a618e9": "draw_random_card(uint8)", +"a8a6e9df": "deliveryToken(uint256,uint256)", +"a8a77984": "StoreBytes(bytes)", +"a8a9aaa9": "TokenLayer(address,address)", +"a8aa1b31": "pair()", +"a8aa7e19": "buyTeamHandle(string)", +"a8aaa2a6": "StringMapper()", +"a8aae025": "delFromList(string,address[])", +"a8abe1fb": "getCET4ScoreById(uint32)", +"a8abe69a": "getTransactionIds(uint256,uint256,bool,bool)", +"a8ac262b": "phaseCrowdsale()", +"a8ae3745": "evaluateTokens(uint256,address)", +"a8ae3e4b": "getAllocatedTokenValue(address,address,address)", +"a8ae5eb8": "howManyTanks()", +"a8ae9046": "RFToken()", +"a8aeecd9": "getCostForBattleCards(uint256,uint256,uint256)", +"a8af232b": "withdrawTopUp()", +"a8af4ff5": "getRegistrationStatus(address)", +"a8af6e05": "emitHashSet(address,bytes32,bytes32)", +"a8af74f1": "calcTrackerCount(uint256)", +"a8afc538": "priceAtInitialAuction(uint256,uint256)", +"a8b0312c": "GameStatus(uint8,uint8,uint8,uint8)", +"a8b05162": "_changeTilePrice(uint8,uint256)", +"a8b151fd": "santaFundWallet()", +"a8b1895d": "leftLottery()", +"a8b25075": "allowTransfers(bool)", +"a8b26420": "isUInt64ValidIn64(uint64)", +"a8b31f04": "HHH3(string,string)", +"a8b322b6": "verifiedWinnersCount()", +"a8b3f80f": "getListTokens(address,uint256,uint256)", +"a8b415d2": "BanliangCoin()", +"a8b42f1f": "registerAsAnOpponent()", +"a8b50ee0": "getWinnningsLength()", +"a8b57f15": "VIPPurchase(address,address,uint256,uint256)", +"a8b60b93": "ackMsg(uint256,string)", +"a8b65043": "useChainlinkWithENS(address,bytes32)", +"a8b82c5b": "BaseAgriChainContract()", +"a8b86c4c": "ZchargeToken(uint256,string,string)", +"a8b8799f": "getRecordId(uint256)", +"a8b88268": "checkEarlybird(uint256)", +"a8b973a1": "bonusMultiplier()", +"a8b981d3": "FOURTH_RATE()", +"a8baa97d": "getPlayerDetectGroup(address)", +"a8bb76d4": "checkSettlement()", +"a8bbe5a4": "ERC20Voting(address)", +"a8bc362e": "KleynCoin()", +"a8bc3a6c": "whitelistedPlannedContributions()", +"a8bcbf3c": "payManagementBodyAmount(uint256)", +"a8bd9c32": "tokenIndexToApproved(uint256)", +"a8bda3e9": "getTRed(uint256,uint256,uint256)", +"a8beb2cf": "Lockup6m_20180801(address)", +"a8bfd57f": "getMinerOffset()", +"a8c0f15e": "addProperty(bytes32)", +"a8c10d78": "BetSubmission(uint256)", +"a8c12d7c": "PayMain(address)", +"a8c17ec2": "incremental(uint256)", +"a8c1a0b7": "BuyTokensExternal(address,string,uint72,uint88,uint88)", +"a8c23cb9": "isValid(bytes32,string,address,uint256,address)", +"a8c278a2": "verificationFee()", +"a8c2c4a7": "mainICOEndTime()", +"a8c310d5": "distributeAmounts(address[],uint256[])", +"a8c3d246": "LamaToken()", +"a8c3ec48": "oraclize_query(uint256,string,string[2])", +"a8c499a0": "lrcDeposited()", +"a8c4c8bc": "right64(uint256)", +"a8c65126": "determineNextRoundLength()", +"a8c69264": "setreleaseFinalizationDate(uint256)", +"a8c6e684": "addint16(int16,int16)", +"a8c89c5b": "payableEnabled()", +"a8c923e2": "BlockchainDevCoin()", +"a8c9f8ae": "unSoldTokens()", +"a8ca698b": "absSub(uint256,uint256)", +"a8cab3d1": "Frozen()", +"a8cb7b4f": "ownerRequired()", +"a8cbabb7": "blockCrowdsale()", +"a8cbb5de": "addMake(uint256)", +"a8ccef6c": "setClue2(string)", +"a8cd0a80": "getTest()", +"a8cdcebd": "exchangeIdsToOpenMakeOrderIds(uint256,address)", +"a8ce0e60": "QuestTestToken()", +"a8ce6b73": "calculateWithdraw(uint256,uint256,uint256,uint256)", +"a8d00e73": "dayLength()", +"a8d088bb": "getManagers()", +"a8d10fb8": "getOrgCount(string)", +"a8d18472": "estWolkToBurn(address,uint256)", +"a8d18bc0": "HireGoCrowdsale(uint256,address)", +"a8d1fcff": "cancelNewBallot()", +"a8d201ab": "removeNodeFromWhitelist(address)", +"a8d34ea5": "getCompte_10()", +"a8d3a63d": "pullEtherFromContractAfterICO()", +"a8d48709": "EARLYBIRD_PRICE_MULTIPLIER()", +"a8d49e64": "setWhitelistAdmin(address)", +"a8d4a03b": "heroes(uint256)", +"a8d4ee0f": "setOwnerExt()", +"a8d51f7e": "GiftToken(address)", +"a8d5308c": "bountymanager()", +"a8d5652e": "tokensPerTier()", +"a8d5efa3": "CATPayment(address,address,uint256)", +"a8d5fd65": "share()", +"a8d84b7c": "purchaseWithIndex(uint256,uint256)", +"a8d84fc3": "activeEnd()", +"a8d88127": "exists(int256,int256)", +"a8d8c7c8": "adddayeths(address,uint256)", +"a8d8e055": "checkAddressBatch(address[])", +"a8d95496": "getHighestPriceOwnerAt(uint256)", +"a8d95fb2": "claim(address,string)", +"a8d99045": "totalSellCardNumber()", +"a8d9a89a": "initialICOCap()", +"a8d9e8a3": "sendFeeIfAvailable()", +"a8da6873": "_fetchCreatedOrdersForPayer(address)", +"a8dab783": "isPASigned(uint32)", +"a8db1837": "test_updateAndGetPrice()", +"a8db2445": "setCompany(address)", +"a8dc824c": "unlockSupply()", +"a8dd07dc": "totalBonus()", +"a8ddefab": "withdrawNacNetfRe(uint256)", +"a8df3e69": "post(address,address,uint256,string)", +"a8df7894": "investDirect(address,uint256)", +"a8df80ad": "Hellob()", +"a8df99a9": "_emitSkillsSet(address,uint256,uint256,uint256)", +"a8e02ccb": "activeCall(address)", +"a8e04f34": "disableInitialStage()", +"a8e1903c": "RevokeTokens(address)", +"a8e1b53f": "AICoin(address,uint256)", +"a8e3371a": "eduCash(uint256,string,string)", +"a8e3a6b6": "communityTokensCap()", +"a8e48a7e": "PausableCrowdsaleImplUnpaused(uint256,uint256,uint256,address)", +"a8e496b9": "toDay(uint256)", +"a8e4fb90": "proposer()", +"a8e553f5": "decrypt(uint32[26],uint32[4])", +"a8e5740c": "setOgToken(address)", +"a8e5e219": "jobStatus(uint256)", +"a8e5e4aa": "approveERC20(address,address,uint256)", +"a8e6e77b": "addManyAdmins(address[])", +"a8e6ee52": "goldCertVerifier()", +"a8e6f9dc": "set_property_address(uint256,string,address,string,string,string)", +"a8e70dd3": "unblockMessagesFrom(address)", +"a8e81844": "GeneBTC()", +"a8e8f677": "maxDice()", +"a8e91396": "setICOPriceatDollar(uint256)", +"a8e9b249": "versionSelectors(bytes32,bytes32)", +"a8ea8554": "changeAmount()", +"a8eaefd7": "TotalFee(address[])", +"a8ec9ffb": "CrowdsaleStageStarted(uint256,uint256,uint256,uint256,uint256)", +"a8ecc7f1": "rbac()", +"a8ed1be5": "bts_address2()", +"a8eee036": "Locality(string)", +"a8ef4b66": "PERMISSIONMANAGER_KEY()", +"a8ef6edd": "testTrusting()", +"a8f02555": "DXF_Tokens()", +"a8f03616": "ownerTokenSharePct()", +"a8f06876": "CETToken(uint256,string,string)", +"a8f07dcc": "minimum_investment()", +"a8f0d3a7": "getArrayBytes32(bytes32)", +"a8f0e6e2": "sellPriceOf(uint256)", +"a8f0ebeb": "decreaseClaimsBalance(address,uint256)", +"a8f0fbbd": "helloToken()", +"a8f11eb9": "autoDistribute()", +"a8f2ba4c": "bet_win()", +"a8f2d63b": "isPublicTokenSaleRunning()", +"a8f436df": "startEvaluating()", +"a8f56600": "model_accuracy_criteria()", +"a8f5bbd9": "initiateUser()", +"a8f5c673": "savePepe(uint256)", +"a8f653fa": "finalizeStage()", +"a8f6c913": "erc20Contract()", +"a8f6d313": "minimumFundingUSD()", +"a8f6d84d": "returnPercentage()", +"a8f6f1f0": "randomGenerateMethod()", +"a8f7e238": "getAdminsForGame(uint256)", +"a8f7f82d": "ICO_start_future(uint256)", +"a8f8884d": "botIndexToApproved(uint256)", +"a8f899a0": "LogBuyForInvestor(address,uint256,string)", +"a8f8c6de": "getCollaborated(uint256)", +"a8f8e2ae": "testFailIfReverts()", +"a8f927e9": "getLanguage()", +"a8f92b52": "MindCoin(uint256,string,string)", +"a8f9868e": "getTotalBalanceFor(address)", +"a8fa14b0": "disableContractUpgradability()", +"a8fa2fc6": "getCurrentDevReward()", +"a8fa5682": "dnsRecord(bytes32,bytes32,uint16)", +"a8fa6e14": "setLastRewardTime(uint256,uint256)", +"a8fa8e52": "valuePerToken()", +"a8fac082": "claimMonthlyDemurrage(uint256)", +"a8faf6f0": "SmartAirdrop()", +"a8fc1a2a": "realDevReward()", +"a8fc32de": "sendDividends()", +"a8fca0fc": "toRtc(uint256)", +"a8fd1026": "gemPerEther()", +"a8fdb290": "EtherToken(uint256,string,string)", +"a8fdf903": "_underMintNextTokenId(uint256)", +"a8fe43ce": "getVotingProxy(uint32,int256)", +"a8fe5465": "PRE_SALE_15_BONUS_MIN()", +"a8feda51": "processRefunds()", +"a8ffa37f": "gameTokenResolution(uint256,address,uint256,address,uint256)", +"a8ffa9d9": "addCandidato(string)", +"a9011990": "getOneDepositRec(uint256)", +"a90135df": "pgoInternalReserveWallet()", +"a9014b0f": "isListed(uint64)", +"a9018896": "refreshScore(uint8,bytes32)", +"a901aaa0": "AirRewardmaxTotalSupply()", +"a901ce92": "founderTokenWithdrawnPhase4()", +"a9030162": "refundFish(address,uint256)", +"a903073e": "getOwnerTeam(address)", +"a9036b43": "Minter(address,uint256,uint256,uint256)", +"a903741a": "TEAM_BONUS()", +"a904cc53": "withdrawEtherBalance(uint256)", +"a904d13d": "setShifter(address,address)", +"a904e5c8": "TRM1BonusActive()", +"a9055b81": "makerRequiredKncStake(address)", +"a9059cbb": "transfer(address,uint256)", +"a905f4c0": "DUOLINGO(uint256,string,string,uint256)", +"a9061415": "getsellmoney(uint256)", +"a9064e29": "indexshow()", +"a906f837": "relocationSwitch(bool,address)", +"a9076f9e": "setBidding(bool)", +"a908f2e3": "Faucet(string,address)", +"a9092c11": "numChoices()", +"a909d7d3": "removeTokenEmission(uint256)", +"a909fc56": "mint(int256,address)", +"a90a4ac2": "addStruct1(string)", +"a90a6427": "setPaydayFrequencyInDays(uint8)", +"a90a6952": "EmissiveErc223Token(address,string,uint8,string,string)", +"a90a8eea": "getDaysInYear(uint16)", +"a90ae887": "claimPayment(uint256,uint256,bytes)", +"a90b5e62": "setTokensContractAddress(address)", +"a90d3cda": "totalContributionsBy(uint256,address)", +"a90e0608": "icoFinalized(uint256)", +"a90e09e2": "addWhitelisted()", +"a90e65a3": "MinorPrizePayout(address,uint256,uint8)", +"a90eb2b9": "sendFundsToNextCycle(uint256,uint256)", +"a90f8e9a": "referredBy(address)", +"a90fcfa0": "_generateName(string,string)", +"a90fd971": "minerRelaseTime()", +"a90fdf20": "test_bytes(bytes)", +"a910a531": "_approveTokenTransfer(address,address,uint256)", +"a9112140": "change(address,uint256,uint256)", +"a91202d3": "createUser(bytes32,bytes32)", +"a9120f6d": "release_by_manager()", +"a913c43f": "getLockedAmount_jiedians(address)", +"a913eb24": "_price_token_ICO2()", +"a9142808": "logFollowerTradingTx(bytes32)", +"a9147e22": "setIsCheckStage(bool)", +"a9157518": "add5NewStreetNames(string,string,string,string,string)", +"a9171d56": "purchaseCallbackOnAcceptAndDistribute(uint256,address[],uint256[])", +"a9188878": "setPrimordialPrices(uint256,uint256)", +"a918c09c": "supplyFuel(uint256)", +"a91a1080": "getCase(uint256)", +"a91a39ad": "havedCrowdCoin()", +"a91aae63": "NihilCoin(uint256,string,uint8,string)", +"a91abdcb": "referralCut()", +"a91b2e9f": "getProfit(uint256)", +"a91bc3cd": "nextMinimumTimeout()", +"a91be87f": "addEarlylist(address[],address)", +"a91c39a9": "setEnergyCost(uint256)", +"a91ce985": "createOrder(address[3],uint256[4])", +"a91cec21": "ineRexToken()", +"a91cfecf": "Foosball()", +"a91d6c65": "initLockedBalanceOf(address)", +"a91d99db": "whitelistAddressesPresale(address[])", +"a91ed8c6": "mintReserve(address)", +"a91ee0dc": "setRegistry(address)", +"a91f559d": "NeLunaCoin()", +"a91faadf": "JoshContract()", +"a91fbb99": "MonetoSale(address,address)", +"a91fc821": "Registry(address,address,address)", +"a9203f3c": "getFlower(uint256)", +"a92100cb": "loop()", +"a921ba7d": "totalBattleboards()", +"a9221706": "_transferAndCall(address,address,uint256,bytes)", +"a9225743": "_commitBallot(bytes32,uint256,uint256,bool)", +"a92259fc": "AVAILABLE_TOTAL_SUPPLY()", +"a923ebac": "unbindEthereumAddress(address,bytes32)", +"a923fc40": "setInfo(string,string)", +"a9240e32": "setEtherRatioForOwner(uint256)", +"a924d3ca": "getMangers()", +"a924ee60": "disableTokenMinting()", +"a9250212": "publicationCount(address)", +"a925252a": "acceptAuctionResult(address,uint256,string)", +"a925d85e": "Exchange(address,address)", +"a926819f": "disableWallet(address)", +"a927f46b": "Etherwow()", +"a9287619": "buyXaddr(uint256,address)", +"a9293efe": "calculateSeasonScore(address,int8)", +"a92950f6": "chainWith(uint256,uint256)", +"a9298848": "askForALoan(address,uint256,uint256)", +"a92aafb0": "paused_1()", +"a92ab316": "EIN()", +"a92c300a": "getBidData(uint256)", +"a92c3231": "stageNumber()", +"a92ca27d": "editionInfo(uint256)", +"a92d5367": "changeTournamentTaxAmt(uint8)", +"a92d6a48": "disableAuthentication()", +"a92ec661": "isAfterStartTime()", +"a92f0c80": "TokenVesting(uint256,uint256,uint256)", +"a92f0cb9": "withdrawFailedOldOwnerTransferAmount()", +"a92fcf9c": "addRecord(string,string,string,bytes32,int64)", +"a9321573": "addExcluded(address)", +"a9324192": "walletOut1()", +"a9328435": "getMinimeCheckpointsLengthSlot(address,uint256)", +"a932ed0d": "whitelistRemove(address)", +"a934dd0c": "getFeeAmount(uint256,uint256)", +"a936444a": "POWH33()", +"a936c203": "reLoadXid()", +"a937c28b": "authorisedInvestors()", +"a937f12b": "TidealToken(address)", +"a9390454": "DevvotePrefund(address,address)", +"a9393452": "getAuctions(uint32,uint32)", +"a9396a1b": "getStageInfo()", +"a93a77c1": "available_percentage()", +"a93b1a65": "_referrerTax(uint256,bool)", +"a93b5331": "totalFundingSupply()", +"a93c1286": "Y2CASH()", +"a93d7c72": "quickChange(address[],uint256,uint256)", +"a93deda4": "Philanthropy(address,string,uint256,uint256,uint256,uint256,uint256)", +"a93e0386": "preSaleBonus4Amount()", +"a93e2b49": "YBQ()", +"a93e4044": "getCountTokensByLottery(uint32)", +"a93e8701": "BetCanceled(address,uint256)", +"a93fd5f1": "organizer5()", +"a940565e": "haveIBeenNaughty(address)", +"a9405923": "getParent(address)", +"a9405f4f": "HashToFileName(string)", +"a940d013": "ether_profit()", +"a9414cc3": "getPositionsAndTokensCnt(uint256)", +"a941be3c": "internalBuy(address,uint256,bool)", +"a941c8d6": "calculateWinningEntries()", +"a941ff21": "getCampaignEndDateById(bytes32)", +"a942bf05": "dDeployCommunityBallot(bytes32,bytes32,bytes32,uint128)", +"a942de01": "createSetup(uint256,uint256,address[])", +"a9430dcb": "Shabu()", +"a94385a0": "donateFromWallet(uint256)", +"a94387a6": "raiseBuyOrderCreated(address,uint32,uint32,uint80,uint256,int160)", +"a943c21f": "getVotingResult(address)", +"a9445499": "ZperMainSale(address,uint256,uint256,uint256)", +"a944f15b": "createAuction(address,uint16,uint16,uint256,uint64,uint16,uint16,uint64,uint256)", +"a94510ca": "withdraw_badge()", +"a9457d9c": "whatIsCurrentCap()", +"a945c5c3": "totalInvestments(uint256)", +"a945f90f": "partnersWallet()", +"a9466a88": "getAllScripts(uint256)", +"a946d7bb": "setMedalsClaimed(uint16)", +"a9472396": "getClientReward(uint256)", +"a94834a1": "openGameRange(uint256,uint256)", +"a948d72d": "ZethrBankroll()", +"a9496e73": "timeBeforeJackpotReset()", +"a949c637": "addOwner(address,address,address)", +"a949f3af": "getMyLastCollectHour(uint32)", +"a94a06e8": "findRegularTime()", +"a94ab274": "corePay(uint256,uint256,uint256,string,uint256)", +"a94c33a6": "Auxilium()", +"a94c468d": "RemoveRank(uint256,uint256)", +"a94c7c65": "limitedPrint(address,uint256)", +"a94e7ed4": "isSpecificallyApprovedFor(address,uint256)", +"a94feacc": "claimTokenWindowOpen()", +"a95022a6": "GoodTimeCoin(uint256,string,string)", +"a95055a8": "getPlayerBoardsIDs(bool)", +"a9505eb4": "maxOfArray(uint256[])", +"a950fb0e": "b64decode(bytes)", +"a9510f89": "totalAmountOfTokens()", +"a951c534": "_CallScheduled(bytes32)", +"a951c994": "setSetupComplete()", +"a951f28e": "dayaToken()", +"a951fad2": "CryptoX(uint256,uint256)", +"a9522f4e": "IsDividendAvailabe()", +"a95236ed": "DeDeTokenContract(address)", +"a95240c4": "memberShareCount()", +"a9524310": "getTokenAsset(address,uint256)", +"a95281f0": "registerPoA(string,bytes32,uint256[],uint256[],address,address)", +"a952f268": "MAYExchangeRate()", +"a9535320": "TwoXJackpot()", +"a9538157": "increaseApprovalByLegacy(address,address,uint256)", +"a953d08d": "mintBounty(address,uint256)", +"a954736d": "cancelSellPop(uint256)", +"a9549f81": "getDAOId(uint256)", +"a954c209": "great(uint256)", +"a9550ecb": "getMonsterDefenseFromDna(uint256,uint256)", +"a9553d74": "phaseThreeBonusPercent()", +"a9559dd7": "updateBalance()", +"a95609ca": "editContribution(address,uint256,uint256,uint256,uint256)", +"a9572ac7": "setMulFactor(uint256)", +"a9580edd": "distribute(uint256,uint256,address,uint256)", +"a95824b4": "votingOpen()", +"a95836d1": "finalizeICO(address)", +"a958ffc4": "fundingDurationInHours()", +"a9593b98": "changeVote(uint256,uint256)", +"a9595472": "SOC()", +"a95a3887": "rolloutDividends(address)", +"a95bc9a7": "changeChannel(address,uint256,uint256,uint256)", +"a95bfd36": "adminAddBallotOption(uint32,string)", +"a95c372d": "fetch()", +"a95c4d62": "purchaseToken()", +"a95c5339": "checkGameRegiester(address)", +"a95d017d": "getRevisionBlockNumber(bytes32,uint256)", +"a95d580c": "withdrawEarnings(uint256,bool)", +"a95d85d8": "withdrawTo(uint256,address,bytes)", +"a95d9c14": "Uncloak()", +"a95ff7d5": "isDecentBetCrowdsale()", +"a9604239": "maxAmountRoundSeed()", +"a9607011": "HappyEthericHome()", +"a96088a5": "vernamToken()", +"a9612f72": "emitOwnershipChange(address,address,bytes32)", +"a9615f59": "platAuction()", +"a961e9e8": "startSaleTime()", +"a9625fa8": "MANHATTANPROXY3RDST()", +"a962a7d6": "set_burned(uint256)", +"a9636b9f": "Bytes32Oracle(bytes32)", +"a964bb9a": "configureLimit(uint16,uint16)", +"a964bea7": "CheckRevoke(address)", +"a96594d3": "nextLotteryTTMTokenId10()", +"a965a941": "getNote(uint256)", +"a965e5c1": "setBonusAddress(address,bool)", +"a96654ee": "transferredOwner(address)", +"a9671d8f": "getProductionOf(address)", +"a9671dd9": "enableProxy(address)", +"a967f3e7": "emitProjectCreated(uint256,uint256,address)", +"a968309d": "plutochain()", +"a968991b": "confirmed()", +"a9689d0f": "transactionFeeRate()", +"a968ad0e": "resetBonuses(address)", +"a968b97c": "verifyCodeLength(string)", +"a96948c6": "chefBalanceOf(address)", +"a969574d": "ratePreICOEnd()", +"a969f080": "QUIKKO()", +"a969ff0a": "collectFee(uint256)", +"a96a4998": "DEFROST_FACTOR()", +"a96a5a5b": "pwin()", +"a96af0f4": "saleSupply()", +"a96b1828": "GLOBALETHER()", +"a96b2dc0": "getCallCount()", +"a96b3ab8": "getDthShop(address)", +"a96c3e6e": "getPlayerAddr(string)", +"a96c4eb7": "Sold(uint32,address,address,uint256)", +"a96c6bfe": "setDeveloper(address,bool)", +"a96ce7aa": "unlock(string)", +"a96f45c7": "ETHTransfer(address,address,uint256)", +"a96f8668": "releaseTokens()", +"a96fb9b4": "testTokenA()", +"a970a23a": "internalUpdateRates(bytes4[],uint256[],uint256)", +"a970ef6e": "tokenContractDefined()", +"a9718d51": "getTransferValuebyArrd(address)", +"a971c23d": "minimumFeePercentage()", +"a9725a68": "LIMIT_STAR5()", +"a9726c1e": "withdraw_bounty()", +"a972a451": "sqrt(uint32)", +"a973e27c": "testFind()", +"a9740fdf": "SwapCreation(address,address,uint256,uint256,address)", +"a9743c68": "getCallPayout(bytes32)", +"a9746acf": "UserBought(address,uint256,uint256,uint256,uint256)", +"a974e21f": "HKIN(uint256,string,string)", +"a97501a3": "ManUvsTottenham()", +"a97583de": "_transferByPartition(bytes32,address,address,address,uint256,bytes,bytes)", +"a9758fcc": "CurationRightsTransferred(address,address)", +"a9764152": "createFunction(string,string)", +"a9767e14": "masternodeMineTokens()", +"a977449e": "unbanReferrer(address)", +"a977c71e": "changeQuota(uint256)", +"a977f628": "viewNumberOfApprovedUsers()", +"a9782954": "hunterOf(address)", +"a979169f": "updatePackage(uint256,string)", +"a9791aec": "tgeSetFinished()", +"a9797521": "bn128_is_on_curve(uint256[2],int256)", +"a97a6d63": "setWhitelisted(address,address,bool)", +"a97b8b48": "LOG_CurrentPercent(uint256)", +"a97b8b4d": "closeBallot()", +"a97c8eb4": "RTEToken()", +"a97cb561": "isTransferAgent(address,address)", +"a97cc114": "getTile(uint256)", +"a97d48fd": "sendContractFundsToAddress(uint256,address)", +"a97e5c93": "isOracle(address)", +"a97fc381": "toSlice(bytes)", +"a97fe7b6": "airDropTotalSupply()", +"a97ffd5e": "safeToSell(uint256)", +"a9804acb": "HealthyCoins(string,string,uint256)", +"a980bb9e": "isDisclosureSigned(uint256)", +"a9814d14": "Outcome()", +"a981daca": "testIntParserNegative()", +"a9820ead": "Ballot(bytes32[],bytes32[])", +"a9824288": "CTMC()", +"a9825b7c": "bonusUnsold()", +"a9831437": "setCreationPrice(uint256)", +"a9831edf": "unlockFundsAndPassEther()", +"a98325b6": "collectDividend()", +"a983637e": "BACHELORCHAIN()", +"a9839dd7": "exchg(address)", +"a983c932": "isValidContract(bytes32)", +"a983d414": "safeassert(bool)", +"a983dcc0": "setDefault(bytes32)", +"a983e1bb": "random(uint256,uint16)", +"a984cec2": "additionalPresaleInvestors()", +"a9850e26": "SellToyMoney(uint256)", +"a9854087": "closeAt()", +"a9856d6d": "initSale(address,address,uint256,string)", +"a985e6c6": "withdrawAirDrop(address[],uint256)", +"a986c969": "stand(address,uint8[],bytes32,uint8[],uint8[],bool[],uint256,bytes32,bytes32)", +"a986ef4a": "nextRoundCoolingTime()", +"a9872393": "racesInfo(uint256,uint8,address)", +"a9875d70": "stage4Start()", +"a987d4c6": "_mint(address,uint256,string)", +"a987d654": "restoreItem(uint256)", +"a987f9da": "Creation(uint256,string,address)", +"a9888148": "testFailRetractNotRetractable()", +"a988845a": "setNewMessageNumber2(string,uint256)", +"a988df4b": "bgb_per_eos()", +"a988e371": "taxPaid(address)", +"a988ea3a": "NETHtoken(uint256,string,string)", +"a98902e9": "LUNVault(address)", +"a98a6d19": "ICOWeiRaised()", +"a98a89c2": "buy1(address[],address[],uint256[],bytes)", +"a98ad199": "removePermittedContract(address)", +"a98af238": "setCCH_edit_16(string)", +"a98c439f": "buyTokensAltercoins(address,uint256)", +"a98ca17d": "exercise(uint256,uint256[3],address)", +"a98cb619": "transferGenesis(address)", +"a98d5961": "pickRandomAssetPosition(uint256,uint256,uint256)", +"a98e4e77": "getAccountCount()", +"a98ee0b7": "_getInitAuctionSeconds()", +"a98f81fd": "BEXAM()", +"a98f99d8": "removeDefaultOperatorByTranche(bytes32,address)", +"a9901c6b": "getIsCoinReg(bytes4)", +"a990dd52": "unitsOneEthCanBuybefore()", +"a9918dfc": "getCompte_36()", +"a991a24d": "getTenancy(uint256,uint256)", +"a991cb0e": "respond(uint256)", +"a991faf9": "getTotalDividendsAmount()", +"a99306e7": "addPVPContender(address,uint256)", +"a993772f": "isPreIcoFinish()", +"a993e180": "getFechaTax()", +"a9948f7e": "GetNbyPrice(uint256)", +"a996d6ce": "setBurner(address)", +"a996d72e": "OracleChainToken(uint256,string,uint8,string)", +"a9974338": "setB0xToken(address)", +"a997f82f": "setCrowdsaleStage(uint256)", +"a998146b": "allToken()", +"a9985260": "test_setMaxSize()", +"a9989b93": "tokenAddresses()", +"a998fdbe": "getWithdrawAmount(address,address)", +"a9995010": "CappedCrowdsale()", +"a99a353b": "SWAP(address,address)", +"a99a3f03": "PLAYER_TIMEOUT()", +"a99a3f98": "initSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"a99a985b": "betOn(uint32,uint32,uint256,address)", +"a99aa366": "presaleDiscount()", +"a99b9e39": "ICO_START_DATE()", +"a99be610": "PreIcoMessage()", +"a99bf4fa": "Potential_Investors(address)", +"a99ce372": "VINE_CAPACITY_PER_LAND()", +"a99d8d48": "changeTransferable()", +"a99da6af": "finishDeal(uint256)", +"a99dca3f": "hi()", +"a99df9c3": "oneCentInWei()", +"a99e0a81": "maxICOFirstSupply()", +"a99e6465": "addTier2Member(address)", +"a99e7e29": "register(bytes,address)", +"a99f0d9f": "_addBallot(bytes32,uint256,uint256,bool)", +"a99fa3e2": "addGroupMember(bytes32,address)", +"a99fba7d": "calculatePlatformCommission(uint256)", +"a99fc5aa": "tempCharity()", +"a99ffb7b": "timestamp(bytes12)", +"a9a07af9": "incFightToDeathWin(uint256)", +"a9a0844b": "getSaleVolume()", +"a9a0b495": "getPreSignedHash(bytes4,address,uint256,bytes,uint256,uint256)", +"a9a11111": "QuadraticVoting()", +"a9a18dda": "totalEthReceived()", +"a9a1fb96": "releaseTokensForce(bytes32)", +"a9a26902": "changeBubbleWallet(address)", +"a9a29afa": "getRefundTxFee()", +"a9a343b3": "Puzzled(address,bytes32)", +"a9a3a9c5": "vxtest()", +"a9a3cef4": "LISKClassic()", +"a9a3da4a": "getRemainUtcoin()", +"a9a40c71": "getNumberOfOpenDeals()", +"a9a51f89": "changeTokens()", +"a9a5e3af": "removeOwners(address[])", +"a9a615e9": "setWhitelistedStatus(address,uint256)", +"a9a6e9b4": "distributeLCD(address[],uint256)", +"a9a8679b": "authorizeAccount(address)", +"a9a8fc84": "ItemCreated(address,uint256)", +"a9a9d7af": "sellerList(address)", +"a9a9e4f7": "_payloadOffset()", +"a9aac3e4": "registerWineOwner(address,string,string)", +"a9aad58c": "PAUSED()", +"a9aae07a": "setMinGas4Accts(uint256)", +"a9aaf116": "BillahChain()", +"a9ab9b46": "getAccountItems(address,uint256)", +"a9abe7be": "setIcoSecondWeekRate(uint256)", +"a9ac225c": "ProposalTallied(uint256,uint256,bool)", +"a9ac4c5f": "checkMonthlyLimit()", +"a9acc475": "getBlockValue()", +"a9adaecd": "calcStopPriceFactor()", +"a9add7dc": "setEvolvePrice(uint128)", +"a9ae8323": "presaleDateFinish()", +"a9aeb059": "updateCeiling()", +"a9b07600": "setIdArray(address,uint256,string,string,uint256[])", +"a9b0c5a4": "preIcoFinished()", +"a9b0e8d5": "Cscchain(uint256,string,string)", +"a9b11426": "getImageOwner(uint256)", +"a9b12c4c": "blocktime()", +"a9b1d507": "makeWallet()", +"a9b1ffd9": "totalChequeValue()", +"a9b2c135": "lockedYears()", +"a9b2ca9c": "changeDragonGen(uint256,uint256,uint8)", +"a9b2cc09": "getMaxContributionAmount()", +"a9b35240": "packageExists(bytes32)", +"a9b46030": "BurnableOpenPayment(address,uint256)", +"a9b48ba7": "WIN()", +"a9b4b780": "getWeight()", +"a9b542bd": "getDna1(uint256)", +"a9b551d2": "getAdministratorMoney(address)", +"a9b5ae83": "messageForPeace(string)", +"a9b69e7c": "deployersCount()", +"a9b6c8bc": "getAddress(bytes16)", +"a9b76504": "getContestTeam(uint32,uint32)", +"a9b7c3bf": "cooAddress1()", +"a9b86292": "totalSharePool()", +"a9b86924": "buyStoreByName(bytes32)", +"a9b8dad6": "level_3_percent()", +"a9b8f7b8": "ProtectTheCastle()", +"a9ba2b09": "releaseFine()", +"a9bb03a4": "deptrespond(address,address,string,bool)", +"a9bb3274": "UCCOIN_PER_ETHER()", +"a9bc5db1": "createHeld(address,uint256)", +"a9bf1c9f": "ENS_ROOT()", +"a9bfe5c7": "TokenBalance()", +"a9c0838d": "getPI_edit_3()", +"a9c1873c": "setTokenPerEth(uint256)", +"a9c1f2f1": "decayRate()", +"a9c2ac3a": "getBetIds(uint256)", +"a9c2e36c": "getFactoryAddress()", +"a9c32c35": "NewExchangeRate(uint256)", +"a9c38476": "latestEditionReleased()", +"a9c4429a": "getInvestmentPackageInformation(uint256)", +"a9c45fcb": "upgradeToAndCall(uint256,address,bytes)", +"a9c4d62e": "S25ICO()", +"a9c5c9df": "aval(uint256,address)", +"a9c6a624": "updateNumber(int256)", +"a9c6c714": "unsoldAllocationOraclizeGasLimit()", +"a9c70eaa": "getUint(uint256)", +"a9c73e80": "setText(string,string)", +"a9c7648f": "distributeToken(address[],uint256)", +"a9c76999": "totalProfit(address)", +"a9c8733c": "correct()", +"a9c8dfcd": "AuctionCreated(uint256,uint256,uint256,uint256)", +"a9c95328": "renameList(address,string)", +"a9ca2072": "getAccountValue(uint16,uint8,uint8)", +"a9ca6057": "baseball()", +"a9cb2227": "getPlayerRoundTeamBought(uint256,uint256,uint256)", +"a9cbd0a5": "percentageToEthertoteDevelopmentWallet()", +"a9cc077a": "TOKEN_PRICE_DENOM()", +"a9cc4718": "fail()", +"a9ccc3af": "isEtherSpaceUpgrade()", +"a9cd2be6": "createSlot(uint256,uint256)", +"a9cd9e06": "secureWithdraw(uint256,address)", +"a9cdf643": "TEAM_MEMBER_VAL()", +"a9cf037a": "EEYcoin(address)", +"a9d04bd8": "getStakingRequirementTime(address,uint256)", +"a9d05989": "ETFW()", +"a9d07519": "TokensCappedCrowdsale(uint256)", +"a9d0b164": "priceOfEthOnUSD()", +"a9d0ddc7": "addContractWithInfo(string,string)", +"a9d0fd87": "_updatePurchasingState(uint256,uint256,uint256,bool,address)", +"a9d2293d": "lastClaimBlock()", +"a9d23ace": "getBundleExpiredTimeOfEmail(string,uint8)", +"a9d2d87c": "Manual_Mint(address,uint256)", +"a9d3da74": "SimpleAuction()", +"a9d40b77": "buyOffspring(address,string,uint256,uint256,uint256)", +"a9d424e2": "buy(address,address,uint256,uint256)", +"a9d48032": "maxSpendToken()", +"a9d49f62": "searchInsertionPoint(uint256,uint256)", +"a9d4d6bc": "lastBlock_f1()", +"a9d5e255": "GACToken(uint256,uint256)", +"a9d66127": "cancelPawn(uint256,address,bool)", +"a9d66352": "minimum_deposit_amount()", +"a9d72f82": "alterFeaturePetitionFee(uint256)", +"a9d74013": "claimedToday()", +"a9d82f18": "realDEXToken()", +"a9d85266": "setValue(bytes32,bytes32,uint256)", +"a9d9f572": "Println(address,uint32,uint256,uint256,uint256,bool,uint32)", +"a9d9f644": "viewLockUpStatus(address)", +"a9da0fad": "setOutcome(uint8,uint8)", +"a9da1417": "DEXHIGH(address,address,address,uint256,uint256,uint256)", +"a9dab167": "extendLock(bytes32,uint256)", +"a9db06e5": "perAmountRaised()", +"a9db9ce6": "getOraclizeGasPrice()", +"a9dbaf25": "length(bytes32)", +"a9dbe76f": "confirmSeller(uint256,uint256)", +"a9dc1d54": "singularDTVCrowdfunding()", +"a9dc491d": "getResolver()", +"a9dd1225": "random(uint256,uint256)", +"a9dd6895": "acceptTransaction(uint256)", +"a9dda4df": "setAuctionAddress(address,address)", +"a9de5045": "acceptAction(bytes32)", +"a9de581b": "auctionWinnerMessageHash()", +"a9df1aa2": "WithdrawalNormal(address,uint256)", +"a9e044ae": "SetProjectTag(string)", +"a9e0f3ed": "checkCounterLimit()", +"a9e10bf2": "recieve()", +"a9e2bcfe": "oneRoll()", +"a9e2e084": "_createPoo(string,address,uint256)", +"a9e30f96": "TokenPK(uint256,string,uint8,string)", +"a9e3fd27": "contentHostPrice(bytes32)", +"a9e406d5": "_setProviderSupply(uint256,uint256,uint256)", +"a9e4d6ce": "UpdateTokenRate(address,address,uint256)", +"a9e5714b": "AgriChain()", +"a9e732bb": "cashout(uint256)", +"a9e79359": "payoutForTimeline(uint256,uint256)", +"a9e7c2e5": "claimToken(uint256)", +"a9e7cb10": "Mediation(address)", +"a9e7f730": "FreyrCoin()", +"a9e899ef": "challengeFeeMultiplier()", +"a9e8a6bb": "prolongBonusPreIco(uint256)", +"a9e8f2f0": "get_refund_vocean_addr_amount(uint256)", +"a9e931ab": "addRec4L8R(address,uint256)", +"a9e94aa2": "Sponsor()", +"a9e966b7": "setState(uint256)", +"a9ea1896": "priceT1()", +"a9ea4aaa": "EntryToken()", +"a9ea6454": "basicThreshold()", +"a9ea96f0": "setDevelopersTokensPercent(uint256)", +"a9ea9d17": "PURCHASES_BONUS()", +"a9ead91c": "addressToAsciiString(address)", +"a9ebeb25": "nextReferrerId_()", +"a9ec77d3": "PublicSale(address,address,address,address,uint256,uint256,uint256)", +"a9ed003d": "sister()", +"a9ed9cb8": "disallow(address)", +"a9eeaeee": "getSanSlots(address)", +"a9eed530": "reduceOrderQty(uint256,uint256)", +"a9f00221": "resetTokenOfAddress(address)", +"a9f036dc": "accCompany()", +"a9f09079": "exchangeRateStoredInternal()", +"a9f0a590": "transferAdministratorship(address)", +"a9f12d8a": "RaliusToken()", +"a9f16529": "thisVotersChoice()", +"a9f2db37": "unlockTokens(address,address)", +"a9f5de42": "crowdsalePhase()", +"a9f69edb": "checkRole(uint256,address,uint256)", +"a9f6def0": "HonestDice()", +"a9f73dd2": "_getRarity(string,uint8,uint8)", +"a9f79f7d": "FXT(address)", +"a9f7c131": "updateDateOfPurchase(address,uint256)", +"a9f7d03b": "admin_typeOf(address)", +"a9f7e664": "transferTokens(address,uint256,uint256)", +"a9f7f7e5": "o_algoritmo(uint256)", +"a9f844a8": "PlayerBalance(address,uint256,uint256)", +"a9f8792e": "votingProxyContract()", +"a9f8ec6c": "AlarmClockTipFaucet()", +"a9f940c3": "addChain(string,string)", +"a9f951dc": "getNation(uint8)", +"a9f987b5": "UFOcoin()", +"a9f992b1": "BTC8000on420()", +"a9fab274": "burnAuditApproval()", +"a9fae422": "getParents(address)", +"a9fb11b3": "potAddup()", +"a9fb4385": "ContributeWithSender(bool,uint8,address)", +"a9fb8fe6": "getFeesByAsset(address)", +"a9fbc614": "lookupTicketHolder(uint256)", +"a9fc771c": "PinkToken()", +"a9fc9501": "indexTheWorkcrew()", +"a9fcf76b": "setIntArray(bytes32,int256[])", +"a9fd1bd3": "TradeAffected(uint256,uint256)", +"a9fd3f42": "transferApprovedFunds()", +"a9fde745": "transferTrade(address,address,uint256)", +"a9feca22": "_emitOracleAdded(address)", +"a9ff2a5e": "transferTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"aa01ac22": "gmAddress()", +"aa01ef7d": "finishVotingPublic(address,uint256)", +"aa02a90f": "majorityMargin()", +"aa03214c": "calcBonusPercent()", +"aa0372e7": "getItem(bytes32)", +"aa03dfaa": "createChannel(bytes32,address,uint256)", +"aa0465b8": "setPriceData(uint256,uint16,uint256,uint8)", +"aa049691": "changeAccount(address)", +"aa04e566": "getWhoPiad(address,address,address,address,address,address,address,uint256)", +"aa052bd1": "startPreSaleStage()", +"aa056d2a": "cloneWithPopAndBottle(uint256,uint256)", +"aa058a73": "right6(uint256)", +"aa05b852": "s34(bytes1)", +"aa065074": "StageVestingToken()", +"aa071061": "LogAccountModified(address,address,bytes32,bytes32,bytes32,bytes32)", +"aa077992": "getProductEarning(uint32)", +"aa08523d": "lockedCustomer(address)", +"aa08c9e6": "getCoverImageCount(address)", +"aa08dfd3": "setFeeParams(uint256,uint256,uint256,uint256,bytes)", +"aa09bab8": "usedTotalSupply()", +"aa0bf9ba": "calculateRawPoolAmount(uint256)", +"aa0cd6eb": "_distributePoolReward(uint256,address,uint256)", +"aa0cfcbf": "buynums(uint256)", +"aa0d30f3": "deduct_fees()", +"aa0d9fb5": "_aremoveByValue(address)", +"aa0e38b4": "Mobilink()", +"aa0f0d4a": "Team(bytes32,bytes32,address,bytes32)", +"aa10ce22": "addExchange(address)", +"aa10e8c2": "CreateAPool(string,string)", +"aa11772b": "setOperators()", +"aa1199ea": "setApprove(bool)", +"aa121bbe": "ABIChanged(bytes32,uint256)", +"aa125d08": "timeWaitUnlock(address)", +"aa127ae3": "test_9_checkDestructionOverflow_shouldThrow()", +"aa13ca76": "getTokenPrices()", +"aa13e8c2": "waitingTime()", +"aa141ee2": "spartans()", +"aa14c39a": "submissionDeposit()", +"aa14fa5a": "ICObonus()", +"aa156645": "isWorker(address)", +"aa1589a9": "approveLeave(address,uint256,string,uint256,bytes32)", +"aa1614eb": "ethRetrieve()", +"aa17973c": "createRandomAtom()", +"aa17e768": "getParentI(uint256)", +"aa183877": "getMonkey()", +"aa188b29": "SandBoxERC20()", +"aa18c05c": "TRANSFER(address,address)", +"aa18f76a": "getAllowedAmount(address)", +"aa1953cc": "canAccess()", +"aa19ed77": "freezeTransfersUntil(uint256,string)", +"aa1b510e": "cheat()", +"aa1ba6a9": "totalWin()", +"aa1c31a3": "BatCave()", +"aa1cdce8": "allot(uint256)", +"aa1cf1cd": "dumpFreeTokens(address)", +"aa1cf23e": "_isIdle(address,uint256)", +"aa1d807f": "ESCBDevMultisig()", +"aa1d98af": "personIndexToOwner(uint256)", +"aa1e47ae": "MyCoin()", +"aa1e84de": "hash(bytes)", +"aa1f609f": "ETHER_MIN_CONTRIB_PRIVATE()", +"aa202aca": "testBytes32Len()", +"aa20e1e4": "updateMasterMinter(address)", +"aa216998": "INITIAL_SAPLLY()", +"aa2262a8": "prevCourse()", +"aa226780": "trade(address[11],uint256[11],uint8[2],bytes32[2],bytes32[2])", +"aa228cda": "reduceMul_()", +"aa22b56b": "getDAOById(bytes32)", +"aa235449": "SpencerToken()", +"aa237e21": "set(bool,uint256)", +"aa238110": "getCurrentPrice(uint16)", +"aa23cb19": "transferFromIndexed(address,address,uint256)", +"aa23e03d": "getIdentifier()", +"aa24da73": "MultiToken()", +"aa24e8aa": "numberOfAlternatives()", +"aa2529a2": "RefundChequeById(string)", +"aa2580c1": "startPreSaleRound()", +"aa258b2e": "TitlePurchased(address,uint256)", +"aa25c744": "getDenominationByName(bytes8)", +"aa25f57e": "setPartnerETHRewardsPercent(uint256)", +"aa271e1a": "isMinter(address)", +"aa272d4b": "getNodeIndexId(bytes)", +"aa2796fd": "payoutForMining(address,uint256)", +"aa27cdf2": "deleteSharedAccount(bytes32,bytes32,uint256)", +"aa283e76": "setMintPrice(uint256,int256)", +"aa284a4a": "ProofPublicVote(address)", +"aa289b15": "deleteOutStreamOf(address)", +"aa28b89f": "preICOStage()", +"aa29787e": "bonus15end()", +"aa2a006d": "OrderCancelled(uint256,uint256)", +"aa2a1c47": "getTotalCollectedFrom(uint64,address,address)", +"aa2b5d7d": "getMiningWarPlayerData(address)", +"aa2bebb7": "getFeeWindowByTimestamp(uint256)", +"aa2d5c05": "FillOrder(uint256,address,uint256)", +"aa2de6c3": "minimumPurchase()", +"aa2df88b": "_isTransferAllowed(address,address,uint256)", +"aa2e7ea0": "createSwap(bytes20,address,uint256,address)", +"aa2efbad": "nominsReceivedForEther(uint256)", +"aa2f04da": "alterPause(bool)", +"aa2f7494": "createMobster(string,uint256,uint256)", +"aa2f892d": "requestRedeem(uint256)", +"aa2fc145": "numStageRecalc(uint256)", +"aa2fddc7": "transfer(string,address,uint256)", +"aa3022d0": "settotal(uint256)", +"aa306d79": "voteForCandidate_(uint256,address)", +"aa30abf1": "crowdsaleBurnAddress()", +"aa30b7e3": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[],address[],uint256)", +"aa31aee8": "getLockTime(address)", +"aa31e4a0": "setSelfHybridizationPrice(uint256)", +"aa33171f": "newPromotion(string,string,string,uint256,uint256,uint256,uint256)", +"aa332032": "NewRound(string,bytes32)", +"aa33ab1b": "getVoted(uint256)", +"aa3435c0": "setTokenInformation(string,string,uint8)", +"aa351cf5": "triggerShutdown(uint256)", +"aa352ca4": "withdrawOffer()", +"aa3633f3": "CreationFailedEvent(address,uint256,string)", +"aa366290": "forfeit(uint8)", +"aa367664": "fundingMaximumTargetInWei()", +"aa368c19": "createScore(string,string,uint256,uint256,uint256,uint256,string,string,string,string,string)", +"aa36aae8": "prolongCrowdsale()", +"aa36b52e": "_updateNeeded(uint256,uint256,uint256)", +"aa36cdfc": "getPlayerHistory(uint256)", +"aa3744bd": "recipient1()", +"aa3801d8": "getTokenAddress(bytes)", +"aa391317": "returnUnsoldSafeMedium()", +"aa3ad4e4": "validate(address,address,uint256)", +"aa3aef50": "purchaseTicket(uint16,uint16[])", +"aa3ba179": "widthraw()", +"aa3dacac": "sideBetPercent_MAX()", +"aa3eb769": "sendPTokenFrom(address,uint256,address)", +"aa3ec0a9": "cid()", +"aa3ef248": "postFact(bytes16,address,string)", +"aa3f5087": "AuctusPreSaleDistribution()", +"aa404876": "RedBlueToken2()", +"aa41d605": "_estimateWeight(uint256,uint256,uint256,uint256,uint256)", +"aa421944": "setMaxVeriAmount(uint32)", +"aa430e64": "setTotalPhases(uint256)", +"aa4537b2": "referredBonusRate()", +"aa454e9c": "setBuyer(uint256)", +"aa45b11e": "setReferralAddressShare(uint256)", +"aa462a5a": "whenGameDies()", +"aa4859fd": "newBookingfc(uint256,address,uint256,uint256,uint256)", +"aa487f49": "PRESALE_PERCENTAGE_1()", +"aa4925d7": "subscribe(uint256,uint256,address)", +"aa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", +"aa4abe7f": "setMaxRate(uint256)", +"aa4ac835": "exportTankResetEarning(uint32)", +"aa4b4d0b": "test_v0()", +"aa4b62f3": "initData(address,uint256)", +"aa4b980e": "phase_1_bonus()", +"aa4bdd3b": "realEtherCapHash()", +"aa4cb547": "setMultihash(bytes32,bytes)", +"aa4cc01f": "checkIfCancelled(bytes32)", +"aa4cd810": "addMeterPoint(address,int256)", +"aa4ce2c6": "blockDotBlockHash(uint256)", +"aa4d4213": "getOldAllowance(address,address)", +"aa4d490b": "registerNameXaddrFromDapp(address,bytes32,address,bool)", +"aa4eaa72": "addToPreSaleWhitelist(address,address)", +"aa4ee730": "LastRiskPrice()", +"aa4f6012": "addSupply(address,uint256)", +"aa4f861f": "getInvestorInforMax(address)", +"aa4fc0a1": "Talius()", +"aa510c8c": "getLinkToPostId(string)", +"aa513c71": "updateInfluencer(string,address,uint256,address)", +"aa51793c": "isLosingBet(uint256)", +"aa525c55": "removeMilestone(uint8)", +"aa52a251": "transferSnowflakeBalanceFrom(string,string,uint256)", +"aa52fbd4": "period2Denominator()", +"aa534161": "releasedTeamTokens()", +"aa53d504": "Bounty()", +"aa53d7d4": "gettotalReceivedTicket()", +"aa541c9f": "unfroze_contract()", +"aa54abb1": "setLSEscrowContractAddress(address)", +"aa54ad35": "tokenSaleAddr()", +"aa54e040": "change_rate(uint256)", +"aa5581ef": "weiMaximumLimit()", +"aa5583d7": "Connections()", +"aa55a1a2": "giveAdditionalTokens(address,uint256)", +"aa55b55f": "getCardTypeInfo(uint256)", +"aa56c8e7": "isCrowdsaleFinished()", +"aa585d56": "setPrice(uint256,uint256,uint256)", +"aa58d4df": "calculateWinnerGameType2(uint256,uint256)", +"aa590140": "length(int8)", +"aa59770f": "sendCreatorByOwner(address,uint256)", +"aa59b024": "CROSAIR_SHIP_LIMIT()", +"aa59fb7d": "ChemistryCore()", +"aa5a11c5": "removeTellerModerator(address)", +"aa5a20e5": "setUpgradeAgent(address,uint32)", +"aa5b7df8": "marketingTokensWallet()", +"aa5b95d1": "deathFactor_i()", +"aa5c02a3": "LETX()", +"aa5c3ab4": "rewardBalance()", +"aa5c88ca": "setFreezePercent(uint8)", +"aa5d4719": "getTransferable(bytes20)", +"aa5d6d5f": "dropWallet()", +"aa5dcecc": "allocator()", +"aa5dd215": "doAirDrop(address[],address,uint256[])", +"aa5df9e2": "ownersArr(uint256)", +"aa5e2500": "clearProposalNames()", +"aa5ebd7f": "removeAddressFromWhitelist(address,address)", +"aa60145b": "cancelPledge(address)", +"aa601a71": "setAllowChangePrice(bool)", +"aa601e86": "SimpleMultiSigWallet(address[],uint256)", +"aa613b29": "authenticate(string)", +"aa613faf": "U42Token()", +"aa616da1": "addSkillNames(address,bytes32[],address)", +"aa617f25": "getAdUrl(uint256)", +"aa61924a": "CREATE_VERSION_ROLE()", +"aa61fc58": "getAirdropList(address)", +"aa620192": "today(uint256)", +"aa6217eb": "getMaximumContributionPossible()", +"aa628c31": "timelock(address,uint256)", +"aa63dea4": "dateMainStart()", +"aa646ebb": "_mint(address,uint256,uint128)", +"aa647673": "getKingPoints()", +"aa64c43b": "transferPool(address,address,uint256)", +"aa64f3c6": "addWhiteListed(address[])", +"aa656a3a": "updateGameMoney(uint256,uint256,uint256,uint256)", +"aa657658": "setMigrationGate(address)", +"aa657815": "takeoffer(uint256,uint256)", +"aa65a6c0": "getTokenWithId(uint256)", +"aa65c1f1": "WinningOutcomeDeclared(uint8)", +"aa66797b": "RESERVE_SUPPLY()", +"aa677354": "register(address,address)", +"aa67bc04": "eraByName(bytes32)", +"aa67c919": "depositFor(address)", +"aa682682": "startBuyTime()", +"aa68894b": "ownerWithdrawAccount(address)", +"aa692151": "fbytes32(bytes32)", +"aa6aca58": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint8,uint8)", +"aa6b5d9f": "ElyToken(address,bool)", +"aa6b631a": "getSetting(string)", +"aa6be303": "debtors(address)", +"aa6bf687": "calculateBonus(bytes32,uint256)", +"aa6ca808": "getTokens()", +"aa6d5dce": "_withdrawAllFunds()", +"aa6d7de4": "Hash()", +"aa6e4858": "VoteAdvertisement(uint256,address)", +"aa6e6539": "chkUserDetails(address,address)", +"aa6ebdcb": "numberOfDAppNodePackages()", +"aa6f5bb6": "setCreateDigitalArtFee(uint128)", +"aa727e46": "MAX_PUBLIC_FUNDING_SUPPLY()", +"aa72f217": "bountyMktWallet()", +"aa72f725": "listAssetDocuments(bytes32,uint256,bool)", +"aa735dd6": "ZBAStandardToken(uint256,string,uint8,string)", +"aa736f57": "transferLocker(address)", +"aa738940": "Show_Company(uint256)", +"aa743c85": "sixMatchPayoutInPercent()", +"aa74c9fc": "addressToURI(address)", +"aa74fad8": "buyNewInfra(uint256)", +"aa7517e1": "minimumBond()", +"aa7618d5": "increaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"aa7622c7": "finalizeSecondStage()", +"aa7629ab": "withdrawDRPS(uint256)", +"aa76994d": "numOverthrows()", +"aa772fa0": "WinningEvent(address[],address,uint256)", +"aa775278": "deallocateBalance(address)", +"aa77f26c": "vestedAmount(address,address)", +"aa78a883": "BDP()", +"aa79376e": "updatePlayersCookie(address)", +"aa799fdc": "ZeroxDinar()", +"aa79bc02": "maxTrophies()", +"aa7a7744": "isRegisteredPair(address,address)", +"aa7abc8d": "sellWonder(uint256,uint256)", +"aa7b6c59": "wirteData(string)", +"aa7bc1c0": "createTokenFunctions()", +"aa7be9a7": "watchVideoA(address)", +"aa7ca464": "didReveal(address,uint256)", +"aa7dcd84": "testUpdateAuthorityEvent()", +"aa7ebf43": "level_1_percent()", +"aa7f6a3f": "AirdropList(address[],uint256[])", +"aa7f6a61": "newPurchase(address,uint8,uint8,uint32)", +"aa804a80": "jdouble(uint256,uint256,uint256)", +"aa80eec8": "testCheckRokBounty()", +"aa8116be": "fundedPrincipal()", +"aa81f862": "numDepositsSigned(bytes32)", +"aa82635d": "allocateManualMintingTokens(address[],uint256[])", +"aa833a25": "TheTokenC()", +"aa848ee2": "setPrivateList(address)", +"aa84d4b1": "whitelistOff()", +"aa84edb8": "MYDLToken()", +"aa85048a": "TotalCrowdsaleSupply()", +"aa8596ea": "setGalleryFivePrice(uint256)", +"aa863759": "addtoTechOperation(address,address,uint256,uint256)", +"aa864e49": "remainingPoolOptions()", +"aa8675d1": "singleIDXMQty()", +"aa8676b2": "gameDividendOf(address)", +"aa86fbc5": "HETCCStandardToken(uint256,string,uint8,string)", +"aa8713dd": "secondWeek()", +"aa877470": "isInsurance(address)", +"aa879119": "allowApprovee(address,bool)", +"aa87af1e": "voirMessage()", +"aa88bb5b": "resolveDispute(uint16,address,address,uint8)", +"aa89376a": "Example2(string)", +"aa8a0002": "raiseLimit()", +"aa8b20f6": "getAvatar()", +"aa8b76ea": "reclaimDividend(uint256)", +"aa8b99d2": "length(uint256)", +"aa8c217c": "amount()", +"aa8c5324": "prolongate()", +"aa8d11e3": "ThirdPartyVoter()", +"aa8d715d": "itemBalance(address)", +"aa8dc41e": "vriesorexContract()", +"aa8dd5a1": "GRForGas()", +"aa8dde58": "Repost(bytes32,bytes32,uint256)", +"aa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", +"aa8e8fb0": "LTKN()", +"aa8f0269": "ScicoinsICO()", +"aa8f027b": "isEmoji()", +"aa8f365c": "test_invalidProposalValue()", +"aa8f44ec": "isSaleAddr(address)", +"aa908e3f": "closeContract(bytes32,bytes8,uint256,uint32,uint32,uint64,uint64,bytes32)", +"aa91cc61": "rodToken()", +"aa91d5c5": "HappyEnding()", +"aa9224cd": "withdraw(uint32)", +"aa9246ef": "_parseIntScientific(string,uint256)", +"aa93038b": "reward_total()", +"aa931697": "minNac()", +"aa93334d": "currentPeriodStartBlock()", +"aa9449f2": "Test(address)", +"aa9454b5": "transferAndBuy(address,uint256,uint256,uint256)", +"aa954845": "isConfirmed(bytes)", +"aa9669c1": "roll(uint256,bytes)", +"aa974eff": "multitokens(uint256)", +"aa985a63": "distributeWei(uint256,uint256)", +"aa98a41a": "setGenesisAddressArray(address[],address)", +"aa98d57b": "calcCollectedFee(uint256)", +"aa99474f": "authorized_changeOwnership(address,address,uint256)", +"aa994ab8": "transferGIM(address,address,uint256)", +"aa999b4c": "mixDna(uint256,uint256,uint256)", +"aa99ebb6": "CheckTimestampsDuringOneDay(address)", +"aa99f4d0": "teamTwoId()", +"aa9a0912": "mulDiv(uint256,uint256,uint256)", +"aa9a2cf0": "host_percentage()", +"aa9a79f2": "SubBankerPrincipal(uint8,uint256)", +"aa9ad331": "NEON()", +"aa9b5ba8": "getPaidDIVDSchedule()", +"aa9cdaf4": "coinAge(address)", +"aa9e40e0": "confirmDebt(uint256)", +"aa9f3666": "ClassicToken(string,string,uint8,uint256)", +"aa9f37f0": "purchaseContract()", +"aa9f5477": "Nursicoin()", +"aa9fa274": "addExtraReceiver(uint256,address)", +"aaa006b2": "countPlayer()", +"aaa04812": "presaleEthAmountsProcessed()", +"aaa05e20": "cityTransferResources(uint256,uint256,uint256,uint256)", +"aaa08e9b": "testBonus()", +"aaa0f5cc": "userAlreadyBoughtEth(address)", +"aaa24d31": "deathData_f7()", +"aaa2b78f": "allowedWithdraw()", +"aaa2b8c8": "rootAddress()", +"aaa2fe13": "getMin(uint8[])", +"aaa3de26": "getUsersInfo()", +"aaa40bc7": "TUXToken()", +"aaa44e5c": "getAllIds()", +"aaa51ec6": "setStoreAddress(address,address)", +"aaa5a02a": "claimTimeout(bytes32)", +"aaa5ad61": "getTokensAvailable()", +"aaa5c431": "editMemes(uint256,string,string,string,string,uint256)", +"aaa668aa": "getUserTenantId(address)", +"aaa6bc40": "removeWhitelistedUserAddr(address)", +"aaa7062b": "posShare()", +"aaa71e45": "mininglock()", +"aaa7744b": "_subjectToFees(address,uint256)", +"aaa77f55": "wuxiaMaster()", +"aaa99809": "FlatPricingExt(uint256,bool)", +"aaaa3218": "EmpireCrowdsale(uint256,uint256,address,address,uint256,uint256,uint256)", +"aaab3025": "replaceAbility(uint256,string,bool,uint8,uint8,uint8,uint256,uint256)", +"aaab51c9": "close(uint256,bytes,uint256,uint8[],bytes32[],bytes32[])", +"aaabdf16": "reputationIRNNodeShare()", +"aaac205b": "ZeenCoin()", +"aaac50bd": "transferDisable(bytes32)", +"aaac6539": "withdrawRepaidLoan(address,address)", +"aaac8040": "referralAmount(uint256,bool)", +"aaac9718": "package()", +"aaad0c84": "isExisted(address)", +"aaadc832": "isRedeeming()", +"aaae05b2": "approvePreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"aaae7799": "insertUser(uint256,bytes32)", +"aaaea138": "testFailBurnWhenStopped()", +"aaaf8a52": "approvePrimordialToken(address,uint256)", +"aaaf9595": "_generateTokens(address,uint256)", +"aab0395b": "LandToken()", +"aab065e8": "LifChannels(address,uint256)", +"aab14d04": "orderState(bytes32)", +"aab27ad1": "depositaCaucao()", +"aab324ae": "transferAnyERC20Token(address,uint256,address)", +"aab32cfa": "VerifierRegistry(address,uint256)", +"aab402e5": "toggleSale(bool)", +"aab40661": "_fishAquarium(uint256)", +"aab52c33": "initGameTeam(uint8)", +"aab60ebc": "totalLockedRewardsOf(address)", +"aab633dc": "private_setmaxRoll(uint256)", +"aab6606e": "BalanceEth()", +"aab725b3": "icoTokensSold()", +"aab75253": "StaffPicks()", +"aab78bf5": "compensateLatestMonarch(uint256,uint256)", +"aab8c476": "ABCXYZBBTT()", +"aab8f6e0": "airdropBy0Eth()", +"aab99609": "ApaAjaToken()", +"aab9f165": "processPayment(uint256,uint32,uint32,uint256)", +"aaba2fb8": "UnicornRanch()", +"aaba3e3b": "getSymbol(string)", +"aabb3d61": "MainBridge(uint256,address[],uint256,uint256,uint256)", +"aabbb8ca": "getInterfaceImplementer(address,bytes32)", +"aabbd0ce": "approveNewShorter(address)", +"aabd3904": "isCreating(uint256)", +"aabd46e3": "getMintRequestStringMap(uint256,int256,string)", +"aabd5b88": "_sold()", +"aabd971e": "presaleTransfersPaused()", +"aabda436": "fund_()", +"aabdf682": "FINTRUX_RESERVE()", +"aabe00c4": "verifyPreSupport(uint256)", +"aabe2fe3": "currentWinner()", +"aabe7dc4": "unlockRewardToken(address)", +"aabecb89": "setRate10(uint256)", +"aabf05cf": "set_presale_iconiq_arbits_per_ether(address,uint256)", +"aabf382b": "upgradeLevel(uint8)", +"aabf901a": "Distributor(uint256,address)", +"aac0d9c2": "CompanyReserve(address,uint256)", +"aac0e4c5": "getPendingSignatureStatus(address)", +"aac1335c": "tgeSettingsMaxStages()", +"aac1b0b7": "safeExchange(address,address,uint256)", +"aac1c80b": "getCompte_12()", +"aac24374": "setBoxPrice(uint256,uint256,uint256)", +"aac2c717": "buyXaddrWithInviteCode(address,uint256)", +"aac3e314": "setPrevOracle(address)", +"aac4e3a8": "whiteListingAdmin()", +"aac57b3a": "newAPM(bytes32,bytes32,address)", +"aac5ab61": "Crowdsale(address)", +"aac5ce9a": "Stakeholder()", +"aac67b05": "changeFactoryUsageFee(uint256)", +"aac6ba41": "setModel(address[],uint256[])", +"aac746ee": "getNameFromAddress(address)", +"aac74c92": "getPI_edit_30()", +"aac756b8": "setxiudao(address,uint256,bool)", +"aac80472": "getManagerAddress(uint256)", +"aac81654": "isNoEmptyTranches()", +"aac8788a": "setIncrementOpenInterest(bool)", +"aac878eb": "approveTransaction(uint256,bytes)", +"aacaa602": "getCurrentAmountBonusRate(uint256)", +"aacb15e6": "_validate(uint256,uint256,uint256,uint256)", +"aacb4442": "repaintVoxel(uint8,uint8,uint8,uint8)", +"aacbe4b3": "set_maxUETsPerReturnLessThan(uint256)", +"aacc3a16": "printAddress(address[3],address)", +"aacc5a17": "getRandom()", +"aacd572f": "private_setMinRollUnder(uint256)", +"aacd5a85": "orderTrade(uint256,uint256,uint256)", +"aacd9794": "setUniqueSpinnerPrice(uint256)", +"aacdb27b": "setPixel(uint32,uint32,uint8)", +"aacec70b": "createCrySolObject(string,uint256,uint16,uint16,uint8,uint8)", +"aacf3f2e": "contributionInCauldronRound(uint8,address,uint32)", +"aacf5328": "setVideoID(string,uint256)", +"aacfd352": "blockBeforeEncounter(uint256)", +"aacffccf": "getAccountOwner(bytes32)", +"aad00089": "tokenIssue(uint256)", +"aad0bb90": "TEMath(uint256,uint256,bool)", +"aad12029": "freezeAccounts(address[])", +"aad13b15": "fight(address,string)", +"aad2b723": "changeSigner(address)", +"aad3ec96": "claim(address,uint256)", +"aad41a41": "multisend(address[],uint256[])", +"aad429f1": "_buyCommonTTW(uint256,uint256,address,address)", +"aad52373": "ValidateAndStore(bytes,bytes)", +"aad55726": "getContract(address,uint256)", +"aad5632a": "generateNext()", +"aad62da2": "left89(uint256)", +"aad71040": "changeUnlockTime(uint256,uint256)", +"aad7152b": "updateTokenTransferAddress(address)", +"aad83ab3": "SpinTestToken()", +"aad85f7c": "setAchievedDate(uint256,uint64,uint64)", +"aad935af": "updateSellPossible(bool)", +"aad99ef1": "setPriceIncreaseScale(uint256)", +"aad9afee": "kingsMessage()", +"aada1cb3": "activateUniqueSpinners()", +"aada4b06": "saleIssue(address,uint256)", +"aadad773": "removeServer(uint256)", +"aadba3dc": "finishWhen()", +"aadbc52d": "addContractMember(address,bytes32,address)", +"aadbc5a0": "getMatches(uint256,address,uint256)", +"aadc0a9d": "sneakUpOn()", +"aadc1ac1": "approveLoan(uint256)", +"aadc3b72": "hasVoted(bytes32,address)", +"aadc8f23": "RogueProtocol(address)", +"aadd1b03": "donateEth()", +"aade1323": "_processUpdateFee(address[16],uint256)", +"aade53fe": "_removeCardSetAtIndex(uint256,uint256)", +"aade84ae": "TopIvy()", +"aade8dcc": "discountTokenPercent()", +"aade9bb4": "icoReturnBonus(uint256)", +"aadf017e": "_processReserve(address,uint256,address)", +"aadf1e73": "selectWinner30()", +"aadf6838": "getOldSchoolCoins()", +"aae07890": "setUnit(uint256)", +"aae07cd0": "getTokenLayers(uint256)", +"aae0ff1e": "incLuckyCoin(address,uint256)", +"aae1f5c3": "processDonate(address)", +"aae233b4": "cleanUpPreviousRound()", +"aae3d025": "transferClose()", +"aae3d031": "enableKYC()", +"aae40ddc": "getCurrentClaimerForTile(uint16)", +"aae4cbe4": "EcoToken()", +"aae62507": "getUnavailableValueT(bytes32)", +"aae755af": "m_currentUsdAccepted()", +"aae764c1": "assertFalse(bool,bytes32)", +"aae8312e": "getStakeholderTransactionCount(bool,bool)", +"aae8e1b3": "withdrawFlag(address,uint256,uint256)", +"aae99c66": "whitelistAddress(address[],bool)", +"aae9a4c7": "singleInvestorCap()", +"aae9d7ed": "__callback(bytes32,uint256)", +"aaea144d": "setPackage(bytes1[42])", +"aaea396c": "verifiedlist(address)", +"aaea4472": "LifeFactor_ii()", +"aaea44c4": "strConcat(bytes,string,bytes)", +"aaea53f3": "Channel(address,uint256)", +"aaeaa36c": "isBatchSupported()", +"aaead0f0": "initializeIndividualCapsFundraiser(uint256,uint256)", +"aaeb3255": "getInsuranceIDsByClient(address)", +"aaec0c03": "FireflyRegistrar(address,bytes32,address)", +"aaec2fa5": "getGirlsAuctionPrice(uint256)", +"aaecc9cf": "checkGameOver()", +"aaed2c3d": "getRewardRate(address,address)", +"aaed31c7": "createCoins(address)", +"aaed3c7d": "tokenBuyersAmount()", +"aaee686e": "confirmTransactionFee(uint256)", +"aaeea585": "DMToken()", +"aaef36b5": "CorvinusCoin()", +"aaf04471": "transferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,uint256,bytes)", +"aaf05f3d": "f3()", +"aaf10f42": "getImplementation()", +"aaf13d10": "Wallet3()", +"aaf20486": "ProofOfLongHodl()", +"aaf3e4f4": "left88(uint256)", +"aaf47835": "acceptBuyOffer(uint32,uint256)", +"aaf49910": "sanMinLength()", +"aaf4f1ed": "setMinDailyPerUser(uint256)", +"aaf517f5": "GetRoundIndex(uint8)", +"aaf592bf": "receiveApproval(uint256[])", +"aaf5eb68": "PRECISION()", +"aaf60eec": "setRoundOneRaito(uint256)", +"aaf73ef7": "registeredDeals()", +"aaf7e700": "setResetvalue(uint256)", +"aaf809f8": "_isUnique(uint256[],uint256)", +"aaf885f8": "getRazInstanceInformation(uint256,uint256)", +"aaf9419d": "latestNewRockForSale()", +"aaf9d13e": "buyTopDog(uint256,uint256)", +"aafa4827": "KOIOSTokenSale(address,uint256,uint256,uint256,uint256,address)", +"aafa944e": "createJob(string)", +"aafab1e8": "paymentsCount()", +"aafafbf3": "multiSendEth(address[])", +"aafb088e": "stageDuration()", +"aafba184": "removeShareholderListing(uint256)", +"aafbb120": "getSaleInfo(address)", +"aafbd3da": "create(bytes32,address,bytes32,bytes32,address,bytes32)", +"aafbe1c0": "NectarController(address,address)", +"aafd775e": "getLockedBalanceForUser(address,address)", +"aaff096d": "updateDarknodeRegistry(address)", +"aaff2a83": "totalRemainingTokensForSales()", +"aaffadf3": "minContribution()", +"aaffc4b6": "currentRoundCount()", +"ab004a97": "traded_token_seed_amount()", +"ab021884": "setMinimumPriceFusion(uint256)", +"ab022b28": "resetAirdropAmount()", +"ab02f27c": "Europium()", +"ab03cf46": "sendFunds(uint256,address,bytes)", +"ab03d0e8": "changeUnitsUserCanBuyLimitEth(uint256)", +"ab040107": "decline()", +"ab044622": "syndicateTokensWithdrawn()", +"ab045871": "Indemnisation_2()", +"ab051767": "userlogout(address)", +"ab05a69a": "InbotProxy(address,address,address,address)", +"ab05bfff": "setReleaseTime(uint256)", +"ab062643": "getNumTokensPurchased()", +"ab065d6c": "getProjectClient(bytes32)", +"ab067a5b": "periodSales()", +"ab06bea3": "reportContribution(address,uint256)", +"ab06da29": "setUTExchangeRate(uint256)", +"ab074225": "BLOOToken()", +"ab0783da": "mat()", +"ab07f054": "getLandPrice(int32,int32)", +"ab080aab": "SecondBiathlonToken(address,address,string,string,uint256,address)", +"ab08d048": "SPAYToken()", +"ab08f75b": "getMoneyline()", +"ab09ee80": "respond(uint256,uint256,uint256,uint256)", +"ab0a9865": "createGen0Dog(uint256)", +"ab0b29a5": "applySetMaxFeeTrade()", +"ab0ba5d4": "challenge(uint256,bytes32,bytes)", +"ab0bcc41": "saleStart()", +"ab0cba56": "ICO(uint256,uint256,uint256,uint256,address)", +"ab0cd5bc": "createMineForToken(uint256)", +"ab0ced0e": "checkContribution(address)", +"ab0cf8b7": "Wolf()", +"ab0d92dd": "totalPrice()", +"ab0da5a9": "reject(address)", +"ab0db220": "createBattle(uint256,uint256[],bytes32,uint256)", +"ab0e6765": "setEmployer(address,address,string)", +"ab0eda9e": "setAirdropAddress(address)", +"ab0facc0": "raiseLimit(uint256)", +"ab0fd373": "matchTimestamp(bytes32,bytes32)", +"ab0fe874": "purchaseCap()", +"ab108915": "createUser(address,bytes20,uint64)", +"ab1193fa": "PREMINE_ALLOCATION_ADDED(address,uint256)", +"ab11ebdd": "returnIcoTokens(address,uint256)", +"ab127a0c": "searchBestRate(address,address,uint256)", +"ab1377c0": "startSeedStage()", +"ab14a41f": "reentrancyHelper(address,bytes,uint256)", +"ab150226": "checkAdmin()", +"ab1547d2": "nextOpenRewardTime_()", +"ab15d70c": "updateFifthExhangeRate(uint256)", +"ab15f723": "pauseMints()", +"ab165623": "TalentEducationToken()", +"ab165831": "checkContractAddress(address)", +"ab166a48": "addHistory(address,uint256[4])", +"ab16cef1": "addBigPromoBonus(uint256)", +"ab17176c": "VCCToken(uint256,string,string)", +"ab172cf5": "getCandidateByIndex(uint256)", +"ab179e9f": "currentReleaseCeiling()", +"ab17bad0": "setGasConsume(uint256)", +"ab18af27": "setDepositAddress(address)", +"ab18f6ac": "parseTimestampToYM(uint256)", +"ab19d396": "couponTokenCampaignAddr()", +"ab19fff9": "TokenFrank()", +"ab1a84da": "isCrowdfundCompleted()", +"ab1ac9f6": "BITSDToken()", +"ab1b1cb5": "getSubscriptionLastPaid()", +"ab1b3830": "EIForceCoin()", +"ab1b75f2": "burnUnpaidTokens()", +"ab1bef4e": "getDailyTickets(address)", +"ab1d3add": "assignDispute(string,address,string)", +"ab1d581b": "checkPet(uint64)", +"ab1e96e9": "migrationPeriod()", +"ab1ebb4d": "OneMillionToken()", +"ab1f7929": "setMigrationInfo(string)", +"ab207628": "getAffiliateAmount(uint256)", +"ab209e23": "Manifesto(uint256,uint256)", +"ab2191a2": "Satanshi()", +"ab21b055": "getTickets(string)", +"ab21d58a": "enableCharity()", +"ab225edc": "DepositFund()", +"ab22a640": "getVideoGameOwner(uint256)", +"ab22c561": "getVestingCliff(address,address)", +"ab231511": "lastWithdrawTime()", +"ab23c50d": "AirDropAFTK3SeptSandBox()", +"ab250cb5": "addSubcontract(address)", +"ab253ca6": "buyMinions(uint8)", +"ab2643a1": "commitCollateralToPool(address,uint256)", +"ab273016": "signProposal(uint256)", +"ab27be20": "mine(address,uint256)", +"ab27d755": "confirmOrder(bytes16)", +"ab282655": "removeHouse(address)", +"ab2874cb": "buySlot(uint256)", +"ab28c704": "initialSupportAmount()", +"ab28e8af": "serviceTokensBurn(address,address)", +"ab2a4f8a": "transferRevenue(address,address,uint256)", +"ab2a5772": "setIcoHardCap(uint256)", +"ab2a6dc1": "dealsGetter(address,uint256)", +"ab2af349": "CallCancelled(bytes32)", +"ab2c8b16": "fundingLowcapReached()", +"ab2e5a1f": "play(uint256,uint256,uint256)", +"ab2ebcf1": "priceExpirationInterval()", +"ab2f0e51": "availableBalance()", +"ab30c26d": "getInvestorInforMin(address)", +"ab32775c": "alreadyContains(uint256[],uint256,uint256)", +"ab331a34": "getProperty(string)", +"ab33cbcf": "inxCrowdsale()", +"ab34dc48": "monechainToken()", +"ab351270": "lottery(address,uint256)", +"ab3545e5": "getMember(uint256)", +"ab35678c": "trackCount()", +"ab3640c8": "processPayment(address,uint256,bytes32)", +"ab36e4a6": "milestonesCount()", +"ab37594b": "cancelOrderByMerchant(string)", +"ab383a6b": "getPropertyPrivateModeBecomePublic(uint16)", +"ab3860d0": "test_twoValidEqUint()", +"ab3a32c4": "refundAllExternalPurchase(address)", +"ab3a39c2": "scamSealTokenAddress()", +"ab3b87fe": "setOwner(address,uint256)", +"ab3bd81f": "changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", +"ab3bfac4": "freezeBalance(address,uint256)", +"ab3c04d3": "BAKEToken()", +"ab3cdaf0": "PRE_ICO_BONUS_TIME_2()", +"ab3d2e74": "_clearApproval(uint256)", +"ab3d4e8b": "MembershipPurchase(address,uint256,uint256)", +"ab3dd698": "airdropDiff(uint256[],address[])", +"ab3e9c56": "ChangedInitialPrice(uint256)", +"ab3ed9f0": "DecisionToken()", +"ab3efa83": "tokenSafeLock(uint256,uint256,uint256,uint256)", +"ab3f22d5": "allocate(address,uint256,uint256)", +"ab3f699c": "getOrCreateNextFeeWindowWasCalled()", +"ab400d86": "updatePlayerEth(address,uint256,address)", +"ab40340a": "recordWithdraw(uint256,address,uint256)", +"ab40b01f": "getAddressAnswerKeccak256(uint256,address,address)", +"ab40b65a": "receiveapproval(address,uint256,address)", +"ab413a7e": "getScoreAndCount(address)", +"ab4215cc": "getDataOfGame()", +"ab430d49": "transferToken_toInvestBalance(address,uint256)", +"ab442c59": "getICOToken()", +"ab4459bc": "releaseBountyTokens()", +"ab447007": "setClaimDate(uint256)", +"ab45e2a0": "processPurchase(address)", +"ab464a4c": "launch_date()", +"ab464fa6": "transferMultiDiff(address[],uint256[])", +"ab46cc46": "add_attender(string[])", +"ab470f05": "getCaller()", +"ab473f48": "closeFunding(uint256)", +"ab47f1bf": "getFilledAmount(uint256)", +"ab4865ec": "boardTokensAddress()", +"ab486607": "getLeaderboardLength()", +"ab489f08": "toBytes(address[])", +"ab48f2f8": "PlayNow()", +"ab4955c2": "ReserveWalletUpdated(address,address)", +"ab4a2eb3": "getUnlockableTokens(address)", +"ab4b3929": "updateMinMaxInvestment(uint256,uint256)", +"ab4b4def": "WITHDRAWAL_SCALE()", +"ab4bc414": "bitbgcToken()", +"ab4bf05e": "addSignature(string,int256,string)", +"ab4c4487": "getSystemSalePrices()", +"ab4d0ca9": "multiAdd(address[])", +"ab4e21c4": "OneBlocToken()", +"ab4e8ef1": "getAirdropTokens()", +"ab4ef895": "MB()", +"ab4f643c": "PublisherParametersChanged(address)", +"ab4fa078": "ListAllSince(uint256)", +"ab503e30": "SetminTokens(uint256)", +"ab50bc86": "PubRegistered(address)", +"ab50e7f2": "third_release(uint256)", +"ab5170b2": "getstr()", +"ab519020": "calcShare(uint256,uint256)", +"ab51937b": "startproduction()", +"ab519b0c": "prepare(uint256,address,address,uint256,bytes)", +"ab51b06f": "preSaleBonus()", +"ab51cff2": "getQuarterVATBalance(uint256,uint8,address)", +"ab531efd": "_encodeTokenId(uint256,uint256)", +"ab5366dd": "pendingOwner2()", +"ab53d3b3": "jpotInfo()", +"ab54775d": "lookupSigName(address,address)", +"ab55979d": "changeStaker(address)", +"ab55d1cc": "getDAIBalance()", +"ab5690c4": "enableWithdrawals(address,address)", +"ab56c09e": "Placed(uint256,uint8,address)", +"ab5706ee": "setBaseSummonPrice(uint256)", +"ab5783c4": "StopGame(uint8)", +"ab582eb3": "kickOwner(address)", +"ab5841f2": "updateReserve(address,uint32,bool,uint256)", +"ab590032": "cleanAssetHolders()", +"ab5a7076": "RadiumToken(address)", +"ab5aa302": "_START_DATE()", +"ab5aea81": "Menu07(address)", +"ab5b4456": "use(uint256)", +"ab5db036": "refundICO(address)", +"ab5e28c5": "transfers()", +"ab5e5158": "setNewManager(address,address)", +"ab5ed150": "getOne()", +"ab5efded": "OmegaToken(address,address)", +"ab5f3380": "getVineyard(string,address,uint256)", +"ab5f6b91": "multiCreate(uint256,uint256,uint256)", +"ab5fa2c6": "setITO(address)", +"ab60443b": "changeInviteRate(uint256)", +"ab605eea": "fighterIndexToApproved(uint256)", +"ab60e4e5": "setWebGiftOnceMaxAmount(uint256)", +"ab60ffda": "exp()", +"ab61787a": "proofFailed(address,uint256,uint256)", +"ab619e5a": "StandardToken(string,string)", +"ab6231f1": "RefundedETH(address,uint256)", +"ab62438f": "submitImpeachmentProposal(string,address)", +"ab624cf1": "setPartyA(address)", +"ab630fc4": "kimsOnAuction()", +"ab635b48": "createTokenVestingContract(address)", +"ab63d7f2": "getUniqueId()", +"ab643c07": "getAllBounties()", +"ab643c10": "requestEthereumPrice(address,string)", +"ab64611b": "BitmarkPaymentGateway(address)", +"ab651065": "setESCBCoin(address,address,address,uint256,uint256)", +"ab65c534": "SqueezeTheJuice()", +"ab65cda6": "getDial2Type(uint8)", +"ab65f20a": "mintCards(uint256[],address)", +"ab6680f3": "initAuction(uint256,uint256,uint256,uint256,uint256,address,bool)", +"ab67aa58": "transferFrom(address,address,uint256,bytes)", +"ab686d0a": "setFrontWindow(address)", +"ab6a5d95": "changeBoardAddress(address)", +"ab6a9f0e": "knockoutTeam(uint256,uint256)", +"ab6ad452": "unlockedBalance()", +"ab6ae424": "affWallet()", +"ab6b551e": "isSideBridgeContract()", +"ab6b7e22": "grantBounty(address,uint256)", +"ab6bfe78": "Hongshanchain(uint256,string,string)", +"ab6c291b": "getWiningType(uint256)", +"ab6c5f58": "removePlayer(uint256,uint8)", +"ab6cab71": "PoWH4DSupply()", +"ab6cb831": "UNIToken(uint256)", +"ab6cf42f": "isReservationFull()", +"ab6d8a9a": "gemFab()", +"ab6da028": "TOKEN_FOR_COMUNITY()", +"ab6db199": "dias()", +"ab6ddfa8": "holderBalance(address)", +"ab6def1c": "isShareToken()", +"ab6e1be4": "getTs()", +"ab6e4959": "depositsOfMember(address)", +"ab6e79ed": "getBaseToQuoteReturn(uint256)", +"ab6e9072": "admin_wallet()", +"ab6e988c": "playerVault(address)", +"ab6ef0b1": "purchaseLandWithCC(uint8,bytes32,uint256)", +"ab6f78f0": "SetRecord(address)", +"ab6f9e4a": "votesPerChoice(uint8)", +"ab700624": "toWidthString(string,uint256)", +"ab701ca3": "_upgradeabilityOwner()", +"ab702d48": "train2(uint256,uint256)", +"ab70bba7": "OtxToken()", +"ab70d0c5": "_getEndWeek(uint256,uint256)", +"ab70ee5c": "PoloneumToken()", +"ab71b8ac": "maxBountyTokens()", +"ab727094": "reinvestDivies()", +"ab731fd6": "ownerSetOverride(address,address,bool)", +"ab736b5d": "checkUniqueLockedTokenReceivers()", +"ab73e316": "next(address)", +"ab73f08e": "findOptionId(address)", +"ab74731d": "dividendPayment()", +"ab75a4a2": "angelWheelFinancing()", +"ab75e6c8": "DTXTestToken()", +"ab7748da": "Blocker_resume(bool)", +"ab779505": "NettingChannelContract(address,address,address,address,uint256)", +"ab77b178": "issueCoin(address,uint256)", +"ab7891f5": "deleteSiringWithId(uint256)", +"ab79fd26": "setBeginTimeTS(uint256)", +"ab7a162f": "getInterCryptoPrice()", +"ab7a9691": "isReleaseAgent(address)", +"ab7aa65d": "icoThresholdBonus2()", +"ab7af62f": "setAttackBoostMultipler(uint256)", +"ab7b347c": "BitcoinDominatorERC20Token()", +"ab7b47aa": "_generateInitialPattern()", +"ab7cb211": "allowBuy()", +"ab7ccc1c": "credit(uint256,uint256)", +"ab7df819": "Simscoin()", +"ab7e50ba": "GAX()", +"ab7e9dca": "getPrivilegedBalance(address)", +"ab7ebbce": "startPresale(address)", +"ab7ec692": "primoContratto()", +"ab7f8f12": "masicotestToken()", +"ab802509": "setMintAgent(address)", +"ab80c807": "RareCoin(address)", +"ab81e773": "left61(uint256)", +"ab82d9a0": "challenge(uint256)", +"ab831144": "parseUint(bytes32)", +"ab834bab": "atomicMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])", +"ab840808": "migrateBasicData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ab8425d8": "set_amount(uint256)", +"ab84db68": "releaseArr()", +"ab850a85": "mintGold(uint256)", +"ab8530f8": "Mint(address,address,uint256)", +"ab8620dd": "getStageSoldTokens()", +"ab86ba3a": "bonus3()", +"ab86e0a6": "_setBalance(address,uint256)", +"ab87d816": "getPerson(uint32)", +"ab883d28": "multisendEther(address[],uint256[])", +"ab888539": "setIdentifier(address,bytes32)", +"ab889df9": "DoradoToken()", +"ab89641b": "getTlength50()", +"ab89d8c6": "WGWToken()", +"ab89f2c7": "getCurrentStageId()", +"ab89f870": "setMultiple(uint256)", +"ab8a0360": "Auth()", +"ab8a1595": "test_25_assertGasUsage1400Boards()", +"ab8a288b": "checkStoredFile(string)", +"ab8be231": "setMockedTime(uint256)", +"ab8ca6e9": "getBonusTier(uint8)", +"ab8d01b8": "transferFromToUpdateToken(address,address,uint256)", +"ab8d1daf": "payTokenOwner(address,uint256)", +"ab8d3dc1": "TokenPing(uint256)", +"ab8e0f6e": "Mmcchain(uint256,string,string)", +"ab8e5b01": "testGetLastTime()", +"ab8efb87": "UInt256(int256)", +"ab8f1957": "investedPeriods(uint256)", +"ab8f3c98": "validateBroadcasterSig(string,uint256,bytes32,bytes,address)", +"ab8feb02": "TKN()", +"ab90602c": "registerTicketsToUser(string,address,uint256)", +"ab90a8ac": "createSaleTokens()", +"ab90f855": "maxPromoToons()", +"ab911060": "assertOnlyFrom(uint256)", +"ab91154e": "ownerAddSanSlot(address,uint256)", +"ab91c7b0": "queueLength()", +"ab9213f3": "addAddressReferrals(address[],address[])", +"ab92670e": "Franc()", +"ab929fcd": "submitArticle(string,string,bool)", +"ab92f290": "addNewDividends(uint256)", +"ab948370": "KingToken()", +"ab948374": "gen0EndingPrice()", +"ab95b586": "getEventTimes()", +"ab9611f4": "setCancelableAt(uint256)", +"ab96cc4c": "receivedFunds()", +"ab96d498": "addPublicFundingWhiteList(address[])", +"ab96dd18": "earlyStageLasts()", +"ab97af6c": "initialCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"ab97d59d": "getTokenManager()", +"ab97e196": "revokeAmountVote(uint8)", +"ab98458e": "getUint80val()", +"ab989586": "WMCToken(uint256,string,string)", +"ab998660": "LockMechanismByOwner(address,uint256)", +"ab998939": "RequireDispose(address)", +"ab99deb8": "Expread()", +"ab99e48f": "requestMerge(uint256[])", +"ab9a5caa": "AEStoken()", +"ab9a78df": "priceOf(string)", +"ab9a81c3": "numOfBlocksInMinute()", +"ab9a913a": "generatedEve()", +"ab9ae1be": "isCrowdSaleStatePreSale()", +"ab9af166": "reduceCDFee(uint256)", +"ab9b8637": "medibitICO(address)", +"ab9c1758": "cancelMarginCallOnBehalfOfRecurse(address,address,bytes32)", +"ab9c20d0": "finalizationSuccessHook()", +"ab9cd37e": "withdraw(uint80)", +"ab9d8b8b": "circulatingTokens()", +"ab9d8e4b": "Thankfulness()", +"ab9dbd07": "getID()", +"ab9def41": "hardCapTokensAmount()", +"ab9fe3a1": "importBalances(address,address[])", +"aba00859": "decBalance(address,uint256)", +"aba01e5c": "impl_amountOfWorkpointQueue()", +"aba0e189": "checkGameStatus()", +"aba1017b": "despawnGladiatorAndAwardCoins(address)", +"aba133ea": "GVPE_Token()", +"aba13a2f": "_resetTiles()", +"aba16a02": "offerToChannels(uint256)", +"aba222ed": "nodeRegistrationEnabled()", +"aba23628": "mintPlayers(uint128[],uint256,uint256,uint256)", +"aba3d017": "windowAt(uint256)", +"aba46a93": "etapAddressesLimit()", +"aba47d1a": "getGrapesToBuildWinery()", +"aba61514": "priceT4()", +"aba683fa": "Etbccoin()", +"aba70319": "FreyrTokenLocker()", +"aba7ad0d": "lotteryFeeVal()", +"aba88037": "DARKNODE_FEES_NUMERATOR()", +"aba88766": "claimableHalvingsOf(address)", +"aba89198": "getCurrentCapacity()", +"aba8dfbd": "SecondBonus()", +"aba9650e": "createDepositContract(address)", +"abaa5f3e": "randomDS_getSessionPubKeyHash()", +"abaa9916": "allocate()", +"ababa4a7": "authorize()", +"ababb2dd": "_tryUnlockBalance(address)", +"ababe93d": "distributeBondFund()", +"ababf71b": "GetSummReward(uint256)", +"abacf5d7": "getBoardUpdateTime(uint256)", +"abad3466": "createtoken(string,string,uint256)", +"abadaf9a": "bonusAmount()", +"abadeb06": "teamPeriodsNumber()", +"abaed924": "executeOrders(address[],bool[],uint256[],uint256[],address[],address[],address[8][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"abaf1de9": "setPublicPrice(uint256,uint256)", +"abaf5880": "Crowdsale(uint256,uint256,uint256,address)", +"abaf9457": "localRevenuePercent()", +"abafaa16": "emitIssue(bytes32,uint256,address)", +"abb00601": "addUnpausedWallet(address)", +"abb151c8": "CCICoin()", +"abb1a33a": "SetHotLists(string)", +"abb21618": "changeAirdropValue(uint256)", +"abb254de": "developer_withdraw_ETH()", +"abb2874f": "DezToken()", +"abb29f70": "TinyOracleDispatch()", +"abb2d04b": "editName(string)", +"abb4108e": "addRoles(uint8[])", +"abb41fab": "_reward_masternode()", +"abb43397": "getCanvasBitmap(uint32)", +"abb46619": "DSCToken(uint256,address)", +"abb4fe2d": "MiningRigRentalsToken()", +"abb524a4": "PapyrusSalePhase1(address,address)", +"abb58d20": "Registry(address,address,address,string)", +"abb58fd3": "createLink(bytes32)", +"abb5bf16": "reinverst(address)", +"abb689e1": "payRedemption(uint256)", +"abb69a1a": "getInvoicesByStatus(address,uint256,uint8)", +"abb70034": "getChosenNumbers(address,uint256,uint256)", +"abb721ce": "_deposit()", +"abb743c8": "setUint(int256,uint256)", +"abb8c965": "_setOwner(address,bool)", +"abb9e0bf": "coinIssuedAdvisor()", +"abb9eef4": "YUNXIN2Token(uint256,string,uint8,string)", +"abba87c1": "_prestige()", +"abbadf55": "oobiqoo(address)", +"abbb4695": "setNotifier(address)", +"abbbf451": "getRound0MinDuration()", +"abbc54b0": "changePriceUpdateWaitingTime(uint256)", +"abbc5d2a": "levToll()", +"abbc8afa": "teamPoolForFrozenTokens()", +"abbcb24b": "LEGAL_EXPENSES_ADDR_2()", +"abbdc272": "checkGameStart()", +"abbe3056": "stage2Deadline()", +"abbef24e": "buyDaiWithEth(uint256)", +"abbf7228": "changeBlocks(uint256,uint256)", +"abbf94f8": "PlatoniusToken()", +"abbff658": "Ownable3()", +"abc1c9fe": "requestForRefund(uint256)", +"abc21702": "getPI_edit_25()", +"abc2a40a": "minInvestBTC()", +"abc2ab75": "FinalizeDispute(address)", +"abc32931": "safeTransferFromDataContract(address,uint256)", +"abc33778": "Result(bytes32,address,uint256,bool)", +"abc38cf2": "submitNewClip()", +"abc3bc92": "getReferrerBalance(address)", +"abc40f41": "batchWrite(uint256,uint256,string)", +"abc4558e": "_requireRenewableProduct(uint256)", +"abc45ddc": "BANKOIN()", +"abc48a0d": "minerTotalSupply()", +"abc4cbd3": "transferForTeam(address,uint256)", +"abc6124f": "Bought(uint256,string,address,uint256,string,string)", +"abc63d00": "STARTING_TIME()", +"abc66e82": "dev_fee(uint256)", +"abc6affb": "publicGetUserHistory(address,uint256)", +"abc6fd0b": "disburse()", +"abc897f4": "removeMinterByValue(address)", +"abc8bc4c": "addBomb(uint8,uint256,uint8,uint8)", +"abc8c7af": "marketplace()", +"abc93aee": "left64(uint256)", +"abc9e8c0": "fetchOrdersForPayer(address)", +"abca7290": "feeDeposit()", +"abcafdf8": "prizeProjection(uint256,uint256)", +"abcb7fce": "getTokenAddressHashing(address,uint256)", +"abcb9934": "unlistToken(address)", +"abcc11d8": "lastResult()", +"abcc8a46": "LogEuroTokenOwnerMigrated(address,uint256)", +"abccb043": "modifyMaxContractBalance(uint256)", +"abcccdb1": "agentAddr_()", +"abcd0d9d": "getNewEndTime(uint256,uint256,uint256)", +"abcd7960": "equal(uint256,uint256,string)", +"abcdabcd": "aiGFJ()", +"abcdff1d": "ComputeMyShare()", +"abce03d0": "KoreaRepublicvsGermany()", +"abcf033c": "safeWithdrawalFromCrowdsale(address)", +"abcf1328": "InterestBank()", +"abd05acd": "createDklSaleAuction(uint256,uint256)", +"abd06c3b": "remove(bytes1,bytes1)", +"abd10e07": "failSafeAddWhenGreaterThanIntMax()", +"abd117fe": "GXCSentToETH()", +"abd15c4f": "transferProd(address)", +"abd188a8": "setKyberNetworkContract(address)", +"abd1a89c": "allocTokenHolder()", +"abd225e1": "isStarted(uint256)", +"abd23d95": "getNameByAddress(address,address)", +"abd2adbb": "columns()", +"abd2cc5f": "presaleClosed()", +"abd2ecb7": "isOnExchangeById(uint256)", +"abd437da": "balanceOfCall(address)", +"abd44556": "setBatchDetachCollectibles(uint256[])", +"abd49646": "makerDAO()", +"abd5100d": "referralAmountInvest(address)", +"abd5f3c7": "poolPrice()", +"abd6b000": "CryptoSagaCardSwapMerculet(address,address,address,address)", +"abd6cb3c": "firstStageRaised()", +"abd6ff8e": "setIntValue(string,int256)", +"abd70aa2": "getPoolBalance()", +"abd74e52": "getLastPriceFeedValues()", +"abd796bf": "addAllowedAddress(address,address)", +"abd7f8de": "doEmit(uint256,uint256)", +"abd8537f": "makeSmokeymon(string,uint8)", +"abd89e1e": "preICOmint(uint128)", +"abd8d939": "buyThroughProxy(address)", +"abd936ab": "delegateDklSaleAuction(uint256,uint256,bytes,uint256)", +"abd958eb": "getCurrentBlockValueAndSellPriceForTile(uint16)", +"abda35de": "inMaintainance()", +"abda78ed": "getAltOracles()", +"abdb5ea8": "repayBorrow(address,uint256)", +"abdbe6ca": "CrowdDreaming()", +"abdbf4a3": "UpdateAsk(address,uint256,uint256)", +"abdc5dee": "HumaniqToken(address)", +"abdd0c44": "marginCallOnBehalfOf(address,bytes32,uint256)", +"abdd11a8": "setOpeningTime(uint256)", +"abdd19d9": "setCityContract(address)", +"abdd2430": "AuctionCreated(address,uint256,uint256,uint256,uint256,uint256)", +"abdde3d1": "getEthToTokenOrder(uint32)", +"abde33f7": "right26(uint256)", +"abded6fd": "setANT(address,address,address)", +"abdf9566": "setData_16(string)", +"abdf9bda": "bountyProgam()", +"abe088a7": "financialOfficerAddress()", +"abe1d5a2": "ViewRawDeposit(uint256)", +"abe24a3d": "mulByFraction(uint256,uint256,uint256)", +"abe2a16e": "FeeRate()", +"abe2a18d": "stateChangeAgents(address)", +"abe3219c": "safeMode()", +"abe35312": "getAvailableTokensToSellCurrentPhaseIdx(uint256)", +"abe3d0e3": "logPurchase(address,uint256,uint256)", +"abe3dfd1": "setInitialRate(uint256)", +"abe4136f": "getNickname()", +"abe4932c": "createPostboyAccountForSomeone(uint256,uint256,bytes16)", +"abe5b120": "Registered(address,uint256,uint256,uint256)", +"abe65ec9": "_createDiamond(string,address,string,string,string,string,string)", +"abe6c54d": "deleteCandidates(address)", +"abe6e82f": "setAmountBonuses(uint256,uint256,uint256)", +"abe7008e": "getPlayerValue(uint8[],uint8)", +"abe756da": "dateRelease9()", +"abe75844": "preSaleFirstEndDate()", +"abe7b54e": "readWelfareDetails(address)", +"abe7c08e": "finishVoting(uint256)", +"abe7cc7b": "LOCK_END()", +"abe7f1ab": "remove(address,uint256)", +"abe7f6fe": "ensureAllowance(address,address,uint256)", +"abe8014a": "totalWeiRaisedDuringPreICO()", +"abe9717a": "A2ACrowdsale()", +"abe9f569": "oraclize_getPrice(string,uint256)", +"abea0804": "nAddresses()", +"abea8d79": "setMiningLeader(address)", +"abeb5f9f": "hasQuickBuyEtherToken()", +"abebb746": "_fillOrder(address,address,uint256,address,uint256,uint256,uint256)", +"abebb7f3": "MarketsContract()", +"abec0a00": "BLVK()", +"abed982b": "LockedUpTokensWithdrawn()", +"abedeab4": "init_claim(uint256)", +"abee967c": "initialReward()", +"abefe7ac": "canCreateUnit(uint256)", +"abf03e19": "end_ICO(uint256)", +"abf0661f": "_burnForDeposit(address,uint256)", +"abf0c538": "vestTokens()", +"abf17198": "getShipProductEarningByModel(uint16)", +"abf19801": "createVesting(address,uint256,uint256,uint256,uint256,bool,address)", +"abf26786": "item(uint256,bool,bytes)", +"abf2b5b9": "cancelMtr(uint256)", +"abf2e01c": "isElectionPeriod()", +"abf3260f": "highestEditionNumber()", +"abf45359": "preSaleTokenCap()", +"abf52f53": "independentSellerJoined(address,uint256,address)", +"abf567e1": "setStartTime(uint256,uint64)", +"abf64392": "withdrawInvalidated(uint256)", +"abf74a93": "pitFee()", +"abf74cda": "_issueTokens(address,uint256)", +"abf74d5f": "bury(uint256)", +"abf7b063": "totalSuperAdminsMapping()", +"abf7bfd8": "createUser(bytes32)", +"abf7f83e": "setBonuses(bool)", +"abf8de6b": "TrocarAdmin(address)", +"abf8fbb8": "BCB(uint256,string,string)", +"abf98fe1": "getDepositBalance(uint256,uint256,uint256)", +"abfb589b": "revealBet(uint256,uint256)", +"abfb84a9": "TransferredPrefix(string,address,address)", +"abfc3db2": "MIN_UPDATE(bytes32)", +"abfc99a8": "setPeriodStart(uint256)", +"abfcb627": "subscribe(address,bytes32)", +"abfcb6f8": "checkInfo(uint256,address)", +"abfcc7d8": "endRound(uint256,uint256,address[],address[],bool)", +"abfccf3c": "REKTTokenSale(address,address,uint256)", +"abfceffc": "getAssetsIn(address)", +"abfd5c94": "addEntryInDays(address,uint256,uint256)", +"abfdcced": "setBool(bytes32,bool)", +"abfdd068": "getUserAuctionIds(address)", +"abfdfbe6": "setRentalPricePerDay(uint256)", +"abfe0472": "setMainLocation(uint16,uint16)", +"abfe35ad": "getStakingReward(uint256)", +"abfe40a8": "privateMint(uint256)", +"abfea3c5": "IraPid()", +"abfebfd9": "fifthWeekTokenPrice()", +"abff0110": "broker()", +"abff3fc1": "eventSaleEnd()", +"abffc9ac": "delistToken(address)", +"abffeffc": "create(address,address,address,address)", +"abfffa28": "foundersTokensDisbursed()", +"ac001725": "Goldic()", +"ac00c3e6": "teamEndTimestamp()", +"ac01367f": "CryptovoxelsProperty(string,string)", +"ac016a31": "label(bytes12)", +"ac01b83d": "getAllPlayers(uint256)", +"ac0250f7": "memberAt(uint256)", +"ac0287e2": "arrr(uint256[])", +"ac02c601": "TranferETH(address,uint256)", +"ac03f324": "transfer_status()", +"ac045aca": "soldSoulFor(address)", +"ac0496e1": "setItemToken(address)", +"ac04f5a7": "append(address)", +"ac05e0f7": "getBurnRequestUintMap(uint256,string)", +"ac05e15f": "manuallyMintTokens(address,uint256,uint256)", +"ac066073": "startTimePresale()", +"ac06e302": "SetupCrowdsale(uint256,uint256)", +"ac06eb81": "MDIVToken()", +"ac080f48": "getDebrisStatus(bytes32,uint8)", +"ac0840db": "resultsPublishedTime()", +"ac098ce9": "addAnn(string)", +"ac0a04b2": "signToApproveAddTokenData(uint256)", +"ac0a7223": "buyCost()", +"ac0ab476": "transferToContract(address,uint256,bool,bytes)", +"ac0b1786": "MeibangAccumulationAppreciationAllocation(uint256,string,uint8,string)", +"ac0ba9b1": "payUSDCToProvider(address,address,uint256)", +"ac0c103a": "a_palavra(bytes5)", +"ac0c518d": "preSaleTokenSold()", +"ac0ca722": "AutoreleaseTriggered()", +"ac0db69d": "Log(uint8)", +"ac0eeeb3": "showGuessIds(uint256)", +"ac0f3865": "LogTokensWithdrawn(address,uint256)", +"ac0f90e3": "checkCrowdsaleState(uint256)", +"ac0fdae5": "Record(address,string)", +"ac110d8e": "Take()", +"ac12319d": "adminPayout(uint256)", +"ac128f4f": "roundResults(uint256)", +"ac12bf92": "setAdminStatus(address,uint256)", +"ac12f3e9": "partner1_voted_update_prenup()", +"ac132dc3": "ProtectedUnlock(address,address,uint256)", +"ac133709": "getChannelParticipantInfo(address,address)", +"ac133d3b": "deploymentCost()", +"ac134c08": "rewards_amount(uint256)", +"ac13d9a6": "setPartnerContracts(address)", +"ac1424fd": "generateNewTicket(address)", +"ac145d80": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ac14c61e": "PresalePool(address,uint256,uint256,uint256)", +"ac151959": "setmaxprice(uint256)", +"ac1559d2": "totalTokensSent()", +"ac155a6c": "MatryxToken()", +"ac171101": "GAGARIN()", +"ac17cba4": "lemonsRemainingToDrop()", +"ac17d506": "getMemberData(address,address)", +"ac185644": "ownerTimeLastMinted()", +"ac1864b8": "treasuryManagers(uint256)", +"ac187542": "forceEndGame()", +"ac18de43": "removeManager(address)", +"ac194b07": "preIcoStartBlock()", +"ac19c726": "setKeepEth(bool)", +"ac1a13fb": "cancelOrder(uint256,uint32,uint32,uint256,string)", +"ac1a182c": "_calcProportion()", +"ac1a386a": "setWalletAddress(address)", +"ac1a7175": "lockUserInfo(address)", +"ac1aaa1a": "calticket(uint256)", +"ac1ad7d1": "tickerQuery()", +"ac1b14ff": "proxyCall(uint256)", +"ac1bc7e8": "updateDetails(string,string)", +"ac1c1443": "listProducts(address)", +"ac1c3d04": "generateToken()", +"ac1cb329": "withdrawBuyAgent()", +"ac1cd994": "seed_coins_vault2()", +"ac1d0609": "updateWhiteList(address,bool)", +"ac1d6fe2": "changeAllocation(int256)", +"ac1deea0": "RateUpdated(uint256,bytes32,uint256)", +"ac1e17df": "addHolder(address)", +"ac1e4734": "ORCA()", +"ac1e765b": "checkValidity(string,address,string)", +"ac1f7ca1": "totalFundsAvailable()", +"ac20902e": "NormalizeMoney()", +"ac20e2a0": "TOTAL_TOKENCAP()", +"ac210cc7": "wrapper()", +"ac216ae9": "setCheckBonus(bool)", +"ac218c6d": "addressICOManager()", +"ac21bacd": "TokenPriceChanged(uint256)", +"ac22b970": "_medalFreeze(uint256)", +"ac22cec8": "withdrawGasCost()", +"ac230e52": "getHeroName(uint256)", +"ac232383": "getAyantDroitEconomique_Compte_6()", +"ac246c3e": "TIME_TO_STALEMATE()", +"ac256e1d": "RiekCoin()", +"ac25f266": "add_to_whitelist(address)", +"ac26109e": "lockForOrder(address,uint256)", +"ac267435": "volumeType7()", +"ac270c37": "contractUp()", +"ac280cb9": "MAX_STANDARD_SALE_PACKS()", +"ac281ca6": "recordPayment(uint256,uint256,uint256)", +"ac28240d": "transferBackMANA(address,uint256)", +"ac283f5b": "Error(string,string)", +"ac28838b": "getPerson(bytes32)", +"ac28ff48": "collectableTokenBalance()", +"ac297d21": "vendDisciple(uint256)", +"ac2ac86c": "setSmallCapWhitelistParticipants(address[],uint256[])", +"ac2aefd2": "addPigment(uint256,uint256,uint256,uint256)", +"ac2c8bb5": "getTile(uint16)", +"ac2d456d": "setOracleCallbackGasPrice(uint256)", +"ac2d7ce5": "setNextLotteryTTWTokenId4(uint64)", +"ac2e043d": "whitelistMulti(address[],uint256[],uint256[])", +"ac2e064b": "set_maxCWCsPerSaleLessThan(uint256)", +"ac2e2c65": "JULIAN_ADDRESS()", +"ac2f0074": "polls(uint256)", +"ac307773": "claimFunds()", +"ac30da84": "BountyHunter()", +"ac3120a0": "LogContribution(address,uint256,uint256,uint256,uint256)", +"ac31818d": "Better_Bank_With_Interest()", +"ac328187": "initializeTeamVault(address)", +"ac3314a6": "issueLockedTokens(uint256)", +"ac336f7b": "getCurrentConsensus(string)", +"ac355ed3": "_salesprice()", +"ac35bdb4": "sub_session(string,uint256)", +"ac35caee": "transferWithReference(address,uint256,string)", +"ac360d3c": "TokenWrapper()", +"ac375770": "didWithdraw(address,uint256)", +"ac377553": "fillFromCollateral(uint256)", +"ac38eb07": "tokenIdForHandle(bytes32)", +"ac3910a2": "ballot()", +"ac3c27cf": "resolveDisputeSeller(address,string)", +"ac3c49e0": "getMarketMakerAddressFromToken(address)", +"ac3c9952": "batchTransfer(address,uint256[])", +"ac3cb72c": "addApproval(address,uint256)", +"ac3cdf78": "RANGEEND_10()", +"ac3d057d": "releaseBudget(address,uint256)", +"ac3d5084": "initialFrozenTime()", +"ac3d8558": "setExitStake(uint256)", +"ac3dc451": "TorontoRules(address,address[])", +"ac3dc9aa": "startBlockTimestamp()", +"ac3e6b2f": "testSetNotRetractable()", +"ac3e7d24": "addChainyData(string)", +"ac3fc432": "stampCreatedCount()", +"ac403817": "addresIndex()", +"ac41865a": "getPrice(address,address)", +"ac41b4a5": "SignalingEnabled(address,uint256)", +"ac42c3ec": "maxTokenBetValue()", +"ac42ea7d": "rejectBurnRequest(uint256,string)", +"ac42f301": "getNextForwardUserId()", +"ac42f446": "botPhase()", +"ac440d13": "CardsAccess()", +"ac4501d9": "splitTrade(uint256)", +"ac451185": "getGames(uint256,uint256)", +"ac45185d": "adminStewardship(address[2],uint256[7],uint8,bytes32[2])", +"ac457a9d": "ExposureOpened(bytes32,address,uint256,uint256,uint64,uint64)", +"ac460d66": "setTokensContract(address,address)", +"ac46a451": "OpsAddressChanged(address)", +"ac46fa22": "burnEscrow(uint256,uint256)", +"ac4746ab": "EPOCH_LENGTH()", +"ac4758cc": "Takafuly()", +"ac475e5c": "CheckTimeout()", +"ac476a05": "MarketMaker(address,address,uint256,uint256)", +"ac47981c": "issueCertificate(string,string,string,address,address,string)", +"ac480af9": "updateFirstDeposits(uint256)", +"ac482bff": "resume_PRIVATESALE()", +"ac48bd5a": "ethUSD()", +"ac48fcbc": "testTheMultipliers()", +"ac490b08": "parsha()", +"ac49dd5c": "removeTimelock(address)", +"ac4a743d": "ecoFundSupply()", +"ac4ab3fb": "hasRole(address,bytes32)", +"ac4abae1": "lockReleaseDate()", +"ac4b2bae": "newParameters(int256,uint256,int256,uint256)", +"ac4ba3ea": "initManager(uint256,uint256)", +"ac4bd53a": "currentLeader()", +"ac4bed68": "modifyHorsey(uint256,address,bytes32,uint8,uint8)", +"ac4c25b2": "void()", +"ac4c8bf3": "argCurMax()", +"ac4ce2c6": "setAddress(uint256,address)", +"ac4cfa4c": "calcAmount(address)", +"ac4d2e95": "ownerTokensFreeDay()", +"ac4d8a26": "setRepPriceInAttoEth(uint256)", +"ac4d965c": "notZeroAndNotSender(address)", +"ac4ddd9f": "retrieveTokens(address)", +"ac4df041": "donationClosed()", +"ac4e677c": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32,bool)", +"ac4e73f9": "proposeReverse(string,address)", +"ac4eefc5": "getGoldDataMinted()", +"ac4fb219": "enableLockFlag(bool)", +"ac50713a": "foundingTeamWallets(uint256)", +"ac509050": "getPlayerRoundsKitties(uint256,uint256)", +"ac50a466": "betfortoken()", +"ac50af76": "transferExcessTokensToReserve()", +"ac50b2e5": "getPlayerRoundNumbers(uint256,address)", +"ac51009e": "createBountyTokens()", +"ac51215b": "TokenRegistry(address,int256)", +"ac516951": "setAddressVoteRules(address,address,bool,uint256[5])", +"ac51a36a": "_unpackPetData(uint256)", +"ac51af8e": "transferWithBonus(address,uint256)", +"ac51d3a5": "smileyToken()", +"ac5277a4": "teamSupply6Months()", +"ac552cf2": "getCurrentDukePaid(string)", +"ac5553ce": "phaseDuration()", +"ac5555aa": "initialized(bytes32)", +"ac562666": "freezeCoin()", +"ac566953": "getInfra(uint256)", +"ac56c52b": "makeDealForTwo(string,uint256)", +"ac56f980": "setRealseTime(uint256)", +"ac570411": "getRecipientBalance()", +"ac588536": "delayPayout()", +"ac5895f6": "getSoilHumidityControlLimits(bytes32)", +"ac591e40": "SelectOne(uint256,uint256,uint256,uint256,uint256,string,address)", +"ac592944": "SendPreReserved2()", +"ac59eeeb": "recoverAddressFromWithdrawMessage(uint256,address,uint256,bytes)", +"ac59f0d9": "addToken(address,address,string)", +"ac5aaa5b": "toToteLiquidatorWallet()", +"ac5b3998": "assignLockedBalance(address,uint256)", +"ac5b3dbb": "Michael1011Token()", +"ac5c8535": "storeData(bytes)", +"ac5c867c": "sendCrowdsaleBalance(address,address,uint256)", +"ac5c915f": "burnBonuses()", +"ac5ce03b": "marriageProofDoc()", +"ac5cf934": "usdSeasonAccountRef(uint16,address)", +"ac5cfc3d": "getMsgWaiting(uint256)", +"ac5d2dbf": "typeToken()", +"ac5d51cb": "setAdministrator(address,address,bool)", +"ac5d67e9": "lockAdvisorsTokens()", +"ac5d8745": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256)", +"ac5ddf80": "modify_bool(bool)", +"ac5e7977": "receiverThree()", +"ac5e81a9": "historyPayout(address)", +"ac5ec9ef": "setAcceptPayment(bool)", +"ac5f91a0": "previousMinters()", +"ac6068b5": "isNotExpired()", +"ac60a6cd": "payInvoice(uint256)", +"ac60bbca": "userTokenStats(address,address)", +"ac60c969": "canFirstMint()", +"ac60da79": "TOKEN_SALE3()", +"ac61e92b": "createBet(uint256,uint256,uint256,uint256,bool)", +"ac624f52": "crowdSaleToken()", +"ac62ddb2": "validateMigrationIsPending(string,string)", +"ac62e250": "CertificationSet(string,address,uint256)", +"ac63208d": "SPRToken()", +"ac637c7a": "delegateTo(address)", +"ac64198b": "RSPLT_G()", +"ac6456df": "_betFailure(string,uint256,bool)", +"ac646629": "viewTokenBalance(address,address)", +"ac646756": "pause2()", +"ac656636": "getDepositReceipts(address,int256,uint8)", +"ac65b258": "PresalePool(uint256,address,uint256,uint256)", +"ac66777f": "multiCallTightlyPacked(bytes32[])", +"ac67857e": "ArtsCoin()", +"ac697fb5": "SkySwapToken()", +"ac69c09c": "changeVotingRules(address,uint256)", +"ac6a2b5d": "_withdraw(uint256)", +"ac6a4d6a": "fooInt()", +"ac6a602f": "getCompte_34()", +"ac6af280": "setRates(uint256,uint256)", +"ac6b02c4": "IFCC()", +"ac6b8e00": "transferLock(address,uint256,bool)", +"ac6bc853": "startSpin()", +"ac6c5251": "getWeight(address)", +"ac6d0316": "performUpdateCallPtr()", +"ac6d0fed": "nestedFirst(uint256)", +"ac6d8150": "getPayment(uint256,string)", +"ac6da90d": "qwercoin()", +"ac6e1237": "CrowdsaleEndedSuccessfuly(uint256,uint256)", +"ac6e2db6": "tokenCreationCapOne()", +"ac6ebb28": "CioCoinERC26Token(uint256,string,string,uint256)", +"ac6ee852": "newGanToken(uint256)", +"ac6eead3": "team_token_percentage_total()", +"ac6fe0ed": "Batchdrop(address)", +"ac700665": "getOrdersForBuyer(address)", +"ac700e63": "pauseMigration()", +"ac708f0c": "getProjectedBlockHash(uint256)", +"ac70a1ef": "getTreasures()", +"ac70e6c4": "level_9_percent()", +"ac71045e": "getOffer(address,uint256)", +"ac711cbb": "withdrawEtherAll()", +"ac71abde": "addAccounts(address[])", +"ac72200d": "getMinted()", +"ac72c120": "hasReverse(bytes32)", +"ac72cd7e": "BrokerInt(address)", +"ac73e97e": "lastMiningTime()", +"ac74bcde": "defaultNumberJuror()", +"ac74f2a8": "Bothereum(uint256,string,string)", +"ac767539": "testFailItemStoreNotRegistered()", +"ac76a499": "clientsAverageRating(address)", +"ac76fbf1": "GeoGame()", +"ac7709bc": "setTimedTransfer(uint256,uint256)", +"ac778b8f": "createCertificate(string,string,string)", +"ac77eb8e": "ZingToken()", +"ac781fbe": "TrustTokenERC20(uint256,string,string)", +"ac789e5f": "BlindAuction(uint256,uint256,address)", +"ac78dc16": "payTeam()", +"ac793a60": "createBet(uint256)", +"ac798bd3": "calculateArtCoinSupply()", +"ac798def": "set_sale_arbits_sold(uint256)", +"ac79a4b1": "getCreateMarketCreatorValue()", +"ac7a1b5b": "maxWithdraw()", +"ac7a722e": "updateETHPriceInCents()", +"ac7a95d5": "getNewShroom(uint256)", +"ac7b663a": "_settleInterest()", +"ac7b986f": "lotusWallet75Pct()", +"ac7bb2b4": "removeFromWhiteList(uint8,address)", +"ac7cda53": "changeRegisterBot(address)", +"ac7dce1d": "BsPresale_SNOV(address,address,uint256)", +"ac7e1e0a": "setEtherProceedsAccount(address)", +"ac7f0c48": "calculateWin()", +"ac7f9329": "AUTH_SETMINTAMOUNT()", +"ac7fc263": "multipliers(uint256)", +"ac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", +"ac800b32": "transferCanaryOwnership(address)", +"ac82239f": "enableInvite(string,bytes32)", +"ac824fd9": "SHEX(uint256,string,uint8,string)", +"ac8261c9": "optionProgram()", +"ac828200": "_dlgtRet(uint64)", +"ac833fd9": "test_insert_findWithHintNextUpdateHead()", +"ac838774": "addauction(address,uint256,uint256,uint256,uint256,uint256,string,string)", +"ac8388a5": "callthis()", +"ac83ae55": "GAMEToken()", +"ac83e891": "BokkyPooBahsAutonomousRefundathonFund()", +"ac84ed4f": "TronClone()", +"ac856216": "setNumRewardsForTMEUser()", +"ac860a59": "_signPropertyByAgent(address,address,bytes32)", +"ac8641ee": "updateRefundWalletAddress(address)", +"ac8648a2": "mintFeeTokens(int256,uint256)", +"ac869cd8": "setFrozen(address,bool)", +"ac884902": "setResults(bytes32[])", +"ac8860b9": "ProposalExecutedEvent(uint256)", +"ac88c8d8": "verifyAndLiquidate(address,address,address,uint256,uint256,uint256,uint256)", +"ac88ffb2": "feeWithdrawEthAmount(uint256)", +"ac890c4c": "unsetAllowedMultivest(address,address)", +"ac8a2af0": "updateShareholders(address)", +"ac8a584a": "removeOperator(address)", +"ac8aa236": "batchTransferVIP(address[],uint256[])", +"ac8aea24": "transferUnsoldToken()", +"ac8c5e8e": "buyLong(address[2],uint256[3],uint8,bytes32[3])", +"ac8d6030": "removeRequest(address)", +"ac8d6632": "addMasterNodes(address,uint256,uint256)", +"ac8dc6ea": "_decodeData(bytes)", +"ac8e88c2": "_updateSolvency(uint256)", +"ac8f539b": "emergencyDrain(address,uint256)", +"ac8fa644": "transfer_Same_Amounts_of_assets_to_many_addresses(address[],uint256)", +"ac8fbd09": "UpdatePoolTarget(uint256)", +"ac900c2d": "unregisterSeller(address)", +"ac92f4ae": "calldatacpy(uint256,uint256,uint256)", +"ac92fdb5": "getSaleDate(bytes16,uint256)", +"ac940823": "betOnLowHigh(bool)", +"ac957954": "transferDonations(bytes32,address)", +"ac95a2aa": "_createOriginalPainting(uint256,uint256,uint256)", +"ac95be9b": "testico()", +"ac9630fa": "publishGraduatingClass(string)", +"ac964f21": "numProducts()", +"ac9650d8": "multicall(bytes[])", +"ac9663a6": "approveByC(uint256,string)", +"ac96a0b3": "GYG()", +"ac96c65e": "doCancel(bytes32)", +"ac96f981": "authorizeAccess(address,int256,address)", +"ac978cea": "TeamHOMO()", +"ac979688": "transferAnyERC20TokenToBeneficiary(address,address,uint256)", +"ac97ad89": "getTokensFromAddressReturns(address,address)", +"ac985f0a": "townsSold()", +"ac9873c7": "CanaryV7()", +"ac988bdc": "_getStageIndex()", +"ac991b65": "double_blind_sha256(string,address,address)", +"ac996e7e": "resolvePledging()", +"ac99aa69": "recoverEthers()", +"ac99e0aa": "BitImageToken()", +"ac99f7b7": "_setStages(uint256,int256)", +"ac9a252a": "ownershipTransferred(address)", +"ac9a6515": "testTokenOwnershipAfterFinalize()", +"ac9b5671": "setVerifier(address,bool)", +"ac9b5c30": "getCreateMarketfeePerEthInWeiValue()", +"ac9c3b7a": "TokenTotal()", +"ac9c80af": "seed_additional_eth()", +"ac9cd354": "getTransferInfoCount(address)", +"ac9d7e0a": "raisevote()", +"ac9ef8a1": "changeMultisigs(address,address)", +"ac9f0222": "setState(bool)", +"ac9f2b7b": "callDeposit(address,address,uint256)", +"ac9f9d12": "FACHAINStandardToken(uint256,string,uint8,string)", +"ac9fd2b8": "nextLoanInterestRate(uint256)", +"aca00932": "calculateBaseTimeout()", +"aca15663": "transferToExchangeAddress(address,uint256)", +"aca19256": "_logRoundExtensionVolume(uint256)", +"aca233fd": "one_two(uint8)", +"aca31e61": "setEthPerToken(uint256)", +"aca34c11": "getPoolDetails()", +"aca62a5f": "convertAllOldTokens(uint256,uint256)", +"aca66aec": "DVIP()", +"aca67a8f": "getIsNFTAttached(uint256)", +"aca6bef7": "checkPolicy(uint256)", +"aca6fdf2": "getJobWorkerName(uint256)", +"aca7207a": "changeCoolDownTime(uint256)", +"aca7dcfe": "token_swap_supply()", +"aca7fdd4": "initialFunding(address,address,uint256)", +"aca867b3": "secure(address,uint256)", +"aca8dd6b": "test_threeInvalidEqString()", +"aca8e9dd": "setBillboard(string)", +"acaa78cd": "addTransferrer(address)", +"acaab181": "addSomeGas()", +"acab021c": "getTOS(address)", +"acab3e5d": "PricingStrategy()", +"acabbbc0": "getSlogan(uint64)", +"acabd1b9": "setFee3(uint256)", +"acac0b9f": "setMaxPerExchange(uint256)", +"acac9a9f": "undropped()", +"acad94ae": "humanStandardByteCode()", +"acada0d8": "SUNQToken()", +"acaf0278": "contractuallyOf(address,address)", +"acb02504": "getJobDescription(uint256)", +"acb02f7c": "VotePumpCoin0x()", +"acb09dde": "fechVoteNumForCandidate()", +"acb0bdc3": "isPolicyExist(bytes32)", +"acb10351": "setupDutchExchange(address,address,address,address,address,uint256,uint256)", +"acb1516f": "accreditationMember(address,address)", +"acb1e61f": "transferable(address)", +"acb2ad6f": "transferFee()", +"acb2d607": "TokenBet(address)", +"acb2fe3e": "checkBlackListAddress(address)", +"acb39d30": "tokenCreated()", +"acb3c073": "setSwap(address)", +"acb461df": "tavern(uint256)", +"acb5e570": "DepositClaimed(uint256,address,uint256)", +"acb62d7c": "clearConfig()", +"acb6a6aa": "_generateRandomNumber(bytes32,uint256)", +"acb6c69b": "setTrustedClient(address)", +"acb6ca94": "Nomid()", +"acb6e626": "ImageCoin(uint256,string,string)", +"acb6e9b1": "testControlItemStoreNotRegistered()", +"acb6f75c": "PreIco(uint256,address,uint256)", +"acb748e9": "RuletkaTestIo()", +"acb74e73": "canSaleInfo()", +"acb8726a": "distributeTax(uint256,uint256,uint256,uint256)", +"acb88986": "freeze(address,uint64)", +"acb894d2": "fint256(int256)", +"acb902f6": "secondHighestBid()", +"acb93f36": "ratePerHourInWei()", +"acb9656c": "setLockedTokens(address)", +"acb9d6f6": "getStageandPrice()", +"acbaed04": "TootyrTokenSale()", +"acbb471f": "EthermiumAffiliates(address)", +"acbb5759": "SetAction(address,uint256)", +"acbc272b": "newToken(string,string,uint256)", +"acbc3ff4": "keyFoundation()", +"acbc62ae": "TokitDeployer(address,address)", +"acbcabc0": "pantryT()", +"acbd9563": "buyPatent(uint16)", +"acbdb084": "RequirementChanged(uint256)", +"acbdb72c": "getSecondAdmin()", +"acbdea6c": "canUpdateBackWindowAdjustmentRatio()", +"acbe274d": "this_tablet_name()", +"acbf98a7": "endsWith()", +"acbfbaac": "getPOOL_edit_30()", +"acbfbd9e": "Unlock_Tokens(address)", +"acc02119": "DirectDemocracy()", +"acc05ccc": "AddressProxy()", +"acc0a246": "uint256At(bytes,uint256)", +"acc10f11": "collect(address,uint256,uint256)", +"acc12168": "on_block()", +"acc2508b": "payoutNow()", +"acc32da3": "validateIpfsDoc(address,uint256,bytes)", +"acc3b363": "ContractBHVC()", +"acc3c020": "investorsToWithdrawIter(uint256)", +"acc3e283": "test_insert_empty()", +"acc3e5d9": "deathFactor_ii()", +"acc58d24": "_removeStackholder(address)", +"acc5a0dc": "GetPrize()", +"acc68b2c": "usersRef(address)", +"acc69261": "addCompany(address,uint256)", +"acc79f74": "openMail(uint256)", +"acc7f8a8": "getCurrentDatetime()", +"acc823f8": "getSurname()", +"acc88c0d": "decayedBalanceOf(address,address)", +"acc8cb18": "pushTerm(string)", +"acc907a9": "getWinner(address,uint256)", +"acc9138e": "revealBid(bytes32)", +"acc9383a": "dist_privateSale(address,uint256)", +"acc93c9e": "setBonusThresholds(uint256[],uint256[])", +"acc99bb7": "allUnKycedEth()", +"acca2c24": "getFirmFromAuthority(address)", +"acca92e0": "finalize(uint32,bytes32)", +"accb2677": "createCarsTokens()", +"accb4219": "RISHABHToken(address,address)", +"accbdfd0": "IsDistribRunningFalg_()", +"accc4a61": "setPresaleOpeningClosingTime(uint256,uint256)", +"accd932b": "icoClosedManually()", +"accd962b": "tokensaleContributors(uint256)", +"acce4b10": "crowdsaleTargetReached()", +"accf80a4": "RelaunchedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"accf878a": "ActionPresell(address)", +"accfa48b": "changeRelease18m(address)", +"accfaeba": "LEGAL_EXPENSES_1_TOKENS()", +"acd00a5c": "fillAmount()", +"acd00dc1": "_emitCountryCodeChanged(uint256,uint256,uint256)", +"acd02c30": "disburseToken(address,address[],uint256[])", +"acd04c4c": "_setVersion(uint256)", +"acd105d1": "doomsday()", +"acd19170": "getarg_2()", +"acd1bdb4": "updateMinimumContribution(uint256)", +"acd256db": "setOraclizeBytes(uint256)", +"acd2988c": "setValidBwMarketCaller(address)", +"acd2e875": "refferedBy(address)", +"acd3057a": "jishituihuan(address,uint256)", +"acd3c39f": "frozenAccount(address,bool)", +"acd47b3a": "addAuditOrEvidence(bool,bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"acd47bc3": "COMMUNITY_BOUNTY_STAKE()", +"acd47e97": "TokenPurchase(address,address,uint256,uint256,bool)", +"acd485fe": "Balicoin()", +"acd4bca6": "vanbexTeamSupply()", +"acd4e110": "Amorcoin()", +"acd4e4aa": "SilverFiftyToken()", +"acd590d3": "preSale2Finished()", +"acd5b7b9": "stopAt()", +"acd5fb23": "isZero(int256,string)", +"acd6a40a": "testUntil()", +"acd6f096": "testThrowsIfSaleIsNotTokenController()", +"acd782b1": "setProtectionPrice(uint256)", +"acd78e3a": "getPayIdAndHeld(uint256)", +"acd84e24": "PLN()", +"acd9277f": "market_DeclareForSale(uint256,uint256)", +"acd94ccb": "frozenDaysForICO()", +"acd9930b": "setHoverText(uint256[2])", +"acd9fd65": "fun1(uint256)", +"acda01f6": "setPendingWalletFee(address,uint256)", +"acda28a1": "bacFund()", +"acda3e10": "UpdateEtherPriceNow()", +"acda6737": "TADPOLE_BOOST()", +"acdaa0d2": "payout(uint256[],address[],uint256[])", +"acdba7c2": "contract_num()", +"acdba91f": "setTokenExpectedFee(address,uint256,address)", +"acdc42f3": "failICO()", +"acdd1454": "mint(uint256,string,string,string)", +"acdd9c5c": "SetRegistrationContract(address)", +"acddb63c": "requestMortgage(uint256[6],string,uint256,uint8,bytes32,bytes32)", +"acddbe1c": "someFunction3()", +"acde39d9": "c4cfee()", +"acdeb5b9": "tokenApprovals(uint256)", +"acdec908": "getBetIdAtRound(uint256,uint256)", +"acdf4f18": "buyBack()", +"acdf67b3": "blockWithdrawBegin()", +"acdf7362": "setLock(address,address,uint256,uint256)", +"acdfa0ac": "acceptNameTranfer()", +"acdfb350": "hariKari()", +"ace1ed07": "get_creator()", +"ace1fab1": "withdrawReserve()", +"ace237f5": "pep()", +"ace30883": "absMinFee()", +"ace36da2": "setChain(address,address,address)", +"ace4283b": "getSecondsToExpiration()", +"ace45552": "endICOStage6()", +"ace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", +"ace523c4": "createReferendum(string,string,uint256,uint256)", +"ace80e0d": "bytesMemoryArray()", +"aceaa365": "_creditTo(address,uint256)", +"aceb87e1": "getUserBio(string)", +"acec0e1d": "setconf(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"acec338a": "setActive(bool)", +"acec460f": "tokenDataValue(uint256,uint256)", +"acec488d": "setAnnouncement(string)", +"aced1661": "keeper()", +"aced5935": "getConfig(address,string)", +"acedc33e": "setDecrementOpenInterest(bool)", +"acee57e1": "airDropPayableMoney()", +"aceecbc8": "disableSelling()", +"acef193e": "FundingCompleted(uint256,uint256)", +"acef6037": "transferToAddress(address,uint256)", +"acefb7bd": "JudgmentCoin()", +"acefd330": "createRandomNumber(uint256)", +"acf0dd57": "getRegionUrl(uint256)", +"acf197b1": "IcoRunnedManually()", +"acf1b06a": "systemCreatedCount()", +"acf1e9fa": "buyNinja(address)", +"acf2f478": "changeTradableFciInSession(bool)", +"acf3508e": "_isLatitude(int256)", +"acf36037": "getCountryData(uint256)", +"acf36e53": "addParent(address)", +"acf372ef": "SetMasterWallet(address)", +"acf400b2": "getSellOrdersBlackMarketComplete()", +"acf4280c": "buildDSApprovalDB()", +"acf50f55": "setItemForSale(uint256,uint256)", +"acf555b8": "regReferrers(address[])", +"acf5c689": "setRequiredBlockConfirmations(uint256)", +"acf5cfbf": "Spend(uint64,address,string)", +"acf67746": "getPlayerTeam(address)", +"acf6d918": "ChangeReturn(address,uint256)", +"acf7aea7": "getCountryLimit(uint256)", +"acf7c1d2": "updateJackpotBalance()", +"acf8bf2a": "channelCount()", +"acf94ed5": "fallbackTriggered()", +"acf975d6": "addCycleAddress(address)", +"acf97a65": "redistribute(address[])", +"acfabbe4": "updateCurrentPeriod()", +"acfb153d": "RoundTime()", +"acfb208b": "transferFee(uint16,uint64,address)", +"acfb2d95": "iHaveABiggerDick(string,string)", +"acfb4b26": "DIVIUMx2()", +"acfd18c6": "FOUNDATION_ADDRESS()", +"acfd35a0": "distributeSuccessfulCampaignEth(uint256)", +"acfd82f2": "grantOwnership(address)", +"acfdfd1c": "deploy(uint256,string,string,address)", +"acfe27d7": "Slashing(address,uint256,bytes32)", +"acfe711a": "Scientific()", +"acff2fce": "forceNSFW(uint256,bool)", +"acfff377": "rollDice(uint256)", +"ad00129e": "bonusOver100ETH()", +"ad00297a": "payDeposit(address,uint256,bytes)", +"ad003aeb": "setUserNotifications(address,address,bool[],bool,uint8[],uint8)", +"ad009062": "newVitaReward(address)", +"ad0096af": "transferFromWithCustomReserving(address,address,uint256,uint256)", +"ad01ed4c": "s3(bytes1)", +"ad0212df": "capitalNeeded()", +"ad0254a6": "BitGuildWhitelist()", +"ad03261e": "supportRebalance()", +"ad03abc5": "enableRealCap(uint256,uint256)", +"ad044f49": "totalFunded()", +"ad04592e": "owner_deposit()", +"ad04d74d": "buyCoreWithBalance(address,address,uint256)", +"ad0570c7": "setUsernameForAddress(bytes32,address)", +"ad07008f": "icoDiscountPercentageLevel2()", +"ad07220f": "forceTransferBalance(address,address,uint256)", +"ad075684": "TotalPayment()", +"ad0767bd": "RECORDPart()", +"ad076994": "verify(address,address,uint256)", +"ad076bfc": "debug_hash256Double_concat(bytes,bytes,bytes)", +"ad09019d": "oraclize_getNetworkName()", +"ad09202a": "confirmDealCompletionByDoctor(bytes16,bool)", +"ad093409": "getTicketOwner(uint256)", +"ad0a58c8": "checkAndDeclareWinner(uint32)", +"ad0a6cc3": "attackTileForExistingUser(uint16,uint256,bool)", +"ad0af8c8": "MariamTestCoin()", +"ad0b2bec": "redeemWinnings()", +"ad0b38a2": "getAppId(string)", +"ad0b6013": "DEFAULTED_STATUS()", +"ad0bc739": "testConcatMemoryZeroLength()", +"ad0be174": "zHQNumber()", +"ad0c3dff": "icoStartedAt()", +"ad0d3713": "getTittyOwner(uint256)", +"ad0d4c3d": "HaiWang(uint256,string,string)", +"ad0dd79f": "usersWithdrew()", +"ad0e053b": "getPointerOwner(uint8)", +"ad0e13bb": "toB32(bytes,bytes,address)", +"ad0e8bc7": "givepoints(address,uint256)", +"ad0e9053": "set_pauseReturn(bool)", +"ad0f2916": "coinPrice()", +"ad108280": "BECTStandardToken(uint256,string,uint8,string)", +"ad1088e4": "didProve()", +"ad111feb": "DFSToken()", +"ad11cc1d": "claimC1()", +"ad11fe44": "revokeAllowance(address)", +"ad121e33": "fundFounder()", +"ad1288c8": "forkTransferFrom(address,address,address,address,uint256)", +"ad12cc0b": "removeLibrarian(address,address)", +"ad13eb02": "createScanner(uint256)", +"ad150aec": "calculateHeldTokenDistribution()", +"ad156d34": "AllocateBountyAndEcosystemTokens(address)", +"ad166aae": "MyTest(uint256,string,uint8,string)", +"ad180328": "_check(address,address,uint256)", +"ad188be0": "userBetContribution(address)", +"ad1892b2": "sendEthersToRefundAddress(address)", +"ad1896db": "resetElectionPeriod()", +"ad18ad0c": "quote(address,uint256,address)", +"ad1922b0": "setIcoCloseTime(uint256)", +"ad19bd26": "getVoteCommit(uint256,address)", +"ad19e993": "_callSender(bytes32,address,address,address,uint256,bytes,bytes)", +"ad1a17b4": "getPaymentCount(uint256)", +"ad1a38be": "_createNarco(string,string,address)", +"ad1a7d0c": "getBook(bytes32)", +"ad1aa252": "withdrawUnsentTokensForOwner()", +"ad1b1f8b": "settleJackpot()", +"ad1b3909": "coinage()", +"ad1be7c1": "softCapClose()", +"ad1c582a": "divUIntValue(bytes32,uint256)", +"ad1c5d6c": "updateShareCrystal()", +"ad1c61fd": "test(uint256,string)", +"ad1d0dcf": "exodus()", +"ad1def42": "registeredAddress(address)", +"ad1ef61e": "donkeyInvested(address)", +"ad203bd4": "subMonths(uint256,uint256)", +"ad207feb": "ethTeamWallet()", +"ad217ae5": "stats(uint256)", +"ad220cf1": "currentPrivateSale()", +"ad221195": "transferTokenFrom(address,address,uint256)", +"ad221321": "withdrawTimes(address)", +"ad22453c": "BRANDS()", +"ad226122": "presaleFallBack(uint256)", +"ad22980a": "TopChainCoinMintFinished()", +"ad22ccc0": "committeeJoinVoters(address,address)", +"ad22d4a2": "get_last_item_in_state(bytes32)", +"ad2334a0": "spinnerModulus()", +"ad2377c1": "pausePriceRaise()", +"ad23ad92": "AfriHealthCoin()", +"ad23de63": "isAddressWhiteListed(address)", +"ad23e038": "HelloToken(uint256,string,uint8,string)", +"ad23fdc3": "deCompose(string)", +"ad23fde0": "breed(uint256[2],uint256[2],uint256)", +"ad247dd9": "permissonedAccounts(address)", +"ad24d512": "TECHNOBITToken()", +"ad25ce57": "bidOnSaleAuction(uint256)", +"ad266df8": "ARA(uint256,string,uint8,string)", +"ad26f6e1": "SetParticipantName(address,address,string)", +"ad27b14d": "cancelBet(bytes16)", +"ad28ff88": "blacklist(address,address)", +"ad295b26": "getDepositInstanceCount()", +"ad29ca6d": "eosCrowdsaleAddress()", +"ad29ddaa": "removeRound(uint256)", +"ad2a0a7b": "_changeEternalStorageContractAddress(address)", +"ad2a39d6": "secondStartTime()", +"ad2a9c5f": "MIN_CARD_PRICE()", +"ad2af501": "Games(uint256,string,uint8,string)", +"ad2b14d1": "changeCrowdsale(address)", +"ad2b1e03": "privilegedBurn(uint256)", +"ad2b260a": "decimalNum()", +"ad2b3037": "getLeaves()", +"ad2ba325": "splitStr2Int(string,string)", +"ad2bb1b3": "blockAddress(address)", +"ad2bbf9c": "_redeemByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ad2c1632": "ArenaplayToken()", +"ad2d10b2": "initializeReservedVault(address)", +"ad2da239": "calculateVote(uint256,uint256,uint256)", +"ad2daa48": "roundTimeRemaining()", +"ad2de16d": "acceptTxTask(uint256)", +"ad2e1d49": "getHeirachy(bytes32)", +"ad2e6aff": "WithdrawEarnings()", +"ad2e8c9b": "getDuration()", +"ad2ec740": "PRICE_9()", +"ad2fad33": "setSpawnProxy(uint32,int256,address)", +"ad2fea7c": "removeMinter(int256,address)", +"ad317c23": "mileagePointPrice()", +"ad319bab": "TokenERC20AC(uint256,string,string)", +"ad31e845": "_tag(uint256,string)", +"ad3286fc": "AddToken(address,uint8)", +"ad32a40f": "Fund(address,address,address,address,address)", +"ad32f925": "makeAvailable()", +"ad3335b5": "setINNBCTokenAddress(address)", +"ad33513f": "refundAmount()", +"ad33e21d": "getReferralBonus(uint256)", +"ad3429be": "developmentTokens()", +"ad344465": "AccessorySeriesCollection(uint8)", +"ad344bbe": "sgtExchanger()", +"ad35bdb0": "extraSupply()", +"ad35dcd3": "AGAVE(string,string)", +"ad36c593": "getOwnerOfCampaign(bytes32)", +"ad3704c5": "getApplicantsLength()", +"ad374f5b": "enableClaimTokens(bool)", +"ad376113": "addDevReward(uint256)", +"ad379089": "canSettle(bytes32)", +"ad37c41b": "blackListEnabled()", +"ad381cb7": "getCurrentRoundIsActive()", +"ad38867e": "checkWinner()", +"ad388896": "setWinnerAndEndEvent(bytes32,bool,string)", +"ad389d5d": "isValidAdversary(uint8,uint8)", +"ad38bf22": "updateBlacklister(address)", +"ad38d6f1": "whitelistWallet()", +"ad38fba5": "transferEthTo(address,uint256)", +"ad395939": "withdrawContributorPot()", +"ad395ad3": "removeFromContractIDArray(address)", +"ad3a05ca": "BlackToken()", +"ad3b1b47": "withdrawFees(address,uint256)", +"ad3bf1f1": "refundPeriodOver()", +"ad3c0b9d": "CROWDSALE_DURATION()", +"ad3c8b22": "addSkipPrice(uint256)", +"ad3c901c": "getPendingById(uint256)", +"ad3cd883": "changeContractName(string)", +"ad3cf852": "redeemLuckPool()", +"ad3de14c": "getMap()", +"ad3e0ed2": "getAffiliateSenderPosAmount(uint256)", +"ad3eb71f": "plcrFactory()", +"ad3ef46d": "RealstateOceanProject1(address)", +"ad3f972e": "deleteChild(address,address)", +"ad3ff3c1": "houseAlwaysWins()", +"ad401842": "setDateMainStart(uint256)", +"ad40256f": "reclaimableOwner()", +"ad418e66": "strategicReserveSupply()", +"ad41b628": "MHCToken()", +"ad447a19": "getBalanceDB()", +"ad449198": "returnBorrower(uint256)", +"ad4493fe": "checkPoint(uint8,int256,uint16)", +"ad44c205": "Nudge()", +"ad44e73b": "unwhitelist(address[])", +"ad450b72": "SupplyLimitChanged(uint256,uint256)", +"ad452254": "BsToken_SNOV()", +"ad459a1c": "CurrentAirdropped()", +"ad468489": "register(bytes32,address,bytes32,bytes32,bytes32)", +"ad470886": "token_approve(address,address,uint256)", +"ad4749f4": "setupPeriodForFirstStep(uint256,uint256)", +"ad474b9a": "Engraved(address,string,string,bytes32)", +"ad475113": "PRESALE_BONUS_VOTING()", +"ad478dda": "investmentUpperBounds()", +"ad483188": "setCCH_edit_12(string)", +"ad48636a": "secondBonusSalesEnds()", +"ad487790": "reveal(bytes32,address)", +"ad487f3c": "LogFreeze()", +"ad48d611": "marketToken()", +"ad4946ee": "removeAddressFromNonzeroBalancesArray(uint256,address)", +"ad498ce1": "RATE_NO_DISCOUNT()", +"ad49f595": "checkAddress(address,address)", +"ad4a7bd9": "lockTokensForAs(address,address,address,address,address,address,address,address,address)", +"ad4ac3de": "LoveCoin()", +"ad4b243b": "buyOneMinuteLottery(uint256,uint8[],address,bool)", +"ad4b2ca4": "batchdrop(address[],uint256[])", +"ad4b558c": "monsterIndexToOwner(uint256)", +"ad4c05f1": "setResourceForStar(uint8[5],uint16[5],uint32[5])", +"ad4cd0d6": "stdlib()", +"ad4dde0f": "transferOwnershipOfItemsStorage(address)", +"ad4e2f77": "addDragon(address,uint256,uint256)", +"ad4e39f3": "getLendingItemInfo(address,uint256)", +"ad4f0e3a": "DevsmartCoinFive()", +"ad50039f": "setTechBonus2(uint256,string)", +"ad5022a5": "Votes()", +"ad506098": "WowMusicDiamondToken(address)", +"ad509c1d": "sendToken(address[],address[],uint256[])", +"ad50dd1f": "endPrivateSaleStage()", +"ad53322b": "donationAmountInWei(address)", +"ad534d9c": "logCoinAgeRecord(address,address,uint256,bool)", +"ad53be1d": "priceLeRT()", +"ad544dcb": "testSetNotUpdatable()", +"ad549e53": "set_participant_arbits_kyc_whitelist(address,bool)", +"ad5511a5": "_setTokenSeed(uint256,string)", +"ad559fd6": "setHigherPricePercentage(uint256)", +"ad562965": "getReceiptRoot(bytes32)", +"ad5632e6": "storeAuthenticity(string)", +"ad5688d8": "setCountryPicture(uint256,string)", +"ad5780af": "clearDNSZone(bytes32)", +"ad57a2df": "unrestrict()", +"ad57ceb4": "ethForMilestone()", +"ad58a7d2": "getSettingState(uint256)", +"ad59ffd1": "maxAmountBonus()", +"ad5a157d": "promoMoney()", +"ad5a8f29": "canEnterPool(address,uint256)", +"ad5b7189": "hasBooster(address)", +"ad5b896e": "refundMany(address[],uint256[])", +"ad5bfcb5": "getServiceStatByAddr(uint64,address)", +"ad5c1687": "offchainUpload(address[],uint256[])", +"ad5c4648": "WETH()", +"ad5c613d": "purchase(bytes)", +"ad5cd9e7": "startSTO()", +"ad5d2862": "getWinnings(uint256)", +"ad5d638d": "minFundedValue()", +"ad5dabb0": "assertYoungerBalance(uint256,uint256)", +"ad5dabca": "QatarCoin()", +"ad5e2cd0": "addPresale(address,uint256)", +"ad5e46cb": "hasError()", +"ad5f3433": "sumHardCapICOStage4()", +"ad5fb2b1": "seedVerification(string)", +"ad60540b": "MoccaCoin()", +"ad605729": "getParticipantCount()", +"ad606c72": "devWithdraw()", +"ad60fb73": "mint(string,uint8,string)", +"ad615f40": "getCrosCounter()", +"ad621b14": "BaoMaToken()", +"ad622d0e": "addDoctors(uint256,uint256,string)", +"ad62bda5": "setRoundLength(uint32)", +"ad62f1ca": "mintFor(uint256,address)", +"ad631abe": "BLO_PER_WEI()", +"ad63a469": "totalUsedTokens()", +"ad64ae4b": "registerModule(address)", +"ad64fa5c": "MINBET_forORACLIZE()", +"ad652cdd": "InternetMarket()", +"ad655998": "addAuthorizedInsertAgent(address)", +"ad65d76d": "ethToTokenTransferInput(uint256,uint256,address)", +"ad66de24": "impl_lock4Dividend(address,uint256)", +"ad66e52a": "etherBalance()", +"ad677d0b": "join(bytes32)", +"ad686011": "returnPurchase(address)", +"ad68ebf7": "migrate(address,uint256)", +"ad69644b": "setBestAngel(uint32)", +"ad69caa5": "expMod(uint256,uint256,uint256)", +"ad6a0546": "creatorsLocked()", +"ad6ad449": "HodlerMining()", +"ad6aefbb": "BeatTokenPreIcoStarted()", +"ad6b2c90": "getListTokens(address,uint256,uint256,uint256)", +"ad6b5d04": "amountClaimed()", +"ad6b9499": "getContactRecord(string)", +"ad6c8762": "paymentChannelsCount()", +"ad6cd14e": "EthLongExercised(address[2],uint256[8],uint256,uint256)", +"ad6d9b89": "bytetherOVAddress()", +"ad6dfe5c": "getPRewardId(address,uint256)", +"ad6e155e": "setContractPreICO(address)", +"ad6eba9f": "getSingleSubjectByAddress(address,uint256)", +"ad6eff22": "getUserType(address,address)", +"ad6f80ff": "getSignatures()", +"ad70810a": "getChainDrawings(uint256)", +"ad70924a": "stablize()", +"ad70fbc8": "QuickChain()", +"ad714012": "calculateMatchOutcomesForRoundId(int256)", +"ad71766e": "getWeiSoldToday(address)", +"ad717e8c": "_oraclizeQueueRound()", +"ad71a1fd": "MAX_SUPPLY_OF_TOKEN()", +"ad71c687": "registerSystem(string,string,string,string)", +"ad71ec8a": "YiWenTest(uint256,string,string)", +"ad7222c1": "tokensAmountFrom(uint256)", +"ad723faa": "MChip()", +"ad72dce9": "buildFactory(uint8,uint256)", +"ad731de7": "createPromoCollectible(uint256,address,uint256)", +"ad732eea": "send(bytes20[])", +"ad738845": "payVATToGovernment(uint256,uint8)", +"ad7411e1": "CreateNertia(address,uint256)", +"ad7430cc": "RECEIVER()", +"ad74f9bc": "calculateCurrentPrice(uint256)", +"ad7554d9": "setDoubleRewardEndTime(uint64)", +"ad76325f": "finishProposalVoting(uint256)", +"ad7639fe": "TokenPurchase(address,address,uint256,uint256,string)", +"ad76423e": "DelphiToken()", +"ad764780": "OpenController(address)", +"ad7738b6": "MAX_TOTAL_ADOPTED_AXIES()", +"ad78dc8e": "totalWannaBuyAmount()", +"ad78f31a": "ticketStringFromAddressBytes(bytes32,address)", +"ad796b5d": "TOKEN_SUPPLY_AIR()", +"ad79c927": "TokenSwap(address,address,address)", +"ad7a14e1": "tokenRemainPublicSale()", +"ad7a5ff9": "autoDistributionViaETHContributions()", +"ad7a672f": "totalBalance()", +"ad7b09c5": "InitIcoController(address)", +"ad7b6884": "editContributors(address[],uint256[],uint256[])", +"ad7b6cb5": "bountySEEDSinWei(address[],uint256)", +"ad7bafc7": "mint(int256,address,uint256,uint256)", +"ad7bfd2d": "Cashchain()", +"ad7c66d0": "sellAllMilk()", +"ad7d59fc": "checkPlace()", +"ad7df080": "consul()", +"ad7e01c8": "wolkGenesis(uint256,uint256,uint256,address,address)", +"ad7e262c": "hasEmployerMinRatingsCount(address,address,uint256)", +"ad7e74f9": "addJobSkill(uint32,bytes32)", +"ad7e7cfc": "UpdateMaintenance(bool)", +"ad7ead58": "walletLock()", +"ad7eb560": "block5()", +"ad7ed3c2": "executeLottery(address)", +"ad7ed923": "ElepigToken()", +"ad7eee9f": "updateInt256s(bytes32[],int256[])", +"ad7f02b5": "balanceOf(address[16],address)", +"ad7f401b": "creatorInited()", +"ad7f9d76": "getInvestorBuyers()", +"ad7fa43c": "settleFeeSecondPart(address,uint256)", +"ad7fadc5": "buy(address,address)", +"ad7fff7c": "hasWorks(bytes32)", +"ad8088a5": "XdacToken()", +"ad80a7b4": "totalUndistributedDividends()", +"ad80ef94": "tokenExchanges(uint256)", +"ad810fe5": "holderIndex(uint256)", +"ad818071": "showStats()", +"ad81cd90": "villagesSold()", +"ad81d6f3": "createDefaultLinglongCat(uint256,uint256,uint256,address,uint256,uint256)", +"ad81f3be": "Barneys4HackerSpaceToken()", +"ad82ae61": "internalDoubleTransfer(address,address,uint256,address,uint256)", +"ad82dcac": "testBlockhashCorrectFee()", +"ad838107": "_checkDestination(address,address,uint256,bytes)", +"ad83bfce": "GetOwner(string)", +"ad845d2d": "toBytes()", +"ad84e1be": "createTokenContract(address)", +"ad84e2a6": "getCrab(uint256)", +"ad84eaab": "minimumPurchaseAmount()", +"ad869e1a": "_batch3_icosaleEndTimestamp()", +"ad86c10d": "GamingCoin(string,string,uint8)", +"ad86ee0b": "passOnContract()", +"ad8718c2": "Create(uint256,uint256,uint32)", +"ad8733ca": "multisend(address,address[],uint256[])", +"ad879a46": "cancelBetByA(uint256)", +"ad886326": "_isSignedOwner(bytes32)", +"ad889f03": "USER_TIMEOUT()", +"ad88d8a5": "try_pay(address,bytes12)", +"ad88f53e": "setFirstStageEndsAt(uint256)", +"ad89e64b": "_updateLandData(int256,int256,string)", +"ad8a9c8e": "ownerSetOwner(address)", +"ad8ae3ae": "poke(address,bytes32)", +"ad8b4698": "COMETUBU()", +"ad8b6657": "_createDrone(address,uint256,bool,bool)", +"ad8c3cd2": "setTank(address)", +"ad8ce06b": "gasPerTx(bytes4)", +"ad8d36cb": "CCH_EDIT_2()", +"ad8d5f48": "exec(address,bytes,uint256)", +"ad8ead69": "createTeam(string,uint256)", +"ad8ed335": "__proxy(address)", +"ad8f5008": "strike()", +"ad8f905d": "PoolPrize(uint8,uint8,uint256,uint256)", +"ad8fccf3": "freezeMulti(address[],bytes32[],uint256[],uint256[],uint256[])", +"ad906661": "add_to_ico()", +"ad913633": "getOriginalOwner()", +"ad9171df": "getRemainingLimit(address,address)", +"ad92e46c": "getNumBettings()", +"ad93640f": "TRANSFER_PROXY_V2()", +"ad94d901": "ownsAll(address,uint256[])", +"ad9657f4": "createCoin(uint16,string)", +"ad966a03": "_bytes32ToString(bytes32)", +"ad973d74": "addCustomer(address)", +"ad976c3e": "setData_24(string)", +"ad979417": "setPoolName(string,uint256)", +"ad98ebaf": "ProjectManager()", +"ad994621": "answerDeliveryChallenge(address[2],uint64,bytes32[],uint256[],uint256[2],uint256[2],uint256,bytes32[3],uint8,bytes32[])", +"ad9a9f17": "SINGLE_BLOCK_LEN()", +"ad9abf32": "payDividends(uint256,uint256,uint256)", +"ad9ac1bc": "addToAllocationList(address,uint256)", +"ad9b4fc5": "Win(address,uint8,uint256,bytes32,bytes32,uint256,uint256)", +"ad9b8024": "price(address,uint256)", +"ad9bdebb": "isReleasable()", +"ad9c280f": "setLoveUrl(string)", +"ad9d4ba3": "depositEth(address)", +"ad9df055": "adminClaimAirdrop(address)", +"ad9e3e85": "My2Token()", +"ad9ec17e": "setGreyToken()", +"ad9f20a6": "MIN_PRICE()", +"ad9f9a68": "withdraw_unclaimed_balance(uint256)", +"ad9fb75e": "teamDate()", +"ada0114c": "Firstsale()", +"ada018e1": "setBurnFeeAbs(uint256)", +"ada0618a": "CATSPACE()", +"ada06dac": "tokenSaleCosts()", +"ada14698": "killSwitch()", +"ada199dd": "setFoundersTokensPercent(uint256)", +"ada1a34b": "resetVoteKindnessEvery()", +"ada1a8f7": "VUP_PER_ETH_ICO_TIER2_RATE()", +"ada1b74e": "finalTokensIssueTime()", +"ada1f3ad": "ReferralContract(address,address,address)", +"ada24dfc": "KeberuntunganAcak()", +"ada2cced": "getNumberSuppliers()", +"ada44092": "addClient(bytes32)", +"ada4c022": "getAvailableWinnings(address,address)", +"ada5ba01": "getNodeIndexId(bytes32)", +"ada5cf63": "initializedBlock()", +"ada636ce": "compareStages(string,string)", +"ada65728": "Funding_Setting_funding_time_end()", +"ada69935": "PonicsToken(string,string,uint8,uint256)", +"ada6b1d9": "collectedCent()", +"ada6e537": "AuctusBountyDistribution()", +"ada7061b": "add_hard_limit(uint256)", +"ada791f9": "Airdrop(address,uint256,uint256,address)", +"ada8938f": "moedaToken()", +"ada8a7d5": "presaleTotalNumberTokenSold()", +"ada8cfcd": "removeUint256s(bytes32[])", +"ada8e5ef": "IsCanAllotAward()", +"ada993ad": "Airdrop(address,uint256,uint256)", +"adaa19cc": "TGMtoken()", +"adaa3c73": "enableBets()", +"adaa730e": "RollDice(address,uint256,uint256,uint256)", +"adaaa1e1": "addThing(bytes32,string,bytes32,string)", +"adaabaaa": "bonusEndDate()", +"adabc7f8": "changeTransferStep(uint8)", +"adacb0fa": "CloseChannel(bytes32,uint8,bytes32,bytes32,uint256)", +"adaccd74": "getNickname(address)", +"adad1cb1": "VisperNetwork()", +"adad4873": "distributePresale(address[],uint256[])", +"adad6d50": "KujiraFund()", +"adad9c4e": "increaseMaxCap(uint256)", +"adadb11f": "setJotter(address)", +"adadc77f": "unown()", +"adae08dd": "createItem(uint256,uint256)", +"adaea0b9": "fund(address,address,bool)", +"adaf28d1": "whichPeriod(address,uint256)", +"adaf7c84": "PreICOStartTime()", +"adaf8c79": "chargeOn(address,uint256)", +"adb187bb": "validRequest(bytes32[],bytes5,address)", +"adb1ad42": "HelloGoldToken(address)", +"adb1cd73": "getUnpaid()", +"adb1f640": "getScore(uint256,bytes32)", +"adb27ded": "tokenBonusTimes(uint256)", +"adb2e02f": "internalRegisterCert(bytes32,bytes,uint256)", +"adb37277": "setWebsiteUrl(string)", +"adb3a3a6": "deadlineToFreedTeamPool()", +"adb42139": "totalCrowdsale()", +"adb44a32": "updateUint256(bytes32,uint256)", +"adb4af3e": "getLatestUpdate()", +"adb4d990": "assigned()", +"adb506a6": "FACTOR_5()", +"adb5735c": "withdrawFor(address,address)", +"adb5777c": "getDrawBlockNumberByWinner(address)", +"adb5a4f1": "ListReservePairs(address,address,address,bool)", +"adb5a54d": "eccVerify(bytes32,uint8,bytes32,bytes32)", +"adb5da34": "_getClientPaidUpTo(address)", +"adb610a3": "currentNonce()", +"adb67c41": "XiongDiLianToken(address,address)", +"adb6859d": "directorTransferShareRequired()", +"adb69560": "createController()", +"adb6e8f5": "GetDislikeCount()", +"adb6f63f": "commitments(address,address)", +"adb746dc": "bltOwned()", +"adb77576": "etherLeaked(uint256)", +"adb8249e": "increaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", +"adb848df": "NZD_Omnidollar()", +"adb88cb9": "totalSupplyIco()", +"adb9066e": "COLDITION()", +"adba54e0": "commandPercent()", +"adbc9bed": "getRestWhite(uint256,uint256)", +"adbd9753": "issuingTokenOwner()", +"adbda5a8": "voteToKickoffNewFiscalYear()", +"adbde797": "updateTrustRankAfterStoryExpiry(bytes12,bytes12[])", +"adbe2f6f": "abortive(uint256)", +"adbefffe": "getAddressBetsForEvent(bytes32,address)", +"adbf29fd": "getPlayerDataForGame(uint256,address)", +"adbf54b7": "initialBalanceForMarketingCampaign()", +"adc02a64": "addAsset(string,address)", +"adc042bf": "mint(int256,uint128)", +"adc06ccd": "batchDoubleBalances(address[])", +"adc128eb": "Today()", +"adc1463a": "ZLCC()", +"adc1b956": "lastClaimed()", +"adc1db89": "SpaceKIMToken()", +"adc1f702": "LanaCharleen8()", +"adc20b1c": "lastMint(address)", +"adc23f03": "canClientTerminate(bytes32)", +"adc29028": "calcAndSetPlayerTotalCanAccept(address,uint256)", +"adc2c98a": "edge()", +"adc38b2f": "iterateTurn(uint16)", +"adc4739a": "setWLAddress(address)", +"adc4f654": "ChargeEnergy(uint256)", +"adc54d30": "transferFromPresale(address,uint256)", +"adc6d49d": "_executeTransaction(uint256,address)", +"adc73d46": "getPlayersOfOwner(address)", +"adc7d448": "_clearAttackLog(uint256)", +"adc84a42": "SVEToken()", +"adc87956": "teamVestTokenAllocation()", +"adc8b4cf": "empowerAdmin(address)", +"adc8f941": "addExclusionFromTokenUnlocks(address[])", +"adc9772e": "stake(address,uint256)", +"adca32e7": "setFiscal(uint256,uint256,uint256,bytes32)", +"adca8ac6": "addToTransferWhiteList(address,address)", +"adcaea0a": "simulated_snt(address)", +"adcb0993": "LILE()", +"adcccb6f": "Obirum()", +"adcd2632": "saleTeamAddress()", +"adcd4aaf": "sendNegativeWhuffies(address,string)", +"adcd905b": "setListener(address)", +"adcde05f": "averageKimSalePrice()", +"adce1c5f": "ensResolver()", +"adce80d5": "mStopped()", +"adcf4831": "registerAuditOutcome(address,bytes32,bool)", +"adcf59ee": "isOwnerOrOps(address)", +"adcf780a": "disallowTransferBetweenUsers()", +"add052b4": "getStateFunding()", +"add08f87": "coinbaseAmount()", +"add1cbc5": "TOKEN_TRANSFER_PROXY_CONTRACT()", +"add2af69": "releaseLockedTokensByIndex(address,uint256)", +"add37100": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address)", +"add3bf39": "manualTransferTokensToInternal(address,uint256,uint256,uint256)", +"add3fa39": "sharing_confirmed()", +"add40ced": "getKeyID(bytes20,uint8)", +"add43c59": "EtherTopDog()", +"add466a4": "chfCentsPerTokenWhileBonus()", +"add4bfb0": "createDragon(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint16,uint16)", +"add4c784": "getResult(bytes32)", +"add54303": "setBlock(uint256,uint256,string)", +"add5eb02": "setAdminVariables(uint256,uint256,uint256,uint256)", +"add68daf": "amountOfBidders(uint256)", +"add7690b": "period0End()", +"add769a3": "POOToken()", +"add82871": "strEqual(string,string)", +"add84df3": "changeGoal(uint256)", +"add94f25": "IDAP(address,address,address)", +"add98c70": "dispute(bytes32)", +"adda1d4d": "receiveListing(bytes32,uint256,bool,address,uint256,uint256)", +"adda8cf4": "Propvesta()", +"addace62": "getYesVotes()", +"addad094": "VLOGS()", +"addb246b": "MIN_SITE_ID()", +"addb51ff": "monsterCreator()", +"addd5099": "oracles(address)", +"addd7020": "minWei()", +"adddbacb": "tokenSellCap()", +"adde36bb": "betEven()", +"adde61ef": "_isUpdateAuthorized(address,uint256)", +"added436": "sendFromFund(uint256,address)", +"addf0813": "withdrawERC20Balance(uint256)", +"ade05b35": "commissionType()", +"ade077e3": "Ecoin()", +"ade0e93e": "withdrawals()", +"ade2f939": "lookupAllSince(uint256)", +"ade342ab": "takeShitcoin(address)", +"ade4637a": "transferFrozen()", +"ade53c4e": "GenChipsLevel(uint256,bool)", +"ade5a328": "YYXToken()", +"ade5e07d": "test_1_validOwner_accessRestriction()", +"ade60e9a": "modifyOwner()", +"ade62d6f": "withdrawCommunityFunds()", +"ade645fa": "bonusPhase2()", +"ade6e2aa": "expiryTimestamp()", +"ade716e5": "activatedArbitrationTokens(address)", +"ade7a3ad": "totalParticipationAmount()", +"ade7dd7b": "storeInvestment(address,uint256)", +"adeaa851": "getTotalPrize()", +"adeb8dec": "setLocks(address[],uint256[])", +"adeba3a5": "payWithdraw(address)", +"adebf6f2": "isFungible(uint256)", +"adec07c7": "setPriceUpdateInterval(uint256)", +"adec3a92": "totalPonziInGame()", +"adeca283": "payeeArray()", +"adedc071": "internalApprove(address,uint256,uint256)", +"adee3f4b": "getCodeType(uint256)", +"adef40db": "disputeJUR(address,uint256,uint256[])", +"adefc37b": "sub(int256,int256)", +"adefd501": "ledMultiSig()", +"adf069ea": "startsWith(string,string)", +"adf07791": "tenant()", +"adf0c351": "add_participant()", +"adf13281": "mineFor(address,bytes32)", +"adf24dec": "setDemurringFee(uint32,uint32)", +"adf272ab": "vest(address,uint256,uint256,bool)", +"adf2cead": "mint(bytes32)", +"adf2d029": "calculateAdminTxHash()", +"adf2ef99": "ReichaCOIN()", +"adf2f978": "getCurrentDragonGirlLotteryNumber()", +"adf403ad": "capitalReserveWallet()", +"adf4285d": "GovernanceAddOwner(address,address)", +"adf46a39": "createContractDank(string)", +"adf4a144": "startRefund()", +"adf4fa09": "addPurchased(address,address,uint256,uint256)", +"adf54e0c": "betOnLowHigh(bool,bool)", +"adf59f99": "query(uint256,string,string)", +"adf5d1cb": "YumeriumToken()", +"adf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", +"adf60404": "THreeDBToken()", +"adf684ac": "ULChain(address,uint256)", +"adf6e486": "unPauseToken()", +"adf70883": "completeUnlockTime()", +"adf74fc9": "distributeELTCMedium(address[])", +"adf8a01b": "emitSkillEvaluated(address,address,uint8,uint256,uint256,uint256)", +"adf8f79d": "LOG_ContractResumed()", +"adf96752": "trade(address[13],uint256[15],uint8[2],bytes32[2],bytes32[2])", +"adf9a754": "forwardFundsToOwner()", +"adf9cd49": "totalWeiCap()", +"adf9ffea": "lockupOf(address)", +"adfa1f0c": "Pinged(string)", +"adfa820a": "deleteBlockState(bytes32)", +"adfa845a": "test_remove_notInList()", +"adfaae32": "lastMinedOn()", +"adfc36a3": "getAssembly(uint256)", +"adfceb9a": "proxyBuy(bytes32,address)", +"adfd5380": "preTgeBonus()", +"adfd7935": "setBridgeNode(address,bool)", +"adfdb75e": "setRedeemRequestLimitInterval(uint256)", +"adfdc12f": "createNewGame(string,string,string,uint256)", +"adfe1190": "components(uint16)", +"adfe6b80": "InvestAdd()", +"adfec5f5": "buy(bytes8)", +"adff2450": "getOuverture_effective()", +"adff5f36": "PanamavsTunisia()", +"adffe4db": "setFundingRules(address,bool,uint256,uint256,uint256,uint256,uint256)", +"adfff41d": "m_Data(address,uint256,uint256)", +"ae0041aa": "signalCount()", +"ae005a87": "ERC777DemoToken(string,string,uint256,uint256,uint8)", +"ae012367": "withdrawTopForTeam(address,uint256)", +"ae014f1d": "getUserNameByWallet(address)", +"ae01a8fb": "toCloseVote()", +"ae01ab47": "setFracoinAuction()", +"ae01c14f": "SendBid()", +"ae01dd06": "noteDesignatedReport()", +"ae01ed8a": "manualWithdrawalFallback(address,uint256)", +"ae024c40": "isTopic(bytes15)", +"ae0250c1": "showPoolNumber(address,address)", +"ae025faa": "newGroup()", +"ae0269aa": "VirtuePokerSale()", +"ae02ee5b": "pack(bytes,address,address,uint8,uint256)", +"ae035846": "END_TIME_SALE()", +"ae0395ad": "setFriendsFingersWallet(address)", +"ae03d6c2": "getIrisProvidersReport(bytes32,address)", +"ae03f754": "GongPanToken()", +"ae040b1d": "get_orderAddress(address,uint256,uint256,uint256)", +"ae041b90": "WRLCrowdsale()", +"ae043336": "dolRate()", +"ae04d45d": "setLockTime(uint256)", +"ae056477": "addInvestorBalance(address,uint256)", +"ae06494e": "createHNtokens(address)", +"ae065737": "tradePreToken(uint256,address,address,uint256,address)", +"ae06c1b7": "setFeePercentage(uint256)", +"ae06dbc0": "dataControlSetFeeAbsMaxGlobal(uint256)", +"ae0755d3": "popTransaction()", +"ae078036": "preICO_tokens()", +"ae08b8b3": "BUXCOINMONEYCONTRACT()", +"ae093eb7": "sendICOTokensBack(uint128)", +"ae0996fc": "getMyEOSKey()", +"ae0a6b28": "signature(string,bytes32)", +"ae0a90b2": "domain_buy_useArina()", +"ae0aba8c": "acceptPayment()", +"ae0b4edd": "cancelSellOrder(address[])", +"ae0b7bdb": "twoWeeks()", +"ae0bbe4d": "approveRecipient(address,bool)", +"ae0be41c": "periodPreITO_hardCapInWei()", +"ae0db13c": "totalBidEth()", +"ae0e5387": "networkReserveFund()", +"ae0e8725": "Checkable()", +"ae0e8f3f": "strategicLockup()", +"ae0eadbf": "isFirstStageTokensMinted()", +"ae0f6166": "subtract(int256)", +"ae101f31": "addStage(uint256,uint256,uint256,uint256)", +"ae104265": "calculatePrice(uint256)", +"ae117f3e": "getFSTBalance()", +"ae11cf73": "isVerfied()", +"ae11ea9b": "transferChild(address,address)", +"ae125f00": "mint(uint256,address,bytes32,bytes32,bytes4)", +"ae1345c4": "CharterCapital()", +"ae136d62": "firstBonusEnds()", +"ae13efe0": "batchFreeze(address[],bool)", +"ae152cf4": "oraclize_query(string,string,uint256)", +"ae154aab": "passOff()", +"ae15eb8e": "getCertificate()", +"ae1616b0": "airdropReserveWallet()", +"ae169a50": "claimReward(uint256)", +"ae180337": "withdrawBaseERC20(address)", +"ae181958": "_setNonlistedUser(address)", +"ae181f84": "passThroughTap(uint256)", +"ae188884": "sendOneEtherToMiner()", +"ae18f5ad": "issueContractAddress()", +"ae190819": "getBS(bytes32)", +"ae1a0b0c": "launchLength()", +"ae1a15e3": "PresaleFundCollector(address,uint256,uint256)", +"ae1a5611": "ratePerEthPhase2()", +"ae1a9a3e": "castToUint(int256)", +"ae1aafb9": "buyPredictForContract(address,uint8)", +"ae1adba2": "calculateStakeGains(uint256)", +"ae1b4beb": "buyFactorPromotion()", +"ae1b6405": "endICOTime()", +"ae1be1e4": "releaseLockedToken()", +"ae1c4062": "stopStage()", +"ae1c9437": "_stringsEqual(string,string)", +"ae1cad3a": "tip(address,string,uint256,string)", +"ae1d12a6": "WhyWhyToken(address)", +"ae1d3043": "teamTimeLock2()", +"ae1d4b4b": "GambleEther()", +"ae1dd78c": "sendEtherManually()", +"ae1e2096": "MAGICCOINERC20(uint256,string,string)", +"ae1e964e": "newOwnershipFeeProposal(uint256,string)", +"ae1f14ca": "mainSale_WeiRaised()", +"ae1f91b7": "updateMinMaxBetCount(uint256,uint256)", +"ae1fb61a": "TokenTransferProxy()", +"ae200c73": "joinGameTeam(bytes32,uint8)", +"ae2022c0": "getUint256Max(int256)", +"ae203146": "getAccountType(address)", +"ae2074c8": "addWhiteListAddress(address,address,uint256)", +"ae20bf15": "claimFreeEggs()", +"ae224633": "videos()", +"ae22c1be": "ShowRelease(address,uint256)", +"ae22e331": "_getCurrentSchellingRound()", +"ae248ced": "deliverETH()", +"ae249f2b": "destroyWhenRoundOver()", +"ae24e328": "tickerQueryData()", +"ae25532e": "getProxyId()", +"ae25753b": "wildcardsHeld(address,uint16)", +"ae25f630": "DownPlayerResult(string,address,uint256,uint256,uint256)", +"ae262114": "crowdSaleDragonPrice()", +"ae263730": "isOperationAllowed()", +"ae26588c": "removeTrustedContractAddress(address)", +"ae277584": "amountToSend()", +"ae27e3c6": "relu_activation(int256)", +"ae28b68c": "safeTransfer(address,uint256,uint256,bytes)", +"ae28e912": "teamTokenAmount()", +"ae2a0ce3": "JustinsToken()", +"ae2b4e16": "getBalanceInRemix(address)", +"ae2b5d3b": "_emitCountryCodeAdded(uint256,uint256,uint256)", +"ae2bd2bd": "clearAuction(address,address,uint256,uint256)", +"ae2c1506": "getRoundNumberOfBets(uint256,uint256)", +"ae2c923c": "OlympusLabsCore(address)", +"ae2cbc91": "Tradable()", +"ae2da5c5": "getLLV_edit_20()", +"ae2df7b3": "setImporterBank()", +"ae2e054c": "closeOrder(uint256,address)", +"ae2e933b": "feePool()", +"ae2f1f6f": "calculatePayerDeposit(uint256)", +"ae307098": "c_MinInvestmentInCents()", +"ae30d35d": "ARK_TROGLOg_1_00()", +"ae3125d9": "showTokenSaleClosingTime()", +"ae319f60": "_updatePurchasingState(uint256)", +"ae31deb9": "burnCrowdsale()", +"ae326221": "setSpawnProxy(uint16,address)", +"ae327322": "cantSetReferrer()", +"ae32ac7e": "TEAM_LOCK_DURATION_PART2()", +"ae32c399": "lastBlock_f1Hash_uint256()", +"ae353131": "BiquToken(uint256,string,string)", +"ae35707d": "sectionForSale(uint256)", +"ae35d21a": "CollectibleBidWithdrawn(uint256,uint256,uint256,address)", +"ae366735": "EQUIPMENT_REWARD_WALLET()", +"ae36c602": "createPromoItem(address,string,uint256)", +"ae36f6f9": "_batch4_rate()", +"ae3783d6": "relayedSet()", +"ae382baa": "GainCard(address,uint32)", +"ae39279f": "sendFee()", +"ae3b2137": "getRoomSetCount(uint256)", +"ae3b748d": "setMinCap(uint256)", +"ae3b94b2": "_minimumTokens()", +"ae3baf4d": "mintableAmount()", +"ae3c697c": "getMyAvailableWine()", +"ae3d27ed": "Token_For_Circulation()", +"ae3d5047": "_changeSymbol(string)", +"ae3d7160": "compareByte(string,string)", +"ae3d81b8": "allowedJurisdictions(bytes32)", +"ae3f4a6c": "test_3_method()", +"ae3f84f3": "proofMultiSig()", +"ae3fc899": "CheckExchange(string)", +"ae404996": "oraclize_query(string,string[3],uint256)", +"ae40f72f": "testAdd()", +"ae41480b": "importEthers(address)", +"ae422c09": "sys()", +"ae42ce85": "update_oracalize()", +"ae436b5e": "getLimitedReporterMarketsCount()", +"ae44dea2": "bytesToUInt(bytes,bytes32)", +"ae44e840": "priceConfirmedOver500()", +"ae4538ce": "walletCompanyReserve()", +"ae457835": "buyTokensFor(address,uint64,uint256,uint8,bytes32,bytes32)", +"ae457dab": "bonusEnds20()", +"ae45850b": "schedulerAddress()", +"ae458ab6": "approve(uint64,address)", +"ae466db7": "withdrawPenaltyTokens()", +"ae46e284": "setPortfolio(uint256,bytes32[],uint8[])", +"ae479a63": "badgeSymbol()", +"ae47a290": "changeMaxBet(uint256)", +"ae487dad": "reset(uint256,uint256,uint256,uint256,uint256,uint256)", +"ae49165a": "getAncestor()", +"ae49a717": "EVNT()", +"ae4a7512": "mintICOTokensFromExternal(address,uint256)", +"ae4a8c88": "claimLoot(uint256,address)", +"ae4aadbb": "showTransferConfigs()", +"ae4ab7ce": "Put_DEDI_gift(address)", +"ae4ac63e": "STANDARD_BUYIN()", +"ae4b1b5b": "proxyStorage()", +"ae4b5cb8": "collectDonations(uint256,address)", +"ae4b76fe": "_createPiranha(string,address,uint256,uint8,uint256,uint8,uint8)", +"ae4c20af": "increaseICOcap(uint256)", +"ae4c5e45": "setStarNewOwner(uint256,address)", +"ae4cc757": "closeEarlyPurchase()", +"ae4d0ff7": "gen0StartingPrice()", +"ae4d1af6": "setup(bytes32,address,address)", +"ae4d42b8": "ptxTail()", +"ae4d503b": "withdrawOtherERC20Balance(uint256,address,address)", +"ae4e7fdf": "isMature()", +"ae4eba1f": "setOldE4(address,address)", +"ae4f1198": "publicationFeeInWei()", +"ae4f1476": "searchSeed()", +"ae4fbdeb": "LastValidated()", +"ae501c75": "LogLotteryResult(uint32,uint8,bytes32,bytes)", +"ae50d660": "setFilletPrice(uint16,uint16,uint8,uint256)", +"ae5103e8": "preSaleFourthPrice()", +"ae516449": "uintCeil(uint256,uint256,uint256)", +"ae51c484": "a(bool)", +"ae51db0d": "VesaStage2PreICO()", +"ae52026f": "icoSoftCap()", +"ae529499": "CurrentARXSupplyInWei()", +"ae530504": "setSetting(string,uint256)", +"ae53d79e": "ICO_PRICE7()", +"ae5409fb": "seedInvestorsReserve()", +"ae55c888": "getData(string)", +"ae55f1af": "artWorkChangeApprove(uint256,uint256,bool)", +"ae56463e": "getPoliceReport(uint256,address)", +"ae56e668": "setUnlockAddress(address,bool)", +"ae5942cd": "deletePermissions(address[])", +"ae59bd5a": "mintManually(address,uint256)", +"ae5a1460": "NewDigitalAsset(address,address)", +"ae5a17a7": "updateCharityAddress(address)", +"ae5a4a7f": "maxBatchAssignment()", +"ae5a9bb4": "operatorTransfer(address,uint256,bytes,bytes)", +"ae5a9d17": "getCompletedTransactions()", +"ae5adac7": "mintInCurrPeriodCount()", +"ae5b2540": "setApp(bytes32,bytes32,address)", +"ae5b6d89": "submitSteak(address,bytes32)", +"ae5c1816": "CreateKittyToken(address,uint256,uint32)", +"ae5c24bd": "getFirstElement()", +"ae5c37fd": "contributionsByIntel(uint256)", +"ae5c3f14": "getVipBrokerNum()", +"ae5c75aa": "getBadgeByKtUserId(uint256)", +"ae5c888d": "month60Unlock()", +"ae5d2cbe": "_getOwnerTokenByIndex(address,uint256)", +"ae5da7a0": "_generateGame(bytes32,bytes32,address,uint256[10])", +"ae5dbd43": "view_get_ResultData()", +"ae5e6cf4": "cancelReservation(uint256)", +"ae5ec2e9": "matching()", +"ae5f502e": "RoundSubmission(uint256)", +"ae601e4d": "IADForGas()", +"ae602223": "standFeeAfter500()", +"ae610b48": "sign(int256)", +"ae61fcda": "isEthernautsStorage()", +"ae6215d8": "getBlockHeight(bytes)", +"ae622c4b": "addToInxWhitelist(address)", +"ae62fd7c": "setCrowdSale(bool)", +"ae639329": "sendTo(address,address,uint256)", +"ae63b517": "ADVISORY_BOARD_TOKENS()", +"ae640923": "playerEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes)", +"ae6439c4": "icoSaleSoftCap()", +"ae6506f9": "getCurrentTierIndex()", +"ae665d5d": "MooguToken()", +"ae66d948": "getWithdrawn(address)", +"ae6751e2": "EmilTestCoin()", +"ae67701f": "ZperPreSale(address,uint256,uint256,uint256)", +"ae67b4c3": "evolveAxie(uint256,uint256)", +"ae68c80a": "AddRocket(uint32,uint64,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint64,uint32)", +"ae68fb83": "creditShareProvision(uint256,uint256)", +"ae69a893": "getHeirCount()", +"ae69ccdc": "GMSToken(uint256,string,uint8,string)", +"ae6a19af": "tokensSoldLimit()", +"ae6a1c30": "setApprovedWallet(address)", +"ae6a2435": "HOST_CUT()", +"ae6a70ee": "_tokenMetadata(uint256)", +"ae6b0792": "paymentManager(string,address,string,uint256,uint256)", +"ae6c0b03": "canWithdrawBond(uint256)", +"ae6caafd": "buyByBot(uint256,uint256,address)", +"ae6d8a52": "viewFourthLotOfClauses()", +"ae6dca72": "_allocate(address,uint256,uint256)", +"ae6e11dc": "terminateTokenLock()", +"ae6e22f1": "totalEther()", +"ae6f1db6": "payableFinneyReceived()", +"ae6f5bd2": "_calResultReturnIsWin(uint256,uint256)", +"ae702ba4": "isSubscriptionActive(bytes32,uint256)", +"ae70609e": "LogResult(uint256,address,uint256,uint256,uint256,int256,uint256,uint256)", +"ae708e7c": "totalConsideredFundedEther()", +"ae71d5da": "initProceeds(address,address)", +"ae721e45": "fetchOrdersForPayerByAdmin(address)", +"ae748575": "CGCM()", +"ae748837": "addTestimony(address)", +"ae75c4f7": "rewardsTokensVault()", +"ae75f9e6": "mock_resetLatestTokenAllocation(address,address)", +"ae76145d": "SEXcoin()", +"ae7635f2": "icoEndUnfrozeTokens()", +"ae764df3": "ICOWallet()", +"ae775b27": "betOnDozen(uint8)", +"ae77a6f4": "goldBalance()", +"ae77c237": "purchase(uint256,address)", +"ae77d51f": "m_chiefOwnerIndexBit()", +"ae788913": "AIHToken()", +"ae788b34": "ILFManagerCandidate()", +"ae799f4a": "TokenERC20(string,string,uint8,uint256)", +"ae7a45ba": "addZethrAddresses(address,address)", +"ae7a833d": "hydroContract()", +"ae7ad3fd": "setUpgradeabilityOwner(address)", +"ae7b0333": "executeOrder(address,uint256,uint256)", +"ae7b1620": "rushTimeChallengeRewardsPercent()", +"ae7b3825": "exchangeForETH(uint256)", +"ae7b6bd9": "getLatitude()", +"ae7b6daa": "numberOfCellsOwnedBy(address,address)", +"ae7c046b": "applyAllPermission(address,address)", +"ae7d00f3": "validationPrice()", +"ae7d0cac": "addShare(address,uint256,uint256)", +"ae7e23cc": "otherCoinsPurchase(bytes32,uint256)", +"ae7ed04c": "getLastBidForCanvas(uint32)", +"ae7f5da4": "lockPeriod2()", +"ae7fa597": "removePrize(uint16,address,uint256)", +"ae7fc1da": "_randMod(uint256,uint256)", +"ae7ffadc": "Bitway()", +"ae813029": "makeBid(uint16,uint256)", +"ae813ebb": "TokenFactoryAirdropCoin()", +"ae815843": "query(uint256,string,string,uint256)", +"ae817dd1": "doSendBounds(bytes32)", +"ae818340": "getProfiles(address[],string[])", +"ae81a54b": "factTeamOf(uint256)", +"ae81f51b": "mintTokens2(address,uint256,uint256)", +"ae8205e3": "insert(bytes32,int256)", +"ae82fcf4": "teamLocked()", +"ae83ed91": "HashBlock()", +"ae8421e1": "done()", +"ae850da9": "getNumberSources(uint256,uint256)", +"ae873405": "AVG_BLOCKS_24H()", +"ae873fa5": "PRESALE_MAX_RAISE()", +"ae87fc4b": "claimStatus()", +"ae87fd06": "gasPriceLimit_()", +"ae882412": "getTotalDivsProduced()", +"ae882cf1": "allowSpecies(uint16,uint16,address)", +"ae896b2e": "TPN()", +"ae89a29e": "maxHolderCount()", +"ae89aeb9": "getEscrowData(uint256)", +"ae8a473d": "_setReserveFactorFresh(uint256)", +"ae8a6833": "InitialSettings()", +"ae8a7180": "setStartOfCrowdsale(uint256)", +"ae8a8690": "createActivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"ae8b9d7b": "autoSolveGame(uint256,uint256,uint256)", +"ae8bce2c": "product1_pot()", +"ae8cdd59": "IBTC(uint256,string,string)", +"ae8dab48": "setUp(address,address,address,address,address,address,address)", +"ae8e2217": "SmartexController()", +"ae8e3b70": "Fin()", +"ae8efe46": "CheckEntity(bytes32)", +"ae8f1d29": "createPermission(bytes32,address[],bytes4[])", +"ae8f2328": "finishcrowdsale()", +"ae8f6489": "createAndBuyAllAmountPayEth(address,address,address,uint256,address)", +"ae9074ff": "internalSuccessOver()", +"ae90b213": "payee()", +"ae90e9f8": "returnToBuyersContinue()", +"ae91b691": "changeRefPercentage(uint256)", +"ae92b204": "getCurrFeeRate()", +"ae93e513": "cancelOfferForCity(uint256)", +"ae94bbf1": "getCarDetails(uint32)", +"ae94e448": "imax(int256,int256)", +"ae94ec05": "placeBuyTokenOrder(uint32)", +"ae954790": "Authorizable()", +"ae9569d0": "PLATPriceOracle()", +"ae95a7a4": "TacoToken(address,string,string,uint256,uint256)", +"ae95c24e": "issueMap(address)", +"ae96b094": "VergeDark()", +"ae96bf2c": "TakePot()", +"ae9759ff": "PRICE_MULTIPLIER_ICO2()", +"ae978f08": "getLatestTweet()", +"ae97dde8": "MAX_COMMISSION()", +"ae989d36": "homeTeam()", +"ae99847b": "daylimit(uint256)", +"ae999ece": "reserve(string)", +"ae99aa3c": "getMemberInfo(uint256)", +"ae99f03c": "SetAddresses(address[],address[],address[],address[])", +"ae9a0785": "getChannelPostCount(address)", +"ae9a9295": "YKC(uint256,string,uint8,string)", +"ae9aea6d": "maxMintQuantity()", +"ae9b051c": "withdrawSome(uint256)", +"ae9b233f": "PasesLibresSocio(uint16,uint16)", +"ae9c1962": "withdrawCommunityPot()", +"ae9d70b0": "supplyRatePerBlock()", +"ae9dc04c": "offerSketchForSaleToAddress(uint256,uint256,address)", +"ae9f96c7": "weightsApportion(uint256,uint256)", +"aea01c49": "stringToBytes(string,string)", +"aea09e6e": "crowdfundStartTime()", +"aea0e35f": "createMarket()", +"aea13844": "safeGiveByContract(uint256,address)", +"aea1935b": "confirmEndWork(uint256)", +"aea197fe": "CreateRecipt(string,uint256,string,string,string,string,string,uint256)", +"aea31fc7": "setProof(string,string)", +"aea398da": "paymentWalletAddress()", +"aea3ad8c": "supportKickoffQuorum(uint256)", +"aea40787": "SetOwned()", +"aea43a29": "addMassAddressToWhitelist(address[])", +"aea452ba": "isBinding(uint16)", +"aea48690": "incentivisingEffortsSupply()", +"aea57be4": "resumeIEO()", +"aea5b69f": "solutionInfo(uint256)", +"aea6022c": "change_metadata(uint256,string)", +"aea64763": "stopsale()", +"aea65bf6": "VerifyProof(uint256[],uint256[],uint256[])", +"aea68d6b": "Shakedown0x()", +"aea6e1a4": "buyAnotherDrangon()", +"aea787a2": "showleveldetail(address)", +"aea8126f": "transferMSM(address,uint256)", +"aea8d47c": "getLatestContract(bytes32)", +"aea8dcca": "setTokenInfoMaxTotalImbalanceList(uint256[])", +"aea92852": "getDevIndex(address)", +"aea96513": "returnSecretVoteHash(uint256)", +"aea9b438": "getBuyerInstanceAddress(address)", +"aeaa3091": "getDealerValue(uint8[],uint8)", +"aeaaaa08": "proxyClaimTokens(address)", +"aeaabffe": "UnlockAll()", +"aeab24df": "reinvestDivsWithContract(address)", +"aeac3354": "Deal(address,address,address)", +"aeac529a": "TradingLife()", +"aeac538a": "ClimateCron()", +"aeaca25e": "getTotalJadeProduction()", +"aeacd658": "signProduct(string)", +"aead9e47": "claimAndWithdraw()", +"aeadbe24": "getTotalTokens(address)", +"aeae264b": "BeteventCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"aeaf5a37": "total_land_sold()", +"aeaf7fc1": "updateCandidate(address,bytes32,bytes32)", +"aeb00fda": "_getRacerCar(uint256)", +"aeb1355f": "getH2Amount()", +"aeb26733": "previligedApprove(address,address,uint256)", +"aeb27602": "addHash(string)", +"aeb2ffc1": "getQuery(uint256)", +"aeb37075": "DividendPaid(uint256)", +"aeb3ebd0": "LogContributorsPayout(address,uint256)", +"aeb447ff": "getLevelUpCost(address,address)", +"aeb47e2a": "COMMUNITY_POOL()", +"aeb4f0d3": "RegisterTwo(address,address)", +"aeb58dc5": "setPOOL_edit_15(string)", +"aeb669eb": "getHatchingEggId(address)", +"aeb754e5": "Auction(address,uint256)", +"aeb7614c": "bid(bytes32,bool,int32)", +"aeb7dd80": "_computeCurrentPrice(uint128,uint128,uint40,uint40)", +"aeb817ab": "etcSupply()", +"aeb89f14": "totle()", +"aeb8f966": "mintToken(address,uint256,int256)", +"aeb94f48": "getFreePacifist()", +"aeb9c40e": "isReadyToStart(uint256)", +"aebacd53": "PRE_BONUS()", +"aebad3a4": "getCaptainCount(uint32)", +"aebb2540": "setNewMultisig(address)", +"aebc0310": "updateOdds(uint256,uint256)", +"aebcd2d9": "AddSocialAccount(bytes32,bytes32,bytes32,bytes32)", +"aebd3f96": "receiveToken(address,uint256,address)", +"aebd4fcd": "shopStoreRegister()", +"aebe0224": "CollectibleTransfer(address,address,uint256,uint256)", +"aebe5523": "addTokenWalletInWhitelist(address)", +"aebf1e3d": "computeTokens(uint256)", +"aec02eb5": "ServiceContractResolver(address)", +"aec1914d": "surrender(bytes32)", +"aec1dd81": "updateNonClosingBalanceProof(address,address,bytes32,uint256,bytes32,bytes,bytes)", +"aec1ee7b": "STAT_MAX_VALUE()", +"aec205a5": "contractLaunched()", +"aec26c0e": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,string)", +"aec2f2d9": "first_bonus_duration()", +"aec30dc1": "minWeightPunish()", +"aec318f1": "enableMasterTransfers(bool)", +"aec3ab53": "_futureSupply()", +"aec4e0bb": "numberOfPunksReserved()", +"aec5ab08": "getAllDapps()", +"aec651fb": "getUserTokensByMatch(address,uint32)", +"aec72d8d": "STAGE_3()", +"aec77b63": "returnTokensInPool(address[],uint256[])", +"aec7f5b2": "JoustNum()", +"aec7f6f3": "compoundInterest(address)", +"aec8fae8": "getMemberAtKey(uint256)", +"aec9a987": "claimShare(address,address)", +"aec9c480": "includesSet(bytes32)", +"aecadd53": "grantTeamToken()", +"aecaf4ba": "addMoneyInternal(address,uint256)", +"aecbaaa1": "LogPayout(address,uint256,uint256)", +"aecbb5f1": "winAmount1()", +"aecbf70c": "Kisaan()", +"aeccee75": "_register(address,uint256,address)", +"aecd15e3": "getWithdrawalWallet()", +"aecd1fed": "setupToken(address,address)", +"aecd27fa": "linkCoin(address)", +"aecd46db": "testDepositCanbeWithdrawn()", +"aecdceef": "intToBytes(uint256,uint256)", +"aecef00e": "record(uint256,string)", +"aecf2149": "sendScoreToCustomer(address,uint256)", +"aecfd412": "Group_2()", +"aed214fb": "setBooleanMapValue(string,address,address,bool)", +"aed29d07": "totalRewarded()", +"aed2e7d4": "addGen(uint256)", +"aed339ef": "storeHarvestOperation(bytes32,address,string,string,uint32,uint24,uint16,string)", +"aed362c1": "hasModerator()", +"aed396c6": "setStageBonus(uint256,uint256)", +"aed3ebe4": "TokenBCCO(uint256,string,string)", +"aed4839a": "transferFrom(uint256,address)", +"aed4aab6": "receiveERC20(address,uint256)", +"aed5c011": "payWithMerculet(uint256)", +"aed6512e": "callerAdd(address)", +"aed6d8d4": "GetStuffNum(address,uint32)", +"aed76aa4": "getInvestorDepositAmount(address)", +"aed82a99": "sin_table_lookup(uint256)", +"aed83846": "removeFromPrivateSaleWhitelist(address[])", +"aed89fed": "projectContract()", +"aed8e967": "getEndpoint()", +"aed8f3da": "partsPerBillion(uint256,uint256)", +"aeda10be": "ethselfToken()", +"aeda352b": "hasName(address)", +"aeda852f": "houses(uint256)", +"aedb1c8f": "executeContract()", +"aedb8621": "TMONEY()", +"aedb9eef": "LDXCToken(uint256)", +"aedbbf36": "deleteNote(uint64)", +"aedd18dc": "timeout(address)", +"aedd3acc": "currentSTCPrice()", +"aeddaa02": "DelVer(address,address)", +"aeddab95": "batchUnmount(address,uint256[],uint256)", +"aeddf677": "lockLimit()", +"aede4680": "firstReserveWallet()", +"aede879d": "whatIsMissing()", +"aedf5360": "icoCrowdsaleContract()", +"aee06324": "trickleUp()", +"aee0abaa": "authorizeMany(address[],uint256)", +"aee14460": "getSummary(uint256)", +"aee145f7": "addressReserve()", +"aee1b8a1": "XBStandardToken(uint256,string,uint8,string)", +"aee1d4d3": "blockCreationRate()", +"aee25613": "sendErc20(address,address[],uint256[])", +"aee273f8": "createTokens(address,uint256,address,bool)", +"aee2988d": "addressOps()", +"aee2dbbf": "getSaleOrdersBySeller(address)", +"aee338ef": "referalAddrByNum(address,uint32)", +"aee36731": "OrderApprovedPartOne(bytes32,address,address,address,uint256,uint256,address,uint8,uint8,address,uint8,bytes)", +"aee40270": "AddAddressToWhitelist(address)", +"aee4c502": "test_remove()", +"aee7052e": "startPhaseLength()", +"aee776ae": "stnExchange(address,uint256)", +"aee7e176": "finalBonus()", +"aee83b61": "TASOHATOKEN(uint256,string,string)", +"aee84f6b": "setTime(address,uint256)", +"aee8a3bd": "add2Auction(address,uint256,uint256,uint256,uint256,uint256)", +"aee9293f": "chargeAndChange(uint8)", +"aee92d33": "approveByLegacy(address,address,uint256)", +"aee98408": "versionIndex(bytes32,bytes32)", +"aee99e52": "getPresale()", +"aeeaf3da": "addPackCategory(uint256,bytes4)", +"aeeb96af": "Highlander()", +"aeec9ba0": "UpdateManifesto(uint256,bool,bool)", +"aeedc9e9": "GroupBuy()", +"aeeed0db": "buyXaddr(address)", +"aeefb9d1": "distributeEDNR(address[])", +"aeefb9eb": "PixelToken()", +"aef0004a": "outputAddress()", +"aef08617": "limitTier3()", +"aef093ce": "Doge2Token()", +"aef0ef2e": "test_validShouldBe3_2()", +"aef1b9b5": "test_threeInvalidFalseEqLog()", +"aef251a7": "tokenCtr()", +"aef3575e": "HandWinsView(address)", +"aef35e6a": "stage2Sale()", +"aef37284": "getReservedTokensListValInPercentageUnit(address)", +"aef3bc17": "getMemberInformation(uint8)", +"aef3fa6c": "AFROIN()", +"aef41e3a": "getItemIdsPagable(uint256,uint256)", +"aef5cbee": "VICToken()", +"aef5ddec": "Paper(string,address,uint256,uint256,address[],address)", +"aef721b8": "createSwap(uint256,uint256,address,address,address)", +"aef76dda": "createPresale(address,uint256,uint256)", +"aef7ad9c": "getSchellingRoundDetails(uint256)", +"aef88aba": "DDJATCoin()", +"aef8a536": "SCNToken(uint256,string,string)", +"aef95098": "setUrl(uint256,string)", +"aef983d0": "getDigitFromByte32(bytes32,uint8)", +"aef99eef": "Game()", +"aefa573d": "genCode()", +"aefa68f0": "ifInAllowedLocks(uint256)", +"aefa7550": "read_u32()", +"aefa7d98": "getContractAddress(uint256)", +"aefaacda": "finalTimeout()", +"aefb1643": "ownerSetPaused(bool)", +"aefb2dad": "ticketsFor(uint256,address)", +"aefb658e": "playerDayEthInLimit_()", +"aefbbf2a": "BANKROLLER()", +"aefc4ccb": "associatedContract()", +"aefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", +"aefd0299": "makeWager()", +"aefe5ee0": "cashOutTank(uint256)", +"aefe696b": "changeColorPink()", +"aefe9ca0": "s40(bytes1)", +"aefea053": "timelockVault()", +"af0062e4": "sellable_tokens()", +"af00be12": "_sendToken(address,uint256,bytes)", +"af017526": "whitelistAddress(address,bool,uint256)", +"af01841e": "getownership(uint16)", +"af01866d": "insertSchedules(uint256,uint32[],uint256[])", +"af023335": "burnSynths(bytes4,uint256)", +"af02d47b": "currentBonusPercent()", +"af030d2c": "setResult(uint256,uint256,bytes32)", +"af03105b": "depositMintSince(address,uint256,uint256,uint256)", +"af0396ae": "PLDT()", +"af03e856": "MockUpgradeableToken()", +"af047106": "sumPreICO2()", +"af049ea9": "testFail_interface_call()", +"af04d0c0": "Deal(address,uint256,uint256)", +"af053b71": "CostToken()", +"af05fa10": "upgradedVersion()", +"af05fc63": "mulpow2(uint256)", +"af0638f6": "currentMaxPurchase()", +"af079dec": "setHardwareWallet(address)", +"af07c768": "Arte()", +"af080014": "nameChange(string,string)", +"af086d6f": "setTestVar(uint256)", +"af08e1ad": "get_arbits_presale_open(address)", +"af093f9c": "specificBatchCheck(uint256)", +"af09420b": "_addStackholder(address)", +"af0a078e": "tHasUpvoted(uint256,address)", +"af0aba4e": "setExpirationRequest(uint256)", +"af0ac4b7": "submitNextStage()", +"af0b4cc0": "minerTotalTime()", +"af0b7029": "KYCApprove(address[])", +"af0bbfb8": "registerEndpoint(int256,string)", +"af0bdb38": "to(address,bytes)", +"af0c09db": "getChosenNumber()", +"af0c9259": "Total_SoldToken()", +"af0cfe1f": "addArticolo(bytes,bytes10,bytes10,bytes)", +"af0def14": "startWonderAuction(string,address)", +"af0dfd3e": "blockPeriod()", +"af0e7ba3": "LeanFund()", +"af0eec40": "assignWarriorsToBattle(address,address,uint256,uint256)", +"af1034ab": "addUpdateGrantee(address,uint256)", +"af106b10": "oracCost()", +"af107749": "m_emissions(uint256)", +"af10b8cf": "totalBooty()", +"af10c810": "turnOff()", +"af123fe7": "makeDeposit(address,address,uint256)", +"af129dc2": "numTokensTotal()", +"af135ff5": "getMemberInfoLength()", +"af136dea": "setCheckInPeriod(uint256)", +"af1380ad": "_getTournamentBattles(uint256)", +"af13aacc": "blocksPerPhase()", +"af13f1ad": "forSaleSupply()", +"af1484d0": "setForkReputationGoal(uint256)", +"af157c19": "getContributors()", +"af164016": "PersonalTime(address,uint256)", +"af16972c": "mining(uint256,bytes)", +"af1747aa": "checkDeck(bytes32,uint8[],bytes32)", +"af17dea6": "symbol_()", +"af18a548": "lockBuying()", +"af191aa5": "isCertificateRegisteredAndValid(address)", +"af19f0d1": "CoinPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"af1af4df": "feeBurnerWrapperProxyContract()", +"af1b5feb": "addWeiRaised(uint256)", +"af1b7d90": "take(uint256,uint256[4])", +"af1c084d": "adminName(address)", +"af1c7940": "fiatInvestorShare(address)", +"af1cd6d3": "test2(uint256,uint32)", +"af1cd9f6": "getGGCTokenBalance(address)", +"af1d06e8": "validateSignature(bytes32,uint8,bytes32,bytes32,address)", +"af1e19d9": "getPlayers(bytes32)", +"af1ee630": "getBdpOwnershipStorage(address[16])", +"af1ff972": "rateForCurrency(bytes4)", +"af2096ef": "MAX_PUBLIC_SOLD()", +"af209cf8": "addFactory(address,uint8,uint256)", +"af20b964": "maximumFundingGoalInETH()", +"af21037f": "clearStartTime()", +"af224bdc": "parseAndStore(bytes)", +"af225fd6": "get_last_user_recast(bytes32)", +"af22fd8e": "NtsToken()", +"af23e1f1": "returnForMint(uint256,uint256,uint256)", +"af24cba2": "setLastAction(uint256,uint256,uint8)", +"af24d25c": "openTransfer()", +"af250a5e": "calculateAndTransferTokens(address,uint256)", +"af259886": "userToNumVillages(bytes32)", +"af261875": "t_ImmlaBountyTokenDepository()", +"af263ec9": "HomeToken(string,string,uint8,uint256)", +"af269745": "upgrader()", +"af26ed68": "setReportProcessingFeePercentage(uint256)", +"af2759f7": "timeUntilClaimAvaliable(address)", +"af2768ec": "commitMove(bytes32,bytes32)", +"af2780ee": "PERIOD_BLOCKS()", +"af27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", +"af28059d": "ChangeItemPrice(uint256)", +"af2885b2": "minimumEtherCommission()", +"af28a537": "totalRoundSeedAmount()", +"af299510": "HasBooster(address)", +"af29e720": "remainingGasFund(uint256)", +"af2a7fb2": "Brewers()", +"af2b114a": "Erc20SupplyToken(uint256,string,uint8,string)", +"af2b1925": "MarmotToken(uint256,string,uint8,string)", +"af2b2e5c": "ReVo()", +"af2b76ab": "airDropHero(uint16)", +"af2bf027": "minMaintenanceMarginAmount()", +"af2cff59": "removePVPContender(uint32)", +"af2e285c": "setBidState(bytes32,uint8)", +"af2e2da9": "getValidatorName(address)", +"af2f0c46": "SupportComponent(uint256,address,uint256)", +"af2f9105": "_performWithdraw(address,address)", +"af2fa91c": "otherCurrenciesChecker()", +"af2fcc17": "globalMinPurchaseAmt()", +"af303a11": "salvageTokens(address,uint256)", +"af304bab": "getPriceByCredentialItemId(address,bytes32)", +"af30e4d6": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256)", +"af30e9f7": "transferICOTokens(address,uint256)", +"af30ee3f": "GOD()", +"af310f02": "NotCoin(string,string,uint8)", +"af314579": "isDayFirst()", +"af31f49b": "startNextAccountingPeriod()", +"af3309d8": "heartbeatCount()", +"af333595": "proxyMergeMint_old(uint256,bytes32,address[])", +"af339ee4": "convertLotById(bytes32)", +"af33f8a5": "Order_execute(address,address,uint256,uint256)", +"af35314a": "INITIAL_TOKEN_FROM_COMPAIN()", +"af356eee": "preicoContractAddress()", +"af35ae27": "getRemainingTokens()", +"af35ae3e": "setSaddleShopSaleFee(uint256)", +"af35b3f1": "why()", +"af35c6c7": "enableTransfers()", +"af35dac2": "convertToCents(uint256,uint256,uint256)", +"af36778b": "aggregate()", +"af36e7a7": "removeUserWhitelist(address[])", +"af371115": "findCertificate(bytes)", +"af375838": "addBurnupGame(address)", +"af378ce5": "bust(uint256)", +"af38d757": "claimable()", +"af3996c3": "fourthStageMinted()", +"af3a4feb": "LOOMIA_LOOMIA_REMAINDER_ADDR()", +"af3cc6be": "MoxianCoin()", +"af3d8e43": "preICOTokenDelivery(address,uint256)", +"af3dc180": "ecosystemBuildingWallet()", +"af3e8a40": "orderMatch(bytes32)", +"af3f0ebe": "c_startTime()", +"af3f12bc": "profitSharingContract()", +"af3f1db4": "BMEtestToken1()", +"af408d89": "setStatus(bytes)", +"af40ce20": "revokeUnicorn(uint256)", +"af40dd2f": "AccessToken()", +"af418e4c": "setReclaimPeriod(uint256)", +"af422cce": "marketSellOrders(uint256,bytes[])", +"af42d106": "setKey(string)", +"af431f03": "setUser(address,string,uint256)", +"af43f597": "get_amount_minus_commission(uint256)", +"af448721": "refundMe(address,uint256)", +"af44e487": "overdraftPeriodsNumber()", +"af45118e": "createProposal(address,bool)", +"af45de05": "disableDonation()", +"af463d2a": "CentaToken()", +"af468682": "startsAt()", +"af46aa08": "stakeBalanceOf(address)", +"af475a9b": "setUSDPerETH(uint256)", +"af477528": "addMetadataObject(string)", +"af47c1af": "getActionByIndex(uint256)", +"af481be8": "mint(string,uint256,uint256,uint8,string)", +"af488ca3": "setLiquid(bool,uint256,bytes)", +"af489d5a": "_moveBalance(address)", +"af49a228": "DeshiCoin()", +"af49e321": "getHolderLimit(address)", +"af4a2984": "createPrizePool(uint256[])", +"af4a822d": "getCurrentTrancheIndex(uint256)", +"af4b382d": "PaquariumToken(uint256,string,uint8,string)", +"af4b3cab": "delBounty(address,address,uint256)", +"af4bed26": "setExchangeRateByOraclize(address,bytes32,string)", +"af4c14ee": "setAddressWhitelist(address,bool)", +"af4c2288": "getNumAcceptance(address)", +"af4c3d1d": "BPofMakerByIndex(address,uint256)", +"af4c6838": "tokenDeposited(address)", +"af4c9b3b": "withDrawalether(uint256)", +"af4cd457": "getOrCacheValidityBond()", +"af4d723c": "Libidocoin()", +"af4e3d37": "withdrawReservedTokens()", +"af4e4494": "TANKER_TYPE()", +"af4e99de": "getGameData()", +"af4fd9e7": "setValidLockingAmountToPeriod(uint256[3],uint256[3])", +"af500fb7": "readBytes32(bytes,uint256)", +"af50e0d3": "DeDeMasterContract(address)", +"af5177b1": "calcDrawCode()", +"af519bf5": "doesProofExist(uint256,bytes32)", +"af5260bf": "finalTime()", +"af52fbed": "retrieveWineData(bytes32)", +"af53dc6e": "contractbacklist()", +"af54e324": "upgrade_self(address)", +"af55bba0": "removeRegistryFromTagsIndex(address)", +"af5610dd": "isThisPreforkVersion()", +"af567633": "minPresaleWei()", +"af574319": "UpgradeProposal(address)", +"af577c4c": "unlockReserve()", +"af57d236": "STAGE_2_TIME()", +"af580d2c": "getPurchaseById(string)", +"af58574a": "getTierPosition(address)", +"af589421": "callerAdded(address)", +"af589572": "getAssetIdTripStartTime(uint256)", +"af58eda8": "findSeedAuthorized(address)", +"af598bc7": "winnerOf(uint256,uint256)", +"af599a8d": "_depositTokens(address,uint256,address)", +"af59c789": "setVendingAmount(uint256,uint256)", +"af5a3db8": "finaliseVoting(uint256)", +"af5a7625": "getFundInfo(bytes32,string,address)", +"af5b065a": "getMinimumPurchase()", +"af5b0ece": "getAmountContributed(address)", +"af5ba32a": "_fund(uint256,address)", +"af5c1020": "InfinityDataChain()", +"af5c295a": "checkMaxAllowed(address)", +"af5c4540": "getVoteTokens()", +"af5c6f38": "synthesize(uint16[5],uint256)", +"af5cfae8": "remainingInvestment()", +"af5d4013": "toteLiquidatorTranserComplete()", +"af5ee700": "buyTokenPerEther()", +"af604173": "ico_startTime()", +"af608fad": "isTimelockAllowed(address,address)", +"af60b50f": "CGCoinsToken()", +"af60dc4f": "SCMOXToken()", +"af6128c2": "calcTotal(uint256)", +"af62a708": "getCrystalKindWeight(uint256)", +"af62cfd2": "endBetBlue()", +"af63066e": "userRound(address)", +"af6337fd": "pausecontract()", +"af6375cd": "setNewStartTime(uint256)", +"af63da13": "getMemberRegistry()", +"af640d0f": "id()", +"af6499c5": "ActiveDigger()", +"af653861": "applyAndLockSettings()", +"af664f3a": "Bitkat()", +"af6682ab": "query(uint256,uint256)", +"af66c560": "convertData(bytes)", +"af66eb1f": "LogWithdraw(address)", +"af6704ee": "NehalCoins()", +"af67cdc4": "HBToken()", +"af685482": "BonusChanged(uint8,uint8)", +"af68a2c4": "getMyGameDividends()", +"af68dd3f": "getBaseInfo(uint256)", +"af692e00": "getPullRequestById(bytes32)", +"af6972c0": "submitDeliveryCommitment(address[2],uint32,uint64[3],bytes32[],bytes32,uint256[2],uint256,bytes32,bytes32,uint8)", +"af6a2c5c": "JTCCtoken(uint256,string,string)", +"af6afce5": "min(int256[])", +"af6b08a1": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256)", +"af6b3615": "getInitialReportStakeSize()", +"af6b3d43": "roundSwitch()", +"af6bb824": "_cancelSale(uint256,address)", +"af6bd8ce": "durations(address)", +"af6c0f60": "bntToken()", +"af6c3021": "MaxReleasedBac()", +"af6c7f77": "crowdSaleStartTime()", +"af6cd244": "acceptAnswerAndFinalize(uint256,uint256)", +"af6d0437": "AtomicSwapRegistryConstructed()", +"af6ddad8": "shift_left(uint256,uint256)", +"af6df563": "withBonus(uint256,uint256)", +"af6e66e6": "Lockup36m(address)", +"af6f37a2": "getBasicTokenAmount(uint256)", +"af6f964d": "minReached()", +"af6fae22": "roomAvailable(string,uint256[],uint256)", +"af6fce9a": "RoyaltyInformationContractSet(address,address,bool)", +"af6fe8e2": "testGetToken()", +"af713566": "batch()", +"af713dda": "SUPPLY_FOR_PARTNERSHIPS()", +"af722ea7": "connectors(address,address)", +"af7296ec": "remainingBankroll()", +"af737da7": "_setClientLastPaidRate(address,uint8)", +"af738bbf": "setDepositoryDelegate(address)", +"af7520b9": "startingPriceOf(uint256)", +"af75ad2d": "createDispute(address)", +"af7665ce": "ethPriceFeed()", +"af769b54": "transferAcceptable(address)", +"af769eff": "Paper()", +"af76c4d2": "mined_blocks()", +"af76ccd7": "finishedPromotionIDs(uint256)", +"af77040e": "bonusIncreasePercentage()", +"af77649d": "paySmartContract(bytes32,uint256)", +"af77c473": "p_setGamePaused(bool)", +"af77ebee": "transfersOnOff(uint8)", +"af77f8bd": "setVIPBonus(uint256)", +"af7885b5": "listSubName(bytes32,uint256,uint256)", +"af78facf": "valueBonuses(uint256)", +"af7912a1": "bonusTake()", +"af791df2": "recoveryDone()", +"af794a4f": "tulips(uint256)", +"af79b437": "MintingDisabled()", +"af79ffde": "userInitialized()", +"af7a0899": "firstStageWallet()", +"af7a1762": "getBetfundingAddress()", +"af7a6164": "setMaxMessagesGlobal(int32)", +"af7b2eb7": "listAddresses(address[],uint256[])", +"af7bcf5e": "LigoToken(uint256,string,string)", +"af7bfd6c": "setValueAny(uint256)", +"af7c8f96": "changetokenBurnAddres(address)", +"af7d0eff": "setSellPrices(uint256)", +"af7d1890": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"af7d469c": "setGeneratorAddress(address,address)", +"af7d4b21": "RXPSale()", +"af7d5ebe": "change_p4(uint256)", +"af7d697e": "EnableTransfer()", +"af7d6ca3": "spend(address,uint256)", +"af7e8577": "TCCCoin()", +"af7ed9d7": "maxGasPriceInWei()", +"af7fdd76": "setModified()", +"af80562c": "testReceiveHash()", +"af819c67": "TTCSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"af81bd03": "_voteAndCheck(uint256)", +"af81c5b9": "addToken(address,uint256)", +"af8214ef": "LIMIT()", +"af82403c": "getNextNode(bytes32)", +"af8255ab": "updateProgress(uint256,uint256)", +"af825c78": "Hjjm()", +"af83782e": "setMinimumWishTribute(uint256)", +"af837832": "isPromo(address,address)", +"af83f252": "historyRed(uint256)", +"af8472b1": "consecutiveDeaths()", +"af84fb00": "withdrawAmount(uint256,uint16)", +"af8532e3": "roundDeadline()", +"af854db1": "allowedTransferDuringICO(uint256)", +"af857a84": "batchTrade(address[13][],uint256[15][],uint8[2][],bytes32[2][],bytes32[2][])", +"af862b6a": "ETH_withdraw(uint256)", +"af874a76": "isValid(address,address)", +"af87c366": "walletUnlock(address)", +"af87c833": "initiateProvider(uint256,bytes32)", +"af8927c1": "GetRealCost(address,uint32)", +"af8979fd": "confirmDeath()", +"af8996f1": "setPublicationFee(uint256)", +"af899735": "playGame()", +"af8a849c": "AllocationGranted(address,address,uint256,bool)", +"af8af39f": "setRate555()", +"af8b0ec7": "rewardRoto(address,uint256)", +"af8b7525": "CollectAndReduceFees(uint256)", +"af8b912d": "setVotingMachine(address)", +"af8c1946": "refundAllEther()", +"af8d5a48": "icoEndTimestampStage()", +"af8d7611": "setPointIdentifier(string,int256)", +"af8d98c9": "gameEndPlayNo()", +"af8d9f37": "addressContainsContract(address)", +"af8ec44c": "offerGanTokenForSaleToAddress(uint256,address,uint256)", +"af8f35c4": "_fallback()", +"af8f7fdf": "ProductUpdated(address,address,address,string,bool)", +"af8ff2f8": "runPreMint(address,uint256)", +"af906cf3": "setToken(uint256,address)", +"af91b947": "UnsuccessfulAttempt(address)", +"af91c5fd": "getVotersChoice()", +"af91e0bf": "freezeOracle()", +"af92080b": "downTick(address)", +"af92a693": "addRegistrar(address)", +"af933b57": "withdrawEther(address)", +"af93a6d1": "CatNamed(bytes5,bytes32)", +"af93aebb": "adjustPhaseBasedOnTime()", +"af93afdd": "Shipment(bytes,bytes,bytes,bytes,string,bytes,uint256,uint256,bytes,bytes,uint256,uint256,string,bytes,bytes,bytes)", +"af93e308": "HookToken(address,address,uint256)", +"af941129": "testMintGuyAuth()", +"af944fc7": "getQueueLenght()", +"af949df9": "isValidUser()", +"af9658cd": "custodianVerify(address)", +"af988341": "sendLink(string,string,string)", +"af9890aa": "GUS()", +"af98cfd6": "exchangeByBuyer(uint256,uint256)", +"af98f757": "cancelRequest(address)", +"af99a327": "finalizePartnerSale()", +"af9a3f9b": "hashName(string)", +"af9a51c6": "getComponents(uint16,uint8,uint256)", +"af9a91d9": "setDrawerFee(uint256)", +"af9a99fa": "updateDates(uint8,uint256,uint256)", +"af9afe73": "unmintTokens(address,uint256)", +"af9b192e": "RESERVE_AMOUNT()", +"af9b1cef": "transfer_funds_to_project()", +"af9b6bd2": "bidEMONTMin()", +"af9bbcc4": "unbanAccounts(address[])", +"af9c5e7a": "getWhitePlayer(bytes32)", +"af9cb8c0": "StartOfPayments(address,uint256)", +"af9cb9f6": "setRequiredStake(uint256)", +"af9dfd1a": "FoodTokenEmissionEvent(address,address,uint256,bool,uint256)", +"af9ee81d": "_unstake(address)", +"af9efd4c": "_api_PlaceBet()", +"af9f3e20": "BTCVERVIER()", +"af9f788c": "TankWithdrawSome(uint256)", +"af9fc8a8": "UHC()", +"afa01c90": "CollectibleIndex4()", +"afa03ac9": "doFailingTransfer()", +"afa0f8c9": "getUintCoinProduction(address,address,uint256)", +"afa12a8a": "roundEnds()", +"afa17725": "WillyCoin()", +"afa1d6c9": "mainSaleTokenRaised()", +"afa202ac": "setRolesContract(address)", +"afa25098": "returnCoins(uint256)", +"afa293d4": "getSource()", +"afa31744": "saleTokensAddress()", +"afa33fb8": "chkLockedB(address,uint256)", +"afa3a5d1": "SetdivForTransfer(uint256)", +"afa3de9b": "revokeUserLicense(address,string)", +"afa40bbd": "UNIT_PRICE()", +"afa4179d": "_getInvestorLockedAmount(address,address)", +"afa437c0": "callBackForRequestRandom(bytes32)", +"afa560b0": "transferToICAPCallGas()", +"afa5e0a9": "getCountry(uint256)", +"afa5e56a": "decExchangeBalanceOf(address,uint256)", +"afa5f45c": "changeDecimals(uint256)", +"afa60035": "doesAssetTokenExist(address)", +"afa60487": "getDocAsBytes64(uint256)", +"afa6c735": "PRICE_PRESALE()", +"afa72b9f": "CinderToken()", +"afa7a25f": "updateArtistsAccount(uint256,address)", +"afa902a0": "isAutoFowarding()", +"afa936b8": "deleteCertificate()", +"afa99860": "getTokenPrice(address,address)", +"afa9a86e": "tokensInPlay()", +"afa9f179": "toReal(int64)", +"afaaa654": "setEndIcoPreICO(uint256)", +"afaaf9f9": "DepositBroker()", +"afab2b0f": "inventoriesOfDate(uint256,uint256,uint256[])", +"afab729d": "EntrepreneurShop()", +"afabe8b4": "CALLToken(uint256,string,string)", +"afac8ed3": "rand(uint16,uint16)", +"aface2f1": "mintTokensFor(address,uint256,uint256)", +"afaebf3e": "setDispatcherAddress(address)", +"afaf6b2e": "AuditSafeGuard(bytes20)", +"afaf97e7": "privateSaleToken()", +"afb058ce": "teamTwoPrefix()", +"afb0db5f": "random3()", +"afb18fe7": "paymentTokenAddress()", +"afb2032b": "LuckChain()", +"afb390aa": "getIsSecondPhaseEndedByTime()", +"afb3a8e9": "accept2(uint256)", +"afb3ae7a": "SPECIALIST_ONE()", +"afb47bb3": "approveModeratorship()", +"afb4d2ee": "getM()", +"afb58d18": "setPriceOneToken(uint256,uint256)", +"afb688a2": "mineth()", +"afb6b9a5": "m_hardCap()", +"afb7e495": "eruptionThreshold()", +"afb95eed": "logApproval(address,address,bytes32)", +"afb97c20": "tokenTransferDelegate()", +"afbae469": "mediumSize()", +"afbb9d44": "ico1Bonus()", +"afbc4ebc": "OWNER_CUT()", +"afbcd19b": "CROWD_WAVE3_BONUS()", +"afbcd904": "setDataColla_001_001(string,string)", +"afbd3b7f": "minLot()", +"afbd8092": "CATRefundedForWei(address,uint256)", +"afbdaa05": "isInBlockFilter(address)", +"afbddfa9": "toggleFreezeTokensFlag()", +"afbde5c9": "getNumTopics()", +"afbea641": "SECToken()", +"afbec8df": "TheGrid()", +"afbfdd93": "Notonegoro()", +"afc01cb9": "getFinishTime()", +"afc0b5d3": "Crypto010()", +"afc0bf27": "registerName(string,address,bool)", +"afc0bf43": "setRecoveryInfo(bytes32,uint256)", +"afc0e324": "stringToBytes12(string)", +"afc17f80": "addLockedTokens(address,uint8,uint256,uint256)", +"afc24bfb": "getRules(uint8)", +"afc24e3d": "getChallengeAnswer(uint256)", +"afc2cc46": "SGEICO()", +"afc2f503": "allowEmployeeMigration(address,address)", +"afc361bc": "tokenFrozen()", +"afc3a2ad": "current_tier_sold_tokens()", +"afc3b688": "perc(uint256,uint256)", +"afc3c31f": "initDepositAccount()", +"afc48052": "mintBounty()", +"afc4a982": "PathCost(uint16,uint32)", +"afc6740e": "PricePerCafe()", +"afc6fe2e": "MaybePerformWithdraw()", +"afc75b1d": "SwissTrustToken()", +"afc797a6": "lastStealValue()", +"afc7c400": "ProICOPrice()", +"afc81953": "createGame(bytes32,uint256,uint256,bytes32,bytes)", +"afc83802": "setTotalWeiToBeDistributed(uint256)", +"afc88141": "WhitelistAddressdisable(address)", +"afc8fbc6": "MerkleAirDropToken(string,string,uint8,bytes32,uint256)", +"afca35e5": "QuadToken()", +"afcac546": "getByteSize(bytes32)", +"afcb0d3a": "place(int8)", +"afcc05c0": "buyRedirectFor(address)", +"afcc1286": "dtEnd()", +"afcc8676": "SMPLTSTToken()", +"afcced41": "CROWDSALE_GASPRICE_IN_WEI_MAX()", +"afcd565c": "createTile(uint16,uint8,uint8,uint8,uint32,uint16,uint64,uint64,address,uint8)", +"afcd6561": "getIdentifierFromSectionIndex(uint256)", +"afce2d62": "PoC()", +"afcee461": "DungeonRunAlpha()", +"afcf2fc4": "charityAddress()", +"afcfad6e": "getJobPayments(bytes32)", +"afd07e80": "getMiningWarRoundOfPlayer(address)", +"afd09bab": "quadrupler()", +"afd0a85a": "ListingCancelled(uint256,uint256)", +"afd0fd1d": "getDecimals(string)", +"afd20e33": "LOCKAMOUNT()", +"afd237bd": "getTxn(uint256)", +"afd23d4a": "STAGE_1_FINISH()", +"afd2d5f6": "OpinionToken()", +"afd3f79a": "_isCorrectQuarterBuyin(uint256)", +"afd42fd3": "addCloud(uint16,uint16,uint16,uint8,uint8)", +"afd51a6e": "updateLimit()", +"afd61d2c": "getBonusEgg(uint64)", +"afd6b607": "createRequestAsPayee(address[],address[],int256[],address,address,string)", +"afd7b21e": "companyCapital()", +"afd7b9ed": "angelStartTime()", +"afd7bf92": "noContract()", +"afd7d464": "FaradTokenSwap()", +"afd82067": "getScore()", +"afd8515e": "setTotumPhases(address)", +"afd8c8c4": "GasProxy(address,address)", +"afd8fd5f": "createToken(string,string,address)", +"afd925df": "setPermissionManager(address,address,bytes32)", +"afd9897e": "restTokens()", +"afda2dac": "jackPotC()", +"afda5460": "YDTToken()", +"afdac68d": "query(uint256)", +"afdb0970": "sendToBuyer()", +"afdbd499": "reclaimERC20(address,uint256)", +"afdc3823": "updateTlcTlr(uint256,uint8,uint8)", +"afdcd8ec": "RAZEN()", +"afdd4d23": "airDropValues(address,address,address[],uint256[])", +"afde86c1": "getHash2(address,bytes32)", +"afdebfe7": "setWeiRaised(uint256)", +"afdfaee7": "_preValidatePurchase(address,uint256,address)", +"afdfb804": "getVendors(uint256,uint256,bool)", +"afe007b6": "_transferAction(uint32,address,uint8)", +"afe0e33c": "reputationRewardLeft()", +"afe12e77": "withdrawWrongNode(bytes32,address)", +"afe14c19": "clean(address,address)", +"afe15cfb": "appealPeriod(uint256)", +"afe17129": "tokensStillInLockup()", +"afe18413": "placeOrder(address,uint256,address,uint256)", +"afe1d4cf": "setTechBonus3(uint256,string)", +"afe2ce0e": "setSaleAddr(address,bool)", +"afe38ade": "payoutWinners(uint256,address[],uint256[])", +"afe4720c": "toggleFeatured(uint256,string)", +"afe69bb0": "Create(bytes32,bytes32,address,address,address,uint64)", +"afe70413": "getCommissionForType(string)", +"afe76ab1": "calcProgress(uint256,uint256,uint256)", +"afe80b8d": "newCmas(uint256,string)", +"afe8abbf": "transferPresaleCoins(address,uint256)", +"afe8b652": "countriesCount()", +"afe948ce": "OKEToken()", +"afe98be1": "calculateId(uint256,uint256,uint32,uint256)", +"afe9c776": "XITC()", +"afec91c4": "icoInstalled()", +"afed762b": "toSlice(string)", +"afef07da": "ico2receivedTotal()", +"afef0e28": "MARKETING_supply()", +"afef25d7": "Puremail()", +"aff038e6": "sellForOtherCoins(address,uint256)", +"aff06fbd": "playerCancelActiveGame(uint256)", +"aff16621": "toSig(bytes)", +"aff177ca": "updateWhitelist(address[],bool)", +"aff1e0de": "crowdsaleTotal()", +"aff1f15f": "rate3()", +"aff21b00": "imOut()", +"aff21c65": "getMinimumEndowment(uint256)", +"aff23300": "UserWallet(address)", +"aff36885": "setBlockMaxVotes(uint256,uint256,uint256)", +"aff3a08e": "CreateFAP(address,uint256)", +"aff46572": "getMarketplaceContract()", +"aff4b849": "getMemberName(address)", +"aff4cbea": "SHIP_SLOTS()", +"aff57736": "getNumbersFromString(string,string,uint32)", +"aff5dff2": "getCreditsFor(string)", +"aff5edb1": "deregister()", +"aff6b3e8": "setupRace(uint256,uint256)", +"aff74c6d": "getTotalPeriods()", +"aff7bd49": "trackSell(address,uint256,uint256)", +"aff7fae4": "GodzSwapGodzEther(address,address,address)", +"aff8c7ab": "IkuraAuthority()", +"aff9b3cc": "getCarName(uint256)", +"aff9e954": "topOptions(uint256,uint256)", +"aff9f40d": "SaddleForSale(uint256,uint256)", +"affb62dd": "dAdd(bytes32,address)", +"affb672b": "realimmocoin(address)", +"affbe8ab": "ACNCToken()", +"affbf593": "withdrawExcess(address)", +"affc0670": "openVoting()", +"affca932": "changeFeeRate(uint256)", +"affcba25": "createNewMintableUser(address)", +"affcce10": "_unpackRaceData(uint256)", +"affd0dd4": "Funding_Setting_funding_time_start()", +"affe39c1": "owners()", +"affed0e0": "nonce()", +"affee29b": "submitEthToTokenOrderWHint(uint128,uint128,uint32,int256)", +"afff33f4": "GameEvent(uint256,address,uint8)", +"afff5064": "setBonusesForAmounts(uint256[],uint32[])", +"afff9720": "addrBounty()", +"b0005ff1": "validPresaleTrading()", +"b000c81b": "InitBetContract(address,address,uint256)", +"b000dec2": "total_token_sold()", +"b001134a": "balanceInTier()", +"b0011509": "calcMarketFee(uint256)", +"b00124c4": "epocum()", +"b00140aa": "getHash(bytes)", +"b0018bfc": "changeTokenName(string)", +"b0036d32": "mintByGateway(uint32,uint64,address,string)", +"b003dd86": "encode(uint256[])", +"b004079e": "lol(bytes32)", +"b0043308": "setaddAddressListItemSet(bool)", +"b00606a5": "confirm(bytes32,uint8,bytes32,bytes32)", +"b0062595": "KcashToken()", +"b006b86e": "_addEthereumAddress(uint256,address)", +"b006de0d": "initialBalanceForCrowdsale()", +"b006e2b0": "txhash(string)", +"b0070a30": "changeBeneficiary(uint256,address)", +"b00791fa": "proxy_contribution(address)", +"b0091773": "orderExecutionBlockTime(bytes32)", +"b009c50d": "DevxToken()", +"b00a0dbf": "allowanceTransfer(address,address)", +"b00a81fb": "buy(uint256,uint256,string,string,string,string,string)", +"b00b1239": "approveAndDeposit(address,uint256)", +"b00baa11": "DaicovoStandardToken(string,string,uint8)", +"b00bad50": "identifierToBuyoutPrice(uint256)", +"b00cdd9b": "preICOgoal()", +"b00d4c75": "singleLineWrong()", +"b00d70ca": "sollReserve()", +"b00dba63": "setTokenData(uint256,bytes32)", +"b00e8668": "can_refund()", +"b00eb9fe": "feeCalculator()", +"b00f9702": "setTeamPerfitAddr(address)", +"b0102e20": "equipMultipleTokens(uint256[])", +"b010d80e": "ensureTokensAvailable(uint256)", +"b010d94a": "canExitPool(address)", +"b0112ef2": "changeReserveCATDestinationAddress(address)", +"b0119a22": "genOrder()", +"b011fcf1": "doWithdraw()", +"b0128c08": "getCeiling()", +"b013b369": "_errorBuyingTokens(string)", +"b013f637": "getNicknameByAddress(address)", +"b013fa91": "JadeCoinMining(address,uint256)", +"b01454dd": "vrc()", +"b015b81a": "amountToTakeAsRake(uint256)", +"b015c2ce": "FLOWToken()", +"b0166b04": "testTransferringMkr()", +"b016f9f2": "ThirdAddressBalance()", +"b0171fa4": "getCurrentGenerationId()", +"b0175308": "PriceDecimals()", +"b017c036": "rlc()", +"b017d808": "assertEq32(bytes32,bytes32,bytes32)", +"b01800f8": "createNewUser(bytes32,bytes,bytes32,bytes32,address)", +"b0181b3c": "setMyIdentity(bytes32,string,string)", +"b018d65a": "maxAffiliate()", +"b0192f9a": "auctionManager()", +"b019ffd2": "thirdDiscountCap()", +"b01a71d8": "setProvider1(address)", +"b01ab46d": "validPurchase(address)", +"b01afdab": "changeBaseValue(uint256,uint256,uint256,uint256,uint256,uint256)", +"b01b0304": "ExchangeRateChanged(uint256,uint256)", +"b01b299f": "setTokenPriceProposal(uint256,uint256,uint256)", +"b01b3b6c": "_createSale(uint256,uint256,uint256,uint64,address)", +"b01b8877": "setFundingFueled()", +"b01c60b7": "getPrices(uint256,uint256)", +"b01d3d9e": "ENTToken()", +"b01d54ed": "PolyAi(uint256,string,uint8,string)", +"b01d5b63": "purchaseFor(address,uint16,address)", +"b01d7a11": "sendTokensToFive(address,address,address,address,address,uint256)", +"b01e8308": "JointToken()", +"b01ead43": "returnToOwners()", +"b01eba14": "MIN_TOTAL_AMOUNT_GET_ETH()", +"b01f1571": "unitsPerEth()", +"b01f31c9": "hardcapInTokens()", +"b0203f3f": "totalAmountsBetStage2(uint256)", +"b020b188": "developmentToken()", +"b020d7a3": "_reinvest(bytes32,uint256)", +"b021cace": "RubyCoin()", +"b0228f8c": "icoEtherReceivedMainSale()", +"b02447e0": "bonusChangeTime()", +"b024abad": "GoTokenDutchAuction(address,address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"b024b2e3": "GridyToken()", +"b0251e6d": "setUserLocked(address,bool)", +"b0259633": "SHIPToken()", +"b025abf1": "step0Rate()", +"b025cc45": "deadlines(uint256)", +"b0267126": "advisorySupplyRemaining()", +"b0271023": "verifyFile(string)", +"b0273de1": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256[])", +"b028c059": "createMatch(uint256,string,string,int32,int256,uint64,uint64)", +"b028d73a": "isCrowdsaleAllowed()", +"b028ee13": "s2b(string)", +"b0293850": "claimBuyerFunds(address,address,address,uint256)", +"b029c2c8": "approve_unwanted_tokens(address,address,uint256)", +"b029d940": "setPlatinumAddress(address)", +"b02a2fd1": "withdrawLemonCoins()", +"b02a73a1": "sendTo(address,uint256,bytes)", +"b02af038": "bonusesSold()", +"b02b69d6": "addBonus(uint256,uint256)", +"b02bf4b9": "earn(address,uint256)", +"b02c43d0": "deposits(uint256)", +"b02c8054": "withdrawICO(uint256)", +"b02da8d8": "diamondBonus(uint256)", +"b02dbd07": "teamAllowance()", +"b02e8496": "processSellRequest(string,address,uint256,uint256,bool)", +"b02ef382": "SALE1_END()", +"b02f1edc": "TokenERC20(string,string)", +"b02f53ae": "testConcatStorage31Bytes()", +"b03031b7": "_askQuestion(bytes32,bytes32,address,uint32,uint32)", +"b0304813": "currentMilestone()", +"b03053b6": "createListing(uint256,uint256,uint256)", +"b0321d45": "ZJMToken(address,address)", +"b03260be": "scheduleTransaction(uint256,address,bytes)", +"b032fff4": "weiMaximumAmount()", +"b0335ffc": "setStage(uint256,uint256,uint256,uint256,uint256)", +"b033777f": "endCurrentGame()", +"b033a02b": "payDivsValue(uint256,string)", +"b033a6c3": "lookup(address,uint256)", +"b033cab9": "voterStakes()", +"b0340123": "votingToken()", +"b0347c56": "estimatePots()", +"b0349184": "clearRecords(bytes32[])", +"b0349650": "_removeControllerByPartition(bytes32,address)", +"b034998b": "ChooseBwea()", +"b034d5aa": "Total_Deposits()", +"b034f3cf": "myLatestBid()", +"b0355b45": "LuHuToken(string,address)", +"b03645b5": "max_users()", +"b036ab65": "LemoSale(uint256,uint256,uint256)", +"b037e4f5": "MCoin()", +"b0388344": "readTaskCreatedOn(string)", +"b03903fd": "usernames()", +"b03941bc": "dropable()", +"b0397857": "secondaryListing()", +"b03b3a0a": "setPOOL_edit_13(string)", +"b03c4b33": "setLock(address,bool)", +"b03c6729": "inmax()", +"b03cf9bd": "MerkleAirdrop(address,bytes32)", +"b03d169c": "mineCount()", +"b03d5ce8": "PVCToken(address)", +"b03e02ad": "bluemoontestToken()", +"b03f75a5": "giveupBid(bytes32)", +"b04010c6": "fuse()", +"b0402d36": "LiveAuctionEvent(address,uint256,uint256,uint256,uint256)", +"b0407315": "purchaseWarehouseSpace(address,uint256,uint256)", +"b0408721": "buyVouchers(uint256)", +"b040d545": "tokenToTokenSwapOutput(uint256,uint256,uint256,uint256,address)", +"b0414a2d": "setMinimumGasLimit(uint256)", +"b0417e98": "checkVote()", +"b0419107": "_getNthNibbleOfBytes(uint256,bytes)", +"b042307d": "_isInterceptableMsg()", +"b0423141": "StringStorage(string)", +"b04247e9": "DentacoinAddress()", +"b04287b3": "sharesOfVault(uint256,address)", +"b0433fe9": "_supportsERC165(address)", +"b0445a77": "PRIME_VESTING_DATE()", +"b04464cd": "ChangeImage(string,uint256)", +"b0448884": "updatePrice(bytes10,uint32,uint64,uint32)", +"b04510d5": "xultoken()", +"b0459d49": "LoanStandard(address,address,uint256,uint256,uint256,uint256,uint256)", +"b0467deb": "getUser(uint256)", +"b0471d43": "primary_wallet()", +"b047dd06": "tokensale(address,uint256,uint256)", +"b047ee56": "getBalance_Token1(address,address)", +"b047f245": "listForSale(uint16,uint256)", +"b047fb50": "cooAddress()", +"b048357d": "lastBlock_a15()", +"b0483c3f": "reload(uint256,uint256)", +"b048546f": "Divide(uint256,uint256)", +"b0485706": "read_u32_array()", +"b048e60d": "FebToken()", +"b049474d": "disableSuicide()", +"b049d176": "cancelSellToBlackMarket(uint256,uint256,bool)", +"b04a1680": "GetConsentDirective(uint256)", +"b04a3f1c": "EndLottery()", +"b04b3f57": "isCustodian(address,address)", +"b04ca7f0": "dateAdmin()", +"b04d6638": "mangeFundAmount()", +"b04e74f2": "Gerritcoin()", +"b04e7668": "createCastleWithToken(address,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"b04eb639": "subCrystal(address,uint256)", +"b04fc4e1": "superContract()", +"b05005a2": "lock(uint128,string,address,bytes16,uint32)", +"b050b49c": "rewardFoundersAndPartners()", +"b050f83a": "proportion(uint256,uint256,uint256)", +"b051d722": "loadRandom(uint256)", +"b052852f": "approveAllocation(address)", +"b0532349": "_destroyContract()", +"b054058a": "nSign(uint256)", +"b0544308": "newLockTimestamp(uint256)", +"b0545532": "numGamesCompleted()", +"b0547d8c": "deleteShopMods(address)", +"b0557bf1": "updateParams(uint256,uint256,uint256,uint256)", +"b055a62a": "INCRYPTHEDGE(uint256,string,string)", +"b055d1bc": "amountProportion()", +"b055fdf2": "isTarget()", +"b05609ce": "pricegreengrey()", +"b0560eba": "GuardaProva(address)", +"b056561a": "DATE_31_DEC_2022()", +"b056bb81": "RedSoxYankees410()", +"b0573de6": "getDefaultPartitions(address)", +"b0575069": "ap(address)", +"b05784b8": "retreive()", +"b0578878": "translate(address)", +"b05940f2": "getOpenAuctions()", +"b059c177": "_0_name(uint256)", +"b05a0071": "DET()", +"b05a47d9": "VocToken()", +"b05d8096": "setStr(string,uint256)", +"b05e390a": "TokenEther(string,string)", +"b05eb08d": "_isLeapYear(uint256)", +"b05f1b88": "getAmountOfTransactionsInProposal(uint256)", +"b05f99f5": "changeInvestment(address)", +"b05fa837": "patronageContractForUsername(string)", +"b05fceba": "mDepositWallet()", +"b05fef55": "Issuer(address,address)", +"b0603326": "auctionStatus(bytes32)", +"b0604a26": "schedule()", +"b0604a9c": "testCantBuyTokensInStoppedSale()", +"b060b785": "getWithdrawableOperationFeeDatesAndAmount()", +"b060de3a": "withdrawAllOptions(address[])", +"b0619e85": "hasPermission(address,bytes32)", +"b0623074": "frozenTime(address)", +"b063152a": "generateHash(string)", +"b064bb56": "_ltoa(bool)", +"b064ca18": "userForceGameEnd(uint256)", +"b06576f3": "contrBonus(uint256[])", +"b0660c3d": "transfersAllowed()", +"b0667cf8": "queryPrice()", +"b066d3b7": "removeReputation(address,uint256)", +"b066dca9": "MERZhToken()", +"b066ef3c": "cooldown(uint32)", +"b0670cc9": "get_size()", +"b0671381": "isValidWalletSignature(bytes32,address,bytes)", +"b0673d57": "getItemStore(bytes32)", +"b0686584": "incNT()", +"b068776b": "SaleFinished(uint256)", +"b068b5b8": "getRank01()", +"b06939a2": "notEqual(address[],address[],string)", +"b0698763": "subdomainOwner(string,string)", +"b069dbf1": "sendFromContract(address,address[],uint256)", +"b06bcb40": "getAddressInfo(address,address)", +"b06c76d0": "totalMinedSupply()", +"b06df18e": "transfer(bytes20,address)", +"b06df2ae": "GetMyOrders()", +"b06e1e02": "changeTeamWallet(address)", +"b06e64ca": "maxTokensWithBonus()", +"b06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", +"b06ee044": "totalBasicIncome(address)", +"b06eedf5": "getReferralBonusAmount(uint256)", +"b06f4d00": "AICoin(uint256)", +"b06f8d34": "redeemWallet()", +"b06fd1e3": "CRAWDSALE_START_DAY()", +"b06fe82e": "changeEtherRatioForOwner(uint256)", +"b07048d9": "remove_user(address)", +"b0705e44": "getMySword()", +"b070bbd4": "doCalculateRoom(uint256,uint256,uint256,bytes32,uint256)", +"b070bdc6": "all_obstacles()", +"b071cbe6": "hardcap()", +"b071fa2a": "SENC_HARD_CAP()", +"b0720613": "fundingMinInWei()", +"b072bd10": "usedSummReserve()", +"b0732278": "finishICO(address,address,address)", +"b073e2b7": "testMath()", +"b073f52b": "updateBalance(bytes32,uint8,int256)", +"b0756562": "addLottery(string,uint32,uint32,uint32)", +"b07576ac": "delMin()", +"b0759c3e": "lockInBatches(address[])", +"b0773d12": "payAndRemoveInvestor(uint16,uint256)", +"b07741fd": "refresherFee()", +"b077c09b": "readSample(bytes)", +"b0780bd8": "getDonationStats()", +"b0786de9": "NeptunSupply()", +"b078ffe8": "BitcoinUnicorn()", +"b0792570": "beneficiaryStake()", +"b0799375": "nameValue()", +"b079cf62": "getRandomDragon(uint256)", +"b07a3107": "isOraclizeQueued()", +"b07a6735": "processPrivateFunding(address)", +"b07bbefd": "updateValueAndMint(uint256,uint256,int256)", +"b07be1fe": "createThemedSpinner(string,uint256,address,uint256)", +"b07be207": "calculateTicketPrice()", +"b07c76e8": "LoggedDividend(uint256,string,uint8,string,bool,bool)", +"b07e4e34": "_unpackCycleValue(uint256)", +"b07ed982": "setMaxTokenSupply(uint256)", +"b07ee0d2": "erc20TokenTransfer(address,address)", +"b07f0a41": "exercise(uint256)", +"b07f1fa2": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"b07f3025": "CROWDSALE_ETH_IN_WEI_FUND_MAX()", +"b081b9aa": "propose_beneficiary(address)", +"b081cfc5": "_thresholdOne()", +"b0827f42": "restrictedTokensDate()", +"b082b9c7": "getOrganisationCount()", +"b0837524": "minIcoTokenLimit()", +"b08428c1": "internalCalc(uint256)", +"b08480d4": "finishSettlement()", +"b08496dd": "_newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", +"b08510a3": "setdissolvedcontract(address)", +"b0859b6f": "oraclize_setGasPrice(uint256)", +"b085a5af": "getMyWine()", +"b085b9a5": "Example()", +"b08639e3": "getRepAvailableForExtraBondPayouts()", +"b0867a5c": "joinGameRandom(uint8)", +"b086d5aa": "getUriSetCount()", +"b087b8bc": "getWorkflowCount()", +"b0882c4b": "newETHUSDPrice(string)", +"b0883120": "balanceOfBuyer()", +"b0885dd6": "distributeWithTransferFrom(address,address,address[],uint256[])", +"b0891f4f": "setTokenAgent()", +"b0894aa6": "getDateOfAcceptance()", +"b0898886": "claim_devidend_for(uint256)", +"b08a3619": "registerDepositAddress()", +"b08af3dd": "get_participant_num_of_uses(address)", +"b08b3410": "getStraightReleasableAmount(address)", +"b08ba6a1": "view22()", +"b08bbff0": "isUserAllowed(address,string)", +"b08c2915": "JP_winningHash()", +"b08c7730": "feeGame()", +"b08c9bd1": "refuseSale()", +"b08cfb84": "addWhitelistedAddress(address,address)", +"b08d2718": "ReleaseableToken(uint256,address)", +"b08db494": "toAddress(bytes,address)", +"b08e0d3e": "applyRefund(uint256,bool)", +"b08e0f4a": "manualWithdrawal(uint256)", +"b08f8e1d": "setContractHoldBalance(uint256)", +"b08f965e": "SSA()", +"b090c768": "LogSelectWinner(uint256,uint256,address,uint256,uint256,uint256)", +"b09173f6": "viewAffBonus(address)", +"b091a044": "transferRecord(address,address,uint256)", +"b092145e": "whitelist(address,address)", +"b0927de7": "newRepo(string,address)", +"b0933f25": "fixAdvance(uint256,uint64)", +"b0934d7d": "removeFromBlackList(address,address)", +"b0949833": "NineStandardToken(uint256,string,uint8,string)", +"b0950b8c": "canCloseVoteCommitPhase(address,bytes32,bytes32)", +"b09609d5": "LogMinting(address,uint256,uint256)", +"b097bdbd": "PRESALE_STARTTIMESTAMP()", +"b097c984": "setIEOAddress(uint256,address)", +"b098b86b": "ownsOrSelling(uint256)", +"b098bdba": "getAppeals(uint256)", +"b09938b8": "VormaToken()", +"b0994d4a": "authorizeOperator(address,bool)", +"b099cceb": "makeBet(bool)", +"b09ac6f2": "isUserProduct(bytes32,bytes32)", +"b09ad8a0": "upperBound()", +"b09afec1": "getTokenData(uint256)", +"b09b1a51": "buyUnicorn(uint256)", +"b09bc3bf": "try_to_get()", +"b09c0f30": "rewardWeekly(uint32,uint32)", +"b09c235e": "MargamCoin()", +"b09db392": "addressDevelopers()", +"b09df36a": "getFunctionSignatures()", +"b09f1266": "_symbol()", +"b09f168e": "tokenOfOwnerByRange(address,uint256,uint256)", +"b09f4af5": "executeLock(bytes16,address)", +"b0a0662a": "FIRSTSALE_BASE_PRICE_IN_WEI()", +"b0a08873": "adjustLoanParams(uint256,uint256,uint256)", +"b0a1bfa9": "updateFeeBalance(uint256)", +"b0a1c666": "newComment(bytes32,string)", +"b0a1e2b4": "disputeID()", +"b0a2365c": "percentTokensToSale()", +"b0a254a7": "addStackholder(address)", +"b0a267da": "userTipped(address,bytes32,uint256)", +"b0a54a76": "TN()", +"b0a5a57a": "createEmergencyFundReleaseProposal()", +"b0a5c979": "CheckAmbientHumdtyException(bytes32,uint32)", +"b0a66a84": "creator(bytes)", +"b0a6a5ab": "IoTonToken(uint256,string,string)", +"b0a6d947": "unfreeze(address[])", +"b0a77ef7": "WithdrawToSponsor(address,uint256)", +"b0a8489e": "btycBalanceOf(address)", +"b0a84974": "payedBalancesOf(address,uint256)", +"b0a8be37": "RegCost()", +"b0a91659": "FixProfit()", +"b0a94ef7": "Divest(uint256)", +"b0a9b0ff": "createTeam(string,string,uint256,uint256,address,uint256)", +"b0a9c7f4": "checkGameResult(address)", +"b0aa09f2": "mainSaleStartTime()", +"b0aab296": "getNextNode(bytes)", +"b0aae3fa": "passGateway()", +"b0abbc7b": "setData_23(string)", +"b0ac0ef2": "currentActiveGameID()", +"b0ac4c8c": "getLastData()", +"b0acc531": "reserveWave()", +"b0acd745": "EventCreateStatic(address,uint128,uint256,uint256)", +"b0acde14": "withdrawInternal(address,uint256,address[],uint256[])", +"b0ad38c4": "buildCity(string,uint256[2],uint256[2])", +"b0ad3a5f": "not(bool)", +"b0ae1d64": "getpurchaserAtIndex(uint256)", +"b0aed621": "addJugada(uint256,string,uint256,uint256)", +"b0af768b": "setTokenBurner(address)", +"b0b02c60": "setUpdateOperator(uint256,address)", +"b0b185c7": "allowedForwards(uint32)", +"b0b189ca": "sendToInvestor(address,uint256)", +"b0b24e2c": "ERC()", +"b0b2b499": "test_token_fall_back()", +"b0b315e7": "calculateMaxContributionUsd()", +"b0b3c9a6": "ETHERAFFLE()", +"b0b503f9": "MonyaToken()", +"b0b53a1f": "WSKYToken()", +"b0b60b06": "ZXGToken()", +"b0b773c4": "ESSgenesis()", +"b0b8579b": "hop()", +"b0b92263": "setTotalTokens(uint256)", +"b0b9603b": "saleTokens()", +"b0b99c7d": "createPotato(uint256,uint256,uint256,uint256,address)", +"b0ba621a": "SoapBox()", +"b0bb3759": "XPAAssets(uint256)", +"b0bc4d67": "preserveHolders(address,address,uint256)", +"b0bcc610": "scheduleTransaction(address)", +"b0bcd8f3": "preCrowdsaleOwner()", +"b0bd5888": "transferredTokens()", +"b0bdacc6": "setCoinAddress(address)", +"b0bebdf5": "endICOp1()", +"b0bed0ba": "selfBalance()", +"b0bed1e9": "SMSCoin()", +"b0bf092a": "getSoftCapInWeis()", +"b0bfe169": "changeAirdropLimit(uint256)", +"b0c0552f": "AuctionCreated(address,uint256,uint256,uint256,uint256)", +"b0c13bfb": "addDestroyer(address)", +"b0c1adac": "setPrice(uint256,bool,uint256)", +"b0c20e4a": "setRateProvider(address)", +"b0c2a163": "currentDifficultyWei()", +"b0c2ebfd": "NathalieToken(uint256,string,uint8,string)", +"b0c2ff43": "tokenAccountAddress()", +"b0c35c05": "autoBirthFee()", +"b0c39bbd": "setFreezeIn(address[],bool)", +"b0c42691": "frozenWallet2y()", +"b0c4b3bb": "dateEco()", +"b0c5134e": "forwardEther()", +"b0c577c1": "phase3TokenPriceInEth()", +"b0c6d7df": "clearMonsterReturnBalance(uint64)", +"b0c73bc6": "getInvitor(address)", +"b0c74430": "saysomething()", +"b0c7f709": "kingAutomaticCollectFee()", +"b0c80972": "setBalance(uint256,bool)", +"b0c8d2dc": "updateMeta(uint256,uint256,string)", +"b0c8f9dc": "add(string)", +"b0c95b1d": "SetAccess(address,uint256)", +"b0c9fec7": "ButtonClicked(address)", +"b0ca2e62": "VEC()", +"b0cae18a": "WDNA()", +"b0cb3299": "checkIfOnUncle(uint256,uint256)", +"b0cbaab2": "exp(int128)", +"b0cbc8b9": "callContractFunctionByAddress(address,string,address,address,uint256,uint256,bool,bool,string,string,bytes32,bytes32)", +"b0cbe292": "_extendBadges(uint256,address,uint256)", +"b0cbea9f": "updatePoll(uint256,bool,uint256,uint256)", +"b0cc0596": "getUserOptOut(address,address)", +"b0cc3951": "manualEntry(bytes32,bytes32,uint256,uint256,address)", +"b0ccbf8c": "rageQuit()", +"b0cccbc3": "setFreezeOracle(bool)", +"b0cccc84": "validResult()", +"b0ce8668": "IJC()", +"b0cee590": "TwiceAWeekCoin(uint256,string,uint8,string)", +"b0cf0dcb": "revokeTokenGrant(address,address,uint256)", +"b0cf35f5": "getNewFallbackDeposit()", +"b0d08d3d": "setTxCount(address,uint256)", +"b0d12477": "listMAS()", +"b0d138e8": "bounty_percent()", +"b0d13a25": "retrieveEther(uint256)", +"b0d1a26c": "advisorTimeLock()", +"b0d26478": "setIdentity(uint256,address,address,string)", +"b0d2b936": "_isTxExistWithArgs(bytes32,uint256)", +"b0d3a396": "ADDITIONAL_BONUS_NUM()", +"b0d3ef3d": "isOpenFor(address)", +"b0d4ff96": "getMadeTX(uint256)", +"b0d54bcf": "setTradingFee(uint256)", +"b0d56da6": "ElephantToken(uint256,string,string)", +"b0d60c2e": "rawTransferFrom(address,address,bytes32)", +"b0d65d29": "partialWithdrawal(uint256)", +"b0d66291": "migratebyowner(address)", +"b0d79497": "allowOrRestrictMigrations()", +"b0d7fd9a": "NewListing(uint256,uint256)", +"b0d81f94": "lockTokensForFs(address,address)", +"b0d8a83c": "Osmium()", +"b0d8b51f": "getOwnedTokenIds()", +"b0d997d9": "bitGuildContract()", +"b0d9fef9": "udfVUPDestination()", +"b0dbce71": "setStreamityContractAddress(address)", +"b0dc1666": "DacToken()", +"b0dc63eb": "startWineryProductByRegulator(string,string,string,string,int256)", +"b0dcbce5": "payWithPLAT(uint256)", +"b0dd15a6": "paint_pixel(uint256,bytes3,uint256)", +"b0dd2858": "TokenBuyPresale(address,uint256,uint256,string)", +"b0dd478a": "setCountdown(uint256[5])", +"b0ddaddd": "shareBalance(address,uint256)", +"b0de0c40": "getBalancesList(uint8)", +"b0de1cb7": "publish(uint64,bytes,uint64)", +"b0ded9ce": "fechAllCandidates()", +"b0df5f81": "_computeWings(uint256,uint256,uint256)", +"b0df9e53": "getCards()", +"b0e0346e": "UNLB()", +"b0e09ac0": "test_validShouldThrow()", +"b0e0ef09": "withdrawTokensFrom(address,address,address,uint256)", +"b0e12715": "makeTrade(address,address,uint256,uint256,uint256)", +"b0e16cce": "removedotchtooffer(uint256,uint256)", +"b0e1aaa5": "getNumPresaleTokensBought(address,address)", +"b0e1f553": "whiteListingContract()", +"b0e24364": "CaerusToken(address,uint256)", +"b0e37f79": "isChecker(address)", +"b0e4925c": "BCIA()", +"b0e547e8": "referrerLevel2Percent()", +"b0e572c8": "getStrategy(bytes15)", +"b0e5aa82": "_rememberBlockHash(uint256)", +"b0e5aa89": "bonusStage2SecondDay()", +"b0e657a7": "firstMintRound0(uint256)", +"b0e667a9": "bidSpaceship(uint256)", +"b0e757c5": "GameXChange()", +"b0e849fe": "auctusWhiteListAddress()", +"b0e8cba8": "toggleContractAccessForEverybody()", +"b0e9a1ef": "setHodlerTime(uint256)", +"b0ea1e2e": "START_TS()", +"b0ea8d8f": "getRedeemableTokensStaker(bytes32,address)", +"b0eb5162": "closeGeneralSale()", +"b0ebb261": "withdrawGift()", +"b0ebefbc": "distributeFoundersRewards(address[],uint256[],uint256[])", +"b0ec2bed": "test_8_accessRestriction_UnderscoreAddMember_shouldThrow()", +"b0ecc878": "calculateEthToAfterschool(uint256)", +"b0ecca8f": "LookAtLastTimePerZone(uint256)", +"b0ed439e": "getMaxHolder()", +"b0ed656c": "claim(bytes32,bytes32,bytes32)", +"b0ed9774": "changeTakeoutWallet(address)", +"b0ee60a3": "_addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"b0eeefea": "YANKEES(address)", +"b0eefabe": "setArbitrator(address)", +"b0f07e44": "registerData()", +"b0f0c96a": "hello(uint256)", +"b0f11234": "getMessageCommunicationHash(address,uint256)", +"b0f239e9": "totalCheque()", +"b0f23d80": "SetCountryCode(uint16,string)", +"b0f2b72a": "set_value(uint256)", +"b0f32e55": "ContractFactory(uint8,uint8)", +"b0f42dc4": "isPure(uint256,uint256)", +"b0f471dd": "_partFromProvider(uint256,address)", +"b0f5ae72": "exchangeEtherOnTokens(address)", +"b0f69523": "rentOut(address,uint256,uint256)", +"b0f72665": "multiSigDev(bytes32)", +"b0f7d744": "getBoughtTime(address)", +"b0f85a10": "airEndtime()", +"b0f94b16": "batchFishAquarium(uint256[],address)", +"b0f9ba74": "destroyEternalStorage()", +"b0f9f315": "accountClaimedReward()", +"b0fa4926": "buyLicenseForETH()", +"b0fa5032": "DDToken()", +"b0fb3095": "transferDividendBalance(address,uint256)", +"b0fc2c77": "peaceOf(uint256)", +"b0fc2d72": "grantPurchasedTokens(address)", +"b0fc9bdf": "lilitoken()", +"b0fd035b": "safeWithdraw(uint256)", +"b0fd935b": "registerCertificationDb(address)", +"b0ff4210": "BAFC()", +"b1000f23": "_airdrop()", +"b100ad20": "incremCounter()", +"b102bfbe": "getOwner(bytes)", +"b102f52b": "enterLottery(uint32)", +"b103bb58": "setMaximalInvestment(uint256)", +"b103c1dd": "claimCofounditTokens()", +"b103ef5b": "buyfp(uint256,uint256)", +"b10477c9": "getAntsSinceLastCollect(address)", +"b104c509": "earlyInvestorSupply()", +"b1050da5": "newProposal(address,uint256,string,bytes)", +"b105126f": "initLottery(uint256,uint256,uint256,int256)", +"b1057e9c": "sell2(address)", +"b105be51": "BoonyToken()", +"b105c904": "intrepidVouchersMinted()", +"b1063c19": "setMiBoodleVault(address)", +"b106ef69": "Tutoreum()", +"b1077666": "hitWin(uint256)", +"b107baa1": "minimunBTCToInvest()", +"b107e815": "bet(uint32,uint8[4])", +"b107ea12": "setDefaultAQL(uint256)", +"b1084ce2": "currentNorsefire()", +"b108501f": "WINNER()", +"b10908ff": "ACO_Token()", +"b1091e1b": "Ez()", +"b1099347": "buysTokens()", +"b109bc6d": "getUpVoteCount(bytes12,bytes12)", +"b109e894": "PRICE_VARIABLE()", +"b10c7544": "getCmd()", +"b10c7dc4": "revokeMembership(uint8)", +"b10cf224": "userUnlockToken(uint256)", +"b10d539b": "MergeStatus()", +"b10d5a52": "setTechnicalPercent(uint256)", +"b10d6060": "StorageToken(address,address,address[],uint256,string,string,uint8)", +"b10d6b41": "getDocument(bytes32)", +"b10e4172": "remove(bytes32,bytes32)", +"b10eabe8": "ADDOCoin()", +"b10ec8da": "LogPrepareContribution(address,uint256,uint256,uint256)", +"b10ed487": "minimumInvest()", +"b10f8583": "update(uint256,uint256,bytes32,bytes32)", +"b1103200": "poolEthCap()", +"b1110c29": "createTokenUri(uint8,uint8,uint8,uint8)", +"b1112507": "bonusDeadlineDefault()", +"b112349e": "get_my_dni()", +"b1135686": "votesIter()", +"b113d9dc": "tokensale(address)", +"b11408b7": "free1Of(uint256)", +"b1144c9a": "presaleAllocations(address)", +"b114b96c": "left99(uint256)", +"b11560c5": "removeFromWhiteList(address[])", +"b115d28c": "transferDaxsToken(address,uint256)", +"b1174177": "LogWhitelistRemove(address,uint256)", +"b117a3e8": "kingBank()", +"b118060e": "stringLength(string)", +"b1186efb": "decode(bytes,uint256,uint256,uint256,uint256)", +"b11873d1": "BOSX()", +"b11888d6": "testThrowOnTransferWhenNotCreator()", +"b11894c9": "addBadToken(address)", +"b1194648": "setSaleWeiLimitWithoutKYC(uint256)", +"b1194bc4": "setGlobalDelegation(address)", +"b1199a87": "resetMeter(address)", +"b11a19e8": "toString(bytes32)", +"b11a1b89": "setCoinContract(address,address)", +"b11a2a97": "setEDUPrice(uint256,uint256,uint256)", +"b11a41fb": "AfrFballCoinToken()", +"b11b40a1": "getDna2(uint256)", +"b11c4fd8": "approveAndCallcode(address,uint256,bytes)", +"b11cc099": "winPrize()", +"b11ce2db": "addContractAddress(address)", +"b11d8bb8": "revealVote(uint256,uint256,uint256)", +"b11dd097": "initEmployee()", +"b11e0acb": "supplyAvailable()", +"b11e3889": "bulkDepositTo(uint256[])", +"b11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", +"b11ec3b3": "MENSA1(address)", +"b1202774": "ico4Max()", +"b120c16a": "setReputation(address,uint256)", +"b120e1ef": "setTokenSaleDistribution(uint256)", +"b12155a9": "burnTokens2(uint256)", +"b121a199": "_transfer(address,address,bytes32)", +"b122a0ef": "joinCommunity(uint256)", +"b1233451": "setTerm(uint256,string)", +"b1237eae": "withdrawAmountTo(uint256,address)", +"b123f68b": "LogAddress(address)", +"b12673b2": "token10MstepCAP()", +"b1267579": "totalTokenRaiseWei()", +"b126d0e5": "createAndSellAllAmount(address,address,address,uint256,address,uint256)", +"b126dc4d": "blockIndex(uint64,uint64)", +"b127221d": "ICO_BONUS()", +"b127326e": "masterTransfersEnabled()", +"b1273db1": "batchSetInvite(address[],uint256[],uint256[])", +"b1275f9a": "addPlayer(address)", +"b1276a42": "addCurrencyExchangeRate(uint256,uint8)", +"b1283e77": "markets(uint256)", +"b1288c11": "bytes32ToString(uint16)", +"b128ca5c": "adjustCap(uint256,uint256,uint256,uint256)", +"b12931a6": "removeByValue(address)", +"b129497c": "john()", +"b12a8229": "tokenSaleEndTime()", +"b12b714f": "_add(uint256,address)", +"b12dca5a": "ergebnis(uint256)", +"b12de559": "invalidateOrdersBefore(address,uint256)", +"b12dff65": "relaxFundingCap(uint256,uint256)", +"b12e1449": "reserveEscrow()", +"b12e3e60": "voltTransfer(address,address,uint256)", +"b12e4410": "getTokenAddress(bytes32)", +"b12e5f09": "OpsManaged()", +"b12e9c41": "SYS_Token()", +"b12ed9ef": "FCOIN1122Token(uint256,string,string,uint256)", +"b12f9eab": "finalizeSet()", +"b12fe826": "addMod(uint256,uint256,uint256)", +"b13170d6": "Change_approvePay(address,bool)", +"b1321ed7": "payOutPercentage()", +"b1330ca9": "startVoting(uint256,string)", +"b133f39b": "_shuffleParams(uint256,uint256,uint256,uint256)", +"b13413b0": "allocateTokensToTeamAndProjects(address,uint256)", +"b1343ee9": "paymentsByUserId(uint256)", +"b1344271": "slasher()", +"b1347e9d": "mintsub()", +"b1356488": "getEndDate()", +"b135bbb0": "nextGameId()", +"b1366d5b": "bet(uint256,uint256,address,bytes32)", +"b1369e6a": "toFullUnits(uint256)", +"b13770af": "determinTID(uint256,uint256)", +"b13795af": "GDCNumber3()", +"b138251c": "fetchAllResult()", +"b138d500": "presaleAmount()", +"b138d838": "getContractEarnings()", +"b139275f": "transferto(uint256)", +"b139560b": "getCreateMarketEndTimeValue()", +"b139af17": "startSpaceship()", +"b139f780": "NRB_Common()", +"b13a2e1f": "chargeOwe(bytes32)", +"b13b4f2d": "wipe()", +"b13b6a2a": "_decreaseApproval(address,uint256,address)", +"b13bdfb6": "isAtMost(uint256,uint256,string)", +"b13c7047": "DragonKingTest(address,address,address,address)", +"b13c8fe0": "BILLION_TOKENS()", +"b13d5180": "checkAndCallApprove(address,uint256,bytes)", +"b13ef343": "Vesting()", +"b13fd2b8": "DividendAvailable(uint256)", +"b1401858": "levelOneBonus()", +"b1404198": "LogForwarded(address,uint256,bytes)", +"b1406a33": "buyNac(address)", +"b140bee5": "testFailBuyAfterClose()", +"b1418cf4": "payHouse()", +"b14201d0": "requestForArtistRegistration(bytes32,bytes32,bytes32)", +"b1429863": "test_oneFalseAssertNoMessage()", +"b1432cc3": "CrowdSale_Change_ReceiveWallet(address)", +"b1437e27": "tokenTotal()", +"b143c703": "createBarCodeData(bytes32,bytes32,int256,string)", +"b143c916": "getTeamPayouts(uint256,uint256)", +"b143d6fb": "setRunning()", +"b144a4d8": "DistributionSale()", +"b144adfb": "balance_of(address)", +"b14537b0": "maxContributor()", +"b145a5b8": "isInit()", +"b145c013": "checkPayout()", +"b146ba8e": "changeQuecoinAddress(address)", +"b146bdee": "cancelDigitalContract(string)", +"b14762bc": "setAirDropDestination(address)", +"b14781fb": "BITBalanceOf(address)", +"b14823e1": "logDisputeCrowdsourcerTokensMinted(address,address,uint256)", +"b148313e": "partnerSaleTokensPurchased()", +"b1483eee": "_TARGET_EPOCH_PER_PEDIOD()", +"b14904b4": "BTCET()", +"b14959dc": "setbonusDate(uint256)", +"b1498e29": "insert(string)", +"b149ece0": "joinPool(uint8)", +"b14a44ac": "_unregisterArtist(address)", +"b14cf5e0": "changeManager(address,address)", +"b14d703f": "Bitsonalite()", +"b14debe4": "getEthPhiRate()", +"b14e7bc1": "_isOperatorForPartition(bytes32,address,address)", +"b14ec275": "_createHero(uint256,uint256,uint256,uint256,address)", +"b14ecf18": "BlackSwan()", +"b14edac5": "destructo()", +"b14f2a39": "changeTreasury(address)", +"b14f6439": "finshCrowdsale()", +"b14f8432": "hasValidSubscription(bytes32,address)", +"b15089b1": "unlockBonusTokens(uint256,uint256,uint256)", +"b151c0c8": "ModuleRegistrar(address)", +"b15201b2": "MIN_TIME_EXPLORE()", +"b1523087": "_transfer(address,uint256,address)", +"b1527bd9": "CYFM()", +"b152f19e": "getFirstSchedulableBlock()", +"b152f6cf": "TOKEN_SUPPLY()", +"b152fbd1": "lockingRatio()", +"b1536051": "_contractFallback(address,address,uint256,bytes)", +"b154224e": "TimeLockMultisig(address,address[],uint256)", +"b1542d39": "_createCrab(uint256,uint256,uint256,uint256,bool)", +"b1546194": "TimeBoxToken()", +"b154dea6": "NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID()", +"b154f47c": "dev3Wallet2Pct()", +"b1557c2c": "lastContract()", +"b155c7d6": "devTokensIco2()", +"b155d434": "FINTIFLUSHKA()", +"b15651ff": "emissionPrice()", +"b156f79b": "FeeAddr2()", +"b1574b38": "toggleActive(string)", +"b157528b": "getERC20(address,address,address,uint256)", +"b157add3": "bonus_()", +"b157bfab": "VerEstadoSocio(uint16,uint32)", +"b157c5cd": "setJudge(address)", +"b15868eb": "GetVersions()", +"b15897cc": "setfreeze(bool)", +"b158a23f": "betOpen(uint256,string,string,string,string,bool)", +"b158b63f": "getBillOwner()", +"b1597517": "getPoolState(uint256)", +"b1598725": "CultureTravelFoundationAddr()", +"b159bcff": "COMPANY_ACCOUNT()", +"b159beac": "MINIMUM_QUORUM()", +"b159d61b": "addSellerSig(string,string)", +"b15a3647": "trade(uint256,uint256[3],bytes32,bytes32,uint8)", +"b15a72d8": "wagerPool13()", +"b15aa5b7": "getSignHash(bytes32)", +"b15addec": "Test1()", +"b15b2c29": "GetContractStateEarlyTerminatedByTenantSecDep()", +"b15d6f35": "requestChangeInsurer(address)", +"b15dc523": "minFundInEther()", +"b15dcc25": "query(address,bytes2,uint256)", +"b15fbfe6": "getFromAmountBooks(address)", +"b16020a0": "STBIToken()", +"b160a86b": "setKycHash(bytes32)", +"b1610080": "TravelNote()", +"b1610d7e": "VOTING_PERIOD()", +"b16219c6": "feeWithdrawTokenAll()", +"b1622818": "softWithdrawRewardFor(address)", +"b162a382": "updateName(address,bytes32)", +"b163cc38": "addBalance()", +"b1643e96": "changeFeeEVOT(uint256)", +"b1648152": "setBetMinMax(uint256,uint256)", +"b1649a2d": "cancelOrder(address,address,address,address,bytes32)", +"b1652b2f": "playerRollDice(uint256,address)", +"b16562fe": "fipsRegister(address,bytes)", +"b165a332": "getPercentageBonusForIco(uint256)", +"b1662d58": "setModule(address,bool)", +"b16661bf": "joinAgreement(bytes,uint8,bytes32,bytes32)", +"b166b55a": "LogRemainingHalvingSubsidy(uint256,uint256)", +"b166c1ba": "sendProfit(address,uint256)", +"b167c34e": "getTxAtIndex(uint256)", +"b167d512": "allowedSince()", +"b167fe1b": "getExploreItem(uint256)", +"b168da8a": "getCustodianName(address)", +"b1699e2e": "C(bool)", +"b16a4a52": "TokensUnfrozen()", +"b16a867c": "summary()", +"b16ab3a3": "emergency_token_withdraw(address,address)", +"b16afaf6": "OChain()", +"b16b1e28": "getAddressField2()", +"b16b8485": "setExchangeStart(bool)", +"b16bd58f": "maxTokenlossValue()", +"b16c09f0": "clearIssuanceData(address)", +"b16c9e59": "flexibleReward()", +"b16d0839": "RootsToken()", +"b16d0e38": "IBG(string,string,uint8,uint256)", +"b16d1538": "nonEthWeiRaised()", +"b16d22a0": "StopPaymens()", +"b16d2fd1": "winnerTicket()", +"b16d8622": "maxICOSupply()", +"b16dd130": "baseKernel()", +"b16deab2": "CentrallyIssuedToken(address,string,string,uint256,uint256)", +"b16eaafa": "PetsToken(address)", +"b16f4a3a": "GPaid()", +"b1700e61": "trackAddresses(address)", +"b17076b2": "RemoveProofOfOwnership(bytes32)", +"b1718455": "NUM_COIN_PER_AXIE()", +"b171ae40": "ethSold()", +"b171b18f": "triggerInvestment()", +"b171dee6": "_setCategories(address,uint256,uint256)", +"b17216f5": "mintForwarder(uint256,bytes32,address)", +"b17231ac": "sendTokens(uint64,uint256)", +"b1723215": "TestPersandToken()", +"b17346fd": "finalizeSeedSale()", +"b174734c": "pendingOwner1()", +"b175a0d2": "BONUS_TIER_3_LIMIT()", +"b17607e9": "costoken()", +"b1766617": "ganTokenNoLongerForSale(uint256)", +"b176a0b4": "RabbitArena(address)", +"b1782d18": "tgrNumber()", +"b17922f6": "onlyRoles(address,uint16)", +"b179882d": "RESERVED_PRESALE_CAP()", +"b179f4d8": "G5()", +"b17a56f7": "isTrustedLink(address,address)", +"b17a98b6": "withdrawAllToWithdrawalAddress()", +"b17a9e11": "confirmCustomer(uint256)", +"b17aa196": "_generateNewRandom()", +"b17acdcd": "collectFees(uint256)", +"b17b94c1": "testSystem()", +"b17c3f99": "confirmation(uint256)", +"b17c6ab8": "cancelSaleOrder(uint256)", +"b17d5938": "submitPool(address,uint256)", +"b17d8646": "EpisodeManager(address,address)", +"b17df316": "setMigratedBalance(address,uint256)", +"b17e8c4f": "tokensForplutonics()", +"b17eb9dc": "supporthill(uint256)", +"b17f0c1c": "tokenSaleWeiCap()", +"b17f5332": "EnterCode(uint256)", +"b17fc36d": "setSoftCapDeadline(uint256)", +"b18019bd": "_executeVote(uint256)", +"b1816f60": "TEMTicket(address,uint256,uint256)", +"b181954d": "addAttribute(string,bool,bytes32,string,string)", +"b18196f4": "GenexiToken()", +"b181a8fc": "resetContract()", +"b181d3d5": "GMF()", +"b1826ee7": "getLevelUpFeeByLevel(uint256)", +"b1829738": "setContractorsProfitAddress(address)", +"b184be81": "drain(address,uint256)", +"b18588fb": "updateGravatarName(string)", +"b185a8a4": "ChangedTokens(address,uint256)", +"b186eed8": "dealerDay()", +"b1871886": "growthReserve()", +"b1874b99": "INVESTMENT_USER1()", +"b187984f": "disableTransfer()", +"b187b6b1": "getBlockValueBalance()", +"b187bd26": "isPaused()", +"b1881225": "KEYS(uint256,string,uint8,string)", +"b188c70d": "feeMode()", +"b1895823": "mintMultiToken(address[],uint256[],uint256)", +"b189ad2a": "testErrorUnauthorizedAfterTransfer()", +"b189fd4c": "hash(uint256)", +"b18a02a4": "getPlayers(uint8)", +"b18a714e": "getReservedBalance(address)", +"b18a78e3": "currentBetAmount()", +"b18af4e3": "addProduct(bytes32,uint256,string,string,string)", +"b18bca4d": "countAbstentions()", +"b18c6847": "manualUpdateBalances()", +"b18d0c80": "getImageWidth(uint256)", +"b18de618": "EndQuestion()", +"b18e0ab8": "FooWallet(address[],uint256)", +"b18e4f5f": "appendKeyValue(string,string)", +"b18ef18c": "GlobalChain()", +"b18efff3": "GenesisCatsAdded(bytes5[16])", +"b18f1943": "ownersLength()", +"b1905727": "getPermissionManager(address,bytes32)", +"b19068c7": "minimumWager()", +"b19129b1": "addCustomertoBL(address,address)", +"b19183f2": "HodlReleased(bool)", +"b191f79d": "isJobStart(uint256)", +"b19208f3": "getPreIcoFunds()", +"b192da2d": "burnt()", +"b1933a0b": "getAllSharedAccounts(bytes32)", +"b1934151": "tokenScaleFactor()", +"b1936c24": "presaleOngoing()", +"b194073a": "getUmkaAddress(address)", +"b194c73a": "EpinToken(address,address)", +"b196aabb": "maximumBaseContribution()", +"b196f378": "weiLiquid()", +"b1972567": "lockAddresses(address)", +"b1976a02": "Get()", +"b197997a": "getCurrentYearMinedTokenCap(uint256)", +"b1987c7d": "NotaryPlatformToken()", +"b1989a2b": "calculateFadeoutToPool(uint32,uint256[9])", +"b198ef45": "checkVotingForAllowTransfer()", +"b1999937": "leapYearsBefore(uint256)", +"b19a4540": "allocatedEth()", +"b19a5f62": "placeOpenPurchaseOrder(address)", +"b19ab052": "withdrawEtherManually()", +"b19ab945": "maxBurnThreshold()", +"b19b1550": "FintechnicsPublic()", +"b19b2162": "refundFailedAuctionAmount()", +"b19bc02e": "Griddeth()", +"b19c0f5e": "registerForCompetition(address,address,address,address,address,uint256,uint8,bytes32,bytes32)", +"b19d134d": "reviseNumAvailable(uint256,uint256)", +"b19d4916": "setCompte_2(string)", +"b19d632b": "publish(bytes32,uint256)", +"b19e288c": "set_pauseCWC(bool)", +"b19f30e2": "changeKYCAddress(address)", +"b19faed8": "doSucceedingApprove()", +"b19fde5a": "getPresaleAllocation(address)", +"b1a00406": "getactendlen()", +"b1a0570d": "mintBIX(address,uint256,uint256,uint256)", +"b1a06ee7": "setPreSaleTokenExchangeRate(uint256)", +"b1a08010": "orderTrader(bytes32)", +"b1a11c92": "trashedTokens()", +"b1a1318a": "HolderAddress(uint256)", +"b1a1b3bc": "get_chronus()", +"b1a2bbd1": "TOTAL_TOKEN_CAP_OF_SALE()", +"b1a329d7": "optionPoolTotal()", +"b1a34e0d": "addClaim(uint256,uint256,address,bytes,bytes,string)", +"b1a3c6b4": "Balances_of(address)", +"b1a56055": "add_OEM()", +"b1a6676e": "isBurnActive()", +"b1a681c8": "receiveEtherAndData(bytes)", +"b1a6afd3": "declaration()", +"b1a7c005": "hashDelegatedTransfer(address,uint256,uint256,uint256)", +"b1a82e8f": "Jaak()", +"b1a8b25a": "returnBalanceToMainAccount()", +"b1a96135": "DMT_TotalSuply()", +"b1a997ac": "poke(address)", +"b1a9bd77": "settlementIsRunning()", +"b1a9f8a4": "_toString(bytes32[4],uint256,string)", +"b1aa6dfa": "finishInitOwners()", +"b1aac629": "addSoundEffect(uint256,uint8[])", +"b1ab0999": "supportKickoffQuorum()", +"b1ac478f": "_generateBattleReward(uint256,int32)", +"b1ad4c48": "getInvestorDividendsAmount(address)", +"b1adc241": "BalanceDB()", +"b1ae9017": "refundsall()", +"b1ae9887": "lastTreeId()", +"b1afe96b": "setMaxInvestorContributionInWei(uint256)", +"b1b2aef3": "testInsertProductIntoCart()", +"b1b30533": "contractTokenWithdrawToFreeTokens(address,uint256)", +"b1b3d3f6": "allow()", +"b1b5537c": "activateCycle(uint256)", +"b1b68cce": "getListIndices(address)", +"b1b68fad": "makeTradable()", +"b1b6a6ed": "addPremineAllocation(address,uint256)", +"b1b6aecb": "SLMToken()", +"b1b79120": "setFightFactor(uint8)", +"b1b7c88f": "getPreSaleBonusRate(uint256)", +"b1b82922": "_getProviderRateHistory(uint256,uint256,uint8)", +"b1b96fdf": "giveTokens(address[],uint256)", +"b1b9e78d": "acceptOffer(address,uint256)", +"b1ba6ad7": "privateSaleAddress()", +"b1bb1a60": "serviceGroupChange(address,address,uint8)", +"b1bb4d35": "proxyMint(uint256,bytes32)", +"b1bb5855": "maxTicket()", +"b1bb5fde": "runningDebt()", +"b1bb7e0f": "verificationPeriod()", +"b1bbc6f5": "onlyBouncerSetGasRefund(bool)", +"b1bbd453": "winnerWithdraw(uint256)", +"b1bcc1b7": "depositOrder()", +"b1bd7683": "maxAvailableForSale()", +"b1bd7b80": "transEther()", +"b1be53e9": "getCancel(bytes32)", +"b1beb3c0": "NonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2],uint256)", +"b1bf0510": "getJobsBoard(uint256)", +"b1c0e063": "cancel(address[3],uint256[4])", +"b1c0f2df": "maxWithWhitelist()", +"b1c16a2b": "HARD_CAP_TOKENS()", +"b1c19c4d": "LetItPlayTokenPromo()", +"b1c23704": "myMethod3(string)", +"b1c23ce6": "saleContributions()", +"b1c25586": "lockTokens(address,uint256)", +"b1c30210": "setValidationData(uint16,uint16,uint8,uint8,uint8,uint8,uint16)", +"b1c32b2b": "updateAngelLock(uint64,bool)", +"b1c3c97e": "increaseTotalWinningStake(uint256)", +"b1c4b70d": "confirmLawfulness(bool,bytes32)", +"b1c5f992": "setAffiliateRate(uint256)", +"b1c62e8a": "createProductionUnit4()", +"b1c6517a": "LookAtNumberOfPlayers()", +"b1c6f883": "recordCreate(address,uint256,int256,bool)", +"b1c73525": "getKeccak256(uint256)", +"b1c8ac52": "minEthToContribute()", +"b1c90f6f": "ClaimingTimeLimit()", +"b1c9cc6c": "getSBounty()", +"b1c9fe6e": "phase()", +"b1ca3b3a": "_icoTokens()", +"b1cb0db3": "expires()", +"b1cb267b": "getE()", +"b1cb4217": "betContractUP()", +"b1cb43bf": "tokenToExchangeSwapInput(uint256,uint256,uint256,uint256,address)", +"b1cb574b": "setEarlyParticipantWhitelistMultiple(address[],bool[],uint256[],uint256[])", +"b1cb9425": "private_kill()", +"b1cc1d4d": "depositAndBundle(uint256)", +"b1cc38d0": "setShortPositionExpired()", +"b1cc4348": "placeWager()", +"b1cc7c60": "mintInterest(uint256)", +"b1cd221a": "redeem(address,uint256,string)", +"b1cd79de": "setlockaddress(address,uint256)", +"b1cdbe2a": "ELTC()", +"b1ce0a9b": "nextPayoutBlock()", +"b1ceb746": "acceptContribution(address,uint256)", +"b1cedd89": "PayPerkToken()", +"b1cee330": "arrayOfTokensByAddress(address)", +"b1cf404b": "sendTokensToOneAddress(address,uint256)", +"b1d006d6": "extendICO(uint256)", +"b1d0073b": "updateMaxNumMC(uint256)", +"b1d05422": "SendEmail(string,string)", +"b1d06c46": "moduleHandler(address[])", +"b1d0b725": "sellStatus()", +"b1d0fbc5": "uraniumplusToken()", +"b1d11f23": "setVesting(address,uint256,uint256,uint256,uint256,uint256,bool)", +"b1d17c98": "distributeTokens(address)", +"b1d1a159": "curRefNumber()", +"b1d1fed9": "multisigDXF()", +"b1d2372b": "JumboToken(string,string,uint256,uint256)", +"b1d27e3f": "setSmallPrice(uint256)", +"b1d3ea61": "salesContract()", +"b1d45fad": "HoneyBadger(address)", +"b1d4e357": "addTokenToFund(address,uint256)", +"b1d5114c": "Hawk2(uint256,string,string)", +"b1d51d31": "pay(uint64,address)", +"b1d66003": "getRareItemInfo()", +"b1d6a2f0": "saleAgent()", +"b1d7ee21": "discountMultiplier()", +"b1d919ed": "LogCertifierDbChanged(address,address)", +"b1d9647e": "ecoBuilder()", +"b1db1cac": "gameGetTokenBankrollList()", +"b1db9c2e": "WordCoin()", +"b1dbb87a": "DEVELOPER_FEE_PERCENTAGE()", +"b1dbeb37": "PRTC()", +"b1dce014": "buildTeamMapping(uint256)", +"b1ddf52f": "getAuctionByIndex(uint256)", +"b1de4f0f": "setOwnerMaster(address,address)", +"b1de74d6": "LOG_SpinsContainerInfo(bytes32,address,uint256)", +"b1e045f7": "sponsoredJackpotMax()", +"b1e05e8a": "extractBytes32(bytes,uint256)", +"b1e19d45": "whitelistBurnFrom(address,uint256)", +"b1e1c18f": "addToManagementWhitelist(address)", +"b1e1ff3a": "tokenMetadata(string)", +"b1e254c7": "mock_clear()", +"b1e2a116": "playersToTotalBets(address)", +"b1e2cb03": "newLottery()", +"b1e2e1dc": "rollRoom(uint256)", +"b1e2e28c": "YUPIE_PER_ETH_SALE()", +"b1e3301f": "checkFlags(uint16,uint16)", +"b1e35242": "getMeOutOfHere()", +"b1e37921": "setDefaultMintingAddress(address)", +"b1e3dd57": "availableTokensAmount()", +"b1e50702": "setConfigSetupContract(address)", +"b1e5e2b7": "openBox(uint256)", +"b1e776e3": "updateMarketCap(uint256)", +"b1e834b0": "totalPreSaleTokenIssued()", +"b1e8aea8": "turnBackTime(uint256)", +"b1e8cca8": "openWormhole()", +"b1e9292f": "min256(uint256,uint256)", +"b1e9932b": "claimAndConvertFor(address[],uint256,uint256,address)", +"b1e9b21d": "deletePokemon(uint256)", +"b1e9ee64": "addressChangeRequests(address)", +"b1eac37e": "jackpotAmount()", +"b1eb2c10": "getForecast(bytes32,bytes32)", +"b1ebcce1": "setTxcode(uint256,uint256,uint256)", +"b1ecb343": "recentPlayersBack()", +"b1ed795e": "withdraw_all_eth()", +"b1ed8c99": "stageFourEnd()", +"b1eefcc1": "_changeOwnership(address,address,uint256)", +"b1ef2e97": "setXPROMO_MULTIPLIER(uint16)", +"b1efbd6f": "setMinimumEthereumToInvest(uint256)", +"b1efc755": "operationAmount()", +"b1efeece": "assignedSupply()", +"b1f0a72f": "getSubmittedStateRoot(uint256,uint256)", +"b1f0e40b": "finanVestingStage()", +"b1f253f6": "theDividendsOf(bool,address)", +"b1f25ffe": "calcFutureDebt(address,uint256)", +"b1f29590": "totalTulipCount()", +"b1f2e537": "setIsTokenTransferOpen(bool)", +"b1f32231": "awe()", +"b1f35246": "setActualMinerAddress(address)", +"b1f395ea": "addPauser_(address)", +"b1f3b35c": "listeners(uint256)", +"b1f3ec87": "SafeasyToken()", +"b1f42430": "ZitKOINCrowdsale(uint256,uint256,uint256,address,address)", +"b1f4ff90": "filters()", +"b1f525c6": "counter(uint256)", +"b1f56187": "debugBuy()", +"b1f5b6da": "setTokensLimit(uint256)", +"b1f6bd0d": "deleteInvoice(bytes32)", +"b1f7cec8": "sendRemainingETH()", +"b1f8100d": "proposeNewOwner(address)", +"b1f864fb": "diamondIndexToOwner(uint256)", +"b1f9275f": "ENJ_UNIT()", +"b1f99cd5": "blockDotCoinbase()", +"b1fa884d": "FixedChain()", +"b1fc0792": "ICO_LEVEL_5()", +"b1fc756f": "getRefBonusPercent()", +"b1fc8466": "MAX_AVAILABLE_JOINTTOKENS()", +"b1fca956": "endTimeRound1()", +"b1fe1b4a": "weiRaisedICO()", +"b1fe3eef": "buyTokensFor(address,bytes32,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"b1fe5f58": "BIDDED()", +"b1fe933d": "incrementRedemptionAddressCount()", +"b2016bd4": "collateralToken()", +"b2019b8a": "EmtCrowdfund(uint256,uint256,string,string)", +"b202a9f4": "ERC223MintableToken(string,string,uint8,address)", +"b203bb99": "balance(address,address)", +"b204bb5d": "AddTicket()", +"b2057a6f": "inquireDividentAmount()", +"b205feb7": "stringToUint(string,int256,string)", +"b2067bd6": "ETHs(uint256,string,uint8,string)", +"b206eb42": "getImageDescriptor(uint256)", +"b207e32b": "testChangeRole()", +"b2085903": "Winner(address,uint32,uint32,uint32,uint256)", +"b208a600": "Nordic()", +"b20953f2": "isFiscal(bytes32)", +"b20a459d": "ZZZToken()", +"b20a4abb": "LogCustomSale(uint256,uint256,uint256,uint256)", +"b20a8779": "transferPreICOCollected()", +"b20b0ef5": "getAvailableCardCount()", +"b20b8403": "updateClaimFee(uint256)", +"b20baa00": "RegisteredToken(address,uint256,address,address)", +"b20bf95b": "setYearlyUSDSalary(address,address,uint256)", +"b20c0e43": "PHASE1_RATE()", +"b20c9f8b": "sellMaximumPossibleAmountOfTokens()", +"b20cc590": "allowedRoles(uint8)", +"b20cedc3": "getAdmin(address,bytes32)", +"b20d30a9": "setDailyLimit(uint256)", +"b20d3b1c": "vestingReleased(uint256,uint256,uint256,uint256,uint256)", +"b20de8f3": "TECHNOToken()", +"b20debeb": "Duckcoin()", +"b20e5a79": "getdecimals()", +"b20f41ab": "updateBaseComparable(int256)", +"b21089dc": "removeInvestmentPackage(uint256)", +"b210dac9": "confirmTransactionSig(bytes32)", +"b210e434": "functionThree()", +"b210f639": "PlatformAutonomyAddr()", +"b2112ce6": "beerContract()", +"b21287ae": "ToOwner()", +"b212a23e": "ethConvertRate()", +"b2138754": "verifyDocument(bytes32,bytes32[])", +"b213d77d": "editBalanceOf(address,address,uint256)", +"b2141ba4": "assertCompareBalance(uint256,uint256)", +"b21457e3": "getInvestorByIndex(uint256)", +"b214691c": "setAgent(address,address,bool)", +"b2148d38": "getBasicExtraBallotFeeWei()", +"b214ecda": "createGift(uint256,string,string)", +"b214faa5": "deposit(bytes32)", +"b215814b": "emtpyTo(address,address)", +"b215a879": "cg()", +"b215d2c9": "getCertainProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"b215f30c": "changeWhitelist(address,address)", +"b2163482": "lockedAt()", +"b216c15d": "copyPopRequest()", +"b2170394": "getLastPaperFromContract(address,address)", +"b2173afd": "setzAddressesArray(address[2])", +"b21800d0": "TokenTransaction()", +"b2185bb1": "drawWinner()", +"b2186b05": "CrowdsaleSoftCapReached(uint256)", +"b2189168": "updateGame(uint256,string,uint256)", +"b2189d5a": "GetUserPELOBonus(address)", +"b218cf15": "registerToPool(address)", +"b2194fd8": "UinfoToken()", +"b219610a": "getRegionPurchasedAt(uint256)", +"b219c852": "firstStageTotalSupply()", +"b219e87b": "deleteCandidateByIndex(uint256,address)", +"b21a8be0": "isSuccessfulIco()", +"b21bce4c": "vote(bytes,bool)", +"b21c2475": "getWeiForRefund()", +"b21c2a68": "changeBZRxTokenContract(address)", +"b21ce425": "amountToTransfer()", +"b21cee7d": "get1TokenBuyPrice()", +"b21e4ebd": "itemOfOwnerByIndex(address,uint256)", +"b21ed44e": "percentForSale()", +"b2205a38": "xcertKyc()", +"b2210c91": "cashBalanceOf(address)", +"b22175db": "GetLikeCount()", +"b2225351": "verify(uint8)", +"b222cb0b": "selfRegister(bytes32)", +"b2237ba3": "setRatio(uint256)", +"b223d285": "releaseVanityUrl(string)", +"b2240566": "EOJ()", +"b2246f43": "Result(bytes32,address,uint256)", +"b224c40a": "vote(uint8,string)", +"b22528e4": "getUserEventsByIds(address,uint256[])", +"b225c23f": "updateCredit(address,uint256,uint256,uint256)", +"b225e08a": "whiteListTime()", +"b226ec29": "Gov(uint256,string,uint8,string)", +"b2280b48": "chairmanOf(uint256)", +"b2281442": "setMaxAbsKindness(int256)", +"b2288649": "lotteryBalance()", +"b22a7bfa": "migrateBalances(address,address[])", +"b22b2b66": "setKYCFull(address[])", +"b22c14c7": "multiPartyTransfer(address[],uint256[])", +"b22d9f50": "GallerionCoin()", +"b22dd140": "assetStaker(bytes32)", +"b22dd2ca": "R1()", +"b22e6fee": "get_pre_kyc_iconiq_bonus_denominator()", +"b230642d": "createSubscription(uint256,uint256,uint256)", +"b23096e9": "tokensTeamBlockedTimestamp()", +"b230eda1": "stageTwoSupply()", +"b2310cc5": "payRequstedSum(uint256,uint256)", +"b231e5cd": "STAGE_FOUNDATION()", +"b2322c40": "RabtestToken()", +"b2353d69": "updateRightLottery(address)", +"b2355b42": "setHomeDailyLimit(uint256)", +"b2356ad4": "tradingFeePercentage()", +"b2357392": "NewToken(uint256,string,uint8,string)", +"b23605eb": "PALToken99(uint256,address)", +"b2369f12": "getLockAccounts()", +"b236a3c9": "updateminAmount(uint256)", +"b236b068": "totalAlloctedToken()", +"b2378428": "LetsbetToken(address,address,address)", +"b237f7d4": "burnTokens(address)", +"b238724b": "setPendingValue(uint256,uint256)", +"b2389da8": "balanceOfFlurbo(address)", +"b238ad0e": "getDaysInMonth(uint8,uint16)", +"b2394040": "rateThirdWeek()", +"b239e2f1": "adventureHandler()", +"b23a0b90": "Henfruit()", +"b23a31e4": "getBrickIds()", +"b23b369b": "getPokemonLevel(uint256)", +"b23b4dd4": "incrementOwnedArea(address,uint256)", +"b23bc656": "setOverdraft(uint256,uint256)", +"b23c1f19": "mintTokenRewards(address,uint256)", +"b23c298c": "getNumberOfPayoutsForStaker(uint256,uint256,address,uint256)", +"b23d36b0": "isCheckStage()", +"b23d4854": "setTokenContractAddress(address)", +"b23db1be": "subtoken(address,uint256)", +"b23e35bf": "readLoveStory(bytes16)", +"b23f3594": "updateTeam(address)", +"b2401e1e": "nextDisbursement()", +"b2406905": "whoHasTheBiggestDick()", +"b240798e": "withdrawBet()", +"b241a020": "freeGameLockedToken(address,uint256)", +"b241b3b5": "getHarvestOperation(string,address)", +"b241ff03": "passPeriod()", +"b2427755": "minTrade()", +"b242c9c3": "getAmountRegistered()", +"b242e534": "transferOwnership(address,bool)", +"b24374a2": "omg()", +"b2444a70": "getParentA(uint256)", +"b2449d65": "YES()", +"b244b268": "SeeleCrowdSale(address,address,address)", +"b244c3f3": "ddftFundDeposit()", +"b2450b15": "openSoldTokens()", +"b24539a9": "getIcoTime()", +"b245923e": "proveIt(bytes32)", +"b245d6da": "coinIssuedIco()", +"b245fc92": "findNextMonth(uint256,bytes)", +"b2461b15": "upgradePermissionedSC(address,address)", +"b24626e9": "setAODevTeamAddresses(address,address)", +"b2467742": "CryptoPhoenixesCivilWar(address,address)", +"b2471e8e": "Fart(string)", +"b2478cfe": "recoveredIndex(address)", +"b247c525": "amountNeedToBeLock()", +"b247ed92": "getAllShipStats(uint32[])", +"b2481048": "newGlobalChanceNo()", +"b248e436": "IsBoilerExpire(address,uint256)", +"b248e4e1": "orderPriority(bytes32)", +"b2494df3": "getModules()", +"b2498a1f": "setPercent1(address,uint256)", +"b249bf01": "sendtoC(uint256)", +"b24a5425": "_setRoleCapability(uint8,address,bytes4,bool)", +"b24b09fd": "RefundEvent(address,uint256,uint256)", +"b24bf695": "getInvestorsAddresses()", +"b24c0a38": "setPreSaleParameters(uint256,uint256,uint256,uint256)", +"b24c35e4": "getRoundBetOrigin(uint256,uint256,uint256)", +"b24cb812": "removeAllowCnsContract(bytes32,address,bytes32)", +"b24ce5fa": "thirdCheckpoint()", +"b24d0c84": "addDat(string,string)", +"b24d8de2": "failedTemperaturesAt(uint16)", +"b24dced3": "setTransferFeeMin(uint256)", +"b24ec0b0": "LogStudentCertified(address,uint256,address,bytes32)", +"b250ce21": "CMC()", +"b251eb05": "MemberAdded(address)", +"b2523b67": "getReferenceAddressesOfCode(bytes32)", +"b252720b": "healthCheck()", +"b252ff2b": "threeHotHoursTokensCap()", +"b25302f6": "WineSupplyChain(address)", +"b25310b0": "DdosToken()", +"b25461ec": "cancelRequestPause()", +"b2549717": "setCalFactor(uint32,uint32)", +"b2550a53": "maxCyclePlayersConsidered()", +"b2552fc4": "annualInterest()", +"b2561417": "setMinimumGoal(uint256)", +"b2563a1b": "getMinimumLimit()", +"b256b093": "reservedForFounders()", +"b256dd6e": "WhosTheBossNow()", +"b2570b1c": "getBattleCardInfo(uint256,uint256,uint256)", +"b258eacf": "totalSupplyInt()", +"b2594125": "SurgeToken()", +"b2596a67": "levels(uint256)", +"b2596acd": "setForRent(uint256,uint256,uint256)", +"b25a00fd": "nativeToErcBridgesAllowed()", +"b25a7a9d": "calculateOwnership()", +"b25a80f4": "StoppableShareable(address[],uint256)", +"b25af26f": "applyForVisa(uint256,uint256)", +"b25ba6a7": "refundContribution(address,uint256)", +"b25bb3a7": "ownersGeneration()", +"b25c22b2": "approveMotion(uint256)", +"b25c372e": "prolongate(uint256)", +"b25cdccf": "fundingState()", +"b25e6181": "UnanimousConsent(address[])", +"b25e8973": "LBN()", +"b25ebbad": "_issueBitmark(address,bytes32,int256,uint256)", +"b25f539d": "registerUser(address,address,string,uint256)", +"b25f692a": "validateAndGetPurchaseTokens(address,address,uint256)", +"b25f8596": "PUBLIC_SALES_1_PERIOD_END()", +"b25fa92c": "adminAddRole(address,string)", +"b26041a1": "DELL()", +"b260c42a": "activate(uint256)", +"b26140f3": "BoBToken()", +"b261ce9c": "IsThisPublic()", +"b261f82f": "releaseAll(uint256,uint256)", +"b26209f6": "remainingFundsToEndAuction()", +"b2627ec0": "buyPriceAt()", +"b263c00c": "setV_R2(uint256)", +"b263f638": "minimalRewardedBalance()", +"b263f865": "usdPerHundredEth()", +"b263fb3f": "updateBasePriceAndMarketCap(uint256,uint256)", +"b2667cd0": "currentInvestment()", +"b266b828": "_sendTo(address,address,address,uint256,bytes,bytes,bool)", +"b266c661": "startDates(uint256)", +"b267f998": "addressFundBonus()", +"b2683aa6": "numberOfWagersToFinalTimeout()", +"b2684945": "usdSale(address,uint256)", +"b2686774": "sendFunds(uint256,address)", +"b269681d": "destination()", +"b269d584": "insertValue(uint256)", +"b269eaff": "imageGenerationCodeMD5()", +"b26b4b6a": "feesOwedToOperator()", +"b26b4f25": "changePrice(string)", +"b26c9779": "changeApproval(address,bool)", +"b26d9d6e": "IntermediateVault(address,uint256)", +"b26e4aed": "test_set_get_PremiumFactors()", +"b26eafe4": "lockUntil(uint256,string)", +"b26ee15c": "interfaceFreezeTokens(address,uint256)", +"b26ee5fe": "getTotalF4()", +"b26f72a4": "withdrawJOYTokens()", +"b26f78d3": "acceptNextManager()", +"b26f7efc": "startGame(uint256,int256,address[])", +"b270b209": "BlocklanceContractHolder()", +"b27201ca": "investedFrom(address)", +"b272fa2d": "getMyHipster()", +"b273952a": "_isUserInternalLock()", +"b2741997": "BAIRON()", +"b274e48e": "setSaleStatus(bool,bool)", +"b2758411": "setUserDisplayName(string)", +"b275a9d8": "PackageContract()", +"b275ba3a": "registerUser(address,address,string)", +"b2774b17": "createOrSet(string,uint256,string)", +"b2775b02": "genBaseStats(uint256)", +"b2787e0c": "changeTransferAgentCA(address)", +"b2788540": "manuallyConfirmDonation(address,uint256,uint256,string,string)", +"b278b8df": "updateVoteInfo(address)", +"b27913a6": "LedgerUpdated(address,address)", +"b2792811": "getFreelancersJobContracts(address[],uint256)", +"b27a1f63": "horseFS(uint256)", +"b27b0755": "earlyBirdsSupply()", +"b27b7dd1": "removeStage(uint8)", +"b27b8415": "dailyHashExpires()", +"b27bcaea": "startBetBlue()", +"b27c0ccb": "ETASToken()", +"b27c4b92": "buyCore(address,uint256)", +"b27c4cde": "ethereumhorse()", +"b27d31de": "bulkTransferEther(address[],uint256[])", +"b27daded": "processorAddress()", +"b27e7244": "addDestinationChain(bytes8,address)", +"b27ea08d": "tokensRemainingPreIco()", +"b27eb3e5": "airDrop(uint16)", +"b27f829e": "removeNetworkMember(address)", +"b27f88fb": "endFifthWeek()", +"b280055b": "roleSetup(address)", +"b280a7e7": "changeSender(address)", +"b280a96e": "setUseAddr(address)", +"b280f180": "setRates(uint8,uint8,uint8)", +"b2813f19": "withdrawOrderTo(address,uint256)", +"b28175c4": "stor()", +"b281c478": "currentCluster()", +"b28241f9": "getCityPopulation(uint256)", +"b283f2f1": "accessoryDataContract()", +"b28448f4": "NewDeposit(uint256,uint256,uint256,address)", +"b2849055": "resetBalanceOfValues()", +"b284fc29": "investorsTokensPercent()", +"b285041d": "Satoshi()", +"b2852bec": "saveCash(address,uint256)", +"b2855b4f": "setFeeAddr(address)", +"b285643e": "leaderboardDataContract()", +"b2860396": "setstart(uint256)", +"b286a346": "SimpleAIToken(uint256,string,uint8,string)", +"b286ba8c": "heapSort(uint64[])", +"b2879d45": "setDRSCoinAddress(address)", +"b288d748": "reduceLockingTime(uint256)", +"b2893ba5": "next_balance()", +"b28945a5": "setApprovalForAllByContract(address,address,bool)", +"b28b3a6e": "famedStarNameToIds(bytes32)", +"b28bb2a0": "setStorageTime(uint256)", +"b28bf6af": "decreaseClaimsBalance(address,address,uint256)", +"b28c461c": "TOKEN_RATE_BASE_RATE()", +"b28c48bb": "NecashToken()", +"b28c747d": "getSentTransfersCount()", +"b28e5904": "Xflip()", +"b28eed93": "Listed_NotValidated(uint256,string)", +"b28f1433": "BHNNetwork()", +"b28f1ee3": "reserveSeats(uint256[],uint256)", +"b28f4c60": "isEmptyString(string,string)", +"b28f53fe": "setMinimumTokensForPurchase(uint256)", +"b28f6fa3": "isOnAuction(uint64)", +"b28fc973": "getEthBalanceOf(address)", +"b28fd472": "miaomiao()", +"b290ae06": "shrToken()", +"b290b9ce": "resetAllDelegations(bytes32)", +"b290e45b": "BonusIssued(address,uint256)", +"b2910826": "set_payments_processor(address)", +"b29120fe": "getHeartPrice()", +"b291820b": "Etherich()", +"b29212b5": "delAudit(address,address)", +"b2923cff": "TAXRATE()", +"b2931096": "hasClaimed(address,uint256)", +"b29387e5": "payWinnerManually2()", +"b295a00e": "getLimit()", +"b2963db6": "closeDailyInvest()", +"b29775c1": "isDiscountValue()", +"b297a35d": "_redeem(bytes32,address,address,uint256,bytes,bytes)", +"b298247e": "gift(uint256)", +"b2983281": "largeCapLimitOf(address)", +"b2984858": "ico1cap()", +"b2990de1": "getByToCount(uint256)", +"b299708d": "dspRegistry()", +"b29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", +"b29a08f7": "ContractMadePermanent(string)", +"b29a3cfd": "getPI_edit_13()", +"b29a61c1": "investorBalances(address)", +"b29ae23f": "getDateOfSignature()", +"b29b3511": "getSpaceshipUpgradeTotalSoldByModel(uint16,uint8)", +"b29b5366": "setRentable(bool)", +"b29b5be7": "getMintAdminApproval(address,address)", +"b29b686a": "isWarrantyValid(address,string,string)", +"b29c2493": "token(uint256,string,uint8,string)", +"b29c62f4": "myAccount()", +"b29cbcec": "LogChangeMultiSigAddress(address)", +"b29d7914": "getRefResults(uint256)", +"b29e201c": "spread(address,address[],uint256[])", +"b29e9909": "sCVars()", +"b29f0835": "doIt()", +"b29f2e77": "sendWarriors(address,address,uint256)", +"b29f731d": "__tinyOracleCallback(uint256,bytes)", +"b29f7f9e": "removeODEMClaim(address,bytes32)", +"b29f9d3b": "unfreezeAccountWithToken(address,uint256)", +"b2a02ff1": "seize(address,address,uint256)", +"b2a072c6": "passUndistributedEther()", +"b2a082b9": "suicaId()", +"b2a1449b": "out()", +"b2a1a022": "getGasPrice(string)", +"b2a1c540": "setMemberId(address,uint256)", +"b2a1de22": "whitelistedCount()", +"b2a29615": "Criptomedicina1()", +"b2a2a4e2": "complianceContract()", +"b2a3fd05": "WithdrawEth(uint256)", +"b2a4c897": "createTable()", +"b2a4efd4": "MASTERY_THRESHOLD()", +"b2a5a012": "setTokenReturnRate(uint256)", +"b2a5bc70": "_tokenLeft()", +"b2a68466": "OZENToken(uint256)", +"b2a6d21b": "COMPANY_RESERVE()", +"b2a7239d": "sklToken()", +"b2a780e4": "BITCLAVE_AMOUNT()", +"b2a7d1b7": "AssetsExplorer(address)", +"b2a840c0": "enable(string,uint256)", +"b2a87fc3": "targetToAchieve()", +"b2a8a6f3": "sendFLC(address,address,uint256)", +"b2a8ff45": "Tokens_Per_Dollar()", +"b2a91457": "OIA()", +"b2a9ab9c": "getTotalBraggedVolume()", +"b2aa8291": "MAINSALE_CAP()", +"b2aa9f0f": "increaseTotalSupply(address,uint256)", +"b2aac51f": "lookupUser(string)", +"b2aae005": "getBalanceOf(uint256)", +"b2ab526d": "approveUsers(address[])", +"b2ab530e": "testFailRetractLatestRevisionNotUpdatable()", +"b2ab70ba": "getMaxIterationsForRequestDividends()", +"b2ac1bbe": "buyInternal(address)", +"b2ac5407": "GMRTokenManager(address)", +"b2acbc13": "isOwner(bytes8,address)", +"b2ad1993": "BalanceNum()", +"b2ad35c0": "distributor_address()", +"b2ad3d44": "updateComplianceProof(bytes32,bytes32)", +"b2aeb260": "setHiringDone(address,uint256,address)", +"b2af9362": "isValidSignature(uint256,bytes)", +"b2b02109": "partnerSaleTokensAvailable()", +"b2b0aefb": "verifyPendingShares(uint256[],uint256[],uint256,uint256[],uint256[],bytes,bytes,uint256)", +"b2b106d6": "participate_in_arbits_presale_crypto()", +"b2b158e8": "setHolderAmount(uint256)", +"b2b28679": "getDelegationID(address,address)", +"b2b3abb1": "removeOrderFromList(bytes32)", +"b2b45df5": "init(address,string,string)", +"b2b4ae25": "isEntitled(address,address)", +"b2b5d93c": "Stop(bytes32)", +"b2b5f0cf": "IOBT()", +"b2b5f86f": "getLocality()", +"b2b5fbf5": "subDroneItem(address,uint256,uint256)", +"b2b6e37e": "_min256(uint256,uint256)", +"b2b74405": "PizzaParlor(address)", +"b2b7d0ce": "HakataCoin()", +"b2b877c1": "MithrilValkyrie()", +"b2b95adc": "finalizeChangeInsurer()", +"b2b96792": "proposeSettlement(uint256,uint256)", +"b2b98ed2": "Winner()", +"b2b99ec9": "removeNode(address)", +"b2ba0aa5": "feesPer10000()", +"b2ba97de": "team_and_angel_beneficiary()", +"b2bab02a": "startIssue()", +"b2bae511": "initSiteRewards(uint256)", +"b2baede4": "getListingContractAddress()", +"b2bb419f": "ActivateEscrow(uint256)", +"b2bb72bf": "getIndexInfo()", +"b2bbac16": "firstWeekPreICOBonusEstimate()", +"b2bbae69": "payForVote(address,bytes32,uint256)", +"b2bbe75e": "Sunshine()", +"b2bc2f68": "Kitcoins()", +"b2bc6c19": "PRICE_11()", +"b2bcf495": "_releasableAmount(address)", +"b2bd96b2": "AcceptsFUNDS(address)", +"b2bdc6b3": "adminAddMonument(string,uint256,uint16)", +"b2bdfa7b": "_owner()", +"b2be8180": "TombCore()", +"b2be8a0d": "getUserWalletTokenBalance(address,address)", +"b2bea9c1": "releasePurchasedTo(address,uint256)", +"b2bec979": "cashOutCar(uint32)", +"b2bf731d": "SPECTRE_BOUNTY_ADVISORY_DEV_TEAM_ALLOC()", +"b2bfd948": "checkNumbers(uint8[3])", +"b2c09c92": "gameWithdrawFrom(address)", +"b2c15f29": "updateLastTime(bytes32,bytes32)", +"b2c1d7dc": "BGToken()", +"b2c2196f": "MxRecordChanged(bytes32,address)", +"b2c26f94": "updateParameterValue(bytes32,uint256)", +"b2c2921a": "TeamBox()", +"b2c3429d": "VouchCoin()", +"b2c3609b": "Play(uint8)", +"b2c50b92": "retryWinners()", +"b2c5b208": "_returnReturnData(bool)", +"b2c60132": "wingsWallet()", +"b2c60690": "finalizeVoting(address)", +"b2c62d46": "endClaim()", +"b2c652f3": "getMarkets(uint256[128])", +"b2c6b6dd": "preSaleContract()", +"b2c7c90d": "bitcoin_ratio()", +"b2ca38fe": "GAP()", +"b2ca3ec4": "securityGuard()", +"b2cad9b7": "getLevel(uint32)", +"b2cb0a3d": "VESTING_TEAM_DURATION()", +"b2cb1ebd": "Typhoon()", +"b2cb26c1": "addMaster(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"b2cb3a9b": "getCurrentShare(address)", +"b2cb3e93": "COSSDemo()", +"b2cb9f05": "Total_Deposited()", +"b2cc0eb3": "SpaceCoinToken(address,string,string,uint256,uint256)", +"b2cc36fc": "restoreFromColdWallet()", +"b2cc4165": "getOrderAmount(address,address,uint256,address)", +"b2cca39d": "pausedTime()", +"b2ccc4ab": "getFameBalance(address)", +"b2ccda0e": "setPrimaryOperator(address)", +"b2cd67ef": "Klein()", +"b2cda083": "PassCommitteeRoom(address)", +"b2cefd2f": "LiteToken()", +"b2cf9814": "assetManagerIncome(address)", +"b2cfdfda": "stringToArray(string,string)", +"b2d111f6": "maxGasPriceValue()", +"b2d1289b": "DepositManager(address)", +"b2d138d2": "rspScience()", +"b2d14545": "fbytes2(bytes2)", +"b2d1573f": "getUserRank(address)", +"b2d1f9be": "buyStar(uint256,string,string)", +"b2d23b7d": "fetchVoteResult()", +"b2d27832": "vestingPeriodTime()", +"b2d2c1de": "withdrawProfit(address,address)", +"b2d318f7": "VeteranCoin(uint256,address)", +"b2d37165": "startMinting(bool)", +"b2d37e95": "remove_order(uint32)", +"b2d3e85e": "isPeriodAllTokensSold(uint256)", +"b2d444df": "TIM6(uint256,string,uint8,string)", +"b2d48237": "refferalsRateBonus()", +"b2d4ae5e": "__callback(bytes32,string,string)", +"b2d5362d": "contractTokenBalance(string)", +"b2d5ae44": "getRefund()", +"b2d5e8b1": "VALUE_OF_UTS()", +"b2d6bc83": "fundCapital()", +"b2d6fd0b": "id_for_address(address,address,address)", +"b2d8efe0": "crowdsaleOpen()", +"b2d96b81": "safeAssetData(uint256)", +"b2da302b": "Thrill()", +"b2dad155": "trim(string)", +"b2dad25d": "getNameOfAddress(address)", +"b2dae885": "SpecialArrays()", +"b2db1d23": "regularMaxPerPerson()", +"b2dd5c07": "registered(address)", +"b2dda6b5": "totalEthReleased()", +"b2de1a3f": "CONTRACT_PROVIDER_ADDRESS()", +"b2df8456": "sponge(uint256[9])", +"b2df8bad": "getAvailableCoinsForCurrentStage()", +"b2dfa399": "ZRX_TOKEN_ADDR()", +"b2e02430": "divRate()", +"b2e02fc1": "addRefund(uint256,uint8)", +"b2e0baee": "SunContractIco(uint256,address)", +"b2e235c2": "BitBall()", +"b2e2c1c9": "updateCondition(uint256,uint256,uint256,uint256)", +"b2e2c75f": "totalUsed()", +"b2e30440": "Ducaat()", +"b2e33c8f": "getCountPlayerByTrackId(uint256)", +"b2e357b4": "isLinkClaimed(address)", +"b2e37e18": "extDestroyNinja(uint256)", +"b2e3d212": "IndexCoin()", +"b2e4c183": "preICOBonusPercent()", +"b2e4d35d": "validate(uint256,uint256,uint256,uint256,string,string,string)", +"b2e545ac": "TokenGreeneum(uint256,string,uint8,string)", +"b2e5d3ba": "getBtcRate()", +"b2e6ceeb": "takeOwnership(uint256)", +"b2e752cb": "MINCAP_TOKENS()", +"b2e774ce": "deliver(address,uint256,bytes32)", +"b2e7c288": "recipientString()", +"b2e85b67": "getPlayerStatus(address,uint256)", +"b2e94e78": "stage1_start()", +"b2ea073f": "setGeneScienceAddress(address,address)", +"b2ea088d": "returnUnsold()", +"b2ea0a39": "changeMinDonationLimit(uint256)", +"b2ead7bb": "fundsOut()", +"b2eafd57": "getRewarder(uint256)", +"b2ebe1c5": "_determineCharacterType(uint256)", +"b2ed26f6": "addresses3(uint256)", +"b2ee95f9": "dateRelease6()", +"b2eed299": "getPOOL_edit_28()", +"b2ef089a": "isStateTokensale()", +"b2ef48b9": "buyTokensWithWei(address)", +"b2f05133": "set_trader(address)", +"b2f0575c": "FooMintToken(int256)", +"b2f094de": "BittechPresale(address)", +"b2f106c0": "determineReward(bytes32)", +"b2f1bb5b": "tellMeASecret(string)", +"b2f1fe99": "refundManyTransaction(uint256[])", +"b2f2303a": "BreakbitsERC20Token()", +"b2f24225": "set_minDETsPerReturnMoreThan(uint256)", +"b2f2588b": "sortNumbers(uint8[3])", +"b2f2b06d": "_createCar(string,address,uint256)", +"b2f3319e": "ToggleTestMode(bool)", +"b2f3d299": "loadFunds()", +"b2f3ded4": "allMarketsFinalized()", +"b2f40531": "shutdownTransactions(address)", +"b2f4bdb0": "createdTime()", +"b2f5a54c": "getInvestors()", +"b2f7e989": "sourceTokens()", +"b2f9c5b9": "canTransfer(bytes32,address,uint256,bytes)", +"b2fa1c9e": "isComplete()", +"b2fa9206": "cancelIco()", +"b2fadc78": "_getStorage()", +"b2fb3b90": "cancelActiveAuctionWhenPaused(uint40)", +"b2fcb395": "GoldenBullChainToken()", +"b2fce4ea": "delegateVote(int256,address)", +"b2fd3a7d": "getHardcapUsd()", +"b2fed358": "getsafemode()", +"b2ff7945": "setARR(address)", +"b3002be7": "burnNSPs(address,uint256)", +"b30054b4": "set_address_GIC(address,address)", +"b3007dc6": "rateFirstWeek()", +"b302ea1e": "setRaindropAddress(address)", +"b302ec4b": "LocklistedAddress()", +"b30300d7": "_increaseAllowance(address,uint256)", +"b3034371": "unilateralRuling(uint8,uint256,uint256)", +"b30387a4": "gen0Count()", +"b30390ce": "registerItem(uint256,uint256,bytes32,bytes32,bytes32)", +"b303cec0": "addAccountReader(address)", +"b303dcbd": "Owned()", +"b303f9f7": "releaseHTOSupply(address)", +"b304376c": "begins()", +"b30475b6": "totalWeiClaimed()", +"b304b2e1": "allocated()", +"b305836f": "feeWithdrawTokenAll(address)", +"b3066d49": "setContracts(address,address,address)", +"b3070c12": "ADVISOR_REWARD()", +"b3074b8a": "SUTokenContract()", +"b30779b1": "payCommission()", +"b3082d25": "CreateCards(uint256,uint256,uint256,uint256,uint256,bool)", +"b30841d9": "totalEras()", +"b3097a08": "heldTotal()", +"b30ab349": "getContent(address)", +"b30bca06": "sum(uint8[])", +"b30cf414": "unpauseSALE()", +"b30d1bb8": "isDisableEther()", +"b30d95a0": "changeBonus(uint256,uint256,uint256,uint256,uint256,uint256)", +"b30dbc67": "DeNetToken()", +"b30e4533": "ABBCToken()", +"b3113d3f": "hardCapPrivate()", +"b311db2f": "setAccountType(address,uint256)", +"b311ee0c": "refundClaimDeposit()", +"b312dc91": "currentPayout(address,address,bool)", +"b31394cb": "_checkThenTransfer(address,address,uint256)", +"b3139d38": "updateSlasher(address)", +"b3141c69": "localsReptoken(uint256,string,uint8,uint256,string,string)", +"b314a984": "burnRemain()", +"b3154db0": "check(address,address)", +"b31567d3": "LogRemoveWhiteListed(address)", +"b31597ad": "redeem(bytes32,bytes32)", +"b315e453": "multiWithdrawReward(uint256[])", +"b31610db": "getIndex(address)", +"b317d031": "STATUS_PAID()", +"b319c6b7": "cooldownTime()", +"b319e9fa": "distributeMultiple(address[],uint256[])", +"b31a17f0": "FtC()", +"b31a4047": "_convertBlueprint(string)", +"b31a404a": "withdrawOnNoAvailablePlan()", +"b31a4e0d": "allocatePresaleTokens(address,uint256,uint64,uint64)", +"b31ab1c3": "disconnectOrderUser(address,address,uint256,uint256,address,address)", +"b31ba590": "PlayerCreated(address,uint256)", +"b31c5c64": "kscDecreaseApproval(address,uint256,string)", +"b31c710a": "oldToken()", +"b31cbe9a": "getAlice(uint256)", +"b31cd1be": "secretTaken(bytes32)", +"b31cf984": "getProgram()", +"b31d61b0": "whitelistAddress(address[])", +"b31d7730": "presaleFinalizeAgent()", +"b31d8a6f": "FreeTokenAdded(address,uint256)", +"b31dcaad": "timeToUnlockDDHHMM()", +"b31e1d4d": "delegateVote(address)", +"b31e822b": "isAllowTransfer(address)", +"b31e8889": "setParticipantWhitelist(address[],bool)", +"b31f8f93": "tokensLeft()", +"b32022e8": "calculateKebabBuySimple(uint256)", +"b3204b8b": "setParent(address,address)", +"b3204cc3": "setLineUpEnable_pool(address,uint256)", +"b3205410": "getCustomerInfo(address)", +"b3206453": "destination(bytes4,bytes)", +"b3209136": "WakaWakaCoin()", +"b320f459": "removeBid(uint256)", +"b32142a0": "getProgramPercent(uint256)", +"b3215499": "ICOBonusPercent3week()", +"b3219d17": "calculatePurchaseBonus(uint256,uint256)", +"b322269e": "GameStart(uint256,uint256)", +"b32381ee": "addmoney(address,uint256,uint256,uint256)", +"b324816a": "createPaymentsSplitting(address[],uint256[],uint256)", +"b324c62a": "fastTokenSale(uint256)", +"b324e80d": "depositEscrow(address,uint256)", +"b324fb6b": "startTimePreICO()", +"b3253e0f": "lastScheduledTopUp()", +"b326124b": "tRegSaleStart()", +"b326c189": "hasOpenCommissionerAuction(uint128)", +"b32776e1": "getSigner(address,string,address,uint256,bytes32,bytes32,uint8)", +"b3280830": "addLibrarian(address,address)", +"b3292ff0": "addSuperAdmin(address)", +"b329bf5c": "cancelTransfer(bytes32)", +"b32b2805": "getArmyFullData(uint256)", +"b32b664f": "wantItForFree(uint256)", +"b32b8e2c": "contains(uint256[],uint256)", +"b32c41d7": "crowdsaleTargetUBO()", +"b32c65c8": "contract_version()", +"b32c6a25": "GenesisToken()", +"b32cb292": "setStartICO(uint256)", +"b32cec45": "CROWDSALE_ACCOUNT()", +"b32d01c2": "modify_bytes(bytes)", +"b32dbcd8": "getNumKnights()", +"b32dc51c": "totalPhase1Donations()", +"b32e02e8": "_getRarePlusRarity(uint32)", +"b32e4207": "setzString(string)", +"b32f19f9": "showFreezedTokensAmount(address)", +"b32f4b9a": "Barbie()", +"b32fab4e": "moneyback()", +"b3311309": "SingularityTest5()", +"b3335e6b": "setICOStartDate(uint256)", +"b33381fe": "calcAmountEther(address,uint256,uint256)", +"b333adfc": "coursesLength()", +"b333b0ee": "_stake(bytes32,uint256,uint256,address)", +"b333ce0d": "icoFinish()", +"b3344593": "trackingNo()", +"b334e90b": "tadpoleReq()", +"b334fd07": "createFincontract(bytes32)", +"b3350f03": "forbiddenAction()", +"b33527d2": "CreateBAT(address,uint256)", +"b3369866": "indexOf(uint128[],uint128,bool)", +"b336ad83": "getByName(string)", +"b336f8a3": "GetNumberOfRigs()", +"b33712c5": "unpauseContract()", +"b337a20d": "verifyLockSignature(bytes32,address,address,uint256,uint256,bytes32,bytes)", +"b33926cb": "owner_withdraw(uint256)", +"b33a10de": "cards_titanium(uint256)", +"b33a2ea0": "lastBlock_v18Hash_uint256()", +"b33a8a11": "setTokenReference(address)", +"b33aca37": "Mcoin(uint256,string,uint8,string)", +"b33adbf1": "darPremio()", +"b33c24b2": "createERC20TokenNetwork(address,address,uint256,uint256)", +"b33c4b1f": "end_now()", +"b33cb8f6": "CrowdsalePaused()", +"b33ceb2c": "AddGossip(address,string)", +"b33e8ee5": "exchangeTokensById(uint256,uint8,uint8)", +"b33fcc7a": "multiTransfer(uint256[])", +"b340a972": "getaddr(address,uint8)", +"b340d8cf": "encodePriceFeed(uint256,uint256,uint256,uint256)", +"b340f2b4": "showAssetDetails(bytes32)", +"b3413d9f": "_forwardFunds()", +"b34195a3": "ICOTokensInvested(address,uint256)", +"b3423eec": "requestWithdraw()", +"b34244e8": "setCBaddress(address,address)", +"b34253be": "FundsVault(address)", +"b342d7c0": "genEOS()", +"b34362be": "setParter(address,uint256,uint256)", +"b3446f85": "registerPlayer(string)", +"b3447ac9": "getBytes32Values(bytes32)", +"b344e002": "saleDeposit()", +"b3470e97": "addHashes128()", +"b3472edb": "getMaxProfit(uint256)", +"b3477201": "createPadlock(string)", +"b3480369": "_getWaitingBlocks(uint256)", +"b3481e61": "updateTeam(address,uint32,uint8[],uint32[])", +"b3485dca": "UpdatePrice(uint8,uint32)", +"b3487a71": "getBetWaitEndEther()", +"b348ddde": "ETH750on54()", +"b3490bfc": "allowTransfer(address)", +"b34937c9": "feedMessage(uint256,string,string)", +"b349b973": "_init()", +"b349dbdc": "nfsPoolTransfer(address,uint256)", +"b349f6c7": "attemptSpend(uint256)", +"b34b2c26": "Simpletokenq()", +"b34b4f69": "XingchenToken()", +"b34b5825": "getAvailablePacks(bytes4)", +"b34c28de": "calculateBurnGoldFee(uint256,uint256,bool)", +"b34c3610": "assert1()", +"b34c8afb": "getBaseAmount(address)", +"b34d471d": "bulkCreateLamboSale(uint256,uint256,uint256)", +"b34debac": "canUseResource(address)", +"b34e0c47": "getUserScore(address)", +"b34e7b9d": "getgamecardlength()", +"b34e97e8": "login()", +"b34f094f": "INTToken(uint256,string,uint8,string)", +"b34f0e5e": "CLAIM_STAGE()", +"b34f407d": "setPerformer(address)", +"b34f43c7": "SVDelegationV0101_1(address)", +"b34f594b": "setNodePrice(uint256)", +"b34f7b50": "_generateDiscipleSale(uint256,uint256,uint256,uint256)", +"b350723f": "_guarantedBid(uint256)", +"b3508654": "addController(address,bool)", +"b3508783": "TOKEN_MAX()", +"b35176e2": "show_number_of_days_since_bank_opening()", +"b3521607": "XYCCTEST()", +"b3527cfe": "Follow(uint256,address,uint256)", +"b3528158": "DASHABI(uint256)", +"b352867c": "setFreeExtension(bytes32,bool)", +"b3535fe2": "_setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", +"b35376b5": "getDiamond(string)", +"b3539c44": "getMintForReportingParticipantTargetValue(int256)", +"b3549265": "coloredTokenCount()", +"b3559460": "getGenerationSize(uint256)", +"b3562e6e": "getCrowdsaleTier(uint256)", +"b356a3a5": "PLATFORM_GROWTH_VESTING_AMOUNT()", +"b3570116": "mintIfNecessary(uint256)", +"b357a028": "SCISSORS()", +"b357a552": "claimAuctionableTokens(uint256)", +"b357b72f": "setMaxMarketOffers(int32)", +"b35861b4": "setERC20Address(address,address,uint256,uint256)", +"b358755e": "testerCanNotReentrant()", +"b35893f3": "setExporter()", +"b358e375": "JobsManager(address)", +"b359cedd": "getTime(string)", +"b35ae7e8": "ViotToken()", +"b35e7d45": "setCriticalBucket(uint256)", +"b35eeb46": "GenHeliosCoin()", +"b3610f37": "destroyCar()", +"b36117b2": "create18FilmsTokens()", +"b36216d3": "allTokensDecimalsBalancesWeights()", +"b3621e1a": "addAddress(address[])", +"b36234c2": "AltruismMode(address,uint256,uint256)", +"b36292eb": "TestingCoin()", +"b3629f79": "get_proposal_by_row(uint256)", +"b3643e3a": "createSale(address,uint256)", +"b36752ee": "addressFoundersShare()", +"b36763c9": "_owoAmount()", +"b367fb11": "platformTokens()", +"b36877c9": "DragonKing(address,address,uint8,uint8,uint8,uint16[])", +"b368cb10": "getProviderInvitedUser(uint256,address)", +"b369940c": "wingsETHRewardsPercent()", +"b3699d0b": "withdrawedTeamCounter()", +"b369af71": "intervalOf(uint256)", +"b36a06b5": "preSaleFirstBonus()", +"b36a0b15": "getSignDetails(uint256,uint8)", +"b36ada82": "mintingOracle()", +"b36af005": "Menu04()", +"b36b9ffd": "bountyManager()", +"b36ba252": "getSellOrderPrices()", +"b36c1284": "MaxSupply()", +"b36c14fe": "getWhitelistUser(address)", +"b36c8022": "UnfreezeAccount(address)", +"b36c973e": "payOutWinner(address)", +"b36d829b": "getwinningaddress01()", +"b36df681": "ExecutableBase()", +"b36eaad8": "createUserMeme(address,uint256,string,uint256)", +"b36f2c30": "maxWeiUnverified()", +"b36f8e8f": "allowManager()", +"b36fef76": "promoFishCommission()", +"b3710a80": "infraEthWallet()", +"b37139e6": "reduceCD(uint256,uint256)", +"b37217a4": "getRandomNumber(uint256)", +"b372bd31": "getCommissionBalanceWEIInfo()", +"b373a48b": "getOneself()", +"b373a61c": "priceRandomFight2Death()", +"b373a6cd": "sendTokens(address[])", +"b373f167": "transfer(address,uint256,bytes,string,bool)", +"b3745afa": "changeAllocator(address)", +"b3746849": "buyTokens(address,bytes)", +"b374db9a": "secondsTimeLockedDefault()", +"b3753107": "gweiBBDPriceInWei()", +"b375603c": "raffleId()", +"b375a72c": "getHashPicture(bytes32)", +"b375b95a": "getMaxRankingSpots()", +"b3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", +"b37610ad": "getKey(uint16,uint16)", +"b37681fd": "SetPlayerID(bytes32,uint16)", +"b376feba": "_unsafeTransfer(address,uint256)", +"b378e89b": "CreateToken(address,uint256)", +"b37983e2": "gasRequired()", +"b379d235": "setFlowerAuctionAddress(address)", +"b37a336d": "VESTING_DIV_RATE()", +"b37a5de7": "throughputToday()", +"b37a6a2c": "restartPrivatePlacement()", +"b37bcd94": "discountPeriod()", +"b37c191b": "rank(uint256)", +"b37c7dc0": "sub256(uint256,uint256)", +"b37cc2f0": "getUserEventsLength(address)", +"b37d61f8": "checkMyBalance()", +"b37d97b5": "addMany(address[])", +"b37dcce2": "trainingFeeMultiplier()", +"b37edb66": "FundingEntity()", +"b37edfb6": "checkChangeOwnerArgs(uint256,uint256)", +"b37f17ee": "migratingAmountBooks(address,address)", +"b3803956": "showPlayerFullScores(address)", +"b380b0d4": "setProfitPercentage(bytes32,uint256)", +"b380beac": "setTotalWizzPandaOf(uint256,uint256)", +"b380d365": "resolveDisputeSeller(string)", +"b381cfe5": "iotpowerToken()", +"b3822da8": "getContents(uint256[])", +"b38260fe": "totalAngelCardSeries()", +"b382b0d6": "createContract(uint256,uint8,uint256,uint256,address,address,address,address,address)", +"b38336de": "getCoinAmount(uint256)", +"b3834ed4": "getRefunded()", +"b383616d": "setSupplyAgent(address,uint256)", +"b38400ff": "getEndedGames()", +"b38415f3": "getConfigBytes(bytes)", +"b384abef": "vote(uint256,uint256)", +"b384e9b4": "incentivisationFundAddress()", +"b3850b2a": "total_reward_amount()", +"b385e7b6": "playerPrizes(address,uint256)", +"b387ed6d": "getCompetitionStatusOfHopefuls()", +"b387ef92": "currentOwner()", +"b38854be": "ownable()", +"b38928c5": "Vineyard(address)", +"b38b2261": "addValidation(bytes32)", +"b38bf811": "setMessagesSigned(bytes32,bool)", +"b38c1504": "TOTAL_LBTOKEN_SUPPLY()", +"b38c7e3a": "getStrong()", +"b38ce3e7": "deedIds(uint256)", +"b38d3ab4": "attackeePrizeByToken(bytes32,address,address)", +"b38de8ce": "DelGoods(uint32)", +"b38f974a": "buyFood(uint32)", +"b38fb813": "crowdsaleInit()", +"b38fced1": "availableThemedSpinners()", +"b3908dc1": "IPXToken()", +"b390c0ab": "burn(uint256,uint256)", +"b391983c": "getLimitAndPrice(uint256)", +"b3922c42": "TOKEN_INVESTORS()", +"b3924a58": "GreenMining()", +"b3927eeb": "Expended()", +"b3935caa": "trivenewstestToken()", +"b3936f95": "basis(uint256,uint256)", +"b3938edc": "changeETHUSD(uint256)", +"b393a5b5": "setKingdomCreationFeeWeiRP(uint256)", +"b393a759": "ipfsSet(string)", +"b393fa46": "fundersClaimed()", +"b3942cbd": "setTransferAllowed(bool)", +"b3947c17": "muldiv(uint256,uint256,uint256)", +"b395cb3c": "vest(address,uint256,uint256,uint256,uint256)", +"b395f278": "view_get_blockNumbers()", +"b3965083": "Pothereum(uint256,string,string)", +"b3965cec": "RefundPeriodStarted()", +"b3966dc9": "init(address,uint256,uint256,uint256,address,address,uint256)", +"b396d7ad": "heapSort(uint256[])", +"b3970f27": "updateHpbNodeBatch(address[],bytes32[],bytes32[])", +"b397657d": "endInitialization()", +"b397ffd8": "m_foundersTokensStorage()", +"b39852f9": "createGame(uint256,uint256,uint256,uint256,uint256,uint8)", +"b398924d": "RangeGameProcess(address,uint256)", +"b398e098": "setMaxETHAutoContributions(uint256)", +"b3997703": "Loser(string,string)", +"b399a9f8": "setFungibleTokenAddress(address,address)", +"b399b0bc": "remaining(address)", +"b39a64cd": "getNumCalled()", +"b39a69a3": "withdrawPROV(uint256)", +"b39a7fbe": "setBattleDeciderAddress(address)", +"b39ad6e0": "DonatorInteract(string)", +"b39c2944": "requiredAuthorities()", +"b39c8739": "Strikes()", +"b39ca258": "createOrder(address,bytes32,bytes32,address,uint256,uint256,uint256)", +"b39d49fe": "sellNapkins(uint256)", +"b39d66d0": "LiipCoin()", +"b39d6b7b": "DukatToken()", +"b39dcb1d": "showDepositEther()", +"b39e12cf": "contractManager()", +"b39e1c6c": "withdrawDirectDebit(address)", +"b39e7bc1": "RealEstate(uint256)", +"b39f4171": "payForOther(address)", +"b39f4483": "setPOOL_edit_28(string)", +"b3a06e75": "airdropSingleAmount(address,uint256)", +"b3a0b1ef": "basicInfoGetter()", +"b3a0e188": "firstReserveTimeLock()", +"b3a1362a": "setMessage(int256,string)", +"b3a1584a": "toAddr(bytes)", +"b3a18632": "stakeAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", +"b3a196e9": "presaleSupply()", +"b3a1ca52": "addressFundDigitalMarket()", +"b3a26071": "LiquetLottery()", +"b3a27842": "getEntity(uint256)", +"b3a2a6c0": "setOfficialWebsite(string)", +"b3a2a999": "nextWithdrawal(bytes16)", +"b3a3c4f6": "identifierToRentPeriod(uint256)", +"b3a3d671": "addAllowanceToRecieveToken(address[])", +"b3a3dda3": "clearExpiredAssignments(address,uint256)", +"b3a41c65": "power(uint256,uint256,uint256,uint256,uint8)", +"b3a56077": "vestingPeriodLength()", +"b3a61c80": "tryNextTimeRange()", +"b3a6d09d": "tgrSettingsPartContributor()", +"b3a7cbf6": "XRRsale()", +"b3a810f7": "tournamentOwnersCut()", +"b3a844ae": "tokenClose()", +"b3a9afb7": "getQuickBuyEtherToken()", +"b3a9b5f6": "multiply(uint256,uint256,uint256)", +"b3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", +"b3aae830": "deployProject(uint256,string)", +"b3ab15fb": "setOperator(address)", +"b3ab715e": "getTileIDbyPosition(uint16,uint8)", +"b3ac149c": "getCurrBalance()", +"b3ac7acd": "ownerSetMaxProfitAsPercentOfHouse(uint8)", +"b3ad4600": "RedCarpetToken()", +"b3adc716": "is_banned(address)", +"b3ade772": "shipProducts(string,string)", +"b3adfa0c": "summLeskiw()", +"b3ae1d2c": "completeTransaction()", +"b3ae65d7": "initialBlockNumber()", +"b3aefb75": "getCap(address)", +"b3af4426": "jackpotTokenLoseRewardRate()", +"b3af88f0": "proposalPresent(string)", +"b3afe437": "SPECIALIST_TWO()", +"b3b0c83f": "withdrawEndTime()", +"b3b0cf86": "Birth(uint256,string,address)", +"b3b0eae5": "getPaidAmount(string)", +"b3b163c4": "getLatestVersion(address,bytes32,address,bytes32)", +"b3b294a6": "bonusOn()", +"b3b2b1b6": "setPaidStatusCustomer(address)", +"b3b32dc0": "hasSeat(uint256)", +"b3b39809": "Filiate_Changed(address)", +"b3b4b21e": "ZZZCoinDistribution()", +"b3b4ec54": "acceptColuLocalNetworkOwnership()", +"b3b4fd0f": "affiliateProgram()", +"b3b51aa3": "recycleSkin(uint256[5],uint256)", +"b3b548eb": "submitPrice(uint256,uint256)", +"b3b55c0f": "ELTWagerLedger(address)", +"b3b5c0ee": "fillSellOrder(uint256,uint256,uint256)", +"b3b5eaa3": "dive2(address)", +"b3b5ec33": "onPollFinish(bool)", +"b3b5fc76": "getImagePartsCount(uint256)", +"b3b71063": "BitPeso()", +"b3b77a51": "lock(bytes32,uint256)", +"b3b789fb": "GetLogMessageInfo()", +"b3b78cc2": "crowdSaleZxcSupply()", +"b3b81d38": "changeMinContribution(uint256)", +"b3b85e7f": "buyAtoken()", +"b3b89158": "reserveUnlockTime()", +"b3b8c620": "icoRatio()", +"b3bb594c": "delivery(address,uint256)", +"b3bb8cd4": "_now()", +"b3bb8d44": "OwnerDefined()", +"b3bb9b58": "LiquidDemocracy(address,string,uint256)", +"b3bc5b10": "editDefinedGame(uint256,string,uint256,uint256,int256,uint256,uint256)", +"b3bd870a": "participated(address)", +"b3bf07a1": "balanceofSTCDR(address)", +"b3c06f50": "transferFrom(address,address,bytes32)", +"b3c0b7be": "createOracle(address,uint256,bytes32)", +"b3c10469": "hijackClones()", +"b3c185a7": "addNVTtoGame(uint256,uint256)", +"b3c199c1": "dividendFor(uint32)", +"b3c1a588": "parseMsgData(bytes)", +"b3c1ee88": "updateDescription(string,bytes32)", +"b3c1fe4f": "donationMultiplier()", +"b3c2083f": "sellVolumesNext(address,address)", +"b3c25835": "addUser(address,string,string,uint256)", +"b3c298ea": "angelInvestors()", +"b3c2e8fa": "ethPause()", +"b3c2eac1": "setStatus(bool,bool)", +"b3c3699f": "createLockedState()", +"b3c3bbbd": "betters()", +"b3c4a36b": "setupToken(address)", +"b3c4b54a": "updateDestination(bytes32,address)", +"b3c4ee17": "userOfferCancelElement(uint256,uint256,uint256)", +"b3c4f83b": "DoftToken()", +"b3c5209f": "limitation()", +"b3c5998d": "onTransfer(address)", +"b3c63629": "PTSDToken(uint256,string,uint8,string)", +"b3c6487b": "setCatPrice(uint256,uint256)", +"b3c7476c": "TOSLittleHodingContract()", +"b3c7618e": "getVoteRuling(uint256,uint256,uint256)", +"b3c7d097": "theDeal(uint256)", +"b3c9983a": "getPara(uint256,uint256)", +"b3ca07d1": "closeRound(bytes32,uint8)", +"b3caba5a": "setReferralAddress(address)", +"b3cb8885": "nextUnderdogPayout()", +"b3cba833": "getData_16()", +"b3cc167a": "bidIncrement()", +"b3cc35f0": "taxPerc()", +"b3cd95d3": "incRandNonce()", +"b3cdabfd": "funForOwner()", +"b3cea217": "ID()", +"b3cea9e2": "createRadar(uint256,string,uint256,uint256,uint256)", +"b3cffc6e": "contributeBTCs()", +"b3d14775": "getPOOL_edit_13()", +"b3d159bf": "SearchMyFiles(string)", +"b3d176c9": "setPOOL_edit_33(string)", +"b3d1958d": "flush(uint256)", +"b3d1b801": "getOwnerCars()", +"b3d1bd95": "_recordFeePayment(uint256)", +"b3d2b441": "grantTokens(address)", +"b3d34e1b": "WithdrawDevFunds(uint256)", +"b3d39e63": "deleteProposal(bytes32)", +"b3d3d37e": "takeSnapshot()", +"b3d4e279": "earlyBackerList()", +"b3d4e3f2": "makeVendorValid(uint256,bool)", +"b3d4e41f": "PURA()", +"b3d62a25": "matchDay()", +"b3d6e119": "lockedPeriod()", +"b3d73743": "box1Star4()", +"b3d76188": "pay(address,address,uint256)", +"b3d7ac6a": "transferCompensationEthers()", +"b3d8056d": "findString(bytes32)", +"b3d84a28": "FreezeProduct(uint256)", +"b3d91e41": "DECIMALFACTOR()", +"b3da4b09": "mintEnergyAttributionToken(address,uint256,string)", +"b3da6eed": "Alluma()", +"b3daa652": "CLIFF_DURATION()", +"b3daab8a": "updateInvestBalance(uint256)", +"b3dac57f": "cancelUpcomingEvent(uint256)", +"b3db410c": "allowTransferTimestamp()", +"b3db428b": "depositFor(address,address,uint256)", +"b3dc0e94": "transferSoldCoins(address,uint256)", +"b3dcc5eb": "mint_and_transfer(int256,address,uint256)", +"b3dd23e8": "BTC_SUISSE_TIER_2()", +"b3dd5b1a": "WavesBitcoinToken()", +"b3de019c": "changePrice(uint256,uint256)", +"b3de5cc0": "_getTimeLeft()", +"b3de648b": "f(uint256)", +"b3dedf5c": "BACToken()", +"b3dee386": "collect(uint16,uint16,uint8)", +"b3df27f4": "checkFundingGoal()", +"b3df5b45": "oxleytoken()", +"b3df8737": "left50(uint256)", +"b3dfcdc3": "Contribution(uint256)", +"b3e18ed9": "finisGame()", +"b3e1f523": "setUnpausedWallet(address,bool)", +"b3e2564a": "amendAmount(uint8,uint8,uint8)", +"b3e25665": "collaborateInMerge(address,int256,int256)", +"b3e33a74": "mintingGoal()", +"b3e366ab": "getLastMilestone()", +"b3e3cc34": "sellToBlackMarket(uint256,uint256)", +"b3e3d8b4": "startOrHoldCrowdSale(bool,bool,bool,uint256,bool)", +"b3e53d8a": "maxPresaleContributionEther()", +"b3e5519b": "getOpenBids(bytes32,uint8)", +"b3e6713e": "LogClaimTokens(address,uint256)", +"b3e6c19f": "OJCToken()", +"b3e7c201": "ethPromoHelpers(address)", +"b3e7c2bd": "getVote(bytes32,address)", +"b3e83761": "KanCoin(address)", +"b3e8fe00": "totalpro()", +"b3e98f82": "viewClaimableInvestorDividendPool()", +"b3e99b77": "systemClaimAirdropMultiple(address[])", +"b3e9da0c": "businessersTotalBalance()", +"b3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", +"b3ea553b": "JoyCoin()", +"b3ea5984": "getIndexOfTarget(address[],address)", +"b3eaaa7e": "calculateCHGAmountToEther(uint256)", +"b3eae9ac": "WashingtonExchange()", +"b3eb3a86": "getClosedContract(bytes32)", +"b3ebc3da": "weiRaisedTotal()", +"b3ed1957": "USDMToken()", +"b3ed2081": "fixedExpTest(uint256,uint8)", +"b3ede13f": "addToPrizePool()", +"b3ee4564": "assertStillValid(uint256)", +"b3ee5307": "CountersUpdated(uint256,uint256)", +"b3ee7248": "getDate(uint32)", +"b3eee638": "icoEnablersTokensMinted()", +"b3ef0045": "decodedRecipient()", +"b3ef774b": "getNumOfTokensBonusOnPurchase(uint256)", +"b3f00674": "feeReceiver()", +"b3f05b97": "finalized()", +"b3f08078": "bookCanvasFor(uint32,address)", +"b3f15866": "CropOracle(address)", +"b3f17c20": "miningOne()", +"b3f19abd": "GetRecordAddress(uint256)", +"b3f1c0c9": "setIssuer(address,uint32)", +"b3f1f31b": "testRecurringClones()", +"b3f22cb4": "setLUCKContractAddress(address)", +"b3f2c866": "startDateOfSaleStageLast()", +"b3f2ecfd": "endDiscountTime()", +"b3f2fa99": "playersShareAllocation()", +"b3f3668c": "getprizeamount()", +"b3f3ab5c": "removeContributor(address)", +"b3f3dcf6": "reinvestSubdivsAmount(uint256)", +"b3f3e673": "switchPeriod()", +"b3f3e737": "SendWalletFees(address,address,address)", +"b3f4d235": "updateCnyEthRate(uint256)", +"b3f50029": "finishedGameWithdraw()", +"b3f523a8": "devuelveTodasApps()", +"b3f57bae": "tokenIncluded(address)", +"b3f5849f": "Battle7oken()", +"b3f5ab78": "noncex()", +"b3f691c2": "approvePendingCostume(uint256)", +"b3f841ba": "minimumNumberOfTokens()", +"b3f865f7": "rebalance(address,address,uint256)", +"b3f8bef1": "tgeSettingsAmountCollect()", +"b3f936f2": "getTypeName(uint32)", +"b3f98adc": "vote(uint8)", +"b3f9b6e1": "showPlayerScores(address)", +"b3fa24ef": "getUnlockSdc()", +"b3faa12d": "blockTokens(address)", +"b3fad72f": "deposited(address,uint256,string)", +"b3fb052a": "NTVUToken(uint8,uint256,uint256,uint256,uint256,uint256,bool,string,address)", +"b3fb14ad": "getGameResult()", +"b3fb59c1": "_setCardId(uint256,uint256,uint256)", +"b3fc0c83": "safeLock(uint256,uint256)", +"b3fc34d4": "specialSanMint(string,string,address,address)", +"b3fcb85b": "Sold_Token()", +"b3fdc99d": "signalTradeIntent(address)", +"b3feda02": "ASSET_MANAGER_WALLET()", +"b3ff0065": "CGC()", +"b3ff1112": "redeemFunds(uint256,uint256,uint256,bytes32)", +"b3ff277d": "totalWon()", +"b3ff8bfb": "BONUS_5_DAYS()", +"b3ffb760": "buy(address,uint256,address,uint256)", +"b4003de4": "removeFromTeamBalanceMap(address)", +"b4007cda": "emergencyFlag()", +"b400d149": "betOnNumber(uint8)", +"b40127f0": "bestmoney()", +"b4015034": "cancelExplorationByShip(uint256)", +"b401faf1": "claimWinnings()", +"b4022950": "collectFeesInEther(uint256)", +"b4024d9f": "testTransferNoMoreThanTokenBalance()", +"b4025b92": "deployProject(uint256,bytes32)", +"b4026ed5": "clearAuth(address)", +"b402973c": "SeeToken(uint256,string,string)", +"b4037767": "CryptoUniversityTuition()", +"b4037bca": "setWins(uint256,uint16)", +"b4038efe": "setVestTokenAllocationAddresses(address,address)", +"b403c290": "getwinningaddress50()", +"b404e001": "COMMISSION_PERCENT()", +"b4051397": "TokenEtcb(uint256,string,uint8,string)", +"b405c549": "waiting()", +"b40615c6": "soldTokensTotal()", +"b4068734": "drawWinner(uint32,int8)", +"b406cf39": "isPeriodTimePassed(uint256)", +"b406d386": "convertForPrioritized3(address[],uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"b4071f8f": "setBlacklist(address,address,bool,bool)", +"b4073060": "getLockListLen(address,address)", +"b407d1d2": "allocate7ProjectToken()", +"b408ac01": "totalCandyNo()", +"b4099ff7": "queryImage(address,bytes)", +"b409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", +"b40a5627": "bidCount()", +"b40a9304": "allocateDelayedTokens(address,uint256)", +"b40b234e": "DigitizeCoin()", +"b40bfd35": "AlexTestCoin()", +"b40d8d58": "hodlerTime9M()", +"b40e415e": "mutagen2FaceContract()", +"b40e4bec": "computeCap(uint256,uint256)", +"b40e76fa": "minePoP(address,uint256,uint256)", +"b40ee3b3": "NewSmartSharingContract(string,uint256,uint256,string,string,string,uint256,string)", +"b40ee8b4": "setCredit(address,uint256)", +"b40f0352": "refund(address,address[])", +"b40f6f4c": "buyOptions(address,uint256)", +"b41044c4": "btc_token(address,uint256)", +"b410a034": "issuanceRatio()", +"b4114165": "foundationFundTokenCountInWei()", +"b411e54f": "removePolicyFrom(address,uint8)", +"b411ee94": "hash(string)", +"b4123abb": "getBatch(address,address,uint256)", +"b412506b": "turnFaucetOff()", +"b41283bc": "parseTradeCompatible(bytes)", +"b412a2d7": "StartDateUpdated(uint256,uint256)", +"b412a4b7": "asideTokensMintDate()", +"b412b1e9": "getForestCount()", +"b412b445": "icoBonus3()", +"b412d4d6": "CafeDelivered()", +"b412d627": "TokenWin(address,uint256,uint256)", +"b4134e6e": "totalRedeemedValue()", +"b413c923": "setReservedTokens(uint256,address[],uint256[])", +"b4144b79": "getTradesByAddress(address)", +"b414d4b6": "frozenAccount(address)", +"b4150f17": "masterAuth()", +"b415c4ca": "total_burned_by_raffle()", +"b416bc93": "TokenAllowance()", +"b4174cb0": "right51(uint256)", +"b41762f9": "capIncreased()", +"b41960d4": "redeemGift(string,address)", +"b419bd17": "getNumCoins()", +"b419dd2d": "hashesUsed()", +"b419f447": "ZipcoinToken()", +"b419f73b": "proveIt(address,bytes32)", +"b41a6ce2": "changeSettings(uint64,uint64,uint8)", +"b41a9f22": "totalRedemptionIdValue(address,uint64)", +"b41b208e": "DLP()", +"b41b3967": "m_holders(uint256)", +"b41bfa6a": "ABLGenesisToken()", +"b41d989d": "angelsDayCooldownEnd()", +"b41e6640": "taxMan()", +"b41e79d4": "firstChangeBlock()", +"b41f511c": "trade(uint256[],uint256,uint8,bytes32,bytes32,bytes)", +"b41fc258": "balanceOfPaillier(address)", +"b4200294": "totalApprovedAmount()", +"b42072e4": "tokenExchanged()", +"b420feb2": "ethDepositAddress()", +"b4210257": "addInitiator(address)", +"b4214c8c": "LogWithdrawal(address,uint256)", +"b42220ad": "enableChangeChannel(bool)", +"b4223757": "modifyMilestoneFrom(address,uint8,uint8)", +"b423c31e": "catchYou(address,uint256)", +"b423d93f": "icoUsd()", +"b424bd83": "getLastOrderId(address)", +"b425282d": "getBonusPool(bool)", +"b4256888": "openTime()", +"b425bd43": "distributeTokenToAddressesAndAmountsWithoutHost(address,address[],uint256[])", +"b42748d3": "PSYT()", +"b4279df3": "initialization(address,address,address)", +"b427c148": "calculatePointsBlock(uint32)", +"b4288aa5": "EventBattle(address,uint64,uint64,uint64)", +"b42963f8": "executeUpdateTransferMinimumFeeProposal(uint256)", +"b429844c": "userBanned(address)", +"b429af5e": "changeBotAddress(address)", +"b429afeb": "isController(address)", +"b429f65a": "totalEtherCookieResearchPool()", +"b42a02b5": "updateDID(string,string)", +"b42a11f9": "refundAllCollateral()", +"b42a275e": "bankAmount()", +"b42a8bf9": "_distributeRevenue(uint256,uint256,uint8,uint8)", +"b42b14c4": "DCNForGas()", +"b42b8559": "createPreSale(uint256,uint256)", +"b42c6b4f": "getPumpRate()", +"b42d6bd2": "SunToken(uint256,string,uint8,string)", +"b42dfa0d": "gen()", +"b42e49ef": "rollFive(address,uint8,uint8,uint8,uint8,uint8)", +"b42e8923": "pushBAU2(bytes32,address,uint256)", +"b4307192": "Bible()", +"b430da3c": "migrateHero(uint256,address)", +"b431da0c": "JavaOwnerExample()", +"b43216bf": "cvsquare(uint256[],uint256)", +"b4328e5b": "TokenSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"b4330e24": "transferred_total()", +"b43386cd": "testBalanceAfterDeposit()", +"b434486a": "getPriceRiseAndFeePercent(uint256)", +"b4349daf": "TOTAL_HAWKING()", +"b4350e69": "ARBITRAGING(address)", +"b43545bb": "ownerValidate(address)", +"b436db29": "deployNetwork(address,address)", +"b43716a0": "getMajorityThreshold()", +"b43740c0": "casamenteiroToken()", +"b4375dc9": "adminSetEnabled(bool)", +"b4380764": "totalTokenHolders()", +"b438a2d0": "RigIdle()", +"b438d018": "guessNumber(uint256)", +"b439548d": "getStudent()", +"b43959c0": "setMembershipStatus()", +"b4396d42": "SAKECOIN()", +"b439be79": "AHCToken()", +"b43bd069": "getNumPassingTokens(address,uint256,uint256)", +"b43c19a6": "monsterAuction()", +"b43c35a5": "p_update_action(uint256,address,address,uint256,string)", +"b43c39a7": "_setRenewable(uint256,bool)", +"b43d42ec": "revokeRatioVote(uint8)", +"b43d4851": "transferSupply(address)", +"b43d9ede": "setMapMaster(address)", +"b43dbffc": "BulletinBoard(address)", +"b43f8a5c": "registNameXname(string,string)", +"b4402991": "userVoteFor(address,uint256,uint256,uint256)", +"b440b5c7": "EthPyramid00XX()", +"b440bf39": "setMonethaGateway(address)", +"b440f7ff": "setInterestor(address,uint256,uint256)", +"b4421cbd": "isPreTokenSaleActive()", +"b4421e7c": "releaseFoundationJM(address)", +"b442649d": "IlluminaCoin()", +"b4427263": "createTokens()", +"b443a085": "boom(uint256)", +"b443c607": "verifyCestificate(address,uint256)", +"b444b606": "getNowTokenPrice()", +"b444ff41": "setFirstRoundPricing(uint256)", +"b44531d3": "test_payment()", +"b4454253": "timePassed()", +"b446b5aa": "addAuthorized(address,address)", +"b446e7b9": "outterlockStartTime()", +"b4472022": "AECTToken(uint256,string,string)", +"b4478d7d": "updateTurnover(bytes32,uint256)", +"b447968c": "enterWithReferral(uint256,address)", +"b447acfa": "doubleSomeVar()", +"b447cfd4": "InitQuantity(int32,string)", +"b448017b": "periodPREICO()", +"b449188a": "updateCirculation()", +"b4495b7d": "MIN_USD_FUND()", +"b44996c4": "checkProof(bytes32,bytes,uint256[],bytes,bytes)", +"b449c689": "testdata()", +"b44a5e64": "GreenMed()", +"b44b0836": "getEAAttributes(uint32)", +"b44ba774": "_existPublicKey(bytes32,address)", +"b44bd51d": "getConfig(string)", +"b44bd688": "recoverLost(address,uint256)", +"b44cac23": "addJobSponsorship(address,address,uint256,string,string,uint256)", +"b44d7325": "signedTransferFromHash(address,address,address,address,uint256,uint256,uint256)", +"b44df72d": "tokensClaimed()", +"b44e2ab9": "onlySignerMock()", +"b44ec921": "whiteListContract(address)", +"b44eccc9": "periodICO()", +"b44ed831": "isDailyUplimitReach(address,address,uint256)", +"b44ef712": "secondRefundRoundFinishTimestamp()", +"b44f776a": "Test22Coin()", +"b44f794f": "removeUserRole(address,uint8)", +"b44f8cda": "icoSaleDeposit()", +"b45105b2": "post(string,address,string)", +"b4512913": "voteStatus(bytes32,uint256)", +"b45156fc": "startDate2()", +"b451794e": "numberOfOrders()", +"b4538897": "ICO_PHASE3_AMOUNT()", +"b4539817": "Donator2()", +"b453afb8": "getMinDisplayPrice()", +"b453fb01": "feeReceiverContract()", +"b4542a70": "getLLV_edit_19()", +"b454c415": "rNo()", +"b454e62e": "addPool(bytes32,address,uint256,uint256,uint256,address)", +"b456d9e2": "activateCrowdSale()", +"b456ecc5": "GetHash(bytes)", +"b458189f": "setAccountB(address)", +"b4590cbe": "ICOStatus()", +"b4594c36": "numberOfQuestions()", +"b4596ea6": "setPlayerGeneralAttrAdd(uint64,uint8,uint32)", +"b459c3fe": "WithdrawUnclaimed()", +"b45a2712": "mintCapInUSD()", +"b45aff16": "pullBalance()", +"b45b290d": "finalizePretge()", +"b45b7a51": "TokenSold(uint256,uint256,address,address)", +"b45be89b": "toGiveBase()", +"b45c48dc": "Security_AddPasswordSha3HashToBankAccount(bytes)", +"b45cff5f": "houseBankRoll()", +"b45db978": "Centspooladdress()", +"b45dd873": "enableBurning(bool)", +"b45f6df2": "updateDayTokenFees(uint256)", +"b45fb209": "setNewMessageNumber(string,uint256)", +"b460481d": "redeemShares()", +"b46062ad": "setInterestRate()", +"b460af94": "withdraw(uint256,address,address)", +"b4612d78": "CD(uint256,string,uint8,string)", +"b4621d07": "LimitBottom()", +"b4628c8a": "ENSRegistrar()", +"b46300ec": "send()", +"b46310f6": "setBalanceOf(address,uint256)", +"b463a75c": "addTeam(address)", +"b463bcde": "testThrowsSetNotTransferableNotOwner()", +"b46452a1": "convertTokensAmountInWeiAtRate(uint256,uint256)", +"b464631b": "get(address,uint256)", +"b464d582": "checkHowManyOwners(uint256)", +"b464d99e": "startTimeEarlyBird()", +"b465307c": "validPayAmt()", +"b4654d98": "transferMinusFees(address,uint256,uint128,uint16)", +"b465e52f": "secondRefundPollDate()", +"b46631cd": "SetTestModeHands(uint256,uint256)", +"b466b76f": "fresh()", +"b4670002": "updateEntries(address[],bool)", +"b4679b06": "multiplyWithNumber(uint256)", +"b46801c2": "balanceUpdatesCount(address)", +"b4693d23": "changeOpeningClosingTime(uint256,uint256)", +"b469ba24": "updatePokemon(uint256,uint256,uint256)", +"b469d6c8": "setFundingLowcapReached(uint256)", +"b46a8a21": "support_proposal()", +"b46bcdaa": "entries(bytes4)", +"b46e42ec": "setClue4(string)", +"b46eeebb": "TOKEN_FUTURE_CAP()", +"b4706fa1": "tokenSalesCapReached()", +"b470aade": "periodDuration()", +"b471fade": "_withdrawal()", +"b473d3b6": "EjariRulesC()", +"b4745939": "convertEtherToDust()", +"b47481a9": "BajwaToken()", +"b4750ca0": "getMiniumInputEther()", +"b4755160": "mkhash(uint256,uint256,bytes32,string)", +"b4758e82": "tokenAssignExchange(address,uint256)", +"b475a1c8": "ALLOC_TEAM()", +"b4765db7": "transferFromToken(address,address,uint256)", +"b476de2e": "callURL(string,string,string,string)", +"b47779ce": "FivePercent4Ever()", +"b47784d9": "testControlDisownNotOwner()", +"b477e7d5": "getFullTicketDetails(int256,uint256,uint256)", +"b4781f63": "change_coef(uint256)", +"b4787dc5": "linkEID(bytes,bytes)", +"b478886d": "promethCost()", +"b478f416": "setBaseCurrency(address)", +"b47a7a67": "proveIt(string)", +"b47b2cfe": "retraitStandard_4()", +"b47b6116": "removeCapFreeAddress(address)", +"b47be3e4": "addToWhitelist(address,uint256,uint256)", +"b47c11e8": "fidget(address)", +"b47d7409": "disablePurchase()", +"b47d89ad": "Details()", +"b47dbf22": "minPurchaseAmount()", +"b47deb3c": "winner(uint256,uint256)", +"b47df046": "setGrantEnable(bool)", +"b47e4c6c": "getTestOne()", +"b47f817e": "confirmAllBuys()", +"b47f833c": "contains(int8,int8)", +"b47fa7e0": "DepositLimit(uint256)", +"b4800033": "set(bytes32,string)", +"b4801272": "Dust()", +"b480eac0": "setTarget(uint256)", +"b4816be9": "endOfRewardsConfirmed(bool)", +"b4819e76": "getTokenDescription(address,uint256)", +"b481cbc0": "withdrawJajalanTokens(address)", +"b4821203": "investInQueue(address,uint256)", +"b483c054": "setOtherFomo(address)", +"b484d371": "fundReferrel(address,uint256)", +"b484de0d": "GetHashedMove(string,string)", +"b484e532": "getMyMsg()", +"b48585e5": "ATM(uint256,string,uint8,string)", +"b4861ca5": "assertSaneBalance(uint256,uint256,uint256)", +"b48666ee": "silverSaleLimit()", +"b4873ac7": "setCEOAddress(address,address)", +"b487b699": "addData(address[],uint256[])", +"b488abd8": "ANACoin()", +"b488f00e": "runSuperPrivilegeLuckyDraw()", +"b4894b1d": "gaps(uint256)", +"b489b365": "authorizeStore(address)", +"b489c597": "limitPresale()", +"b48ae96f": "finalizeRoom(uint8)", +"b48b4204": "register(bytes32,uint256,address,string,uint256)", +"b48b73aa": "setDivBonus(uint256)", +"b48bc2ee": "transferDepositsToNewDao(address)", +"b48c6807": "EtherLinkToken()", +"b48d323f": "getLiveChallenges(uint256)", +"b48eea44": "isWhitelisted(string)", +"b48f4f5c": "PreICOCents()", +"b48fcdc0": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256)", +"b4909307": "getData(address,address)", +"b490e79f": "getChosenFreelancer()", +"b4921774": "getReportsByReporter(address)", +"b4929d4c": "publicSell()", +"b492bd32": "setMulBonus(uint256)", +"b493b0d0": "GESToken()", +"b4942ad1": "transferByCoinOwner(address,address,uint256)", +"b4944333": "getPlayerEarning(address)", +"b494b49d": "variationProbably()", +"b494f1fb": "totalReservedTokenAllocated()", +"b49575a7": "CORENET()", +"b49593fe": "PREMIUM_SALE_PACK_COUNT()", +"b4961379": "private_setOracleFee(uint256)", +"b49651ef": "FAPFund()", +"b4972398": "CTCToken(address)", +"b497d17d": "TileUpdated(uint256)", +"b4980148": "numberOfStarsToReserve()", +"b49845f9": "EventClear()", +"b498e3e4": "NeverConfused()", +"b4999e85": "endBlockNumber()", +"b499a26f": "getHowManyLeftToDistribute(uint256)", +"b499b2ce": "doNotThrowOnValidDiv()", +"b49ce17f": "totalCapsules()", +"b49d3a53": "stopTokenTransfer()", +"b49e3b62": "getPenetration(uint256,uint256,uint256)", +"b49f4afd": "getBasePrice()", +"b49f57ad": "getLastLevel()", +"b4a09ba9": "canAccessExclusive(address)", +"b4a0a6b8": "Sgethereum(uint256,string,string)", +"b4a0e24c": "getQuotaCheck()", +"b4a176d3": "restoreRegistry()", +"b4a2251e": "getOp()", +"b4a3208a": "SUAppToken(uint256,string,string)", +"b4a357a2": "get_participant(address)", +"b4a39dfd": "getChildId(bytes32,uint256)", +"b4a4136d": "BIMI_DAO_31()", +"b4a516a6": "addRTO(uint256,address)", +"b4a523e8": "mintedTotallyByBridge(address)", +"b4a5ef58": "updateDefaultTimeoutPeriod(uint256)", +"b4a61608": "MAX_STAKE_PATHS()", +"b4a66678": "Numtokens()", +"b4a77b0e": "isUserBlocked(address)", +"b4a7a022": "_buyInBatch(uint256,address,uint256,uint256[],uint256)", +"b4a8dd5b": "updateTimestampLimit()", +"b4a8f3e6": "timeOfDeath()", +"b4a93d9b": "transferBasic(address,address,uint256)", +"b4a97fc1": "removeBottomUpChild(address,uint256,uint256)", +"b4a99a4e": "Owner()", +"b4a9d156": "changeWaitTimeUntilWithdrawOrTransfer(uint256)", +"b4aa24db": "uncheckedUpgrade(address)", +"b4ab271c": "giftIdToGift(uint256)", +"b4abda8b": "sendOwnershipAndCall(address,uint256,bytes)", +"b4abea24": "BONDS()", +"b4ac5452": "exerciseCUSE(address,uint256)", +"b4ac8ad9": "getRetailerBalances(address,address)", +"b4ad016d": "Socialife()", +"b4ad6b5b": "transferFromTo(address,address,uint256,bytes)", +"b4ae641c": "arrayLimit()", +"b4b063df": "addNewClaim(string,uint256,uint256,string,string)", +"b4b06a74": "GiftClaimed(address,uint256,uint256)", +"b4b097eb": "addNewState(string,uint256[])", +"b4b0a6e2": "ADULTEUM()", +"b4b14467": "submitTokenTransaction(address,address,uint256)", +"b4b179dc": "getAmountToGive(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes)", +"b4b1b6d9": "getRecordStateRequiredChanges()", +"b4b1d9c7": "getDescription(address)", +"b4b22b5e": "ico_allocation()", +"b4b2938a": "Finapse()", +"b4b2d3d8": "phase3Price()", +"b4b3b028": "AddChain(bytes)", +"b4b4ff0a": "setDateStartTransfer(uint256)", +"b4b54328": "getActualPeriod()", +"b4b598ce": "TEAM_FUND()", +"b4b5b48f": "tokenData(uint256)", +"b4b68490": "totalTokenCap()", +"b4b68dab": "createPermissionsBot(address)", +"b4b71450": "PlaceRocketForSaleEvent(address,uint32,uint80)", +"b4b7771d": "setInvadeAddr(address)", +"b4b857d8": "DepositEther(address)", +"b4b9cd62": "UpgradeRig(uint8,uint16)", +"b4b9d1f1": "lookup(uint256,uint256)", +"b4ba2a1b": "percentFrom(uint256,uint8)", +"b4ba2eaa": "moveEther()", +"b4ba349f": "sing()", +"b4ba9e11": "claimFor(address,address)", +"b4baf9ff": "HybridX()", +"b4bb1b0a": "isEscrowActive()", +"b4bb58fb": "mix(uint256,uint256)", +"b4bbfb9e": "StateTransition(uint256,uint256,uint256)", +"b4bc3564": "do_guess(uint256)", +"b4bcc23b": "setInvest(address,address)", +"b4bd5c75": "setupPREICOPeriod(uint256,uint256)", +"b4bd9e27": "isOver()", +"b4be6190": "getFreelancerHourlyRateCurrency(address,address)", +"b4bede85": "transferSenderPaysFee(address,uint256,bytes)", +"b4bee870": "ChangePoolName(string,string)", +"b4beff8a": "GetMinerICOData(address,uint256)", +"b4c045e4": "NHMToken()", +"b4c16970": "BigRedCoin()", +"b4c16ea5": "CREATED_PROMO()", +"b4c28ead": "expertScoreOf(address)", +"b4c2aaee": "tokenPriceMin()", +"b4c2e22c": "_ownerOfLand(int256,int256)", +"b4c48026": "safeBlock()", +"b4c4e005": "testTransferToAcceptAuthority()", +"b4c555a7": "addCollaborateToCampaign(uint256,uint256)", +"b4c5c983": "setMainYouCollectContractAddresses(address,address,address,address[])", +"b4c64ab0": "Goo()", +"b4c65de3": "identify(string)", +"b4c65f7b": "bonusesByDates(uint256)", +"b4c7abaf": "waitTime(address,address)", +"b4c8c5c4": "isApprovedAddress(address)", +"b4c91611": "weiDistributed()", +"b4c93fc0": "setOneGroupJoinersCount(uint256)", +"b4c98496": "CreditAsiaCoin()", +"b4caf8be": "rewardPoolTokens()", +"b4cbdd8b": "setClaimSignerAddress(address)", +"b4cbff23": "disputeStartedFreeze(bytes32)", +"b4cc2181": "setPropertyBecomePublic(uint16,uint256)", +"b4cd3701": "PointGameWithITG(address,uint256)", +"b4cd8865": "getArrBoolField1()", +"b4cdd3b7": "buyCertainOrder(uint256,uint256)", +"b4cdeb78": "LarsGeburtstagsgruss()", +"b4ce8ae0": "updateCrowdsaleEndBlock(uint256)", +"b4cec530": "totalFailedOldOwnerTransferAmounts()", +"b4cf5648": "PRESALE()", +"b4cfd972": "ROUND_4_PRESALE_BONUS()", +"b4cff9f5": "depositBool(address)", +"b4d00d94": "setIcoCap(uint256)", +"b4d01e87": "urandom(bytes32,uint256)", +"b4d07c7d": "GetWorldSnapshot()", +"b4d07e81": "setString(bytes)", +"b4d0ccb6": "getVaultInterestPerDay()", +"b4d0e552": "rareStartPrice()", +"b4d11f35": "getReleased(address)", +"b4d12bfa": "withdrawStudios()", +"b4d14728": "setRateAddress()", +"b4d168f7": "getFundedTokenCount(bytes32,string)", +"b4d1c485": "unlockFunds()", +"b4d1d795": "PERIOD()", +"b4d314f2": "isWithinPeriod(address)", +"b4d3c122": "CXLTotalSupply()", +"b4d3ef5f": "contributedEth()", +"b4d40694": "getPreminer(address)", +"b4d462b3": "unlockDate3()", +"b4d49b62": "RemovedTokenHolder(address)", +"b4d510dd": "countOfSaleTokens()", +"b4d60cfd": "payoutMining(uint256,address,address)", +"b4d657cc": "modifyCurrentHeroPrice(uint256,uint256)", +"b4d6befe": "BuyForHKGTransaction(address,uint256,uint256,uint256,uint256)", +"b4d6d4c7": "getPackageData(bytes32)", +"b4d8166e": "northadvisor()", +"b4d85686": "deductFee()", +"b4d927d0": "moneyFreeze()", +"b4d9cc3a": "profitDisperser()", +"b4da40f3": "getBadBets(uint256)", +"b4da4baf": "OWPayoutArb()", +"b4da662c": "_acceptDividends(uint256)", +"b4dad588": "numPendingRequests()", +"b4daff13": "test(uint256,uint32)", +"b4db1fc1": "deleteCandidatesBatch(address[])", +"b4dbf642": "buyATicketFromContract(uint256)", +"b4dc3dc7": "unbundle(address,uint256)", +"b4de64bd": "Sarf()", +"b4de8673": "balance0f(address)", +"b4def1e7": "completedTransfers()", +"b4e05b89": "getOwnedShips()", +"b4e0aa3e": "testCallBack(uint256)", +"b4e0b764": "minSumICOStage5USD()", +"b4e19f3e": "getBestGuessSecondPlaceTentativeWinningPayoutDistributionHash()", +"b4e1a78e": "correctExchangeRateBTCxETH(uint256)", +"b4e28f79": "test_TorontoRules()", +"b4e327ec": "MajListNotVal()", +"b4e3add2": "_createCollection(string)", +"b4e3c486": "addProposal(uint16,uint256,string)", +"b4e50c9b": "contributed4(address)", +"b4e51b7b": "sane()", +"b4e56e01": "setMerchantRate(address[],int16)", +"b4e6850b": "add(uint80,uint80,address,uint32,uint32,uint32,uint256)", +"b4e68dc1": "ERC721BasicToken()", +"b4e6f92b": "BuyTroop(uint256,uint256)", +"b4e7fe0c": "pendingOraclize()", +"b4e81236": "_verifyOptionPoolIncome(address,uint256)", +"b4e8c036": "ProofOfWeakFOMO()", +"b4e92f20": "getInitializeUniverseValue()", +"b4e9ac13": "getAddressRefundValue(address)", +"b4ecb847": "areTokensDistributedForAddress(address)", +"b4ed3622": "calculateDecayedBalance(uint256,address)", +"b4ed7ec3": "getVoteOption(uint256,uint256)", +"b4ed8bf8": "removePolicyAttribute(uint8,uint256)", +"b4ee4f81": "Sotko()", +"b4eecb54": "s_pwd()", +"b4eff690": "checkFlag(bytes)", +"b4f14b2b": "DragonsBurned()", +"b4f15310": "invalidateHash(uint256,uint256)", +"b4f181c6": "ethToUsdExchangeRate()", +"b4f20aa9": "executionOpen()", +"b4f272e3": "TOPToken(uint256,string,uint8,string)", +"b4f2bb6d": "getPoolIds()", +"b4f2dc7d": "approveDividends(uint256)", +"b4f2e8b8": "setFee(uint256,address)", +"b4f3625e": "fuelContract()", +"b4f3b453": "reserveTimelock()", +"b4f40c61": "k()", +"b4f48e08": "projectFoundersReserved()", +"b4f4e284": "addAdminWhitelist(address[])", +"b4f5a21a": "getCurrentPeriodIndex()", +"b4f5a6a6": "minPurchaseOnce()", +"b4f5b9b9": "affiliatThreshold3()", +"b4f5d282": "getImmed(bytes32)", +"b4f666da": "capToken()", +"b4f6aa56": "getForSalePrices(uint16)", +"b4f7451b": "getTransactionVATTotal(uint256)", +"b4f80eb9": "getPixel(uint256)", +"b4f82c6a": "readCompany(uint8)", +"b4f94b4f": "_transferByDefaultPartitions(address,address,address,uint256,bytes,bytes)", +"b4f9529c": "RemoveMember(address,address)", +"b4f96d60": "_calculateBonus(uint256,uint256)", +"b4f9b6c8": "kill(bytes32)", +"b4fadcad": "relayMetaTx(uint8,bytes32,bytes32,address,bytes)", +"b4fc0344": "getAdsCountByCat(uint256)", +"b4fc3e3b": "createSchedule(address,uint256,uint256,uint256,uint256)", +"b4fcf935": "revealBet(uint256,uint256,bool,bytes32)", +"b4fe3017": "Whitelist(address[],uint256)", +"b4ff4f3d": "setCanMint(address,bool,int256)", +"b4ff87f2": "_approveTransaction(uint256,address)", +"b4ffaece": "setReservedTokensListMultiple(address[],uint256[],uint256[])", +"b4fffa52": "min_value()", +"b5000405": "gifted()", +"b5004d1c": "currentPotSplit()", +"b500cc08": "toBase58(bytes)", +"b501671c": "KillingChainToken(address,address,address)", +"b501df23": "Mintloot()", +"b503a2b9": "categoryId()", +"b503fcf3": "totalToSale()", +"b5040f0a": "getLastSessionVote(uint256,address)", +"b5044e85": "BATO()", +"b5046219": "getDailyPrice()", +"b504adda": "LOG_BetLost(address,uint256,uint256,bytes32)", +"b505a3f2": "LOG_Payout(address,uint256)", +"b505c6ef": "releaseTokens(address,address,uint256)", +"b507f7c4": "_setBlockHash(uint256)", +"b508069b": "implChangeReqs(bytes32)", +"b508adb9": "isStateInit()", +"b5093f7c": "HasNoEther()", +"b50954b6": "cancelWaitingForOpponent()", +"b509bae5": "OpenFundFactory()", +"b509c090": "getCurrEthValue()", +"b50a0899": "seeZombieDna(uint256)", +"b50a89f3": "MyToken(uint256,string,string,uint8)", +"b50bf8cb": "getStakeholderConfirmations(uint256)", +"b50c77f2": "initWallet2of3()", +"b50d2b35": "currentTokensRemaining()", +"b50e44b8": "EXCHANGE()", +"b50e4610": "refoundTokens(uint256)", +"b50eb5d7": "KeyTokenSale(uint256,address)", +"b50f2832": "set_participant_num_of_uses(address,uint8)", +"b50fa90b": "verPlayer()", +"b50ff2b8": "hiddenCapTriggered()", +"b51051d4": "addDataPoint(uint256,bool,string)", +"b510dc2a": "setIcoAddress(address,uint256)", +"b510e42c": "ethOfKey()", +"b510fe45": "newIdShip()", +"b5116a93": "getMyOwed(address,address)", +"b5120c30": "canBeClosed()", +"b5125493": "organizer4()", +"b5128f66": "view38()", +"b512e8a6": "agtAtnReceived()", +"b512f98c": "TSFINAL()", +"b5133189": "anotherOwner2()", +"b51459fe": "canWithdraw()", +"b5147d64": "getAccountCoords(address)", +"b515622f": "_getBonus()", +"b5160d6f": "setFreeMem()", +"b516444a": "mine_success(bytes32)", +"b516ce40": "manageKey(uint256,uint256,uint256)", +"b516cf2e": "MainContract()", +"b5175571": "changeCheckDate(bool,uint256,uint256)", +"b517570a": "ICO_TIER_FIRST()", +"b518a776": "tmp()", +"b519719e": "assertCheck(bool)", +"b51996de": "setWalletWithdraw(address)", +"b519c05b": "updateAdditionalEmission(uint256,uint256)", +"b519cf31": "rateLimiter_()", +"b51a81b4": "setOrganizationLogo(string)", +"b51aae5a": "ResetAirdrop(uint256)", +"b51abfcd": "BCBCOIN(uint256,string,string)", +"b51ac349": "_updateArtistLookupData(address,uint256)", +"b51ad456": "IsPreSaleEnabled()", +"b51b63f7": "sendMessage(address,address,uint256,uint256,bytes)", +"b51bda59": "_depositForRenter(address,uint256)", +"b51be1db": "infytoken()", +"b51c3d2a": "maxImmortals()", +"b51c4f96": "getCodeSize(address)", +"b51d42a2": "customPedro(uint256,uint256,bool)", +"b51d93eb": "confirmNewOwner(address)", +"b51dfa9d": "buySupply()", +"b51f86c0": "getCrcWithdrawAccount()", +"b520b68c": "withdrawForeignTokens(address,bool)", +"b520c7e7": "getWeeklyVolume()", +"b5217c39": "TotalCrowdsaleContributions()", +"b521c106": "bonusDate()", +"b521d3bb": "gcpn(uint256)", +"b522739a": "register_node(string)", +"b52303b2": "TransferToExchange(address,address,uint256,uint256)", +"b5232ba3": "registerUserWallet(address,uint32)", +"b523d13c": "VernamCrowdSaleToken()", +"b5247199": "readPhaseData(uint256)", +"b524abcf": "totalSupply(bytes32)", +"b525256f": "BloxrouteToken()", +"b525ab8d": "min_balance_for_bonus()", +"b5268fa4": "DisableTransfer()", +"b527b0a6": "setSaleAuction(address)", +"b5281b31": "purchaseMysteriousEmblem()", +"b52923a0": "setCompte_11(string)", +"b5299ca6": "giveMeat()", +"b52a3d8d": "initCaps()", +"b52a467c": "buyGold(bytes32,string,string,bytes32,string,string,bool)", +"b52a5851": "burnUnsold()", +"b52a6a38": "atLastUnclaimedFeeAllocation()", +"b52ae3fc": "transferBlackFunds(address)", +"b52b925d": "investorProfit()", +"b52bb6b9": "TokenSale(address,address,address,uint256)", +"b52c0c35": "setPayOutPercentage(uint8)", +"b52c1d5b": "calculateSeed(uint256[],uint256)", +"b52c64c7": "addNewInsurance(bytes32,uint256,uint32,uint32,bytes32)", +"b52db3b9": "updateRecord(address,address,bool)", +"b52e0dc8": "getRateAt(uint256)", +"b52fddbd": "setCrowdsale(uint256,uint256)", +"b53148ad": "currentAmountOfTokensWithNoBonus()", +"b5319335": "promoCreationLimit()", +"b531a872": "icoStop()", +"b532073b": "OwnerChanged(address,address)", +"b5320cd6": "test_22_assertGasUsage100Boards()", +"b532e4cb": "addModerator(address)", +"b5338408": "_numDigits(uint256)", +"b533ff5f": "getLockedStructTimeToLock(address,address,uint256)", +"b534b5b7": "issuedTokens()", +"b5352fa7": "MuMuToken(uint256,string,string)", +"b53564ea": "setInvestors(uint256[],address[],uint256[],uint256)", +"b535b5c3": "hashExists(bytes32)", +"b535c741": "makeOldFucks(uint32)", +"b5364560": "clearApprovalForGeneLab(uint256)", +"b536c686": "burnedTokens(address)", +"b536fa63": "stopGracePeriod()", +"b537488c": "GanaToken()", +"b537752f": "transfer(address,address,uint256,uint256,bool,bool)", +"b537f5b5": "settleBet(bytes32,bytes32)", +"b5389c20": "timeToBeBurned()", +"b538c5ea": "addWorkerPool(address,address)", +"b538cefc": "subtractDarknodeFee(uint256)", +"b538d3bc": "addArbiter(address)", +"b539cd55": "maxProfit()", +"b53aab4c": "changeServicePercentage(uint256)", +"b53b0a75": "Startex()", +"b53b1f12": "findRankByCount(uint256,uint256,uint256,uint256)", +"b53b3f41": "LuckyTree(uint256,uint256,uint256,uint256)", +"b53c71b6": "addLifeEvent(string,string,string)", +"b53c7245": "set_min_contribution(uint256)", +"b53dfdb9": "getTeamFund()", +"b53e07c4": "transferReward(uint256)", +"b53e9dfe": "requiredContribution()", +"b53ea172": "calcBindedBlindHash3(string,address)", +"b53ea1b6": "replaceKey(address,address)", +"b53eb39f": "getSecondsToComplete(bytes16,address,address,uint256,uint256)", +"b53f4d94": "setPOOL_edit_32(string)", +"b53ffba0": "owner_testEnd()", +"b5402ec3": "manager_withdraw()", +"b54030d5": "recordNr()", +"b54050c2": "_updateStateIfExpired()", +"b54144b2": "Receipt(address,uint256,uint256)", +"b5417a52": "TEAM_VESTING_WALLET()", +"b541a778": "SampleOffer(address,bytes32,uint256,uint256,uint256)", +"b5420d68": "getCategoryPack(bytes4,uint256)", +"b5432fcc": "setManagerAgent(address)", +"b5439012": "closeSale(address,uint256)", +"b543d4b4": "getMasterWallet(address)", +"b54430ce": "canSign()", +"b5444ef2": "becomeCoowner()", +"b5446457": "deleteRoomByIndex(uint256)", +"b544bf83": "lockTimestamp()", +"b545252c": "isNewDay()", +"b545ddf5": "calculateReleased()", +"b545f2a6": "cards_blue(uint256)", +"b547a726": "turnOff(address)", +"b547aeda": "spawn()", +"b547b7a1": "committeesMap(address)", +"b54811f1": "EtheremonTransform(address,address,address,address,address,address,address)", +"b5481743": "exchangeRateAgent()", +"b5483f28": "changeAddressJoker(address)", +"b548b892": "getMarketWithInfo(uint256)", +"b548c6f6": "Transaction1()", +"b549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", +"b549bdda": "XavierToken()", +"b549c6b3": "_transferInvestor(address,uint256)", +"b54a7987": "LogGetDeposit(address,uint256,string)", +"b54b1187": "setdteamVaultAddr4(address)", +"b54b4fb9": "getPriceOf(uint256)", +"b54beedc": "getCCH_edit_10()", +"b54c71eb": "weightedVoteCountsOf(uint256)", +"b54ca7b4": "setIncreaseK(uint256)", +"b54cd451": "updateFlightStatus(bytes32,uint256)", +"b54d6238": "releaseToken(uint256)", +"b54e7a4a": "sanitize(string)", +"b54eb822": "redistributionTimeout()", +"b54ef544": "buyStakeWithStarCoin(uint256,address)", +"b54f24a9": "getMappingID(string,address,address)", +"b55027a9": "maxMinutesFundingPeriod()", +"b550e634": "getTotalInvestmentsStored()", +"b551c373": "getTotalReputationSupply(bytes32)", +"b5522e89": "addContract(address,uint256)", +"b5531651": "Startable()", +"b553b715": "rewardDistributedUnits()", +"b55459d1": "User_5()", +"b5545a3c": "claimRefund()", +"b554d538": "recoverBounty()", +"b554f8eb": "withdrawAllWei(address)", +"b5554e73": "getPlayerJackpot(address,uint256)", +"b5558562": "tokenWithdraw(address)", +"b556188e": "finaliseTime()", +"b5563dcf": "BillOfSale()", +"b5565aac": "endPromotion(uint256)", +"b556861a": "add_tokens(address,uint256)", +"b556a895": "incFreezeHybridizationsCount(uint256)", +"b556ff26": "NewBid(bytes32,address,uint256)", +"b557478a": "refundClaimed(address)", +"b557a11d": "getReplyCount(bytes32)", +"b557c9a4": "slaveWalletInitialized()", +"b5581663": "airDropMultipleAmount(address[],uint256[])", +"b55845e7": "totalExchange()", +"b55867ea": "_goldUnFreeze(uint256)", +"b558a50c": "LongevityCrowdsale(address,uint256)", +"b558d1ea": "updateRate(address,uint256)", +"b558f334": "isRedemptionPermitted(address,uint256,uint256)", +"b559490d": "payVisa(uint256,uint256)", +"b559b0fe": "withdrawFromRemainingTokens(uint256)", +"b55a7d45": "multiplierPercent()", +"b55ad27e": "getBlipTokenAddress()", +"b55b089b": "bigTokensPerEther()", +"b55cdbf9": "setExtraBalance(address,uint256)", +"b55cff2d": "test_twoValidEqBytes()", +"b55da874": "create_private_room()", +"b55e31f4": "assertOrders(address,bytes32)", +"b55fc3d6": "UnregisterList(address[],bool)", +"b560b6da": "enableDistrict0xNetworkTokenTransfers()", +"b560c4de": "adminPayout()", +"b560d589": "getUserInvestBalance(address)", +"b561d5b3": "OrguraExchange()", +"b5622abc": "EuroGoldTest(uint256)", +"b563b75d": "getAdminRevenue()", +"b564561e": "register(bytes32[])", +"b56494c0": "validateBoard(uint256[81])", +"b56537ef": "isEASigned(uint32)", +"b566d0b4": "getContributorRemainingPresaleAmount(address)", +"b5674c68": "TokenGNO(uint256)", +"b5675ee4": "bookkeeping(uint8,uint8,uint256)", +"b56797fd": "getSaleHourNow()", +"b567a1e7": "ShopClosed(uint32)", +"b568e689": "getCrowdsaleWhitelist(address,bytes32)", +"b5692a67": "removeExemptionAddress(address)", +"b569a35f": "YSSYBToken(uint256,string,string)", +"b56a9f2c": "heartBeat()", +"b56aef62": "sampleTypes(uint32)", +"b56b2627": "add_owner(uint256,address)", +"b56b366b": "maliceReportedForBlock(address,uint256)", +"b56b5918": "TicketRefund(uint256,address,uint256)", +"b56b64d9": "disputing()", +"b56ccd93": "arr(address,address,address)", +"b56d3ccc": "select(bytes32,bytes32,bool)", +"b56d4717": "lockOwner(address)", +"b56e1bca": "setExchangeToken()", +"b56e2d76": "testRewardSS(string)", +"b56ea5cc": "specialApprove(uint256,bytes32,bytes)", +"b56ebf42": "GetNow()", +"b571324d": "ShareErc20(string,string,uint256)", +"b57228fd": "ChangeEmissionGrowthCoefficient(uint256)", +"b5725445": "setOptionalFeeSplit(address,uint256)", +"b5738a78": "SatoMotive()", +"b573a104": "secondStageTokenRate()", +"b5740cc2": "preSaleVault()", +"b5744134": "setLaunchDate(uint256)", +"b5754045": "disown(string,address)", +"b57566d8": "setvalue(string,string)", +"b5776339": "transferGDPOracle(address)", +"b5784f6f": "testMultiplePackages()", +"b57874ce": "addressToPass(address[],bool)", +"b578e764": "ACNN()", +"b579184f": "addContributor(address)", +"b57934e4": "haltCrowdSale()", +"b5794222": "destroyAndSendToStorageOwner()", +"b57980ce": "prepareContribution(uint256,uint256,uint256)", +"b579b6c5": "distributeToken(uint256,uint256,bool)", +"b579d7de": "RewardEnd()", +"b57adee3": "setBanker(address,uint256,uint256)", +"b57c5814": "getDonatorsNumber()", +"b57d5d27": "assertBalance()", +"b57dbdc6": "safeguard()", +"b57e55ec": "seeAllPlayers()", +"b57e6ea1": "tokenGenerationMax()", +"b57ff495": "triggerPauseEvent()", +"b5802ae6": "getCirculationCap(address)", +"b5809c9b": "COPPER_AMOUNT_TPT()", +"b580a7a1": "totalBalanceClaimed()", +"b580d205": "ChangeRate(uint256,uint256,uint256,uint256)", +"b58166f2": "lastRoot()", +"b581b725": "transferToken(bytes8,address,uint256)", +"b582ec5f": "j()", +"b58489ac": "isAuction(string)", +"b5848db4": "validateStartMegabox(address,uint256)", +"b585245b": "_callSender(address,address,address,uint256,bytes,bytes)", +"b58617d9": "CCRCrowdsale()", +"b58637e8": "approveToSell(uint256)", +"b5863ed7": "addContribution(address,uint256,uint256,uint256,uint256)", +"b58696ba": "test_ShouldPassButNoBondSoFail()", +"b587194e": "TokenMigration(address,uint256)", +"b587dc57": "openICO()", +"b587e3c7": "getRank04()", +"b5881422": "unsafeIsEth(uint16)", +"b588bfad": "writeMessage(string)", +"b588fdc1": "takeTokenContractOwnership()", +"b58aa6be": "checkWithdrawalAmount()", +"b58b9d5c": "getSaveData(address,address)", +"b58baa0d": "displayString()", +"b58c2d31": "addAddressManual(address)", +"b58d0651": "checkAllowedAddressFoTransfer(address,address)", +"b58d4885": "addNewTrait(string,bool)", +"b58de1d5": "JSONpath_int(string,string,uint256)", +"b58dff99": "gntContractAddress()", +"b58e5216": "allowBlocking(address,address)", +"b58e60db": "theWord()", +"b58ee9a3": "companyRemainingAllocation()", +"b58f4a24": "LOTTERY_FUND_ADDRESS()", +"b58fa125": "commit_end_time()", +"b58fc3e7": "distributeIncomeEther()", +"b5917478": "TYPE_FREIGHTER()", +"b5919b48": "toBuyBack()", +"b591fc69": "totalEtherContributed()", +"b5922a2b": "INITIAL_AIRDROP()", +"b592500e": "RICEBALLZ()", +"b59284ac": "unlinkAddress(address)", +"b592bb99": "SSDToken()", +"b592de3a": "sell(bytes32,uint256)", +"b5930872": "test_testablestandardcampaignDeploymentAndUse()", +"b5931f7c": "safeDiv(uint256,uint256)", +"b5932ee2": "DistrictsCore()", +"b5936da2": "seedEnded()", +"b594f086": "changeDuration(uint256)", +"b5950529": "CTSCToken()", +"b595181f": "ShapeshiftBot()", +"b595357b": "getLLV_edit_29()", +"b5957288": "getMatchBettingDetails(uint8)", +"b59589d1": "relay()", +"b595b8b5": "betOnColor(uint256)", +"b5962159": "moveMinions(uint8,uint8,uint32)", +"b5967e16": "updatePlayersGoo(address)", +"b59712af": "totalSupplyOfType(uint256)", +"b59724e8": "NewFunding(address,address,uint256,uint256,uint256,address)", +"b597842a": "TimeNow()", +"b597e784": "setTokenPriceInWei(uint256)", +"b5980f7d": "unverifyAddress(address)", +"b598afcb": "oraclize_query(string,bytes[5])", +"b598d3e8": "getMessages(address,uint256)", +"b598f882": "updateTokenRates(uint256)", +"b5999c12": "getPoohsSinceLastHatch(address)", +"b599aaec": "TheBitcoinCenterToken()", +"b599afc8": "totalBetCount()", +"b59a1598": "distributeGLAU(address[],uint256,uint256)", +"b59a1d37": "buy1(uint256)", +"b59a60db": "minContribute()", +"b59b0fc4": "modifyTokenPrice(uint256,uint256)", +"b59b44f5": "usePlayerFiboken()", +"b59b6acb": "GetDynamicCardAmountList(address)", +"b59bb5e3": "testcall(address)", +"b59bc382": "setReportingFeeDivisor(uint256)", +"b59ca0f6": "registerDINsWithResolver(address,address,uint256)", +"b59d689f": "grantStock(address,uint256,uint256)", +"b59d7fe6": "EtherbotsBase()", +"b59dd856": "GetCardInfo(uint8)", +"b59f16d1": "Set(bytes32,address,address)", +"b59ffdd3": "getFreeAnthill()", +"b5a01992": "setDDF(address)", +"b5a02db1": "totalHouseWinnings()", +"b5a030d8": "link(bytes32[],bytes32[],address[],uint8[],bytes32[],bytes32[])", +"b5a04829": "setLargeCapWhitelistParticipants(address[],uint256)", +"b5a0596e": "declareCheaters(address[])", +"b5a127e5": "minQuorum()", +"b5a1a64b": "lockedRewardsOf(address,address)", +"b5a27a21": "leave_square(uint256)", +"b5a29d11": "purchaseCRS(uint256)", +"b5a312c6": "mintlvlToken(address,uint256)", +"b5a46d5e": "whoOwner()", +"b5a4a146": "generateRnd(bytes,uint256,uint256)", +"b5a4e04a": "canFinalizeEarly()", +"b5a54627": "setPrimaryGameManager(address)", +"b5a5b8f5": "setPreSaleContract(address)", +"b5a60045": "setJob(uint256,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", +"b5a678d7": "YouRyuCoin(uint256,string,string,uint8)", +"b5a6c525": "extractFrozenAccountLength()", +"b5a7900e": "nextroundsoldierreplenishrate()", +"b5a89065": "getUserData(address,string)", +"b5a8fa80": "VRChainToken(string,string,uint8,uint256)", +"b5a90793": "Sender(uint256,address[])", +"b5a9823f": "tier3Time()", +"b5a9de6e": "minEtherParticipate()", +"b5aab008": "WobToken()", +"b5aae6fc": "_setCurrentSecret(uint256)", +"b5aae91a": "handle_dividend(address,address)", +"b5ab05a5": "tokensHardCap()", +"b5ab58dc": "getAnswer(uint256)", +"b5ac7894": "partnerInfo_for_Partner(bytes32,uint8,bytes32,bytes32)", +"b5ac7c27": "payForOrder(uint256,address,uint256)", +"b5add717": "claim(uint256,uint256,uint256,uint256)", +"b5ade81b": "_BLOCKS_PER_READJUSTMENT()", +"b5ae4519": "endorsements()", +"b5ae64b2": "piStartTime()", +"b5ae8225": "auditSwap(bytes32)", +"b5aebc80": "donate(string)", +"b5aece02": "silverBoxAmountForSale()", +"b5af411f": "NXETToken()", +"b5afb120": "updateSkill(uint256,uint256,uint256,uint256)", +"b5afd61b": "maxForceOffsetAmount()", +"b5b12e75": "isApprovedFor(uint256,address)", +"b5b13462": "getUserTotalSales(address)", +"b5b1fc05": "getAdminFromMintedCappedProxy(address)", +"b5b26505": "DURATION_SALESTAGES()", +"b5b33eda": "scheduleCall(address,uint256)", +"b5b3fc07": "GlowToken()", +"b5b4d0d6": "COLLATERAL_HELD()", +"b5b52096": "fixedFeeInCWC()", +"b5b5a057": "changeMinimumDonation(uint256)", +"b5b64d24": "GetExistsChipList()", +"b5b73c63": "getUserSignedDocuments()", +"b5b77d7f": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b5b7916b": "getMembershipType(address)", +"b5b7d767": "vpe_per_eos()", +"b5b86a51": "getReferralBalance(address)", +"b5b879c2": "mAlek()", +"b5b90a26": "addHash(bytes32[])", +"b5ba7074": "isBelow(uint256,uint256,string)", +"b5ba95a0": "ElectronicMusic()", +"b5ba9a7e": "getReferralPackageKind(bytes)", +"b5bab68e": "minLimitPublicSecondSale()", +"b5bb0ade": "agreementExists(bytes32)", +"b5bb5ee4": "withdrawMintTokens(address,uint256)", +"b5bd3eb9": "totalCredits()", +"b5be0ebb": "MStoken()", +"b5bf15e5": "freeze(bool)", +"b5bf4c74": "RandomWinner()", +"b5bf6eb6": "incrementPrice()", +"b5bfdd73": "addDSource(string,bytes1,uint256)", +"b5c05570": "toggleLockIn()", +"b5c07eab": "metaBaseUrl()", +"b5c0c884": "refundLosersBids(uint256)", +"b5c12c09": "cancelRequest(uint32,string)", +"b5c12f4d": "setWhitelistRequired(bool)", +"b5c14adb": "setGamePaused(bool)", +"b5c150d4": "availableAmount(uint256)", +"b5c1662f": "addWei(address,address,uint256)", +"b5c18ea8": "rejectClearingPriceSubmission(address,address,bytes32,uint256)", +"b5c19d59": "betLastTime()", +"b5c1ac14": "toBE()", +"b5c2b889": "XTVBurned()", +"b5c2c600": "Gave(address)", +"b5c3a111": "depositCell(address,uint256)", +"b5c4147f": "getZoneShop(bytes2,bytes16)", +"b5c47f69": "megaRate()", +"b5c56797": "AIMToken()", +"b5c5a635": "incrementProgressOfAddressAndId(address,address,uint32)", +"b5c5f672": "withdraw(address,uint256,uint256)", +"b5c61e90": "TokenMigration(address)", +"b5c645bd": "record(bytes32)", +"b5c6b5a2": "FishFarmer()", +"b5c6e7d6": "getCountsByName(bytes32)", +"b5c73816": "ASSC()", +"b5c7a4e4": "validateReleasedToken(uint256)", +"b5c7b1fe": "claimTokenTokens(address)", +"b5c83592": "offerExists(uint256)", +"b5c8b021": "testMintableToken()", +"b5c8f317": "SimpleERC20Token()", +"b5c90917": "GetAllReferralAddresses()", +"b5c9cbbe": "setBalance(address,address,uint256)", +"b5c9fa0a": "setBountyRewardPercent(uint256)", +"b5ca87c4": "setAccountFactoryV1(address)", +"b5caadf2": "setParams(address,address,address,uint256,uint256)", +"b5cab1ce": "tokenMetadataBaseURI()", +"b5cadc91": "convertForMultiple(address[],uint256[],uint256[],uint256[],address)", +"b5caf461": "removeAllApprove()", +"b5cb0611": "setCrowdsaleState()", +"b5cb15f7": "getUserCount()", +"b5cb6a17": "capDay3()", +"b5cc7e29": "unfreezeTokenTransfer(bool)", +"b5cc84f5": "getVatomOwner(string)", +"b5cc916c": "CITY_PRICE()", +"b5cd1821": "lastBlock_a0Hash_uint256()", +"b5ce3600": "thirdStageDuration()", +"b5cf852d": "triggerHiddenCap()", +"b5d011fd": "updateCalculator(address)", +"b5d02a56": "nextRand(uint256)", +"b5d03751": "YoutubeViews()", +"b5d0c747": "setApiCallsContractAddress(address)", +"b5d0f16e": "getGasScalar(uint256,uint256)", +"b5d11d39": "validatePurchase(uint256)", +"b5d11e99": "testInit()", +"b5d1220a": "hasPreviouslyEnteredCardIds(uint256[])", +"b5d125f1": "isApprenticeChest(uint256)", +"b5d1548c": "CCH_RE_1()", +"b5d1990d": "numRecords()", +"b5d1aedc": "COLOR_YELLOW()", +"b5d29f21": "authorizationPayment()", +"b5d347ed": "CryptoCityToken()", +"b5d34966": "unlockCapital(address,uint256)", +"b5d3a379": "CanaryTestnet()", +"b5d3a9c6": "groomSignedAt()", +"b5d446ab": "mokenEra(uint256)", +"b5d561bb": "migrateManual(address,bool)", +"b5d65f61": "partialRedeem(uint256,bytes32)", +"b5d6cbfe": "FSHN()", +"b5d76067": "Alter_TrustlessTransaction(uint256,bool)", +"b5d7df97": "Sign()", +"b5d7eca5": "token_was_created()", +"b5d8514b": "Arthimetic()", +"b5d86c86": "ownerOfCountryCount(address)", +"b5d89627": "getValidator(uint256)", +"b5d9ac79": "toB32(bytes,uint256)", +"b5d9f80b": "serverEndGameConflict(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,bytes32,bytes32)", +"b5da0114": "isNull()", +"b5da2df4": "markAsImported(address,address)", +"b5dadb17": "whitelistThreshold()", +"b5db26cd": "manualOverrideEditionBid(uint256,address,uint256)", +"b5dba35b": "onlyMinterMock()", +"b5dc40c3": "getConfirmations(uint256)", +"b5dc9399": "fetchPaidOrdersForPayerByAdmin(address)", +"b5dcbb69": "takeRegion(uint16)", +"b5dd20e9": "createIsland(bytes32,uint256,address,uint256,uint256)", +"b5de8d4c": "getModule(address)", +"b5dea68c": "_addNewEscrow(address,address,address,uint8)", +"b5debaf5": "exp(uint256,uint256,uint256)", +"b5debd95": "totalAmountOfEarlyPurchasesInCny()", +"b5deeca7": "BaseRegistry()", +"b5df3ef8": "WillWithdraw(uint256)", +"b5dfad16": "specialSkinOfTokenId(uint256)", +"b5dfd153": "withdraw(uint256,uint256,address,uint256)", +"b5e02e84": "Exorbuxcom()", +"b5e11819": "disableContract(bool)", +"b5e12715": "updateRankList(address)", +"b5e1fe13": "thirdTokenExchangeRate()", +"b5e221c1": "winnerBidder()", +"b5e292d3": "processHandEnd(bool)", +"b5e2bb10": "reserveBalanceOf(address)", +"b5e3504a": "HumanX1()", +"b5e35248": "stage2NotReached()", +"b5e36417": "transfer(uint256[])", +"b5e4d6ce": "addOrder(bool,uint32,uint128,uint128,uint32,int256)", +"b5e4ece1": "LOG_GasLimitChanged(uint256,uint256)", +"b5e54406": "amountOfItem()", +"b5e574e9": "SetGasSell(uint256)", +"b5e59318": "SLPC_ERC20Token()", +"b5e71687": "getTeam4name(string)", +"b5e73249": "mint(address,uint256,bool,uint32)", +"b5e8077c": "_unpackWarriorId(uint256,uint256)", +"b5e82975": "setMintDone()", +"b5e872e0": "TransferFeeRateExecuted(uint256,address,uint256)", +"b5e8cf02": "burnReward(uint256)", +"b5e91891": "changeStock(address)", +"b5e989c7": "ballotOptions(uint32,uint32)", +"b5ea510a": "YOBTC()", +"b5eaac7f": "pushBlockVerifierAddress(uint256,address)", +"b5eacc01": "investor(address,uint256,uint256)", +"b5ec85f0": "getOldBalanceOf(address)", +"b5ed298a": "proposeOwner(address)", +"b5ed886f": "getExchangeRateInCents()", +"b5ee6f3d": "isVotingPhaseOver()", +"b5eeee6e": "cleanSeedUp(address)", +"b5ef06d0": "changeDeveloperETHDestinationAddress(address)", +"b5ef0ab1": "openDispute(bytes32,address)", +"b5ef649d": "GetChipUsedNum(uint32)", +"b5f09a39": "lockupDate()", +"b5f0f41b": "allowedTransferTo(address)", +"b5f12736": "CustomToken(uint256,string,string,uint256)", +"b5f16939": "saleRevenue()", +"b5f16e48": "setShareholder(address,bool)", +"b5f187b9": "changeFundWallet1(address)", +"b5f2054b": "getWinningsBalance(address)", +"b5f228d7": "LiquidityNetworkToken()", +"b5f26055": "restrictedStockSendTimeOf(address)", +"b5f3484d": "PaymentStatusTimeStamp(address)", +"b5f3e71a": "addAddressToAdminlist(address)", +"b5f45edf": "marketPoohs()", +"b5f50ef3": "claim_prize()", +"b5f529cf": "orderNotAccepted()", +"b5f5962a": "CALL_GAS_CEILING(uint256)", +"b5f59a92": "LUV_Crowdsale()", +"b5f5d582": "TPortToken()", +"b5f6b1f6": "setBonusThreshold(uint256)", +"b5f72d88": "beginProjectRound(string,uint256,uint256)", +"b5f78d11": "purchase(bytes8)", +"b5f7f636": "totalTokenSold()", +"b5f918ff": "roundOneAmount()", +"b5f9371a": "writerAccountSupply()", +"b5f9b1c2": "Bonds(uint32)", +"b5f9ca19": "doesPaymentExist(address,address)", +"b5fa2044": "SetPatentProperties(uint256,uint256)", +"b5fa77bd": "SetAddress(string,address)", +"b5fb19ed": "addressEccles()", +"b5fbc49f": "isAreaEnabled(string)", +"b5fcfbcc": "_getProviderAdmin(uint256)", +"b5fd76bb": "AddLocation(string)", +"b5fdeb23": "getMsg()", +"b5fe79db": "getInfoLevels()", +"b5fea522": "putBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"b5fecc30": "stockSupply(uint256)", +"b5ffa082": "StorageUpdated(address)", +"b6010fcd": "getItem(string)", +"b6013cef": "finalize(uint256,uint256)", +"b6015204": "receiver2()", +"b601818b": "newOwner(string)", +"b601e850": "loanMatured(address)", +"b6027026": "AOK()", +"b602a917": "changeTransferStats(bool)", +"b6030d35": "nProposals(uint256)", +"b6033daf": "getMintingPowerByAddress(address)", +"b6034964": "_endContestIfNeeded(address,uint256)", +"b6037759": "setStudentNumber(uint256)", +"b603cd80": "killMe()", +"b604a86e": "ratePublicSaleStage()", +"b604ad72": "create(string,string,uint8,uint256,address)", +"b604ed1b": "withdrawByGid(uint256)", +"b6055167": "receiveExternalProfits()", +"b6057719": "setMinAuditStake(uint256)", +"b6062b5b": "ICO_TOKENS()", +"b6069742": "propertyLatLongOf(uint256)", +"b607068c": "getMyDividendRate()", +"b60710c0": "LogWithdrew(address,uint256)", +"b60761c4": "Internet(string,string)", +"b607ea45": "claimTilesForNewUser(bytes32,bytes,bytes32,bytes32,uint16[],address)", +"b60868be": "getFishAtBase(uint256)", +"b608c938": "releaseNextShares(uint256)", +"b6096ce9": "EloTest()", +"b609d0e6": "lastOracleUpdate()", +"b60a7405": "_addOwner_(address)", +"b60a82e0": "addSponsorship(address,uint256,uint256)", +"b60ad98d": "Board(address,bytes32)", +"b60afaa4": "distributeLCWP(address[],uint256,uint256)", +"b60b3c59": "otcPurchaseAndEscrow(uint256,address)", +"b60b7084": "builtOn()", +"b60b9fcb": "joinGame(uint256,uint256)", +"b60b9ff7": "Shopdex()", +"b60cc68b": "MIN_ICO_SLOGN_COLLECTED()", +"b60cee3c": "countAllSmartSharingContract()", +"b60d4288": "fund()", +"b60e00b9": "disableBets()", +"b60e2333": "joinTeam(uint256,address,uint256,uint256)", +"b60e6bc0": "tokenIdToApprovedRecipient(uint256)", +"b60e72cc": "log(string,uint256)", +"b60eb800": "addressSCEscrow()", +"b60f54f4": "SortingCoins()", +"b60f5b91": "isPreICO()", +"b60ffa9c": "setDistributeAgent(address)", +"b61012a9": "preICOparticipated(address)", +"b610c75e": "incrementTimestamp(uint256)", +"b611d649": "GteChainERC20()", +"b61241ed": "allocateTokens(address,uint256,address)", +"b612ac29": "BONUS_15_DAYS()", +"b61334b1": "setPayoutsWallet(address)", +"b6136dca": "alt()", +"b61386fb": "registerHandle(string)", +"b6139992": "issue(address,address,uint256)", +"b613df16": "_finishBet(bool,address)", +"b614213d": "maxPriceInWeiFromUser()", +"b615243a": "getExtraTokens(address)", +"b6172704": "isConfirmedStakeholder(uint256)", +"b61727ed": "_transferTo(address,address,uint256)", +"b6176a33": "addStakeholderTransaction(address,bool)", +"b617a4fd": "getClientCategory()", +"b617cf42": "removeExchange(address,uint256)", +"b618214a": "enableService(address)", +"b618387a": "registerBuyer(string,string)", +"b618cbba": "EvLoginfo(string,string)", +"b618d9a4": "checkStatus(address,address,uint256)", +"b6195134": "changeAdminToo(address)", +"b61992e7": "setPricePerBlockInWei(uint256)", +"b61a98cb": "updateMarriageLicenceImageIPFShash(string)", +"b61c0503": "fireEventLog1()", +"b61cb058": "setAvatarFee(uint256)", +"b61cbcd3": "nextGenome()", +"b61d27f6": "execute(address,uint256,bytes)", +"b61d4511": "maxPreIcoTokens()", +"b61daaee": "tokenBase()", +"b61e96a5": "requester()", +"b61f16e3": "getEarningsPool()", +"b61f36f7": "calculateWdxFee(uint256,uint256,uint256)", +"b61fa7c0": "doAirdrop2(address,address[],uint256)", +"b6206e67": "unitBattlePLATCost(uint256)", +"b6213490": "initialDrop()", +"b6215091": "Test2Token()", +"b621bd15": "SALES_END()", +"b622ab4a": "buyWithFunction(bytes4)", +"b6230a74": "icoStatusUpdated(address,string)", +"b623f5e5": "checkSetCosignerAddress(address)", +"b62418a1": "decrementOpenInterest(uint256)", +"b624fc54": "rafEnd()", +"b6253539": "needsInitialization()", +"b62596a2": "fundStorageVaultAddr()", +"b625dd87": "getUpdateTAOContentStateSignatureAddress(address,bytes32,address,bytes32,uint8,bytes32,bytes32)", +"b6261d0a": "acceptOffer(address)", +"b6266248": "refunded(uint32)", +"b626913f": "buy_block()", +"b627cf3b": "welcome()", +"b627ff04": "Sheep(string,string)", +"b6282d0d": "angelOnBattleboards(uint64)", +"b628672b": "setPreSaleHalt(bool)", +"b6288553": "decim()", +"b6294bde": "AdminGetFee()", +"b629d741": "transferUnownedPlanet(address,uint256)", +"b62c0b41": "MintByBTC(uint8,address,uint256)", +"b62c208f": "CryptoQuantumTradingFund()", +"b62c3a4f": "FinastraToken()", +"b62d4301": "testingSelfDestruct()", +"b62d4ce1": "canLayEgg(uint64,uint32,uint32)", +"b62eac16": "CrowdsaleProxy(address)", +"b62f0a6b": "YouTubemasterReq()", +"b62fc7c0": "buy2(address[],address[],uint256[],bytes,bytes)", +"b63005ec": "withdrawJuror()", +"b630230a": "MIN_CROWSALE_TIME()", +"b6304c2a": "KOINCONEKT()", +"b6307f0e": "nLuckyVoters()", +"b630aa48": "tokensSentPresale()", +"b630d706": "thisisfine(uint256)", +"b631c8e8": "_generateCastleSale(uint256,uint256,uint256,uint256)", +"b632d2e0": "SingularityTest20()", +"b633620c": "getTimestamp(uint256)", +"b6339418": "storeNumber(uint256)", +"b633b2ab": "getNextRoundTimestamp()", +"b633d272": "emitWorkResumed(uint256,uint256)", +"b633e4cd": "claimBalance(address)", +"b63423a3": "testCheckoutCart()", +"b63426b3": "Oxygen()", +"b634fc77": "FathomToken(address,address,uint256,address)", +"b6356251": "callThisContractBalance()", +"b63569c3": "developer_address_for_C(address)", +"b635a52d": "disconnectOrderPrice(address,address,uint256)", +"b635ba5f": "getEthValueAmount()", +"b6363cf2": "isOperator(address,address)", +"b63688d3": "setValidationOpen(uint256)", +"b637b269": "maximumValueDuringGuaranteedPeriod()", +"b637b7c4": "BZToken(uint256,string,string)", +"b638f72a": "_preICOSale(address,uint256)", +"b6397a42": "lotteryGiveHunt()", +"b639c9ec": "burnWarrior(uint256,address)", +"b63a35bf": "CTX_Cap()", +"b63a61d3": "auther_user()", +"b63adb3a": "preico(uint256,address,uint256,uint256)", +"b63bb5c6": "SNToken(uint256,string,string)", +"b63c2ac4": "setPowerContract(address)", +"b63c57f1": "buyForBitcoin(address,uint256)", +"b63ca981": "setHKGPrice(uint256)", +"b63cf3ca": "BitcoinDiamond()", +"b63deb24": "setSendProfitsReward(uint256)", +"b63df2a0": "approveControllerContractMigration()", +"b63e0cd8": "start(uint32)", +"b63e93dc": "ownerClawback()", +"b63ed405": "getWeiBalance()", +"b63f0d20": "newcheckToken()", +"b642c768": "_distributeTeamToken(uint256)", +"b642d58f": "INIT_DATE()", +"b6435f00": "getUsersAwaitingForTokensTop150(bool)", +"b6438092": "ManifestoCount()", +"b643f2c9": "stopDefrost()", +"b644ee41": "PRESALE_END_DATE()", +"b6469620": "getPersiansBattlePoints()", +"b64698cb": "_resolveAquarium(uint256)", +"b646c194": "addApprover(address)", +"b647990a": "countVotes()", +"b6481a92": "GotingToken()", +"b6496c6a": "addressLUTSize()", +"b64a097e": "info(bytes32)", +"b64afbe5": "participate(address,uint256)", +"b64b09d5": "invokeFallback(address)", +"b64bbd9e": "Finalizable()", +"b64c154a": "Klassicoin()", +"b64c1e7e": "claimForDeposit(address,address)", +"b64c4905": "sellVolumesCurrent(address,address)", +"b64c9326": "projectoperation_beneficiary()", +"b64d44f1": "TeamLockingPeriod12Months()", +"b64dc853": "onCompensated(address,uint256)", +"b64e2fc4": "getIncludes(uint256)", +"b64e8ad8": "addAllocationPartTwo(uint256)", +"b64eecb1": "transactionRequestCore()", +"b64f3cac": "getDSPRegistry()", +"b64ff429": "consent(bytes32[])", +"b64ff868": "getAdvertisers(bytes32,uint256)", +"b650048b": "unpausePlayerContracts(uint256,uint256)", +"b6506f25": "setLLV_edit_20(string)", +"b6508067": "lastTotalSupply()", +"b6509c12": "Ethereum_twelve_bagger()", +"b650bbef": "safetyInvariantCheck(uint256)", +"b65177ee": "ERC827Receiver()", +"b651cbaf": "add_level(address,bytes)", +"b652c822": "transferPosition(bytes32,address)", +"b652dc2f": "SOFT_CAP()", +"b65412b5": "refundPayment()", +"b65418f5": "raisedIcoValue()", +"b6549f75": "revoke()", +"b654bdb0": "HIBA()", +"b655078a": "getPlayerWager(uint256)", +"b655d0c4": "getBaseRate()", +"b655e138": "sliceAddress(bytes,uint256)", +"b655f822": "Ballot()", +"b655fda2": "updateUserFullName(address,bytes32)", +"b656850a": "_getStakingEpoch()", +"b656e9f4": "isInTestMode()", +"b6576bdf": "getValue(bytes)", +"b657ae63": "eSendTokens(address,uint256)", +"b657c996": "control(address)", +"b6581516": "crossForkDistribution()", +"b6588ffd": "del()", +"b65a1350": "rateLastWeek()", +"b65a34f5": "CeffylToken()", +"b65ae769": "WithdrawSpecialToken(address,uint256)", +"b65b3f80": "exchangeAndSpend(address,uint256,address)", +"b65b4c9a": "sponsoredBonusMax()", +"b65b99a3": "_verifyDate(string,uint256)", +"b65bce8b": "ContractDisabledEvent(uint256)", +"b65be60d": "_updateLots(uint256)", +"b65c2611": "setUnfreezeTimestamp(uint256)", +"b65c2b40": "incrementLastTokenId()", +"b65c3a7f": "calcAmountAt(uint256,uint256,uint256)", +"b65cb801": "SnailToken(uint256,string,uint8,string)", +"b65d0807": "Carpio()", +"b65dc843": "crowdsaleMintingCap()", +"b65ddf2b": "addTipForDeveloper(uint256)", +"b65e1ab8": "setGoldmintFeeAccount(string)", +"b65f3bb5": "executeOffset(address,uint256,address,uint256)", +"b65f90e3": "split(uint8,bytes6,uint8)", +"b65ff419": "deleteNick()", +"b6607cc5": "AML_THRESHOLD()", +"b6608467": "updateShares(uint256)", +"b660d77c": "switchMPO(address,address)", +"b6615acc": "_isAllowed(address,uint256)", +"b661f55d": "saleTokensHaveBeenMinted()", +"b6622c0f": "updateDonor(address)", +"b6629d98": "placeBetEth(bytes)", +"b6629e20": "purchaseWithEth(uint256)", +"b662a73c": "freezeUpgrade()", +"b662dc9b": "OWNER_SUPPLY()", +"b662ef9c": "InsuranceMasterContract()", +"b6635be6": "setupComplete()", +"b663dc0a": "ONE_QUINTILLION()", +"b6644080": "ADMIN_GET_USD(uint256)", +"b66578dc": "nextSeedHashB()", +"b6660af4": "schelling(address,address,bool)", +"b667486d": "BetClosedNoWinningTeam(address,uint256)", +"b6674935": "minPot()", +"b66846fc": "offerToSell(uint256,uint256)", +"b668efe7": "PI_EDIT_2()", +"b6693f80": "phase_2_remaining_tokens()", +"b66a0e5d": "startSale()", +"b66a261c": "setSpread(uint256)", +"b66a323c": "claimThrone(string)", +"b66a94ef": "erc20ECHT(uint8)", +"b66aae65": "removeHoldByAddress(address)", +"b66afea3": "getOrCreateFeeWindowByTimestamp(uint256)", +"b66ce7cc": "Ignite()", +"b66d887a": "setSTGContractAddress(address)", +"b66dbdc5": "totalSupplyHistoryLength()", +"b66dd4b2": "lockFromSelf(uint256,string)", +"b66deb80": "removeEntry(address)", +"b66e68f2": "testFirst(bytes)", +"b66e7524": "getReportingStartTime()", +"b66f39ad": "withdrawAvailableReward(bytes32)", +"b66f7a8b": "isEnded(uint256)", +"b6700930": "removeSet(bytes32)", +"b670a4b1": "unsoldTokens()", +"b670a910": "frontWindow()", +"b6712a4f": "gatFoundDeposit()", +"b6721bc4": "setMinPaymentForAnswer(uint256)", +"b6725bcf": "bitswift()", +"b672b4d4": "testTransferToken()", +"b672cf50": "balanceOf(uint128)", +"b6738bfb": "presalePiStart()", +"b673a75c": "crowdsaleAddr()", +"b673ddb7": "hasAirDropHero(uint16,address)", +"b674e749": "mock_contains(address,address)", +"b675271e": "contributeForDcorpMember(address)", +"b6755038": "_setPotValue(uint256,uint256)", +"b6757b50": "RocketPoolToken()", +"b67590aa": "batchTrade(address[11][],uint256[11][],uint8[2][],bytes32[2][],bytes32[2][])", +"b6761717": "pullEtherFromContract()", +"b67719fc": "WithdrawFunds(address,uint256,address)", +"b6791322": "createERC20(uint256,string,uint8,string)", +"b6791ad4": "getChain(uint256)", +"b67a77dd": "ART1(address)", +"b67aa257": "purchasePop(uint256)", +"b67b1a4d": "withdrawEtherOnlyOwner()", +"b67b60c7": "nextPrime(uint256)", +"b67b7163": "approve(string)", +"b67ba1b5": "killWallet()", +"b67c2893": "VitalLogging()", +"b67c838f": "Total_Paid_Out()", +"b67cb359": "feed1(uint256)", +"b67d4111": "getItemUri(uint256)", +"b67d50b5": "referrerBalanceOf(bytes32)", +"b67d77c5": "sub(uint256,uint256)", +"b67d8c69": "order_counter()", +"b67ddf20": "BlockICOdatetime()", +"b67e2064": "injectEtherFromIco()", +"b67e5b3b": "validPurchaseBonus(uint256)", +"b67f4eff": "sendTo(address,uint256,uint256)", +"b67f8b6d": "Master()", +"b67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", +"b68035a7": "COMMISSION_DIVIDER()", +"b6813b1c": "setcoe(uint256,uint256)", +"b6816590": "previousFounders(uint256)", +"b681f9f6": "resumeContribution()", +"b6823a66": "tournamentRewards()", +"b682c019": "pieceWanted()", +"b682da3e": "feesData()", +"b682ea1b": "_figthEnemy(address)", +"b6834572": "EOS()", +"b684101d": "emitExecuted(address,uint256,uint256,uint256)", +"b684ccad": "getDisputesToSolve()", +"b6854f96": "freezeToken(uint256)", +"b685afd0": "getBlockVerifierAddress(uint256,uint256)", +"b6868a69": "theFunction()", +"b686a635": "PossContract()", +"b686c983": "cancelLoanRequestAtIndexByBorrower(uint256)", +"b686d8b4": "holdingTaxInterval()", +"b686e44c": "SHA256ofArtwork()", +"b688524f": "_isCeo(address)", +"b688578c": "STAGE_3_START()", +"b6889e48": "globalChanceNo()", +"b688a363": "join()", +"b6893f7d": "DataContacts(address,address,address,address,address)", +"b6898845": "RPESALE_TOKEN_SUPPLY_LIMIT()", +"b6898d6c": "addVowInfo(bytes32,string,string,string)", +"b689ca61": "sellsIntermediateGoodWithDepletion(address,uint256,string,uint256)", +"b689d5ac": "has()", +"b689d850": "FederatedOracleBytes8(uint8,uint8)", +"b68a06ba": "transfer_with_extra_gas(address,uint256)", +"b68c6ae3": "mtcLastDay()", +"b68cc035": "bonusLimit(uint256)", +"b68cf49f": "roundResolved()", +"b68d1809": "getDomain()", +"b68d1d4d": "addressInArray(address)", +"b68e15d6": "freezedAccounts(address)", +"b68e21ac": "FinishLottery()", +"b68e7f6e": "testCastVote()", +"b68e8552": "setRegionOwner(uint16,address,uint256)", +"b68e8760": "setBn(bytes32,bytes32,string)", +"b68ed11f": "preSaleSoldTokens()", +"b69065d6": "DevelopeoERC20(uint256,string,uint8,string,bool,bool)", +"b69147f2": "monthlyMinting()", +"b6926b52": "RaffleDraw()", +"b692c89d": "getRaised()", +"b6932ce7": "solicitaPagamento()", +"b694dbb5": "fromBytesToBytes32(bytes)", +"b695ecfd": "HonestHeart()", +"b696a6ad": "issue(uint256,address)", +"b6972146": "mul(int128,int128)", +"b6974d87": "cancelVoteForCashBack()", +"b6975ddb": "becomeSnakemaster()", +"b697fc93": "POT_DRAIN_TIME()", +"b6982c7f": "setup_race(uint256,uint256)", +"b6984002": "EQU(uint256,string,string)", +"b6990ee1": "getPollWinner(uint256)", +"b6992247": "getStakeholders()", +"b69924c3": "GetNextWithFunds(uint256,uint256)", +"b6994dc0": "RomanLanskoj()", +"b69a375d": "callback(uint256,string)", +"b69a8107": "setSkcAdderss(address)", +"b69b5611": "setOwnership(uint256,address,address)", +"b69ba46d": "publishMetaData(bytes32,bytes32,bytes1)", +"b69c0896": "BaseScheduler(address,address,uint256)", +"b69c2115": "approveRequest(bytes32,uint256)", +"b69e7d70": "random(uint256,uint256,address,uint256)", +"b69e9b1d": "getStaticElementAt(uint256)", +"b69ea1e9": "WineSpiritCoin()", +"b69ec629": "setBpToken(address)", +"b69ee531": "GBNC(string,string,uint256,uint8)", +"b69ef8a8": "balance()", +"b69f5ada": "totalUserProfit()", +"b69f917d": "addCosToGame(uint256,uint256,string)", +"b69fae22": "hashTransfer(address,address,bytes,uint256)", +"b6a0a119": "countDestinations()", +"b6a12f63": "setTokenMarketMaker(address,address,address,address)", +"b6a1cb2b": "setMinReward(uint256)", +"b6a2b110": "SOCXSentToETH()", +"b6a324e0": "fundMe()", +"b6a46b3b": "create(string)", +"b6a48c2a": "abcLottoController()", +"b6a499ab": "_computePVPWarriorAura(uint256,uint256)", +"b6a4a0e9": "GogaTokens()", +"b6a5091a": "HuanHuiToken()", +"b6a59176": "getUsedCoreSupply()", +"b6a5d7de": "authorize(address)", +"b6a65665": "getGameData(uint256)", +"b6a79409": "necropolisContract()", +"b6a7b42c": "getMyTomatoes()", +"b6a8933b": "EXCHANGE_COMMISSION()", +"b6a96e45": "BuyCarCompleted(address,uint256)", +"b6a9ed31": "sellAnts()", +"b6abd4e7": "transfer_close()", +"b6ac24df": "updatePatchTree(bytes32)", +"b6ac4984": "tokenTransfersEnabled()", +"b6ac642a": "setWithdrawFee(uint256)", +"b6acabc1": "crowdFunding()", +"b6acc48c": "ICO_TOKEN_CAP()", +"b6acd931": "payDAPP(address,uint256,address)", +"b6ad4784": "resignTranscoder(address)", +"b6ad57d6": "paySmartContract(bytes32,address[],uint256[],bytes32)", +"b6ad8934": "renounceFundkeeper()", +"b6add0f4": "initPrice()", +"b6ade100": "notifylvlClients(string,string)", +"b6ae90fb": "FuturOwner()", +"b6aeb4a2": "erc20VARA(uint8)", +"b6aeec7b": "CHATTER()", +"b6af3643": "setWithdrawalTime(uint256)", +"b6afd2ca": "listMembers()", +"b6b0eaca": "SMILEHEART()", +"b6b0f77b": "idToString(bytes32)", +"b6b12e61": "getRoundDetails(uint256)", +"b6b18eff": "founderWithdrawablePhase1()", +"b6b1e359": "verifyIt(bool)", +"b6b2210c": "lockSell(bool)", +"b6b32c07": "presalePurchase(address[],address)", +"b6b35272": "isWhitelisted(address,address)", +"b6b3d325": "view40()", +"b6b425c7": "doSingleMigration(uint256)", +"b6b55f25": "deposit(uint256)", +"b6b57c9e": "setWhiteListContractAddress(address)", +"b6b57ebd": "finalizeWorkOrder(address,string,string,string)", +"b6b7032e": "rentalAccumulatedPrice()", +"b6b7e7eb": "toRLPItem(bytes)", +"b6b7e84d": "SGTExchangerMock(address,address,address)", +"b6b8c3cd": "m_categoriesCreator()", +"b6b9d57e": "propertyIndexToData(uint256)", +"b6ba1a98": "NIMFA_PER_ETH_SALE()", +"b6ba600a": "lockGNO(uint256)", +"b6baffe3": "getDifficulty()", +"b6bb38dc": "approveCetification(address)", +"b6bb3ade": "multiCall(address[],address,uint256[])", +"b6bba846": "sellTokensForDash(string,address,uint256,uint256)", +"b6bbafa2": "CrowdsaleStoneToken()", +"b6bbcf5b": "benchmarkRandom()", +"b6bcf354": "getCensuring(uint16)", +"b6bd387a": "lastRegionId()", +"b6bdedca": "MagnaChain()", +"b6be128a": "getPhoto(uint256)", +"b6beb400": "NuggetsToken()", +"b6bf1b3a": "mintForDisputeCrowdsourcer(uint256)", +"b6bf3bb3": "setBlackListERC20(address)", +"b6bf7318": "clz64(uint64)", +"b6c05255": "burnOwner(address,uint256)", +"b6c054ce": "restake(int256)", +"b6c0eca8": "LogRefund(address,uint256)", +"b6c1cb03": "transferFromWithComment(address,address,uint256,string)", +"b6c1eaad": "refundStarted()", +"b6c238b5": "starts(address)", +"b6c279ee": "setInputSize(uint256,uint256)", +"b6c32d71": "startStandardSale()", +"b6c37e58": "balancesRiskcoins(address)", +"b6c3987d": "validateHarCap(uint256)", +"b6c3e8cc": "increaseApprovalInternal(address,uint256)", +"b6c44bd1": "ZCash()", +"b6c47da1": "setSuperman(address)", +"b6c4da52": "addVestingRule(address,address,uint256,uint256)", +"b6c58236": "getOwner(uint32,int256)", +"b6c6ecd3": "getDial3Type(uint8)", +"b6c78f26": "HellaBank()", +"b6c88977": "finalizeCrowdfund()", +"b6c9f707": "ContractCreation(address,address)", +"b6ca878c": "addCard(bytes32,address,uint256,uint256,uint256,uint256)", +"b6ca8996": "CentrallyIssuedToken(address,string,string,uint256,uint256,uint256)", +"b6cb3777": "collectAnts(address)", +"b6cb405b": "getContractor()", +"b6cb5d72": "NFToken()", +"b6cb7f41": "fundsVault()", +"b6cba7eb": "recoverERC20Tokens(address,uint256)", +"b6ccc6ba": "signVer(address,bytes32,uint256,uint8,bytes32,bytes32)", +"b6cce5e2": "sponsor(uint256)", +"b6cd05e5": "withdrawAllTokensOnContract(uint256)", +"b6cd0b88": "setPersonalHash(bytes)", +"b6cdc815": "maixiaohetoken(uint256,string,uint8,string)", +"b6ce5581": "oraclize_query(string,string[5],uint256)", +"b6ceb489": "OWN_burn(uint256)", +"b6cf146c": "proposeMint(uint256)", +"b6cf3579": "PROVISIONING_supply()", +"b6d1d3d1": "setAirSender(address)", +"b6d1fbf9": "setXPERContractAddress(address)", +"b6d2a9b9": "SetupToken(string,string,uint256)", +"b6d31d97": "addToPrivateSaleWhitelist(address[])", +"b6d33511": "AKTestEther(address,address,address,uint256,uint256,uint256)", +"b6d34f12": "Emission(uint256,uint256,uint256)", +"b6d3faa3": "billingAmount()", +"b6d42ec3": "setApTime(uint256)", +"b6d5e8cd": "mintUniqueTokenTo(address,uint256)", +"b6d6164a": "reject(address,uint256,bytes,uint256)", +"b6d67a0b": "hasPlayerWon(uint8,uint256,bytes32,bytes32)", +"b6d6806c": "createEscrow(address,uint256,address)", +"b6d703ae": "confirmTotalTokenThreshold()", +"b6d7855a": "TokenName()", +"b6d7dbb2": "SAtomX()", +"b6d827bb": "WhitelisterChange(address,bool)", +"b6d8f59d": "WAN_TOTAL_SUPPLY()", +"b6d9721c": "getMerkleRootAndUnlockedAmount(bytes)", +"b6d9ef60": "setOracleFee(uint256)", +"b6dadbdf": "_createPart(uint8[4],address)", +"b6dadeb4": "getCardInsurance(uint256)", +"b6daea6c": "addAgency(address)", +"b6db75a0": "isAdmin()", +"b6dc1124": "private_setPauseState(bool)", +"b6dc572f": "addSubscription(address,bytes32,uint256)", +"b6dc8e25": "exchangedAmountToReceive(uint256)", +"b6ddcd14": "icoAccount()", +"b6ded5c1": "windowPeriodEnd()", +"b6df4906": "safeOwnerOf(uint256)", +"b6e087d6": "GunChain()", +"b6e119ab": "balanceOfEnvelopes()", +"b6e390ae": "First_pay_bountymanager()", +"b6e3943a": "AK4EtherDelta(address,address,address,uint256,uint256,uint256)", +"b6e3ca3c": "UpdatedExchangeRate(uint256)", +"b6e3cc1a": "authorCount()", +"b6e456bb": "getUInt()", +"b6e49fd9": "LocalEthereumEscrows()", +"b6e54bdf": "majority()", +"b6e76873": "getAction(uint256)", +"b6e7d90b": "delegatePass(bytes32,address)", +"b6e86e13": "createProxyImpl(address,bytes)", +"b6e8bac7": "anailNathrachOrthaBhaisIsBeathaDoChealDeanaimh(address[],uint256[])", +"b6e99235": "drawNumbers(uint256)", +"b6e9c2ac": "getUserBalance(bytes32)", +"b6ea62de": "kycApprove(address)", +"b6eb15c7": "gvOptionToken10()", +"b6eb7dae": "freedWosPoolToWosSystem()", +"b6ecd81c": "Vets()", +"b6ed0632": "cancelOrder(uint256,uint256)", +"b6ed3308": "setPriceOfEther(uint256,string)", +"b6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", +"b6eda884": "ads()", +"b6edc68f": "changeMicroPay(address)", +"b6edd743": "transferTokensTo(address)", +"b6ee48aa": "setContractSK(string,string)", +"b6ee8120": "realizedETH(address)", +"b6eeb6bb": "PREPURCHASER()", +"b6ef4454": "funderWithdraw()", +"b6ef78c2": "cancelCounterStack(bytes32,bytes32)", +"b6f020b2": "checkExistsItems(string)", +"b6f0391b": "setMap(string,string)", +"b6f085c7": "usernames(bytes20)", +"b6f0ecb1": "setAMLWhitelisted(address,bool)", +"b6f1a927": "CPAWallet()", +"b6f250ea": "determineWeights()", +"b6f29d50": "awardSellers()", +"b6f35624": "boughtAmountOf(address)", +"b6f36dcf": "owner3()", +"b6f3c071": "CyCo()", +"b6f3d256": "lowestBid()", +"b6f46b61": "claimBeercoins()", +"b6f46d4c": "RFQ(string,uint256,string)", +"b6f478de": "lifeVestingStage()", +"b6f4df34": "totalSupplyEdition(uint256)", +"b6f4f96c": "fundingThreshold()", +"b6f50c29": "setICO(address)", +"b6f529d6": "paused_2()", +"b6f5dda5": "getAllInvestmentsCollected()", +"b6f5e0e6": "showProfileDetails()", +"b6f681ce": "ChangeOwner(address,address,uint256)", +"b6f687a2": "rewardKoth()", +"b6f6e8ae": "getMatches(uint256,bytes3)", +"b6f73bb9": "devuelveRoles(bytes32)", +"b6f7600d": "GetAllConsentData()", +"b6f7bfcd": "ADVISORS_ADDR()", +"b6f84764": "getRemainingUint(uint8,bytes)", +"b6f921ad": "check(string)", +"b6f98e53": "needsAllowancePayment()", +"b6f9fda5": "timeoutResolve(bytes32,uint256)", +"b6fac235": "callStcWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"b6fae6c7": "approveContract(bytes32)", +"b6fb4a14": "createNewSystem(string,uint8,uint8)", +"b6fb7e46": "endingBalance()", +"b6fb9f25": "redeemWithdrawalCertificate(string,uint256,address,bytes)", +"b6fc1043": "make(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", +"b6fc14a6": "createNewZMultiSigWallet(address[],uint8)", +"b6fc276a": "preparationPeriodEquipmentTrainingFeeMultiplier()", +"b6fca0df": "sendAirDrops(address)", +"b6fda7ba": "allocateTokenForAdvisor()", +"b6fe87fb": "remoteBettingClose()", +"b6fef44c": "increaseArrivalTime(uint256,uint256)", +"b6ff5087": "notifyDeathCancellation()", +"b7009613": "canCall(address,address,bytes4)", +"b700967b": "modexp(uint256[],uint256,uint256[])", +"b7009c97": "StatPreICO()", +"b700f67a": "settleApproveRequest(bytes,bytes,bool,uint256)", +"b7019063": "EthereumDIDRegistry()", +"b7019744": "payBack(address,uint256)", +"b701dc14": "setBackEndAddress(address)", +"b7020c63": "getSpermlordReq()", +"b7028b1c": "CryptoRideCoin(uint256,string,uint8,string)", +"b702a879": "draw(uint256,address)", +"b703aa3a": "stopForge()", +"b703c75a": "getPresaleNumber()", +"b704b608": "weiToTokens(uint256,uint256)", +"b7056765": "implementsERC165InterfaceNoCache(address,bytes4)", +"b706b764": "HelpCoin()", +"b706f78e": "_mintTokens(int256,address,uint256)", +"b7073d2e": "insertCLNtoMarketMaker(address)", +"b7086f7b": "stopSale(address,uint256)", +"b708aabe": "getrunprize()", +"b70902bc": "debug4()", +"b7090bb5": "www_experty_io()", +"b70949c9": "editContributors(address[],uint256[],bool[],uint256[],uint256[])", +"b7098a32": "Bee()", +"b709df11": "getValue(address,address,address)", +"b70a7545": "GIFT(uint256,string,uint8,string)", +"b70ae49a": "execute_payment(uint256,bytes32)", +"b70b9717": "voitingStartTime()", +"b70c9acf": "stream(bytes32)", +"b70d0b3b": "ownerEdge()", +"b70d30bf": "returnTokens2(address,uint256)", +"b70da7dc": "isKnownCrowdsourcer(address)", +"b70dfb25": "SeleniumRichChain(uint256,string,uint8,string)", +"b70f0058": "_isApprovedBattle()", +"b70f4b13": "crowdfundContract()", +"b70f6ea8": "getDataPoint(uint256,uint256)", +"b70fadb7": "getAddressFromSan(string)", +"b70fbda1": "GoldRegistry()", +"b71051e2": "percentageOf(uint256,uint256)", +"b7107d00": "setSeller(address,address)", +"b710e8fe": "_restartsystem()", +"b711e18a": "_applyRefCredits(address,uint256)", +"b7133fa9": "test(uint256[5])", +"b7134feb": "icoMaxCap()", +"b713ef49": "developer_increase_price(uint256)", +"b714075e": "transferDevBalance(address,uint256)", +"b714e3cc": "GetDynamicRatio(uint256)", +"b71503fc": "FundsDrained(uint256)", +"b7159185": "shortShare()", +"b7160dee": "CVR()", +"b7161cc1": "VitaminTokenNew(uint256,string,string)", +"b71653a8": "setGalleryThreePrice(uint256)", +"b7167359": "contributed1(address)", +"b71698c7": "solutions(uint256)", +"b716e3f2": "addBoard(address,address)", +"b716f404": "raceOut(uint256)", +"b71738f1": "withdrawDthTeller(address)", +"b717cfe6": "CallTest()", +"b717dadf": "getEtherCountFor(address)", +"b7182b95": "getTokenOwner()", +"b719397f": "IsPreICO()", +"b719d032": "predecessor()", +"b719d1d0": "getRegInfo(address)", +"b71a6dd6": "deposit_asset(uint32,uint256)", +"b71ab971": "getPlayerEarning(uint256)", +"b71c47a2": "surrender()", +"b71ce659": "GCA()", +"b71d1a0c": "_setPendingAdmin(address)", +"b71e0120": "limitBranchType()", +"b71e513b": "createGame(string,string,uint16,uint64)", +"b71e9c23": "throws()", +"b71f3cde": "onRefund(uint256,address,uint256)", +"b71f7f1c": "SuperFruit(uint256,string,string)", +"b71f8010": "setContract3(address)", +"b720a274": "_endOfICO()", +"b7213bd4": "readLog(uint256)", +"b72179ff": "viewFirstLotOfContractState()", +"b72218e3": "initialHolder()", +"b722875f": "giveBonus(address,uint256)", +"b722a9ef": "getPreviousShareholder(address)", +"b72314a1": "getGroupDescription(uint256)", +"b7232cd9": "enterBidForStar(uint256)", +"b723b34e": "mintTo(uint256,address)", +"b72413e4": "tokenDiscountPercentage(address)", +"b72481f8": "totalWinnings()", +"b725d84f": "PRICE_10()", +"b725e556": "UserOffers(address)", +"b7266456": "StandardToken()", +"b7268ef4": "rdiv(uint128,uint128)", +"b72703ac": "getPrev(address)", +"b72753d5": "updateItem(uint256,string,uint256,bool)", +"b7279ca6": "enableSweep(uint8[],bytes32[],bytes32[],address)", +"b727b194": "initialIssueMinting()", +"b7288f02": "freezeAccount(bool)", +"b72916ef": "getMsgValueBefore()", +"b7297cf3": "gameSettings()", +"b729d499": "dustPepe(uint256,address)", +"b72a0026": "APPToken()", +"b72a97e6": "updateTeamV(address)", +"b72b5a33": "NewBoardMember(address)", +"b72bedd0": "validation(uint256)", +"b72cacde": "approveByA(uint256,string)", +"b72ceab8": "alwaysRequireCosignature()", +"b72d0be5": "revocables(address)", +"b72e717d": "fromAddress(address)", +"b72f0e06": "LicenseCoin()", +"b72f547d": "startTransferGet()", +"b72f8ebb": "changeFreeBetValue(uint256)", +"b730aaaa": "Counting_CardPoint(uint256)", +"b730ee7f": "Anemoi()", +"b73112e5": "setCountryRank(uint256,string,uint256)", +"b73114b9": "purchaseCenturion(uint256)", +"b7312707": "fromHexChar(uint256)", +"b7317598": "claimI()", +"b7317806": "setEndOfICO(uint256)", +"b731e848": "left93(uint256)", +"b7324f8e": "PresaleClaimed(uint256)", +"b733e6a6": "LaunchContract(address,bool)", +"b73405a9": "roundMoneyDownNicely(uint256)", +"b734cbba": "setIcoDates(uint256,uint256,uint256,uint256,uint256)", +"b7352bee": "usdSeasonAccountPurchased(uint16,address)", +"b736ca82": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"b7375af7": "PresaleUnlimitedStarted(uint256)", +"b737ed1b": "getRandom(bytes32)", +"b737f5bd": "addOldInvestment(address,uint256,uint256)", +"b738169c": "betOnOddEven(bool,bool)", +"b7381a2c": "noteTokens(address,uint256)", +"b7384f6b": "initialOraclizeSettings()", +"b7387e66": "OpenBox(uint256)", +"b7388178": "getIsStoreSet(string)", +"b73974a1": "HIGH()", +"b73a9dbc": "variationCycle()", +"b73afe4f": "relocate()", +"b73b68e5": "lockTokens(address,uint256,bool)", +"b73c6ce9": "withdrawEarnings()", +"b73c71b2": "Test1Coin()", +"b73cb519": "changeIcoCap(uint256)", +"b73ded75": "setParams()", +"b73eb3e9": "decorationAt(address,uint256)", +"b73f02e4": "setActiveHashType(bytes32,bool)", +"b73f1e52": "fourthRelease()", +"b73fe29c": "getPeriodicalAR()", +"b73fe963": "noOfWaves()", +"b73fefe8": "rejectProposalAsHost(uint256)", +"b7403878": "updateLeaders_(address,uint256)", +"b741cb36": "setStageStartTime(bytes32,uint256)", +"b742398b": "trade(address,uint256,bytes,address,uint256,bytes)", +"b743f7b6": "giveEthCharityAddress()", +"b744a850": "getAssetTokenByIndex(uint256)", +"b744d2e6": "WithdrawEther(address)", +"b744d893": "DigiBlackCoin()", +"b7462833": "Blarity(address,uint256,uint256,uint256,address[],uint256[])", +"b7465a19": "setSlackUsersCap(uint256)", +"b746ec9f": "checkTotalPayouts()", +"b74746e7": "CharlieToken()", +"b747e025": "testFailMintNoAuth()", +"b7482509": "deposit(address,string)", +"b7491780": "_calculateNewHeroPower(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"b7491d65": "BiathlonNode(address,string,string,string)", +"b749b225": "bountyDrop(address[],uint256[])", +"b74a3266": "finalizeTemplate()", +"b74bc710": "LuckyDoubler()", +"b74bd09e": "rndGap_()", +"b74bd72b": "canTransfer(uint32,int256,address)", +"b74bee6a": "Mido()", +"b74c13f1": "storeAttachment(string)", +"b74cf3b6": "setVoterCount(uint256)", +"b74d13a5": "disableCheckArea()", +"b74d4103": "getForwardUpdateFeesTo()", +"b74d8e58": "getKittySkillScore(uint256)", +"b74db274": "VeryToken()", +"b74e20bb": "xCrypt(address,address,address,address)", +"b74e452b": "today()", +"b74e47ac": "getPartsOfOwner(address)", +"b74e825e": "DIVIDEND_FUND_FRAC_BOT()", +"b74f010f": "DreamCoin(uint256,string,string)", +"b74f312e": "changeTotalDistributed(uint256)", +"b74f32f2": "airdrop(address[],uint256,uint256,uint256)", +"b74feb18": "getRoundWinnerPot(uint256)", +"b74ffca7": "bookCab(uint256)", +"b75014c0": "startIcoMainSale()", +"b750948d": "canUserReleaseArtwork(address,address)", +"b750ac85": "LOG_HouseAddressChanged(address,address)", +"b751ecfc": "DomainIO(uint256,uint256)", +"b7526b79": "migrateDungeon(uint256,uint256)", +"b753485f": "currentGen()", +"b7538f3e": "ChangeClient(address)", +"b753a98c": "push(address,uint256)", +"b7540d9f": "freezed()", +"b756919d": "_handleEnergyTopup(address,uint256,uint256)", +"b756feff": "triggerDisposition()", +"b7581c67": "vestingFounderAllocation()", +"b7595d3f": "getBoolField1()", +"b7598cca": "AreaPrice(uint256,uint256,uint256)", +"b759f954": "approve(uint256)", +"b75a0ac6": "setICOToken(address)", +"b75baa18": "w_futureDevelopment()", +"b75c2068": "lockShares()", +"b75c4f80": "getInternalDependencies()", +"b75c7d9e": "updateDealer(string,address,uint256)", +"b75c7dc6": "revoke(bytes32)", +"b75c7e62": "MedsupplyToken()", +"b75d7e50": "getExtrasData()", +"b75ece9c": "startFundingTime()", +"b75f4084": "finishInvesting()", +"b75f9b20": "commissionPCT()", +"b75fdf3a": "liquidityPoolTokens()", +"b760744f": "MytilcoinStorage()", +"b760c979": "TokenGranted(address,uint256)", +"b760e822": "minimumPurchaseInWei()", +"b760faf9": "depositTo(address)", +"b7614de7": "stakedByUser(address)", +"b7618a31": "rvt()", +"b761962c": "sampleMulti(bool,bytes32,int8,bytes4)", +"b761a16b": "JustmakeNewAccountsIssuer()", +"b7629dcb": "investorsAddress()", +"b762e6e8": "mintTimeLocked(address,uint256,uint256)", +"b762fbac": "changeFountainContractAddress(address)", +"b763150d": "registerCustomer(address,address)", +"b763aeed": "sheetcoinToken()", +"b764132e": "CubaLibre()", +"b764311d": "RITToken()", +"b7643c5c": "_computePVPPetAura(uint256)", +"b7645ed4": "changeMaxCapUSD(uint256)", +"b76467c1": "Haltable()", +"b764e273": "failSend()", +"b764e8f5": "read_config()", +"b76564bd": "app()", +"b7656808": "minted(address,uint256)", +"b7656dc5": "transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"b7663b08": "startICO_w2()", +"b7665613": "isPlaying(address)", +"b7667603": "Goldplatina()", +"b76689a4": "createInviteID(address)", +"b766b562": "setBonusReceived(address,bool)", +"b76803b2": "cgoAddress()", +"b7682a81": "buyGanToken(uint256)", +"b768628f": "publishedWinningScoreThreshold()", +"b7688c8b": "ico_period()", +"b768cd5d": "modifyStartTime(uint256)", +"b768ce60": "getTotalVolumeToken()", +"b7692032": "Facebook()", +"b769e4c5": "LogCancelTemplateProposal(address,address,uint256)", +"b76b37dd": "toLotteryPool(uint256)", +"b76b3e39": "setICObyAddress(address,uint256)", +"b76b4ee2": "ManagerPermissionGrantedEvent(address,string)", +"b76b78fb": "getAllElement()", +"b76bf76b": "distributeTime()", +"b76c2e39": "LQX()", +"b76c3764": "NumberGame()", +"b76c5c9f": "sendAdvisorsBalance(address[],uint256[])", +"b76c8a2c": "SpartaTeamCoin()", +"b76c94e1": "fundsOf(uint256)", +"b76ce26c": "updatesolbuyrate()", +"b76d0edd": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"b76dfb28": "totalRemainInInventory()", +"b76e1324": "startCreatingAss(string,string,uint256,uint256,uint256)", +"b76e4890": "Tester()", +"b76e5e06": "getBA(bytes32)", +"b7700f33": "getManagerPubkey()", +"b77030a0": "setTau(address)", +"b770391b": "MineAffected(uint256,uint256)", +"b770485f": "specialContract()", +"b770486f": "investmentGuidesRewardsWithdrawn()", +"b770c7ef": "giftPlanet(uint256,uint256,address)", +"b7719ef5": "devWithdrawal(uint256,uint256)", +"b7742856": "mainSaleprice()", +"b774d3d7": "BankOwner_GetDonationsBalance()", +"b775553d": "setDividendCutPercentage(uint256)", +"b775c9ef": "etxAddress()", +"b7760c8f": "transfer(uint256,address)", +"b7764475": "ETHXBT()", +"b776fc15": "addItem(uint256,string,uint256)", +"b777b11e": "setBurnStart(bool)", +"b777cad7": "managerPrimary()", +"b7782455": "unicornAddress()", +"b77825d2": "getIndexOrder2(uint256)", +"b778809b": "initiateContract()", +"b778d4b4": "releaseToday()", +"b778e69e": "getPastWinnerEntries()", +"b7796a43": "getAllInvestmentsWithdrawnBack()", +"b77a284c": "transferAndCallWhitelist(address)", +"b77bf600": "transactionCount()", +"b77cd1c7": "refreshBalance(address)", +"b77d09c9": "gameGifIsOver()", +"b77d1597": "QAcoin()", +"b77d4876": "startTokensSale(address,uint256)", +"b77da4a0": "totalDevCoin()", +"b77e4185": "promotionsAvailable()", +"b77e60dd": "tokensaleSecondsToStart()", +"b77ebcbb": "Country_code(uint16)", +"b77f00b3": "preIcoPhaseCountdown()", +"b77f39fe": "recoverTokens()", +"b77fc549": "withdrawAffiliateCommission()", +"b77ffaf5": "changeInvestNum(uint256)", +"b7808600": "ClaimCrowdsale(uint256)", +"b780a659": "cryptoString()", +"b780ef58": "_transferRobot(address,address,uint256)", +"b7813355": "getTotalCollectedWei()", +"b781ad99": "ALLOC_SALE_CORNERSTONE()", +"b781afa7": "EverhuskCrowdsale(uint256,uint256,uint256,address)", +"b7825cfc": "addTask(bytes32,string)", +"b782fc9b": "getFirstActiveDuel2()", +"b7833cc3": "getWitness(uint256)", +"b783508c": "receiveAuction(address,uint256,uint256,uint256)", +"b78376e9": "addPayer(address)", +"b783969f": "GenkiProjectToken()", +"b783d6c7": "challengeRegistration(bytes32)", +"b7840731": "RedeemOraclize(uint256)", +"b7844170": "getSellUnitsInformations()", +"b7844aff": "NeuroToken()", +"b7845c97": "isPhase(uint256,uint256)", +"b785473c": "satRaised()", +"b786ed91": "isCommit(bytes32)", +"b7870845": "getCalculatedFees()", +"b787b91d": "registerVestingSchedule(address,address,address,uint256,uint256,uint256,uint256)", +"b7886b37": "checkReceivedUser(address)", +"b789321a": "priceRound4()", +"b7897485": "getCurrentBet()", +"b78a80ff": "delayedSetStakes(uint256)", +"b78aa7f4": "challengeChannel(bytes,bytes,bytes)", +"b78ae50a": "getCrystalsByKind(address,uint256)", +"b78b52df": "allocate(address,uint256)", +"b78b6087": "finalizeMigration()", +"b78b7232": "addFeedIn(address,address,int256,uint256,uint256)", +"b78b842d": "kyberNetwork()", +"b78bd4a5": "breakCookie(string)", +"b78be802": "emergency_withdraw(uint256,address)", +"b78be927": "ZYCoin(uint256,string,string)", +"b78c1517": "reservationFund()", +"b78c1853": "deleteOwnPeerReview()", +"b78d27dc": "bond(uint256,address)", +"b78d32cd": "BET()", +"b78da386": "withDrawFunds()", +"b78e4bfd": "jinglesInfo(uint256)", +"b78e5e26": "transferTokensFromBountyAddress(address,uint256)", +"b78f8389": "divideUpReward(uint256)", +"b78f9de7": "Sale()", +"b78fd7bc": "transferRemainingTokensToUserAdoptionPool(uint256)", +"b790301a": "PLN_Omnidollar()", +"b79047cc": "PricePredictionBettingGame(address)", +"b790505d": "set_compenstation(uint256)", +"b790634e": "getDepositRate()", +"b7909898": "allocateInitialBalances(address[],bytes32[],uint256[])", +"b790a77b": "_withdraw(address,uint256)", +"b790c32c": "transferAuditorRecord(address,address)", +"b7915e39": "getAllowedNotaries()", +"b791e8ed": "calcEffectiveOptionsForEmployee(address,uint32)", +"b791f3bc": "migrateAmountBooks(address)", +"b7928b4f": "getReason(uint256)", +"b792d022": "batchCreateSingleSeedAuction(uint8[],uint8[],uint256[],uint256[],uint256[],uint256)", +"b792e6ec": "init(uint256,address)", +"b792f5f6": "ret_luklen()", +"b7930507": "UNLOCKED_TIME()", +"b793233b": "icoEndTimestamp()", +"b7935f0a": "emergencySetDAdmin(bytes32,address)", +"b794004d": "YOU_BET_MINE_DOCUMENT_PATH()", +"b7942d78": "RegReader(address)", +"b79550be": "recoverFunds()", +"b795aab3": "getRemainingCountImpl(uint32)", +"b795dffe": "purchaseKey(bytes32)", +"b796a339": "addRegistryIntoOwnerIndex(address,address)", +"b796c9b8": "Withdrawall(uint256,address[])", +"b7970d80": "rngCallbackGas()", +"b7975d1f": "getMyToad()", +"b797b5ba": "tgeCurrentPartInvestor()", +"b798b129": "finalizeEarlyBirds()", +"b7992c0b": "finalize3()", +"b799ba7e": "CalorieCoin(address,address,uint256)", +"b79a5539": "preTokenSalesCapReached()", +"b79a6231": "Tier_Basic()", +"b79af928": "totalSpentEth(address)", +"b79c5f7f": "IntentionToFund(address,uint256)", +"b79eb3a4": "AlterContactPubkey(address,bytes32,bytes32,bytes32,bytes32)", +"b79ec028": "setLevelup(uint8[4])", +"b7a025f9": "bZxTo0xContract()", +"b7a139bf": "firstRoundPercent()", +"b7a1affa": "DACContract()", +"b7a1c236": "LogChangeIsPayableEnabled(bool)", +"b7a1d003": "SessionClose(uint256,uint256,uint256,uint256,uint256)", +"b7a2cbcc": "lockedTransfers()", +"b7a2d99d": "withdrawAbleEther()", +"b7a2e1f2": "buy(string,string,uint256,address,address,address,address,bytes2)", +"b7a311fd": "TimoNetwork(uint256,string,string)", +"b7a3446c": "oldBalanceOf(address)", +"b7a40f21": "purchasePlanet(uint256)", +"b7a55438": "replaceOperator(address,address)", +"b7a693d7": "MaxSantaRewardPerToken()", +"b7a6b6a7": "AIREP()", +"b7a7612c": "setBtcEthRate(uint256)", +"b7a78911": "testMultitransfer2()", +"b7a8807c": "openingTime()", +"b7a90cf9": "BitAseanToken(uint256,string,uint8,string)", +"b7a9434b": "registerSpawned(uint32,int256)", +"b7a973bd": "setCompte_13(string)", +"b7a97a2b": "isValidChannel(uint256)", +"b7ab4db5": "getValidators()", +"b7ab63e9": "getPollingStation(uint256,uint256)", +"b7ab7ade": "setAllowedContract(address[])", +"b7abf606": "modifyLocality(string)", +"b7ac5d3b": "marketingFundAddress()", +"b7acbd41": "checkSellerGuarantee(address)", +"b7acdca6": "addBet(uint256,address)", +"b7ad2432": "totalWindows()", +"b7adb169": "getPendingUserlists()", +"b7adb974": "lightingTransfer(address,address,address,uint256,uint32,bytes32)", +"b7ae74fd": "FreeCoin(address,uint256,uint256,uint256,uint256,uint256)", +"b7aec6a5": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256)", +"b7aec6b1": "getSpecificEscrowTransaction(address,address,uint256)", +"b7b0422d": "init(uint256)", +"b7b172b3": "cashout(address,uint256)", +"b7b1b93f": "_createPixel(uint32,uint8,uint8,uint8,string)", +"b7b1d7f7": "isCrowdSaleActive()", +"b7b1e3cc": "getPropertyData(uint16,uint256,uint256)", +"b7b2a009": "getCardDetails(uint8)", +"b7b2bbc0": "WinnerSet(uint256,uint256,address)", +"b7b2c7d6": "batchFillOrders(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"b7b2e501": "makeInvisible(uint128)", +"b7b33765": "calculationOfPayment()", +"b7b3a56e": "overflow_lower()", +"b7b3b89a": "lockedVault()", +"b7b3ea98": "endContrib()", +"b7b4557c": "LogMigrationInitiated(address,address,address)", +"b7b47e31": "batchActivenessUpgrade(uint256[],uint256[])", +"b7b48388": "addThing(bytes32,bytes32,string,string)", +"b7b4ceb3": "CPCEIco()", +"b7b4fe13": "setWhitelistDemoc(address,bool)", +"b7b5709a": "freezeFrom(address,bool)", +"b7b57c3f": "getPartnerMessage(address,address,uint256)", +"b7b5e811": "getProjectBonus()", +"b7b6700b": "viewPlayerPayout(address)", +"b7b6e978": "unlockForOrder(address,uint256)", +"b7b747c5": "testDepositUsingDeployedContract()", +"b7b8533a": "expireAfter()", +"b7b96723": "right7(uint256)", +"b7b9dead": "MyAdvancedToken()", +"b7ba0ba0": "showAssetEvent(bytes32,uint256)", +"b7ba6050": "currentTokenOfferingRaised()", +"b7bae9b7": "exists(bytes,bytes)", +"b7bb018d": "unlockingBlock()", +"b7bb208b": "JobitToken()", +"b7bc2c84": "isFueled()", +"b7bc7653": "set_pauseDET(bool)", +"b7bc7cb8": "fixedExp(uint256)", +"b7bda68f": "taxAddress()", +"b7bdc7ef": "setDomainPrice(bytes32,uint256)", +"b7bedaf1": "setPreAddr(address)", +"b7bf356a": "taskExists(bytes32)", +"b7c03170": "CurrentState()", +"b7c14d7a": "payOutJackpot()", +"b7c1a119": "percent3_33()", +"b7c251c3": "getRedeemedPeriods(bytes32,address,uint256)", +"b7c2ccb6": "getNodalblockTimestamp(string)", +"b7c3236f": "getEtherKey(uint256)", +"b7c38d02": "testControlCreateSameIpfsHashAndNonce()", +"b7c42cf0": "claimTokensICO(address)", +"b7c4b775": "setMaxGas(uint256,uint256)", +"b7c4bf17": "readyUp()", +"b7c52820": "addSentTrade(address,bytes32)", +"b7c54c6f": "getHKGOwned()", +"b7c55259": "endGame(uint256,address,address,address)", +"b7c5b181": "delegatedTransfer(address,address,uint256,string,uint256,bytes32,bytes,uint256)", +"b7c65d1a": "retrieve_domain(address,uint256)", +"b7c70c34": "seratioCoin()", +"b7c74cf6": "_calculatePayment(uint8)", +"b7c763b5": "getString(uint256)", +"b7c7986f": "getMarket_CommunitUnusedTokens()", +"b7c7ecbe": "setTitulaire_Compte_6(uint256)", +"b7c8561f": "removeDestroyer(address)", +"b7c8699d": "modifyGovtAccount(address)", +"b7c8a90a": "removeExclusionFromTokenUnlocks(address[])", +"b7c93330": "ResourcePoolTester()", +"b7c940f6": "SolarDaoTokenCrowdsale(address,address,uint256,uint256,uint256)", +"b7c97930": "registerPool(string,uint256,uint256)", +"b7c97fa0": "BEN()", +"b7c9da33": "buyTulips(uint32,uint16)", +"b7ca3086": "getSelfCount()", +"b7ca51e8": "starToken()", +"b7caf50a": "ticketsNum()", +"b7cb4830": "NERU()", +"b7cc2312": "bobClaimsPayment(bytes32,uint256,uint256,address,address,bytes20)", +"b7ccc466": "categoriesCount()", +"b7ccccaf": "bridgeValidatorsProxyOwner()", +"b7cce253": "maximumMainSaleRaise()", +"b7cdddcb": "claimEth()", +"b7cefd9f": "FlatEarth()", +"b7d02044": "deployToken(string,string,uint8,uint256)", +"b7d0628b": "getGameState()", +"b7d130ff": "isAuthorizedToSell(address)", +"b7d29e91": "NameChanged(bytes32,string)", +"b7d3a9c9": "setWhitelistAgent(address)", +"b7d3cb87": "countAllProposals()", +"b7d454a4": "setNotTransferable(bytes32)", +"b7d478bf": "getAvgAmount(uint256,uint256)", +"b7d4c4a5": "getInvestorsList()", +"b7d4dc0d": "unsetBase(address,uint64)", +"b7d4e5fd": "getX2(uint256)", +"b7d534a1": "addrToString(address)", +"b7d5d4c0": "piggyBank()", +"b7d5d74c": "balanceAtBlock(address,uint256)", +"b7d5ddc8": "setAssetClaimString(uint256,string,string)", +"b7d5e804": "remove(uint8,uint8)", +"b7d5ef4d": "BATokenFactory()", +"b7d65d17": "setUnitCoinProductionMultiplier(address,address,uint256,uint256,bool)", +"b7d6f432": "buyCar(address,uint256,bool,address,uint256)", +"b7d6f6c6": "WHALE(address)", +"b7d74fda": "DevelCoin(uint256,string,uint8,string)", +"b7d7a4e0": "say(uint256,uint256)", +"b7d7acea": "externalGiftEth(address)", +"b7d89483": "AddressList(string,bool)", +"b7d8b1d9": "emitWorkStarted(uint256,uint256)", +"b7d9549c": "incrementPrice(uint256,address)", +"b7d9d7b9": "roundTwoAmount()", +"b7da166b": "_mint(address,address,uint256)", +"b7da5b0d": "TreatzCoin()", +"b7dacbf1": "setBackup(address)", +"b7db7f0f": "allowTransfer(address,address,address,uint256,bytes)", +"b7db87e8": "testFooArray()", +"b7dc2a9f": "weiMinimum()", +"b7dc3b18": "buy(uint256,string)", +"b7dc5c11": "priceGuaranteed()", +"b7dc8a32": "firstValidBlockNumber()", +"b7dc9d85": "ORDER_DONE(address,address,address,bool,uint256,uint256,uint256)", +"b7dcf6a9": "createPromoCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"b7dd1d17": "getAllRevisionBlockNumbers(bytes32)", +"b7ddcb27": "InteractiveCrowdsaleToken(address,string,string,uint8,uint256)", +"b7de47d3": "getIndex(uint256,uint256)", +"b7dea35f": "hatchSeeds(address)", +"b7dec1b7": "GENESIS()", +"b7ded7cc": "purchaseHero(uint256)", +"b7df07a6": "receivePlayerInfo(address,string)", +"b7df7ef8": "AccountUnlocked(address)", +"b7df9289": "recvShrICO(address,uint256,uint256)", +"b7dfc8a5": "updateTokenPerEther(uint256)", +"b7e0308d": "priceStep2()", +"b7e03264": "showWinner()", +"b7e05277": "private_DelGameBar(uint256)", +"b7e05d4f": "newProposallog(string)", +"b7e09773": "devTeamReinvest()", +"b7e1917c": "tokenAdmin()", +"b7e1b974": "getStr(uint256)", +"b7e1bce7": "ReceiverAddressChanged(address)", +"b7e1ecef": "addAttendantAndTransfer(string,string,bool)", +"b7e1fd9b": "createDividend(uint256,uint256,address,uint256,bytes32)", +"b7e2263b": "getTotalMatches()", +"b7e24979": "addThing(bytes)", +"b7e28a3b": "certificationManager()", +"b7e2f504": "isPreSaleFinalised()", +"b7e39b4f": "setBalances(address[],uint256[])", +"b7e43a84": "maximumIssuerReservedUnits()", +"b7e45353": "forbidChecking(uint256)", +"b7e4a503": "Determine_Result(uint256,uint256)", +"b7e5cabb": "contractorsProfitAddress()", +"b7e621c3": "claimCompanyTokens()", +"b7e6bd34": "getTopic(bytes15)", +"b7e6dfe3": "GetApplicantAddress()", +"b7e82526": "GraybuxToken()", +"b7e83329": "ExportMaster()", +"b7e90262": "roleAdminAddress()", +"b7e92ede": "EtheRoox(address,address,address,uint256,uint256,uint256)", +"b7e9f193": "nextWithdrawal()", +"b7eb22b3": "getAccountsSize()", +"b7eb5e0a": "unlockAddress(address)", +"b7ec2086": "priceWei()", +"b7ec44b4": "asyncTransfer(address,uint256)", +"b7ecbaae": "removeWhitelistAddress(address)", +"b7ee2552": "ICOpaused()", +"b7eea206": "openLedgerAddress()", +"b7ef5fed": "claimRewards(uint16[],address)", +"b7efc1cd": "authorizeMintToken()", +"b7eff231": "oraclize_query(string,bytes[3])", +"b7efff16": "GANAPATI()", +"b7f01bfc": "tank()", +"b7f1489e": "setLosePercent(uint256)", +"b7f1e6af": "preferredSaleEndTime()", +"b7f2f33c": "transferRightIfApproved(address,bytes)", +"b7f37983": "getInvestmentRecordListLength()", +"b7f3ffed": "updateProfiterole(address,uint256)", +"b7f43a63": "brideVow()", +"b7f48211": "setPackState(uint256,bool)", +"b7f53c91": "CryptoSilver()", +"b7f545cc": "deployTokenContract(uint256,bool)", +"b7f603ff": "LimbToken()", +"b7f63665": "ttToken()", +"b7f6a75a": "XPAToken(address,address,uint256,uint256,uint256)", +"b7f6e74d": "unpositionFrom(address,address,uint256)", +"b7f79374": "DildoToken()", +"b7f84ae2": "icoPhaseTimeInterval()", +"b7f90f12": "decrementCount()", +"b7f927e6": "PROMETHEUS_VOUCHER_LIMIT()", +"b7f92b71": "reserveFund()", +"b7f9c4f6": "initCapsule(uint256)", +"b7fa265a": "_withdraw(bool)", +"b7fb1dc8": "payToMarketingReferral()", +"b7fba4d3": "getProxy(address)", +"b7fc5a48": "getPoolStars(uint32)", +"b7fc6612": "transferMany(address[],uint256[])", +"b7fcc321": "CryptoHoleToken()", +"b7fcfa69": "amountReceivedFromTransfer(uint256)", +"b7fd45a0": "EscrowICO()", +"b7fda832": "updateGenVaultAndMask(address,uint256)", +"b7fde9da": "mintCoins(address,uint256)", +"b7ff11be": "isAcceptedDcorpMember(address)", +"b7ff2aed": "withdrawMaker(address,uint256,address)", +"b8005f38": "execBoard()", +"b800b2fe": "BEZOS()", +"b800db55": "__isSenderInRole(uint256)", +"b8017221": "get_party2_balance()", +"b8029269": "get_money()", +"b804dc56": "setRecallPercent(uint256)", +"b80509c5": "getCountsById(uint256)", +"b80540c0": "Adjudicator(address[],uint256,uint256)", +"b80546c2": "endPeriodA()", +"b805a5ca": "GetChip(uint32)", +"b8066bcb": "etherToken()", +"b8068a5f": "CATServicePaymentCollector(address)", +"b80756f0": "_calculateLockedBalance(address)", +"b80777ea": "timestamp()", +"b8077e28": "getTxOrigin()", +"b8079d49": "debitWalletLMNO(address,uint256)", +"b807ed76": "SANKEYSOLUTION()", +"b80825ff": "TheBittrip()", +"b808745c": "transferPass(bytes32,address)", +"b8087ac0": "goalMet()", +"b80907f2": "getReputationToken()", +"b809127e": "getQuickPromoBlockInterval()", +"b8093100": "giveBounty(uint256,address,address)", +"b809ceb2": "updateIcoDates(uint256,uint256,uint256,uint256)", +"b80a30b7": "_getInvestorTokenAmount(address)", +"b80ac7df": "verifyProof(bytes32[],bytes32)", +"b80aedf2": "setReservedTokensList(address,uint256,uint256,uint256,bool)", +"b80cdcf6": "finishCrowdsale()", +"b80ced14": "LPCoinToken()", +"b80d3181": "annualPrice()", +"b80e63df": "baseTokenBalance(address)", +"b80ee369": "createCardForAcquiredPlayer(uint256,address)", +"b80f3532": "exchnageRate()", +"b8109e1a": "MeetingsEntity()", +"b810b81c": "Pixereum()", +"b810bfa4": "GDC(address,address,address,address,address)", +"b810d24b": "updMinPurchaseLimit(uint256)", +"b810fb43": "addressList(uint256)", +"b811215e": "initialCap()", +"b81168b4": "CNNTokenBase(uint256,string,string,uint8)", +"b8121385": "stopOperation()", +"b8121fe4": "viewPetitionSigner(uint256)", +"b8126a3e": "addSideService(address,uint256)", +"b812a6ce": "lastBlock_v11()", +"b813c627": "releasedSupply()", +"b813d939": "test_fourValidEqUint(int256)", +"b8144a72": "getBankRating(address)", +"b814660e": "AllowTransferLocal()", +"b8163641": "checkReceive(address)", +"b8174685": "_claimReward721(address,string)", +"b817e043": "JobMarket()", +"b818f9e4": "batchTransferFrom(address[],address[],uint256[])", +"b8198875": "StreamToken(uint256)", +"b81af39b": "declineMP(address,int256)", +"b81b0b6a": "claim(bytes32,string,string,address,bytes32,bytes32,uint8)", +"b81bb854": "createRequest(address,address[],address[],int256[],address,string)", +"b81c259e": "PexCash()", +"b81c6453": "vote(uint8,address)", +"b81ca723": "InitialCoinOfferingToken()", +"b81ccdd5": "cashilaTokenSupply()", +"b81ce8a7": "MicropaymentsNetwork()", +"b81db9da": "addUserValueName(bytes20)", +"b81df742": "minBuyLimit()", +"b81e3b19": "bankMoney()", +"b81e43fc": "getEventName()", +"b81ec822": "PRE_SALE_2WEEK_BONUS()", +"b81f39a8": "addToReserve()", +"b81f3be0": "deleteVotersWithoutShares(uint256[],uint256[],bool)", +"b81ff45b": "getBalanceByAccount(string)", +"b8205d35": "IncentToken()", +"b8206a18": "unVestAddress(address)", +"b820c41c": "iceToken()", +"b8216ea8": "redeemMany(address[])", +"b821da1b": "submitBid(uint256,uint256)", +"b821f815": "pay_winner(uint256)", +"b8225dec": "selfDestructInitiated()", +"b822b28a": "lastBlock_a8Hash_uint256()", +"b823aac7": "endICOTimestamp()", +"b823e991": "CourseCertification()", +"b8240a65": "UpdatedPrice(uint256)", +"b82465e9": "managerIncome(address)", +"b8248dff": "isValidOwner(address)", +"b82545e5": "judgeWin(uint256,uint256)", +"b8254880": "SurrusContract()", +"b8261f8f": "myEntityList(uint256)", +"b826d6d7": "DigiPulseToken()", +"b82852ec": "changeReserveIAMDestinationAddress(address)", +"b82864e0": "getHouseEdgeFee(uint8,uint256)", +"b828cfd2": "PRVTToken(uint256,string,uint8,string)", +"b8291bda": "Pomzon()", +"b829528e": "LotteryLog(address,string)", +"b82a0ce8": "bonusTime()", +"b82a65b2": "getReportingToken(uint256[])", +"b82a737c": "communityAmount()", +"b82b2a07": "makeProposal(uint8,uint8)", +"b82e6416": "doTimeoutForDefendant(uint256)", +"b82eb946": "_setStageLimit(uint256)", +"b82fb745": "saleEndAtBlock()", +"b82fcdeb": "tokensAllocatedForTeamAndReserve(address)", +"b82fd275": "removeFrozenTokenConfigurations(address[])", +"b82fedbb": "register(bytes32,address,bytes32,bytes32)", +"b8305b43": "HodlCreated(uint256,address,uint256,uint256)", +"b83069c5": "getStemPrice()", +"b830b305": "getpersonCount()", +"b830c538": "unassignRole(address,bytes32,address)", +"b8314c22": "whaleMax()", +"b831d137": "saleSharesSold()", +"b832004d": "setTokenInfoParametersReady()", +"b832679c": "setKmPards(address)", +"b832fdde": "NON_VESTED_TEAM_ADVISORS_SHARE()", +"b833ac27": "PolyToken(address)", +"b8341628": "mintingPreIcoFinish()", +"b834f6fb": "isMainChain()", +"b83506cf": "defaultBuyNowPrice()", +"b83520b3": "allowIcoExit(bool)", +"b835a7fe": "RubiksToken()", +"b8366bd1": "CorruptionCoin()", +"b837433c": "TEAM_ADVISORS_SHARE()", +"b837a3b8": "sendProfitsRewardBips()", +"b837c58e": "payTo()", +"b837c94f": "ASEBToken()", +"b8385339": "finalizeStage(uint256)", +"b8386f3b": "_gambling(uint256,bytes32,uint256)", +"b8388aca": "findBestRate(address,address,uint256)", +"b839e0d1": "lockedAllocatable()", +"b83a1bdc": "lastMineralUpdateTime()", +"b83a4da9": "totalWeiSale()", +"b83ace61": "setHouseEdge(uint256,uint256,uint256)", +"b83b4529": "FundsTransferredToMultisig(address,uint256)", +"b83c298e": "updateBoolSetting(uint256,bool,address,string,string)", +"b83d3f2c": "oraclizeSource()", +"b83dfdc9": "setInvestorData(address,uint256,uint256)", +"b83e1d14": "CountTokenUser(address,uint256,bool)", +"b83e4779": "OntologyToken(uint256,string,string)", +"b83e9662": "ParaTransfer()", +"b83fc6b6": "CrowdsaleClosed(uint256)", +"b8406a7e": "balanceOfLotteryNum(address)", +"b840a1db": "WhitelistChanged(address,bool)", +"b840b421": "OriginalVirtualOperation()", +"b8415b0c": "startDistribute()", +"b8416d2e": "exec(address,bytes32,bytes)", +"b84172e7": "getH1Bidder()", +"b842826c": "Built()", +"b842eef2": "test02BuyToken()", +"b8435050": "crowdsaleclosed()", +"b84391de": "setBetEndTime(uint256)", +"b8441be0": "setTransferAuthPermission(address,bool)", +"b8444c13": "forceVoidRace()", +"b845b51e": "IIPToken(uint256)", +"b845c9a2": "WEI()", +"b8471085": "PRIVATESALE_START_DATE()", +"b84738aa": "changeMinPay(uint256)", +"b848b944": "doSellerCancel(bytes16,address,address,uint256,uint16,uint128)", +"b8499750": "advisorLock()", +"b84a6849": "createShareToken(uint256)", +"b84aac5c": "decreaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"b84b05b2": "NetyulCrowdsale(address,uint256,uint256,uint256,address,address)", +"b84b276d": "second_whitelistSupplier()", +"b84b8b8c": "buyGoods()", +"b84c11da": "create(address,string,bytes32,uint256,address)", +"b84c35b3": "addCode(string,uint256)", +"b84c743b": "getReferencePrice(address,address)", +"b84c8246": "setSymbol(string)", +"b84cc017": "myBonus(uint256)", +"b84d2106": "shut(bytes32)", +"b84dda70": "tweakState()", +"b84dfbd2": "securityToken()", +"b84e1327": "checkIfContractCreatedHere(address)", +"b84e44ab": "setProviderLastSupplyID(uint256,uint256)", +"b84ebd7f": "createMechBTC(uint256,address)", +"b84ee1a4": "setTransferProxy(uint32,int256,address)", +"b84f1318": "AddNewCurrency(string,string,string)", +"b84fe73b": "voteAll(address)", +"b84fed88": "isMintContract(address)", +"b8500e5e": "purchaseRecordsNum()", +"b8506a3f": "tokensPerWei7()", +"b850ae36": "isRegular(uint256)", +"b851ed97": "bonusAllowed()", +"b8522043": "getUserList()", +"b8534ed1": "contractEndTime()", +"b8547736": "testBadWithGoodInterface(address,uint256,address,uint256)", +"b85477c5": "dealStatus()", +"b857a688": "Eth_Amount()", +"b858b39f": "PhotoAdded(address,address)", +"b85926e0": "VESTED_AMOUNT()", +"b85973c1": "overbidNation(uint8)", +"b8598f9e": "computeOppositePrice(uint16)", +"b85a6a20": "numComments()", +"b85bf538": "ownerSetBankersLimit(uint256)", +"b85c2f72": "submitEntry(uint256,uint256,uint256,uint256)", +"b85cf54e": "rewardPoolPercentage()", +"b85d6275": "RemoveModerator(address)", +"b85dfb80": "backers(address)", +"b85e0402": "AppCoinsIAB()", +"b85e0aca": "legacyRepContract()", +"b85e5915": "ExitPlincWithLoss(uint256)", +"b85e7df1": "setPresaleMode()", +"b85e84c0": "judgeFinality(bytes32[13],bytes32[],bytes32[],bytes32[10],uint256[4])", +"b85ea983": "countPortfolios(address)", +"b85eb295": "checkOwnershipAndAvailability(address,uint256[4])", +"b85ed17d": "getHolderByIndex(uint256,address)", +"b85f726a": "Cashier()", +"b85fb20f": "getPollStage(uint256)", +"b861be22": "checkPermissions(address,address)", +"b8621759": "issueNewCoins(address,uint256)", +"b862d80d": "minBetVal()", +"b86397e7": "mFUNDING_CURRENT_DURATION()", +"b863bd37": "random(uint256)", +"b8642896": "ETSToken(address)", +"b864f5a9": "verify(uint256[],uint256[])", +"b8657988": "MYSUPERTOKEN()", +"b8661e2d": "getAllTeamsIds()", +"b86780b3": "restTokensBurned()", +"b867e8e6": "accrueDividendsPerXTokenETH()", +"b868723e": "endPrice()", +"b868a2ff": "update(uint256,uint256,bytes32[])", +"b8697dbd": "getLockByIndex(uint256)", +"b869f1e2": "SALE_CAP_IN_USD()", +"b86a1fb2": "adminPool()", +"b86a3582": "ETCH3dVs()", +"b86b14cd": "setRate1(uint256)", +"b86b9aa4": "getJackpotWinBonus(uint8,bytes32,bytes32)", +"b86bc74f": "CERTIFIER()", +"b86c49e1": "getMarketsItemId(uint256)", +"b86c6b7b": "calculateCellBuy(uint256,uint256)", +"b86c9845": "MithrilSword()", +"b86dab46": "addToApprovedAddress(address)", +"b86df9db": "RewardRecycled(uint256,address,uint256,uint256,uint256)", +"b86e0657": "removeServer()", +"b86e321c": "withdrawReward(address)", +"b86ec38f": "REIMBURSABLE()", +"b86eeb69": "bountyTotalSupply()", +"b86f602c": "submitOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"b86f6aa7": "resetCollectedFees()", +"b8701689": "removeGlobalConstraintPre(int256,address,int256,address)", +"b870ecbb": "testNormalWhitelistAdd()", +"b870f613": "back(address,uint256)", +"b8716f3a": "_teamTransfer(address,uint256)", +"b8726395": "Mint(int256,uint256)", +"b873846f": "ArrayPasser(uint8[9])", +"b873e9a7": "trustedReportingParticipantTransfer(address,address,uint256)", +"b875a5e0": "rateThirdRound()", +"b8760ad3": "payStakingFee(address,uint256,uint80,uint80,uint256,address)", +"b87760ad": "uint256Tostr(uint256)", +"b8782d49": "PHASE2_RATE()", +"b8788453": "mainSale_StartDate()", +"b87aedcc": "recentPlayersFront()", +"b87b9ac3": "testExchangeRate(uint256)", +"b87ba329": "getMemoryTraceMeta(uint256)", +"b87c01e3": "GVPE_address()", +"b87c03c2": "multiAccessOwners(uint256)", +"b87c7d43": "setEthAmount(uint256)", +"b87cbafc": "bn128_check_pairing(uint256[12])", +"b87d8712": "RulesProposalSubmitted(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b87dbf81": "handleAffiliate(uint256,uint256,uint256)", +"b87dddf6": "tokenFallback(address,uint256,bytes,string,uint256)", +"b87e461c": "scrapPercent()", +"b87e64ce": "DecentBetVault(address)", +"b87ee9d6": "setLLV_edit_4(string)", +"b87f9b98": "_stringToByte(string)", +"b87fb3db": "start_block()", +"b87fb721": "LogNewTemplate(uint256,address,string)", +"b87ff295": "MintTokens(int256,address,uint256)", +"b8803738": "total_user_eth_cap()", +"b88064ad": "peMinPerPerson()", +"b881604d": "removeStrip(uint256)", +"b8840d3d": "getDrug(uint256)", +"b88467c2": "getProjectEscrowAddress(bytes32)", +"b8847e9d": "haltRevealPeriod(bytes32)", +"b8850556": "ApplyAction(uint32,uint32,uint256,address,address)", +"b8851fea": "endDateStart()", +"b8852718": "transferLockedPart(address,uint256)", +"b8857936": "dtSetEthBalance(address,uint256)", +"b885acd8": "fourthWeekTokenPrice()", +"b885d560": "airDeliverStandalone(address[],uint256[])", +"b88635e2": "PtestToken()", +"b8867485": "proxyOf(uint256)", +"b8871f98": "_createEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,bool)", +"b8872fb7": "reinvest(address)", +"b8873077": "HUNT(uint256,uint256,uint256,uint256,address)", +"b88746b0": "previousDrawingClosed()", +"b8878171": "getPersiansBattlePointsBy(address)", +"b888690a": "deleteMessage(uint256)", +"b888a492": "isNewPayoutPeriod()", +"b888a66b": "tktPrice()", +"b888adfa": "lastPhaseChange()", +"b88903f7": "TokenDrop(address,uint256)", +"b8894fe3": "mintTokenToBuyer(address,uint256,uint256)", +"b889d440": "markTokenSold(uint256)", +"b88a374c": "EarnEnoughMoney()", +"b88a529b": "getCurrentRate(uint256)", +"b88a802f": "claimReward()", +"b88ab668": "TBXToken()", +"b88c9148": "getFee(address)", +"b88d0169": "INITIAL_EMISSION_FACTOR()", +"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)", +"b88d6aa7": "refund(bytes32,uint8,uint256,uint256)", +"b88e8518": "FluencePreSale(uint256,uint256,uint256)", +"b88e962f": "showEmployee(uint256,uint256,uint256)", +"b88eef53": "registryCreated()", +"b88f9936": "setMinTms(uint256)", +"b88fd16e": "developmentFundAddress()", +"b8901a41": "am_I_locked(address)", +"b8905649": "Crowdsale(address,uint256,uint256,address,address)", +"b8906755": "payProviderFee(address)", +"b890de6b": "thirdLineWrong()", +"b890ed85": "CryptoSagaCardSwapVer2(address,address,address,address)", +"b891656e": "thismanyblockstillthspudholderwins()", +"b8918710": "FangTangCoin(uint256,string,string,uint8,bool,uint256,uint256,uint256,uint256)", +"b893deb1": "getContestEndTime()", +"b89503f3": "getDiceWinAmount(uint256,uint256)", +"b895947a": "Janders()", +"b895c813": "registIcoAddress(address)", +"b896149c": "BLUEOS()", +"b89648cf": "getBoughtTicketList()", +"b8972db5": "sendToken()", +"b8973927": "setContractStart(bool)", +"b89761b8": "encoded_data()", +"b897b4f5": "multAirdrop(address[],uint256)", +"b8991ffb": "reject_payment(uint256,bytes32)", +"b899e1b7": "_setApp(bytes32,bytes32,address)", +"b89a73cb": "isShareholder(address)", +"b89bf71d": "safeWithdrawal4(address)", +"b89c5932": "setRequestLimitInterval(uint256)", +"b89c70c0": "calculateCoinBuy(uint256,uint256)", +"b89cd5bd": "icoPartner(address,uint256)", +"b89e066a": "MINCAP_TOKENS_PRE_ICO()", +"b89e8cbb": "getRemainingSellingTime()", +"b89f3025": "investExt(address,uint256)", +"b89fc89e": "setDistributionAddress(address)", +"b89fde71": "CheckAmbientTempException(bytes32,uint32)", +"b8a15b1d": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address,uint64)", +"b8a1e355": "doBet(uint256)", +"b8a1fdb6": "transferAndFreezing(address,uint256,uint256,uint256,uint8)", +"b8a24252": "checkpoints(uint256)", +"b8a25119": "setPresaleMode(bool)", +"b8a268c1": "getCloseFlag(bytes)", +"b8a32c7e": "claimTile(uint256,uint256,uint256)", +"b8a358e9": "canMintUtility(address,uint256)", +"b8a393b8": "openCompetition()", +"b8a3c6ea": "KPCSAdministrator(string)", +"b8a4a064": "applauseCashCrowdsale()", +"b8a4b858": "INVESTOR2()", +"b8a4db81": "addValueBonus(uint256,uint256)", +"b8a4f9ae": "addInFutureExpanstionMap(address)", +"b8a5368a": "gameStart(uint256)", +"b8a548c5": "SCTokens()", +"b8a582a9": "EtherMoney()", +"b8a582af": "logicVersion(address)", +"b8a67b6e": "GiroToken()", +"b8a67c3c": "expireDate()", +"b8a684f8": "CryptoSagaSwapPLAT(address,address,address,address)", +"b8a76f54": "setIPFSHash(string)", +"b8a7c78a": "CommunityAddress()", +"b8a80aac": "getItem(address,uint256)", +"b8a876ed": "Quitcoin()", +"b8aa0a34": "getSealDate()", +"b8aa4da8": "addMemberToBS(address)", +"b8aaae7a": "PXXToken()", +"b8aac3a5": "createAndSignBBODocument(bytes,bytes,address[],uint256)", +"b8ab9203": "secondRoundMayTokensLimit()", +"b8ab9883": "claimTimeoutEndedWithMove(bytes32,uint256,uint256)", +"b8aba8cf": "NewPayment(address,uint256)", +"b8abd184": "getInvestorKey(bytes32,uint8)", +"b8aca90b": "CurrentGame()", +"b8ad2abe": "addTokenGrant(address,uint256)", +"b8ad2fca": "claimMeme()", +"b8adaa11": "reject(uint256)", +"b8af146f": "subsm(uint256,uint256)", +"b8af21b9": "isLotteryClosed()", +"b8af6bc7": "getAgentsAmount()", +"b8af7642": "seeAddress(uint256)", +"b8afae78": "IPM2COIN()", +"b8afd597": "FinishRoundGamble()", +"b8b040a1": "xapo()", +"b8b0f533": "get_bitcoineum_contract_address()", +"b8b13e6b": "MaximumcoinStart()", +"b8b18915": "withdrawBonus(address)", +"b8b199e5": "_userSignUp(string,address,bool)", +"b8b19c27": "MultiOwnable(address[16],uint256[16])", +"b8b2052c": "setCrowdsale(address,address)", +"b8b23120": "getFlagPrice()", +"b8b27765": "payManagementBodyPercent(uint256)", +"b8b2bdad": "setBool(string,bool)", +"b8b2d490": "feePerSec()", +"b8b359b8": "voteByIndex(uint256,address,uint256)", +"b8b3d85b": "getFunderBalance(address)", +"b8b459bc": "OrderUpdated(uint256)", +"b8b4f1a0": "signContract()", +"b8b52652": "startFightA(uint256,uint256,bytes4)", +"b8b570f1": "Distributed()", +"b8b690e7": "__targetExchangeCallback(uint256)", +"b8b798be": "getYearlyUSDSalariesTotal()", +"b8b7b899": "receiveTransfer(address,uint256,address,bytes)", +"b8b7edb2": "hashToken()", +"b8b808cc": "getAddressFromNumber(uint256)", +"b8b85873": "purchaseArray(uint256)", +"b8b8d387": "myWeiValue()", +"b8b8fc3a": "getPI_edit_20()", +"b8ba427d": "RetDime()", +"b8ba532f": "developer_edit_name(string)", +"b8ba7c7f": "createGen0Auction(uint256,uint8,uint8,uint8,uint8)", +"b8baed2c": "calcTradeFeeMulti(uint256[],uint256[])", +"b8bb372c": "APIHeaven()", +"b8bb41dc": "setReceiver6()", +"b8bcaad5": "_randomPack(uint256)", +"b8bce6d0": "dateEcoRelease12()", +"b8bcf6c9": "ico2ndPrice()", +"b8bd3dbb": "setMakerFee(uint256)", +"b8bdd8dd": "close(bytes)", +"b8bdf701": "initiateCreateSale(uint256,uint256,uint256,uint256)", +"b8be73ed": "offchainUploaderAddress()", +"b8beafd6": "buyVolumes(address,address)", +"b8bf029b": "list(address,uint256,uint256,uint256,uint256)", +"b8bf0f1f": "getRemainingBlocksUntilPayoutk()", +"b8c0517a": "splitStake(address,address,address,uint256)", +"b8c26d0b": "ContractWithParams(address)", +"b8c2a9e1": "getBidReports(uint256)", +"b8c375b6": "WavesToken()", +"b8c48f8c": "setInitialParent(int256,int256,int256)", +"b8c508e5": "MOBOL()", +"b8c52477": "_exchange(uint256,uint256)", +"b8c577ff": "setGrowth(uint32)", +"b8c58128": "setList(uint256,uint256[])", +"b8c65462": "preICOSaleStart()", +"b8c6a67e": "maxPendingParticipants()", +"b8c6d2e9": "BretCoin()", +"b8c6f579": "setAuction(address)", +"b8c766b8": "saleClosed()", +"b8c78391": "releaseableBalanceOf(address)", +"b8c7dea3": "stageCurrentSum(uint256)", +"b8c7e354": "tryToCompleteProject()", +"b8c86aa6": "getArraySettingResult()", +"b8c87a06": "setStage3()", +"b8c8fb73": "solve(uint256,uint256,uint256,uint256)", +"b8c92537": "acceptBidForCollectible(uint256,uint256,uint256,int256)", +"b8c9371d": "getPassOwner(bytes32)", +"b8c963a6": "atxContract()", +"b8c9c4d2": "burnResource(uint16,uint256)", +"b8c9d365": "h()", +"b8c9e4ed": "getStr()", +"b8c9e694": "getRaceMutation(uint32)", +"b8cb243d": "escrowTransfer(uint256,address)", +"b8cb40e0": "getDistributedTotal()", +"b8cb65ee": "removeTokens(uint256)", +"b8cc3c12": "depositToSubRound(uint256)", +"b8ccbd17": "removePermission(bytes4)", +"b8ccc682": "constructUrl(bytes32,uint256)", +"b8ccf4c7": "sendPositiveWhuffies(address,string)", +"b8cd0b94": "DoorLock()", +"b8cd4a8e": "joinCarveUpTen(uint256)", +"b8cd81ed": "raffleTokenReward()", +"b8ce670d": "burn(address,uint256,address)", +"b8cf14e7": "updateStatusPlayer()", +"b8cf2515": "currentFundrise()", +"b8d00d4a": "requestErc20Transfer(address,address,uint256)", +"b8d04f4e": "getReferrerAddress(address)", +"b8d08db2": "releaseCount()", +"b8d0cf4a": "setTokenPriceUSD(uint256)", +"b8d117fc": "bonusEnds4()", +"b8d1194c": "tokenGoal()", +"b8d16dbc": "isLeapYear(uint256)", +"b8d2f523": "no_aff()", +"b8d364bb": "allDistinct(address[5])", +"b8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", +"b8d3d08a": "assertEq29(bytes29,bytes29)", +"b8d400d2": "fromEthers(uint256)", +"b8d415c9": "bntyMicrodollarPrice()", +"b8d46c9c": "setOrUpdateRecord2(string,string,string,string,address,uint8,bytes32,bytes32)", +"b8d4b642": "startICODate()", +"b8d4efb5": "validate_percent(uint8)", +"b8d55a91": "CPLToken()", +"b8d5b7f0": "maximumToken()", +"b8d73101": "expirationString()", +"b8d73849": "LogTokenDeposit(address,uint256,bytes)", +"b8d74f4b": "getAcceptedTokenAmount(address)", +"b8d85d23": "adminSetAddress(address)", +"b8d87069": "_removeContributor(uint256)", +"b8d94039": "writePosition(uint256,int256)", +"b8d94b95": "buildDSNullMap()", +"b8d9cbbe": "addMember(address,uint256,uint256,uint256)", +"b8daf1b1": "cancelChainlinkRequest(bytes32)", +"b8dbf876": "transferFromOwner(address,address,uint256)", +"b8dd3c55": "confirmSettingsChange(uint256)", +"b8dd7a5b": "numberOfWagersToMinimumTimeout()", +"b8ddc4df": "HPA_TokenERC20(uint256,string,string)", +"b8ddef1a": "IdeaCoin()", +"b8de3843": "allAmountRaised()", +"b8de85d8": "p_setBankOfEthAddress(address)", +"b8df17f0": "verifySigner(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"b8df5ce3": "ownerInitialBalance()", +"b8e010de": "set()", +"b8e046d1": "MinexoDigital()", +"b8e0d08d": "increaseHardCap(uint256)", +"b8e0ffbe": "getPaymentsLength()", +"b8e2cfb1": "getMinMaxInvest()", +"b8e31ee7": "MithrilGauntlet()", +"b8e381e5": "subscriptions()", +"b8e3d8e8": "LOL()", +"b8e3e6da": "participateCrowdsaleAll()", +"b8e4189c": "updateHighestMiles_(uint256,address)", +"b8e42041": "invalidateOrdersBefore(address)", +"b8e44852": "chargeTokensForManagement()", +"b8e60467": "LRCMidTermHoldingContract(address,address)", +"b8e6a433": "calcFactorReward(uint256)", +"b8e920de": "buyTicketTest2(bytes)", +"b8e945fc": "setOwnerNick(uint256,string)", +"b8e9a6f0": "addLockedAccount(uint8,address,uint256)", +"b8e9ac71": "BICToken(uint256,string,string)", +"b8e9c22e": "getRate(address,uint256,bool,uint256)", +"b8eaffcc": "getnodeparam(address)", +"b8eb115e": "increaseDuration(uint256)", +"b8eb3546": "maxSell()", +"b8eb993d": "PUBLIC_SALE_TOKEN_CAP()", +"b8ebed78": "rightForInterest(uint256,bool)", +"b8ec59e4": "changeColorOrange()", +"b8edcd1f": "isOwnerOfJob(address,uint256)", +"b8eddde1": "paymentsOwed(address)", +"b8ef04e7": "_getRandomNumber(uint256,uint256)", +"b8ef5f4d": "nextGameSeedPercent()", +"b8ef9fcc": "cardAddressExists(address)", +"b8f20cfd": "myBalances()", +"b8f249e2": "testThrowsSaleWalletIncorrectSaleAddress()", +"b8f2690d": "TestDividendFund()", +"b8f28531": "notEqual(address,address,string)", +"b8f2954d": "addData(bytes32[],bytes32,bytes32,bytes32,uint256,uint256,uint256,uint256)", +"b8f2bbac": "modify_perms(bytes32,bytes32,int256)", +"b8f3b75d": "buyWithAddress(address)", +"b8f47481": "withdrawErc20ForAddress(address,address,uint256)", +"b8f48d3d": "setMaxRoundSize(uint256)", +"b8f53f36": "maxPrivateSaleStage()", +"b8f5e56c": "DeClub(uint256,string,string)", +"b8f6c219": "purchaseDatesToken(uint256)", +"b8f6d3ef": "getNodalblockData(string)", +"b8f6e7ff": "changeMarketStatus(uint8)", +"b8f71f26": "scheduleTransaction(uint256,address)", +"b8f75c0b": "bountyFactory()", +"b8f76562": "setWithdrawable(address)", +"b8f77005": "getQueueLength()", +"b8f78178": "createNameAndPoint(int256,bytes32,address)", +"b8f7a665": "isLive()", +"b8f7f41e": "drpCrowdsaleRecordedBalance()", +"b8f929ad": "saleWhitelist()", +"b8fa7778": "for_votes()", +"b8fbb72d": "COMMON_WITHDRAW_SUPPLY()", +"b8fbb87d": "isAssociatedAddressFor(uint256,address,address)", +"b8fbe499": "Cygnus()", +"b8fc7bd0": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256,bytes32)", +"b8fcf937": "myToken()", +"b8fd1e10": "updateBalancesContract(address)", +"b8fd1ffa": "addressToEtherOwed(address)", +"b8fde2a4": "dailyPercentAtNow()", +"b8fe6f93": "triggerTransaction(uint256,uint256)", +"b8ffc962": "isMaxSupplyLocked()", +"b8ffd53f": "getStageStartTime(bytes32)", +"b8ffd64b": "PowTokenBase()", +"b9002e62": "delegatedFwd(address,bytes,uint256)", +"b900a870": "getApprenticeChestPrice()", +"b900da19": "calculateBonusPercentage(uint256)", +"b9019437": "eitherHaveAttribute(address,address,bytes32)", +"b9022e44": "updatePresaleWhitelist(address[],bool)", +"b90291c3": "changeWebsite(string)", +"b902c833": "switchfor()", +"b90306ad": "Burn(uint256)", +"b9037bc2": "unlockTokensForAddress(address)", +"b903a2a5": "MultiTransfer(address[],uint256)", +"b904088e": "maximumInvestment()", +"b9043235": "_create(uint256,address)", +"b90436ba": "MBT()", +"b9045c00": "InvestCoin()", +"b904ef4a": "delUIntValue(bytes32)", +"b9068d9e": "distributeFunds(uint256,address,address,address)", +"b906b7b7": "burnPercentage10m()", +"b9078616": "executeTrade(address,address,uint256,uint256)", +"b907996a": "Forwarder()", +"b9089280": "admin_del(address)", +"b908b008": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[1])", +"b9093fc6": "addIdentity(address)", +"b9098b33": "krs()", +"b90a4df1": "ApushJoustUser(address,address)", +"b90ae5a1": "registrarAuth()", +"b90b0108": "iconcontract()", +"b90b09c0": "random_bool(uint8)", +"b90b1248": "extractTokenEth(uint256)", +"b90b9aea": "EOCToken(uint256,string,string)", +"b90c1dbb": "getCreationDate()", +"b90c8566": "Somplak()", +"b90c86a9": "LogOraclizeCall(uint256,bytes32,string)", +"b90c92e2": "FysicalToken()", +"b90cec6d": "AddOfficialApps(address)", +"b90d3d0c": "data(address)", +"b90d86b9": "autoMatch()", +"b90d89a0": "start_seller(address,address,uint32)", +"b90da496": "getRankTitle(uint256)", +"b90dcc58": "SAFEToken(uint256,string,string,uint8)", +"b90e6bd8": "userRound(address,uint256)", +"b90f1af1": "icoEndUnix()", +"b90f65a2": "canCancelBet()", +"b910378d": "getBI(bytes32)", +"b91038c7": "participate(address)", +"b9103e1f": "refundAction(bytes32)", +"b9106dd9": "setAllowAccess(address,bool)", +"b91070e8": "processEmergencyFundReleaseFinished()", +"b9119b87": "ChangeSwapperAddress(address)", +"b911f2fb": "settleCandyGetx(uint256)", +"b912950e": "buyItemRaffleTicket(uint256)", +"b91366b0": "upgradeReactor()", +"b9138584": "Deedcoin()", +"b9140422": "readMailByAdmin(uint256,bytes16,address)", +"b9144c96": "TokenMinted(address,uint256)", +"b9145944": "verifySig(address,bytes32,bytes)", +"b914cf7c": "leve1(address)", +"b914d908": "getBeneficiaryIndex(address)", +"b9156830": "hasPriorDuplicate(string,uint256)", +"b9166178": "investorWallet(address)", +"b916c5ff": "redeemCoupons(uint256,string)", +"b916de59": "reset(address[])", +"b916e5d0": "goldenTokenId()", +"b916f8fd": "delistMon(uint64)", +"b9172dec": "changeStage(uint8)", +"b9174330": "gco(uint256,address)", +"b9186d7d": "priceOf(uint256)", +"b919be66": "useMultipleItem(uint256,uint256,uint256,uint256,uint256)", +"b91aedab": "transferLocked(address,uint256[],uint256[])", +"b91bb31c": "initLottery(uint256,uint256,uint256)", +"b91bf310": "initialChargeFeePool(address)", +"b91c771f": "replaceProduct(address,address,address,address)", +"b91d1aed": "createPassport(uint256,bytes32)", +"b91d3ace": "addDev(address)", +"b91d4001": "releaseTime()", +"b91d4a0f": "frontWindowAdjustmentRatio()", +"b91db40c": "FINE()", +"b91dee6c": "ResetUpdateState()", +"b91e3422": "premiumHold()", +"b91e4087": "validAddresses(address)", +"b91fe64b": "getLastDepositDate()", +"b9204d1c": "TeamVestTimeLimit()", +"b9209e33": "isVerified(address)", +"b920c799": "Insureum(uint256,uint256)", +"b920ded9": "_detectInvestorGroup(uint256)", +"b920ef71": "removeExtension(uint256)", +"b9212662": "s13(bytes1)", +"b921e163": "increaseSupply(uint256)", +"b9223946": "endVote()", +"b9224385": "LogResultWinner(uint256,address,uint256,uint256,bytes)", +"b92289ef": "sendleftmoney(uint256,address)", +"b9235d08": "FlippedCoin(address,uint256,int256)", +"b923909d": "check_hash_exist_in_chain(string)", +"b923b205": "setWhitelist()", +"b9247673": "buyListing(bytes32,uint256)", +"b9256f7e": "newTickerQueryResult(string,bytes32)", +"b925af47": "creatorsTotalBalance()", +"b92620bd": "targetWallet()", +"b926bd06": "Prepurchased(address,uint256,uint256,uint128,uint256)", +"b9272a11": "_redeemAdoptedAxies(address,uint8,uint256)", +"b927ef43": "validatorSetApplyBlock()", +"b928024d": "tokensPerWeiBonus250()", +"b9291296": "useMyOldName(string)", +"b9292158": "getTimestamps(address)", +"b929709a": "getPOOL_edit_1()", +"b92984f8": "TokenGame()", +"b92a3961": "currentRoundBudget()", +"b92a56bf": "deathData_v10()", +"b92ae87c": "isSubscribed(address)", +"b92b9d6c": "replacePublisherRegistry(address)", +"b92cb5b8": "addBrick(uint256,string,string,uint256,string,bytes32[],uint256)", +"b92cc8cf": "isExisting(uint256)", +"b92cd8f1": "officalHolding()", +"b92ce1a7": "createRandomCharacter()", +"b92d6c2f": "TWCToken()", +"b92dd395": "setManagerPowerful(bool)", +"b92ddee6": "setStartTimeIco(uint256,uint256)", +"b92e9f9e": "reportWasCalled()", +"b92edfc6": "NumberOfAuctions()", +"b92f1986": "IMDEXinvalidateOrdersBefore(address,uint256)", +"b9308d9e": "updateName(address,string)", +"b9318b0c": "_born(uint256,uint256)", +"b931b484": "bountyTokensLeft()", +"b931bec5": "setContractErc20Token(address,address)", +"b9324db6": "upgradeCardShield(uint256)", +"b9330829": "maxUint256()", +"b935170b": "addShopOwner(string,string)", +"b93529bc": "tokenTicketPrice()", +"b9358ba4": "isApper(address)", +"b9359169": "GayPersonalAds()", +"b9364835": "getCatOwner(uint256)", +"b93651bb": "__initFuse()", +"b9368721": "balancesRiskcoins()", +"b93806ab": "setWinningNumbers(uint256,string)", +"b9381f3c": "checkCapsAndUpdate(uint256,uint256)", +"b93833c3": "changeRewardAmount(uint256)", +"b9384f12": "changeMinCapUSD(uint256)", +"b938b469": "SetRewardMultiAD(uint256)", +"b938bf42": "sendBounty(bytes32)", +"b93983dd": "StoxSmartTokenSale(address,address,uint256)", +"b939d43a": "ARISCOIN()", +"b93a4408": "setMintFrequency(uint256)", +"b93a50b0": "_setApprovalForAll(address,bool)", +"b93ab165": "getCurrentInfo()", +"b93c109f": "totalInterests()", +"b93c3de2": "getHistoryRoundList()", +"b93c7d42": "sellDividendPercentCandy()", +"b93dab0b": "getBetCount()", +"b93dc802": "setEth(uint128[2])", +"b93e0e39": "ROCK()", +"b93ea812": "subtract(int256,int256)", +"b93eb763": "x(int256,int256)", +"b93f9b0a": "getAddress(uint256)", +"b93fd2bf": "createCustomAtom(uint64,uint8,uint8,uint8,uint128,uint128,uint32)", +"b9408373": "USD_PER_ETH()", +"b940db1a": "sellAllDolAtOnce()", +"b9413c47": "totalReturnedCredit()", +"b9420310": "tokenSale()", +"b942394d": "getPercent2(address)", +"b94265b8": "addReferrer(address,address)", +"b9429069": "isFarmer(address)", +"b94371ec": "getWhitelistOwner()", +"b9447f7e": "customBuyerForIndex(uint256)", +"b944ef3c": "initialTraining()", +"b94512c7": "BioCoin()", +"b9459b70": "getCurrentLuckyStonePrice()", +"b9460d04": "updateTicketVault(uint256,uint256)", +"b94669e5": "interfaceThawTokens(address,uint256)", +"b9468f7e": "bid(uint256,bool)", +"b946c19c": "rankDataContract()", +"b946fab1": "maxAmountPresale()", +"b9474959": "_isTokenOperator(address,uint256)", +"b94761b4": "SetupAllowance(address,uint256)", +"b94776de": "mintUnlockTime(address,uint256,uint256)", +"b9478ade": "DylanCoin(uint256,string,string)", +"b948348c": "purchaseTicket(uint256)", +"b94844dd": "AAAToken()", +"b9484955": "getInvestorArray()", +"b9488546": "ownersCount()", +"b9499cd6": "Midwife()", +"b949f2f3": "finishPVEBatch(uint32[])", +"b94b0a3a": "getFulfillment(uint256,uint256)", +"b94bae91": "setUser(address[])", +"b94bc7fe": "proofOfSalt(bytes32,uint8)", +"b94c3451": "techBuff()", +"b94cc52f": "mark(address,bytes32)", +"b94e3516": "TAKCoin()", +"b94e962a": "allocateTickets(uint256)", +"b94ee0fc": "Triunvirate(address[])", +"b94f5a6e": "eventPirze(address,uint8)", +"b94f969c": "investmentBTC()", +"b94fa03f": "requiredSharesToBeBoardMember()", +"b94fb4a3": "WaykiCoin()", +"b94fdaab": "upload_group_key(uint256[4])", +"b950556a": "setThingValid(bytes32[],bool)", +"b950ae2b": "changeTopWithdrawable(uint256)", +"b950f0a0": "rateTier3()", +"b95254f6": "setAsLotteryRunner(address,bool)", +"b952ab7b": "unclaimedTokensForInvestor(address)", +"b9531df3": "lowTimeBonusLimit()", +"b953a9ac": "getDocumentProposalCount()", +"b9541ad5": "resetReferee(address)", +"b95459e4": "moduleRegistry()", +"b95460f8": "open(address)", +"b954ca70": "setcapbounus(uint256,uint256,uint256)", +"b95594e5": "lineOfPlayers(uint256)", +"b9559685": "StateHolder()", +"b955b95c": "getKindOfPackage(address)", +"b955e60d": "roundData(uint256)", +"b956a8a6": "easyMineToken()", +"b9570c01": "transferAndCall(address,uint256,bytes32)", +"b957aeb6": "getUserReaction(uint256)", +"b957b886": "stackOffset(uint256)", +"b9582195": "SFXToken()", +"b958893e": "XTVAirDropped()", +"b9588adc": "getStageAttributes(uint8)", +"b958a5e1": "getPhoneByAddress(address)", +"b958abd5": "setA(string)", +"b9592e92": "setGM(address)", +"b9599f3a": "fetchUndistributedProfit()", +"b95a4baf": "daysSinceLaunch()", +"b95a8327": "marketGrapes()", +"b95af889": "processTransferToICAPResult(address,bytes32,uint256,bool)", +"b95bb4f8": "price(uint16)", +"b95c2740": "buy(address,bytes)", +"b95cbed6": "currentExpiryInterval()", +"b95d2a53": "deedUri(uint256)", +"b95f2be8": "_releaseVouchers(address,uint256)", +"b96095fd": "GEND1()", +"b960a45f": "unpauseTrueUSD()", +"b960a6d4": "ITTMultisig()", +"b96144fd": "removeUsername()", +"b9615878": "getHeader(bytes32)", +"b961716b": "getActiveTier()", +"b961b1e0": "teamNamingIncome()", +"b96297b5": "killya()", +"b962de9a": "ProsperaToken(uint256,string,uint8,string)", +"b9632689": "numFunders()", +"b9635685": "JAJToken()", +"b963e1d0": "getPurpouse()", +"b964608d": "get_return_by_level(uint256)", +"b9649e52": "getPlayerPotWinning(uint256,uint256,uint256)", +"b96528fd": "pubAddress()", +"b9653382": "firstPeriodEndDate()", +"b965817d": "UBSCoin()", +"b9659d4a": "sibling()", +"b9668eb2": "settleUnclaimedPerTokenPayouts(address,address)", +"b966f350": "tokenMintingEnabled()", +"b96732d9": "TransferToSAToE(uint256)", +"b9676e72": "SPTToken()", +"b967a52e": "setContactInformation(string)", +"b968440a": "Finalized(uint256,uint256)", +"b968486e": "isLottoStarted()", +"b96890a1": "airdroptoken()", +"b96891e5": "getAddressesSize()", +"b9689cf3": "crowdsaleAirdropAddress()", +"b968a53c": "getBurnAddresses()", +"b969d399": "getBattleCooldown(uint64)", +"b96a39bd": "createPlayer(string,uint256,uint256)", +"b96b8edf": "changeAirdropQty(uint256)", +"b96bf2b5": "expressReloadNumSec(uint256,uint256,uint256[],uint256[])", +"b96c0866": "completeOrder(string)", +"b96c10ba": "_assign(address,address,address)", +"b96d64fb": "start_quiz_game(string,string)", +"b96dc22a": "enableLambo(uint256)", +"b96dc96d": "delCertificate(string)", +"b96e988b": "addressBilborough()", +"b96f54d1": "fixedReverse(uint256[10])", +"b96f8a39": "Voting()", +"b970e3d0": "JATICO()", +"b971667c": "calculateEmissionTokens(uint256,uint256,uint256,uint256)", +"b9717b23": "setOdd(uint256,uint256,uint256)", +"b971a1f8": "VivekTestToken()", +"b971b4e5": "setNotTransferable(bytes20)", +"b9727dc2": "getProjectClient(uint256)", +"b9727f50": "saveRevenueShareDistribution(address,uint256)", +"b972b967": "transferTokensToTeam(address,uint256,uint256)", +"b97386d1": "reputationProblems(address,bytes32)", +"b973b286": "Imteaz()", +"b974b0a3": "allData()", +"b974ddcb": "getAnimalById(uint256)", +"b9750acf": "selfDestroy()", +"b97585d3": "addOldNickname(address,string)", +"b975ce23": "crownName()", +"b975d9c7": "setCCH_edit_32(string)", +"b976b35b": "uponTransfer(address,address,uint256)", +"b976f464": "authoriseAccount(address)", +"b9774f7b": "confirmations(uint256)", +"b9776301": "testTrustedTransferFrom()", +"b9789d7d": "ChangeDeadLine(uint256,uint256,string)", +"b97a6c12": "redeemForReportingParticipant()", +"b97a7d24": "getGoal()", +"b97af2c8": "setTokenDecimals(uint256)", +"b97b451e": "increaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"b97b9df8": "AUACoin()", +"b97cab2c": "convert2Peony(uint256)", +"b97ce4d3": "distributionteamFinished()", +"b97d3627": "TosToken()", +"b97df70a": "setTokenReward(address,address)", +"b97e3b43": "setMintAgent(address,address,bool)", +"b97fd9e1": "releaseWallet(address)", +"b980a312": "PtestTokenICO(uint256,uint256,address,address,address,uint256,uint256,uint256,uint256)", +"b980b10d": "masterCardEscrow()", +"b9812d9a": "getNextReportingWindow()", +"b981655f": "DebtManager()", +"b9818be1": "feeOwner()", +"b982e5c1": "testAddPending()", +"b9843c7c": "setUnavailable()", +"b9844d6f": "updateSelfDropStageState(uint256,uint256,uint256,uint256,uint256,uint256)", +"b9855c76": "restartPeriod()", +"b9858a28": "addContract(address,address)", +"b9861011": "setUniqueBlindedProposal(uint256,bytes32)", +"b986b611": "withdrawAddressUpdate(address)", +"b986bb67": "STATUS_DESTROYED()", +"b9871548": "set_token_address(address,string)", +"b9879450": "CREATOR_TOKEN()", +"b987ae02": "fundWithdrawal(uint256)", +"b987bdac": "InterCrypto()", +"b987f688": "gettotalCards()", +"b9883b3f": "main(uint16,uint8,int256)", +"b988899f": "setBenificiary(address)", +"b988c505": "newProposal(address,uint256,string,bytes,uint64)", +"b9890a74": "initBonuses(string)", +"b989915c": "lastUsdPerEthChangeDate()", +"b989c7ee": "returnInt32(int32)", +"b989ffa7": "getArtist(bytes32)", +"b98a5418": "assignedAmountToAngelInvestment()", +"b98aacf0": "retreiveHrt(string)", +"b98ac0c5": "setUserAlloc(address,uint256,uint256)", +"b98b5f9c": "listPrycto1()", +"b98bafde": "Redeemed(uint32,address)", +"b98bcf16": "getPubKeyByHash(bytes28)", +"b98c90c2": "ECOS(address)", +"b98cb57e": "rinkeby()", +"b98d49a5": "getSponsorshipCount(address)", +"b98dbb50": "updateprojectDuration(address,uint256)", +"b98de7c7": "setLive()", +"b98e2769": "sketchNoLongerForSale(uint256)", +"b98ef00d": "disclosureList(uint256)", +"b98f0992": "TokenRK50Z()", +"b98f5932": "getUserExp(address)", +"b98fa504": "AddTower(uint32,uint16,uint16,uint256,uint256,uint16,uint16)", +"b98fb437": "getethused(address)", +"b98fdc36": "IconomiToken(uint256,string,uint8,string,uint256)", +"b990033e": "setNewRegister(string,bytes32,uint256)", +"b9902eef": "Rate8()", +"b9908cbb": "maximalIndividualContribution()", +"b9910c5f": "JixoCoin(uint256,string,string)", +"b991357c": "isAdvisorsTokensThirdReleased()", +"b99152d0": "balanceOfToken(address)", +"b991bc14": "direct_refunds(address[],uint256[])", +"b991f607": "Bank(uint256,uint256)", +"b9926d1d": "limitBuy(uint256)", +"b992812e": "hasIssued(address)", +"b9931d30": "getPlayerToken(uint32)", +"b9934b9e": "ownerResumeContract()", +"b99371a0": "GetPrestigeInfo(uint256)", +"b993a53e": "preSaleBalancesOf(address)", +"b993a91f": "migrationAccountCounter()", +"b993c871": "NGToken()", +"b995b014": "_exploreUsingEmont(address,uint256,uint256,uint256)", +"b995ce4d": "returnTokenAddress(uint256)", +"b99613cb": "getPlayRecordNoTurnData(address,address)", +"b99798e8": "accFounder()", +"b9980306": "processARvRevForecast()", +"b9981a67": "firstBalanceOf(address)", +"b999279e": "VerifyProofAndUpdateState(uint256[],uint256[],uint256[],uint256[],bytes)", +"b9997819": "ownerSetHouseEdge(uint16)", +"b999abbc": "Spole()", +"b99a8a00": "exchange_coefficient()", +"b99ac856": "roundin(address)", +"b99b2f81": "myReferrals()", +"b99b951d": "claimTokensE(uint8)", +"b99bc116": "verifyTrustedSender(address[],uint256,uint256,address,uint8,bytes32,bytes32)", +"b99c2b51": "_getWinAmount(uint8,uint8,uint8,uint24,uint256,uint256,uint256,uint256,uint256)", +"b99de11e": "endThirdWeek()", +"b99dfe18": "getPackage(uint256)", +"b99ec99a": "AuditorRegistryReplaced(address,address)", +"b99eccc1": "SplitWeighted(uint256)", +"b99f1d02": "claimClusters()", +"b99f247d": "ERGCOIN()", +"b99f48d5": "promisedPop()", +"b99f6073": "tokenPurchased()", +"b9a0157e": "setArrayIndexValue(bytes32,uint256,bytes32)", +"b9a0a708": "testChargesAmountApproved()", +"b9a0c1bb": "_approveRobot(uint256,address)", +"b9a1bd86": "registerPrivateContribution(address,uint256)", +"b9a2131b": "ContractTST()", +"b9a29d42": "getKevin()", +"b9a2de3a": "endAuction(uint256)", +"b9a30afb": "HelloGoldSale(address,address,address,address)", +"b9a41409": "gcpa(uint256)", +"b9a45aac": "whitelistAddress(address,bool)", +"b9a4a755": "afterApproveAction(uint256)", +"b9a4defe": "changeTargetAddress(address)", +"b9a52203": "saveRN(uint256)", +"b9a527b4": "book(address,address,uint256,uint256)", +"b9a54062": "getMaximumWritesPerStep()", +"b9a59b83": "isEngineerContract()", +"b9a5a2d9": "numberOfApprovedSteaks()", +"b9a5e073": "contracteesSize()", +"b9a60038": "totalTransactions()", +"b9a68300": "bountyOnlineWallet()", +"b9a6e94c": "buyTile(int32,int32)", +"b9a6f7b0": "BTHB()", +"b9a804fb": "ArrowTestCoin()", +"b9a82f80": "buyPepe(uint256)", +"b9a904f9": "testUnauthorizedSetBetaPackage()", +"b9aa8236": "getMaxAgonId()", +"b9aaaeee": "populateTierTokens()", +"b9ac0524": "icoEtherReceivedTotal()", +"b9ac38aa": "test_newProposalAndVoting()", +"b9aceb63": "BuyTicketUseVault(address,uint256)", +"b9ad36b9": "prophecise(bytes32)", +"b9ad771c": "registerHWCWit(string)", +"b9ae4bda": "associatedPubkeys(uint256)", +"b9ae7364": "pauseAuction()", +"b9af809e": "getMinEthersInvestment()", +"b9afd6e1": "returnChildAddressForParent(address)", +"b9b162c3": "calculateTop5HeroesPower(address,address,uint256)", +"b9b1c90c": "moveToSafetyWallet()", +"b9b237c2": "tokenFunded()", +"b9b26bd2": "registerBroker()", +"b9b2a331": "setAccPrice(uint256)", +"b9b2a890": "rewardDaily(uint32,uint32)", +"b9b2b5cd": "totalFeeCollected()", +"b9b3ded2": "createDividend(uint256,uint256)", +"b9b42602": "ethRefunds(address)", +"b9b43faa": "createInt256s(bytes32[],int256[])", +"b9b466ab": "myLoveBlockCount()", +"b9b6990b": "getUserBetsInARazInstance(uint256,uint256)", +"b9b6c2d4": "getAmountOwed(bytes32,address)", +"b9b7238b": "addInvestorBonusInPercent(address,uint8)", +"b9b7569b": "isGameLogicContract()", +"b9b7b68c": "limitbreak_contrib()", +"b9b842e5": "setCandyLand(address)", +"b9b8af0b": "halted()", +"b9b8c246": "invest(address,uint256)", +"b9b8e25d": "getRemainingTokensToSell()", +"b9b94997": "repossessBooking(address,uint256)", +"b9ba2926": "receivedCollateral()", +"b9bac5f8": "lockedUntilTime()", +"b9bcf81f": "getTlength10()", +"b9bd4f76": "newSale(uint256,uint256,uint8,uint256)", +"b9bda244": "sumICO()", +"b9bdbbbb": "FILMToken(uint256,string,uint8,string)", +"b9beadae": "testCantBuyTokensInEndedSale()", +"b9beeb8d": "DatingCoinToken()", +"b9bf068e": "getUncompensatedContributors(uint256,uint256)", +"b9c009f0": "checkContributorBalance(address)", +"b9c0d227": "defaultTokensPerWei()", +"b9c105cf": "getTaskRewardAndStatus(bytes32)", +"b9c1a60a": "econReserveAllocation()", +"b9c2c6fb": "removeMember(bytes32)", +"b9c2ee82": "upgradeController(address)", +"b9c3395f": "getTokenAmountBonus(uint256)", +"b9c3515c": "votingActive(bytes32)", +"b9c390aa": "SaferEcRecover()", +"b9c3a818": "TEAM_SUPPLY()", +"b9c4d0a7": "fundOrder(uint256)", +"b9c53d04": "SECCoin()", +"b9c5be85": "allocatePurchase(address,uint256,uint256)", +"b9c5eb90": "updateVoucherMthRate(uint256)", +"b9c7ce49": "totalIssuingCollateral()", +"b9c81f1d": "Membership()", +"b9c8464d": "extractFees(uint256)", +"b9c8559d": "RocketPoolReserveFund(address)", +"b9c89ff7": "getTargetRepMarketCapDivisor()", +"b9c97a44": "UnlockAccount(address)", +"b9c99e5e": "DepositUnfrozen(address,uint256)", +"b9caebf4": "del(address)", +"b9cb385d": "invitedInit(address,address)", +"b9cb5b5f": "HatchEggs()", +"b9cbbb62": "testInequalityAddr()", +"b9cc8b48": "oraclizeOn()", +"b9ccaed2": "getMesas()", +"b9cce72c": "addFlag(bool[2])", +"b9ce10d5": "Fyle(string,string,uint8,uint256)", +"b9ce795f": "createVoter(string)", +"b9ceda19": "updateTokenNameAndSymbol(string,string)", +"b9cf01a1": "Cardiology()", +"b9cf9d49": "getNextOrderUser(address,address,uint256,address)", +"b9d0a638": "Bro()", +"b9d1d49b": "minimumBalance()", +"b9d1ed4a": "ethDeposits(address)", +"b9d1fd60": "fundingMaxAmount(address)", +"b9d2fa35": "disableFundingWallets(address)", +"b9d32a1f": "tokenTransferOwnership(address,address,address,address)", +"b9d3514d": "addEventToUser(address)", +"b9d36743": "priceToMint(uint256)", +"b9d414bd": "setSecurityTokensWallet(address)", +"b9d47fff": "mySubdividends()", +"b9d5205c": "SASH()", +"b9d54f6f": "setMinPurchaseLimit(uint256)", +"b9d5d7fe": "resetUserPicture(string)", +"b9d6257d": "DeletePool(string)", +"b9d677f9": "_buyProp(uint256,uint256,uint256)", +"b9d69a30": "sendTo(address,address,uint256,bytes)", +"b9d723eb": "startNewPeriod()", +"b9d7fdf4": "bonusTierSize()", +"b9d8350e": "getWeiFromUsdCents(uint256)", +"b9d92de8": "calculate(uint256)", +"b9da4033": "_randBySeed(uint256)", +"b9da706e": "LandSale(address,uint256,uint256,uint256)", +"b9da8360": "_setBattleContract(address,address)", +"b9db15b4": "getProduct(uint256)", +"b9db9a6d": "resetAllApproval()", +"b9dc25c5": "approvedUser()", +"b9dda7b8": "_ERC20Contract()", +"b9de1c41": "buyRaffleTicket(uint256)", +"b9deb729": "isTransferEnable()", +"b9dedc6a": "shareTransfer(address,address,uint256)", +"b9df2d22": "isGameRunning()", +"b9df819f": "receiveFunds(address,address,uint256)", +"b9dfaf3a": "setPriceChannelMaxSize(uint256)", +"b9e01aeb": "buySpaceshipUpgrade(uint256,uint16,uint8)", +"b9e04eea": "withdrawStuckEtherOfAmount(address,uint256)", +"b9e15a67": "coinAgeForAddress(address,address)", +"b9e16b65": "issueDescription()", +"b9e1aa03": "deposit(address,bytes32)", +"b9e205ae": "updateExchangeRate(uint256)", +"b9e290f9": "setValue(bytes32,address)", +"b9e328de": "GIDIDAX()", +"b9e3a8dd": "isCompositionOnlyWithBaseLayers()", +"b9e3e2db": "releaseDate()", +"b9e3ee01": "addNodeToWhitelist(address)", +"b9e448df": "OpenFund(bytes32,string)", +"b9e4d098": "setNewEndDate(uint256)", +"b9e58ab0": "setPropertyOwnerSalePricePrivateModeFlag(uint16,address,uint256,bool,uint8)", +"b9e5e2c4": "ratePerWeiInPreICO()", +"b9e6152b": "process(address)", +"b9e6ac68": "TabTradersToken(address,address)", +"b9e6edcf": "s15(bytes1)", +"b9e6f1d9": "get_amount()", +"b9e70ed6": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"b9e722cd": "caddress()", +"b9e77649": "OVISBOOKED_TOKENS()", +"b9e7afd1": "__setSecretaryGeneral(address)", +"b9e7c061": "tempGetDataToCheck(uint256,uint256)", +"b9e7e2f9": "Beercoin()", +"b9e8574f": "getReservedDestinationInfo(address)", +"b9e95382": "store(uint32)", +"b9e99231": "EEM()", +"b9e9d1aa": "futureOwner()", +"b9e9e441": "exchangeTokensByAddress(uint256,address,address)", +"b9eb04f3": "hashPosition(uint32,int64,bytes16)", +"b9eb5511": "setPI_edit_5(string)", +"b9eca0c8": "gID_()", +"b9ed6df8": "withdrawEtherFromcontract(uint256)", +"b9ed93e9": "setWaitTimeBlocks(uint256)", +"b9edf911": "approveBulk(address[],uint256[])", +"b9ef7835": "infect(bytes32)", +"b9f10278": "EtherPredictx()", +"b9f14557": "unban(address)", +"b9f1fb62": "transferPrivateReservedUFT(address,uint256)", +"b9f2086b": "BlockWar()", +"b9f24e44": "freezeGame(uint256)", +"b9f256cd": "newProposalInEther(address,uint256,string,bytes)", +"b9f28076": "historyIdx(address)", +"b9f2d592": "maxAllowedReservingPercentage()", +"b9f308f2": "getEtherForTokens(uint256)", +"b9f37c86": "Registrar()", +"b9f4657d": "approve_tx(address,bytes)", +"b9f48cad": "performAction(address,bytes,uint256)", +"b9f4b5c2": "refundStart()", +"b9f615d7": "bankRollInvest()", +"b9f696d5": "setNote(uint256,bytes32,string)", +"b9f71934": "promotionsOfClaimant(address)", +"b9f7d242": "restoreAllPersistentTokens(uint256)", +"b9f89751": "withdrawAsCreator()", +"b9f96247": "SellMulti(uint256[],address)", +"b9f9d9a5": "test_insert_findNoHintAtPosition()", +"b9fa2055": "capETH()", +"b9fac520": "BIU()", +"b9fb0579": "Transfer_of_authority(address)", +"b9fb3ff8": "BOOYAHTEST()", +"b9fb7b8c": "Deposit_referral()", +"b9fbe331": "bonusTokenRateLevelOne()", +"b9fea3bb": "setBaseInfo(address)", +"b9feeb05": "GetCategoryCount(string)", +"b9ff5fcf": "getMakerBetDetails(uint256,address)", +"b9ffc576": "RevalootSwap()", +"ba001de3": "revokeBountyTokens(address,uint256)", +"ba00660f": "publicWithdraw()", +"ba00ab60": "cancelAuthorizations(address,address[])", +"ba0179b5": "confirm(uint256)", +"ba02021d": "redeemTicket(uint256,address)", +"ba029c97": "wei20()", +"ba02cf47": "MORTU()", +"ba02e9f2": "Coincirculationchain()", +"ba02f006": "_concat(string,string)", +"ba030c8c": "endRefundingingTime()", +"ba033fe1": "buyAndTransfer(uint256,address,address,bytes)", +"ba0410fb": "changeExhangeRate(uint8)", +"ba044799": "setDropable(bool)", +"ba057826": "MDXToken()", +"ba065e1f": "expired(uint256)", +"ba067f59": "setToSendLeft()", +"ba075da2": "undermineComponent(uint16,uint256)", +"ba081b8d": "PHOENIX_POOL()", +"ba086518": "delist(uint16)", +"ba087b9d": "balanceOfAtType(address,uint256,uint256)", +"ba08809d": "showTimeLock(address)", +"ba08f299": "decrementTotalIssuerCount()", +"ba09591e": "setSellFloor(uint256)", +"ba0a272b": "icoEtherReceivedPreFirstSale()", +"ba0a4ca9": "_safeGasStaticCall(address,bytes)", +"ba0a93a8": "getRankOnePlayer()", +"ba0b9788": "setTitulaire_Compte_7(uint256)", +"ba0bafb4": "currentWindow()", +"ba0bba40": "setup()", +"ba0bc2f4": "initialCardPrice()", +"ba0bf0c4": "weiMaxInvestment()", +"ba0bface": "managementBodyAddress()", +"ba0c1777": "ecoLock13()", +"ba0c9b54": "mcs()", +"ba0cf581": "findDispute(address)", +"ba0d291b": "CashMateToken()", +"ba0d46f3": "BoraToken(uint256)", +"ba0d94a8": "Bcigarcoin()", +"ba0df427": "sumOf(uint256[])", +"ba0e0f5e": "removeTrustedAccount(address)", +"ba0e6cc9": "removeVerified(address,address)", +"ba0e930a": "transferManager(address)", +"ba0f5b20": "getDarknodeBond(address)", +"ba0fbf0d": "_saleTokens()", +"ba102763": "etherToSendSecurityPool()", +"ba1066ed": "pendingAmount()", +"ba10db46": "transferEthHandleOwnership(bytes32,address)", +"ba112d50": "setDataEquip(address)", +"ba1162d7": "getFmLength()", +"ba119e5a": "SEBCToken()", +"ba11ecde": "preSaleOpen()", +"ba124401": "FrozenGuard()", +"ba13a572": "lottery()", +"ba14d606": "test(address,uint256)", +"ba151ad9": "USD_PER_TOKEN()", +"ba157d46": "setWebGiftEtherAmount(uint256)", +"ba15e52e": "getInfo(bytes20)", +"ba15fcaa": "Tremendoustoken()", +"ba16ae2d": "WBET()", +"ba16d600": "minReward()", +"ba16e00e": "bonusEnd05()", +"ba17e592": "performWrite1()", +"ba1803c1": "setCryptoJinglesContract(address)", +"ba181ac6": "setWhitelist(address,address)", +"ba1a2243": "setTokenPaymentCustomer()", +"ba1ad438": "newFee(uint256)", +"ba1af80f": "phase4Price()", +"ba1b44da": "getBoardRating(address,uint256)", +"ba1b6221": "calcUnMaskedGuEarnings(uint256,uint256)", +"ba1c0201": "evRefund(address,uint256,address,uint256,bool)", +"ba1c3b92": "setSalePeriod(uint256,uint256)", +"ba1ccbee": "getSupportedRolesCount()", +"ba1cd983": "unitCreationFee()", +"ba1d8d4f": "createAutoridadElectoral(bytes32,bytes32)", +"ba1f879f": "privateSale()", +"ba1fd9f4": "widraw(uint256,address,bytes32)", +"ba209dab": "rejectCertification(uint256)", +"ba20dda4": "getBeneficiary(bytes32)", +"ba21d62a": "Command(address,bytes)", +"ba2318ca": "totalSaleSupplyCap()", +"ba236abe": "getMyWinAmount(address)", +"ba255cd1": "liquidAllocatable()", +"ba25a585": "EventUpgradeTank(address,uint256,uint8)", +"ba25d944": "longDescription()", +"ba278e08": "setStartTime(uint256,uint256)", +"ba285f5d": "minimalPaymentInWei()", +"ba286ee3": "testRegisterCustomer()", +"ba2902fb": "rehancoin()", +"ba2a730b": "getAddressLastUpdate(address,address)", +"ba2a98f2": "closeZoneShop(bytes2)", +"ba2ab079": "changeEndPrivateSale(uint256)", +"ba2aee26": "addGains(address,uint256)", +"ba2d5c88": "MINBET_perTX()", +"ba2e84f9": "publicsalesCap()", +"ba2eb541": "isExpired(address)", +"ba2ee51f": "ICO_TOKENS_AMOUNT()", +"ba2ee65c": "manage()", +"ba2eebb4": "transferControl(bool)", +"ba2fa957": "markettingPercentage()", +"ba3019de": "fwdPaymentAndData(address,bytes)", +"ba3025d4": "epicenter_works_addr()", +"ba32348f": "reffUp(address)", +"ba32694c": "howCoin()", +"ba331eab": "tokenSetTransferFeeAbs(address,address,uint256)", +"ba33a876": "VBToken()", +"ba34251b": "usdToEthPrice()", +"ba344304": "Lydian()", +"ba344743": "_rawTransfer(address,address,uint256)", +"ba346d11": "ArenaPool()", +"ba34c8f1": "setrate(uint256)", +"ba353925": "paymentDisable()", +"ba35749c": "deleteOffer(bytes32,address)", +"ba35b1d3": "TxMessage(uint256,uint8,uint256)", +"ba35c0be": "changeSelectFight2DeathContract(address)", +"ba35f38d": "eip20TransferFrom(address,address,address,uint256)", +"ba3603fd": "usdPerMEth()", +"ba36f423": "att()", +"ba3717c0": "setStrF1F2(string,string)", +"ba376923": "Cez()", +"ba377731": "getSupplyBalance(address,address)", +"ba37caa4": "exchangeStaStb(uint256,uint256)", +"ba386f0b": "propertyIdToAuction(uint256)", +"ba38743b": "GrabUnallocatedValue()", +"ba38c599": "announced()", +"ba391bb2": "perTokenPrice()", +"ba399ad2": "isInLockStage()", +"ba3b60ed": "rawVotes()", +"ba3c0067": "getTopPlayers(uint256)", +"ba3d0cb5": "retentionMin()", +"ba3dc67c": "startingPoint()", +"ba3eb50f": "TokenEther()", +"ba3eb61d": "InterfaceData(address)", +"ba3eefc5": "makeInvestment(uint256)", +"ba3f41da": "beginCodeUpdate()", +"ba3f56f8": "startFinalStage2()", +"ba3f5a12": "tokenMultiplier()", +"ba3f8f2c": "getTokenPriceUSDWEI(uint256)", +"ba3f8f31": "ReleasingScheduleLinearContract(uint256,uint256,uint256)", +"ba3fc155": "ownerWithdrawal(uint256,address)", +"ba3fd8f7": "currChampion()", +"ba3fdb8f": "_createArt(uint256,address)", +"ba40aaa1": "setGiveAway(uint256)", +"ba414fa6": "failed()", +"ba41dc5b": "setwalletOne(address)", +"ba425379": "Ico_rejected(string)", +"ba429f33": "getRewardsContractHash(address)", +"ba42c8e5": "resolveSupervisorVote(uint256)", +"ba42fdb9": "handleLastProposal()", +"ba437b5d": "KOKC()", +"ba441560": "SetRedeemRate(uint256)", +"ba4442ab": "ReassingTokens(uint256,uint256)", +"ba44593c": "set(bytes32,address)", +"ba44bc0b": "UserMinMaxCrowdsale(uint256,uint256)", +"ba44f6a4": "RETHEN1()", +"ba452930": "stopPrivatePlacement()", +"ba454d60": "changeMaxEntries(uint256)", +"ba457dd1": "BreezeCoin()", +"ba45b0b8": "transfer(address,address)", +"ba4611d9": "getClaimCount()", +"ba463acd": "createPackage(uint256,uint256,uint256,string,uint256)", +"ba4670da": "onlyOwnerSetAdvWallet(address)", +"ba46adeb": "exerciseLong(address[2],uint256[7],uint8,bytes32[2])", +"ba470738": "changeRejectSetting(uint256,bool)", +"ba47c5f8": "inpreSalePeriod()", +"ba4823e1": "SoundcoinsToken(address)", +"ba485844": "func_0C0E()", +"ba487e62": "newCampaign(uint32,uint96,uint16,uint16)", +"ba48e057": "setBatchTransferLimit(uint256)", +"ba490a03": "SpudToRotator(uint256,address)", +"ba49e21f": "getAttoTokensAmountPerWei(uint256)", +"ba4a579d": "canBetOnRound(uint256)", +"ba4bcd72": "currentAdmin()", +"ba4c206e": "removeCertificationDocumentInternal(address,bytes32)", +"ba4c825e": "_transfer(address,address,uint256,bool)", +"ba4d0c99": "conversion(uint256)", +"ba4d573f": "addSelctFight2Death(uint256,uint256,uint256)", +"ba4e1c38": "airdropTotalQty()", +"ba4feabd": "createEscuela(uint256,address)", +"ba50f965": "add_creature(uint256,address)", +"ba5129b9": "ethRateChanger()", +"ba515481": "maturity_refund(address[],address,uint256[])", +"ba51a6df": "changeRequirement(uint256)", +"ba51b1b4": "setTokenSymbol(string)", +"ba5233b2": "setPartnerQuota(address,uint256)", +"ba52688d": "approveCycle(bool)", +"ba53d9f3": "getSpartansOnTheBattlefield(address)", +"ba554374": "updateTranchRate(uint256,uint256)", +"ba5595d3": "numTokensAuctioned()", +"ba5673c3": "getChildrenLength(bytes32)", +"ba56763e": "getBidInfo(uint64)", +"ba56f6ee": "god()", +"ba57225d": "LogCrowdsaleEnd(bool)", +"ba575a39": "KOREKCHAIN()", +"ba59a75e": "bn128_map_to_G1(bytes32)", +"ba59f784": "ChessLotto()", +"ba5a2d33": "exitPool(address)", +"ba5abaf8": "startFightB(uint256,uint256,bytes4)", +"ba5b0e95": "CPCEIcoDeposit()", +"ba5bea09": "addPendingPayment(address,uint256)", +"ba5c3a9d": "distributionList(uint256)", +"ba5c5d93": "address_book()", +"ba5c9bd6": "processReinvest(address,uint256,uint256,uint256)", +"ba5cb281": "uint32At(bytes,uint256)", +"ba5cb999": "RealTotalSupply()", +"ba5e286b": "getShipProductCount()", +"ba5eceb6": "borrowerBalance(address)", +"ba5f3e46": "getPlayerBetData(address)", +"ba61021f": "calcBonus()", +"ba612493": "getCurrentPassportLogicVersion()", +"ba61810c": "startNextPhase()", +"ba61a960": "Launched()", +"ba61ee09": "myRefBonus()", +"ba622884": "isManufacturerAddress()", +"ba622ddc": "getPlayerAnimals(address)", +"ba625fe6": "WineCoin()", +"ba629113": "contract12function2()", +"ba6361fb": "payme()", +"ba639d5a": "supplyRound1()", +"ba63abd6": "getPInvestedSumByRound(uint256,address)", +"ba63defb": "etherToSendJackpot()", +"ba63e25a": "canBeWhitelisted(uint256,bytes32)", +"ba6489e5": "getAccountReferrer(address)", +"ba65fa25": "getMerchantPublicKeyByAdmin(address)", +"ba66d7a6": "MDKICO(uint256,uint256,uint256,address,address)", +"ba6763ce": "withdrawBalanceFromStorageContract()", +"ba68693f": "PinZhiCoin()", +"ba693c86": "addsmartContractAdress(address)", +"ba69fcaa": "deleteStringValue(bytes32)", +"ba6a7e27": "AOABANK()", +"ba6afc50": "getIncentivesPool()", +"ba6b285a": "neuroChainAddresses(address)", +"ba6b5f96": "getChild(address,uint256,address,uint256)", +"ba6bbe55": "getPublicSaleTokensAvailable()", +"ba6c6490": "unlockTeamTokensTime()", +"ba6ca603": "ALDToken(uint256,string,uint8,string)", +"ba6cc6c3": "open(bytes32,address,uint32)", +"ba6dc506": "throwSlammerEvent(bytes32,address,address,uint256[10])", +"ba6f30e4": "sellCenturion(uint256,uint256)", +"ba6f4ab0": "burnCarbonDollar(address,uint256)", +"ba6ff8ad": "RTokenBase(uint256,string,string,uint8)", +"ba70d049": "DonateAdded(address,address,uint256)", +"ba70d54a": "ACTIVE_STATUS()", +"ba71c7f5": "setPricesManually(string)", +"ba723f99": "stopBid()", +"ba723fe2": "getRequestHash(bytes,bytes,uint256)", +"ba72cc36": "teamLock()", +"ba730e53": "getSellPrice(uint256)", +"ba7314ae": "AncestorHellNotes()", +"ba7325be": "indexOf(string,string,uint256)", +"ba736a99": "fetchOrderByIdWithWithPayer(string,address)", +"ba73737d": "AndiosCoin(uint256,string,uint8,string)", +"ba7435d9": "knightEquity()", +"ba75bbd8": "front()", +"ba75d0de": "minimumHydroStakeDelegatedUser()", +"ba76000e": "Add_Patient(uint256,uint256,string,string,string)", +"ba7607bf": "LogBidAccepted(bytes32,address,bytes32,address,bytes32,uint256)", +"ba76938b": "freezeDeposit(uint256)", +"ba76bfb7": "checkWithdrawalAvailable(address)", +"ba76e19b": "EthereumPrivateToken()", +"ba770154": "getUserPictureByUsername(string)", +"ba7705aa": "setIPFS(address,string,string)", +"ba773a70": "icoPrice_()", +"ba77ddc9": "PresaleFinalized(uint256)", +"ba780759": "EtherSportCrowdsale(uint256,uint256,address,address,address)", +"ba78a98a": "timelockEndTime()", +"ba78c773": "declineBid(string,uint64)", +"ba7a8149": "lockEtherPay()", +"ba7b37d4": "updateBalance(uint256)", +"ba7b86b9": "KhuuKoin()", +"ba7badeb": "nextVersion(address,bytes32)", +"ba7bd2aa": "withdrawTokens(uint256,uint256)", +"ba7bde55": "totalSupplyShares()", +"ba7bf7ff": "addcoinfee()", +"ba7c4af8": "revokeMyId(bytes32)", +"ba7cc631": "createKingdom(string,string,uint256,address,bool)", +"ba7ce849": "drawPool(uint256)", +"ba7d0b3c": "ETE()", +"ba7d619c": "returnTokensFromHoldAdditionalAddress(uint256)", +"ba7da724": "devVUPDestination()", +"ba7dc45f": "_removeOperation(bytes32)", +"ba7e424d": "isIcoEnded()", +"ba7e7cab": "getApprovalCount(uint256)", +"ba7ed2ff": "setMinInvestment(uint256)", +"ba7efcdd": "investmentLimit()", +"ba7fb1df": "getAddressToken()", +"ba8029bb": "setStartSale(uint256)", +"ba809390": "AccountReaderAdded(address,address)", +"ba80d787": "contributor()", +"ba80e058": "landingDiscount_ppc()", +"ba8118b1": "goNextRound()", +"ba81522f": "maxBlockDrift()", +"ba816496": "last50plusblocknr()", +"ba818f8d": "affiliateFee()", +"ba827243": "YangMaoZhuangYuan(uint256,string,uint8,string)", +"ba82bde2": "bindusertop(address,address)", +"ba82c897": "updateRewardToken(address,uint256)", +"ba82f55d": "ethsoccer48()", +"ba838b01": "EdCoinToken()", +"ba83c970": "closeSell()", +"ba83d63d": "getBidFreelancer(uint256)", +"ba847552": "isAddrCanCallServer(string,address)", +"ba84cb3f": "MobileApp()", +"ba85571c": "getPlayerInfoByAddress(address,uint256)", +"ba8661a2": "TimestampScheduler(address)", +"ba873f60": "setAssociation(address,bytes32,bytes32)", +"ba8747b3": "addReport(uint256,string,string)", +"ba874999": "getGameEngineAddress()", +"ba87ebfa": "IMDEXsetOwner(address)", +"ba87fdd4": "getSenderCities(address)", +"ba885446": "tokensPerAllocation()", +"ba88d537": "_getSenderStatus(uint256)", +"ba8a141f": "EnterCoin()", +"ba8a86c2": "whiteListedAddressPresale(address)", +"ba8ad39e": "grantToAllowBlocking(address,bool)", +"ba8af655": "returnAmountPledged(uint256,address)", +"ba8b7152": "BlockOfLifeToken()", +"ba8b9712": "adminRefundTokens(address,uint256)", +"ba8bb22a": "LIRAX(uint256)", +"ba8c0c9d": "getPropertyLastUpdater(uint16)", +"ba8c6980": "hasGrantAccess(address)", +"ba8cded7": "Bet(uint256)", +"ba8d045a": "tobuy(uint256,address,uint256)", +"ba8ef244": "getEvaluation(uint64)", +"ba8fb567": "startPhase2(uint256)", +"ba904eed": "removeRegistrar(address)", +"ba9072ea": "crownedTime()", +"ba907b7e": "testFailCreateWithParentsSameItemId()", +"ba90d553": "getContractsByType(uint256)", +"ba90f022": "modifyRecord(uint256,string,string,string,bytes32,int64)", +"ba9130a6": "execCustom(address,bytes,uint256,uint256)", +"ba91d87b": "mintForWorker(address,uint256)", +"ba922e04": "Karma(uint256)", +"ba92d382": "factory_address()", +"ba9316b7": "getExp(uint256,uint256)", +"ba9334a0": "testCombinators()", +"ba9398e9": "publicSaleEtherRaised()", +"ba93d5e5": "setBankrollAddress(address)", +"ba93d980": "swapOpen()", +"ba941154": "newTapProposalFromCompany(uint256)", +"ba944118": "TMXGlobalToken(uint256,uint256,string,string,uint8)", +"ba953bc8": "KanadeCoin()", +"ba95b235": "sayNo()", +"ba95d63a": "leftSharePriceRateOfIncrease()", +"ba95df98": "releaseUserPrivateBonusTokens(address,uint256,address)", +"ba967a84": "addInit(address,address,address,address,uint256,string)", +"ba976ae5": "marketToken2018()", +"ba982c41": "tokensUnsold()", +"ba996aca": "getPlayerLevel(uint256)", +"ba99d1a6": "RATE_DAY_0()", +"ba9a061a": "START()", +"ba9a4d6e": "hasAddressVotedInBallot(uint32,address)", +"ba9a8b37": "convertibleTokenCount()", +"ba9a91a5": "SALT()", +"ba9a9e03": "StorageEnabled()", +"ba9ac37f": "mul(uint16,uint16)", +"ba9bb827": "CONTRIBUTION_MIN()", +"ba9bf757": "getPlatformBalance()", +"ba9c4637": "getMyPoints()", +"ba9d0638": "receivedCount()", +"ba9d407a": "GetAddressByName(bytes32)", +"ba9d4c09": "devuelveAppaddr(bytes32)", +"ba9e0907": "XJF()", +"ba9e9a86": "binarySearchForChallenge(uint256,uint256,bytes,uint256,bytes32[])", +"ba9ea413": "purchaseCostFiat(uint256)", +"baa0181d": "batchCancelOrders(address[5][],uint256[6][],uint256[])", +"baa0b806": "content(uint256)", +"baa23ac1": "SpecialDrawingRight()", +"baa24fce": "rightVotes()", +"baa28752": "listCenturion(uint256)", +"baa290d9": "DANSToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"baa2e587": "confirmReception()", +"baa2edaf": "tokensDataProviders()", +"baa2ff01": "get_blockhash(uint256)", +"baa30f7b": "jackpotCount()", +"baa32a94": "NiuYanToken(uint256,string,uint8,string)", +"baa371d0": "DigiPulse()", +"baa3f7ee": "claimedOf(address)", +"baa3fc48": "calculate_proportional_reward(uint256,uint256,uint256)", +"baa40cd4": "mintForPrivateFiat(address,uint256)", +"baa40e5c": "getVote(string)", +"baa416b6": "CorsariumCore(address[],uint256[])", +"baa46bdd": "_createDistrict(uint256,uint256,uint256,uint256)", +"baa47694": "submitBlock(bytes32)", +"baa5eb5c": "isDspRegistered(address)", +"baa61df0": "tokenContractClaimTokens(address)", +"baa6ab81": "priceByPeriod()", +"baa70a8b": "LBCoinJ(string,string,uint256)", +"baa79dd3": "ethOdinRate2()", +"baa7d1f3": "MULTISIG_ETH()", +"baa83568": "requestColuLocalNetworkOwnershipTransfer(address)", +"baa8529c": "give(bytes32,address)", +"baa90366": "isThereACoinAtCoordinates(uint16,uint16)", +"baa92a05": "returnsenderbalance()", +"baa93b56": "crownIfFreeze(address)", +"baa9a8a9": "EtherbotsCore()", +"baa9da15": "soldTotal()", +"baa9e531": "totalTokensBought()", +"baaa3eef": "setDistValues(string,string,string,string,string)", +"baaa8b9a": "actualGotTokens(address)", +"baaac593": "LogWaterTree(uint256,address,uint256)", +"baab7a3a": "isSuccessDoneState()", +"baab89d5": "getLockedStructAmount(address,address,uint256)", +"baac2178": "MNLTToken()", +"baac274d": "getCustomerBalance(address)", +"baac4316": "sendTokensToMe(address,uint256)", +"baac5300": "createTokenProxy(address)", +"baad0828": "changeControllerInBntyTokenContract(address)", +"baad1532": "getMatchServer(uint256)", +"baad6c2e": "setInfoTier(string)", +"baadbca0": "newTickerQuery(string,bytes32)", +"baae172c": "setRefreshLockBalance(address)", +"baaee21f": "getLastN(bytes1,uint8)", +"baaeecb0": "getAllApproval()", +"baaefe5b": "priceInc()", +"baaf2d4f": "transferOtherERC20Token(address,uint256)", +"baaf4eef": "RESERVES_HOLDER()", +"bab1d921": "closeCurrentStage()", +"bab25514": "GRUToken()", +"bab2b5e9": "percent3()", +"bab2f2b5": "containsOnlyAlphaNumerics(string)", +"bab2f552": "currentCycle()", +"bab41142": "takerApproves(uint256)", +"bab41293": "getDataColla_001_002(string)", +"bab42b54": "test_campaignRules()", +"bab4e3b1": "getOwnedToken(address,uint256)", +"bab54f69": "_isExcluded(uint256)", +"bab5714c": "sendTeamSupplyToken(address,uint256)", +"bab58ec9": "periodITO_tokenPriceUSD()", +"bab5b64e": "spenderAddress()", +"bab5e2af": "LogBTHFoundationWalletChanged(address)", +"bab6d101": "checkClaimTokenByIndex(uint256)", +"bab6f9bf": "generateRevokeStakeForDelegationSchemaHash(uint256,uint256)", +"bab7b237": "totalRelease()", +"bab86ea8": "test(string,string)", +"bab8bd04": "clearAllRequests()", +"bab8fe40": "claimableTokens()", +"bab92a29": "get_owner_planets(uint256)", +"bab94366": "AppUpdated(address,string,address,uint256,bool)", +"bab95dba": "_getFeeAndNetAmount(uint256)", +"bab99890": "CPollo()", +"bab9c00c": "SmartSignature()", +"bab9fc63": "testFailCreateWithParentParentNotInUse()", +"baba4811": "recieveFunds()", +"babb019d": "enact_liquidation_less(address,uint256,uint256)", +"babb3e0b": "updateEthRate(string,string)", +"babbb78d": "teamTokenWallet()", +"babcc04c": "getLogsNum()", +"babcc539": "isAllowed(address)", +"babd222f": "addressToLarePurchased(address)", +"babd7012": "activeSupply()", +"babddb4c": "FundReturn(address,uint256,bool)", +"babe9394": "EasyMineToken(address,address,address,address)", +"babf2b2d": "EscrowMyEtherEntityDB()", +"babf5e37": "changeFree(uint256)", +"bac02609": "buyEarlyWhitelist(address)", +"bac03cd7": "totalContractBalance()", +"bac0b029": "BifreeToken()", +"bac0b276": "allocate(address,uint256,uint8)", +"bac127b9": "SecondAddressBalance()", +"bac15203": "unPauseContract()", +"bac18f9a": "handToBitmap(uint32)", +"bac1e2e0": "testBitsAndSuccess()", +"bac1e9f6": "getChannelSize(address,uint256)", +"bac21a22": "totalSupplyLimit()", +"bac37239": "addMarketMakerAddress(address,address)", +"bac506e0": "rf()", +"bac55edd": "setDnsDomains(string,string,string)", +"bac6068c": "inject(address,uint128)", +"bac6241f": "LookRevToken(address,uint256)", +"bac74b4f": "ISLABCoin()", +"bac756e1": "PresaleToken(uint256,uint256)", +"bac79651": "setTokens(address,uint256)", +"bac7bb9f": "checkaddress()", +"bac7c252": "BTC10kon54()", +"bac97647": "uncleSafeNr()", +"bac9dbab": "ROLE_COO()", +"bacbe2da": "cancelVote(uint256)", +"bacc2753": "vestTo(address,uint256)", +"bacc2c42": "participate(uint256,uint256,uint256,uint256,uint256,uint256)", +"bacc58d7": "backManusOwner()", +"baccc92b": "RegulatorIfc(address)", +"bacd2a90": "mallocBudget(address,uint256)", +"bacd2e97": "executedCount()", +"bacd70b7": "callSomeFunctionViaInner3()", +"bacd8d88": "soldPercent()", +"bace4cf6": "Distribution(uint16,uint256,address)", +"bacef685": "createTokens(uint32,address)", +"bacf3f65": "secondPeriodOfICO()", +"bacf5f84": "_addBaseStats(uint256,uint8[8])", +"bacfddbc": "isDepositAddress(address)", +"bad09457": "test3(address[5],uint256[5],uint8,bytes32,bytes32)", +"bad16031": "isBlackjack()", +"bad19ead": "copyToAllUnits(uint256,uint256,uint256,uint256,uint256)", +"bad1f08f": "open(uint256,uint32,uint256)", +"bad21d65": "startInstantInterface(address,address,uint256,uint256,uint256,address,uint256,address,uint256)", +"bad2d6d2": "removeBlacklist(address,address)", +"bad4d623": "setAltDeposit(uint256)", +"bad568b1": "allowanceBcoupons(address,address)", +"bad69502": "getProviderRateHistory(uint256,uint256)", +"bad6b379": "changeCUSEaddress(address)", +"bad751bc": "createPeerReviewContract(address,bytes)", +"bad7726c": "checkDividendPaymentAvailable()", +"bad7d46a": "CreateOffer(uint8)", +"bad84416": "eligibleVotes(address)", +"bad845e6": "deleteProductInternal(bytes32)", +"bad84c9e": "getNumTicks()", +"bad9643b": "balance_wirthdraw()", +"badaba27": "packTable(uint256)", +"badae9b4": "addArgumentToRequestUint(int256,uint256,bytes32,uint256)", +"badb2e5a": "UpgradeRigETH(uint8,uint256)", +"badb97ff": "adminBurn(uint256)", +"badbaa3c": "setCallData()", +"badbbf34": "RBACWithAdmin()", +"badc9a52": "adminChanged(address,address)", +"badca131": "kill_and_withdraw(address)", +"badcf391": "sendMail(bytes16,bool)", +"badcfbcf": "withdrawSnowflakeBalance(address,uint256)", +"baddee6f": "listMultipleItems(uint256[],uint256,address)", +"bade1c54": "proposeReparameterization(string,uint256)", +"bade1ef9": "Birth(address,uint256,uint256,uint256)", +"bade6033": "propose(bytes,uint256)", +"bade777c": "Marked(address,address,address,address,uint256,uint256,bytes32)", +"badec5b4": "HK168coin()", +"badf3de9": "durationForBetAmount(uint256)", +"badf8b37": "TwoFactorAuth(string,string)", +"badfa573": "setAllowTransferTimestamp(uint256)", +"badfedf2": "genEthsRec(uint256,uint256)", +"bae07416": "canBeValidated(uint256)", +"bae0c536": "addSaleAgent(address)", +"bae118f4": "setHouseInfo(bytes32,uint256,string,bytes32)", +"bae18880": "getReceipt(address,uint256)", +"bae18ac3": "setUpgradeFee(uint256)", +"bae1c1ac": "doSendWithSignature(address,uint256,uint256,bytes,uint256,bytes,bool)", +"bae1cc74": "multiSubWithdraw(address[])", +"bae2718f": "WithNoArgumentConstructor()", +"bae2b6ab": "setLedgers(uint256)", +"bae2ddb5": "XBHX()", +"bae37857": "getEndTimeOfSession(uint256,uint256[],uint256)", +"bae3791e": "weisHardCap()", +"bae3c066": "sendInternally(uint256,uint256)", +"bae3c27f": "weiLimit()", +"bae4f466": "roundKeys()", +"bae5e693": "partnersAllocation()", +"bae5f9dd": "takerAffiliateFee()", +"bae61714": "setICOWeek3Bonus(uint256)", +"bae667bc": "tokenOf(bytes32)", +"bae6c2ad": "queueSize()", +"bae6d62b": "manualOverride()", +"bae70892": "setMyPubKey(bytes32,bytes32,bytes32,bytes32,bytes32)", +"bae72565": "readAddress(address,uint256)", +"bae728b1": "setUnholdDate(uint256)", +"bae78d7b": "getEntry(uint256)", +"bae804a7": "transferFromSender(address,uint256)", +"bae8d888": "createArtefact(uint256)", +"bae944ba": "globalUnlockTime()", +"bae971e4": "getWithdrawEtherAmountValue()", +"bae99efc": "ICO_MAX_CAP()", +"baea0431": "getMsgDataAfter()", +"baea3a21": "addToWhitelistInternal(address)", +"baeb0718": "checkin()", +"baeb8cad": "deleteGroup(address,address)", +"baeb91ae": "invest(uint128)", +"baebcaf0": "getApp(address,uint256)", +"baec1ced": "depositPresaleWithBonus(address,uint256,uint256)", +"baec25ee": "ZYHToken()", +"baecd693": "sendTokensAfterBuy(address,uint256,uint256)", +"baed8bb1": "getAddressValues(bytes32)", +"baee193d": "changeCountryLimit(uint256,uint256)", +"baeeddfc": "Ublasti(uint256,string,string)", +"baef73e9": "expiryOf(uint256)", +"baf00f76": "removeAllSubUsers()", +"baf03586": "calculateBaseGet(uint256,uint256,bool,uint256)", +"baf05a87": "hodl_interval()", +"baf11cab": "isCommitted(uint256,address)", +"baf1256f": "withdrawToPlayer(address)", +"baf30051": "token_issued()", +"baf38352": "buy_for(address)", +"baf3a4d4": "distDivRate()", +"baf3d262": "Tickets_Sold(string,uint256)", +"baf3ef13": "disableNode()", +"baf44453": "FundAccount(address,address,address)", +"baf4960d": "createPlanet(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"baf4ec53": "sumICOStage3()", +"baf4f6d1": "_endContestIfNeededStalemate()", +"baf539ee": "changeGasLimit(uint256)", +"baf5fbff": "PreIcobonusEnds()", +"baf652fe": "bonusThresholdWei()", +"baf6f9ca": "saleis(bool)", +"baf6fd32": "setintertoken(address)", +"baf73c0f": "holdingsOf_BULL(address)", +"baf79eb4": "removeDealInternal(bytes16)", +"baf8809b": "releaseTimeLock(address)", +"baf8c622": "_SUTokenContract()", +"baf9b369": "post(bytes)", +"baf9c5a2": "initialSupplyPrivateSale()", +"baf9d07b": "addAuthorization(address,address)", +"baf9d0cf": "getRoundAwardTicketNum(uint256)", +"bafa090d": "breakup(address,uint256)", +"bafa9c9d": "FighterUpdated(uint256)", +"bafb8e83": "marketSupply()", +"bafc1437": "getPurchased(uint256)", +"bafc7fe9": "zero_fee_transaction(address,address,uint256,uint256)", +"bafcea6f": "dataSourceGetYellowCards()", +"bafd244f": "setAmbassadorAddress(address)", +"bafdaf5e": "_getTargetBlock(uint256)", +"bafdebf3": "getServerAddress(string)", +"bafe648d": "BerithCoin(uint256)", +"bafedcaa": "lastRewardAmount()", +"baff4609": "lockTokenForNode(uint256,uint256,uint256)", +"baffa903": "getStartPrice()", +"baffed2a": "disallowWrite(uint256,address)", +"bb004abc": "reserveManager()", +"bb005d4f": "setPlayerResearch(address,uint256)", +"bb007db9": "getSalaryTokenCount(address,address)", +"bb00c8f9": "ownerMintAmount()", +"bb00faca": "bonus02()", +"bb00fc55": "bookEarnings()", +"bb013206": "addNewCertificate(uint256,bytes32,bytes32)", +"bb0165b1": "setContractAddress(uint256,address)", +"bb01aa39": "unreserve(uint32)", +"bb01fb1f": "Issue(uint64,address,uint256)", +"bb043d53": "MinimalPayValue()", +"bb053484": "getInitializeFeePerEthInAttoethValue()", +"bb056781": "purchaseGas(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bb057c5e": "proposedImplementation()", +"bb05ca52": "JadeCoin()", +"bb061fb5": "addWhite(uint256,uint256,uint256,bool)", +"bb07576d": "voteToUpdatePrenup()", +"bb083c2b": "substractFee(uint256,uint256)", +"bb08b247": "showAuction(string)", +"bb08c6c3": "o_desafiante(bytes14)", +"bb0936f7": "first_bonus_amount()", +"bb09adbb": "privGoal()", +"bb0a420a": "user(address,address)", +"bb0a64b6": "batchTransfer(address[],uint256[],address)", +"bb0bcbff": "AddPoolMember(address,string)", +"bb0bef19": "validateFile(address,uint256,bytes,bool,bool)", +"bb0c08b6": "getDebitNonce(bytes32)", +"bb0c8298": "minimumAmount()", +"bb0c8893": "claimUnrelatedTokens(address,address)", +"bb0ce7d3": "TotalHoldersAmount()", +"bb0d6fb6": "noCount(uint256)", +"bb0d7f9a": "listTCC()", +"bb0db551": "add_32(uint32,uint32)", +"bb0e01fd": "isError(uint8)", +"bb102aea": "totalSupplyCap()", +"bb10b2f1": "PRE_SALE_BONUS_PER_CENT()", +"bb119f6e": "productInfo(uint256)", +"bb11ed7e": "rescueTokensInMultiplePolls(uint256[])", +"bb128575": "StopSell()", +"bb13245f": "decimalsMultiplier()", +"bb133331": "trusteeContract()", +"bb1488d8": "_newAuction(uint256,uint256,uint256,uint256)", +"bb1583fc": "isBatched()", +"bb158dd5": "addToTokenLocked(address[])", +"bb15ac8e": "readBool(bytes32)", +"bb1630f2": "getAllSigs()", +"bb169da5": "Diploma_landing_page()", +"bb1757cf": "claim(address,bytes)", +"bb17a938": "toRlp(uint256)", +"bb17c8cc": "round2StartTime()", +"bb17e050": "Nullify(address,address,address,address)", +"bb18705c": "_buildSettleId(bytes,bytes)", +"bb1953fe": "updateSeed()", +"bb1a473b": "VOLUME_25()", +"bb1a5aad": "flipFinalizedSwitchTo(bool)", +"bb1ad687": "gateKey()", +"bb1adf9b": "DURATION_BEFORE_RESTORE_UNSOLD()", +"bb1af82b": "Test3()", +"bb1b21ed": "RefCommission(uint256,uint256)", +"bb1b99ce": "isCurrentUserAdministrator()", +"bb1c9351": "redeemNativeToken(bytes32,address)", +"bb1cc065": "buy_lovelock_withLOV(bytes32,string,string,string,uint256)", +"bb1d1cf9": "tier_rate_3()", +"bb1d45fc": "setOtherManager(address,uint8)", +"bb1d7ffa": "weddingdate()", +"bb1dfeca": "buildId3(address,uint256)", +"bb1e54bc": "TokenCrowdsale(address)", +"bb1eeb59": "totalWeiAmountSale2()", +"bb1f602e": "FailingDeployment()", +"bb205c84": "getDownVoteCount(bytes12,bytes12)", +"bb210372": "getPresale(uint256)", +"bb221cc8": "Hadescoin(address)", +"bb221e4b": "FuelToken()", +"bb22d75c": "PROMOTION_PROGRAM()", +"bb23e3a9": "arr(uint256,uint256,uint256)", +"bb23ef74": "setOwnerTestValue(uint8)", +"bb2408e6": "PERCENT_DELIMITER()", +"bb245283": "getHatchDurationMultiByGeneration()", +"bb24f0dc": "operationsLength()", +"bb2559ca": "initialTokenBalanceFetched()", +"bb256f68": "VaultCountPerProcess()", +"bb25b143": "DrawReadyToPayout(uint32,uint8,uint8,uint8,uint8,bytes32)", +"bb25bd15": "addWin(address,uint256)", +"bb25fd7f": "SODIUMTOKEN()", +"bb262080": "JaroSleep(address,uint256)", +"bb26d9d1": "requestCosign(address,uint256,bytes,bytes)", +"bb27e19e": "getlen(bytes32,bytes32)", +"bb280cba": "addBackers(address,uint256,uint256)", +"bb287679": "mainFabricAddress()", +"bb28c3f2": "setNonce(string,uint256)", +"bb29998e": "test(address)", +"bb2a51d1": "setSecurityGuard(address)", +"bb2a7d0c": "addVestingSchedule(address,uint256[],uint256[])", +"bb2aebe3": "createAssetPack(bytes32,string,uint256[],bytes32[],uint256)", +"bb2bded0": "trinityDataContract()", +"bb2c5ad7": "hasRandom()", +"bb2ce2f5": "DeedClosed()", +"bb2ced1b": "previousFounders()", +"bb2ced25": "startPoll(address,address,bytes32,bytes32,uint256,uint256)", +"bb2d713e": "sells(uint256)", +"bb2dc863": "getChildBlock(uint256)", +"bb2de15a": "TicketsBought(uint8,address,uint16[])", +"bb2e6904": "hopeCoin(uint256,string,string)", +"bb2eb4d2": "ONE_PERCENT()", +"bb2eb982": "impl_rewardsFactor()", +"bb2ebf83": "CostChip(address,uint32)", +"bb2f159b": "read_i32()", +"bb2f3228": "EOCSToken(uint256,string,string)", +"bb305ef2": "getBondOwner(uint256)", +"bb3084db": "ICOStarted(uint256)", +"bb30d796": "releaseAllocation(address)", +"bb316f06": "contributeForAddress(address)", +"bb32b6f8": "receivedCWC(address,uint256)", +"bb33072f": "refundToInvestor()", +"bb33d729": "unpauseSale()", +"bb33e730": "MoveTokens(address,address,uint256,string)", +"bb340909": "initPecul()", +"bb34534c": "addressOf(bytes32)", +"bb34e57c": "ROLE_BURN()", +"bb35783b": "move(address,address,uint256)", +"bb35b29c": "MintIND(address,address,uint256)", +"bb35f7ee": "rocketTravelTimeByResource(uint256,uint256)", +"bb3611e7": "BonusWhiteListCrowdsale(uint256)", +"bb36a233": "customtransfer(address,uint256)", +"bb36e5d0": "returnExternalPayments(address,bool,bool)", +"bb36ef7b": "addManyToKyc(address[])", +"bb370bad": "orderWasValid(uint256,uint256,uint256,uint256)", +"bb371fdd": "setMaxDeposit(uint256)", +"bb37a162": "payAdvertisers(bytes32)", +"bb389952": "unlockFounder()", +"bb38be10": "notifyCharge()", +"bb397161": "createNonRepeatableVpfFactory(string,bytes32,uint256,int256[])", +"bb39a960": "trade(address,uint256,address,uint256)", +"bb39c85f": "getTotalOwedTokenRepaidToLender(bytes32)", +"bb39ea60": "MIN_ACCEPT_ETHER()", +"bb3a304f": "setFundingLock(bool,address)", +"bb3a77ae": "ROLE_ARBITER()", +"bb3b2a35": "withdraw_4()", +"bb3b8dca": "getCertificateHash(bytes)", +"bb3ce7fe": "DepositHolder()", +"bb3cf577": "AddressListed(address,uint256)", +"bb3d13c5": "addValidation(address,bytes32)", +"bb3d5af2": "GetClaimCount()", +"bb3d9326": "YTC()", +"bb3e409a": "buyEggs(uint256,address)", +"bb3e443b": "FDataToken()", +"bb3e5b0a": "setPI_edit_34(string)", +"bb3f0390": "min_inv()", +"bb3f5330": "revertFunds()", +"bb3f5b7d": "totalTransfer()", +"bb3ff0bd": "TITSCOIN()", +"bb41f421": "payerPercent()", +"bb424892": "minimumCost()", +"bb427d8a": "enterBet()", +"bb42de92": "getSubscriberContentCount()", +"bb43a11e": "getHashOf(address)", +"bb440715": "getPoolBonusExpertFactor(uint256)", +"bb440b82": "funComputeRoundPrice()", +"bb445084": "getRDividends(address)", +"bb449782": "setCommunityAccount(address)", +"bb44e08d": "updateOrderNumber(uint256)", +"bb452ea7": "objectDoublet()", +"bb4534f1": "addrecruit(address,address,address,address)", +"bb453d5a": "CBCToken()", +"bb45d09d": "getCurrGameInfo()", +"bb471d73": "getRealAmountBonus(uint256,uint256,uint256)", +"bb472219": "resetGame()", +"bb472c93": "bet2deltaOf(uint256)", +"bb476637": "deliverTokensAdmin(address,uint256)", +"bb48156a": "preSaleRound()", +"bb4872de": "stoppable()", +"bb48d190": "upgradeToPremium(bytes32)", +"bb4a7f18": "getAllBusinessOwners()", +"bb4b236a": "CSToken(uint256,string,uint8,string)", +"bb4b7bd0": "listForSale(uint256,bytes32)", +"bb4c006c": "checkDeletable(address)", +"bb4c9f0b": "multiSend(address[],uint256[])", +"bb4cbd0b": "gracePeriodStopBlock()", +"bb4d0cb5": "FSC3()", +"bb4d4b2f": "addVestingAccount(address,uint256,uint256)", +"bb4d7cd1": "tag(uint256,string)", +"bb4d9e22": "WithBonusPeriods()", +"bb4e3f4d": "add(uint8,uint8)", +"bb502bac": "EthbetOraclize(address,address,uint256)", +"bb502dd9": "checkExchangeSupported(bytes32)", +"bb504317": "divest(address,uint256)", +"bb50c67a": "crowdsaleRunning()", +"bb510a77": "createChannel(address,uint256)", +"bb5166e7": "getPaymentType(address,uint256)", +"bb5196d6": "setParams(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb51de39": "IDEAL()", +"bb51f32d": "withdrawTeam()", +"bb52ca2c": "getOrgClaimsCount(address)", +"bb537ced": "matchesDelay()", +"bb540231": "totalFartsReceived()", +"bb542ef0": "setOwnerWallet(address)", +"bb5530c4": "updateCampaign(uint256,string,string,string,address,address,address,string)", +"bb56a683": "guaranteedBuyersBought()", +"bb572896": "consolationRewardsRequiredFaith()", +"bb57349c": "handleSaleClaimCallback(address,uint256)", +"bb575333": "sessionEndTime()", +"bb582db6": "mgmtBodyAddress()", +"bb584a3a": "EventCancelAuction(uint256,address)", +"bb59b48c": "payableWeiReceived()", +"bb59d68c": "DariaRotkoToken()", +"bb5a1149": "myReferee()", +"bb5a4f4c": "placeBet(uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bb5a7ca0": "extendEventStartsTime(bytes32,uint256)", +"bb5adf14": "setProxyManagementContract(address)", +"bb5b3edc": "emergencyWithdraw(uint256,bool)", +"bb5b5203": "toggleActions()", +"bb5b586b": "usdPerKEther()", +"bb5b6aa4": "myInner2()", +"bb5bf0c3": "WisdomWorldStandardToken(uint256,string,uint8,string)", +"bb5c3821": "total_ICO_supply()", +"bb5d3bcb": "tokensPromotion()", +"bb5d40eb": "isValid()", +"bb5d69a0": "setEns(string,address)", +"bb5ddb0f": "sendMessage(address,bytes)", +"bb5e0696": "LongTermReserveMinted(address,address,uint256,uint256)", +"bb5e3d3b": "doThing(string)", +"bb5e5875": "InseeCoin()", +"bb5e78a4": "HasSigningPermission(address)", +"bb5e9dec": "get30Artworks(uint16)", +"bb5e9eab": "thirdWeek()", +"bb5f4629": "orders(address,bytes32)", +"bb5f747b": "isWhitelistAdmin(address)", +"bb5f95fe": "LSECoin()", +"bb602e80": "Volkscoin()", +"bb6198dd": "getOrCacheTargetReporterGasCostsWasCalled()", +"bb632244": "btcs()", +"bb642f65": "seedCreatedCount()", +"bb64c09b": "KIMEX(address,address)", +"bb64c79e": "SearchTimeBlocknumber(string)", +"bb64e420": "getTransactionByTransactionId(uint256)", +"bb6534a9": "AMOUNT_TeamSupport()", +"bb67be65": "AFUN(address,uint256)", +"bb68b86f": "maxTokensToDistribute()", +"bb6954ce": "BourseToken()", +"bb6996a5": "swapWinner(uint256,bool,uint256)", +"bb6a0853": "GreedPit()", +"bb6a0f07": "tasksCount()", +"bb6a1427": "testThrowRestartEnforceRevisions()", +"bb6a55bd": "_mintToken(address,uint256)", +"bb6ad6ef": "withdrawTokenId(uint256)", +"bb6af3da": "limit9()", +"bb6af543": "setJackpotPayRate(uint256)", +"bb6b13a1": "tier1()", +"bb6b38bb": "setAdminAddressForComissions(address)", +"bb6b4619": "SendETC(address)", +"bb6c1178": "RentToken()", +"bb6c4827": "burnThis(uint256)", +"bb6d0132": "End_Promotion()", +"bb6d203c": "spend(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"bb6d8c77": "contractPoweredUp()", +"bb6e7de9": "endContract()", +"bb6f0f0f": "fetchAllCandidatesBySnapshotBlock(uint256)", +"bb6f175f": "SimpleAquaPriceOracle(uint256,uint256)", +"bb6f6c15": "protectedDenominationOfOrigin()", +"bb7029a9": "gameCollapse()", +"bb702c8e": "discard()", +"bb707059": "approveMany(address[])", +"bb70abfa": "_computePVPBeneficiaryFee(uint256)", +"bb718861": "scheduleCall(address[2],bytes4,bytes,uint8,uint16,uint256[6])", +"bb71a7c3": "makeInvestment(address,address,uint256,uint256,address)", +"bb72680c": "getHasPermission(address,string,string)", +"bb72b12d": "oldOwnerProfit()", +"bb731f98": "Excalibur()", +"bb73703f": "delRoleForUser(address,string)", +"bb7436a7": "getUsersDroidsIds()", +"bb74a5a0": "testValidationOfDoubles()", +"bb74b4e6": "TOKEN_SUPPLY_OWNER()", +"bb74dcda": "isRefunded(address,address)", +"bb750232": "allowReceiver(address)", +"bb75a2a9": "throwMe()", +"bb76d8a5": "TimeLock()", +"bb777028": "PRE_ICO_BONUS_TIME_3()", +"bb777498": "calculateId(string,string,string)", +"bb77b136": "planetAuction()", +"bb77d7d8": "ConunToken(uint256,string,uint8,string)", +"bb784140": "AragonTokenSaleMock(uint256,uint256,address,address,uint256,uint256,uint8)", +"bb7859b5": "periodThree()", +"bb785f0e": "AirDropPayBitsR1(address[])", +"bb78d159": "approveTokenControlInfo(uint256)", +"bb79428c": "RateUpdate(string,uint256,string,string)", +"bb7963e3": "hasArbiterVoted(uint256,address)", +"bb7a6dba": "vestingHasStarted()", +"bb7c15ab": "createDog(uint256,uint256)", +"bb7c62cb": "getReferrerBonusTokens()", +"bb7cb80b": "dropOffset()", +"bb7d064f": "automatedReport(uint256[])", +"bb7d4f65": "ICOFFSHORE()", +"bb7d715b": "startEthToCentsRateUpdateCycle()", +"bb7dd72d": "finishMintingStruct()", +"bb7fa4ac": "sellCeiling()", +"bb7fb08b": "getContributor(address,uint256)", +"bb7fde71": "mint(address,uint256,uint256,string)", +"bb7fe5c9": "LotteryAdmin(address)", +"bb7ff992": "requestSellforETH(uint256)", +"bb806dc9": "initial()", +"bb813a9b": "KkkTokenSale(uint256,address)", +"bb814746": "ICO_TWO()", +"bb814e9e": "versionExists(bytes32)", +"bb818ea6": "advancedNETH(uint256,string,string)", +"bb81926d": "_applyCommission(uint256)", +"bb822605": "calculateTokensTier(uint256,uint256)", +"bb826e50": "maxBlockActions()", +"bb828f11": "setChallengeRewardsPercent(uint256)", +"bb83a01f": "MyTALToken()", +"bb843219": "closingDateFunding()", +"bb84d362": "splitProfitVIP_only_Dev()", +"bb850e01": "_transferOwnershipOnBuy(address,uint256,address)", +"bb85931b": "eSTATERToken(address,address)", +"bb862588": "getCET6ScoreById(uint32)", +"bb86d8fe": "CPGPEREGRINE_FTL_SPEED()", +"bb878f2a": "ProposalAdded(uint256,uint256,string)", +"bb87b5f8": "getPersonalStatus(address)", +"bb87c1f2": "getAllowedUsers(address,uint256)", +"bb889341": "ZiberToken()", +"bb88c016": "decreaseApproval(uint256,address,uint256)", +"bb898233": "getAct()", +"bb8ab48c": "Bluechip()", +"bb8b2b47": "getUserContribution(address)", +"bb8bbc90": "ContractEFT()", +"bb8bcc46": "crowdSaleCap()", +"bb8be064": "HardwareToken()", +"bb8bedc9": "setMasternodeCandidate()", +"bb8c256a": "ecadd(uint256,uint256,uint256,uint256)", +"bb8c7ce4": "ContributionReceived(address,bool,uint256,uint256,uint256)", +"bb8c869d": "contestOver()", +"bb8c9797": "claimReward(string)", +"bb8d35ce": "medibitToken()", +"bb8dc735": "getNonceCompareOp()", +"bb8e8f46": "isExecutionAllowed()", +"bb8f0dd2": "PonziSeller()", +"bb8f712f": "generateGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb90617b": "toUINT112(uint256)", +"bb90cec2": "setNewRound()", +"bb911607": "percents(uint256,uint256)", +"bb912454": "setKNCPerEthRate(uint256)", +"bb913f41": "_setImplementation(address)", +"bb91f8ae": "ownerTransferAllEther()", +"bb925c19": "_selectWinner(uint256)", +"bb94392e": "getRemainingTokenForArticle(string)", +"bb945177": "produceTokens(address,uint256,uint256)", +"bb9453a5": "assetProperties(address)", +"bb95024c": "DevilsCoin()", +"bb95d992": "blockhashes(uint256)", +"bb963c8a": "transferLibOwnership(bytes,address)", +"bb969132": "getLandEstateId(uint256)", +"bb9694f3": "Eth()", +"bb971094": "finishAirdrops()", +"bb979c3d": "getHotelsByManager(address)", +"bb9932a7": "addressReserveSupply()", +"bb996043": "returnPtSafeXLarge()", +"bb99999c": "TokenLinked()", +"bb99dec1": "MoldCoin(uint256,address)", +"bb9b02a8": "evLockFund(address,uint256)", +"bb9b13d8": "getTotalInterestAmount(address)", +"bb9ba82d": "Florijn(uint256,string,string)", +"bb9c3f2b": "minWager()", +"bb9c6c3e": "verify(string)", +"bb9e1edc": "ethBaseBalance(address)", +"bb9e3547": "setTokenCost(uint256)", +"bb9e37ec": "TitleApproved(uint256)", +"bb9efd5e": "bulk(address[],uint256[])", +"bb9efdc6": "QUAK()", +"bb9fc9ed": "transferStmpsToOwnerAccount(address,uint256)", +"bba02bf8": "LyuTestToken()", +"bba04dc9": "resetExplicitState(uint32,int64,int256,uint64,int8)", +"bba231ce": "_isPast(uint256)", +"bba2e907": "prepaymentFee()", +"bba33ace": "sellerCut()", +"bba45738": "setOmegaContract(address)", +"bba46031": "LOFO()", +"bba4a876": "setStateDistributing()", +"bba4b31e": "birthBlock()", +"bba4c282": "RaiblocksClassic()", +"bba4e4c0": "AddressForReturn()", +"bba4e9bd": "getTraitCount()", +"bba52516": "tokenTimelock()", +"bba570cb": "getDatURL(string)", +"bba5ad87": "registNameXid(string,uint256)", +"bba5b24e": "buyTokens(uint8)", +"bba65ed1": "isbit(uint256,uint256)", +"bba7a1ab": "getTokenVolumebasedBonusRateForPhase1(uint256)", +"bba80923": "msub(uint128,uint128)", +"bba8a065": "insert(uint8,uint8)", +"bba8b342": "PresaleMidexToken()", +"bba90086": "updateAndTransferFrom(address,uint256,string,uint256,uint256)", +"bba91ea7": "getHomeadvIndex(uint256)", +"bba9a9f6": "zeroFeesTransfer(address,address,uint256)", +"bba9cfe1": "soldBeforeUnsoldAllocation()", +"bba9dc60": "deactivateProvider(address)", +"bba9ffce": "TransactionFailed(address,address,uint256)", +"bbaa7345": "changeDivestmentFee(uint16)", +"bbaa7a57": "getHeroAttributes(uint256)", +"bbaaa787": "claimable(address,bool)", +"bbaac1e8": "privateSaleTokensAvailable()", +"bbab867c": "setSubContractAddresses(address,address)", +"bbac78a9": "setImmutableOwnership(address)", +"bbad490f": "phase_3_bonus()", +"bbad6172": "ICOZ()", +"bbadb845": "updateProduct(uint256,string,uint256,uint256,uint256)", +"bbaefe9f": "bytePrice()", +"bbafb379": "updateBatchStartTime(uint256,uint256)", +"bbb01c9c": "privateIcoMinimumContribution()", +"bbb0c054": "foundersVestedPayment()", +"bbb0d58e": "_createNeighbors(int32,int32)", +"bbb104cf": "FucksToken9()", +"bbb1c4c0": "withdrawForFiveYear()", +"bbb21c4d": "explore(uint256,uint256)", +"bbb28a65": "contributors_count()", +"bbb37f60": "purchaseLeader(uint256)", +"bbb37f76": "registerTier2Users(address[])", +"bbb44989": "Token2GB(address)", +"bbb50b78": "vraWallet()", +"bbb655b6": "_setGasPrice(uint256)", +"bbb7259c": "CrowdsaleLimit(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bbb73e3e": "GetBuyPrice()", +"bbb7d310": "getCompte_19()", +"bbb7eb64": "addInventories(uint256,uint256,uint256,uint16)", +"bbb896ad": "isCurrentAdmin(address)", +"bbb906f7": "TomSkin()", +"bbb92642": "BotTradesToken()", +"bbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", +"bbbc0f55": "_price_tokn_ICO_first()", +"bbbc67d0": "getParticipantDestination()", +"bbbc77dd": "intersubtoken(address,uint256)", +"bbbd2953": "startNewBattle(uint256,uint256,uint256,uint256)", +"bbbdef70": "FreezoneToken()", +"bbbe1390": "getEmployerJobsForFreelancerInvite(address,address,address)", +"bbbeac89": "MastermindAlliancePublishingGroupToken()", +"bbbf8fbd": "increaseWeiRaised(uint256)", +"bbbf9384": "BATTLE_CASUALTIES()", +"bbbfc4db": "mulsm(uint256,uint256)", +"bbbff4fb": "updateMinAmountWei(uint256)", +"bbbff571": "changeKey(string)", +"bbc001c3": "alloc()", +"bbc0c1a2": "addOrg(string,string,string)", +"bbc0ebbf": "soldForFirst()", +"bbc10d1a": "distributeeBitcoinCashSmall(address[])", +"bbc2402d": "startCrowdsale(uint256)", +"bbc2986c": "setPrice(uint16,uint256)", +"bbc2fcf5": "TOKEN_PER_ETH()", +"bbc30ad8": "getGalleryData(uint256)", +"bbc32820": "autoPay()", +"bbc39ab6": "readCharityAddress()", +"bbc42b3f": "orderToContractor(uint256)", +"bbc43d41": "pay(uint128,address,bytes1)", +"bbc49130": "Milestone_OpenTheIco(string)", +"bbc53086": "csvConcat(string,string,string,string)", +"bbc5aa5b": "maxTransferAmount(uint256)", +"bbc5d3d9": "setQuickConverter(address)", +"bbc6049d": "etherSpin()", +"bbc620a8": "setNewWithdrawCommission(uint256)", +"bbc6351e": "MMMC()", +"bbc64582": "getVotesCount(address,uint256,bytes32)", +"bbc6df30": "getRoundInfoByID(uint256)", +"bbc6eb1f": "getDefaultDonation()", +"bbc7d0b9": "marketingPool()", +"bbc7f045": "ZenCoin()", +"bbc84d1a": "voteWorth()", +"bbc878c4": "totalSeraphims()", +"bbc894a1": "GuoCoin()", +"bbc8e3cb": "disallowTransfers(address[])", +"bbc94fda": "priceProgression()", +"bbc9626b": "move_o(uint8,uint8)", +"bbc9f09a": "payPartners()", +"bbca0a89": "c_endTime()", +"bbcac1c3": "vipBrokerFee()", +"bbcb4e3a": "TokenERC20(uint32,string,string)", +"bbcbce8e": "MIN_GOLD_TO_UPGRADE()", +"bbcbe572": "d(address,address)", +"bbcbefd0": "unset()", +"bbcc69ef": "withdrawTokensByInvestors()", +"bbcc8cea": "SaiSaiToken(uint256,string,string)", +"bbcd0f02": "endorseClaim(string,string,string,address,address,string)", +"bbcd5bbe": "setTokenContract(address)", +"bbcdd139": "initExploit()", +"bbcded7a": "left73(uint256)", +"bbce2c17": "lastBurn()", +"bbce3fc2": "getLastBet()", +"bbce67ca": "lastPlayTime()", +"bbce877b": "getbuymoney(address,uint256)", +"bbced0d0": "newTopic(string)", +"bbcef175": "end_redeem_period()", +"bbd0c939": "computePrice(uint256,uint256)", +"bbd1e186": "addModule(string)", +"bbd1e1fc": "editionActive(uint256)", +"bbd2e01e": "betsLength()", +"bbd2e059": "impl_transferMSI(address,address,uint256)", +"bbd31db3": "openAll()", +"bbd32de0": "massTransfer(address[],uint256)", +"bbd3684c": "reservedteamtoken()", +"bbd37e37": "RICO()", +"bbd37ef3": "getReportingParticipant(uint256)", +"bbd39ac0": "coinBalanceOf(address)", +"bbd3b27c": "loveEvent()", +"bbd3b2ab": "inrSessions()", +"bbd418e6": "testConcatStorage4Bytes()", +"bbd425df": "bestUser()", +"bbd4271f": "setRateAndStart(uint256,uint256,uint256)", +"bbd46303": "changeStage(uint8,uint256,uint256,uint256)", +"bbd4e8c9": "numDeposits()", +"bbd4edb1": "updateRatingCustomer(string,bool)", +"bbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", +"bbd5301a": "_devteam()", +"bbd53bf7": "fairsale_protectionOFF()", +"bbd5d174": "LogGame(string,string,string,string)", +"bbd6dd48": "getUserTokenInfos(uint256)", +"bbd74748": "Ethraffle_v4b()", +"bbd7a3c7": "scripts(address)", +"bbd8b602": "getOracleOutcomes(bytes,address[])", +"bbd95c32": "inArray(uint256[],uint256)", +"bbd974cc": "maxAllowedTakerBetsPerMakerBet()", +"bbd9a5fa": "grantPermission(address,string)", +"bbda1e9a": "BicycleToken()", +"bbda33d9": "getGameName()", +"bbdaebe2": "transferFromInternal(address,address,uint256)", +"bbdb31cb": "challenge(uint256,address,bool)", +"bbdb57c3": "batchTransferORSS(address[],uint256[])", +"bbdbd31e": "beneficiaryAndBirth(bytes32,int256,bytes32)", +"bbdc02db": "gameType()", +"bbdc04d8": "getDealData(bytes32)", +"bbdc7709": "startDispute()", +"bbdd366a": "DECIMALS_MULTIPLIER()", +"bbddaca3": "setReferrer(address,address)", +"bbdefbbb": "AWMVoucher()", +"bbdfbfba": "delivered()", +"bbe00af5": "beneficiars()", +"bbe18d43": "betClosed()", +"bbe2b727": "burnWholeBalance()", +"bbe42771": "closeDeed(uint256)", +"bbe430de": "available(address,address)", +"bbe437eb": "endICO_w2()", +"bbe4fd50": "getNow()", +"bbe562b0": "multiplication(uint256,uint256)", +"bbe5d9d4": "addSpace(uint256,uint256,bytes)", +"bbe61730": "get_sale_arbits_total()", +"bbe7180b": "envio_dinero()", +"bbe7221e": "orderbookContract()", +"bbe86e6a": "sendTokensToOne(address,uint256)", +"bbe8a9b6": "registerSecretBatch(bytes32[])", +"bbe93d91": "mul(int256,int256)", +"bbe9c7d6": "takePromille(uint256,uint256)", +"bbe9f99d": "isTeamMember(address)", +"bbeadcad": "invalidateVotingAtIndex(uint256)", +"bbeb5923": "joinFee_()", +"bbeb76bc": "setMultipleParticipantWhitelist(address[],bool[],uint256[])", +"bbec170f": "lockAllAccount()", +"bbec3768": "createOrder(uint128,uint16,uint256,uint8,uint256)", +"bbec9e1b": "deletePriceCredentialItemId(bytes32)", +"bbececa9": "left78(uint256)", +"bbed7177": "getContentTimestamp(uint256)", +"bbee1ab7": "forgiveIt(address)", +"bbef83cf": "getContractNameById(bytes32)", +"bbef8624": "calculateWithdrawalRequestWitnessHash(address[],uint256[])", +"bbef86b8": "PayForServiceCHL(uint256)", +"bbf02b00": "level_8_percent()", +"bbf0f065": "keepEth()", +"bbf14d67": "tier3Timestamp()", +"bbf1e6d0": "SetMiningEnable()", +"bbf2a9a3": "changeAcct3(address)", +"bbf2ee4e": "lockAddress(uint256)", +"bbf3ae00": "ccExchangeRate()", +"bbf48d6f": "convertReward()", +"bbf58f4d": "foundersVault()", +"bbf59a41": "personal_withdraw()", +"bbf646c2": "ethAddr()", +"bbf7585c": "getDistributionAt(uint256)", +"bbf76802": "purchaseApprove(address)", +"bbf78026": "SetMemberInfo(address,address,bytes32)", +"bbf89803": "addBuyer(address)", +"bbf9cd8b": "EACCoin()", +"bbfa6153": "getRegulatorLevel(address)", +"bbfad256": "updated(uint256)", +"bbfb2f7a": "getEndtime()", +"bbfbaaf8": "getWorkSecondsInProgress()", +"bbfbe6b6": "discountedMiningDifficulty(address)", +"bbfcc86b": "getHistEthRate(uint256)", +"bbfdc3c4": "logicStatic(address)", +"bbfe6b75": "externalCall(address,uint256,bytes,uint256,uint256)", +"bc0111a8": "initEnsRigistrar()", +"bc014bb9": "earlyBackers()", +"bc019eed": "getAffiliate(address)", +"bc01b767": "freezeTransfersUntil(uint256)", +"bc02844c": "totalRemaining(uint256)", +"bc032967": "getRetailerByAddress(address,address)", +"bc03a31e": "superManager(address)", +"bc04056a": "LockedDayAdded(address,uint256,uint256)", +"bc0409bf": "addTokens(bytes32,uint256)", +"bc04562d": "Reclaimer(bytes32)", +"bc04cb0f": "FEED1()", +"bc04d77b": "datasetHub()", +"bc055227": "ownerOfPiranha(uint256)", +"bc05529b": "SaleDeadline()", +"bc058968": "updateThingData(bytes32[],bytes32[],uint88)", +"bc05d087": "registerProduct(uint256,string)", +"bc063e1a": "MAX_FEE()", +"bc064863": "getRequestorAddresses()", +"bc070e83": "minimumBuyIn()", +"bc084de9": "CrowdsaleAuthorizer(address,uint256,uint256,uint256,uint256,uint256)", +"bc08afd9": "WebOfTrustToken(address,uint256)", +"bc09b5ec": "fundPreIco()", +"bc0aaff2": "setzBytes32(bytes32)", +"bc0aca61": "setFeeAccount1(address)", +"bc0ae61e": "GazeBountyCoin()", +"bc0b45fa": "OSPN()", +"bc0c868c": "stocksOf(uint256)", +"bc0cd8d3": "BOOCOIN()", +"bc0e7adb": "testThrowsDisownNotOwner()", +"bc0eaf0a": "calcAmountAt(uint256,uint256)", +"bc0f920a": "AuthSuspend(bool)", +"bc0fb9a0": "predictWinner(uint256,uint256,uint256)", +"bc1013db": "m_totalWorkerPoolCount()", +"bc101ffe": "twentyPercentWithBonus()", +"bc104f24": "compareItemSlots(uint256,uint256)", +"bc10a667": "euroRaisedICO()", +"bc10ce84": "Test(int256)", +"bc1123fe": "isUInt256ValidIn64(uint256)", +"bc112fa3": "ALC_FUNDATION_ADDRESS()", +"bc11f72c": "DABcoin()", +"bc120fe7": "whitelisted(address,address)", +"bc126ba1": "totalCents()", +"bc1292a0": "BonusChange(uint256)", +"bc129a98": "accountedTokenSales()", +"bc12d19d": "maxCapTokenPresale()", +"bc12e3d7": "getAuction(uint64)", +"bc1351ba": "has_contract_started()", +"bc13e3a6": "controller2()", +"bc14016b": "removeAllOps()", +"bc148094": "PostAdded(address)", +"bc1558be": "MANHATTANPROXY3RDAVE()", +"bc15a2dd": "BEAXY()", +"bc15be93": "firstRoundCosmosDiscount()", +"bc15e5fe": "get_next_global_audit_document(bytes32)", +"bc16272d": "requestRegistration(bytes32)", +"bc168c90": "_setIPFSHash(bytes32,string)", +"bc174df3": "ProofOfCryptoNick()", +"bc17991d": "restoreBalances(address[60],uint256[60],uint256[60])", +"bc17a0b4": "PAST()", +"bc17bd7e": "SelfDestructible(address,address)", +"bc17e669": "exiteJugador(address)", +"bc186dc9": "unlockBalanceByIndex(uint256)", +"bc18f727": "galleryFive()", +"bc197c81": "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)", +"bc19bcbf": "submitBallotWithPk(bytes32,bytes32)", +"bc19bce5": "resolveName(string)", +"bc1a3810": "thelnwaonCoins()", +"bc1af71d": "_maxTokenSoldPreICO()", +"bc1c002c": "call_contract(address,address)", +"bc1c58d1": "contenthash(bytes32)", +"bc1c9888": "CoOwnerSet(address)", +"bc1e9ca3": "USD_CENT_PER_TOKEN()", +"bc1ea063": "LogContractOwnershipChangeInitiated(address)", +"bc1f71e1": "depositKncForFee(address,uint256)", +"bc2010cc": "feesC()", +"bc2017f3": "adjustPriceOfCountryPlayersAfterWin(uint256)", +"bc201a9d": "addSupport(address)", +"bc208057": "enter(uint256,uint256,uint256)", +"bc215cb6": "BBTokenBox()", +"bc21ce9d": "Aggregation()", +"bc22df1a": "buySpaceshipUpgrade(bytes5,uint16,uint8)", +"bc22f570": "poolsToCreate()", +"bc231983": "Temp()", +"bc24300e": "_borrowToken(address,uint256,uint256,address,address,bool,bool)", +"bc244c11": "shut(address,bytes32)", +"bc244fc9": "systemAddress(address)", +"bc24612c": "claimableAmount(address,bytes4)", +"bc246a36": "hashState(address,uint256,uint256,uint256)", +"bc24d886": "setSail(uint256,uint256,uint256,uint256,uint256,uint256)", +"bc25415c": "produce(uint64)", +"bc25a810": "lock(address,bytes32)", +"bc25e2fd": "postProof(string)", +"bc2622b4": "addKeyValue(string,string,string,uint256)", +"bc2674b1": "LogExchange(address,address,uint256)", +"bc27c7bb": "buyZoAssets(bytes32)", +"bc28cfe4": "getTicketSet(address,uint256,uint256)", +"bc28d878": "rejectProposal(uint256)", +"bc294a7c": "setCEOAddress(address)", +"bc2a4dd6": "doBalanceOf(address)", +"bc2b6913": "donateSkin(uint128[],address[],bool[],uint256[])", +"bc2bbad7": "getMyNotes(uint64,uint64)", +"bc2be1be": "getStartTime(uint256)", +"bc2c3a12": "ValidContractAdded(address,address,uint256)", +"bc2c5873": "reinvestPartial(uint256,bool)", +"bc2d10f1": "finishEthGet()", +"bc2d87f5": "Set(string,string,address)", +"bc2eb3f8": "removeNode(bytes32,bytes32)", +"bc2fe07b": "transferCardOwnership(address,uint8)", +"bc300ed3": "setBounty(address)", +"bc304e55": "serverTransfer(address,address,uint256)", +"bc308233": "autoreleaseTime()", +"bc30e4ac": "abcLotto()", +"bc30f3f8": "modifyPlatformAddr(address)", +"bc339f41": "logMarketCreated(bytes32,string,string,address,address,address,int256,int256,uint8)", +"bc33f8ef": "commonRebate()", +"bc345e11": "Updated(address,address,bytes,bool)", +"bc346090": "DigipayToken()", +"bc346c9c": "Attack(address)", +"bc34f204": "getP3DBalance()", +"bc356eea": "VEN()", +"bc3574d4": "adjustSupply(uint256)", +"bc3589bf": "TOKEN_FIRST_PRICE_RATE()", +"bc358af9": "listItem(uint256,uint256,uint8,address)", +"bc35c57f": "setMinAmount2Round(uint256)", +"bc3619dd": "onBlockClose(address)", +"bc364d7b": "tokenVestingAddress()", +"bc367377": "setTokenBurnApproveReset(address,address,address,address)", +"bc376bbe": "unlockFor(address,uint256)", +"bc378a73": "getProposalsLength()", +"bc37d7b8": "setVendingFee(uint256,uint256,uint256)", +"bc389b6d": "callWithdraw(uint256)", +"bc38a991": "testInsert()", +"bc39d42f": "sigDestinationTransferFrom()", +"bc3a72a5": "ETHHToken(uint256,string,string)", +"bc3abbdb": "etherPerMiner()", +"bc3b0d31": "STCB()", +"bc3bc814": "changeTolerance(bytes32,uint256)", +"bc3c2846": "requestMediator(uint256,uint256,address)", +"bc3d9390": "printBlockHash()", +"bc3dde2f": "xxx(address)", +"bc3f7bcb": "moleculartechnologySupply()", +"bc3f931f": "getVote(uint256,address)", +"bc4006f5": "erc721Metadata()", +"bc40487c": "Hashnodetestcoin()", +"bc4076e9": "accountsReceiveableHeld()", +"bc408ec4": "ElixirUSD()", +"bc40b52a": "startPreICO()", +"bc40bac6": "getCrydrViewAddress(string)", +"bc41f298": "changeControllerAccess(address,bool)", +"bc427bc8": "setFreezeForFounding(uint256,address,uint256)", +"bc428ee2": "getTimeOutAuthentication()", +"bc431846": "getBetPriceID(uint256)", +"bc4447ef": "getBlackListStatus(address,address)", +"bc447a6d": "numDragonTypes()", +"bc448782": "setCrowdsaleAddress(address,address)", +"bc44e79d": "getStageWinners(uint8,uint16,uint8)", +"bc44ea9a": "setBank(address,uint256)", +"bc451844": "BONUS_DURATION_1()", +"bc456c42": "changePaymentAddress(address,address)", +"bc45d789": "setConfigUint(int256,bytes32,uint256)", +"bc466ab2": "setNewEnd(uint256)", +"bc467a3e": "ownedContract()", +"bc48bc22": "erc20TokenCount()", +"bc48f4be": "getLand(int256,int256,address)", +"bc499814": "generatePrefixedPreimage(bytes32)", +"bc4998b9": "eth2MNT(string)", +"bc4a2030": "getCurrentRate(uint256,uint256,uint256,uint256)", +"bc4af295": "spawnAssetWithCreator(address,uint256,uint256,uint256,address)", +"bc4afa67": "MBTCToken(address,uint256)", +"bc4b3365": "addFunds(address,uint256)", +"bc4b346d": "confirmQuest()", +"bc4bbad1": "updateCostETH(uint256)", +"bc4c594b": "tokenManagerAddress()", +"bc4d76e5": "EPay()", +"bc4d9b50": "minerLockedAmount()", +"bc4e3105": "unlockAddressDuringITO(address,address)", +"bc4f65a3": "addCity(bytes32,uint256,uint256)", +"bc4fcc4a": "redeemedAt(bytes32)", +"bc4fe17e": "addressToUser(address,address)", +"bc50c09e": "playAnyTriples(uint256)", +"bc517131": "walletVersion()", +"bc5213b7": "_setCurrentRate(uint256)", +"bc523229": "ShopDex()", +"bc525652": "templates(uint256)", +"bc52b43b": "buyinAs(address)", +"bc537bae": "getMeOutOfHereStocks()", +"bc53a93d": "E4Token()", +"bc54a168": "buyTokensOnInvestorBehalfBatch(address[],uint256[])", +"bc54f56f": "getTemplateDetails()", +"bc562b9e": "loseSponsor(uint32)", +"bc56a240": "walletEtherPresale()", +"bc56e749": "acceptProposal(uint256,address)", +"bc57275b": "EthCnyPrice()", +"bc579103": "totalPayed()", +"bc57d5f5": "transferFrom(address,address,uint256,uint256,uint256,uint256)", +"bc597d9f": "getProposalVotesCount(uint256)", +"bc59afe6": "scanMany(address[],bytes1[])", +"bc59d45a": "raisedWei()", +"bc5b75f4": "EtherWorldCup()", +"bc5bf5bf": "releaseVestingTokens(address)", +"bc5c0c67": "setDowntime(uint256)", +"bc5cfd4f": "lastBonusNumber()", +"bc5d066e": "changeCompanyWallet(address,address)", +"bc5d0f65": "beginExecution()", +"bc5dc168": "balanceOfLocked2Y(address)", +"bc5dfd7d": "getCompte_23()", +"bc5e4bb4": "_hasSkillsCheck(uint256)", +"bc5ff5e1": "oraclize_query(string,string[4],uint256)", +"bc602ab7": "removeRandomClass(uint32)", +"bc607f7b": "funcFromC2()", +"bc60878e": "total_received_amount()", +"bc60a365": "removeAdminAccount(uint256,address)", +"bc60ac60": "StefyToken()", +"bc61394a": "fillOrder(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"bc6171df": "sendETHToMultiSig(uint256)", +"bc62c89a": "getTrainerEarn(address)", +"bc62d8d8": "parse(string)", +"bc632a21": "creationTime(address)", +"bc634abb": "getDocumentProposals()", +"bc636707": "_explorationTime(uint8,uint8,uint8)", +"bc63cc90": "starCountsForOwner(address)", +"bc64059b": "exchangeEtherForHavvensAtRate(uint256,uint256)", +"bc643df1": "getIncludes(uint256,uint256)", +"bc649f4c": "grantProvider(address)", +"bc6548fb": "etherVault()", +"bc655f54": "getEndDate1()", +"bc65c559": "preIcoInvestment(address,uint256,uint256)", +"bc65d6f6": "getSubscriberContentHashes()", +"bc65e9e1": "PenCoin()", +"bc6633f7": "setSaleState(uint16,bool)", +"bc677b46": "viewOwner()", +"bc67f832": "setMessageSender(address)", +"bc68118b": "setDeveryRegistryAddress(address)", +"bc68fad9": "burnBalance()", +"bc697319": "minimumGoal()", +"bc698641": "relayBalance()", +"bc69dc89": "BenefyCashToken(string,string,uint8,uint256)", +"bc6a49a3": "LaunchRocketEvent(address,uint32,int64,int64)", +"bc6ac112": "calculateRegionInitialSalePixelPrice(address[16],uint256)", +"bc6b12b3": "odem()", +"bc6c06e7": "GoodfieldRetail(uint256,string,string)", +"bc6c4d0f": "totalVotesForCandidate(uint256)", +"bc6d68ee": "updateSubscription(address,address,bool,uint256)", +"bc6d80fa": "getLenderAmountForIncreasePositionAtTime(bytes32,uint256,uint32)", +"bc6e6604": "TOKENS_PER_ETH()", +"bc6f1699": "clockpos()", +"bc6f712a": "Attestation(string,bool,address)", +"bc6f9021": "maxCapTokens()", +"bc6fd6d9": "MINIMAL_WEI()", +"bc70ad19": "IMEXX()", +"bc713f1d": "AddPoolCoOwner(string,address)", +"bc71b0a6": "DeCenterToken(address,address,address,uint256,uint256)", +"bc71cdcb": "BAInvestor()", +"bc7202d7": "_updateSalePrice(uint256,uint256,address)", +"bc734f0f": "nextSeason()", +"bc735d90": "setOperator(address,address,bool)", +"bc73a7e4": "_preValidatePurchase(address,uint256,uint256)", +"bc73c971": "TierBasicDividendAddress(address)", +"bc7411b2": "chargeBonuses()", +"bc745a0d": "nextBonusStepLimit()", +"bc752b61": "buyTicket(uint256[],uint256)", +"bc76dca0": "GoWalletProject()", +"bc77b919": "_mySymbol()", +"bc77f476": "EVCChain()", +"bc78ac81": "setPet(string)", +"bc7a6e35": "_startAuction(bytes32)", +"bc7b3f86": "NewHighestBid(address,uint256,string)", +"bc7b6d62": "setResolver(uint256,address)", +"bc7b801e": "adminUpdateWorldSnapshot()", +"bc7c322c": "ratePerWei()", +"bc7c55ed": "listing()", +"bc7c72d7": "getmessagefromdovie()", +"bc7d8cb4": "EURSToken(address)", +"bc7dbc0d": "yearlyFee()", +"bc7dce06": "setETHPrice(uint256)", +"bc7e8d3c": "isDeholdable()", +"bc7f25e4": "getReferrerOf(address)", +"bc7f3b50": "getDelegate()", +"bc7f58b1": "addAgreement(address,bytes32,uint32,uint32)", +"bc802c83": "userManagerContract()", +"bc80bee8": "setFeerate(uint256[3])", +"bc81572c": "createPromoScene(address,string,uint256[],uint256)", +"bc81786f": "addBonusToClient(address,address,uint256,string)", +"bc81c97b": "failingRefund(address,uint256)", +"bc81f147": "set_iconiq_arbits_per_ether(uint256)", +"bc81f2f5": "eraseMatch(uint256)", +"bc82f4d3": "verifyEmailAddress(address,string)", +"bc83a6fb": "ekkoBlock1(uint256,string,uint8,string)", +"bc83d001": "DividendFacial()", +"bc8409a4": "investWallet()", +"bc843509": "toByte()", +"bc84a7ba": "getsometokenn(address,uint256)", +"bc851718": "hashLast()", +"bc855006": "SantaiToken()", +"bc85c055": "queryEOSTokenBalance(address,address)", +"bc85e064": "merchantWallet()", +"bc86a23a": "addPrimaryRecord(string,string,string,string,string,string,string)", +"bc87103a": "removeFunder(address,address)", +"bc8711fd": "getWinnersLength()", +"bc87b70f": "oldestGen()", +"bc88adc4": "getBuyerBalancesOfCurrentAuctions(address[],address[],address)", +"bc899015": "CappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"bc8aa899": "we_token()", +"bc8b336d": "Ninecoin()", +"bc8bde64": "_creator()", +"bc8caa47": "resetDividendsCalculation()", +"bc8cb3f9": "destTokensReferals()", +"bc8d7a51": "gemsOfOwner(address)", +"bc8e1143": "processTransaction(bytes,uint256,address,bytes20)", +"bc8e9cde": "createGen0Horse(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"bc8f3bcb": "ZeroDollarHomePage()", +"bc8fbbf8": "nuke()", +"bc903cb8": "getProposalInfo(uint256)", +"bc912e1a": "WHITELIST_SALE_PRICE()", +"bc9147a4": "Foundation()", +"bc916a50": "hasOwner(uint16)", +"bc921d54": "setImageData(uint256,uint16,uint256[])", +"bc92bea5": "getRandomItems(address,string)", +"bc944d9e": "newLowestAsk(uint256,address)", +"bc950708": "totalRaisedInCents()", +"bc95f178": "make(bytes32,bytes32)", +"bc9748a1": "pong()", +"bc978361": "setrteamVaultAddr(address)", +"bc97a8ac": "JackpotPayout()", +"bc97fd06": "updateMultipleUsersReward(address[],uint256[])", +"bc98b8b0": "getTTTInfo(uint256)", +"bc9904ec": "updateProfile(address,bytes)", +"bc99249e": "buy(address,bool)", +"bc9968a2": "dataController()", +"bc99c8be": "takerAddressAt(uint256)", +"bc99cc37": "maxInvestors()", +"bc99d04c": "YRQ(uint256,string,string)", +"bc9abe67": "completedFlag(uint16)", +"bc9aed8b": "TokensIssued(address,uint256,uint256,uint256,bool,uint256)", +"bc9b717e": "TokenPurchase(address,address,uint256)", +"bc9c278d": "IcoContract(address,address,uint256,uint256,uint256,uint256)", +"bc9c58f6": "countOrigins()", +"bc9cbcc8": "setImbalanceStepFunction(address,int256[],int256[],int256[],int256[])", +"bc9cc1fb": "getAllbetByGtype(uint8)", +"bc9d8d6a": "getLastWallet()", +"bc9da641": "testToUint8()", +"bc9e080e": "setVerifierManager(address)", +"bc9e6b0f": "_getClientLastPaidRate(address)", +"bc9f31e3": "mock_throwIfNotRemoved(address,address)", +"bc9ff567": "InternetWealth(uint256)", +"bca19900": "tokenHardcapIssued()", +"bca19ca0": "TAAS_CONTRACT()", +"bca1f81c": "lockOpen()", +"bca2b941": "setTokenPrice(uint256,uint256,uint256)", +"bca2bbc0": "EtherModifierMoops()", +"bca36985": "ExposureSettled(bytes32,address,uint256)", +"bca38dab": "createGuess(uint256,string,string,string,uint8,bytes,uint256,uint256,uint256[],bytes32[])", +"bca3eb24": "setCAO(address)", +"bca50515": "transferFromPreSigned(bytes,address,address,uint256,uint256,uint256)", +"bca51abf": "_detectStage(uint256)", +"bca53fa0": "AIHTeamLockContract()", +"bca58da8": "change_block()", +"bca60cf5": "getAgreement()", +"bca63e50": "mintTotal()", +"bca65475": "jugar()", +"bca6e8ec": "sendToReceiver(address,address,uint256)", +"bca7093d": "withdrawalPeriod()", +"bca72b59": "revealVote(string,uint256,uint256)", +"bca76131": "GoCryptobotCore()", +"bca77cd6": "YUBToken()", +"bca7a9e2": "lockToken()", +"bca7bd85": "getAllLockerInfo()", +"bca7e96b": "needsFinalization()", +"bca86986": "testSetup()", +"bca915c7": "createPromoPlayer(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bca9745c": "display_time(bytes32)", +"bca9a5c5": "getEmployee(uint256)", +"bca9adef": "vestedAvailableAmount(address,address)", +"bca9e546": "testControlCreateWithParentParentNotInUse()", +"bcaa218e": "myFrontEndTokens()", +"bcaa85df": "lockAccounts(address,bool)", +"bcab7ad2": "TimeDecayingTokenBoundary(uint256,uint256,uint256,uint256,address)", +"bcabb0c8": "getAllProposalVoters(uint256)", +"bcabb54c": "modifyCommunityInfo(uint256,string,string,string,string)", +"bcabbfb1": "startDonation()", +"bcae19f4": "base58Address(bytes)", +"bcae9d43": "theProxy()", +"bcaedade": "STANDARD()", +"bcafe9a9": "setIncreaseRepAvailableForExtraBondPayouts(bool)", +"bcb02b74": "testFailPushWhenStopped()", +"bcb0a787": "_setSchellingRoundSupply(uint256)", +"bcb0c2d7": "removeStakeholder(address)", +"bcb0c7c0": "nomParticipant(uint256)", +"bcb0f541": "setEarlyBirdDuration(uint256)", +"bcb1e4f7": "GetSellingTokenUnitPrice()", +"bcb2f8c6": "externalFundProposal(uint256)", +"bcb32828": "emissionAddress()", +"bcb39621": "currentSeason()", +"bcb3b5d2": "getGamblesList(uint256)", +"bcb593f1": "subOnStage(address,uint256)", +"bcb60fa9": "blockTx(bool)", +"bcb638cb": "parseImpressions(uint64,bytes)", +"bcb7b0d4": "pauseICOs()", +"bcb7f880": "DTCC_ILOW_2()", +"bcb83450": "createMarriage()", +"bcb98ba2": "changeChampsName(uint256,string)", +"bcba53f4": "_createBlock(uint256,uint256,uint256,string,address)", +"bcba6939": "transferERC20Token(address,uint256)", +"bcbb64c4": "softCapInToken()", +"bcbc1585": "_payRoyalty()", +"bcbc758a": "SixStandardToken(uint256,string,uint8,string)", +"bcbc9175": "prefixedHash(bytes32)", +"bcbd3bcd": "_editPersonalNote(string,uint256)", +"bcbd82e5": "rateForPreICO()", +"bcbd9881": "setFriendsFingersRate(uint256)", +"bcbdbf40": "SaleResumed()", +"bcbea1ad": "transferCardTo(address,address)", +"bcbf5b90": "totalSupplyForPresale()", +"bcbf7229": "resetVoteCount(uint256)", +"bcbfe43c": "openSaleCompleted()", +"bcc13d1d": "contributionMin()", +"bcc1480a": "canTransferBalance(address)", +"bcc17ca0": "getvalues(uint256)", +"bcc221d0": "getBonusValue()", +"bcc30409": "processPurchase(address,uint8,uint256)", +"bcc37dd4": "approvedAccount(address)", +"bcc38018": "recycleReward(uint256)", +"bcc38d59": "proxies()", +"bcc3af24": "hasVotedOnConstitutionPoll(uint8,address)", +"bcc44a72": "restoreTokenOwnership()", +"bcc46e83": "addCollateral(uint256)", +"bcc4e4ab": "getVesting()", +"bcc4f0ed": "isValidBuy(uint256,uint256)", +"bcc5601b": "BaktFactory(address,bytes32,address)", +"bcc5dce5": "stash(uint256)", +"bcc6092a": "MyEtherBank()", +"bcc673bd": "GeneralToken(string,string,uint8)", +"bcc70902": "create(address,uint256,uint256[],uint256)", +"bcc74a3b": "isAdminAddressExist(address)", +"bcc7900c": "SystemTest()", +"bcc7db5a": "cleanupErrorGame(address,uint256,uint256)", +"bcc91d61": "sendEther(address[],uint256[])", +"bcc941b6": "totalWinners()", +"bcc94309": "calculator(uint8,uint256,uint256)", +"bcc9ed6f": "MAX_PAYOUT_FRAC_TOP()", +"bcca1fd3": "changeVotingRules(uint256,uint256,int256)", +"bccb6157": "RedemptionWalletUpdated(address)", +"bccb8fc0": "vestTokens(address,uint256,address,uint256,uint256,uint256,bool)", +"bccc85e6": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bccda810": "logicContractAddress()", +"bccdd9a6": "getValueFromCents(uint256)", +"bcce515d": "bulkMint(uint256[])", +"bccee504": "m_ETHPriceLifetime()", +"bccf0972": "egrToken()", +"bccf5aa4": "issueTokenAndTransfer(address)", +"bcd0b22a": "getSnapsLength()", +"bcd0ce28": "BitcoinUniversal()", +"bcd101a6": "getStartDates()", +"bcd2780b": "addValidContract(address)", +"bcd2feff": "biotorBiomassToken()", +"bcd396d1": "adminTrade(uint256[],address[],uint8[],bytes32[])", +"bcd3d8ca": "Collector(address,address,uint256)", +"bcd3ff89": "setGameSponsorInfo(address,uint256)", +"bcd4144b": "giveGreed()", +"bcd45a76": "HolderVacated(address)", +"bcd47934": "hasBiometric()", +"bcd5078c": "get_king_address()", +"bcd533ae": "newRefundProposal()", +"bcd5349f": "getCapacity(uint256)", +"bcd59261": "getDepositBlock()", +"bcd59b36": "secondsAfterStart()", +"bcd60f6c": "winningProposal(uint256)", +"bcd61c6a": "getGoodPrice(bytes32)", +"bcd789cc": "submitProposal(bytes32,string,address,address,uint256)", +"bcd85b6d": "getBackerStatus(address)", +"bcd88a61": "viewInvestorDividendPool()", +"bcd9cc60": "rejectCetification(address)", +"bcda2c0c": "_delete()", +"bcda601f": "Panicked(address)", +"bcdac66f": "Power()", +"bcdaea36": "setOpGas(uint256,uint256,uint256,uint256,uint256)", +"bcdb446b": "recoverEth()", +"bcdd6121": "increaseApproval(address,address,uint256)", +"bcdda53f": "TokenERC20(address,uint256,address)", +"bcddd64e": "CHECKPOINT_KEY()", +"bcde18f1": "fundingStart()", +"bcde87eb": "totalAmountOfTeatokensCreated()", +"bcdea6f9": "getStageMinimum(uint8)", +"bcdf266c": "EphronTestCoin()", +"bcdf43dc": "add_presale_arbits_sold(address,uint256)", +"bcdf569b": "finalize(address,address)", +"bcdfe0d5": "Hello()", +"bce0e87a": "payoutOnPurchase(address,uint256)", +"bce0fb22": "takeOwnershipWithIndex(uint256,uint256)", +"bce1cdc3": "getTotalEtherOfAllRounds()", +"bce24669": "removeGame(address)", +"bce2b9a3": "purchaseEgg()", +"bce2bb42": "setCoinTotalsContract(address)", +"bce2d16d": "koef()", +"bce32da4": "AndhraToken()", +"bce3cc67": "TokensReclaimed(uint256)", +"bce440d5": "TokensContractAddressSet(address,address)", +"bce49a90": "KKCToken(address)", +"bce4d041": "updateCancels(address,uint256)", +"bce5a209": "owners2tokens(address,uint256)", +"bce5fc53": "UIOCOIN(uint256,string,uint8,string)", +"bce6158d": "PTransfer(address,uint256)", +"bce643aa": "developer_new_symbol(string)", +"bce70868": "buildingIsPublic(uint256)", +"bce83d2a": "setWhitelist(address,address,string)", +"bce94649": "getRangeURI(uint256)", +"bce9ae3d": "NewDeal(uint256,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bce9ccb9": "GetCitySnapshot(address,uint256)", +"bcea363d": "killContract(address)", +"bcea7ea0": "chargingGas(uint256)", +"bcead63e": "lender()", +"bceaf1fd": "CLOUDForGas()", +"bcec1df3": "ROLE_DISTRIBUTOR()", +"bcecbc65": "getSendersEth(address)", +"bceceefe": "startCrowdsale0(address)", +"bcecf667": "usdToEth(uint256)", +"bced2c8c": "InteractingTokenA(uint256,uint256)", +"bced9cfd": "guessSeed(uint256)", +"bcedb86c": "payQuarterFinalWinner(uint256)", +"bcee2dd4": "getFeeCollected()", +"bcee6eb9": "validateProposedThroneRules(uint256,uint256,uint256,uint256)", +"bceeb243": "getUserSSCeducationDetails(string)", +"bceee05e": "isSuperuser(address)", +"bceeeb9a": "SearchIPR(string,address)", +"bcef393a": "balanceOfVault(uint256,address)", +"bcef84b1": "getMaxBuy(uint256,uint256)", +"bcefafab": "changeAccountAddressForSponsee(address)", +"bcf0dd8e": "marketTransfer(address,address,uint256)", +"bcf0e1ea": "TerrariumCoin()", +"bcf175c8": "oraclize_cbAddress()", +"bcf2e323": "sort(bool)", +"bcf49c72": "dewhitelistAddress(address,address)", +"bcf599f1": "toUnixtime(bytes32)", +"bcf610bc": "UnsetAgenda(string,address)", +"bcf6558c": "releaseMid()", +"bcf685ed": "setAgent(address)", +"bcf68f87": "lockCrowdSale()", +"bcf6b3cd": "changeBaseValue(uint256,uint256,uint256,uint256)", +"bcf711b2": "CBXToken()", +"bcf7b67e": "emitFeesClaimed(address,uint256)", +"bcf7bd0b": "requireEnoughExpForBreeding(uint256)", +"bcf83634": "basecost()", +"bcfa87d2": "getBounsEarnings(address)", +"bcfaa79d": "mintTokens(address)", +"bcfb0140": "getTokenOrderDataHash(uint256[],uint256,uint256,address,address)", +"bcfb4ea1": "Million()", +"bcfb9b61": "voteProposal(uint256,bool)", +"bcfbd445": "getTrader(uint256)", +"bcfc5078": "bountiesKey()", +"bcfcb03e": "allocateFounderTokens()", +"bcfde742": "setHardCapCHF(uint256)", +"bcfe070f": "batchCancel(address[],uint256[])", +"bcfe8fb4": "ArtTokenBurn()", +"bcfea3e4": "BLMCH()", +"bcff702b": "salePause()", +"bcfffab8": "shopStoreNextId()", +"bd002e1e": "startPoll(bytes,uint256,uint256,uint256)", +"bd00b0c2": "changeDedeAddress(address)", +"bd0100c9": "registerAddress(string,address,address)", +"bd01c7d5": "buyTicketToDraw(uint256,uint256,address)", +"bd025a79": "setDoge(address)", +"bd02942f": "allocateAdvisors(address,uint256)", +"bd02d0f5": "getUint(bytes32)", +"bd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", +"bd041c4d": "vote(address,bool)", +"bd042ca6": "GigsToken()", +"bd04923f": "values(uint256,uint256,uint256)", +"bd05c055": "timeBetweenGames()", +"bd05cb4d": "createContractItem(string)", +"bd06aa84": "WithdrawalContract()", +"bd06e777": "SCORE_REPORT_START_TIME()", +"bd075b84": "mint(address[])", +"bd079484": "getmortiesSinceLastHatch(address)", +"bd079a18": "YTPAY(uint256,string,string)", +"bd088724": "mintDone()", +"bd097e21": "fundContract()", +"bd09f117": "eidooWallet_()", +"bd0a0e85": "setLeaderboard(uint256,uint256)", +"bd0ae405": "voterReward(address,uint256)", +"bd0af85d": "pay(address,address)", +"bd0b65e4": "sub_id(string,uint256)", +"bd0c6307": "contrExit(uint256[])", +"bd0cac13": "updPool(uint8,uint256)", +"bd0cc4ee": "reverseSplitTokensAfterDistribution(uint256)", +"bd0e5d07": "deposit4()", +"bd0e6a0f": "startICO(bool)", +"bd0fda3d": "EntityCount()", +"bd102430": "blacklister()", +"bd102993": "CurrentStageUpdated(uint256)", +"bd119967": "add_rating(uint256,uint256)", +"bd11e933": "wingsTokenRewardsPercent()", +"bd129b92": "batchFillOrders(uint256[],bytes[])", +"bd12a007": "InterfaceId_ERC721Metadata()", +"bd131a78": "firstAuctionsExtendableDuration()", +"bd149031": "LongToken(uint256,string,string,uint256)", +"bd14fe3e": "hasOwnerAccess(address)", +"bd153c64": "emitted()", +"bd15e9ab": "hasMinBudget(address,uint256,uint256[])", +"bd1607ed": "HashRush(string,string,uint8,uint256)", +"bd16deaa": "ownerSetMaxBet(uint256)", +"bd16f1f3": "unfreezeByIndex(uint256)", +"bd1723e5": "blackBox()", +"bd17647f": "changeMilestone(uint8,uint256,uint256)", +"bd17a9d8": "blockAccess(address,bytes32)", +"bd17d63a": "TokenStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", +"bd183430": "ArtIs()", +"bd185612": "changeCertificateHash(address,bytes32,uint256)", +"bd187e3b": "changeParticipationFeeForRaz(uint256,uint256)", +"bd189666": "DetailedERC20Mock(string,string,uint8)", +"bd19036a": "investmentCapIcoPhaseTwoPounds()", +"bd1954c6": "ownerToBooty(address)", +"bd1a77a8": "sellNac(uint256,address,uint256)", +"bd1ad05c": "LogRecoveryChanged(address,address,address)", +"bd1b324c": "NewMyToken()", +"bd1b768b": "getApprovedAddressesOfList(address[],address)", +"bd1baedb": "SignumToken()", +"bd1bca06": "_getCrabData(uint256)", +"bd1d3432": "FOUNDER_ADDRESS1()", +"bd1de900": "totalOffer()", +"bd1edd81": "acceptDeposits(uint256[],uint256[],uint256[],uint256[])", +"bd1f4b52": "withdrawErc20(address,uint256)", +"bd1f7d52": "GetBoosterData()", +"bd1fac00": "TOKEN_COMMUNITY()", +"bd218493": "tokenLimitPerWallet()", +"bd21a864": "DigitalTradingCoin(address)", +"bd21fa47": "accountBalances()", +"bd22b1cb": "millionDollarTokenReward()", +"bd22d07f": "getTankByTokenId(uint256)", +"bd22f1cd": "testSubmitHash()", +"bd2302fc": "transferProposal()", +"bd23076f": "LamboToken()", +"bd23eb39": "tokenFallback()", +"bd242709": "initBob(uint256,uint256)", +"bd249ff0": "lockedBoardBonusAddress()", +"bd24b0d0": "ZHORA()", +"bd24de29": "blockDuelBegin()", +"bd24f08a": "isInBalanceLimit(address,uint256)", +"bd2560a0": "_inverseGetTokenAmount(address,uint256)", +"bd262a20": "setAuthority()", +"bd272880": "OnUpdateFee()", +"bd2850ab": "Freeze(address,address,uint256,uint256,string)", +"bd285ea8": "ReferedCrowdsale()", +"bd28d688": "TFOA(uint256,string,string)", +"bd28f504": "_computePet(uint256,uint256,uint256)", +"bd290d8b": "isValidLenth(string)", +"bd295f30": "GoodTronToken(address,address)", +"bd2b4ab7": "DigitalContentsToken()", +"bd2b6444": "adminUpdateWhiteList(address,address,bool)", +"bd2c0ead": "removeHolder(address,uint256)", +"bd2c245e": "privateIcoFinalized()", +"bd2cef65": "callback_ForPayout(bytes32,string,bytes)", +"bd2deecb": "create(bytes32,address,address[],address,bytes32)", +"bd2fffb3": "FlipNA()", +"bd3124e0": "addToBank()", +"bd320dde": "firstSaleDelivery(address,uint256)", +"bd322b77": "enableApi(address)", +"bd32aa44": "initiateSelfDestruct()", +"bd336584": "first_release(uint256)", +"bd338d85": "yearOneMultiplier()", +"bd33cc91": "requestRefundContributor()", +"bd345ed9": "setETH(string,uint256)", +"bd353ce2": "withrawDev()", +"bd355f43": "amountOfBags()", +"bd3566b7": "generateToken(address,uint256,string,string)", +"bd35d570": "GAS_TO_COMPLETE_EXECUTION()", +"bd366ddc": "reclaimEthicHubTeamFee()", +"bd36a5cd": "updateSaleStatus()", +"bd36c881": "bytesToAddress(bytes,bytes)", +"bd36cc93": "burnCancel(address,address)", +"bd37fec9": "Protean()", +"bd382b45": "getWindowAdjRatioForGameId(uint256,bool)", +"bd3a2ef4": "updateOdds(string,uint256)", +"bd3a5208": "getOraclizeRoundGasFee()", +"bd3a9d3c": "_createAuction(uint256,string,uint256)", +"bd3b5d07": "m_pending()", +"bd3bef41": "NewLeader(uint256,address,uint256,uint256)", +"bd3ccfc9": "getWeeklyTransactionVolumeSending()", +"bd3ce132": "transferManually(uint256,address)", +"bd3d0ecb": "newName(string,string)", +"bd3e19d4": "getCost()", +"bd3e7401": "setupSale(uint256,address)", +"bd3f0965": "AiraEtherFunds(string,string)", +"bd3f7817": "DaysToDestroy(address)", +"bd3fe562": "getRadarsIds()", +"bd4074f9": "tokensForCrowdSale()", +"bd431462": "BuyBSTtokens()", +"bd45115c": "PGPToken()", +"bd457de2": "KAPcoin(uint256,string,string)", +"bd478fcb": "readFromCart(address,uint256)", +"bd47c1a2": "getAccountListLenght()", +"bd47dd7a": "lockSeedInvestors()", +"bd484606": "techWallet()", +"bd48fa0e": "unpause_3()", +"bd499af3": "updateOptionsRegistryAddress(address)", +"bd49f00f": "ownersTokenList(address,uint256)", +"bd4a359d": "getLatestVersion(bytes32,bytes32)", +"bd4b6bbd": "transferScoupons(address,uint256)", +"bd4bb67e": "transferTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"bd4c0755": "Test68()", +"bd4cfadf": "getownerInfo(address)", +"bd4dc024": "landRegistry()", +"bd4e0b4d": "REFERRAL_TOKENS()", +"bd4ed6cc": "sumHardCapPreICO2()", +"bd5021af": "startRecovery(address)", +"bd5034ff": "Redeem(address,uint256,uint256,uint256)", +"bd50b3b4": "transferAndLock(address,uint256)", +"bd513bea": "getTreasure(bytes32)", +"bd51525e": "typeOf(address,uint256)", +"bd51654b": "showMyEtherBalance(address)", +"bd516e04": "addCombat(uint128,uint128,bytes32)", +"bd5196cf": "createGame(string,string,uint256,uint256,string,address,uint256,string,bytes32[2],bool,string)", +"bd51d5d0": "hasBalance(address,uint256)", +"bd51fa4c": "propose(string,string,string)", +"bd527527": "setLLV_edit_13(string)", +"bd52d81a": "_emitRoleRemoved(address,uint8)", +"bd5304e3": "ContributorBalanceChanged(address,uint256)", +"bd53cb96": "changeUnitsUserCanBuyLimit(uint256)", +"bd541ad0": "depositEscapedFunds()", +"bd545f53": "cancelAllOrders(uint256)", +"bd54bced": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"bd550824": "_setPayTo(address)", +"bd556252": "PRE_ICO_PERIOD()", +"bd58118f": "allocateAngelTokens(address,uint256)", +"bd5821ca": "_refund(address)", +"bd5821f1": "changeActualTokenValue(uint256)", +"bd583bff": "registerManager(address,address)", +"bd59434d": "setGame(uint8,address)", +"bd59fdde": "ITube()", +"bd5acbd6": "continueOrder(uint128,uint256)", +"bd5ae945": "NodeSwapCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", +"bd5b758d": "ObtainChip(uint32)", +"bd5b948d": "CCH_ILOW_1()", +"bd5c4e24": "TIMEOUT_DESTROY()", +"bd5c5420": "setExchangeRate(address,uint256)", +"bd5ca3a3": "createProxyImpl(address)", +"bd5d7b1d": "FEELCOIN()", +"bd5dec98": "withdraw(address[])", +"bd5e3a80": "GPPHARMTOKEN(uint256,uint256)", +"bd60527b": "getEmployerContracts(address,uint256[],uint256[])", +"bd611c73": "TOTAL_ICO_TOKENS()", +"bd61ff75": "cmpn(uint256,uint256)", +"bd6206ec": "initialDayWithdraw(uint256)", +"bd621042": "setUnownedPriceInExoTokens(uint256,uint32)", +"bd623d68": "encodeData(uint128,uint256,uint24,uint40,uint32)", +"bd625f1b": "setend(uint256)", +"bd62fff3": "Nines()", +"bd632e10": "batchInvest(address[],uint256)", +"bd633642": "MeissaChallengeToken()", +"bd639259": "getOwnerAngelCount(address)", +"bd63c338": "canRecover(uint256)", +"bd646356": "calculateCommissionToWithdraw(uint32)", +"bd6501b1": "isValidator(uint64,address)", +"bd656daf": "Fomo2D()", +"bd659784": "addToList(address)", +"bd65fc4c": "stb()", +"bd66528a": "claim(bytes32)", +"bd675c0e": "revealMove(uint256,uint8,string)", +"bd679ab2": "WithdrawGains()", +"bd679ad6": "burnDragons(uint256)", +"bd6812a4": "lastBlock_a0()", +"bd684865": "getAuthByPhone(string)", +"bd68817f": "clearRAMAll()", +"bd68eb34": "_spawnAxie(uint256,address)", +"bd6a9abb": "hasClearingPrice(address,bytes32)", +"bd6bbc31": "lastCollection()", +"bd6bf475": "canUpdateCompany(string,address)", +"bd6c4661": "fetchCancelledOrdersForPayer(address)", +"bd6c6756": "cardsCount()", +"bd6cac4f": "isPriorPack(address)", +"bd6d894d": "exchangeRateCurrent()", +"bd6de5a3": "dNextOffer()", +"bd6e578a": "getPreSaleFund()", +"bd6e5e03": "calcICO(uint256,uint256,uint256)", +"bd6edba5": "getUserBalances()", +"bd6fd20d": "getDeedTimestamp(string)", +"bd7084b2": "getNextNonce()", +"bd7095db": "GetCompetitionFunds(uint32)", +"bd70c53a": "LYFToken()", +"bd70fce9": "getApprenticeDistributedRandom(uint256)", +"bd7162b6": "setPixelPrice(uint16,uint16,uint256)", +"bd7173dd": "addLuckyblock(uint256)", +"bd719336": "canDistributeReservedTokens()", +"bd71e476": "ownerSetMinBetMining(uint256)", +"bd7243f6": "wipeBlacklistedAccount(address)", +"bd725f6e": "UBSToken()", +"bd728083": "ShowPurchased(uint256,address,address,uint256,uint256)", +"bd733dfb": "getUintsOwnerCount(address,address)", +"bd739a2f": "existsManagedContract(uint256,address)", +"bd73a9b4": "setTime4(address,uint256)", +"bd7427f8": "forceRefund()", +"bd7474ca": "upgradeDeploymentAdmins(address)", +"bd74c4e7": "setAttribute(address,address,bytes32,bytes,uint256)", +"bd74dc9d": "servicePaymentWithCharityPercentage(address,uint256)", +"bd763f59": "addPlayerData(uint256,uint256,string,uint256,uint64,uint64,uint64)", +"bd76540a": "buyIn(uint8,uint256)", +"bd76bf19": "addToBuyList(uint256,uint256)", +"bd778fde": "CoinNext()", +"bd77ac2c": "disburse(uint256)", +"bd780d0d": "getLastAttack(uint256,uint256)", +"bd788c88": "allocate(address,address,uint256,uint8)", +"bd792db3": "setIcoAddress(address)", +"bd797e32": "ChangeEmployeeState(address,uint8,uint8)", +"bd79a42a": "decimalToPreciseDecimal(uint256)", +"bd79d692": "depositEtherToVault(uint256)", +"bd7a9fda": "nameRegistry(address)", +"bd7afb29": "lastBlock_f17()", +"bd7b09e4": "totalCitizens()", +"bd7b7849": "addFace(string,string)", +"bd7be110": "SaveCoin()", +"bd7c13c6": "phase1MaxEtherCap()", +"bd7d2789": "checkWinner(uint256,uint8,bytes32)", +"bd7d3836": "pauseCrowdSale()", +"bd801ed4": "yishiliToken()", +"bd80d449": "newOK()", +"bd812166": "getSeasonInfo(uint32[99])", +"bd815a10": "RecyclerToken(uint256,string,string)", +"bd820688": "numOperators()", +"bd826f2b": "currentnumber()", +"bd837b2b": "approveToPullOutTokens(address,address,uint256)", +"bd83ea8d": "createMarriage(string,string,string,string,uint256)", +"bd84d8f6": "ProgressiveIndividualCappedCrowdsale(uint256,uint256)", +"bd853960": "assertEq14(bytes14,bytes14,bytes32)", +"bd85530c": "getAllSuccessInvestmentsCollected()", +"bd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", +"bd85948c": "startNewRound()", +"bd85aac5": "getAllShareholdersAndShares()", +"bd85b039": "totalSupply(uint256)", +"bd85e163": "FOURTH_USER_CUT()", +"bd865d29": "end_auction()", +"bd8697ab": "makeFailed(bool)", +"bd88a04f": "p3dWithdrawForAdmin(address,uint256)", +"bd88f603": "setImageData(address[16],uint256,uint16,uint256[])", +"bd897671": "KYRIOSToken()", +"bd89d806": "y_Title()", +"bd8a79d5": "getFollowingCandidate()", +"bd8aa780": "whitelist(address[])", +"bd8b452e": "eatUnicorns()", +"bd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", +"bd8c5643": "disableMoving()", +"bd8caabf": "setVirtualReserveBalance(uint256)", +"bd8cb6ca": "removePlugin(address,address)", +"bd8d34f5": "fundForTeam()", +"bd8d585e": "NCO()", +"bd8d5c7f": "EtherCartel()", +"bd8d5ce3": "amountReservedTokens()", +"bd8d86c4": "getlevel(uint256,uint256)", +"bd8d92c3": "requestDiplomaEntry(uint256,uint256)", +"bd8e0905": "weiToToken(uint256)", +"bd8e4725": "IxiniumFT()", +"bd8e4a51": "getCAORatio()", +"bd8e68c9": "PRICE_STAGE_FOUR()", +"bd8f61d8": "PerfectCoin()", +"bd8f997c": "getTotalQtyIpfsAddresses()", +"bd902dad": "approveSingleUser(address)", +"bd90df70": "targetContract()", +"bd916452": "claimReferrerBonus()", +"bd9215f4": "highest_bidder()", +"bd9335c0": "scheduleHangouts()", +"bd93f493": "LAUNCH_DATE()", +"bd945430": "OUTINGRESERVE()", +"bd94b005": "cancelSale(uint256)", +"bd94fafc": "PRESALE_CAP()", +"bd952178": "rejectAllocation(address)", +"bd95264c": "store(address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"bd957585": "declareCrowdsaleEnd()", +"bd95b1f2": "getdays()", +"bd95d909": "sellTokenPerEther()", +"bd95f042": "sendRemainsToOwner()", +"bd963442": "handleRefundRequest(address)", +"bd965677": "setRelayed(address)", +"bd968eed": "runeToWeiRatio()", +"bd96b348": "GeBitToken()", +"bd97ce3a": "changeReferrer(address)", +"bd987008": "setAccountIsNotFrozenForReturn(address,bool)", +"bd991fc5": "setGroupRight(string,string,bool)", +"bd9934f1": "freezeAddress(address,uint256)", +"bd993f9e": "COREthExchangeRate()", +"bd998dc8": "CloseSale()", +"bd9a0158": "setTimeConstants(uint256,uint256)", +"bd9a11fd": "finalstate()", +"bd9a548b": "getPrices()", +"bd9a5673": "oraclize_query(string,string[5])", +"bd9b49b7": "goalCompletedBlock()", +"bd9b6d86": "confirmOwner()", +"bd9b6e85": "tokenTranslate()", +"bd9c33bc": "_discount(uint8)", +"bd9c5688": "distributeFee(uint256,address)", +"bd9ca422": "AIChain(uint256,string,string)", +"bd9d6b37": "AddNewPresalePackage(uint16,uint256)", +"bd9d6d7f": "memeData(uint256)", +"bd9e6bfc": "makeBuyOffer(uint32)", +"bd9ead1f": "calculateClaimableReward(address,address)", +"bd9ebfbb": "marketSellOrdersNoThrow(uint256,bytes[])", +"bd9ec492": "maximumEther()", +"bd9ef436": "witnessOf(uint256)", +"bd9f8917": "finalizeEnableRefunds()", +"bd9fbe7b": "getDefaultAQL()", +"bda00866": "getAmountOfUnlockedTokens(address)", +"bda02782": "b(address)", +"bda1504b": "currentSize()", +"bda1f35e": "Fleuth()", +"bda2aa53": "testUnsyncedRate()", +"bda2e692": "DinosaurFarmerNew()", +"bda330f7": "refundingStarttime()", +"bda393d3": "totaldividends()", +"bda4cf80": "_pfind(address)", +"bda4fd89": "totalItem()", +"bda5c450": "calculateDividendTokens(uint256,uint256)", +"bda5ea03": "tkwins()", +"bda6642c": "changeStartingPricesLimits(uint256,uint256,uint256)", +"bda6c497": "borrowerReturnDate()", +"bda70d92": "destroyOldCoins(address,uint256,string)", +"bda77531": "changeAdultDragonStage(uint8)", +"bda7c3ee": "delegateTransfer(address,address,uint256,uint256)", +"bda81086": "jsonRead(string,string)", +"bda8bf45": "getWitnessWeiCost()", +"bda9a055": "getStepsCount(uint256)", +"bda9b45c": "whitelistMe(uint128,uint8,bytes32,bytes32)", +"bdaa80c1": "TronX()", +"bdaacabd": "buyXname()", +"bdaacbbe": "calculateAdminFee(uint256)", +"bdaae1e7": "createGame(uint256,uint256,uint256,uint256)", +"bdab5fb0": "fishLocation(bytes32)", +"bdace3de": "ChessClubLiveChessCoin()", +"bdad3db2": "_mintTo(address,uint8,uint256)", +"bdad4dc3": "allocate(address[],uint256[])", +"bdad8112": "hashArguments(address,uint40,uint40,uint128,uint256)", +"bdaeb0a0": "m_GameHidden()", +"bdaf2fae": "timeBought(uint256)", +"bdaf78fb": "refundUser(bytes32,bytes32)", +"bdafcda9": "logClassic(string,address)", +"bdb001a7": "mana()", +"bdb00fb9": "blackjack(uint256,uint256,address)", +"bdb084b2": "startCrowdsaleY1(address)", +"bdb10825": "MOOVIN(uint256,string,string)", +"bdb15209": "getNewPrice(uint256,uint256)", +"bdb27170": "setLockinManagerAddress(address)", +"bdb2e597": "TheBestToken(uint256,string,uint8,string)", +"bdb337d1": "gameOver()", +"bdb4dc6e": "getBrickSize()", +"bdb4f321": "balanceOfStocksAt()", +"bdb57edc": "TokenRedeem(address,uint256)", +"bdb5daf5": "OvisAddress()", +"bdb66236": "pushDividends()", +"bdb6bce8": "livingSupply()", +"bdb81203": "newGrant(address,address,uint256,uint256,uint256,uint256,bool)", +"bdb9c11f": "transferTokensFrom(address,address,uint256,uint256)", +"bdb9f28d": "setPresaleAddress(address)", +"bdba9255": "getCounterLimit()", +"bdbaae63": "mint(int256)", +"bdbb829d": "haltICO(address)", +"bdbbf429": "escrowHistory(address,uint256,uint256)", +"bdbbfcad": "stageAmount()", +"bdbcd001": "testSetValidProvider()", +"bdbcd192": "PowerEnabled(address,address,address,address)", +"bdbed722": "getAllTokenIds()", +"bdbf3a2c": "addBenefactor(uint256,address,string,string)", +"bdbf40a9": "Certify(address,uint256)", +"bdbf7d4c": "DELETE_NAME_ROLE()", +"bdc056c0": "BanknadToken()", +"bdc06de4": "SGTExchanger(address,address,address)", +"bdc0ba8e": "disableMaintenance()", +"bdc0f93c": "node_count(uint256)", +"bdc2866e": "MasterMindAlliance()", +"bdc2f1e8": "multivestBuy(address,address,uint8,bytes32,bytes32)", +"bdc31ce8": "Roto2coin()", +"bdc33928": "placeIndexToApproved(uint256)", +"bdc441b2": "getItemCount(uint256)", +"bdc4843a": "lockAddressAfterITO(address,address)", +"bdc6d9ab": "schedules(uint256)", +"bdc742fc": "updAcceptDonate(bool)", +"bdc74e23": "_processTokensAssgin(address,uint256)", +"bdc850d6": "ALasser()", +"bdc8e551": "isICOOver()", +"bdc95b32": "registerIdentity(string,string,string)", +"bdc963d8": "getUIntValue(bytes32)", +"bdc99152": "Token_1_Balance(address,address)", +"bdcab795": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool)", +"bdcafc55": "setSaleFee(uint256)", +"bdcbd9d1": "howMuchCanXContributeNow(address)", +"bdcbda5c": "AccountTransfersThawed(address,bool)", +"bdcc3439": "add_master(address)", +"bdcc809a": "setReleaseCompany(uint256,bool)", +"bdccd1af": "TokenHolder(uint256,address)", +"bdcd0262": "addRecord(bytes32,bytes32,bool)", +"bdcd21a1": "spawnRaceManual(uint256,uint256,bool)", +"bdcd3071": "LogBonusLOTRedemption(address,uint256,uint256)", +"bdcdc0bc": "updateTotalAvailable(uint256,uint256)", +"bdcdc258": "transferAllowed(address,address,address,uint256)", +"bdce46be": "PriceIncrease(string,uint256,address)", +"bdced258": "VendCrowdsale(uint256,uint256,uint256,address,uint256)", +"bdceed0b": "gvToken()", +"bdcefb62": "FRST_CRWDSALE_RATIO()", +"bdcf49b5": "changeContractStatus(address,bool)", +"bdcfbc37": "ANMInflationVesting()", +"bdd079fc": "addManyToWhitelist(address[],uint256[],uint256[])", +"bdd088e9": "littleMonster()", +"bdd1de62": "delWhitelists(address[])", +"bdd2ae24": "add(bytes,int256,uint256)", +"bdd2d286": "drawPlayer(address,address)", +"bdd30406": "successfulWithdraw()", +"bdd36562": "getBonusByAddressAndIndex(address,uint256)", +"bdd3abd9": "MjolnirWebsite()", +"bdd3fea0": "set_for_sale(uint256)", +"bdd41d4c": "ParagonCoinToken(address)", +"bdd50908": "approveWithdrawAddress()", +"bdd5be2f": "performBuy(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", +"bdd5f8da": "weiPerSgd()", +"bdd62b7b": "defective(bytes32,uint256)", +"bdd75267": "OPULENCE()", +"bdd7908b": "getFishParams(uint256,uint256,uint256,address)", +"bdd7c220": "CryptessaLiquidCoin()", +"bdd83add": "isAllocated12()", +"bdd8a366": "g1()", +"bdd8f051": "SmartOToken()", +"bdd9f4e7": "batchInnerTransfer(address[],address[],uint256[],uint256)", +"bddac117": "SetAmount(string,uint256)", +"bddae40e": "setCommittee(address)", +"bddb7c83": "setUserBlacklisted(address,bool)", +"bddba4eb": "grantRole(address,string)", +"bddbe244": "get_vice_pic(uint8)", +"bddcfead": "MakeWinner(address,uint256,uint256)", +"bddd0abd": "ExampleToken(uint256)", +"bddd1e7e": "WITHDRAWAL_END_TIME()", +"bddd3202": "_tryTriggerPayout(uint16,uint256)", +"bddd3a6b": "step7()", +"bddefc06": "withdrawed(address,uint256,string)", +"bddf66ff": "claimMigrate()", +"bde18839": "OHGVientiane()", +"bde1f585": "endCrowdsalel()", +"bde236a5": "checkClaimEntitlement()", +"bde27f4a": "forwardToHotWallet(uint256)", +"bde2ddf2": "_forwardFunds(address)", +"bde4e7c2": "tokenAddFee()", +"bde5c4a2": "_stealCardWithId(uint256)", +"bde60ac9": "donate(uint64,uint64)", +"bde66362": "_createNinja(uint256,uint256,uint256,uint256,address)", +"bde6a5a9": "burnPrice()", +"bde7ef86": "SynTokenCrowdsale()", +"bde7fa7d": "removeWhiteListed(uint256)", +"bde842ac": "getJobStatus(uint256,uint256)", +"bde86dd1": "tokenExpirationTime(uint256)", +"bde8a93e": "setBankroll(address)", +"bde8c509": "mintIdentityTokenDelegated(address,address,uint8,bytes32,bytes32)", +"bde8cd4d": "icoPool()", +"bde97455": "SCRefundVault()", +"bdeb130c": "doPayment(uint256,uint256,address)", +"bdeb45b8": "expireIfNecessary()", +"bdeb9fb4": "tokensAvailableForSale()", +"bdec5cce": "LotteryRoundCompleted(bytes32,uint8,bytes4,uint256)", +"bdeddb45": "setMyICOContract(address)", +"bdee21ff": "test_oneValidAssertFalse()", +"bdef744b": "PriceTwoDisable()", +"bdf1211e": "getPercentBurn()", +"bdf1e7cf": "getProviderReward(address,uint256)", +"bdf27b50": "setPOOL_edit_21(string)", +"bdf2a0f5": "fundDaoFor(uint256,uint256)", +"bdf3390e": "checkPwnData()", +"bdf384a8": "peekUpdated()", +"bdf391cc": "getPair(uint256)", +"bdf3c4ae": "stock()", +"bdf44067": "TCASHx()", +"bdf499e1": "DappHunt()", +"bdf4bb73": "DatToDtrcNumerator()", +"bdf4e7c6": "TaskRegister(address,address,address)", +"bdf5fba1": "COMMUNITY_POOL_ADDR()", +"bdf63c15": "RSPLT_F()", +"bdf692f4": "Propersix()", +"bdf6fb56": "requestMilestonePayment(uint256)", +"bdf70087": "getInvestor(bytes32,uint8)", +"bdf70de1": "SportXToken()", +"bdf7220f": "getFinalTeams()", +"bdf75a6a": "PRICE_RATE_FIRST()", +"bdf7716d": "getNodeHeight(bytes32)", +"bdf79c9d": "Adapter(address,address,address)", +"bdf7a8e6": "airdrop(uint256,address[])", +"bdf7f22f": "puremail()", +"bdf82b2a": "killFrost()", +"bdf86a66": "give(address)", +"bdf88d34": "stopTest()", +"bdf944b3": "depositAffiliate(uint256)", +"bdf99bd4": "AntPetTempleToken()", +"bdf9f646": "disApprove(address)", +"bdfaa337": "totalAlloc()", +"bdfb481d": "ABDEL_ALLOCATION()", +"bdfbab66": "getReferals(address)", +"bdfc0522": "investBounty(address,uint256)", +"bdfd582b": "FailClosedVault(address,address,uint256,uint256,address,uint256)", +"bdfd6257": "settingNameExist(string,address)", +"bdfdb519": "accept(string,uint256,uint16)", +"bdfdbf56": "read_u16_array()", +"bdfe7d47": "addresses(string)", +"bdff85cf": "ArrAccountIsNotFrozenForReturn(uint256)", +"bdff9fca": "checkTotalPaid()", +"bdffd282": "SIZE()", +"be0043bc": "removeMinterByIndex(uint256)", +"be007380": "DapdapNiubi()", +"be01bc87": "carTaxiCrowdsaleAddress()", +"be02bc3c": "internalTransfer(address,address,uint256,uint256)", +"be030bd8": "_setToken(address)", +"be038478": "createPermission(address,address,bytes32,address)", +"be03c602": "test_get()", +"be040fb0": "redeem()", +"be041614": "storedDataInBytes()", +"be048d04": "getOrganizationalCertAddressByID(string)", +"be0522e0": "inflation()", +"be063693": "intermediadorAprovaPagamento(bool)", +"be0638e4": "WealthShare()", +"be06ae25": "VirsymCoin()", +"be06e4e8": "inheritedConstant()", +"be08728f": "_setRemovalPrice(uint256)", +"be08d744": "TFcoin(uint256,string,string)", +"be099e7d": "endICOs()", +"be0ad4d1": "calculatePayoutVariables()", +"be0ca01b": "resetChallenge(uint256)", +"be0d4da4": "produceLottoNumber(uint256,uint256)", +"be0da251": "CANCELLED_FEE_FLAG()", +"be0e9d75": "removeWorker(address,address)", +"be0ecd32": "synthInitiatedExchange(address,bytes4,uint256,bytes4,address)", +"be0f0a50": "setPriceStep5(uint256)", +"be0f27cf": "rejectBountyTransfer(address)", +"be0f6bcb": "End10()", +"be104849": "AutorizeRefund()", +"be10862b": "partner()", +"be10c33d": "LogOperatorRem(address)", +"be116c3b": "removeProxy(address)", +"be11ce2f": "minEthContribution()", +"be1271c4": "setPrice(uint8)", +"be140381": "firstEntranceToSaleStateUNIX()", +"be14e5fc": "ETH530on420()", +"be154a18": "Partial8Transfer()", +"be160a92": "ERC20token(uint256,string,uint8,string)", +"be162060": "validCrowdsale()", +"be163d75": "validPurchase(uint256)", +"be165566": "setTokenBankrollAddress(uint8,address)", +"be169856": "getOriginByIndex(uint256)", +"be16dccd": "tomoDeposit()", +"be177c6a": "addJoinAirdropQuest(address)", +"be17a8b1": "doCustomAirdrop(address,address[],uint256[])", +"be17be5d": "total_minted()", +"be189035": "modifyIndividualCap(address,uint256)", +"be18a08b": "finishUpRound(int256,string)", +"be190032": "timespan()", +"be19d926": "Britishcoin()", +"be1abba5": "payoffAmount()", +"be1b7b4c": "FIRST_UNLOCK()", +"be1c766b": "getLength()", +"be1eefbf": "hotStore()", +"be1ef5c1": "approveWithdraw(address,address)", +"be1faaaf": "depositCoupon(address[2],uint256[7],uint8,bytes32[2])", +"be1ff08b": "sbtToken(address)", +"be20d298": "AxiePresale()", +"be20f9ac": "getSlotInfo(uint256)", +"be213c2d": "startBoughtExit(bytes32[],uint256,bytes32[])", +"be220272": "houseWithdraw()", +"be22f546": "daiToken()", +"be22f6aa": "LUYOCrowdsale()", +"be23d291": "requestPrint(address,uint256)", +"be241871": "isTxExist(bytes32)", +"be2430fe": "sendValues()", +"be25270f": "hash(string,uint256)", +"be25d0ce": "buyerCapHighEther()", +"be2671c9": "getUserBonusBalance(address)", +"be26733c": "Kill()", +"be268c3f": "batchSubmit(address[])", +"be275680": "submissionOpen(uint256)", +"be27b22c": "claim(bytes,bytes)", +"be2863ab": "addWalletsToWhitelist(address[])", +"be28f5db": "makeTokens()", +"be29184f": "mint(address,uint128)", +"be292552": "setMintAddress(address,address)", +"be297530": "Coinname()", +"be29783f": "commitVoteOnSpecialProposal(bytes32,bytes32)", +"be29d81f": "BRL_Omnidollar()", +"be2a2ff2": "getAccountBlockedFunds(address)", +"be2b1047": "hodlerTimeStart()", +"be2b5996": "designateAdmin(address,address)", +"be2d8b2d": "PowerToken()", +"be2dbe21": "Raffle()", +"be2dcd6c": "buyMFCoins(address,uint256)", +"be2eaad4": "expectedFunds(uint256,bool)", +"be2ef9f0": "secondWalletPercent()", +"be2f3059": "RcdGet()", +"be2fd146": "addMultiRequest(address,uint256,uint256,address)", +"be2ff4a9": "withdrawBank(uint256)", +"be30eda8": "transferAndLock(address,address,uint256)", +"be30f0a6": "setPurchaseLimits(uint256,uint256)", +"be317e7e": "ICOReserveLockUp()", +"be31b600": "CART()", +"be31ffed": "AOSToken()", +"be32cf8d": "mix()", +"be32eeba": "getFishIdByPos(uint256)", +"be3400b8": "CharityCashCoin()", +"be34dab3": "addBrick(string,string,uint256,string,bytes32[])", +"be354949": "setReservesForExchangeTokensWallet(address)", +"be35525d": "setPlayerAffID(uint256,uint256)", +"be357616": "withdrawFee(uint256)", +"be361f60": "retrieveChange()", +"be363e36": "sendMoneyBack()", +"be36e676": "Set(bytes32,bytes32)", +"be38e241": "activations()", +"be3912fa": "registerProduct(uint256,uint256,uint256,bytes,bytes)", +"be3945e4": "getFee(address,address,uint256)", +"be395cd5": "setPoliticsForJackpotParticipantsList(bool)", +"be3c33f4": "ZeroXCoin()", +"be3c8488": "previousStageIsFinalized()", +"be3c92a6": "setLimitTokenPurchase(uint256,uint256)", +"be3ca849": "getFunding(address,uint256)", +"be3cbb04": "iWantXJade(uint256)", +"be3daf55": "shouldLiquidate(bytes32,address,address,address,address,uint256,uint256,uint256,uint256)", +"be3dd131": "migrateFunds(address[])", +"be3dedae": "changeOwnership(string,uint256,uint256,address,address)", +"be3e33d5": "play(bytes1)", +"be3e41b1": "bonusFirstTwoDays()", +"be3eac25": "WithdrawEnabled()", +"be3ee935": "addClient(string,string,string,string,uint256,uint256,uint8,uint8)", +"be3f3471": "total_trades()", +"be3f34a1": "collectIncome(address)", +"be400cad": "KudosToken(string,string,string,uint8,address)", +"be4054b9": "commitReading(address,uint256,uint256,string)", +"be40887d": "sumDepth(uint128)", +"be408a5f": "winner_percentage()", +"be410448": "getERC20Id(uint256,address)", +"be427b1c": "setFinderFee(uint256)", +"be4299a6": "Maxsupply()", +"be4413fc": "Donator3()", +"be4474b4": "processFee(uint256)", +"be44e2d6": "getdeptreqscount()", +"be457017": "validateRefundSignature(uint8,bytes,address)", +"be45a26f": "variables()", +"be45af43": "InnovateToken()", +"be45cdb8": "crowdsaleTokenBalance()", +"be45d47e": "whitehatRecover()", +"be45fd62": "transfer(address,uint256,bytes)", +"be46203e": "Claim_TRAC_900()", +"be4663a1": "vestContract()", +"be46b94c": "ROLE_KNOWN_ORIGIN()", +"be46bffb": "verifyLottery(uint8,bytes32,bytes)", +"be46e9ca": "starting()", +"be46ee5f": "postNewAnswer(bytes32,bytes32)", +"be471027": "limitedSale()", +"be47dca1": "getNumberOfClients()", +"be482cc2": "getCurrentLotteryJoiners()", +"be48acc4": "MAX_PERSIANS()", +"be48d81e": "team_accounts(uint256)", +"be490a04": "Banned(address,bool)", +"be494573": "pureBalanceOf(address)", +"be4951e4": "setBroker(address,address)", +"be4a0910": "sendTokensSale(address,uint256)", +"be4a0b11": "preAssign(address)", +"be4a471c": "memoryFactor()", +"be4a6bad": "newOrder(address,uint256,uint256)", +"be4a7160": "closeDistribution(bool)", +"be4a90eb": "GoramCoin(uint256,string,uint8,string)", +"be4aba09": "tokenR6()", +"be4b1772": "withdrawToken(uint256,address)", +"be4bb31a": "WAmlingCoin()", +"be4c3a0c": "getContractOwner(string)", +"be4c45d5": "changeBuyingPrice(uint256)", +"be4c9e96": "TRONIC()", +"be4cbafd": "RichGoldToken()", +"be4cc281": "ManagerUpdate(address,address)", +"be4ce05c": "JULY()", +"be4d06cc": "setLLV_edit_16(string)", +"be4dbb5e": "getInvestorByValue(address)", +"be4dbe26": "getBlocklancerContractHolder()", +"be4ea54d": "setDeveloper(string,uint256)", +"be4eb0e9": "getUserFromId(uint256)", +"be4ebda3": "BOUNTY_SHARE()", +"be4f4fdf": "restrictedShare()", +"be50af2e": "tokenWithdraw(address,uint256)", +"be519862": "percDown(uint256)", +"be51bc0a": "FuncToken()", +"be523c23": "dungeonPreparationTime()", +"be5308ea": "BitplusToken(uint256,uint256)", +"be53874f": "emergencyFundReleased()", +"be53f968": "getPreSaleStart()", +"be54c568": "starting(uint256)", +"be54f214": "monthWithdraw()", +"be5638ff": "investor_contains(address)", +"be5648c3": "getResoType()", +"be56e037": "equipSingle(uint256)", +"be571e2e": "BigbomToken(uint256,uint256,address,address,address,address,address,address,address)", +"be571e8f": "getTokens(address,bytes32,uint256)", +"be572d52": "addItem(uint256,string)", +"be576364": "synthInitiatedFeePayment(address,bytes4,uint256)", +"be592488": "validateName(bytes)", +"be597faa": "_finishTge()", +"be59b4b1": "mostRecentCaller()", +"be5affd1": "address3a()", +"be5b9c74": "MultiSigWalletMock(address[],uint256)", +"be5babc2": "CryptoGems()", +"be5c2423": "failedVerificationSlashAmount()", +"be5df6cb": "findLover(address)", +"be5e72e0": "updateBasePrice(uint256,uint256,uint256,uint256)", +"be5ea335": "betERC20(address,bool,uint256)", +"be5eb443": "getScriptAction(bytes,uint256)", +"be5eeb2d": "getSociety(uint256)", +"be5f3d12": "allocateTokensForAdvisor()", +"be5f5a5b": "setSecretSignerByIndex(address,uint256)", +"be600276": "move(uint16)", +"be6002c2": "exec(address,bytes)", +"be6010f9": "calcHash(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256)", +"be60988e": "getLotteryByID(uint32)", +"be60989d": "addCard(string,uint8,string,string,string)", +"be60be76": "TokenMigration()", +"be60e771": "ZAMZA()", +"be616e83": "processAP()", +"be621764": "TradeRegister()", +"be62e98e": "MIN_PRICE_SALE()", +"be6307c8": "getDraw(uint256)", +"be6340b8": "mintedDirectly()", +"be63c8ca": "Retire()", +"be63f7b1": "TobkaCoin()", +"be640921": "regInitAccount(string,string,string)", +"be65d234": "Owner_Changed(address)", +"be65d27a": "vaultDeposit()", +"be66399f": "setOuverture_effective(uint256)", +"be676ac6": "transfer_balances(address[])", +"be67f4fd": "ActualShareManager()", +"be6872af": "totalTokensForSold()", +"be6896c3": "PropellerheadSupport()", +"be692cd3": "erase_data()", +"be6ad6d2": "ForceEther()", +"be6ae331": "get_session_state(address,uint32,uint32)", +"be6b6ba6": "getVestingStageAttributes(uint8)", +"be6c03ff": "stakedForProposal(address,address,bytes32,bytes32)", +"be6c554f": "firstCheckpointPrice()", +"be6c61f5": "unsetIdentity(address,address)", +"be6c87ad": "item(address,address,uint256,bool,bytes)", +"be6cef0a": "msgExaminer()", +"be6d055a": "proxy(address,bytes)", +"be6d91e6": "getBalanceOfSender()", +"be6fc181": "getFeeParams()", +"be71021f": "_crownFreeze(uint256)", +"be7118a7": "Dilution(address,uint256)", +"be71248a": "payWinner()", +"be737f72": "toSmallestShareUnit(uint256)", +"be7385e3": "getPlayerSpaceships(address)", +"be73983a": "reservePR()", +"be73d879": "joinBytes(bytes,bytes)", +"be74264d": "getFeePercent()", +"be74381f": "calculatePercents(address)", +"be743ccb": "MCCPP()", +"be754ba4": "buy20Price()", +"be760488": "assign(address,uint256)", +"be782f58": "setBreedTimeout(uint32)", +"be78632e": "nstDeposit()", +"be788e70": "getWithdrawableBalance()", +"be78bb7a": "transferCallGas()", +"be78e656": "buyXaddr()", +"be79ca77": "preSaleBonus3Amount()", +"be7a1540": "setlvlNfee(uint256)", +"be7a3164": "getNextAuditRequest()", +"be7aa7be": "SportStarToken()", +"be7b4858": "isOpenDistributionClosed()", +"be7c06ba": "iniOwner()", +"be7c29c1": "getNewDAOAddress(uint256)", +"be7ccd7e": "setupMiniGame(uint256,uint256)", +"be7cddf8": "TwoD()", +"be7e2848": "SkillChainContributions()", +"be7edebe": "setURIBase(string)", +"be7f5d23": "addressesReserving(uint256)", +"be7fdab1": "returnMoney(address)", +"be80073a": "SentTo(address,address)", +"be802f05": "getIcoTokensSold()", +"be80dcfd": "floatEconony()", +"be81d5bf": "CROWD_WEEK3_PERIOD()", +"be82f56b": "drainToken(address,address)", +"be82fffe": "allPolls()", +"be8360c5": "_maint_EndPromo()", +"be83a6b4": "ShitCloneslordReq()", +"be83b3c6": "LogFinishICO(address,address,address,address)", +"be83ff83": "vipRate()", +"be854def": "robPantryT(address,uint256)", +"be85bf3b": "PaymentWithdrawn(uint256,address,uint256)", +"be85cbcd": "makeLoan(address,uint256)", +"be85e4ef": "initEngineer()", +"be86d5a7": "makerTransferEther(address,uint256)", +"be86d996": "SINGLE_SALE_MULTIPLIER()", +"be87662b": "inviteProfit(address)", +"be87bcfc": "getReport(uint256,uint256)", +"be87c1ab": "returnBalance(address[2],uint256[7],uint8,bytes32[2])", +"be882d91": "setQuestionFee(address,uint256)", +"be888bd7": "devteamReserve()", +"be89900b": "PIOE()", +"be8a4737": "withdrawalT4T()", +"be8a550d": "ICO(address,address)", +"be8acd3f": "ordersLength()", +"be8b4f45": "HussyToken()", +"be8bd3df": "IlumXToken()", +"be8c1bcc": "batchDrop(address[],uint256[])", +"be8cd7b8": "participatePresaleNow()", +"be8db3cf": "deadlineBlockNumber()", +"be8dd49a": "getTokenUserCounter()", +"be8ecef3": "requestAddOwner(address,string)", +"be8eef8e": "hasOpened()", +"be8f316a": "testmsg()", +"be90be7f": "clearPoolsDone()", +"be9117cc": "curryChickenToken()", +"be912a0a": "getAyantDroitEconomique_Compte_7()", +"be913b6f": "ETH_FUND(address)", +"be916531": "test_OverSixtyPercent()", +"be91de53": "frozenBalanceOf(address)", +"be91ebe5": "tgrSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"be92ccfd": "setDisableBet(uint256)", +"be92f334": "astrSold()", +"be9413a7": "_cancelRole(address,address)", +"be95e01a": "payout(uint256,address)", +"be96031e": "playerinfo(address)", +"be96bb92": "_isFullOrNull(uint256,uint256)", +"be96faf7": "AWYManKeepChain()", +"be975f57": "CreateSTR(address,uint256)", +"be981ff4": "transferOwnershipForVanityURL(address)", +"be986420": "quarters()", +"be987c11": "PriceDecrease(string,uint256,address)", +"be988dbc": "BroCoin()", +"be999705": "addFunds(uint256)", +"be99a797": "setNewRegister(int256,string,string,uint256)", +"be99a980": "setAddress(bytes32,address,bool)", +"be99c50f": "purchaseInternal(uint256,address)", +"be99ed6f": "getCompte_41()", +"be9a6555": "start()", +"be9a9a28": "getRequestStatus(uint256,uint256)", +"be9aa8ac": "setSaleContracts(address,address,address)", +"be9afac7": "getDaysInMonth(uint256,uint256)", +"be9b076d": "Initialized(uint256)", +"be9b3282": "cookUpFee()", +"be9b3e8a": "reclaimEth(uint256)", +"be9ba97f": "maxContributionPerAddress()", +"be9c1add": "heldBalanceOf(address)", +"be9d89c5": "createTokenToMarket()", +"be9ddfed": "getSanTimeLastMove(uint256)", +"be9e1080": "_escrowPaymentEarning(address,bytes32,uint256,uint256,address,address,bool)", +"be9e3774": "deathData_f18()", +"be9e4697": "getDiscountTrancheDiscount(uint8)", +"be9f2dc0": "hourPotHighscore()", +"be9f7a20": "setInsertCar(bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", +"be9fa8dc": "Ethex(address,address,uint256,uint256,address,uint256)", +"bea046a1": "cashOutShip(uint32)", +"bea05440": "CurrentStatus(uint8)", +"bea10370": "hasRecentPrice(address)", +"bea124a6": "query(bytes,bytes,int256)", +"bea1dcf8": "taxCollector()", +"bea24735": "create_a_new_market(address,uint256,uint256,uint256)", +"bea28a30": "undoTransferOwner()", +"bea31228": "ObirumIssued()", +"bea3c8b3": "PardusNetwork()", +"bea40bad": "composeJingle(address,uint32[5],uint32[5],string,string,uint8[20])", +"bea412fa": "RedBUX()", +"bea433a9": "TriumHolding()", +"bea4ae88": "saleDue()", +"bea4c4ee": "setIBalance4(uint256,uint256,uint256)", +"bea50ae3": "setConfirmationPeriod(uint256)", +"bea51ec2": "SunnyX()", +"bea51f81": "addToKYCList(address)", +"bea5f9cd": "newPokemon(uint256,uint256,uint256)", +"bea677dd": "MCS()", +"bea69bb9": "Bal()", +"bea70578": "getPOOL_edit_16()", +"bea72c0a": "dsAdd(uint256,uint256)", +"bea76c3c": "disputeBlockNos(uint256)", +"bea7c13a": "gasPriceForCompensationAtHomeSide()", +"bea8bd27": "updateVettingTime(uint256)", +"bea948c8": "GetGift()", +"beaa4765": "setComplete(bool)", +"beab0638": "TokenAllocate(address,uint256)", +"beab3537": "isClaimed(bytes32,string)", +"beab9848": "SelfllerySaleFoundation(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint8)", +"beabacc8": "transfer(address,address,uint256)", +"beabb2c2": "proxyEnableRefunds()", +"beabdb7b": "isPermitted(bytes32)", +"beabeb3c": "getTheRandNum()", +"beac4bc3": "pauseUET()", +"beacf74f": "test_insert_findWithHintPrevDecreased()", +"bead0513": "leaveCommunity(address)", +"bead21a6": "lockAtTime()", +"bead45cf": "deposit_amount()", +"beadd203": "confirmWarranty(string,string,string)", +"beadf957": "cancelOperation(bytes32)", +"beae207f": "startAirdrop(uint256)", +"beaf56a6": "changeInsurer(address)", +"beafa2dc": "sacToken(uint256,string,string)", +"beb08ab9": "projectWallet()", +"beb0a416": "website()", +"beb1274d": "medianize(uint256[])", +"beb2b55d": "balanceHaben(address)", +"beb2bad6": "SHITP()", +"beb318a0": "updateSelfDropStageState(string,bool)", +"beb38b43": "set(bytes12,address)", +"beb3a38f": "capDay1()", +"beb40d58": "queryShare(address)", +"beb5f658": "compare(address,address)", +"beb6422f": "setClue1(string)", +"beb7de13": "updateCaps(uint256,uint256,uint256,uint256)", +"beb7fd4e": "_setMany(address,uint256,uint256[],uint256[],bool)", +"beb92f55": "setCaller(address)", +"beb9571c": "User_3()", +"beb96be5": "releaseFor(address,uint256)", +"beb9716d": "canMint()", +"beb9c90d": "wavesGW()", +"beb9d27e": "prepopulate(address)", +"beb9df86": "fwdToENS(bytes)", +"beba0b11": "ScallopCrowdsale(uint256,uint256,address,address)", +"beba285d": "privatePlacementAllocatingToken()", +"bebaa421": "setTrustAddress(address)", +"bebb7756": "RecievedDonation(address,uint256,string)", +"bebb7e60": "kscBurnFrom(address,uint256,string)", +"bebc3bfb": "requestWithdrawal(address,uint256,string)", +"bebc9d93": "buyCopyright(uint256,string,string)", +"bebcc045": "description(bytes32)", +"bebd284e": "registerCoinData2(address,uint256,address)", +"bebda5b9": "WhitelistUpdated(uint256,string,address)", +"bebdd5ca": "GenericCrowdsale(address,uint256,uint256,uint256)", +"bebe3c88": "advisorsPeriodLength()", +"bebe4f6d": "Standard_5()", +"bebeb73f": "createRoom(uint256,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bebf10d5": "WorkflowState()", +"bebf8498": "addCardToRegistry(address,bytes32,uint256)", +"bebfe207": "publishMessage(string)", +"bec0d799": "removeBook(uint256)", +"bec10cde": "increaseStake(uint256,uint256)", +"bec13af1": "doBuyerCancel(bytes16,address,address,uint256,uint16,uint128)", +"bec17f69": "isPreIco()", +"bec24a0d": "payJackpot1()", +"bec272da": "IotaGoldToken(address)", +"bec3150e": "EthereumBrilliant()", +"bec3e6f3": "overStage(uint8)", +"bec3fa17": "transferTokens(address,uint256)", +"bec507ce": "switchfun()", +"bec5e7b2": "playerDataRecord(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bec60bd2": "change_token_price(uint256)", +"bec6bc67": "adoptionRequests(bytes5)", +"bec6eb15": "buyGladiatorChest(uint256)", +"bec77cb1": "getOwnerCards(address)", +"bec7abfd": "getBounsEarningsInRound(address,uint256)", +"bec809ec": "tomoConvertRate()", +"bec81091": "executeEtherDeltaBuy(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", +"bec823c6": "BitcoinGreen()", +"beca159b": "registerUser(address,string,uint256,uint256,uint256)", +"beca40df": "PERC_TOKENS_TO_DEV()", +"beca4a8e": "TeleGrams()", +"beca7440": "right52(uint256)", +"becb1f35": "isForking()", +"becb44da": "token_sale_start_block()", +"beccdb77": "lastFeesCollected()", +"beccdd91": "updateSecPerBlock(uint256)", +"becd0580": "payEtherToWinner(uint256,address)", +"becd283f": "getPurchaseCount()", +"becd7027": "withdrawPurchasedTokens()", +"becda0ea": "tune(uint256)", +"bece1b22": "GameData(address,bytes32[],bytes32[],int256[])", +"bece2ea1": "tokenPriceIncremental()", +"bececd4e": "updateVerificationStatus(address,bool)", +"becee565": "GodeCoin(address,address)", +"becf0426": "registerAffiliate()", +"becf3add": "bonusPercent()", +"becf917f": "DistribFundsReceiverAddress()", +"becf9ce1": "removeFromAccountList(address)", +"becfbf69": "peekLastNonce()", +"bed03fdb": "winnerSelect(uint256)", +"bed09038": "updateMember(address,address,uint256)", +"bed0a8e5": "testRegisterSwarmEth()", +"bed0d1b9": "validTransfer(address,uint256)", +"bed18966": "getCompletedFlag(uint16,uint16)", +"bed1a924": "totalICOSupply()", +"bed1b8b9": "convertToInt(string)", +"bed1cfcd": "addToOwnership(address)", +"bed230d0": "burningMansCount()", +"bed25542": "onTokenReceived(address,uint256,bytes)", +"bed289c9": "CPolloToken()", +"bed315f8": "setRate(uint16)", +"bed33cae": "getCancelableAt(uint256)", +"bed34bba": "compareStrings(string,string)", +"bed36fee": "test_insert_null()", +"bed411a0": "CheckPrize(address)", +"bed43ffa": "CoinCrowdToken()", +"bed47ed8": "sId()", +"bed50ef8": "emitFeesWithdrawn(address,uint256)", +"bed531fd": "playersAmounts(uint256)", +"bed54a24": "ert()", +"bed6701f": "lastweek_winner2()", +"bed7437f": "setHydroTokenAddress(address)", +"bed866f6": "donations(bytes32)", +"bed9404f": "calculateAccountLiquidity(address)", +"bed9588b": "getUint256Max()", +"bed99850": "burnRate()", +"bed99dec": "replaceSecurityDepositRegistry(address)", +"bed9d712": "chargeJNT(address,address,uint256)", +"bed9d861": "withdrawStake()", +"beda363b": "dynamicReverse(uint256[])", +"beda86b9": "removeContributors(uint256[])", +"bedaa624": "setBZRxToken(address)", +"bedb86fb": "setPause(bool)", +"bedbb1a5": "saucePoolTotal()", +"bedc17ea": "testFailSetName()", +"bedc7796": "ownerCountOfCard(address,address)", +"bedca054": "Crowdsale(address,address,uint256)", +"bedcb4fc": "EthlanceContract(address)", +"bedcf003": "ownerBalance()", +"bedd12a5": "depository()", +"bedda13f": "setData_1(string)", +"bedddbc4": "darkcoin()", +"beddf557": "NOLLYCOIN(address)", +"bede2cac": "joinedCrowdsales(uint256)", +"bede4bd8": "lockupOf(uint256)", +"bedecc06": "seatsCount()", +"bedefffe": "getOwnerName(address)", +"bedf0f4a": "Stop()", +"bedf8e75": "Netyul(uint256,string,string)", +"bee03488": "getAllSSP()", +"bee066a8": "blocksUntilWin()", +"bee11672": "allowBundlingMultitoken(uint256)", +"bee1351e": "_getJYPCBonus()", +"bee14b3d": "getDevBalance()", +"bee16cae": "getCodeToken(uint256)", +"bee200cb": "underLimit(address,uint256)", +"bee2135e": "prefixedHash(string)", +"bee23c42": "contain(address[],address)", +"bee28042": "LVX()", +"bee2e134": "ethCollected()", +"bee36f37": "disableMiniSwapLock()", +"bee40aa4": "setCallType(uint256,uint256)", +"bee47606": "originalPricesBySpinner(uint256)", +"bee4bbeb": "unsetIsBuyByAtom(uint256)", +"bee4cc6b": "getBAB(bytes32,address)", +"bee588e9": "registerCert(bytes32,bytes,uint256)", +"bee5cdca": "getProjectById(uint256)", +"bee5ea6d": "PurgeCoin()", +"bee604ea": "addGame(address,string,uint256)", +"bee6348a": "presaleOpen()", +"bee712da": "buyZone(uint256)", +"bee96d9f": "updateGoldReferrer(address)", +"bee98dff": "get(string,int256)", +"bee9f6f3": "_getVATToCollect(uint256,uint256,address)", +"beea7bfb": "newSubdomain(string,string,string,address,address)", +"beea887c": "totalVCCoin()", +"beeae9a6": "Ather(uint256,string,string)", +"beeb0578": "processFundingFailedFinished()", +"beeb0a82": "SeaCoin()", +"beeb1b5d": "amountRaisedIsc()", +"beeb6d87": "withdrawCoin(bytes4,bytes32,uint256)", +"beebeff7": "tokenForAdvisor()", +"beec1caa": "issueCertificate(string,string,string)", +"beee5852": "opponentAmount()", +"beee9a34": "TIER4()", +"bef17ed0": "totalTeamContributorIds()", +"bef19a8b": "narcosByDistrict(uint8)", +"bef23131": "_createBurnLot(address,uint256)", +"bef28736": "UpgradedController(address)", +"bef2e0d8": "Variant()", +"bef35ccb": "requestClose(uint64)", +"bef39963": "releasedTokens()", +"bef3a083": "deadLine()", +"bef44f18": "transferChild(uint256,address,address,uint256)", +"bef4876b": "finished()", +"bef4f95d": "alarms(uint256)", +"bef5223f": "withdrawTokenToFounder()", +"bef55ef3": "readData()", +"bef566ef": "requestForMigration(address)", +"bef5bb45": "checkHash(address,string)", +"bef72fa2": "controllerLookupName()", +"bef7a2f0": "Fee()", +"bef7c258": "tierStartTime(uint256)", +"bef80387": "KYCCrowdsale(address)", +"bef8f7a5": "userAddressAdded(address)", +"bef90b94": "GetShipsByOwner(address)", +"bef973e4": "getUnclaimedFunds()", +"bef97c87": "transfersEnabled()", +"bef9e4ce": "getPreviousProfit(uint256)", +"befa1e2f": "totalBets()", +"befa7d5a": "addressFundDevelopers()", +"befaed75": "Sell_Offer(uint256,uint256,uint256)", +"befb6e56": "calCandidate(address)", +"befbae04": "completeIcoPart2()", +"befc3e2b": "getInvested()", +"befc5c32": "getOwnersItemList(address)", +"befcc34d": "updateSignedDealsCount(address,uint256)", +"befda2ff": "postIcoPhaseCountdown()", +"befe0e79": "infinity()", +"befe6299": "buySPIKE()", +"befed472": "SKToken(uint256,string,string)", +"beff6dbf": "getInsurancesCount(bytes32)", +"beff778e": "CoinBazarCap()", +"beff90dc": "isVersionContractOrLogic()", +"beffc416": "set_address2(address,address)", +"befff6af": "setUseDELEGATECALL(bool)", +"bf02dbcf": "randNums()", +"bf03e092": "join_address_pay(uint256,address)", +"bf03ef7d": "setDailyTokenLimit(uint256)", +"bf04820b": "totalLosses()", +"bf050334": "resolveDisputeBuyer(string,address)", +"bf052a8a": "countConfirmations(uint256)", +"bf059dc2": "_nonce1()", +"bf05cbe6": "hasFourStepWithdraw()", +"bf05d653": "endVesting(address)", +"bf06444b": "BrokenContract()", +"bf07aae7": "CQT(uint256,string,uint8,string)", +"bf082e38": "GICT()", +"bf084408": "submitProof(bytes32)", +"bf0872ef": "totalDiscount(uint256,uint256,string)", +"bf08778c": "seeAllNumbers()", +"bf09466f": "addEntryIn4WeekPeriods(address,uint256,bool,uint256)", +"bf0a07bd": "getHardCap()", +"bf0a53f5": "Notarize(bytes32)", +"bf0aaaf5": "OWN_ChangeState_locked(bool)", +"bf0af1ba": "checkProof(bytes,bytes32,bytes32)", +"bf0b0c52": "PaisaToken()", +"bf0b47ce": "getWinLoseAmountByBettingOwnerInGamblingParty(uint256,address)", +"bf0b88aa": "CanYaDao()", +"bf0bb225": "recoverAddressFromSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes32,bytes32,bytes)", +"bf0c4343": "dividends_by_type(address,bool)", +"bf0ce059": "isRootAuthority(address)", +"bf0d44d5": "testControlCreateWithParentsForeignNotInUse()", +"bf0d4f03": "EventLevelUp(uint32,uint32,uint32)", +"bf0d51be": "COINLAW()", +"bf0dc1c0": "IICToken(uint256,string,string)", +"bf0df0c1": "Start3()", +"bf0e4900": "randomWithNonce(uint256)", +"bf0e63d7": "FastGrowthToken()", +"bf0e9d61": "getProof(string,string)", +"bf0f5495": "volunteerWrite()", +"bf0f88ae": "Google()", +"bf101b32": "isTransferAuthorized(address,address)", +"bf1031d9": "proposeTemplate(address,address)", +"bf10bde1": "calculatePrize(address,uint256,uint256)", +"bf1152db": "preTransfer(address,address,uint256)", +"bf11f412": "buyCreditsAndSpendAndRecover(string,uint256,uint8,address,uint256,address)", +"bf120ae5": "freeze(address,bool)", +"bf12165e": "fillUpSlot(uint256,uint256)", +"bf125c49": "balanceIsZero(address,string)", +"bf12bf4f": "transformContract()", +"bf13633c": "setvalues(string,string,string,string,string,string)", +"bf137795": "canSpawnAs(uint32,int256,address)", +"bf1482fa": "getDonators()", +"bf14c119": "fund(bytes32)", +"bf14dcbf": "collectStakingBonusTokens()", +"bf152765": "userBalance()", +"bf15a645": "add_numbers(uint256)", +"bf15d827": "issueTDETokens(address,uint256)", +"bf15e42a": "CoinClaim(string,string,uint8)", +"bf15e64c": "setPlayerLimit(uint256)", +"bf15ea76": "transferrableTime()", +"bf16e9e8": "PccToken()", +"bf16ec99": "_computeCut(uint128)", +"bf176c34": "profitAddr()", +"bf1792b3": "toHex(uint256)", +"bf187478": "shift_left(uint64,uint256)", +"bf18dfbe": "PhantomToken()", +"bf190c8e": "GACToken()", +"bf1a2e52": "NucleusVisionTokensMinted(address,uint256)", +"bf1b31c2": "ThirdPartyPlatformAddr()", +"bf1b5f19": "withdrawRequest(int256,int256)", +"bf1bb055": "getCCH_edit_14()", +"bf1c30f5": "applicationNameTaken(string)", +"bf1c8016": "closedSaleWallet()", +"bf1cd416": "GrowthPool_Released()", +"bf1d4c66": "lastPurchaseTimestamp()", +"bf1dfb8a": "totalBattles()", +"bf1e799b": "getTimelock(address)", +"bf1e8497": "preCrowdMinContribution()", +"bf1fe420": "setGasPrice(uint256)", +"bf205ebc": "luckyNumber()", +"bf208e00": "setMinAcceptedAmountInPresale(uint256)", +"bf2095a4": "sellManually(address,uint256)", +"bf212637": "getMatronId(uint256)", +"bf21e45d": "changeCrowdSaleDates(uint8,uint256)", +"bf22c457": "getJob(uint256)", +"bf22d670": "boolCallWithArray(bool[4])", +"bf22f63d": "PasswordChallenge(bytes20,bytes32)", +"bf23aec2": "getplaypool()", +"bf23b411": "eosPRIVATE(uint256,uint256)", +"bf24a794": "getMostVotedOptions()", +"bf24aad0": "set_maxDETsPerReturnLessThan(uint256)", +"bf24de3d": "transferTo(address[])", +"bf251bc6": "foundersPercentOfTotal()", +"bf251e7f": "TOTAL_CROWDSALE_FUND()", +"bf254915": "set_Gas(uint256)", +"bf255974": "GoldRegistry(address)", +"bf25bf2e": "ethToTokenRest(uint256,uint256)", +"bf25c597": "VernamToken(uint256)", +"bf25c61d": "isOwnerItem(uint256,bytes32)", +"bf260037": "addressFutureInvest()", +"bf2699e7": "initValidator(address,address,address)", +"bf26bf58": "MartinKoTokenHolder()", +"bf277962": "beneficiary(bytes32,int256)", +"bf27f585": "totalFundsReceived()", +"bf27fa7c": "OCoin()", +"bf2805e3": "getVestingAllocation(address,uint256)", +"bf2860a4": "allocateProofTokens()", +"bf28d7ee": "_setOutcome(int256)", +"bf29a854": "aboutFactoryWorkers(uint256)", +"bf29b90a": "changeAssociation(address)", +"bf2b7524": "updatePoolAddressCapTier2(uint256)", +"bf2c1cc8": "setDailyDepositLimit(uint256)", +"bf2c3dad": "TransferSellAgentSiteReg(address,uint256)", +"bf2c7cbe": "rateT4T()", +"bf2d9e0b": "totalRevenue()", +"bf2e694f": "getPreviousRequest(address,address)", +"bf2e727b": "BONUS_LEVEL_1()", +"bf303d14": "convertCountryIndexToBytes(uint256[])", +"bf30d943": "changefirst24Percent(uint256)", +"bf31196f": "offerPunkForSaleToAddress(uint256,uint256,address)", +"bf314640": "newResolution(string,string)", +"bf31d573": "send_to_darshil()", +"bf31fc58": "VestingMasterContract(address,bool)", +"bf326254": "unlockedCustomer(address)", +"bf32a4b6": "withdrawOwner2(uint256)", +"bf32bf97": "FailGuyTax()", +"bf33589b": "createImageTest()", +"bf33be97": "balanceOfOrder()", +"bf34040d": "_depositEthereum(uint256)", +"bf347404": "engravedToken()", +"bf34ea7d": "makeBatchPayment(address[],uint256[])", +"bf354389": "Eplay()", +"bf35588b": "setDepositRate(uint256)", +"bf35af36": "vestingOwing()", +"bf35d5de": "FighterCreated(address,uint256,uint256)", +"bf35d96b": "Lock(uint256,address,address,uint256,uint256)", +"bf363b18": "transferFee(address,uint256)", +"bf368399": "leaderboard(uint256)", +"bf36c5b0": "offerPieceForSale(uint256)", +"bf36dd16": "icoStartTimestamp()", +"bf3724af": "f2(uint256)", +"bf375fb5": "signFork(uint256,bytes32)", +"bf37689c": "showArrayLength()", +"bf37b8f1": "devOwed()", +"bf381f93": "changeVestingAddress(address,address)", +"bf385c00": "hasSufficientPaymentInternal(address,uint256)", +"bf390355": "initCasino()", +"bf391545": "getBAUU(bytes32,address,uint256)", +"bf395d3d": "getShipProduct(uint32)", +"bf3986ba": "TrustlessTransactions_TransactionHeight()", +"bf39ba48": "PRIVATESALE_SUPPLY()", +"bf3b1101": "transferWalletOwnership(address)", +"bf3b397b": "tokensToEthereum_(uint256)", +"bf3b9e38": "a(uint256,uint256,uint256)", +"bf3bcc41": "isMod()", +"bf3c1120": "setBytesValue(string,bytes)", +"bf3c685f": "TOTAL_VALUE()", +"bf3d6141": "setParams(uint256[],uint8[],uint256[],uint256[])", +"bf3d9995": "officialWebsite()", +"bf3da865": "scannedGoldCaps()", +"bf3e394e": "withdrawInvestment()", +"bf3e4a79": "CoreTeamAndFoundersWallet()", +"bf3e67eb": "Sk8coin()", +"bf3eea48": "privateFundEnabled()", +"bf3f493c": "AdminAdded(address,address)", +"bf40b904": "getIssuedBlock(bytes32)", +"bf40fac1": "getAddress(string)", +"bf417b9f": "MINING_SUPPLY()", +"bf419975": "MBLToken()", +"bf41e16f": "TOTAL_SHARE()", +"bf428c17": "addTrustedContractAddress(address)", +"bf4386a0": "maxMembers()", +"bf439e80": "mintForEarlyInvestors(address[],uint256[])", +"bf43e91c": "withdrawAffVault(uint256)", +"bf43ed4d": "dateInit()", +"bf43fffb": "getFirstEncounterIdFromDay(uint256)", +"bf44aa70": "setSellCommission(uint256)", +"bf44eb03": "liquidityReserveWallet()", +"bf45db19": "ArtGallery()", +"bf463341": "GetInitData()", +"bf4637e5": "jackpotPercent()", +"bf464090": "getManagerCut(uint256,uint256)", +"bf466c06": "getIntValueByKey(string,string)", +"bf46ad1d": "approveSponsorableJob(address,uint256,address,address[])", +"bf46d3df": "canSwap(uint256,address)", +"bf474766": "joinGame(bytes32)", +"bf485e95": "getElementLocation(address)", +"bf487801": "getContractBalanceOf()", +"bf48d8b5": "setCurrenseeFoundationAddress(address)", +"bf49649b": "Galatasaray()", +"bf49d120": "addReview(string,uint256,address)", +"bf4a185b": "ClientOrderEvent(address,uint8,uint128)", +"bf4a5485": "extLockBot(uint256,uint16)", +"bf4a63f8": "withdrawSOC(uint256)", +"bf4a79e6": "TimeChain()", +"bf4aaf86": "DefaultActionDelayed()", +"bf4aeff2": "payoutPeriodEnd()", +"bf4b72e3": "metaTransferHash(address,uint256,uint256,uint256)", +"bf4b7ddd": "updateEnabledStatus(address,bool)", +"bf4c06a1": "changeLogOwner(address)", +"bf4d0abe": "NatoExchangeToken()", +"bf4d5af4": "failures(uint256)", +"bf4d89b5": "parseInt(string,uint256)", +"bf4e9615": "calcPriceFromFactor(uint256)", +"bf4f7cc0": "onlyStores()", +"bf503a6e": "crowdSalePercentage()", +"bf506b47": "registerTXS(uint256,address)", +"bf5103a1": "AUTH_CANMINT()", +"bf5124d0": "displayCard(uint256)", +"bf52439b": "BezantERC20Base(string)", +"bf530969": "setLabel(string)", +"bf53253b": "NATIVE_ASSET()", +"bf5371e3": "sendOnRequest()", +"bf538b68": "BOXToken()", +"bf538f6f": "mintingCompleted()", +"bf539711": "buyTokensPresale(address)", +"bf53dd15": "HBToken(uint256,string,string,uint256)", +"bf53e3ba": "harvestQuorumPercent()", +"bf53fa61": "PRIVATESALE_END_DATE()", +"bf547894": "transferBatch(address)", +"bf54bb60": "Bitscor()", +"bf552230": "_changeAttributes(uint256,uint256)", +"bf5522da": "bounties(bytes32)", +"bf55486b": "Tanya()", +"bf559d11": "startTournament()", +"bf566599": "changeMyName(string)", +"bf5671fd": "changeSecOwner(address)", +"bf568a4c": "endIcoByCap()", +"bf56ac81": "withdrawAffiliateBalance(address)", +"bf56cc08": "emergencyClawbackEther(uint256)", +"bf5772b9": "escape(uint32,uint32)", +"bf583903": "remainingTokens()", +"bf58aad8": "privatePreSale()", +"bf59cdff": "getH3Amount()", +"bf5a451b": "foreverBlockBattleAddressUpdate()", +"bf5a4dd3": "unlist(uint256)", +"bf5a79ee": "_getSchellingRoundDetails(uint256)", +"bf5abfe3": "SimpleConsent(string,address,address)", +"bf5b2e5d": "MIND_FOUNDATION_AMOUNT()", +"bf5b4c0c": "getPendingExploreData(address)", +"bf5b6016": "addContract(string,address)", +"bf5b6234": "fillSellOrder(address,address,uint256,uint256,uint256)", +"bf5bb323": "donationMap()", +"bf5c7f9b": "emissionProvidersCount()", +"bf5c844b": "oneweek()", +"bf5cf791": "AIRDROP_TOKENS_NUMS()", +"bf5e54d2": "updateTokenImprint(uint256,bytes32,int256)", +"bf5f0169": "deliverTeamTokens(address)", +"bf5f2b67": "tradingBalanceOf(address,address)", +"bf5f4edf": "addMonsterClassExtend(uint32,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", +"bf5f93e7": "twoHightestBidsDifference(string)", +"bf5fc2ee": "setStartsAt(uint256)", +"bf604019": "coinTradeStart()", +"bf606d14": "sendOneEtherToHome()", +"bf611c78": "OmniDex()", +"bf61b517": "FEE_SILO()", +"bf61e4b2": "AsuRaimu()", +"bf620a45": "lockAccount(address,uint256)", +"bf6211d9": "StripToken(address)", +"bf624273": "expiryBlock()", +"bf630bc8": "AliCoin()", +"bf6311c2": "_progressAdPrice(uint256)", +"bf632e67": "stateController()", +"bf6537a0": "crowdsaleBeneficiary()", +"bf654aac": "maxFeePercentage()", +"bf656791": "getMinContrib()", +"bf65d492": "FileName()", +"bf65dd32": "_checkAndCallApprove(address,uint256,bytes)", +"bf664892": "PARSECS_PER_ETHER_BASE()", +"bf66a5f9": "indSaleDeposit()", +"bf6713f6": "getGift(uint256)", +"bf671782": "handleReferrals(address,uint256,uint256)", +"bf686453": "PAN()", +"bf6888c8": "VESTED_PERCENT()", +"bf6896eb": "signAgreement(bytes32)", +"bf69d707": "punkBids()", +"bf6a10d7": "validateContributor(address,uint256,uint8,bytes32,bytes32)", +"bf6a1413": "hasSigned(address)", +"bf6ad320": "winnerPrice()", +"bf6ad32b": "getgbyte()", +"bf6afbaf": "FeePaid(address,address,uint256)", +"bf6b43a1": "upgradeCrystalMine()", +"bf6b6536": "SampleContractOther()", +"bf6c277a": "getTotalAccessorySeries()", +"bf6c4de9": "newPLCRWithToken(uint256,string,uint8,string)", +"bf6ca138": "issuedExternallyTokens()", +"bf6d91be": "addClient(address,uint256,uint256,uint256)", +"bf6d9abd": "unlockTransfer()", +"bf6deda4": "createLotto(bytes,bytes,bytes10,bytes10,bytes)", +"bf6eac2f": "stake(address,address,uint256)", +"bf6eb070": "MAX_ALLOWED_STAGE_2()", +"bf6ec777": "takeFee(uint256,address)", +"bf6edbd9": "mintFrozen(address,uint256)", +"bf6f7755": "transferBaseOwnership()", +"bf7035c3": "getSaleContractDepositEtherMin(address)", +"bf70a985": "PRESALE_ETH_IN_WEI_FUND_MAX()", +"bf70bd75": "stopPreIco_step2()", +"bf716708": "TOKEN_SUPPLY_SEED_PRESALE_LIMIT()", +"bf730997": "modifyGuess(uint256,uint256,uint256)", +"bf733e29": "oraclize_newRandomDSQuery(uint256,bytes,uint256)", +"bf735b13": "createSale(bytes32,uint256)", +"bf737c87": "JackpotWon(address,uint256)", +"bf7408de": "TAJ()", +"bf742d56": "canExecuteArbitraryCode()", +"bf748655": "isPaymentRegistered(bytes32)", +"bf748e47": "get_pre_kyc_iconiq_bonus_numerator(address)", +"bf7540d2": "getMoneyCount()", +"bf754558": "conversionsEnabled()", +"bf75553a": "sacarWEA()", +"bf75fdb5": "CreateShortAlias(bytes32)", +"bf77aa1f": "updateListing(uint256,bytes32,uint256)", +"bf77afdb": "TokensReserved(uint256)", +"bf7929a6": "refundeadline()", +"bf7abee6": "SetAuth(address)", +"bf7b69ee": "payDebt(address)", +"bf7ba12a": "LupeShares(address,address)", +"bf7c734e": "setMinSell(address,uint256)", +"bf7c775e": "RESERVED_RESERVE_UNLOCK_AT()", +"bf7e214f": "authority()", +"bf7e4026": "pizza_machine(uint256,uint256,uint256)", +"bf7e7f62": "MaxCouponsPaymentUSD()", +"bf7ea21c": "addWhitelistMember(address[],uint256[])", +"bf7f10fe": "isTransferShipment()", +"bf7f3cfe": "getVotesPerProposal()", +"bf7f8b89": "EthernetCash()", +"bf7ff81e": "bitwordsWithdrawlAddress()", +"bf815059": "updateUnidentifiedSaleLimit(uint256)", +"bf81765c": "adminAddressForComissions()", +"bf83735c": "changelp19(address)", +"bf83f2a2": "setAllocator(address)", +"bf843aed": "BuckyCoin()", +"bf8554ff": "fireOnOfferingChanged(uint256,bytes32,uint256[])", +"bf85cc27": "settleCfd(uint128)", +"bf85e628": "startVesting(uint256,uint256)", +"bf86d690": "isShutdown()", +"bf86e013": "createPromoBot(uint256,address)", +"bf872aee": "revokeConfirmation(uint256,bytes)", +"bf8783e0": "callAndGetReturn(address,bytes,uint256)", +"bf884cf5": "exitThisIcoForHalfOfTokenPrice()", +"bf8853c6": "getUserInterest(address)", +"bf8869b5": "GetBal()", +"bf88a6ff": "reward_contract()", +"bf88fc09": "revokeOwners(address)", +"bf892eaa": "removeTrustedContract(address)", +"bf89662d": "refundable()", +"bf8981c0": "left36(uint256)", +"bf8af541": "setLockRatio(uint256,uint256)", +"bf8b6466": "anOfferWeCantRefuse()", +"bf8b7ec2": "OpenGift()", +"bf8ba305": "getCodeStorage(uint256)", +"bf8bcee4": "setMaxLimit(uint256)", +"bf8bdac1": "setService(address)", +"bf8bf85e": "latestReleaseChecksum()", +"bf8c50ff": "scheduleTransaction()", +"bf8c6b63": "is_diagonal(int8)", +"bf8ce97f": "_take0xTrade(address,uint256,address[5][],uint256[6][],bytes)", +"bf8d5df8": "setTickerSymbol(string)", +"bf8dde4d": "calculatedReward()", +"bf8e0ea4": "logGive(address,string)", +"bf8eae55": "ChangeGasReuired(uint256)", +"bf8ecf9c": "authProposals()", +"bf8edd85": "setPriceInEth(uint256,uint256)", +"bf8f09cb": "cancelOrder(address,uint32)", +"bf8faa9c": "AMLToken(string,string,uint256,uint256,bool)", +"bf8fc670": "sendToAggregation(uint256)", +"bf9005ec": "Test6J()", +"bf907def": "buyGold(bytes32,string,string,string,string,string)", +"bf90c4e7": "PYRToEth()", +"bf913c5e": "getFamedStarByMass(uint256)", +"bf91cbb5": "mineIsBigger()", +"bf91ef18": "mergeBoostData(uint256)", +"bf9222d0": "DNT()", +"bf93a8be": "changeOwnership(address,address)", +"bf947852": "blockInvestor(address)", +"bf94de12": "createPoll(address,bytes32,uint256)", +"bf955038": "Judgement(uint256,uint256,uint256)", +"bf962302": "addIntTag(bytes32,int32)", +"bf96ae63": "signUp()", +"bf981995": "getCountryInfo(uint256)", +"bf983772": "BaseExchangeRateChanged(uint256)", +"bf98976e": "test_curatorDoesVeto()", +"bf989b6e": "setContracts(address,address,address,address)", +"bf98a50d": "GasReceipt(address)", +"bf99669d": "DevPromotionsMarketingSupply()", +"bf99cce1": "buyTokens(address,uint256,bytes32[])", +"bf9a5fde": "setConfiguration(uint256[],uint256[])", +"bf9a6958": "createVoterOnElection(uint256,address,address,string,string,string)", +"bf9ab00c": "getTeamPerfit(uint256)", +"bf9b8b38": "CrypviserToken(address)", +"bf9bbe71": "TRE()", +"bf9befb1": "totalStakes()", +"bf9c0d44": "RandomLedgerService()", +"bf9c3949": "createFaucet()", +"bf9c5001": "authors(address)", +"bf9d3d39": "setLineUpEnable(uint256)", +"bf9e6b0e": "TokenSwap(address,uint256)", +"bf9e7b75": "DeliveredBTC(address,uint256)", +"bf9f01f8": "buyMasterNodes(uint256,uint256)", +"bf9fc4e2": "balanceOfRobots(address)", +"bfa0b133": "salt()", +"bfa0fc93": "getVoteResult(uint256)", +"bfa190f3": "mTransfer(address,address,uint256)", +"bfa1bd62": "stakeAirdropWhileLocked(address,address,uint256,bytes)", +"bfa3c1e6": "MySale(uint256,uint256,uint256,uint256,uint256,uint256,address,bytes32,address,uint256)", +"bfa51df9": "isAirdropped(address)", +"bfa535c7": "apply(string,uint256)", +"bfa54b3f": "BLB()", +"bfa5f1f7": "getLandmark(uint256)", +"bfa814b5": "func()", +"bfa87e80": "tellPreviousContract(address)", +"bfa8ad36": "createProof(bytes32,bytes32)", +"bfaa1763": "FATA()", +"bfaad84b": "getLastStarOfAssetId(uint32)", +"bfab3db9": "withdrawContractBalance()", +"bfab41c9": "getTargetBlock()", +"bfab4f8b": "isMonsterAuction()", +"bfabd754": "increaseFrozen(address,uint256)", +"bfabe6c4": "ShakaliosToken()", +"bfac0046": "getPlayerWallet(uint256)", +"bfad16f4": "new_offer(uint256,uint256)", +"bfae2f0e": "addrAdmin()", +"bfae8867": "getLockTimestamp(string)", +"bfaec04e": "publish(string,bytes32)", +"bfafa8e6": "auditText(uint8,string)", +"bfafb91c": "changeMaxCoefPlayerForEmission(uint256)", +"bfafe92f": "_buyCallToOpen(uint256,uint256,uint256,uint256,address)", +"bfb01f72": "buyWithCustomerId(string)", +"bfb04c60": "proposeAcceptanceAsMember(uint256)", +"bfb05e0b": "declineFightApproval(uint256)", +"bfb08b4f": "MayanToken()", +"bfb0d82e": "__callback(bytes32,address[])", +"bfb1fcf5": "dmlwallet()", +"bfb2fad7": "totalDepositTokenAll()", +"bfb42682": "addPresaleOrder(address,uint256)", +"bfb460e9": "receiverSetAmountRequired(uint256)", +"bfb47e72": "CryptoSurprise()", +"bfb4d66f": "SudjuKoin()", +"bfb4ebcf": "Foo()", +"bfb51ac9": "startGame(uint256,bytes32)", +"bfb65777": "allContacts(address)", +"bfb68141": "disableTokensTransfer()", +"bfb77030": "BRM()", +"bfb7896d": "OQToken()", +"bfb790b4": "weeklyRate(uint256)", +"bfb7c227": "Developeo(uint256,string,string,address,address,address,address,address,bool)", +"bfb7d9f6": "stringandbytes()", +"bfb80547": "unfreezeAddress(address)", +"bfb8a319": "withdrawal(bytes32,address)", +"bfb8c63e": "confirmDeal(bytes16)", +"bfb909ce": "applyFeeToAddress(address,address)", +"bfb9f088": "addInvestorList(address[])", +"bfba1e8d": "gamePlayed()", +"bfba5dd6": "equal(address,address,string)", +"bfba9029": "hashBetMax()", +"bfbaa54d": "MithrilMace()", +"bfbad8b9": "preSaleEtherRaised()", +"bfbb6a23": "winEth(address,uint256)", +"bfbbd489": "setMonsterAuctionAddress(address)", +"bfbbfb1d": "getWinNumberBySlot(uint256,uint256)", +"bfbc37f7": "KOSHER()", +"bfbc793c": "computeNameFuzzyHash(string)", +"bfbc944c": "oldTokenReward()", +"bfbccfae": "currentCoinsCreated18Decimals()", +"bfbcf293": "setChampEC(address,address)", +"bfbd5074": "getVillain(uint256)", +"bfbf95cf": "participateICO(address,uint256)", +"bfbfa8e4": "kBalance()", +"bfc0a342": "owner_loadFunds()", +"bfc0cc5c": "sendEcosysSupplyToken(address,uint256)", +"bfc0e849": "startNextEra(bytes32,uint256,int256)", +"bfc1f48c": "isCapFree(address)", +"bfc2a675": "CreateCredo(address,uint256)", +"bfc2aa2a": "claimedSupply()", +"bfc303fa": "updatePublicData(uint256,string)", +"bfc38592": "cancelItemSale(uint256)", +"bfc3aef0": "setActiveStar(uint256)", +"bfc3cd2f": "testFailChargeMoreThanApproved()", +"bfc3d84b": "CT()", +"bfc47aa0": "tokensCrowdsale()", +"bfc4d11c": "subJobSponsorshipsBalance(address,uint256,uint256)", +"bfc54822": "bet(uint256,uint256,uint256)", +"bfc5624a": "newBadAPM(bytes32,bytes32,address,bool)", +"bfc6cdd1": "DukevsKansas()", +"bfc708a0": "reportMalicious(address)", +"bfc7952f": "outstandingPayouts()", +"bfc83af4": "setBountyTokenWallet(address)", +"bfc84528": "juicyBonus()", +"bfc8bfce": "executeTransaction(uint256,address,bytes,bytes)", +"bfc99f5b": "unsafeWriteAddress(uint256,address)", +"bfca33f7": "Court(address[],uint256[])", +"bfcabcbf": "changeFeeAmountThreshold(uint256)", +"bfcae563": "dateSaleEnded()", +"bfcc4ab2": "change_time_stamp(uint256,uint256)", +"bfcc8b6d": "ownerOfPlayer(uint256)", +"bfcdbae9": "preICOStartTime()", +"bfcdca48": "CastVote(bool)", +"bfce0b7f": "mainSaleEtherCap()", +"bfce477f": "forwardTransaction(uint256,bytes)", +"bfce8cbf": "redeemAdoptedAxies(address,uint256,uint256,uint256)", +"bfcf04cf": "updateId()", +"bfcf0baf": "testSliceToString()", +"bfcf63b0": "claimEther(address,uint256)", +"bfcf73e7": "blocksToLive()", +"bfd07c38": "LowJackpotHolder()", +"bfd0a553": "specWallet()", +"bfd1084f": "BitNauticWhitelist(uint256)", +"bfd13217": "ethReceivedPresaleOne()", +"bfd17831": "RECEIVER_ADDRESS()", +"bfd201f5": "setTransferFees(uint256,uint256,uint256)", +"bfd2385e": "allowanceOf(address)", +"bfd24821": "BonusCrowdsale(uint256,uint256)", +"bfd2ed01": "bountyPercent()", +"bfd3c5fa": "refundTransactionAfterExpiry(uint256)", +"bfd3fa6a": "becomeFairymaster()", +"bfd431d1": "RefundToBuyers()", +"bfd45540": "BlocHipo()", +"bfd4d720": "investors_number(uint256)", +"bfd4dce9": "WhatIsTheBestFoodInTheWorld()", +"bfd525b3": "stopTimeLength()", +"bfd61504": "_addControllerByPartition(bytes32,address)", +"bfd6ef3e": "explore(uint256,uint256,uint256)", +"bfd74534": "getRequest(address,address)", +"bfd7534f": "developer_address_for_D(address)", +"bfd75da4": "TrueUSD()", +"bfd812ec": "suspend(bool)", +"bfd8222a": "checkReward(uint256,uint256)", +"bfd8300d": "setBonusInterval(uint256)", +"bfd85808": "frozenTokens(address)", +"bfd8a06e": "getFinalWinningReportingToken()", +"bfd8fc93": "getOwnersLength(bytes32)", +"bfd90435": "addDataset(address,address)", +"bfd94c8c": "transferIsAllowed(address)", +"bfd9726d": "getMntTokenBalance(address)", +"bfda3b1a": "setSharedStorage(address)", +"bfdad9a4": "SignedContractVault(string)", +"bfdadc19": "change_price(uint256)", +"bfdb8796": "getPoolNameByID(uint256)", +"bfdc35f2": "onBalance()", +"bfdcc9a2": "numBuckets()", +"bfdcd480": "test_invalidProposalDuration()", +"bfdcdbf5": "subkey(address,uint256)", +"bfdd1a20": "getPOOL_edit_17()", +"bfde4f62": "withdrawAllEthToOwner()", +"bfdecf8c": "purchaseTokenInPresale()", +"bfdeddaa": "AllowedContributionCheck(uint256,uint8)", +"bfdf5e80": "communityPot_()", +"bfe0c27e": "getCurrencyAddress()", +"bfe10928": "distributor()", +"bfe1292a": "distributeLenderBot(address[],uint256,uint256)", +"bfe36f58": "HashCoinToken()", +"bfe370d9": "bytesToBytes32(bytes)", +"bfe38df5": "getTotalBet()", +"bfe3a664": "createCrowdsale(address,uint256[8])", +"bfe3c39d": "JYKToken()", +"bfe3e03a": "midGradeHold()", +"bfe44c4b": "getUserValue(bytes20,uint256)", +"bfe484de": "judge(uint256,bool,bytes32)", +"bfe4ed8e": "Razoom(address)", +"bfe53e5c": "holdersWithdrowsOf(address)", +"bfe597fe": "genesisBlockCount()", +"bfe689cf": "lockedValuesAndTime(address,uint256,uint256,uint256)", +"bfe6b1ac": "acceptOffer(uint16,uint256)", +"bfe6c0c7": "viewa1(address)", +"bfe70251": "_checkCertificate(bytes,uint256,bytes4)", +"bfe713e3": "truecoin()", +"bfe777c3": "addPrMemberById(uint256,address,address)", +"bfe7e2eb": "BCBCYCoin()", +"bfe86bbe": "publicGetElement(uint256,uint256,uint256)", +"bfe8936c": "getAssetDetailsURI(uint256)", +"bfe8c107": "betOnDozen(bool,bool,bool)", +"bfe9b7df": "pubkeys1()", +"bfe9e7f4": "pack(address,bytes)", +"bfe9f204": "dividendCycleTime()", +"bfea267a": "getBalanceToMint(address)", +"bfea8790": "enableScheduler()", +"bfead4b9": "maxWithoutWhitelistPerUser()", +"bfeb049c": "IndexOfCurrentDraw()", +"bfebb947": "unblacklist(bytes32)", +"bfec83d6": "RoleAdded(address,string)", +"bfec8b01": "insertSection(bytes32)", +"bfee3569": "setTokenControlInfo(address,uint256,uint256,uint256)", +"bfef9627": "set(bytes4,uint8,uint8)", +"bff04d6f": "testPostpone()", +"bff05aef": "adminRefundTokens(address,uint256,uint256)", +"bff0fbb8": "calculateMeat(uint256)", +"bff10815": "deleteOffer(uint16)", +"bff179c4": "setJadeCoinZero(address)", +"bff18c78": "deployFactory()", +"bff1f9e1": "totalUsers()", +"bff2c413": "ChangeFoundersWalletAddress(uint256,address)", +"bff35618": "setTransferLock(bool)", +"bff41e36": "WEI_RAISED_CAP()", +"bff44f0d": "confirmAddressChange(address,address)", +"bff49180": "updateVendorValid(uint256,bool)", +"bff547c0": "setOrganizationShareSymbol(string)", +"bff5e021": "PumpToken()", +"bff5fb64": "appNickname()", +"bff5fccd": "myWishes()", +"bff65668": "isPresaleHolder(address)", +"bff7df7c": "refundDeadLine()", +"bff7e179": "multiPurchase(uint32[],uint8[],uint8[],uint8[],string)", +"bff8314f": "SetMaxPosXblock(uint256)", +"bff8a36d": "decreaseReserve(uint256)", +"bff974e8": "getContentReplies(uint256)", +"bff99c6c": "tokenWallet()", +"bff9e842": "getSamplesForOwner(address)", +"bffa02d5": "sendP3D(address,uint256)", +"bffa4e41": "getMintAmountApproval(address,address)", +"bffa55d5": "claimRefund(address)", +"bffa9258": "assetCount(address)", +"bffb10de": "add_creature(address,string)", +"bffbe61c": "node(address)", +"bffc235a": "mintedList(uint256)", +"bffcd758": "nasdaqo(uint256,string,string)", +"bffd952a": "transferMaintainer(address)", +"bffdf3f1": "Test4()", +"bffeadd6": "move(uint8,uint256,bytes,uint8,bytes32,bytes32)", +"bffee609": "setSkills(address,uint256,uint256,uint256)", +"bfff23f2": "CaptainKitty()", +"bfff374d": "DepositReturned(uint256,address)", +"bfffe670": "window1StartTime()", +"c00007b0": "getReward(address)", +"c0001786": "ownerBurn(address,uint256)", +"c0012077": "TeamContract()", +"c002c4d6": "getTicket()", +"c003598a": "XEN()", +"c0036137": "ownerProfitPercent()", +"c003b082": "getMyPlayerID()", +"c003f540": "sco(uint256,address,uint256)", +"c00465ab": "CrowdsaleToken(uint256,uint8,address,bool,address)", +"c004a877": "shiftSalePurchase()", +"c0056b7b": "updateAccount(uint8,bytes32,bool,bytes32)", +"c005c686": "validateCompoundContract(uint256)", +"c005dc7b": "hon2backup()", +"c00710fa": "userContractsPred(address,uint256[],uint256[],uint256)", +"c0075772": "setPromoTokenController(address)", +"c0086b19": "BCP(uint256,string,uint8,string)", +"c00941d9": "Dominator()", +"c009b451": "setEventActive(bool,string)", +"c00ab18c": "_toSgaAmount(uint256)", +"c00ade41": "receiveTransferOwnership()", +"c00b060c": "getArrBoolField3()", +"c00c176c": "GoGO()", +"c00c2ceb": "isRedeemAllowed()", +"c00c4e9e": "batch(address[],uint256[])", +"c00ca383": "getByOwner(address,uint256)", +"c00d5305": "oraclize_setNetwork()", +"c00d8f3d": "processLotteryReward()", +"c00daefe": "etherFund(bytes32,string)", +"c00e4306": "getCurrentTokenAmountForOneEth()", +"c00ea6ef": "Polaris()", +"c0112678": "arcToken()", +"c0116c3c": "doAirdrop(address[],uint256[])", +"c011cd1c": "getClixToken()", +"c012e179": "mintDepositAccount()", +"c0130adb": "addadjacencies(uint16[],uint16[],uint16[])", +"c0140fd1": "bid(bytes32,address,uint256)", +"c014464e": "checkFeePeriodRollover()", +"c014875f": "mint(bytes32,address,uint256,bytes)", +"c01569f9": "buyPiece()", +"c01685d4": "FTKTToken()", +"c01706dd": "getContentByRank(address,uint256,uint256)", +"c0171112": "timestamp(uint64)", +"c018d0e6": "getFeeAmount(int256,int256)", +"c018fe0d": "sub_sessione(string,uint256)", +"c01a1c5f": "totalSellPrice(uint256,uint256)", +"c01a8c84": "confirmTransaction(uint256)", +"c01ae5d3": "drop(address[],uint256[])", +"c01b3aa4": "STARTING_SNAKE()", +"c01bc982": "isRestricted(address)", +"c01c1ca3": "claimRemaining()", +"c01ca43f": "getPlayerState(address)", +"c01d1c60": "getTokenExchangeRate()", +"c01d8280": "get_balance(address,string)", +"c01de45c": "storeBet(uint256,uint256,uint256)", +"c01e38e6": "addPlayer(address,uint256,uint256)", +"c01e3985": "StupidityToken()", +"c01e8b6a": "Zigit()", +"c01f475f": "_setClearingPrice(bytes32,uint256)", +"c01f56d0": "OfferToDisciple(uint256,uint256)", +"c01f9e37": "proposalDeadline(uint256)", +"c0204bab": "EasyOsmiumCrowdsale()", +"c020df48": "updateGas(uint256)", +"c022215c": "getTotalDeposit()", +"c0227bd3": "_toTaxes(uint256)", +"c022abbe": "GetAuction(uint32)", +"c022ef43": "getTimeLeftToNextLocalBountyCollect(uint16)", +"c023a231": "BitSTDView(address)", +"c02515a9": "maxTokenForHold()", +"c0263163": "ATT(address)", +"c026327a": "removeBankToken(uint256)", +"c02738da": "generateTargetTokens(address,uint256,uint256)", +"c02898a0": "potatoOwner()", +"c028c674": "right82(uint256)", +"c028df06": "offer()", +"c028e3c9": "cordX(uint256)", +"c0297bc8": "DreamX()", +"c02aaea1": "totalTokensForSaleDuringPreICO()", +"c02b04d8": "rescueLostProperty(uint256,address)", +"c02b5395": "NAMO()", +"c02bf40c": "FundsDeposited(address,uint256,uint256,uint256,uint256)", +"c02c89fe": "PreicoClose()", +"c02cc957": "firstDigit(string)", +"c02d0140": "buyCard(uint8,string,string,string)", +"c02d1e02": "a_document(uint256)", +"c02e580e": "roundEnd()", +"c02f081a": "shiftBits(bytes,int256)", +"c02fd500": "E4Lava()", +"c0309697": "challengeContract(address)", +"c030d8b8": "setCardContract(address)", +"c030f3e2": "increaseSaleLimit(uint256)", +"c031a180": "getBytes(bytes32)", +"c031a78b": "maxMedalsBurned()", +"c0324c77": "setParams(uint256,uint256)", +"c032846b": "getContractStatus()", +"c0329a3e": "startAirdropFrom(address,address[],uint256)", +"c032dc30": "execute(uint256,address)", +"c0338a0c": "transferTileFromOwner(uint16[],address)", +"c0343b09": "setDisputeInterface(address)", +"c035340c": "withdraw_1()", +"c035e492": "onholdBalances(address)", +"c0362523": "setUpgradedOwner(address,address,address)", +"c036c100": "NextGenHype()", +"c03785c3": "MyRefundVault(address)", +"c03795ba": "departmentrequest(address,string,bool)", +"c037ae58": "VESTED_AMOUNT_TOTAL()", +"c037d9ce": "getElementsFromIndex(uint32,uint32)", +"c038a38e": "totals()", +"c038f541": "setProperty(string,string,uint256,int256,string)", +"c03951f7": "FaceWalletToken()", +"c0395bb5": "isCurrentOrPastAdmin(address)", +"c039b88c": "_makeSpecialId(address,address,bytes32)", +"c039bd87": "withdrawTokenFromPkt(address,uint256)", +"c039d6db": "PutEther()", +"c039daf6": "tokenCreationMin()", +"c03a4018": "getGuessInfo(string)", +"c03aac7a": "setSellDividendPercentageFee(uint8)", +"c03b70d5": "getTurnover(address)", +"c03ba041": "BNC(address)", +"c03bdbae": "setRdFee(uint256,uint256)", +"c03c3003": "increment(int256)", +"c03c72aa": "isBattleDecider()", +"c03ce1d8": "BondingManager(address)", +"c03ce796": "crowdSaleStage()", +"c03cf137": "getMyLocker()", +"c03d00f3": "a_viewCoinSupplyAndFunding(bool)", +"c03d1b1d": "verifyCertWithID(bytes32,bytes32,bytes32,address)", +"c03d848c": "convertEthToCents(uint256)", +"c03e2cbf": "Whitelisted(address,bool,uint256,uint256)", +"c03e382f": "calculateShare()", +"c040188f": "preSaleLockEndTime()", +"c0406226": "run()", +"c040e6b8": "stage()", +"c040ebec": "getUserSize()", +"c04123fb": "checkProposalCode(uint256,address,uint256,uint256,bytes)", +"c041652d": "getVendorApplicationStatusTrackCount(string)", +"c04198f3": "getEndDate(string)", +"c042575f": "ETHmultiplier()", +"c0435e29": "setDefaultFriendsFingersRate(uint256)", +"c043c0d9": "changeMaximumPlayers(uint32)", +"c043df8c": "verifyWithdrawSignature(address,bytes)", +"c04484fd": "resetInternal(uint256)", +"c045732c": "addPreIcoMembers(address[])", +"c0459899": "approvePreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"c04605b8": "softEndDate()", +"c0462ec3": "withdrawAllTokensToExchange(address,address,uint256)", +"c0463711": "lastUpdate()", +"c0463810": "PalmToken()", +"c0465f3a": "dateSisterWins()", +"c046c691": "setMoveProductToWhom(address,uint256,address)", +"c046d9b5": "borrow(address,uint256,address,bytes)", +"c0472889": "currentIDnumber()", +"c047c1d8": "transactionsStatusUpdate(bool)", +"c0489af5": "foundersTimelock1()", +"c048dfb8": "postpone(uint256)", +"c0496e57": "setNotarisationFee(uint256)", +"c049813a": "preIcoStagePeriod(uint256)", +"c04a5414": "developmentWallet()", +"c04aa9b8": "rpow(uint128,uint64)", +"c04bb954": "rejectionRatio()", +"c04c5947": "getGames()", +"c04c68eb": "changeAllowTransferState()", +"c04c8e43": "SNSCOIN()", +"c04ca3f5": "_removeAgent(address)", +"c04cc86b": "collecttaxes(uint256)", +"c04d90d0": "ownerByIndex(uint256)", +"c04de318": "slashAddressLikeUsername(string)", +"c04ecdb8": "promoTokenController()", +"c04f01fc": "power(uint256,uint256)", +"c04fcad8": "INITIAL_TOTAL_SUPPLY()", +"c0506782": "_createArtwork(string,string,uint32,address)", +"c050f6dc": "admitUser(address)", +"c0517c5a": "XferMoneyMarketing()", +"c051f75f": "setSchemaRegistry(address)", +"c05283ff": "logQuery(bytes32,address)", +"c0533b5d": "appVersionList(bytes32,address)", +"c05374f7": "AirChn()", +"c05390f6": "PRIZE()", +"c053dc6b": "EtherBags()", +"c053ebf5": "setProviderClosed(uint256,uint256)", +"c054e050": "extractProofOfExclusion(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"c0567656": "subtractFee(uint256)", +"c0576b73": "monsters(uint256)", +"c057b40d": "SpainvsRussia()", +"c057eca7": "minStakingTime()", +"c0584e68": "ContributorsSupply()", +"c0597a55": "freedWosPoolForThirdStage()", +"c05a30b9": "_processFunds(uint256,uint256)", +"c05a8e81": "getPosition(uint8[176],uint256)", +"c05b7cf6": "setCreationProfit(uint256)", +"c05b8066": "setCompte_18(string)", +"c05ce08f": "calculatePoints(uint256,uint256)", +"c05d1f0e": "PRESALE_JOINTTOKENS()", +"c05dd5d2": "MatchAborted(uint256)", +"c05e5776": "giveRightToVote(address,address)", +"c05f486e": "DEV_SUPPLY()", +"c060ac53": "bytes20ToString(bytes20)", +"c0615f09": "CPGPEREGRINE_EXTRACTION_BASE()", +"c0619c70": "setPrimaryManager(address)", +"c06265d3": "createContractState(string)", +"c062dc5f": "releaseAmount()", +"c062ef86": "_random_empty_location()", +"c062f578": "updateStage()", +"c0631b12": "moneyWallet()", +"c0645011": "getPastRound(uint256)", +"c06474e0": "removeShare(address,uint256)", +"c06508dc": "QBTCoin(address)", +"c0652cf9": "EdelRostenCoin()", +"c0659108": "beneficiariesLength()", +"c065ecc2": "queryChildLength()", +"c065fcf1": "RESERVED_PARTNERS_SIDE()", +"c066bd1a": "addItem(uint256,uint256,address)", +"c06702dd": "changeStage()", +"c0670d2c": "calculateDistributionPeriods()", +"c0675b78": "addBuyTokensRequest(string,uint256)", +"c0677fb6": "SetIdentifiedContract(address,address)", +"c0689e2d": "newCrowdFundingCampaign(address,uint256)", +"c068eae0": "player_collect_winnings(uint256)", +"c06a22f4": "dollarsForEther()", +"c06b0d21": "BondToken(address,address,address)", +"c06b5281": "buyXnameQR(address,bytes32,uint256)", +"c06c4474": "get_burned(bytes32)", +"c06c66ca": "bountyFund()", +"c06d1272": "startPreIco()", +"c06d1490": "oppositeAnnouncement(uint256)", +"c06d7744": "getAllSignersCount()", +"c06dabf8": "_escrowHostPaymentEarning(address,bytes32,uint256,uint256,address,bool,uint256)", +"c06f146b": "setNumInvalidMarkets(uint256)", +"c06f1bc4": "updateVoterTimes(address,uint256)", +"c06f4c1d": "newCampaign(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,address)", +"c06f8340": "cancelAuctionByAdmin(uint256)", +"c06fad06": "items()", +"c06fff76": "proposePauseChange(bool)", +"c0702d9c": "_mint()", +"c07097a6": "coindropsLockEndingAt()", +"c0715d1d": "assertSafe(bool)", +"c071f3bf": "deliverPurchasedTokens()", +"c072422d": "buyTokens(bytes32,uint256,uint8,bytes32,bytes32)", +"c072497a": "claimPlotMultipleWithData(uint256[],uint256,string,string,string,string)", +"c072dcf3": "ExampleContract()", +"c073af55": "GetJackpotMin()", +"c07401f0": "addToPool()", +"c0740c16": "numElementsOdd()", +"c0741c53": "test_assetRegistration()", +"c0743044": "partAllocations(uint256)", +"c074313f": "pricePerStake()", +"c074a27e": "proposeTransaction(address,uint256,bytes,string)", +"c074fe80": "SetPrecioUnidadPase(uint256)", +"c07653af": "Gavinhereum(uint256,string,string)", +"c076c847": "NorthPoleAF()", +"c0774df3": "canForward(address,bytes)", +"c0777545": "balanceAD()", +"c077b0f9": "getARSchedule()", +"c079418b": "setTranchWei(uint256[])", +"c0797ae1": "stakerIncomeShare(bytes32)", +"c079c318": "adjustFee(uint256)", +"c07a1f0c": "changeHouseFeeAddress(address)", +"c07a32c4": "dateIsLegal(uint256)", +"c07a5537": "MintableTokenWithMinters()", +"c07b18ca": "PullPaymentMock()", +"c07b2586": "SAFCOIN(uint256,string,uint8,string)", +"c07bcfdc": "updateLimitPerDay(bytes32,uint256)", +"c07dc59c": "withdrawPot(string)", +"c07dc890": "selfRegisterDINs(uint256)", +"c07dd842": "buyFactor()", +"c07e3391": "setMonethaAddress(address,bool)", +"c07f47d4": "latestVersion()", +"c07f773a": "totalTokensAllocated()", +"c080f08f": "complexReturnType(int256,string,bool,string)", +"c0819961": "Invest()", +"c081efc1": "hasSellerBeenAccepted(address)", +"c083455f": "ownerPutInterest(uint256)", +"c0835106": "isVotable(bytes32)", +"c08415b1": "ORDER_PLACE(address,address,bool,uint256,uint256,uint256)", +"c0845e8a": "catchMonster(address,uint32,string)", +"c0846957": "EtherDeltaTokenBalance(address)", +"c0851e09": "getEarlyPurchase(uint256)", +"c0864877": "tokensForOwner()", +"c088003d": "getMinThresholdOfVoters(uint256)", +"c0887991": "getOperation(address)", +"c088df47": "SECRET_BONUS_FACTOR()", +"c08a86b1": "endGame(bool,uint256)", +"c08cc02d": "getProposalCount()", +"c08d1fe5": "timeLimit()", +"c08dd1dc": "IOU(string,string,uint8)", +"c08e05aa": "icoRuleCancel(uint256)", +"c08eea14": "cloneAccount(uint256)", +"c0905fef": "getStackholders()", +"c090b4df": "createRecord(string,string)", +"c090b86d": "createKingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"c090da1e": "Zhennong(address)", +"c0910475": "PaymentStatusTimeStamp(address,address)", +"c0916437": "modifyChoice(uint256)", +"c091c435": "refund(address[],uint256[])", +"c091e45a": "redenominate()", +"c0926d40": "HBOToken()", +"c0929385": "confirmInit(address,address,string,bytes32,uint256)", +"c092ecf4": "blocksToVest()", +"c0934c45": "getNextRules()", +"c0938c1a": "setMintAgent(int256,address,bool)", +"c0942dfd": "registerNameXIDFromDapp(address,bytes32,uint256,bool)", +"c0946d54": "AtomCoin()", +"c094c73e": "VeritaseumToken()", +"c094df20": "shift(address,uint256)", +"c0956fd9": "getRealTokenAmount(uint256)", +"c0963d97": "getTokensAmount(uint256,address)", +"c0966693": "RoomNonceAdd(uint8)", +"c09689a6": "tryFinalizeProposalsByVoterIndices(uint256[],uint256[],bool[])", +"c096aa81": "fuint8(uint8)", +"c097d629": "setPI_edit_30(string)", +"c0981285": "buyComissionUnits()", +"c098201f": "updateEtherAndtokenAmount(uint256,uint256)", +"c0997654": "destIndex(address)", +"c09a4ef4": "latestEthTxRequest()", +"c09a898d": "SPTS()", +"c09b2a2c": "weiMinSale(uint256)", +"c09bdd06": "_escrow(address,address,uint256)", +"c09d81be": "calculatePoundsTimesEther(uint256)", +"c09f32e8": "closeQuestion(uint256)", +"c09fed25": "transferFromBalance(uint256,address)", +"c0a06ecb": "infoWithdraw4()", +"c0a0b5fa": "getKilledArray(uint256)", +"c0a14da4": "isTeamLockInPeriodOverIfTeamAddress(address,address)", +"c0a150b3": "RovaZoneBToken()", +"c0a1a949": "x15()", +"c0a1b72a": "totalSupplyWithOutBonus()", +"c0a1e525": "createDaoPOLSKAtokens(address)", +"c0a2203e": "insert(address,address)", +"c0a239e3": "valuePerShare()", +"c0a28014": "setTreeStructure(address,address)", +"c0a2d9b3": "EssentiaToken()", +"c0a35d62": "burnReturn(address,uint256)", +"c0a35e8b": "getTokensMintedAt(uint256)", +"c0a36345": "getTokenOwnerRewardPercent()", +"c0a39fb0": "blockTransfer(uint256)", +"c0a41466": "etherSender(address,uint256)", +"c0a42d91": "SignatureInvalidity()", +"c0a5bcbd": "DefaultCents()", +"c0a7639e": "checkIfAddressIsWhiteListed(address)", +"c0a7f894": "MAVCash(uint256,string,uint8,string)", +"c0a843a1": "getCurrentUserRefBonus()", +"c0a8694d": "NamableAddressList(string,bool)", +"c0a899f2": "transferAsChild(address,uint256,address,uint256,uint256,bytes)", +"c0a8fb73": "FlightDelayController()", +"c0a9066b": "LogValentineRequestCreated(string,string,string,address,address)", +"c0a9581d": "sendFee(uint256)", +"c0a963c9": "notifyWinner(address,uint256)", +"c0a99a83": "oneTokenInUsdWei()", +"c0aa18e7": "History()", +"c0aa3b21": "ownerTokens()", +"c0aa7e2e": "cancelInvoice(bytes32)", +"c0aace0b": "totalKitties()", +"c0ab5704": "setVesting(address,uint256,uint256,uint256)", +"c0ab86bd": "SBSolutions()", +"c0abf829": "tokenCreationMinMile2()", +"c0ac3d1c": "PRE_ICO_BONUS_RATE()", +"c0ac9983": "tokenURIPrefix()", +"c0ad7427": "saleTokenSupply()", +"c0adb725": "AuthCancel(address,address)", +"c0adc465": "getCurrentBonusRate()", +"c0ae6a3a": "ultimateOutcomes(bytes)", +"c0aee5ba": "THAW_CYCLE_USER()", +"c0b14de7": "setLandLimit()", +"c0b204a6": "TeamWalletAmount()", +"c0b241d7": "icoRate()", +"c0b332c1": "moveCharge()", +"c0b3569d": "setAssetProxy(address)", +"c0b3870a": "withdrawJackpot()", +"c0b39e68": "unfinalize()", +"c0b3aff3": "INCREASE_RATE()", +"c0b3dab3": "Devilsbest()", +"c0b4d404": "setGrowingControlStartAt(uint256)", +"c0b4e657": "HongkongerCoin()", +"c0b4fa6d": "_reward(address[])", +"c0b6762c": "SILVER_AMOUNT_XPER()", +"c0b6f0c2": "NextRoundAndEvents()", +"c0b6f561": "initiateOwnershipTransfer(address)", +"c0b75b7d": "setMinContributionAmount(uint256)", +"c0b7eba4": "game_allocation()", +"c0b82515": "gzeUsd()", +"c0b84bfe": "setFee(uint256,uint8)", +"c0b8a80d": "CVAlejandro()", +"c0b92612": "changePig(address)", +"c0b9b36a": "bountyTokensBatch(address[],uint256[],string)", +"c0b9b8ce": "releaseToAdvisor(address,uint256)", +"c0b9ecc8": "getNames(address,uint256,uint256)", +"c0ba6adf": "gemDefenseConversion()", +"c0bac1a8": "isMigrated(string,string)", +"c0bb20a6": "setBonusSale(uint256,uint256,uint256)", +"c0bb6c27": "setTotalPersistLimit(uint256)", +"c0bb8466": "WithdrawFees()", +"c0bd3f40": "dumpData(uint256,uint256)", +"c0bd8351": "getGameId()", +"c0be3e9a": "removeOffChainAddresses(address[])", +"c0be4b51": "genWeeklySecondPrizeKey(uint8[4])", +"c0be7ad3": "freezeAccountDirect(address,bool)", +"c0c116d5": "getStringValue(uint256)", +"c0c133a8": "DATE_ICO_END()", +"c0c19d29": "mock_length()", +"c0c1b107": "changeOraclizeGasPrice(uint256)", +"c0c1b18e": "getDepositSize(address)", +"c0c1cf55": "executeAction(uint256)", +"c0c1dab1": "setReceiver1()", +"c0c1eebc": "addToken(address,bytes32)", +"c0c2c087": "getOrdersInfo()", +"c0c3da9c": "totalSupplyLocked1Y()", +"c0c4440a": "totalAmountOfCrowdsalePurchases()", +"c0c47e12": "getDeal(bytes16)", +"c0c4d8a8": "Fundraiser(address,address,uint256,uint256,address,uint256,bytes32,uint256,uint256,uint256,uint256,uint256)", +"c0c53b8b": "initialize(address,address,address)", +"c0c5fda5": "getTotalSupply(address,uint256,bytes,uint8,uint256)", +"c0c602d9": "tokenAssigned()", +"c0c620d2": "DroneToken(uint256,string,string)", +"c0c6a430": "BadTronToken(address,address)", +"c0c6a68a": "setMockedBlockNumber(uint256)", +"c0c76940": "StopperCoin()", +"c0c77236": "resetHolder(bool)", +"c0c77b71": "changeRegistrationStatusForGoldWhiteList(address,bool)", +"c0c81969": "tokenSupplies(uint256)", +"c0c83c0d": "getDebtById(uint256)", +"c0c8821a": "icoRuleUpdate(uint256,uint256,uint256,uint256,uint256)", +"c0c8b567": "registerCertificateHash(address,bytes32)", +"c0c8ccb3": "PreHELIX()", +"c0c91e6d": "getMinPriceSale()", +"c0c95917": "BrinkzSupply()", +"c0c98d6f": "setProof(uint256,bytes32)", +"c0cab256": "ZZWHToken()", +"c0cad302": "setNetworkName(string)", +"c0cc365d": "setExpirationTime(uint256)", +"c0cc6eb1": "rejectPayment(bytes8)", +"c0ccc863": "NacContract(uint256,uint256,uint256,address,uint256,uint256)", +"c0cd1ec1": "recordLog(uint256,address,uint256,uint256,uint8,uint8)", +"c0cd2e32": "chargeWeeklyRate(bytes32,address)", +"c0cd54c6": "GetGameType(address)", +"c0cf067b": "deathData_v7()", +"c0cf22e9": "setSendGiftPrice(uint256)", +"c0cfa7e5": "startDispute(uint256)", +"c0d061f4": "execute(address,uint256,bytes32)", +"c0d0aa69": "daoMultisig()", +"c0d129d4": "BallotPreferential()", +"c0d13a6d": "MIN_BUY_ETHER()", +"c0d26946": "randomNumber(address,uint256)", +"c0d2834b": "DataSource()", +"c0d3f378": "specialManagerListMap(uint256)", +"c0d470a6": "setCCH_edit_23(string)", +"c0d4fa0c": "emitFeePeriodDurationUpdated(uint256)", +"c0d6568d": "FEATURE_TRANSFERS()", +"c0d6ce63": "punksRemainingToAssign()", +"c0d75442": "TOKEN_SALE()", +"c0d84ce5": "TransferFrom(address,address,uint256)", +"c0d8b0b8": "setPetAuras(uint64,uint8,uint8,uint8)", +"c0d910cd": "getTankOwner(uint256)", +"c0d9f997": "transperrun()", +"c0dab516": "adminPercent()", +"c0db4dd7": "TRANSACTION_MIN_IN_ETH()", +"c0db8dd8": "allowToLock(address,address)", +"c0dcf63a": "isLastRaceFinsihed()", +"c0de3d71": "TransactionCancelledICAP(bytes32,uint256,string,address)", +"c0df77d0": "getRefName(uint256)", +"c0e06ca3": "whitelistAddressPresale(address,uint256)", +"c0e093f1": "AirdropMultiple(address[],uint256)", +"c0e09852": "isVesting(address)", +"c0e17c61": "TenStepTestCoin()", +"c0e18579": "ONETIMESOLD(uint256)", +"c0e19314": "divideFractional(uint256,uint256,uint256)", +"c0e1e272": "buyToken(uint32,uint32,uint32,address)", +"c0e22f31": "frozenStatusOf(address)", +"c0e31001": "avatar(address,uint256,bytes)", +"c0e3153c": "balanceSub(address,address,uint256)", +"c0e317fb": "addToBalance()", +"c0e33275": "perTokenAmountMax()", +"c0e37b15": "transferData(address,uint256,bytes)", +"c0e59e4d": "lastRateUpdateTimeForCurrency(bytes4)", +"c0e5fbb6": "unlockBalanceOf(address)", +"c0e71f54": "toKeyValue(string,string)", +"c0e738ef": "summAdvisors()", +"c0e789cc": "friendsFingersWallet()", +"c0e793c2": "transferOwnership(string,address)", +"c0e79a11": "setAllowed(address)", +"c0e8ad51": "LydianCoin()", +"c0e9118e": "killAllXAITActivity()", +"c0e91320": "finishPVEBatch(uint256[])", +"c0e91569": "GRCToken()", +"c0ea09d7": "rest()", +"c0ea537b": "amountOfTokensPoolD()", +"c0ea6ff5": "test3_search()", +"c0eaded2": "makeDeal(uint256,uint256,uint256,uint256,uint256,string,address,string,address,uint256,uint256)", +"c0eb2325": "scheduleTransaction(address,bytes,uint256)", +"c0eb2e70": "buy(address,uint256[],uint256[],bool)", +"c0ebc67a": "SimpleStateChannel()", +"c0ebdba1": "InvestedOtherCrypto(address,uint256,uint256)", +"c0ec55a5": "buyPokemon(address,uint256)", +"c0ed969a": "updateBackend(address)", +"c0edec55": "CroatiavsDenmark()", +"c0ee0b8a": "tokenFallback(address,uint256,bytes)", +"c0ee57a5": "giveReserveTo(address,uint256)", +"c0ee6db8": "_lockToken(address,uint256)", +"c0efa161": "getDeveloperReservedBalanceLimit()", +"c0f0c21c": "updateMaxTokenLimit(uint256)", +"c0f0e925": "getPercent3(address)", +"c0f11a1b": "addressArrayContains(address[],address)", +"c0f16fab": "checkAllowedContribution(address,address,uint256,uint8)", +"c0f17d13": "ChessCash()", +"c0f3622c": "updateRates(uint256,uint256,uint256)", +"c0f3ab76": "B2BCoinContract()", +"c0f40163": "issueFTT(address,uint256)", +"c0f496ac": "ecosystemAllocation()", +"c0f4bfa4": "nbSellers()", +"c0f4d29b": "setLocation(uint256,uint256)", +"c0f4f41e": "changeRefresherFee(uint256)", +"c0f57529": "eth_seed_amount()", +"c0f5a9cb": "deleteThing(bytes32[])", +"c0f5b5f7": "setSecondRoundPricing(uint256)", +"c0f5dc97": "totalSupplyUnlocked()", +"c0f64f43": "attachAsset(uint256)", +"c0f65734": "SignedDigitalAsset(string)", +"c0f68859": "getMinimumGracePeriod()", +"c0f6a3f9": "reserveVaultAddr()", +"c0f6c0da": "getTokensFromEth(uint256)", +"c0f6c7b8": "getIdArray(address,uint256,string,string)", +"c0f70d5a": "IOUSupply()", +"c0f7c498": "create_planet()", +"c0f8275e": "detailsOf(uint256)", +"c0f8940c": "decode()", +"c0f8de32": "shouldThrowOnAttemptToTransferToNullAddress()", +"c0f96105": "Enabled()", +"c0fd43b4": "lastNonce(address)", +"c0fdba2d": "YCBIToken()", +"c0fe6c92": "isClientAddedBefore(address,address)", +"c0feb62d": "fundRaisedDuringPublicSale()", +"c0feee42": "Error(bytes32)", +"c0ff3ebc": "ILFManager()", +"c1009f1b": "testInitialLedgerBalance()", +"c1013658": "createAsset(uint256,bytes32,uint256)", +"c1021099": "DBDVToken()", +"c1039215": "PresaleExtended(uint256)", +"c10435cc": "lastEruptionTimestamp()", +"c1061561": "shut_down()", +"c1072279": "unicornBreeding()", +"c1075329": "withdrawFunds(address,uint256)", +"c10796df": "_performTransferToICAPWithReference(bytes32,uint256,string,address)", +"c107aa6f": "addAssociatedAddress(address,address,address,uint8,bytes32,bytes32,uint256)", +"c107b9b8": "CTCB()", +"c107e109": "addFactory(string,address)", +"c1082c00": "YBananaCoin()", +"c108adab": "setChangeFee(uint256)", +"c108d542": "distributionFinished()", +"c108f3b4": "nextDelayedSetStake()", +"c1098e2e": "preSaleFirstCap()", +"c109e024": "blockdif()", +"c10a0840": "CryptoChallenge()", +"c10b30c0": "unlockPurchasedTokensClaim()", +"c10b9358": "saleEnd()", +"c10be521": "gapFactor()", +"c10bef22": "ConditionsAdded(address,uint256)", +"c10c0bd3": "logMatchdayResults(int16,string)", +"c10c3463": "addProduct(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c10c3546": "setEscrow(address)", +"c10ce2b0": "calculateDiffPercent(uint256,uint256)", +"c10d0f11": "didChangeCollateral(bytes32,address,uint256)", +"c10dd4c6": "getEvents(bytes32[],address)", +"c10e5fe7": "GemCoin()", +"c10e7dfe": "bonusInited()", +"c10e9ba0": "isClientIdentRejectedOf(address)", +"c10eb14d": "_withdraw()", +"c10efd2f": "compareResults()", +"c10f1a75": "proxyFactory()", +"c10f5075": "KudosPoll(string,string,uint8,uint256,uint256,uint256)", +"c10fa635": "channelParticipantCount(uint64)", +"c10fa789": "withdrawalsVotes(address,uint256)", +"c10fbf0e": "reDraw()", +"c110afe2": "Percent(uint256,uint256)", +"c110e6a0": "HealthCoin()", +"c111368b": "vestingsRemainBalance(address)", +"c112411e": "_clarifyPVPSchedule()", +"c112601c": "transferLibOwnership(bytes32,address)", +"c1127f90": "PresalePool(address,uint256,uint256)", +"c112a083": "finalizeChangeName()", +"c112dfa3": "changeDecimals(uint8)", +"c11301d4": "getSaleContractTargetEtherMax(address)", +"c1139ba0": "transferAuthorship(address,bytes32,bytes32)", +"c113d195": "XECToken(string,string,uint8,uint256)", +"c11403fc": "maxListingSeconds()", +"c114301c": "icoPlatformWithdraw(uint256)", +"c115b06c": "CYFToken()", +"c11645af": "test_threeInvalidAssertFalse()", +"c116574c": "__update_oraclize(address)", +"c1165781": "totalSupplyOnIco()", +"c11737c7": "getFirstBuyer(address)", +"c11741a9": "submitReview(uint256,bool)", +"c117c9eb": "isUserInAllowedList()", +"c117cfe2": "TwoDimensions()", +"c11808da": "getFloor()", +"c1184537": "changeContracts(address,address,address,address)", +"c118a9de": "getDiscountOf(uint256)", +"c119167b": "numberOfExchInEstateNasBob(address,uint256)", +"c119d019": "collectPayment(address,uint256)", +"c11a4b47": "Origin()", +"c11b2252": "equipContract()", +"c11bd455": "timeOfLastHalving()", +"c11bf4e3": "execute(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", +"c11bf8d6": "CLXToken(uint256,string,string)", +"c11c0cc1": "getSecondPoints()", +"c11d9d9f": "minEtherContrib()", +"c11dde0d": "setManufacturer(address)", +"c11e1ff3": "getMe()", +"c11efcdc": "getRaisedForCurrentStage()", +"c11f49e3": "ETHERNETSUPPLY()", +"c11f5284": "setReceivers()", +"c11fb13e": "trustedProposals(uint256)", +"c1204caa": "trade(uint256[11],address[4],uint8[2],bytes32[4])", +"c12076f1": "holderGroupNumber()", +"c120d1a4": "outingreserveBalance()", +"c121be4d": "removeAddressManual(address)", +"c122759f": "issuerDistributedUnits()", +"c1232366": "gameCloneFee()", +"c1238940": "bmy(uint256,string,uint8,string)", +"c123a658": "boostCloneMarket(uint256)", +"c1243528": "airdropRecord(address)", +"c1246d39": "simulatePathwayFromBeneficiary()", +"c124e2ea": "checkBetDozen(uint8)", +"c1257bad": "testPassingAProposal()", +"c1258f69": "txCount(address)", +"c1263215": "calculateObtainedJOY(uint256)", +"c1266227": "pow2Bounds(int256)", +"c12692dc": "tokenRaise(address,uint256)", +"c12719a7": "EthPriceDependent(address[],uint256,bool)", +"c1273676": "fundingUnlockTime()", +"c1273ba0": "likeCelebrity(uint256,uint256)", +"c127ae41": "getSignatureHash()", +"c127c247": "addMember(address,string)", +"c127ee20": "SearchUserPurchase(string,string)", +"c128c9e7": "GetBuildingData(address,uint256)", +"c1292cc3": "lastId()", +"c1294224": "payoff(address)", +"c12954fa": "restartMinting()", +"c129827b": "_setSpecialityValue21(uint256)", +"c12a0fd7": "removeReverseRate(address[])", +"c12ae5e9": "blocksInFirstCapPeriod()", +"c12af1ce": "fipsRegister(uint256,bytes)", +"c12b2513": "assignSubBroker(uint256,address)", +"c12c202c": "getGrapesSinceLastHarvest(address)", +"c12c2eb3": "abstractENS()", +"c12c31d6": "listAllAdmins()", +"c12d1d82": "updateToken(uint256,uint256)", +"c12d7b01": "Error(uint16)", +"c12d97de": "DevGiveBlockReward()", +"c12dec39": "_fetchOrdersForMerchant(address)", +"c12e760e": "agreeFromDrone()", +"c12eb191": "updateEarlyParticipantWhitelist(address,uint256)", +"c12edde6": "EURValue()", +"c12f48e3": "AssetRegistered(address,string,string,string,uint256)", +"c12fac40": "oneHundredThousand()", +"c13026b0": "changePresaleCap(uint256)", +"c13051d7": "getCellsInfo()", +"c1309aea": "getOfferor(uint256)", +"c1310951": "createNewDepositContract(uint256)", +"c131acdf": "GetBestTokenCount(uint8)", +"c1321111": "setSaleLength(uint256,uint256,uint256,uint256)", +"c132bc18": "balanceWosPoolForThirdStage()", +"c132dd4f": "authorizedCreateTokensToPrivate(address,uint256)", +"c1331bc3": "setBlacklistSpender(address)", +"c1333a9c": "setPurchaseRequirements(uint8,address[],uint256[])", +"c134bc92": "hell()", +"c13517e1": "createDispute(uint256,bytes)", +"c135a2d8": "getBackgroundValue(uint256)", +"c135c040": "gzePerEth()", +"c1374d5a": "EtherUSDPriceFactor()", +"c138195c": "icoEtherMinCap()", +"c1381ea3": "DutchExchangeProxy(address)", +"c13862ea": "setBoardRating(uint256,uint8)", +"c13982ee": "checkCap()", +"c13992b4": "Metadium()", +"c13a135a": "getWinnerOfEvent(bytes32)", +"c13ab0fe": "WOLF4()", +"c13afa91": "object_locations(uint256)", +"c13b22ef": "setTokenTransferFeeAbs(address,address,uint256)", +"c13b37c7": "updateIsRevertedEndTimeReached()", +"c13b3895": "getHype(uint256)", +"c13b72a8": "registerCDP(uint256)", +"c13c6813": "_addTimelock(address,uint256)", +"c13ca374": "SimpleSale()", +"c13e24d2": "Reinvest(uint256)", +"c13e285d": "maxTrialDrops()", +"c13f4af7": "claim(address,uint128)", +"c13fb08b": "breedOnAuction(uint256,bool,uint256,bool,string,string)", +"c140635b": "audit(bytes32)", +"c1408cda": "getDataFromAddress(address)", +"c141e6da": "ERC721ReceiverMock(bytes4,bool)", +"c141ed74": "calculateCrowdAmount(uint256)", +"c14248a2": "lrcSent()", +"c1429c11": "ChainStarToken()", +"c143a372": "TokenTransferFrom(address,address,uint256)", +"c143ab2c": "crowdSaleStop()", +"c143f701": "getRequestFundInfo(uint256)", +"c1440167": "Voterplayer()", +"c1441172": "setBlackFlagRequest(uint256,uint256)", +"c144734c": "getUploadTypes(uint256)", +"c1448284": "approved(address,uint256)", +"c144a510": "ADDR_WITHDRAWAL2()", +"c144a5db": "Bytelending(uint256,string,string)", +"c144d7dc": "buyMine(uint8)", +"c145d105": "withdrawSettle(bytes32,address,uint256,uint256,bytes32)", +"c1460942": "getLiquidationSpread()", +"c14634cf": "KudosTokenSale(address,uint256,address)", +"c1468587": "mainwallet()", +"c146eb02": "UNOPEN(string,string,uint256,uint256,bool)", +"c148002c": "latestUnlockStage()", +"c148e20e": "FCCToken(string,string,uint256,uint256,bool)", +"c14958cb": "giveUp(address,address)", +"c1499199": "_uncreditUser(address,uint256)", +"c14a2455": "balDailyLotto()", +"c14a3b8c": "mintTimelocked(address,uint256,uint256)", +"c14a6046": "payerContract()", +"c14a932f": "signedTransferFromSig()", +"c14a9f05": "challenge(address,uint256,uint256)", +"c14ab7a1": "PredictTheFutureCaller(address,uint8)", +"c14bafb1": "lastPurchaseTime()", +"c14bfd29": "hasAlreadyVoted(uint256,address)", +"c14c1ce3": "requestUpdate(uint256)", +"c14c5574": "Gold(address,address,int256,address)", +"c14c7bd7": "performRead1()", +"c14d2358": "init(address,uint256[],uint256,uint8,uint256,bool)", +"c14d3abe": "enableSuperUser(address,bool)", +"c14e50ce": "setValidater(address)", +"c14e61ba": "overdraftTotal()", +"c14e6cd0": "changeTransferLock(bool)", +"c14e7a3f": "setCooldown(uint16,uint32)", +"c14e9f58": "submitBlockHeader(bytes)", +"c14edad2": "teamDistribute()", +"c14f42fd": "mLoadAndReturn(bytes32)", +"c14f7ea8": "rejectSubmission(uint256)", +"c14fbd64": "satoshiMood()", +"c15185f5": "getAuditPrice(uint256)", +"c151ac55": "_createMovie(string,address,uint256)", +"c151c5ad": "getSignerTable()", +"c15294a1": "creatGameBet(uint256,bytes32)", +"c152d3eb": "setKYCTeam(address)", +"c1531ecc": "changeIssuer(address,bool)", +"c1551fc8": "QuadCoreChain()", +"c1554658": "changeDepositorLimit(uint256)", +"c155836d": "LuCyToken(address,string,uint8,string,string)", +"c155cfde": "_preAllocateTokens(address,uint256)", +"c1560a14": "hardCapInUSD()", +"c1562547": "checkUser()", +"c156ef6b": "_createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"c157b869": "totalUsdValueOfAllTokens()", +"c157d72c": "itemInfo(address,uint256,bytes)", +"c1596534": "addReserve(address,uint8,bool)", +"c1598f6a": "newWage(uint16)", +"c1599011": "conversionRateOfState(uint256)", +"c1599bd9": "X()", +"c15a6791": "oneShotTokenRepartition(uint256)", +"c15ae376": "_shareToDistribution(uint256,address,uint256,uint256)", +"c15aec44": "totalGasUtilizing()", +"c15b42bf": "AsignarPasesLibres(uint16,uint32)", +"c15c09b5": "admin_set_exchange_rate(uint256)", +"c15d0b10": "getLoanValue(bool)", +"c15d15da": "_isValidSignatureAndData(address,address,bytes)", +"c15d7bca": "setEthToTokenConversion(uint256)", +"c15e47c4": "getFirstBatch(address,address)", +"c15e61c0": "Authorization()", +"c15f05fb": "changePrimaryArbitrator(address)", +"c15f618a": "purchasePokemon(uint256)", +"c15f68f0": "Retired()", +"c15f817d": "_import_island(bytes32,address[3],uint256[7],uint256[8])", +"c15f8779": "get_previous_item_in_state_from_item(bytes32,bytes32)", +"c1614981": "allocateLocked(address,uint256)", +"c1615945": "setAffiliateContract(address)", +"c1615c87": "DEFROST_PERIOD()", +"c161d506": "CollabCoinToken()", +"c162ba2f": "walletId()", +"c162bc03": "clearProposal(address)", +"c163bba7": "publish(string,string)", +"c163edf7": "OutcomeEvent(string,uint256)", +"c163fb0e": "ownedHouses(address)", +"c1640913": "RETAINED_TOKENS()", +"c166311f": "freeLotterySeconds()", +"c166c458": "getUserRequestCount(address)", +"c166ee38": "sweepAccount()", +"c1670257": "redeemContractSentTokens(address,uint256)", +"c1674b74": "assertReadyToClose(uint256)", +"c167d1cd": "getAvailableSupply()", +"c1684711": "migrateTokens(address)", +"c16849c0": "tokenSC()", +"c1687877": "buyTokens(uint256,uint256,address)", +"c168e037": "getCustomerPremium(uint256)", +"c1691fc3": "add_bonus(uint256)", +"c1694bd4": "TransferDetails(string,uint256,string,uint256,uint256,address[])", +"c16959b2": "_unpackRaceFinishData(uint256)", +"c1699a99": "stakePeriod()", +"c1699bf6": "setPrimaryAccount(address)", +"c169ec0d": "setBuzzCafe(address)", +"c16ac06f": "CM()", +"c16ae3ce": "_receiveFrom(address,uint256)", +"c16b451f": "_checkedTransfer(address,address,uint256)", +"c16b9374": "regularEndGame(address,uint32,uint8,uint16,uint256,int256,uint256,address)", +"c16bca13": "MIN_AUDIT_TIME()", +"c16bea20": "addControllerByPartition(bytes32,address)", +"c16c0851": "miningOneSelf()", +"c16d1377": "IS_CND_CONTRACT_MAGIC_NUMBER()", +"c16d3344": "setMinimumOfferPrice(uint256)", +"c16d515a": "_createCenturion(address)", +"c16e50ef": "validate(bytes)", +"c16f402c": "getEpisodes()", +"c16fe907": "getTransfer(uint256)", +"c1707f66": "stateSetOpen(uint32)", +"c170fd54": "bid(uint40)", +"c171747b": "convertEthToMet(uint256)", +"c1717f80": "BC2Token()", +"c171cfa6": "getBetValueByGamble(uint8,uint8)", +"c171fb91": "referrerLevel1Percent()", +"c172085e": "initialization()", +"c17281d0": "refundPartial(address,uint256,uint256,uint256)", +"c172aae5": "getIdentifier(uint256)", +"c172f9c9": "receiveApproval(address,uint256,address,bytes32)", +"c1733712": "authorizePayment(address,uint256,uint256)", +"c1733f68": "getToken(string)", +"c173508b": "removeConnection(address,address,bytes32)", +"c1736222": "tokenForSPSold()", +"c1739b69": "InfraOfOwner(address)", +"c1747585": "testEvent2()", +"c174cc59": "getrunused(address)", +"c1751903": "lockBreak()", +"c1756a2c": "sendEther(address,uint256)", +"c1758fee": "vest2mlDevelopers(address,address)", +"c1766657": "addBonusForMultipleHolders(address[],uint256[])", +"c176b1d8": "deletePriceIdv(bytes32)", +"c176d42a": "NavGlobalTourCoin()", +"c176e639": "payout(address[],uint256[])", +"c176e73b": "pkt()", +"c177c20f": "CliToken()", +"c177e804": "WEETtoken()", +"c177f22e": "findKingdomCalled(string)", +"c1784a4e": "safekey(uint256)", +"c1786ab2": "pre(address,bytes32,bytes32)", +"c178a2d4": "CreationContract()", +"c178fc87": "setTokenRate(uint256,string)", +"c1790561": "_getPetBonus2(uint256)", +"c179186e": "collectWinnings(uint256,uint256,uint256)", +"c179520c": "ManageAccount()", +"c17a099b": "presaleBonusTokensDistributed()", +"c17a893e": "transferAUTOtoken1(address[])", +"c17b5a93": "ProfitExchange()", +"c17b9770": "log2Floor(int256)", +"c17c0456": "ownerCEO()", +"c17c3521": "setHourlyRate(uint256)", +"c17ccc6c": "withdrawUnlockedTokens()", +"c17d8720": "checkBank(string,address)", +"c17de343": "isStarOwner(uint256,address)", +"c17e2aa1": "burnAllTokens()", +"c17e6817": "sendSafe(address,uint256)", +"c17e92b6": "unregisterFromBlacklist(address)", +"c17ed7bd": "purchaseSilver()", +"c17f23e8": "getRoundID()", +"c17f8891": "setEtherFeeMin(uint256)", +"c17ffac6": "unsetRegionForSale(uint256,uint256)", +"c180e1d0": "GCPToken()", +"c1811783": "FreezableToken()", +"c1812b15": "reorganizeOwners()", +"c1826d78": "Collect()", +"c1829a14": "testFailTooFewConfirms()", +"c182f531": "GetFreeEther()", +"c183660c": "cancelJobContract(uint256,string)", +"c18378a0": "sellTokensFrom(address,uint256)", +"c18384ec": "setRestricted(address)", +"c1838e92": "proposeTokenOwner(address)", +"c1839258": "LogTokenPurchase(uint256,uint256)", +"c1840b39": "_generateRandom(bytes32)", +"c1857bf7": "withdrawFoundation(address,uint256)", +"c185d772": "emissionStages(uint256)", +"c185e492": "preSaleThirdPrice()", +"c186dcbf": "getStaticArraySum()", +"c18715f8": "prolongationPermitted()", +"c1873e26": "releaseCoreTeamAccount()", +"c1889ff2": "payAccTax(uint256)", +"c188f44b": "addproduct(string,string,uint256,string)", +"c1891ac6": "multiplePing(address[])", +"c1899ca7": "request_dividend(address)", +"c18a40c7": "multiowned(uint256,address[])", +"c18b4136": "AAC()", +"c18b5279": "KFHToken()", +"c18b8db4": "listings(bytes32)", +"c18b9760": "test_insert_findWithHintPrevDecreased(int256)", +"c18bca5f": "setCollectionAddress(address,address)", +"c18ca54c": "testEvent(int256,int256,uint256,uint256,string,string)", +"c18d767a": "weiMinSalePreIco()", +"c18e8903": "totalWeiRaisedDuringICO4()", +"c18e94b4": "Keizer()", +"c18edde1": "saleopeningTime()", +"c18f4831": "burnFeeDenominator()", +"c1908360": "createEntry(string,string)", +"c190b129": "holderState()", +"c1912433": "acceptAndPay(bytes32,uint256[],uint256[],int256)", +"c1918e90": "accountAddressForSponsee()", +"c191cbd7": "TeamTokensAllocated(uint256)", +"c191d37d": "Escapable(address,address,address)", +"c1927292": "TIER1_BONUS()", +"c1929d8c": "ADVISOR_THREE()", +"c192ca98": "isCS(address)", +"c1932833": "maxAirdropParticipants()", +"c19358bb": "setPropertyLastUpdater(uint16,address)", +"c193fbf8": "pushArray(bytes32,address)", +"c19455c8": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes32,address)", +"c1955e62": "spend(uint256,bytes32)", +"c195dc41": "getStageEndDate()", +"c19678d5": "canLotteryBeExecuted()", +"c196b54f": "bound(uint256,uint256)", +"c1971240": "dailyGrowthUpdated_date()", +"c197a7b1": "getLastStoragePayDate()", +"c197cdee": "preSaleTokenLeft()", +"c1989276": "MaxItems()", +"c1991040": "getCurrentVotingDescription()", +"c19a8095": "deleteUser(address,address)", +"c19bbf50": "getLockStatus(address,address)", +"c19c9a21": "CCTHCoin()", +"c19d7808": "MamaBearToken()", +"c19d93fb": "state()", +"c19da6b2": "canBuy(address,address)", +"c19dccd8": "KantrotechCoin1(string,string,uint256,uint256)", +"c19dd320": "cancel2(uint256)", +"c19e33ce": "COIN_SUPPLY_ICO_PHASE_0()", +"c19e7b00": "WeiCapChanged(uint256)", +"c1a06de3": "Valens()", +"c1a12d66": "crowdsaleOpen(bool)", +"c1a21bf3": "sellerBalances(address,address,uint256,address)", +"c1a2a8f4": "boards()", +"c1a2babc": "getMemberSince(address)", +"c1a38768": "STARTUP()", +"c1a3bb06": "total_bet_withdrawn()", +"c1a3bda5": "randomQueryID()", +"c1a6ec6a": "ADVISORY_TEAM_PORTION()", +"c1a7db7b": "MtcDailyLimitChange(uint256)", +"c1a82cdb": "reissueCertWithID(bytes32,bytes,bytes32,uint256,bytes32,bytes,bytes32,uint256,bytes32)", +"c1a85e16": "test_insert_findWithHintNextUpdateTail()", +"c1a9953f": "checkRokTeam()", +"c1aa049d": "getIsPurchased(address)", +"c1aa104e": "OpenRetailContract(uint16,bytes32,string,string)", +"c1aa5d98": "getGameIdByAddress(address)", +"c1aa721d": "lockAfterManuallyMint()", +"c1aaa717": "_bountySupply()", +"c1ab1b54": "RebateCoin()", +"c1abbf6a": "addjoinlist_even(address,uint256)", +"c1ac7902": "playJackpot()", +"c1ad5bea": "isdeposit()", +"c1ad7925": "finalizeFunding(address)", +"c1adb83e": "NecashTokenBase()", +"c1ae36d0": "carsOf(address)", +"c1ae4044": "checkBetColor(uint8)", +"c1af5785": "enterLottery()", +"c1afdd48": "belowSevenBets()", +"c1b0510a": "GlobalBusinessSystem()", +"c1b0561d": "PDTToken()", +"c1b056b0": "getNodeLeftChild(bytes)", +"c1b06513": "registerEvent(bytes32[])", +"c1b07b1a": "receiverOne()", +"c1b082b6": "issueOfTokens()", +"c1b0dc2f": "LogPolyClaimed(address,uint8,uint256,uint256,uint256)", +"c1b15e44": "_setAllowance(uint256)", +"c1b16cb0": "ownerAddAsset(string)", +"c1b2dfc1": "gameGiftMaxAmount()", +"c1b36489": "QuickUnionPayChain()", +"c1b3e6ab": "blockedSum()", +"c1b43a17": "secondHighestBidder()", +"c1b43af8": "IPchainStandardToken(uint256,string,uint8,string)", +"c1b466d6": "calculate0xbtcReceived(uint256)", +"c1b4aa51": "burnContractCoins(uint256)", +"c1b533b0": "getExchangeRateInUSD()", +"c1b58f6c": "unlockAllAllocationAddresses()", +"c1b664de": "setStageCount(uint256)", +"c1b668a9": "getBoardInfo(address,address)", +"c1b68a7c": "DebitClientOnce(address)", +"c1b73010": "removePauser_(address)", +"c1b74ad8": "propose(uint256,bytes32,address)", +"c1b7a892": "AsiaCoin()", +"c1b8847b": "setMaxFeeWithdrawal(uint256)", +"c1b8b704": "updateGlobalMax(uint256)", +"c1b90c7b": "_sendTokens(uint256,address)", +"c1b99811": "transferPrimordialToken(address,uint256)", +"c1b9f177": "bountyReserve()", +"c1ba93e1": "dbkDeposit()", +"c1bb95d0": "TransferConfirmed(address,uint256,uint256)", +"c1bbcbef": "MICKTOKEN(uint256,string,string)", +"c1bc2664": "ClearView()", +"c1bd1e85": "killFeed()", +"c1bd3685": "proposeSolve(uint256,uint256)", +"c1bd762b": "wantMyEther()", +"c1bd8186": "crowdsalepricing(address,uint256)", +"c1bd8ecb": "initializeCrowdsale(address,uint256)", +"c1bd9b12": "getShareAddressFromId(uint256)", +"c1bdff26": "onNewLoan(uint256,address)", +"c1be4031": "XaurumProxyERC20()", +"c1beb1e1": "MusereumToken()", +"c1bf1dcf": "setRegistrar(address,bool)", +"c1bf22a9": "XAUToken()", +"c1c02a46": "Atlas()", +"c1c03094": "EventBattleOver()", +"c1c0e046": "rescueAccount()", +"c1c0e9c4": "exec()", +"c1c1066b": "getCommentsCount()", +"c1c11aca": "GitToken(uint256,string,uint8,string)", +"c1c11c96": "getSender(address,uint256,address,uint256,uint256,uint256)", +"c1c1d218": "BOND()", +"c1c28d7d": "calNewTokens(uint256)", +"c1c379ac": "tokenTwitter()", +"c1c3eccf": "vestingPeriodInMonths()", +"c1c43648": "addAction(uint256,uint256,uint8[6],uint8[6],uint16[6],uint8[6],uint256,uint256)", +"c1c4676e": "updateGameCost(uint256)", +"c1c5897e": "AOMcoinERC20()", +"c1c5a3b6": "CaptainSell()", +"c1c5de4a": "tryDeposit()", +"c1c64ecf": "mintPriceBuffer()", +"c1c6c749": "changeWhitelistPrivateStatus(address,bool)", +"c1c6d4e8": "addLoanProduct(uint32,uint32,uint32,uint256,uint32,bool)", +"c1c723f4": "validateProposedMonarchName(bytes)", +"c1c74dde": "_setFunds(address,uint256)", +"c1c7bc68": "addFreeMineralMulti(address[],uint32[])", +"c1c8277f": "reclaimOwnership()", +"c1c8b89d": "Recash(uint256,string,string)", +"c1cbbca7": "contribute(uint256)", +"c1cbbe6c": "getRoundAvailableToken(uint256)", +"c1cbdff3": "moreThanSoftLimit()", +"c1cc0046": "returnOffer(uint64)", +"c1cc0775": "calculateFeeDynamic(uint256,uint256)", +"c1cc6958": "leekStealGo()", +"c1ccaed3": "pageBuyRecordByAccount(address,uint256,uint256)", +"c1cd1759": "SpicePayroll(address)", +"c1cda902": "setTradeable()", +"c1cdaae8": "generate(address,address,address,uint256,uint256)", +"c1ce53fc": "reflect(string)", +"c1ce56eb": "addAccount(address,uint256)", +"c1ce6647": "minAmountToGetBonus()", +"c1cfb99a": "get_balance()", +"c1d038b2": "getSkillIdByIndexAndLevel(uint8,uint8)", +"c1d11037": "updateAddresses(address,address)", +"c1d1f5c0": "BirdToken()", +"c1d1faf3": "createAuction(uint40,uint128,uint128,uint40,address)", +"c1d22403": "_subFromValueHeld(address,uint256,bool)", +"c1d25c3d": "insert(int256,int256)", +"c1d298ab": "emitFeesDonated(address,uint256)", +"c1d32ad5": "Distribute(address,uint256)", +"c1d34b89": "transferFromAndCall(address,address,uint256,bytes)", +"c1d357bc": "getMinAllowedBid(uint256)", +"c1d4691a": "withdrawalTo()", +"c1d47a21": "submitPayment(bytes8,uint32)", +"c1d4bc64": "originalsCount()", +"c1d4f708": "getMwLength()", +"c1d55af8": "buy(uint256,address,uint256,bool)", +"c1d5725f": "buyToken(address,address,uint256)", +"c1d5e84f": "addNewUser(address)", +"c1d6036b": "contractExchangeRate(address)", +"c1d63ce6": "deleteArrayBytes32(bytes32,uint256)", +"c1d66482": "Postman()", +"c1d6ab37": "setIsContainerForShareToken(bool)", +"c1d6cbd8": "getPlayerPoint(uint32)", +"c1d75bea": "IBM()", +"c1d9e273": "nextFreeCount()", +"c1da1881": "getPollType(uint256)", +"c1da3923": "ICOstartTime()", +"c1dbbfb3": "withdrawAllFromRoot()", +"c1dbd9b2": "authorize(address,uint256)", +"c1dbf5ef": "changePTSBAddress(address)", +"c1de0842": "quarterThird()", +"c1de93df": "Forwarded(address,uint256,bytes)", +"c1de9ef8": "getPositionHeldToken(bytes32)", +"c1dfacb2": "getQualifiersPoints(uint160)", +"c1e0e604": "updateUsdPerMEth(uint256)", +"c1e10f65": "distributeeBitcoinCashMedium(address[])", +"c1e1955e": "getaddressfocuscardid2(address,address)", +"c1e1b327": "adminCollectPastShopFund()", +"c1e31eab": "SERVER_TIMEOUT()", +"c1e3bd3e": "getParticipants(uint256)", +"c1e41f38": "COMPANY_TOKENS()", +"c1e457c8": "experienceDelay()", +"c1e472be": "returnNotes(uint256)", +"c1e4884d": "setSecondStageStartsAt(uint256)", +"c1e4dfda": "setPriceWei(uint256)", +"c1e50f3c": "internalAddManager(address)", +"c1e5202a": "isUserMakerFeeEnabled(address,uint256)", +"c1e52775": "addDenomination(bytes8,address)", +"c1e5304a": "CreateNewDraw(uint256,bytes)", +"c1e5976e": "getStarkKey(address)", +"c1e59a50": "Example4(string)", +"c1e6102b": "LunyrToken(address,address,uint256,uint256)", +"c1e65cb9": "BTRS()", +"c1e68672": "totalWhitelistedFunding()", +"c1e68e4b": "developer_string_D(string)", +"c1e6c506": "TokenPriceInWei(uint256,uint256)", +"c1e70e63": "startManualPeriod(uint256)", +"c1e71903": "getResults(uint256,string)", +"c1e7310a": "signEA(uint32)", +"c1e74d71": "minPresaleContributionEther()", +"c1e80334": "_acceptImplementation()", +"c1e99a0e": "isInitialInvestor(address)", +"c1e9c53e": "Lottery(uint8,uint256)", +"c1ea8b93": "preCrowdsaleTokens()", +"c1eac693": "ArisaCoin()", +"c1eb1840": "canBurn()", +"c1eb3534": "batchMintToPool(uint128[],uint256[],uint128[])", +"c1eb354a": "setlockall(uint256)", +"c1eb50a7": "LinaAllocation(address,uint256)", +"c1eb5ddd": "DEV()", +"c1eb8c89": "wihtdraw()", +"c1ec10f4": "RigoBlock()", +"c1ec4a2a": "RegisterContract()", +"c1eca4b0": "checkCanAddStockProfit()", +"c1ed41fa": "appliedPresale()", +"c1ed54a1": "isBetValid(uint256,uint256,bytes)", +"c1ee22dd": "EMISSION_FOR_SALESTAGE5()", +"c1ee3375": "autoTransferApproved(uint256,uint256)", +"c1ef098b": "storeHarvestOperationByRegulator(string,string,string,uint32,uint16,uint16,string)", +"c1f04f3c": "allWeights()", +"c1f06e89": "changeYUMOAddress(address)", +"c1f0dac1": "test_largeDeviationNotPermitted()", +"c1f0e2c3": "createGameRound(uint256)", +"c1f10663": "withdrawAccumulatedFees(address)", +"c1f16bdc": "getWeiBalance(address)", +"c1f18e38": "isExpired(bytes)", +"c1f19220": "summFounders1()", +"c1f1d116": "internalVote(bytes32,address,uint256,uint256)", +"c1f307c9": "_isTime()", +"c1f45e80": "sendForPreICO(address,uint256)", +"c1f52604": "winningPrice()", +"c1f573ca": "bidInAuction(uint256,uint256,uint256)", +"c1f602e0": "intoRoom(uint256)", +"c1f62946": "getSecretRevealBlockHeight(bytes32)", +"c1f64cb0": "supportedRoleList(uint256)", +"c1f77309": "assignedPayoutAddress()", +"c1f7c539": "initPricer()", +"c1f8056b": "createAvatar(address,string,uint256)", +"c1f979ab": "add_recent(uint256)", +"c1fa1ed0": "assertEq(bytes32,bytes32,string)", +"c1fae25b": "receiveAirDrop()", +"c1fb7c34": "hmin(uint128,uint128)", +"c1fb9b9e": "developer_How_To(string)", +"c1fcf863": "getSoftwareExecRecord(uint32)", +"c1fd2580": "spendable_supply()", +"c1fd4339": "createMarket(bytes32,uint256,uint256,address)", +"c1fe5281": "minPurchaseNum()", +"c1ff808d": "changeBonus(uint256)", +"c1ffc0a5": "MinimumEthereumInvestmentUpdated(uint256,uint256)", +"c2006a18": "set_fixedFeeInCWC(uint256)", +"c201293b": "setCollateralPoolContractAddress(address)", +"c20155df": "ethRate2()", +"c201df97": "UnLockAddress(address)", +"c2021d1b": "maxTeamBonusBps()", +"c203367a": "EnddatePresale()", +"c2038560": "setOutcome(bytes,bytes)", +"c203d77f": "setSaleFinishTime(uint256)", +"c204505a": "testFailRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"c204642c": "airdrop(address[],uint256)", +"c204b288": "InvestorChanged(address,address)", +"c204f9f1": "_transferFromToICAP(address,bytes32,uint256)", +"c2052403": "payOut()", +"c20547b3": "getGameAmount(uint256)", +"c205afd4": "deferredTotalTokens()", +"c205e64c": "revokeInsertAgentAuthorization(address)", +"c20615ed": "ownerWithdrawn()", +"c20652fe": "setApiAddress(address)", +"c2083f55": "lacksFunds()", +"c2091d0e": "getPatron(uint256)", +"c209fbe9": "change_notice(string)", +"c20a20d6": "setBlipTokenAddress(address)", +"c20a6ae9": "EDMToken(address,uint256)", +"c20c0f3a": "betsForLevel(uint256)", +"c20c1d9b": "newWithdrawCommission(uint256)", +"c20dcbf7": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"c20e346f": "unFrozenToken(address,uint256)", +"c20ec5dc": "numberOfFriends()", +"c20f966b": "Utcoin()", +"c2108a92": "calculateBalance(uint256,uint256)", +"c210c623": "getKeys(uint32)", +"c21191ae": "GechainCoin()", +"c2127e03": "getMyShrimp()", +"c212bad5": "dropModule(string,bool)", +"c212cffa": "NUGOLD()", +"c2134b23": "addRecoverer(address)", +"c215290a": "frozenUntil(address)", +"c215e800": "currentSubRound()", +"c2161c31": "getStringHash(string)", +"c2168ecd": "removeMintContract(address)", +"c216c0d3": "addCredits(address)", +"c217a724": "spendWithGasAndData(address,uint256,uint256,bytes)", +"c217c0e1": "ClickGemTokenERC20()", +"c2190c94": "registerSettlement(uint64,address,address)", +"c219c28c": "votingTokenAddress()", +"c219d326": "getData_14()", +"c21aa2e4": "PoHarj()", +"c21ab7f9": "createToken(address)", +"c21abf05": "tatalEthFromBuyer()", +"c21afa55": "MintingManagerRevoked(address)", +"c21afe12": "schedulePriceUpdatesRolling(uint256,uint256,uint256)", +"c21bbe56": "SetupDone()", +"c21c45e3": "iconRate()", +"c21c5ee1": "fixSpecications(bool)", +"c21c9c21": "validEvent()", +"c21d0204": "SetEvaluate(bytes32[],uint8,uint64[])", +"c21d5ab7": "setNode(address)", +"c21db033": "removeSupplier(address,address)", +"c21de274": "transferReverseProxyThirdParty(address[],uint256[],uint8[],bytes32[],bytes32[])", +"c21e5712": "makeLiquidCor()", +"c21ea693": "retraitStandard_3()", +"c21ec92c": "getAssetIpfs(uint256)", +"c21ed112": "genesisVirus()", +"c21fb125": "SpecificApproval(address,address,uint256)", +"c21fcffb": "DIYTubeCoin()", +"c2205ee1": "_authority()", +"c22082ab": "EveryCoin(address,uint256)", +"c2222b80": "claimSubscriptionDeposit(uint256)", +"c222ef6d": "periods(bytes32)", +"c2234f67": "CONVERSION_DENOMINATOR()", +"c2235e74": "getTotalAmountOfChatMessages()", +"c2236b26": "setICO3Phase()", +"c2239daa": "setselfdropamount(uint256)", +"c223f557": "stopRedeeming()", +"c2248877": "getBarCodeDataCount(bytes32)", +"c2248c22": "changeOldTokenReward(address)", +"c2250a99": "transferStoreOwnership(address)", +"c225752c": "OneChanceCoin(string,string,uint8,address,address)", +"c22598d2": "BitClemm()", +"c225bf03": "resetContractDeploymentDate()", +"c226d279": "setMiniPoolEdit_7(string)", +"c226d9ee": "doTest()", +"c2276090": "settleBet(bool)", +"c227cee0": "shutThatShitDown()", +"c2289576": "AddTitle(uint256,string,string,string,uint256)", +"c228bcc6": "getFillVolumes(bool,bytes,uint256,uint256)", +"c2299e33": "shutdownMarket(bytes32)", +"c22a146c": "Unlock(address,string,bytes32)", +"c22a933c": "setBaseDeposit(uint256)", +"c22ab4e0": "reservedWallet()", +"c22af7ff": "ComputeBuy(uint256)", +"c22c4f43": "services(uint256)", +"c22d6c3c": "setArenaInterface(address)", +"c22f0ee2": "transferManagers(address)", +"c22f1c54": "_initializeAccount(address,address,uint256,uint256)", +"c22f8250": "updateStandard(bytes4,bytes4)", +"c22fc384": "exitScam()", +"c2304c4a": "addExplicitPosition(uint32,int64)", +"c2314be4": "CONFIG_FEES_DIV()", +"c231bace": "setMigrationTarget(address)", +"c232209e": "_verify(address,string)", +"c2328516": "disablePrivateFund()", +"c2329e5f": "_isNotOnSale(uint256)", +"c233e870": "isLatestPatchTree(bytes32,bytes32)", +"c2353918": "getCount(uint256)", +"c2356d23": "mintChest(address,uint16,uint24,uint24,uint8,uint8)", +"c235a5c7": "getGameStart(uint256)", +"c235e858": "VendorInterface(address)", +"c2362dd5": "lastEpochBlock()", +"c23693e0": "multiAccessRequired()", +"c23697a8": "check(address)", +"c236cc66": "GeneralUpdate(uint256,uint256)", +"c2370a62": "openGameResult(uint256,string)", +"c237898d": "getOwnerBalanceInMilliTokens()", +"c2381296": "beginPwn()", +"c2385fa6": "right78(uint256)", +"c238999b": "dislikeTrack(address,bytes32)", +"c239dfe0": "PermissionAdded(address)", +"c23a25ba": "getRoundBetOrigin(uint256,uint256)", +"c23a7427": "createMultipleWikiPages(string[])", +"c23a9e84": "getuserinverst()", +"c23b4b5b": "bountyShare()", +"c23c87d5": "play(bool)", +"c23da3a9": "initialSaleEndDate()", +"c23de962": "DefaultActionCalled()", +"c23e1cea": "SaleTokens()", +"c23ec301": "KSScidTOKEN()", +"c23f001f": "balances(address,address)", +"c23fed45": "setEscapeRequest(uint32,int256,uint32)", +"c2407089": "CursedToken()", +"c2410a69": "lockCostPerHour()", +"c2412676": "Token()", +"c2427f76": "getBidID(address,bytes32,uint256,uint256,uint256,uint256)", +"c242afaf": "bet(uint256,uint256,uint256[],uint256,address,bytes32)", +"c243431e": "AnalyticProxy()", +"c24366f0": "setKYCProvider(address)", +"c243bdee": "isHolderOwnAddress(bytes32,address,address)", +"c24504b7": "internalBuyTokens(address,address,uint256)", +"c245c1bc": "ownerBurnToken()", +"c2473378": "consortiumPlaceholder()", +"c247620d": "getArtistInfo(address)", +"c2490a67": "removeCardOwner(uint64)", +"c24924d6": "setQueryFee(uint256)", +"c2494dbf": "transferOnWallet()", +"c24962f4": "calculatePercentageToRelease(uint256)", +"c24977cf": "testPrivate()", +"c2498be6": "conjureAirdrop()", +"c24a0f8b": "endDate()", +"c24a8908": "token_airdrop_cnt_max()", +"c24a9674": "finalizeLastRound()", +"c24ad463": "Refundpot()", +"c24becf3": "getLastTier()", +"c24c153d": "addRound(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c24d316e": "UNITDummyPaymentGateway(address)", +"c24de0e4": "halvingSubsidy(uint256)", +"c24dec82": "TOKEN_BUSINESS()", +"c24e1fc1": "issuedSupplyRatio()", +"c24fe21b": "transferLockup()", +"c2502d34": "claim_price_money()", +"c2506eee": "setO3(address)", +"c2507ac1": "getTokenAmount(uint256)", +"c2507ef7": "_createPanda(uint256,uint256,uint256,uint256[2],address)", +"c250a312": "active_withdrawable()", +"c250ef46": "refSystem(uint256,address)", +"c25193ad": "lcm(int256,int256)", +"c251a4e9": "G2Ufund()", +"c252ca75": "getBonusPercent(address)", +"c252d844": "rest_time()", +"c253400b": "RPS(address)", +"c2535bf0": "COOLCOIN()", +"c254e4db": "SFT()", +"c2552497": "impl_mining(address,bytes)", +"c255343e": "targetUser()", +"c255fa40": "updateTotal()", +"c255fb17": "getRefBalance(address)", +"c25615c0": "joinOneLottery()", +"c256d578": "getLastAuctionWinsDate()", +"c256ea58": "get_receiverCryptobank(uint256)", +"c2571a0a": "percUp(uint256)", +"c2572c51": "advisorsAndPreICO()", +"c2577661": "getBallotPapper(uint256,uint256,uint256)", +"c257c851": "calculateEtherReceived(uint256)", +"c257eabb": "etherPaid()", +"c257f3ab": "getNumberOfShipsByOwner()", +"c258ff74": "List()", +"c2596b1e": "getDragonPrice(uint256,uint256)", +"c25a796e": "setHardcupFalse()", +"c25ab8b0": "iOSCoin()", +"c25acada": "Bithereum()", +"c25ae09f": "EthealNormalSale(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"c25b345a": "VivekRohitVibhayToken()", +"c25c22ee": "stageTokenMul(uint256)", +"c25cf1d0": "changeLockPeriod(uint256)", +"c25d0ac1": "tgeSettingsPartInvestor()", +"c25e6908": "ultimateOutcomes(bytes32)", +"c25f1901": "addThing(bytes32,string,string,string)", +"c25f1afe": "SponsorAdded(address)", +"c25f75fc": "pantry()", +"c25fe1a4": "changeHoldingTax(uint256)", +"c2606d99": "BITTECHToken()", +"c2608314": "getJntBeneficiary()", +"c260f681": "IsBoilerValid(uint256)", +"c2610cda": "SecretNumber()", +"c26181e0": "censorUser(address,bool)", +"c2619a5a": "AdministratorAdded(address,address,bool)", +"c26298a7": "getBalanceOfResidualBcoupons()", +"c262a33b": "preSaleCloseTime()", +"c262b912": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256,string,int256)", +"c262df45": "isKnownRequest(address,address)", +"c26317d1": "RoundRevealStarted(uint256,uint256)", +"c26381f2": "limitETH()", +"c264786f": "pauseBlockNumber()", +"c264a063": "withdrawExcess()", +"c264a77c": "setSettleTimeout(uint256)", +"c2656473": "CROWDSALE_LIMIT()", +"c265a6c0": "KRCPreSaleContract(uint256,address,address)", +"c26613d5": "LogRebalance(address,bytes32,string,uint256,uint256,uint256)", +"c2664609": "submitStackholderTransaction(address,bool)", +"c2674780": "freecommunitycoin()", +"c2676e39": "VAToken()", +"c267e4b8": "previousWeiBalance()", +"c26875a4": "calculateCellBuySimple(uint256)", +"c268e777": "setDailyHourLimit(uint8)", +"c268e93f": "recordShareholders(address,address,uint256)", +"c269014b": "getMemberId(address)", +"c2695a25": "Rivercoin()", +"c2699b1d": "getFirstBuyLimit(bytes32)", +"c269f263": "PRETDESupplyRemaining()", +"c26a331d": "bonusProvider()", +"c26aa3c9": "lockUnicorn(uint256)", +"c26b41e7": "totalUETsSold()", +"c26b7ce9": "CashTelexToken()", +"c26b93df": "vote(uint80,uint256)", +"c26bacd1": "removeDriver(address)", +"c26c12eb": "getQuorum()", +"c26c7472": "addTimeToExpiry(uint256)", +"c26c84ec": "setBI(bytes32,int256)", +"c26d0412": "ethRate1()", +"c26d0c2c": "emitWorkPaused(uint256,uint256)", +"c26d69e1": "OnePercentGift()", +"c26d7daa": "startGladiatorBattle(uint256)", +"c26dd189": "jade(uint256)", +"c26fe7ce": "releaseVestedTokensFor(address)", +"c270cbeb": "BtcThumb(uint256,string,uint8,string)", +"c270ce28": "rdCollectorAddress()", +"c270d7cb": "getPlayerRoundWinningInfo(uint256,address)", +"c2710949": "calcValuePerShare(uint256,uint256)", +"c2714a97": "addBRA(address)", +"c271ca90": "numMomentsOf(uint256)", +"c2722ecc": "getStore()", +"c2723d2e": "token_transfer(address,address,uint256,bytes)", +"c272f73e": "burnSignature(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"c27382d9": "buyAndPlayGame(uint256,uint256,address)", +"c273b05f": "spentParsecs()", +"c27509cf": "investDirect()", +"c27549d9": "setRemainders(uint256,uint256)", +"c276086f": "createProducer(bytes32,uint256,bytes32)", +"c2761031": "k(uint256,uint256)", +"c2765b77": "setLegalToken(address)", +"c276963f": "tabsOneEthCanBuyICO()", +"c2769b11": "renounceVesterManager()", +"c276dce3": "internalForward()", +"c2775347": "haltsTrades()", +"c2777ce3": "currentEtherRateInCents()", +"c277f1ac": "fromId(uint256)", +"c277fe56": "pause(bool,string)", +"c2783ee5": "viewCrowdSaleLive(bool,bool)", +"c2784966": "TkoWhitelist(address)", +"c279d042": "product4_sell()", +"c27a65c1": "changeEthPriceQueryDelay(uint256)", +"c27a74d0": "catOwners(uint256)", +"c27b1ed9": "getConversionRateFactor()", +"c27b2c2d": "collectEarnings()", +"c27bc67c": "configureKeys(uint32,int256,bytes32,bytes32,uint32,bool)", +"c27bc7b2": "fortifyClaims(address,uint16[],uint256,bool)", +"c27c327e": "changeNewRubesUntilPayout(uint256)", +"c27cabb5": "proposalFee()", +"c27d1580": "getNorsefirePrice()", +"c27d607b": "lastEvidence()", +"c27d7721": "create(uint256[101][])", +"c27e7398": "getLockedTimeUserInfo(address,address)", +"c27fc305": "f1()", +"c280541c": "buy(uint256,address,bytes32)", +"c2808d1a": "MinSum()", +"c2812f74": "triggerMinCap()", +"c281309e": "feeTake()", +"c28196b1": "addImmigration(address)", +"c281a013": "FinalizableCrowdsale(uint32,uint32,uint256,address)", +"c281d19e": "cbAddress()", +"c283226d": "reclaimTokens(string,string)", +"c2832430": "withdrawForfeited(address,uint8,address)", +"c2843a14": "addInviterValue(uint256,uint256,address,address)", +"c2844c60": "emitJobRatingGiven(address,address,uint256,uint8)", +"c2844ebf": "isCustomerAlreadyRegister(address)", +"c2845184": "SUPPLY_FOR_REFERAL()", +"c284ab55": "eLYQD()", +"c284cdc5": "GetDescript(string)", +"c2852f38": "pauseContract(uint256)", +"c2856ca9": "presoldMax()", +"c285a245": "preferredSaleTLYperETH()", +"c285daf9": "Xoflife()", +"c286ba5b": "unfreezeAccountTimeAndValue(address)", +"c286f3d9": "SetLockAddress(address)", +"c287820a": "kittensSold()", +"c287fa72": "calcDiviDistribution(uint256,uint256)", +"c288ab9d": "getUserCurrentMartialId()", +"c288eeee": "nowPeriod()", +"c2897b10": "stand()", +"c289adfa": "getAssetPrice(uint128,uint128)", +"c289dbe8": "first_withdrawal(uint256)", +"c28a56f1": "checkReceiptProof(bytes32,bytes,uint256[],bytes,bytes)", +"c28a9157": "bullsmasterReq()", +"c28aafb1": "addWallet(address,string)", +"c28b4369": "giftCard(uint256,address)", +"c28b4577": "setPermissionById(uint8,bytes32)", +"c28bfe5a": "testFailCreateSameIpfsHashAndNonce()", +"c28c770a": "getLockedTokensPerUser(address)", +"c28cedf3": "DEMO()", +"c28d38a8": "STARTING_SEEDS()", +"c28d5644": "LogMinSell(address,uint256)", +"c28db642": "tocancel(uint256)", +"c28dbc38": "grantAccessForToken()", +"c28de2cd": "upgraded()", +"c28e5022": "collectAndUpdate(address[])", +"c28e6e39": "ReducingSupplyCoin()", +"c28eab85": "setMinimumTokenSell(uint16)", +"c28ec9d7": "respondToChallenge(uint256[9],bytes,bytes32[],bytes,bytes32[],bytes,bytes32[],bytes,bytes,bytes32[])", +"c28f57ca": "ICOSaleStart()", +"c28f812c": "getPaycarnita()", +"c28f8e09": "icoFunded()", +"c28f9df1": "requestVestingTrusteeOwnershipTransfer(address)", +"c290367f": "playDiceCombinations(uint256,uint256,uint256)", +"c290d691": "pay(uint256)", +"c291ad27": "Notify_Number(string,uint256)", +"c291bf6d": "AuthDapps(address,bool,int256,bool,bool)", +"c291df56": "affPercent_()", +"c29224ea": "roundFailedToStart()", +"c292aae3": "McrForGasFailed(address,uint256)", +"c2930f91": "baseUnit()", +"c29338cf": "cozyTime(uint256,uint256,address)", +"c293fc0a": "SetBankerPrincipal(uint8,uint256)", +"c29402f1": "relistGenesisSales(bytes32,uint256)", +"c2944f69": "_multiSendOwner()", +"c2944f7a": "registHolderStep(address,uint8,address)", +"c294c93b": "getSANOwner(uint256)", +"c2954ff4": "Sent(address,uint256,bytes)", +"c2955bdf": "setUserBlacklistedStatus(bool)", +"c296302a": "transferRoot(address)", +"c296f721": "_buyLandForCandy(address,uint256)", +"c29721e0": "sendArena(address[],uint256[],uint64)", +"c297fa0f": "DEFAULT_DURATION()", +"c2985578": "foo()", +"c2992300": "setCreatePrice(uint256)", +"c29988db": "distributeEbyte(address[],uint256)", +"c299a394": "getNextRank(address)", +"c29a6fda": "setERC20(address)", +"c29d350f": "startTimeOf(address)", +"c29d9d74": "startMultipass(string,string,string,string,string,uint256,address)", +"c29e8863": "setImplementation(bytes32,bytes32,address,bytes32)", +"c29fb94a": "transferFokenIssued(uint256,uint256)", +"c2a029f0": "setID_control(uint256)", +"c2a15dbb": "_currentIcoPhaseBonus()", +"c2a15e7e": "votingEndsInHHMM()", +"c2a24b33": "Post(address,string,string)", +"c2a2747b": "p1()", +"c2a2916d": "nameAddress(string)", +"c2a33485": "setReg3(uint256)", +"c2a394cb": "AuctionSuccessful(uint256,uint256,address,address,uint256)", +"c2a48c70": "revokeUserRole(bytes32,string,address)", +"c2a49237": "memberSellToken(uint256)", +"c2a5e5c2": "setTwitter(string)", +"c2a63e3b": "getEmployeeCount()", +"c2a88340": "Deactivate()", +"c2a8ec80": "betStats()", +"c2a95cc9": "updateTrustSettings(address,uint256)", +"c2a960a1": "signSendFlower(bytes32,string,string,address,string,bytes16,uint256)", +"c2a96ce5": "EscrowVault(address)", +"c2a98b41": "mymethod(uint256,string)", +"c2aaf9c4": "receiveEth(uint256)", +"c2ab66dd": "hasAttribute1ButNotAttribute2(address,bytes32,bytes32)", +"c2ac0b4a": "intMax(int256)", +"c2ac3aff": "addEth()", +"c2ac481c": "disaToken()", +"c2acc5cf": "mintTokens(address[],uint256[])", +"c2add678": "getLockerInfo(address)", +"c2adf34a": "bonusWeiAmount()", +"c2ae1a53": "sendTransaction(bytes32,uint256,int256)", +"c2ae7e14": "approvePaillier(address,string)", +"c2aeb355": "GRAMATON()", +"c2b06664": "setDS(address)", +"c2b0c743": "payETHToProvider(address,address,uint256)", +"c2b12a73": "setBytes32(bytes32)", +"c2b2fb5e": "editionExists(uint256)", +"c2b373a7": "seedHash()", +"c2b41ac4": "updateMinimumStakingTokenPercentage(uint8)", +"c2b4470c": "FINLAB_PRESALE()", +"c2b477a7": "mintLimitByTemplate(uint256)", +"c2b4ab4d": "getCountBonus(uint256)", +"c2b4ddde": "setFundingEnabled(bool)", +"c2b6b58c": "isClosed()", +"c2b70850": "QuantiModoToken()", +"c2b7be16": "addSupportedToken(address,address)", +"c2b8fd12": "MYRN()", +"c2b98295": "balanceOfNonKYC(address)", +"c2ba4744": "canMint(address)", +"c2ba5b40": "getPackageData(string)", +"c2ba857e": "setJobAccepted()", +"c2baa882": "tokensPerCHF()", +"c2bc2efc": "get(address)", +"c2bdb862": "verifyProofOfTransitionAgreement(address,uint64,uint256,bytes32,uint256[2],bool,bytes32,bytes32,uint8)", +"c2bf17b0": "recover(bytes32,uint8,bytes32,bytes32)", +"c2bf1af7": "freezingStatus()", +"c2c06f20": "OldRopeToken()", +"c2c13a70": "LOCKUP_WALLET()", +"c2c3bd6a": "_v()", +"c2c4a328": "getInitPrice(bytes32,uint8)", +"c2c4abe6": "ASSPToken()", +"c2c4c5c1": "checkpoint()", +"c2c5143f": "bobMakesEthDeposit(bytes32,address,bytes20)", +"c2c52055": "ChampionGameStarted(uint256,uint256)", +"c2c546b8": "sumICOStage6USD()", +"c2c5b9f1": "setInt(string,int256)", +"c2c5ec41": "isValidProof(bytes32,string)", +"c2c5f89f": "BonusAwareCalculator(address,address)", +"c2c61d01": "agreeToTrade(address)", +"c2c62562": "setCrowdsaleData(uint256,uint256,uint256)", +"c2c68ee1": "unlockTrading()", +"c2c7ca1d": "extraTokensMintedDuringPresale()", +"c2c7ff0a": "ToperCoin()", +"c2c8fd40": "increaseWorldLimit(uint256,uint256,uint256)", +"c2ca058d": "clearBlacklistMapping()", +"c2cb88bd": "giftMessage()", +"c2cb9927": "reward(address,uint256,uint256,string)", +"c2cba306": "TokenAddress()", +"c2cbb299": "airdrop_auto(address,address)", +"c2cca62c": "TransferMinersReward()", +"c2ccb8a8": "isCurrentAccountMinter(address)", +"c2cd0e01": "issueNewCoins(address,uint256,string)", +"c2cd7632": "isEmployee(address,address)", +"c2cdaf24": "start1BonusPeriod1()", +"c2cdbf01": "SyloToken()", +"c2cf7326": "hasConfirmed(bytes32,address)", +"c2cf9bbb": "PotPotato()", +"c2d0916f": "moveMetadata(address,address)", +"c2d15d21": "totalIssuanceLastAverageBalance()", +"c2d23e41": "continuousBacking()", +"c2d25167": "closeIcoOne()", +"c2d37428": "withdrawForWinner(uint256)", +"c2d415e2": "Chicken()", +"c2d4160a": "GetEvaluate(uint256,uint8)", +"c2d42ef2": "removeAccount(uint256)", +"c2d4423f": "excludeWhale(address)", +"c2d4489f": "provider2()", +"c2d4f851": "calculatePrice(uint256,address)", +"c2d526aa": "_rank(uint256)", +"c2d53eb4": "initOwner()", +"c2d560ab": "stopOraclize()", +"c2d5baf9": "JJL()", +"c2d83718": "randomTeam()", +"c2d83e61": "UserPool(address,address)", +"c2d86376": "NewDonor(address,uint256,uint256)", +"c2d8de54": "promisor()", +"c2d936d9": "MINATOKU()", +"c2d9c196": "preico_startdate()", +"c2da621b": "setMeterPoint(address,int256)", +"c2dab162": "mineit(address,uint256)", +"c2db0482": "getUnionIdByAddress(address,address)", +"c2db26fc": "unverifyAccount(address)", +"c2db2c42": "purchaseToken(uint256)", +"c2db5890": "breedAxies(uint256,uint256,uint256)", +"c2db8676": "BloodToken()", +"c2db9e25": "getMinerHalvingHashRate()", +"c2dc0470": "KilledTillNow()", +"c2dc9af4": "hardCapHash()", +"c2dcdfb4": "preferredSaleTokensLeftForSale()", +"c2dced85": "numberDecimal18()", +"c2de2909": "drawRandomWinner()", +"c2de89b7": "getCleide()", +"c2def3b9": "getOrganizer()", +"c2df8815": "Adnity()", +"c2e0af44": "doMove(address,address,uint256)", +"c2e12f21": "setDefaultTranches(bytes32[])", +"c2e171d7": "Save()", +"c2e26adb": "bulkPay(address[],uint256,address)", +"c2e28dd1": "setTitulaire_Compte_8(uint256)", +"c2e2a338": "withdrawRejected()", +"c2e2a33e": "setPermanentLimitForType(uint32,uint256)", +"c2e3460d": "Anxxia()", +"c2e4601a": "getAffiliateRate(uint256)", +"c2e46379": "transferBountyTokens(address[],uint256[])", +"c2e4b8fb": "TokensUpgradedFrom(address,uint256)", +"c2e52206": "getPlayerCount()", +"c2e55da3": "product3_pot()", +"c2e5d950": "finalizedRefund()", +"c2e5ec04": "setTradingEnabled(bool)", +"c2e5feb5": "KeyReplaced(address,address)", +"c2e62675": "COTToken()", +"c2e78f12": "deVerify(address)", +"c2e800ed": "isContractProxy(address)", +"c2e88185": "CyberMusicToken()", +"c2e9fab3": "SubUser()", +"c2ea2f9c": "halfCentury(address)", +"c2ea5c9e": "getInvArray()", +"c2eaaeb3": "computeTxFee(uint256)", +"c2eac875": "secure(uint256,string)", +"c2eb10a2": "makeBundle(uint256)", +"c2ecdf8e": "ownerCMIT()", +"c2ed2b05": "documents(uint256)", +"c2eddfd2": "kyberMultiSigWallet()", +"c2edec0b": "setCharityDonation(uint256)", +"c2ee0a57": "getBlockList()", +"c2ee3a08": "ONE()", +"c2eef08e": "stopLandEthSale()", +"c2f02b33": "Crowdsale7(address,uint256,uint256,uint256,address,address)", +"c2f0bb29": "getCardDetails(uint16,uint8,uint256)", +"c2f0c083": "angelOnLeaderboard(uint64)", +"c2f0d93f": "icoAbandoned()", +"c2f0dbe2": "claimPremium(address[2],uint256[7],uint8,bytes32[2])", +"c2f137f1": "swapAddr()", +"c2f3ce10": "ADDRESS_LIMIT()", +"c2f3d788": "read_total_number_of_purchases()", +"c2f415b5": "CTBoatGame(address,address,uint256)", +"c2f490e9": "caller_()", +"c2f4976f": "setRoundFinalScore(uint16,bytes32)", +"c2f4faf4": "TestOrder(address)", +"c2f61a9f": "setOraclizeQueryType(string)", +"c2f666a3": "PriceIncrease()", +"c2f7c50a": "FindID(address)", +"c2fa6697": "fundraiserCallData()", +"c2fa8b2d": "PoetToken()", +"c2faa691": "Constructor(uint256,string,string)", +"c2fb538e": "updateFactoryContract(address)", +"c2fb8f36": "TinyHuman(address,address,address)", +"c2fbe7bc": "transferFees()", +"c2fc048a": "transferOwnerToProxy()", +"c2fcbf37": "isValidateParameter(string,uint256)", +"c2fce718": "getPartsOfOwnerWithinRange(address,uint256,uint256)", +"c2fd0263": "isTripleNumber(uint256)", +"c2fe2022": "getFollowers(address)", +"c2fe3321": "PRE_ICO_ON()", +"c2febe49": "QuantorToken()", +"c2febef5": "removeCountry(uint256)", +"c2ff0f15": "NewShare(string,bool,string)", +"c2ff3334": "jump(uint256)", +"c2ff7a38": "adjustBalanceCheckpoints(address)", +"c2ffc7bb": "slates(bytes32,uint256)", +"c2fffd6b": "setCancelFee(uint256)", +"c30096ef": "calculationTeamsRewards(uint256[])", +"c3017200": "removeAssociatedAddress(uint256,address,address)", +"c3027525": "getOwned()", +"c302a45b": "crowdsaleStopped()", +"c302f747": "poolPresale()", +"c30354cb": "VUP_TOKEN_SUPPLY_TIER3()", +"c30381b9": "setSellCourse(uint256)", +"c303c3d5": "returnEtherToInvestors()", +"c303c53a": "withdrawForTwoStep()", +"c304b368": "updatedRandom(string)", +"c304ffc4": "CreateICE(address,uint256)", +"c3059c63": "buyUpgradeCard(uint256)", +"c306834e": "PRIVATE_SALE_LIMIT()", +"c306cb90": "sendDevTokens()", +"c30715d1": "setNumRewardsUsedForAddress(uint256,address,address)", +"c30718e8": "testIntParser()", +"c3077c10": "settxpct(uint256)", +"c307f6ba": "withdrawWbtToken(address,uint256)", +"c3082e95": "playerOutputAtNow(address)", +"c308f55b": "fallback(uint256,address,uint256)", +"c30a990a": "createPaymentChannel(address,uint256,uint256)", +"c30b06e8": "allMultitokens()", +"c30b182e": "sendVNET(address,uint256)", +"c30b8867": "maxPercentPerPlayer()", +"c30bc5ef": "breedWith(uint40,uint40)", +"c30bf4d8": "CodeEligible()", +"c30c0c0c": "checkUsers(address,address)", +"c30d0ee4": "phiRate()", +"c30dafd8": "_setTittyForSale(bool,uint256)", +"c30df14c": "logPurchase(address,uint256)", +"c30df586": "ZAI()", +"c30e9767": "canReceive(address,address,bytes32,uint256,bytes)", +"c30ed0a4": "Getwsic(uint256)", +"c30f4a5a": "updateURI(string)", +"c31028dc": "hasFirstUnionIds(bytes32,bytes32)", +"c31051fe": "teamPeriodLength()", +"c31053f7": "NNT()", +"c310b9df": "ProposalAdded(uint256,uint256,string,bytes32)", +"c311a3cd": "GetHoga(address,uint32)", +"c311d049": "withdrawEth(uint256)", +"c312d468": "sendPToken(address,uint256)", +"c312ffed": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c31422ac": "calculateTokens(address,uint256)", +"c3143fe5": "setUserCap(address,uint256)", +"c31453a7": "_unpackAttackParams(uint256)", +"c3146814": "pegETHUSD(uint256)", +"c3153834": "prefixedRecover(uint8,bytes32,bytes32,address)", +"c315432a": "isGameStarted()", +"c3155201": "XulCrowdsale(uint256,uint256,uint256,address)", +"c31592af": "getY(bytes)", +"c315a082": "KRT()", +"c3169ef2": "respond(uint256,uint256[4])", +"c316c98b": "updateCollector(address)", +"c3173774": "balanceThreshold()", +"c317464d": "CryptoHearthStone()", +"c31752c0": "getEmployerJobs(address,uint8)", +"c3182360": "getTimeBonus(uint256)", +"c3191f31": "readWelfareAddress(uint256)", +"c3192c82": "getcurrNumOfUpgrades()", +"c319618f": "getAllMyPackageIds()", +"c31989ed": "TronGold()", +"c319a02c": "right98(uint256)", +"c319e412": "allowContribution()", +"c31a0972": "OrpheusRoyalSiamRailways()", +"c31ad7dc": "voteYes(string)", +"c31b29ce": "GAME_DURATION()", +"c31bb2fb": "XEPToken()", +"c31bb8d6": "percentToTakeAsRake()", +"c31c0b62": "isSaleComplete()", +"c31c5221": "approveSetTokenControlInfo()", +"c31c6855": "presaleBonusTokensClaimed()", +"c31ce93e": "getExchangeGroups()", +"c31ceb2a": "numberOfAttendees()", +"c31d0031": "CrowdFundDAO(string,uint8,string)", +"c31d309a": "addRequestorAddress(address)", +"c31d3a6d": "payInvestors()", +"c31d3e8e": "maxPublicSale()", +"c31e0547": "quickConverter()", +"c31e6ee0": "sendTokensToService(address)", +"c31f3537": "removeBotAddress(address)", +"c31f586d": "cancelSaleAuction(uint256)", +"c31fa083": "setIpfs(string)", +"c32011f0": "unfreezeTeamRecepientBlock()", +"c3204954": "confirmTransactionByMediatorFee(uint256)", +"c320c727": "setRegistrationFee(uint256)", +"c3210eb7": "proposeCount()", +"c3218f50": "startPreICO(address)", +"c321dc18": "showParticipantWei(address)", +"c32221cf": "_newRepo(string,address)", +"c32377df": "recevoirApprobation(address,uint256,address)", +"c3237ff4": "emitFeePeriodClosed(uint256)", +"c32426c9": "ProvideToken()", +"c324606a": "confirmStakeholderTransaction(uint256)", +"c324a669": "purchaseSoldiers(uint256,uint256)", +"c325ae4e": "belongsToUser(address)", +"c3262dfd": "setUserID(bytes32)", +"c3283d83": "getStrandContract(uint256)", +"c32863a7": "every15()", +"c32935d7": "getBuyPriceTimesByTime(uint256)", +"c329e4a5": "BoardAddressChanged(address,address,address)", +"c32a4369": "getAllSamplesForOwner(address)", +"c32a4c7e": "returnCoke(uint256)", +"c32a50f9": "setSeed(uint256)", +"c32a6f6d": "toUint(string)", +"c32a88ae": "recoveryPaymentDigest(bytes32,uint256)", +"c32a8edf": "someMethod1(uint256,uint256,uint256,uint256)", +"c32a9b00": "do_grant_tokens(address,uint256)", +"c32aaa86": "getNameWriterId(bytes32)", +"c32b8683": "creatorRequestFundTransfer(uint256,address,uint256)", +"c32c1e65": "setOperations(address)", +"c32cc6d5": "investFor12Months(address,uint256,uint256)", +"c32ceb14": "setQueryIdForAddress(bytes32,address)", +"c32d88bb": "changeDepositAmount(uint256)", +"c32d946d": "performTransfer(address,address,uint256,bytes)", +"c32dee3a": "second_bonus_amount()", +"c32e16e7": "REQUEST_CANCELED_BY_LENDER_STATUS()", +"c32e2b42": "SalesAgentRemoved(address)", +"c32ee591": "isTransferAllowed(address,address,address,address,uint256)", +"c32f6945": "MiningLevelup(address,uint256,uint256)", +"c32fb5ea": "getNewAllowancePeriod()", +"c32ff491": "ServerManager()", +"c3310517": "reservedTokensDestinationsLen()", +"c3315b4b": "EasyInvest25()", +"c3328816": "TeamAdvisorsWallet()", +"c3332621": "shippingDate()", +"c3332732": "setNextGame(uint256,uint256,uint256,uint256)", +"c3336c0f": "transferMultipleSame(address[],uint256)", +"c3340892": "LogStateChange(uint8)", +"c334447b": "bytes32ToTokenId(bytes32)", +"c334e875": "payByErc20(uint256)", +"c334ea8f": "setMateAdvertisementRate(uint256)", +"c3351b88": "getParticipantExternalId(bytes32)", +"c3354632": "_premoveByIndex(uint256)", +"c335f0a4": "RKGToken()", +"c336937d": "Revoked(address,address)", +"c3369b0d": "issueTokens(uint256,uint256,uint256)", +"c336e7fb": "NobelToken()", +"c3380b72": "getDefense(bytes32,bytes32,uint256)", +"c33818fd": "Controller_Address2()", +"c338287f": "getUSDPrice()", +"c33890ff": "StartNewIteration()", +"c3392f25": "PRCT100_R_TEAM()", +"c33a4cc8": "PresaleUpdated(uint256,uint256)", +"c33a5bb6": "RLCPerETH()", +"c33a66e0": "updatePriceEDEX(uint256)", +"c33a800b": "createHeldCoins()", +"c33aa7fe": "submitBid(string)", +"c33af352": "_getFunc(uint256,uint256,uint256,uint256)", +"c33b76c6": "rakeAddress()", +"c33bbe47": "LAM()", +"c33cfe36": "KolkhaToken(uint256)", +"c33db789": "_triggerFinishTournament()", +"c33df4ba": "getNumOfRickHolders()", +"c33e1844": "BTMC()", +"c33e40a3": "setBasePoints(uint256)", +"c33e4942": "definition(bytes32)", +"c33fb877": "process()", +"c3403ddf": "endVoting()", +"c34052e0": "contains(uint256)", +"c341031a": "Testereum()", +"c341b9f6": "freezeAccounts(address[],bool)", +"c3430bce": "validWhiteListedPurchase(address)", +"c3434883": "buy(uint256,uint256,bool)", +"c3437e06": "approvedBuyer(address)", +"c3440022": "WhitelistedAddress()", +"c34492a7": "buyTokensByOptions(address,uint256,string)", +"c344bc47": "HonestisNetworkTokenWire3()", +"c344bc4a": "REALCrowdsale()", +"c344cdd2": "offerOptionsConversion(address)", +"c34588ba": "countOfDeeds()", +"c3458d18": "callRecipient(address,address,address,uint256,bytes,bytes,bool)", +"c345b571": "_subDai(uint256,address)", +"c345c54b": "doSafeSend(address,uint256)", +"c3462818": "PFC(address)", +"c34764cf": "makerWithdrawERC20Token(address,uint256)", +"c347fe1f": "addCET4(uint32,uint32,uint32)", +"c3492908": "BASE_TIME_TO_COOK()", +"c3496529": "setVesting(address[],uint256[])", +"c34a253a": "cardFacevalue(uint8)", +"c34b6ae0": "setFreeTransferAllowed(bool)", +"c34ba3e9": "createPromise(address,uint256,uint256)", +"c34c08e5": "executor()", +"c34c27ad": "SendOwner()", +"c34c4417": "registerData(bytes)", +"c34c6b93": "getDateInfo(uint256)", +"c34d2732": "MAX_COMMIT_DURATION_IN_SECONDS()", +"c34da17c": "isBurned()", +"c34db131": "CSCPreSaleManager()", +"c34dd141": "percent_reduction()", +"c34de22d": "genKeysRec(uint256,uint256)", +"c34debc7": "updatePlayerWin(address,uint256)", +"c34e6e1b": "OnlyWhiteListedAddresses(address)", +"c34ef9af": "second_bonus_duration()", +"c34f1fea": "UnfreezeAmount(address,uint256,uint256)", +"c34f6b0d": "getPrize()", +"c34f783d": "allocateToken(address[],uint256[],uint256[])", +"c34f869b": "Voted(uint256,bool,address,string)", +"c34fb5ca": "canonizedParameterizer()", +"c3500745": "refundLockDate()", +"c3501ff6": "redeemToken(uint256,address)", +"c3502510": "UsdPerEthChanged(uint256,uint256)", +"c3508d58": "refundByOwner(address)", +"c350bbb6": "RoscaERC20(uint256,string,string)", +"c3513132": "accessTokenFee(uint256)", +"c351fd77": "setGasPricePctOfBetValue(uint256)", +"c351fdfd": "setBatchNumber(address[],uint256[])", +"c3521b1a": "wolkFund()", +"c352dae2": "getWalletInfo()", +"c352fbda": "grantMarketingCoins(address,uint256)", +"c353a89e": "changeMember(address,address)", +"c353c2de": "unPauseTokenSale()", +"c353dbb1": "EtherPluscoin()", +"c3542cad": "SaleStageUp(int256,uint256)", +"c3548647": "setActivationFee(uint256)", +"c35506c0": "upgradingEnabled()", +"c355b107": "cNiceGuy()", +"c355eaf0": "setEthlanceSponsorWalletContract(address)", +"c35740f9": "partner2_name()", +"c3576b41": "setOwnersCommission(uint256)", +"c35774a1": "setApproval(address,uint256[],bool)", +"c35789cc": "Close()", +"c3584d88": "getMaxEtherToInvest()", +"c358ced0": "isRevealPhase()", +"c359a2a4": "increaseContribution(address,uint256)", +"c35a4d46": "DubaiGreenBlockChain()", +"c35ac080": "modificaCurso(uint256)", +"c35c08bd": "getCrowdsourcer(bytes32)", +"c35c3265": "novumAddress()", +"c35cabf4": "littClientId()", +"c35d1e01": "RESERVE_TOKENS()", +"c35dcf90": "getWhitelists()", +"c35e1b33": "MSERToken(uint256,string,string)", +"c35ef892": "getWriteTimestamp(bytes32)", +"c35f4bbb": "calculatePrimordialMultiplier(uint256,uint256,uint256,uint256,uint256)", +"c3602ee5": "delayedRequest(string,uint256)", +"c36086f0": "initTransaction(address,uint256)", +"c360c616": "TittyPurchase(address,address)", +"c3615e39": "set_address(address,address)", +"c36360f2": "limit8()", +"c36433e2": "createPromoDrug(bytes32,address,uint256,uint256)", +"c3645759": "increaseDistrictWeed(uint256,uint256)", +"c364a25d": "setHash(uint16,bytes32)", +"c3650a21": "danserviceTeamAddress()", +"c36572d6": "hasEnded(uint256)", +"c3657f96": "setBoxCount(uint16,uint16)", +"c365a646": "_setRiskParameters(uint256,uint256)", +"c365d4f0": "initWidth()", +"c36604ed": "secretNumber()", +"c3662528": "isApproved(bytes32,uint256,bytes)", +"c3663271": "Icoends()", +"c366b1d3": "BulkToken()", +"c3676a02": "mangeWhileList(address,bool)", +"c367ec17": "rewardAuditor(uint256,address,uint256)", +"c36800eb": "IdentityCreated(address,address,address,address)", +"c368109c": "monster_hp(uint256)", +"c3681e3d": "change_p3(uint256)", +"c3682ace": "time_end_sale()", +"c36851bc": "bidOnWonder()", +"c3685e89": "addMessage(address,string,string)", +"c3689f01": "testControlSetNotRetractableNotOwner()", +"c368b160": "disbursement()", +"c36981f4": "withdrawNacNetfReController(uint256,address)", +"c369c0c6": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"c36a7b45": "getUserTotalEthVolumeSaldo(address)", +"c36ad8a6": "deleteStar(uint256)", +"c36af460": "getLatest()", +"c36c0155": "get_planet_info(uint256)", +"c36c09e2": "setTrustedSender(address)", +"c36ccedc": "approve(address[16],address,uint256)", +"c36de353": "Ethereumt()", +"c36de531": "smallestUnitName()", +"c36e6fe5": "XclusiveCoin()", +"c36e9546": "SVL()", +"c36ff164": "claimFoundationToken()", +"c36fff2d": "availableOptions(uint256)", +"c37067fa": "donate(bytes32)", +"c370b0b5": "BbeCoin()", +"c370c86d": "setTokenName(address,string)", +"c370d8fe": "ExpandandHarvest(uint256)", +"c3720290": "giveSignOff()", +"c37210f4": "getDocumentSign(uint256,uint256)", +"c3722b1f": "AutoSell()", +"c3736dfa": "_shiftRight(bytes32,uint256)", +"c3737054": "changeManagerQuorum()", +"c373c0ef": "setStartDate(uint32)", +"c37479b4": "mintForwarder(uint256,bytes32,address[],int256,address)", +"c3751729": "mGenerateTokens(address,uint256)", +"c375ba8a": "getLavaPacketTypehash()", +"c375c2ef": "removeContract(address)", +"c3762904": "ethraised()", +"c37792b5": "generateSecurityToken(string,string,string,bool)", +"c3780a3a": "myFunction()", +"c3787865": "balanceFromToken(uint256)", +"c378a83b": "EarthToken()", +"c378ea76": "getFrom(uint256)", +"c378f1af": "RemoveAll()", +"c37981b3": "maxFixedSupply()", +"c37991e3": "ProposalEnd(uint256,string)", +"c37a676c": "acceptMins(uint256)", +"c37a6e8d": "signer1_proposal()", +"c37a832d": "getRoundUserBalance(uint256,address)", +"c37b0aa7": "modifyPriceCountry(uint256,uint256)", +"c37b85a6": "assignIndices(address[])", +"c37bcb1e": "unlockDate1()", +"c37cb1ae": "airdropsTokens(address[],uint256[])", +"c37cdcfe": "doDisputeMemoryRead(uint256,bytes32,uint256)", +"c37d1c8b": "tokensToMint(uint256)", +"c37d8a7e": "indexReplies()", +"c37d9044": "create(uint8)", +"c37db253": "isNotZero(bytes32,string)", +"c37dfc5b": "fillOrder(uint256,uint256)", +"c37e7379": "distributePresale(address)", +"c37e74c7": "getRet()", +"c37e8cb2": "testExportAuthorized()", +"c37e8f11": "additionalCurrency(address,int256)", +"c37f68e2": "getAccountSnapshot(address)", +"c37f7f7f": "doTransferIn(address,address,uint256)", +"c37ff3d9": "sha(uint256,uint256)", +"c3800257": "Addmember(string,address,address,uint256,bool,uint256,bool)", +"c3800fdc": "CurrentToken(address)", +"c3801938": "getStateRoot(uint256)", +"c3830618": "reduceStake(uint256)", +"c3834d89": "setPromo(address,uint256,uint256)", +"c383b1bb": "summon10SkinAppearance(uint256,uint128)", +"c383e020": "endContract(address)", +"c384521f": "tokenCapPhaseTwo()", +"c384b170": "teamWallet2()", +"c3858e82": "unregisttIcoAddress(address)", +"c38672a0": "confirmTokenTransaction(uint256)", +"c38678c3": "addBuildingToServer(uint256,uint8[10],uint8[10],uint8[10],bytes32[10],uint8)", +"c386ff7d": "checkFunction(bytes32,uint256)", +"c38789ba": "example(uint256,address)", +"c387b2a7": "BatchTransferContract(address)", +"c3886f61": "checkWithdrawal(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"c3888bce": "transferTokenToMultiple(address[],uint256)", +"c388c167": "setNameAndTicker(string,string)", +"c388cca6": "testBitAndFailIndexOOB()", +"c38a0306": "devFeeHandle(uint256)", +"c38a0fcb": "MGLTOKEN()", +"c38a8afd": "minimumBet()", +"c38ad273": "priceETH()", +"c38ad65b": "getHeroPostAddres()", +"c38bb537": "setPauseStatus(bool)", +"c38c0fa7": "getParentPayoutDistributionHash()", +"c38c5813": "registerAdmin(address)", +"c38c9800": "innerContract(string)", +"c38caab5": "setPost(string)", +"c38e52c0": "deletePeerReview(address)", +"c38e650f": "changeRoundManager(address)", +"c38f0741": "snapshotDailyGooResearchFunding()", +"c38f1abf": "waitTokensPeriod()", +"c391c1b5": "updateOwner(address,address,uint256)", +"c391d581": "getXPROMO_MULTIPLIER()", +"c392079f": "removeCoin(string)", +"c392cf41": "reveal(address)", +"c392f118": "getSellingStatus(uint256)", +"c392f5a0": "getAllPackageReleaseHashes(string)", +"c39387ad": "checkAndUpdateStage()", +"c3946909": "setTheKingsQuote(string)", +"c394f6cb": "unclaimedTokens()", +"c39513af": "setDeprecated(string,address)", +"c395546c": "authorizedToSpend()", +"c395a16b": "leaderBid()", +"c395f336": "processPurchase(uint256,uint256)", +"c3964372": "startRound(uint256,uint256)", +"c3966409": "endProject()", +"c397ae1b": "holosForWei(uint256)", +"c39804ac": "generatePreimage(uint256,uint256,uint8)", +"c39899c1": "isDeadline(uint256)", +"c398a925": "supportsERC165(address)", +"c398f030": "expire(uint256,uint8,bytes,bytes,bytes)", +"c399330d": "getBonusByTime()", +"c399d7c5": "getAccountTokenStats(address)", +"c399ec88": "getDeposit()", +"c39a9d97": "crowdSaleType()", +"c39afb0b": "BitcoinEther()", +"c39b79d4": "_contains_(address)", +"c39cb03f": "ERC827Token(uint256,string,string)", +"c39cbef1": "changeName(uint256,string)", +"c39ce8b6": "FranklinFrank()", +"c39cf53d": "nextrafflenumber()", +"c39e7394": "addAuctionReward()", +"c39ffc65": "GVFX()", +"c3a07df6": "getPermissions()", +"c3a0ba73": "BlockFilesManagement()", +"c3a11c51": "etherPriceInUsd()", +"c3a151de": "getPlayedGamePlayers()", +"c3a18dec": "PRIVATE_SUPPLY_ADDRESS()", +"c3a1e7cc": "totalWEIInvested()", +"c3a25c4c": "computeCntrAmountUsingPacked(uint256,uint16)", +"c3a267b7": "createEthGlobalDelegation(address,address)", +"c3a2a665": "retrieve(address,uint256)", +"c3a2a93a": "getContracts()", +"c3a2c0c3": "scheduleCall()", +"c3a3017d": "issueMasterCardNumber(address,address,uint256)", +"c3a34e1c": "timeTillImpact()", +"c3a35825": "getUint(bytes32,string)", +"c3a39544": "initialCompanysTokenAllocation()", +"c3a3ee80": "setPartsToSell(uint256,uint256)", +"c3a48741": "distributeTKLN(address[],uint256)", +"c3a4ebf5": "_roundOver()", +"c3a4f8b5": "hibit(uint256)", +"c3a5fc4d": "IconFoundation()", +"c3a62a68": "getDate(bytes10)", +"c3a69a75": "dividendsDistributor()", +"c3a6e2a7": "disableToken(bool)", +"c3a74e6a": "placeSellFciOrder(uint256)", +"c3a83aab": "getTokensAvailableToMe(address)", +"c3a869e6": "goldenTicketPrice(uint256)", +"c3a8da5f": "EthereumMark()", +"c3a8f536": "rsub(uint128,uint128)", +"c3a9b1c5": "sayHello(string)", +"c3a9bd8b": "maximumTokens()", +"c3a9be6b": "setLimitGame(uint256,string)", +"c3a9c930": "Gift(uint256,address,address)", +"c3aa0fe6": "setItemLimitHolding(uint256,uint256)", +"c3abe888": "sendBatch(address[])", +"c3ac93df": "QCOToken(address,address,address,address,address,address)", +"c3ad5ecb": "getTweet(uint256)", +"c3ae43a0": "buy100tickets()", +"c3aea22e": "fillSellOrder(uint256)", +"c3aeacdf": "changeRules(address)", +"c3aebdd1": "s5(bytes1)", +"c3aedd92": "updateIsVerifiedInBulk(address[],bool[])", +"c3af38fa": "changeInfoUrl(uint256,string)", +"c3af702e": "totalfv()", +"c3b0f915": "KickToken()", +"c3b1037b": "ownerSetGasPrice(uint256)", +"c3b18fb6": "updateSplit(uint256,uint256)", +"c3b18ff2": "totalSupplyICO()", +"c3b1d52b": "recipientToGiftIds(address,uint256)", +"c3b1ff93": "acceptGame(address,uint256,bytes32)", +"c3b24be0": "Leg()", +"c3b2556d": "lookup(bytes)", +"c3b2d337": "_initialSupply()", +"c3b3271d": "updateStar(uint256,string,string)", +"c3b35a7e": "withdrawTo(address,address,uint256)", +"c3b3c656": "kickOutGroup(address,uint256)", +"c3b4db25": "setSeller(uint256)", +"c3b55635": "log(string,bool)", +"c3b57af8": "getStageAmount(uint256,address,address)", +"c3b66bed": "getProposalVotersCount(uint256)", +"c3b6f939": "mToken()", +"c3b7572c": "updateCommission(string,uint8,uint8)", +"c3b75b8f": "setLockProductActiveState(uint32,bool)", +"c3b7e378": "startTimeStage2()", +"c3b8bfe5": "transferIfNoHF(address)", +"c3b909d7": "progressiveId()", +"c3b91d15": "AiBank()", +"c3b9741b": "ModifiedCrowdsale(uint256,uint256,uint256,address)", +"c3b9e2ed": "powerWithModulus(uint256,uint256,uint256)", +"c3b9f21e": "p4()", +"c3ba2368": "transferERC721(address,string)", +"c3ba65e7": "totalChicken()", +"c3ba7574": "mintForFund(address)", +"c3ba938d": "JPY_Omnidollar()", +"c3bb68cf": "weisPerEther()", +"c3bb8feb": "releaseSell(uint256)", +"c3bcb586": "soldKeys()", +"c3bd0bae": "CapLevelPrice()", +"c3bdc16f": "setUserRole(address,bytes32,address,uint8)", +"c3be259f": "ConnectiusToken(uint256)", +"c3be3c24": "_updateTopUpAvailable()", +"c3be6e8d": "SetStartTimeTLP1(uint256)", +"c3be8df3": "addAff(uint256,bytes32)", +"c3bea9af": "createGen0Auction(uint256)", +"c3bf32e3": "numberOfHeroClasses()", +"c3bf504a": "extractEth(uint256)", +"c3c0198c": "getAssesByOwner(address)", +"c3c0befb": "dumpPrize()", +"c3c132b2": "_indexProofId(string)", +"c3c1d4c7": "withdrawTokensTo(address)", +"c3c2686c": "preSaleWallets(uint256)", +"c3c2f066": "block(bytes32)", +"c3c357f9": "tokenSaleCompleted()", +"c3c5026c": "depositWEI()", +"c3c503b7": "becomeBankermaster()", +"c3c51aca": "cancelSellTokenOrder(uint64)", +"c3c563f4": "validateAmount(uint256)", +"c3c59aa9": "walletTimeOf(address)", +"c3c5a547": "isRegistered(address)", +"c3c5b40e": "setSaleAddr(address)", +"c3c63edc": "mintBadge(uint256)", +"c3c6e202": "indexLastThreads()", +"c3c6f0c9": "getCustomerTxTimestampPaymentKWh(address,bytes32)", +"c3c735cb": "BITDRIVE()", +"c3c74c45": "applyForCertification(string,string,address,string,string,uint256)", +"c3c75e5c": "setEditionPackSize(uint8,uint8)", +"c3c88a1d": "disableTransfer(uint256)", +"c3c8c12b": "setVipInfo(address,uint256)", +"c3c90e64": "checkReward(address)", +"c3c95c7b": "getMarket(bytes32)", +"c3ca3c6a": "SingularityTest3()", +"c3cad5e7": "senderMIT(address)", +"c3cb4159": "getICOBonus()", +"c3cb50ed": "setTileType(uint16,bytes32)", +"c3cb8c14": "finalizeVault()", +"c3cbc2c9": "offerSacrifice()", +"c3cbd341": "create(address,uint256,address,address)", +"c3cd9996": "CLASS_AQUATIC()", +"c3cdb4af": "getMinimeCheckpointSlot(uint256,uint256)", +"c3ceb939": "view58()", +"c3cfe00f": "EEB(uint256,string,uint8,string)", +"c3d014d6": "setContent(bytes32,bytes32)", +"c3d08f06": "setPermissionByAddress(uint8,address)", +"c3d0a20a": "NewToken(address,string,string)", +"c3d0a564": "getAccountBalance(bytes)", +"c3d23e10": "checkBet()", +"c3d2c355": "setKey(bytes32)", +"c3d32e56": "PixelCore()", +"c3d345c4": "getHangoutAddress()", +"c3d38586": "newCookie()", +"c3d4d75a": "getCommitHash(bytes32,address)", +"c3d54c9a": "paiementConfirmation(bytes32,bytes32)", +"c3d55adc": "calculateBuyGoldFee(uint256,uint256)", +"c3d58d95": "runICO()", +"c3d59369": "setIcoDiscountPercentages(uint8,uint8,uint8,uint8)", +"c3d5fd39": "getAdminInfo()", +"c3d68a85": "temporaryKill(address)", +"c3d69d03": "NatureX()", +"c3d7ad74": "sendPurchasedTokens(address,uint256)", +"c3d7e350": "removeAccount(uint256,address)", +"c3d8c099": "endICOStage5()", +"c3d97a27": "carsCount()", +"c3d9820d": "RefillOraclize()", +"c3d9c4b4": "share(uint256)", +"c3da42b8": "c()", +"c3da5153": "getEthartArtReward()", +"c3daab96": "withdrawBond(uint256)", +"c3dac9a1": "time_bought()", +"c3db397f": "unstakePartialContent(bytes32,uint256,uint256,bytes8,uint256)", +"c3db5ead": "Uruntest()", +"c3dc0083": "finishDeal(uint256,uint256)", +"c3dc1040": "orderInternal(uint256,bytes32)", +"c3dd2395": "maxCapEur()", +"c3de1ab9": "gamePaused()", +"c3de7cbf": "checkRedemptionWindow(uint256,uint256)", +"c3ded82a": "toUint96Throw()", +"c3dee67f": "updateAllHoldersShareInfo()", +"c3defb70": "changePause()", +"c3df99b6": "upvoteComment(bytes32,bytes32,bytes32)", +"c3dfb938": "countFortunes()", +"c3dfbeea": "migratePresaleBalances(address,address,address[])", +"c3dfdae6": "gameToken()", +"c3e017c2": "dNextStage(uint32)", +"c3e053ac": "percentBuyBackTypeTwo()", +"c3e06be9": "changeReceiveWallet(address)", +"c3e0ae67": "future_round_percentage()", +"c3e0bbad": "getContentByName(string)", +"c3e1d25c": "percentsOfProjectComplete()", +"c3e2087c": "setManagementCompany(string)", +"c3e27948": "setTrueUsdFastPause(address)", +"c3e2f26e": "icoedAmount()", +"c3e38ae9": "setSEKU(uint256)", +"c3e3908c": "get_pre_kyc_bonus_numerator(address)", +"c3e3c7bc": "teamTokens()", +"c3e50027": "dealConfirm(uint256)", +"c3e58eec": "blackListSectorExists(uint8[])", +"c3e6ea31": "BONUS1()", +"c3e8fb40": "smartToken()", +"c3e92f9e": "DrawLottery(string,uint256)", +"c3e93fa3": "depositHelpe(uint256)", +"c3ea0fca": "promoEthCommission()", +"c3ea901d": "uint2ToStr(uint256[2])", +"c3eb0723": "LogNewSecurityToken(string,address,address,address,uint256,uint8)", +"c3edb4c2": "finalizeChangeInsuranceFees()", +"c3ee6311": "lockAndCall(string)", +"c3eed29a": "reinvest(uint256,address)", +"c3ef473c": "ShareHolderVoted(address,uint256,bool)", +"c3ef586a": "Gambit()", +"c3ef83fc": "executionTimeOf(uint256)", +"c3f010f7": "numGames()", +"c3f03fb8": "querySpecialRateForAddress(address,address)", +"c3f07ba7": "addTokenAddresses(address[])", +"c3f0dad9": "isGenerator()", +"c3f17ae8": "getAmountToIssue(uint256)", +"c3f1a710": "getInvestment()", +"c3f1b0ea": "changeRequest(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", +"c3f3310b": "tokensOfFounder(address)", +"c3f34a50": "Dao(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"c3f3b854": "maxNumBets()", +"c3f44c0a": "relayMetaTx(uint8,bytes32,bytes32,address,bytes,address)", +"c3f51fca": "initMintable(address,address,uint256,uint256)", +"c3f53e94": "ownerClaimTokensAndRefundForUser(address)", +"c3f59687": "transferMastership(address)", +"c3f6263f": "charityCutOf(uint256)", +"c3f67cde": "withdrawSecond()", +"c3f6e09c": "sendOnlyHash(string)", +"c3f7ec97": "addLog(bytes)", +"c3f7f169": "safeSend(uint256)", +"c3f843d7": "minVeriAmount()", +"c3f84c05": "retribution(uint256,address)", +"c3f90202": "f4()", +"c3f909d4": "getConfig()", +"c3f9409f": "signBitcoin(bytes32,uint8,bytes32,bytes32)", +"c3fa4f27": "sendPowerToken()", +"c3fa5f93": "BlockScheduler(address,address)", +"c3fb31a4": "coolDungeon()", +"c3fb5e5f": "createVestFundFor(address,uint256,uint256,uint256)", +"c3fb90d6": "_storage()", +"c3fbc632": "ICORunning()", +"c3fc4787": "finalizeFork()", +"c3fdbef8": "totalInSharedPool()", +"c3fe3e28": "game()", +"c3ff05d1": "getBoxCountZIndex(uint8)", +"c3ff3878": "checkForValidChallenge(address,uint256)", +"c401a2a3": "destroyforproduction(uint256)", +"c401d6b0": "totalTokensToSupply()", +"c4021c13": "topupEnergyByToken(address,uint256,uint256)", +"c4026d7b": "removeDev(address)", +"c402e446": "Express_Satisfaction_MediatedTransaction(uint256)", +"c403adc8": "changeInSale(bytes32,bytes32,uint256)", +"c403cf6d": "RESERVED_TOTAL_AMOUNT()", +"c403f90f": "airdropTime()", +"c4041bc5": "viewauction(uint256)", +"c4043465": "MYEXCTOKEN()", +"c404b3f6": "currentTranche()", +"c4052559": "haraKiri()", +"c4052a78": "airLiftPrice()", +"c4057e61": "getData_4()", +"c40580de": "removeOwners2()", +"c405b1f0": "addJob(address,uint256,uint256)", +"c405d30e": "send2marketing(address,address)", +"c405e11b": "_addAnswerToHistory(bytes32,bytes32,address,uint256,bool)", +"c4069caf": "getPlayersByTrackId(uint256)", +"c406d4af": "getPixelToken(uint24)", +"c407670f": "donorCount()", +"c4076876": "pay(address,uint256)", +"c407c6d8": "chop(string)", +"c4085bf6": "_sell(address,uint256,bytes)", +"c4086893": "getLockedBalance(address)", +"c408efba": "isMigrationPhaseOpen()", +"c40940f4": "pricePerUnicorn()", +"c409ad08": "exec(bytes,bytes,address[])", +"c40af29f": "tokenTeamSupporter()", +"c40b276b": "hasString(string[],string)", +"c40b4c4d": "minSumPreICOUSD()", +"c40b716c": "setLLV_edit_14(string)", +"c40b8868": "changePresale(address,uint256[])", +"c40b8dcf": "usdToHavPrice()", +"c40bdc05": "_requestLoans(address,uint256)", +"c40cf4eb": "memberContract()", +"c40d19a5": "getAddressSize()", +"c40d4163": "ArthToken(uint256)", +"c40d62fe": "OrpheusBlockChainCitySiam()", +"c40dc8ec": "deadline(uint256)", +"c40fdc94": "Delisted(uint256)", +"c40fec3a": "forceOffsetExecuteFeeRate()", +"c4109843": "OrdersMatched(bytes32,bytes32,address,address,uint256,bytes32)", +"c4109d48": "baseTokensAllocated()", +"c411e4d4": "canCancel(uint256)", +"c4128b6d": "upgradeCount()", +"c4130ae0": "registerEvent()", +"c413af2e": "setPreICOPhase()", +"c413fdf3": "testPayout()", +"c414dede": "tablets(address,uint256)", +"c41518f2": "luckyYouToken()", +"c41559bb": "ETHbalanceOf(address)", +"c415b95c": "feeCollector()", +"c4163518": "isMining(address)", +"c4164365": "investBalanceMax()", +"c4166ea8": "OBGAllocation(address)", +"c416a0d7": "emergencySetBBFarm(uint8,address)", +"c41728a7": "sectorOwnerCut()", +"c4173548": "preSaleRaised()", +"c417becd": "RCToken()", +"c4184def": "BCBToken()", +"c418c8c9": "TradeToken(address,string,string,uint256,uint256)", +"c418c93e": "addOnStage(address,uint256,uint256)", +"c4198161": "setParameters(address,uint256)", +"c41a360a": "getOwner(uint256)", +"c41a9892": "bet2()", +"c41a9dfe": "has_joined()", +"c41addb5": "newModerator()", +"c41b0ae7": "getNumberOneArg(address,bytes4,address)", +"c41c19dc": "trackContributions(address,uint256)", +"c41c33af": "submitChallengeOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"c41c3bde": "setBuyingTime(uint256,uint256)", +"c41c9a61": "transferERC20Tokens(address,address,uint256)", +"c41e1d4f": "MAX_NUM_NAVITOKENS()", +"c41efe08": "getBestSale(bytes32)", +"c41f48a3": "DinosaurFarmer2()", +"c41f4cc0": "takerStatus(address)", +"c41f9482": "getDateTime(uint256)", +"c41fbbb5": "addFounder(address,uint256,uint256)", +"c420928d": "EncryptoTelToken()", +"c420f7fe": "getPlayerShipModelById(uint64)", +"c421249a": "sui()", +"c4215398": "publicSaleAddress()", +"c4218d33": "oraclizeBalance()", +"c421fa8e": "updateCrowdfundState(uint256,address,uint256)", +"c421fc6b": "currentStageData(uint8)", +"c422293b": "finishIssuance()", +"c422d09b": "ConfirmOwner()", +"c422ed19": "addFreeBet(address,uint256)", +"c4236cdc": "catchStarters()", +"c4254c7b": "CoreWallet()", +"c4255d61": "addZeroTest()", +"c4259e2e": "changeOwnerInfo(uint256,uint256,string,string,string,string)", +"c4264738": "refundSafe()", +"c426b1e5": "showDepositEther(address)", +"c426c3e2": "getExtendedAttributesForPlayer(uint256)", +"c426fbb6": "setCrowdsaleStartBlock(uint256)", +"c4270574": "userRollDice(uint256,address)", +"c42791ae": "setBountyOwner(address)", +"c427a68b": "ExtremeSetupToken()", +"c427af9b": "outcomeAmounts(address,int256)", +"c427e699": "getContractsOf()", +"c42882e3": "getEarlyAccessKitsRemaining()", +"c42890b6": "setCastleContract(address)", +"c4290b76": "getAmountWithdrawal(address,bytes32)", +"c42956d3": "nextExchangeRateIndex()", +"c4298f89": "ACL(address)", +"c429e4a3": "TEAM_ALLOWANCE()", +"c42a0716": "erc20(string,string,uint256,uint256)", +"c42b372d": "openAutoFree(address)", +"c42b5fe1": "registerExternal()", +"c42bb1e4": "contract_eth_value()", +"c42bd05a": "newToken()", +"c42c237a": "CortexCoin()", +"c42c9905": "register(bytes20,uint32,int24[4],int24[4],uint32[4],bytes32[])", +"c42cb819": "goldBoxAmountForSale()", +"c42cce7e": "total_tickets()", +"c42cd8cf": "etherSplit(address,address)", +"c42cf535": "setGovernor(address)", +"c42e04c0": "etherOne()", +"c42e1ace": "TKP()", +"c42ed894": "getRoundTargetBlock(uint32)", +"c42edd61": "payFeesToggle()", +"c42edf88": "leveRage()", +"c42f61d3": "RhodoToken(address)", +"c42fd368": "RateChanged(address,uint256,uint256)", +"c4305a55": "windowBonusMin()", +"c430bcda": "whitelistInvestor(address)", +"c43147c1": "InitializeManifesto(string,string,uint256,bool,bool)", +"c43148ca": "makeProposal(string,uint256,uint256,uint256,uint256,address,address)", +"c4319bd8": "AgreementHashEn()", +"c431f885": "addToContribution()", +"c4321adb": "investInTheSystem(uint256)", +"c4329ae5": "totalChangedPixels()", +"c433793d": "removeWhiteListedAddress(address)", +"c433e8ca": "remainMintTokenAmount()", +"c4342252": "latestScheduledUpdate()", +"c434650c": "_checkOrder(address)", +"c4359c1b": "marketSeeds()", +"c435ae0c": "setMaxGoal(uint256)", +"c435d26f": "GREMToken()", +"c435d2ac": "publishedTokenOfOwnerByIndex(address,uint256)", +"c435d68e": "numberOfContracts()", +"c4366149": "optionBalance(bytes32,address)", +"c4373c05": "tickRequiredLog(uint256,address,uint256)", +"c43782e0": "ZipToken()", +"c437b951": "BytechTechnology()", +"c43821aa": "issuanceCurrentBalanceSum(address)", +"c43823e1": "jsonKeyExists(string,string)", +"c4387936": "edgePigmentB()", +"c439af4f": "WAVEliteToken()", +"c43a6a79": "returnsTwoNamed(uint256,uint256)", +"c43aa319": "startTime_()", +"c43ae983": "GROWTH_BUMP()", +"c43b7934": "stagePrice(uint256)", +"c43bb538": "requestOwnershipTransfer(address,bytes32)", +"c43c633b": "traderBalances(address,address)", +"c43c9e12": "addTokenAdmin(address,address)", +"c43d0575": "scheduleCall(bytes4,uint256)", +"c43d56bb": "changelp4(address)", +"c43d9ac9": "TCETest()", +"c43e0e72": "_withdraw(address,address)", +"c43e9462": "getRoundNumber(uint256,uint256)", +"c43eb0e0": "getAvatar(bytes32)", +"c43ed2c8": "update(bytes)", +"c43f22c4": "isInvestorAllowed(address)", +"c440008e": "foundersFund()", +"c4400ed4": "getProfit(uint8,uint256)", +"c4405fa7": "_getMaxRarityChance()", +"c44088fd": "rewardUnitsRatePerYear()", +"c440e875": "dedeNetworkAddress()", +"c44193c3": "offerPunkForSale(uint256,uint256)", +"c44237dc": "EventUpgradeShip(address,uint32,uint8)", +"c4426a88": "arbitrate(address,address,bytes32,bool)", +"c44299c7": "preAlphaPrice()", +"c4432f31": "P3DAddress()", +"c443a99a": "MicoinNetworkToken(uint256,string,string)", +"c44412e3": "revokeBonusCreditOf(address,uint256)", +"c4453bd0": "getPlayerMinions(uint32,uint8)", +"c4454980": "fundManually(address,uint256)", +"c4457e47": "load(uint8[],uint256,uint256,uint256,bool)", +"c445e2ef": "RedPillToken()", +"c4468f69": "setNewPotWinner()", +"c4477a11": "Banknote(address,uint256)", +"c4479812": "batchMultipleAmount(address[],uint256[])", +"c44828be": "totalAllowance(address,address)", +"c4489110": "BUYOUT_PRICE()", +"c448fa85": "isExtraDistribution()", +"c44a2a10": "ownerCredited()", +"c44b0290": "setLockPostion1(address,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8)", +"c44b10d9": "payoutOdds()", +"c44c2efd": "burnPLUTUSTOKEN(uint256)", +"c44cb8fc": "viewTotalPayoutToPlayer(address)", +"c44cd4df": "sendReaction(address,int8,string)", +"c44ced7e": "ozr()", +"c44d36ee": "protectedTransfer(address,uint256,bytes32)", +"c44d6f87": "PAPER()", +"c44dcaca": "draw(uint256,address,uint256)", +"c44e6640": "getAuctionCount()", +"c44e787f": "sideBetPay(bytes32)", +"c44f7864": "getRemainingTimeInSecond()", +"c450a08a": "queryLockedTokens(address)", +"c450a25f": "unfreeze_contract()", +"c450d98b": "getCommunityReputation(address)", +"c4522c92": "removeStaff(address)", +"c45250c8": "icoRound3()", +"c45330b4": "remainingTotalBonuses()", +"c453cdd4": "getMyVines()", +"c4543386": "TUIToken()", +"c4545e6d": "_replaceModule(address)", +"c4552791": "proxies(address)", +"c4561d61": "finishICO()", +"c456354e": "setEndTimeStamp(uint256)", +"c4569504": "getKudosOf(address)", +"c456d394": "getPixelPrice(uint256)", +"c4576525": "WEC()", +"c457fb37": "getTokenPrice(uint256)", +"c45849c2": "doDistribution(uint256,address,uint256)", +"c458e5f3": "CrowdForceTestToken()", +"c4590d3f": "setLimits(uint256,uint256)", +"c4596419": "mintSoldTokens(address,uint256)", +"c45982b9": "madd(uint128,uint128)", +"c459b003": "ATTR_PERMANENT()", +"c459b9e3": "MaxStarIndexAvailable()", +"c45a0155": "factory()", +"c45a4047": "batchTrasfer(address[],uint256,uint256)", +"c45a6f98": "unlockMultiple(address[])", +"c45aa04c": "queryShareholders(bytes,uint256)", +"c45ad06a": "etherSince50()", +"c45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", +"c45bb448": "MIX()", +"c45c4f58": "balance1()", +"c45cda5a": "init_fund()", +"c45d19db": "tokensToBeReturned(address)", +"c45d32cf": "getRemainingBytesLeadingZs(uint8,bytes)", +"c45d3d92": "conversionWhitelist()", +"c45d5fcb": "TwoStageCrowdsale(uint256,uint256,address)", +"c45d8af4": "getWinIndexFromHash(address,bytes32)", +"c45d8c8b": "Gryphon()", +"c45ddd87": "targetDiscountValue4()", +"c45df8e5": "COSIGN_MAX_TIME()", +"c45e4a7b": "SwiftDex()", +"c45ec88c": "Put(bytes32)", +"c45ef547": "offlineDiscipleSold(uint256,address,uint256)", +"c46073f7": "LUCYD()", +"c46093de": "_0xMonacoinToken()", +"c46180a7": "setBalanceOfActiveToken(address,uint256)", +"c461889e": "OkLive(uint256,string,string)", +"c4618978": "MIN_INVEST_ACTIVE()", +"c4620549": "quaker(address)", +"c4626ea7": "PumpHodl()", +"c4628520": "cashoutEOSBetStakeTokens(uint256)", +"c462a408": "maxParticipantCount()", +"c462bd11": "setupRules()", +"c46362fd": "set_merge_mint_threshold(uint256)", +"c463a1af": "CapitalMatchToken()", +"c463b008": "triggerTransferEvent(address,address,uint256)", +"c464fe65": "sellTokens(address,uint256)", +"c465e742": "UpdatedTokenInformation(bytes32,bytes32)", +"c466313c": "GetMainSale()", +"c4664649": "FIXEDREWARD_MM()", +"c4666fab": "transferNodeContractOwnership(address)", +"c467706d": "startEarlyAdopters()", +"c467a317": "freezeTeam()", +"c467b0ff": "_play(uint256,uint256,uint256,uint256,uint256)", +"c4694ec6": "ecoSupply()", +"c4697667": "BONUS_WL()", +"c469eb99": "deleteFromWhiteList(address,address)", +"c46a23a2": "signedAverage(int256,int256)", +"c46a2925": "setMinApprovalCount(uint256)", +"c46a3a0d": "icoPhase1EndTime()", +"c46a6262": "playEtherOf()", +"c46aaf38": "PharmaGenome()", +"c46b2d9d": "denyBundling()", +"c46b644b": "NewTicketEvent(address,uint8,uint8,uint8)", +"c46c3c68": "RuffToken()", +"c46cacae": "initial_time()", +"c46ce53e": "getOneTotalFeesCollected(uint256)", +"c46d2235": "serverEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", +"c46d4cf1": "thawAccountTransfers(address)", +"c46df008": "walletData(address)", +"c46e3e85": "unitGooProduction(uint256)", +"c46e614a": "isCMCT()", +"c46ed45a": "fee_percentage()", +"c46f3e25": "lastChanceEnabled()", +"c4701037": "aaa(bytes)", +"c47028c1": "TOKEN_RATE_CROWDSALE()", +"c47031ab": "getKarma()", +"c470ff6d": "getInsideCallCount()", +"c4716d0f": "contributedCap(address)", +"c4725577": "getPrice(uint256,uint256,uint256,uint256)", +"c472c7e6": "setTotalWithdraw(address,uint256,address,bytes,bytes)", +"c4735121": "thirdRoundTime()", +"c4740a95": "removeAccount(address)", +"c4749079": "_roundDivision(uint256,uint256,uint256)", +"c4749bbd": "showInvestBalance()", +"c474e70a": "returnFundsForMultiple(address[])", +"c4752773": "priceStep3()", +"c475abff": "renew(uint256,uint256)", +"c475cdf5": "issueNew(uint256)", +"c476dd40": "reportMalicious(address,uint256,bytes)", +"c477d234": "checkIfAlreadyOrderedForDay(uint256,address)", +"c4784fd4": "setMsg(string)", +"c4788efe": "resetTotalVotes()", +"c478b52f": "PLATINUM_AMOUNT_TPT()", +"c478fc37": "EtherWheel(uint256,uint256,uint8)", +"c4791421": "changeCooldownEndTime(uint40,uint40)", +"c47958e2": "ERC20(string)", +"c479ace6": "updateOwners(uint256,address,address[],uint256,uint8[],bytes32[],bytes32[])", +"c47af5cf": "ChangeCost(uint256)", +"c47af732": "setReserved(address,bool)", +"c47bc007": "add_funds()", +"c47c4cc7": "getInitialBalanceByAddress(address,address)", +"c47cf5de": "getAddress(bytes)", +"c47d5bb8": "unitsUserCanBuyLimitEth()", +"c47e7bcb": "softcap3Reached()", +"c47e951f": "adjust_eth(uint256)", +"c47e9fea": "ContributionRefund(uint256,address)", +"c47ef875": "activeTokens()", +"c47f0027": "setName(string)", +"c47f0f90": "getPurchases()", +"c47fae76": "autoPlayBot()", +"c47fc244": "grantInvestorsTokens(address[])", +"c48029d4": "AddTokensToMember(address,int256)", +"c4806df4": "createTokenOwner()", +"c480e583": "revertTransfer(address,uint256)", +"c4811a0e": "maxICOThirdSupply()", +"c4813b2c": "StgOnebonusEnds()", +"c4815c96": "teamAdvTokens()", +"c4818ae1": "joinPillar(uint256,uint8,uint256)", +"c4818cdc": "_balanceOf(address,address)", +"c482299f": "transferAUTOtokens10(address[])", +"c482ceaf": "reinit()", +"c4834c30": "teamTotalSupply()", +"c483b71c": "Map(address)", +"c483befa": "setParameters(address,string,string,string,address,uint256,uint256)", +"c4841369": "paymentsByPurchaser(uint128)", +"c4843365": "getRarity(uint32,uint256)", +"c48513a4": "getStringConstant()", +"c485297b": "HelloSystem()", +"c48590e9": "PARTNER_SUPPLY()", +"c485ac95": "setWalletForTokens(bytes32,address)", +"c486301b": "AcceptsExchange(address)", +"c4864f45": "changeAcceptExchange(bool)", +"c4868452": "preIcoActive()", +"c486d133": "round1InitialBonus()", +"c4871039": "totalWeiRaisedDuringPhase2()", +"c4882e44": "disableRound0()", +"c488847b": "liquidateCalculateSeizeTokens(address,address,uint256)", +"c488d6f2": "stopOffering()", +"c489744b": "getTokenBalance(address,address)", +"c489a649": "updateAirdrop(address)", +"c48a0dc0": "OptionToken()", +"c48a3cbf": "setStackPtr(uint256)", +"c48a66e0": "transferTimelocked(address,uint256,uint256)", +"c48a7560": "sellScams(uint256)", +"c48b1cf0": "test_5_accessRestriction_addMember_shouldThrow()", +"c48c68ee": "addressFounders4()", +"c48d5a4a": "_buy(uint256,uint256,uint256,address,uint256)", +"c48d93d8": "JuraToken(uint256,string,string)", +"c48d99ca": "DataDumped(address,string,bytes32)", +"c48db366": "Africacoin()", +"c48dc5fb": "JackpotAwarded(uint256,address,uint256)", +"c48e1c4d": "importAddresses(address[],address[])", +"c48e5ec4": "getPurchaseDetail(uint256,uint256)", +"c48e819c": "test_openRegistry()", +"c48eabc0": "getContributionPool()", +"c48ef17c": "floorId()", +"c4909a70": "addConfig(bytes32,bytes32)", +"c490a266": "toUInt(bytes)", +"c490dfa6": "isVerifiedAddress(address,address)", +"c491fd18": "FlexibleTokenSale(address,address,uint256,address)", +"c493afcf": "closeRefund()", +"c494a080": "totalPlayer()", +"c494c3dc": "hashParent(uint256,bytes32,bytes32)", +"c494c3f7": "teleportKnight(uint32)", +"c494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", +"c49589bb": "rateUSDcETH()", +"c4969b8f": "setSellerAndAmt(address,uint256)", +"c4977807": "getFrozenAccount(address)", +"c4983c65": "updatePoints(address)", +"c498fcfd": "getUnitDefenseIncreases(address,address,uint256)", +"c49a1ede": "updateShareValue(address,uint256)", +"c49a3b04": "OraclizeVerifier(address,string,uint256,uint256)", +"c49a8fc9": "secureUpdateOrderFunds(address,bool,uint128,uint128,uint128,uint128)", +"c49b94e9": "getTokenTxn(uint256)", +"c49c3635": "getEventOutcomeIsSet(uint256,uint256)", +"c49d3b9f": "memberData()", +"c49d9ff8": "chatMessages(uint256)", +"c49ee5b4": "finalUnpause()", +"c49f91d3": "EIP712DOMAIN_TYPEHASH()", +"c49fea77": "setVariables(uint8,uint8,uint8,uint8,uint256)", +"c49fef66": "maxAnimals()", +"c4a06710": "isKYCPassed(address,address)", +"c4a0dada": "getOtherName()", +"c4a13f23": "affiliateBonusPercent()", +"c4a1dfda": "viewFirstBatchOfClauses()", +"c4a1ee37": "gasLimitWithdrawConfirm()", +"c4a1fedf": "increaseWeeklyTransactionVolumeReceiving(uint256)", +"c4a2c6b4": "Partial23Send()", +"c4a2d664": "setTransferFeeMax(uint256)", +"c4a2e641": "confirmTransaction(uint256,bytes)", +"c4a2fe12": "setversion(uint256)", +"c4a31557": "packSaleAddress()", +"c4a381b8": "setTokenRate(uint32)", +"c4a4cb4e": "countMilk()", +"c4a4e267": "weaponToApproved(uint256)", +"c4a4f265": "minimalContribution()", +"c4a50433": "unprocessedProfits()", +"c4a5350d": "createNewContract(string,string)", +"c4a5b138": "approved(address,uint256,address,bytes)", +"c4a796c1": "setReferee(address)", +"c4a8158c": "getMyTurtle()", +"c4a8598e": "BANCOR_X()", +"c4a85bc1": "allowAccess(address)", +"c4a89e9e": "lengthOf(uint256,uint256)", +"c4a8a670": "getEvent(string,uint256)", +"c4a8b570": "setdteamVaultAddr3(address)", +"c4a942cb": "chunkSize()", +"c4a96758": "getByteFromByte32(bytes32,uint8)", +"c4a9e116": "stakeCount()", +"c4aa94a6": "withdraw(address,uint256,address[],uint256[])", +"c4ad32be": "generateTrees(uint256)", +"c4adb406": "validDestinations(uint256)", +"c4ae16a8": "getPlayerId(address)", +"c4ae3168": "togglePause()", +"c4b05f49": "addThing(string,string,string,string)", +"c4b06c19": "SeedSale(address)", +"c4b14e0b": "getSignature(bytes32)", +"c4b195ab": "r2(address)", +"c4b24a46": "checkReward()", +"c4b2841c": "_doTradeWithEth(address,uint256,address)", +"c4b293db": "getBuyRatio()", +"c4b296a7": "getInvestorIndex()", +"c4b2a668": "GlavCryptPoint()", +"c4b2eccb": "maxAmountAddresses(address)", +"c4b35f3d": "DIV()", +"c4b379f7": "earningsOfPlayer()", +"c4b3a516": "setPercentageAvailableToSell(uint256)", +"c4b40fb7": "tkcAddress()", +"c4b4dff1": "PayChain()", +"c4b54551": "MAX_SPARTANS()", +"c4b57df5": "createEscrow(uint16,address,address,uint256,uint16,uint32,uint32)", +"c4b5cde2": "EventBuyShip(address,uint16,uint64)", +"c4b5f891": "LTBToken()", +"c4b62bbb": "updateAddressSetting(uint256,address,address,string,string)", +"c4b67e8a": "generateReport2(int8[],uint32[])", +"c4b6b5fd": "initChallenge()", +"c4b6c2f3": "btcPriceProvider()", +"c4b6fec9": "sendVal()", +"c4b71cec": "ICO_LEVEL_1()", +"c4b781a8": "setPercentAllocationFee(uint256,uint256)", +"c4b7c4cf": "communityVote(bytes32,bool)", +"c4b80f6e": "incPlayerOwed(address,uint256)", +"c4b9223f": "setVestingSchedule(address,address,uint256,uint256,uint256,uint256,bool)", +"c4b9897b": "IagonToken()", +"c4baa573": "process2(bytes32,uint256[],bytes)", +"c4baf4a4": "IQT_FUNDATION_ADDRESS()", +"c4bb0173": "hash_sha3(string,uint256)", +"c4bc5da5": "resumeContract()", +"c4bc7b70": "setGlobal(uint64,bool)", +"c4bd10d9": "getPollOption(uint256,uint256)", +"c4bd8ebc": "num_monsters()", +"c4bde5e1": "totalLotteryNumber()", +"c4bebd69": "pauseLastStart()", +"c4bff124": "addBlacklistItem(address)", +"c4c0698d": "withdrawInEmergency()", +"c4c1b39a": "tokenPriceInitial_()", +"c4c1c94f": "add(address[])", +"c4c1d835": "DataAuction(address,address)", +"c4c22e98": "blockInterval()", +"c4c24249": "turnLast()", +"c4c2e702": "execute(uint32)", +"c4c308be": "getBeneficiaryCash()", +"c4c3718b": "satoshi_bth_decimals()", +"c4c39ba7": "SWAP_CAP()", +"c4c49380": "setCap()", +"c4c4a89b": "buyNewDrone(uint256)", +"c4c4d00b": "CRBTTokenLive()", +"c4c4e3c0": "GOLD_AMOUNT_SKL()", +"c4c4e438": "oraclize_query(uint256,string,bytes[3])", +"c4c50acf": "giftTokens(address,uint256)", +"c4c59c77": "ethIN()", +"c4c5f3de": "forecastingClosed()", +"c4c6710d": "buyTicket(uint256,uint256,uint256)", +"c4c676cf": "TRBToken()", +"c4c68b44": "getTotalSupplyForType(uint256)", +"c4c745b6": "getBonusFactor(address,uint256)", +"c4c842f7": "_emitJobBinded(uint256,uint256,bool)", +"c4c90d70": "withdrawHouseFee()", +"c4c90f4c": "tokenUsersSave(address)", +"c4cae886": "setManualTradingAllowed(bool)", +"c4cb291e": "unpaid()", +"c4cbb591": "compot()", +"c4cbd65b": "isTourUnfreezed(uint256)", +"c4cbfa44": "isConstructor()", +"c4cc161b": "SellSnail(uint256)", +"c4cc5616": "addStory(uint256,string)", +"c4cc6e53": "TgeOtherReleasingScheduleContract(uint256,uint256)", +"c4ccf6ea": "getAmountBonus(uint256)", +"c4cf8a40": "createTradeContract(address,address,uint256,uint256,uint256,bool,bool)", +"c4cf9385": "MetaMorph()", +"c4cfc5be": "PGE01NY()", +"c4d01481": "getPreRemainCoins()", +"c4d07951": "setVoting(address)", +"c4d18b18": "calculatePoohBuy(uint256,uint256)", +"c4d252f5": "cancel(bytes32)", +"c4d259ad": "setIsAdmin(address,bool)", +"c4d2783c": "GTTAirdrop(address,address)", +"c4d2b1b3": "getLoanData(bytes32)", +"c4d2bac9": "HelloToken()", +"c4d3926a": "currentTokenIdNumber()", +"c4d42292": "ResidualShare(uint256,string,string)", +"c4d4fdc0": "getBonusRateForTimeBased()", +"c4d66de8": "initialize(address)", +"c4d77090": "nodeAddresses(uint256)", +"c4d7b98f": "erc20ContractSwitch(address,address,uint256)", +"c4d8aa44": "VenaCoin()", +"c4d9102f": "setNextID(uint256,int256)", +"c4d97470": "PeriodReset(uint256,uint256,uint256,uint256)", +"c4daa2a6": "roundFees(uint256)", +"c4dbf622": "buyPrice(uint256)", +"c4dc1556": "finalizeProposal()", +"c4dcad1d": "mining(address,uint256)", +"c4dd3b33": "checkUserSignature(address,string,uint32,string,string,bytes32,bytes32,uint8)", +"c4dd5acc": "isLastBadgeEle(uint256,uint256)", +"c4dddedd": "addressVerified(string)", +"c4ded499": "getActiveBetsAmount(address)", +"c4df310a": "isWithinTokenAllocLimit(uint256)", +"c4e11c91": "updateStats(uint256,uint256)", +"c4e12e1d": "updateMinVotedTokens(uint256)", +"c4e16b7d": "whitelistToken(address,uint256)", +"c4e1793f": "_onOverTimeBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", +"c4e29e66": "getOrderHash(address,uint256,address,uint256,uint256,uint256,address)", +"c4e34d46": "lockBonusTokens(uint256,address,uint256)", +"c4e37095": "setSaleState(bool)", +"c4e3a63b": "firstPeriod()", +"c4e41b22": "getTotalSupply()", +"c4e5b7f2": "createAcceptAndPayFromBytes(bytes,address[],uint256[],uint256[])", +"c4e5fd83": "_safeTransferFromInternal(address,address,uint256,bytes)", +"c4e627c2": "maxTokenCount()", +"c4e6aaa6": "setLocationId(uint32)", +"c4e6c604": "otherAddress()", +"c4e7099f": "mockTime(uint32)", +"c4e71adc": "firstReleaseTime()", +"c4e7d14c": "MultiSender(uint256)", +"c4e85b63": "flushTokens()", +"c4e9311b": "bindJobWithBoard(uint256,uint256)", +"c4e98398": "SimpleRegistrar(bytes32,uint256)", +"c4e9e80b": "setAutoSell(uint256)", +"c4eaa978": "_price_token_ICO4()", +"c4eb2b3c": "putSaveData(address,address,string)", +"c4eb8ec2": "transfer_ether(address,uint256)", +"c4ecfbbe": "MonsterChampionship(address)", +"c4eeeeb9": "isReissuable(bytes32)", +"c4ef18fc": "setRentAuctionContractAddress(address)", +"c4ef92d3": "OmiseGOGold()", +"c4efa665": "decimalPrecision()", +"c4f06ba9": "makerOf(uint256)", +"c4f07cff": "getWithdrawTransactionIds(uint256,uint256,bool,bool)", +"c4f0a043": "BTCPrice()", +"c4f1215c": "maxGoalReachedAt()", +"c4f141ff": "setWeiPerCHF(uint256)", +"c4f14c9c": "restrict(address,address)", +"c4f161ab": "isWinner(address,address)", +"c4f1ce79": "clearCurPrize(address,uint256)", +"c4f2a64f": "blockWait()", +"c4f2a7af": "GeneScience(address)", +"c4f35d6c": "WithdrawalToken(uint256)", +"c4f363bf": "getVersionByte(uint256)", +"c4f3c097": "setBasicRate(uint256)", +"c4f54568": "blocktubeTag(string)", +"c4f5cd82": "firstAllocation()", +"c4f62031": "setPlayerPrice(uint256,uint256)", +"c4f7f1e2": "scaledRewardPerToken()", +"c4f8210e": "_safeTransfer(address,uint256)", +"c4f8adc7": "consul_nme()", +"c4f8b9fb": "testAdd(uint256,uint256,uint256)", +"c4f8f339": "getPercent4(address)", +"c4f95105": "showUnpayedPercent(address)", +"c4f987a5": "removeWorker(address)", +"c4f99aa5": "publicReservedAddress()", +"c4fa9c6b": "getReservedTokenDestinationList(address,bytes32)", +"c4faa950": "BrinkToken(uint256,string,uint8,string)", +"c4fbdaff": "gibLambos(uint256)", +"c4fc3a3b": "presaleTokenSupply()", +"c4fc89e1": "bubbled()", +"c4fce59a": "fourthExtendedBonusSalesEnds()", +"c4fd262a": "CrowdsaleStarted(uint256,uint256,uint256,uint256)", +"c4fda23e": "sellTokensIcoWithReferal(address)", +"c4fdc6b8": "pauseIco()", +"c4fe2675": "getProtoIdByTokenId(uint256)", +"c4fed7fb": "addHouseCredits(address,uint256)", +"c4ff3614": "Wallet(address[],uint256,uint256)", +"c5007227": "DTToken()", +"c500ea36": "userPendingCrateNumber(address)", +"c501024b": "setMinCutValue(uint256)", +"c5015018": "TEAM_MONTHLY()", +"c501825a": "WALK()", +"c501b87f": "setCreditMcAddress(address)", +"c503101e": "setCanClaim(bool)", +"c503772d": "returnUint8(uint8)", +"c503a868": "getTeamFee(address)", +"c5043343": "tempSetWinner(uint256,address)", +"c5044b62": "isDescriptionFinalized()", +"c50497ae": "SUPPLY()", +"c50499db": "developer_string_contract_verified(string)", +"c504bfb8": "ColorsMain()", +"c50508de": "initialAuctionDuration()", +"c505c82c": "zxcSold()", +"c505ebce": "endRate()", +"c506adae": "migrateInvestorsFromHost(uint256)", +"c5072172": "justThrow()", +"c50853f5": "getNumPublications()", +"c50886ae": "test_ConsensysNotReached()", +"c508d8f2": "reederemPeriods(uint256)", +"c5096a69": "feeFor(address,address,uint256)", +"c509c262": "TokenManager()", +"c509d0b2": "logCompleteSetsPurchased(address,address,address,uint256)", +"c509db3b": "getverifytime(address)", +"c50aea06": "claimShares(uint256,uint256)", +"c50bb446": "getNeutralMutation(uint32)", +"c50bd2e4": "trancheDenominator()", +"c50be063": "myPlanetList(address,uint256)", +"c50be16c": "setPublicRelease(uint256)", +"c50c44cf": "getAuctionSeller(uint256)", +"c50c97d0": "changeStorage(address)", +"c50cb9ae": "transferComplex(address,uint256,uint256)", +"c50d725c": "DACToken()", +"c50d847e": "POSC()", +"c50ec10a": "repoAppId()", +"c50f197b": "charitySplitPercent()", +"c50f8274": "IWasFirstServiceToken()", +"c50ff563": "canSubAllocation(address,uint256)", +"c510187e": "vpfHash(bytes32,uint256,uint256)", +"c5104c3d": "minPurchaseAmt()", +"c5105bb5": "TotalEDUSupply()", +"c510c906": "getEventOutcomeNumeric(uint256,uint256)", +"c510da62": "getsell(uint256)", +"c510db20": "userCanStillBuyEth(address)", +"c510dfeb": "convertAddressFormat(address[8])", +"c510f746": "createElection(bytes32,bytes32[])", +"c51131fb": "canBeSet(bytes32)", +"c511a362": "TransferTargetToken(address,uint256)", +"c511b016": "SingularDTVToken(address,address,string,string,uint256)", +"c511ed5e": "closeMarket()", +"c51215df": "preSaleListTime()", +"c51226b3": "secondStageMintingDate()", +"c5129348": "See_price()", +"c512d1d1": "testCalculateItemId()", +"c5132a5c": "getCreateMarketDesignatedReporterAddressValue()", +"c5133802": "mintFraCoins(address,uint256)", +"c5135ba0": "fuckynum()", +"c513cde2": "KD1Token()", +"c513d596": "BountyAdded(bytes32,string)", +"c513f66e": "EMPTY_PARAM_HASH()", +"c51450ca": "getTokenIdAtIndex(uint256)", +"c514ff3f": "EasticoinToken(uint256,string,string)", +"c515205d": "getValue2()", +"c515627e": "depositEther(address,uint256,uint256,uint256)", +"c5160187": "mintStart4()", +"c5162e1a": "vendre(uint256)", +"c516358f": "bountyAddress()", +"c5179027": "team0Points()", +"c518123a": "financingPeriod()", +"c519099d": "teamAndFounders()", +"c519500e": "potSplit_(uint256)", +"c51a29e0": "getContractType()", +"c51be90f": "query_withGasLimit(uint256,string,string,uint256)", +"c51bf934": "CEILING()", +"c51cc592": "setTransferAllowance(bool)", +"c51cd5d6": "StarWarsRTscore()", +"c51cd6ad": "getLockAccount(address,uint256)", +"c51ce17b": "TelegaOut(address)", +"c51cf179": "calcBaseFeeForShares(uint256)", +"c51d16b6": "totalCollectedWei()", +"c51dc993": "expiryCheck(string)", +"c52046de": "isDeployed()", +"c5210e89": "ERC20Standard(uint256,string,uint256,string,bool)", +"c52141da": "checkSign(address)", +"c52164c6": "reputation()", +"c52173de": "xConvert(address[],uint256,uint256,bytes32,bytes32,uint256)", +"c5231563": "addAddress(uint256,address)", +"c523d5dd": "setBlockPart(uint64,uint64,uint64,bytes32,bytes)", +"c523ef11": "VNDCash(uint256,string,uint8,string)", +"c5241e29": "removeWhitelisted()", +"c5242acb": "setWithdrawOwner(address)", +"c524645b": "getTimeBonusAmount(uint256)", +"c527018b": "jdalevsystemscoin()", +"c527326e": "PFOffer(address,address,bytes32,uint256,uint256,uint128)", +"c5277ddd": "isPublisherRegistered(address)", +"c5282f7a": "generateTokensForPresaleAccounts(address[])", +"c528fee7": "DRCToken()", +"c5292c67": "getStart()", +"c5292ed9": "calculateEggSell(uint256,uint256)", +"c52987cf": "strikePrice()", +"c529b80b": "transferWithData(address,uint256,bytes32)", +"c52ab778": "execute(address,uint256,uint256)", +"c52adfda": "BobsNVag()", +"c52ba8b6": "addCrowdsales(address,address)", +"c52bd836": "setDappOwner(bytes32,address)", +"c52c936c": "removeByIdx(uint256[],uint256)", +"c52cb003": "OwnerDistribSupply_()", +"c52cde58": "getRedeemableTokensVoter(bytes32,address)", +"c52ce9be": "basicTransferFromTest(address)", +"c52e40d0": "totalWeiExpected()", +"c52f02ce": "BLS_PRE_ICO()", +"c52f9fa6": "PartialOwnershipCrowdsale(uint256)", +"c52fd6fa": "exTx(uint256)", +"c5312191": "WeiController(address,address,address,uint256,bool)", +"c531c245": "exists(int256)", +"c531d52b": "STRUTToken()", +"c5337992": "setBossHPDefault(uint256)", +"c5337ed4": "random2()", +"c5339132": "lastPlayed()", +"c533fc68": "getLockAccInfo(address)", +"c5340dcd": "received_wei_with_bonus()", +"c53467cf": "releasePublicPresaleBonusTokens(address[],uint256)", +"c5346fb1": "approve_coin(string,bool)", +"c534ba4b": "destroyBlacklistedTokens(address,uint256)", +"c5350345": "Magexbit()", +"c535165f": "revealAndPayout(bytes,bytes)", +"c5364bc3": "GetChallengeWeightedVolumes(uint256)", +"c536c952": "getDsitribute(address,uint256)", +"c536ed5f": "buyDmlCoin(address)", +"c537a210": "principalOutstanding()", +"c537f954": "adjustDeployRange(uint256,uint256,uint256)", +"c53833fe": "getLastContract()", +"c539607c": "get_internal_block_number()", +"c53a0292": "increaseNonce()", +"c53abe29": "tokenOnlyDeploymentCost()", +"c53ad76f": "Kardashian()", +"c53adaff": "SingularDTVWorkshop()", +"c53b12f9": "myEthBalanceOf()", +"c53b4252": "getpatient(uint256,uint256)", +"c53b9c04": "maxTimeRemain()", +"c53bafbb": "setPriceOf(string,string,address)", +"c53c2556": "getTokenIdFrombBPhash(string)", +"c53c614d": "canBeWhitelisted(string)", +"c53ce034": "totalDraw()", +"c53d6ce1": "getAllBalances(address)", +"c53d8483": "getActualTotalTokens()", +"c53dbf82": "disclosureAdded(uint256,bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"c53df200": "getArrUintField1()", +"c53df937": "unshareService(bytes32,address)", +"c53e4387": "IHODLToken()", +"c53ee3a5": "_setInitialCardPrice(uint128)", +"c53f926b": "setByuoutActive(bool)", +"c53fc65f": "tokensDevelopers()", +"c53ffe66": "KillerWhale()", +"c5401559": "setQuantityAdminOnly(uint256,uint256)", +"c5405f17": "registerUserBonus(address,address,address)", +"c540f903": "DeployRelay()", +"c540fb66": "updateBuyNum(bytes32,uint8)", +"c54110d6": "AcceptsNASDAQ(address)", +"c54117ac": "REDGILL()", +"c54124be": "sub()", +"c541783c": "getLockedBalanceOf(address,address)", +"c541a5bd": "revertAML(address)", +"c5426124": "getStar(uint256)", +"c542675e": "fus(uint256)", +"c54397a4": "changeAffiliate(address,uint256)", +"c543ae53": "evaluateArea(address,uint8,uint256)", +"c543b427": "IntegrationOfCredit()", +"c543c922": "devWithdraw(uint256)", +"c54421ae": "teamTokensNotDistributed()", +"c5442f7d": "getRandom(uint16,uint8,address)", +"c5444ff9": "buyTokens(address,uint128,uint256)", +"c544682b": "rewardForBurn(uint256)", +"c544f8d9": "EventRemoveFromBattle(address,uint64)", +"c5454d11": "Finalize()", +"c545c09d": "calculatePrice(uint256,uint256,uint256,address)", +"c5460e71": "getReleasableAmount(uint256,address)", +"c5465a23": "votingstage()", +"c546a92e": "testTransferTokensUsingRawCall()", +"c54704e6": "setLockStartTime(uint256)", +"c547092b": "setMilestone(uint256)", +"c547af82": "_totalVouchersSupply()", +"c547d8f1": "totalWeiAmountSale3()", +"c547e14d": "setHatchDurationByTimes(uint32[])", +"c54837a4": "extinguish()", +"c5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", +"c5494b82": "SCH()", +"c5495b54": "replaceAssetManager(address,bytes32)", +"c5498e4e": "setTeamAndAdvisorAndAirdropAddresses(address,address,address)", +"c54996b7": "refundBond(uint256,address)", +"c549e4e9": "sellPriceAt(uint256)", +"c549e6b9": "DAYS()", +"c549e7a0": "ManualTokenMintRequiresRefund(address,uint256)", +"c54a068c": "getCurrentRateInternal()", +"c54a0980": "Total_Entries()", +"c54b25b0": "claimCancelled(uint16,address)", +"c54b5658": "toAddress(bytes,bytes,uint256)", +"c54c80eb": "RxPharma()", +"c54cd39c": "getSandwichInfoCaloriesPrice(uint256)", +"c54d51d4": "popDecoration()", +"c54d59a1": "snt_claimed(address)", +"c54d8609": "setCoOwner2(address)", +"c54e73e3": "setPresale(bool)", +"c54e91c6": "currentPart(address,address)", +"c54f050c": "_createOrder(address,address,uint256,address,uint256,uint256,uint256)", +"c54f3409": "getGameEnd(address,uint256)", +"c54f5344": "OfficialWalletAddr()", +"c5503e89": "allocateTokensInternally(uint256)", +"c5505235": "toEther(uint256,uint256,uint256)", +"c550eb56": "isOrderExist(uint64)", +"c5526d16": "setCrowdsaleWallet(address)", +"c5530077": "wildcards(uint16)", +"c55374d0": "oraclizeDelay()", +"c55425e6": "TotalOwnerSupply()", +"c5543b22": "powerDayPerPersonCapInWei()", +"c5546ecd": "transferTokensToParticipants(uint256,uint256,uint256,uint256,address)", +"c5549cc0": "minDeadline()", +"c554a600": "initTokenPorter(address,address)", +"c5566dac": "getNumberOfCourse()", +"c5575ef0": "checkTransferFrom(address,address,uint256)", +"c557b985": "icon()", +"c557d29c": "ByteLocker()", +"c557e552": "_getWager(address)", +"c558ae6b": "Airdrop(address[],uint256[])", +"c5590033": "setStatus(string,string)", +"c5592be2": "addContract(string,address,address)", +"c559743a": "included(address)", +"c559c395": "bitwordsCutOutof100()", +"c55a02a0": "SNT()", +"c55b6bb7": "setAdmin(address,address)", +"c55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", +"c55c4115": "FEE_CHARGER_DENOMINATOR()", +"c55c4f47": "isCrowdsaleSuccessful()", +"c55d0f56": "getCurrentPrice(uint256)", +"c55d34d4": "airdropGW()", +"c55dae63": "baseToken()", +"c55dd86a": "isLegalPlayer(bytes32,address,address)", +"c55e0eaa": "bonusPeriodDurationInHours()", +"c55e4645": "LETOCoins()", +"c55ed894": "withdraw_to_owner()", +"c55ee28c": "nextSession()", +"c55f1f42": "timeLockSend(address,address,uint256,bytes)", +"c55f3b4c": "GetInventory(address,uint256)", +"c55f60dc": "checkAndUpdateLimit(uint256)", +"c55fb39f": "SAFE_PERIOD()", +"c5620ded": "LogBuy(address,uint256,uint256,uint256)", +"c56351cd": "createCrowdsale(address,uint32,uint256,address,uint8,address,address)", +"c5639ed2": "SUB(uint256,uint256)", +"c56551b6": "pos()", +"c56597ba": "_v2()", +"c565eba6": "isRoundTwoSalePeriod(uint256)", +"c566d43c": "registerPlayer(address,bytes32)", +"c5671148": "mul64()", +"c567cd26": "updateStudent(string,bytes32,string)", +"c567e43a": "show_me_the_money()", +"c567f304": "approveAddReserveData(uint256)", +"c5682244": "changeTickPrice(uint256)", +"c56893fb": "getLockerCount()", +"c5689e7d": "deWhiteListContract(address)", +"c56935e2": "showJackpotNextRd()", +"c5699ac2": "canRestoreUnsoldTokens()", +"c5699d68": "_compare(int256,bytes,int256)", +"c569bae0": "right93(uint256)", +"c569fb36": "setDepositPool(address)", +"c56a0ffe": "summDevelopers()", +"c56a3e88": "isManager()", +"c56af732": "CannabanC()", +"c56b2dc2": "upgradePony(uint256,uint256,bytes)", +"c56b4294": "_initialMint()", +"c56bbda4": "isTransferApprove(uint256)", +"c56bea64": "setBlacklistedUser(address)", +"c56c89a2": "ChendeWorld()", +"c56cf2b2": "getAllSaleAnimals()", +"c56d0d67": "tokensSoldWhitelist()", +"c56e3849": "Versioned(string)", +"c56e610e": "getEscrowBalance()", +"c56ecdfa": "_isOne(address)", +"c56ef049": "execBuyBack(uint256)", +"c56f1578": "UzairToken()", +"c56fc9c1": "PreSaleDistributed()", +"c570e952": "CustomPOAToken(string,string,address,address,uint256,uint256,uint256)", +"c5715483": "bonusMinContribution()", +"c571627b": "ChangeMainWallet(address)", +"c572652b": "distributeWithLockup(address,uint256,uint256,uint256,uint256)", +"c5729617": "get_value_by_hash(string)", +"c572ca10": "TokenProcurement(address,address,uint256,uint256)", +"c572dcc3": "getFreeMiner()", +"c572e9cb": "_decodeBuyData(bytes)", +"c57380a2": "getControllerAddress()", +"c573902d": "getInfoPanel()", +"c573e6bd": "distributeIfNeeded(address,uint256)", +"c57443fa": "ZRX_EXCHANGE_ADDR()", +"c574a53c": "addJurisdiction(bytes32[],bool[])", +"c574d156": "getGameBalance()", +"c575200d": "setPropertyBecomePublicEarnUntil(uint16,uint256,uint256)", +"c575c238": "sendToken(address)", +"c57679fc": "recipientMIT()", +"c5774a3f": "seedAmount()", +"c5787fa3": "picops_identity(address,uint256)", +"c578b2f4": "getTransformTarget_default()", +"c578f2c8": "SetCityName(address,bytes32)", +"c5793979": "sendCheck(address,uint256,bytes32)", +"c57949e2": "AllowanceLedger(address,address)", +"c57981b5": "FEE()", +"c57a050e": "fairandeasy()", +"c57a4a4d": "TOKEN_PUBLIC_SALE_CAP()", +"c57a8825": "updateRegistryAddress(address)", +"c57a99e5": "testFailRetractLatestRevisionEnforceRevisions()", +"c57c3bbd": "addLockProduct(uint32,uint32,uint32,bool)", +"c57c5f60": "initMultiowned(address[],uint256)", +"c57c7b62": "mktIssue(address,uint256)", +"c57d3fb7": "setReFundAddress(address)", +"c57d5fe9": "addToBalance(address,address,uint256)", +"c57dead7": "betsLost()", +"c57fbf90": "tokenRate(address)", +"c58068d8": "getIdFromStr(string)", +"c5809312": "setLLV_edit_28(string)", +"c58156e0": "removeAllocation(address)", +"c5820c45": "DFSDex()", +"c58343ef": "getRequest(uint256)", +"c5837713": "a_empresa(bytes5)", +"c583bb53": "RYNO()", +"c5854113": "MilestonesFactory(address)", +"c58580aa": "icoAddress1()", +"c585bb93": "registerAssetProxy(address)", +"c585de64": "Rate3()", +"c58684ab": "setPauseEmergence()", +"c5868754": "is_signed()", +"c587e3d6": "totalRised()", +"c587f93e": "softCapCountDownTimer()", +"c588415e": "phase4EndBlock()", +"c588953e": "enddate()", +"c588ba1b": "getLowestGameWithoutQuorum()", +"c588cabd": "firstBonusPercent()", +"c5893a8e": "OnPreSaleBuyerCompensated(address,uint256)", +"c589f1f3": "transferEthersToDao(uint256)", +"c58a3321": "setAccessControl(address,address,uint8,bool)", +"c58a34cc": "setTimeout(uint256)", +"c58a6ce8": "sendPayment(uint256,address)", +"c58aaae6": "selfDestructBeneficiary()", +"c58b54ef": "getAssetAttributes(uint256)", +"c58cc060": "firstBuyers()", +"c58ce220": "setDeveloper(string)", +"c58d0be0": "getCompetitionStatusOfRegistrants()", +"c58d96a5": "whiteListERC223(address)", +"c58f2f49": "hashTypes(uint8)", +"c58f520f": "sharingPool()", +"c5907a34": "Kanicoin()", +"c590c994": "unfreezeCount()", +"c5917695": "KevCoin()", +"c5919f24": "addNewMeme(string,string,string,string)", +"c591b3ca": "itemCanVote(address,uint256)", +"c591c8a3": "getAllJinglesOnSale()", +"c59255dc": "changeMilestone(uint8,uint256,uint256,uint256)", +"c592c3ba": "addAmountBoughtAsMember(address,uint256)", +"c5933658": "registerEmailAddress(address,string)", +"c59361b9": "getInsurance(address,uint256)", +"c593dfbf": "queryDataFromId(address,uint256)", +"c5944f30": "Token(address,uint256)", +"c5947cd6": "getReportingState()", +"c594a12d": "areadjacent(uint16,uint16)", +"c59513a4": "updateMyTimeMintBalance()", +"c5958bda": "removeFile(bytes)", +"c595fee6": "adminWithdrawEther()", +"c5960c29": "buyKeyByAddr(address)", +"c59671a7": "set_dni(uint256)", +"c5980b07": "getDRSCoinDividend(uint256)", +"c5981892": "buyTokensCrowdsale(address)", +"c59981cd": "edit(uint256,uint256,uint8,uint8,uint8,uint8,string)", +"c599b77f": "setUserGroup(address,address)", +"c599d58f": "MAX_NUM_PAYOUT_ATTEMPTS()", +"c59a9428": "transferTreasurership(address)", +"c59acae4": "lrcWithdrawn()", +"c59b2e20": "NEVA()", +"c59b5562": "buyICO()", +"c59c1144": "setDefaultKey(address,address,uint8,bytes32,bytes32)", +"c59d278e": "vehicleDatesByCity(bytes32)", +"c59d4847": "getStats()", +"c59d55ad": "releaseTransfer(bytes32,uint8,bytes32,bytes32)", +"c59d5633": "getPurchasePrice(uint256)", +"c59d6abe": "getAngelClaims(uint64)", +"c59e0b87": "setSecondWalletPercent(uint256)", +"c59e5729": "upAd(uint256)", +"c59ea269": "snowflakeBalance(string)", +"c59ee1dc": "raisedAmount()", +"c59f3a7c": "getConditionsState()", +"c59f6983": "editMaxItems(uint8)", +"c59f83cf": "_getNftContract(address)", +"c5a0a555": "setImageRegionId(uint256,uint256)", +"c5a0ca8f": "init(address[],uint256[],uint256,address)", +"c5a0d1c7": "percentageQuarter1()", +"c5a104d9": "ln_fixed3(uint256,uint256)", +"c5a1d7f0": "metadataHash()", +"c5a2d352": "publish(uint256,bytes32)", +"c5a369b4": "addAddressDescription(string)", +"c5a46ee6": "value(uint256)", +"c5a4eb35": "initialPricePaid(uint256)", +"c5a55152": "distributeRewards(address[])", +"c5a60ddb": "payout(bytes32,uint256,uint256)", +"c5a6732b": "_isChallengerAttackFirst(uint256,uint256)", +"c5a796ac": "set_address_Arina(address,address)", +"c5a83c2b": "countAssets()", +"c5a88559": "getWithdrawNum()", +"c5a8a2ab": "changeStatus(uint256,uint8)", +"c5a8d421": "RocketFuelToken()", +"c5a9833e": "trusteeVaultAddr()", +"c5a988c9": "extendPreSalesPeriodWith(uint256)", +"c5aa0f17": "setNewJackpot(uint256,uint256,address)", +"c5aad3be": "getStackPtr()", +"c5ab4602": "updateBalance(address,address,uint256,bool)", +"c5ac124d": "cashToEth()", +"c5ac8a4d": "leftSharePrice()", +"c5aca3b2": "NYXDecentralizedIdentificationRequest(string,string)", +"c5ace443": "priceFeedSource()", +"c5ad94a9": "addressSharesCount(address)", +"c5ae6e0e": "Kernal()", +"c5ae7570": "getSaleFinancialData()", +"c5af3808": "setJntBeneficiary(address)", +"c5af9000": "Convert()", +"c5afc0a5": "BonusAllocation(address,string,uint256)", +"c5afce8b": "ensureInAccountList(address)", +"c5b045eb": "secondRoundPercent()", +"c5b05616": "TokenAuction()", +"c5b15057": "updateSettlementStatus(bool)", +"c5b15caf": "CIBOS()", +"c5b1a53c": "deposit(bytes16[],uint64)", +"c5b1d9aa": "newRound()", +"c5b1e789": "Unset(string,address)", +"c5b2333c": "set_status_user(address,address,bool,bool)", +"c5b2429d": "periodPreITO_tokenPriceUSD()", +"c5b35556": "bixToken()", +"c5b3a429": "PresaleStartTimeChanged(uint256)", +"c5b417ec": "buyPlot(uint256,uint256)", +"c5b43c39": "CypherX()", +"c5b53a34": "_setAuthorizedPower(uint256)", +"c5b748c0": "redemptionPrice()", +"c5b7589c": "startMiniGame()", +"c5b7be81": "TruckingCoin()", +"c5b7c51b": "participateEvent(address)", +"c5b7f5bf": "presale_eth_fund()", +"c5b85eb8": "UBSI()", +"c5b8d7a1": "cyclesStartFrom()", +"c5b8f772": "isOwnerOf(address,uint256)", +"c5b930f9": "singletonHash(bytes32)", +"c5b9cdf8": "SMARTCCCoin()", +"c5bac421": "pruneInvestors(uint256,uint256)", +"c5bafbc4": "eosDACToken()", +"c5bb8af4": "IMDEXsetInactivityReleasePeriod(uint256)", +"c5bcc4f1": "parentSnapShotBlock()", +"c5bd8456": "TakeOffWorldWide()", +"c5bd9089": "redeemCoupons(uint256)", +"c5bdbd70": "multDenominator()", +"c5be7a77": "_shareDevCut(uint256)", +"c5bef690": "_escrowIndex()", +"c5bef74e": "getHash1(address,uint256,address,uint256,uint256,uint256)", +"c5bf2249": "wallet(bytes)", +"c5bf339c": "getLastNonPublished()", +"c5bfa9d9": "getUserBalanceOnEther(address)", +"c5bfd5dd": "TokenDrop()", +"c5bfef39": "initCountry(uint256,uint256)", +"c5c00ac6": "needVerified()", +"c5c01169": "checkFrozenAccounts(address)", +"c5c03af3": "_mode()", +"c5c09b20": "TestRecover(uint256,uint256,uint8,bytes32,bytes32)", +"c5c0b859": "pauseMaster()", +"c5c0db08": "whom()", +"c5c187f5": "LogApproval(address,address,uint256)", +"c5c2f6e0": "getTopPlayerScores(uint256)", +"c5c4412d": "CleanBankerRound(uint8)", +"c5c4744c": "totalRaised()", +"c5c5135c": "crystalPrice()", +"c5c56740": "ROBIET()", +"c5c593e1": "openGameResultAndNewGame(uint256,uint256,uint256,string,bytes32)", +"c5c680f3": "testUser()", +"c5c6b12a": "isInvestorInWhitelist(address)", +"c5c715e4": "approveBatch(address[],uint256[])", +"c5c72bf4": "sayAnything(string)", +"c5c7681f": "Main(address)", +"c5c78258": "YoloTokenPresaleRound2(uint256,uint256,uint256,uint256,address,address)", +"c5c80103": "listFaceToFaceAttendants()", +"c5c8015b": "isNotContract(address)", +"c5c872ae": "transferFromRobot(address,address,uint256)", +"c5c87db4": "reinvestReturns(uint256,address)", +"c5c8a08a": "getExpirationTimeFromAddress(address)", +"c5c925e2": "StoreRegistry()", +"c5c93bdc": "Birth(uint256,uint256,uint256)", +"c5c95c55": "QuantityUnit()", +"c5c9e3be": "setPreparationPeriodTrainingFeeMultiplier(uint256)", +"c5c9f617": "walletE()", +"c5cac386": "Questions()", +"c5cc52fc": "Indemnisation_5()", +"c5ccebd3": "smallerPriceComparator(uint256,uint256)", +"c5cd3bec": "getRevisionTimestamp(bytes20,uint256)", +"c5cd88db": "missingFundsToEndAuction()", +"c5ce3911": "productId()", +"c5cf8c7e": "getCurrentHighscore()", +"c5d03fc0": "OftenChainToken()", +"c5d0c68b": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"c5d14955": "phase_2_token_price()", +"c5d22e94": "MAX_TOTAL_AMOUNT_TO_RECEIVE_ETH()", +"c5d2577c": "newTransfer(bool,address,address,uint256,uint256,uint256)", +"c5d290d0": "RUNtoken(uint256,string,string)", +"c5d39a33": "isEating(address)", +"c5d456d6": "moves(address,uint256,uint256)", +"c5d46dfc": "computeScore(address)", +"c5d51586": "loser(address)", +"c5d5997c": "changeSubUser(address,address)", +"c5d61ad0": "newGame(uint256,bool,uint256)", +"c5d65d1a": "approveSponsorableJob(uint256)", +"c5d6a7f1": "GreatcoinERC20Token()", +"c5d6c75d": "PunchClock()", +"c5d7802e": "z()", +"c5d7dd0a": "Blockcash(string,string,uint256,uint256)", +"c5d81804": "mintSBIToken(address,uint256)", +"c5d83794": "setDesign(uint256,string)", +"c5d8adcb": "EventProduct(uint32,string,uint32,uint32,uint32,uint32,uint32,uint256,uint256,uint256)", +"c5d953a3": "setCurrentMarketRate(uint256)", +"c5d9ada3": "IANToken()", +"c5d9c762": "set_pre_kyc_iconiq_bonus_denominator(address,uint256)", +"c5dacf68": "getOwnerEth()", +"c5db22da": "lastBlock(uint64)", +"c5dba811": "doRandom(address[],address,uint256)", +"c5dc6b55": "getAccountBonus(address,address)", +"c5dce83d": "changeAPTController(address)", +"c5ddb614": "BlockFundIncubatorToken()", +"c5ddba02": "startDate1()", +"c5decd37": "ico3Raise()", +"c5df27ef": "ETHcap()", +"c5e08ba9": "get_oo_of(address)", +"c5e12813": "burnAllInvestorTokens(address)", +"c5e290cd": "_editInfoImpl(string)", +"c5e2a7db": "updateMetadata(address)", +"c5e2f418": "disableChanges()", +"c5e34e77": "Total_Products(uint256)", +"c5e35f42": "Gentingchain(uint256,string,string)", +"c5e36b7e": "lockMana(uint256)", +"c5e3adf5": "nFund()", +"c5e3b1a6": "reclaimOwnership(string,string,bytes32)", +"c5e3e3f3": "s21(bytes1)", +"c5e412e5": "createSaleContract(address,uint256,uint256,bool)", +"c5e42338": "getIncreaseTotalStakeCalled()", +"c5e4594f": "multiline(uint256,uint256,uint256,bytes32)", +"c5e634e4": "transferAuditTokens(address,uint256)", +"c5e7b4fe": "setupPreIco(uint256,uint256)", +"c5e8b864": "hasEnoughBST(address,address,address)", +"c5e951a4": "agentOrdersOf(uint256,uint256)", +"c5e974ed": "transferToken(bytes32,address,address,uint256)", +"c5e98a4c": "updateIncentiveTokenLimit(uint256)", +"c5e991a8": "ThirdEtherLimit()", +"c5ea01c9": "testF2(uint256)", +"c5ea0b4a": "buySquare(uint8,uint256,address)", +"c5ea3c65": "maxId()", +"c5ea6256": "enableSecureMode()", +"c5ea8e1d": "RefUpdate(string,uint256,uint256,uint256)", +"c5eab684": "calculateDividends(uint256,uint256)", +"c5eaccfd": "whitelistAddrAndBuyTokens(address,uint256)", +"c5ebeaec": "borrow(uint256)", +"c5ec05fd": "scheduleSale(uint256,uint256)", +"c5ec365f": "guideInvestmentAttractedShareToPay()", +"c5ecfc61": "getEscrowDeposit(string)", +"c5ed7162": "firstPresaleStart()", +"c5ed8c99": "canCollect(uint256)", +"c5edd450": "payFor(uint256)", +"c5ee5688": "setCompte_25(string)", +"c5ef4c3e": "set(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c5efaa11": "calculateValue(int256,uint64)", +"c5efaae8": "buyCredits(address,uint256)", +"c5efea68": "getAdminStatus(address)", +"c5f0d3d6": "geneKind()", +"c5f2892f": "get_deposit_root()", +"c5f310c0": "register(bytes12)", +"c5f39cd7": "rateSecondTier()", +"c5f40edd": "discountedDealAmount()", +"c5f4b3da": "RewardPoolAmount()", +"c5f4c98b": "changeDiscountStep(uint256)", +"c5f5ce21": "advisorTokenWallet()", +"c5f60620": "expectedTokens(uint256,bool)", +"c5f70682": "setByuoutCount(uint256)", +"c5f713cf": "push(uint256,bool)", +"c5f7ed63": "NeckCoin()", +"c5f913fe": "callExitFromUnknownContract(address)", +"c5f956af": "treasuryAddress()", +"c5f98578": "RequestFromContract()", +"c5f98a3f": "mega()", +"c5fa1924": "MMS()", +"c5fbe723": "result_payto()", +"c5fc43cb": "Newera()", +"c5fc98c9": "TOKEN_THIRD_DISCOUNT_MULTIPLIER()", +"c5feaf60": "PRE_SALE_START_1()", +"c5fee757": "executeOrder2(uint256)", +"c5ff2069": "MooTokenSale()", +"c5ff2222": "playNo()", +"c600e1dc": "getProfit(address)", +"c6011633": "setRateFees(uint256,uint256)", +"c6017a25": "playerRoll(uint256,address)", +"c601b7f8": "icoPhase1Start()", +"c60211ee": "MineFinished()", +"c6028cf3": "nextSaleStage()", +"c6029e7b": "sendBPESOTokenToMultiAddr(address[],uint256[])", +"c603a4e3": "getTotalHP(uint256,uint256,uint256,int256)", +"c603ae14": "jockeyFS(uint256)", +"c603bd7d": "_executeOrder(address,uint256,uint256,bytes,int256)", +"c603c97b": "NewPiedPiperCoin(string,string,uint8,uint256)", +"c6041333": "calculateKnowledgeBuySimple(uint256)", +"c6046f77": "mintAndTransfer(address,uint256,bytes)", +"c6049946": "saleExchangeRate1()", +"c604bec9": "hasExtension(address)", +"c604e967": "delFilter(uint256)", +"c605f76c": "helloWorld()", +"c6062bc3": "sellerRefund(uint256,address)", +"c60778cf": "RefundRequest(uint256,address,uint256)", +"c6080b3f": "KiDhon()", +"c60880e0": "Aster()", +"c609ab26": "setImageCurrentRegionId(uint256,uint256)", +"c60aa10d": "newForgeCon(address)", +"c60b099f": "removeRate(uint256,uint256)", +"c60b7784": "queryEOSCrowdsaleKey(address,address)", +"c60bdc7f": "setUsersContract(address)", +"c60c13a3": "blockAccountFunds(address,uint256)", +"c60c3aca": "callFor(address,uint256,uint256,bytes)", +"c60cae29": "changePeriodTime(uint256,uint256)", +"c60ccb0e": "takerBuyAsset()", +"c60ce271": "findNextMinute(uint256,bytes)", +"c60ced1b": "LetsGoChain(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"c60f56b2": "totalAcorns()", +"c60f6462": "resetRick()", +"c610bb07": "tranfer(address,uint256)", +"c6113205": "getTokenByIndex(bytes32,string,uint256)", +"c6114aaf": "updateIPOPrice(uint256)", +"c6117d37": "xactionFeeShare()", +"c611ded7": "reserveTokensAddress()", +"c6129a5a": "GetVersion()", +"c612cc4e": "compareDatesWithoutTime(uint256,uint256)", +"c613089f": "getBetsEvenAndODD(uint256)", +"c6132eb3": "timeBetweenRewards()", +"c6137977": "eliminateSmartContractByteCode()", +"c614b522": "getAllInvestmentPackageIds()", +"c614da67": "free(bytes12)", +"c6150296": "checkBalances(address,address)", +"c615365f": "EthBetter()", +"c6159a35": "icoTransfer(address,uint256)", +"c6169e1f": "maxTournamentContenders()", +"c616f412": "totalQuantity()", +"c6178a65": "soldTokensSale()", +"c617fe6e": "_setAllowance(address,address,uint256)", +"c6180d27": "silverBoxPrice()", +"c618210a": "crowdsalepricing(address,uint256,uint256)", +"c618a1e4": "volume()", +"c618d15f": "ConvertNumbers(bytes5)", +"c6195d03": "ONE_DECIMAL_QUANTUM_ABC_TOKEN_PRICE()", +"c6195d36": "setConfig(address,uint256)", +"c6199b6d": "getCustomerServiceAddress()", +"c619bbd3": "GetPower()", +"c61ab738": "getSupplyLimit(uint32)", +"c61b06ae": "collectibleIndexToOwner(uint256)", +"c61b8a44": "rewardGenerationComplete()", +"c61c3c4b": "buyPackWithETH(bool)", +"c61de162": "_withdrawPromoter(address,uint256)", +"c61e42ae": "mint(uint256,int256)", +"c61e5be6": "cardSetsInCirculation(uint256)", +"c61ea7a3": "CrowdfundableToken(uint256,string,string,uint8)", +"c61efde6": "MsgEngine(uint8)", +"c61f1103": "foundersTimelock2()", +"c61f13a1": "setWitdrawGas(uint256)", +"c61f3a2c": "drpToken()", +"c61fb3f1": "Moon()", +"c62072d2": "nfo_transaction(uint256,uint256,address,address,bytes32)", +"c620b5fe": "isDaySecond()", +"c620ecc7": "KYCTeam()", +"c62122eb": "AmberToken()", +"c621f96e": "deleteDIDHolder(address)", +"c6220fbd": "dividendDistributionStartTime()", +"c6221878": "projectCompleted()", +"c62239da": "printAllCompanies()", +"c6224757": "issueTreasury(address,address,address)", +"c622afb0": "getInsertPointForNumTokens(address,uint256)", +"c6235f8d": "delMarketMaker(address,address)", +"c623674f": "ipfsHash()", +"c6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", +"c6240303": "SetAuxOwner(address)", +"c6253f14": "XXXXXXXX08(uint256)", +"c625bd27": "transferFromBRXPay(address,address,uint256)", +"c625e9b1": "buyTokens(uint256,address)", +"c62631a5": "LicensingToken()", +"c62662f2": "setTotalCapitalization(uint256)", +"c6266693": "setCoreContract(address)", +"c626c52e": "isGame(address)", +"c6279ab1": "voteClose()", +"c627d0f8": "setCampaign(uint256,uint256)", +"c628ddc3": "TAIL()", +"c629061d": "external_oraclize_randomDS_proofVerify(bytes,bytes32,bytes,string)", +"c6291223": "fundTransferWithin(address,address,uint256)", +"c629cdf4": "collectPayout()", +"c629e770": "donorList()", +"c62aa67d": "getNodeId(bytes32)", +"c62c5fda": "setIcoFirstWeekRate(uint256)", +"c62cfa1d": "getMyNote(uint64)", +"c62d7407": "frozenOf()", +"c62dcd5b": "getSentTransactions()", +"c62dee76": "HumanBlockToken()", +"c62eac5c": "create(address,uint256,bytes32,int256)", +"c62fae5d": "getValueInfo(address)", +"c63012a1": "setHashPiture(uint256,bytes32)", +"c630f92b": "canEnterPool()", +"c630f96b": "ZToken(uint256,string,uint8,string)", +"c6314bf9": "companyAllocation()", +"c6317f37": "Token_Saled()", +"c631b292": "closeVoting()", +"c631e758": "clearRole(address)", +"c6321979": "buyTokenPack(uint256)", +"c632e654": "_takeRdFee(uint256)", +"c633084f": "sendGreeting(address,string)", +"c6335b26": "startInvasion(uint256,uint256[])", +"c633eb24": "generateReserve()", +"c63445f3": "setFeePool(uint256)", +"c634d032": "mintToken(uint256)", +"c634fd83": "adminSetDefaultFee(uint256,uint256)", +"c63545e9": "developer_edit_text_fees(string)", +"c6354bc0": "addCountries()", +"c6357b54": "impl_forging(address,uint256,uint256)", +"c635a9f2": "MinimumDeposit()", +"c635bf38": "keyGt(bytes32,bytes32)", +"c635d65e": "StandardToken(address,string,string,uint8,uint256,bool)", +"c6361267": "mintOneWeek()", +"c6366ce9": "TOTAL_ICO_CAP()", +"c636813e": "disapproveSingleUser(address)", +"c63755e1": "transferPresale(address,uint256)", +"c6381649": "getChats()", +"c6384071": "voteCount()", +"c638529f": "SetProvider()", +"c6388e6f": "_AtlantisToken()", +"c6393e62": "migrationSetBoard(bytes32,bytes32,string,uint8,address)", +"c63998ed": "updateUnitsOneEthCanBuy(uint256)", +"c6399fc7": "_setItemNotForSale(uint256)", +"c639e8c5": "registerVerifier(address)", +"c63a4e05": "getCartLength()", +"c63c1a27": "calcFight(uint64,uint64,uint256,uint256)", +"c63ccb3b": "Discount()", +"c63d04df": "BonusReferred(address,address,uint256,uint256)", +"c63d99db": "auctionName()", +"c63e2ebc": "setRoundStart(uint256,uint256)", +"c63e529b": "buy(string,string)", +"c63ebcbb": "claimedUnits()", +"c63f49ab": "LuckyDice()", +"c63fdcc7": "claimPayment(uint256)", +"c63ff8dd": "claim(bytes)", +"c64012a6": "CoinSent(uint256,address,string)", +"c640487d": "_changeLogicContractAddress(address)", +"c640752d": "update(address,address)", +"c641aaca": "addPrivateSaleEndDate(uint256)", +"c6427474": "submitTransaction(address,uint256,bytes)", +"c642b103": "treasuryTimelockAddress()", +"c642e7bf": "getRoundState(uint256)", +"c642f094": "MOT()", +"c6430e29": "get_firstbytes(address)", +"c6434660": "isTakePermitted(uint256,uint256,uint256,address,address,uint256,uint256,address)", +"c643872e": "paymentTo(uint256,bytes,address)", +"c6440b3e": "sub(uint32,uint32)", +"c64572b8": "minimalPriceUSD()", +"c645ecc4": "handleReturnBytes32()", +"c6461625": "setIV_R4(uint256)", +"c64743d5": "BlockMined()", +"c6476fe9": "isMinimumInEther()", +"c647b20e": "setTaxes(uint256,uint256)", +"c647c3d9": "t_1st_StageEnd()", +"c648843a": "current_week()", +"c6490835": "total_tokens()", +"c64a2358": "_targetBlock()", +"c64a3239": "updateExec(address)", +"c64aace0": "airdropConjured()", +"c64bf22d": "SummerGreen()", +"c64bf32f": "distribute_token()", +"c64d73c6": "JCoin()", +"c64e03a2": "FAPcoin()", +"c64e08a0": "CampaignPausd(uint256)", +"c64e8bc0": "executeN(uint256)", +"c64f28c8": "createImage(address,uint256,uint16,uint16,uint16,uint16)", +"c64f9490": "updateAccessoryLock(uint64,bool)", +"c64fa2e4": "totalDividendShares()", +"c64fbbce": "_calcRemainingRoundTime()", +"c65025f8": "isSmartSharingEnded(bytes32)", +"c6502da8": "basePayment()", +"c6512a33": "CNC(uint256,string,uint8,string)", +"c6544e5c": "icoSpecConfirmed()", +"c6548076": "isUserBlacklisted(address,address)", +"c65538ec": "afterSTEDistributed()", +"c655d7aa": "recoverAddress(bytes32,bytes)", +"c655fd2c": "setSlowDump(uint256)", +"c6560856": "currentJackpotInWei()", +"c6567835": "changeVaultWallet(address)", +"c6570e67": "contractorTransfer_Scoupon(address,uint256)", +"c65799a4": "ReturnRequested(address,address)", +"c6580352": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"c65808b9": "getSpell(uint32)", +"c6585a27": "updateNotaireAddress(address)", +"c659ce2b": "setBountyAddress(address)", +"c659d443": "url(bytes32)", +"c659dceb": "is_verified()", +"c65a0fdf": "updatePixelIndex(uint16,uint16)", +"c65a4068": "_multisig(bytes32,uint256)", +"c65ac542": "saleUnpause()", +"c65ad85c": "isReadyToStart(bytes32)", +"c65b125f": "setContestContractAddress(address,address)", +"c65b490e": "getBabyMakinPrice(uint256)", +"c65c6eae": "getReadableContribution()", +"c65c9567": "gameResult(uint256,uint256)", +"c65c9d63": "getNextStakedNode(address)", +"c65ccc07": "setLtdParams(uint256,uint256,uint256)", +"c65cec32": "refundTokenToCustomer(address,address,uint256,address)", +"c65d15b9": "reference()", +"c65daea0": "allocated6Months()", +"c65fb380": "isSet()", +"c6601270": "getMyIceDragon()", +"c660477b": "GetData(uint256)", +"c6610dec": "owner_share()", +"c661deb4": "issueHardcapToken(address,address,uint256)", +"c661ee4d": "proofAddr()", +"c661fed3": "isAdvisor(address)", +"c6620580": "presale_tokens()", +"c6634ef5": "certify(uint256)", +"c6638df9": "LogTemplateCreated(address,address,string)", +"c66485b2": "setDefaultResolver(address)", +"c665242b": "storeMsg(string)", +"c6653041": "ParticipantRegistry()", +"c666c798": "setExtendedTokenCap(uint256)", +"c6677519": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c667ab20": "setFundsRegistry(address)", +"c6685617": "record(address,uint256)", +"c6688445": "stringToSignExample()", +"c668dfd7": "doAirdrop(address,address[],uint256)", +"c668ee3d": "operatingFundAddress()", +"c668f71b": "exchFee()", +"c6699ba8": "addPayTable(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"c669c955": "incentivesIn(address[],uint256[])", +"c66a431d": "addContract(bytes32,bytes32,bytes32,bytes32,address,bytes32)", +"c66aaf0f": "sucessor()", +"c66bd6aa": "updateEthICOThresholds(uint256,uint256,uint256,uint256,uint256)", +"c66c2536": "doTransferOut(address,address,uint256)", +"c66c67e9": "setReservedTokensPercent(uint256)", +"c66e4095": "icoContract()", +"c66e9260": "ESCCrowdsale()", +"c66ed8f7": "lockGenesisImports()", +"c6702187": "CLAIM_SIGNER_KEY()", +"c6705a00": "signupUsersManually(address)", +"c6711049": "withdrawTokenManually(uint256)", +"c67117f5": "InvEnterpriseAddr()", +"c67146a5": "check_bet(uint256,address,uint8)", +"c6715f81": "left44(uint256)", +"c6716590": "DovieBarMitzvah()", +"c67410fb": "getOwnersLoan(address)", +"c67415f3": "mineCrystals(uint256)", +"c674e0c9": "setSmartContractStatus(uint8)", +"c67685a9": "turnOffCanUpdateDeveloperMiningPower()", +"c67747a5": "bitGuildAddress()", +"c6776239": "BitPropertyToken()", +"c6777e63": "changeUrls(string,string)", +"c677b207": "addElectedMember(address,string)", +"c6786e5a": "destroy(address[])", +"c6788bdd": "claims(address)", +"c678ca19": "comfirmIsses(uint256)", +"c678e618": "sendDividend()", +"c679580e": "isModuleHandler(address)", +"c6795b45": "bonusPatterns(uint256)", +"c67979a5": "PakistanRupee()", +"c6798033": "dedicatedProxyAddress()", +"c67acceb": "firstStageEndsAt()", +"c67af5cc": "logMarketParticipantsDisavowed(address)", +"c67b099f": "createWildcard(string,uint256,uint16)", +"c67b599a": "presaleMinPurchase()", +"c67bbc24": "getVolume()", +"c67c6eab": "stopCrowdSale()", +"c67ce6f5": "FlightDelayNewPolicy(address)", +"c67d376d": "getClosedCandidates()", +"c67e43c1": "setExpectedEnd(uint256)", +"c67f3ba3": "GanLiXia()", +"c67f3e1f": "totalDistributedinWei()", +"c67f7df5": "getDepositsCount(address)", +"c6803622": "wasCalled()", +"c68098d9": "personalCapEndAt()", +"c6814aa2": "copyPaper(address,uint256)", +"c681d68d": "badgeBalanceOf(address)", +"c68218d1": "setStrF1F2F3(string,string,string)", +"c6822356": "_createAss(string,uint32,string,uint256,uint256,uint256)", +"c682a10d": "createRoot(string,string)", +"c682d0bb": "authorized_updateSaleInfo(uint256,uint256)", +"c68309a7": "buyICloudSecsAgainstEther()", +"c683630d": "isWhitelist(address)", +"c6837a87": "getDepositeTime(address,uint256)", +"c683d8e4": "enableSale()", +"c6842868": "registerBroker(address)", +"c6851889": "Sale(address,uint256)", +"c68581ea": "addFile(uint256,string,uint256,string,string)", +"c686554e": "getInfo(address,address)", +"c687857c": "updateAsset(uint256,string,string,string,uint256)", +"c687ce9d": "setInitialOwner(address,uint256,uint256)", +"c6888fa1": "multiply(uint256)", +"c68890c7": "AcceptGuardianOffer(uint256)", +"c6891018": "take(uint256,bytes32[])", +"c68a3c1e": "setShares()", +"c68a536d": "GetLuckyRewards()", +"c68ad0a8": "Hold(address,address,uint256,uint8)", +"c68ae617": "authenticate(address,uint256,uint256,uint256)", +"c68b82c9": "ethLastUpdate()", +"c68bf3ea": "eDeposit()", +"c68cd47e": "COIN_SUPPLY_ICO_TIER_1()", +"c68cee04": "addArtistToRegistry(bytes32,address,uint256,uint256)", +"c68d81e0": "a(address)", +"c68deb7e": "saleEndTimestamp()", +"c68e35b0": "verifyHash(bytes32,uint8,bytes32,bytes32)", +"c68e52d9": "setTimeStamp(string,uint256)", +"c68ee9cd": "search(uint256,uint256)", +"c68eebe3": "getCurrentTokenPriceInCents()", +"c68f2ada": "getDoc(string,string)", +"c68f7dfc": "test_hasClaimableShares_zeroClaimableStake()", +"c68fd307": "minimumContributionPresalePhase1()", +"c68fe0c1": "WeClosedInto()", +"c69034ab": "test_21_assertGasUsage50Boards()", +"c690c9a5": "Apollo()", +"c6912a39": "confirmRedbullQuest(address)", +"c692c049": "pushData()", +"c692d9de": "LogNeumarksIssued(address,uint256,uint256)", +"c692f4cf": "renounceAgent()", +"c69493a0": "subSale()", +"c69500fd": "rewardPay(address,uint256)", +"c695ff11": "randomAPI_url()", +"c6960d4c": "winnerid()", +"c6967c17": "DeviseToken(uint256)", +"c6969604": "emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"c69768dd": "createInkeTrade(bool,uint256,uint256)", +"c6979c0a": "WhitelistContract()", +"c697cbec": "_startNextRound()", +"c6998dc2": "updatePartner1_vows(string)", +"c69a00be": "setPeggedToken(address,address,address,uint256)", +"c69a8e13": "erc20BalanceForAddress(address)", +"c69b3936": "getNumSigs(bytes32)", +"c69b5df2": "prev_hash()", +"c69b5dfb": "verifyInvestors(address[])", +"c69b761f": "admin_set_deposit(address)", +"c69c7069": "mintPaper(string,string)", +"c69cd09d": "breedingFee()", +"c69e06db": "transactionsActive()", +"c69ed5f2": "executeTransaction(bytes32)", +"c69f4481": "setBlacklist(uint32,bool)", +"c69f8623": "convertSignalToMinimal(uint256)", +"c69fa8a9": "setAuthorizerAddress(address)", +"c69fbf48": "bountyProgram()", +"c6a00369": "LRCFoundationIceboxContract(address,address)", +"c6a05c06": "payOut(uint8,uint256)", +"c6a09d95": "grantAccess(address,address)", +"c6a0b13f": "cancelOnSaleCrab(uint256)", +"c6a0eb24": "test_threeInvalidEqBytes32Message()", +"c6a118d4": "impl_transferMS(address,address,uint256)", +"c6a17d2b": "pow10(uint256,uint8)", +"c6a22681": "getParticipantIndex(uint64,address)", +"c6a2573d": "oneTokenInEurWei()", +"c6a2afa7": "TokenECCAC(uint256,string,uint8,string)", +"c6a41bd7": "updateDetails()", +"c6a470e2": "getDisputeState(uint256)", +"c6a496bf": "Artwork(bytes32,uint256,string,string,string,uint256,address)", +"c6a4d345": "setMaxEscrow(uint256)", +"c6a4f4af": "getCurrentPotInfo()", +"c6a52959": "gba()", +"c6a5d5da": "updateBlocksPerDay(uint256)", +"c6a69931": "verifyCommit(address,uint40,uint256,uint8,bytes32,bytes32)", +"c6a71577": "WEKUToken(address)", +"c6a725d8": "confirmTransaction(uint256,bool)", +"c6a7d3af": "setTokenExcange(address,uint256)", +"c6a81857": "existsCountsById(uint256)", +"c6a898c5": "u()", +"c6a97c60": "SolusToken()", +"c6a98543": "ICONIC_NIC(uint256,string,string)", +"c6ab4514": "sendRobust(address,uint256,uint256)", +"c6ab5429": "KotET2()", +"c6ab5cdc": "closeBuy()", +"c6ab5d90": "withdraw(uint8)", +"c6ab848a": "referralInstance()", +"c6abc298": "getBetAt(address,uint256)", +"c6ac53fd": "submitTransaction(address,uint256,bool,bytes)", +"c6ad1191": "MyOwnCoin()", +"c6ad5d7c": "expireBid(address)", +"c6ae3b57": "dEthereumlotteryNet(address,address)", +"c6ae67ad": "fundcruToken()", +"c6af3166": "checkDouble(address)", +"c6af43f9": "updateThresholdNewAuction(uint256)", +"c6af477c": "get(bytes32,string)", +"c6afd98a": "requestConversion(uint256)", +"c6b0263e": "setPublicCapability(address,bytes4,bool)", +"c6b0a1fa": "checkPricePair(uint256,uint256)", +"c6b0de7e": "removeFromWhiteList(address,address)", +"c6b0ffd0": "is_success()", +"c6b20dc2": "Invacio()", +"c6b2a5dd": "updateCurrentSupply()", +"c6b3a7cf": "wplus(uint256,uint256)", +"c6b3ad7b": "setTWhitelist(address[],uint256[])", +"c6b4ad80": "ctu_owner()", +"c6b511a1": "EshaCoin()", +"c6b547e6": "getDocumentName(uint256)", +"c6b59e9e": "changeParameters(uint256,uint8,uint256)", +"c6b6005b": "TMSYToken(address,address,address,address,address)", +"c6b6b1e8": "ICOReserveSupply()", +"c6b6bc3c": "burnPurchase(uint256)", +"c6b85d2b": "AtomicX()", +"c6bbb6ef": "sendTokensTo7(address,address,address,address,address,address,address,uint256)", +"c6bc8dee": "testInitial2of3()", +"c6bcd5f7": "INTEGROToken()", +"c6bcefe5": "otherPoolTotal()", +"c6bd541f": "supportTeam(uint256,uint256,uint256)", +"c6bd5a13": "dividendsPaidPerShare(address)", +"c6bd62f5": "get_CountAllHolderForProfit()", +"c6bd9187": "closeEvent(bytes32)", +"c6bec93a": "startLottery(uint256)", +"c6befedf": "createPoll(bytes32)", +"c6bf03dd": "changeReleaseAccount(address,address)", +"c6bf7489": "sendLudumToMany(address[],uint256[])", +"c6c09252": "_generateCode()", +"c6c18e31": "PCToken()", +"c6c1e248": "ProductFactory()", +"c6c20a75": "getTotalCardValue()", +"c6c25d04": "artUrlList()", +"c6c27c71": "_slrByrLmtChk(address,uint256,uint256,address)", +"c6c2966d": "setFundingEnv(uint256,uint256,uint256)", +"c6c2ea17": "fib(uint256)", +"c6c332f2": "getUserEthVolumeSaldo(address,address)", +"c6c39bda": "unitsOneEthCanBuyafter()", +"c6c3bbe6": "mint(address,address,uint256)", +"c6c3f3f9": "setKyberProxy(address)", +"c6c4676c": "currentResult()", +"c6c4bf44": "issueFor(bytes32,address)", +"c6c55773": "Topplay()", +"c6c599c1": "changeApprover(address)", +"c6c5de53": "testFailMixItemStoreNotRegistered()", +"c6c65136": "spiderReq()", +"c6c68eb7": "getAyantDroitEconomique_Compte_2()", +"c6c6b3ed": "Sale(uint256,uint256,address)", +"c6c7d143": "cancelRedemptionRequest(uint256)", +"c6c7f5aa": "impl_amountOfOrderQueue()", +"c6c839f0": "increaseFreezeValue(address,uint256)", +"c6c85ca5": "updateTokenRate(uint256)", +"c6c8823c": "getActionPrice(string)", +"c6c8cdc7": "LogFundTransfer(address,uint256,bool)", +"c6c99744": "t01_setKey(bytes32)", +"c6caa959": "sellRock(uint256,uint256)", +"c6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", +"c6cb7ab8": "getBytesValues(bytes32)", +"c6cbc52a": "revokeCertificate(bytes32)", +"c6cbd5f0": "abandonedIcoBalances(address)", +"c6cc68b9": "BuyStockRocket(uint16,address)", +"c6cce2e7": "len(address)", +"c6cd15aa": "frozenVaults()", +"c6cd712d": "delegatedTransferAndNotify(address,address,uint256,uint256,uint256,bytes32,bytes,uint256)", +"c6cdbe5e": "categories(uint256)", +"c6cdc6f6": "fastICO(uint256)", +"c6cdf77e": "upgradeWeth(address)", +"c6ce2664": "setBancorRegistry(address)", +"c6ce81f0": "manualSendTokens(address,address,uint256)", +"c6ceafef": "setFeedAddress(address)", +"c6ceb50b": "Decimals()", +"c6cebebd": "get_info(uint256)", +"c6ced32b": "getWorkersCount()", +"c6cf1c7f": "generateRandomPerformance()", +"c6cf452b": "testInitialA()", +"c6cf4dd9": "upgradeOnePointZeroBalances()", +"c6cf54de": "BIC(uint256,string,uint8,string)", +"c6d04634": "BasicCrowdsale(address,address)", +"c6d0be63": "emergencyCease()", +"c6d0ffda": "failedTemperaturesLength()", +"c6d1d23d": "totalPledgedFeesAt(uint256)", +"c6d2cb6a": "getLavaTypedDataHash(address,address,address,uint256,uint256,uint256,uint256)", +"c6d32838": "deathData_f3()", +"c6d3ab9d": "changeTokenSymbol(string)", +"c6d417de": "NewName(address,string)", +"c6d44ecc": "_getTokenCountToBuyFromSeller(uint256)", +"c6d456ec": "Winning_Entry()", +"c6d48e0d": "getVersionsCount()", +"c6d69a30": "setTaxRate(uint256)", +"c6d761d4": "cancelEscape(uint32)", +"c6d779e6": "getAmountOrdersForDay(uint256)", +"c6d784cc": "Statustelega(address)", +"c6d81547": "DecisionTokenSale(uint256,address)", +"c6d8a203": "setConversionRateAddress(address)", +"c6d8be5a": "setPricingStrategy()", +"c6d8f0c4": "getLocks(uint256)", +"c6d90e70": "AcceptsDailyRoi(address)", +"c6d9112a": "MAX_DAILY_TOKEN_COSIGN_SPEND()", +"c6d95512": "ExchangeTokenPushed(address,uint256)", +"c6dad082": "make()", +"c6daeeaa": "TIME_TO_HATCH_1SNAIL()", +"c6dbdf61": "primary()", +"c6dc3640": "AirDropPayBitsR2(address[])", +"c6dc437b": "bids_ignored_count()", +"c6dca1d2": "proposeAsset(string,uint256,uint256)", +"c6dd5098": "DateCoinCrowdsale(uint256,uint256,uint256,address,address,address,address)", +"c6dd5db5": "validateOrder(address,uint256,address,address,uint256,address,uint256,uint256)", +"c6dd8018": "Cygnal()", +"c6ddcfe8": "publicSellToken()", +"c6ddd889": "ForeignBridge(uint256,address[])", +"c6de150b": "soldIdeaWei()", +"c6de5709": "calc_partnerPercent(address)", +"c6deeb9d": "contributionAccepted()", +"c6df66a7": "firstPlay(bytes32,uint8,bytes32)", +"c6e000b5": "mntpToken()", +"c6e0329f": "LaoHuiHui(uint256,string,string)", +"c6e04590": "rateHard()", +"c6e08ba9": "EligmaCrowdsaleContract()", +"c6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", +"c6e0dc6e": "ChangeTransferStatus()", +"c6e1c178": "TheLuckyOne(bytes)", +"c6e3a9b3": "_total_sold()", +"c6e3d1b4": "promotionsOfHost(address)", +"c6e3e8fd": "getManualByAddress(address,address)", +"c6e3ffc3": "determinePID()", +"c6e416b5": "addressGains(address)", +"c6e5546c": "distributeTokens(uint256,uint256)", +"c6e68059": "DeAuthorized(address)", +"c6e68ea6": "createTournament(bytes32,uint256,uint256)", +"c6e6ab03": "allocateCandyToken(address[],uint256[])", +"c6e6b803": "grantAt()", +"c6e715e1": "rechargeDeposit()", +"c6e81b07": "remainingAuctionable()", +"c6e8b4f3": "createProxyAndCall(address,address,bytes)", +"c6e946df": "ComputePharaohReq()", +"c6e994d7": "shareWithdraw()", +"c6e9ce11": "NZD_CLEAR()", +"c6e9ff54": "changeBonusDistributionAddress(address)", +"c6ea3037": "_createSale(uint256,uint256,uint256,uint256,address)", +"c6ead8af": "tokensBurnt()", +"c6eae0c5": "limitEth()", +"c6eb8a65": "stage2BeginTime()", +"c6ed3418": "TokenMintPoD()", +"c6ed8990": "addTokens(uint256)", +"c6ed8e1b": "getApprovedProxys()", +"c6eda379": "totalZTKCheckAmounts()", +"c6ee701e": "getInts()", +"c6ee7a2c": "Linkable(address,address)", +"c6eeeb04": "increaseTimeBy()", +"c6f017e1": "addOrgan(address)", +"c6f03aaa": "getRegister(string,string)", +"c6f0557f": "insertarMensaje(uint256,string,string)", +"c6f067d1": "MVPToken()", +"c6f1649f": "deposit(address,uint256,address,address)", +"c6f3a895": "endFirstPeriodTimestamp()", +"c6f47486": "getHistoricalPrice(uint256)", +"c6f482aa": "largeCapDelay()", +"c6f48866": "isGameOver(bytes32)", +"c6f4ebb3": "o_minerador(uint256)", +"c6f54e62": "order(address[2],uint256[4])", +"c6f5b0e0": "getContributor(uint256)", +"c6f5d91f": "getAddressWhiteList()", +"c6f6122d": "transferredManually()", +"c6f664af": "totalInsuranceFlows()", +"c6f6d9d9": "lotteryCount()", +"c6f6f216": "setMaxPerTx(uint256)", +"c6f70370": "generateRoomNightToken(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c6f88b0a": "_hasCorrectTreasury(address)", +"c6f981d7": "setTrap(uint256)", +"c6f9defe": "futureExpanstion()", +"c6fadeb3": "fechAllSumNumForEncourage(uint256)", +"c6faf736": "updatePromoBonus(uint256)", +"c6fc2bae": "ACEEquityToken(uint256,string,string,uint8)", +"c6fd2103": "recordImbalance(address,int256,uint256,uint256)", +"c6fdee56": "isAddress(address,address)", +"c6fe317f": "changeVanityURL(string)", +"c6fe7296": "resetPhases(uint256,uint256,bool,uint256,bool)", +"c6ff3ae3": "EthMark()", +"c6ff4081": "tokenProcess(address)", +"c7005f04": "distributeInternal(uint256,uint256,uint256,uint256)", +"c701672f": "_recordPresalePurchase(address,uint256)", +"c7021c9e": "submitPresetTransfer(address)", +"c7024b98": "deleteHybridization(uint256)", +"c7027329": "isBossWannaCryContract()", +"c7028f96": "burnAllLeftTokens()", +"c702d3b4": "Unregistered(address,address,uint256,uint256,uint256,uint256)", +"c7033137": "settleBets()", +"c7033721": "genesisRoot()", +"c70383a5": "takeOwnerShip(uint256)", +"c7046117": "sendAsGift(address,uint256)", +"c7047fa7": "metadataUrlPrefix()", +"c704e04a": "recordingResultsOfBet(bytes16,bytes16[],uint8[])", +"c704f7ed": "lockName()", +"c705a1a8": "getMerchandise(uint256)", +"c705e1a3": "allowToken(address,address,uint256,bool,bool,address)", +"c7071c3e": "MiningRewardChanged(uint256)", +"c707936a": "Serpent()", +"c707bae5": "getTopNames()", +"c708ed9c": "getPI_edit_15()", +"c7091c5e": "INITIAL_STAGE()", +"c70978da": "UnicornBreeding(address)", +"c7097f62": "linkAddress(address)", +"c7098e91": "decodeOrderTokenAndIsBuy(uint256)", +"c709c7b8": "priceStep7()", +"c70a24af": "ROLE_NEED_LOCK_UP()", +"c70a3f1a": "whiteHat()", +"c70a9246": "GetConsentData(uint256)", +"c70ad05b": "identity_storage()", +"c70bbc13": "emitRevoke(bytes32,uint256,address)", +"c70cc560": "storePassword(string)", +"c70cdad8": "hashBacktestPositions(uint32,int64[])", +"c70cef3a": "WalamaCoin()", +"c70d169d": "answerRequest(uint256,bytes)", +"c70dd8b3": "procureTokens(address)", +"c70e8640": "amountFundTeam()", +"c70ef908": "setPI_edit_33(string)", +"c70f5eaa": "buyCard(uint256)", +"c70f8e71": "enableTypeById(uint256,uint256)", +"c70faf90": "EndMinting(uint256)", +"c70fe6bd": "migrateAuction(uint256,address)", +"c71029e1": "getBankRequests(string,uint256)", +"c7102df7": "__stopBlock()", +"c710a2aa": "marketplace_controller()", +"c7110035": "multiSigWithdrawal(address,uint256)", +"c7120bad": "linkAccount(uint8,string,string)", +"c7120d77": "sendFunds(address,uint256,uint256,uint256,uint256,uint256)", +"c712f3b3": "TradeId()", +"c7133f53": "setAccountS(address)", +"c713a67b": "momentNonceOf(uint256,uint256)", +"c713aa94": "setEndBlock(uint256)", +"c713b10f": "isSameSign(int256,int256)", +"c713bd70": "getMarketerRate()", +"c7143c41": "notSameSeed(string,string)", +"c7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", +"c7153816": "lowerSupply(uint256)", +"c715533e": "allFrozenTime()", +"c715a2b1": "withdrawnOf(address)", +"c71692b6": "capPreICO()", +"c716b616": "adopt(uint32,uint32)", +"c7172710": "pouseCrowdsale()", +"c7178230": "isDeprecated()", +"c717e9eb": "voidOrRevert(uint256)", +"c718640a": "setDragonSpecialPeacefulSkill(uint256,uint8)", +"c718b272": "Floor(uint32,address)", +"c718b2bb": "YunToken(address)", +"c718d0e0": "_setFreezedBalance(address,uint256,uint256)", +"c7192cda": "EventUpdateWasReset()", +"c7192e44": "setPaid(address)", +"c719348b": "safeCheck(uint256)", +"c71a7aea": "distributedReservedTokensDestinationsLen()", +"c71ad84d": "vehrespond(uint256,uint256,address,bool)", +"c71b583b": "closeRequest()", +"c71ba100": "revokeBalance(address,address,address)", +"c71bee4c": "OMITokenLock(address,address)", +"c71bf8ba": "multiplierOfPrice()", +"c71c0b40": "fundRaised()", +"c71c3f05": "blackListCompanies()", +"c71c6c55": "receiveIncome(bytes32,bytes32)", +"c71c890a": "weekFourStart()", +"c71cb0b4": "buildTile(uint16,uint16,uint8,uint16)", +"c71cbcf3": "recoverAccount(address,address)", +"c71daccb": "checkBalance()", +"c71ddb9f": "releaseContract()", +"c71e48d6": "setOutcome(bytes32,bytes32[])", +"c71e876b": "VESTING_DURATION_2Y()", +"c71eef58": "applyForTokenOneDay()", +"c71f2bae": "AddOpenOrder(uint32)", +"c71f311c": "setFABAcompanyTokensWallet(address)", +"c71f4253": "getNumberOfVotes(uint256)", +"c7216a44": "_generate_special_horsey(address,address,address,bytes32)", +"c721b34b": "setBattleAddress(address)", +"c721b6bd": "grantVestedTokens(address,uint256,uint256,uint256,uint256,bool,bool,bool)", +"c721cfe2": "reClaimBalance()", +"c721f08d": "activateSale()", +"c722328d": "withdrawToMultisig()", +"c722e113": "_transferDivs(uint256,uint256,uint256)", +"c722e462": "CoinX()", +"c7238af7": "escapeDestination()", +"c724772c": "turnOnIco()", +"c72486d2": "Unexpended()", +"c724acb7": "calcDifficulty()", +"c7258d7f": "isUserWhitelisted(address,address)", +"c726c2b9": "getPI_edit_24()", +"c726dea8": "memberArray(uint256)", +"c7277115": "ManagedToken(string,string,uint8)", +"c727980a": "payDeposit(uint256,address,uint256)", +"c7280315": "UnauthorizeToTransfer(address)", +"c7286a21": "removeContribution(address)", +"c7291b7e": "descriptionHashHistory(uint256)", +"c729a567": "withdrawFundToAddress(address)", +"c72a2328": "tier_rate_1()", +"c72a480e": "DGameController(address[])", +"c72b5176": "getGroups()", +"c72b5e4f": "persentRate()", +"c72be838": "gasForDCN()", +"c72c1133": "Log(string,uint256,uint256)", +"c72c757e": "delete_allowedAddress(address,address)", +"c72cbd78": "removeused()", +"c72e1576": "addAddressInWhitelist(address)", +"c72e57c7": "lockedTill()", +"c72e6d03": "p_setRefPercent(uint256,uint256)", +"c72e8baf": "PRICE_3()", +"c72e9e45": "setEgeregAddress(address)", +"c72f0dd9": "Player_HitOrStand(uint256,bool)", +"c7303c61": "createPost(string)", +"c7304f37": "changePool(uint88)", +"c730bbd8": "rateWaiting()", +"c730dfbb": "WemarkToken()", +"c731c504": "restoreFunds(address,address,uint256)", +"c731e124": "rewardslength()", +"c73202ff": "jpPercentageDivisor()", +"c732d201": "currentCount()", +"c7330bf6": "getDepositesCount(address)", +"c7343754": "getLendingItemLength(address)", +"c7347832": "asyncTransfer(address,address,uint256)", +"c734f917": "onTokenTransfer(address,uint256)", +"c73659be": "RexToken(uint256,address)", +"c736a051": "getPlayer(address,uint256)", +"c736e118": "bgxWallet()", +"c7377d80": "Bourneereum(uint256,string,string)", +"c737b7c6": "getTotalTickets(address)", +"c7381593": "Multimember(address[],uint256)", +"c7385f2e": "proofIds(uint256)", +"c738a836": "changeEnabledAddressStatus(address,bool)", +"c7395151": "updateMaxAcceptedDeposits(uint256)", +"c7398dd4": "getCustomValue()", +"c73992e4": "hasApproved(address)", +"c73997b1": "changeBaseValue(uint256,uint256,uint256)", +"c739d31c": "setPrivateSaleAgent(address,bool)", +"c73a2d60": "disperseToken(address,address[],uint256[])", +"c73aae86": "get_Release()", +"c73b187d": "oraclizeMinCallbackGas()", +"c73b302e": "projectsCount()", +"c73c27bc": "getNodeId(uint256)", +"c73c2a45": "WriteBible(uint16,uint16,uint16,uint16,string)", +"c73c933d": "ChangeBurnBoundsOperationEvent(uint256,uint256,uint256)", +"c73d3b30": "getAbilities()", +"c73defce": "ETCHaddress()", +"c73ea367": "setNickName(string)", +"c73ec2eb": "minCompositionFee()", +"c73f0c11": "burnGlobFoneCoin(uint256)", +"c73f20e3": "issueamount()", +"c73fcee2": "CLNTotalSupply()", +"c74073a1": "close(address)", +"c740bc9f": "setLongtermMinter(address,uint256)", +"c7410070": "publicbattlestart()", +"c7411eb4": "calculateAntBuy(uint256,uint256)", +"c741764c": "oldE4()", +"c741d70d": "retrieveFounds()", +"c741e85a": "set_parameter(string,uint256)", +"c741f0f3": "buyBILL()", +"c7420a9f": "store(bytes,address,address,uint256,uint8,uint8)", +"c7423803": "finishRecovery()", +"c7423f26": "strFundDeposit()", +"c74266b3": "HanYinToken()", +"c742bab1": "VUP_TOKEN_SUPPLY_TIER1()", +"c743092e": "Buy(uint256,address,uint256,uint256,uint256,uint256)", +"c7430e28": "Trillionix(address,address)", +"c7431f5c": "changeETXAddress(address)", +"c74352af": "FileServerManager()", +"c74370db": "Transfer(address,address,uint48,bytes)", +"c74442e6": "withdrawNexiums(address)", +"c7445c22": "getPassportId(address,address)", +"c7446565": "startAt()", +"c74590e3": "LogInvestment(address,uint256)", +"c745ca9a": "transferBack(uint256,address,address)", +"c745dab9": "MakerDepositedEther(uint256)", +"c7464e8a": "showRandomWinners()", +"c746a52d": "showme(uint256,uint256,uint256)", +"c746b299": "PSCToken()", +"c746c8f4": "addAllowedSender(address)", +"c747ef76": "AbieFund(address[])", +"c747f120": "totalIssuerCollateralisation()", +"c74803de": "_isContained(bytes32,bytes,bytes32)", +"c7489441": "closeMarketMaker(uint256)", +"c748b54b": "PeerWalletsERC20Token()", +"c74a2449": "canUserAnswerQuestion(address,uint256)", +"c74a4000": "cnrtoken()", +"c74a690c": "price_in_wei()", +"c74a827c": "setMonsterCreatorAddress(address,address)", +"c74a96eb": "setHGT(address)", +"c74abe43": "getMyTokensValue()", +"c74b1e01": "startPresaleTime()", +"c74b5a3e": "open5Chest()", +"c74c251f": "addSafely(uint256,uint256)", +"c74c851a": "isValidInvestment(address,uint256)", +"c74ca049": "unshareKey(bytes32,address)", +"c74ce765": "TESTTESTToken(address)", +"c74e907b": "commit(address,uint256,uint256)", +"c74fc077": "guards(uint256)", +"c74fda29": "_distributeAdvisorsToken(uint256)", +"c7506049": "_processSalePurchase(address,uint256)", +"c7508ec7": "removeClaim(address,address,bytes32)", +"c750938e": "shiftcashToken()", +"c750c3b1": "allocateEndTime()", +"c750cb79": "getHighestBidder(uint256)", +"c750df73": "submitContract(bytes32)", +"c7516da7": "CITY_INCREASE_RATE()", +"c751e027": "PoolTeam()", +"c752746e": "tokenHoldersClaimed(address)", +"c752a999": "MoneyTokenPromo(uint256,string,uint8,string)", +"c752ff62": "totalUpgraded()", +"c75363b6": "BEGIN_TIME()", +"c7542f1d": "GCCToken()", +"c754fc08": "addGroup(uint256,uint256,uint256)", +"c75514e8": "executeOptions(address,uint256,string)", +"c7559da4": "uint256ToBytes(uint256)", +"c7573e82": "registerStudent(address)", +"c7574839": "communityWallet()", +"c7576e8f": "TOBToken()", +"c7576ed4": "finalizeMigration(address,address)", +"c75782be": "startup(uint256,address)", +"c7586219": "burnShares(uint64)", +"c7586cde": "THIRD_USER_CUT()", +"c758b813": "ausGroupAllocation()", +"c75902cf": "iwtfundtokens()", +"c7591d35": "checkGuess()", +"c7593f01": "SKLAuction()", +"c75abf24": "setup(uint256,uint256,uint256)", +"c75bc4fb": "setMaintenanceLock(bool)", +"c75bc6f8": "UniverseShieldToken(address,address)", +"c75c6a06": "batchCancelVoteForCandidateByIndex(uint256,address[],uint256[])", +"c75d9d29": "unlockPurchase()", +"c75e8d55": "setRecipientString(string)", +"c75fb740": "Error(bytes)", +"c75fc22f": "freeEther()", +"c7600cde": "getInitialReporterAddress()", +"c7602316": "deploy(string)", +"c7614487": "MAX_CROWD_FUNDING_ETH()", +"c761a2f5": "revertFeeCalculatedFlag(bool)", +"c762547d": "contractCreatedCount()", +"c762c463": "mUsers(address)", +"c762d3ea": "calculateReferralBonus(uint256,uint256)", +"c762d5f7": "setBorrower(address)", +"c763400e": "endpreIco(bool)", +"c763e5a1": "chain()", +"c764427c": "addAllowedContract(address,address)", +"c764d4c4": "withdrawCountriesToken()", +"c764ee57": "VIWOZ()", +"c7656f6e": "startProject()", +"c765defd": "setBeneficiary(address,bytes32)", +"c76668cf": "transferCheck(address,address,uint256)", +"c7669337": "fundMinting(address,uint256)", +"c766ce02": "addFactProviderToWhitelist(address,address)", +"c768051a": "gla()", +"c768a4cd": "upgradeSword(address)", +"c768ac01": "totalWithdrew()", +"c76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", +"c76a74df": "Bitscoin()", +"c76b838c": "bulkSell(uint8[],bytes6[],uint32[],uint32[])", +"c76c1ba5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"c76c68d0": "CalcToc(uint256,uint256,uint256)", +"c76c9269": "ethVest()", +"c76d0754": "fiatSend(address,uint256,uint256)", +"c76de3e9": "Start(string,string)", +"c76df481": "getArmyOwner(uint256)", +"c76e7f32": "addressToPersonId(address)", +"c76f0d13": "COSTToken()", +"c76f80c8": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", +"c772173a": "ProsperToken()", +"c7725426": "setAuthorizeMintToken(uint256)", +"c772af39": "boss()", +"c7736abf": "windowOpenTime()", +"c77547f7": "maxTimeIntervalHB()", +"c7760b11": "getlevel(address)", +"c77636fc": "PauseOwnerAdmin(bool)", +"c77684f9": "ClipperCoin(uint256,string,string)", +"c776cc42": "FREEDOMCoin()", +"c7775011": "setSlaveWallet(address)", +"c77810a4": "Pot()", +"c778427b": "migrationInitiated(address)", +"c7786275": "Bitansuo()", +"c778a46b": "doPresaleMinting(address,uint256,int256)", +"c7798891": "TokensReleased(address,uint256)", +"c77a0de6": "xfer(uint256)", +"c77a16ed": "resumeTransfers()", +"c77ae9bf": "resetRaz(uint256,address,uint256)", +"c77bd8cc": "acceptAdminToo()", +"c77bdfce": "bindToken(address,address)", +"c77c00f8": "openNewBet(address,uint256,uint256)", +"c77db34e": "PWNasdas()", +"c77dff62": "shrimpyramid()", +"c77e7614": "getTotalWithdrawAmount()", +"c77ef9b8": "setAccessProvider(address)", +"c77f58c8": "transferMinusComission(address,uint256,uint256)", +"c77fe4d6": "incentivisingSupply()", +"c781d7b0": "calculateAntSell(uint256)", +"c781f97b": "getCurrentCrabPrice()", +"c7825c3f": "Pruebalillo()", +"c782fc60": "getExtraBalance(address)", +"c783dc9e": "pullEther(uint256)", +"c783fb10": "validBalanceOf(address)", +"c784648d": "addIdArrayItem(address,uint256,string,string,uint256)", +"c7847d19": "createAnnoTrade(bool,uint256,uint256)", +"c7857d27": "setMyName(string)", +"c786a66f": "_createSchedule(address,uint256,uint256,uint256,uint256)", +"c786ebd1": "LogPrepareToStart(string,uint256,uint256,address,address)", +"c7876ea4": "basePrice()", +"c7878fa0": "setHumanityFund(address)", +"c7888a07": "claimSuperDragonEggs()", +"c7891514": "forthWeekMainICOBonusEstimate()", +"c78974de": "get_test_data_length()", +"c78982d5": "getIntervalCoefficient(bytes2,uint256)", +"c789ea87": "acceptFoundation(string)", +"c78a33e1": "DestroyEvent(address,uint256)", +"c78a4c98": "icoRaised()", +"c78a8dfe": "Kardanor()", +"c78ad77f": "percentage()", +"c78af2f7": "contributeByProxyContract(address,uint256)", +"c78b200c": "transferableFromBlock()", +"c78b616c": "totalListings()", +"c78bd060": "makeInvestment()", +"c78c0138": "timestamp_contract_start()", +"c78c3a83": "getPredictions()", +"c78cdf66": "mintTimelocked(address,uint256,uint32)", +"c78d7380": "COINECTToken()", +"c78d846d": "PTCToken()", +"c78dc603": "alt_buyCollectible(uint256,uint256,int256)", +"c78e139a": "setUpgradedContractAddress(address)", +"c78f3e18": "starteth()", +"c78fc487": "indexedByOwner(address,uint256)", +"c791316e": "minFundingAmount()", +"c791bd21": "AngelToken()", +"c791cc39": "BOECoin(uint256,string,uint8,string)", +"c791e16b": "platPriceOracleContract()", +"c792024a": "tierRates(uint256)", +"c79343e5": "isSYNVault()", +"c7939f34": "oddsTotal(uint256,uint256)", +"c79403f5": "moveFurnaceData(address[],uint16[],uint256[],bool[],uint256[])", +"c7941a09": "setDelegadoDeEscuela(bytes32,bytes32,uint8,uint8)", +"c794549e": "setDesignatedReport(bool)", +"c7946842": "URLOf(uint256)", +"c794ef10": "purchaseCostEther(uint256)", +"c794f575": "makeAnnualInvest(uint256)", +"c7956846": "get_solved(address)", +"c795dd24": "availableTokenBalance(uint256,uint8)", +"c7963ae8": "Tabo()", +"c7968135": "totalNumberOfFunders()", +"c798b5cf": "CommunityToken()", +"c7990f70": "SetDevFee(uint16)", +"c7995a4e": "_registerTrade(uint32,uint256)", +"c79a68cf": "setPrices(uint256,uint256,string,string)", +"c79ba27d": "kscTransferFrom(address,address,uint256,string)", +"c79bb895": "SGACrowdsale()", +"c79bdb46": "setRewardPercent(uint256,uint256)", +"c79c9105": "countOfPublicKey(bytes32)", +"c79eaa22": "sub(uint96,uint96)", +"c79f5321": "update_data()", +"c79f7cef": "_postValidatePurchase(address,uint256)", +"c79f8b62": "error()", +"c79fc609": "addressC()", +"c7a02061": "totalEtherCollected()", +"c7a08487": "_generateRandomDna()", +"c7a16847": "SetRewardMulti(uint256)", +"c7a16965": "testUint(uint256)", +"c7a1865b": "play(bytes32)", +"c7a1f221": "tokenPriceInCents()", +"c7a1fb36": "PRE_SALE_CAP()", +"c7a24403": "Illuminatus()", +"c7a28247": "stopBuyingTokens()", +"c7a2a663": "getCodeAtAddress(address)", +"c7a323fe": "ACTION_INITIAL_BIDDING()", +"c7a32726": "StartCrowdsale()", +"c7a37657": "getCfd(uint128)", +"c7a3778f": "testControlRetractLatestRevisionNotUpdatable()", +"c7a4af15": "setPrice(uint8,uint128)", +"c7a4cf8d": "checkOverMaxcap(uint256)", +"c7a4e4bc": "VIPCHAINToken()", +"c7a5d285": "extract(address)", +"c7a6c454": "confirmTransaction()", +"c7a6c6d4": "_creditTokens(address,uint256)", +"c7a86dd2": "updateEnergy(uint32,uint32,uint256)", +"c7a86e33": "signedApproveCheck(address,address,uint256,uint256,uint256,bytes,address)", +"c7a96920": "stopICO_20_March()", +"c7a9a64b": "depositNetfRevenue(uint256)", +"c7a9d6de": "startICO(address)", +"c7aa278e": "poolInvestors()", +"c7aaa83f": "Bounty0xToken()", +"c7abc42a": "getgamecard(uint256)", +"c7ac0909": "AddedName(address,string,uint256,address,uint256)", +"c7ac14b1": "dividendCutPercentage()", +"c7acae2e": "getServerAddress()", +"c7ad31b0": "LogHodlStartSet(address,uint256)", +"c7adb61f": "initializeTreeCoinProject(address,uint256,uint256,address,address)", +"c7adef28": "getCitationRecord(bytes32,uint256)", +"c7ae3ad5": "fillBuyOrder(uint256,uint256,uint256)", +"c7ae7451": "addEvent(address)", +"c7ae9632": "xfer(address,address,uint256)", +"c7af18f1": "SedPoSToken()", +"c7af3dd1": "updateCost()", +"c7afe9f2": "setTokenAddress(address,address)", +"c7aff0d7": "manuallyProcessTransaction(address,uint256)", +"c7b0235b": "DPPCrowdsale()", +"c7b0f0ca": "lockTokensPercent()", +"c7b0fc5e": "usedItem(uint256)", +"c7b11fca": "mainMaxContribution()", +"c7b160db": "getTotalNumberOfAddressesReceivedAirDrop()", +"c7b1fd00": "usdPerEthLogSize()", +"c7b23ec6": "initalizeOrgan()", +"c7b27a25": "IOReceipts()", +"c7b31ed0": "store(address,address,uint256,uint8,uint8,bytes)", +"c7b3b0d4": "getCompanyInfo(bytes32)", +"c7b41aa9": "getSmartCoins()", +"c7b43f02": "expressBuyNums(uint256,uint256[])", +"c7b5716d": "createSellOrder(address,uint256,uint256,uint256,uint256)", +"c7b6084c": "backendOperator()", +"c7b6ccae": "opetToken()", +"c7b6fd6a": "subDays(uint256,uint256)", +"c7b799ae": "addressFunc(address,address)", +"c7b7d6ca": "sendResearchAndDevelopment()", +"c7b81f4f": "isEpochDataSet(uint256)", +"c7b850dd": "whitelistedContributors(address)", +"c7b87d74": "setOldTokenAddress(address)", +"c7b97288": "addTokenEmission(uint256,uint256,uint256)", +"c7b98dec": "right1(uint256)", +"c7b9bc9e": "Token(uint256,string,uint8,string,string)", +"c7b9c355": "setSecondBonusPercent(uint256)", +"c7ba24bc": "claimAndConvert(address[],uint256,uint256)", +"c7ba9264": "KAL4Token()", +"c7bb38e7": "setAmount(bytes32,uint256)", +"c7bb42f7": "TEAM0()", +"c7bc747d": "retrieveTokenByContract(address,uint256)", +"c7bce243": "Menu05()", +"c7bdbb95": "allowTransferOwnership(bool)", +"c7bdcde9": "IYAKIN()", +"c7be44fa": "banReferrer(address)", +"c7be7ae3": "frozenSupply()", +"c7bec318": "removeAccountAddress(address)", +"c7c049fc": "saleGoal()", +"c7c0c5bf": "modifyMarking(bytes32,uint256)", +"c7c16353": "weiToRaise()", +"c7c2aa25": "WarriorsBackToHome(address,address,uint256)", +"c7c2aee3": "personalCap()", +"c7c3268b": "setBaseUrl(string)", +"c7c36959": "GubbermentOverthrown(address,address)", +"c7c3b1c1": "canTerminate()", +"c7c3b2dd": "setMockedTotalCollected(uint256)", +"c7c40fbb": "addPassportLogic(string,address)", +"c7c4ff46": "depositor()", +"c7c54e4d": "theEBCC(uint256,string,uint8,string)", +"c7c5f59d": "forBounty()", +"c7c625ee": "rand(address)", +"c7c6939c": "LongPlace(address[2],uint256[8],uint8,bytes32[2],uint256)", +"c7c7322b": "testCantInitiateIncorrectSale()", +"c7c7e9ea": "getAllowed(address,address)", +"c7c806cb": "ambassadorAddress()", +"c7c80f02": "teamLockUp()", +"c7c83804": "setFinancingsAdd(address)", +"c7c8b07b": "KillSwitch()", +"c7c8c424": "ownersEth()", +"c7c8ff35": "getNeutralMutationCost(uint8)", +"c7ca07bb": "QuantityAvailable()", +"c7cb94e3": "GenPlayerRatio(address,uint256)", +"c7cbb9c8": "_createArea()", +"c7cc3743": "addContractAddr()", +"c7cc4ee9": "later()", +"c7cc63aa": "getBetTitle()", +"c7ccc559": "upgrade_cap()", +"c7cd31d5": "setLLV_edit_23(string)", +"c7ce060b": "publicDeductDeposit(address,uint256)", +"c7ceac99": "calculateBattleBoost(uint16,address,address)", +"c7cec7f8": "versions(bytes32)", +"c7cefbf1": "IDH()", +"c7cf28fe": "canClaimTimeout()", +"c7cf6a2a": "LJSToken()", +"c7cf8075": "getAvailableDevFund()", +"c7d044be": "AutoChainToken()", +"c7d128d1": "readTotalNumberOfUserPurchases(address)", +"c7d20f82": "addMeterpoint(address,int256)", +"c7d22929": "betOpen(uint256,string,string,string,string)", +"c7d26e90": "getAccessoryClaims(uint64)", +"c7d4f68e": "getRobotForUserByIndex(address,uint256)", +"c7d586c9": "provideProofOfWork(uint256)", +"c7d5b6f1": "cancelSellOffer()", +"c7d5c0af": "XVOTOKEN()", +"c7d5d171": "costRecharge(uint256)", +"c7d5dd36": "Factory(address,address)", +"c7d6e988": "fundOwnerWallet()", +"c7d6faf1": "easyPropose(address,uint256)", +"c7d77970": "registerNameXaddrFromDapp(address,bytes32,address)", +"c7d7b5a6": "fillOrder(address[5],uint256[6],uint8,bytes32,bytes32)", +"c7d96304": "canMateWithViaAuction(uint256,uint256)", +"c7d9f4d1": "transferableBalanceOf(address)", +"c7da93b7": "specialTransfer(address,uint256,uint256,uint256)", +"c7daae0a": "firstFreeAddressIndex()", +"c7dab436": "vestingTime()", +"c7daceb1": "acceptBuyNowOffer(uint256)", +"c7db04d7": "SelfDestructManager()", +"c7db3342": "getCurrentRoundKey()", +"c7dbbc47": "nextTicket()", +"c7dbc2be": "minimumPodSize()", +"c7dd4b4f": "gameID()", +"c7dddf0f": "itemHistoryOf(uint256)", +"c7de2d13": "WithdrawToken(address,uint256,address)", +"c7dea777": "areOldMiningKeysVoted(uint256,address)", +"c7deda22": "Doug()", +"c7df0a90": "all_eth()", +"c7df9054": "getBuyUnitsInformations()", +"c7dfabcc": "Buy(uint8,string)", +"c7e04670": "publicSaleTokenPrice()", +"c7e0635d": "AGENT_STATUS(bytes32,address)", +"c7e09d9c": "getSides(uint256)", +"c7e12723": "Erc20Test(string,string,uint8)", +"c7e210c3": "optionPoolMembersLockTotalOf(address)", +"c7e22ac4": "setOracleGas(uint256)", +"c7e284b8": "getTimeLeft()", +"c7e293d9": "allocateFunds(address,address,uint256)", +"c7e35a5c": "LOCK_START()", +"c7e3b6e8": "airdropAndVault()", +"c7e3ff4b": "pregnantMonsters()", +"c7e40b3a": "StatXCoin()", +"c7e416c5": "LOG_SuccessfulSend(address,uint256)", +"c7e4f453": "TokenFactoryImpl(address)", +"c7e50dc9": "isLOC(address)", +"c7e52480": "convertYourTokens()", +"c7e56740": "_getIndex(address,address)", +"c7e58644": "getSharesCount()", +"c7e59334": "toggleAttachedEnforcement(bool)", +"c7e5fc3b": "GlobalTechToken()", +"c7e67360": "GAS_BUFFER()", +"c7e6926e": "_airdropTotal()", +"c7e6d04f": "ownerConfig(address,uint256,uint256)", +"c7e73adf": "getParticipantSource()", +"c7e83451": "matchMultipleOrders(uint64[],uint64[])", +"c7e92738": "MicroBTC()", +"c7e975b8": "partner2_voted_update_marriage_status()", +"c7e9aaaf": "_isSiringPermitted(uint256,uint256)", +"c7ea07bb": "SealTokenSale(address,address,address,uint256,uint256,uint256,uint256)", +"c7ea8a68": "EOSToken()", +"c7ebc8fe": "getWinnings(address,uint256,uint256)", +"c7ed1e86": "getNoOfMsgs(address)", +"c7ed4555": "DepositSlot(address)", +"c7ed4d8c": "distributeVM(address[],uint256,uint256)", +"c7edaf33": "TheGoDgital()", +"c7edf88c": "DOW_SAT()", +"c7ee005e": "prime()", +"c7ee1c4e": "getPreviousSeed()", +"c7ee98c2": "trustedBurnTokens(uint256)", +"c7ef47d7": "isKill()", +"c7efa689": "getSaleDay(uint256)", +"c7efb162": "setup(address,address,address,uint256,uint256)", +"c7efb8ab": "ledger(address,bytes32)", +"c7f04e65": "purchase(uint32)", +"c7f132d5": "QuarterCoin()", +"c7f18d5b": "updateData(uint256,uint256,uint256,uint256,uint256,bytes,bytes)", +"c7f1f06f": "GetEmail(uint256)", +"c7f24b11": "getCCH_edit_8()", +"c7f2c3d9": "EasyInvest10()", +"c7f2e6af": "Contribute(bytes20)", +"c7f300ed": "CrowdSale_ModifyEndDate(uint256)", +"c7f3166d": "getBetInfo(uint256,uint256)", +"c7f31f1c": "HandWins(address)", +"c7f36010": "setupClaim(uint256)", +"c7f423c7": "setLeaf(uint256,bytes32)", +"c7f42c64": "battleFee()", +"c7f43b57": "TIER2_CAP()", +"c7f46dea": "testRewardBS(bytes32)", +"c7f5f1e8": "DistributeNextNTokens(uint256)", +"c7f6f40c": "updateKYCStatus(uint256)", +"c7f6fa60": "EIDTokenERC20()", +"c7f71103": "futrMiner()", +"c7f7475c": "AdminGroup(string)", +"c7f758a8": "getProposal(uint256)", +"c7f7be5c": "setGxCoinContract(address)", +"c7f84605": "___upgradeTo(address)", +"c7f86c37": "withdrawFundsRP()", +"c7f8fe65": "getBalanceReleased()", +"c7fa1d47": "Hedge()", +"c7fa52de": "setRegistryAddr(address)", +"c7faa88d": "collectProfit()", +"c7fb117c": "depositCancel(uint256,uint256)", +"c7fb9aab": "displaymultisig()", +"c7fbad27": "revealStart()", +"c7fc9ace": "WorldNode()", +"c7fccd3f": "isAuthorizedForToken(address,address,address)", +"c7fde81f": "changePOI(address)", +"c7fe11d4": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", +"c7fee63e": "updateRate()", +"c7ff1584": "isHalted()", +"c7ff1b60": "maxCapReached()", +"c7ff2086": "getPropertyColorsOfRow(uint16,uint8)", +"c8004293": "lastKnownPropertyAddress()", +"c80094b3": "testEquals()", +"c8016c85": "MAIN_SALE_BONUS_PERCENTAGE_PHASE1()", +"c8027210": "Malaysia370()", +"c8028bee": "auditorRegistry()", +"c803486b": "getAvailableFunds(address)", +"c803ae2a": "kycComplete()", +"c803f981": "care(uint256)", +"c8045941": "changeDescription(string,string)", +"c8046827": "registerBurn(uint256)", +"c804a58e": "toggleRefunding()", +"c8051885": "isWithinContributionRange()", +"c805801c": "VoipTken()", +"c805914a": "setRespectRequiredToRecruit(uint256)", +"c805b6bc": "PRESALE_TOKEN_HARD_CAP()", +"c805f68b": "setRelay(address)", +"c806286d": "setFreeze(uint256,bool)", +"c80667e3": "appendUintToString(string,uint256)", +"c80675de": "sendDiamond(address,bytes32,string,bytes16,uint256)", +"c806a91d": "TOKEN_TOTAL_CAP()", +"c80743c5": "maximumTokenAmount()", +"c807be58": "endTimeSale2()", +"c807cb02": "Uninjected(address)", +"c807e645": "JECKAirdrop()", +"c8081bd2": "requestMutualJobCancellation(bytes16,address,address,uint256,uint256)", +"c8088830": "_canPayOraclize(uint256)", +"c808cf86": "exchangeHelenium(uint256,address)", +"c80944e5": "buildRight(address,uint256)", +"c80a589b": "withdrawTokenBalance(uint256,address)", +"c80b05e1": "isViolated(address)", +"c80bbb17": "ReserveFund()", +"c80becb6": "enablePreSale()", +"c80c14a5": "getBankBalanceWEIInfo()", +"c80c28a2": "getNumberOfParticipants()", +"c80d3694": "saleWeiCap()", +"c80db88c": "getSchellingExpansion(uint256)", +"c80e0ddd": "saveCode(uint256,string)", +"c80e3e1e": "SingularityTest23()", +"c80ec522": "withdrawn()", +"c80f9a4f": "transferPokemon(address,address,uint256)", +"c81050e6": "checkBranchInEpisode(uint256,uint256)", +"c8117b5b": "extractBalanceOfLength()", +"c81196da": "numberOfMilestones()", +"c8135ba1": "bids_decrypted_count()", +"c813c30e": "testThrowSomething()", +"c813e02e": "_isLeapYear(uint16)", +"c814324c": "timeBought(address)", +"c81450a0": "RaffleResult(uint256,uint256,address,uint256,uint256,bytes32)", +"c814864c": "CreateChips(uint256,uint256,uint256,uint256,bool)", +"c8149cbc": "setMigrationLock(bool)", +"c8159d70": "Seriality()", +"c815c9ef": "TerraEcoToken()", +"c8162068": "setTeamAddr(address)", +"c8162497": "BETX()", +"c8166a8a": "Question()", +"c817d75d": "Transfer(address,address,uint256,uint256,uint256)", +"c817e84d": "addWhitelisted(address,bool)", +"c8187cf1": "determineReward(uint256)", +"c818acf7": "createCloneToken(address,uint256,string,uint8,string,bool,address)", +"c818faec": "updatedAt(uint256)", +"c8193841": "addSoftwareVersionRecord(bytes32,bytes32,uint256)", +"c8199231": "createContractTot(string,uint256)", +"c8199826": "buyTickets()", +"c819f6e9": "levToken()", +"c81a5455": "Milestone_CloseTheIco(string)", +"c81a7d10": "CurryCoin()", +"c81bd106": "approveNewOwner()", +"c81c590d": "getEtherAmount(uint256)", +"c81caae7": "acceptMember(address,string,string)", +"c81cbc5c": "MIST()", +"c81cf764": "getAmountFromBuyer(address,address)", +"c81d1d5b": "getPunk(uint256)", +"c81e05ad": "KODO()", +"c81eccda": "getTokenId(bytes)", +"c81ede67": "pollBurnQty()", +"c81f49cb": "getTotalPaid(address,uint256)", +"c8216f33": "getLineUpEnable_default()", +"c8226e61": "withdrawEgereg(uint256)", +"c822bd3d": "transferCost(bytes16,uint256)", +"c822d7f0": "isRegistered(string)", +"c8234ac8": "createTokenUri(uint256)", +"c82467c9": "ComputeTokenPrice()", +"c8248f8d": "PreICO(address,address,address,address,address)", +"c824a222": "auctionsOf(address)", +"c82531a3": "createAuction(uint256,address,uint256,uint256,uint256,address)", +"c825a939": "fundingRatePredictionBonusPoolInIBC()", +"c827a7bb": "testExternal(uint256[20])", +"c82829e0": "setSoftHardCaps(uint256,uint256)", +"c828371e": "getStartTime()", +"c828e6ee": "getCurrentlyClaimableAmount(address)", +"c8290efd": "zen()", +"c8291dbd": "increment(address,address)", +"c829958c": "isImported(address,address)", +"c8299b10": "gotransfer()", +"c8299ed8": "afterClaim(uint256,uint256,uint256,uint256,uint256)", +"c829b0e3": "MAX_LAYERS()", +"c82aac47": "searchByTag(bytes32)", +"c82b8ec5": "EtherDaruma(address,address,address,uint256,uint256,uint256)", +"c82bb37b": "PotSplit(uint256,address,bool)", +"c82bd265": "ContributionAccepted(address,uint256,uint256)", +"c82c73c1": "isAddressSet(address)", +"c82cd463": "transferFundkeeper(address)", +"c82cd8e6": "ControllerRetired(address)", +"c82d81dd": "GICAToken()", +"c82db402": "ownerSetOraclizeGas(uint256,uint256)", +"c82f2418": "decodeTokenOrderTokenAndIsBuy(uint256)", +"c82f8d9e": "distributeToken(address,address,uint256)", +"c83068eb": "setPre(uint256,uint256,uint256,uint256,uint256)", +"c8306c89": "set_arbits(address,address,uint256)", +"c830b89d": "ReleaseDateChanged(address,uint256)", +"c830c656": "increasePermillage()", +"c83126ed": "generateVoteForDelegationSchemaHash(uint16,address,bytes32,address)", +"c831306e": "icoTimeBonusPhase2End()", +"c831391d": "getPoolOverlapSize()", +"c83261bd": "claimTokenFor(address)", +"c83281e9": "UserAccount(bytes32,bytes32,bytes32,bytes32,bytes32)", +"c832b00d": "limitDateCrowdWeek3()", +"c8335143": "AlekseiZaitcevPrivateSale(uint256,uint256,uint256,address)", +"c8335ba0": "setInitSize(uint256)", +"c833d7b1": "BigbomContributorWhiteList()", +"c834d03d": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[3])", +"c83507a8": "removeAdv(address)", +"c836292b": "teamMembers(address)", +"c836efcb": "_permitted()", +"c83780a2": "crowdsaleCounter()", +"c838ccb6": "getDelegates()", +"c839008e": "setPixelPropertyContract(address)", +"c8391142": "j1Timeout()", +"c83923c5": "getMetadataChannel(string)", +"c83927a0": "pdo()", +"c8393ba9": "initiateWithdrawal(address,uint256)", +"c8398947": "currentStateActive()", +"c839c0de": "CreateVersion(bytes,string)", +"c83a7e94": "AEToken()", +"c83a9472": "deathData_a11()", +"c83a981c": "openPool(uint8)", +"c83abb40": "registerNotary(address,string,string,string)", +"c83ac557": "ChangeCommunityHolder(address,address)", +"c83be888": "single_move(uint256,uint8,uint8)", +"c83cb16c": "_not(bool)", +"c83ea900": "soldDET(address,uint256,bytes32)", +"c83ec89d": "tradeWithOutputFixed(address,address,address,uint256,uint256)", +"c8401567": "betbucketTwo()", +"c840b187": "goodsNotReceived(uint256)", +"c841df4f": "getMonsterStats(uint256)", +"c8420d2f": "CollectibleIndex5()", +"c8422c2d": "boostrapParty(address,address)", +"c8435ba2": "levelOneTokenNum()", +"c843c0c8": "getMyAlien()", +"c8443fad": "revokeExchanger(address)", +"c8449b65": "Gold()", +"c84640f5": "addtotalCardValue(uint256,uint256)", +"c846690b": "initialiseToken()", +"c847259c": "changeClub(address)", +"c84748f9": "returnFrozenFreeFunds()", +"c848a0bc": "notifySellToken(uint256,address)", +"c848fab7": "SeeleToken(address,address,uint256)", +"c84920cb": "Ubisoft()", +"c84a6140": "BackdoorBurner(uint256,string,uint8,string)", +"c84a8766": "setRegionImageDataCloud(uint256,uint256,uint256,string)", +"c84aba9b": "demurrageBalance(address,address)", +"c84b0555": "token(address,string,string)", +"c84b1ce7": "PUBLIC_RESOLVER_LABEL()", +"c84b470f": "SALE_PERCENTAGE()", +"c84ba84a": "finishedPurchase()", +"c84c009b": "Operated(address)", +"c84c5963": "setPauseCutoffTime(uint256)", +"c84c692a": "isTradableFciInSession()", +"c84c9ef5": "LastName()", +"c84ca867": "getCurrentPriceAttoTokensPerWei()", +"c84cda0f": "setRate(string,uint256)", +"c84d56e0": "setRealmSale(uint256,uint256)", +"c84eb9e5": "invest(address,bytes)", +"c84f5d6f": "RowanCoin()", +"c850029e": "returnTokenOwnership()", +"c85147c5": "mediumCount()", +"c8517b48": "CNDTTokenDeposit()", +"c851b643": "legendsToken()", +"c851ed7c": "startNewVote(uint256,string)", +"c8520131": "Withdrawable()", +"c85234c7": "startPreICOStage3()", +"c8525c09": "unlock(bytes32,bytes32)", +"c853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", +"c8544e81": "addGenesisPairs()", +"c854db91": "vault_refund(address)", +"c85501bb": "minThreshold()", +"c855d689": "returnLongAddress(bytes32,uint8,bytes32[2])", +"c855e7bb": "tokenForTeamGranted()", +"c8578967": "setNewChecker(address,address)", +"c857a88c": "createDataRequest(address,address,uint256,uint256)", +"c8582572": "affiliateCommission(address)", +"c8583ad6": "UnregisteredPrefix(string,address)", +"c8583e69": "getEthUsdRate()", +"c858c017": "testMsgSenderInVoters()", +"c859c482": "holdBalanceOf(address)", +"c85aff48": "tokenNAVMicroUSD()", +"c85b7941": "totalEthBankrollReceived()", +"c85bb02a": "isParticipating(uint256,address)", +"c85bb1f7": "_doMapAuto(address,string)", +"c85bc22d": "getDefrostFactor()", +"c85c11eb": "TOKEN_SECOND_PRICE_RATE()", +"c85c75b2": "completeCodeUpdate()", +"c85dba67": "getPrefix(uint32,int256)", +"c85e07b9": "stamp()", +"c85e0be2": "setHost(address)", +"c85e1f73": "totalRecalled()", +"c85ee477": "FileCoinCash()", +"c85f6a80": "emission(address)", +"c85fd4f8": "deployToken(string,string,uint8,string,address,bool,address)", +"c86039da": "redeemedSupply()", +"c8612b2f": "TOKENS_FOR_SALE()", +"c861f243": "_getBonus(uint256)", +"c861f3a0": "houseStake()", +"c8622c24": "claim(address,bytes32)", +"c86283c8": "withdrawTo(uint256,address)", +"c862a134": "feePercent_()", +"c8636bb9": "forbidToken(address[])", +"c8643bc2": "MintOperationEvent(address,uint256,uint256,uint256)", +"c864e760": "recordCommissionEarned(uint256)", +"c865164b": "StakingPriceFeed(address,address,address)", +"c865c29b": "HopiumCoin()", +"c865cadb": "setActiveValueBonus(bool)", +"c86662a3": "addOwner_(address)", +"c86779a4": "lastBlock_v14()", +"c867cccb": "Contribution(address,address,address,address)", +"c867ea63": "GoldConnect()", +"c867fa29": "BookERC20EthV1p1Factory()", +"c86813a8": "PassContractorCreator()", +"c8685f21": "validUsername(string)", +"c868a569": "canBreed(uint40,uint256,uint40,uint256)", +"c8690233": "pubkey(bytes32)", +"c8691b2a": "getHistory(uint256)", +"c8695e59": "RPS(bytes32,address)", +"c86a90fe": "sendCoin(uint256,address)", +"c86a9dea": "isKickoffEnabled(uint256)", +"c86b7001": "randomOrgAPIKey()", +"c86c50f7": "changeAllowInvestment(bool)", +"c86d0251": "_getTeamSupportAmount(uint256,uint256)", +"c86dca5a": "isExploring(uint256)", +"c86e25d7": "tokenCreateContract()", +"c87022d3": "startMonarchyGame(uint256)", +"c8705544": "payAmount()", +"c870ef78": "MINING_POOL_HOLDER()", +"c8713608": "HELIX()", +"c87158fa": "_addBlockProducer(uint256,address)", +"c87235fd": "burnRemaining(address)", +"c872da3c": "KIND()", +"c8738351": "uintFloor(uint256,uint256)", +"c8744434": "lastTransferQueueIndex()", +"c8750d8a": "testHitSoftCapPresale()", +"c8756f12": "getTotalSponsorship()", +"c875b1fb": "distributeBonuses()", +"c875d16f": "ArthurStandardToken(uint256,string,uint8,string)", +"c8765ff2": "rateICO()", +"c87744d9": "_approvedForTransfer(address,address,uint256)", +"c8781368": "freezedMoment()", +"c8788134": "discountedPrice()", +"c878851d": "setCreate(bool)", +"c878dad9": "multiFreeze(address[],bool[])", +"c8796572": "collectFees()", +"c87a31cd": "fillOrder(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", +"c87b36ed": "disableBetting()", +"c87b56dd": "tokenURI(uint256)", +"c87be1af": "recoverHashSigner(bytes32,bytes)", +"c87c07de": "deprecateMeleeSubtype(uint8)", +"c87cfe63": "setData(uint256[])", +"c87e5613": "setMaxTokenBuyin(uint256)", +"c87e8bd0": "icoRound6()", +"c87f9386": "setAllItemActive(address,address,bool)", +"c8804b7b": "DSC()", +"c88098f2": "setParticipationFee(uint256)", +"c880fab1": "dragonTreasureToken()", +"c8813ffd": "addToVIPList(address[])", +"c881b3c0": "AllowedGasPriceUpdated(uint256)", +"c88215e7": "calculateExcessBalance()", +"c882acc8": "deleteMemberOfGroup(address,uint256)", +"c882ee8c": "testUint(int256,uint256)", +"c882ef92": "GameOpened(uint256)", +"c8830ddf": "ECryptoToken()", +"c883346e": "_getProviderIsForRent(uint256)", +"c8833f56": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[2])", +"c883d3fa": "addMappingForPlayerIDs(uint256,uint256,uint256)", +"c88449a1": "_getTransferFeeAmount(address,uint256)", +"c8852b5b": "getBirthCut(uint256)", +"c8857dcd": "setOperateMode()", +"c885bc58": "withdrawReward()", +"c885e92d": "contlength()", +"c8860f41": "getWinningChoice(uint256,uint256)", +"c886594d": "getNodeEnabledStatus(address)", +"c8865c0e": "allocated24Months()", +"c886ec0d": "getTreasureProbabilityType(bytes32)", +"c888fafd": "bankerDepositPer()", +"c888fcc3": "getPollResult(uint256)", +"c8894a0c": "WMToken(address,uint256)", +"c88961da": "createKingdom(string,address,address,address)", +"c88996d6": "MessageCallTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", +"c889e0de": "finishAirdropBy0Eth()", +"c88b675b": "setMaxAvailableSpot(uint256)", +"c88b77e0": "grantTeamAdvisorToken(address)", +"c88b7c8e": "setConversionFee(uint256)", +"c88bf75a": "applyRaises(uint256[])", +"c88c5101": "investor_bonus()", +"c88cc6ac": "getCertification(address)", +"c88e662e": "externalSales(address,uint256)", +"c88fd3ec": "changeIcoRate(uint256)", +"c88fe1fa": "maxCapMintTransfer()", +"c890635a": "ownerSale(address,uint256)", +"c890f27e": "GenChipByWeight(uint256,uint8,uint256[])", +"c891a29d": "setEpochData(uint256,uint256,uint256,uint256[],uint256,uint256)", +"c8922057": "MAXUM_SUPPLY()", +"c89231b3": "mintForInvestor(address,uint256,uint256)", +"c892693b": "setMotAddress(address)", +"c892cfdf": "amountRised()", +"c8931355": "setONTExchangeRate(uint256)", +"c893ae0b": "ptToPtwo()", +"c894e1e5": "setTransferFeeRate(uint256)", +"c895304b": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256,uint256)", +"c89547f9": "adminSetTxFeeInviteGame(uint256)", +"c89550a8": "BMICoin(address,address)", +"c89605a2": "DEALERWIN()", +"c8961644": "unBan(address)", +"c89924da": "totalTokensForSaleDuringICO2()", +"c8997121": "forwardFunds(uint256)", +"c899fa77": "hodlerTotalValue3M()", +"c89a32ab": "releaseTargetToken(uint256)", +"c89acc86": "send(address,bytes)", +"c89b50c7": "credit(address[],uint256[])", +"c89b7d8c": "buyCommonTTWByETH(uint256,address)", +"c89b989e": "lckTokenAddress()", +"c89baff5": "GoldenGate()", +"c89cea99": "getMyAnts()", +"c89d6063": "claim(bytes32,uint256,address,uint8,bytes32,bytes32,bytes32[])", +"c89dcfce": "mint(address,bytes32,uint256)", +"c89e4361": "delegate()", +"c89e528e": "receiveCreateAuctionFromArray(address,address,uint256[],uint256,uint256)", +"c89ec68a": "startRecovery(address,address)", +"c89f2ce4": "funds()", +"c89f51ef": "createPromoRabbit(uint256,address)", +"c89f8f08": "testGetController()", +"c89faa72": "confirmTransferItem(address,address,string)", +"c89fb5f0": "ethunpause()", +"c89fcf58": "setNoviceDungeonId(uint256)", +"c8a1becb": "_monthToNumber(string)", +"c8a1e1c7": "sendInternally(address,uint256)", +"c8a2c880": "setCallStack(uint256,uint256)", +"c8a2cc03": "strikersMetadata()", +"c8a2e0bc": "addCustomerReqACC(address,address,address,address)", +"c8a3af72": "is111bit(uint256)", +"c8a45c44": "tokenMaturityPeriod()", +"c8a48d71": "removeStep(bytes16)", +"c8a4ac9c": "mul(uint256,uint256)", +"c8a4c767": "kickCommitteeVote(address)", +"c8a4ddc3": "resetBatches(address,address)", +"c8a4e001": "EarlyPurchaseAmended(uint256)", +"c8a59bb6": "GrTokenTest()", +"c8a5e6d7": "transferFundAndEndGame()", +"c8a635b7": "setWeiRate(uint256)", +"c8a6dab7": "test_tokenFreeze()", +"c8a71e14": "bonusCalculationFactor()", +"c8a73eca": "transferOpen()", +"c8a7432f": "getPreIcoPurchase(address)", +"c8a76494": "Bet()", +"c8a7836e": "getFINMigrationRecord(address)", +"c8a808d6": "avatar(address,address,uint256,uint256,bytes)", +"c8a814b8": "firstSend(bytes32)", +"c8a830ba": "max(uint256)", +"c8a83384": "allowBurns()", +"c8a8ac2e": "submit(uint256,bytes32,bytes32,bytes32)", +"c8a90f76": "handlePresaleToken(address,uint256)", +"c8a9e841": "addCustomerFromKYC(address)", +"c8aafbc3": "NodeHash()", +"c8ac7014": "updateMerchantByAdmin(address,string,string)", +"c8ad27e6": "finishPre()", +"c8ad9645": "InactivityHolderResetBalance(address)", +"c8aded5d": "setDiscounts(uint256[],uint256[])", +"c8ae8774": "_startMegabox(uint256)", +"c8aef513": "preSendTTC()", +"c8aeff39": "isMarket()", +"c8af1538": "fallbackPayout()", +"c8af46b4": "canAnyoneBurn()", +"c8b08125": "tokensRemaining()", +"c8b0e68d": "getCEO()", +"c8b18b5b": "oneMonth()", +"c8b19fa8": "ioxToken()", +"c8b1a635": "pricePerCoin()", +"c8b21f18": "distributionuserFinished()", +"c8b26773": "startEnrollment()", +"c8b2ccba": "addStrand(uint256,address,bytes32,string)", +"c8b32089": "TokenLiquidityMarket(address,uint256,uint256,uint256)", +"c8b342ab": "getBid(address)", +"c8b35c7a": "BANANA()", +"c8b39eb5": "setEdCoreContract(address)", +"c8b413ad": "initialize(address[5],address,uint256[12],uint256,bytes)", +"c8b43c10": "isPausedCrowdsale()", +"c8b4c5b8": "MarketToken(uint256,uint256)", +"c8b4eb6e": "withdrawPresale(address)", +"c8b52bfb": "ChangeCost(uint256,uint256)", +"c8b56bda": "unregister_contract(bytes32)", +"c8b5da66": "pressButton()", +"c8b6a463": "ASUT()", +"c8b70559": "_endContestIfNeeded()", +"c8b7c3ee": "MITCoin()", +"c8b7e8c3": "testMakeBet()", +"c8b82220": "registerNameIP(string,string)", +"c8b91531": "MINOR_VERSION()", +"c8bb32e0": "updatePosition()", +"c8bb73ef": "testGetBitsFailIndexOOB()", +"c8bb7d51": "unitRareGrowth()", +"c8bc2452": "LuJiaZuiToken()", +"c8bc429a": "removeDividendPathway(address,uint256)", +"c8bc6fa0": "maxCapEth()", +"c8bd14ef": "totalInvSupply()", +"c8bd1d13": "VERIME(address)", +"c8bd3782": "OsherCurrentICOPrice()", +"c8bdbfb6": "withdrawUnsoldTokens()", +"c8bdc0c7": "RevokeDOT(bytes32,bytes)", +"c8bf3388": "totalIRCAllocated()", +"c8bffa93": "tier1End()", +"c8c01a55": "request(address,uint256)", +"c8c08a89": "_isOfficialApps(address)", +"c8c0b288": "bountyFundManager()", +"c8c0cbbb": "setLockedAccountThresholdUsd(uint256)", +"c8c1a400": "infoAboveSpot()", +"c8c21594": "releaseByStage(address)", +"c8c2ed54": "tokenAssignmentControl()", +"c8c2fe6c": "acceptManagement()", +"c8c365fc": "nowday()", +"c8c388eb": "RegBase(address,bytes32,address)", +"c8c3b926": "changeDragoDao(address)", +"c8c5139d": "setUserDisplay(address,string)", +"c8c67ca1": "transferValuebyAddr(address)", +"c8c719d2": "MangachainToken(address,address,address,address,address)", +"c8c72bb4": "TEAM_RESERVE_FTX()", +"c8c749ec": "preTgeManager()", +"c8c75647": "setVerified(address)", +"c8c79643": "addBurningMan(address,uint256)", +"c8c89fa5": "secretBids(address)", +"c8c9b1f8": "shouldVerifySegment(uint256,uint256[2],uint256,bytes32,uint64)", +"c8c9d745": "userLookup(uint256)", +"c8ca645f": "getName(string,string,address)", +"c8cada78": "oraclize_query(uint256,string,bytes[2])", +"c8cb60bb": "cancelBid(bytes32,uint8,int32,bool)", +"c8cb7d04": "Kristina()", +"c8cb8677": "WithdrawMyTokens()", +"c8cb8a75": "setCreator(address,uint256)", +"c8cb985a": "callDividend()", +"c8cc5cd8": "distributeYield(uint256)", +"c8cc9cc2": "getElement(address)", +"c8ccaebc": "extendedTimeLock()", +"c8cd09ae": "TransferredPreBuyersReward(address,uint256)", +"c8cd65e5": "processDeposit(address,uint256)", +"c8cddd61": "test_validShouldBe3_increaseTimeBy30000()", +"c8ce122b": "checkJackpot(address)", +"c8ce2fec": "lifetimeDeposits()", +"c8ce30b0": "blocksForWei(uint256)", +"c8ceaa95": "mint(bytes32,int256,address,uint256)", +"c8ceae12": "tavernContract()", +"c8cf4722": "getRequestsLength()", +"c8cf67a1": "buySmartSpeed()", +"c8cfb032": "getPlayerByAddr(address)", +"c8cfd490": "UNLOCK_TEAM()", +"c8cfe153": "revealVote(uint8,string)", +"c8d0ec0a": "reduceAllowance(address,address,uint256)", +"c8d172d6": "getTokenInfoNonce()", +"c8d1c017": "addUIntValue(bytes32,uint256)", +"c8d1cf4a": "tokenPriceForMainICO()", +"c8d3db82": "getPresaleMaxValue()", +"c8d47f16": "replaceLogic(address)", +"c8d4b389": "approveAndCallPreSigned(bytes,address,uint256,bytes,uint256,uint256)", +"c8d508fa": "test_insert_findNoHintUpdateTail(int256)", +"c8d50d7c": "nextBackWindowAdjustmentRatio()", +"c8d52ee3": "refundTransfer(address,uint256)", +"c8d61985": "setCryptoAgent(address)", +"c8d689b1": "addAllowedLock(uint256)", +"c8d840fa": "EventEmergencyContinue()", +"c8d86e35": "bullToken()", +"c8d88829": "oslikiFoundation()", +"c8d8cf88": "appIndex()", +"c8d942b5": "Travelerscoin()", +"c8d9c042": "AuctionCreated(uint256,uint256,uint256,uint256,bool)", +"c8d9ebc4": "getTomato(uint8)", +"c8db6a42": "functionCalling(address)", +"c8db6af9": "getCompte_14()", +"c8dc60ca": "vehiclesByCity(bytes32)", +"c8dc7e19": "setReconciliationDate(uint256)", +"c8dd64ea": "daVinciAddress()", +"c8dd6ce7": "getPlayerDetails(address)", +"c8dda301": "VOTING_START_BLOCKNR()", +"c8dda71c": "HistoryUpdated(string,uint256[])", +"c8ddf66f": "MMChainToken()", +"c8df5da0": "BOSHICoin()", +"c8e0f101": "userPlay()", +"c8e11521": "TripBitToken()", +"c8e13bb4": "fit()", +"c8e1fe3f": "getCountriesOfCampaign(bytes32)", +"c8e2190d": "_cancelOperation(bytes32,address)", +"c8e2fca0": "use(address,address,uint256,uint256,uint256,uint256,uint256,string)", +"c8e32074": "returnFrom(address,uint256)", +"c8e49707": "activateExportFee(address)", +"c8e4acef": "playerByAddress(address)", +"c8e55708": "oraclize_query(string,string[1])", +"c8e566c6": "betInputToBytes(uint40,uint40,uint40,uint40,uint40)", +"c8e569a8": "stopICO()", +"c8e56acb": "FAPFundDeposit1()", +"c8e5f54f": "ArcanaToken()", +"c8e626f8": "checkDivsBalance()", +"c8e6b2a8": "logTimestampSet(uint256)", +"c8e6ba4d": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"c8e6c7d9": "imin(int256,int256)", +"c8e706e2": "contractWallet()", +"c8e71424": "MotherDNAShare()", +"c8e788c1": "RELEASE_EPOCH()", +"c8e7ca2e": "getMsgData()", +"c8e7e5ef": "TOTAL_NUM_TOKENS()", +"c8e8ce63": "outsourceConfirmNode(uint256)", +"c8e8d6d6": "TheTokenE()", +"c8e8f487": "missedVerificationSlash(uint256,uint256,uint256)", +"c8e9fc8b": "testgas()", +"c8ea0cfa": "CoinmakeToken()", +"c8ea1f7f": "updateEntity(uint256,bytes32,uint256,bytes32,uint256)", +"c8ea429e": "closeCdp(uint256,uint256,uint256)", +"c8eab537": "randomJackpot(uint32,bytes32,uint32)", +"c8eaf28f": "addWhitelists(address[])", +"c8eb747a": "B42Token()", +"c8ec2eb8": "MUBEX()", +"c8ec57ed": "revokeConfirm(bytes32)", +"c8ed6253": "ManagedToken()", +"c8ede712": "makersAverageRating(address)", +"c8edf65e": "GetAndReduceFeesByFraction(uint256)", +"c8ee0c6b": "withdrawBySubscription(address,uint256,bytes32,string)", +"c8ee2da8": "setReputationIRNNodeShare(uint256)", +"c8ef8b00": "window2TotalSupply()", +"c8efd7af": "getResolverFee()", +"c8f07770": "funcThatReverts()", +"c8f09634": "visaOfferingsLength(uint256)", +"c8f099cb": "upgradeEvilMorty(address,address)", +"c8f0d741": "AlienFarmer()", +"c8f21d22": "TagadaTsoinTsoinCoin()", +"c8f2835f": "transferBack(address,uint256)", +"c8f288ad": "getPoo(uint256)", +"c8f3a9e1": "getLastRollOutput(address)", +"c8f3e5f0": "getParameterByTitle(bytes32)", +"c8f41706": "pausePhase()", +"c8f478e1": "SetChangePlatformFlag(bool)", +"c8f490c8": "numOfBalloonsTypes()", +"c8f5c3f9": "LNCHSale(uint256,uint128,uint256,uint256,uint128,string,uint128,string,uint128,string,uint128,string,uint128,string)", +"c8f5d8b0": "total_coins()", +"c8f803f8": "setUnitJadeStealingMultiplier(address,address,uint256,uint256,bool)", +"c8f87d36": "_register(uint256,address)", +"c8f88076": "emissionMasOneType(address[],uint256[],bytes32[],uint256)", +"c8f8d75d": "Config(uint8,address)", +"c8f98db8": "getWinningFaction()", +"c8fbbdda": "getGPSStartTime()", +"c8fca35e": "getBidHash(uint256,uint256,address,address,uint256,uint256)", +"c8fd39f7": "GetEthShop()", +"c8fd6ed0": "unstake(uint256,bytes)", +"c8fdc891": "numberOfMonarchs()", +"c8fddb80": "updateLemonCoinsRemainingToDrop()", +"c8fdf67d": "holdTransaction(uint256,uint256,uint256)", +"c8fe2065": "getSingleBetItemCount(uint256)", +"c8fea2fb": "collect(address,address,uint256)", +"c8fed3f6": "withdrawCashReserveFund()", +"c8ff80a1": "setMonsterClass(uint32,uint256,uint256,bool)", +"c9000726": "nextStep()", +"c90109fa": "removeSomeCWCsFrom(address,uint256)", +"c90189e4": "fechAllVoteResultPreStageByBlock(uint256)", +"c902c3ae": "bets(bytes32)", +"c902d1b6": "_checkClientSign(address,bytes32,bytes)", +"c902ee36": "tokensAvailable(address)", +"c9030ea0": "addMember(address,bool)", +"c904a2ee": "minAllowedReservingPercentage()", +"c906a5aa": "testDeleteVoter()", +"c906baa3": "GACFund()", +"c906c873": "limitCrowdsale()", +"c906cd68": "ForceCoinTransfer(address,address,uint256)", +"c90755e2": "secretaryGeneral()", +"c90763f0": "subAllocation(address)", +"c9079673": "last_payment_timestamp()", +"c90797ea": "suicideContract(address)", +"c907d53b": "getTakeOwnershipFee(uint256)", +"c9085820": "set_owner(bytes12,address)", +"c908f302": "searchPursesByAddress(address)", +"c9090c7f": "levelFourTokenNum()", +"c9099385": "addApplication(string,string,string,string)", +"c909b929": "closingTimePeriodTwo()", +"c90a6a8e": "MAIN_SALE_BONUS_PERCENTAGE_PHASE4()", +"c90aef26": "Fetch_Game_Board_Vitualization(uint32)", +"c90c205b": "CLAIM_AMOUNT_ETH()", +"c90c589a": "OAR()", +"c90c83a8": "scheduleCall(address,uint256,uint256,uint256,uint256)", +"c90c949b": "checkForBonuses(uint256,uint256)", +"c90cfb0b": "newFact(string,string)", +"c90d080a": "registerEvent(bytes)", +"c90d1431": "MYLASTTOKEN()", +"c90d2cd9": "createBallot(uint256,address,string,string)", +"c90de215": "ClockAuction(address,address,uint256,uint256)", +"c90f34f0": "Bitstarti(uint256,string,string)", +"c90f793e": "currentAgreement()", +"c90fc8ee": "allTotalSupply()", +"c90fda80": "countRC(address)", +"c9100bcb": "getClaim(bytes32)", +"c9101f6c": "increaseApproval(uint256,address,uint256)", +"c9102029": "_getTokens()", +"c9116b69": "myBalance()", +"c9116e4a": "yearThreeClaimed()", +"c911b56e": "isController(address,address)", +"c913b552": "getVersions(bytes)", +"c913f364": "addMoonPrizePool(uint256,uint256)", +"c914ef54": "SetAllow(address)", +"c91540f6": "getCurrentCompetitionValues(string)", +"c915fc93": "proposeUpgrade(address)", +"c91610cd": "transferDelegator(address)", +"c91752b2": "girlIdToAuction(uint256)", +"c91813ca": "testToBool(bytes)", +"c919992d": "changeBrokerImp(address)", +"c91b0149": "setWhitelister(address,bool)", +"c91b46c6": "claimHero()", +"c91bc856": "withdrawCAT()", +"c91c6fa5": "completeSupply()", +"c91ca6c7": "calculatePeerTokens()", +"c91cd9d0": "minimumNumber()", +"c91d7e9c": "getFee(bytes32[])", +"c91d956c": "setMinBalance(uint256)", +"c91e4cc8": "getItemsByTypeAndOwner(string,address)", +"c91e5ad6": "DatingTokenTest()", +"c91fc619": "getTotalOut(address)", +"c92015f6": "getAccountUnlockTime(address)", +"c9206ddf": "setSalvageable(address,bool)", +"c9219a7a": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[8])", +"c921f647": "GiftSend(uint256,address,address,bytes32,string,bytes16,uint8,bytes24,uint16,uint16,uint256)", +"c92261b5": "set(bytes32,int256)", +"c922f446": "emergencyWd()", +"c9230c5d": "assetName()", +"c923c870": "getsysdayruns()", +"c9247058": "MasternodeRewardAddedToRewardPool(uint256)", +"c924c524": "secondSend(bytes32)", +"c924d441": "EnableTokenWithdrawals()", +"c92501b7": "setStopTime(uint256)", +"c926435c": "bonusInfo()", +"c926aae6": "kscSell(address,address,uint256,string)", +"c9270652": "returnLoanLength(uint256)", +"c92728a1": "_ballotIdToNamespace(uint256)", +"c9295bc6": "getOrgInfo(address)", +"c9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", +"c929bdac": "notaioAccounts(address)", +"c929ccf3": "setTokenId(uint256)", +"c929d55e": "overrideTokenHolders(address[],uint256[])", +"c92a1ad8": "bonusPriceDeltaPerHour()", +"c92a1e26": "setting(bytes)", +"c92aecc4": "chi()", +"c92ba8b2": "add(address,uint32,uint128,uint128)", +"c92babd1": "SITMock(address)", +"c92cd4d3": "getNewTokenBalanceOf(address)", +"c92d2385": "transferPreSignedHashingWithPrefix(address,address,uint256,uint256,uint256,uint256)", +"c92d3ea9": "Amazon()", +"c92db04d": "VanMinhCoin(uint256,string,uint8,string)", +"c92e365f": "placeBid(address,uint256,uint256,uint256,bytes,int256)", +"c92f068c": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[])", +"c92f3a0c": "GameICO()", +"c92f8954": "withdraw(address,uint256[3])", +"c932c71e": "USDsToken()", +"c932ca62": "setBuildersAddress(address)", +"c9330bfb": "ethToTokenConversion()", +"c9334051": "decodeAssets(bytes32[])", +"c9335f58": "worldwidegiftcode()", +"c9351571": "WorldCupToken()", +"c93685b8": "getQuorumPercent()", +"c937b0a9": "platinum()", +"c937da12": "addToPublicWhitelist(address)", +"c937e091": "SearchUserID(string)", +"c9380d3e": "DeciserToken()", +"c938acc8": "checkExistsOwnedPet(uint64)", +"c9393c62": "NewState(uint8)", +"c939625b": "LuckCashCrowdsale(uint256,uint256,uint256,address,address)", +"c939fd50": "remainingIssuableNomins(address)", +"c93a6c84": "setDefaultFee(uint256)", +"c93aac88": "setReleasingSchedule(address)", +"c93ab4c3": "checkTreesWatered(uint256[])", +"c93b9755": "mintAgents(int256,address)", +"c93c266e": "updateWalletAddress(address)", +"c93ce90f": "chefOwnerWithdrawal()", +"c93ceec8": "collectDividends(address)", +"c93cff84": "test_validContractBalance()", +"c93dd31a": "Blammascoin()", +"c93e253d": "balanceOfBasic(address)", +"c93e718b": "removeAddressesFromOperators(address[])", +"c93e8862": "_checkCap(address)", +"c93e8b15": "getActiveBuyOrders(uint256)", +"c9406e86": "crowdsaleEnds()", +"c940c1b7": "addCustomerHash(bytes32,bytes32)", +"c9410b76": "ClockAuction(address,uint256)", +"c942940c": "Sukaya()", +"c944a38e": "CharlyLifeLog(string,int256)", +"c9456530": "isRespectTimeFrame()", +"c945b53f": "lottoIdentifier()", +"c946f3af": "Standard_3()", +"c94727f0": "getWinChoice(uint256,uint256)", +"c947db81": "earlyWithdrawalFeePct()", +"c9498266": "hash_passcode(bytes32)", +"c949ba9b": "TokenBase()", +"c949c0c9": "_houseOf(address)", +"c94a18ba": "kpyGoalReached()", +"c94a5841": "BITVesting()", +"c94b0ac1": "CryptoTwitch()", +"c94b56e3": "isMinCapReached()", +"c94b5c3d": "cabbageToken()", +"c94bfdb1": "setTokenDescription(address,uint256,string)", +"c94c6787": "specialSend(uint256,address)", +"c94c79dd": "EtherTots()", +"c94d0eee": "oddEven(uint256,address)", +"c94d9caf": "createTxEth(address,uint256)", +"c94dc71e": "Satochi()", +"c94e643c": "grantTokens(address,uint256)", +"c94e6567": "fetchBlocks(address)", +"c94e7b5c": "icoTokenSupply()", +"c94f2d69": "ILOTContract()", +"c94f7983": "StillToGo(uint256)", +"c94fbd4b": "Reek()", +"c9507465": "useraddinverst(uint256)", +"c9511b59": "setAddressToken(address,address)", +"c95292c4": "EthlanceDB()", +"c95320db": "migrationPhase()", +"c9537838": "getExpectedBalance(address)", +"c954d4fa": "blendbacktest(uint32[],bytes32[],bytes32[],uint64[])", +"c9553010": "testDistributing()", +"c955457e": "getRandomArbiter()", +"c955b514": "addCancelled(bytes32,uint256)", +"c955bde2": "getExpirationRequest(bytes32)", +"c9567bf9": "openTrading()", +"c956d497": "helpWithdrawal(address)", +"c956db57": "WOLF3()", +"c957012e": "caps(bytes32)", +"c9580804": "setAccessManager(address)", +"c9584008": "registerTicker(address,string,string,bytes32)", +"c959467b": "setInterestDB(address,uint256)", +"c959ec57": "GetRocketStock(uint16)", +"c95acadd": "ethAuction()", +"c95ae083": "isMethodAllowed(bytes4)", +"c95bd3aa": "closePreSignedHashing(address,bytes32)", +"c95c0efd": "setBonusUnlockAt(uint256)", +"c95c0f7b": "getTransactionIds(uint256)", +"c95c1036": "calculateStakeAmountWithBonuses(uint256,address,uint256)", +"c95c16af": "imported(address)", +"c95c67dc": "ADVISORS_SUPPLY_LIMIT()", +"c95c9a83": "ThinkCoin(uint256)", +"c95d8e40": "clientSign()", +"c95e0909": "resetPlayer(address)", +"c95e81cb": "MyBet(uint8,address)", +"c95f79ba": "closeLeaderboard(uint16)", +"c95f8b91": "TransferFunds(address,uint256)", +"c95f95bb": "ComputedGainsRate(address,uint256)", +"c96027b3": "ethpaused()", +"c9613733": "startNextEra(bytes32,uint256,int256,uint256,int256,uint256,int256)", +"c961df66": "contract_period()", +"c9620770": "doVote(address,uint256,uint256)", +"c96266e8": "getDragonFight(uint256)", +"c96304e8": "balancesAddressDescriptionUpdate(string)", +"c9634f32": "randomContestant(uint256,uint256)", +"c9644b77": "retireAxie(uint256,bool)", +"c96492c4": "SspManagerContract(address,address)", +"c964e493": "getSpaceship(uint256)", +"c9651729": "firstLineWrong()", +"c9653bea": "MainExchange()", +"c96593a0": "The10ETHPyramid()", +"c965e1d3": "constructAPIParam()", +"c965ed7b": "OwnerReward()", +"c9660d07": "ownerSetEdgeRangeAndPayout(uint256,uint256,uint256)", +"c966865e": "notRandom(uint256)", +"c9679537": "HafizToken()", +"c968907f": "grantVestedTokens(address,uint256,uint256,uint256,uint256,uint256,bool)", +"c968aab3": "makeUntradable(uint8)", +"c968ac68": "getWin(uint64)", +"c9693411": "deliverPresaleFuelBalances(address[],uint256[])", +"c96adb01": "getUserBet(address)", +"c96c54a7": "airdrop(address[],uint256,uint8)", +"c96c8a1d": "ownerListMap(uint256)", +"c96cd46f": "suicide()", +"c96cea70": "updateUsername(string)", +"c96d2dfa": "getStateAndProof(bytes,uint256)", +"c96e5627": "numRegistered()", +"c96e785f": "setWhitelisted(address,address)", +"c96e83db": "firstContributorId()", +"c96e8fee": "Bury(address,uint256)", +"c96f3238": "getWithdrawAmount(uint256,uint256)", +"c96f5041": "addHash(string,uint256)", +"c971442c": "getDBs()", +"c971aade": "FINALSTSTEST()", +"c971b12b": "_onRandom(uint256,bytes32)", +"c9734ebd": "WatchLastPayout()", +"c97358df": "GGPCToken()", +"c973851d": "kMaxStake()", +"c97399d0": "_isOwner(address,uint256)", +"c973c2e3": "collectorAddress()", +"c9744029": "getPremium()", +"c974631b": "platformWithdrawalProposed()", +"c974947d": "unlockAddress(address[])", +"c975653d": "StartCity()", +"c9762f8f": "TooBigPriceDiff(uint256,uint256)", +"c976b4f9": "slowDump()", +"c976bbbb": "_compare(int256,bytes2,int256)", +"c976ce9c": "privateSaleLimit()", +"c977a7a7": "setUsdToEtherExchangeRate(uint256)", +"c9788631": "beneficiaryWallet()", +"c978a7bc": "inviteRate()", +"c978c45d": "setNewMessage2(string)", +"c978ee59": "fourthStageMintingDate()", +"c979113c": "nextStageEmission()", +"c9791e0d": "confirmBobIndirectPay(uint256)", +"c97a06ce": "isHardcapReached()", +"c97aae82": "NulsStandardToken(uint256,string,uint8,string)", +"c97ab7ca": "isICOClosed()", +"c97b5278": "XYZSecurities()", +"c97b6d1f": "updateBatch(int128[],uint128[],uint8[],bytes32[],bytes32[],bool)", +"c97be180": "lock(address,uint256,uint256,uint256)", +"c97c1505": "readRate(string)", +"c97c6353": "testHello()", +"c97ca645": "updateWeiPerWholeToken(uint256)", +"c97cc71e": "getTransferRawAddress(bytes)", +"c97cef81": "Shelter(string,string)", +"c97dc17b": "DatareumToken()", +"c97e8480": "delegatedTransfer(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"c97ec033": "changeOverERC228(address,address,uint256,address)", +"c97f8363": "setBonusAddress(address)", +"c9801b50": "f_public()", +"c98031be": "hintURL(int256,bytes32,string)", +"c980c626": "setImage(uint256,string)", +"c98165b6": "createTarget()", +"c98166c0": "ethAmount()", +"c9818728": "candyCap()", +"c9819d1e": "GuardaRegistro(bytes32)", +"c982e353": "getCurrentPrice(uint256,uint8)", +"c9838930": "setReferralTokenContract(address)", +"c985c221": "get_all_levels()", +"c986cf7c": "defrostAdvisorsTokens()", +"c987a78a": "AISI()", +"c987c5a1": "userAdd(address)", +"c988d70f": "getDailyWithdrawLimit()", +"c9891384": "PendinglinesToLines()", +"c9894b5c": "taxValue()", +"c98a79fb": "getBallotLogN(address)", +"c98b7027": "bgb_per_Keos()", +"c98bd7da": "isWinner(uint256,uint256)", +"c98bdd2f": "year5LockAddress()", +"c98c3083": "OutcomeToken()", +"c98c6e08": "payAmountForLoanAtIndex(uint256,uint256)", +"c98cf6e3": "COBToken()", +"c98d3457": "alliance(address,address)", +"c98d9b83": "getTokensContractAddress()", +"c98e4149": "setKingdomFactory(address)", +"c98f0ad9": "getUnlockedBalanceLimit(address)", +"c98fc4d9": "adminSetConfig(address,address,address)", +"c98fefed": "convertFor(address[],uint256,uint256,address)", +"c99051dc": "getWildcardsRemaining(uint16)", +"c9912255": "gago()", +"c99252d3": "joinGame(uint256,uint8,uint8)", +"c99380c9": "getAttoTokensBoughtInICO()", +"c9940c31": "getPoolCandidateContract(uint256)", +"c994fe31": "setCompanyManager(address)", +"c995623e": "revealMove(bytes32,uint256)", +"c9956b05": "FMCToken()", +"c99749a8": "prepareWithdrawProposalGivenSplitProposalId()", +"c997c1e2": "mul18(uint256,uint256)", +"c99842f9": "startPreIco(uint256,uint256,uint256)", +"c998e9dd": "changeUserKeyFromRecovery(address)", +"c9991176": "addAdministrator(address)", +"c99a975d": "optInFcnMinGas()", +"c99ae8a7": "setFechaTax(uint256)", +"c99b1f28": "icoWeek4Bonus()", +"c99b27ad": "updateFirstWallet(address)", +"c99c3c62": "getCarProductCount()", +"c99d89fc": "PriceOneEnable()", +"c99d9ef7": "startIcoDate()", +"c99db1ba": "_calculateLockedPercentage(uint8)", +"c99dccf9": "getInvestor(uint256)", +"c99f3357": "DRAIN_DELAY()", +"c99ff644": "dilute(uint256)", +"c9a04e55": "getDailyEthProfit(address)", +"c9a0e252": "ICOParticipants(address)", +"c9a1d88b": "placeBet(uint16,uint16,bool)", +"c9a2ab19": "aragonDevMultisig()", +"c9a30482": "BurnableCrowdsaleToken(string,string,uint256)", +"c9a365a7": "foundationlock()", +"c9a3f228": "SCLCrowdsale(address,address,address,uint256)", +"c9a43b2b": "m_software(uint256)", +"c9a4faa6": "AdexContract(address,address,address,uint256,uint256,uint256)", +"c9a5003c": "lastHello()", +"c9a52d2c": "setBytesValue(bytes32,bytes)", +"c9a56efd": "getBetterBettingInfo2(address)", +"c9a6964a": "initializeOwnable(address)", +"c9a6b2a8": "addAuction(uint256,uint256,uint256,uint256,address)", +"c9a6e480": "tokenSupplyFromCheck()", +"c9a75d90": "setPI_edit_20(string)", +"c9a7623a": "buyingPrice(bool)", +"c9a77e3d": "totaleMsg()", +"c9a815bd": "setSpendingLimit(address,uint256)", +"c9a82aa8": "markCrowdsaleEnding()", +"c9a8baae": "myFirstLoop()", +"c9a99f19": "subscribeCaller(address,address,uint256,address,uint256)", +"c9aa013b": "Start5()", +"c9aa4cf8": "testHasTokens()", +"c9aa71b8": "getFlyingUnicorns(bytes32,uint64)", +"c9ab521f": "AddBook(uint256,string,address)", +"c9ac836d": "transferPet(address,address,uint64)", +"c9acab84": "left59(uint256)", +"c9ad51b5": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE3()", +"c9ae5594": "countHand(uint8[])", +"c9af089f": "getOrCreateChildUniverse(bytes32)", +"c9af2418": "checkUp(address,bytes32)", +"c9b06a4b": "AECloudToken()", +"c9b0d97b": "canCollect()", +"c9b0eef4": "oracleItQuery(uint256,string,string,string,uint256,uint256)", +"c9b110cb": "getAmountOfWithdrawals(address,address)", +"c9b1a517": "Show_Doctor(uint256)", +"c9b1b2ae": "etherKing(uint256)", +"c9b25f0f": "transferEther()", +"c9b2a580": "UTTotalSupply()", +"c9b2e522": "getSymbol(address)", +"c9b31d4b": "getCurrentSecret()", +"c9b3e736": "getTokenSellPrice()", +"c9b44821": "FIRETRADES()", +"c9b46bbb": "test0_adding()", +"c9b4cb94": "BIBToken(uint256,string,uint8,string)", +"c9b4ddb2": "receiveLockedAmount(address,uint256)", +"c9b5757e": "refundBet(uint256,uint8)", +"c9b5e555": "founderAddr()", +"c9b67627": "NonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2],uint256)", +"c9b7ab8b": "getPostLink(uint256)", +"c9b8020d": "starbaseToken()", +"c9b86d43": "manualState()", +"c9b94eb9": "liabilityFinalized(uint256)", +"c9ba0d4d": "r9kAddress()", +"c9ba32f4": "COPPER_AMOUNT_NDC()", +"c9ba73a3": "getmypost(uint256)", +"c9ba93be": "getIndexFromAddress(uint256,address)", +"c9bba27b": "manualEmissionEnabled()", +"c9bbc8c0": "donkeyName(address)", +"c9bc0883": "transferFromForcibly(address,address,uint256)", +"c9bc2bf5": "updateSnipCoinToEtherExchangeRate(uint256)", +"c9bc5dbd": "requestCeilingRaise(uint256)", +"c9bd2893": "fines()", +"c9bebd90": "ownerAlias()", +"c9c08bb7": "tickerAddress()", +"c9c09ac8": "denyBundlingMultitoken(uint256)", +"c9c0c77a": "deposit(uint16)", +"c9c0f25e": "getAllWorkers()", +"c9c1db4a": "launchFund(uint256)", +"c9c1ed93": "testControlRegisterContractIdAgain()", +"c9c1eded": "EPYCOIN()", +"c9c22deb": "getStarDistanceInLyThousandths(uint8)", +"c9c286c6": "getUnitRafflePlayers(uint256)", +"c9c347b9": "EthereumOneToken(string,uint8,string)", +"c9c4405b": "CariNetPrivilege(uint256,string,string)", +"c9c447e0": "getGamePrize(address,uint256)", +"c9c4797d": "ParticipantAuthority()", +"c9c51578": "buyBronze(uint256,uint256,uint8,bytes32,bytes32)", +"c9c53232": "totalStakedAt(uint256)", +"c9c538aa": "to_binary(uint256)", +"c9c5b5b4": "migrate(string)", +"c9c6176c": "BidSubmission(address,uint256,uint256)", +"c9c666aa": "changeCardboardUnicornTokenAddress(address)", +"c9c798b3": "addToFreelancerAvgRating(address,address,uint8)", +"c9c7cb74": "_burnTokens(address,uint256)", +"c9c7ef25": "withdrawtime()", +"c9c80a56": "adminshipLevel(address,uint8)", +"c9c8580c": "makeOffer(uint256,bytes32,uint256,address,uint256,uint256,address,address,uint256)", +"c9c85ec6": "currentGameCost()", +"c9c8ffd2": "test_increaseBlockNumber30211()", +"c9c92c12": "transferWineFromVineyardCellar()", +"c9c92dc5": "getProposal(bytes32,string)", +"c9ca080d": "Indecoin()", +"c9cb0043": "supportTokenAmount()", +"c9cb0e9b": "emitNewSmartToken(address)", +"c9cb6f47": "distributeDifferentAmountOfTokens(address[],uint256[])", +"c9cb7204": "unsold()", +"c9cbc222": "PicAdded(address,uint256,address,bytes32)", +"c9cbf8c9": "saleExchangeRate3()", +"c9cc0498": "buyComission()", +"c9cc0ed5": "setGuardianSale(uint256,uint256)", +"c9cc1a05": "transferTokensToContributor(uint256)", +"c9cd40a2": "vestingEntries(address)", +"c9cda91f": "changeTokenAddress(address)", +"c9ce1c23": "KUEKeNParty(string)", +"c9ce624f": "buyBackFund()", +"c9cf03ce": "refundMoneyForUser(bytes32)", +"c9cf2d4e": "vault_deposited(address)", +"c9cfa6ba": "setAllocation(address,address,uint256,uint256[],uint256[])", +"c9cfac55": "refundCurrency(address,uint256,uint256)", +"c9cfe755": "sendUnsold(address,uint256)", +"c9d00764": "TokenPurchased(string,uint256,uint256,uint256)", +"c9d0320a": "_doExtendPoll(uint256,uint256,uint256)", +"c9d07650": "NetkingToken(uint256,string,uint8,string)", +"c9d12d11": "RC(address,uint256,uint256,uint256,uint256)", +"c9d2373b": "marketKnowledge()", +"c9d256ae": "tokenSaleLeft()", +"c9d27afe": "vote(uint256,bool)", +"c9d27bcf": "doDisputeMemoryAccessSequence(uint256,bytes32)", +"c9d2d217": "TokenState(address,address)", +"c9d34622": "diffDays(uint256,uint256)", +"c9d4623f": "engine()", +"c9d57328": "managePlayer(uint256)", +"c9d66690": "RedeemEvent(address,uint256)", +"c9d68389": "airdropper()", +"c9d7d862": "drawFundsAfterTransfer(uint64)", +"c9d82560": "RewardBonusTimePeriod()", +"c9d82c96": "ICO_DURATION()", +"c9d96393": "updateGenVault(uint256,uint256)", +"c9d9c2b4": "deathData_a0()", +"c9dab438": "Subrosa()", +"c9dac221": "Bussines_Card(string,uint256,string,address)", +"c9db1bbf": "setPreICOStartDate(uint256)", +"c9db2bbd": "addPendingContribution(address,uint256,uint256)", +"c9dbc259": "ExchangeSwitch(bool)", +"c9dca9ba": "changeTokenMinter(address)", +"c9dd3a56": "annualInterestUpdateToken()", +"c9dd915f": "checkPremium(address)", +"c9ddd118": "checkPersonalRemaining(address)", +"c9ddd12f": "getTimestampOfDayEnd(uint256)", +"c9de31c7": "EOToken()", +"c9deb567": "collectionsAvailable()", +"c9dfa731": "lost(uint256,uint256)", +"c9e01787": "registerAffiliate(address[],uint256[],string)", +"c9e075c6": "showLockState(address,uint256)", +"c9e077e6": "bride()", +"c9e20791": "_setName(bytes32,string)", +"c9e25251": "buy(bool)", +"c9e3af7e": "currentBetLimit()", +"c9e3e66c": "secondCheckpointPrice()", +"c9e40106": "getConsolationPrizeTokenId(uint256,address)", +"c9e43221": "MIN_WTH()", +"c9e4d8bb": "isService(address,address)", +"c9e525df": "N()", +"c9e55b4e": "adminFixMaxSupply(uint256)", +"c9e6bef4": "_endsAt()", +"c9e7fd4b": "SovTokenCrowdsale()", +"c9e84346": "bonusLevels(uint256)", +"c9e904be": "totalEthRaised()", +"c9e9f4dc": "donateToLottery()", +"c9e9ff2c": "CPBWallet()", +"c9ea7c7c": "setMinimumFundingGoal(uint256)", +"c9ebb5e8": "freeMem()", +"c9ebeba6": "setIPFSParameter(string,string)", +"c9ec6cf6": "setOpenCloseHour(uint8,bool)", +"c9ecc566": "PurchasingAllowed(bool)", +"c9eda121": "setArrayIndexValue(bytes32,uint256,string)", +"c9ee21fa": "GUNS()", +"c9eea77c": "_updatePrice()", +"c9eebd9d": "modifyVictim(uint16,string,string)", +"c9ef5569": "getVolumeBonusPercent(uint256)", +"c9efa392": "bonusMilestones()", +"c9efda2c": "canStartAuction()", +"c9f09090": "populateTrancheTokens()", +"c9f0a02d": "burnAuction()", +"c9f166f8": "ctz32(uint32)", +"c9f1b7f0": "TeamToken()", +"c9f21fec": "setAuditTimeout(uint256)", +"c9f316dc": "getReferenceCodesOfAddress(address)", +"c9f3d62e": "getCarProductEarning(uint32)", +"c9f68025": "AMToken()", +"c9f73464": "maxCandidateId(uint256)", +"c9f84e1a": "unlockSecondPrivate()", +"c9f88f27": "invokeContracts(bytes)", +"c9f8cf20": "getCanvasesWithSellOffer(bool)", +"c9fa11df": "EventChain()", +"c9fa595b": "paused_3()", +"c9fa8f2d": "houseFeeHoldover()", +"c9faa7c5": "isActivated(address)", +"c9fb975c": "UnicornsSold(address,uint256,uint256,uint256)", +"c9fbdc36": "referral_fee()", +"c9fbe626": "TweetRegistry()", +"c9fca8a5": "rivetzRegister(uint256,uint256,uint256,address,address)", +"c9fd1955": "getVestingWalletLength()", +"c9fd83e2": "lastFeePeriodStartTime()", +"c9ff34ec": "privateTime()", +"c9ffb6e3": "claimPocketMoney()", +"ca001903": "AntarctiCoin()", +"ca00aad3": "closeLottery(uint256,string)", +"ca0157cd": "getGameIds(address)", +"ca01b37c": "DASToken()", +"ca01ba39": "generateTokens(uint256)", +"ca01d731": "XinfinUpgradeableToken(address)", +"ca02dbe3": "Requestprofit()", +"ca0370f7": "calculateCompoundContract(uint256,uint256)", +"ca03dab5": "withdrawSubdivsAmount(uint256)", +"ca03fdcd": "ShowADV()", +"ca04d26f": "transferReadable(address,uint256)", +"ca04e076": "getOwnerPixelCount(address)", +"ca051844": "withdrawBalance(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"ca056aed": "addTokens(address,uint256,uint256)", +"ca06226d": "Ecopackcoin()", +"ca07218c": "setIt(address)", +"ca077f72": "allocate4ProjectToken()", +"ca0781a1": "getRateAndCheckCap()", +"ca079c52": "Upd(uint256,string,address,uint256,uint256)", +"ca087b96": "FlexFitRewards()", +"ca093888": "gameIsSundown()", +"ca0941b4": "findIdByHostPort(string,uint256)", +"ca0a992e": "IvyKoinContract()", +"ca0a9c2d": "makeUser(address,string,string)", +"ca0b1878": "addValue(address,uint256)", +"ca0b49ae": "getMyCarsIdx()", +"ca0c0a49": "gameActiveStrRef(string)", +"ca0c1e62": "computeMerkle(int256,int256,int256[],int256,int256,int256[])", +"ca0c2024": "minCapPre()", +"ca0c601c": "maxGoalInICO()", +"ca0c74be": "buyForInvestor(address,uint256)", +"ca0c9b5c": "storeTransactionData(address,address,uint256,uint256)", +"ca0cd7c0": "setUnlockLater(uint256)", +"ca0d01a6": "_yearTwoSupply()", +"ca0d0d82": "getMilestoneInfo(uint8)", +"ca0d6e48": "Mariton()", +"ca0d9564": "removeAdminList(address[])", +"ca0dcf16": "mintRate()", +"ca0e5c27": "ViewProjects()", +"ca0f1215": "initialSaleDuration()", +"ca0fe62a": "CryptoMemes()", +"ca0fe751": "switchRankings(uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"ca1149d1": "getUserEntryStatuses()", +"ca1314af": "getMax(uint256[])", +"ca13b818": "setWinningTeam()", +"ca13fb0f": "minInvestCents()", +"ca154008": "AssetContract()", +"ca15fb65": "getCardPower(uint256,uint256)", +"ca1637f5": "getGDemocsN()", +"ca169e66": "Voodka()", +"ca17cad1": "getBoxPrice(uint256,uint256)", +"ca185022": "foundersFundAddress()", +"ca1861aa": "stockCancelBuyOrder(uint256,uint256,uint256)", +"ca18da3f": "setGender(uint8,string)", +"ca18ebbf": "preICOPrice()", +"ca1929aa": "LogBeerRedeemed(address,bytes32,uint256)", +"ca1938e5": "houseCutPercentage()", +"ca1a2eb4": "localPaiementConfirmation(bytes32,bytes32)", +"ca1a3086": "transferChickenFrom(address,address,uint256)", +"ca1a4942": "CountExecs()", +"ca1a9433": "addZiekenhuis(address)", +"ca1aa5bb": "distributeReservedTokens()", +"ca1ab2ef": "divideByZero(uint256)", +"ca1ac5cb": "_createWhale(string,address,uint256)", +"ca1ad32c": "setPartnerPercent(address,uint16)", +"ca1b06b2": "ActionAuctionPlat(address,address)", +"ca1b5aa7": "allowUpgrading(bool)", +"ca1bf69f": "froze(address,uint256)", +"ca1c3bb3": "testNonExistingVoteWeight()", +"ca1c8895": "setPriceOfToken(uint256)", +"ca1d209d": "fund(uint256)", +"ca1d6f73": "doTeamMinting(address)", +"ca1e5bb7": "mintTokensByETHExternal(address,uint256)", +"ca1e9738": "getPricePerToken()", +"ca1ea20e": "dataMigration(address,address,address[])", +"ca1eb8be": "marketaWallet()", +"ca209c8b": "Bullexi()", +"ca2145a7": "CoinHot()", +"ca215005": "getIndividualPrice(address,uint256)", +"ca2156bd": "redenominate(uint256)", +"ca2177ef": "NSPFallback(address,uint256,uint256)", +"ca219b16": "XsearchToken()", +"ca2317dd": "changeReserveTeamRecepient(address)", +"ca2322c2": "mashToken()", +"ca2392f8": "sell(uint8,bytes6,uint32,uint32)", +"ca24034b": "deathData_v17()", +"ca2527e5": "batchTransfer2(address[])", +"ca256771": "weiPerUSDinTGE()", +"ca2571af": "lockedEarningsOf(address)", +"ca25bf6f": "IncubatorGlobalGas()", +"ca25e9c5": "setPurchaseRatios(address[],uint256[])", +"ca263a49": "registerDomain(bytes8,string)", +"ca2659dc": "commitPhasesDerived()", +"ca265c0f": "getCurrentSpend(address)", +"ca267f28": "getRecordCount()", +"ca2748bd": "transferAndFreeze(address,uint256,uint256,uint256,uint256,uint256)", +"ca276c07": "updateTierMinimum(uint256,uint256)", +"ca2785bf": "flushHouseFees()", +"ca278feb": "VanityURL()", +"ca27b214": "LucksToken()", +"ca27eb1c": "createListing(bytes32,uint256,address)", +"ca281fd9": "renounceControl()", +"ca28d2ae": "SEKCapitalToken()", +"ca292622": "getCompany(bytes32)", +"ca29cae8": "bufferWallet()", +"ca2a2f99": "_inMoney(uint256)", +"ca2acfff": "_getTokenAmountWithoutBonus(uint256)", +"ca2bf047": "predictPacks(uint256)", +"ca2c139c": "getCurrentQuickPromoBonus()", +"ca2cba95": "playerwithdraw()", +"ca2cd9d3": "marketactive()", +"ca2cef51": "MiningWarContract()", +"ca2d553a": "setAccessControl(address,address,uint8)", +"ca2dfd0a": "removeVerifier(address)", +"ca2dfff1": "notforked()", +"ca2e2f49": "firstVestedLockUpAmount()", +"ca2e8cc5": "markRedeemed(address)", +"ca2f281b": "FMC(uint256,string,string)", +"ca2f5a07": "PubRejected(address,string)", +"ca2f5cb4": "_addPauser(address)", +"ca2f6487": "Zettabyte()", +"ca2fd584": "getCommanderPot()", +"ca30597d": "BoomstarterPreICO(address[],address,address,uint256,bool)", +"ca30a279": "setTgeAsSaleAgent()", +"ca313539": "EMISSION_FOR_SALESTAGE2()", +"ca315ca6": "slashStake(uint256,address)", +"ca3181e0": "mint(address,uint32,uint256)", +"ca31879d": "claimToken(address,address)", +"ca3228d7": "_updatePlayersMilk(address)", +"ca325469": "destinationAddress()", +"ca3261c6": "giveAuthorization(address)", +"ca330563": "isRedeemed(address)", +"ca33a817": "_guardianVendPrice(uint256,uint256)", +"ca343d2b": "getICOBonusAmount(uint256,uint256)", +"ca34a0e3": "iterate_next(uint256)", +"ca34e1d6": "WineMarket(address)", +"ca35271c": "numDebtors(address)", +"ca35bff2": "setCaps(uint256,uint256,uint256,uint256,uint256)", +"ca36226d": "removeCrowdsaleContract(address,address)", +"ca3654e7": "requestBonus()", +"ca36695c": "setUsdPerEth(uint256)", +"ca368538": "randN()", +"ca37a9eb": "setWeiPerCent(uint256)", +"ca37dfad": "crossBalance()", +"ca37f7d9": "reserverWallet()", +"ca386496": "setPassword(string,string)", +"ca392c49": "setPreITO(address)", +"ca39e5ef": "fight(uint256,uint256)", +"ca3a3f0d": "_payTicketByEarnings(uint256,address)", +"ca3aa607": "LendToken()", +"ca3b5c91": "hasRelation(bytes,bytes,address)", +"ca3c7519": "getReffName(address)", +"ca3c8e11": "BRONZE_AMOUNT_NDC()", +"ca3c9147": "ownerHistoryEntry(uint256,uint256)", +"ca3dd175": "approveAuthority(address)", +"ca3e1176": "DaoRulesProposals(uint256)", +"ca3e1733": "ico1Tokens()", +"ca3e5333": "isFundManager()", +"ca3fc092": "CheckPrivilegeAccomplishment(uint256)", +"ca4028da": "BabyBorn(string,uint256)", +"ca408e14": "publishSerie(string,string,string,string)", +"ca414006": "setData_11(string)", +"ca41d16f": "SMTfundAfterPreICO()", +"ca4223ad": "LATIME()", +"ca42afda": "getGErc20ToDemocs(address)", +"ca43801a": "SelfDesctructionContract()", +"ca4398e3": "StellarToken(uint256,string,uint8,string)", +"ca43b191": "armySatelitesCount(uint256)", +"ca4401f1": "investor_addRefBonus(address,uint256)", +"ca440ca3": "decimalDiv(uint256,uint256)", +"ca441b85": "randomBlockStart(uint256)", +"ca446dd9": "setAddress(bytes32,address)", +"ca448a88": "revokeAsset(bytes32,uint256)", +"ca44c8e4": "testMemoryIntegrityCheck4Bytes()", +"ca46e41f": "CROSAIR_VOUCHER_LIMIT()", +"ca4742f1": "getRN(uint256)", +"ca482264": "GetApplicant(uint32)", +"ca482849": "_finalSupply()", +"ca4858af": "evacuateTokens(address)", +"ca48b0be": "setupToken(address,address,address)", +"ca4938fb": "totalFreezed()", +"ca495022": "weiFromExchange()", +"ca4a0298": "maxAirDrop()", +"ca4a2bf7": "NewTokensSold(uint256,address,uint256)", +"ca4a3df3": "winlose()", +"ca4b208b": "developer()", +"ca4b4fd6": "remove(bytes32[],bytes32)", +"ca4bb2b5": "printAllProducts(uint256)", +"ca4bc6ae": "getBurritoData(uint256)", +"ca4bd513": "FundsRefunded(uint256)", +"ca4c8fc6": "OneTestCoin()", +"ca4cbf67": "getUint(address,string)", +"ca4d1435": "GWGF(uint256,string,string)", +"ca4e02d0": "Jump(address,uint256,uint256)", +"ca4e4863": "VECTORZILLA_RESERVE()", +"ca4f0911": "preICOPush(address,uint256)", +"ca4ff630": "priceForStage(uint8)", +"ca5271a1": "funcWithoutArguments()", +"ca52cc86": "CollectibleOffered(uint256,uint256,uint256,address,uint256)", +"ca53135a": "min_bet()", +"ca5397c7": "cancelSellOffer(uint32)", +"ca5450ce": "any_customer_payments_yet()", +"ca5454db": "createTransferAgreement(uint256,uint256,address)", +"ca54ea4e": "pointOf(uint256)", +"ca5541c1": "nextRoundReserve()", +"ca555f2c": "setInitLockedAccount()", +"ca558b25": "DataContacts(address)", +"ca55954c": "getTokenHolder(uint256)", +"ca56106c": "testCopy()", +"ca561d4d": "KiemTraNamNhuan(uint16)", +"ca579642": "GroupBuy(address)", +"ca585774": "RewardForum(uint256)", +"ca588f14": "delAdmin(address,address)", +"ca58a06c": "managerKey()", +"ca58d2b4": "FUNDS()", +"ca58da1a": "changeReserve(address)", +"ca59f45b": "transferRecord(bytes32,address,uint256)", +"ca59fa8d": "_distributedTo(address,uint16)", +"ca5a3b4a": "isAllowedWhitelist(uint256,uint256)", +"ca5a3f38": "getDaysPassedSinceLastRefundBallot()", +"ca5a899c": "totalStashedPayouts()", +"ca5adadc": "processEthPulicFunding(address)", +"ca5b4207": "log8(uint8)", +"ca5b428f": "Police_2()", +"ca5b8a52": "REGULAR_CATEGORY()", +"ca5c058d": "founderTokensLockedUntil()", +"ca5c1547": "preSaleFirstPrice()", +"ca5c7a34": "getLand(int256,int256)", +"ca5c7b91": "lockedSupply()", +"ca5d0880": "airDrop()", +"ca5eb5e1": "setDelegate(address)", +"ca5f4282": "amountWanted()", +"ca607c4e": "transfer_other(address,address,uint256)", +"ca60f409": "CurrentIcePrice()", +"ca61295b": "removeFRA(address)", +"ca615662": "testFailCreateWithForeignParentNotInUse()", +"ca6158cb": "itemId()", +"ca61cdac": "testSub()", +"ca61e9b3": "verifyHashWithPrefix(bytes32,uint8,bytes32,bytes32)", +"ca621ac3": "DEVELOPER_RESERVED()", +"ca626232": "exchangeAdapterManager()", +"ca628c78": "withdrawToken()", +"ca632cc5": "bountyPaid()", +"ca639025": "getNujaRegistry()", +"ca63a55b": "getHotelsLength()", +"ca63b5b8": "freezingCount(address)", +"ca63f057": "DISCOUNT_STAGE_ONE()", +"ca6490cf": "elementFunction()", +"ca64a02d": "withdrawBalances(address)", +"ca64a095": "viewNextRelease(address)", +"ca64ad89": "getNotPayableTime(uint256)", +"ca64cd34": "marketCapRed()", +"ca6528cc": "increaseBalanceOrWithdraw(address,address,uint256,uint256)", +"ca6649c5": "joinGame(uint256,uint8)", +"ca668eb2": "MyERC20Token(string,string,uint256,uint256)", +"ca66a9c7": "blocktubeCoin(uint256,string,uint8,uint256,string,string)", +"ca67065f": "tokensAreFrozen()", +"ca67628f": "presaleFemaleEnd()", +"ca68968e": "ConversionRates(address)", +"ca68a45d": "createLastWill(address,string,string,string,uint256,uint256)", +"ca698873": "countWhitelists()", +"ca699de1": "StagedRefundVault(address)", +"ca69e323": "maxToken()", +"ca6ad198": "oraclizeMinCallbackGasPrice()", +"ca6ad1e4": "setCustomGasPrice(uint256)", +"ca6b72fd": "XtracoinToken()", +"ca6c7400": "getBuyerSignature(string)", +"ca6cf796": "startWinery(string,string,string,uint256)", +"ca6cfd95": "_createToken(string)", +"ca6d56dc": "addMember(address)", +"ca6d5d0c": "getLockedTokensInGroup_(address,uint256)", +"ca6f8295": "RDOToken()", +"ca7044c3": "RelentlessConscience2Token()", +"ca708230": "funnel()", +"ca709a25": "getFeeToken()", +"ca710013": "hasAllowanceToRecieveTokens(address,address)", +"ca7140ad": "playerForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"ca722cdc": "settleBet(uint256,bytes32)", +"ca7230e9": "transferFromRegister(address,uint256)", +"ca7275cc": "SpiceHours(address)", +"ca733c32": "commandAddress()", +"ca73419e": "addAddressesToBlacklist(address[])", +"ca7390ab": "mulDivCeil(uint256,uint256,uint256)", +"ca740c8b": "IncreaseFunding(uint256,uint256)", +"ca74124c": "addUser(uint256,uint256,uint256,string,string)", +"ca7423ad": "withdrawLocks(bytes32,bytes32,uint256,address,address)", +"ca7430ea": "transferunlock()", +"ca758f42": "stcMaxBonus(uint256)", +"ca75b954": "PRESALE_HOLDER()", +"ca75cbfe": "submitTransaction(address,uint256,address)", +"ca75d770": "m_Owner()", +"ca760021": "withdrawChamp(uint256,address)", +"ca761365": "getDebris(bytes32,uint8)", +"ca76e548": "updateRest()", +"ca76ecce": "gettotalBondDivs(uint256)", +"ca7729f7": "_parseIntScientificWei(string)", +"ca77a6e8": "handleALU(uint256,int256,uint256,uint256,uint256,uint256)", +"ca77ab65": "calculate()", +"ca77ab8a": "getNextFile(bytes)", +"ca77ba31": "totalIssuanceCurrentBalanceSum()", +"ca77ea25": "createTokenByAtes(address,uint256,string)", +"ca78e65b": "disableManuallyMintTokens()", +"ca790380": "AstatosToken(address)", +"ca792754": "_assign(address,uint256)", +"ca79e2f2": "mintLongTermTokens(address,uint256)", +"ca79f967": "abortInactiveFight(uint256)", +"ca7a08ef": "compensate(address)", +"ca7b15da": "tokenRate5()", +"ca7bfc5d": "FinanceChain(uint256,string,string)", +"ca7c4dba": "getEtherPrice()", +"ca7c4e35": "OmenoToken()", +"ca7c8d07": "Medcash(address,address)", +"ca7c9296": "calculateFundedValueTokenToken(address,address,uint256,uint256,address,uint256)", +"ca7c95f2": "PRE_SALE_20_BONUS_MIN()", +"ca7ca5b4": "removeMember(address,bytes32)", +"ca7d18fe": "CORPayCoin()", +"ca7dc5b1": "getNumberOfTweets()", +"ca7e321f": "startBuyBackDate()", +"ca7e88ba": "setOutcome(bytes32,uint8)", +"ca80b489": "setGenes(uint256,uint256)", +"ca8127d4": "tradingFeeModifiers(address,address)", +"ca819d35": "getUserIDByWallet(address)", +"ca82a7c8": "rentModified(uint256)", +"ca82b5aa": "playBps(uint8)", +"ca84c176": "bonusAfterPresale()", +"ca84d17d": "payLeaderAndDev()", +"ca855a57": "SecureEgg()", +"ca85dbfc": "quickSetStarterClasses()", +"ca862298": "BitcoinWorld()", +"ca8695a4": "resetNewTokens()", +"ca8786c9": "bacancyToken()", +"ca879753": "burnMe()", +"ca87cb2a": "MRASToken()", +"ca87e67e": "setSaleTime(uint256,uint256)", +"ca87eb50": "Seo(address,uint256)", +"ca8836d2": "isPending(uint256)", +"ca88552d": "stock(address)", +"ca887dc4": "getAllGameStatistic()", +"ca88a7b0": "_shareToReferer(address,uint256,uint256)", +"ca88b3b2": "destructAll()", +"ca88bd5b": "isAccountBlocked(address)", +"ca88c5bd": "_getChallengeSuccess(uint256,uint256,uint256)", +"ca899878": "depositForRelay()", +"ca8a2c08": "createEstate(int256[],int256[],address)", +"ca8ab933": "countInstructors()", +"ca8b39c8": "setRegionBlockUpdatedAt(uint256,uint256)", +"ca8b42e4": "max_index()", +"ca8ee75a": "read_u8_array()", +"ca8f8ff3": "isExist(uint256)", +"ca8f9651": "voterVotingTime(address)", +"ca922078": "fundingStage(bytes32)", +"ca929e12": "transform(uint8,uint8)", +"ca92a136": "result_hash()", +"ca940bba": "getPastBet(uint256)", +"ca94452d": "setCrowdsaleTransfer(address,uint256)", +"ca94692d": "abiSignature()", +"ca949a1d": "blackjackValue(uint8)", +"ca94a927": "UnicornManagement(address)", +"ca95402d": "ExpRegistrar()", +"ca965c3f": "transferCEO(address)", +"ca96d7fc": "claim(bytes32,bytes32,uint8)", +"ca970bac": "donateDivs()", +"ca972cd4": "registerNewAccount()", +"ca97a248": "MoveRerolled(uint256,uint256,uint256)", +"ca97d274": "updateTokens3PerEth(uint256)", +"ca990859": "getPlayedInfo(address)", +"ca997200": "getForecastData(bytes32,bytes32,bytes12,uint8)", +"ca9a06df": "calcReservedTokens(uint256,uint256)", +"ca9a9386": "getNickname(address,address)", +"ca9c2862": "getCrydrController()", +"ca9c4b33": "hatchEgg()", +"ca9ccd3d": "secondRoundTime()", +"ca9d07ba": "refill(uint256)", +"ca9d0f8d": "process2(uint256,address)", +"ca9defb7": "ownerTransferZTH(address,uint256)", +"ca9e1993": "_transfer()", +"ca9ec138": "toEthSignedMessageHashBytes(bytes)", +"ca9efc73": "left81(uint256)", +"ca9f0803": "reservedInvestors(address)", +"ca9fa49e": "halfyearteam_trade_date()", +"caa02e08": "winnerCount()", +"caa035d6": "getTokenSaleType()", +"caa03a3e": "getPlayerId(string)", +"caa0f0af": "devAllocateTokenInMinutes(address,uint256,uint256)", +"caa0f92a": "getNextTokenId()", +"caa14e36": "setGiveBirthType(bool)", +"caa25756": "registerProductContract(address,address)", +"caa3b6e4": "TicTacToe()", +"caa3d559": "TRCExchangeRate()", +"caa4041e": "getAccountLimit(address)", +"caa4c5d0": "assumeControl()", +"caa5aba2": "ConfigurableParameters(uint256,uint256)", +"caa648b4": "getTotalValue()", +"caa67873": "CreateKDT(address,uint256)", +"caa6fea4": "emergency()", +"caa7590d": "MIN_INVEST_BOARD()", +"caa774ed": "petOnLeaderboards(uint64)", +"caa7b4b8": "ABToken(uint256,string,uint8,string)", +"caa7be13": "ClientPaymentEvent(address,uint8,uint8,int256)", +"caa7fd06": "cancelBid(uint256,uint256,bool)", +"caa82ab2": "TokenSendFail(uint256)", +"caa872ae": "_takeAll(address,address,uint256)", +"caa877e7": "buyFor(address,address)", +"caa8e084": "div(uint32,uint32)", +"caaa2045": "addressToNumTowns(address)", +"caaacb12": "totalForMining()", +"caab0acc": "testThrowCreateRetracted()", +"caab21d2": "Ore()", +"caabe889": "inAllocationLockPeriod()", +"caac87d0": "airdropPlays()", +"caad5b18": "withDrawEther(uint256)", +"caade55b": "AddrPartnerPocket()", +"caaed302": "rejectMilestone(uint256)", +"caaee91c": "setProxyOwner(address)", +"caaf2dd7": "getInitialAnswerResult(uint256)", +"caaf6d21": "numLoveItems()", +"caafa055": "ROUND_7_PRESALE_BONUS()", +"caafc163": "process2(uint256,address,address)", +"cab0198f": "emitTokensToOtherWallet(address,uint256,uint256)", +"cab067c0": "initialiseCrowdsale(uint256,uint256,address,address)", +"cab09273": "getUsedPaymentSupply()", +"cab0f632": "changeSponseeAddress(address)", +"cab17220": "VotesNecessary()", +"cab36e92": "addHash(uint256,string)", +"cab37586": "partnerWithdrawed(address)", +"cab39db9": "_updatePhase(bool)", +"cab3ad2c": "BONUS_ICO_WEEK_ONE()", +"cab47da7": "RATE_FOR_WEEK2()", +"cab54df1": "testHitPresaleCapPreDistribute()", +"cab59238": "setTrust(address,bool)", +"cab5c0f1": "_incrementState()", +"cab60267": "getGameCalculatedStats(uint256)", +"cab63661": "setPublisher(address)", +"cab6eade": "_destroyDeed()", +"cab7e3d9": "purchaseCars(uint256,uint256,bool)", +"cab7f0cc": "test_insert_findWithHintNextRemoved(int256)", +"cab7f521": "invoke()", +"cab896dc": "gameCost()", +"cab925a3": "BurnReceipt(address,uint256)", +"cab9c32a": "sellLimit(uint256,uint256)", +"caba203d": "Loyalty()", +"cabb3a3a": "isAlphaNumeric(string)", +"cabc0f43": "isLotteryOpen()", +"cabc6589": "awardWinnings()", +"cabc737c": "_addMaster(address)", +"cabcaaa0": "associateWithFile(bytes32)", +"cabd27de": "Motion(address)", +"cabd734f": "reject(bytes32)", +"cabe0452": "getCampaign(bytes32)", +"cabe2c0a": "levelEndDate()", +"cabf72e5": "WSBCCoin()", +"cabf8493": "balancesImporter4()", +"cabfb934": "replace(address)", +"cabfd1bf": "allocateTokens(address)", +"cac07bbf": "distributeTeamCut(bool,uint256)", +"cac12d2d": "tokenGenerationCap()", +"cac35112": "tokenRelease()", +"cac37f93": "totalTokensWithdrawn()", +"cac3e64a": "checkToken()", +"cac3f6c9": "percOf(uint256,uint256,uint256)", +"cac625e6": "transferTokenOwnership(address,address,uint16)", +"cac6d78f": "ToexCoin()", +"cac6edd8": "rightLottery()", +"cac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", +"cac7db8a": "addUserToList(address)", +"cac7fc71": "allBalances(address,address,address[])", +"cac8d538": "setERC20Contract(address)", +"cac92fe1": "Aeroneum(address,address)", +"cac952ae": "isValidCustomerTxPaymentForMCW(address,bytes32)", +"cac98d6d": "getCCH_edit_24()", +"cac9a94e": "changeWalletOwnerAddress(address)", +"cac9ffbd": "fillIndexedBid(uint256)", +"cac9ffee": "unWhitelistAddress(address)", +"caca66bd": "transferPlatformship(address)", +"cacb27f4": "_D_sendToTeamEthContract()", +"cacc24eb": "transferFromViaProxy(address,address,address,uint256)", +"cacca238": "getBaseAmount(uint256)", +"cacca4a0": "approveTransfer(uint256)", +"caccd7f7": "developerAddress()", +"caccd805": "daoPOLSKAtokens()", +"cacd7a66": "creatUserID(string)", +"cace12e6": "roundInfo()", +"cace467e": "cancelSell(uint256,uint256,uint256,uint256)", +"cace7bd3": "claimRewardK(uint256)", +"cace8f37": "dragonGirlLotteryNumber()", +"cacf1e0e": "getPaymentsCount()", +"cacf5a33": "calculateVestedAmount()", +"cacf66ab": "genesisTimestamp()", +"cacfa24a": "_isBuilt(uint256)", +"cacfb535": "unpackAll(uint256)", +"cacfd8e9": "playTypes(uint256)", +"cad079ed": "investedUSD()", +"cad0899b": "sum(uint256,uint256)", +"cad1c663": "getChildOperation(bytes32,uint8,uint8)", +"cad1d39b": "getPersonalAirdropUnlockTimestamp(address,address)", +"cad2042f": "O2OToken(uint256,string,string)", +"cad27ae1": "random(uint64,uint8)", +"cad283a0": "EtherBetIO(address)", +"cad3d24d": "calculateBoatFee(uint256)", +"cad41357": "darknodeBond(address)", +"cad461ea": "setWeiPerUSD(uint256)", +"cad4ae37": "_addToBlacklist(address)", +"cad60d17": "freezeTokens(uint256,uint256)", +"cad66781": "NumOfStudentsRequests()", +"cad6dd1f": "sumPreICOUSD()", +"cad7214d": "supplyRound4()", +"cad80024": "left58(uint256)", +"cad916ec": "DEVELOP_CAP()", +"cad93688": "Test2(uint256)", +"cad9639d": "DEXK()", +"cad9642b": "getReportCount()", +"cad987f5": "updateAppreciationStep()", +"cadaacbf": "g(address)", +"cadb1166": "modifyWhiteList(address[],bool)", +"cadb3031": "timeoutY()", +"cadb48d9": "contractCreationBlockTime()", +"cadb5236": "vestToAddressEx(address,uint128,uint8,uint32)", +"cadbead4": "Pentacoin()", +"cadc958f": "VoteOnTransferStarted(address)", +"cadca796": "setShareHolders(bool,uint256,uint256)", +"cadcbce4": "PartComplete()", +"cadd888b": "getRewardToken(uint256,uint256)", +"cade3a5d": "_createPixel(uint24,uint32,address)", +"cade4f31": "collected_crowd_vitas()", +"cade77fa": "readAddress(address)", +"cadec1b2": "Registrar(address)", +"caded61f": "saleRatio()", +"caded711": "subOpenRoomCount(address)", +"cadf338f": "valueOf(uint256)", +"cadf74e2": "_unclaimedChickenOf(address)", +"cae039eb": "getWishTime(uint256)", +"cae07d2a": "TOKEN_SCALE()", +"cae15051": "tokenReceived(address,uint256)", +"cae20b59": "getAnimalIdsWithPendingCostume()", +"cae21530": "fightZeroMonster()", +"cae270b6": "sell(address,address,uint256)", +"cae342f6": "dontShowMeInTrace()", +"cae39b6f": "compute_pi(uint256)", +"cae3c254": "publicFundingWhiteList(address)", +"cae3d482": "vehicles()", +"cae44e83": "EthereumCoin()", +"cae4d676": "sendRefund(address)", +"cae523c1": "testOwnedTryAuthUnauthorized()", +"cae57913": "addTwo(uint256)", +"cae5c8c3": "APP_STORE()", +"cae6047f": "INVERSE_BASIS_POINT()", +"cae61d2e": "offer(string,uint256,uint256,address)", +"cae6b9c5": "tapPoll()", +"cae6ff18": "SKPT()", +"cae774b3": "maxInterval()", +"cae8e284": "newProposal(address,uint256,string,bytes32)", +"cae8eb2f": "ctrtToken()", +"cae96610": "WorldWifi()", +"cae96926": "is_creator(address)", +"cae98d4f": "r1(address)", +"cae9a07d": "changeManager()", +"cae9ca51": "approveAndCall(address,uint256,bytes)", +"caeafe6a": "stageStartTime()", +"caeb2539": "PreSaleBuy(address)", +"caeb2e2c": "_emitSkillAreasSet(address,uint256)", +"caeb30e9": "Configurator()", +"caebb256": "channelManagerByAsset(address,address)", +"caec390e": "getinfolaff(address)", +"caec3c79": "getBatchTransfer(address,address)", +"caecc5aa": "turnrefund()", +"caed4f9f": "DataService()", +"caed80df": "registries(address)", +"caee04b5": "AddGameCategory(string)", +"caee1daf": "creationRateOnTime()", +"caee262c": "sharesRec(uint256,uint256)", +"caee3305": "firstVestStartsAt()", +"caee4e18": "CommunityVotes(uint256)", +"caee7c78": "grantsCreated()", +"caef2181": "GetTimeMultiplier(uint256)", +"caef5dec": "getSubPayeesCount(bytes32)", +"caef6a84": "ETHMONEY()", +"caefb79e": "setCaps(uint256,uint256,uint256)", +"caefc5d5": "SemfaxToken()", +"caefdbe9": "FWDaddrETH()", +"caf05ce3": "isStopPlay()", +"caf0887d": "split(uint256,uint256,uint256)", +"caf19e5a": "toText(bool)", +"caf1bb7c": "repoBase()", +"caf29765": "PERCENTAGE_DIVISOR()", +"caf306c2": "ratePerWeiInMainICO()", +"caf439cb": "angelBurn(address,uint256)", +"caf44683": "test2(uint256)", +"caf597f3": "INVEToken(address)", +"caf66171": "bigRoundMaxRoundNum()", +"caf6cb3f": "marketDefaultFeeHigh()", +"caf6e1c9": "setClosedManually(bool)", +"caf6fe1a": "randomGenes()", +"caf71743": "createSellOrder(address,uint256,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"caf798d7": "transferRegion(uint16,address)", +"caf7caf1": "_multiplyDecimalRound(uint256,uint256,uint256)", +"caf807a1": "closeEth()", +"caf91b30": "airdrop(uint8,bytes32,bytes32,uint256)", +"caf9bf58": "getContributionsCount(address)", +"cafa1cde": "PajCoin223()", +"cafa22d7": "setLeftICOTokens(uint256)", +"cafab7e1": "viewPetitionShareholderWithAddress(address)", +"cafaed51": "deadlineParticipation()", +"cafb2202": "invested()", +"cafbc49d": "createProduct(bytes32,string,address,uint256,uint8,uint256)", +"cafbcc8a": "inInnerScope(uint256,uint256)", +"cafc0fbd": "isRegulated(address)", +"cafd3d52": "setUpCrowdsale()", +"cafe0e90": "setFee(string,uint256)", +"cafe2f19": "setReachCapped()", +"caff4b03": "Response(bytes32,uint256)", +"cb009d2c": "KellerWilliams(uint256,uint256)", +"cb00e7f8": "MCTContractToken(uint256,address)", +"cb0177a0": "disableAllocationModificationsForEver()", +"cb0195ee": "changeDeveloperTemplateAmountLimit(uint256)", +"cb01a9bf": "payRent(bytes32,string)", +"cb01c70c": "episodesNum()", +"cb01cd02": "masscreate(uint256,uint256)", +"cb01f15c": "GetLogMessageWarning()", +"cb01f431": "maxTokensToSaleInClosedPreSale()", +"cb0210a0": "updateReputation()", +"cb029785": "Aphrodite()", +"cb02ba28": "multiSend(uint256,address[])", +"cb030cee": "_reducerunmoney(address,uint256)", +"cb03e43b": "AnimalFoodToken()", +"cb040e0b": "createTemplate(string,bytes32,bool,address,bytes32,uint256,uint256,uint8,uint256)", +"cb04a34c": "getMarketTotalPar(uint256)", +"cb05b93e": "getEth()", +"cb076478": "getTicket(address,uint256)", +"cb07b94b": "getLastRegionId()", +"cb09abc2": "resolveProp(uint256)", +"cb09b0d0": "ownerAPI()", +"cb0a2d95": "HashtagToken(uint256)", +"cb0a3889": "setPreIcoStart(uint256)", +"cb0ab425": "getIPFSHash(address)", +"cb0b6161": "_calcRelease()", +"cb0b7b03": "setContributionMinimum(uint256)", +"cb0cedb8": "getFineLevelOfAddress(address)", +"cb0cfaa2": "finalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", +"cb0d3133": "setEscrowedProjectBalances(uint256,uint256)", +"cb0d3981": "getMintForReportingParticipantTargetValue()", +"cb0ef7d0": "hgtRates(uint256)", +"cb0f86ab": "cards_black(uint256)", +"cb0fb059": "getNumberTwoArgs(address,bytes4,address,address)", +"cb10e0c5": "getLastDuel1()", +"cb10fa76": "safeToMul(uint256,uint256)", +"cb11526d": "moving()", +"cb117f0c": "approveAndCallAsContract(address,uint256,bytes)", +"cb122a09": "setFee(uint8)", +"cb12b48f": "me()", +"cb12be81": "prometheusShipMinted()", +"cb12fc1d": "LAMDEN_DECIMALS()", +"cb1374a2": "claimTokens(address[],uint256[])", +"cb146814": "baseETHBalance()", +"cb149b09": "unlockWorker(address,address)", +"cb14a5cf": "treeDetails(uint256)", +"cb14b170": "SubscriptionModuleImpl()", +"cb14d93b": "getHash(bytes,address,uint256)", +"cb1579ec": "checkOrderBatch(uint256[48])", +"cb15d07b": "getOfferAmount(uint256)", +"cb161f8a": "AddDiv()", +"cb16415f": "fundsToOwner(uint256)", +"cb1650b4": "createThread(string,string)", +"cb16d4a2": "sendEther(uint256,address)", +"cb16e6d0": "earlyParticipantWhitelist(address)", +"cb170735": "createBools(bytes32[],bool[])", +"cb192f2c": "setAdvertisingAddress(address)", +"cb19bf53": "Testtoken5()", +"cb1a32a4": "aotLength()", +"cb1a7b1d": "tokenDelta(address,address,address,uint256,uint256,uint256)", +"cb1aaa31": "distributed_bounty()", +"cb1ab340": "setFinancialAdmin(address)", +"cb1b82b7": "getuserbalance(address,address)", +"cb1ba60f": "voteOnElection(address,address,address,address,uint256)", +"cb1be21a": "configureWallet(address)", +"cb1c2b5c": "MIN_STAKE()", +"cb1c8b6a": "purchaseDefense()", +"cb1d8418": "getForkingMarket()", +"cb1d9d63": "setENGCommunityAddress(address)", +"cb1de087": "transferFromFST(address,address,uint256)", +"cb1e4389": "isMajorityConfirmed(bytes)", +"cb1fa715": "setSingleWithdraw(uint256)", +"cb1faac1": "leftVotes()", +"cb1fc276": "createPassportByOwner(address)", +"cb1fc7bc": "totalSzaboInBids()", +"cb207166": "LifeFactor_iv()", +"cb227cae": "getPOOL_edit_18()", +"cb22c0aa": "setBudget(address,string)", +"cb22d392": "windowFinalBlock(uint256)", +"cb22d41b": "numBeneficiaries()", +"cb22fd59": "setFeeCharge(uint64)", +"cb238ffa": "returnHashLong(address,uint256[3])", +"cb2410b9": "changeContentData(uint256,uint256,bytes32)", +"cb244f65": "koreanCitizen()", +"cb24e8f1": "Foorp()", +"cb254080": "TomToken()", +"cb25d9a2": "JFDToken()", +"cb27bdc1": "revealDeadline(bytes32)", +"cb27f28a": "endCrowdFund()", +"cb282253": "totalEthContributed()", +"cb28ba6a": "AIToken(uint256)", +"cb28c716": "createKycData(address,string,string,uint256,uint256,string,string,string,string,int256,uint256)", +"cb293e7a": "rentRentable(bytes32,address)", +"cb294dc5": "ULTRONEUM()", +"cb2971b1": "eosTokenAddress()", +"cb297ef0": "_performRenewal(uint256,uint256)", +"cb29881c": "createEggScheme(uint256,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"cb29eee0": "medsupply()", +"cb2b34d6": "setSalary(uint256)", +"cb2b5668": "EVBChain()", +"cb2b9031": "addressToBytes(address,address)", +"cb2bea55": "setEmergencySecrets(uint256,uint256)", +"cb2c05dc": "viewInitialPricePerShare()", +"cb2c8723": "addUtilityHolder(address)", +"cb2e0814": "iii(address)", +"cb2e1d10": "icoRound4()", +"cb2e46f3": "endTimer()", +"cb2ec895": "deposit(bytes32,address,uint256,bool)", +"cb2f7b87": "update(uint32,uint128,uint128)", +"cb2f7c49": "hashDifficulty(bytes32)", +"cb2fe520": "remainingTokenBurnt()", +"cb31b6cd": "multiTransferFrom(address,address[],uint256[])", +"cb3204a8": "getKycHash(uint256)", +"cb338436": "doSendProfits(address)", +"cb33e7fa": "doTrade(address,address,uint256)", +"cb35ef2c": "demotest()", +"cb3687df": "core(uint256,uint256,uint256,uint256)", +"cb3694ba": "getManualInvestorsCount()", +"cb379765": "tsauction(uint256)", +"cb381b61": "teamETHUnlock1()", +"cb381c3c": "setGas4Token(uint256)", +"cb388b9b": "test_callIt()", +"cb38c7b4": "getWithdrawalList(address)", +"cb393ecb": "Dice5()", +"cb3993be": "decreaseApprovalAndCall(address,uint256,bytes)", +"cb39aafb": "validateRequest(bytes32[8],bytes,bytes,bytes)", +"cb3a11f9": "withdrawUserSpecifiedFunds(string,uint256,uint8)", +"cb3ab271": "WYQToken(uint256,string,string)", +"cb3ae150": "Playforbulktoken()", +"cb3b0c79": "LotToken()", +"cb3bc227": "LogBeerBought(uint256,address)", +"cb3c28c7": "trade(address,uint256,address,address,uint256,uint256,address)", +"cb3cb085": "validateTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"cb3ce26e": "m_owners()", +"cb3cf99a": "decode(bytes,uint256,uint256,uint256,uint256,uint256,uint256)", +"cb3d6b5f": "devTeamWithdraw()", +"cb3e394d": "transferFromWithFee(address,address,uint256,uint256)", +"cb3e64fd": "unhalt()", +"cb3ebec2": "ownerDividend()", +"cb3eecc9": "getNewInstance()", +"cb3eef2c": "allWorkers()", +"cb3fcb56": "setGrowthTokensPercent(uint256)", +"cb4153e9": "destroyNinja(uint256)", +"cb421a21": "denemekontrat()", +"cb424c24": "HZRToken(address)", +"cb42a77b": "stringTobytes32(string)", +"cb43269d": "getRegistryImplementation()", +"cb4360d9": "allocateToken(address,uint256,uint256)", +"cb43e079": "drain_block()", +"cb44211e": "addApproval(address)", +"cb44b53d": "ResolutionProposals()", +"cb457d47": "unlimited()", +"cb45a294": "getSecondTokens()", +"cb4717b2": "SetProperty(bytes32,uint256,uint256,uint256)", +"cb4735f2": "estimatedFundingAmount(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cb4799f2": "getMetadata(uint256,string)", +"cb47a8ce": "MultiChampion()", +"cb47abc7": "getTotalNumberOfTransactions()", +"cb48e1a5": "assignShareTokens(uint256)", +"cb4a15c5": "checkStringLength(string,uint256,uint256)", +"cb4b0105": "Unhold(address,uint256)", +"cb4b3710": "setStopSelling()", +"cb4b9db1": "EchoChainToken()", +"cb4bc2e9": "tryauthenticate(bytes)", +"cb4bd883": "updateRef(bytes32,string)", +"cb4be0bb": "getTurtlemasterReq()", +"cb4c86b7": "funding()", +"cb4c88ae": "MediatedTransferStatusModified(uint256,bool)", +"cb4c8ee4": "isRSPScience()", +"cb4d3d67": "AddedTokenHolder(address,uint256)", +"cb4de968": "ICO_BASE_PRICE_IN_WEI()", +"cb4e75bb": "smbl()", +"cb4e7fdc": "icoIsRunning()", +"cb4f1d85": "getPolicyHolder(bytes)", +"cb50301a": "unsoldAddr()", +"cb510e97": "isStaff(address)", +"cb51c418": "_toString(address)", +"cb51f777": "TOKEN_PRICE_NUM()", +"cb526229": "RefundChequeByHash(uint256)", +"cb52926a": "getBoughtAssetPacks(address,address)", +"cb52c25e": "updateAmountRemainingForSale(uint256)", +"cb553ac9": "sweepWizardCommission(uint256)", +"cb55adfb": "getStrategyTokenAndWeightByIndex(uint256,uint256)", +"cb560ac4": "winningMultiplier()", +"cb562fb3": "Uniond()", +"cb56d626": "testFailBlobStoreNotRegistered()", +"cb56dd79": "getFinalState(uint256)", +"cb56e40b": "getTrader(uint8)", +"cb574b8c": "buyUpgrade()", +"cb577480": "prepare(uint256)", +"cb5829ab": "Revision()", +"cb5853a8": "claimTaxex(uint256,uint256)", +"cb58594e": "airDropShadowMoney()", +"cb586251": "MintableMultiownedToken(address[],uint256,address)", +"cb5b6bef": "setPriceStep8(uint256)", +"cb5bf9b8": "EthersRaised()", +"cb5cf43f": "supplyReady()", +"cb5d0646": "Presale2Sold()", +"cb5e4805": "NvcFundCoin()", +"cb5e7d2d": "newMember(address,bytes20,uint64)", +"cb5e891f": "_setActiveSupply(uint256)", +"cb5f18db": "get_ads()", +"cb5fa63f": "getRoundEth(uint256)", +"cb5fd01f": "TestToken(address,address,address,address)", +"cb5fe36e": "VESTING_2_DATE()", +"cb60f8b4": "sellStartTime()", +"cb6142c9": "freezeAllAccountInEmergency(bool)", +"cb61522d": "MILLIODS()", +"cb61b42d": "updateShares(uint256,uint256,uint256)", +"cb61b49e": "_setRate(address,address,uint256)", +"cb6291cb": "ownerSendTokens(address,uint8,uint256)", +"cb6308f1": "approveVersion(address)", +"cb6367d1": "verifySignatures(bytes32,uint8[],bytes32[],bytes32[])", +"cb637d85": "changeAccountService(address)", +"cb639322": "realReserve()", +"cb63da4e": "ALLOC_RES()", +"cb63ddb6": "makeProposal(uint8,uint256)", +"cb642180": "_updateNodeHeight(bytes32)", +"cb645ae2": "addOneRequest(address)", +"cb64a37b": "createSeratioStake()", +"cb64d74d": "etherFeePercent()", +"cb656a13": "adviserSold()", +"cb65ad66": "MobileAppSupply()", +"cb65c0f5": "withdraw_excess_tokens(uint256)", +"cb662fe1": "claimedList(uint256)", +"cb67f20f": "SaleClosed(uint256)", +"cb67f948": "unlockTokens(address)", +"cb68780f": "GetICOData(uint256)", +"cb6890d9": "setAccount(address,uint256)", +"cb692928": "dataControlSetFeePropMaxGlobal(uint256)", +"cb6ad855": "log10Ceiling(int256)", +"cb6af4cb": "createChannel(string)", +"cb6b1f05": "cf2Wallet2Pct()", +"cb6b25f3": "votePassed(uint256)", +"cb6b8699": "getPI_edit_5()", +"cb6bfa03": "BNIToken()", +"cb6bfd23": "CyTestCoin(uint256,string,uint8,string)", +"cb6c1655": "tokensFor1EthP1()", +"cb6cec4b": "getIpfsAfterTitle(bytes32)", +"cb6d0c5f": "minimumDurationInBlocks()", +"cb6da9da": "takerCount()", +"cb6e3fa9": "shouldUpdateFunder(address)", +"cb70d9a7": "changeUserCertificate(bytes32)", +"cb712535": "_transferFrom(address,address,uint256)", +"cb7129a3": "resolvePriorBets()", +"cb724422": "testPayTokens()", +"cb739476": "MAGExCoin()", +"cb739c0f": "changeRateLoss(uint256)", +"cb740c61": "grant(address,uint256,uint256,uint256)", +"cb742358": "virtualBalanceOf(address)", +"cb752679": "buyTokensWithPoly(uint256)", +"cb757e92": "REGO()", +"cb758a89": "addDataPoint(uint256,bytes32)", +"cb76937c": "getUserBetsTimeStampInARazInstance(uint256,uint256)", +"cb7729d3": "shiny()", +"cb774d47": "startingIndex()", +"cb775d5a": "consumePower(uint256)", +"cb77ed34": "_getProviderSupply(uint256)", +"cb78bebc": "USER_BUY_LIMIT()", +"cb78c9f0": "flips()", +"cb795a64": "allowedBuy()", +"cb79d573": "maxCompanyValue()", +"cb79e31b": "votingRightsOf(address)", +"cb7a0a6f": "getPlayerSpaceshipBattleModeById(uint256)", +"cb7aac1e": "transferTokensFromProjectFundAddress(address,uint256)", +"cb7acdd9": "hola()", +"cb7b3f0a": "readPaymentChannels()", +"cb7b3fb9": "KinguinIco()", +"cb7b4ad4": "canCPCreateInFactory(address,address)", +"cb7b8673": "setTokenExchangeRate(uint256)", +"cb7bba39": "lockaddress(address)", +"cb7bba61": "prove(string,string)", +"cb7c05e7": "verify_fund()", +"cb7c225e": "Send_TrustlessTransaction(address,uint256)", +"cb7c30f2": "m_D_n()", +"cb7d38ac": "changeStartPreSale(uint256)", +"cb7d8ef2": "spark()", +"cb7e70fa": "buyTokensOnInvestorBehalf(address,uint256)", +"cb7e9057": "dispatcher()", +"cb7e9bf1": "rewardHistoryMapOf(address,uint256)", +"cb7ef63d": "Coinage(uint256,uint256,uint256,uint256,uint256,uint256)", +"cb7fd9db": "checkVeracity(string)", +"cb802c8b": "getInvoice(bytes32)", +"cb80bd60": "LogRefundFailed(address,uint256)", +"cb810ea9": "sendTokensSingleValue(address,address,address[],uint256)", +"cb81fecf": "lockRequestCount()", +"cb821f03": "calculateClaimByIndex(address,uint256)", +"cb82d5df": "canMakeNoFeeTransfer(address,address)", +"cb84e69e": "setMessageMaxCharacters(uint256)", +"cb8523c6": "addAllowed(address)", +"cb856252": "getFreezeList()", +"cb859c09": "getGameRules()", +"cb85f175": "WhiteListedInvestorAdded(address,string)", +"cb86df95": "moveStartDate(uint256)", +"cb8820ef": "setWriterId(address,bytes32,bytes32)", +"cb884207": "deathData_f5()", +"cb885a36": "Crowdsale(address,uint256,uint256,uint256,address,address,uint256)", +"cb89558d": "AgreementHashRu()", +"cb899024": "defrostToken()", +"cb8a67ed": "ownersForChange()", +"cb8b4b83": "CollectERC20(address)", +"cb8b99b2": "_addCryptantFragments(address,uint256)", +"cb8c2982": "getMyKebabers()", +"cb8c478a": "activeTime()", +"cb8cb4a3": "getGoals(address)", +"cb8cd7cb": "transferFee_()", +"cb8d0f46": "tstop()", +"cb8ff46f": "koinconekt()", +"cb908d78": "_updateEthereumPrice()", +"cb912ffb": "tokenCountSet()", +"cb918634": "setDrawP(uint256)", +"cb91a6ba": "setGemPerMiner(uint256)", +"cb91aec7": "getFreelancerContracts(address,address)", +"cb91f1c2": "periodPreITO_endTime()", +"cb92042c": "removeShare(address)", +"cb923813": "saled()", +"cb92bfa1": "_computeCurrentPrice(uint256,uint256,uint256,uint256)", +"cb92c28d": "rewardEvery1000Draw7(uint256)", +"cb92cb52": "BuyBackStart(uint256,uint256,uint256)", +"cb930934": "KopihitamToken()", +"cb93abb2": "BUYER_STEP_1(bytes32)", +"cb93e347": "CryptoGamesMarket()", +"cb93f7ef": "withdrawDevFee()", +"cb944e24": "saleCapUsd()", +"cb945312": "testEqual()", +"cb949213": "addressToPurchasedTokens(address)", +"cb949e51": "getCustomer(address)", +"cb94aa26": "withdrawBatch(address[],uint256[])", +"cb950c37": "updateValidMCAmount(uint256)", +"cb9580e0": "TotalPaid()", +"cb95a6f6": "Bounty(address)", +"cb96012e": "hashTo256(bytes32)", +"cb965ae9": "allKeys()", +"cb96b0d6": "MAX_EXCHANGE_FEE_PERCENTAGE()", +"cb96f11d": "Oversight()", +"cb9756ad": "buyClimateCoinsAgainstEther()", +"cb9854a2": "confirmSwap()", +"cb985708": "investorWalletAddress()", +"cb985dd1": "MARKET_SHARE()", +"cb990457": "holdersByIndices(uint256,uint256,bool)", +"cb991efe": "depositEscrow(uint256)", +"cb99cbac": "startServer(uint256)", +"cb99d98e": "_addWhitelisted(address)", +"cb9a20d0": "MINI_GAME_ADD_TIME_DEFAULT()", +"cb9a3251": "finalizeMany(uint64[])", +"cb9a32a5": "promoMasterpiecesCreatedCount()", +"cb9a5edd": "availableLand()", +"cb9aac64": "usesLibrary()", +"cb9ae707": "latestDifficultyPeriodStarted()", +"cb9b3a3c": "getCCH_edit_4()", +"cb9bdf45": "tokenSoftcapIssued()", +"cb9c8505": "throwIfStartPastBlocktime()", +"cb9d5eb4": "safeMove(address,address,uint256)", +"cb9d6176": "LogDelete(address,uint256)", +"cb9d86e2": "BlockRefunded(address)", +"cb9dd1a0": "setMoving()", +"cb9e2755": "deleteEntity(uint256)", +"cba01a49": "LunarLink()", +"cba0e996": "isExcluded(address)", +"cba1fa10": "set_iconiq_presale_open(address,bool)", +"cba25e79": "presaleHardcap()", +"cba2c735": "createPurse(string)", +"cba456df": "casinoProxy(address,address,address)", +"cba4bc94": "_setHowManyOwnersDecide(uint256)", +"cba4f643": "changePreIcoRate(uint256)", +"cba50fd1": "generateUserRelation(address,uint256)", +"cba58ab6": "disableService()", +"cba59827": "Reject()", +"cba5b465": "endContract(address,uint256)", +"cba6582e": "Ellomiun()", +"cba66250": "FTV(address,address,address,address)", +"cba66e14": "sliceBytes20(bytes,uint256)", +"cba6a3a2": "setTransferAuthorized(address,address,uint256)", +"cba74da1": "getResource(bytes32,uint256,bytes32)", +"cba88872": "countdown()", +"cba8901b": "getPayoutKeys()", +"cba8be1c": "setServerAdmin(address)", +"cba91a35": "roundTwoTime()", +"cba9a794": "handleReturnBool()", +"cba9c0e0": "presale_start_block()", +"cbaa0b25": "playerAttack(uint256,uint256)", +"cbaa0bec": "amendSingleResult(int16,string)", +"cbaba70f": "EADC()", +"cbac21b8": "periodPreITO_mainCapInUSD()", +"cbac8816": "tokenRate20()", +"cbaca250": "RewardSplit(uint256)", +"cbacb269": "stopBonusCompaign()", +"cbacffe4": "addToPayeeBalance(address,uint256)", +"cbad3779": "getPublisherRegistry()", +"cbad60b6": "spread(uint8)", +"cbad7bf6": "cg(address,uint256,uint256,uint256)", +"cbaddbaa": "BurnMe()", +"cbae0163": "readPosition(uint256,int256)", +"cbae0978": "NewResolver(uint256,address)", +"cbae1467": "deleteAllAvatars()", +"cbaeadb4": "getRewardHistory(address)", +"cbaedd3c": "slashUsername(bytes)", +"cbaf4742": "OPERATE_SUPPLY()", +"cbaf5104": "_isClosed(bytes)", +"cbaf566d": "updateRentInfo(uint256,uint256,uint256)", +"cbafee8a": "tokensToMint()", +"cbb01884": "setDefault(uint8,address)", +"cbb04cbd": "debtPaid()", +"cbb05527": "totalCapInWei()", +"cbb0c95a": "getPlayerWithdrawEarning(uint256)", +"cbb105d6": "NewWorld()", +"cbb1d761": "confirmBySigner(bytes32,address)", +"cbb2fd5d": "TRTToken()", +"cbb31da9": "maker(address)", +"cbb433ea": "DeepToken()", +"cbb45120": "TOTAL_WINS()", +"cbb45444": "test_transfer_to_contract_without_fallback()", +"cbb50d30": "teamAllocationTokenSend(address,uint256)", +"cbb6e5c9": "transferTopLevelDomainOwnership(bytes32,address)", +"cbb70c92": "addLOC(address)", +"cbb8b158": "TESTH()", +"cbb9818c": "turn_flag_ON()", +"cbb9dbb9": "depositCoupon(address[2],uint256[8],uint8,bytes32[2])", +"cbba3f4b": "DCSToken()", +"cbbacd48": "cliffs(address)", +"cbbaed1b": "incentiveDistributionMaxRounds()", +"cbbb2698": "checkBlackAccount(address)", +"cbbc1bf3": "setCosignerAddressForUser(address)", +"cbbc8504": "GnosisTalk()", +"cbbc8a51": "setForeignDailyLimit(uint256)", +"cbbcdf77": "addCurrency(uint256)", +"cbbd809c": "approvedAddressInLUT(uint256)", +"cbbda00e": "Ptest()", +"cbbdca36": "Upgradable(address)", +"cbbe2199": "ActualTokenManager()", +"cbbe2569": "Bogocoin()", +"cbbe300b": "FooMintToken()", +"cbbe974b": "unlockUnixTime(address)", +"cbbea348": "getModeratorAtIndex(uint256)", +"cbbf879c": "getNumParentOperation(bytes32,uint8)", +"cbbf9420": "distributeVES(address[],uint256,uint256)", +"cbbfe168": "getOrder(uint256,address)", +"cbc066ab": "_transferOrderMoney(uint256,address)", +"cbc12d13": "maxRingSize()", +"cbc1cfd2": "emergency_withdraw()", +"cbc24224": "MuskToken()", +"cbc264f2": "nestedFirstAllToAll(uint256)", +"cbc265ac": "revealSeckey(bytes32)", +"cbc3b73e": "delegateHasValidSignature()", +"cbc3fb0d": "blind_sha256(string,address)", +"cbc44835": "PlateMate()", +"cbc469de": "STRToken()", +"cbc52ee4": "EtherIslands()", +"cbc598c5": "isAmountAllowed(address,uint256)", +"cbc61daf": "mintForMarket(address,uint256)", +"cbc69c8d": "SocialMediaToken()", +"cbc6c267": "ejenfwdToken()", +"cbc7755c": "registerNameXnameFromDapp(address,bytes32,bytes32,bool,uint8)", +"cbc7854e": "setTokens(address,address)", +"cbc846d9": "setBoosters(address)", +"cbc85c97": "getAllCardsClaimContender()", +"cbc8ae5f": "TOKEN_SUPPLY_ICO()", +"cbc9023c": "forceRoll()", +"cbc91e98": "sendTokensAfterBuyExp(address,uint256,uint256)", +"cbc9c89c": "Claim_TRAC_3800()", +"cbca02d3": "trasnferFromOwner(address,uint256)", +"cbca99c7": "updateWLAddress(address)", +"cbcaacab": "checkTransferWithReference(address,uint256,string)", +"cbcabc13": "changeMdtTeamAddress(address)", +"cbcb3171": "tokenReserve()", +"cbcc65eb": "ACL_APP_ID()", +"cbccf9d6": "Simpletoken()", +"cbcd5dfe": "MintableMasterToken()", +"cbcdc2e4": "transferBalanceToOwner(uint256)", +"cbce2fcf": "setAmountBasedBonus(uint256[],uint256[],uint256[])", +"cbce4c97": "gift(address,uint256)", +"cbcf4d25": "icoAccounts(address)", +"cbcf8ece": "setAccountBonus(address,address,uint256)", +"cbcf98e6": "changeSecondaryWallet(address)", +"cbcffd2f": "ShowInfo(uint256,string)", +"cbd076f8": "depositForUser(address,uint256)", +"cbd07fd8": "paidDividends(address,uint32)", +"cbd08c8c": "config(uint256,uint256,uint256,uint256)", +"cbd1b782": "test_claimShare_notTranscoder()", +"cbd21f00": "JBartContract()", +"cbd243b4": "SetWhy(uint32)", +"cbd2ac68": "confirmWhitelistRemoval(bytes32)", +"cbd2bdfd": "getAllAuctions()", +"cbd2c73b": "signUserKeyChange(address)", +"cbd2ecd2": "transferAllowance(address,address,uint256)", +"cbd3b403": "getLuck(address)", +"cbd3faef": "amountOwedForApiForBuyer(uint256,address)", +"cbd49462": "_sender()", +"cbd5131b": "sponsoredBonusAmount()", +"cbd57134": "KTCToken()", +"cbd5bb2b": "setRound(uint8)", +"cbd6cc67": "SendDataToken(uint256,string,uint8,string)", +"cbd85c76": "bytesToBytes4(bytes,uint256)", +"cbd88663": "drawJurors(uint256,uint256)", +"cbd8877e": "stakeMinAge()", +"cbd8e690": "setTokenAmountPerHeritor(address,address,uint256)", +"cbd8ff79": "ContributionToPrizeFund()", +"cbd9597d": "GenChipLevel_Special(uint256,uint256,uint256)", +"cbd9d2e0": "InvalidCaller(address)", +"cbda1d85": "fundingGoalHardCap()", +"cbdb2469": "_getPetBonus1(uint256)", +"cbdb4f72": "GetClientBalance()", +"cbdc5aa4": "tokensTradeable()", +"cbdd3268": "genesisImportsComplete()", +"cbdd69b5": "tokensPerEth()", +"cbde2ff0": "isUnfreezed(uint256)", +"cbdf02fb": "rejectCertificate(address,address)", +"cbdf3878": "goldLevelBonusIsUsed()", +"cbdf8692": "Lockup()", +"cbe0a1aa": "totalEthCharityCollected()", +"cbe0e49a": "presaleGranteesMapKeys(uint256)", +"cbe211ec": "adPriceWeek()", +"cbe230c3": "isAllowedToken(address)", +"cbe239ed": "setIcoPaymentStatus(bool)", +"cbe23b94": "cards_start_total()", +"cbe29f34": "advisorsSupply()", +"cbe2e97e": "setGameStatus(bool)", +"cbe324d8": "_setSuggestedAdPrice(uint256,uint256)", +"cbe335c1": "verifyDocument(bytes32,bytes,uint16)", +"cbe37e25": "BYBToken()", +"cbe3a072": "add(uint32)", +"cbe3be97": "KeplerCoin()", +"cbe40622": "setup(address,address,uint256)", +"cbe432b0": "ico3Tokens()", +"cbe44fa2": "setWhitelisted(address,uint16)", +"cbe5404f": "setAccountFrozen(address,bool)", +"cbe56377": "amendLock(uint256,uint256)", +"cbe566de": "deleteCascade(uint256)", +"cbe7a150": "getCryptoMatch(uint256)", +"cbe7b838": "YunKaiCoin()", +"cbe8047e": "testValidation()", +"cbe8623f": "divUp(uint256,uint256)", +"cbe9ef39": "BasicCoin(uint256,address)", +"cbea4412": "getItemHolders(uint256)", +"cbeb5749": "ShoreCoin(uint256,string,uint8,string)", +"cbebc563": "computeTraitScore(uint256,uint256,uint256)", +"cbec09a7": "bonus01()", +"cbec455f": "continueCrowdsale()", +"cbec72f3": "ownerHasClaimedTokens()", +"cbec78b9": "requestPrice(string,string,int256)", +"cbecb89e": "refferal(uint256,address)", +"cbed1568": "addAdminWhitelist(address)", +"cbedbf5a": "sendMoney()", +"cbeea68c": "permit(address,address,bytes32)", +"cbefe55c": "calcTokenRate()", +"cbf09802": "rateOf(address)", +"cbf0b0c0": "kill(address)", +"cbf0fa2d": "totalWageredForAddress(address)", +"cbf1304d": "balances(address,uint256)", +"cbf1382f": "founderStorageVault()", +"cbf1591d": "setDenyContract(bool)", +"cbf21837": "isSelling()", +"cbf26c0b": "DeviceOwner()", +"cbf2ad23": "confirmedBy()", +"cbf2b203": "Crowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"cbf33562": "addTrustLink(address,bool)", +"cbf346cc": "_sellCrowd(uint256,address)", +"cbf4531d": "dividendsAmount(address)", +"cbf66a02": "withdrawRune()", +"cbf6fff9": "SALE_SUPPLY()", +"cbf7c9a7": "isUserKyc(address)", +"cbf7cc2e": "deployFinished()", +"cbf7f009": "FAPFounder()", +"cbf89ed8": "DividendDeposited(address,uint256,uint256,uint256,uint256)", +"cbf9051c": "setPublisherRewardPool(bytes32,uint256)", +"cbf93c9b": "_claimExploreItemUsingEMont(uint256,uint256)", +"cbf97572": "HipsterFarmer()", +"cbf9a125": "queryChibiAdd(uint256)", +"cbf9b6dd": "getRecorderAddress(uint32)", +"cbfa18ea": "contractRefundFinished()", +"cbfa3c9c": "scaling()", +"cbfba0e1": "withdrawFee(bytes8)", +"cbfc12ba": "Soniq()", +"cbfc4bce": "gift(address)", +"cbfd14a2": "publicSaleSupply()", +"cbfd79e2": "AirdropFan()", +"cbfe6d41": "documentExists(bytes32)", +"cbfebb34": "setETHRate(uint256,uint256)", +"cbff158f": "addPollOption(uint256,bytes)", +"cbff17fa": "_setMinted(uint256,address)", +"cbff2cfc": "_getValueEther(uint256,uint256)", +"cbff69db": "contributionAt(uint256,uint256)", +"cbffb1ae": "updateConflictResolution(address)", +"cc00814d": "setPublicOfferLimit(uint256,uint256)", +"cc00ce12": "set_arbits_sale_open(bool)", +"cc01e39f": "availableAmountToCollect(uint256)", +"cc0238be": "getsumdata2(bytes32)", +"cc027cc9": "register(address,uint256,address,address)", +"cc02d73f": "setColorContract(address)", +"cc03477d": "nMsgsWaiting()", +"cc03c342": "setPlatformAddress(address)", +"cc05d836": "executeOrder(bool,address[3],uint256[4],uint256,uint8,bytes32,bytes32)", +"cc062b58": "enableSelling()", +"cc06c359": "maxLevel()", +"cc06f5ea": "getPeriodReceivedBalanceFor(uint256,address)", +"cc071051": "purchaseWolk()", +"cc075fa7": "stopTeamTrade()", +"cc07a94d": "_createMobster(string,address,uint256,uint256)", +"cc07dc37": "userReferralsWei(address,address)", +"cc08ebf6": "CryptoSportZ()", +"cc09c6b3": "OXO(uint256,string,string)", +"cc0a26d1": "CurrentMined()", +"cc0b2c9f": "tokenToOwner(uint256)", +"cc0b5a5f": "cancel(uint256,address,address)", +"cc0b94b7": "getChannelStatus(bytes32)", +"cc0b9dff": "addExitToQueue(uint256,address,address,uint256,uint256)", +"cc0bb8e5": "proof_of_public_key2()", +"cc0d0c90": "BlueTitaniumClassic()", +"cc0e13e2": "enableMaintenance()", +"cc0e1f66": "startOver()", +"cc0e24e1": "CheckDOT(bytes32)", +"cc0e97c9": "logicContract()", +"cc0f1786": "feeDecimals()", +"cc0f65f7": "GetMinerData(address)", +"cc10145f": "ownerWithdrawRune()", +"cc1027ea": "_validateReferrer(address)", +"cc105441": "MMOcoin()", +"cc10d53d": "IsPatient(address)", +"cc10e401": "create(string,bool)", +"cc11298e": "getRewards(uint256,uint256)", +"cc121ac1": "unsoldTokensVault()", +"cc129f4d": "radd(uint128,uint128)", +"cc130482": "SUNX()", +"cc131be1": "CreateNewDraw(uint256)", +"cc135555": "currentGene()", +"cc1423bf": "releaseBubToken()", +"cc143ce9": "NewXRateProvider(address,uint16,address)", +"cc147334": "payAllRewards()", +"cc148bf4": "awardBalanceOf(address,uint8)", +"cc14a7a3": "paidAddress()", +"cc151c82": "tokensToSellOnce()", +"cc15bee7": "isPurchasingPaused()", +"cc15c26c": "buyTokensReserve()", +"cc15d080": "getEmployeeInformation(uint256)", +"cc1602df": "lotteryCore()", +"cc16e6e1": "TOTAL_RESERVE_FUND()", +"cc16f5db": "Burn(address,uint256)", +"cc17aa28": "numAdoptedAxies(address,uint8,bool)", +"cc181ca8": "king()", +"cc189d00": "Vault(address,uint256)", +"cc198380": "totalSoldSlogns()", +"cc1b63d5": "setStakeStartTime(uint256)", +"cc1b8de6": "freedWosPoolToTeam()", +"cc1bc747": "deallocate(address,address)", +"cc1c0937": "NeuralToken()", +"cc1d050d": "startBlockProfit()", +"cc1d1e18": "_getCurrentTokenPrice()", +"cc1d4c02": "certified(address)", +"cc1ef080": "startPreSTOSale()", +"cc204cc2": "amountsWithdrew(address)", +"cc20d075": "getChannelId(address,address,uint8)", +"cc212a48": "disburseFunds(uint256)", +"cc21a9a2": "_weekFor(uint256)", +"cc21e972": "US_INSTITUTIONAL()", +"cc234ee1": "setICORunning(bool)", +"cc23a690": "releaseValue2()", +"cc23b75b": "HARD_CAP_IN_TOKEN()", +"cc242f40": "CardsRead()", +"cc24f571": "releaseTenPercent()", +"cc255b38": "testBazMethodId()", +"cc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", +"cc268393": "setDescendant(address)", +"cc2761a4": "test_me(int256)", +"cc27f97b": "LSYP()", +"cc289fa9": "getPartnerAddressStatus(address)", +"cc293aea": "setRenewalsCreditAffiliatesFor(uint256)", +"cc2942da": "SetAElfCommunityMultisig(address,address)", +"cc29a0e6": "transferTTProduction(address,address,uint256)", +"cc2a9192": "LogWinnerPaid(address)", +"cc2aa2c7": "NAMINORI()", +"cc2b20ff": "refferBonusFunction(uint256)", +"cc2c2058": "addSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", +"cc2c2bcf": "MotionFactory(string,string,string)", +"cc2c5453": "add_sword(uint16)", +"cc2dcd7e": "removeSideService(address,uint256)", +"cc2e08ea": "getRecTransactionData(uint256)", +"cc2e15cc": "getSponsorableJobs(address)", +"cc2eacb1": "setReferralPercent(uint16)", +"cc2f5029": "updateNoteMetadata(uint64,uint16)", +"cc2f5186": "Balances(address,address,address)", +"cc2fd120": "unofficialUserSignUp(string)", +"cc304924": "DocumentAdded(uint256,string,uint256)", +"cc305ae6": "userAssignElement(uint256,uint256,address)", +"cc308a54": "whitelistStartBlock()", +"cc30eeb1": "isEligibleForRepayment(uint64)", +"cc3154f8": "attendeesList()", +"cc326e1c": "currentPhaseRate()", +"cc328f2f": "b531647b()", +"cc32f8ad": "transferMoneyForTaskSolutions(string,uint256)", +"cc33ad3d": "DSP(uint256,string,string)", +"cc33c875": "tokenInfo(uint256)", +"cc341430": "coordinatorAgreeForEmission(address)", +"cc342eba": "RoseToken()", +"cc3451d6": "MultiverseToken()", +"cc3471af": "maxClaimBlock()", +"cc348429": "Ethmall(address,address,address,uint256,uint256,uint256)", +"cc34a247": "icoEndTimestampStage1()", +"cc34f810": "AllstocksToken()", +"cc361cc4": "getTotalBonusPerShare()", +"cc364f48": "getRange(uint256)", +"cc36809f": "fee_msg()", +"cc36a328": "team0Query()", +"cc36f8eb": "ArtCoin()", +"cc373d79": "withdrawCommissions(uint256)", +"cc38639f": "newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", +"cc38c8a0": "insuranceAccount()", +"cc3938f9": "chkLockedA(address,uint256)", +"cc397ed3": "getCurrentFor(address)", +"cc3a0c8d": "customerExchangeEther(uint256,address,string)", +"cc3ad9a1": "unPackParams(uint256)", +"cc3b8806": "getCertificateMetaDataCount(bytes32,bytes32,bytes32)", +"cc3bb31a": "crowdsaleStart()", +"cc3bde3d": "TOTAL_SUPPLY_LIMIT()", +"cc3bf9e9": "redeem(bytes32,address)", +"cc3c2c01": "getValidityBondFloor()", +"cc3c59cc": "Paymec()", +"cc3c7098": "createTokenToMarket2021()", +"cc3c74a1": "proposalNonce()", +"cc3ccf57": "previous_owner()", +"cc3d2721": "minWithdraw()", +"cc3d574b": "ElectedBoardController(address,address[],uint256,address)", +"cc3d967b": "getUserDetails(address)", +"cc3df01f": "issueToken(uint256)", +"cc3e378e": "hasEnoughFundsToStart()", +"cc3eacbb": "getOraclizeFee()", +"cc3efd6b": "PUKCoin()", +"cc3f44bf": "getGoldStatusMinted(address)", +"cc3f51d0": "hitPotProcess(string,bool,uint256)", +"cc3fa0fd": "NobleAssetsCoin(uint256,string,string)", +"cc3fdd4c": "buyFeePercent()", +"cc41a396": "rateStage3()", +"cc41d3b2": "refundPreIco()", +"cc422cc2": "coeRemainingAtCurrentRate()", +"cc423c28": "setSchellingExpansion(uint256,uint256)", +"cc42e83a": "withdrawWinnings()", +"cc436196": "initialFundsReleaseDenominator()", +"cc436e42": "memberIsActive(uint8)", +"cc442c3f": "ICO_PRICE4()", +"cc445611": "purchase(bytes32)", +"cc44b15b": "setCode(address,bytes32,uint256)", +"cc44fd2b": "changeManagement(address)", +"cc451581": "getCurrentBigPromoBonus()", +"cc4580c8": "getBetsLength()", +"cc459696": "contentCount()", +"cc466256": "_roll(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"cc4720c7": "calculateRewardTokens(uint256,uint8)", +"cc47a40b": "reserve(address,uint256)", +"cc47de73": "ExpandT()", +"cc490e64": "getSplitCount()", +"cc494291": "setJobController(address)", +"cc4999ea": "getTradingInfo(uint256)", +"cc49ede7": "getVesting(address)", +"cc4aa005": "getDestroySharesOwnerValue()", +"cc4aa204": "ERC20()", +"cc4b998a": "titleIds()", +"cc4bf6a3": "miningTen()", +"cc4c1c05": "SwytchToken()", +"cc4cc05f": "collectToken()", +"cc4d233c": "Reclaimed()", +"cc4d819c": "tokensPurchased()", +"cc4d96df": "_refreshVoteForVoter(uint256)", +"cc4da8f4": "EventWinReward(address,uint256)", +"cc4e0008": "Ticket(address)", +"cc4fa81b": "exchangeCalculator(uint256,uint256,uint256)", +"cc4fbc43": "acceptTokenPayment(address,uint256,address,uint256)", +"cc5061da": "voteForUser(uint16,address)", +"cc50dacb": "buyCar(uint32)", +"cc50fc28": "mintInternal(int256,address,uint256)", +"cc537821": "buyNextRank()", +"cc539eb1": "replaceAccount(address,address)", +"cc552c8e": "setHardCapUSD(uint256)", +"cc5530eb": "endPreSaleStage()", +"cc577f38": "addPresaleAmount(address,uint256)", +"cc57e4f8": "increasePregnantCounter()", +"cc58bcf8": "getCurrentLevel(uint256,uint256,uint256)", +"cc5a02cb": "withdraw(address,uint8)", +"cc5a7051": "_setMinDailyPerUser(uint256)", +"cc5a7804": "payoutTokens(address,uint256,uint256)", +"cc5aba27": "ConstructorTest(uint256,uint256,string,string)", +"cc5b13a0": "PAYOUT_DELAY_INTERVAL()", +"cc5b2292": "DepositForDividends(uint256)", +"cc5b542e": "toBeDistributed()", +"cc5c095c": "mintableSupply()", +"cc5c4224": "setFreezingManager(address)", +"cc5c4a6b": "attachPresale(address,address)", +"cc5cab33": "userRewarders(address,uint32)", +"cc5cee0a": "calculateEthereumReceived(uint256,uint256)", +"cc5f0240": "batchCancelVoteForCandidate(address[],uint256[])", +"cc5f09fb": "getNbCitizensLocation(string)", +"cc5fc0d7": "updateInvestBalance()", +"cc603ed5": "collectRate(address)", +"cc61d0cb": "changeMinWithdraw(uint256)", +"cc620704": "joinToTrack(bytes32)", +"cc6266a1": "getHashFromData(bytes32,bytes32)", +"cc6305ed": "getNumTicketsPurchased(uint256,address,address)", +"cc634dac": "get_kek()", +"cc63604a": "canExecute(uint256)", +"cc638e03": "rublaJEPoken()", +"cc63996e": "getHairValue(uint256)", +"cc63a3c9": "set_token(address)", +"cc642cc2": "numHolders()", +"cc64cfcb": "getDeployedMarriages()", +"cc64e2d5": "depositEthers(address)", +"cc657697": "GetMatchLength()", +"cc657e62": "sendToken(uint256,uint256)", +"cc668524": "verifyPosition(uint8,uint64,uint64,uint64)", +"cc66d3c7": "buyEngineer(uint256[8])", +"cc66ec47": "TerraformReserve(address)", +"cc677679": "setEMAPeriods(uint256)", +"cc679ffc": "TUPC()", +"cc67b1bf": "getTransferPerc()", +"cc69084f": "PHASE_CLOSED()", +"cc691763": "draw(uint32,uint8,bytes32)", +"cc6c010d": "ATMGold(uint256,string,uint8,string)", +"cc6c8e31": "NFXCoinToken()", +"cc6ca7b7": "specialBaseLayer(uint256)", +"cc6cf340": "BERTCLUBCOIN()", +"cc6d7850": "burnILF(address,uint256)", +"cc6d8ba6": "inheritInvestorPosition(uint256)", +"cc6da375": "recipientVIP(address)", +"cc6db55f": "setJackpotModulo(uint256)", +"cc6e15e5": "setDelayedTokenAllocator(address)", +"cc6e6f25": "Withdraw_5()", +"cc6e70e8": "MSTCOIN()", +"cc6e8593": "lawSupportProfitAddress()", +"cc6ec39a": "switchToGame(string)", +"cc6eced7": "priceOfTeam(uint256)", +"cc6f0ed0": "BirthdayCandy()", +"cc70993d": "earlyTimeLock()", +"cc70bb1a": "publish(string,string,string,address)", +"cc70decb": "showBonus(address)", +"cc7188a5": "unLinkFromMasterWallet(address)", +"cc724b27": "isTesting()", +"cc72c918": "queryOwnerAddr()", +"cc72ecb0": "purchaseStartBlock()", +"cc741c9c": "getDidClaimBooty(address,uint256)", +"cc743a86": "ICO_PROMO_REWARDS()", +"cc74e2ca": "min_refund_block()", +"cc750395": "setMonthOpen(uint256,uint256,uint8,uint256,uint256)", +"cc754a28": "ICOStartTimeChanged(uint256)", +"cc755b70": "releaseFrozenBalance()", +"cc759458": "unconfirm(address)", +"cc759f88": "removeBools(bytes32[])", +"cc75ac19": "_withdrawAffVault(uint256)", +"cc75c4b1": "abc(uint256)", +"cc75cc9b": "SendmoneyCall(uint256)", +"cc764986": "updateEmaDailyYield(uint256)", +"cc774681": "mapCompletionNumberForWithdraw(address)", +"cc77b82d": "BEEFYToken()", +"cc783c5e": "setBankrollerContractOnce(address)", +"cc78cc98": "multisigPreICO()", +"cc7949ae": "round_count()", +"cc797d8e": "setMaxAttackPrizePercent(uint256)", +"cc798890": "queryAccounts()", +"cc79aa04": "getProposal(bytes32,bytes32)", +"cc79eaf0": "getColors(uint32)", +"cc7a060f": "ethersCollecteds()", +"cc7a2049": "permissionManager()", +"cc7b2ee7": "initAirdropAndEarlyAlloc()", +"cc7b41ec": "changeRollUnder(uint256)", +"cc7b60fe": "_emitWorkFinished(uint256,uint256)", +"cc7c4c39": "gotWinner()", +"cc7cd9f8": "fundingEthGoal()", +"cc7cddb8": "dive3(address)", +"cc7d1a0f": "currentHighestBid()", +"cc7e1b9a": "setRedemptionAddress(address)", +"cc7e2208": "Order()", +"cc7e492e": "refillInstantMintPool()", +"cc7e930c": "commitmentsOf(address,address)", +"cc7f365c": "VLADALINA()", +"cc7f593c": "setRequiredMajority(uint256)", +"cc7f608d": "setSaleType(uint8,uint8,uint32,uint256,uint256)", +"cc7f8266": "read_i8_array()", +"cc7fa928": "nbMonthsPay()", +"cc7fe38c": "addPresaleInvestor(address,uint256,uint256)", +"cc80f6f3": "show()", +"cc80f9e8": "ownerOfID(uint256)", +"cc81dbb5": "DEFROST_FACTOR_TEAMANDADV()", +"cc822f54": "changeYDistAddress(address)", +"cc826160": "ownershipDistributed()", +"cc82e72e": "SetPlatformInformation(string)", +"cc833e69": "Cryptonationz(string,string,uint8,address,address,address,address,address)", +"cc851cac": "SecuritiesVaultBank()", +"cc863948": "withdrawTokenShare()", +"cc86566c": "tempMngr()", +"cc8658b3": "chkStaff(address,address)", +"cc865b71": "withdrawRoundController(uint256,address)", +"cc872b66": "issue(uint256)", +"cc876ded": "born(uint256,uint256)", +"cc87ed82": "checkNumCards(uint256,uint8,uint8,bytes32,bytes32)", +"cc8818f6": "setReservefund(uint256)", +"cc88be52": "NuoBaoChainToken(uint256,string,uint8,string)", +"cc891023": "depositLock(address)", +"cc893855": "calculateTotalPayment(uint64)", +"cc896494": "_setGameOver()", +"cc89698c": "getTopicCount()", +"cc897e40": "END_SKO1_UNITS()", +"cc89d596": "getCryptantFragments(address)", +"cc89e8bc": "ecosystemTokens()", +"cc8a86a0": "Y2_release()", +"cc8af0fe": "bytesToUInt(bytes,bytes)", +"cc8b34ab": "CrowdCoin()", +"cc8b96e5": "prepare(uint256,address,address)", +"cc8baf63": "m_tokenDistributor()", +"cc8bd060": "setUnitsOneEthCanBuy(uint256)", +"cc8c0f9f": "transferLocked(address,uint256,uint8)", +"cc8c3c45": "getTokenIdsLength()", +"cc8c49aa": "sc(uint256,uint256,uint256,uint256,uint256)", +"cc8cd5c5": "withdrawDragonsFilm()", +"cc8ce27e": "CryptoChamps()", +"cc8ce862": "allowedGasPrice()", +"cc8e4bc2": "LOCKAMOUNT3()", +"cc8eac6c": "isSTOAttached()", +"cc8eb425": "newuser(address,address)", +"cc8f0b48": "withdraw(bytes32,address,uint8,bytes32,bytes32)", +"cc90050e": "GetCurrentRoomAndRound(address)", +"cc9062f9": "finalizeTransferChildrenOwnership()", +"cc90da29": "bonusNum()", +"cc90e725": "addProject(string,address)", +"cc91e91c": "Freezable()", +"cc925957": "logAccess(string,string,uint256)", +"cc92bad4": "updateParkingRate(uint256)", +"cc92ebad": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"cc937ccd": "Doves()", +"cc93ee70": "forwardCoins(uint256)", +"cc93f66e": "endTournament(uint256,uint256)", +"cc9415d0": "commitOn(uint256)", +"cc9425b7": "OCTACryptoToken()", +"cc949797": "balanceAffiliateOf(address)", +"cc94d923": "createTransaction(address,uint256,bytes32,address,address,address)", +"cc94e4a2": "set_sale_address(address,address)", +"cc954820": "changeFallbackDeposit(uint256)", +"cc95d8d1": "s36(bytes1)", +"cc96019f": "referralTokenWallet()", +"cc96b943": "offerOptionsToEmployee(address,uint32,uint32,uint32,bool)", +"cc976620": "usdPerEthCoinmarketcapRate()", +"cc97b38f": "BANCOR_X_UPGRADER()", +"cc97edbf": "bmi()", +"cc98c893": "developer_Transfer_ownership(address)", +"cc98ff20": "purchaseVillage(uint256)", +"cc991d8a": "BTestToken(uint256,string,uint8,string)", +"cc996d1b": "bids()", +"cc9a31a7": "isRepresentor(address)", +"cc9a88c9": "canSend(uint32,uint32,int256)", +"cc9ab267": "voteForCandidate(bytes32)", +"cc9ac376": "addLock(address,uint256,uint256)", +"cc9ae3f6": "getMyReward()", +"cc9b31c9": "exchangeFeeIncurred(uint256)", +"cc9b714c": "ClearAuth(address)", +"cc9b71c2": "TaskCoin()", +"cc9b7826": "setGuaranteedAddress(address,uint256)", +"cc9ba6b2": "buyRef()", +"cc9c0936": "startedWorkTS()", +"cc9c437c": "get_orderAddress(address,uint256,uint256,uint256,uint256)", +"cc9d7519": "getTierInfo(uint256)", +"cc9d858d": "FundsRegistryTestHelper(address[],uint256,address)", +"cc9de25d": "bytesToUint256(bytes)", +"cc9e735f": "decrementDate()", +"cc9f28ea": "getDeletedTeams()", +"cc9fd9d9": "onSetCredit(address,uint256)", +"cca07f44": "setSpecialLimits(address,uint256,uint256)", +"cca08d55": "updatesolsforhire()", +"cca0feb6": "updateTax(uint256)", +"cca10ba5": "getMultiSigBalance()", +"cca213a1": "setTranchTime(uint256[])", +"cca2194c": "getInvestorContribution(address)", +"cca26917": "getRoundBalance(address,address,uint256)", +"cca3e832": "_balanceOf(address)", +"cca40111": "_recharge(address,uint256)", +"cca41651": "addressPrivateSale()", +"cca470d2": "roundInvestorInfoByAddress(uint32,uint32,address)", +"cca4f3c5": "winthdraw(address,address,uint256)", +"cca5020b": "totalLBSold_PRIVATE()", +"cca520ee": "transferFromMoreThanAllowedTest(address)", +"cca5dcb6": "isTransferEnabled()", +"cca63f4f": "buyXname(uint256,uint256,string)", +"cca6ae0b": "getGPSMinEth()", +"cca746df": "getAnnualFee()", +"cca78d53": "getActiveListLength()", +"cca794da": "setGzeBonusOnList(uint256)", +"cca91579": "PlaceHolder(address)", +"cca97025": "_performTransferFromWithReference(address,address,uint256,string,address)", +"cca9943c": "wei25()", +"ccaa5135": "LIFECOIN()", +"ccaa5c65": "LomeliToken()", +"ccaab1ca": "companyPercent()", +"ccaaef45": "purchaseCompanyAdv(uint256,string,string)", +"ccab1be7": "SubmissionAccepted(address)", +"ccab841b": "divf(int256,int256,uint256)", +"ccabcfca": "XMLYBadge()", +"ccac77f5": "GooLaunchPromotion()", +"ccad19e4": "sendEtherFromAddContract(address)", +"ccadd6b1": "bet1Of(uint256)", +"ccadef15": "_setOCPTokenContract(address)", +"ccae794a": "showFPCount()", +"ccaee929": "JihoyContract()", +"ccaf4b03": "setIreg(uint256)", +"ccb00344": "changeEtsAddress(address)", +"ccb07cef": "crowdsaleClosed()", +"ccb0893d": "isUIntPrivate()", +"ccb13cbd": "_acceptAnchorAdmin()", +"ccb1c0a1": "getQuestion(string)", +"ccb1cbbc": "testFailBurnNoAuth()", +"ccb20e8e": "StormBrewCoin()", +"ccb22e37": "description3()", +"ccb2e9a4": "insertAccount(bytes32,string,uint256,string,string)", +"ccb3449e": "NewPresaleAllocation(address,uint256)", +"ccb50a29": "SIGMA_MAX_CARGO()", +"ccb53365": "startICOPhase()", +"ccb570e3": "transfer(uint256,address,address)", +"ccb60e39": "rentOutMultiple(address,uint256,uint256[])", +"ccb61dad": "MICRO_DOLLARS_PER_BNTY_MAINSALE()", +"ccb64997": "isBCDCToken()", +"ccb6cbe8": "icoBottomIntegerPrice()", +"ccb767ae": "transferTo(address,uint32)", +"ccb783a9": "setGPSStartTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"ccb98ffc": "setEndTime(uint256)", +"ccbac9f5": "randomNumber()", +"ccbae5f6": "createEscrow(address,address,uint256,uint256)", +"ccbb41d0": "TOC()", +"ccbb52f5": "getGroupRates(uint256)", +"ccbba441": "setMigrateStage()", +"ccbd5152": "bankrollBeneficiaryAmount()", +"ccbd8d25": "setDropAmount(uint256)", +"ccbd8d29": "tokenAvatar()", +"ccbda1af": "getChannelByName(string)", +"ccbde432": "delete_candidate(uint8)", +"ccbe2a68": "kill(uint8[176],uint8)", +"ccbe4968": "Withdawal(address,uint256)", +"ccbfc6ed": "revokeSignature(bytes)", +"ccc08913": "Restricted()", +"ccc08974": "setGameActive(bool)", +"ccc108d7": "reopen()", +"ccc11f11": "hasAssetRights(address,bytes32)", +"ccc13814": "max(int256[])", +"ccc39b5d": "DonationClaimed(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"ccc51afb": "lookupFillingRing(address,uint256)", +"ccc54d69": "LOCKUP_3M_ICO_TIMESTAMP()", +"ccc55189": "Nation(address,address)", +"ccc5d05f": "testNoTokensNoCalls()", +"ccc61bef": "REWARD_WIN_MULTIPLE_PER()", +"ccc62bbe": "assertEq2(bytes2,bytes2,bytes32)", +"ccc643d7": "updateSaleTime(uint256,uint256)", +"ccc6ddf3": "createPromoPow(address,string,uint256,uint256,uint256,uint256)", +"ccc72302": "AUDITED_AND_REJECTED()", +"ccc8b33c": "buyXnameQR(address)", +"ccc924ef": "TokensUndelegated(address,uint256,address)", +"ccc9735d": "ERCSpammer(uint256,uint256,string,string)", +"ccc98790": "w(uint256)", +"ccca123b": "waitTime()", +"ccca237c": "foundationAsset()", +"cccb987f": "withdrawTwice()", +"cccc020f": "changeInsuranceFeesOperation()", +"cccc8f91": "getDappId()", +"ccccc36b": "createAcceptAndAdditionalsFromBytes(bytes,bytes,bytes,uint256[])", +"cccd2ea8": "getProductData(address)", +"ccce413b": "symbols(uint256)", +"ccce6458": "createKingdom(string,string,uint256,bool)", +"ccceee48": "lastBlock_v1Hash_uint256()", +"cccf3a94": "gasForCLOUD()", +"cccf7a8e": "has(uint256)", +"cccf88f9": "batch_refund_bix(address[],address,uint256[])", +"ccd15921": "addTransferAndCallWhitelist(address)", +"ccd1a621": "addguess(uint256)", +"ccd30a62": "getWhitelistedAddresses(uint256)", +"ccd331bf": "bountyAmount()", +"ccd385f5": "staff_3()", +"ccd3948b": "removeRestaurant(address)", +"ccd39537": "dilute(address,uint256)", +"ccd4020c": "PassTokenReborn(address)", +"ccd46ae4": "BuyTicketUseVault(uint256,uint256)", +"ccd65296": "initialize(uint256,uint256,uint256,uint256,address)", +"ccd6559b": "newRandom(string)", +"ccd65c0a": "activateMainSale()", +"ccd68f3b": "stamps(uint256)", +"ccd6aca4": "preSaleSecondCap()", +"ccd71e8c": "armySubmarinesCount(uint256)", +"ccd75361": "setFooInt(uint256)", +"ccd89ecd": "calculateManyHash(address,address[],uint256[],uint256,uint256)", +"ccd8ad0c": "setGenTime(uint256)", +"ccd8c186": "DebitCoinTokenGenesis(address)", +"ccd8e2cf": "AnmiToken()", +"ccd8ead7": "addToCategorie2(address,address)", +"ccd93998": "getRequiredSignatures()", +"ccd95a50": "sendTokenToMultiAddr(address[],uint256[])", +"ccd96ab0": "cite(bytes32,string)", +"ccd9aa68": "passedKYC(address)", +"ccd9d08f": "MLIOU()", +"ccda4b99": "getMethodValue(string)", +"ccda696b": "ownersTransfer(address,uint256)", +"ccdaeab0": "getTechBonus3(uint256)", +"ccdb05d4": "NokuCustomERC20(string,string,uint8,address,address)", +"ccdb3f45": "newAddress()", +"ccdbbff5": "securityTokensWallet()", +"ccdc535e": "placeBetV1(uint256,uint256,uint256)", +"ccdd1979": "multisend(address,address[],uint256)", +"ccdd49f2": "StyToken(address,address)", +"ccdd95d6": "releaseEnjinTeamTokens()", +"ccdf68f3": "isOutcomeSet()", +"ccdfcfa4": "returnFundsForAll()", +"cce0244d": "setSafeContract(address,bool)", +"cce0a1ca": "isPresaleSetup()", +"cce0c0fa": "addOneGame(string,uint256)", +"cce0cd0c": "blockVersion()", +"cce106f8": "AmountToLittle()", +"cce1dfd2": "minimum_token_sell()", +"cce21eda": "DividendsWithdrawal(uint256,address,uint256,uint256,uint256,uint256)", +"cce2270a": "isSecondStageFinalized()", +"cce2771e": "redeemUTXO(bytes32,uint8,uint256,bytes,bytes,bool,uint8,bytes32,bytes32)", +"cce29ea7": "preSaleEndTime()", +"cce2f8e3": "checkAddressMisused(address)", +"cce356b5": "getHodlers()", +"cce3906b": "hasWithdrawnRake()", +"cce3c13b": "isLeaf(uint256)", +"cce48e65": "GeeTestCoin()", +"cce4bd52": "reclaimFunds()", +"cce7db58": "swipe(address)", +"cce7ec13": "buy(address,uint256)", +"cce81927": "EtherDice(address,address)", +"cce91957": "take(bytes)", +"cce93ae1": "PeriodChanged(uint256,uint256)", +"cceb6368": "receiveTicket(address)", +"cceb9214": "setAuctionStatus(bytes32,uint8)", +"ccebca11": "Foo(address,bytes32,address)", +"ccec1461": "bulkEtherSender(address[],uint256[])", +"ccecc71f": "getPlayerPoints(bytes32)", +"cced2bb6": "LogOwnerRemoved(address)", +"cced9b63": "setBestMatch(uint256,uint256,address)", +"cceda56c": "CAPPED_SUPPLY()", +"ccedf3d2": "getChainCode(string)", +"ccee31e8": "setNbKingdomsType(uint256,address,bool)", +"ccee8047": "settleCall(uint256,uint256,address)", +"ccef6d63": "_isClientPaidUp(address)", +"ccf053ba": "TOTAL_TOKEN_SUPPLY()", +"ccf06abf": "canCompose(string,uint256[],address)", +"ccf0768a": "transferDividends(address)", +"ccf12304": "set_mint(uint256)", +"ccf1454a": "addressOf(string)", +"ccf1ab9b": "usurpation()", +"ccf1e80b": "JUNE()", +"ccf20872": "ChainKey(uint256,string,string)", +"ccf24838": "updateOwner(uint256,address,address)", +"ccf27a4e": "setPrice2(uint256)", +"ccf2b87b": "sendWithFreeze(address,address,uint256,uint256)", +"ccf41499": "TokenFactory(uint256,string,uint8,string)", +"ccf4a941": "getVendorApplication(string)", +"ccf4b70a": "RATE1()", +"ccf4f413": "setSubRegistrar(string,address)", +"ccf53a84": "getFile(uint8)", +"ccf5401e": "checkQuest(address)", +"ccf5c5cf": "registerConsumer(address,uint32)", +"ccf64316": "playerRollDiceSingle(uint256)", +"ccf670f8": "setLevelUpFee(uint256)", +"ccf69e9b": "randomContract()", +"ccf6b8b3": "CCCoinToken(string,string,uint256,uint256,address,address,address,address,uint256)", +"ccf7ba0f": "recoverPrice(address,address)", +"ccf7d0d4": "sendTokensAfterCrowdsale()", +"ccf7fe56": "JustinCoin()", +"ccf82afd": "WataexToken()", +"ccf8bcf3": "transferOVISBookedTokens()", +"ccf8e5d0": "CLITOKEN()", +"ccf8ef24": "undelegateVote()", +"ccf9f35f": "awardsCount()", +"ccfa8e71": "addBank(string,address,string)", +"ccfaa72f": "setRentalPricePerHour(uint256)", +"ccfbdb9e": "CrowdSaleDapCar()", +"ccfc0053": "withdrawMILs(uint256)", +"ccfc1e4e": "preSaleWeiCap()", +"ccfc811b": "registerParticipant()", +"ccfc8729": "registerWithToken(address,uint256,address)", +"ccfc9556": "USDChain(uint256,string,uint8,string)", +"ccfcbdbe": "canMakerTerminate(bytes32)", +"ccfdca9a": "setMinPaymentAmount(uint256)", +"ccfe4691": "CtfToken()", +"ccfed305": "CMDToken()", +"ccff361f": "AibitbankToken()", +"ccff42b2": "isValidAdapter(address)", +"cd008f1a": "getMine()", +"cd00ee0d": "startToken()", +"cd027be5": "getAllowAmount(address)", +"cd034234": "refundRequest()", +"cd0389fd": "metadataToken()", +"cd03b093": "getSupportersForTopic(string)", +"cd041ae9": "removeCooldown()", +"cd048de6": "setWord(string)", +"cd04ccfc": "newProposalEthUSDOracle()", +"cd05c214": "TOKEN_FOURTH_PRICE_RATE()", +"cd05d1eb": "shopPants()", +"cd062734": "getCallABISignature(bytes32)", +"cd0643ee": "takeInvestments()", +"cd066fd6": "computeInitialPrice(uint256)", +"cd0699e9": "OysterPrePearl()", +"cd06a7bf": "rewardsupply()", +"cd076620": "mint(address,uint256,int16,int16,int16,int16,int16,int16,uint256)", +"cd0845fd": "bool2str(bool)", +"cd09039b": "PayForFlag(string)", +"cd09263f": "rate_toCap()", +"cd0a314b": "walletBalance()", +"cd0c5896": "etherBalance(address)", +"cd0c870d": "XAP()", +"cd0e761d": "getCurrentContextAddress()", +"cd0e8900": "DEFACTO()", +"cd0ee59b": "_payByErc20(uint256)", +"cd0f26c6": "setRedemptionContract(address,address)", +"cd0f5abd": "DTCC()", +"cd0fdc24": "getPaintingArtistId(uint256)", +"cd0ffdba": "NukTestToken()", +"cd103b4d": "RateToken(uint256)", +"cd11731d": "setPlayerBookAddress(address)", +"cd11c85d": "timeTillNextAttack()", +"cd12efc8": "getsecond(uint256[])", +"cd132aad": "addPrivateSale(uint256)", +"cd133c8f": "buyXid(uint256)", +"cd13592a": "claimTokensByUser()", +"cd13c6f8": "wildlifeconservationToken()", +"cd152c0a": "getPreAuthorizedAmount(address)", +"cd154c59": "mainSaleExchangeRate()", +"cd15c6ab": "MANACrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"cd15fc71": "ContractFeatures()", +"cd16ecbf": "setNum(uint256)", +"cd17c4b6": "numOfTokens()", +"cd180fdc": "transferTokensFromAdvisorsAddress(address,uint256)", +"cd1814d7": "selfDestroyTime()", +"cd187043": "_price_token_ICO1()", +"cd18c168": "TakeEth(address,uint256)", +"cd18d5a4": "airDrop(address)", +"cd197ff6": "fechVoteInfoForVoter(address)", +"cd1a4e4d": "setHyperDisbursementAddress(address)", +"cd1a5cad": "PricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", +"cd1a8ad7": "EGGS_TO_HATCH_1SNAKE()", +"cd1b9311": "challenge(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"cd1ce6d5": "setAdvisorFee(uint256)", +"cd1dc527": "isTokenAddressAlreadyInList(address)", +"cd1e0355": "totalRefundedAmount()", +"cd1e0717": "getRequester()", +"cd1e484b": "reserveStarsForOwner(uint256)", +"cd1f63dc": "getMinBuy(uint256,uint256)", +"cd1f8393": "logsCount()", +"cd1f9a57": "totalContractHolders()", +"cd1fca94": "BETNetworkTeamAddress()", +"cd1fdc14": "_claimReward20(address,string)", +"cd2057d0": "fail(bytes)", +"cd20b24b": "saosao5()", +"cd22ccea": "GameRoll(address,uint256,uint8,uint8,uint256)", +"cd22f418": "_getAllRevisionTimestamps(bytes32)", +"cd22f536": "addProductByRegulator(string,uint256,string,string,string,string)", +"cd230ebd": "tokensClaimableAfter()", +"cd233e25": "oraclize_gaslimit()", +"cd23dde0": "create(string,uint256,uint256,address,uint256,uint16,uint8,uint256[3],bool)", +"cd257213": "RemoveTickets(uint256)", +"cd25f56e": "OptionExercise(address,uint256)", +"cd26e1a8": "SECURITY_ETHER_CAP()", +"cd271488": "newSaleProjects(string,string,string,uint256)", +"cd277e6c": "addSolution(bytes32,address,uint32)", +"cd27d1a0": "setMaxRaiseAmount(uint256)", +"cd27f1d9": "cappedTokenSupply()", +"cd29c71a": "metadataUrl()", +"cd2a0c29": "purchase_with_eth(uint256,address,uint256,uint256,uint256,address,bytes)", +"cd2a11be": "EnableTrade(bool)", +"cd2a68e5": "withdrawBillionsCoins()", +"cd2a7a61": "broadcastState(bytes)", +"cd2ab49e": "setupBankrollInterface(address)", +"cd2b5a82": "weiToDistribute()", +"cd2cdd5b": "claimOwnershi()", +"cd2cde48": "authorizeIcoBurn()", +"cd2d5291": "walletAdvisor()", +"cd2d8a2d": "historyId()", +"cd2ec3fe": "runAnnualInflation()", +"cd2f0710": "getItemById(uint256)", +"cd2f5f2b": "clearFooArray()", +"cd2f7357": "tokenTransfer(address,uint256,uint256)", +"cd2f7c1a": "Census()", +"cd306137": "initialiseGlobals()", +"cd31037c": "BlockScheduler(address,address,address)", +"cd313ad9": "listOfFunds(uint256)", +"cd31f391": "SixtyPercentRules(address)", +"cd3265a3": "setUpgradeTarget(address)", +"cd327398": "addExceptions(address[])", +"cd3293de": "reserve()", +"cd336707": "reopenContributions()", +"cd342917": "Lesson(address,uint256)", +"cd35c5e9": "Eurotrad()", +"cd3651a7": "setLevelBonusJPYC(uint256,uint256,uint256,uint256)", +"cd367936": "fundICO(address)", +"cd37dcb8": "peCap()", +"cd3882d5": "stage4()", +"cd38aa87": "chooseWinner()", +"cd394a41": "ETH10K()", +"cd395a96": "_transferAndLock(address,address,uint256,uint256)", +"cd3a1dde": "MaxAirDropXblock()", +"cd3a376a": "changeSeller(address)", +"cd3a7531": "loadVotesForParticipantVerify(bytes32,bytes32,uint8)", +"cd3b0309": "CTokenCoin()", +"cd3c3011": "getPublishTime(bytes32)", +"cd3ce306": "redeemEther(bytes32,address)", +"cd3cf20e": "messageWithinLimits(uint256)", +"cd3de8d5": "payToController()", +"cd3e0155": "BucketDestroyed(bytes32,uint256)", +"cd3e45c5": "getTop10Messages()", +"cd3f7a50": "DepositMTU(uint256)", +"cd3fe21d": "getTotalNumberPlayed(uint256,uint256)", +"cd40137f": "resetTimeSeal()", +"cd402189": "list_files()", +"cd402c8e": "payoutSize(address)", +"cd40a48d": "send1Mil(address)", +"cd41ada1": "addressDividendReserve()", +"cd4217c1": "freezeOf(address)", +"cd423c99": "getDistributedOreBalances(address)", +"cd42693d": "victorieumToken()", +"cd43def3": "updateServiceTokensPerCredit(address,uint32,uint256)", +"cd43ebf9": "totalSpankStaked()", +"cd43ee99": "isAffiliateProgram()", +"cd45376c": "sellWine(uint256)", +"cd45e561": "CHSToken()", +"cd45fcdb": "Fxxk2Token()", +"cd46abe4": "ecosystemPercentOfTotal()", +"cd46d7e5": "approveByIndex(uint256)", +"cd474b04": "chainStartBlockNumber()", +"cd47c0e1": "cooRemoveReviewer(address)", +"cd47f390": "rescueLostKydy(uint256,address)", +"cd482d9f": "getLLV_edit_2()", +"cd48578f": "MaxEth()", +"cd495391": "setNonlistedUser(address)", +"cd496e35": "votePositionOf(uint256,uint256)", +"cd497999": "isHardCapGoalReached()", +"cd499523": "userList(address,uint256)", +"cd4aed30": "errorWithMessage()", +"cd4b3c57": "newSubdomain(string,string,address,address)", +"cd4b6914": "getRandom(uint256)", +"cd4c04c6": "Appoint(uint256,address)", +"cd4c4c0c": "getCurrentBucket()", +"cd4d0570": "getbuynode(address)", +"cd4d1664": "EconomyRebated(string,string,string,string,string)", +"cd4d4b46": "BONUS_CAP()", +"cd4d6895": "verifyEIP20(address)", +"cd4e28b5": "setNextBidExpireBlockLength(uint256)", +"cd4e396b": "USER_ACQUISITION()", +"cd4f5e90": "MTToken()", +"cd4fb3be": "newBurnableOpenPayment(address,string,uint256,uint8,uint256)", +"cd501bf7": "SignalsCrowdsale(address,address,address,address)", +"cd503c0b": "claimFees(bytes4)", +"cd504bd8": "getPhasePricesPeriods(uint256)", +"cd50d44f": "CheckRepresentment()", +"cd51bcae": "setBuyRequestLimit(uint256)", +"cd51f084": "owner_freeze_term()", +"cd5286d0": "getAsset(string)", +"cd53a3b7": "makerWithdrawAsset(uint256)", +"cd53ac45": "MANHATTANPROXYFDR()", +"cd53e455": "receivedEther()", +"cd5406e4": "getBalanceAtSnapshot(address)", +"cd54c54e": "setCirculationCap(address,uint256)", +"cd550cc8": "XferMoneyTeamAddress()", +"cd55205b": "KotET()", +"cd559561": "getPeers()", +"cd55cda2": "determineFinalOutcome(uint256)", +"cd56028f": "ArjToken()", +"cd560862": "EZ25COIN()", +"cd5617b6": "STCDR()", +"cd5655da": "setPixelBlock(uint256[],uint256[],uint256[],uint256[])", +"cd565bc5": "determineAffID(uint256,uint256)", +"cd5681d5": "mintRefs(bytes32)", +"cd568d0f": "submit(string,int8,int8,int16,string)", +"cd56f019": "getDefaultClaim(address)", +"cd572a07": "BOF()", +"cd575c32": "mintGem(uint256,string,uint256,bool,uint256)", +"cd576dd0": "IPAC()", +"cd5777e2": "allocateTokensToInvestors(address,uint256)", +"cd57a448": "SwapContract(address,uint256)", +"cd57a650": "BasilNetwork()", +"cd584045": "enableApproval()", +"cd586a50": "OnliCoinToken()", +"cd58a867": "internalAssignTokens(address,uint256,uint256,uint256,uint256)", +"cd58e75b": "newBurnableOpenPayment(address,uint256,uint8,uint256,string)", +"cd591822": "CanaryV7Fast()", +"cd59bf5b": "getNowFromOwner()", +"cd5a489d": "killContract(bool)", +"cd5a57cb": "registerOpinion(uint256,string)", +"cd5a9bf3": "isCurrentOrPastAccountMinter(address)", +"cd5ab612": "buyEmptyPixelArea(uint256,uint256,uint256,uint256)", +"cd5acd4d": "setKey(bytes32,bytes32,bytes)", +"cd5b4ae0": "zHQPreSale()", +"cd5b8837": "distributeGREEN(address[],uint256,uint256)", +"cd5ba752": "firstPlacePot()", +"cd5ba978": "presale_end_block()", +"cd5bfb63": "tokenIdOf(bytes32)", +"cd5bfbe4": "initialVestAmount()", +"cd5c222f": "msgMap(uint256)", +"cd5c4c70": "deleteOwner(address)", +"cd5d6c2b": "betInfoIsLocked()", +"cd5d950f": "TaxiToken()", +"cd5dba1e": "WhiteElephant()", +"cd5dd1d0": "showMsgSender()", +"cd5e2038": "t_ImmlaTokenDepository2()", +"cd5e3c5d": "roll()", +"cd5ebd93": "calculateTimeout()", +"cd5ecd60": "theWinnernumber()", +"cd5f49d5": "transferRewards(address,uint256,uint256)", +"cd5f5c4a": "tryGet(bytes12)", +"cd60aa75": "TokenPurchase(address,uint256,uint256)", +"cd60fe35": "MAX_TOTAL()", +"cd619681": "count_nodes()", +"cd61a95a": "sellOrder(uint256,uint256)", +"cd61cb3a": "setTokenUpgrader(address)", +"cd62b382": "Sunset(bool)", +"cd634920": "buyLeader(uint256,uint256)", +"cd635b71": "ownerShipTransfer(address)", +"cd639e6c": "EthFundTransfer(uint256)", +"cd639e8c": "transferByInternal(address,address,uint256)", +"cd63acf9": "buyChest()", +"cd63d930": "distributionCap()", +"cd64b135": "_depositToken(address,uint256)", +"cd64d952": "buildConnection(address,address,address,int256,uint256,uint256)", +"cd6566b0": "battle(bytes8,bytes5,bytes8,bytes5)", +"cd65908e": "changeIPFS(string)", +"cd65bb67": "ViewToken()", +"cd67571c": "accept(address,uint256)", +"cd679413": "ASHLEY_ALLOCATION()", +"cd67e55e": "LSTRatePerWEI()", +"cd67f3bc": "LimingCoin()", +"cd68100c": "lastAddress()", +"cd69859e": "vestedAdvisors()", +"cd69a7f1": "weightsApportionDecimals()", +"cd6a7ca7": "allowance(address,address,address,address)", +"cd6c4bb0": "startSettlementPreparation()", +"cd6c8343": "getAttributeValue(address,uint256)", +"cd6d7f81": "PRICE_FACTOR()", +"cd6dc687": "initialize(address,uint256)", +"cd6dca9e": "SaleFinalised(address,address,uint256)", +"cd6e05e2": "totalPotAwayTeam()", +"cd6e4dad": "LBCToken(address,address)", +"cd6e8855": "setMedications(bool)", +"cd6ebff6": "betAmountAtNow()", +"cd6ee0c2": "WISDOM()", +"cd6f4e0d": "dragoCount()", +"cd6f7c50": "GeneNuggetsToken()", +"cd6f7fdb": "applyKarmaDiff(address,uint256[2])", +"cd6fafa2": "XXXXXXXX04()", +"cd6fc2d1": "addMiningWarPrizePool(uint256)", +"cd704cb4": "getGeneralRelation(uint32)", +"cd71a397": "contract6function1()", +"cd71a471": "withdrawMkt(address,uint256)", +"cd72250d": "multiTransfer(address[],address[],uint256[])", +"cd728815": "setSubContractAddresses(address)", +"cd7292a0": "ChessLottery()", +"cd729a91": "unlockedTeamAllocationTokens()", +"cd72ab69": "etherRaised()", +"cd73d26c": "blocksPerDeal()", +"cd73df78": "getAllUsers(bool)", +"cd74096a": "getDataHoldersRefBonus(address)", +"cd755b41": "subs(address,address)", +"cd761b9c": "Grass()", +"cd762827": "joinGame(address,uint256)", +"cd76635b": "_setAddr(address)", +"cd76aa16": "getTotalCollected(uint64,address)", +"cd76faf5": "listActiveEggs()", +"cd7724c3": "getEthToTokenInputPrice(uint256)", +"cd77521a": "setFSTAddress(address)", +"cd77a0c8": "purchaseToken(address)", +"cd7805bc": "pinged(address,uint256,uint256,uint256)", +"cd781bf3": "pullEntry(uint256)", +"cd784d1b": "isSuperUser(address)", +"cd78a3b7": "processVote(bool)", +"cd79f86d": "submitPkgHash(string,string)", +"cd7a2c3b": "ResumeICO()", +"cd7b6744": "lockGlobalToken()", +"cd7ba8fd": "currentBlockHashCst()", +"cd7c92e3": "requestPrice(uint256)", +"cd7d5b92": "STARTING_SWORD()", +"cd7da845": "throwsWhenFinalizingWithIncorrectCap()", +"cd7da914": "renounceArbiter(address)", +"cd7dfa31": "setStarDeleted(uint256)", +"cd7e3184": "getValueBonus(uint256)", +"cd7e9fa6": "RefondCoin(uint256,string,string)", +"cd7eac3a": "house_fee_pct()", +"cd7ec171": "developer_string_C(string)", +"cd7ecda0": "grantPromoPack(address,uint8)", +"cd7f85fa": "budgetMultiSigWithdraw(uint256)", +"cd7fa74b": "setPendingReview()", +"cd7fb38c": "isValidMatingPair(uint256,uint256)", +"cd7ff921": "stringIndexOf(string,string)", +"cd80da82": "tokenShare(address)", +"cd819bdd": "setaddrFWD(address)", +"cd82a778": "_allowTimelock(address,address)", +"cd836e15": "SHARDING_REWARD()", +"cd838f0f": "getNames()", +"cd83b57c": "TacoCoin()", +"cd84cff4": "wwwithdrawww(uint256)", +"cd852330": "buyFromTrusterDealer(address,uint256,uint256)", +"cd854072": "affiliatThreshold1()", +"cd8550b8": "setBonus(bool)", +"cd85e945": "EtalonToken()", +"cd863e25": "startOffering(uint256)", +"cd866ee1": "MaximCoin()", +"cd868648": "setEndBlockNumber(uint256)", +"cd86eee2": "tokenCreationMinMile1()", +"cd871b16": "matchBytes32Prefix(bytes32,bytes,uint256,bytes)", +"cd875247": "OffGridParadise(string,string)", +"cd880b1e": "kcck256stradd(string,address)", +"cd881742": "teamTokensReleased()", +"cd88333e": "coldStore(uint256)", +"cd887739": "getExpertiseId(uint256)", +"cd88bac4": "teamTokensLockAddress()", +"cd897b75": "withdrawSubRound(uint256)", +"cd8aa272": "Icarus()", +"cd8b02c8": "Revoce()", +"cd8b0a77": "getProjectJudge(uint256)", +"cd8c063b": "isTransferAllowed()", +"cd8cc844": "lotteryStart()", +"cd8cdccd": "XiiPay()", +"cd8d3918": "calcLuckyCoinBenefit(uint256)", +"cd8d8da0": "tokenFallbackExchange(address,uint256,uint256)", +"cd8db998": "isDepositBlock(uint256)", +"cd8df8ec": "activateLastSale()", +"cd8e250a": "frozenBalancesOf(address)", +"cd8ed6f6": "addMarking(bytes32,bytes32,int256)", +"cd8f8b3c": "updateMintingAgent(address,bool)", +"cd8fce49": "Consents()", +"cd905dff": "isOperational()", +"cd9063f6": "replaceToken(address)", +"cd906676": "changelp1(address)", +"cd90b99d": "spawnInstance(address,uint256,uint256,uint256)", +"cd91672d": "firstStageDatetime()", +"cd91866a": "_startGameRound()", +"cd9217f7": "eventListener()", +"cd928f69": "updateAllowedTransfers(address,bool)", +"cd92dec0": "WaterMeterAcorn(address)", +"cd92eba9": "debtLedgerLength()", +"cd932c9c": "parseTimestampParts(uint256)", +"cd93307a": "EthereumSmart(uint256,string,string)", +"cd9354e4": "successesOf(address)", +"cd9380d5": "testSetBalanceSetsSupplyCumulatively()", +"cd93f6f3": "SetPoolEntryFee(string,uint256)", +"cd943e54": "transferToLock(address,uint256,uint256)", +"cd944e3b": "EXPERTS_POOL_TOKENS()", +"cd94a2a4": "owlToken()", +"cd953744": "getZTKCheck(address,address)", +"cd9548ce": "CompanyURL(string,string)", +"cd955faa": "hasSantaCoins(address)", +"cd9679dd": "issuePRETDETokens(address)", +"cd9745f2": "voteForTransaction(uint256)", +"cd9847bc": "testAccessControl()", +"cd98b214": "getMarketCreatorSettlementFeeInAttoethPerEth()", +"cd997aa3": "getData_31()", +"cd9a1b63": "devBalance()", +"cd9a1fa6": "countOfOwners()", +"cd9a27ba": "defaultRegionTax()", +"cd9a3c98": "any(bool[7])", +"cd9a7a56": "revokeOperatorByTranche(bytes32,address)", +"cd9b2f05": "addContributors(address[],bytes32[])", +"cd9c8d80": "VerifiedInfoHash(bytes32)", +"cd9d12f2": "icoStartUnix()", +"cd9d27ed": "setDelegadoDeDistritoVerify(bytes32,bytes32,uint8)", +"cd9ea342": "testMode()", +"cd9f05b8": "balanceEtherAddress(address)", +"cda0574e": "emitNominUpdated(address)", +"cda0eeaa": "gameMinBetAmount()", +"cda113ed": "globalBet()", +"cda2695a": "sponsor(address,uint256,uint256,uint256)", +"cda35494": "bonusMintingAgent()", +"cda368c3": "teamV()", +"cda3c001": "getUnsoldPeriod()", +"cda4351b": "ViewBetByID(uint256)", +"cda43ec5": "returnHrt(address,string)", +"cda4beef": "createAuction(uint256,uint256,uint256)", +"cda6239d": "getArrayOfTiers()", +"cda68e5d": "LogDecreaseCap(uint256)", +"cda6e92a": "sendTransaction(address,uint256,uint256,string,bytes)", +"cda78dea": "DTransport()", +"cda8300e": "Transfer_data_enabled()", +"cda87e33": "getConfigBoolz(bytes)", +"cda95d80": "Reserve()", +"cdab73b5": "blackList()", +"cdab9b5b": "setProviderName(uint256,string)", +"cdaba786": "addBet(uint256)", +"cdad5f94": "sendState(bytes,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"cdad6576": "changeBountyArbiter(uint256,address)", +"cdadb0fa": "right58(uint256)", +"cdaeb47d": "removeAddressFromMaster(address)", +"cdaf4028": "getMigrationCount()", +"cdb0ec6b": "getLinkedWallets(address)", +"cdb0fed9": "Livetest()", +"cdb230be": "DHAMAR()", +"cdb23c2d": "getMonarchyFactory()", +"cdb2867b": "canVote(uint256,address)", +"cdb294a2": "startDeal(bytes32,address)", +"cdb30482": "setBalancesUSD(address,address,uint256)", +"cdb3344a": "createGravatar(string,string)", +"cdb38f4f": "preICOTokenIssuedTotal()", +"cdb532b9": "deleteCharity(uint256)", +"cdb58e21": "DUBI()", +"cdb616b2": "ForkDelta(address,address,uint256,uint256,address)", +"cdb627b2": "showRecastConfigs()", +"cdb62c16": "getCashOutAmount(uint256)", +"cdb6753b": "setNav(uint32)", +"cdb75f2b": "NemoXXToken()", +"cdb7699a": "manualTransferTokensToWithBonus(address,uint256,uint256,uint256)", +"cdb78a2a": "giveNxc(address,uint256)", +"cdb7ef81": "getMinAuditPriceMax()", +"cdb80c51": "_service()", +"cdb88ad1": "setPauseState(bool)", +"cdb986cc": "getExperience()", +"cdb99909": "fstPrivateSalePortionNumerator()", +"cdbaed5a": "_isValidDepositCountry(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cdbb02af": "getAddressCount()", +"cdbccf50": "unfreeze_end_date()", +"cdbce03d": "checkOwner()", +"cdbcff6d": "getQuotas()", +"cdbd0f0e": "getRatioOf(address)", +"cdbd1031": "craftTwoCards(uint256,uint256)", +"cdbd3fc9": "bax()", +"cdbd7516": "allowUsers(address,address[])", +"cdbdc7a4": "DeveciToken()", +"cdbdd569": "SetLastRoomAndRound(address,uint8,uint256,bool)", +"cdbdf391": "left34(uint256)", +"cdbf9c42": "multiply13(uint256)", +"cdbfd448": "memberLog()", +"cdc04961": "setStates(address[],uint8[],uint8[])", +"cdc0563a": "presaleTokenRate()", +"cdc06bdd": "CrypviserICO(address[],uint256)", +"cdc07bbc": "_destroy(address,uint256)", +"cdc18424": "withdrawer()", +"cdc25845": "setBuyPrices(uint256)", +"cdc26dcb": "dorcasToken()", +"cdc2895c": "getOffer()", +"cdc39f4a": "addCardSet(uint256,uint256,uint256,bytes32,string,address,uint8)", +"cdc3e046": "balanceMaxSupply()", +"cdc57fd3": "modifyTokenPrice(uint256)", +"cdc5c7cd": "updateLinkHash(uint256,bytes32)", +"cdc62c03": "getFeeToTokenConversion(uint256)", +"cdc62d39": "ballotDetails(uint32)", +"cdc68b85": "create_all()", +"cdc7076d": "getMilk()", +"cdc81bc2": "totalInVaults()", +"cdc86ec4": "tokenCreationMinPayment()", +"cdc89404": "round5StartTime()", +"cdc8d357": "mintVerify(address,address,uint256,int256,uint256,int256)", +"cdcb3cdb": "crowdsaleSupply()", +"cdcb7c8f": "chase()", +"cdcb8788": "nextRoundFee()", +"cdcbac0d": "phase3StartingAt()", +"cdcc599b": "YunnimToken()", +"cdcc5d3e": "getTokenHolderTribunal()", +"cdcd77c0": "baz(uint32,bool)", +"cdcda9a8": "DogeCash(uint256,string,string)", +"cdcdb463": "getRiskParameters(bytes32)", +"cdce240c": "WillCoin(string,uint256,string,uint8)", +"cdce5206": "getUserNum()", +"cdcf0c4a": "dispute(string,address)", +"cdcf4b9b": "priceDenominator()", +"cdcf5794": "checkCooldown(address,address)", +"cdd11b83": "roundTotalWinnings()", +"cdd13589": "batchDistributeWithAmount(address[],uint256[])", +"cdd13673": "rewardReductionRate()", +"cdd13701": "getEventHashes(uint256[256])", +"cdd1b539": "getSequenceNumber(uint256,address)", +"cdd2067e": "getVendingAmountSold(uint256)", +"cdd247a9": "offerAd(uint256,uint256)", +"cdd2ef0c": "starBuy()", +"cdd3574a": "crowdsaleStartBlock()", +"cdd3ab58": "addDistributionSources(address[])", +"cdd432d0": "rewardNumerator()", +"cdd63344": "moveTo(uint256)", +"cdd6d079": "_tokensForEth(uint256,uint256)", +"cdd72253": "getVoters()", +"cdd739f6": "tokenCapForPreICO()", +"cdd7b1fd": "init(uint256,uint256,uint256,address)", +"cdd8750e": "getDueTime(bytes32)", +"cdd8b2b2": "registerBeneficiary(address)", +"cdd8cc49": "debug_string(string)", +"cdd8d4e8": "mgmtRewardPercentage()", +"cdd90fbb": "firstRoundWMDiscount()", +"cdd93332": "getTradingStart()", +"cdd977e0": "addrService()", +"cdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", +"cdda96cf": "TokenPriceETH()", +"cddaf241": "distributeReservedTokens(uint256)", +"cddb4e44": "getDataAddress()", +"cddb523b": "changeTeamWallet(address,address)", +"cddb8e94": "buyProduct(address,uint256)", +"cddbe729": "game(uint256)", +"cddbff7c": "CRYPTODUBAI()", +"cddc028b": "IndexEmpireToken()", +"cddc37c1": "withdrawForTwoYear()", +"cddce877": "TOKEN_SHARE_OF_LEGALS()", +"cddd351c": "transferFromOnBehalf(address)", +"cdde5413": "updateTileTimeStamp(uint16)", +"cdde76f7": "hasAnyAttrs(uint256,bytes2)", +"cdde9294": "avgTokenWinValue()", +"cddeaba0": "setTokenPrice(uint256,uint256,uint256,uint256)", +"cddfbaaf": "AirDropAFTKSeven()", +"cde02b25": "totaldivineTokensIssued()", +"cde0a4f8": "setRegulator(address)", +"cde180a9": "listContractByModuleId(string)", +"cde1d97a": "ChangeTokenVaultAddress(address)", +"cde25f8a": "getWineOwner(address)", +"cde2c35a": "rewardBobaBase(uint256)", +"cde2d72a": "receiveBTC(address,string,address,uint256,string)", +"cde2e8d7": "A2ACrowdsalePartner()", +"cde4018e": "AgriChainData()", +"cde40bc8": "bonusFirstWeek()", +"cde43f28": "mintTokens(uint256,int256,address,uint256)", +"cde4efa9": "flip()", +"cde596b2": "Pay(address)", +"cde5f58f": "RELEASE_INTERVAL()", +"cde68041": "hasPermission(address,address)", +"cde74e51": "licenses(bytes32)", +"cde7da75": "claimActingPlayerOutOfTime(uint256)", +"cde7f980": "save(string,address,uint256)", +"cde93eec": "NewIssue(address,uint256)", +"cde99727": "calculateROI()", +"cde9f2ea": "startdate()", +"cdea76d6": "buyLong(address[2],uint256[2],uint8,bytes32[3])", +"cdeaf5bc": "addItem(uint256,uint256,uint256,uint32[8])", +"cdeb1485": "massTransfer(address[],uint256[],bytes32)", +"cdeb7bac": "MaiToken2()", +"cdebf885": "Rent(address,uint256,uint256,uint256)", +"cdecd1d7": "FUN()", +"cded6986": "_getBridgeTokenFee(uint256)", +"cded6fa5": "JesusCrowdsale()", +"cdeda055": "_assert(bool)", +"cdee2112": "CyberToken()", +"cdee2b92": "saleclosingTime()", +"cdee5c4a": "raceRegistration(uint256,address)", +"cdee8973": "Swapped(address,uint256)", +"cdef3911": "assignTokenOperator(address)", +"cdef9423": "create(address,address,address,address,address,address,address,uint8,string)", +"cdef9fb6": "SimpleStore(uint256)", +"cdefa007": "FondoNetwork(uint256,string,string)", +"cdefa4de": "ParaD2Test()", +"cdefe704": "getLOCbyID(uint256)", +"cdf016ca": "minimumBounty()", +"cdf05ab5": "voteTime(uint256)", +"cdf20e1e": "currentSyndicateValue()", +"cdf32cab": "totalInvestedWei()", +"cdf3bc6f": "revise()", +"cdf3bdab": "GetMyAcorn()", +"cdf45c03": "FourLeafClover()", +"cdf46344": "mint(address,string,string,uint256,uint64,uint64,uint64)", +"cdf4d6b4": "registerKYC(address[])", +"cdf574f1": "purchase(uint256,bytes7)", +"cdf6ddb4": "activeCrowdsalePhase1(uint256)", +"cdf744b2": "setFounderPercent(uint256)", +"cdf90e02": "Roles2LibraryAndERC20LibraryAdapter(address,address)", +"cdf93c0f": "EtherBlock()", +"cdf99413": "CrowdsaleToken(string,string,uint256,uint256,bool)", +"cdf9b77e": "getCurrency(uint256)", +"cdfb0a21": "PRVTSToken()", +"cdfb2b4e": "enableWhitelist()", +"cdfb5832": "setClaimer(address)", +"cdfbc437": "setMaxBetAmount(uint256,uint256)", +"cdfbc8f1": "MINIMAL_PURCHASE()", +"cdfbe22c": "isAnExchanger(address)", +"cdfc20aa": "addHashType(uint8,string)", +"cdfd293b": "BOUTSPRO_AMOUNT()", +"cdfd72e8": "calcTeamEarnings(uint256,uint256)", +"cdfd7474": "SONICToken(string,uint8,string)", +"cdfdb7d6": "increaseAllowance(address,uint256,address)", +"cdfe2815": "createVip(address,uint256,uint256,uint256)", +"cdff1be4": "pauseWithdrawal(address,address)", +"cdff5857": "updateUint256s(bytes32[],uint256[])", +"ce00d49c": "_transferWithRate(address,address,uint256)", +"ce017242": "updateICOPrice()", +"ce01e1ec": "set2(uint256)", +"ce021384": "numberOfReferralCodes(address)", +"ce0457fe": "NewOwner(bytes32,bytes32,address)", +"ce04a8c5": "isDAppReady()", +"ce04c10e": "highContributionAward(address)", +"ce050632": "setBettingTime(uint256)", +"ce05264f": "createInterceptorFromVault()", +"ce05369b": "releaseTokenHolder()", +"ce058d0d": "ChangeLEXTokenAddress(address)", +"ce0617ec": "lockedUntil()", +"ce072163": "collectPayments()", +"ce07d2b4": "proxyTransfer(address,address,uint256,bytes)", +"ce098093": "createtoken(string,string,string,address)", +"ce0a191a": "setLotteryTokensPercent(uint256)", +"ce0b5bd5": "cancelWhitelistRemoval(bytes32)", +"ce0bb9c4": "looksCoin()", +"ce0bd51f": "bancorConverterFactory()", +"ce0befcf": "remainTokens()", +"ce0d5f78": "addAddressToBlacklist(address,address)", +"ce0df06b": "FreezeAccount(address)", +"ce0e19ba": "appendString(string)", +"ce0f802d": "MaazBTC()", +"ce0f92b7": "hashOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"ce0ff8d8": "CSStoken(uint256,string,string)", +"ce10814c": "wmax(uint128,uint128)", +"ce109195": "internalDoesEventExist(bytes32)", +"ce10cf88": "getAddressByIndex(uint256)", +"ce11f2bb": "vote(uint256[])", +"ce120afb": "_safeTransferPaymnt(address,uint256)", +"ce139296": "icoPhaseDiscountPercentage1()", +"ce13bfb7": "cancelLoanOffering(address[9],uint256[7],uint32[4],uint256)", +"ce144eb9": "spiceUp(string)", +"ce146d3d": "getTotalWins()", +"ce148564": "TIER3END()", +"ce148c1f": "tempTokensPeriodOf()", +"ce14a46e": "totalPeriod()", +"ce14d404": "PieTokenBase()", +"ce14eeb8": "BASE_HARD_CAP_PER_ROUND()", +"ce14f10b": "disabled(uint256)", +"ce15647a": "getTeam(uint8)", +"ce158ba2": "approveCompanyAllocation(address)", +"ce160edd": "searchAndBid(uint256,uint256)", +"ce1619f8": "_lockPaymentTokens(address,uint256,uint256)", +"ce161b57": "AngelTestToken()", +"ce165894": "updateExpectedAmount(bytes32,uint8,int256)", +"ce17f01e": "Hostblock()", +"ce18eb0b": "stage1Deadline()", +"ce19419b": "testThrowsSetNotUpdatableNotOwner()", +"ce1a70a3": "SimplePreTGEContract()", +"ce1aafc0": "VinaexToken()", +"ce1afbe1": "_transferToken(address,address,uint256)", +"ce1b088a": "withdrawDonations()", +"ce1bd789": "DestroyTransferFeeCoin()", +"ce1c1538": "getCardByOwner(address)", +"ce1c93af": "abandon(string)", +"ce1cf229": "SimpleMultiSigWallet()", +"ce1d6ea0": "testAppendTranch()", +"ce1ed182": "getLastMilestoneStartsAt()", +"ce1ed2bb": "BecomeSquirrelDuke()", +"ce1f561c": "holdingTaxDecimals()", +"ce1ffcd9": "setTransferEnable(bool)", +"ce203b83": "officialUserSignUp(string,address)", +"ce204b78": "defrozen(address)", +"ce204bf1": "TOKEN_LOCKING_PERIOD()", +"ce20fd84": "query(bytes2,int256)", +"ce21abf3": "sendUnsoldPRETDETokensToTDE()", +"ce21fbf4": "GolemToken()", +"ce220ecf": "testAddBalanceFailsAboveOverflow()", +"ce2293ca": "EIB(string,string,uint8,uint256)", +"ce230030": "unlockSupervisedFunds(address)", +"ce233452": "limitPurchasing(uint256,uint256)", +"ce23772b": "removeWalletFromWhitelist(address)", +"ce23e8bc": "LIQUIDATION_TOKENS_PER_ETH()", +"ce23f2b2": "newLoan(bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"ce241d7c": "LogSetOwner(address)", +"ce248843": "removeOne(address)", +"ce255bba": "setsafekey(uint256)", +"ce266af8": "tom()", +"ce267b55": "ecdsaVerify(address,bytes,uint8,bytes32,bytes32)", +"ce2777a3": "BigchatToken(uint256,string,uint8,string)", +"ce27a21a": "setLogoPrice(uint256)", +"ce289284": "Result(bytes1)", +"ce2a9f62": "totalEthCollected()", +"ce2c6ad5": "getChainFeeArray()", +"ce2ce3fc": "getLocation()", +"ce2d173f": "setSelfOff()", +"ce2d3fa1": "returnKVTToOwner()", +"ce2dfd00": "createFootballerStar(uint256,uint256,uint256,uint256)", +"ce2f67a2": "exampleFunction()", +"ce2fc873": "setArticleHash(uint256,string)", +"ce2fc8b1": "RequestC(bytes32,bytes32)", +"ce2fce38": "getTransferInfo(address,uint256)", +"ce3099fa": "testNBool()", +"ce30b8d9": "operatorBurn(address,uint256,bytes)", +"ce3174ca": "revokeSubmission(address,address)", +"ce329570": "byzantineCloseChannel(bytes32)", +"ce347a65": "fund(uint16)", +"ce3498b8": "DelegatedIdentity(address)", +"ce356e3a": "addTeam2(uint64,uint64,uint64,uint16)", +"ce371431": "queryFunds(address)", +"ce373b95": "heroOfThePit()", +"ce376aa3": "buy_king()", +"ce3800e1": "moonLevel()", +"ce383ec7": "view68()", +"ce389e53": "getTokenAddHold()", +"ce394696": "calculateCost(uint256,uint256)", +"ce39952a": "disableSecureMode()", +"ce39976d": "getUrlAtIndexOf(address,address,uint256)", +"ce3a7076": "Cancelot(address,address)", +"ce3b0475": "changePriceDecraseTime2Action(uint256)", +"ce3be6bb": "withdrawWallet1()", +"ce3cc3aa": "changeTolerance(address,bytes32,uint256)", +"ce3ccfd0": "shouldReturnDefault(bytes32)", +"ce3cd997": "setStage(uint8)", +"ce3cef0d": "stopTakeToken()", +"ce3d9237": "mintMarginTokens(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", +"ce3e82a4": "KorkToken()", +"ce3f865f": "collect(uint256)", +"ce3fff35": "ONTTotalSupply()", +"ce4150eb": "migrateMarketInFromSibling()", +"ce419871": "openKYC()", +"ce41d75d": "NewIntelTechMedia(address)", +"ce4254ce": "terminationTime()", +"ce4258e9": "OPENAI()", +"ce429429": "generateOrderByMerchant(address,uint256,string,string,string)", +"ce42bb11": "getLockedDevFundAmount()", +"ce42fa88": "Telcoin(address)", +"ce435f4b": "SetParticipantAgrHash(address,address,bytes32)", +"ce43b0c0": "creditorAddresses(uint256)", +"ce43c032": "getUsername(address)", +"ce43c097": "CradTimeLock(address)", +"ce44573a": "GenChipByRandomWeight(uint256,uint8,uint256[])", +"ce45a260": "CryptoDime()", +"ce45f981": "MooAdvToken(uint256,string,string)", +"ce468922": "transferCat(bytes5,address,address,uint256)", +"ce46e046": "isPayable()", +"ce471aee": "kompitechToken()", +"ce47befd": "checkoutCart(string)", +"ce47e604": "sendAliceBlue(address,uint16,uint256)", +"ce483c42": "statusI()", +"ce483e88": "incrementOpenInterest(uint256)", +"ce48a54d": "getHeroLevel(address,address)", +"ce49735a": "distributeAlliniTokens()", +"ce4a6f09": "offerCanvasForSaleToAddress(uint32,uint256,address)", +"ce4a9206": "minPayInterval()", +"ce4ae74a": "setRewardMinter(address,uint256)", +"ce4c4a74": "TrueFlipToken(address)", +"ce4cf4c8": "advisorTotal()", +"ce4d01a3": "validate(uint256)", +"ce4d66b9": "roundBonus(uint256)", +"ce4d6fdf": "maritalStatus()", +"ce4dbdff": "securityTokenRegistry()", +"ce4ddabd": "updateTimeRC(address,uint256,uint256)", +"ce4e42d2": "BountyManager(address)", +"ce4e5aa4": "findBestMatch()", +"ce4e84a3": "STARTING_CHICKEN()", +"ce4e8c1a": "createNextPremiumSale(uint8,uint256)", +"ce4eb657": "updateXDRRate(uint256)", +"ce4ef577": "tokensAllocatedForAs(address,address,address,address,address,address,address,address,address)", +"ce4efe62": "insert(uint256,bytes32,bytes32)", +"ce507401": "oraclizeGasPrice()", +"ce50f72d": "getAvailableBalanceOf(address,address)", +"ce50f926": "getMinLimit()", +"ce510d46": "neededAmountTotal()", +"ce513b6f": "withdrawable(address)", +"ce52242e": "gotchinfo(address)", +"ce522f22": "updateWeiCap(uint256)", +"ce52c4ef": "createDelegation(address,uint256)", +"ce52cf84": "encoding_format()", +"ce53ee2d": "voteNoLockByAdmin(address,address,uint256)", +"ce5440bb": "depositAgent3(uint256,uint256,uint256[],uint256[],uint256)", +"ce5478a4": "lockedCapitalOf(address)", +"ce5494bb": "migrate(address)", +"ce5566c5": "cash(uint256,uint256)", +"ce557031": "purchaseTokens(address)", +"ce5570ec": "isWallet(address)", +"ce563036": "BaseContract()", +"ce5659bc": "changePartner2(address)", +"ce56c454": "withdrawEther(uint256,address)", +"ce56f3fb": "moneybuy(address,uint256)", +"ce5774c6": "Proposal(string)", +"ce578cd6": "managementContractAddress()", +"ce57d8d5": "getSingleInvestor(address)", +"ce5910f3": "unfreez()", +"ce592586": "setThresold(uint256,uint256)", +"ce5968da": "onMint(int256,address,uint256)", +"ce597164": "normalDemurrageAmount(uint256)", +"ce5a5df7": "createUnicorn(address)", +"ce5a63ff": "purchaseBlock(uint256,uint256)", +"ce5ac32d": "Firmament()", +"ce5c073d": "setMintMaster(address)", +"ce5c2c33": "performTransaction(uint256)", +"ce5c4fd8": "finalizeSale(uint256,uint256)", +"ce5c5201": "cryptogsAddress()", +"ce5d80e6": "stealCardWithId(uint256)", +"ce5e13aa": "getPlayerProfit(address)", +"ce5e4190": "set_tokens_per_ether(uint256)", +"ce5e6393": "tgrSetFinished()", +"ce5e84a3": "activate(bool)", +"ce5e9ffb": "CORRECTION()", +"ce5f9454": "numerator()", +"ce5fa1e9": "secondExchangeRatePeriod()", +"ce5fd7f3": "OfferContract()", +"ce606ee0": "contractOwner()", +"ce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", +"ce622ec5": "announceWinner(string)", +"ce6236ca": "getRoundLength()", +"ce627bd9": "mineblocksAddr()", +"ce629a6b": "_computeTournamentBooty(uint256,uint256,uint256)", +"ce63066f": "test_6_basicTransfer_increaseBlocksBy1000()", +"ce6342f3": "getAbiVersion()", +"ce63cc89": "postTask(string,string,uint256,uint256)", +"ce649b39": "setEthereumRate(uint256)", +"ce655952": "_cancelSale(uint256)", +"ce665dd8": "OFFSET()", +"ce67bda6": "testNop(int256,int256,uint256)", +"ce686e40": "IcoToken(string,string,uint256,string)", +"ce686e62": "BurnableOpenPayment(address,uint256,bool,uint256,string)", +"ce691294": "kRate()", +"ce6933d5": "fetchPaidOrdersForPayer()", +"ce695d7f": "_addArea(address,uint256)", +"ce699a41": "releaseVestedTokens(address)", +"ce69cd20": "MIN_BID()", +"ce6a9bd6": "proofType_Ledger()", +"ce6b3467": "withdrawExcessToken(address)", +"ce6c0b64": "_getTokenNumberWithBonus(uint256)", +"ce6c2589": "_emitOracleRemoved(address)", +"ce6c5080": "tokenSetAudit(address,address,address,address)", +"ce6c9a89": "changeMinimalWei(uint256)", +"ce6d35d1": "migrateToken(address,address)", +"ce6d41de": "getMessage()", +"ce6eaef5": "startSecondSale()", +"ce6eaff9": "YOU_BET_MINE_DOCUMENT_SHA512()", +"ce6efb07": "AmountLimitCrowdsale(uint256,uint256)", +"ce6f149c": "WEEKS_26()", +"ce6f899d": "EventLogin(address,string)", +"ce709c9b": "proposalCreateTime(uint256)", +"ce70faec": "createUltimateOracle(address,address,uint8,uint256,uint256,uint256)", +"ce71b83c": "TianqibaoTokenERC20(uint256,string,string)", +"ce71caee": "juryOperator()", +"ce72a696": "ICO_PERCENTAGE_1()", +"ce73a61d": "setWhitelistExpiration(uint256)", +"ce73b41a": "addBuyTokensRequest(address,string,uint256,uint256)", +"ce742222": "SCARABToken2()", +"ce744ba5": "SellOffer(address,address,uint256,uint256,uint256,uint256)", +"ce746024": "recover()", +"ce7462e9": "setStarSellPrice(uint256,uint256)", +"ce749c29": "defund()", +"ce774030": "raiseCoinsAdded(address,uint32,uint256)", +"ce77cf42": "Rafflecoin()", +"ce782e08": "floorLog2Test(uint256)", +"ce784216": "scrapCount()", +"ce7842f5": "referralBonus()", +"ce784564": "findPositionInMaxExpArray(uint256)", +"ce78b752": "ActivatedEvent(bool)", +"ce7917d7": "GEOCOIN()", +"ce794294": "multisignature()", +"ce799b0a": "changeStakeRate(bytes32,uint256)", +"ce79add1": "givableBalanceOf(address)", +"ce79d17d": "Storesumdata(bytes32,bytes32,uint64)", +"ce7a0697": "_internalTgeSetLive()", +"ce7a2b02": "processPayment(address,address)", +"ce7a60ab": "unlockBalance(address)", +"ce7a94eb": "SliceByte32(bytes,uint32)", +"ce7aa79f": "PXMCToken(uint256,string,uint8,string)", +"ce7ab6a7": "set_refunded(bool)", +"ce7ba916": "_initBadges(address,uint256,uint256,uint256)", +"ce7c2ac2": "shares(address)", +"ce7c5d7f": "transferEthToOwner(uint256)", +"ce7ca615": "FoundationAddress()", +"ce7ca665": "medalBoost()", +"ce7cdbb7": "getIndexRoot(bytes32)", +"ce7d3539": "AVMDisputeProcess()", +"ce7e23a0": "UnityToken(address,uint256,uint256)", +"ce7e51e3": "uint256ToString(uint256)", +"ce7f6e82": "CoinPulseToken()", +"ce7fc203": "accForTeam()", +"ce803a70": "noOfSeats()", +"ce806176": "setPurchasing(bool)", +"ce809e4e": "ETH_DECIMALS_FACTOR()", +"ce813d8f": "addTurretParts(uint8[])", +"ce816706": "X4BToken()", +"ce818ed5": "SiringClockAuction(address,uint256)", +"ce82eb33": "ico4Bonus()", +"ce830f5b": "_unlockToken(address)", +"ce845d1d": "currentBalance()", +"ce85e801": "MAX_PRICE_SALE()", +"ce85fbe2": "joojinta()", +"ce860a62": "getShipIdsByOwner()", +"ce869a64": "fails()", +"ce8721b2": "daoAccounts(address)", +"ce873a67": "processReferer(address)", +"ce8775a4": "win(uint256,uint256,uint256,bytes,uint256)", +"ce87f626": "replaceWizardRP(address)", +"ce8804c9": "setAdvertAddr(address)", +"ce883cdb": "getPoolsLength()", +"ce8883af": "potFee(uint256)", +"ce88a9ce": "setProduction()", +"ce88b145": "getAccount(uint256)", +"ce89a2a2": "changeSettings(uint256,uint8)", +"ce89b5de": "buy100()", +"ce89c80c": "calcKeysReceived(uint256,uint256)", +"ce8ac033": "getAvatar(address)", +"ce8ae9f3": "giveReward(address,uint256)", +"ce8b5b60": "setLockAfterManuallyMint(bool,int256)", +"ce8b7151": "isHF()", +"ce8b7be4": "consultantsAllocation()", +"ce8bbe4b": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address)", +"ce8bcae3": "allFundsCanBeUnlocked()", +"ce8d054e": "_setupNoCallback()", +"ce8d096d": "redeemVestableToken(address)", +"ce8d1910": "claimFromSeveral(uint256,address[])", +"ce8d388d": "disableWithdraw()", +"ce8d73de": "o_labirinto(uint256)", +"ce8dc388": "TOTAL_ROUNDS()", +"ce8e120a": "thawTransfers()", +"ce8e2fd8": "SaintArnouldToken(address,uint256,uint256)", +"ce8e5170": "burnedAfterSaleCount()", +"ce8e95d4": "updateRegion(uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", +"ce8ebfc8": "makeSchoolToken()", +"ce8ff29b": "TicTacToeAdjudicator(address,address,address,address,uint256)", +"ce90203c": "computeSellPrice()", +"ce906c6a": "listPrycto5()", +"ce909980": "checkTimeout(address)", +"ce90bafa": "topUpERC20(address,uint32,uint192)", +"ce912692": "createNew(address,address,address,uint256,uint256,uint256)", +"ce916d85": "icoTokensReceived(address)", +"ce91e4b3": "freezeaccount(address,bool)", +"ce923728": "setDealMembers(address,address,address,uint256)", +"ce92dced": "newBid(bytes32)", +"ce93b0e4": "returnAdvisorTokens(address,uint256)", +"ce950d1e": "FancyAssetsCoin(uint256,string,string)", +"ce952345": "icoAssignReservedBounty(address,uint256)", +"ce95aad2": "isOnCraftingAuction(uint256)", +"ce95b475": "getBalanceByAdress(address,address)", +"ce96c8e4": "set_deposit_manager(address)", +"ce96ec6b": "setRefer(address)", +"ce972050": "token_orderSheet(address,uint32)", +"ce972f33": "Menu01(address,uint256)", +"ce97f61a": "submitTally(uint256,uint256,uint256)", +"ce9822c7": "Magic10(uint256,address)", +"ce99151e": "p_wallet()", +"ce9a3b0f": "special()", +"ce9a6ac8": "putOn(uint256,uint256,address)", +"ce9ae667": "PharmaWit()", +"ce9ae91c": "getARed(uint256,uint256)", +"ce9af2b9": "isReserved(string,address,string,bytes32)", +"ce9b4321": "calculateCommission(uint256)", +"ce9c39c9": "stepTwoStartTime()", +"ce9e673b": "forceOffsetBasicFeeRate()", +"ce9e6bb7": "setEndTimeIcoStage2(uint256)", +"ce9e7730": "createSubcourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256)", +"ce9f24dc": "SilentNotaryCrowdsale(address,address,address,uint256)", +"ce9fb088": "TransferSellAgentBounty(address,uint256)", +"cea024d9": "tokenPriceNum()", +"cea08621": "changeDailyLimit(uint256)", +"cea10af7": "hardFundingGoal()", +"cea15706": "DarkrenlandCoin()", +"cea16c83": "endFinalStage2()", +"cea198c8": "LogBidCanceled(bytes32)", +"cea22b51": "ico_stage()", +"cea289db": "debugInt(uint256)", +"cea2ed48": "CreatedPet(uint64)", +"cea4b687": "updateListingWithSender(address,uint256,bytes32,uint256)", +"cea5033c": "_requestTokens(address,uint256)", +"cea5b151": "getLabelHash(string)", +"cea5d64b": "shift_right(uint256,uint256)", +"cea63361": "transactionFeeRateM()", +"cea65e97": "addressIsOwner(address)", +"cea67184": "getHydroId(address,address)", +"cea7555b": "distributedFundariaStakes()", +"cea81ab1": "generateContestForDelegationSchemaHash(address,uint256,bytes32)", +"cea876ba": "EthMatch(uint256)", +"cea943ee": "getSaleConfig()", +"cea9707a": "getMyTicketList(bool,uint256,uint256)", +"cea99275": "hasInitMartial()", +"cea9b7af": "ICO_EOS_AIRDROP()", +"cea9d26f": "rescueTokens(address,address,uint256)", +"cea9f621": "setVars(address,address)", +"ceaa50d4": "getLastPayoutAmountAndReset()", +"ceaae25d": "massChangeRegistrationStatusForGoldWhiteList(address[],bool)", +"ceaafb67": "AnonymousDeposit(address,uint256)", +"ceab09d8": "set_participant(address,uint256,uint256,uint256,bool,uint8)", +"ceab4ea7": "VOODOO()", +"ceac2aed": "submit_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", +"ceacc749": "calcCurrentMinBid()", +"cead2c29": "get_ptc_balance(address)", +"cead4620": "putBtoWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ceadd9c8": "donateAsWithChecksum(address,bytes4)", +"ceae3424": "balanceSoll(address)", +"ceae7f64": "thirdStageMinting()", +"ceaf0bfb": "admAccount(address,bool)", +"ceaf1e94": "_transferToAddress(address,uint256)", +"ceaf9519": "needToGetFree()", +"ceafb18d": "getCard(address)", +"ceb0884d": "getSolution(address,uint32)", +"ceb10f1c": "preIcoCap()", +"ceb21433": "Activate(address,address,address,address)", +"ceb22fa0": "meteredEarn(uint256)", +"ceb24797": "getKycLevel(address)", +"ceb2731a": "purchaseCrate()", +"ceb35b0f": "addAddress(string,address)", +"ceb408b4": "_set5()", +"ceb41385": "getHashLeftPad()", +"ceb44d04": "checkSplitEnd(uint256)", +"ceb51f0a": "setApproved(address,uint256)", +"ceb5bc46": "proshgold()", +"ceb60654": "getGroup(uint256)", +"ceb6dbc3": "time_of_token_swap_end()", +"ceb791d9": "priceRate()", +"ceb7bc87": "tokenTransferFrom(address,address,uint256,address[])", +"ceb7e43c": "getAddOnComplete(uint16)", +"ceb88ff4": "setContribution(address,uint256)", +"ceb8ee8b": "durationInMinutes()", +"ceb98dc7": "unbuy()", +"ceb9a5fd": "getGameCurrentRoundId(uint256)", +"ceba1794": "MAX_LOAN_AMOUNT()", +"ceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", +"ceba5029": "MOBTokenIssue(address)", +"cebac2f2": "LRCLongTermHoldingContract(address,address)", +"cebae575": "GLAU()", +"cebb8bb0": "testControlRestartEnforceRevisions()", +"cebbbce5": "ClaimAirdrop(address,uint256)", +"cebc141a": "devCount()", +"cebc9a82": "getDelay()", +"cebce72d": "token(uint64)", +"cebd31bc": "getStartingPrice()", +"cebe09c9": "quota()", +"cebf3bb7": "minRaise()", +"cebfa61e": "month18companyUnlock()", +"cec0213e": "HealthDataChain(uint256,string,string)", +"cec0f734": "setTransferToken(uint256)", +"cec10c11": "setFees(uint256,uint256,uint256)", +"cec1365a": "ShortLimit(uint256)", +"cec17a12": "ChrisBell(uint256,string,uint8,string)", +"cec33f4e": "getPatentFee(address,uint16[5],uint256)", +"cec3638d": "VotingChallenge()", +"cec36cb4": "refundPoweredUp()", +"cec4a1cc": "pauseRefund(bool)", +"cec4ab9c": "whitelistEnable()", +"cec63cea": "NamoToken()", +"cec68824": "registerFull()", +"cec7260b": "move_monster(uint16,uint16)", +"cec77ad5": "ALLOC_ADVISOR()", +"cec7b4e8": "Deposit(uint256,address,uint256,string)", +"cec8d277": "decrypt(address,bytes,string)", +"cec95aa1": "getReleaseHashForPackage(string,uint256)", +"cec9b4ef": "_executeTransaction(uint256)", +"cec9df89": "getAddressBetsForEvent(bytes32,address,string,string)", +"ceca122d": "activate(bool,bool,bool)", +"ceca7e8e": "fundLock(address,uint256)", +"cecaf395": "buildBlocks(int32,int32,bytes16)", +"cecb06d0": "mintOwner()", +"cecc33e7": "issueTickets(address,uint256,uint256)", +"ceccc10e": "getHoldersNameAddr()", +"cecd0264": "executePayment(string)", +"cecd0ab5": "_processFundsOverflow(address,uint256)", +"cecd9dd4": "_isNeededNewLottery()", +"cecdc6aa": "TEAM()", +"ced095d6": "getContest(string)", +"ced0a3a5": "setHookOperatorContract(address)", +"ced0bcc3": "MangaCoin()", +"ced0c0c2": "subscriptionRate()", +"ced0d31d": "setFeeRate(uint256,uint256,uint256,uint256,uint256,uint256)", +"ced11e40": "addMemory(string,bytes)", +"ced1a60b": "pooja()", +"ced29978": "LogFrozenAccount(address,bool)", +"ced32b0c": "setSender(address)", +"ced39558": "buyLand(uint256)", +"ced3fb9c": "isAddressAuthorized(address)", +"ced444bf": "offerStarForSaleToAddress(uint256,uint256,address)", +"ced4c064": "withdrawTo(string,address)", +"ced4f4b8": "sellEther()", +"ced659b6": "burnMktCoins()", +"ced72f87": "getFee()", +"ced78ed1": "getImageData(uint256,uint16)", +"ced7d018": "reFundByOther(address)", +"ced80aca": "updateMultipleReservedTokens(address[],uint256[],uint256[],uint256[])", +"ced84a71": "addInvestor(address,uint256,uint256)", +"ced92670": "changeMultiplier(uint256)", +"ced9f7c0": "mokenNoName(uint256)", +"ceda4a03": "NovioCoin_TEST()", +"cedadaca": "SingularityTest6()", +"cedbbeee": "createTokens(address)", +"cedc01ae": "getActivator(address)", +"cedc2ce1": "setMaxTransfers(uint256)", +"cedc7277": "getBuyPrice(address)", +"cedcbd99": "ACTION_BUY_OFFER_ACCEPTED()", +"cedcd770": "foundationWithdraw(uint256)", +"cedd90f6": "purchase(bool,bool)", +"ceddd07d": "balanceOfUnlocked(address)", +"cedf222e": "congressMemberThreshold()", +"cee024dc": "getNumberOfVotes()", +"cee02a86": "SOFTCAP_ETH_LIMIT()", +"cee0b4fe": "CRTSTAL_MINING_PERIOD()", +"cee13e28": "Conversion(address,address,address,uint256,uint256,int256,uint256,uint256)", +"cee24e31": "gambler1()", +"cee26ed5": "sellers(uint256)", +"cee2a9cf": "isInvestor(address)", +"cee401ef": "enableICO()", +"cee594c8": "addStage(uint256,uint256,uint256,uint64,uint64,uint256)", +"cee6b0d9": "AcceptsSunny2(address)", +"cee6b53c": "updateLastActivity()", +"cee6ee38": "aEthereumlotteryNet()", +"cee6f794": "SEKEM()", +"cee6f93c": "getResultOfLastFlip()", +"cee73630": "buyTPT(uint256,uint256,uint8,bytes32,bytes32)", +"cee749bc": "withdrawTokenRefund(uint256,address)", +"cee80356": "min4payout()", +"cee829ea": "refundMany(address[])", +"cee8fa1f": "Funding_Setting_cashback_time_end()", +"cee93e23": "isActive(uint32,int256)", +"cee96f49": "setissuedSupplyRatio(uint256)", +"ceea3914": "lookupUserDonationHistoryByCampaignID(address)", +"ceead4b6": "setCompte_10(string)", +"ceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", +"ceeb7066": "setJoinFee(uint256)", +"ceebe28d": "repoInterfaceVersion()", +"ceec8f8f": "removeProduct(string,string)", +"ceee4119": "getUsersRadarsIds()", +"ceee9658": "rotate_right(uint256,uint256)", +"ceeea0ea": "completeAttack(bytes32)", +"ceef3800": "calculateBonusTierQuotient()", +"ceef3d93": "changelp7(address)", +"ceef644c": "LIFEINVIDER()", +"ceefbbd6": "prePreIcoEndAt()", +"cef037fd": "setContinueSelling()", +"cef062fc": "reserveVault()", +"cef0e9e2": "getFalconmasterReq()", +"cef24cac": "AmountToFund(uint256)", +"cef29521": "PRICE_MULTIPLIER_ICO4()", +"cef2e559": "marketplace_storage()", +"cef42254": "getContribution(uint256)", +"cef4be3c": "partialClaim(address,uint256)", +"cef55ae1": "newComp(uint8)", +"cef5ed69": "changeServiceAgent(address)", +"cef6a39a": "createMinerAuction()", +"cef6cfb2": "addToWhiteList(string,address)", +"cef75d9f": "myCardDividends()", +"cef7a4d0": "LogTemplateSet(address,address,address)", +"cef7e760": "initialCaps()", +"cef887b0": "storeBlockWithFee(bytes,int256)", +"cef8d343": "buyShare(uint256,bool)", +"cef94360": "updatefundingEndTime(uint256)", +"cef9601f": "timeTillNextSteal()", +"cef9ca6b": "ThreeDLPrivate()", +"cef9db6d": "TOKEN_SUPPLY_TOTAL()", +"cefa624b": "getPlayerAirdropGameData(address)", +"cefa80fc": "foundersTeam()", +"cefaba7f": "prc(uint256)", +"cefad386": "_accountOkayChecks(bytes32,uint64)", +"cefb09b6": "getBrokerInfo(uint256)", +"cefb3605": "vaultToWallet()", +"cefc0848": "minimumStakingTokenPercentage()", +"cefce1f2": "GameOver(string)", +"cefd2239": "unlocktoken(address,address,address)", +"cefddda9": "isGenesisValidator(address)", +"cefdfcf3": "testControlRetractNotRetractable()", +"cefe23dd": "HarjCoin()", +"cefeb6f7": "MeshPointManager(int256)", +"cefed526": "Atlantide(uint256,string,string)", +"ceff149b": "getRoundLuckyPot(uint256)", +"ceff6fe6": "cancelApproveForAddress(uint256)", +"ceffbaf1": "isReleaseApproved()", +"cf0023ec": "pvt_plmt_max_in_Wei()", +"cf007460": "nextClaim(address)", +"cf00c197": "stageOneEnd()", +"cf00cba0": "BlocksquareSeriesA()", +"cf00d4b9": "prizePoolPercent()", +"cf011b26": "excludedAddresses(address)", +"cf02ba9d": "optionsPerShare()", +"cf034b1d": "transferFromTrustedContract(address,uint256)", +"cf03e589": "Registered(address,string,address)", +"cf03f5f4": "activateMasterKey(address)", +"cf04dd7e": "DAPSTOKEN()", +"cf04fb94": "changeVerifier(address)", +"cf054fb2": "hardCapAmount()", +"cf0682bc": "warning()", +"cf06b141": "assertEq17(bytes17,bytes17,bytes32)", +"cf06b3ba": "KOIOSToken(string,string,uint256,uint256)", +"cf071005": "showLastPoolAddress(address)", +"cf07fbb6": "HUToken()", +"cf082176": "ETHERION()", +"cf083591": "listAllAttendants()", +"cf086765": "getPatronsCount()", +"cf094497": "betCount()", +"cf09c6dd": "lastBlock_f10Hash_uint256()", +"cf09e0d0": "createdAt()", +"cf09e6e1": "SetBigContract(address)", +"cf09e820": "getPropertyOwnerSalePrice(uint16)", +"cf0a07b2": "Choon(address,address,address)", +"cf0a50d3": "DopeToken()", +"cf0aed0e": "setMinimumBuyValue(uint256)", +"cf0cb613": "finalUnlockTransfer()", +"cf0dbc27": "getH2Bidder()", +"cf0e4076": "findAddress(address,address[])", +"cf0e4be5": "eggsInTimeSlot(uint8)", +"cf0e80fe": "getClaimedBalance(address)", +"cf0f02bd": "IntoQueue(address)", +"cf0f0593": "shl8(uint8,uint8)", +"cf0f2bf8": "transferPreSigned(address,uint256,uint256,uint256,bytes)", +"cf0f34c4": "setMaxDuration(uint256)", +"cf0f864e": "battleCardIdRange()", +"cf0fc7d5": "_fetchOrderByIdWithMerchant(string,address)", +"cf0fdacb": "getRarityBonusValue(uint256)", +"cf100287": "payToManager(uint256)", +"cf112453": "canUpdateNextGameInitalMinBetSize()", +"cf124ba3": "tokenSaleIsFinished()", +"cf1259d8": "badge_obj()", +"cf12789a": "percOf(uint256,uint256)", +"cf12b725": "releaseTokenPrivate()", +"cf12d99f": "xorexs()", +"cf12e870": "giveAccess(address)", +"cf134a06": "totalLicensePurchases()", +"cf136426": "IagonTestToken()", +"cf1405fe": "firstDay()", +"cf14b191": "recoverAddressOfSigner(address,address,uint256,uint8,bytes32,bytes32)", +"cf14cecc": "whitelistMaxTok(uint256,address)", +"cf1578dc": "getOwnerFunds()", +"cf157942": "endsigning()", +"cf158fe9": "scheduleTransaction(uint256,uint256,uint256)", +"cf15b87d": "IcoCompleted()", +"cf160cf2": "addModerator(address,string)", +"cf16b4a2": "_packPlayerData(address,uint256)", +"cf16cc83": "getRoundStart(uint256)", +"cf16e955": "buyOnBehalf(address)", +"cf187228": "_createChar(string,address,uint256)", +"cf187df1": "addFrozenBalances(address,uint256)", +"cf18811f": "getTrusteeIndex()", +"cf1893de": "TimeBasedContract()", +"cf191540": "retraitStandard_5()", +"cf19463d": "newPokemonMaster(address)", +"cf195101": "Zchain()", +"cf195e34": "issuedToDate()", +"cf1a6243": "MIOTCrowdsales(address,address)", +"cf1b037c": "registerCallback(address)", +"cf1b11e8": "tokensPerWeiPlusBonus(uint256)", +"cf1b3f08": "withdrawTop(uint256)", +"cf1b45c3": "User(address,address)", +"cf1c13ce": "setBonusRate()", +"cf1c316a": "addAuthorized(address)", +"cf1c9f52": "pauseDET()", +"cf1cd249": "secureSend(address)", +"cf1d21c0": "ETHER_ADDRESS()", +"cf1d567f": "cosmicDice()", +"cf1d8294": "setPresaleParticipantWhitelist(address[],bool)", +"cf1e3bcb": "projectReserve()", +"cf1eba78": "promoMap(bytes32)", +"cf1ec58d": "usdPerEthLog(uint256)", +"cf1edfea": "checkIfLockCanBeRemoved(address)", +"cf1ee6f9": "OVISRESERVED_TOKENS()", +"cf1eef50": "UpdateRateAgent(address)", +"cf1f335e": "sendLiquidityFund(address,uint256)", +"cf1f3dd7": "ledgerName()", +"cf200e9f": "getBalancesSeller(uint256)", +"cf202727": "myfirsttoken()", +"cf20ac40": "citadelBalance()", +"cf210e16": "restrictedAcct()", +"cf216207": "tokensToTransfer(address,address,address,uint256,bytes,bytes)", +"cf21977c": "mint(address,uint256,uint256,uint256,uint256,string)", +"cf225109": "getSellAgents(uint256)", +"cf22c803": "Election(bytes32[],uint256,uint256,uint256)", +"cf2317d5": "nBallots(bytes32)", +"cf235743": "whitelist(address[],uint256[])", +"cf23616e": "enableTimelock(uint256)", +"cf25e4e8": "getActiveBusinessesPerType(uint256)", +"cf26ac9b": "getLinkOwner(address)", +"cf27539e": "LBL(uint256,string,string)", +"cf278430": "split(address,bytes32,uint8,uint256)", +"cf279ff1": "inserirOuvidoriaNoCadastro(address,bytes32,uint8,bytes32,bytes32,int256)", +"cf27d016": "isInGracePeriod()", +"cf282878": "_createNode()", +"cf2887e5": "transferTo(address,address[],uint256)", +"cf28b18e": "p_update_tokensRewardsAllocated(uint256)", +"cf295a5c": "mintbuy(address,uint256)", +"cf299d04": "joinPre()", +"cf2a8612": "two(uint256)", +"cf2affca": "changeRequiredAdmin(uint256,bool,bytes)", +"cf2b16d9": "Game(address)", +"cf2b3b47": "createRoomQuick()", +"cf2b8c05": "getRealisation_effective()", +"cf2c52cb": "deposit(address,bytes)", +"cf2d03ae": "minJump()", +"cf2d31fb": "register(bytes32,string)", +"cf2d5d66": "TestSelfDropToken()", +"cf2d5eb4": "ICO_TRIGGER()", +"cf2d923f": "ADVISORS_AND_CONTRIBUTORS_ADDRESS()", +"cf2e011e": "link(string)", +"cf2e161c": "DOWN_winBets()", +"cf2e3efc": "GetBankAccountBalance()", +"cf2e80cc": "_setSentReveal(uint256,address,bool)", +"cf2f856e": "gracePeriodMinTran()", +"cf2f9a4a": "transferTokenContractOwnership(address,address)", +"cf2fb7ca": "setDIDTokenAddress(address)", +"cf3006a1": "setEthPriceInDollar(uint256)", +"cf309012": "locked()", +"cf310642": "Police_1()", +"cf314b6a": "verifyAccount(address,bool)", +"cf317b7e": "getSellerInfo(address)", +"cf31e9fe": "getOutputHash()", +"cf31ff86": "isAddressValid(address)", +"cf32b062": "deadlines()", +"cf32b957": "LockInventory()", +"cf33babc": "VotingStarted(uint256)", +"cf351c1d": "setFeeTokenAddress(address)", +"cf35238a": "googleSupply()", +"cf356f83": "parcelGzeWithBonusOnList()", +"cf357364": "getOrderType(bytes32)", +"cf35bdd0": "assets(uint256)", +"cf35f275": "transferFromStakedisbursementfund(address,uint256)", +"cf3630b4": "setNextStartTime(uint256)", +"cf36fe8e": "bobMakesEthPayment(bytes32,address,bytes20)", +"cf3743c6": "DuxToken()", +"cf38b609": "priceChibi()", +"cf397201": "addLockedTokeA(address,uint8,uint256)", +"cf39bff5": "accoutToSummonNum(address)", +"cf3b1967": "TOKEN_DECIMALS_UINT8()", +"cf3b70e6": "CreatedIAM(address,uint256)", +"cf3c6fd3": "distributeFounderTokens(address,uint256)", +"cf3ca0fa": "blockDotGasLimit()", +"cf3cb33f": "exchangeToken(address,uint256)", +"cf3d1e3c": "sellOffline(address,uint256)", +"cf3d29ea": "SNTMock(address)", +"cf3d3849": "getNumInvalidMarkets()", +"cf3d82e5": "setMaxStage1AllocationPerInvestor(uint256)", +"cf3dd39e": "existenceTotalSupplyTest(address)", +"cf3e172b": "getTokenInfo(address,bytes32)", +"cf3e194d": "calculateMultiplierAfterConversion(address,uint256)", +"cf3e52b8": "ValidateWorldSnapshotInternal(uint256)", +"cf3e52d9": "topWizard()", +"cf3e9519": "lrcUnlockPerMonth()", +"cf40bb58": "currentTimeIndex()", +"cf40f290": "EventLuckyNumberUpdated(uint256,uint256,uint8)", +"cf4186cb": "rejectMint(uint256,uint256)", +"cf41d6f8": "getPaid()", +"cf4228ea": "isSignedByAll()", +"cf4246a6": "ethereum2USDprice()", +"cf424b16": "releaseForSeed(address,uint256)", +"cf427d1b": "currentPenalty(address)", +"cf4315bb": "MINBET_perROLL()", +"cf43f4aa": "TrustedhealthToken()", +"cf4422e8": "getMilestoneDetails(bytes32)", +"cf44f5f7": "updateKeyMasks(uint256,uint256,uint256,uint256)", +"cf456865": "createCompany(bytes32,bytes32,uint256)", +"cf45f83b": "MADToken()", +"cf460fa5": "right16(uint256)", +"cf462616": "isVestingSet(address)", +"cf464997": "safeAssert(bool)", +"cf46827e": "getStakingMetrics(address,bytes32)", +"cf46bd24": "TransferContractOwnership(address,address)", +"cf46db5b": "isAllowed(uint8,address)", +"cf46dca7": "setProducer(address,bool)", +"cf47810c": "deleteAvatar(uint256)", +"cf478921": "addSpecialFeeTake(address,uint256,uint256)", +"cf47c326": "generateCryptsyToken()", +"cf488329": "BITCASH(string,string,uint8,uint256)", +"cf48d1a6": "setVox(address)", +"cf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", +"cf4baa4b": "kemnagToken()", +"cf4c3eac": "reservedWeis()", +"cf4cc8fb": "BitBallCoin()", +"cf4cea67": "dateBonus(uint256,uint256,uint256)", +"cf4d3a88": "PeopleSeedCapitalCoin()", +"cf4d6c0b": "AcceptsHyperDivs(address)", +"cf4e593a": "getPlayedGameJackpot()", +"cf4e964a": "cardStructs(uint8)", +"cf4e9ec3": "endCallRequestDate(address)", +"cf4fab1f": "PERFORMANCE_FEE_RATE()", +"cf504d48": "projectActive(uint256)", +"cf509b9d": "gracePeriodAmount()", +"cf51ee7a": "removeValueBonus(uint8)", +"cf51f582": "NucleusVisionAirDrop()", +"cf52a7b2": "whiteListAddress(address)", +"cf52ab0b": "New(address,uint256,uint256)", +"cf5303cf": "checker()", +"cf530bc3": "LOG_NewBet(address,uint256,uint256,bytes32)", +"cf53951d": "test_registrationInformationAccurate()", +"cf53d630": "getBetInfoByID(uint256)", +"cf54aaa0": "getDecimals(address)", +"cf561cea": "TestKToken()", +"cf564ab5": "getVehicleByAddress(address)", +"cf5713b6": "whatsMyName()", +"cf58802f": "getOverview(uint256,uint256)", +"cf58a045": "memberBuyToken()", +"cf58fbeb": "test_insert_findWithHintNextRemovedUpdateTail()", +"cf5ae516": "PauseICO()", +"cf5b5a77": "medalUnFreeze()", +"cf5b8018": "summSupporters()", +"cf5b90f0": "sendToken(address[])", +"cf5ba53f": "create(bytes)", +"cf5bd8e6": "EthBlockExplorer()", +"cf5c1b52": "setForSale(uint256,bool,uint256)", +"cf5c2ac7": "usdCentsBalance()", +"cf5c8b99": "CuratorRules(address,address[])", +"cf5cb132": "getRegisteredAssets()", +"cf5d4e4d": "BarterCoin()", +"cf5d57db": "changeReward(uint256)", +"cf5e36df": "getWeiContributed(uint16,address)", +"cf5f2201": "unMinedPop()", +"cf5f87d0": "updateConsumable(uint256,uint256,uint8)", +"cf6036fd": "length(bytes1)", +"cf62277c": "ThePiContract()", +"cf62d4e3": "changeMaxBetDoubleDice(uint256)", +"cf6304d4": "endPreTokensale()", +"cf6346cb": "presaleMinValue()", +"cf63bb83": "neymarHasMinted(uint256)", +"cf63edea": "tokenIdExist(uint256)", +"cf64c42f": "endCrowdsalePhase1Date()", +"cf64da7f": "HOVERCRAFT_TYPE()", +"cf652d1d": "setDefaultBoxNumber(uint256)", +"cf654886": "getHeroLevel(uint256)", +"cf65952c": "deactivateDevice(address)", +"cf662b5e": "JGCoinOld()", +"cf665443": "nextMint()", +"cf6661fb": "getNativeAsset()", +"cf67805c": "MumsTheWord()", +"cf682b3c": "VMVToken()", +"cf69318a": "left60(uint256)", +"cf693418": "_teamJackpot(uint256)", +"cf69443c": "getCurrentUserTotalReward()", +"cf69df28": "getDataRequestLength()", +"cf6a8722": "removeBytes32(bytes32)", +"cf6accab": "sendCharityPrizeToCharityAddress(uint256)", +"cf6ad876": "cancelAgreement()", +"cf6b1081": "proxyGetRefund()", +"cf6b3822": "WatchCollectedFeesInSzabo()", +"cf6b70cf": "many_payments()", +"cf6b8bbf": "XYT()", +"cf6bd8b9": "view62()", +"cf6d06a1": "transferFree(address,uint256)", +"cf6e4488": "custodianChangeReqs(bytes32)", +"cf6efb49": "getCdRate()", +"cf6f3b59": "userAdd(uint256)", +"cf6f3fe4": "distance_driven()", +"cf6fbb9d": "Mint(address,uint256,uint256,bytes32)", +"cf6fbeea": "takeAway(address,address)", +"cf6fcbb0": "calculateAveragePixelPrice(uint256,uint256)", +"cf7018d4": "setAdURI(uint256,string)", +"cf70ba36": "tokenZNT()", +"cf710b34": "showTeam()", +"cf710b73": "test_setMaxSize_update()", +"cf72085f": "deliverTokensBatch(address[],uint256[])", +"cf7209c5": "KyberHandler(address)", +"cf724096": "transferEthers(address,address,uint256)", +"cf72b511": "get_refund_deposit_addr_amount(uint256)", +"cf7315c6": "retract(bytes20)", +"cf731bd7": "Temgean()", +"cf73a1bc": "managerAddress()", +"cf756935": "determineLuckyVoters()", +"cf763d1c": "periodLimit()", +"cf76a3b9": "TokenState(uint256,uint8)", +"cf76cb7d": "simInstallments(bytes)", +"cf76ebf9": "carsGifted()", +"cf772c7d": "victims(uint16)", +"cf7730f1": "reserveFundSupply()", +"cf775255": "configureDomainFor(string,uint256,uint256,address,address)", +"cf77c8db": "setAffiliateContract(address,address)", +"cf78044d": "setMaxIndex(uint256)", +"cf783d8a": "allAccounts()", +"cf78a450": "unlockBBK(uint256)", +"cf78cf0d": "ContractCreated(address)", +"cf7956ab": "SIEToken(address,address)", +"cf79d8b4": "completeRemainingTokens()", +"cf7a8965": "steal()", +"cf7aebea": "transferAntique(address,bytes32)", +"cf7b38a2": "resumeCollectToken()", +"cf7b8c5f": "player_count()", +"cf7bb192": "canStakeExisting(address,bool,uint256,uint256,uint256,uint256,bytes8,uint256)", +"cf7c2985": "setAuctionPriceLimit(uint256)", +"cf7c2b31": "paymentOf(address)", +"cf7d0304": "MintableLazyCoderToken()", +"cf7d23a3": "Withdrawn(uint256,address,uint256)", +"cf7dcc15": "distributeEth(uint256,uint256)", +"cf7e01ba": "ICO1Period()", +"cf7e06cb": "setCapForParticipants(address[],uint256[])", +"cf7e69f8": "changeCooldownIndex(uint40,uint16)", +"cf7e9242": "getAgreements()", +"cf7efb4c": "SketchMarket()", +"cf7f12ea": "getBidCountForSketchesWithHolder(address)", +"cf808000": "iWantXKeys(uint256)", +"cf81377d": "eosDASH(uint256,uint256)", +"cf813e3f": "getLockTime(uint8)", +"cf81978b": "recipientMIT(address)", +"cf81f24d": "iWannaLiveForever()", +"cf820461": "txFee()", +"cf82601b": "removeInstitutionAsset(string,string)", +"cf82731f": "getPic(uint256)", +"cf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", +"cf837fad": "contractLock()", +"cf8407c9": "registerFund()", +"cf854969": "rate1()", +"cf866d6f": "LastProposalCanDiscard()", +"cf86a95a": "transferMintership(address)", +"cf876b72": "setAccountUrl(string)", +"cf879e83": "isRevoke(address,address)", +"cf881ad9": "fUseAmount()", +"cf88eebe": "enableBuyBackMode(address)", +"cf8951d1": "CollateralTransfered(uint256)", +"cf89744f": "MaxBetUpdate(uint256)", +"cf89956e": "Base(uint256,string,uint8,string)", +"cf8a24de": "emulatePurchase(address,address,uint256,uint256,uint256)", +"cf8bc918": "getCrowdsalesLength()", +"cf8c9cc8": "submitTransaction(address,address,uint256,uint256,bytes)", +"cf8d652c": "tokenCreationRate()", +"cf8d8ca0": "walletName()", +"cf8e9996": "MuellerFiredby51()", +"cf8eb597": "AccountIsFrozen(address)", +"cf8eeb7e": "subBalance(address,uint256)", +"cf8f4d4f": "getParticipantRegistry()", +"cf8f8f12": "finishICOInternal()", +"cf8fee11": "getBasicRate(address,bool)", +"cf904e7d": "delCertAdmin(address)", +"cf9057f7": "findNextYear(uint256,bytes4)", +"cf905858": "hasIdentity(address,address)", +"cf90bfc9": "DatPayToken()", +"cf90e741": "Presale(uint256,uint256,address)", +"cf910b37": "_getRandom(bytes32[4],uint8)", +"cf913ae7": "setKoikeToken(uint256,address)", +"cf914a87": "ownerSetOverride(address,bool)", +"cf91e331": "TransferGenesis(address)", +"cf92e19b": "maxPlayableGameId()", +"cf934d67": "newIndex(bytes32,uint256)", +"cf934fb8": "sendToBeneficiaryContract()", +"cf94e395": "set_hosp(uint256,string)", +"cf951c9f": "initAsset(uint256,string,string,string)", +"cf9530d0": "totalSupplyOf(address)", +"cf957ce0": "ROSCA(uint16,uint128,uint256,address[],uint16)", +"cf9676c1": "setMintRequestUintMap(uint256,int256,string,uint256)", +"cf96ce03": "setHouseEdgePercent(uint256)", +"cf9779cd": "accountFor(address,bool)", +"cf984f16": "testFailRestartEnforceRevisions()", +"cf98e120": "calculateStagePrice()", +"cf991259": "BRANDS_ADDR()", +"cf99a4d9": "buybackTypeTwo()", +"cf99cd2e": "iterateThroughSwarm(address,uint256)", +"cf99d935": "finalizeIfNecessary()", +"cf9a60d4": "ETH_USD_EXCHANGE_RATE_IN_CENTS()", +"cf9ac727": "logPrice(address,address,uint256)", +"cf9ac928": "bbd36484()", +"cf9b62d9": "OwnerOf(uint256)", +"cf9b9e0a": "FDCToken()", +"cf9d33d8": "GeniusInvest()", +"cf9df5eb": "insert(address,address,address,address,uint256,address,bytes32,uint256)", +"cf9f3db2": "PresaleTimeRangeChanged(address,uint256,uint256)", +"cf9f5ef6": "MANW()", +"cf9faf1d": "ownerSetRate(uint256)", +"cfa0136f": "setPresaleEndTime(uint256)", +"cfa01baf": "prepareForEarlyFinalization()", +"cfa059ee": "getIssuanceIds(bool,bool,bool,bool,uint256,uint256)", +"cfa06700": "_emitAccessBlocked(address,bytes32)", +"cfa084b0": "setTransferOwnership(address)", +"cfa0c480": "addTx(address,uint256,bytes)", +"cfa12510": "returnHash(address[2],uint256[7])", +"cfa24ee3": "setFighterCoreAddress(address)", +"cfa3bfce": "_validateLockupStages()", +"cfa3c132": "parentOf(uint256)", +"cfa446ec": "Standard_2()", +"cfa46990": "getSellUnicornFullPrice(uint256)", +"cfa4a6a6": "getPools(bytes32)", +"cfa4f3e8": "setRelease(uint256)", +"cfa517df": "getOwnerByAnimalId(uint256)", +"cfa51e01": "getAllTokenSold()", +"cfa5cfd3": "balanceInSpecificTier(uint256)", +"cfa5d53b": "blocktubeTransfer(address,uint256)", +"cfa5df4b": "swapAbleToken()", +"cfa5f02a": "exchangeETH()", +"cfa675cc": "_revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", +"cfa7074b": "BuyRateChanged(uint256,uint256)", +"cfa75d43": "developer_add_string_B(string)", +"cfa83079": "minHpDeducted()", +"cfa86845": "RedeemingTimeLimit()", +"cfa9fa85": "percentageHumanityFund()", +"cfaa234c": "_isNotMixing(uint256,uint256)", +"cfaa759d": "privateIcoStartTime()", +"cfaaa266": "TransferOwnership(address)", +"cfaaff4c": "ADZbuzzCommunityToken()", +"cfab3056": "guesses(int256)", +"cfab472f": "isUserEnabledForContract(address,address)", +"cfab6554": "sumElements(uint16[])", +"cfab8862": "pfcController()", +"cfabe67b": "acceptVestingTrusteeOwnership()", +"cfac2280": "uniqueJingles(bytes32)", +"cfad5277": "totalAddresses()", +"cfae2c65": "dispenseTokensToInvestorAddressesByValue(address[],uint256[])", +"cfae3217": "greet()", +"cfae52e1": "createFirstDay()", +"cfaed1e2": "minAllowedBetInEth()", +"cfaf7315": "BuyEggs()", +"cfaf8a33": "sellTile(uint256)", +"cfb009cf": "Obredis()", +"cfb079d3": "DX()", +"cfb27084": "switchAirDrop(bool)", +"cfb3647b": "tokenMinter()", +"cfb3a493": "getMyBounty(uint256)", +"cfb3b886": "jack_nonce()", +"cfb45e3c": "_cancelOperation(bytes32,uint256)", +"cfb51928": "stringToBytes32(string)", +"cfb5a5f8": "getShare(uint256)", +"cfb64dfc": "addCustomerFromProviderAdmin(address)", +"cfb6e9af": "LogBet(address,uint256,uint256)", +"cfb75c92": "slavenAdress()", +"cfb7b9e9": "PROM()", +"cfb9147d": "exploreFastenETHFee()", +"cfb9e26f": "getStateOfPlan()", +"cfba0279": "hasSkill(address,uint256,uint256,uint256)", +"cfba24ac": "isSenderBiometricLocked()", +"cfba4fe0": "findBalance(address)", +"cfba99dc": "getQuoteAsset()", +"cfbb2047": "currentSmartSpeedNumber()", +"cfbb4b24": "Invent()", +"cfbb7d36": "teamWithdraw()", +"cfbb9f37": "DOW_THU()", +"cfbbbd9e": "PASS()", +"cfbbd902": "calcWinNumbers(string)", +"cfbbda3d": "seekApproval()", +"cfbd3bbb": "GetCarrot(address)", +"cfbd4885": "revokeMinter(address)", +"cfbe2cb3": "walletDeposit(address,uint256,uint256)", +"cfbed755": "getCard(uint64)", +"cfbef67d": "extract(bytes,uint256)", +"cfbf92a9": "getNodeStake(address)", +"cfbf9a36": "getBetRecord(uint256)", +"cfc05b56": "setTokensSoldGoal(uint256)", +"cfc0cc34": "getStrategy(uint256)", +"cfc19710": "closeMtr()", +"cfc220b6": "SpermLabs()", +"cfc2a93e": "dividendRoundsBeforeFoundersStakeUnlock()", +"cfc2aad2": "generateBonusForGene(uint256)", +"cfc41c91": "reb()", +"cfc450af": "maxInvestmentInWei()", +"cfc45610": "Makindo()", +"cfc4af05": "blt()", +"cfc4af55": "tau()", +"cfc4d0ec": "getOrderHash(address[5],uint256[6])", +"cfc54848": "sendEth(uint256)", +"cfc5a969": "bytesToUint(bytes32)", +"cfc5e7c8": "getSellCount(address)", +"cfc72007": "selfdestruct(address)", +"cfc7e2da": "getMinAmount()", +"cfc9cb7f": "ForestingToken(address)", +"cfca375c": "NooCrowdsale()", +"cfcb2b7e": "createController(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"cfcb69d1": "TelegramTON()", +"cfcba2f8": "firstRefundRoundFinishTimestamp()", +"cfcc09a9": "simpleICO(string,string,uint8,address,uint256[],uint256[],int256)", +"cfcc57ad": "maxFundsThatCanBeWithdrawnByOwners()", +"cfcc7720": "rechargeRobot(uint256)", +"cfcccb32": "escrowList(address)", +"cfcd84a9": "collectibleIndexToPrice(uint256)", +"cfcd8c2d": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,bool)", +"cfcdde19": "PRICE_PREBUY_BONUS()", +"cfd00530": "isContractSignedBySigner(string,address)", +"cfd0a970": "TierClassicDividendAddress(address)", +"cfd129f8": "stageSoftcap(uint8)", +"cfd28966": "getMigrateOutDestinationValue()", +"cfd2eb49": "StoreComission(address,uint256)", +"cfd32aa0": "removeFunder()", +"cfd32ef7": "isMember(address,bytes32)", +"cfd3c17d": "currentLuckyStoneNumber()", +"cfd447d7": "startSale(uint256,bool)", +"cfd4ca6b": "contract_md5()", +"cfd4edcf": "ProofOf()", +"cfd550a3": "ICO_ENABLERS_CAP()", +"cfd56a13": "_sell(address,uint256,uint256)", +"cfd5cb77": "userAttackMonsterCDSeconds()", +"cfd65fdb": "assertEq19(bytes19,bytes19)", +"cfd6eea2": "QDCoin()", +"cfd7ab91": "STARTTIME()", +"cfd7be04": "backNewHopeOwner()", +"cfd7f1fb": "_chkBuyerLmtsAndFinl(address,uint256,uint256)", +"cfd8a175": "betPrice()", +"cfd8d6c0": "setProvider(address)", +"cfd938df": "Channel(string)", +"cfd94b01": "votersLen()", +"cfd9e0ea": "getStateForTime(uint256)", +"cfda7175": "getArbiterFeeAmount(uint256,uint8,uint256,address)", +"cfdac910": "getSketchesWithAuthor(address)", +"cfdacb58": "SetCryptoPrice(uint256,uint256)", +"cfdafde4": "saleIsFinished()", +"cfdb2eb7": "freeClaimAllowanceOf(address)", +"cfdb35ed": "setLKCExchangeRate(uint256)", +"cfdba320": "getRemainLockedOf(address)", +"cfdbf254": "MAX_BATCH_SIZE()", +"cfdd4520": "showCurrentBidValue()", +"cfdd7557": "CountOfAlastayaToken()", +"cfdd7e8a": "createFirstCommonsForum()", +"cfdf35b6": "removeLog(string)", +"cfe01e23": "anyAuditRequestMatchesPrice(uint256)", +"cfe0a5dc": "tokenKoef()", +"cfe0d487": "backup_finishIcoVars()", +"cfe0eeb7": "startSale(uint32,uint64,uint64)", +"cfe186b2": "finishGame(uint256)", +"cfe1887b": "delListReq(string,uint256,uint256)", +"cfe2b37a": "setIntF1ArrBoolF2AddressF1(int256,bool[],address)", +"cfe2f4e2": "Nicks()", +"cfe30939": "houseEarnings()", +"cfe3b8fb": "sTks(address,uint256)", +"cfe3d16d": "_register(address,address)", +"cfe3e683": "GWBCoin()", +"cfe4fb8e": "VECTORZILLA_RESERVE_VZT()", +"cfe52bdd": "sendFunds(address)", +"cfe5344a": "updateNovaAddress(address)", +"cfe5655c": "createDataControl()", +"cfe60c87": "LookRevToken()", +"cfe643ac": "getRightAndRoles()", +"cfe67587": "getWeeklySellVolume()", +"cfe6f220": "CertificateAddresses(bytes32)", +"cfe76488": "whitelistApplication(uint256,bytes32)", +"cfe7b770": "getBetInfo()", +"cfe7e7a0": "createLamboSale(uint256,uint256)", +"cfe7f3c0": "AddForm45(uint256,uint256,uint256,uint256)", +"cfe8c535": "giveAnimals(uint8,address)", +"cfe9a7b8": "getPackageName(uint256)", +"cfea3bb6": "swapTokenInfo(address)", +"cfea751f": "getIsAllTransfersLocked()", +"cfeaa5ea": "setBonusList(address)", +"cfeaaca1": "newCampaign(string,uint256,uint256,address)", +"cfeb93a8": "delABaddress(uint256,address,address)", +"cfeb9a97": "setSubFreezingTime(uint64)", +"cfeb9ec0": "BSmartValueCirculateAssets()", +"cfebb88b": "recallVoteToFreezeFund()", +"cfebc813": "changeExplain(string)", +"cfebf24d": "optionOf(address)", +"cfec22f8": "minSum()", +"cfec6ca3": "calculateProfitGameType1(uint256,uint256)", +"cfec8d83": "GetUserPELOAmount(address)", +"cfec934a": "runCrowdsale()", +"cfecd73d": "EtherIncPrivate()", +"cfed9199": "timePassed(uint256)", +"cfedc04a": "neverdieToken()", +"cfee88db": "closeClaims()", +"cfefaa8b": "Executed(string,uint256)", +"cfefb3d5": "payout(bytes32)", +"cfefcfb0": "VotedForProposal(uint256,address)", +"cfefe48b": "transferableTokensNow(address)", +"cfefe5a2": "isContribPeriodRunning()", +"cfefeb60": "airDropTime()", +"cff068a3": "random(uint256,uint256,address,uint8)", +"cff07771": "getEvaluationCount()", +"cff0ab96": "params()", +"cff12797": "setIcoPhase3(uint256,uint256)", +"cff13efb": "newCar(string,bytes17)", +"cff1b6ef": "updateAdminFee(uint256)", +"cff29dfd": "bidders(uint256)", +"cff2fa42": "_returnFee(address,uint256)", +"cff382ae": "AICrypto()", +"cff3d4d8": "stage1()", +"cff410b4": "Exit()", +"cff43a03": "verifyNewOrganizer(bool)", +"cff4d6cd": "payoutTotal()", +"cff5b28e": "FLUX()", +"cff61fb6": "batchExchange(address[])", +"cff6bc21": "allSigners(uint256)", +"cff72e67": "changeDevelopersRecipient(address)", +"cff76d67": "totalEthBankrollRecieved()", +"cff82e22": "getTicketCount(address)", +"cff9293a": "vote(uint32,uint32)", +"cff941fc": "Configured(address,address)", +"cffa4346": "DIETCoin()", +"cffc9997": "SetBuildingData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cffdc976": "WithdrawOwnerFunds(uint256)", +"cffe02cf": "setCrowdsaleRate(uint256)", +"cffe764c": "Insure()", +"cffee328": "successfulDeals()", +"cfff25bb": "getNumReserves()", +"cfff63ca": "assignMediator(address)", +"cfff8974": "mintToInfluencer(address,uint256,string)", +"cfffa030": "lanch_atak()", +"d0005aa4": "salesStart()", +"d0008a6d": "addNewMember(address,uint256)", +"d000a404": "PT(uint256,string,string)", +"d001425a": "bank2()", +"d0015500": "ownerSecondary()", +"d002462b": "setDeploymentFee(uint256)", +"d002a41c": "getUnReportedMatches()", +"d00408b7": "StandardToken(address)", +"d0044f9a": "_getLuckyList(uint256,uint8)", +"d0045341": "totalMintAmount()", +"d0047acf": "mint(address,uint256,uint32)", +"d004f0f7": "swap(address,uint256)", +"d004f38b": "setRates(uint256,uint256,uint256)", +"d0064c00": "maxDebt()", +"d0068f80": "getClient(uint256)", +"d0072e59": "forceReturn(address)", +"d007c644": "payInterest(address)", +"d007ff4b": "showJackpotBalance()", +"d0089141": "ovedclaimBountyairdrop(address,uint256)", +"d008d7a2": "BosToken()", +"d00910a3": "yearlyTeamTokensPaid(uint256)", +"d0095cc6": "genNumber()", +"d00a9058": "getOwnTokens()", +"d00cce41": "roleExists(string)", +"d00d20f4": "getTokensCrowdsaled()", +"d00eef6a": "TokenGranted(address,uint256,string)", +"d00ef880": "setShareTokenAddress(address,address)", +"d01296d9": "addmember(uint256,address)", +"d0130009": "Subtraction(uint256,uint256)", +"d013a182": "getServerBuildingWeapon(uint256,uint8,uint8)", +"d0142c47": "ImperialCreditToken()", +"d014c01f": "enter(address)", +"d014d667": "XCDT()", +"d0158b87": "fetchCancelledOrdersForMerchantByAdmin(address)", +"d015d86f": "getRoundStats()", +"d015f6dd": "NorthPoleAddress()", +"d01678f0": "raiseDay2()", +"d0169c1e": "lockAsset(bytes32)", +"d0169f4c": "start_POSTICO()", +"d016ec40": "vipBrokerNum()", +"d0174145": "create(address,address,uint256,uint256,uint256,uint256)", +"d017c2b4": "returnTokensToWallet()", +"d017cdcf": "acquireFame(uint256)", +"d017e20d": "processing(address,uint256,uint256,uint256)", +"d017f49b": "JustOneToken2()", +"d01860d0": "isFinishedSuccessfully()", +"d018a00f": "redeemBeer(bytes32)", +"d018db3e": "attack(address)", +"d0198c33": "getFunctionIdentifier(string)", +"d019d2c4": "MRT()", +"d01a69c9": "totalBeneficiaries()", +"d01a9453": "BitAirToken(address,string,string,uint256,uint256)", +"d01ab2e6": "_cancelOrder(address,address,uint256,address,uint256,uint256,uint256)", +"d01ab31a": "ICOStart()", +"d01b555d": "setSalePause(bool)", +"d01ba5f0": "increaseShardBalance(address,uint256)", +"d01bbdc9": "setOracleCallbackGasLimit(uint256)", +"d01c0904": "FujintoToken(uint256,string,uint8,string)", +"d01d0175": "StorageConsumer(address)", +"d01d6b86": "amountOfRegisters()", +"d01e2df9": "testContains()", +"d01ec886": "importPresaleContribution(address)", +"d01f4c9f": "hoursSinceTimestamp(uint256)", +"d01f4ffe": "stopSecondSale()", +"d01f63f5": "getWhitelist()", +"d02041f3": "advisorsPeriodAmount()", +"d02042a3": "relief()", +"d020ae40": "gameTotalGen()", +"d020dc3b": "rejectMessage(uint256,string)", +"d02143ed": "getRefToLength(address,address)", +"d0216dce": "XXXXXXXX07(address)", +"d021d8da": "Coinbase()", +"d0220b1c": "setCreateChampFee(uint256)", +"d0225e9e": "MAX_LRC_DEPOSIT_PER_ADDRESS()", +"d0237ab8": "EtherLiteSupply()", +"d023d2bd": "getGladiatorChestPrice()", +"d023d32c": "setEndAfterSecond(uint256)", +"d024768f": "computePropertyHash(string,string)", +"d024cd02": "startAuctionDirect(uint256,uint256,uint256,uint64,address)", +"d02528e6": "GetGameIndexesToProcess()", +"d02721cb": "withdrawProvider()", +"d02764f3": "releasesCount()", +"d0280037": "buyin(uint8,bytes32,bytes32)", +"d0286ab2": "setEmissionTime(uint256)", +"d028754b": "Withdraw_1()", +"d028a625": "deathData_v11()", +"d028c246": "Compaq()", +"d028f571": "getTokenForTeam(address)", +"d0297bc6": "changeMaximumContribution(uint256)", +"d02982cf": "isMember()", +"d029a530": "buyUnicornWithCandy(uint256)", +"d02a4f84": "bcn()", +"d02a6db7": "TokenLongExercised(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"d02a9889": "getDateOfFirstPayment()", +"d02b1653": "enablePrivateFund()", +"d02b97aa": "withdrawPromoter()", +"d02bf162": "spinTheWheel()", +"d02bf828": "lotteryTokensWallet()", +"d02c438a": "enableTokenSupport(bool)", +"d02c8cdf": "cancelMatch(uint256)", +"d02cc69f": "playWar(uint256)", +"d02d08b2": "hasCrowdsaleFinished()", +"d02d1382": "getPlayerCard(uint8)", +"d02d3892": "ApolloSeptemBaseCrowdsale(address,address)", +"d02d4554": "createUser(address,address)", +"d02d518d": "setArtEvt(string,string)", +"d02dade4": "getProviderCounter()", +"d02ddc12": "insert(bytes1,bytes1)", +"d02e140a": "finalizePrivatesale()", +"d02e5cfb": "mtcDailySpent()", +"d02e8f70": "MONUMENT_CITY_FEE()", +"d02ea39e": "DuckToken()", +"d02ecbb5": "ObitanChainxToken()", +"d02f5463": "pillarTokenFactory()", +"d02f7351": "seizeAllowed(address,address,address,address,uint256)", +"d02f8b98": "getApplications(address,bytes32,address)", +"d02fcad9": "wdiv(uint128,uint128)", +"d0302051": "rewardPercent()", +"d031370b": "reserveTokens(uint256)", +"d0315658": "getShareDistributionWithTimestamp(bytes)", +"d031babf": "LikeCrowdsale(address,uint256,uint256,uint256)", +"d031d8c4": "_transferLand(uint256,uint256,address)", +"d032ae76": "doAirDrop(address[])", +"d033c456": "addAddress(address,string)", +"d033d277": "OwnerNamed()", +"d033e6ee": "preAllocate(address,uint256,uint256)", +"d033f913": "getRoundSeedHash(uint32)", +"d034536e": "logFileClosing(string,uint256,string,string)", +"d0356fa8": "createVestingGrants()", +"d035bed4": "validContract(address,uint32)", +"d035e45f": "token_escape(address)", +"d0360e59": "drainContract()", +"d036261f": "amountBonuses(uint256)", +"d036bce2": "_calculateTokens(uint256)", +"d0376283": "onlyApprovedOrOwnerOfToken(uint256,address,bool)", +"d0378d07": "decreaseReserve(uint256,uint256)", +"d038906a": "FloraFicToken()", +"d0399bb8": "endGame(uint256)", +"d03b41a9": "bountyBalance()", +"d03bf119": "RANGESTART_11()", +"d03c8e34": "addAngel(address)", +"d03cff97": "devMiningRewardPerETHBlock()", +"d03d5231": "raffleDraw()", +"d03d9604": "maskIt(address,uint256)", +"d03e1021": "ORACLIZE_GASPRICE_GWEY()", +"d03e3059": "someMethod3(uint256,uint256,uint256)", +"d03e6817": "Volkstest()", +"d03e9bcc": "LogReceiveFunds(address,uint8,uint256)", +"d03e9fff": "plusTourFreezingTime(uint256)", +"d03ffefb": "createDeposit()", +"d04148d6": "m_account()", +"d04206f3": "CROSS_RESERVE()", +"d042a795": "multiSendA(uint256,uint256)", +"d042ce2c": "currentStageTokensBoughtByAddress()", +"d04301f2": "Annexe_SO_DIVA_SAS_5()", +"d0431cf5": "_openBox(uint256)", +"d0435cb0": "MonsterTokenCrowdsale(uint256,address,address,uint256,uint256)", +"d043d028": "toBytes4(bytes,bytes,uint256)", +"d045e1ff": "_inverse()", +"d046065e": "addBet(uint256,uint256,address,uint256)", +"d0471ee1": "Leverages(address[])", +"d04737bd": "Yuzhuralzoloto_2()", +"d0479abc": "burnUnsoldTokens(uint256)", +"d047a0d0": "getEmergencyTransferSigner(address,uint256)", +"d04807e9": "Heronium()", +"d0481f82": "hasLicenseTerms(bytes32,bytes32)", +"d048bc87": "inAngelPeriod()", +"d048db37": "getOfferCount()", +"d04a419b": "getDegree(bytes32)", +"d04a46b0": "sendFutureExpanstionBalance(address,uint256)", +"d04b019e": "getWalletResourceBalance(address)", +"d04b5f82": "test01Token()", +"d04bfc9c": "buyer_pay()", +"d04c9115": "getLoyaltyPoints(address)", +"d04cb43f": "withdraw_all_token(address,address)", +"d04d26fe": "updateStrength(uint256,uint8)", +"d04d2ca3": "BlacklistParticipant(address)", +"d04d8667": "authorized_recordPlatformFee()", +"d04dbdea": "Testtoken4()", +"d04e5586": "MEAManager()", +"d04f0535": "PisticciCash()", +"d04fe107": "getActiveAds()", +"d050498e": "assertEq24(bytes24,bytes24,bytes32)", +"d050557d": "bulkRegisterPoA(bytes32,bytes32,bytes,uint256)", +"d05144c8": "getMakeCount()", +"d0516650": "frozen(address)", +"d0516b82": "maxPresaleAmount()", +"d051dfd3": "prizes(uint256,address)", +"d052fbf6": "getHistory(string,uint256)", +"d05391d2": "admin_transferFrom(address,address,uint256)", +"d05407d4": "SetStepFunctionWrapper(address,address)", +"d054261e": "_generateRandomHash(string)", +"d05461a6": "mintForReportingParticipant(int256,address,uint256)", +"d0549602": "scheduleTransaction(address,uint256,uint256,uint256)", +"d054cd87": "badBoardSent(bytes10,uint256,uint8,bytes32,bytes32,bytes10,uint256,uint8,bytes32,bytes32)", +"d0569bc8": "getWinResults(uint256)", +"d056cc69": "stateCode(uint256)", +"d0578df9": "SMGC()", +"d0587032": "tablet_length()", +"d0590bad": "generateMessageToSign(address,uint256)", +"d05b7ca4": "uintToChar(uint8,uint256)", +"d05ba4da": "addPokemonToSellingList(address,uint256)", +"d05bb517": "withdrawFeeToken(uint256)", +"d05c78da": "safeMul(uint256,uint256)", +"d05c9342": "_getATxToken()", +"d05c9ad6": "setNumRewardsAvailableForAddress(uint256,address,address)", +"d05cb545": "registry(address,uint256)", +"d05d996f": "TXDELAY()", +"d05ec6c5": "getBonus4(uint256)", +"d05ee727": "teamAccount()", +"d05efd40": "directorA()", +"d0600560": "AD()", +"d0607948": "getteamnum(address)", +"d060a2a5": "doSmallDrop(uint256,uint256,uint256,uint256)", +"d0610ac9": "interpolate(uint256,uint256,uint256,uint256,uint256)", +"d0617f2f": "OMICrowdsale(uint256,address,address,address)", +"d062c7ab": "CleanBankerCandidate(uint8)", +"d06301d3": "__resolve(uint256)", +"d063f55f": "toLittleEndian(uint64)", +"d06426d5": "convertUsdToEther(uint256)", +"d0647f30": "_createDebt(bytes,bytes,uint256)", +"d06502b9": "batchTransferAgileToken(address[],uint256[],address,address)", +"d06544d0": "getCoinAddress(string)", +"d0658850": "ListingDB(uint64,uint64,address)", +"d066c841": "GenesisBuyPriceHistory(address,uint256)", +"d06760da": "isPartOfOrg()", +"d0676647": "ProposalClosed(uint256,uint256,uint256,uint256,bool,uint256)", +"d06798f2": "fourweeks()", +"d0679d34": "send(address,uint256)", +"d0683428": "executeRulingA(uint256)", +"d0692775": "gamesLeft(address)", +"d06980f1": "LogHodlClaimed(address,address,uint256)", +"d06982b2": "setDemurrageAmount(uint256)", +"d0699c98": "calcFees(uint256,uint256,uint256)", +"d06a0f5b": "setDynamicCeilingAddress(address)", +"d06a57b0": "pauseAllTokens(bool,string)", +"d06a89a4": "maxLength()", +"d06b3ea0": "whackingPool()", +"d06b44a6": "YKCToken(uint256,string,string,uint256)", +"d06b6f7e": "setMinTokensToSale(uint256)", +"d06ba559": "WrestleCoin()", +"d06c54fb": "acceptNextOwner()", +"d06c7b5b": "signalToken()", +"d06c91e4": "multisigEther()", +"d06ca26c": "managedWallets()", +"d06cdc73": "LuckyNumberService()", +"d06d4612": "jak()", +"d06f887b": "destroyMyToken(uint256)", +"d06f9734": "setTreasurer(address,bool)", +"d0707c61": "PerformingDrop(uint256)", +"d0708e31": "DocumentCertoChainContract(string,string,string,string)", +"d071f7b1": "recover(bytes32)", +"d073c531": "IMOSToken()", +"d073ca3d": "SUCCESS_FLAG()", +"d074443f": "DeathFactor_i()", +"d0747a9c": "getGoldmintFeeAccount()", +"d074a38d": "biddingTime()", +"d074de8c": "Testico()", +"d074f215": "PHASE_1_PRICE()", +"d075c11c": "viewNoncsallocations(address)", +"d0774f74": "GENSIS_TOTAL_COUNT()", +"d077814b": "divBase()", +"d0785dd7": "getNumberOfPlayersInCurrentGame()", +"d07866d2": "sizeOf(uint256)", +"d0799bee": "setRole(string,string)", +"d07a8bd7": "RisingToken()", +"d07ac4c4": "oraclize_query(uint256,string,bytes[4],uint256)", +"d07adab3": "getOutAmount()", +"d07bff0c": "getVoter(uint256)", +"d07c53b6": "thinkMode()", +"d07e7d7c": "setTTCTokenAddress(address)", +"d07e9f90": "getJobsCount()", +"d07f29e5": "addFounderAccounts(address,uint256)", +"d07f2ff6": "GreenWorldFarm()", +"d07f3a8f": "RobBanker(uint8,uint256,uint256,uint8)", +"d07f8181": "decreasePaymentsBalance(address,uint256)", +"d07fdfb0": "October12_2017()", +"d081b681": "vows()", +"d081b9f5": "networkState()", +"d081f2b8": "BOUNTY()", +"d0821b0e": "bet(uint8)", +"d08275f1": "WolframAlpha()", +"d08279b0": "unpauseTournament()", +"d082ea8c": "setExchangeAddress(address)", +"d083955c": "adjustMintRates()", +"d084f670": "getLocked(bytes16)", +"d085835a": "timeLock()", +"d085b82f": "TIMECOIN(address)", +"d085c8b8": "StartDistribution()", +"d085e66e": "GetPart(bytes32,uint256)", +"d0863580": "blocksRemaining()", +"d0868223": "returnATXChanges()", +"d086a201": "main_ico(address,uint256)", +"d087d288": "getNonce()", +"d088070a": "checkWhitelist(address,uint256)", +"d088f50d": "getNumeroCeldas()", +"d0894297": "EARLY_INVESTOR_WALLET()", +"d0897347": "engrave(bytes32,string,string,bytes32)", +"d089e11a": "accountRegistry()", +"d08a787c": "bytes32ToString(bytes32,bytes)", +"d08b89f3": "disableStopping()", +"d08bc007": "logRef(address,uint256)", +"d08bfe26": "CrowdsaleClose(uint256,bool)", +"d08c6803": "deletePerson(uint256)", +"d08d5559": "AABToken()", +"d08d66ec": "setBonusState(uint256)", +"d08d6753": "mdtRewardAmount()", +"d08e2354": "goldPercentage()", +"d08f2c67": "getHistoryAt(uint256)", +"d0900033": "COLONERToken()", +"d09119b4": "mortgage(address)", +"d0914c8d": "RelestToken()", +"d091b550": "newOwnerCandidate()", +"d0937598": "getLuckyblockBase(bytes32)", +"d09398ee": "transferCDP(address,uint256)", +"d093e04b": "payJackpot(uint256)", +"d0940a5d": "best()", +"d0946d00": "subFreeMineral(address)", +"d0949f99": "UINT256_MAX()", +"d094dd21": "getLLV_edit_14()", +"d095761f": "withdrawNetIncome()", +"d095d499": "profit3eggs()", +"d095edb2": "initializeModuleAddresses(address[])", +"d09677df": "TankSellMaster()", +"d09685b0": "getEntriesCount()", +"d096b8f0": "setupRaffle()", +"d0973af8": "transferTokensFromContract(address,uint256)", +"d09812e1": "settlementRegistry()", +"d0982feb": "tokenLockDuration()", +"d0983f4b": "tokenRatios()", +"d0988149": "MANHATTANPROXYMADISONAVE()", +"d0995198": "returnMinGoal(uint256)", +"d0995b33": "refundBalances(address[])", +"d09a6a62": "transferUnlock()", +"d09b0ae4": "RealEstate()", +"d09cb807": "isCurrentAdmin(address,address)", +"d09de08a": "increment()", +"d09e21ee": "ignore(bytes4,bool)", +"d09e3526": "setStatusI(address)", +"d09eae58": "SCAMToken()", +"d09edf31": "authorizer()", +"d09ef241": "getOrder(uint256)", +"d09f85ca": "Eventine()", +"d09f872a": "VenusToken(uint256,string,string)", +"d09f8b8b": "addXY(uint256,uint256,uint256,uint256)", +"d09fb45e": "setApprovedContracts(address,bool)", +"d09fbcee": "HumanTokenAllocator(address,address,address,address,address)", +"d0a05fea": "setI_S(uint256)", +"d0a06fb9": "cloneCard(address,uint256)", +"d0a1adf4": "contains(bytes1,bytes1)", +"d0a27473": "teamUnlock1()", +"d0a2da8e": "give(address,uint256,string,string)", +"d0a2f2c4": "getAllInvestors()", +"d0a45f84": "getVersionImplementation(address,bytes32,address,bytes32,bytes32)", +"d0a4a81b": "setTellerModerator(address)", +"d0a56299": "GetAssetTypeAverageSalePrice(uint256)", +"d0a579fb": "releaseForEarlyInit(address[],uint256)", +"d0a5eb4e": "setMainWallet(address)", +"d0a61995": "sell_(address,uint256)", +"d0a62566": "approveIndexed(address,uint256)", +"d0a63663": "incrementLimitBranch()", +"d0a6f018": "LogBalanceChange(address,uint256,uint256)", +"d0a6fa54": "getPriceById(bytes32)", +"d0a7b467": "setAragonDevMultisig(address)", +"d0a826f3": "setWildcardList(address,address,bool)", +"d0a835e3": "buyShip(uint32)", +"d0a8c801": "fshare()", +"d0aa0313": "setCompte_38(string)", +"d0aa407f": "withdrawEther(bytes32,uint256,uint256,uint256[])", +"d0aac5cf": "teamProfile(uint256)", +"d0ab0066": "calcFlexibleReward(uint256)", +"d0ab48e9": "toB32(bytes,uint256,bytes,address)", +"d0ab8432": "whitelistRegisteredAmount(address)", +"d0ac01ac": "setOfferExpiry(uint256)", +"d0ac2252": "getShipEarning(uint32)", +"d0ad7fb8": "buyTicket(uint256[],address)", +"d0ade72d": "assertEquals(uint256,uint256)", +"d0ae4356": "getRequestStatus(address,address)", +"d0ae9aec": "setMinInvest(uint256)", +"d0aff67d": "setNeverdieContractAddress(address)", +"d0b01e68": "__setBeneficiary(address)", +"d0b02abc": "createProductionUnit3()", +"d0b06f5d": "lastUpdated()", +"d0b0c0d5": "unlockDevTokenSupply()", +"d0b18fbf": "transferByForce(address,address,uint256)", +"d0b1b910": "FXSToken()", +"d0b2b579": "seedFund()", +"d0b368a0": "addToApproveList(address)", +"d0b3da99": "join(uint256,bool)", +"d0b4755c": "RATE_SALESTAGE1()", +"d0b52156": "getIpfsHash(address,address)", +"d0b5981f": "closePreICOPublic()", +"d0b68efb": "yoobaTokenAddress()", +"d0b6ba2a": "moveFunds()", +"d0b74806": "claimA()", +"d0b753f3": "sendPreSaleBonus(address,address)", +"d0b7ca57": "mintToken(address,uint256,bytes,bytes)", +"d0b83db9": "insertUser(address,bytes32)", +"d0b86d15": "FaradEscrow()", +"d0b8bc84": "OwnerUnfreeze(uint256,address)", +"d0b91ca7": "showBurnedCoins(address)", +"d0b94ffe": "web3ViewRoll(bytes32,bytes32,uint256,uint256,uint256)", +"d0b99ee2": "_distributeLandholderTax(uint256)", +"d0b9e58b": "SspContract(address,address,address,uint256,string)", +"d0b9e792": "returnBorrowedEth()", +"d0bb1d40": "airdropsCount()", +"d0bc1a88": "addMoney(uint256)", +"d0bc97d0": "isCrowdsaleFull(uint256,uint256)", +"d0bcebc8": "collectBack3()", +"d0bcfc0c": "Bankroll()", +"d0bec975": "countBid(uint8)", +"d0bf4d95": "SmokeExchangeCoin(uint256,address,address,uint256,uint256,uint256)", +"d0bf9502": "btcLastUpdate()", +"d0bff051": "testSetBalanceDb()", +"d0c03f35": "multisigVault()", +"d0c0c39c": "countTokens(uint256,address)", +"d0c1c844": "getLimitedBalanceOf(address)", +"d0c1d117": "editAddressDescription(address,string,address)", +"d0c24e93": "setNotUpdatable(bytes20)", +"d0c3033c": "generalBounty()", +"d0c32dd3": "otcPurchase(uint256,address)", +"d0c32ea9": "SearchALLFileLength()", +"d0c39f14": "Lottery(address)", +"d0c412ec": "ENDOairdrop()", +"d0c426e6": "burnAllRemainingIBC()", +"d0c475e5": "addRecordStrict(uint256)", +"d0c55ea9": "withdrawForPartner(bytes32,address,uint256)", +"d0c5c585": "getBurnAmount()", +"d0c5c946": "refundBpToken(address)", +"d0c75ea2": "verifyCommonTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"d0c7b012": "placeGame(uint24,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"d0c7c635": "mintToTeamAndAdvisors()", +"d0c8a7a5": "randgen()", +"d0c9bb92": "releaseTCLRinTeamTokens()", +"d0ca12ba": "ICO_START()", +"d0ca1982": "getCrowdsaleInfo(address,bytes32)", +"d0ca4dd7": "ownerWithdrawTokens(address,address,uint256)", +"d0ca5e7a": "createTokenToMarket2020()", +"d0ca7379": "mintReferralShare(uint256,address,uint256)", +"d0cac952": "HouseManaged()", +"d0cb874a": "getTokenByMineID()", +"d0ccf4bc": "createInstance(bytes32,bytes32,address,bytes,bytes32,bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"d0ce659f": "SwitzerlandvsCostaRica()", +"d0ce7360": "closeContract(uint256)", +"d0cf49e9": "zoLastRefreshTime()", +"d0d0ed05": "withdrawVault()", +"d0d13e87": "smartContractIsForSale(uint256)", +"d0d1ea70": "setTrustee(address)", +"d0d2e745": "manualExchange(address,uint256)", +"d0d38b65": "setFirstRankForFree(bool)", +"d0d390bf": "HubToken(address)", +"d0d3b9df": "IfModuleRegist(address)", +"d0d3f5ba": "removeNode()", +"d0d44cca": "setPOOL_edit_34(string)", +"d0d511f9": "getGoalsCount()", +"d0d529a7": "openWindow()", +"d0d552dd": "setAsset(address)", +"d0d68241": "betALenght()", +"d0d832ad": "fundraiseType()", +"d0d89ce3": "cummulativeTokensSold()", +"d0d968c0": "burnFromReserve(uint256)", +"d0d98276": "revokeOffer(address)", +"d0d9e21d": "emitCapabilityAdded(address,bytes4,uint8)", +"d0d9fcf7": "RANGE_STAT_MAX()", +"d0da3e86": "getNextAntiReplayTag(uint256)", +"d0dad7e1": "maxCapMain()", +"d0db5083": "hatch()", +"d0dc0a04": "all_creatures_for_species(uint256)", +"d0dc5c65": "updateTotalSupply()", +"d0dd38ad": "setDepositGasCost(uint8)", +"d0de7b29": "MetadiumVesting(address,uint256,uint256,uint256,bool)", +"d0def521": "mint(address,string)", +"d0e075c7": "BitcoinPurple()", +"d0e0813a": "promote(address)", +"d0e0ba95": "setId(uint256)", +"d0e0e8f6": "isLockedConfig()", +"d0e2bef0": "initFactorReward(uint256,uint256,uint256,uint256)", +"d0e2dc64": "playAway()", +"d0e30db0": "deposit()", +"d0e33b1b": "testGetResults()", +"d0e3cbbe": "getCurrentTotalEther()", +"d0e3f734": "setPubkey(string)", +"d0e4567e": "activeGroups()", +"d0e46235": "buyCardsAndSendGift(uint8,address)", +"d0e4713d": "CEC()", +"d0e55727": "changeOfferTime(uint256,uint256)", +"d0e6cfec": "bountyTokenWallet()", +"d0e709b6": "initialTransfer(address,uint256,uint256)", +"d0e7a5cb": "editPrice(uint256,uint256)", +"d0e95ded": "MithrilOre()", +"d0e98c14": "sendRestBack()", +"d0e9f00f": "BNTBalance()", +"d0ebdbe7": "setManager(address)", +"d0ec057e": "getFeeAmount(uint256,bool)", +"d0ec1607": "cancelPoll(uint256)", +"d0ed5c2f": "walletContract()", +"d0edf912": "createTransaction(address,uint256,uint256,uint256,uint256)", +"d0ee32c4": "getSymbolFromAddress(address)", +"d0ef1048": "_getRand()", +"d0ef368d": "setAllocation(address,address,uint256,uint256,uint256)", +"d0eff891": "weiToEther(uint256)", +"d0f040c4": "checkOwnerAllowance(address)", +"d0f0efcb": "buyPredictXname(bytes32,uint8)", +"d0f13638": "minimumPrepaidClaimedPercent()", +"d0f15e9e": "WalletWithEmergencyTransfer()", +"d0f17d41": "contributionMaximum()", +"d0f2019c": "hasToken(address,address)", +"d0f3235d": "_transferAirdrop(address[],uint256,bytes)", +"d0f3aa80": "allowSale()", +"d0f46c0b": "getUsersContract()", +"d0f4f99c": "solvePuzzle(uint256)", +"d0f5f4cd": "getPixelColor(uint16,uint16)", +"d0f6fc40": "QuantityFactorSet(uint256,uint256,address)", +"d0f76bb8": "End3()", +"d0f7a601": "etherRate()", +"d0f817db": "getOrgCertificatesCount(address)", +"d0f86c9d": "getUser(int256)", +"d0f86ea8": "getMemoryRead(uint256,uint256)", +"d0f86fec": "ENKToken()", +"d0f87ce7": "periodPreITO_mainCapInWei()", +"d0f89c6d": "setWhiteBackersByList(address[],bool[])", +"d0f8c714": "add(bytes32,uint256,bytes,bytes8)", +"d0f8e6a4": "DelegationTransferred(address,address)", +"d0f96983": "composite(uint256,uint256,uint8)", +"d0f96f6b": "DigitalPadlock(string)", +"d0fa968a": "s14(bytes1)", +"d0fab480": "meg()", +"d0fb8909": "activations(address)", +"d0fbb9e4": "claimRemainEth(uint256)", +"d0fbe7fe": "buyTickets(uint256[])", +"d0fc1e7d": "getFrequency(bytes32)", +"d0fc2782": "multisigs(uint256)", +"d0fc35cf": "StandardFormula()", +"d0fc899a": "presaleInvestorsETH(address)", +"d0fca0ca": "gogo(bytes,bytes,address[])", +"d0fe3e85": "releaseTokensTo(address)", +"d0febda9": "getModerator(address)", +"d0febe4c": "buyTokens()", +"d0fef78f": "Visor()", +"d0ffecaa": "setWhaleMax(uint256)", +"d10032dc": "getTokeRate()", +"d1013fec": "endTimeSale1()", +"d101d3b2": "timelock(address,uint256,uint256,uint256,bool)", +"d1026aa8": "YESToken()", +"d10271a1": "OxProtocol()", +"d103449c": "addURL(string)", +"d1037a11": "swap(uint256,address,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"d1042e31": "getUserReward(address,address,bool,bool,bool)", +"d1047434": "getFactoryCount()", +"d1048bc9": "reserveVanityURLByOwner(address,string)", +"d104a136": "getBase()", +"d104bca2": "getUnitsAttack(address,uint256,uint256)", +"d1051a68": "DynamicToken()", +"d10523b7": "GoldenLightChainToken(uint256,string,uint8,string)", +"d105350b": "getLockedBalance(address,uint8)", +"d10541ab": "changeIdentityEthAddress(address)", +"d1058e59": "claimAll()", +"d1073bdb": "setBitwordsCut(uint256)", +"d107a5cc": "freezeAllowance(address,uint256)", +"d108177a": "removeEmployee(address)", +"d10865a7": "endSecondWeek()", +"d108b7d4": "KyberContributorWhitelist()", +"d108ffc0": "tokenToWei(uint256)", +"d1092be8": "transferAllowedDelete(address)", +"d1096155": "requireOnce()", +"d10a5e1d": "lockBalance(uint256,bool)", +"d10ac7eb": "balanceOfComisionDone(address)", +"d10adfe3": "setPricing()", +"d10aee9c": "mainPlayer()", +"d10bc924": "seeCurrentParticipants()", +"d10c3d1d": "removeFromInitialSupply(uint256)", +"d10c504f": "has_voted(address)", +"d10ceb47": "setConsolationRewardsPercent(uint256)", +"d10d42eb": "Dividend(address)", +"d10da303": "_createLinglongCatWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"d10db2e1": "addCar(address,uint8,uint16)", +"d10e10b3": "testCanFinalizeEndedSale()", +"d10e23c8": "ClothingCoin()", +"d10e73ab": "createIdentity(address,address)", +"d10e99fe": "mint(int256,bytes32)", +"d10f6de9": "_requestSignature(bytes32[8],bytes)", +"d1100691": "BookCafe()", +"d1104bd3": "SLRC()", +"d110f0e6": "LEGAL()", +"d1110c5f": "buyMicroKeysWithHandle(string,string)", +"d11127c0": "lastBlock_f18()", +"d1120db0": "size2()", +"d112cf30": "PCNCoin()", +"d114751e": "getWeightRange(uint256,uint256,uint256)", +"d1153f25": "bugFund()", +"d1159747": "PREICOstart()", +"d115cac6": "joinTournament(uint256)", +"d115f02d": "updateMinReward(uint256)", +"d116c8c4": "releasePayment()", +"d11711a2": "participate()", +"d1180c98": "Lotoblock()", +"d11831c3": "generateHash()", +"d1190b7f": "changeTransferStepLock(bool)", +"d1195c48": "transferNashOut(address,uint256)", +"d119db4c": "addScore(address,uint256)", +"d11bd1a6": "sendContingencyFunds()", +"d11bee0f": "STSTEST6()", +"d11cd4c6": "changeStartPrice(uint256)", +"d11d8526": "isValidProductID(uint256)", +"d11db83f": "getPendingTransactions()", +"d11e77e4": "REIToken()", +"d11f13df": "numberOfParticipantsWaitingForPayout()", +"d11f5b9f": "VictorieumNewICOToken()", +"d11ffc55": "referralSupply()", +"d1206a29": "unlockRewardTokenMany(address[])", +"d120a284": "getBytesFromNumbers(uint8[3])", +"d120a4f2": "setUnderCollaterizedPosition()", +"d1211a71": "Solarex()", +"d1226567": "bulletAmount(address)", +"d1237220": "LogId(address,uint48)", +"d1239730": "mintEnabled()", +"d123b6e2": "ensureRegulated(address)", +"d1241e67": "getProductIdAt(uint256)", +"d125a7e2": "partialRefund(uint256)", +"d1260edd": "userDeposit(address)", +"d126ae0c": "TRLCOIN_DECIMALS()", +"d126dac4": "cashout(address,address,uint256)", +"d1279ea8": "AddTrust(address,uint256)", +"d127bb9d": "currentElement()", +"d12892e4": "setGiftMode(bool)", +"d128f2de": "cancelOwner()", +"d128fc20": "allocateTokensForFounder()", +"d1295eca": "ENDRoot()", +"d1295f13": "DTRACK()", +"d129ee38": "MediatedTransaction_Protection_Seconds()", +"d12a039c": "_getTokenBalance()", +"d12a0a2e": "icoClosed()", +"d12a6049": "setWeiLockSeconds()", +"d12a7b42": "whitelistResolver(address)", +"d12b51c0": "changeUserEduExp(bytes32)", +"d12b88a6": "SelimToken()", +"d12c08bf": "EGGS_TO_HATCH_1BULLS()", +"d12c1e28": "badgesOf(address)", +"d12c7b52": "WarToken()", +"d12d5c47": "ReferredBonusTokensEmitted(address,uint256)", +"d12d9510": "DFTBToken()", +"d12e0b2a": "MultiOwnable()", +"d12f6938": "crowdSaleStatus()", +"d12f7029": "STARTING_PRICE()", +"d1301074": "grantTokenOwnership(address)", +"d13091ed": "newGoal(bytes)", +"d1314ee0": "getBroker()", +"d1315ea3": "ISRA()", +"d131a803": "FetchlastHacker()", +"d131ab1e": "UpdatedTokenInformation(string,string)", +"d131af30": "precisionMinimum()", +"d131dfb8": "setFirstStageStartsAt(uint256)", +"d13209f9": "unhold()", +"d132391a": "setSaleEndTime(uint256)", +"d132a8f4": "totalBuyTokens()", +"d132eb02": "ProposalPassed(address,address,uint256)", +"d13319c4": "getHash()", +"d1342958": "refuseKyc(address)", +"d134474c": "winnings()", +"d134f4aa": "challengeCanBeResolved(string)", +"d1351e94": "getRoundPlayerKeys(uint256)", +"d1354f64": "ReceiveTips(address,uint256)", +"d135ae6e": "isSignedByToly()", +"d135cc4b": "withdrawLocked()", +"d135df42": "CONEGTY()", +"d1366f17": "sellerRequestCancel(uint16,address,address)", +"d136a579": "claimEarlyIncomebyAddressRound(address,uint256)", +"d1375f76": "COIN_SUPPLY_ICO_TOTAL()", +"d1376daa": "getClosingLine()", +"d13782a7": "addStage(uint256,uint256,uint256)", +"d137874b": "getDiscount()", +"d1382092": "getNumTokens(address,uint256)", +"d1384eb6": "institution()", +"d13936fe": "connectOrderPrice(address,address,uint256,uint256)", +"d1397162": "icoOverview()", +"d13a3386": "withdrawSale2()", +"d13a64d3": "getYanCoefficient(uint256,uint32)", +"d13a73c4": "numberOfStages()", +"d13a7efd": "earlyResolveB()", +"d13b54b7": "getGameAmount(address,uint256)", +"d13bf769": "foundersFundTimelock2Address()", +"d13c9c1e": "allocatePresaleTokens(address,uint256,uint256,uint256)", +"d13cb1fb": "fundings(uint256)", +"d13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"d13daa79": "TestTokenERC20()", +"d13e0808": "nextCommonTTMTokenId8()", +"d13e2a6a": "Wei_Remaining_To_ICO_Cap()", +"d13e5846": "tokenHolderCount()", +"d13e79ec": "getUSDRaised()", +"d13ea9ca": "setMinesPrice()", +"d13f092e": "setRaffleLimit(uint256)", +"d13f90b4": "initialize(address,address,uint256,uint256,uint256)", +"d13f9d55": "newIteration(uint256,string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"d1407bec": "TraceCrowdsale()", +"d141138e": "getServerMoneyBag(uint256)", +"d1414b20": "_withdrawOrderBalance(uint256,address)", +"d14192ba": "numParameters()", +"d141b610": "MembershipPaid(address,uint8,uint256)", +"d1428e7a": "ratioFor(uint256,uint256,uint256)", +"d142bc5c": "individualWeiCollected(address)", +"d143dad0": "getLineSum(uint256)", +"d1442e93": "getStrField2()", +"d1472046": "CollectChips(address,uint256)", +"d14779c4": "signDigitalContract(string)", +"d1477f7b": "setInitialTokenValue(uint64)", +"d1479575": "creditcoinLimitInFrac()", +"d1482791": "updateInterest()", +"d148288f": "setHoldingPeriod(uint256)", +"d14ac7c4": "crowdSaleAllowance()", +"d14b2f9b": "addBonusToken(address,uint256)", +"d14b691d": "_resetReleaseTime(address)", +"d14cd233": "tokenSpread()", +"d14e1784": "paymentForWeek(uint256)", +"d14e62b8": "setCount(uint256)", +"d14ebab3": "NXE_Coin()", +"d14f17f7": "airdrop(address[],address)", +"d14f56f1": "moveUnsold()", +"d14f9219": "ham()", +"d150f835": "currentDonation()", +"d150fbe6": "convertToInd()", +"d151ec28": "getMadeTXFund(uint256)", +"d152865b": "getLastDIVDPeriod()", +"d15334a5": "firstVestAmount()", +"d15376a7": "lastBlock_f14()", +"d1538303": "docdetail(uint256,string,string)", +"d15392b2": "forceRelease(uint256)", +"d153ab40": "addMultipleTier1Members(address[])", +"d153b60c": "proposedOwner()", +"d153d118": "MyDice()", +"d1541264": "getManagerForCount(address)", +"d1555f1f": "approveCommitmentTransfer(address)", +"d1558b7c": "referrersCount()", +"d155908b": "addone()", +"d155feec": "EdisonCoin()", +"d156549f": "setExpiredAndWithdraw()", +"d1571996": "multisigOwner()", +"d1572e4c": "setResource(string,string,address)", +"d1577656": "purchaseTo(address)", +"d157e816": "MiningExtended(uint256,uint256,uint256)", +"d157ee04": "approveNextManager(address)", +"d157f27d": "sendAdvisorsSupplyToken(address)", +"d157f645": "setPaymentInterval(uint256)", +"d1587a18": "getAvailableRewardForUser(bytes32,address)", +"d1594403": "manualTransferTokensTo(address,uint256,uint256,uint256)", +"d15b506b": "TokenROC()", +"d15b95b4": "delegateDklBidAuction(uint256,uint256,bytes,uint256,uint16)", +"d15b9614": "GetLogMessageError()", +"d15c11e5": "providerRegistry(address)", +"d15c82e3": "reserveManyTokens(uint256[],uint256,address)", +"d15cfa25": "ChronoMint(int256,address,address,address)", +"d15d2745": "CLE_Beta_Pictoris()", +"d15d62a7": "getLibrary(uint256)", +"d15db5fb": "_computeBackground(uint256)", +"d15e06a0": "registerCrowdsales(address,uint256,uint256)", +"d15e1014": "marketingTokensPercent()", +"d15e3170": "payoutVoter(uint256,uint256)", +"d15e9459": "stopAddressesTotal()", +"d15ecbc2": "simulatedBlockNumber()", +"d15ee9ff": "setUsersCanTrade(bool)", +"d15f10cc": "acceptSubmission(uint256)", +"d15fc954": "wallet_Address()", +"d16058df": "getPayOrderKey(uint256)", +"d1613036": "releaseTokenTransfer(bool)", +"d1613731": "adminGetBalance()", +"d1614df3": "individualMinCap()", +"d1615300": "startWeekTwo()", +"d161b56a": "tokensMintedDuringICO()", +"d1622424": "_checkAgreement(address)", +"d1631361": "ms0()", +"d1632f67": "assignFundReceiver(address,uint256)", +"d16352af": "getProtocol()", +"d163b764": "row(uint32)", +"d163fcab": "getCurrentHero()", +"d1650f7f": "test_oneValidEqStringNoLog()", +"d1651786": "donateUnicorns(uint256)", +"d165288e": "setAllowMining(bool)", +"d165d7cd": "registerNameXnameFromDapp(address,bytes32,bytes32)", +"d1660f99": "safeTransfer(address,address,uint256)", +"d16617ae": "restartMiniGame()", +"d166539b": "_migrate(uint256)", +"d16712ed": "maxGoalReached()", +"d16782f6": "testMetered()", +"d1682600": "StandardToken(uint256,string,uint8,string)", +"d16856ca": "addAdmin(address,string)", +"d16865a3": "PRIORITY_ADDRESS_LIST()", +"d168f699": "Glv(uint256,string,uint8,string)", +"d1698430": "revokeAllTokenGrants(address)", +"d169a020": "evMgmtIssueBountyToken(address,uint256,address,uint256,bool)", +"d169c869": "endOfPreSale()", +"d16a7a4b": "FreezeAccount(address,bool)", +"d16a8fe7": "kickMember(address)", +"d16a9624": "winBidEth(address,address,uint256,uint256)", +"d16b04cf": "myCoinAge()", +"d16b6473": "getOnTokenTransferToValue()", +"d16be71b": "teamTokensDelivered()", +"d16c4cf5": "FOUNDER1()", +"d16e1ded": "requestTransferItem(address,address,string)", +"d16e443a": "previousDelegates()", +"d16e92db": "createCrowdsale(uint256,uint256,address,address,address,address,uint256,uint256,bool)", +"d16edc15": "chargeFeePool()", +"d16f8669": "crowdsaleClose()", +"d16ff4c8": "nextCandidateId()", +"d1701397": "Flip1Token()", +"d17222dc": "CATContract()", +"d1724881": "getBroker(address)", +"d17291bd": "icoRunning()", +"d1729a4a": "sendTokensManually(address,uint256)", +"d172d6fc": "playFast()", +"d1734eac": "isInNextGeneration(address)", +"d173707d": "hasPhysicalAddress(address)", +"d1738b72": "wroomWroom()", +"d173d531": "Amalgam()", +"d173e578": "setInitialAllocationLock(address)", +"d173fc82": "setTokenAdmin(address,address,address,address)", +"d1746107": "teamTokenRatio()", +"d174c388": "tokensaleToOtherCoinUser(address,uint256)", +"d1759141": "massEthFund()", +"d175958f": "cancelApproveForAll(uint256)", +"d175d38d": "calculateBonus(uint32)", +"d176be98": "DonorCrowdsale(uint256,uint256,uint256,address,uint256)", +"d1776731": "userToRobots(address,uint256)", +"d1778ed7": "UltrixCoin()", +"d177e6a6": "fillOrder(address,address,uint256,uint256)", +"d1786610": "getTokenRemaining()", +"d1789176": "AMOUNT()", +"d179eb71": "clonedFrom()", +"d17a1b5b": "SetAccessType(uint32)", +"d17a79c1": "totalNormalEtherCollected()", +"d17aa842": "GetDivPerCoinLarge()", +"d17ab3c6": "free2Of(uint256)", +"d17be133": "getAllHousing()", +"d17cf29f": "retrieveWarriors(address,address,uint8)", +"d17d0d29": "SITExchangerMock(address,address,address)", +"d17d25de": "marketingTokenAddress()", +"d17e45fb": "s23(bytes1)", +"d17e4889": "decodeProps(uint256)", +"d17f5d9d": "indice_vincitore()", +"d17f7142": "isLocked(uint256,uint256,address,address)", +"d17fd539": "_newInterest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d1802d79": "mintEGAS()", +"d18063cd": "registerParticipantAgent(address)", +"d1809fe8": "depositLiquidateThePool()", +"d180be1d": "isMemberOf(address,address,string)", +"d180d0bc": "_deliverTokens(address)", +"d180ebca": "FinishIco()", +"d1812be7": "newCustomFutureLottery(uint256,uint256,address,uint256)", +"d18165f6": "OEN()", +"d1818aed": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"d181c37e": "NecroToken()", +"d182b4ff": "CurrencyHedge()", +"d182b83b": "validate(string)", +"d182d253": "ICO_PHASE1_LIMIT()", +"d183434d": "accountsBalances(uint256,address)", +"d1835b8c": "left21(uint256)", +"d184194b": "Smw()", +"d184935d": "getDebug()", +"d184adf6": "distributeToAddressesAndAmounts(address[],uint256[])", +"d184b88e": "AddedPrepaidTokensEvent(address,uint256,uint256,uint256)", +"d18523ac": "TimeDestroy(address)", +"d185c583": "ownerWithdrawFees()", +"d185f378": "_owns(bytes32,uint256)", +"d18611d6": "reactivate()", +"d1866019": "GetReferredCount()", +"d186659d": "setRateIcoMainSale(uint256)", +"d186899a": "issueAndLock(address,uint256)", +"d18746ed": "BonusChanged(string,uint256)", +"d188f550": "setPlayerGeneralLv(uint64,uint8)", +"d1893d23": "oldusesr(address,address)", +"d189b98d": "firstPrivateReleaseTime()", +"d189c1b0": "createUserByEmail(bytes32,bytes32,uint256)", +"d18a5563": "depositsStack(uint256)", +"d18ad4de": "getPlayerAff(address)", +"d18b07b2": "calculateCommission(uint256,uint256)", +"d18b93e6": "_owns(address,uint256,uint256)", +"d18c5da7": "FrogDaruma(address,address,address,uint256,uint256,uint256)", +"d18d944b": "setHardCap(uint256)", +"d18df96c": "vault_enableRefunds()", +"d18dfdc9": "parrot(uint256)", +"d18e031e": "verifyDeed(string)", +"d18e142d": "Announcements(uint256)", +"d18e81b3": "currentTime()", +"d18ffb8d": "inversorIsKyc(address)", +"d19003e5": "_endOfPreICO()", +"d1900a04": "TRCTotalSupply()", +"d191b336": "AdjustBetAmounts(uint256)", +"d191d7f4": "OPERATIONS_SHARE()", +"d191e11d": "rateSystem(address,uint256)", +"d192367b": "randomA()", +"d1925b80": "YACHT()", +"d1933a1b": "goalManagment(bool)", +"d19370bb": "resetKYC(address)", +"d1938376": "get_payment_by_id(uint256,uint256,address)", +"d193a0ca": "splitsSingle(uint256,uint256)", +"d1940a16": "announce(uint256)", +"d195bbd5": "AywakeToken(address,address)", +"d195ef83": "mintAdminApproval()", +"d195fd28": "RESERVED_BOUNTY_SIDE()", +"d1976a6f": "completeGame(uint256,uint256,string,address)", +"d19853c7": "exchangeBounty(address,uint256)", +"d1987a28": "setTradeRobot(address)", +"d1988b6a": "getGameHash(uint256)", +"d199168d": "claimedTokens(address,uint256)", +"d199c81d": "TokenSale(uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"d19b8d87": "refundManagerContractAddress()", +"d19b99b5": "turnMigrateOff()", +"d19c395f": "capPreICOTrasferred()", +"d19d1912": "getSelfGroupsContributedTo()", +"d19d8e1a": "Ethereumbonus()", +"d19e09ce": "setDefaultAccountingPeriodSettings(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"d19e1ad4": "_calculateNewPrice(uint256)", +"d19e2364": "addDonateTokenAddress(address)", +"d19e6cf0": "ChangeDeadLine(uint256,uint256,uint256,string,uint256)", +"d1a0cc5c": "processPayment(address,address,uint256)", +"d1a0e8c8": "setFeeRebatePercent(address,uint8)", +"d1a132f9": "enableNodeRegistration()", +"d1a1beb4": "mint(address,uint256,bool)", +"d1a1f5ba": "addSongData(string,string,string,string)", +"d1a2749c": "Crowdsale(address,uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"d1a2bfaf": "Wallet_Initial_Supply()", +"d1a2dfd2": "isExistingDataIdentifier(bytes32)", +"d1a301e3": "setInitialBlockHeight(uint256,uint256)", +"d1a3d3ad": "assertEq9(bytes9,bytes9)", +"d1a3fb20": "updateUserRatio(uint256,address)", +"d1a40ce1": "_rewardVote(address,address,uint256)", +"d1a4a98c": "BeBitcoin(uint256,string,uint8,string)", +"d1a61025": "tradeBookOf(address)", +"d1a634e6": "OVC()", +"d1a69455": "get_enode_by_row(uint256)", +"d1a6ed67": "setFunctionIdSubcontract(bytes4,address,uint256,uint256)", +"d1a75e0d": "VOTE_FOR()", +"d1a75fea": "createTreatyRequest(uint8,string,uint256)", +"d1a7d1a8": "MyPinerTokenTest2()", +"d1a8d447": "get_all_bet_values()", +"d1a94e58": "TXOtoken()", +"d1a9eb19": "withdrawToContractOwner(uint256)", +"d1a9f5be": "createFileWithContents(string,uint256,bytes32[],uint256)", +"d1aadb6a": "setColour(uint8,uint8,uint8)", +"d1ab0457": "AddSoftware(string,string,bytes32,bytes32,bytes32)", +"d1abdab8": "divideDecimal(uint256,uint256)", +"d1acb464": "CreatedLoan(uint256,address,address)", +"d1ae0488": "transferBecauseOfAggregate(address,uint256,address,uint32,uint256[],uint256[])", +"d1ae2f01": "getVictim(uint16)", +"d1ae956f": "isPayed(uint256)", +"d1ae9607": "LFSTYLToken()", +"d1aea543": "forwardFunds(address)", +"d1af8a5a": "LinkerExample()", +"d1afaf1f": "addusertime(address)", +"d1afdb86": "buyAllowed()", +"d1b12b4e": "extCreateBot(uint256,uint256,uint256,uint256,address)", +"d1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", +"d1b1b65a": "rangeETHAmount()", +"d1b31a63": "cryptobank(bytes32,bytes32)", +"d1b33094": "addAccessor(address,uint8)", +"d1b33afa": "_calculateDayPass()", +"d1b39ae5": "decimalOffset()", +"d1b4ff7e": "multiAccessRevokeD(bytes32,address)", +"d1b53d2d": "tryFinalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", +"d1b5e2be": "testFailRegisterContractIdAgain()", +"d1b648cd": "contractSendGas()", +"d1b6a51f": "finishEthGetToken()", +"d1b6dd30": "airdropClaimed(address)", +"d1b7cb9b": "transferBatch(address[])", +"d1b878e9": "getresult(uint256)", +"d1b9c430": "OPEN()", +"d1ba656b": "minimumTransferInWei()", +"d1ba8257": "SIX()", +"d1baaf58": "communityRoundStartDate()", +"d1bab4cc": "batchApprove(address,uint256[],uint256[],uint256[])", +"d1baceac": "DepositBank(address,uint256)", +"d1bb0433": "preSaleTokensPurchased()", +"d1bb5cf1": "marketplaceContract()", +"d1bb7b59": "tokensPerWeiBonus111()", +"d1bb8688": "ICO_SHARE()", +"d1bba64f": "Investment()", +"d1bc2cc4": "transferGift(address,address)", +"d1bc4157": "KanZhang()", +"d1bc5c8e": "KryptoroToken()", +"d1bc62de": "EARLY_FOUNDERS_USD()", +"d1bc76a1": "recipients(uint256)", +"d1bcbf6c": "_isReady()", +"d1bd328b": "bonusFirstIco()", +"d1bd56c1": "TripleT()", +"d1bdf639": "cards_black_check(address)", +"d1be7cc4": "serverPortUpdate()", +"d1bf942a": "rok()", +"d1bf9aba": "nextRune()", +"d1c01b26": "Crowdsale(address,address,uint256,uint256)", +"d1c06b2f": "availablePositions()", +"d1c1132f": "lockInTreasury()", +"d1c13abd": "returnRental()", +"d1c15acf": "OWNERS_AND_PARTNERS_SUPPLY()", +"d1c19fbc": "Withdrawn(address,address,uint256)", +"d1c1f19f": "NewPlay(address,uint256,bool)", +"d1c2babb": "merge(uint256,uint256)", +"d1c31f10": "tokenLockUp(bool)", +"d1c332c7": "preDistriToAcquiantancesStartTime()", +"d1c43558": "TheExtraordinarySpacemen()", +"d1c46916": "releaseLock(address)", +"d1c484f6": "proposedRecoveryKeyPendingUntil()", +"d1c4c206": "setRoute(string,address,bool)", +"d1c5e119": "getMyAnotherDragon()", +"d1c673e9": "transferAndCall(address,uint256,uint256,bytes)", +"d1c693f8": "TOTAL_TOKENS_FOR_PRICE()", +"d1c699aa": "exerciseFee()", +"d1c6b0ca": "setBonusAmount(uint256)", +"d1c6f448": "updateInitialRate(uint256)", +"d1c72c89": "isInRoundTwoState()", +"d1c73322": "tokenHardcapReached()", +"d1c7a6ac": "ActivationWithdrawal(address[2],uint256[8],uint256,uint256)", +"d1c7be4d": "_pushLuckyInfo(uint256,uint8,address,uint256)", +"d1c85478": "GGRocketToken(address,string,string,uint256,uint256)", +"d1c8e7e6": "charityDonation()", +"d1ca0218": "issueToken(uint256,uint256,uint256)", +"d1cb0f0f": "getAllTombs()", +"d1cb923c": "HUNDREDTIMES(uint256)", +"d1cb993d": "grantAllowance(address,uint256)", +"d1cbfc66": "getOneTotalFeesDistributed(uint256)", +"d1cbfe65": "setRefferal(address)", +"d1cc9976": "isTerminated()", +"d1cd19cf": "advisorCut()", +"d1cd7bfa": "setSUTokenContract(address)", +"d1cdcf71": "PRICE_STAGE_FOUR_BONUS()", +"d1cdfe84": "Bonus_PoolTransfer(address,uint256)", +"d1ce017c": "getABIHashForMod(bytes32)", +"d1ce36aa": "unLockIdx()", +"d1ce65ab": "isCryptoRomeLandComposableNFT()", +"d1cec3ac": "CrowdSaleTest()", +"d1cf113e": "multiAccessSetRecipient(address)", +"d1cfe644": "EventCashOutTank(address,uint256)", +"d1d115ac": "test_fourInvalidEqUint(int256)", +"d1d1c8ae": "ConvertNumbers(bytes)", +"d1d1f264": "setSubscriptionStatus(bool,bytes32)", +"d1d2bd55": "calculateRangeLength()", +"d1d3a898": "_createElement(uint256,string,address,uint256,uint256)", +"d1d3bb92": "testSetPkg()", +"d1d3d8a6": "MintLog(address,uint256)", +"d1d422f6": "roundEvent(address[6],bytes32[6])", +"d1d46d2b": "setChestPrice(uint16,uint256)", +"d1d4c4c6": "safeDiv(int256,int256)", +"d1d5190c": "changeStart(uint256)", +"d1d53493": "setMaximalInvestmentTimeTreshold(uint256)", +"d1d566cf": "allocateExtraTokens(address)", +"d1d5824d": "maxBetThresholdPct()", +"d1d58b25": "claimable(uint256)", +"d1d675e4": "setMaximumCoinsPerAddress(uint256)", +"d1d6d639": "EstimateGas()", +"d1d6e44a": "paintGraffiti(uint256,string,string)", +"d1d80fdf": "setAddr(address)", +"d1d8fd65": "TransferCoins(address,uint8)", +"d1d93318": "createAvatar(string,uint256)", +"d1da09ee": "extractImportFeeChargeLength()", +"d1da8436": "setAdData(uint256,string,string)", +"d1db1cc4": "LogRefundingOpened(uint256)", +"d1db99b6": "INR_Omnidollar()", +"d1dbcd70": "isNodeTLDOfRegistrar()", +"d1dc3706": "LogReceivedETH(address,uint256)", +"d1dc72a0": "METAHASHCOIN()", +"d1dd2794": "buy_end_time()", +"d1ddb24e": "recordResult(address,address,address)", +"d1de5011": "getAccount(bytes32)", +"d1de592a": "add(bytes32,bytes32)", +"d1defff2": "_educatedToken()", +"d1df1252": "ringBell()", +"d1df306c": "burnToken(address,uint256)", +"d1df81df": "getPlayerInfo()", +"d1dfdc07": "patentSaleTimeDelay()", +"d1e0363d": "_createLock(uint32,address,uint256)", +"d1e040ec": "ConvertColouredBkp(address)", +"d1e07bcb": "onlyCapperMock()", +"d1e15045": "sendBack()", +"d1e191a4": "withdrawEverything()", +"d1e19ab2": "distributeAllTokensToContributor()", +"d1e2eb5e": "countInvestor()", +"d1e34733": "GCOXACMToken(string,string,uint8,uint256)", +"d1e400f4": "ecoSystemAddress()", +"d1e4b8da": "importBalance(address)", +"d1e58e0f": "preIcoRate()", +"d1e692eb": "lastLottoTime()", +"d1e6a64f": "leftForSale()", +"d1e7e81f": "selfLock()", +"d1e83b8b": "ChangeInterest(uint256,uint256,uint256,uint256,bool)", +"d1e8acb4": "ABC(uint256,string,uint8,string)", +"d1e9822c": "RESERVE_WALLET()", +"d1e99563": "BACKLEAF()", +"d1e9ab13": "Swift()", +"d1e9dcbf": "serverForceGameEnd(address,uint256)", +"d1e9f75b": "testHitSoftCap()", +"d1ea2786": "offerSketchForSale(uint256,uint256)", +"d1ea8b89": "QNTUsdRate()", +"d1eabc94": "CardToken(uint256,string,string,string,string)", +"d1eb6404": "donationsFrom(address)", +"d1eba9c9": "getDeployedAuctions()", +"d1ec32ed": "secondsToHold()", +"d1eca85e": "startIcoPreICO()", +"d1ecdec6": "m_OwnerFees()", +"d1ed3dad": "getIndex(address,address)", +"d1ed74ad": "retrieve(bytes32)", +"d1ee2bf9": "icoDiscountTime()", +"d1ee32c3": "issueTokensForICO(uint256)", +"d1ef4e91": "vestTokens(address,uint256,uint256)", +"d1ef752d": "Post(address,address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"d1efb5cd": "_getChamp(uint256)", +"d1efd30d": "secret()", +"d1f03514": "getRewardLevel(uint256)", +"d1f0bb2d": "populateAllowedFreeExchanges()", +"d1f1ef34": "setPrivateSale()", +"d1f1fff8": "minBalanceForTxFee()", +"d1f276d3": "releaseAgent()", +"d1f2a7e2": "isUserPolicyAccepted()", +"d1f2efd5": "isMainSale()", +"d1f2f971": "calculateDivi()", +"d1f34b14": "__uintToBytes(uint256)", +"d1f38097": "CTGToken()", +"d1f461d5": "getUsernameFromAddress(address)", +"d1f46c8d": "resolveCycle()", +"d1f4df47": "grantBountyTokens(address)", +"d1f55764": "shareContract()", +"d1f59db9": "isLatestMinorTree(bytes32,bytes32)", +"d1f61c44": "Totalizeum()", +"d1f61ed5": "dropRoute(uint32)", +"d1f6424f": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8,uint256)", +"d1f69902": "getHeroClassId(uint256)", +"d1f6d676": "ExchangeContract(address,address,uint256,uint256)", +"d1f70760": "setAdditionalTokensFromCommonPoolWallet(address)", +"d1f7a4e4": "createCertificate(bytes)", +"d1f8a208": "removeOrganisation(address)", +"d1f92cab": "timereumDelta()", +"d1f95204": "propertyIndexToOwner(uint256)", +"d1f9c24d": "gameState()", +"d1f9f3a0": "bitdncToken()", +"d1fa338d": "TokenStorage(address)", +"d1fa74d2": "SimpleEscrow()", +"d1fa94d0": "setLockStatus(bool)", +"d1fa9cad": "Partners()", +"d1fae327": "CofounderSwitchedEvent(address)", +"d1fb386a": "_recordStashedPayout(uint256,uint256)", +"d1fb5646": "releaseTo(address)", +"d1fc0ddf": "prevOracle()", +"d1fc8cf3": "endDispute()", +"d1fccf9e": "bonusedPurchases()", +"d1fd260e": "getLotteriesByOwner(address)", +"d1fd3b12": "_rotateCauldron(uint8)", +"d1fe43ba": "migrateDueToNoReports()", +"d1fea3d5": "setReleased(bool)", +"d1feb5ee": "deleteArrayBytes32()", +"d1feca67": "addSpendingRequest(address)", +"d1ff535e": "PURCHASER_MAX_TOKEN_CAP()", +"d1ff8151": "getNumTanks()", +"d1ff9605": "setAdminFeePercent(uint256)", +"d1ffb796": "_ListingRemoved(bytes32)", +"d2004f8c": "getChance(uint256,uint256)", +"d20058af": "ESCBAirdropper(uint256,address)", +"d2008118": "logPromiseConfirmed(uint256)", +"d202158d": "keyHasPurpose(bytes32,uint256)", +"d2038d4d": "finalize4()", +"d2051f8e": "updatePassword(uint256,string,string,string)", +"d205ad7d": "proposeDissolve(bytes)", +"d205bcb0": "isPendingOracle(address)", +"d205f1e6": "testFail_set_price_without_token()", +"d2064e2f": "getStamp(uint256)", +"d2077782": "changeRequestCount()", +"d2079c0f": "playersLength()", +"d207e757": "ownerSetOraclizeSafeGas(uint32)", +"d2080ccd": "pauseWhitelist()", +"d20838f4": "setRegistryContractAddress(address)", +"d208fd60": "getMessageSender(uint256)", +"d209a566": "BP_PERSIAN()", +"d20ae2b5": "getMyWorks(bytes32,bytes32)", +"d20c34de": "TaylorToken()", +"d20cd8e5": "Solved(address,string,string)", +"d20d6119": "createTokenUri(uint8,uint8,uint8,uint8,uint8)", +"d20db416": "_approvePurchaser(address,uint256)", +"d20de0bc": "nextParticipantIndex()", +"d20e54a8": "startBet(uint256)", +"d20f5029": "advisorsTokensAddress()", +"d21077f3": "areFundsReleasedToBeneficiary()", +"d211483f": "RoleRemoved(address,string)", +"d211fd18": "capital()", +"d211fe86": "icoEndtime()", +"d21220a7": "token1()", +"d212a69a": "_fees()", +"d2134b26": "expTx(uint256,uint256,uint256)", +"d2135356": "isValidRelease(uint256)", +"d213ed96": "manageApprovedMintingModule(address,bool)", +"d213f109": "calcAmtReclaimable(address)", +"d21407fa": "crowdSalesCompleted()", +"d214326f": "GetWinners()", +"d214becb": "charactersCountOf(address)", +"d21577f2": "stakeEther()", +"d2161687": "reflectSwitch()", +"d2164302": "forgeWeaponPureDamage(uint256,uint256,uint256,uint256)", +"d216995b": "determineBonus(uint256,uint256)", +"d2169d2f": "getMonsterLevel(uint64)", +"d2169dfd": "RETURN_DATE()", +"d216a47d": "decreaseApproveAndCall(address,uint256,bytes)", +"d216a86c": "publicEventActive()", +"d216d55d": "etherandomExec(bytes32,bytes32,uint256)", +"d21705ff": "admin_proportion()", +"d2178b08": "get2()", +"d217b149": "managerUnset()", +"d218e144": "calculateRanking()", +"d218f92d": "checkinter()", +"d219f103": "collectedEtherFrom(address)", +"d21ad1ed": "calculateWinnerCut(uint256,uint256)", +"d21b84ac": "createNewDAO(address)", +"d21b93df": "Hypes()", +"d21b96ab": "ringhashRegistryAddress()", +"d21bcc7c": "get46(uint256,uint256)", +"d21bdee4": "Bitforce()", +"d21c39a1": "acceptPayment(address,uint256,address,uint256,uint256)", +"d21c700f": "stopToken()", +"d21cacdf": "referrerOf(address)", +"d21cbffc": "getIfVoted(uint256,address)", +"d21ceba0": "RemainingTokensReceiverAddress()", +"d21cf24f": "setSingleWithdrawMax(uint256)", +"d21d2cd1": "lifePoints()", +"d21d7950": "changeGasLimitOfSafeSend(uint256)", +"d21e17a6": "_payEthereum(uint256)", +"d21efc35": "endPhase()", +"d21fa4e1": "contract_alive_until_this_block()", +"d2201c3b": "CreateLUNETS(address,uint256,uint256)", +"d22057a9": "register(bytes32,address)", +"d220b727": "ProposalTallied(uint256,int256,uint256,bool)", +"d2225635": "getBetterNumOfWinnings(address)", +"d22290a4": "feeBips()", +"d222dc04": "requiredSignedAddress()", +"d2231919": "TransactionRefundedByMediator(uint256,uint256)", +"d22341a9": "withdrawDeveloperPot(address)", +"d2234b37": "withdrawal2()", +"d2235998": "_cancelAuction(address,uint256,address)", +"d223926f": "buyBooster(uint256)", +"d224118f": "PrepareDraw()", +"d224c3e0": "gen0Step()", +"d224f1ed": "proxiesCount(address)", +"d2254db0": "DDEToken()", +"d22591c8": "addBook(string,address)", +"d226d11f": "foundEvidence()", +"d226ff1b": "User(string)", +"d2273f37": "_changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", +"d2282dc5": "setUint256(uint256)", +"d228cfc5": "claimHodlRewardFor(address)", +"d229a94a": "lockTokensForTradingMarketContract(address,uint256)", +"d22a1180": "finanReserveAllocation()", +"d22ac06f": "_approveEscrow(bytes32,uint256)", +"d22b1a0f": "secondVestStartsAt()", +"d22b32e9": "hivePerEther()", +"d22b3c8b": "ownerArmyCount(address)", +"d22b3de6": "setTitulaire_Compte_10(uint256)", +"d22b64a2": "getDonationByAddress(address,address)", +"d22b9177": "getImageRegionId(uint256)", +"d22bdce2": "_getNextStage()", +"d22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", +"d22c78f8": "getPlanetDetails(uint256,uint256)", +"d22d9c6d": "tokensInUse()", +"d22dee48": "claimProfit(uint256)", +"d22e7b69": "validatePublisher(address,bool,string)", +"d2305f07": "getCloneArray(uint256[])", +"d230e875": "MaxValue()", +"d232790d": "setLastWinner(address,uint256,uint256,uint256)", +"d232a8f5": "firstStageCap()", +"d23376ec": "getPOOL_edit_14()", +"d233e5c0": "oxen(address)", +"d233fc0b": "changeRecovery()", +"d235f947": "setMaxHealthAndMana(uint256,uint32,uint32)", +"d23628f1": "CyberRailNET()", +"d2368f64": "Billing(uint256,uint256)", +"d237a427": "TT()", +"d237b43f": "reclaimResourceDeposits(address)", +"d237bc74": "paymentSizeC()", +"d238cd1b": "redeemVoucherSingle(uint256,address,address,uint256)", +"d238ec90": "HWGLToken()", +"d2395dcd": "buyTokens(address,uint256,uint256)", +"d239ea8b": "getSchemasLenght()", +"d23ad39d": "setCommons(address)", +"d23b8f5c": "drawDailyWinner()", +"d23dcee0": "_generateTokenURI(bytes32[],uint256)", +"d23df2d1": "RENEX_SETTLEMENT_ID()", +"d23e09f5": "trioContract()", +"d23e8489": "transferOwnership(uint256)", +"d23ea159": "eGoldchainStart()", +"d23ef360": "setExchangeRegulatorWallet(address)", +"d23f0abb": "issueTokensForPresale(uint256)", +"d23f1bba": "noBets()", +"d23f4450": "scoreDown(address)", +"d24155c1": "getAmountBonusRate()", +"d2415852": "TheDivine()", +"d241ead8": "testMinReturn0WithReturn()", +"d242448c": "transferredCrowdsale()", +"d24257c0": "betAmount()", +"d2427db5": "checkTotalPayout(address)", +"d242b051": "reserveWaveLockup()", +"d243ec26": "payDev()", +"d244059a": "whiteListLimit()", +"d24481ea": "checkWin()", +"d24594b8": "canApply(uint256,bytes32)", +"d245a084": "TransactionRefundedAfterDispute(uint256,uint256)", +"d245aa92": "endBlockBonus3()", +"d245da28": "updateEarlyParicipantWhitelist(address,address,uint256)", +"d2467e31": "GetSellingTokenDecimals()", +"d246a8c9": "lastNegativeVoting()", +"d246b379": "calculateRevenue(uint256,uint256,uint256)", +"d246d411": "burnAddr()", +"d247160a": "ethertoteDevelopmentTransferComplete()", +"d24876b7": "sellCMTAgainstEther(uint256)", +"d248cf1f": "DASHABI(uint256,string,string)", +"d24987fc": "getNewTokenPrice(uint256)", +"d24999ca": "getkillerPriceConversionFee()", +"d249a52e": "update(bytes,uint256[],uint256[])", +"d24ac764": "getRejectionCount(uint256)", +"d24b06b7": "registryRequestCustodian()", +"d24b08cc": "callstoredaddress()", +"d24b62a8": "lotteryReset()", +"d24b7090": "_payEtherAndDistribute(uint256)", +"d24b7e7a": "setEthPrice(uint128)", +"d24bcb15": "usechainWallet()", +"d24bcf54": "getEarlyIncomeByAddressRound(address,uint256)", +"d24c48bc": "getLiquidationSpreadForPair(uint256,uint256)", +"d24c5a36": "random1()", +"d24c8fe4": "_getCurrentStage()", +"d24d11ad": "BattleProvider(address,uint256,uint256,uint256,uint256,uint256)", +"d24ddcfe": "buyKissBTC()", +"d24ecc10": "initializeSale(uint256,uint256,uint256,uint256,address)", +"d24ef4f3": "PLATFORM_DEVELOPMENT()", +"d24f8a17": "convertShortedTokensToLiquidationToken(uint256)", +"d2500033": "RISE()", +"d25090ff": "withdrawContribution(uint256)", +"d25119c7": "getMsgHash(address,string,string)", +"d2521034": "marriageStatus()", +"d2526418": "getFeePercent(address)", +"d2531590": "CANCEL_EXTRA_GAS()", +"d2536893": "setDividendWinners(uint256[],uint256[],uint8[],uint256)", +"d2548393": "team2019TokenCreated()", +"d255494a": "removeInventory(bytes32)", +"d25570f2": "AliceToken(uint256)", +"d2558fca": "Token3D()", +"d2559533": "WinancesToken()", +"d256451c": "setRates(uint256,bytes32[],uint256[])", +"d256c7a5": "setTokensPerEther(uint256,uint256)", +"d2571062": "setAllContracts()", +"d2577fec": "_getRoleSignature(address,bytes32,address)", +"d258d7b6": "test_4_generateTokensAccrossBlocksAfterDestroy_increaseBlocksBy1000()", +"d258f2f4": "TeTeToken()", +"d2591068": "TLCMarketCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"d259224a": "ssstt()", +"d2598c4c": "removeTrader(uint8)", +"d2599300": "savedReferral(address)", +"d2599312": "initShareRule4Publicity()", +"d259d761": "changeAdminContract(address)", +"d25a1212": "revokeAttributeSigned(address,uint8,bytes32,bytes32,string,bytes)", +"d25a13b4": "roundTwoBlock()", +"d25a5be9": "airdropTotalSupply()", +"d25b3ee1": "AcademiCon()", +"d25b4f2a": "CrowdsaleRC()", +"d25c0767": "isSaleAuction()", +"d25d19e2": "SetThrdOwner(address)", +"d25d603c": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,string)", +"d25dc056": "transferToWinner(address,address,uint256)", +"d25e3443": "ISLToken(uint256,string,string)", +"d25f08b1": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],bool)", +"d25f1c35": "CPGPEREGRINE_MAX_CARGO()", +"d25f82a0": "getAirdrop()", +"d25ff342": "MNXToken()", +"d2602930": "RockPaperScissors()", +"d26031ab": "phase2EndingAt()", +"d261de38": "NVCTToken()", +"d261fbed": "addressCallWithArray(address[3])", +"d2620e2d": "holdOf(bytes32)", +"d2625fce": "pendingOracleB()", +"d2631e42": "changeRewardManager(address)", +"d263b7eb": "ownerkill()", +"d263be48": "myWallets()", +"d263d2a4": "setWildCardToken(uint256)", +"d264a878": "getOraclizeWinnerTimeOffset()", +"d264cfdc": "lockAccountOf(address)", +"d264e05e": "forward()", +"d2650fe5": "RedeemEvent(address,uint256,uint256,uint256,uint256)", +"d2651855": "changeERC20(address)", +"d2654219": "getCurrencyDenominated()", +"d2656069": "SmartContract_Allowed(address)", +"d26574ac": "setCardPerkText(uint256,string)", +"d2663184": "setDividendCardAddress(address)", +"d266e83b": "isActive(address,uint256)", +"d2670025": "REQ()", +"d2676711": "getCommentAccountsLength()", +"d267dc96": "Tradenexi()", +"d2689abc": "ecdsaverify(uint256,uint256,uint256,uint256,uint256)", +"d269ae55": "MAX_ALLOWED_TOTAL()", +"d26c8a8a": "coinBalance()", +"d26cbe1e": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d26cfeae": "setMinAmount4Round(uint256)", +"d26da39e": "isRequestFromOwnerOrMeterKey(address)", +"d26dbd2a": "preSaleTokensDisbursed()", +"d26ee061": "getAvailableFundsForTheTeam()", +"d26f9cd7": "backofficeRedeem(uint256)", +"d26ff86e": "submit(bytes32,bytes32)", +"d270085e": "addNoFeeAddress(address[],address[])", +"d270b8e8": "tokenDistributionEndTime()", +"d270cbaf": "buyAAC()", +"d270e7ab": "mainContract()", +"d271011d": "transferEthers()", +"d2715a6b": "getEmblemOwner()", +"d2718fbe": "setOwnerFlag(uint256,uint8)", +"d271900d": "linkContract(address)", +"d2719d22": "btcRate()", +"d271b067": "ln(int128)", +"d2727e6c": "_oneTokenInWei()", +"d2728f90": "Bought(uint256,address,uint256)", +"d273285b": "createdWallets()", +"d27399b5": "countAddressesSet()", +"d27416ec": "verify(bytes32,uint8[5],bytes32)", +"d27482a4": "claimOwner(address)", +"d274b230": "registerFor(address,address,uint256,uint256,uint256)", +"d274fa91": "amendRetention(uint256,uint256)", +"d2756e11": "finalizeNumber(uint256)", +"d2758538": "createOneDrink(string)", +"d2760b64": "_isBuying()", +"d27626fd": "pushToken(address[],uint256,uint256)", +"d2769df1": "isValidComposition(uint256[],uint256)", +"d276a3e1": "auctionedEth()", +"d2786ba4": "getMetaData()", +"d2789aa5": "getPrivilegeState(string)", +"d279830c": "addMilestone(uint256,uint256,uint256)", +"d279c191": "claimReward(address)", +"d27a43f6": "_checkWin(uint256,address)", +"d27a6f28": "ZyPPACrowdsale(uint256,uint256,uint256)", +"d27aa18e": "Secure()", +"d27bf2e3": "getCurrentLocation()", +"d27d1bc4": "proposalsNumber()", +"d27d3e88": "bulkSend(address[],uint256[])", +"d27f41cd": "CharityInProgressWallet()", +"d27fcf96": "gmtFundAddress()", +"d27ffef1": "OLIFEToken()", +"d282866a": "whichTick(uint256)", +"d282db01": "_withdrawal(address)", +"d2835c58": "P4P()", +"d283833d": "toekensForTeam()", +"d283859d": "removeBlack(address)", +"d2840362": "addAdvisors(address,uint256,uint256)", +"d28442ef": "ownerProfit()", +"d2846c7b": "isProxyContract()", +"d285b7b4": "loan()", +"d286dbf2": "internalNewRound(uint256,uint256)", +"d2871105": "tokensIssuedBySTO()", +"d2874e49": "withdraw(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"d2879f47": "_getContractTokenBalance()", +"d2886ebc": "getUserSkills(address)", +"d288c878": "blackListERC20(address)", +"d289ade2": "payFee(uint256)", +"d289eb82": "buyMultipleItems(uint8)", +"d289f187": "_addBonus(address,uint256)", +"d28a4f9e": "setKyberContractAddress(address)", +"d28ae9ef": "calcMiningSharesAmount(uint256,uint256)", +"d28b5317": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address,string,int256)", +"d28be797": "getShitClonelordReq()", +"d28c25d4": "changeGreeting(string)", +"d28c2aaa": "fix_parents(uint256,bool)", +"d28cb7b5": "availableWallet(address)", +"d28cbded": "ERC20Token(uint256,string,uint8,string)", +"d28d4e0c": "queryAllAccounts()", +"d28d8852": "_name()", +"d28dcdea": "haltPurchase()", +"d28e4355": "updateClaimable(uint256)", +"d28e88bd": "freezeDateOf(address)", +"d28f95ba": "withdrawalEth()", +"d28fa960": "withdraw_all_funds()", +"d28fdde8": "updatePrice(uint256[])", +"d2901c47": "RATE_SOFT()", +"d290ee06": "revokeTokenTimelock(address,uint256)", +"d291fa81": "GetMinerAt(uint256)", +"d29208d4": "MasterCoin()", +"d292515d": "totalMintNums()", +"d292b920": "CryptaurMigrations()", +"d292e6cb": "_sendPriceUpdate(address,uint256)", +"d294cb0f": "accountBalance(address)", +"d294f093": "claimFees()", +"d2953f84": "assetByIndex(address,uint256)", +"d29543af": "FolioNinjaToken(address,address,uint256,uint256)", +"d296853a": "whitelistPreSaleAddress(address,bool)", +"d2968a7f": "addContribution(address,uint256,uint16)", +"d2970120": "getSettlingTimeoutBlock(bytes32)", +"d29709fb": "returnDeposit(address,uint256)", +"d2973f93": "setUserType(address,uint256)", +"d2983dfd": "LoadedRefund(address,uint256)", +"d299dac0": "blake2b(bytes,bytes,uint64)", +"d29b5d2f": "mintReputation(uint256,address,bytes32)", +"d29c8c96": "createdBlockOnCommitsPhase(uint256,address)", +"d29cafe1": "ZilliqaToken(address,uint256)", +"d29cbd60": "getMonsterBaseStats(uint64)", +"d29d44ee": "_transferOwnership(address)", +"d29d503c": "addHolder(address,uint256,uint8,uint256)", +"d29d91ca": "getNarcoHomeLocation(uint256)", +"d29db7e4": "_processPurchase(address,uint256)", +"d29dd76d": "whitelistAdmins(address)", +"d29e2746": "place_buy_order(uint16,string,address,string,string)", +"d29e319c": "TOKEN_ICO3_LIMIT()", +"d29e6803": "secretHash()", +"d29ebd2e": "privateOfferingSupply()", +"d29f541d": "getPosition(uint256,address)", +"d2a09b96": "_updateReferrals(uint256,uint256)", +"d2a17959": "transferTokensFromVault(address,uint256)", +"d2a1e045": "FuBi()", +"d2a2feaa": "STRI()", +"d2a32c12": "bonus_amount()", +"d2a3899c": "payOrder(uint256,uint256,uint256)", +"d2a3b190": "SAToken()", +"d2a405f7": "_issetConverter(address)", +"d2a4ccc5": "redeemBuzzCafeBal()", +"d2a569c3": "startAirdrop()", +"d2a59d69": "dragons(uint256)", +"d2a6629c": "playerActiveGames(address,uint256)", +"d2a6cf5e": "internalTrade(uint256,uint256,uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"d2a718ec": "isRefundLocked()", +"d2a753e4": "cancelBid(address,bytes32,int32,bool)", +"d2a764d1": "contributeInBNB()", +"d2a79e57": "tixPresaleDeposit()", +"d2a7d38a": "MIN_FUNDING_AMOUNT()", +"d2a7ea17": "setSelfAsPureShareholder(string)", +"d2a86985": "_ORAK()", +"d2a9b6ed": "getVotingFor(address)", +"d2aa24b6": "getControlInfoMaxPerBlockImbalanceList()", +"d2ab6be1": "start(uint8)", +"d2ab78b7": "getGameName(address)", +"d2ac0f59": "setHeroContract(address)", +"d2ac1c8e": "addApprovedAddress(address)", +"d2ac2d8a": "heldOf(address)", +"d2acbc0d": "card_metal_minamount()", +"d2accad3": "_changeText(uint256,string)", +"d2ace0cc": "_newVoting(bytes,string)", +"d2ae5f65": "earlyInvestorTokenRaised()", +"d2ae8eaa": "getGenesForSale()", +"d2aeb90f": "removePoweruser(address)", +"d2aee00b": "getCanAttackMonsterIds()", +"d2afa8c1": "isERC721()", +"d2afeeeb": "createBoard(bytes32,bytes32,uint256,uint256,uint256)", +"d2b001fb": "PREMIUM_TYPE_COUNT()", +"d2b022d5": "pendingWithdrawalsBalance()", +"d2b0d554": "getDisclaimer()", +"d2b10b75": "AirDropContract(address,address)", +"d2b1569e": "redeemRewardedAxies(address,uint256)", +"d2b3fe93": "updateRoundLimits(uint256)", +"d2b420ce": "isOfferSorted(uint256)", +"d2b4a460": "getJackpotFee(uint256)", +"d2b50743": "DOW_FRI()", +"d2b5c227": "AsideTokensHaveBeenAllocated(address,uint256)", +"d2b5d9e1": "refferalFee()", +"d2b73cea": "getActiveContractAddress(uint256)", +"d2b74f70": "CryptoFamousStorage()", +"d2b75b70": "_upsert(address,uint256,bool,bool,uint256)", +"d2b77264": "pollMap(bytes32)", +"d2b78529": "getContractNetBalance()", +"d2b7d957": "executeDelegatecall(address,uint256,bytes)", +"d2b8035a": "draw(uint256,uint256)", +"d2b8915c": "offerPosition(uint256,uint32,uint256)", +"d2b8b867": "doPayment(uint256)", +"d2b93303": "EternalToken()", +"d2b962f2": "createLiability(bytes,bytes)", +"d2b9da84": "Office(string,string,uint256)", +"d2ba499c": "IS_SIGNATURER(address)", +"d2ba5537": "numberOfClaimants()", +"d2ba8073": "minbid()", +"d2bafbe6": "setMaxCoordinate(uint256)", +"d2bb6fd5": "timeTier2()", +"d2bbda29": "registerName(string,address,string)", +"d2bbf6df": "getIndexId(address,bytes32)", +"d2bd3dd9": "YAP()", +"d2bec28c": "startCraftingAuction(uint256,uint256,uint256,uint256)", +"d2bf36c0": "getPackData(uint256)", +"d2bf779f": "getKingdomInformations(string)", +"d2bfd24b": "setgamecard(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d2c03c01": "auto_withdraw(address)", +"d2c0e032": "set(address,string,string)", +"d2c18e0b": "api()", +"d2c18f59": "emergencyManager()", +"d2c33eb2": "claimRaisedWei(address,address)", +"d2c37621": "getUserLocalTokenBalance(address)", +"d2c3a1ec": "updateStageInfo(uint256,uint256)", +"d2c411d3": "closeBatch(uint256)", +"d2c49b7f": "getTimeUntilEnd(uint256)", +"d2c51c72": "withhold()", +"d2c5c368": "testFailRestartNotUpdatable()", +"d2c5ce31": "dateTimeAddr()", +"d2c73093": "createTokens(uint256,address)", +"d2c731d9": "TermsOfUse()", +"d2c877f8": "setDollarRate(uint256)", +"d2c87b02": "MB(address,address,address,address,address)", +"d2c936ff": "currentBonusLevel()", +"d2c94ec5": "C4FToken()", +"d2ca159a": "listUnconferences()", +"d2ca2115": "periodLength()", +"d2cad255": "BankDeposit(address,uint256)", +"d2cad6da": "bonusCalculate(uint256)", +"d2cae700": "getAllFailedInvestmentsCollected()", +"d2caeea8": "aomucoin()", +"d2cafe2d": "allAssetsOf(address)", +"d2cbcea6": "getSSP(address)", +"d2cc7015": "placeMove(uint8)", +"d2cc718f": "accumulatedInput()", +"d2cced90": "getAnnualInterest(uint256)", +"d2cd9673": "totalMining()", +"d2cd96bd": "changeQuorum(uint256)", +"d2cdf580": "setKYCpassed(address)", +"d2ce33f8": "preMinting()", +"d2ce89e5": "logoURL()", +"d2cf7704": "BanAttempt(address,address,uint256)", +"d2cfe5a7": "posscoin()", +"d2d0ded1": "referrerBonusPercent()", +"d2d0e066": "deposit(address,uint256,uint16)", +"d2d10162": "initialize(address,address,uint256,uint256,address,address)", +"d2d10be8": "TGEToken(string,string)", +"d2d153a4": "Grand_Solar_Minimum()", +"d2d21e85": "sendToNest(uint256)", +"d2d26edc": "Cloudcoin()", +"d2d3b8e0": "multiAllowance(address,address[],address[])", +"d2d3d7fb": "fetchAllVoters()", +"d2d42074": "getExchangeContractAddress()", +"d2d44955": "Cindicator()", +"d2d4bd72": "getCrossRate(bytes,bytes)", +"d2d5a55c": "ownerValidator()", +"d2d7231f": "calculateReward(uint256)", +"d2d791c0": "payBatch(bytes32[],uint256[],address,address,bytes)", +"d2d85cf2": "rootsMatch(address,address)", +"d2d8cb67": "TOKEN_PRICE()", +"d2d8fd0a": "settleFrom(address,address,uint256)", +"d2d92f24": "getWhitelistEntry(uint256)", +"d2d93f90": "ethRate()", +"d2d976da": "webpage()", +"d2d97d9f": "coldStorage()", +"d2d9b8c6": "setCompte_24(string)", +"d2d9d44e": "awardTitanium(address,address,address)", +"d2da29c7": "hostAddress()", +"d2db29af": "claimFutureUse()", +"d2dc0869": "add(string,uint256,string,string,address)", +"d2dcd933": "totalSupplyAtTime(uint256)", +"d2dd8d2a": "authorized_updateCardClaimerAddress(uint256,address)", +"d2dd9f79": "transferVault(address)", +"d2ddf1ae": "TradingForest(address)", +"d2de6cca": "getArrayValueByKey(string,string)", +"d2de6ec5": "distribute(uint256,uint256,uint256)", +"d2de9989": "stopPreIoc()", +"d2df254c": "weiToUSD(uint256)", +"d2df9222": "recoverStockKey(bytes12)", +"d2df9cc1": "startTimeSaleNoBonus()", +"d2e013d9": "Execution(string,string,string,string,string,string)", +"d2e01b2f": "getLockPosition(address)", +"d2e0637b": "createContractTot(string)", +"d2e10879": "getReceiptRoot(uint256)", +"d2e1d201": "setstring(string,string)", +"d2e2acf5": "_proxyTransferEvent(uint256,uint256,uint256,bytes32)", +"d2e3646c": "optionsConverter()", +"d2e474b3": "PROMOTORS_POOL()", +"d2e73d78": "withdrawDepositorFunds(address,uint256)", +"d2e78ace": "DestructionContract()", +"d2e80494": "setConversionRate(uint256)", +"d2e81bf9": "initPlayer(address)", +"d2e8309e": "test_messageSenderEq()", +"d2e90d0f": "startTimeICO()", +"d2e91b85": "getset()", +"d2e9236b": "sendEthValue(address,bytes,uint256)", +"d2e9953a": "setAdmin(address,address,bool)", +"d2ea7f7f": "CreditDAOfund(address)", +"d2eb6483": "EVMDB()", +"d2ecb4f9": "initialAllocation()", +"d2ed2d30": "setWorst(uint8)", +"d2eda057": "checkBool(bool[])", +"d2eeead7": "PatrickTestCoin()", +"d2ef0669": "denyAccess(address,address)", +"d2ef3b0d": "getCreateShareTokenMarketValue()", +"d2ef7398": "challenge()", +"d2efeef3": "TradableTokens()", +"d2f03bf6": "registerWithETH(address)", +"d2f070b9": "email(address)", +"d2f0be99": "getRefund(uint256)", +"d2f1f189": "ICOAddress()", +"d2f1f712": "getVoters(uint128)", +"d2f27cf4": "setCelebrityPrice(uint256,uint256)", +"d2f28141": "calculateBonus(uint256,address)", +"d2f2d549": "CLPTestNetToken()", +"d2f32d94": "get_card()", +"d2f343c7": "timeWindow()", +"d2f3b963": "dateICOEnded()", +"d2f3ea43": "getPurchaseAmount(uint256)", +"d2f40cab": "getFunctioName()", +"d2f4a50a": "wallets()", +"d2f5e28b": "requestEthereumPrice(string,string)", +"d2f65fbc": "setMockBytes32(bytes4,bytes32)", +"d2f6f67d": "mintingContract()", +"d2f7265a": "exchange()", +"d2f7c5db": "GetDetail(address)", +"d2f7f377": "testRegisterNickWalletEth()", +"d2f80c15": "addDivisionJurisdiction(bytes32[],bool[])", +"d2f82026": "quickSortBids()", +"d2f8dd45": "Owned(address)", +"d2fa1f8b": "proxyPurchases(bytes32)", +"d2fa635e": "setMaxGasPrice(uint256)", +"d2fa9a67": "RESERVED_TOKENS_FOR_FURTHER_TECH_DEVELOPMENT()", +"d2fabaec": "VITToken()", +"d2faf216": "withdrawBuyer(address[2],uint256[7],uint8,bytes32[2])", +"d2fafb19": "setAmount(address,uint256)", +"d2fb32c2": "getGen0ObjInfo(uint64)", +"d2fb8787": "recordExists(bytes)", +"d2fbbc51": "ADVISORS_TOKENS_PERCENT()", +"d2fbd0ed": "payOrder(uint256,uint256)", +"d2ff5d4f": "allWETHbalances(address,address[])", +"d2ff8fd8": "ICOtokensSold()", +"d2ffca2d": "currentTotalExcess()", +"d2ffd541": "mintAdminCancel(address,address)", +"d30047bc": "firstPreSaleEndDate()", +"d3006dea": "ValueFinalized(bytes8)", +"d300746f": "pullTokensBack()", +"d300a034": "oraclize_query(string,bytes[])", +"d300a968": "isSecurityToken(address)", +"d3017193": "addUser(address,uint256)", +"d301c85f": "ownerAllocateTokensForList(address[],uint256[],uint256[])", +"d30272b8": "signAgency(uint256)", +"d302af4a": "isAirdropContract()", +"d302b0dc": "unFreeze(uint256)", +"d303b750": "Coupon(address,uint256,uint256)", +"d303e3b2": "checkMidiNoteValue(uint8)", +"d3050195": "_ownsRobot(address,uint256)", +"d305399d": "addToWhitelist(address,uint16,uint256)", +"d305577e": "GSSingle(uint256)", +"d305671a": "Dario(uint256,int256,uint256)", +"d3057859": "trade(uint8[2],bytes32[4],uint256[8],address[6])", +"d30592c6": "_trim(uint256[],uint256)", +"d3059c91": "maxTokensForCommand()", +"d305a45d": "requestDivident()", +"d3062b24": "getIndicesWithClaimableTokensForBuyers(address,address,address,uint256)", +"d3066879": "withdrawVestings(address)", +"d306967b": "TokenCreated(uint256,string,uint256,address)", +"d30792d4": "bonusesMapPos(bytes32)", +"d30796a2": "OwnerTransfer(address,address,uint256)", +"d307cd53": "_b4(string,uint256)", +"d3087ff5": "startOpenPpTime()", +"d3088b52": "transferWithMessageAndRequestAddress(address,uint256,address,bytes)", +"d3088b5f": "CesaireToken()", +"d30895e4": "player1()", +"d308cbe2": "withdrawMoneyByAdmin(uint256,address)", +"d30920c1": "contractTotalInvested()", +"d3098883": "memberFee()", +"d30a119b": "calculateBonusTokens(uint256)", +"d30a1325": "checkProposalExistence(string)", +"d30a512e": "betOnColumnOrDozen(bool,bool,bool)", +"d30a969a": "RemiCoin(uint256,string,string,uint8)", +"d30b5386": "payFee(bytes32,uint256,address)", +"d30bbde8": "checkWorkingInfra(uint256,uint256)", +"d30beffa": "unholdGold(address,uint256)", +"d30bf323": "setTaskRewardPaid(bytes32)", +"d30c0a64": "encodeUint(uint256)", +"d30cad77": "nextRoundDuration()", +"d30e2004": "setRegionUrl(uint256,uint8[128])", +"d30e268b": "saleTokensPerUnit()", +"d30e9302": "distributionTokens()", +"d30f945a": "setNewManager(address)", +"d30fa946": "fulfillDeliverable(bytes32)", +"d30fbd0d": "safeSubtract(uint256,uint256)", +"d30fc8a1": "FundsAdded(uint256)", +"d3100538": "YOLOCASH()", +"d3109af3": "drainWei()", +"d310bc32": "releaseName(string)", +"d3111d3f": "_getLockedAmount(address,address)", +"d3115524": "_bptc(uint256,uint256,uint256,uint256,address)", +"d3118a5a": "addDoc(string,string)", +"d3119dc0": "minEtherForAccounts()", +"d311b44d": "everyBidFee()", +"d312846b": "uniqueContributors()", +"d313f235": "terminateTokenSale()", +"d3140a65": "createOpenLockAndDraw(address,address,uint256)", +"d3146a46": "Claim_TRAC_9600()", +"d316e912": "deleteGrantee(address)", +"d3183864": "calculateMultiplierAfterBurn(address,uint256)", +"d3195184": "_canNowTransfer()", +"d3195c82": "refundTransactionAfterDisputeFee(uint256)", +"d319ab75": "getProposalContractor(uint16,uint16)", +"d31a8be1": "setCentsPerEther(uint256)", +"d31af484": "updateTokenUri(uint256,string)", +"d31b3320": "getUserTokenInfo(address)", +"d31c153c": "AllocateAgentChanged(address,bool)", +"d31cfed6": "initialMonthWithdraw(uint256)", +"d31d7b0a": "MoonCatRescue()", +"d31efc7e": "createHero(string,uint16,uint16,uint16)", +"d31f0f38": "RamenCoin()", +"d31fdffd": "setHammer(address)", +"d31feea1": "OpenLongevity()", +"d31ff13c": "changeContractOwner(address,string)", +"d320ac9a": "DonationDeposited4Matching(address,uint256)", +"d321fe29": "getAmount()", +"d3220144": "newPriceDecreaseRate(uint256,uint256)", +"d3226425": "DuMangoCoin()", +"d324191c": "Codexstandard()", +"d3251aa2": "setHelpCoinAddress(address)", +"d3257034": "AgriChainCultivation()", +"d3258b9e": "DevDorothyCoin()", +"d325c2e8": "revertPurchase(address)", +"d3261592": "dripRate()", +"d32632fd": "migrationGate()", +"d327523a": "getTotalNumberOfBoards()", +"d329ce51": "developer_cycle(address,uint256)", +"d32a7ee0": "updateLand(uint256,uint256,uint256,uint256)", +"d32a9cd9": "settle(bytes32,bytes32)", +"d32ab21d": "voteFor(uint8,uint8,uint8)", +"d32aba42": "getPresaleBonusAmount(uint256)", +"d32b1bea": "encodeAddress(address)", +"d32b607c": "sumElements(uint32[])", +"d32b8575": "_startAuction(uint256)", +"d32c943a": "resolveChallenge(bytes32)", +"d32cb0fe": "exercise()", +"d32cbabb": "Ast()", +"d32e245b": "getContributorRemainingCap(uint256)", +"d32e29de": "setApproveFee(uint256)", +"d32e48c0": "LockOpen(address)", +"d32ef1e5": "RhodonToken(address)", +"d3309a7e": "productTribe(string)", +"d3313802": "EtheraffleDisbursal(address)", +"d331aeb3": "getAllFiatTransactionsCount()", +"d331b696": "computeNameFuzzyHashET(string)", +"d33219b4": "timelock()", +"d333d7cf": "destroyShares(address,uint256)", +"d333ec79": "changeServiceAccount(address)", +"d334d75b": "expireLoan()", +"d3363dd7": "icoThresholdBonus3()", +"d3364687": "PRESALE_START()", +"d33656e0": "primaryOperator()", +"d336ac80": "getPersonInfo(uint256)", +"d337616e": "resetLottery()", +"d337b9c9": "myWeapons()", +"d337ce86": "addProject(uint256,string,address,uint256,uint256)", +"d337e72e": "EtherToken2()", +"d3382a55": "whitelistRate()", +"d3392545": "spawnItem(uint256,uint256,address)", +"d33abd33": "t_2nd_StageEnd()", +"d33b79d9": "addBallotAndVoterNoPk(bytes32)", +"d33c0a4d": "getMyCells()", +"d33c449f": "gesamtGuthaben()", +"d33ca02b": "externalCall(address,uint256,uint256,bytes)", +"d33cf9fa": "MultiSigMint(address)", +"d33d1aac": "getWeeklyTokensForWebsitesAmount()", +"d33d5f3e": "CLOSE_TIME()", +"d33d6732": "totalSupplyMintTransfer()", +"d33d6f65": "Delivery(address,uint256,uint256,int256,int256,int256,int256,address)", +"d33e1a48": "genRNGContractAddress()", +"d33ecfee": "setResume()", +"d3400a1d": "etherRatioForOwner()", +"d34047b6": "mint(address,string,bytes32)", +"d340ab41": "addInvestorBonusInTokens(address,uint256)", +"d340dd8a": "getCCH_edit_13()", +"d340e8f8": "setDistributionPercentage(uint256,uint256,uint256)", +"d341281a": "ALH()", +"d3418fb7": "capOfTotalSupply()", +"d3419bf3": "prices()", +"d3419d4e": "TokenAiContribution(address,address,address,address,address,address,address)", +"d341e052": "JoyGameDemo(address,address)", +"d342275e": "setProgress(uint256)", +"d342c598": "Bou(address)", +"d342e4f4": "runInOneDay()", +"d3437bd3": "ProofOfStableClone()", +"d3437fe0": "assertFact(uint256,bytes)", +"d3446856": "tournamentPaused()", +"d344e01b": "stopTransferToken()", +"d3451379": "updatePower(uint256)", +"d3456121": "amountInContract()", +"d3462259": "howManyTokens(uint256,address)", +"d346feb8": "changeCertBot(address)", +"d3471035": "KarmaToken()", +"d347c205": "transferableTokens(address,uint64)", +"d347de03": "setPlayerGeneralCd(uint64,uint32)", +"d3481bd0": "buyBlock(uint256,uint256)", +"d3484c1c": "TOKEN_SUPPLY_MAINSALE_LIMIT()", +"d348b409": "calculatePrice()", +"d348ee9a": "correctResult(int16)", +"d349f8b4": "MobileGoToken()", +"d34a280a": "setPreAmounts(uint256,uint256)", +"d34a412c": "switchRankings(uint16,uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"d34acd12": "functionCalls(uint256)", +"d34afaff": "getLatestIndex(address)", +"d34b1537": "minFundingReached()", +"d34b1aef": "returnUnsoldSafeLarge()", +"d34b2451": "BurritoPurchased(uint256,address,uint256)", +"d34b6cd3": "BBDToken(uint256,uint256,uint256,uint256)", +"d34b7e25": "checkWin(uint256[])", +"d34bb772": "EndsAtChanged(uint256)", +"d34be5be": "startVotingPrepare(address)", +"d34cc179": "updateDaoContract(address,string)", +"d34d8e43": "oracleItQuery(string,string,uint256,uint256)", +"d34dd1f0": "safeWithdrawal(address,uint256)", +"d34e4b20": "getWinnerHistory(uint256)", +"d34ed095": "getSoilTempException(bytes32)", +"d35066e6": "rsrvToSale(uint256)", +"d3511f82": "getRoundBetNumber(uint256,uint256,uint256)", +"d3516b7e": "setVote(uint256,bool)", +"d3525adf": "setMetadata(bytes32,bytes32)", +"d35262ef": "getInt256Min()", +"d3528d9b": "createBetAcrossDeposit(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", +"d352a862": "ownerOfTwitterId(uint256)", +"d3535452": "buyPosition(address)", +"d353a1cb": "finish(uint256)", +"d3554dd5": "NieShichaoToken()", +"d35590c2": "sponsors(address)", +"d355f139": "requestBatchLoans(uint256)", +"d3565934": "YANG()", +"d3568560": "calcDates(uint256,uint256)", +"d356a28b": "addSERAPHIM(address)", +"d356a879": "removeAddressByIndex(uint256)", +"d357aa15": "raise2ndAppeal()", +"d357f0ce": "_checkPixelLeft(uint256)", +"d357ff87": "sweepRoundsActive(bool)", +"d359b0c7": "XeniaToken()", +"d359be70": "distributeExternal(uint256)", +"d359f82c": "updateExpiry(uint256)", +"d35ada32": "addParticipant(address,address)", +"d35b9d83": "codeAt(address)", +"d35bcf88": "addCET4(uint32,uint64,uint64,uint64,uint16,uint16,uint8,uint8,uint8)", +"d35c7372": "theCeiling(uint256,uint256)", +"d35c9a07": "withdrawProfit(address,uint256)", +"d35cf913": "mint_tokens(address,uint256)", +"d35d031e": "SellerChanged(address,address)", +"d35d90ba": "MPKToken()", +"d35e29d7": "mint(address,uint32)", +"d35e48e6": "PLBToken()", +"d35e6537": "IONIATOKEN()", +"d35e656b": "userNameTaken(string)", +"d35f0a16": "_getShares()", +"d35f4a99": "mint(int256,address,uint256)", +"d35fbbfb": "range(uint256,uint256,uint256)", +"d3604bc9": "yesContract()", +"d3614854": "getAdministratorETH()", +"d3617e7a": "MyToken(address)", +"d361ab64": "sendFreeTokens(address,uint256)", +"d3626d09": "getyestoday()", +"d3631e00": "refundUnconfirmed()", +"d3637c27": "icoArray(uint256)", +"d3650fb8": "approvers(uint256)", +"d365a08e": "masterAddress()", +"d365a3fb": "settleBet(uint256[],bytes32)", +"d366f83b": "allSidesPledgedAmount()", +"d366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", +"d3670cb4": "BitcoinBlackToken()", +"d3671166": "PurchaseSuccessful(address,uint256)", +"d367a398": "NVTAddr()", +"d3695161": "deleteUser(string)", +"d369a744": "CCtestToken(address)", +"d36a1fa8": "ALKACOIN()", +"d36a35c9": "strikersBaseContract()", +"d36a8026": "Phoenix()", +"d36ae26b": "commBallotPriceWei()", +"d36afad5": "hasKey(address)", +"d36b96a9": "controllerFailed()", +"d36b9e64": "contributorsPeriodsElapsed()", +"d36bed21": "getGameAddressById(uint256)", +"d36bf8a1": "increaseWithdrawalChunk()", +"d36d9b19": "request_callback(uint8)", +"d36dbc0c": "addWineryOperation(string,string,string,uint256,uint16,string)", +"d36e0f39": "EIP20Token()", +"d36e9ac3": "burnUnused()", +"d36e9b2a": "RentalAgreement()", +"d36ef2cc": "PolicyPalNetworkCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d36f0e9c": "etherForCharity()", +"d36f5c87": "stitch(int256,int256,bool)", +"d36f69eb": "getEthInCents()", +"d3701ff2": "TongToken()", +"d3707129": "_removeShareFromLastOwner(address,uint256,uint256)", +"d3708487": "setInfoAboveSpot(uint256)", +"d37194f5": "getTotalDepositsAmountLeft()", +"d371d551": "addAddressToCappedAddresses(address)", +"d372e3a0": "isCrydrViewAddress(address)", +"d3732642": "FastRealisticPyramid()", +"d373507b": "setAllowSell(bool)", +"d37360a0": "efw()", +"d3749a15": "user_contract()", +"d375b921": "orderUsable(address[8],uint256[6])", +"d3775371": "has_reading()", +"d377bc5f": "lockedMoney(bytes16)", +"d377dedd": "currentNiceGuy()", +"d378f4e0": "NOOR()", +"d37990ce": "setGenerationSeasonController(uint256)", +"d379be23": "claimer()", +"d37a9bb0": "restrictTransfers()", +"d37aff82": "changeStatus(uint8,bytes32)", +"d37b34d7": "blacklistAccount(address)", +"d37b8a96": "deploy(string,string,uint8,string,address)", +"d37cd1d9": "TalentCoin(address,uint256,string,uint256,string,uint256)", +"d37d753f": "spin(address,uint256)", +"d37fe6cb": "balanceOfWithoutUpdate(address)", +"d3807fa5": "NameChange(string)", +"d380e036": "marketDefaultFeeLow()", +"d3811c0f": "setMetadataBase(string)", +"d38159b8": "testPass()", +"d38185d3": "_buyXid(uint256,uint256,bytes32)", +"d381ba7c": "setRootUser(address,bool)", +"d381c67e": "isRentAuction()", +"d383b80d": "getCurrency(bytes32)", +"d383f646": "issue()", +"d384077d": "_closeProvider(address)", +"d384af87": "checkpopa()", +"d384d177": "haveCommonPrefixUntilZero(bytes32,bytes32)", +"d385293d": "confirmTokenTransferToBooking(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d38537cf": "TimerAuction(string,uint256)", +"d385fac9": "bwin()", +"d38609f9": "unhaltFX()", +"d386130c": "Encrypt(uint256)", +"d38685ee": "unlockGlobalToken()", +"d3872d57": "getLandRevenue(uint256)", +"d387978d": "cancelled(address,bytes32)", +"d387c4c1": "getOwnedTokens(address,address)", +"d388089a": "getJobDetail(uint256)", +"d3884c3f": "removeService(bytes32)", +"d38875ec": "addDeal(uint256,uint256,string,string,uint256,string,bytes32)", +"d388e416": "getAccountReferalsStats(address)", +"d3890a43": "DaoCasinoToken(uint256,uint256,uint256,address)", +"d3895c91": "changeConversionRate(uint256)", +"d38ac5ac": "WayBackToken()", +"d38bd9f0": "newTokenOwner()", +"d38bee56": "PlaceSell(address,address,uint256,uint256,uint256)", +"d38bfff4": "transferGovernance(address)", +"d38c3253": "ownerSelfDestruct()", +"d38c4cca": "removeFromTokenTransferDisallowedAddresses(address)", +"d38cba4b": "paymentRewardTokensPriority(uint256,uint256)", +"d38d0f28": "updateSplit(uint256)", +"d38e5ab7": "TransferDisable()", +"d38eb9d3": "escrowFrom(address,uint256)", +"d38f3b68": "getMedications()", +"d38fe43f": "setMembershipContract(address)", +"d390021d": "getLastTimeUpdated()", +"d390e819": "disableDonationContract()", +"d391014b": "ROLE_ADMIN()", +"d391a970": "removeFromOwnedTokens(address,uint256)", +"d391ce7a": "CrowdsaleContract()", +"d3927c15": "reimburse()", +"d392c5a2": "getNumOptionChains()", +"d3933154": "MYL(uint256,string,string)", +"d393c871": "register(string,address,uint256)", +"d393cde5": "wholeLineWrong()", +"d393f628": "changeDemurringFeeOwner(address)", +"d3943976": "getSGCUsers(address)", +"d3943ab4": "setIntArr(uint256,uint256)", +"d3943c83": "numberOfWithdrawls()", +"d3946ea4": "manuallyEndAuction()", +"d394a12e": "secondPresaleStart()", +"d39502bb": "AIBITTECH()", +"d3953822": "getThisAddress()", +"d395ee0f": "setQuickBuyPath(address[])", +"d3962239": "getCustomerPassword(address)", +"d3964ca1": "operationsEthWallet()", +"d397e9e4": "getDisputeCrowdsourcer()", +"d397f861": "TRAC_Tokens_left()", +"d3980d87": "ReferenceToken(string,string,uint256,address[],address)", +"d398806d": "updateMinJump(uint256)", +"d399354b": "KYC_USD_LMT()", +"d39aa15c": "_getTransferFeeAmount(address,address,uint256)", +"d39b0cbb": "Start10()", +"d39b1d48": "setDistributeAmount(uint256)", +"d39b7e4f": "setBPAddress(address)", +"d39bbf06": "MAX_INVESTOR()", +"d39c7880": "setAddressOfERC20Token(address)", +"d39c9afd": "OwnerKill()", +"d39cb111": "getShortId(bytes32)", +"d39cce1c": "calculateSaleReturn(uint256,uint256,uint16,uint256)", +"d39ce83a": "paymentMixed(uint256,uint256,uint256)", +"d39cee11": "benchTransfer(address[],uint256[])", +"d39d8fce": "presaleStart_6_December()", +"d39de6e9": "getAuthorizedAddresses()", +"d39e4607": "LogIcoCompleted()", +"d39eb301": "getStatus(uint8,uint8)", +"d39ebe2c": "setup(uint8,uint8)", +"d39ec1fe": "currentTethers(address,uint256)", +"d39f4149": "fxpMul(uint256,uint256,uint256)", +"d39f532d": "SafeGift(uint256,string,string)", +"d3a057c8": "isConfigured()", +"d3a05872": "AutoFareCalculator()", +"d3a0d0ab": "RTokenBase(uint256,string,string,uint8,bool)", +"d3a2d050": "addData(uint256[])", +"d3a3086e": "ActorCoin()", +"d3a39686": "getAddress(bytes32,bytes32)", +"d3a516d3": "viewSuperOwner()", +"d3a56ec3": "processRequest(uint256,uint256,uint256)", +"d3a5768b": "RoundWinner(address,uint256)", +"d3a57b9f": "showRdWonNum(uint256)", +"d3a5dcb0": "EQUITRADER()", +"d3a60bd5": "Exchange(address,uint256,uint256,uint256,address,address)", +"d3a61150": "setDatabaseDownloadUrl(string)", +"d3a699cd": "PePaDe()", +"d3a6be66": "donotXXXDappToken()", +"d3a6c234": "benWallet()", +"d3a70dba": "getReaderId(bytes32)", +"d3a73d12": "modifyLevelCaps(uint256[])", +"d3a85394": "currentPeriodTokenCollected()", +"d3a86386": "minimumBid()", +"d3a871e9": "REELToken()", +"d3a9187e": "mintTemplate(uint256,int256,uint256,uint256,uint256,string)", +"d3a99388": "JcashUpgradeableToken(address)", +"d3aa22c7": "transferTLA(string,address)", +"d3aa831f": "testOwnedTryAuth()", +"d3aceae2": "_balance(address)", +"d3ae2814": "LogTokensFrozen(bool)", +"d3aefeeb": "pauseUnpauseICO()", +"d3af4dc7": "processRequest(uint256,uint256)", +"d3b0d9eb": "refundFunds(address)", +"d3b15dd6": "Millet()", +"d3b19ee1": "dislike_trackable(address)", +"d3b234fc": "getAttoTokensToBeFounder()", +"d3b246d0": "upgradeEvilMorty()", +"d3b25696": "tradeIntentOf()", +"d3b302e7": "applyForMembership(string)", +"d3b3809c": "EscrowGoods(address,uint256,uint256,uint256,uint16,uint256)", +"d3b3eccb": "isARTDistributed()", +"d3b4be21": "Obtener_Reputacion(address)", +"d3b5305c": "setAgriChainDistribution(address)", +"d3b5695c": "setOraclizeCallbackGasLimit(uint256)", +"d3b58024": "RepeatCustomerToken()", +"d3b5c016": "submitSolution(uint256,string)", +"d3b5dc3b": "precision()", +"d3b6486a": "setLeastFund(uint256)", +"d3b6664a": "purchaseTrophy(uint256)", +"d3b6ac97": "defenceElementBySubtypeIndex(uint256)", +"d3b6fbc2": "MOVIECREDITS()", +"d3b7576c": "update(uint256,bytes32)", +"d3b7bcf1": "preAllocation()", +"d3b7bfb4": "fundingAddress()", +"d3b7ef5e": "SCE(uint256,string,string)", +"d3ba95ce": "throwsWhenFinalizingIfNotMultisig()", +"d3bac6e3": "coordinatorAccountCount()", +"d3bbb2c8": "b13ToBytes(bytes13)", +"d3bc89b7": "GetGuestTokenNo()", +"d3bc9aca": "addCourse(uint256,string,uint256,uint256,string,string)", +"d3bca884": "addBalance(address,address,uint256)", +"d3bced2c": "withdrawBotFee(uint256)", +"d3bd5a4b": "resetUserPromoBonus(address)", +"d3bd6e23": "newUpdater(address,address)", +"d3bd7713": "setCapAtDuration(uint256)", +"d3bdbd8f": "editMilestone(uint256,uint256,uint256,uint256,uint256,string)", +"d3bdd242": "isMovingEnable()", +"d3bf0ce6": "AAP()", +"d3bfe76a": "revokeApproval(address,address)", +"d3c0715b": "vote(uint256,bool,string)", +"d3c13c25": "GCOXAPLToken(string,string,uint8,uint256)", +"d3c18378": "getPlayersBalance(address)", +"d3c1c838": "batchTransfer(address[])", +"d3c2a592": "claimAsset(uint256)", +"d3c33c52": "ipc()", +"d3c4055d": "VITE()", +"d3c41dae": "FindCourseBaseOnIdStudent(uint256)", +"d3c564ad": "tokenZLT()", +"d3c567c1": "cancelVoteForCandidateByStage(address,uint256,uint256)", +"d3c5ea45": "ICO_PHASE3_PERIOD()", +"d3c62676": "MiamiToken()", +"d3c65384": "ContributedAmount()", +"d3c65737": "sumICOStage4USD()", +"d3c683e5": "LOG_FailedDraw(address,uint256)", +"d3c6a6d6": "getWitnessCount()", +"d3c764f2": "buyPixelBlock(uint256,uint256,uint256,bytes32)", +"d3c78097": "startDistribuion()", +"d3c7adf9": "JimatCoin()", +"d3c7c2c7": "getSupportedTokens()", +"d3c7ca2f": "Allinone()", +"d3c8dd69": "Parent()", +"d3c8e99e": "_shareDiscountPrice(uint256,address)", +"d3c9ad17": "REBALANCE()", +"d3c9cc26": "getTokens(uint256)", +"d3caee1b": "currencyToToken(address,bytes16,uint256,bytes)", +"d3cc0c37": "batchVote(address,address[],uint256[])", +"d3cc8d1c": "claimTokensFromSeveralAuctionsAsBuyer(address[],address[],uint256[],address)", +"d3cce1d2": "setOldContractData(address)", +"d3cd6052": "getProposalCount(bytes32)", +"d3cdb97b": "partIndexToOwner(uint256)", +"d3cde1a5": "updateReferral(address,uint256)", +"d3cde1c0": "getIndexAndCheckIfAllowedToPublish(uint256,uint256)", +"d3cdf6c5": "calculateTokenAmount(uint256,uint8)", +"d3ce71df": "buyCozy(uint256,uint256,bool,address)", +"d3ce77fe": "destroyTokens(address,uint256)", +"d3cea787": "setContractServerBlackWhiteListType(string,uint256)", +"d3cecc4d": "checkVestingCondition(address)", +"d3cedfee": "sspCount()", +"d3d10d87": "OwnerChanged(bytes32,address)", +"d3d18836": "publicLock(address,uint256)", +"d3d19965": "deleteCroupier(address)", +"d3d2172e": "total_reward()", +"d3d37a31": "setSaleCap(uint256)", +"d3d3b01c": "ToRent(uint256,uint256,uint256,address)", +"d3d3d412": "getGateAddress(address)", +"d3d3dd85": "updateHpbBallotAddress(address,address)", +"d3d43efa": "returnLoanStatus(uint256)", +"d3d44e8b": "getBlockCount(uint256,uint256,bytes32)", +"d3d54129": "setPCAddress(address)", +"d3d55493": "calculateRefundAmount(uint256,uint256)", +"d3d6a975": "testThrowsTransferNotEnabled()", +"d3d70c3c": "setPrivelegedWallet(address)", +"d3d77f98": "setCoeff(uint8,uint128,uint8,bytes32,bytes32)", +"d3d864f5": "isFundingOpen()", +"d3d8aa55": "IG()", +"d3d8acf8": "checkMyVestingPeriod()", +"d3d9e741": "SuperCoin()", +"d3da927f": "isRegistered(address,address)", +"d3daa8aa": "EtheremonPayment(address,address,address,address,address)", +"d3db2371": "DHCSToken()", +"d3dbc861": "Initiate()", +"d3dc9794": "pendingTxs()", +"d3dcc175": "devTeam()", +"d3dccb03": "ERC20Token(string,string,uint8,uint256,address,uint256,address[],uint256[])", +"d3dcd55a": "calcTokensFromEth(uint256)", +"d3dd9a18": "addManyAuthorizeToWhitelist(address[])", +"d3ddebce": "STATE_BET_DISABLED()", +"d3de5834": "disableFeesForUser(address,uint256)", +"d3deedfd": "MANHATTANPROXY2NDST()", +"d3df2d01": "maxUsdFundingReached()", +"d3e00f4b": "stampBirth(uint256,address)", +"d3e0996a": "checkProductGenuine(address,address,uint256)", +"d3e141e0": "left5(uint256)", +"d3e15747": "setLock(uint256)", +"d3e212c5": "bidExchange(uint256,uint256)", +"d3e242c2": "_confirmTransaction(uint256,address)", +"d3e2846a": "LINKFund()", +"d3e3623b": "earlyBackersAmountLeft()", +"d3e65414": "contributedToken(address)", +"d3e65b6c": "buyTicketByOther(uint256,bytes32,bytes32,bytes32)", +"d3e66a9e": "startCompetition()", +"d3e6dda7": "removeFound(address)", +"d3e6f49f": "isReadyToBreed(uint256)", +"d3e73312": "allocatedFounders()", +"d3e7d44d": "tokensBurnedTotal()", +"d3e82be8": "getMinPrivateSaleBuy()", +"d3e837cb": "setChecksOn(bool)", +"d3e848f1": "systemAddress()", +"d3e89483": "policies(uint256)", +"d3e8b207": "distributeWithLockup(address,uint256,uint256,uint256)", +"d3e91a98": "destroyAllTokens(address)", +"d3ea3322": "testBuildTokenSystemCost()", +"d3eb11d6": "payoutsWallet()", +"d3eb667e": "BigBoobsToken()", +"d3eb6f61": "isGoalReached()", +"d3ebd2dc": "transferFron(address,address,uint256)", +"d3ebf454": "LotteryRoundDraw(address,bytes4)", +"d3ecb95f": "wc()", +"d3ed0ea2": "setAuthor(uint256,string)", +"d3edcb0a": "_wholeToken(address)", +"d3edcb5b": "getCreditorAddresses()", +"d3ee86e7": "mmax(uint128,uint128)", +"d3eee5ad": "lockForDays(uint256,uint256)", +"d3efa856": "CreditBIT()", +"d3efbd7f": "freezeContract(bool,uint256,uint8[],bytes32[],bytes32[])", +"d3f01fbd": "calcToken()", +"d3f045d2": "Player(address,uint32,uint32,uint32,uint32,uint256,uint256)", +"d3f06def": "uploadFile(uint256,uint256,bytes32,bytes32[],bytes32[],uint256)", +"d3f16925": "setDevLimit(uint256)", +"d3f189bd": "COMMUNITY_ADDRESS()", +"d3f1a78c": "updateDelayTime(uint256)", +"d3f1fbd7": "updateLastMiningTime(uint256)", +"d3f233af": "burnOf(address,uint256)", +"d3f297d6": "claimLiquidityReward()", +"d3f2b996": "PTH(uint256,string,uint8,string)", +"d3f2e7cf": "runningRound()", +"d3f3bea2": "distributionRealized()", +"d3f40a02": "denyAccess(uint256,uint256)", +"d3f4fcd9": "claimInitialAllotment(string,string)", +"d3f574e7": "testToUint128()", +"d3f60667": "trackBuyBack(uint256,uint256)", +"d3f60d9c": "startTimeRound2()", +"d3f6a157": "setWallets(address,address)", +"d3f6be9f": "LogDeposit(address)", +"d3f6c328": "AMOCoin(address)", +"d3f6dc52": "oracleItQuery(string,string,string)", +"d3f71ecc": "checkIsOnSale(uint256)", +"d3f73bd4": "getOwnerCEO()", +"d3f8868b": "getFrequency(uint256)", +"d3f8cc95": "exhaustAfterFusion(uint256,uint256,uint256)", +"d3f92288": "WhiteList()", +"d3f9ba69": "processOneCombat(uint32,uint32)", +"d3f9fc33": "ownerRecoverTokens(address,uint256)", +"d3faaeca": "softCapInTokens()", +"d3fbf39d": "mintNFTNotForSale(uint256,string)", +"d3fc310a": "_addExtraReceiver(address)", +"d3fc9864": "mint(address,uint256,string)", +"d3fd311e": "trading_deactivated()", +"d3fd9eba": "transferAuction(address,address,uint256)", +"d3fe1ae1": "updateMember(address,uint256,uint256,uint256)", +"d3ff09a5": "setTotalTaskEscrow(uint256)", +"d40027ec": "lockoutPeriod()", +"d401defe": "getBasicInfo(address)", +"d40224ec": "triggerSale(bool)", +"d402be57": "calcMode()", +"d402f87c": "setTotalProfit(address,uint256)", +"d4030114": "tableSize()", +"d40394be": "batchAddWhitelistedTransfer(address[])", +"d404d6c2": "pushEther()", +"d404ea23": "hashKey()", +"d405a069": "grantInitialAllocations()", +"d405d6f4": "Chally()", +"d40619b8": "getUsersScannersIds()", +"d4065763": "returnRemainingMoney()", +"d406e403": "test_startBlock()", +"d407d212": "claimJ()", +"d408746a": "GetContractAddr()", +"d4088e33": "setPrice(uint256,uint256,uint64)", +"d4092dd2": "getPOOL_edit_29()", +"d409a12c": "Kcoin()", +"d409ddda": "EtherizationUtils()", +"d40a71fb": "step1()", +"d40b9d9a": "OwnerHeartbeated(address)", +"d40c0a58": "saveTeamSpent(address,uint256)", +"d40c3084": "fundValues()", +"d40d4d76": "etherToSendBankRoll()", +"d40dc870": "MAX_AMOUNT()", +"d40e35da": "Interest_Rate()", +"d40e985d": "decompose(uint256)", +"d40e9b9c": "rakeEventPlaceholderAddress()", +"d40fa8bf": "ZRX()", +"d40fd402": "salarySent()", +"d41097e3": "disbandTo(address)", +"d4112c56": "changeUtilityAccount(address)", +"d41212c8": "_insertTokenMetadata(uint256,string)", +"d41376e1": "withdrawl(address,address,bytes32)", +"d4138673": "IkuraTransferToken(address,address,uint256)", +"d413bd66": "OfflineMultiSig(address,address,address[],uint256)", +"d414da2a": "addPatternUserIndex(address,bytes32)", +"d4155d1f": "getJuror(address)", +"d41584ab": "LogCertifierRemoved(address)", +"d416c997": "_stringsEqual(string)", +"d416d1a6": "lastInvestorPaidOut(uint256)", +"d416d4f3": "Balance(address,address)", +"d416efdb": "donationTo(address)", +"d417f18d": "getTopicNameAndVotesAt(uint256)", +"d4186ba4": "test_oneValidEqInt3()", +"d41977cd": "contractFee()", +"d419ef9f": "WinToken(address)", +"d41b6853": "enter(address,uint256,uint8,uint8,uint8,uint32[11])", +"d41bcb81": "phaseEndTime(uint256)", +"d41bdea7": "unlock(bytes32,bytes32,bytes32)", +"d41be98d": "createDebtToken(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"d41c85fa": "__redeem()", +"d41cc314": "EventUpgradeTank(address,uint32,uint8)", +"d41d661e": "remOne(address)", +"d41ded30": "encodeLength(uint256,uint256)", +"d41e3281": "DocumentManager()", +"d4200f94": "setCreditBitContract(address)", +"d4203561": "transferFee(uint256)", +"d420e4e0": "BCaaS()", +"d420e527": "BuyLimitsCrowdsale(uint256,uint256)", +"d4212e93": "storeInitialClaim(address,uint16[],uint256,bool)", +"d4214d1b": "releaseUnclaimedBounty(address)", +"d42151b0": "FFCTToken()", +"d4229b1a": "appBase(bytes32)", +"d422cf58": "numLocks()", +"d422e4e0": "takeFee(address,uint256,string)", +"d422e810": "exchange_commission_wallet()", +"d423740b": "setter(uint256)", +"d423754b": "removeFactProviderFromWhitelist(address,address)", +"d4245e5b": "transferringETH(address)", +"d424f628": "fundingGoalReached()", +"d425bd91": "calculateDepositInfoWitnessHash(uint256[])", +"d4264af0": "mintTo(address,bytes32,string,uint256)", +"d4269986": "getPuzzle(uint8)", +"d426b04e": "largeContribThreshold()", +"d426bb47": "allocateForPrivateSale(uint256)", +"d42706bd": "Batix()", +"d4270d60": "recall()", +"d427ccbf": "getEventAddress()", +"d427ce74": "getBylawsProjectDevelopmentStart()", +"d428bf3b": "SetdivForPrice(uint256)", +"d4291e0c": "num_hosts()", +"d429bfae": "currentTokenOffered()", +"d42a5011": "setPackLimit(uint16)", +"d42a9dd5": "ICO_PHASE1_PERIOD()", +"d42aa2f6": "getHealth(uint8[176],uint8)", +"d42ad6ea": "getMinAuditPriceMin()", +"d42b31b9": "_DeclineInsurance()", +"d42bd8a4": "receivedUETreturn(address,uint256)", +"d42bf301": "doTriggerTryAuth()", +"d42c334e": "DepositMasterContract(address)", +"d42cc0d1": "Planetagro_Exchange(address)", +"d42cda15": "getOnMintTargetValue(int256)", +"d42cfc41": "transferFeeDenominator()", +"d42d24fc": "auditContract()", +"d42d4c10": "PASSToken()", +"d42d8eed": "tag(address,uint256)", +"d42db190": "versionAddresses(bytes32,bytes32,address)", +"d42dca55": "getAuditors(uint256)", +"d42e26f5": "initializePresaleFundraiser(uint256,uint256,uint256,uint256)", +"d42e87ed": "callOnSignUp()", +"d42ed758": "MixManager()", +"d42eeb4f": "EtherDrugs()", +"d4300225": "publicGetBalance(address)", +"d430381b": "mayorCutPercentage()", +"d4313945": "setProviderInvitedUser(uint256,address,bool)", +"d431b1ac": "setPause()", +"d431ba8e": "lastBlock_v8()", +"d432a885": "withdrawedFoundationCounter()", +"d4331c21": "setSubTourFreezingTime(uint64)", +"d4332f50": "changeBPaddress(address)", +"d4335bd2": "getSevenCount()", +"d433ea6a": "CueCrypto()", +"d4346010": "verifiedTransferFrom(address,address,uint256,uint256,uint256,uint256)", +"d43503ab": "Sunset()", +"d4357107": "address_to_tokens_prev_week1(address)", +"d43582c8": "removeNOSPackage(uint256)", +"d4365b4b": "Weaver()", +"d436b6e2": "EtherAdvance()", +"d4371968": "MAX_IMMORTALS()", +"d4384156": "UbexToken(uint256)", +"d438fdbd": "offlineSales(uint256,uint256)", +"d439390c": "MIN_PURCHASE()", +"d43948ee": "transferGainedEther()", +"d439ef55": "distributionMinimum()", +"d43a0b4c": "hodlerTotalValue9M()", +"d43a7c16": "finalizePrivateIco()", +"d43c3bb9": "getData_30()", +"d43c45b8": "withdrawSurprisePot(address)", +"d43c5a4a": "setTeamVault(address,address,uint64)", +"d43ea9e1": "levelTwoTokenNum()", +"d43ef6b9": "__mulmod(bytes,bytes,bytes)", +"d43f24b0": "removeApprovedContractAddress(address)", +"d43fb152": "isMilistoneSubmited(bytes32)", +"d4403495": "OWN_mintToken(uint256)", +"d440c6f3": "getWorkerAffectation(address)", +"d441ea62": "CleanBankerProfit(uint8)", +"d4430bc7": "tokenSaleOngoing()", +"d443173d": "requestUnFreezeAccount(address,string)", +"d4434387": "PolyCompliance()", +"d443f64a": "Start_Resume_PreICO()", +"d443fc85": "acceptGuardianVend(uint256)", +"d4440991": "callTransfer(address,uint256)", +"d44512e3": "changePrestige(address)", +"d445afdc": "week1Price()", +"d445cc78": "unfreezeTransfer()", +"d44750f5": "bonus_price()", +"d448273c": "mineForMany(address[],bytes32[])", +"d4483263": "secondRoundMayStart()", +"d4492c57": "addInvestorGrant(address,uint256,uint256,uint256)", +"d449844d": "XbitfwdToken()", +"d449a832": "decimals(address)", +"d449ce7c": "Administered()", +"d44a2863": "changeBooking(string,uint256[],uint256,address,bytes32)", +"d44aadf7": "initROS()", +"d44aecb0": "ico1_startdate()", +"d44b01ec": "safeWithdrawERC721(address,uint256,address,address)", +"d44bc088": "getTaskId(uint256)", +"d44cf3dc": "_setPriceFactor(uint256,uint256)", +"d44d159d": "mintWithBase(address,uint256,uint256)", +"d44d3394": "WIDTH()", +"d44dbbaf": "addStringComparison(bytes32,bytes32,bytes1)", +"d44dd681": "beginLiquidation()", +"d44f2d3d": "getInitialWithdrawalDone()", +"d45036c7": "viewTeamTokens()", +"d4508698": "driveCar()", +"d4524c72": "manualEtherWithdraw()", +"d45294f5": "charityAmtToCharity()", +"d45318b9": "scoringDuration()", +"d4538051": "_emitHolderAddressAdded(bytes32,address,uint256)", +"d4540ca7": "isDeployerOrOperator()", +"d454f92e": "mNumVoters()", +"d4550efd": "addEngineerQuest(address)", +"d455b973": "changeStageBlock()", +"d4565916": "activateproduct(uint256)", +"d45769b8": "N2Contract()", +"d4582b56": "Token(string,uint8,string)", +"d4589835": "sellMorties()", +"d4589e99": "assertDowntime()", +"d458c522": "participantCapTier1()", +"d459197b": "distributeALCTokenBatch(uint256)", +"d4595aaa": "blockExpiration()", +"d459654a": "techSupport()", +"d45973f4": "turretElementBySubtypeIndex(uint256)", +"d4597aa1": "tokenFrozenUntilTime()", +"d459fc46": "SetCheckpoint(uint256,bytes32,bytes32,uint64,uint8[],bytes32[],bytes32[])", +"d45a717e": "topGoodsId()", +"d45b1ae4": "StandardGasPriceLimit(uint256)", +"d45b5f71": "getIcoStep(uint256)", +"d45baeab": "Deposit(uint8)", +"d45bcac1": "listAddresses(address[],uint256[],uint256[])", +"d45c1b06": "Bank(string)", +"d45c241c": "minBonus()", +"d45c4435": "getTimestamp(bytes32)", +"d45e09c1": "canTransfer(address,uint256)", +"d45efad5": "getAccessControl(address,address,uint8)", +"d4607048": "buyForEverybody()", +"d461518c": "p_setGameDuration(uint256)", +"d4616967": "deployCode(bytes)", +"d4620041": "getFirstRoundReleaseTime()", +"d4625a3a": "equals()", +"d4629ae7": "ddftFund()", +"d46300fd": "getA()", +"d4631019": "_startCounter()", +"d4638401": "oneImpInWei()", +"d4638fea": "operatorRedeemByTranche(bytes32,address,uint256,bytes,bytes)", +"d463ca18": "findSsp(address)", +"d463eeb3": "numLoans()", +"d464520c": "PowX()", +"d4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", +"d4653a3b": "EXToken()", +"d465abca": "notInArray(address)", +"d465c392": "revealProofOfPerfBlock(uint32,string,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", +"d466a03f": "citizensAmounts(uint256)", +"d466a046": "LogBidExpired(bytes32)", +"d466ab6b": "ROLE_BOUNCER()", +"d467cc00": "calculateRate(uint256,uint256)", +"d467cc64": "DoubleOrNothingImpl()", +"d4683f6d": "ArticCoin(uint256,string,string)", +"d4686534": "LYNIA()", +"d46a005a": "addWhiteListUser(address,uint256,uint256)", +"d46a5d7e": "vote(uint256,bool,uint256)", +"d46aa610": "buyInMarket(uint256)", +"d46b2987": "Luvtoken()", +"d46b9b84": "lifeN(uint256)", +"d46ba0c9": "etherRaisedPerWallet(address)", +"d46c0f40": "finishPrivatePlacement()", +"d46cddd4": "capPresale()", +"d46d0393": "getNextRegionId()", +"d46d0a22": "setV_S(uint256)", +"d46d79bb": "withdrawAllEth(address)", +"d46dbca1": "developerTemplateAmountLimit()", +"d46dd5bb": "showCurrentWinner()", +"d46ea4a4": "EXP_18()", +"d46eb119": "wrap()", +"d46f8eb1": "getSource(string,string,string,string)", +"d46ff2f1": "getTweetsDiff(uint256)", +"d470097c": "lastLargestHODLER()", +"d4701c35": "activate_kill_switch(string)", +"d4702576": "calculateTokens(uint256,uint256,uint256)", +"d4717240": "setkeytoken(address)", +"d4724a57": "TokenTransferForFounder(address,uint256,address,address)", +"d472d6bf": "get_token_balance(address)", +"d472fa26": "lockTokenToDate(address,uint256,uint256)", +"d472fe7e": "totalTokensICO1()", +"d4735d92": "Transfer(bytes32,address)", +"d4737d11": "setSampleRegistry(address)", +"d47380e0": "_mintToken(address,uint256,uint256,string)", +"d4740b78": "getAmountWeekly(uint32)", +"d4747f0a": "IQC()", +"d474a352": "submitBlockHeader(bytes,uint256)", +"d47510c0": "UNICORN_ID()", +"d475526f": "numActiveGames()", +"d475b1ab": "phase5Price()", +"d475bfa8": "proxyClaimTokens(address,address)", +"d47637f7": "getLittafiContent(bytes32,uint256)", +"d476620b": "winnerKey()", +"d476758f": "extractablePercentage()", +"d4768994": "soldIdeaWeiPostIco()", +"d477e3d4": "checkAddERC20(address)", +"d477f05f": "setDev(address)", +"d47875d0": "getScore(address)", +"d4788cc3": "HGT_Reserve()", +"d478f533": "allowFreezing(address)", +"d4793a9b": "getNextGuessId()", +"d4798327": "getPendingBattleRewardsCount(address)", +"d47a2010": "bnbRaised()", +"d47b44c3": "Fool()", +"d47bb75c": "TOKENERC20(uint256,string,string)", +"d47c0fb0": "onIncome()", +"d47c9e11": "eastadsCREDITS()", +"d47cc085": "sameNum()", +"d47cc9d7": "start_the_race()", +"d47cf598": "setDayThird()", +"d47d3202": "releaseINATokenToTeam()", +"d47d5cfe": "swarmTree()", +"d47d996e": "addCrowdSale(uint256)", +"d47dbde2": "buyerFundRelease(uint256,address)", +"d47e813d": "SteveCoin()", +"d47e81eb": "blockSettlement(uint64,uint64)", +"d47eb8ee": "validCall(uint256,bytes)", +"d47eca0a": "checkDiv()", +"d47ee6c1": "numberOfLeaderboardPlayers()", +"d47f269e": "getHand(uint256)", +"d4807fb2": "initializeRound()", +"d4810b61": "PRE_ICO_START()", +"d48210bc": "perValue()", +"d4821432": "endICOStage8()", +"d4849a8b": "newEthBackedLoan(uint32)", +"d484a285": "PRE_ICO_SLGN_LESS()", +"d48599e3": "setdrawadm(address)", +"d4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", +"d4859dc5": "disableManager(address)", +"d48675f3": "minGoal()", +"d4867694": "updateship(uint256,uint256)", +"d48684d8": "changeLimit(uint256,uint256)", +"d4868c32": "tokenReserved3Deposit()", +"d486d129": "releaseVesting(address)", +"d4871517": "BTCLotto(address,uint256)", +"d487758a": "forgive(uint16,uint32)", +"d4878cac": "_transferChild(address,address,uint256)", +"d487b21a": "assets_controller()", +"d4884b56": "getEventEnd()", +"d4897729": "getCET4InfoById(uint32)", +"d489a018": "adminAddWorldBalance()", +"d489b701": "starEthRate()", +"d489b83f": "teamOneShares()", +"d489c0bf": "getBuyCount(address)", +"d489e180": "getPendingPartCrateLength()", +"d489fc8b": "_useOraclize()", +"d48a1f6e": "returnPurchasedEther()", +"d48a9340": "SaveCryptoToken()", +"d48b2e92": "Identify()", +"d48b55e5": "calculateTokenOnlySellPrice(uint256)", +"d48b7a9d": "CryptoMyWord()", +"d48bb321": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes4,uint256)", +"d48bfca7": "addToken(address)", +"d48c4193": "addWhitelistedTransfer(address,address)", +"d48d02f6": "withinLimits(uint256)", +"d48e638a": "getCreator(uint256)", +"d48e6a1b": "TEAM_TOKENS_PERCENT()", +"d48e9cd5": "OMG()", +"d48ea599": "getBeneficiaryByTime(address,uint256)", +"d48f08e5": "disableRegulator(address)", +"d48f7196": "numHodlers()", +"d48fb85c": "FIVE_YEAR_KEEPING()", +"d48fe280": "OK()", +"d4912ab1": "SNTPlaceHolderMock(address,address,address,address)", +"d491461a": "Gnosis()", +"d492283f": "switchLock(bool)", +"d4923d4e": "getUserVote(address)", +"d493b9ac": "transferAnyERC20Token(address,address,uint256)", +"d494c388": "setMinBuyAmount(uint256)", +"d49620ec": "RoundFinalized(uint256)", +"d49636c2": "san()", +"d496a4f1": "cashBackVotes()", +"d496bde4": "mainSaleTime()", +"d496f9d2": "PlayReferred(uint8,uint8,uint8,uint8,address)", +"d4971613": "HashBounty()", +"d49758d6": "use_bounty_token(address,uint256)", +"d4975d71": "changeVoter(address,address,string)", +"d4981928": "WorkOrder(uint256,address,address,address,address,uint256,string,address,address)", +"d499555b": "getFirstActiveDuel()", +"d49982cc": "sendPreSaleBonusMany(address[])", +"d499b2c3": "pks(uint256)", +"d49ab244": "ICOWhitelisted(address)", +"d49ad161": "addTokenDetails(uint256,address[],uint256[],uint256[],uint256[])", +"d49c51b7": "claimedMK(address)", +"d49ce78d": "WiggaToken()", +"d49d1836": "openegg(uint256,uint256)", +"d49d1bac": "transferERC223(uint256,address,address,uint256,bytes)", +"d49d5181": "MAX()", +"d49dbb5c": "minBalanceToSell()", +"d49dd9a8": "getStateofContract()", +"d49dd9e4": "SonnetCoin()", +"d49edbd8": "lastPrizeGiven()", +"d4a03f60": "acceptAdoptionRequest(bytes5)", +"d4a04ff4": "importFromOld(address,address,address,address,address[],uint256[])", +"d4a226c3": "bountyManagerDistributionContract()", +"d4a2498d": "addData(string)", +"d4a24f06": "checkPermissions()", +"d4a28823": "EOSSale(uint256,uint128,uint256,uint256,uint128,string)", +"d4a2f3ca": "getShipAuctionEntity(uint32)", +"d4a34564": "start3BonusPeriod3()", +"d4a34a9e": "tokenDecimalsLeft()", +"d4a3e9d7": "capture()", +"d4a436cc": "_countBits(uint256)", +"d4a4513e": "fpct_packet_size()", +"d4a61d61": "OnlineCasinoCoin()", +"d4a631ab": "ContractLogEvent(int256,int256,uint256,string,string)", +"d4a67930": "openBuy()", +"d4a6fd3e": "has_presale_started()", +"d4a8d9ba": "Inbox(string)", +"d4a9991f": "requestDividends()", +"d4a99d61": "finishDelivery()", +"d4aa6b59": "Button(uint64,uint64,uint64,uint64,uint64,address)", +"d4aa7394": "GameStatusUpdate(bool)", +"d4aa7d38": "City(uint256,string,string)", +"d4aae0c4": "kernel()", +"d4ab4a89": "_migrateRobot(string)", +"d4ac6af5": "MAX_REFERRAL_TOKENS()", +"d4acaf6c": "ecrecoverFromSig(bytes32,bytes)", +"d4acfa01": "tokenFrozenSinceBlock()", +"d4ad678e": "addItem(bytes16,uint16,uint16,bool)", +"d4ae1061": "getPurseDetails(uint256)", +"d4afc8b6": "retrieveERC(address)", +"d4b03d34": "changeValueBonus(uint8,uint256,uint256)", +"d4b088f9": "ICO_PHASE2_AMOUNT()", +"d4b0a23b": "addWhitelists(address[],uint256[])", +"d4b0c6e5": "stringToBytes10(string)", +"d4b0e966": "changeSaleStart(uint256,uint256)", +"d4b15ee0": "LogRefund(address,uint256,uint256)", +"d4b175d4": "mineTokens(address,uint256)", +"d4b182d4": "block(address,bytes32)", +"d4b1a462": "LogBought(uint256)", +"d4b1cdcc": "isResolverFor(uint256,address)", +"d4b1d19f": "testThrowsTransferDisabled()", +"d4b2931c": "tokenSEEDcap()", +"d4b2d5f0": "SQR_TOKEN()", +"d4b3f5b6": "tokenWithdraw(address,uint256,uint256)", +"d4b572be": "RESERVE_TOKENS_SUPPLY()", +"d4b64f35": "getBalanceOfModifiedWeth()", +"d4b71aa9": "maxPresaleWei()", +"d4b795c0": "getCurrentRoundEntry()", +"d4b83992": "target()", +"d4b8a6f1": "setFeeSchedule(uint256,uint256,uint256,uint256)", +"d4b9e410": "coiner()", +"d4ba15ad": "earlyPariticipantWeiPrice()", +"d4ba769c": "getLatestComponent(string)", +"d4badfad": "totumAllocation()", +"d4bb02e4": "changeRatePreSale(uint256)", +"d4bb1f28": "FCOIN1346Token(uint256,string,string,uint256)", +"d4bc0942": "withdrawOracleFunds()", +"d4bc87d9": "currentPriceChangeNumber()", +"d4bcffe4": "AbxyjoyCoin()", +"d4bd5a0d": "addCollaborator(uint256,address)", +"d4bdb879": "tokenSaleHasFinished()", +"d4bdc45f": "downvote(uint256,int256)", +"d4bde313": "ownBalance()", +"d4bdfe00": "ETCTransfer(address,address,uint256)", +"d4be5f68": "ATL_PER_ATP()", +"d4be6356": "authentication(bytes8)", +"d4be7714": "bornFamedStar(uint256)", +"d4bffa5a": "STATE_INITIAL_BIDDING()", +"d4c0cbce": "NovaCoinTransfer(address,uint256)", +"d4c1089b": "WorldRecord(string,bytes32,address)", +"d4c24db7": "StarterTokenSale()", +"d4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", +"d4c30ceb": "getFeeBalance()", +"d4c34dbb": "changeSoulCap(uint256)", +"d4c3eea0": "totalValue()", +"d4c46fa6": "setDeploymentPriceYear(uint256)", +"d4c49094": "WithrawDevToken()", +"d4c50f00": "coinPerEth()", +"d4c55f56": "wkaToken()", +"d4c6d9ad": "getbetresult(bytes32)", +"d4c72e7f": "etherollBeneficiary()", +"d4c76e8b": "MaxToken()", +"d4c80edf": "amountWagered()", +"d4c8fdae": "saleEtherRaised()", +"d4c9b1f2": "setMainAddress(address,address)", +"d4ca68ea": "replacePolicyTo(address,uint8)", +"d4cab39b": "AddedPrecommitment(address,uint256)", +"d4cae6e2": "getMetadataURL(bytes,uint256)", +"d4caf2a4": "setCodeSize(uint256)", +"d4cd5509": "CulturalCoinCrowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"d4cdeb3c": "isInPresale()", +"d4ce1415": "detectTransferRestriction(address,address,uint256)", +"d4ce545a": "random(bytes32)", +"d4cf02ef": "getStringToSignWithKey(string,int256)", +"d4d0aced": "transferPartOfUnsoldTokens(address,uint256)", +"d4d0d6e6": "addTrusted(address)", +"d4d0e931": "resetAllVotes()", +"d4d1b7da": "approveTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"d4d227de": "PBToken()", +"d4d2af8d": "sellCoin(uint16)", +"d4d2e23c": "LogRandom(uint64)", +"d4d30bd9": "GreenX(address,address,address)", +"d4d33ece": "isRebirthAllowed(uint256,uint256)", +"d4d37883": "sendSurplusTokens()", +"d4d42658": "getTokenRateEther()", +"d4d42c91": "SetupML(uint256,uint256,uint256,uint256)", +"d4d5d32a": "collectFee()", +"d4d64f2b": "getRevokeHash(bytes,uint256)", +"d4d6adc0": "SiliconXCoin()", +"d4d6cdc4": "getStageTotal()", +"d4d6d366": "metadataUrlSuffix()", +"d4d6f5ee": "deleteChannel(address,address,address)", +"d4d70128": "totalContributions(uint256)", +"d4d728fe": "IsClaimed(bytes32)", +"d4d7b19a": "isHolder(address)", +"d4d81a13": "ClownCore()", +"d4d82dae": "MCFitCrowdsale(uint256,uint256,uint256,address)", +"d4d84da5": "addTokenShop(address,uint256)", +"d4d90bd5": "MINIMUM_PURCHASE_AMOUNT_IN_WEI()", +"d4d91bdd": "_createOpinion(string,address,uint256)", +"d4d92b14": "mintInternal(address,uint256)", +"d4d96ac5": "flag(string)", +"d4d9748d": "NeoToken()", +"d4d9bdcd": "approveHash(bytes32)", +"d4d9f559": "addWhiteListAddSetAuctionObj(address,uint256,uint256)", +"d4db3791": "processTransferResult(address,address,uint256,bool)", +"d4dc8e83": "walletCreateSnap(uint256,uint256)", +"d4dca69b": "thisAddress()", +"d4dcbc60": "declineApproval(uint256)", +"d4dd1594": "updateLandData(int256,int256,string)", +"d4dd26fb": "initKYCUser(uint256)", +"d4dd5d99": "LiteXTokenVesting(address,uint256,uint256,uint256,uint256,bool)", +"d4dd707f": "upgrade_node(address,address,string)", +"d4dd92a9": "TeamAllocation()", +"d4def0ba": "escrowedTokens()", +"d4df0c6d": "setSaleAuctionAddress(address,address)", +"d4df1be8": "getETHNeedPay(uint256,uint256)", +"d4df6152": "getInvestorByIndex(uint256,uint256)", +"d4df89e2": "messageBoard1(string)", +"d4dfadbf": "getMarket(address)", +"d4dfc4b9": "MinimalManuscript(bytes32,string)", +"d4e08743": "isVaidUsername(string)", +"d4e12f2e": "approve(address,int256)", +"d4e17e6d": "closeBuy(bool)", +"d4e19bd1": "HART_NETWORK_ID()", +"d4e30489": "NewYorkCoin()", +"d4e32938": "subuser(address,uint256)", +"d4e4716f": "_setWhitelistedUser(address)", +"d4e4841d": "tokenToEthTransferOutput(uint256,uint256,uint256,address)", +"d4e678b8": "refundTransaction(uint256)", +"d4e75363": "NextDistribution(uint256)", +"d4e77133": "SendCoin(uint32,uint32,uint32,address)", +"d4e78272": "Draw()", +"d4e7b9cf": "amountAvailableToCashout()", +"d4e823a3": "createVendingItem(uint256,uint256,uint256,uint256,uint256)", +"d4e8b749": "periodITO_weiPerToken()", +"d4e8e063": "startGrantAuthentication(address)", +"d4e90e24": "CCTC()", +"d4e93292": "withdrawal()", +"d4ea7b08": "_emitPublicCapabilityRemoved(address,bytes4)", +"d4eaa9fd": "approveAndCall(uint256,bytes)", +"d4eb139d": "migrateSet()", +"d4eb21ff": "PonderAirdropToken()", +"d4eb4186": "setB0xAddresses(address,address,address,address)", +"d4eb4540": "BLOCKTIMEOUT()", +"d4eb487e": "getProtectHourglass(bytes32,uint8)", +"d4eba667": "updateNovaContractAddress(address)", +"d4ebc5ff": "voteUp(uint256)", +"d4ed0b46": "setCRaddress(address)", +"d4ed2cf5": "candidateTillExchange()", +"d4ed8990": "updatePoolAddressCapTier1(uint256)", +"d4ee025f": "resetRequest()", +"d4ee1d90": "newOwner()", +"d4ee4041": "removeBlock(address)", +"d4ee9415": "addPurchased(uint256,uint256)", +"d4ee9fba": "existPublicKey(bytes32,address)", +"d4eeb6ad": "seasonTopSalesRewards(uint16)", +"d4eec5a6": "optOut()", +"d4efcfe4": "getAccountInformation(uint256)", +"d4f04289": "ownerSellArmy(uint256,uint256)", +"d4f06298": "UpdatedMainAccount(address)", +"d4f0ca3f": "onlyTestSetTimestamp(uint256)", +"d4f0ebe6": "getWeaponNb(uint8[176],uint8)", +"d4f114a6": "numOfBoundaries()", +"d4f11ab2": "updateCompanyWallet(address)", +"d4f2e67c": "ico(address,uint256)", +"d4f2f1da": "EthereumNano()", +"d4f397b5": "getLootClaimed(uint256,address)", +"d4f3d6b8": "updateEditionType(uint256,uint256)", +"d4f3dd84": "_generation()", +"d4f50f98": "getVoter(address)", +"d4f639ea": "run2()", +"d4f6aa98": "getLargePaymentBonus(uint256)", +"d4f7329e": "minttoken(uint256)", +"d4f74bf4": "curatorAccount()", +"d4f77b1c": "joinGame()", +"d4f96a09": "giveawayAddr()", +"d4fa83c3": "setWhitelistTx(address)", +"d4fa9021": "DeductABS(uint256,uint256)", +"d4fac45d": "getBalance(address,address)", +"d4fb0bc1": "payOut(uint256,uint256)", +"d4fb0d23": "totalGuess()", +"d4fb9a01": "tradingStatus()", +"d4fbe1e0": "devAllocation(address,uint256)", +"d4fbeb19": "registerToken(address,string)", +"d4fc5822": "userWeiSpent(address)", +"d4fdbcff": "ViewDividendPoolEnds()", +"d4fef717": "APC(uint256,string,string)", +"d4ff60cb": "URB()", +"d4ff88d5": "TokenSent(address,uint256)", +"d4ffd1bd": "updateStrategy(uint256,string,string,string,address[],uint256[],bytes32)", +"d5002f2e": "getTotalShares()", +"d50030ad": "getMyDividends()", +"d5005c35": "COINVR()", +"d5009584": "getManager()", +"d500ca00": "assignReward(address,uint256)", +"d500dd6a": "challengeTimeout(uint256,bool,address)", +"d500f861": "buyFromWallet(uint256,bytes32)", +"d501953d": "poolTokenAmount()", +"d5020ce8": "daysMinutesTilExpiryTime()", +"d5025625": "terms()", +"d502db97": "getAddr(string)", +"d5034f2f": "changeRegistrationStatuses(address[],uint256[])", +"d503d33f": "MyPoolBalance()", +"d503e948": "developer_edit_text_minimum_period(string)", +"d503ef95": "getCategoryEvaluation(address,uint256,uint256,address)", +"d50495f4": "addTransaction(bytes)", +"d504cb65": "currentBet()", +"d504ea1d": "getArray()", +"d5050493": "tokenOf(address,address)", +"d505c1cf": "currJackpotBetID()", +"d506355c": "getRentInfo()", +"d5064037": "BitcoinVision()", +"d5065090": "setVendingStartPrice(uint256,uint256)", +"d5072607": "auditTimeout()", +"d5089396": "Token(string,string,uint8,uint256)", +"d509b16c": "testWithdraw()", +"d509b1f9": "like(address,address,uint256,string,address)", +"d50a04f4": "dataPerUsd()", +"d50a3d2c": "privateSale(address,uint256)", +"d50b3065": "addTokenBalance(address,uint256)", +"d50b65d7": "startBlockjack()", +"d50b7123": "testLockTokensForTrading()", +"d50bb794": "getComponent(uint256,uint256,uint256,uint256)", +"d50cb88b": "priceMultiplier()", +"d50d4822": "revokeParticipation(address)", +"d50e38c6": "IbkToken()", +"d50e829e": "setStopped(bool)", +"d50f6bf0": "transferETH(address)", +"d50f6d3a": "getPartner(address)", +"d50f7c73": "lastBlock_v10()", +"d5102704": "testRenameStore()", +"d51033db": "getTuple()", +"d5119402": "PUBLIC_SALES_3_PERIOD_END()", +"d511beec": "WithdrawICOEarnings()", +"d511cc49": "DAILY_PURCHASE_LIMIT()", +"d511f6c0": "startBuyingTokens(bool,uint256,uint256)", +"d5144eca": "updateUserBio(string,string)", +"d515b1ce": "Team(address)", +"d515be39": "getTokenName(address,uint256)", +"d5167b26": "partialTrade(uint256)", +"d5170fcc": "BonusFinalizeAgent(uint256,address)", +"d5171523": "euroteambet()", +"d517bc6f": "calcPointShamir(uint256,uint256,uint256,uint256)", +"d5182b70": "blocked(uint256)", +"d5185115": "forwardTokens(address,address,uint256)", +"d51902cf": "fallbackAccount()", +"d5193235": "mintUserAdoptionTokens()", +"d519bdcb": "distributeSML(address[],uint256)", +"d519fdc5": "alterGiveKarmaFee(uint256)", +"d51abbd9": "updateMaxTxGas(uint256)", +"d51c2454": "stepOne(int256)", +"d51c86e7": "setData_12(string)", +"d51d4fa8": "Securities_3()", +"d51e1737": "creedex(address,address,address,uint256,uint256,uint256)", +"d51eda9a": "AMC()", +"d51f5abd": "BEXMToken(uint256,string,string)", +"d52230c4": "totalContributionsBySender(address)", +"d5235a04": "contractEnable()", +"d5246eba": "queryRandom()", +"d5250364": "checkWrapperBalance()", +"d52550a4": "TokenPool(address,address,address)", +"d525aa32": "conditionalTransitions()", +"d5260eea": "getChannelAddress(string)", +"d526b9bd": "_allow()", +"d526c08e": "uv()", +"d526c40c": "_denyPublishSecret()", +"d526d332": "getLogic(uint256)", +"d526eaeb": "getMaximumReadsPerStep()", +"d5280c28": "AuthorizedCreate(address,uint256)", +"d529a072": "buyAddress(address,bytes8,uint256)", +"d529debb": "subOnHold(uint256)", +"d52a3524": "addAction(bytes32,bytes32,string,uint256,bool,uint256,uint256)", +"d52a5fc4": "decomission()", +"d52a7cbf": "setWallet1(address)", +"d52a7e86": "totalRewardedAxies(bool)", +"d52b38cd": "updateVendorApplicationStatus(string,string,string,string,string,string)", +"d52b5cb4": "_addLegitRace(address)", +"d52b79bd": "XTT()", +"d52b8a0e": "addVineyardEndorsement(string,uint256,bool,string,string)", +"d52b9e40": "activateTokenSwitch()", +"d52c6c08": "approCertificate(uint256)", +"d52e4633": "futureRoundTokensRelease()", +"d52f7122": "myCredit()", +"d52f916f": "setAddressCrowdsale(address,address)", +"d52f9f0f": "axonburn(uint256)", +"d530040a": "createAddressHash(address,bytes32)", +"d5307b0c": "weiContributed(address)", +"d53087b2": "JANUS()", +"d531eeaa": "icoBonus1()", +"d5320300": "getWithdrawableAmountANPES(address)", +"d532968f": "_chkSellerLmts(address,uint256)", +"d532df3c": "setCraftAuctionAddress(address)", +"d532e481": "activateFrozenAccount(address)", +"d533d0db": "changeUserLangAbility(bytes32)", +"d534831c": "sumOfWeights()", +"d5349606": "removeDeadTurns(uint16)", +"d535268d": "BUZZ()", +"d5353792": "setWithdrawGasCost(uint8)", +"d5356b7d": "TOKENS_PER_USD()", +"d5356fe1": "tokenFallback(address,address,uint256)", +"d53590a7": "durationPreSale()", +"d5364231": "forcedRedeem(address,uint256)", +"d536c3ae": "beginPhaseTwo(uint256)", +"d5370904": "getAvailableTokenCount()", +"d5375a5c": "getHigherInstance()", +"d537c3e3": "blockLockActive()", +"d537df3c": "claimTwitterIdIfNeededThenStealCardWithTwitterId(uint256,address,uint8,bytes32,bytes32,uint256)", +"d537e131": "calculateMatchPrice_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes)", +"d538359e": "Copeland()", +"d5387acb": "buy4(address[],address[],uint256[],bytes,bytes,bytes,bytes)", +"d539a014": "SSDTokenSwap()", +"d539a226": "assertEq10(bytes10,bytes10,bytes32)", +"d53a9b85": "tokensPerCents()", +"d53aaec2": "cPT()", +"d53abe1b": "stopRound(bool)", +"d53b2679": "activated_()", +"d53b4ab4": "communityAllocation()", +"d53b932a": "percentLeft()", +"d53bb6ac": "EthBita()", +"d53bc605": "testMultitransfer1()", +"d53beee4": "isOk(bytes1)", +"d53c61bf": "slasherAddress()", +"d53ca3c7": "setDiscountMember(address,address,string,bool)", +"d53ce956": "setOperationAddress(address)", +"d53dbe8e": "publishier()", +"d53e35db": "Garfield()", +"d53e963b": "buyCore(uint256,uint256)", +"d53f1cbd": "getBidFee(uint256)", +"d53f8208": "fundaria()", +"d541ca5d": "BONUS_PCT_IN_ICONIQ_SALE()", +"d5420df4": "drawToHand(uint256,uint32,uint256)", +"d5425571": "gasonBuffPercentage()", +"d5427123": "insertData(uint256,string)", +"d543f9d6": "setTeamPerfitAddress(address)", +"d544361e": "increaseShares(uint256,address)", +"d544e010": "removeAuthority(address)", +"d5456bc6": "lastBlock_a14Hash_uint256()", +"d545782e": "updateTokenRate(address,uint256,uint256)", +"d545ee2d": "CustomToken(string,string)", +"d54604ae": "min_fundingGoal()", +"d54656d5": "startTrade(address,address,uint256,uint256,uint256)", +"d546c975": "getCharacterServer(uint256)", +"d5472a5e": "userRewardAccountBalance(address,address)", +"d5472fcb": "removeWhiteLister(address,address)", +"d5477d37": "getColdWalletAddress()", +"d54839bf": "FEE_DEV()", +"d54a6bfb": "setHmcAddress(address)", +"d54ac04d": "get_master(bytes32)", +"d54ad2a1": "totalClaimed()", +"d54ad593": "getgamecardintro(uint256)", +"d54b02ec": "weiToCollectByInvestor(address)", +"d54b066f": "calcAmount(uint256)", +"d54c03a9": "NOORToken()", +"d54c2a63": "improveCard(uint256,uint256,uint256)", +"d54c4726": "usageCost()", +"d54c7099": "TVContract()", +"d54c7b4f": "_triggerCooldown(uint256)", +"d54c8c87": "emitApprove(address,address,bytes32,uint256)", +"d54ced9c": "canContributeAmount(address,uint256)", +"d54cefc1": "transferTokens(address,address[],uint256[])", +"d54dc5eb": "REGISTRATION_COST()", +"d54dd8f9": "slice4(bytes,uint256)", +"d54e583a": "transferFrom(address,address,uint256[],uint256[])", +"d54f4dd6": "TestVeryCoin3()", +"d550172a": "verifySig(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,address)", +"d5503d5f": "payBalance()", +"d550668d": "setContract(bytes32,uint256,address,address)", +"d550f044": "setAllowLocalBuy(bool)", +"d55108be": "JOLDEAME()", +"d5518feb": "RequestCollectInterface(address)", +"d551f601": "_auth_mode()", +"d552844b": "signTrueloveByCOO(bytes32,string,string)", +"d55321db": "newGame(address,string,string,uint256,uint256,uint8,uint8,uint8,uint256)", +"d5537c0d": "setUsersCap(uint256)", +"d553adf0": "frozenFunds(address)", +"d5544f94": "getFundsAndAvailable(address)", +"d5547587": "ReviewToken(uint256,string,uint8,string,address)", +"d554ba86": "round_b_begin_date()", +"d554f8b4": "changeDeDeStorageAddress(address)", +"d5551518": "CapitalMiningToken(string,uint8,string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"d5556544": "offset()", +"d5562901": "getFeeSchedule()", +"d5563f31": "createAuction(uint256)", +"d556c8f5": "getHashID(address,bytes32)", +"d5572bd6": "closeCrowd()", +"d5582205": "getCertifiedStudentAtIndex(uint256)", +"d5582965": "stopMint()", +"d55a772d": "getCurrentOwner(string)", +"d55ac94c": "WhiteBullsToken()", +"d55b7703": "privateIcoCap()", +"d55b9eb1": "XIAOMI()", +"d55b9f4d": "DISCOUNT_PRIVATE_PRESALE()", +"d55bc06a": "LDEX()", +"d55bdc5f": "getCampaignPriceById(bytes32)", +"d55c4af8": "_p3dSellPercentage(uint256)", +"d55c980f": "submitEntry(bytes,string)", +"d55c9c84": "confirmWinner()", +"d55cc3e2": "JSONpath_raw(string,string)", +"d55d1fed": "EGGS_TO_HATCH_1Dragon()", +"d55e62a0": "removeTrusted(address)", +"d55e725b": "initialFunds()", +"d55ec654": "wash_list(uint128)", +"d55ec697": "upgrade()", +"d55edcfd": "freezeChangesToVesting(address)", +"d55fe582": "isAssociated(address)", +"d560f696": "releaseRoto(address,bytes32)", +"d561be54": "createVestingContractWithConstantPercent(address,uint256,uint256,address,uint256)", +"d561ef2b": "setMinBuyableAmount(uint256)", +"d562a121": "calcTokens(uint256)", +"d562de0b": "investor_insert(address,uint256)", +"d562deef": "getAffiliateFee()", +"d5630f71": "AlpenCash()", +"d5635444": "getCoupon(string)", +"d5656ccf": "getWager()", +"d5666b5f": "versionBase(bytes32,bytes32,address)", +"d5667d8a": "updateUSDWEI(uint256)", +"d5668a92": "_checkTransactions(address)", +"d5670f59": "VisualChainToken()", +"d567c0e1": "cashBackWeight(address)", +"d5687efd": "WhitelistSetDay(address,uint8,uint256)", +"d5698726": "LogSetPicosPerEther(uint256)", +"d56a0a88": "bipedaljoe()", +"d56a4555": "setLink(uint256[2])", +"d56a62cf": "getPurchases(address,uint256)", +"d56a9314": "transfer_m(address,uint256,string)", +"d56b2889": "finish()", +"d56b7577": "BM_ICO()", +"d56b7746": "mintTokenCollection(string)", +"d56bd142": "getPayments()", +"d56cd796": "addNewCourse(int128,string,string,string,string)", +"d56d229d": "nftContract()", +"d56de6ed": "adminAllowance()", +"d56e3068": "getTotalDonated()", +"d56ea1b0": "pausePending()", +"d56efabf": "LockableToken()", +"d56f279f": "resignOwnMembership()", +"d5708d5a": "setMinAmount(address,uint256)", +"d571829e": "mintTokensToEralyInvestors()", +"d571a9a9": "Hawaii()", +"d571dbac": "getHeadInfo()", +"d571e645": "validStoreBuff()", +"d571edb0": "getExchangeGroupsLength()", +"d572056e": "testItem(bytes)", +"d5722518": "setUintsOwnerCount(address,address,uint256,bool)", +"d5723bf7": "finishGame(uint256,uint256)", +"d572fd99": "getPlayerCardsNumber()", +"d574bcdf": "reLoadXname(uint256,bytes32)", +"d575af74": "getSubscriptionServiceId(bytes32)", +"d575f332": "updateCampaign(address)", +"d5762230": "overStakeAgeBurn()", +"d5767fb6": "_emitCapabilityAdded(address,bytes4,uint8)", +"d576dc58": "TOKEN_SALE_LIMIT()", +"d5775f5c": "getCurrentSellPrice()", +"d5778d37": "preIcoTokens()", +"d5778efa": "STASHToken()", +"d5778f07": "transferAdvocatedTAOLogos(address,address,address)", +"d5779b7f": "imageUploadComplete(address[16],uint256)", +"d577ab70": "authorizeEscrowService(address)", +"d577d785": "setJPYC(address)", +"d57869d4": "findTrustedContract(address,address)", +"d578ec6c": "uploadData(bytes32[100])", +"d578f434": "BONUS_PCT_IN_VREO_SALE_PHASE_2()", +"d579f9e8": "changeBinary(uint256)", +"d579fd44": "approveNextOwner(address)", +"d57a0577": "TEAM_BONUS_PER_CENT()", +"d57a12f5": "testCheckSigs()", +"d57a9e4f": "LATER_AUCTIONS_INITIAL_PERCENTAGE()", +"d57ad588": "hashToSign_(bytes32)", +"d57b8932": "leaseBlock(uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"d57bde79": "highestBid()", +"d57c00de": "PayForServiceETH()", +"d57c1ea2": "addIssue(uint256)", +"d57c25f8": "UnderratedToken()", +"d57f62ff": "getPeriodLockedBalanceFor(uint256,address)", +"d5812ae1": "positionPrice()", +"d5813323": "traded(bytes32)", +"d583644b": "upgradeStrength(uint256)", +"d5838ca7": "addPublicKey(address)", +"d5847d33": "conversionRatesContract()", +"d585b852": "DAOToken()", +"d586bd4e": "donateP3D()", +"d586d2e4": "cancelRequest(uint256,uint256)", +"d586e30f": "calcNextReward()", +"d587dbf9": "change_specific_addy(address,uint256)", +"d588acc4": "claimMiningReward()", +"d588b892": "testCount(uint256)", +"d588d4d8": "hasHash(bytes10,uint8)", +"d5893bb2": "tradeEventEnabled()", +"d58b8282": "roundFiveTime()", +"d58b82bb": "getCampaignDailyPrice(address)", +"d58bf09a": "redeem(bytes32,address,bool[4])", +"d58c4b85": "siteAccount()", +"d58d1566": "subsidyHalvingInterval()", +"d58e1758": "totalConvertLotsByAddress(address)", +"d59070f8": "mintCopieExecutoire(bytes32)", +"d5909149": "CerberusNetwork()", +"d590bf49": "deleteCase(uint256)", +"d590df4a": "setFirstPeriodCap(uint256)", +"d591221f": "testTransfer()", +"d59138ef": "markReleased()", +"d59167f6": "claimComputation(bytes,bytes32)", +"d591d777": "finanVestingStages()", +"d592c243": "Issuance(address,uint256,uint256,uint256)", +"d592f5fd": "reserveFullMintAllowance()", +"d593c953": "revenueShareIdentifierList(address)", +"d5949bf3": "RegistroBlockchain()", +"d595c331": "burnSupply(uint256)", +"d5969f2b": "grantEnable()", +"d596c862": "toggleRedeemActive()", +"d59768a3": "updateAddress()", +"d597b634": "ETC()", +"d597b8c8": "getOffer(bytes32)", +"d597c6bb": "_generateSpaceship(uint16,address)", +"d598aef8": "TESTToken()", +"d598b2c5": "getTopCompanyStartBlock()", +"d598cae5": "ACTIVE_LOAN_CANCELED_BY_LENDER_STATUS()", +"d598d2ab": "Reward(address,address,uint256,string,uint256)", +"d598d4c9": "service()", +"d5992ef5": "isSuited(uint8,uint8)", +"d5996502": "TheMLMDemo()", +"d59aec08": "notesOf(address)", +"d59b5d4e": "getDocumentIdWithContentHash(string)", +"d59ba0df": "setDistributor(address,bool)", +"d59cf17f": "WeAPOWH()", +"d59e31ed": "totalETHSold()", +"d59e6461": "addRoot(bytes32)", +"d59f1844": "content_intro()", +"d59f1f3f": "proposalsByShareholder(address,uint256)", +"d59f2827": "isTokenOwner(uint256,address)", +"d59f37e0": "verifyCanRemoveOrderById(uint32)", +"d59f4e68": "setPaintingArtist(uint256,string)", +"d59f5c6e": "OmegaNode()", +"d59f9cc7": "getFullAddressList()", +"d59fde06": "CredoIco(address,uint256,uint256)", +"d5a056d8": "AddOrigin(address)", +"d5a18e4c": "setMany(address,uint256,uint256[],uint256[])", +"d5a2040e": "AKM()", +"d5a31956": "commissionArt(uint256,uint256)", +"d5a34dfb": "VPC0x()", +"d5a3b734": "dataSourceAddress()", +"d5a41695": "fetchVoteNumForCandidateBySnapshotBlock(address,uint256)", +"d5a4726b": "sumICO2()", +"d5a4a3c6": "findRecentBet(address)", +"d5a506d0": "regionExists(uint16)", +"d5a53dec": "ACTION_SELL_OFFER_ACCEPTED()", +"d5a5825d": "currentEtherBalance()", +"d5a632b5": "addPartnerSaleWallet(address)", +"d5a683c0": "addDividends(uint256)", +"d5a6c97a": "setWhitelistModerator(address,uint8)", +"d5a73fdd": "getVestedAmount(address)", +"d5a7b500": "softCapTriggered()", +"d5a81428": "sellPriceInWei()", +"d5a841f9": "setFaucetThresholdSecs(uint256)", +"d5a8487f": "getSquareWins(uint256,uint256)", +"d5a849e9": "getRewardBalance(address)", +"d5a8c0d9": "Ghcwchain(uint256,string,string)", +"d5a9f356": "testTemp3()", +"d5aa1a26": "getRouteSize()", +"d5aa1aca": "setmmVaultAddr(address)", +"d5aa7803": "isGuessesOpen()", +"d5aaadd1": "finishMintingRequestSetup()", +"d5ab20a7": "removeNFBTNY(address,uint256)", +"d5ab7f30": "crowdsaleSuccessful()", +"d5abaa27": "JoinTheFray(address)", +"d5abeb01": "maxSupply()", +"d5acdeb2": "allocateCorporateToken(address,uint256)", +"d5aceaac": "closeBattleboard(uint16)", +"d5ad2e00": "m_wcStored()", +"d5ad3ad0": "setServiceController(address)", +"d5ad3cda": "removeWalletsFromWhitelist(address[])", +"d5ae1085": "updateNextOrderPrice(address,address,uint256,uint256)", +"d5ae79ea": "processCollision()", +"d5af8f24": "createAndSellAllAmountBuyEth(address,address,address,uint256,address,uint256)", +"d5afd6bc": "startOperation()", +"d5b014f8": "MoonTrail()", +"d5b01c99": "existIdAtCurrentVersion(bytes32)", +"d5b0c0d5": "numberOf(bytes16)", +"d5b1402c": "ViralTokenSale()", +"d5b235d0": "test_claimShares_emptyRewardPool_isTranscoder()", +"d5b2a01a": "ownerFee()", +"d5b2c102": "sendCoin(bytes32,bytes32,uint256)", +"d5b36845": "stage3Bonus()", +"d5b36eeb": "TEHToken()", +"d5b3b317": "minutestotal()", +"d5b40406": "signUpForAirdrops()", +"d5b42496": "enableShowValue(bool)", +"d5b4ea20": "USDcRaised()", +"d5b5dc49": "companyReserve()", +"d5b61da0": "PRE_SALE_MIN_ETHER()", +"d5b74699": "library1function()", +"d5b85b2d": "setBAAU(bytes32,address,address,uint256)", +"d5b89bc8": "Issuance(address,uint256,uint256)", +"d5b8a884": "ASStokenICO(address)", +"d5b9df87": "LEADER_FEE()", +"d5ba4d21": "changeHold(address,uint256,uint8,uint256,bool)", +"d5ba5f82": "getBattleCard(address)", +"d5bab53d": "xtestTransferToken()", +"d5bb7f67": "updateFeatures(uint256)", +"d5bc0a07": "LYBTToken(uint256,string,uint8,string)", +"d5bcecab": "setLeagueRosterAndSaleAndTeamContractAddress(address,address,address)", +"d5bcf8ef": "setGameRunning(bool)", +"d5bd3443": "newOption(address,uint256,bool)", +"d5bd57a1": "getCardsDetails()", +"d5bde837": "registerPoA(string,bytes32,uint64[],uint64[],address,address,string,bytes2)", +"d5be4153": "buyAd(uint256)", +"d5bec84e": "weiPixelPrice()", +"d5bee9f5": "randomAddress()", +"d5bf158a": "affiliateName(address)", +"d5bf2dbe": "setFeeParameters(uint256,uint256,uint256,uint256)", +"d5bf4da1": "eTicket()", +"d5bf5fc3": "sendBountySupplyToken(address)", +"d5c06d30": "icoEnabled()", +"d5c0c185": "canChangeBeneficiaryParams()", +"d5c14391": "getAvailableAmount(uint256)", +"d5c166d5": "getExchgComisnMulByThousand()", +"d5c21c4f": "setMinAuditPrice(address,uint256)", +"d5c2d2b6": "TEAM_INCENTIVES_AMOUNT()", +"d5c2e3ca": "destroyContract(string)", +"d5c2ee21": "hasLanguage(address,uint256,uint256)", +"d5c34755": "LogAuthCreate(address,uint256)", +"d5c4098d": "enableRenounceOwnership()", +"d5c44898": "updateLastPrice(uint256)", +"d5c469f8": "isP2SH(bytes,uint256,uint256)", +"d5c53c44": "DETEX()", +"d5c5d8e1": "yetAnotherFunction()", +"d5c60c97": "ShowInfoBool(bool)", +"d5c61301": "say(string)", +"d5c61881": "enableWithdrawl()", +"d5c655c9": "lastTaskIndex()", +"d5c7aece": "CertAdminDeleted(address)", +"d5c7bcc8": "coinIssuedEtc()", +"d5c80423": "lockDeposit(bytes32,string)", +"d5c813dc": "sellerfee()", +"d5c96b36": "gettotalCardValue()", +"d5c9712f": "getBytesLE(bytes,uint256,uint256)", +"d5c98db1": "setPropertyOwner(uint16,address)", +"d5c999f8": "getBanque()", +"d5c9b239": "getAllShops()", +"d5c9c144": "SetGasFeeReimbursed(uint256)", +"d5ca35bc": "withdraw(address,uint256,uint256,address,uint8,bytes32,bytes32)", +"d5cb4a04": "getParticipantTransactions(address,address)", +"d5cc1d49": "upload(bytes32,bytes32,bytes32,bytes32)", +"d5cc8813": "startingPriceOf()", +"d5cce45a": "showbuyPrice()", +"d5cd3243": "addUser(bytes32,bytes32,uint256)", +"d5cdd2c7": "tokenToPoint(uint256,address,uint256)", +"d5ce3389": "from()", +"d5ce44c1": "totalEthReceivedinWei()", +"d5ce6719": "AC(uint256,string,string,address)", +"d5ce6a34": "LogAddressTokenCapCalculated(uint256,uint256,string)", +"d5ce91fd": "isRegistered(address,bool)", +"d5ceecea": "ERC777DemoToken(string,string,uint256,uint256)", +"d5cef133": "requestRefund()", +"d5cf5c72": "setSoftCap(uint256)", +"d5cfa94e": "claimAdmin(string)", +"d5cfad68": "getUserCertificationDetails(string)", +"d5cfc01b": "lockAddressByKYC(address,address)", +"d5cfee3e": "playerIsRegistered(address)", +"d5d067b0": "createRequestAsPayerAction(address[],int256[],address,uint256[],uint256[],string)", +"d5d09021": "isCrowdsaleFull()", +"d5d0da83": "KingsToken(uint256)", +"d5d1b95a": "convertRegularToRewardTokens(address,uint256)", +"d5d1e770": "confirmOwnership()", +"d5d21e18": "createTokenContract()", +"d5d2f528": "setTokenCounts(uint256,uint256)", +"d5d434c9": "SocialXBounty()", +"d5d4dfad": "balanceHistoryLength(address)", +"d5d55931": "ETXCrowdsale()", +"d5d55c8a": "PurchaseConfirmed()", +"d5d5913c": "getCCH_edit_2()", +"d5d5cefa": "cancelOptionOrder(address[3],uint256[3],uint256[2],bool)", +"d5d5f469": "getDocumentIdWithIPFSdirectoryHash(string)", +"d5d66031": "Wp()", +"d5d75cad": "_changeWallet(address)", +"d5d8a751": "Gallery_MuYi_No3()", +"d5da9e82": "teamLockTransferFrom(address,address,uint256)", +"d5db3fe2": "LogTrade(address,address,uint256,uint256,uint8,uint8,uint256,int256,uint256,int256)", +"d5db72eb": "isRegistrar(address)", +"d5db9366": "cancelCollateralTransfer(uint256)", +"d5db9410": "ChangeProtectionTime(uint256,uint128)", +"d5dbb1ad": "solveBet(address,uint8,bool,uint8,bytes32,bytes32)", +"d5dbe634": "incrementTotalSupply(uint256)", +"d5dc7139": "Scratch()", +"d5dcc638": "StrongHands()", +"d5dcf127": "setAge(uint256)", +"d5dd5127": "managerNotSetInApp()", +"d5de30e0": "evMgmtInvestProject(address,uint256,address,uint256,bool)", +"d5de78bc": "getGrantBalanceOf(address)", +"d5df7559": "removeDocument(uint256)", +"d5df7bcc": "newFootballMatch(uint256)", +"d5e03fc6": "payoutParty()", +"d5e05c89": "isSpaceshipUpgradeAllowed(bytes5,uint16,uint8)", +"d5e0b616": "getAnyElementByIndex(uint256)", +"d5e0d8fc": "setCompositionPrice(uint256,uint256)", +"d5e0e131": "totalAdvisorsSupply()", +"d5e16567": "getAccountValues()", +"d5e38f60": "lpFeeBp()", +"d5e3fbb2": "payfee()", +"d5e45a83": "positionFrom(address,address,uint256)", +"d5e4a36e": "isPreSaleRunning()", +"d5e4b342": "trexdevshopWaited1Years()", +"d5e5e6e6": "preciseUnit()", +"d5e83d9c": "RisikoCoin()", +"d5e99dac": "rateLoss()", +"d5e9abfd": "mustKyc(address)", +"d5e9eb9c": "IPM()", +"d5ea36f9": "offMaintenance()", +"d5eb0cbf": "isContractPermanent(string)", +"d5ec40af": "buyToken(uint32,uint32,address)", +"d5ec7e1d": "left22(uint256)", +"d5ec8d82": "_estIntegerSqrt(uint64,uint64,int256)", +"d5ecc1bd": "papu()", +"d5ecf7c5": "getNumExcessTokens(uint256)", +"d5ed289d": "getClaimRate(uint256)", +"d5ed9cba": "setLandRegistry(address)", +"d5edca54": "Games(uint256,uint256)", +"d5ee739d": "tokenRateWei()", +"d5f0400e": "validClaim(bytes32,string,string,address,bytes32,bytes32,uint8)", +"d5f07396": "checkIfReferee(address)", +"d5f12812": "setSpend(address,uint256)", +"d5f17df2": "selectFight2DeathContract()", +"d5f1e8d8": "hardCapEther()", +"d5f222ee": "tally(address)", +"d5f24708": "gotake()", +"d5f37f95": "sign(uint256,uint256,address)", +"d5f39488": "deployer()", +"d5f404c7": "update_power()", +"d5f47a51": "Ethraffle_v3b()", +"d5f48e76": "cancelSynthesizingAuction(uint256)", +"d5f4f0b3": "addTokens()", +"d5f52d51": "withDrawMyBalance()", +"d5f5b788": "maxCapUSD()", +"d5f5df2a": "checkFiscal(bytes32)", +"d5f6b538": "getClaimsCountForStory(bytes12)", +"d5f72b2e": "addMany(address,uint256,uint256[],uint256[])", +"d5f7b144": "_burnToken(address,uint256)", +"d5f827e2": "TBrate()", +"d5f868b7": "removeReverseRate(address)", +"d5f87242": "assertInvalidState()", +"d5f9ac43": "transferFromTangibleAssetfund(address,uint256)", +"d5f9bdf1": "TokenCreated(address,address)", +"d5f9e6c7": "ProjectName()", +"d5fa2b00": "setAddr(bytes32,address)", +"d5fa2da5": "newEscrow(uint256)", +"d5fb1a1c": "ByteLockerShares()", +"d5fbe080": "_getEnd(int256)", +"d5fcc7b6": "setPresale(address)", +"d5fd5351": "WithdrawAddressApproved(address,address,bool)", +"d5fdb334": "getOpenGameIds()", +"d5fdfdbc": "setResult(string,string,string)", +"d5fe6062": "claimTusdProxyOwnership()", +"d5fec406": "abdicate(uint64,address)", +"d5ff0e7b": "transferToContract(address,address,uint256,bytes)", +"d5ff38ae": "migrateBasicData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d5ff56f8": "allowChange()", +"d600630c": "registerInstitution(string,address,address)", +"d6006e88": "send(address[],uint256[],uint256)", +"d6006e8e": "preSaleSuccess(address,uint256,uint256,uint256)", +"d600c846": "JingzhiContract()", +"d60207c7": "getLowestUnitPriceIdxFromBuy()", +"d6026ac1": "getPRewardedSumByRound(uint256,address)", +"d6030d57": "BOUNTY_CAMPAIGN_SHARE()", +"d6039a41": "totalsigs()", +"d603f872": "buyPreICO()", +"d603fd28": "sendToAddressWithTime(address,uint256,uint256)", +"d6046836": "setAllowBuy(bool)", +"d604d6a8": "getSkillRating(address,uint256,uint256,uint256,uint256)", +"d604d8d1": "checkHash(bytes32)", +"d605787b": "rng()", +"d6063225": "Ktx(uint256,string,uint8,string)", +"d606f34b": "century(address)", +"d60743b1": "read_total_number_of_user_purchases(address)", +"d6077912": "RRRToken()", +"d608b3b2": "totalCharity()", +"d609ea93": "stakingEpochDuration()", +"d609fe59": "OEO(uint256,string,string)", +"d60bf518": "Test3(address)", +"d60d7044": "_char(bytes1)", +"d60dcb5d": "Switch()", +"d60df5be": "xmr()", +"d60e1447": "supplyBezNolei()", +"d60f0e5a": "BonusWhiteList(address,address,uint256,uint256)", +"d60f2eae": "buyPBTTAgainstEther()", +"d60f6cd9": "sendNumber(uint16,address,address)", +"d60fa784": "Voicecoin()", +"d60fd1be": "Hopecoin()", +"d6103b26": "_newPepe(uint256[2],uint64,uint64,uint64,address)", +"d6106696": "withdrawal_last_voter()", +"d6106b3e": "buys(uint256)", +"d611225b": "addContract(string)", +"d61191bd": "distributeValidityBond()", +"d612be77": "dpToken()", +"d612cff5": "permissionHash(address,address,bytes32)", +"d613ac91": "buybackTypeOne()", +"d613be0a": "forceChangeContractOwnership(address)", +"d6142c5b": "createProvider(bool,string,string,string,string,uint8,bool,address)", +"d615950d": "mintUpdateToken(uint256)", +"d61647f2": "developer_string_golos(string)", +"d616fe6e": "setTxAboveLimits(address,uint256,bytes32)", +"d617ad7d": "getPatentFee(address,uint16[5])", +"d618996b": "orderEnd()", +"d6192c6c": "hodlerStakes(address)", +"d619d216": "retrieveEth()", +"d619f6b3": "sendIndividualAmount(address[],uint256[])", +"d61a4524": "setdissolveaddress(address)", +"d61bd8fb": "getAvlShares(bool)", +"d61ca7eb": "RYH()", +"d61ccf84": "RABAToken()", +"d61e7201": "updateStatus(uint256)", +"d61e9274": "SetRate(uint32)", +"d61f92a3": "getJoinAddr(uint256)", +"d61fb0bf": "dateIT()", +"d620c7c8": "LogNewContractProposal(address,address,address,uint256)", +"d620caaa": "walletFromTeam()", +"d621a4f2": "setWithdrawBankFee(uint256)", +"d621b83f": "_createKydy(uint256,uint256,uint256,uint256,address)", +"d621c878": "improvementContract()", +"d621e813": "tradeEnabled()", +"d6223305": "ReleaseableToken(uint256,uint256,address)", +"d6224a6b": "getPixelText(uint256)", +"d6233491": "getPaid(string,address)", +"d6236ad0": "MetisCoin()", +"d62457f6": "callValue()", +"d624fdb6": "approveUser(address)", +"d625a7a6": "BetAdded(uint256,address,uint256,uint256,uint256)", +"d625c654": "migrateLosingTokenRepToWinningToken()", +"d6264b75": "transferBack(uint256,address)", +"d626db79": "setPublicWhitelistAbility(bool)", +"d6271727": "processUpgrade(address,uint256)", +"d628e0a6": "WatchBalance()", +"d628ecd7": "multiValueAirDrop(address[],uint256[])", +"d6291f6f": "VitalKey()", +"d629bc12": "iNf4mation()", +"d62a13ac": "ExhaustionCoin()", +"d62a7127": "getlastid()", +"d62ac58c": "AdvisorsPartners()", +"d62b255b": "setOwner(address,string)", +"d62b6f7e": "Main()", +"d62c6523": "cancelReservedTokens(address,uint256)", +"d62d3115": "testCreate()", +"d62f0f22": "getMyRice()", +"d62f146b": "updateSkill(uint256,uint256,uint16)", +"d6300201": "getPercent(address)", +"d630bd53": "pledgeApprove(uint256)", +"d630d100": "releaseAdmPercent()", +"d630efbc": "getAllTotalPrize()", +"d63124d7": "checkMidiNotesValue(uint8[])", +"d631eed7": "withdrawEthForUser(uint256)", +"d631f6d4": "DeleteProject(string)", +"d63241a6": "EtherCheque()", +"d63249ee": "_placeBet(uint256,address,bytes)", +"d632f639": "_privateSale()", +"d632fd1d": "PIP()", +"d6349dd6": "referralDividendsOf(address)", +"d634ba22": "baseNumber()", +"d6351433": "getRichToken(uint256)", +"d635357e": "TestContract(int256,string)", +"d63547e6": "GetFreeCnt()", +"d63581de": "setPricePoints(uint64[])", +"d63587a2": "randomNum(uint256)", +"d635b69f": "preValidatePurchase(uint256)", +"d635fc63": "getReveralSupply()", +"d6362e97": "getMin()", +"d6370149": "_errorAndRefund(string,uint256,uint8)", +"d6380f37": "complete(uint256,uint256)", +"d6387a3e": "getMinersAt(uint32,uint32)", +"d638d981": "SingularityTest24()", +"d63900d5": "getTileLocation(uint16,uint16,address,address)", +"d6391a01": "Total_TokenSupply()", +"d639bf80": "Bitstocksmarket()", +"d63a1389": "mintFeeFlat()", +"d63a6ccd": "usd()", +"d63a8e11": "allowed(address)", +"d63bed4c": "_setPermissionManager(address,address,bytes32)", +"d63d4af0": "getOwnerTokens(address)", +"d63e6ce7": "increasePeriod()", +"d63e7cc1": "priceICO()", +"d63ebe92": "StepVesting(address,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d63eea42": "MAX_NUMBER_BETTERS()", +"d63fe1c7": "TARGET_TOTAL_SUPPLY()", +"d64196f8": "minInvestedLimit()", +"d641f3e4": "playGame(uint256,uint256,uint256,bytes32)", +"d64232c0": "option10name()", +"d6424ea7": "calculateAmount(string,uint64)", +"d6427c24": "randomPlayer()", +"d6449e15": "cancelTXwithCode(bytes32)", +"d644af34": "withdrawAndSend()", +"d644c46f": "wuxiaMasterPrice()", +"d644e356": "index(uint256,address,uint256,uint256)", +"d645ddf6": "mint(string,string,string)", +"d64637c7": "distributeDivident(uint256)", +"d6464b7c": "getSellerOfToken(uint256)", +"d6475c3a": "returnTokensForDay(uint256,uint256)", +"d647bb22": "Customcoin()", +"d647e2da": "test_set_get_RiskParameters()", +"d6481502": "setFreezingPercentage(uint8)", +"d648a647": "fundingStartBlock()", +"d648d7fd": "post(address,uint256)", +"d6495676": "emitPaymentReleased(uint256)", +"d64b12cf": "MAX_UNICORNS_TO_GIFT()", +"d64bcc1a": "releaseIcoTokens()", +"d64c2018": "setNextImagePart(uint256,uint16,uint16,uint16,uint256[])", +"d64c34fc": "getLockAmount()", +"d64d136d": "wnFromGas(uint256)", +"d64d6968": "isReferrer(address)", +"d64dc79f": "bidDkl(uint256,uint256,uint256,bytes,uint256)", +"d64e4e1b": "PKTToken()", +"d64ee8d2": "unBlockContract()", +"d64f5135": "In(address)", +"d64f86c0": "nextTransferFeeProp(uint256)", +"d64fe5ea": "getLockedWalletReleased(address)", +"d650cb2e": "forgiveMe()", +"d652818d": "ZYMToken()", +"d6528231": "FACTOR_3()", +"d6545ede": "hbtoken()", +"d6555687": "migrateUserData()", +"d655c786": "cancelOrderInternal(uint80,bool,bool)", +"d656a794": "stopForce()", +"d657ae0c": "actualTotalSupply()", +"d6582d0d": "isWeekDay(uint256)", +"d658d2e9": "hashes(bytes32)", +"d658d3ed": "setLedgerValue(string,address,address,uint256)", +"d65995ed": "attemptBeginLoanAtIndex(uint256)", +"d659afb6": "_isCooldownReady(address)", +"d659d968": "is_open()", +"d65a16c0": "isOneToken()", +"d65a4184": "tokenSaleActive()", +"d65aabc1": "t_Slava2()", +"d65ab5f2": "startGame()", +"d65b476c": "Governable()", +"d65b48fd": "ReceivedTokens(address,uint256,address,bytes)", +"d65c0035": "removeAddressFromWhitelist(uint256,address)", +"d65c8c6c": "claimDiamond(uint64,uint64)", +"d65d8876": "SitOut(address,uint256,uint256,uint256,uint256)", +"d65f86f2": "setLeed(string)", +"d6604881": "whitelistBonusLockPeriod()", +"d660521c": "depositStake(uint256,bytes)", +"d660c897": "theRichest()", +"d660ea36": "lastBlock_v1()", +"d661952a": "removePrivilegeAddress(address)", +"d6619ffb": "funds_address()", +"d661d206": "INITIAL_FOUNDER_SUPPLY()", +"d661dd31": "MULTIPLIER_DIVISOR()", +"d661f244": "getRoomName()", +"d6636307": "stateSetOver()", +"d66495cd": "getSpaceshipProductTotalSoldByModel(uint16)", +"d6649861": "tokenTransfertoACC(address,uint256)", +"d664cd89": "askMembership()", +"d6661999": "securityTokenOffering(address,uint256,uint256)", +"d6664653": "landmarkToOwner(uint256)", +"d667dcd7": "houseEdge()", +"d6680a69": "getAllIntel()", +"d6682007": "getGameNumSides(uint256)", +"d66847df": "distributeARTToken()", +"d668a461": "escapeHatch(bool)", +"d668e654": "LogTokenReceiver(address,uint256)", +"d669133f": "PotSplit(uint256)", +"d669899c": "sendLudumToSingle(address[],uint256)", +"d6699f48": "addPolicy(uint8,uint256,uint8)", +"d669e1d4": "MAX_CAP()", +"d66b0b51": "komission()", +"d66b2207": "escrowTransferInfo(address,uint256)", +"d66bd524": "reserves(address)", +"d66c7faa": "ICO_PHASE3_LIMIT()", +"d66c9cc2": "transferSenderPaysFee(address,uint256)", +"d66cac2b": "invest(uint32,uint32,uint64,uint16)", +"d66cb9e1": "renewbeginnerprotection(uint256)", +"d66d9e19": "leave()", +"d66e5726": "getWriter()", +"d66f146d": "refundPoll()", +"d66f3afa": "addEmployee(address,string,uint256[3],uint256)", +"d66fd10d": "LogVote(address)", +"d6714924": "calculateBoardScore(uint256)", +"d6721000": "addCommissionToPendingWithdrawals(uint32)", +"d6728d51": "developer_EKN()", +"d673c93b": "split(address,uint256,uint256,uint256)", +"d6740de5": "mint_for_testing()", +"d674d6a1": "RimuoviNegoziante(address)", +"d6755434": "remainingCapInWei()", +"d6757f39": "_existPlatform(bytes32)", +"d675ecbd": "addPrivateInvestor(address,uint256)", +"d67601ac": "starsRemainingToAssign()", +"d67772d3": "PennyEther()", +"d6779b01": "winningsClaimable(address)", +"d6779d6f": "isWarrantyValid(string)", +"d678724f": "getGameNumberOfEntries(uint256)", +"d6787711": "betHash()", +"d678ba48": "depositLRC()", +"d679677a": "currentTier()", +"d6798645": "set_cooldown(uint256)", +"d679c4f2": "claimDividendPercentage()", +"d67a073f": "Drain()", +"d67a10e3": "etherDelta()", +"d67a1140": "getMultiBalances(address)", +"d67a12d4": "getStrategyHiddenState(bytes32)", +"d67a1694": "getBountyChance(uint256)", +"d67a7e5f": "updateSignedDealsCountInBulk(address[],uint256[])", +"d67ae54d": "EUR(uint256)", +"d67b534e": "socialIdentityToCardId(uint256,uint256)", +"d67b9a89": "ONLY600Coin()", +"d67bf1ad": "coinBurnMkt()", +"d67bf379": "getByUser(address)", +"d67c1a7a": "finishCrowdSale()", +"d67c4497": "_approveTransfer(uint256,address,address)", +"d67c7f35": "p_update_mResaleMultipler(uint256)", +"d67c9961": "pass(uint256)", +"d67cbec9": "release(uint32,uint32,uint32,bytes20)", +"d67d0bb9": "tokenCreationMaxCap()", +"d67d3af8": "cancelRequest(address,address)", +"d67d73e0": "removeAllowedContract(address,address)", +"d67d78cd": "addCard(uint32,uint32,uint32,uint32,uint32,uint256)", +"d67f4d1b": "TittyFarmer()", +"d67fd89e": "setout(bool)", +"d6805f49": "novaTransfer(address,uint256)", +"d680914d": "SLABToken()", +"d6816cc1": "fixSpecications(uint256,bool)", +"d68199dc": "gameStats()", +"d681ffa7": "getDefinition(uint256)", +"d6820709": "beginTimeTS()", +"d6823455": "minQuanValues()", +"d682b601": "auditContract(address,bytes32,bytes,bool)", +"d6830af3": "setSettingTAOId(address)", +"d68314ea": "setReserveWeight(uint32)", +"d68352d2": "BeatTokenIcoPhase1Started()", +"d683d1a2": "markRedemptionFulfilled(bytes32)", +"d6847cd8": "getWithdrawalCoolingPeriod()", +"d68526c8": "withdrawGemmyMusic(address,uint256)", +"d68561a3": "_isOwnerOf(address,address,uint256)", +"d6858850": "AlphabetConvert(address)", +"d6872352": "sendEtherManually(address,address,uint256,uint256)", +"d6875520": "reclaimUnwantedGift()", +"d687a9b3": "_deleteAddress(bytes32)", +"d687b57e": "interSend(address,uint256)", +"d689cfe1": "_setClientPaidUpTo(address,uint256)", +"d68a9fb8": "getFreeTokensAmountOfUser(address)", +"d68c967f": "addAddressToBackEnd(address)", +"d68d961a": "ROLE_MINT()", +"d68e0ff7": "DestroyCoin(address,uint256)", +"d68e462c": "withhold(address,uint256)", +"d68e9b1e": "createGen0Token(uint8)", +"d68f30a7": "recordMoment(address,uint256,uint256)", +"d68f65f8": "SHAToken(uint256,string,string)", +"d68f6aac": "salers(uint256)", +"d68f93df": "changeBonuses(uint256[],uint256[])", +"d68fac6d": "knuckReward()", +"d68fbe5c": "testCannotGetTokensInNotInitiatedSale()", +"d6906295": "withdrawCloneTokens(address)", +"d691092a": "predictExploreReward(uint256)", +"d6914217": "getServerUserIndex(address,uint256)", +"d6916c34": "airDrop(address,uint256[],address[])", +"d6938c18": "StagebleCrowdsale()", +"d693dca2": "setAllowCnsContract(address,bytes32,address,bytes32,bool)", +"d693e17f": "internalSend(uint8,address,uint256)", +"d6940c8c": "_RemovedFromGeneration(address,uint256)", +"d69450d5": "setUUID4Bytes(bytes)", +"d6948c47": "winningTeamId()", +"d69570e2": "durationOfState(uint256)", +"d6960697": "confirmPurchase()", +"d6965ff7": "shops()", +"d696888a": "EpietherCrowdsale()", +"d697a9f1": "CooCoinToken(uint256,string,string)", +"d69932a3": "getLpBidPrice()", +"d699c00e": "transferWeiToWallet(uint256)", +"d699fe3d": "setPhase(uint256,uint256,uint256,uint256)", +"d69a0d2f": "getMostExpensiveCryptoGamer()", +"d69a1a5f": "getNextPayoutEstimation()", +"d69b6cf4": "IdolToken()", +"d69c3d30": "nextNonce()", +"d69c9275": "extraDistributionPart()", +"d69d895e": "NUM_RESERVED_COIN()", +"d69dbf63": "getIssuanceBlockTimestamp(bytes32)", +"d69dc9a5": "balance_(address)", +"d69dd156": "setInt256(int256,int256)", +"d69e37da": "doCall(address)", +"d69f13bb": "reportBenign(address,uint256)", +"d6a02bc2": "getSignedSubscribers()", +"d6a039f0": "Qbase()", +"d6a0810f": "ContractPurchased()", +"d6a0dec5": "buyTicketByOther(uint256,bytes32,bytes32,bytes32,bytes32)", +"d6a15231": "getIcedInfos(address)", +"d6a1f6a7": "breakIdUniqueness(uint256,uint256,address)", +"d6a2a596": "CrowdSale(address,uint256,uint256)", +"d6a30fb4": "start_quiz_quest(string,string)", +"d6a39db0": "lockUp(bool)", +"d6a3b623": "HONORABLE_LOSS_BONUS()", +"d6a3bc16": "finalReserveWallet()", +"d6a3f374": "dividendRate()", +"d6a43a3e": "setPermissionById(uint8,bytes32,bool)", +"d6a45623": "setAuctionsEnabled(bool)", +"d6a527eb": "share1()", +"d6a55e10": "sub_arbits(address,address,uint256)", +"d6a595ac": "payto2()", +"d6a5e546": "emergencyRefundContract()", +"d6a619e3": "transferIfPuritanical(address)", +"d6a62445": "confirmReturnToken(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"d6a6a520": "undoUpgrade()", +"d6a6da3e": "angelInvestorsTokens()", +"d6a75d82": "winningsClaimable()", +"d6a78004": "burnRemaining()", +"d6a83613": "bytes20ToString(bytes20,bytes20)", +"d6a90bcf": "tokenMultisigWallet()", +"d6a9c807": "_createDog(uint256,uint256,uint256,uint256,address,uint8,uint256,bool)", +"d6a9de51": "getSeller(uint256)", +"d6a9e9d1": "teamPercentage()", +"d6aab015": "getBonusPool()", +"d6abe110": "tokenDetails()", +"d6ac2394": "payoutInvestor(uint256)", +"d6ad00a9": "DOJC()", +"d6ad5e5e": "MIN_ACCEPTED_VALUE()", +"d6ae5f29": "getUsedReserveSupply()", +"d6aefb61": "setBatchTransfer(address,address,bool)", +"d6af9411": "Rouleth()", +"d6afc9b1": "getProfile()", +"d6b0f363": "OpusToken(address)", +"d6b0f484": "disableWhitelist()", +"d6b1deac": "KTOCrowdsale()", +"d6b1e4a9": "buyMinersWithEther(uint64)", +"d6b224f2": "getNextActiveBuyDetails(bytes32,uint64)", +"d6b2b242": "Realize(uint256)", +"d6b2e2ba": "PARSEC_CREDITS_PER_ETHER()", +"d6b33f59": "getNextActiveSellDetails(bytes32,uint64)", +"d6b44859": "scheduleUndoIt(uint256)", +"d6b4ec12": "getDailyWithdrawalLimit()", +"d6b52d9a": "partnerETHRewardsPercent()", +"d6b53175": "UpdatePoolState(uint8)", +"d6b5983d": "checkAmount(address,uint256)", +"d6b5abc9": "weiToPonzi(uint256,uint256)", +"d6b645bc": "react(address)", +"d6b6f9f1": "secondXRChangeBlock()", +"d6b74865": "watcher()", +"d6b7c81d": "BountyIssued(address,uint256)", +"d6b867e6": "exchange(uint256,address,uint256)", +"d6b8746d": "getConversionManager()", +"d6b8ae26": "jexp(uint256,uint256,uint256)", +"d6b8ec66": "presaleEth()", +"d6b92187": "_syncLockedDepositsAmount(bytes32)", +"d6b93d43": "fillBuy(address[8],uint256[6],uint8,bytes32,bytes32)", +"d6b94aba": "TTT(string,string,uint8,uint256)", +"d6bacb0e": "getTxRoot(bytes32)", +"d6bafa0c": "ECommercePaymentSystem()", +"d6bb0ad5": "CrowdsaleGummy(address,address)", +"d6bb358e": "LuckyBaby()", +"d6bb9eff": "getMartialCardTypeIdList(uint256)", +"d6bc1b39": "setPrices(bool,uint256)", +"d6bc1e57": "fromWei(address,address,uint256)", +"d6bd603c": "getBalance(address,address,address)", +"d6bd64fc": "test_get_expired()", +"d6bd8727": "getUrl()", +"d6be178d": "rateStage2()", +"d6be6bd5": "birth(bytes32)", +"d6bea5fd": "rangeToProposalID(uint256)", +"d6bec803": "setExpiredAndWithdraw(address)", +"d6beebf7": "buyTokens_ETH(address,uint256,uint256,bytes8)", +"d6bf28e4": "_sendMonsterPrize(uint256,address)", +"d6bf7530": "getEthDepositAddress()", +"d6bfc2d4": "oykooshi()", +"d6c0ceab": "changeBountyDeadline(uint256,uint256)", +"d6c12f88": "pricingPlan()", +"d6c1869b": "s33(bytes1)", +"d6c19fe0": "build(bytes,uint256,uint256,address)", +"d6c1be92": "gameEarnings()", +"d6c242d6": "approveViewer(uint256,address)", +"d6c2479a": "donationsAddress()", +"d6c3453c": "addTrancheRateAndTokens(uint256,uint256,uint256)", +"d6c54bf7": "destroyTokens(address,address,uint256)", +"d6c5a41e": "tier3End()", +"d6c5d823": "getScientificData(uint256)", +"d6c6f48e": "mintAgents()", +"d6c75abf": "RiskPrices(address[],uint128[])", +"d6c7b4ad": "receiver1()", +"d6c7b65b": "addInfo(address,address,uint256,string)", +"d6c8976b": "changeTokenController(address)", +"d6c8f93c": "getCooldownIndex(uint256)", +"d6c9d27a": "addCountry(uint256,uint256)", +"d6ca8ccb": "disown(bytes20)", +"d6cb56e6": "FishCoin()", +"d6cb9ec2": "viewContractState()", +"d6ccb332": "FED(uint256,string,uint8,string)", +"d6ccf7a7": "addTokenTime(uint256,uint256)", +"d6cd4a02": "listAgents()", +"d6cd9473": "renounceWhitelisted()", +"d6cf18e7": "createPiranhaTokens()", +"d6cf5297": "oracleItSetNetwork()", +"d6cfece1": "preBonus()", +"d6d02c51": "whois(string)", +"d6d0be9f": "getProductData(uint256)", +"d6d13ac0": "Split(bytes32,uint8)", +"d6d14171": "initialTimestamp()", +"d6d1b8bb": "TCLRToken()", +"d6d1f369": "Test4(uint256)", +"d6d1fc2a": "SoSoCoin()", +"d6d21dfd": "who()", +"d6d22fa4": "MetaCoin()", +"d6d25008": "coldStoreLast()", +"d6d30a51": "increaseJackpot(uint256)", +"d6d3286c": "geProposalInfo(uint256)", +"d6d329b9": "ships(uint64)", +"d6d34c7c": "coOwner()", +"d6d3e19c": "DigitalKeyCoinKO()", +"d6d4136a": "checkPos()", +"d6d5c8d5": "DEFROST_MONTHS()", +"d6d65f3d": "getCurrentMilestoneIndex()", +"d6d6945e": "doPurchase(address,uint256,uint256)", +"d6d707a6": "BaseStoreToken()", +"d6d76ed5": "status(address,bytes32)", +"d6d76fb7": "ArtCertificate(address,bytes32,string,string,string,string,string,address)", +"d6d7d525": "get(bytes)", +"d6d80f0b": "withdrawal_party_a_gets()", +"d6d86646": "UpdatePolicyState(address,string,string,uint8)", +"d6d902c4": "claimThroneFor(bytes,address)", +"d6d9266a": "setNewUseIndex()", +"d6d98ffc": "CosmicExperiencePoints()", +"d6da0805": "registerName(bytes32)", +"d6dad4cb": "BCFLeague(address,uint256,uint256,uint256,uint256)", +"d6db71e9": "allowRefund(address)", +"d6db85af": "fracExp(uint256,uint256,uint256,uint256)", +"d6db8ab6": "dividendPayouts(uint256)", +"d6dbf1c2": "getPOOL_edit_9()", +"d6dd1f0f": "ConnectLeaf(uint256,uint256)", +"d6dda33d": "isPremine()", +"d6ddbd2d": "purchaseAdv(uint256,uint256,string,string)", +"d6ddd21b": "vestingStartTimestamp()", +"d6de8dc4": "getPlayBlockNumber()", +"d6dfb77a": "getIndexToken(uint256,uint256)", +"d6e0bf29": "OwnerDeposit()", +"d6e0d73c": "mintA()", +"d6e20a56": "confirmKYC(address)", +"d6e2bcb5": "SwordMaster()", +"d6e325ae": "joinClub()", +"d6e38114": "addBet(address)", +"d6e3bb94": "addAudit(address,address)", +"d6e3dd77": "balancesImporter3()", +"d6e4ddc5": "ownerOf(address[16],uint256)", +"d6e5fe98": "setStakeRequirements(uint128,uint128)", +"d6e67215": "newCajutel()", +"d6e78eb0": "setGasMin(uint256)", +"d6e871ff": "loser(address,uint256)", +"d6e898ad": "vest2team(address,address)", +"d6e89cf0": "setTransferStatus(uint256)", +"d6e8a0b0": "incrementBid(uint256)", +"d6e95f77": "isSellable()", +"d6e9b019": "getDisputeData()", +"d6ea53b1": "changePayer(address)", +"d6ea5a0e": "distributionEntryCount()", +"d6ea8c90": "decimalOddsForOutcome(uint8)", +"d6eab9f2": "setHostFee(uint256)", +"d6eac4cd": "initTokenGrants()", +"d6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", +"d6eb1bbf": "authorised(address)", +"d6eb748c": "setRelation(address,address)", +"d6ec0065": "CHN()", +"d6ecb38a": "firstAddressFromDeployer(address)", +"d6ecff50": "Identified()", +"d6ed8f52": "addAirdropList(address,uint256)", +"d6edb047": "addAllocationPartOne(uint256,uint256)", +"d6ef25d5": "addVersion(uint64[3],address,bytes)", +"d6ef3de2": "Stocks()", +"d6ef7af0": "withdrawRewards(address,uint256)", +"d6efb030": "sendEthToContract(address)", +"d6efc8eb": "marketBuyOrders(uint256,bytes[])", +"d6effa2b": "ICOwei()", +"d6f0b484": "serverEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,address,bytes)", +"d6f12a6a": "refundT4T()", +"d6f15469": "setBuyEnabled(bool)", +"d6f22e69": "getChecksumPairCount()", +"d6f327cc": "swapCardForReward(address,uint8)", +"d6f35eb4": "setMinAmountSale(uint256)", +"d6f3c45f": "tokenCrowdsaleCap()", +"d6f42038": "PhoneToAddress()", +"d6f4472d": "BTCS_PORTION_MAX()", +"d6f4c235": "setInstructor(string,uint256,string)", +"d6f4e56e": "allTokensSold()", +"d6f50ed6": "registrarApp(bytes32,address,bytes32[])", +"d6f5792d": "isCurrentAccountReader(address)", +"d6f5988e": "getInfoMarkTokens(address)", +"d6f5c939": "tie()", +"d6f6b6e7": "closeFailedVotingAndWithdraw()", +"d6f7ddf9": "topUp(address,uint256)", +"d6f8307f": "requesters(address)", +"d6f8560d": "withdraw_eth()", +"d6f8ecae": "time2()", +"d6fa3efa": "requiredTimeBetweenDraws()", +"d6fb1678": "mineableSupply()", +"d6fb69b9": "_sendWinnerJackpot(address)", +"d6fbf202": "startingPrice()", +"d6fc2e62": "rateProjectSecondParty(bytes32,uint8)", +"d6fd1fe9": "saleAction()", +"d6fd8822": "threeTimes(address,uint256)", +"d6fe3d6d": "afterForkRescueContractBalance()", +"d6fea306": "weiICOMaximum()", +"d6febde8": "buy(uint256,uint256)", +"d6feecde": "ret_len()", +"d700071a": "minorPartnerAddress()", +"d7003222": "unitCost()", +"d700ed39": "isStarterClaimed(address)", +"d70108a6": "getCmd_control()", +"d702087f": "setSecretSigner(address)", +"d7020b0c": "setarg_3(uint256)", +"d7020d2a": "approveEscrow(bytes16,address,address,uint256)", +"d702b63d": "for_longterm()", +"d702db81": "UserRetireHodl(uint256)", +"d702e364": "setPreICOSoldAmount(uint256,uint256)", +"d7052e17": "GotTokens(address,uint256,uint256)", +"d705763d": "Tset(uint256,string,uint8,string)", +"d705d6d7": "MainSale(address,uint256,uint256,uint256)", +"d70657ac": "getBalanceHolder()", +"d7067dc5": "crowdSalePaused()", +"d70695bb": "swarmRedistribution(address,uint256)", +"d706df8c": "BioStem()", +"d7074aaf": "GetCard(uint32)", +"d70754ec": "node()", +"d7079ee7": "startPublicsale(uint256,uint256)", +"d707d466": "allocToMember(address,uint256)", +"d7081e03": "transferAmount(address,uint256)", +"d7085e05": "SafeSend(address)", +"d70907b0": "freezeWithTimestamp(address,uint256)", +"d70925b4": "teamEthTransferComplete()", +"d70948b5": "_create_drug(bytes32,address,uint256,uint256)", +"d7098154": "claimPrize(uint256)", +"d70afa96": "FEE_ADMIN()", +"d70b6342": "minInvEth()", +"d70cf105": "moveBalance(address,address,uint256)", +"d70d2e26": "DetherTx()", +"d70d37e6": "OptedIn(address,address)", +"d70d532b": "provideAccess(address,uint8)", +"d70d9254": "isBetClosed()", +"d70d9604": "Sales()", +"d70dbf7d": "Aequitas()", +"d70e0f90": "disableAuto()", +"d70e62eb": "lowLimit()", +"d70ed38a": "withdraw(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"d70efa86": "_inRateFallEffectLimit(uint256,uint256)", +"d70fe207": "cancelOrdersOnOption(uint256,uint256)", +"d710999d": "SiliconValleyCoin()", +"d7109dda": "getCurrentSaleDay()", +"d710e2f0": "sendAllToOwner(address)", +"d710eaac": "NewWallet(address,address,address)", +"d71186b9": "Fund_Contract()", +"d7121f4b": "HolikopterToken()", +"d7123dff": "_createBuilding(uint256,uint256,uint256,uint256,uint256,uint256,address,bool)", +"d712800f": "setLockValue(address,uint256,string)", +"d712d06d": "tokenDestroyed(address,uint256,string)", +"d712eb4a": "voteWeight()", +"d7130651": "getCity(uint256)", +"d7131e5f": "createToken(uint256,address,string,string)", +"d71331c2": "getCountPlayerByTrackId(bytes32)", +"d715c8b2": "ownerHistoryCount(uint256)", +"d716222c": "is_owner(uint256,address)", +"d716e9ca": "getTotalInvoices()", +"d71710e0": "countAttributeTypes()", +"d717b05e": "exchangeLimit()", +"d71801d4": "gallerySix()", +"d7182850": "ownerTokensAllocated()", +"d7186f2b": "KNTTToken()", +"d718e763": "FinalizableCrowdsale(address,address)", +"d719213e": "preBuyPrice1()", +"d719843f": "getVendingStepPrice(uint256)", +"d71a0d7c": "HolahopxToken()", +"d71c14aa": "_isAOContentUsageType(bytes32)", +"d71c4028": "DRPCrowdsale(address,address,uint256)", +"d71cdd78": "BONUS_HI_QTY()", +"d71cf1e4": "getFee(uint256,address,address,address,address)", +"d71d3b3c": "CrowdSalePreICO()", +"d71d6cc5": "blendbacktest(uint32[],bytes32[],bytes32[],uint64[],bytes32)", +"d71d9e8a": "buyFlower(uint256)", +"d71db8aa": "getBonusPerShare(address)", +"d71df760": "oraclize_newRandomDSQuery(uint256,uint256,uint256)", +"d71e58f8": "admin_set_exchange_rate(uint256[])", +"d71e8296": "canIWithdraw()", +"d71e930c": "teamAddressTwo()", +"d71eb6ab": "recursive_store(uint32,uint256)", +"d71f1bd6": "LottesyAddress()", +"d71fcbe6": "BaseBountyContract(address)", +"d7203294": "ZeroXEth()", +"d7206124": "setInvestorLock(bool)", +"d721b0af": "batchExchange(address[],uint256[])", +"d721c760": "IssueAssigneeLoaded(bytes32,string)", +"d7228bb5": "doSucceedingTransferFrom()", +"d7237e45": "invitedByReferalBonus()", +"d723879c": "icoOver2()", +"d723b7c6": "rewardAtRound(uint256)", +"d723bb73": "fetchVoteInfoForVoterBySnapshotBlock(address,uint256)", +"d72473f3": "Added(uint256,string,address,uint256,bool)", +"d72503ba": "buyCat(uint256)", +"d725a9f0": "crowdSaleaddress()", +"d725f10d": "curse(address,address)", +"d7260cba": "refundGame(uint256)", +"d726755b": "moveFloor(uint256)", +"d726f7c7": "mainCoinSentToEther()", +"d7276479": "battlesOwner()", +"d727d64b": "disputeSettledTerminate(bytes32,address,uint8,address,uint8,bool,address)", +"d7289cb4": "FundsReturned(address,uint256)", +"d728b6db": "getCatOfferPrices()", +"d728cc72": "novaCoinAddress()", +"d7290181": "emptyWrongToken(address)", +"d7299009": "isCustomerHasACCfromWL(address)", +"d7299ef7": "pausePresale(bool)", +"d72ad259": "unlockFunds(address)", +"d72ad623": "getReferrerReward()", +"d72b11bd": "reserveWallet()", +"d72b6d3b": "CREATION_LIMIT()", +"d72bdc53": "initialize(address,string,string,uint8,uint256)", +"d72c83c0": "SmokeExchangeCoinCrowdsale(uint256,uint256,address,uint256,uint256,uint256,address)", +"d72c9391": "confirmTransactionSig()", +"d72d04db": "addGame(address)", +"d72d8dd6": "numRegistries()", +"d72dec33": "changeVaccinHistory(address)", +"d72e2b78": "soldTokensWithoutBonus()", +"d72e3de1": "createCustomReservation(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d72e4167": "getCompte_38()", +"d72eabb8": "minimalToken()", +"d72f7958": "fortune_break_current()", +"d73019e9": "icoStartDate()", +"d7303eaf": "nicole()", +"d7304b09": "cleanupOdd()", +"d730bfe2": "RabbitCoin()", +"d7311963": "m_controller()", +"d7315d60": "totaldeposited()", +"d731a779": "removeTRA(address)", +"d732a3fa": "newRound(uint256,bytes32)", +"d732d30e": "getGamblingPartyInfo(uint256)", +"d732d955": "decrease()", +"d73478f8": "userToNumTowns(bytes32)", +"d735140d": "fourthTokenExchangeRate()", +"d7353371": "PeerLicensing()", +"d7354b49": "getBirthDay()", +"d735875d": "Start_quiz_g(string,string)", +"d735dc92": "multiAirdrop(address[],uint256[])", +"d735fa25": "wholeSaleValueLeft()", +"d7365f9b": "_purchaseMake(uint256)", +"d737035d": "holdersBonus(uint8)", +"d73792a9": "FEE_DENOMINATOR()", +"d7379999": "permissionAt(uint8,int256)", +"d737c2b0": "setContractInfo(bytes32,address,bytes20)", +"d737d0c7": "msgSender()", +"d7385abd": "placeBet(int8,int8,uint32,uint256)", +"d7397a72": "setUrl(address,uint256,string)", +"d739aaf8": "getGameInfoById(uint256)", +"d73a24fc": "canBeWithdrawn()", +"d73a2901": "setManagedVote(uint256,uint152,bool)", +"d73b0cf2": "buyerFundRelease(uint256)", +"d73b1dc9": "decreaseAllowance(address,address,uint256)", +"d73b3a67": "withdrawal_Eth(uint256)", +"d73c277c": "storageName()", +"d73cbc6b": "testLen()", +"d73cbcba": "daCall()", +"d73cedd4": "SPECTRUMZ()", +"d73dd623": "increaseApproval(address,uint256)", +"d73e0c89": "getBookCount()", +"d73ec78d": "_checkCancelAvailability(uint256,uint256,uint256)", +"d73f0b25": "lookupCampaignPart1(uint256)", +"d73f3408": "SimpleMultiSig(uint256,address[])", +"d73fe0aa": "getShares()", +"d73ff0db": "preSaleBfPlatform()", +"d740547e": "mintBonusTokensForGames(uint256)", +"d740766e": "testNoTokenTransferIfNotApproved()", +"d741e2f9": "pip()", +"d743015a": "createAssetPack(bytes32,uint256[],bytes32[],uint256,string)", +"d743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", +"d7441753": "getTypicalItemById(string,uint256)", +"d7447c8c": "addCandidate(address,address,bytes32)", +"d744aec8": "getTokenBalanceInContract(address)", +"d744f2a3": "wantMyToken(uint256)", +"d744f330": "IdClaveChain(address)", +"d744f47c": "validateMessage(string,bytes32,uint8,bytes32,bytes32)", +"d744fcb8": "ClaimFeesFromSharesBought(uint256)", +"d74543f0": "communityusersCap()", +"d7463573": "getOpeningTime()", +"d746a38b": "getMicroModuleByIdPart1(uint256)", +"d7471ad2": "nemocoin()", +"d7480aa4": "AuctusEtherVesting(address,uint256,uint256,uint256)", +"d748d1f6": "revokeEditorRights(address)", +"d749eaab": "newPrimera(address,address)", +"d74a960e": "BGFTToken(uint256,string,string)", +"d74a99d4": "create(uint256,string,uint8,string)", +"d74ae98e": "redeemShip(uint256)", +"d74afaa1": "newowner()", +"d74b2722": "setRefunder(address)", +"d74be848": "maskSender(address)", +"d74c894e": "setSecurityWallet(address)", +"d74d763e": "setUCCoinPerEther(uint256)", +"d74d7e79": "calculateRewardAt(uint256)", +"d74e0d9e": "SetBanker(uint8,address)", +"d74ea11e": "addMockPendingWinner(address,uint256)", +"d74f8e9a": "getLastPayments(uint256)", +"d74f8edd": "MAX_OWNER_COUNT()", +"d7504385": "validateToAddress(address)", +"d7508a55": "prepareAuctionForNonOGChain()", +"d7517caa": "getPresaleStatus()", +"d751b8de": "Request(uint16[],string,address,uint32[],uint256)", +"d7520298": "SetfirstTTaxAmount(uint256)", +"d7522582": "isCurrentTierCapReached()", +"d752dd8e": "AFSBToken()", +"d75318f8": "SecretCoin()", +"d75320b1": "_subtractFromMintPool(uint256)", +"d7533595": "keccak_f(uint256[25])", +"d7533751": "UnvestedSkyeCrypto(uint256,string,string)", +"d75352e1": "marginCall()", +"d75446fe": "etherGet()", +"d7546da7": "Commitment(address,address,address)", +"d754a6bc": "adminResetEmail(address,address,string)", +"d754f0ac": "LOCKOUT_PERIOD()", +"d754f3d5": "currentEraIndex()", +"d75528a5": "addSpecial(uint256,uint256,uint256)", +"d7554a68": "addUser(address,string,string)", +"d7557f18": "closeCampaign()", +"d755cc4a": "buyGOP(address,string,uint256,uint256,uint256)", +"d755e021": "getPlayerShipBattleById(uint64)", +"d7560f2b": "numRewardsUsed(address)", +"d7575592": "addr_teamPartToken()", +"d757579e": "XxxTokenSale()", +"d7578295": "Cashpayz()", +"d75b2b18": "takeCollateral(address)", +"d75b363f": "userRewardCount(address,address)", +"d75b5d9d": "RAFEND()", +"d75b80cc": "a_incognita(uint256)", +"d75d93f6": "registerMeOnToken(address,uint256,string)", +"d75de4ab": "isAddressInWhitelist(address,address)", +"d75e30cf": "drawFee()", +"d75e662f": "OverpayRefund(address,uint256)", +"d75e7afd": "calDivs(address,uint256)", +"d75e87ef": "PersonalInfoAdded(address,string,string,string,string,string,string,string)", +"d75ebde2": "joinGameFromBalance(uint256)", +"d75f0dd6": "SixtusToken()", +"d75fabb0": "RewardOffer(address,address,bytes32,uint256,uint256,uint128,uint256)", +"d7604a78": "modifyWhitelist(address,uint256,uint256,uint256,bool)", +"d7625c88": "hasMigrated(address)", +"d762755d": "minimumContributionWeiByOneInvestor()", +"d7638b73": "phase2Cap()", +"d763f92d": "FintechChain()", +"d7642ae2": "COIN_COST_ICO_TIER_3()", +"d7643e18": "protoCount()", +"d7651471": "Notes()", +"d7655b98": "OmixToken(uint256)", +"d7669119": "NewPrice(uint256,string)", +"d767aee0": "bbb()", +"d767e0d6": "SoldToCustomer(string,string)", +"d767ee4d": "updateLogic(uint256)", +"d7682701": "_cancelPermissions(address,address[])", +"d768729d": "getRecentDiary()", +"d7688d31": "destEthFoundationDev()", +"d7689460": "CryptoRex()", +"d768d95b": "finaliseContract()", +"d768d95e": "fetchVoteMainInfoForVoterBySnapshotBlock(address,uint256)", +"d768dd4b": "Stage3Allocation()", +"d769ae1b": "SLCAdvancedToken(uint256,string,string)", +"d769f32a": "mulXY(uint256,uint256,uint256)", +"d76a0cb8": "HybridBlock()", +"d76a130a": "TokenCDCQ(uint256,string,string)", +"d76a69e2": "Fund(address,address,address,address,address,address,address,address,address[])", +"d76b6095": "phase1Rate()", +"d76bce7c": "dropEth(address[],uint256[])", +"d76d6ee0": "query(bytes32,bytes2,int256)", +"d76dc2eb": "LOCKAMOUNT1()", +"d76dc656": "GDCAcc02()", +"d76dddd3": "unfreezeTime()", +"d76e5765": "getUserIpfsFromId(uint256)", +"d76f288f": "metaBurnHash(address,uint256,uint256,uint256)", +"d76f94aa": "toAlphabet(uint8[])", +"d7717750": "tokenLogic()", +"d7723231": "getIcoPurchase(address)", +"d772ddc0": "setProcessorAddress(address)", +"d7730236": "maxEthRaised()", +"d7734855": "getDiff(uint256,uint256)", +"d77371e0": "GoodDayToken()", +"d7744b9f": "getReferee(uint256)", +"d774c038": "multisend(address[],address)", +"d775db2a": "testThrowsSaleWalletIncorrectMultisig()", +"d7760500": "partnersRelease()", +"d7768c47": "prepare(bytes)", +"d77727de": "seeOwner(uint256)", +"d7777c29": "startPreICOStage1()", +"d77844f6": "isLimitationPeriodActive()", +"d77849c7": "tokenTakeback(address,uint256)", +"d778610e": "updateStateWithPrivateSale(uint256,uint256,uint256)", +"d7787f33": "setUpgradeContract(address,address)", +"d7789a9f": "unsetEndorsement(address,uint256)", +"d778c911": "price3()", +"d7790c11": "waipaytoken()", +"d7796915": "checkWithdrawValueFX(uint256)", +"d779ca24": "payoutBonusesToHolders()", +"d77a39c9": "addPresaleTokens(address[],uint256[],uint256)", +"d77a80a8": "lastFunder()", +"d77a86a0": "sendTo(address,uint64)", +"d77ac32d": "discountSum(uint256)", +"d77b0ff7": "keyAtIndexHasNext(uint256)", +"d77bd1ae": "ProposalAdded(uint256,address,string)", +"d77bf0cf": "CONFIG_PRICE()", +"d77c96f8": "mainICOThirdWeekEndTime()", +"d77d0012": "getBankPercent()", +"d77d3f79": "KoaStandardToken(uint256,string,uint8,string)", +"d77da4f4": "withdrawToTeam(uint256)", +"d77e2f55": "pendingEtherForCroupier()", +"d77e8986": "isExistsEscrow(bytes16,address,address,uint256)", +"d77ec4a4": "executeWithdrawTransaction(uint256)", +"d77fc50f": "checkZeroValue(uint256)", +"d77ff9ea": "eventCardRangeMin()", +"d7800fa2": "PurchaseRegistered(bytes32,address,uint256)", +"d7815ba4": "shareholdersHolding1y()", +"d7816f45": "transferlocked()", +"d781be46": "endDatetime()", +"d781d0f4": "YaoToken(uint256,string,string)", +"d781f3f4": "FootScoutCrowdsale()", +"d781fbf9": "removeERC223(uint256,address,uint256)", +"d78235cf": "setconfigurationEtherPrice(uint256)", +"d78276c6": "withdrawERC20(uint256)", +"d782cc54": "setNewBonusLevel(uint256,uint256)", +"d782d647": "createdTokens(uint256)", +"d7837ec9": "withdrawNonTop(uint256)", +"d783aacf": "ItalyToken()", +"d783b53b": "addSupporter(address)", +"d784601a": "myEthBalanceOfNoFee()", +"d784d426": "setImplementation(address)", +"d78506ce": "RoyaltysOwing(address)", +"d785c19c": "worldCupResultPart1()", +"d785e5c9": "m_isCirculating()", +"d78724d6": "getUserContractCount(address)", +"d7872745": "GumToken()", +"d788a945": "_isLongitude(int256)", +"d7892b6a": "changePeaceRelayAddr(address)", +"d789479d": "celtic_cross()", +"d78996d8": "getUtilizationAndAnnualBorrowRate(uint256,uint256)", +"d789b4c1": "uintMax(uint256)", +"d78b16a1": "emitTokens(uint256)", +"d78c15d9": "isPromoted()", +"d78c20ff": "voteApprove(uint256)", +"d78cb1b2": "buyXgoldTokens(address)", +"d78d610b": "getRecipients()", +"d78db648": "multStore(int256)", +"d78e1bb1": "teamPot_()", +"d78ed508": "getShipProductStartPriceByModel(uint16)", +"d78efa67": "addrecruit(uint256,uint256)", +"d7901260": "closePreICOPrivate()", +"d7901645": "GetDappinfo(string)", +"d790dce7": "endOfSaleFullWithdrawal()", +"d79185d7": "StartGuess_wis(string,string)", +"d791de63": "unlock(address[])", +"d791ed7a": "BaoBaoToken(uint256,string,string)", +"d792b356": "teamTokenAllocation(uint256)", +"d793f7a9": "preICOamountBonusMultipierInPercent(uint256)", +"d7942050": "Setuppresale(uint256,uint256)", +"d79521e8": "getPokemonDetails(uint256)", +"d7955eaf": "Santal()", +"d7959cf9": "ipfs()", +"d7963f94": "changeOwners(address)", +"d7982a6c": "unlockEscrow()", +"d7984cff": "CappedAndBurnableToken(uint256)", +"d79875eb": "sell(uint256,uint256)", +"d7988c98": "makeGrant(address,uint256,uint256,uint256,uint8)", +"d7989a93": "advancedTokensPerEth()", +"d79941d8": "getQueryRandomCallbackGas()", +"d79964c3": "addDeprecation(uint256,address,address,address,uint256,address)", +"d79b5bc6": "DonationSentButNotMatched(address,uint256)", +"d79bd499": "retrieveBalance()", +"d79c1f7f": "batchReclaimExpiredSwaps(bytes32,bytes32[])", +"d79cb6fd": "buyScams()", +"d79d5c7a": "COMPANY_TOKENS_PERCENT()", +"d79d63be": "getCardPrice()", +"d79d8e6c": "set(bytes32,address,bytes32)", +"d79e1e7d": "sumElements(uint64[])", +"d79e3755": "totalPromo()", +"d79e5de8": "HeliumToken()", +"d79e7894": "isAfterICO()", +"d79f5678": "DazzioCoin()", +"d7a084e0": "isWhiteListGame(address)", +"d7a08641": "checkCanRelease(bool,uint256,uint256)", +"d7a10acb": "balances2(uint256)", +"d7a1192d": "STAGE3_TIME_END()", +"d7a14a05": "totalAmountOfEarlyPurchases()", +"d7a15951": "winnerReward(address,uint256)", +"d7a17187": "ico2Raise()", +"d7a1cfe1": "addFriend(address)", +"d7a23fd4": "getActivityCount(uint256)", +"d7a42b54": "isEntity(uint256)", +"d7a4a09d": "detectJanuary(uint8)", +"d7a58658": "changeHouseedge(uint8)", +"d7a5afcf": "holderPartnershipsTokens()", +"d7a5f278": "slashInvalidUsername(bytes,uint256)", +"d7a5fdee": "DGPTokenOldContract()", +"d7a66ebe": "readContent()", +"d7a71868": "setManualPrice(uint256)", +"d7a78db8": "freeze(uint256)", +"d7a8560f": "invoicesStackCount()", +"d7aa6d74": "ShitCloneFarmer()", +"d7aa8273": "getTransactionInfo(uint256)", +"d7aa89b8": "storageOracle()", +"d7aae0e6": "executeProposal(uint256,address)", +"d7ab2770": "fetchGiven(address,bytes32)", +"d7ac79ba": "deleteHeir(address)", +"d7ad28ec": "GSMulti(uint256,uint256)", +"d7ad4931": "buyNow(bytes32)", +"d7ae339b": "ForecastChainToken()", +"d7ae76b6": "DING()", +"d7af26f8": "getPlayersBalances()", +"d7b03000": "resetCards()", +"d7b0a358": "shiggidyToken()", +"d7b0ca65": "last50plusblokhack()", +"d7b0e692": "set_new_admin(address)", +"d7b11125": "pwr(uint64,uint64)", +"d7b12454": "checkContract(address)", +"d7b12f38": "PRICE_STAGE_TWO_BONUS()", +"d7b15a88": "getLockedFundsLastSpending()", +"d7b1b9c4": "foundationTokensAllocated()", +"d7b1bb22": "cadastrar(bytes32,uint8,bytes32,bytes32,int256)", +"d7b2aae6": "setContactInfo(string)", +"d7b2f360": "getEncounterDetails()", +"d7b32f5f": "GetPrivateSale()", +"d7b33f66": "updatePercentToTakeAsSeed(uint256)", +"d7b33f94": "PRE_ICO_AMOUNT()", +"d7b40107": "auctionByAssetId(uint256)", +"d7b4750c": "getFunder(uint256)", +"d7b4a7f6": "MinerOneCrowdsale(address)", +"d7b4c9b1": "lookupKittyDetails1(uint256)", +"d7b53081": "closeSaleAnyway()", +"d7b5507d": "blockchaincertified()", +"d7b701b6": "SarahCoin()", +"d7b7024d": "approvedWithdrawAddresses(bytes32)", +"d7b7913b": "f3(uint256)", +"d7b7961c": "getPairHash(address,address)", +"d7b84f68": "moveDataContractBalanceToWorld()", +"d7b8cdf4": "MinimumContributionChanged(uint256)", +"d7b8de00": "setMaxCollectable(uint256)", +"d7b91bcc": "buyTokensICO()", +"d7b96d4e": "locker()", +"d7b97db1": "setDistributionTime(uint256)", +"d7b9cc24": "setCasino(address)", +"d7ba30b2": "rateAirDrop()", +"d7ba42fc": "addActionAccount(address)", +"d7ba95ca": "share2()", +"d7baa041": "PublicLayer()", +"d7bb913f": "accountTokensPurchased(address)", +"d7bb99ba": "contribute()", +"d7bbce2a": "setOrCacheDesignatedReportStake(uint256)", +"d7bc23af": "newParameters(int256,uint256,uint256,uint256)", +"d7bd6d0d": "addExchangeAccounts(address,address)", +"d7bd8987": "testTransfering()", +"d7bdaaa6": "WLMWallet()", +"d7bdc3fa": "addVolumeDiscount(uint256,uint8)", +"d7be503f": "_tokePerEth()", +"d7be708c": "BoulePreSale(address,uint256,uint256,uint256,address)", +"d7be8ceb": "performFetch()", +"d7bea56a": "totalExcessEth()", +"d7bfc8c5": "BabyDragon()", +"d7c01c3e": "SetTakePot(uint256)", +"d7c0302e": "numOfCitizensWhoReceivedDrops()", +"d7c06439": "AriumToken()", +"d7c06919": "getAuctions()", +"d7c0d42d": "ControlledToken(uint256,string,uint8,string)", +"d7c0f72b": "getTitulaire_Compte_5()", +"d7c23572": "historyTimesPlayed(address)", +"d7c23578": "addSig(bytes32,bytes32,bytes32,uint8)", +"d7c26adb": "oraclize_setProof(bytes1)", +"d7c2a887": "MANAGEMENT_FEE_RATE()", +"d7c35657": "EthsqrGate()", +"d7c39cc6": "totalSellingItem()", +"d7c482ef": "Defroze(address,bool)", +"d7c48e2b": "preseller()", +"d7c4e7ac": "HarlleriumCoin()", +"d7c4f9d3": "SignatureAdded(string,string,uint256)", +"d7c5b986": "LogContribution(uint8,address,uint256)", +"d7c61e7b": "CreateSaleAvgPrice(uint256,uint256,uint256,uint256,uint64,address)", +"d7c7159c": "buyWithKYCData(bytes,uint8,bytes32,bytes32)", +"d7c74279": "deployChildren(address)", +"d7c8112d": "WithdrawAllFunds(uint256)", +"d7c81b55": "gameId()", +"d7c81fdc": "MSCCStandardToken(uint256,string,uint8,string)", +"d7c8843b": "getEggsSinceLastHatch(address)", +"d7c8e90c": "voteAmendment(uint256)", +"d7c8f959": "CreateEmployee(address,uint32,uint32,uint16)", +"d7c94efd": "teamFee()", +"d7c97fb4": "erc721Contract()", +"d7c9a0e3": "getMyMoney()", +"d7ca01b5": "confirm(address,uint256)", +"d7ca20e6": "HashStore(uint256)", +"d7ca3a90": "CelebrityMarket(address)", +"d7ca7cc5": "changeLockingPeriod(uint256)", +"d7ca9949": "totalSoldTokens()", +"d7cb55a2": "AToken()", +"d7cbac05": "BONUS_ICO_STAGE1_PRE_SALE1()", +"d7cbbb73": "getAllCardsAddress()", +"d7cc43bf": "aSetStart(uint256)", +"d7cc8362": "isLatestMajorTree(bytes32,bytes32)", +"d7ccc2c3": "getLastPayment()", +"d7cd6c13": "burnFundAccount(address,uint256)", +"d7cd7209": "newGroup(address,bytes32,address[])", +"d7ce330b": "Deco()", +"d7cea877": "monthStr(uint256)", +"d7cee31e": "houseAddress()", +"d7cf1d20": "HDT_Token()", +"d7cf61d7": "assertSignedByBoth(uint256,bytes32,uint8,bytes32,bytes32)", +"d7cf7bcb": "purchaseSafe(uint256,uint256)", +"d7cff986": "submitAnswerCommitment(bytes32,bytes32,uint256,address)", +"d7d0afa4": "_fetchCreatedOrdersForMerchant(address)", +"d7d12297": "taskTotalBalance()", +"d7d15059": "functionName()", +"d7d1b48c": "_setWingsValue12(uint256)", +"d7d1bdbd": "getUnsoldOwner()", +"d7d23155": "owner_linkage()", +"d7d29315": "drawReuslt(uint256,address[],address[],uint256,uint256,uint256)", +"d7d319e4": "CWCreturnQuery()", +"d7d3c4d5": "pvpContenderRemoved(uint256)", +"d7d40523": "HardwareWallet()", +"d7d43b41": "MoedaToken()", +"d7d49532": "lastBlock_a9()", +"d7d5878d": "revokeSchedule(address,address)", +"d7d7442f": "updateThreshold(uint256)", +"d7d7be34": "oraclize_query(string,bytes[1])", +"d7d88043": "endSaleDate()", +"d7d8cdd5": "addTRA(address)", +"d7d90fb1": "ClearCLevelSignature()", +"d7d96a12": "StarToken()", +"d7d9fef0": "scheduleTimelock(address,uint256,uint256)", +"d7dae83c": "active_withdraw(address)", +"d7dbb88b": "getn2Exception(bytes32)", +"d7dbdbe3": "setVicepresidenteDeMesa(bytes32,uint256,bytes32)", +"d7dc6203": "calculateInterest(address,uint256)", +"d7dcaa19": "BuToken()", +"d7dccb1e": "EthSplit(address[],address)", +"d7dd2ae3": "ValidateCitySnapshotInternal(address,uint256)", +"d7dd8652": "refundCrowdsale()", +"d7dde189": "StartupToken()", +"d7de57c6": "challengeWithFutureCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"d7de9c6e": "setOracleQueryString(string)", +"d7df7ef9": "_createWonder(address)", +"d7dfa0dd": "logic()", +"d7e07d5f": "destTokensReserve()", +"d7e0b6e3": "registerUser(address,bytes32)", +"d7e0d83d": "setPrvd(address)", +"d7e0e776": "getBalanceOfInstance()", +"d7e11e9d": "AddTicket(bytes)", +"d7e25c36": "isCapReached()", +"d7e2f000": "preallocationsWhitelist()", +"d7e30832": "TankTransfer(address)", +"d7e31d67": "setRewardChance(uint256)", +"d7e3aab2": "VestedMultisigWallet(address[],uint256,uint256)", +"d7e44b89": "splitPay(address[],uint256,address)", +"d7e4e1f7": "setSail(uint16,uint16,bool)", +"d7e5c07d": "allocateTokens(uint256,uint256,address)", +"d7e64c00": "investorCount()", +"d7e7088a": "setUpgradeAgent(address)", +"d7e751ff": "tokenWithdraw(uint256)", +"d7e8015a": "FuckToken(uint256,string,uint8,string)", +"d7e84fbf": "builder()", +"d7e8553a": "_deleteValidator(address)", +"d7e9ec6e": "RemovedBlackList(address)", +"d7ea39c6": "referralDone()", +"d7ea977b": "V1ChainToken()", +"d7ea97e2": "setBTHFoundationWallet(address)", +"d7ead1de": "right74(uint256)", +"d7eae6db": "setUnPauseEmergence()", +"d7eaef90": "LGTToken()", +"d7ebf53d": "countActiveCastle()", +"d7ec1fac": "CrowdSaleTokenSoldout()", +"d7ecb5e3": "MINI_GAME_BETWEEN_TIME()", +"d7ecba0c": "numBarriersPerBoard()", +"d7ecc129": "supplyTo(address,uint256)", +"d7ed3fb1": "get_participant_topl_address(address)", +"d7ed7453": "redeemWinnings(uint256)", +"d7edddb2": "withdrawAdministratorMoney(uint256)", +"d7edf88c": "replenishEth()", +"d7ef1356": "best_adjustment(bool)", +"d7ef4a04": "CreateCredoIco(address,uint256)", +"d7efbf34": "transition()", +"d7f08eed": "unlistSubName(bytes32)", +"d7f0d86b": "attackUnit(uint256,uint256)", +"d7f0df73": "Betcash(uint256,string,uint8,string)", +"d7f0f01b": "fund(uint8,uint8,uint8)", +"d7f31eb9": "forward(address,uint256,bytes)", +"d7f3c770": "Mesut()", +"d7f42ee2": "getBBLibVersion()", +"d7f56ef7": "partnershipsTokenAddress()", +"d7f59fd0": "tgeSettingsBlocksPerStage()", +"d7f5b43e": "setCapacityByIndex(uint256,uint256)", +"d7f6f81c": "getProviderBadge(address)", +"d7f746ce": "tickingBomb()", +"d7f7582c": "totalCapitalization()", +"d7f7f3aa": "markTransferTokens(address,uint256)", +"d7f8a053": "TokenRate(uint256)", +"d7f9d655": "Divies()", +"d7fa1007": "setHash(bytes32,bytes32)", +"d7fa445e": "claimBidReward(uint256)", +"d7fb4f1d": "endTime_()", +"d7fb5ef5": "angelSupply()", +"d7fb7427": "transferNewCoin(address,uint256)", +"d7fb8dc0": "messageForReason(uint8)", +"d7fc1b9b": "register(string,string,bool)", +"d7fc23a2": "createNewAsset(string,string,uint256)", +"d7fc98c3": "subscribeIndividual(bool)", +"d7fd00b0": "TEAMS_PER_ENTRY()", +"d7fd0e77": "requestTime()", +"d7fe270e": "multipleTokensSend(address[],uint256[])", +"d7febcb9": "TestUserBitFlag(address,uint256)", +"d7ff4d7a": "WODECESHIBI(uint256,string,uint8,string)", +"d7ffbbaa": "setInformation(string)", +"d8013c4e": "addNote(bytes32,bytes20,string,string)", +"d80162fc": "setRecommendStatus(bool)", +"d8018c42": "getReleaseTimes(address)", +"d801aa84": "isWalletFromUser(string)", +"d8020a18": "marketingPercent()", +"d80326a9": "VentanaToken()", +"d80364ba": "LogRegister(address,string)", +"d8047a07": "RobotChain()", +"d80528ae": "stats()", +"d8055812": "votesDecline()", +"d8058712": "UnicornAccessControl(address)", +"d8063ea6": "addDelegate(address,address,string,address,uint256)", +"d8070c40": "IcoPrice()", +"d807a688": "wper(uint256,uint256)", +"d8085306": "mintTokensForSecondStage()", +"d8085f78": "ownerCanClaimCard(address,address,address[3],uint256)", +"d8085fee": "multiMerge(address[])", +"d80866da": "isValidZ(uint16)", +"d8090cbf": "resetReclaim()", +"d809d248": "startNextGame()", +"d80a5c3b": "MyContribution()", +"d80ad1ed": "getSponsorshipProportionalAmount(address,uint256,uint256)", +"d80aea31": "_setCreatedBlockOnRevealsPhase(uint256,address,bool)", +"d80b1a68": "createAndEndowC1(uint256,uint256)", +"d80b2056": "emptyWrongEther()", +"d80cc340": "retainBalance()", +"d80d3025": "changeBonusSystem(uint256[],uint256[])", +"d80d9c55": "changeSecondsInBlock(uint256)", +"d80e821c": "reevaluateICO(uint256)", +"d80e8700": "CurrentTime()", +"d80ffb20": "drawNumber()", +"d8104e19": "GetMyEarning()", +"d810f298": "computeSettlementAmount()", +"d81111ab": "BuyTokens()", +"d8112523": "sendIncentive()", +"d811b100": "getHouseAddressOne()", +"d811b7ca": "transferToOtherBucketContract(address)", +"d811f09e": "ownershipTransferAllowed()", +"d811fcf0": "farmer()", +"d81230c8": "shareactive()", +"d812d961": "getSanName(uint256)", +"d812f2b0": "setDelegadoDeEscuela(bytes32,uint256,uint256)", +"d8132807": "_getMinAuctionStartPrice()", +"d8134a23": "removeAcceptedToken(address)", +"d813b4b9": "setArtIdt(string,string)", +"d8145062": "squirrelmasterReq()", +"d8148166": "DistributionMint(address,uint256)", +"d81494ba": "blacklist_addys(address[])", +"d8149fe7": "dive1(address)", +"d814ebed": "TruUpgradeableToken(address)", +"d8152cbc": "createBalanceSnapshot()", +"d815fa30": "ERC20Token(uint256,string,string,uint256)", +"d816187f": "PreIcoWallet()", +"d8162db7": "lockedUntilBlock()", +"d8174150": "MAX_PRESALES_EXTENSION()", +"d8175101": "ownerHasCardSimple(address,address)", +"d81849b8": "additionalTokenRate()", +"d818eb63": "Fundraiser(address,address,uint256,uint256,uint256)", +"d818ecee": "setDisputed(address,string)", +"d81a91e9": "get_party2()", +"d81ab0c1": "invoke(uint256,address,address,bytes)", +"d81ad101": "IMPACT_REGISTRY_ADDRESS()", +"d81b1020": "setForceContract(address)", +"d81c2232": "icoPhase2TimeBonusInPercentage()", +"d81c6741": "removeAddressFromBonuslist(address)", +"d81d5062": "relayBuyerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"d81d8f89": "getSalaryTokensTotalValue(address)", +"d81dd9f7": "destroyGame(uint256)", +"d81dfe30": "LOCKED_TIME()", +"d81e8423": "get(address,address)", +"d81efdc4": "euroCentsInOneEther()", +"d81f53fd": "EtherId()", +"d81f84b7": "getAddr(uint256)", +"d81f9830": "BONUS_WINDOW_2_END_TIME()", +"d8207301": "MyWishCrowdsale(uint256,uint256,uint256)", +"d820ab95": "secondStageReserve()", +"d8211b0d": "BENZCoin()", +"d821b9f9": "initialAllocations(address)", +"d8220323": "setLoto(address)", +"d82277cc": "createInvestment(address,uint256)", +"d823eec9": "TEAM_TOKEN_CAP()", +"d825b510": "addDisagree(bytes32)", +"d825ebc3": "calculateMinting(uint256)", +"d826505d": "isEthNoEnc(uint16)", +"d8267fef": "letItRain(address[],uint256[])", +"d826853e": "sellKeys(uint256,uint256,string)", +"d826f88f": "reset()", +"d826fdf1": "checkRefundExistanceByOwner()", +"d8270dce": "creationTime()", +"d82745c8": "withdrawCooldown(address)", +"d828435d": "getNonce(address,address)", +"d8291e97": "CHELSCOIN()", +"d8294ede": "minimumTimeout()", +"d82974f8": "moveUnsoldTokensToFoundation()", +"d829f1e0": "blendWithOthers(address,uint256,uint256,uint256)", +"d82a6d56": "isOBR()", +"d82b394f": "createShip(uint256)", +"d82beb9e": "sender_enode()", +"d82c6df4": "inactivate()", +"d82ce857": "getPI_edit_26()", +"d82e3962": "calculateReward(address)", +"d82ed7eb": "unwhitelistAddressPresale(address)", +"d82f6a3f": "maxWeiInvestment()", +"d82f94a3": "deleteMinter(address)", +"d82fa3f1": "doInvest(address)", +"d831a158": "ownerCtuContract()", +"d831b714": "withdrawDeklaBalance(address,bytes)", +"d832d0c8": "isFoundation(address)", +"d833590f": "totalSupplyPretty()", +"d833c736": "tripleRoomMax()", +"d833dbe9": "preSaleRate()", +"d834e619": "min(uint256[])", +"d834f1e8": "setConfiguration(string,string,uint256)", +"d8353b75": "vestingDateEnd()", +"d83616b2": "TokenSaleLockTransfer(uint256,uint256,uint256)", +"d83623dd": "startDistribution()", +"d83671b7": "addLock(address,bool)", +"d83678ac": "tradeToken()", +"d8367d41": "startIncomeDistribution()", +"d836b12d": "getInvestorTokenPercentage(address,uint256)", +"d836f06a": "VestingKYCSetted(address,uint256)", +"d836f794": "sellKebabs()", +"d836fbe8": "changeHatchEscapeCaller(address)", +"d8377b20": "buyAndSetDividendPercentage(address,uint8)", +"d8381df0": "createCastle(uint256,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"d8389dc5": "hash(bytes32)", +"d8392c92": "WithCoin()", +"d83a223a": "changeFounderWalletAddress(address)", +"d83a7f67": "getDepositAddress(address)", +"d83a8d11": "testProposing()", +"d83aabbe": "getWagerCount()", +"d83c68b9": "Pilendthereum(uint256,string,string)", +"d83cb681": "getMixer(bytes32,uint256)", +"d83d2afc": "leftoverWeiAmount(address)", +"d83edd70": "refundEth(address)", +"d83f24a2": "multiMerge(address[],uint256[])", +"d83fcfa3": "TMN()", +"d8412808": "HazzaTokenInterface()", +"d84201bf": "buy5()", +"d8420e3a": "_isValidWithCompositions(uint256[],uint256)", +"d8436663": "destroyIBTCToken(address,uint256)", +"d8439165": "upgradePonyResult(uint8,uint256)", +"d843dcbb": "ELF()", +"d843e40a": "getRoundNum()", +"d843e721": "convertToATK(uint256)", +"d844a0fa": "TierionNetworkToken()", +"d845a4b3": "request(uint256)", +"d8460e8c": "Menu09()", +"d8464746": "getEyesValue(uint256)", +"d847e48f": "BlingTokenSale()", +"d8485ed6": "FCOIN1519Token(uint256,string,string)", +"d84891da": "EM122()", +"d8489a81": "MaxDistribPublicSupply_()", +"d848dee7": "setDeprecated(bool)", +"d8493983": "GroverBucks()", +"d849eeba": "gotResult()", +"d84acf20": "restoreAllTempTokens(uint256)", +"d84bd737": "xcc()", +"d84cb6ad": "ETH_Rate_Factor()", +"d84d2a47": "spreadMultiplier()", +"d84d95ba": "confirmMultipleTransactions(uint256,uint256)", +"d84dbdc3": "verifyInvestor(address)", +"d84f93cb": "priceOfOfficalCardSold()", +"d84fdbed": "getSponsorships(address,address,bool)", +"d850288b": "etherlist_top()", +"d8507a8d": "unfrezee()", +"d851eb5d": "betPlaced(address,uint256)", +"d8523fc2": "askForMatch(uint256)", +"d8526677": "MintMasterTransferred(address,address)", +"d852748c": "totalPoolOptions()", +"d8528af0": "allowedSpenders(address)", +"d85349f7": "cliffDuration()", +"d8542d51": "oldTokenAddress()", +"d8550112": "putServerAddress(string,address,uint256)", +"d855c059": "setExtraConfig(uint256,uint256,uint256,uint256,uint256)", +"d85633ec": "releaseOwnership()", +"d8567213": "chargeAll(uint256)", +"d856cbae": "ICOMinTresholdReached(uint256,string)", +"d8574e16": "addressD()", +"d857561d": "enableWithdrawal()", +"d8578d14": "showPlayerSafeById(uint256,uint256)", +"d857eba6": "getTagAt(uint256)", +"d8583895": "getNumberOfDeposits()", +"d85874b9": "badgerAmount()", +"d8589be3": "CoinFlipper()", +"d858b5c8": "order_sell(uint256,uint256)", +"d858ebf4": "createVisaOffering(uint256,bytes32,bytes32,uint256,uint256,bytes32)", +"d8590f93": "clearingPrice(address,bytes32)", +"d8592d79": "closeWormhole()", +"d85a82f6": "processDIVD()", +"d85b07e0": "stopIcoAndBurn()", +"d85b228e": "testCreateGame(string,string,bool)", +"d85b559f": "startSelection()", +"d85ba798": "getCutieId(bytes)", +"d85bd526": "running()", +"d85c8966": "ownerTransfer(address,uint256)", +"d85d3d27": "mint(string)", +"d85d656f": "getSMPTokensAmountPerWei(uint256)", +"d85d6d41": "finishLocking()", +"d85e2d20": "b(address,uint256)", +"d85e5486": "privateCap()", +"d85e88db": "item(address,uint256,bool,bytes)", +"d85edab6": "m_investors(uint256)", +"d85f4450": "numberOfWins()", +"d860ced1": "TIER1END()", +"d86123e1": "setMany(address[])", +"d8615e5b": "transferAndPay(address,uint256,bytes)", +"d86202cb": "getUserProductAtIndex(bytes32,uint256)", +"d8627542": "intialSupply()", +"d862b611": "extraMint()", +"d8632388": "allPlayCount()", +"d8632ae3": "sign(uint8,bytes32,bytes32)", +"d863f7f4": "DigiPeso()", +"d86491fc": "testReentracy()", +"d864c322": "changeAccountStorage(address)", +"d864e740": "committee()", +"d8650f49": "tokenGenerationLock()", +"d865897c": "_getHashKey(address,uint256)", +"d865a374": "instruct_1()", +"d865ae9b": "hasRole(address,bytes32,bytes32)", +"d865dc4f": "tokensSoldCount()", +"d8674554": "tokenTransfertoKYC(address,uint256)", +"d867bb25": "getONG(bytes32)", +"d8682e69": "returnTimeLeft()", +"d86892a7": "setSellerGuarantee(uint256)", +"d868c718": "scheduleFight()", +"d8690c22": "isAvailableLockSlot(address,uint256)", +"d8692f17": "calcMerkleDefault(bytes32[],uint256,uint256,bytes32)", +"d869c681": "issuedTokenBalance()", +"d869d86d": "getAmountsForChangeWeight(address,address,uint256)", +"d86afbbb": "giveItem(address,uint256)", +"d86b2982": "numbersCount()", +"d86b3721": "getblock()", +"d86b8739": "redeemedTokens()", +"d86bc1b0": "cancelByAdmin(uint256[])", +"d86c31e5": "BOXSToken(address,address,int256)", +"d86c5bf7": "angelWheelFinanceSupply()", +"d86df333": "deleteAccounts(address,address,address[])", +"d86e1850": "AuditBalances()", +"d86e762d": "getTotalAmountRaised()", +"d86e79c3": "createFixedPeriodVpfFactory(string,bytes32,uint256,uint256,int256[],uint256,uint256,uint256)", +"d86eb3b7": "reservedTokensAddress()", +"d86ec25a": "setNotaryParcel(uint256)", +"d86f26f2": "BigBucksToken()", +"d86f8ccd": "getAccountLockState(address)", +"d86fb89d": "updateRoundsInformation(uint256)", +"d871e94b": "tokenClaimWaitingPeriod()", +"d8730ef2": "getMaxCommunityTokens()", +"d8737d8a": "buyEthUnit(uint256,uint256)", +"d873f0d6": "tokenSaleMin()", +"d874082a": "fundtransfer()", +"d8743fad": "weiMinContribution()", +"d87522ae": "pauseEnd()", +"d8754716": "createNewTankHull()", +"d87574e0": "airDropPot_()", +"d87624ba": "buyGrimReapersAgainstEther()", +"d87692d9": "transferAllAndCall(address,bytes)", +"d876c9c0": "SECOND_AUCTIONS_INITIAL_PERCENTAGE()", +"d8772e79": "get_transaction_count()", +"d8774d99": "restrict(bool)", +"d8783b04": "PRICE_MULTIPLIER_ICO6()", +"d8787fde": "nextContract()", +"d8788e68": "getTokensForSaleCap()", +"d879380d": "timeoutRegistration()", +"d879914a": "getBidsLength()", +"d879e911": "JORDAN()", +"d87a253b": "registerNameXnameFromDapp(address,bytes32,bool)", +"d87adaa0": "registerPubKey(address,bytes)", +"d87b5c29": "getSpawnCount(uint32,int256)", +"d87bc4cd": "WEGC()", +"d87bca3f": "VictorieumToken()", +"d87be21b": "lastBlock_a4Hash_uint256()", +"d87c3df5": "applyBonus(uint256)", +"d87c5df6": "assignTokensWallet(address,address,uint256)", +"d87c5fb9": "balanceOfBuyer(address)", +"d87c9478": "getStageAverageBonus(uint8)", +"d87ce037": "round1Cap()", +"d87d2a66": "ETH_CRWDTOKEN()", +"d87d2b8d": "BuyMOYTokens()", +"d87d9a66": "get_account_balance_eth(address)", +"d87ddccc": "WithdrawEvent(string)", +"d87e568a": "setHWCDeposit(address,uint256)", +"d87f8da5": "cancelAuction(uint256,bytes)", +"d880285e": "sPeriodEndDate()", +"d880610c": "appendKeyValue(string,address)", +"d88080ed": "ERC20Standard(uint256,string,string,uint256)", +"d880b0b0": "LogChangePCWallet(address)", +"d8819e0a": "maxTrainerLevel()", +"d8822727": "CarDeregistered(uint256)", +"d882ad5e": "Valeriumcoin()", +"d883e789": "PayWins(address)", +"d8844241": "getTotalCategories()", +"d884a322": "betMaxAmount()", +"d886daa2": "revokeAccessDeposit(address,address)", +"d8879dd8": "isValidString(string,string,uint256)", +"d8879fdc": "deleteBio(bytes3)", +"d887ac35": "mUpgradeCostFactor()", +"d8887efc": "withdrawForTrexdevshop()", +"d88905fa": "sanMint(string,string)", +"d8894bb5": "fraction()", +"d88a3af9": "register(address,string,string,uint256,string,string,bytes32,address,address)", +"d88ae250": "setProjectsContractAddress(address)", +"d88b0815": "numberOfCrySolObjects()", +"d88b2da2": "_registerReferral(string,address)", +"d88b8676": "addTrustedAccount(address)", +"d88b9732": "BUXCOIN()", +"d88bfbad": "ContractDisabledBlock()", +"d88c271e": "isWhitelistedUser(address)", +"d88c5237": "VenusCoin()", +"d88cdbd6": "setMe(uint256)", +"d88d8b38": "registerToken(uint256,bytes,uint256)", +"d88dc1c6": "winner_announced(address,uint256)", +"d88e92a7": "OmegaProtocol()", +"d8909e74": "withdrawMyDeposit(uint256)", +"d8910b70": "getTransferProxy(uint32,int256)", +"d89135cd": "totalBurned()", +"d8915fc5": "DCAssetBackend(bytes32,bytes32)", +"d8916bb9": "etherToWei(uint256)", +"d89397b1": "btcsBuyRecipient(address)", +"d893b9f1": "soldTokensPreSale()", +"d894e937": "setSomeValue(string)", +"d894f861": "costFunds()", +"d895530c": "getCurrentCandidateForPrize()", +"d8959512": "getConnectorBalance(address)", +"d8966ad3": "getTombByOwner(address)", +"d896dd64": "setStatus(uint256,uint8)", +"d89739b1": "Marketplace(address)", +"d897833e": "setSaleStatus(bool)", +"d898e1b9": "_depositEther()", +"d899299e": "realUnicornAddress()", +"d899d312": "Testimony()", +"d899e112": "target3()", +"d89ab6d3": "YouCollectCoins()", +"d89b465c": "getUnitAttackIncreases(address,address,uint256)", +"d89b8057": "setOscar(address)", +"d89b908d": "checkFundingCap()", +"d89bcaaa": "BATsPerEth()", +"d89cca38": "assignLawyer(string)", +"d89d4404": "_payEther(uint256)", +"d89dc0ad": "MarketOpen(address)", +"d89ea0f5": "setClearingPriceComponent(address)", +"d89edecf": "returnAmountPlusInterest(uint256)", +"d89ef018": "addUsersWhitelistA(address[])", +"d89f9719": "getOrderOtherArguments()", +"d89fb919": "episodePurchase(uint256,address,uint256)", +"d89fda34": "Fish()", +"d89fec58": "aboutCurrentPack()", +"d8a0aa6c": "getPositionById(address)", +"d8a119b9": "ownerSetVisible(string,string)", +"d8a140f9": "peony()", +"d8a1e70a": "widthrawDev()", +"d8a2848d": "setPaymentEscrow(address)", +"d8a351de": "_getDefaultPartitions(address)", +"d8a3daa0": "createEntry(uint256,uint256[])", +"d8a3f0bf": "getFactoryPrice()", +"d8a489d9": "pauseTournament()", +"d8a506f3": "thirdStageDiscountPriceOfTokenInWei()", +"d8a52178": "ContractManager()", +"d8a54360": "totalRemaining()", +"d8a5cca1": "Finalised(address,uint256)", +"d8a6021c": "transferTreasury(address)", +"d8a7233e": "addBook(string,string)", +"d8a74c7c": "getGamblingPartySummarizeInfo(uint256)", +"d8a74f3b": "ThrowError()", +"d8a79d87": "wolf3Balance()", +"d8a865f6": "getElementAt(uint256)", +"d8a8e03a": "move(uint256,address)", +"d8a9e45e": "getProductContractUser(address)", +"d8aa9f85": "totalForOutcome(uint8)", +"d8ab8274": "getStates()", +"d8ab9208": "addressByIndex(uint256)", +"d8aba1c6": "partFees()", +"d8ac1bb3": "buyTokensReferral(address,string)", +"d8ac26c0": "ForksTestContract()", +"d8ac289f": "frozenWallet4y()", +"d8ac5b4e": "tokensPerCents_gte5kUsd()", +"d8ad1c5c": "getCapAmount()", +"d8ae6139": "WavesPay()", +"d8aeedf5": "freezingBalanceOf(address)", +"d8afc2fe": "getAdminVariables()", +"d8afd392": "advisorySupply()", +"d8b0403a": "Bithemoth(address,address)", +"d8b0b499": "country()", +"d8b11d54": "AddItemExtra(uint32,uint16,uint256,uint16,uint16,string,address)", +"d8b120c1": "getMeshPointByName(int256,string)", +"d8b163d0": "eventsAdmin()", +"d8b29324": "unlockAmount(string,uint8)", +"d8b3315f": "public_withdraw(uint256)", +"d8b3a2eb": "isOdd(uint256)", +"d8b3ad77": "setDateTimeLib(address)", +"d8b3d69a": "getVendorApplicationScoringTrack(string,uint256)", +"d8b3e417": "USD20TestToken()", +"d8b4e580": "uploadBalances(address[],uint256[])", +"d8b50a63": "addAction(string,uint256)", +"d8b5cf43": "beneficiary_modify(address)", +"d8b66ae1": "sendTokens(address[],uint256[])", +"d8b79543": "FxxkToken()", +"d8b86753": "getOrderCount(address)", +"d8b964e6": "approved(address)", +"d8b98118": "CRLperEther()", +"d8b98fca": "AirDrop(address)", +"d8b9a2a0": "addContract(address,address,uint256)", +"d8b9a7e8": "CLC(uint256,string,string)", +"d8ba6de2": "Endorsements()", +"d8ba8ce3": "setNextDiscountTTMTokenId6(uint64)", +"d8baa905": "getAreaEvaluation(address,uint256,address)", +"d8bad5bd": "userLoans(address,uint256)", +"d8bbae03": "getTransferValueFor(address)", +"d8bd4761": "createCurrency(string,string,uint8,uint256)", +"d8be2838": "unSuspend(address)", +"d8be30fc": "getUserMessage(address)", +"d8bea898": "addReferredInvestor(string,address)", +"d8bf0568": "level1Bonus()", +"d8bf0ef8": "finishBurning()", +"d8bf1773": "calculatePoohBuySimple(uint256)", +"d8bf63b7": "START_BLOCK_NUMBER()", +"d8c02572": "Gallery_MuYi_No2()", +"d8c1c3c2": "getNumberOfTx(uint256)", +"d8c1fad1": "StakeIt()", +"d8c251b5": "isNotRegistered(address)", +"d8c26129": "foundationWithdraw()", +"d8c2c1c1": "getcoeffcient(address,uint256)", +"d8c2c878": "PlexCoin(uint256,string,uint8,string)", +"d8c30700": "getCurrentCap()", +"d8c34127": "isKnownSignature(string)", +"d8c35273": "getHumanNumber()", +"d8c37ecd": "calculateMarketPixelPrice(address[16],uint256)", +"d8c3c1ed": "finalizeIto(uint256,uint256,uint256)", +"d8c42e42": "doublePrice(uint256)", +"d8c4661c": "getNID()", +"d8c4c34e": "KaraOmToken()", +"d8c4cd7d": "saveStudent(uint256,string,string,address,address)", +"d8c57892": "getDecision(bytes32)", +"d8c5c6f8": "disapproveInternal()", +"d8c65cbb": "_setEyesValue4(uint256)", +"d8c681a7": "BaoFengChengCoin(uint256,string,string)", +"d8c6bd6f": "checkMine(uint256)", +"d8c90762": "addTrustedIssuer(address,string)", +"d8c929a8": "getCurrentRoundRewards()", +"d8c9334b": "TextChanged(bytes32,string,string)", +"d8c94cd5": "_addToken(address,uint256)", +"d8c97f34": "transferFromVest(uint256)", +"d8ca713a": "getStringMember()", +"d8ca8a55": "distributeIQTTokenBatch(uint256)", +"d8cb2d4a": "STOCoin()", +"d8cb4aa3": "bonus(address)", +"d8cb52d3": "getFreeRabbit(uint32,uint256,uint8,bytes32,bytes32)", +"d8cba0ba": "transferWallet(address)", +"d8cba7a2": "phase3Cap()", +"d8cbce53": "calculateDividendsFor(address)", +"d8cc3c5e": "get_milestone_information(uint256,address)", +"d8ccd0f3": "free(uint256)", +"d8cdac0d": "window0StartTime()", +"d8cecc7b": "MdedicalChainCoin()", +"d8cf9184": "getServerCreationFee()", +"d8cfd15a": "LogB(bytes32)", +"d8cff716": "NBAT101(address,address,address,address,address)", +"d8d07637": "poll(uint32)", +"d8d0819f": "CoinVilla()", +"d8d1d507": "whiteListContracts(address)", +"d8d1efea": "releaseTimeSecond()", +"d8d34c89": "ManualTransfer(address,uint256)", +"d8d3b1a4": "TIER1()", +"d8d40cee": "gameNumber()", +"d8d45d13": "setShipping(string)", +"d8d4a75e": "AUD_Omnidollar()", +"d8d4ec02": "checkVesting(address)", +"d8d5740c": "XMLYToken()", +"d8d5a200": "payBountyManager()", +"d8d736c5": "_makeDepositForPeriod(bytes32,uint256,uint256)", +"d8d777f2": "_attack(uint32,uint8,uint64)", +"d8d8e2f2": "test_23_assertGasUsage200Boards()", +"d8d9159d": "pr0coinAddress()", +"d8da3bc0": "getCurrentPotSize()", +"d8da708f": "preico_enddate()", +"d8db583f": "getFreelancerSkills(address,address)", +"d8dbb475": "JSONpath_string(string,string)", +"d8dbb712": "OfferCancel_internal(uint8,bool)", +"d8dbe4c9": "setContractManager(address)", +"d8dd2b79": "emitTransferFeeRateUpdated(uint256)", +"d8de5a41": "splTransferFrom(address,address,uint256,uint256,uint256)", +"d8df44fd": "maxTimeBonus()", +"d8df5dc1": "lockAmount()", +"d8df9aad": "setDayWithdrawCount(uint256)", +"d8e09dac": "setTrustee(address,bool)", +"d8e1b9ba": "explore2(uint256,address,bool)", +"d8e20e2c": "brickPrice()", +"d8e223b5": "issueMedal(address)", +"d8e2e392": "admin_set_isRequireData(bool)", +"d8e30740": "ETH_RECEIVED_CAP()", +"d8e3c1c8": "buyPlatinum(uint256,uint256,uint8,bytes32,bytes32)", +"d8e3c33f": "gridToIndex(uint256,uint256)", +"d8e476ab": "icoPhaseDiscountPercentage2()", +"d8e4ab0d": "isOmegaContract()", +"d8e4f9d9": "teamTwo()", +"d8e5ae6a": "Etheramid()", +"d8e5c048": "scheduleCall(address,uint256,uint256)", +"d8e5c797": "concat(string,string,string,string)", +"d8e5e64e": "getAsAddressOrZero(bytes32)", +"d8e60616": "OFNOG()", +"d8e6b249": "findPossibleDelegatorsOf(address)", +"d8e71b35": "ico3receivedTotal()", +"d8e74ed7": "monsterStrength()", +"d8e86854": "setPrices(uint256,uint256,uint256,uint256)", +"d8e8752a": "resetUsedToday(uint8,uint8)", +"d8e8b177": "interestOf(address)", +"d8e9602b": "tierCap(uint256)", +"d8e963b3": "PRE_ICO_END_TIME()", +"d8e97a56": "averageTimestamp()", +"d8eb3a98": "withdrawAuctionBalance()", +"d8eb6af3": "redeemEthers(address,uint256)", +"d8ebfe5a": "interaddmoney(address,uint256,uint256)", +"d8ec55ed": "meh()", +"d8ec696f": "__address1__()", +"d8edbd79": "ZTToken()", +"d8ee2ff4": "_buys(uint256,uint256)", +"d8ee796f": "founderAllocatedTime()", +"d8eea572": "getMinInt64()", +"d8eebd8d": "spentBalance()", +"d8eef28b": "ordersFor(uint256,uint256)", +"d8f012c6": "StatelessFactory(string,string,string)", +"d8f06b52": "closeAfterWhitelisted(address)", +"d8f0b9c4": "amountToBeneficiary()", +"d8f0c358": "getSetupParametersCount()", +"d8f163ab": "totalTokensDistributed()", +"d8f248b8": "getForge(uint256)", +"d8f2cd12": "onceSetOwners()", +"d8f2f09f": "china()", +"d8f306a1": "setAvailableToken(uint256)", +"d8f342be": "getBTCETH(uint256)", +"d8f3790f": "ethBalance(address)", +"d8f42fca": "SzeToken(address,address)", +"d8f45fdb": "LICToken()", +"d8f5d098": "privateUnlock(address)", +"d8f6d596": "getSale(uint256)", +"d8f6dcf2": "getTaskById(bytes32)", +"d8f71809": "MAX_COMMISION()", +"d8f9659b": "withdrawnTokens(address[],address)", +"d8f9d144": "changeOwner(string,address)", +"d8f9e51b": "EkoBeerCoin()", +"d8fa191b": "setProviderDetailFields(uint256,bool,bool,uint256)", +"d8faefc9": "fixDistribution(uint8,uint256)", +"d8fbbf31": "removeContractFromWhiteList(address,uint256)", +"d8fbe994": "transferFromAndCall(address,address,uint256)", +"d8fbff9f": "createDroneFromVault()", +"d8fce0d4": "pinchVillain(uint256,uint256)", +"d8fcfd6b": "convertRealTo256(int128)", +"d8fd1ed9": "creatorReward()", +"d8fd2043": "getSkullyById(uint256)", +"d8fd7ae3": "subtractAllowed(address,address,uint256)", +"d8fe1558": "BaseICOTokenWithBonus(uint256)", +"d8fe511f": "tithes()", +"d8fed39e": "tokenSoftcap()", +"d90025d1": "DIVIDEND_FUND_FRAC_TOP()", +"d900a6ae": "hgtSold()", +"d901402b": "getCommitHash(address,uint256)", +"d9019530": "request(address,uint32)", +"d901b98c": "test_1_generationAcrossBlocks_increaseBlocksBy100()", +"d902ac2e": "insert_data()", +"d9037441": "setEthFundDeposit(address)", +"d9037522": "removeVoter(address,string)", +"d903c5ae": "minimumTDEContributionInWei()", +"d904094e": "ownerCancelArmyMarketplace(uint256)", +"d9057007": "supportsInterface(address,bytes4)", +"d9067fbd": "initCongress(address)", +"d9076129": "secondBonusPercent()", +"d907e02e": "_cancelBet(uint256)", +"d9082962": "totalRefunded()", +"d9089b11": "_processDividends(uint256)", +"d9099f67": "endPreICOStage3()", +"d90a28c0": "fullProfit()", +"d90a8224": "getNumberOfSuccessfulDeals()", +"d90a88cd": "getContentReplies(uint256,uint256)", +"d90b02aa": "left80(uint256)", +"d90b4958": "completeProject(bytes32)", +"d90c1759": "dayFor(uint256)", +"d90c2861": "Albertheijn()", +"d90cdfb4": "getCanvasInfo(uint32)", +"d90d5b58": "copyright(address)", +"d90d870b": "adminSetPercent(uint256)", +"d9106264": "clearAuth(string)", +"d910c805": "MAX_POWERBALL_NUMBER()", +"d9114476": "addAudit(bytes32,uint256,bytes32)", +"d912d248": "transfertOwnership(address)", +"d912ebb2": "tokensIssuedIco()", +"d9134c46": "isGlobalConstraintRegistered(int256,address,int256,address)", +"d9135493": "AdPotato()", +"d913dea2": "UsdRateSet(uint256)", +"d9144448": "upgradeProposal(address,address,address,uint256)", +"d9144712": "numberClaimToken()", +"d914cd4b": "addPool(address)", +"d915562b": "isControlled()", +"d9159f60": "sealedBy()", +"d915cdbd": "investBalances(address)", +"d916d8fd": "getPlayersCountByGame(uint256)", +"d916ec32": "getEmissionProviders()", +"d917863e": "addExchangeTestAccounts(address,address)", +"d9178993": "maxPeriodDuration()", +"d917deb5": "Donate()", +"d91921ed": "addBalance(uint256)", +"d9194d2c": "toggleTransferable(bool)", +"d9194fcb": "setCEO(address,bytes)", +"d91aee02": "getTotalGamesParticipated()", +"d91c98d3": "startingBlock()", +"d91ca13e": "EquinoxCoin()", +"d91d81c6": "preIcoEndAt()", +"d91dc952": "timeLock(address,uint256)", +"d91e1c63": "totalGambles()", +"d91e24c2": "TIMEToken(address,uint256)", +"d91f3f33": "BookERC20EthV1Dec()", +"d91f68a2": "currentMessageNumber()", +"d92126fc": "NewFees(uint256,uint256,uint256)", +"d9214848": "CONFIGURE(bytes32,bytes32)", +"d921eb78": "isRefund()", +"d9226ced": "_setMaxAssets(uint256)", +"d922aa30": "core(uint256,address,uint256)", +"d922b6ab": "stage_1_tokens_scaled()", +"d922cd12": "InsightChainToken()", +"d922d5c8": "TimeLockedController(address)", +"d922f603": "Purpose()", +"d923a0be": "setLoyaltyWallet(address)", +"d923c99e": "getRecordByRow(uint256)", +"d9244bf9": "maximumHodlDuration()", +"d9246bec": "activateICO(uint256)", +"d9249e7e": "PuppiesCore()", +"d924c660": "shift_right(uint32,uint32)", +"d9269cb4": "at_permille(uint256)", +"d92782ac": "sumICOStage5()", +"d927b5ad": "addDistributionPeriod()", +"d928a3d8": "_getSchellingRoundSupply()", +"d928e32e": "ERC20Basic(string,string,uint8,uint256)", +"d9296e45": "totalWeiFunded()", +"d92c4f7c": "AirContactToken(uint256,string,uint8,string)", +"d92ca5b4": "tokensTeam()", +"d92cb5b0": "WinRound(address)", +"d92d5bb3": "ADSToken()", +"d92d7056": "option20name()", +"d92da722": "processBuyRequestFiat(string,uint256,address,uint256,uint256)", +"d92da8f8": "bountySupplyRemaining()", +"d92dc325": "MintAndTransferToken(address,uint256,bytes32)", +"d92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", +"d92ec71b": "addDeal(uint256,string,string,uint256,bytes32,string)", +"d92ed48d": "rebalanceBuckets()", +"d92fb5e9": "newClaimer()", +"d9300e30": "checkIfAllALCDistributed()", +"d9305ba7": "LOG_OwnerDeposit(uint256)", +"d930a90b": "testFailMoveBalanceDueToInsufficientFunds()", +"d93112e3": "totalEarlyStage()", +"d9326337": "PiaoPiaoToken()", +"d932b248": "AssetISR()", +"d932ed92": "MarriageCertificates()", +"d933b5f2": "SLABSToken()", +"d933c1fb": "XYOracleBonus()", +"d933dac7": "view26()", +"d9357438": "getInfoByAddr(address)", +"d9359419": "payoutERC20(string)", +"d935bac3": "test1Vote()", +"d935c8b4": "totalEthSales()", +"d935e0a7": "BBCC(uint256,string,uint8,string)", +"d936547e": "whitelisted(address)", +"d9368ba2": "getUserOptState(address,address)", +"d93761fb": "transferSKM()", +"d937ed44": "grantVestedEDEXContract()", +"d9386789": "coreTeamMemberTwo()", +"d9386c9f": "cofounderVUPDestination()", +"d939727d": "setMaxTokenNumbers()", +"d939c960": "fundRecipient()", +"d93a0a8e": "newClassPlayer(uint256,uint256,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"d93a64a2": "updateDebris(bytes32,uint8,bytes32,address)", +"d93b4451": "Authorise(bytes16,address,address)", +"d93b4ee7": "disableLogic(address)", +"d93d6ad0": "isKeyHolder(address)", +"d93da7f0": "ROUND_5_PRESALE_BONUS()", +"d93dbeff": "calculateLevel(bytes8,bytes5)", +"d93debd5": "registerDappAddress(address)", +"d93e5aeb": "count_next_address(address,uint256)", +"d93e7573": "disown(bytes32)", +"d93eeb5c": "safeTransferManyFrom(address,address,uint256[],bytes)", +"d93ef85f": "Photos()", +"d93fabfa": "addSeller(address)", +"d94073d4": "PT()", +"d94085cc": "FindMyFish_EnterBarcode(bytes32)", +"d9409bc5": "WFCC()", +"d940c3ee": "processPayroll(address,uint256)", +"d94123b8": "channel_api()", +"d94178c2": "getvalue(string)", +"d9417b6a": "balanceWosPoolToWosSystem()", +"d9417d69": "wikiRemoveTokenFrom(address,uint256)", +"d941c4ad": "prepare(bytes32)", +"d94288de": "totalFeatures()", +"d94389bd": "__char(bytes1)", +"d94395e2": "lastCitizenPaid()", +"d943c8b6": "oldHolders(address)", +"d9441f14": "playerMsgs(uint256)", +"d944534a": "generate(uint256,address,string)", +"d944c749": "ADVISOR_FOUR()", +"d945799f": "removeLockFund(address)", +"d94585bd": "proveAndClaim(bytes,bytes,bytes)", +"d9468475": "findRecentInterest(address)", +"d946af8f": "addNodeAddress(uint256,address)", +"d9474ad7": "unlockedProvider(address)", +"d9479692": "contract_name()", +"d947c8d1": "transferSketch(address,uint256)", +"d947e234": "offerGuardianVend(uint256,uint256)", +"d948d468": "forward(bytes)", +"d94929fe": "setTokenSaleRounds(uint256[5],uint256[5],uint256[5],uint256[5],uint256[5],uint256[5])", +"d94a0a7d": "findNextwaitPairBetIDs(uint256,uint256)", +"d94a75bc": "MELON_CONTRACT()", +"d94acc0a": "distributeVSN(address[],uint256)", +"d94b9843": "toContractAddr()", +"d94c7c29": "updateTokPerLockRate(uint256)", +"d94ca0f9": "approvePrimordialTokenAndCall(address,uint256,bytes)", +"d94d0316": "timeIncrease()", +"d94d0787": "EthlyteToken()", +"d94fd026": "applyPixelChange(uint256,uint256,uint256,uint256,uint256[])", +"d94fe832": "idOf(address)", +"d95030cb": "ticketTransfers(uint256,uint256)", +"d9506c5f": "startSettle(bytes,uint8[2],bytes32[2],bytes32[2])", +"d950aec6": "splitWinnings(uint256)", +"d950c432": "multiFreezeWithTimestamp(address[],uint256[])", +"d950cc3c": "getUserCap()", +"d9510215": "withdraws()", +"d9515238": "forward_funds(uint256)", +"d951d39a": "tokensIssuedForBonusRangeThree()", +"d951d7ec": "updateMIN_BET(uint256,uint256)", +"d951e357": "bonusFourthWeek()", +"d9520c9a": "allTokenOwnerOnStart()", +"d9527fa7": "buyShares()", +"d95374ce": "pendingJackpotForHouse()", +"d95402e7": "Redeem()", +"d95405f2": "lockTokenDays(address,uint256,uint256)", +"d95425e6": "TXwithCode(bytes32)", +"d95431cd": "lookupFeaturedSprites(uint256)", +"d9548e53": "isExpired(uint256)", +"d954a949": "setDeal(address,bool,uint256,uint256,uint256)", +"d954af09": "revealBid(bytes32,uint256,address,address,address,uint256,uint256)", +"d954bd4a": "ICO_TIER_LAST()", +"d954cbcb": "amountInvested()", +"d95514a8": "Regulator()", +"d955ec17": "setMiniumInputEther(uint256)", +"d95660be": "timeNow()", +"d956634f": "claimTokensAndRefund()", +"d9573c1a": "taxEth(uint256,address)", +"d9575ec5": "registerNameXID(string,uint256,bool,uint8)", +"d95808f0": "lastBlock_f3()", +"d9583497": "acceptFulfillment(uint256,uint256)", +"d9592676": "packKey(uint8,uint128)", +"d9597016": "multisetCustomGasPrice(uint256[],address[])", +"d95983c3": "Destroy(address,address,uint256)", +"d959868a": "total_no_of_CTD()", +"d959cbd2": "fMul(uint256,uint256)", +"d959e244": "left25(uint256)", +"d95a0aa5": "setDirectMintLimit(uint256)", +"d95a2d42": "lendGovernmentMoney(address)", +"d95a820f": "LogStartPreICO()", +"d95ab72d": "getMemberWallet(address)", +"d95ace6f": "checkSigned(bytes32,uint8,bytes32,bytes32)", +"d95b6371": "isOperatorFor(address,address)", +"d95c6092": "StartreasureToken(uint256,string,uint8,string)", +"d95efb98": "genesisAddress(address)", +"d95ffc08": "myEthBalance()", +"d9606ca1": "WINE(uint256,string,string)", +"d96073cf": "swap(uint256,uint256)", +"d960924d": "dtAddEthBalance(address,uint256)", +"d960ede1": "sectionPrice(uint256)", +"d96152c3": "executeRuling(uint256,uint256)", +"d961de44": "domainConnector(bytes32)", +"d9629e06": "casinoGames(uint256)", +"d962a68b": "buyTokensByUSD(address,uint256)", +"d962c51e": "redeemByTranche(bytes32,uint256,bytes)", +"d962dd99": "setCompte_43(string)", +"d9637826": "safe_sub(uint256,uint256)", +"d964f28a": "TokenAiNetworkToken(address,address)", +"d9652cb1": "startTimestampOfBonusPeriod()", +"d965ea00": "getMemberLength()", +"d9663f6a": "START_PREICO_TIMESTAMP()", +"d966cfc3": "totalAllocatedToAdvisors()", +"d967f752": "rentMachine(address,uint256,uint256,uint256)", +"d968595f": "isValidProposal(uint256)", +"d968dab1": "chipBalanceOf(address,address)", +"d9696054": "readInfoList(address,uint256,uint256)", +"d969b919": "Etherplanet()", +"d969ead4": "countpro(uint256)", +"d96a094a": "buy(uint256)", +"d96a22b8": "windowBonusStep1()", +"d96a8687": "XMPToken()", +"d96aee49": "MultipleConstructorTest()", +"d96bcd8f": "randomTargetAssign()", +"d96bfbb3": "resetUser(uint256,address)", +"d96c0991": "quitFromAirdrops()", +"d96c26c9": "submitTransaction(address,uint256,bytes,bytes,bytes)", +"d96c30a4": "checkTime(address,uint256)", +"d96c550a": "_preValidatePurchase(address,uint256,uint8)", +"d96cb018": "icoCap()", +"d96cc905": "toB32(uint256,uint256,bytes,address)", +"d96d7ea2": "PRE_EXECUTION_GAS()", +"d96db2ec": "OfferToRealm(uint256,uint256)", +"d96de4ce": "AdminDrawError()", +"d96e1f76": "icoStatus()", +"d96e5565": "testThrowsRetractNotRetractable()", +"d96ed505": "minGasPrice()", +"d97036c2": "ARM1Token()", +"d9703dac": "getResoMethod()", +"d97049bb": "regs(uint256)", +"d97095f3": "AST()", +"d970c19b": "raiseCoinsSeeded(address,uint32,uint256,uint256)", +"d9710278": "TwoFucksToken()", +"d9719e56": "CROWDSALE_SHARE()", +"d971da94": "priceUSDcETH()", +"d972bc59": "setICO_Contract(address)", +"d972e8ad": "getTranche(uint256)", +"d972ea3e": "dragon()", +"d9740383": "SAWJewelleryChain()", +"d9741bd9": "PinMoToken()", +"d975767b": "eLitecoin()", +"d975f3b7": "withdr(uint256)", +"d977076e": "getExtraBets()", +"d9779fbe": "currentTokenSupply()", +"d977a59c": "getCurrentRateByStage()", +"d977b282": "getValue(address,address,uint256)", +"d9784223": "getEscrowAndHash(bytes16,address,address,uint256,uint16)", +"d9785451": "timerMax()", +"d9787517": "getTotalPossibleTokens(address)", +"d978a0d3": "setFinancialOfficer(address)", +"d9795f66": "usersNTD()", +"d9797076": "CoinBroSupply()", +"d979e906": "getXNKPurchased()", +"d979f5aa": "setHolder(address)", +"d97a9c39": "resetContent(string,address,string,string,string,uint256,uint256)", +"d97b0a6e": "Workcoin()", +"d97b14f0": "sendAdvisory(address,uint256)", +"d97c5be5": "losePooling()", +"d97cec3f": "transferMultiSameValue(address[],uint256)", +"d97cf075": "onlyBouncerExecuteCall(address,uint256,uint256,bytes)", +"d97d4f52": "FOUNDERS_LOCK_DATES(uint256)", +"d97dec19": "transferAll(address,address,uint256,address,uint256,uint256,address)", +"d97e38d6": "getApprovedBuyerForIndex(address,uint256)", +"d97fc929": "CommitSolutionHash(bytes32)", +"d9803cb2": "addOfficer(address)", +"d9823996": "withdraw(uint152,address,uint256)", +"d982466d": "getPlayerAwardByRndNo(uint256,address)", +"d98299a0": "RedBlue()", +"d9829cbc": "getRewardAndPrepareWithdraw()", +"d982a84e": "citadelAddress()", +"d9844e25": "hexAddress(bytes32)", +"d9852ca9": "nbDispute()", +"d985f122": "RelayToolsTest()", +"d9875c93": "stageNow()", +"d988a0f9": "Payoutnextrefund()", +"d989f5f2": "productOwners(address,uint256)", +"d98a977d": "TestWorldSnapshotInternal(uint256)", +"d98ae811": "transferDay(uint16,address)", +"d98b094c": "communityPeriodsNumber()", +"d98b2fbf": "getOverviewsCounter(uint256)", +"d98b43f7": "removeOracleAddress()", +"d98b9bb5": "placeBid(address,uint256)", +"d98bce37": "batchBurnAssets(uint256[])", +"d98bf529": "LimitTop()", +"d98c08b5": "CryptaurDepositoryTest()", +"d98c1524": "getPortfolio(bytes32,address)", +"d98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", +"d98de8a5": "isCrydrViewRegistered(string)", +"d98e14bd": "STAT_COUNT()", +"d98e2997": "addMiningToken(address,uint256)", +"d98f47fe": "recieveEscrowTransfer(address,uint256)", +"d98f4ea2": "sumICOStage7USD()", +"d98f6088": "blockDelay()", +"d9901ce4": "DappToken(uint256)", +"d991c58f": "mintMaster()", +"d99202c5": "STCDRListing()", +"d9923a16": "Account_timePayout(address)", +"d992aa70": "createBounty(string,uint256[])", +"d992bd5b": "testResultNotZero()", +"d9934a8c": "holdAddress4()", +"d993693c": "LOTTYcoin()", +"d9946793": "shareHolderBalanceOfAtTime(address,uint256)", +"d9946a79": "PERSONAL_CAP()", +"d9948af7": "sumICOStage1USD()", +"d9964d92": "getResourceName(uint16)", +"d9967889": "BalanceOf(address)", +"d9969061": "prove(bytes32,uint256)", +"d9971e92": "reject(uint64,string)", +"d99727cc": "removeBonus(uint8)", +"d9972b96": "isAuthorized(address,bytes4)", +"d997598b": "HoChiMinh()", +"d997933f": "canBreedWith(uint40,uint40)", +"d997a153": "transferBatchIdempotent(address[],uint256[],bool)", +"d997ccb3": "payMe()", +"d9987c07": "ReturnToOwner(address,uint256)", +"d998d0d5": "chunkNr()", +"d99929db": "getAssetIdTypeSequenceId(uint256)", +"d99969df": "DUNE_BUGGY()", +"d999741e": "grantFoundationToken()", +"d999b17e": "CROWDSALE_PHASE_3_START()", +"d999f132": "optionDescription(uint256)", +"d99a8dc3": "submit(string)", +"d99a9d20": "_setTransferFeeProp(uint256)", +"d99bb9f7": "removeOwnership()", +"d99c6c76": "_invest(address)", +"d99d83e3": "txsPerHour(uint256)", +"d99dbdbe": "changeBookState(uint256,uint256)", +"d99dd314": "companyTimeLock()", +"d99f8bd8": "VarnixToken()", +"d99fe20d": "dexTestApprove(address,address,uint256)", +"d9a0b299": "deactivateClaim()", +"d9a18f6d": "totalTokensForSaleDuringICO1()", +"d9a19a7a": "MMOTOKEN()", +"d9a2a083": "TeamWalletUpdated(address,address)", +"d9a2fff5": "airDropPercent()", +"d9a3988d": "LogPollApproved(bytes32)", +"d9a3c199": "testSaleToken()", +"d9a457fe": "endRound(address)", +"d9a4ad8b": "shouldHadBalance(address)", +"d9a4cc33": "_finalizeSale(bool)", +"d9a50120": "SaniCoin()", +"d9a52ab3": "getForkMigrationPercentageBonusDivisor()", +"d9a569f5": "OfferPlay(address,uint8,uint8)", +"d9a57382": "propertyIdToEscrow(uint256)", +"d9a5b0a7": "testHighestTranchNotExact()", +"d9a6c6db": "FactbarDeed()", +"d9a6cf81": "transferableUntil()", +"d9a6e2de": "VST(string,string,uint8,uint256)", +"d9a7556f": "indexThreads()", +"d9a8748c": "fundAccount()", +"d9a8e212": "GOLDQ()", +"d9a96c92": "LegalToken()", +"d9a96f9b": "saleManagerAddress()", +"d9aa1881": "tokenDestroyed()", +"d9aa5543": "newDoc(bytes32,uint256,string)", +"d9ab1ec9": "smallCount()", +"d9aba9ce": "getProduct(address)", +"d9abedb4": "take_fees_eth_dev()", +"d9ac03a6": "getCurrentCertificateNonce(address,address)", +"d9ac9a88": "getAuctionTotal()", +"d9aea707": "modifyCeo(address)", +"d9af3691": "verifyCertificate(address,uint256)", +"d9afa38b": "payDividends(address,uint256)", +"d9b02ddf": "setGeneral(uint32,uint8,uint8,uint16,uint16,uint16,uint16,uint32[4],uint32[4],uint8)", +"d9b058bd": "setOraclizeGasprice(uint256)", +"d9b158b1": "angelInvestorsWallet()", +"d9b238ea": "test_insert_findWithHintNotTightBound(int256)", +"d9b25a24": "proxyBuyTokens(address)", +"d9b36043": "TJFucks()", +"d9b4abf5": "marketplace_controller_v2()", +"d9b5134c": "getTotalExchanged(address)", +"d9b5618c": "TimeBroker()", +"d9b596c7": "generateRand()", +"d9b5b5ca": "exponential(uint256,uint256)", +"d9b5c4a5": "nodeRegistry()", +"d9b627dd": "CancelledByBuyer(bytes32)", +"d9b6aec4": "allInvestments()", +"d9b6b197": "tempAdvisorsTeam()", +"d9b7d154": "applyForTask(uint256)", +"d9b7d41b": "createFootballer()", +"d9ba32fc": "getWhitelistStatus(address)", +"d9ba8ea4": "finishLastRound()", +"d9bb57c6": "removeGameManually(address,address)", +"d9bb6102": "HealthCashMock()", +"d9bc9873": "getCanvasPaintedPixelsCount(uint32)", +"d9bcc65b": "setSeedContract(address)", +"d9bccfd6": "getWarrantyPrice(address,uint256,uint256,uint256)", +"d9bd0799": "clearPeriods()", +"d9bd2468": "getToken(uint256,address)", +"d9bdc10c": "getPlayerHasGetFree(address,address)", +"d9bdd6fa": "createCDPLeveragedAllDai()", +"d9be976c": "GainmersTOKEN(uint256,uint256,address)", +"d9bf3187": "setOutcome(int256,uint8,bytes32,bytes32)", +"d9bf8238": "setWinery(address,bool)", +"d9bfa73e": "orderEpoch(address,address)", +"d9c01911": "mintIdentityToken()", +"d9c090a0": "updateRoleName(address,bytes32)", +"d9c1a344": "balanceTotalOf(address)", +"d9c1ac25": "transferAllERC20Token(address,uint256)", +"d9c24acb": "_unlockedAmount(uint256)", +"d9c263f8": "purchaseWithEth(uint256,uint256,uint256,address,bytes)", +"d9c27cc6": "setPep(address)", +"d9c3193d": "setSpaceshipPrice(uint16,uint256)", +"d9c397f6": "gmtFund()", +"d9c39fca": "setSilverContractAddress(address)", +"d9c3d3c9": "checkReturn()", +"d9c4870e": "beneficiaryAddress()", +"d9c522ec": "daiRate()", +"d9c52d27": "getDiscountTrancheEnd(uint8)", +"d9c55ce1": "fill()", +"d9c57bcc": "importExchangeSale(uint256,address,uint256)", +"d9c67404": "getMerkleRoot(bytes)", +"d9c682a7": "borrowerReturnFiatPerEthRate()", +"d9c6925e": "AccountIsNotFrozenForReturn(address)", +"d9c693cb": "emergencyLock()", +"d9c7041b": "ownbalance()", +"d9c76d61": "coolHero()", +"d9c779ce": "_buyP3D(uint256)", +"d9c7ddfa": "_updateBurnRate()", +"d9c850f4": "getItemKindCount()", +"d9c88e14": "ownerWithdraw(address,uint256)", +"d9c97699": "__callback(bytes32,string,uint256)", +"d9ca0b7f": "transferRoutingCode(bytes32,address)", +"d9caa3d2": "submit(bytes32)", +"d9caaada": "minPreContribution()", +"d9caed12": "withdraw(address,address,uint256)", +"d9cba1a1": "MulTraToken()", +"d9ccf695": "strayToken()", +"d9cd6046": "BuyTicketSeed()", +"d9cd9273": "Arycoin(address,uint256,uint256,uint256)", +"d9cd98b0": "withdrawDevFees(address)", +"d9ce2451": "setLeaf2(uint256,uint256)", +"d9cea519": "getDealInfo(uint32,uint64,uint64,uint64)", +"d9cfc182": "getHighestPriceAt(uint256)", +"d9cff93a": "last_result(address,address)", +"d9d0b091": "AddMarking(bytes32,bytes32,int256,uint256)", +"d9d14d37": "numOfMiningTimes()", +"d9d1ceaa": "draw(uint256,bytes32[])", +"d9d1d4bb": "getCompte_28()", +"d9d1e0e5": "createBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"d9d1f5d9": "removePendingExplore(uint256,uint256)", +"d9d210b8": "changeHelper(address,bool)", +"d9d2d058": "Splitter()", +"d9d34ce1": "isForkingMarketFinalized()", +"d9d3cc78": "seriesByName()", +"d9d578e5": "airDropSetup(address,uint32,uint256)", +"d9d60b52": "getGameState(address)", +"d9d61655": "getOwnedTokens(address)", +"d9d61a10": "GetUserSafesLength(address)", +"d9d73887": "Diana()", +"d9d770bb": "_triggerPVEStart(uint256)", +"d9d84531": "getRemainingKingdoms()", +"d9d8b2ee": "creationInvestmenting()", +"d9d958ec": "setUint8(uint8,uint8)", +"d9da0142": "cancelEscrow(bytes20)", +"d9da2738": "changeOfficialAddressIfNecessary(address)", +"d9da486a": "initialEcologyAccount(uint8)", +"d9da76de": "DailyMint()", +"d9daa497": "getStageTargetAmount(uint256)", +"d9daae78": "CCH_Seaport_1()", +"d9dac92c": "acceptDiscipleVend(uint256)", +"d9dad80d": "ownerOf(uint256,uint256)", +"d9db1f55": "deprecate(string,string,string)", +"d9db3c73": "revealVoteOnSpecialProposal(bytes32,bool,bytes32)", +"d9db9d89": "globalSupplyAfterPercentageLogic()", +"d9dbd382": "FUTX()", +"d9dc7fcd": "EVM()", +"d9ddafb3": "exchangeTransfer(address,uint256)", +"d9de1e98": "HuuumanStandardToken(uint256,string,uint8,string)", +"d9def89a": "buyShitClones()", +"d9df2878": "CryptoCollectorContract()", +"d9e0dc59": "getLocation(address)", +"d9e19a91": "setAccountValue(uint16,uint8,uint8,int64)", +"d9e34038": "ODCToken()", +"d9e39e50": "getTransferDetails(address)", +"d9e4fa6a": "setUsdPerKEther(uint256)", +"d9e50186": "setWeiMin(uint256)", +"d9e55f7a": "getAllowedToMine(address)", +"d9e5a50b": "getSnakemasterReq()", +"d9e68b44": "left100(uint256)", +"d9e73095": "MiracleToken()", +"d9e79c72": "admin_dividend(uint256)", +"d9e7c8ca": "createRace(uint256,uint256,uint256)", +"d9e7ee1c": "new_game(uint256,uint256)", +"d9e8843f": "payRent(uint256)", +"d9e947f3": "kickOutMember(address)", +"d9e95a98": "addVoter(address,string)", +"d9e9c745": "decreaseShardBalance(address,uint256)", +"d9ea1b47": "Raffle_Finished()", +"d9ea372b": "myfichain()", +"d9ea9bfa": "createBtcAddressHex(uint256,int256,uint256,int256)", +"d9eac337": "MegaWattContract()", +"d9ead22b": "accountForClose(uint256)", +"d9eb547b": "extractCLNfromMarketMaker(address,uint256)", +"d9eb5947": "flatFee()", +"d9ec0508": "testThrowTransferNotEnabled()", +"d9ec3018": "submitSpendLimit(uint256)", +"d9ecad7b": "breed(uint256,uint256)", +"d9ece4c7": "changeMaximumContributionForPrivatePhase(uint256)", +"d9ee369a": "withdrawDifferentToken(address,bool)", +"d9ef1ee3": "insert(string,uint256)", +"d9ef58a5": "thisAddr()", +"d9f00023": "SBGToken()", +"d9f01878": "centralMinter()", +"d9f02210": "StarbaseMarketingCampaign()", +"d9f0354d": "buildMilestone(uint256,uint256,uint256)", +"d9f035aa": "cardList(uint256)", +"d9f0cf04": "createAuctionWhenPaused(address,address,uint256,uint256,uint256,uint256)", +"d9f165dc": "updateFactory(address)", +"d9f1a1a9": "PublicBallot(address,string,string)", +"d9f2ac8a": "decr()", +"d9f300ce": "referedRateBonus()", +"d9f38388": "RequirementChanged(uint256,bytes32)", +"d9f3afff": "addCurrency(string,uint8)", +"d9f47e41": "totalDevelopmentFundBalance()", +"d9f4ecbb": "lastProfit()", +"d9f4f56e": "_ethRefund()", +"d9f58923": "GlobalConstraintRegistrar()", +"d9f69e4e": "addUserWhoBuy(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d9f754a3": "LogSetWithdrawLimit(address,uint256)", +"d9f7e285": "returnExcedent(uint256,address)", +"d9f7eacf": "removeGains(address,uint256)", +"d9f80c65": "setMinInvesment(uint256)", +"d9f81b83": "timeWithoutUpdate()", +"d9f861b1": "getFreelancerInvoices(address,uint8)", +"d9f884bf": "BIONICCOIN()", +"d9f8a3c3": "lastTransactionReceivedInWei()", +"d9f8a4e2": "calcCurrentTokenPrice()", +"d9fa1e78": "PractiParlezCrowdSale()", +"d9fa8c54": "unClaimedToken(address)", +"d9fa9335": "houseKeeping()", +"d9facbe0": "isObserver(address)", +"d9facc80": "MerchantWallet(address,string,address)", +"d9fb6963": "stateSetLocked()", +"d9fb7413": "lockTimeLeft()", +"d9fc4b61": "safeTransferFrom(address,address,address,uint256)", +"d9fc8026": "getPubKeyArr(bytes32,uint256,uint256[])", +"d9fca769": "setWinner(address)", +"d9fcb31f": "comm_channel()", +"d9fdd155": "isLegendaryPart(uint256,uint256)", +"d9fe0137": "_transfer_byProxy(address,address,uint256,bytes)", +"d9fe1045": "MidasDiscountToken()", +"d9fe60f3": "DTHPool(address,address,uint256,string,string,string)", +"d9feb8ce": "loserTwo()", +"d9feeeb6": "fillMyOrder(uint256)", +"d9fefb93": "getData_34()", +"d9fefbf8": "addData(uint256,uint256,bytes32)", +"d9fefd6c": "bountyTokenTimelock()", +"d9ff4ad8": "burnFrom(address,uint256,bytes)", +"d9ff8e9d": "setWalletOut2(address)", +"d9ff8ffc": "BetAnB()", +"d9ff94b7": "setRegionPurchasedAt(uint256,uint256)", +"da00586b": "houseKeep()", +"da00a1f4": "setGetFree(bool)", +"da0225db": "belongsTo(address,uint256)", +"da0239a6": "remainingSupply()", +"da025051": "freelancePlayer(address)", +"da02b6cf": "computeWinner(address,uint256,uint256,address,uint256,uint256,uint256)", +"da02f5f3": "updateIsVerified(address,bool)", +"da0321cd": "addresses()", +"da037fd1": "confirmPerfectReception()", +"da040c0f": "purchasingAllowed()", +"da04197e": "Duration(uint256)", +"da04f82b": "addUserManager(address)", +"da05277e": "ImpactRegistry(address)", +"da05f535": "RefundCrowdsaleFactory(address)", +"da062d68": "ExCToken11()", +"da06d96c": "_tokensToEthereum(uint256)", +"da074874": "getRemainingEthAvailable()", +"da0774ad": "getCallFeeScalar(uint256,uint256)", +"da081204": "littAdmins()", +"da08c5a3": "setTransferWhitelist(address)", +"da09118e": "addTokenGrant(address,uint256,uint128,uint16,uint16)", +"da09c72c": "devAddr()", +"da0a599e": "EjariRules()", +"da0a5fe0": "TestToken(string,string,uint256)", +"da0b0682": "beginGame()", +"da0b0c36": "getNumDesignatedReportNoShows()", +"da0bba7b": "changeOraclizeConfig(bytes32)", +"da0bba90": "sendPrize(address[],uint256[],uint64)", +"da0d76f8": "betContractDOWN()", +"da0e1451": "distributionForRefers(uint256,uint256,uint256)", +"da0ef68b": "ICO_END_DATE()", +"da0f039d": "MaxTotalSupply()", +"da0f3877": "postFreezeDevCATDestination()", +"da0f57d0": "confirmWithdraw(uint256)", +"da0fab61": "BlockContract()", +"da1070da": "newEscrow(address,address,bytes32)", +"da11f709": "bank1()", +"da122e02": "Fishbank(address,address,address)", +"da128527": "finalizeUpdateState()", +"da12e9ef": "TokenHolder(address,uint256)", +"da13610c": "rewarding(address)", +"da1441cd": "KudosBank(uint256)", +"da147d32": "tradeTracker()", +"da14c723": "setCustomBuyer(address,uint256)", +"da14e3b2": "transferAndFreezeTokens(address,uint256)", +"da16241b": "Platopay()", +"da17835f": "FermionToken()", +"da178cb0": "plot()", +"da17c21b": "BlockchainMoneyEngine(uint256,string,string)", +"da18bcef": "getMin(uint256[])", +"da1919b3": "mintFor(address,uint256)", +"da1a13ce": "fitsTokensForSaleCap(uint256)", +"da1aaa59": "_withdraw(address)", +"da1ad97f": "clearHpbNodeCache()", +"da1b2d9d": "comDrop(uint256,uint256,uint256,uint256)", +"da1b4359": "uploadFinish()", +"da1b620b": "getTarget(string)", +"da1b95a6": "DAO(address,address,bytes32,bytes32,address,address,address)", +"da1bd8ab": "setupTrustedAccounts()", +"da1d7711": "createHive()", +"da1eb542": "ceil1(int256,int256)", +"da1edb38": "shareLastTen(uint256,uint256)", +"da1ee417": "MoveChain(uint256,string,uint8,string)", +"da1f149c": "SECURRO()", +"da1f6433": "AtomUX()", +"da1fe7d5": "configureDomain(string,uint256,uint256)", +"da1ff555": "cliffTeamTokensRelease()", +"da2216ef": "getContractCreatedTimeById(bytes32)", +"da2242b8": "createActivity(uint256,string,uint256,uint256)", +"da228f9c": "bountyTokensCreated()", +"da22ec07": "storing()", +"da233128": "getCrowdsaleContract()", +"da23c057": "editAd(uint256,string,string,string,string,bool,bytes32,bytes2,uint8,bytes4)", +"da23d18b": "updateOnSaleSupply(uint256)", +"da2424ae": "setPI_edit_22(string)", +"da24b08c": "UsdPerKEtherUpdated(uint256,uint256)", +"da257cb4": "setMinRevenue(uint256)", +"da25c0cd": "ThisExternalAssembly()", +"da25de3c": "remainingBalance()", +"da262f58": "setTokenInfo(string,string)", +"da26358a": "unregisterVendor()", +"da26663a": "getPrice(uint32)", +"da26c241": "approvePauseChange(bool)", +"da26d0b9": "addAuction(uint256,address,uint128,uint128,uint64,uint64)", +"da26ebc2": "getPayeeCount()", +"da26f7f6": "CIFR()", +"da274488": "getMotd()", +"da27ab1f": "getFreeShitClone()", +"da27cb0f": "Lottery(string,uint256,uint256)", +"da280fe5": "resetHasAutoVote()", +"da284dcc": "expirationTime()", +"da28c81a": "updateKYClist(address[])", +"da293136": "TestCrowdsaleController(uint256,address,uint256)", +"da2a97d8": "GetCurrentNumbers()", +"da2aa615": "addRandomFight2Death(address,uint256)", +"da2b2589": "GenExtWeightList(uint8)", +"da2b7416": "testBitsAndFailIndexOOB()", +"da2bbfc7": "setTokenURIBase(string)", +"da2c0460": "gameGiftOnceAmount()", +"da2d7b70": "userSubscriptionsLength(address)", +"da2d8720": "payJackpot2()", +"da2d8c88": "updateRestrictedStockSendTime(address,uint256)", +"da2dcea6": "returnTokenMulti(address[])", +"da302fc3": "lighthouseLib()", +"da306946": "ShareDATA(string)", +"da30d418": "cancelDist()", +"da311588": "getCoin(uint256)", +"da31cf2a": "getStageEtherRaised()", +"da323c94": "getSketch(uint256)", +"da328377": "ownerSetStakeCommence(uint256)", +"da333ca6": "payOut(uint256)", +"da337465": "getPenguinsByOwner(address)", +"da34b7f3": "_transfer(uint256)", +"da35762a": "getPI_edit_16()", +"da359dc8": "setBytes(bytes)", +"da35a26f": "initialize(uint256,address)", +"da35d581": "DaoHubAccount()", +"da3678df": "transferTokenByContract(uint256,address)", +"da36d217": "lockupTok(address,uint256)", +"da36fd03": "FundingAccepted(address,uint256,uint256)", +"da374157": "changePopulous(address)", +"da38abb3": "randomGen(address)", +"da38daba": "getLeftCoordinate(bytes1)", +"da38f805": "TaskToken()", +"da38fe31": "ConsentDirectory()", +"da392f06": "availableNow()", +"da397985": "CBOToken()", +"da3986e4": "getTAOIds(uint256,uint256)", +"da3b6b35": "totalHashRate()", +"da3c300d": "currentFee()", +"da3cbf96": "getShipClass(uint32)", +"da3cd674": "GetDChainDOTHash(bytes32,uint8)", +"da3d18e8": "PlusUltra()", +"da3d23a9": "GetEnd()", +"da3d454c": "borrowAllowed(address,address,uint256)", +"da3d7d7f": "reconfigure(uint256,uint256)", +"da3e0fd1": "getAuctionsById(uint32[])", +"da3e3397": "approveToken(address,address,uint256)", +"da3f8c38": "Amethycoin()", +"da3fb6f7": "mainSaleRateP2()", +"da4077b9": "finishHim()", +"da421df5": "pageFiles(uint256,uint256)", +"da42eea5": "setRedeemWallet(address)", +"da440a1d": "wallcoinToken()", +"da446958": "totalTokensCap()", +"da4493f6": "activationTime()", +"da44d275": "viewWinners()", +"da44e034": "maximumTokensForForth()", +"da46098c": "setAllowance(address,address,uint256)", +"da465d3f": "saleSharesAvail()", +"da46a73c": "setGameOperator(address)", +"da46e48e": "setGLA(uint32)", +"da46e6c4": "transferFeeIncurred(uint256)", +"da46eda1": "setBlockDotDifficulty(uint256)", +"da46fe62": "ethereumToTokens(uint256,uint256)", +"da4751c0": "setMinPrivateSaleCompanyBuy(uint256)", +"da4778c2": "delayHours()", +"da4793ac": "setMaxSecurityGuardDelay(uint256)", +"da47d856": "getService(bytes32)", +"da481ce0": "DemeterCrowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"da489997": "addAsset(address,address)", +"da49613c": "ownedfunction()", +"da498084": "addTokenHolder(address)", +"da499f6f": "SupportAddOn(uint256,address,uint256)", +"da49cdb5": "getLostTokens(address)", +"da4a22dc": "MXN_Omnidollar()", +"da4a76c0": "becomeGameSponsor()", +"da4a77aa": "isRatifier(address)", +"da4a8ef6": "SettingsSet(address,uint256,uint256)", +"da4b5e29": "contains()", +"da4d0756": "vehicleExist(address,string)", +"da4d2615": "Gomblot()", +"da4f2899": "isUserInGroup(bytes32,address)", +"da5136b8": "setWhitelistAddress(address,address)", +"da5140fc": "lockTokensForAddress(address,uint256,uint256)", +"da5196e0": "getmemreqdetails(uint256,uint256)", +"da51bbd9": "luckyPendingIndex()", +"da51f168": "GetDayReward()", +"da5269a6": "getListOfConsents()", +"da5341a8": "issueMaxNomins()", +"da53462c": "initialize(address,address,uint256,uint256,uint256,uint256,address,address,uint256)", +"da535758": "lockUp(address,uint256,uint256,uint256)", +"da547dcf": "preIcoHardcap()", +"da548e29": "priceExpirationBlockNumber()", +"da5520cd": "HeroNodeToken()", +"da57736f": "stageThree()", +"da5950a4": "tokenBought(uint256,uint256)", +"da5a9366": "getAppBase(bytes32)", +"da5abf5d": "payment_returned(uint256)", +"da5b1f5c": "buy50()", +"da5c0a7c": "testDisown()", +"da5c5b55": "noVotes(uint256,address)", +"da5c7ec2": "WNCT()", +"da5da3b9": "initializeTokenSaleWithToken(uint256,uint256,uint256,uint256,address,address)", +"da5db748": "firstRelease()", +"da5e4489": "resetListing(string)", +"da5e9c62": "whitelistDayMaxStake(uint8)", +"da5ea40c": "computeMerkle(bytes32,uint256,bytes32[])", +"da5f3ac1": "GAME_END()", +"da5f838d": "weisRaised()", +"da5fa890": "_addManager(address)", +"da60278a": "receivable(address)", +"da60d7e8": "BOARD_2()", +"da62a246": "rewardsTokenSupply()", +"da640668": "checkNameOccupied(bytes32)", +"da6443ad": "addAddressToWhitelist(address,address)", +"da649c63": "startSalePhase(uint256,uint256)", +"da652b4a": "summBilborough()", +"da6585ff": "calcSrcQty(uint256,uint256,uint256,uint256)", +"da658f22": "birthPerHundred()", +"da66cb3e": "secondRoundICOTokensLimit()", +"da67ac42": "MIPCoinToken()", +"da682aeb": "onApprove(address,address,uint256)", +"da6838ff": "getIfBonus()", +"da683c63": "Token(string,bytes32)", +"da68d47d": "licenseNFT()", +"da69f1c8": "arrayTest(address[])", +"da6aabbe": "set_sale_address(address,string)", +"da6b31b9": "testErrorTransferToNullAuthority()", +"da6babca": "setNextPrice(uint256,uint256)", +"da6c5832": "CROSAIR_MAX_PRICE()", +"da6d8ca4": "LotteryRecharge()", +"da6dfea7": "setRate(address[],address[],uint256[],uint256[],bool)", +"da6e11a5": "approveFactoryContract(address,bool)", +"da6efb01": "winAddressOf()", +"da6f76b5": "updateEpisode(string,uint256)", +"da70db17": "HireGoToken()", +"da710422": "getTokenAmountForWei(uint256)", +"da7150b9": "Qwidex(address,address,address,uint256,uint256,uint256)", +"da721672": "checkFloatingSupply(address,uint256,bool,uint256)", +"da72c1e8": "adminTransfer(address,address,uint256)", +"da7360df": "paymentInternal(bytes32,uint256[],uint256)", +"da73630e": "addTeam(address,string)", +"da737613": "placeBet(bytes22)", +"da73f0f9": "conversion_rate()", +"da748b10": "pausedUntil()", +"da74c5a1": "citiesSold()", +"da74ce27": "tokenCapForFourthMainStage()", +"da7545d0": "titleCount()", +"da756ba7": "BEAT()", +"da75b901": "deployStepTwo()", +"da76d5cd": "withdrawBalance(uint256)", +"da7855a3": "reclaimLocalNodeFee()", +"da78d655": "owner1OK()", +"da7911e1": "getOrderListLengthFactor()", +"da79a9fc": "setTxAsSpent(bytes32,bytes32,uint256)", +"da7bd3e9": "getVestingScheduleEntry(address,uint256)", +"da7c0ad4": "SaleScheduled(uint256,uint256)", +"da7c6a42": "registrations(bytes32)", +"da7ccce9": "test_oneValidEqInt1()", +"da7d0082": "isCertification(address,bytes32)", +"da7d249f": "UnsetBlockForSale(uint256,uint256,address)", +"da7d57f9": "startRareRaffle(uint256,uint256)", +"da7d7827": "getSubscriptions(address,string)", +"da7d86fd": "softDelete(bytes32)", +"da7e019e": "AlterContactName(address,bytes32)", +"da7e6fdf": "TokenDrop(address[],uint256[])", +"da7eadd4": "totalAffiliateDDT()", +"da7fc24f": "setBackend(address)", +"da7fc7c5": "payoutCompleted()", +"da7fd1f0": "gemmyMusicSupply()", +"da7ffbd4": "generateRandomSpell(uint8[14],uint32)", +"da801f20": "approveAndCall(address,uint256,address,address,bytes32,uint256,uint256,uint256)", +"da81b09b": "lastPeriodStarDate()", +"da8267e3": "hasDirectorAccess(address)", +"da82a035": "sweepCommission()", +"da8300d2": "initialEnemyCombination()", +"da832237": "SMALLEST_TOKEN()", +"da834ac4": "getPayoutNumerator(uint256)", +"da83a649": "onlyAdmin(bool)", +"da850601": "MKYCToken()", +"da8567cb": "AldiyoCoin()", +"da857f2c": "reduceLastWeekStake(address,uint256)", +"da85868e": "fifthExchangeRate()", +"da883e6a": "addItems(uint256[],uint256[],address)", +"da88a831": "updateBaseTokensPerEther(uint256)", +"da89970b": "hasntStarted()", +"da8a01a5": "CROWD_WEEK2_BONUS()", +"da8a46e0": "listUserRecastsFrom(address,bytes32,uint256,bool)", +"da8ad6b6": "getTAO(address)", +"da8c229e": "controllers(address)", +"da8d2f35": "ChannelDeleted(address,address)", +"da8e2890": "payNihilum()", +"da8e44d8": "registerColor(string,uint256)", +"da8ee786": "transferFromContract(uint256)", +"da8f410a": "ApprovedToken()", +"da8f54d8": "testVali(address,uint256)", +"da8f9fe5": "DetailedERC20(uint256,string,string,uint8)", +"da8fb7cd": "ASSToken(uint256,string,uint8,string)", +"da8fbf2a": "pauseMinting()", +"da909b09": "setExchanger(address)", +"da91254c": "whoAmI()", +"da918f76": "placeBlock(uint16,uint16)", +"da9287d1": "acceptHybridization(uint256,uint256)", +"da9332bb": "addCompanyURL(string,string)", +"da93d0d1": "setPrice()", +"da93dfcf": "give(address,bytes32,address)", +"da93f938": "maxAppeals()", +"da942ab3": "issueTokensExternal(address,uint256)", +"da94e770": "YBVToken()", +"da9534b4": "Stex()", +"da9590cb": "addPublicSaleWallet(address)", +"da95ebf7": "requestWithdrawal(address,uint256)", +"da96bbcd": "publicEventTokens()", +"da977038": "volumeBasedBonus(uint256)", +"da979b8d": "SpecialRate(address,address,uint256,uint256)", +"da98655e": "getNullAddress()", +"da9893dd": "Resource(address,string,string,string)", +"da9ab565": "changeId(string)", +"da9ad094": "changeParameter(uint32,uint32)", +"da9b3cb4": "getGameBid(uint256,uint256)", +"da9b90c4": "TOKEN_FIRST_DISCOUNT_MULTIPLIER()", +"da9bca21": "numActiveMembers()", +"da9bdbfc": "CKCoin()", +"da9bf54c": "icoPhaseDiscountPercentage4()", +"da9c2697": "GaillardTokenSale()", +"da9c273d": "cancelInvoice(uint256)", +"da9c6a46": "getReplyCount(uint256)", +"da9c87fa": "changePayRate(uint256)", +"da9d0f6b": "withdrawCustom(uint256,address)", +"da9d56d7": "getBidIds()", +"da9d95bc": "commonWithdraw(address,uint256)", +"da9da572": "tryAirdrop()", +"da9dd8bf": "isAddressVerified(address)", +"da9e13aa": "getProviderSales(address)", +"da9eadac": "remit(address,uint256,bytes)", +"da9eeaeb": "PetroNetworkToken()", +"da9f40b8": "setAssetFileLink(string)", +"da9f4875": "freezeTokens()", +"da9f6918": "MultiSigWallet(address[],uint256,uint256)", +"da9f7550": "requestRandom()", +"da9f84a6": "rerollValue(uint256)", +"daa08539": "mintShares(address,uint64)", +"daa0ab0e": "majorityForTeam()", +"daa0f79f": "LEGAL_EXPENSES_ADDR_1()", +"daa147f3": "redeemLevAndFeeByStaker()", +"daa170ca": "difficultyBalance()", +"daa17f49": "marketplaceAddress()", +"daa1d7d4": "maximumPercentageOfDaysSupply()", +"daa21e0e": "testBitSetSuccess()", +"daa232ac": "_bonusRatio1()", +"daa283c8": "__callback(bytes,string)", +"daa3a163": "isUpgradeable()", +"daa44bf8": "getInStreamOf(address)", +"daa45281": "_addTo(address,uint256)", +"daa4cf88": "getCurrentStageIndex()", +"daa50ee0": "DSTMultisig()", +"daa5f48b": "findbit(uint256)", +"daa69c9e": "killDividentContract(uint256)", +"daa6f417": "howMuchTokensAvailableForExchangeFromStock()", +"daa7370f": "onFailure()", +"daa86216": "getAllowedContractsCount()", +"daa89fef": "issueNewHeldCoins(address,uint256)", +"daa94ab1": "frozenAccountProfit(address)", +"daa9604d": "byPonzi(address)", +"daaa50c9": "transferWithCustomReservingNet(address,uint256,uint256)", +"daaa6b5d": "setReleasedAddress(address,address)", +"daaadd8e": "arr(address,address)", +"daab88a6": "createEngine(uint256)", +"daac1f64": "reqfee()", +"daac518a": "playerTokenAddress()", +"daacb24f": "right42(uint256)", +"daad98f4": "socibit()", +"daae717c": "setIndividualMinCap(uint256)", +"daae7e98": "setCompte_20(string)", +"daaf3d2e": "attack(uint256,uint256,address)", +"daafe0a5": "setPrice(uint32)", +"dab0537b": "change_p2(uint256)", +"dab09999": "returnMyEthBalance(address)", +"dab122de": "dInit(address,address,bool)", +"dab12beb": "SmartSweep()", +"dab23f7c": "__callback(bytes32)", +"dab306b1": "votingFee()", +"dab30ccc": "addBonusPeriod(uint64,uint64,uint256,uint8,uint256,uint8)", +"dab3ed63": "withdrawMyInvestmentsBack()", +"dab41935": "TootyrToken()", +"dab43e6d": "PreSale3DAPP(address)", +"dab46553": "removeOracle()", +"dab4c65e": "totalDowSold()", +"dab4cb87": "gameValue()", +"dab4d1c1": "PixelPrice(uint16,uint16,address,uint256)", +"dab5cec2": "setExtraTokensPercent(uint256)", +"dab5f340": "setRoot(bytes32)", +"dab5fdc4": "DOWN_totalBets()", +"dab680dc": "getGlobalInfo()", +"dab78820": "ERC20Rescue(address,uint256)", +"dab80075": "Signature(address,string,string)", +"dab80d6f": "addSponsor(address)", +"dab8194f": "enableGame(address)", +"dab8263a": "weiPerToken()", +"dab83b9a": "selltokens0()", +"dab88ad7": "VI6()", +"dab8a18b": "specialTransfer(address,uint256,uint256)", +"dab8c01a": "Zorro01Token()", +"dab8ef38": "addRooms(string,uint256)", +"dab8fa73": "setPackage(string,uint64[3])", +"dab91e87": "linkToMasterWallet(address)", +"dab93a93": "PolarisDEX(address,address,address,uint256,uint256,uint256)", +"dab951ba": "arrayFunc(int256[10])", +"dab9938e": "setIcoBeginDate(uint256)", +"dab9afa4": "Test12Address()", +"dabb0531": "getCharacter(uint256)", +"dabb37d4": "Lakshmi(uint256,string,string)", +"dabb624b": "rate_ETHUSD()", +"dabb6360": "percentage_of_three()", +"dabb6778": "vestingTeamWallet()", +"dabbbd0b": "sharesChainToken()", +"dabbd2bd": "removePlayerFromServer(uint256)", +"dabbd670": "team2Token()", +"dabc0c37": "isPassOwner(bytes32,address)", +"dabc706e": "getProposalCost()", +"dabd2719": "setDiscount(uint256)", +"dabd2eb2": "changePrice(bytes32,uint256)", +"dabd5d65": "addDays(uint256)", +"dabdc1f2": "ChangeActiveDigger(address)", +"dabecd8d": "_newBid(bytes32)", +"dabed8be": "Update_UserWinningHistory_Data(uint32,uint32)", +"dabf7dc8": "PayoutDividendEarly(uint256,bool)", +"dabf7ec4": "helper(uint256)", +"dabf8246": "EventAuction(address,uint256,uint256,uint256,uint256,uint256)", +"dac00420": "maxHalvings()", +"dac05adc": "test_1_ensureVoteWorks_increaseBlocksBy100()", +"dac1182e": "signBBODocument(bytes,bytes)", +"dac17430": "lastVoteTime()", +"dac194f1": "setAutoInvest()", +"dac1e5e5": "_computePVPReward(uint256,uint256)", +"dac32ba9": "modifyPolicyTo(address,uint8,uint8)", +"dac34674": "setNextGameSettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"dac3ab88": "getCurrencyHash(uint256)", +"dac3f6d2": "queryFusionData_ext(uint256)", +"dac47a71": "SetGiftTime(uint256)", +"dac4fcdb": "getNewCustomPrice(address,address)", +"dac54b8a": "returnHoldings(address,uint256,uint256)", +"dac54daa": "OPLTest()", +"dac5b8ae": "TokenSale(address,uint256,uint256,uint256)", +"dac645bd": "getBUI(bytes32,uint256)", +"dac649c8": "NEWC()", +"dac6af5e": "SWIFTH(address,address[],address)", +"dac796bb": "getInvestorBalance(address,address)", +"dac7c858": "TOKEN_TRANSFER_PROXY_ADDR()", +"dac84ee4": "moveToReceiver(address,address,uint256)", +"dac8df25": "DEVELOPER_CUT()", +"dac90466": "_error(bytes32)", +"dac9555d": "allocate_slot(address)", +"dac9882a": "offChainAddresesValidCount()", +"daca5ce0": "bonusTokensPercent()", +"dacaeb07": "pledge(bool,uint256)", +"dacc8e11": "getTPrice(uint256)", +"dacd06fc": "KongQiCoin()", +"dacd4472": "PixoArenaFounderToken()", +"dacdbb93": "removeAccountSearch(address)", +"dace4557": "setUnlockTime(uint256)", +"dacef51b": "payincount()", +"dacf18c7": "getDeathCoin()", +"dacf9483": "getUIntValueConverted(bytes32,uint8,uint256)", +"dacfa06f": "manualDraw()", +"dad0128d": "calculateAdjustedFiguresForBattle(address[3],address[3])", +"dad03cb0": "returnError()", +"dad13822": "setMonsterClassSiteSet(uint256,uint256)", +"dad22781": "AdvancedArtificialIntelligenceSafetyDefense()", +"dad24541": "PresaleToken()", +"dad2771d": "signReceipt(uint256,int256)", +"dad30cfc": "test_transfer_to_contract_with_fallback()", +"dad38294": "PowTokenHashedBase()", +"dad39151": "multiApprove(address,address[],uint256[])", +"dad52c72": "_itemCancelMarkets(uint256)", +"dad59f35": "raisedEthers()", +"dad5c2e3": "validAstroCount()", +"dad5c3ee": "chainyShortLink(uint256,string)", +"dad5fda3": "vester()", +"dad6b482": "userHasPositveBalance(address)", +"dad72332": "claimUnsold()", +"dad788d9": "isJobExpired(uint256)", +"dad7ad9e": "aix()", +"dad7c095": "transferWithAllowance(address,address,address,uint256)", +"dad7e4d2": "Aaa()", +"dad86b45": "teamETHUnlock3()", +"dad90035": "withdrawalRequests()", +"dad901be": "callWithdraw()", +"dad950f4": "InvestorPart()", +"dad98b52": "MonsterBitToken()", +"dad99119": "ddf()", +"dad99989": "burnCoins(address)", +"dad9a423": "setDuesIn(uint256)", +"dada85c3": "setAirdropOn(uint8)", +"dadad8fe": "addNewStreetName(string)", +"dadb20be": "ChangeTokenName(address)", +"dadc89eb": "setPreIcoDates(uint256,uint256)", +"dadcb23a": "getRevenueFactor(uint256)", +"dadcb460": "bumpPointer()", +"dadce8b0": "setExpiration(uint64)", +"dadd9e8e": "withdraw_some_amount(address,uint256)", +"daddff33": "claimController()", +"daded88e": "addMessageRequest(address,address[],string)", +"dae072d9": "GameWon(address,uint256)", +"dae1bd84": "AddChip(address,uint32)", +"dae1ddd2": "check_period(address,address)", +"dae1f17a": "getShopOwner(string)", +"dae21454": "toEthereumSignedMessage(string)", +"dae37abc": "cancelParticipation()", +"dae37fac": "spendAvailable()", +"dae392ee": "softFundingGoal()", +"dae3f7e2": "Gralaxious()", +"dae595e5": "getAuctionStart(address,address)", +"dae611c4": "lockUnlockMatchGPForBetting(uint256,bool)", +"dae6f081": "setScrapMinStartPrice(uint256)", +"dae79483": "getMemsize()", +"dae7e05d": "_bonusAll(uint256)", +"dae8865c": "ETHERCToken()", +"dae89f18": "coordinatorAccountIndex(uint256)", +"dae8af77": "getFeeWindowId(uint256)", +"dae9c31b": "ProofPresale()", +"dae9e379": "getFundBalance()", +"daea85c5": "approve(address)", +"daeab905": "issueReceipts(address,uint256)", +"daeb1c98": "PlusToken()", +"daeb860d": "versionAddresses(bytes32,bytes32)", +"daec4582": "AuctionEnded(address,uint256)", +"daec75f3": "buyXwithdraw(bytes32,uint256)", +"daec8128": "mintTokensForFounders()", +"daecc910": "getCKOwner(uint256)", +"daed6726": "ETHCollected()", +"daee4dd6": "readCheck(address,uint256)", +"daee9e35": "level2Bonus()", +"daeed3a6": "rateFinalStage2()", +"daef0e92": "stopCurrentGame(uint256)", +"daef4df8": "addCar(string,address,uint256,uint256,uint256)", +"daef569f": "insChainTokenLedger()", +"daf017a9": "GetRocket(uint32)", +"daf059c6": "createGuess(uint16,uint64,uint64,uint16)", +"daf13a47": "reserveLockup()", +"daf161e2": "getThirdAdmin()", +"daf1af19": "Current_balance()", +"daf1db09": "readyForFinish()", +"daf22f4d": "identify(bytes32)", +"daf32370": "getPurchaseAddress(uint256)", +"daf47ba3": "incGenLabFace(uint256)", +"daf488b1": "setReferrerPercent(uint256)", +"daf49451": "BINGToken()", +"daf4f66e": "isLimitEnabled()", +"daf64aa5": "getCompanyDetails(uint256)", +"daf69093": "BLOCKCHAIN_DEPOSIT_BETA_1M()", +"daf6ca30": "saleContract()", +"daf6e5ae": "DeepBrain()", +"daf760d0": "getData_6()", +"daf7f103": "_error(uint256)", +"daf8f438": "startRedeeming()", +"daf9812f": "updateBincentiveErrand(address)", +"daf9a535": "getData_20()", +"dafa1d2d": "burn(string)", +"dafa55a1": "creatureIndexToOwner(uint256)", +"dafae408": "checkThreshold(uint256)", +"dafaf94a": "getOracle(bytes32)", +"dafba12f": "setMAGContractAddress(address)", +"dafc5608": "TransferFeeRateConfirmed(uint256,address,uint256)", +"dafc64c4": "ERC223MintableTokenFactory(address)", +"dafd54a6": "ExaEUR()", +"dafd70c9": "RESERVED_UTILITY_GROUP()", +"dafea207": "smax256(int256,int256)", +"daff0093": "setReference(address,address,bytes32)", +"db00345d": "BookToken()", +"db006a75": "redeem(uint256)", +"db00758a": "getSGNTokenManager()", +"db00b848": "_performGeneric(bytes,address)", +"db00d1a9": "_preValidateCancellation()", +"db0251e9": "contributeMsgValue()", +"db035918": "deployForeignBridge(address)", +"db041965": "fightBetaMonster()", +"db0436c2": "RUNEToken()", +"db04a0ee": "getOrganizerActivationStatus(uint256)", +"db04aef4": "getHoldersLength()", +"db051653": "setEtherFeePercent(uint256)", +"db054134": "mintForReportingParticipant(uint256)", +"db059dfb": "createSsp(address,uint256,string)", +"db05ccfc": "setValue(address,uint256,uint256,uint256)", +"db060e1a": "RESERVED_TOKENS_FOR_FINANCIAL_INSTITUTION()", +"db068e0e": "setExchangeRate(uint256)", +"db06f0c2": "doPresaleMinting(address,uint256,uint256)", +"db078f08": "toggleKey(address,bool)", +"db0827e9": "ashcashToken()", +"db0834cf": "lockedAllocation()", +"db08444a": "toUint(int256,string)", +"db087ad5": "getCurrentPricePerWei()", +"db08ccec": "enjinTeamAddress()", +"db0a087c": "getTypeName()", +"db0aa668": "Bittwatt()", +"db0ad29c": "SocialMediaMarketToken(uint256)", +"db0c154a": "hitCharacter(uint16,uint16,uint8)", +"db0c9a02": "marketSell(uint256)", +"db0d5175": "getTransfer(address)", +"db0d7ce5": "LotteryRoundCreated(address,string)", +"db0db014": "dividendsForAmountAndTime(uint256,uint256)", +"db0dd71e": "addAbility(string,bool,uint8,uint8,uint8,uint256,uint256)", +"db0e127a": "openDoor()", +"db0e16f1": "emergencyERC20Drain(address,uint256)", +"db0ec968": "transfer(address,uint16[])", +"db0edd08": "PubKeyHashAdded(bytes20,uint8)", +"db0fb107": "updateSafeSender(address)", +"db107371": "DecentrEx(address,address,address,uint256,uint256,uint256)", +"db11040f": "LogRegError(address,string)", +"db112977": "Project_Info(uint256)", +"db11ead1": "markContribution()", +"db1227da": "initGameReferred(address,uint8)", +"db122ad4": "committeeJoinVotes(address)", +"db123b1a": "ZRX_ASSET_DATA()", +"db12630a": "fundariaCap()", +"db12999b": "airdropTokens(address,address[],bool)", +"db1366bf": "buyExchangeRate()", +"db136b1e": "createAsset(address,uint256)", +"db15520d": "TPTContributors()", +"db15b72d": "getDInfo(bytes32)", +"db165a76": "createLand(address,uint256)", +"db16d0fe": "optionExist(uint256,uint256)", +"db171211": "returnToSender()", +"db171754": "vestedAddress()", +"db180b2b": "LOCKAMOUNT2()", +"db18c972": "play4(address,uint256)", +"db18f962": "updateSplitandSend()", +"db192761": "Clockpay()", +"db1a71ae": "trackable_likes(address)", +"db1b569f": "previousSender()", +"db1bdd1d": "TheTokenG()", +"db1c45f9": "getAllGames()", +"db1c53e2": "isTransferedUser(address)", +"db1d0fd5": "alpha()", +"db1d68b5": "countryWinnerID()", +"db1eeb51": "MizeCoin()", +"db1f6689": "authorContentByIndex(uint256)", +"db201648": "AppicsFund()", +"db21fc9c": "gettimeback()", +"db22032f": "rentalTimeRemaining()", +"db2307b6": "changeRecvEthStatus(bool)", +"db230b52": "viewScore(address)", +"db239951": "cbAddresses(address)", +"db23c5d7": "icoRuleAdd(uint256,uint256,uint256,uint256)", +"db23f7e3": "veztUserArrayIdentifier(address)", +"db246fda": "withdrawalTimeOf(address)", +"db248091": "assignBonus(address,uint256)", +"db25b407": "listActive()", +"db25c328": "joinToProvider(uint256,address)", +"db25e637": "Strikes(address[])", +"db264a36": "s10(bytes1)", +"db27b0bc": "addUInt(uint256,uint256)", +"db27b8dd": "vestingManager()", +"db299492": "IGFC(uint256,string,uint8,string)", +"db29fd6e": "increaseDistrictCoke(uint256,uint256)", +"db29fe12": "addShareholder(address)", +"db2a0cb7": "HumanStandardTokenFactory()", +"db2ac8d8": "WINTOKENADDRESS()", +"db2becb0": "getWalletFeeSignatures()", +"db2c4e2d": "complexScaleObsTest(address)", +"db2d10a5": "PreICOTokenPushed(address,uint256)", +"db2d5841": "batchRelease(address[])", +"db2e21bc": "emergencyWithdraw()", +"db2ea20e": "arrayTestMulti(address[],address[],uint256[])", +"db2ea5c0": "_callERC165SupportsInterface(address,bytes4)", +"db2f1d83": "TalkCrypto()", +"db3119bb": "manageLink(uint256,uint256)", +"db318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", +"db31dd17": "removeAddressFromWhitelist(address,string)", +"db31fb03": "excessEth(address)", +"db3268d8": "getBU(bytes32)", +"db32be98": "refundICO()", +"db330794": "addToVestMap(address,uint256,uint256,uint256,uint256)", +"db3359f0": "makeNonFungible(uint256,address)", +"db35132c": "WithdrawEther(address,uint256)", +"db3543f5": "setFoundation(address)", +"db35a03d": "allowedSpenders()", +"db36c2e5": "destroyOldCoins(address,uint256)", +"db37ceec": "maxEthContribution()", +"db37e42f": "multisetProofType(uint256[],address[])", +"db383bf2": "MyNewToken()", +"db38b877": "testRsplit()", +"db395d2e": "bonusPercentForWeiAmount(uint256)", +"db39a8e8": "getTokenTransferInsByAddress(address,address,uint256)", +"db39ceac": "MyBalance2(address,address)", +"db3b73db": "getPlatformName()", +"db3c1b94": "EtmPerBtc()", +"db3d8421": "getTotalAngelCardSeries()", +"db3e7f4f": "forgeTokens(address,uint256)", +"db3fab84": "Hamza_Ahmed_Coin()", +"db3fd0b8": "usedReserveSupply()", +"db403747": "mintForYear(address,uint256)", +"db40e896": "stopExchange()", +"db40ed24": "WeGoldToken()", +"db412f39": "preSaleDelivery(address,uint256)", +"db420fe3": "serverAddress()", +"db422e0b": "sendTokensAndRefund(address)", +"db447c04": "getPurchaseDetail(uint256,uint256,address)", +"db45479b": "closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)", +"db456f77": "extraReceiverByIndex(uint256)", +"db45a30f": "buyPlanet(uint256)", +"db475044": "SHITcoin()", +"db478d08": "levelTwoBonus()", +"db47b9c9": "isTokenSupported(address,address)", +"db480704": "HCTToken()", +"db4844f3": "setRequestFailed(uint256)", +"db491d49": "ContributionReward()", +"db491de9": "daysToUnfreeze(address,address)", +"db491e80": "getNote(uint256,uint256)", +"db4ad99f": "constructUserIdentity(address,string,uint32,string,string,bytes32,bytes32,uint8)", +"db4bb866": "bitskiToken()", +"db4bd421": "trackable_record(address,uint256)", +"db4c528b": "increasePositionOnBehalfOf(address,bytes32,uint256)", +"db4cacec": "Other()", +"db4ce763": "DTRExpensiveWallet(uint256)", +"db4cf8e6": "getAccountAddress(uint256)", +"db4d1296": "confirmAdminTx(uint256)", +"db4e1df5": "setBTTSToken(address)", +"db4ecbc1": "CONTRACT_ADDRESS()", +"db518db2": "withdrawFor(address,uint256)", +"db51d62b": "OpenTime()", +"db52e130": "saveString(string)", +"db530222": "nextEndTime()", +"db536d2f": "getDefaultKey(address)", +"db5370c3": "EEAcoin(address)", +"db543fdc": "adviserAndBounty()", +"db5517b0": "snapshots(address,uint256)", +"db5549d8": "TokenBurn(address,uint256,bool)", +"db55bd2d": "authoriseNextAction()", +"db56702b": "firstWeekEndTime()", +"db56c29d": "Billionstrader()", +"db56d26c": "ChangeFiliate(address)", +"db57c429": "createPromoGameItem(address,string,uint256,uint256)", +"db5861ed": "ULA(uint256,string,string)", +"db589907": "setCosts(uint256,uint256)", +"db589bbe": "getInternalDrawings(uint256)", +"db59190d": "C1(uint256)", +"db59c052": "getFreeTokens(uint32,bytes32,bytes32,uint8)", +"db5a2778": "adminAddCountry(string)", +"db5ad407": "setData(bytes32,uint256,uint256,uint256,uint8[])", +"db5b4183": "oracleOutcomes(bytes,address)", +"db5b5799": "setClientSupply(address,uint256)", +"db5b7635": "TokenMacroansyPower()", +"db5c92a7": "getTokensInUSD(uint256)", +"db5c9442": "TRIAL()", +"db5cf9de": "getSpaceshipProductClassByModel(uint16)", +"db5d855b": "getReceiptId(address,address,uint256)", +"db5df447": "redemptionPriceCalculate(uint256)", +"db5eef61": "PredictionMarket()", +"db5f2f31": "calcExchangeRate()", +"db5f5d7c": "usedAPI()", +"db606931": "pointRootNode(address)", +"db618c08": "TestAuditor()", +"db623bd5": "ErrorSendingETH(address,uint256)", +"db624887": "W()", +"db62df0e": "likeTrack(address,bytes32)", +"db6380ec": "tokenCapForMainICO()", +"db638e51": "resetUserRefBalance(address,address)", +"db63e149": "EmployeeWallet(string)", +"db641ab4": "Game_balance_in_Ethers()", +"db642bce": "GoddessToken()", +"db6648c0": "collateralisation(address)", +"db66ef59": "getPublicKeyN()", +"db6727c1": "myBitFoundationPercentage()", +"db680e3d": "getMeterInfoByMonth(uint8,uint256)", +"db681e1d": "GameScored(bytes32,int256,int256,uint256)", +"db681e54": "getGenerationForCall(bytes32)", +"db681e9f": "sendRefund(uint256)", +"db6997ae": "getCitiesData(uint256[])", +"db6a3652": "addOrder(address,uint256)", +"db6aef35": "amountOfWorkpointQueue()", +"db6bb289": "Zygoma()", +"db6bbeb2": "abx_token()", +"db6be534": "end_ts()", +"db6be871": "getAmountByCoupon(bytes32)", +"db6bed22": "addPresaleWallets(address[],uint256[])", +"db6c1831": "bonusSystem(bytes5,uint256)", +"db6c709c": "updateExchangeRates(uint256,uint256)", +"db6c71d6": "rspContract(address,uint256)", +"db6c7286": "CTokenGB()", +"db6c9416": "AgoraToken()", +"db6f1e74": "getUser(uint32)", +"db6f7537": "getPOOL_edit_22()", +"db6f9deb": "rewarded(uint256,address)", +"db6fcf01": "is_destroyed(uint256)", +"db7057fb": "rngId()", +"db714efe": "getBlocks(uint256,uint256)", +"db71c776": "setRateIcoPreICO(uint256)", +"db71d8b6": "FEE_SELECT_LRC()", +"db723e73": "personalMincap()", +"db72496f": "cancelSubscription(uint256,uint256)", +"db737c78": "getToken(uint256,bool)", +"db73bfce": "gameInfo()", +"db7400a5": "createAppInstance(bytes32,bytes)", +"db747f21": "setOraGasLimit(uint256)", +"db74847d": "distributeTratok(address[],uint256[])", +"db74c27a": "backRedPillTokenOwner()", +"db75dd5f": "AQBToken()", +"db76790f": "setAdvisorWallet(address)", +"db76e9c2": "setMemberLevel(address)", +"db77032d": "RATE_SALESTAGE4()", +"db775041": "donation(bytes32,uint256)", +"db775410": "setTypedJackpotWinner(address,uint256)", +"db7757cf": "valueRaised()", +"db78d0ce": "getAirdropAtSnapshot(address)", +"db78f5ef": "withdrawOnBehalf(uint256,string,uint256,uint8,bytes32,bytes32)", +"db79a65f": "resetUserWhiteListAmount()", +"db79e673": "getTradeOfferRecipientItems(uint256)", +"db7a0855": "MZToken()", +"db7a2f42": "projectAgent()", +"db7a4605": "getWallets()", +"db7a80f8": "getContributionUSD(address)", +"db7b87ff": "init(address,uint256,bytes32,uint256,uint256,uint256,bool,bool,address)", +"db7bc073": "refundWhenNotClosed(address)", +"db7ca38a": "XaurmProxyContract()", +"db7d2665": "FundTransfer(address,uint256,address)", +"db7d9065": "assignedAmountToCooperativePartner()", +"db7ed9e7": "addAssessorToPool(address)", +"db7ef562": "_2_nation()", +"db7ef7c6": "verifyEscrowVendor(uint256,address)", +"db7f1e6b": "getInitialEnemyCombination()", +"db7fea95": "WALLET_T8EX_RESERVED()", +"db803a86": "post(string,address[])", +"db80813f": "set(bytes32)", +"db80a787": "emitCourtUpdated(address)", +"db80fbc9": "balanceOfLockup()", +"db82967c": "createUsingProxy(address,bytes)", +"db8298f3": "_commissionTarget()", +"db833e3a": "sellShares(bytes32,uint8,uint256,uint256)", +"db83694c": "getSaleInfo()", +"db8374ee": "buyOracleFor(bytes,address,address)", +"db83d02f": "VREO_SALE_CLOSING_TIME()", +"db84252c": "tokenCreator()", +"db852ee7": "pieceSold(address,address,uint256)", +"db856759": "depositOldTokensFor(address,uint256,address)", +"db856f28": "_updateCard(address,uint256)", +"db85bd78": "registerTraderAccount(address)", +"db86d850": "transferGoo(address,uint256)", +"db87cbcc": "GetPermissionsList(address,address)", +"db88176f": "getQuestion(uint256)", +"db8850bc": "_merge(uint256,uint256)", +"db886f23": "Marketing()", +"db89c044": "reputationOf(address)", +"db89edb2": "BitDailyBot()", +"db8a61d4": "APP_BASES_NAMESPACE()", +"db8b6ccf": "addSubjectMatter(string)", +"db8b7fae": "transform(address)", +"db8bcec4": "MAX_TIME_RANGE_COUNT()", +"db8cee5e": "_generateRandomDna(uint256)", +"db8cfa5a": "HAVtoUSD(uint256)", +"db8d55f1": "getFees()", +"db8d7c39": "disableRestriction()", +"db8e9043": "SetOutRate(uint256)", +"db8ecf34": "registerFreelancer(string,string,bytes32,uint256,uint256,uint256[],string,string,bool,string,uint256,uint8,uint256[],uint256[],string)", +"db8ed8a7": "withdraw_a_bit(uint256)", +"db8ee692": "_price_tokn_ICO()", +"db8f0301": "getAEth(uint256,uint256)", +"db8f2f75": "EthStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", +"db8f5a35": "feesAndBountySupplyRemaining()", +"db8f7fb5": "preDiscountPercentage()", +"db9078b4": "CheckGenChip(uint32)", +"db9090a7": "devTokenWithdraw(uint256)", +"db91095e": "LVXToken()", +"db91774c": "setMinValue(uint256)", +"db9254a5": "_buy(address,uint256,uint256)", +"db9311c2": "getBlocksToNextRound()", +"db93f375": "startTokenVotes(address[],uint256,uint256,uint256,address[])", +"db946a11": "PlayStationChain()", +"db958f18": "FootCoin(uint256,string,string)", +"db95937d": "orderContractorProposal(uint256)", +"db967d05": "endOfPhase3()", +"db97c24d": "uzziToken()", +"db98abd8": "testThrowCancelSellOrderTwice()", +"db98d73f": "setRecordAddress(address)", +"db99800c": "fetchCreatedOrdersForMerchant(address)", +"db9a21bb": "CreateRZM(address,uint256)", +"db9abbd4": "arr(bytes32,bytes32)", +"db9b6775": "testMintThis(int256)", +"db9b7170": "setApproval(address,bool)", +"db9cc410": "createAsset(string,uint256)", +"db9cc99d": "AuctionCancelled(uint256,uint256)", +"db9cd8d3": "tab()", +"db9d28d5": "numDigits(uint256)", +"db9d5d31": "AdminRemoved(address,address)", +"db9dfb35": "newTeamOnEnd(uint16,uint64,uint64,uint64)", +"db9f16a8": "takeOffItem(uint256,uint8)", +"dba01cfe": "distributePENT(address[],uint256,uint256)", +"dba07858": "_removeFromList(address[],address)", +"dba0e9bb": "ethertoteDevelopmentWallet()", +"dba1a5f9": "allocateFunds()", +"dba1ac3d": "getEnforceRevisions(bytes20)", +"dba21586": "ProofOfTrevonJames()", +"dba21657": "askForEther(uint256)", +"dba22cb0": "transferPlanet(address,uint256,uint256,uint256)", +"dba232e3": "POPToken()", +"dba2a570": "_tune(uint256,uint256)", +"dba2d875": "forcedRefund()", +"dba31911": "bookSpaVisit(uint256)", +"dba33c03": "saleTokensCents()", +"dba3e704": "setMinimumContribution(uint256)", +"dba4c85c": "GetWithdrawBalance(address)", +"dba56cb8": "buyTokensFromContract(address,uint256)", +"dba5e917": "SelfDestruct()", +"dba6f7be": "verifyCreateSig(address,uint256,uint256,bytes32,bytes)", +"dba72a4e": "ICONIQ_SALE_OPENING_TIME()", +"dba7ef7d": "Bookie(address,address)", +"dba86ab6": "claimCardboard(uint64)", +"dba8be6e": "chickenTokenDelegator()", +"dba989ca": "_bonusTime2()", +"dba9a8a2": "setTrCut(uint256)", +"dba9daab": "pickBigWinner()", +"dbaaa2dd": "MIN_CONTRIBUTION_PRESALE()", +"dbaab3e1": "setMarketingAdmin(address)", +"dbaad1e5": "ownerDied()", +"dbab2f97": "merge(address[],bytes32,bytes32,int256,int256)", +"dbab7f1b": "UserInfoContract()", +"dbac248b": "MannaCoin()", +"dbac4cbf": "GetContractStateTerminatedSecDep()", +"dbac7806": "milestone()", +"dbacc237": "holderOf(uint256)", +"dbad21af": "tickets1kprice()", +"dbaea636": "UVPToken()", +"dbaec0fd": "createPattern(bytes32,string,address,string)", +"dbaf023d": "LogoVote()", +"dbaf2145": "requestWithdrawal()", +"dbaf5ce7": "changeRatesToken(uint8,uint256)", +"dbaf7247": "getValueByIndex(uint256)", +"dbafd0f2": "getTotalSeconds()", +"dbafdbb6": "setBalanceLimit(address,uint256)", +"dbb094ef": "Crowdsale(address,uint256,address,address)", +"dbb173d9": "test_updateKey_decreaseNoHint(int256)", +"dbb183c2": "setAuthorizedLogicContractAddress(address)", +"dbb24554": "updatePriceDenominator(uint256)", +"dbb34667": "getDsoStake(uint256)", +"dbb3cef3": "developer_update_Terms_of_service(string)", +"dbb47d77": "claimPlayerWinnings()", +"dbb56384": "encodeUtxoPosition(uint256,uint256,uint256)", +"dbb57a4b": "transferOne(address,uint256)", +"dbb61238": "maxDelay(uint256)", +"dbb62f24": "setDataMining(address)", +"dbb633f1": "ownerWithdrawalDate()", +"dbb72f67": "nullify(address)", +"dbb80e42": "allTokensLength()", +"dbb82429": "_randByRange(uint256,uint256)", +"dbb833df": "investWithoutId()", +"dbb8a305": "getBetName(uint256)", +"dbb98cae": "limit7()", +"dbb9deda": "goNext()", +"dbbabdfe": "getnum(uint256)", +"dbbb119c": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"dbbb206f": "buy(address,address,address,address,address)", +"dbbbe8df": "transferByCrowdsale(address,uint256)", +"dbbc6fcc": "isPayableEnabled()", +"dbbc853b": "tokenURISuffix()", +"dbbd3a71": "addClaim(address,bytes32,string,string,address,uint256)", +"dbbd4865": "isEarlyBirdsStage()", +"dbbd78da": "getAccountNickname(address)", +"dbbd7934": "findItem(address[],address)", +"dbbd9a04": "ALLOC_MAX_PRE()", +"dbbdad8c": "generateReleaseTokensSchemaHash(address,address,uint256,bytes32)", +"dbbdae63": "updateSeller(address)", +"dbbdf083": "register(uint256,address)", +"dbbe2ff9": "setCirculationShares(string)", +"dbbf01b2": "setAddUsers(address,address,string,string,uint256)", +"dbbfcd7c": "getCOR()", +"dbc02821": "XTVNetworkContractAddress()", +"dbc0c085": "teamMultisig()", +"dbc139be": "LogMigration(address,uint256)", +"dbc1f226": "suicide(address)", +"dbc27799": "pendingNewRound()", +"dbc2783d": "DoNotDeployThisGetTheRightOneCosParityPutsThisOnTop()", +"dbc2d042": "consumerAddress()", +"dbc2ef49": "getNotUsedToken_()", +"dbc38940": "executeTxn(uint256)", +"dbc45228": "newProposal(address,uint256,bytes,bytes)", +"dbc488e2": "ESlotsCrowdsale(address)", +"dbc53c07": "read(uint16,uint16)", +"dbc56297": "claim(address,bytes32,bytes32,uint8,bytes32,bytes32)", +"dbc57971": "getIcoStatus()", +"dbc5d002": "sendQuery(string,uint256,uint256)", +"dbc65f85": "preBuyPrice2()", +"dbc69521": "totContribution()", +"dbc7464b": "getEquippedItemId(address,uint256)", +"dbc837c5": "insurer()", +"dbc8817d": "GOLDENRATIO()", +"dbc91396": "cancelOrder(uint128)", +"dbc91ed1": "subset(string,uint256,uint256)", +"dbc933bc": "p_withdrawDevHoldings()", +"dbc9ef42": "_removeAuction(uint40)", +"dbca1207": "getLastSeed()", +"dbcbaca4": "investorInfo(address)", +"dbcbb362": "setTransperRun(uint256)", +"dbcc4658": "getSmartContractByPosition(uint256)", +"dbcc6caf": "second_release(uint256)", +"dbccb926": "CreatedToken(address,uint256)", +"dbcd258d": "blocksPerHour()", +"dbce1ff7": "referralRateInviter()", +"dbceb005": "split(uint256)", +"dbcf0531": "ContractFullfilled(address,int256)", +"dbcf194a": "GetInventoryCount(address)", +"dbd01de1": "cluster()", +"dbd05767": "RBA()", +"dbd0e1b6": "getSeller()", +"dbd16774": "IGMathsContract()", +"dbd19619": "round_earnings(uint256)", +"dbd1be77": "getDrone(uint256)", +"dbd1df92": "setTitulaire_Compte_1(uint256)", +"dbd229ff": "totalSupplyMarket()", +"dbd2a4c5": "promoterInfo()", +"dbd2ac60": "distributeCallback(uint256,uint256)", +"dbd3100e": "getBuilding()", +"dbd3313e": "PizzaPoll()", +"dbd3c372": "safeMulticastTransfer(address[],uint256[],uint256[],bytes)", +"dbd3cd62": "withdrawPayment(uint256)", +"dbd3d021": "findNextSecond(uint256,bytes2)", +"dbd42da5": "ranked()", +"dbd4a422": "synthetixState()", +"dbd4a8ea": "setBase(address,uint64,bool)", +"dbd54b62": "setMasterAuth(address)", +"dbd55fb3": "ACTION()", +"dbd594bb": "FoundsTransferd(address,uint256)", +"dbd5ef6d": "setFeeConfig(uint256,uint256,uint256,uint256)", +"dbd64ae9": "closeSale3()", +"dbd6da8c": "isUidSet(string)", +"dbd6f5c1": "allocationAddress()", +"dbd760ca": "PriceThreeDisable()", +"dbd7fd13": "saleMilk()", +"dbd84659": "receiveTokenByClientAccount(string,uint256,address)", +"dbd848e3": "ICO_Ended()", +"dbd8987c": "contractFeePercentage()", +"dbd8c25f": "BasicTokenImpl()", +"dbd91792": "multiowned()", +"dbd9a4d4": "setAllowances()", +"dbdb8b56": "eosGAS()", +"dbdb96c2": "updated_policy_payload()", +"dbdbbb28": "getRoundBonusRate()", +"dbdc275d": "createB()", +"dbdd5ae6": "actOnBehalf(bytes,uint256,uint8,bytes32,bytes32)", +"dbdd5d74": "swapsFor(address)", +"dbddcdb7": "getScouponBalances(address)", +"dbde1988": "transferFromWithoutReward(address,address,uint256)", +"dbde2f19": "min(uint8,uint8)", +"dbdef054": "setFinalizeAgent()", +"dbdf7fce": "resetCounter()", +"dbdf8538": "_emitWorkStarted(uint256,uint256)", +"dbdff2c1": "getRandomNumber()", +"dbe01790": "getAllHpbNodes()", +"dbe1053d": "sendEthBackToUsers()", +"dbe201c7": "getAllBidsByAdslot(uint256)", +"dbe2bc84": "_suspendMarket(address)", +"dbe2c85b": "checkFiscalVerify(bytes32)", +"dbe2e296": "pushToPot()", +"dbe3010c": "WINNER_SHARE()", +"dbe3071a": "Kitchen()", +"dbe3117a": "tier2Timestamp()", +"dbe35007": "getAuctionsLength()", +"dbe3e92f": "provenanceOf(address)", +"dbe54524": "set_CWC_Address(address)", +"dbe55e56": "platformAddress()", +"dbe587b9": "CashPokerProPreICO()", +"dbe5bab5": "getOpenOrders()", +"dbe5ca78": "POAP()", +"dbe5fe9d": "setMaxCoinSides(uint8)", +"dbe6c02f": "isOwnerOrOperator(address,address)", +"dbe705ea": "fetchCreatedOrdersForMerchantByAdmin(address)", +"dbe7e3bd": "claimed(uint256)", +"dbe992af": "updateEntry(uint256,address,uint256)", +"dbe9eebf": "getPricePointsLength()", +"dbea52d8": "lotteryPrice()", +"dbeab275": "createRoutingCode(bytes32)", +"dbeabd21": "getPplsAddr(uint32)", +"dbecc372": "Example(uint256)", +"dbecfb25": "koth_v1b()", +"dbed1e88": "getUnlockTime(address)", +"dbed3a30": "GamePoolAddress()", +"dbedf9e4": "TB01()", +"dbee0dea": "releaseTimeLock()", +"dbeea819": "tokenGrantees(uint256)", +"dbef0790": "returnUnsoldTokens(address)", +"dbefe789": "NUM_OF_PHASE()", +"dbf14295": "claimSilver(uint64,uint64,uint64,uint64,uint64,uint64)", +"dbf14dd9": "buyfloaksAgainstEther()", +"dbf1b00b": "claimBeer()", +"dbf1bfee": "ballotFee()", +"dbf1ede3": "_getLogTokenContract(uint256)", +"dbf1f780": "_hasEntryForCompetition(address,uint256)", +"dbf1fe48": "calculateTokensFromWei(uint256,uint256)", +"dbf27e0c": "updateConstitutionPoll(address)", +"dbf2c9da": "isValidAuthority(address)", +"dbf2f3c2": "get_reward(address)", +"dbf323dd": "DEDToken()", +"dbf35430": "ownedOwnershipTransferred()", +"dbf44530": "isWhite(address,address)", +"dbf45aa3": "EthBank()", +"dbf4c54c": "batchTransfer(address[],address[],uint256)", +"dbf502c0": "getCentsPerETH()", +"dbf517a2": "_connectModule()", +"dbf53a0e": "StandardTokenMock(address,uint256)", +"dbf552aa": "LOG_InvestorEntrance(address,uint256,uint256)", +"dbf5b91b": "setSafeGas(uint256)", +"dbf5eb1c": "closeTokenSale(address)", +"dbf63340": "availableSynthCount()", +"dbf675c9": "bonusAddresses(address)", +"dbf724c7": "setReceiver2(address)", +"dbf76c03": "bountyOfflineWallet()", +"dbf79dcd": "StatusCow(address,uint256)", +"dbf7dc0c": "getEntityList(bytes32[],uint8[])", +"dbf81cc6": "foundersTokensAddress()", +"dbf8d2fa": "sendTips()", +"dbf98f6a": "totalSupplyBonds()", +"dbfa5863": "_endDate()", +"dbfa6226": "interfaceInstances(uint256)", +"dbfa980b": "Slogan(string)", +"dbfab65b": "AvalonToken()", +"dbfb129e": "ChecksumDatabase(string,string,string)", +"dbfb18e7": "GoblinChainToken()", +"dbfc74cb": "ORACLIZEGASPRICE()", +"dbfccd16": "ethersplay(uint8)", +"dbfdb6e5": "getIcoTokensAmount(uint256,uint256,address)", +"dbfdef01": "TechnoEng()", +"dbfe791b": "confirmed(bytes32)", +"dbfeb17f": "eth_cap()", +"dbfec8b7": "CHEXToken(address,uint256,uint256)", +"dbfef710": "getDefaultRequiredGas()", +"dbff4182": "seedCoins(address,uint32,string,uint256)", +"dc00adef": "buyLand(bytes32,int256[],int256[],address)", +"dc00b602": "EllipseMarketMaker(address,address,address)", +"dc00e43b": "BananaBasket()", +"dc012626": "ballotOf(address)", +"dc015851": "minimumContributionPhase4()", +"dc01bd0c": "calculateAmountForDAI(uint256)", +"dc021628": "setFund()", +"dc02511e": "addPermittedContracts(address[])", +"dc02f456": "decodeTransfer(bytes)", +"dc042405": "getNames(address[],address)", +"dc048cf2": "withdraw(uint256,string)", +"dc0527de": "NDEX()", +"dc06269f": "showWhaleAddr()", +"dc06b859": "numMarketMakers()", +"dc06d8f8": "lnTest(uint256,uint256)", +"dc06e754": "_setRspTokenAddress(address)", +"dc070657": "changeBeneficiary(address)", +"dc08a80b": "safeToAdd(int256,int256)", +"dc08b611": "EXAC()", +"dc08e2c5": "getVIPOwner(uint256)", +"dc08e5ff": "getStockCount()", +"dc09426c": "GetGameInfo()", +"dc09996c": "escrowDatabase(address,uint256)", +"dc09d8fd": "showInvestorsComission()", +"dc0b3564": "players()", +"dc0b48c1": "startPubTrade()", +"dc0ba228": "change(bytes,uint256[])", +"dc0bd011": "collectDonations()", +"dc0bd38e": "appendDecryptedBids(uint256[],uint256[],uint256[],address[],address,uint256[],uint256[],uint256[])", +"dc0bd75f": "arr(address,uint256,uint256)", +"dc0c1a27": "numberOfMajorEvents()", +"dc0c7735": "isPreSaleTokenSet()", +"dc0d3dff": "funders(uint256)", +"dc0d4cb6": "merculetContract()", +"dc0eb1a3": "PredictTheFutureChallenge()", +"dc0f5ffc": "get_candidate_pic(uint8)", +"dc11a496": "changeAdmin(address,bool)", +"dc11b386": "getDailyTarget(uint256,uint256)", +"dc11be24": "smallSize()", +"dc126e63": "unlockVestedTokens(address)", +"dc1279d4": "getPureFromGene(uint256[2])", +"dc129870": "Loom()", +"dc12a805": "right57(uint256)", +"dc12abb5": "setPresaleDates(uint256,uint256)", +"dc132be8": "getAmountofTotalParticipants()", +"dc13352a": "TeamSupply()", +"dc135226": "getValueFromDollars(uint256)", +"dc13f85f": "getMaxPriceSale()", +"dc14af38": "setIncrEth(uint256)", +"dc1542aa": "testSafeAdd()", +"dc154918": "_computeTournamentContenderCut(uint256)", +"dc154a19": "buyAndSetDivPercentage(uint256,address,uint8,string)", +"dc15c635": "getdeptinfo(uint256,address)", +"dc165652": "bountyTokensVault()", +"dc1790e3": "getdeptreqdetails(uint256,address)", +"dc17c9ca": "getTokenOwner(address)", +"dc17e808": "getPaidOrderByIndex(uint256)", +"dc183d64": "setBridgeValidatorsImplementation(address)", +"dc184e70": "reserveAccount()", +"dc190074": "setsafemode(uint256)", +"dc19266f": "Total_of_Players()", +"dc199335": "checkIdentifier(string)", +"dc1997ea": "landlord()", +"dc1abb6e": "MAX_AUDIT_TIME()", +"dc1b93cb": "COREXCoin()", +"dc1bba17": "getTxAmountMCW(bytes32)", +"dc1bebe6": "creditExecutedFundsLessFees(uint128,uint256,uint256)", +"dc1c1389": "acceptOfferForCity(uint256,uint16,uint256)", +"dc1cb47b": "priceTLP2()", +"dc1d672d": "mQueue(uint256)", +"dc1d70c3": "presaleBonusLock()", +"dc1d83b3": "changeTelephone(address)", +"dc1df3f6": "myTokens(address)", +"dc1eab83": "standardSale()", +"dc1fb5a5": "community()", +"dc1fca7e": "dateSaleStarted()", +"dc1fdff0": "commissionSum()", +"dc201838": "QuickPrice()", +"dc206e5f": "oraclize_query(uint256,string,string[])", +"dc20d6e7": "updateRandomNumber(uint256)", +"dc20f957": "assetIncome(bytes32)", +"dc21b3de": "preIcoBonus(uint256,uint256)", +"dc22aca5": "GalaxiumCoin()", +"dc22cb6a": "series(uint256)", +"dc22eba6": "register(uint256,uint256,uint256,uint256,uint256)", +"dc2424fc": "setPositionPrice(uint256)", +"dc242e38": "calTotalSupply(uint256)", +"dc2811cd": "KDOU()", +"dc2816b7": "AddNewChip(uint32,uint8,uint8,uint8)", +"dc28d0c9": "tokenToValue(address,uint256)", +"dc298682": "createCategory(string)", +"dc29a89e": "concatBytes(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"dc29da22": "getNodeHash(address)", +"dc29ec37": "tokenReserve(address,uint256)", +"dc29f1de": "topUp()", +"dc2a3056": "setTripleRoomMax(uint256)", +"dc2a60f6": "isReadOnly()", +"dc2af3de": "getCEOAddress()", +"dc2b32e6": "getWeiInvested(address)", +"dc2ba357": "SetupQDA(string,string,uint256,uint256,uint256,address,address,uint256)", +"dc2c928a": "pausePlayerContracts(uint256,uint256)", +"dc2cf3f5": "timeElapsed()", +"dc2d46f8": "getWeiAmount()", +"dc2df955": "get_project_information(uint256)", +"dc2e47c8": "save4(address,bytes,string)", +"dc2e7b33": "cal(uint256,uint256)", +"dc2ebcbc": "whitelistMainSaleAddressMany(address[],bool)", +"dc2f56cf": "transferAgreement(bytes32,address)", +"dc2f7867": "setMaxLength(uint256)", +"dc2f8744": "bounties(uint256)", +"dc2f8a38": "setResult(uint256,uint8,int8)", +"dc30685e": "gas4Token()", +"dc3080f2": "spentAllowance(address,address)", +"dc30e253": "doFinalizeSale(uint256,uint256)", +"dc30f912": "addTokenization(string,string,uint8)", +"dc3134ae": "getIslandBattleStats(uint256)", +"dc31adee": "releaseMarketingTokens()", +"dc31e06c": "NEKOCOIN()", +"dc31e473": "opmAddress()", +"dc322802": "stage2Bonus()", +"dc32c72f": "secondReserveTimeLock()", +"dc340a76": "dataControlDelOwner(address,address)", +"dc3496d7": "allHashTypes(uint256)", +"dc35213f": "change(address,uint256[])", +"dc35a6bd": "LOWER_PRICE_RESET_PERCENTAGE()", +"dc35a900": "createOffer(uint256,uint256,uint256)", +"dc35ea16": "bonusInPhase1()", +"dc371e54": "deleteName(bytes32)", +"dc376392": "ETCCoin()", +"dc3774b3": "availableBalances(address)", +"dc382cbf": "sumAcceptedContrib()", +"dc391176": "delayedPayments()", +"dc39537a": "AVAILABLE_BONUS2_SUPPLY()", +"dc39d06d": "transferAnyERC20Token(address,uint256)", +"dc39e5fe": "removeOperationType(uint32)", +"dc3a1cad": "setIBalances2(uint256[],uint256[])", +"dc3a8372": "controllerApproval(address,uint256)", +"dc3a9433": "lockedFundsPercent()", +"dc3ab866": "checkEarnings(address)", +"dc3acebe": "getApp(address)", +"dc3c39aa": "TCDC()", +"dc3ccfdd": "transfer_tokens_from_contract(address,uint256)", +"dc3d1a2a": "addNewEmployeeWallet(address,address)", +"dc3d2b5c": "MiniMeIrrVesDivToken(address,address,uint256,string,uint8,string,bool)", +"dc3d4203": "createPatient(bytes32,bytes32,uint256,uint256,uint256,bytes32,uint256)", +"dc3d6305": "_transferFromAllArgs(address,address,uint256,address)", +"dc3da6e9": "IcoAddressSet(address)", +"dc3ecbb4": "debug_wei()", +"dc3ef685": "feePromille()", +"dc3f65d3": "createdByMe()", +"dc3f7536": "AdamToken()", +"dc40af1f": "oneTimeTickets(address)", +"dc414448": "_addToParticipants(address)", +"dc415804": "setFiscal(bytes32,uint256,uint256,uint256)", +"dc419fd8": "cancelOrder(bool,uint256)", +"dc41e726": "IndoJek()", +"dc420fd2": "withdrawPayoutFromBet(uint256)", +"dc4243f1": "setSalaryToken(address,address,address,uint256)", +"dc441754": "addDocument(bytes32,string,string,uint256,uint256)", +"dc44bb1c": "createEscrowFrom(address,address,uint256,uint256)", +"dc454c13": "EDROP()", +"dc45b93a": "contributorsCompleteCount()", +"dc45bfb3": "buyPack(uint256)", +"dc45d08e": "getEtherBalance(address)", +"dc45e27f": "getBonusBalanceByType(uint256,uint256,bytes1)", +"dc460933": "assignRole(address,bytes32,address)", +"dc46a76d": "getIdeasSinceLastDeploy(address)", +"dc46c813": "TwoExRush()", +"dc46d984": "numGamesCanceled()", +"dc47b3c1": "numberOfTokenIds()", +"dc47e5b7": "approveAndCall(address,address,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"dc489c9b": "setAirdropper(address)", +"dc493790": "advisoryWallet()", +"dc4a307c": "createCommonAuction(uint256,string)", +"dc4b3115": "thirdPriceTime()", +"dc4baedd": "checkVerify(address)", +"dc4bc06e": "getUserCategory(address)", +"dc4c4005": "RemoveUser(address,address)", +"dc4d2ccd": "DiscountPercentToken(uint256,string,string)", +"dc4ece27": "BONUS_3_DAYS()", +"dc4ee13f": "overallTakenEther()", +"dc4f63cc": "cap_max()", +"dc502d64": "ethToBeDistributed()", +"dc50af26": "against()", +"dc51fba8": "SetherFinalized()", +"dc52696f": "tokenSupplyChanged()", +"dc52c514": "batchCreateDrawings()", +"dc533342": "reconciliationDateSet()", +"dc53903b": "fundsReceived(uint256)", +"dc540979": "POFOMO()", +"dc5418b1": "view32()", +"dc541eb7": "SelfllerySale()", +"dc542a79": "isMaximumGoalReached()", +"dc542c0f": "ALIToken()", +"dc547301": "setCurrentSupply(uint256)", +"dc54d919": "long_tokens(uint256)", +"dc555090": "updateTime()", +"dc555766": "createWithdraw(address,uint256)", +"dc566787": "topdownAndCashout(address,uint256)", +"dc570aad": "setPermission(address,string,bool)", +"dc57726f": "TokenGenerationEnabled()", +"dc57c1ef": "CopyrightToken(uint256,string,string)", +"dc57c323": "nextInputProfit()", +"dc57d553": "epochLast()", +"dc583801": "doubleyour5()", +"dc585713": "EtherFundMeIssueTokensCrowdfunding(string,string,string,uint256,uint256,uint256,address,address,string,string,uint256,uint256,uint256,uint256)", +"dc5936f0": "addCountry(bytes2)", +"dc596304": "NineLTDevToken()", +"dc597b47": "getAnimals(uint8)", +"dc5a2199": "ICO_WALLET()", +"dc5aa474": "lastBlock_f2Hash_uint256()", +"dc5acb90": "getOrThrow(string)", +"dc5b041b": "validationPassed(address)", +"dc5b0662": "getIndexByShip(uint256)", +"dc5b87cf": "getPartnerAllocation(uint256)", +"dc5bc461": "RadToken()", +"dc5bcafb": "UnicornToken(address)", +"dc5bf961": "totalTokensLocked()", +"dc5c3e06": "setFundraiseLimits(uint256,uint256)", +"dc5c9677": "changeSellerProposedValue(uint256)", +"dc5d184f": "setID(uint256)", +"dc5d9bfe": "migrationStep(uint256)", +"dc5df3fd": "ExperimentalPreICO(address,uint256,uint256,uint256,uint256,uint256,address)", +"dc5dff36": "LottoComplete(address,uint256,uint256)", +"dc5fced4": "totalRake()", +"dc5fe025": "forward(address,bytes,uint256)", +"dc5fe349": "releaseManyStakes(uint256[],address[],address[],uint256[])", +"dc602df2": "tokenValueMultiplier()", +"dc6037d1": "setbaseconfig(uint256,uint256,uint256,uint256,uint256)", +"dc60457c": "publicIssue(address,uint256)", +"dc6055dd": "BOUNTY_WALLET()", +"dc61164d": "getMySperm()", +"dc61456c": "cooAddCro(address)", +"dc622bcc": "setTokensAllocation(address,uint256,address[],uint256[])", +"dc62da61": "checkGameListed(address)", +"dc63a62c": "getFileListHead()", +"dc63f0be": "getSatOwed(address)", +"dc646367": "endSale(bool)", +"dc64752d": "collectsAccountDividends(address)", +"dc659907": "useModule(address)", +"dc661aaa": "mainICOFirstWeekEndTime()", +"dc6668db": "make_anonymous_withdraw(uint256)", +"dc667d0c": "getCountriesCount()", +"dc669dd4": "EndorToken()", +"dc689d3c": "getBaseDenomination()", +"dc693ca7": "totalWeiAmountSale1()", +"dc69a2d6": "tearDown(uint256)", +"dc69aa23": "SudanGoldCoinCrowdsale(uint256,uint256,uint256,address)", +"dc6b1cbd": "setUser(address,address,uint256,uint256)", +"dc6b7fb4": "LockedAccountThresholdUsdUpdated(uint256,uint256)", +"dc6b9b29": "notesLength()", +"dc6bbdf5": "totalContributionInWei()", +"dc6bc372": "TokenChangerBNT(address,address)", +"dc6bfbb5": "nextBallotId()", +"dc6c0cdd": "Share()", +"dc6c3ee4": "setMaxTokenCap(uint256)", +"dc6dd152": "playerRollDice(uint256)", +"dc6e7262": "refundTransactionByMediatorFee(uint256)", +"dc6e9cf9": "_MINIMUM_TARGET()", +"dc6f39a3": "TriggerCooldown()", +"dc6ff38e": "MAIN_MAX_CAP()", +"dc7049bf": "annualManagementFee()", +"dc706a3a": "VictusToken()", +"dc70ab02": "setTotalExecutedPerDay(uint256,uint256)", +"dc718791": "changeRules(uint256,uint256,uint256,uint256,uint256)", +"dc71db43": "worldCupResultPart2()", +"dc720528": "AgriChainProduction()", +"dc726205": "rates(bytes32)", +"dc730c50": "initialSingleWithdraw(uint256)", +"dc73e49c": "swapToken()", +"dc7454dd": "amountReleased()", +"dc74665e": "totalLeaderboards()", +"dc75f2db": "multiowned(address[],uint256)", +"dc760edf": "hardCapCrowdSale()", +"dc76dc8d": "applyForCertification(string,string,string,uint256)", +"dc76fabc": "getSpotPrice()", +"dc77e5e1": "serviceTokensBurn(address)", +"dc787bba": "getCountTempHolders()", +"dc799f88": "BaseCertoChainContract()", +"dc79b176": "getUserGroup(address)", +"dc79c2ef": "addUser(bytes32,bytes32,bytes32,bytes32,bytes32)", +"dc79d069": "investorSupply()", +"dc7abeb3": "OPENSOURCE_TOKENS()", +"dc7ac1ba": "lendVault()", +"dc7b808e": "callLibSet(uint256)", +"dc7bbd72": "hasThreeStepWithdraw()", +"dc7cbfab": "priceCounter()", +"dc7df9d8": "testToUint(int256,bytes)", +"dc7e5762": "goNextPeriod()", +"dc7e88e8": "amountOfBooked(address)", +"dc7fc898": "bankermasterReq()", +"dc80035d": "setFoo(uint256)", +"dc801db6": "MyYLCToken(uint256,string,uint8,string)", +"dc80aaee": "DeltaToken()", +"dc81e2b8": "DarenHui()", +"dc82697c": "getContractValue()", +"dc835df5": "Sense()", +"dc8369ce": "myStakesOnCountry(uint256)", +"dc8452cd": "required()", +"dc845934": "getPlayerBetResult(uint256)", +"dc846d95": "Own()", +"dc84e79e": "raisedPreSaleUSD()", +"dc851b02": "itcERC20()", +"dc85561b": "firstRoomAvailable(string,uint256[])", +"dc85b996": "window1EndTime()", +"dc8650de": "_removeFreezer(address)", +"dc86e6f0": "baseUnit(bytes32)", +"dc87cfbf": "executeTransaction(uint256,bytes)", +"dc885527": "burnUnmintedTokens(uint256)", +"dc88e838": "getOAR()", +"dc8a0f65": "change_game_dice(string)", +"dc8b0203": "clearApprovalAndTransfer(address,address,uint256)", +"dc8bc70d": "finalizeSale(address)", +"dc8c06d8": "addEmployerFeedback(address,uint256,address,string,uint8)", +"dc8d1095": "simpleSubmit(uint256)", +"dc8d2696": "inboxSize(address)", +"dc8d26ad": "changeICODates(uint8,uint256,uint256)", +"dc8ee41e": "coldWallet1()", +"dc8f2ae0": "addExplicitPosition(uint32,int64[2])", +"dc8fbb44": "deathData_f12()", +"dc903eb7": "addChunk5ToWhiteList()", +"dc904e69": "waveCap3()", +"dc90e42f": "restrictedStockOf(address)", +"dc91868f": "backTo(address)", +"dc91b634": "Ticketh()", +"dc91ea68": "PayerStringUpdated(string)", +"dc92beec": "setManyWhitelist(address[])", +"dc93f7c9": "feePayedPerReserve(address)", +"dc94b4a4": "doPay(bytes32,uint256,uint256)", +"dc94e45d": "setDistrito(uint256)", +"dc9513c1": "JustifyClaimWithWitness(uint8)", +"dc951fdc": "totalOverthrows()", +"dc9564d5": "buy(uint256,string,address,address,address,address)", +"dc9590f0": "_START_TARGET()", +"dc965479": "FooContractCall(address)", +"dc97a4f9": "getTotalUnPayedDividendsAmount()", +"dc97d962": "getInt(bytes32)", +"dc97e366": "stageIndex()", +"dc9861db": "updateMeDao(address)", +"dc988b40": "allowWorkerToContribute(address,address,address)", +"dc992aa0": "minUSD()", +"dc998901": "SaveData()", +"dc9a1535": "isPublic()", +"dc9a190e": "isAllowedTrade(address)", +"dc9a1df3": "SafecontractsTREXToken()", +"dc9ac994": "iconiqSaleOngoing()", +"dc9ae17d": "burn(bytes,address,uint256)", +"dc9b6d68": "getTimeSinceLastEvent(address)", +"dc9bb7db": "noKing()", +"dc9c6e15": "_myinitialSupply()", +"dc9d625b": "setMaintainance(bool)", +"dc9deea3": "amountPurchasedWithDecimals()", +"dc9deeff": "setPresellPrice(uint256)", +"dc9e7a87": "TransferedERC20(address,address,uint256)", +"dc9e9ba0": "allowStart()", +"dc9eb903": "Tbond1()", +"dc9ebff7": "getTotalInvestedEther()", +"dc9f0622": "transferManual(address,uint256,string)", +"dca0b866": "TwoPersonContract(address,address,bytes32)", +"dca0f3ef": "getEntryFeePaid(address)", +"dca27d5e": "setV_R4(uint256)", +"dca44b39": "setPerOneEther(uint256)", +"dca5f188": "AddressBook()", +"dca5f6b0": "jurors(address)", +"dca60034": "isMapped(string)", +"dca6058c": "canSetTransferable()", +"dca67e5d": "_createResident(string,string)", +"dca6f378": "withdrawTokensFromPool(uint96)", +"dca703d0": "LogSetQuestionFee(address,uint256)", +"dca73e6b": "getMyStores()", +"dca7bcbe": "getWords()", +"dca80bc6": "EtheremonRankBattle(address,address,address)", +"dca92eb5": "terminateLiquidation()", +"dca95419": "recoverSigner(bytes32,string)", +"dca9fd5b": "editStatus(uint256,string,uint256,uint256,int8)", +"dcaa5620": "findNextWeekday(uint256,bytes)", +"dcaabed7": "getLastDeedByAddress(string)", +"dcabf93f": "refundstate()", +"dcac652e": "setOwnerShare(address,uint256)", +"dcac69c3": "inheritedPure(uint256,uint256)", +"dcace702": "getClientLastPaidRate(address)", +"dcacf19a": "finalizeAndRestart(address)", +"dcae2cb4": "getWinningPrize(uint256)", +"dcaee066": "setStakeDisbursementAddress(address)", +"dcaeea15": "setadmin()", +"dcaf391e": "totalAirDropToken()", +"dcafa43e": "SaxoToken()", +"dcafaec2": "setCostToCreateGame(uint256)", +"dcafee05": "killBalance()", +"dcb01759": "salesEth(address)", +"dcb032ce": "addNodeGroup(string)", +"dcb04503": "testConcatStorage33Bytes()", +"dcb0a094": "tokenSetBurnFeeProp(address,address,uint256)", +"dcb12421": "isSoftcapOn()", +"dcb1c012": "ChowSale()", +"dcb27883": "CallAborted(address,bytes32)", +"dcb31b82": "isConfig()", +"dcb35d06": "getTransactionApproveCount(uint256)", +"dcb36063": "crowdsaleMinter()", +"dcb3ff58": "updateDividendBalance(uint256,address,address,uint256)", +"dcb46e38": "setWorstCaseRateFactor(uint256)", +"dcb4775e": "tokenPartner()", +"dcb4876f": "removeAddresses(bytes32[])", +"dcb5930a": "ratingContractAddress()", +"dcb6af48": "calcAverageICOPhaseKeyPrice(uint256)", +"dcb7e083": "teamTokensInitial()", +"dcb7f86f": "getWinningPayoutDistributionHashFromFork()", +"dcb814ef": "presaleWhitelistDiscount()", +"dcb951de": "pushDividends(address)", +"dcb9528e": "getBiddingInfo(address)", +"dcb9d457": "updateClientOfContractorManagers(uint256,uint256)", +"dcba03da": "MINEA()", +"dcbab608": "initialize(uint256,uint256,uint256,uint256,uint256)", +"dcbac60c": "winPrizes(uint256)", +"dcbad97b": "setEndIcoMainICO(uint256)", +"dcbc1288": "m_SMR()", +"dcbc1c05": "Deposit(address,address,uint256,uint256)", +"dcbc84ab": "coinsIssuedMkt()", +"dcbda04c": "setCrowdsaleInterface(address)", +"dcbe7cf1": "addInsuranceProduct(uint256,uint256,uint256,string,string,bytes32)", +"dcbf16d4": "Normal(uint8)", +"dcbfa406": "sendVirtTokens(address,uint256)", +"dcbfa4b7": "addSkills(bytes32[])", +"dcbfe3d5": "clearRequests(bytes32)", +"dcc0ccf3": "Dao(address)", +"dcc0e622": "setTokensForCrowdSale(uint256)", +"dcc1fd02": "angelSaled()", +"dcc23730": "setCurrency(uint256)", +"dcc279c8": "setHalted(bool)", +"dcc33e0b": "updateOperationalAddress(address)", +"dcc42e9b": "cards_blue_total()", +"dcc439cf": "updatePlayersGooFromPurchase(address,uint256)", +"dcc5237b": "FlatPricing(uint256)", +"dcc53305": "getMail(uint256)", +"dcc60128": "getProjects()", +"dcc6131c": "checkBalance(uint256[],address)", +"dcc66b4b": "addRelationshipBindingWineryOperation(bytes32,uint256,bytes32,int256)", +"dcc66cc2": "getDelegate(uint256)", +"dcc6762c": "withdrawalInitiate()", +"dcc6e7ad": "refundEth(uint256)", +"dcc71ed4": "AdvisorsAndFounders(address,uint256)", +"dcc76a92": "Ranking()", +"dcc7f6b0": "Ethen(address)", +"dcc819c8": "computeCntrAmountUsingUnpacked(uint256,uint16,int8)", +"dcc8592c": "KOCMOCToken()", +"dcc8a508": "partnerBonus(uint8)", +"dcc9a58c": "testCreateGame(string,string,bool,string,address,string)", +"dccb0c89": "test_1_someTest()", +"dccb37f1": "initialTokenBalance()", +"dccb5afb": "_emitTimeAdded(uint256,uint256)", +"dccb70a7": "setEnableAllTransfers(bool)", +"dccb98da": "SparkToken()", +"dccbb14b": "payInterests()", +"dccbfa2a": "minInvestedCap()", +"dccc6c94": "fireCloseProposalEvent(address,uint256)", +"dcccb41d": "setTransferAddress(string,address)", +"dccd4315": "startingAt()", +"dccdc893": "setNewWhiteList(address)", +"dcceaaa8": "sendShipmentTo(address,uint256)", +"dccee5b2": "posibleDividendsOf(address)", +"dccf77ce": "setCurrentBlock()", +"dccfbb62": "overthrow(bytes23)", +"dcd0fa9e": "get_arbits_min_contribution(address)", +"dcd1e670": "checkAmount(uint256)", +"dcd320a0": "bouncyCoinToken()", +"dcd3c2e5": "QLALA()", +"dcd4090b": "getStage3Start()", +"dcd4eb14": "addNewTicket(uint256,bytes32,uint256,uint256,uint256,bytes32,string)", +"dcd58e2f": "FUTURE_ME_ADDRESS()", +"dcd65479": "numPeriods()", +"dcd6561d": "currentSaleSold()", +"dcd7dd2e": "setKYCLevel(address,uint8)", +"dcd8023c": "TokenBranch(uint256,uint8)", +"dcd84f2a": "UserDestroy(address)", +"dcd93691": "retrieveOnFail()", +"dcd9c289": "getBAA(bytes32,address)", +"dcda0c8f": "requestDiplomaByNr(uint256)", +"dcda2385": "TransferSellAgentCreators(address,uint256)", +"dcda4554": "dazoToken()", +"dcda4bf3": "mOwner()", +"dcdaa35b": "mintAmount2()", +"dcdb622b": "MessageSet(string,uint256,uint256,address)", +"dcdbbe37": "lockTransferFor(address,uint256)", +"dcdc055a": "doBuy(address,uint256)", +"dcdc7254": "admin_set_shopStorePrice(uint256)", +"dcdc7dd0": "mint(address,uint256,bytes,bytes)", +"dcdd6d38": "getHolderAddresses(bytes32)", +"dcdd9af2": "DEX(address,address,address,uint256,uint256,uint256)", +"dcdda6d7": "teamUnfreeze()", +"dcde0019": "disapprove()", +"dcde835e": "NewSale(uint256,uint256,uint256,uint256)", +"dcdea898": "MintToken(address,uint256)", +"dce0b4e4": "creationFee()", +"dce11375": "emitter()", +"dce1d3c6": "addTokenPendingToken()", +"dce23e97": "getPriceValue(bytes32)", +"dce293a7": "minLength(uint256)", +"dce2b4c1": "getMarkup(uint256)", +"dce2f2dd": "Vouched(address,bytes32)", +"dce388b6": "payeePartsToSell()", +"dce4a447": "at(address)", +"dce4ae87": "DigixConfiguration()", +"dce4b34e": "submitAnswerByArbitrator(address,bytes32,bytes32,address)", +"dce4fa38": "IcoTokens()", +"dce57755": "getBlockLength()", +"dce579d1": "extendIco(uint256)", +"dce59311": "didOwnerEndCrowdsale()", +"dce59c00": "addPayee(address)", +"dce5c5a9": "norsefirePrice()", +"dce5c757": "cool()", +"dce5f277": "investorsAddress(uint256)", +"dce6417d": "DebitCoinToken(string,string,uint8)", +"dce722dd": "getJobSkills(uint256)", +"dce77d84": "getCurrentRate(address)", +"dce85216": "moveUnsoldTokens()", +"dce98784": "NiewGold()", +"dce9f6c3": "SuperConductToken()", +"dcea0a64": "ADX()", +"dcea7113": "buyOutPrice()", +"dcea80a5": "exchangeIEO()", +"dceacb93": "_createNewBadge(address,uint256)", +"dceaf74c": "youAre(address)", +"dceb3e7d": "getConfirmations(bytes32,address)", +"dcebb122": "extendSale(uint56)", +"dcec5ecc": "calcNewEmployeePoolOptions(uint256)", +"dcec7204": "EtherNeo()", +"dced2f1a": "currentCharId()", +"dceda27b": "getRegularCarSupply(uint256)", +"dcede2c3": "testIsSameSign()", +"dcedeeed": "claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"dceeeae8": "ServiceController(address,address,address,address)", +"dcef8165": "CoinBirdDEX()", +"dcefa538": "buyTokens(address,address,uint256)", +"dcefcb8e": "extractCallData(bytes)", +"dcf00b6e": "getAccreditationActive(bytes32,bytes32)", +"dcf1579c": "thirdBonusPercent()", +"dcf1a9ef": "commissionBalance()", +"dcf1df05": "showValue(address,address)", +"dcf219f2": "setLootboxFee(uint256)", +"dcf34a91": "SpendingUnblockedEvent(address)", +"dcf3fb2a": "revoke(address,address)", +"dcf537b1": "multiply7(int256)", +"dcf63591": "course()", +"dcf6a592": "isGreaterThan(uint256,uint256)", +"dcf72c10": "buyTo(address)", +"dcf73856": "generateGroups()", +"dcf7bb5c": "changeTarget(address)", +"dcf7c0d0": "TokenTrader(address,uint256,address,uint256,uint256,uint256,bool,bool)", +"dcf7c2f9": "asset(uint8,string,bytes)", +"dcf8045e": "tiersInitialized()", +"dcf8113e": "campaignEndedSuccessfully()", +"dcf86587": "_transferWallet(address)", +"dcf8f13a": "getCurrentItemPrice(uint256)", +"dcf90793": "IcoWallet()", +"dcf91ea9": "MoftakToken()", +"dcf946c2": "getAllParentIds(bytes32)", +"dcf97439": "revealX(uint256,uint256)", +"dcf988d6": "GetFeeBalance(uint256)", +"dcf9bbec": "hasVerifiedAttributeIndex(address,uint256)", +"dcf9e836": "setProviderLimits(address,uint256,uint256)", +"dcfa6ac4": "buyChamp(uint256,address)", +"dcfa9222": "transferAccessTo(address,address)", +"dcfa9cc0": "testProxyCall()", +"dcfac095": "CPX(uint256,string,string,address)", +"dcfc3b46": "getAdIdByUser(address,uint256)", +"dcfc4430": "groomAddr()", +"dcfcda2b": "changeEscrow(address)", +"dcfda779": "allowCrowdsaleAddress(address)", +"dcfe63a9": "finishPrivateSale()", +"dcfe64e9": "SHA256()", +"dcfe8eb4": "SetIPR(string,string,address,string,string,uint256,string,string)", +"dcff2f76": "createAndJoinCDP()", +"dcff5581": "NewFeeAddress(address)", +"dcfff171": "setDelegadoDeDistrito(bytes32)", +"dd001254": "nameToTokenId(string)", +"dd00182b": "dogeAddress()", +"dd004ca8": "_endEdit()", +"dd009f48": "recursiveCeil(uint256,uint256,uint256)", +"dd00a9dc": "close(uint256,uint256,bytes)", +"dd00b605": "normalCheck()", +"dd012a15": "setIt(uint256)", +"dd01f781": "goToWork(uint256)", +"dd01f9e4": "LogNeededBalance(uint256)", +"dd022727": "getGameByIndex(uint256,bool)", +"dd029560": "CoreLayer()", +"dd02e30d": "isValidTxPaymentForKWh(bytes32)", +"dd03447f": "DiamondCash()", +"dd052519": "withdrawAllPlayers()", +"dd05db9a": "amountPerRelease()", +"dd0669d4": "getZCount(uint8,uint8)", +"dd0702d6": "changeTeamPoolForFrozenTokens(address)", +"dd083f20": "teamPart()", +"dd0860a8": "IsOwner(address)", +"dd08b5c9": "disableRedemption()", +"dd090981": "setName(uint256,uint256,bytes32)", +"dd09de33": "soldTokensOnIco()", +"dd09e13c": "totalRegistrationBonusAmount()", +"dd0a1019": "isReserveGenerated()", +"dd0ac8ac": "HoldCrowdsale(uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,address)", +"dd0b1af5": "setMythexTokenAddress(address)", +"dd0b281e": "start(address)", +"dd0b7ffe": "setBuyNowPrice(uint256)", +"dd0c189c": "updateFirstExhangeRate(uint256)", +"dd0c42ab": "updateRequiredEntries(uint16)", +"dd0cf15d": "sendFund()", +"dd0cf7d4": "stopGuess(uint32,bool)", +"dd0d74ff": "IssueBank(address)", +"dd0e2373": "voterAddresses(uint256)", +"dd0e3902": "setData_6(string)", +"dd0e7832": "transferWithChange(uint256,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"dd0f0808": "genEvent()", +"dd0f5a9a": "presalePiEnd()", +"dd0fa641": "winning_bets_total()", +"dd100efa": "getIcoEnded()", +"dd10d97e": "getPlayerWaiting()", +"dd11247e": "totalTickets()", +"dd114c22": "publish(address,uint256,address,uint256)", +"dd1219fd": "powerSwitch(bool)", +"dd12b51f": "getPermissionCheck()", +"dd137b5d": "toBase58(uint256,uint8)", +"dd13e20a": "forgeWeaponRarity(uint256,uint256,uint256,uint256)", +"dd13fd5f": "_acceptContribution(address,uint256,uint8)", +"dd14ab79": "updateTimestamp(bytes32,uint256)", +"dd151d1e": "pushAddressArray(bytes32,address)", +"dd155f3f": "removeAddress(uint256,address[])", +"dd15b66c": "MyWill(address,string,string,string,address,uint256,uint256)", +"dd15f993": "depositUSD(address,uint256)", +"dd16d981": "isCampaignValid(bytes32)", +"dd16fe09": "getCashBackObject(uint256)", +"dd17e151": "sendabr(uint256)", +"dd17eaec": "setMultipleRates(bytes32[],uint256[])", +"dd18b250": "getIdArray(address,address,string,string)", +"dd192de7": "affiliatesAddress()", +"dd193e7b": "addPerSell(uint16,uint256,bool)", +"dd1956b0": "InfiniviToken()", +"dd1a293a": "burnTokensFrom(address,uint256,uint256)", +"dd1a56a7": "WellnessToken()", +"dd1a5f0d": "_grandPVPLoserReward(uint256)", +"dd1a68c1": "report(uint16,uint16,uint8)", +"dd1aa549": "PARTNERS_WALLET()", +"dd1b1928": "getInputSize(uint256)", +"dd1b6137": "push(uint256,uint256)", +"dd1b7a0f": "nonFungibleContract()", +"dd1b89c6": "freezeExists(uint256)", +"dd1b9c4a": "POOL_FEE()", +"dd1bb3d1": "confiscateBalance(address)", +"dd1bb6f5": "TokenICOGAT()", +"dd1c35bc": "recycle(uint256)", +"dd1cdf84": "keybasePubURL(string)", +"dd1d5e64": "incGenLabFight(uint256)", +"dd1dbc3a": "calcUnMaskedEarnings(uint256)", +"dd1dc0ad": "RequestSale()", +"dd1dffb7": "getFundsCollected()", +"dd1e2651": "getUserKey(uint256)", +"dd1e4e11": "_getRandom(uint256)", +"dd1ee3d7": "whaleAddress()", +"dd1eee44": "couponTokenSaleAddr()", +"dd1f969b": "PURCHASE_AMOUNT_RATE_REFERENCE()", +"dd1fc642": "_approvedFor(address,address,uint256)", +"dd20a53e": "createTournament(uint256)", +"dd215410": "getWinnersIndex(uint256)", +"dd217ce1": "getAddusers()", +"dd218ff2": "addPreIcoPurchaseInfo(uint256,uint256)", +"dd21f395": "t_3rd_StageEnd()", +"dd22148f": "investedSumOnPreIco()", +"dd228801": "setAffiliateRate(uint256,uint256)", +"dd234dc7": "PixelBought(uint256,bytes32,uint256,address,address)", +"dd23795f": "bobMakesEthDeposit(bytes32,address,bytes20,uint64)", +"dd238603": "unsetWhitelist(address)", +"dd2407d3": "sendOnlyHash(bytes32)", +"dd242fa4": "staff_4()", +"dd253cd0": "setTransferMinimumFee(uint8)", +"dd2594af": "changeTokenApproves(uint256)", +"dd27efa0": "_packPVPData()", +"dd27fcad": "EternalCoin(uint256,string,string)", +"dd280c7a": "requestDetachmentOnPause(uint256)", +"dd288173": "doStore(uint256,uint256,bytes32)", +"dd28d12b": "ZILINGGOSupply()", +"dd28d14d": "getMembersInGroup(uint256)", +"dd294142": "institutionTimeLock()", +"dd2a07a0": "LCS()", +"dd2ac276": "genToLuck(uint256,uint256)", +"dd2ad311": "scheduleCall(bytes,uint256)", +"dd2bcae0": "DeviceIsDeactivated(address)", +"dd2c4d3d": "AdoptionRequestCancelled(bytes5)", +"dd2c888e": "balanceHistory(address,uint256)", +"dd2d2a12": "minimum(uint256,uint256)", +"dd2d4ea0": "tokensMain()", +"dd2e0ac0": "unlockToken(uint256)", +"dd2f4ebd": "getNumberOfGames()", +"dd300c6d": "getSettingChangeConfirmationCount(uint256)", +"dd301057": "noOfTiers()", +"dd3032bc": "RoundCHardCap()", +"dd30651f": "activateUser(address,uint256)", +"dd3129a9": "calculateAllBuyBackSum()", +"dd31f462": "clearDebt()", +"dd321018": "levelItemClass()", +"dd324fe7": "PieceStandardToken(uint256,string,uint8,string)", +"dd3260fc": "checkOpenTimer()", +"dd32858e": "withdrawWinner()", +"dd34abd3": "transferDirectorA(address)", +"dd34c9a3": "capFlex()", +"dd34dab8": "startTimeOfSaleLot4()", +"dd34e129": "PriceTest()", +"dd34e7be": "Vault(address,uint256,uint256)", +"dd365b8b": "pwn()", +"dd36b59c": "getPlanetOwner(uint256)", +"dd36e18b": "ContractStatus()", +"dd37ad1f": "calculateValueMantisseTrick(int256,uint64)", +"dd37be12": "mod(uint32,uint32)", +"dd3840ef": "PRIVATEPLACEMENT()", +"dd386239": "manuallySetNumRewardsAvailableForChildAddress(address,uint256)", +"dd397e03": "preIcoTarget()", +"dd3b014c": "getLatestVersion(bytes32)", +"dd3bd008": "getReadyTime()", +"dd3c407f": "_set7()", +"dd3ccd84": "percentForHelpCoin()", +"dd3d0bee": "changelp18(address)", +"dd3e5f47": "_sharesValid(uint256,uint256)", +"dd3ef6a6": "deathData_v12()", +"dd3f2893": "_processTokensPurchase(address,uint256)", +"dd3f8608": "FloatGameToken(bytes32,address)", +"dd3f9526": "_controller()", +"dd3fa136": "ship(string)", +"dd3ff4f6": "sendFeeToWallet(address,address)", +"dd413da0": "Vendi(uint256)", +"dd4198f4": "getScore(uint8,bytes32)", +"dd41cc2f": "getQuestionCount()", +"dd41e1c7": "redeemFrom(address,uint256,string)", +"dd420fc5": "auditorComment()", +"dd4253f7": "MeosunToken()", +"dd42c228": "totalLockedFund()", +"dd42faf7": "window3TokenExchangeRate()", +"dd4314b2": "unique_players()", +"dd443c7b": "cancelMarkets(uint256)", +"dd449a83": "allower()", +"dd44a15c": "allocateTokensForContributor(address)", +"dd450d4e": "transferFromBankToAccount(bytes32,uint256)", +"dd457c7f": "balancesSet()", +"dd45e247": "getUserListSize()", +"dd462e2d": "withdrawAmountHashing(uint256,uint256)", +"dd467064": "lock(uint256)", +"dd473d2b": "withdraw_all()", +"dd47fe15": "sendToTarget(address,address,address,address,uint256)", +"dd48087f": "balanceOfContract(address)", +"dd486c35": "ownerWantMyEther()", +"dd489e44": "setSystemStartingPriceMin(uint256)", +"dd48d911": "totalSellOrders()", +"dd49756e": "depositTokens(uint256)", +"dd49f1c8": "BooMToken()", +"dd4a055b": "buySale(uint8,address)", +"dd4a8361": "setWhitelistEntries(address[],bool)", +"dd4a8f61": "contractorManager()", +"dd4aac73": "SELLER_STEP_2_GET_PASS()", +"dd4aeb92": "manageMinting(bool)", +"dd4bc101": "weightOf(address)", +"dd4bd4b7": "getProjectMilestoneStartWindow(bytes32)", +"dd4c97a0": "approveNode(address)", +"dd4dfb62": "kUnit()", +"dd4e6993": "leerGat()", +"dd4e8823": "poiLockup()", +"dd4f1f2a": "multipleHomocide()", +"dd4f5f0f": "withdrawBBO()", +"dd4f8f74": "roundStartTime()", +"dd506e09": "changeRound()", +"dd50e9d4": "clearSummonNum()", +"dd510361": "setTransformTarget_pool(address,uint256)", +"dd5108d1": "addressToTotalDonationAmount(address)", +"dd510e98": "newLockUpAddress(address)", +"dd515cdb": "checkVotingForStartPayment()", +"dd51faa2": "setGas(uint256)", +"dd523559": "devuelveAddressUsuario(bytes32)", +"dd5244b4": "testTryProxyCallWithValue()", +"dd53c301": "mintContract(address,address,uint256)", +"dd54291b": "tokenCap()", +"dd54a62f": "content(string)", +"dd54cc0c": "advBtyWallet()", +"dd550958": "getOwnerAddress(uint256)", +"dd55f11b": "deleteCitizen(uint256)", +"dd55fba0": "createSecondPromoCollectible(uint256,address,uint256,address)", +"dd563726": "GoingGems(uint256,address)", +"dd565e76": "pushDecoration(uint256)", +"dd57d5c5": "setTrust(address)", +"dd585e7b": "newincomelog(uint256,string)", +"dd5891b3": "join(address,string,string)", +"dd58f5d9": "isIcoFinish()", +"dd592a32": "topUpAmount()", +"dd595328": "untransform(uint16)", +"dd59c954": "mintBatch(bytes32,bytes32,bytes32,bytes32,bytes32,address)", +"dd5a4efd": "GameRefunded(uint256,uint256,uint256)", +"dd5a612c": "getCashPrior()", +"dd5a7f40": "getContractCreationTxGasprice()", +"dd5ac448": "payoutReferrer()", +"dd5b23df": "transferBond(address,uint256)", +"dd5b29b7": "toB32(uint256,bytes)", +"dd5c2678": "KappyKoin()", +"dd5ca673": "setMintRequestStringMap(uint256,int256,string,string)", +"dd5cba71": "CHXTokenSale()", +"dd5dcd52": "findActiveRange(address)", +"dd5dd552": "_cancelOrder(address)", +"dd5dd8f2": "timeGap()", +"dd5ddfe8": "setPermission(address,uint8)", +"dd5df59c": "nonEtherBuy(address,uint256)", +"dd5e403c": "IcoFund()", +"dd5e5cb5": "changeMaxDrawingTime(uint256)", +"dd5e8410": "jackpotMedium()", +"dd5ea752": "burnAndConvertToQUA(uint256)", +"dd5f63fd": "niceguy3()", +"dd5f9a22": "STSTEST5()", +"dd604fcb": "EgyptianPound()", +"dd60b394": "giveFreezePermission(address[],bool)", +"dd60c898": "participantsCount()", +"dd611e8d": "Setter(uint256)", +"dd616a45": "ZeroCap()", +"dd62b1a0": "LalaToken()", +"dd62ed3e": "allowance(address,address)", +"dd62f6f3": "getPayoutDistributionHash()", +"dd63133a": "onPurchase(uint16,uint16,uint8,address,uint256)", +"dd6350a0": "withdrawContributed()", +"dd63f7d0": "functionReturningValue(bytes32)", +"dd644f72": "basisPointsRate()", +"dd66111d": "gameRoundEnd()", +"dd67a360": "OrderLifeCycle()", +"dd681e51": "ecosystemGrantsReserveWallet()", +"dd68b386": "TransactionRefundedAfterExpiry(uint256,uint256)", +"dd6996a3": "LOL3()", +"dd6ad764": "withdraw(uint8,address)", +"dd6afdfe": "Chou(uint8)", +"dd6b2fc6": "isBarCodeData(bytes32)", +"dd6b996d": "endDividendPool()", +"dd6c1394": "GazeCoinCrowdsaleWhitelist()", +"dd6e66d0": "tokenHoldersTotal(address)", +"dd6e8e6a": "_markRedemptionFulfilled(bytes32)", +"dd6ed59a": "initSubPayees(bytes32,address[],int256[])", +"dd6f0f19": "ApplicationIsInDevelopment()", +"dd719d2c": "airDrop(address,address,address[],uint256[])", +"dd7202d8": "getQuantum(uint256)", +"dd722127": "adminRemove(address,string)", +"dd7221e8": "LogPause(bool)", +"dd727ea6": "runJackpot()", +"dd729530": "add_shield(uint16)", +"dd72ae4e": "availableICO_w1()", +"dd73d17b": "getComment(address,address)", +"dd751310": "isRegisteredPublicKey(uint256)", +"dd75e7ff": "getENow()", +"dd75ecce": "getVestingAmount(address,uint256)", +"dd76d2fa": "setIdArray(address,uint256,string,string,address[])", +"dd787875": "setupSale(uint256,uint256,address)", +"dd791ce5": "tokenDec()", +"dd796b07": "indexOfCardAddress(address)", +"dd79cc6a": "secretBidCount()", +"dd79e33e": "splitIdentifiers(string)", +"dd7a1722": "accountLocked()", +"dd7aabc8": "_transferHelper(address,uint256)", +"dd7b3e97": "buyoutsEnabledFromTimestamp()", +"dd7b3f26": "bytes32ToBytes(bytes32,bytes32)", +"dd7bff82": "removeCandidates()", +"dd7d168a": "getEthBullet(string)", +"dd7d6bb0": "getLpAskPrice()", +"dd7db870": "addFreeVineyard(address)", +"dd7dde04": "maxTeamSize()", +"dd7e11be": "InternationalPaymentToken()", +"dd7eba7a": "ValentineRegistry()", +"dd7f2225": "MiCarsICO()", +"dd7f88ee": "date_start()", +"dd80f2a6": "Vibrancier()", +"dd817963": "lastBlock_f0Hash_uint256()", +"dd819721": "setNFTbyTokenId(uint256,string,bool)", +"dd838808": "endMigrationPeriod()", +"dd83a303": "cancelMortgage(uint256)", +"dd83c825": "backersAddresses()", +"dd8432fe": "getRemainingTokensForSale()", +"dd847dfe": "get_contract_money()", +"dd84acaa": "addressesAllowed(address)", +"dd859739": "SetBeneficiary(string,string,string,string,string,string,string,string,string,string,address,string)", +"dd85b1dd": "setServiceProvider(address)", +"dd85b82e": "EthealWhitelist(address)", +"dd8617ca": "payether(address,uint256)", +"dd86210a": "medalSymbol()", +"dd864883": "changeApprovalCore(address,uint256,uint256)", +"dd86f719": "COMMUNITY_BOUNTY_HOLDER()", +"dd87c9f0": "exeStatus()", +"dd897767": "isRealWorldPlayerMintingEnabled(uint128)", +"dd898fa2": "MinterStorePoolCrowdsale()", +"dd89daa5": "getBBFarmID(bytes4)", +"dd8a0c56": "vacate(address)", +"dd8ad12a": "executeAppReturn(bytes32)", +"dd8b0ff6": "rmax(uint128,uint128)", +"dd8bd8cb": "Patient(address)", +"dd8bf1f5": "setDistrict0xNetworkToken(address)", +"dd8c8855": "addWarehouse(uint256,uint256,bytes32)", +"dd8d11e2": "isValidSubscription(bytes32)", +"dd8d149d": "tokenCrowdsaleRate()", +"dd8d1cef": "totalUserCampaigns(address)", +"dd8d4c40": "getCallers()", +"dd8e668c": "FUND_FRAC_BOT()", +"dd8ee602": "log(bytes,uint256)", +"dd8ef66b": "cancelTrade(address)", +"dd8f3195": "HyperChipsToken()", +"dd8fee14": "regulator()", +"dd905097": "organisationWallet()", +"dd90c403": "getAccountFeed(address,uint256,uint256)", +"dd9180ea": "tokenReservationAllocated()", +"dd91f1f5": "toggleAuthorization(address,address,bytes32)", +"dd924594": "distributeAirdrop(address[],uint256[])", +"dd92a8b0": "confirmSell(uint256)", +"dd932c5b": "voteEnd(uint256)", +"dd93890b": "setMeta(uint256,bytes32,bytes32)", +"dd939155": "recordUpdate(address,uint256,int256,bool)", +"dd93c74a": "setInactivityReleasePeriod(uint256)", +"dd946033": "right81(uint256)", +"dd952089": "getTaxDataSignatures()", +"dd9546b1": "minInvestments()", +"dd9555f1": "withdrawBidForCollectible(uint256,uint256,int256)", +"dd955c44": "sellEth(address,uint256)", +"dd955d4c": "rawTransfer(address,bytes32)", +"dd9568b0": "messageInfo(uint256)", +"dd96440e": "DDD()", +"dd967b0b": "refundLoan()", +"dd9815a2": "claimPlayerProfit()", +"dd982bdf": "FaceBookCoin()", +"dd999ade": "cleanUpRounding()", +"dd9a76ff": "pay(address,address,uint256,uint256)", +"dd9a9e2c": "CORReserveAccount()", +"dd9bc47e": "finish(address,address)", +"dd9bf998": "authorizeTradingAccounts(uint256)", +"dd9bfb04": "bakanceOfBeer(address)", +"dd9cfc4b": "tokenSalesByAsset(address,uint256)", +"dd9d687e": "namehash(bytes32)", +"dd9dd688": "calcStopPrice()", +"dd9e3848": "NewHolder(address)", +"dd9e4094": "makeMemChange1(uint256,uint256,uint256,int256)", +"dd9e7b1b": "max_raised_amount()", +"dd9ea299": "getLastDepositId()", +"dda0268d": "queryBetUnit()", +"dda0c1d6": "adminAmendBallot(uint32,string,uint256,uint256)", +"dda0e4ba": "finishAllGames()", +"dda0f1bb": "sendToTicker()", +"dda13903": "GoldOwner()", +"dda2d923": "setIcoAddress(address,address)", +"dda3342b": "ReplicatorFactory()", +"dda342bb": "list(address,uint256,uint256)", +"dda38380": "CFTRAD()", +"dda3baff": "showlevel(address)", +"dda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", +"dda477fd": "walletTransfer(address)", +"dda4fa8f": "setReserveWallet(address)", +"dda5062c": "userIds()", +"dda51424": "right80(uint256)", +"dda55b18": "GxTraders(address)", +"dda5d5cb": "saosao2()", +"dda5d799": "PRT()", +"dda6020b": "freezeMintUntil()", +"dda61c00": "getIsSecurityWalletReg(address)", +"dda63359": "setSellToContract(bool)", +"dda69410": "add(address,uint16,uint8,uint8)", +"dda6abb8": "sendToVestingContract()", +"dda6c3ce": "checkWinning(uint256)", +"dda6c7cf": "setActiveUserListLength(uint256)", +"dda72292": "BONUS_TIER_6_LIMIT()", +"dda81c15": "TIER_4_BUYIN()", +"dda89912": "setExchangeDetails(bytes32,bytes32)", +"dda943d6": "maxSet()", +"dda9939c": "Store(address[])", +"dda9f1a3": "HODLRegistration()", +"ddaa26ad": "START_TIME()", +"ddaa4c48": "granularPreallocate(address,uint256,uint256)", +"ddaa7e02": "GetTickSize3(uint256)", +"ddaaff27": "generateSection()", +"ddac6654": "validUntil()", +"ddad2ffe": "newNode(address)", +"ddad3ca1": "tokenMaxCap()", +"ddae2e26": "__save128(uint256[])", +"ddafaf4d": "reclaimNtvuEther(uint8)", +"ddb0fdc0": "addAvailablePack(uint256,bytes4)", +"ddb12a35": "countPayOrder()", +"ddb141c2": "execute_transfer(uint256)", +"ddb1bdc8": "credit(address,uint256,uint256)", +"ddb1ede9": "canceledBookingfc(uint256)", +"ddb22537": "withdrawDeadBids()", +"ddb25d71": "GBPproxy()", +"ddb31cea": "TEAM_TOKENS_LOCK_PERIOD()", +"ddb4897a": "NitroCoins()", +"ddb49f98": "SpiceNinja()", +"ddb5b3ac": "SellTokens()", +"ddb62333": "readTaskState(string)", +"ddb6af4c": "setTimeStamp(uint256,uint256)", +"ddb6e116": "vote(uint16)", +"ddb72188": "chAirDropLimit(uint256)", +"ddb792a0": "admin_from_To_transfer(address,address,uint256)", +"ddb863be": "multiPartySend(address[],uint256[],bytes)", +"ddb8b099": "itemNameOf(uint256)", +"ddb8f090": "GlobalTransfersUnlocked(bool)", +"ddb9341b": "SetBuildingDataArray(uint256[])", +"ddb9769c": "_settingsApplied()", +"ddba8c45": "verifyEscrow(uint256,address,address)", +"ddbb4ab4": "_bytes32ArrayToString(bytes32[])", +"ddbbc35c": "searchByName(string)", +"ddbcb5cb": "registerAs(address,bytes32,address)", +"ddbcb5fa": "MIN_AMOUNT()", +"ddbcf3a1": "ensNode()", +"ddbdf242": "traders()", +"ddbe7c41": "NeverEndingApp()", +"ddbe8f09": "voteEnd()", +"ddbe92d3": "setBondFundAddress(address)", +"ddbf5856": "completeLottery()", +"ddbf5c8f": "checkFee(uint256,uint256)", +"ddbfbdbf": "ETHERKUN()", +"ddbfd63e": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint32,uint8,uint8,uint8)", +"ddc002e8": "TokenSold(address,uint256,uint256,bool,bool)", +"ddc0db14": "AmountBonusPricing(uint256[])", +"ddc12019": "_triggerCooldown()", +"ddc23059": "SchemeRegistrar()", +"ddc23ddd": "erc165InterfaceSupported_NoCache(address,bytes4)", +"ddc33450": "MNLTGUNE()", +"ddc35950": "setOwner(uint32,address)", +"ddc3e344": "_sellPutToClose(uint256,uint256,uint256,uint256,address)", +"ddc4aacf": "token4Gas()", +"ddc53c2c": "lastFreeBlock()", +"ddc541dd": "publisher(address)", +"ddc63262": "harvest(uint256)", +"ddc645f8": "CollateralReturned(uint256)", +"ddc6a171": "allowance(address,uint256)", +"ddc6f83e": "setIdent(string)", +"ddc6ffaa": "SecuredLedgerToken()", +"ddc86af6": "extractById(int128)", +"ddc8bb54": "PriceOf1000TokensInUSD()", +"ddc8d7a6": "_removePauser(address)", +"ddc983f2": "bonusEnds50()", +"ddca15de": "ServiceContract()", +"ddca337e": "SetMaxChequeValue(uint256)", +"ddca3f43": "fee()", +"ddcb1a94": "serviceBurn(uint256)", +"ddcbf794": "addScore(uint256,uint256)", +"ddcd3681": "getRemainingTrialDrops(address,address)", +"ddcd7ee9": "lastJson()", +"ddcd8763": "requestBuywithETH()", +"ddcd887b": "testMiddleTranchNotExact()", +"ddceafa9": "recovery()", +"ddcfa217": "newRecurringBillingContract(address)", +"ddd1002e": "LogStart()", +"ddd113f4": "numMarriages()", +"ddd1527b": "transferFromOwner(uint256)", +"ddd1b67e": "getCurrentMonth()", +"ddd35de8": "tokensPerBTC()", +"ddd41ef6": "transferDirector(address)", +"ddd505f6": "addTransaction(address,uint256,uint256,string,uint256,bytes)", +"ddd53cc5": "setupICOPrices(uint256,uint256,uint256,uint256)", +"ddd57872": "setTimeStamp(string)", +"ddd5e1b2": "claim(uint256,address)", +"ddd5e68b": "transferEthersToOwner(uint256)", +"ddd641b0": "tierName(uint256)", +"ddd6d79a": "remainingWithdraw()", +"ddd7c879": "claimWei(uint256)", +"ddd81f82": "registerProxy()", +"ddd83259": "_normalDistribution(uint256,uint256)", +"ddd85dd8": "Freda()", +"ddd9537d": "getUsdEthExchangeRate()", +"ddda66db": "setMerchantWallet(address)", +"dddac167": "VotingFinished(uint256,uint256)", +"dddaf901": "wcapToken()", +"dddb983b": "testFailCreateWithParentsForeignNotInUse1()", +"dddbb753": "getAdsCount()", +"dddd3594": "ConsentDirective(address,uint256)", +"dddd3de8": "getvalid()", +"dddf31f1": "lastClaims(address)", +"dddf33cc": "offerCatForSale(uint256,uint256)", +"dddfb2f2": "buyEIT()", +"dddff84c": "StandardCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"dde0523f": "changeVisitCosts(uint256,uint256,uint256,uint256,uint256,uint256)", +"dde05a67": "TinaCoin()", +"dde070e8": "getClaimAmount(address)", +"dde0d085": "mathTransfer(address[],uint256)", +"dde107c2": "stampIndextotransactions(uint256)", +"dde1589c": "icoTokensPrice()", +"dde26ec9": "createGrant(address,uint256,uint256)", +"dde27e29": "distributeTokens2(address[],uint256[])", +"dde2b332": "setTransferFrozen(bool)", +"dde2fc22": "DLCToken()", +"dde37357": "MultiOwner(address[],uint256)", +"dde3ae6d": "changeAssetOwner(address)", +"dde41aa9": "canonizedRegistry()", +"dde42067": "paidTokensOf(address)", +"dde43cba": "REVISION()", +"dde49979": "unlockFor(address)", +"dde4a70b": "getSell(uint256)", +"dde4dc8e": "Show_Patient(uint256,uint256)", +"dde4f41a": "releaseMultiWithStage(address[],address[])", +"dde5a65d": "purchase(address,address)", +"dde68e2e": "refundETHToCustomer(address,uint256)", +"dde6b340": "calculateLoanerInterest(uint256)", +"dde6e256": "getCarProduct(uint32)", +"dde6f449": "GlobfoneCoin()", +"dde6f484": "setMainAccount(uint256,address)", +"dde7af32": "warriorGold()", +"dde82c2d": "coinsRemaining()", +"dde8535f": "getMemberStatus(address)", +"dde8b7ac": "setFeeAbsMaxGlobal(uint256)", +"dde8c8d6": "getUserVote(uint256,uint160,bool)", +"dde8dab2": "BEERCOIN()", +"dde9394c": "returnOwners()", +"ddea6df3": "isHumanToken(address)", +"ddeae033": "claimFor(address)", +"ddeae8ca": "markDone(uint16)", +"ddeb5094": "pause(bool,bool)", +"ddeb63b5": "setEscrowAddress(address)", +"ddec280e": "fetchAssetPrice(address)", +"ddec60d9": "Parents()", +"ddecc5d9": "getTradingTime()", +"dded49cb": "setadmin(address)", +"dded5dd8": "isAdminForGame(uint256,address)", +"ddedfc19": "TheLightToken()", +"ddeed1a4": "projectFailed(uint16)", +"ddef6421": "adventureContract()", +"ddef880f": "getDeepInfo(uint256)", +"ddef8f29": "HOTTO()", +"ddefdb90": "fillOrKill(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", +"ddf0432f": "startPresale(address,uint256)", +"ddf063c8": "collectedEth()", +"ddf08ebc": "checkCaptain(address,uint32)", +"ddf09e89": "NelsonChenTestToken()", +"ddf0c070": "addBalances(address[],uint256[])", +"ddf187b0": "dogFight()", +"ddf1be5f": "setIII_R1(uint256)", +"ddf252ad": "Transfer(address,address,uint256)", +"ddf25ce9": "renExBalancesContract()", +"ddf27259": "LogCertificationDbUnRegistered(address)", +"ddf29872": "teamvalue()", +"ddf2d8cd": "setDesignatedReportReceivedTime(uint256)", +"ddf31394": "lockToken(address,uint16)", +"ddf33cc7": "TEAM_TOKENS1()", +"ddf34ab0": "getAgreedCompletionDate(bytes16,address,address,uint256,uint256)", +"ddf41bf4": "migrateHolders(uint256)", +"ddf4a032": "changeSettings(uint256,uint64,uint8,uint8,uint8,uint8)", +"ddf4b011": "TIME_UPDATE(bytes32)", +"ddf5cc29": "ActivationWithdrawal(address[2],uint256[8],uint256)", +"ddf6e5a0": "GEN_0_LIMIT()", +"ddf7e1a7": "tokenToTokenSwapInput(uint256,uint256,uint256,uint256,address)", +"ddf9d613": "getCustomBuyerLimit(address,address)", +"ddfa3a60": "getCrystalWeights()", +"ddfa53e4": "hardcapInWei()", +"ddfafa96": "getRates(address,uint256)", +"ddfb8b9b": "Start_quiz_qz(string,string)", +"ddfc50df": "setByte(bytes1,bytes8,bytes32)", +"ddfd72f8": "setHashByWriter(bytes32,address,bytes32)", +"ddff0346": "_getFechHpbBallotAddrInterface()", +"de002aa6": "pushWork(uint256)", +"de0099a3": "heldTokens(address)", +"de009e7f": "offerToChannel(address,uint256)", +"de00a094": "controlled()", +"de0123bf": "AddMultipleAddresseseToWhitelist(address[])", +"de01ec28": "setStateMigrated()", +"de024515": "DEMT()", +"de02ae96": "bytes32ToBytes(bytes32[],bytes32)", +"de02f1fc": "PER_ACCOUNT_ADDITIONAL_TOKENS()", +"de0498d3": "Date_Started()", +"de05905b": "doSetName(bytes32)", +"de06b7f4": "doTakerPayment()", +"de06ef49": "whaleStartTime()", +"de07a886": "DEFROST_MONTH_IN_MINUTES()", +"de080401": "SethTokenPurchase(address,address,uint256,uint256)", +"de089aee": "userMaximumPurchaseAmountNg(address)", +"de08a6d8": "metaTransfer(address,uint256,bytes,uint256,uint256)", +"de08c364": "removeAdminister(address)", +"de08f188": "storageStep()", +"de090b25": "LockInExpiry()", +"de0a1c5d": "changeVuePayETHDestinationAddress(address)", +"de0a7cc6": "purchasedTicket(address)", +"de0b18f2": "getAssetAttachment(uint256)", +"de0b5af2": "BONUS_COEFF()", +"de0bffc2": "GlobaLiquids()", +"de0cf58b": "callerAllocationStartBlock()", +"de0d0802": "getWeightAndUpdate(address)", +"de0d50e4": "incGen0PresaleCount()", +"de0d7083": "Alter_MediatedTransaction(uint256,bool)", +"de0e9a3e": "unwrap(uint256)", +"de0f2b49": "setCertifierStatus(address,bool)", +"de0f725d": "removeContract(address,address)", +"de0fe922": "addHashType(string)", +"de0ff7c5": "getEther()", +"de1079b3": "vestFromTime()", +"de10f04b": "eraseNode(bytes32[])", +"de117fb1": "buyDirector(uint256)", +"de11823a": "GoldAllocation(uint256,uint256)", +"de11892b": "isAuthorized(address,bytes32)", +"de11c94a": "factoryContract()", +"de121554": "addLike(uint256,bool)", +"de12b52c": "getTopBlock()", +"de12b839": "GetPie()", +"de13bec6": "getApiByName(string)", +"de1446e8": "view54()", +"de14bbf7": "randomGen(uint256,uint256)", +"de14c818": "approvePayment(uint256)", +"de14d323": "confirmAlice(uint256)", +"de14e54d": "setActivity(address,bool)", +"de150d5d": "throwSlammer(bytes32,bytes32,bytes32)", +"de154352": "getBlocksTillMattew()", +"de154761": "upgradeManager()", +"de1565fe": "MainnetProtocol()", +"de1682a5": "PTLC()", +"de170570": "getTiers()", +"de176643": "_advisorsSupply()", +"de179108": "allSaleCompleted()", +"de17dfa9": "setCryptaurToken(address)", +"de1881a8": "processingFee()", +"de18af92": "getEmployerInvoices(address,uint8)", +"de18bec6": "BeneficiaryChange(address)", +"de18dd18": "refuseSale(address[])", +"de192a20": "ARChain(uint256,string,string)", +"de1955df": "reclaimByReceiver(address,bytes32)", +"de1ac2fd": "checkOperator(address)", +"de1b0486": "withdrawFrom(address)", +"de1b27f5": "SALE_ALLOCATION()", +"de1bee1b": "dogexSupply()", +"de1c237f": "getarg_2_input()", +"de1c78fb": "batch_send(address[],uint256)", +"de1c7f70": "getEns(address)", +"de1c977a": "testPreDistribute()", +"de1e46e6": "placeBet(uint256,uint256,uint8,int256)", +"de1e8de8": "MINIMAL_INVESTMENT()", +"de1eb2d0": "withdrawQuantity()", +"de1f892a": "adjust_ERC223Transfer(bool)", +"de1ff163": "isCurrentOrPastAccountReader(address,address)", +"de2037a7": "createSensor(uint256,uint256,uint256)", +"de20555f": "getGoldStatusCustodianverify(address)", +"de20bc92": "Stake()", +"de2111e2": "got()", +"de217625": "setAssets(address[])", +"de2184bf": "voting(address,uint256,string)", +"de21cd78": "allItems(uint256,uint256)", +"de21dc6f": "fundit(address)", +"de2237d3": "getVotersLength()", +"de223f63": "transferPauseOperator(address)", +"de242ff4": "allowance()", +"de24d3ba": "WEBCOIN()", +"de255778": "relocationActive()", +"de26bbb2": "percentage(uint256,uint8)", +"de271ee0": "depositAngelInvestmentEth()", +"de272835": "advisorIssue(address,uint256)", +"de2831f2": "getRemainingBonus()", +"de283b21": "current_transferred()", +"de28431c": "priceLastUpdate()", +"de287359": "acl()", +"de28ba54": "MorpheusTokenFAKE()", +"de28fc1d": "icoSender()", +"de2904de": "CapUpdated(uint256,bytes32,uint256)", +"de292789": "getResult()", +"de2994c4": "unfreezingTimestamp()", +"de2a4a43": "RLLToken(uint256,string,string,address)", +"de2a9778": "createProxy(address,address,uint256,uint256,uint256,uint256,uint256,address,uint256,string,uint8,string,bool)", +"de2b2cd2": "changeDonor(address)", +"de2b4473": "setSaleDepositsAllowed(bool)", +"de2c1d09": "SendERC20ToDex(address)", +"de2c1e85": "_packWarriorCommonData(uint256,uint256)", +"de2c75ee": "getIncidentByUUId(bytes32)", +"de2e6136": "sendGift(address)", +"de2ed893": "totalDonations()", +"de2f827e": "saveChickenOf(address)", +"de301e8c": "getRTEBonusTokenVaultBalance()", +"de3039d2": "findPrecedingPrice(uint256)", +"de306341": "createMineForToken(uint256,uint256,uint256,uint256,uint256)", +"de31482a": "tokenHasDistributed()", +"de318242": "Mani()", +"de326c1e": "movePatentData(uint16[],address[],uint256[],bool[],uint256[],uint256[],uint256[])", +"de329396": "ownerSetMaxProfit(uint256)", +"de32abd1": "mulExp(uint256,uint256)", +"de33d8d8": "Print(string,address)", +"de341661": "unpause_2()", +"de346a40": "whiteListERC20(address)", +"de34bacd": "cardPrice()", +"de35a696": "Child(string,address)", +"de35be81": "submitSellOrder(bytes32,uint256,uint256)", +"de377015": "maxIcoTokensSold()", +"de37ca12": "MyFirstSmartContract()", +"de37e977": "thisTokenBalance()", +"de38460b": "nextSaleAgent()", +"de3849be": "owner_AirdropUpdateToken(address[],uint256)", +"de385438": "calculateEmission(uint256,uint256)", +"de38a5f4": "verifyKYC(bytes32,bytes32,bytes32,bytes32,bytes32)", +"de38c771": "setFundingAmount(uint256)", +"de38eb3a": "MAX_TIMEOUT()", +"de3989f5": "CalledA()", +"de39acea": "get32(bytes,uint256)", +"de3a8511": "teamKeepingSupply()", +"de3ab731": "evaluateAfterQuery(bool,uint256)", +"de3b5061": "updateBuyType(address,address,int256)", +"de3b653a": "IsReleaseToken()", +"de3bcb97": "takeAll()", +"de3bec59": "baseowner()", +"de3d0290": "gwtoken(uint256,string,uint8,string)", +"de3dac84": "freezeAccount(uint256)", +"de3e3492": "setRebase(uint256)", +"de3ea04a": "SAGAToken()", +"de3f18e2": "winningTeam()", +"de3f26eb": "oracleRegistryContract()", +"de3fbdee": "addRate(uint256,uint256)", +"de400629": "createListingWithSender(address,bytes32,uint256,address)", +"de4125b0": "addWineryOperationEndorsement(string,uint256,bool,string,string)", +"de4138de": "getCurrentStateId()", +"de41e1a1": "assignOwner(address[],uint256,address)", +"de42dcc9": "LuckCashToken(uint256)", +"de42f045": "auditTimeoutInBlocks()", +"de43844b": "fixedExp(int256)", +"de44a17e": "setNewModifier(address)", +"de44bf01": "getCreateUniverseParentUniverseValue()", +"de459c9b": "RATE_SALESTAGE6()", +"de469071": "hashBetSum()", +"de47864c": "testSafeAdd(uint256,uint256)", +"de47e0bf": "withdrawBaseETH()", +"de48ff52": "updateState(int128,uint128,uint8,bytes32,bytes32,bool)", +"de494190": "getCommentIdByAd(uint256,uint256)", +"de49bd54": "BurnTokensAndSetAmountForNewBlockchain(address)", +"de4b3262": "setBasePrice(uint256)", +"de4b3a73": "defaultText()", +"de4b4073": "devSend()", +"de4b45fa": "finalizeReclaim()", +"de4b51eb": "setTrustedAddress(address,address,bool)", +"de4c0574": "migrateAllowancesFromLegacyRep(address[],address[])", +"de4cd094": "convertToDecimal(uint256)", +"de4d51a5": "setSaleType_Airdrop(uint8,uint8,uint32,uint8,int256,uint256,int256)", +"de4f4d2b": "totalEthHandled()", +"de4f9383": "transferEtherFrom(address,address,uint256)", +"de5007ff": "sweepMsg()", +"de50f2fe": "KycClaveChain(address)", +"de5101af": "timestampToDate(uint256)", +"de51f57e": "setValueStep3(uint256)", +"de52ccbe": "NGX()", +"de530bbb": "EMISSION_FOR_SALESTAGE4()", +"de534744": "tokenDistribution(address,uint256)", +"de563b89": "removeRatio()", +"de56a245": "editionOptionalCommission(uint256)", +"de571e48": "getCollectedAmount()", +"de575a02": "dismissRoom(uint256)", +"de576c8a": "CREATED_STAR5()", +"de5785d5": "feesAvailableForWithdraw()", +"de578a90": "ApodTokenContract()", +"de57e8b4": "releaseEscrow(bytes16,address,address,uint256)", +"de583ed3": "_improveCard(uint256,uint256,uint256)", +"de5866f9": "s19(bytes1)", +"de589fa9": "TokenLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"de58d156": "createAsset(string,string,string)", +"de5990ca": "INTREPID_VOUCHER_LIMIT()", +"de59a5cb": "SaleClockAuction(address,address,address,uint256,uint256)", +"de5ac86d": "createWager(bytes32)", +"de5b71f7": "distributeReward(address,uint256,uint256)", +"de5b9987": "getUnitDefenseMultiplier(address,address,uint256)", +"de5b9e4f": "BitMEDSmartToken()", +"de5bb5a2": "nEdits()", +"de5c995e": "Y2_lockedTokenReleaseTime()", +"de5cb7ed": "DutchAuctionPoD()", +"de5cf247": "giveTokens(address,address,uint256,string)", +"de5d953a": "logSingleIndex(bytes,bytes,uint256)", +"de5da0cf": "nextGiftId()", +"de5dc6c8": "tokenCapped()", +"de5dead6": "reduceInventories(uint256,uint256,uint256,uint16)", +"de5e21df": "timerStart()", +"de5e7ac4": "getOutcome(address)", +"de5eaa83": "donate(uint8,bytes32,bytes32)", +"de5eeb6e": "preICOAddress()", +"de5f3ec6": "buy10Price()", +"de5f5517": "lad(bytes32)", +"de5f72fd": "faucet()", +"de5f9866": "getTokensLeft()", +"de605ecc": "changeSettings(uint256,uint256,uint32)", +"de60a67d": "maxCapIco()", +"de620676": "_sellprice()", +"de622de4": "tgeStarted()", +"de62319c": "IQT_CONTRACT_ADDRESS()", +"de625d1f": "totalReceivedWei()", +"de628e3b": "tokensCalculator(uint256,uint256,uint256,uint256)", +"de629235": "getCertificationDocumentAtIndex(address,uint256)", +"de637901": "poptxs(address,uint256)", +"de63a530": "setAddressAndFunctionIdVoteRules(address,address,bytes4,bool,uint256[5])", +"de63dc35": "setPartnerFromPreICOAffiliate(address[],bytes32[],uint256[])", +"de640e19": "Investment(uint256)", +"de642b5a": "cbdc(uint256,string,string)", +"de644ebd": "firstMintRound0For(address[],uint256[],uint8[])", +"de648b87": "setSKLContractAddress(address)", +"de656b71": "BecomeSnailmaster()", +"de658979": "_updateCompany(bytes32,bytes32)", +"de6595b2": "WhitelistedUpdated(uint256,bool)", +"de65da20": "purchaseGame()", +"de661217": "left75(uint256)", +"de667e70": "setBuyer(uint256,address)", +"de66b5f7": "unidentifiedSaleLimit()", +"de66ed0d": "getTargetReporterGasCosts()", +"de6746a5": "founders(address)", +"de6764ba": "Swanroll()", +"de67fd05": "deleteLayer(uint256)", +"de683a7d": "change(address,uint256,address)", +"de68c43f": "noFee(address,address,uint256)", +"de6a1b19": "landmarkPoolTotal()", +"de6a9d83": "CheckResultCalled(bytes32,address)", +"de6ab39c": "INITIALSUPPLY()", +"de6b8a2e": "getOrderLength(address)", +"de6b978d": "POA20(string,string,uint8)", +"de6baccb": "transferWithLock(address,uint256,uint256)", +"de6bd0e8": "redistributeEthForAddresses(uint256,address[])", +"de6c4f4b": "reset(address,address,address,address,address,address,address)", +"de6ca3f0": "_setCommit(uint256,address,bytes32)", +"de6cdd2e": "getExchangeInfo(bytes32)", +"de6eb4be": "NBAONLINE()", +"de6ed7dc": "GoldIssueBurnFee(string)", +"de6ef007": "amountTokensPerEth()", +"de6f24bb": "sendMessage(address,string)", +"de7086f6": "TemplateToken()", +"de70b36c": "RevokeViewingPrivelege(address)", +"de718e3f": "initialWeiRais(uint256)", +"de71c467": "presentObject(bytes,bytes32)", +"de71d56b": "getStandartComponent(uint256,uint256)", +"de72a01d": "Agt()", +"de72b83d": "totalBountyAmount()", +"de72cab0": "finishBonusPeriod()", +"de733397": "allowClaiming()", +"de7337a1": "changeFloor(uint256)", +"de7383e0": "handleTokensReceived()", +"de742c2d": "getFreeAlien()", +"de74880c": "platformUnfreeze()", +"de74e57b": "listings(uint256)", +"de750f6f": "getNine(uint256)", +"de753fe5": "PrecioUnidadPase()", +"de758458": "IPFSProxy(address[],uint256,uint256)", +"de75c36e": "addressMasterNodes()", +"de763a40": "getEtherFeeForPriceInCandy()", +"de77229f": "MinterOwnershipTransferred(address,address)", +"de77743d": "needsbeneficiary(uint256)", +"de7874f3": "plyr_(uint256)", +"de78be15": "onSoftCapReached(uint256)", +"de78e78a": "tokenLaunched()", +"de78ed85": "actual_balance(address)", +"de795edd": "prova()", +"de79fb92": "UKTTokenVoting(uint256,bytes32[],address[],uint256[])", +"de7a5956": "getWinnerTeam()", +"de7ae335": "WithdrawDividendsAndCouponsTo(address)", +"de7b1a77": "finalizeTokenSaleManager()", +"de7b24b8": "ICOFailed(uint256,uint256,string)", +"de7b89bd": "GetUserExtraData1(address)", +"de7bea74": "getThreshold(uint8)", +"de7c2ed2": "TEAM_VESTING_DURATION()", +"de7c99c3": "releasePrivateBonusTokens(address[],uint256[])", +"de7cb327": "Proof()", +"de7d4fc4": "getGameNumber()", +"de7dd576": "etherPriceInPoundPences()", +"de7ea691": "getRandom(uint8,uint256)", +"de7fe3e7": "getItemInfo(uint256)", +"de803198": "setFunderSmartToken(address)", +"de80344d": "startStage(uint256,uint256,uint256,uint256)", +"de80b0a5": "promo()", +"de812733": "createBaby(uint256,uint256,uint256,uint256)", +"de81333e": "claimHeldBalance()", +"de815e61": "FourArt(address,address,address,address,address,address,address,address,address,address,address)", +"de81aaaa": "hardCapUSD()", +"de821a35": "_updateGenerationSeasonFlag(uint256,uint8)", +"de8248fb": "FEE_PERMILLE()", +"de824f93": "TimeLeft()", +"de82b54d": "cancelSellToConsumer(address)", +"de82efb4": "gimme()", +"de831ee7": "changeMinTransfer(uint256)", +"de840f11": "NassauToken()", +"de850c71": "dequeueAlternately()", +"de852afe": "revokeAccessDeploy(address)", +"de854065": "Portfolio(address)", +"de85a4a9": "tokenIssuedMkt()", +"de85c040": "GetMyRound()", +"de866db1": "buyContract()", +"de86ba28": "_addMintedTotallyByBridge(uint256,address)", +"de874962": "EOS_Silver()", +"de8801e5": "presaleStart()", +"de887bba": "getSecretBet(address)", +"de889d50": "refundWallet(address)", +"de88a342": "payDividends()", +"de894d3a": "_transferDividends(address,address,uint256)", +"de8a1c2e": "OMIToken()", +"de8a6fa2": "baseEthCapPerAddress()", +"de8b1d5c": "createCustomPresale(uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"de8b888e": "freezeTokenTransfers()", +"de8ba6d1": "getAndDel(bytes32)", +"de8bb64f": "TEFC()", +"de8bf3b6": "noRoundMiniGame()", +"de8c85ea": "operationToken()", +"de8f246c": "setStartTimestamp(uint32)", +"de8f50a1": "verify(bytes,bytes,bytes)", +"de8f55af": "dailyDistribution()", +"de8fa431": "getSize()", +"de901104": "setLLV_edit_15(string)", +"de9122f7": "wipeAttributes(string,bytes32[])", +"de917978": "SafecontractsTREXFund()", +"de91af7b": "totalPoolCap()", +"de91bb10": "CardManger()", +"de92af4b": "LongBought(address[2],uint256[3],uint256)", +"de931662": "callToken()", +"de934416": "balancePrivate(address)", +"de934d86": "BOT_ELEMENT_1()", +"de9364f4": "testFailBurnGuyWithoutTrust()", +"de940c29": "renounceOwnershipForever(uint8)", +"de942e62": "getLLV_edit_6()", +"de944520": "getBurnAmountApproval(address,address)", +"de9476dd": "addNewAirdrop(string,uint256,uint256,address,uint256)", +"de94b800": "backToken(address,uint256)", +"de957cf4": "setChunkSize(uint256)", +"de9652b1": "getcoinSortinglength()", +"de96587e": "removeAmbassador(address)", +"de96e823": "StarbaseCrowdsale(address)", +"de981f1b": "getContract(uint8)", +"de98bc4f": "LogMintingStopped()", +"de990bda": "etherMaximum()", +"de995b90": "sendOwnershipFrom(address,address,uint256)", +"de998dd0": "_affiliateProgramIsActive()", +"de9a1bdb": "MyToken(string,string,uint8,uint256)", +"de9b33f9": "getWithdrawNonce(bytes32)", +"de9b9364": "max_investment_eth()", +"de9d0e85": "_setPendingAnchor(address,uint256)", +"de9daf91": "setEmissionLimit(uint256)", +"de9db5d3": "projectShare()", +"de9eade3": "totalInitialAddresses()", +"de9ee13e": "calculateMaximumPayment(address,address)", +"de9f28e4": "getJobTotalSkills(uint256)", +"de9f4248": "identities()", +"de9f57f5": "LogBroker(address)", +"dea011f5": "updateService(address,address)", +"dea01b3e": "removeOneSecret(bytes32)", +"dea06188": "NumberOfBlockAlreadyMined()", +"dea09ef3": "takeFee(address,address,address,uint256,uint256)", +"dea0a837": "SetParticipantURL(address,address,string)", +"dea0cbd7": "viewMaxGasPrice()", +"dea19cda": "_fetchOrderByIdWithWithPayer(string,address)", +"dea1bd69": "setValidity(uint256)", +"dea216af": "nestedSecond(uint256)", +"dea2356c": "setInvestorGain(uint256)", +"dea37fb0": "Force()", +"dea3ce27": "setEligibleForReimburse(bool)", +"dea4267b": "addCourse(string,string,string,string,string)", +"dea5408f": "paymentSizeB()", +"dea5de80": "phase_4_Time()", +"dea6aec7": "getTargetSupply()", +"dea7b768": "submitBallotNoPk(bytes32)", +"dea89056": "holdMax()", +"dea8d6b6": "testCannotSetPresaleTokensAfterSaleStarts()", +"dea90acf": "getEmergencyTransferSignersCount(address)", +"dea95ff8": "setRoundNum(uint256)", +"dea97078": "getPendingTransactionsSellerAddresses()", +"dea9b464": "depositCollateral(bytes32,uint256)", +"dea9c72b": "getLatestPreReleaseTree(bytes32,uint32,uint32,uint32)", +"dea9ecd6": "DeanCoin(uint256,string,uint8,string)", +"deaa0d0a": "withdrawal1()", +"deaa59df": "setWallet(address)", +"deab5a78": "TEGTY()", +"deac4659": "inArray(address)", +"deaca58e": "settlvlement(address,uint256,address,string,string)", +"dead98f6": "part_to_vehicle(uint256,string,uint256)", +"dead9f93": "setParams(uint256,uint256,address,address)", +"deadc3dc": "currentStepIndexByDate()", +"deae5d4d": "networkPlaceholder()", +"deaf5a5e": "transferDocument(bytes32,address)", +"deb06c3a": "gameActive(uint256)", +"deb077b9": "nextSaleId()", +"deb081df": "getIslands()", +"deb0e09b": "getVotingDuration()", +"deb209f6": "isProviderValid(uint256)", +"deb2432b": "zecId()", +"deb27fc5": "getDragonTypes(uint256)", +"deb2e0b9": "MedNet()", +"deb36e32": "startVesting()", +"deb41f8d": "setTuple(uint256,uint256,bytes32)", +"deb43874": "Heritable(uint256)", +"deb52738": "finaliseFirstPhase()", +"deb53ab4": "BeneficiaryStake(uint256)", +"deb5d6c2": "inviterReg()", +"deb60627": "MhpCoin()", +"deb6930c": "PriceTicker()", +"deb77083": "stage2Bounty()", +"deb775a7": "tokenEmission(uint256,uint256)", +"deb80111": "transfer_asset(address,uint256)", +"deb80d66": "ProvidencePresale()", +"deb83bcc": "crowdsaleEndLockTime()", +"deb931a2": "getOwner(bytes32)", +"deb93b5b": "balanceOfOn()", +"deb979ac": "mktValueupdated(uint256)", +"deba5e95": "addCandidate(address,bytes32,string)", +"debad25e": "TeslaTest()", +"debad27f": "getProducts(uint256)", +"debaeb0e": "bonusLevel1PercentModifier()", +"debbc6eb": "btcRelay()", +"debc74f6": "buyRateZeroQuantity(uint256)", +"debc94ff": "Buckcoin()", +"debcbdcf": "preSaleStartdate()", +"debd122e": "setUp(uint256)", +"debe1c69": "setAccountingParams(uint256,uint256,uint256)", +"debe9768": "mintTokensLockedMultiple(uint256,int256,address[],uint256[],uint256[])", +"debf5b9f": "phase_4_rate()", +"debfbade": "calcNextNumShareholders(address,address,uint256)", +"dec0257d": "deleteContract(bytes32)", +"dec04b9b": "testNow()", +"dec10357": "currentCandyTotalSupply()", +"dec18b46": "second_withdrawal(uint256)", +"dec22b07": "forceExecuteRandomQuery()", +"dec24118": "lastCallBlock()", +"dec26d55": "LifeSet_003()", +"dec32ae8": "byTokens()", +"dec4b436": "subAttack(uint256,uint256)", +"dec57e94": "QTUM()", +"dec5cf53": "Exile()", +"dec6bc91": "EthernautsPreSale()", +"dec6c2d8": "updatedDistributee(address,uint256)", +"dec74ae9": "eurId()", +"dec7542f": "changePermission(address,address,bytes32,bool)", +"dec7ee57": "convert2Platinum(uint256)", +"dec7fa11": "minimumTokenAmount()", +"dec8f52e": "getVested(address)", +"dec96e7b": "setTitulaire_Compte_3(uint256)", +"dec9ba44": "createBet()", +"deca15db": "calcQueryCost(uint256,uint256)", +"deca6e76": "adminsInitialized()", +"decadbcc": "mainstreetCrowdfund()", +"decb3a90": "winAmount()", +"decb4803": "Tipcoin()", +"decbd169": "createPet(uint8,string)", +"decd8785": "addPartnerAddress(address)", +"decd8a25": "MINI_GAME_PRIZE_CRYSTAL()", +"decde7c0": "GetCert(uint32)", +"decdffbb": "_emitJobRatingGiven(address,address,uint256,uint8)", +"dece296f": "RET_DIV()", +"dece2e67": "releaseFundsSeller()", +"dece3355": "MinePoS(address,uint256)", +"decebbce": "getFunds(address)", +"decf1e64": "minimumPledgeAmount()", +"decfe0d4": "destroyEnabled()", +"ded04fe9": "testFailCreateNewRevisionNotOwner()", +"ded05da5": "changeIcoAddress(address)", +"ded1588c": "OwnerWithdrawTokens(address,address,uint256)", +"ded1c11b": "startFinalStage1()", +"ded1d0b8": "createMiniTicket(address,uint256)", +"ded1e438": "checkRatio(uint256,uint256)", +"ded1e4de": "DisputeResolver(address[],address)", +"ded1e7e3": "innerGreet()", +"ded1f580": "Unregister(address,bool)", +"ded24016": "getDynamicArrayElement(uint256)", +"ded2d0f4": "awardToken(address,uint256)", +"ded30375": "setectoken(address)", +"ded317a8": "minCapUSD()", +"ded37745": "maybeAnotherTime(uint256)", +"ded4980f": "withdrawInvestmentsBeneficiary(address,address)", +"ded54a4c": "stitch(uint256,uint256,bool)", +"ded5bc6c": "getBdpImageStorage(address[16])", +"ded5bd14": "setApp(string,uint256,address)", +"ded78d3d": "trade(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"ded8454a": "addressToBytes(address)", +"ded8f76d": "_sort(uint256,uint256)", +"ded94688": "showOwner()", +"ded9b075": "getAllDepositesCount()", +"deda0b5a": "mockSetResult(string)", +"deda20de": "doPurchaseFor(address)", +"deda2f9d": "triggerStealManually(uint32)", +"dedb7e25": "_ifEvenThenOddTooFlags(uint256)", +"dedc440f": "getEscuela(uint256,uint256)", +"deddab12": "withdrawalToken(uint256)", +"dede12a4": "startWeekOne()", +"dedeb3ca": "referralRateInvitee()", +"dedf141e": "setDates(uint256,uint256)", +"dedfb567": "multiFreezeAccount(address[],uint256)", +"dee023e2": "transferAllArgsNoAllowance(address,address,uint256)", +"dee1bfbe": "totalLendingFiatAmount()", +"dee1cfd8": "icoStartTimestampStage()", +"dee1f2af": "addToken(address,uint256,uint256)", +"dee2596b": "changeBonusTokenAddress(address)", +"dee2b058": "setCapacity(uint256,uint256)", +"dee2fedd": "setproduct(uint256,uint256,string,string)", +"dee3a226": "finalizeSto()", +"dee3efb2": "getWorkerPoolByIndex(uint256)", +"dee4b246": "buyTokens(uint64,uint256,uint8,bytes32,bytes32)", +"dee5216e": "applyRuntimeUpdate(address,address,uint64,uint64)", +"dee54b68": "WalletAddressUpdated(address,address)", +"dee555bf": "discountRateIco()", +"dee5a9e7": "PRICE_STAGE_THREE_BONUS()", +"dee6e5a4": "toggleKYC(address,bool)", +"dee73dbb": "AcceptedOwnership(address)", +"dee751ce": "createHoldToken(address,uint256)", +"dee7e59b": "LogWithdrawTokens(address,uint256)", +"dee81a13": "Local()", +"dee846c5": "updateJoinedCrowdsales(address)", +"dee8575c": "getNumBits(uint256)", +"dee86dfb": "marketIdeas()", +"dee8bd51": "ReleaseICO()", +"dee9f53f": "idOf(uint256)", +"deeb2efe": "getShifters(address,uint256)", +"deeb7124": "MDAToken()", +"deebeac9": "transferToken(address)", +"deec053d": "getMarketCachedIndex(uint256)", +"deec4c20": "getCardsInfo(uint256)", +"deecb187": "KyberNetworkProxy(address)", +"deed18e2": "isReadyToFinalize()", +"deed2be0": "getDailyPlayers()", +"deed4b80": "isFirstLockTimeEnd()", +"deee9adb": "setPOOL_edit_10(string)", +"deef6c99": "ZigguratToken(uint256,string,uint8,string)", +"def04570": "TheFrozenDeadShitCoin()", +"def0defa": "getOwnerHistoryCountOf(bytes32)", +"def18101": "currentBid()", +"def1a2da": "vc3Wallet4Pct()", +"def2489b": "convert(address)", +"def2be48": "getBAAAU(bytes32,address,address,address)", +"def4ba32": "utrTestToken()", +"def51dc2": "CIC()", +"def59575": "manualyAddReferral(address,uint256)", +"def59ea5": "addMember(address,address,uint256)", +"def5bbd0": "strConcats(string,string,string,string,string)", +"def7eb44": "maxChangeFee()", +"def843ef": "createOfAthleteCard(string,address,uint256,uint256,uint256)", +"def86cbb": "modifyWhitelist(address[],address[])", +"def871ef": "AirDrop(uint256)", +"def8ecf4": "removeBuyOrder(uint256)", +"def9176c": "team1Balance()", +"def92c69": "MAX_BALANCE()", +"def98a72": "recipientExtraMIT()", +"def9c7e2": "_escrowStakeOwnerPaymentEarning(address,bytes32,uint256,uint256,address,bool)", +"defa92ee": "depositDividends()", +"defaa5f2": "_transferEthereum(uint256,uint256,uint256)", +"defafa37": "setRefundTimelock(uint256)", +"defb9584": "PROMO_CREATION_LIMIT()", +"defbc073": "weiUnlocked()", +"defc876e": "removeAddressFromCaller(address)", +"defc8ae9": "BuyOffer(address,address,uint256,uint256,uint256,uint256)", +"defce6d8": "FlagAddress(address)", +"defe2883": "totalSupplyByAsset(bytes32)", +"defe2c47": "_checkRecommend(bool,uint256)", +"defefe96": "payCompoundTerm(uint256,uint8,uint8)", +"deff30c6": "sellTokens(address)", +"deff3a37": "purchaseReject(address)", +"deff41c1": "m_owner()", +"deff5757": "setPartnersRelease(uint256)", +"deff71b8": "setAllFlagPairs(bool[2][])", +"deff7f2f": "CrowdFundings()", +"deffbaee": "addOwnershipChest(address,uint256)", +"df000ff7": "acceptParityOwnership()", +"df013fab": "setDelegadoDeEscuela(bytes32,bytes32,uint256,uint256)", +"df018dbd": "process(address,address,address,string,string)", +"df022cbc": "hello1()", +"df034586": "lockCount(address)", +"df034cd0": "updater()", +"df034db8": "aCASATest()", +"df037443": "timeoutX()", +"df0441cc": "_checkUnlock(address)", +"df054797": "securityAudit()", +"df0584af": "ClimateCoinAddress()", +"df065d78": "TEST_PLAYER()", +"df06c1d8": "plotsOwned(address,uint256)", +"df06f906": "numBets()", +"df0795aa": "setKycProvider(address)", +"df08ce62": "give(address[],uint256[])", +"df09176b": "ActualizePrice(uint256,uint256,uint256,uint256)", +"df0969dc": "clearPlayerPrize(address)", +"df09921f": "institutionAllocation()", +"df0a2bda": "refundIgnoredBids(uint256)", +"df0a8589": "dealAmount()", +"df0ad3de": "upgradeabilityAdmin()", +"df0b1344": "SchmeckleTokenSale()", +"df0b52c8": "keyAddress()", +"df0bcf4d": "setAvatar(uint256)", +"df0c428c": "releaseAdvisorsTeamTokens()", +"df0c7a55": "nextPrice(uint16)", +"df0cd37b": "Etheremojis()", +"df0d05d9": "EmporioExchage()", +"df0d1078": "volumeType1()", +"df0da20e": "BONUS_WINDOW_1_END_TIME()", +"df0efbf5": "rateForSale(uint256)", +"df0f093b": "purchasePeriod()", +"df0f26f9": "getBalanceAddr(uint256)", +"df0f3227": "DurationAltered(uint256)", +"df0f3c19": "getGameCountdown()", +"df0f3e1c": "isFalse(bool,string)", +"df109ee1": "AuctionManager()", +"df10dd6e": "checkSubAvailability(bytes32)", +"df117c47": "updateSuperPrivilegeParams(uint256,uint256)", +"df11d258": "witness(bytes32,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"df12b94e": "investBalance()", +"df133cf9": "minesPrice(uint256)", +"df1340a0": "QTR_Token()", +"df13569d": "FACTOR_6()", +"df13994e": "callback(bytes32)", +"df143fb7": "HackerGold(address)", +"df148cdb": "setPonziAddress(address)", +"df155488": "startLockTime()", +"df15c37e": "getWinners()", +"df15f87e": "FiatRaisedUpdated(address,uint256)", +"df1614cf": "setLendFee(uint256)", +"df1673e9": "CHINESE_EXCHANGE_4()", +"df175e9b": "newCampaign(address,uint256,uint256)", +"df17c4b1": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32)", +"df181831": "staff_1()", +"df1836ca": "referrerAndOwnerPercent()", +"df18e215": "updateTokenStore(address)", +"df190048": "getAdPrice(uint256)", +"df19b71c": "digitToNumber(uint8)", +"df19df5d": "ownerOperationsLength(address)", +"df1a5aab": "reservedTokensClaimStage()", +"df1abf83": "revertTokensByKYC(address)", +"df1b817e": "setupCutie(uint40,uint16)", +"df1c455c": "unallocated()", +"df1cd2b5": "volumeBonusesTokens(address)", +"df1cf293": "addAuction(uint32,uint256,uint256,uint256)", +"df1d4559": "setFOUNDATION_POOL_ADDR(address)", +"df1dbbc9": "ShareToken()", +"df1dd826": "trade(uint256)", +"df1e36c6": "unlockDeposit(string,address)", +"df1ead82": "disinvest()", +"df1ec3ea": "BesideERC20(uint256,string,string)", +"df1f4a6e": "getTimestring(uint256)", +"df1fc781": "KickicoCrowdsale(address,address,address,address,address,address,address,address,address)", +"df201a46": "simple()", +"df203ff7": "depositGasCost()", +"df20b119": "balanceEthCrowd(address)", +"df20c021": "addNewChannelAndRankofuser(address,string,int256)", +"df20d738": "BokkyPooBahsEtherRefundablePrize()", +"df221223": "setWeiExchangeRate(uint256)", +"df22bf83": "canUseTokens(address,uint256)", +"df23128f": "adjustTranche(uint256)", +"df234815": "tokensAvailableAtTierInternal(uint8,uint256,uint256)", +"df2436b3": "isExistByBytes(bytes32)", +"df247c5d": "CareerXonToken(uint256,uint256,uint256,uint256)", +"df25322d": "getFundReceiver()", +"df25ecf8": "DSTContract(string,string)", +"df25ee23": "getIndexId(address,bytes)", +"df25f3f0": "minPerTx()", +"df26ca08": "emitError(uint256)", +"df28aef7": "withdrawLiquidatePool(uint256)", +"df28d6fa": "Dex2(address)", +"df294588": "get_Gains(address,address)", +"df294cad": "allocateNominalToken(address,uint256)", +"df295080": "changeAbstractStorage(address)", +"df29b982": "emergencyWithdrawERC20(address,uint256)", +"df29dfc4": "get_start_time()", +"df2a201b": "setSystemOraGasLimit(uint256)", +"df2a2753": "LDGToken()", +"df2a29da": "getDenominationToken()", +"df2a6e4f": "kscBatchSellByOtherCoin(address,address[],uint256[],uint256,uint256[],string)", +"df2b1cf8": "toBytes(uint256,uint256)", +"df2b1f28": "tokenSetTransferFeeReceiver(address,address,address,address)", +"df2bf12b": "totalBatchOf(bytes32)", +"df2c05a9": "UbermenschPrefundToken(address)", +"df2c7fc1": "AuctionFinished(address,uint256,uint256,uint256,uint64,uint256,address)", +"df2cdbed": "_setBidState(bytes32,uint8)", +"df2d33d5": "isBreakingCap(uint256)", +"df2d44af": "EthLongExercised(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"df2df29a": "CEO_Signature()", +"df2dfb20": "canIBuy()", +"df2e5c0f": "changePricePerUnicorn(uint256)", +"df2f0a4a": "getDecisionBlockNumber(uint256,uint256)", +"df2fbae6": "totalAvaliableSupply()", +"df300b46": "getThing(bytes32[])", +"df305680": "clearProposalLocked(address)", +"df30e592": "isValidContributorId(uint256)", +"df31566e": "setUInt(string,uint256)", +"df3164c6": "Release()", +"df31b589": "bonusForPreICO()", +"df320b29": "refundBet(bytes32)", +"df32754b": "owned()", +"df32dc5c": "withdrawEarning(uint256)", +"df331545": "reservedOperationalExpenses()", +"df334093": "acceptingDeposits()", +"df342d66": "setSubcontractAddressAndDataPattern(uint256,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"df36318a": "exchangeStart()", +"df3864d5": "ticketsSold(uint256)", +"df390d63": "encodeData(uint128,uint256,uint24,uint40)", +"df3959f5": "setInitializeUniverseValue()", +"df3a4fa1": "maxSubdivisions()", +"df3a635a": "removeDeed(address,uint256)", +"df3a6b10": "testMemberAddedEvent()", +"df3aa1fc": "FTXToken(address)", +"df3b75f0": "test_standardCampaignDeploymentAndUse()", +"df3be668": "productLimits(bytes32)", +"df3be9e8": "ERCFW()", +"df3c211b": "calculateVestedTokens(uint256,uint256,uint256,uint256,uint256)", +"df3c3a30": "mintLocked()", +"df3c5a42": "supplyICOContract(address)", +"df3c8620": "num_challenges()", +"df3cc390": "setUsdRate(uint256)", +"df3e0a1d": "completeEscrow(uint256)", +"df3f5974": "readPublicRecord(bytes32,bytes32)", +"df3fb59e": "DSPRegistryReplaced(address,address)", +"df40503c": "getRemainCoins()", +"df40a089": "setDrawAddress(address,address)", +"df41765e": "circulatingTokensFromSale()", +"df418fbf": "returnBytes1(bytes)", +"df41d979": "ico_distribution(address,uint256)", +"df426401": "founderTokenUnlockPhase2()", +"df428e3b": "createChildUniverse(uint256[],bool)", +"df42dfa9": "initialARXSupplyInWei()", +"df42e80e": "Asset()", +"df43b699": "setInvoiceCancelled(address,address,uint256)", +"df43b830": "absolutCBD()", +"df444df1": "createEscrowBySeller(address,uint256)", +"df459426": "parse_signature(bytes32,bytes,bytes)", +"df4604b3": "submitOrVote(bytes32)", +"df462098": "setNextCommonTTMTokenId7(uint64)", +"df463ed3": "buyService(uint64,uint64)", +"df47a924": "DiaToken()", +"df482ad5": "privateFundSupply()", +"df483622": "addLotteryParticipant(address,uint256)", +"df487962": "FibokenCreated(uint8,address,uint256)", +"df48a2b0": "setReinvestmentAddress(address)", +"df49804a": "mtv()", +"df49dfe3": "updateTransferMinimumFee(uint8)", +"df4a2ecc": "hasNext()", +"df4aaf04": "COIN_SUPPLY_ICO_TIER_2()", +"df4adb94": "getOutcomeByIndex(uint256)", +"df4b2970": "getRabbitMother(uint32)", +"df4b3351": "collectEtherBack(address)", +"df4bcf58": "isMigrationAgent()", +"df4bd18d": "setPriceAndRate(uint256,uint256)", +"df4bef32": "searchInList(address)", +"df4c2164": "mintableAddress()", +"df4c98b5": "createRentAuction(uint256,uint256,uint256,uint256,uint256)", +"df4cbb96": "commitProposal(bytes32,string)", +"df4d17dc": "initToken(address)", +"df4dfa7f": "PRE_ICO_TOKENS_AMOUNT()", +"df4e79fa": "VESTED_TOKENS()", +"df4ebd9d": "buyWanCoin(address)", +"df4ec249": "step3()", +"df4f0088": "guardVillain(uint256,uint256)", +"df4f011c": "licenseIds(uint256)", +"df4f5a72": "refunder()", +"df4fc373": "SetIPR(string,string,address,string,string,uint256,address)", +"df4fcf8e": "newFeePercentageIsSet(uint256)", +"df5055e6": "adminVer()", +"df506768": "payTeam(address)", +"df506801": "preSaleThirdCap()", +"df50a8c1": "updateFundraiser(address,bool)", +"df50afa4": "setAllowTransfers(bool)", +"df51d46b": "setUnlockEarlier(uint256)", +"df520efc": "pricePerTokenInWei()", +"df52f321": "CinociCoin(uint256,string,string)", +"df53623f": "_unlockContract()", +"df5483ad": "setImageWidth(uint256,uint16)", +"df54c659": "TransferredFoundersTokens(address,uint256)", +"df55b41a": "owner(string)", +"df55f529": "UNLOCK_TEN_PERCENT_PERIOD()", +"df565ca2": "rateRatioCVSThreshold()", +"df571e33": "postSoftRate()", +"df57904a": "GoodfieldNewRetail(uint256,string,string)", +"df57a6ec": "_generateRandomDna(string)", +"df57b742": "getReverse(bytes32)", +"df58471d": "increaseFundingGoal(uint256)", +"df58d236": "WipedAccount(address,uint256)", +"df590d89": "KnowHowChain()", +"df591e82": "goForward()", +"df59cbeb": "OwnedUpgradeabilityProxy()", +"df5a1417": "PLAYERWIN()", +"df5b588c": "PublishWinnersScoreThres(uint16)", +"df5cc291": "get4(bytes,uint256)", +"df5cf723": "delegation()", +"df5d3e89": "subBuy(bytes32,bytes32,address)", +"df5d3ec7": "setSaleEnd(uint32)", +"df5dd1a5": "addOracle(address)", +"df5dd98f": "refFeeVal()", +"df5e3569": "hasBet(uint256)", +"df5f0603": "retrieveEth(uint256)", +"df5f53f1": "checkWithdrawal(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"df603769": "reconcile(uint256,address[],int256[],uint8[],bytes32[],bytes32[])", +"df61f51b": "TokensIssued(address,uint256,uint256,uint256)", +"df6378e9": "getAuctionAddress(uint256)", +"df63d908": "testYBool()", +"df63e659": "deleteAllMessages()", +"df642cad": "setCost(uint8,uint256,uint32)", +"df65d1ef": "getLuckBoyAddrList()", +"df66fc14": "sendTokenTeamAdvisor(address)", +"df67184a": "getRequiredBalance(uint256)", +"df673d35": "SISA_token()", +"df67ae3d": "GetStuffList(address)", +"df67d82d": "minETH()", +"df68a516": "viable_print(int256,uint256,uint256,uint64)", +"df68c1a2": "canTransfer()", +"df68fd99": "popElementWithPos(uint256)", +"df6a000d": "safe_withdraw(uint256)", +"df6a6002": "fourthMonthEnd()", +"df6a6b38": "redeemed(address,uint256)", +"df6ab3d5": "masssend(address[],uint256[])", +"df6abd34": "icoHardcap()", +"df6adc2a": "JackpotWinner()", +"df6af2f8": "setpatient(string,string,uint256,uint256)", +"df6af7d1": "getUnclaimedBuyerFunds(address,address,address,uint256)", +"df6afed9": "replaceArtwork(uint16)", +"df6b1ebb": "analyzeCondition(uint8)", +"df6c13c3": "getMinFunding()", +"df6c7cf4": "changeAssembly(uint256,uint64[],uint64[])", +"df6cf923": "IXTPayment()", +"df6d3afa": "setAngelHolder(address)", +"df6d4843": "getMaxLimit()", +"df6da6f9": "tokenSellData(address)", +"df6e1331": "drawGame(uint256,string)", +"df6e7a5f": "setTokenDelegation(address,address)", +"df6ee5f2": "lend(bytes32,bytes,address,uint256,bytes)", +"df6ee6b7": "addStage(uint256,uint256,uint256,uint256,uint256,uint256)", +"df6f023d": "reLoadCore(uint256,uint256,uint256,uint256)", +"df700074": "setadmin(address,address)", +"df706f77": "JTrex()", +"df708f01": "setMainContract(address,address)", +"df70ab71": "increasePositionOnBehalfOfRecurse(address,address,bytes32,uint256)", +"df70f3b5": "Jumanji()", +"df713abd": "get_time_locked_contract_size(address)", +"df7447dd": "createTicker(uint256)", +"df7458cd": "addReply(bytes32,string,uint256,address)", +"df745d28": "releaseBatch(address[])", +"df752519": "MANHATTANPROXY1STST()", +"df75574a": "buyItem3()", +"df755a98": "prPercent()", +"df75f3fb": "setPreSaleDurance(uint256)", +"df761fff": "TokensClaimedEvent(address,uint256,uint256,uint256)", +"df76d18d": "RegisterIP(bytes32,string)", +"df775a93": "skipInitBecauseIAmNotOg(address,address,uint256,uint256,uint256,uint256,bytes8,uint256)", +"df776689": "BasicIterator()", +"df77a290": "OddsAndEvens()", +"df77e074": "GetBetInfo(uint8,uint256,address)", +"df77eb1e": "transferHomeViaRelay(address,uint256)", +"df78c1dd": "payIn(uint256)", +"df79d8fa": "initialInvestorAccount(uint8)", +"df7ae3d8": "debugVal()", +"df7b70ab": "writesExercised(bytes32,address)", +"df7be446": "_removeNFToken(address,uint256)", +"df7bf704": "matchResult()", +"df7c5fca": "checkPeriodic()", +"df7cc70d": "ethUnPause()", +"df7cec28": "cancelBid(bytes32)", +"df7dbd70": "prTokens()", +"df7dfef7": "deleteAction(uint256)", +"df7efed8": "WeiinEth()", +"df8011b2": "HOWL()", +"df8089ef": "setAdministrator(address)", +"df811d7d": "numberOfPlayersInCurrentRound()", +"df816206": "getGiftIdsByRecipient(address)", +"df817e54": "checkPreIcoStatus()", +"df821cf7": "BIDCOIN()", +"df833a1a": "createGato(uint256)", +"df8344fe": "allAllowancesForManyAccounts(address[],address,address[])", +"df84807a": "templateIdOf(uint256)", +"df851f03": "calcNextPrice(uint256)", +"df8713ed": "addPot(uint256)", +"df88126f": "lockedInBets()", +"df8812c7": "addStageAmount(uint256)", +"df88401c": "KillahyToken()", +"df885536": "nxtAddr()", +"df888f4e": "AO()", +"df88f5b8": "setNotConstant()", +"df88fb44": "exchangeByPet(uint256,uint256,address)", +"df8b7771": "initialiseValues()", +"df8bb140": "cancelCampaign(bytes32)", +"df8d52a9": "get_comp(uint256,uint256)", +"df8d66e4": "addPlatform(bytes32)", +"df8dc370": "Reservation(address,address[])", +"df8de3e7": "claimTokens(address)", +"df8e03b1": "BasicWhitelist()", +"df8e739d": "bitzToken()", +"df8e9261": "_testItem()", +"df8f4376": "calcSTQAmount(uint256)", +"df8f4eb7": "originalTotalSupply()", +"df8f7971": "ProfileOwner()", +"df8f8a81": "setETCLockingAddr(address)", +"df90061b": "onSaleTokens()", +"df90c98d": "whiteListEndTime()", +"df90f719": "mln()", +"df91f2ab": "SggCoin()", +"df9204b6": "powerStatus()", +"df922744": "ScamSeal()", +"df922f3a": "changeCommission(uint256)", +"df93c9aa": "testrevert()", +"df957b04": "_couldWithdrawFromHolder(address,uint256)", +"df958553": "burnForGateway(address,string,uint64,uint64)", +"df9669e0": "setCrowdsaleEndDate(uint32)", +"df969bc0": "ADVISOR_TWO()", +"df96a336": "Bitkeun()", +"df979b92": "setIncreaseTotalWinningStake(bool)", +"df98ba00": "m_opNum()", +"df98ef33": "getResource(bytes,uint256,bytes)", +"df990c33": "becomeOwlmaster()", +"df9933e5": "SetPwd(bytes32)", +"df998f59": "checkSertificate(address,address)", +"df99f8bf": "TradeToken()", +"df9a4f56": "registerAuditor(address)", +"df9abaa0": "smallUintFunc(uint8,uint256)", +"df9b0774": "SwapResumed(uint256)", +"df9b2931": "FANBASE()", +"df9b3bae": "ZperToken(address,uint256,uint256)", +"df9b5fe9": "ALH3()", +"df9d3580": "accountBuyLimit()", +"df9e33e8": "getForeverRose()", +"df9f3139": "out4Done()", +"df9f92fb": "Scan(address[],uint256[])", +"dfa0ca14": "swapProject(uint256)", +"dfa13498": "LeasedBlock(uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32,address)", +"dfa15809": "databaseAddress()", +"dfa15b58": "RESERVED_OTHERS_SIDE()", +"dfa22fed": "buyFromOwner(string)", +"dfa24e8e": "sendEther(address,uint256,uint256)", +"dfa38fea": "NANI(address)", +"dfa4591c": "removeLogicVersion(uint256)", +"dfa54594": "getStandartRobot(uint256)", +"dfa5a25d": "purchaseCoffee()", +"dfa6bc72": "LoggedPhaseICO(uint256,uint256,uint256,string,string,uint8,bool,bool)", +"dfa72237": "innerPlayerFlight(uint256,uint16,uint256)", +"dfa78bf5": "savior()", +"dfa8be5f": "hackEducated(address)", +"dfa93d64": "relayContractAddress()", +"dfa9b440": "addAddressToWhiteList(address[])", +"dfaa3136": "addToMap(uint256[])", +"dfadb43c": "candyLandSaleAddress()", +"dfae7dc1": "vestingWhitelister()", +"dfaeaf67": "ThrowProxy(address)", +"dfaf3658": "closeCdp(address,uint256,uint256)", +"dfaf734a": "lastReleaseTime()", +"dfafaa72": "sendTo(address,uint256,address)", +"dfafb31d": "QUANTH()", +"dfafcf7e": "isMinion(address)", +"dfafe10f": "addParticipant(address)", +"dfb01c8f": "BCC()", +"dfb03cf7": "put(address,address)", +"dfb06d85": "AgentContract(address,address,address,uint256,uint256)", +"dfb0fb28": "ANGEL_ADDRESS()", +"dfb1913d": "withdrawFor(address[],uint256[])", +"dfb1abc0": "distributeReservedTokens(address,uint256)", +"dfb1c0e5": "buyToKen(uint256)", +"dfb259de": "SmartPoolToken(uint256,address)", +"dfb2866d": "priceFactor()", +"dfb29935": "sendHash(string)", +"dfb30c14": "getPlayerSpaceshipModelById(uint256)", +"dfb3557b": "BNB_MIN_CONTRIB()", +"dfb36b0b": "villagePrice()", +"dfb41e7c": "getForecast(bytes32,uint8,uint256)", +"dfb4a12e": "updateCandidateInfo(address)", +"dfb4ae3a": "WHOM()", +"dfb4b2f0": "deadline_status()", +"dfb59249": "EthRental()", +"dfb5a995": "countStureq()", +"dfb5f420": "Crowdsale(address,uint256,uint256,uint256)", +"dfb685cb": "BIT()", +"dfb69cb2": "colors(uint8)", +"dfb6c468": "transferCoinvest(address)", +"dfb873fb": "getPrizeByToken(uint256)", +"dfb87be1": "setEndRate(uint256)", +"dfb8a38d": "getTokenPackPrice()", +"dfb8c6c2": "battleContractAddressCanBeUpdated()", +"dfb9560c": "right24(uint256)", +"dfb9bdca": "exchange(address,address[],uint256[],uint256)", +"dfba3be1": "pvpFinished(uint256[],uint256)", +"dfba9570": "removeStaff(string)", +"dfba9798": "withdrawMytoken(uint256)", +"dfbb3036": "currentRoundInformation()", +"dfbb4021": "checkGrid(uint8)", +"dfbb70c9": "timeOfLastIncrease()", +"dfbc3de1": "applyMember()", +"dfbcb8d9": "transferCard(address,address,address)", +"dfbd5c69": "EggsRedeemed(address,uint256)", +"dfbd6150": "subowner()", +"dfbd9973": "pageByAccount(address,uint256,uint256,uint256)", +"dfbde5a7": "FedCoup()", +"dfbe0587": "sellPorftolio(uint256,uint256)", +"dfbebd07": "licenseExpirationTime(uint256)", +"dfbec00e": "requestTopic(string)", +"dfbed623": "updateCaller(address,bool)", +"dfbef8de": "AllowExchanger(address)", +"dfbf53ae": "winner()", +"dfc027ef": "replayAnser(uint256,uint256[])", +"dfc0bedb": "setCode(uint256)", +"dfc10ea8": "callerAllocationEndBlock()", +"dfc119b0": "testRfind()", +"dfc28653": "NucleusVisionTokenUnlocked()", +"dfc2a146": "ORACON(uint256,uint256)", +"dfc366e8": "tenthousandths()", +"dfc3a987": "cntMembers()", +"dfc42f7c": "OmegaContract()", +"dfc4a516": "doApprove(address,address,uint256)", +"dfc6fbaa": "presaleBalanceOf(address)", +"dfc6ffc6": "CharlieCoin()", +"dfc74cb4": "testPlaceBet()", +"dfc75b9c": "sendJigouByOwner(address,uint256)", +"dfc765dc": "getMatchers_by_index(uint256)", +"dfc78bdc": "ProposalTallied(uint256,bool,uint256)", +"dfc7d488": "getTransactionFee(uint256)", +"dfc86d56": "UsdToEtherConvert(uint256)", +"dfc89632": "PresidentElections()", +"dfc8bff1": "updateLock(uint256)", +"dfca2f53": "LookAtPrizes()", +"dfca685a": "unlockPrivate()", +"dfca8fd2": "contributeForMakers(address)", +"dfcb4157": "saleAfterRefundPeriod()", +"dfcb737f": "allocateMarket_CommunitTokens()", +"dfcbb794": "TrustFund(address,uint256,address)", +"dfcbc298": "CancelBuyOrder(bytes32,address,uint256,uint256,address)", +"dfcc4b86": "ConcludeChallenge(uint256)", +"dfcc525d": "info_SeeTINAmotleyLine(uint256)", +"dfccdef5": "collectedETH()", +"dfcdc7f2": "regReferrer(address)", +"dfcdde5e": "calcAmount()", +"dfce5a7a": "changeGrantsController(address)", +"dfce791a": "counterWagerAndDeposit(uint256)", +"dfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", +"dfceb5ba": "refund_and_die()", +"dfcefd7e": "indexOf(uint64[],uint64,bool)", +"dfd0163e": "voteNoLockBatchByAdmin(address[],address[],uint256[])", +"dfd024c1": "allocateInvestors()", +"dfd0c510": "ICOReward()", +"dfd142c1": "IncreaseWithdrawalAmount(uint256)", +"dfd17111": "ConstructZCashClue(bytes32)", +"dfd17f2b": "buyInBatch(uint256,uint256,uint256[],uint256)", +"dfd1be58": "platformFundingPerEpoch()", +"dfd200c5": "setRunning(bool)", +"dfd2c96d": "updateHouse(address,address)", +"dfd2ddec": "setForeignBridgeProxyOwner(address)", +"dfd4715e": "setDAdmin(bytes32,address)", +"dfd4e0f6": "setPrivateSaleHalt(bool)", +"dfd50f52": "contestants(uint256)", +"dfd51b4c": "updateIris(bytes32,address)", +"dfd52b74": "_getIcoAddr()", +"dfd5d3b0": "creditMcAddress()", +"dfd5dd6b": "ranksCount()", +"dfd6a9d5": "getPoolTotalStakeQspWei(uint256)", +"dfd6e6c5": "getIcoPhaseOneThreeDayIndex(uint256)", +"dfd80665": "whitelistAgent()", +"dfd84c13": "sendGain()", +"dfd8d516": "IsThisInternal()", +"dfd92f8a": "registerProduct()", +"dfd94849": "addNewSpinner(uint256)", +"dfd9e184": "droneIndexToApproved(uint256)", +"dfdadcb9": "isValidPurchase()", +"dfdadec6": "AlphaCarToken()", +"dfdb27da": "FoundGameCoin()", +"dfdb5f17": "doBurn(address,uint256)", +"dfdc349d": "getLestCommonMul(uint256,uint256)", +"dfdc99c7": "setKpopCelebContractAddress(address,address)", +"dfdce77b": "setScrapPercent(uint8)", +"dfdd3997": "maxETHAutoContributions()", +"dfdd4293": "voidCaller(address,address)", +"dfde567f": "processAR(uint256)", +"dfdfb261": "addEsgoTX(address,uint256,uint256,uint256,uint256)", +"dfe0f0ca": "transferWithSender(address,address,uint256)", +"dfe1304c": "HumanStandardToken123(uint256,string,uint8,string)", +"dfe138a6": "rewardPerUnit()", +"dfe1b17e": "dequeueOrder()", +"dfe1dcf6": "adminSendEthtoAddContract()", +"dfe1f357": "checkHash(address,uint256,address,uint256,uint256,uint256)", +"dfe2de30": "boughtTime(address)", +"dfe333bd": "copiesSold(uint256)", +"dfe33748": "TokensAreFrozen()", +"dfe346d0": "NicksTastyToken()", +"dfe3a52b": "CUTOFF_PRESALE_TWO()", +"dfe3e746": "setMasterNode(address)", +"dfe4858a": "constuctor()", +"dfe4c261": "approveTransaction(uint256,uint256,string)", +"dfe525a2": "addHandler(address,address,string,string)", +"dfe5ef48": "issue(address,uint256,uint256)", +"dfe64599": "getAllHpbNodesExt()", +"dfe699b1": "SetApplicant(string,string,string,int256,string)", +"dfe6af85": "testThrow_testablePayoutCaseShouldBeFailure()", +"dfe6d366": "gamblers()", +"dfe71183": "createCDPLeveraged()", +"dfe71486": "displayuserdetails(address)", +"dfe81a26": "GnarlyTimes()", +"dfe921cb": "lifeReserveTimeLock()", +"dfea6ec2": "placeBetWithInviter(uint256,uint256,uint256,uint8,bytes32,bytes32,address)", +"dfea8483": "Countout()", +"dfeade00": "AceEquityToken(uint256,string,string,uint8)", +"dfeb1719": "getNotaire()", +"dfeb1fd3": "getUserVotes(address,string,string)", +"dfeb34b6": "stakeFailOverRestrictionLifted()", +"dfeb3c49": "getNonces(address,address)", +"dfebb4ee": "viewMostRelevantClauses()", +"dfec375e": "calcCurPointsForAcct(address)", +"dfedff20": "getTwit(address,uint256)", +"dfee01d8": "mUpgradeSpeedup()", +"dfee2bad": "phaseReleaseAmount()", +"dfee6348": "COMMUNITY_PLUS_PRIORITY_SALE_CAP_ETH()", +"dfef54a3": "TihoToken(uint256,string,uint8,string)", +"dfef58a6": "registration(bytes32,uint256,address)", +"dfef5f69": "mintingStartTime()", +"dfefaf3f": "secureUnapprove(address)", +"dff0259f": "donationSum()", +"dff05de4": "pctDIDOwned(address,address)", +"dff114dd": "investedCrowdsaleTokenOf(address)", +"dff18fe0": "provideTeamHolderToken(address)", +"dff1ab15": "checkProposalCode(uint256,address)", +"dff2db71": "binaryAddress()", +"dff3f3b9": "ownerWithdrawal(uint256)", +"dff3f83e": "resolveRawDelegation(bytes32,uint256)", +"dff44b2f": "divorce()", +"dff4a5e8": "getRestaurant(address)", +"dff53231": "love()", +"dff538e6": "_currentDay()", +"dff5f5cb": "updateStartPhase(uint256)", +"dff649dc": "NameChanged(address,uint256,string,string,uint256)", +"dff675c2": "getDelivery()", +"dff79905": "LogTokenRemover(address,uint256)", +"dff90b5b": "sendFees()", +"dffa771f": "_setWeaponValue9(uint256)", +"dffb0bd1": "getPlayerTotalDividend(address)", +"dffbbef5": "stopDistribution()", +"dffbd9de": "TokenAdded(address,address)", +"dffcf9a7": "transferableHavvens(address)", +"dffd5e57": "buyToken(bytes32)", +"dffd6054": "changeGameAddress(address)", +"dffd722f": "totalEarn()", +"dffd9b8e": "CEO_TEAM_SHARE()", +"dffdc75d": "forward(address,bytes,uint256,bool)", +"dffe0a63": "getStatGames()", +"dffeadd0": "main()", +"dfff2f79": "autoReinvestFor(address)", +"dfffcbdb": "triggered(uint256)", +"e0004f43": "batchTransferTokenS(address,address[],uint256[])", +"e000eec3": "createPixel(uint24,uint32)", +"e0018f2f": "showPlayerSeasonScores(address,int8)", +"e001ddf1": "teamTokensCurrent()", +"e0020f1a": "tokensPerEthPublicSale()", +"e0024ae3": "_mine(uint256,address)", +"e002a486": "changeForwardTo(address)", +"e002f2ee": "cpCap()", +"e0031b1d": "GetDOTDelegatedRevoker(bytes32,uint8)", +"e003604e": "close(address,uint32,uint192,bytes)", +"e0036d1d": "verifyPosition(uint16,uint8,uint64)", +"e0041396": "slice(bytes,uint256,uint256)", +"e0046553": "ownerSetSpreadPremium(uint256)", +"e004b76f": "PermissionRemoved(address)", +"e004fe97": "CarRegistry(string)", +"e004feb0": "testFailMintGuyWhenStopped(int256)", +"e0056019": "setLand(uint8,uint8,uint8,bool,uint8[])", +"e0063224": "vouchers(bytes32,uint256)", +"e0068052": "division(uint256,uint256)", +"e00686e4": "rewardPerBlockPerAddress()", +"e006997c": "authenticate(string,bytes)", +"e007b330": "sterilize(uint256[])", +"e0081b8c": "approve(bytes32,bytes32,uint256)", +"e00824bb": "payCreator()", +"e0089ce7": "UCtestCoin(uint256,string,uint8,string)", +"e008cdf3": "SBSCoin()", +"e00a1e8b": "addToSendAllowed(address)", +"e00a7fc5": "transferFromOwn(address,uint256)", +"e00ab6dd": "private_setminBet(uint256)", +"e00ac9a3": "thirdTime()", +"e00bc0f4": "setIsContainerForMarket(bool)", +"e00bc7fb": "vota_un_candidato(address)", +"e00be2a9": "getErc20Rate(string)", +"e00cb0bc": "etherReceivedPrivate()", +"e00d0aed": "TalosToken()", +"e00d0f3d": "updateCandidateAddrByIndex(uint256,address,address)", +"e00d7e5c": "ExampleToken()", +"e00dd161": "currentId()", +"e00f882c": "numberOfExchInEstateNasAlice(address,uint256)", +"e00fb7b7": "getInvited(uint32)", +"e00fe2eb": "getText()", +"e01060f8": "transferOwnership(uint8[],bytes32[],bytes32[],uint256,address[])", +"e010c686": "newProposal(uint256,uint256,bytes32)", +"e011171d": "setDOwner(bytes32,address)", +"e0117441": "setRegistrationPrice(uint256)", +"e011ac87": "amountLeft()", +"e01330bb": "testMul(uint256,uint256,uint256)", +"e014a39f": "weiRaisedIncludingFiatCurrencyRaised()", +"e014a83f": "takeToken(address,uint256,string)", +"e01546a8": "fromFraction(int256,int256)", +"e01567cf": "ethBioxRate1()", +"e015c62a": "calculatePrice(uint256,uint256,uint256)", +"e015d863": "variation()", +"e016603f": "createMultipleShows(uint256[])", +"e0179e6c": "etherValue(uint256)", +"e0180115": "culcurateBonusRate()", +"e0182436": "cancelEscrow(uint256)", +"e0187d18": "third_partner_address()", +"e018c36c": "buyFirstPackFromReferral(address,bool)", +"e0192072": "Rescue(address,address,uint256)", +"e0195a53": "maxRandom(uint256,address,uint256)", +"e01964d0": "sterile(uint256)", +"e019ac29": "setKycCertifier(address)", +"e01a38c6": "ecrecoverSigner(bytes32,bytes,uint256)", +"e01a6ace": "vote_Candidate_name(bytes32[])", +"e01ac5a4": "giveReward(bytes32,address,uint8)", +"e01b1b10": "ICODays()", +"e01bb918": "_withdrawAll(uint256,address)", +"e01bc60b": "totalCustomBuyersMapping()", +"e01c6d4e": "cashin()", +"e01c979a": "GuneToken()", +"e01cd37a": "cancelSellingToken(address)", +"e01cdfaa": "getEmployeeInfoById(uint256)", +"e01cff84": "getTransferringForCount(address)", +"e01d1f3d": "MultiSigWallet(address[],uint256,uint256,string)", +"e01dd67b": "AMBASSADOR_THREE()", +"e01e0618": "feeDiv(uint256,uint256)", +"e01e92d2": "abs(int128)", +"e01ea00c": "getDarknodesFromEpochs(address,uint256,bool)", +"e01ef1f8": "addInventory(bytes32,string,string,string,string,uint256,uint256)", +"e01fff13": "familyContract()", +"e0201e07": "Eclipse()", +"e0204585": "get_bet(address,address)", +"e020b8a3": "contract_date()", +"e02163e7": "etherContributionOf(address)", +"e021b8cb": "useWeapon(uint8,uint8,uint8,uint8,uint8[176])", +"e021deff": "meta(address)", +"e022040c": "setReceiver5()", +"e02243ee": "buyInternal(address,uint256)", +"e023094f": "createDroid(uint256,string,uint256,uint256,uint256)", +"e023f90e": "getCity(uint16)", +"e02426c1": "getSignatureHash(bytes4,uint256)", +"e024ec5a": "getFmmsDetail(bytes32)", +"e0256835": "balancesCrowd(address)", +"e02584bf": "listPairForReserve(address,address,bool,bool,bool)", +"e025a666": "rewardPercentageDivisor()", +"e027034d": "isWithinIEO()", +"e028222f": "CreateABet(address,uint256)", +"e028ff3b": "lotteryGiveHuntMinimalNumber()", +"e0299621": "GBIToken(uint256,string,string)", +"e02b8b29": "HardcapToken()", +"e02ba030": "excess_token()", +"e02bc1c6": "bidDeposit(bytes32)", +"e02bcd3e": "getLendTokenBalance()", +"e02c3b5d": "getAllLeftLeg()", +"e02c7e1f": "timelockAllocationAddress(address,uint32)", +"e02c85a4": "_checklottery(uint32,uint32)", +"e02cec51": "refund(address[])", +"e02d1c0e": "tradeStarttime(uint256)", +"e02d306f": "getUNTSQM()", +"e02df495": "MAX_ETHER_24H()", +"e02f8d33": "PRICE_STAGE_THREE()", +"e02f9027": "iTime()", +"e02fab06": "anubisToken()", +"e0300fc4": "unregisterFor(address,bytes32,address,uint256,uint256,uint256)", +"e0303a2e": "getFirstTwoOutputs(bytes)", +"e0304542": "oddEven(uint8)", +"e0307e94": "gcsp(uint256)", +"e030bbd5": "tokenToPointByMetaMask(uint256,uint256)", +"e030dfb9": "emergency(bytes32,bytes1)", +"e03179b4": "LogContribution(uint256,uint256)", +"e031d6f0": "isICOFinished()", +"e0328c5f": "setRecovery()", +"e0328c80": "hasRedeemed(address,address,uint256)", +"e033192c": "gettransferableStartTime()", +"e03335b4": "_calculatePricePerPixel(uint256)", +"e033f73c": "executeApplication(address)", +"e0340a05": "Maya_Preferred()", +"e035e1ac": "thirdBonusEnds()", +"e03652c2": "isTransactionPending()", +"e0376e74": "LOG_EmergencyWithdrawalSucceeded(address,uint256)", +"e037a71c": "withdrawLimit(address,uint8)", +"e03827d2": "left70(uint256)", +"e0389a47": "removeAccountMilestone(address)", +"e038c75a": "circulating_supply()", +"e0391b6f": "trackable_dislikes(address)", +"e03992fd": "nextForkUrl()", +"e039967c": "migrateTransfer(address,address,uint256,uint256)", +"e039e4a1": "getOwner(uint8,uint8)", +"e039f224": "isFork()", +"e03b3044": "setAyantDroitEconomique_Compte_7(uint256)", +"e03bc7e1": "_registerDevice(address,bytes32,bytes32,bytes32)", +"e03c151e": "LogSetSTOContract(address,address,address,uint256,uint256)", +"e03c1c4b": "setLineStartTime(uint256,uint256)", +"e03c639c": "addPreSaleWallet(address)", +"e03cca4d": "setChallengeFormulaContract(address)", +"e03d890b": "_addTokenToAllTokensEnumeration(uint256)", +"e03e09a8": "_createAuction(address,address,uint256,uint256,uint256)", +"e03ec01d": "getTargetWallet(address)", +"e0401918": "SMRToken()", +"e0402d26": "validDoHash(bytes32)", +"e04093d6": "updateOracleWithENS()", +"e040c164": "createT513(uint256,uint256,address)", +"e040f3e1": "_humanSender(address)", +"e0412a54": "setBonusRound2(uint256)", +"e0429b6c": "ShinySquirrels()", +"e042ad58": "operationWallet()", +"e0443e92": "LogCreate(address,address,uint256,uint256)", +"e0446273": "messageIsEmpty(string)", +"e044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"e044c47f": "playerRollDice()", +"e0453376": "hasFourYearWithdraw()", +"e0457049": "trustedInput()", +"e0457884": "betResolution(uint8,uint8,uint8,bool)", +"e0462547": "setEndPreSale(uint256)", +"e0462d0a": "coreTeamMemberOne()", +"e046c4dc": "Delete()", +"e046f06f": "deathData_a1()", +"e0470e02": "matureDragon(uint256)", +"e0472e36": "swapProposal(uint256)", +"e0475e27": "holderMarketingTokens()", +"e048d0fc": "voteCancelCurrent()", +"e0495a64": "getNormalBuyers()", +"e04a1942": "test_fourValidEqUint()", +"e04a2525": "NoahDividend(address)", +"e04a8c08": "Sold()", +"e04ac09e": "BountyIssued(uint256)", +"e04c130b": "token_transferFrom(address,address,address,uint256)", +"e04c1830": "findNextHour(uint256,bytes2)", +"e04cd07c": "BOLTH(address,address[],address)", +"e04d5105": "calculateSeedBuySimple(uint256)", +"e04f31e9": "forward(address,uint256,bytes,bool)", +"e04fac0c": "aVideoCost()", +"e0504910": "buyWithTokens(address)", +"e050674c": "_deliverWhitelistBonus(address)", +"e0522012": "getAdjustedPotAsFixedPointForGameId(uint256,bool)", +"e052a587": "isNotExpired(uint256,uint256)", +"e052f0c8": "setParams(string,string,string,string,uint256,address,uint256)", +"e053178a": "XCPlugin()", +"e0539225": "preicoPrice()", +"e054057d": "LogBuy(uint256,address,uint256)", +"e0540d85": "CDreamingICO()", +"e054c029": "changejp2(address)", +"e055bba4": "turnId()", +"e056989a": "OfferUpdated(uint256,bytes,uint256,address)", +"e056c1eb": "isGlobalPause()", +"e056f2ff": "takerFeeRateE4()", +"e0576665": "addLen(string)", +"e0585ce8": "BetcoinICO()", +"e058cc59": "setMemeTemplate(string)", +"e0591ddc": "gizerItemsContract()", +"e059c868": "private_UpdateGameBarLimit(uint256,uint256)", +"e05a48cd": "unregisterVendor(address,address)", +"e05b4c5f": "GetReferredAt(uint256)", +"e05b5456": "ChenToken(address,address)", +"e05bac82": "amountReceivedFromExchange(uint256)", +"e05c5a83": "sellerOf(uint256)", +"e05cb6f4": "Mitrav()", +"e05d769e": "expirationSeconds()", +"e05e3028": "getCommunityManagement(uint256)", +"e05e91e0": "returnUint64(uint64)", +"e05ea744": "frost()", +"e05ee7a4": "RATEotu()", +"e05f149e": "getTotalRuns()", +"e05f7d67": "setPCoinContractAddress(address,address)", +"e05fad90": "decode(bytes,uint256,uint256)", +"e0607290": "confirmChangeOracle()", +"e06174e4": "settings()", +"e0619859": "At(uint256,bytes32)", +"e061ddca": "getSensorAddress()", +"e0623632": "UNSOLD_ADDRESS()", +"e062aff8": "startTimeNumber()", +"e06309bb": "ValueOwners()", +"e06375c8": "_fDist()", +"e063a439": "_computeFee(uint128)", +"e06452d0": "Completed()", +"e064bc82": "setFoundersTokensWalletSlave(address)", +"e064c1ec": "denyChanges()", +"e065029e": "PokemonPow()", +"e0655fe5": "changeBuyFee(uint256)", +"e06572ec": "sell(address,uint256[],uint256[],bool)", +"e065914c": "isPersonalLock(address)", +"e065e388": "NewBOP(address)", +"e067ea46": "Etherep(address,uint256,address,uint256)", +"e067f631": "intervalUpdate()", +"e06868e2": "numberOfBet()", +"e06902fa": "ito()", +"e06a09ec": "calculateInterestIndex(uint256,uint256,uint256,uint256)", +"e06a60ff": "HumanityCard()", +"e06aa145": "TokenBurned(address,uint256,uint256,uint256)", +"e06abd36": "updateMAX_AMOUNT(uint256,uint256)", +"e06af204": "BetlyCoin()", +"e06b5837": "getCanSellUnit(address,address,uint256)", +"e06b7e39": "getInitOrInput()", +"e06b850c": "testIntParserTwoDecimal()", +"e06c0fd2": "SatoshiToken()", +"e06c5808": "burnFromAddress(uint256)", +"e06d8de9": "acquisitionsLockEndingAt()", +"e06e0051": "withdrowETH()", +"e06e0e22": "postRelayedCall(bytes,bool,uint256,bytes32)", +"e06e0e43": "overLimit()", +"e06e3873": "encrypt(uint256[])", +"e06e6b20": "Like(bytes32,bytes32,uint256)", +"e06e82b2": "teamNIMFAAddress()", +"e06e9d22": "addCustomerTokenAmount(address,uint256)", +"e06ec0bb": "isListing()", +"e06f3d38": "ownerA()", +"e06fa13d": "ETCL()", +"e06fa68e": "updateAfter(uint256)", +"e06fc6d4": "mainsaleRemaining()", +"e0709589": "blink_block()", +"e0715a86": "unlocksCount()", +"e071681d": "setManyAccountsVerified(address[])", +"e071c0ca": "transferVaultOwnership(address)", +"e072830c": "FUNDING_ETH_HARD_CAP()", +"e0728801": "ANV()", +"e072bd10": "getPlayerInventory(address)", +"e073ef69": "pubKeyToBitcoinAddress(bytes,bool)", +"e0741187": "createBreedingAuction(uint256,uint256,uint256,uint256)", +"e074278d": "setOwnerAddr(address)", +"e074b027": "hasExecuted(uint256)", +"e074bb47": "removePermission(address)", +"e074ee55": "getPeriodsToPay(bytes32,address,uint256)", +"e0755792": "Permission(bytes32,address[],bytes4[])", +"e0755b35": "WePOW()", +"e076c0ae": "queryNow()", +"e0772f6a": "CROWDSALE_TOKEN_IN_WEI()", +"e0775be1": "create(address,address,address,address,address,address,address)", +"e0778211": "_releasableAmount(address,uint256)", +"e077ca97": "fx()", +"e078c549": "getNumberOfTokensToIssue(uint256)", +"e07959bd": "setGainsRate(uint256)", +"e079e334": "getNewCoinFee()", +"e079e7e5": "addStock(string,uint256,uint256,uint256,uint8)", +"e07a2671": "migrationSetPlayer(bytes32,uint256,bytes32,address,uint256,uint256,uint256)", +"e07a31c7": "getWinningCount(uint256,uint256)", +"e07a5d29": "CLRCoin()", +"e07be247": "createSellENS(string,uint256)", +"e07c80fb": "getKindAddress()", +"e07ccdeb": "totalPartnerWithdrawSupply()", +"e07cd936": "ArtcoinPlaceholder(address,address)", +"e07d4f6b": "saveCarDataTransaction(address,address)", +"e07f0b66": "SendMessage(uint256,string,address)", +"e07f0f13": "ZhangPeiPei(uint256,string,uint8,string)", +"e07f0f5e": "transferToken(address[],uint256[])", +"e07f3dd6": "go(uint8)", +"e07fa3c1": "withdrawFund()", +"e080241c": "setNFTDetached(uint256)", +"e080b60c": "apiCallsContractAddress()", +"e0812c75": "migrateInvestorFromHost(address,address)", +"e0813e25": "getRandomInt(uint256)", +"e0813e5e": "updateTokensPerEthOnce(uint256)", +"e08155dd": "ICO_PERCENTAGE_4()", +"e0815ca9": "findNextMinute(uint256,bytes2)", +"e0818669": "lps()", +"e081b569": "DiceOnline()", +"e081fdfe": "availableBalanceOf(uint256,uint256)", +"e082707c": "_uintToString(uint256)", +"e0832cf6": "getWinCount(address)", +"e0834ea4": "WatchBalanceInEther()", +"e083a1b5": "_createEstate(int256[],int256[],address,string)", +"e083d4c8": "dividendBalanceOf(address)", +"e084a819": "prepareCrowdsale()", +"e08503ec": "calculateNextPrice(uint256)", +"e085448f": "FIRST_USER_CUT()", +"e085942a": "getSubjectMattersSize()", +"e085c539": "getPlayerScore(address)", +"e085f82b": "rejectCertificate(address)", +"e086141d": "Assigned(address,uint256)", +"e0862fd7": "getNumBadBets(uint256)", +"e086e5ec": "withdrawETH()", +"e0873c06": "reissueAsset(bytes32,uint256)", +"e08761f5": "dtValidateCitySnapshot(address,uint256)", +"e087cd55": "withdrawIncentives()", +"e0882af8": "airDrop(address,address[],uint256[])", +"e0886f90": "at(uint256)", +"e088747b": "withdraw(address,uint256,string)", +"e088a96b": "claimerUnset()", +"e08a5f9e": "startPresaleDate()", +"e08ac014": "unlockPeriodNum()", +"e08b63ad": "getAddTokenNonce()", +"e08bc3fe": "parseInt(bytes)", +"e08d28d3": "maxInvestmentICO()", +"e08d8497": "ICO_LEVEL_2()", +"e08e433a": "transferTime()", +"e08ed5f9": "withdrawBid(int256,int256,int256)", +"e090318c": "setFacts()", +"e090ebab": "VUO()", +"e0911183": "devTeamAutoBuy(uint256,uint256)", +"e091de56": "MDA()", +"e091f453": "setDividend(uint256)", +"e0929b95": "claimFreeFirstCard(address)", +"e092e85f": "getStakedBalanceUnOrdered(uint256,bytes32)", +"e093a157": "abs(uint256,uint256)", +"e09413ba": "totalDistributedAirdrop()", +"e0945a80": "wbcoin()", +"e0950ddf": "getBet(uint256,address)", +"e095f814": "etherToToken(uint256)", +"e0963ced": "LinkEyeStandardToken(uint256,string,uint8,string)", +"e09678fd": "setIcoContract(address)", +"e097e7b9": "sendTokensBack()", +"e098161b": "getRareCoinAddress()", +"e09874c0": "setPlayConfigs(uint256,uint256,uint256)", +"e0987873": "BurnedAllRemainedTokens()", +"e098c76d": "optionPoolTotalMax()", +"e09adc70": "ethToTokenRate()", +"e09ca60c": "secureApprove(bytes32,uint256)", +"e09ceada": "_newAuction(uint256,uint256,uint256)", +"e09cffcf": "SingularityTest18()", +"e09d0b75": "compareLeaf(uint256,uint256,uint256,uint256)", +"e09dbfa4": "checkPatternExistance(bytes32)", +"e09dd024": "FNCTToken()", +"e09ded57": "lengthOfCommonPrefix3232(bytes32,bytes32)", +"e09e9490": "releasePendingTransfer()", +"e09ea701": "BaseMonoretoCrowdsale(uint256,uint256,uint256)", +"e09ee57f": "feePercentageMax()", +"e09ef83e": "promoCutieCreatedCount()", +"e09f0020": "subCreditScore(uint256,string)", +"e09f310a": "get_iconiq_presale_open(address)", +"e09f6f49": "successAtBlock()", +"e0a09c1f": "Crowdsale(address,address)", +"e0a0f50d": "setSlaveWalletPercent(uint256)", +"e0a1a292": "addressAdvisors()", +"e0a1be53": "updateTargetedMoneyReached()", +"e0a1ca6e": "winningChance()", +"e0a1fdad": "unset(bytes12)", +"e0a21739": "setBlackFundsWallet(address)", +"e0a27b2c": "withdrawWinnings(uint256,uint256)", +"e0a29e23": "owner_freeze_start()", +"e0a3bff7": "RollCount()", +"e0a3e7ec": "computeDeferBlock()", +"e0a49f14": "setMatchOutcome(uint256,string)", +"e0a4aacb": "ExacoreContract(uint256,string,string)", +"e0a53397": "createSingle(uint256)", +"e0a550fc": "closeMainSaleICO()", +"e0a60ea3": "BITTOToken()", +"e0a62339": "getSha256_UInt(uint256,uint256)", +"e0a668b4": "setVesting(address,uint256,uint256)", +"e0a70811": "restart(bytes20,bytes)", +"e0a73a93": "premium()", +"e0a7527d": "updateCABoxToken(address)", +"e0a7b2c3": "startChallenge()", +"e0a802ba": "scanInputs(bytes,uint256,uint256)", +"e0a827c6": "RxI()", +"e0a8299f": "galleryTwo()", +"e0a82ea8": "setMinBetPerRoll(uint256)", +"e0a8aa72": "channelOpened(uint64)", +"e0a8f6f5": "cancelProposal(uint256)", +"e0aa5654": "getCountReadyPlayerByTrackId(bytes32)", +"e0abdf66": "setBlockTimestamp(uint256)", +"e0ac2b72": "HaHaChainToken()", +"e0ac50cb": "isTreasureBox(address)", +"e0ac61bb": "changeOwnerSharePerThousandForMating(uint256)", +"e0acac7f": "withdrawSum()", +"e0ad411d": "assets(bytes)", +"e0ae751f": "setAuthorizedContract(string,address,bool)", +"e0ae96e9": "din()", +"e0b1cccb": "updateBalance(address,uint256)", +"e0b1cecd": "DataToken()", +"e0b30178": "OVCLockAllocation(uint256,address,address,address)", +"e0b3198c": "serverPort()", +"e0b34ef1": "_setERC820compatibility(bool)", +"e0b3c49c": "acceptTermsAndJoinDXF()", +"e0b3cc90": "priceOf(uint32)", +"e0b438ef": "removeNameByOwner(string)", +"e0b45487": "_setValidator(address)", +"e0b490f7": "getAccountId(address)", +"e0b4cf0a": "setMinMaxBet(uint256,uint256)", +"e0b6cddd": "LLV_311_EDIT_2()", +"e0b78225": "RemoveTrustedContractAddress(address,address)", +"e0b86c53": "decreaseLock(uint256,uint256,address)", +"e0b999a1": "getAmount(address,uint256)", +"e0b9e83d": "update(address,address,address,uint256,uint256,address)", +"e0bab523": "for_rewards()", +"e0bb933b": "getDragon(uint256)", +"e0bc6c44": "claimInsurance(bytes32)", +"e0bc6dea": "removeTransferableAddress(address)", +"e0bd3015": "getClaimableBalance()", +"e0bd53be": "sellTokensForZec(string,address,uint256,uint256)", +"e0bd7d15": "addContributor(address,uint256)", +"e0bede59": "firstPeriodSupply()", +"e0bfa1f7": "removeUtilityHolder(address)", +"e0bfe9ad": "MAX_TOKENS_RESERVE()", +"e0c012ff": "modifyairdrop(uint256,uint256)", +"e0c104ad": "DONC()", +"e0c2bc77": "CDEos(uint256,string,uint8,string)", +"e0c2dcbd": "last_win_wei()", +"e0c4cea8": "GrowToken()", +"e0c5f3a0": "add256(uint256,uint256)", +"e0c6046c": "donateToProject(uint16)", +"e0c6190d": "checkTime()", +"e0c63902": "Ok()", +"e0c67b9c": "ROKToken()", +"e0c68158": "changeIssuanceAddress(address)", +"e0c68db0": "shr(uint32,uint8)", +"e0c6d1ed": "migrateForInvestor()", +"e0c78337": "XITOToken(address)", +"e0c7c117": "Randao()", +"e0c82651": "RWToken()", +"e0cb3aa0": "buyWithLimit(uint256,uint256)", +"e0cbbde7": "makeCode(uint256,string)", +"e0cbc2cb": "changeInGameAmount(uint256)", +"e0cbf845": "testAddLocked()", +"e0cc4e1b": "LifCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"e0cd34f6": "getBlockBuildFee(uint256)", +"e0cd6eff": "board_size()", +"e0ce0b79": "processSeason(uint32)", +"e0ce72cb": "_fConfig()", +"e0ceb25b": "fairsaleProtection()", +"e0cec919": "setDailySupply(uint256)", +"e0cee23f": "SuccessfullyTransferedFromCompanyInventory(address,uint256,bytes32)", +"e0cf1316": "_transferPlayer(address,address,uint256)", +"e0cf17a5": "totalStoredDDT()", +"e0cf1e4c": "removeMembers(bytes32,address[])", +"e0cf715d": "EtherTrend()", +"e0cf72e1": "ERC20Token(uint256,string,string)", +"e0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"e0cfde22": "setRestrictedParticipationCap(address[],uint256)", +"e0d05c51": "MemoireClement()", +"e0d1ba52": "Rate_Eth()", +"e0d2771d": "MINIMUMINVESTMENTPRESALE()", +"e0d29d38": "STARTING_POOH()", +"e0d3558e": "GetBoosterData(uint256)", +"e0d370ac": "site()", +"e0d4ea37": "getSeed(uint256)", +"e0d4ea7e": "addDestructionProposal(string)", +"e0d54970": "getInstructions()", +"e0d5af94": "ownerWithdrawAll()", +"e0d669d8": "tradesLock(address)", +"e0d6d530": "setContracts()", +"e0d751da": "returnBets()", +"e0d77ff6": "hasBeenBooted(uint32)", +"e0d79d38": "addcertifieddata(string,string,string)", +"e0d872b7": "getSideServices()", +"e0d9bc7b": "sybmol()", +"e0da260c": "widthdraw(uint256)", +"e0da4abd": "getDefaultExchangeRate()", +"e0db6781": "offerDraw(bytes32)", +"e0db874d": "moneyBack(address)", +"e0dba60f": "setController(address,bool)", +"e0dbbea2": "search(uint256,bytes32)", +"e0dc892c": "GiftHasBeenSent()", +"e0dcf2d8": "processInitialDistribution()", +"e0dd31da": "MDCSToken(uint256,string,uint8,string)", +"e0dda563": "GetContractStagePreMoveIn()", +"e0ddaa0e": "MAX_TOKEN_BUYIN()", +"e0dec0c0": "contractValue()", +"e0df51bb": "test_oneValidAndInvalidEqAddress()", +"e0df53b9": "LotteryRoundStarted(bytes32,bytes32,uint256,string)", +"e0df5b6f": "setTokenURI(string)", +"e0dfd0a6": "GIFTCOIN()", +"e0e04685": "setOldContract(address)", +"e0e081d7": "marketStatus()", +"e0e0e2d3": "random(uint8)", +"e0e1104d": "tierWhitelist(uint256)", +"e0e11a14": "newVowIdFlag(address,uint256,uint256)", +"e0e1593c": "decayedPriceFrom(uint256,uint256)", +"e0e16f91": "TestContract(address,uint256)", +"e0e1a7f0": "testSHA3()", +"e0e267e5": "minimumWei()", +"e0e29ac1": "SLMICO(address)", +"e0e32504": "isDaySixtyChecked()", +"e0e34e06": "getGlobalConstraintParameters(address,int256,address)", +"e0e3671c": "checkOwner(address)", +"e0e3b9d7": "ImmutableShares()", +"e0e3ba5a": "getLosesShare(address)", +"e0e3feae": "skimALittleOffTheTop(uint256)", +"e0e40349": "name(address,bytes32)", +"e0e4704e": "RequestDetachmentOnPause(uint256)", +"e0e4731a": "TokenGoalReached()", +"e0e4c438": "sendInternally(address,uint256,uint256)", +"e0e58009": "BookingPoC(address,address,uint256)", +"e0e5fffd": "preSale4()", +"e0e69937": "setDefaultVestingParameters(uint256,uint256,uint256,uint256,bool)", +"e0e6d6cb": "requireValidIndex(uint256,uint256)", +"e0e7127a": "getContractOwnerAddress()", +"e0e722b7": "MAX_ALLOWED_STAGE_3()", +"e0e81ccb": "getCurrentSchellingRoundID()", +"e0e848c0": "checkDone()", +"e0e84e81": "changeCompanyWalletAddress(address)", +"e0e85fe8": "StatEventA(string,address)", +"e0e8823c": "withdrawDai(uint256,address)", +"e0e8a555": "KAL3Token()", +"e0e9b349": "getReportRegistrationFee()", +"e0ea129e": "militaryToken()", +"e0eb3035": "registerAudits(bytes32[],bytes,bool)", +"e0eb60b2": "initialSpinners(uint256)", +"e0eb6613": "PresalePool(address,uint256[],uint256)", +"e0eb9449": "mateAnimal(uint256,uint256,string,string)", +"e0ebd259": "discountValue()", +"e0ebdbff": "getAuditRequestor(uint256)", +"e0ec289a": "creditsExchanged()", +"e0ed78d1": "setRouletteRules(address)", +"e0ee74e9": "changeActualQueue(address)", +"e0ee94e9": "PocketCoin()", +"e0eef0b9": "BOOKIE_POOL_COMMISSION()", +"e0efdaf9": "softCapTokensAmount()", +"e0f0497d": "currentTokenSaleId()", +"e0f06352": "testIsContractAddress()", +"e0f20a65": "etherLock()", +"e0f31fae": "isDoneReporting(address)", +"e0f32198": "runSweepStake()", +"e0f3691d": "thisEther()", +"e0f426fa": "numMCApplied()", +"e0f47580": "withdrawCommisionToAddress(address,uint256)", +"e0f4a1a2": "minimumPRETDEContributionInWei()", +"e0f4ed01": "parcelEth()", +"e0f50bac": "senderWithdrawal(uint256)", +"e0f609d4": "unsafeIsEncrypted()", +"e0f6cc07": "isChain(string)", +"e0f74cde": "BONUS_TIMES_VALUES(uint256)", +"e0f76121": "GlobalCryptoShares()", +"e0f771c9": "Bithumb(uint256,string,string)", +"e0f7b44d": "PreTgeExperty()", +"e0f898e4": "totalTokenLossValue()", +"e0f8c670": "getFirstPaymentAmount()", +"e0f8da97": "sponsoredBonusToken()", +"e0f9210b": "batchDistributeReward(address[],uint256[],uint256)", +"e0faf0a8": "getOnSaleIds()", +"e0fb8459": "recevedEthFromExchange(address,uint256)", +"e0fce922": "deliver(address,uint256,uint256)", +"e0fd59bf": "disableAdminForever()", +"e0fddf81": "setemployee(address,string,uint256)", +"e0fdf336": "finalReserveTimeLock()", +"e0fe01f4": "makePrediction(int8,string)", +"e0fe075e": "payoutReady()", +"e0fe42be": "existsPriceOnAssetPair(address,address)", +"e0fe4a84": "updateStrategyCategory(bytes15,uint256)", +"e0fe6d07": "SideBridge(uint256,address[])", +"e0fe9ccf": "WaltonTokenLocker()", +"e0ff5b8b": "getBook(uint256)", +"e0ff5d2f": "setMaxRacers(uint8)", +"e0ffa0da": "lastBlock_f13()", +"e0ffe8e3": "newOrder(string,string,uint256,uint256,string,string,string)", +"e1005556": "allowTransferWhitelist()", +"e1017332": "sellPaused()", +"e1021b53": "getLuckyRecordSize()", +"e10289b8": "addContributor(uint256,address,uint256)", +"e102baab": "setTokenController(address)", +"e102d950": "getNameHash()", +"e1036f86": "tax_distributed()", +"e103f176": "transfer_master(address,address,uint256)", +"e1041d86": "__throw()", +"e106fae9": "lottoLowestNumber()", +"e106fb4b": "stringToBytes(string)", +"e1082335": "to(bytes32,address)", +"e1089240": "Csts()", +"e108d2d6": "setMintAdminApproval(address,address,address)", +"e1094ff6": "DGZTokensSold(address,uint256)", +"e1097249": "initStage()", +"e109ef24": "setTokenOperatorApprovals(address,address,bool,bool)", +"e10a70b7": "LogRedeemVIBE(address,uint256,uint256,uint256)", +"e10aa985": "Elyxr()", +"e10b650b": "winnerWithdraw()", +"e10bcc2a": "startMilestone(bytes32,uint256,address,uint32)", +"e10be707": "changeGoodBye(string)", +"e10c7bb5": "EventStore()", +"e10d29ee": "queue()", +"e10d416f": "enablePurchasing(bool)", +"e10d4c0b": "isSaler(address)", +"e10e274a": "CrazyEarning()", +"e10e5dce": "_build(bytes)", +"e10e66e6": "changeWeiPerToken(uint256)", +"e10e8ffe": "doOraclize()", +"e10e95c9": "fundingEnabled()", +"e10eda7a": "IOCFundIndex()", +"e10f1b06": "isTournament(address)", +"e10fb98f": "testMul()", +"e1103422": "retractRewards()", +"e11074cb": "initFund()", +"e1108706": "rfind()", +"e1112648": "record(bytes)", +"e1115aa5": "addUserRewards(uint256,uint256,address)", +"e1134799": "claimDaoStakeSupply(address)", +"e11398e8": "burnLeftovers()", +"e113c6fd": "ICO_SINCE()", +"e11443cb": "UWNToken(uint256,string,string,address)", +"e1152343": "payout(uint256)", +"e11527d4": "linkedContract()", +"e11583b7": "TokenOPSSaleAddress()", +"e116b17e": "getKudosLeftForProject(address,address)", +"e1175a79": "getMyTickets(string,address)", +"e117e6f9": "MyToken(uint256,string,uint8,string,uint256,uint8,uint256,string,string,string,string,string,string,string)", +"e1181c73": "faucetLif()", +"e1187e2e": "getCollectibleWithMeta(uint256)", +"e118eda4": "featuredSpritesLength()", +"e118fba2": "redeemPurchases()", +"e119f8bb": "migrateMarketInFromNibling()", +"e11a5a4f": "allocateStartBlock()", +"e11aa56d": "getDeedTimestampByAddress(string,uint256)", +"e11b09e0": "softCapCompleted()", +"e11b53af": "getContributionsCount()", +"e11dba54": "messagesLength()", +"e11df80d": "batchVipWithLock(address[],uint256[],bool)", +"e11e1b0c": "escrowBalance()", +"e11efa06": "getProgress(uint256)", +"e11f493e": "reentrancy()", +"e11f6398": "MAXIMUM_PERCENT()", +"e11fe9ec": "hasItem(uint256,uint256)", +"e12073a0": "getAllDetails(address)", +"e12097b7": "getCurrSale()", +"e121c102": "incentives(uint256)", +"e1221400": "getCoinInfo(string)", +"e1226164": "getFamilyById(address)", +"e122c028": "totalLBSold_GENERAL_2()", +"e122f1b2": "GoldenCurrencyToken()", +"e123182b": "purchase(bytes32,uint256)", +"e1248d52": "DYLC_ERC20Token()", +"e124e37b": "add_allowedAddress(address,address)", +"e124f899": "toPool()", +"e1252b9b": "make_anonymous_registration(uint256,uint256)", +"e1254fba": "getDeposit(address)", +"e125501f": "refundParticipants(uint256)", +"e125f88b": "aoccoin()", +"e1266042": "setTakeOwnershipFeePercents(uint256)", +"e126eb7d": "referralCodeFromAddress(address)", +"e1270b6e": "approval(address,address)", +"e1281280": "setAddressUIntMapping(address,uint256)", +"e12849b2": "getMineGenesis()", +"e1287520": "getBets(uint256,uint256)", +"e128f0d6": "getTogetherDate()", +"e12925a9": "setUnownedNickname(uint256,string)", +"e129330b": "factorContributed()", +"e129c99d": "notaryBookSize()", +"e129f783": "NameRegistered(address,bytes32)", +"e12a3bbe": "icoAllocation(uint256)", +"e12a894e": "CbdStandardToken(uint256,string,uint8,string)", +"e12badcf": "PlatformInformation()", +"e12bcd68": "relayerName()", +"e12bceeb": "performEqual(address,address[],uint256)", +"e12cbb3c": "SIGNAL_DELAY()", +"e12cbb9e": "updateOrderBatch(bool[],uint32[],uint128[],uint128[],uint32[],int256)", +"e12ed13c": "currentBlock()", +"e12ee8d7": "totalAmountRaked()", +"e12f3a61": "getClaimableAmount(address)", +"e12f670f": "DiscourzeToken()", +"e13044fb": "changeEth_to_usd(uint256)", +"e13062c2": "getInvoices(address,uint256[])", +"e1313dfb": "additionalInfo(uint256)", +"e13245b1": "getCommunityBallotsEnabled()", +"e13251b9": "listAssetsFrom(uint256,bytes32,uint256,bool)", +"e132db41": "checkRate()", +"e1332ab9": "setParameter(string,string)", +"e13380e9": "EmClassic()", +"e133ad53": "extendCost(uint256)", +"e1345b02": "SMARTGold()", +"e134c9ff": "shutdownMarket(address,bytes32)", +"e134e33d": "reason()", +"e1351c05": "pay_coin()", +"e1370365": "makeLogFill(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"e137047b": "RESELLING_LOCK_UP_PERIOD()", +"e1376da2": "updateFirstActiveGamble(uint256)", +"e137cdd9": "totalTokenCreationCap()", +"e138efb2": "setAllowStart(bool)", +"e139bbd8": "getBalance1(address,address)", +"e139e569": "getPriceAndTime()", +"e13a7716": "testReturn()", +"e13aba48": "testBurn()", +"e13bd03c": "delCashier(address,address)", +"e13c6b39": "externalContribution(address,uint256)", +"e13da09f": "HARJToken(string,uint8,string)", +"e13dc28b": "testValidTransfers()", +"e13e2ecf": "dev_issueTo(address,uint256)", +"e13ec1fa": "RoundChanged(uint256)", +"e13efb79": "getReferenceHash(bytes32)", +"e13fafdb": "marketCoins()", +"e13fe91c": "REALPlaceHolderMock(address,address,address)", +"e1404b41": "setNewMembers(address,address,uint256,uint256)", +"e1419546": "makeLiquid()", +"e1421a45": "makeIntString(string,uint256,string)", +"e142967e": "addClaim(uint32,int256,string,string,bytes)", +"e1437b00": "calculateCurrentMarketPixelPrice(address[16])", +"e143b3a1": "createNewEscrow(address,address,address)", +"e1444721": "minGoalReached(uint256,string)", +"e1472d88": "increaseBalance(address)", +"e1479d07": "megoAddress()", +"e1479ebe": "is_registered(bytes32)", +"e1482188": "showCollectedFee()", +"e1486ea8": "getContest(uint32)", +"e1489191": "commission()", +"e148bae9": "assignClientIfNotAssigned(address)", +"e148fe28": "transferTokensFromReserveAddress(address,uint256)", +"e1496d16": "TEAM_NAMES(uint256)", +"e149f036": "ownedTokens(address,uint256)", +"e149fbfa": "ShapeshiftBotSolo(string)", +"e14a147e": "addPokemon(string,address,uint256)", +"e14acc04": "getCanLoanAmount()", +"e14b238a": "EITToken()", +"e14b7571": "stage_3_price()", +"e14b983e": "LevelToken()", +"e14c4675": "rateForMainICO()", +"e14c5e17": "setcreatorAddr(address)", +"e14ca10e": "oraclizeCallbackGasLimit()", +"e14df8b7": "subDepotEth(address,uint256)", +"e14e1ba7": "_getTokenAmountWithReferal(uint256,uint8)", +"e14e5ca4": "BETHER()", +"e14ed045": "getContributionOf(address)", +"e14f08d5": "renounceTokenOwnership()", +"e14f680f": "sendAll()", +"e151fb62": "_updateMetadata(uint256,string)", +"e153591c": "FairyFarmer()", +"e1538b32": "gasPayback()", +"e1539c53": "claim(bytes32,string,string)", +"e153af40": "RiyazToken()", +"e153b74e": "tokenFallback(address,uint48,bytes)", +"e154179e": "addToTrusted(string)", +"e1541b7d": "testDiacritcs()", +"e1541bc3": "setTdeIssuer(address)", +"e154d17d": "heldTokens(address,uint256)", +"e155999e": "getFreeCrocs()", +"e155b66c": "ConvnertToSecret(uint8,string)", +"e15618b9": "founderWithdrawablePhase4()", +"e1567997": "kscBatchTransferToBounty(address,address[],uint256[],uint256,uint256[],string)", +"e1568024": "totalAmountOfCrowdsalePurchasesWithoutBonus()", +"e1569f6b": "testThrowsSetNotRetractableNotOwner()", +"e15746af": "TJCUToken(uint256,string,uint8,string)", +"e157819a": "distributeCOMIKETCOIN(address[],uint256)", +"e1587aae": "maxFinneyPerSaleLessThan()", +"e158a24e": "ethTransfertoACC(uint256)", +"e1590ed7": "mainEtherReceived()", +"e15a307c": "killAndRefund()", +"e15cba26": "_pay(bytes32,address,uint256,uint256,uint256)", +"e15d051f": "adminUnsigned(address)", +"e15e9d47": "depositFlag(address,uint256,uint256)", +"e15f3ec2": "Sent(address,address,int256)", +"e1606013": "issueCert(uint256,bytes)", +"e160a1d6": "manaPerEth()", +"e160e146": "createContractToken(string)", +"e161c3bf": "getPercentage(uint256)", +"e1621b04": "getDatePosted(uint256)", +"e163698a": "setTokenForPublicSale(uint256)", +"e16385fc": "destroyTokens(uint256,address)", +"e163b75b": "settleBet(bytes20,bytes20,bytes32)", +"e164483f": "numberOfBlocksToStartGame()", +"e164ac50": "teamPercent()", +"e1654fad": "roundIn(uint256,string)", +"e1661eff": "getClaim(address,address,bytes32)", +"e1661ff2": "Later(address)", +"e1662aa6": "saveMsgByUser(string,string)", +"e166b756": "ownerMethod()", +"e166bebd": "BINOToken()", +"e1674588": "getTokenURIs(uint256,bool)", +"e1675421": "changeFsTKAuthority(address)", +"e167dbca": "exchangeTokens()", +"e168a31a": "getOwnedArea(address)", +"e168ae8a": "_isPreICO()", +"e168c3ec": "votes()", +"e16b924d": "sellBonds(uint256,bool)", +"e16ba8c6": "privateSale1Hardcap()", +"e16bd3b7": "getSales(address)", +"e16c7d5e": "signedApprove(address,address,address,uint256,uint256,uint256,bytes,address)", +"e16c7d98": "getContract(bytes32)", +"e16c8053": "setTransfer(uint256,uint256)", +"e16c8d4b": "viewMyShares(bool)", +"e16c93e5": "Swarm(address,address,uint256)", +"e16dbb2f": "Multiplication(uint256,uint256)", +"e16dd936": "getVestingSchedule(address,address)", +"e16e2843": "setdividendFee(uint8)", +"e16e9340": "getAddressArrayIndex(bytes32,uint256)", +"e16e93aa": "DU30Token(string,uint8,string)", +"e16f374c": "getHarborLocation(uint16,uint16)", +"e16f5fe9": "DeathFactor_iv()", +"e16fb2f9": "recordInvestment(address,uint256,uint256)", +"e16fe580": "CalcHash(bytes)", +"e1703521": "setPriceMoreThanOneETH(bool)", +"e170dd81": "MintingSale(address)", +"e1725c92": "decimalPlaces()", +"e1726faa": "pushDividendPayment(uint256,uint256,uint256)", +"e1727807": "splitPot()", +"e1727fc6": "contractDeployedTime()", +"e172a57e": "updateGenerationStopTime(uint256,uint8)", +"e172dac8": "ethOdinRate1()", +"e1733234": "get_all_activity(uint256,address)", +"e173b0d0": "reserveAll()", +"e17463c2": "changelp5(address)", +"e174f106": "ManualMigration(address)", +"e1757a3c": "TIMEOUTBLOCKS()", +"e1758bd8": "nativeToken()", +"e175c86a": "getInviteInfo()", +"e1765073": "getPath(uint256)", +"e17682eb": "StablePrice(uint8)", +"e177246e": "setDelay(uint256)", +"e17755c4": "zrxTokenContract()", +"e177573c": "setHatchTime(uint64,uint256)", +"e177644a": "TimeStamp()", +"e177b18b": "minCoordinatorCount()", +"e177b707": "Valdela()", +"e177bb9b": "registerCode(string)", +"e17928ba": "BOBOTOKEN()", +"e17a3ccf": "paused_4()", +"e17a5894": "yoobaTeamAddress()", +"e17a7c70": "stage3_start()", +"e17b25af": "setMetadataAddress(address)", +"e17b3054": "creatorOwner(address)", +"e17b35ed": "isMint(address)", +"e17bf87a": "testRewardBB(bytes32)", +"e17cb777": "rewardRetweet(address)", +"e17e1274": "testTransferToRejectAuthority()", +"e17e1a86": "SetupWWC(string,string,uint256,uint256,uint256,address,address,uint256)", +"e17e7a20": "setTotalStaked(uint256)", +"e17fc704": "canMintFoundation(uint256)", +"e17fe6a0": "getCreatorReward()", +"e17fec26": "Unregistered(bytes32)", +"e180819e": "setBuyTime(uint256)", +"e18099e1": "ethTokenRate()", +"e180dbbd": "isEarlyBird(address,address)", +"e180e23b": "Annexe_CPS_6()", +"e182e27a": "fastHatchingPrice()", +"e182fd01": "tokensBankPartners()", +"e184c9be": "expiry()", +"e1851b83": "getMaximumFundsInEuroCents()", +"e1859169": "communityContributionQuota()", +"e185a890": "widthdrawRefunds(address)", +"e185b24c": "emptyIndex(address[])", +"e1863b19": "MultisigWalletMock(address[],uint256,uint256)", +"e186fb27": "checkcitizendetails(uint256,string,string,string,string)", +"e1878925": "isDeregisterable(address)", +"e187a550": "logCall(uint256,uint256)", +"e187eaf7": "addMoreTime(uint256,uint16)", +"e1883433": "withdrawEther(uint64)", +"e189dba1": "sellIssuerTokens(uint256)", +"e18a9134": "getLockProducts(uint256)", +"e18af2b8": "PHPCoin(uint256,string,string)", +"e18b170e": "tune(uint256,uint256,uint256,uint256,uint256)", +"e18b7fcf": "receiveFee()", +"e18c52ae": "testControlTransferNotTransferable()", +"e18c8cf9": "etherInWei()", +"e18d38ce": "getPlayerName(address)", +"e18d9bba": "getUSDAmountByWeis(uint256)", +"e18dc0f6": "pricingStrategyAddress()", +"e18e34d5": "setPayoutFee(uint256)", +"e18ed57b": "_calculateTax(uint256)", +"e18f1355": "TestERC20Token(uint256,string,uint8,string)", +"e18faad8": "_adduserdayget(address,address,uint256,uint256)", +"e18fb814": "setFixPrice(uint256)", +"e18fe709": "AirRewardTotalSupply()", +"e190264f": "newCampaignAccount(uint256)", +"e1909035": "GetCompetitionResults(uint32,bool)", +"e190d1b5": "claimFreeCrab()", +"e1911d70": "METADATA_URL()", +"e19136a4": "urbitAdminAddress()", +"e191548d": "AnimecardCore()", +"e192c4e0": "investor_Refund()", +"e193289f": "setVotingHelper(address)", +"e1938b14": "oraclizeSetWinner()", +"e193b735": "tokensDonated()", +"e1948e44": "ethRateExpiration()", +"e194e369": "getFamedStarByName(string)", +"e19593e5": "cashout(uint256,address,address,address,uint256,bytes,bytes)", +"e195d096": "tokenReserved()", +"e195f2ec": "howManyFees()", +"e1980d15": "setBuyAuctionAddress(address)", +"e199b7e4": "getMasterAdress()", +"e199c8a8": "SafiraToken()", +"e19a7bc8": "stopMigration()", +"e19ab767": "totalDistrictSupply()", +"e19aca85": "takeDividends(address)", +"e19bb964": "priceIncreasingRatio()", +"e19bc813": "bonusesCount()", +"e19bc8e5": "initPrivateIco(uint256,uint256,uint256,uint256,uint256)", +"e19d36ff": "removeAsset(bytes32,address)", +"e19eaf79": "blocknumber(address)", +"e19f1c55": "EstatePurchased(uint256,address,uint256)", +"e19fb933": "MentalHealthLifeToken(uint256)", +"e19fd3c5": "determinePurchase()", +"e1a05087": "getImpactUnmatchedValue(string)", +"e1a05344": "createSaddle6(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"e1a1cd8d": "crowdfundEndDate()", +"e1a27ad3": "needsAdministration()", +"e1a283d6": "mintingPaused()", +"e1a29a3f": "setVariationAddress(address,address)", +"e1a2c446": "lockRewardTokenMany(address[])", +"e1a382f4": "ZTHToken(uint256,string,string,uint8)", +"e1a3e55c": "buy(string,address)", +"e1a44749": "setOptions(uint256)", +"e1a566f4": "challengeExists(string)", +"e1a57611": "tokenReceivers(uint32)", +"e1a58a74": "flowerContract()", +"e1a63c14": "PixelMap()", +"e1a67cd3": "overrideTokenHolder(address,uint256)", +"e1a69d88": "level_1_amount()", +"e1a6ddcd": "isValidContribution()", +"e1a6df9e": "FLIGHT_NUMBER()", +"e1a6e625": "TradingStart(uint256)", +"e1a6f014": "offer(uint256,address,uint256,address,uint256,bool)", +"e1a7739c": "getExercisePeriodDeadline()", +"e1a8af8a": "getWinnerPrize(uint256)", +"e1a9109d": "setSeedPrice(uint256)", +"e1a9a2b1": "endRound(uint256,uint256)", +"e1a9f9b9": "_buyCallToClose(uint256,uint256,uint256,uint256,address)", +"e1aa1098": "GuardaRegistro(string)", +"e1aa1bcc": "refundDeadline()", +"e1aa60dc": "lastBlock_v3()", +"e1aa7e95": "createNewUser(bytes32,bytes,address)", +"e1ab5860": "declarePublicOfferingPlan(uint256,uint256)", +"e1ab690e": "ANRToken()", +"e1ab7cda": "OnetVN()", +"e1aba68e": "newProposal(address,string)", +"e1abf819": "GetWinner(bytes32,address,bytes32,address)", +"e1ac48ad": "saleableTokens()", +"e1aca6fb": "quickSort(uint256,uint256)", +"e1ad1162": "transfer(address,uint256,bool)", +"e1ad7699": "setPayload(string)", +"e1ad84a0": "GetFixedPrice(uint256)", +"e1addfbb": "priceOfreservations(address)", +"e1ae91b3": "TestToken(address,uint256,uint256)", +"e1af0121": "associationOf(address)", +"e1af915d": "changeGenes(uint40,uint256)", +"e1afb08c": "unlock(bytes16)", +"e1b0513b": "withdrawGame()", +"e1b0d4b2": "setTransactionsAllowed(bool)", +"e1b10970": "moveFactory(uint8,uint8)", +"e1b27e6b": "COO()", +"e1b3f338": "undoPending(address)", +"e1b40a76": "ipfsAddress()", +"e1b41513": "LIVEToken()", +"e1b4d6cb": "HOTCRYPTO()", +"e1b5265a": "PutForExchange(address,uint256)", +"e1b53078": "makerAffiliateFee()", +"e1b54285": "endDateOfVipPlacement()", +"e1b5989d": "FastLoan()", +"e1b5ce0f": "buy(uint256,string,string)", +"e1b7535f": "getDepositor()", +"e1b7abda": "HOST_SHARE()", +"e1b8347b": "testFundsAreTransferrableAfterSale()", +"e1b84ac3": "_storeSettingCreation(address,uint8,string,address,address,string)", +"e1b8708f": "OwnerChanged(address,address,bytes32)", +"e1b92b21": "LogOmegaEggSale(address,uint256)", +"e1b9dc08": "setCallbackGasLimit(uint256,uint256)", +"e1b9dea4": "Globglogabgalab()", +"e1b9ed9d": "_buyTokens(address,uint256,uint16)", +"e1ba84a9": "testFallbackThenAdd()", +"e1baa2a0": "ownerAngelTransfer(address,uint64)", +"e1baa9cb": "CNT_Common()", +"e1baed1a": "hireBountyHunter(uint256)", +"e1bc048e": "clones_to_create_one_idea()", +"e1bc3003": "reveal(bytes,string)", +"e1bccc7f": "FccToken()", +"e1bd5af9": "contractHolderAddress()", +"e1bdc3c9": "addAddressMappingProposal(address,address)", +"e1be7467": "bounties()", +"e1bedf2a": "AlarmTester(address)", +"e1bf34e9": "transferToKnownContract(address,uint256,bytes32[])", +"e1bf4f50": "upgradeM5Logic(address)", +"e1bf50c8": "_transferChamp(address,address,uint256)", +"e1bfc31e": "acceptOp()", +"e1c0669d": "getJobSponsorshipId(address,address,uint256)", +"e1c093da": "getMinerBlock()", +"e1c1451a": "tokensIssuedMkt()", +"e1c18c42": "setEarned_money(uint256)", +"e1c1b939": "verifyTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"e1c33523": "xpaFundDeposit()", +"e1c3aedc": "updateRewardVaultContract(address)", +"e1c3bac6": "stakeMaxAge()", +"e1c3fb91": "_hasClosed()", +"e1c49dde": "previousRounds()", +"e1c4a6a6": "getIsRemoved(bytes32)", +"e1c4c9fe": "remainingReward()", +"e1c52dc6": "Confirmation(address,bytes32)", +"e1c5d838": "createOrgan(string)", +"e1c621c0": "_rewardTokens(address,uint256)", +"e1c66292": "Create(uint32,address)", +"e1c68f31": "findFloorKey(uint256)", +"e1c6b14b": "addToOtherMap(uint256,uint256)", +"e1c70b29": "_createPow(string,address,uint256,uint256,uint256)", +"e1c7392a": "init()", +"e1c7f06a": "AddSharedAccount(bytes32,bytes32,bytes32,address)", +"e1c80391": "setArtcoin(address,address,address)", +"e1c941b0": "batchSendWebGiftToken(address[],uint256)", +"e1c95bb9": "updateThresholdNewTokenPair(uint256)", +"e1c9ccaa": "ShopalToken()", +"e1ca1b7d": "FilmoljupciCoin()", +"e1ca6f6f": "distribute_100_tokens_to_many(address[])", +"e1ca8b57": "setNewPriceFuncAddress(address)", +"e1caa0c7": "createAndCall(string,bytes)", +"e1cb0e52": "getVal()", +"e1cb5515": "newArticle(string,string,string,address)", +"e1cba8d2": "TUBECOINcontract()", +"e1cd5fc0": "PROJECTOPERATION_SUPPLY()", +"e1cda468": "createRequestFromBytes(bytes)", +"e1ce95c8": "summon10SkinAppearance(uint256)", +"e1cf0b3b": "refundAllPlayers()", +"e1d001eb": "mintAllowance(int256)", +"e1d03d11": "setUnlockedAddress(address)", +"e1d07058": "_modifySpendLimit(uint256)", +"e1d10d85": "getMyTickets()", +"e1d10f79": "calluseraddress(address)", +"e1d1e8ef": "getCurrentUnitPrice()", +"e1d2d3e4": "SocialMedia()", +"e1d2f649": "restartAuction(uint256,uint256,uint256)", +"e1d30979": "wolkInc()", +"e1d35155": "ProudofYourCoin()", +"e1d4efc4": "YHT()", +"e1d5988e": "discount(uint256,uint256,uint256,uint256,uint256)", +"e1d5e8eb": "rollDices(uint256)", +"e1d5ec4c": "seedShare()", +"e1d6aceb": "transferWithComment(address,uint256,string)", +"e1d6e166": "getContracts(address,uint256)", +"e1d76c8e": "getBlocksByOwnerDesc(uint256,uint256,address)", +"e1d7ce2c": "EthCentsUpdated(uint256)", +"e1d7fadc": "disqualifyHopeful(uint256)", +"e1d81736": "addUser(uint256)", +"e1d8501d": "getUSDAmount(uint256,uint256)", +"e1d94d94": "ownerChangeSlogan(string)", +"e1d9627f": "ReputationChanged(address,int32,int32)", +"e1da4135": "bountyFundAddress()", +"e1da4f85": "setStartStage2(uint256)", +"e1da5637": "setPercentWeiJackpot(uint256)", +"e1dace1a": "rewiewToken()", +"e1dad94c": "recountUsersBalance()", +"e1db206c": "limitTier1()", +"e1db8e7e": "getCreatedPayoutNumerators()", +"e1db8ff2": "mineForMany(address[],address[],uint8[],bytes32[],bytes32[])", +"e1dbc281": "changeBank(uint256)", +"e1dc7792": "OptedOut(address,address)", +"e1dcafa3": "setDefaultReputationReward(uint256)", +"e1dcf3de": "NewBooking(address,uint256,uint8,uint256)", +"e1de02f3": "_exit(address)", +"e1de373f": "addPlayerName(string)", +"e1df4517": "WealthChainToken()", +"e1df507c": "calculateAmounts(uint256)", +"e1df7f60": "startstopICO(bool)", +"e1e073b6": "amountTokenIssued()", +"e1e09299": "addUserRole(address,uint8)", +"e1e158a5": "MIN_DEPOSIT()", +"e1e1f977": "parseTx(address[4],uint256[3],uint32[4])", +"e1e29558": "completeTask(uint256)", +"e1e2ccd2": "sellDrugs()", +"e1e3f915": "parameterizer()", +"e1e46351": "mvpLaunchedAt()", +"e1e46f24": "tokenRate2()", +"e1e471eb": "BankingPayToken()", +"e1e4d737": "setTokenFront(address)", +"e1e5c093": "controlSum()", +"e1e7c320": "getGamesPlayerBids(uint256,address)", +"e1e85c4b": "splitProfit(uint256)", +"e1e867e5": "getFees(uint256,uint256,address)", +"e1e87c28": "refundToBuyers()", +"e1e87f40": "LogDividend(address,uint256,uint256)", +"e1e87f60": "_getBid(address,uint256,uint256)", +"e1e902af": "transferToLock(address,uint256,string)", +"e1e93604": "atomicMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])", +"e1e9e249": "encodeAddress(address,address)", +"e1ea0a57": "TOKKA()", +"e1ea5e05": "token_fallback(address,address,uint256,bytes)", +"e1eac4a8": "get_bountyHunter(address,address)", +"e1eae0b4": "fullUnitsStaked(address)", +"e1eb5f87": "NewPrice()", +"e1ebdb6d": "setWhitelistA(address,address)", +"e1ec12c7": "TopPlayerToken()", +"e1ed7fcb": "setBagMultiplier(uint256,uint256)", +"e1edd8ec": "getSupplyAgent(address)", +"e1eddc6d": "_rand(uint256)", +"e1ee9284": "getOwnCard(address)", +"e1ee9a3d": "isPreIcoDate()", +"e1ef42b1": "Total_Investors()", +"e1efda6d": "airaSend(address,address,uint256)", +"e1f0ae1b": "NexoToken()", +"e1f0c376": "gameDuration()", +"e1f11822": "carnumOf(address)", +"e1f16616": "invcoinSentToEther()", +"e1f21c67": "approve(address,address,uint256)", +"e1f4895a": "getCostToken()", +"e1f4a9b1": "set_pre_kyc_bonus_denominator(uint256)", +"e1f51aca": "listTokenByRank()", +"e1f5760b": "horsesRemaining(uint256)", +"e1f57846": "com_fee_transaction(address,address,address,uint256,uint256)", +"e1f5eb3f": "convertTokens(uint256,address)", +"e1f5ebc5": "_projectAddNew(address,uint256)", +"e1f6452e": "AggiungiNegoziante(address,bool)", +"e1f69952": "voteSvp02(bool)", +"e1f7d0e1": "PRE_SALE_END()", +"e1f7ec5a": "getStored()", +"e1f82d60": "publicReservedToken()", +"e1f86887": "getPortfolioTable()", +"e1f87904": "getNextDouble(address)", +"e1f8922e": "transferName(address,string)", +"e1f8926b": "depositEthPool(uint256)", +"e1fa70ef": "endCloseSale()", +"e1fa7638": "attack(uint256,uint256)", +"e1fa78e9": "AgriChainLabelInt()", +"e1fa82d0": "transferFromFlower(address,address,uint256)", +"e1fa8b02": "distribute(uint256,address)", +"e1fa8e84": "register(bytes32)", +"e1fac58d": "lockedBalanceOfByDate(address,uint256)", +"e1fb070e": "MtTaborToken()", +"e1fbeaed": "CUCUX()", +"e1fcad6a": "_equipUpOne(address,uint256)", +"e1fcb86d": "YouTube()", +"e1fd3d4e": "emergencySetDOwner(bytes32,address)", +"e1fd632f": "EDU_KYC_BONUS()", +"e1fdb4b4": "refundBet(uint256)", +"e1ff98f2": "getTotalCounter()", +"e1ffdecb": "tokensPerTranche()", +"e20056e6": "replaceOwner(address,address)", +"e200cee8": "setBossWannaCryInterface(address)", +"e201be98": "airDropToken()", +"e201d466": "MultiToken(uint256,string,uint256,string,string,uint256)", +"e2021f66": "getAttack(bytes32,bytes32,uint256)", +"e2022d3a": "storeNewVesting(address,address,address,string,uint256)", +"e202e1eb": "contractPartOne(uint256)", +"e20314ed": "trade(uint256[10],address[4],uint256[6],bytes32[4])", +"e2034834": "RemoveRocketForSale(uint32)", +"e203f335": "leafPrice()", +"e2045452": "setUsername(address,string)", +"e2045b5e": "getBadgeInfo(uint256)", +"e2047589": "assertEq(address,address,bytes32)", +"e204ce12": "transferExtra(address,uint256,uint256)", +"e2056c46": "ExtraBalToken()", +"e2059fdf": "showIssueDetail(address,bytes32)", +"e2069734": "destroyRemainingTokens()", +"e2087a44": "receiveApprovalTest(address,uint256,address,bytes)", +"e209bf22": "addMeme(string,string)", +"e20a4bcd": "recoverAddressFromCooperativeSettleSignature(bytes32,address,uint256,address,uint256,bytes)", +"e20a5ac2": "bonusFourthWeekPeriod()", +"e20a9ae9": "Tesoro()", +"e20acc79": "changeInterval()", +"e20b7d3c": "checkPoolAddressTierCap(uint8,uint256)", +"e20bbd8d": "RecoveryWithTenant()", +"e20bc67b": "autoUnlock(address)", +"e20bce0a": "lowTimeBonusValue()", +"e20c6d3d": "getMessageData()", +"e20ccec3": "pending()", +"e20cfc4a": "payedDividendsUSD()", +"e20d35ad": "CellBlocksToken()", +"e20dc05b": "globalOperator()", +"e20de6eb": "addrLockedFunds()", +"e20e1dc3": "createProxy(address[],uint256)", +"e20e36a0": "ExchangeAdapterBase(address,address)", +"e20e54a5": "getMHTHoldersNumber()", +"e20ff6f7": "fetchCurrentSatoshiState()", +"e2101509": "getSketchesWithHolder(address)", +"e211003d": "processOffChainPurchase(address,uint256)", +"e2119c80": "computeRealCap(uint256,uint256)", +"e2121de1": "withdrawAny()", +"e2130d1e": "unlockTeamTokens()", +"e21316ea": "mortal(address)", +"e213beb7": "transferCoOwnership(address)", +"e213e10a": "_createMeme(uint256,string,address,uint256)", +"e2153231": "SahilToken()", +"e2155c14": "galleassMint(address,uint256)", +"e21608be": "ReserveToken()", +"e2164700": "currentRewardNum()", +"e216bf4d": "SetBlockForSale(uint256,uint256,uint256,address)", +"e2172000": "left63(uint256)", +"e2179b8e": "g()", +"e21827a1": "unmintedTokens()", +"e218519c": "getref()", +"e2187e6e": "endTimeLockedTokensTeam()", +"e2188190": "CROWD_WAVE3_PERIOD()", +"e219aa11": "GetEscrowETHBalance()", +"e219b9e1": "rebateOneFenmu_()", +"e21a430b": "publicRelease()", +"e21aaa0f": "_getShipPrice(uint256,uint256)", +"e21ac8a1": "AvatechToken()", +"e21b0b95": "updateGlobalMinContribution(uint256)", +"e21b63b2": "setNewMint()", +"e21b9d08": "m_changeable()", +"e21be4f4": "CBMTToken()", +"e21c4783": "isPermitted(address,bytes32)", +"e21e221b": "ContributionRegistration(address)", +"e21f37ce": "message()", +"e21f44f4": "PoolCreated(uint8,uint256,uint256)", +"e21f8e56": "get_game_fees()", +"e21fd9fc": "_owns(address,uint256)", +"e2202a4d": "jester()", +"e2211592": "TWO_DAYS()", +"e2217114": "forwardEther(uint256)", +"e2217d5c": "payeth()", +"e2219773": "webGiftOnceMaxAmount()", +"e221d5d5": "getDukeNickName(string)", +"e222b00c": "blocksPerPayPeriod()", +"e22325ad": "transferBase(bytes32,address)", +"e2233ada": "smartDoor(address[])", +"e223b547": "calcFixedReward(uint256)", +"e223cb37": "AddBill(uint256,uint256,uint256,bool)", +"e223ed87": "getPetValue(uint256)", +"e223facb": "USER_GAME_WITH_TOKEN(uint256)", +"e224179e": "icoOverride()", +"e22497e4": "removeFromPublicSaleWhitelist(address[])", +"e225c56b": "KudosToken()", +"e225e588": "TNCN()", +"e226a1b6": "getAddressStatus(address)", +"e226cdec": "sellOffline(address,address,uint256)", +"e226ed22": "balanceOfERC20(uint256,address)", +"e227b5d1": "ETHContributed(address)", +"e228647f": "olty_6()", +"e228a6f4": "withdraw(uint256,uint8,uint16)", +"e228d627": "nextTokenAddress()", +"e228ecb4": "lockBalance()", +"e22938bd": "ShareManager()", +"e22955c6": "MultiplyContract(address,uint256,uint256,uint256,uint256,uint256)", +"e2298591": "xIPFSPublicKey()", +"e22a3af8": "canClaimTokens()", +"e22a6231": "addCandidate(address,string,string)", +"e22a9877": "getHWCAddress(address)", +"e22aa47a": "lockTokensForCs(address,address,address)", +"e22ad518": "startNextPremiumSale()", +"e22ae31d": "FrameCoin()", +"e22b0c46": "verify(uint256,uint256,uint8,bytes,bytes)", +"e22b3fb4": "changeOwner(bytes)", +"e22b94e8": "ForceCryptoInvestmentCoin()", +"e22baa56": "nonZero(uint256)", +"e22bda35": "eventVenue()", +"e22c6128": "getIncome(address)", +"e22d1581": "saleEnd2()", +"e22e8046": "getLunckyIndex()", +"e22ed995": "createStudent(string,string,string,uint32,bytes1)", +"e22f8dc9": "buy_lovelock(string,string,string,uint256)", +"e22fb860": "CJXToken()", +"e22fcd08": "useItems(uint32,uint256,address,uint256)", +"e23000a0": "buyBackPrice()", +"e2301d02": "subApproval(address,uint256)", +"e2306253": "o1Address()", +"e230dfbd": "setETHUSD(uint256)", +"e230e246": "cutFor(address,uint256,uint256,uint256)", +"e2311a78": "Payperblock()", +"e2313d1f": "ClaimOrichalcum()", +"e231bff0": "redeemed()", +"e2322c73": "firstPeriodWindows()", +"e2326909": "addCourse(string,string,string,uint256,uint8,uint8,uint16,uint8,uint8)", +"e2331332": "AortaToken()", +"e2332120": "secondUnlockTime()", +"e233ee0d": "publicFillOrder(bytes32,uint256,bytes32)", +"e2356efd": "holdTokensOnStage()", +"e235847a": "addSourceForTimeline(uint256,uint256,string,bool)", +"e235ca59": "revealsCount(uint256)", +"e236de22": "distributorWallet()", +"e2376be1": "sendMon(address,address,uint64)", +"e2387bb6": "AuctionHouse()", +"e238c7ed": "setAllowanceAdmin(address,address,uint256)", +"e238def9": "getReleasedBalance()", +"e23941bc": "testDepositWithdraw()", +"e239421d": "Lotthereum(uint256,uint256,uint256,uint256,bytes32)", +"e239ccba": "Disco()", +"e23a15b5": "logSigned(string,bytes16)", +"e23a4916": "getMainLockup()", +"e23a7785": "approveAndBuy(uint256,address,uint256,bool)", +"e23a845a": "getExpirationTime()", +"e23c5063": "getAttributeValue(address,bytes32)", +"e23caa06": "getLotteryDetailsA(int256)", +"e23cbad1": "getArkData(uint256)", +"e23d0996": "getDBallotID(bytes32,uint256)", +"e23d0b23": "week2Price()", +"e23da75a": "setTokenApproval(uint256,address)", +"e23e231f": "TOKENS_NOT_FOR_SALE()", +"e23e3229": "investorIndex()", +"e23eaae6": "SmogToken()", +"e23eb0c5": "_calculateFEE2Distribute()", +"e23f5e49": "checkLucky(address,uint256,uint256)", +"e23f61f6": "isCurrentOrPastAdmin(address,address)", +"e23fc908": "_setBurnFeeAbs(uint256)", +"e2418c15": "throwsWhenNetworkPlaceholderIsBad()", +"e241c1d9": "deriveKey(uint256,uint256,uint256)", +"e241e9c5": "_getUt(address)", +"e2420bd2": "setTwitterBot(address)", +"e242df57": "MiracleTeleToken(uint256)", +"e242fbbb": "addHuman(string,uint8)", +"e244054a": "trade(bool,bytes,uint256,uint256)", +"e2442441": "VpaxContract()", +"e24459ce": "rakugoPresaleAddress()", +"e2449c13": "createSqr(uint256,address,uint256,uint256)", +"e244fe89": "addToCommunitySaleWhitelist(address[])", +"e2454522": "verify(uint8,bytes32,bytes32)", +"e2457f50": "changeZS(address,address,uint256,uint256)", +"e24613ea": "getNexOrdertUser(address,address,uint256,address)", +"e2466cb6": "invalidateAnnouncement(uint256)", +"e24670eb": "EthToCentsUpdated(uint256)", +"e246ddba": "icoFinishTime()", +"e246f71a": "EventAddManager(address,address)", +"e247a2e2": "updateVolume(uint256)", +"e248b435": "setCCH_edit_15(string)", +"e2496d5b": "tokensWeiRaised()", +"e2499b98": "stakedContentById(bytes32)", +"e249a575": "setTermsNumber(uint256)", +"e24a1d1e": "deauthoriseMaker(address)", +"e24a5042": "transmuted(uint256)", +"e24b4403": "_emitDeposited(address,uint256,address)", +"e24b7721": "addressLeskiw()", +"e24c36d0": "flushEra()", +"e24cddd6": "getCartLength(address)", +"e24cf226": "closeEscrow(uint256)", +"e24f8313": "addReputation(address,uint256)", +"e24fe110": "Decentralized()", +"e24fed00": "assertEq(bytes,bytes,string)", +"e2506eab": "setEMAValue(uint256)", +"e250ecfe": "Cogenero(uint256,uint256,uint256,address)", +"e251e358": "preIcoSoftCap()", +"e25209b6": "roundOneLimit()", +"e253c21d": "ZBCToken()", +"e253dd6b": "setBonusRound4(uint256)", +"e2542f03": "updatePurchasePossible(bool)", +"e2550156": "smallBlind()", +"e25520a7": "LocklistAddressdisable(address)", +"e2558086": "calculateLandmarkPrice(uint256)", +"e255d5ad": "maxBuyRateInPrecision()", +"e25665da": "earlyBackersPoolAddress()", +"e256888f": "PERCENTAGE_PRECISION()", +"e2573266": "withdrawRC()", +"e2575e48": "_isMultiple(uint256)", +"e2576998": "changeMaxCoefPartnerForEmission(uint256)", +"e2583070": "balanceImportsComplete()", +"e25876d3": "weiToFinney(uint256)", +"e258a0f0": "createItem(string,uint256,uint256,uint256[6])", +"e258aa02": "createPromoRegion(address,string,uint256)", +"e258be32": "removeBookSigner(bytes16,address)", +"e259501e": "contributorsWallet()", +"e2595235": "addPack(uint8,uint128,uint256)", +"e259d074": "endauctionother(uint256)", +"e25a2a99": "updateTier(uint256,uint256,uint256)", +"e25a51b6": "setCompositeReputation(string,uint32)", +"e25ade5f": "issueTokens(address,uint256,uint256,bool)", +"e25b5cbd": "STAKE_APR()", +"e25bc771": "_transferCard(address,uint256,uint256)", +"e25bd409": "receivePositionOwnership(address,bytes32)", +"e25c80d0": "_currentIcoPhaseMinimum()", +"e25c9c33": "getBadgeLevel(bytes32,uint256)", +"e25d4dac": "mintFund(address,uint256)", +"e25f0a98": "requestedForMigrationAt()", +"e25f71ac": "isRoundAwarded()", +"e25fe175": "step()", +"e2616387": "MPY(uint256,uint256)", +"e26176d9": "FundRanking(address)", +"e261fc63": "UserRank(address)", +"e2621a66": "HPBToken(address)", +"e26259a4": "updateMyHns(string,address)", +"e264172c": "drainETH()", +"e26422fe": "DaysToDestroy()", +"e2646a9f": "getICOStage()", +"e2649caf": "voteToFreezeFund()", +"e264a2f4": "KIN_PER_USD()", +"e264fc07": "_buyFillet(address,uint256,bytes)", +"e2651539": "priceCreatingChannel()", +"e26534bf": "whaleExchangeRate()", +"e2659324": "require_email(bool)", +"e265c5e2": "getTotalTokenWithdrawByAddress(address)", +"e2664254": "priceDivisor(uint256,uint256)", +"e26659da": "getAllBaller()", +"e26693ac": "stakeDice()", +"e266e5ad": "Mystical()", +"e267761f": "unmintedGBT()", +"e267dd9b": "addAgent(uint256,uint256,uint256,address)", +"e26814d8": "withdrawCoins(address,uint256)", +"e26835ce": "giveToken(address)", +"e2684f08": "_isPaused()", +"e268ea6b": "SOFT_CAP_T()", +"e269053a": "getNumberOfAssets()", +"e2693180": "DHANACOIN()", +"e269f929": "recoverRevokeHash(bytes,bytes,uint256)", +"e26a687f": "BP_IMMORTAL()", +"e26ba086": "getTargetInvalidMarketsDivisor()", +"e26bc039": "numRegisteredModules()", +"e26c2da9": "TerraToken()", +"e26c551e": "publishConditions(string)", +"e26c8434": "AdminStartDraw(string,bytes)", +"e26dee0e": "IcoExt()", +"e26e7b50": "calculateCritMassRewards(uint256)", +"e26e8d84": "FillSellOrder(address,address,uint256,uint256,uint256,uint256,uint256)", +"e26f0342": "ArrayTypesTest(uint256[10])", +"e26f21bf": "setHoldPercentage(uint256)", +"e26fdc12": "equipDown(uint256)", +"e27008c2": "_createRareCard(address,uint256,uint256,uint256,uint256)", +"e270398a": "emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", +"e270bc81": "resumeICO(address)", +"e270f88c": "_getFreezeTime(uint256)", +"e27131f9": "MintCoin()", +"e2725161": "calculateOdds(uint8)", +"e2726e94": "minSumICOStage4USD()", +"e272b892": "pauseContract(bool)", +"e2734c93": "getPlayerBalance(address)", +"e273f117": "SetServiceProviderFee(address,uint256)", +"e2740b4e": "getTradesRoot()", +"e2749799": "GBank(uint256)", +"e274a3e7": "Papergold()", +"e274fa4e": "BitcoinXL()", +"e274fd24": "eventContract()", +"e2757a50": "PepFarmer()", +"e275a016": "check_data(string)", +"e275f296": "transferFromMulti(address[],address[],uint256[])", +"e27671ff": "hillpayout()", +"e276729d": "getPeriodStarted(uint256)", +"e276c799": "getx()", +"e2775da5": "getMartialOwner()", +"e2776ab8": "CryptoPhoenixes(address)", +"e2786d65": "refundSplitMembers()", +"e278c0f2": "setInvestorsFee(uint256)", +"e278d283": "getLineUpEnable_pool(address)", +"e278fe6f": "closeRound()", +"e2790853": "OX()", +"e27929b6": "addRecord(bytes32,string,string)", +"e27a8aca": "addWhiteListedInvestor(address,string)", +"e27a9c74": "setOwnerName(uint256,string)", +"e27b73f0": "issueWithExternalFoundation(address,uint256,bytes32)", +"e27c5b17": "testSlice()", +"e27da9c6": "current_tier()", +"e27e3fd3": "CancelGame()", +"e27ecfcc": "LogStartDate(uint256,uint256)", +"e27f0236": "agingBalanceOf(address,uint256)", +"e27f1692": "Bitsonatoken()", +"e27f3853": "timeFreezeTeamTokens()", +"e27fe50f": "startAuctions(bytes32[])", +"e280b58f": "tokenIssuedLockUp()", +"e280d66b": "updateWonNums(uint256,uint256)", +"e2812256": "Monarch()", +"e281d7e4": "CryptoSlotsGame()", +"e282348c": "w_Founders()", +"e282726b": "reserveAddr()", +"e282938d": "founderLockEndTime()", +"e282969e": "getPerson(uint256,bool)", +"e282cda6": "calculateBucketId(bytes32[])", +"e283d1ec": "registerEscrow(string,string)", +"e2842d79": "getAllUsers()", +"e28435c4": "ownerETHCashout(address)", +"e284cbfa": "getAllAdIdsByCat(uint256)", +"e284f217": "distributeToAll(uint256)", +"e2861c8d": "cashOutProfit()", +"e2865b4d": "growCost()", +"e2868c54": "Airdrop2(uint256)", +"e2869853": "RefID(string,string)", +"e2869f70": "setCrowdsaleAndVesting(address,address,address)", +"e2877e04": "transferFactoryResourceAmount(uint16,address,uint256)", +"e287adf4": "addSig(address,bytes32)", +"e2889c82": "setTimeLimit(uint256)", +"e2894a8a": "OwnerAnnounce(string)", +"e2896598": "leaderTimestamp()", +"e289fcb6": "contractActive()", +"e28a5e63": "sellDeadline1()", +"e28ab336": "MAX_INVEST_SHARE()", +"e28b0d9a": "updateFundingEndBlock(uint256)", +"e28b2b76": "ipoPlatform()", +"e28b7555": "CapiterContract()", +"e28d717b": "transferETH()", +"e28d8c4b": "claimBonusTokens()", +"e28deda5": "sweepTokenAmount(address,uint256)", +"e28e6b3a": "masterTotalEarning()", +"e28fa27d": "setHardcap(uint256)", +"e28fed1e": "userRescues(address)", +"e29121de": "ADVISOR_TOKENS()", +"e2912367": "_getValuePartByPercent(uint256,uint256)", +"e292c740": "setLargeInvestorWei(uint256)", +"e2935edb": "getUpgradeCardList(address)", +"e2948c21": "marketingTeamTokens()", +"e29532c1": "getDataFromCode(string)", +"e2954a14": "purchaseSeconds()", +"e29581aa": "getNodes()", +"e2958974": "read_transfer_config()", +"e295c9d6": "getActiveBanners()", +"e297273a": "getBlockHashOrZero(uint256)", +"e298287f": "senderAddressIsSecretContract(address)", +"e2982c21": "payments(address)", +"e2985596": "angelCardDataContract()", +"e298d85c": "discountBlock()", +"e2996879": "HuoNiu()", +"e299beb3": "SimpleIndex()", +"e29a2e89": "publishMessage(string,string,string)", +"e29a82d3": "BigFishRoll()", +"e29bfe13": "submitWithdrawTransaction(address,uint256)", +"e29c6a7b": "addYearToken()", +"e29caee2": "currentStageTokensRate()", +"e29e1345": "amountPerDay()", +"e29e1864": "PresaleCapChanged(address,uint256)", +"e29e3a4c": "artistsArtworkCount()", +"e29e436a": "setWorldCupTeamDesc(uint256,string)", +"e29eb836": "totalCollected()", +"e29f5182": "byte32ToString(bytes32)", +"e29f610d": "end1Timestamp()", +"e29f99f0": "tokenAdd()", +"e29f9da6": "_getrand09()", +"e29fa4b4": "setOriginalOwner(uint256,address,address)", +"e29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", +"e2a034dd": "participantsFirst(uint256)", +"e2a0d56d": "FundsBurned(uint256)", +"e2a27ca8": "_setBorderValue14(uint256)", +"e2a288c0": "placeCoin(uint16,uint16)", +"e2a2adc2": "divisionRoundedUp(uint256,uint256)", +"e2a3382f": "holdedOf(address)", +"e2a376ec": "addContributor(address,uint256,uint256,uint256,uint256)", +"e2a38a4b": "removeTokens(address,address,uint256)", +"e2a4853a": "setUint(bytes32,uint256)", +"e2a51b8f": "amountOfParticipants()", +"e2a5c39f": "revealPeriodStartedTimestamp(bytes32)", +"e2a71f12": "accountDelete()", +"e2a8215b": "purchaseTokens(address,uint256,address)", +"e2a9ba05": "getBoosterDuration(uint256)", +"e2a9bb53": "CreateBattleCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"e2a9ca4c": "disableTokenTransfer()", +"e2aa2dcf": "CryptoPeopleName()", +"e2aa6003": "gameResult(uint256,uint256,uint256,bool,uint256,uint256)", +"e2aa6c66": "createPasswordChallenge(bytes20,bytes32)", +"e2aa99ab": "startCrowdsaleY2(address)", +"e2aafa21": "inWhitelist(address)", +"e2ab691d": "lock(address,uint256,uint256)", +"e2acf75d": "auctionCancel(bytes32)", +"e2ad0699": "addCertification(address,bytes32,bytes,bytes32)", +"e2ae0c79": "setParentID(uint256,uint16)", +"e2ae9de0": "deleteArrayUint(bytes32,uint256)", +"e2b05077": "getSaleDate(bytes,uint256)", +"e2b0caef": "when()", +"e2b13fa0": "ManagerPermissionRevokedEvent(address,string)", +"e2b178a0": "getAuthority()", +"e2b202bf": "deleteUint(bytes32)", +"e2b20a72": "SecretToken()", +"e2b2579b": "isClean(address)", +"e2b26323": "proceedToNewStage(int256)", +"e2b375a9": "transferOwnership2(address)", +"e2b43e23": "setDepositInterface(address)", +"e2b4b30d": "getvaluejoinlist_odd(uint256)", +"e2b4f4b5": "lockedTeamUFT()", +"e2b770b4": "updateUSDMonthlySalaries(address,uint256,uint256)", +"e2b7713f": "Midel()", +"e2b863cf": "calculatePayout(bytes32,uint256)", +"e2b8766c": "testFailTransferNotTransferable()", +"e2b91318": "createOptionAndUnderwrite(bool,address,uint128,uint128,address,uint64,uint256)", +"e2b9e186": "name_()", +"e2b9e322": "bondsOutstanding(address)", +"e2ba53f0": "winnerName()", +"e2ba600e": "starting_giveaway()", +"e2ba6ce8": "m_KYCProvider()", +"e2bbb158": "deposit(uint256,uint256)", +"e2bc1971": "getGamblerGameIds(address)", +"e2bca77e": "calculatePrizeAmount(uint256,uint256,uint256)", +"e2bd505b": "setTitulaire_Compte_2(uint256)", +"e2bd8e43": "CodysToken()", +"e2c03ace": "itemsCount()", +"e2c14bdd": "getMapping(bytes32)", +"e2c1f02c": "buySuperDragon()", +"e2c1f7d7": "firstCapEndingBlock()", +"e2c20836": "updateAndGetHodlTotalValue()", +"e2c2ae5a": "isBuyPrice(uint16)", +"e2c2d72c": "setChallengeScienceContract(address)", +"e2c31be6": "icssale(address)", +"e2c345e2": "originalContract()", +"e2c38eaf": "findProductIndexById(uint256)", +"e2c3941a": "DOG_Token()", +"e2c3f9a8": "RATE_PUBLIC_SALE()", +"e2c41dbc": "depositFunds()", +"e2c516be": "icoReceivedWei()", +"e2c518fa": "lastMovement(address)", +"e2c5449e": "chanceNo()", +"e2c61114": "setImportFee(address,uint256)", +"e2c6d41c": "council()", +"e2c718d8": "right20(uint256)", +"e2c76bb0": "SpeculateCoin()", +"e2c7f7ae": "majorOwnerShares()", +"e2c86092": "ifoodCommunity()", +"e2c8a8ad": "contributorPoolMintQuota()", +"e2c8dd34": "dividendsWallet()", +"e2c8e54a": "senderIsPosition(address,address)", +"e2c8f7c8": "ARIWallet()", +"e2c92a52": "distribute(address,uint256,uint256)", +"e2c9b07d": "ChangeBillLeasingInfo(uint256,uint256,uint256,bool)", +"e2c9bc9e": "GenesisTransfersCount()", +"e2ca01f0": "addNewOrUpdateHolder(uint256,bytes32,bytes32,bytes32)", +"e2ca481c": "swaps(address,bytes20)", +"e2cbb9b7": "evCreatedToken(address,uint256,address,uint256)", +"e2cc20bd": "dealerHit()", +"e2cc7a51": "signingPrefix()", +"e2cdd42a": "vote(uint256,address,bool)", +"e2ce7e67": "read_i16_array()", +"e2cf8b0d": "createBundle()", +"e2d07a33": "QYKToken()", +"e2d0d519": "sendOwnership(address,uint256)", +"e2d17ab1": "checkGoals()", +"e2d1da31": "createBuildingOmni(uint32,uint8,uint8,uint8,uint8,uint8,address,bool)", +"e2d2a868": "autoRefundCrowdsaleContributor(address)", +"e2d2dcca": "removeMemberAcct(address)", +"e2d2e219": "dividendsPerShare()", +"e2d31df4": "getTeamPerfitAmuont()", +"e2d45f7b": "transferMultipleDelegated(address,address[],uint256[],uint256,uint256,uint256,bytes)", +"e2d56060": "balanceInWei()", +"e2d5d11b": "revealCap(uint256,uint256)", +"e2d6eddc": "get_row_col(uint256,uint256,uint256)", +"e2d7a7c0": "setAttrCustom(uint256,uint256,uint256,uint256)", +"e2d7c64c": "darknodeRegisteredAt(address)", +"e2d84e23": "getLink()", +"e2daeb9c": "NICTO()", +"e2dbbf62": "changeIcoDiscountLevels(uint256,uint256)", +"e2dc35e0": "transferFund(address,uint256)", +"e2dc5da5": "finishMintingTokens()", +"e2dc7763": "freeze(address[],bool)", +"e2dc9aa1": "addTransaction(string,uint64,string)", +"e2dea715": "getMinerId(address)", +"e2deaa81": "set_reference(uint256,uint256,uint256)", +"e2deb962": "signUp(uint256,bytes32)", +"e2dede94": "getNode(uint256,uint256)", +"e2df0463": "changeTrancheAdmin(address)", +"e2df15d6": "setRewardClosed(uint256)", +"e2df20d1": "setAvailable(bool)", +"e2df2472": "Aurum()", +"e2df6c6f": "getBonus3(uint256)", +"e2e0c049": "UpdateSellAgent(address)", +"e2e15f2e": "Reward()", +"e2e1ff4d": "getBallotsNum(address)", +"e2e267fc": "SintToken(uint256)", +"e2e29ffe": "assertThat(bool)", +"e2e2e5cf": "UpdateMinBalance(uint256)", +"e2e39498": "_verifySignature(bytes,bytes,bytes)", +"e2e51348": "LogContractCreated(address,uint256)", +"e2e54288": "getCertificationList(bytes32,bytes32)", +"e2e5bd42": "setBetBasic(uint256)", +"e2e5fade": "presaleSales()", +"e2e616bb": "whiteListEnabled()", +"e2e68372": "IAM_PER_ETH_PRE_SALE_RATE()", +"e2e686d0": "safeAdd32(uint32,uint32)", +"e2e71098": "_FCTOKEN(uint256,string,uint8,string)", +"e2e794c3": "setPremiumMultiplier(uint8)", +"e2e79a02": "level2(address,address)", +"e2e7ab3a": "setEthlanceInvoiceContract(address)", +"e2e831cf": "genders(uint8)", +"e2e8b978": "sizeOfUint(uint16)", +"e2e9e6e8": "updateMaxMinComparables(uint256,uint256,uint256)", +"e2eb3336": "_performPurchase(uint256,uint256,address,uint256,address)", +"e2eb91cc": "removeAddressFromOwners(address)", +"e2ec6ec3": "addAddressesToWhitelist(address[])", +"e2ecb311": "createEscrow(address,uint256,uint256)", +"e2ecef03": "boleno()", +"e2edf7be": "usd2FokenByStage(uint256,uint16)", +"e2edfc20": "collectAirDropTokenBack(uint256)", +"e2ee2e89": "isPlayerInRound(uint256,address)", +"e2ee9941": "tap(bytes20)", +"e2ef9241": "FawnCoin()", +"e2f0a05a": "TokenCLC(uint256,string,uint8,string)", +"e2f1d298": "_addGroupToMember(address,bytes32)", +"e2f23224": "isEnableBuySell()", +"e2f273bd": "updateAdmin(address)", +"e2f2eb27": "NUMBER_OF_BOOSTERS()", +"e2f31829": "updateStatus(uint256,uint256)", +"e2f35f17": "teamAccountAddress()", +"e2f36034": "calculateRevenueAtBlock(uint256)", +"e2f45eba": "PrettyGirl(uint256,string,string)", +"e2f60706": "specialPurchase()", +"e2f60c26": "getMintAuditApproval(address,address)", +"e2f779f3": "withdrawTokensFromCustody(address,uint256,address,address)", +"e2f77ae2": "setPriceInExoTokens(uint256,uint32)", +"e2f8a017": "payInstallment(uint256)", +"e2f8b790": "buyBlueStarEgg(uint256,uint16)", +"e2f8fa16": "getPendingTaxData()", +"e2f8feb2": "internal_tester(int256)", +"e2f90632": "notTooLongSinceUpdated()", +"e2fa5398": "pack(uint16,uint64,uint64)", +"e2fa5fb1": "secondDiscountCap()", +"e2fa6f90": "_removeTokenFromOwnersList(address,uint256)", +"e2fa9ee0": "openShop(uint256)", +"e2faf044": "createDAO(address,uint256,uint256,uint256)", +"e2fb3d4a": "setReferralSmartContract(address)", +"e2fc2691": "upvotePost(bytes32)", +"e2fc421d": "crowdsaleStartTime()", +"e2fc5d19": "setConfirmations(bytes32,bool,bool)", +"e2fc6f68": "beneficiaryBalance()", +"e2fd38e9": "startEvent()", +"e2fd3c08": "OmVPNToken()", +"e2fdcc17": "escrow()", +"e2fdf807": "purchasableTokens()", +"e2fecdf3": "copy(bytes,uint256,uint256,uint256)", +"e2ffe3f3": "storageToUint(string)", +"e3004b57": "depositToken(address,bytes)", +"e30081a0": "setAddress(address)", +"e3038aaf": "calcOrderToMsAmount(uint256)", +"e303a92b": "drawLottery(uint256)", +"e303cccd": "sellKun(uint256)", +"e303e81e": "authorizeForTier(uint256,address[])", +"e30443bc": "setBalance(address,uint256)", +"e3049b6f": "getFighters(uint32)", +"e3049ded": "AllyNetworkToken()", +"e305044f": "disableServiceMode()", +"e3059cef": "recover(uint8,bytes32,bytes32,address)", +"e305c210": "getPositionFromBattleboard(uint16,uint8)", +"e30637d6": "REFF_TOKENS()", +"e30651b4": "COMMUNITY_CAPPED_VALUE()", +"e3069e4d": "HTX()", +"e306d361": "setUnits(address)", +"e306f779": "EIP712_DOMAIN_HASH()", +"e308262a": "kycPassed(address,address)", +"e3083fb5": "removeFromContribution(uint256)", +"e308700f": "thresholdEtherLimitForSeedRound()", +"e308c213": "getBag(uint256)", +"e30922fc": "isGameLocked(address)", +"e309396b": "addSchema(string,string)", +"e3098986": "totalSold_()", +"e309aa15": "RefundSent(address,uint256)", +"e309d1b5": "tierTwoRate()", +"e309f318": "spermlordAddress()", +"e30addb4": "set_property_layout(uint256,string,string,string)", +"e30b407e": "payWinningGladiator(uint256,uint256)", +"e30bd740": "reverse(address)", +"e30c36f1": "bubbleSort(uint256[])", +"e30c3978": "pendingOwner()", +"e30c7b0a": "TronXtended(uint256,uint256)", +"e30ca7cb": "getBalanceOfContractInSzabo()", +"e30cfa40": "isExecuted(uint256,uint256)", +"e30d1625": "stateUpdate(uint256,uint256,uint256,uint256,uint256,uint256,bytes)", +"e30dd27a": "EpsBonus()", +"e30dfb94": "callAndFailWithoutReason()", +"e30e3334": "BonusTokens()", +"e30f4e2b": "addMultipleAddressesToWhitelist(address[])", +"e30f4f84": "addWhiteBacker(address)", +"e30f7c8b": "startAirdrop(address[],uint256)", +"e30fe37a": "setQueryAddress(address)", +"e310c2ca": "emissionPay(uint256)", +"e312e00f": "approve(address,uint256,bytes,string)", +"e3140c51": "PCHAIN()", +"e31418be": "rateMap(uint256)", +"e3142e90": "logInitialReporterTransferred(address,address,address,address)", +"e31430c0": "acceptEscrow(address,address,uint256)", +"e314d852": "mintWithMemo(string,address,uint256)", +"e3153827": "reading_card_reversed_at(uint8)", +"e316bd56": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string)", +"e316e9c0": "Issue(uint256,address,uint256,uint256)", +"e31743d7": "setTransferBlocked(bool)", +"e31870dc": "mlDevelopers()", +"e318a74c": "RACEFORETH()", +"e318b52b": "swapOwner(address,address,address)", +"e318de73": "getString(address,bytes32)", +"e3199044": "setGoalsPlayed(uint256,uint256,uint256,bool)", +"e319b0e2": "advisorsUnlockedAfterCliff()", +"e31a0292": "getostToken()", +"e31a7c01": "triggerTransfer(address,address,uint256)", +"e31a8116": "getMinPrice()", +"e31a9d92": "lastID()", +"e31b1aae": "ChangeInterest(uint256,uint256,uint256,bool)", +"e31bfa00": "next_id()", +"e31c60e3": "Request(address,uint256)", +"e31c71c4": "safeToSub(uint256,uint256)", +"e31d3460": "addused(uint256)", +"e31d3938": "MINT_INTERVAL_SEC()", +"e31e0c46": "set_end_block(uint256)", +"e31e2d6d": "func_0A93()", +"e31e450d": "checkBoard(uint256)", +"e31f28ef": "getTransferInfoTime(address,uint256)", +"e31f3e0c": "startUpgradePoll(address)", +"e31f4263": "theCamp()", +"e31ff6c2": "recordOffChainContribute(uint256,address,uint256)", +"e3206975": "bet_MAX()", +"e321045a": "_storeSettingDeprecation(uint256,address,address,address,uint256,address)", +"e321192b": "addTransaction(address,uint256,uint256,string,bytes)", +"e3218219": "DungeonTokenAuction(uint256)", +"e321adb3": "_canTransfer(uint256,address)", +"e3224ac3": "piecesOwned(address)", +"e32381b6": "kscMintTo(address,uint256,string)", +"e32497c4": "getArtefactsIds()", +"e3252a76": "oraclize_randomDS_proofVerify__sessionKeyValidity(bytes,uint256)", +"e32540b4": "OptionTransfer(address,address,uint256,uint256)", +"e3256429": "COMPANY_RESERVE_FOR()", +"e325fb4b": "bonusCap()", +"e326acbf": "uintFloor(uint256,uint256,uint256)", +"e326e6ad": "DEFAULT_PRESALES_DURATION()", +"e32754a0": "MyFreeCoin112(uint256,string,uint8,string)", +"e327a46f": "breakdown(uint256)", +"e3280126": "addOrder(string,bool)", +"e328cc5c": "getActiveArbiters()", +"e328ef67": "INDInflationVesting()", +"e3296684": "transferToPie(uint256)", +"e329e871": "endTime1()", +"e32a29bb": "burnClosedTokenMultiple(bytes32[])", +"e32aa56a": "acceptLastMilestone(bytes32)", +"e32ae93b": "getQueueOpening()", +"e32af410": "CSClosed(bool)", +"e32b349a": "JCB()", +"e32b6325": "releaseForIco(address,uint256)", +"e32c5f01": "managePID(uint256,uint256)", +"e32c65f2": "tokensPerWei15()", +"e32cb7fc": "decimalPlace()", +"e32d264e": "addDefaultOperatorByTranche(bytes32,address)", +"e32d5cf8": "setApprovals(address,address,uint256)", +"e32d76de": "validBeneficiary(address)", +"e32e68ec": "isNewSchool(uint256)", +"e32e9f22": "setDeploymentReward(uint256)", +"e32ecd18": "LEXT()", +"e32ef3c5": "refereesCount(address)", +"e33051dd": "setGasPriceLimit(address)", +"e3306a6f": "CurrentStatus()", +"e330a737": "setCrowdsaleCloseTimerFor(uint256)", +"e332dfe9": "Token0901(uint256,string,string)", +"e333f969": "setUserAllocMax(address,uint256)", +"e3343501": "_playRealOdds(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e3349637": "addshop(uint256,string,string,string)", +"e334cd92": "getAstrosLength()", +"e334f32e": "encodeString(string)", +"e3350d7c": "setValidKYC()", +"e3353f3e": "increaseBlockTarget()", +"e335b5e9": "allocateSupply()", +"e335e1f8": "LogFundsLocked(address,uint256,uint256)", +"e33607da": "saleMarket()", +"e336e01d": "saleQuantity()", +"e33734fd": "changeProposalDeposit(uint256)", +"e337db6e": "NANJCOIN()", +"e337dd35": "SendingBounty(bytes32,uint256)", +"e337eca6": "TalkBounty(bytes32)", +"e3380b7e": "joinPillarCore(uint256,uint256,uint8)", +"e3386a98": "trustedToken()", +"e338a490": "DEVELOPER_FEE_FRAC_BOT()", +"e3393a6d": "voting(string)", +"e3396d2f": "updatePlayersCoin(address)", +"e339886c": "ADDR_WITHDRAWAL1()", +"e3399538": "ArithValue()", +"e33a9ab7": "createOffer(uint16,uint256)", +"e33b7de3": "totalReleased()", +"e33b8707": "append(uint256)", +"e33ba574": "hashSecret(bool,bytes32)", +"e33bb62a": "BRDCoin()", +"e33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", +"e33c9755": "getActionIds(bool,bool,bool)", +"e33d27e4": "complete_sell_exchange(uint256)", +"e33d28d7": "vestBalanceOf(address)", +"e33dafbf": "emitters(bytes4)", +"e33e59d8": "getInsuranceContracts()", +"e33e5c5e": "getAddressUInt8(bytes32,bytes32)", +"e33f6aaf": "getOnBurnAmountValue()", +"e3407276": "bigModExp(uint256[6])", +"e340c2fb": "bidETHIncrement()", +"e340d0d6": "renewDec(uint256,uint256)", +"e3419202": "redits()", +"e341eaa4": "sign(uint256,bytes32)", +"e342c2e6": "investorWhiteList()", +"e343fea6": "contractPays()", +"e344606b": "hashtagCommission()", +"e34486f8": "isActivePoll()", +"e344ce6b": "updateWhiteLists(address[],bool[])", +"e3450e13": "lastPlayer()", +"e34514ba": "getVirtualBalance(address)", +"e345514c": "CreateTokenToTax(address,uint256)", +"e345f098": "showLastBidder()", +"e34639cb": "AllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"e3464b1b": "Drop()", +"e346b380": "totalPreSale()", +"e346f79e": "submitTokens(address)", +"e3470882": "markFirstSaleComplete()", +"e347a773": "shares(bytes32,bytes32)", +"e348270d": "killMePlease()", +"e3489a4f": "setII_R1(uint256)", +"e3495569": "MAX_DISCOUNT()", +"e3499381": "checkPlayerPayout(address)", +"e349c313": "addPlayerToBoard(bytes32,bytes32)", +"e349c7df": "settleUncle(bytes32,bytes32)", +"e349cb12": "change_name(string)", +"e349f108": "jokerAddress()", +"e34a90a7": "distributeBounty()", +"e34ac873": "avatarTransferState()", +"e34ad653": "EmissiveToken(address,string,uint8,string,string)", +"e34b7983": "doPremine()", +"e34c3896": "FundUpdated(uint256)", +"e34c8dbf": "distributionDate()", +"e34da795": "claimTokens4mBTC(address,uint256)", +"e34dd755": "CrowdsaleAddress()", +"e34e1700": "StarlightToken()", +"e34e32c0": "assignOwnership(address)", +"e34e5786": "test_testableStandardCampaignPayoutToBeneficiary()", +"e34e7889": "unlistDomain(string)", +"e34e7cda": "maxRoundDelta()", +"e34f2a9e": "fundingStartTimestamp()", +"e34f7137": "_performApprove(address,uint256,address)", +"e34f947d": "repairCar(bytes17,string,string,uint256)", +"e34f9dcc": "GCOXPACToken(string,string,uint8,uint256)", +"e34ffcb8": "changeMinAmount(uint256)", +"e3500b48": "setResolver()", +"e35060d9": "RequestEthereumCollect(address)", +"e350b490": "gameToWinner(uint256)", +"e3524d36": "getCurrentDiscountPercent()", +"e3528455": "burnPrimordialTokenFrom(address,uint256)", +"e3530e9c": "spendFromMultisig(bytes32,uint256,address)", +"e3539dcc": "LogReceivedETH(address,uint256,uint256)", +"e3546ac5": "isRatio()", +"e354a3f2": "freezeAccount(address,bool,string)", +"e35501be": "activate_admin_commission()", +"e3552808": "RoboToken(uint256)", +"e35568cb": "getAvailableTokens()", +"e355cd4a": "SharkPool()", +"e35694c0": "callFunction(address,address,uint256,bytes32)", +"e3577e71": "setPaymentSettings(string,string)", +"e3579ea5": "publish(string,string,address,uint256)", +"e3583870": "replaceDecomissioned(address)", +"e358b0e1": "withdrawPreICOEth()", +"e358d75a": "getFairymasterReq()", +"e3599c21": "updateGame(uint8,uint8[],uint32,uint8,uint8)", +"e359cbbb": "hasEnoughBalance(address,uint256)", +"e35b37fe": "TRANSFER_COST()", +"e35b8717": "GolixTokenDistribution(uint256,uint256,uint256,address,address,address)", +"e35b9699": "Namek()", +"e35c606b": "JiggsR()", +"e35c96d4": "NextToken(address)", +"e35ca326": "cancelOrder(uint80,bool)", +"e35d1a86": "sendFundsToOwner(address,uint256)", +"e35d3590": "AddSocialAccount(bytes32,bytes32,bytes32)", +"e35d75a9": "tokensToEthereum_3(uint256,uint256)", +"e35e6078": "tokenPerUsdDenominator()", +"e35e6e0c": "setPrice(uint16,uint16,uint8,bytes32,uint256)", +"e35f0254": "numberOfProposals(string)", +"e35f4db3": "developer_edit_text_amount(string)", +"e3602077": "withdrawInWei(address,uint256)", +"e360736e": "getHistory(string)", +"e360a49e": "latestUpdate()", +"e361112a": "isPaying()", +"e3611578": "testFooKill()", +"e36255e2": "_checkGeneralRequirements(uint256,uint8,uint8)", +"e3625dee": "REFERPAYToken()", +"e362bc9a": "confiscateDeposit()", +"e362efdc": "getTotalPayout()", +"e362f168": "CoinAdvisorPreIco(address,address,uint256,uint256)", +"e362fcaa": "Creditors(address)", +"e3637435": "supportAccount()", +"e3643106": "getLatest(uint256,uint256)", +"e364bd01": "KEOS()", +"e3650781": "setGasForGR(uint256)", +"e3651ef3": "fetchRecentSubmittals()", +"e3659e69": "CNIFCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e365fd7f": "setMiniPoolEdit_8(string)", +"e3661586": "confirmManager()", +"e3669d7c": "Ballot(string,bytes32[])", +"e3677664": "transferPiece(uint256,address)", +"e3685ef7": "PocketMoneyContract()", +"e3686b49": "PopeCoin(uint256,string,uint8,string,address)", +"e3688d7a": "maxNumMC()", +"e3692473": "setMockedDate(uint256)", +"e3699763": "_addAddress(address)", +"e36a0e6e": "hasPermissionFrom(address)", +"e36af50d": "betsKeys()", +"e36b0b37": "stopSale()", +"e36b9b9f": "addMemberById(uint256,address,address)", +"e36ba174": "updateMaxCapEthOnce(uint256)", +"e36c2072": "countCourses()", +"e36c3f70": "BENEFITToken(uint256,uint256,uint256,uint256,uint256)", +"e36d036c": "mintPresale(uint256,address)", +"e36d3844": "CardCreated(address,uint256,uint256,uint256)", +"e36d392c": "DeliverInfo(uint64,uint256,uint256,uint256,uint256,bytes32,uint64,bytes32)", +"e36d3a43": "SENDING_BLOCK()", +"e36db785": "creditor()", +"e36dd1f9": "withdrawalMoneyBack()", +"e36e1051": "setcardsalemoney(uint256,uint256)", +"e36e5d18": "showTopsPlayer()", +"e36f3177": "maxIssuingSupply()", +"e36f3e7c": "getAddressDescription(address)", +"e3710599": "SendTokens(string)", +"e371817e": "calculateTokenAmount(uint256,address)", +"e371c0e6": "transferPermissions(address,uint256)", +"e371cdd4": "luke(uint256,string,string)", +"e371dfdb": "allFamily(uint256,address)", +"e372d0eb": "ownersOfArea(uint256,uint256,uint256,uint256)", +"e37362ab": "NRB_Main()", +"e37426d4": "StopCrowdsale()", +"e374e8d4": "isMyWalletLocked_Receive()", +"e375dfed": "StarbaseCrowdsale(address,address)", +"e377ac31": "legal()", +"e3787c61": "TestContract(string)", +"e3788da6": "ExternalAccountsBase()", +"e378f045": "window0TokenCreationCap()", +"e37a012f": "fireEventOnTokenTransfer(address,uint256)", +"e37a7fff": "newPlayer(uint256,uint256)", +"e37aa618": "distributeValue()", +"e37aca99": "BOXICOIN()", +"e37b346d": "redistribution()", +"e37b71ce": "getFundTX(address,uint256)", +"e37bddc3": "changeEnd(uint256)", +"e37c6cf8": "redeemDisavowedTokens(address)", +"e37c8613": "balanceOfPendingToken(address)", +"e37ccac7": "getSuperseded(address)", +"e37cd202": "getBonusRate(uint256)", +"e37d46bd": "myDivs()", +"e37d4fed": "withdrawToFounders(uint256)", +"e37d883a": "NumbersToken()", +"e37e26cc": "_buyFromMarket(uint256,bool,uint256)", +"e37e60d1": "testControlRetractNotOwner()", +"e37e7d1a": "init(address,uint256[],uint256,uint8)", +"e380575a": "presaleFundsRaisedInWei()", +"e380ae96": "setNow(uint256)", +"e380b7bd": "balanceOfToken(address,uint256)", +"e38138a2": "startPurchaseTokens()", +"e3814b19": "fromUint(uint256)", +"e38180ec": "addToPayeeBalance(address,address,uint256)", +"e381a8d9": "StegoCoin()", +"e38296e4": "changeDelegate(address)", +"e382b854": "_setPackedTimestamp(bytes20,uint256)", +"e382c3e6": "getPeriodBonus()", +"e382fe45": "deathData_v4()", +"e383da38": "totalAffiliateTokensSent()", +"e3843f6e": "myLoseShare()", +"e3844a61": "isBetPossible(bool)", +"e3848e5b": "thing(string,string,string)", +"e385b43a": "DistributionNextPos()", +"e385f7d2": "SendResult(uint64,bytes18,bytes32,bytes11)", +"e3873ad7": "setDepositBankFee(uint256)", +"e3877391": "DDJETHToken()", +"e3877acd": "frozenDaysForAdvisor()", +"e38787aa": "internalBurnTokens(address,uint256)", +"e387d31a": "estateRegistry()", +"e388cbb9": "swpFundDeposit()", +"e389b63f": "transfer(address,uint256,bytes,string,uint256)", +"e38bc1f0": "timeThatFinishGuaranteedPeriod()", +"e38c35b6": "getLockedUserBalance(bytes32)", +"e38c4585": "JointICOContractAddress()", +"e38c9825": "maxgame()", +"e38cc06b": "testDiv()", +"e38d0fbd": "FirstTradingEcosystem()", +"e38d6b5c": "maxPrice()", +"e38d7e99": "_next_id()", +"e38da1a1": "storeDoi(bytes32,bytes32)", +"e38e2cfb": "step(uint16)", +"e38f4861": "initLock()", +"e38fbdf6": "addBoundary(address)", +"e38ff5dc": "updateInvestor()", +"e39062f5": "MDTKAirdrop(address,address)", +"e3906b3d": "mintNextCard()", +"e390e263": "disableWhiteListForever()", +"e3914699": "dEthereumlotteryNetWinners(address)", +"e391a7c4": "revokeSignaturePreSigned(bytes,bytes,uint256)", +"e391b3d1": "ssword(string)", +"e391bda5": "transferImpl(address,address,uint256)", +"e39253e6": "SampleToken(uint256,string,uint8,string)", +"e392a521": "indexPrice(uint8)", +"e3945eba": "planetLife(uint256,uint256,uint256)", +"e395983a": "bountyTokensBatch(address[],uint256[])", +"e39608af": "ETUToken(string,string,uint256,uint256)", +"e3961174": "tokensCreationCap()", +"e3964b8c": "ERC20Token(string,string,uint8,uint256,address)", +"e3967d6a": "currentTimeBonus()", +"e3967eed": "totalUserNumber()", +"e396bd60": "LogEscrowWeiReq(uint256)", +"e396da73": "checkProof(bytes32,bytes32[],uint256)", +"e3973b5a": "NiteshToken()", +"e397dfd1": "updatetoken(uint256,string,string,uint256)", +"e39898d1": "checkSaleValid()", +"e399331b": "coinAllocation()", +"e3994993": "addDiary(string)", +"e399cb0d": "initializeCappedFundraiser(uint256)", +"e399daab": "zoomraffleFee()", +"e39a686c": "ChainBackedOption()", +"e39b2284": "ZEONPrivateSale(address,address,address,uint256,uint256)", +"e39b40d8": "_createCard(string,uint256,address,address,bool)", +"e39bbf68": "dividedBy(uint256,uint256)", +"e39bdfab": "getCutie(uint40)", +"e39c6d80": "batchTransfer(address,uint256[],uint256[])", +"e39c742a": "_caluLocktime(uint8)", +"e39cbe80": "senderAdminAndSaleNotFinal()", +"e39d2a98": "nextCommonTTMTokenId2()", +"e39dcc21": "blah()", +"e39ebde9": "FOLIToken()", +"e39fa059": "queryRandomCallback(bytes32,string,bytes)", +"e39fbd88": "tokensDispensed()", +"e39fff72": "Divs()", +"e3a0a148": "giveOwnership(address)", +"e3a0de36": "admin(string,string,string,string)", +"e3a12480": "getBalance(uint8)", +"e3a135b9": "_bid(uint256,uint256,uint256,uint256,address)", +"e3a199d6": "testThrowCreateNewRevisionNotUpdatable()", +"e3a2a327": "SmartCityCrowdsale(address,address,address,uint256)", +"e3a37ea2": "newIndex(bytes32)", +"e3a47b00": "standing()", +"e3a531a3": "setSaleAuctionContractAddress(address)", +"e3a5f6f8": "_receiveToken(address,address,uint256)", +"e3a70ec1": "max_goal_amount()", +"e3a71e32": "deliverBonusTokens(address[])", +"e3a75485": "TORUE()", +"e3a797f1": "getCandidateMemberInfo(uint256)", +"e3a79840": "finishPresale(uint256,uint256)", +"e3a7f45a": "ecrecoverWrapper(bytes32,uint8,bytes32,bytes32)", +"e3a83290": "SALE_address()", +"e3a861a4": "setCrydrView(address,string)", +"e3a87f8b": "secondPrivateReleaseTime()", +"e3a8b13a": "core(uint256,uint256,address,uint256,string,uint256)", +"e3a8b345": "emptyContract()", +"e3a8e29c": "addBorrower(address)", +"e3a8e50b": "Subscription(bytes,address,bytes)", +"e3a94e9f": "addPacksToStandardSale(uint32[])", +"e3a96cbd": "getDispute(uint256)", +"e3a9744b": "mintTokens(int256,uint256,address,bool)", +"e3a97893": "secondPresaleEnd()", +"e3a99d2b": "updata(uint256,uint256)", +"e3a9b508": "EnableDisableTokenProxy()", +"e3a9db1a": "depositsOf(address)", +"e3aa018e": "setRank(address,uint256)", +"e3aa3c6e": "initialBonuslistTokens()", +"e3aa3fbb": "startEscrow(string,uint256,uint64)", +"e3aa62b1": "responsavel()", +"e3aae11b": "isStartGame()", +"e3ab8492": "requestGWAPrice(string)", +"e3abeaf3": "setAllowedTransferTo(address,bool)", +"e3ac3880": "backupfarmItems(address[],uint256[])", +"e3ac5d26": "prize()", +"e3ac8e16": "setFinalizationTime(uint256)", +"e3acc49a": "catIndexToPriceException(uint256)", +"e3adf4ea": "ChangeICOEnd(uint256)", +"e3ae1667": "commRate()", +"e3ae85f0": "winReward()", +"e3aec30c": "ballotStarted()", +"e3aeedc4": "lastMintedTokens()", +"e3aef2bd": "checkUnlockedTokensData()", +"e3af2ed9": "TWToken()", +"e3b0073e": "getVoteCounter(uint256,uint256)", +"e3b08f56": "concatYearMonth(uint16,uint8)", +"e3b09a85": "HungrCoin()", +"e3b10447": "GITToken()", +"e3b2594f": "fundingCap()", +"e3b26a8c": "SocialNetwork()", +"e3b3847c": "SubmitProofOfOwnership(bytes32)", +"e3b3932a": "bookKeeper()", +"e3b45ab7": "MIN_TOKEN_AMOUNT()", +"e3b460c9": "hookOperator()", +"e3b49a03": "rollSystem(uint256)", +"e3b55276": "AdminBuyForSomeone(uint16,address)", +"e3b5a153": "lastEpochTX()", +"e3b6040e": "amountSlicesCount()", +"e3b61135": "reinvestProfit()", +"e3b62158": "TokenVault(address)", +"e3b71ded": "setMaxContributionCrowdsaleAddress(address)", +"e3b7b668": "_setMaxDailyPerUser(uint256)", +"e3ba3398": "importTokens(address)", +"e3ba80d0": "purchaseImpl(uint16,uint64,address)", +"e3bab7ce": "buildInternalSalt(uint128,address,address,address,uint256,uint64)", +"e3bb01ac": "viewCancelledList(address)", +"e3bb3445": "releaseSupply(uint256,uint256)", +"e3bbab85": "test_smallDeviationPermitted()", +"e3bbb4f1": "MAX_GAS_PRICE()", +"e3bc2bb5": "newPassword(string,uint256)", +"e3bd9638": "getContract(address,address,uint256)", +"e3bea282": "callnotchecked()", +"e3bfdcfe": "pollBurnInc()", +"e3c04c32": "getNota(uint256)", +"e3c08adf": "getPlayerLAff(uint256)", +"e3c10714": "setMinContrib(uint256)", +"e3c2e4b9": "_setCreatedBlockOnCommitsPhase(uint256,address,bool)", +"e3c33a9b": "hasRole(string)", +"e3c3b200": "proposeWithFeeRecipient(address,address,bytes)", +"e3c3ec92": "BONUS_REWARD()", +"e3c3f180": "_setPurchasePremiumRate(uint128)", +"e3c4b1ae": "minSumICOStage2USD()", +"e3c517a9": "lockFlag()", +"e3c5862b": "setCAO(uint256,uint256,uint256,uint256,uint256,uint256)", +"e3c5a852": "buyTickets(uint256[],uint256,uint256)", +"e3c5d11a": "MIN_BUY_TOKENS()", +"e3c6e66d": "discountedIcoStartBlock()", +"e3c73d32": "minimumPriceCount()", +"e3c79a20": "enterOnBehalfOf(uint256[],uint256,address)", +"e3c82106": "becomeDuke(string,string)", +"e3ca12c6": "sendtoB(uint256)", +"e3cafbb0": "TOKEN_EARLYSUPPORTERS()", +"e3cb0cf0": "maxTransferPerTimeframe()", +"e3cb49f9": "setBlockingState(address,uint256,uint256)", +"e3cb8563": "playToken()", +"e3cbe744": "updatePlayersCoinByOut(address)", +"e3cc3570": "mintMigrationTokens(int256,address,uint256)", +"e3cc65e2": "getInvestorsLength()", +"e3cc83cf": "withdrawWhenFinished(address)", +"e3ccb809": "voteOnProposal(bool)", +"e3cd30f6": "getBuilding(uint8[176],uint8,uint8)", +"e3cd7c03": "getPass(address)", +"e3ce9714": "proxyWithdraw(address,uint256,uint8,bytes32,bytes32)", +"e3ceb06d": "YesNo(bytes32,address,string,address,uint256)", +"e3cee57b": "calLast5RoundProfitForRead(uint256)", +"e3cf1ad3": "changeRegistrationStatus(address,uint256)", +"e3cf6644": "sendKmPards()", +"e3cfef60": "timeRemaining()", +"e3cff634": "test(uint32)", +"e3d021d5": "purchaseTicket(uint16[])", +"e3d0252b": "defaultTriggerTime()", +"e3d0799c": "PLATFORM_FEE_PER_10000()", +"e3d0be5c": "EARLY_INV_BONUS()", +"e3d1072c": "Giveafuck()", +"e3d13592": "newTechSupport()", +"e3d1afd4": "TestToken(uint256,string,string,address)", +"e3d1e6d6": "hasProof(bytes32)", +"e3d2a98c": "setCurrentFundingGoal(uint256)", +"e3d2c1bf": "presaleTokensPerDollar()", +"e3d33fc9": "transferCount()", +"e3d36a98": "Credit(address)", +"e3d3f4cd": "bidGift(uint256,address)", +"e3d4187f": "Buy(address,uint256)", +"e3d51a0f": "repayBorrowInternal(uint256)", +"e3d5d88b": "getServerBuildingName(uint256,uint8,uint8)", +"e3d5e6a3": "year2Unlock()", +"e3d670d7": "balance(address)", +"e3d6ce2b": "addFiatTransaction(string,int256)", +"e3d6e4a3": "setFundsCreditBitContract(address)", +"e3d74457": "releaseTimeFirst()", +"e3d7f159": "FIRST_TIER_DISCOUNT()", +"e3d86998": "declareNewerVersion()", +"e3d91ebf": "bonusPoolsOf(address)", +"e3d9e8ea": "drawnArbiter(address,uint256)", +"e3da41b5": "sortWinningNumbers(uint8[5])", +"e3da5399": "left90(uint256)", +"e3da9f8f": "tranchesOf(address)", +"e3dac959": "makeTapTop()", +"e3db17b8": "updateContract(address)", +"e3db6670": "isHardCapTokensReached()", +"e3dbaff1": "tokensSpent()", +"e3dbda67": "setArtistsControlAddress(uint256,address,address)", +"e3dcd2c8": "maxPaymentInEther()", +"e3dd164e": "setNewTokenImporter(address)", +"e3de18b2": "withdrawMyClosedDeposits()", +"e3dea4b7": "setMcrAmountForGas(uint256)", +"e3debbbe": "getSubscriptionServiceID(bytes32)", +"e3e06c45": "PayPayCoin()", +"e3e10762": "calculateIdeaBuySimple(uint256)", +"e3e1dcb3": "getRouteNameByIndex(uint256)", +"e3e2342f": "callTokenHolderTribunal(string)", +"e3e28bab": "setTimes(uint256[],uint256[])", +"e3e2b1ba": "add_number(uint256)", +"e3e4001b": "buyWithReward(address)", +"e3e42b0c": "ZenAD()", +"e3e4a1b4": "burnUserTokens(uint256)", +"e3e4b9fb": "claimJob(uint256)", +"e3e5075c": "depositBattleValue(address)", +"e3e532a2": "setInstantToken(address)", +"e3e5439c": "specDWallet()", +"e3e54ac2": "CarDeregistrationFaled(uint256)", +"e3e5c9c1": "WhiteListBonusTokensEmitted(address,uint256)", +"e3e7399e": "addWinner(address,bytes4,uint256)", +"e3e7519c": "getTokenPriceforDapp()", +"e3e77055": "MultipleTokenVesting(uint256,uint256,uint256,address,uint256)", +"e3e7903f": "updateScore(address)", +"e3e7b439": "cryptoWillToken()", +"e3e7c665": "makeMoney()", +"e3e7d4f4": "leaderboardEntries(uint256)", +"e3e88734": "SigUser(address)", +"e3e9800d": "_cancelSellOfferInternal(uint32,bool)", +"e3e98cad": "COSSToken()", +"e3e9bc3f": "becomeSponsor()", +"e3e9cb4c": "Birth(address,uint256)", +"e3ea6496": "newCarProductID()", +"e3ea67d4": "STARTING_TURTLES()", +"e3eba060": "allowedToSpend(address,address)", +"e3ec0251": "subtraction()", +"e3ec0666": "clearJackpotParticipants()", +"e3ec5046": "DECIMALCOUNT()", +"e3ec7584": "showTokensUnfreezeDate(address)", +"e3ecbd7e": "isEditionEnabled(uint256)", +"e3ed14db": "getDiamond(uint256)", +"e3ed48a4": "getTokenScope(uint256)", +"e3edbfd3": "getAmountDue(address)", +"e3f037d8": "FlightDelayUnderwrite(address)", +"e3f0920a": "coinMaster()", +"e3f0b761": "walletF()", +"e3f0dd48": "getMult(bytes32,bytes32,uint256)", +"e3f10188": "updateFlagCount(address,address,uint256)", +"e3f16a61": "GRPlaceholder(address,address)", +"e3f25f01": "_delegateforward(address)", +"e3f2e4a4": "ante()", +"e3f310c7": "priceToSpend(uint256)", +"e3f38dd6": "GetSignVersion(string,address,uint256)", +"e3f4937f": "outOverRoundId()", +"e3f4ffdc": "GeezerToken()", +"e3f5009f": "payWithMileagePoint(uint256)", +"e3f508f5": "setLeaf(uint256,uint256)", +"e3f52c99": "warrior()", +"e3f563f6": "generateCompoundTerms(uint256)", +"e3f596a4": "ownerPrice()", +"e3f61948": "getStartIndex(uint64)", +"e3f688d3": "ThingschainToken(address)", +"e3f6b544": "member()", +"e3f7faaf": "calculatePrice(uint256,uint16)", +"e3f954be": "buyICOTokens()", +"e3f96400": "getTotalOwnerAccounts()", +"e3f9ba0e": "returnEth()", +"e3f9cd17": "lockTokenForExchange(address)", +"e3fa5882": "tryWithdraw(uint256)", +"e3fc03a8": "Guess(address,uint256,int256,int256,uint256)", +"e3fc43b2": "ended(bool)", +"e3fcbac1": "getSharesPercentage(address)", +"e3fcf122": "_sctc(uint256,uint256,uint256,uint256,address)", +"e3fe0317": "_setAllocationFee(bytes32,uint256)", +"e3fe48a1": "loadWhiteList(address[],bytes32[])", +"e3fe6a9e": "sehrRaised()", +"e3fe9740": "icoThresholdReached()", +"e3ff2f05": "weiExchangeRate()", +"e3ff9ac2": "MACHToken()", +"e3ffc9a3": "sendEtherToOwner()", +"e3ffcb84": "loserOf(uint256,uint256)", +"e3ffefe3": "ZeroReturnProfit()", +"e4002b30": "commitEuro()", +"e4007949": "buyRegistration()", +"e4019e07": "BOB()", +"e40205d6": "roundEndTime()", +"e4020804": "isHealthy()", +"e4024194": "returnedData()", +"e4027126": "mSumRawSpeed()", +"e40418a0": "trustedContractAddr()", +"e4043b37": "updateProduct(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4048049": "createBool(bytes32,bool)", +"e4062df5": "SkychainToken()", +"e4063140": "getAllActivity(uint256)", +"e40652e3": "creatUserPurchase(address,string)", +"e4065c4c": "Alias()", +"e406bb4b": "minedTokenCount()", +"e407ccb9": "Repayment(uint256)", +"e40819af": "lastTokenCreated()", +"e4083daf": "create_game_invite(bytes32,address,uint32,uint32,uint8,uint16,uint8,address,uint256)", +"e408de80": "buyInWithAllBalanced()", +"e40906ed": "getBorrowBasicInfo(uint256)", +"e4098655": "getCallCalledAtBlock(bytes32)", +"e409edf1": "chooseWinnerDeadline()", +"e40a72d4": "_internalToken()", +"e40a7545": "collectBuyFee(uint256,address)", +"e40a955c": "grantTeamTokens(address)", +"e40b4523": "activateVault(address,uint256,uint256,uint256,uint256)", +"e40c231e": "StoneToken()", +"e40cc359": "getListParamsUnOrdered(uint256)", +"e40d3692": "contributedAmountOf(address)", +"e40d835e": "getPositionIdFromNonce(uint256)", +"e40d8fc3": "addICOEndDate(uint256)", +"e40dd35b": "isGameApproved(address)", +"e40e56d3": "regular_coins()", +"e40e8457": "requestBurnerContract()", +"e4105ed5": "setToken(uint8,address)", +"e4109df8": "MAGTOKEN()", +"e410a0c6": "setup(address,uint16)", +"e4115a8c": "ApcrdaZebichain()", +"e4120220": "getTokenTrust(address)", +"e412828a": "Shark()", +"e412c526": "set_pre_kyc_bonus_numerator(address,uint256)", +"e415f4ee": "_addDai(uint256,address)", +"e4160e48": "admin_active_withdrawable()", +"e4165e15": "ownerDeactivateToken()", +"e416d173": "PreICO(uint256,uint256,address,address,uint256)", +"e416f6b4": "_startRound()", +"e416faa0": "getBetNum()", +"e4171746": "major_partner_address()", +"e417291b": "undelegateDAOTokens(uint256)", +"e41763f2": "setTokenFeeDeposit(address,uint256)", +"e41765de": "addBotAddress(address)", +"e417c38c": "Reward(address,uint256,uint256,uint256)", +"e417c62c": "ProofFund(address)", +"e4187d02": "multiplyDecimal(uint256,uint256)", +"e418f592": "receiveToken(address,uint256,bytes)", +"e419f189": "multiAccessIsOwner(address)", +"e41adb25": "PoolPreICO()", +"e41b1d28": "noAccountedWithdraw()", +"e41c02c9": "determineFirstPeriodOutcome(uint256)", +"e41cc093": "getItemStore(bytes12)", +"e41d0944": "acceptDonate()", +"e41d65e0": "payWinnerManually()", +"e41eaa41": "fakeNow()", +"e41ee46a": "MAX_QUANTITY()", +"e41f7dc1": "ethPriceProvider()", +"e41fb842": "comunityMintedTokens()", +"e420264a": "g(uint256)", +"e420a904": "FirstToken()", +"e420dcc5": "tokenDrian()", +"e4218416": "redemptionPayouts(uint256)", +"e422d6b8": "createRareCard(uint256,uint256,uint256)", +"e422ebe9": "getBot()", +"e422f311": "secondWeekEndTime()", +"e422f699": "toBE(uint256)", +"e4232069": "MAX_INPUT_USERS_COUNT()", +"e4246ad2": "canContractExchange(address)", +"e4246ba0": "setPaymentContract(uint8,address)", +"e424ddbd": "allocateFoundersTokens(uint256)", +"e4251361": "getTodayInvestment()", +"e4254585": "MFNToken()", +"e4274453": "PUBLIC_CROWDSALE_SOFT_CAP()", +"e4277f78": "backToOldOwner()", +"e427a197": "previousMinters(address)", +"e428ad8a": "ReferralReward(uint256)", +"e428fd5f": "takeBackMoney()", +"e42996d1": "redeemCoinsToICO(uint256)", +"e429bd8b": "getUsableAmount(address,address)", +"e429cef1": "addAuditor(address)", +"e42a4556": "KKTokenNew()", +"e42a8bc9": "dAddBallot(bytes32,uint256,uint256)", +"e42a9156": "AppleproToken()", +"e42a96e7": "escrowContract()", +"e42b0193": "test_insert_findWithHintNextIncreased(int256)", +"e42bb93f": "StarUniteChain(uint256,string,uint8,string)", +"e42bff66": "mintBadge(address,uint256)", +"e42c04f4": "Cryptshopper()", +"e42c08f2": "tokenBalanceOf(address)", +"e42c1337": "getSalary(string)", +"e42c1b76": "BountyActivated(uint256,address)", +"e42cb9f3": "statement()", +"e42d5be0": "getPaymentOf(address)", +"e42d674d": "refundIco()", +"e42d6efa": "unregisterUsers(address[])", +"e42d70ba": "safeAddCheck(uint256,uint256)", +"e42def21": "CryptoHill()", +"e42f4cc0": "addPersonalInfo(address,string,string,string,string,string,string,string)", +"e4309307": "fortifyClaims(uint16[],uint256,bool)", +"e430bb5b": "getFreeCoins()", +"e4310205": "addMastercardUser(address)", +"e431af36": "_addMember(address,uint256)", +"e431d241": "validateAndRegisterClaim(address,bytes32,uint8,bytes32,bytes32)", +"e4322464": "MatchBettingFactory(address)", +"e43252d7": "addToWhitelist(address)", +"e432f0e5": "queryOracle(string)", +"e4330545": "dump()", +"e433bb3a": "HAVY()", +"e4340e6a": "Wallet5()", +"e435f2c9": "takeOwnershipMultiple(uint256[])", +"e4360fc8": "getFileListElement(bytes)", +"e43650b6": "changeILFManager(address,bytes32)", +"e436a3f7": "getRoot2_16(uint256)", +"e436bdf3": "Draws(uint256)", +"e4372d0f": "setRestrictedAcct(address,uint256)", +"e437d1a7": "unRedeem(uint256)", +"e437d815": "getDsitributeMulti(address[],uint256[])", +"e438ff55": "changeINAWallet(address)", +"e43926fb": "refundTokenToCustomer(address,uint256)", +"e439501e": "AntmineToken()", +"e4397db1": "getBetsState()", +"e43a0bb2": "pullFunds()", +"e43a8897": "DonatedBanner()", +"e43aa5ff": "Medban()", +"e43ac447": "DirectConnectionFactory()", +"e43ae642": "deleteDIDHolderWhenBalanceZero(address)", +"e43b72b4": "discountedInvestors(address)", +"e43ba0bd": "isStrategy(bytes15)", +"e43bb0f6": "link(uint256,address,address)", +"e43bc1e9": "functionName3(bytes32)", +"e43c74a4": "BRoyalCoin()", +"e43cd900": "PoolBounty()", +"e43d68ce": "GetBanker(uint8)", +"e43dfebf": "burningTokens()", +"e43f696e": "setWhiteList(address[],bool)", +"e43f8424": "burnGoldTokens(address,uint256)", +"e4403507": "tokenContractBalance()", +"e4415d98": "investorDividends(address,address)", +"e44171b1": "Arina_amount_judgment(uint8,uint256)", +"e4424c9e": "createNew(bytes32,address)", +"e443253a": "DataFromSetting(uint8)", +"e443348e": "ONE_TOKEN()", +"e4440a86": "marketWallet()", +"e4444feb": "removeAllowedAddress(address,address)", +"e444504c": "nextClaim()", +"e44451ba": "removeAddressFromAdminlist(address)", +"e444a2e1": "_birthPerson(string,string,uint64,bool,bool)", +"e44501c4": "inactive_dividend(address)", +"e4454fdc": "GetMaxStageEthAmount()", +"e44591f0": "isNonFungible(uint256)", +"e4480dd8": "withdrawl(uint256)", +"e448ee26": "joinChallenge(uint256)", +"e4492fcd": "TokensPerETH()", +"e4495b15": "confirmSetIssuer()", +"e449c52a": "getStr(string)", +"e449de9f": "prevContract()", +"e44a94d3": "minContributionPresale()", +"e44ac1e4": "addLock(address[])", +"e44b974f": "placeBet(uint8,uint256,uint256,uint8,bytes32,bytes32)", +"e44bc43f": "stepOneRate()", +"e44c333a": "DreamTeam()", +"e44c96c9": "addInitialOwners(address[])", +"e44caea6": "balances3(uint256)", +"e44d3084": "testFailure()", +"e44d311b": "ticketPrices(uint256)", +"e44d6f04": "beatTeamWallet()", +"e44dbb75": "addAddressListItem(uint256,address)", +"e44ddaf5": "healthAndMana(uint256)", +"e44de421": "buyTokenFrom(address,address,uint256)", +"e44f777c": "returnETHforUnqualifiedBuyers(uint256,uint256)", +"e450056c": "tokenPartition(uint256)", +"e4503da4": "startPhaseMaximumcontribution()", +"e4504f62": "dogCore()", +"e451197a": "OrdoCoin()", +"e451ecfa": "swapTokenValueForCredits(address,address,uint256,address,string,uint256,uint8,address)", +"e45285cf": "setAIRDROPBounce(uint256)", +"e4536316": "removeARA(address)", +"e4536b84": "BalanceReader()", +"e453877e": "_approveTransfer(uint256)", +"e4538c6c": "addUndergraduateTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"e454158c": "futureSaleAllocation()", +"e4543410": "setIncrementPercentage(uint256)", +"e4547443": "releaseTimeLock(address,uint256)", +"e4547f98": "documentExists(bytes)", +"e45499c1": "updatePriceOfToken(uint256)", +"e4556549": "get_session_balance(address,uint32,uint32)", +"e4556f2d": "MaturityPrice(uint256,uint32,bool,bool,bool)", +"e455d26c": "getCurrentNeedsCount()", +"e455fce7": "extractOversightAddressesIndexLength()", +"e4560388": "endTimeMain()", +"e45648ac": "exchangeOldVersion()", +"e4564a4a": "returnAddressBonuses()", +"e4569c4e": "eeeeeeeeeeee()", +"e4578590": "SplitPaymentMock(address[],uint256[])", +"e457deda": "FindSlug()", +"e457e1e5": "charge(uint256)", +"e458c754": "whitelists(uint8,address)", +"e45a4fb4": "isMultipleOf(uint256,uint256)", +"e45a93cc": "GIT()", +"e45aa608": "tokensForfortis()", +"e45ab391": "Technology5G(address)", +"e45b1d1b": "openClosedToken()", +"e45b7388": "subscribers_TO_HATCH_1CraigGrant()", +"e45b8134": "transfersFrozen()", +"e45bc0ae": "dollcoin()", +"e45be8eb": "minPrice()", +"e45bf7a6": "forwardTo()", +"e45c1879": "getAuctionsCount()", +"e45c210c": "LogFunderInitialized(address,string,uint256)", +"e45c47b9": "SetPermissionsList(address,address,uint8)", +"e45ce7e3": "refillTxFeeMinimum()", +"e45ceec1": "getUnreadMessages(address)", +"e45d0550": "getAddressArray(address,string,string)", +"e45d4717": "withdrawLogic(bytes32,uint256,uint256,uint256[])", +"e45da0be": "freezeAddress()", +"e45dbabd": "addAddressesToWhitelist(uint256,address[])", +"e45ebe93": "checkVoteStatus()", +"e45ef4ad": "bobClaimsPayment(bytes32,uint256,address,address,bytes20)", +"e45fc71f": "getPeriodCycle(uint256)", +"e460382c": "importBalanceBatch(address[])", +"e4614066": "MelonToken(address,address,uint256,uint256)", +"e46164c5": "waitingForPayout()", +"e4626c8f": "like(address,uint256)", +"e462c888": "createEscrowByBuyer(address,uint256)", +"e463b659": "EtownCoinTest(uint256,string,uint8,string)", +"e463fa6b": "AddWhitelist(address)", +"e464dcc8": "userHasLuckyStone(address)", +"e4651465": "addEthTeller(address,uint256)", +"e46523f2": "_isNeighbor(uint8,uint8)", +"e46537ba": "JJCOIN()", +"e465c465": "like(address)", +"e46617b6": "releaseMultiAccounts(address[],address)", +"e4662939": "CLBToken()", +"e46638e6": "canTransfer(address,address,uint256)", +"e46694e8": "lastStakePriceUSCents()", +"e46751e3": "exp(int256)", +"e467f7e0": "mint(address[],uint256[])", +"e4682f00": "cancelSpendLimit(uint256)", +"e4683a79": "refund(bytes32,bytes32)", +"e4684d8f": "AXNETToken()", +"e468688e": "addTotalSupply(uint256)", +"e46871f1": "governingLaw()", +"e468cb72": "FUTM()", +"e468dc16": "Testokenmaking()", +"e4690a0b": "popRequest()", +"e469185a": "updateReserveRatio(uint8)", +"e4693e98": "endFundingTime()", +"e4698ee7": "start5Phase2020()", +"e46a5c21": "getArmyBattles(uint256)", +"e46c2cc4": "bytarr28(bytes28[])", +"e46d1939": "napoleonXAdministrator()", +"e46d6cb1": "canChangeRecoveryAddress(uint256)", +"e46da1b9": "MeiJiuToken(uint256,string,uint8,string)", +"e46dcfeb": "initWallet(address[],uint256,uint256)", +"e46dea92": "BlockChainPay()", +"e46f20dc": "getTransferHash(address,uint256,address,address,uint256,uint256)", +"e46f9ecf": "enableCodeExport()", +"e46fbe76": "burnSomeEther()", +"e46feb2c": "orgy1f(string,string)", +"e4706e3a": "TokenRateChange(uint256)", +"e470ddf8": "totalKittiesBurned()", +"e47112bd": "sendTokens()", +"e471a5b9": "putIntoPackage(uint256,uint256,address)", +"e471d770": "StopTheFakesPromo()", +"e472311b": "handleHTLCUpdateTx(address,bytes32,bytes32)", +"e4723828": "TestMath()", +"e4725ba1": "accept(bytes32)", +"e4745970": "transfer(uint256,address,string)", +"e474777e": "applyForCertification(string,string,bool,string,address,string,string)", +"e474f97a": "setPreicoAddress(address,uint256)", +"e4752159": "DigitusToken()", +"e475222e": "activeGames()", +"e476137b": "windUp()", +"e476af5c": "revokeAttributeSigned(address,uint8,bytes32,bytes32,bytes32,bytes)", +"e476cb86": "_mintTokens(address,uint256)", +"e4772ae3": "getDailyCount(address)", +"e4779d73": "register_user(address)", +"e4788384": "CancelAuction(address,uint256,uint256,uint256,uint64,uint256,address)", +"e478b578": "ProofofConcept()", +"e47a192e": "FactomIssued()", +"e47a6a9f": "disbursementPeriod()", +"e47bc32b": "ShanHuCoin()", +"e47c0c20": "GetCityData(address)", +"e47c5902": "ecverify(bytes32,bytes)", +"e47c66ca": "removePanelist(address,address)", +"e47ca4eb": "LogNewAnswer(bytes32,bytes32,bytes32,address,uint256,uint256,bool)", +"e47cb18f": "PointToken(uint256,string,string,uint256)", +"e47d8085": "isCurrentUser(address)", +"e47d914a": "fechVoteInfoForVoter()", +"e47da59e": "consumeTicket(address,string,uint256)", +"e47dace5": "totalLenderBalance()", +"e47dea1d": "setWithdraw(address)", +"e47e1c0b": "getAssetIds()", +"e47e7e66": "ask(uint256)", +"e47ea649": "isICOfinalized()", +"e47f0d64": "list_products()", +"e47f18d0": "CryptoTorchToken()", +"e47ffb64": "setSoft_Cap(uint256)", +"e480ba6a": "isDailySettlementOnGoing()", +"e4818a5d": "totalUnreleasedTokens()", +"e4818e4b": "secondPeriod()", +"e481c884": "ACFWallet()", +"e481ebf0": "getOwnedActiveEntry(uint256)", +"e48225ce": "startStakingAt(uint256)", +"e4828367": "buyEther(uint256)", +"e48341db": "getUpdateCount(bytes32)", +"e4845c2f": "Sperm()", +"e4849b32": "sell(uint256)", +"e4852b9b": "transferAccount(address)", +"e4860339": "tokens(address)", +"e486387a": "ReferenceToken(string,string,uint256)", +"e486869b": "setstoredaddress(address,address)", +"e487624b": "EarnedGNS(address,uint256)", +"e487c88b": "CROWDSALE_UNVERIFIED_USER_CAP()", +"e487e87b": "activateICOStatus()", +"e487eb58": "getOwner(bytes20)", +"e487fdb6": "participant1SentTokensCount()", +"e4881813": "cat()", +"e489c5ff": "haltIco()", +"e489d510": "MAX_TOKEN_SUPPLY()", +"e489fc68": "NdexSupply()", +"e48a1d60": "assertPaymentIndexInRange(uint256)", +"e48a4a29": "mayjaKill()", +"e48c09fe": "getFiltersLength()", +"e48c3c5c": "lockInDays()", +"e48cf65f": "_setClassViewValue2(uint256)", +"e48d81a8": "multisigwallet()", +"e48db5d4": "ProofVote(address)", +"e48e0d69": "ownerRetrieveTokenDetails()", +"e48e603f": "right54(uint256)", +"e49013b3": "jigoutuihuan(address,uint256)", +"e490c513": "getEntityState(bytes32)", +"e49168f3": "whichEpoch(uint256)", +"e4917fd2": "provenAddresseList(address[],bool)", +"e491936f": "getDisputeTX(uint256)", +"e49280cb": "close(address,uint256)", +"e492814f": "play(address)", +"e4928550": "daylimit()", +"e4929aa4": "FCC(address)", +"e4932abe": "INC()", +"e493ef8c": "Q()", +"e4942930": "SetMinLot(uint256)", +"e4952ddb": "transferDataOwnership(address)", +"e495f08e": "getHouseInfo(bytes32)", +"e495faf4": "bonusesPayed()", +"e496f510": "oraclize_query(uint256,string,bytes[3],uint256)", +"e497718e": "receiveLoan(address)", +"e497e88e": "XDCE()", +"e4983e27": "HEOContract()", +"e498922f": "getExp(uint256)", +"e498b98f": "setRedeemRequestLimit(uint256)", +"e498f5de": "FrozenFunds(address,bool,uint256)", +"e4995a1d": "ProdTokensale()", +"e4997dc5": "removeBlackList(address)", +"e4998173": "blockHalving(uint256)", +"e499f542": "distribute_reward(uint256,uint256)", +"e49b4c64": "ownerModAdmin(address,bool)", +"e49b606c": "claimWinnings(bytes32)", +"e49c9529": "underwrite(uint256,uint256[6],bytes)", +"e49cb2fb": "withdrawERC20Tokens(address,uint256)", +"e49cc6a9": "getUserBalancesLastBet()", +"e49dcee9": "fixTokens()", +"e49f6e91": "editContact(address,string)", +"e49fdaa8": "setClaimLimit(address,address,uint256)", +"e4a008a0": "cancelEthOffer()", +"e4a05c1f": "_nibblesToTraverse(bytes,bytes,uint256)", +"e4a0c124": "QCSTToken()", +"e4a0d386": "ethToBeClaimed()", +"e4a13fa4": "getICOAddress(uint8)", +"e4a1d868": "deposit_token(address,uint256)", +"e4a27ba0": "_play()", +"e4a2a8af": "getOwnerClientDetails()", +"e4a2ac62": "getCompactData(address)", +"e4a2c6d6": "loadProfit()", +"e4a30116": "initialize(uint256,uint256)", +"e4a30200": "BRV(uint256,string,string)", +"e4a358d7": "getPrefix(uint32)", +"e4a36a77": "getBondRemainingToBePaidOut()", +"e4a41c7f": "becomeFriendsWithMe()", +"e4a46a99": "howManyEthersToBecomeOwner()", +"e4a682d8": "InvestorToken()", +"e4a6e85a": "CoinStorage()", +"e4a72b13": "bZxContractAddress()", +"e4a77d29": "setInitialVaribles(uint256,uint256,uint256,address,address,address)", +"e4a7f363": "NewSymbol(string,uint8)", +"e4a86349": "getSubscribersCount()", +"e4a8de44": "quater1()", +"e4a9b286": "getVestingDuration(address,address)", +"e4aa0741": "AmericoTokenToken()", +"e4aa2436": "SouthAfricanRandsToken()", +"e4aa533e": "guess(bytes32)", +"e4aa6c5c": "MHCBC()", +"e4aa8140": "MAX_WEI()", +"e4aa82d7": "test_addAndGetVersion()", +"e4aa8da9": "checkReceiptProof(bytes,uint256,bytes,bytes)", +"e4abae32": "respond(uint256,address,address,bool,bool)", +"e4abf00e": "UnFrozenAddress(address)", +"e4ac3206": "withdrawIQT(uint256)", +"e4acecf3": "SALE0_END()", +"e4ad9a18": "takeTokens(address,uint256)", +"e4ada9fa": "setFeeForFirstArtWorkChangeRequest(uint256)", +"e4adc325": "UBS()", +"e4adc4f0": "ownerTransferWeiThirdWallet(uint256)", +"e4ae2e88": "enableEdition(uint256)", +"e4ae7d77": "getResolver(string)", +"e4af29fc": "accountCount()", +"e4af5f30": "getMinMaxBet()", +"e4af8331": "func_02E5()", +"e4b0a97b": "test_doubleVotingAgainst()", +"e4b0d3e6": "preRelayedCall(address,address,bytes,uint256)", +"e4b1443b": "KIK_ADDRESS()", +"e4b19e98": "amountRefunded()", +"e4b1e977": "hadd(uint128,uint128)", +"e4b1f93a": "isValidPurchase(uint256,uint256)", +"e4b1fe54": "totalGas()", +"e4b203ef": "sealed()", +"e4b34274": "round4StartTime()", +"e4b3c517": "crowdsaleContinue()", +"e4b42498": "AfrFballCoinXToken()", +"e4b503ec": "MinAmountByBetChanged(uint256)", +"e4b50cb8": "getToken(uint256)", +"e4b50ee8": "setRaiseRatio(uint256)", +"e4b541f3": "currentDevFees()", +"e4b5553c": "AddPromoter(address)", +"e4b5762a": "setPriceFeed(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e4b5ddeb": "addInvestorAtID(uint8)", +"e4b5e557": "CPWAToken()", +"e4b64da9": "sellOrders(address)", +"e4b6ac4c": "bonus2StartETH()", +"e4b6f799": "withdrawDai()", +"e4b6fbe2": "getApproveSpenderValue()", +"e4b73ac9": "foundersWallet3()", +"e4b74590": "distance(uint256,uint256,uint256)", +"e4b7b1b0": "Payroll(address,address)", +"e4b7fb73": "getRemainingSupply()", +"e4b8ebb7": "powercoin()", +"e4b90ed2": "reclaimInternal(address)", +"e4ba3969": "supportRecord(uint256)", +"e4bb7160": "adjustInflationRate()", +"e4bbb4b0": "POLY()", +"e4bc01b4": "FooMintableToken()", +"e4bd6695": "create(string,string,uint8,address,uint256)", +"e4bd9ebd": "calcId(uint256)", +"e4bdaa61": "buy(uint16,address)", +"e4be5159": "queryChild()", +"e4be782a": "createSecurityToken(string,string,uint256,uint8,address,uint256,address,uint256,uint8,uint256,uint8)", +"e4bf56b8": "getPastGamesLength()", +"e4bf6195": "changeGroupInfo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4bff515": "_pointToResolverAndResolve(int256,bytes32,address)", +"e4c01bbb": "LogSetSymbol(string)", +"e4c05a7d": "checkEngineerQuest(address)", +"e4c0aaf4": "changeGovernor(address)", +"e4c14a34": "Tx(address,address,uint256,string)", +"e4c19408": "startPreIco(uint256,uint256)", +"e4c21cf2": "CheckSoftCap()", +"e4c28308": "buyPortfolio(address,uint256,uint256)", +"e4c2db06": "getPreviousFile(bytes)", +"e4c487c9": "Betsicbo()", +"e4c53f04": "setCreationCurator(address)", +"e4c5ff46": "manualMint(address,uint256)", +"e4c60492": "RANGESTART_8()", +"e4c82881": "change_tokenReward(uint256)", +"e4c92731": "FAST()", +"e4ca784b": "isPoliceNode(address)", +"e4cb30ad": "getCharacter(address,uint256)", +"e4cc1161": "seedWithGasLimit(uint256)", +"e4cc18be": "finishMint()", +"e4cc98a5": "dividendPeriod()", +"e4cd7d96": "OX_ORG()", +"e4cdf3cc": "takeBack(uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"e4ce25ac": "roundEthShares()", +"e4ce6ccf": "deed(bytes32)", +"e4cecd32": "cf_request(uint256,uint256)", +"e4cf77bb": "GoodBoyPoints(uint256,string,string)", +"e4cfcbf7": "setChainNext(address)", +"e4cfe9eb": "callerAllocationPeriod()", +"e4cff610": "process_merge_mint_ious(address)", +"e4d0f41d": "setAuthorized(address,address,bool)", +"e4d13625": "pauseActivity(uint16)", +"e4d1b2cc": "allocatedToken()", +"e4d2fecf": "isListening(address,address)", +"e4d433e8": "startDealForUser(bytes32,address,address,uint256,uint256,bool)", +"e4d534cb": "feewallet()", +"e4d5a558": "updateAndSafeTransferFrom(address,uint256,string,bytes)", +"e4d609cc": "addRequester(address)", +"e4d6d778": "getused(address)", +"e4d74f2e": "BCBcyCoin()", +"e4d75c9d": "setVestingAddress(address)", +"e4d76d3b": "ATN(uint256)", +"e4d7a3d4": "getAllClients()", +"e4d7c28c": "decision()", +"e4d8dead": "setChild(uint256,string)", +"e4d91372": "setlevel(address)", +"e4d9d212": "isPVPListener()", +"e4d9de94": "getInfo(uint8)", +"e4d9e130": "CrowdsaleToken()", +"e4da3860": "XfinityAsset()", +"e4db2230": "addCard(uint256,uint256,address)", +"e4db2ceb": "auth(string)", +"e4db4dc1": "CheckEligibility(address,string,string)", +"e4db6062": "GivethBridge(address,address,uint256,uint256,address,uint256)", +"e4db915e": "citadelBuy(uint256,address)", +"e4dbc385": "assertEq12(bytes12,bytes12)", +"e4dbf719": "FlightDelayLedger(address)", +"e4dc2aa4": "totalSupply(address)", +"e4dc3d8b": "raisedSale1USD()", +"e4dcb06b": "open(string)", +"e4dd7794": "fundingPaused()", +"e4de6ec6": "AyeshaCoin()", +"e4deb007": "setNextSaleAgent(address)", +"e4dec825": "setAllowContributionFlag(bool)", +"e4dedc7f": "DeleteContract()", +"e4df2531": "topBalance()", +"e4e075cc": "_getPlayerInfoByAddress(address)", +"e4e0bd1f": "PointPowerCoin()", +"e4e0c030": "makePayment(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"e4e103dc": "rewardUser(address,uint256)", +"e4e1aae6": "BlockChainShopCoin()", +"e4e1bd53": "DisableTransfers(address)", +"e4e1f29b": "discountStep()", +"e4e1f6c5": "compare(address)", +"e4e1f7af": "mintTokensMultiple(uint256,int256,address[],uint256[])", +"e4e299f7": "zero_out(uint256)", +"e4e2bfe4": "canFinalize(uint256)", +"e4e2ca59": "supportsEIP20Interface(bytes4)", +"e4e2d2ae": "changeScore(uint256,uint256)", +"e4e3466a": "AIToken()", +"e4e4c8c0": "eMTV()", +"e4e57b9e": "sellTokens(address,uint256,uint256)", +"e4e609de": "LogBuyCoins(address,uint256,string)", +"e4e663a9": "getStatLotteries()", +"e4e6de18": "setPaoContactAddress(address)", +"e4e713e0": "DTCC_ILOW_6()", +"e4e76c16": "setCryptoSoulContract(address)", +"e4e790b8": "withdraw_GIC(uint256)", +"e4e80c49": "SpudToRotator(uint256)", +"e4e85963": "tokenRemainPreSale()", +"e4e985a8": "getKycProvider()", +"e4e9bcca": "setEthPriceProvider(address)", +"e4ea58a5": "withdrawInviteRewardToOrder()", +"e4eab468": "getWarrantyPrice(address,string,uint256,uint256,uint256)", +"e4eacd70": "curentBallotId()", +"e4eaee4c": "setBool(bool,bool)", +"e4eba2ef": "supplylimit()", +"e4ec3762": "onChain(address)", +"e4ec404c": "AG()", +"e4edf852": "transferManagement(address)", +"e4ee07b7": "UtlToken(address,address,address,address,address,address)", +"e4ef2cef": "link(address,string)", +"e4ef3eaa": "SetEvaluate(address,uint8,uint8)", +"e4f02750": "listGlobalAuditDocumentsFrom(bytes32,uint256,bool)", +"e4f06100": "adminSetDiv(uint256)", +"e4f20fb2": "mintPresale(address,uint256)", +"e4f2487a": "salePhase()", +"e4f26633": "betStage(uint256,uint256[])", +"e4f37374": "pixels(uint32)", +"e4f3f47f": "BuyCurrentTypeOfAsset(uint256)", +"e4f4c554": "AddressDefault()", +"e4f627fe": "keysCount()", +"e4f6973f": "BIPOOH_DAO_32()", +"e4f7a076": "set3RoundTime(uint256)", +"e4f7de93": "isIcoComplete()", +"e4f84173": "defValue()", +"e4f843f9": "deprecateTurretSubtype(uint8)", +"e4f896e8": "proclaimAllInactive()", +"e4f8b908": "_payout(address)", +"e4f8c6fb": "YettaCrowdSale()", +"e4f95226": "getLastInvestors()", +"e4fa8fc3": "hash_of(address)", +"e4fab06f": "delegatedFwd(address,bytes)", +"e4fae421": "ALLOC_ECOSYSTEM()", +"e4fc6b6d": "distribute()", +"e4fcf329": "setBonusRate(uint256)", +"e4fe8eb1": "getUserBigPromoBonus(address)", +"e4ff0f18": "rocketshipReachedDestination()", +"e4fffb3a": "updateMaxTokensToDistribute(uint256)", +"e50007b9": "TerminateEmployee(address,address,uint32,uint8)", +"e5002347": "setLimitMaxCrowdsale(uint256,string)", +"e5002a05": "whitelistAddress()", +"e5027880": "fortyEndTime()", +"e50278a6": "sellAllAmountPayEth(address,address,address,uint256)", +"e5033268": "endPreICOTimestamp()", +"e5033ee4": "maxBridgeHeight()", +"e503f70d": "newArticle(string,string,string)", +"e5042271": "setNick(string,string)", +"e5043632": "ElectronicHealthRecordToken(uint256,string,uint8,string)", +"e5045002": "setSecurityWalletAddr(address)", +"e504862b": "assertEq30(bytes30,bytes30)", +"e5065522": "updatePermissions(address,uint256)", +"e506b9b7": "joule()", +"e5071024": "setSemaphoreExternalNulllifier()", +"e5071b8e": "incrementCount()", +"e5075f4f": "ezpzToken()", +"e507d6dd": "getPlanActiveTime()", +"e507e7a4": "brandAccountsLength()", +"e508202d": "triggerLibraryEvent()", +"e5098e85": "eliminarEntidades(uint256)", +"e509b9a0": "initiateTransfer(string,string,uint256,uint256)", +"e509cac5": "_changeTokenAddress(address)", +"e50a32a9": "PriorityQueue()", +"e50a3bb1": "oraclize_query(string,string[],uint256)", +"e50ab759": "contractIndex(bytes32)", +"e50beffb": "voteStart(uint256)", +"e50d0473": "SetRank(uint8,address,uint16)", +"e50d2da1": "setSuperInvestor(address)", +"e50d8a8a": "deauthorizeMintRequester(address)", +"e50dce71": "testControllerApproveSetsAllowance()", +"e50dd26a": "contractTokenWithdraw(uint256,address)", +"e50dd478": "isFiscal()", +"e50e2f65": "EARLYADOPTERS()", +"e50ff8e9": "TestSportsG()", +"e5104307": "IsPlayer(address)", +"e5106ae9": "isValidNodalblockJson(string)", +"e51073f4": "withDrawInWei(uint256)", +"e510989a": "setNewDepositCommission(uint256)", +"e5113280": "RecipientStringUpdated(string)", +"e513575a": "getGblockWithOffsetFromCurrent(uint8)", +"e5135ae3": "CSZ_ERC20()", +"e515a4d1": "gen0Limit()", +"e515cd38": "deliver(address)", +"e516f4dd": "LogOwnerChange(address,address)", +"e5173942": "PRE_SALE_SOFT_CAP()", +"e517fd54": "getBonusPercents(uint256)", +"e5189e2a": "minSumICOStage3USD()", +"e5193c48": "withdrawGalacticTokens(address)", +"e51949fb": "getMinAuditPriceSum()", +"e51a3b40": "mul(uint8,uint8)", +"e51a7826": "buyCore(uint256,uint256,uint256,bytes32)", +"e51ace16": "record(string)", +"e51bfd9a": "selfHybridizationPrice()", +"e51c3257": "isTokenRateCalculated()", +"e51d2093": "getSaleFee()", +"e51d5c33": "Bitstraq_Token()", +"e51dc14a": "setMinBidDifferenceInSzabo(uint256)", +"e51dfd90": "cancelSellOrder(uint256,uint256)", +"e51e3c61": "transferReserveFundTokens(address,uint256)", +"e51e88bd": "MintingManagerApproved(address)", +"e51f2c68": "change(address,uint256)", +"e51f95cc": "init_crowdsale(address)", +"e51fcfa2": "LLV_311_EDIT_4()", +"e51ff1fc": "iterateOverThings()", +"e520f09e": "tokensToMintInHold()", +"e520fc7e": "treasure()", +"e5212deb": "_buyIcoToken(uint256)", +"e521357c": "LocalsValidation()", +"e521889c": "distributePrizes(uint256,uint8)", +"e5225381": "collect()", +"e52269c2": "Ooredoo()", +"e523757e": "Cashback(address,uint256)", +"e524d618": "UBetCoin()", +"e5254036": "changeNameOperation()", +"e5258557": "setMigrateFeesDueToFork(bool)", +"e525af22": "TOAB()", +"e525c3d8": "dTRIGGER_NEXTWEEK_TIMESTAMP()", +"e5260958": "Defraycoin()", +"e5269bbf": "limitDefaultType()", +"e526d7a0": "getTeamAddress(bytes32)", +"e527217b": "Object(string,string)", +"e52858c6": "token_b()", +"e5286c80": "token1stContract()", +"e5291ac5": "getVMParameters(uint256)", +"e52b6a56": "getAmountBonus(uint256,uint256)", +"e52bb742": "getGenre(uint256)", +"e52c0f24": "changeICOStartBlock(uint256)", +"e52c17a8": "test_increaseTimeBy800000_timecheck()", +"e52c66c1": "getTotalLosses()", +"e52c9da1": "giveaway(address,uint256,uint8)", +"e52d0404": "addressOfIndex(uint32)", +"e52d0659": "setPriceForBasePart(uint256)", +"e52e9f15": "isAddressLocked(address)", +"e52eb288": "buyFuel(address)", +"e52eb764": "updateVIPBoard()", +"e52efbf1": "getCompte_4()", +"e52f64ce": "releaseMany(address[])", +"e530db1c": "pool_percentage()", +"e531a9b8": "numOfUntransferableEcTokens(address)", +"e53229c7": "zasxzasxqa()", +"e5333b5e": "close_next_bucket()", +"e534155d": "holder()", +"e534a34b": "addThing(uint256,uint256,uint256,uint256,bytes32)", +"e534bf4f": "sha(bytes32)", +"e534c676": "getRefillPercFor(string)", +"e5357b02": "ReturnCode(uint8)", +"e535ed35": "closeChannel(bytes,bytes,bytes)", +"e5362206": "hdiv(uint128,uint128)", +"e5362667": "getTotalTokenCount()", +"e5363ab8": "initialise(address,uint256,uint256,uint256,uint256,uint256,string,uint8,string)", +"e536a41f": "USD20Crowdsale()", +"e536c723": "lowestContribution()", +"e536f869": "pai_add(string,string)", +"e53767bd": "denied(address,address)", +"e537a195": "getSeatAvatarUrl(uint256)", +"e537ceb9": "userOddsCycle(address)", +"e53831ed": "setSomeValue(uint256)", +"e5390e05": "thirdPeriodOfICO()", +"e53910a2": "TestNetReputationToken()", +"e5393f25": "GetSoftwareCount()", +"e53a22ac": "addSubMilestone(uint16,string,string,uint64,bool)", +"e53a8a5f": "GRAPE()", +"e53a8cf4": "getTokensLeft(string)", +"e53ae072": "PUCOINToken(address,uint256)", +"e53b373e": "TimeBankChain()", +"e53c4548": "transferOwner(address,uint256)", +"e53c9a5f": "cf_confirm(uint256,uint256)", +"e53cacba": "listOutEmployees()", +"e53cf8c9": "XBornID()", +"e53cfed9": "setupMiniGame()", +"e53d4988": "WLLToken()", +"e53e04a5": "refillGas()", +"e53eb53d": "amountToSeedNextRound(uint256,uint256)", +"e53ecb79": "allocatedBalance()", +"e5408eae": "TEAM_RESERVE()", +"e5411525": "crowdsaleStartTimestamp()", +"e54135ac": "updateExchangeRates(uint256)", +"e54280e7": "setBZxContract(address)", +"e542e7a3": "updateEtherCost(uint256)", +"e542e7c5": "newIdAuctionEntity()", +"e54384f9": "removeEntryManual(uint256,address)", +"e5438f5e": "FLiK(uint256,string,string,uint256,uint256)", +"e5449600": "unFreezeUser(address)", +"e544b52c": "setNextRules(uint256,uint256,uint256,uint256)", +"e545f941": "releaseToken(address)", +"e546299b": "activatePass(bytes32)", +"e5463032": "getWLAddress()", +"e546bb0c": "apiAddress()", +"e546d9c4": "removeTeam(address)", +"e548799c": "registerCrowdsale(address,address,uint256[8])", +"e548cf13": "betOnColumn(bool,bool,bool)", +"e548f086": "ETHOfCrySolObjects()", +"e549053f": "AnotherStorage(address)", +"e549114b": "stageOneCap()", +"e54919e6": "hasInitCard2()", +"e5494be1": "unlock2Y()", +"e5499e55": "LWFToken()", +"e549ec26": "safeDrain()", +"e54a29bb": "getRegisteredUser(address)", +"e54a9646": "netAddress()", +"e54aae13": "getMarketTopLevels()", +"e54c495a": "majorityReward()", +"e54c4f98": "getRefundValue(address)", +"e54d4051": "receiveInteger(bytes,uint256,uint16)", +"e54d62e9": "simDuration(bytes)", +"e54d8ccb": "Mappings()", +"e54ebe61": "updateBalance(uint256,bool)", +"e5514c9d": "MAX_PRESALE_TOKENS_SOLD()", +"e55156b5": "setFee(address,uint256)", +"e5515b55": "updateAssignedAudits(uint256)", +"e55186a1": "getUnit()", +"e551bff0": "PokerPayoutValue()", +"e5520228": "getEarningsRate()", +"e55219c6": "Chromium()", +"e5522a5b": "getClassMintCount(uint32)", +"e5533790": "setBiddingComponent(address)", +"e554482e": "arrayLength()", +"e554a5ff": "closeBid(address,uint256)", +"e554af57": "BAJIDOR(uint256,string,uint8,string)", +"e5553b33": "GenChip(uint32)", +"e555c1a3": "sellMyTokens()", +"e5568317": "setDeliveryAddress(string)", +"e556a08c": "validateToken(address,bool)", +"e557498b": "reFund(address,uint256)", +"e5575e61": "getTheLengthOfUserFreeze(address)", +"e557a18e": "activateHedge(address,uint256)", +"e557bb4e": "places(uint256)", +"e55834cb": "write(string,uint256)", +"e5583c59": "executeTxn(address,uint256,uint256)", +"e5589756": "Debug(string,address,uint256)", +"e5593b4d": "allocateTeamAndPartnerTokens(address,address)", +"e559afd9": "addToWhitelist(address,address[])", +"e559c724": "TEAM_VESTING_PERIOD()", +"e55a07b6": "setTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", +"e55a07c2": "tokenSaleClosed()", +"e55a6ef6": "votingPeriodStartTime()", +"e55a7afb": "Gemmes()", +"e55ae4e8": "getPlayer(uint256)", +"e55b4aa8": "getBalloonCosts()", +"e55b55ce": "getPreSaleTokensAvailable()", +"e55b69b3": "startPostIco(uint256)", +"e55b8b62": "getPeerTokens(address)", +"e55c6d07": "getStartDateOfCampaign(bytes32)", +"e55db48e": "roundId_()", +"e55ed42e": "_phxToken(address)", +"e55f98f3": "Log1(uint128,string)", +"e55fae77": "setUpdatePeriod(uint256)", +"e56044c8": "incMemberBadRep(address,uint256)", +"e5604559": "UserUpgraded(address,uint256,uint256,uint256,uint256)", +"e560bf2e": "setOraclizeGasCost(uint256)", +"e5612b3b": "finishDistribute()", +"e5612d0e": "transferPaillier(string,address)", +"e561f28a": "cityIndexToApproved(uint256)", +"e562dfd9": "openRound()", +"e562f0ec": "setKYCRequiredToSendTokens(bool)", +"e5637956": "MIN_INVESTED_ETH()", +"e563d541": "delFrException(address)", +"e564bd4d": "accFoundation()", +"e564f88e": "tokensToIssue()", +"e564fd25": "setNotary(address,bool)", +"e56556a9": "getPlayerID(address)", +"e5656f9c": "updateMsgSenderBonusDrops(uint256)", +"e565b387": "FOUNDATION_POOL_ADDR_VEST()", +"e565beeb": "softMtcTransfer(address,uint256)", +"e565fd1b": "SetStorage(address,address)", +"e56646ae": "SmartPonzi()", +"e5664f65": "prePreSalePeriod()", +"e5665b57": "_softcap()", +"e566be4e": "EthRelief(address)", +"e566dfc6": "_handleFunds(uint256,uint256,address,uint256)", +"e567756f": "setDevelopmentAuditPromotionWallet(address)", +"e56860c3": "fundingLock()", +"e5689afa": "updateStorage(uint256,uint256)", +"e56988dd": "latestBidTime()", +"e569c1d4": "getMintOwner()", +"e56a9973": "marketCells()", +"e56adb5f": "IsWhite(address)", +"e56b3e68": "mediate(uint256)", +"e56b9dce": "GetPrize(uint256)", +"e56bb194": "calculateMyPercents()", +"e56c10a0": "ONTExchangeRate()", +"e56c174b": "getRate(address,address,uint256)", +"e56c38b1": "modify_uint(uint256)", +"e56c8155": "initialiseMultisig(address,uint256)", +"e56c8552": "spinTheWheel(address)", +"e56d3fea": "developer_add_address_for_B(address)", +"e56e4776": "avgSalesToCount()", +"e56e56b2": "sellCard(address,uint256,uint256,uint256,uint256)", +"e56e60f6": "SingularityTest12()", +"e56ee3c1": "cityPrice()", +"e56f3815": "isKnownOnly()", +"e5700ddf": "jack_winner()", +"e5702701": "minSellRateInPrecision()", +"e57053cd": "airdropWinTime()", +"e5707fa2": "teamContact()", +"e570be18": "DVIPBackend(address,address)", +"e5714ea3": "insertCLNtoMarketMaker(address,uint256)", +"e571c35e": "ReverseRegistrar(address,bytes32)", +"e571fd2d": "addPrescription(uint256,string)", +"e5720f2d": "getCredibilityScoreOfClaim(bytes12,bytes12)", +"e5723b6d": "buyerApprove(address,uint256,bytes32)", +"e572dee5": "bountyTokens(address,uint256)", +"e5731b77": "UnpackRevocation(bytes)", +"e5734c57": "setPhase1DurationInHours(uint256)", +"e574015c": "auditSupply()", +"e57405e2": "EMISSION_FOR_TEAM()", +"e575c5cb": "assertOnlyTo(uint256)", +"e575df72": "getUserStatus(uint256,address)", +"e576038f": "addNewSampleType(string,uint256)", +"e5760520": "bountyWallet()", +"e5766e84": "initPayoutTable()", +"e5769ab9": "getLastPresser()", +"e5775515": "getUserWallet(string)", +"e577d2c2": "updateEthToTokenOrderWHint(uint32,uint128,uint128,uint32,int256)", +"e5781b71": "SatFix(int256,int256,int256)", +"e5782fd5": "setFeeStructure(uint256,uint256,uint256)", +"e5789f5f": "getTotalLevelValue()", +"e5791c3e": "mustHoldFor()", +"e5796716": "restrictTransfert()", +"e579ebeb": "chAirDropFshare(uint256)", +"e57a68da": "StephenHawking()", +"e57ac748": "resolveDisputeSeller(string,address)", +"e57b921d": "_createNumber(string,uint256)", +"e57bc079": "DrawAddr()", +"e57c09bc": "contentById(bytes32)", +"e57c78ec": "unregisterPresale(address)", +"e57c8d1b": "dummyAgent()", +"e57d4adb": "approvedOrders(bytes32)", +"e57d880a": "externalPurchase(address,string,uint256,uint256,uint256)", +"e57e31fa": "approveSubmission(address,address)", +"e57e5741": "onXon()", +"e57e6593": "createClaim(string,string,address,uint256,string)", +"e57ea16d": "checkValueSent(bytes,bytes20,uint256)", +"e57ebc0f": "FRPToken()", +"e57f5a1d": "removeFromStud(uint256)", +"e58018c5": "openSaleEndTime()", +"e5807e06": "unfreezeBoughtTokens(address)", +"e580b2b0": "presaleEnded()", +"e580f47b": "lotteryId()", +"e580f6ab": "createGame(uint8)", +"e581002e": "strategybacktest(uint32[],bytes32[],bytes32[],uint64[],bytes32)", +"e5815b33": "JohanNygren()", +"e58172b1": "cardCost()", +"e5820af7": "pushtx(address,uint256)", +"e582645e": "isTokenSaleRunning()", +"e582b7e0": "lastBidAmount()", +"e582dd31": "stored()", +"e58306f9": "adminMint(address,uint256)", +"e5834b4d": "setShareactive(bool)", +"e5839836": "isFrozen(address)", +"e585f69f": "TokenResolver()", +"e587fb71": "setTreasureBox(address,bool)", +"e588a2bb": "ChannelWithdraw(address,address,uint32,uint192)", +"e5893cbe": "Register(address,bool)", +"e58a6509": "SMTfund()", +"e58ae45b": "migratePhraseData(uint256,uint256,uint256,uint256,uint256)", +"e58b0eb1": "WinkelERC20()", +"e58b5ab2": "setFinishedTx()", +"e58b69f2": "getCompte_6()", +"e58ba9e4": "stealCardWithSocialIdentity(uint256,uint256)", +"e58c68bc": "MAX_GEN0_GIRLS()", +"e58c8c5c": "checkParticipantStatus(address)", +"e58ca07e": "IntegratedMoney()", +"e58cd3cb": "setTokenCapInUnits(uint256)", +"e58d116b": "addConfirmation(bytes32)", +"e58d478e": "btcAddrPubKeyUncompr(bytes32,int256,bytes32,int256)", +"e58dd55a": "endThirdBonus()", +"e58dede7": "_tokenAllocator()", +"e58eda1b": "ARTWORK_AUCTION_DURATION()", +"e58ef8a8": "executeTransfer(address,address,uint256)", +"e58f0289": "MANGGAHTOKEN()", +"e58f2623": "getLotteryData()", +"e58fc54c": "withdrawForeignTokens(address)", +"e58fdd04": "isFeed(address)", +"e5910f04": "setCourceSale(uint256)", +"e591253c": "refundPreICO()", +"e59160e3": "nomin()", +"e591fa26": "getProjectFeedbackWindow(bytes32)", +"e5920ab5": "getNoVotes()", +"e592172e": "test_twoInvalidEqString()", +"e5926ddc": "getSaleLength()", +"e592f95a": "getRewardWinnings(address,uint256)", +"e593428f": "PURCHASE(bytes32,uint256)", +"e5949b5d": "channels(uint256)", +"e594ad35": "assignCore()", +"e5962195": "blocked(address)", +"e596d811": "approveBatchTransfer(address)", +"e597a27f": "getNumberOfBlocksRemainingToWin()", +"e597f402": "create(bytes1,bytes32,bytes)", +"e59843ec": "allowAutoInvest(address)", +"e5994905": "transferTokenFrom(address,address,address,uint256)", +"e59997c9": "getFmmsDetail(uint256)", +"e599a767": "GGG()", +"e59a29a6": "getStakePerDraw()", +"e59af25b": "buy_spice_melange()", +"e59b0e14": "testIsNull(bytes)", +"e59bcf52": "subLockValue(address,uint256)", +"e59c4fa3": "smallUintFunc(int256,uint8,uint256)", +"e59c5e56": "Filled(address,uint256,address,address,uint256,address,uint256,uint256)", +"e59c9ada": "getBonuses(uint256)", +"e59cef17": "RaisedFunds()", +"e59cf926": "FOUNDER_ADDRESS3()", +"e59d2b7f": "unfreezeTeamWalletBlock()", +"e59d4912": "setOracleInterval(uint256)", +"e59d843a": "Replicator(bytes,uint256,uint256,address)", +"e59de295": "setItemPerPage(uint16)", +"e59de3a5": "drawToken(address)", +"e59e1ca6": "getBrickBuilders(uint256)", +"e59e6759": "ZXZX(uint256)", +"e59eee2e": "PRE_ICO_MIN_DEPOSIT()", +"e59f611f": "InputLimit(uint256)", +"e59ff828": "createOrder(uint32,uint32,uint256,bool)", +"e5a01e69": "getWeaponNumber()", +"e5a07419": "sellDividendPercentEth()", +"e5a078a7": "cancelRegistration()", +"e5a17818": "cancelSeller(bytes32,uint256)", +"e5a1eac2": "setSellDividendPercentageFee(uint8,uint256,uint256)", +"e5a23e7e": "changeBirthSettings(uint256,uint8,uint8)", +"e5a252b1": "playerTempReward()", +"e5a27038": "Pluton(uint256,string,uint8,string)", +"e5a284f8": "roundFourBlock()", +"e5a31c5d": "canGrantVestedTokens(address,address)", +"e5a3363c": "luckyVoters(uint256)", +"e5a34f97": "getFullround()", +"e5a3c0ad": "addPrivateSaleTokens(address,uint256)", +"e5a3c771": "expiredLockPeriod()", +"e5a4bed3": "getInterest()", +"e5a512af": "refund_with_close_position(address[],address,uint256[])", +"e5a5fbc8": "crowdsaleInProgress()", +"e5a62ffc": "Tile()", +"e5a64de6": "CompraUnidadesPases(uint16,uint8)", +"e5a6b10f": "currency()", +"e5a6fadd": "ReinsureSeveralDeaths(bool)", +"e5a70ef7": "feeMultiplier()", +"e5a71eb6": "Itterator9000Ultra()", +"e5a749e8": "needSurvive(bytes32)", +"e5a7b51f": "parentChange(address,uint256)", +"e5a82fe7": "REXEN(address)", +"e5a85478": "getUserTXCount()", +"e5a912c7": "xdest()", +"e5a93dd8": "inCirculation()", +"e5a9d6b0": "get_registrant(bytes32)", +"e5aa3d58": "i()", +"e5ab8be0": "isCollaboratorOrOwner(address,uint256)", +"e5ac7291": "lockAccounts(address[],uint256)", +"e5ac808e": "checkProof(bytes32,bytes32,bytes32[],uint256)", +"e5ace862": "getPoolMinStakeTimeInBlocks(uint256)", +"e5aceac5": "getWorlCupByID(uint256)", +"e5ae7721": "submitPayment(bytes32,bytes32[],uint256,uint256,uint8)", +"e5af0e89": "setNewTokenURI(string)", +"e5af18c5": "score(bytes32)", +"e5af350e": "reloadWhiteByName(uint256)", +"e5af3a35": "throwsSaleWalletIncorrectMultisig()", +"e5af48d8": "isApproved(address,address,uint256)", +"e5af8d92": "iiinoTokenAddress()", +"e5afe3e6": "tokenPrices(uint256)", +"e5b02393": "addSaler(address)", +"e5b02447": "findTopNValues(uint256[],uint256)", +"e5b0ee4d": "changeVestingPeriod(uint256)", +"e5b2169f": "Registry(string)", +"e5b28c07": "weeksFromEndPlusMonth()", +"e5b2a58d": "SinoeCoin()", +"e5b4003b": "grantPoolRole(address)", +"e5b5019a": "MAX_UINT()", +"e5b598d9": "hasChampSomethingOn(uint256,uint8)", +"e5b5a527": "giveStellarReward()", +"e5b5fe72": "Put(address)", +"e5b6b4fb": "Securities_5()", +"e5b6eac4": "teamUnlock2()", +"e5b73e08": "payer(address)", +"e5b754fb": "Redeem(address,uint256,uint256)", +"e5b7ec88": "setVoteCut(uint256)", +"e5b82bba": "dayTokenFees()", +"e5b8d6e0": "withdrawTokenRefund(uint256)", +"e5b9a74c": "submit(address,string,string,string)", +"e5ba08e5": "_baseDebt(uint256,uint256,uint256,uint256)", +"e5ba0b8a": "sellOffer(uint256,uint256,address,bytes32)", +"e5bb6575": "blockUser(address,address)", +"e5bb9fb9": "cancelTx(uint8)", +"e5bc7be0": "replaceModuleHandler(address)", +"e5bcb303": "getAccessorPurpose(address)", +"e5bf1b75": "getElectionId(string)", +"e5bf93b9": "balanceEther(uint256)", +"e5c0de3e": "Labereon()", +"e5c0fa69": "torchDividendsOf(address)", +"e5c19b2d": "set(int256)", +"e5c2205e": "_calculateTokens(uint256,uint8,uint256)", +"e5c31ddc": "rejectTransfer(uint256,uint256)", +"e5c361b0": "totalTokensICO4()", +"e5c389cd": "setConfig(uint256,uint256,uint256,uint256)", +"e5c42fd1": "addStakeholder(address)", +"e5c46869": "refPercentage()", +"e5c46944": "MultiSigWallet(address[],uint256)", +"e5c5dabb": "CSCResourceFactory()", +"e5c60091": "highest_bid()", +"e5c60d0b": "INVESTMENT_FUND_TOKENS_SUPPLY()", +"e5c6258d": "withdrawCrowdsaleTokens(address,uint256)", +"e5c774de": "houseEdgeDivisor()", +"e5c7bc6c": "treesOnSale(uint256)", +"e5c7e509": "testThrowTransferDisableNotEnabled()", +"e5c8b03d": "renounceSigner()", +"e5c8eb2f": "mytesttokenToken()", +"e5c91047": "addMeByRC(address)", +"e5c92020": "freezeFrom(address,uint256,uint256,uint256)", +"e5c98b86": "RoundSet(uint64,address)", +"e5c9c2ed": "_initialize(address,address)", +"e5ce8200": "withdrawForMkt(address)", +"e5cf2297": "amountOwed(address)", +"e5cf45b0": "FruitionToken()", +"e5cfd1bc": "player3Timestamp()", +"e5d00bee": "initiateCrabPartData()", +"e5d00f1f": "checkDepositQuest(address)", +"e5d02cd0": "PriceReturn(uint256,uint128)", +"e5d0713b": "maxGamesPerBlock()", +"e5d0c1bd": "LATToken()", +"e5d17171": "skl()", +"e5d2ce2f": "setCategory(uint256)", +"e5d3d9d7": "getBuyArray(address)", +"e5d4610f": "generatorTransfer(address,uint256)", +"e5d5876d": "_sell(uint256)", +"e5d5c898": "isSuperior(bytes32[],bytes32[])", +"e5d607f3": "SocialLendingToken(uint256,string,string,uint256)", +"e5d71cfe": "rewardLottery(bool)", +"e5d787f2": "moreTokenPerEtherForPresaleRound()", +"e5d8011f": "getCurrentTokenAmountForOneBtc()", +"e5d8103e": "setTotalBonuses(uint256)", +"e5d824a7": "addData(uint256)", +"e5d8f1ca": "removeAmount()", +"e5d90d94": "LuckchemyToken()", +"e5d9dac4": "assetTransfer(address,uint256)", +"e5da2717": "BOBToken()", +"e5dada63": "_pushRoomNight(address,uint256,bool)", +"e5db1a68": "bytes32Func(bytes32)", +"e5db2612": "addPrivatePurchaser(address,uint256,uint256,uint256)", +"e5db7a20": "mainnetAccountDict(address)", +"e5db9b49": "getJobInvoices(uint256,uint8)", +"e5dc476f": "getVideoGameCurrentPrice(uint256)", +"e5dc67d6": "setGameCloneFee(uint256)", +"e5dcc824": "getInfo1(address,address)", +"e5dd05ab": "primaryLedgerCount(string)", +"e5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", +"e5ddb19d": "_applyLevelBonus(int256,uint256)", +"e5de0b89": "EGGS_TO_HATCH_1FALCON()", +"e5de2925": "endPreSales()", +"e5df3dd0": "unfrozen(address,uint256)", +"e5df669f": "recoverAddr(bytes32,uint8,bytes32,bytes32)", +"e5df7b10": "getBoughtTokens()", +"e5dfbe78": "setCreateDividendPercent(uint256)", +"e5e04a33": "SendResult(uint64,uint64)", +"e5e123f1": "funeral(bytes32,int256)", +"e5e1a202": "endTimeOne()", +"e5e231dd": "pauseTokens()", +"e5e288e5": "sendTransaction(address,uint256,bytes)", +"e5e2fd7b": "balanceTreasury()", +"e5e38fc7": "test_twoTrueAndFalseAssert()", +"e5e3ac4f": "removeAssociatedAddressDelegated(address,address,uint8,bytes32,bytes32,uint256)", +"e5e41a63": "publishOption(uint256,uint256)", +"e5e45b16": "notifyTempBreach(int256)", +"e5e4807f": "setPriceToPreSale()", +"e5e51bd7": "getOrderTokenCompletedAmount(uint256,address)", +"e5e53493": "requestKinTokenOwnershipTransfer(address)", +"e5e5cfac": "Altcoin()", +"e5e5dff1": "cancelBounty(uint256)", +"e5e5e5d6": "emitGenericProposal(string)", +"e5e6a0aa": "ticketTransfereesAmount(address)", +"e5e75fee": "fountainContractAddress()", +"e5e792de": "_pro(address,uint256)", +"e5e7a136": "CEO_SHARE()", +"e5e7b82b": "ethEurRate()", +"e5e7c276": "isData()", +"e5e7fa53": "div(uint96,uint96)", +"e5e88590": "unholdSubscription(uint256)", +"e5e9a9bb": "registerUsers(address[])", +"e5ea1201": "changeTicketType(uint256,string,uint256)", +"e5eab096": "setDomain(string)", +"e5eabf14": "playInternal(address,uint256,uint256,address,uint256)", +"e5eb9d7a": "SilverMoon()", +"e5ec8df3": "calcTimedQuotaByPower(uint256,uint256,uint256,uint256)", +"e5ed1d59": "startGame(uint256)", +"e5ed31cb": "updateBytes32(bytes32,bytes32)", +"e5ed44c2": "Koplak()", +"e5ed78bb": "setDateStart(uint256)", +"e5ee8dae": "publicGetElementOffer(uint256,uint256,uint256)", +"e5eee9be": "longJudge(uint256,address)", +"e5ef0b95": "BitRRToken()", +"e5f06556": "fillRequest(bytes32,string,uint256)", +"e5f171d6": "BLOCKCHAIN_DEPOSIT_BETA()", +"e5f2806a": "createPlayer(uint32[7],uint256,address)", +"e5f2d88f": "settotalCardValue(uint256)", +"e5f363f8": "FTTtoken()", +"e5f3b2dc": "advisorsTokensWallet()", +"e5f3e7b5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"e5f3fcb1": "alias_price()", +"e5f4906a": "moveTokenICO(address,uint256)", +"e5f59e7c": "setIsChargingManagementFee(bool)", +"e5f5d05b": "tokensRaisedRound()", +"e5f6186d": "maxContributionWei()", +"e5f643cf": "InvestorWhiteList()", +"e5f65c71": "initialBlockCount()", +"e5f6a908": "AddrCommunityDistribute()", +"e5f6b137": "getOutCar(string,uint256)", +"e5f6d376": "updateStatusViaTokens()", +"e5f6f252": "getUserNumEntries(address,uint256)", +"e5f6f716": "thirdChainETH()", +"e5f796fd": "CONTRIBUTION_END()", +"e5f79bee": "PRE_SALE()", +"e5f8ce92": "setPercent2(address,uint256)", +"e5f92973": "conclude()", +"e5f952d7": "rewardMathGeniuses(uint256,uint256)", +"e5f982a4": "validateChainlinkCallback(bytes32)", +"e5f9a40f": "TRHToken(address,string,string,uint256,uint256)", +"e5f9ec29": "left51(uint256)", +"e5f9f510": "BetMe(address,uint256)", +"e5fb08c0": "tokenExchangeRateMile2()", +"e5fb9211": "constructLeaf(uint256,address,uint256)", +"e5fb9332": "mintProject(string,string,string,address)", +"e5fd6364": "unregisterPublicKey(uint256)", +"e5fdac45": "presentMissingChunk(bytes)", +"e5fe3d7a": "aprovaPagamento(bool)", +"e5fe4f31": "buy(uint8,bytes32,bytes32)", +"e5fe7870": "vote(string,uint128,uint256)", +"e5ff2e8a": "mintTeamTokens()", +"e5ff7674": "restartPresale()", +"e5ffea8e": "testCalculateNeededCollateral()", +"e5ffeaf6": "fixAddress(address,bytes32)", +"e600c817": "verifyUser(string)", +"e600fd93": "getBonusPercentageByMachineMode(uint8)", +"e6025572": "ShadowBox()", +"e602af06": "confirmChangeOwnership()", +"e604cf9f": "get_all_squares()", +"e6072d5a": "BONUS_MID_QTY()", +"e607a638": "DataController(address,address)", +"e608433b": "weiForRefundPreICO(address)", +"e608ca67": "calculateSubscore(address,int16,int16)", +"e608d3e5": "marketingCap()", +"e609120a": "intercrypto_convert(uint256,string,string)", +"e609348a": "upgradeOwner(address)", +"e60a33aa": "userEndGame(uint32,int256,bytes32,bytes32,uint256,address,bytes)", +"e60a72bc": "ReferalsTokenHolder(address)", +"e60a955d": "setActive(uint256,bool)", +"e60aafab": "setIcoStatus(uint256)", +"e60b0cad": "endPreICOStage1()", +"e60b1424": "bytes32ToUint(bytes32)", +"e60b2c9a": "SALE_2WEEK_BONUS()", +"e60b7ff7": "batchTransferToken(address,address[],uint256)", +"e60c11a0": "subContractBalance(uint256,uint256)", +"e60d3caf": "updatePowerDayRate(uint256)", +"e60dbaae": "Jump()", +"e60f1ff1": "getExit(uint256)", +"e60fb021": "publishOwner()", +"e60fd342": "getCreateSharesFxpValue()", +"e6107cbb": "isBurnApproved()", +"e6108fc9": "increaseLockBalance(address,uint256)", +"e61109fd": "setFiscalVerify(uint256,uint256,uint256,bytes32)", +"e611ad32": "CourseBaseOnIdStudentFunct(uint256)", +"e6120842": "warningERASEcontract()", +"e612a4b6": "get_order(string,uint256)", +"e612c0ad": "team2()", +"e6131706": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"e6131a64": "UpdateBeneficiary(address)", +"e6135ffe": "_removeIndex(uint256)", +"e6136d84": "icoBegintime()", +"e61387e0": "knc()", +"e6138b37": "TESTBRB()", +"e613d3b2": "getParentUser(address)", +"e6153d1b": "mint(string,bytes16,uint256,uint32,address)", +"e615ed91": "AragonTokenSaleTokenMock(address,uint256)", +"e61604cf": "liquidateBorrow(address,address,address,uint256)", +"e616c975": "GetAccountIsFrozenCount()", +"e6175794": "MaPToken()", +"e617f204": "setWhiteListAdmin(address,address)", +"e618f558": "TempTokensSend(address,uint256,uint256,uint256)", +"e6197f41": "setTokenSaleFinished()", +"e61a3c73": "GuDuFengCoin(uint256,string,uint8,string)", +"e61ab6c9": "accountPubPreSale()", +"e61b6557": "reserveOwner()", +"e61b762b": "cancelAllSellOrders(address,uint256,uint256)", +"e61b959e": "dev_outStream()", +"e61c51ca": "topUpGas(uint256)", +"e61c6320": "_recoverAddressFromSignature(bytes,bytes32)", +"e61ca819": "indexToAddress(uint256)", +"e61d5d50": "raisedOBR()", +"e61fde91": "BiciDevuelta()", +"e6206711": "SendEthOn()", +"e6207611": "setChests(address)", +"e6213127": "deprecate(bool,address)", +"e621350d": "getDiscountAndSupply()", +"e621b149": "softCapUSD()", +"e621b5df": "redeemEther()", +"e6229c14": "_createBid(address,uint256,address,address,bytes32,uint256,uint256)", +"e622abf8": "LOCK_END(uint256)", +"e6232ba1": "updateEndDate(uint256,uint256)", +"e6234260": "depositCollateralOnBehalfOf(address,bytes32,uint256)", +"e623a1a6": "kcck256straddadd(string,address,address)", +"e623a93b": "votesForAnswer()", +"e623c4ac": "addressInSwap(address,address)", +"e6240deb": "activityCount()", +"e62420d9": "getChild(address,uint256)", +"e62444e1": "submitJRH(uint256,uint256,bytes32,uint256,bytes32[],uint256,bytes32[])", +"e624b02a": "changeHold(address,uint256,uint256)", +"e624d199": "partnerSaleWallets(uint256)", +"e625215c": "withdrawStake(uint256,bytes)", +"e6252c0f": "deleteHpbNodeCache(address)", +"e6256509": "SPNToken()", +"e62580cb": "MYToken(uint256,string,uint8,string)", +"e6259f53": "timeArrayOf(uint256)", +"e6281254": "FundsMoved(uint256)", +"e628dbf9": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256)", +"e6293e23": "burnerAddress()", +"e629837c": "updateAndSafeTransferFrom(address,uint256,string)", +"e62a4ac9": "setBUI(bytes32,uint256,int256)", +"e62af875": "isContractOwnerLocked()", +"e62b795c": "addCourse(string,string,string,string,uint8,uint8)", +"e62bd899": "mintStart1()", +"e62c04bb": "OwnershipTransferred(address[],address[])", +"e62c2f9c": "get_location()", +"e62c9df9": "participantToEtherSpent(address)", +"e62cc611": "ETHER_HARD_CAP()", +"e62cd55c": "test_oneInvalidFalseEq()", +"e62d64f6": "withdrawableBalance()", +"e62d809d": "subdividendsOwing(address)", +"e62d909f": "TargetCreated(address)", +"e62e3c07": "getTransactionDetails(bytes)", +"e62eea47": "startSettling(bytes32)", +"e631b536": "fields(address,uint256)", +"e631e9b3": "solveIO(uint256,bytes32,bytes32,bytes32,bytes32)", +"e63227b0": "freezeGlobalTansfers()", +"e6324270": "profilParticipant(uint256)", +"e632c2f3": "totalPurchased()", +"e633cefe": "itemInfo(address,address,uint256,bytes)", +"e63466a3": "_getToken(address)", +"e6346867": "imaxChainToken()", +"e63697c8": "withdraw(uint256,address,uint256)", +"e6369e41": "Timestamp()", +"e636bc3c": "addRoyLuxList(string,string,uint256,uint256)", +"e6378d3a": "joinGame(bytes32,string)", +"e637f824": "GetPlayerDataAt(address)", +"e638d76d": "migrateDomain(bytes32,uint256)", +"e638f372": "getDIVDPayoutPercent()", +"e639481a": "getUpperBoundBlocksTillGameEnd()", +"e63988bd": "getContributorInformation(address)", +"e63a6788": "miningOnePlat()", +"e63b029d": "finishSalvage(address)", +"e63b681e": "redeemExternalToken(bytes32,address)", +"e63b6b87": "DipTokensale()", +"e63bc62d": "processProposal(uint256)", +"e63c83c1": "getTotalWithdrawn(uint64,address)", +"e63d38ed": "disperseEther(address[],uint256[])", +"e63d4957": "totalLimitUSDWEI()", +"e63da5f7": "bootstrap2()", +"e63da84c": "getBattleRandom(uint256,uint256)", +"e63df4a7": "createJobEscrow(bytes16,address,address,uint256,uint256,uint32,uint32)", +"e63edfef": "Learn()", +"e63fb7d2": "getAdText(uint256)", +"e6400bbe": "suspend()", +"e64044c0": "payoutKeys(uint256)", +"e640663a": "removeFromOwnershipAuctionTokenIDs(address,uint256)", +"e640d5a8": "PubAccepted(address)", +"e6416f4e": "sendFoo(address,uint256,bytes)", +"e641bde1": "addInvestor(address)", +"e642b7b6": "isWhitelistOnlyStatus()", +"e642b900": "Bugcoin()", +"e642b9be": "MTP_PER_ETH_PRE_SALE()", +"e643197b": "TRY_Omnidollar()", +"e643d63c": "_setProposal(uint256,string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"e6441201": "set_foo(string)", +"e644d886": "ico3total()", +"e644f60b": "isFresh(string)", +"e6452f64": "TGEDeployer(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"e6456a30": "HARDCAP_ETH_LIMIT()", +"e6458f6e": "getExternalDependencies()", +"e646350d": "getTokensAvailableForSale()", +"e6468b9f": "mCoinPerBlock()", +"e6470fbe": "updateDefaultPayment()", +"e6471555": "remForSalesBeforeStageLast()", +"e64853c4": "polls()", +"e648ce75": "setSelfClaim(bytes32,bytes)", +"e64906a4": "setTokenForPreSale(uint256)", +"e64a4e27": "updateDealConditions(uint256,uint32,uint32,bool,uint256)", +"e64acfa4": "getRealValueToReturn(uint256)", +"e64e3241": "mint(bytes32,bytes,uint256[],bytes,bytes)", +"e64f15a2": "deleteTask(bytes32)", +"e64fd8b0": "transferTokenWallet(address)", +"e650672b": "setGreenToken(address)", +"e6506873": "bookingMetadataForKey(bytes32)", +"e650ca40": "firstWeekBonusInWeek()", +"e6511ce2": "createCodeContract(string)", +"e6512ea2": "fundBounty()", +"e6514de2": "PreSaleLimit()", +"e6519a35": "getCreationTime()", +"e6527376": "OneWorldCryptoCoin()", +"e65284f1": "getRealPriceSpeed()", +"e652ca86": "LowcarbonToken()", +"e652f4cc": "getVoteCount(address)", +"e6530b97": "addArbiter(address,uint256)", +"e653d52d": "approveProxy(address,address,uint256,uint8,bytes32,bytes32,string)", +"e653d5d3": "GlobalStorageMultiId()", +"e653ec6a": "unsubscribeFromPool()", +"e6544b87": "ICORatio()", +"e65500e9": "startincreaseWithdrawalTeam()", +"e6560c94": "_saveBonus(address,uint256)", +"e6562fe1": "approveForwardedAccount(address,address,string)", +"e6569b1e": "getConID()", +"e6571176": "checkCertificate(bytes)", +"e657807b": "endIco()", +"e658d221": "claimPlotMultipleWithData(uint256[],string,string,string,string)", +"e6591f4e": "setNSFW(uint8,bool)", +"e65a0117": "earn(uint256)", +"e65a2e7f": "forceEmpty(bytes32)", +"e65af219": "PlusCoin()", +"e65b00b6": "Confirmation(address,bytes32,bool)", +"e65b1fd0": "getConsecutiveDeaths()", +"e65b490d": "_rewardWinners()", +"e65b743e": "dispatchGains()", +"e65b782f": "getCurrentTranche()", +"e65b96a7": "MyDanaToken()", +"e65b99c6": "uservalue()", +"e65bbceb": "makeAdoptionRequest(bytes5)", +"e65c1244": "holderEthers(address)", +"e65ca2fe": "Crowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"e65d1522": "fromWei(uint256)", +"e65d19ca": "createInactiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", +"e65d6b49": "getCommission()", +"e65d9717": "pushVendor(string,address,bool)", +"e65da9a2": "PROMOTION_ACCOUNT()", +"e65de3ca": "removeTitleTransfer(string)", +"e65dea55": "validate(uint256,uint256,uint256,string,string,string)", +"e65e63ed": "secondsaleclosingTime()", +"e65e73e2": "oneavl()", +"e65e95a8": "token_address(address)", +"e65f0246": "updateCountryHoldersCount(uint256,uint256)", +"e65f1d98": "bigLoop(uint256)", +"e65f2a7e": "enroll()", +"e65f5ea4": "distribute10MT(address[])", +"e6601fb4": "viewFunds(address)", +"e660c7aa": "PresaleAddress()", +"e660dd54": "compWallet()", +"e661a98f": "ecosystemtoken()", +"e661b3d5": "returnStatus(uint256)", +"e662bd25": "doTransfer(address)", +"e662e9af": "getPersonalStakes(address,address)", +"e662ff97": "sellMyTokensStocks()", +"e6634e41": "tokensPerEthAtRegularPrice()", +"e664214a": "releaseUnlocked(address,address,uint256,uint256)", +"e6642528": "BitcoinIndigo()", +"e664725b": "bn128_add(uint256[4])", +"e664755b": "withdrawAttacker()", +"e664d8e8": "showhospital(uint256)", +"e664e1e0": "getAddressTwo(address)", +"e6657008": "TicketsInGame()", +"e665dba0": "addAuthorizedExternal(address,address)", +"e66623ad": "ETbankWord()", +"e6662e2b": "UrbitToken(address,address)", +"e666767b": "getPlayerBetForCurrentPlayRound(address)", +"e6678f33": "updateReferralBonusRate(uint256)", +"e66825c3": "pricePerUnit()", +"e668a547": "SingularityTest8()", +"e668a7af": "buyFrom(address,uint256)", +"e668e1f3": "noContestTime()", +"e668e5ce": "getPlayerBetCount(string,uint256,string)", +"e6690fb1": "nextAuction(uint256)", +"e6691249": "getCompte_5()", +"e66a5e6b": "waveCap1()", +"e66a6b22": "isSigned()", +"e66aa720": "pureBalance(address)", +"e66bf416": "DLK()", +"e66c4175": "LargeCapStartTimeChanged(uint256)", +"e66c66d9": "setMonsterCreatorAddress(address)", +"e66caeb4": "payFortune(uint256)", +"e66d1b84": "countHoldAmount(address)", +"e66d4694": "gymContract()", +"e66d9874": "REQUEST_REJECTED_BY_HOST()", +"e66dda4e": "wallocked()", +"e66dde38": "startRound(bool)", +"e66e00f8": "getAdminDashboard()", +"e66f51fd": "AxieERC721Metadata()", +"e66f53b7": "curator()", +"e66f6e75": "getIsAttack()", +"e66f7bba": "oracleItQuery(uint256,string,string)", +"e670f7cd": "checkHash(string)", +"e6714f63": "eth_min()", +"e6717d3f": "setPresidenteDeMesa(bytes32,uint256,bytes32)", +"e671ac23": "getMonthClaimed(address)", +"e671f510": "onEtherandomExec(bytes32,bytes32,uint256)", +"e6722531": "checkBoosterQuest(address)", +"e672eb49": "GetBetInformation(uint256)", +"e673f646": "setContributor(address,address,bool,uint8,uint8,address)", +"e6744035": "booleanToUInt()", +"e6748da9": "setBytes(bytes32)", +"e674a0bd": "unlock(address,address)", +"e67524a3": "mintTokens(address,uint256,string)", +"e6758649": "revokeStakeholderConfirmation(uint256)", +"e676d53f": "GRAD()", +"e6774e1e": "setCapTab(uint256,uint256)", +"e6779bba": "_calculateTokensAmount(uint256)", +"e677d67d": "decode(bytes,uint256)", +"e679366f": "setExchangeTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"e67ad254": "airBegintime()", +"e67bcfb6": "viewPreSaleCancelledList(address)", +"e67c4f96": "_createItem(string,address,uint256)", +"e67cdfb7": "moveOldUser(uint256)", +"e67d35c6": "UmeTravelNet()", +"e67d5b16": "SpeedJump()", +"e67e04f9": "startAcceptingDonation()", +"e67e3d56": "ethTaxRate()", +"e67e8aaf": "cliffPercent()", +"e67eed44": "getTicketOwner(int256,uint256)", +"e67f3cde": "about(address)", +"e67fcd10": "createSale(string,uint256,uint256,uint256,uint256)", +"e6807ca9": "checkBlacklist(address)", +"e68122e2": "createConsent(address,string,string)", +"e681e906": "_disableModule(bool)", +"e681f989": "saveMetaData(address,bytes32,bytes32)", +"e68215ec": "getOrganizerInforById(uint256)", +"e6821bf5": "videos(uint256)", +"e6824b0d": "REAPER_INTREPID()", +"e682c9ea": "rescindVote(bytes32)", +"e682e290": "getWhitelistStatus(address,address)", +"e682e2b2": "PingToken()", +"e6838ffa": "CbDataStandardToken(uint256,string,uint8,string)", +"e684aa5c": "amountAlreadyPaidBack()", +"e684d75d": "from_Initialisation_to_Lifecycle()", +"e685f2fe": "SilcCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e686b89a": "stage_2_price()", +"e6885aad": "Notary()", +"e688aab4": "changeOperative(address)", +"e688d097": "activekey(address)", +"e688f89d": "getMax(uint256)", +"e6890105": "addRefundTransaction(uint256,uint88)", +"e6891995": "KStarCoin()", +"e6891a55": "underwritePriceOf(uint256)", +"e6898a7d": "getSex(uint256[2])", +"e689928e": "seventyeight()", +"e689aa66": "isAllocated9()", +"e68a471d": "getLatestTokenPayday(address,address,address)", +"e68a555d": "UpdateUserPELOAmount(address,uint256)", +"e68a655c": "setEtherDeltaFees()", +"e68a7c3b": "getAccounts(uint256,uint256)", +"e68a9610": "releaseTokensTo(address,address)", +"e68c32b3": "cgadmin(address)", +"e68d3ae3": "escrow(uint256,string,address,uint256)", +"e68d7535": "cancelWhiteList(address[])", +"e68e64cb": "getCurrentUserReward(bool,bool)", +"e68f05fe": "SetCrowdsaleAddress()", +"e68f08a0": "MatchGetted(uint256,bool,uint256,uint256,uint256)", +"e68fb207": "makeOrder(address,address,uint256,uint256)", +"e690833a": "getPropertyRatingTuple()", +"e690d9bf": "Rollercoaster()", +"e6917e67": "tierOnePurchase()", +"e691bed4": "get_arbits(address,address)", +"e693e4d1": "neironixProfitAddress()", +"e69405fd": "_endDutchAuction(uint256,uint256)", +"e69432c8": "getMyNormalDragons()", +"e694d107": "getlastDividendPoints()", +"e694f694": "distributeLRNX(address[],uint256)", +"e69506aa": "Tokens_Per_Dollar_Denominator()", +"e6955d7c": "XYCC()", +"e6957514": "mergedMinerValidatorAddress()", +"e695c00c": "assertEq29(bytes29,bytes29,bytes32)", +"e696d10d": "processPurchase(address,address,uint256)", +"e696fb9a": "_6_friends()", +"e696fd64": "change_ico_finish(uint256)", +"e6972dbb": "readEventFromDatabase(uint64)", +"e6979b90": "multiAdd(address[],uint256[])", +"e697b5d8": "referrals(address,uint256)", +"e69852d0": "getUserNameOf(address)", +"e698816f": "getTokenIdOfCR(string)", +"e69932e5": "getFreeSeeds()", +"e6997f6d": "rootUTXOMerkleTreeHash()", +"e699e8c3": "removeDefaultOperator(address)", +"e69a2d9a": "Lent(uint256,address)", +"e69b414b": "issuedTokensAmount()", +"e69b9b65": "exchangeableTokensFromSale()", +"e69d09cf": "releasedForTransfer()", +"e69d27a8": "lifeFactor_v()", +"e69d849d": "donate(address,uint256)", +"e69e04b3": "defaultPrice()", +"e69e4640": "calculateBalance(uint256,uint256,uint256)", +"e69e9337": "PERSONAToken()", +"e69fde41": "KentraToken(uint256,uint256)", +"e69ffce8": "changeRegulator(bool)", +"e6a0525f": "getStudentID(bytes)", +"e6a1e811": "newBet(uint8)", +"e6a27cf2": "getUserEarningsInfo()", +"e6a33268": "secondRate()", +"e6a3afe8": "sendTreasuryTokens()", +"e6a43d63": "crowdsaleSoftCap()", +"e6a45026": "fetchStageIndexBySnapshotBlock(uint256)", +"e6a50d84": "getAddressFromIndex(uint256,uint8)", +"e6a5d78d": "_getMerkleRoot(bytes32,bytes32[])", +"e6a605df": "PreTgeEnable()", +"e6a6d4c8": "getExecutedTransactions()", +"e6a7638c": "eucledianDistance(uint256,uint256,uint256,uint256)", +"e6a8fe04": "evHarvest(address,uint256)", +"e6a9026b": "submitTransaction(address,uint256,string,bytes)", +"e6a9627c": "setAgentAddress(address,address)", +"e6a9b2d8": "createTAO(string,string,string,string,bytes32,address,uint256)", +"e6aa216c": "getExchangeRate()", +"e6aa96a5": "CRS()", +"e6aaae81": "tokensSoftCap()", +"e6aac98f": "currentDayTS()", +"e6ab96ed": "unstakeContent(bytes32)", +"e6abaaba": "tier_cap_2()", +"e6ac17a1": "tokens_total()", +"e6acca00": "_finishBet(address)", +"e6acf0c1": "determineOutcome(bytes32,uint8[],uint8[])", +"e6ad204e": "vestingAccounts(address,uint256)", +"e6ad5bc7": "getFrozenTimestamp(address)", +"e6adde32": "setIsHiddenMessages(bool)", +"e6ae0536": "UpdateBackedAmount(uint256)", +"e6ae1a97": "getTokenAmount(address)", +"e6ae89b4": "getPlayerInfoInRound(uint256)", +"e6ae92b0": "getItem(address,address)", +"e6ae967b": "updateOrder(bool,uint32,uint128,uint128,uint32,int256)", +"e6af2d5d": "TRICToken()", +"e6af35f0": "calculateFee()", +"e6b09e92": "setAd(string,string)", +"e6b1602f": "buyOneRabbit(uint256)", +"e6b18f52": "LongTermProjectTokensAddress()", +"e6b1c48d": "Amal()", +"e6b1e71c": "jackpot(uint256,uint256)", +"e6b35875": "getAllbetByGtype(int8)", +"e6b55ff3": "TokenEmissionEvent(address,uint256,bool)", +"e6b6f9d5": "baseDiscounts(uint256,uint256,string)", +"e6b71e45": "changeIncrease(address[],uint256[])", +"e6b827a6": "becomeSpermlord()", +"e6b950f3": "_computeCooldownRemainingTime(uint256)", +"e6b96447": "updateMaxNum(uint32)", +"e6b96fe3": "setupFund(bytes32,address,uint256,uint256,address,address,address[],address[],uint8,bytes32,bytes32)", +"e6b972f5": "userName(address)", +"e6ba54c1": "specialInfo(uint256)", +"e6bb64b4": "generateChampionTokens(address,uint256,uint256)", +"e6bb88b3": "setMinEscrow(uint256)", +"e6bbe9dd": "getMinThreshold()", +"e6bc2cc9": "Marcela_Birthday(string,string,string,string)", +"e6bc5269": "CrypexToken()", +"e6bc7d2a": "FairDistributionToken()", +"e6bcbc65": "mostSignificantBit(uint256)", +"e6bcc297": "STARTING_BANKER()", +"e6bd0eca": "newUser(address,string,uint256)", +"e6bd11b2": "availableBuyInShares()", +"e6bf3fdc": "removeFarmer(address)", +"e6bf6ca2": "check_deadline()", +"e6bf70e2": "register(bytes20,uint96,uint32,bytes32[],uint16)", +"e6c01488": "addComment(bytes32,bytes32,string)", +"e6c0459a": "right79(uint256)", +"e6c0e6d5": "discountRate()", +"e6c0e9e1": "randomDS_sessionPubKeysHash(uint256)", +"e6c160dc": "RateSetter()", +"e6c1beb4": "prepend(address)", +"e6c1d7fc": "getHedgeIndices(address)", +"e6c21c24": "isCertified(uint256,uint256)", +"e6c22a11": "district0xNetworkToken()", +"e6c25aa1": "totalPhase2Donations()", +"e6c28db4": "getPlayerSpaceshipCount(address)", +"e6c2dee8": "Vish()", +"e6c2f4fe": "SendmoneySend(uint256)", +"e6c3329d": "EthaToken()", +"e6c35a91": "batchAirDrop(address[],uint256[])", +"e6c3b4ab": "testBalanceAuth()", +"e6c4498b": "LOCKING_UNLOCK_TIME()", +"e6c4a46a": "_addRecord(bytes32,address,string,string)", +"e6c4c2c7": "admin_tokenAdd(uint256)", +"e6c50020": "callAllFromMew(uint256,address)", +"e6c52016": "setToken(address,uint256,address)", +"e6c54139": "BitmassXToken()", +"e6c57a08": "timeIncreasePerTx()", +"e6c5e94c": "setinterval(uint256,uint256)", +"e6c63912": "lastBlock_a17Hash_uint256()", +"e6c721e4": "senderDelegates(address,address)", +"e6c75c6b": "triggerEvent(string)", +"e6c7c456": "balanceOfContract()", +"e6c88b31": "auditor(uint256,bytes32)", +"e6c89d4a": "makeOfferForCityForSomeone(uint16,uint256,address)", +"e6c8fcf1": "getExpirationRequest(uint256)", +"e6c9f6ee": "shelf(string,address)", +"e6ca00b5": "_abortAllRounds()", +"e6ca0f47": "setStages()", +"e6cb9013": "safeAdd(uint256,uint256)", +"e6cbcba9": "PlusOnePonzi()", +"e6cbd74c": "TokenSold(uint256,uint256,uint256,uint256)", +"e6cbe351": "saleAuction()", +"e6cda5ff": "countDays()", +"e6ce1622": "ProcessMarkings(bytes32,uint256,uint256,uint256)", +"e6d02bf0": "unsubscribeCaller(address,address)", +"e6d04d5e": "whitelistedParticipants(uint256)", +"e6d09529": "getTTTCount()", +"e6d0a37d": "RemovePoolMember(address,string)", +"e6d0dfda": "setDiscountTime(uint256)", +"e6d1092d": "vestedTeam(uint256)", +"e6d17238": "specialWallet()", +"e6d17cfc": "_updateToken(uint256,uint256)", +"e6d18a7a": "nihilumBalanceOf(address)", +"e6d20a23": "king_of_returning_shirts()", +"e6d26bc6": "setTeamContractAddress(address,address)", +"e6d2ceab": "set_pool_percentage(uint8)", +"e6d30bf2": "finishMinting(bool,bool)", +"e6d343a5": "getTransContractLocked()", +"e6d3b85b": "getOwnershipForCloning(uint256)", +"e6d3f673": "distributeGeneratedPower(uint256)", +"e6d41b39": "isApprovedTransferer(address,uint64)", +"e6d44122": "limitPreSale()", +"e6d4d217": "addAddressToWhitelist(address,string)", +"e6d54815": "delSpecialPrice(address)", +"e6d55f3a": "buy10ktickets()", +"e6d61f70": "resetInactivityTimer()", +"e6d660dc": "UBT(uint256,string,uint8,string)", +"e6d66ac8": "sendTokens(address,address,uint256)", +"e6d76a76": "withdrawSynthetix(uint256)", +"e6d78add": "tokensPerWei5()", +"e6d7fd33": "TokenERC20(uint256)", +"e6d8a47a": "MIN_INVEST_BUY()", +"e6d8d435": "AMBASSADOR_ONE()", +"e6d944a7": "computeCurrentPrice(uint16)", +"e6d95eb8": "DSAuthorized()", +"e6d970aa": "registry(address,address,bytes32)", +"e6d9bb0f": "secondsUntilEnd()", +"e6da89cd": "addVestingForBeneficiary(address,uint256)", +"e6dab965": "startTrack(bytes32,uint256)", +"e6dad824": "withdrawFrom(uint256)", +"e6db38c7": "purchaseFromTime(uint256)", +"e6dba7e8": "EX()", +"e6dbf486": "setCLC(address)", +"e6dc3655": "_validateUrl(string)", +"e6dc85a3": "weiTotal()", +"e6dc992d": "buySquareAtAuction(uint8,uint256,address)", +"e6dd672c": "enterMainSale()", +"e6dd9a8d": "endBookings()", +"e6deb223": "addPlayerMapping(string,string,uint256,uint256)", +"e6deefa9": "deposit(address,uint16)", +"e6dff3b4": "whitelistInvestor(address,bool)", +"e6e05562": "getIslandPreviousOwners(uint256)", +"e6e08ba4": "openPreICOPrivate()", +"e6e13795": "_addEntry(bytes32)", +"e6e261b2": "getFundAllTx(uint256)", +"e6e2c041": "_removeDiscount(uint256)", +"e6e2e1cd": "VestFFTokens(uint256,uint256)", +"e6e35407": "startCoinFlip(bytes32,bytes32,bytes32)", +"e6e45ea2": "MyHumanStandardToken(uint256,string,uint8,string)", +"e6e46238": "idCount()", +"e6e5b492": "AirwayBill()", +"e6e623d5": "setTokenSymbol(address,bytes32)", +"e6e68cb3": "map(uint256,uint8)", +"e6e7237f": "claim_time_victory(uint256)", +"e6e84bf8": "Suren3Token()", +"e6e88593": "_contractStatus()", +"e6e8c692": "computeResponseFirstHalf(uint256,uint16)", +"e6e91cfc": "voidFailedPayment(uint256)", +"e6e93b14": "setbetEnd()", +"e6eb00ce": "drawingNo()", +"e6eb6867": "updateKey(bytes)", +"e6ecc9c1": "getReservedAmount(address)", +"e6ecf8a0": "CONTENT_FUND()", +"e6ed4746": "setBonus(uint8)", +"e6ed51b7": "createToken(uint256,address,address)", +"e6ed6c74": "getRabbit(uint256)", +"e6ee78bd": "approveRemoveOwnerRequest()", +"e6effbe9": "createAuction(address,uint256,uint256,uint256,uint256,address)", +"e6f02bf9": "computeBonuses(uint256)", +"e6f041c1": "testLessThan()", +"e6f0823c": "deleteNota(uint256)", +"e6f091f9": "isAccepted(address)", +"e6f0b6cf": "individualCapInWei()", +"e6f0beeb": "sort(uint8[4])", +"e6f1a189": "isCustomToken()", +"e6f3ae3c": "neighbor(uint256,uint8)", +"e6f46410": "RBC()", +"e6f47613": "multiSubWithdrawFor(address[],address[])", +"e6f4c4a7": "setOtherSettingOwner(address)", +"e6f602ff": "benTook()", +"e6f6266a": "numMinters()", +"e6f67ef2": "payOrganizer()", +"e6f6b789": "setInterfaceImplementation(string,address)", +"e6f6e19f": "emissionStage()", +"e6f7bf89": "GetOwnerAddress()", +"e6f7ec75": "populateTierRates()", +"e6f8263e": "JackpotPeriods()", +"e6f8298c": "cancelActiveLoanAtIndex(uint256)", +"e6f82ca3": "_clearBridgeTokenFee(uint256)", +"e6f859e7": "descriptions(uint256)", +"e6f9476a": "getContribPeriod()", +"e6f9f265": "areNoncesValid(bytes,uint64[],uint64[])", +"e6fafef0": "ContributionMinimumUpdated(uint256)", +"e6fb5c4a": "CHLToken()", +"e6fbf441": "transferFromSenderPaysFee(address,address,uint256)", +"e6fd2982": "initialReserve()", +"e6fd42ee": "currentHalving()", +"e6fd48bc": "startTimestamp()", +"e6fd604c": "cut()", +"e6febc9b": "investorWithdraw(uint256)", +"e6ff0853": "advisorsTokenWallet()", +"e6ffd50d": "OXGOLD()", +"e6fff409": "TetherGBP()", +"e7001b84": "setOwnedCount(address,uint256,uint256,bool)", +"e700d63a": "FeesConverted(uint256,uint256,uint256)", +"e700efc4": "MaxSupply(address,uint256,bool)", +"e701900c": "refundTransaction(bool)", +"e701a6d3": "handlePresaleTokenMany(address[],uint256[])", +"e701d051": "setMarketerRate(uint256)", +"e70265a5": "FRACTION_ETHER()", +"e7031501": "jackpotWinPercent()", +"e703e9c3": "CheckActivate()", +"e704430d": "numberOfTreasuryOfficials()", +"e70468b1": "cancelOpenBids()", +"e7046bf0": "setFx(address)", +"e704f151": "burnContributorTokens(address)", +"e7058e15": "Rollback()", +"e705a519": "SALE_1WEEK_BONUS()", +"e7062263": "checkEndorsementExists(bytes32,bytes32)", +"e706918c": "testToggleBitSuccess()", +"e7073a4c": "MarketplaceV2(address)", +"e7074de2": "FOUNDATION_TOKENS()", +"e7077a3a": "CCToken()", +"e7084b7e": "closeTimeout()", +"e7092b41": "getAllowance(address,address,address)", +"e7095e97": "mintTo(address,string,uint256,uint256)", +"e70990d7": "summon10()", +"e7099763": "client_wallet()", +"e709cd09": "ONDEONE()", +"e70addec": "right87(uint256)", +"e70b11df": "revokeAllocation(address)", +"e70b5259": "mapHeight()", +"e70b793a": "blankbreedingdata(uint256,bool)", +"e70c052a": "ethFundDepositAddress()", +"e70c3276": "HyipProfitTokenTeamAddress()", +"e70cd5ec": "destroyItemsStorage()", +"e70e690a": "set_gas_price_max(uint256)", +"e70e6ece": "BOURSETOKEN()", +"e70eb392": "claimReward(uint256,address)", +"e70f5d95": "setIV_R3(uint256)", +"e70fe5e3": "GenesisToken(address,uint256)", +"e7105795": "_raceOpened(uint256)", +"e710efc6": "regSpot(uint16,bytes32)", +"e711da27": "writeToStorage()", +"e71264fa": "addNewTokens(uint256)", +"e7127e29": "addressToTrainer(address)", +"e712b694": "comp_count()", +"e712bbad": "enterArena(uint256[4],address)", +"e71346f4": "removeAnimalIdFromCountry(uint256,uint256)", +"e7137dbf": "withdrawETH(address,address,uint256)", +"e713cda8": "returnUint32(uint32)", +"e714a028": "cancelWithdrawalRequest()", +"e7151828": "deathData_v1()", +"e7152a5c": "transferStar(address,uint256)", +"e715920f": "doBuy(address)", +"e717db5c": "CheetahCoin()", +"e717dc3d": "tax_fund()", +"e717ea61": "getCurrentAddress()", +"e718234d": "tokenLock()", +"e71897cd": "alfatokenteam()", +"e718ad01": "ReclaimPeriodChanged(uint256,uint256)", +"e718f7aa": "_Setting_Default_GameBoard(uint256)", +"e7199f82": "transferCentralBanking(address)", +"e71a02e1": "DELAY_PERIOD()", +"e71a402e": "mul_float_power(uint256,uint8,uint8,uint8)", +"e71a5577": "getNumPullRequests()", +"e71a7811": "completeOwnershipTransfer()", +"e71b49ad": "ADDR_TKG_ORG()", +"e71b7913": "expireTransfer(address)", +"e71b8b93": "bye()", +"e71bbf48": "TokenSyndicateFactory()", +"e71bdf41": "addDelegate(address)", +"e71c3b38": "LogSetRBInformationStoreAddress(address)", +"e71c9697": "placeBet(uint256,uint256,uint256)", +"e71d3ae2": "CYFR()", +"e71d77a7": "PRICE_CHANGE_TIME_STEP()", +"e71d7bf0": "testControlTransferNotEnabled()", +"e71df6d6": "acceptMembership(address,uint8,uint256)", +"e71e592b": "replaceDelegates(address[],address[])", +"e71ecf6e": "revenueShareCurrency(address)", +"e71efd18": "Mytoken(uint32,string,uint8,string,address)", +"e7201d7d": "masterOwner()", +"e720b4a7": "DEEM()", +"e720e1b3": "marmoOf(address)", +"e7211134": "createDAO(uint256,string,bytes32)", +"e7212728": "getFreeChicken()", +"e7225175": "timeoutSEC()", +"e722a522": "createContractPeriodicTable(string)", +"e7233ce7": "getAdIds()", +"e7239ed2": "getTimebasedBonusRate()", +"e723a8f9": "setFundraising(address)", +"e724529c": "freezeAccount(address,bool)", +"e7255ef9": "desiredOutcome()", +"e7271c34": "removeArts(address)", +"e7278231": "DesToken()", +"e727de55": "setEggPrice(uint128)", +"e7299675": "DroplexToken()", +"e729b416": "lockIndexes(uint256)", +"e729ebe8": "getSignatureParts(bytes)", +"e72b0e23": "CreateTUBE(address,uint256)", +"e72b6091": "extendSaleTime()", +"e72c40dc": "CoreTeamMinted(address,address,uint256,uint256)", +"e72c81cf": "demo1(address,uint256,bytes,string)", +"e72cba6e": "ICO_PHASE1_AMOUNT()", +"e72e46fd": "ImmlaIco(address,address,uint256,uint256,uint256)", +"e72eb439": "DogTestToken()", +"e72f4f2a": "s38(bytes1)", +"e72f5f63": "maxRandom()", +"e72f7a78": "finishCurrentGame()", +"e72f99ac": "deathData_a18()", +"e72fd4e1": "developerCut()", +"e72fee5d": "massTeamMsgHash()", +"e7302541": "convertOldToken(address)", +"e730e87a": "stageOneSupply()", +"e73140c1": "setPublicOfferingDate(uint256,uint256,uint256)", +"e7316a95": "_set10()", +"e731b034": "HawalaKickoffTime()", +"e731bb09": "cpn(uint256)", +"e7320f9e": "getGameMaxNumberOfBets(uint256)", +"e7326806": "transferOracle(address)", +"e7328000": "userTokenBalances(address)", +"e7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", +"e732a7e1": "preAllocationsPending()", +"e7334156": "processNextDeposit(address)", +"e73471fa": "_mintNativeCoinsByErcToNativeBridge()", +"e735b48a": "updateDescription(string)", +"e735f667": "destroyChildren(uint256)", +"e7368a1f": "isOnSale(uint16,uint64)", +"e736f03c": "actived()", +"e7377ccb": "vestingMembers(address)", +"e7383c91": "ICOStarted(uint256,string)", +"e73886b0": "addLocked(address,uint256)", +"e738a7a5": "createDungeon(uint256,uint256,uint256,uint256,address)", +"e738cb69": "EventLogged(string,uint8,uint256,address)", +"e738d2b3": "claimingFee()", +"e7398fa3": "setTokenRate(address,uint256)", +"e73995cd": "setSale(uint256,uint256,uint256,address)", +"e739a4fe": "initialSeed()", +"e73a914c": "setDAO(address)", +"e73b7d77": "testControlCreateNewRevisionNotUpdatable()", +"e73b9e2f": "bridgeAmount(address)", +"e73c032b": "PRESALE_TOKENCAP()", +"e73c3c53": "pingOracle(uint256)", +"e73c6353": "Payroll(address,uint256,uint256)", +"e73c99a0": "METADOLLAR()", +"e73cba34": "getTicketRound(uint256)", +"e73cc2eb": "walletPeriodOf(address)", +"e73cf000": "EMIToken()", +"e73de430": "releaseAccount(uint8,address)", +"e73e5063": "setRewardManagerLimit(uint256)", +"e73fc0c3": "getTokenByName(string)", +"e740ce26": "DSToken()", +"e740f4fc": "card_start_first()", +"e7416f01": "lastBlock_a18Hash_uint256()", +"e7422d29": "sendBalance()", +"e742b943": "ispackagesaleSetup()", +"e742db66": "tokenTaxRate()", +"e742f18a": "Task(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"e743892b": "escrowExpiration(bytes32)", +"e744052b": "FalconFarmer()", +"e745656b": "removeImmigration(address)", +"e7463688": "MasharibTestCoin()", +"e7477f1c": "WithdrawDeposit(uint256)", +"e74799b4": "TOKEN_MIN()", +"e747f31c": "debit(uint256,uint256)", +"e74803db": "putSaleRequest(uint256,uint256)", +"e74915d0": "distribute(address,uint256,address)", +"e74997a8": "transferInternal(string,address,string,address,string,uint256,uint256)", +"e74a19fa": "AirdropTokensHolder(address,address,address)", +"e74a48be": "reservedTokens(address,uint256)", +"e74a5847": "getGladiatorCooldown(address)", +"e74a84ea": "issueToken(address,uint256)", +"e74ab046": "increasePrice_20_January()", +"e74ac94a": "RetailLoyaltySystemToken()", +"e74b981b": "setFeeRecipient(address)", +"e74b9d11": "safeToSubtract(uint256,uint256)", +"e74ba7b3": "getMntTokensPerEth(uint256)", +"e74baeef": "Upgrade(address,bytes)", +"e74cd692": "testNextRune()", +"e74ceb77": "EGGS_TO_HATCH_1CHICKEN()", +"e74d6d1b": "getLeader(address)", +"e74e66d7": "toB32(uint256)", +"e74e6e9e": "GBMToken()", +"e74f3fbb": "claimVestedTokens()", +"e74f8eff": "firstDayTokenLimit()", +"e74ffbd5": "getPart(bytes32,uint256)", +"e750b5c0": "getProjectAddress(string)", +"e7514287": "IsGenesisAddress(address,address)", +"e7519ac0": "_setTokenName(address,uint256,string)", +"e751f271": "execute(bytes32)", +"e75235b8": "getThreshold()", +"e7528e1f": "createSubmission(string,bytes32)", +"e75303a5": "recentWinners()", +"e7530cfc": "_batch3_icosaleStartTimestamp()", +"e7542782": "Recovery(address)", +"e754a4e5": "presale2_startdate()", +"e75528cc": "buyBuilding(uint256,uint256)", +"e75539e7": "Schrodinger()", +"e7556704": "GPSToken()", +"e755aaaf": "takePoint(uint32,int256,bool)", +"e755e077": "MKToken()", +"e755e60f": "settleBetTest(uint256,bytes32)", +"e75623d8": "setDeploymentAdminsContract(address)", +"e75705c7": "submitFakeHeader()", +"e7572230": "getPrice(uint256)", +"e7574128": "abcToken()", +"e757835e": "Yotra()", +"e7579c24": "totalBuyerSupply()", +"e757c17d": "preSalePrice()", +"e75864e4": "StarsICO(uint256,uint256,uint256,address,address,address,address,uint256)", +"e758d445": "getCurrentTierInfo(address,bytes32)", +"e759dfb8": "investorsBatchSize()", +"e75a0747": "Staker()", +"e75afb65": "endCrowdfund(address)", +"e75b4642": "_decreaseAllowance(address,uint256)", +"e75b8b23": "getRecordById(uint256)", +"e75bd44a": "currentPrize(address)", +"e75bf79b": "ESEVENTYSEVEN()", +"e75bf820": "extraTokensHolder()", +"e75cdd7b": "isAddressInServer(uint256,address)", +"e75d1721": "vevcoin()", +"e75dcb19": "partnerSaleTokenPrice()", +"e75e69d6": "TryCoin()", +"e75ea9da": "preICOEndDate()", +"e75ef9b2": "trackSpend(uint256)", +"e75f02e3": "UraniumPlus()", +"e75f1634": "pearlSend(address)", +"e75f6e21": "totalMfr()", +"e7609c16": "getFarmer(address)", +"e760a11a": "attachContracts(address,address,address,address,address)", +"e760d284": "BOOKIES(uint256)", +"e760da9d": "createCP(address,string,string)", +"e760fb06": "groveAddress()", +"e7619fad": "allTokenIds()", +"e761eec6": "RecordTransfer(address,address,uint256)", +"e76240a4": "calcZWCAmountByToken(address,address,uint256)", +"e76261fb": "GetContractStateCancelledByLandlord()", +"e7637b5b": "deleteInfo(uint256,bytes32)", +"e7638445": "getRaffleTimeLeft()", +"e7651d7a": "normalProcess()", +"e7657e15": "ids()", +"e765bc5a": "thirdStageEnd()", +"e765c69a": "betOnDozen(uint256)", +"e765cb44": "auctionMinPrice()", +"e7663079": "owner_()", +"e766d79e": "CrowdsaleEndChanged(uint256,uint256)", +"e767b578": "createPlayerAndAssign(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,address)", +"e76895bf": "OwnerAdded(address,bytes32)", +"e7694493": "is_white_listed(address,uint256,bytes)", +"e7696a29": "updateWeedTotal(uint256,bool,uint16)", +"e769dfbd": "buyTransferFee()", +"e769f61f": "private_withdrawAll(address)", +"e76abcb9": "presaleBonusTier2()", +"e76b8126": "finish(address,address,address,address)", +"e76cc0d3": "failWithoutReason()", +"e76dd3ef": "returnBet(uint64)", +"e76e337d": "Honolulu()", +"e76e5ecf": "__DEBUG_BAL()", +"e76e9286": "depositPresale(address,uint256,uint256)", +"e76eabe5": "finishPreIcoAndStartIco()", +"e76ece01": "setInvestStart(uint256)", +"e76ed0e3": "DividendToken()", +"e76f0836": "getcurrNumOfCards()", +"e76f3d5a": "REFERRED_BONUS_PERMILLE()", +"e76f62cd": "Reissue(uint256)", +"e770390d": "deleteMultitoken(uint256)", +"e771066f": "marriageProof(bytes)", +"e7712a94": "MDTCrowdsale(address)", +"e7718594": "totalAccessories()", +"e771e193": "GetCountryCode(uint16)", +"e7722f9b": "isAddressInvited(address)", +"e773c82f": "bonusEnds2()", +"e773ffd5": "queryPlayerUnAwakeSkillIds(uint32[11])", +"e7740cf9": "revealPaper(string)", +"e7751e48": "ownershipAuctionCount(address)", +"e775781b": "getPopularity(bytes32)", +"e775f01f": "CAPToken()", +"e776a5b5": "wallet_address()", +"e776fa22": "AlphaconCrowdsale(bytes32[5])", +"e77772fe": "tokenFactory()", +"e777b97b": "LogRegisteredInterval(uint64,uint64)", +"e777d060": "removeProviderAdmin(address)", +"e7781f3c": "ToppedUp()", +"e77900e9": "projectMemberAddress()", +"e779a8cf": "airLimitCount()", +"e77a6daa": "tokenCalculate(uint256)", +"e77a912f": "prefilled()", +"e77aaee2": "enterRecoveryMode()", +"e77b077f": "canExchange(address)", +"e77b8d94": "ipow(int128,int64)", +"e77ba2c9": "checkIfMegaJackpotWinner()", +"e77c646d": "redeem(uint256,bytes)", +"e77cfa1c": "weiPending()", +"e77db232": "isKYCApproved(address)", +"e77dd5b3": "setSoftCapUSD(uint256)", +"e77df041": "LykkeTokenBase(address,string,uint8,string,string)", +"e77e02d3": "giveAdvisorsTokens(address,uint256)", +"e77ef21f": "drawdown()", +"e77f9906": "gameListOf(address)", +"e77ff2f6": "centralAuthority()", +"e77ff818": "privateSaleEndTime()", +"e780377e": "liquidityPoolAllocation()", +"e7804444": "allowMigrate()", +"e780f6c9": "setDestructionAddress(address)", +"e7810318": "updateInitialBonus(uint256)", +"e781d8c5": "getPC()", +"e7827e85": "unfreezeTokens(uint256)", +"e7829152": "prometh(address)", +"e782b172": "transferWithLockBatch(address[],uint256[],uint256[],uint256[])", +"e783bfb1": "totalAllocatedToTeam()", +"e7843949": "STATE_PAYOUT()", +"e784a923": "thisweek()", +"e7850f2d": "Sunny()", +"e78562c0": "dividendRecentBuyersPercentageDecreaseFactor()", +"e785bab2": "withdrawAdminRevenue()", +"e785daaf": "setUnownedPurchaseableMode(uint256,bool)", +"e786140e": "setBio(bytes3,bytes)", +"e78631fb": "changePhaseToICOweek2()", +"e78686eb": "reclaimContribution(address)", +"e78721af": "getSmartSharingByID(uint256)", +"e7873b58": "tokensBurned()", +"e787418a": "isSubmitted(uint256)", +"e787654c": "_forumIdToAddr(string)", +"e787887b": "initialRewardFraction()", +"e787b523": "CLKToken(address)", +"e788b5eb": "emitAreaSet(uint256,bytes32)", +"e78b8a37": "setPoolSize(uint16,uint32,uint16)", +"e78bfee0": "allocate(address,uint256,uint128,uint256)", +"e78c1136": "CreateLCD(address,uint256)", +"e78c219b": "takeBuy(address,uint256,uint256,address)", +"e78c3462": "betsOff(uint256)", +"e78ce8db": "getCarEarning(uint32)", +"e78ce986": "KOK()", +"e78cea92": "bridge()", +"e78d6306": "getBountyTransfers(uint256)", +"e78dd6f1": "mainSaleTokenLocked()", +"e78e3ab1": "ESOPOpened(address)", +"e78f5412": "_whichCourse(uint256)", +"e78fd9a8": "submitMint(address,uint256)", +"e78ff581": "getProposalPayloadHash(bytes32,uint256)", +"e7906208": "setA_Signature()", +"e790aa9e": "joinMountain(bytes32,address)", +"e791b66c": "Wemark()", +"e79206e6": "finishElections(uint256)", +"e7921023": "getHolderLink(address)", +"e79248ea": "setRelationFrom(uint8,address)", +"e7930d21": "DeliverToken()", +"e7933601": "getOverBalanceWEIInfo()", +"e7933d58": "setIcoPhaseAddress(address)", +"e7938b82": "minAllowedStakeInPercentage()", +"e79487da": "checkInvariant()", +"e7950ede": "logs(bytes)", +"e795c149": "FinalToken(uint256)", +"e79609e2": "getOrCacheDesignatedReportStake()", +"e7964b49": "sendeth(uint256)", +"e796570b": "isClearingPriceValidator(address)", +"e796818e": "AEFTOKEN()", +"e79695da": "WhitelistUpdate(address,bool)", +"e796a6eb": "refund(uint256,address,uint256)", +"e796c43c": "_cancelActiveAuction(uint40,address)", +"e797398f": "IsMultiFreeze(address,address[])", +"e797496b": "sigDestinationApproveAndCall()", +"e7977701": "setLotteryOptions(uint8,uint256,uint16,uint256)", +"e7979efa": "LOG_BetWon(address,uint256,uint256,bytes32)", +"e797ec1b": "enableMinting()", +"e7984a3b": "updateRewardForContributor(address,uint256,string)", +"e7986466": "setSupportedToken(address,bool)", +"e798f4eb": "webpud()", +"e7990596": "getAddressAndBalance(address)", +"e7992845": "pendingInstallments()", +"e7996f07": "removeAttribute(bytes32)", +"e799f374": "fundingMaxInWei()", +"e79a198f": "unregister()", +"e79ab547": "bulkTokenSender(address[],address[],uint256[])", +"e79b4388": "LogBidExpired(uint256)", +"e79d0860": "partnerCount()", +"e79e0a22": "getEthers(uint256)", +"e79e2bd3": "updateArea(uint256)", +"e79e770f": "EmergencySafe()", +"e79faa58": "unpause(string)", +"e79fb53c": "setUSDEtherPrice(uint256)", +"e79ffa11": "_dev()", +"e79ffa99": "getpurchasersLength()", +"e7a01215": "right2(uint256)", +"e7a01352": "adjustHardCap(uint256)", +"e7a02352": "MintDarioToken(address,int256,uint256)", +"e7a0459a": "setCatalogPlayersAddress(address)", +"e7a05f08": "isTokenSaleToken(address)", +"e7a17d83": "emitTaskCreated(uint256,uint256)", +"e7a25bfc": "JustEscrowTestCoin()", +"e7a2e28e": "fishbank()", +"e7a33822": "seal(address,uint256)", +"e7a35405": "managerAddressNumberMap(address)", +"e7a3c218": "testFail_mint_without_add_authority_to_controller()", +"e7a4581a": "getCirculationSupply()", +"e7a49c2b": "trustedTransferTokens(address,uint256)", +"e7a4d9d3": "LIQUID_TOKENS()", +"e7a60a9c": "getValidatorAtIndex(uint256)", +"e7a6e75c": "ETH_USD_rate()", +"e7a7043d": "addPrecommitmentAdjustment(address,uint256)", +"e7a83c74": "AT()", +"e7a8a5cb": "setTier(uint256)", +"e7a95a7f": "WHOLESALE_THRESHOLD()", +"e7aa3afc": "getProjectStatus()", +"e7aa8ed5": "CrowdsaleMCS()", +"e7aab290": "set_s(string)", +"e7ab4f1c": "getShareholderArray()", +"e7ac4df8": "launchInvestment(uint256)", +"e7ac81e5": "productSold(uint64,uint32,string)", +"e7acaa1e": "createJob(bytes32,address,address,uint256)", +"e7acb2b4": "ZitronSupply()", +"e7acdcd0": "deleteInvest(uint32,uint32)", +"e7aef169": "refreshInvestor(address,address,uint256)", +"e7aefd01": "allowTransfersEnabled(bool)", +"e7af4540": "ChiyouCulturalAcchain(uint256,string,uint8,string)", +"e7afae52": "WayCellToken()", +"e7b0f666": "totalPaid()", +"e7b172ed": "GAS_PRICE_LIMIT()", +"e7b1983e": "giveReward(uint256[4],uint32,uint8,bool,uint32[4])", +"e7b1a7ae": "collect_fee(string)", +"e7b1d43c": "withdrawVotingRights(uint256)", +"e7b1d6dd": "setServerStatus(string,uint256)", +"e7b2d7e5": "deprecateAndUpgrade(address)", +"e7b3387c": "getVoteCount()", +"e7b379c6": "TokensUnlocked(address,uint256)", +"e7b43c44": "changePuzzle(uint8,uint8,uint8,uint8,uint8)", +"e7b48d98": "getBurningMans()", +"e7b48f74": "get(int256,address)", +"e7b4e5ab": "entrants(uint256)", +"e7b512ec": "setAddress(bytes32,bytes32,address,bool)", +"e7b5d97d": "getMyReferralDividends()", +"e7b6135d": "getClown(uint256)", +"e7b6805b": "OriginalMyIdRepository()", +"e7b686a7": "UnpackEntity(bytes)", +"e7b69e74": "interest(uint256)", +"e7b6ff08": "beerAndHookersCap()", +"e7b70b38": "getPurchaseInfo(uint256,uint256,uint256,bool,uint256,uint256)", +"e7b7aea5": "changesp2(address)", +"e7b7c2a6": "setup(uint256,uint256,uint256,address,uint256,uint256,string,address,address)", +"e7b808ea": "getAccountFeeModifiers(address)", +"e7b83730": "tokenAmount(uint256,uint256)", +"e7b89977": "setFeeAccount2(address)", +"e7b8d977": "editionsOfType(uint256)", +"e7b94df4": "donationWallet()", +"e7b9aaef": "FIRST_VOLUME_BONUS()", +"e7b9db8d": "confirmBurning(uint256)", +"e7ba1012": "supplyController()", +"e7ba2cc8": "BelottoCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,address)", +"e7ba6c46": "resetReservations(address,bool)", +"e7bb22cd": "getValidClassId(uint64,address)", +"e7bb5233": "crowdsaleState()", +"e7bbda11": "heroCore()", +"e7bd85ca": "PFGC(uint256,string,string,bool)", +"e7be5617": "setOracleReference(address,address)", +"e7bf5352": "_withdraw(uint128,address,uint256,uint128)", +"e7bf7b08": "GroupCreated(uint32,uint256)", +"e7bf7dfc": "getProductPrice(uint256)", +"e7bfcf57": "HighCoin()", +"e7bfdc93": "clearLevels()", +"e7c0bd15": "SeedLog(address,bytes32,uint256)", +"e7c0dad5": "checkApprovalRatio()", +"e7c0e558": "BoomerangLiquidity(uint256,address)", +"e7c12837": "getPOOL_edit_24()", +"e7c158c6": "_setStrengthValue18(uint256)", +"e7c17972": "btcToTokens_(uint256)", +"e7c4118a": "certIssued()", +"e7c5c27f": "saleOpen(address)", +"e7c5d907": "Broker(bool)", +"e7c6229a": "publicOfferingHolder()", +"e7c6978e": "RSCCoinCrowdsale(address,address)", +"e7c77c80": "getAmountDailybyNum(uint32,uint8[4])", +"e7c8d171": "getTotalWidth(uint16,uint16)", +"e7c8dd6d": "GemsToken()", +"e7c8f61e": "enableAura(uint256,uint256)", +"e7c957c0": "MultiTransact(address,bytes32,uint256,address,bytes)", +"e7ca1343": "setReserveForCompany(address)", +"e7ca438d": "getUserDisplay(address)", +"e7cc62bd": "total_users()", +"e7cc862b": "storehouseIndex(uint256)", +"e7cc8ded": "generateLockupTokensDelegationSchemaHash(address,uint256,bytes32)", +"e7cd4a04": "addWhiteList(address)", +"e7ceaeab": "getTrackOwner(bytes32)", +"e7cf0171": "enableTokenClaiming(bool)", +"e7cf514d": "setMinOrderEthAmount(uint256)", +"e7cf548c": "getBurnCount()", +"e7cf6fcb": "changeEtherTxLimit(uint256)", +"e7cf7b34": "ICO_PRICE3()", +"e7cfafce": "getBirthMonth()", +"e7d00518": "FinishTokensale()", +"e7d0242b": "totalWeiCollected()", +"e7d03e93": "setMaxiumInputEther(uint256)", +"e7d0c552": "getRoyaltyPartners()", +"e7d0c7e7": "timeStampOfCrowdSaleStart()", +"e7d11a44": "getFutureTransByIdx(uint256)", +"e7d137ec": "balancesAddressDescription(address)", +"e7d1a024": "NewOne(address,uint256,uint256)", +"e7d2340f": "playervanity(address)", +"e7d29d8b": "withdrawExtraToken(address)", +"e7d29e38": "addHolderAddress(bytes32,address)", +"e7d2c590": "showCompany(uint256)", +"e7d2f315": "totalSupplys(address[])", +"e7d3fe6b": "mint(uint256,uint256,address)", +"e7d4761b": "unhalt_15day()", +"e7d47c2e": "selflleryManagerWallet()", +"e7d48741": "allOldUsers(uint256)", +"e7d4fd91": "getTokenControlInfo(address)", +"e7d50e5c": "FarmShare()", +"e7d53fcb": "privateSale(address)", +"e7d5a62b": "testNot()", +"e7d80c70": "getOrderCreator(bytes32)", +"e7d854af": "setWithdrawABIHash(bytes32)", +"e7d86204": "registerTeamScores(uint256[])", +"e7d87cda": "arbTokenExists(uint256)", +"e7d8c7db": "MicroToken()", +"e7da257f": "highestBidderCC()", +"e7daaa5a": "OwnerManager()", +"e7dac983": "submitClaim(uint256,uint256,uint256,uint256,uint256)", +"e7dafdb6": "transfer_token(address,address,uint256)", +"e7db6770": "startWork(uint256,bytes32,bytes32,address)", +"e7dde9a3": "_setDailyLimit(uint256)", +"e7de559c": "contrDividends(uint256[])", +"e7de72a4": "createFlag(uint16,uint256)", +"e7dee968": "KittyCore()", +"e7df2f3e": "disburseAddr()", +"e7e00d1d": "assignTestAddresses(bool)", +"e7e024ce": "janwin(uint256,uint256)", +"e7e0ca7b": "tariffIndexForAmount(uint256)", +"e7e10490": "cancelSale()", +"e7e1e69f": "commitBid(bytes32,string)", +"e7e2aa0e": "buyer_cancel()", +"e7e31d52": "setNinjaKindCount(uint8)", +"e7e31e7a": "addSpender(address)", +"e7e3411d": "fechBalanceByAddress(address[])", +"e7e3e167": "rate(address,int256)", +"e7e481c5": "BP_SPARTAN()", +"e7e52369": "firstMembershipPurchase()", +"e7e6aed1": "test_testableStandardCampaignContribution()", +"e7e766ca": "CSCRarePreSaleManager()", +"e7e7e3e8": "ETHEREMON_PROCESSOR()", +"e7e8116e": "forceTransferTokenOwnership()", +"e7e96a43": "getPOOL_edit_2()", +"e7e9e106": "rewardVote(address,address,uint256)", +"e7e9f385": "notarise(bytes32)", +"e7ea3d2d": "usernames(bytes16)", +"e7ea4406": "Civiq()", +"e7ea8065": "setNameRefer(string,address)", +"e7ea8122": "isStateInitializing()", +"e7eaaa05": "totalAvailableForSale()", +"e7eb285f": "stepEtherValue()", +"e7ebc348": "nonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"e7ec6aef": "getSigners(bytes32)", +"e7ec8182": "issueTeamTokens()", +"e7edab45": "_cancelParticipation()", +"e7ee6ad6": "rate(uint256)", +"e7ee85a5": "quickBuyPath(uint256)", +"e7eed1f7": "getCurrentPot()", +"e7efcfc2": "totalPayoutAmount()", +"e7f034c1": "getUri(address,uint256)", +"e7f0a865": "transfertokenContract(address)", +"e7f1111e": "initializeHolding(address)", +"e7f18249": "insertShareholder(address)", +"e7f1c468": "UserSold(address,uint256,uint256,uint256,uint256)", +"e7f23cb1": "getCallStack(uint256)", +"e7f35484": "NewAquarium(address)", +"e7f4037a": "demintTokens(address,uint8)", +"e7f40d35": "IntervalBytecodes()", +"e7f44523": "ReceivedLTC(address,uint256,string)", +"e7f4767c": "delimiter()", +"e7f56111": "ClaimPayout(uint8[],bytes32[],bytes32[],bytes)", +"e7f578e1": "createDoc(string,string,string)", +"e7f6edbd": "holdingTax()", +"e7f9e408": "stopTransfer()", +"e7fa443e": "unlockCashpledge(bytes32)", +"e7fa6883": "investFor24Months(address,uint256,uint256)", +"e7fa7969": "assertEq25(bytes25,bytes25)", +"e7fac728": "friendsFingersRatePerMille()", +"e7faecec": "testFailInsufficientFundsTransfers()", +"e7fb5388": "exit(string)", +"e7fb74c7": "buyItem(uint256)", +"e7fbee28": "checkIfCustodiesServedBBD(address[])", +"e7fc4b64": "ricardianVoucher(uint256,string,uint8,string,string,string,uint8,uint8)", +"e7fcde9b": "setFeeType(uint256,uint256,uint256)", +"e7fcf520": "signToResetTokenControlInfo()", +"e7fd9a13": "addEmployee(address,uint256)", +"e7fdc514": "buyFromVault(uint256,uint256,uint256)", +"e7fde97a": "_withdrawDividends(address)", +"e7ff0e38": "bountyDistributed()", +"e7ff8901": "transferWine(address,bytes32)", +"e8001e93": "sellerApprove(address,uint256,bytes32)", +"e80080d0": "cancelBurnRequest(uint256,string)", +"e80160ab": "order(bytes32)", +"e8017bb7": "getHTLCSpendingHash(int256,bytes32)", +"e801a361": "tileTimeoutTimestamp(uint256,address)", +"e8022dc9": "PLAgreements(address,address)", +"e8024468": "getHeroRequiredGoldForLevelUp(uint256)", +"e8024d75": "eNomCoin()", +"e8025d77": "changeStatus(uint256)", +"e8038e25": "TokenSale(uint256,uint256,address)", +"e803b708": "setDetails(string,uint256)", +"e803bcc6": "SetPriceIncrease(uint16)", +"e8046759": "decimals_multiplier()", +"e8055e9c": "burnExcess(uint256)", +"e8069e84": "verify(bytes32,bytes,address,address)", +"e806c603": "robottradingToken()", +"e8071f30": "exponential_decay(uint256,uint256)", +"e8078d94": "addLiquidity()", +"e8083863": "finalizeAuction(uint256)", +"e8088ca2": "GetEvaluate(bytes32,uint8)", +"e808aef7": "isIcoSuccess()", +"e808d671": "crowdsaleTokenMint()", +"e809046f": "NumeraireBackend(address[],uint256,uint256)", +"e80919d5": "mintUnderCap(uint256,uint256)", +"e80a4df7": "NotusNetwork()", +"e80b128f": "tournamentsAddr()", +"e80b7ab6": "clearArray()", +"e80bd3e5": "addCertificationDocumentToSelf(bytes32)", +"e80c4182": "ShresterToken()", +"e80d2ef8": "calculatesubscribersell(uint256)", +"e80d47dd": "USDSTEMPRICE()", +"e80d60b8": "CryptohomaToken()", +"e80db5db": "coreContract()", +"e80f23aa": "tokenApprovalWithSignature(address,address,address,uint256,uint256,uint256,bytes32,bytes)", +"e80f72c0": "getTransactionFromProposal(uint256,uint256)", +"e80fd970": "etherToSendDev()", +"e810267a": "dateEcoRelease6()", +"e8107ed4": "ElectriumToken(uint256,string,uint8,string)", +"e81140a8": "setPreICOStartTime(uint256)", +"e811f50a": "collectedFee()", +"e8125eb9": "updateContractTokenBalance()", +"e814018d": "getCrowdsaleHardCap()", +"e8141f93": "logUint(int256,uint256)", +"e8144c42": "advisorsTokensLock()", +"e8147a25": "changeMinBet(uint256)", +"e814c941": "removeParticipant(address[])", +"e815b60d": "SencToken()", +"e8168177": "lastBlock_a2()", +"e816a515": "takeFlight()", +"e816f76f": "Association(address,uint256,uint256)", +"e8171f37": "valueOfScheme(uint256)", +"e81766e8": "AgriChainDataContract()", +"e8179abf": "getStar(uint256,string,string)", +"e819172a": "TestCoin2()", +"e8197a4b": "totalSuppliedAfterLock()", +"e81a6c58": "issueRefundIfNecessary(uint256)", +"e81b34af": "_deployContract()", +"e81b3c88": "CardCount()", +"e81b53d0": "computeCost(address,bytes32,bool)", +"e81ba080": "updateMaxCap(uint256)", +"e81c17a1": "setOwnerAt(uint16,uint16,uint8,address)", +"e81c2fec": "reDistribution()", +"e81ca129": "consumeTicket(address,uint256)", +"e81cf24c": "replace(uint256,uint256)", +"e81d53cf": "arr()", +"e81d6c6f": "reserveY2()", +"e81dd181": "callSoftCap()", +"e81e0a09": "Win(address,uint8,uint256)", +"e81e1ccc": "withdrawDonation()", +"e81e935a": "summPrivateSale()", +"e81ecb4c": "received(uint64)", +"e81f0154": "pipeIndex()", +"e81f02b6": "withdrawFrom(address,address)", +"e81f35fd": "setLastTokenId(uint256)", +"e81fdd77": "restCandy()", +"e8203e38": "emitWithdrawn(address,uint256,address)", +"e820a32f": "vetoPayout(uint256,uint256)", +"e820ce4a": "setCTime(uint256)", +"e8211eeb": "setUpDistribution(address[],uint256[],uint256)", +"e8223468": "sha3clone(bytes)", +"e8227611": "setRealisation_effective(uint256)", +"e8238688": "setTokenVestingFactory(address)", +"e823b9bf": "toInt256Safe(uint256)", +"e823da03": "VKBToken()", +"e823fa20": "checkDragonStatus(uint256,uint8)", +"e8244d48": "changeHouseEdge(uint256)", +"e824b9c7": "moftakToken()", +"e827653c": "referalCount(address)", +"e827b3e2": "latestPost(address)", +"e827f7f3": "request(bytes32,string,uint256)", +"e827ff89": "HDToken99(uint256,address)", +"e82898b3": "loser()", +"e828a293": "TestyToken()", +"e82906b3": "ISCoin(address)", +"e82935da": "like(uint256)", +"e8294aad": "bonus1Ends()", +"e8297da2": "defaultLockInDuration()", +"e829945a": "buyProperty(uint16,uint256)", +"e829a171": "MIN_GET_AMOUNT_FINNEY()", +"e829d86d": "releaseAgents(address)", +"e82a7d8d": "submitAnswer(address,uint256)", +"e82aa31f": "createTeam(uint256[])", +"e82b7cb2": "proxySetCosignerAddress(address,bytes32)", +"e82bef29": "fundAddress()", +"e82c6e7b": "totalTokenSales()", +"e82c6e8a": "mintFirstTokens(address,uint256,uint256[])", +"e82cc47f": "getFundInfo(bytes32,string,address,address)", +"e82d777c": "FHCContract()", +"e82db7a0": "Batman(uint256,string,string)", +"e82ed40c": "communityContributionWithdraw(uint256)", +"e82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", +"e83007b2": "RunLottery()", +"e83029bb": "checkbalance(address)", +"e8303659": "ETHER_CAP()", +"e8307d00": "setMinPurchase(uint256)", +"e8315742": "maxTokens()", +"e831884e": "getPhaseAtTime(uint256)", +"e832b482": "channelConfiguration(uint64)", +"e832fda3": "select_at(uint256)", +"e833bb53": "FLKDForGas()", +"e833cc12": "getNamespace(uint256)", +"e83400f6": "getBudgetOfCampaign(bytes32)", +"e83447d0": "breakLink()", +"e834a834": "claimed()", +"e834e89c": "FlexCoin()", +"e8350fae": "proclaimInactive(uint8)", +"e8358025": "isCrowdSaleFinalized()", +"e835852b": "LogQueryFeeSet(uint256,uint256)", +"e835dd27": "STAKE_MIN_AGE()", +"e837ab59": "getParticipantByAddress(address)", +"e8380983": "BChain(uint256,string,uint8,string)", +"e83851f8": "EtherAsteroid()", +"e8387af8": "_mint(int256,address,uint256)", +"e839554e": "getBasicCentsPricePer30Days()", +"e839e65e": "query2(string,string,string)", +"e83b2adf": "PTestYankeeCoin(uint256,string,string)", +"e83ba1fe": "stageFundGoalReached(uint8)", +"e83c0bba": "setEmployeeTokenAllocation(address,address,address[],uint256[])", +"e83c272c": "setTime2(address,uint256)", +"e83c460d": "TimeWeekOne()", +"e83c78d4": "toggleContractStopped()", +"e83ce1f9": "addAddressAlias(address,address)", +"e83cf468": "sendBattleTokens(address,uint256)", +"e83d1c5e": "LatestRechargeTime()", +"e83d589b": "getLLV_edit_24()", +"e83ded8e": "balanceOfLockTime(address)", +"e83dfe5a": "ConcludeChallenge(uint256,string)", +"e83e0359": "dividendsRightsFixUpdate_(address,uint256)", +"e83e34b1": "maxFees()", +"e83e92ac": "setSalesFee(uint256)", +"e83f682a": "beginContinuousSale()", +"e8400be5": "startBetting(uint32,uint32)", +"e840c116": "SocialNote()", +"e8421b94": "PlayToken()", +"e84221ef": "playBigOrSmall(uint256,uint256)", +"e8425467": "USDDecimals()", +"e8429510": "TokenForInvestor(uint256,uint256,uint256)", +"e8436936": "StatsMinted()", +"e8436ca5": "setMainCampaignStatus(bool)", +"e8443708": "PaygineHasDeployed(uint256)", +"e844ca34": "withdrawTokensToAdvisors()", +"e844cb18": "batatacoin()", +"e844d097": "addCandidate(uint256)", +"e845105c": "countriesLockEndingAt()", +"e846e7c0": "drawPeriod()", +"e846f1f4": "collectPercent(uint256)", +"e846f997": "contributionWallet()", +"e8474230": "getHybridizationFullPrice(uint256)", +"e8477bda": "setBuyMaxLimit(uint256)", +"e847ca9c": "BAXI()", +"e84818bc": "largeContribPercentage()", +"e8489626": "setProxy(address,address,bytes32)", +"e848aba2": "addWhiteListUsers(address[],uint256[],uint256[])", +"e849ec8c": "ChangeTokenContractOwner(address)", +"e84a481b": "adddotchtooffer(uint256,uint256)", +"e84b53bd": "addItemTo(address,uint256,uint256,uint256,uint256)", +"e84b69e4": "editTimer(uint8,uint256)", +"e84c9d5c": "removeWhitelister(address,address)", +"e84d2abf": "inMainSalePeriod()", +"e84d90c0": "checkDisabledStatus()", +"e84d92e8": "_getBridgeNativeFee(uint256)", +"e84f7054": "refundMyIcoInvestment()", +"e84f82f0": "emitBegin()", +"e85034a2": "walletTrade(address,uint256,address,address,uint256,uint256,bool,bytes32)", +"e85061ca": "playerAction(uint256,uint8)", +"e850899a": "StartPreSale()", +"e850a8ef": "payTo(address[])", +"e850e4c4": "GetContractStateEarlyTerminatedByLandlord()", +"e850efaf": "setRegionTax(uint16,uint8)", +"e850f3ae": "getGenerationIdForCall(bytes32)", +"e851808e": "CHARITYSEACOIN()", +"e8518341": "transferOwnershipWithHowMany(address[],uint256)", +"e8518be0": "requestReplaceOwner(address,address,string)", +"e8518dc6": "rateWithBonus()", +"e85230e9": "minETHin()", +"e85353e1": "admin_set_withdraw(address,bool)", +"e85365d5": "firstblock()", +"e8539244": "SetPayrollLocked(bool)", +"e85393d7": "WithdrawEmergency()", +"e853cda3": "checkKncArbitrageRate(uint256)", +"e853ce64": "joinTeam(uint256,uint256)", +"e854d135": "executeWill(address)", +"e854dfb4": "Order(address,uint256,uint256)", +"e854eeb3": "fciDecimals()", +"e85501d8": "revokeRequest()", +"e8554e8b": "getRaceBaseStats(uint256)", +"e855aee5": "_mint(uint256,address)", +"e8561d36": "cashBackFromProject(address,address)", +"e856528a": "mul(uint128,uint128)", +"e8580dd4": "Survey(address,uint256,string,bytes32[])", +"e85ac5b0": "ownerSetAuditor(address)", +"e85b26c0": "createClaim(address,uint256)", +"e85ca2a4": "bitcoin_multisig_vault()", +"e85dcfe8": "ScheduleTransaction(string,uint256,uint256)", +"e85de8e7": "valueInUSD()", +"e85e0bd7": "addToken(uint256,uint256,uint256)", +"e85e3d92": "LongClosed(address,uint256)", +"e85efc50": "assertEq(uint256,uint256,bytes32)", +"e85f3be6": "TOSPrivateHoldingContract()", +"e85f3fb0": "setAuthorizedSpender(address)", +"e86142b5": "orderOnSaleAuction(uint256)", +"e861c4f1": "dividendEndTime()", +"e861dc85": "VETO_PERIOD()", +"e861e34d": "minInvestInWei()", +"e861f077": "HaltStatus(bool)", +"e8625060": "testDisputedInvalidSequenceWrongWriteValue()", +"e863051c": "SmartForestCoin()", +"e86310eb": "exp(address,address,uint256)", +"e863a122": "getPercentageCW()", +"e863d8cc": "repeatedPayment(address,uint256,uint256,uint256)", +"e863f0d3": "acknowledgeOrder(uint256)", +"e8641652": "strCompare(string,string)", +"e86434ef": "startRefundPayment(uint256,uint256)", +"e864f2b6": "exchange(address,uint128)", +"e864fd27": "checkCap(uint256)", +"e8665638": "bonusVestingPeriod()", +"e866d302": "setJackpotWinCount(uint256)", +"e86701e0": "playerFlight(uint256,uint16)", +"e8672de9": "removeRatePlan(uint256)", +"e8679512": "getTransformInfo(uint32)", +"e867ecda": "setPricing(uint256)", +"e8685ba1": "getNumOfCandidates()", +"e8689bf8": "_emitUserRatingGiven(address,address,uint256)", +"e868b55e": "createReaderWriter(bytes32,address,address,bytes32)", +"e868cd17": "ManUnitedSC()", +"e86994ea": "getPropertyColors(uint16)", +"e869d45f": "registerScheme(address,bytes32,bytes4,address)", +"e86a3b8b": "WSIPrivateEquityShare()", +"e86a9b1e": "Custodian(address[],uint256,uint256,address)", +"e86afde0": "description(uint64)", +"e86ba262": "getTimeLimitForReplyOnProposal()", +"e86ba99d": "tryFinalizeProposals(uint256[],address[],bool[])", +"e86bf267": "takeCfd(uint128,address)", +"e86c6431": "isTransferManager(address)", +"e86c87d3": "func_0778()", +"e86cf04b": "TinyProxy(address,uint256)", +"e86d24ca": "getSmartSharingByHash(bytes32)", +"e86d86ea": "totalTransferWhitelistMapping()", +"e86dad29": "assetArray(uint256)", +"e86dea4a": "feeNumerator()", +"e86e3f2a": "setArrIntF1StrF2(int256[],string)", +"e86e52ec": "isBlocked(address,uint256)", +"e86f2c75": "mainSaleSecondBonus()", +"e86f6699": "isWhitelistedAddress(bytes32,uint8,bytes32,bytes32)", +"e870a88e": "setnumMax(uint16)", +"e870bec1": "logging(uint256)", +"e871614a": "getResponseUint(uint256,bytes32)", +"e871f35f": "addCourse(string,uint256,uint256,string,string)", +"e872a05e": "addrMine()", +"e873d02d": "cap2(address)", +"e8742b55": "setComment(string)", +"e87508be": "investorDeposit()", +"e8755d00": "setServiceFee(uint256,uint256)", +"e8756037": "finishExchange()", +"e8757d19": "donations()", +"e875bfbc": "getMinimumFunds()", +"e8763023": "ProofOfAwareness()", +"e876bdef": "getEtherRaised()", +"e876c273": "TotalSupplySet(uint256)", +"e876e3f1": "investorsFee()", +"e87752f4": "icsToken()", +"e8777158": "grantVested(address,address)", +"e877e541": "bankuToken()", +"e877f910": "sendToContract(address,uint256,bytes)", +"e8787040": "ElevenElevenToken()", +"e8789d88": "getEndTimeOfStage(address,uint256)", +"e878d65f": "QIUToken()", +"e879790a": "HHRFallback(address,uint256,uint256)", +"e87a0a59": "EIB()", +"e87a9d84": "phase1AccountTokensMax()", +"e87aa769": "_getShinyPurity(uint16,uint16)", +"e87b0242": "ADVISORS_LOCK_DATES(uint256)", +"e87bbdbb": "spawn(bytes32,address,address)", +"e87c05c6": "restSupply()", +"e87c0ee6": "getGameCount()", +"e87c1463": "bidTicket(uint256)", +"e87da468": "addChild(bytes32,bytes32)", +"e87df70e": "fivetimes()", +"e87e77fe": "switchAirdrop()", +"e87ea055": "checkCurrentStage()", +"e87ed8b5": "RTB2()", +"e87f41bb": "deleteInvestorTokens(address[],uint256[])", +"e87ff056": "getTeamByPosition(uint8)", +"e8801360": "soldTokensCounter()", +"e8814606": "CryptosisToken(uint256,string,string)", +"e882f844": "DINAR()", +"e883429a": "isTransferAllowedteam()", +"e8836183": "blockLock()", +"e88390aa": "coinSendDifferentValue(address,address[],uint256[])", +"e883d157": "outstandingPower()", +"e88499a9": "claimPayout()", +"e8850978": "reportMissingChunk(bytes32,uint256,uint8,bytes32,bytes32)", +"e8853e32": "getData_28()", +"e8854cfd": "getPointer(uint256)", +"e885910f": "trackCrowdsale(address)", +"e885b81f": "Bonuslist(address)", +"e8862924": "decodedLocksroot()", +"e886dade": "bulkTransfer(address,address[],uint256[])", +"e887841e": "to(uint256)", +"e8878b11": "wakeUpProxy()", +"e88810ff": "presalePiDiscount()", +"e8884aee": "_useFromDailyLimit(uint256)", +"e88885fa": "price1Of(uint256)", +"e888e445": "CatalogoOuvidorias(bytes32,uint8,bytes32,bytes32,int256)", +"e88a728f": "getAssetIdOwnerAndOIndex(uint256)", +"e88ab341": "contributorsVestTokenAllocation()", +"e88b0067": "mintInvestment(string,string,uint256,address,uint256)", +"e88b8ac6": "confirmAndCheck(bytes)", +"e88b9436": "MYR_Omnidollar()", +"e88bc2ba": "Variation(address,address)", +"e88c6a8a": "moveToken(address)", +"e88d27eb": "registerProperty(string,string,string,string,string)", +"e88d9567": "changeDepositFee(uint256)", +"e88dc5b7": "rewardPeriod()", +"e88eff06": "setUserRoles(address[],bytes32[],address[],uint8[])", +"e88f3a86": "addBonusToBlock(uint256,uint256,uint256)", +"e88f4510": "LigerToken(address,address,address,address,address)", +"e88f4c6f": "usedCoreSupply()", +"e88f97bd": "query2_fnc(uint256,string,string,string,uint256)", +"e8903656": "executeSubscription(uint256)", +"e8906a2d": "addSigners(address[])", +"e89152ac": "ItemReceived()", +"e8916af9": "addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"e891c9db": "validateWithdrawalSignature(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32)", +"e8927fbc": "increase()", +"e8928f7a": "setMaxWei(uint256)", +"e8930efd": "Investors(address)", +"e8932ea1": "burnClosedTokenInternal(bytes32)", +"e8936b29": "liveSince()", +"e894000b": "authorizedPower()", +"e89401a1": "multihash(bytes32)", +"e894326c": "addDepositCreator(address)", +"e8944564": "test_insert_findWithHintPrevRemoved()", +"e894f117": "TokenTimelock(address,address,uint64)", +"e8959b94": "addUser(int256)", +"e8974832": "levelTwoBonus(uint256)", +"e89826ac": "addGame(string)", +"e89876d6": "POSController(address,uint256,uint256,uint256,uint256)", +"e89927ef": "voteForCandidate(string)", +"e8992d40": "additionalTotalSupply(uint256)", +"e8997dbd": "setFeesController(address)", +"e899e848": "Fastmarketnetwork()", +"e89a49e2": "setPrivateName(bytes32)", +"e89a4e92": "getFeeRatioForJS(address)", +"e89ac5dd": "OrganizeFunds()", +"e89aeaca": "redeemLand(address)", +"e89b0e1e": "addAccount(address)", +"e89b2564": "Rate5()", +"e89b3ecb": "withdrawPUB()", +"e89b5d4b": "incrementInventory(uint256,uint256)", +"e89b727c": "myTotalStakeAmount()", +"e89b9ff6": "errCounter()", +"e89bc86b": "getBooleanMapCount(string)", +"e89c9b5d": "doThrow(string)", +"e89cdff5": "setTeamName(uint256,string)", +"e89d0d17": "getTeamLeaders()", +"e89d7f23": "payDividend(uint256,uint256)", +"e89df228": "shippingService()", +"e89f0f40": "DTR()", +"e89f3477": "grip()", +"e89f38d4": "BonusToken()", +"e89f5329": "createDebt(uint256,address,uint256)", +"e89f7672": "fight(bytes32,bytes32,bytes32)", +"e89f98a2": "TokenContractChanged(address)", +"e8a01f11": "BagSold(uint256,uint256,uint256,uint256,address,address)", +"e8a0aed3": "createToken(string,string,uint8)", +"e8a0cf44": "getScannersIds()", +"e8a0d312": "issueIndividualTokens(address,uint256)", +"e8a0e3c9": "BigbomPrivateSaleList()", +"e8a12479": "CBCT()", +"e8a1c08f": "nibbleToChar(uint256)", +"e8a207ad": "freeTokensAvailable()", +"e8a21157": "setNonEtherController(address)", +"e8a21382": "calculateInstantBonusAmount(uint256,address)", +"e8a28d52": "changeAllowAllBurnTransfers(bool)", +"e8a2a5ba": "Resolved(address,uint256,uint256,bool)", +"e8a43960": "elixor()", +"e8a478ad": "round0Bonus()", +"e8a481bd": "edit(address,bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", +"e8a4b797": "isTokenApproved(address,uint256)", +"e8a5282d": "setConfig(bytes32)", +"e8a55471": "_transfer(address,uint40)", +"e8a61357": "testInternal(uint256)", +"e8a61cc8": "refundBuyer()", +"e8a62235": "storeAction(address)", +"e8a6d7dc": "START_RATE()", +"e8a71012": "switchCrowdSaleStage()", +"e8a7228b": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[])", +"e8a748e7": "whitelistOneAddress(address)", +"e8a7be57": "MRVToken(address,address)", +"e8a7e256": "ownerTopUp()", +"e8a9594f": "rateOfEmissionPerYear()", +"e8a96b46": "getHolder(uint256)", +"e8a97ea8": "StateChanged(uint8,uint8)", +"e8aa1f5e": "makeOwnerBitmapBit(address)", +"e8aa377b": "storeHarvestOperation(string,string,uint32,uint16,uint16,string)", +"e8aa58ce": "vaultToWallet(address,uint256)", +"e8aa6b6f": "TeamtokenRelease4()", +"e8aabf9c": "ownerTransferWeiSecondWallet(uint256)", +"e8aada0c": "ViewBet(address)", +"e8aadc3f": "locationId()", +"e8ab245b": "WarriorsAssignedToBattlefield(address,address,uint256)", +"e8ac0e76": "getPropose(address)", +"e8ac764b": "twoMillionFourHundredThousand()", +"e8aca46a": "addReferral(address)", +"e8aca672": "getNodalblockURL()", +"e8acee9e": "fundPreSale()", +"e8ad1015": "__FindProjects(string)", +"e8ad2369": "getCaseAtIndex(uint256)", +"e8ad6912": "setGasForCLOUD(uint256)", +"e8ad7bcc": "secondTTax()", +"e8adf589": "getRateScale()", +"e8ae7dd2": "getCCH_edit_22()", +"e8ae8c6e": "DescriptionInt()", +"e8af214a": "fundingRemainingAvailableInEth()", +"e8afedd9": "setCommissionTarget(address)", +"e8b0a262": "ICO2Period()", +"e8b13c44": "getChainyTimestamp(string)", +"e8b1d0f3": "relayCall(address,bytes4,bytes)", +"e8b1e825": "getTokenPriceInWeiAndPhaseIdxs()", +"e8b23632": "playerRefundAll()", +"e8b3891e": "userTransferUser(address)", +"e8b3ed65": "addDoc(string,string,string,string)", +"e8b49df2": "payWithEth(uint256,address)", +"e8b4c9d7": "OPEN_PACKAGE_PRICE()", +"e8b50802": "PRESALE_END()", +"e8b5b796": "transferownership(address)", +"e8b5e51f": "invest()", +"e8b611d6": "dailySupply()", +"e8b69081": "checkActionIsAuthorisedAndReset()", +"e8b6bbe4": "feeToSeconds(uint256)", +"e8b6fa80": "claim(int256,int256,int256,int256)", +"e8b9d536": "SingularityNetToken()", +"e8ba2fc9": "FundWallet(address,address)", +"e8ba6509": "isFinished(uint256)", +"e8ba854f": "updateWallets(address,address)", +"e8ba8f8b": "fixPlayerSurname(uint256,string)", +"e8bb7143": "removePackCategory(uint256,bytes4)", +"e8bba4f6": "getDepositedOf(address)", +"e8bc0d40": "activateNextRound()", +"e8bccab3": "Neglect(address,uint256,uint256,int256)", +"e8bd09ff": "GetPlayerNumber(uint8)", +"e8bd5cc4": "NTRYPerEther()", +"e8be2e8e": "NewsContractEntity()", +"e8be3853": "setOffchainPayment(address,bool)", +"e8be73dc": "BenkiICO(address)", +"e8beef5b": "fireEventLog3Anonym()", +"e8befc0d": "getDividends(bool,address)", +"e8bfe5b8": "landmarkPriceStepNumerator()", +"e8bfebec": "ISSUE_METHOD()", +"e8c0485f": "profile(string)", +"e8c09c0d": "verificationHoldersValueMap(address)", +"e8c0a0df": "totalDepositBalance()", +"e8c23649": "referralName(string)", +"e8c28358": "calculateDispensedTokensForGasPrice(uint256)", +"e8c2cb16": "equal(string,string,string)", +"e8c32d13": "DoacaoEvento()", +"e8c3a65f": "save1(address,bytes,string)", +"e8c3e34d": "GetProperty(bytes32,uint256,uint256)", +"e8c494f1": "calcPresaleTokenSupply()", +"e8c4d328": "airDropNumber()", +"e8c4fa04": "coinIssuedGemmyMusic()", +"e8c5ff96": "jackpotLarge()", +"e8c61c4e": "actionB(uint256)", +"e8c66cac": "fundingReserve()", +"e8c67216": "getRateLimit()", +"e8c6ed14": "niceGuy()", +"e8c78934": "disableReservePurchases(address,bool)", +"e8c7df8a": "admin_token_add(uint256)", +"e8c80880": "VestingAddressChanged(address,address)", +"e8c8a52a": "reinvestDivs(uint256)", +"e8c8bb52": "_getRegistry()", +"e8c93aa9": "createProductionUnit7()", +"e8c96256": "Lesson_2(address,uint256)", +"e8c9a3e5": "withdrawnTokens(address)", +"e8c9f9de": "LocalToken(uint256,uint256,string,string,string,address,address,address)", +"e8ca1609": "startNewPayoutPeriod()", +"e8ca3bbb": "auctionsContract()", +"e8cb635b": "checkRequestSignature(bytes,bytes,uint256,bytes)", +"e8cc00ad": "withdrawOwner()", +"e8cf0aca": "depositEthersFor(address)", +"e8cf56a9": "C2L()", +"e8cf86ff": "MyTestCoin()", +"e8cf958e": "setBwMarketValidCaller(address)", +"e8cfc40d": "EtherPrice(uint256,uint8)", +"e8d03e91": "deployBoard()", +"e8d07525": "getLockerAddr(uint256)", +"e8d0affb": "addOwner(address,bool,bytes)", +"e8d0ed31": "sendInvestor(address,uint256)", +"e8d11d9c": "DavidCoin()", +"e8d1891b": "removeOracle(address,uint256)", +"e8d199ec": "BetterBitcoin()", +"e8d1e961": "lockAccount(uint256)", +"e8d320e6": "coinBalanceOf(address,uint8)", +"e8d3280f": "decrement(address)", +"e8d34f5d": "ensureCollateralBalance(uint256)", +"e8d375fe": "week_in_blocs()", +"e8d3a5a9": "joinboard(string)", +"e8d3cad5": "getDepositsLength(address)", +"e8d47923": "fAdd(uint256,uint256)", +"e8d50403": "ChangeDates(uint256,uint256,uint256,uint256)", +"e8d59fae": "PROMO_TOKEN_AMOUNT()", +"e8d663a4": "requalify(address)", +"e8d6b5aa": "TORCToken()", +"e8d6f62d": "p1Of(uint256)", +"e8d70569": "setGameAddress(uint8,address)", +"e8d83383": "whitelistMaxContribAmount()", +"e8d88bd4": "Race()", +"e8d8c3a7": "decreaseApprovalAllArgs(address,uint256,address)", +"e8d9d76a": "WCMY()", +"e8dad6d3": "getOrganizerAddress(uint256)", +"e8dc800c": "setReadings(bytes32,uint256,bool)", +"e8dca673": "throwsWhenSaleIsNotTokenController()", +"e8dcd15f": "NeuralProtocol()", +"e8ddb731": "myshowindex(address)", +"e8ddf15a": "withdrawEthBalance()", +"e8de636c": "add(bytes20,address)", +"e8df0ca1": "checkRefundPollDate()", +"e8dfa50d": "addPigment(address,uint256,uint256,uint256,uint256)", +"e8e03280": "window0EndTime()", +"e8e09563": "PresaleToken(address,address)", +"e8e0d5bf": "getConversionInfo(string)", +"e8e44248": "transferMiner(address,uint256)", +"e8e5882e": "SmartpoolVersion(address[3])", +"e8e72f75": "ownerSetPriceOracle(uint256,address)", +"e8e7426e": "Presale(address)", +"e8e7c73d": "useMonthlyAccess()", +"e8e81fe4": "setTelegram(string)", +"e8e9eeae": "getPremiumCentsPricePer30Days()", +"e8ea0675": "redeemedEscrow(bytes32)", +"e8eb2284": "amountOf(uint256)", +"e8ebf3c5": "iii()", +"e8ecea05": "getSpecialNum()", +"e8ed024e": "LoopringToken(address)", +"e8ed1cdd": "getAccountQuantity()", +"e8edb2ff": "geneticallyEngineer(string)", +"e8edc816": "spender()", +"e8ee8b44": "MIS()", +"e8ee8c75": "deleteCandidateBySnapshotBlock(address,uint256)", +"e8eecf4c": "maxTxValue()", +"e8eed374": "hashTerms(string,string)", +"e8ef51db": "getCCH_edit_15()", +"e8efc1a0": "updatedValue(bytes32)", +"e8efe846": "blocksOwners(uint256)", +"e8f00990": "calcPlayerDivs(uint256)", +"e8f04e84": "disableLotteryGiveHunt()", +"e8f09e24": "getDisableBet(uint256)", +"e8f1736c": "TakeMoney()", +"e8f1bd8c": "getNeighbourhoodOf(uint256)", +"e8f1dc9a": "_unpackMakeData(uint256)", +"e8f35f2c": "updateUSeqvol()", +"e8f38323": "getJobHunterWithdrawalAmount()", +"e8f3cd59": "getFunderContributionClaimed(address)", +"e8f4bc12": "InitUpgradeCard()", +"e8f54364": "JJ(uint256,string,string)", +"e8f5cf36": "changeWCT2Controller(address)", +"e8f62764": "feesController()", +"e8f62f46": "someMethod2(uint256,uint256,uint256)", +"e8f64680": "purchaseFor(address,bytes32,uint256)", +"e8f6bc2e": "changeAccountLevelsAddr(address)", +"e8f72850": "interactWithXYZ()", +"e8f88890": "dev_inStream()", +"e8f8a1d2": "buyBuyerTokens()", +"e8f95666": "transferPreSigned(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e8fa1d51": "handleCloseChannel(address,bytes32,uint256,address,uint256,address,uint256)", +"e8fac4cd": "transfer(address,address,address,address[],uint256,uint256)", +"e8faf89c": "ETHER_MAX_CONTRIB_USA()", +"e8fb02d2": "sellFeeMilliPercent()", +"e8fbc67d": "MultisigWallet(address[],uint256,uint256)", +"e8fc0780": "_malloc(uint256)", +"e8fc451a": "init(uint256,uint256,address,uint256,uint256,uint256,uint256)", +"e8fc9273": "verify(address,string)", +"e8fc9c10": "UnicornContract(address,address,address)", +"e8fcda45": "_set8()", +"e8fe6b66": "getCode(bytes32)", +"e8fe9473": "test_threeInvalidEqUint(int256)", +"e8ff269e": "setMaxAvatarNumber(uint8)", +"e900604d": "claimTokenOwnership(address)", +"e9007d4e": "settleGame(uint256,uint256,string,uint256)", +"e9013cf7": "getFreelancerInvoicesByStatus(address,address,uint8)", +"e9024691": "recoverPreSignedHash(address,bytes4,address,uint256,uint256,uint256)", +"e9024ff5": "modifyMessage(string)", +"e90352eb": "_transferCheck(address,address,uint256)", +"e90389bd": "setWaitingTimeBuffer(uint256)", +"e90459f8": "emitError(bytes32)", +"e906c804": "_distributeBridgeFee(uint256,bool,bool)", +"e906e664": "getx2Policy(address,uint256,uint256,uint256)", +"e90799d2": "unlock4Circulate(uint256)", +"e9083a41": "drainMe()", +"e9084739": "economyBoost(uint16,uint16)", +"e9085957": "RANGESTART_1()", +"e9087eb7": "canMove(address)", +"e908a6d6": "Initialize_PlayUnit(uint256,uint256,uint256)", +"e9092bca": "weeOneEthCanBuy()", +"e90956cf": "setCurator(address)", +"e909ebfa": "addDelegate(address,address)", +"e909f2cc": "updateCancelDistFlag()", +"e90a3cf2": "addressCashwolf()", +"e90ab7fe": "lunetReserve()", +"e90acd53": "bidder(bytes32)", +"e90bcb32": "senderToProxy(address)", +"e90cb9b9": "setBurnAddress(address,address)", +"e90d2120": "etcWallet()", +"e90dae86": "TokenAUC(uint256,string,uint8,string)", +"e90dd9e2": "tokenState()", +"e90e5453": "rand(uint256,uint256,uint256)", +"e90ecfce": "EvoToken(address)", +"e90f84bd": "getETHFromTokens(uint256)", +"e9105cf1": "unblockTokens()", +"e9108538": "mintSilcToken(address,uint256)", +"e91208ad": "galleryFour()", +"e9121758": "token_holders_array(uint256)", +"e9121b12": "transferAndApply(address,uint256)", +"e9126154": "returnLoan(uint256)", +"e912ae4f": "getLastPaidTransaction()", +"e9130d4a": "test_twoInvalidEqBytes()", +"e9140274": "stakeTAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,address)", +"e914575b": "endPublicIcoForTesing()", +"e9149e34": "investedWei()", +"e914d828": "TimeMoneyToken()", +"e9156cfe": "getMutation(uint32)", +"e916d0f0": "doBalance(address)", +"e916d29e": "matchBytes32Prefix(bytes32,bytes)", +"e91710aa": "DogCoinCrowdsale(uint256,uint256,uint256,uint256,address)", +"e9171abb": "airdropRecipientCount()", +"e91723b2": "aggiungi_candidato(string)", +"e9177f1b": "HTCToken()", +"e917b027": "setProjectManager(address)", +"e917f82d": "OxyCoin()", +"e918268b": "changeDrawer(address)", +"e9187ef4": "refundAction(bytes32,uint256)", +"e9198076": "fillBuyOrderPartially(uint256,uint256,uint256)", +"e919ca10": "getMyDiscount()", +"e91a08a2": "grantedParsecCredits()", +"e91a68bf": "getAllRightLeg()", +"e91b3ac5": "getMutalbeInfo()", +"e91b6987": "addNewObj(address,uint32)", +"e91bb26e": "redeemEgg(address)", +"e91c3a3e": "getStatusInfo()", +"e91cc17c": "withdrawFunder(address)", +"e91ccdc0": "allFundingProcessed()", +"e91cd09d": "thisbalanceETH()", +"e91d1ea0": "downtime()", +"e91dcba1": "MDL()", +"e91df414": "Nurucoin()", +"e91df8da": "AuctionSoldOut(uint256)", +"e91e10af": "allocationFinished()", +"e91e13a9": "CHUNK_SIZE()", +"e91f9d96": "getNftsByOwner(address)", +"e91ff7ca": "STORAGE_WALLET()", +"e921528e": "evTransfer(address,uint256,address,address,uint256)", +"e921b4f8": "buyByAddress(address)", +"e922248e": "MinterFunc(address,uint256)", +"e92254ba": "finaliseFunding()", +"e922ee6f": "removeParent(address)", +"e9233a65": "getNameIds(uint256,uint256)", +"e92340b5": "ICO_BONUS_TIME_2()", +"e923c3d6": "_setUint(bytes4,uint256)", +"e923e707": "hardCapWei()", +"e9253156": "force_deduct_fees()", +"e92565be": "settrans(bool)", +"e9262dae": "changeMinApproval(uint8)", +"e9263f9d": "ifcoinToken()", +"e9266fca": "collectRobot(uint256,uint256,uint256,uint256,uint256)", +"e92704e8": "setGason(uint32,bool)", +"e927a8c0": "changeContracts(address,address,address)", +"e927ca04": "addVesting(address,address,address,string,uint256)", +"e927da3f": "buyPackWithKitty(uint256)", +"e927ea7a": "ballotVoteCount(uint32,uint32)", +"e927f1f9": "getLeaderBoardData(address)", +"e927fc5c": "creatorAddress()", +"e9288d72": "pushToBank(address)", +"e928ad47": "createEthBidAuction(uint256,uint256,uint16)", +"e9298b97": "changePermissions(address,uint8)", +"e92a5d74": "createTimeDecayingToken(uint256,uint256,uint256,uint256,uint256,string,uint8,string,uint8)", +"e92b6818": "CONTRIB_PERIOD1_STAKE()", +"e92b7f4b": "AddVoters(string)", +"e92ba335": "airdropCountLimit1()", +"e92bb686": "_CallAborted(address,bytes32,bytes18)", +"e92bf2a8": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address,address)", +"e92c02cf": "startOpenWindow(uint256,uint256)", +"e92d5178": "bankerBeginTime()", +"e92dfb23": "LimitBalance(uint256)", +"e92e4505": "test_9b_testGoodTransfer_thenInvalid()", +"e92e4d63": "setReservingStep(uint256)", +"e92e5c34": "getVoterCount(uint256)", +"e92e5f03": "PRESALE_TOKEN_SUPPLY_LIMIT()", +"e92f2904": "Compra()", +"e92f7447": "isDayThird()", +"e92f8cfc": "MIN_BUYBACK_VALUE()", +"e92f9c1d": "getWarriorsFromIndex(uint256,uint256)", +"e92fdeaa": "ethRec(uint256,uint256,uint256)", +"e930f06f": "setToSaleWallet(address)", +"e930f3a6": "ethContractBalance()", +"e93119d9": "balanceOf(address,address,uint256)", +"e931f1ba": "secondRoundMayEnd()", +"e931fa0c": "setMonsterGene(uint64,uint256)", +"e93239d3": "outputWalletAddress()", +"e9324444": "preSaleState()", +"e93314ab": "getS()", +"e9333fab": "set_admin(address)", +"e9339de5": "Moneda(address,address,address)", +"e933cfb0": "mintCard(uint256,address)", +"e933e6eb": "checkPriceCrowdsale(uint256,uint256)", +"e9347e31": "_sellKeys(uint256,uint256,bytes32)", +"e9348532": "kncRateBlocksTrade()", +"e934ab0c": "ActualCommitteeRoom()", +"e9353cb7": "createProductionUnit3Beta()", +"e9358b01": "newENS(address)", +"e9360096": "cancelCompetition(uint256)", +"e9361d34": "ethartRevenueReward()", +"e93680d5": "_my_transfer(address,address,uint8)", +"e936e878": "disburser()", +"e9377aca": "mtEndTime()", +"e937f689": "_getElement(string,uint256)", +"e938f121": "testFunction(address,uint256,bytes)", +"e9391db9": "getBenificiary()", +"e9395679": "uintToString(uint256)", +"e93a1906": "buyFeeMilliPercent()", +"e93ab977": "bids_ignored_refunded()", +"e93b9c89": "stepVestingPercent()", +"e93ba042": "distributePrices(uint256)", +"e93ba06f": "getWhitelistAt(uint256)", +"e93c5973": "UpdateRequiredSignatures(uint256)", +"e93c980d": "tokenUnit()", +"e93d3e5f": "setNextRoundFee(uint256)", +"e93e25fe": "zilleriumToken()", +"e93e40db": "offerCollectibleForSale(uint256,uint256,uint256)", +"e93e7b26": "Stage3Deadline()", +"e93f29bd": "_setPartitionControllers(bytes32,address[])", +"e93f3f8d": "setBuyPrice(uint256,uint256)", +"e93f57b9": "capAmount()", +"e9408491": "setInitialBal(uint256)", +"e94087d6": "joinAsBroker()", +"e941fa78": "withdrawFee()", +"e94200f1": "burnAllOwnerTokens()", +"e94233f6": "oraclizeGasCost()", +"e942b516": "set(string,string)", +"e942c564": "getWei(uint256)", +"e9433ab6": "endDonations()", +"e943cc01": "powerDayEndTime()", +"e944267c": "FourArt()", +"e9445d5a": "createAudit(uint256,uint256,uint256)", +"e94479a9": "MinterRemoved(address)", +"e944a6d7": "claimSpecialResource(uint256)", +"e944f52d": "addressToBytes(address,address,address)", +"e94559b1": "ETToken()", +"e945c391": "setEndTime(uint64)", +"e945e26c": "CCH_OLI_1()", +"e946115b": "flushVault(uint256,address)", +"e946ad4a": "getUpgradesOwned(address,uint256)", +"e947962b": "pushRefIncome(address)", +"e9482aa6": "UsingANormalStruct()", +"e9485982": "canBePurchasedByETH(uint16)", +"e949fba1": "_getPurchaseToken(address,uint256)", +"e94a4db1": "isSuitableGen(uint256,uint256)", +"e94acf0e": "TinyRouter(address)", +"e94aea8a": "lastStealBlockNumber()", +"e94b6aef": "getLayEggInfo(uint32)", +"e94bc926": "cancelVoteForCandidate(address,address,uint256)", +"e94c8dc0": "NXX()", +"e94d7af6": "getCountAllBuildings(uint256,bool)", +"e94dc568": "freeBalancesOf(address)", +"e94e4bf1": "maxDailyCap()", +"e94e80fa": "playerIndexToApproved(uint256)", +"e94e83d8": "Answer(string)", +"e94f1dc6": "setWhitelistInternal(address,address,uint256)", +"e95015b9": "spawnMonster(uint256,address)", +"e9506c73": "_investAsBonusProgram(address,uint256)", +"e9512fa4": "setVotingQuestions(string,string,string)", +"e9519a6b": "FirexToken()", +"e951c35b": "NewAppleToken()", +"e9523c97": "getAllAdmins()", +"e952f74f": "airdropCount()", +"e9540395": "getRewardDivisor()", +"e9546d08": "increaseK()", +"e95502fb": "lockedShares()", +"e9556430": "SECONDS_PER_MINUTE()", +"e9559803": "getShipById(uint256)", +"e955ee03": "revertNoncsallocation(address)", +"e9560b3b": "getParticipantBalance(address)", +"e95626c5": "Lizun()", +"e95715cb": "jackpotSend()", +"e9577a11": "getHistBtcRate(uint256)", +"e95823ad": "safe(bytes32)", +"e958d15f": "partnerMessagesCount(address,address)", +"e958d1ae": "TreeContract()", +"e9592a9f": "AuctionStarted(uint64,uint64,address)", +"e9596db3": "betInfo(bytes32)", +"e95a644f": "checkIn(uint256)", +"e95ac9f7": "LBToken(address,uint256)", +"e95af01b": "identify(address,address)", +"e95b2bb8": "Ethraffle_v2b()", +"e95b4aa8": "nameOf(address,address)", +"e95bcfb1": "UVDICO()", +"e95bd5f2": "testToData(bytes)", +"e95bee59": "checkFormat(string)", +"e95d0a59": "MarbleEarth(address,address)", +"e95d716c": "FEE_SELECT_MARGIN_SPLIT()", +"e95d74e0": "set_coin_minimum_trade(string,uint256)", +"e95db6f9": "buyKey()", +"e95f206e": "MIN_WEI_AMOUNT()", +"e95f2c7d": "getMaxLoanAmount(uint256)", +"e95f6414": "dayPotExpiration()", +"e95f72e3": "ROD()", +"e95fa798": "SellerCancelDisabled(bytes32)", +"e9600f12": "release(bytes16,address,address,uint256,uint16)", +"e960127e": "set2RoundTime(uint256)", +"e960b940": "DoubleSixToken()", +"e960bb48": "balanceOfLocked(address)", +"e9616fb0": "changeFreezingAgent(address,bool)", +"e962867d": "BillionsToken()", +"e9629d7f": "phase1Cap()", +"e96309e7": "gatherOldBalanceOf(address)", +"e9639c80": "releaseTheOriginal(uint256)", +"e963f3e8": "MAX_BUYIN_GAS_PRICE()", +"e9653482": "hasValidProfile(address)", +"e966668c": "advisorset()", +"e9668128": "isTransactionsAllowed()", +"e9677b6b": "safeExecuteOrder(address,uint256,uint256,bytes,int256)", +"e967a9b7": "dataSourceCallbackExtras(uint256,uint16)", +"e967bb18": "refundAllMoney()", +"e967e60c": "placeBid(string)", +"e968ab95": "enableTokenTransferability()", +"e968d087": "shrink128(uint256)", +"e968e1ec": "setPLATPrice(uint256)", +"e9698f62": "setBurnAmountApproval(address,address,uint256)", +"e969c871": "swapTokens(address[],uint256[])", +"e96a6b38": "getSignerFlagFor(address)", +"e96b462a": "isOwner(address,bytes32)", +"e96b5e13": "SERENITY()", +"e96b8aa6": "bitwordsWithdrawalAddress()", +"e96bf86d": "lastHour()", +"e96cd01c": "SoraToken()", +"e96d01d4": "setPlayerOverrideId(uint256,uint256)", +"e96d36ac": "communityAllocating()", +"e96d6e4f": "publicKeys()", +"e96da99e": "reply(bytes32,uint256)", +"e96e5950": "getEventHash()", +"e96fefec": "resetTransferToValues()", +"e9703701": "byteToUint(bytes1)", +"e970754b": "getTxs(uint256,uint256)", +"e970e86d": "testBlockNumber()", +"e9715de9": "referralBonusPercent()", +"e97193a6": "removeAuthor(address)", +"e971c252": "issue(address[],uint256[])", +"e972261d": "calculateProfit(uint256,uint256)", +"e9733b27": "checkStakeBalance()", +"e9734172": "createWagerAndDeposit(bytes32)", +"e9739db7": "getTokenRate(uint256)", +"e973b7ba": "node_height(uint256)", +"e973f2c4": "reinvest_color(uint256,uint256,uint256)", +"e9742d23": "createGun(uint256)", +"e9748e58": "renewalsCreditAffiliatesFor()", +"e974c000": "checkIsOnlyOwner(bytes32)", +"e97758a2": "thirdRewardPeriodEndBlock()", +"e977992d": "Doubler()", +"e9779b76": "depositOldTokens(address,uint256)", +"e977a11c": "wavesAssetId()", +"e977fa76": "_forceTransfer(address,address,uint256)", +"e9794dc1": "CreateHash(uint8,string)", +"e9799993": "Wafflecoin()", +"e979af97": "pushArray(bytes32,string)", +"e979bac1": "getCustomerBankRating(string)", +"e979fed6": "ownerstake()", +"e97a4779": "evaluateProposalPreCondition(uint256)", +"e97b2190": "add_wall(uint16)", +"e97b7689": "getTotalBuyers()", +"e97b97fe": "neumark()", +"e97cf883": "calculate(uint256,uint256,uint256)", +"e97cfab4": "withdrawDivs(uint256)", +"e97d87d5": "releaseStartTime()", +"e97db66e": "setJackpot()", +"e97dcb62": "enter()", +"e97e490c": "canuse(address)", +"e97e6dca": "applyPresale()", +"e97ed99c": "TurtleFarmer()", +"e97f6313": "token_airdrop_amount_each()", +"e97fe114": "tradeModifiers(address,address)", +"e98096fc": "numberOfNames()", +"e980c2e0": "littafiContentCommit(bytes32,string,string,string,string,bool)", +"e9813f9c": "_distinctOwners(address,address)", +"e981c803": "rejectPauseChange(bool)", +"e982d5a9": "transferOwnership1(address)", +"e9835ee1": "LogAgreementAmended(address,string)", +"e9841bd8": "certifyTradeAsCounterparty(bytes32,address)", +"e98444e8": "BIMI_DAO_31_a()", +"e984d794": "setRarity(uint256,uint256)", +"e984dd74": "ZenixSupply()", +"e985e367": "saleToken()", +"e985e9c5": "isApprovedForAll(address,address)", +"e9867fe7": "_splitElement(uint256)", +"e9874106": "pricePerTicket()", +"e98799e0": "Mejasa()", +"e987cc45": "getfrom(address)", +"e9884b44": "depositClient()", +"e9886064": "_sendPrimordialTokenAndRewardDev(uint256,address)", +"e988998a": "refreeze()", +"e9892821": "isSpendableFrozenCell(address,uint256)", +"e9893c67": "awardAmount()", +"e98a0de7": "setGitHub(string)", +"e98a1439": "priceOfMultiple(uint256[])", +"e98ae339": "cancelMarginCall(bytes32)", +"e98b1679": "set_pre_kyc_bonus_denominator(address,uint256)", +"e98b7f4d": "getKitty(uint256)", +"e98bf38e": "test_insert_zeroKey()", +"e98c365b": "totalMigratedOut()", +"e98c7608": "mod9710(bytes)", +"e98cab50": "burnIndexed(uint256)", +"e98cf987": "turnOnSale()", +"e98d3112": "OwnableWithDAO()", +"e98dcba2": "approveExchange(address,address,uint256)", +"e98df8bf": "registerMeeting(address,uint256)", +"e98e130c": "GetCandidatePrincipal(uint8)", +"e98e8a64": "getKeccak(bytes32)", +"e98ebdd5": "numResponses()", +"e98f402c": "getClassCheckOwner(uint64,address)", +"e98f5708": "Dgp(address)", +"e98fe5ce": "AgriChainType()", +"e9900714": "sendIBTCToken(address,uint256)", +"e991ae55": "valid_weights(int256[],uint256,uint256,uint256[])", +"e9922f12": "getCoinInfoFromId(uint16)", +"e992a041": "_setPendingImplementation(address)", +"e992ae5a": "INCXToken()", +"e992d8d8": "KNC()", +"e992f6cd": "pos(address[],uint256)", +"e99358a5": "TeamtokenRelease2()", +"e9938919": "EnterBetsForRaz(uint256,uint256[])", +"e9938e11": "getPricePerCoin(uint80)", +"e99392c0": "localsAvatar(bytes32,address,bytes32)", +"e993a9c0": "change_flag_hash(bytes32)", +"e993c056": "SaloniToken()", +"e9947583": "addAuditorToMultiRequestAssignment(uint256,address)", +"e995064e": "changeEmployee2(address)", +"e995194f": "transfer(address,uint256,uint256,int256)", +"e99543aa": "Trash(uint256)", +"e9958314": "getRequest(uint32)", +"e9959105": "setMintHelper(address,int256)", +"e99667ad": "OwnershipTransfer(string,address,address)", +"e99671ad": "movePermission(address)", +"e996ee88": "getItemStage(uint256,bytes32)", +"e9970b6c": "isLessThan(uint256,uint256)", +"e99718d8": "addressOf(address,bytes32)", +"e9986f90": "activeStarGenome(address)", +"e9989220": "viewShareholderListing(uint256)", +"e998d2fa": "revokeVerification(address)", +"e998db2a": "directMessage(uint8,string)", +"e99a7a72": "createCeleb(string,uint256,address,uint256[6],uint256[6])", +"e99a7dca": "lastCampaignID()", +"e99b9ab7": "getProposalCreatedOn(address,uint256)", +"e99d2866": "setSeller(address)", +"e99d2db4": "universalToken()", +"e99d7333": "BlitzCrypto()", +"e99ebee2": "dist_multiple_airdrop(address[],uint256)", +"e99ed199": "getAddressLiquidatePool()", +"e9a05055": "newMerchant(address,string)", +"e9a0dd77": "cancelBid(bytes32,int32,bool)", +"e9a158a6": "currentETHPrice()", +"e9a1e689": "PreICO(uint256,uint256,uint256,uint256,address,address)", +"e9a241cc": "checkRoundsNumberToRun()", +"e9a24e24": "userlength()", +"e9a3773c": "setBotContract(address)", +"e9a3f454": "setAgriChainSeal(string)", +"e9a51c0d": "call1(uint256)", +"e9a5605d": "WheelOfFortune(uint256)", +"e9a58c40": "fun(uint256,uint256)", +"e9a59b32": "participantRoundAmount(address,address,uint256)", +"e9a5c776": "THETOKEN()", +"e9a62ba6": "MEGAMALLCOIN()", +"e9a6cce4": "getClaimKeysCount()", +"e9a6fdc3": "addressAt(bytes,uint256)", +"e9a765eb": "checkICOStatus()", +"e9a76ff7": "getInputName(uint256,uint256)", +"e9a78a1e": "decodedNonce()", +"e9a8bae6": "getArray(string)", +"e9a909a2": "setOraclizeAddrResolverI(address)", +"e9a9c1b4": "get_party1_balance()", +"e9a9c50c": "redeemTokens()", +"e9aa80b1": "contributorsAddress()", +"e9ab04a8": "hatchEgg(uint256,string)", +"e9ab1bd7": "True()", +"e9ab77e5": "getTimes()", +"e9ac31f2": "msgdata()", +"e9ac5918": "whatDidJasonSay()", +"e9ad1b38": "findAddressByEndpoint(string,int256)", +"e9ad72d7": "_canLotteryFree(address)", +"e9aeb932": "dUpgradeToPremium(bytes32)", +"e9afa7a1": "signedApprove(address,address,uint256,uint256,uint256,bytes,address)", +"e9afad38": "getTotalVesting()", +"e9b00581": "LogStartWeek(string)", +"e9b04e69": "addSourceForBudget(uint256,uint256,string,bool)", +"e9b07bbf": "transfer(address,uint256,bytes,bytes)", +"e9b0c0e1": "adminContractSecurity(address,bool,bool,bool)", +"e9b18084": "Diary(address,bytes)", +"e9b1f1ce": "updateRandomSource(uint256)", +"e9b23b8b": "updateLeaderboard(address,address)", +"e9b29a9d": "setAPI(address)", +"e9b2f0ad": "unfreezeTokens(address,uint256)", +"e9b32a3f": "HOUSE_EDGE_DIVISOR()", +"e9b3fd39": "TradeBox()", +"e9b48288": "insertMessage(string,bool)", +"e9b4a028": "payAirdrop(address[],uint256)", +"e9b54840": "viewReferral(address,uint256)", +"e9b58225": "extDestroyBot(uint256)", +"e9b5a2f7": "firstWithdraw()", +"e9b62f13": "lastBlock_f4()", +"e9b6953b": "team1Token()", +"e9b85cf4": "SimpleOwnedStorage(string)", +"e9b93569": "OwnerGetFee()", +"e9b991cc": "refundPct()", +"e9ba267e": "distributeETHP(address[])", +"e9ba2e9b": "Storage(uint256)", +"e9ba77fb": "receiveToken()", +"e9ba8698": "TheBillionCoinCash()", +"e9bacc1a": "freeBalances(address)", +"e9bb4aac": "WaltonTokenLocker(string,address,address,uint256)", +"e9bb84c2": "transferEth(address,uint256)", +"e9bbc19e": "Example3(string)", +"e9bc13b8": "_createCanvasInternal(address)", +"e9bc63f7": "getSellInfo(uint256)", +"e9bc9598": "totaltransactions()", +"e9bce432": "yetAnotherTransferTo(address,uint256)", +"e9bd48b8": "VLTToken()", +"e9bd97dc": "getData_24()", +"e9bdab6a": "tips(address,bytes32)", +"e9bec833": "setCrowdsalePause(bool)", +"e9bf42b8": "existenceName(address)", +"e9c003d2": "indexOf(bytes32[],bytes32)", +"e9c1a9c4": "ProcessGame(address,address,bool,uint256)", +"e9c24166": "executeRequest(bytes32)", +"e9c26893": "setValidDurationData(uint256)", +"e9c2fbd5": "Banned(string)", +"e9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", +"e9c33249": "ReceivedBTC(address,string,uint256,string)", +"e9c33dfe": "getHouseEdgeFee(uint256,uint256)", +"e9c35ea8": "universalCall(string)", +"e9c4a3ac": "dispatch()", +"e9c54384": "doesContractImplementInterface(address,bytes4)", +"e9c63b9c": "requestPeerBalance()", +"e9c64ad7": "evRecord(address,uint256,string)", +"e9c6c176": "addBlock(uint256,uint256,bytes32)", +"e9c6ed11": "withdrawNomins(uint256)", +"e9c714f2": "_acceptAdmin()", +"e9c771f2": "KBItoken()", +"e9c801e1": "refundInternal(uint256)", +"e9c9262e": "_productExists(uint256)", +"e9c93ce7": "cbtFundDeposit()", +"e9c9db5c": "ICOcontroller()", +"e9c9f4e0": "_finalizeFailure(uint32,string)", +"e9ca9b2a": "phase1StartingAt()", +"e9cac389": "onlyWhitelistedCanDoThis()", +"e9cafac2": "deleteArray()", +"e9cb364f": "lastTip(address,bytes32)", +"e9cbd678": "_resetBalanceDivis(address)", +"e9cddb1d": "EARLY_BET_INCENTIVE_COMMISSION()", +"e9ceef50": "createCanvas()", +"e9cf287a": "sellerGuaranteeEther()", +"e9cfa745": "calculateNetworkTokenBonusAmount(uint256,uint256,uint256,uint256,uint256)", +"e9cfb399": "SoupToken(string,string)", +"e9d16224": "maxFundedValue()", +"e9d1c598": "isEligibleForAirdrop(address)", +"e9d1d700": "assertFunction()", +"e9d1e422": "JZCoin()", +"e9d36c56": "transferredAmountToReceive(uint256)", +"e9d41d48": "getAuthorizationDataSource()", +"e9d56d2e": "releaseDividendsRightsForce(address,uint256)", +"e9d5d43b": "getWinnerByDrawBlockNumber(uint256)", +"e9d724e5": "changePreIcoEndDate(uint256)", +"e9d7d79a": "SRNT_per_ETH()", +"e9d7f309": "addRemainingTokens()", +"e9d862b0": "_updateTokensAvailable(uint256)", +"e9d8d3d7": "MAX_CONTRIBUTION_DURATION()", +"e9d8dbfd": "isService(address)", +"e9d979dd": "CioCoinERC21Token(uint256,string,string,uint256)", +"e9d9c4a9": "devTokenTimelock()", +"e9d9d5ec": "releaseBBT(address,uint256)", +"e9da12ab": "ATRToken()", +"e9db5d79": "Steak()", +"e9db5f5a": "addSpecialAccount(address)", +"e9db787b": "cancelStack(bytes32)", +"e9dc0614": "vote(bytes)", +"e9dc2e49": "createItem(uint256,uint256,uint256,uint256,uint32)", +"e9dc438e": "confirmAllSells()", +"e9dd7b6c": "getUID(uint256)", +"e9de432f": "testGasPrice()", +"e9de5c0f": "gen(bytes32,uint256)", +"e9de78fd": "TestRobotarCrowdsale()", +"e9deb98c": "presaleConcluded()", +"e9dff847": "withdrawMatingRequest(uint256)", +"e9e04195": "GEEKSID()", +"e9e041f3": "getTotalWeightedContribution()", +"e9e22362": "setWinPercent(uint256[])", +"e9e2990e": "bankManager()", +"e9e2c786": "returnMessage(uint256)", +"e9e30746": "withdrawBankroll(address,uint256)", +"e9e30997": "awardMiniGameAirdrop()", +"e9e32bfb": "firstLevelPrice()", +"e9e3b1cf": "checkAuthenticity(string)", +"e9e43eef": "getLLV_edit_10()", +"e9e44349": "hashLicenseTerms(bytes32,bytes32)", +"e9e48842": "token_unlock_time()", +"e9e48880": "BOUNTY_AMOUNT()", +"e9e55c71": "PRESALE_LEVEL_1()", +"e9e61da5": "updatePolicy(bytes32,address,uint256,uint256,uint256,uint256,bool)", +"e9e69a48": "getCurrentPageSize()", +"e9e7a667": "get_stake(bytes32)", +"e9e7e908": "BlockOfLifeToken(uint256,string,string)", +"e9e972d9": "fileLink()", +"e9e98e76": "WSKYCoin()", +"e9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", +"e9e9b5bc": "setIntF1F2(int256,int256)", +"e9ea666b": "test_remove_singleNode()", +"e9eaa69b": "sweepToOwner()", +"e9ebeafe": "greet(bytes32)", +"e9ec42e6": "getConsistency(uint256)", +"e9ec9e8b": "renounceBurner()", +"e9ecc0cf": "getInvestorsTokens(address)", +"e9ecd32b": "RajTest()", +"e9ed8281": "getDiniRequest(uint256)", +"e9ed8667": "balanceLocks(address)", +"e9ed9b64": "setProposer(address,bool)", +"e9edd759": "CCoinToken()", +"e9edf4cd": "hardwareWallet()", +"e9ee6eeb": "transferAdmin(address,address)", +"e9ef5318": "_isValidLandID(uint8)", +"e9efdd6b": "getByFrom(uint256,uint256)", +"e9f0509f": "Commit(uint256,address,bytes32)", +"e9f0ee56": "addPrice(uint256)", +"e9f12ed3": "itemsByName(string)", +"e9f1c4c3": "f2(uint256,uint256)", +"e9f21537": "setUint(bytes32,bytes32,uint256,bool)", +"e9f29b7b": "setTokenUriPref(string)", +"e9f2dbfb": "makeCommitment(uint256,bytes32,address,address)", +"e9f3b9ee": "triggerSteal(uint32,uint256)", +"e9f4043f": "buyTokens(address,uint8)", +"e9f50b02": "_transferHelper(address,address,uint256)", +"e9f58a52": "rotate_left(uint256,uint256)", +"e9f6af47": "getZethrTokenBankroll(uint256)", +"e9f6bd0b": "numberOfDays()", +"e9f702f2": "createDiamond(string,address,string,string,string,string)", +"e9f84c5b": "ClearToken()", +"e9f88ca5": "ICHAINToken()", +"e9f89121": "getWeeklyJackpot(uint32)", +"e9f8cd70": "addTokenPair(address,address,uint256,uint256,uint256,uint256)", +"e9f90fe6": "listPokemons(address)", +"e9f998ce": "checkInventory(uint256)", +"e9f9d8e2": "unidentifyParticipant(address)", +"e9fa6277": "updateMasks(uint256,uint256,uint256,uint256)", +"e9fa65aa": "updateNextStealTime(uint32)", +"e9fad716": "itemPrice(address,address,uint256,uint256)", +"e9fad8ee": "exit()", +"e9fb078e": "setFreeTime(uint256,uint256)", +"e9fca283": "buy(uint256,bytes32)", +"e9fcc787": "buyCoinsAtICO()", +"e9fd3434": "Cedex()", +"e9fd4e1f": "setAllowCnsContract(bytes32,address,bytes32,bool)", +"e9fd74dc": "create(string,string,uint8,uint256,address,string,address)", +"e9fe799e": "registrantRemove(address)", +"e9fee16f": "refundAll(uint256)", +"e9ffd6de": "allBlockCoordinates(uint256)", +"e9ffdf28": "Erc20Dist()", +"ea00a289": "getStateofContractString()", +"ea00cdb2": "DrazenToken()", +"ea00fad4": "callSender(address,bytes4)", +"ea011db4": "isCustomerHasKYCfromWL(address)", +"ea014645": "PTYC(uint256,string,string)", +"ea020f7b": "WindToken()", +"ea0217cf": "setVotingPeriod(uint256)", +"ea02db0f": "communityPoolAddress()", +"ea03918c": "AGC(uint256,string,string)", +"ea03c115": "getFunctionType()", +"ea045f34": "CROSS_RESERVE_FTX()", +"ea048256": "PROCOIN()", +"ea049958": "stakeScale(address,uint256)", +"ea05667a": "maximumPurchaseFraction()", +"ea0570e0": "convertToBytes32(uint256)", +"ea0599c7": "buyIt()", +"ea05cd01": "addCarProduct(string,uint32,uint32,uint32,uint32,uint32,uint256,uint256)", +"ea061e77": "changeNeat(address)", +"ea06ad02": "postBuyTokens()", +"ea071ac0": "depositShares()", +"ea083b86": "contract_enabled()", +"ea08bb89": "creatureCosts(uint8)", +"ea08ec2c": "accountModifiers(address)", +"ea0930f2": "_currentTime()", +"ea0a5237": "announce(string)", +"ea0a73d2": "TokenGMCT(uint256,string,string)", +"ea0a93e2": "miningLeader()", +"ea0aee14": "BuyStockRocketEvent(address,uint32,uint32,address)", +"ea0d0015": "_bill_all_participants()", +"ea0d1027": "calculateSumToWithdraw()", +"ea0d1702": "verifyEscrowCustomer(uint256,address)", +"ea0d18b0": "CurrenXToken()", +"ea0d5dcd": "getUserStatus(address)", +"ea0d6ad2": "setErrorROFR(bytes)", +"ea0d8da4": "amountReserved()", +"ea0d98aa": "changeParticipants(uint256)", +"ea0f5449": "Transaction(bytes32,address,address,uint256,uint256)", +"ea107240": "deleteRegionData(uint256)", +"ea10b18f": "withdrawMainDivi()", +"ea10d246": "get_orders_sell_amount(address)", +"ea110eda": "setOraclizeGasLimit(uint256,uint256)", +"ea112b6c": "updateCrowdsaleAddress(address)", +"ea116243": "_setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", +"ea118590": "vote_proposed_address(string)", +"ea11e00e": "LogMatchingEnabled(bool)", +"ea1325be": "createTokenUri(uint8,uint8,uint64,uint64)", +"ea135eeb": "computeSha3(uint256[16],uint256[8])", +"ea14457e": "emitRecovery(address,address,address)", +"ea149ab5": "bank2Val()", +"ea14bc11": "box1Star5()", +"ea15f262": "ETHEREAL()", +"ea1642f8": "getManyBalances(address[])", +"ea16c148": "isIcoAgent(address)", +"ea16cee5": "migratestate()", +"ea177073": "nextMaxPlay()", +"ea18e3d5": "getFreeSword()", +"ea19efb5": "startVoting(bytes32)", +"ea1a20d5": "shareholdersWallet()", +"ea1a9537": "IOBSTestToken()", +"ea1b28e0": "maxStake()", +"ea1bbe35": "getIndex(string)", +"ea1bf386": "getNextSellerBOTdata(uint256)", +"ea1c0379": "maximumAllocationPerParticipant()", +"ea1c1690": "timestampToDateTime(uint256)", +"ea1c41be": "RxEALSaleContract()", +"ea1cf495": "ImagodeiToken()", +"ea1d64b8": "startPostIco()", +"ea1da8b9": "updatePresaleMinWei(uint256)", +"ea1df439": "timestampFirst()", +"ea1e4c2d": "Transaction2()", +"ea1e572b": "addOrderBasicFields(uint256,address,uint256,uint256,bytes32)", +"ea1e74ef": "withdrawEtherToIfPossible(address,uint256)", +"ea1eaecb": "buyMinersWithGem(uint64)", +"ea1ecff4": "sendByTranches(bytes32[],address,uint256[],bytes)", +"ea1f2954": "transferSnowflakeBalance(string,uint256)", +"ea1f4082": "RGXToken(string,string,uint256,uint256,uint8)", +"ea1f9b3e": "NoxonInit()", +"ea2028b7": "changeSaleHardcap(uint256)", +"ea212b1e": "withdrawRequest(address,bytes32)", +"ea217d4d": "logSaleStart(uint256,uint256)", +"ea21c6be": "find_and_or_register_user(address,address)", +"ea21d12d": "deleteUncompletableRequest(bytes32)", +"ea222fde": "getAmbientLightControlLimits(bytes32)", +"ea22ee15": "LOG_EmergencyWithdrawalVote(address,bool)", +"ea23c473": "scheduleUpgrade(address,string,string,bytes32,uint256)", +"ea2470ab": "priceLocked()", +"ea251c2f": "owner_BurnUpdateTokenFrom(address,uint256)", +"ea25415a": "getAcceptedGames()", +"ea25f24a": "TokenCreation(uint256,uint256,address)", +"ea26b575": "Eth_Collected()", +"ea273277": "setAyantDroitEconomique_Compte_8(uint256)", +"ea274a6b": "processBuy(address,uint256)", +"ea27a881": "getMinimumEndowment(uint256,uint256,uint256,uint256)", +"ea28baee": "getRealWorldPlayerRosterIndex(uint128)", +"ea295ec2": "calcRevenue(address)", +"ea29a210": "TokenVesting(address,uint256,uint256,uint256)", +"ea2a31fc": "NMK()", +"ea2a33fc": "getInitialREPSupply()", +"ea2a9599": "callThisToStart()", +"ea2bc862": "optionDescription(uint256,uint256)", +"ea2c23da": "createAccounts(uint256)", +"ea2c2f36": "doubleBonus(address)", +"ea2c4357": "newTokenUnlockPercent(uint256)", +"ea2c69d1": "Marijuaneum()", +"ea2ce651": "isTokenUpgrader()", +"ea2d4cf8": "__DeployerFunctions(address,address,uint256)", +"ea2da598": "NLToken()", +"ea2e34f2": "isTransformAgent()", +"ea2ea847": "testChallengeFinalize()", +"ea2f28d3": "countWeeks()", +"ea2f43c3": "currentIncreaseWithdrawalTeamBallot()", +"ea2f9ebe": "retrievePoolFee(uint256)", +"ea2fe1a2": "nay()", +"ea3015b8": "burnUnusedTokens()", +"ea304511": "changeParameters(uint256[],uint256[],uint256[],uint256[])", +"ea30e2e6": "XiaoMuMuToken()", +"ea316027": "creditWalletUserLMNO(address,uint256)", +"ea317f6d": "setdissolveprice(uint256)", +"ea31b291": "getCreatorByTrackId(uint256)", +"ea31c53c": "_openGameLoop()", +"ea31ccb6": "rICO(address,address,address)", +"ea31d56b": "mintTrusted(address,uint256)", +"ea326431": "Neulaut()", +"ea32a8f4": "addshares(uint256,address)", +"ea32c95e": "EMPTY_PUBLIC_KEY_ID()", +"ea3367ae": "divMasterAmt()", +"ea337cdb": "batchChangeHoldPeriod(uint256)", +"ea33dd24": "developer_increase_prices(uint256,uint256)", +"ea341309": "catsRemainingToAssign()", +"ea348da6": "FuckERsToken33()", +"ea352634": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"ea359082": "End4()", +"ea35df16": "unlockBlock()", +"ea35e805": "calculateWinner()", +"ea364a9a": "addSingleApprovedAddress(address,address,uint8)", +"ea36ad91": "transferERCXTokenInitiation(string,address,address,uint256)", +"ea383176": "month30Allocated()", +"ea391420": "endIcoRound()", +"ea3b3a91": "recoverAddress(bytes32,uint256[3])", +"ea3b9ba1": "enter(uint256,address)", +"ea3bd5df": "purchase(uint256,uint256,address)", +"ea3c281a": "removePartner(address)", +"ea3d2827": "selectWinner(string)", +"ea3d4109": "rateIsStale(bytes4)", +"ea3d508a": "selector()", +"ea3d7e2c": "getOraclizeGas()", +"ea3d895f": "vestingBonusMultiplier()", +"ea3ebae6": "getConfigBool(bytes32)", +"ea3f190e": "devFee2(uint256)", +"ea3f6ce0": "joinGroupAndInvest(uint32,address)", +"ea4061cc": "calculateToFund(address,uint256)", +"ea4099e4": "QuantumPigBlockchain()", +"ea40c9e7": "ARCHETYPALXToken()", +"ea414b28": "setTaxWallet(address)", +"ea41bca5": "doStake(address,uint256,uint256,address,address)", +"ea42418b": "settlementContract()", +"ea428bad": "ACLYDcidTOKEN()", +"ea4354dc": "totalDividendWinners()", +"ea43671d": "watchPercent()", +"ea439e10": "transactionRawToBytes(uint256,address,address,uint256,bool,bool)", +"ea43b069": "PRIVATE_SALE_TOTAL()", +"ea43b79f": "unhaltDirectTrade()", +"ea448370": "setUserEmail(string)", +"ea454da8": "WonderDogToken(uint256,string,uint8,string)", +"ea46193e": "getEtherBalance()", +"ea46336b": "ShiversToken(uint256,string,uint8,string)", +"ea4634a7": "MarginlessCrowdsale(address)", +"ea46d7b9": "TACOS()", +"ea470d33": "voteForAnswer(uint256,address,bool)", +"ea4796b9": "revertIfReturnLessThanMinAndDie()", +"ea47cb24": "ownerAccount()", +"ea486cb1": "moderList()", +"ea490b84": "ethereumForkArbiter()", +"ea49ac03": "allScamsForSale()", +"ea4a294f": "addCard(uint256,uint256)", +"ea4a6aad": "LogQuantity(uint256,string)", +"ea4af029": "ConferenceCertification()", +"ea4afc54": "reserves(address,address)", +"ea4b466b": "admin_deposit(int256,int256)", +"ea4b9dce": "getLastBetNumber()", +"ea4ba8eb": "getOutcome(bytes)", +"ea4c4388": "createCredit(uint256,address,uint256)", +"ea4cc26d": "CryptoPayment()", +"ea4cc7eb": "divvy(uint256,address,uint256)", +"ea4ce239": "totalSale()", +"ea4dfce9": "benAddress()", +"ea4e6ded": "getListOfSupportedTokens()", +"ea4ef51f": "relockPart(address,uint256,uint256,uint256,int256)", +"ea4efa5d": "ganeshrajToken()", +"ea4f0882": "clearVolumeDiscounts()", +"ea503429": "privateSaleWallet()", +"ea5136a1": "adminUpdateSettings(address,address)", +"ea515c98": "pgoUnlockedLiquidityWallet()", +"ea51b3d6": "allocateOwnership(address)", +"ea51c343": "verifyLoanOffering(address[9],uint256[7],uint32[4],bytes32,bytes)", +"ea520b18": "totalDrop()", +"ea5213e1": "removeExternalContributor(address)", +"ea5366c1": "set_contract2address(address,address)", +"ea56a44d": "changeUpgradeMaster(address)", +"ea57712a": "SetFreeMKI(uint256)", +"ea57d818": "EmilToken()", +"ea5815f5": "getDatesForUser(address)", +"ea584ee6": "changeFreeZombiewCount(uint16)", +"ea58c644": "EUSD()", +"ea58c955": "powerDayRate()", +"ea58ca03": "DATE_01_JUN_2018()", +"ea593025": "giveKarma(uint256,string,string)", +"ea595672": "_transfer(address,address,uint32)", +"ea596a34": "EBIT()", +"ea598cb0": "wrap(uint256)", +"ea599cb3": "totalAward()", +"ea59a4e8": "GetPlayer_FromAddr(address,uint8)", +"ea5a13aa": "coindropsTokens()", +"ea5a22eb": "mintax()", +"ea5b2ae2": "checkIsWinner(uint256)", +"ea5b561f": "guardian1Vote()", +"ea5c204b": "MecStandardToken(uint256,string,uint8,string)", +"ea5c3204": "foundersAmount()", +"ea5ea470": "payFunding(uint256)", +"ea60e4ab": "Yusuf()", +"ea60e79b": "preICOLimit()", +"ea612545": "setBorrowAgreement(uint256,uint256,string)", +"ea62f24c": "unlockTeamAdvisorsPartnersTokens()", +"ea636aca": "setNinjaContract(address)", +"ea63ceb6": "allowAccount(address,bool)", +"ea64ad37": "totalUserTransfered()", +"ea64aee5": "GameBidAccepted(address,uint256,uint256,uint256,bytes,bool)", +"ea64faca": "init(string,string,address,uint256,uint256,address,uint256,address)", +"ea650378": "getTokenIDRelateWithTx(bytes32)", +"ea650c7d": "tokenToExchangeSwapOutput(uint256,uint256,uint256,uint256,address)", +"ea663631": "openTimerElapsed()", +"ea66543f": "isEmployee(address)", +"ea669a8a": "setTusdRegistry(address)", +"ea6723cd": "usdMnr()", +"ea680080": "firstAuctionsReferrer()", +"ea681932": "weiWantedOf()", +"ea6825aa": "VieToken()", +"ea6955e5": "ownerWithdrawUnspentCredits()", +"ea6a49ea": "setBetPrices(uint256[])", +"ea6b1377": "MAXTOKENSOLD()", +"ea6b8243": "switchOwnerTo(address)", +"ea6be96f": "estimateTokens(uint256)", +"ea6c1258": "setFSTKCentral(address)", +"ea6c9750": "transferToInvester()", +"ea6ca182": "addAgingTimesForPool(address,uint256)", +"ea6cc6e9": "delayedTokenAllocator()", +"ea6dee80": "addKey(address,address)", +"ea6ef2fe": "teamShare()", +"ea6f0725": "initCompoundContract(address,uint256,uint256,uint256)", +"ea6f1c4a": "sponsorLevel()", +"ea6f67e1": "SingularityTes26()", +"ea6f7f3e": "addAllValidShaHashes()", +"ea7000d6": "buyTokens(bytes32)", +"ea70b4af": "pendingCount()", +"ea70bdad": "attackTileForExistingUser(uint16,uint256,bool,bool)", +"ea726acb": "getReferrerAddr(address)", +"ea727ba2": "changeInterest(uint256[])", +"ea72d9de": "SENS_PER_ETH_BASE_RATE()", +"ea737b54": "getCompte_42()", +"ea74329c": "tokensRemainingPreCrowd()", +"ea74838a": "setControllers(address[])", +"ea7553f0": "vault_wallet()", +"ea75d311": "isBuyOrder(bytes32)", +"ea760a6b": "kkICOTest80()", +"ea760df8": "partner1_vows()", +"ea769e97": "changeTradeState(bool)", +"ea76a36f": "Mahjongcoin()", +"ea770a4c": "getNewCoinsIssued(uint256,uint256,uint256)", +"ea773d9e": "blink()", +"ea77d01a": "buyWarriorChest(uint256)", +"ea77ffd8": "consumeDiscount(uint8,uint8)", +"ea780bf2": "overloadedMethod(address,uint256,string)", +"ea782500": "curr_number()", +"ea7858f5": "player_cancelGame(uint256)", +"ea7873db": "addCompany()", +"ea794ef4": "constructWeaponTokenIdForWinner(uint256,uint256)", +"ea79dd79": "equal(bytes32,bytes32,string)", +"ea79f33d": "uniquenessIndex()", +"ea7a0142": "setRemark1(string)", +"ea7a7184": "testGetBalanceDb()", +"ea7b5df3": "pecunioTokenBalance()", +"ea7c2115": "lookupKittyDetails2(uint256)", +"ea7cabdd": "checkAllOwner(uint256[],address)", +"ea7ceaf7": "stopRefunds()", +"ea7f4d27": "right13(uint256)", +"ea7f537a": "percentOfGoal()", +"ea7f7a59": "finalizeLottery(uint256)", +"ea7f9244": "getRank08()", +"ea801802": "AviaC01n()", +"ea8037d6": "batchEscrowToTeamContract(address,uint32[])", +"ea8118ba": "Trustcoin(address)", +"ea8269f4": "balanceAddress(address,address)", +"ea82fa2a": "VestingScheduleConfirmed(address,address,uint256,uint256,uint256,uint256)", +"ea830cde": "getSendIndex(uint256)", +"ea83add4": "DoTrade(address,address,uint256,address,uint256,address)", +"ea842e65": "deleteTeam(uint256)", +"ea8466dc": "LBQ(uint256,string,string)", +"ea84a6cd": "memberShare(uint256)", +"ea84bfee": "update(address,bool)", +"ea851885": "buyStake(bool)", +"ea85b367": "create(address,int256,address,address)", +"ea85b581": "Deadpool2RottenorFresh()", +"ea85c7ac": "getOriginalSpinnerPrice(uint256)", +"ea863e62": "JorgeToken()", +"ea87003c": "setRenamingCosts(uint256)", +"ea871246": "LOW_RANGE_RATE()", +"ea87152b": "register(string,uint256)", +"ea879634": "getCode()", +"ea87a0aa": "updateItemsPrices(uint256[],uint256[])", +"ea88246d": "Transction()", +"ea885b55": "UNDERWAY_STATUS()", +"ea89c6bc": "TrackChain()", +"ea8a0a23": "PlotTerrainUpdate(uint256,uint256,address,uint256,bytes32)", +"ea8a1af0": "cancel()", +"ea8a4305": "Zigicoin()", +"ea8a66c7": "absoluteMinTimeLock()", +"ea8ab096": "XEV()", +"ea8acb67": "_transferToContract(address,address,uint256)", +"ea8af87d": "sumPreICO1()", +"ea8b03c2": "innerGuess(uint256,uint256,uint256,address)", +"ea8b3e9f": "setFlag(string,uint256)", +"ea8b4627": "playerLastScoredGame(address)", +"ea8b5ca3": "isContractExpired()", +"ea8b73df": "createEthCommunityTokenAndMint(string,uint8,string,uint8,uint256)", +"ea8c1516": "isBlockedAccount(address)", +"ea8d103f": "transferFundToAccount(address)", +"ea8dc8d0": "buyTicket(uint256,uint8)", +"ea8e84a1": "RecoveryEvent(string,address)", +"ea8eb4be": "blockingDuration()", +"ea8eee87": "updatePrivateExhangeRate(uint256)", +"ea8ef515": "airdropSameAmount(address[],uint256)", +"ea8ef6be": "getBranch()", +"ea8f6691": "mintSpecificCard(address,uint8,uint256)", +"ea903c78": "setEndStage3(uint256)", +"ea905308": "LogSaleCapReached(uint256)", +"ea90ad7e": "FAUT()", +"ea91ec69": "TokensReleased(uint256,uint256,uint256)", +"ea91f8c7": "showMyTokenBalance()", +"ea920b2b": "betSummary()", +"ea92c2d0": "usd2wei(uint256)", +"ea92dd1d": "withdaw(uint256)", +"ea932954": "withdraw_token(address,uint256)", +"ea9362de": "maxMintingTime()", +"ea93a324": "getCreateShareTokenCounter()", +"ea941538": "TradeExecute(address,address,uint256,address,uint256,address)", +"ea94c696": "distributeAmount(address[],uint256)", +"ea94eaa2": "CreateTokenByAtes(address,uint256,string)", +"ea95e4d8": "BreezeCoinICO()", +"ea961d78": "decreaseTokensMulti(address[],address,uint256[])", +"ea963a21": "ReconCongress(uint256,uint256,int256)", +"ea9707a3": "getCaptainIndexToCount(uint32)", +"ea9746a2": "FNTCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,address,address)", +"ea983f7f": "Alfacoin()", +"ea985057": "BountiesMinted(address,address,uint256,uint256)", +"ea98847b": "withdraw2()", +"ea988ebd": "mine1000(uint256)", +"ea98de9f": "runDividendPayment()", +"ea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", +"ea98fcf9": "tokenForBounty()", +"ea9960d8": "participate(bytes32[],bytes32[])", +"ea996c9c": "approvedRewardSources(address)", +"ea99e689": "withdrawFeeRate()", +"ea9a3eb5": "AFWToken()", +"ea9ac537": "emitExchangeFeeUpdated(uint256)", +"ea9ae72e": "setPosTokens(uint256)", +"ea9b4be5": "Rearden()", +"ea9b6025": "burnTimeChange()", +"ea9c2859": "CurrentGoldPercentIncrease()", +"ea9c3bb3": "ico2_startdate()", +"ea9c8e63": "addSmartContracts(address[])", +"ea9ce8fd": "redeemToken(bytes)", +"ea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", +"ea9e372f": "withdrawImpl(address,address)", +"ea9eb855": "setWLMTPrice(uint256)", +"ea9f0c4c": "Partial20Send()", +"ea9f4968": "withinLimit(uint256)", +"ea9fa768": "newWeiController(address,address,uint256,bool)", +"eaa0e760": "automaticWithdrawLoop(uint256,uint256)", +"eaa1f9fe": "reqisterListening(address)", +"eaa26f0f": "withdrawal_delay()", +"eaa2b2f6": "kill(string)", +"eaa2f447": "BelottoCoin(address)", +"eaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", +"eaa382c2": "isMintingManager(address)", +"eaa40283": "getNewsContractAddress()", +"eaa4077a": "SetICOPhase(address,uint256,uint256,uint256,uint256,uint256)", +"eaa42a15": "_setSnapshotStakeAmount(uint256,address,address,uint256)", +"eaa47de2": "RickAndMortyShrimper()", +"eaa4d4c2": "tokenallowance(address,address)", +"eaa59c74": "rejectShipping(uint256,string)", +"eaa5dd76": "set_prod(uint256,uint256,string,string)", +"eaa61dc2": "changeLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"eaa61e91": "BagpackicoToken()", +"eaa643d5": "StandingOrder(address,address,uint256,uint256,uint256,string)", +"eaa8e6d8": "LifeFactor_iii()", +"eaa968cc": "closeBet()", +"eaa9b9a7": "timestamp_ack()", +"eaaad8e9": "masterKeys(address)", +"eaabd05e": "setTokenSwarmHash(address,bytes32)", +"eaac77a7": "priceTokenWeiPreICO()", +"eaac77ea": "supply_cap()", +"eaacc753": "verifyHolder(address,string)", +"eaae46e5": "clearClaims(uint32)", +"eaae7b7e": "sendable(address,uint256)", +"eaaf2489": "_registerContributors(uint256,address)", +"eaaf88c1": "setTeleportContractAddress(address)", +"eaaff394": "getListing(uint64)", +"eab07d42": "GetDayCount(uint256)", +"eab15085": "setData_9(string)", +"eab184b8": "JLCToken()", +"eab228b9": "PRE_ICO_TIER_LAST()", +"eab23779": "validateAndGetTransferFee(address,address,address,uint256)", +"eab27a7c": "getMigrateInReporterValue()", +"eab2d378": "setPauseMode(bool)", +"eab4fb18": "THIRD_PARTY_LOCKUP()", +"eab5cd84": "createHONtokens(address)", +"eab65fb2": "EmpAgreements(address)", +"eab88624": "lockMoney(address,uint256,uint256)", +"eab8d67b": "GetPlayerAt(uint256)", +"eab9eb2d": "sellGrapes()", +"eabbcb4b": "startIco(uint256,uint256,uint256,uint256)", +"eabc8b8e": "canBeBidden(uint256)", +"eabd11af": "RandomNumGenerated(uint64)", +"eabd5dd6": "superman()", +"eabd94ba": "tryUnlock()", +"eabd9e60": "BlackNWhite()", +"eabdd572": "withdrawDAI(address,uint256)", +"eabe09ad": "addr1()", +"eabe7d91": "redeemAllowed(address,address,uint256)", +"eabf1ce3": "Approved(address,address,uint256,string)", +"eabf4240": "mintableTokenAddress()", +"eabffab6": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256)", +"eac037b2": "tierBudget()", +"eac046ce": "AFFBToken()", +"eac116c4": "createKingdom(string,address,address,address,address)", +"eac12cae": "stage1Tokens()", +"eac1e58f": "PRICE_BTCS()", +"eac24932": "setEarlyParicipantWhitelist(address,bool)", +"eac257dc": "StandardTokenImpl()", +"eac2f8d9": "MultiOwnable(address)", +"eac34569": "redeemLottery(uint256)", +"eac38f75": "_rotateRight(bytes32)", +"eac3e799": "target1()", +"eac449d9": "revoke(address,uint256)", +"eac471a0": "cycleLength()", +"eac472bf": "p_setDevPercent(uint256,uint256)", +"eac48278": "mintToFounders()", +"eac50c47": "setOnSale(uint256,bool,uint256)", +"eac533e1": "privateSell2Token()", +"eac5426f": "setOwnTheDayContract(address)", +"eac58572": "transferDuringIntialOffer(address,uint256)", +"eac5a89d": "checkWhitelisted(bytes32,bytes)", +"eac5ab43": "verifyModule(address,bool)", +"eac60b27": "AddTag(address,string)", +"eac66cd8": "getNumberContracts()", +"eac80b2d": "changeVariables(uint256,uint256)", +"eac8221e": "previousRoundsCount()", +"eac8f5b8": "getAsset(uint256)", +"eac9d94c": "averageGen0SalePrice()", +"eaca7a0f": "setBaseTokens(address,address)", +"eacb05d8": "Total_ICOSupply()", +"eacb6c08": "addressToSubscriberCount(address)", +"eacba6c7": "setFounderUser(address)", +"eacbc236": "emitTransferToICAP(address,address,bytes32,uint256,string)", +"eacbe9ca": "removeDeal(bytes16)", +"eacc25e7": "Team_Wallet()", +"eacc501a": "setTransferFeeReceiver(address,address)", +"eacc5b3b": "safeSend(address,uint256,uint256)", +"eaccb2e8": "transferOperationsFunction(address)", +"eacccaf0": "setReward(address,uint256)", +"eacd2141": "ReasignTokens(int256,int256)", +"eacd2ff3": "addCar(string,address,uint256,uint256,uint256,bool)", +"eacde2cb": "tokenIdByIndex(uint256)", +"eace4827": "player_make_bet(uint8)", +"eaced5b7": "setSoldTokens(uint256)", +"eacf7d8a": "MAX_EXPIRE_DELAY()", +"eacfb78a": "getServerName(uint256)", +"eacfc0ae": "Authorized()", +"ead0327d": "getNickName(address)", +"ead04e44": "addressIsSplitter(address)", +"ead0f75a": "capFinalized()", +"ead17f58": "bonusWindow3EndTime()", +"ead1ed5b": "registerPayment(address,uint256,uint256)", +"ead2a439": "getUniqueAddressByIndex(uint256,address)", +"ead2bfdc": "getGamePrize(uint256)", +"ead2fba4": "setApprove(address,address,address,address,uint256)", +"ead3a1de": "QYQ(uint256,string,string,address)", +"ead3c2cf": "multiMint(int256,address[],uint256[])", +"ead490ad": "recoverLeftoversICO()", +"ead491ac": "getMarketDataByTokenIdx(uint256)", +"ead4c32c": "dividendCalculation(uint256)", +"ead4faaf": "Starmid(uint256,string,string,uint8)", +"ead50da3": "frequency()", +"ead5d359": "withdraw(address,uint256,bool)", +"ead710c4": "greet(string)", +"ead81e86": "addCourse(uint256,uint256,string,string,string)", +"ead956c1": "_orderTokens(address,uint256,uint256)", +"eada8645": "GetSchool(uint256)", +"eadb2481": "TransfersEnabled()", +"eadb6e84": "startRitual()", +"eadb6fa9": "deleteAccountsInBulk(address[])", +"eadb80b8": "ownerOfChild(address,uint256)", +"eadc56d2": "betting(uint256)", +"eadcbf39": "MFTcreator()", +"eadd2f91": "distributionTwo(address)", +"eadd94ec": "usdRaised()", +"eadd9c8d": "CabChain()", +"eadddb3c": "getRoomCount()", +"eaddf568": "WhitelistAddressRemoved(address,address)", +"eaddf7b9": "getNextImageId()", +"eadf1f39": "lastBlockRewarded()", +"eadf4672": "checkScope(address,address)", +"eadf6258": "updateRound()", +"eadf9760": "setUint(bytes32,string,uint256)", +"eae00565": "getVotesResult()", +"eae19df4": "tokenReceived()", +"eae3d479": "createItem(uint256,uint256,uint256,uint256)", +"eae445ed": "masternodeInfo(uint256)", +"eae45561": "setWhitelistedBatch(address[])", +"eae4c19f": "deployedAt()", +"eae4e5ce": "getPersonalAirdropAmount(address,address)", +"eae5a62d": "getProposedOwner()", +"eae6754a": "totalEthDeposited()", +"eae70d5e": "setprize(address,uint256)", +"eae7236f": "transferBack(uint256)", +"eae81c37": "getDeployedGames()", +"eae8675d": "getCompanyToken(uint256)", +"eae8a3d6": "setMigrate(address)", +"eae8cf88": "Zitron()", +"eae903e3": "CreatePayroll(address)", +"eae9dbec": "RESERVED_BUSINESS_GROUP()", +"eaea25ec": "blockSubsidy(uint256)", +"eaeb83a2": "User_4()", +"eaec3fc8": "addCantonEmployee(address)", +"eaec75aa": "finalizeBuyback()", +"eaecfca7": "changeBackend(address)", +"eaed2210": "TransactionCancelled(address,uint256,string,address)", +"eaefea72": "addStringTag(bytes32,bytes32)", +"eaf03fc5": "withdrawFromFeeBalance()", +"eaf0ded9": "presale_price_in_wei()", +"eaf16303": "DYC(uint256,string,string)", +"eaf18c45": "setTTMTokenAddress(address)", +"eaf214ea": "changeTxnTax(uint256)", +"eaf2402d": "_getStartIndex(uint64)", +"eaf2a5ef": "itemNum()", +"eaf39a14": "setCustomBonus(uint256)", +"eaf4170c": "implementsSaleClockAuctionListener()", +"eaf4181a": "stopPortalGunAndRick()", +"eaf4438f": "SuperEdge()", +"eaf44931": "TokenReturned(address,uint256)", +"eaf49a82": "numAnimalsXType()", +"eaf4b6df": "allocate3ProjectToken()", +"eaf5815a": "recoverAddr(bytes32,bytes)", +"eaf59375": "returnUnsoldSafe()", +"eaf626c2": "Set(bytes32,address,address,uint256)", +"eaf6d212": "getCertificateSince()", +"eaf7e325": "getNumItems()", +"eaf82213": "getContributionsForAddress(address)", +"eaf8294b": "fundTransfer(uint256)", +"eaf86db3": "isSellingState()", +"eaf8b774": "getAllbetByNum(int8,int8)", +"eaf9144a": "addWhitelister(address)", +"eaf97475": "disableAutoReinvest()", +"eaf98d23": "FEE_PERCENT()", +"eaf994b2": "mintReputation(uint256,address,address)", +"eaf9d194": "updateNameAndSymbol(string,string)", +"eafac339": "ICOendtime()", +"eafb2b7a": "setMembershipType(address,uint256)", +"eafb704f": "majorEventFunc(uint256,bytes32,bytes32)", +"eafc99a7": "frenzyContract()", +"eafde28c": "unwrapEth()", +"eafe5eec": "joinGameWithBalance(uint256)", +"eaff425a": "MIN_JURORS()", +"eaff4b37": "FundsWithdrawn(address,uint256)", +"eaffb3f9": "rebond(uint256)", +"eaffd429": "getOrganisations()", +"eb0030b3": "Paydata(address,uint256,bytes,uint256)", +"eb009642": "mapInvestors(address)", +"eb00f20e": "utilityAccount()", +"eb0166d9": "AccountBalance(string,string,uint256,string,string,uint256,uint256)", +"eb01d83b": "getBidAmount()", +"eb01f42d": "KOIOSTokenPreSale(address,uint256,uint256,uint256,uint256,address)", +"eb0207e3": "hPayMultiSig()", +"eb02c301": "getPosition(uint256)", +"eb03085b": "set_bonus_received()", +"eb0331d5": "destroyAccount()", +"eb03791b": "BastetToken()", +"eb03db73": "suicideFunds(address)", +"eb03e351": "purchased_snt(address)", +"eb03fb71": "winningValue()", +"eb045789": "ChannelSeries(address)", +"eb04c36c": "fundingRaised()", +"eb04df1d": "setRNGCallbackGasConfig(uint256,uint256)", +"eb053fad": "calc(bytes4,bytes32,uint256,address,bytes24)", +"eb05920e": "func_2(string)", +"eb05bfc0": "disableSaleOwner(address)", +"eb0616e5": "gimmePizza()", +"eb068fe5": "F0001Token()", +"eb06980f": "userAtIndex(uint256)", +"eb06e65e": "allowanceFromProxy(address,address,address)", +"eb06ec32": "rewardTaskCompletion(uint256,address)", +"eb08aa3b": "preSaleAddress()", +"eb08b304": "changeMeatProvider(address)", +"eb08dbfc": "emitBurned(address,uint256)", +"eb09ad46": "EthernautsExplore()", +"eb09b5bc": "FUNCToken(uint256,string,string)", +"eb0a70c1": "hasVersion(string)", +"eb0bfa38": "setRegionPrice(uint16,uint256)", +"eb0c9e5a": "verifySignature(address,uint256,uint8,bytes32,bytes32)", +"eb0db6ac": "setChemistryAddress(address)", +"eb0e9240": "checkNumber(uint256)", +"eb0eea61": "Securities_4()", +"eb0f2100": "sweep(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"eb0f46cc": "revokeAccessMint(address,address)", +"eb0f4b33": "numOwnershipStatuses()", +"eb0f5186": "_determineDefence(uint256)", +"eb0fb0a3": "setTokenToOwner(uint256,address,bool)", +"eb1098b8": "packLimit()", +"eb10b4bd": "getSettingDeprecation(uint256)", +"eb11dd7b": "squirrelReq()", +"eb121e2f": "update(uint256,uint256[101][])", +"eb1257c5": "create(int256,int256)", +"eb12d61e": "addSigner(address)", +"eb12fd82": "setRates(address[],address,uint256[])", +"eb12fef5": "nAddressLog()", +"eb1301a2": "addAddressToUncappedAddresses(address)", +"eb142e36": "_setUserInfo(address,uint64,uint256,address)", +"eb14367d": "layEgg(uint64)", +"eb14b353": "setGenesis(address)", +"eb14f53e": "batchTransferEther(address[],uint256[])", +"eb15d21b": "QiToken()", +"eb1635ed": "getMintingPrice(uint256)", +"eb18747a": "getGoldStatusCode(address)", +"eb18ebdf": "product4()", +"eb18fbe7": "setPreIcoEnd(uint256)", +"eb195635": "IQT_DECIMALS()", +"eb1ab91b": "AtomicSwap(address,uint256,bytes32,uint256)", +"eb1bb9d9": "hybridizationListSize()", +"eb1c6e6b": "getRiskLimits()", +"eb1cae39": "EvNewPrice(uint256,uint256)", +"eb1cfa82": "setMaxDrops(uint256)", +"eb1d380e": "callContractFunctionByAddress(address,string,address,address,uint256,uint256,bool,string,bytes32)", +"eb1d74c8": "UpdatedBonusAccount(address)", +"eb1de3e5": "ICDStopTime()", +"eb1e2cd9": "getPlayerAccountBalance(address)", +"eb1ea5be": "clearTracks()", +"eb1ebd93": "BLS_TOTAL_CAP()", +"eb1edd61": "FEE_ADDRESS()", +"eb1f9c78": "HasDelegateAuthority()", +"eb1fa690": "queryVestingRemain(uint256,uint256)", +"eb1ff845": "changeId(uint256,uint256,uint256)", +"eb222098": "ProGenTech()", +"eb229f1e": "totalSupplyFromInventory()", +"eb230b2d": "bobClaimsDeposit(bytes32,uint256,bytes32,bytes20,address,address)", +"eb239d9a": "timeAdjustNeg()", +"eb245d91": "custodianTransfer(address,address)", +"eb24ffdd": "getCountriesData(uint256[])", +"eb26df0a": "updateDiscounts(uint256[],uint256[])", +"eb28615e": "createCommunityToken(string,uint8,string,uint8)", +"eb28d249": "setMissions(uint256,uint16)", +"eb28ddcf": "_isTAOSignatureAddressValid(address,address,address,uint256)", +"eb290e12": "Mimicoin(uint256,string,string)", +"eb295b27": "getChannelId(address)", +"eb29d9ea": "transferWithEther(address,uint256)", +"eb2a783e": "canBuyExistentToken(uint256)", +"eb2a7c4a": "freeLottery(uint256)", +"eb2b381a": "toDecimals(uint256)", +"eb2b6e95": "PUNDI()", +"eb2bab77": "increasePot()", +"eb2bdbab": "getBUU(bytes32,uint256)", +"eb2bef47": "BetterAuction(address,address,address,uint256,uint256)", +"eb2c0223": "upgradeContract(address)", +"eb2c118a": "ExtTokenPurchase(address,address,uint256,uint256,uint256)", +"eb2c6a19": "setInvestorWhitelist(address,bool)", +"eb2c8408": "setOrganizationDescription(string)", +"eb2c87a4": "partner2_vows()", +"eb2cf098": "get_data_item()", +"eb2f3038": "buyout(address,uint256)", +"eb2f4817": "requestAccess()", +"eb2f8696": "_getCurrentSecret()", +"eb2ff2d2": "softCapPreSale()", +"eb3087bf": "buyFci(address,uint256)", +"eb30db7b": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,string)", +"eb30f57d": "maxEthToRaise()", +"eb31f3d0": "Zoltan()", +"eb321173": "claimStake()", +"eb32cf9b": "saleExchangeRate2()", +"eb338f4e": "raiseMaxNumInterests(uint256)", +"eb343301": "registerCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", +"eb34967a": "gameGeneration()", +"eb34c173": "firstAuctionsStartDate()", +"eb34fa12": "CurrentTLSNProof(address,string)", +"eb357e99": "payment_time()", +"eb35a849": "getSignerby()", +"eb36622d": "readBytes32(bytes32)", +"eb36d549": "WINR()", +"eb36f8e8": "stringToBytes64(string)", +"eb3721be": "getMarketOrder(uint256)", +"eb37df4f": "getGiftsByTemplateId(uint256)", +"eb37ec99": "seasonTopSalesRemain(uint16)", +"eb381429": "mint(int256,uint256,bytes32)", +"eb38615b": "setLiveTx(address)", +"eb39bc90": "setPropertyColors(uint16,uint256[5])", +"eb39f443": "startMintingDate()", +"eb3a2345": "setFunding(bool)", +"eb3a733f": "responseOptions(uint256)", +"eb3a867b": "LogVote(bytes32,bool,address)", +"eb3a88dc": "lockupTokens(address,uint256)", +"eb3b0ab3": "setFeeLocked(bool)", +"eb3b41be": "OrderFulfilled(uint256,uint256)", +"eb3b6891": "throwsWhenTransferingDuringSale()", +"eb3beb29": "silo()", +"eb3c8d7d": "changeMaximumValueWithoutProofOfAddress(uint256)", +"eb3cd55c": "setEveryBidFee(uint256)", +"eb3d032d": "FAPFundDeposit4()", +"eb3de344": "whitelistInvestor(address,string,string)", +"eb3f1b61": "allocateAngelWheelFinanceToken(address[],uint256[])", +"eb3f2427": "plainPay()", +"eb3fa926": "manager_()", +"eb3fee82": "setCompte_16(string)", +"eb40a9c8": "setRecommenderAllow()", +"eb41fbca": "changeTargets(uint256,uint256)", +"eb42b0cb": "payBeneficiaries()", +"eb4435a3": "Github()", +"eb4439fb": "enableVoting()", +"eb446ad8": "WHITELIST_SUPPLIER()", +"eb4475a1": "reducerunmoney(address,uint256)", +"eb44bb04": "frozenPool()", +"eb44dd5d": "preSale5Finished()", +"eb44fdd3": "getMarket(uint256)", +"eb455dc6": "sendBitcoin(string,uint256)", +"eb464316": "TOKENSALE_BLACKLIST()", +"eb46a11a": "setInvestorId(address,bytes32)", +"eb470ebf": "getTimeStamp(address)", +"eb473fc7": "alreadyAvailedOffer(address,address)", +"eb49168f": "getIntervals(bytes32,uint256)", +"eb496a80": "exploitMe(bytes8)", +"eb4999f4": "ticket1price()", +"eb4a2935": "getScribes()", +"eb4b41b2": "disableAmbassadorMode()", +"eb4b8091": "payWinners(address[20],uint256[20])", +"eb4be616": "CanBaoToken()", +"eb4c5593": "FREEZE_END()", +"eb4c5ab9": "createShapeShiftConversionPost(string,string)", +"eb4c9ae7": "claimUpdateToken()", +"eb4d0e32": "redemptionFund()", +"eb4dd8f2": "confirm(address)", +"eb4defcb": "returnCoupon(address[2],uint256[7],uint8,bytes32[2])", +"eb4df824": "getOwnItemCount(address)", +"eb4e64d6": "amendAgreement(string)", +"eb4eecec": "altarFund()", +"eb4f16b5": "addStake(uint256)", +"eb4f17e7": "saleProceedsEtherAllowStale(uint256)", +"eb4f54b2": "TokenRUSD(uint256,string,uint8,string)", +"eb4fe500": "logoVote()", +"eb502d45": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"eb5068f2": "exitWallet()", +"eb50849e": "setCanAcceptTokens(address,address,bool)", +"eb508932": "lastPayouts(uint256)", +"eb51e2e4": "_popularitySetting(uint256,uint8)", +"eb51e575": "getNextPrizePool()", +"eb5230d7": "ETHERFUNDME_FEE()", +"eb52835b": "nextShareTime()", +"eb52e404": "adminTrade(uint256[8],address[4],uint8[2],bytes32[4])", +"eb531996": "getConversation(address,address,uint32)", +"eb53367a": "delABaddress(string)", +"eb533750": "extLockNinja(uint256,uint16)", +"eb5392ff": "Leonardo()", +"eb53a9a3": "getInitializeNumTicksValue()", +"eb53d273": "getServerNb()", +"eb55b2a3": "replaySweep(address[],address)", +"eb56105d": "marketSize()", +"eb5625d9": "safeApprove(address,address,uint256)", +"eb5653d7": "tokenIdToApproved(uint256)", +"eb570b05": "currentSalePriceInWei()", +"eb57d309": "TenantTerminateMisrep(string)", +"eb581c8f": "ScudoCoin()", +"eb58705b": "_performTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"eb5904c0": "setProfitDistributionContract(address)", +"eb59ec82": "setLastMint(address,uint256)", +"eb5a458e": "unregisterByList(address[])", +"eb5a662e": "getAllowance(address)", +"eb5a7033": "getPrefixedHash(address)", +"eb5ae7ad": "set_stop(bool)", +"eb5b135b": "tFinalized()", +"eb5b62b4": "BOPToken(address,uint256)", +"eb5ba3b4": "polyTokenAddress()", +"eb5ba56e": "creator_tablets_count(address)", +"eb5baebf": "MAX_SUPPLY_DECIMAL()", +"eb5bbef8": "withdrawInternal(uint256,bool)", +"eb5bdda0": "allocateAdvisorTokens(address,uint256,uint64,uint64)", +"eb5ce181": "Sample()", +"eb5dd1e3": "shouldPass()", +"eb5dd94f": "updateController(bytes32,address)", +"eb5ea1c0": "RemovePoolCoOwner(string,address)", +"eb5edde3": "bonusPreICO()", +"eb5f2cf8": "InsertCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", +"eb60082b": "profitsSendable()", +"eb601c70": "Vogeldubastardtoken()", +"eb605e9f": "hasPlayerWagered(address)", +"eb60764f": "getDayCount()", +"eb60c5d7": "DadsToken()", +"eb60e2c7": "setCountPlayersInPosition(uint256)", +"eb614fc7": "locked_allocation()", +"eb6157f7": "Abloxx()", +"eb6192a9": "getMTUBal(address)", +"eb62a013": "Offer(address,address,bytes32,uint256,uint256,uint128,uint256)", +"eb62df61": "acceptOffer()", +"eb639fd0": "luckyPot()", +"eb63e140": "getBuyPriceAfterTax()", +"eb63eadd": "setValue(uint256,uint256,uint256)", +"eb6443a3": "getIntelsByProvider(address)", +"eb64922b": "sendTeamTokens(address)", +"eb64d3e0": "TokenDrain(address,address,uint256)", +"eb64d5ce": "getUnitsStealingCapacity(address,uint256,uint256)", +"eb65a2c7": "crownDecimals()", +"eb663cf2": "LOOMIA_REMAINDER()", +"eb665994": "_0xBitcoinToken()", +"eb6779d4": "test_oneFalseAssert()", +"eb67cee8": "contractSize(address)", +"eb680744": "nextCheckpoint()", +"eb6855e3": "BossToken()", +"eb685867": "withdrawForFourYear()", +"eb685c47": "setTokenPrice(uint256,uint256)", +"eb68b4c7": "sellAura(uint256)", +"eb68ce95": "processRegisterUser(address,address,address)", +"eb6a145b": "extractPartsFromGene(uint256)", +"eb6b192f": "ownerByAddress(address)", +"eb6bbd78": "getUserImages(address)", +"eb6bce5e": "makeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,address)", +"eb6c4bc8": "monsterIdToGeneration(uint256)", +"eb6d509e": "Test(uint8)", +"eb6d9fb5": "constructOwned()", +"eb6dc7c4": "processBurn(address,uint256)", +"eb6ecc03": "triggerTokenFallbackIfNeeded(address,address,uint256)", +"eb6ed29a": "setCanGetMoneyBack(bool)", +"eb6f80f1": "setPreferredSaleTLYperETH(uint256)", +"eb700331": "getLockTokenSupply()", +"eb70095d": "showVault()", +"eb701349": "updateHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"eb70696e": "YiWenTest2(uint256,string,string,uint256)", +"eb7085cb": "teamReserveTokens()", +"eb70bc86": "BountyFulfilled(uint256,address,uint256)", +"eb70e13e": "_unpackStrengthValue(uint256)", +"eb70e498": "observer()", +"eb712a48": "etherTransfer(uint256,address[])", +"eb71b7e4": "prepayProposal(address)", +"eb727714": "trustNet()", +"eb73900b": "Whitelist(address)", +"eb7402f5": "multiAccessHasConfirmed(bytes32,address)", +"eb7492d1": "testTotalSupply()", +"eb74fa0b": "BCAClubCoin(uint256,string,string)", +"eb7550d8": "manualFinishGame(uint256)", +"eb75c410": "getOffer(address)", +"eb75dc03": "TOKEN_PRESALE_CAP()", +"eb76174e": "calcProfitInvestorForRead(address,uint256)", +"eb76607d": "creationCap()", +"eb7698e2": "RaffleBitcoinBook(string,uint256)", +"eb770d0c": "setEntryFee(uint256)", +"eb780d3c": "SMILO_FOUNDATION_AMOUNT()", +"eb782d8c": "ContentSeries(address)", +"eb78a26d": "blackFundsWallet()", +"eb78a2af": "checkrespond(uint256,address)", +"eb794dd7": "addBlack(address)", +"eb795549": "safeTransfer(address,uint256,bytes)", +"eb799177": "gasOraclize()", +"eb79ec7c": "withdrawStocks()", +"eb7a10b1": "test_36_assertGasUsage2000Boards()", +"eb7a6471": "getPersonalAirdrop(address,address)", +"eb7a7241": "last_mint()", +"eb7b7006": "getRefundInfo(address)", +"eb7bb9fb": "CrowdsaleHardCapReached(uint256)", +"eb7bdc37": "withdrawSfowns(address)", +"eb7c244d": "amount5kUsdInCents()", +"eb7c6525": "ZbzStandardToken(uint256,string,uint8,string)", +"eb7c6f72": "step6()", +"eb7cdb56": "rankDown(uint256,uint256)", +"eb7db21b": "flip32(bytes32)", +"eb7ea41b": "showLastGlobalAuditTime()", +"eb7f3905": "tradeWithTips(uint256[10],address[4],uint256[10],bytes32[4])", +"eb7f4c0d": "CrowdsalePorto(address,address)", +"eb7fabd7": "getMax(uint64[])", +"eb800846": "setLLV_edit_18(string)", +"eb807339": "getRiskId(uint256)", +"eb80b3d1": "raceDistCon()", +"eb810864": "addTokensMulti(address[],address,uint256[])", +"eb8136f3": "stockTokens()", +"eb81e95a": "controllerBurn(address,bytes32,uint256)", +"eb8222eb": "spendMoney()", +"eb823572": "ProfitContainerAdapter(address,address,address)", +"eb8266b5": "addNumberToDynamicBytes(uint256)", +"eb829aef": "MPTToken(address,address,uint256,string,uint8,string)", +"eb83e2b5": "receiveApproval(address,uint32,address,bytes)", +"eb83f015": "castleContract()", +"eb845c17": "gen0AuctionDuration()", +"eb846c6f": "ReferrerReward(address,uint256)", +"eb854131": "mbtcToUsd(uint256)", +"eb8571c8": "trans(address,address,uint256)", +"eb85c61e": "GUIDEToken()", +"eb85d999": "IVE()", +"eb869b8b": "Scheduled(uint256,uint256)", +"eb87073a": "verifyImages(bytes32,uint256,uint8,uint256,bool)", +"eb87ec01": "newStatus(address)", +"eb880380": "checkCooSeed(uint32)", +"eb886568": "signatureCheckerFreezed()", +"eb88d688": "createCommitment(uint256)", +"eb88e84d": "LatiumSeller()", +"eb89022e": "endDate1()", +"eb8ac921": "test(uint256,uint256)", +"eb8b12d4": "PLATFORM_WALLET()", +"eb8ba66c": "insertStage(uint8,uint256,uint256)", +"eb8bbd28": "getTotalFunds()", +"eb8cad45": "doMarriage()", +"eb8cb983": "LogPauseICO()", +"eb8d2444": "saleIsActive()", +"eb8d3321": "start_PRIVATESALE()", +"eb8e1660": "getPlayerOption()", +"eb8eea15": "totalMainSaleTokenIssued()", +"eb8fa486": "contributionInCauldron(uint8,address)", +"eb8fb32c": "setPercentageToKill(uint8)", +"eb8fb3ec": "getConstraint(bytes32,address,address)", +"eb90450f": "getFirstBuyerAddress(uint256)", +"eb907398": "changeSoftCap(uint256,uint256)", +"eb90fff8": "blockContract()", +"eb91385a": "UnauthorizedAccess(address,bytes4)", +"eb91b5ac": "ALUXToken(uint256,string,string)", +"eb91d37e": "getCurrentPrice()", +"eb9220ab": "updateRent(uint256)", +"eb9253c0": "seize(address,uint256)", +"eb931024": "passKYC(address)", +"eb935e70": "bigbrother()", +"eb93c515": "burnUpdateToken(uint256)", +"eb944e4c": "revokeTokenGrant(address,uint256)", +"eb947f19": "ExampleResourcePool()", +"eb94eecb": "isContributionAllowed()", +"eb95264c": "consolationRewardsPercent()", +"eb95b7d5": "Bounty(address,address)", +"eb95d4e6": "purchaseTokens(uint256,address,address)", +"eb95f0bf": "getCurRoundId()", +"eb965c5e": "Orientation(bytes32[])", +"eb967a2a": "refundsClaimed()", +"eb968ac7": "change(address,int256)", +"eb96ada7": "gameUnpause()", +"eb975390": "lockedTokenTransfer(address[],uint256[])", +"eb9763ed": "transferby(address,address,uint256)", +"eb981fea": "withdrawFromToken(uint256)", +"eb987ca7": "placeBet(address,uint256,string)", +"eb98c8d6": "getGoldsSinceLastCollect(address)", +"eb990c59": "initialize(address,address,uint256,uint256)", +"eb9969a8": "getAllBalance()", +"eb9a5211": "DonationMatched(address,address,uint256)", +"eb9aec0a": "oraclizeIds(uint32)", +"eb9af834": "removePolicy(uint8,uint256)", +"eb9bc6ff": "partyCount(address)", +"eb9c9708": "SisterToken(uint256,string,string)", +"eb9df7db": "updateContractOwner(address)", +"eb9e0398": "mint(int256,uint256,address)", +"eba0184f": "issuable()", +"eba052e7": "RefreshChipUnableList(uint8)", +"eba068ce": "addBountyForHunter(address,uint256)", +"eba2a91b": "superMintBulk(address[],uint256[])", +"eba36dbd": "setAddr(uint256,address)", +"eba37aff": "nrMeasurements()", +"eba37dbd": "getAllReportersDisputeBondToken()", +"eba38402": "finishEvent(address,uint256)", +"eba3cdfe": "bundle(address,uint256)", +"eba4ae3b": "NewDungeonFloor(uint256,uint256,uint32,uint128,uint256)", +"eba56302": "tier1Total()", +"eba60632": "drawNow()", +"eba66dc9": "JOTUNSupply()", +"eba6a307": "getQuotePrice()", +"eba74c0b": "updateCodeWeight(string,uint256)", +"eba898a0": "_authenticate(string,uint256)", +"eba9a4a8": "DiamondBond()", +"ebaa32f3": "submission_stage_block_size()", +"ebaa4470": "getOwnerAuctions(address)", +"ebaac771": "write(string)", +"ebab43e4": "isPreSaleTime()", +"ebabfb0b": "volumeType6()", +"ebac0a56": "fillGoldBuyOrder(address,uint256,uint256)", +"ebad6612": "m_ETHPriceInCents()", +"ebaddea7": "unlockAccounts(address[])", +"ebadfd3d": "checkGivenAway()", +"ebae35a6": "DAOTokenCreationProxyTransferer(address,address)", +"ebae46be": "finishFunding()", +"ebae743b": "addCET6To(address,uint32,uint32)", +"ebae7bf1": "addHpbNode(address,bytes32,bytes32,bytes32)", +"ebaf0e74": "dInit(address,bool)", +"ebaf7f2f": "returnReward(uint256)", +"ebafefb1": "makeInitAccount()", +"ebb045fa": "PublicResolver(address)", +"ebb05f9c": "setItemApproveForAll(uint256,bool)", +"ebb0a856": "leastSwap()", +"ebb0e631": "dtGetCityData(address)", +"ebb11c93": "_build(address,uint256,bytes)", +"ebb1b7ed": "apiAuthorized()", +"ebb1dc21": "ERC20ByteCode()", +"ebb240ef": "ExampleUpgradeable23Token(address,uint256,bytes32,bytes32,uint256)", +"ebb31418": "disableTicker()", +"ebb32c65": "FooAbi(address)", +"ebb332be": "getFunStr()", +"ebb3fd8d": "kingdomName()", +"ebb44389": "bulkMintVested(uint256,address[],uint256[])", +"ebb4ac3c": "ForwarderFactory(address,bytes32,address)", +"ebb4f484": "ROLE_SUPERUSER()", +"ebb5a996": "setUsdLockAccountThreshold(uint256)", +"ebb5f11c": "explore(uint256,address,bool)", +"ebb689a1": "clearAll()", +"ebb6b338": "certifiedPartner()", +"ebb6c59f": "right72(uint256)", +"ebb6dc3a": "returnEther()", +"ebb71194": "withdrawFees(bytes32)", +"ebb741cb": "getChannelSize(uint256)", +"ebb75afc": "debugLog(string,uint256)", +"ebb85502": "GAME_START_TIME()", +"ebb88b97": "getABaddressByName(string)", +"ebb8c22c": "Win(address,uint256,uint256,uint256,uint256)", +"ebb940e6": "BuyBackContract()", +"ebb9ab25": "moveState(uint256,uint256)", +"ebb9b466": "phase_5_Time()", +"ebb9ba80": "calculateRewardForLevel(uint8,uint256)", +"ebba1400": "setIntegerValue(uint256)", +"ebba5184": "WuZeFoundation()", +"ebbaa1fc": "AdvancedToken()", +"ebbb76c8": "LongTermProjectTokens()", +"ebbbe00b": "testNopUnroll16(int256,int256,uint256)", +"ebbc4965": "acceptOwner()", +"ebbc9543": "_getPersonalAirdropUnlockTimestamp(address,address)", +"ebbe05d0": "setMinWeiAmount(uint256)", +"ebbf2f6a": "PixelColor(uint16,uint16,address,uint24)", +"ebbfb637": "Registered(bytes32,uint256,address)", +"ebbfb994": "startTokenSale(uint256,uint256)", +"ebbfcfef": "tomoDepositAddress()", +"ebc04649": "ChangeDatabase(address)", +"ebc16c5c": "getDrugsSinceLastCollect(address)", +"ebc1b4f1": "ForexCoin()", +"ebc20426": "minCapWei()", +"ebc26c95": "ToniToken()", +"ebc33c51": "minContrib()", +"ebc46fdb": "detachControllerForever()", +"ebc56c33": "_hardRequire(bool,bytes32)", +"ebc56eec": "set_allow_refunds(bool)", +"ebc58f62": "MSXAdvanced()", +"ebc59f32": "configPerShares()", +"ebc66bac": "Payreum()", +"ebc697d1": "testControlRestartNotOwner()", +"ebc6a661": "endICOStage2()", +"ebc6e332": "AuctionCreated(address,uint256,uint256,uint256,uint256,address)", +"ebc73e65": "setWaitingTime(uint256)", +"ebc824a2": "killItWithFire()", +"ebc8b934": "add_player(bytes32)", +"ebc97c36": "advisorsPeriodsNumber()", +"ebc98117": "getUserId(uint256)", +"ebcbee16": "totalRaisedInWei()", +"ebcc0de1": "closingPrices(address,address,uint256)", +"ebcc8eb6": "ETHCONEarlyBirdDonation(address)", +"ebcc9a31": "ICOweek2End()", +"ebccb566": "Halo3DPotPotato(address)", +"ebcd8d8a": "setStarInitialPrice(uint256)", +"ebce79ff": "enableBlacklist(address[])", +"ebcfd89e": "AGCoin()", +"ebcfd922": "playerEther()", +"ebd03c55": "changePlatPrice(uint32,uint256)", +"ebd057fa": "owner_withdrawal(uint256)", +"ebd062de": "removeOwnerAddress(address)", +"ebd0f599": "asktoken()", +"ebd3d58a": "InitPeculiumAdress(address)", +"ebd4587d": "GetCourseCode(uint256)", +"ebd46d64": "encodeTokenId(uint256,uint256)", +"ebd4d009": "TotalFloatingInt()", +"ebd56581": "bitservice()", +"ebd58975": "sub2(uint256,uint256)", +"ebd66a9c": "MAX_ALLOWED_PRE_SALE()", +"ebd7cda4": "cTime()", +"ebd83378": "get_blocks_for(uint256)", +"ebd863ac": "DccbtcToken()", +"ebd8d7a0": "getRefReservedTokens()", +"ebd8fde3": "calculatePriceIncrease(uint256)", +"ebd9954c": "tgrStageBlockLeft()", +"ebda6686": "referrerLevel3Percent()", +"ebdac090": "depositFees(uint256)", +"ebdb6063": "lastIssuance()", +"ebdb730d": "weiPerFee()", +"ebdbc7d6": "CurrentTokenOwner()", +"ebdbd65e": "update_private_room(bytes32)", +"ebdcc8ac": "testrc(bytes32,uint8,bytes32,bytes32)", +"ebdd3f77": "triggerRecoveryAddressChange(uint256,address,bool)", +"ebde0bce": "MultiUser()", +"ebde609b": "LykkeTokenErc223Base(address,string,uint8,string,string,uint256)", +"ebdf0d5d": "endianConvert32bit(uint256)", +"ebdf86ca": "add(string,string)", +"ebdfa455": "joinedCrowdsalesLen()", +"ebdfd722": "whitelistEndTime()", +"ebdfe5ad": "picops_is_verified(bool)", +"ebe010b8": "_setStakeHolder(address)", +"ebe02377": "submissionPool()", +"ebe09a93": "getGoldTransaction(string,uint256)", +"ebe14170": "EdgelessToken()", +"ebe1df4f": "LLV_v31_4()", +"ebe22b12": "unsale()", +"ebe24dfd": "deployCtorContract()", +"ebe25056": "isWarlordChest(uint256)", +"ebe29383": "initializeSomeAddress(address,address,address)", +"ebe347d1": "lastTimeWithdrawal()", +"ebe36cb0": "read_price_floor()", +"ebe41b73": "deposit(uint8)", +"ebe4c0d1": "dividendsSumForUser(address)", +"ebe4c597": "VestingRevoked(address,uint256,uint256)", +"ebe599aa": "updateAppExec(bytes32,address)", +"ebe5a4b2": "toB32(bytes,address)", +"ebe5f590": "isJobHasFreelancer(uint256)", +"ebe64f97": "draw_random_card(uint8,uint8[])", +"ebe65f60": "withdrawOffer(uint256,uint256,bytes32)", +"ebe6ba07": "deprecateInterface()", +"ebe6f3cc": "setDappTokenContractAddr(address)", +"ebe749d3": "tokenLockTime()", +"ebe74b21": "PRE_SALE_30_ETH()", +"ebe771da": "setPercent5(address,uint256)", +"ebe7e852": "calculateResult(uint256,uint256,uint256)", +"ebe87ca4": "between(address)", +"ebe89597": "validate(uint256,bytes32,address,bytes32,bytes32)", +"ebe955fe": "simFrequency(bytes)", +"ebea3815": "setDays(uint256)", +"ebea3d30": "setFixedRate()", +"ebeac0c8": "marketCapBlue()", +"ebeac2b5": "reactivate(address)", +"ebead05f": "getOrderSharesEscrowed(bytes32)", +"ebeae1ad": "DrocoinCrowdSale()", +"ebeb0838": "delFromWhiteList(address)", +"ebeb0f48": "lockTotalSupply()", +"ebeb1b5e": "transferTokenToMultisig(address,address)", +"ebeb76bb": "assignMeta(string,uint256)", +"ebec7352": "numVideos()", +"ebec7752": "usableBalanceOf(address)", +"ebed561b": "engineRunning()", +"ebed7a95": "mineral2Shares(uint256)", +"ebedef1a": "approvalFallback(address,uint256,bytes)", +"ebef28aa": "BID_DELAY_TIME()", +"ebf04917": "tranches()", +"ebf056e3": "revoke(bytes32,address,bool)", +"ebf06bcb": "spawnSite(uint256,uint256,address)", +"ebf0c717": "root()", +"ebf0da65": "erc223()", +"ebf0e5f1": "SimplePriceFeed(address,address,address)", +"ebf1356e": "minMineSize()", +"ebf1a495": "sendEthTweet(uint256,bool,string,bool,string,uint256)", +"ebf31253": "getMoneyness()", +"ebf469dc": "issue(address,uint256,string)", +"ebf5128c": "mintUnICOLeftToken(address,address,address)", +"ebf522b8": "_newJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"ebf53e0e": "countAllCliDrm()", +"ebf59068": "exitOnHalt(address[],uint256[],bytes,bytes,bytes32)", +"ebf5cdfd": "jackpotGuard(uint256)", +"ebf652cc": "lockInTime1()", +"ebf6e91d": "hit(uint256)", +"ebf70010": "ChangeWhiteList(address,bool)", +"ebf701e0": "getAccountBalance(bytes32)", +"ebf76522": "selfDestroy(address,address)", +"ebf81d30": "_Withdrawal(bytes32,uint256,uint256)", +"ebf88de4": "removeHeir()", +"ebf89fa9": "withdrawPonzi(uint256)", +"ebf95043": "balanceOfMorty(address)", +"ebfa3c1b": "maxRandomRound()", +"ebfaacce": "uncappedBuyerList(address)", +"ebfb3630": "vernamCrowdsaleToken()", +"ebfd288a": "getVerifiedReceipt(bytes,bytes,bytes)", +"ebfd5b26": "addTokenTo(address,uint256,uint256,bool)", +"ebfda085": "LOOT()", +"ebfdc657": "foundersAddress()", +"ebfe0f39": "makeCoin(uint256)", +"ebfed9f2": "motionVoting(uint256)", +"ebff2602": "Withdraw(address,address,uint256,uint256,uint256)", +"ebff410d": "bonusAccountBalances(address)", +"ebff831f": "getFactories(address)", +"ebffd7e3": "getStage1Cap()", +"ec000bb5": "getPrizes()", +"ec003704": "getVestingStart(address,address)", +"ec005255": "boolToInt(bool,bool)", +"ec00d2a4": "frozenRecordsCount()", +"ec017820": "TransferToBTCoE(address,uint256)", +"ec01f75f": "initOperated(address)", +"ec0274ed": "CreateBatch(uint256,string)", +"ec0317ff": "AidCoin()", +"ec034bed": "donationAddress()", +"ec035393": "_getAllRevisionBlockNumbers(bytes20)", +"ec035aac": "bonusOver3ETH()", +"ec0373c6": "adminGetPlayerCount()", +"ec041a24": "getOrModifyBlocked(address)", +"ec0484ef": "roiEscrow(bytes32)", +"ec049219": "AtmanToken()", +"ec0493f7": "_populateTokenData(uint256,bytes16,uint256,uint32)", +"ec062ac0": "getMaxProfit()", +"ec066a4c": "ALLYToken()", +"ec0904f7": "releaseFor(address)", +"ec096f8d": "addTransaction(address,uint256,bytes)", +"ec0a0b50": "TOKENS_SUPPLY()", +"ec0a12d3": "JKToken()", +"ec0b3d21": "testThrowsIfPlaceholderIsBad()", +"ec0b3de4": "deletePetition(uint256)", +"ec0b4153": "getMoneyness(int256,uint256,uint256)", +"ec0b4207": "initCountTokens()", +"ec0b529f": "lockMinSiteTipPercentage()", +"ec0ba006": "countEgg(uint64)", +"ec0be13d": "Location()", +"ec0c6a72": "issue(bytes32,int256,string,bytes,uint256)", +"ec0cfd0b": "getProperties()", +"ec0d69e3": "train(uint256,bool,uint8)", +"ec0da0cd": "registerOptionPair(address,uint256,address,uint256,uint256)", +"ec0da330": "testSafeSub(uint256,uint256)", +"ec0de26e": "foundationTimelock()", +"ec0ea816": "breed(uint256,bool,uint256,bool,string,string)", +"ec0f1025": "testBitsOrSuccess()", +"ec0f60d9": "ICOcontributors()", +"ec1024d1": "censoredChatMessages(uint256)", +"ec10286d": "PointlessCoin(uint256,string,uint8,string,address)", +"ec109249": "RefundableAllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"ec112460": "_updateDistribution()", +"ec1182c2": "freezePrice()", +"ec11d0cf": "DeltaBalances()", +"ec12f1ef": "increaseMaxAvailableTokens(uint256,string,uint256)", +"ec1329c2": "makeProposal(address,uint8,uint256)", +"ec132ce3": "unconfirm(uint256)", +"ec13cc7b": "freeze(bytes32)", +"ec13df6b": "setExecutiveOfficer(address)", +"ec140a1f": "BTSJToken()", +"ec149de9": "Ethereumwhocoin()", +"ec14f974": "MAX_CARS()", +"ec1553d1": "mintCoin(address,uint256)", +"ec15afe1": "filmpaid()", +"ec15c6ba": "substring(string,uint256,uint256,uint256,uint256)", +"ec164625": "_clearTotalBonusTokensByAddress(address)", +"ec176dee": "weiToTokenFactor()", +"ec17a7a3": "addressSCICO()", +"ec17b20e": "setStartingBlock(uint256)", +"ec1847b6": "getWorkerIndex(address)", +"ec1893b4": "getProps()", +"ec18ca9c": "lastPresser()", +"ec18e2f1": "logInitialReporterRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", +"ec1938a8": "AddNewSegment(address,address,uint256,uint256,uint256,string)", +"ec1ad474": "removeFromWallet(address,uint256)", +"ec1b375a": "spardosenName()", +"ec1d9bf4": "isGoldRegistry(address)", +"ec1e4861": "assignWinnings(uint256)", +"ec1e6a4f": "tearDown()", +"ec1e74a7": "commitThreshold()", +"ec204f87": "_getTokenAmount(uint256,uint8)", +"ec20b457": "addInvestor(address,uint256)", +"ec20fc35": "populationIncrease()", +"ec216c34": "checkOwnerIndex(uint256)", +"ec21a913": "setUint256(int256,uint256)", +"ec22f94f": "getRedeemableReputationVoter(bytes32,address)", +"ec238994": "trustedTransfer(address,address,address,uint256)", +"ec23ba66": "Kapitalexote()", +"ec24aa01": "startPrivateSaleStage()", +"ec25adf4": "addtokens()", +"ec271be2": "charityWalletAddress()", +"ec277ce7": "Resilience()", +"ec27bdd3": "challengingInput()", +"ec27f6d8": "LegacyRepContract()", +"ec280bf6": "moreMinFunds(uint256)", +"ec28118e": "nextDiscountTTMTokenId1()", +"ec2929fb": "divbonus()", +"ec29781e": "deliveryId()", +"ec29ff7c": "getMaxiumInputEther()", +"ec2a4062": "setOpenBlock(uint256)", +"ec2ac54e": "deposit(address,uint256,bytes32,uint256)", +"ec2af44d": "test_oneValidEqBool()", +"ec2b189c": "GetURL(address,uint256)", +"ec2b50bf": "setUserLibrary(address)", +"ec2bb963": "openPrize()", +"ec2bcd22": "addressCanContribute(address)", +"ec2c28b4": "checkBuy(uint256)", +"ec2c8fec": "getEggsOff(address)", +"ec2c9016": "getMarkets()", +"ec2cdb87": "initialSaleComplete()", +"ec2ec781": "testFailGetUnsetToken()", +"ec2efe40": "MinPayment()", +"ec2f39b4": "isICOStarted()", +"ec2f81ac": "createGroup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ec300fcc": "MediChainToken(uint256)", +"ec309038": "canStart()", +"ec30ad95": "EthsqrCore()", +"ec30c4e3": "getPointsToSpend()", +"ec3178f9": "getMemesByOwner(address)", +"ec322a88": "tokenlenth()", +"ec32d68f": "xrateProviders(uint256)", +"ec32e4e8": "admin_inactive_withdrawable()", +"ec332488": "openForPublicTrade()", +"ec342ad0": "BASE()", +"ec343a97": "Rate4()", +"ec35576e": "GetProfitFunds()", +"ec3575ec": "soccer()", +"ec357c64": "getIsCoinReg(string)", +"ec36196e": "toSpread()", +"ec3743f1": "setTeamFund()", +"ec37a6e4": "logReputationTokensTransferred(address,address,address,uint256)", +"ec38027e": "MadToken()", +"ec384a3e": "tokenToExchangeTransferInput(uint256,uint256,uint256,uint256,address,address)", +"ec38e855": "mintOperations(uint256)", +"ec3a0489": "PAYToken()", +"ec3a6d64": "getGoodDecision(bytes32)", +"ec3a6f73": "numRegistrants()", +"ec3adf65": "editUser(bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", +"ec3af4a9": "getProjectKudos(address)", +"ec3bb11a": "maximumRaised()", +"ec3c155e": "ERC20TokenMock(uint256,string,uint8,string)", +"ec3d21e1": "kycPass(address)", +"ec3d45e8": "setMinParticipants(uint256)", +"ec3d5ffb": "stillAllowedReadable()", +"ec3f3636": "firstStage()", +"ec3f5d62": "withdrawRestOfBalance()", +"ec3fdf1d": "getExpiredAddressIndexes(address)", +"ec40c43d": "SmartPool(uint256,uint256,uint256)", +"ec40db16": "HedgeContract1(uint256,address,address)", +"ec412e00": "targetDiscountValue2()", +"ec42f82f": "finishIco()", +"ec439d67": "countAllUsers()", +"ec43eeb6": "getAddressOfId(uint256)", +"ec443813": "BytesToAddress(bytes)", +"ec449e67": "currentPriceInfoOf(uint256,uint256)", +"ec44acf2": "trading()", +"ec46009d": "EstateX()", +"ec4673d1": "approveWithdraw(uint256)", +"ec46bf8f": "emergency_withdraw(uint256)", +"ec47297e": "_CallCancelled(bytes32)", +"ec4754c6": "endetoken()", +"ec47a795": "getLockedStages(address)", +"ec47e7ed": "EtherWithdraw(uint256,address)", +"ec480557": "readTotalNumberOfPurchases()", +"ec486c23": "NewBToken()", +"ec4a79cf": "unlockaddress(address)", +"ec4aca2a": "bancorTradingContract()", +"ec4b48ad": "testCanDeposit(address)", +"ec4baa83": "StaticEthAvailable()", +"ec4bfdd4": "calculateOptionsComponents(uint256[9],uint32,uint32,bool)", +"ec4c76bb": "setInitialBuyoutPrice(uint256,uint256)", +"ec4cd0cf": "isSuccessful()", +"ec4d88d7": "usernames(bytes32)", +"ec4e530d": "_decodePriceData(bytes)", +"ec4eb442": "author(uint256)", +"ec4fb7a0": "totalTokensPresale()", +"ec4fd09d": "getEtherDog(uint256)", +"ec503611": "profitsSent()", +"ec505f58": "INDOCASH()", +"ec5134ca": "processStep()", +"ec51431f": "Unvault(uint256,uint256)", +"ec530de6": "countAddresses()", +"ec5325c1": "getDarknodes(address,uint256)", +"ec53589d": "FhnwCoin()", +"ec54a36a": "updateTimer(uint256)", +"ec54fa5e": "listCOFI()", +"ec556889": "proxy()", +"ec559176": "setEthBalance(address,uint256)", +"ec560828": "monarchyEndReward()", +"ec56a373": "contracts(bytes32)", +"ec56c6b0": "contracteventcount()", +"ec56eb93": "getComponentCount(uint256)", +"ec57e25b": "Magzia()", +"ec582a00": "IkuraStorage()", +"ec58b996": "encodeMessage(uint256,uint256,uint16[])", +"ec58f4b8": "addSolver(address)", +"ec591b20": "cancelSellCard(uint8)", +"ec59565f": "BinaryOptionV2(address,address,address)", +"ec597128": "addition()", +"ec5975c6": "getTokensReserve()", +"ec5a25e0": "WalletLibrary()", +"ec5aceab": "createOrder(address,address[3],uint256[5],int256)", +"ec5c71b3": "getChildIds(address,uint256,uint256)", +"ec5c9036": "Crowdsale(address,uint256,uint256)", +"ec5d9cc8": "balanceAvailableTokens(address)", +"ec5d9e58": "organisationName()", +"ec5dfaa2": "initHolders(address[],uint96[])", +"ec5dfb84": "bbBalance()", +"ec5ffac2": "minimumStake()", +"ec607f7d": "nextPeriod()", +"ec60bcf3": "burnFrom(address,address,uint256)", +"ec61c430": "YudiToken(uint256,string,string)", +"ec620eb3": "setClaimBlocks(uint256,uint256)", +"ec622892": "disableInvestment(address[])", +"ec62558d": "adminBurnToken(uint256)", +"ec62b216": "PRE_ICO_BONUS_PERCENTAGE()", +"ec647d42": "JESToken()", +"ec64f52f": "brag()", +"ec6507d7": "debug_transfer(address,address,uint256)", +"ec651551": "PVP(uint256,uint256,uint256)", +"ec653833": "totalAuctionItems()", +"ec654389": "tokenBountyAllocated()", +"ec654e38": "accident()", +"ec65b7a0": "FINALIZE(bytes32)", +"ec664694": "GooToken(uint256)", +"ec672cf6": "setAddressArray(bytes32,address[])", +"ec67abe4": "MOMCoin()", +"ec67e37a": "assignRevenueContract()", +"ec68197b": "setGameAddrt(address,bool)", +"ec688e8f": "walletNotLocked(address)", +"ec68a73d": "totalSpecies()", +"ec698a28": "__transferFromWithReference(address,address,uint256,string,address)", +"ec6a4487": "setMoneyWallet(address,address)", +"ec6acb33": "reputationClear(address,string)", +"ec6afc22": "oraclize_query(uint256,string,string[3])", +"ec6b16ca": "pMinInFp()", +"ec6b1d1e": "findAddress(bytes32)", +"ec6b393d": "subWeiRaised(uint256)", +"ec6be06e": "setBeneficiaryAddress(address)", +"ec6c18fc": "TOKEN_DECIMALS_MULTIPLIER()", +"ec6c32cd": "amendArticleItem(uint256,uint256,bytes)", +"ec6e43ae": "PRICE_CHANGE_ENDING_TIME()", +"ec6e5d09": "SellerHistory(address,address,uint256,uint256)", +"ec6e7bbf": "getTargetSite(address,uint256,uint256,uint256)", +"ec6eb411": "adjustBalance(address)", +"ec6f3a8c": "originalTokenHolder()", +"ec6f509e": "IcoStartTime()", +"ec6f772d": "addVirus(address,uint256)", +"ec704095": "getMyCrocs()", +"ec714926": "setTargetDiscountValue8(uint256)", +"ec715a31": "releaseToken()", +"ec7219a1": "growthReserveTokenSend(address,uint256)", +"ec727000": "getApprovalDB()", +"ec736b67": "validPerc(uint256)", +"ec737576": "finalizeMintUtility(address,uint256)", +"ec7380d9": "transferManually(uint256,address,address)", +"ec747b09": "getPaymentById(uint256,uint256)", +"ec74b818": "rbInformationStore()", +"ec756ee5": "getOrCacheValidityBondWallCalled()", +"ec759b80": "getOwners(uint8)", +"ec759f87": "setTemporaryVariables()", +"ec76312a": "sendInvestorIndex()", +"ec76bd65": "volumeType5()", +"ec77537b": "finalizeDispute()", +"ec77809f": "removeAssetPartOwner(bytes32,address)", +"ec77a89f": "GoldTokenLedger()", +"ec78626f": "setPOOL_edit_11(string)", +"ec788712": "toAddress(bytes,uint8)", +"ec789ef3": "sellpr0coinsAgainstEther(uint256)", +"ec796908": "tokensArray(uint256)", +"ec79efa8": "candidateETHAssets()", +"ec79f9bd": "setDisputeThresholdForFork(uint256)", +"ec7a3ab6": "calcBurnFee(uint256)", +"ec7b2843": "kvcMul(uint256,uint256)", +"ec7b642a": "setEvent(uint256)", +"ec7b8c40": "deleteFrozenAddresses(address)", +"ec7b9655": "spiritual_guidance()", +"ec7bb2ac": "setGen0Limit()", +"ec7bbcd2": "TradeAdsCoin()", +"ec7bf78d": "SetWorldSnapshot(uint256,bool,uint256,uint256,uint256)", +"ec7c06be": "doMigrate()", +"ec7c2ef7": "withdraw_excess_tokens()", +"ec7c637d": "getBalanceLimit(address)", +"ec7dd7bb": "getOrderDetails(uint256)", +"ec7de1e9": "masterOfCeremonyPending()", +"ec7df86e": "hasSDCC(address,address,uint256)", +"ec7dfb4d": "weiGoal()", +"ec7ecec5": "getPlayerState(uint256)", +"ec7f2ae7": "LogTransactionComplete(bytes32,address,uint256,bytes)", +"ec7f9906": "changeFreeAnimalsLimit(uint256)", +"ec7fea7b": "BiXuTo()", +"ec7fec8b": "defineWinner()", +"ec7ff617": "getMatchIdx()", +"ec801286": "BITHELPTOKEN()", +"ec810684": "registrationVote(address,uint256)", +"ec8120c9": "totalItemsForSale()", +"ec814f4e": "doDevelopFunds(uint256)", +"ec81aadb": "deployedTokens(uint256)", +"ec81b483": "CAP()", +"ec81e22e": "returnmoneycreator(uint8,uint256)", +"ec824ca9": "hashNumber(uint8)", +"ec82bf91": "_pay_token_commission(uint256)", +"ec82cf4e": "setDepositPpm(uint32)", +"ec841fe0": "LogTokensPerEthUpdated(uint256)", +"ec845dd8": "totalSubscription()", +"ec847fe8": "divholder()", +"ec854a04": "DogToken()", +"ec85d2f2": "regulatorStatus()", +"ec85d464": "returnAmountRaisedSoFar(uint256)", +"ec866d28": "isApproveOnly()", +"ec867b27": "isTokenVerified(address)", +"ec86e1d7": "getReleaseType(address)", +"ec86fdbd": "getOrCacheMarketCreationCost()", +"ec87543b": "lockedCZRMap(address,uint256)", +"ec875f98": "addCourses(string,address[])", +"ec881472": "Validator(string)", +"ec8861e7": "switchDelegate(bool)", +"ec88abc8": "SOVv11Token()", +"ec8909c0": "setShort(address)", +"ec89331b": "get_invester_detail(uint256)", +"ec89c8f0": "MicheleToken(uint256,string,string)", +"ec8a2c88": "investments()", +"ec8ac4d8": "buyTokens(address)", +"ec8b283c": "give(address,address,uint256)", +"ec8b8f4e": "addMinerTokens(uint64,address[],uint64[])", +"ec8be5b9": "canClaim(bytes32,uint256,address,bytes)", +"ec8cae23": "changeHolderCount(uint256)", +"ec8cb281": "openDate()", +"ec8d140b": "setLockedWalletEntity(address,address)", +"ec8d82f8": "oraclize_query(string,bytes[],uint256)", +"ec8e1afa": "interfaceInstanceCount()", +"ec8edf7a": "changeWalletAddress(address)", +"ec8f3fa5": "getWithdrawalAddress()", +"ec8f4d04": "onApprove(address,address,uint256,uint256)", +"ec8f850b": "withdrew()", +"ec8f95fc": "refCount(address)", +"ec8fb8ef": "withdrawOldTokens(address,uint256)", +"ec8fe065": "buyItem(address,uint8,uint256)", +"ec901017": "mintTokensWithTimeBasedVesting(address,uint256,uint256,uint256,uint256)", +"ec902779": "scribes(address)", +"ec9029a3": "minerToken(address,uint256)", +"ec90a79a": "recv_from_side_chain(uint256,bytes)", +"ec912d61": "markCredit(address,uint256)", +"ec91b550": "miningThree()", +"ec92b98d": "bancorErc20Eth()", +"ec933789": "ParticipantAgent(string,address)", +"ec93a081": "HelperSearchToken()", +"ec93b3f8": "GetCardType(uint8,uint8,uint8)", +"ec93cfae": "FountainOfWealth()", +"ec941ef8": "BXZToken()", +"ec94ce4b": "enabledMintTokens(bool)", +"ec9723ad": "setSalePeriod(uint256,uint256,uint256)", +"ec972a07": "lastBlock_f15()", +"ec972fb0": "timeOfLastDistribution()", +"ec973642": "enable(address,bool)", +"ec979082": "marketCount()", +"ec97cff7": "addCertificationDocument(address,bytes32)", +"ec985c99": "minfinney()", +"ec98618e": "getDial1Type(uint8)", +"ec98eefc": "createTokenContract(address,uint256)", +"ec993f3d": "changeDiscount(uint8)", +"ec9974eb": "getTotalWEIEther()", +"ec99bfe9": "setPreSaleParams(uint256,uint256,uint256,uint256)", +"ec99c60c": "getMatchFromList(uint256)", +"ec9a6e87": "setDefaultPartitions(bytes32[])", +"ec9b5cb2": "publicSaleEnd()", +"ec9be5fe": "setPotatoOwner(address)", +"ec9c677d": "checkDeck(uint256,uint8[],bytes32)", +"ec9d35aa": "transferWithCommission(address,uint256)", +"ec9d7fd2": "getAccumulatedServiceFee()", +"ec9da59e": "setMainContractAddress(address)", +"ec9e7971": "kycAdmin()", +"ec9edfc2": "addSmallInvestor(address,uint256,uint256)", +"eca001dd": "checkWhitelisted(address,uint256,uint256,uint8,bytes32,bytes32)", +"eca0290b": "rawSetAttribute(bytes32,bytes32,bytes)", +"eca058cc": "tokensForWei(uint256)", +"eca0be47": "TEAM_GROUP_WALLET()", +"eca10286": "loseNum()", +"eca1ada7": "getPlayersCount(uint256)", +"eca25f42": "TARGET_ADDRESS()", +"eca28cb7": "AleaPrivateSale(uint256,uint256,uint256,address,uint256,address)", +"eca2e604": "makeWorkStage(uint256,uint256)", +"eca38e0c": "ethSent()", +"eca3ee2c": "currentFundingAmount()", +"eca4742a": "getApprovedAddress(uint256)", +"eca49641": "TurnBasedGame(bool)", +"eca5339d": "mintExtraTokens(uint256)", +"eca5c793": "testErrorUnauthorizedNameRegister()", +"eca6e42d": "set_minimum_trade(uint256)", +"eca73f64": "currentBonus()", +"eca85419": "_getAllChildIds(bytes32)", +"eca90ffc": "LogGetEther(address,uint256,string)", +"eca95377": "generateRandom(string,uint256,uint256)", +"ecaa0e45": "OXGOLDSupply()", +"ecaaf6c8": "newIdTankHull()", +"ecab1a06": "_getExpProportion(int256)", +"ecabaf24": "NewHighestBid(uint256,address)", +"ecac7f4b": "symbolsCount()", +"ecacb3e0": "BitcoinSinhalaToken()", +"ecad17c1": "HurtleCoin()", +"ecad78a2": "paydCouponsETH(address)", +"ecaeacf6": "RESERVED_TOKENS_FOR_CYNOTRUST()", +"ecaeb904": "getDeltaMonth(uint256,uint256)", +"ecaf76b8": "minReferAmount()", +"ecb0116a": "getExitFee()", +"ecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", +"ecb071cf": "mainSaleStartdate()", +"ecb0b862": "payContract()", +"ecb14519": "payToken(address,address)", +"ecb15644": "GasFiles()", +"ecb1b31c": "TRONIC1()", +"ecb20de7": "takeBuyTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"ecb389e0": "mmVaultAddr()", +"ecb39cba": "developer_edit_stake_reward_rate(string)", +"ecb3dc88": "depositCounter()", +"ecb41054": "doesUserExist(address)", +"ecb4136e": "NotAnotherPonzi()", +"ecb42795": "MANA()", +"ecb42914": "STAGE_1_MAXCAP()", +"ecb46858": "buyGolds()", +"ecb58c74": "ownerAllocate(address,uint256)", +"ecb5fff6": "DELTA()", +"ecb62e49": "defaultParameters(uint256)", +"ecb63011": "receiveApproval(address,uint256,address,uint8)", +"ecb6af21": "accountB()", +"ecb6b50c": "RAVI_ADDRESS()", +"ecb6c47a": "allStop()", +"ecb70a98": "tokensByDashTx(string)", +"ecb70fb7": "hasEnded()", +"ecb75089": "jackpotRoundNumber(uint256)", +"ecb828ea": "lastTokensIssued()", +"ecb86574": "getSum(address)", +"ecb87dc4": "cjTeamWallet()", +"ecb98714": "random_damage(uint256)", +"ecb98e3d": "getUSDAmountByTokens(uint256)", +"ecb9d6a3": "_cancelTknOffer(address)", +"ecba18c0": "closeCrowdsale(bool)", +"ecbb06c9": "setPlayerGeneralAttr(uint64,uint32,uint32,uint32,uint32)", +"ecbb596a": "DecentralizedCrowdFunding(address,uint256,string,uint256,uint256)", +"ecbbcdda": "processFundsIfAny()", +"ecbbd1ca": "calculateMaximumBurnAmount(address)", +"ecbc1481": "calcVIPBenefit(uint256,uint256)", +"ecbc3177": "shitFundAddress()", +"ecbc328d": "totalCardValue(uint256)", +"ecbc8fa7": "adjustBalance(address,int256)", +"ecbca55d": "setConversionFee(uint32)", +"ecbd15fd": "alterTokenGrant(address,uint256)", +"ecbdb633": "getDataHolders(address)", +"ecbdbb32": "balanceETH()", +"ecbdee9b": "setWeiPerSatoshi(uint256)", +"ecbee997": "getPlayerBetInfo(address)", +"ecbf171c": "setSiteRewards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ecbfc077": "startClaim()", +"ecc0148e": "inquire()", +"ecc06c76": "setFormula(address)", +"ecc0ee18": "fortune_setimgnme(uint256,bytes32[144],bytes32)", +"ecc137db": "getRandomAdversary(uint256,uint8)", +"ecc18582": "exitContest(uint32)", +"ecc1a0c9": "SetApplicant(uint256[])", +"ecc1caef": "founderReward()", +"ecc1cfaf": "withdrawALC(uint256)", +"ecc21830": "setBuyoutFeePercentage(uint256)", +"ecc258dd": "removeSecondAdvisorLock(address)", +"ecc2c47c": "outSdcForUser(uint256)", +"ecc2e57d": "classVariants(uint256)", +"ecc310ae": "kittyActions(uint256,uint256)", +"ecc38a1f": "REFERER_PERCENT()", +"ecc4029b": "getSpentAmount(address,address)", +"ecc46d1b": "DEBATE_PERIOD_MINUTES()", +"ecc4a6c2": "getSelled(uint256)", +"ecc54067": "TopTokenBase()", +"ecc55e4b": "setBool2(bool)", +"ecc57df4": "_fetchOrderByIdWithPayer(string,address)", +"ecc5aaaa": "startMint(uint256,bool,int256,uint256)", +"ecc7296b": "rebalanceMargin()", +"ecc72b0f": "getSentTrade(address,uint256)", +"ecc73f48": "collectedSum()", +"ecc7e7bc": "TestTokenToken()", +"ecc91c28": "addEtherBroAuction(uint256,uint128)", +"ecc91fdc": "buyCopyright(uint256,uint256,string,string)", +"ecc9665b": "maxWithoutWhitelist()", +"ecc98ce4": "ERC721_RECEIVED()", +"ecc99af0": "getNegID()", +"ecca031f": "hasVoted(uint256)", +"ecca9c2e": "getPrizeAmount()", +"eccaa8b5": "getSpellAbility(uint32)", +"eccb15bc": "SatPosition(int256,int256)", +"eccb6bd0": "addTicket(uint256,address)", +"eccbc596": "maxAttackPrizePercent()", +"eccbf4cc": "getTokenCountFor(address)", +"eccc32f2": "DD()", +"eccd162e": "Fortune(string)", +"eccd1a8d": "NEWT()", +"eccd8e0d": "getExchangeRate(uint256,uint256,uint256)", +"ecce7e63": "setWinningTeam(uint256)", +"eccf1b29": "CrystalDoubler()", +"eccf93c0": "updateCrowdsale(uint256,uint256,uint256,uint256)", +"ecd08bc3": "rap()", +"ecd0c0c3": "_token()", +"ecd13b89": "discountDivisor()", +"ecd1a83a": "getUserCoolDown(address)", +"ecd1c4a5": "availableZLT()", +"ecd22328": "weiCrowded()", +"ecd27189": "freeToUseTokens()", +"ecd370bd": "withdrawCoinToOwner(address,uint256)", +"ecd4eb74": "sendFees(uint256)", +"ecd57ec1": "setMinMaxDays(uint8,uint8)", +"ecd59d9b": "OTHERCRUISER()", +"ecd63757": "makePresale(string,address,uint256,uint256,string,string)", +"ecd747de": "getFishByPos(uint256)", +"ecd75c59": "FourWaySplit(address,address,address,address,address,address,address,address)", +"ecd79066": "getRedeemableReputationProposer(bytes32)", +"ecd7df06": "ICOweek4End()", +"ecd9297d": "withdrawAffBonus()", +"ecd9442e": "setMaxWeiAllowed(uint256)", +"ecd9c155": "transferDistributorship(address)", +"ecda10f5": "deploymentTime()", +"ecda249b": "UIWishSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"ecda3055": "start_ICO1(uint256)", +"ecda58c2": "withdraw_3Completed()", +"ecda5fb6": "prizeFundFactor()", +"ecda6635": "owner_MIN_LIMIT()", +"ecda98dd": "start_bond(address[],address,uint256[])", +"ecdb065b": "bitNot(bytes32)", +"ecdb620d": "offlineRealmSold(uint256,address,uint256)", +"ecdc454c": "finalizeProposal(uint256,address[],bool,int256)", +"ecdc7135": "GoldeaBonusCalculator(uint256,uint256)", +"ecdd9549": "bonusOver10ETH()", +"ecdd9632": "generateOrder(address,address,address,uint256,string,string,string)", +"ecdf419a": "doCoinage()", +"ecdf5459": "awardReferralBonus(address,address,uint256)", +"ecdf6fed": "shareDividends()", +"ecdfca06": "tokensPreSale()", +"ecdfdc27": "ROLE_ADMINISTRATOR()", +"ece02921": "queryGameHistory(uint256)", +"ece0d561": "CashSaved(uint256)", +"ece11912": "getBetValue(uint256,uint256,uint256)", +"ece1d6e5": "maxRate()", +"ece1de44": "appeal(bytes32)", +"ece2064c": "setCurrentRewardTokens()", +"ece20f36": "nullify()", +"ece2ea40": "nextCapTime()", +"ece2f7e0": "getPlayersUnits(address)", +"ece35d01": "sessionDuration()", +"ece44b81": "numCollected()", +"ece4f10d": "LULUCOIN()", +"ece5ca56": "getData_33()", +"ece62017": "sTCBonus(uint256,uint256)", +"ece66346": "CryptoSagaHero(address)", +"ece67270": "countdownIsUp()", +"ece7c397": "SurveyTokenSale()", +"ece7fa5d": "registerToken(address,string,string,uint256,uint256)", +"ece84fd5": "crowdsaleFinished()", +"ece8557f": "modifyICOEndDate(uint256)", +"ece866b9": "l()", +"ece8a1d9": "baby()", +"ece8a29d": "addCourse(string,string,string,string,string,string)", +"ece9aed4": "crearJuegosPublico()", +"eceadfd1": "ONEX()", +"eceae9bf": "setRequiredGoldIncreaseFactor(uint256)", +"eceb2945": "checkProposalCode(uint256,address,uint256,bytes)", +"eceb9eef": "SweetTokenLogic(address,address,address,address[],uint256[])", +"eceba876": "getChildUniverse(bytes32)", +"ececa529": "mainFundPrecent()", +"eced0280": "getPhase()", +"eced2967": "calculateAndRegisterEarlyBonuses(uint256)", +"eced5526": "SCALE()", +"eced6c57": "extraTokensPerUnit()", +"ecedafcb": "SampleCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"ecedf7b2": "initialisation(address,address)", +"ecee4eb1": "calculateNoOfTokensToSend(uint256)", +"eceebc3f": "setAllowTrading(bool)", +"ecef0e54": "DigixbotUsers(address)", +"ecef615b": "sellTransferFee()", +"ecf0848f": "MIN_PRESALE()", +"ecf12669": "FinToken()", +"ecf1e0fd": "addManyUsers(address[],uint256[])", +"ecf1fca0": "tradeProfileImplementation()", +"ecf1fdea": "setper(uint256,uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ecf24ec0": "Contribution(address,address,address,uint256)", +"ecf41c8c": "createOption(uint256,bytes32)", +"ecf42e5a": "ETHRLINK(address,address)", +"ecf477d5": "CrowdsaleStarted(address)", +"ecf56d82": "etherToTokens_(uint256)", +"ecf59b83": "ico3Min()", +"ecf6512f": "modify_Presale2StartDate(uint256)", +"ecf68eb8": "TokenTransferAllowed(uint256,address)", +"ecf6eb22": "setConfigAddress(bytes,address)", +"ecf6f108": "bigToken()", +"ecf6f2f8": "Bitgram()", +"ecf7105e": "etherBounty(address,uint256)", +"ecf7b873": "_airdropUnlocked(address)", +"ecf82c91": "setPixelDistributor(address)", +"ecf836ba": "updateInstance(bytes32,bytes32,bytes32)", +"ecf862cc": "stopSweepStake()", +"ecf88111": "setConfig(address,uint256,uint256,uint256)", +"ecf90824": "testegy(uint256,string,string)", +"ecf9d3e9": "getDesignatedReportPayoutHash()", +"ecf9ea1d": "expanded()", +"ecfa3292": "Forwarder(address,bytes32,address)", +"ecfb49a3": "totalPool()", +"ecfb5d17": "deleteFromWhitelist(address)", +"ecfbe70c": "withdrawERC20Token(address,address)", +"ecfc5964": "incTotalSupply(uint256)", +"ecfc7ecc": "placeBid()", +"ecfce7b4": "addProductEndorsement(string,uint256,int256,bool,string,string)", +"ecfd0a56": "account1()", +"ecfd8928": "contributorCount()", +"ecfef21a": "Mojito()", +"ecff39af": "START_WEEK_1()", +"ecff537f": "getGen0COnfig(uint32)", +"ecff58df": "countProjects()", +"ecff7531": "BankerFarmer()", +"ecffc18a": "RussianCash()", +"ed007cb6": "AggiungiMiner(address)", +"ed00b73f": "EbolaToken()", +"ed016620": "EtherToken1()", +"ed01bf29": "budget()", +"ed02a732": "doBountyairdrop(address,uint256)", +"ed02ad37": "numberOfGuesses()", +"ed02ada4": "TransferCoinsFrom(address,address,uint8)", +"ed02dded": "lossToCharity(uint256,address)", +"ed032ad2": "lastCharNoZero(string)", +"ed03a5b3": "cloneArray(uint256[],uint256)", +"ed03d0da": "withdrawShares(address)", +"ed045a3c": "doRefund(uint256,uint256,uint256)", +"ed047efd": "assignAnotherOwner1(address)", +"ed04d9f2": "getBuyingAmountRanges()", +"ed05084e": "setWinner()", +"ed05582b": "getHash(address,uint256)", +"ed05ae78": "getDepositBalance(address)", +"ed060ac1": "batchMount(address,uint256[],uint256)", +"ed0668fb": "getMyTurtles()", +"ed06a62c": "confirmBobDirectPay(uint256)", +"ed06d4dc": "KiwiTestToken()", +"ed06fb91": "PART_REWARD_CHANCE()", +"ed07e7b6": "arbifi(uint256,bool)", +"ed081329": "vote(address[])", +"ed09d19a": "get3(uint256)", +"ed0ad321": "releasedOf(address)", +"ed0b01cf": "MINERS_STAKE()", +"ed0b1cb3": "LLV_311_EDIT_1()", +"ed0bce14": "Cryptolotto1Day(address,address,address,address)", +"ed0c4123": "tokensPaid(address)", +"ed0c7091": "resignOwnership()", +"ed0cc2e1": "balancesUploaded()", +"ed0cdfdb": "MonsterAuction(address,uint256)", +"ed0e4665": "AVAILABLE_ADVISOR_SUPPLY()", +"ed0e92e5": "removeControllerContract(address)", +"ed0f22d5": "Start6()", +"ed1062ba": "CallExecuted(address,bytes32)", +"ed10e33c": "unLock()", +"ed11a690": "STARTING_TURTLE()", +"ed11d089": "Fortecoin()", +"ed129c2d": "printMarket()", +"ed12e8ef": "getVaultBalance()", +"ed1426e6": "purchasePixel(uint256,uint256,uint256)", +"ed148ea7": "testEnsFail()", +"ed149514": "setPartners(address,address)", +"ed14b6a5": "takeOver()", +"ed14d17e": "collectRevenue()", +"ed156449": "HeroCoin(address,address,address,address)", +"ed15863a": "bookWeekVisit(uint256)", +"ed15c31d": "Token10xAmin()", +"ed15c5e6": "targetDiscountValue6()", +"ed15dafd": "LBToken()", +"ed1627e9": "closeThisTurn()", +"ed17dab7": "tokensDistributedPresale()", +"ed17faa8": "setPlayerDayEthInLimit(uint256)", +"ed180443": "getUint256(int256)", +"ed185562": "presaleDeadline()", +"ed18838c": "setAutoBuy()", +"ed188f33": "cSale()", +"ed18bc3f": "Slot(address)", +"ed18ecae": "scan(address,bytes1)", +"ed18f0a7": "blue()", +"ed190746": "testSplit()", +"ed1923ee": "mediumRate()", +"ed1a9ca1": "returnsOneUnnamed(uint256,uint256)", +"ed1b71ea": "registerUser(address,address,address)", +"ed1ba837": "PensionFundRelease(address[],address,address,uint8,uint256,uint256,uint8,address)", +"ed1d4870": "changeReceiver(uint256,address)", +"ed1d840d": "getPriceForAssetAmount(address,uint256)", +"ed1ece04": "mineCard()", +"ed1eee68": "getFee(string)", +"ed1f1656": "totalaccumulated()", +"ed1f2229": "distributeForBountiesAndAdvisors()", +"ed1f9991": "getParticipantIndexAddress(uint256)", +"ed20f370": "debundleAndWithdraw(uint256)", +"ed21187a": "getInvestorsCount()", +"ed21248c": "Deposit()", +"ed214fff": "getParticipantList()", +"ed21a7e7": "Airsavecoin()", +"ed225a8a": "equipmentTrainingFeeMultiplier()", +"ed22671d": "set(bytes32,bytes32,bytes32,bytes)", +"ed22c02f": "SGEPreICO()", +"ed23378b": "getMarketCreatorMailbox()", +"ed234e20": "addCompany(address,string)", +"ed23e5b7": "requestObjectRoot(bytes32,uint256,uint8,bytes32,bytes32)", +"ed244fcd": "getAccountValues(uint16,uint8)", +"ed24e3e0": "CryptoABS()", +"ed25ba8c": "blinc_block()", +"ed25e6c2": "expand(uint32[4],uint32[26])", +"ed2648d3": "setCCH_edit_14(string)", +"ed26cae8": "contains(address,address)", +"ed26e60d": "GetReserveAmount(address)", +"ed26fc86": "SnowBall()", +"ed287795": "transferFromAndLock(address,address,uint256,uint256,uint256)", +"ed28d37f": "TokenOne()", +"ed28ef51": "addManyUsers(address[])", +"ed29211b": "claimReward(address,uint256,address)", +"ed29c12b": "MFI()", +"ed2a2d64": "nonceOf(address)", +"ed2b5a3c": "getBorrowRate(address,uint256,uint256)", +"ed2b8e0b": "getPoolRotationDelay()", +"ed2c92b1": "finalizeLastCampaign()", +"ed2cbf06": "_deliverTokens(address,uint256)", +"ed2d1d9e": "goodNightSweetPrince()", +"ed2d4a1b": "process_game()", +"ed2ddeae": "claimAllSupporterTokensByOwner(address)", +"ed2de952": "setInvestorsStorage(address)", +"ed2df26d": "getGameResult(uint256)", +"ed2e3f7e": "ChainBankToken(uint256)", +"ed2e5a97": "read(uint256)", +"ed2eb843": "withdrawEther(address,address,uint256)", +"ed2f2369": "activeStakes()", +"ed2f5b1a": "getRestoredTransactionStatus(uint256)", +"ed2fbf96": "timesno()", +"ed3058e0": "transferRight(address,bytes)", +"ed30ec8f": "_validFee(uint256,uint256)", +"ed319520": "_validateTokensLimits(uint256)", +"ed3375f5": "RSPLT_I()", +"ed338ff1": "saleEndTime()", +"ed3390ea": "findBest(uint256,uint256)", +"ed33e00c": "participantClaimCredits()", +"ed33fba7": "PitisCoin()", +"ed3411dc": "register(bytes20,uint24,uint32,bytes32[],uint16)", +"ed3437f8": "scalingFactor()", +"ed343f65": "totalDropPerUnlockedToken()", +"ed34ca2e": "ThePlat()", +"ed355b0b": "getBestInvestor()", +"ed361694": "failSafeMode()", +"ed361c17": "burningCapableAccount(address[])", +"ed3643d6": "checkSignersByName(bytes32,uint256,uint256,uint256)", +"ed36a874": "getOracleAddressByName(string)", +"ed3788c9": "futureDevelopmentPoolAddress()", +"ed3831ae": "p_count(uint256)", +"ed39eab3": "HGT()", +"ed3a2164": "PrincelyGoldenDollar()", +"ed3a865e": "raceId()", +"ed3ad43e": "finalizeDeprecation(uint256,address)", +"ed3b4eca": "setMinAmount1Round(uint256)", +"ed3d4dc1": "POWM()", +"ed3e3e0b": "update_counts(uint256)", +"ed3e46ae": "tipHash()", +"ed3f1c87": "allowAccess(address,address)", +"ed3f443f": "getMyBetRecordCount()", +"ed3fd0d7": "EVMScriptRegistryFactory()", +"ed40175d": "testFailOnFailedCall()", +"ed4080b1": "getPreminerAllocation(address,uint256)", +"ed40a8c8": "getWord()", +"ed4127df": "CANVAS_HEIGHT()", +"ed429d1b": "_amountCourse()", +"ed43191d": "DataRecordStructs(bytes32)", +"ed442e14": "getDividends()", +"ed45747f": "editCell(address,uint256)", +"ed45c9be": "getAllTheThings()", +"ed45e578": "getAttoTokensLeftForICO()", +"ed46eb52": "deleteCaller(uint256)", +"ed47ca94": "debug_verifySharesTreeSubmission(uint256[],uint256[],uint256,uint256,uint256,uint256)", +"ed49196b": "auctionleader()", +"ed498fa8": "userTokens(address)", +"ed49d2f8": "maxDelay()", +"ed4ae6b5": "isValidVoting(address)", +"ed4b1d0d": "scheduleTransaction(uint256)", +"ed4c1cdd": "xauToEur()", +"ed4c1d97": "syncToken()", +"ed4c87ac": "startProject(string,address,address,address,bytes,uint8,uint8,uint8,bool)", +"ed4dd2ab": "SECOND_TIER_DISCOUNT()", +"ed4e65fb": "noStoreIsActive()", +"ed4e73da": "signedTransferFrom(address,address,address,address,uint256,uint256,uint256,bytes,address)", +"ed4f114d": "ConversionRateChange(uint256)", +"ed4f2b33": "setup(uint8,bytes32[])", +"ed4f415e": "Holahop()", +"ed505d3e": "totalAmountOfPresalePurchasesWithoutBonus()", +"ed50dd4e": "ChiSale(address,uint256[],uint256[])", +"ed52068c": "revokeBurnDelegate(address)", +"ed526601": "greenOnFanChun()", +"ed54746e": "lastAuction()", +"ed550443": "proxyContract()", +"ed561fe5": "receiveSecurityDeposit(address)", +"ed56531a": "pause(bytes32)", +"ed5667b4": "transferOfPower(address)", +"ed5677f6": "tierThreeMin()", +"ed56de8c": "withdrawZRX(uint256)", +"ed5850b9": "register(address,uint8,bytes32[5],address)", +"ed5863f6": "agaisnt_votes()", +"ed58bad8": "setAuthorizedMinter(address,bool)", +"ed58c840": "transferGu(address,uint256)", +"ed58d5ec": "setLendingContract(address)", +"ed59313a": "setUsername(string)", +"ed598be7": "TenantMoveIn(string)", +"ed59eda1": "_addSuperInvestor(address)", +"ed5bc87b": "fundedProxy()", +"ed5c58f3": "set0xTokenProxy(address)", +"ed5d2289": "latchFciUser(uint256)", +"ed5d3f1a": "pow_10(uint256)", +"ed5d6fbc": "completion()", +"ed5da4f9": "computeReturnBonus(uint256)", +"ed5dc952": "getIsRoundOver(uint256)", +"ed5e68f9": "closeAnnualInvest()", +"ed5e7691": "CrowdCoinPreICO(address,address,address)", +"ed5e8437": "locks(bytes32)", +"ed5eafa2": "ClinicalTrial(address,address,uint256,uint256,uint256,bytes32,bytes)", +"ed5ec919": "voidTransaction(uint256)", +"ed60ade6": "bidOnSiringAuction(uint256,uint256)", +"ed611895": "ManualChangeUnholdDate(uint256,uint256)", +"ed6183bf": "isWinner(uint8,uint8[5],uint8[5])", +"ed621591": "KaratBankCoin()", +"ed621ae1": "PriceWeekFour()", +"ed621df6": "GuessNumber()", +"ed621e9a": "addWhitelistUsers(address[],uint256[])", +"ed621f0f": "YUN(uint256,string,uint8,string)", +"ed62543d": "bttsToken()", +"ed62986b": "_getBattleResult(int256,int256,int256,int256,uint256)", +"ed62cf1f": "setCanCall(address,address,bytes,bool)", +"ed62f501": "maxPendingPayouts()", +"ed6302be": "left98(uint256)", +"ed63455c": "stringContains(string,string)", +"ed644025": "X5Coins(uint256,string,string)", +"ed64b36b": "left15(uint256)", +"ed64bea4": "JamCoin()", +"ed64c08c": "clearBudget(address)", +"ed653164": "releaseEscrow(uint256)", +"ed654fd7": "logCompleteSetsSold(address,address,address,uint256)", +"ed666e96": "artsCreatedCount()", +"ed67bca3": "_finalize()", +"ed67e002": "getFreezeTime()", +"ed684cc6": "trigger(uint256)", +"ed68ece1": "newFeed(string)", +"ed68ff2c": "setRequireSignedAddress(bool,address)", +"ed6a2bc9": "LLToken(uint256,uint256,address)", +"ed6a2d35": "Blincoin()", +"ed6a897d": "teamTokensHolder()", +"ed6b2d7d": "extractTokens(address,address)", +"ed6b40c0": "PRICER_DELAY()", +"ed6b5ad5": "pauseSwap()", +"ed6bcd84": "TransactionPending(uint256,address,address,uint256,uint256)", +"ed6bd807": "phase2StartTime()", +"ed6be066": "charitySpaceToken()", +"ed6bf091": "changeEndDate(uint32)", +"ed6bfa2b": "toggleDeposit(bool)", +"ed6c3e84": "blockStart(uint64)", +"ed6cb909": "transferAddress(address)", +"ed6cd5d3": "get_recipient_balance()", +"ed6cd66d": "CreateUKGEvent(address,uint256)", +"ed6d4055": "SBIBank(address)", +"ed6d8521": "VULToken()", +"ed6d9169": "pushBounty(uint256)", +"ed6d969a": "addSegmentation(address,uint256,uint256,uint256)", +"ed6db106": "_HUNDRED()", +"ed6e7f7a": "processMutuallyAgreedJobCancellation(bytes16,address,address,uint256,uint256,uint8,bytes,bytes)", +"ed6e85c7": "installDonationContract(address)", +"ed6eba84": "getLockedUserDeposits(bytes32)", +"ed6f0792": "askOracle()", +"ed70d83c": "setRefProgram(address)", +"ed70e032": "_removeAvatar(address)", +"ed713d55": "ZerroXBToken()", +"ed71cfb3": "isDepositContract()", +"ed724103": "isRoundOneSalePeriod(uint256)", +"ed7305ea": "Enrium(uint256,string,uint8,string)", +"ed732ddb": "placeBet(uint256,uint256,string)", +"ed73b6a6": "PariMutuel()", +"ed743556": "YISSToken(address,uint256)", +"ed74de9d": "clone(address,uint256,uint256)", +"ed7510a0": "registerContributorPool(address,uint256)", +"ed7546b7": "_checkEvenIfCommBallot(bytes32)", +"ed769922": "buypr0coinsAgainstEther()", +"ed782750": "ICONIQ_TOKENS_NEEDED_PER_INVESTED_WEI()", +"ed785e29": "PresaleBREMP(address,uint256)", +"ed786cd6": "getCurrentWeek(uint256,uint256)", +"ed78cf4a": "potSwap()", +"ed793207": "_burnRemainingTokens(uint256)", +"ed7a1548": "updateSecondExhangeRate(uint256)", +"ed7a4e0b": "winnerAddress()", +"ed7a96e7": "saleInProgress()", +"ed7ad2d2": "createDeposit(uint256,bytes)", +"ed7b4753": "BULL()", +"ed7c238d": "getFileName(uint256)", +"ed7caa8e": "profitOrgPay()", +"ed7ce71a": "KWRT()", +"ed7dd693": "PlaceNewForecast(bytes32,bytes32,bytes32,bytes12)", +"ed7eff2b": "setConvertContract(address)", +"ed7f8deb": "refRewardL1Per100()", +"ed80577d": "offerBtc(address,uint256,bytes32)", +"ed806207": "isInt128ValidIn64(int128)", +"ed810cfa": "emitBurnEvent(address,uint256)", +"ed810d02": "tokensSentMain()", +"ed815d83": "query(bytes)", +"ed81a68e": "edgeRange()", +"ed81cdda": "rootOwnerOfChild(address,uint256)", +"ed81f681": "currentDayOfWeek()", +"ed824f2f": "tokenETHAmount()", +"ed82cac9": "toEthers(uint256)", +"ed83e9aa": "YDHTOKEN(string,string,uint256)", +"ed83eb7d": "FileStorage()", +"ed84115e": "publisherMessage()", +"ed857bfd": "BitmassExchangeToken()", +"ed861328": "submitStack(uint256,uint256,uint256,uint256,uint256,bool)", +"ed861e13": "managerCountInt()", +"ed864190": "testMultipleGetters()", +"ed86d9c7": "playSpecificTriples(uint256,uint256)", +"ed879c77": "computeNextSystemSalePrice()", +"ed885897": "getTotalPot(uint256)", +"ed88c68e": "donate()", +"ed8991fb": "balanceMap()", +"ed89b2a0": "calculateQuantityBonuses(uint256)", +"ed89e864": "SupplyChanged(uint256,uint256)", +"ed8a4116": "_resetPotatoes()", +"ed8a73a3": "developer_edit_text_crowdsale(string)", +"ed8a9c0f": "clearExpiredFreezing(address)", +"ed8b6556": "getJackpotAmount()", +"ed8b9059": "set_withdrawal_gas(uint256)", +"ed8bfa4d": "drainSMS()", +"ed8c2aed": "closePoll()", +"ed8d806b": "largestHODLERAddress()", +"ed8df164": "New(string,bytes32)", +"ed8e690b": "MessageUpdated(uint256,address,string)", +"ed8e873c": "gvAgent()", +"ed8e9f2c": "LogUnfinalized(uint256)", +"ed8f02d0": "tokenValuePublish(uint256,string,uint256)", +"ed8f10df": "testSign()", +"ed8f11de": "Evocoin()", +"ed8fe3c1": "totalTRsWon()", +"ed8fee35": "MSCE()", +"ed90c7b7": "deleteProduct(uint256)", +"ed918136": "Pilfered(uint256,uint256,uint256)", +"ed91c906": "stopGo()", +"ed927dae": "bytes32ToString(bytes32,bytes32,bytes32)", +"ed92f0a0": "BTC7500on49()", +"ed93a8c9": "Bet0xgame(string,string,uint256,uint256,string)", +"ed93ca26": "startTimeDay()", +"ed950638": "whitelistRegistry()", +"ed952728": "getProposalHash(address,uint256,bytes)", +"ed953b69": "keyLocked()", +"ed95f52b": "startMark()", +"ed981d4f": "calculateNeededCollateral(uint256,uint256,uint256,int256,uint256)", +"ed98f12c": "EthearnalRepTokenCrowdsale(address[],address,address)", +"ed996590": "processWhenStop()", +"ed9978c7": "language()", +"ed9980a6": "numPayTables()", +"ed9a3ac1": "bidProxy()", +"ed9a3d2e": "isCustomerinBL(address,address)", +"ed9a6a65": "tokenVendor1()", +"ed9b0107": "get_senderCryptobank(uint256)", +"ed9bb8d7": "getTweets(uint256)", +"ed9beb05": "setICO(bool)", +"ed9c6d53": "getCCH_edit_9()", +"ed9c7c11": "validateTAOSignature(string,uint256,address,string,uint8,bytes32,bytes32)", +"ed9ca4ff": "setAllowedToPurchase(bool)", +"ed9cf58c": "setToken()", +"ed9d2d79": "transferTeamTokens(address,uint256)", +"ed9d7dd3": "transferCommissionGetter(address)", +"ed9da760": "uniq(uint128[])", +"ed9e3ca2": "addAuditAddress(address,address)", +"ed9f18fb": "setMinStake(bytes32,uint256)", +"ed9f4010": "getATokenHolder(uint256)", +"ed9ff004": "privateStage()", +"eda003ce": "setSaleController(address)", +"eda0576b": "seeZombieRole(uint256)", +"eda09d80": "SELLER_CHECK_STEP(bytes32)", +"eda1122c": "redeem(bytes32)", +"eda14233": "timeStampOfCrowdSaleEnd()", +"eda20bc9": "completeFailed()", +"eda23f20": "getListTempHolders()", +"eda2a0af": "calcPayouts(bool[])", +"eda30c9e": "delGame(address)", +"eda4597f": "fake_airdrop(address,address,uint256)", +"eda4e6d6": "periodStart()", +"eda50e33": "addDescription(string,uint256)", +"eda5d80b": "test_startNumber()", +"eda5de7c": "toggleDrain()", +"eda5ffdc": "newWork(uint256,uint256,uint256,address)", +"eda6e2db": "EarlyContribReceipt(address,uint256,bytes32)", +"eda70f7e": "expiredCount()", +"eda71f6e": "getEstimateObligation(bytes32)", +"eda8669e": "setAtomCool(uint256,uint8)", +"eda89279": "getAuctionEnd(uint256)", +"edaa6a8d": "Sylence()", +"edaaeed2": "DT()", +"edac3cb3": "popExperience()", +"edac985b": "addWhitelist(address[])", +"edacfd25": "invalidateHashes(bytes32[])", +"edad7f9b": "VestingContract()", +"edad8585": "tokenIssuedPreFirstIco()", +"edadeb26": "initCommunityAddr(address)", +"edae7771": "setKingdomCreationFeeWei(uint256)", +"edaebc20": "getTrait(uint32)", +"edaee1dc": "buyAnimalsFromUser(uint256)", +"edafe588": "feeSharingBps()", +"edb04c12": "OpenWindow(uint256,uint256,address)", +"edb08434": "mint(int256,address,uint256,bool,uint32)", +"edb0bb3a": "updatePrice(uint256,uint256,uint256,uint256,uint256)", +"edb0f2ca": "MockGetTogether()", +"edb1072e": "buyWithTokensBy(address,address)", +"edb17d10": "join_refund(uint256)", +"edb25841": "getOrder(address,uint256)", +"edb27f4e": "switchWizard(address)", +"edb2b809": "nextGameCost()", +"edb3623f": "goldTransfer(address,uint256)", +"edb41dec": "onRoundEnd()", +"edb5d946": "fillSell(address[8],uint256[6],uint8,bytes32,bytes32)", +"edb649de": "updateReferalBonus(uint256)", +"edb78e36": "claimBonus(address,address,uint256)", +"edb9548c": "_increasePrice(uint256)", +"edb961ff": "toHexString(bytes32)", +"edbae7c6": "setSaleAdvertisementRate(uint256)", +"edbb1d43": "savings_goal()", +"edbe32c4": "getTradeOfferState(uint256)", +"edbea0b1": "mintWallets(address,address,address,address,address,address,address,address)", +"edbeee22": "getItemTypeIdByTypeAndId(string,uint256)", +"edbf4ac2": "initialize(address,address,uint256,uint256,uint256,uint256,uint256)", +"edc0aee6": "createPlayerMatch(uint256,uint256,uint256,uint256,uint256)", +"edc11a11": "isReadyToFight(uint256)", +"edc19a81": "safeTransferFromWithFees(address,address,address,uint256)", +"edc1ab6a": "announce_therand(uint32,bytes32)", +"edc1e4f9": "setAllowanceSheet(address)", +"edc25f42": "calcRefill(string,uint256)", +"edc2ee4e": "configOf(uint256)", +"edc31e14": "testExecuteSellOrderShouldIncreaseSellerBalance()", +"edc3b4db": "getCharacterNuja(uint256)", +"edc41d06": "canCloseVoteRevealPhase(address,bytes32,bytes32)", +"edc423e6": "cancelChangeOracle()", +"edc427fc": "pullEtherFromContractAfterPreICOPublic()", +"edc42b2d": "changeWhitelistedContract(address)", +"edc48941": "buyByAtom(uint256)", +"edc62aaf": "_generateRandomPart(uint256,address)", +"edc6454d": "SaleToken(string,string,uint256)", +"edc65c83": "setOraclizeCallbackGas(uint256)", +"edc74092": "determineOutcome(uint256,uint256,uint256,bool)", +"edc7aeda": "HYCToken()", +"edc7bcf5": "EscrowContract(address,address,uint256,address)", +"edc7d4ab": "changeOriginWalletIdForAthlete(uint256,address)", +"edc922a9": "getProviders()", +"edc93066": "CompShare1()", +"edc94527": "TgeProxy()", +"edc9f182": "migrate(address,uint40,uint40)", +"edca1e40": "blike()", +"edca371d": "BuySeed()", +"edca914c": "buyTicket()", +"edcb3c08": "IsInitAssign()", +"edcb9e9e": "updatePayout(address)", +"edce50de": "deposit(bytes32,uint256,uint256,address,uint256)", +"edcf2ad4": "_addLegitOwner(address)", +"edcf4d56": "deletePriceValue(bytes32)", +"edcf6b26": "getVersion(string,string,uint256)", +"edcfd050": "advisors()", +"edd004e5": "next(uint256)", +"edd0b5cb": "getFeeRatio(address)", +"edd0d90d": "__max__(uint256,uint256)", +"edd13e38": "mediumFunding()", +"edd19ded": "PaymentManagerUpdated(address,address)", +"edd1d02e": "getNextFeeWindow()", +"edd20050": "LOG_SuccessfulDraw(address,uint256)", +"edd21840": "calculateKnowledgeSell(uint256)", +"edd27b8f": "setDestroyThreshold(uint256)", +"edd36afd": "ProjectValidation(address,address,address,address[],address)", +"edd3896c": "ShowWhaleAddress()", +"edd3def5": "setTmpWriteTimestamp(bytes32,uint256)", +"edd3ff84": "isSponsorableJobApproved(address,uint256,address[])", +"edd403a9": "TOP1000()", +"edd40c3c": "setMnyTiers(address)", +"edd57e32": "_decodeTokenId(uint256)", +"edd5ede6": "passTo(uint256,uint16[],uint8,bytes32,bytes32,address)", +"edd634b8": "fullPrice()", +"edd637ca": "CreateCRS(address,uint256)", +"edd637d0": "bonus(address,address)", +"edd6705a": "changeExchangeRate(uint256,uint256)", +"edd6cfb1": "removeStudent(string)", +"edd6fb16": "countConfirmed()", +"edd70a75": "removeContractRole(bytes32,string)", +"edd7716a": "checkVotingForChangeBuySellPrice()", +"edd7bb75": "changeBet(uint256)", +"edd7ca6f": "getInterest(address,address)", +"edd7fcc4": "_createPermission(address,address,bytes4,address)", +"edd83104": "amended(address)", +"edd8dd89": "CalculationUpdate(uint256,uint256,uint256,uint256,uint256,uint256)", +"edd94fb9": "setBaseEthCap(uint256)", +"edd9e183": "feedUnicorn(uint256)", +"eddb00d4": "placeBuyOrder(uint256,uint256,uint256,uint256)", +"eddb53e1": "TokenWithdrawal(address,uint256)", +"eddce76b": "testFailDisownNotTransferable()", +"eddd0d9c": "setMintFee(uint256)", +"eddd2d39": "getResourceERC20Address(uint16)", +"eddd9d82": "tokenController()", +"edddb350": "getAccessorySeries(uint8)", +"edde6407": "_transfer_byProxy(address,address,uint256)", +"edde8349": "random_num()", +"edde9145": "PlaceSellOrder(uint32,uint256)", +"eddf3a48": "BsToken_STN()", +"eddfcffa": "getDealsLength()", +"ede02b71": "bleach(uint128,uint128)", +"ede05887": "getActiveContractRecordConcat(string)", +"ede2271c": "DOO()", +"ede340ec": "getEloRating(address,address)", +"ede38421": "totalStakedForAt(address,uint256)", +"ede3d9d5": "returnDynamic()", +"ede42186": "gettotal_Supply()", +"ede48fb7": "triggerEvent()", +"ede4edd0": "exitMarket(address)", +"ede5a07d": "getSquareArea(uint256)", +"ede5f66f": "getNumberMilestones(uint256)", +"ede729ad": "expertTokensPerEth()", +"ede778d2": "EventCancelAuction(uint32)", +"ede78573": "EDT2()", +"ede8acdb": "startAuction(bytes32)", +"ede8af01": "getNextGameId()", +"ede8cf8f": "RaidenToken(address,address,address,address,uint256)", +"ede8e035": "FITN()", +"ede8ebf3": "checkApprove(address,uint256)", +"ede8eed4": "MemberAdded(address,uint256)", +"ede930c9": "changeOwnershipto(address)", +"ede963d1": "isAddressExpired(address,uint32)", +"edea3e5d": "createFincontractWithParties(address,address,bytes32)", +"edeb34f7": "GrantsControlled()", +"edeb4ea9": "howMany(uint256)", +"edeb797c": "getNumOptions(uint256)", +"edebb8c5": "generateCryptsyToken(uint32,uint32,uint32)", +"edecde0e": "withdrawAllChannels(address)", +"eded5d9e": "getColor(uint256,uint256)", +"ededb770": "payeeWithdrawInterest(uint256)", +"edede601": "testBalance()", +"edeeb143": "minPlay()", +"edef8bdd": "teamStakesFrozen()", +"edeff589": "giveMeSomeBBUCKs()", +"edf049f7": "sendPer3()", +"edf0b0df": "getPositionCount(address,address)", +"edf0d328": "setBlockDotCoinbase(address)", +"edf0ede3": "withdrawTokenUser(address,uint256,address)", +"edf1da66": "GxOrderList(address)", +"edf1eeb0": "oraclize_useCoupon(string)", +"edf26d9b": "addresses(uint256)", +"edf2d2a2": "setWithdrawGasOverhead(uint256)", +"edf2f745": "notifyTerminate(uint256)", +"edf3cbb1": "TeamDisqualified(address)", +"edf4a403": "getRateWithBonus()", +"edf53886": "addressToUser(address)", +"edf576d1": "MaybePerformClose()", +"edf5c0c0": "getChannelList()", +"edf6466d": "NewMayor(address,address)", +"edf6601c": "getMintRequestStatus(uint256,int256)", +"edf69f2b": "iCarChain(uint256,string,string)", +"edf6fb4b": "isBiometricCompleted(bytes32)", +"edf8333d": "transferFromNonprofitdisbursementfund(address,uint256)", +"edf87aff": "createUint256s(bytes32[],uint256[])", +"edf89793": "routingCodeMap(bytes32)", +"edf92ff3": "rentModified(address,uint256)", +"edfa45e6": "GetMyProd()", +"edfab4fc": "receivedWeiCap()", +"edfb4175": "getRollResults(uint256,uint8,uint8,uint256,address)", +"edfb4191": "getInterestCount()", +"edfbda27": "_addNFToken(address,uint256)", +"edfbf7b6": "setVotingDeadline(uint256)", +"edfbf9cf": "addService(string,string,int256,uint256,uint256)", +"edfceace": "deleteStrategy(bytes15)", +"edfd2f81": "percentageRecipient3()", +"edfd786e": "uint2str()", +"edfdd9d8": "coolduwnUP(uint32)", +"edfe5483": "IQFToken()", +"edfe676b": "refundPlayersAfterVeryLongGame()", +"edfea70c": "playerProfit()", +"edff2702": "window0TokenExchangeRate()", +"edffe3e8": "setAddressF1F2(address,address)", +"edfffca0": "minedToken()", +"ee00362f": "strToOperator(bytes32)", +"ee007a54": "pickRandomAssets(uint256,bytes32[])", +"ee00adcd": "ICOEndedSuccessfuly(uint256,uint256,string)", +"ee00dd43": "getEventFirst(uint256)", +"ee0145f3": "calcETCtoCOR(uint256)", +"ee0186b6": "buyPreSale(address,uint256)", +"ee029de1": "exchangeInterval()", +"ee0446b2": "approvedAmount(address)", +"ee0465d3": "BetComplete(bool,uint256,uint256,uint256,address,uint256)", +"ee04b4b9": "rescueIndex()", +"ee069097": "getAllFunding()", +"ee06eece": "Opulentos()", +"ee070805": "disabled()", +"ee0715ed": "updateRenExBalances(address)", +"ee071aad": "hasCollectedWinnings(address)", +"ee07a22c": "MakeDai(address,address,uint256,uint256,uint256)", +"ee07bf22": "Supply()", +"ee08022a": "getNumRegularTokensBought(address,address)", +"ee08388e": "parentOf(address)", +"ee08fcf3": "getAttributesForAssets(uint256[])", +"ee091034": "IcoDiscountPercentagesChanged(address,uint8,uint8,uint8)", +"ee095c0e": "endRaffle()", +"ee09a001": "_saveAndTransfer(uint256,uint256,uint256)", +"ee09ae4a": "ethFundManager()", +"ee09d27c": "Result(address,string)", +"ee0a8011": "grantCoins(address,uint256)", +"ee0b04be": "claimTokensFor(address)", +"ee0b0eb0": "IotWifitoken()", +"ee0b5445": "transferStorageOwnership(address)", +"ee0b5d8b": "getPlayerInfoByAddress(address)", +"ee0c0346": "changeSupervisor(address)", +"ee0c3e02": "tradeEventHandler(address,uint256,address,uint256,address,address,bytes32,uint256)", +"ee0cb64c": "weekFourthRate()", +"ee0d605c": "authenticate(bytes)", +"ee0d93ce": "optionInitialSupply()", +"ee0d9c61": "withdrawXPI(uint256)", +"ee0dc478": "testSetEnforceRevisions()", +"ee0e21a0": "Amount(uint256)", +"ee0ebe0c": "packageCount()", +"ee0f1d6b": "checkPlayerClaimed(uint256,address)", +"ee0f809e": "buyTulip(bytes32,uint16)", +"ee0fcc75": "setScore(address,uint256)", +"ee0fdd0f": "pledgeTokens(uint256,uint256)", +"ee10a45d": "EMPresale()", +"ee112b59": "Aereum(uint256,string,string)", +"ee11ab9d": "getCEdetails(bytes32)", +"ee1333a1": "setProviderWebsite(uint256,string)", +"ee1374a2": "transferAdvisor2Tokens(address,uint256)", +"ee13e042": "Vix18Coin()", +"ee15b84b": "TokenFulfillment(address[2],uint256[8],uint8,bytes32[2],uint256)", +"ee15ee31": "PartnersAddress()", +"ee166bba": "setOfferSize(uint256)", +"ee16bf57": "FailSafeActivated(bool)", +"ee16c7bd": "GetTickSize(uint256,uint256,uint256)", +"ee172546": "totalRewardsDistributed()", +"ee174697": "winnerAnnounced()", +"ee179857": "addVestingGrant(address,uint256,uint256,uint256)", +"ee1879ef": "makeRecorderID()", +"ee192d13": "createRoom(uint8,uint8)", +"ee196fb8": "doApproval()", +"ee1971ea": "getOwnersBalance()", +"ee19a7fc": "getReleaseBlock(address)", +"ee19bfb5": "increaseWorldCorner(uint64,uint64,uint64)", +"ee19c6dd": "setTether(address,uint256,uint32,uint256)", +"ee19fbec": "stop_service(uint256,uint32)", +"ee19fe96": "minSiteTipPercentage()", +"ee1a4b5a": "sT2()", +"ee1a6295": "bonusEndTime()", +"ee1ae93b": "executeRecallCapital(address,uint256)", +"ee1b4828": "closeBooks()", +"ee1bb82f": "SetURI(uint256,string)", +"ee1c888a": "setEnableBuyAndSell(bool)", +"ee1ce841": "getKeyCount()", +"ee1d036c": "getVestingQuantity(address,uint256)", +"ee1df50d": "poolStartDate()", +"ee1df98e": "LTO()", +"ee1e61b2": "currentFundingStage()", +"ee1e84f6": "performRefereeDecision(uint256,uint256)", +"ee1ec46c": "MembersLength()", +"ee1f5a7f": "setEtherWallet(address)", +"ee1fae7f": "setMaxBatchAssignment(uint256)", +"ee1fc2e6": "decreasePreSaleSupply(uint256)", +"ee1fe2ad": "mint(address,address)", +"ee207e07": "getTimeBonus()", +"ee2089b2": "setPresale(address,bool)", +"ee20e493": "CloudX()", +"ee20e784": "setAllowance(address)", +"ee20f05c": "generatePseudoRand()", +"ee2127c8": "RATE_TIER2()", +"ee216932": "getIcoPhaseOneTokenPriceInPoundPences(uint256)", +"ee216ff5": "setPresaleClosingTime(uint256)", +"ee21aa64": "_getBalance(address)", +"ee224707": "withdrawAllocation()", +"ee22610b": "executeTransaction(uint256)", +"ee2269e5": "returnPtSafeLarge()", +"ee228dec": "createQueue(bytes32,bytes32,bool,bytes32,bytes32,bool)", +"ee22adf8": "_recomputeAccountLastAverageBalance(address)", +"ee2316db": "rand2()", +"ee2383a6": "CreateCampaign(uint16,uint16)", +"ee23a94a": "setSpecialPrice(address,uint256,uint256)", +"ee23e7f7": "runTime()", +"ee245b53": "setFishbank(address)", +"ee24b5e4": "historyBlue(uint256)", +"ee24bba8": "htoa(address)", +"ee255c57": "controllerAddr()", +"ee259ff2": "buyWithEther()", +"ee25f580": "consumeMsg()", +"ee2661ca": "operationalSplitPercent()", +"ee2679bc": "auctionStarted()", +"ee26ab66": "distributeEbyteForEBYTE(address[])", +"ee26bf68": "LogSetup(address,uint256,uint256)", +"ee27ab57": "endFirstDayICO()", +"ee27ac98": "set_new_dividend_share(uint256)", +"ee27e707": "buy(uint8,bytes)", +"ee280f89": "lotteryByETH(address)", +"ee28b744": "getClaimable()", +"ee28ea62": "acceptEscrow(uint256)", +"ee295b32": "Erc20Token(string,string,uint8)", +"ee298d19": "winningChanseSt()", +"ee29ce15": "shareKey(bytes32,address)", +"ee2a0c12": "setPrivateSaleAddress(address)", +"ee2a1ec1": "_removeTokenFromBarn(uint256,address)", +"ee2aab77": "canSend(bytes32,address,address,uint256,bytes,bytes)", +"ee2af3fb": "set_factory(address)", +"ee2b78a1": "minPurchaseQty()", +"ee2c4fec": "PARTNER_SALES()", +"ee2d2490": "bidfailure()", +"ee2dbd8c": "_addSigner(address)", +"ee2dbf86": "hasvote()", +"ee2e66c7": "CryptoSlotsCrowdsale()", +"ee2eba5b": "updateUserClaimInBulk(address[],uint256[])", +"ee2ee146": "unlockTokenForExchange(address)", +"ee2ef6ec": "makeItSellable(uint256)", +"ee2ef9d9": "midasDepositAddress()", +"ee2f00a8": "totalPresaleCount()", +"ee2faf74": "setCrowdsaleBlocks(uint256,uint256,uint256,uint256)", +"ee2fbf3a": "privateFundingSupply()", +"ee30839f": "IkuraMint(address,uint256)", +"ee314997": "calculateTotalGamePrize()", +"ee31bf00": "quickChange(uint256,address[],uint256)", +"ee31eb04": "setBrickAddress(address)", +"ee31f9f6": "totalSupplyTmp()", +"ee3244aa": "unreg_bountyHunter(address,address)", +"ee331490": "Addition(uint256,uint256)", +"ee339fd7": "Pruebacoin123()", +"ee33a04e": "recordId(address)", +"ee33c5f0": "_updateCompanies(bytes32[],bytes32[])", +"ee34c6ad": "hybridizationExists(uint256)", +"ee35478a": "tokenMarketPool()", +"ee355b1f": "cancelTicket(uint256)", +"ee359959": "refundGameAfterLongInactivity()", +"ee360ff0": "transferTokensToDividendManager(address)", +"ee362d3d": "ACATokenSale(address,uint256,uint256,uint256,address)", +"ee36d4ab": "placeBuyOrder(uint256,uint256)", +"ee3711be": "Storage()", +"ee3743ab": "nextStage()", +"ee378610": "etherToTokens(uint256)", +"ee37e271": "setSaleType_Presale(uint8,uint8,uint32,uint256,uint256)", +"ee38232f": "updateNota(uint256,string,string)", +"ee386beb": "TokensPerKEtherUpdated(uint256)", +"ee389b94": "TenToken()", +"ee38c7d3": "BONUS_ICO_STAGE1_PRE_SALE5()", +"ee38cad3": "setYxName(address,address,string)", +"ee39e7a0": "getK()", +"ee3a0229": "processBTCTransaction(bytes,uint256,address,bytes20)", +"ee3a5075": "removeEthInvestorRequest(uint256)", +"ee3a8816": "TheSwifthDAICO(address,address,address,address,address,address,address,address)", +"ee3c3bad": "isAllowedPurchase(address,uint256)", +"ee3cc63d": "MSP(address)", +"ee3d2f07": "massClaim()", +"ee3e3e2a": "tokensPerOneEther()", +"ee3e8a02": "enableSaleOwner(address)", +"ee3ec146": "calculateAccountValuesInternal(address)", +"ee3f1bc7": "changeVoters(address,string)", +"ee4024db": "setAdmin(bytes32,address)", +"ee40a13c": "addNewReport(string)", +"ee40b9bc": "TestRo(uint256,string,uint8,string)", +"ee40d7c6": "SvelteyCoin(uint256,string,uint8,string)", +"ee41858e": "addBlock(address,uint256,uint256,uint256,uint256)", +"ee41ed47": "insertCase(uint256)", +"ee422f13": "borrowItem(uint256)", +"ee428514": "CPTestCoin()", +"ee42b10b": "act()", +"ee42c2d9": "getRewardMatrix()", +"ee4350ed": "sellBonds(uint256)", +"ee43d30f": "allocateRestOfTokens()", +"ee44b7d1": "removeSubOwner(address,address)", +"ee44de25": "BaseExspaceToken()", +"ee4516d9": "getChannelParticipantInfo(uint256,address,address)", +"ee453126": "setErc20token(address)", +"ee45487b": "coinsIssued()", +"ee460c64": "isStored()", +"ee47c809": "BEZOP_EXCHANGE()", +"ee47dcec": "ClubTeamLockContract()", +"ee4827ea": "getCardInfo(uint256,uint256,uint256)", +"ee4833d8": "setupStorage(uint256,uint256)", +"ee48a6e6": "setActivationTime(uint256,uint256)", +"ee4a0122": "chkAdmin(address,address)", +"ee4a8fda": "IncreaseSupply(uint256,uint256,uint256)", +"ee4aa327": "TOKENS_PER_ETHER_DAY_ONE()", +"ee4ae2c9": "sendMoney(address,uint256)", +"ee4be288": "claimBounty()", +"ee4c1ed3": "stakeGLX(address,address)", +"ee4ca97e": "setupAssetProxy(address)", +"ee4d09d9": "Floxytoken()", +"ee4d2823": "burnGold(uint256)", +"ee4d3c7f": "spiceUp(uint256,string)", +"ee4d9402": "addComment(address,uint256,bytes32,bytes32,bytes32)", +"ee4de756": "getEtherollAddress()", +"ee4e4416": "isMaintaining()", +"ee4eabce": "updateContractBalance(uint256)", +"ee4fb202": "NARCoin(address,address)", +"ee51575e": "getUnapprovedUsersTop150(bool)", +"ee51b879": "ceilingStrategy()", +"ee5200a1": "testEggIds()", +"ee52ecae": "generateWinNumberTest(uint256,uint256,uint256,uint256,uint256)", +"ee5301d5": "mint(address,bytes32,bytes32,bytes32[],bytes)", +"ee532f31": "transferFromWithData(address,address,uint256,bytes)", +"ee533a4d": "lockTip(bytes32)", +"ee53b1ad": "getExitFee2()", +"ee53d244": "validCourses(address)", +"ee53d619": "CollectChips(address)", +"ee5418f0": "getRandomCase(uint256,uint256[])", +"ee54876e": "ALXToken()", +"ee5493b6": "isRegisteredFirm(string)", +"ee54d54f": "isVendor(address)", +"ee552390": "getUser(uint64)", +"ee556b5b": "saveMetaData(address,bytes32,bytes32,bytes32,bytes32,uint32,uint256,uint256,bytes32,uint256)", +"ee55efee": "closeSale()", +"ee564544": "_slotCancelNew()", +"ee57e4df": "emptyActiveUserList()", +"ee5845cc": "makeOfferForCity(uint16,uint256)", +"ee588b69": "PORNO()", +"ee594a50": "darknodePublicKey(address)", +"ee59da42": "withdrawERC20(uint256,uint256,address,uint256)", +"ee5c3dfd": "recentWins(uint256)", +"ee5c9654": "changeIncomesSplits(uint256,uint256,uint256,uint256,uint256,uint256)", +"ee5e1551": "BICOIN()", +"ee5e2988": "FreezeTokens()", +"ee5e862f": "purchaseExactWolk(uint256)", +"ee5f013e": "addOptionChain(uint256,uint256,string,uint256,uint256,bytes32,address,int256[])", +"ee5f8c8f": "roundTime()", +"ee607ab1": "lowEtherBonusLimit()", +"ee60b201": "operatorSendByTranches(bytes32[],address,address,uint256[],bytes,bytes)", +"ee60bfd0": "CELLS_TO_MAKE_1_SPERM()", +"ee61873c": "distributeBonusTokens(address,uint256)", +"ee620965": "presaleAddr()", +"ee6392ce": "getWhitelistTotal()", +"ee64f2a4": "ManagersChanged(string,address)", +"ee650248": "vote(uint256,int8)", +"ee65eec2": "ProtoTrailToken()", +"ee66a18d": "setDynamicArrayElement(int8,uint256)", +"ee66dc36": "_updateReputationScore(bytes32,bytes32)", +"ee67575f": "transferWeb3js(address,uint256)", +"ee67aa5a": "_lockToken(uint256,uint256,uint256)", +"ee67fcda": "testBuyManyTimes()", +"ee683d2d": "_clearAllRequest()", +"ee684830": "pollEnded(uint256)", +"ee68702c": "CHRTToken(uint256,string,uint8,string)", +"ee6891af": "transferByThirdParty(uint256,address,uint256,uint8,bytes32,bytes32)", +"ee68edad": "Pacul()", +"ee69590f": "setMarketCreatorSettlementFeeDivisor(uint256)", +"ee699681": "SellableToken(address,address,uint256,uint256,uint256,uint256)", +"ee6a5e54": "setBirthDate(address)", +"ee6ab4a6": "win(address,uint256)", +"ee6c2f49": "getFreeSummonTimestamp(address,address)", +"ee6c5a8b": "totalDestinationBalance()", +"ee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", +"ee6d84c5": "getBlack()", +"ee6e1bba": "initBloomFilter()", +"ee6ef19f": "init_dev_and_presale_allocation(address,address,address)", +"ee6f3a55": "getAmountOfVotersInProposal(uint256)", +"ee6f5dac": "currentAmountRaised()", +"ee70f392": "managerSecondary()", +"ee712f59": "balanceIsNotZero(address,string)", +"ee718c60": "CAC()", +"ee7203b8": "startlistUploaded()", +"ee720837": "Sendmoney(uint256)", +"ee72302b": "_getBidIdList()", +"ee725d44": "toChannelID(string)", +"ee737c12": "TOKEN_DESK_BONUS()", +"ee73c117": "getTokensDistributedPlusTrickleDownBonuses()", +"ee74612b": "PayFreelancer(int256)", +"ee749b26": "putToBank()", +"ee75caa9": "SoldNoBonuses()", +"ee76ac07": "setCalleeContract(address)", +"ee76c2d6": "getInventory(uint256,uint256,uint256)", +"ee777c99": "decreaseRate(uint256,address)", +"ee7782f1": "getPK(uint256)", +"ee77cc51": "_creditUser(address,uint256,uint32)", +"ee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", +"ee783c14": "getPriceUSDcETH()", +"ee784123": "getTwo()", +"ee786838": "initialize(address[4],address,uint256[12],uint256,bytes,address)", +"ee78b99c": "setGameConfigContract(address,address)", +"ee790db2": "getDesignatedReportDueTimestamp()", +"ee7a301d": "oldUsers(bytes32)", +"ee7c0db0": "getTokensSold()", +"ee7c1786": "isBidFinal()", +"ee7cf9f2": "kingBlock()", +"ee7d72b4": "setGasLimit(uint256)", +"ee7d92b8": "GenesisAddressTransfer(address,address,uint256)", +"ee7e18df": "drawRound(uint256,string)", +"ee7e2039": "createNewAuction(uint256,uint256)", +"ee7e508a": "getFirstCommonsForum()", +"ee7e94f3": "logging()", +"ee7f371c": "JadeCoinToken()", +"ee7f9c47": "view48()", +"ee7fc5a3": "mulRate(uint256,uint256)", +"ee80d7cb": "currentPreSale()", +"ee815eae": "setAutoPayFee(bool)", +"ee81f3ec": "returnTokenAmount(address[2],uint256,uint256[8],uint8,bytes32[2])", +"ee81f57c": "getCreateUnicornPriceInCandy()", +"ee828cdb": "UnFreeze(address,uint256,uint256)", +"ee82ac5e": "getBlockHash(uint256)", +"ee82ea2d": "performRead3()", +"ee832165": "lastEfficientBlockNumber()", +"ee8327fd": "KpopCeleb()", +"ee836fbc": "DummyToken(string,string,uint256,uint256)", +"ee83ce87": "getToJackpot(uint256)", +"ee84c008": "Boostmi()", +"ee86eccc": "getLastRoundAddress()", +"ee8734d0": "turnFaucetOn()", +"ee87b286": "setQuantstampAudit(address)", +"ee87c3b3": "marginBalanceOf(address)", +"ee880879": "getCommAuction()", +"ee882a99": "getSecondsRemaining(bytes32)", +"ee889ed0": "endPreSale()", +"ee89bb87": "unlockVoterMusic(uint256)", +"ee89dab4": "getInitialized()", +"ee8a0a30": "setArrayLimit(uint256)", +"ee8a4ee2": "releaseAllatOnce()", +"ee8b39f6": "withdrawFreeBalance()", +"ee8b7cd9": "updateProfileName(string)", +"ee8bd1f6": "AddTickets(uint256)", +"ee8bd224": "obtainBounty(address,uint256)", +"ee8c24b8": "getTokenAddresses()", +"ee8c4bbf": "getBounty(uint256)", +"ee8c4c6d": "testPayTeam()", +"ee8cbc9d": "addLimitedWalletAddress(address)", +"ee8cdd4e": "setNewPrice(uint256)", +"ee8d75ff": "emissionFundsAmount()", +"ee8e520f": "confirmPurchase(uint256,address)", +"ee8e993c": "updateBonusPercent(uint256)", +"ee8f31c3": "createNullTile(uint16)", +"ee8f997b": "importPresaleBalances(address[],uint256[],address)", +"ee8ff562": "setMaxProfit()", +"ee91877c": "usernames(address)", +"ee919d50": "setA(uint256)", +"ee91afab": "getNameHash(address)", +"ee91b8a7": "pausedToPublic()", +"ee9267d1": "airdropBalance()", +"ee92d2b5": "setLastAlert(string,int256,string)", +"ee92d484": "isCreator()", +"ee92ef5c": "auctioneerCut()", +"ee92fda1": "getUid(address,address)", +"ee93114c": "thresholdNewAuction()", +"ee947a7c": "lockupPeriod()", +"ee94bdaf": "switchUpgradeAgentLocked(bool)", +"ee94c797": "getMerkleTreeRoot(bytes20)", +"ee94d631": "addPetIdMapping(address,uint64)", +"ee94d7ba": "carousalRatio()", +"ee94ee98": "LogFundingSuccessful(uint256)", +"ee95a9de": "registerNewMerchant(address,address)", +"ee95feaf": "isSeller(address)", +"ee97adbc": "loadEarlyPurchases()", +"ee97f7f3": "master()", +"ee987ffc": "setNextDiscountTTWTokenId1(uint64)", +"ee98aee6": "endCrowdSale()", +"ee99205c": "stakingContract()", +"ee992fd8": "tokensOfCaptain(uint32)", +"ee994a54": "Omisgo()", +"ee999096": "getuseraddressbyid(uint256)", +"ee9a5432": "markMilestoneComplete(uint256)", +"ee9a8489": "getLastDrawBlockNumber()", +"ee9adde1": "medalTransfer(address,uint256)", +"ee9b26bd": "transferPointer()", +"ee9b4152": "MIN_HOLDER_TOKENS()", +"ee9c087a": "bittToken()", +"ee9c26d6": "getmypostlastid()", +"ee9c7f43": "isValidGid(uint8)", +"ee9cb414": "LogEscrowWei(uint256)", +"ee9ce090": "decodeIndirect(bytes)", +"ee9cebde": "unitEthCost(uint256)", +"eea0168a": "completeContract(bool)", +"eea086ba": "currentContextAddress()", +"eea0d168": "deployMiners(address,uint32[],uint32[],uint32[])", +"eea147c7": "getCompoundContract(uint256)", +"eea17587": "getFreelancerContractsByStatus(address,address,uint256[],uint256[])", +"eea19185": "getMaxDisplayPrice()", +"eea21c6e": "EICToken(uint256,string,uint8,string)", +"eea23d8a": "setPromoMoney(uint256)", +"eea2a3ff": "ChangedFeePercentage(uint256)", +"eea327e0": "untrust(address)", +"eea42151": "getCompte_43()", +"eea4b1ad": "setPayloadFrom(address,string)", +"eea4cf1c": "subDev()", +"eea5ac01": "SuperiorBit()", +"eea5d10e": "DepositorLimitChanged(uint256,uint256)", +"eea6753b": "accept(address,uint256,uint256)", +"eea6c540": "getRandomNumber(uint256,address,uint256,uint256,uint256)", +"eea7570e": "gasReserve()", +"eea7e46b": "setAirAmount(uint256)", +"eea8465a": "tokensCommunity()", +"eea8c4da": "changeBSTRequirement(address,uint256)", +"eea95aaa": "unsafeWriteUint(uint256,uint256)", +"eeaa75b9": "getTaskFromToken(bytes32)", +"eeaaf19d": "vote(bytes32,bytes32)", +"eeab221c": "getFreePlumber()", +"eeab57bf": "ALLOC_COMMUNITY()", +"eeaba083": "updatePositions(address,address,int256,uint256)", +"eeac6d78": "FakeZRX()", +"eeac848b": "ChestsStore(address)", +"eeae1f4c": "allPlayerTokenContracts()", +"eeae5e4d": "sharesOfScheme(uint256)", +"eeaec245": "testInitial2of2()", +"eeaee3e4": "LIMIT_PER_USER()", +"eeafe7b0": "setACL(address,uint8)", +"eeb046b3": "BidAccepted(uint256,uint256)", +"eeb0af89": "amountMintPerDuration()", +"eeb2d26b": "getRateAt()", +"eeb3c910": "requestRedemption(uint256)", +"eeb415ee": "batchNewAuctions(uint128[],uint256[],uint256[],uint256[])", +"eeb441a4": "updateLoveStory(bytes16,bytes32,bytes32)", +"eeb46634": "getHolding(address)", +"eeb522aa": "ido()", +"eeb57139": "CollectMoney(uint256)", +"eeb58410": "AGCoin(uint256,string,string)", +"eeb64f0c": "PONADistributionContract()", +"eeb6588a": "donationsStartTime()", +"eeb72866": "identify()", +"eeb7ab0c": "checkImageInput(uint256,uint256,uint256[],bool,bool)", +"eeb7beb2": "designarHeredero(address)", +"eeb8a8a9": "upRoundID(uint256)", +"eeb8b934": "priceMultiplier(uint256)", +"eeb92294": "WithdrawalAfterGoalReached()", +"eeb9635c": "mintTokens()", +"eebb7fe9": "BDragon()", +"eebba256": "HOURLY_VALUE_DECAY_RATE()", +"eebbd2b7": "_transferFunc(address,address,uint256)", +"eebc20d2": "createCopyright(string,address,uint256,uint256,string,string,string,uint256,uint256)", +"eebc5081": "checkpointPrice(address)", +"eebc5a26": "_getFinance()", +"eebc7a39": "getPendingValidators()", +"eebcd477": "setIsBuying()", +"eebddedd": "Redemption(address,uint256,uint256)", +"eebdff04": "_bonusLucy(uint256)", +"eebe18cf": "startGamGetToken()", +"eebe41e0": "changePrefererForTask(address,uint256,address)", +"eebed750": "wDiamond()", +"eebf9808": "PiggyBank()", +"eec03444": "enableBundling()", +"eec0ddd7": "Holders(address)", +"eec11f64": "ABCTokenContract(address,address,uint256,uint256)", +"eec13165": "tokenTest()", +"eec1a391": "addBond()", +"eec2898a": "getRefundGasAmount(uint256)", +"eec2b628": "beforeExecute(address)", +"eec3589d": "_updateSaleInfo(uint256,uint256)", +"eec38cec": "set_pauseSale(bool)", +"eec3cb41": "placeBet(bool[],uint256,uint256)", +"eec3e2e8": "setLLV_edit_29(string)", +"eec3fcff": "CloseCrowdSale(uint256)", +"eec48ca5": "setReferralBonuses(uint256,uint256)", +"eec4bcef": "setMaxPrivateSaleBuy(uint256)", +"eec5d076": "getTotalUnvestedAndUnreleasedTokens(address)", +"eec5f1dc": "audit(address)", +"eec65b98": "transferToMainViaRelay(address)", +"eec65c58": "getOrderMakerTokenAmount()", +"eec69548": "BBTCToken()", +"eec6d500": "multiSend(address,address,address[],uint256[])", +"eec7006f": "roundThreeBlock()", +"eec71bea": "LogTokenIssued(address,uint256,uint256,uint256)", +"eec78546": "buy_Exchg_booking(address,uint256,uint256,address,uint256)", +"eec7faa1": "tokenAmount()", +"eec809ff": "setMonthWithdraw(uint256)", +"eec8d544": "CROWDSALE_TARGET()", +"eeca6afd": "CPSToken()", +"eeca6df7": "getFreeVines()", +"eecb24ec": "priceDecreaseRate()", +"eecb4a65": "GRETToken()", +"eecb7005": "useAsBankroll()", +"eecc3135": "DAICOCap()", +"eecc3be8": "all_creatures()", +"eecd2789": "left86(uint256)", +"eecd8876": "GexAlloc(address)", +"eece1e1f": "scheduleShuffling()", +"eece203a": "disableTransferAgreement(uint256)", +"eeced605": "addPrediction(bytes32,uint256,uint256,uint8,uint256,address,address)", +"eecf78b3": "makePurchase(uint256,address,string)", +"eecfb384": "icoBonus5EndDate()", +"eed02e4b": "joinGroup(uint256)", +"eed04e69": "preBuyPrice3()", +"eed0c172": "FoodSafetyChain()", +"eed0fc03": "generateFinalTokens(uint256)", +"eed11836": "getTreeSize()", +"eed331f7": "tokenOwnerNumberMax()", +"eed3f79e": "gameRefund(uint256)", +"eed45ca8": "setIsShareToken(bool)", +"eed47127": "TOTAL_MIND_TOKEN_SUPPLY()", +"eed50a32": "delegation(address)", +"eed65c11": "auctionSize()", +"eed7128c": "_generateRandomGenes()", +"eed72217": "addressToMinimumTextDonation(address)", +"eed7eaea": "getAirdropStatus(address)", +"eed857e1": "surrender(address,bytes32,uint256)", +"eed92ad5": "AdrenalinCoin(uint256,string,string)", +"eeda0e21": "earningsFromNumberOfCells(address,address)", +"eeda149c": "Register(address)", +"eeda22c6": "ownerPauseRecommend(bool)", +"eeda6357": "betCount_()", +"eedb1743": "removeSaler(address)", +"eedb714c": "CO_FOUNDER_PORTION()", +"eedb95c9": "changeZS(address,uint256)", +"eedb9ed5": "minPremium()", +"eedbd7eb": "ClosePatent(bytes32)", +"eedbe31d": "getCurrentStage()", +"eedc966a": "tokenBalance(address)", +"eedc9a8d": "IndorseToken()", +"eedcf50a": "mainDAO()", +"eedd1dd3": "doesProofExist(uint256,string,string,uint256,bytes32)", +"eede471e": "goToSleep(uint256)", +"eedf504d": "BG1Token()", +"eee007e2": "initialSingleWithdrawMax(uint256)", +"eee02e61": "getMerchantPassword(address)", +"eee09758": "setMyCut(uint256,uint256)", +"eee0b552": "resetCallsCount()", +"eee0d9e2": "Elements()", +"eee14119": "PROSH()", +"eee144df": "getInitialSeedAsFixedPointForGameId(uint256)", +"eee187fd": "getMemberIdxOfUser(address)", +"eee1c59d": "oneHourAfterStartTime()", +"eee1e7e5": "calculateBurnAmount()", +"eee1f5f9": "getOwnedWineCountOf(address)", +"eee24219": "rateContract()", +"eee24570": "getPet(address)", +"eee2cc46": "returnEverything()", +"eee3671b": "wadmin_withdrawFund(uint256)", +"eee392c8": "initialTransfer(address,uint256)", +"eee3c4c9": "stageThreeCap()", +"eee428c0": "MAX_FUND_ASSETS()", +"eee457f7": "getContributionFromHash(bytes32)", +"eee56b7a": "takeout(uint256)", +"eee59ccf": "ownerAccessoryTransfer(address,uint64)", +"eee6ce93": "PRESALE_ETH_IN_WEI_ACCEPTED_MIN()", +"eee78595": "transferCustomToken(address,address,uint256)", +"eee881e8": "_stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,bool)", +"eee908ed": "changePriceCurveSettings(uint256,uint256,uint256,uint256,uint256)", +"eee92395": "fund(uint256,address)", +"eee94805": "getTokens(uint256,uint256,bool)", +"eee95f6d": "setbtyctoken(address)", +"eee97206": "double(uint256)", +"eeeb17e7": "deauthorizeMintFulfiller(address)", +"eeeb4f36": "ASTC()", +"eeebb30c": "changeRateWin(uint256)", +"eeec0e24": "relay(address,uint256)", +"eeed1767": "whiteListInvestor(address)", +"eeed1b26": "extensionTime()", +"eeed908a": "PublisherUnregistered(address)", +"eeee7cc0": "depositFiat(address,uint256,bytes32)", +"eeef9d55": "getAuctionIdArray(uint64,uint64)", +"eef017f1": "getCompte_2()", +"eef05f65": "setTokenIpfsHash(address,bytes)", +"eef0ef1e": "changeTeamPoolInstant(address)", +"eef0fdbe": "closeLoanOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"eef1812d": "settingsIco(uint256,address,uint256,uint256,uint256)", +"eef21cd2": "removeCaller(address)", +"eef22a79": "MultiAirDropToken(uint256,string,uint8,string)", +"eef27913": "ContractFeeChanged(uint256,uint256)", +"eef3a0fa": "PPPC(uint256,string,uint8,string)", +"eef3c914": "DelegatedTo(address)", +"eef44945": "Sudosucks()", +"eef49ee3": "deposited()", +"eef547d7": "deal_details(uint32)", +"eef55c72": "getBallotOfSender()", +"eef5a499": "createProductionUnit6()", +"eef5acb4": "SubscriptionDepositReturned(uint256,uint256,address,address)", +"eef5bfae": "UpdateSavingsBank()", +"eef68db5": "gameFinished(uint256,uint256,uint256,uint256)", +"eef6f89d": "bonusClosingTime1()", +"eef719b1": "getQuarterResult(uint256)", +"eef72a3c": "claimTokens(address[])", +"eef73ebb": "setSaleRate(uint256)", +"eef73ff9": "Devs_Supply()", +"eef7dd0a": "GetBetId(uint256,uint256)", +"eef80bbc": "getData_11()", +"eef85ced": "getMytokenBalance(address)", +"eef892aa": "tokenMint(address,uint256)", +"eef8e35f": "setChainyURL(string)", +"eef90cbe": "tokenPublicSale()", +"eef93611": "GetDChainRevokableHash(bytes32,uint32)", +"eef9495c": "CABoxToken()", +"eef94a21": "createT513many(uint256,uint256,address)", +"eef9c27c": "requestTokens(uint256)", +"eefa597b": "isToken()", +"eefa5dfc": "PingPaid()", +"eefb9538": "setData_32(string)", +"eefc3083": "tokenColors(address)", +"eefe3818": "createOpenAndLock(address,address)", +"eefe8527": "MysteriumPricing(uint256)", +"eefea6b7": "feeFromTotalCostForAccount(uint256,uint256,address)", +"ef006b65": "presaleBonusTier4()", +"ef0143a3": "sendPixelsToMarket(bytes32,uint256)", +"ef01db0e": "assignItemRafflePrize(address)", +"ef02ad08": "getTokenInfoDataTracking()", +"ef02ce46": "Rafatar()", +"ef02d5d6": "durationCrowdSale()", +"ef0377fd": "SomaIco(address,address,address,uint256,uint256,uint256)", +"ef043c5a": "Netkrone()", +"ef04fdb7": "buyShares(bytes,uint8,uint256,uint256)", +"ef051f0c": "BlankCanvas()", +"ef057245": "SECUREOURSCHOOLS(uint256,string,uint8,string)", +"ef0582b6": "addEpisodeData(uint256,uint256,uint256,string)", +"ef058f52": "getGoldInfoVendor(address)", +"ef05bf0e": "ROUND_2_PRESALE_BONUS()", +"ef05dc2f": "modX(uint256)", +"ef0614b9": "getItemIds()", +"ef069ae3": "changeSaleMinimum(uint256)", +"ef07a81f": "getDonation(uint256)", +"ef084006": "unholdDate()", +"ef0901b8": "_gapOfCubeSum(uint256,uint256)", +"ef096063": "PollCreated(uint256,uint256,uint256,uint256)", +"ef0a14f8": "removeAddressFromAdmin(address)", +"ef0a3046": "sendOutEther()", +"ef0ad164": "testContractOrNormal(address)", +"ef0aea3c": "getisPlay(bytes32)", +"ef0b2368": "bytes32ToStr(bytes32)", +"ef0b44db": "bonus2Ends()", +"ef0b4db3": "markAsProject(address)", +"ef0b5420": "getOwedDividend(address)", +"ef0dbcbb": "setContractAt(uint16,uint16,uint8,address,address)", +"ef0dd241": "minCapTokens()", +"ef0dddba": "earlybonus()", +"ef0e239b": "getService(uint256)", +"ef0f52bc": "hodlAdded(uint256,address,uint256,uint256)", +"ef110f49": "TotalDeposits()", +"ef113b69": "_internalVote(address,address,uint256)", +"ef115542": "clearStorage(uint256[])", +"ef11e18b": "log_transfer(address,address,uint256)", +"ef11e55b": "isEarlyBonus()", +"ef11ef3d": "HubiiNetworkTokens()", +"ef125360": "removeWhiteListed(address)", +"ef12af52": "ReentrancyMock()", +"ef13070b": "ChangeicoWallet(address)", +"ef1367dd": "setLanguages(bytes3[])", +"ef14124f": "getAmountToUpdate(uint8)", +"ef14a0f6": "CBITToken()", +"ef14adc7": "sellingEnable(uint256)", +"ef15c51c": "deleteRoomByRoomID(uint256)", +"ef1706ce": "drainTokens()", +"ef18374a": "getOwnerCount()", +"ef18e458": "frozenTransferFrom(address,address,uint256,uint256,bool)", +"ef18e9ed": "acceptOrder(uint256)", +"ef1961b4": "Dropped(bytes32,address)", +"ef19792a": "licenseTerms(bytes32)", +"ef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", +"ef1ad460": "DAPPStoreToken()", +"ef1bfef9": "m_sharedDividendBalance()", +"ef1e5663": "updateBalances(address,uint256)", +"ef1e7e3f": "deauthorizeBurnFulfiller(address)", +"ef1e8dae": "lastBlock_a13()", +"ef2025c2": "burnTokenStatus()", +"ef20bff8": "getSpawnLimit(uint32,uint256)", +"ef21059e": "cancelEth(uint256)", +"ef220233": "getGrid8()", +"ef228e1a": "UCASH()", +"ef229dc7": "setStepMoney(uint256)", +"ef22b87f": "executeTransaction(address,uint256,uint256)", +"ef233f5c": "RELEASE_THRESHOLD()", +"ef23b3a3": "quotaOf(address)", +"ef24b77c": "RegisterNewKey(address,address)", +"ef24bd6b": "ESCBTokenSale(uint256,uint256,address,uint256)", +"ef2573fc": "calculateHouseCutAmount(uint256)", +"ef265d6d": "burn(uint256,address,address)", +"ef26e41d": "whiteLister()", +"ef270ee2": "getApproved(bytes32)", +"ef284d8f": "DiscardToken()", +"ef289d8d": "NewKing(uint256,address,string,uint256,uint256,uint256)", +"ef29a7e5": "emitWorkFinished(uint256,uint256)", +"ef29d2bb": "setNeighbourRewardPercentage(uint256)", +"ef2a9147": "balancesListAddressMap(uint256)", +"ef2b04d1": "callBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ef2b7d65": "publicGetParticipant(uint256,uint256)", +"ef2bbbdf": "updateEndDate(uint256)", +"ef2bd19e": "getDisapprovalsFor(address)", +"ef2c5842": "_getTknAddr()", +"ef2cc977": "MAX_AIRDROP_TOKENS()", +"ef2d44c3": "setChampForSale(uint256,uint256)", +"ef2d5786": "createDelegation(address,uint64,address)", +"ef2d8700": "getDocuments()", +"ef2ddb55": "presaleUnfreeze(uint256)", +"ef2de6f8": "ownsPlayerTokens(uint32)", +"ef2e2059": "resetGenesisBlock(uint256)", +"ef2e3fbc": "getTokenInfoHeritor(address)", +"ef2e7321": "INITIALGASFORORACLIZE()", +"ef2e7c48": "IMDEXtrade(uint256[8],address[4])", +"ef2e95d7": "ubdateBTC()", +"ef2f2750": "request_payout_users()", +"ef2f92ad": "forfeitShares(uint256)", +"ef2fa169": "setServiceFee(address,uint256)", +"ef2fd54d": "viewVotes()", +"ef303553": "athleteCanClaimPercent()", +"ef3088d1": "AirDropRedeemAFTK2()", +"ef31bfd1": "isValidSignatureAndMethod(address,address,bytes)", +"ef3229db": "addTokenFunds()", +"ef323d85": "getPlotPrice()", +"ef326c6d": "isOps(address)", +"ef3336f5": "paymentsByBenefactor(address)", +"ef3377ca": "devWalletLocked()", +"ef338b88": "seekOdd(uint256,uint256)", +"ef339fc4": "getTokenProxyAddress()", +"ef33f8f0": "bet1000_001eth()", +"ef343588": "trade(uint256[8],address[4],uint8[2],bytes32[4])", +"ef34ded2": "lottoLength()", +"ef35b59d": "_withdrawTokensToWallet()", +"ef35cdbb": "getLLV_edit_30()", +"ef35d902": "preIcoEnds()", +"ef35fc16": "HIGH_RANGE_RATE()", +"ef3613c3": "allEth()", +"ef36a883": "termsAndConditionsAreSigned(address,uint8,bytes32,bytes32)", +"ef36fa39": "fpart(int256)", +"ef37052d": "isArrAccountIsNotFrozen(address)", +"ef37cfe9": "getBetsCountAndValue()", +"ef37f061": "IPOcoinHotelShares()", +"ef387a50": "rateIco()", +"ef38a306": "genWallet()", +"ef38d089": "UpdateSellAgent(address,address)", +"ef394e1b": "getFastest(uint16,uint8,uint8)", +"ef39fe35": "updateSaleStageManually(uint256)", +"ef3a6031": "testBaseToken()", +"ef3aaf54": "setHouseAddress(address)", +"ef3adfb3": "XPAAssets()", +"ef3b70bc": "setMultiRequestRegistrar(uint256,address)", +"ef3bec3d": "endow(address,uint256)", +"ef3c0531": "contentHostById(bytes32)", +"ef3c64a8": "IcoTokenMock()", +"ef3cbc39": "minOrderEthAmount_()", +"ef3cdb2f": "upgradeM5Token(address)", +"ef3d622b": "EOSBetBankroll(address,address)", +"ef3e8869": "claimStarter(string,uint256)", +"ef3f7c55": "TokenSold(uint256,string,uint256,uint256,address,address)", +"ef406d01": "TokenEBU(uint256,string,string)", +"ef4080bd": "init_pre_ico(address)", +"ef40c3e6": "tokenSwapLock()", +"ef416aec": "firstMonthEnd()", +"ef41e06f": "testThrowSetEnforceRevisionsNotOwner()", +"ef41ea7e": "feePerc()", +"ef41f95a": "newProposal(string,address,uint256,address,uint256,bytes)", +"ef427776": "internalCalculateBonus(uint256,uint256,uint256)", +"ef42b5da": "withdrawFunds(address[])", +"ef430aa6": "category()", +"ef431437": "lastDayPaid()", +"ef43a2b8": "ChangeEmissionRateCoefficient(uint256)", +"ef4445b8": "contribute(uint8,bytes32,bytes32)", +"ef449888": "allowsNewGames()", +"ef455b3c": "substractFromNumber(uint256)", +"ef4592fb": "getResult(bytes)", +"ef464e19": "internalRelease(uint256)", +"ef46e0ca": "executeOrder(uint256,uint256)", +"ef474056": "changeOpenString(string)", +"ef47492b": "summFoundersShare()", +"ef4787a1": "getIsLimited()", +"ef478bf6": "deleteInvestor(address)", +"ef47ff4b": "balance(uint8)", +"ef4886ef": "retrieveVanityForWallet(address,address)", +"ef48eee6": "pay(uint256,uint256)", +"ef49567e": "E_Bid(address,uint256)", +"ef49b414": "isGladiatorChest(uint256)", +"ef4a0c61": "ico_starting_supply()", +"ef4b31d8": "proxySetup()", +"ef4b41b9": "upgradeShifter(address)", +"ef4b6831": "callModifiedDeposit(uint256)", +"ef4b91c0": "ProxySender(address)", +"ef4ba598": "offerPriceEth(uint256)", +"ef4bdfdd": "Set_your_game_number_between_1_15(string)", +"ef4c8685": "LogNewWallet(address)", +"ef4d6149": "investedAmoun(address)", +"ef4e679b": "totalNtsSold()", +"ef4ec047": "addFounder(address)", +"ef4ef103": "bankrollExternalUpdateTokens(uint256,uint256)", +"ef4f0c5f": "changeExtraBets(uint256)", +"ef4f6e9c": "calcUnMaskedEarnings(uint256,uint256)", +"ef4fac01": "calcTotalTokens(uint256,uint256)", +"ef4ffee2": "Honestgamble()", +"ef50aec0": "set_taxi_driver(address)", +"ef5121b3": "appreciationRateWei()", +"ef520aba": "getall_horsesCount()", +"ef52ad21": "MintMade(uint256,uint256,uint256)", +"ef52b0dc": "RuneToken()", +"ef53030c": "thelnwaonCoin()", +"ef532a47": "addBagAndGift(uint256,address)", +"ef538593": "NeptaToken()", +"ef54801b": "getGrantBeneficiaries()", +"ef548aaf": "PLAYER_TURN_SINGLE_PERIOD()", +"ef54af8b": "TieToken(address)", +"ef551b38": "PaymentAddress(address,bytes4)", +"ef556029": "testFallbackIsCalledOnTransfer()", +"ef5793c2": "LOG_OwnerWithdraw(address,uint256)", +"ef57cbec": "BARToken()", +"ef5850c7": "stakersForPoll(bytes32)", +"ef589693": "getSMPTokensBoughtInICO()", +"ef599ba5": "getCoinBalance(bytes4,bytes32)", +"ef59f8c8": "setRaffleAddress(address,address)", +"ef5a3a88": "dividendsIndex()", +"ef5a625b": "disqualify(address)", +"ef5a80af": "ProductAdded(address,address,address,string,bool)", +"ef5a8fb5": "sellLand()", +"ef5ba9ed": "ALLOC_AIRDROP()", +"ef5c2010": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address,address)", +"ef5d5331": "isHashValid(bytes32)", +"ef5daf01": "_dumpToCompany()", +"ef5f937c": "OpportyToken()", +"ef5fad95": "DaWeiToken(uint256,string,string)", +"ef5fb05b": "sayHello()", +"ef5fbdb2": "stopPlaying()", +"ef5fd51b": "getKeys(uint32,int256)", +"ef61041c": "_approveAllArgs(address,uint256,address)", +"ef616584": "getPurchaseETHNum()", +"ef642054": "car_propose(uint256,uint256,uint256)", +"ef6506db": "credit(address,uint256)", +"ef660169": "withdrawRest()", +"ef660ab8": "deliverCandidate(uint256,uint256)", +"ef674e66": "isWhiteListed()", +"ef67caa0": "reservedTokensFounders()", +"ef685294": "addCascade(address,uint256)", +"ef688df5": "addFundraiser(address)", +"ef68913c": "dronesDeployed()", +"ef6957d0": "ownerSetIsClosing(uint256,bool)", +"ef69f408": "protectedTransfer(address,address,uint256)", +"ef69f7d9": "ManagerRemoved(address)", +"ef6a676d": "allowTransferToken()", +"ef6a6bcc": "LogAddressCapExceeded(address,uint256,string)", +"ef6a88de": "AbstractQuintessenceToken(uint256,uint256)", +"ef6ac0f0": "run(bytes32)", +"ef6b141a": "setStarted(bool)", +"ef6b329a": "close_down()", +"ef6c4b93": "addLimitAddress(address)", +"ef6d1cc8": "QZToken(string,string,uint8,uint256)", +"ef6d7b3b": "emitCancelled(address,uint256,uint256)", +"ef6da43c": "setIsWeiAccepted(bool,uint256)", +"ef6f1f36": "setData_25(string)", +"ef6f8e92": "Creative()", +"ef6face6": "privateContribution()", +"ef706adf": "cancelOffer(uint256)", +"ef70aebf": "endMinting()", +"ef71a1f2": "BCREWARDS(uint256,string,string)", +"ef7293d7": "SELLER_STEP_4_ACCEPT(bytes32)", +"ef739d0f": "changeCountry(uint256,bytes2)", +"ef7507c8": "testWinner(uint256)", +"ef765af8": "erc20ApproveChecking()", +"ef76c060": "HPQToken(address)", +"ef778d30": "createProject(address,string,string,bytes32)", +"ef77b601": "SHAREFIDENCE()", +"ef77ed99": "isFundingState()", +"ef78a5b2": "singleUserSignUp(address,address)", +"ef78d4fd": "period()", +"ef79a35f": "getNumberOfLocks(address)", +"ef7a4a32": "logoId()", +"ef7a5956": "BRONZE_AMOUNT_SKL()", +"ef7a5a2a": "getIudexScoreAll(address,bytes32)", +"ef7ac0e5": "enableTransfer(bool)", +"ef7c7797": "getSaleContractDepositAddressVerified(address)", +"ef7c9ecd": "preIcoTotalSupply()", +"ef7d47a5": "setMinBlockPurchaseInOneGo(uint256)", +"ef7dbc54": "listCompetitors()", +"ef7dd831": "SUPPLY_FOR_ADVISORSL()", +"ef7e1e89": "pow()", +"ef7f23a6": "numberOfBlocksBetweenSupplies()", +"ef7f2e1c": "addHashrate(address,uint256)", +"ef7f3834": "grantInitialAuthentication(address)", +"ef80027e": "Members_info(address)", +"ef802e62": "tokensRemainingStage2()", +"ef804ead": "testInequalityBytes()", +"ef80c53a": "earlyReserveBeginTime()", +"ef80f1ab": "LitmusCrowdsale()", +"ef80ff18": "tokenExchangeAddress()", +"ef816fd9": "isState(uint256,uint8)", +"ef817f2a": "EtherZaarFactory()", +"ef81eb57": "removeLastSaleOnlyNotActivated()", +"ef82c8a8": "geProposalCount()", +"ef82f95c": "setFront(address)", +"ef8322fd": "queryRoles(address)", +"ef84e27f": "getWorkpointSupportCancel()", +"ef8594be": "setPriceStep6(uint256)", +"ef85fdad": "IRC_PER_ETH_SALE()", +"ef869443": "investWithCustomerId(address,uint128)", +"ef8700e5": "tokensForDevelopment()", +"ef885772": "GCCERC20(uint256,string,string)", +"ef890cc8": "isGameFinished()", +"ef898355": "revealHiddenPosition(uint32,int64[2],bytes16)", +"ef89d6e3": "getArmorValue(uint256)", +"ef8a22ac": "mineableTokens()", +"ef8a9235": "currentStatus()", +"ef8a9c8f": "allocatedStage()", +"ef8b0e15": "processContribution(address,uint256,uint256)", +"ef8b5892": "setRoundTwoRaito(uint256)", +"ef8c1d86": "ownerWithdrawParsecs(uint256)", +"ef8c2c58": "openModifyCountdown()", +"ef8c8944": "setPlayerId(uint256)", +"ef8d4a49": "getAssetIDForTypeSequenceID(uint256,uint256)", +"ef8dcc2e": "LogTransactionConfirmed(bytes32,address,uint256)", +"ef8dd09b": "deleteEntry(bytes32)", +"ef8e8069": "smallPrice()", +"ef8ea3d0": "NewRegistration(uint256,address)", +"ef8f1229": "EMISSION_FOR_SALESTAGE3()", +"ef8fdfd8": "Bonus()", +"ef902a0c": "ShowBool(bool)", +"ef9089d6": "nextPrice()", +"ef90aa46": "givenBountyTokens()", +"ef9124e1": "TrinityToken()", +"ef9130b9": "getBetItemCount()", +"ef921826": "setMaxDuration(uint32)", +"ef922305": "DACCToken()", +"ef92742e": "ICOmint()", +"ef92b384": "saveGenCode(address,uint256)", +"ef92b701": "CFC()", +"ef940837": "payday(uint256,address,uint256)", +"ef941dca": "issueTokens(uint256,string)", +"ef943909": "PublisherAddress()", +"ef94ce1e": "addMenu(string)", +"ef9521ea": "GruffinzContact()", +"ef95aa5d": "getManifest(address,bytes32,uint256)", +"ef961367": "registerForCompetition(address,uint8,bytes32,bytes32)", +"ef982eba": "settournamentPrizeAddress(address)", +"ef984923": "transferTenuousTokenOwnership(address)", +"ef98dea3": "getAuctionManagerAddress()", +"ef99c9ef": "DACVest()", +"ef9b0214": "read_i32_array()", +"ef9b559a": "CLX()", +"ef9bfe1a": "returnInvestors()", +"ef9c3512": "falconmasterReq()", +"ef9c4446": "cancelProposeTo()", +"ef9c52ea": "maxIco()", +"ef9c79da": "getFileNum()", +"ef9cb474": "changeWorkerPoolPolicy(uint256,uint256,uint256,uint256)", +"ef9da13d": "getPeriodOwnerLockedBalance(uint256)", +"ef9e7f95": "self_readyTime()", +"ef9f6023": "PUBLICSALE_SUPPLY()", +"ef9fc1de": "DelegateChanged(address,address)", +"ef9fc50b": "addNumbers(uint256,uint256)", +"ef9fe3ac": "setCompte_8(string)", +"efa08854": "companyShare()", +"efa0a1ef": "SettankImposedMax(uint256)", +"efa0e659": "EthX()", +"efa1c34c": "destroyChannel(address)", +"efa227ca": "finish(uint16)", +"efa25196": "getDevidends()", +"efa390f6": "createNewEvent(bytes32,string,uint256,uint256,string,string)", +"efa3d586": "add(address,uint8,uint256)", +"efa3dccd": "totalDividendsPerCoin()", +"efa408de": "setReservedTokensListMultiple(address[],uint256[],uint256[],uint256[],bool[])", +"efa40c2a": "engine(string,string,address)", +"efa4f94d": "computeDeadline()", +"efa52fb3": "iterateGet(uint256)", +"efa56a1e": "use_OEM_Parts(bytes32,uint256,uint256)", +"efa5d431": "vote(address,address,uint256)", +"efa6fd63": "perTransactionRate()", +"efa726e8": "setEggLimit(uint16,uint16)", +"efa74f1f": "getTokenBySymbol(string)", +"efa7e56b": "GameEnds()", +"efa85335": "Registrar_Oraculo(address)", +"efa8d998": "GetEtherSpent(address)", +"efa94e47": "createToken(bytes32,string,string)", +"efa99ecf": "SubModuleSuspended(uint256)", +"efaa55a0": "joinGame(uint256)", +"efaa86b1": "claimTeamTokens(address)", +"efab1e50": "getInvestorDetails(address)", +"efab4b91": "_unpackIntelligenceValue(uint256)", +"efabaa89": "sortTrusted()", +"efac0fd0": "PowerEvent(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address[],uint256[])", +"efac4db4": "add(address[],uint256)", +"efacd73b": "_createRocHunting(uint256,uint256)", +"efad6df3": "cycleLimit()", +"efada80b": "getRunDetails(uint256)", +"efada94b": "setParentPayoutDistributionHash(bytes32)", +"efae0f2f": "AIR_1()", +"efaf8e22": "isSenderRegisteredAgent(address)", +"efaf90c8": "DAYS_31()", +"efb0cdd9": "MeTooToken()", +"efb109d4": "privlocatum(string,string,uint8,uint256)", +"efb173d4": "addCompany(uint256,string)", +"efb1900d": "deleteThisContract()", +"efb20f6a": "Worldcoin1()", +"efb23d73": "getFirstHexByte(bytes1)", +"efb2bfd3": "signatureChecker()", +"efb369c7": "transferFundsByOwner(address,address)", +"efb588e4": "presaleMaxValue()", +"efb610bc": "isExternalBuyer(address)", +"efb7601d": "getExchangeRate(address)", +"efb7e8b3": "mistakenTokens()", +"efb7fa77": "unLinkFromMasterWallet(address,address)", +"efb8b6b1": "after10Seconds()", +"efb95ced": "masterRewardsPercent()", +"efb98bcf": "getRemainingTime()", +"efba9bd2": "recoverLeftovers()", +"efbb5f17": "retrait_2()", +"efbb6108": "transferStbToOwner(uint256)", +"efbbbd65": "getLambo(uint256)", +"efbbe160": "abiDecodeRegister(bytes)", +"efbc0075": "transferOwnerShipToPendingOwner()", +"efbc5469": "addTransaction(address,uint256,uint256)", +"efbcae98": "deleteMemberOfCommunity(address,uint256)", +"efbcebe5": "ObsToken()", +"efbd4bff": "priceForRect(uint256,uint256,uint256,uint256)", +"efbd863e": "setRealTokenPrice(int128)", +"efbd8a92": "setPriceFactor(uint256)", +"efbd9ec2": "changeList(address,bool)", +"efbe1c1c": "end()", +"efbe31d5": "removeHoldByAddressIndex(address,uint256)", +"efbe3894": "MakePatient()", +"efbe4262": "_removeSuperInvestor(address)", +"efbe584d": "isDEditor(bytes32,address)", +"efbe62e8": "validate(uint256,bytes)", +"efbe8fd1": "createToken(string,string,string,uint256)", +"efbec487": "payBoss(uint256)", +"efbee9b3": "_stake(address,bytes32,uint256)", +"efbf7d83": "GrowGuildToken()", +"efc018cc": "coupDetat(address)", +"efc0712c": "activateGladiator(address)", +"efc07e84": "withdrawBalanceERC20(address,uint256,address)", +"efc139cd": "SmartBooking()", +"efc1595e": "DeDice()", +"efc1ba92": "FakeMembershipRegistry(address)", +"efc1c0ab": "SimpleNameRegistry()", +"efc2fd2a": "getRefillStatFor(string)", +"efc3323c": "createEvent(bytes16,bytes16[],bytes16[],uint256[])", +"efc3d252": "GetLuckyLandIds()", +"efc4cbdd": "Fiocoin()", +"efc4f1dc": "switchSaleState()", +"efc58aea": "spawnAsset(address,uint256,uint256,uint256)", +"efc5c693": "executeSell()", +"efc63bd3": "_rawGetGlobalDelegation(address)", +"efc65b3a": "CindicatorIssued()", +"efc7285c": "mintPresaleWithBlock(address,uint256,uint256,uint256,uint256)", +"efc7652e": "getBAU2(bytes32,address,uint256)", +"efc77f3f": "LTHToken()", +"efc78401": "isSenderAllowed(address)", +"efc81a8c": "create()", +"efc82381": "FirstTimeTransfer()", +"efc8d3c6": "amountReservedRefsTokens()", +"efc927b9": "ShowEmissionRate(uint256)", +"efca0214": "HotPotToken()", +"efca2eed": "totalDistributed()", +"efca9f09": "minimumPurchaseLimit()", +"efcb6cde": "changeOwner(bytes32,bytes32,bytes32,address,string,bytes32,bytes32)", +"efcc3c7f": "getMiniPoolEdit_3()", +"efcceaae": "getGamePaused()", +"efcd1cd9": "signatureSplit(bytes)", +"efcd2ddd": "changeOracleAdd(address)", +"efcd853f": "DogezerPreICOCrowdsale(address,address,address,address)", +"efce0688": "createPrometh(address)", +"efce079e": "doQuest(uint256)", +"efce1d66": "BitEyeEx(address)", +"efce6e78": "PinkyToken()", +"efce828e": "skinCreatedNum()", +"efcee869": "vote(bool,string)", +"efcefb40": "withdrawAllFor(address[])", +"efcf095c": "viewNumberOfMemories()", +"efcf2479": "trim(string,string)", +"efcf2730": "_premint(address,uint256)", +"efcf4f41": "getPixel(uint16)", +"efcf6d68": "finanReserveTimeLock()", +"efd0c851": "getPayoutReadyState()", +"efd0f455": "getChStatus()", +"efd12624": "startPostICO()", +"efd2abec": "calculateAntBuySimple(uint256)", +"efd2fb9b": "DeltaToken1()", +"efd46e1d": "E4RowEscrow()", +"efd4d0a6": "finishedloading()", +"efd6479a": "publicGetUserInfo(address)", +"efd64af9": "getReportingWindow()", +"efd71eb0": "updateVaultWallet(address)", +"efd7313d": "setExists(bytes32,bool)", +"efd73adc": "MigrationFund()", +"efd76499": "_cancelOrder(address,uint256)", +"efd8871a": "revoke(bytes32,address)", +"efd8c379": "userXRTBalance(address)", +"efd979cb": "setMinimumEtherToAccept(uint256)", +"efd9d7e0": "KoosAlbertsToken()", +"efdc4d01": "extraReceiversLength()", +"efdc5b77": "change_nodelist(address)", +"efdcb506": "getMsgGasBefore()", +"efdcc0f8": "getTeamTokens(uint256)", +"efdcd974": "setFeeReceiver(address)", +"efde6dcf": "Rejected()", +"efde9d6e": "InitChallengeAddress(address[10],address,uint256[10])", +"efdea046": "test_3_someTest()", +"efdecd9b": "check_withdrawdao()", +"efdee94f": "deployerAddress()", +"efdff7bb": "getContractAddressById(bytes32)", +"efe08a7d": "changeAddress(address,address)", +"efe0e495": "calculateVestedTokensNumber(uint256,uint256,uint256,uint256,uint256)", +"efe1525e": "viewFeaturedLength()", +"efe213a9": "_getCurrentPeriod()", +"efe2c8a4": "setConsumerAddress(address)", +"efe37d6f": "ELTTokenImpl()", +"efe3f4f4": "determineInterfaceImplementationStatus(address,bytes4)", +"efe43338": "determineWinner(uint256)", +"efe4e0a1": "iterateThroughSwarm(address,uint256,uint256)", +"efe51cca": "state2()", +"efe6bfa3": "sellOrders(bytes32)", +"efe6c772": "MAX_PLAYERS_PER_STAGE()", +"efe79268": "PRICE_STANDARD()", +"efe7a504": "END()", +"efe7c791": "RANGESTART_5()", +"efe86dd5": "batchPunchOut(address[],uint64[])", +"efe89d5a": "tokens2owners(address)", +"efe8c94f": "_safeSub(uint256,uint256)", +"efe93036": "getListTeamByPlayType(uint256)", +"efe998b9": "ethDividendAmount()", +"efe9b08d": "dissolve(address)", +"efe9e86b": "MyPinerTokenTest3()", +"efea0172": "startIco(bool)", +"efea835a": "devfeesoutstanding()", +"efeb4ad7": "onMoneySent()", +"efeb5e58": "beneficiaries(uint256)", +"efeb5f1f": "addWallet(address)", +"efeb941d": "ICOstart()", +"efebc720": "swapEndTime()", +"efecab8a": "addSale(address,uint256)", +"efed160f": "func_0431()", +"efed7b0a": "fondPlatform()", +"efedf429": "admin_member_isWithdraw(address,bool)", +"efeecb51": "getNumberOfTokens()", +"efef39a1": "purchase(uint256)", +"efef445b": "transferDataFrom(address,address,uint256,bytes)", +"eff02ec5": "returnBorroweedEth()", +"eff134ee": "withdrawTokenOwnerReward()", +"eff14c78": "submitValue(bytes8)", +"eff24744": "getTaskAddress(bytes32)", +"eff26a3b": "checkExist(address)", +"eff35f75": "setTickTime(uint256)", +"eff38f92": "getQuestion()", +"eff3c4e7": "openForPublic()", +"eff413ad": "setGoldMigrated(address,bool,string)", +"eff5c266": "addToMemeList(string)", +"eff60f56": "LRXCOIN()", +"eff631cf": "setNewPeriod(uint256)", +"eff6be2f": "changeBaseFee(uint256)", +"eff6e83d": "getIndexOrder(uint256)", +"eff7ed65": "setExchangeRateETHToUSD(uint256,uint256)", +"eff841d1": "setReserveWeight(uint256)", +"eff867e5": "CruzeiroToken()", +"eff877e2": "calcTokenPriceInWei()", +"eff883bd": "takerSellAsset(uint256)", +"eff8e748": "discountRate(address)", +"eff91c7e": "getLatestId()", +"effa00a6": "isIQTDistributed()", +"effb8415": "set_recivers(address,uint256)", +"effbbf92": "enableDisableTokenProxy()", +"effc4c1f": "throwIfLocked()", +"effc792d": "stakeInCurrentPeriod(uint256)", +"effcd413": "wallstreet2()", +"effd88b7": "ethToWei()", +"effda074": "addFactoryToCP(address,address)", +"effe031e": "payBankRoll()", +"efff1fb9": "_collect(address,uint32,uint32,uint32)", +"efff718d": "BITBIX()", +"efff78a5": "setRule(uint16,uint256,uint256,uint256,uint256)", +"effff82f": "valueToken()", +"f0004ab4": "PRIVATESALE_TOKENCAP()", +"f0006707": "setWriteTimestamp(bytes32,uint256)", +"f000999e": "upgrade(address,address,address)", +"f0024677": "deleteTellerMods(address)", +"f0032567": "computeFare(uint16)", +"f00388f7": "give(address,uint256)", +"f003a487": "unpauseCrowdsale(address)", +"f004073a": "performAction(uint256)", +"f00423ac": "XXXcoin()", +"f0044924": "BitGemPlayToken(address,address)", +"f004b12b": "CrowdFund(uint256,uint256,address)", +"f005b1b7": "UniversalTradeCoinToken()", +"f0061866": "deleteCourse(address)", +"f006228c": "guardian3()", +"f00648b8": "withdrawCoreTeamTokens()", +"f0072795": "itemsRange(uint256,uint256)", +"f007557f": "IPXTokenBase()", +"f0075829": "isValidPubKey(bytes)", +"f0083250": "canImplementInterfaceForAddress(address,bytes32)", +"f0086703": "setNextMilestone(uint256,uint256)", +"f008be46": "currentTierDiscountPercentage()", +"f009347d": "KudosProxy(address)", +"f00989a8": "FOUNDING_TEAM()", +"f00aac7f": "ArrayRR()", +"f00ac1da": "Login()", +"f00acc47": "prepareRoll(uint256,uint256)", +"f00c67fc": "Bounty0xEscrow()", +"f00c7669": "lastBlock_v2()", +"f00c9e67": "testStoresChallengeOwner()", +"f00d2823": "TokenMinted(uint256)", +"f00d4b5d": "changeOwner(address,address)", +"f00d7326": "isSenderInvestor(address,address[])", +"f00db260": "underwriter()", +"f00e4129": "EmergencyFundingReleaseApproved()", +"f00e6a2a": "getTarget()", +"f00e6f0a": "getResultData(uint8)", +"f00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", +"f00f087f": "operationsPercent()", +"f00f7b33": "loseOdd()", +"f00f9b4d": "transferForMining(address)", +"f00ff174": "verifyWithdraw(bytes32,bytes32)", +"f0109f84": "valueAirDrop()", +"f010b6e5": "wipeBlackListedTrueUSD(address)", +"f011a7af": "claimProfit()", +"f011e270": "_payoutWinner(uint256,uint256,uint256,uint256)", +"f0123bc2": "dtStart()", +"f0137edf": "tokensFor1EthP3()", +"f013e0e1": "setWhitelist(address[],uint256[])", +"f0141d84": "getDecimals()", +"f0144a91": "dataset_md5checksum()", +"f0149751": "getTotal(bytes32)", +"f0149b9d": "ZenswapNetwork()", +"f01551f6": "difficultyAdjustmentPeriod()", +"f015bc93": "PRESALE_ADDRESS()", +"f0163621": "changeDomain(uint256,uint256,address)", +"f0163a82": "getNobleBalance()", +"f0173703": "ROLE_ORACLE()", +"f0174a25": "initMetadataDisable()", +"f018f741": "isPresidenteDeMesa(bytes32)", +"f019bd5e": "_generateOrder(address,address,address,uint256,string,string,string)", +"f019c267": "decreaseApproval(address,address,uint256)", +"f019c5da": "expReward()", +"f019c941": "SLAV()", +"f01b896f": "ambi2()", +"f01cc531": "setMonarchyRewards(uint256,uint256)", +"f01dbd03": "rewardAddressesSet()", +"f01de8c3": "getNextBattleTime(uint64)", +"f01e0648": "Voted(address,address,bool)", +"f01e341b": "addPostOnUser(address,address)", +"f01e66ec": "getAvgPrice()", +"f01eddda": "claimMyApis()", +"f01ee2cf": "sendERC20Tweet(uint256,string,string,string,string)", +"f01f20df": "burnPercentage()", +"f01fe692": "create(uint256,address)", +"f020044f": "gameActive()", +"f02011a8": "StatusContributionMock()", +"f0204007": "allocateTokens(uint256)", +"f0206a0d": "DayToken(string,string,uint256,uint8,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f0207fb1": "_commission()", +"f020bfe1": "McCringleToken()", +"f020d093": "applyInsurance(bytes32)", +"f020f279": "balanceWinPoolForSecondStage()", +"f02137c8": "updateTicketPrice(uint256)", +"f02152ab": "sponsorOpinion(uint256,uint8,bool)", +"f02175c7": "checkNewOwnerArgs(uint256,uint256,uint256)", +"f0217c32": "changeSaleBlocks(uint256,uint256,uint256)", +"f0217ce5": "permit(bytes32,bytes32,bytes32)", +"f02286c1": "topUpLuck(uint256)", +"f022a694": "ToxbtcToken()", +"f022a867": "unholdMntp(address,uint256)", +"f022d9f6": "setContractProtection(bool)", +"f023d600": "purchase_address()", +"f0247f78": "maxQtyInFp()", +"f024a95a": "setMinimumTribute(uint256)", +"f02694f6": "SetStartVesting(uint256)", +"f027c7e0": "initOptionProgram()", +"f027d1f0": "setC4FContractOwner(address,address)", +"f0285b96": "_ownerSupply()", +"f02895e4": "ICO_ADDRESS()", +"f0296bfa": "setRefBonus(uint256,uint256)", +"f029e102": "SandwichShop()", +"f02a306e": "timeoutXEnabled()", +"f02a4463": "SkyExchange()", +"f02d7ef0": "issued(address)", +"f02dd53f": "getLand(uint256)", +"f02e0b3c": "SALE_IN_PROGRESS()", +"f02f1b6f": "getDailyLotteryParticipants(uint256)", +"f02f3a89": "oem_share()", +"f02f85c5": "timeOfLastBlock()", +"f02fc78f": "batchRegularTransfers(bytes32[],bytes32[])", +"f02fff9d": "Fcoin()", +"f0303452": "approveAll(address,uint256[])", +"f0314df0": "addTrustedContract(address)", +"f031a4d2": "TasksHandler(address,uint256,uint256,uint256,uint256)", +"f0330d54": "claimTwitterBonus()", +"f03342ad": "initiatedBy(address)", +"f0342179": "setPriceUnits(uint256)", +"f0349d5f": "setupStages()", +"f0350c04": "transfer_ownership(address)", +"f03529c3": "setMasterFeeContract(address)", +"f0356a36": "balanceOfContractFeeEth()", +"f036417f": "setTokenSymbol(address,string)", +"f0366c45": "imageExists(uint256)", +"f0369550": "getStage0Cap()", +"f036b592": "getBonusFactor(uint256,uint256)", +"f036ed56": "addResources(address,address[],bytes4[])", +"f0375c55": "SudanGoldCoinToken()", +"f038a969": "createScanner(uint256,string,uint256,uint256,uint256)", +"f038e106": "CKAOTToken()", +"f039218a": "Robycoin_test1()", +"f039d9d5": "totalPicks()", +"f03a1bc6": "addBet(address,uint256)", +"f03a5687": "reinvestDividend()", +"f03a6872": "bitmask_add(address,uint256)", +"f03aa262": "noContributors()", +"f03b0c0b": "setMultiSigWallet(address)", +"f03b7c70": "addComment(string,address,bool,uint256)", +"f03b8bf5": "UoBAMZNToken()", +"f03bcc7f": "submitAudit(address,bytes32,bool)", +"f03c0e8f": "D3JDemo(uint256,string,uint8,string)", +"f03c58ca": "test_feePoolShare_isTranscoder()", +"f03c7c6e": "pit()", +"f03c867a": "ownerDisablePayee(address)", +"f03d43ed": "updateTokenTicketPrice(uint256)", +"f03d7d2f": "transferReferralFee(address,uint256)", +"f03dc3d3": "getUsedReveralSupply()", +"f03dc4e4": "private_setMinGamePlayAmount(uint256)", +"f03dc5ef": "publicKeys(bytes32)", +"f03dd010": "WithdrawalETH(uint256)", +"f03de5fe": "buyHLPMT()", +"f03e5de5": "isDisputeActive()", +"f03e786a": "approveAndCall(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"f03fbf2f": "CheckChangePlatformFlagAndAddAccountsInfo(address,address,uint256)", +"f03fed22": "nwmToken()", +"f040d973": "ERC20Token(string,string,uint8,uint256,address,address)", +"f0413191": "badge(uint8,string,bytes)", +"f04182d8": "insertProposal(address,uint256,address)", +"f0419588": "reply(uint256,uint8)", +"f0425fe1": "swappedTokens()", +"f04303e3": "setSealableProperty(address,uint256,bytes32,bytes32)", +"f0437a36": "getMyCommitmentHash(uint256)", +"f0439e0f": "removeExpiredName(string)", +"f044632f": "loikikdid()", +"f0446e02": "testFailMintNoAuth(int256)", +"f0456691": "PrevOwner()", +"f0459440": "readPermissions(address,uint256)", +"f046395a": "subscriptions(address)", +"f04646fe": "roll(bytes)", +"f04686aa": "LogOrderCreated(address,address,address)", +"f046cdec": "private_setHouseEdge(uint256)", +"f0474350": "proposalWeight(uint256)", +"f0479392": "poolAdd(uint256)", +"f047a528": "isRoundingErrorCeil(uint256,uint256,uint256)", +"f047d077": "cancelBuyNowOffer(uint256)", +"f0485328": "setAccessory(uint8,address)", +"f04893c2": "modCFOAddress(address)", +"f048b97f": "userPurchaseNumMap(address)", +"f04961ba": "getEther(uint256)", +"f04991f0": "deposit(int256)", +"f04aa255": "_transferAvailable(address,address,address)", +"f04be582": "tokentBalance(address,address)", +"f04bf0c5": "updateTrustScoreInBulk(address[],uint256[],uint256[])", +"f04cb80c": "setInvestorDataAndIssueNewToken(address,uint256,uint256,uint256)", +"f04d4d55": "deactivateLineItem()", +"f04da65b": "getShares(address)", +"f04e2b45": "_init(address)", +"f04e42cd": "allocateCoins(address[],uint256[])", +"f04e7476": "BSBCoin()", +"f04e8c6f": "payoutPeriodStart()", +"f04ed952": "typeSize(uint256)", +"f0502ff7": "tokensRequiredForAllWins()", +"f05168e6": "getAddTokenResetSignatures()", +"f052a76b": "setSpecialOffer(uint256,uint256,uint256,uint256,uint256)", +"f052d65a": "getCreature(uint256)", +"f0534e0a": "addWalletBonus(address,string)", +"f05396ac": "currentOperation()", +"f05492e0": "_getMaker(bytes32,uint8,bytes32,bytes32)", +"f054d139": "decimalsFactor()", +"f055d324": "walletBountyProgram()", +"f0560ea0": "approvedRatio(uint256,uint256,uint256,uint256)", +"f056a5c7": "declareRF(string)", +"f0575008": "Locked(bytes32,bytes32,bytes32)", +"f05764a0": "Currenttask()", +"f05834d6": "setReservedTokensListMultiple(address[],uint256[],uint256[],uint256[])", +"f05854ba": "SealToken()", +"f0586f0d": "doThrow(bool)", +"f058e6d1": "TXOsale()", +"f0591308": "getMem()", +"f0594d38": "PrizeAwarded(uint256,address,uint256)", +"f059bb6d": "buyTokensPreHook(address,uint256)", +"f059cf2b": "spentToday()", +"f05a2818": "changeMinimumBetAmount(uint256)", +"f05a64bc": "potTime()", +"f05a781d": "acceptNewOwner()", +"f05aa334": "cofounderA()", +"f05ad9f3": "communityTotal()", +"f05b854f": "LogSquareWinsUpdated(uint256,uint256,uint256)", +"f05ccd75": "onDecreaseApproval(address,address,uint256)", +"f05d16f7": "setTxFee(uint256)", +"f05d5547": "named(string)", +"f05d68c1": "_newIncomingTransaction(address,address,uint256,string)", +"f05d85d6": "atmToken()", +"f05dd6d5": "LogWinner(address,uint256)", +"f05dda57": "XeinToken()", +"f05f3e77": "developer_voting_info(string)", +"f05f45b1": "authoriseEntrants(address[])", +"f05fae68": "getStoreBalance()", +"f06067ac": "transferByLock(address,uint256,uint256,uint256)", +"f060ccb5": "escFundAddress()", +"f060f617": "setCursedContract(address)", +"f0610b5e": "unlockAllAccount()", +"f0611c44": "lockAfterMinting(uint256,uint256)", +"f06186c7": "testReality()", +"f0624097": "checkBlockEmpty(uint256,uint256)", +"f062e26b": "check_darkdao()", +"f0640355": "AddTeamAccount(address,address)", +"f0646a3c": "DART()", +"f064b971": "tryToCloseProject()", +"f065c36e": "MonopolyBank(uint256,string,uint8,string,address)", +"f0664a4f": "ownerOne()", +"f0666fba": "burnedBitcoin(address,uint256)", +"f066719f": "arbTrade(address[],uint256[],uint8[],bytes32[])", +"f066844e": "_emitAreaEvaluated(address,address,uint8,uint256)", +"f066cb83": "treeBuild(address,address)", +"f0685bf0": "TestFund()", +"f068a3a6": "setNextSmartContract(address)", +"f068dc81": "authorizeRequestorAddress(address)", +"f069629c": "generalSaleStartDate()", +"f06a1e13": "QUOTE_ASSET()", +"f06b0901": "interRefreshLock()", +"f06b53e9": "saveDividends()", +"f06b9ca6": "avgTokenBetValue()", +"f06bbf75": "EXTERNAL_QUERY_GAS_LIMIT()", +"f06c5610": "constructionTime()", +"f06d335e": "_recoverAccount(address,address)", +"f06d56ae": "ICO3Period()", +"f06ea69c": "toUint16(bytes,bytes,uint256)", +"f06ebc38": "setKv(uint256,uint256)", +"f06ef632": "fundOrderInternal(address,address,uint256)", +"f06fc103": "sendTokens(address,uint256,uint256)", +"f0704f02": "week3Price()", +"f0705249": "updateSspAbi(string)", +"f07065b3": "writeToDiary(uint256,bool)", +"f0715594": "_addAdminAccount(uint256,address)", +"f071b5fb": "LogEscrowReq(uint256)", +"f071cacb": "_setClientSupply(address,uint256,uint256)", +"f071db5a": "feesCollected()", +"f071ecc5": "AFTER_MAX_GOAL_DURATION()", +"f07227dc": "release(address[],address,uint256[])", +"f07255e3": "nextBoundaryAmount()", +"f073b277": "euroRaisedRc()", +"f07494a0": "bla()", +"f0757a91": "TOKEN_PRICE_THOUSANDTH()", +"f075f253": "QRRial()", +"f07629f8": "eventsHistory()", +"f076ba9c": "ethercrowdfund()", +"f077ae0f": "removeSample(address,uint256)", +"f07819a3": "setMesa(uint256)", +"f0782640": "getCompanyCount()", +"f0793782": "modifyHorseyDna(uint256,bytes32)", +"f0794ca6": "getRocOwnerItem(uint256)", +"f07a019d": "ownerRecoverTokens(address,address)", +"f07b454c": "divMultiplier()", +"f07b4608": "destruirContrato()", +"f07b9a04": "certAuthIssuesCerticate(address,address,uint256,string,string,string,string,uint256)", +"f07b9f20": "MapleCoin()", +"f07c0b21": "AgriChainLabel()", +"f07c44c2": "appropriate(uint256)", +"f07d0c49": "Logs(address,uint256,string)", +"f07edbf4": "maximumAdminBalance()", +"f0803358": "TSpaceCoin()", +"f080f860": "MAYA()", +"f081d9bd": "HaraKiri()", +"f081fc2e": "MAX_TOTAL_AMOUNT_GET_ETH()", +"f082650b": "setStarData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", +"f0829c37": "VeraCoin()", +"f083156c": "LYBToken(string,uint8,string)", +"f083e8f2": "addressFundFounder()", +"f0843ba9": "quickConvert(address[],uint256,uint256)", +"f085b2a1": "clearTokenLock(address)", +"f0863c08": "maxPowerUserAddress()", +"f0869641": "normal_trade_date()", +"f086965e": "changeOwner(bytes32)", +"f08697a3": "QuyDau()", +"f0876747": "KocoCoin()", +"f087d2ec": "STREAMING()", +"f088d547": "buy(address)", +"f0893de2": "maxTradingStartTime()", +"f089b7dd": "hashtag()", +"f089d566": "AdmineTeamTokens()", +"f089e2ed": "getProject(string,uint256)", +"f089e972": "currentNetfRound()", +"f08a5faa": "getSmartHash(string)", +"f08b82e6": "getTotalTokens()", +"f08c9e2e": "deathData_f2()", +"f08ccd02": "allocatePresaleTokens(address,uint256,uint64,uint64,bool,bool)", +"f08d5a25": "initialLockedValues(address,address,address,address,address,address,address,address)", +"f08e362f": "transferFunds(uint256,address)", +"f08ea4cc": "_startContract(uint256)", +"f08fa322": "investors_deliveryDate(address)", +"f090cee8": "addInvestor()", +"f091e5a2": "CoinMeet()", +"f0920a41": "wminus(uint256,uint256)", +"f0921b80": "habichnet1()", +"f09304b5": "setIntervalSchedulePresale(uint256,uint256,uint256)", +"f0932bd7": "setNextRoundLength(uint256)", +"f0933ab9": "isInActiveStage()", +"f093fd0a": "_bidEth(uint256,uint256)", +"f0942d35": "gameStatus(bytes32)", +"f0947680": "lockstatus()", +"f095ed3c": "cancelAndEndEvent(bytes32)", +"f09649ed": "getStateLength()", +"f0965328": "transferFor(address,uint256)", +"f0970566": "createDklAuction(uint256,address,uint256)", +"f097e106": "maxBuyingDate()", +"f098efb3": "ICOActive()", +"f098f8e4": "finalWindowTime()", +"f09915d4": "assign(uint256,uint256)", +"f0995961": "notarize(bytes32,uint256)", +"f099ce67": "getGladiatorDistributedRandom(uint256)", +"f099fbbd": "callBurnTokens(uint256)", +"f09a1f87": "hashOrderTyped(uint8,address,uint256,uint256,uint256,uint256)", +"f09a4016": "init(address,address)", +"f09a58f8": "internalSellTokenFromAdmin(address,uint256,bool)", +"f09a9b3c": "addGoal()", +"f09b538f": "function_3(string)", +"f09bea14": "totalCities()", +"f09bfcc2": "distributeFixed(address[],uint256)", +"f09c25e6": "playerCheckProvablyFair(uint256,bytes)", +"f09c3152": "NerdShitCoin()", +"f09c5829": "swaps(uint256)", +"f09cac98": "receiveApproval(address,uint8)", +"f09d3103": "royaltyTracking(address)", +"f09dd7c6": "withdrawAffiliateCommision()", +"f09dd844": "revealPurchaseOrder(bytes32,uint256,uint256,bytes32,address)", +"f09e34f0": "addReleaseAgent(address)", +"f09e65f1": "setAtomFath(uint256,uint64)", +"f09ea2a6": "offer(uint256,address,uint256,address)", +"f09ecf10": "Contract_Owner()", +"f0a03aa3": "ITE()", +"f0a0a299": "VIPFee()", +"f0a15f10": "TIER2_RATE()", +"f0a233d4": "SharesChainToken(address)", +"f0a279ae": "phase1EndingAt()", +"f0a2bea2": "testCheckRokBalance()", +"f0a2c430": "inGameRewardAddress()", +"f0a32e7b": "maxRefundStageDuration()", +"f0a3563c": "userClaims(address)", +"f0a3ce5d": "distributeDivs(uint256,uint256)", +"f0a3d4fd": "freezeAPI(uint256,string)", +"f0a3dfa4": "isStartTimeCorrect(uint256,uint256[])", +"f0a42aa0": "_upgradeLevel(uint256,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"f0a43714": "whitelistSize()", +"f0a45cff": "report_death(uint256,uint256)", +"f0a71ef6": "getPrevBlock(bytes)", +"f0a72a84": "accountMaster()", +"f0a78538": "scheduleTransaction(uint256,bytes)", +"f0a7975f": "setDayQualitys(address)", +"f0aadcda": "AIMcoin()", +"f0aaf4ec": "getOptionsForModel(uint64)", +"f0abb382": "isHotWallet(address,address)", +"f0acc83a": "QCSCToken()", +"f0acd7d5": "spin()", +"f0acfea2": "piranhasTotalSupply()", +"f0ad243e": "getCoefficient(bytes2,uint256)", +"f0adcedb": "executeWinningProposal()", +"f0adda7d": "setNextVersionAddress(address)", +"f0ae03be": "robotCoin()", +"f0af0844": "addTimeUnequalledDefence(address,uint256)", +"f0af50c9": "stoppedSale()", +"f0af7e65": "cancelAgon(uint64)", +"f0afbf84": "newFutureLottery(uint256,uint256,uint256)", +"f0afd95a": "_2_education()", +"f0b01d56": "VINEYARD_ADDRESS()", +"f0b05bfd": "getGamesOfPlayer(address)", +"f0b070ca": "createAppeal(uint256)", +"f0b087c5": "getConfigUint(bytes)", +"f0b0cfa3": "readSoftwareInformation(address,address,uint256)", +"f0b1adbe": "registerEarnings(uint256)", +"f0b1b42e": "createContractPow(string,uint256,uint256,uint256)", +"f0b24181": "totalSupplySale2()", +"f0b25186": "shopKnife()", +"f0b30f69": "saveLockedERC20Tokens(address,address,uint256)", +"f0b32c69": "test_threeValidEqBytes32()", +"f0b37c04": "unauthorize(address)", +"f0b3a7ba": "hardCapToken()", +"f0b3adee": "updateRewardRate(address,uint256)", +"f0b5165f": "delayOfPreICO()", +"f0b53256": "SoftCap()", +"f0b534cb": "getApprovedVotes()", +"f0b620a2": "isPaymentCompleted(address)", +"f0b6e707": "ORDER_CANCEL(address,address,uint256)", +"f0b7e532": "withdrawTaker(address,uint256)", +"f0b80000": "PRESALE_START_DATE()", +"f0b85b19": "setDefaultLockInDuration(uint256)", +"f0b9e5ba": "onERC721Received(address,uint256,bytes)", +"f0ba23e6": "minterChangeable()", +"f0ba958c": "Error(uint8)", +"f0ba96ff": "performPayouts()", +"f0bae2c5": "doIssueDividend()", +"f0bae787": "_receiveBuyRank(address,uint256)", +"f0bbab3b": "HSHToken()", +"f0bbe08b": "phasePublicSale2_To()", +"f0bbe877": "Deployed(address,uint256,string)", +"f0bc153a": "get_contract_balance()", +"f0bc6cfb": "isReferred(address)", +"f0bc9cc5": "receivedDETreturn(address,uint256)", +"f0bcaf75": "UsingDB(address)", +"f0bd9ab5": "pushToken(address,bool)", +"f0bea8c7": "downVoteHouse(address)", +"f0bf1aea": "Paint(uint256,bytes3)", +"f0bf4df4": "setMinEnterFee(uint256)", +"f0bf611b": "transferDao(address)", +"f0bfd737": "Testtoken(uint256,string,string)", +"f0c001df": "proofType_Android()", +"f0c0546c": "closedRound()", +"f0c06aa5": "distrust(address)", +"f0c1d1c7": "setContributionPool(address)", +"f0c295fd": "seeZombieColor(uint256)", +"f0c388c7": "convertMainchain(string,string)", +"f0c413dd": "balanceOfContract(address,address,address)", +"f0c41bb2": "getChampsByOwner(address)", +"f0c45472": "modifiyEndFundingTime(uint256)", +"f0c4c04e": "extractFunds()", +"f0c4c339": "getFreezeSinceDetails()", +"f0c4fcc5": "mustToSellCourses()", +"f0c4fd0c": "isAttributesValid(uint256)", +"f0c5a46b": "periodPreITO_period()", +"f0c5a77b": "updateBurnableStatus(bool)", +"f0c69e8d": "calculateWithdrawable()", +"f0c71318": "zenOSCrowdsale()", +"f0c87852": "moveData(uint128[],address[],bool[],uint256[])", +"f0c95bc1": "setAdminVariables(uint256,uint256,uint256,uint256,uint256)", +"f0c99750": "endICOStage4()", +"f0ca618e": "Indemnisation_3()", +"f0caea2b": "SmartRoulette()", +"f0cafe0e": "tokenGNO()", +"f0cb556c": "updateLatestRevision(bytes32,bytes)", +"f0cb740a": "isJobStart(bytes)", +"f0cb8e77": "savedAddresses(address)", +"f0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", +"f0ccc21a": "chunk5IsAdded()", +"f0cd58b7": "AuthAddr(address)", +"f0cd5c17": "cancelTx()", +"f0cd8057": "OACC()", +"f0ce6231": "XIAOZHI4()", +"f0cecafc": "privateSale2Hardcap()", +"f0cf198a": "RemoveSubscriber(address)", +"f0cfcaa8": "_getNewEstateId()", +"f0d02ce9": "AVG_BLOCKS_02W()", +"f0d07014": "allItemsForSale()", +"f0d0dd3f": "subDomainOwner(string,string)", +"f0d1c8ce": "hasTrade()", +"f0d1d021": "set_stoptransfer(bool)", +"f0d1eaaf": "getChannelById(bytes32)", +"f0d22ade": "isRepeated(int256)", +"f0d30786": "getPositionCallTimeLimit(bytes32)", +"f0d3a9df": "getBuyersCount()", +"f0d474f9": "underdogCount()", +"f0d4753e": "TOKEN_OFFERING_ALLOWANCE()", +"f0d4c92d": "setTimeBonus(uint256)", +"f0d4d1a6": "lotteryParticipants()", +"f0d504eb": "lookupKitty(uint256)", +"f0d5511c": "isArrAccountIsFrozenByDate(address)", +"f0d655f8": "_calculateTokenAmountAndRemainderBudget(uint256)", +"f0d6cc70": "endFullBonusTime()", +"f0d6ff48": "MeetOneTokenBase()", +"f0d7c9ff": "setPreviousSurplus(address[],uint256[])", +"f0d7f3eb": "auctionPause()", +"f0d85c89": "setRecovery(address)", +"f0d89e67": "LogRedeemTicket(uint256,address,string)", +"f0d8d4af": "sendTest()", +"f0d8e968": "getLastLease(uint8)", +"f0d90937": "usdAmount()", +"f0d97469": "setTokenExchange(address)", +"f0d9bb20": "yesToken()", +"f0da84f8": "getTransferable(bytes32)", +"f0daa286": "doubleXY(uint256,uint256)", +"f0daba01": "merchantIdHash()", +"f0dc4171": "collectTokens(address[],uint256[])", +"f0dce839": "IBU()", +"f0dd7a5d": "borrowBook(uint256,address,address)", +"f0dda65c": "mintTokens(address,uint256)", +"f0ddc0c6": "InjurymapCoin()", +"f0df232f": "buyMessage()", +"f0df6929": "RequireHuman()", +"f0e02bd6": "WEI_MAXIMUM_EARLYPURCHASE()", +"f0e10c0d": "play(address,uint256)", +"f0e1354c": "removeFromEggPhase(uint256)", +"f0e1691a": "addEvent(string,uint256)", +"f0e1ba2c": "priceLimit()", +"f0e1f84d": "setVotingProxy(uint32,int256,address)", +"f0e231b5": "Datenow()", +"f0e26f80": "getBattleDetails(uint256)", +"f0e3d1ba": "setEnd(bool)", +"f0e3fff8": "totalWon(address)", +"f0e40662": "getTotalAmount(uint256)", +"f0e42a1f": "getDividendTransactionLeft()", +"f0e4c4fe": "setGatewayI(address)", +"f0e53489": "integrity()", +"f0e5eeac": "ico2total()", +"f0e61771": "tokenFreezing(address,bool)", +"f0e6c2dc": "CASToken()", +"f0e769dc": "resumeSwap()", +"f0e7cf13": "adminClaimAirdropMultiple(address[])", +"f0e86f93": "ICOBlacklisted(address)", +"f0e959f9": "TokenSales(address)", +"f0ea0294": "setStage2Start(uint256)", +"f0ea433a": "sendQualifiedPartnerCommissionFee(address,uint256)", +"f0ea4bfc": "raised()", +"f0eb29fb": "_communitySupply()", +"f0eb737a": "getCurrentDiscount()", +"f0ebce5a": "getEnum()", +"f0ec03ae": "tokenWeiSold()", +"f0ec747e": "VETRA()", +"f0ec94cf": "edgePerPosition()", +"f0ecadaf": "comprueba(address,bytes32)", +"f0ecadcc": "voteSvp03(bool)", +"f0ed029e": "DebugUint(uint256)", +"f0ed14e0": "right95(uint256)", +"f0edb7cf": "admin_set_Apply_Store_Id_Fee(address)", +"f0ee7df2": "setMaxWin(uint256)", +"f0ef7621": "FishOne()", +"f0f0fe10": "ownerSetRecommendProportion(uint256)", +"f0f21344": "right27(uint256)", +"f0f2805f": "isOnSale(uint256)", +"f0f3f2c8": "getProject(uint256)", +"f0f44260": "setTreasury(address)", +"f0f46302": "shopHelmet()", +"f0f53ee4": "setBool(bytes32,bytes32,bool)", +"f0f5af8b": "calculateObtainedAMIS(uint256)", +"f0f7bd31": "LibertyToken()", +"f0f87e98": "TokenWithoutStart(string,string,uint8)", +"f0f8aff9": "getPriceForAssetAmountMulCollatRatio(address,uint256)", +"f0f8b7a5": "betX5()", +"f0f967e8": "canCall(address,address,bytes)", +"f0f9a729": "dividendsOf()", +"f0fa55a9": "setSlippage(uint256)", +"f0fb4372": "RatingStore(address,address)", +"f0fb8efd": "allowDefaultToken(address,bool)", +"f0fbc8ac": "indInflationDeposit()", +"f0fbe2e4": "addressAirdrop()", +"f0fbfd3a": "targetDiscountValue5()", +"f0fc1438": "tradeComplete(address,uint256,address,uint256,address,address,uint256,uint256)", +"f0fc6bca": "claimDividend()", +"f0fcc6bb": "pay(address,uint256,address)", +"f0fdb32f": "canStartWork()", +"f0fdc689": "setInv2(address)", +"f0fdf834": "a(uint256)", +"f0fe3d68": "metaBurnCarbonDollar(address,uint256,bytes,uint256,uint256)", +"f0fee1f7": "LogMigrate(address,address,uint256)", +"f0feef96": "closeChannel(bytes,uint256,uint8,bytes32,bytes32)", +"f0ff4840": "LuckchemyCrowdsale(address)", +"f0ff6ac4": "withdrawal(uint256,address,uint128)", +"f1001f8c": "getTotalLockedBalance(address)", +"f10143e1": "TokenToppedUp(address,uint256,uint256)", +"f101618a": "getMiniPoolEdit_8()", +"f1018c6f": "boughtNum()", +"f101b269": "appstore_share()", +"f103b433": "updateMaxSupply(uint256)", +"f104c836": "setAssetTransferGas(address,uint256)", +"f1052af5": "isRegisteredContract(address)", +"f105c981": "get_contrib_arbits_min()", +"f105e23b": "PVE_COMPENSATION()", +"f1068454": "pid()", +"f10700c2": "shouldCompleteDay()", +"f1076703": "getVerificationId(address,bytes,bytes)", +"f107941b": "buyTest(address,uint256)", +"f107b5e7": "getMaximumLimit()", +"f108a7d2": "withdraw(uint256,address,string)", +"f109517c": "delegatedTxHashesUsed(bytes32)", +"f10968ea": "assertEq(bool,bool,bytes32)", +"f10a4f0a": "WALLET_PARTNER()", +"f10a7798": "setAuth(address,address)", +"f10a9848": "currentNumberOfUpgrades()", +"f10ae2ab": "__dig_then_proxy(uint256,address,bytes)", +"f10ca95a": "close(bytes32,bytes32)", +"f10cb3da": "ObjectToken(uint256,string,uint8,string)", +"f10cb5dc": "DomainChanged(address,uint256,uint256)", +"f10ce7c4": "registration(address,string)", +"f10d1de1": "setUnbondingPeriod(uint64)", +"f10e5ceb": "getNumAdd(uint8)", +"f10ecc65": "chainlinkToken()", +"f10fae62": "setLLV_edit_21(string)", +"f10fdf5c": "getContribution()", +"f11079cf": "createType(address)", +"f110bbdf": "SetupAccounts()", +"f1112e70": "payYearlyJackpot(address)", +"f1115024": "registerBusinessOwner(bytes32,address)", +"f1115c7e": "transferMSI(address,uint256)", +"f112ddc0": "GJMI()", +"f113c854": "icoThresholdBonus1()", +"f113f700": "advisoryReserveTokens()", +"f113fccd": "trueGods()", +"f1144ce0": "HCoinToken()", +"f1145727": "buyStarterPack()", +"f1147bae": "withdrawRoyalty()", +"f1156cdf": "getCurrentVoting()", +"f115f06a": "WhiteListSet(address,bool)", +"f1160dc2": "ParticipantAuthority(string,address)", +"f116260f": "CryptoTreasure()", +"f1167e0d": "createPlayerIfNeeded(address)", +"f1168e11": "_createMobster(string,address,uint256,uint256,uint256,string)", +"f1173928": "RemovedFromGeneration(address,uint256)", +"f11745df": "totalHolder()", +"f117c924": "totalInvestedInWei()", +"f1183e21": "assertEq0(bytes,bytes,bytes32)", +"f118e465": "LogCreateVIBEX(address,uint256)", +"f118f7d6": "setDestinationMultisigWallet(address)", +"f119a48d": "toUnixtime(uint32,uint8,uint8,uint8,uint8,uint8)", +"f119ada4": "addTeam(string)", +"f119fcaa": "isMintableNFT()", +"f11a8911": "accountTxs(uint256)", +"f11a97ef": "MinerToken()", +"f11af32a": "EuroToken()", +"f11b9b46": "FRPTOKEN()", +"f11b9fc8": "emitTokens(address,uint256)", +"f11bdfa4": "_isValidHeight(uint8)", +"f11be7c1": "getTrustedContracts()", +"f11c2cec": "changeOwner(address,address,address)", +"f11c4482": "approveFromProxy(address,address,uint256)", +"f11c46f4": "How_to_interact_with_Smartcontract()", +"f11c8de8": "ZENT()", +"f11cfc56": "Vicky()", +"f11d5039": "place_holder()", +"f11d5b33": "reward(address,bytes32,uint256)", +"f11dd6ac": "viewGiveKarmaFee()", +"f11eb099": "preIcoAllocation()", +"f11ef5cf": "reserve(uint8)", +"f11f7d2d": "maximumBidAllowed()", +"f12001ae": "Testereumx()", +"f1204db6": "maximumJackpot()", +"f1208af8": "drawWeeklyWinner()", +"f120974e": "CHENDE()", +"f1215d25": "deposit(uint256,string)", +"f122ed60": "send_message(address,string)", +"f1233b79": "updateTimeBetweenGames(uint256)", +"f12479ac": "getPhase(uint8)", +"f124a300": "setPayable(bool)", +"f124eab5": "ETD()", +"f125561d": "notifyReceiver(address,address,uint256,bytes)", +"f12585f5": "getStageVolumeBoundaries(uint256)", +"f12611f1": "XID(address)", +"f1261fce": "permitTransfers()", +"f126e30f": "countUser(address)", +"f1272f35": "ICOBlaster()", +"f127328a": "totalTokenCollected()", +"f12782b2": "EPXAirDrop()", +"f127e53c": "LunchMoney()", +"f1280c23": "getCCH_edit_32()", +"f1287aef": "Ethmoji()", +"f129c5d7": "getGeneScienceAddress()", +"f12a1580": "withdrawDevReward()", +"f12a15b1": "heapify(int128[])", +"f12acca2": "upgradePonyHashing(uint256,uint256)", +"f12b3d3c": "SentFeeToPlatform(uint256)", +"f12b60f2": "TEAM_POOL_INIT()", +"f12c095b": "developer_string_A(string)", +"f12c87eb": "planetIndexToOwner(uint256)", +"f12d15c3": "transwerFunds(uint256)", +"f12d394f": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes)", +"f12ddd2b": "sendTokensToOwner(uint256)", +"f12e5eaa": "withdrawPartial(bytes32,address,uint256)", +"f12f5409": "accrueInvestorsTokens(address,address,uint256)", +"f12f6925": "NokuFlatPlan(uint256,uint256,address,address)", +"f13016d5": "internalPresale(address,uint256)", +"f1309dc0": "transferTokens(address,uint256,uint256,uint256)", +"f130da53": "GreenXToken()", +"f13101e9": "_delegate(address)", +"f1311a2e": "pgoMonthlyInternalVault()", +"f1317352": "setVCX(address,address,uint256)", +"f1317c09": "halt_purchases()", +"f1319892": "CoinifinexToken()", +"f131a7ae": "clearGame()", +"f1320af2": "exempt(address)", +"f13375bd": "addApprovedWalletAddress(address)", +"f13397b4": "EmeraldToken(string,string,uint256)", +"f133a7c6": "_update(uint256,uint256)", +"f133c38c": "testIntParserOneDecimal()", +"f1348138": "DoAirDrop(address,uint256)", +"f13497d6": "notifyCollateralNotTransfered(uint256)", +"f1349955": "externalTxs(uint256,bytes32)", +"f1352e78": "rewardPlayers(address[],uint256[])", +"f136a874": "approvedAddresses(address)", +"f137005f": "EOCHToken()", +"f13707b3": "adminGetPlayer(uint256)", +"f1378efa": "QuanYToken()", +"f137c236": "DSNCOIN()", +"f137d1a3": "getVestedAmount(uint256,uint256)", +"f13837f6": "ALPToken()", +"f1388f14": "mtrx()", +"f1388f46": "set_value()", +"f138fca5": "resetKoth()", +"f1395f3f": "tokensForDevteam()", +"f1398db1": "MbbToken()", +"f13a38a6": "getConstant()", +"f13ab647": "doMakerPayment(address)", +"f13ad3bf": "RemoveAllHeaders()", +"f13b68e8": "getPurchaseableMode(uint256)", +"f13b8d66": "removePerformer(address)", +"f13ba6a9": "_calcPhase()", +"f13c310c": "_createPlayer(string,uint256)", +"f13c7f57": "returnAllBalance()", +"f13c8fef": "weiTokensRaised()", +"f13c9b2b": "gcFundAmount()", +"f13ca4b8": "setEtherAmount()", +"f13cc606": "buyNOS(uint256)", +"f13d111f": "reverse(uint8[])", +"f13d22c1": "getModuleByName(string)", +"f13dc2e2": "watermark()", +"f13fc23b": "FINX()", +"f14053ad": "minVal()", +"f140b8ea": "getSentTransfer(uint256)", +"f141d076": "DURATION_DECREASE_PER_ETHER()", +"f14210a6": "withdrawETH(uint256)", +"f1437bd0": "setFrom(address)", +"f143e6db": "clearRequest(uint256)", +"f143ffe9": "ProfToken()", +"f14467fb": "ViewMyPrivateKeys(string)", +"f1448e10": "requestExecution(bytes)", +"f1455328": "CappedCrowdsale(uint256,uint256)", +"f145761c": "StartedGame(uint256,uint256)", +"f145cae9": "updateStoreFee(uint256)", +"f145ff23": "getDistributedTokens()", +"f1469382": "updateRates(uint256,uint256)", +"f147decc": "buscarAssinatura(string)", +"f147df3b": "get_king_address(address)", +"f1496070": "getAuctionArray(uint64,uint64)", +"f14ae17d": "isPresalePurchase(address)", +"f14b1c01": "upgradeFactory(uint256)", +"f14bd85d": "resignFromGroup()", +"f14be97f": "setTgeAddr(address)", +"f14ca7d7": "getVestingReleaseInterval(address,uint256)", +"f14ca885": "preICOcontributors()", +"f14d147f": "tokenSaleWeiMax()", +"f14dc176": "setDestructionCurator(address)", +"f14e96f1": "getBestBid(uint256)", +"f14eb30d": "SaleClockAuction()", +"f14f58f1": "removeAsset(uint256)", +"f14faf6f": "donate(uint256)", +"f14fcbc8": "commit(bytes32)", +"f14ff5cf": "getSeatMessageUrl(uint256)", +"f1508105": "Ohni(uint256,string,uint8,string)", +"f1518627": "anotherOwner()", +"f151e4ae": "devuelveToken()", +"f1522d53": "redeemablevilsinfo(address)", +"f1533936": "BNTPrice()", +"f153d3ad": "BurnupHoldingAccessControl()", +"f15467c4": "WelCoinICO(uint256,uint256,address,address)", +"f15627a1": "mintArray(address[],uint256[])", +"f156deb2": "miningTokensOf(address)", +"f1572e7d": "getQuoteKey()", +"f15732b8": "REAL()", +"f157c54b": "operatorRedeemByTranche(bytes32,address,uint256,bytes)", +"f157ea0b": "forkAddress()", +"f158458c": "getMinimumEndowment(uint256,uint256)", +"f15886db": "addressToReceiverToAllowedSprite(address,address,uint256)", +"f1588d66": "getPurchaseAmount(address,uint256)", +"f158e478": "destroyCampaign(bytes32)", +"f159eb84": "KVCToken()", +"f159f38f": "getTracks2()", +"f15a1b59": "tokenForTeam()", +"f15a691d": "validPurchase()", +"f15a9ae8": "maxPVPContenders()", +"f15ae568": "addEntry(address)", +"f15afa50": "fpMulI(int256,int256)", +"f15b2bda": "approveMintLocked(address,uint256)", +"f15beecf": "payNode(bytes32,uint32)", +"f15bf739": "getShareholderArrayLength()", +"f15caaa9": "insertDate(uint256)", +"f15cfe33": "KRWT_Token()", +"f15d775d": "changeMedianier(address)", +"f15e3af1": "getMatchAtRoundIdAtIndex(uint256,uint256)", +"f15e5548": "PasesSocio(uint16)", +"f15f14c5": "Dividends()", +"f15f2bf0": "blockEndICO()", +"f15f56a7": "calcBingo()", +"f1608682": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[],bool[])", +"f160d369": "updateFeeRecipient(address)", +"f1610120": "next_giveaway()", +"f1625534": "deactivateRound(uint256)", +"f16270c3": "VITTokenSale(address,uint256,uint256,uint256,uint256,address[20])", +"f162c5a1": "totalScaleStaked()", +"f1637630": "withdrawBatch(bytes32[],address)", +"f1644b6c": "getFaucets()", +"f16638ec": "UselessReserveBank()", +"f1665a48": "NewVestedToken(address,address,uint256,uint256)", +"f166dc27": "Bid(address,string,uint256)", +"f1671b56": "getWeightRange()", +"f16787bc": "readFromCards(uint256,uint256)", +"f1679095": "getTransferAddressUser(address)", +"f167d695": "sacarDoacoes()", +"f1684237": "Ownable(address)", +"f1686296": "Hodor(string)", +"f1687a8d": "tokenSellCost()", +"f1694b3d": "updateResearch(address,uint256)", +"f16b6482": "gameCountdown(address)", +"f16b9422": "_recordFailedOldOwnerTransfer(address,uint256)", +"f16bdb9c": "validate(bytes20,uint96,uint32,bytes32[],uint16)", +"f16bdba9": "isCustomerinBLFromWL(address,address)", +"f16c5e8d": "issuerGuiveToken(address,uint256)", +"f16d9aca": "khabibToken()", +"f16dfbe9": "verifyAccount(address)", +"f16e74ac": "minDividendEtherAmount()", +"f16f9b53": "signedApproveAndCall(address,address,uint256,bytes,uint256,uint256,bytes,address)", +"f16fa66a": "updateLotteryData(address)", +"f16fa954": "debug_resizeRealPrefix(uint256,uint256)", +"f1700f94": "getInfoF1(address)", +"f1703d24": "addEntity(address)", +"f170c83c": "famedStarAddress()", +"f1714e97": "preserveTokens(address,uint256)", +"f1714fcc": "AddCommitteeToMapAndArrayEvent(address)", +"f171a730": "transferEvent_(address,uint256,bool)", +"f171ba5d": "verdictExecuted(address,bool)", +"f172f58f": "getPositionOwner(bytes32)", +"f172f84f": "jockeyLevel(address)", +"f17313e6": "unFrozenAddress(address)", +"f1736d86": "m_dailyLimit()", +"f17382ae": "SUPPLY_FOR_RESERVE()", +"f1739cae": "transferProxyOwnership(address)", +"f17401de": "init_multiowned(address[],uint256)", +"f17454b0": "UserAdded(bytes20)", +"f174683a": "VTrust()", +"f174b333": "buscarDocumentoPorId(uint256)", +"f1751688": "showReportForDevice(uint16)", +"f17520e5": "changeWhitelistAdmin(address)", +"f1753550": "supportsInterface(bytes32)", +"f175e6a9": "getTwitter()", +"f1762e5d": "bnbRefundEnabled()", +"f1765b22": "acceptSale(address[])", +"f1771cf0": "BURNABLE_UP_TO()", +"f177e837": "to62Encoding(uint256)", +"f177fc4f": "PornSceneToken()", +"f1781c72": "removeLockedTime(address,uint256)", +"f1797233": "positionAtIteration(uint256)", +"f179a86e": "setEtherToTokenAllowed(bool)", +"f179c6ef": "confirmBatch(address[])", +"f179f9f1": "parsecCreditContract()", +"f17a1ff5": "BAG_TRANSFER_FEE()", +"f17a3c4b": "FTST()", +"f17b1d63": "BacCara()", +"f17b5bb0": "assertMatchingBalance(uint256,uint256)", +"f17b6d9b": "relayCMCT(address,uint256,bytes32)", +"f17ba16b": "approveByAddress(address,address,uint256)", +"f17cc54b": "TestLib()", +"f17ccd73": "DNMC()", +"f17d186c": "withdrawAllFundsFromContract()", +"f17e48ec": "adminTransfer(address,uint256)", +"f17f29d0": "getGoldDataSerial()", +"f17f3ca3": "AUCTION_WHEN_PERCENTAGE_LOGIC_STARTS()", +"f17f6f8a": "escapeCaller()", +"f1806a21": "getUnapprovedUsers()", +"f180743a": "tokensForFounder()", +"f1807e35": "removePermission(uint8)", +"f18166c2": "TRADE_REWARD()", +"f181b388": "setTotalWithdraw(uint256,address,uint256,bytes,bytes)", +"f181f396": "unspentAmounts(uint256)", +"f182dd3b": "releaseTokens4Sender(uint256)", +"f183452c": "releaseTokenByOwner(address)", +"f1835db7": "verify(bytes32,uint8,bytes32,bytes32)", +"f1838a15": "burnFeatureDeactivation()", +"f1838fe4": "getExpectedRates(address,address[],address[],uint256[])", +"f1850af8": "getTokenSymbol()", +"f1860118": "tradeExecuted(address,uint256)", +"f1861749": "nextDiscountTTMTokenId6()", +"f18697cf": "IdolCoin()", +"f186a625": "transferContentOwnership(bytes32,address,address,string)", +"f186bb79": "getPixelPrice(uint16,uint16)", +"f186c67f": "permit(address,bool)", +"f186d77e": "setStarContract(address)", +"f1870e0c": "contractFinalized()", +"f187650d": "DeskBellPresale()", +"f18771de": "NujaRegistry()", +"f1880128": "getSTMPDecimals()", +"f1880b24": "checkToken(address)", +"f18899be": "getOpenApplications()", +"f189348a": "teleportCharacter(uint32)", +"f1895e08": "__issueTokens(address,uint256)", +"f1898fda": "TOKEN_CONTROLLER_INTERFACE()", +"f18ab544": "pendingList(address)", +"f18ad6fb": "getRecord()", +"f18b7bde": "SplitDividendsAmongstOwners(uint256)", +"f18ba98c": "handleSaleCompletionCallback(uint256)", +"f18cbe08": "_byteToString(bytes32)", +"f18d03cc": "transfer(address,address,address,uint256)", +"f18d20be": "adminWithdraw()", +"f18d4dbb": "addTokenSupply(uint256)", +"f18d5a93": "TokensSent(address,uint256)", +"f18dd512": "PERSONAL_FIRST_HOUR_CAP()", +"f18df6bb": "increaseAllowanceToken(address,uint256)", +"f18e120b": "setMaxTokensPerAccount(uint256)", +"f18ecf80": "OfferToken(uint256,string,string)", +"f190a793": "companyTokenWallet()", +"f190ac5f": "mintToAddresses(address[],uint256)", +"f190b4d3": "newUserRewardPool()", +"f1914dc5": "StaticEthAvailable(uint128,uint128)", +"f191c26d": "CPT()", +"f192866a": "sellTicket(uint256)", +"f192e91c": "forfeit(bytes32)", +"f1931b9e": "LAFIN()", +"f193a3f7": "changeBank(address,address)", +"f19414d5": "admin_inactive_dividend(address)", +"f194c23f": "_getCurrentAltarRecordId()", +"f1952473": "AcoraidaMonicaWantsToKnowTheNewQuestion(string)", +"f195995c": "isValidGeneration(uint8)", +"f195f0f9": "slice2(bytes,uint256,uint256)", +"f19674f6": "PatronThreeWithdrawal()", +"f19798ab": "numRolls()", +"f1979de8": "setPixelAreaColor(uint256,uint256,uint256,uint256,uint32[])", +"f197bbdd": "deadlineOne()", +"f1991a27": "saleStartTokenCreationRate()", +"f199265f": "internalExecuteCall(address,uint256,uint256,bytes)", +"f199f56d": "roundReward()", +"f19a5810": "changeBaseTokenPrice(uint256)", +"f19ab230": "Bcoin()", +"f19ac52d": "newDepositCommission(uint256)", +"f19be31b": "btcAddrPubKeyCompr(bytes32,bytes32)", +"f19be5d5": "JackpotCore(uint256,uint256,uint256,uint256)", +"f19c020d": "returnTokensAll(address)", +"f19c78b5": "contributorsKeys()", +"f19cfeff": "RepossessionBounty(address,uint256)", +"f19d2bcd": "EOS_address()", +"f19d736e": "Prosper()", +"f19dd75b": "lspToken()", +"f19e3c9f": "LogSnapshotCreated(uint256)", +"f19e75d4": "ownerMint(uint256)", +"f19e774e": "isValidBet(uint256)", +"f19eb731": "TKT_TokenERC20(uint256,string,string)", +"f19ee2a9": "_getAsset()", +"f19efc43": "getRoundInProgress()", +"f19f3246": "rejectOwnership()", +"f19fb157": "withdrawnow()", +"f19fc6ab": "gonIIToken()", +"f19fe69b": "withdrawTokenTo(address,address)", +"f19fefbc": "Hodling(address,address,uint256)", +"f1a00a53": "unregisterListening(address)", +"f1a0a85c": "div(uint64,uint64)", +"f1a138f4": "Airdropsamount()", +"f1a252b8": "getMoneyBack()", +"f1a39bde": "indexByTokenId(uint256)", +"f1a3de09": "register_minting(address)", +"f1a5158b": "Contest()", +"f1a570b8": "DividendRecycled(uint256,address,uint256,uint256,uint256)", +"f1a5fc99": "bytesToInt(bytes)", +"f1a63733": "createBountyToken(address,uint256)", +"f1a6ed46": "ORIGIN_ETH_BRT_RATIO()", +"f1a9af89": "startPrice()", +"f1a9d749": "LRCCcoin(uint256,string,string)", +"f1aaea1c": "updateLabAddress(address)", +"f1ab36b4": "getSaleInformation()", +"f1ace1a1": "ART_DECIMALS()", +"f1ad3334": "storeETH()", +"f1ade50c": "VelesCoin()", +"f1ae5437": "changeTakeFee(uint256)", +"f1ae72a5": "minAcceptedEthAmount()", +"f1ae8c55": "startRaffle(uint256)", +"f1afc4f6": "ShareHolderController(address,address[],uint256[],address,uint256,uint256,uint256,uint256,uint256,uint256)", +"f1b0202e": "TalkToExpertPayment(address)", +"f1b07f96": "deblacklistAddress(address,address)", +"f1b12493": "IcoContract(address,address,uint256,uint256,uint256,uint256,uint256)", +"f1b234ad": "setWallet(address,address)", +"f1b2b03c": "start_ts()", +"f1b2d6a3": "getListings()", +"f1b3ea6f": "asyncDebit(address,uint256)", +"f1b3f968": "getRaceEndBlock()", +"f1b3fd80": "momentTimeOf(uint256,uint256)", +"f1b46bc8": "generateRandomCard(uint32)", +"f1b4d548": "isValidTeam(uint256[])", +"f1b50c1d": "enableTransfer()", +"f1b541c2": "startPublicSaleStage()", +"f1b5bc17": "mintAmount4()", +"f1b5c777": "contributeWasCalled()", +"f1b5d7de": "pre_prices(uint256)", +"f1b6315e": "StartRoulette(uint8)", +"f1b676a4": "ico3Ended()", +"f1b6cee5": "winPot(uint256[])", +"f1b74348": "addExisitingContributors(address[],address,uint256[])", +"f1b75173": "getLegacy(uint256)", +"f1b8a5bf": "commitPhaseMinVotes()", +"f1b9ee24": "setInactive()", +"f1bab09c": "setExtraBonus(uint256)", +"f1bab410": "manualSale(address,uint256)", +"f1bba50a": "GoldBlocksTickets()", +"f1bba6f9": "account(string)", +"f1bbc663": "tokenSaleClosedTime()", +"f1bca30f": "removeManyAdmins(address[])", +"f1bca7a4": "doCall(uint256)", +"f1bcb6e5": "createContractor(address,address,bool,address,string,string)", +"f1bd4c04": "getJackPot()", +"f1bd5978": "__address3__()", +"f1be1679": "getMarket()", +"f1be42f1": "numCharacters()", +"f1bf18db": "availableZNT()", +"f1bfb9cd": "listSingleCard()", +"f1c05831": "authoriseSale(uint256,uint256,address,uint256)", +"f1c10c24": "infoTokens(address)", +"f1c16deb": "validPurchase(address,uint256,uint256,uint256,uint256,uint256)", +"f1c21077": "PROBABILITY_DIVISOR()", +"f1c22a05": "setNewPixelPrice(uint256)", +"f1c30ec0": "reclaim(bytes)", +"f1c36ce0": "burnFromAddress(address)", +"f1c3dd3e": "fuckTest()", +"f1c41b68": "setConsensusRules(uint256[6])", +"f1c461c7": "mesasCreatedVerify()", +"f1c4d6b0": "DOG_Crowdsale()", +"f1c4ecb4": "maxCapWei()", +"f1c53a3a": "UpdateUserExtraData1(address,bytes32)", +"f1c55931": "reserveFunds(address)", +"f1c5d07b": "totalLoveBlocks()", +"f1c61958": "DIGITALCASH()", +"f1c6aeb7": "SetApplicant(string,uint32,uint256,int256,string)", +"f1c6c520": "runningauctions(uint256)", +"f1c760ae": "fixBalanceInternal(address)", +"f1c7689e": "CandyRate()", +"f1c94b45": "lastBlock_a7Hash_uint256()", +"f1c9cc11": "lockMin()", +"f1ca9410": "gen0CreatedCount()", +"f1cca8aa": "setTakerFee(uint256)", +"f1ce37d9": "eachUserWeight()", +"f1ce9595": "TIME_PERIOD_IN_SEC()", +"f1cea858": "TCLRToken(address,address,address,address,address,address)", +"f1cf5b38": "setWethContractAddress(address)", +"f1cf8d27": "addFuel(uint256,uint256,uint256,uint256,uint256)", +"f1cfb100": "remainingEscrow(bytes32)", +"f1cff4b5": "testBitsNotSetSuccess()", +"f1d02a8c": "MiningToken(string,string)", +"f1d0469e": "get_sec_by_year(uint256)", +"f1d08bfa": "setOpenForSale(bool)", +"f1d15f1f": "setLandPrice(uint256,uint256)", +"f1d1768c": "updatePresaleListMapping(address[],address,bool)", +"f1d18a42": "safediv(uint256,uint256)", +"f1d20d4d": "provider(bool,address,address,address)", +"f1d2165f": "SaleActive()", +"f1d22be0": "freezeAll(address)", +"f1d2b3c2": "Owner1()", +"f1d2b8ab": "seePurchase(uint256)", +"f1d308d5": "SingularityTest17()", +"f1d35260": "setGovernor(uint8,address)", +"f1d3a853": "PalliumCrowdsale(uint256,address)", +"f1d588c5": "setRoleManager(address)", +"f1d59443": "getUSETTotalSupply()", +"f1d61850": "confirmationPeriodOver()", +"f1d61f23": "timeLockAdvisor(address)", +"f1d71b73": "betBlueCoin()", +"f1d73540": "Quiz(string,string)", +"f1d841f1": "minAcceptedAmount()", +"f1d89857": "RequestFactory(address,address)", +"f1d91942": "setInfoUrlPrefix(string)", +"f1da588a": "PrivateCoin()", +"f1da7e63": "getMortgageRate(address)", +"f1daa1f0": "writeDefinitions(uint256,string)", +"f1daa5ba": "calculateAmountForETH(uint256)", +"f1db23dc": "totalProceeds()", +"f1dbd547": "FINAL_AML_DAYS()", +"f1dbd647": "receiveDividends(uint256,uint256)", +"f1dc24ae": "getMeshPointByCreator()", +"f1dd08b4": "transferCommissionReceiver(address)", +"f1dd6147": "buyTokensIco(address)", +"f1de75e3": "getPrefixOwner(string)", +"f1dfcddb": "testTransferGasIssue()", +"f1dffed7": "setIntValue(int256)", +"f1e02620": "setFirstTime(uint256)", +"f1e03d67": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32,uint8,bytes32,bytes32)", +"f1e253dd": "brickIds()", +"f1e298c3": "addFee(address,uint256,address,uint256)", +"f1e2ac12": "evalParam(bytes32,uint32,address,address,bytes32,uint256[])", +"f1e2e921": "_Owned()", +"f1e328f9": "left68(uint256)", +"f1e4a540": "unsetCoordinator()", +"f1e50ce9": "saveMe()", +"f1e69009": "registerDsp(address,uint8,bytes32[5])", +"f1e6bb1c": "getVoteOptions(uint256)", +"f1e6f4cd": "right40(uint256)", +"f1e7ae1f": "modifyMemberLimits(address,uint256,uint256)", +"f1e8ace7": "decodeBillingMetadata(uint256)", +"f1e8aec4": "isStardted()", +"f1e954d8": "increaseTokenSaleAllocation()", +"f1e9951f": "getActionCount(bool,bool,bool)", +"f1e9a514": "VREO_SALE_PHASE_2_END_TIME()", +"f1ea43e7": "TCSCCoin()", +"f1ea6cbd": "creationMinCap()", +"f1ead3d6": "getAuctionsFor(address)", +"f1eae25c": "mortal()", +"f1eae64a": "openSell()", +"f1eb0ed9": "newInitialPlayerOffering(string,string,uint256,uint256,address,uint256,uint8)", +"f1ebe451": "ChooseB()", +"f1ecff08": "BastoneToken()", +"f1ed9923": "isEcoAllocated6()", +"f1eeec2e": "insureClient(address,uint64)", +"f1ef9881": "hashSecret()", +"f1ef9a08": "preicoAddresses(address)", +"f1efb76a": "getPayTo()", +"f1f05a3f": "getAttr(bytes32,uint256)", +"f1f0b290": "lockToken(bool)", +"f1f1e30f": "ethForKey(uint256)", +"f1f201e8": "getArtworkInfo(uint256)", +"f1f33565": "ENG()", +"f1f339ef": "doCheck()", +"f1f3ae31": "novaContractAddress()", +"f1f49033": "deductDeposit(address,uint256)", +"f1f4e25d": "OctaBlock()", +"f1f62f10": "isWalletLocked_Send(address)", +"f1f6d945": "webAddress()", +"f1f732cb": "BONUS_TOKENS_RESERVED()", +"f1f76438": "checkNumber(address)", +"f1f87fc9": "BitMix()", +"f1f9539f": "KittyRace(address)", +"f1fa1744": "sellpause()", +"f1fa906c": "getProjectName(uint256)", +"f1fb3ace": "minEth()", +"f1fb5219": "_calculateContribution(uint32,uint8,uint64)", +"f1fbf2a3": "calculateObtainedSBT(uint256)", +"f1fc4db4": "updateCutoff(uint24)", +"f1fd9614": "getNumData(uint256)", +"f1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", +"f1fea32a": "setPOOL_edit_7(string)", +"f1fec2b8": "nodePrice()", +"f1ff3d4b": "totalNumberMinted()", +"f1ff4a67": "releaseWithheldTokens(address,bool)", +"f1ff732b": "setBanker(address)", +"f1ffde45": "BasicBallot(address,string,string)", +"f20001b0": "Menu08()", +"f20151e1": "setExecutionMaxPerTx(uint256)", +"f2016a4f": "updateMinEthPerNotification(uint256)", +"f201da0d": "newChannel(address,address,uint256,uint256,uint256,address)", +"f2020275": "users()", +"f2021550": "QBankChain()", +"f2022905": "toldYouItWouldWork()", +"f20341a8": "getRemainingTarget()", +"f203af26": "registerImport(bytes8,bytes8,uint256)", +"f203c19d": "usersAddress()", +"f203c857": "getSpeaker(address)", +"f20431c8": "MyTotalNTD()", +"f2057179": "changeInstitutionOwner(string,address,address)", +"f20652a1": "nxcSold()", +"f2068bfc": "addUniqueSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", +"f206cf74": "MINIMUM_ETH_SOFT_CAP()", +"f206e7c9": "fechAllVoteResultBySnapshotBlock(uint256)", +"f20717e9": "getNbTrade()", +"f207564e": "register(uint256)", +"f2080ba6": "Pong(int8)", +"f2083220": "activeTranscoderTotalStake(address,uint256)", +"f2091083": "dollaryDanToken()", +"f2097550": "bucketExists(bytes32)", +"f2097b9b": "doesAddressOwnSpinner(address,uint256)", +"f209fc1f": "purchaserWhiteList(address)", +"f20b2cf5": "getMJModel(uint256)", +"f20b4368": "AllocateMainSale(address,uint256)", +"f20b93ea": "getInvoiceAmountPaid(bytes32)", +"f20d5385": "endCrowdsalePhase2Date()", +"f20d5943": "s0(bytes1)", +"f20d5e57": "distributeToReferreal(uint256,address)", +"f20dde7b": "updateCostETH()", +"f20de9d6": "openGameLoop()", +"f20e5e35": "getAuctionDetails(uint256)", +"f20e5f51": "PeriodChanged(uint8)", +"f20eaeb8": "output()", +"f20f24ec": "pauseTokenSale()", +"f2102390": "SOFTCAP_RATE()", +"f2107f83": "getStakingInfoPayload(bytes)", +"f2108aa8": "FraCoin()", +"f2114752": "viewSecondLotOfContractState()", +"f21153d2": "withdrawSettle(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"f211c9ed": "releaseMultiByStage(address[])", +"f2125f40": "SEELE()", +"f212c216": "setSystemAuctionDuration(uint256)", +"f213159c": "depositTo(address,address,uint256)", +"f2139abf": "getBigPromoBlockInterval()", +"f213aad2": "dayWithdrawCount()", +"f2141ab9": "lossToCharity(uint256)", +"f21439b5": "envokeTokenAllocation()", +"f2147f7b": "currentPeriodPrice()", +"f21502e5": "ZTHTKNADDR()", +"f2153fae": "BNKCToken()", +"f215bc3e": "genEstKeyBlockNr(uint256)", +"f21632e1": "icoEtherReceived()", +"f2166ab1": "xpanda(uint256,string,string)", +"f216b203": "TokenSyndicate(address,uint256,uint256,uint256,uint256)", +"f216bfd6": "updateUportInfo(string)", +"f216f45d": "nextStageBonus()", +"f21711f3": "currentRating()", +"f217d6a3": "standardDailyLimit()", +"f217f15c": "doCreate(uint256,bytes)", +"f2180c61": "versionCode()", +"f2181e23": "initializeGasPriceLimitFundraiser(uint256)", +"f219fa66": "depositERC20(address,address,uint256,uint256)", +"f21a1468": "getOutcomeTokens()", +"f21aaee6": "MinerChain()", +"f21aefd2": "isDebug()", +"f21af007": "unWhitelist(address)", +"f21b1150": "test_div(uint256,uint256)", +"f21b422a": "unregisterCustodian(address,address)", +"f21b64ad": "DepositETH(uint256)", +"f21b9379": "setRoundAvailableToken(uint256,uint256)", +"f21baec7": "withdrawPreIcoFounds()", +"f21c27a7": "CTAMToken()", +"f21cdf6f": "defrost()", +"f21d5dea": "withrawAll()", +"f21ddc7a": "teamBalanceOf(address)", +"f21f537d": "startedAt()", +"f21f80d0": "setGenome(uint256,uint256)", +"f21f8236": "getRefTo(address,address)", +"f2204d35": "getWalletsFromUser()", +"f220cbe0": "GetIsPaused()", +"f2218819": "getAddressAndSharePriceOfFunds()", +"f221abef": "isReachedThreshold()", +"f221b25b": "addSponsorshipsTotalRefunded(address,uint256,uint256)", +"f221b75a": "addCET4(uint32,string,uint32,uint32,uint32,uint32)", +"f221fda0": "totalRooms(string)", +"f2225500": "FHCoin()", +"f222d0b9": "getNumberOfBets()", +"f223446c": "start_game(bytes32,uint8,uint32,uint16,address,uint256,uint8)", +"f2234f6e": "confirmAdmin()", +"f223885a": "deposit(uint256[],uint256[])", +"f2245b64": "DioToken()", +"f225138b": "littCapsuleGet(bytes32)", +"f22513a7": "withdrawLatium(uint256)", +"f225415a": "getFrozenBalanceByAddress(address,address)", +"f225ba3f": "unLockBounty(address)", +"f2260031": "lockAddress(address,bool)", +"f2263e12": "refundedFunding()", +"f2269c8e": "_createFootballerStar(uint256,uint256,uint256,uint256)", +"f2269dba": "airdropCooldownEnd()", +"f2274abb": "getReservedIsVested(address)", +"f227b198": "CreateWEE(address,uint256)", +"f229abbd": "enableBurn(bool)", +"f22a0b31": "getDays(uint256)", +"f22a598f": "changePriceUpdateTimeline(uint256)", +"f22aa38b": "getSDCCSupply()", +"f22aae52": "_memcpy(uint256,uint256,uint256)", +"f22b0c94": "setBonusOff()", +"f22b258a": "trustedMarketTransfer(address,address,uint256)", +"f22b683e": "delKycVerifiedInvestor(address)", +"f22c0f7d": "isValidTxPaymentForMCW(bytes32)", +"f22c10d7": "setShareHolders(uint256,address,uint256,bool)", +"f22c618e": "isItemStopped()", +"f22c6a7c": "STE(string,string)", +"f22c71e5": "finalizeLottery(uint16,bytes32,uint256)", +"f22c8f63": "FINANCE_CAP()", +"f22d022b": "burnIcoCoins()", +"f22dbfe6": "forLoyalty()", +"f22f264d": "setMinBalance()", +"f22ffd1d": "TLN_TOKEN_DECIMALS()", +"f23008ca": "CarBonCash()", +"f2309723": "setUserApproval(address,address,string)", +"f23103ee": "subTx(address,uint256,bytes)", +"f2316472": "transferMyTokens()", +"f2325244": "VULCAN_PROMETHEUS_MAX_CARGO()", +"f232880d": "reserveWaveTokens()", +"f232a84d": "getAmountAttempted(address)", +"f232e351": "initializeBalances()", +"f23342d8": "checkHashExists(bytes32)", +"f2335e9d": "setAvgGas(uint8,uint16)", +"f2342bba": "getBagDetails(uint256)", +"f2342cd5": "Contributor(string,address,address)", +"f234bac5": "tokenCreationCapUpdate(uint256)", +"f235bdfd": "getRetailerTotalBalances(address)", +"f235bfa4": "addAccount(address,string,uint256)", +"f236e2fb": "UTCT()", +"f2371fb3": "grantGiveableKudos(address,uint256)", +"f2371fd1": "newEmployer(bytes32)", +"f238683f": "lastKing()", +"f238dbea": "minimum_payment()", +"f2393d55": "getKebabsSincelastKebab(address)", +"f239c5dd": "crowdsaleMinted()", +"f239e528": "sendOneEtherHome()", +"f23a6e61": "onERC1155Received(address,address,uint256,uint256,bytes)", +"f23a8155": "internalInvest(address,uint256,uint256)", +"f23a8aa6": "getOwnerLink(address)", +"f23b55c3": "BB8Token()", +"f23b6fa2": "emitApprovalEvent(address,address,uint256)", +"f23b872e": "tvc()", +"f23ba8e6": "hire(address,uint256)", +"f23bc4f8": "acceptOffer(uint64)", +"f23bd5f8": "getYes(uint256)", +"f23c51cd": "setReceiverContractAddress(address)", +"f23ca012": "becomeNorsefire()", +"f23e22a7": "rescheduleTransaction(uint256,uint256)", +"f23f07f6": "getMinAuditPriceMedian()", +"f23f16e6": "appealCost(uint256,bytes)", +"f23f2cbe": "withdrawWithFee(address,uint256,uint256,bool)", +"f2405395": "STAGE_THREE_ETHRaised()", +"f2408d6b": "PIN(uint256,string,string,uint256,uint256,uint256)", +"f2409d65": "getMileagePoint(address,address)", +"f240d0f5": "feesWithdrawn()", +"f240f7c3": "dispute()", +"f24113c6": "updateProfile(bytes32,bytes32)", +"f241335d": "calculatePrice(string,uint88)", +"f2414cbd": "YASToken()", +"f24150ae": "VoxelDestroyed(uint8,uint8,uint8)", +"f2415183": "Tithe()", +"f2416f64": "oracleItCallbackAddress()", +"f242432a": "safeTransferFrom(address,address,uint256,uint256,bytes)", +"f2429b1c": "buyCryptopinions(address)", +"f2430fe5": "Plumix()", +"f243c170": "buyTokens2(address)", +"f243c2a7": "tokenIssuer()", +"f244815e": "setBuyUnfreezePeriodSeconds(uint256)", +"f245036e": "setPools(address)", +"f2451a43": "addOwnerNotations(string)", +"f2455807": "setDesignatedReporter(address)", +"f24570e0": "approvedFactories()", +"f245b9e4": "DVIP(address)", +"f245d8c6": "NewHero(address)", +"f2460172": "_removeAssetFrom(address,uint256)", +"f246080a": "addvehicles(address,string,string,string,string,string,string)", +"f246317c": "SafeTimeLock()", +"f247016c": "isVoteOngoing()", +"f2477f7c": "BLOCKREWARD()", +"f24818cb": "unholdTime()", +"f2491377": "MAX_SINGLE_ISSUED_FROM_OTHER_CURRENCIES()", +"f249cf19": "get_all_challenges()", +"f24a0faa": "balance3()", +"f24a534e": "Oracle()", +"f24a6997": "maxGasRefund()", +"f24ae640": "countAccounts()", +"f24b5779": "removeTrustedIssuer(address,string)", +"f24b6782": "updateCrowdsaleTimeline(uint256,uint256)", +"f24d2532": "changeRegistrationStatus(address,bool)", +"f24e4a15": "Purge()", +"f24e7fd9": "activateKillSwitch()", +"f24edfd6": "setWhitelistedAddressPre(address[],bool)", +"f24f9abe": "grantBonusTokens(address,uint256)", +"f24ff92c": "withdrawal(uint256,address,uint256)", +"f2505211": "oracleItQuery(uint256,string,string,string)", +"f2513ee9": "cancelMarketsWhenPaused(uint256)", +"f2518983": "reinvestEther()", +"f251bc8c": "addPack(address[],uint16)", +"f251fc8c": "totalContributors()", +"f25214e4": "CRYPTODOL()", +"f2523e7a": "setUseRegistry(bool)", +"f2529e55": "Fidget(address,address,uint256,uint256,uint256,uint256)", +"f2530d1d": "claimableDividend()", +"f2534e47": "changeCertifier(address)", +"f253e6ae": "Daric()", +"f2540e39": "_unfollow(address,address)", +"f2556289": "endDutchAuction(uint256,uint256)", +"f255c21f": "Offer(address,string,uint256,uint256)", +"f2561a43": "voteSuicide(address)", +"f25633dd": "year1Unlock()", +"f256b130": "marketingFund()", +"f256b48e": "getBalanceOfDist(bytes32)", +"f257bf3b": "getAuthorityIndex(address)", +"f2582ef5": "UserStatus(string,address,uint256)", +"f258a4ea": "investorAccounts(uint256)", +"f2590315": "ClockAuction(address,address,uint256)", +"f25a7815": "MockSale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"f25acb35": "acceptDeal(bytes16)", +"f25aed54": "accountWithUpdatePermissions()", +"f25b278b": "fetchHash(uint256)", +"f25b3f99": "blocks(uint256)", +"f25c130a": "createOnRound(uint256)", +"f25c870a": "MyERC223(string,string,uint8,uint256)", +"f25d2422": "fetchVoteInfoForCandidate(address)", +"f25dafd1": "drainAUC(uint256)", +"f25e34a9": "checkJuryVoted(address)", +"f25e7bb4": "getState(bytes20)", +"f25e9ed2": "getMaster(address)", +"f25eb5c1": "removeReverse()", +"f25ebdad": "isProxyManager(address)", +"f25ee28d": "MySecondToken()", +"f25efc49": "frozenRecords(uint256)", +"f25f4b56": "feeWallet()", +"f25fbe6f": "MetaGold()", +"f25fd5cf": "createGoldSellOrder(uint256,uint256)", +"f260ad05": "titanToken()", +"f260bd94": "validateRequestParams(address[3],address,uint256[12],uint256,bytes,uint256)", +"f261a8c0": "withdrawbymanager()", +"f2624067": "LogIncreaseCap(uint256)", +"f2624b5d": "whitelistCount()", +"f262521f": "PHASE_5_PRICE()", +"f262de8c": "add_staircase(uint16)", +"f2634485": "setGameRules(uint256,uint256,uint256,uint256)", +"f26377ed": "kittyGym()", +"f2642d0f": "decayedTransfer(address,uint256,address)", +"f2653966": "createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"f26557d8": "AdeelaTestCoin()", +"f2659bd1": "GetCityLandNums()", +"f265d351": "rateSetter()", +"f2663a03": "TERSERAH()", +"f267035f": "BOARD_1()", +"f267215a": "_getProviderClosed(uint256)", +"f267ded5": "TokenStarted(address)", +"f268225c": "setBountyWalletAddress(address)", +"f26835d4": "tokensRemainingInHolding(address)", +"f26a058d": "U21Y()", +"f26b9834": "ENOM()", +"f26baecc": "_capLevelEth()", +"f26bb53d": "setCityPlan(address,uint256)", +"f26bbde8": "WHOMCrowdsale(address)", +"f26c159f": "freezeAccount(address)", +"f26c6aed": "newChannel(address,uint256)", +"f26cbe9a": "raiseDollarsDeducted(address,uint160,int160)", +"f26df083": "finalIntervalForTokenGen()", +"f26e5e85": "GetUpgradeCost(uint256,uint256)", +"f26e787e": "sendDelayedTransactions()", +"f26f336e": "MINING_RESERVE()", +"f26f4f61": "threshold(bytes32,address)", +"f26f6334": "setCraftingAddress(address)", +"f26fb705": "getPayoutRoundId()", +"f270bcda": "getClosingBlockNumber(uint256)", +"f2711812": "milion()", +"f27197ab": "getIsAvailable()", +"f272404d": "_approve(address,uint256,address)", +"f2729497": "numberOfFarmers()", +"f2729d8a": "getMinutes(address)", +"f272a60c": "addBagDelayed(uint256,uint256)", +"f272fe18": "Campaign(uint256,uint256,uint256,address)", +"f273515c": "Cyberminer(uint256,string,string)", +"f273fbbc": "perform_withdraw()", +"f27402e9": "bchRaised()", +"f274a828": "icoPhase3Start()", +"f274d00c": "LAWCoin(uint256,string,string,address)", +"f2759ee2": "transferDomainBackToSeller(string)", +"f2760d9c": "shareHoldersWallet()", +"f2761444": "MathUtil()", +"f2766051": "lastFinish()", +"f276e1c7": "voteResultPublish(address[],uint256[])", +"f276f36b": "getGameDataByIndex(uint256)", +"f276fdde": "onTaxTransfer(address,uint256)", +"f277010d": "percentFeeTimes100()", +"f27715b4": "updateMultiSig(address)", +"f2787d33": "feeAccountToken()", +"f278bd02": "newBooleanValue()", +"f279648b": "setConstraint(int256,bytes32,bool,bool)", +"f279fac5": "internaltransfer(address,address,uint256)", +"f27a4188": "icoSucceed()", +"f27a73ca": "frozenCell(address,uint256)", +"f27a8a99": "updateEmployeeInfo(uint256,string)", +"f27ac4d9": "decrease(address,uint256)", +"f27ae77d": "DGDIssued()", +"f27b6d8f": "Message(string,address,uint256)", +"f27b8084": "walletWebydo()", +"f27b9341": "getTeamPlayersNum()", +"f27c24ed": "startCloseSale()", +"f27c3bf6": "oneYear()", +"f27c85bc": "getQuickPromoPercent()", +"f27d0afe": "deleteArbitrator(address)", +"f27d3977": "NEOBleu()", +"f27db8c9": "getWinnerPayout()", +"f27e2ef6": "nextMineEvent()", +"f27e4b1e": "SwitchTokenTransactionsOn()", +"f27ee76c": "lastPot()", +"f27eede0": "getTotalBid(address,uint256)", +"f27f974b": "Margaret()", +"f2801fe7": "getUserInfo(address,address)", +"f28063ce": "getMemeHolders()", +"f28075af": "get_player_address(uint256)", +"f280efaf": "addressToBytes1(address)", +"f28109d1": "ConsentTemplate(string,string,uint256,string,string,string)", +"f281c386": "_percent(uint256,uint256,uint256)", +"f281e7d1": "checkManagerStatus(address)", +"f282b1df": "batchAddCandidateByIndex(uint256,address[],bytes32[])", +"f282f551": "setCrowdsaleTokenExtv1(address)", +"f2836e1c": "contributorStatement(uint256,string)", +"f28386bf": "Nexium()", +"f2853292": "ChangeOwner(address)", +"f2856a2a": "getTeamPlayers(uint256)", +"f285d98e": "unlockSecret()", +"f285f25c": "tokenMetadataHash(uint256)", +"f286c1c5": "addtoOwners(address,address)", +"f287900d": "LogContribution(address,address,uint256,uint256,uint256,uint256)", +"f2887132": "baseHourglass()", +"f288753d": "centsPerEth()", +"f2888dbb": "unstake(address)", +"f2891b3d": "assetRegistrant(bytes32)", +"f28a2f75": "_allocateUnspentRefTokens()", +"f28a7912": "quick2()", +"f28ac86a": "token(string,string,uint256)", +"f28adc4d": "Attack()", +"f28afb1e": "pushAngelInvestmentData(address,uint256)", +"f28b325d": "admin_set_shopStoreRegister(address)", +"f28b7a9c": "disbursementAmount()", +"f28b824e": "MAT_TOTAL_SUPPLY_LIMIT()", +"f28c0716": "approveDeal(bytes32)", +"f28ce253": "is_min_goal_reached()", +"f28d253d": "getDividents()", +"f28e59c9": "get_sale_owner(address)", +"f28ee00c": "permittedSender()", +"f28f0f6a": "bulkCreateLambo(uint256,address,uint64,uint256,uint256)", +"f2901ae2": "ownerSetGlobalOperator(address,bool)", +"f29143ad": "Project_ChangeOwner(uint256,address)", +"f2928eea": "CaptainPreSell()", +"f2934817": "HalalPenny()", +"f293bab5": "numberofnews()", +"f294aa26": "EndoSHARD()", +"f295206f": "_unsafeSend(address,uint256)", +"f295587e": "giveITup()", +"f29617da": "registrationDeposit(address)", +"f2965a2c": "BurnupGameCore(address)", +"f296c1f2": "buyTokens(address,uint256,uint256,string)", +"f297109d": "RESERVED_TEAM_LOCKED_SIDE()", +"f2977c97": "approve(address,bytes32,bool)", +"f298083b": "setLottery(address)", +"f2980eb2": "getPRewardLength(address)", +"f2983257": "setFeatureStatus(string,bool)", +"f29a72ff": "_addTokenToPartition(address,bytes32,uint256)", +"f29b2040": "export(address,bytes8,address,address,uint256,uint256,bytes)", +"f29c1bc2": "setIsChargingTokenTransferFee(bool)", +"f29c7870": "setRefineCost(uint256)", +"f29d2f28": "setTokenHolder(address)", +"f29f1fa2": "RecievedEth(address,uint256,uint256)", +"f29f4d0b": "lastBuyTime()", +"f29f7b1b": "remove_coin(uint256)", +"f29fdb8a": "createSeason(uint32,uint64,uint64,address[8],uint256[8],uint16[8],address[8])", +"f29fe77e": "testMintGuy(int256)", +"f2a0928d": "preICOduration()", +"f2a0a987": "GCNYToken()", +"f2a16d5a": "GetNonce(uint8)", +"f2a38dac": "setKYCAdmin(address,address)", +"f2a40db8": "accounts(uint256)", +"f2a4a82e": "item()", +"f2a5630a": "BallotUp()", +"f2a5c79c": "getViewDatas()", +"f2a6517f": "updateTokenContractAddr(address)", +"f2a69417": "cancelFoundationTransfer()", +"f2a6e605": "evenDistThresh()", +"f2a724b1": "SnoqualmieCoin(uint256,string,string)", +"f2a75fe4": "empty()", +"f2a7e624": "approvedWallet()", +"f2a9a8c7": "allowance(bytes32,bytes32)", +"f2ab3e60": "incomeOf10k()", +"f2ab59d9": "contributionTarget_()", +"f2ab9384": "sumElements(uint256[])", +"f2abd01d": "initialBeating()", +"f2ac9427": "pricesToCommit(address[])", +"f2adc939": "removeBoundary(uint256)", +"f2af0e2f": "getProviderCurrentSupply(address)", +"f2af59bf": "fourthStage()", +"f2afe985": "LEBRON()", +"f2b0318e": "_getNibbleArray(bytes)", +"f2b05c15": "getTopicCount(address)", +"f2b0a55d": "getPlotData(uint256)", +"f2b175c0": "sendTokenTeam(address,uint256)", +"f2b1be45": "setAquariumCost(uint256)", +"f2b265ca": "playGame(uint256,string,string,string)", +"f2b26d8f": "nextEtherForSale()", +"f2b29993": "getMineral(uint256)", +"f2b2f40c": "allowPurchase(uint256)", +"f2b2ff1b": "platformReferral()", +"f2b3ddfa": "getCET4ByAddr(address)", +"f2b40209": "RATE3()", +"f2b445ad": "rowround(uint256,uint256)", +"f2b45ac1": "startCrowdSale()", +"f2b45ec5": "DonQuixoteToken()", +"f2b47d52": "geneScience()", +"f2b4c1b9": "isValidDataHash(bytes32,bytes)", +"f2b559ac": "printQuotation(int256)", +"f2b6e8b6": "emitSynthetixUpdated(address)", +"f2b7a54b": "destTokensAirdrop()", +"f2b841c0": "isPlayerIdle(address,uint256)", +"f2b85515": "addNewGame(address)", +"f2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", +"f2b9541f": "createEthCommunityToken(string,uint8,string,uint8)", +"f2b9b40f": "enableRegistration()", +"f2b9f903": "_getParticipantRoles(address,address)", +"f2b9fdb8": "supply(address,uint256)", +"f2ba18ed": "calculateVotes()", +"f2ba31ea": "Marine()", +"f2ba478d": "EtherCashPay(address,address,address,uint256,uint256,uint256)", +"f2ba810e": "PRE_SALE_30_BONUS_MIN()", +"f2baaa07": "createBet(uint32,uint256)", +"f2bb5ce1": "maxMintProofOfStake()", +"f2bbca67": "checkVotingForChangeBuySellLimits()", +"f2bbdab4": "N2C()", +"f2bc7ded": "getHowManyOwnersDecide()", +"f2bcd022": "withdrawalAddress()", +"f2bddf66": "redemptionInfo(address,uint64)", +"f2be600d": "getNumTanksType(uint256)", +"f2bea1fc": "MANAGER_SUPPLY()", +"f2bee03d": "set_sale_address(address)", +"f2bf7e7a": "TokenGAC(uint256,string,string)", +"f2bff63b": "ico_tokens()", +"f2c00979": "_emitTransferred(address,address,uint256,address)", +"f2c0cdbe": "dividendsPercent()", +"f2c0d168": "newOwner(address,address)", +"f2c1d74e": "FansToken()", +"f2c298be": "register(string)", +"f2c2dff2": "testFailSetNotRetractableNotOwner()", +"f2c340f2": "chfCentsPerToken()", +"f2c3e6d9": "requireTokenFuel()", +"f2c402b6": "todayReserved()", +"f2c44e77": "UpgradeEnabled(address)", +"f2c4c45d": "makeInvestment(address,uint256,address,address,uint256,uint256,address)", +"f2c51f9d": "DNAc()", +"f2c5925d": "setNext(bytes12)", +"f2c6bab0": "doCallNumber()", +"f2c70bda": "addInvestorIfNotExists(address)", +"f2c768e1": "Register(string,string,string,uint256,uint256,address)", +"f2c7d331": "receiveDividends(uint256)", +"f2c80435": "addToUnminted(uint256)", +"f2c816ae": "addAddressToBlacklist(address)", +"f2c8257e": "getcapname()", +"f2c8a87b": "SYC2ndEarlyPurchase()", +"f2c8b676": "FACTOR_8()", +"f2c8d247": "convertibleToken(uint16)", +"f2c9e0ed": "SkrumbleToken()", +"f2c9ecd8": "getNumber()", +"f2cba6a6": "REPUTATION_DECIMALS()", +"f2ccaed5": "getSaleContractEndBlock(address)", +"f2cd84d5": "tokenHoldersToClaim(address)", +"f2cedaa0": "destroyCoins(address,address,uint256)", +"f2cee589": "TIER1_PERCENT()", +"f2cf687a": "MAXPERWEI()", +"f2cf70e4": "setWeekly()", +"f2cfe267": "setEpochData(uint128[],uint64[],uint64[],uint256[])", +"f2d05f2b": "playerIndexToOwner(uint256)", +"f2d06540": "setBitpaintingStorage(address,address)", +"f2d15c48": "setLicenceTellerPrice(bytes2,uint256)", +"f2d213c8": "BONUSED_PURCHASES_LIMIT()", +"f2d2e1a7": "QSHU()", +"f2d2fa91": "privateSaleMaxContrAmount()", +"f2d386b9": "getjournalists()", +"f2d439d8": "PokerPayout()", +"f2d50151": "verifyRs1Hash(bytes,bytes32)", +"f2d578dc": "RHToken()", +"f2d57adf": "setClaimInterval(uint256)", +"f2d5866d": "ATTR_EXPLORABLE()", +"f2d5d56b": "pull(address,uint256)", +"f2d68ee0": "withdrawCollateralFromPool(address,uint256)", +"f2d6cd26": "CEO_Trader()", +"f2d6e0ab": "__process(bytes,address)", +"f2d701a7": "giveaway(uint256,uint256,uint256,bool,address)", +"f2d73dc6": "VoteZoneToken()", +"f2d7f637": "closePosition(bytes32,uint256,address,address,bool,bytes)", +"f2d805d5": "firstStageRaisedInWei()", +"f2d906cc": "addressFounders2()", +"f2d93fb0": "setRushTimeFloorCount(uint256)", +"f2d9f46e": "flipPayingDoublrs(bool)", +"f2da1f0a": "imageAddress(address)", +"f2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", +"f2da877d": "dataOfSell(address,uint256)", +"f2dabd26": "multipleMint(address[],uint256[])", +"f2dadd3d": "FundRequestPrivateSeed(uint256,address)", +"f2db5493": "VGS()", +"f2dbe0f8": "options(bytes32,address,address)", +"f2dbf12e": "personalInfo()", +"f2dc8878": "setTokenSaleAmount(address,uint256)", +"f2dd4be8": "publish(string,bytes32,uint256)", +"f2dd4e03": "getTxCon(bool,bool)", +"f2dd6585": "garanteSystemDepositInAllFunds()", +"f2ddc772": "confirm(bytes)", +"f2dddd95": "BLDAToken(uint256,string,uint8,string)", +"f2de12fc": "getFxUSDAmount(string,uint256)", +"f2dfa136": "STATUS_DEAL_WAIT_CONFIRMATION()", +"f2dfd7f5": "cancelWarranty(string,string,address)", +"f2e03ad0": "openProvider(address,bool,string,string,uint256,string,uint8,bool,address)", +"f2e09c7a": "activatePoint(uint32,int256)", +"f2e0d636": "registerSponsor(uint32,int256,bool,uint32)", +"f2e1192a": "wolkSale()", +"f2e12a39": "setRole(uint8,address)", +"f2e1b1cc": "getWinSlot(uint256)", +"f2e1be50": "GDPOracle()", +"f2e22ae0": "messageBoard(string)", +"f2e253ec": "FUTURE_ME_TOKENS()", +"f2e27b33": "signedTransferHash(address,address,address,uint256,uint256,uint256)", +"f2e28e16": "BrianexToken()", +"f2e29341": "accountQuery(address)", +"f2e2e5ea": "trustedAddressInLUT(uint256)", +"f2e34909": "PRICE_CUTOFF()", +"f2e41c0b": "birthDateOf(uint256)", +"f2e4ff30": "isValidAuction(uint256)", +"f2e552a5": "verifyUpdateTransaction(bytes32,uint256,address,uint256,address,uint256)", +"f2e55ac1": "getDestinationByIndex(uint256)", +"f2e62772": "admin_address()", +"f2e650ff": "PerpetualTestCoin()", +"f2e6e170": "addressesImported(address,uint256,uint256)", +"f2e6fecd": "Ethernational()", +"f2e7269b": "transfer_token2_toContract(address,address,uint256)", +"f2e7514c": "buyByName(string)", +"f2e79ab7": "ETHealth()", +"f2e84f24": "_byrne(uint256)", +"f2e998df": "ownerRevealOverride(uint256)", +"f2ea83e6": "executeRecursive(address,address,bytes32,int256)", +"f2eae773": "getLockedWalletAmount(address)", +"f2eaee02": "applyWait()", +"f2eb32fb": "addOffChainContribution(address,uint256,uint256,string)", +"f2eb3e34": "init1()", +"f2eb5dd3": "tokenUSDRate()", +"f2ebde57": "tryExec(address,bytes)", +"f2ec602c": "feeWithdrawn()", +"f2ec6264": "ownerAddressLUT(uint256)", +"f2ecebea": "ratePreIco()", +"f2ed2148": "newGateway()", +"f2edb7c7": "purchaseWonder(uint256)", +"f2ee8be9": "setSubmissionOpen(uint256)", +"f2eea5c1": "setupAccreditedAddress(address,uint256)", +"f2eec570": "transferredAmount(address)", +"f2eec69b": "CTOAddress()", +"f2f03877": "commit(uint256,bytes32)", +"f2f0967b": "setLifToken(address)", +"f2f18af2": "Withdraws(address,uint256)", +"f2f254c7": "getLatestMinorTree(bytes32,uint32)", +"f2f2a043": "setUserCommissionRate(uint256)", +"f2f3384e": "_getGen0Address(uint256)", +"f2f3a1d2": "Erc20Token(string,string,uint8,uint256)", +"f2f3c773": "vestInterval()", +"f2f48e20": "Update_START_PRESALE_TIMESTAMP(uint256)", +"f2f4eb26": "core()", +"f2f56ffe": "getCommit(uint256,address)", +"f2f62ac7": "TOSPrivateIncentiveContract()", +"f2f65960": "setGracePeriod(uint256)", +"f2f6861b": "WinbitTest()", +"f2f6ccda": "getBalanceFromOwner()", +"f2f6ff15": "COLOR_BLACK()", +"f2f70594": "disableMintForever()", +"f2f76549": "startExit(uint256,uint256,uint256,bytes,bytes,bytes,bytes)", +"f2f8569f": "buyAndTransfer(address,address,bytes)", +"f2f85fce": "GRAND()", +"f2f921e6": "snapshotDailyGooDepositFunding()", +"f2f977a7": "getBetsByCategory(string)", +"f2fa8f69": "TokenPolicy(address)", +"f2fb5706": "deletePersons()", +"f2fc6deb": "weiToTokensBono(uint256)", +"f2fc9100": "init(address,string,string,uint8,uint256,bool)", +"f2fd2a49": "galleryThree()", +"f2fdddf4": "setEncryptContract(address)", +"f2fde38b": "transferOwnership(address)", +"f2fdfe34": "createSpecies(uint256,string,address)", +"f2fe1a1d": "geSoftwareVersionRecordsLength()", +"f2fec913": "collectMKR(uint256)", +"f2ff0912": "getHolderAtIndex(uint256)", +"f2ffb4fc": "stopLive()", +"f30000f9": "NewCloneToken(address)", +"f300cf1d": "addUserToMeta(address,uint256)", +"f301ac65": "hashBid(address,uint256,address,address,bytes32,uint256,uint256)", +"f3022de8": "setNewContractAddress(address)", +"f3025556": "newDeveloper(address,uint64,bool)", +"f3025f10": "dataOfBuy(address)", +"f302be42": "startTokenRaffle(uint256,address,uint256)", +"f3036c24": "UTORN()", +"f30398ef": "Wishcoin()", +"f30416ca": "setSaleAuctionContractAddress(address,address)", +"f30431b5": "addAdminAccount(uint256,address)", +"f3052d26": "getCategory(uint256)", +"f30562b6": "updateRecord(string,string,string)", +"f3057ff9": "accsessAccountTransfer(address,uint256)", +"f3072020": "partner_1_name()", +"f3074b58": "withdrawSDTfromcontract()", +"f307946d": "hardCapMainSale()", +"f3083c44": "GetMyEarnings()", +"f308846f": "registeredCallbacks(address)", +"f3095511": "GetTokenPriceCents()", +"f309782b": "LescovexAddr()", +"f309caca": "icoEndOfStageB()", +"f309e3c5": "allocateUnsold()", +"f30a4a70": "getSoldToken()", +"f30a7166": "multiTransferFrom(address,address[],address[],uint256[])", +"f30ba854": "tokensPerEther_numerator()", +"f30bb8af": "GoalReached()", +"f30c0ee6": "getRank05()", +"f30c9296": "myUsableBalance()", +"f30d3ad4": "crowdSaleAmountRaised()", +"f30d4d3f": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"f30df155": "calculateBorrowAmountWithFee(uint256)", +"f30f8508": "setReservedTokensList(address,uint256,uint256)", +"f30faff6": "SetExtra(uint256)", +"f31011ac": "ANTS_TO_COLLECT_1ANTHILL()", +"f310348e": "_removeFrom(address,uint256)", +"f3106780": "DoDividend(uint256,uint256,uint256)", +"f3107c48": "nestedFirstAnyToAny2(uint256)", +"f310a19d": "getPlayerVaultsHelper(uint256,uint256)", +"f31174ee": "inactivityReleasePeriod()", +"f3125a1f": "deposit(address,uint256,bytes,uint256)", +"f31294a4": "announcementURI()", +"f3130ba5": "setTokensSoldInPresale(uint256)", +"f3147b00": "totalICOAmount()", +"f314bf46": "setReleaseDb(address)", +"f314e2c0": "CoinExchangeToken(uint256,string,uint8,string)", +"f314e976": "parcelGzeWithoutBonus()", +"f315e81d": "getStage1End()", +"f31604c7": "setData()", +"f3161022": "convertToEther(uint256)", +"f3164eb6": "transferAndFrozen(address,uint256)", +"f31660e9": "getOrganisationsSize()", +"f3169506": "readPurchaseAtIndex(uint256)", +"f316ea78": "buyOrderTotal()", +"f317b85b": "ownerAddressNumberMap(address)", +"f3181001": "founderAndTeamSent()", +"f3182d6c": "setFeeRate(address,uint256,uint256)", +"f31887e6": "tokenTransferByAdmin(address,uint256)", +"f318c75f": "dvipAddress()", +"f318cc4a": "invite(uint256,uint256,uint256)", +"f3191443": "toggleMigrationStatus()", +"f3199e98": "setMinWeiForDInit(uint256)", +"f319a899": "NameProvider(address)", +"f31a044d": "test_bytes(bytes,bytes)", +"f31a18a5": "endICOStage7()", +"f31b4e89": "updateEpisode(uint256,string,uint256)", +"f31bac4d": "SwitchLoanOwner(address,uint256)", +"f31bebaf": "BugBountyOneBreaker()", +"f31df3f8": "AddItem(uint32,uint16,uint256,uint16,uint16,string)", +"f31e3e84": "AML()", +"f31e731e": "attack(address,bytes32,uint256)", +"f31ed9e6": "DescartesToken()", +"f31fe982": "endGround(uint256)", +"f3200a1c": "change_symbol(string)", +"f3201424": "register(address,address,address)", +"f3203dc0": "MultisigsChanged(address,address)", +"f3205c93": "isUserBanned()", +"f320d963": "assertEq(string,string)", +"f320f858": "setRandomAddress(address,address)", +"f32106f0": "TemplateToken(uint256,string,uint8,string)", +"f32113d5": "setBgxWalletAddress(address)", +"f3214652": "NHSToken()", +"f321653a": "setCommunityBallotStatus(bool)", +"f3217345": "getShowText()", +"f32188a5": "reinvest(address,bool)", +"f3221c7f": "hasHash(address,bytes32)", +"f322770c": "LogWhitelistAdd(address,uint256,address)", +"f3227dc4": "cancelDeal(string)", +"f322a1cf": "BlueChainToken()", +"f322c755": "daoManager()", +"f32306d2": "registerNameXID(string,uint256)", +"f3236460": "closeUp()", +"f323a061": "lottoQueue()", +"f3269716": "year()", +"f326be05": "Centaure()", +"f3278191": "BuyFST(address,uint256,uint256,uint256)", +"f32784cd": "getGratitudeOf(address,uint256)", +"f327b7fc": "isNotZero(address,string)", +"f3283fba": "setMultisig(address)", +"f3290290": "createIncident(bytes32,bytes32,uint256,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"f32a547c": "getBuy(uint256)", +"f32a72eb": "airDropMembers(address)", +"f32a9f77": "ReceiveEther(address,uint256)", +"f32b85e8": "timeScale()", +"f32d61eb": "setDevTokensPercent(uint256)", +"f32e8038": "setPercentIncrease(uint256,uint256,uint256)", +"f32eca11": "revokeAccessDeposit(address)", +"f32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", +"f32f6a23": "olympus()", +"f32fc856": "Wanchain()", +"f32fe995": "left96(uint256)", +"f3302a4d": "ChangeTransferStatus(bool)", +"f3305ae2": "setName(bytes32,address)", +"f331020c": "GAMEPAUSED()", +"f3310628": "allocateTokensInternal(address)", +"f33146af": "test_twoTrueAsserts()", +"f3316ef5": "countStudentRequest()", +"f3318fed": "ThrowsInConstructor(bool)", +"f3319243": "decimalFraction(uint256,uint256)", +"f331de4c": "addShare(address,uint256,uint256,uint256)", +"f332511f": "getTxcode(uint256)", +"f33261ac": "stageCount()", +"f33280b2": "etherLimit()", +"f332a245": "unbanToken(address)", +"f3332d1c": "burnTokensExp(uint256,uint256)", +"f3333e7f": "etherProceedsAccount()", +"f33376c6": "createNext(address,string)", +"f333fe08": "getCertificate(bytes32)", +"f3358ac4": "getNum(uint256)", +"f33670aa": "sharesAddress()", +"f336bc7e": "maxDecreasePct()", +"f336e80a": "setMaximumVotingWindow(uint256)", +"f3372898": "dtrade(address,uint8,uint8,uint256[],address[],bytes32[])", +"f337616c": "PETER()", +"f337a0bb": "getLLV_edit_4()", +"f337c2e1": "calculateNextEtherValue(uint256)", +"f33801e0": "setCoachPrice(uint256,uint256)", +"f3382694": "isCamp()", +"f3388e75": "timelockController()", +"f338c984": "initialBountyAmount()", +"f3391998": "hasHash(uint256)", +"f339292f": "mintingStopped()", +"f3396905": "lockedNowBalanceOf(address)", +"f339c504": "lockBalance(uint256)", +"f33aa95d": "setIsTransferEnabled(bool)", +"f33ae7fd": "auctionOf(uint256)", +"f33b1ea5": "rewardUsers(uint256,address[],uint256[])", +"f33d0f3a": "requiredBet()", +"f33d9a52": "get_data_benefited(address,string)", +"f33dc1fa": "founderTokensAllocated()", +"f33f8f26": "setpubprize(uint256)", +"f33f9522": "readCoin(uint256)", +"f33ffc16": "addSpecialBonusConditions(address,uint256,uint256)", +"f34080b3": "MIN_INVESTMENT_ICO_PHASE_TWO_POUNDS()", +"f3408110": "transferWithFee(address,address,uint256)", +"f340fa01": "deposit(address)", +"f3412942": "accountLevelsAddr()", +"f34186c8": "endEthGet()", +"f341cae8": "setEmergencyAccount(bytes32,bytes32)", +"f341d3ba": "bandwidthFactor()", +"f3433ff2": "callbackTime()", +"f3436873": "totalAxiesRewarded()", +"f3436c85": "TKXToken()", +"f343ccbd": "CrystalSkull()", +"f3444701": "newTankType()", +"f344f4fa": "HARDCAPPED_SUPPLY()", +"f345d06b": "getTileHp(uint16,uint8)", +"f3463272": "signupFee()", +"f3465181": "preSeedAllocation()", +"f3466b47": "setTotalCollected(uint256)", +"f346fd74": "TraceChain()", +"f34839d1": "C50()", +"f3492915": "confirmSpendLimit(uint256)", +"f34969d1": "minimumFundingCHF()", +"f349e3e3": "own(address)", +"f34a5e85": "MercuryToken()", +"f34b95b3": "register(string,address,bytes32)", +"f34c7010": "commitSecurity(address,uint256,uint256)", +"f34d22d0": "getQuickPromoRemainingBlocks()", +"f34df94e": "Version(string,address,address,bool)", +"f34e2699": "isPresaleFinalized()", +"f34e3723": "release(string)", +"f34e4c60": "currNumOfBattleCards()", +"f34ed4e6": "RanDAOPlus(address)", +"f34f43f6": "getRepTokenAddress()", +"f34f5f45": "Election(string)", +"f3512ce0": "multiLock(address[])", +"f351d166": "_depositEscrow(uint256)", +"f3522656": "getRejections(uint256)", +"f352c45c": "createChallenge(string,string,uint256,uint256)", +"f353108b": "fechVoteResultForCandidate(address,uint256)", +"f353ae48": "goodluck()", +"f354040c": "SpreadToken()", +"f3541901": "execute(address,bytes,uint256,uint256)", +"f3548cd3": "getBagCount()", +"f354e2c3": "_getSeason()", +"f355b92d": "BuyTokens(address)", +"f356d6cc": "getPI_edit_18()", +"f356e8de": "placeNewSurvey(bytes32,uint256,uint32,uint256)", +"f3574a20": "TokenTransacted(address,address,bytes32,address,uint256,address)", +"f3576220": "withdrawls()", +"f3582373": "getTokenAddressesLength()", +"f3586fb9": "_isAuthorized(address,uint256)", +"f35898bd": "PreviousPayout()", +"f358b3de": "REKTMultiSigWallet()", +"f359671c": "withdrawWithReference(address,uint256,string)", +"f359b03c": "recalcBonuses()", +"f359d66d": "driverCount()", +"f35a8796": "removeHouseHold(uint256)", +"f35b3b51": "Bullioncoin()", +"f35b6068": "selectWinningNumber()", +"f35ba5d3": "acceptCeoOwnership()", +"f35c172e": "getSecondHexByte(bytes1)", +"f35d606c": "ETFToken(address[],uint256[],uint256)", +"f35dad40": "totalRedeemed()", +"f35e3945": "SRHCoin(uint256,string,string)", +"f35e4a6e": "setStartBlock(uint256)", +"f360234c": "compare(uint256,uint256)", +"f3604e54": "advisorsKey()", +"f36089ec": "getConversionRate()", +"f3608b57": "_getEthToUsdPrice(uint256)", +"f360c183": "setNonce(uint256)", +"f360e22f": "celebrityCount()", +"f3611719": "confirmFriendship(string)", +"f3616a90": "UpdateHOLDer(address,address)", +"f362b9af": "StartNewMiner()", +"f362d78f": "testBitNotEqualSuccess()", +"f3634033": "token_b_amount()", +"f363441f": "getCreatorDotBalance()", +"f363449f": "reservationSupply()", +"f3635a02": "vc2Wallet4Pct()", +"f3637d51": "setPayLock(bool)", +"f3647597": "setGrantVestedEDEXContract(address)", +"f364e7f4": "_investAsEarlybird(address,uint256)", +"f36631e7": "createHero(uint16,address)", +"f3667517": "getMinter()", +"f3669ec9": "hopefuls(uint256)", +"f36706cb": "SENSToken(address,address,uint256,uint256)", +"f3678cd3": "updateOffChainTokens(uint256)", +"f36a1fd9": "_allowBuyDirect()", +"f36a4bd3": "ReceivingContractTokenFallbackFailed(address,address,uint256)", +"f36b135d": "PRICE_EXPONENT()", +"f36c0810": "RANDOM_BYTES_COUNT()", +"f36c83f0": "getPuppy(uint256)", +"f36d1b8e": "SignStopDividend()", +"f36d1e4e": "setRewards(uint256,uint256,uint256)", +"f36d29e7": "triggerTansferEvent(address,address,uint256)", +"f36db900": "gameStarterDividendPercentage()", +"f36e20db": "getStage1Start()", +"f36e8dea": "MedicalCannabis()", +"f36f235d": "getLedger()", +"f36fd108": "editTitle(uint256,string)", +"f370031e": "BetOnATeam(address,uint256,uint256)", +"f3701da2": "build(address)", +"f3702b82": "setBonusPattern(uint256[],uint256[])", +"f3703a69": "LogGrantCreated(bytes32,uint256)", +"f3706bb7": "killTransaction(bytes32,bytes32,string,string)", +"f370ff51": "LogTokenPurchase(address,address,uint256,uint256)", +"f371475a": "initialiGnSupply()", +"f371ec49": "pausedB()", +"f3737ffd": "setDiscount(uint256[],uint256[])", +"f3746947": "giveBirth(uint256,uint256[2],uint256[2])", +"f3746ff7": "advisorReserve()", +"f375bcaa": "failedTimestampSeconds()", +"f37633f9": "Internet()", +"f376daa8": "MMX(uint256,string,string)", +"f3773466": "endIcoRoundManually()", +"f377f5b7": "setAirdropTotalSupply(uint256)", +"f3781697": "HubiiCrowdsale(address,uint256,uint256)", +"f3784dec": "withdrawFailed(address)", +"f378ff76": "random(uint32,uint32)", +"f3791477": "OLD_TOKEN()", +"f3794914": "mintParticularPart(uint8[4],address)", +"f37a7d4d": "boosters()", +"f37a9c1c": "ALLOW_BETA()", +"f37b0427": "CryptrustToken()", +"f37b437b": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256,uint256)", +"f37b74ca": "authorizePayment(string,bytes32,address,address,uint256,uint256)", +"f37b916a": "tokenCreateUtcTimeInSec()", +"f37bdaac": "transferSig(bytes32,uint256,address)", +"f37bf1be": "getParticipateName(uint256)", +"f37cc477": "calcOutput(uint256,uint256)", +"f37d11cc": "canTransferFrom(address,address,uint256)", +"f37e592d": "shopStoreId(address)", +"f37e741e": "projectWeight(uint256)", +"f37f8345": "getTokenRates(address,address[])", +"f37fda1b": "setUser(address,address,bool)", +"f37fdaf5": "calculateProfitPercent(uint256)", +"f37ff01b": "getLLV_edit_13()", +"f380729d": "claimB2()", +"f3813163": "proxyTakeEtherBack(address)", +"f3817b23": "getWizzPandaCountOf(uint256)", +"f381a3e2": "FuelingToDate(uint256)", +"f381f2a5": "minimumCap()", +"f38323bb": "bountyDurationInBlocks()", +"f383c7b3": "setCrowdsaleStart(uint256)", +"f383d6b9": "OwnerValidatorImpl()", +"f384632c": "updateContestTeam(uint32,uint32,uint8[],uint32[])", +"f384764c": "oraclize_query(string,bytes[2])", +"f3850fda": "receiveTokens(uint256,uint256)", +"f385d890": "cnt_registrations()", +"f3868555": "orderEthOf(address)", +"f386b8fd": "TestToken2()", +"f3873e7b": "PublicBattle()", +"f38780e2": "winnerPaid()", +"f388b046": "currentTask()", +"f388ef80": "updateXPLPerEther(uint256)", +"f389057f": "_setMouthValue5(uint256)", +"f3898a97": "convert(address[],uint256,uint256)", +"f38a6163": "IncMainSupply(uint256)", +"f38a8262": "grantPermission(address,bytes32)", +"f38ad578": "setSecondWinner(address[])", +"f38afbf7": "setModuleEnable(string,uint256)", +"f38b0585": "withdrawAdvisorFunds()", +"f38b0600": "fireEventLog3()", +"f38b2ef0": "testTheFirstMultiplier()", +"f38d5cb9": "_getHash(address,address,address,address)", +"f38db3d8": "setRunningInternal(bool)", +"f38e5ca2": "getBlobStoreFromFullBlobId(bytes32)", +"f38fb65b": "revertCall()", +"f3905b82": "ibaMultisig()", +"f390cae4": "ADDR_TKG_TECH_FUND()", +"f390e4b4": "getResidentNumber()", +"f3913e69": "tokenTransferFrom(address,address,address,uint256)", +"f391f074": "accountIdForAddress(address,address)", +"f3922cde": "addExceptAddress(address)", +"f39259d0": "_batch2_icosaleStartTimestamp()", +"f393b3b0": "_DataRegistered(bytes32)", +"f393f022": "icoStartP5()", +"f3942753": "addTxToCustomerRegistry(address,bytes32,uint256,uint256)", +"f3945ca0": "addEndorsement(bytes32,bytes32)", +"f39460c4": "setCheckMinContribution(bool)", +"f3956a71": "isMEH()", +"f396282d": "signupVerify(bytes32,bytes32)", +"f396cd66": "weiAmountShare()", +"f396e81b": "SALES_DURATION()", +"f397884b": "preIcoOpeningTime()", +"f3983e44": "createAmountFromTmedForAddress(uint256,address,address)", +"f398dc28": "aprovarUsuario(address,uint256)", +"f398faaa": "getRank09()", +"f3993d11": "batchTransferFrom(address,address,uint256[])", +"f39981e1": "burnStake(address)", +"f3998918": "getPreSaleTokenAmount(uint256)", +"f39992e4": "Blackwood()", +"f399c7e6": "startGame(address,uint256)", +"f39afaba": "GCV()", +"f39b1e74": "CQMVValueCirculateAssets()", +"f39b5b9b": "ethToTokenSwapInput(uint256,uint256)", +"f39b7fb1": "get_dati_articolo(bytes,bytes,bytes10)", +"f39bfb52": "giveBountyTokens(address,uint256)", +"f39c2197": "numberOfPartners()", +"f39cce01": "convertLotIdsByAddress(address)", +"f39d359b": "initDemoc(string)", +"f39d9f19": "CSES1()", +"f39e6e1e": "OwnerAddition(address)", +"f39e9fa6": "setERC223Activated(bool)", +"f39ec1f7": "lookup(bytes32)", +"f39f421e": "FIBKAD()", +"f3a04af4": "PUBLIC_TOKENS()", +"f3a133a9": "setStartAt(uint256)", +"f3a16c3e": "tokenCreationCapWithOutBonus()", +"f3a1b4b2": "setCrowdsaleStartandDuration(uint256,uint256)", +"f3a1d297": "addToken(address,string,string,uint8,string)", +"f3a1f828": "EventRandomLedgerRequested(address,uint256,uint256,uint8,address)", +"f3a247cb": "ZooToken(uint256)", +"f3a27963": "unpauseMints()", +"f3a3abc6": "setWhitelistTransfer(address,address,bool)", +"f3a3bef4": "innerScope()", +"f3a3de38": "EMACCrowdsale(uint256,uint256,uint256,address)", +"f3a44fe1": "withdrawForWorkshop()", +"f3a49f90": "sendOwner()", +"f3a504f2": "funded()", +"f3a53cd8": "ICOWIZARD(string,string,uint8,uint256)", +"f3a5626b": "addPurchased(bytes32,uint256)", +"f3a5644d": "crowdsaleEndedTime()", +"f3a5950e": "testHighestTranch()", +"f3a5f262": "setMemberTier(address,uint256)", +"f3a60cb4": "unLockAddrOwner(address)", +"f3a670cd": "Redeemed(address,uint256,uint256)", +"f3a67ad2": "subAccountBalance(address,uint256)", +"f3a8041f": "Crowdsale(address,uint256,uint256,uint256,uint256,uint256)", +"f3a87492": "AntiFakeLabelToken(address,uint256)", +"f3a8bcaa": "_logGameGiftInfo(address)", +"f3a9bf03": "verifyImage(address,string)", +"f3aa4420": "_grandTournamentBooty(uint256,uint256,uint256,uint256)", +"f3aa67ad": "buyTokensOraclePayIn(address,uint256)", +"f3ab7ea9": "seeker()", +"f3ac2732": "confirmed(uint256)", +"f3ac3df5": "prizeFund()", +"f3ac9ee4": "parseOpenTx(address[11],uint256[10],uint32[4],bool,bytes)", +"f3acc06b": "retrait_1()", +"f3acc477": "addTotalEtherValue()", +"f3ad0dd8": "multiTransferToken(address[],uint256[])", +"f3adcc46": "getMinerHashRateCurrentHalving()", +"f3ae2415": "isManager(address)", +"f3ae5acd": "LastExtractTime()", +"f3aee9f9": "tokensUnlockPeriod()", +"f3afe129": "hourPotExpiration()", +"f3aff181": "collectBagHolderFund(uint256)", +"f3b07bb1": "maxEthPerTransaction()", +"f3b15ffd": "test_insert_containsId()", +"f3b16265": "onDraw()", +"f3b303cd": "AdvanceToken()", +"f3b35100": "voteOf(address)", +"f3b3a9fa": "maxReserve()", +"f3b423d5": "updateReloadAmount(uint256)", +"f3b42c40": "isOnSaleAny3(uint256,uint256,uint256)", +"f3b4735e": "lotteryAddresses(uint256)", +"f3b4eccb": "ChallengeFund()", +"f3b50c04": "rescind()", +"f3b55007": "TDx(uint256,string,uint8,string)", +"f3b5678f": "ETHER_MAX_CONTRIB()", +"f3b585cc": "nSteps()", +"f3b5a5af": "bonusForEveryone()", +"f3b600ec": "_allocateTokens(address,uint256,uint256)", +"f3b6a748": "unpauseFrom(uint256)", +"f3b75ee3": "totalCommunityFundMinted()", +"f3b77f30": "close(bytes,bytes)", +"f3b849d6": "_allocateReferralTokens(address,uint256)", +"f3b8b2a9": "weiBuysHowManySeconds(uint256)", +"f3b978c1": "checkProof(bytes32[],bytes32[])", +"f3ba138e": "MineLevel(uint256)", +"f3baa092": "RemoveRequestEvent(address,address)", +"f3bb9741": "commitmentCampaign(uint256,bytes32)", +"f3bbc84c": "tierNum()", +"f3bd27a4": "secondStageMinting()", +"f3bda50a": "getSetNewTerrainPrice(uint256,uint256,bytes32)", +"f3bdc228": "destroyBlackFunds(address)", +"f3bdea04": "burnICACOIN(uint256)", +"f3bdf8ba": "requestEthereumLastMarket(address,string)", +"f3be07eb": "getDefaultTranches(address)", +"f3be1e35": "VIVAToken(uint256)", +"f3becb59": "C(address)", +"f3bf6b73": "proposalChecked(address,uint256,uint256)", +"f3bf78e7": "setBAAAU(bytes32,address,address,address,uint256)", +"f3bf93a0": "forceReleaseAdmin(bytes32)", +"f3bfddb7": "getById(string)", +"f3bfe75e": "BeatTokenIcoFinalized()", +"f3c0efe9": "tokenToTokenTransferOutput(uint256,uint256,uint256,uint256,address,address)", +"f3c156f3": "purchaseDigitalArtSellingItem(uint256)", +"f3c15f49": "getLiability()", +"f3c16e54": "Resolve(bytes32)", +"f3c1c7c0": "LogCoinsEmited(address,uint256)", +"f3c20de0": "tokens(uint16)", +"f3c274a6": "isPut()", +"f3c37bd5": "Verifier(address,uint256,uint8)", +"f3c505c2": "updateInventories(uint256,uint256,uint256,uint16)", +"f3c50ce0": "CobeFriendCore()", +"f3c51c84": "_EnvoisTokens(uint256,uint256)", +"f3c537c5": "fint8(int8)", +"f3c64850": "amendedEarlyPurchaseIndexes(uint256)", +"f3c6a223": "Bifrost1Token()", +"f3c74496": "logWorkerStatement(string)", +"f3c78091": "AcceptingDepositsChanged(bool)", +"f3c7d275": "prenup(string,string,string,string,string,address,address)", +"f3c7e538": "set_successful_verifier(address)", +"f3c85eba": "compound(uint256,uint256,uint256)", +"f3c8f3ef": "startListing()", +"f3c8ffaa": "endPreICOStage()", +"f3c957f2": "haltCommitPeriod(address,bytes32,bytes32)", +"f3c95c60": "isValidUser(address)", +"f3c9a5cc": "CrowdsaleController(uint256,address,address,bytes32)", +"f3ca062a": "setLevel(uint256,uint8,uint8,uint16)", +"f3ca29b1": "ownerDailyWithdrawal()", +"f3ca2b54": "test_twoValidEqString()", +"f3ca5679": "Fund(address,string,address,uint256,uint256,address,address,address,address,address[],address[])", +"f3ca7425": "exercisePriceOf(uint256)", +"f3ca824c": "setStartCloseSale(uint256)", +"f3caad03": "isCitizen(address)", +"f3cb1805": "bidOnBreedingAuction(uint40,uint40)", +"f3cb4aae": "confirmBusiness(address)", +"f3cb8c31": "addEmployee(address)", +"f3cbc040": "checkVerify(bytes32,uint256,uint256,uint256)", +"f3cbe7b5": "exchangeableTokensFromStock()", +"f3cc2436": "maxPoolTotal()", +"f3cc6860": "setHash(bytes32,uint256,bytes32)", +"f3cca49a": "restoreUnsoldTokens(address)", +"f3cca5b4": "crowdSaleSoldAmount()", +"f3cca85a": "getInputAddress()", +"f3ccaac0": "image()", +"f3ccb401": "DistributeAirdropMultiple(address[],uint256)", +"f3ccc2f2": "buscarDocumentoPorQM(string)", +"f3cd1c28": "setTransfersAllowed(bool)", +"f3cd543f": "sendBoughtTokens(address,uint256)", +"f3ce2bc6": "_updateSaleAvgHistory(uint256,uint256)", +"f3ce40eb": "setSchellingRoundSupply(uint256)", +"f3ce782e": "LongBought(address[2],uint256[5],uint256)", +"f3cee129": "getOwnerServer()", +"f3cee64d": "setCmd(uint256)", +"f3d1dfee": "calcSeason(uint16)", +"f3d2f17b": "getData_22()", +"f3d2f824": "setXQU(string)", +"f3d305b4": "getBoostedProposalsCount(address)", +"f3d3402a": "changeBountyData(uint256,string)", +"f3d38a7b": "setBTBAddress(string)", +"f3d3d448": "setControllerAddress(address)", +"f3d3fce7": "settleLend(bytes,bytes,address,uint256,bytes,bytes,bytes,bytes)", +"f3d448d2": "countryInfo(uint256)", +"f3d47d1b": "transferAllFrom(address,uint256[])", +"f3d490db": "transferByPartition(bytes32,address,uint256,bytes)", +"f3d4b942": "emergencyFreeze()", +"f3d544d2": "FRTToken(uint256,string,string)", +"f3d6b54e": "setAirdropPrize(uint256,uint256)", +"f3d6cb29": "setLLV_edit_34(string)", +"f3d791ea": "submitTrade(address,uint256,address,bytes)", +"f3d79244": "frozenProfitDate(address)", +"f3d7bf1d": "privateStageTokensSold()", +"f3d7c6f7": "claimPrivateTokens(address[],uint256[])", +"f3d7e464": "EARLY_CONTRIBUTOR_VESTING_PERIOD()", +"f3d838a0": "Copyright()", +"f3d89c49": "setAutoCreationFee(uint256)", +"f3d91708": "isEligibleForUpgrade(address)", +"f3d97a25": "cancelTrade(address,address,uint256,uint256,uint256)", +"f3d9bc65": "sendBountyTokens(address,uint256)", +"f3d9eeec": "CourseChanged(uint256,uint256)", +"f3db09b8": "invoice(bytes32,address,address,uint256,uint256,uint256,uint64,uint64)", +"f3db4f2b": "retrievePieceFromEscrow(uint256)", +"f3dbaf0d": "removeVestingAdmin(address)", +"f3dd3d8a": "newCurrency(string,string,uint8)", +"f3ddb946": "bets_total()", +"f3de56de": "createNewSociety(string)", +"f3df0bbe": "startNewBallot(bytes32,bool,bytes32[])", +"f3df29b6": "periodITO_endTime()", +"f3e1cb63": "rsVerifyPublic(bytes32,uint256[2],uint256[],uint256[],uint256[],uint256[])", +"f3e1efbf": "validation_inviter(address)", +"f3e238d2": "StrongKek()", +"f3e2aa83": "requestReclaimEther()", +"f3e3c629": "testBalanceOfStartsAtZero()", +"f3e41a99": "addRound()", +"f3e4877c": "distribution(address[],uint256)", +"f3e4cac4": "_getTokenPrice()", +"f3e5c15e": "screenstate()", +"f3e62640": "buyToken(uint256,address,uint256)", +"f3e664c9": "setSaasApiProfitAddress(address)", +"f3e68264": "getSignerOfBalanceHash(address,uint8,uint256,bytes)", +"f3e71756": "checkTickets()", +"f3e84c4c": "FundingClosed()", +"f3e84cf3": "createNewRevision(bytes32,bytes)", +"f3e94596": "LogReferral(address,address,uint256)", +"f3ea1241": "releaseFirst()", +"f3ea4c68": "set_symbol(string)", +"f3eac094": "defaultAuctionPrice()", +"f3eb2445": "SimpleToken(string,string,uint256,address)", +"f3ec3f4a": "whitelistPreSaleAddressMany(address[],bool)", +"f3ecda21": "ITSM()", +"f3ece9f4": "addBlockList(address)", +"f3ed064a": "bonus01End()", +"f3edf112": "changeHelper(address)", +"f3ee6305": "removeCertificationDocument(address,bytes32)", +"f3eeb84b": "lastBlock_f9Hash_uint256()", +"f3eef981": "_init(uint40,uint40)", +"f3f10da7": "Balance(string,uint256,address)", +"f3f11048": "ethAddressPublicKey(bytes32,int256,bytes32,int256)", +"f3f16a15": "voted(address,bool)", +"f3f18615": "verifyTrustedSender(uint256,address,uint256,uint8,bytes32,bytes32)", +"f3f1b5a7": "CongressOwned()", +"f3f1d909": "redeemCoin(uint256,address,bool)", +"f3f1e4ea": "MenglaToken(address)", +"f3f2e656": "setAttributeSigned(address,uint8,bytes32,bytes32,string,bytes,uint256)", +"f3f2f0bc": "beneficiary2()", +"f3f31853": "getPayTable(uint16)", +"f3f43703": "pendingWithdrawals(address)", +"f3f458f8": "cycleCount_()", +"f3f480d9": "challengePeriod()", +"f3f4aef3": "getUserIDAndInviterEarnings()", +"f3f52865": "getPersonalStakeAmounts(address,address)", +"f3f6f0d7": "lastIndex()", +"f3f70674": "oracle_call(uint256)", +"f3f7650d": "fetchOrdersForMerchant(address)", +"f3f79a97": "setDebtIncreasingFactor(uint256)", +"f3f9240b": "investAs(address)", +"f3f969a0": "setRegisteredAuthority(string,address,bool)", +"f3f9c004": "reffalPool()", +"f3fa1e7b": "bulkApproveTransfers(uint256[])", +"f3fa2c37": "getUpdateHash(uint256,uint256,uint256,uint256)", +"f3fac412": "_calcEndTime(uint256)", +"f3fb9a02": "setInfo(uint256,uint256)", +"f3fbabb5": "setDedicatedProxy(address)", +"f3fbfc60": "SFTSEV()", +"f3fc536d": "revokeConfirmation(bytes32)", +"f3fc7fb2": "Ordient()", +"f3fce3b5": "setC4FContractProviderCompleted(address,bool)", +"f3fd826f": "transferFromTokens(address,address,address[],uint256[])", +"f3fde261": "onTransition(bytes32)", +"f3fe12c9": "claim(string)", +"f3fe5bc2": "totalWitdrowedToken()", +"f3fef3a3": "withdraw(address,uint256)", +"f3ff10bf": "UseQuantity(int32)", +"f4009d99": "changeMainStartTime(uint256)", +"f400a3d7": "finishDate()", +"f400d37b": "yesVoteSum()", +"f400fde4": "amount1()", +"f4010db0": "deleteTile(uint16)", +"f4016ac3": "setInitialState(address)", +"f4016b17": "destroyBPESOToken(address,uint256)", +"f4025568": "approveCertificate(uint256)", +"f4029e92": "getMonsterReturn(uint64)", +"f40314f4": "tokenCurrentStage()", +"f4044697": "xrateProviders()", +"f404d1e2": "transferAndCall(address,uint256,bytes,string)", +"f404df8e": "_getExpectedRate(address,address,uint256)", +"f405311b": "Made(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f405a275": "EventJoinedBattle(address,uint256)", +"f4064471": "messagePreSignedHashing(bytes8,address,address,uint256,uint256,uint256,uint8)", +"f4071928": "mintAuditApproval(address,address,uint256)", +"f407c81d": "tokenNoByAddress(address)", +"f408ebe9": "dev_reset()", +"f409a609": "internalMintToken(uint256)", +"f409ab66": "getDepositedCount()", +"f409e633": "SetENGDevAddress(address,address)", +"f40a049d": "triple(uint256)", +"f40a9112": "whaleIncreaseLimit()", +"f40c0843": "subscribe(address,uint8,bytes32)", +"f40d71f1": "releaseTokens(address,uint256)", +"f40d8d8f": "updateAllowance()", +"f40e0b6e": "coinsToSell()", +"f40e28f2": "createGen0Auction(uint256,uint256,uint256,uint256,address)", +"f40e8d8b": "retryWinner(uint256)", +"f40ea5cb": "setReservePricing(uint256)", +"f40ebcf3": "setBalanceOfValueFor(address,uint256)", +"f40ef739": "preIcoEndsAt()", +"f41017fc": "finalize(uint24)", +"f410a26b": "receive(address,uint8,uint32[])", +"f410aa39": "_issueByPartition(bytes32,address,address,uint256,bytes,bytes)", +"f4116381": "setFiscal(bytes32)", +"f411fb21": "freezeWithdraw(address,uint256,bool)", +"f41293c7": "getIndexForTeamId(uint32,uint32)", +"f412af91": "getOuvidoriaEndpoint(address)", +"f41377ca": "setFoundationAddress(address)", +"f41440d9": "setCreator(address,address)", +"f414cccb": "removeFreezableAddresses(address[])", +"f4156757": "TeamPoolAddress()", +"f415ed14": "slash(bytes32)", +"f4162530": "nodeFee()", +"f4163340": "isFailed()", +"f416d2cb": "emitTokensSince()", +"f417614a": "validateAndReturnContribution()", +"f418b153": "replaceMarketingToken(uint256,uint256,uint128)", +"f418cf4e": "recordSenderIfNecessary()", +"f4199bb8": "initializeWhitelist(address[])", +"f4199fb7": "ayy()", +"f419c69d": "_createPony(uint256,uint256,uint256,uint256,address)", +"f41a12c8": "_takeOwnership(address,uint256)", +"f41b536e": "getRecipientString()", +"f41bc988": "isPartyA(address)", +"f41bfa9e": "mint(int256,uint256,string)", +"f41c1c93": "setAnswerFee(uint256)", +"f41c639e": "sendMsg()", +"f41d0b0c": "getInfluencer(string)", +"f41d1a82": "partner1_name()", +"f41d97fc": "getPriceOfTokenInLastAuction(address)", +"f41db329": "addAuction(uint40,uint40,uint128,uint40)", +"f41dc25f": "totalWeiLose()", +"f41e3494": "hasFailed(uint256)", +"f41e60c5": "enableTransfers(bool)", +"f41e8fc8": "periodAmount()", +"f41f4b10": "retrieveHouseTake()", +"f41fa999": "TTest()", +"f4201c3c": "isVIP(address)", +"f4206706": "withdrawEthers(uint256)", +"f420977d": "noOfTokenAlocatedForSeedRound()", +"f420c5b1": "getCloneWallets(uint8)", +"f420d9d2": "setNumRewardsAvailableForAddress(address,address)", +"f4217648": "setWhitelist(address[])", +"f421e02b": "testCantFinalizeWithIncorrectCap()", +"f42206d1": "HouseEdgeUpdate(uint256)", +"f422878a": "addressIsStakeDiceGameContract(address)", +"f42355a4": "isSaleInitialized()", +"f4239eec": "affiliatePercent()", +"f4246be4": "addToBundle(bytes32,bytes32)", +"f4250f75": "AgriChainPrevData()", +"f42541be": "promoToonsMinted()", +"f42598f0": "get_mintable()", +"f4268e46": "g17token()", +"f426ceee": "award(bytes32,uint256,address,bool,uint256)", +"f426d8ac": "withinHomeLimit(uint256)", +"f426f03a": "setFrequency(uint256)", +"f427211c": "getTime2(address)", +"f4279d1f": "updateEthUSDOracle()", +"f42a2c42": "removeAssetListing(uint256)", +"f42aa287": "getBlobStore(bytes12)", +"f42ac1de": "minQuorum(uint256)", +"f42b1ae0": "unPauseGame()", +"f42b9999": "icoMinInvest()", +"f42c051e": "submitTokenToEthOrderWHint(uint128,uint128,uint32,int256)", +"f42c0f02": "MARKETING_SHARE()", +"f42c56c2": "cbrt(uint256)", +"f42ca2ee": "sub_32(uint32,uint32)", +"f42d1d30": "creditorAmounts(uint256)", +"f42eb765": "getAgreement(bytes32)", +"f42ef9ec": "emitWithrawalRequestEvent(address,address)", +"f42f0c7d": "lengthOfCommonPrefix32(bytes32,bytes)", +"f430511a": "setMaxAddresses(int32)", +"f43098af": "resetTokenOwnership()", +"f4320f00": "getProjectUnusedTokens()", +"f4325417": "App(address,string,uint256,string)", +"f4325d67": "reserveToken()", +"f43313b6": "assertEq31(bytes31,bytes31,bytes32)", +"f433262f": "updateFromRegistry()", +"f4338e89": "getAllTeamCosts()", +"f433e12e": "marketingTokenWallet()", +"f4347267": "getX(bytes)", +"f434e028": "PreICOProxyBuyer(address,uint256,uint256,uint256)", +"f4351908": "InitialRateChange(uint256,uint256)", +"f4351e15": "addAndMintPlayers(uint128[],bool[],uint256,uint256,uint256)", +"f43532ac": "changeWaveVoteContract(address,string)", +"f435d012": "setUnitJadeStealingIncreases(address,address,uint256,uint256,bool)", +"f435f5a7": "lock(address)", +"f436de14": "setAllowanceValue(uint256)", +"f437019c": "stop_service(uint256)", +"f437bc59": "host()", +"f437d6bc": "objectShield()", +"f4381136": "DeferredPresaleTokenPurchase(address,address,uint256,uint256)", +"f4385912": "getPlayerId(uint256)", +"f4385eaf": "KPISToken()", +"f4387d86": "arbitrateApproveMilestone(uint256)", +"f4395dbc": "bitmcoinToken()", +"f4399f2d": "MDIToken()", +"f43a72b0": "setactive(bool)", +"f43abdf3": "getCrowdsaleUserCap()", +"f43acb52": "checkLottery(uint256)", +"f43b1620": "addUserAuto()", +"f43b4808": "viewPassword(uint256)", +"f43b7a76": "AdmineAdvisorTokens()", +"f43bac53": "poolFeeIncurred(uint256)", +"f43e34b2": "unFreezeAll(address)", +"f43e3918": "MELON()", +"f43e98c7": "refunding()", +"f43f523a": "mod(uint256,uint256)", +"f43fd7e0": "_handleTrainingFailure(uint256,uint256,uint256)", +"f4412803": "currentTotalAirDrop()", +"f44191f0": "getAccessoryByIndex(address,uint256)", +"f441b1c8": "currentAmount()", +"f4424cac": "getNumberOfLogEntries()", +"f44349dd": "angelTokenSupply()", +"f44376a2": "preFixed(address,uint256)", +"f443ea83": "MindHacker()", +"f444c136": "createDklAuction(uint256,address,uint16,uint256)", +"f444ea30": "allowBack()", +"f4451628": "buyHSShop(uint256)", +"f44544b3": "fundPos()", +"f4462d04": "periodicity()", +"f44637ba": "addBurner(address)", +"f4463fb7": "emergencySelfDestruct()", +"f44667a6": "tokensAmount(address,address)", +"f446c1d0": "A()", +"f449619e": "collectPrize(uint256)", +"f449958d": "deliverManagementTokens(address)", +"f449c3cb": "_presaleSupply()", +"f449ffe4": "setPresaleRate(uint256)", +"f44a06b9": "endIcoSaleRound1()", +"f44a6ca9": "addProduct(address)", +"f44b43f8": "approveAmount(uint256,address,uint256)", +"f44b54ca": "functionName1(bytes32)", +"f44b79b3": "withdrawalAll()", +"f44bd811": "TRCERC20(uint256,string,string)", +"f44dc562": "_addKey(address,uint256)", +"f44e1351": "setEpisodeManager(address)", +"f44f13d8": "assert2()", +"f44f8be9": "sendNegReq(uint256,uint256,uint256,string)", +"f44ff712": "blockHeight()", +"f450096f": "updateOraclizeGas(uint256,uint256)", +"f4500eb5": "ETHERCFeeModifiers()", +"f4508082": "_price_token()", +"f4509fc2": "LOCKED_1Y_DATE()", +"f450b574": "_mixer()", +"f450cfee": "disablePrivileged()", +"f450d53a": "allFinalised()", +"f450e5f8": "TOKENS_SOLD_LIMIT()", +"f4510455": "STQPreICO2TestHelper(address,address[])", +"f4514ca6": "buySome(uint256,uint256,uint256,uint256,uint256)", +"f4519035": "betOdd()", +"f452b69c": "getCommandTokens()", +"f452f32d": "getByTo(uint256,uint256)", +"f45346dc": "deposit(address,uint256,address)", +"f45392fb": "getReportingWindowByMarketEndTime(uint256,bool)", +"f453c827": "getAddressField3()", +"f4544255": "refer(address,address)", +"f454c32c": "teamReserveTokensDistributed()", +"f4559619": "newOwnerTemp()", +"f4560403": "Zero()", +"f456106d": "ProdCToken()", +"f4572664": "changeMinimumPurchaseAmount(uint256)", +"f457361a": "paidversion()", +"f457547a": "spreadPercent()", +"f457688d": "can_i_jump()", +"f4577298": "EthGet()", +"f457ee5a": "donation(address)", +"f45811bd": "Voyager()", +"f4586cba": "setVestingRevokeDate(address,address,uint256)", +"f4591074": "finishInvite()", +"f45934b6": "cards_gold_total()", +"f45984fd": "TOKEN_UNIT_RATIO()", +"f459ce60": "btycbuy(uint256)", +"f459eb61": "generateKeccak256(bytes)", +"f459f517": "dividendsPoolAddress()", +"f45a729c": "getEtherValue(uint256)", +"f45b106a": "increaseMonthlyTransactionVolumeReceiving(uint256)", +"f45b4fba": "setPersonalBonus(address,uint256,address,uint256)", +"f45b96a0": "financePeriodsCount()", +"f45c85e5": "currentOwnerFeePercent()", +"f45ce8d7": "setAddressKYC(address,bool)", +"f45dae6e": "parseLoanOfferRates(uint256[7],uint32[4])", +"f45e29bb": "hashCoin()", +"f45e8dc4": "buyWarlordChest(uint256)", +"f45eb5b4": "_generateRandomhashNumber(string)", +"f45ef033": "nextReduceSupply()", +"f45efe88": "stage1Bounty()", +"f45f74f8": "VerityToken()", +"f460473e": "fillArray()", +"f460590b": "updateSigner(address,bool)", +"f460c5e4": "listItem(uint256,uint256,uint8)", +"f460e5d0": "setRamenContract(address)", +"f461847c": "DatGirl()", +"f4619e71": "NokuCustomERC20Service(address)", +"f461db0e": "teamAllocatedTime()", +"f461db4a": "getdoc(uint256)", +"f4623d44": "getStorage(address,uint256,uint256,bytes)", +"f4623e0b": "addBalance(address,address,uint256,uint256)", +"f462671e": "isAuthDisabled(uint256,uint256)", +"f46332e0": "test_claimShare_emptyFeeAndRewardPools()", +"f4635674": "countryOwnersOf()", +"f4637003": "transferChildren(address)", +"f463be37": "setSecondAddressBalance(address)", +"f463edd1": "createDocument(uint256)", +"f464e64e": "premiumPacks(uint256)", +"f464e7db": "sellToken(address,uint256)", +"f4656219": "PRICE_RATE_FOURTH()", +"f4660ff5": "timeVault()", +"f4662f71": "canUnshelf(string,address)", +"f466f106": "addHouseHold(uint256,uint256,uint256)", +"f4674b89": "withdrawByAdmin(address,uint256,address)", +"f4686b42": "GxAdminOperations(address)", +"f468e9b3": "inICO()", +"f469707f": "addToGoldList(address)", +"f46b5321": "calculatePoolAmount(uint256)", +"f46b986a": "secondExtendedBonusSalesEnds()", +"f46bbc09": "thirdStageTokenRate()", +"f46c0f29": "compensate(uint256)", +"f46c50dc": "doFail()", +"f46c858a": "addAdvisor(address)", +"f46d1982": "setup(address,uint256)", +"f46d91f4": "TokenBurn(uint256)", +"f46da084": "createName(string,string,string,string,bytes32)", +"f46de44a": "Etherumchain()", +"f46eccc4": "minters(address)", +"f46f16c2": "MARKET()", +"f46ff44f": "dollarToEtherRatio()", +"f4700d3e": "lpMaxVolume()", +"f4703d26": "numbersCountMax()", +"f47073f4": "setTotalIncomeFeePercent(uint256)", +"f470fd5e": "BLU()", +"f47125f5": "StableICO()", +"f471e626": "disapproveByC(uint256,string)", +"f47279d2": "capRemaining()", +"f47289e1": "_ecDouble(uint256,uint256,uint256)", +"f472d615": "enableIco()", +"f472e136": "fraction(int64,int64)", +"f4734818": "_random(uint256,uint256,uint256,uint256,uint256)", +"f4736429": "changeUnicornRanchAddress(address)", +"f473c484": "BatchDetachAssets(uint256[10])", +"f4749624": "dist_list_set(address[],uint256[])", +"f474b6b2": "aboutWorker(address)", +"f4752806": "convert2PeonyToken(uint256)", +"f4757a49": "HighestBidIncreased(address,uint256)", +"f47599db": "WLMTBounce()", +"f4773d26": "AESSignatum(uint256,string,string)", +"f47760ac": "forceGame(uint256,uint256)", +"f47795f3": "CommonTokensale(address,address,address)", +"f477a6b7": "depositEthers()", +"f477c2b9": "setColdWalletAddress(address)", +"f4784b37": "placeCube(uint256,uint256,uint256,uint256,uint256)", +"f478cef1": "leader_2()", +"f47a6e84": "getReleased()", +"f47aa124": "AutoSplitCurator(address)", +"f47b7740": "information()", +"f47c84c5": "MAX_TOKENS()", +"f47cd133": "AMBASSADOR_FOUR()", +"f47ce310": "getRoomCurrentSet(uint256)", +"f47efbca": "getMemberLinks(address)", +"f47f5921": "exerciseOption(address[3],uint256[3])", +"f4807a4d": "downTickTest(address,uint256)", +"f4812eb9": "tokenIdToPrice(uint256)", +"f4814444": "_withdrawBalance()", +"f481d2d0": "BaseFareCalculator()", +"f4833360": "getTeamInfoByID(uint256)", +"f48339e4": "MintingEnded()", +"f4835aea": "postHardRate()", +"f4838452": "loseWager(address,uint256,uint256,bool,uint256)", +"f484e827": "slashSmallUsername(bytes)", +"f48513ed": "setFundOnContract(bool)", +"f4869726": "buyWithSignedAddress(uint128,uint8,bytes32,bytes32)", +"f487404f": "oldOwner()", +"f487c403": "DataStore(string)", +"f487e4b6": "SendERC20ToAsset(address)", +"f4880b22": "transferStatus()", +"f489faf9": "addAddressToBonuslist(address)", +"f48a3f2b": "PlazaToken(uint256,string,string)", +"f48aa044": "upgradeEthCost(uint256)", +"f48b4391": "SBToken(address,address)", +"f48be22b": "initialiseAllocations()", +"f48c157d": "createGame(string,bytes32[])", +"f48c2afa": "PVCCrowdsale(uint256,address,address)", +"f48c3054": "proxyPayment(address)", +"f48c4633": "disableRefunds()", +"f48d11af": "removeFromVIPList(address[])", +"f48d1c5e": "totalDisposed()", +"f48d371c": "create(uint256,uint256,int256,address,address)", +"f48d60ca": "hasOwner(uint256)", +"f48e20f2": "getCreateFeeWindowUniverseValue()", +"f48e5f27": "infoWithdraw1()", +"f48e9c33": "ETPotatoPresale(address,uint256,uint256)", +"f48edf0c": "partner(address,address)", +"f48f378d": "KuyyomToken()", +"f48f3ced": "HFCoin(string,string)", +"f4903ca0": "newContract(string,address[],string,bytes32,uint256)", +"f4914919": "incrementContinuityNumber(uint32)", +"f4915f5f": "BHM()", +"f4916f05": "VoteSvp002(address,uint256,uint256)", +"f49259b7": "UpgradeableToken(address)", +"f49296ae": "WasHere()", +"f4929cc5": "initPair(address)", +"f492a72f": "signUp(address[],uint256[],string)", +"f493c848": "transferMultiply(address[],uint256[])", +"f49501f3": "soldOnCurrentSale()", +"f4954387": "setHalt(bool)", +"f49627be": "Technology4G()", +"f4970e71": "approveWithdrawal(address,uint256)", +"f49727bd": "getSkillEvaluation(address,uint256,uint256,uint256,address)", +"f497463a": "setVariables(uint256,uint256,uint256,uint256)", +"f49808ea": "addEthForPayment()", +"f4993bbd": "executeEmergencyWithdrawal()", +"f499a349": "NewPrefixPrice(uint256,uint256)", +"f49a5504": "permittedInvestors(address)", +"f49a616c": "updateFeePayoutAddress(address,address)", +"f49a66fd": "_pushLandId(uint256,uint256)", +"f49b728e": "setAllResourceERC20Addresses(address)", +"f49b8e10": "BelezaNetwork()", +"f49bb5a8": "numberPlateExist(address,string)", +"f49bbb23": "getUserClientsCount(address)", +"f49bff7b": "getBounty()", +"f49d1d19": "viewSellOffersAtExchangeMacroansy(address,bool)", +"f49dec70": "buyPepeAffiliated(uint256,address)", +"f49e8135": "calculateTokenBuySimple(uint256)", +"f49eee20": "priceFactorB()", +"f49f0974": "proxyList()", +"f49fc563": "SULTANS()", +"f4a011be": "transferWithReserving(address,uint256)", +"f4a05f8f": "_transferAsset(uint256,address,bool)", +"f4a1585b": "setNextCycle()", +"f4a222e9": "icoRaisedETH()", +"f4a32ef8": "bonusTokensSold()", +"f4a43448": "getEstateSize(uint256)", +"f4a475cb": "t_ImmlaTokenDepository()", +"f4a4b8c7": "OfferUnHold(uint256,bytes,bool,address)", +"f4a67395": "showAddresses()", +"f4a6ef99": "logBytes(bytes32)", +"f4a81d08": "getKudosGiven(address)", +"f4a8619a": "prep(address,uint8)", +"f4a8a699": "_mint_with_uri(address,uint256,string)", +"f4a8cbc0": "tokensToWei(uint256,uint256)", +"f4a92020": "rawApprove(address,bytes32)", +"f4a972de": "softEthTransfer(address,uint256)", +"f4a9c919": "startThinking()", +"f4a9df62": "annul(address)", +"f4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", +"f4aa956c": "preIcoIsRunning()", +"f4aac034": "charityFraction()", +"f4ab2928": "isContractPaused()", +"f4ab2b19": "releaseAllOldBalanceOf(address[])", +"f4ab4d1d": "_getPetAura(uint256)", +"f4ab9adf": "addVoter(address)", +"f4ac6560": "batchVipWtihLock(address[],uint256[],bool)", +"f4acc2ed": "setContractAdmin(address,bool)", +"f4accda5": "order(uint256,uint256,address)", +"f4ace1a5": "processContribution(address,uint256)", +"f4ad2212": "EthereumEmerald()", +"f4ad8e37": "listings(uint64)", +"f4ae0d2f": "getTechBonus1(uint256)", +"f4ae2164": "EDToken()", +"f4ae67a1": "setTargetDiscountValue9(uint256)", +"f4af9146": "setDefaultTranche(bytes32[])", +"f4afbdca": "assets_explorer_controller()", +"f4b0ce03": "NewIssue(address,uint256,bytes)", +"f4b103d4": "SimpleStorage(uint256)", +"f4b186a7": "setProfitOwner(address)", +"f4b272db": "licenseAttributes(uint256)", +"f4b28747": "CaptainToken()", +"f4b2dfea": "Matching_Finneys()", +"f4b2f5b6": "maxTokenSupplyICO1()", +"f4b43268": "phrase()", +"f4b432b8": "validUser(string)", +"f4b489e7": "upgraded(address)", +"f4b4d77e": "cutOf(uint256)", +"f4b5cbc4": "setCrowdSale(address)", +"f4b74ae9": "updateBestInvestor(address,uint256)", +"f4b79379": "generalRate()", +"f4b86c48": "isMarketplace()", +"f4b95676": "IsReady()", +"f4b96570": "greet_omar(uint256)", +"f4b97c4c": "insertNode(bytes32,bytes32,bytes32)", +"f4b9fa75": "dai()", +"f4ba89f9": "escrow_fee_numerator()", +"f4bbd5d4": "getDealByNumber(uint256)", +"f4bbfd6a": "scheduleCall(bytes,bytes)", +"f4bd0bcf": "isConditionMet()", +"f4bd0eb2": "getSplit(uint256,uint256,uint256,uint256)", +"f4bd65a7": "_updatePhaseTimes()", +"f4bd9429": "unassignOwner(address,address)", +"f4bead6e": "percentageToToteLiquidatorWallet()", +"f4bebac2": "winner_bids()", +"f4bffad6": "bonusForMainICO()", +"f4c06c8e": "removeConfirm(bytes)", +"f4c140b2": "setArtistFees(uint256)", +"f4c28ea3": "lowerLimitForToday()", +"f4c2ebdd": "createLandAndAuction(address,uint256,address,uint256,uint256)", +"f4c38aa1": "initLending(address,uint256,uint256)", +"f4c3b4d7": "transferable(uint256)", +"f4c3f3f7": "fetchAllDataForCustomer(address)", +"f4c52644": "requestRefundDonator()", +"f4c5ab7c": "validateCallGas(uint256,uint256)", +"f4c679db": "Gidnist(address)", +"f4c6f423": "requestWarranty(string,address,uint256,uint256)", +"f4c7f92c": "newRubesUntilPayout()", +"f4c84d19": "update(string,string)", +"f4c91807": "calculateCurrentPrice_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes)", +"f4c97199": "updateNextGamePotSplit(uint256)", +"f4c99177": "setBlocksPerPayPeriod(uint256)", +"f4c9b1fd": "campaignState()", +"f4caee88": "isParticipating(address)", +"f4cb09cf": "setAmbassadors(address,bool)", +"f4cb290b": "editMemeInfo(uint256,string,string,string,string)", +"f4cb4ae3": "tokenCreationMaxPrivateSale()", +"f4ccbc4f": "getWithdrawals(address,address)", +"f4ce66e0": "extractUint(bytes,uint256,uint256)", +"f4ce7c1c": "purchaseWithEther(uint256)", +"f4ce7d4a": "ChannelContractAddressChanged(address,address)", +"f4cebdc2": "HeroCore()", +"f4cee3b5": "jasontestToken()", +"f4d0b2a5": "RefundInvestorsBallot(address)", +"f4d0b67f": "SetTime(uint256)", +"f4d176e1": "mapMaster()", +"f4d21515": "submitQuery(uint256)", +"f4d218f9": "lastBlockClaimed()", +"f4d22b02": "transferMoreETH(address,uint256)", +"f4d24fea": "setItem(uint8,uint8,uint256)", +"f4d26fec": "upgradable()", +"f4d28ab0": "Update_START_PREICO_TIMESTAMP(uint256)", +"f4d2cac3": "setBonusSale(uint256)", +"f4d3e94f": "weiRaisedInPresale()", +"f4d44b72": "getBoardsCount()", +"f4d48c0d": "channelParticipant(uint64,uint64)", +"f4d56a51": "isIdValid(bytes16)", +"f4d5d6ce": "seriesBSupply()", +"f4d64745": "HgcToken()", +"f4d76b60": "postValidatePurchase(address,uint256)", +"f4d7b725": "GasPrice()", +"f4d87f8a": "WW3Token()", +"f4d92886": "test_shutDownVersion()", +"f4d94699": "EndowmentRetriever()", +"f4d957a5": "test_validProxyFundTransfer()", +"f4da6a54": "AUTHORSIGHASH()", +"f4da834c": "cancelAuctionToBuy(uint256)", +"f4daa98c": "BitcoinFuture()", +"f4dadc61": "locks(uint256)", +"f4dae266": "total_wei_given()", +"f4dafe71": "update_hash(bytes32)", +"f4db9ad1": "bountyOnlineTokens()", +"f4dba182": "take(uint256,uint256[])", +"f4dbeb9d": "getCredRanksByContents(address,uint256[])", +"f4dc2d21": "Deed(uint256)", +"f4dd0fe9": "ico1Max()", +"f4ddca3c": "shortenBonusPreIco(uint256)", +"f4ddff1c": "_teamID()", +"f4de8dfe": "generateUID(uint256,uint256,uint256,uint32)", +"f4def44b": "getStaff(uint256)", +"f4df1fb2": "themedSpinners(uint256)", +"f4df80ee": "subUserTokens(address,uint256)", +"f4e0f412": "exec(address,uint256)", +"f4e1358a": "transfer_enabled()", +"f4e2d68b": "ltcBalance()", +"f4e340ac": "RedFoo()", +"f4e36afd": "findThroneByNameHash(uint256)", +"f4e3be2d": "getSpawnProxy(uint32)", +"f4e42844": "ResetTransferState()", +"f4e50a4d": "getSupportedTokenByIndex(uint256)", +"f4e62c34": "OrigoToken()", +"f4e68486": "weiICOMinimum()", +"f4e6a70d": "addAnimalType(uint128,uint8)", +"f4e6d3f9": "calculateLockedPercentage(uint8)", +"f4e733c3": "lifeTime()", +"f4e75b79": "OwnershipTransferProposed(address,address)", +"f4e76a46": "getBalanace(bytes32,address)", +"f4e83593": "Volunteertimedollartocken()", +"f4e96093": "IntimateShoppe(uint256,uint256,uint256,address,address,address,address,uint256,uint8)", +"f4e9c944": "PRE_ICO_START_TIME()", +"f4ea7263": "Take_share_team_AES()", +"f4ea77f3": "coinPool()", +"f4ea95b9": "validateReleaseVersion(uint32[3])", +"f4eb20da": "SNC()", +"f4eb6889": "description1()", +"f4ebed78": "currentReward(uint64)", +"f4ec186d": "MoonCoin()", +"f4ec593d": "ICOCrowdsale(uint256,uint256,address,address)", +"f4ed0f46": "editionSize()", +"f4ed216c": "removeExchangePartnerTargetAddress(address)", +"f4ed660f": "testIfElse()", +"f4eda76a": "traitIdxToName(uint256)", +"f4eda996": "extractEntry(address[],uint256[])", +"f4edb15b": "narcosByOwner(address)", +"f4ee82ee": "TOKEN_SECOND_DISCOUNT_MULTIPLIER()", +"f4ee9efe": "mintPartOfEmission(address,uint256,uint256)", +"f4eef932": "deptcheckapproval(string)", +"f4efa24c": "getConsensusDetails(address)", +"f4f0b6e5": "investorDate(address)", +"f4f0dafd": "T0XToken()", +"f4f0fc21": "raiseCap(uint256,uint256)", +"f4f22662": "setPersonalBonus(address,uint8)", +"f4f27042": "open(address,address,uint256)", +"f4f3122e": "startSale(uint256,uint256)", +"f4f3b97c": "updateSubjectMatter(uint256,string)", +"f4f3bdc1": "minus(uint256,uint256)", +"f4f3c8a4": "comment()", +"f4f42246": "percentageCut()", +"f4f4d237": "getById(uint256)", +"f4f572ae": "CMO_Signature()", +"f4f59992": "m_analytics()", +"f4f5b30f": "unitTestGetAvailableReward(uint256,uint256)", +"f4f5e1c1": "SHARE_BOUNTY()", +"f4f61563": "setInviteeCount(address,uint256)", +"f4f6d6fe": "weiMinSale()", +"f4f724b3": "getEmployerJobsByStatus(address,address,uint8)", +"f4f7c6c2": "disagreeWithdraw(uint256)", +"f4f864f0": "STARBITToken(address)", +"f4f87730": "create_token(uint256)", +"f4f94a40": "ownerSetRandomGenerateMethod(uint256)", +"f4f96d29": "smartWallet()", +"f4f98ad5": "commit(uint256)", +"f4f996d5": "WandtChain(uint256,string,uint8,string)", +"f4fa6c1d": "blockheight()", +"f4fa8603": "fabricTokenSafe()", +"f4fab748": "end2Timestamp()", +"f4fb6789": "tknfwdToken()", +"f4fb7d4e": "m_nonEtherController()", +"f4fba1bc": "executeProof(bytes32[],uint256)", +"f4fc3570": "disableController(address)", +"f4fc5d13": "RevealBet(string)", +"f4fd326c": "SuperCarbonCoinToken()", +"f4fde3b6": "sendMoneyOwner()", +"f4feccbb": "LogUserUnRegistered(address)", +"f4ff56f4": "ProposalCloned(uint256,uint256,uint256,string,bytes32)", +"f4ff78bf": "changeMaster(address)", +"f4ffa7a9": "getMountTokenIds(uint256,address)", +"f50059b6": "reconcileDividend(address)", +"f500a0a3": "VeritasToken()", +"f5012d4b": "sendOtherTokens(address,uint256)", +"f5015000": "setMaxCharacters(uint16)", +"f5018d1c": "IronHands2()", +"f501af70": "OpenLongevityPresale()", +"f501d8b8": "transferFromICO(address,uint256)", +"f5023de9": "founder2Wallet()", +"f50249fc": "totalSupplyMax()", +"f502cdc0": "distributeNIM(address[],uint256,uint256)", +"f5037b2a": "addressLength(address,address)", +"f503a994": "leaveTeam(uint256,uint256)", +"f5042801": "setAsRefunded(address,uint256,uint256)", +"f504b089": "memberKeys(uint256)", +"f504e0da": "load_level(uint16)", +"f504efa7": "popHatch()", +"f50522ca": "setNote(uint256,bytes32,string,string)", +"f5059560": "makeProject(string,uint256,uint256)", +"f505a299": "getLLV_edit_32()", +"f505a92d": "reserveFor(address,uint256)", +"f505eb6e": "WolkDestroyed(address,uint256)", +"f505f5f7": "quicksort_core(uint256[],uint256,uint256)", +"f506d7e5": "getCompte_31()", +"f506fc54": "acceptValentineRequest(address)", +"f5074f41": "destroyAndSend(address)", +"f5088730": "copy(uint256,uint256,uint256)", +"f509078f": "isForAuction(uint256)", +"f5093ab4": "UpdateState(uint8,uint8)", +"f509b627": "confirm(address,uint224,uint32,address)", +"f509c554": "PIPSCHAIN()", +"f50a2644": "canCompleteContribution(address)", +"f50aac53": "register(address,string,uint8,string)", +"f50ab247": "StopGame()", +"f50ab7b0": "updateCoupleImageIPFShash(bytes)", +"f50acfa0": "transferToParent(address,address,uint256,uint256,bytes)", +"f50b486d": "getTokenIdsIndex(uint256)", +"f50b5308": "PRICE_MULTIPLIER_ICO1()", +"f50b769e": "lastEditionOf(uint256)", +"f50bab3f": "distributeCRTM(address[],uint256,uint256)", +"f50ca46a": "hasICOFinished()", +"f50d3914": "resetFoundationtList()", +"f50e3ac8": "_getAllInterest()", +"f50ebd21": "OHGLuangPrabang()", +"f50ecf0b": "basicIncomeLimit()", +"f50f1ba9": "_getRevisionTimestamp(bytes32,uint256)", +"f50fc02e": "flipsLost()", +"f510371a": "deleteOperation(bytes32)", +"f510c329": "EmitTransactionDetails(address,uint256,uint256,uint256,string,string,string)", +"f510c32b": "setRateWaiForCentPerToken(uint256)", +"f510ccd3": "CancelAuction()", +"f51119db": "checkAuditor()", +"f5112373": "testFloatArray()", +"f5112f87": "welcomeBonus()", +"f512106a": "testStringKeyValue()", +"f5122232": "LogAccess(address,bytes32,address,bytes4,bool)", +"f513a671": "soldItems()", +"f5143b1c": "HNContract()", +"f514e92c": "TARGET_DURATION_BETTING_BLOCK()", +"f514f0f9": "STAGE_THREE_TIME_END()", +"f5156fba": "CECToken(uint256,string,string)", +"f5166eea": "reservedTokensLockedPeriod()", +"f516e9ec": "ethDeltaDepositAddress()", +"f5173120": "TOKEN_FIFTH_PRICE_RATE()", +"f518e66d": "_addStakeholder(address)", +"f5194ae2": "MainToken()", +"f5195b62": "c_dateTo()", +"f5196002": "getBOPCount()", +"f519618f": "addMultipleTier2Members(address[])", +"f51b793a": "get_appuration(uint8)", +"f51c2907": "affiliatThreshold2()", +"f51c755b": "testConcatMemory33Bytes()", +"f51cbc72": "Level()", +"f51d0c6f": "_awardForRecommender(bool,uint256,uint256)", +"f51d1399": "reduceBalance(address,address,uint256)", +"f51d401f": "getStageStartTime(int256)", +"f51d4cb1": "getCurrentVUPRate()", +"f51d61ff": "Thanatos()", +"f51d7d5f": "getTitle(address)", +"f51dcaa7": "AVGONE()", +"f51e181a": "scale()", +"f51f4738": "setCompleted(bool)", +"f51f5e78": "addPlayer(bytes32,bytes32,bytes6)", +"f51f96dd": "salePrice()", +"f51fb6a1": "leftInTier()", +"f5207c31": "businessPlannedPeriodDuration()", +"f5218ec2": "increaseRepAvailableForExtraBondPayouts(uint256)", +"f522ec0e": "_refundTokens(address)", +"f52343f4": "flipExecutionSwitchTo(bool)", +"f5235a46": "withdrawFoundersTeamAndAdvisors()", +"f5238546": "stopInvest()", +"f5238660": "totalMarketingFundMinted()", +"f524613f": "freeze(address,uint256,uint8)", +"f5251269": "ETHDividends()", +"f5254af8": "startPriceForHLPMT()", +"f5258aee": "ContractAdded(address,uint256)", +"f525cb68": "poolCount()", +"f525dcf1": "setLockFund(address,uint256)", +"f52706c9": "setMinResalePercentage(uint256)", +"f527c856": "TOKENS_PER_KETHER()", +"f527dd6c": "_emitSkillSet(uint256,uint256,uint256,bytes32)", +"f5292748": "_stakeContent(address,bytes32,uint256,uint256,bytes8,uint256,uint256)", +"f5298aca": "burn(address,uint256,uint256)", +"f529d448": "changeBalance(address,uint256)", +"f52a41f3": "mintOWL(address,uint256)", +"f52ad690": "badgeUnFreeze()", +"f52ae24b": "transmute(address,uint256)", +"f52b8d1f": "tokenReserved1Deposit()", +"f52bbc2d": "withdraw(address,address,uint256,uint256,address)", +"f52bd7cb": "addSwap(bytes5,bytes5,bytes32,bytes32,bytes12,bytes32,bytes32,bytes12)", +"f52c456f": "_createClown(uint256,uint256,uint256,uint256,address)", +"f52f2526": "exerciseOption(uint256)", +"f52f77b2": "createEntity(address,address)", +"f52fa89b": "evolveGeneration(uint16)", +"f52ff1da": "SDT(address)", +"f530259e": "isBlacklistDestroyer(address)", +"f5308c7d": "removeTransferLock()", +"f5318389": "setEmbassyCtrl(address)", +"f531aff2": "THINK_TANK_FUND_TOKENS()", +"f531cc63": "LogCreateEVN(address,uint256)", +"f531dbbf": "TOKEN_SWAP_DURATION_HOURS()", +"f5323da4": "phase_5_bonus()", +"f532e888": "getBookForUser(uint256)", +"f5336737": "BFTcoin()", +"f5341b4e": "UserTipped(address,bytes32,uint256,bytes32,bool)", +"f5343752": "exchangeEnabled()", +"f534b022": "burnleftToken()", +"f534d187": "girlBasicToken()", +"f5357102": "tohash(address,address,uint256)", +"f536c61a": "deleteAllChildren()", +"f5370884": "WithdrawalVotedEvent(uint256,address,uint256,uint256)", +"f5376e49": "TestingToken(uint256)", +"f53773dc": "withdrawBattleValue(uint256)", +"f5383f3a": "getFoundationStatus(address)", +"f5385345": "acceptOwnershipOffer()", +"f5397b5d": "initiate(bytes32,address,address,bytes32,uint256,uint256)", +"f53995ff": "setIncludeAuctions(bool)", +"f53a93f8": "MyFinalizableCrowdsale(address)", +"f53b0b3a": "_regularDonationsTotal()", +"f53b396b": "SimpleTokenCoin()", +"f53b8ded": "mintPreSaleTokens(address[],uint256[],uint256[])", +"f53bc835": "setMaxBuy(uint256)", +"f53bde25": "RATE_PRIVATE()", +"f53c5c87": "setTileContract(uint16,uint16,uint8,address)", +"f53d0a8e": "administrator()", +"f53d9d58": "AddLiquidity(uint256)", +"f53da97e": "currentSalePhase()", +"f53f43d9": "setcapname(string)", +"f53fb0cb": "isCollectionAllowedAt(bytes8,bytes8,uint256)", +"f53fbaf6": "send_ETH_from_contract(address)", +"f53fd201": "_modifyPixelColor(uint24,uint32,address)", +"f54011f5": "blockExternalTransfer()", +"f54095a7": "standart()", +"f5414023": "claimReward(bytes32)", +"f5419108": "view46()", +"f541c812": "releaseReward(address,uint256)", +"f543d3c6": "Stockfinex(uint256,string,uint8,string)", +"f544cf4f": "decayedPriceOfCard(uint256)", +"f545118b": "subdividendsOf(address)", +"f54575d6": "addAdvisor(address,uint256)", +"f54580cc": "card_blue_minamount()", +"f5459d6b": "INVESTOR1()", +"f5462105": "isFundedMax()", +"f546232d": "ComputeMyEggs(address)", +"f5465992": "totalTokenBalance(address)", +"f5470d7b": "itemType()", +"f5486860": "nextPrizeTime()", +"f548a578": "removeBurnupGame(address)", +"f549dd0e": "Vitamin()", +"f54a2ddc": "setRefundable(address,uint256)", +"f54b384d": "withdrawBuildingTokens(address)", +"f54cc2d0": "mintTokensForServices()", +"f54d28ae": "OPSPoolAddress()", +"f54d41db": "updateInventories(uint256,uint256[],uint16)", +"f54da8ee": "addWasteType(string)", +"f54dbf4c": "Emission(address,uint256)", +"f54dd191": "Flag()", +"f54dd974": "setResourceERC20Address(uint16,address)", +"f54e3977": "BTML()", +"f54e7a40": "offlineTransaction(address,uint256)", +"f550cb45": "rank(address,uint256)", +"f551924c": "testpidgeon()", +"f5519e8d": "WanChainToken()", +"f55206a5": "validatePurchase(address)", +"f5521bf1": "loanDuration()", +"f5529d3f": "ESIT()", +"f552b2ba": "threads(uint256)", +"f552d91b": "tokenToTokenTransferInput(uint256,uint256,uint256,uint256,address,address)", +"f5537ede": "transferToken(address,address,uint256)", +"f5539407": "getInvestorInforAddr(uint16)", +"f554567f": "getTeller(address)", +"f554e8cc": "officialHold()", +"f554e934": "TOKEN_COMPANY_OWNED()", +"f55523e7": "fiat_contract()", +"f5552b42": "wotDay(uint256)", +"f5556d78": "Vegas()", +"f555b815": "rate2()", +"f5562753": "getClaimAmountForBlock(uint256)", +"f5582870": "CENTS()", +"f559417c": "finalizebackup()", +"f559468c": "initiallyLockedAmount(address)", +"f5596659": "HoloWhitelist()", +"f5597e21": "addProperty(string,string,uint64,uint64,uint64)", +"f55ab987": "penalizeInactiveJuror(address,uint256,uint256[])", +"f55b23c0": "externalLeave()", +"f55b39a3": "PetCore()", +"f55b8fc9": "setraisedAmount(uint256)", +"f55bddcc": "NFTAuctionBase()", +"f55befee": "TOURNAMENT_TOKENS_PERCENT()", +"f55c9f60": "developerReserve()", +"f55ecf06": "setExchangeRate(uint256,uint256)", +"f55f41f9": "Version(string,address,address,address,address,address)", +"f560783d": "getLastProfit()", +"f560aa57": "setTokenPrices(uint256[],uint256[])", +"f560d415": "privateSalePrice()", +"f5610668": "currNumOfCards()", +"f56142b3": "burnPrivate(uint256,uint256,uint256)", +"f561e2f9": "refundTransactionFee(uint256)", +"f5620ed6": "addItemTo(address,uint256,uint256,uint256,string)", +"f562db76": "wct1()", +"f56311d7": "getMntpMigration(uint256)", +"f5632ab4": "receivedEth()", +"f563424e": "fetchBilateral(address,bytes32)", +"f564ae65": "getRemainingCount(uint32)", +"f564bb8c": "getNodeIdx(string)", +"f564dca9": "setUrls(string,string)", +"f564ea7e": "get_bank_data(address)", +"f5653a79": "_presentValue(uint256)", +"f56585de": "transferOtherTokens(address)", +"f56589d5": "PupToken()", +"f56613e4": "lockBetInfo()", +"f5663819": "minContributionETH()", +"f566c1b5": "_normalizeDecimals(uint256,uint256)", +"f5672f92": "garbageCollect()", +"f567a72a": "listMultipleItems(uint256[],uint256[],uint256,address)", +"f568006f": "generateBalanceHash(address,uint8,uint256)", +"f5681f9d": "Deposited(address,address,uint256,uint256)", +"f5685061": "startPreICOnow()", +"f56898fe": "getCompte_40()", +"f5689a80": "TOKEN_CREATED_MIN()", +"f5691b07": "_bidDkl(uint256,uint256)", +"f569626d": "sanTTTCost()", +"f569a2fc": "withdraw1(address)", +"f56a5176": "getMostRecentAuctionStart()", +"f56b8a46": "TEAM_BONUS_PERCENT()", +"f56c66b1": "parseInt128(string)", +"f56d7abe": "PaceCoin()", +"f56e0609": "WorldCup(bytes32,bytes32,bytes32)", +"f56e4cb1": "blockTokens()", +"f56e8421": "currentSquirrelOwner()", +"f56eba15": "SGEToken()", +"f56f516f": "isValid(bytes32[])", +"f5710cc5": "setInitialBalance(uint256)", +"f5716958": "updateSplits(uint256,uint256,uint256,uint256)", +"f571da7f": "confirmAssessor()", +"f5720769": "setDrawer(address)", +"f57213d8": "subsafe(uint256,uint256)", +"f57271cd": "LogEnded(bool)", +"f5727f5c": "chainLedger()", +"f572ae2e": "toggleInPlayJoining()", +"f573864f": "PrandexBountyToken()", +"f5738bcd": "setInstructions(string)", +"f5743c4c": "incrementNonce(address)", +"f574c691": "KCoinToken()", +"f5751524": "unfixTokenPriceInWei()", +"f575c810": "finishPrivateSaleAndStartPreSale(address,uint256,uint256,uint256)", +"f57688b6": "communityVesting4Years()", +"f576f722": "getCurrentTierInfo()", +"f577990d": "passoverEndTime()", +"f577a5d0": "publicTokens()", +"f578fd7c": "applyForToken()", +"f578fd85": "assertEq0(bytes,bytes)", +"f57a1ccc": "f4(uint256,uint256)", +"f57ac2df": "World2()", +"f57ad503": "resetRole(address)", +"f57ad6ea": "deposit_token(uint256)", +"f57ae7b9": "buildId2(address,address,address,uint256,bytes)", +"f57be85d": "ownerActivateToken()", +"f57d74d8": "blaze()", +"f57d76d5": "RestrictedShares(string,string,uint256,uint256)", +"f57db6e1": "signLoan(address)", +"f57e2368": "bonusAvailable()", +"f57e63e2": "eventEnded()", +"f57ee77b": "getRoundId()", +"f57fc26a": "lccxTeamTokensVesting()", +"f5804c35": "test_someTest()", +"f5811447": "createAuction()", +"f5812687": "distributeTokenFunds(address,address,uint256)", +"f5813085": "getTotalTokensByAddress(address)", +"f5818d94": "EtherModifierPandee()", +"f581ec95": "FIRST_VOLUME_EXTRA_BONUS()", +"f581f1ef": "setPicopsCertifier(address)", +"f5820ac6": "unPauseAllTransactions()", +"f5823b0b": "parseOrder(bytes,address,address)", +"f582d293": "buyEnabled()", +"f582fe70": "PundiXToken()", +"f58339c1": "_generateGuardianSale(uint256,uint256,uint256,uint256,uint256)", +"f5836761": "DGBLY()", +"f58431fd": "Citizen(address)", +"f584bf09": "Softcap()", +"f58589ff": "setAirdrop(uint256,uint256,uint256,uint256,uint256)", +"f58590e9": "ReturnChametz(address,uint256,uint256)", +"f5866066": "setStringValue(bytes32,string)", +"f5868e49": "Administrable(address)", +"f586c6d9": "getPoolAddress()", +"f586df65": "checkMembership(bytes32,bytes32,uint64,bytes)", +"f5877bdb": "maintaining()", +"f5878d40": "maxSCount()", +"f587c53f": "_generateGene(uint64,uint64,uint256,uint256)", +"f58951d1": "approve_reject_deleteCertificate(uint256)", +"f589cbbe": "addPick(uint256)", +"f58a1adb": "setup(uint256,uint256,uint256,address,uint256,uint256,bytes,address,address)", +"f58a535f": "phasePublicSale2_From()", +"f58adfe5": "CharityReservesSupply()", +"f58b4554": "userPayout()", +"f58bb0c9": "dealInitialCards()", +"f58c251c": "sentinel()", +"f58d3321": "usersCanUnFreeze(bool)", +"f58e2327": "foundationTokenHolder()", +"f58edbca": "ISBParentsCoin()", +"f58fc2f2": "LimorToken()", +"f58fef8e": "Destroy()", +"f590aacc": "preBuy()", +"f5923a6e": "withdrawEth(address,address,uint256)", +"f5933f66": "changeFlagArraySize(uint256)", +"f5938baf": "getRemainingBlocks()", +"f593efec": "briqcoin()", +"f594ba7b": "assignManagement(address)", +"f594f13f": "votedFor(address)", +"f595f1cc": "pendingFees(address,uint256)", +"f5963aa5": "isJson(string)", +"f5965d55": "windowOf(uint256)", +"f5967a2f": "holdPeriod()", +"f596d10a": "parseSignature(bytes)", +"f597a499": "UserDatabase(uint256)", +"f597d097": "streamerContractMaxAmount()", +"f597f97d": "fractionalBits(int256)", +"f59823cf": "Congress(uint256,uint256,int256)", +"f598e201": "finishDividend()", +"f5991a05": "sellCoins()", +"f59ae82c": "getTokenPurchase(address)", +"f59da238": "MBDCToken(uint256,string,string,uint8)", +"f59db647": "precommitmentAdjusted()", +"f59dfdfb": "feed(uint256)", +"f59e0894": "sendSecond(address,uint256)", +"f59e38b7": "balanceOfToken(address,address)", +"f59e754c": "setAuctionFee(uint256)", +"f59ed863": "privateSaleDate()", +"f59f5e65": "createWheelBetHash(uint256,uint256,uint256)", +"f59f99ee": "createNextGeneration()", +"f59faf9e": "GrainToken()", +"f5a0ea6c": "createMatch(uint256,uint256)", +"f5a1c96d": "nextFeesPerMillion()", +"f5a1f5b4": "setNewOwner(address)", +"f5a23083": "listMOT()", +"f5a23af0": "myColorIs()", +"f5a2d3c7": "DomainSale(address)", +"f5a30cee": "individualMaxCap()", +"f5a332f6": "endICO(uint256)", +"f5a486f3": "issueResolved(bytes32,string)", +"f5a5438e": "dist_airdrop(address,uint256)", +"f5a647aa": "sendTokensToSevenAddresses(address,address,address,address,address,address,address,uint256)", +"f5a79767": "getAmount(address)", +"f5a7ffeb": "dontPanic()", +"f5a8ea09": "viewClaimedThisPool()", +"f5a908f0": "getOraclePrice(string)", +"f5a91ef7": "getEmailAddressOwner(string)", +"f5a956d8": "swap(uint256[],uint256,uint256)", +"f5a98558": "restrictionRemoved()", +"f5a9e21f": "canUpdateCompanyPreferences(string,address)", +"f5aa0200": "makeClaim()", +"f5aa19b7": "reclaimUnclaimed()", +"f5aab219": "currentIcoRate()", +"f5ab16cc": "rewardTokens(address)", +"f5ab4c62": "participationEndTimestamp()", +"f5ab69c8": "thirdPlacePot()", +"f5ab865a": "tokensAirdrop()", +"f5ac0b6b": "BasketFactory(address,address,uint256)", +"f5ac481d": "leaveTeam(uint256,address,uint256,uint256)", +"f5ac6319": "_raised()", +"f5ac9db6": "tradeable()", +"f5ad9034": "TokenTranchePricing(uint256[])", +"f5adad57": "BdpControllerHelper(bytes8)", +"f5aec88c": "getUserTokenBalance(address)", +"f5af374b": "withdrawEth(address,uint256[],uint256[])", +"f5af4035": "sellTokensForEth(address,uint256)", +"f5af6289": "EAI_TokenERC20(uint256,string,string)", +"f5af6621": "getEscapeRequest(uint32)", +"f5af6de6": "firstStageEnd()", +"f5affc60": "claimHash(bytes32)", +"f5b01fd7": "TruCrowdSale(uint256,uint256,address,address,uint256,uint256)", +"f5b0f72d": "Ethername()", +"f5b12540": "STATE_NOT_STARTED()", +"f5b33d0a": "MicroDex()", +"f5b3beba": "OverAllPerSell()", +"f5b41aaa": "set_iconiq_token_amount(address,uint256)", +"f5b45714": "currentKing()", +"f5b490d5": "roundLockAmount()", +"f5b4f3c1": "WFC(string,string,uint8,uint256)", +"f5b53e17": "getInt256()", +"f5b53fc1": "checkMonsterAttack(uint16,uint8,uint8)", +"f5b56c56": "highestBindingBid()", +"f5b57a8d": "transferFeeDenum()", +"f5b5af16": "closePlayerGame(bytes32)", +"f5b5bfb9": "provideDividend(uint256)", +"f5b61230": "escapeHatchDestination()", +"f5b85ad8": "RoundToken()", +"f5b944eb": "ROLE_MANAGER()", +"f5b9644c": "PRE_ICO_RATE()", +"f5babff2": "convertBytesToBytes32(bytes)", +"f5bade66": "setDeposit(uint256)", +"f5bae6b6": "equal(int256,int256,string)", +"f5bb02b2": "ICODepositContract()", +"f5bb5aac": "TokenStore(uint256,address)", +"f5bbc6d5": "isArbiter(address)", +"f5bd48c4": "totalLotsByAddress(address)", +"f5bd4931": "transferFlower(address,uint256)", +"f5bd8f5f": "_isTrue(address)", +"f5bdeca1": "SetGasLimit(uint256)", +"f5be3193": "totalIssued()", +"f5bea782": "userWithdrawPendingTransactions()", +"f5bee4e6": "priceTokenToCoin()", +"f5bf6d63": "totalIssuerSupply()", +"f5bf7413": "close(address,address,uint256)", +"f5bf7e3d": "registerDINs(address,uint256)", +"f5c15237": "isPlatformManager(address)", +"f5c217da": "lastSaleTimestamp()", +"f5c233f1": "transferAndLock(address,uint256,uint256,uint256)", +"f5c256ca": "sendPrepaidERC20Tweet(uint256,string,string,uint256)", +"f5c3f206": "setApprovers(string,string,address[])", +"f5c4201f": "denyTransfer(address)", +"f5c454ca": "ProjectDescriptionUpdated(address,string,bytes32)", +"f5c476f9": "totalLockedTokens()", +"f5c4ceda": "SimpleConstructorArray(uint256[3],uint256[3])", +"f5c57382": "nameOf(address)", +"f5c5906e": "setBlockRoot(uint256,uint256,bytes32)", +"f5c5ad83": "decrementCounter()", +"f5c60309": "YuChainToken()", +"f5c6ca08": "sendTokens(uint256)", +"f5c6cd0a": "GlobexSciICO()", +"f5c6cf05": "changeTokenForSale(uint256)", +"f5c758c4": "getKycApproved(uint256)", +"f5c86d2a": "ledgerTransfer(address,address,uint256)", +"f5c87d20": "setAdminPayout(uint8)", +"f5c89f83": "StartMiningByIdArray(uint256[])", +"f5c8d71b": "forceMove(address,address,uint256)", +"f5c901db": "ck()", +"f5c91f5a": "init(address,uint256,uint256,uint256,uint256,uint256)", +"f5c972ac": "setUserInfo(address,uint256,uint256)", +"f5c98aff": "GreeterB(bytes)", +"f5c99ae9": "createToken(string,string,uint256,uint256,uint256,uint256)", +"f5c9d5f1": "refundPart(address)", +"f5ca6cd4": "TOKEN_SALE_ALLOCATION()", +"f5caccad": "gatherCollateral()", +"f5cb0daa": "queryWaitingTimeBuffer()", +"f5cb3dff": "getAddressFromData(bytes)", +"f5cb911d": "divideByNumber(uint256)", +"f5cbf6cc": "construtor(uint256)", +"f5cc4056": "BSMinting()", +"f5cce54d": "preSaleCoinCap()", +"f5ce0d5b": "onRemoval(string,uint256)", +"f5cf673b": "setClaimer(address,address)", +"f5d00ccf": "NewPatent(bytes32)", +"f5d05f7e": "foundationVestedPayment()", +"f5d09857": "createDungeon(uint256,uint256,uint256,uint256,uint256,address)", +"f5d09ff7": "bancorETHToken()", +"f5d17f10": "get_term_deposit_end_date()", +"f5d1d299": "setProviderTitle(bytes32)", +"f5d241d3": "update(uint80,address,uint32,uint32,uint32,uint256)", +"f5d36a57": "quorumVersion()", +"f5d3c79a": "setReinvest(bool)", +"f5d50f86": "balanceAsSupporter()", +"f5d5edc4": "deployService(bytes32,address)", +"f5d60a51": "accessPolicy()", +"f5d60acd": "EtherTakeAfterSoftcap()", +"f5d67a20": "currentCrowdsale()", +"f5d6fa14": "whichPrice(uint256)", +"f5d72a28": "setTakeRewardsPeriod(uint256)", +"f5d73261": "transferAnyTokens(address,uint256)", +"f5d78625": "getPersonalInfo(address)", +"f5d82b6b": "add(address,uint256)", +"f5d9356e": "newKrakenPriceTicker(string)", +"f5d97789": "changeBinaryAddress(address)", +"f5d9d3fd": "formated_data_url()", +"f5da16e9": "RECHToken()", +"f5da210c": "getClientData(address)", +"f5dabc58": "transferDistributePxl(address,uint256,bool,string)", +"f5db370f": "setSanityRates(address[],uint256[])", +"f5db8bc7": "depositedETH(address)", +"f5db9820": "firstTarget()", +"f5dd7650": "_computeTournamentBeneficiaryFee(uint256)", +"f5ddff92": "getReputationUpdateLogEntry(uint256)", +"f5df1d10": "getCollectibleTypeBalance(address,uint256,uint256)", +"f5df1f1d": "PresalePool(uint256,uint256,uint256,address[])", +"f5df6618": "newUser(string,string,string)", +"f5e1713e": "sale_state()", +"f5e27f5f": "emperor()", +"f5e3394f": "getUnicornGenByte(uint256,uint256,bytes1)", +"f5e33a9d": "createPot(string)", +"f5e3542b": "lookup()", +"f5e37d57": "_doTradeForEth(address,uint256,address,uint256)", +"f5e47f96": "getTicketsByAddress(address)", +"f5e493aa": "getCrowdsaleTierList(address,bytes32)", +"f5e53f2b": "register(bytes7)", +"f5e736ed": "tacoPoolTotal()", +"f5e7b8e3": "setScoringThreshold(uint256)", +"f5e7ce99": "canPerform(address,address,bytes4)", +"f5e7ef7a": "getCountCities()", +"f5e82554": "executeFill(address,address[5],uint256[8],uint256,uint8,bytes32,bytes32)", +"f5e8e8a9": "NASRToken()", +"f5e998f7": "FuckCoin()", +"f5ea15d3": "setContracts(address[16])", +"f5ea25f0": "setTokenAcceptanceRate(address,uint256)", +"f5eacece": "create2()", +"f5eb2313": "UrlHint()", +"f5eb42d1": "ExecLog(address,bytes32,uint256,bytes32,bytes32,uint256)", +"f5eb8890": "balanceUser(address)", +"f5ec2eed": "companyName()", +"f5ec8685": "claimAfter45days()", +"f5ece00a": "cryptoChallenge()", +"f5edc92f": "subwooferUSBToken()", +"f5ee3348": "setLive(bool)", +"f5eeaea3": "openChannel(address,uint256,uint8)", +"f5eed98d": "publisherCount()", +"f5ef98ea": "setDeathBlock(uint256)", +"f5efbd2d": "addModule(address,bytes,uint256,uint256)", +"f5f06acc": "airDropTokens()", +"f5f0f1e9": "firstBuyPrice()", +"f5f23b52": "makeTradable(uint8)", +"f5f2669b": "isAddressNotEmpty(address)", +"f5f2b62f": "nextSale()", +"f5f2de34": "ethReceived()", +"f5f3e58f": "preSale1()", +"f5f4123f": "_createAvatar(address,string,uint256)", +"f5f56b7a": "seasonRefAccounts(uint16)", +"f5f5ba72": "getContractName()", +"f5f5bb3b": "hashBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", +"f5f5c622": "setDErc20(bytes32,address)", +"f5f5f123": "changeMaximumContributionForPublicPhase(uint256)", +"f5f6ea26": "EthOne()", +"f5f83a61": "transferManyLandToEstate(int256[],int256[],uint256)", +"f5fb17f2": "offerPieceForSaleByAddress(address,uint256)", +"f5fb1b74": "buyname(string)", +"f5fb22ca": "claimMobsterFunds()", +"f5fb9137": "donate_step()", +"f5fc20c6": "canUse(uint256)", +"f5fc32c8": "getAllot(bytes32,uint8)", +"f5fc3d47": "giftToken(address,address,uint256)", +"f5fc58c4": "totalLosts()", +"f5fd118e": "coordinatorSetAgreeForEmission(uint256)", +"f5fd1936": "countZTKChecks()", +"f5fd2108": "ethToBeDistributedSet()", +"f5fd9343": "Reco()", +"f5fda5da": "test_35_assertGasUsage1400Boards()", +"f5fda8cd": "testPublic()", +"f5ff3dc7": "setOraclizeWinnerTimeOffset(uint8)", +"f5ff5c76": "agent()", +"f5ff8977": "renameArtwork(uint256,string)", +"f60203c6": "createUser(uint256,uint64,uint64)", +"f602467e": "FundWithdrawal(address,uint256,bool)", +"f602c312": "erc20Store()", +"f602e325": "reserveAdress()", +"f6030aeb": "mint(address,uint256,int256)", +"f60381a1": "stra2cbor(string[])", +"f603fa92": "toggleAttachedEnforement(bool)", +"f60436cd": "reduceTime()", +"f604498a": "getClientSupply(address,uint256,uint256)", +"f604620a": "getTicketsAtAdress(address)", +"f604e6a6": "withdrawXNK(address)", +"f6054027": "IFLTSidechain()", +"f605ef93": "LongBought(address[2],uint256[5],uint8,bytes32[3],uint256)", +"f606b648": "transferTokensFromSpecialAddress(address,address,uint256)", +"f60744d5": "verifySignature(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"f607e88a": "_tokenPurchase()", +"f6089e12": "melt(uint256[],uint256[])", +"f60957c0": "HowLongIsDisputeStillRunning(uint256)", +"f609a1a1": "extraMintArray(address[])", +"f609bad6": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", +"f609bf42": "getSecondsTimeLocked(bytes4)", +"f60a696d": "migrateUsers(address[10])", +"f60b0714": "EscrowContract(address,address,uint256,uint256)", +"f60b9406": "vestingStartUnixTimestamp()", +"f60ba338": "setOpenTime(uint256)", +"f60bb720": "receiveFees()", +"f60ca60d": "project()", +"f60ca6b6": "distory()", +"f60cdcf6": "totalPlayers()", +"f60daa71": "dutchAuctionToCraft()", +"f60e28f7": "checkUserAndInitIfNecessary(address,address)", +"f60edb0e": "proposedController()", +"f60f1ccb": "useregister(address,string)", +"f60f49bb": "PayToken()", +"f6105254": "CryptoSagaArenaVer1(address,address,address,address,address,address,uint32,uint256,uint32,uint256,bool)", +"f610e52a": "acceptInvite(bytes)", +"f612a62d": "getSaleContractIsFinalised(address)", +"f613f7a0": "mintUsingSignature(uint256,uint8,bytes32,bytes32)", +"f6142990": "altDeposited(address)", +"f614fd72": "assertEq24(bytes24,bytes24)", +"f6150d17": "payedAmount()", +"f6151ff6": "transferTokenTo()", +"f6153ccd": "totalDeposit()", +"f615e369": "selectDeliverer(uint256)", +"f615ed54": "subSeconds(uint256,uint256)", +"f616b7b7": "report(string)", +"f616ce3c": "candy()", +"f616f29f": "transferEthFeeAndRefund(uint256,uint256,uint256,address)", +"f6174b90": "transferCheques(address,address,uint256,uint256)", +"f617642b": "getlevellen(uint256)", +"f617a0e9": "BoSenCoin_Test(uint256,string,uint8,string)", +"f6187006": "crowdSaleIsRunning()", +"f618c39f": "PartiallyForgived(address,address,uint256)", +"f619304a": "getSellOrdersBlackMarket()", +"f61a3e2b": "roundWithdraw(uint256)", +"f61a7f6f": "fixSaleCompleted()", +"f61ac3a4": "checkForReceivedTokens()", +"f61adfdd": "UnitedfansToken(address)", +"f61b7483": "M5Logic()", +"f61b9aed": "transferFrom(address,address,uint256,bool,uint256)", +"f61c266b": "getExpiry()", +"f61c6c4b": "LobsterFarm()", +"f61ca773": "transferWithPurpose(address,uint256,bytes)", +"f61ca87a": "setUserValue(bytes20,uint256,uint256)", +"f61cd7de": "callerTokenAmountAtBlock(uint256)", +"f61d9afc": "Errors()", +"f61eab7a": "getExtension(uint256)", +"f61ed985": "Kill(uint256)", +"f61f019d": "GitBitToken()", +"f61f35dd": "FOG()", +"f61f54c2": "SendEtherToFund(uint256)", +"f61ff377": "AccountFilledWithBonus(address,uint256,int256)", +"f6205042": "storeClaimSeed()", +"f622a105": "createDApp(bytes32,uint32)", +"f622cc82": "declareWinningOutcome(uint8)", +"f6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", +"f6233016": "DomenoToken()", +"f623d7a7": "TrustlessTransactions_Log(uint256)", +"f625ca7d": "lengthOf_addressAndDataPattern_to_voteRulesHash(address,address)", +"f625ee28": "startMasterCopyCountdown(address)", +"f625f472": "MultiownedControlled(address[],uint256,address)", +"f6261a0f": "_isValidWithdrawLimits(uint256,uint256,uint256)", +"f62732b8": "index(address,address[])", +"f627fe6c": "returnSomething()", +"f6281a9b": "getTierWhitelist(uint256)", +"f62847f4": "TerrionFund()", +"f6288422": "commission_system()", +"f628e8e8": "startDonations()", +"f62a92fa": "testRevertTx()", +"f62bc2dc": "ICTA()", +"f62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", +"f62cec27": "setStartPreICO(uint256)", +"f62de0c3": "weiPerUSD()", +"f62e037c": "BETTING_CLOSES()", +"f62eded9": "buyStar(uint256,uint256)", +"f62ee1af": "burnFrom(address,uint32)", +"f62eec09": "rejectLastDeliverable(bytes32)", +"f62f47ab": "UDF_PORTION()", +"f62f9dbb": "tokenRatios(uint256)", +"f63051ff": "FXTOKEN(address,uint256)", +"f630a468": "setAtomIsRent(uint256,uint128)", +"f630e0f5": "submitTransaction(address,uint256,bytes,bytes,bytes,uint256)", +"f6310813": "transferDoc(uint256,address,address)", +"f631345b": "setlargeBonusStopTime(uint256)", +"f6326fb3": "depositETH()", +"f633adc1": "getRegister(int256,string)", +"f6340be4": "updateProvision(address,uint32,uint256,uint256)", +"f634bd29": "sec_addr()", +"f635052f": "colorPrice()", +"f635d160": "setPOOL_edit_20(string)", +"f635f50c": "minedTokenStartTime()", +"f6360d37": "requestDiploma(uint256)", +"f6366b9f": "OwnerTokensAllocated(uint256)", +"f6368f8a": "transfer(address,uint256,bytes,string)", +"f636931e": "PineapplePoints()", +"f6373296": "applySettings(uint256,uint256,uint256,uint256)", +"f637b7da": "collectedWei()", +"f637d950": "getAssetInfo(uint256)", +"f63841e4": "featurePrice()", +"f6384cb8": "sendReferallFundBalance(address,uint256)", +"f63850d0": "GanaTokenPublicSale(address,address,address,uint256,uint256)", +"f639365d": "testSetGet()", +"f63a43c0": "TokensPurchased(address,uint16,uint256,uint256,uint256,uint256,uint256)", +"f63a5d22": "divideDecimalRoundPrecise(uint256,uint256)", +"f63b1f7c": "GoldenLightCoin(uint256,string,uint8,string)", +"f63c2659": "PriceCalculator(uint256)", +"f63c533c": "Cost()", +"f63c5532": "incrementStat(uint256,uint256)", +"f63cb8a3": "requireTokenFuel(address[])", +"f63da25b": "Emailer()", +"f63df2e9": "createStandardToken(address,uint256)", +"f63ef744": "sendCharityETH(bytes)", +"f63f0e62": "turnOffCanUpdateNextGameInitalMinBetSize()", +"f640b81e": "test_oneInvalidEqBytes32Message()", +"f640d508": "transferToken(address,uint256,address)", +"f6413e46": "getFaucetAmountValue()", +"f6418b0b": "buyLandForEth()", +"f641d753": "changeElementName(uint256,string)", +"f6420e15": "tc()", +"f6432b8c": "publishLawyersInAttendance(string)", +"f6436a7c": "BONUS_ICO_PERIOD_TWO()", +"f643cf3d": "NEToken(address,uint256,uint256,uint256)", +"f64402c4": "setVicepresidenteDeMesa(bytes32)", +"f6444bcc": "isDeploying()", +"f6446614": "withDrawToPoolOwner(uint256)", +"f6448391": "getAllERC20(uint256)", +"f644c926": "SarmayehaaToken()", +"f6454620": "add_certifications(string,string)", +"f645496e": "giveawayFee()", +"f645835b": "beneficiaryAddresses(address)", +"f6458c6a": "toZ1(uint256[3],uint256)", +"f6460964": "teamKeepingPerEpoch()", +"f64623f1": "getBalanceB(bytes)", +"f646286b": "getPlayerShipOwnerById(uint64)", +"f6469342": "_setPackedBlockNumber(bytes32,uint256)", +"f64820f9": "addAttendant(string)", +"f6486cad": "burnReserveFees(address)", +"f6487e4e": "rejectCampaign(address,string)", +"f648f20b": "agencyWallet()", +"f64ab21a": "getOnMintAmountValue(int256)", +"f64b5c16": "distDay()", +"f64bfaba": "getBuyers()", +"f64c08b1": "onThrone()", +"f64ccca6": "payToken(address,address,uint256,uint256)", +"f64cd26b": "gcmp(uint256,uint256)", +"f64e167e": "getTextCount()", +"f64efacb": "icoHardCapInWei()", +"f64fca2e": "getNodeId(bytes)", +"f64fe563": "asyncSend(address,uint256,uint256)", +"f64ffde4": "getAccountPendingValue(address)", +"f6503662": "safeApprove(address,uint256,uint256)", +"f65045df": "totalClosedBID()", +"f6508be6": "tokensPerWei(uint256)", +"f651bf44": "move_to(uint16)", +"f652076b": "_getTokensAmount(uint256,uint256)", +"f652badb": "bitSSAToken()", +"f653279c": "TOKENS_FOUNDERS()", +"f653d286": "toggleTokenSaleOnHold()", +"f6560449": "evaluateProposalMetricEnd(uint256)", +"f65625ae": "changeWinnerPrizeMoneyForRaz(uint256,uint256)", +"f6577774": "BonusCrowdsaleImpl(uint256,uint256,uint256,address)", +"f6585116": "bytesFunc(bytes)", +"f658b1d5": "calculateContribution(uint256)", +"f659a45f": "airdropTokens(address,uint256)", +"f65bed0d": "initNewGame(uint8[16])", +"f65bffc3": "checkDividend(address)", +"f65c4d42": "Participate(uint256)", +"f65d1488": "setMarketingProfitAddress(address)", +"f65d226f": "getTotalBetAmount(bytes32,bytes32)", +"f65d6d4f": "MAX_MINT_NUMBER()", +"f65e2761": "RandomNumberGuessed(uint256,address)", +"f65e8d4d": "potMembers()", +"f65f5eeb": "choose(bytes32,bool)", +"f6618bab": "getBuyRequestsLength()", +"f661b886": "testCanTransfer()", +"f661e767": "villainIndexToApproved(uint256)", +"f6621121": "setSlammerTime(address)", +"f6623552": "getWalletBonuses(address)", +"f6626856": "LTT()", +"f662a12a": "oraclize_randomDS_proofVerify__returnCode(bytes32,string,bytes)", +"f662b881": "commitmentOf(address)", +"f662f291": "getInit(address,address)", +"f66302a2": "releaseMe(uint256)", +"f6631c64": "PPBC_Ether_Claim()", +"f6644c5a": "STARTING_FAIRY()", +"f6648d4c": "publishMixerType(bytes32)", +"f66597c2": "listTrophy(uint256,uint256,uint256,uint256)", +"f665a541": "coinsAdded(address)", +"f6660246": "fundOrderInternal(address,uint256)", +"f666323e": "UUIDProvider()", +"f669052a": "maxTokensToMint()", +"f66a79a0": "secondaryWallet()", +"f66afcac": "isTheAO(address,address,address)", +"f66b48da": "getHorseData(uint256)", +"f66bf229": "minBuyAmount()", +"f66c3af1": "getAddTokenApproveSignatures()", +"f66c6691": "shortTimeLock()", +"f66c75e5": "refund(bytes20,address)", +"f66cce0e": "adjustKPIs(uint256,uint256)", +"f66d0076": "getNumberOfCE()", +"f66d1f65": "releaseToEarlyInvestors(address,uint256)", +"f66d278e": "AgriChainDescriptionInt()", +"f66d685a": "lockInsolventTransfers()", +"f66e86bb": "withdrawGasPayback()", +"f66f0bd9": "MingYuanToken(uint256,string,uint8,string)", +"f66f2449": "THANKSTEST4()", +"f66f640e": "pregnantZodiacs()", +"f66f83f6": "latestSeriesForUser()", +"f67028be": "trade(uint256,uint256,bool,bool)", +"f67187ac": "lookup(string)", +"f671cae4": "setIcoThirdWeekRate(uint256)", +"f671f5b3": "deleteEntireGlofile()", +"f6724a55": "totalAmountInvested()", +"f6729bf2": "canChangeLocked()", +"f672c1aa": "totalBountyCount()", +"f672e4d8": "changeAdminUser(address)", +"f6731d62": "intCallWithArray(int256,uint8[4])", +"f673745a": "edoPerWei_()", +"f674cfe5": "VOLUME_60()", +"f674d799": "removeManyFromWhitelist(address[])", +"f67501f7": "changePet(uint256,uint256,uint256,uint256)", +"f6757cff": "getEmployeeInfo(uint256)", +"f6761151": "Withdraw(address)", +"f676d539": "get_dati_lotto(bytes)", +"f6774660": "calculateNumDIDToIssue(uint256,uint256)", +"f677cf0d": "isDistributed()", +"f678142a": "ethLandSaleOpen()", +"f6783518": "KYCToken()", +"f678462f": "termsAndConditions()", +"f6785de7": "newPayOutPercentageIsSet(uint256)", +"f678cf02": "setRelation(uint8,address)", +"f6791858": "tgeStartTime()", +"f679791d": "playerRoll(uint256,uint256,address)", +"f67a1d37": "BlockChainChallenge()", +"f67a7782": "periodOne()", +"f67a81ea": "Bigba()", +"f67abd87": "entryDetails(uint256)", +"f67b3047": "setItemActive(address,address,string,bool)", +"f67d5a8d": "sendDividendsWithRefBonus(address,uint256,uint256)", +"f67e3d0d": "howManyShips()", +"f67e8db2": "getEthToTokenOrderList()", +"f67f83a8": "updateFileds(uint256,uint256)", +"f67ff0af": "_llTransferFrom(address,address,address,uint256)", +"f68009b9": "getRoundBetAmount(uint256,uint256,uint256)", +"f68016b7": "gasLimit()", +"f68036f0": "FaucetManager()", +"f6805019": "addMeeting(string,uint256,uint256,uint256,uint256,uint256)", +"f6806074": "withdrawBonds(uint256)", +"f680b106": "RateEth()", +"f6814165": "castToInt(uint256)", +"f681f6e7": "capitalRaised()", +"f68297f3": "emergy_withdraw(address)", +"f6832c4a": "DO()", +"f683b247": "openSecret(bytes32,bytes32,string)", +"f68445dd": "myContract2()", +"f685e618": "_crownUnFreeze(uint256)", +"f685f942": "ZNCoin()", +"f685f9ad": "Moac()", +"f6860955": "emitAborted()", +"f686640b": "getCrabsOfOwner(address)", +"f686f019": "getCompte_9()", +"f686fa10": "verifyBBODocument(bytes,bytes)", +"f6879623": "addBountyReward(uint256)", +"f688bb2b": "setAirDrop(uint256,uint256,uint256,uint256)", +"f68975a9": "Total_Savers()", +"f68abb25": "approveToFight(uint256,uint256)", +"f68c021b": "EtherXeum()", +"f68c5b6a": "equalBytes32ToBytes(bytes32,bytes)", +"f68ce40b": "turtlemasterReq()", +"f68da9a0": "AthenaLabsICO(uint256,uint256[7],uint256,address,address[3])", +"f68dcd2b": "MHTHolders(uint256)", +"f68e63e3": "PRICE_MUL()", +"f68f1a0c": "recoverETH_SendbyMistake()", +"f68f8e42": "dataSourceGetGroupResult(uint256)", +"f6903c9c": "processEndOfYear(uint256)", +"f691b30b": "lockReleaseDate6Month()", +"f691e362": "EtherDOGEICO()", +"f692715c": "getGameResult(uint64)", +"f6928070": "numberOfGames()", +"f6933c7d": "isICOActive()", +"f693de1d": "signUpForTournament(uint32[])", +"f694211c": "Composed(uint256,address,uint256[5],uint256[5],string,string)", +"f6946940": "jack_pot()", +"f694b761": "createPool(string,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"f694c4be": "NSEToken()", +"f6950d5f": "LIFEWORLD()", +"f6951038": "testCreateWithParentsForeign1()", +"f696c4ed": "fightAgon(uint64,uint64,uint256,uint256)", +"f6973532": "setAddOwnerRequest(address)", +"f6978685": "HashnodeTestCoin_new()", +"f697a0ed": "ppb(uint256,uint256)", +"f697ddb2": "firstAddress()", +"f69871e9": "WithConstructorArguments(uint256,bytes32)", +"f6988b79": "getDeveloperReservedLockInfo(uint256)", +"f698bceb": "getMintable()", +"f698da25": "domainSeparator()", +"f698e626": "WrapReadTokenData()", +"f699ad94": "setupFundingInfo(uint256,uint256)", +"f69a3c7b": "termsAndConditionsAreSigned(uint8,bytes32,bytes32)", +"f69a6982": "getVirtualTradesSummed(bytes32,uint256)", +"f69adce6": "dinoToken()", +"f69b9dd8": "safeWithdrawalTokens(uint256)", +"f69ba02c": "toB32(address,uint256)", +"f69bbf16": "setContributions(address,uint256,bool)", +"f69bf03b": "issuePartnerTokens(uint256)", +"f69c3b24": "registerEarlyContrib(address,uint256,bytes32)", +"f69d03c9": "ETCWalletCreated(address)", +"f69d5f0e": "icoPhases(uint256)", +"f69da37e": "toRefer()", +"f69e672e": "modifyContactManual(uint256,address,string)", +"f69e739e": "voteForCandidate(uint256,address,address)", +"f69e8384": "ceoRemoveCoo(address)", +"f69e98d7": "bite(uint256,uint256)", +"f69f1027": "PRESALE_WEI_GOAL()", +"f69f18a6": "timesIsOver(address)", +"f69f190c": "getWorkerStatus(address)", +"f69f64f7": "setInfo(uint256)", +"f69f7cab": "createTokenVault(uint32)", +"f69f8a5c": "approvedBuyerForIndex(uint256)", +"f6a01234": "TokenStorage(uint256,address)", +"f6a03ebf": "setStart(uint256)", +"f6a08ced": "OracleBitfinex()", +"f6a0be88": "NCRCoin()", +"f6a0e8a4": "DTCC_ILOW_7()", +"f6a10249": "TransferedEth(address,uint256)", +"f6a12b48": "MatchmakerPrevails(address,address,uint256,uint256,uint256)", +"f6a14bf7": "getNumberOfTokensForTheTeam()", +"f6a176ae": "fpMul(uint256,uint256)", +"f6a25127": "test_set_label()", +"f6a29b81": "EntropyTxDetails(address,string,uint256)", +"f6a30e3e": "minTicket()", +"f6a31715": "Revocation(address,uint256)", +"f6a31b9c": "transferManagerContract()", +"f6a33253": "changeRatio(uint256)", +"f6a3b1dd": "totalHardcap()", +"f6a3d24e": "exists(address)", +"f6a3e8c8": "lockInfo(address,uint64)", +"f6a46c2e": "settleBaseDeliveries()", +"f6a47e9a": "MongoliaNationalToken()", +"f6a5546a": "testBilibirdaToken()", +"f6a56bcf": "TianLianCoin(uint256,uint256)", +"f6a58558": "withdrawRemainingRtc()", +"f6a5b13e": "m_beneficiary()", +"f6a5fa30": "subShares(uint256)", +"f6a60d89": "resumeCrowdsale()", +"f6a74ed7": "removeController(address)", +"f6a84013": "totalMEATonsSupply()", +"f6a8aea7": "financialStrategy()", +"f6a92de9": "mycontracts(uint32,address)", +"f6a94ecb": "notifyOfArbitrationRequest(bytes32,address,uint256)", +"f6ab4243": "buyCastle(uint256,uint256,uint256)", +"f6ac54dd": "checkRegPeriod(bytes32)", +"f6ac6684": "getStringZero(uint256,uint256)", +"f6ad660b": "f3(uint256,uint256)", +"f6ada1ad": "rewardDaysLeft()", +"f6adab61": "delayOfICO1()", +"f6af18f5": "montly_pay()", +"f6af2718": "Quantastic()", +"f6afad47": "getDatabase(uint256)", +"f6afe805": "PRE_SALE_GMRP_TOKEN_CAP()", +"f6b09195": "preicoTokensPerEth()", +"f6b098f8": "nextAttackTimestamp()", +"f6b10854": "safeWithdrawAll()", +"f6b12f28": "gameOwner()", +"f6b15fe6": "getProfit(uint256,uint256)", +"f6b19c74": "drain(uint256)", +"f6b2b334": "upgradeTo(address,uint256)", +"f6b2c3b6": "VendTitle(uint256)", +"f6b39b3c": "ContractTotalMined()", +"f6b3e080": "roundOneRate()", +"f6b44d03": "validFactories()", +"f6b4c691": "getPendingCratesForUser(address)", +"f6b4dfb4": "contractAddress()", +"f6b5460f": "withdrawTrackOf(string)", +"f6b55a93": "hotWalletAddress()", +"f6b63224": "_getHpbNodesInterface()", +"f6b69697": "importPreviousWinners(uint256[],address[],uint256[])", +"f6b6daf1": "supportedTokens(uint256,uint256)", +"f6b70702": "LightComplexAirdrop()", +"f6b781a1": "Bolton()", +"f6b87500": "internalCalc(int256,int256)", +"f6b911bc": "burn(address,address,uint256)", +"f6b91944": "walletLists()", +"f6b924f8": "EventAuction(address,uint32,uint256,uint256,uint256,uint256)", +"f6b94cb4": "negotiate(uint32)", +"f6b9571a": "remove_owner(address)", +"f6b97131": "redemptionCount(address)", +"f6b9d05d": "bountyAllocation()", +"f6b9fd79": "STARTING_VINES()", +"f6ba13a5": "lastBlockNumberInRound()", +"f6ba3b6c": "addThing(string,string,bytes32,string)", +"f6bb3cc4": "deleteString(bytes32)", +"f6bd5893": "getGas(uint256)", +"f6be4776": "CannabizToken()", +"f6be71d1": "setDuration(uint256)", +"f6bea5dd": "LOCKEDiN()", +"f6bed059": "mixer()", +"f6bf0edd": "removecantonEmployee(address)", +"f6bf44b6": "getPoolStakeCount(uint256)", +"f6bffff8": "_createTombWithData(address,string)", +"f6c05625": "isValidNumber(uint8)", +"f6c0736b": "register_token(address,string)", +"f6c0d6a3": "_getChainLength(uint256)", +"f6c1acdf": "proofFor(string)", +"f6c1db4c": "GetChequeInfoByHash(uint256)", +"f6c28241": "BuyForFriend(address,address,uint256,uint256,uint256)", +"f6c3f6cd": "readUserPurchaseAtIndex(address,uint256)", +"f6c42713": "changeExpiredLimit(uint256)", +"f6c50d8b": "_ownersTokens()", +"f6c536a0": "sendBonusMany(address[],uint256[])", +"f6c5c80d": "cleanUp()", +"f6c6b731": "activeFirstRound()", +"f6c7430e": "JAPACHELOR()", +"f6c8f62e": "TransferBack(address,uint256,uint256)", +"f6c976d2": "test_1_assertGasUsage50Boards()", +"f6c98dd7": "WikiToken()", +"f6c99dad": "SETUP()", +"f6c9e930": "approveSender(address,address,bool,uint256,uint256)", +"f6ca75d8": "AkonCoin()", +"f6cabaa0": "burnedToDate()", +"f6cb86db": "whitelistTransferPrimordialTokenFrom(address,address,uint256)", +"f6cbcab0": "mintParts(int256,uint16,address)", +"f6cbea50": "ErrorReturningEth(address,uint256)", +"f6cc7d60": "setUnitDefenseIncreases(address,address,uint256,uint256,bool)", +"f6cdf281": "returnPtSafeMedium()", +"f6ceecc4": "TokenAdminContract(address,address[],uint256,uint256)", +"f6cf3a7d": "setDeveloperCut(uint256)", +"f6cf4570": "BoughtBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", +"f6cf5411": "startTimePreIco()", +"f6d024c6": "test_add(uint256,uint256)", +"f6d0bf2f": "GetContractBalance()", +"f6d2eb65": "_validateQualityConsensus(bytes32,bytes32)", +"f6d2ff9d": "setFreelancer(address,address,bool,string,uint256,uint8,uint256[],uint256[],string)", +"f6d339e4": "setAddress(bytes32,string,address)", +"f6d361cc": "ENTRY_FEE()", +"f6d3aebc": "get_salary()", +"f6d3d52d": "RatesChanged(address,uint32,uint32)", +"f6d3df65": "ownerStartsCrowdsale(uint256)", +"f6d4a265": "addLacks(uint16[],int64[],uint16[],int256,int64[],int256,int64[],uint8[])", +"f6d51638": "getRocIdToTokenId(uint256)", +"f6d5959b": "getActionStatus(uint256)", +"f6d68fca": "balanceWinPoolForThirdStage()", +"f6d6d5aa": "claimableToken()", +"f6d72acd": "setVoter(uint256,address,uint256)", +"f6d860d1": "approveUserKYCAndSetReferrer(address,address)", +"f6d89563": "airdropTotalCurrent()", +"f6d956df": "buy(uint8,uint256,uint256)", +"f6da1c0a": "getPriceSMPTokensPerWei()", +"f6dab356": "getGPSEndTime()", +"f6db2bac": "LOG_BetLost(address,uint256)", +"f6db6e50": "ponziToWei(uint256,uint256)", +"f6dbc252": "MOREToken()", +"f6dcb32c": "sendRewardTokens()", +"f6dd0187": "getSubject(uint256)", +"f6ddac74": "updateLocation(string,string)", +"f6ddcee5": "_generate_seed(uint256)", +"f6de4b81": "_doVote(address,uint256,uint256)", +"f6df0d50": "setFrozenAccountICO(bool)", +"f6df26d2": "kickOutCommunity(address,uint256)", +"f6dfafe1": "getShareHolder(uint256)", +"f6dfcff7": "getCooldownEndTime(uint40)", +"f6dfdad1": "getContractInformation()", +"f6e158b9": "getPickedAssetsAndFinalSeed(bytes32[],uint256[],uint256,uint256)", +"f6e212ea": "addCrystal(address,uint256)", +"f6e4641f": "purchaseFor(address)", +"f6e4a3dd": "tradeBalances(address,uint256,address,uint256,address,address,uint256)", +"f6e5c6a4": "totalWeiDonated()", +"f6e5e112": "startingEtherValue()", +"f6e5e298": "setScientificData(uint256,string)", +"f6e66c17": "totalAwards()", +"f6e681a9": "IkuraApproval(address,address,uint256)", +"f6e72981": "mintManyTo(address,string,uint256[],uint256[])", +"f6e7b785": "tdeStarted()", +"f6e7f69d": "test_insert_findWithHintPrevRemoved(int256)", +"f6e87f81": "SkillChainToken()", +"f6e898b0": "getIcedAddresses()", +"f6e9b85c": "doSetCanCreateGrants(address,bool)", +"f6ea1a3f": "CryptoSpin(address)", +"f6ea6252": "MINER_END_PRICE()", +"f6eb1337": "TokenBought(address,uint256,uint256,uint256,uint256)", +"f6eb13b3": "VietnamToken(uint256,string,uint8,string)", +"f6eb58de": "TransferManagerRevoked(address)", +"f6ebe41a": "defaultURIStart()", +"f6ec91d5": "developerAccount()", +"f6ecb9ee": "getprizemoney(address)", +"f6ecd724": "init(address,uint256,bytes32,uint256,uint256,uint256,uint256,bool,bool,address)", +"f6ecebf2": "LeagueAdministrator()", +"f6ed4b71": "getBasketDetails(address)", +"f6ed5342": "updateEscrow(uint64,uint256)", +"f6ed860e": "cancelGoldSellOrder()", +"f6ed8fe7": "grantsUnlock()", +"f6ee2d8d": "developersTokensWallet()", +"f6ee439f": "registerAssetComment(int256,string,string,uint256)", +"f6ee87b8": "_0xEtherToken()", +"f6ee8c59": "FirstBonus()", +"f6eeb89c": "addBid(string,string,uint256,address)", +"f6eeff1e": "punkNoLongerForSale(uint256)", +"f6ef97ff": "transferEthToWallet(uint256)", +"f6efcb7a": "setKeyData(bytes32,bytes32,bytes32)", +"f6f0fa8d": "teamReleased()", +"f6f10a26": "topUpWithEtherAndTokensForHolders(address,uint256)", +"f6f15ec9": "Larbaoui()", +"f6f17bba": "distributePreSoldShares()", +"f6f1995d": "onlyOwnerSetBountyWallet(address)", +"f6f3144d": "GetEthBalance(address)", +"f6f32cc4": "CICToken(string,string)", +"f6f36028": "Score()", +"f6f36641": "setV_R5(uint256)", +"f6f3973f": "fundIco()", +"f6f494c9": "getTermsContract(bytes32)", +"f6f505c4": "RaffleResult(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes32)", +"f6f54833": "HighEndTreasureChain()", +"f6f55ada": "TokenDistributed(address,uint256)", +"f6f5eb59": "transferableStartTime()", +"f6f5f567": "SMPAcquired(address,uint256,uint256)", +"f6f65f1a": "ASTRN_TOKEN()", +"f6f6edd4": "issuerDecimals()", +"f6f6fc74": "holderTeamTokens()", +"f6f7301e": "getById(int128)", +"f6f82ecb": "massChangeRegistrationStatusForSilverWhiteList(address[],bool)", +"f6f844e4": "setOp(bytes32)", +"f6f8ca07": "burnPXL(address,uint256)", +"f6f91737": "MAX_FREE_REFERRAL_PACKS()", +"f6f94a85": "ScaleFactor()", +"f6f94b47": "MiningPayout(address,uint256,uint256)", +"f6f96d91": "rateOfEther()", +"f6f98e34": "calcReleaseToken(address,uint256,uint256)", +"f6fb2c72": "buyGuardian(uint256,uint256,uint256)", +"f6fb4c9a": "_createFilm(string,address,uint256)", +"f6fb6ecf": "buildHouse()", +"f6fbc06a": "getWeiInvested(address,address)", +"f6fc8160": "addSeed(uint256)", +"f6fc96ad": "mainsale()", +"f6fcbee1": "getArrayUint(bytes32)", +"f6fcc14e": "agTechWallet()", +"f6fe3a01": "getUint256Min(int256)", +"f6fee732": "getAccountNote(address)", +"f7008156": "_haveEveryoneDeposited()", +"f700abf1": "addBudget(uint256,uint256)", +"f700ead9": "withdrawTokenMulti(address[],uint256[])", +"f702dd8a": "hkchain(uint256,string,string)", +"f703601e": "safe_add(uint256,uint256)", +"f703e773": "changeLifeExpectancy(uint256)", +"f7044bae": "getShareHolderCount()", +"f7048161": "checkRefundSignature(uint8,bytes,address)", +"f704b57a": "Bitconnect()", +"f704cb98": "addInvitation(address,address,uint256,address,string)", +"f70532fe": "getContractsOf(address,uint256)", +"f705fb87": "preICOend()", +"f7066121": "lastJackpotRound()", +"f706b476": "set_pauseUET(bool)", +"f706b814": "PARSEC_CREDIT_DECIMALS()", +"f7073490": "buyLink()", +"f7074919": "seenHereA()", +"f70794ea": "acceptHelp(uint256)", +"f707a308": "tierTwoMin()", +"f7086dd1": "SmigesToken()", +"f70904b4": "sale1Accepting()", +"f7095d9d": "updateTentativeWinningChildUniverse(bytes32)", +"f709dd51": "getTrademark()", +"f70ad595": "team_release_epoch()", +"f70b0a07": "setTrustedLateCloser(address,bool)", +"f70b13c5": "vestedTokens(uint64)", +"f70bbb9a": "getProposalExternalToken(bytes32,address)", +"f70bbdaf": "create(string,string,uint32,int256,string,address)", +"f70bdba7": "AdidasCoin()", +"f70c92de": "GOSHUIN()", +"f70ccc6e": "MaptPricing()", +"f70d7629": "_verifyOwnershipOfTokens(uint256,address,uint256)", +"f70dbb77": "isPresalePeriod()", +"f70dd1fe": "isAllocated6()", +"f70eabff": "addTeamAndAdvisorsAllocation(address,uint256)", +"f70f1821": "weeksFromEnd()", +"f70fa221": "getInitializeCashValue()", +"f71143ca": "isSaleLive()", +"f712d7ff": "testFailControllerTransferFromWithoutApproval()", +"f712f3e8": "implementsERC165Interface(address,bytes4)", +"f7138eaf": "createArtworkAuction(string,string,uint32)", +"f71441a5": "maxGoal()", +"f7146269": "testGetRandomDragon(uint256)", +"f7149220": "RNG()", +"f714a96e": "myCompany()", +"f714bf3d": "overflowOwner()", +"f714de9c": "MultiAccess()", +"f7160766": "getCompte_13()", +"f716171c": "createTrade(uint16,address,address,uint256,uint16,uint32)", +"f7164029": "upgradePrefixPreSignedFirst(uint8,bytes)", +"f716b7bf": "initInvesters()", +"f716c400": "getCrowdsaleUniqueBuyers()", +"f716fe43": "s37(bytes1)", +"f717442a": "previousPriceOf(uint256)", +"f717c310": "freezeTransfersSince(uint256,string)", +"f71868da": "Ethereumcapital()", +"f719254d": "cancelEthToTokenOrder(uint32)", +"f719e111": "useOraclize()", +"f719edfb": "firstPublish()", +"f71ad40e": "icoCapInWei()", +"f71b041c": "refundUser(bytes32,uint8,uint256,uint256)", +"f71b382c": "PIEXTREAM()", +"f71be837": "sign(address)", +"f71c60bd": "AMBASSADOR_FIVE()", +"f71cc3a5": "setUserStatus(address,uint256)", +"f71db383": "setArbitrationContractAddress(address)", +"f71dcb10": "CreatedMTP(address,uint256)", +"f71f7a25": "set(bytes32,bytes32)", +"f71f9c38": "SupplyChanged(uint256)", +"f72047ff": "_enableRefunds(address)", +"f72084b2": "foundationShare()", +"f720a453": "senderStake()", +"f720d563": "endAttack(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"f720ef08": "setTokenAiNetworkToken(address)", +"f720f3d2": "tokensToEther(uint256,uint256)", +"f720f80b": "isMaster(address)", +"f7213db6": "orderFills(bytes32)", +"f72457af": "CertifierDb()", +"f7253071": "lastBlock_f0()", +"f725839f": "multiGenerate(address,address[],bytes)", +"f7260d3e": "receiver()", +"f7265042": "getUsersShipsIds()", +"f726af40": "MilestoneAmountRaised()", +"f726f715": "distributeFunds(uint256)", +"f727550e": "determineOutcome(uint256)", +"f72755fe": "getRequest(int256)", +"f72758e7": "getBracketDataMiddleTeamIds(uint8)", +"f72860ca": "modifyCustomer(string,string)", +"f7286888": "getPhaseNumber()", +"f72918ef": "addVoterVote(address)", +"f729688e": "_hasFlags(uint256,uint256)", +"f729b216": "moreTokenPerEtherForSeedRound()", +"f729cf0d": "getJob(bytes32)", +"f72a244d": "handleAllowance(string,uint256)", +"f72ae72c": "remainingTokenForSale()", +"f72b7ab9": "SbloccaConto(address)", +"f72c436f": "isHuman(address)", +"f72c75a5": "delegateVestingContractOwner(address)", +"f72d2c22": "BONUS_HI()", +"f72d3b15": "LamboPresale(uint256,uint256,uint256,address)", +"f72d50a9": "getPOOL_edit_4()", +"f72d53ba": "getNumMatches()", +"f72db5a3": "getLLV_edit_8()", +"f72e460a": "getBUUU(bytes32,uint256,uint256)", +"f72e695b": "setPoolCut(uint256)", +"f72f30e1": "Vesting(address)", +"f72f34db": "getDCountedBasicBallotsN(bytes32)", +"f72f6826": "ChangeEnd(uint256)", +"f72fc599": "_isThereAnOnGoingTapProposal()", +"f73052e8": "totalSoldCount()", +"f73079a6": "Auto(address,string)", +"f73089b9": "sale2Stopped()", +"f7309f29": "testLedgerUnderPayback()", +"f731c3bd": "lotteries(uint32)", +"f731d33c": "ApzCoin()", +"f7326286": "getARInvIndexTable()", +"f73294b8": "isValidatorAlreadyVoted(address,address)", +"f732eb66": "getPayoutDenominator()", +"f7342cd3": "SGF()", +"f7362152": "testThrow_testableContributionCaseExpectFailure()", +"f73770e7": "is_contract_paused()", +"f737f274": "getBuyDemand(uint256)", +"f73857cc": "deauthorizeAddress(address)", +"f738e5ca": "ownerTakeProfit()", +"f739a501": "snapShot(uint256,address)", +"f739ba2f": "picops_withdraw_excess()", +"f739c261": "legendary()", +"f739ed4c": "id_for_user_version(uint256,uint256)", +"f73a590c": "distributed_team()", +"f73b5541": "bulkWhitelist(address[])", +"f73baf62": "proxy_initialization()", +"f73c30e3": "getESOP()", +"f73c8dfd": "pvpQueueSize()", +"f73cc97c": "AddDOT(bytes)", +"f73d05db": "getSha()", +"f73d594c": "ERC20Base()", +"f73e05dd": "RetrieveCommissions()", +"f73f4ebc": "processBuyRequest(string,address,uint256,uint256,bool)", +"f74034df": "purchaseGen0Token(uint256)", +"f7407178": "get_banlance(address)", +"f740fbc9": "test_validPerc()", +"f74100e3": "getBits(bytes)", +"f741b602": "denyInvestor(address)", +"f742048b": "NlvToken(uint256,string,string)", +"f7426b62": "unlock(bytes32,bytes,uint256[],bytes,bytes,bytes,uint256[],bytes,bytes)", +"f74279b0": "totalEarning()", +"f7434ea9": "arbitrationCost(bytes)", +"f7437384": "NucleusVisionAllocation()", +"f743d334": "BancorBuy()", +"f744538d": "submitClearingPrice(address,bytes32,uint256)", +"f7448a31": "transferERC20(address,uint256)", +"f745630f": "update(uint256,string)", +"f746e28d": "fundSchool(uint256)", +"f746f365": "icoSoldCap()", +"f746fcdb": "presaleMade(string,uint256)", +"f74715cb": "ApproveERC20(address)", +"f7474d00": "payEther()", +"f74758ef": "safeSendCard(uint256,address)", +"f7477435": "TokensWorldCoin()", +"f747a5eb": "auctionBid(bytes32)", +"f747b744": "investFromWallet(uint256)", +"f749013e": "dateStartContract()", +"f7493c6a": "UpdatePremiumLimit(uint256,uint256)", +"f749bdc1": "BUYER_CHECK_STEP(bytes32)", +"f749d980": "LastExecuted()", +"f74a4e63": "transferToMint(uint256)", +"f74b766a": "createBet(uint256,uint256,uint256,bool,string)", +"f74c67b3": "getAddressKYCState(address)", +"f74c753f": "dontReturn()", +"f74d73ec": "issueSertificate(address,address)", +"f74deae3": "MultiSigWallet(address,string,uint256,uint256,string)", +"f74e8655": "setWhitelistAgent(address,bool)", +"f74e9bde": "pwr(uint256,uint256)", +"f74f4702": "changeRequiredMajor(uint256,bool,bytes)", +"f74fbb47": "StateChanged(bool)", +"f74fc598": "listSharesForSale(uint256,uint256)", +"f750aaa6": "withdrawEverything(address)", +"f75165c6": "right22(uint256)", +"f751758b": "getCurrentTokenPrice()", +"f751b26a": "unclaimedRoyalty()", +"f751c2f5": "MAC()", +"f751cd8f": "drop()", +"f752644c": "aelfCommunityMultisig()", +"f752fdc3": "wdivide(uint256,uint256)", +"f75316b4": "CobinhoodToken()", +"f754f766": "setBonus(uint8,uint8,uint8,uint8)", +"f7553098": "voteForOutcome(int256,uint256)", +"f755a76e": "createBoard(bytes32)", +"f755a98b": "setCrowdsaleEndBlock(uint256)", +"f75640b3": "crowdsaleCanceled()", +"f7566b49": "getBet(address)", +"f756b574": "getDropAmount()", +"f7572cf3": "newCampaign(address,uint256)", +"f757342c": "setRewardWasSent(address)", +"f758ff59": "SentDeveloperFee(uint256,uint256)", +"f759c480": "balanceOfrun(address)", +"f759e298": "getNumberOfBlocksPerKick()", +"f75a275b": "reservedLPT()", +"f75b8d3c": "getExpiredCratesForUser(address)", +"f75beacf": "HuaTuo()", +"f75ccbf0": "checkErrors(bytes32)", +"f75cf7d5": "IndecoinBounty()", +"f75d34bb": "ICOChanged(address)", +"f75e5d85": "selfDestruct(uint8,bytes32,bytes32)", +"f75eb240": "removeCallSpenderWhitelist(address)", +"f75ec528": "getSpaceInfo(uint256)", +"f75fa5e1": "xorReduce(bytes32[],uint256)", +"f75fb878": "preICOwei()", +"f75fdcaa": "cancelMilestone(uint256)", +"f760d2a2": "_incrementBlockStats(bytes16,uint8)", +"f761720a": "isEquiped(address,uint256)", +"f7618a40": "LIMIT_PROMO()", +"f7620435": "inquire_length(uint256)", +"f7627da2": "startUnlimitedSale(uint256)", +"f7628949": "B2ANDcoin()", +"f762e147": "addAsset(uint256,uint256,bytes)", +"f7637bec": "AccountReaderRemoved(address,address)", +"f764531d": "saleStartAtBlock()", +"f7647f36": "acceptPurchase(uint256,uint256)", +"f764e8a0": "partPos()", +"f764eb93": "LogDepositForDividend(uint256,uint256)", +"f765088f": "UpdateClientAddress(address)", +"f7654176": "split()", +"f76543e9": "hasOpening()", +"f7658e0f": "bonusDecreaseDay()", +"f765b6b1": "getEventInfo(bytes32)", +"f765e6e4": "return_pause()", +"f765ec6f": "lastBlock_a11Hash_uint256()", +"f766658d": "finalizePreIcoDate()", +"f76692a6": "dtTestCitySnapshot(address,uint256)", +"f766cd3e": "minInvestorCap()", +"f766eca7": "EtherDeltaApproveToken(address,uint256)", +"f7670b0c": "updateAuth(address,address,bool)", +"f7678fda": "setNewRegister(string,string,uint256)", +"f767fdcf": "KRYPT()", +"f767fe97": "MarketingAddr()", +"f7682aa5": "CURVE_CUTOFF_DURATION()", +"f7683b37": "ETTCE()", +"f768402a": "addProduct(address,string,string,uint256,string)", +"f768923a": "ignite()", +"f768f0f5": "setTrustValue(uint256,uint256)", +"f769aeb2": "getNextPoliceAssignment()", +"f76a24e6": "isTesting(uint16)", +"f76aae2f": "addVerifiedAddress(address)", +"f76b8c5e": "destinationOf(uint256)", +"f76bd7d1": "disableIssuance()", +"f76bf292": "StormToken(address)", +"f76bf757": "registerPage(bytes8,string,bytes32,string)", +"f76c0f4e": "updateFlipTokenRewardAmount(uint256)", +"f76c1ea5": "setReceiptLiablity(address,address)", +"f76c84eb": "manualChangeMonth(uint256)", +"f76c906b": "mCurrentSnapshotId()", +"f76ce123": "ERC20Template()", +"f76cf4bf": "BiToro()", +"f76d270e": "_setTokenBudget(address,uint256)", +"f76d3569": "auditorDelegate()", +"f76e8d29": "createSplitAgreement(address,address,address)", +"f76e9183": "VitalSkin()", +"f76f8d78": "SYMBOL()", +"f76f950e": "uint2str(uint256)", +"f76ffe7a": "startMintingData()", +"f77014da": "setGVE(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"f7701b47": "downloadPriceInWei()", +"f7701ce8": "batchDistribute(address[],uint256)", +"f770a865": "FaradCryptoken()", +"f770c96f": "TDESupply()", +"f771bc6b": "minerSaleCount()", +"f772547b": "addressToSubscriptions(address,uint256)", +"f77267ea": "sendTokensToWorkers(uint8,uint8)", +"f77282ab": "finalizeAuction()", +"f773a3fb": "maxAssignedRequests()", +"f773ab80": "isPVPProvider()", +"f773c770": "TMSYToken(address,address)", +"f77404e5": "totalCommonWithdrawSupply()", +"f7745f88": "BudCoin()", +"f7746e36": "cars(uint256)", +"f7749e32": "rocketTimeUntilMoon(uint256)", +"f7750bd5": "startEthGetToken()", +"f7759c84": "maxTokenSupplyPreICO()", +"f7768580": "EventTransferAction(address,address,uint32,uint8)", +"f7770906": "buy_energy_core(address,uint32,uint32,uint64,uint32,uint64)", +"f778f32b": "addAlgo(uint256)", +"f7791010": "approveWriter(uint256,address)", +"f779a68d": "_deposit(address,address,uint256,bytes)", +"f779abf7": "DaoUpgraded(address)", +"f77a0923": "BitcoinProcessor(address)", +"f77a490d": "setMinPurchaseInWei(uint256)", +"f77aa0ad": "changeRedTeamAddress(address)", +"f77abd74": "getMatchPointsGroups(uint256,uint192)", +"f77b1856": "getAddTokenData()", +"f77b6f61": "getCRhashOfCRTokenId(address,uint256)", +"f77c1dc6": "unknownInvestors(uint256)", +"f77c4791": "controller()", +"f77c4ff9": "_firstRoundFight()", +"f77ca208": "managerIsPaused()", +"f77d62f0": "roundNumber_()", +"f77da6d5": "claimImmediateTokens(address)", +"f77dc854": "setHookableTokenAddress(address)", +"f77dff06": "joinPillarWithEarnings(uint256,uint8,uint256)", +"f77e4d8b": "test_YayIsNotOverSixtyPercent()", +"f77e8b83": "addPlayer(string)", +"f77f29b1": "getFeeWindow()", +"f77f2f2e": "setRewardStatus(address,bool)", +"f7800e69": "fundVault()", +"f780259e": "totalPrayers()", +"f780d867": "add_coin(string,string,address,uint8)", +"f7815fae": "getIntField2()", +"f782b2ea": "_confirm(address)", +"f784cae5": "Fetish()", +"f784dd61": "RealeaseTime()", +"f78525a1": "getFaucetByName(string)", +"f785ef72": "decimals_()", +"f785f03d": "setMigrating(bool)", +"f7860bb1": "addToBounty()", +"f7862ec2": "feeWindowBurn(address,uint256)", +"f7868884": "FOUNDERS_REWARD()", +"f786bb62": "Hiken(uint256,string,uint8,string)", +"f786becd": "MAJOR_VERSION()", +"f786cb82": "updateLemontokensRemainingToDrop()", +"f7870c5b": "Unlock(address,uint256,uint256)", +"f7888aec": "balanceOf(address,address)", +"f7892887": "phase_1_Time()", +"f7899d9e": "_buyCommonTTM(uint256,uint256,address,address)", +"f78a706a": "extraEmission(uint256)", +"f78a7a55": "createBurnRequest(address,uint256,string)", +"f78c6b54": "donations(bytes32,uint256)", +"f78cc9cf": "getTokenNextPrice(uint256)", +"f78d1c6a": "managePID(uint256)", +"f78d5494": "approveNewMintRequest()", +"f78dd0c1": "MovieCoin(uint256,uint256)", +"f78e4210": "test_oneValidEqAddress()", +"f78ed322": "regNameWOwner(string,address,address)", +"f78fa141": "_uintToSPDStr(uint256)", +"f78fadc6": "HXC()", +"f78fe0e9": "stand(uint8[],bytes32,uint8[])", +"f7903871": "RevTokens()", +"f7908f00": "verifyTransaction()", +"f79098f4": "getEditionLimits(uint256)", +"f793595a": "ThreeAT()", +"f7935969": "getRank(address,uint256)", +"f793fb64": "valInt()", +"f794062e": "isListed(address)", +"f79480f8": "lastBlock_f19Hash_uint256()", +"f794e7f2": "addDefenceParts(uint8[])", +"f794eb58": "getBonusRate()", +"f7963e8a": "testNewCounterValueIszero()", +"f7966eef": "changeReputation(address,int32)", +"f7969147": "currentBurned()", +"f796e06f": "calculateAndRegisterBonuses(uint256)", +"f79710fd": "extraTokens(address,address,uint256)", +"f797ac0e": "addSellingItem(uint256,uint256,uint256)", +"f797b617": "buyInvestorPack(uint256)", +"f797f7b6": "ETH_SIGN_TYPED_DATA_ARGHASH()", +"f7981bdd": "indSeed()", +"f7982243": "addRecipient(address,uint256)", +"f7987a03": "applySetMaxFeeWithdrawal()", +"f798abce": "teamLockAddr()", +"f79915ce": "kkTestICO91()", +"f7992d85": "eta()", +"f7996163": "joinSinceOf(uint256)", +"f79a2b84": "setFirstMile(address,address)", +"f79a3c25": "voteForDisable()", +"f79a97fc": "isSpentTxPaymentForMCW(bytes32)", +"f79acad3": "approveInvestorsInBulk(address[])", +"f79b22e0": "betOnATeam(uint256)", +"f79cfaea": "STLToken(string,string,uint8,uint256)", +"f79d0a8b": "callSomeFunctionViaInner1()", +"f79d6687": "removeTokenTime(uint256)", +"f79dcf8d": "earliest_buy_time()", +"f79e2b32": "inListAsOf(address,uint256)", +"f79ea94d": "VoipToken()", +"f79ebd7f": "tokenPriceDenom()", +"f79ed94b": "reserveAddress()", +"f79f528b": "getMinAuctionValue()", +"f79fc70d": "testBaseStoreTokenUsingDeployedContract()", +"f7a01b93": "StateMachine()", +"f7a06a88": "setSellerGuarantee(bool,uint256)", +"f7a0715f": "DoneToken()", +"f7a084c0": "AIRDROP_START_AT()", +"f7a0b2da": "updatePeloExtenstionContract(address)", +"f7a0ee1c": "maxtokens()", +"f7a0fa0a": "getShareDistribution(bytes)", +"f7a268c4": "freezeAccount(address,bool,bool)", +"f7a33598": "round(uint256[4])", +"f7a34573": "setAction(string,uint256)", +"f7a40e99": "moveERC721Tokens(address,address,uint256)", +"f7a4c45c": "calculateSaleReturn(uint256,uint256,uint8,uint256)", +"f7a6a046": "backOrenCoinOwner()", +"f7a7408b": "BuyLevel()", +"f7a7ec12": "fund_color(address,address,uint256,uint256,uint256)", +"f7a80784": "addProduct(string,uint8)", +"f7a8b34d": "planetName(uint256,uint256,uint256)", +"f7a919be": "createRegion(address[16],address,uint256,uint256,uint256,uint256)", +"f7a9a152": "count_users()", +"f7aa4e0e": "MithrilArrows()", +"f7aad9ed": "amendBalances(address[])", +"f7ab6ec6": "getOfferingByProposal(address,uint8)", +"f7abab9e": "tokenTotalSupply()", +"f7ac5611": "pushStatus(string,uint256,uint256,int8)", +"f7ac9c2e": "approvePreSignedHashing(address,address,uint256,uint256,uint256)", +"f7ad51ce": "cardsKeys()", +"f7ad7d8f": "getAllowedAmountByTeam()", +"f7ad906f": "contractTransfer(address,address,uint256)", +"f7adc48f": "test3(uint256)", +"f7ae24ae": "FundWithdrawal(address,uint256)", +"f7ae9421": "checkInvestorBalance(address)", +"f7aeea14": "removeGlobalConstraint(address,int256,address)", +"f7af21c9": "cancelCrowdsale()", +"f7af630b": "GetBindTokensAccountEvent(address,string)", +"f7b09d33": "giveReserveFund(address,uint256)", +"f7b14066": "setup(uint256,uint256,uint256,uint256,uint256,uint8,uint256,uint256,uint256,uint256)", +"f7b188a5": "unPause()", +"f7b22fa2": "getCurrentBeneficiaryCap()", +"f7b28073": "moleculartechnology()", +"f7b2a7be": "rewardAmount()", +"f7b3ae2f": "getSwapData(bytes32)", +"f7b42d08": "set_price_and_sell(uint256,uint256)", +"f7b43abf": "PRESALE_ICO_PORTION()", +"f7b47870": "setPublicOfferingHolder(address)", +"f7b4b087": "purchaseFirstTokens(uint256)", +"f7b4feec": "FaucetsToken()", +"f7b53431": "feesTaken()", +"f7b54065": "getInvestmentCurrentValue(address)", +"f7b578ee": "LiveCoin()", +"f7b6302e": "getInvestorTokensPurchase(address,uint256)", +"f7b75258": "withdrawlsEnabled()", +"f7b77a21": "MasternodeRegistered(address,uint256)", +"f7b822db": "setDEditor(bytes32,address,bool)", +"f7b89a3e": "getTotalCosts()", +"f7b8a600": "payAltCoin(bytes32,uint256,bytes)", +"f7b8eeb7": "getWhale(uint256)", +"f7b92f34": "CandidToken()", +"f7b95d35": "setRNGCallbackGas(uint256)", +"f7ba8896": "random(uint256,uint256,address)", +"f7bada53": "randomChoiceFromticketPool()", +"f7bbd1c1": "setMinAcceptEther(uint256)", +"f7bc2003": "releaseApprove(bytes32,uint8,bytes32,bytes32)", +"f7bc39bf": "owns(address)", +"f7bd2361": "LookAtBalance()", +"f7c0085b": "changeRandomOrgAPIKey(string)", +"f7c00e2f": "presaleWeiRaised()", +"f7c07442": "getReferrals(address[])", +"f7c0f4c6": "calculateRates()", +"f7c0fa4a": "requireCorrectReceipt(uint256)", +"f7c15df9": "_addExtraGasLimit()", +"f7c2b38c": "seconds_left()", +"f7c360e0": "fee_claimer()", +"f7c38052": "createBuyOrder(address,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"f7c3b210": "ENCKToken(uint256,string,uint8,string)", +"f7c3ee7a": "immortality()", +"f7c42ac8": "onChainIdentities(address)", +"f7c45aa4": "sld(address,uint256,string)", +"f7c46a73": "totalhospital()", +"f7c58b62": "weiPerEther()", +"f7c5f4b6": "getPreICOBonus()", +"f7c618c1": "rewardToken()", +"f7c68ffb": "isReleasedOnce()", +"f7c824f1": "CombineCard(uint32)", +"f7c8a091": "forPresale()", +"f7c8af48": "destroyItem(uint256)", +"f7c8d634": "tab(bytes32)", +"f7c9a7be": "drawTertiaryCWinners(uint256)", +"f7c9afa2": "onlyOwnerGetAdvWallet()", +"f7c9f1da": "setPonziPriceinWei(uint256)", +"f7c9f74a": "insert_contribution(address,uint256)", +"f7cab847": "getRule(bytes32)", +"f7cb5709": "CoinsLimitUnalterableInteger()", +"f7cb789a": "roundDuration()", +"f7cb8e66": "testIt()", +"f7cbcb8f": "withdrawCrowdsaleOsherCoins()", +"f7cc8c13": "MobSquads2()", +"f7cc8f40": "nbBackerWithMoreOrEqualTen()", +"f7cdf47c": "ETHEREUM()", +"f7ce25bb": "cardAndChecklistIdsForOwner(address)", +"f7ce4479": "setCommunityAddress(address)", +"f7cf0aa1": "updateMinBet(uint256)", +"f7cf9a1c": "Create(address,uint256,address,string)", +"f7cfd902": "removalBlackList(address)", +"f7d08eae": "distributeReserveSupply(uint256,address)", +"f7d0e04b": "setReputation(address)", +"f7d4c7e3": "getBracketDataFinals()", +"f7d518b5": "StartNewGame(string,string,string)", +"f7d5e485": "airdropToken(address[],uint256)", +"f7d6dbe5": "UpgradeProposals()", +"f7d7477b": "sumAmounts(uint256[])", +"f7d8417d": "MYRED(uint256,string,uint8,string)", +"f7d871df": "NucleusVisionAirDropTokensMinted(address,uint256)", +"f7d8c883": "breedWithAuto(uint256,uint256)", +"f7d9078e": "mintToSpecialFund(address)", +"f7d91cd4": "allocateReserveCompanyTokens()", +"f7d97577": "setPrice(uint256,uint256)", +"f7d978a2": "changeEntryFee(uint256)", +"f7d9a5ae": "BtcToken()", +"f7dadf7d": "setBurnFormula(address)", +"f7daef72": "getIndexBatchByUsername(bytes20[])", +"f7db7348": "preapprove(address,uint256,uint256,uint16)", +"f7dba1dc": "nullifyProduct(bytes32)", +"f7dc0455": "transferInitialAllocation(address,uint256)", +"f7dc909b": "createNewEvent(bytes32,string,string,uint256,string,string)", +"f7dd2e28": "BAG_TRANSFER_MINIMUM_AMOUNT_OF_BUYS()", +"f7ddfb4b": "meltingContract()", +"f7decfd1": "blacklistSwitch()", +"f7defe8c": "pickTheWinner()", +"f7df8f87": "vestingFounderAddress()", +"f7e0bc92": "COLOR_CUSTOM()", +"f7e0e743": "removeFirstAdvisorLock(address)", +"f7e23677": "catAttributes(uint256,uint256)", +"f7e23778": "PresaleEnd(uint256)", +"f7e28f8b": "weiRaisedAfterDiscountRounds()", +"f7e2ed66": "mOnTransfer(address,address,uint256)", +"f7e2ff00": "userWithdrawalStartTime()", +"f7e3c068": "PrestigeUp()", +"f7e3f00e": "PUBLIC_SALES_2_RATE()", +"f7e42647": "updateTrustRank(uint256)", +"f7e498f6": "verifyProof(bytes32,bytes,bytes,uint256,bytes32[])", +"f7e4a4a9": "hardCapPreSale()", +"f7e502cb": "HALToken()", +"f7e5951e": "_calcRemainReward()", +"f7e6af80": "_getOwner()", +"f7e74e65": "updateEmployee(uint256,uint256,string)", +"f7e77e44": "releaseMyVestedTokens()", +"f7e78e78": "verifyDeal(bytes32,bytes)", +"f7e7d6d8": "Noscam()", +"f7e80582": "enableAutoReinvest(uint256)", +"f7e83aee": "verify(bytes,bytes)", +"f7e95364": "updateGuMasks(uint256,uint256,uint256)", +"f7e98d15": "YELLOWLAMBO()", +"f7ea7a3d": "setTotalSupply(uint256)", +"f7ead092": "totalWinAmount()", +"f7eaec4f": "removeAgent(address,uint256)", +"f7eb4017": "findAddressByEndpoint(int256,string)", +"f7ebc39a": "isTransferAllowed(address,address,uint256)", +"f7ec221e": "authorizedToDraw()", +"f7ec2f35": "isContract()", +"f7ec7b51": "create_new_deal(uint32,uint256,uint32)", +"f7ecc428": "mintForInvestor(address,uint256)", +"f7ed6031": "getRoundDividendShare()", +"f7ed71d0": "left40(uint256)", +"f7edbbe6": "nextLapId()", +"f7ee503e": "editTicketPrice(uint256)", +"f7efd150": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"f7efd408": "votesIter(uint256)", +"f7f03516": "EasyHashingCoin()", +"f7f15304": "ARCD_FUND()", +"f7f1962e": "firstAuctionsInitialDuration()", +"f7f20cb3": "getTournaments()", +"f7f2210c": "openBetIndex()", +"f7f2741c": "AFTCoin()", +"f7f32916": "computeTokenWithBonus(uint256)", +"f7f33c54": "CriptaliaRewards()", +"f7f3815c": "setOperation(address)", +"f7f3ad16": "FixBet51()", +"f7f3da3b": "TestContractOne()", +"f7f4b9d4": "saleEnd1()", +"f7f50faa": "chunksAlreadyVested()", +"f7f5886e": "initializeS4FE(address)", +"f7f59411": "purchaseExistent(uint256)", +"f7f59b0f": "LogCustomerVerified(address,address,uint8)", +"f7f6d4da": "GreenEarthEconomyFund()", +"f7f74b56": "closeVoring()", +"f7f7915d": "setNextRoundFee(uint32)", +"f7f8303b": "product1_sell()", +"f7f87361": "DepositProxy(address,address)", +"f7f8aae9": "SudoEnabled(bool)", +"f7f9cb1c": "wrappedContract()", +"f7fad9fc": "UpdateState(uint256)", +"f7fb07b0": "getCurrentRate()", +"f7fb4801": "firstRoundWMEnd()", +"f7fc1bd6": "PROMETHEUS_SHIP_PRICE()", +"f7fc7783": "SanityPricing(address)", +"f7fc8a91": "haveShelf(string)", +"f7fca4f4": "setFeeFormula(address)", +"f7fca8d3": "ratePublicSale()", +"f7fce4da": "raffle_addr()", +"f7fd2e19": "TCoin()", +"f7fd3d01": "releaseCarbonDollar(uint256)", +"f7fe2e32": "newBurnableOpenPayment(address,uint256,uint256,string,string)", +"f7fe3477": "assertEq(bool,bool)", +"f7fe6f39": "fibo()", +"f7feeb31": "amendEntry(uint256,bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"f7ff50e2": "transaction_count()", +"f7ffaa5b": "ExTokeA()", +"f7ffbd85": "amountRemaining()", +"f7ffc366": "executeRulingB(uint256)", +"f80176ab": "GetEthereum(address,uint256)", +"f8018a79": "prepend(address,address)", +"f801fae9": "_fCancelDist()", +"f802075f": "requiredEndowment()", +"f8024d10": "getMemberAtIndex(uint256)", +"f80334ae": "selfDestruction()", +"f803bef0": "forceUpdateWinners(address[])", +"f803f97e": "transferAUTOtokens5(address[])", +"f8058bdf": "_CROWDSALE_PAUSED()", +"f805b300": "SALE_4WEEK_BONUS()", +"f8065ed6": "setStopMatchBetting()", +"f8083bab": "simulatedWithdrawal(address,address)", +"f8085c58": "updateStakerRanking(address)", +"f80979d6": "isPreSalePeriod(uint256)", +"f809c826": "managerToFunds(address)", +"f80af907": "roundThreeAmount()", +"f80b3564": "returnAddress(bytes32,uint8,bytes32[2])", +"f80b3cfa": "checkBetLowhigh(uint8)", +"f80bb2a7": "activateSubRound(uint256)", +"f80bbedc": "ethToToken(uint256,uint256)", +"f80d6e90": "GPHToken()", +"f80d9e58": "PVE_BATTLE()", +"f80db825": "AffiliateCoinMultiSigWallet()", +"f80dfdc2": "getTmpWriteTimestamp(bytes32)", +"f80e77d2": "updateETHNZD(uint256)", +"f80ea517": "getDealerInfo(string)", +"f80eba7c": "getTrapid(uint256,uint8)", +"f80f44f3": "right97(uint256)", +"f80f4ea8": "mintAdminApproval(address,address,uint256)", +"f80f5d4a": "EightteenToken()", +"f80f5dd5": "addWhitelist(address)", +"f80f96f6": "returnGanaBeforeSale(address)", +"f80fb7ae": "addCET4To(address,uint32,uint32)", +"f81126a7": "periodICOStage3()", +"f8115814": "TOKToken()", +"f8115891": "getSatTokensOwed(address)", +"f8125093": "set_devcon_map()", +"f8129cd2": "send(address,address[],uint256[])", +"f812f423": "advanceEndTime(uint256)", +"f8132b66": "lockCycle()", +"f813f027": "requestedTokens()", +"f813fcfa": "changeFooIntArrayDynamicSize(uint256)", +"f8140a7e": "standardFee()", +"f814530b": "_allocateETH(uint8,bool)", +"f8147d67": "callTest(uint256,address)", +"f81501f8": "smartContractPriceIsSet(uint256)", +"f815a842": "_getETHBalance()", +"f815e6ab": "kdtFundDeposit()", +"f816f0aa": "gameCancelled(uint256)", +"f8185a13": "getBatches(address)", +"f818d723": "transferPower(address)", +"f8193547": "transferAndExecute(address,uint256,string,string)", +"f81a1860": "killOnUnsupportedFork()", +"f81a95db": "setReferrerFee(uint256)", +"f81b1998": "StopTransferGuard(address[])", +"f81bfa3f": "killThisContract()", +"f81d0292": "setParentAddress(address,address)", +"f81d087d": "prepareLottery()", +"f81d29df": "GambangCoin()", +"f81dc03f": "QuizwinToken()", +"f81de228": "getInvestorPacksAvailable()", +"f81dee03": "set_koef(uint256)", +"f81e8775": "resolveAddress(address)", +"f81ed6ae": "updateStart(uint256)", +"f81f8101": "initializedTime()", +"f81f8bf6": "burnReputation(uint256,address,bytes32)", +"f81ff8e7": "CurrentCoinPrice()", +"f8201a32": "requestLoan(uint128,address,address,address,uint256,uint64,bytes)", +"f821a17c": "getVotingNetworkDetails()", +"f821c423": "sendAirdrops(address[],uint256[])", +"f822372e": "Lab51TestToken()", +"f8225a05": "_setTransferFeeAbs(uint256)", +"f8226dbf": "TC(uint256,string,string)", +"f822841e": "PropertySet(address,bytes32,bytes32)", +"f8228f14": "assignSpartansToBattle(uint256)", +"f8229eba": "addAuthByCode(string,string,string)", +"f8241d7e": "updateAddresses(bytes32[],address[])", +"f8242c32": "addChallenge(address)", +"f824384a": "addInvestorAtID(uint256)", +"f8247299": "getIudexScoreAll(address,address)", +"f8256121": "publicResolver()", +"f8264772": "getTokenss()", +"f828500d": "isValidMessageLength(string)", +"f828c3fa": "scheduleCall(address,bytes4,bytes32,uint256)", +"f828edbe": "excludeWallet(address,bool)", +"f829d1a0": "walletSplitPercentage()", +"f82a4707": "secondsBetweenMints()", +"f82a7496": "giveMeCDP(uint256)", +"f82ab2ec": "PRIVATE_SALE_PRICE()", +"f82b2c31": "confirmByC(uint256,string)", +"f82bffa0": "get_merkle_proof(uint256)", +"f82c09a3": "PresentToCEO()", +"f82c2301": "resignFromCommunity()", +"f82c50f1": "log(uint256)", +"f82de7b0": "mineBlocks(uint256)", +"f82e4a4f": "Cointum(address,address,address,uint256,uint256,uint256)", +"f82ec3e6": "Norm()", +"f82edc1b": "unSign(address,address)", +"f82f396f": "sha(string,string)", +"f82f7a4b": "startDepositExit(uint256,address,uint256)", +"f82fb363": "icoController(address)", +"f82fe152": "PLAYER_METADATA()", +"f83064c7": "transferMintship(address)", +"f830c325": "updateToken(string,string)", +"f830d489": "depositExit(uint256,bytes32,bytes,bytes)", +"f83186f5": "HoryouToken()", +"f831aee6": "kingdomCreationFeeInFinney()", +"f831e962": "getWebStats()", +"f831ebab": "freezeTokens(address,uint256,uint256)", +"f831fe32": "updateApp(string,address,uint256,bool)", +"f833061b": "RESELLING_LOCKUP_PERIOD()", +"f8333e0e": "Aramco()", +"f8339005": "getSaddle(uint256)", +"f833f984": "OSEToken()", +"f8341fca": "BezantToken(string)", +"f8347242": "betsNum()", +"f834db41": "getBeneficiaryManage()", +"f834e212": "setGamePrize(uint256,uint256)", +"f8351daf": "winningCard()", +"f8354a82": "nextArenaTime()", +"f835a686": "setSaleEnd()", +"f835eb1b": "New(string,uint256,uint256,string,string)", +"f83629e0": "EBLCreation(uint256,string,string)", +"f83761e5": "setBAU2(bytes32,address,uint256,uint256)", +"f837e7c1": "battleAdd(uint256)", +"f838b0e9": "get_allowance_expires(address,address)", +"f838ea1a": "setDefaultMaxJump()", +"f838f6dd": "AssignBurnFees(address,uint256)", +"f8392303": "changeTicketMag(uint256)", +"f839407b": "setRateRoundSeed(uint256)", +"f83944ab": "LogEggAcquisition(address,uint256)", +"f839686d": "STSTEST7()", +"f839dc62": "pauseWork(uint256)", +"f839eb1a": "Referral(uint256,address,address,address)", +"f83a4c8a": "claimBet(uint8,uint8)", +"f83a768d": "addDiceRoll(uint256,uint256)", +"f83b5dce": "ec()", +"f83c4f82": "enableCirculation()", +"f83c6f64": "MIATOKEN()", +"f83ce05d": "deauthorizeBurnRequester(address)", +"f83d08ba": "lock()", +"f83d14e6": "buySketch(uint256)", +"f83d69db": "intMin(int256)", +"f83d96c1": "InsuranceAgent()", +"f83e3f5a": "SetProjectName(string)", +"f83e5793": "caged()", +"f83e9a20": "lock_period()", +"f83eb5dc": "forcedRefund(address)", +"f83fcdea": "setPrice(uint256,uint256,address)", +"f84038b1": "getMinimumContribution()", +"f8407634": "checkFunderAccount(address,address)", +"f8408a8d": "Funding_Setting_cashback_time_start()", +"f843545c": "active_payable()", +"f843b1b6": "singleWithdraw()", +"f843d4ec": "setEthereumBalance(uint256,bool)", +"f843dad6": "phaseTwoEnd()", +"f843ea4d": "updatePhaseSupplyAndBalance(uint256)", +"f843ebb1": "runTests(address,address)", +"f844a9f4": "requestArbitration(bytes32,uint256,address,address)", +"f84501e0": "prosperaTokenAddress()", +"f84564f6": "RGTOKEN()", +"f845862f": "newUser(bytes32)", +"f8465534": "removeFromSendAllowed(address)", +"f8469646": "slice(address[],uint256,uint256)", +"f847b16d": "INAToken()", +"f848091a": "claimERC20(address,address,uint256)", +"f8482ca5": "Payroll()", +"f848d541": "withdrawLimit()", +"f84907d7": "tokens_backed(address)", +"f849acb8": "overrideLock(bool)", +"f84a0e74": "BSWCValueCirculateAssets()", +"f84a6519": "requiredDownPayment()", +"f84ad0fb": "ProvideWorkOrder(address,address,address,address,address,uint128)", +"f84af7f3": "isAssetIdOwnerOrApproved(address,uint256)", +"f84b2f51": "disqualified()", +"f84b624e": "ProjectCoin()", +"f84b903e": "distributed()", +"f84bcb11": "setEtherReceivers(address,address[])", +"f84ce165": "setEndStage1(uint256)", +"f84dcb1e": "CFToken()", +"f84ddf0b": "lastTokenId()", +"f84f30c4": "_isCorrectBuyin(uint256)", +"f84f420b": "getRandomNumber(address,uint256)", +"f84fce56": "isDraw()", +"f850a136": "get_lose_coefs()", +"f850a7a4": "_addUser(address,address)", +"f850b7f8": "ERC20YSLToken()", +"f851019a": "BONUS_50_100()", +"f8515cfc": "destroyFactory()", +"f8515eca": "Operable(address[])", +"f8516c6c": "groupPolicyInstance()", +"f851a440": "admin()", +"f8524236": "DeleteImage(uint256)", +"f852b976": "_updateState()", +"f853343d": "addStakeAD(uint256,address)", +"f8536b94": "participated(uint256,address)", +"f8538662": "signup(bytes32,bytes32)", +"f853ee49": "rateUSD()", +"f8542f5e": "getCopaCoreAddress()", +"f8548bea": "quarterFirst()", +"f8548e36": "transfer(uint256,address,uint256)", +"f854d74c": "withdrawCommunityTokens(address,uint256)", +"f856d605": "tokensPerEther()", +"f8570b01": "_newEpoch(uint256)", +"f85771b2": "removeManager(address,address)", +"f8579af8": "test_percPoints()", +"f8588593": "isSuperContract(address,address)", +"f85905ac": "testEqualityUint(int256)", +"f85a253f": "setTEx(address)", +"f85a3dea": "totalAmountOfEarlyPurchasesWithBonus()", +"f85aefba": "testBitsSetFailIndexOOB()", +"f85b2160": "recoverFailedLock()", +"f85c6b3b": "_safeGasCall(address,bytes)", +"f85cb0b5": "Start2()", +"f85cd33e": "timelockTokens()", +"f85d9cc7": "setReviveFee(uint256)", +"f85daa38": "authorityContractAddress()", +"f85e4854": "tokenIssuedPreSecondIco()", +"f85ef43b": "modifyPolicyAttribute(uint8,uint256,uint8)", +"f85f0972": "FoxicoPool(uint256,uint256,address)", +"f85f3b7f": "defaultIcoDeadline()", +"f85f8a3a": "BiTianToken()", +"f8605230": "getNewTeamPositionAndCheck(uint16,uint8,uint64)", +"f860a6d8": "withdrawlBalance()", +"f860e64a": "Lottery(uint256,uint256,uint256)", +"f8615d24": "getBio(address,bytes3)", +"f861d2bf": "MIRC()", +"f86282da": "doStateChanges()", +"f862d780": "addIn(address)", +"f862f6f4": "cap_nuru()", +"f86325ed": "BASE_PRICE()", +"f8635ece": "openSession()", +"f86418e5": "_privateSaleTransferFromOwner(address,uint256)", +"f864bc65": "lastBlock_a5Hash_uint256()", +"f864ca14": "withdrawToWallet(uint256)", +"f864e729": "getAvailableTokenForUser(address)", +"f8651d56": "Prether()", +"f868061e": "setICOExchangeRate(uint256)", +"f8688ddd": "setTargetFeePeriodDuration(uint256)", +"f869b11a": "declareVictor(uint256,uint256)", +"f869b3ff": "AdvisorsFund()", +"f86a3529": "totalStages()", +"f86a3eeb": "MyGaoguans()", +"f86a6334": "setCampaignStartDateById(bytes32,uint256)", +"f86abfd9": "mainSaleRateP4()", +"f86ae8b2": "TokenSaleStop()", +"f86b0669": "burner_addr()", +"f86b5ebc": "DANSSold()", +"f86c4354": "GovcTechnicalGases()", +"f86c8ed3": "blocksUntilNewPotentialWinner()", +"f86ccd41": "amountDeposited()", +"f86cd33d": "noThrowCall(address,bytes4)", +"f86da6ed": "checkTotalBets()", +"f86db133": "forwardWithRevert(address,uint256,bytes)", +"f86e898c": "hasMinCreatedOn(address,uint256,uint256)", +"f8702fe1": "calcFees(uint256,string,uint256)", +"f870849d": "GetBankerPrincipal(uint8)", +"f871cca9": "_check(uint8)", +"f871e0e1": "DutchAuction(address,address,address)", +"f8721a4e": "calcReturnValue(uint256,uint256)", +"f8721f1e": "nAlarms()", +"f8725493": "GCA1()", +"f872bec0": "sn()", +"f872c9dd": "Vote(address,string,uint256)", +"f872f047": "testControlMixItemStoreNotRegistered()", +"f8732d3e": "goodLuck(address,uint256)", +"f8737bc0": "nextUnlockTime()", +"f87394d6": "DonateEther()", +"f873d7e6": "initializeTrueUSD(uint256)", +"f8742a14": "hivePerUSD()", +"f87482e1": "changeMigrate(address)", +"f875c421": "delegateReferalTokens(address,uint88)", +"f876101c": "setConstantsContract(address)", +"f876250a": "getNumClonesInWild(uint256)", +"f876fe1a": "availableHavvens(address)", +"f8779524": "addNewGame(string,int8)", +"f87876c5": "resignFromMatch(uint256)", +"f8788382": "payService(uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"f8789e1a": "_createUnitHelper(uint256,address)", +"f878fcc2": "migrationAllowed()", +"f87aa82f": "_setBuyPrice(uint256)", +"f87aad3e": "SetAllLock(bool)", +"f87aba30": "placeBet(uint256,uint256,uint256,bool)", +"f87c77c0": "getVirtualChannel(bytes32)", +"f87d7236": "addCapFreeAddress(address)", +"f87e7446": "Houton()", +"f87eac7f": "lastBlock_v15()", +"f87f31c3": "mintMiniICOTokens(address,uint256)", +"f87f44b9": "setWebsite(string)", +"f87ffb74": "gameIdCntr()", +"f88001d4": "reopenSale()", +"f8801631": "getTotalDonateWEIInfo()", +"f8806544": "getBioLanguages(address)", +"f880f920": "calcMax()", +"f8811c36": "registerNewAccount(address)", +"f8811efd": "mintMonster(address,uint256)", +"f88218e0": "claimPheonix(address)", +"f8823353": "_isListed(address,address)", +"f88339a5": "CBOPToken(address)", +"f8833efd": "probabilities(uint256)", +"f88351d9": "getDividendsBalance(address)", +"f88371e8": "balancesLocked1Y()", +"f883dfb5": "initializeLevel()", +"f8840c38": "TopforceCoin(uint256,string,uint8,string)", +"f88489a6": "getBidIdsByToken(address)", +"f884e54a": "giveCat(bytes5,address)", +"f88573c8": "Administration()", +"f885eaf2": "returnAllowedTime()", +"f88607e4": "ICO_PRICE2()", +"f88649a1": "getLastWinner()", +"f8868778": "change(uint256[])", +"f886cbda": "reado()", +"f886e9b6": "removeRelation(address)", +"f8887cd3": "TransferToken(address,address,address,address,uint256)", +"f8895cc8": "schema()", +"f8896ea6": "Interim()", +"f8897945": "min()", +"f889ac54": "JP_sum()", +"f88a067f": "registerHotel(string)", +"f88a742b": "insertStage(uint8,uint256,uint256,uint256)", +"f88b07a3": "SoldToken()", +"f88b1f38": "balances6(uint256)", +"f88bf15a": "removeLiquidity(uint256,uint256,uint256,uint256)", +"f88bfe3e": "getCountStages()", +"f88cc87c": "decline(bytes32,bytes32)", +"f88cf827": "getVendorProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"f88d2047": "cancelOrder(uint256,bool)", +"f88d6732": "dice(uint256)", +"f88d88e4": "address_book(bytes32)", +"f88e0b09": "getTransferValueValue()", +"f88e9fbf": "divide(uint256,uint256)", +"f88edaf2": "mMultiSigWallet()", +"f89005e7": "depositWithReference(string)", +"f8900ddd": "godAddress()", +"f89037a9": "TureTreasureChain()", +"f8907491": "isCollectionAllowed(bytes8,bytes8)", +"f890e286": "oracleOf(address)", +"f8910119": "AuctionStarted(uint256,uint256)", +"f8910241": "_getTokenAmountForBuyer(uint256,bool)", +"f892ee05": "subDevTwo()", +"f894d398": "withdraw_asset(uint32,address,uint256)", +"f894d957": "signedApproveCheck(address,address,uint256,uint256,uint256,bytes32,address)", +"f895436a": "setLotteryParameters(uint256,uint256,uint256,uint256,bool)", +"f8956a67": "getBonus(address,address,uint256)", +"f896503a": "getConfigAddress(bytes32)", +"f896680c": "testInitialEtherBalanceShouldBeZero()", +"f8975cd9": "ZanteCoin()", +"f8976385": "RokToken()", +"f897ae8c": "numEmptyIndexes()", +"f897c998": "lastSaleTime()", +"f897ebbc": "setDelegatedFromOperation()", +"f8981789": "setCompliance(address)", +"f8984677": "_calculateMinimumprice()", +"f898e574": "incentiveDistributionDate()", +"f898f8ab": "Escapable(address,address)", +"f8995981": "ABAS()", +"f899b607": "FxdCoin()", +"f899e9f3": "annihilateShares(address,uint256)", +"f89a053b": "setAccountFeeModifiers(address,uint256,uint256)", +"f89a5100": "RGP()", +"f89a77b1": "removeValidator(address,bool)", +"f89be593": "softcap()", +"f89ca001": "revealMove(bytes32,uint256,bytes32)", +"f89e4df3": "saleMilk(uint256,uint256)", +"f89e6512": "CMDCrowdsale()", +"f89ea906": "_refundExcess(address,uint256)", +"f89eae17": "testStop()", +"f89f0e44": "getMyDividendTokens()", +"f89f2a65": "addExchanger(address)", +"f89f3834": "getAccountChartDetailsByEntityId(address)", +"f89f74bf": "MATCHES_PER_ROUND()", +"f89f7cb3": "updateDrawPeriod(uint256)", +"f89fdabc": "TokenTransferContract(address,address)", +"f8a05d13": "transferLd(address,uint256,string)", +"f8a09cd0": "settlementDetails(uint64)", +"f8a0cdee": "addUserRewardPayouts(address,uint256)", +"f8a17d7f": "League(address,uint256)", +"f8a21631": "PrivateCoinSupply()", +"f8a321e1": "checkInvestorContribution(address)", +"f8a34b26": "presale(address,uint256)", +"f8a35b35": "maximumSubscription()", +"f8a39a6e": "test_twoTrueAssertNoMessage()", +"f8a3ce82": "resetSession()", +"f8a40b7d": "requestSetWithdrawalLimit(address,uint256,string)", +"f8a46568": "HashnodeProCoin()", +"f8a47213": "VnixNetwork()", +"f8a4cc33": "withdrawPoly(uint256)", +"f8a4e608": "verifiedKYCAddresses(address)", +"f8a5399a": "settleExtraToken(address)", +"f8a56efd": "balanceOfRaws(address)", +"f8a5a8dd": "getTranchesLength()", +"f8a6172e": "receiveToken(address,uint256,address,bytes)", +"f8a6c595": "constructor(address)", +"f8a6fca8": "confirmImperfectReception(uint256)", +"f8a777f5": "batchCreateInternalDrawings()", +"f8a8fd6d": "test()", +"f8a9972a": "selectWinner20()", +"f8a9c6ae": "golix()", +"f8aa0a59": "updatebalance()", +"f8aa836b": "THRESHOLD2()", +"f8aabbd9": "makeTJs(address)", +"f8ab02dd": "isRefAvailable(address)", +"f8ab745e": "validTransfer(uint256)", +"f8abb93d": "hasVotedOnUpgradePoll(uint8,address)", +"f8abe7f2": "testSandwichOrder(uint256,address)", +"f8ac6570": "tokensBoughtInEarlybird()", +"f8ad69a8": "HetherToken()", +"f8adb686": "earlyBackerSupplyRemaining()", +"f8adccdb": "doPartnerShares(uint256)", +"f8aed03a": "btcsPortionTotal()", +"f8af2514": "IsItConstantinople()", +"f8af56b7": "_finish()", +"f8af9e6f": "setAdv(uint256,string,string)", +"f8b096bb": "setupRegion(uint256,uint256,uint256[],bool,uint8[128])", +"f8b0c0b6": "getTransferStat()", +"f8b10464": "pause_PRIVATESALE()", +"f8b11853": "getGenerationStartAt(uint256)", +"f8b14500": "EmissionProvider(address,address,address,uint256,uint256,uint256,uint256)", +"f8b1db8f": "donationBoxes(bytes32)", +"f8b28c26": "getSecretByHash(bytes32)", +"f8b2cb4f": "getBalance(address)", +"f8b2e259": "lowCapWei()", +"f8b332ad": "onpayInstallment(uint256,address,uint256)", +"f8b367c1": "categoryCap(uint256)", +"f8b3d3b1": "receiveInitialFunds()", +"f8b42f78": "getOrderBookKeys(uint256)", +"f8b45b06": "totalsData()", +"f8b4ab7a": "updateTotalSupply(uint256,uint256)", +"f8b4cfc6": "lock(uint8,uint256)", +"f8b4e080": "changeRateOfToken(uint256)", +"f8b542c8": "_0xPeriheliaToken()", +"f8b608a1": "addTournamentContender(address,uint256[])", +"f8b71c64": "rewardTo(address,uint256)", +"f8b746dd": "BdpEntryPoint(address[16],bytes8)", +"f8b89dfb": "setStep(uint8)", +"f8b91abe": "renounceManager()", +"f8b991e8": "firstRewardPeriodEndBlock()", +"f8ba7317": "sealManualMigration()", +"f8ba8e6a": "getAllowanceAmount(address)", +"f8bb201c": "setCroupier(address)", +"f8bb801d": "getTxIds(uint256,uint256,bool,bool)", +"f8bb9160": "TIGER()", +"f8bbca99": "multivestBuy(address,uint256,uint256)", +"f8bc0505": "left76(uint256)", +"f8bc8548": "getPOOL_edit_31()", +"f8bd4498": "AMOUNT_BASETEAM()", +"f8bd526e": "setCoinageContract(address)", +"f8bd71c7": "unstop()", +"f8bdbb60": "assertEq10(bytes10,bytes10)", +"f8bdc610": "_preProcessProposal(bytes32)", +"f8bdc9dd": "get_shares()", +"f8bf77ae": "managedContracts(uint256,address)", +"f8bfb34c": "getBorderValue(uint256)", +"f8c1c186": "isSale()", +"f8c206b0": "killFaucet(address,address,string,address)", +"f8c25c48": "changeCreatorBalance(uint256)", +"f8c28ce0": "releaseOperation()", +"f8c32ccb": "APG()", +"f8c34050": "priceIncrease()", +"f8c3a293": "ADVISORS_AND_PARTNERS_PER_CENT()", +"f8c439dc": "ETH_EUR()", +"f8c46eff": "FinalizableToken(string,string,uint8,uint256)", +"f8c4892f": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32,string)", +"f8c4ab92": "getNewCumulativeAllowance()", +"f8c52125": "deriveMarketCreatorFeeAmount(uint256)", +"f8c587ac": "paper()", +"f8c5e217": "getSellRatio()", +"f8c64800": "signTwo()", +"f8c65bae": "Bgc(uint256,string,string)", +"f8c75351": "transferViaProxy(address,address,address,uint256)", +"f8c80d26": "privateCreation()", +"f8c8282b": "transfer_storage_ownership(address)", +"f8c8765e": "initialize(address,address,address,address)", +"f8c8de10": "stringToUint8(string)", +"f8c95160": "tokenEmission5(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"f8ca3e22": "CustomCrowdsale(uint256,uint256,uint256,uint256,address,address)", +"f8ca9442": "getBalance_in_token()", +"f8cbd580": "freezeIndex(uint256)", +"f8cc1055": "transferCallership(address,uint256)", +"f8ccb027": "AdminTransferred(address,address)", +"f8ccbd38": "validPurchaseForManual()", +"f8ce3164": "accumulatedFee()", +"f8ce5894": "updatePrizePool(address)", +"f8cf0e1c": "unlockAddr(address)", +"f8d09593": "Kikicoin(uint256,string,string)", +"f8d1f5f0": "setProvider(uint8,address)", +"f8d29219": "fundingStartUnixTimestamp()", +"f8d29f8a": "hasProfilePicture(address,address)", +"f8d3277d": "removeFromWhitelist(address,address)", +"f8d3a26a": "QuasaCoinExchanger()", +"f8d3afa4": "numberOfTransactions()", +"f8d3e256": "publicLockEnd()", +"f8d420a1": "cancelGame(uint32)", +"f8d50542": "addToWhitelist(address[],uint256[])", +"f8d506e1": "TCNYCoin()", +"f8d578f0": "registerContribution(bytes32,address,uint256)", +"f8d599eb": "appendContribution(address,uint256)", +"f8d609b2": "assert_ex(bool)", +"f8d67506": "Shop(uint256,address)", +"f8d6b70a": "setAyantDroitEconomique_Compte_5(uint256)", +"f8d7f790": "COMMUNITY()", +"f8d86bbc": "setNewEndtime(address,uint256,uint256,uint256)", +"f8d93136": "Savings(uint256,uint256)", +"f8d95520": "extUnlockNinja(uint256,uint16)", +"f8d970b6": "checkTemplateRequirements(bytes32,bytes32,bool,uint8)", +"f8d988d6": "toExchange(address)", +"f8daa0ee": "transferGroupCommune(uint256,address)", +"f8dad3db": "MAXIMUMINVESTMENTSALLOWED()", +"f8db188b": "MeetToken()", +"f8db5d07": "unlockKyc(address)", +"f8db71b5": "getStatusContract(address)", +"f8dc11cc": "soldTokenInPublicsale()", +"f8dc5dd9": "removeOwner(address,address,uint256)", +"f8dcbddb": "setStep(uint256)", +"f8dcc3e0": "getLinkStatus(bytes32,address)", +"f8dcc9a9": "potato()", +"f8dd1764": "ClearToken(address,address,address,address,address)", +"f8ddd288": "s31(bytes1)", +"f8de2dfd": "destroyCoins(address,uint256)", +"f8dea17f": "startraffle()", +"f8df084d": "ZUR()", +"f8dfaa1e": "ret_img(uint256)", +"f8e0cc1c": "getPI_edit_32()", +"f8e1badd": "getCrowdsalePrice()", +"f8e1ec40": "CTOcoin()", +"f8e217c4": "getDivBalance(address)", +"f8e29885": "get_game_balance()", +"f8e2d041": "maxNumberMembers()", +"f8e2d4f9": "settleBetVerifi(uint256[],bytes32)", +"f8e2dc6a": "rangeOfBets(uint256,uint256)", +"f8e39177": "intrepidShipMinted()", +"f8e3aa92": "sendNugget(address,uint256)", +"f8e43382": "icoRunningStatus()", +"f8e4500a": "getTokenIssued(address)", +"f8e48488": "returnDevelopersCut(uint256)", +"f8e4ed5f": "escrowDecision(uint256,uint256,address)", +"f8e5521a": "getBlockHashOddOrEven(uint256)", +"f8e58024": "colors()", +"f8e65295": "storeIt(string)", +"f8e6a8cf": "payETH(address)", +"f8e6b331": "jtest()", +"f8e7577d": "FIBToken()", +"f8e76cc0": "_exists(uint256)", +"f8e8b93d": "setTrueUSD(address)", +"f8e8e035": "COSHACNYToken(address)", +"f8ea5daf": "withdrawalEnabled()", +"f8eac151": "Multiply(uint256,uint256)", +"f8ead7cf": "getUserAverageDividendRate(address)", +"f8eb5fc5": "getSalePrice(uint256)", +"f8ebabcd": "_setPixelBlockPrice(uint256,uint256,uint256)", +"f8ebf282": "changeHSShopPrice(uint256,uint256)", +"f8ec4bf2": "setAllowTransactions(bool)", +"f8ec4cd5": "withdrawBidForCollectible(uint256,uint256)", +"f8ec6911": "buyback()", +"f8ec7e83": "test_updateKey_zeroNewKey()", +"f8ecb558": "getFishByAddress(address)", +"f8ed0dfb": "setBuff(uint256,uint8,uint32)", +"f8eee5d6": "returnPaidBackBlock(uint256)", +"f8ef13f4": "EthbetToken()", +"f8ef9a3d": "getPaymentLog(uint256)", +"f8efaf2b": "partner_2_name()", +"f8efc03e": "approveWhitelisted(uint256)", +"f8eff67c": "takeInvest()", +"f8f079bb": "reserveAllocation()", +"f8f122ba": "numCompletedRequests()", +"f8f1939d": "PRESALE_TOKEN_CAP()", +"f8f1d927": "multiERC20TransferTightlyPacked(address,bytes32[])", +"f8f1f151": "testToAddress(bytes)", +"f8f2d5e4": "preIcoTokensCount()", +"f8f32de6": "revealAssertion(uint128,uint256,uint256,uint256,string)", +"f8f46b5f": "getCurrentMinerAddress()", +"f8f53ce7": "nestedSecondAnyToAny(uint256)", +"f8f5cefd": "updateNextMemberPayment(address,uint256,uint256)", +"f8f63375": "YXLToken()", +"f8f6773b": "calculatePurchaseBonus(uint256)", +"f8f6882e": "LavaWallet()", +"f8f6e080": "UnclaimedDividendTransfer(uint256,uint256)", +"f8f7312d": "ChangeBurnBoundsEvent(uint256,uint256)", +"f8f73808": "create(address[],uint256)", +"f8f8a912": "GetBalance()", +"f8f9271c": "changeRegistrationStatusForSilverWhiteList(address,bool)", +"f8f9456c": "CrowdsaleFactory(address)", +"f8f96a55": "lastBlock_v6Hash_uint256()", +"f8f9be36": "settlementRegistration(uint64)", +"f8f9da28": "borrowRatePerBlock()", +"f8fb1d0f": "countUsers()", +"f8fb1f07": "sponsorsOf(uint256)", +"f8fb3366": "stopPreSale()", +"f8fb491f": "setSaleAddress(address)", +"f8fb4ab7": "NBAT001(address,address,address,address,address)", +"f8fbdbb6": "getChkLockedTokens(address,uint256)", +"f8fc16ef": "minWeiToAccept()", +"f8fc6fcd": "QNBAI()", +"f8fc94aa": "refundTransactionAfterExpiryFee(uint256)", +"f8fd72ac": "getCompte_44()", +"f8fdebd3": "weiMaxCap()", +"f8fe2cb0": "toDepositCommitmentRecord(address,address,uint256,uint256,uint256)", +"f8fe2f9d": "KyberGenesisToken(address)", +"f8fe63b0": "getERC721Id(uint256,address)", +"f8ff612e": "WithdrawToHolder(address,uint256)", +"f8ffe42a": "SetCoefRew(uint256)", +"f900592a": "ToggleTransferAllowance(bool)", +"f900b5d6": "getUserTotalPaid(address,address)", +"f9010d19": "joinEvent()", +"f901a18f": "setSale(uint256,uint256)", +"f9020e33": "saleStatus()", +"f9039f33": "update_current_rate(uint256,string)", +"f904b9ff": "GXDHRPToken()", +"f9059832": "isSaleEnded()", +"f906a440": "getInvoice(string)", +"f9079685": "SPCoin()", +"f9081ba2": "safeContract()", +"f908326b": "payRewardForAddress(address,address)", +"f90836df": "_transferFundkeeper(address)", +"f9084729": "pvt_plmt_token_generated()", +"f9094303": "finishVoting()", +"f909640c": "InitialPriceDisable()", +"f909d60d": "getMinimumGasLimit()", +"f90a2f30": "usedNonce(address,uint256)", +"f90b2bfe": "dissolve(uint256)", +"f90b2e74": "setInitialTime()", +"f90c3f27": "FUNDING_PERIOD()", +"f90ce548": "SmartDeposit()", +"f90cf0a4": "Land(address)", +"f90ddee2": "tokenBurners(address)", +"f90e292c": "stage3Start()", +"f90f11b7": "withdrawNVTfromGame(uint256,uint256)", +"f90f3278": "resetUsername(string)", +"f90f4560": "placeBet()", +"f90f4a30": "Matthew()", +"f90fa5dd": "sendTokensToAdvisorsLock(address)", +"f910feaa": "safeTransfer()", +"f912e58c": "setPreCrowdsaleAddress(address)", +"f912ed00": "lockMe()", +"f913a879": "getBidsNum(address)", +"f913b919": "setAssetLevel(uint16,uint256)", +"f9146b2f": "newRefPayStation(address)", +"f9153fbc": "changeHouse(address)", +"f9154476": "__redeemAmount(address)", +"f915cf42": "MINIMUM_BET_VALUE()", +"f9163e64": "lockUpAmountStrOf(address,address)", +"f9172266": "setOldSeelToken(address)", +"f9174551": "cooperativeSettle(address,address,uint256,address,address,uint256,bytes,bytes)", +"f9177aad": "CreateFBL(address,uint256)", +"f9190fcc": "smartSponsor(address)", +"f9191b18": "revealVotes(address,bytes32,bytes32,address[],uint256[],uint256[])", +"f9195a30": "doFunding(bytes32,string,address,uint256,address)", +"f91a545b": "getLossTokenAmount()", +"f91a792e": "decryptHand(string,uint256,uint256,uint256)", +"f91b853b": "upgradeFrom2To3()", +"f91bb05a": "withdrawForeignTokensTo(address,address)", +"f91bcd76": "getMintForReportingParticipantAmountValue()", +"f91c022b": "secondTokenCap()", +"f91c26a5": "dLogN()", +"f91c339e": "calculateTxHash(address,address[],uint256[])", +"f91cb3d6": "proposalAvatar(bytes32)", +"f91d4db7": "TokenTracker(uint256)", +"f91e89db": "maxMonsterHit()", +"f91f681f": "targetFromBits(uint32)", +"f91f87f2": "tokenDistributionDuration()", +"f9215676": "paymentsByCustomer(uint128)", +"f921991c": "transferTokensWithOffsetAndLimit(uint256,uint256)", +"f922501a": "CRYPTOBULL()", +"f9226daf": "LogWithdrawal(address,uint256,uint256)", +"f922da7e": "addTokensToCampaign(bytes32,uint256)", +"f922f216": "disableERC20()", +"f923058c": "get_total_supply()", +"f923b8aa": "setBCY(uint256)", +"f9244a9b": "sendToMinter(uint256)", +"f9249fbf": "initiateTeamVesting(address)", +"f924c276": "fechStageIndexBySnapshotBlock(uint256)", +"f92561f3": "lambosBuildCount()", +"f9261d3f": "setProviderDetails(address,string,string,string,uint8,address)", +"f9268170": "setEdgePerPosition(uint256)", +"f926ac20": "totalInWei()", +"f9271fd3": "changeFundAddress(address)", +"f928655b": "transferA2B(address,address)", +"f92883a2": "mint(address,uint256,uint256,uint256,uint256)", +"f9297a40": "getPrice(bytes,int256)", +"f92a373b": "payForOption(address,address,address,uint256)", +"f92a69ec": "createPolicy(address,uint256,uint8,bytes32,bytes32)", +"f92a73d7": "ICONIQ_SALE_CLOSING_TIME()", +"f92a7595": "fxpMul(int256,int256,int256)", +"f92a79ff": "getExecutor(bytes)", +"f92a9de5": "developmentFunds()", +"f92abed9": "GetEvaluate(uint32,uint8)", +"f92ad219": "initialize(address,uint256,uint256,uint256,uint256)", +"f92b359a": "instrumentManifest()", +"f92b9dc7": "TVThreshold()", +"f92bb8c9": "getConfigUint(bytes32)", +"f92c33f7": "EventLuckyNumberRevealed(address,uint256,uint256,address)", +"f92c45b7": "reservedAmount()", +"f92c6bb6": "getGuessStatus(uint256,uint256)", +"f92c9b47": "TOKENS_FUTURE()", +"f92caf3a": "UploadIMG()", +"f92cd2b2": "airdropTokensBatch(address[],uint256[])", +"f92ec991": "preEtherReceived()", +"f92fff12": "requestEtherToUSD(bool,uint256,uint256)", +"f9307837": "setMaxcap(uint256)", +"f930a3d2": "presaleMint(address,uint256,uint256)", +"f9319a88": "SECOND_TIER_RATE()", +"f931eaef": "untokenizeProperty(string)", +"f931edb4": "ClaimedTokens(address,address,uint256)", +"f93231ba": "GetAskingTokenMutiplier()", +"f932380e": "RoyalPanties(uint256,string,string)", +"f9323a32": "_selling()", +"f9324c5f": "EarlyBird(bool)", +"f9327b9f": "preSaleDeadline()", +"f933b844": "_addToVesting(address,address,uint256,uint256)", +"f9355dca": "functionFour()", +"f93589ce": "didWin(bytes)", +"f935ae8b": "requestExchangeRate(string,string)", +"f935fd94": "WeiTransfer(address,uint256)", +"f937a6eb": "setLockup_investors(address,uint256,uint256)", +"f938075c": "weiToRecoverPreICO(address)", +"f9391d24": "AllPayAuction()", +"f939499d": "backupfarmSingle(address,address,uint256)", +"f9394c10": "getCarrotCredits()", +"f93a2109": "ADT()", +"f93a8d96": "EtheeraCrowdsale(uint256,address)", +"f93acbe9": "SubBankerProfit(uint8,uint256)", +"f93af357": "updateSigners(address,bool)", +"f93b4466": "LudumToken(address,address,address,address)", +"f93ca568": "ActualQueue()", +"f93d029a": "sendICOByOwner(address,uint256)", +"f93de2c3": "updateMinimumQuota(uint256)", +"f93e2d31": "adminEditCity(uint16,string,uint256,address)", +"f93e6715": "freeUntilDate()", +"f93ee24c": "addMinerTokens(uint32,address[],uint32[])", +"f93f1391": "getPokemonBetTimes(uint256)", +"f93f1b02": "incByTwo()", +"f93f7ab5": "saleRateFirstDay()", +"f93f9a76": "WhitelistUpdated(address,bool)", +"f93fc97b": "test_updateKey_increaseNoHint(int256)", +"f940e385": "withdraw(address,address)", +"f9419088": "mintNonFungible(uint256,address[])", +"f941c01a": "getOwnerToken()", +"f942be1c": "endDayOneTime()", +"f9432517": "transferLimit()", +"f94497fe": "testCreateWithParentsForeign0()", +"f944f4c7": "removeUser()", +"f9454f3f": "register(address,uint256,uint256)", +"f9455301": "setHoldTime(uint256)", +"f945b274": "jackpotTokenEthRate()", +"f945ba2d": "avatarFee()", +"f945e8b2": "getCurrentRound(uint256,uint256)", +"f946372c": "TOKENS_SALE_HARD_CAP()", +"f946d61c": "logReputationTokensTransferredCalled()", +"f94789bf": "KungfuToken()", +"f948d276": "changeShare(address,uint256)", +"f948e51a": "implementation2()", +"f949116d": "ICDCap()", +"f94a3223": "submitCro(bytes32,bytes32)", +"f94a360d": "MAXIMUM_BET_SIZE()", +"f94aa8bf": "BliBliToken(address,uint256)", +"f94b97c9": "IntoQueue(address,address)", +"f94c12cb": "cancelPendingChange()", +"f94c81c3": "RobotTradingToken(address)", +"f94c9e13": "getChannelInfo(address,address)", +"f94d2d44": "formatNumber(uint24,uint256)", +"f94d71a0": "unregisterObserver(address)", +"f94d7a10": "setTransferFromWhiteList(address,bool)", +"f94df54f": "importersBanksLetterOfCredit()", +"f94df678": "getAuthorizedEditAgents()", +"f94df97f": "Lotery(uint256,uint256,uint256,uint256,address,uint256)", +"f94e08d0": "queryWaitingTime()", +"f94e45de": "Scaltinof()", +"f94f04e4": "sendPresaleTokens(address,uint256)", +"f94f1e9a": "LifePasswordAI()", +"f94f6910": "POINTS_TO_LEVEL()", +"f9500927": "eth_amount_judgment(uint8)", +"f950db2b": "unfreezeUpgrade()", +"f951410d": "setBcouponTransferCost(uint256)", +"f9514ec9": "ApprovedBy(address)", +"f9515f1b": "addGroup(address)", +"f951f856": "getPeriodTotalReceived(uint256)", +"f952279e": "cancelOffer(bytes32)", +"f952f938": "CreateCreature(uint256,address)", +"f953927e": "openRoom(uint256,uint256,address)", +"f95440ba": "decimalPoints(bytes32)", +"f954501f": "validRouletteBetData(bytes,uint256)", +"f95547fa": "getGameFees(uint256)", +"f9565aec": "NewTokenGrant(address,address,uint256,uint256)", +"f9566392": "WeightedSubmission()", +"f956a1b5": "EthereumPinkToken()", +"f956c139": "getMatchIndex(uint256)", +"f956ecde": "invalidatePurchase(uint256)", +"f956fc52": "didWithdrawCollateral(bytes32,address,uint256)", +"f957417e": "activateToken()", +"f957ddba": "withdrawAllFrom(address)", +"f958530f": "bountyTransferToken(address[],uint256[])", +"f9586eaa": "setScouponAllocationFactor(uint256)", +"f9587219": "SetPetCardDataContact(address)", +"f9589eb3": "onceOuttime()", +"f95918eb": "indexOfUserInfo(uint256)", +"f959300b": "calculateSetupAllowedUntil(uint256)", +"f959fe4b": "admin_set_dividend(address,bool)", +"f95a5504": "buyandearn(uint256)", +"f95a77e5": "MALCoin(uint256,string,string)", +"f95a78fd": "milestone(uint64)", +"f95af64c": "freezeUpdateTokenAccount(address,bool)", +"f95af865": "selfWithdrawBalance()", +"f95afe2c": "getPortion(uint256)", +"f95b4309": "get_selected_player()", +"f95b5a58": "getInitialAnswer(uint256)", +"f95b5e0d": "mintTokensWithReferal(address,address,uint256)", +"f95bbc9c": "activeValueBonus()", +"f95c1a73": "allocationForESCBbyStage()", +"f95e0a54": "update(uint256,string,string)", +"f95e6306": "processInterval()", +"f95fbf67": "registerBarcode(bytes32,string,string,string,string,string,string)", +"f95fe2e7": "AddNewChallenge(uint256,uint256,uint256,uint256,bool)", +"f9609f08": "deposit(address,address)", +"f9614ac5": "content(string,address,uint256)", +"f9616bfa": "AidEvaCoin()", +"f9618364": "DGDb_Auction(address,address,address,address,uint256)", +"f9619147": "InbestDistribution(uint256,address)", +"f9639d80": "getCanAcceptAmount(address)", +"f963aac6": "CONFIG_MAX_PLAYERS()", +"f96512cc": "createPerDay()", +"f9654378": "TokenWithValidityPeriod(string,string,uint8,uint256,address,string,address)", +"f965e32e": "changeValue(uint256)", +"f9660347": "fetchAllBlocks()", +"f9662c8f": "returnInterest(uint256)", +"f966ade7": "repayLoan()", +"f9672443": "getMyEntityParents(uint256)", +"f9672820": "distributeARTTokenBatch(uint256)", +"f9676db4": "purchaseWithDai(uint256,uint256,uint256,uint256,address,bytes)", +"f96777d4": "payJackpotToWinner(address,uint256)", +"f9677e22": "computeSecret(uint256,address,address)", +"f96803d3": "getJobInvoicesByStatus(address,uint256,uint8)", +"f9683828": "coinback(uint256)", +"f968adbe": "maxPerTx()", +"f968f493": "unlockTokens()", +"f96a181e": "getContact(address)", +"f96abf0c": "deleteCrowdsaleContract(address)", +"f96b636d": "GILLIONTOKEN()", +"f96c166c": "isInPresalePhase()", +"f96cecc1": "returnAmount(address,uint256,bytes32)", +"f96d1c94": "closeStage()", +"f96ddf7a": "getSigner(bytes32,uint8,bytes32,bytes32)", +"f96eb003": "migrateManual(address)", +"f96f143e": "RELEASE_GAS_FEES()", +"f96f2fa1": "Shareable(address[],uint256)", +"f9706844": "recommendFundToPlayer(uint256,address,uint256)", +"f970bbfc": "removeDiscountStruct(uint256)", +"f97110a3": "getDeployedBlogs()", +"f9715458": "minActivatedToken()", +"f9718fc8": "returnTokens()", +"f971b054": "StoxSmartToken()", +"f972e2bf": "dateTransferable()", +"f974a1a2": "PURCHASE_AMOUNT_UNIT()", +"f974ae3c": "PrivateSaleExchangeRate(uint256)", +"f975a024": "openNonceId()", +"f975f3a2": "INITIAL_TOKEN_SUPPLY()", +"f976104f": "revokeDelegate(address,address,bytes32,address)", +"f976c371": "ZLHToken()", +"f9778d0d": "fixPlayerCountryId(uint256,uint256)", +"f9781eae": "test_curators()", +"f9782191": "fifth()", +"f978e842": "_addAdmin(address)", +"f97944e0": "CREATE_AMOUNT()", +"f9794660": "finneyToWei(uint256)", +"f9795a95": "minSlippageFactorInBps()", +"f979764d": "blockDotNumber()", +"f97a02fa": "inActive()", +"f97a9d38": "bonusSubscription()", +"f97b392a": "unregisterEmployee(address)", +"f97b65da": "closeShortPosition()", +"f97b7390": "getCurrentDiscountTrancheIndex()", +"f97bf9e4": "close(address,uint256,uint256,bytes)", +"f97c72b1": "_onBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", +"f97cebed": "BellaStandardToken(uint256,string,uint8,string)", +"f97d0591": "parseTimestamp(uint256)", +"f97d8aee": "WriteBond(uint256,address,address)", +"f97e17d9": "payRate()", +"f97ea6fc": "getIndicesWithClaimableTokensForSellers(address,address,address,uint256)", +"f97f8e17": "takeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"f97fa1bd": "FrozenTokenEvent(address,uint256)", +"f98038ee": "howManyDicks()", +"f980a012": "mainSaleRateP1()", +"f980e52d": "clam()", +"f98139be": "getCensuredByCount(uint16)", +"f98157bd": "GetDeadline()", +"f9819884": "toggleDeathConfirmationByProxy()", +"f981aaca": "addDeal(uint256,string,string,uint256,string,bytes32)", +"f981f0c0": "_getAddress(address,bytes32)", +"f9820cc1": "Nothing()", +"f983c0fa": "run1()", +"f98456d2": "unenableTransfers()", +"f9854bfc": "creditsBalanceOf(address)", +"f985779c": "sin(uint16)", +"f985f5fc": "authorized_createCard(uint256,uint256,address,address)", +"f9869165": "ELIPSToken()", +"f9870705": "getProject(address)", +"f98765b2": "BotRemoved(address)", +"f988279c": "isAce(uint8)", +"f9888687": "raiseethamount()", +"f9889f78": "batchTransferFixedAmount(address,address[],uint256)", +"f988da4a": "TopsToken(uint256,string,uint8,string)", +"f9892c28": "ProofOfStableCoin()", +"f98a4eca": "executeVote(uint256)", +"f98b19f4": "publishBatch(uint16,uint16,string,string,bytes3)", +"f98b26a9": "submitProposal(address,uint256,uint256)", +"f98bbc60": "commit(address,bytes32,bytes,bytes32,uint8,bytes32,bytes32)", +"f98c48c1": "setData_18(string)", +"f98cbf76": "closeEXORImports()", +"f98d28bb": "priorityWallet()", +"f98d7c75": "SALE_STAKE()", +"f98dbad0": "hashCompareWithLengthCheck(string)", +"f98e09a6": "listResources()", +"f98e17a7": "PerSellOver(uint16[])", +"f98e87ba": "hashedParameters()", +"f98eaa9c": "ClaimTokens(address,address,uint256)", +"f98f5b92": "setWhitelister(address)", +"f9900bbb": "reinvestGameDividend()", +"f99031a7": "isWhiteList(address)", +"f9907274": "allTokenAddress()", +"f9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", +"f990b73b": "end_crowdsale()", +"f991a43f": "currentTadpoleOwner()", +"f992905d": "deployContracts(uint256,address)", +"f9937c2b": "getCertificateKeys()", +"f9938192": "reenduser()", +"f993bef3": "postDeadline()", +"f993d955": "BTC_SUISSE_TIER_3()", +"f9943133": "MeltingContract()", +"f99450b9": "getEOSIO_USERNAME(uint256)", +"f994789a": "proposeRewardsWithdrawal(address)", +"f994bffa": "addCard(string,string,uint8,string,string)", +"f99514e2": "noInputReturn()", +"f9952ecf": "changeBoat(address)", +"f9953de5": "addOrg(string)", +"f9956289": "PRESALE_OPENING_TIME()", +"f99638a5": "bTest()", +"f9965dbf": "giveBounty(address[],uint256)", +"f996c697": "THRESHOLD1()", +"f9974d9d": "calculateWineSellSimple(uint256)", +"f9977329": "CROWDSALE_AMOUNT()", +"f997e136": "safeAdd(int256,int256)", +"f997f0c1": "_minHouseEdge()", +"f997f7eb": "ojiletoken()", +"f998393c": "Icostart()", +"f9983a12": "GetMyInvestmentBalance()", +"f9991f33": "AddProject(uint256,address)", +"f999ad04": "CreatePCC(address,uint256)", +"f999eead": "donateToDivs()", +"f99b7f0b": "getAllMatches(uint256)", +"f99ca1ee": "productionOf(address)", +"f99ca808": "totalDonationsWithBonuses()", +"f99cc96e": "tokenMaxSupply()", +"f99d18eb": "VIUREFoundersTokenSale(uint256,uint256,address)", +"f99d948f": "gameExpirationTime()", +"f99e574b": "BCEK(uint256,string,string)", +"f99ebb71": "testFailUpdateLatestRevisionEnforceRevisions()", +"f99ec32c": "lastFreezeSeq(uint8)", +"f99ee846": "KEACoin(uint256,uint256)", +"f99f128c": "make_initial_deposit(uint256)", +"f99f977c": "bountyPercentOfTotal()", +"f99fc046": "dEthereumlotteryNet()", +"f99fddae": "isValidUser(address,uint256)", +"f99ff180": "readMail(uint256,bytes16)", +"f99ff4df": "paged(uint256,uint256)", +"f9a01e94": "mintReward(address,uint256,uint256,uint256,uint256,uint256)", +"f9a075dc": "releaseETH(uint256)", +"f9a0fcc7": "RequestEthereum(address,address)", +"f9a191c8": "giveDirectoryTokenAllowance(uint256,address,uint256)", +"f9a2916f": "getInitiated()", +"f9a2cbd5": "INTREPID_SHIP_LIMIT()", +"f9a32246": "_transferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"f9a329a6": "toVault()", +"f9a381e2": "CurrentToken()", +"f9a3e07d": "getObjInfoWithBp(uint64)", +"f9a42b8b": "_updateSpaceshipPrice(uint256)", +"f9a56fd8": "GamersCoin1()", +"f9a57ae4": "notDistributedAmount()", +"f9a596dd": "validatePrograms(uint256[])", +"f9a6da0c": "pks()", +"f9a794ad": "EtherLovers()", +"f9a7a2ef": "named(bytes)", +"f9a7c906": "setBonusTokenRateLevelTwo(uint256)", +"f9a86856": "maxWeiSMSVerified()", +"f9a87d4f": "buyAllAmountBuyEth(address,address,uint256,address,uint256)", +"f9a8b0ba": "latchTotalFci(uint256)", +"f9a8b611": "moveUnsold(address)", +"f9a8c5b9": "teamSum()", +"f9a8e898": "slashReservedUsername(bytes,bytes32[])", +"f9a8f797": "setLatestContract(address)", +"f9a94d43": "finalisePreSale()", +"f9a94ecd": "SellTokenToRaj()", +"f9ab21e2": "indexOf(uint32[],uint32,bool)", +"f9ac71bf": "allowNorthPoleMinting()", +"f9add1b9": "ourLastWinner()", +"f9ae77ff": "supportNewPurge(address,address,uint256)", +"f9aef74e": "PureGold()", +"f9b04f72": "reinvestByProxy(address)", +"f9b07b9b": "TeikhosBounty()", +"f9b16430": "HonestisNetworkETHpreICO()", +"f9b18e72": "RentableProvider(string,string)", +"f9b207f6": "Teepee()", +"f9b220f4": "modify_uint8(uint8)", +"f9b290b6": "PDPCointoken()", +"f9b2b19a": "getCns()", +"f9b2d1ee": "buyForFriend(address)", +"f9b2ec8e": "MinStarIndexAvailable()", +"f9b35ca3": "seed_traded_token()", +"f9b3e7f0": "hashAccountId(string)", +"f9b41139": "getBoxCount(uint16)", +"f9b4257d": "newXcat(bytes32,address,string,uint256,string,uint256,uint256)", +"f9b4d63a": "ownerOff(address)", +"f9b5c633": "ICONClassicToken()", +"f9b646db": "isTokenType(address,uint256)", +"f9b6b0c4": "create(address,uint256,uint256,uint256,uint256)", +"f9b71e73": "tankImposedMax()", +"f9b7fb56": "MarketboardListingBuyback(address,uint256)", +"f9b83323": "getNumberOfChecks()", +"f9b8659f": "detach(uint32,int256)", +"f9b87d40": "setKeys(uint32,bytes32,bytes32,uint32)", +"f9b8d639": "getMemberBonus(address)", +"f9b9a626": "getTotalWithdraws()", +"f9ba134d": "subtractAmount(address,uint256,uint256)", +"f9baa6ec": "freezingAgent(address)", +"f9bacc1c": "totalBonuses()", +"f9bb656b": "crowdSaleState()", +"f9bb84f5": "areWeekdaysOpen(uint256[],uint256[],uint256,uint256)", +"f9bbcc6d": "setMinVoteWeightK(uint256)", +"f9bcb4b1": "symbolLocked()", +"f9bd9338": "onFrozenAccount(address,bool)", +"f9be029f": "disableWhitelistAddress(address)", +"f9be437a": "UpdateTokenAddress(address)", +"f9befdef": "ownerSetGasLimit(uint256)", +"f9bfc71b": "mulUIntValue(bytes32,uint256)", +"f9bffc0f": "phID_()", +"f9c113cb": "ReadContent(string)", +"f9c12dda": "collectAll(uint8)", +"f9c1437e": "test5_searchAcrossNodes()", +"f9c15f94": "sendStableReward(address,address,uint256)", +"f9c1a197": "TransferEthToAddr(address,uint256)", +"f9c29e66": "hashOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes)", +"f9c38ebf": "APTest1()", +"f9c397f8": "VoteInOrganizationScheme()", +"f9c3a68e": "setminimumAmount(uint256)", +"f9c447a9": "PurchasedTokens(address,uint256)", +"f9c4fb94": "addallbuy(address[],uint256[],address,uint256)", +"f9c58926": "_emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", +"f9c5e0aa": "updateAttribute(bytes32,bytes32)", +"f9c6046a": "setForDutchSale(uint256,uint256,uint256)", +"f9c638ea": "globalMin()", +"f9c71f79": "isEquipedAny3(address,uint256,uint256,uint256)", +"f9c78097": "betToken(address)", +"f9c809fe": "addTip(address,bytes32,uint256)", +"f9c811f1": "regWL(address,uint256)", +"f9c8dec3": "KYC_ROLE()", +"f9c926c1": "has(address,address)", +"f9c935cf": "discountValue5()", +"f9c9b9de": "ExperimentalToken()", +"f9cb1b48": "getTotalInvestment()", +"f9cb6d7a": "reservedTokensAreDistributed()", +"f9cbcef0": "setStages(uint32[],uint8[],uint32[])", +"f9cbec43": "transferLandToEstate(int256,int256,uint256)", +"f9cc0605": "getAvailable()", +"f9cc2e66": "setPlatformFeePer10000(uint256)", +"f9cc6fce": "TestIOTACoin()", +"f9cd3ceb": "oracleFee()", +"f9cdbc4e": "paySmartContract(bytes32,uint256[])", +"f9ce67dd": "compareToIgnoreCase(string,string)", +"f9ce733b": "Pets()", +"f9ce7813": "transfer(address,address,uint256,address)", +"f9cee7b5": "totalScammedQuantity()", +"f9d09126": "updateTopicAssetClass(bytes15,bytes15)", +"f9d0fed4": "allowanceProvider()", +"f9d13bf0": "validate(address[4],address,uint256[12],uint256,uint256)", +"f9d176b4": "setManualWithdraw(bool)", +"f9d20590": "distributeFinancialAward(bytes12,int256,bytes12)", +"f9d38868": "exy()", +"f9d3b4e9": "obol()", +"f9d429ee": "NO_BATTLE_LOG()", +"f9d49797": "whitelistMaxWei(address)", +"f9d53ac8": "addPaper(address)", +"f9d593c8": "setNAVAdmin(address,address)", +"f9d5b4bb": "LogContribution(address,uint256,uint256,uint8,uint8)", +"f9d5e08b": "adminUsrCount()", +"f9d630a1": "TUI_ALLOCATION()", +"f9d6de48": "WALLET_LB_COMMUNITY()", +"f9d70200": "buyCrystal(uint256,uint256)", +"f9d75f25": "editDailyLimit(uint256)", +"f9d7f0fc": "CSES2()", +"f9d80dcd": "getInstanceImplementation(bytes32)", +"f9d8241c": "renterExists(address)", +"f9dbe5e9": "_updateStage(uint256,uint256)", +"f9dc0793": "getCustomerBankName(string)", +"f9dc5d43": "getAllPayment(uint256)", +"f9dca989": "becomeOwner()", +"f9dcef27": "cityPoolCutPercentage()", +"f9df65eb": "nullified()", +"f9df6c33": "calculateTokensAmount(uint256,bool)", +"f9df816a": "changeWhitelistPrivateStatuses(address[],bool)", +"f9dfa4a3": "setMaximumEtherToAccept(uint256)", +"f9dfb361": "preSaleStartBlock()", +"f9dfcfcc": "transferContract(address,address,address)", +"f9dfd0a5": "Token(address,string,string,uint8,uint256)", +"f9dfea54": "relockGroup(uint256)", +"f9dfecb9": "preICOTokens(uint256,uint256)", +"f9e0093d": "multiWithdraw(address[])", +"f9e05ed9": "sha(uint128)", +"f9e13de4": "doMigration(uint256,uint256)", +"f9e19fa5": "resetState()", +"f9e1ceda": "getBalancePercentRate()", +"f9e24dc2": "balanceOfMineral()", +"f9e27106": "investmentEntryCost()", +"f9e37733": "_createUnicorn(address)", +"f9e3c1e9": "setNextAddr(address)", +"f9e40a21": "allWon()", +"f9e4fb34": "fundTransferIn(address,address,uint256)", +"f9e51b1d": "withdraw(uint128,string,uint32)", +"f9e54282": "dropUsername(bytes32)", +"f9e68952": "createDrone()", +"f9e73764": "airdropExecute(address,address[],uint256)", +"f9e84395": "unexempt(address)", +"f9e856ae": "oldE4RecycleBin()", +"f9e8ad7c": "isPreIcoStage()", +"f9e9d34a": "getUserRefBalance(address,address)", +"f9ea3a18": "getHTLCSpendingData(uint256,int256,bytes32)", +"f9ea8839": "AlphaMarketCoinExchanger(address[],address)", +"f9eab09f": "setChickenHunt(address)", +"f9eb4ee2": "APPROVAL(address,address)", +"f9eba935": "debit(string,uint256)", +"f9ebdc8b": "isConfirmed(bytes32,address,address)", +"f9ec2edb": "startNewBoss()", +"f9eec610": "next(string,string,string,string,string,string)", +"f9eee901": "setClaimTreshold(uint256)", +"f9ef04be": "free(address,bytes32,uint256)", +"f9ef2c7d": "HTC()", +"f9ef33ff": "walletOEM()", +"f9ef66f5": "getRoundWinnings(address,uint256)", +"f9f03556": "ERC20(uint256,string,string)", +"f9f0507f": "timeLockedStart()", +"f9f14f6a": "library14function()", +"f9f16ef2": "numberOfTokens()", +"f9f20540": "setInvestTokenLimit(uint256)", +"f9f22d6c": "createNamespace(string,address)", +"f9f286f9": "setMultisigMain(address)", +"f9f2c161": "setGod(address)", +"f9f2c93c": "santaClaus()", +"f9f2ecb6": "getExtendAddr(address)", +"f9f39a9c": "initialize_bannable(address)", +"f9f411d8": "userTokens(address,uint256)", +"f9f447eb": "getCallDataHash(bytes32)", +"f9f53be0": "ChangeAmountPrice(uint256)", +"f9f5e8c8": "changeToCoin(address,address,uint256)", +"f9f71423": "increasePlayersGooProduction(uint256)", +"f9f73135": "get_heap(uint256)", +"f9f7d9de": "TOTAL_PERCRENTS()", +"f9f81a73": "setAccountCoords(string)", +"f9f86baf": "airdrop(address[],uint256[],uint8)", +"f9f8b586": "JMToken()", +"f9f8bdb7": "currentRate()", +"f9f8f895": "switchOn()", +"f9f90a60": "durationInBlocks()", +"f9f92be4": "blacklist(address)", +"f9f94bc6": "bioUnlock(bytes32,uint8,bytes32,bytes32)", +"f9fae4f7": "TOKEN_CREATION_CAP()", +"f9fafb59": "LogBidFinal(address,uint256,uint256,uint256)", +"f9fb12ad": "TestXRPCoin()", +"f9fb3c95": "transferBonus(address,uint256)", +"f9fb452f": "productID()", +"f9fbd554": "test(string)", +"f9fc0d07": "processRewards()", +"f9fc4816": "withdrawAmountETH(uint256)", +"f9fd41d8": "setRevolution(address)", +"f9fd5250": "DOW_MON()", +"f9fef3b3": "withMod(uint256)", +"f9ff1378": "solicitaDevolucao()", +"f9ffabca": "NewAdmin(address,address)", +"fa003b2e": "SCCAIToken(address,address)", +"fa006d87": "newPlaySeed(address)", +"fa009e36": "xxx7Coin()", +"fa0196eb": "OsherCoinAward(uint256)", +"fa01dc06": "revoked(address)", +"fa01dd3c": "BRTToken()", +"fa02955f": "registerMeOnEther(string)", +"fa02c4b7": "approveTransfer(address,uint256)", +"fa02dcc1": "TankWithdrawAll()", +"fa030ef1": "baba()", +"fa03446c": "tokensFromEther()", +"fa036370": "Athereum()", +"fa043b0f": "checkSig(bytes32,bytes32,uint8,bytes32,bytes32,address)", +"fa044862": "requireOk(bytes1)", +"fa048a18": "addHpbNode(address,bytes32,bytes32)", +"fa05064e": "setBountyDistributionContract(address)", +"fa058795": "logAdr(address)", +"fa061d48": "isReadyToSynthesize(uint256)", +"fa066fbd": "AccountGasLimitReached()", +"fa07153a": "commitVote(uint256,bytes32,uint256)", +"fa097028": "_burnRemainingTokens()", +"fa09cb30": "PatCoin()", +"fa09e630": "withdrawAll(address)", +"fa0a6cfe": "AFEBToken()", +"fa0a8f26": "calculateNextPrice(uint256,uint8)", +"fa0b5e55": "registerUser(address,uint256)", +"fa0b6211": "hasRoundEnded()", +"fa0bad28": "onholdBalance()", +"fa0bc8e1": "ownerOfSocialIdentity(uint256,uint256)", +"fa0c3034": "GenoPay()", +"fa0c498e": "refundJobSponsorships(uint256,uint256)", +"fa0c76c5": "calcUserDivsAvailable(address)", +"fa0cdc81": "getManifestById(bytes32)", +"fa0d5b52": "BerryLakeCoin()", +"fa0d80fc": "icoDenominatorPrice()", +"fa0ff39f": "setDummy(uint256)", +"fa1026dd": "getCommitment(address)", +"fa107a41": "Cajutel(uint256,string,string,address,address,address,uint256,uint256)", +"fa113488": "setCMTForGas(uint256)", +"fa113773": "BlackSeaCoin()", +"fa1152f3": "MoregainCoin(uint256,string,string)", +"fa11c471": "holdsValidLicense(address)", +"fa12d782": "openGame()", +"fa130b68": "developer_edit_text_price(string)", +"fa133fdb": "massTransferTokens(address[],uint256)", +"fa13af97": "InServiceToken()", +"fa140e3d": "MitToken()", +"fa1456a9": "transferKROContractOwnership(address,string)", +"fa147e5e": "remainingTokensAndCost()", +"fa14df6b": "getChangeRecipientFee()", +"fa169ec8": "getHashDigest(string)", +"fa16ab6c": "Platform()", +"fa16c53b": "DiscrashCredit()", +"fa17a19d": "forceStand()", +"fa188644": "whitelist5Addresses(address[5])", +"fa188df2": "addMinter(address,address)", +"fa1896f4": "getOneTokenInWei()", +"fa18dd2b": "isSetupMode()", +"fa193a6e": "Voter()", +"fa198656": "roundingPercent(uint256,uint256,uint256)", +"fa1a5f59": "soldAmount()", +"fa1acb5c": "_startTime()", +"fa1ad09e": "fundTransferOut(address,address,uint256)", +"fa1b3eb8": "gamesOf(address)", +"fa1ba1e1": "burn(uint256,bool,uint256,uint256)", +"fa1bde89": "test_set_get_OraclizeCallback()", +"fa1c594e": "disableRegistryUpdate(bool)", +"fa1ca37e": "_transferCeo(address)", +"fa1cee57": "approveKNCRateRange(uint256)", +"fa1d9cf8": "getZoneTeller(bytes2,bytes16)", +"fa1db1e7": "SendResult(uint64,bytes32,bytes32)", +"fa1e4fcb": "holdoverBalance()", +"fa1eae3c": "newSchellingRound(bool)", +"fa1f919f": "pre_enddate()", +"fa2073ad": "getAnswerCounts()", +"fa208cc5": "KickTheCoin()", +"fa20e77d": "burntTokens()", +"fa212d37": "getCurrentMaximalDeposit()", +"fa2299ee": "soldSupply()", +"fa23023b": "lockSales()", +"fa233620": "RENTALTOKEN(uint256,string,string)", +"fa24e7a0": "xyjtoken(uint256,string,string)", +"fa255179": "getCheckResultMessage()", +"fa25fd57": "settleOrder(uint256,uint256)", +"fa26db7e": "setMinAllowedReservingPercentage(uint256)", +"fa26fe32": "delivery(string)", +"fa27e070": "removeProxyForSender(address,address)", +"fa28a6b6": "checkTrainingPrice(uint256,bool)", +"fa28ba0d": "validateReleaseLockfileURI(string)", +"fa29141b": "minSellAmount()", +"fa292c44": "BitcoinPower()", +"fa2a68d2": "QToken()", +"fa2a8997": "isReleased()", +"fa2a9be6": "createPoll(bytes,uint16,uint256,uint256)", +"fa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", +"fa2af9da": "platformWallet()", +"fa2b579d": "at_percentile(uint256)", +"fa2b76e2": "tokenReserved2()", +"fa2c7f9b": "getLender(uint256)", +"fa2cac28": "rejectEthTransactionRequest()", +"fa2cc19e": "calculate_price(uint256,uint256)", +"fa2d7efa": "AdlasToken()", +"fa2d84b6": "addBlacklistAddress(address,address)", +"fa2dedec": "SATS_TO_TOKENS()", +"fa2e9db8": "sunsetWithdrawDate()", +"fa2f29b6": "claimEOSclassicFor(address)", +"fa2f3e9a": "numAccountsInfo()", +"fa2f7a8f": "renounceContract()", +"fa307fcb": "sendMultipleMessages(address[],string,string,uint256)", +"fa309571": "delegateGetTokens(address,uint256)", +"fa30b251": "buyTicket(string)", +"fa314c67": "newAtomFee()", +"fa31b371": "deletePublicKey(bytes32,address)", +"fa31e684": "releaseTokensSaleCount()", +"fa3276bc": "isModifiedInRound(address,address,uint64)", +"fa332152": "giftSendIndex()", +"fa33bcf3": "isInList(address)", +"fa34b345": "walletsDelegate()", +"fa34b37b": "bonusPreviousOwner(uint256,uint256,uint256)", +"fa34da5e": "getTarget(bytes32,bytes4)", +"fa352dec": "tokensToEthereum_(uint256,uint256)", +"fa3559f7": "attestToContract(uint256,bool,string)", +"fa355d1c": "_distributeFloatWalletToken(uint256)", +"fa358c24": "refundPaused()", +"fa35a310": "Contributed(address,uint256,uint256)", +"fa35aa94": "deathData_f10()", +"fa36316e": "setFiatPerEthRate(uint256)", +"fa368e6d": "isWMSale()", +"fa369e66": "batchTransfer(bytes32[])", +"fa3754ca": "getCurrentDiscountRate()", +"fa37668f": "createContract(bytes32,bytes20,bytes20,uint256,uint256,uint256)", +"fa391c64": "isCompleted()", +"fa3a0f78": "getCreateMarketController()", +"fa3a3a7e": "DemoPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"fa3b8f2c": "AdvertisementPayout(uint256)", +"fa3c6320": "intercrypto_recover()", +"fa3c8251": "TimeDecayingTokenEnvironment(uint256)", +"fa3c9bbc": "getHostRoomLists(address,address)", +"fa3e9b45": "setCreditDao(address)", +"fa3ed04d": "getDArbitraryData(bytes32,bytes)", +"fa3f1e99": "testBlobStoreRegistered()", +"fa3f5acf": "sendMsg(string,string)", +"fa3f998c": "redeem_deposit(uint256)", +"fa3fa196": "transferCreator(address)", +"fa404e34": "revokePoolRole(address)", +"fa407c19": "NRCToken()", +"fa40ce34": "addAllowedContracts(address[])", +"fa4125f7": "activateNextRound(uint256)", +"fa41fd32": "lastCallstopPreICO()", +"fa42f3e5": "map_address(string)", +"fa448f7a": "_handleAffiliate(address,uint256,uint256,uint256)", +"fa45858e": "changeSellPOPPrice(uint256,uint256)", +"fa45aa00": "executeWithdrawal()", +"fa461f33": "setValueStep2(uint256)", +"fa462e95": "mintStepPrice()", +"fa46b8b4": "SellRateChanged(uint256,uint256)", +"fa472bad": "SkillCoinTest()", +"fa47c564": "confirmERC20(bytes32)", +"fa48b4bf": "mintEtherBro()", +"fa48dfcd": "setLockup_jiedians(address,uint256,uint256)", +"fa49841d": "ownerAdmin()", +"fa49a13a": "Vulgus()", +"fa4a2e36": "ShyneTokens(uint256,string,string)", +"fa4a80f1": "Matrioska()", +"fa4ac15d": "withdrawAffVault(uint256,string)", +"fa4bb165": "setRoundNumber(uint256)", +"fa4c4271": "reClaimIFS(address)", +"fa4c5dc0": "addMessage(string,uint8,uint8,uint8)", +"fa4d0c3c": "lockDeadline()", +"fa4d300d": "ICOSplit()", +"fa4d3698": "setOwners(address[])", +"fa4de094": "KPOP_ARENA_CONTRACT_ADDRESS()", +"fa4e5e5a": "notify(uint8,string,string)", +"fa4f34a0": "GetChallengeTimings(uint256)", +"fa4f5511": "campaignUrl()", +"fa4f96c4": "ActivatedEvent(bool,bool)", +"fa4fb369": "addPreSaleTokens(address,uint256)", +"fa4feb65": "icoTokens()", +"fa5007cc": "getHold(uint256,bytes6)", +"fa502cf7": "addBidToStack()", +"fa5064be": "submitProposal(uint256,uint256,uint256,uint8,uint64,string)", +"fa5083fe": "getMaximumBetRate()", +"fa508d3e": "dnnToken()", +"fa509eda": "nextonetogetpaid()", +"fa509ff7": "collected_eth()", +"fa50b335": "IS_TIER_CONTRACT_MAGIC_NUMBER()", +"fa518054": "_addToWhitelist(address)", +"fa51a2bf": "setSupplyLock(bool)", +"fa51ae86": "RATE_CORNERSTONE()", +"fa5201e1": "LuckToken(uint256,string,string)", +"fa5252e4": "pbWinner()", +"fa52bcb3": "ICSTCrowSale()", +"fa52c7d8": "validators(address)", +"fa52caf6": "HECoin(address)", +"fa53bb1b": "setauctionother(uint256)", +"fa544161": "getOwner(address)", +"fa550659": "approvalForAll()", +"fa552d8e": "withdrawSale1()", +"fa556996": "TimeClock(string,uint256,uint256,uint256,uint256)", +"fa55afe2": "setABIHashForMod(bytes32,bytes)", +"fa55f4d4": "modifyEligibility(uint256)", +"fa566ddd": "doAllowance(address,address)", +"fa56780d": "getPurseContributions(uint256,uint256)", +"fa57e2ab": "resolved(bytes32,bytes32,uint256)", +"fa57ff82": "ownerSetJackpotToken(address,uint256,uint256,uint256)", +"fa58f510": "getFeeMake(uint256)", +"fa5919a8": "DAOSecurity(address,address,bytes32,uint256,uint256,uint128)", +"fa59d199": "removeHash(string)", +"fa5a1db6": "save(uint256,uint256,uint256)", +"fa5b344e": "assignSubMember(address,uint256)", +"fa5ba0f9": "stepPrice()", +"fa5bbcd2": "crowdsaleCreators(address)", +"fa5bc660": "offerDiscipleVend(uint256,uint256)", +"fa5be8f8": "setBonus(uint256,uint256,uint256)", +"fa5bfc1e": "claimedRewardHook(uint256,address,address,uint256)", +"fa5c0c70": "getSaleOrder(uint256)", +"fa5c5857": "createStakingContract(uint256,bool)", +"fa5cd179": "join_address(uint256)", +"fa5cdc2b": "OLTestSynatax()", +"fa5da441": "incrementedIndexOfName(string)", +"fa5e288c": "ABBC()", +"fa5ed321": "_pointToResolverAndResolve(bytes32,address)", +"fa5ef276": "getVotedData(address,uint256,address)", +"fa5f090b": "SmartIdeaTokenERC20(uint256,string,string)", +"fa5f2d80": "AOG(address,address,address,address,address,address,address)", +"fa607442": "timeOneSession()", +"fa608890": "withdrawRemainingRewards(uint256)", +"fa60a16e": "serviceAddressOf(address,uint256)", +"fa60fb0b": "getTxRoot(uint256)", +"fa6140dd": "weekPotLeader()", +"fa6171e4": "superMint(address,uint256)", +"fa62a1ff": "revokeAdminStatus(address)", +"fa640427": "setPermissionsProvider(address)", +"fa64dffa": "getDestQty(address,address,uint256,uint256)", +"fa65d336": "hasFreePlaces()", +"fa6669b7": "updateAccountData(uint256,uint16,bytes32,uint256,uint16,bytes32)", +"fa667907": "changeOwnerSharePerThousandForBuying(uint256)", +"fa66be4e": "countryLengthOf()", +"fa66e143": "employeeSignsToESOP()", +"fa671e5f": "deathData_v19()", +"fa671f6b": "validPurchaseIco(uint256)", +"fa6799f2": "revokeVesting(address,uint256)", +"fa67ae5a": "setBlockDelay(uint256)", +"fa67ba6f": "getSecondsTimeLockedByTx(uint256)", +"fa6878a7": "setBAB(bytes32,address,bytes)", +"fa68829a": "UnKoin()", +"fa68b4ce": "lookupISO3116_1_alpha_3(bytes)", +"fa691a26": "totalRoundsPassed()", +"fa695dd7": "createItem(string,uint256,uint256,bool,bool,string,uint256)", +"fa696d98": "ART_FOUNDATION_ADDRESS()", +"fa69ede9": "setNewRatesBase(uint256)", +"fa6a0712": "setOwnerPrice(uint128)", +"fa6ab63b": "getTokenSum()", +"fa6ac98e": "test_0_testBasicTxProposal()", +"fa6ad04c": "PRCT_BOUNTY()", +"fa6b129d": "tokenGenerationEvent(address)", +"fa6b535d": "deleteContact(bytes32,address)", +"fa6bdbf8": "_transfer(address,address,uint256,bytes)", +"fa6d373c": "LeaderHash()", +"fa6d8f1f": "callAndReward_1(string,string,uint256)", +"fa6e01a2": "ARTCToken()", +"fa6e5776": "haveExtension(string)", +"fa6ec547": "registeredAddress(address,bool)", +"fa6f3522": "EthimalFounderEggs()", +"fa6f3936": "isModerator(address)", +"fa6fc037": "prepareToBreed(uint256,bool,uint256,bool,uint256)", +"fa6fcc50": "_startBetBlock()", +"fa70466e": "getMonsters(uint16)", +"fa70f6da": "STRATToken()", +"fa712f71": "isBattleboardLive(uint16)", +"fa713023": "IEICrowdsale(uint256,uint256,uint256)", +"fa725ea3": "requireValidAddress(address)", +"fa7299f7": "getOwnerVirusLength(address)", +"fa729b5b": "CNY_Omnidollar()", +"fa72c53e": "providerFeePerEth()", +"fa73af0b": "GRANT_BATCH_SIZE()", +"fa73cb37": "ptxToken()", +"fa73f074": "useAddr()", +"fa76b253": "getAddressForAccount(string)", +"fa779bd6": "checkBalanceTier(address)", +"fa77c074": "shaThree(string)", +"fa785263": "checkRemoveOwnerArgs(uint256,uint256,uint256)", +"fa785928": "_revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", +"fa7860da": "etherHardCap()", +"fa78b172": "drawSecondaryWinners()", +"fa796124": "BitLumensCrowdsale(address,address)", +"fa796fa1": "CryptoZoo(address,address,address)", +"fa7a6cd3": "developer_string_symbol(string)", +"fa7ae620": "cryptaurReserveFund()", +"fa7af6fe": "investInternal(address,address)", +"fa7c31af": "withdrawCommunity(uint256)", +"fa7ca492": "preICOStats()", +"fa7d68f1": "getAccountInfo(uint256,uint256)", +"fa7e4eaa": "BELIBELA()", +"fa7e8f7c": "EtradeMarketsCoin()", +"fa7f6b96": "tokensLocked(address,uint256)", +"fa80918b": "computeNodeId(bytes,bytes)", +"fa81b200": "masterOfCeremony()", +"fa825185": "getChargers()", +"fa82b674": "ETHContract()", +"fa82e9fc": "organizer1()", +"fa83c01b": "setStopSendWebGift(bool)", +"fa848fb0": "startDayOneTime()", +"fa849243": "targetDiscountValue1()", +"fa85d33e": "istransferAllowed()", +"fa878e8f": "TOKEN_RATE_10_PERCENT_BONUS()", +"fa885329": "setTableSize(uint256)", +"fa885868": "addPreminer(address,address,uint256,uint256)", +"fa888c74": "callIt(uint256)", +"fa89401a": "refund(address)", +"fa894c08": "balanceWosPoolForSecondStage()", +"fa89ae7d": "ownerTransferEth(address,uint256)", +"fa8a3c1c": "rateC()", +"fa8a975d": "forcedTransferAll(address,address)", +"fa8ad6b9": "unsetIsRentByAtom(uint256)", +"fa8b72ff": "setBountyTokensWallet(address)", +"fa8b9a4b": "GetApplicant(uint256)", +"fa8dc33a": "checkRecordExists(bytes)", +"fa8ec0b2": "_transfer(address,address,uint256,string,uint256)", +"fa8edab6": "checkBalance(address,address,uint256,uint256)", +"fa8fc08d": "GxCoin(address)", +"fa8fd2b5": "LockRequestable()", +"fa90693b": "isBlockRedeemed(uint256)", +"fa912743": "feesStrategy()", +"fa922e66": "pickaxe()", +"fa923d10": "FutureCoin()", +"fa92fb6e": "IssueRejected(uint256)", +"fa93019c": "getBlocks(uint8,uint8)", +"fa93185f": "LockedDayRemoved(address,uint256,uint256)", +"fa93f883": "getMinute(uint256)", +"fa967415": "nextUpgradeMaster()", +"fa968eea": "minBetAmount()", +"fa96a49e": "totalSupplyUpgraded()", +"fa9768c9": "getOnMintAmountValue()", +"fa9789cf": "trainKitty(uint256)", +"fa984da8": "SujiToken()", +"fa985a2f": "p_update_mNewPlotDevPercent(uint256)", +"fa9907ad": "pay500Winners(uint256)", +"fa99d7ae": "enterDungeon(uint256[4],uint32)", +"fa9a4c35": "getPOOL_edit_21()", +"fa9acb05": "addressInArray(address,address)", +"fa9aecfb": "isUnowned(uint256)", +"fa9af30f": "getGoldXchgRate()", +"fa9b44b7": "PendingETHs(address[])", +"fa9ba8b4": "FunFaceToken()", +"fa9ce7e7": "moveTokensFromStockToExchange(uint256)", +"fa9d2352": "hasRequiredStateChanges()", +"fa9df423": "setShp(address)", +"fa9e6f11": "Exafire()", +"fa9e82cf": "uploadStartlist(uint256[])", +"fa9f117f": "setNextRoundMaxDonors(uint256)", +"fa9f245c": "CappedToken(uint256)", +"fa9fd8b2": "incremental(uint256,uint256)", +"faa06c06": "GetCityName(address)", +"faa0a264": "burnToken()", +"faa10f43": "require(bool)", +"faa1a8ff": "getOwnedBot(address,uint256)", +"faa3981a": "boolMemoryArray(bool)", +"faa458f4": "submittedHashes(bytes32,uint256,uint256)", +"faa51485": "isValidTraderAddress(address)", +"faa5369d": "getBorrowingItem(uint256)", +"faa5c564": "register(uint256,uint256,uint256)", +"faa5ca93": "erc20Buy(address,uint256,string,string)", +"faa5d0ea": "updAmountBonusEnabled(bool)", +"faa5e124": "ref_percent()", +"faa5e74a": "TokenPurchaseWithGuarantee(address,address,uint256,uint256)", +"faa62d3f": "setPercentageToLock(uint256)", +"faa679bf": "TraceToken()", +"faa7fc61": "bustRange()", +"faaa4d22": "distributePCY(address[],uint256,uint256)", +"faaa58da": "RemovePauser(address)", +"faaad90f": "getBlocksUntilNextRound()", +"faaad91d": "convertToPrimordial(uint256)", +"faab806f": "emergencyStopSale(address)", +"faab9d39": "setRegistrar(address)", +"faabc195": "updateContract(uint256,address,uint256)", +"faac90ec": "StorageFactory()", +"faacf0fd": "toChar(bytes1)", +"faad4a49": "setDividends(uint256,uint256)", +"faad6eb5": "updateAgent(address,bool)", +"faadb14a": "getCustomerTxPaymentKWh(address,bytes32)", +"faae4c17": "usernamesToAddresses(bytes32)", +"faaebd29": "Fight_Results(uint256,address,address,uint128,uint128,uint32,uint256,uint32,uint256,uint8)", +"faaf027b": "getAddressTokenSaleId(address,address)", +"faaf1921": "updateEthToCentsRateCycleStarted()", +"faaf71e6": "checkSoftCapOk()", +"faafa08f": "CatICO(address)", +"fab0568c": "GIFTToken(uint256,string,uint8,string)", +"fab14b36": "saleBalance()", +"fab18075": "numLots()", +"fab2c469": "getSlots()", +"fab2cb36": "totalSharesIssued()", +"fab2e425": "GAMESPLAYED()", +"fab2f86b": "stopVoting()", +"fab37154": "setMintAddress(address)", +"fab3be9a": "WETCToken()", +"fab3ebb1": "NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID()", +"fab4087a": "parse(bytes)", +"fab425e7": "external_to_internal_block_number(uint256)", +"fab43cb1": "getPongAddress()", +"fab4969f": "amountRaisedPhase()", +"fab4cb39": "getWarrantyPrice(string,uint256,uint256,uint256)", +"fab55a49": "addr_forge()", +"fab57a21": "truebitAddress()", +"fab5ccb1": "submitBlock(bytes32,bytes)", +"fab67bb6": "hasNotEnded()", +"fab825c6": "setCanvasName(uint32,string)", +"fab88d39": "STS(uint256,string,uint8,string)", +"fab8cbe4": "splitTokensBeforeDistribution(uint256)", +"fab93805": "ballotLog(bytes32[2])", +"fab9b243": "isUpgradable(address,address,string)", +"fab9caaf": "JungleScratch(address)", +"fab9f0c4": "DigiWillToken()", +"faba1f16": "_createPow(string,address,uint256,uint256,uint256,uint256)", +"fabacf0d": "Yetxkd1601()", +"fabae696": "updatefxFee(uint256)", +"fabb25fa": "x_constructor(address)", +"fabb7952": "setPaintingName(uint256,string)", +"fabbdc5b": "COIN_COST_ICO_TIER_2()", +"fabc1cbc": "unpause(uint256)", +"fabcc880": "update(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"fabde80c": "coinBalance(address)", +"fabe1416": "canClaimToken()", +"fabec44a": "getCurrentVersion()", +"fabee62d": "taxTo(address)", +"fabefafe": "computePayout(uint256,address)", +"fabf00c3": "NewGrant(address,address,uint256)", +"fabf5ea5": "maxInvestedLimit()", +"fabf657a": "approveAddress(address)", +"fabfbefb": "lastPayoutIndex()", +"fac08874": "BPTestCoin()", +"fac20ab8": "getGameWinner(uint256)", +"fac2548b": "updateMember(address,uint256,bool,string)", +"fac28349": "setInvite(address,uint256,uint256)", +"fac2b5f8": "setEplay(address)", +"fac333ac": "ids(uint256)", +"fac34ff6": "throwFoo()", +"fac3a4db": "changeWithdrawableNetfRe(uint256)", +"fac3c1f4": "setOracleName(address,string)", +"fac416ab": "PriceThreeEnable()", +"fac50e4c": "StgTwobonusEnds()", +"fac5235b": "teamTokensAllocated()", +"fac52bfd": "my_name()", +"fac57fc9": "hasUpgraded(address)", +"fac5bb92": "getPreRelease(bytes32)", +"fac5fbc7": "ContractDisabled(uint256)", +"fac647cc": "testLongerJson()", +"fac65256": "wavesTokens()", +"fac66f01": "getConditions(uint256,uint256)", +"fac67cf6": "updateVIPRank(address)", +"fac6a8a2": "withdrawExchangesToken()", +"fac6fb16": "getVoteStatusFromProposal(uint256,address)", +"fac6fe0c": "level_6_percent()", +"fac78d83": "tierModifiable(uint256)", +"fac7abe3": "latestAuctionIndices(address,address)", +"fac7b20a": "maxCapTokenTotal()", +"fac8a800": "isTeller(address)", +"fac952c5": "getLastWithdraw()", +"fac97122": "ownerSetJackpotAddress(address)", +"fac9d2c7": "Blockkonnect()", +"faca7cfa": "prevBalance()", +"facaa838": "IsEscrowActive()", +"facb2195": "setIntF1(int256)", +"facbf93b": "totalBlocks()", +"facc7905": "unLockTime()", +"facce5bb": "wingsTokenRewards()", +"facd0934": "BONUS_250_500()", +"facd743b": "isValidator(address)", +"face030b": "SpinTheWheel(address)", +"face873f": "getAllActiveSales()", +"face9e8e": "hash_sha256(string,uint256)", +"facef32a": "IGI()", +"facf55e6": "getMyClones()", +"fad09ab3": "closeProvider(address)", +"fad09c3c": "DemoContract()", +"fad15673": "UmkaToken(string,string,uint8,uint256)", +"fad18e7b": "registerNameXaddrFromDapp(address,bytes32,address,bool,uint8)", +"fad239ac": "PermTokenTest()", +"fad356f8": "testTransferFromSelf()", +"fad35818": "calcInviterBenefit(uint256)", +"fad3f8f7": "maxPreSale()", +"fad4b99a": "updateChannelMinimum(address,uint256)", +"fad4e1f2": "getIDMapping(uint256,uint256)", +"fad5a2af": "isClosedAndValid()", +"fad6049b": "_transferFrom(uint256,address,uint256)", +"fad60615": "roundProfitByAddr(address,uint256)", +"fad774ee": "BONUS_LEVEL_2()", +"fad7ed8c": "_A_tokenSaleCompleted()", +"fad8200e": "userToNumCelebs(address)", +"fad88be7": "VOISE()", +"fad8b32a": "revokeOperator(address)", +"fad9100c": "FOMOed()", +"fad992ea": "claimINRDividends()", +"fad9aba3": "dust()", +"fad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", +"fada2c18": "transferBond(uint256)", +"fada4b76": "quater3()", +"fada5da1": "collectEth()", +"fadc0700": "InitiateMakes()", +"fadc342e": "_checkRevenueFactor(uint256,uint256,uint256,uint256)", +"fadc51cf": "isAlpha(bytes1)", +"fadc554b": "updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)", +"fadcd861": "createMarriage(string,string,string,string)", +"fadcf13c": "startBounty()", +"fadd3235": "gameEndBlock()", +"fadda208": "getMemberAdresse(uint256)", +"fadeb59c": "getListingDB(uint8)", +"fadf4cb2": "batchAssignTokens(address[],uint256[],bool[])", +"fadf4f3b": "GECToken(address,uint256)", +"fadf617b": "reveal(int128,string)", +"fadf87b1": "testGetBitsSuccess()", +"fae14192": "changeFeePercentage(uint256)", +"fae17e21": "createBid(uint256,address,address,address,uint256,uint256)", +"fae21f0a": "initBank()", +"fae24454": "removeFromManagementWhitelist(address)", +"fae25444": "getNumberOfOffers()", +"fae29ee8": "setWebInfo(string,string)", +"fae2dd4b": "myName()", +"fae429af": "NinjaCoinNC()", +"fae4a213": "buyWithAddressAndFunction(address,bytes4)", +"fae53222": "addPlayerGeneral(address,uint32,uint32,uint8)", +"fae59753": "transferOwnershipMessage(address)", +"fae6edcf": "getI2()", +"fae72303": "totalWeiRaisedDuringPhase3()", +"fae73549": "Burnt_Token()", +"fae8529a": "maxprice()", +"fae860db": "transferToLockedBalance(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"fae8c29e": "setPromoPause()", +"fae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", +"fae92612": "setMarketAddress(address)", +"fae95a71": "participationPresaleHistory(address)", +"fae9c6b3": "preICOTokenRemaining()", +"fae9d06d": "calculateTxFee(uint256,address)", +"faea1878": "cooRemoveCro(address)", +"faea624c": "VestTokens(address,uint256,uint256,uint256,bool,string,uint256)", +"faea9129": "Syndicate()", +"faed08a9": "reLoadXname(uint256)", +"faed1922": "purchaseWhaleCard()", +"faed77ab": "wipeAndFree(address,bytes32,uint256,uint256)", +"faed86ab": "strConcats(string,string,string,string)", +"faede6a1": "Y2_lockedTokenAmount()", +"faee13b9": "set(int8)", +"faee4402": "donateToWhale(uint256)", +"faee4a10": "initialBankroll()", +"faef2ad2": "getCategoryHash(address)", +"faeff650": "phase1TokenPriceInEth()", +"faf0952b": "testThrowRestartNotOwner()", +"faf21148": "ValoremICO()", +"faf236c7": "emitTokensFor(address,uint256,uint256,uint256)", +"faf27bca": "greeter(string)", +"faf3d174": "upgradeStart(address)", +"faf42125": "setTokenURIAffixes(string,string)", +"faf5115f": "setBank(address,address)", +"faf81ba5": "applyBonus(uint256,uint256)", +"faf87b8a": "payoutEF()", +"faf880ad": "SoftcapReached(address,uint256)", +"faf924cf": "proof()", +"faf95e3d": "PayForServiceETHEvent(address,uint256)", +"faf9859c": "NIU(uint256,string,uint8,string)", +"faf9b5cf": "mintSendTokens()", +"faf9f330": "accrueTeamTokens(address,address,uint256)", +"fafa4c82": "defaultTransferGas()", +"fafa8e1a": "removeDat(string)", +"fafaacfa": "hasConfirmed(bytes32,address,uint256)", +"fafb2330": "setPayout(uint256,uint256)", +"fafb3c7a": "giftCar(address,uint256,bool)", +"fafb76dd": "getOffsetIndex()", +"fafb9334": "roll_normal(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"fafbb62b": "create(string,string,uint8,uint256,address,string,address,address)", +"fafbb9a3": "getNextPayoutTime()", +"fafbcc08": "IBNZDEVELOPERSERC20_Crowdsale()", +"fafc56d9": "setStepTwoRate(uint256)", +"fafcdc34": "dist(address)", +"fafd2efb": "cashoutable(address,address)", +"fafd4bba": "RESERVED_TOKENS_FOR_CRYPTO_EXCHANGES()", +"fafd6bcb": "isConfirmedBy(bytes,address)", +"fafdb3af": "PlayerBalance(uint8,uint256,uint256)", +"fafe029f": "getWtotalTransCnt(uint8)", +"fafe0902": "gift_ClaimTINAmotleyLine(uint256)", +"fafe805e": "BLOCK_PER_PHASE()", +"fafe8845": "StateChanged(uint256,uint8)", +"faff50a8": "rootNode()", +"faff660e": "isPrivate()", +"fb007107": "CanMint(bool)", +"fb00cc67": "search_winner_bid_address(uint8)", +"fb00fec6": "getStatusForRootHash(bytes32)", +"fb0101c4": "getUserSpaceIds(uint256)", +"fb01badd": "companyShares()", +"fb01f4b1": "developerPrizeClaim()", +"fb02191c": "addRepo(bytes32,string)", +"fb03735e": "contractTokenReward()", +"fb03eaea": "getDisputeThresholdForFork()", +"fb048705": "itemOf(uint256)", +"fb04f22c": "secondReleaseDone()", +"fb054439": "canBearWith(uint256,uint256)", +"fb05594f": "STARTING_SHRIMP()", +"fb062a84": "offerOptionsToEmployeeOnlyExtra(address,uint32,uint32,uint32)", +"fb064161": "advisorsAllocation()", +"fb06603c": "modifyToken(address,uint256,string,string,string,string,bool)", +"fb070d0d": "CatFarmer()", +"fb0720dc": "icoStartP1()", +"fb072d2a": "random(uint256,uint8)", +"fb07ac86": "realPriceOracle()", +"fb083fdc": "EtherDelta()", +"fb088558": "contributeWithoutVesting()", +"fb08937c": "tokenTransfer(address,address,address,uint256)", +"fb08f3a1": "whitelistRequired()", +"fb08fdaa": "replaceContract(address)", +"fb099c84": "newInvestor()", +"fb09b1ac": "testBalanceOfReflectsTransfer()", +"fb09c964": "getXQU()", +"fb09db11": "setActiveWhitelist()", +"fb0a0344": "mockBuy()", +"fb0a2e3c": "buyerDecimals()", +"fb0a3867": "updateClientAddress()", +"fb0a8c62": "addGenerator()", +"fb0b0220": "outFromPool(uint256)", +"fb0b02cd": "destroyBucket(bytes32)", +"fb0b6b6d": "confirmTransactionByMediator(uint256)", +"fb0c0782": "buy2(uint256)", +"fb0c1faa": "LearnX()", +"fb0cf7ab": "getStagePrice(uint8)", +"fb0d7e43": "initialBonus()", +"fb0f6f42": "s1(bytes1)", +"fb0f9363": "getAuctions(address)", +"fb0f97a8": "depositToken(address,address,uint256)", +"fb0fcd8c": "triggerRselfdestructRefund()", +"fb101581": "transferToCharity(address)", +"fb10b0d3": "currentMaximumSalePercentage()", +"fb114f57": "oraclize_query(uint256,string,string[3],uint256)", +"fb11613e": "getGamesByDay(uint256)", +"fb1161f1": "bountyCap()", +"fb1291c3": "getPixels(bytes32)", +"fb12ee85": "amountOfOpenRFQs()", +"fb13a707": "changeVestingWhitelister(address)", +"fb13bfae": "getFreezeInfo(address)", +"fb1478e5": "changeSaleEndBlock(uint256)", +"fb14cbca": "check(bytes32,uint256,address,uint32,uint32,bytes32[])", +"fb14f058": "addVestingAdmin(address)", +"fb15e737": "boolToBytes32(bool,bool)", +"fb1641d6": "rejectGame(address,uint256)", +"fb1669ca": "setBalance(uint256)", +"fb1684f9": "lockTextKey(string,uint256)", +"fb171eac": "witdrawToken(address,uint256)", +"fb173712": "SetRate(address,address,uint256,uint256)", +"fb176b69": "paleyer1show(uint8,uint8,uint8,uint8,uint8)", +"fb17905f": "DemolishByCredits(uint256,uint256)", +"fb18962d": "setSoftwareTokensPercent(uint256)", +"fb1ace34": "notarize(bytes)", +"fb1ae783": "getWinnerTeam(uint256)", +"fb1bc4d7": "PsExToken()", +"fb1c3461": "_calculatePercent(uint256,uint256)", +"fb1ce13a": "TestEOSCoin()", +"fb1ce2ea": "NotifyMe(address,uint256)", +"fb1d8201": "addClaim(uint32,string,string,bytes)", +"fb1d9eea": "transferFundsTokens(address,address,uint256)", +"fb1db11f": "updateEarlyParticipantWhitelist(address,address,uint256)", +"fb1de995": "solveTask(uint256,uint256,uint256,int256,uint256,int256)", +"fb1e3804": "FULL_TOKEN_AMOUNT()", +"fb1e61ca": "getRequest(bytes32)", +"fb1f41f9": "info_OwnerTINAmotleyLine(uint256)", +"fb1fad50": "halt(uint256)", +"fb1fdc2e": "lengthNotEqual(address[],uint256,string)", +"fb2004f2": "BCOExtendedToken(address,string,string,uint256,uint256)", +"fb203f90": "ShopereumTokensPerEther()", +"fb20b70d": "setBonusDate2(uint256)", +"fb20d071": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256,uint256)", +"fb20d98f": "deleteEditor(address)", +"fb20dc80": "setPriceForVerification(uint256)", +"fb213549": "confirmApplication(address)", +"fb21364b": "allocate2ProjectToken()", +"fb214f4c": "presetGymTrainer()", +"fb218f5f": "storeData(string)", +"fb21eefd": "fwdData(address,bytes)", +"fb222d48": "extractVaultTokens(address,address)", +"fb236bba": "_deleteOffer(uint256)", +"fb237eb2": "isUserWhitelisted(address)", +"fb23bbb1": "BONUS_WINDOW_3_END_TIME()", +"fb241406": "RedPen()", +"fb25b62c": "LineToken()", +"fb2643c0": "DragonKing(address,address,uint8,uint8,uint8,uint16[],uint16[])", +"fb26c00f": "Treasury(address)", +"fb26c3f8": "minimumPresaleWeiDeposit()", +"fb26e2d8": "tgrStartBlock()", +"fb274654": "offerCollectibleForSaleToAddress(uint256,uint256,int256,uint256,address)", +"fb277a24": "testMintInvalid(int256)", +"fb27961c": "softCapAmount()", +"fb279ef3": "tip(uint256,address,uint256)", +"fb282a17": "distributeCallback(uint256,address[])", +"fb282f92": "solveGame(uint256,uint256)", +"fb283111": "setRunSwitch(bool)", +"fb2861ff": "MINTTIME()", +"fb2898e4": "startSaleDepo(uint256)", +"fb28be72": "SetupQPY(string,string,uint256,uint256,uint256,address,address,uint256)", +"fb293a34": "backGamePlayerCoinOwner()", +"fb29aa97": "getNumLoveItems()", +"fb2c95b6": "PlayX3()", +"fb2cb34e": "transferPaused()", +"fb2dfa45": "getKitties()", +"fb2e0078": "withdrawalFunds(bool)", +"fb2e3240": "setDOwnerFromClaim(bytes32,address)", +"fb2ee901": "getBattleFee()", +"fb2eff20": "PhoenixFund()", +"fb2f3a8a": "MAX_BOUNTY_SUPPLY()", +"fb2f5064": "getPendingTokens(address)", +"fb2fbf49": "registerEOSAddress(string)", +"fb305569": "UbiqIssued()", +"fb30d070": "setNewAge(int256)", +"fb31a6cc": "executeOffer(address)", +"fb31b262": "VuePayTokenSale()", +"fb31ff37": "getFullRecord(bytes32)", +"fb3220fe": "addNodalblockData(string)", +"fb3296ea": "transferFromNA(address,uint256)", +"fb32ade3": "releaseLockedTokensFor(address)", +"fb32aedb": "voteB()", +"fb32f4f5": "ARK_FLAGGER_1_00()", +"fb3458d1": "extractElementsFromGene(uint256)", +"fb346eab": "totalSpent()", +"fb34d075": "channelCloseTimeout(uint64)", +"fb34fc6f": "WatchNextBlockReward()", +"fb350502": "calculateWalletTokens()", +"fb35370b": "transferDari(address,address,uint256)", +"fb3551ff": "getAgent(address)", +"fb357f74": "EBLLToken(address,uint256)", +"fb35a4ba": "KKToken(uint256,string,uint8,string)", +"fb35b4e4": "totalDeployments()", +"fb35d545": "unlockDate4()", +"fb3650c2": "grab(address[],uint256[])", +"fb368e8f": "getServiceName(bytes32)", +"fb36eba1": "createCard(address,uint16,uint16)", +"fb36fae4": "setJpycContactAddress(address)", +"fb37baa1": "whitelistUserForTransfers(address)", +"fb386216": "getSeatAddress(uint256)", +"fb38ec94": "founder3()", +"fb3918d7": "fillReserve()", +"fb3979f0": "updateAccountChartAgainstExistingEntity(address,uint256,uint256,uint256)", +"fb3a1fb2": "getReleaseDb()", +"fb3a3ff3": "HODLERAddress(address)", +"fb3ab12b": "setEndSale(uint256)", +"fb3b11af": "CWCCToken()", +"fb3ba9b3": "LogNewBlacklistedAddress(address,address)", +"fb3bc400": "myProfitsReceived()", +"fb3c0d70": "transferFromToken(address,address,address,uint256)", +"fb3d8b6e": "SiringClockAuction(address,address,uint256,uint256)", +"fb3dc0b3": "Leader(string,address,bytes32)", +"fb3ea59b": "acceptBatched(address[],bool)", +"fb3ed5c7": "airdropSupply()", +"fb3f1fd6": "nextroundblocksbeforenewpay()", +"fb3f4d29": "tokenApprove(address,address,uint256)", +"fb3f71c8": "addContract(address,uint256,string)", +"fb3fd6a1": "m_bIsLock()", +"fb402c26": "BuyTokensWithTokens(address,address,uint256,uint256)", +"fb40340d": "totalNormalTokenGenerated()", +"fb40c22a": "getAllCases()", +"fb4101c0": "reward(address,bytes32)", +"fb43b2a2": "approveBreeding(address,uint40)", +"fb43d9f4": "getTotalValue(address[],uint256[],address)", +"fb441663": "claimExit(address[],uint256[],bytes,bytes,bytes32)", +"fb4460dd": "getVoterStakes(address,uint256)", +"fb45d080": "pieBalanceOf(address)", +"fb468340": "getTotalMember()", +"fb46d4c5": "tweet(string)", +"fb46d5b1": "awardCyclePrize()", +"fb46f492": "emissionMas(address[],uint256[],bytes32[],uint256[])", +"fb470a92": "FlukeCoins()", +"fb471ce5": "ERC223Transfer_enabled()", +"fb47a067": "_getRevisionBlockNumber(bytes20,uint256)", +"fb486250": "confirmOwner(uint8)", +"fb486c7b": "setGivenName(uint256,string)", +"fb48ca1d": "NewSuggestion(address,string,uint256)", +"fb48cf0e": "getVoter(uint256,uint32)", +"fb490695": "griefCost()", +"fb497ad2": "stage_1_TokensSold()", +"fb49dc4a": "AEFFTOKEN()", +"fb4a18a2": "setCrowdfundPayout(address,uint256)", +"fb4a6cde": "StarbaseEarlyPurchase()", +"fb4a86bc": "amountToBeRaised(bytes32)", +"fb4aa0a1": "fundReceiver()", +"fb4b7693": "sendSeedAndHash(string)", +"fb4cd8e2": "numBidders()", +"fb4ce0a9": "addAssetsOwner(address)", +"fb4da5b7": "pay(address,string)", +"fb4fbcd8": "getClaimTradingProceedsWaitTime()", +"fb4fd984": "requestPrize(bytes32,uint8,bytes32,bytes32)", +"fb50aec5": "getVendorApplicationStatus(string)", +"fb51a1ea": "read_total_purchased_today(address)", +"fb5209bf": "trickleUp(address)", +"fb524c32": "GetMaximumBet()", +"fb5274e5": "generateWinners()", +"fb54047c": "getCustomExtraData(bytes32,uint256,bytes32)", +"fb557c8c": "PrideToken()", +"fb5589b4": "memCopy(uint256,uint256,uint256)", +"fb55d09d": "EtherGames()", +"fb55ed2a": "transferBlocToUser(address)", +"fb58674d": "Npole()", +"fb598f87": "createPost(uint256,uint256)", +"fb5a3282": "restFinish(address)", +"fb5b82d0": "setCollector(address)", +"fb5bd32b": "withdrawDevBalance()", +"fb5d5729": "getPongvalTransactional()", +"fb5d5999": "getDepositary_function_control()", +"fb5d7376": "step4()", +"fb5e6a76": "WithdrawMulti(uint256,address[])", +"fb5f39dd": "offlineSell(address,uint256)", +"fb5f8a13": "changeAddressKnight(address)", +"fb5fef42": "distributeALCToken()", +"fb6021ae": "ICO(string,string,uint8,uint256)", +"fb60938f": "getSumAmountOfSuccessfulDeals()", +"fb6139b5": "setServerFee(string,uint256)", +"fb6168ac": "BUY_ME()", +"fb621f14": "getSecurityTokenAddress(string)", +"fb6287d2": "setWalletAddresses(address,address,address)", +"fb62e083": "addWhiteListed(address)", +"fb632ef9": "transferrableBalanceOf(address)", +"fb63c4fc": "MESSAGE_PRICE()", +"fb63e4b1": "CEZA(uint256,string,string)", +"fb640453": "_getTotalBmcDaysAmount(uint256,uint256)", +"fb644a14": "Force(address)", +"fb64e072": "recordTransfer(address,address,uint256,uint256)", +"fb64e6b1": "icoAddr()", +"fb656067": "genesisCallerAddress()", +"fb659c3a": "addArticleItem(uint256,bytes)", +"fb65a1a3": "teamdistr(address,uint256)", +"fb65a3cb": "createCampaign(bytes32,uint256,address)", +"fb65e4b1": "Contribution()", +"fb674cf4": "emissionEnabled()", +"fb67983c": "fuckingClaim1(bytes,bytes)", +"fb687c24": "refundMethodABI()", +"fb68a3be": "printTokens(uint256)", +"fb68aa89": "hasInitCard1()", +"fb690dcc": "donated(address)", +"fb6a53d2": "multiBurn(uint256[])", +"fb6aeb42": "PRE_PUBLIC_LOCKUP_PERIOD()", +"fb6b18c0": "totalAirDrop()", +"fb6b3857": "transfer_to_session(uint32,uint32,uint64)", +"fb6b4afd": "getWeaponModel(uint256)", +"fb6bbbce": "Crowdsale()", +"fb6c2b6f": "stopMarket(uint32)", +"fb6cae8e": "NetkillerToken(uint256,string,string,uint256)", +"fb6d0e8f": "pullShares(address)", +"fb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"fb6e6558": "holderNumber(address)", +"fb6f6875": "deleteHotel(address)", +"fb6f71a3": "setCharity(address)", +"fb6f93a4": "setEthUsdRate(uint256)", +"fb6f9579": "Increase()", +"fb702ed1": "multiDistribute(uint256[])", +"fb7043ea": "isRefundPossible()", +"fb709d2e": "charities(uint256)", +"fb70f765": "foundationTokenSupply()", +"fb70ff96": "increasePieceCount(uint256)", +"fb71807f": "setUser(string,string,bytes32,uint256,uint256,uint256[],string,string)", +"fb719113": "deathData_f17()", +"fb7248cb": "playerGuess(address,int16)", +"fb72d24e": "shift_right(uint64,uint256)", +"fb72fdfe": "setTotalAllowed(address,uint256)", +"fb73a593": "modifyAllLevelCaps(uint256[],uint256)", +"fb741504": "IndividualCapCrowdsale(uint256,uint256)", +"fb7450be": "setBtcToken(address)", +"fb74da7e": "setTentativeWinningPayoutDistributionHash(bytes32)", +"fb74e6f7": "ADVISOR_STAKE_FOUR()", +"fb756f97": "Tokenomicx()", +"fb75b2c7": "rewardWallet()", +"fb77269e": "periodITO_period()", +"fb77378a": "SCOOP()", +"fb775b46": "giver()", +"fb77eae2": "startTimeSaleWithBonus()", +"fb78eb53": "Oncology()", +"fb78f85c": "mgrCount()", +"fb791b0b": "withdrawOrder(uint256)", +"fb794281": "gas_amount()", +"fb79e70f": "superNovaSupply()", +"fb7a2c1f": "addQuestion(string,uint256,uint256,string)", +"fb7a5f4f": "getEndBlock()", +"fb7a809c": "buyStageDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"fb7ae31e": "getCurrentRoundLeft()", +"fb7baf70": "initRegistMatch(uint8,uint8,uint8,uint256)", +"fb7c0a3f": "doBuy(uint256)", +"fb7cb850": "setMaxMerge(uint8)", +"fb7cf694": "buyPriceInWei()", +"fb7e54eb": "vcx()", +"fb7e7456": "endOfLockProjectToken()", +"fb7f21eb": "logo()", +"fb80d66f": "SQR_TOKEN_MULTIPLIER()", +"fb80fe9e": "test(uint256,address)", +"fb81299b": "setAllMarketsFinalized(bool)", +"fb815503": "withdrawWin()", +"fb81563b": "SpaceImpulseERC20()", +"fb84da41": "createSketch(string,string)", +"fb850fab": "newCampaign(uint32,uint256)", +"fb8621df": "push(bytes32,string,bytes)", +"fb8632b8": "availableEmission()", +"fb867165": "getSaveData(address)", +"fb86a404": "hardCap()", +"fb87bf7b": "LLX()", +"fb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", +"fb87eb0b": "setRefundsActive(bool)", +"fb88e7c1": "updateBestPromouter(address,uint256)", +"fb890a17": "YUPToken(address,address,address,address,address)", +"fb89fb28": "yield7Day()", +"fb8a5bf8": "H2OC()", +"fb8a5f1c": "createTransaction(address,uint256,bytes32,address,address)", +"fb8b0197": "claimReceivables(address[])", +"fb8bc297": "getInvestorPackPrice()", +"fb8c7420": "GetRandomNumber()", +"fb8dd3bb": "createEvent(bytes32,bytes32[],address,uint256,uint256,uint256,uint256)", +"fb8e4f1a": "BountyChanged(uint256)", +"fb8e7870": "buyKebabs()", +"fb8e82b4": "min(uint32,uint32)", +"fb9073eb": "reLoadXname(bytes32,uint256)", +"fb913d14": "sendByTranche(bytes32,address,uint256,bytes)", +"fb920ad1": "reclaimAndBurn(address,uint256)", +"fb92488b": "ChangePrice(uint256)", +"fb92507d": "daytime(uint256)", +"fb92e4fb": "_isGoodAddress(address)", +"fb932108": "distribute(address,uint256)", +"fb950559": "getAffiliation(address)", +"fb950a7f": "addGrantableAllocation(address,uint256,bool)", +"fb95adeb": "testFailBlockhashInsuffiecientFee()", +"fb95d9e7": "addConfigEntryAddr(bytes32,address)", +"fb961571": "ICOStartBlockChanged(uint256)", +"fb969b0a": "bootstrap()", +"fb9734fc": "confirmProposal(address,bytes32,uint256)", +"fb979ba2": "ROUND_1_PRESALE_BONUS()", +"fb97b61f": "lpAskVolume()", +"fb98a409": "skinContract()", +"fb990288": "_newInterest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fb9a0c58": "startRefundProcess(uint256)", +"fb9a2ce2": "getSellPosition(bytes32,uint256)", +"fb9a4595": "GitHubBounty()", +"fb9ab10b": "EpsToken()", +"fb9b4ab8": "createrAddress()", +"fb9ba033": "checkAllowedAddressForMinting(address,address)", +"fb9ba7bc": "removeAccreditedInvestor(address)", +"fb9bbeaf": "RaiSed()", +"fb9c7303": "completeInvestment()", +"fb9ca16b": "MarianaKey(uint256,string,uint8,string)", +"fb9cb15d": "numChipsMinted()", +"fb9dd851": "getGameInfoByIndex(uint256)", +"fb9ded46": "totalWeiRaisedDuringICO3()", +"fb9e1270": "investmentIdLastAttemptedToSettle()", +"fb9ec0a8": "assignPersiansToBattle(uint256)", +"fb9efcf0": "setCustodianForeign(address)", +"fba06849": "fipsPublishDataMulti(bytes20[],bytes)", +"fba07791": "fiatCost()", +"fba0aa5b": "txFeeSentInWei()", +"fba0ce5e": "setLinkedIn(string)", +"fba12c17": "minerLockAddress()", +"fba13bd0": "depositBalanceOf(address)", +"fba17fc9": "Flye()", +"fba246de": "DepositETH()", +"fba26207": "setUint64(int64,uint64)", +"fba2a2d2": "setPeriod(uint16)", +"fba2b18b": "_getplayersurplus()", +"fba2fb66": "newPolicy(bytes32,bytes32,uint256,uint256,uint8,bytes32)", +"fba36b31": "payWithRef(address)", +"fba4734f": "withdrawEthereum(uint256)", +"fba4abb2": "payoutBalanceCheck(address,uint256)", +"fba52ff1": "getInvestorClaimedTokens(address)", +"fba5de1c": "cancelGetTogether()", +"fba5ee24": "getSinistre_effectif()", +"fba5f1f6": "weaponModels(uint256)", +"fba6651c": "getCommunityTaxes(uint256)", +"fba6748c": "getMaxPrivateSaleBuy()", +"fba6e51b": "_getFinalAddress(uint256[],address[],uint256)", +"fba70381": "adventureByToken(address,uint256,uint256,uint256,uint64,uint64)", +"fba71fe9": "periodICOStage6()", +"fba74490": "PoseidonQuark()", +"fba779f6": "armyHelicoptersCount(uint256)", +"fba79777": "test1cash()", +"fba7c1ab": "addMake(string,address,uint256,uint256)", +"fba7cc79": "getIsActive()", +"fba83066": "topSalesRatio(uint16)", +"fba84b2a": "LjwStandardToken()", +"fba90629": "totalSupplyPrivateSale()", +"fba906c5": "HiroyukiCoin()", +"fba939f8": "_goal()", +"fba9ce40": "donateToDev()", +"fba9cea9": "someAction(address)", +"fba9dbbb": "chnageSpecialFeeTake(uint256,address,uint256,uint256)", +"fba9ecac": "getFreeBanker()", +"fbaa0ece": "weekTwoRate()", +"fbaa6050": "getApprovalRequirement(bytes4)", +"fbaa89d3": "LogBidRemoved(address,uint256)", +"fbabc444": "PeaceChainToken(uint256,string,string)", +"fbabdb06": "disapprove(address,uint256)", +"fbac3951": "isBlocked(address)", +"fbac7d1d": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", +"fbac89f6": "unlock(bool)", +"fbacc43f": "getBases()", +"fbad8983": "sendyum(address)", +"fbae5e7d": "Investors(uint256)", +"fbaeac89": "newOwnerAPI()", +"fbaf094a": "provider(address)", +"fbaf12a7": "_removeBlacklistedUser(address)", +"fbb0eb8b": "mintingNonce()", +"fbb11f29": "setTokenGbi(address)", +"fbb1c5c4": "XBCOMMUNITY()", +"fbb26d00": "releaseBasicAccount()", +"fbb39f6e": "offerTrade(uint256,uint256)", +"fbb4d51b": "OverseasReturneesUnion()", +"fbb4dc6b": "secondMonthEnd()", +"fbb4f0e3": "NuToken()", +"fbb58c5c": "STARTING_FALCON()", +"fbb5d52d": "sellCoinsToICO(uint256)", +"fbb5f682": "KUNTEStandardToken(uint256,string,uint8,string)", +"fbb6272d": "tokens(uint32)", +"fbb65708": "freedWinPoolForSecondStage()", +"fbb78719": "private_setmaxBet(uint256)", +"fbb8932a": "getSeatMessage(uint256)", +"fbbb75c5": "getClaimedOwners()", +"fbbc3448": "getWrefundIndex(uint8)", +"fbbcb4de": "GointoMigration(address)", +"fbbd6545": "pushHatch(address,uint32,uint16,uint16)", +"fbbdb68c": "hiddenOwner()", +"fbbdbf22": "_setTimes()", +"fbbe20a9": "breeding(uint256,uint256)", +"fbbe7887": "NewBOP(address,address,uint256,uint8,uint256,string)", +"fbbedf5c": "ERC20Token(string,string,uint8,uint256)", +"fbbf119b": "BTCCCoin()", +"fbbf93a0": "getDetails()", +"fbbfa45e": "destory(address)", +"fbbfe830": "refundTokenHolder()", +"fbc00b4a": "GACC()", +"fbc032ab": "GCFcoinF(uint256,string,string)", +"fbc09b26": "m_totalDatasetCount()", +"fbc34d1c": "artistsArtworkCount(address)", +"fbc3d0ef": "frozenReserveTeamWallet()", +"fbc402fc": "updateDarknodeBond(address,uint256)", +"fbc44458": "setTransferAuthorizations(address)", +"fbc449a7": "FirstContract()", +"fbc47e56": "tokenListContract()", +"fbc4f981": "ReceivedBTC(address,uint256,string)", +"fbc53c8e": "Arascacoin(uint256,string,string)", +"fbc5db95": "lowestAskTime()", +"fbc6c0f0": "firstChipBonus()", +"fbc6d0ff": "confirmTransactionWithSignatures(bytes32,uint8[],bytes32[])", +"fbc6d545": "ADST()", +"fbc7ad3e": "finishedLoading()", +"fbc805ee": "changeMaximumContributionForAllPhases(uint256)", +"fbc80af6": "FakeNewsToken()", +"fbc8aafe": "delegateExecute(address)", +"fbc94bd1": "icoFinishInternal(uint256)", +"fbc94f24": "changeTokenPrice(uint256)", +"fbc990d0": "_removeMember(address)", +"fbc9c601": "requestAccess(address,int256,address)", +"fbca1c9d": "get_charge()", +"fbca6ba6": "maintenance(uint256)", +"fbcbc0f1": "getAccount(address)", +"fbcc3775": "isMyWalletLocked_Send()", +"fbccc2b1": "setBoolF1UintF1StrF2Intf3(bool,uint256,string,int256)", +"fbcebd02": "delegatedRefund(address)", +"fbcece85": "freeTokens(address,uint256)", +"fbceff0e": "WangWangCoin(uint256,string,uint8,string)", +"fbcf1594": "UNLOCK_TEAM_2()", +"fbcfa0d7": "createCard(string,uint256,address,address,bool)", +"fbd06cb6": "s42(bytes1)", +"fbd0c5d7": "SaleClockAuction(address,address,uint256)", +"fbd0e7df": "Reimburse()", +"fbd15163": "lengthMessages()", +"fbd18b58": "setBlockBalance(uint256,uint256,uint256)", +"fbd1df54": "TotalCount()", +"fbd1eb7b": "deployAgentWallet()", +"fbd22407": "EscrowRaj()", +"fbd275f8": "randomGen(address,uint8)", +"fbd2dbad": "previousDelegates(uint256)", +"fbd395f8": "pauseToken(uint256)", +"fbd3c51a": "left83(uint256)", +"fbd3d51b": "setMasterAddress(address,address)", +"fbd4200c": "base_token_is_seeded()", +"fbd42e0f": "releaseLockedTokens()", +"fbd4e0f0": "chkdrawadm(address)", +"fbd54a63": "sendAmount(address[],uint256)", +"fbd59425": "ETLToken()", +"fbd668a9": "setMaxProfit(uint256)", +"fbd6d77e": "addCoordinator(address)", +"fbd6fdde": "reLoadCore(uint256,uint256)", +"fbd70768": "___setProxyOwner(address)", +"fbd7b853": "setTokenSupplyLimit(uint256)", +"fbd7c5f1": "priceT3()", +"fbd7d081": "TOKEN_HODL_3M()", +"fbd81564": "logger(string)", +"fbd902f2": "_distributeTokenToPurchaser(address,address,uint256)", +"fbd95a39": "sendToAddress(address,address,uint256)", +"fbd9c625": "changeAddressPaladin(address)", +"fbd9c902": "vendi()", +"fbda68e2": "numberOfMessages()", +"fbdafaf9": "getInvestorAtIndex(uint256)", +"fbdb70fb": "KRWT()", +"fbdbad3c": "lastCompletedMigration()", +"fbdc03fe": "nettingContractsByAddress(address,address)", +"fbdc562a": "setCanChange(bool)", +"fbdd3982": "s17(bytes1)", +"fbdd7852": "Ownership()", +"fbdd8508": "PriceAccepted(uint256,uint256)", +"fbdda15a": "isTrustedContractAddress(address)", +"fbde47f6": "FEE_RANGE()", +"fbde5b64": "gameLength()", +"fbde8ad4": "pStartBlock()", +"fbde8d75": "manualWithdrawTokens(uint256)", +"fbdeecab": "endTimePreIco()", +"fbdf0378": "getAllChildren(bytes32)", +"fbdf45c8": "ZoosCoinToken()", +"fbe00e8e": "receiveEtherFromGameAddress()", +"fbe04e1c": "boolFunc(bool,bool,bool)", +"fbe0508c": "toggleActive(bool)", +"fbe093dc": "targetFeePeriodDurationSeconds()", +"fbe0fa4b": "checkDivsMgView(address)", +"fbe2e125": "addBet(uint256,uint8,uint256,bool)", +"fbe334f8": "getNumFulfillments(uint256)", +"fbe3462c": "minBuyRateInPrecision()", +"fbe3549c": "addWeight()", +"fbe38ffb": "canEscapeTo(uint32,int256,uint32)", +"fbe3bb40": "TSTOraclzAPI()", +"fbe3e1a2": "_setCap(uint256,string)", +"fbe413e4": "createMember(address,bytes20,uint64)", +"fbe45b48": "unitPLATCost(uint256)", +"fbe5ce0a": "removeOwner(address,address)", +"fbe5d87e": "getTotalCollected()", +"fbe6529f": "findOldest()", +"fbe6a9b2": "winners_count()", +"fbe7913f": "Accept_Payment()", +"fbe89965": "GoldenCoinToken()", +"fbe8dab9": "getProfitForDay(uint256,uint256)", +"fbe9bb6d": "_isValidDepositCountry(uint256,uint256,uint256)", +"fbeaa807": "RefundSent(uint256,address,uint256)", +"fbeaaed2": "VersionedAgreementControll()", +"fbeac9c9": "setRefBonus(address,uint256)", +"fbeaebc6": "murder()", +"fbeb89dd": "tournamentContract()", +"fbebc9af": "getPixelAuthor(uint32,uint32)", +"fbec4769": "MatchpoolAdministrator()", +"fbec51bc": "requestRedemption(address)", +"fbec6f21": "gold()", +"fbec9121": "maxRandom(uint256)", +"fbece99f": "abortive(uint256,uint256)", +"fbee7b58": "giftIsFrom()", +"fbeecb47": "safeTransferByContract(address,address,uint256)", +"fbeee7e4": "isPeriodClosed(uint256)", +"fbef0195": "_calcDelta(uint256,uint256,uint256,uint256)", +"fbef957b": "ada()", +"fbf05e69": "GasLog(string,uint256,uint256)", +"fbf0ade1": "setOwnerFee(uint256)", +"fbf0f7da": "buildOutAddress()", +"fbf184c6": "getBankermasterReq()", +"fbf1a44b": "holyBountyFundDeposit()", +"fbf1f78a": "unapprove(address)", +"fbf22dea": "issueSoftcapToken(address,address,uint256)", +"fbf2360c": "isMessageEnabled()", +"fbf2dd6a": "depositTokensForAccount(address,address,address,uint256)", +"fbf350e2": "TokenBBBasic()", +"fbf3c88d": "getSignedPublicEncKey(address)", +"fbf405b0": "pinakion()", +"fbf42072": "CashPoints1()", +"fbf44a1b": "setOraclizeGas(uint256)", +"fbf552db": "hint()", +"fbf561fe": "developer_add_address_for_A(address)", +"fbf58b3e": "transfer(string,address)", +"fbf69367": "FuleexToken()", +"fbf788d6": "cash(address,uint256,uint8,bytes32,bytes32)", +"fbf7980f": "setChainsAddresses(address,int256)", +"fbf7ba65": "claimExploreItem(uint256)", +"fbf7e985": "ExaUSD()", +"fbf80773": "isUserRoot(address)", +"fbf82d31": "WorldWideCoin()", +"fbf9180e": "getLastAuditTime(address)", +"fbf92322": "getPoolSizeQspWei(uint256)", +"fbf94ce1": "GlaidexToken()", +"fbf9dab7": "getBetters()", +"fbf9dc12": "GoldBank()", +"fbfa49a8": "icoWithdraw()", +"fbfa4b7f": "requestsCount()", +"fbfa77cf": "vault()", +"fbfb76c4": "GUAEX(uint256,string,string)", +"fbfb77d7": "setArquivo(bytes)", +"fbfb7e70": "market_WithdrawForSale(uint256)", +"fbfb8b02": "createMintRequest()", +"fbfbb62e": "BASE_CLB_TO_ETH_RATE()", +"fbfc1653": "XBLToken()", +"fbfca20b": "_Send_Bettings_to_Winner(uint256,uint256)", +"fbfd1da4": "getKeccak256Uint(uint256,uint256)", +"fbfd45f5": "PRE_SALE_START_2()", +"fbfd90cb": "finishBurningByCreator()", +"fbff728f": "HodboCrowdsale()", +"fbffb355": "testBitsEqualFailIndexOOB()", +"fc00234e": "icoStage()", +"fc006216": "MODICOIN()", +"fc01157c": "firstCrowdSaleEndDate()", +"fc017495": "EmployeeOptionsExercised(address,address,uint32,bool)", +"fc018c05": "makePublic()", +"fc01987b": "setLockAccount(address)", +"fc01abbe": "stringToBytes32(string,string)", +"fc01ce83": "increaseClaimsBalance(address,address,uint256)", +"fc01dfbb": "mintUpto(address,uint256)", +"fc0262e0": "CpublicGold()", +"fc02c1df": "assertExpectations()", +"fc03441c": "allDecimals()", +"fc034bd8": "getPoolOwners()", +"fc036d7c": "SECURITY()", +"fc037776": "assertEq31(bytes31,bytes31)", +"fc03c7ec": "setLockend1(uint256)", +"fc03fb11": "MacBookOracle()", +"fc043830": "getNetworkFee()", +"fc043cad": "setPullPaymode()", +"fc04771a": "RT()", +"fc04a2ec": "_getOriginAddressHash(address,address,string)", +"fc04c0c4": "partnerTransfer(uint256,bytes32,address,uint256)", +"fc04c62e": "offerAsSacrificeFromVault(address)", +"fc05a6fc": "getPeopleBeforeMe(address,address)", +"fc06013a": "updateTokenEmission(uint256,uint256,uint256,uint256)", +"fc0656c9": "candyTokenAddress()", +"fc06a877": "createApp(string,uint256,string)", +"fc06d2a6": "sunrise()", +"fc078bd4": "GDCAcc05()", +"fc0808e5": "bet_MIN()", +"fc091b71": "MitCoin()", +"fc09ff9e": "submitTransaction(address,string,string,uint8[],bytes32[],bytes32[])", +"fc0a39b7": "isJackpot(bytes32,uint256)", +"fc0c3460": "CryptoSoft()", +"fc0c38a7": "Dsocial()", +"fc0c50fe": "getCallPtr()", +"fc0c546a": "token()", +"fc0d0117": "masterWallet()", +"fc0dce74": "ATL(address)", +"fc0e3d90": "getStake()", +"fc0e4262": "___AllBalance()", +"fc0e64de": "setInitialGasForOraclize(uint256)", +"fc0e74d1": "shutdown()", +"fc0ea853": "processWithITG(address,uint256)", +"fc0f392d": "activateSafeMode()", +"fc100eb2": "inxToken()", +"fc10655e": "actual_feedin()", +"fc10881a": "CXCoin()", +"fc108f70": "GamblerPerAddress(address)", +"fc10d4d5": "getFeeRecipientById(uint256)", +"fc11f71c": "setInstructor(address,address,uint256,bytes16,bytes16)", +"fc122892": "deleteOpenAction(string,address,string)", +"fc12c7da": "blocknumbersOf(uint256)", +"fc12dfc7": "weiDelivered()", +"fc13440c": "HealthCharityToken(uint256,string,uint8,string)", +"fc136941": "EmergencyWithdrawalProposed()", +"fc13a76a": "testFailAddForeignChildNotInUse()", +"fc14230f": "wei2euroCents(uint256)", +"fc143f2b": "defrostOwner()", +"fc14a47c": "CTBToken()", +"fc14ed71": "updateForSale(uint256)", +"fc157b13": "getOrganFunction(uint256)", +"fc15dcef": "resAmount()", +"fc1711f2": "setWeight(uint256)", +"fc176c4c": "getAdsCountByUser(address)", +"fc177bd6": "resetArray()", +"fc178f2a": "MoonTokenERC20(uint256,string,string)", +"fc17ce26": "Panthercoin()", +"fc17d2ac": "setFunctionEightPrice(uint256)", +"fc184fff": "addPhenomenon(string,string,string,uint8)", +"fc190261": "getIntervalsForWindow(uint256,uint256,uint256,uint256,int256)", +"fc190d6e": "newUpdate(string,bool)", +"fc192fb0": "setMinimumWithdrawal(uint256)", +"fc196cf3": "getNoInvestor()", +"fc1a1110": "currentLiquidInDeal()", +"fc1a142d": "adPriceHour()", +"fc1a3f0a": "decreaseTokenLock(address,uint256)", +"fc1adfdf": "invest(address,uint256,uint256,uint256)", +"fc1b8a7e": "richestPlayer()", +"fc1b9286": "rewardActivityEnd()", +"fc1c01b2": "setCrowdsaleParams(uint256,uint256,uint256)", +"fc1c2180": "setHotWalletAddress(address)", +"fc1c32fa": "fundariaBonusFundAddress()", +"fc1c5218": "RemoveOpenOrder(uint32)", +"fc1c9620": "depositOrWithdraw(address)", +"fc1da46a": "parcipateCrowdsaleAll()", +"fc1dfdf1": "extraData1FromHash(string)", +"fc1e1a32": "NetfBalance()", +"fc1e2ce9": "getGameAmounts(uint256)", +"fc1eb4d1": "withdrawPoly()", +"fc1ed437": "initialAmount()", +"fc1f2a70": "Add(uint256,string,string)", +"fc1f2d46": "setAllowTransferWhitelist(bool)", +"fc1f5c9c": "personalSegmentHash(string,uint256,bytes32)", +"fc1f5e53": "resetTimeLockValue(address)", +"fc1f7652": "_isBoardMember(address)", +"fc200a55": "mintWithTimeLock(address,uint256,uint256)", +"fc201122": "_setOwner(address)", +"fc204334": "sendAwardToLastOne()", +"fc207c8f": "periodAt(uint256)", +"fc21fa40": "getAmountByCurrency(uint256)", +"fc223410": "doBet(uint256[],uint256[],uint256[],uint256)", +"fc22545c": "getPreICOFundersCount()", +"fc22a9f8": "initialIssuance()", +"fc22d0e5": "migrate(address,uint256,uint256)", +"fc23466d": "search_data()", +"fc235fb8": "timeWaitApply4Redeem(address)", +"fc236188": "setData_7(string)", +"fc23f5b1": "getAddressByID(uint256)", +"fc248fd6": "RegisterNode(bytes32)", +"fc24e589": "badgeTotalSupply()", +"fc2525ab": "get(address,string)", +"fc252b94": "_getBuyPrice()", +"fc257baa": "traderWithdrawalSignals(address,address)", +"fc2584a2": "fillOrMarket(address)", +"fc26088e": "K_INITIAL_SUPPLY()", +"fc2615d5": "getRemainTime()", +"fc2634b7": "callURL(string,string,string)", +"fc26d522": "tip_total()", +"fc26fe01": "setairDropManagerLimit(uint256)", +"fc27ea83": "defaultAmount()", +"fc281217": "TokenInformation(address)", +"fc284d07": "earlyBackers(uint256)", +"fc28bc8f": "staffContract()", +"fc2b8b7b": "initTokenSupply(uint256)", +"fc2b8cc3": "quit()", +"fc2bd7ae": "sendtoMultiWallets(address[],uint256[])", +"fc2c1ddb": "setItemAvailable(uint256,bool)", +"fc2c3e08": "getIteration()", +"fc2d2b69": "SmartBondsToken()", +"fc2d64e3": "getProviderData(address)", +"fc2df281": "withdrawICOEth()", +"fc2e5bf2": "OfferOnHold(uint256,bool,address)", +"fc2ea8a5": "airdropAmount()", +"fc2f5e67": "recoveryAllowed()", +"fc300522": "getCallFee(bytes32)", +"fc303ef1": "destroyBottle()", +"fc3087f8": "withdrawAll2()", +"fc314e31": "tokenDetails(uint256)", +"fc317cbe": "mainSaleDate()", +"fc322d73": "challengers(bytes32)", +"fc324642": "__createNewToken(address,string,uint256,uint256,uint256,uint256)", +"fc325efd": "getItemByIndex(uint256)", +"fc3280c2": "getDegreeAtIndex(uint256)", +"fc32f09c": "MyShareToken()", +"fc331ebb": "transfererc20(address,address,uint256)", +"fc334e8c": "reveal(bytes32,bytes32)", +"fc335bb5": "OrmeCash()", +"fc337f5a": "getFreeCat()", +"fc342947": "renewFeatured(uint256)", +"fc34b908": "TOTAL_BONUS_SUPPLY_ETH()", +"fc366a2a": "RETZE()", +"fc36cc9d": "setCoolHero(uint32)", +"fc36e15b": "vote(string)", +"fc37987b": "buyRate()", +"fc380d96": "addBonusTokens(uint256,uint256)", +"fc384b7c": "executeStackholderTransaction(uint256)", +"fc385d51": "changeRelease6m(address)", +"fc3880ae": "priceWithBonus()", +"fc38ce19": "validPurchaseTokens(uint256)", +"fc38d4a4": "upgradeAgility(uint256,uint256)", +"fc395c90": "AddBillModerator(address)", +"fc3b7379": "lastBlock_a18()", +"fc3c28af": "devPercent()", +"fc3c8561": "testDistribute(uint256,address[],uint8[])", +"fc3d9f9f": "calcUnMaskedKeyEarnings(uint256,uint256)", +"fc3daf81": "_CalcDiv()", +"fc3f162b": "unregisterAuditor(address)", +"fc3fc168": "DIVIDEND()", +"fc3fc4ed": "getAuctionInfo(uint256)", +"fc4116bb": "p_update_mResalePlotTaxPercent(uint256)", +"fc416159": "coreERC()", +"fc429e6a": "transfer_from_session(uint32,uint32,uint64)", +"fc42b58f": "getTransferFee(address,uint256)", +"fc4333cd": "clean()", +"fc434891": "unWhitelistAddresses(address[])", +"fc43bbfb": "setWhitelistAddress(address,uint256)", +"fc442ec3": "getFlavor()", +"fc44e41b": "RANDOMFACTToken()", +"fc44fd28": "payBalanceToReturnWallet()", +"fc450ae6": "MummyAccountWithdraw()", +"fc45c822": "getDividends(address,address)", +"fc470105": "TestcoinToken()", +"fc47b9d2": "brulerDe(address,uint256)", +"fc47fcf5": "total_devidend()", +"fc48b653": "authorizedTransfer(address,address,uint256)", +"fc49926f": "getCountdowns()", +"fc4a089c": "newPermission(bytes32,address[],bytes4[])", +"fc4a4a1e": "StartTime()", +"fc4b01ff": "addTicketsToDraw(uint256,uint8,uint8)", +"fc4b2473": "ALC_CONTRACT_ADDRESS()", +"fc4bd9d7": "throwIfSetPresaleTokensAfterSaleStarts()", +"fc4c0daa": "_agent()", +"fc4d20f5": "addMonsterObj(uint32,address,string)", +"fc4d705b": "COLOR_GOLD()", +"fc4db64e": "SendAmount(address,address,uint256)", +"fc504655": "getPriceInWei()", +"fc512b92": "postCrowdsaleWithdraw(uint256)", +"fc515d93": "approvedAddressSize()", +"fc51b9c5": "cancelOrder(address[3],uint256[5],int256,int256)", +"fc51daef": "getCurrentRoundWinner()", +"fc523f7a": "settte(uint256,address)", +"fc525c75": "Ammbr(string,string,uint8)", +"fc52be0a": "getLatestTokenAllocation(address,address)", +"fc52cc1d": "incPreSell(address,uint256)", +"fc52f2eb": "DogRacingToken()", +"fc5378bb": "getEmployeeInfoById(address)", +"fc539a4a": "getInstances(bytes32)", +"fc53c821": "getMembersLength()", +"fc53f958": "ADMIN_ALLOWANCE()", +"fc53fe51": "_authorizePayment(address,uint128)", +"fc548f08": "changeArbitrator(address)", +"fc55c8d6": "buyPixel(uint256,bytes32)", +"fc55ea9d": "removeCustomer(string)", +"fc56200e": "JCFv1(uint256,string,string,uint8)", +"fc563658": "getNumber(uint256)", +"fc578323": "getProposalProposedBy(bytes32,bytes32)", +"fc57fadf": "IsValidAddress(address)", +"fc58452e": "castVote(bytes32,uint16)", +"fc58edea": "FoundationAddressFreezeTime()", +"fc58fc49": "setUser(address,address,string,uint256)", +"fc59116d": "setTokenTypes(uint16,uint16,uint16)", +"fc591ce5": "AddForm46(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fc5a0152": "div256(uint256,uint256)", +"fc5ab1c6": "_unlockOther(address)", +"fc5b57a6": "removeStackholder(address)", +"fc5b652a": "LogNeumarksBurned(address,uint256,uint256)", +"fc5be8ec": "bonuscalico(uint256)", +"fc5c0cde": "allTimeDiscount(uint256)", +"fc5d9244": "totalBonusTokens()", +"fc5e2cce": "calculatWithdrawForPeriod(uint8,uint256,uint256)", +"fc5eb846": "currentHunterNumber()", +"fc5f3e1d": "ATEC_Token()", +"fc5faa82": "ProWalletToken()", +"fc5fc345": "getPlayerIds()", +"fc5fc8ae": "preICOEnds()", +"fc601902": "_isAdmin()", +"fc608e17": "getAllocatedTokenCount(address,address)", +"fc60bb36": "_removeGroupFromMember(address,bytes32)", +"fc60e82c": "calculatePrize(uint256,uint256,uint256,uint256)", +"fc612a8d": "priceUpdater()", +"fc623ef8": "hashToSign(bytes32)", +"fc632647": "MNToken(uint256,string,uint8,string)", +"fc63977a": "getAddressFromUsername(bytes32)", +"fc63d4fb": "order(bool,uint32,uint128)", +"fc63dad6": "getLastBuyer(bytes32,uint8)", +"fc65169a": "phase4Duration()", +"fc65b3ac": "all_team_accounts()", +"fc65ee05": "marginCallOnBehalfOfRecurse(address,address,bytes32,uint256)", +"fc65f812": "_currentPrice(uint256)", +"fc6634b9": "setSellPrice(uint256)", +"fc673c4f": "operatorBurn(address,uint256,bytes,bytes)", +"fc676652": "Embassy(address,address)", +"fc67af2d": "withdrawCommunityBalance()", +"fc68521a": "f(address)", +"fc687311": "betOn(int8)", +"fc688e87": "logAccount(address,uint256)", +"fc6a0ca6": "changeTeamSize(uint8)", +"fc6a3ff7": "ticketsOwnedByUser(address)", +"fc6b72b6": "bringCat(uint256)", +"fc6c403b": "getMySalePrice(bytes32)", +"fc6d0dd0": "getLightingWithdraw(address,address,bytes32,bytes32,uint256,uint32)", +"fc6d1892": "setArrUintField1(uint256[])", +"fc6def15": "decider()", +"fc6e33ee": "MAX_SALE_DURATION()", +"fc6ef5a5": "getUserTokenLocalBalance(address)", +"fc6f46a0": "addTether(address,string,uint256,uint32,string)", +"fc6f9468": "adminAddress()", +"fc6fadec": "LoggedReward(uint256,string,uint8,string,bool,bool)", +"fc700dc0": "createBucketLender(bytes32,address,address,address,uint32[7],address[],address[])", +"fc70b462": "viewReputation(address)", +"fc722b2b": "trustedDarknodeRegistry()", +"fc72c1ef": "ERC20Base(uint256)", +"fc735e99": "verify()", +"fc7368fa": "reopenBet(uint256)", +"fc73c86e": "getInvestments(address)", +"fc73ec00": "changeDividend(uint256)", +"fc741c7c": "makerFee()", +"fc749323": "NTC()", +"fc74dadd": "delegateProxy(address,bytes)", +"fc74f55c": "IexecHubAccessor(address)", +"fc753ce3": "NAME_ARK()", +"fc756c69": "createship(uint256,address)", +"fc7596a8": "GoldBoxToken()", +"fc763176": "agreeAmendmentJUR(address)", +"fc76501a": "preIco1Raise()", +"fc76687c": "jinglesOnSale(uint256)", +"fc77060d": "withdrawEtherHomeExternal()", +"fc772c8b": "reclaim(address)", +"fc773166": "GCoin()", +"fc78b430": "delegateVote(address,address,uint256)", +"fc792719": "hasBeenClaimed()", +"fc794183": "timesfucky()", +"fc79c8eb": "TBCoin()", +"fc7ae9f5": "presaleMaxContribution(address)", +"fc7b78b1": "changeVestingAgent(address)", +"fc7b9c18": "totalDebt()", +"fc7ba686": "affiliatesCutOutof100()", +"fc7c1c80": "getParentB(uint256)", +"fc7c41af": "doDisown()", +"fc7cb268": "PoSToken()", +"fc7d07ce": "AllocateFounderTokens()", +"fc7d2b3a": "EtherOcrend()", +"fc7d6518": "getLockSdc()", +"fc7e061f": "convertPresaleTokens(address,uint256,uint256,string)", +"fc7e286d": "deposits(address)", +"fc7e4768": "saleMinShares()", +"fc7e9c6f": "nextIndex()", +"fc7f1a88": "increaseBurnApproval(address,uint256)", +"fc7f7957": "callMeMaybe()", +"fc7fcae1": "extractFund(uint256)", +"fc800df4": "getBuyerbyaddress(address,address)", +"fc818684": "burnFromContract(uint256)", +"fc8234cb": "_unpause()", +"fc82d0f7": "currentIterationSupplyLimit()", +"fc836563": "SendTokens()", +"fc845834": "GoldenCoin()", +"fc860e96": "emissionTime()", +"fc862027": "setNameTAOLookupAddress(address)", +"fc86a7a5": "getTokenSoldPrice(uint256)", +"fc87790f": "addToWithoutFee(address)", +"fc8791c0": "change_p1(uint256)", +"fc87c766": "addressCap(address)", +"fc880be0": "SetCommissionValue(uint256)", +"fc882dff": "ownerHashed()", +"fc88ee77": "optionExerciseOf(address)", +"fc891b97": "MosesToken()", +"fc892cfe": "setup_token()", +"fc89aff6": "submitVerifiedUsers(address[])", +"fc89f349": "ORZToken()", +"fc8aaa76": "disableManualEmission(bytes32)", +"fc8ad37c": "changeParameters(uint256,uint256,uint256)", +"fc8b4a90": "checkDuplicateMatchId(address,uint256,uint256)", +"fc8bbb6d": "AddresstoAsciiString(address)", +"fc8c2f0d": "AlphaMarketTeamBountyWallet(address[],address)", +"fc8cddf2": "ARCADIA()", +"fc8d4f4f": "getShareHoldersInfo(uint256)", +"fc8dae84": "AllAmericanCoin()", +"fc8f3a94": "_getPayTo()", +"fc8f616e": "XXX()", +"fc8fc6f7": "KittyCoins()", +"fc9017a8": "sendMessage(address,string,bool,uint256,bytes32)", +"fc906720": "setSiringWithId(uint256,uint32)", +"fc906897": "StageDistributed(uint8,uint256)", +"fc909fc7": "EtherGrand()", +"fc912461": "_setControllers(address[])", +"fc914949": "ValidContractRemoved(address,address,uint256)", +"fc91a274": "getAmountByToken(bytes32,string,address)", +"fc91e03d": "EtherDeltaWithdraw(uint256)", +"fc94dd18": "verifyHumanStandardToken(address)", +"fc959d9a": "getMin(uint32[])", +"fc961664": "setPI_edit_7(string)", +"fc966d45": "uintToStr(uint256)", +"fc970859": "PacBall()", +"fc976827": "TOTAL_TOKEN_AMOUNT()", +"fc9774c1": "dividendShares(address)", +"fc989bbb": "addStockProfitInternal(uint256)", +"fc98f71e": "developerLock()", +"fc99342e": "create_table()", +"fc9937e5": "orders_sell_total()", +"fc996557": "goldContract()", +"fc998981": "sendBountyBalance(address[],uint256[])", +"fc9bfaa6": "externalCallFlag()", +"fc9c473d": "limitPerHolder()", +"fc9c8d39": "caller()", +"fc9dab52": "soldSale()", +"fc9dc608": "setRoundTime(uint256,uint256)", +"fc9e53df": "setNextRegistrar(address)", +"fc9ede65": "getPropertyBecomePublic(uint16)", +"fc9ee045": "getMaximalDeposit(uint256)", +"fc9f8cae": "_isApprovedPack()", +"fc9ffe02": "getWalletList()", +"fca062d3": "blockBeforeChange()", +"fca10682": "randomGen(uint256,uint256,uint256)", +"fca129a3": "finalizeDescription()", +"fca16c3b": "getBuyPrice(uint256,uint256,uint256)", +"fca2452b": "change_b(address)", +"fca2d9f5": "senttest()", +"fca2efd5": "DocnotaPresale(address,address)", +"fca346af": "SetupCrowdSale()", +"fca3644a": "verifyMessage(uint8,uint256,bytes32[4])", +"fca3b5aa": "setMinter(address)", +"fca495f0": "receivePurchase(uint256)", +"fca5d057": "migrateTokensV1(address,uint256)", +"fca5d21f": "playSlot()", +"fca5e61e": "drugs(uint256)", +"fca64947": "setMetaBet(uint256)", +"fca69afa": "CYCLE_CAP()", +"fca6d4e2": "LogAccess(address)", +"fca76c26": "lockMaxSupply()", +"fca7820b": "_setReserveFactor(uint256)", +"fca7c355": "MUSTToken(address,string,string,uint256,uint256)", +"fca7cdba": "pgoMonthlyPresaleVault()", +"fca865dd": "aSetProportion(uint16)", +"fca981f6": "setStepFunctions()", +"fca9bb5f": "FACTOR_1()", +"fcaa7664": "getStage()", +"fcaa96fa": "withdrawForThreeStep()", +"fcac1c77": "DragonKing(address,address,address,address,uint8,uint8,uint8,uint16[],uint16[])", +"fcad399f": "TheFlashToken(uint256,string,string)", +"fcad8cf3": "RentOffice()", +"fcae08e1": "fundTokens()", +"fcae4484": "unsubscribe()", +"fcae8c06": "takeMoney()", +"fcaf343e": "getUnsoldTokensAmount()", +"fcb0339e": "icoMinCap()", +"fcb0368c": "BuyToken(uint256)", +"fcb0a7ad": "getMinAuditPrice(address)", +"fcb0e55c": "_validGenes(uint256)", +"fcb163c7": "ExecuteOptions(address,uint256,string,uint8)", +"fcb1804d": "getRateAndTimeRemaining(uint256,uint256,uint256,uint256)", +"fcb1b62d": "arbiterAcceptCount()", +"fcb1cba0": "GetQuota()", +"fcb2931b": "LockupContract(address,address,address)", +"fcb2acd5": "_preValidatePurchase(address,uint256)", +"fcb2cafc": "verifyAddress(address)", +"fcb300e6": "_activate()", +"fcb36ce2": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256,bool)", +"fcb3a3a3": "setCrowdsaleMinter(address)", +"fcb5bc29": "startPhase2()", +"fcb5ced3": "saveToCW()", +"fcb5d44d": "doExchange(uint256)", +"fcb6323a": "unclaim(address[])", +"fcb71ea9": "balanceOfHolder(address)", +"fcb750cf": "REFUND_DIVISION_RATE()", +"fcb806ac": "ReserveManager()", +"fcb80d16": "getCurrentFgcCap()", +"fcb899d7": "LEGAL_EXPENSES_ADDR()", +"fcb8b1e1": "NewHardCap(uint256)", +"fcb927aa": "addPublisher(string,bytes,address,address[],uint256[],address,uint32[])", +"fcb941c9": "setGenomeContractAddress(address,address)", +"fcb94dbb": "toBytes(address,address)", +"fcb9b505": "updateBeneficiary(address,uint256)", +"fcbc1bc4": "Standard23TokenMock(address,uint256)", +"fcbcf436": "clearSums()", +"fcbd06aa": "supportersMap(address)", +"fcbd2731": "transferToProxy(uint256)", +"fcbe0f5f": "BRD()", +"fcbeaaa7": "buyTile(uint16,uint16,uint8)", +"fcbf3131": "private_setBankAddress(address)", +"fcbf323a": "ScienceToken()", +"fcc01cce": "getExpectedAmount(bytes32)", +"fcc101ba": "getCommunityDescription(uint256)", +"fcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", +"fcc15c8e": "Strike(uint16,uint32,uint16,uint8)", +"fcc1cc9b": "removeLockMultiple(address[])", +"fcc21e56": "withdrawToTeam()", +"fcc29ae8": "setMaxContributor(uint256)", +"fcc2a69b": "BankuNetwork()", +"fcc34e89": "migrateCrowdsale(address)", +"fcc36c49": "refuseInvestment()", +"fcc47803": "removeSpecialOffer(address)", +"fcc4a54c": "getDeedIds()", +"fcc4dec9": "refound(uint256)", +"fcc550c6": "CreateCCM(address,uint256)", +"fcc5b5ad": "investContracts(uint256)", +"fcc60b6a": "isInited()", +"fcc648f6": "withdrawEtherToReserveEscrow()", +"fcc6b5d5": "fillTheirOrder(address)", +"fcc73637": "updateExchangeRate(uint256,uint256)", +"fcc8221f": "getfromsun(address,uint256,uint256)", +"fcc830be": "getMyRickAndMorty()", +"fcc89710": "LogTokenSaleInitialized(address,address,uint256,uint256,uint256)", +"fcc9b48c": "isIcoFailed()", +"fcca4040": "tokenCapReached()", +"fcca8949": "p_setDevPercent_out(uint256,uint256)", +"fccc2813": "BURN_ADDRESS()", +"fcccc68f": "LoveBite()", +"fcce0492": "AdminTransferredOwnership(address,address)", +"fcce2622": "challengeAnswer(uint256,bytes)", +"fcceea26": "communitySupply()", +"fccf5a68": "SmartBinding()", +"fccf6e67": "newOrdersContract(address)", +"fccf82a4": "endDateOfPreSale()", +"fcd0a747": "RICTToken()", +"fcd10753": "_getProviderSupply(uint256,uint256,uint256)", +"fcd13382": "OsherCoinPresaleAward(uint256)", +"fcd13d65": "setContractRegistry(address)", +"fcd14456": "teamVestingPeriod()", +"fcd24400": "lookupCampaignPart2(uint256)", +"fcd307c4": "processReferral(address,address,uint256)", +"fcd3533c": "burn(uint256,address)", +"fcd41502": "requiredMajorityPercent()", +"fcd41c1f": "officialAddress()", +"fcd45807": "isTokenRegisteredBySymbol(string)", +"fcd47e79": "getnowcardcount()", +"fcd51a4e": "_setIntelligenceValue16(uint256)", +"fcd58363": "refundCancelledGame(uint32,uint32[])", +"fcd6e339": "giveBlockReward()", +"fcd6ec11": "HELLO()", +"fcd735dd": "transferVesting(address,uint256,uint256,uint256)", +"fcd778da": "setCardsAddress(address,address)", +"fcd792f4": "nextAvailableId(uint256)", +"fcd830c4": "setCCH_edit_28(string)", +"fcd8c9d4": "_goldTotalSupply()", +"fcd92992": "resync()", +"fcd936b1": "Simple()", +"fcd9da44": "setParameters(uint256,uint256,uint256,uint256)", +"fcd9f4ce": "withdraw(bytes32,string,string)", +"fcda4ded": "showBankAmount()", +"fcdb2c04": "getMyGameInfo()", +"fcddd056": "payIn()", +"fcde22fa": "_eachPrize(uint32,uint256,uint8,uint32,uint256)", +"fcde2ff6": "getPI_edit_23()", +"fcde6831": "addTokens(address[],bytes32[],uint256[],uint256)", +"fcde6ebe": "createSalesTierConfigMap()", +"fcde7b69": "TokenFRT(address)", +"fcde9925": "proposalOwner(uint256)", +"fcdf350b": "EGGS_TO_HATCH_1FAIRY()", +"fcdf9750": "createDispute()", +"fce14069": "partnerBonusPercent()", +"fce1cc35": "setInt(int256,int8,int16,int32,int256)", +"fce1ccca": "voting()", +"fce1e3e9": "setPatentFees(uint256[9])", +"fce20190": "_refund(uint256,uint256,uint256,uint256)", +"fce22c4c": "generatePseudoRand(bytes32)", +"fce266cb": "artworksFactory(address)", +"fce33f01": "withdrawLimit(address)", +"fce3b91e": "IdolToken1()", +"fce3bbb5": "setSelling(bool)", +"fce44634": "isValidHashType(uint8)", +"fce48558": "countryOf(uint256)", +"fce4c128": "checkInvestmentRequired(uint16,bool)", +"fce4f84f": "sellToConsumer(address,uint256,uint256)", +"fce59d0c": "MangoRepo()", +"fce6d586": "LogClaim(address,uint256)", +"fce78e5e": "TurtleToken(uint256,string,string)", +"fce846e8": "getExtraBonus()", +"fce87fb0": "tokenUriPrefix()", +"fce897e5": "payBid(address,uint256,bytes)", +"fce908ad": "whitelistTx(address,address)", +"fce927f3": "issueReservedTokens(uint256)", +"fce9fbff": "minWeiPerContributor()", +"fce9fdd9": "MPYCreation(address,uint256)", +"fceb9852": "isToOffChainAddresses(address[])", +"fcec617a": "conflictEndFine()", +"fcec962e": "adminWithdraw(address,uint256,uint256)", +"fceca4a0": "VICOXToken(uint256,address)", +"fcecbb61": "getReceipt(bytes32)", +"fced4a86": "CryptoHuntIco(uint256,uint256,address,address)", +"fced5694": "FOUNDER1_STAKE()", +"fced6ad2": "KARMAtoken()", +"fcee45f4": "getFee(uint256)", +"fcef09d6": "BlipCompetition(address)", +"fcef56a4": "createBar()", +"fcefe706": "getOutputIndex(uint256)", +"fcf07c6b": "foundationAddress()", +"fcf0f55b": "eventOracles(bytes32,uint256)", +"fcf23a92": "LogOwnerChanged(address,address)", +"fcf23d63": "getMatchInfoList03()", +"fcf2f85f": "requiredDevSignatures()", +"fcf32769": "adminWithdraw(address[4],uint256[5],uint8,bytes32,bytes32)", +"fcf3438c": "setSmsCertifier(address)", +"fcf36918": "doCall(bytes32)", +"fcf40170": "cleanWallets()", +"fcf4333a": "updateHashrate(address)", +"fcf43ce2": "setValidTransferAddress(address)", +"fcf4b576": "getVaultAccess(address)", +"fcf516aa": "VuePayToken()", +"fcf5462e": "SuperUltraUltraCoin()", +"fcf56577": "setRequesterLock(bool)", +"fcf7e73d": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool,string)", +"fcf7fe50": "push(address,uint256,uint256,bool)", +"fcf84962": "InvestAddEvent(address,uint256)", +"fcf8566e": "unsoldCleanUp()", +"fcf911e7": "delAddressValue(bytes32)", +"fcf9c44d": "soldUET(address,uint256,bytes32)", +"fcfa2bfe": "SALES_START()", +"fcfa63e3": "getResourceAddress(string)", +"fcfbc962": "Unset(string,string,address)", +"fcfc1577": "masterFns(bytes32)", +"fcfc208e": "unclockAddressDuringITO(address,address)", +"fcfd3a4c": "PreICO(address)", +"fcfdaa52": "successfulTime()", +"fcfdbc23": "perform_withdraw(address)", +"fcfdcf8a": "removeOpenMakeOrder(address,address)", +"fcfdeba8": "changeGameEnable(uint256)", +"fcfdf7c5": "decApprove(address,address,uint256)", +"fcfe2247": "setContributionDates(uint256,uint256)", +"fcfe6af1": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32)", +"fcff1eaf": "increaseGasSpent(bytes32,uint128)", +"fcff5ed6": "createChannelDelegate(address,address,uint192)", +"fcffb14e": "getNormalPayout(uint256)", +"fcfff16f": "open()", +"fd004f2d": "IRONtoken()", +"fd01249c": "createGen0Auction(uint256,uint256)", +"fd01d4a1": "ownerDivRate()", +"fd0326b4": "m_nextSale()", +"fd036052": "modPass(uint256,uint256,string,string,string)", +"fd037bc5": "changeIsPayableEnabled()", +"fd03846e": "setCreditBondContract(address)", +"fd03c006": "agreeCount()", +"fd03d762": "resumeWork(uint256)", +"fd03e721": "referraltokencontract()", +"fd049319": "distribute1BTCO(address[])", +"fd04a902": "totaletherstransacted()", +"fd04b606": "getMarketMarginPremium(uint256)", +"fd05ddfc": "CCCRCoin()", +"fd062d3b": "handleFees(uint256,address,address)", +"fd06c6a9": "issuePass(address,bytes32,uint8)", +"fd070667": "tournamentResult(uint32[3][11][32])", +"fd074c28": "removeWeapon(uint8[176],uint8,uint8)", +"fd074e8e": "checkIfMissionCompleted()", +"fd0801c1": "appendNumToString(string,uint256)", +"fd080993": "submit(bytes32,bytes32,bytes32)", +"fd083748": "isGason(uint64)", +"fd084b16": "etherPartition(uint256)", +"fd085b41": "minSaleAmount()", +"fd08921b": "getYear()", +"fd090e47": "DEPOSIT_PERIOD()", +"fd0998de": "Totalbalance()", +"fd09b6f0": "JNDToken()", +"fd09d013": "CROWDSALE_ALLOCATION()", +"fd0a7f3e": "grantGrantableAllocations()", +"fd0aeb34": "EderCoin()", +"fd0b9dc2": "verifyWithdrawUpdate(bytes32,bytes32,uint256,uint256)", +"fd0bb752": "getBonusReceived()", +"fd0c1edb": "_setVault(address)", +"fd0c2a76": "Crowdsale(uint256,uint256,uint256,address,address)", +"fd0c78c2": "secondaryOperator()", +"fd0cdcdb": "withdrawRemaining(address)", +"fd0cfa91": "baseFeeDivisor()", +"fd0d1322": "WETCC()", +"fd0dd4d0": "btnSupply()", +"fd0e4695": "_canceloffer(address)", +"fd0edbd6": "refundSeller(address,address,uint256)", +"fd0f267b": "deathData_v0()", +"fd0f5a81": "updateWEIAmount(uint256)", +"fd1075d0": "setTokenRewardRate(uint256)", +"fd1094a9": "JaiHoToken()", +"fd12c1cb": "ethFnkRate2()", +"fd1343f1": "ESOPAndCompanySet(address,address)", +"fd138223": "remainingBountySupply()", +"fd13a7ce": "isPurchaseWithinCap(uint256,uint256)", +"fd14492a": "DinoTokenSale()", +"fd14ecfe": "balanceOfSPS()", +"fd15e091": "changeSymbolName(string)", +"fd17f289": "teamTokenSupply()", +"fd186de6": "StoToken(address,address)", +"fd18b484": "VitaToken()", +"fd19368a": "isEditionAvailable(uint8)", +"fd1a0a55": "JINGJING()", +"fd1aaa72": "sendToOwnerBalance(address,uint256)", +"fd1af169": "canSend(address,address,uint256,bytes)", +"fd1bd9b0": "getAmountLeft()", +"fd1c50e0": "sellAtIndex(uint256,uint256)", +"fd1c66da": "getCertificateIssued()", +"fd1ccaf3": "HideraNetwork(uint256,string,string)", +"fd1dc137": "settoken(address,bool)", +"fd1e582d": "ownertransfer(address,uint256)", +"fd1e5e7a": "getOrCacheDesignatedReportNoShowBond()", +"fd1f4ba5": "setAgenda(string)", +"fd1fb2fa": "rateB()", +"fd1fc4a0": "airDrop(address[],uint256)", +"fd203906": "getCarState(string)", +"fd208ca7": "endprivateIco(bool)", +"fd214edd": "collect(uint64,address[],address[],address)", +"fd221031": "tap()", +"fd221889": "priceFactorA()", +"fd222745": "melonport()", +"fd225cfd": "CoCoCoin()", +"fd228c0b": "isMintAgent(address)", +"fd22a6cf": "openGames(uint256)", +"fd23022a": "Orocoin()", +"fd232b59": "getEscrowPayments(uint256)", +"fd241e2b": "mintWithLocked(address,uint256,uint256)", +"fd2457d7": "clearStorage(bytes32[])", +"fd253492": "leadingHitCount()", +"fd255683": "getAddressValue(string)", +"fd260dfc": "getCertificationDbStatus(address)", +"fd263390": "setBank(address,bool)", +"fd26c460": "set_game(string,string)", +"fd275dd5": "TokenFreezerRules(address)", +"fd277399": "isService(bytes32)", +"fd27b51e": "getMarketSize()", +"fd27ce93": "checkRelease(address,uint256)", +"fd27d1d3": "getBlockPrice(uint256)", +"fd282afe": "batchSingleAmount(address[],uint256)", +"fd28392a": "changeSweepAccount(address)", +"fd289797": "_canSynthesizeWithViaAuction(uint256,uint256)", +"fd28feb3": "createInitialItems()", +"fd2994f7": "totalPointsPerToken()", +"fd2b4f23": "TheTestCompany()", +"fd2b6b19": "crowdSaleEnded()", +"fd2b863d": "produceUnitSeconds()", +"fd2c3abb": "targetDiscountValue8()", +"fd2c80ae": "updateInterval()", +"fd2ce18e": "getPayloadFrom(address)", +"fd2cee78": "pollEnded(bytes32)", +"fd2cf77a": "COLOR_BLUE()", +"fd2d39c5": "positionOf(address)", +"fd2db3f4": "countTotalInvestorsInCrowdsale()", +"fd2dba2f": "largeRate()", +"fd2e9caf": "PendingETH()", +"fd2ecc3f": "_setLastDate(uint256)", +"fd2edd76": "TOTAL_LOCKS()", +"fd306ca7": "transferProfitToHouse()", +"fd30929a": "disable(address[])", +"fd32649f": "cleanLog()", +"fd32f088": "calVoteResultByIndex(uint256)", +"fd330b26": "Total_Gamblers()", +"fd338726": "updatePlayerRewards(address,address)", +"fd339d18": "testAuthorityTryAuthUnauthorized()", +"fd345fc2": "totalNominees()", +"fd34d443": "kyberSwap(uint256,address,address,bytes32)", +"fd34e22e": "addrToForumId(address)", +"fd35c16d": "createLibra(bytes32[],bytes16[],uint256[])", +"fd35e71b": "entryPayoutDue(uint256)", +"fd367f7d": "toggleFeatured()", +"fd36c3f9": "burnFromAdmin(uint256)", +"fd37f1d0": "setInv1(address)", +"fd38af55": "testDebugClock()", +"fd39b40b": "GameScored(bytes32,int256,int256)", +"fd39ba59": "totalPreICOSupply()", +"fd3a77db": "acceptManagership()", +"fd3ab282": "q()", +"fd3acb5c": "getRoundOfSixteenResult(uint256)", +"fd3b34e6": "AddEntity(bytes)", +"fd3bbba5": "openOrCloseSale(bool)", +"fd3c1391": "flushShareNext()", +"fd3c1c43": "wolkAddress()", +"fd3c4277": "BattleDromeICO()", +"fd3c4cbf": "bidERC20(uint256,uint256)", +"fd3c88bd": "MultiVault(address,uint256)", +"fd3c9144": "intervalTime()", +"fd3cabc0": "_triggerPVEFinish(uint256)", +"fd3cb5d1": "doCommunityMinting(address,uint256,int256)", +"fd3d0dbf": "ioxis()", +"fd3d8cdc": "registerNameXID(string,bool)", +"fd3e2d86": "EpayToken(uint256,string,string,uint8)", +"fd3e50a7": "deliver()", +"fd3e6a0a": "transfers(address,address,uint256)", +"fd3ecae6": "changeExtendedTime(uint256)", +"fd3eefe9": "getAvailableAmount(string)", +"fd3f1a04": "unapprove(uint256)", +"fd3f2f66": "changePrivateContribution(uint256)", +"fd408767": "fireEventLog4()", +"fd40a1e9": "addMarketItem(bytes16,bytes16,bytes16[])", +"fd413596": "addBulk(address[])", +"fd41477f": "previligedLock(address,uint256)", +"fd414a29": "TOKEN_RATE_20_PERCENT_BONUS()", +"fd425dd5": "initCopper()", +"fd42657a": "_currentOwner()", +"fd426e40": "remainingTokensVIPs()", +"fd4446f3": "ICOSALE_JOINTTOKENS()", +"fd460302": "internalPresaleVesting(address,uint256,uint256,uint256,uint256,uint256)", +"fd4649ae": "UpdateUserPELOBonus(address,uint256)", +"fd46544a": "deleteAllBioTranslations()", +"fd467473": "setupFundingRate(uint256,uint256)", +"fd468aaa": "setPeriods(uint8)", +"fd473852": "TaiChiCoin()", +"fd475875": "newInversor(address,address)", +"fd475fa2": "requestAddAdmin(address,string)", +"fd478ca9": "getNumParticipants()", +"fd47eda6": "getMarketInterestRate(uint256)", +"fd48cc45": "challenge(bytes32,uint256,string)", +"fd4931a3": "getUintUsername(address,address)", +"fd4a343d": "extraMint(uint256)", +"fd4ad523": "recentlyEndedGames(uint256)", +"fd4b9d4d": "smalobox()", +"fd4bd17b": "calculateWineBuySimple(uint256)", +"fd4c5c9f": "MIN_LEADER_FRAC_BOT()", +"fd4c8c30": "PlayX20()", +"fd4d603c": "PS_PRICE()", +"fd4dabef": "solved(uint256,bytes32[])", +"fd4dbdf2": "T20coin(uint256,string,uint8,string)", +"fd4e165e": "RiceFarmer()", +"fd4e4d75": "addressA()", +"fd4eeb8f": "isOMICrowdsaleContract()", +"fd4f4125": "totalEtherHasBeenReceived()", +"fd4faee0": "Chain1()", +"fd4ff437": "addWhitelistBulk(address[],uint256[])", +"fd50299a": "addFeedback(address,uint256,address,string,uint8)", +"fd507f75": "airdropMultiple(address[])", +"fd50b005": "buyForWhitelisted()", +"fd52b3cd": "olumla()", +"fd52bdd5": "TweetherToken()", +"fd530c17": "Deposit(bytes20,uint256)", +"fd531e93": "getCertificate(address)", +"fd535203": "refundEther(uint256)", +"fd53e7b4": "admin_active_withdraw(address)", +"fd54fab8": "calculateBonusTokensAmount(uint256,uint256)", +"fd554229": "getGidOfRarity(uint8,uint8)", +"fd55714d": "getTotalCampaignsByCountry(string)", +"fd557d39": "queryCost()", +"fd56317d": "ANMvesting()", +"fd56d4c8": "getControlInfoPerToken(uint256)", +"fd577343": "setDefaultOperator(address)", +"fd57e9f9": "deleteElement()", +"fd57ee6d": "timelock(address,uint256,uint256)", +"fd58e63a": "setBonusMultiplier(uint256)", +"fd5a6019": "testUser(address)", +"fd5a60e1": "killDragon(uint256)", +"fd5c0663": "distributeBalanceToInvestors()", +"fd5c40ea": "ELIX_ADDRESS()", +"fd5c6694": "createGennezise(uint32)", +"fd5cb32c": "ItemBought(address,uint256,uint256,uint256,uint256)", +"fd5d173b": "MAX_NUM_OZT_TOKENS()", +"fd5d3e01": "getContractOrigin()", +"fd5eddf3": "supplyTokens(uint256)", +"fd5f1e03": "getParticipantLockedAmount(address,address,bytes32)", +"fd5f7256": "adminRetrieveContractConfig2()", +"fd5fde65": "mintTimeLockedTokens(address,uint256,uint256)", +"fd600107": "BONUS_TIER2()", +"fd600408": "tpe()", +"fd607594": "min_payment()", +"fd609b91": "DelVoteMemberCandidate(uint256)", +"fd60e1a8": "getReferralCounts()", +"fd6133a6": "updateTokensAvailable()", +"fd6180cb": "tokenDividendsOf(address)", +"fd619dce": "sigBountyProgramAddress()", +"fd61a725": "getMinimumReportingFeeDivisor()", +"fd626a86": "sellKWHAgainstEther(uint256)", +"fd6273a3": "ERC20KKToken()", +"fd6358ce": "setPricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", +"fd636975": "addWeight(address,uint256)", +"fd637f02": "TEAM2()", +"fd63f640": "getLLV_edit_5()", +"fd645193": "RegistrationBonus(address)", +"fd64eccb": "isForwarder()", +"fd651d2c": "TransferBy(address,address,uint256)", +"fd655073": "balancesForWithdraw(address)", +"fd6673f5": "getNumberOfPlayers()", +"fd669810": "close(address,address,uint8,uint256)", +"fd67db81": "getCharity(uint256)", +"fd68610f": "getEtherBack()", +"fd6887af": "queenPrestige()", +"fd68a422": "returnmoneycreator(uint8,uint128)", +"fd68e463": "FeitebiToken(uint256,uint8,string,string)", +"fd68f377": "ethyclos()", +"fd69f3c2": "getMarketCount()", +"fd6aad25": "indexOf(address)", +"fd6b7ef8": "safeWithdrawal()", +"fd6ba459": "mintCard(address,uint8[14])", +"fd6bb46c": "addWeb(string)", +"fd6dd889": "marketTokenCreated()", +"fd6e1b50": "reportBenign(address)", +"fd6e3bfe": "setNFTAddress(address,address)", +"fd6ecb7b": "getReceiptDetails(bytes)", +"fd6efe80": "DiscCoin()", +"fd6f4137": "getAdvocate(address)", +"fd6f5270": "CouponDeposit(address[2],uint256[7],uint8,bytes32[2],uint256)", +"fd6f5430": "setContent(string,bytes32)", +"fd70813b": "setTermsAndConditions(string)", +"fd70b40d": "HashToken(address)", +"fd70f406": "citiesCount()", +"fd71b579": "LockMechanism(address,uint256)", +"fd720090": "right86(uint256)", +"fd7230d6": "create(uint256,bytes)", +"fd72a11a": "TorusCoin(uint256,address)", +"fd72e22a": "operationsWallet()", +"fd735602": "executeN()", +"fd7394ae": "IndividualityToken()", +"fd743f2b": "Coke()", +"fd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", +"fd74a151": "ETH_FUND_DEPOSIT()", +"fd7560ca": "distributeEarningsBasedOnScore(address,address)", +"fd75b8d4": "calculateGrantClaim(address)", +"fd7611c7": "withdrawContractTokens(address)", +"fd764e68": "transfer(uint256,address,address[],uint256[],uint8[],bytes32[],bytes32[])", +"fd777d9e": "teste1()", +"fd77905c": "setColorMetadata(uint256,string)", +"fd7801df": "getCitationLength()", +"fd782de5": "Proxy()", +"fd7903a0": "getTeamFromLeaderboard(uint16,uint8)", +"fd790923": "keyImageUsedUpdate(uint256[2])", +"fd791031": "gamesFund()", +"fd793c76": "btg()", +"fd79c2a9": "ContractName()", +"fd7a1b00": "forbidDeploy(address)", +"fd7ab1ad": "chiudi_votazioni()", +"fd7ac203": "TestToken()", +"fd7af387": "canTransferBetweenUsers()", +"fd7afee8": "insertData(uint256,string,string)", +"fd7c074f": "changeReceivingAddress(address)", +"fd7c460d": "ciberLottery()", +"fd7caf4d": "loyaltyCap()", +"fd7d7948": "getTranformedId(uint64)", +"fd7e1bee": "freezeTime()", +"fd7f611e": "createCompany(string)", +"fd7fc0e0": "invest(uint32)", +"fd7fe115": "grantAccess(address,bool)", +"fd7feb35": "cancelWonderSale(uint256)", +"fd7ffdb8": "recordSystemOnSaleToken(uint256)", +"fd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", +"fd809759": "getYearIdx()", +"fd810eb3": "logAccess(bytes32,string)", +"fd8113e9": "checkprevowner(address)", +"fd812e7c": "revealHash(uint256,uint256,bytes4)", +"fd814dbd": "GameXToken()", +"fd8258bd": "canIssue(address,address,address,uint256)", +"fd82902d": "MeowCoin()", +"fd82a59f": "advisorsTokensVault()", +"fd83915e": "changeOwnership(bytes32,address)", +"fd83da09": "lastSaleDate(uint256)", +"fd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", +"fd842125": "ricardianVoucher()", +"fd854148": "periodDuration(uint256)", +"fd85b1a7": "openChannel(uint256)", +"fd8663d2": "setBuyBackFund(address)", +"fd86e49d": "token_is_active(address)", +"fd872458": "PK(address,uint8,bytes32)", +"fd874a7b": "blockedTimeForBountyTokens()", +"fd87f2cb": "ADXProxy()", +"fd8828eb": "rawSetPrice(bytes32,uint256)", +"fd89a9b5": "enableImpairedTokenContract(address,bool)", +"fd89d17f": "THIRD_SUPPLY()", +"fd8ac8d0": "capDay2()", +"fd8acc42": "buyAuction(uint256)", +"fd8ae24b": "getTimeLeftInQ1()", +"fd8b09c2": "ENBToken()", +"fd8bb681": "earlyBackerList(uint256)", +"fd8bcf6d": "requestCancelationTime()", +"fd8be237": "CrowdsaleToken(string,string,uint256)", +"fd8c46e7": "distributeTokensToShareholders(address,uint256)", +"fd8c6fe4": "RexToken(uint256,address,address)", +"fd8d4bff": "MoyOpenDistribution()", +"fd902d1e": "setCutoffs(uint256)", +"fd904207": "OPTCToken()", +"fd906c0f": "createClone(address,string,string,string,address,uint256)", +"fd906ec9": "participate(bytes1[64])", +"fd909594": "icoGoal()", +"fd90a668": "allowManuallyMintTokens()", +"fd911997": "make(uint256,address,address,bytes32,bytes32,uint256,uint256)", +"fd9133f3": "LOCKTokenCOIN()", +"fd9168a9": "setRef(uint256)", +"fd9177b5": "LogMoveMade(uint256,uint8,uint8,uint8,uint8)", +"fd922a42": "server()", +"fd923a9e": "setCentsExchangeRate(uint256)", +"fd925795": "pvt_plmt_remaining_in_Wei()", +"fd9304cd": "minInvestmentValue()", +"fd93236b": "bankerEndTime()", +"fd9393c3": "init(uint256,string,string)", +"fd93bdb1": "changeRestricted(address)", +"fd94c80b": "priEtherReceived()", +"fd958695": "isAlphaNumeric(bytes1)", +"fd97a008": "autoDividendsFor(address)", +"fd97c61a": "getgamecardcount()", +"fd97d3c1": "giveCrypto()", +"fd9923ce": "asmTransfer(address,address,uint256)", +"fd994513": "executeVote(uint256[])", +"fd99a746": "transactionsCount()", +"fd99c012": "USDTUBESupply()", +"fd99c6a4": "upgradeCar(uint32,uint8)", +"fd9a4e61": "transferTokens(uint256)", +"fd9b41ff": "getCurrentFieldBalanceAndTarget()", +"fd9b8763": "Multiplier()", +"fd9be522": "withdrawFee(address,uint256)", +"fd9bf0a4": "_setPermissions(address,address[])", +"fd9bf3aa": "mint(address,int256)", +"fd9e2120": "initPara(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"fd9e5fbf": "setTimeStaked(uint256,address)", +"fd9e8ff7": "Shard()", +"fd9f12b0": "isYellow()", +"fd9f6856": "lastDepositor()", +"fd9f9b87": "isOption(address)", +"fda0078f": "AKTestEther1(address,address,address,uint256,uint256,uint256)", +"fda03476": "luckySevenBets()", +"fda08958": "isServer(address)", +"fda0c61d": "setupWhitelist(address)", +"fda237f8": "genesisToken()", +"fda263e8": "timeEnd()", +"fda27af2": "claimSiteToken(uint8,uint256)", +"fda49eb4": "treasurer()", +"fda69fae": "getInt(string)", +"fda76eef": "RewardsGiftToken()", +"fda78599": "ecoSystemWallet()", +"fda79925": "complianceAddress()", +"fda80435": "c_MinInvestment()", +"fda86c95": "internalRevokeCert(bytes32,bytes,bytes32,bool,uint256)", +"fda92d3e": "ErrorMsg(string)", +"fda962d3": "totalGenesisRecipients()", +"fda9aafe": "WyzonCredit()", +"fdaa2632": "UploadURL(uint256,string)", +"fdaa94de": "deleteAddr(address,bytes)", +"fdaacf1b": "transferOwnerMoney(address)", +"fdab1b7b": "getCurrentAuctionPrice(address,address,uint256)", +"fdab5627": "_approveCertificate(uint256,bool)", +"fdac0025": "cups(bytes32)", +"fdac3a20": "set_eth(uint256)", +"fdac9ff7": "setAttributeValue(address,bytes32,uint256)", +"fdacbecd": "geteths(address)", +"fdacd576": "setCompleted(uint256)", +"fdad711d": "setFinalPayoutDistributionHash(bytes32)", +"fdade29f": "BuyBooster()", +"fdae3b70": "proofOfSms()", +"fdae6a92": "setTokenFeeMake(address,uint256)", +"fdae8a4c": "isAddressInBlackList(string,address)", +"fdaed331": "getTransferedUser(uint256)", +"fdaed778": "testConcatStorage32Bytes()", +"fdaf150c": "abc_initNetwork()", +"fdaf22e8": "minutos()", +"fdb04023": "closeVirtualChannel(bytes32,bytes32)", +"fdb31d10": "_createToken(string,bytes5,string,string,string,string,string,address,uint256)", +"fdb357be": "getVotingForCount(address)", +"fdb39c40": "userNameHashTaken(bytes32)", +"fdb406cb": "outstandingTokens(address)", +"fdb473b1": "unsetMyName()", +"fdb4dbe0": "totalEgg()", +"fdb5a03e": "reinvest()", +"fdb7b065": "marketDataOracle()", +"fdb7d435": "TEC(uint256,string,string)", +"fdb837e8": "GetTotalClicks()", +"fdb89360": "ParkCoin(uint256,string,string)", +"fdb914e2": "capPreSale()", +"fdb986cc": "NiobiumToken()", +"fdbab5f5": "PUBLICSALE_ENDTIMESTAMP()", +"fdbaf779": "internalBuyTokens(address,address)", +"fdbb16fd": "setEthPercent(uint256)", +"fdbb5aee": "ChannelNewBalance(address,address,uint256,uint256)", +"fdbb9fdb": "UNJUST(string,string,uint256,uint256,bool)", +"fdbc368a": "_ensureNewUser()", +"fdbc4006": "getCandidateList()", +"fdbc6530": "updaterAddress()", +"fdbc938d": "BlessingChainAlliance()", +"fdbd2534": "acceptCoinSale()", +"fdbd8dd8": "investInternal(address,uint256)", +"fdbd956d": "oraclize_query(uint256,string,bytes[],uint256)", +"fdbda9a7": "parentChange(address)", +"fdbdc112": "backersIndex(uint256)", +"fdbf0765": "hash(bytes20,uint96,uint32,bytes32[],uint16)", +"fdbf17d0": "computeFinalStake(uint256)", +"fdc03ca2": "enterContract()", +"fdc0713b": "getMinAuditPriceCount()", +"fdc193a4": "test3Fails()", +"fdc202f1": "Ticket(string,uint256)", +"fdc24095": "returnMasterNodes(address,uint256)", +"fdc272fe": "getTokenVolumebasedBonusRateForPhase3(uint256)", +"fdc292ea": "token(address,address)", +"fdc35112": "LogBuy(address,uint256,uint256)", +"fdc37c85": "securityCheckURI()", +"fdc3d8d7": "nextTaskId()", +"fdc40466": "maxInterestTime_()", +"fdc4741b": "addRecToQueue(address,uint256)", +"fdc487a7": "FundWithdrawl(address,address,uint256)", +"fdc4b338": "authorizeExtension(uint256,bool,string)", +"fdc4c3eb": "reservedWithdraw()", +"fdc5bf2c": "releaseToBuyer()", +"fdc61dd1": "coinAddress()", +"fdc63c5c": "aprobarMensaje(uint256,uint8,string)", +"fdc65c8c": "stakingBonusTokens()", +"fdc69291": "_adjustSupply(address,uint256)", +"fdc89f73": "toPowerOfThreeHalves(uint256)", +"fdc967e5": "jDallyCoin()", +"fdc98399": "getCurrentBuyerRateInPermilles(bool)", +"fdc99064": "unregisterNotary(address)", +"fdc9d0f4": "Telegram()", +"fdc9e72d": "_ownMint(uint256)", +"fdcb6068": "accessManager()", +"fdcb7539": "contruibuteData(bytes)", +"fdcbd0ec": "_deleteMinion(uint32,uint8,uint64)", +"fdcbd9b0": "GatewayStatusUpdated(bool)", +"fdcc6be3": "claimedPreICO(address)", +"fdccf45e": "computeCurrentPriceImpl(uint16,uint64)", +"fdcd0a18": "isRefundsEnabled()", +"fdcd649e": "EthAnte()", +"fdcd86ab": "addBets(bytes32)", +"fdce7f5e": "JinglesOpened(address,address,uint256)", +"fdce8e02": "checkHash1(address,uint256,address,uint256,uint256,uint256)", +"fdce9565": "determineWinner(uint256[7][],uint256[7][])", +"fdcea342": "fixPlayerMiddlename(uint256,string)", +"fdced779": "KozzProjectToken()", +"fdcf154c": "SODCOIN()", +"fdcf6f16": "getTopCompanyAtIndex(uint256)", +"fdd0298e": "PresaleAdded(address,uint256,uint256)", +"fdd080a4": "activateSaleContract(address)", +"fdd12c5e": "r(address,address)", +"fdd1a4e9": "externalCheckSign(bytes32,bytes,address)", +"fdd245ee": "referralLinkMinimum()", +"fdd2f2b0": "TIME_MULTIPLIER()", +"fdd3a879": "quick()", +"fdd3af8f": "fillTrade(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"fdd3c1a1": "distributeTimelockedTokens(address,uint256,uint256)", +"fdd3e3ff": "_removeAuction(uint256)", +"fdd3ea94": "submitPeerReview()", +"fdd42e29": "TokenOTBC(uint256,string,uint8,string)", +"fdd4fd69": "penaltyDisbursalAddress()", +"fdd5828f": "massPay(address[],uint256)", +"fdd6a803": "readowners()", +"fdd6df8c": "mul2Require(uint256)", +"fdd7d87b": "decline(address,address)", +"fdd868df": "getTracks(uint256,uint256)", +"fdd8a733": "TokenCoinExchanger()", +"fdd8ed02": "BetPlaced(uint256,uint256,address,uint256)", +"fdd96ae0": "compensateContributors(uint256,uint256)", +"fdda3d8a": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"fddaf68a": "getTipperPercentage(uint256,uint256)", +"fddb4683": "ERC20(string,string,uint256)", +"fddb7ef0": "mainSaleBonuses(uint256)", +"fddbcca5": "pause_4()", +"fddc4686": "getOwnedAssetsLength()", +"fddc5545": "BitHaus()", +"fddcbd09": "burnByCreator(address,uint256)", +"fddcc148": "iterator()", +"fdddb3ae": "Athena()", +"fddf0fc0": "ethRaised()", +"fddf16b7": "INTERFACE_SIGNATURE_ERC721()", +"fddf4e3b": "_packCombinedParams(int256,int256,int256,int256,int256)", +"fddfec78": "allowTransfer(address,address)", +"fde045b9": "HODLaddress()", +"fde07212": "Betting()", +"fde074c8": "betAddrsCount_()", +"fde0a64d": "admin_inactive_payable()", +"fde1276a": "removeDiscount(address)", +"fde17733": "demiseCEO(address)", +"fde1ee44": "addAttestation(string,bool,address)", +"fde20b6c": "tipPercentageLocked()", +"fde34dc4": "finalize(uint256,uint256,bytes32)", +"fde3cbd6": "NucleusVisionCoreToken()", +"fde440bb": "setPayoutNumeratorsValue(uint256[])", +"fde45344": "untrustContract(address)", +"fde46b03": "_set1()", +"fde4b39d": "updateStages()", +"fde4d9bf": "setAutoPrice()", +"fde5ca7d": "calcDevReward(uint256)", +"fde5e124": "t_Andrey2()", +"fde63e96": "CreateSpecialPlayer(bytes32,uint8,uint8,uint256,uint256,address)", +"fde6adb1": "placeBet(uint256,uint256,uint256,uint256)", +"fde7c834": "increase_bounty(address)", +"fde83a34": "tokensForTeam()", +"fde90733": "isRequestingEscapeTo(uint32,uint32)", +"fde9683d": "ICO_DAYS()", +"fde99668": "removeOrder(bytes32)", +"fde9ba41": "transfer(bytes,address,uint256)", +"fde9cded": "whichAuction(uint256)", +"fde9e506": "calcDividendsSum(address)", +"fdea8e0b": "presale()", +"fdeb49b0": "allocationsLength()", +"fded813c": "getInvoiceBalance(bytes32)", +"fdeddab2": "windUpContract(uint64)", +"fdee38a9": "ETH_TLD_NODE()", +"fdee4ff9": "setExpectedReturn(uint256)", +"fdee579c": "MINfinney()", +"fdee5c22": "THAWING_DURATION()", +"fdee60e9": "peloExtenstion()", +"fdee69f4": "calResult()", +"fdef9106": "hasPermission(address,address,bytes32,bytes)", +"fdf061f0": "adminWithdrawBalance()", +"fdf0d8e0": "get_account_balance_token(address)", +"fdf1a434": "updateMinInvestmentForIco(uint256)", +"fdf1aba0": "check1(uint256,uint256)", +"fdf31b39": "incrementTasksCompleted(address)", +"fdf372ad": "niceguy2()", +"fdf3b97f": "calculateVestedTokens(uint256,uint256,uint256,uint256)", +"fdf3fa53": "RemoveCategory(uint256)", +"fdf54c98": "SocialNode()", +"fdf55523": "numRefCredits(address,bool)", +"fdf56d57": "voteElection(uint256)", +"fdf58814": "getLLV_edit_3()", +"fdf62f05": "createEngine(uint256,string,uint256,uint256,uint256,uint256)", +"fdf6393c": "removeExistingDiscount(address)", +"fdf762bb": "TEAM_AND_ANGEL_SUPPLY()", +"fdf78f70": "unlockStatus(address)", +"fdf7983a": "safeTransferChild(address,address,uint256,bytes)", +"fdf8e11c": "getTotalAngels()", +"fdf97cb2": "trustee()", +"fdfa571e": "getDrawStatus(uint32)", +"fdfac8e5": "BMC()", +"fdfcb425": "activate(address,uint256,uint256,uint256,bool,bool)", +"fdfd5b43": "determineWinnerScript()", +"fdfecb0c": "isEcoAllocated12()", +"fdff31ed": "getPairSellLoyaltyPerc(address,address)", +"fdff6b30": "testInitialBalanceUsingNewContract()", +"fdff85b4": "CONFIG_RETURN()", +"fdff9b4d": "managers(address)", +"fe0030d9": "IRPToken()", +"fe00344a": "AuctionCompleted(uint256,uint256,address)", +"fe006839": "INITIAL_SUPPLLY()", +"fe00779e": "removeBountyAddresses(address[])", +"fe007eeb": "SmartRouletteTokenDividend()", +"fe00b3a3": "kosacafToken()", +"fe0149a0": "ZQCToken()", +"fe01ee96": "Clearing(address,uint256)", +"fe01f1ff": "TokenTester()", +"fe01ff62": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2])", +"fe02739c": "releaseJackpot()", +"fe029156": "swap(address,address,uint256,uint256)", +"fe038093": "createTeams()", +"fe04a5bc": "senderMIT()", +"fe04cb1d": "setStatusPrice(uint256)", +"fe052bc6": "minimumInvestmentInWei()", +"fe05e8b1": "assertFact(uint256,string)", +"fe05f7c2": "destroyforeth(uint256)", +"fe063351": "newCustomer(address,string)", +"fe06a915": "totalMTPAllocated()", +"fe082a21": "SFEscrow()", +"fe085775": "PresaleAllocation(address,uint256,uint256)", +"fe08e5fe": "setGalleryTwoPrice(uint256)", +"fe0904e6": "minerDifficulty()", +"fe094708": "Map(address,address,uint256,uint256)", +"fe098371": "findFrozenCell(address,uint128,uint128)", +"fe0a2c30": "returnArrayBytes1(uint8)", +"fe0a5ab0": "BLOCKS_BUCKET_SIZE()", +"fe0ba34e": "placeSellRequest(uint256,uint256,uint256)", +"fe0c32ae": "INEX()", +"fe0c4085": "vestingEnded(address)", +"fe0d94c1": "execute(uint256)", +"fe0dadd7": "teamTwoTotalPlayers()", +"fe0f2fab": "ChangeClaimAddress(address,address)", +"fe10d836": "setTokensToBeClaimed()", +"fe110116": "transferToPool()", +"fe12aeec": "SalesAgentAppointed(address,address)", +"fe1391ad": "generateFixtures()", +"fe13a823": "computeResponseFirstHalf(uint16)", +"fe13b118": "beginDutchAuction(uint256,uint256)", +"fe13baf7": "_encodeTokenId(int256,int256)", +"fe1439b4": "setCTO(address)", +"fe14b085": "walletUserCount()", +"fe164a5b": "setWhitelistThresholdBalance(uint256)", +"fe168eef": "_isNoNeedInCountryLimitChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe16e862": "transactionsOnForHolderUpdate(address,uint256)", +"fe16ed13": "getNDay(uint256)", +"fe173b97": "gasPrice()", +"fe1798a7": "randomAttack()", +"fe1829b6": "extendPublicSaleDiscountEndTime(uint256)", +"fe1865cd": "setCompte_26(string)", +"fe188184": "lastWinner()", +"fe18d6e6": "convertToEth(uint256)", +"fe18f82a": "getReceivedFunds(address)", +"fe192f1e": "parseIntRound(string,uint256)", +"fe195767": "distributeEPAL(address[])", +"fe19f495": "VESTING_CLIFF_DURATION()", +"fe1b0a5c": "setHardCap(address)", +"fe1b588f": "CoinExchange()", +"fe1b602a": "getPVPCycles(uint32[])", +"fe1b6f8f": "getVendorName(address)", +"fe1bae83": "callforhelp(uint256)", +"fe1c5aac": "SetParticipantURI(address,address,string)", +"fe1c91fa": "performWithdrawAccounting(uint256,address)", +"fe1cdbb8": "Module(address)", +"fe1ce5d7": "checkOwner(address,address)", +"fe1d2295": "BankWithdrawal(address,uint256)", +"fe1d470d": "calculateDiceProfit(uint256,uint256)", +"fe1da528": "tokensByEurTx(string)", +"fe1dcbb1": "AuthorizeOperator(address,address,bool)", +"fe1e079e": "getNumAnimalsXPlayer(address)", +"fe1ebb04": "augmintReserves()", +"fe1f06ea": "IQIAN(uint256,string,uint8,string)", +"fe1f11f1": "getNbits(bytes)", +"fe1f6a0b": "createGame(bytes32,address)", +"fe1fd352": "validEmitBuff()", +"fe211279": "testPrintableToken()", +"fe213712": "USER_GET_PRIZE()", +"fe21f306": "chainlinkOracleAddress()", +"fe229b61": "_softRequire(bool,bytes32)", +"fe229f7c": "RecToken()", +"fe22fcd8": "issuanceLastModified(address)", +"fe230675": "hasRecord(address)", +"fe23583d": "fechVoteResultForCandidate(address)", +"fe23b262": "currentPreICObalance()", +"fe23baea": "setHashByWriter(address,bytes32,address,bytes32)", +"fe23c6d1": "BetWon(address,uint256)", +"fe2450c1": "challengeRewardsPercent()", +"fe2506a4": "buyFromBal(uint256,uint256,bytes32)", +"fe2545dc": "purchaseFromVault(uint256)", +"fe25e00a": "arbiter()", +"fe26063f": "getTradeAndHash(uint16,address,address)", +"fe261ab0": "boolToUInt(bool,bool)", +"fe2622a5": "AgriChainDocuments()", +"fe2644c6": "creator_fee()", +"fe26cdeb": "And(bytes32,bytes32)", +"fe26da0c": "publicGetState()", +"fe26f16f": "withdrawABIHash()", +"fe275280": "Silver()", +"fe277aba": "chAllowAirdrop(bool)", +"fe280f2b": "roundInfo(uint32,uint32)", +"fe2830d3": "PausableCrowdsaleImplPaused(uint256,uint256,uint256,address)", +"fe28d1d8": "CROWD_WAVE2_BONUS()", +"fe29fc12": "CategoryCapSet(uint256,uint256)", +"fe2a4e62": "lockAndDistributeTokens(address,uint256,uint256,uint256)", +"fe2b6246": "updateMaxMinComparables(uint256,uint256,uint256,uint256)", +"fe2c6198": "price(string)", +"fe2ca553": "setBalances(uint256,uint256)", +"fe2cce6f": "PaylessMinisplit()", +"fe2cec21": "NeobitToken()", +"fe2d8933": "preIcoInvestors(address)", +"fe2da970": "getUserByUsername(bytes32)", +"fe2dac15": "LogNewQuestion(bytes32,address,uint256,string,bytes32,address,uint32,uint32,uint256,uint256)", +"fe2dc64b": "finalizeProposalVoteResults(bytes32,bytes32)", +"fe2e306b": "playe2Bid()", +"fe2e5db4": "SwapyExchange(address,address)", +"fe2edc1e": "retrieveFinished()", +"fe2fdf0b": "determineAllocation(address[],uint256[])", +"fe2ff4cf": "TokenSold(address,uint256)", +"fe31da3b": "disapproveByB(uint256,string)", +"fe32a6a7": "pushICO(uint256)", +"fe32c448": "TokenHolder(address)", +"fe332a0c": "backDARFtokenOwner()", +"fe33ada9": "isExistFounder(address)", +"fe34e486": "getStatus(bytes16)", +"fe353a5e": "checkWithdrawValueForAddressFX(address,uint256)", +"fe353d28": "_computeNextGen0Price(uint256)", +"fe35530c": "setUserWithdrawalAccount(address)", +"fe35804e": "createLottery(uint256,uint256)", +"fe37f21a": "changelp17(address)", +"fe389e09": "removeContract()", +"fe38ed66": "MarketManager()", +"fe396c71": "mintEarlySupportersTokens(address,uint256)", +"fe399121": "referrerEarnings_()", +"fe3b24b1": "createBBODocument(bytes32,uint256)", +"fe3c333b": "getActiveJudgmentByParty(address)", +"fe3c458e": "addContract(bytes32,address,bytes32)", +"fe3c51df": "getTeamId(string)", +"fe3c5d80": "becomeSnailmaster()", +"fe3c6ad4": "addclip(address,string,string,string)", +"fe3c9b6b": "setIcoEndTime(uint256)", +"fe3ce632": "lookup(bytes4,bytes)", +"fe3d002b": "AllocateAngelTokens(address,address,uint256)", +"fe3d07e4": "decrementInventory(uint256,uint256)", +"fe3d2236": "Oracle_ChangePeriod()", +"fe3e0efd": "TestERC20Token(string,string,uint256)", +"fe3ead72": "interreducemoney(address,uint256)", +"fe415139": "ProdPublicSale()", +"fe4170bc": "setDepositLock(bool)", +"fe417fa5": "claimTokens(address,uint256)", +"fe41b2da": "setInitialValidators(address[])", +"fe4215f7": "read_recast_config()", +"fe4259e3": "isMntpMigrated(address)", +"fe42cb2d": "setTokenExpectedFee(address,uint256,uint256,address)", +"fe42da15": "deleted(string,string,address,uint256)", +"fe435f6b": "getLLV_edit_33()", +"fe43be3f": "startDestruction()", +"fe442478": "sendFromContract(address,address,uint256)", +"fe44a664": "generateWithdrawalHash(string,uint256,address,uint256)", +"fe44d401": "MoncionToken()", +"fe4520ad": "_getOwnerTokens(address)", +"fe45c996": "reVerifiPost(uint256,bool,bool)", +"fe460201": "getTermsAndConditions()", +"fe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", +"fe47a2ad": "multiRequestAudit(string,uint256,uint256)", +"fe47a8a7": "totalFunding()", +"fe47c806": "processFunding(address,uint256,uint256)", +"fe47d34f": "USC(uint256,string,string)", +"fe49a9be": "ethGiven(address)", +"fe49ba1c": "getUnlockIdentifier(uint256,address,address)", +"fe49dd5f": "halveEntryPrice()", +"fe49e949": "requestChangeInsuranceFees(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256)", +"fe4a3ac9": "setExecPrice(uint256)", +"fe4a3e5c": "TokenrateUpd(uint256,uint256)", +"fe4b84df": "initialize(uint256)", +"fe4c39fe": "setMaxArenaOneDay(uint256)", +"fe4c6b08": "_deliverTokens(address,uint256,uint256,uint256)", +"fe4caa64": "isAborted()", +"fe4cee66": "numberOfPartitions()", +"fe4d2a02": "_setupStages()", +"fe4d62f9": "getMiningKing()", +"fe4dd8d9": "getTokenApproval(uint256)", +"fe4e4a84": "exchangeIsRegistered(address)", +"fe4e6bf9": "queueMint(address,uint256,uint256)", +"fe4ee216": "transferTips(address,uint256,address,uint256,uint8,bytes32,bytes32)", +"fe4f7e11": "KangenToken()", +"fe501c6f": "ChannelSettled(uint256)", +"fe50cc72": "getGreeting()", +"fe50ce60": "getBloodlineFromParents(bytes32,bytes32)", +"fe51717a": "releasePause()", +"fe51c588": "changeFactoryAdmin(address)", +"fe52ee70": "setStartingTokensAmount(uint256)", +"fe530027": "trusteeWithdraw(uint256)", +"fe536ebe": "setPreferredSaleStartAndEndTime(uint256,uint256)", +"fe537a82": "upgradeTarget()", +"fe549815": "pendingTokenBalance()", +"fe54b5fc": "kyberHash()", +"fe553250": "adminTransferWorldBalance(uint256)", +"fe556cf0": "CirculationSupply()", +"fe55932a": "setName(uint256,string)", +"fe562ee6": "moveBlockValue(address,uint8,uint8,uint8,uint8,uint256)", +"fe5675cc": "toNext()", +"fe56e232": "setManagementFee(uint256)", +"fe56f5a0": "setEntranceFee(uint256)", +"fe5709c2": "getSlotWeight(uint256,uint256)", +"fe5709cd": "createPainting(uint256)", +"fe575a87": "isBlacklisted(address)", +"fe5815a6": "hasFinished()", +"fe58d3a3": "timeLimitEnable()", +"fe599559": "updateEthToUsdExchangeRate(uint256)", +"fe5a4e2d": "contractorReleaseFunds(bytes16,address,address,uint256,uint256)", +"fe5aa8e0": "getUserIndexOnToken(address,address)", +"fe5ba303": "reservesPerUnitToken()", +"fe5d5868": "XZBX()", +"fe5daae6": "_queAmount(uint256)", +"fe5e1853": "totalBet()", +"fe5e7e3e": "endICO14()", +"fe5f1dc4": "PRESALEPLUSCROWDSALE_EVE()", +"fe5f2e88": "refund(string)", +"fe5ff154": "recruitHeroFee()", +"fe602c65": "is_proposal_supported()", +"fe60d12c": "reserved()", +"fe60ed81": "changeUserGroup(address,uint256)", +"fe6129d5": "setPromoBonus(address,uint256)", +"fe61303b": "createGuardianSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"fe6214c4": "LDTCrowdsale()", +"fe62a0a6": "transferFromPretgefund(address,uint256)", +"fe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", +"fe637e5e": "getScoreChange(int256,int256)", +"fe63d701": "removeQueueElement(uint256)", +"fe647394": "setTeamProfitAddress(address)", +"fe64d6ff": "changeAddress(address)", +"fe65066e": "setUsdMnr(uint256)", +"fe65bb65": "cashHistory()", +"fe669c26": "addPhase(uint256,uint256,uint256,uint256)", +"fe675deb": "Exchange(address,address,address,address,bytes32,uint256,address)", +"fe675f13": "toggleFieldActivation(string)", +"fe67a189": "finalizedTime()", +"fe67a54b": "endAuction()", +"fe687b2b": "teamc()", +"fe68b528": "getExchangeInformation(address)", +"fe68e285": "toNextStage()", +"fe68f73b": "getTargetBudget(uint256,uint256)", +"fe69c926": "onFrozenToken(address,uint256,uint256)", +"fe69dacd": "validDraws(address,uint256,uint256[])", +"fe6a0cd6": "hasNextSeedHashB()", +"fe6ad6c6": "isNotarized(bytes32)", +"fe6bca8f": "AllTest7()", +"fe6c19a4": "HelixexToken()", +"fe6cf9ee": "Krypticion()", +"fe6d4305": "ALC_DECIMALS()", +"fe6dcdba": "top()", +"fe6e0441": "minimalWeiTLP1()", +"fe6f0d82": "testConstructorEvent()", +"fe6f1b05": "percentDivider()", +"fe6f2a60": "matches(bytes32,bytes32)", +"fe6fef44": "setTokenQuota(uint256)", +"fe7009f2": "getSupplier(address)", +"fe704c1f": "RWQToken(uint256)", +"fe70a123": "KilledTokens(address)", +"fe70f417": "getNewForkReputationGoal()", +"fe71aec5": "LittleCactus()", +"fe71be6e": "monarchToken()", +"fe72277d": "addHashType(bytes32)", +"fe7279b1": "setTokenTransferFeeReceiver(address,address,address,address)", +"fe72ac7f": "newPrice(uint256)", +"fe72e717": "toDie(bytes)", +"fe72f3be": "addMember(string,string,string,uint256,string,string,uint256,string)", +"fe73bf21": "developer_edit_text_Exchanges_links(string)", +"fe73e3ec": "preliminaryGameResult(uint64)", +"fe73f74c": "withdrawTokenFromTAR(address,uint256)", +"fe742c6a": "millionInCents()", +"fe74f05b": "assertEq(int256,int256)", +"fe757fb5": "lastClaimPrice()", +"fe758a1e": "_timelimitCal(address)", +"fe75dff6": "GcoinProto()", +"fe75ff54": "runLottery(uint256)", +"fe76fbe3": "setStageOpeningTime(uint8,uint32)", +"fe777bcd": "etherForSale()", +"fe77adda": "reloadTickets(uint256,uint256,uint256)", +"fe77f5e5": "getCostToNextLevel(uint256)", +"fe7805f2": "MultiSigWallet()", +"fe786c5f": "prependUnderscore(string)", +"fe79bfd0": "giftCode(string,address)", +"fe7b0007": "calculateClaimable(address)", +"fe7baf8e": "RemoveAuthorityAddress(address)", +"fe7bf05e": "deathData_v6()", +"fe7c550f": "fibos(uint256)", +"fe7ccb79": "CCN()", +"fe7cd999": "registerForICO(address[],uint8)", +"fe7d1587": "canCall(address,address,address,address,bytes4)", +"fe7d8740": "getFreelancerContracts(address,uint256[],uint256[])", +"fe7e187f": "add_kycer(address)", +"fe7eba06": "getCurrencyLength(uint256)", +"fe7f0d14": "DST_BOUNTY()", +"fe800489": "totalUnitsLeft()", +"fe802d7f": "isMHTHolder(address)", +"fe8190ce": "test_v1()", +"fe8252f3": "withdrawlEnabled()", +"fe830334": "initToken(string,string,uint8,address,uint256,bool)", +"fe8311db": "sendLimitTokensToPartner(uint256)", +"fe8312c1": "validateWallet(address,bool,string)", +"fe836931": "freezeAmount()", +"fe8370bb": "NinjaCoin()", +"fe84bff5": "getTransferValue(uint256)", +"fe84c5ec": "fixedExpUnsafe(uint256,uint8)", +"fe853650": "getRandomHashesLength()", +"fe856722": "gasPrc()", +"fe859472": "PractiParlezToken()", +"fe86338c": "cancelOrderList(bytes32[],uint64[])", +"fe86de13": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,bool)", +"fe8705d5": "throwOnIncompatibleContract()", +"fe87ee28": "endRC()", +"fe8806f5": "removeRequest(address,address)", +"fe882fe2": "getValueAndBox(address)", +"fe88fc00": "balancsHolder(address)", +"fe892327": "DML_TOTAL_SUPPLY()", +"fe8925f4": "interestFeePercent()", +"fe89960f": "getFreeToken(string,address,uint256,bytes32,bytes32,uint8)", +"fe89a6c1": "MAX_ALLOWED_STAGE_1()", +"fe8a7458": "_isLowercaseLetter(bytes1)", +"fe8b2707": "depositedEtherGeneric(address,bytes4,address)", +"fe8b6642": "setEnforceRevisions(bytes32)", +"fe8beb71": "getVersionFor(address)", +"fe8cbe18": "LogBidWithdrawn(address,uint256,uint256)", +"fe8d640c": "setifoodCommunityAddress(address)", +"fe8d8c77": "setShouldGateGuard(bool)", +"fe8e6a63": "quarryCities(uint256)", +"fe8e77c7": "getGameIdByWalletUser(address)", +"fe8e992f": "unpackAllocation(bytes32)", +"fe8f4763": "ROYBOITokenIToken()", +"fe8f4bbe": "freedWinPoolToWinSystem()", +"fe8fb49f": "setLastMaxInvestments(uint256)", +"fe908b7a": "pay(bytes32,address,address,uint256,uint256,bytes)", +"fe90f3df": "WPAYCoin()", +"fe91d37f": "semanticVersionHash(uint16[3])", +"fe92049d": "submitAnswerByArbitrator(bytes32,bytes32,address)", +"fe925e80": "createLoan(address,address,address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe937fa4": "setEndMintDate(uint256)", +"fe949159": "sendMessageToChannel(string,string)", +"fe94e504": "setColor(uint8,string)", +"fe95112c": "faythe()", +"fe95a5ce": "hat()", +"fe95cbdd": "getAgentsWithService(uint256)", +"fe95ec9c": "popcnt32(uint32)", +"fe968ade": "putStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"fe972054": "create(string,string,uint8,uint256,address,uint256,uint256,uint256)", +"fe972f11": "_toMill(uint256)", +"fe97bcf4": "RandomNumberGenerated(uint256,uint8)", +"fe97e481": "maxCap_MInt()", +"fe97ee88": "hasPhone(address)", +"fe98184d": "trustedUniverseTransfer(address,address,uint256)", +"fe985cb9": "buyin(address)", +"fe98f1d1": "testCantFinalizeIfNotMultisig()", +"fe99049a": "transferFrom(address,address,uint256,uint256)", +"fe992c98": "balanceOfAll(address)", +"fe996956": "PMET(uint256,string,string)", +"fe99ad5a": "transferMinter(address)", +"fe9a3664": "supportList(address)", +"fe9afc5a": "LastUser()", +"fe9b7f2f": "maxAmountETH()", +"fe9bb2da": "setCSCFactoryERC721(address)", +"fe9bf404": "createManager(address,address)", +"fe9c3c28": "purchaseHalted()", +"fe9cc7f4": "VebEX()", +"fe9ccc1e": "maxBetWei()", +"fe9d2828": "getPI_edit_11()", +"fe9d7121": "StorageEther(address,address,address[],uint256,string,string,uint8)", +"fe9d744d": "buyBulkRegularCar(address,uint256[],address)", +"fe9d9303": "burn(uint256,bytes)", +"fe9e1c0f": "buyTokens_Vault(address,uint256,bytes8)", +"fe9fa16f": "testThrowExecuteSellOrderTwice()", +"fe9fab4d": "setPrices(string)", +"fe9fbb80": "isAuthorized(address)", +"fea0029d": "getEmissionType()", +"fea1377d": "USD_HARD_CAP()", +"fea22ae4": "newMinimumTokens(uint256)", +"fea277dc": "withdrawERC721(address,uint256,address,address)", +"fea2920e": "createNewDraw()", +"fea3afb6": "Update_UserPlayHistory_Data(uint32,uint32)", +"fea45621": "changeTotsupp(uint256)", +"fea5d7b1": "mgmtIssueBountyToken(address,uint256)", +"fea5d9e0": "lengthEqual(uint256[],uint256,string)", +"fea708f6": "totalPeriods()", +"fea78df4": "buyGold(uint256,uint256,uint8,bytes32,bytes32)", +"fea7bcfb": "additional(uint256)", +"fea8ae97": "MakerWithdrewERC20Token(address,uint256)", +"fea9b572": "MAX_NUMBER()", +"feaa29d8": "insertProfitHere()", +"feaa4cf3": "updateIntention(uint256,string,string,string)", +"feaaa476": "BurnToken(address[])", +"feac36d7": "insert(bytes32,bytes32)", +"feaceab4": "addPayment(string,address,string,uint256,uint256)", +"fead0097": "setTotalUnvestedAndUnreleasedTokens(address,uint256)", +"fead83a4": "redeemContingencyFundsBal()", +"feadce9c": "servicePause()", +"feadfdbd": "getTimeFromPrize()", +"feaea586": "recoverToken(address,address)", +"feaed589": "releasedMarketingTokens()", +"feaf0872": "getTokenTransferCount()", +"feaf1fe1": "registerToBlacklist(address)", +"feaf653d": "sendEth(address[],uint256)", +"feafb79b": "foundationAddr()", +"feb03fe1": "_handleProductionIncrease(address,uint256)", +"feb088ab": "openingTimePeriodTwo()", +"feb2432a": "addMediator(address)", +"feb272e4": "noDuplicates(bytes)", +"feb27ac9": "Proof_of_Tacos()", +"feb2a20c": "apiAccessDisabled()", +"feb31939": "attack(address,uint256,uint256[])", +"feb371cd": "VUP_TOKEN_SUPPLY_TIER2()", +"feb4ad89": "addEarlyPurchases()", +"feb4c708": "nextIdentityAccount()", +"feb50430": "getLevitatingKittens(bytes32,uint64)", +"feb5d106": "getBPCount()", +"feb7267b": "deleteMintable(address)", +"feb7d2fb": "KoniosToken(uint256,string,string)", +"feb80ee4": "stakeFromTokenContract(address,uint256)", +"feb99390": "add(uint128,uint128)", +"feba95fb": "purchaseFor(uint128,address)", +"febb0f7e": "bar()", +"febb1315": "gasLimitInWei()", +"febb5407": "currentLiquidity(address)", +"febc14b1": "roundCounter()", +"febc2980": "calculateWinnersCount(uint256)", +"febc8c39": "feeAffiliate()", +"febc9dec": "stringEquals(string,string)", +"febdb9b8": "rewardWinner()", +"febe4909": "approve(uint256,address)", +"febe8129": "destrcut()", +"febec059": "GetCurrentTypeSaleCount(uint256)", +"febefd61": "startAuctionsAndBid(bytes32[],bytes32)", +"fec07cb2": "calculateTally(address,uint256)", +"fec0cc19": "setIcoPhase4(uint256,uint256)", +"fec1aa12": "codetokenIndexToApproved(uint256)", +"fec1c41f": "AddNewBooster(uint256,int256,uint256,uint256,uint256,uint256,uint256)", +"fec2e27b": "acceptManagement(string)", +"fec320f4": "ListPairsForReserve(address,address,address,bool)", +"fec35182": "Crowdsale(address,uint256,uint256,uint256,uint256,address,address)", +"fec3e941": "MintAndTransferIAC(address,uint256,bytes32)", +"fec3fbe2": "functionTwo(uint256,uint256,uint256,uint256)", +"fec5438c": "costToCallOraclizeInWei()", +"fec568d4": "TransactionCompleted(uint128,uint256,uint256,string)", +"fec5c5f7": "FINX2Token()", +"fec5d3b0": "BTCRate()", +"fec5f0d2": "applyForGladiatorBattle(uint256,uint256,uint8[2])", +"fec69a87": "OneStandardToken(uint256,string,uint8,string)", +"fec6c66e": "applyFromCertificate(string,string,string,uint256)", +"fec74d31": "eolBlockNumber()", +"fec7c0a2": "FRPRUPEES()", +"fec7fc8e": "isSigned(bytes16,address)", +"fec84aac": "LogUserAddedToWhiteList(address)", +"fec850c3": "tokenSetBurnFeeReceiver(address,address,address,address)", +"fec86fb5": "userdynamicprofis()", +"fec8db83": "C3_TokenCreate(uint256,string,string)", +"fec966df": "countSmartSharingContract()", +"fec97c03": "finishFundraiser(uint256)", +"fec9cd77": "allowanceToBurn(address,address)", +"fec9dc1f": "updateNewToken(address,address)", +"fecab4bf": "vreoSaleOngoing()", +"fecadafd": "pushAtom(uint64,uint8,uint8,uint8,uint32,uint64,uint64,uint128,uint128,uint32)", +"fecc36c0": "fun(int256)", +"fecca5a5": "checkMyDonation()", +"fecd3486": "getTulip(uint256)", +"fecd817c": "cancelBuy()", +"fece5543": "mock_remove(address,address)", +"fecf9959": "withdrawTokens(uint256,address,uint256)", +"fed03118": "getTDETokenExchangeRate(uint256)", +"fed0827e": "RoseCoin()", +"fed09b2f": "isFemaleSale()", +"fed0b877": "distributeAirdropMulti(address[],uint256[])", +"fed0d2a1": "sellMultiplier()", +"fed1c977": "blockTransfering()", +"fed1cec2": "addWinners(uint256)", +"fed2063c": "mintDataStream(address,uint256,bytes32,bytes32,uint256)", +"fed23223": "sellFirst(uint256)", +"fed26772": "zeroFeeTransferByowner(address,address,uint256)", +"fed39929": "productOwner(string)", +"fed3a300": "right89(uint256)", +"fed3b141": "Coinbase(uint256)", +"fed3f18d": "admin_inactive_withdraw(address)", +"fed4614b": "funeral(bytes,int256)", +"fed4de76": "addAuthorizeRole(string,string,string)", +"fed503cd": "transferCoinInStages(address,address,uint256,uint256)", +"fed73b54": "getPlayerIdOfIndex(uint256,uint256)", +"fed7bb07": "getSeedAmountForGameId(uint256)", +"fed82ef3": "setSanityBounds(uint256)", +"fed8a53b": "callbackInsertApproveAndDistribute(uint256,address[],uint256[])", +"fed8b30a": "canSettleOrder(uint256,uint256)", +"fed8f40f": "invalidateMail(uint256)", +"fed9981e": "setDemocAdminEmergency(bytes32,address)", +"fed9d44f": "ARBITRARY_VALUATION_IN_ETH()", +"feda1045": "slaveWallet()", +"feda38bc": "setCrowdsaleOpen(bool)", +"fedabacf": "claimPrepaid(uint256,uint256,uint256,string,uint256)", +"fedb6dfd": "TACTICALCRUISER_FTL_SPEED()", +"fedbceba": "getRankLandLimit(uint256)", +"fedc2a28": "_rewardWinners(string,uint8,address[])", +"fedce093": "TheNextBlock()", +"fedda73b": "HC8ICO()", +"fedda89c": "claimVesting()", +"feddb41c": "peculOld()", +"feddd053": "updateStakers()", +"fede04c3": "reject(uint32,int256)", +"fede5cc6": "issueInternal(address,uint256,bool)", +"fedeac70": "handleQuickCloseChannel(address,bytes32,address,uint256,address,uint256,uint256)", +"fedf1ed8": "getCompte_21()", +"fedfd535": "Config()", +"fedfe46c": "vote(address,uint256,uint256,uint256)", +"fedffec0": "currentReferralPercent()", +"fee01177": "getTopics()", +"fee0596f": "createContractCompany(string)", +"fee13823": "ChargeTreasure()", +"fee1396b": "registerNewRecord(bytes32)", +"fee160be": "CarFare(uint16,uint16)", +"fee16841": "showDeposit(address)", +"fee21471": "getDayIndex_(uint256)", +"fee24454": "sendNowLastCount()", +"fee2cb05": "R2()", +"fee3154c": "setTransferWhitelist(address,address,bool)", +"fee35ff8": "newInvest(uint256,address,uint256)", +"fee4f41e": "signUp(string,address)", +"fee4f84d": "CryptopusToken()", +"fee692a3": "getAutomatedReportDisputeDueTimestamp()", +"fee6d28c": "addSnapshot(string)", +"fee7e35d": "tokenURISafe(uint256)", +"fee8775b": "Ping(address)", +"fee87e3b": "addresstoBytes(address)", +"fee99898": "getFee(address,address)", +"fee99e93": "HPAToken(uint256,string,uint8,string)", +"fee9aa44": "calculateRewardForAddress(address,address)", +"fee9ca13": "continueSale()", +"feea01b9": "create(bytes16,uint64,bytes)", +"feea799b": "rejectTransaction(uint256,bytes)", +"feec6fc1": "Tegchain(uint256,string,string)", +"feec756c": "updateRecipient(address)", +"feec7680": "changeFeesAddress(address)", +"feed5561": "getContributorsCount()", +"feed58ff": "setBackgroundColors(bytes3[])", +"feeda367": "addMarketTo()", +"feee8139": "setColors(uint32[],uint8[])", +"feefee1b": "firstExchangeRatePeriod()", +"fef038e8": "piggyBank(address)", +"fef10b95": "poolReward()", +"fef1dc7d": "seekerValue()", +"fef28cac": "Yudhacoin()", +"fef2cc97": "getPreAuthorizedAmount(address,address)", +"fef429e9": "linkClaimedTo(address)", +"fef47e38": "CREATE_NAME_ROLE()", +"fef4b969": "refundFromSeveral(uint256,address[])", +"fef5ae43": "enterCurrentRound()", +"fef5b185": "updateUserEducation(string,uint256,string,uint16)", +"fef5f1e7": "validateRequestParams(address[4],address,uint256[12],uint256,bytes,uint256)", +"fef636a8": "stage2Start()", +"fef64e37": "packedToStartTime(uint256)", +"fef7d5a8": "findEmptyBenefactorIndex()", +"fef8383e": "gameOpponent()", +"fef88502": "hommie()", +"fef9b5ae": "changeminpublicsale(uint256)", +"fef9cfe1": "setAvailableAfterStart(uint256)", +"fefa69a0": "batchCancelOrders()", +"fefa7d1c": "isLockup(address)", +"fefa7e41": "countDrugs()", +"fefa9bb1": "addReferrer(address)", +"fefaa293": "reservedTokensTeam()", +"fefaa626": "gameFinishedTime()", +"fefacee1": "MediatorFees()", +"fefb130e": "srb(uint256)", +"fefb8dc3": "publishPost(string,string)", +"fefb94a5": "PFAToken()", +"fefba6dd": "transferAnyERC223Token(address,uint256)", +"fefc38fd": "startActivated()", +"fefc7089": "AVAILABLE_RESERVE_SUPPLY()", +"fefc8b41": "test_insert_findWithHintNotTightBound()", +"fefd336c": "getSettingValues()", +"fefd41b9": "balanceOfRick(address)", +"fefd51b2": "getBrick(uint256)", +"fefd6e9a": "allocateEqual(address[],uint256)", +"feff0506": "addListing(string,string,uint256,address)", +"feffd402": "fetchVoteMainInfo()", +"ff00c592": "setNumRewardsAvailableForAddress(uint256,address)", +"ff01f11a": "finalUnpaused()", +"ff01ff08": "setGameVars(uint256,uint256,uint256,uint256,uint256)", +"ff01ffa8": "refundCrowdsaleContributor()", +"ff02326f": "MoonDustDividends()", +"ff025819": "numberOfActiveProposals(bytes32)", +"ff026158": "setSale(uint256,address)", +"ff044add": "oldCratesSold()", +"ff056949": "decreaseBalance(address,uint256)", +"ff05a9f0": "giftPlot(uint256,uint256,address)", +"ff05edd8": "inflateSupply(uint256)", +"ff069b4c": "getPetbyTileId(uint16,uint8)", +"ff06bb57": "setEthInCents(uint256)", +"ff07061b": "LUC()", +"ff08d2b0": "PayMiners()", +"ff09068f": "SMRTCoin()", +"ff0935b1": "checkFeeSchedule(address)", +"ff0938a7": "isPause()", +"ff097659": "getServerInfo(uint256)", +"ff09ff99": "purchaseCity(uint256)", +"ff0a22db": "_shareProfit(uint256,uint256,address)", +"ff0b3fc5": "intervalLength()", +"ff0b9c90": "createCheckpoint()", +"ff0bfc91": "mayGenerateAddr()", +"ff0c5a4b": "ContributionReceived(bytes32,address,address,uint256,uint256)", +"ff0cd868": "ShareEstateToken()", +"ff0ec23e": "setEditionName(uint8,string)", +"ff0efd6c": "submitDistance(uint256[])", +"ff0f27de": "setIDChain(address,address)", +"ff0f2e80": "getNumOrdersByPayee()", +"ff0f2f71": "setTTCAddress(address)", +"ff102896": "tokenRedemption(address,string)", +"ff10dc66": "quickTrade(address,address,uint256)", +"ff11e1db": "collectEther()", +"ff12128a": "step(int256,bool)", +"ff125c8a": "transferAllowed(address,address,uint256)", +"ff13c6c6": "RefundLoaded(uint256)", +"ff1401cc": "OdinCoin(address)", +"ff163aca": "AcquinomToken(address)", +"ff176844": "ThanosXToken()", +"ff1780ec": "rescueToken(address[],uint256[])", +"ff178834": "testApproveWillModifyAllowance()", +"ff17bc98": "burnOwnerTokens()", +"ff184b5d": "EthPerToken()", +"ff18539b": "setDepositCreator(address)", +"ff186b2e": "ethPrice()", +"ff190061": "balanceOfActiveToken(address)", +"ff192bc8": "isFreeze(address)", +"ff197bc3": "presaleTokenSold()", +"ff1ad781": "deadbids(address)", +"ff1ad7fa": "claimRewardBy(address,uint256,string)", +"ff1b01a6": "bet1000(uint256)", +"ff1b4341": "easyPropose(address,uint256,uint256)", +"ff1b636d": "Admin()", +"ff1c52d8": "Queue(bytes32,bytes32,bool,bytes32,address)", +"ff1c559e": "ChampionGameFinished(uint256,address,uint256,uint256)", +"ff1ca005": "supportComponent(uint16,uint256)", +"ff1d20b5": "getSecondStageWallet()", +"ff1d2712": "versionIndex()", +"ff1d83ae": "getTokenGranteesLength()", +"ff1d91b4": "ccStartTime()", +"ff1d9dd4": "updatePoolContract(address)", +"ff1e28a4": "createStamp(address,uint256)", +"ff1f7046": "requiresAuction(string)", +"ff1fd974": "getPayAmount(address,address,uint256)", +"ff2073d7": "fundRaiser()", +"ff208fa5": "test_insert_findWithHintNextAtPosition(int256)", +"ff213498": "FlowingHair()", +"ff21984a": "testMintAuth(int256)", +"ff21f27f": "issueToken(uint256,uint256,uint256,uint256)", +"ff22028b": "requireOwnerUnlockedAmount(uint256)", +"ff2258cb": "diffYears(uint256,uint256)", +"ff2263b7": "firstRoundStartTimestamp()", +"ff2311a4": "GetPatient()", +"ff238839": "showDelegateMsgSender(address)", +"ff23c7f2": "createArtefact(uint256,string,uint256,uint256,uint256)", +"ff23e1eb": "ShalloToken()", +"ff249bb0": "getTokenPacksAvailable()", +"ff25af24": "migrateAccount(bytes32,bytes32,uint256,uint256,address)", +"ff25e16d": "getLogErrorArguments()", +"ff25f859": "KIN_FOUNDATION_ADDRESS()", +"ff262ea5": "construct(uint256)", +"ff266d26": "reopen(address)", +"ff272ad4": "__toDecimals(uint256)", +"ff27848a": "GoldToken(address)", +"ff27c476": "shiftBitsRight(bytes,uint256)", +"ff27cbda": "getPI_edit_4()", +"ff28bcc2": "increaseReward()", +"ff28cdaf": "WCT(address)", +"ff28d625": "releaseEarning(bytes32,bytes32,bytes32,bool,address,address)", +"ff29507d": "fundingStopBlock()", +"ff299a63": "BTCUToken(uint256,string,uint8,string)", +"ff29bc95": "assignBalance(address,uint256,uint256)", +"ff29c104": "getTotalLeaderboards()", +"ff2a3776": "claimAllUnsold()", +"ff2b0571": "doFreeExtension(bytes32)", +"ff2b247f": "addNewTicket(uint256,bytes32,uint256,uint256,uint256)", +"ff2b350d": "acceptGiftTokens(address)", +"ff2d4b71": "addDoctor(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"ff2eff94": "Cow()", +"ff2f7a35": "getDeed(bytes32)", +"ff30feef": "walletTranslate()", +"ff31e930": "prizePoolAddress()", +"ff31f9e6": "getSecurityDepositRegistry()", +"ff332ab7": "getTokenDetails()", +"ff34ef7d": "PrimaToken()", +"ff359cb8": "RATE_SALESTAGE2()", +"ff36cf59": "contributeETH(address)", +"ff377705": "getNumEntries(address,address,uint256)", +"ff37839b": "getTxt(uint256)", +"ff37d31d": "escrowDeed(uint64)", +"ff394153": "transferEthersToDividendManager(uint256)", +"ff39ae55": "EthereumExtreme()", +"ff3a5eea": "isIco()", +"ff3a91d9": "getOwnerPicture(bytes32)", +"ff3adc83": "GazeCoinCrowdsale()", +"ff3af97f": "setBonusToken(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"ff3bf1f4": "sitePercent_()", +"ff3c1a8f": "getTitle()", +"ff3c9472": "adduser(string,string,address)", +"ff3d1be0": "stopPreIco_step1()", +"ff3d398c": "buyTokensByAtes(address,uint256,string)", +"ff3e51c8": "ZULICC()", +"ff3e8ba1": "_transferDirect(uint256,uint256,uint256,bytes32)", +"ff3ef460": "_userOwnsToken(address,uint256)", +"ff3f427c": "createMobsterWithOwner(string,address,uint256,uint256,uint256,string)", +"ff3fb765": "testUpdateCase()", +"ff4039ea": "getDelegate(uint32)", +"ff40807b": "getAccumulator()", +"ff40fcf6": "buyBBC(address)", +"ff414b64": "getBalanceERC20(address)", +"ff41f5cc": "HUT34_RETAIN()", +"ff423357": "withdrawAmount(uint256,address)", +"ff429fc8": "getCooldown(uint16)", +"ff42fd41": "getTotalLockedAmounts(address)", +"ff4329ee": "receiveCashback(address)", +"ff4408ee": "stopCrowding()", +"ff46f210": "isUnfrozenAccount(address)", +"ff470507": "VaultbankVotingToken()", +"ff48fd9c": "mintGreen(address,uint256)", +"ff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", +"ff49b8ef": "KyberWhiteList(address)", +"ff4a6638": "followTrader(bytes,address,bytes32,uint256,address,uint256)", +"ff4a7a7c": "Blin()", +"ff4ab29c": "setMarketFees(uint256)", +"ff4b6fea": "_shiftLeft(bytes32,uint256)", +"ff4b9b95": "clearCandidateCache()", +"ff4bd173": "dealBuyContract(uint256,uint256,string,uint256,uint256,string)", +"ff4bf170": "TechieCoin()", +"ff4c9fa5": "getCurrentPriceForToken(uint256)", +"ff4cfa5e": "onSignUp(string,uint256)", +"ff4d7404": "sell(uint8,string,uint256,uint256,uint32)", +"ff4dddc4": "tokensInWeiSold()", +"ff4ea29e": "migrateTokens(address[])", +"ff4f03a9": "developeo()", +"ff507efa": "Consulteth(uint256,uint256)", +"ff508d76": "renderWeb()", +"ff50abdc": "totalDeposited()", +"ff50fcb6": "usedIcoSupply()", +"ff510ad8": "isOnTrade(uint256)", +"ff51d18c": "getFlightConnections(uint16)", +"ff523cb2": "oraclizeQueryGas(uint256)", +"ff53c5a3": "refundInvestor(address)", +"ff552482": "GennovaToken()", +"ff556ecb": "releaseUnicorn(uint256)", +"ff55da1c": "assertOnlySpecifiedCaller(address,bytes32)", +"ff55e2ee": "setCasinoAddress(address)", +"ff5639c4": "optInFromClassic()", +"ff56b59a": "start6Phase2025()", +"ff56b65a": "getTxPaymentKWh(bytes32)", +"ff5732a5": "calculateTokenGet(uint256,uint256,uint256,bool,bytes32)", +"ff574213": "YeekFormula()", +"ff584597": "setGameResult(bytes32,int256,int256)", +"ff585caf": "callback(uint256)", +"ff592125": "issuedNum()", +"ff596069": "computeAddressBonus(uint16)", +"ff597790": "getSold(uint256)", +"ff598a06": "betTotalGasprice_()", +"ff59f3cc": "theCyberGatekeeper()", +"ff5a478b": "finalizeTge()", +"ff5a47bd": "generateSeedB()", +"ff5b98b8": "setAvgReportingGasPrice(uint256)", +"ff5bc8a7": "getSaleContractTokensLimit(address)", +"ff5ce378": "_addTokenTo(address,uint256)", +"ff5d2c39": "to62Encoding(uint256,uint256)", +"ff5de44b": "getStockBalance(address,address,uint256)", +"ff5e51b3": "VTOSToken(uint256,string,string)", +"ff5e7d4d": "lockedFundsSeconds()", +"ff5f1346": "forSell()", +"ff5f8b4b": "takeOwnership(uint256,address)", +"ff5fcf01": "initializeNewSale(uint256,uint256,address,address)", +"ff5feb3e": "getVoterVotesCount(address)", +"ff5ff81f": "LastWillContractOraclize(address,address[],uint8[],uint256)", +"ff600081": "getValuePerMicroKey()", +"ff60af84": "setNewMinDeposite(uint256)", +"ff60cdf6": "get1TokenSellPrice()", +"ff615b87": "SECOND_PHASE_PRICE_FACTOR()", +"ff61ad09": "getRoomBalance(uint256)", +"ff62d2cf": "rewardAdjustmentPeriod()", +"ff630748": "setStepLimits(uint256,uint256)", +"ff6307f8": "angelFoundationShareDenominator()", +"ff6387ad": "setconfigurationTokenPrice(uint256)", +"ff6395a4": "assigned_bids()", +"ff63ac3b": "_getTime()", +"ff6417c1": "paidAddress(uint256)", +"ff6477be": "getScam(uint256)", +"ff64d469": "weR()", +"ff65226c": "canBuy()", +"ff655320": "withdrawFirst()", +"ff65e44a": "purchaseBronze()", +"ff668cbe": "donacionTeleton()", +"ff66a305": "setBountyManager(address)", +"ff67577a": "Appoint_Mediator(uint256)", +"ff67c9f5": "getRequirementTime(address)", +"ff6867c0": "startAndSetStopTime(uint256)", +"ff69ac36": "currentTokenAmount()", +"ff69e2bc": "CurrentPrice()", +"ff69f35e": "CryptoEmojis()", +"ff6a6df7": "MultiValidator()", +"ff6c33e6": "TOKEN_OWNER()", +"ff6c8b87": "MPGame(uint8)", +"ff6d24b1": "SedPOWToken()", +"ff6d6f63": "BCTToken(uint256,string,string)", +"ff6f0d54": "TipSmart()", +"ff6f2914": "foundersRewardsAccount()", +"ff7070eb": "_processIncomingEther(address,uint256)", +"ff70bd9c": "PirateNinjaCoin(string,uint8,string,uint256,uint256)", +"ff70c4d1": "getBuyerAddress(uint16,uint16)", +"ff70e8d9": "STAKE_MULTIPLIER()", +"ff70fa49": "setDeveloper(address)", +"ff71c6b0": "WALLET_T8EX_COMMUNITY()", +"ff722b08": "getSkillTypeCnt()", +"ff72c845": "bat()", +"ff739e40": "minEnterFee()", +"ff73d2d8": "getIsRevenuePaid(address,uint256)", +"ff74927b": "strConcat(string,string)", +"ff74c0b8": "subTotalInvoiced(address,uint256,uint256)", +"ff74e915": "NewContent(string)", +"ff75567b": "participant2SentEtherCount()", +"ff757d59": "kittenContract()", +"ff776f55": "regist(address)", +"ff77898a": "numberOfContractors()", +"ff7835bf": "SmartCoinCash()", +"ff78461c": "initSilver()", +"ff786f2d": "LogTradeError(address,address,uint256,uint256,uint16)", +"ff7885e8": "withdraw(address,address,address)", +"ff78d5ed": "mdtComparable()", +"ff78e48b": "setIsParentOf(bool)", +"ff79d600": "BATAGOR()", +"ff7b5730": "getSCF()", +"ff7c9329": "setMintingCompleted()", +"ff7c977f": "admin_dividend(int256,int256)", +"ff7e17b6": "endTimeTLP1()", +"ff7e5abd": "vestingIsCompleted(address,uint256)", +"ff7f5f2a": "EtherizationUtils2()", +"ff8028b3": "megaCandyToken()", +"ff80b69a": "minPresaleAmount()", +"ff81c554": "coinMinted()", +"ff81fb91": "unhint(int256,bytes32)", +"ff82b174": "getUserBigPromoBonus(address,address)", +"ff83ce17": "ManagerSet(address,bool)", +"ff83f562": "acceptOwnership(string)", +"ff840553": "roundid()", +"ff8489df": "tokensForFinalize()", +"ff848eaf": "newDeal(uint256,uint256,uint256,uint256)", +"ff84990c": "MRDSCoinToken()", +"ff84d49f": "setMiniPoolEdit_3(string)", +"ff84ed36": "Identity(address,address)", +"ff855ac3": "withdrawTokens1(uint256)", +"ff85bd39": "Free()", +"ff85fba2": "forceStart()", +"ff862839": "modifyairdrop(uint256)", +"ff8872c2": "accountEthAmount(address)", +"ff895a62": "deActivate()", +"ff897dbd": "updateMinAmount(uint256)", +"ff89a720": "ECCToken(uint256,string,string)", +"ff8bfffc": "sendEthTweet(uint256,bool,string,bool,string,string,string)", +"ff8cffc1": "returnBorrowerPaidLate(uint256)", +"ff8ed0f7": "Map(address,uint256)", +"ff8ee507": "EthernalLoveParent()", +"ff8f7551": "FINCO()", +"ff8f9b9f": "LOL10()", +"ff8f9de7": "BuyRTCtokens()", +"ff8fa0dd": "transferFromWithData(address,address,uint256,bytes32)", +"ff8fec7f": "setHashByProvider(bytes32,bytes32)", +"ff9151dd": "retrait_4()", +"ff91b949": "nonPublicSupply()", +"ff91bb45": "castVote(address,uint256)", +"ff92eb2c": "selleth(uint256)", +"ff938f4a": "addClientAuthority(address)", +"ff93a512": "createEvent(uint256,uint256,uint256,uint256,uint256,uint256,address[])", +"ff947525": "isShutDown()", +"ff94e502": "getIdByIndex(uint256)", +"ff950e90": "batchSpawnAsset(address[],uint256[],uint256[],uint256)", +"ff95a8d2": "grantFounderTeamToken()", +"ff96b467": "setLockup_contributors(address,uint256,uint256)", +"ff97278f": "_timeLimit(uint256)", +"ff981099": "getVotes(uint256)", +"ff9852bf": "balanceOwed(address)", +"ff989a0d": "safeDecrement(uint256,uint256)", +"ff9913e8": "allow(address)", +"ff992ef5": "addInvestorList(address,uint256)", +"ff993272": "bonus10end()", +"ff993a18": "ChangeBuyRate(uint256)", +"ff9a6773": "DexToken(address,address,address,uint256,uint256,uint256)", +"ff9b3acf": "house()", +"ff9c1c5c": "preICODataInitialized()", +"ff9c8437": "releaseStake(uint256,address,address,uint256)", +"ff9e1b38": "addUndergraduate(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"ff9e3948": "phase_3_remaining_tokens()", +"ff9e7fe1": "MaxPowerCoin()", +"ff9f0e5c": "updateToken()", +"ff9f3055": "generateDna(uint256[])", +"ff9f633f": "lockedAddresses(address,uint256)", +"ffa05698": "get_back()", +"ffa08cb7": "checkPendingWithdrawal()", +"ffa094fb": "highestBidIsCC()", +"ffa1a2f1": "deleteMark()", +"ffa1ad74": "VERSION()", +"ffa230b0": "totalCharitySent()", +"ffa2548a": "LifeSet_008()", +"ffa2f5c2": "coindropsStatus()", +"ffa309e4": "currentFiscalYear()", +"ffa32d1c": "DST_ADVISERS()", +"ffa34f7c": "isFreezing(address)", +"ffa39d27": "ElectricCoin()", +"ffa39d3f": "_isAuthorized(address,bytes4)", +"ffa40a4c": "pregnantPandas()", +"ffa49c6a": "expiryEpoch()", +"ffa59501": "votesRemaining(uint64,uint64,uint8)", +"ffa61f69": "AllowSuccess(address,address)", +"ffa640d8": "tradeContract()", +"ffa651b6": "setEngineerInterface(address)", +"ffa67f6c": "crowdsaleUnpause()", +"ffa68839": "initDate()", +"ffa696d3": "exits(bytes32)", +"ffa6ae80": "isIdRegistered(bytes16)", +"ffa72707": "startBuying(uint256)", +"ffa82f78": "advisorsTokenAmount()", +"ffa89a00": "permissionToChange(address,address,uint256)", +"ffa8acde": "StrongHold()", +"ffa8c44a": "MINSALESCAP()", +"ffa90f7f": "redeemFrom(address,uint256,bytes,bytes)", +"ffa97aca": "getInvoice(address,bytes32)", +"ffaa3608": "voteFor()", +"ffaa67d4": "deployVesting(address,string,uint256,bool,bool,bool,address)", +"ffaa9c22": "setAllSupply(uint256)", +"ffaad6a5": "depositTo(address,uint256)", +"ffab0959": "backersRedeemed()", +"ffab3269": "EthRefunded(address,uint256)", +"ffab7dcd": "setPlayerGeneralDt(uint64,uint32)", +"ffab984d": "preIcoBuyPrice()", +"ffacade4": "setFilter(uint256,address)", +"fface4a3": "rowQuiter()", +"ffacf300": "doCrowdsaleMinting(address,uint256,int256)", +"ffad4fc1": "batchLock(address[],uint256)", +"ffad75eb": "finishICO(bool)", +"ffae15ba": "e()", +"ffae2c5b": "getAuthority(uint256)", +"ffae399e": "shouldRevert(bool)", +"ffaef25e": "addDataResponse(address,address,string)", +"ffaf78c2": "_createPiranha(string,address,uint256,uint8,uint256,uint8)", +"ffaf862f": "getProductWeiRaised(address)", +"ffb00df1": "TOKENS_LOCKED_2Y_TOTAL()", +"ffb05c6f": "minRequiredBlockQueueTime()", +"ffb0885d": "forceTransfer(address,uint256)", +"ffb171fb": "verifyBalanceProof(address,uint256,bytes)", +"ffb1a06d": "priceIsStale()", +"ffb1a6cb": "getWins(address)", +"ffb24446": "setMaxTicket(uint256)", +"ffb2c479": "process(uint256)", +"ffb2d35d": "allowRefund()", +"ffb308ef": "writeDocument(uint128,uint16,uint256,bytes32[],string,string,string)", +"ffb31c62": "BetterAuction()", +"ffb3401d": "SimpleAuction(uint256,address)", +"ffb38e84": "_setMinter(address,bool)", +"ffb391fe": "HM(uint256)", +"ffb40152": "contract_verified()", +"ffb4c857": "_confirmAndCheck(bytes32)", +"ffb4e44d": "get_participant(address,address)", +"ffb54a99": "tradingOpen()", +"ffb58247": "Ektcoin(uint256,uint256)", +"ffb5fc2a": "changeDeDeNetwork(address)", +"ffb747f0": "updateBatches(address,address,uint256)", +"ffb7bfba": "watchProposal(uint256)", +"ffb87173": "pixelPrice()", +"ffb92678": "commFoundAddr()", +"ffba376c": "unfreezeTokens()", +"ffbac044": "KickCommitteeFromMapAndArrayEvent(address)", +"ffbafdfe": "updateState(uint256,uint8)", +"ffbb62a3": "withdrawCoins()", +"ffbc9bd0": "canSubmit()", +"ffbd26ce": "addReinforcedWhitelist(address[])", +"ffbd400b": "boolToUInt(bool)", +"ffbd4dd5": "checkCertificate(string)", +"ffbd6f72": "splice(uint8[],uint256,uint256)", +"ffbd73d0": "OSUniEDUSupply()", +"ffbd8c37": "buyBNNTokens()", +"ffbfd19e": "accUserReward()", +"ffbfd38b": "FooStdToken()", +"ffc0060e": "QingFengCabve(uint256,string,uint8,string)", +"ffc0483d": "CoreAddress()", +"ffc0d035": "hgtDecimals()", +"ffc1b038": "blacklistInvestor(address)", +"ffc31215": "getStore(string)", +"ffc3a769": "transfer(address[],uint256[])", +"ffc3f1f2": "HyperToken()", +"ffc42904": "MarketContract()", +"ffc48c61": "buyerAddressTransfer(string,address,address)", +"ffc4bbb3": "FirstLevelCost()", +"ffc52a1f": "registerByList(address[],uint256[])", +"ffc54ea4": "setTokenActive(uint256,bool)", +"ffc6ff1e": "closeSubmission()", +"ffc797e4": "setLowerBondPrice(uint256,uint256)", +"ffc85dc5": "finalizeDeposits()", +"ffc8bcd7": "getRefToById(address,address,uint256)", +"ffc8c4cb": "totalConsume()", +"ffc9152e": "isRefunded(address)", +"ffc92376": "subEmployerTotalInvoiced(address,address,uint256)", +"ffc9896b": "getUserData(address)", +"ffca2968": "ExternalSaleSha3(uint8,bytes32,address,uint256,uint256)", +"ffcab3e9": "getValidDurationSignatures()", +"ffcad44e": "getGroupFileCount(string)", +"ffcb1edb": "getDividendTokenSupply()", +"ffcb39c2": "tier0(address)", +"ffcbb5df": "printStats()", +"ffcc7bbf": "getUserAtIndex(uint256)", +"ffcc8484": "nextroundERCtradeactive()", +"ffcce369": "changeIPFSHash(string)", +"ffcd64e5": "_issueByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ffcdcb51": "AhooleeTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"ffcecf09": "PRE_SALE_START_3()", +"ffcf1ade": "logPromiseCanceled(uint256)", +"ffcf21a9": "eventOracles(bytes,uint256)", +"ffd10e07": "enterPool(address)", +"ffd19e8c": "isAlreadyProcessed(uint256)", +"ffd40b56": "allocatorBalance(address)", +"ffd4185c": "QuantumXICO()", +"ffd45f16": "calculateTokenCount(uint256,uint256)", +"ffd479bb": "setBaseInfo(uint256,bool,bool)", +"ffd48b73": "buyInternal(address,uint256,uint256)", +"ffd48f40": "setDelegadoDeDistritoVerify(bytes32)", +"ffd4e0e2": "getTotalIcoTokens()", +"ffd4e799": "HTJToken()", +"ffd4f4b2": "withdrawTokensFromContract(uint256)", +"ffd571ca": "ethersContributed()", +"ffd68462": "readCheckList(address,uint256,uint256)", +"ffd6a052": "ChangeAdminWalletAddress(uint256,address)", +"ffd71e13": "loadCoreAddress(address)", +"ffd740df": "removeNode(uint256)", +"ffd7b5e6": "investWithCustomerId(address,string)", +"ffd85b68": "setControllerDelegate(address)", +"ffd864d3": "chief()", +"ffd9ca40": "register(bytes20,uint64,bytes)", +"ffda0a37": "settleInterest()", +"ffdaa1b8": "TokenWithdraw(address,uint256,address,uint256)", +"ffdab909": "removeEntry(uint256)", +"ffdb0eb3": "getXRateProviderLength()", +"ffdcf095": "transferWithNarrative(address,uint256,string)", +"ffdd108b": "addEvent(uint256,string)", +"ffdd5cf1": "getInfo(address)", +"ffde0c74": "getGameState(uint256)", +"ffde8eae": "dismissBunner(address)", +"ffe0a9f2": "contractSymbolUpdate(string,bool)", +"ffe0fa66": "CarRegistry()", +"ffe189ef": "prev(uint80)", +"ffe280ee": "setWeight(uint256,uint256,bytes)", +"ffe2d77e": "directorLock()", +"ffe302d1": "setPlz(string)", +"ffe34512": "getNumChannels(address)", +"ffe3acc7": "changeGeneralSaleStartDate(uint256)", +"ffe3c6fd": "zKill()", +"ffe45b14": "getHTLCInvalidationTimeoutExtension(uint256,int256,bytes32,bytes32)", +"ffe48c76": "getBCDTRateForCurrentRound()", +"ffe4914a": "hdivide(uint256,uint256)", +"ffe496f2": "setMarginSpend(uint256)", +"ffe4fe4c": "roundFor(uint256)", +"ffe55303": "unfreezeCreditScore(uint256,string)", +"ffe5725f": "create(address,address,uint256)", +"ffe575b1": "Daxther()", +"ffe57c16": "byuoutActive()", +"ffe619df": "buyPixelToken(uint24,uint256,uint24)", +"ffe648d4": "releaseAllOnceLock(address)", +"ffe6bbd8": "myEarnings()", +"ffe8ee35": "SetDivTime(uint256)", +"ffe90ba6": "offsetIndex()", +"ffe94af0": "burnPass(bytes32,address)", +"ffe99ca7": "getCitiesStrings(uint256[])", +"ffea632b": "initialize(address,address,uint8,address)", +"ffeb7d75": "setUpgradeMaster(address)", +"ffec34e3": "TokenMintPoD(int256)", +"ffecf516": "addBot(address)", +"ffed6ed7": "buyAd(uint8,uint8)", +"ffeddd49": "addPolicy(bytes32,uint32,uint32,uint256,string)", +"ffee7c97": "getBookLength()", +"ffeea273": "withdrawWallet2()", +"ffeeac82": "info_Name()", +"ffeecfaa": "Log1(address,bytes32,uint256,string,string,uint256,bytes1)", +"ffef2b00": "SortCompetitionScores(uint32)", +"ffef8f88": "Share(uint256)", +"ffef9b3c": "_checkMaxRoundSupply(uint256)", +"fff04a87": "test_invalidBalanceNotZero()", +"fff07241": "playerExist(address)", +"fff10aba": "getEventsHistory()", +"fff28137": "reclaimToken()", +"fff311b1": "ownerSetjackpotContract(address)", +"fff35670": "icoLaunchTimestamp()", +"fff3a01b": "transfer(address,string,uint256)", +"fff3ad33": "getAddTokenDataTracking()", +"fff3c457": "readMessages(uint256)", +"fff43b4e": "_setBurnPool(uint256)", +"fff57ba3": "withdrawSettle(bytes32,bytes32,bytes32)", +"fff57fe1": "claimableOCDividend(address,address)", +"fff6a540": "LongBCoin(uint256,string,uint8,string)", +"fff6fb54": "TTOH()", +"fff78f9c": "doThrow()", +"fff7a97e": "addWallet(address,address)", +"fff83edf": "founderAmounts(uint256)", +"fff85d49": "addChunk1ToWhiteList()", +"fff8d42b": "phase2StartingAt()", +"fff93ec3": "setLandingPage(string)", +"fff95ce3": "getIsPoop()", +"fff9627d": "PRESALE_VAULT_START()", +"fff9d5b9": "confirmProofOfWork(uint256)", +"fffa932b": "withdrowTo(address)", +"fffa9d0c": "setGood(bytes32,uint256,uint256)", +"fffb5183": "initialize(uint256,address,uint256)", +"fffcde7c": "EOSINT()", +"fffce84f": "bountyFreeze(address,bool)", +"fffd52c6": "reading()", +"fffda870": "lastHorseSex()", +"fffdbe2c": "frozenTokensSupply()", +"fffe088d": "saleAddress()", +"fffeb1ca": "externalCheckSignBool(bytes32,bytes,address)", +"ffff6b04": "vestingSchedule(address)", +"ffffce47": "exchangeRateOracle()" +}`) + +func _4byteJsonBytes() ([]byte, error) { + return __4byteJson, nil +} + +func _4byteJson() (*asset, error) { + bytes, err := _4byteJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "4byte.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x97, 0xc1, 0x67, 0x6, 0x1e, 0x89, 0x76, 0xf7, 0x19, 0xd6, 0x8b, 0x43, 0xb4, 0x1c, 0xf6, 0xab, 0x7f, 0xc7, 0xc4, 0xca, 0x25, 0x21, 0x2, 0x13, 0x6d, 0x5b, 0xe2, 0x72, 0xb1, 0x7, 0xbc, 0x77}} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// AssetString returns the asset contents as a string (instead of a []byte). +func AssetString(name string) (string, error) { + data, err := Asset(name) + return string(data), err +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// MustAssetString is like AssetString but panics when Asset would return an +// error. It simplifies safe initialization of global variables. +func MustAssetString(name string) string { + return string(MustAsset(name)) +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetDigest returns the digest of the file with the given name. It returns an +// error if the asset could not be found or the digest could not be loaded. +func AssetDigest(name string) ([sha256.Size]byte, error) { + canonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[canonicalName]; ok { + a, err := f() + if err != nil { + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) + } + return a.digest, nil + } + return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) +} + +// Digests returns a map of all known files and their checksums. +func Digests() (map[string][sha256.Size]byte, error) { + mp := make(map[string][sha256.Size]byte, len(_bindata)) + for name := range _bindata { + a, err := _bindata[name]() + if err != nil { + return nil, err + } + mp[name] = a.digest + } + return mp, nil +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "4byte.json": _4byteJson, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"}, +// AssetDir("data/img") would return []string{"a.png", "b.png"}, +// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + canonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(canonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "4byte.json": {_4byteJson, map[string]*bintree{}}, +}} + +// RestoreAsset restores an asset under the given directory. +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) +} + +// RestoreAssets restores an asset under the given directory recursively. +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + canonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) +} diff --git a/signer/fourbyte/4byte.json b/signer/fourbyte/4byte.json new file mode 100644 index 000000000000..31d0e1719496 --- /dev/null +++ b/signer/fourbyte/4byte.json @@ -0,0 +1,146843 @@ +{ +"00000001": "account_info_rotate_tine(uint256)", +"00000002": "razor_balance(bool)", +"0000000c": "gumXZCZ()", +"00000033": "matchTokenOrderByAdmin_k44j(uint256[])", +"00000039": "XXX_unrecognized_adapter(string)", +"0000003a": "good_mirror(uint256,uint32)", +"00000063": "math_rotate(uint256,uint256,uint64,uint64)", +"0000006e": "display_allow(uint256,uint256,uint256,uint32)", +"00000080": "conduct_auto(uint256,uint256,uint256)", +"00000082": "artefact_keep(bytes1)", +"000000a0": "tree_stream(bytes,bytes)", +"000000a1": "pistol_valve(uint256,uint32)", +"000000b6": "matchByAdmin_TwH36(uint256[])", +"000000c4": "festival_happy(uint256,uint256)", +"000000c7": "lend_during(uint256,uint256,uint64,uint32)", +"000000da": "muscle_teach(uint256,uint64,uint8)", +"000000db": "viable_print(uint256,uint256,uint64)", +"000000de": "pledge_future(uint256,uint32,uint8)", +"000000ed": "access_coconut_alarm(uint256)", +"000000f5": "cherry_tomorrow(uint256,uint64,bool)", +"000000f8": "required_strconv(string,string)", +"00008962": "token(string,uint8,string)", +"0000aeb3": "migrateByAdmin_DQV(uint256[])", +"00012f8b": "LatiumX()", +"00014502": "totalInfected()", +"000150a0": "DEV_TEAM_STAKE()", +"0001fd01": "PamToken()", +"00020a28": "HaltTokenAllOperation()", +"000267a4": "getUint()", +"00026e13": "checkAtkBossQuest(address)", +"00027737": "aicontract()", +"0002aa37": "richtestkk(uint256,string,uint8,string)", +"0002c1dc": "Johnsonville()", +"00046c1f": "totalDragons()", +"000525fd": "robCoin()", +"0005a533": "CoalichainToken()", +"0005bfb7": "gemmyMusicLockTime()", +"000713fe": "Initiate(address,uint256,uint256,uint256,bool)", +"000751b8": "LogExtendSale(uint256)", +"00076943": "unlocker()", +"00076de7": "disableSellerCancel(uint16,address,address)", +"00085d25": "round3()", +"0008f8df": "changeIcoFinish(uint256)", +"00094161": "TERMS_AND_CONDITIONS()", +"00096469": "AuctionCreated(uint256,address,uint256,uint256,uint256,uint256)", +"0009803b": "makeProject(address,string,uint256,uint256)", +"00099cdf": "withdrawTokens3(uint256)", +"000a4a7a": "backAtIndex(uint256,uint256,uint256)", +"000ac1ff": "addparts(bytes32,uint256,uint256,uint256)", +"000adc67": "buy_the_tokens(string)", +"000b66d3": "setIcoStartTime(uint256)", +"000b9726": "MintingContract()", +"000be356": "expiredBlock()", +"000c12af": "TOTAL_TOKENs_SUPPLY()", +"000c65c3": "withdrawVNET(address,uint256)", +"000ca58e": "refundRequestTimelock()", +"000dae5c": "claimantConvicted(uint256)", +"000e02d0": "fiveHundredThousand()", +"000e28d3": "setLandsLimitPerBid(uint256)", +"000e2f3a": "totalLBSold_GENERAL_1()", +"000e60f8": "pendingBetsBalance()", +"000e7fa8": "presalePrice()", +"000f0ded": "doAirdrop(address,uint256)", +"000f71f8": "recieveNegReq(uint256,uint256,uint256,uint256,string)", +"00100a18": "NewPoll(string,string,uint256,uint256)", +"0010ed99": "getBraggerAtIndex(uint256)", +"00113e08": "getBalances()", +"00115cba": "UpdateSellAgentBounty(address)", +"001246eb": "availableFlg()", +"0012d90a": "BNB_HARD_CAP()", +"001339b0": "prizePoolTotal(bytes4)", +"00137d6e": "peculAdress()", +"0013da50": "delList(string,uint256,uint256)", +"0013eb4b": "isExist(address)", +"0014f956": "getResourcesInfo(address)", +"00152924": "setSelfContractAddress(address)", +"0015be71": "executiveOfficerAddress()", +"001667bb": "getPI_edit_34()", +"00173d65": "getShouldGenerateDna()", +"001773e6": "convertMetToEth(uint256,uint256)", +"0017cd8b": "PRIME()", +"0017e1cf": "getTeamNameForAddress(address)", +"0018b1d3": "pps()", +"0018b665": "killTokenContract()", +"0018fe0b": "changeInGameFee(uint256)", +"00190f64": "getStatusLogs()", +"00199b79": "_updateList(address[],address,address[])", +"0019a46b": "gen0CutieCreatedCount()", +"0019c97d": "redeemPop(uint256)", +"001a4f5e": "createNewRevision(bytes32,bytes32)", +"001aa026": "withdrawMarginPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"001ab1cd": "setAsBurner(address,bool)", +"001ab993": "VTestDistribution(address,uint256,uint256)", +"001b1441": "Ethernext()", +"001b1cf0": "DualMintableToken(address,address)", +"001b3fe6": "card_blue_first()", +"001ba7ea": "signWitness()", +"001baa89": "createdBy(uint256)", +"001bc69a": "getGratitudesOf(address)", +"001cf577": "wcOnCrowdsaleFailure()", +"001d7bf6": "getInvestmentArray()", +"001db74d": "FreeLove()", +"001dbe8a": "getSoftwareExecRecordLength()", +"001ed012": "previousBurners()", +"001ee6b2": "participateGame(uint32,uint32,uint32,uint32)", +"001f0479": "getResultMask(uint256,uint256)", +"001f4701": "Examples()", +"001f8d11": "removePackage(bytes32,string)", +"001f91ce": "curatorAddress()", +"001f9bc0": "set_arbits_presale_open(address,bool)", +"00201e33": "BONUS_6_DAYS()", +"00203116": "endGame(address,uint8)", +"00203385": "getTotalBorrowingItem()", +"00212667": "m_Creator()", +"0021b6cb": "getElementOfBoughtTicketList(uint256)", +"0021d364": "getNOVotesByEntity(uint256)", +"00226eb5": "getDepositNum()", +"0022771f": "numAdviserDeposits()", +"002338ef": "TLSC()", +"0023de29": "tokensReceived(address,address,address,uint256,bytes,bytes)", +"00245220": "HAJDToken(string,uint8,string)", +"0024eb4b": "getCompanyAllocation(uint256)", +"00277883": "TeamTokensHolder(address,address,address)", +"0028b91f": "Distributor(address,address)", +"0029514f": "PROCESSBY()", +"00297671": "cancelOneSell()", +"002a2133": "createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"002a228c": "initSeed(uint256)", +"002a4b14": "Nine()", +"002a5cc9": "getTicketHolders(uint256)", +"002beece": "unfroze(uint256,address)", +"002c1a9e": "percent(uint256,uint256,uint256)", +"002c8456": "toOpenVote()", +"002ce636": "settrusteeVaultAddr(address)", +"002d7c9d": "concludeFirstAuction()", +"002dc7f1": "ChangePeriod()", +"002e0ae7": "transferTokenOut(address,uint256)", +"002e1316": "maxInvestment()", +"002e1d7e": "LCOpenTimeout(bytes32)", +"002f15ca": "isExistInvestor(address)", +"002f9569": "allocatedTokens()", +"002fd07c": "_approve(address,uint256,uint256)", +"003074ff": "getFrontend()", +"003078b0": "unlockTo(address,string)", +"00310e16": "sellWolk(uint256)", +"00319aad": "_transferadvanced(address,address,uint256)", +"0031a48e": "myICO()", +"00322bb6": "sendPlatformMaintenance()", +"003259ea": "voteResult()", +"003271d5": "checkStateProof(bytes32,bytes,uint256[],bytes,bytes)", +"00333375": "minimumMainSaleRaise()", +"003338a0": "DrawOp()", +"0034451c": "_buildInternalSalt(uint128,address,address,uint256,uint64)", +"00346b57": "setHodlerStake(address,uint256)", +"003495a4": "getHighestBidder()", +"0034b5fd": "withrawFundTeacher(uint256)", +"0034f529": "_requestExists(address,uint32)", +"003538c5": "TestRegistrar(address,bytes32)", +"00354975": "VRYCoin()", +"00359e08": "presaleFinishedAt()", +"0035a45c": "isAllowedToPurchase()", +"0035ceb1": "BrinkzToken()", +"0036059c": "TESTER(uint256,string,string)", +"00360b66": "MyMonsterIds(address,uint256)", +"0036242d": "Power2X()", +"00362509": "LogWin(address,uint256,uint256,uint256)", +"00362a95": "donate(address)", +"00364ceb": "bountyManagementWalletAddress()", +"0036624a": "AmountReceived(address,uint256)", +"003705bc": "getTotalUSDInTokens()", +"0037dd47": "addUniqueSaleTokens(address,uint256)", +"00383d0a": "maxSignup()", +"00387733": "setGameResult(uint256,uint8)", +"0039522c": "emergencyWithdrawal(uint256)", +"003958e2": "LogOperatorAdd(address)", +"00397647": "addToFreelancerTotalEarned(address,address,uint256)", +"0039ad6d": "ROUNDS_KEPT()", +"0039d9db": "getNextStageStartTime()", +"003a3d80": "GetSale()", +"003a5b06": "getRoundEndBlock(uint32)", +"003a661d": "renounceOwnedOwnership(address)", +"003ab1ff": "timereum()", +"003b0a3f": "getFreeDino()", +"003b9d88": "setLowerFeePercentage(uint8)", +"003ba1ed": "setRoot(address)", +"003bcb34": "Received(address,bytes,uint256)", +"003cdf26": "Lima()", +"003cee5a": "HLCToken(address,string,string,uint256,uint8)", +"003db783": "Purchase(uint256,uint256,uint256,uint256)", +"003de230": "participantClawbackEther(uint256)", +"003e9d5b": "FillOrder(uint256,uint256)", +"003ead5f": "setPVEBattleFee(uint256)", +"003f07fa": "isValidAddress(address)", +"003fd35a": "CONTINUE_MINTING()", +"00404930": "CryptoRiyal()", +"00405351": "getWarriorChestAvailable()", +"004056c7": "validateNameInternalET(string)", +"004079b6": "CheckExec(string)", +"0040ff6c": "changeFee()", +"0041edee": "preSaleTokensLimit()", +"004240e3": "startTransaction(address,address,uint256)", +"004264c3": "overflow()", +"0042a3be": "isPublish(bytes32)", +"00432cf3": "getCurrentMarginAmount(address,address,address,uint256,uint256,uint256)", +"0043cce7": "technologyShare()", +"00442a07": "getLoanConfig(uint256)", +"00452636": "GxManagedWallet(address)", +"0045626f": "returnETHByOwner()", +"0045a4d4": "isPointerExpired(uint8)", +"0047850a": "getOfferCountByToken(address)", +"00478f87": "TIC()", +"0048236b": "setOrganName(string)", +"0048d680": "testTransferVotes()", +"00498257": "maxWeiTier2()", +"0049f068": "onContribute(uint256,address,uint256)", +"004b1e75": "actionAuthorisedBy()", +"004bd9a5": "setRate5(uint256)", +"004c942e": "Request_Dividends()", +"004d39b1": "HavvenGold()", +"004d4ed9": "setRegion(uint256,uint256)", +"004db370": "DawnCoin()", +"004dcd1c": "changeBrick(uint256,string,string,string,bytes32[],uint256)", +"004ebaa8": "silo_timer()", +"004ef6c6": "book(uint256,uint256)", +"004f3e86": "forceCancel()", +"004f4042": "takeAllPossible(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", +"004f4803": "raise(uint256)", +"004fba00": "addAdminAddress(address)", +"00501553": "subHours(uint256,uint256)", +"005016a3": "checkReturnValue(bool)", +"0050945d": "referrerLevel2Ether()", +"0050a315": "getCreationTs(uint256)", +"0050b3df": "newAlex(address)", +"0052992e": "buyForInvestor(address,uint256,string)", +"00530933": "BuyAsset(uint256)", +"00541756": "jackPotB()", +"0054438d": "validateResale(address,uint256,uint256)", +"00549c2b": "mintNonFungibles(uint256,address[])", +"0055bc9c": "withdrawAtOnce(uint256)", +"0056c4c2": "getTokensForWei(uint256,uint256,uint256,uint32)", +"0056ce89": "getCryptoPicture(uint256)", +"005733e6": "EMISSION_FOR_SALESTAGELAST()", +"00573858": "setrateIco(uint256)", +"0057e18f": "setPlatformMaintenance(address)", +"0057e8d4": "restoreToColdWallet(uint256)", +"00599e65": "getTokenOrder(address,address)", +"005a7d9a": "forFund()", +"005ab803": "LogRegister(address,address)", +"005b42cb": "MainSalePrice()", +"005b4487": "totalPayments()", +"005b7ce8": "SIGMA_EXTRACTION_BASE()", +"005b9b48": "sellAnimal(uint32)", +"005bb714": "BlocksToken()", +"005c0541": "_totalActiveBets()", +"005c33e1": "receiveFunds()", +"005d204d": "dataIdentifiers()", +"005e885e": "getSigners(uint256,uint16)", +"005ef4ec": "setReservedTokensList(address,uint256,uint256,uint256)", +"005f41cc": "create(address,uint256,uint256,uint256,bool)", +"00601801": "setCCH_edit_4(string)", +"00601d6c": "board(uint256,uint8,uint8)", +"00603126": "computeNodeId(bytes32,bytes32)", +"00604854": "FreePPCoin()", +"0060c778": "removeCompany(bytes32)", +"00613e27": "register(address,uint8,uint16,address)", +"0061c78e": "PayoutIncreased(uint256,uint256)", +"0061ebed": "TransactionFeeChanged(uint256)", +"0062c8cb": "canCallWithNoOne()", +"00634064": "Lescoin(address,address)", +"00639319": "Milestone_BankLicenseSuccessful(string)", +"006409c4": "Signed(address,uint256,uint8,bytes16,bytes)", +"0064575f": "shiva()", +"0064b1f8": "gameNum()", +"0064d618": "add_referral(address,string,uint256)", +"0065318b": "dividendsOf(address)", +"0065d700": "getTileFromBattleboard(uint16,uint8)", +"0066753e": "removeCertifier(address)", +"00675149": "isGroupExist(uint256,uint256)", +"0067a9fb": "BrokerImp(address,address,uint256,address,uint256)", +"0067ba69": "FT_TOKEN_SALE_CAP()", +"00686741": "registerProxyFor(address)", +"00691967": "SUPER_HERO_MULTIPLIER()", +"006932bb": "whitelistAllAddresses()", +"0069a132": "AshenVoid()", +"006a003e": "planetCordinates(uint256)", +"006a6ef6": "create(address,address,address,address,address,address,address,uint256)", +"006ac4bf": "findNextMonth(uint256,bytes2)", +"006ae9d5": "HopeToken()", +"006b1fd1": "purchasedCount()", +"006bcb71": "witness(bytes32,address)", +"006c10e8": "trackPurchase(uint256,uint256)", +"006c2abc": "privateSaleEndDate()", +"006c81d3": "isAllocated()", +"006cfea8": "_delegateAssetOwnerAdded(bytes32,address)", +"006d96e0": "hasVaultAccess(address,address)", +"006ddae3": "changevotePrice(uint256)", +"006e3a1d": "exitOverPlayer()", +"006f91d2": "RiskPrice(uint128,uint128,uint128,uint128)", +"006fbd88": "changeSellGenesPrice(uint256,uint256)", +"00703d48": "crearCelda(uint256,uint256,uint256,uint256,uint256,uint8)", +"0070c3b3": "Proxy(address)", +"0070c537": "increaseBid(uint256)", +"007188d3": "FAOC()", +"0072615c": "claimedBoards(uint256)", +"00728f76": "vestingAmount()", +"0072d7b5": "addressAdded(address)", +"00732113": "setHolderInformation(address)", +"00739f2a": "changeStartDate(uint256)", +"0073c769": "disableTime()", +"0074477d": "listMultipleItems(uint256[],uint256,address,bytes32)", +"0075a317": "mintTo(address,string)", +"00761731": "createContract(bytes32,uint256,uint256,uint256)", +"00774360": "deploy(bytes)", +"00797f77": "has_donated(address)", +"0079efb0": "withdraw1()", +"007aa091": "san_whitelist(address)", +"007aaac9": "sisterCheckPrice(uint256)", +"007b2a03": "GoldTokenERC20()", +"007bd509": "generalTerms()", +"007c197d": "ISE()", +"007cb3fb": "updateOraclizeGasPrice(uint256)", +"007cc224": "RESERVED_TOKENS_FOR_PLATFORM_OPERATIONS()", +"007d8051": "issueAndFreeze(address,uint256,uint256)", +"007e3dd2": "isComptroller()", +"007e5d08": "updateAvailable()", +"007e9355": "GetAllChallengesByAUser(address)", +"008000d6": "configSale(uint256,uint256,uint256,uint256)", +"008066b6": "doftManaged()", +"0081d6e5": "updateGravatarImage(string)", +"008201e7": "TokenSold(uint256,uint256,uint256,address,address,string)", +"00821b81": "bonusCalculation(uint256)", +"00821de3": "parentAddress()", +"00822599": "deleteMasternode(uint256)", +"008250e5": "fortune_new()", +"00837b15": "balanceEth(address)", +"00849f88": "changeFundCollection(address)", +"0084dbf5": "ProofOfEtherDelta()", +"0084fe51": "Exercise(uint256,uint256)", +"00851303": "tokensForSiteReg()", +"008557d2": "Buy(uint32,bool,bool,address)", +"0085c647": "setPreICOEndDate(uint256)", +"00862c3c": "areTokensUnlocked()", +"00865f92": "parseJsonArrayAndGetFirstElementAsNumber(string)", +"0086969f": "dissalowFreezing(address)", +"0086bb3e": "teamUnlockedAfterCliff()", +"0086ce4d": "LogUpdatedLimitPerDay(uint8,uint256)", +"00873367": "comparisonchr(string)", +"00873c97": "CLPContractToken()", +"00882097": "EtherDeltaDeposit(uint256)", +"00886980": "LogClaimReward(address,uint256)", +"0088fca8": "start_go_quiz(string,string)", +"0088fed7": "addIndex(address,address)", +"008a3ca1": "reverseSplit(uint8,bytes6,uint8,uint32)", +"008a5c23": "getCurEarlyIncomeByAddressRound(address,uint256)", +"008a706b": "Primal()", +"008a745d": "claimDividendShare(uint256)", +"008ad306": "changeLockCostPerHour(uint256)", +"008bdd13": "isWithinSaleTimeLimit()", +"008bed3e": "getAgreementCount()", +"008c1b28": "POSTSALE_START()", +"008c3215": "addReplies(address,address[],string,string)", +"008c8920": "currentType()", +"008ca816": "isSalePaused()", +"008cbc8c": "oraclize_query(uint256,string,bytes[4])", +"008df454": "ratio(uint256)", +"008e0f1b": "getTeam(uint256)", +"008e6865": "buyTicket(uint256,uint256,address)", +"008e8135": "setProviderRateHistory(uint256,uint256,uint8,bool)", +"008f7cc2": "requestLoan(bytes8,uint128,address,address,address,uint256,uint64,bytes)", +"008f8b35": "currentRoundInfo()", +"008fcc94": "stageEndDate(uint8)", +"00903c69": "Kether()", +"0090e9c2": "transferBonuses(address)", +"00918c7b": "icoPeriodTime()", +"0091d862": "Minaxis()", +"00922db6": "secondWeekBonusInWeek()", +"00923f9e": "tokenExists(uint256)", +"0093703c": "bankConfirm(address,uint256)", +"0094151b": "setPurchasable(uint256)", +"0095716b": "crownBalanceOf(address)", +"00961320": "stringToUint()", +"0097130e": "_realBalanceOnEther()", +"00971a30": "court()", +"00975ba6": "_sendP3D(address,uint256)", +"0097b607": "validRareId(uint256)", +"00983401": "setAuthor(string,string,address,uint256)", +"00987265": "migrateThroughAllForks()", +"0098728f": "buyXaddrForContract(address,uint256)", +"009888ce": "calcNextPrize()", +"00988a16": "EthMinContributionUpdated(uint256,uint256)", +"0098fe2b": "refundWhite(uint256,uint256,uint256,uint256)", +"00991d8e": "setMakeFee(uint256)", +"0099d386": "enableTrade()", +"009a1faf": "getSumOfGamblingPartiesBonusPool(uint256)", +"009af857": "setnextRoundId(uint256)", +"009b38fa": "canBeFinalizedNow(uint256)", +"009b9369": "getVoteNumber(uint256)", +"009ca5e8": "maxTokenWinValue()", +"009e2297": "SetFreeDCT(uint256)", +"009f9262": "setEthPrice(uint256)", +"00a0190e": "BIDDING_DURATION()", +"00a051ca": "FiCoinFundDeposit()", +"00a09a7a": "devTokensToken()", +"00a0d28f": "batchExecute(uint256[])", +"00a13901": "burnRemains()", +"00a16cab": "checkCutoffsBatch(address[],bytes20[],uint256[])", +"00a18b30": "setTeamAddress(address,address,address,address,address)", +"00a219f4": "payForDemocracy(bytes32)", +"00a22ee4": "EXOToken(address,address,address,address,address)", +"00a3216c": "getNextDepositBlockIndex()", +"00a32af6": "AIRDROP_WALLET()", +"00a35aa2": "deleteBoolValue(bytes32)", +"00a470d0": "doInvite(uint256,uint256,uint256)", +"00a4b146": "SDCToken()", +"00a53598": "emergencyToggle()", +"00a58a2a": "Coffee()", +"00a5e715": "TripCoinTeamSupply()", +"00a626f6": "getACLRole7123909213907581092()", +"00a676f9": "getExists(bytes32)", +"00a6dec6": "setPayerPercent(uint256,uint256)", +"00a70e03": "priceOfTicket()", +"00a7d6b3": "checkTransferFromToICAP(address,bytes32,uint256)", +"00a7fdfc": "bids_count()", +"00a81ef6": "emitRoleRemoved(address,uint8)", +"00a8efc7": "subBalance(uint256)", +"00a8f276": "last_transfer_state()", +"00a94b6e": "oraclize_query(uint256,string,string[5],uint256)", +"00a9f0d4": "getDayRestDepositLimit(uint256)", +"00aa21e6": "transferFromVault(bytes32,address,address,uint256)", +"00aa25b2": "_isValidAddress(address)", +"00aac98b": "Griefing(uint256)", +"00ac4663": "getWarrantyQuote(string,address,uint256,uint256,uint256)", +"00ac77a0": "ownerSetCanBurn(bool)", +"00ad3a23": "RELEASE_PERIODS()", +"00ad800c": "name(uint256)", +"00ad8035": "SwingerTokenSPICO()", +"00ad861f": "README()", +"00ad8b69": "releaseVestingAllocation()", +"00adc382": "addressHash(address)", +"00aea59b": "reviewAudit(uint256)", +"00aec05d": "BEECASHBACKHOME()", +"00aeef8a": "deposit(uint256,uint256,uint256)", +"00af4274": "getTokensForEther(uint256,uint8)", +"00af9811": "checkRedemptionFulfilled(bytes32)", +"00afd295": "getAllCellInfoFrom_To(uint256,uint256)", +"00afdcef": "ELink()", +"00b08526": "GXCH()", +"00b172d7": "buyTokensForProposal(uint256,address)", +"00b23740": "VersusArenaToken()", +"00b2516d": "vetoMotion(uint256)", +"00b34747": "contractInitialized()", +"00b37044": "totalDonated()", +"00b3c619": "VoteSvp001(address,uint256,uint256)", +"00b3c91b": "purgePack(uint256,uint256)", +"00b44750": "acceptMembership(address,uint8,uint256,address,uint256)", +"00b5152b": "VibeXChainToken()", +"00b526e4": "_sendTokensManually(address,uint256,uint256)", +"00b5277a": "checkSell(uint256)", +"00b55554": "emergencyDropEth()", +"00b56aa7": "emitSynthRemoved(bytes4,address)", +"00b5988e": "lockTournament(uint256,bool)", +"00b5b223": "computeResponse(uint256,uint16)", +"00b6849f": "airDrop(address[])", +"00b6b707": "accept(uint256,address,uint256)", +"00b76307": "ChangePrivilege(address,bool,bool)", +"00b767fa": "EventAddAdmin(address,address)", +"00b79dd9": "taxlvlEconomy(string,string,string,string,string)", +"00b7f20a": "isDebtor()", +"00b8a73c": "IntegrativeWalletToken()", +"00b9189d": "setPreIcoContract(address)", +"00b9840a": "DBDHToken()", +"00b99f8c": "view28()", +"00b9eb8b": "Coinchangex(address,address,uint256)", +"00ba092c": "is_current()", +"00ba3e50": "setProductAttributes(string,uint256,uint256,string)", +"00badc85": "getcvotesid(string)", +"00baea15": "pastOneDay()", +"00bbec1c": "payServiceProvider()", +"00bc83a9": "xToken(address,string,string,uint8,uint256)", +"00bca785": "state_of(address)", +"00bcb883": "ProposalAdded(uint256,address,string,uint256)", +"00bd35b8": "EventAddToBattle(address,uint64)", +"00bd6f4c": "transferToAddress(address,uint256,bytes,bool)", +"00bde030": "getDurationS()", +"00bdfbcd": "installed()", +"00c023da": "revokeAttribute(address,bytes32,bytes)", +"00c17ee4": "setConfig(uint256,uint256,string,string,uint256,uint256)", +"00c1e956": "addressFundBounty()", +"00c2943c": "declareWinner(uint256)", +"00c2b78e": "voteFor(uint256,uint256)", +"00c33731": "prepair(address)", +"00c42173": "winnerDeterminedDate()", +"00c43503": "totalReturns()", +"00c4cefa": "toKeyValue(int256,string)", +"00c56675": "setNegativeGrowth(int256)", +"00c5f509": "preICOSupply()", +"00c61e93": "hRCoin()", +"00c721ab": "setHand(uint256)", +"00c822fb": "oraclize_query(string,bytes[2],uint256)", +"00c8bb45": "addMeleeParts(uint8[])", +"00c90ac8": "AutoCoinICO(uint256,uint256,uint256,address)", +"00c988e8": "crowdsaleConcluded()", +"00c99206": "setIdentifier(bytes32)", +"00c9c8e7": "_emitFeeSet(uint256,address)", +"00cab8b1": "lockAddressValue(address,uint256)", +"00cae5df": "solve(uint256,bytes32)", +"00cb1ae4": "methodThatThrows(bool)", +"00cb41e3": "getWithdrawableDates()", +"00cb527f": "miningFive()", +"00cc15b0": "lengthEncode(uint256)", +"00cc48a6": "updateNameIP(string,string)", +"00ccbc68": "firstRedemptionRequest()", +"00ccfdab": "removeForgivedChar(uint256,string)", +"00cdbc1f": "changeHash(bytes32)", +"00cde2bb": "releaseAccount(address,address)", +"00ce2057": "triggerPayment()", +"00ce4462": "register_with_node()", +"00ce8e3e": "getUsers()", +"00ce9f8a": "getPeggedTokenValue(address,address,address)", +"00d11245": "Mallory(address)", +"00d17799": "defaultCreatedCount()", +"00d2c31d": "getHashSignatures(uint256)", +"00d30eb9": "firstWeekPreICOBonusRate()", +"00d32a75": "TransferDFN(address,address,uint256)", +"00d357d1": "CustomcoinCrowdsale(address)", +"00d3f51a": "VirtualRealityChain()", +"00d4b768": "currentMideTokenTime()", +"00d4b959": "ico1total()", +"00d52342": "loseGame()", +"00d56d71": "StageTwoEnable()", +"00d5da02": "setTokenDescription(string)", +"00d7b3a9": "Exoso()", +"00d7e9cf": "landPricePrevious()", +"00d7f5d8": "Human1StandardToken(uint256,string,uint8,string)", +"00d80e07": "getGuardianSale(uint256)", +"00d84fd8": "remove(uint32)", +"00d9694c": "setBonusRound3(uint256)", +"00d9f24e": "UpdateNumPlayers(uint256)", +"00db90d1": "setCanWithdrawBeforeEnd(bool)", +"00dba80c": "mineableTokenStorageContract()", +"00dba864": "TOKENOPSPLATFORM_JOINTTOKENS()", +"00dbeb31": "getPromoCodeForEther(bytes16)", +"00de1eb4": "cofoundersSupplyRemaining()", +"00de8393": "SetLimit(uint256,uint256)", +"00dee43f": "initMinting()", +"00df415e": "preSaleZxcCap()", +"00dfafa4": "addMarket(address,uint256,uint256,uint256,uint256)", +"00dfd21a": "getUserDocId(address,uint32)", +"00dff399": "Fibonzi()", +"00dff60a": "partnerPreICOBonus(address)", +"00e063bc": "AddressQuery(address)", +"00e0c53f": "hold()", +"00e11919": "setClamTax(uint8)", +"00e1986d": "grantVestedTokens(address,uint256,uint64,uint64,uint64)", +"00e29488": "selfRegisterDINWithResolver(address)", +"00e31614": "modifyGuess(uint32,uint64,uint64)", +"00e37634": "batchRefundzFixed(address[],uint256)", +"00e38410": "getVotingMetadata(uint256)", +"00e43ee9": "setMigrationStatus(uint256,address)", +"00e46700": "setMinimumPassPercentage(uint8)", +"00e4768b": "setPrice(address,uint256)", +"00e4778a": "addAccessoryIdMapping(address,uint64)", +"00e4fc14": "withdrawNetfRevenue(uint256)", +"00e520d0": "_emitSkillEvaluated(address,address,uint8,uint256,uint256,uint256)", +"00e5fc5f": "rawVotes(address)", +"00e610fc": "passwordMint(address,uint256,bytes32)", +"00e62620": "zoDailyLimit()", +"00e64f6d": "regularDonations()", +"00e6abbe": "EggFactory(address)", +"00e6b9f8": "MetalToken()", +"00e756cc": "roleAddressAliaser()", +"00e7d289": "registerListening(address)", +"00e8516a": "buySamples(uint256,address)", +"00e85279": "ownerLock()", +"00e893ce": "crowdsaleTokenPriceDenominator()", +"00e97827": "percentRake()", +"00e9c006": "deleteTransaction(uint256)", +"00ea11ec": "calcCakAmount(uint256)", +"00ea3146": "postGood(bytes32,uint256)", +"00ea81c0": "mint(address,uint256,string,string,bytes32[],bytes32[])", +"00ea8737": "myTickets()", +"00ead724": "Ticket(uint256,address,bytes3)", +"00eaedc8": "retrieveVanityForWallet(address)", +"00eb52f2": "setIsActivated(bool)", +"00ebc96e": "setCrowdsaleEndTime(uint256)", +"00ed015b": "setETH(address,uint256)", +"00ed2592": "sendEvents(address,uint256,uint256)", +"00efaa75": "tokenFinishMinting(address,address)", +"00f052f6": "getBidByBidder(address,uint256,address)", +"00f12159": "SpectrumNetworkNetwork()", +"00f17754": "accountAt(int256)", +"00f1c7ec": "setAllocationFee(bytes32,uint256)", +"00f29d55": "isOrdered(address,bytes32)", +"00f2c41b": "calculateTotalPayoutAmountAndCommission()", +"00f31e76": "isPresent(bytes32)", +"00f380f4": "communityFund()", +"00f3e717": "mrate()", +"00f40839": "LogTowncrierCallback(uint64,uint64,bytes32)", +"00f43f6d": "Simple_Claimable_Temporized_Stake()", +"00f45438": "createTokenToMarket2019()", +"00f49203": "Hard_Cap()", +"00f545c6": "addressBelongsToAccount(address,address)", +"00f54f0a": "Wallet2()", +"00f5544f": "openGame(uint256)", +"00f55d9d": "destroy(address)", +"00f5822c": "changePinakion(address)", +"00f62717": "setMockedBlockTime(uint32)", +"00f64e66": "StakePoolICO()", +"00f666d4": "QueueManager()", +"00f6ca59": "runCredits()", +"00f714ce": "withdraw(uint256,address)", +"00f733e9": "pieceForSale()", +"00f784a4": "OrderAdded(address,address,uint256,uint256,uint256)", +"00f7c5be": "unregisterAddress(address)", +"00f821a7": "addMintContract(address)", +"00f9ac78": "setVoteFactory(address)", +"00fa081a": "multiplicator()", +"00fa7be5": "EnterToken()", +"00fac74a": "salesdeadline()", +"00faf4dd": "getTokenDivisor()", +"00fca46f": "initialAuctionEndTime()", +"00fdc73f": "currentMinPurchase()", +"00fdd58e": "balanceOf(address,uint256)", +"00fe03e3": "icoSoftCapInWei()", +"00fe4789": "batchFillOrKillOrders(uint256[],bytes[])", +"00fe9590": "getMaxInt64()", +"00fec4ba": "afterForkBlockNumber()", +"00fece08": "giveDown(address,address)", +"00ff2fb1": "log_2(uint256)", +"00ff6262": "DefensorWallet(uint256,string,string,uint8)", +"010066ad": "joinWhiteList(address)", +"01008275": "addPersonalCap(address,uint256)", +"0102305b": "logGameData(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", +"01024700": "OnePhaseAuction()", +"0102fcfc": "distributeOwnership()", +"010342f4": "averageSalePrice()", +"0103c92b": "userBalance(address)", +"01044632": "setDevelopersTokens(uint256)", +"0104855f": "mctTotalSupply()", +"01056361": "setupFunding(uint256,uint256,address)", +"0106172a": "invalidEarlyPurchaseIndexes()", +"01061ae1": "removeArtworksByString(string,uint32)", +"010648ca": "setDocument(bytes32,string,bytes32)", +"01067543": "getParentCount(address)", +"01068767": "ABL(address,address)", +"0106bc8f": "PVE()", +"010731c0": "sendCryptedHand(bytes32)", +"0107a4eb": "XRRfrozen()", +"0107a8df": "withdraw_bonus()", +"01080c6f": "activateTokensForArbitration(uint256)", +"0109057e": "WIZISHOPPINGCOIN()", +"01090c4e": "_removeProxyManager(address)", +"01090c9e": "PowerOfPutin()", +"01095962": "oraclize_setCustomGasPrice(uint256)", +"0109f22e": "CrowdSale()", +"010a38f5": "getTokenId()", +"010a7d65": "tryTransfer(address,uint256)", +"010abbd0": "getCardOwner(uint256)", +"010ae545": "creditTokens()", +"010afc20": "claimWrappedContractAdmin()", +"010b66de": "mainSale_Cap()", +"010b8701": "hasSubstring(string,string)", +"010ba4e2": "balanc()", +"010bd255": "DPNToken(address,address)", +"010cbd30": "_triggerPVPSignUp(uint32,uint256)", +"010cc97c": "transferMarketIncentivesFund(address,uint256)", +"010d214e": "WithdrawProfit(address,uint256)", +"010d2446": "getProblem(uint256)", +"010d3bf6": "buyUsingRefBonus(address,address)", +"010dbfec": "sell(uint256,bool)", +"010e3964": "mintTokenForPreCrowdsale(address,uint256)", +"010e3c1c": "setInflationChange(uint256)", +"010e8209": "admin(address,uint8)", +"010f7735": "burnToken(uint256,string)", +"0110ea76": "TanterX(uint256,string,uint8,string)", +"01114d74": "getCCH_edit_33()", +"0111ae8a": "maximumValueAfterGuaranteedPeriod()", +"01122ddb": "BonusEnrolled(address,uint256,uint256)", +"011285da": "multiplication()", +"0112e2c4": "CotteToken()", +"01132b70": "setXTVNetworkEndorser(address,bool)", +"0113b261": "getNumberOfShareHolders(uint256)", +"01146844": "loadFund()", +"0114af17": "investment_address()", +"0115a2f2": "_packAddressAndFunctionId(address,address,bytes4)", +"01169399": "createEthTknDelegation(address,address,address)", +"0116bc53": "CostChip(uint32)", +"0116bfc0": "BuyUpgrade(uint256)", +"01172005": "affiliateContract()", +"011721ad": "getValidation(address,uint256)", +"01173a74": "mintToken(address)", +"0117b324": "addTestimonial()", +"0118251c": "getHighWinPercent(uint256)", +"011847a2": "inviteReward()", +"011857d0": "bntConverter()", +"011879db": "createAuction(uint256,uint128,uint128,uint128)", +"0118895c": "reservations(address,uint256)", +"0118e662": "SiekechuCoin()", +"0118e686": "isCrowdsaleActive()", +"0118fa49": "create(uint256,string)", +"0119ada7": "eliminate(address)", +"011a44bf": "isAllFrozen()", +"011a8eb7": "DrawPrepareEvent(uint256)", +"011aab02": "Oculta(uint256,string,string)", +"011afdd7": "hello2()", +"011b1a7b": "setCrowdsalePrice(uint256,string)", +"011b29e3": "changeCourse(uint256)", +"011bc2e1": "calculateWinners()", +"011c3d06": "getCurrentStats(uint256)", +"011ce353": "OwnerRecall(address,uint256)", +"011d07c0": "getMyIdeas()", +"011d0b58": "buyListing(bytes5)", +"011d79ca": "CrowdsaleEnabled()", +"011db570": "calculateObtained(uint256)", +"011de7aa": "intervalAtTime(uint256)", +"011e0162": "Flercoin()", +"011e6492": "checkSuccess()", +"011eb18c": "removeAddressFromOperators(address)", +"01201c0b": "getTheTokens()", +"01209d09": "updateVaults(address,address)", +"0121683f": "createAuction(uint256,uint256)", +"01216f05": "calcEthReceived(uint256)", +"0121b93f": "vote(uint256)", +"0121be14": "_createCard(address,uint16)", +"01233474": "saleInProgressB()", +"012397ff": "firstroundprice()", +"01239adf": "maxPos()", +"0123aff4": "BurnCoinToken()", +"0124188d": "CAIRToken()", +"01250e4d": "CraigGrantEatDick()", +"01253fbf": "threshold1()", +"0125ae62": "setMeterPoint(int256,address,int256)", +"0125d7c8": "IPAYTOKEN()", +"0126b8b6": "batchAllocateTokensBeforeOffering(address[],uint256[])", +"01272c2c": "canExecute(uint32)", +"0127eb0d": "angelAdminAddress()", +"01281641": "OfferCanceled(uint256,bytes,address)", +"01281867": "keccak256calc(address)", +"01284ad4": "removeAddressFromPrivateWhiteList(address)", +"012874a3": "EthsMePresale(address,address)", +"01289e3a": "AvenceToken()", +"01293b5c": "defaultURIEnd()", +"012a08f8": "_vote(uint256,bool,address)", +"012aa25e": "releaseTokens(string,address,uint256)", +"012aa809": "InvalidCoinUsage(string)", +"012b1f73": "announceEndOfGame()", +"012bac23": "addCoinAllowance(address,address,uint256)", +"012beac9": "vendorRegistry()", +"012cd104": "LoveCrowdsale()", +"012d61e1": "buyRedirect()", +"012defec": "harvests(bytes32)", +"012ea37c": "arrangeFreePoints(uint256,uint256,uint256,uint256)", +"012f52ee": "escrows(uint256)", +"012fd089": "EscrowAccountCrowdsale()", +"012fec73": "KakushinToken()", +"0130371a": "MAX_SUPPLY_NBTOKEN()", +"01303778": "refreshMonarchyGamesReward()", +"013054c2": "redeemToken(uint256)", +"01307338": "dispatchRewardToken()", +"013130c0": "maximalInvestmentTimeTreshold()", +"01326c34": "clearAddresses()", +"0132cc82": "tokenFounderLockTime()", +"0133311b": "deleteLockTime(address)", +"01339c21": "launch()", +"0133db3a": "nameOf(uint256,address)", +"0133e1fa": "RunchuToken(uint256,string,uint8,string)", +"01340592": "MAX_CONTRIBUTION_USD()", +"01345514": "BJLToken()", +"013459ca": "getTokensForGraphenePower()", +"013512e3": "CABtoken()", +"0136356d": "unregisterAddresses(address[])", +"01365406": "deathData_f19()", +"01367751": "PryzeSale(address)", +"01372911": "throwsWhenActivatingBeforeDeployingANT()", +"0138aac1": "getUserBalanceOnToken(address,address)", +"0138e31b": "_jAdd(uint256,uint256,uint256,uint256)", +"013953a6": "amountForRefundIfSoftCapNotReached()", +"01395d33": "tokenPriceInWeiForDay(uint256)", +"0139caad": "payout(address,uint256,uint256,bool,uint256)", +"013a0e9b": "pairwiseOr(uint64)", +"013a83f1": "beat(uint256,bool,uint8)", +"013a9c50": "updateWallet(uint256,uint256)", +"013b490c": "updateDaoAddress(address)", +"013cf08b": "proposals(uint256)", +"013d48bd": "getGuessStatus(uint256)", +"013d64bd": "setCanCall(address,address,string,bool)", +"013dbf17": "crowdsaleProgress()", +"013e5415": "getGoldDataInitialized()", +"013e7c35": "getUrlCountOf(address,address)", +"013ed428": "author1()", +"013eebd7": "getmaxcardcount()", +"013efd8b": "tokenToEthSwapOutput(uint256,uint256,uint256)", +"013f83c9": "createTeam(address,uint32[])", +"013f84fa": "getAllNumberOfBets()", +"013fc2a3": "SmillesCoin()", +"0140e359": "stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32)", +"0140ea82": "setNormalRoomMin(uint256)", +"0141e90a": "ICOaddress(address)", +"01429244": "getVendorApplicationsCount(string)", +"0142b8d1": "makeMerkle(bytes,uint256,uint256)", +"0142c8de": "currentPeriodRate()", +"0142c9ae": "isSoleout()", +"0142d43e": "notHungry(uint256)", +"0142d7b4": "authorizedBurnTokens(address,uint256)", +"0142f904": "CalculatePriceofRigs(uint256,uint256,uint256)", +"0143279c": "whitelistTicket(address)", +"014345c8": "SENDER_BALANCE()", +"01447eba": "disableCrowdsale()", +"0145e333": "init(address,address,address,uint256,uint256)", +"014647f4": "approve(address,bytes)", +"0146705b": "approvedRatio(string)", +"0146d0ca": "sendVote(string)", +"01491f09": "baseRateInCents()", +"01492a0b": "matchingEnabled()", +"0149ae4b": "finalizeExit(uint256,bytes32)", +"0149eea0": "view_get_Treasure()", +"014a7453": "getPI_edit_22()", +"014a897d": "Token_2()", +"014b0732": "validateTrade(address,address,address)", +"014bed81": "setAmountToKoikeToken(uint256)", +"014c3dbc": "current_external_block()", +"014c8ac0": "CBToken()", +"014d0f68": "hardCapHighUsd()", +"014d36f4": "Afroin()", +"014e5fde": "ARKController_1_00()", +"014e6996": "ZTF()", +"014e95ba": "rateBase()", +"014f7f22": "joinCount()", +"014fc169": "setLockToAccount(address,address)", +"015008b1": "reLoadXaddr(address,uint256)", +"01500a97": "getTokenForCommunity(address,uint256)", +"01501347": "disableRefund()", +"01502460": "freezeTransfers()", +"01509730": "userdynamicprofis2()", +"0150b530": "addressesLength()", +"015129a1": "sellPriceEth()", +"01512db1": "removeIntervalCoefficient(bytes2,uint256)", +"01515a7b": "weiToReceive()", +"01518d76": "sendQuery(uint256)", +"0151cf1d": "setVotingWinner(address)", +"01538868": "_setTokenURI(uint256,string)", +"015493b4": "setFoundationWallet(address)", +"0154d3ea": "notexistdept(string)", +"01567739": "beneficiaries(address)", +"015689c6": "testControlCreateWithParentsParentSameItemId()", +"0156b323": "destroyTokensFrom(uint256,address)", +"015773b6": "set_private_sale_total(uint256)", +"015854f8": "quoteBid()", +"0159a91d": "concatenate(string,string,string,string)", +"015a18ed": "start(bytes32)", +"015a4ead": "unfollow(address)", +"015aeda7": "setAttribute(address,bytes32,uint256,bytes32)", +"015afa55": "winnerIsB()", +"015bf264": "depositTokens(uint256,address,uint256)", +"015c1c7a": "toTokenAmount(address,uint256)", +"015cb3ff": "pauseTime()", +"015cb8cf": "baxianchain()", +"015ccd07": "DockToken(address)", +"015d200f": "lockBalanceAll(address)", +"015def53": "priceFactorC()", +"015e4f3a": "getConfigUint(int256,bytes)", +"015e52c6": "getPool(uint32,int256)", +"015f32f9": "cappedSaleStartTime()", +"015fa6c1": "setWeiCap(uint256)", +"015ff39f": "GNOSIS()", +"0160751c": "setDepositary_function(uint256)", +"01608f5f": "amountOf(address)", +"0160e2f6": "cancelOptionOrder(address[3],uint256[3],bool)", +"01612def": "additionalInternal(bytes32,uint256[])", +"0161d5f0": "createCampaign(address,uint256,bytes32,bytes32,bytes32,bytes32)", +"016211b5": "bonusAllocation()", +"01621527": "destEthDevs()", +"01623ee4": "basicRate()", +"0162827c": "bonus02End()", +"0162f799": "getPrivatePresaleFundersCount()", +"01637ff4": "getAccessory(uint256)", +"0163d8ff": "MostValuableCoin()", +"01644ea7": "getSimple()", +"016474ce": "withdrawalRound(address,uint256)", +"01655e31": "CollectibleBidEntered(uint256,uint256,uint256,address)", +"01659863": "_0xBitcoincashToken()", +"01665393": "BLOCKRADIO()", +"016774e9": "donatetokens(uint256)", +"0167eb85": "stone()", +"01681a62": "sweep(address)", +"016899de": "depot()", +"0168e2e3": "JonsCoin()", +"0168f063": "tokenAmountOf()", +"016a8cf6": "topUp(address,uint32,uint192)", +"016aba15": "setDividendTransactionNumber(uint256)", +"016b0882": "Cst()", +"016c6601": "_receiveDeposit()", +"016d5807": "_mint(address,uint256,uint256,uint256)", +"016d60b3": "buyStoreCore(uint256,uint256,uint256)", +"016d7c83": "pauseLottery(uint8)", +"016deccc": "createContractSpecial(string)", +"016e03b1": "getItemIdToTokenId(uint256)", +"016e128b": "ProfitWithdrawn(address,uint256)", +"016ea771": "isNotCommittee(address)", +"016eb8a8": "percentage(uint256,uint256)", +"016f34ad": "callgSoftCap()", +"016fa018": "getPartnerBalance(address)", +"01725a0b": "demo()", +"01738ecd": "setCurrent(uint256)", +"0173e3f4": "addCoins(uint256)", +"0174e12b": "myx()", +"01750152": "isNode(address)", +"01769b37": "sendTokensToSeven(address,address,address,address,address,address,address,uint256)", +"0176b596": "DreamBit()", +"01770e0c": "NKTToken()", +"01775f23": "_closeBooks()", +"01778b6d": "Ynfiniti()", +"0178090c": "toSHA256(string)", +"01788d1d": "Decabes()", +"01788d56": "balanceOfTranche(bytes32,address)", +"0178b8bf": "resolver(bytes32)", +"0178fe3f": "getData(uint256)", +"017945ba": "changeDollarPrice(uint256)", +"017972af": "getNumbersFromHash(bytes32)", +"017b0d00": "highestBidForEdition(uint256)", +"017b39a7": "getMiniPoolEdit_1()", +"017bef67": "addExplorationByShip(uint256,uint256,uint256)", +"017e322c": "getCurrentGameSteps()", +"017e6f5f": "reOrganizeAuthorities()", +"017f27fc": "saleIsClosed()", +"017fa10b": "returnUint128(uint128)", +"017fa51d": "shouldRevertPure(bool)", +"017fe809": "getPower(uint256)", +"01828e61": "Quecoin()", +"01836037": "foundationBoard()", +"01838f01": "addAnimal(uint8,address)", +"0183f310": "potMembers(uint256)", +"0184e952": "award(uint256)", +"0184fc35": "crowdSaleAddress()", +"0185f409": "getInvestorAddress(uint256)", +"01863f79": "thisContactsTokens()", +"0186aa16": "OxBioToken()", +"0186c36e": "getCurrentExchageETH()", +"0187699c": "VerixChain()", +"0187a677": "bbodServiceRegistry()", +"0187e973": "PricingStrategy(uint256,uint256,uint256,uint256)", +"0188c09f": "altList(uint256)", +"0188fdef": "setMaximumBuy(uint256)", +"01890840": "MilestonePricing(uint256[])", +"0189bd41": "getProofOfPerfBlockStateState(bytes32)", +"018a25e8": "getBuyPrice()", +"018aba3f": "createPledge(address,uint256,uint256)", +"018b06ff": "isWinner(address,bool)", +"018b64b6": "AuctionCancelled(address,uint256)", +"018d3490": "assignOracles(uint256,address[])", +"018d6f7a": "showethconf(address)", +"018de5c5": "distributeCBC(address[],uint256,uint256)", +"018dfaa0": "calcCount(uint256)", +"018e13d0": "numOfCurrentEpoch()", +"018ed439": "_getTokenForType(address,uint256)", +"018f5472": "isAUser(address)", +"018fa360": "getDeposits(address,address)", +"018fbf9f": "hashAt(uint16)", +"01909317": "_storeSettingDataState(uint256,address,uint8,string,address,address,string)", +"0190b805": "editEarlyParicipantWhitelist(address,bool)", +"0190e84f": "Bitscorone()", +"0191903e": "setBlogregistry(address)", +"0191d35c": "summFounders2()", +"0191dc92": "numOfAdmins()", +"01930b6e": "darknodeDeregisteredAt(address)", +"01933c43": "TOWN_START_PRICE()", +"0194abaf": "prolong()", +"0194ac16": "BlockchainFUN(uint256,string,string)", +"0194db8e": "sum(uint256[])", +"01968a56": "mintAllocation(address,uint256)", +"01970353": "setStepOneTime(uint256,uint256)", +"01970c6b": "team_funds()", +"0197d972": "VESTING_PERIOD()", +"01984892": "name(address)", +"019859bb": "changeMembershipContractAddr(address)", +"0198632a": "getPurchasedProducts()", +"0198aa74": "firstsaleOpen()", +"01991313": "scheduleCall(address,bytes4,uint256)", +"01996951": "ethPerTransactionLimit()", +"01998ad4": "GlobalAdminChanged(address)", +"0199c7b2": "numberOfHolders()", +"019b1576": "backupAddress()", +"019b32ad": "transferToSalesPartner(address)", +"019c3f52": "newCollectible(uint256,string,uint256,uint256,uint256,int256,string,uint256,string)", +"019c5675": "BatchComplete(uint256)", +"019c920c": "setcompany(uint256,string,string)", +"019d2729": "approve(bytes)", +"019e56fd": "findCurrentFor(address)", +"019f232a": "getTask(address)", +"019f5c5b": "narcoCore()", +"019f64cc": "payBack()", +"019f80b6": "toSecond(uint256,uint256)", +"019f8e26": "AddedManager(address)", +"019fef03": "resetFine(uint16)", +"01a00216": "addMod(address)", +"01a01551": "getApprovers(string,string)", +"01a048c3": "mintLockTeamTokens(address)", +"01a08a8b": "getWorkerPool(address,uint256)", +"01a0dee1": "investorsSupply()", +"01a12fd3": "removeAlerter(address)", +"01a15ee9": "mintTokensLocked(uint256,int256,address,uint256,uint256)", +"01a1b778": "battleId()", +"01a2789e": "transferPreSignedBulk(address[],address[],uint256[],uint256[],uint256[],uint8[],bytes32[],bytes32[])", +"01a2f48a": "changeAssetPackPrice(uint256,uint256)", +"01a2f75c": "createContract(address,uint256,uint256,uint256)", +"01a340a5": "totalBoughtColor()", +"01a413b9": "bankrollAvailable()", +"01a50001": "rewardEvery100000Draw7(uint256)", +"01a521d6": "getSellerBalancesOfCurrentAuctions(address[],address[],address)", +"01a53d3b": "maximumBuyBackPriceInCents()", +"01a5e3fe": "isWhitelisted(bytes32)", +"01a682c1": "createTeam(string,string)", +"01a68a94": "donkeyCoin()", +"01a6ab93": "PassedGateway(address,uint256)", +"01a77625": "_subEth(uint256,address)", +"01a7a8c0": "batFundDeposit()", +"01a80669": "createInvestorWallet(uint256,address,uint256)", +"01a88f7d": "buySeeds()", +"01a8d07f": "addBidder(uint256,address,uint256,uint256)", +"01a93f1c": "giveAwayOwnership(address)", +"01a96b94": "set_stage_Discount(uint256)", +"01ab2a66": "getPlayer1()", +"01ab2f14": "Manus()", +"01ab9806": "BUY()", +"01ab9f19": "_safeCall(address,bytes)", +"01ad35e3": "mintTokensForCommand(address,uint256)", +"01ad3936": "assignedAmountToDevelopmentTeam()", +"01ad62a3": "getBackendWallet()", +"01ae19d6": "LogLOTTransfer(address,uint256,uint256,uint256,uint256)", +"01aef755": "setBestProbability(uint8)", +"01afd5f3": "allBalancesForManyAccounts(address[],address[])", +"01afebac": "ICOopen()", +"01b057b1": "isAdminSet()", +"01b07f75": "adjustValue()", +"01b0c649": "collect(address,address,uint256,uint256)", +"01b11792": "toggleLocked()", +"01b125e6": "resetTimer(string)", +"01b14149": "getFcontracts(address)", +"01b2320e": "getStartBlock(uint256)", +"01b2a413": "baseVerifierFee()", +"01b490ed": "CAIDToken()", +"01b54744": "setLLV_edit_24(string)", +"01b5990c": "getCreatedOn(address,uint256)", +"01b5ffcf": "addVesting(address,address,uint256,uint256,uint256,uint256,bool)", +"01b6b523": "viewMyContribution(bool)", +"01b74d73": "TEAM_SHARE_PERCENTAGE()", +"01b78b12": "BitcoinMoon()", +"01b852c9": "MetadollarCrw()", +"01b869f1": "release(uint32,uint32,uint32,bytes)", +"01b8a0b9": "createTestingEnvironment()", +"01b96aaf": "waveCap2()", +"01b98853": "assetFreeze()", +"01b9a397": "setDescriptor(address)", +"01b9fe59": "testMint(int256)", +"01ba2bd5": "Request_Airdrop()", +"01ba6805": "loseEth(address,uint256)", +"01baa2e7": "validateCap()", +"01bb4edf": "RAIOCO(uint256,string,string)", +"01bb67a8": "InvestCancelEvent(address,uint256)", +"01bb7e5a": "getLockerDetails(address,uint256)", +"01bb85a4": "__startBlock(string)", +"01bbb8fa": "verifyTimelock(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", +"01bbc3f5": "stopWhitelistReservetion()", +"01bc237d": "researchers(address)", +"01bc43a0": "sha(uint128,bytes32)", +"01bc45c9": "_admin()", +"01bc757a": "getstudentInfo(uint256)", +"01bc9533": "totalTokensGenerated()", +"01bd4051": "disown(string)", +"01bea2bd": "Mountain()", +"01beb7cf": "setBadgeLevel(bytes32,uint256,string,string,bytes)", +"01bebf36": "updateAirdropStageState(string,bool)", +"01bf6648": "removeFromWhiteList(address)", +"01c0c6bc": "_processRefund(bytes32)", +"01c11d96": "MAX_PRICE()", +"01c1c877": "setChampion(uint256)", +"01c1de96": "fechVoteInfoForVoterByStage(address,uint256)", +"01c24a90": "minimum_balance()", +"01c28786": "date_end()", +"01c2b6f5": "commitDeadline(bytes32)", +"01c355df": "appSelectors(bytes4)", +"01c432ce": "wrongClaimerOrUnsetInManager()", +"01c4a07e": "convertDeposit100to70(address)", +"01c516b1": "crowdsale_end()", +"01c543c2": "claimOreOnlyFromAssetId(uint256)", +"01c5b2f0": "compressBoard(uint256[81])", +"01c64ce8": "maxTxGas()", +"01c68b4e": "addSrNumberOfbook(uint256,uint256,uint256,uint256,uint256)", +"01c69452": "brandAccounts(uint256)", +"01c6adc3": "transferFrom(address,uint256)", +"01c6f167": "auctionsRunByUser(address,address)", +"01c7cb58": "migrateMileageLeader(uint8,address,uint256)", +"01c835e5": "returnRemainRewardToken()", +"01c8c9d4": "getCurrentBonus(bool)", +"01c96df6": "ZeusShieldCoin()", +"01ca1d72": "getTransformRate()", +"01cb0261": "getWeightedVote(bytes20,uint256)", +"01cb3b20": "checkGoalReached()", +"01cb63e8": "arrayIndexOutOfBoundsDynamic(uint256)", +"01cceb38": "setExpiry(uint256)", +"01cdc371": "getCBATransactionMessageLength(address)", +"01ce5e75": "fundsCombinedValue()", +"01ce616f": "setMaxweiAmount(uint256)", +"01cff174": "getNumberOfAvailableStartTickets()", +"01cffa17": "getTokenWithBonus(uint256)", +"01d09a3c": "setCallbackGas(uint256)", +"01d0ac0b": "requestAccess(address,address)", +"01d1c7fd": "BTCS_ETHER_CAP()", +"01d223c1": "set_modified_weth_address(address)", +"01d2db89": "isValidKyc(address)", +"01d37b0c": "changeHiddenValue(string)", +"01d4277c": "thisisalsofind(uint256)", +"01d42a9c": "closeChannel(address,uint256)", +"01d490fd": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256)", +"01d4fb7c": "fundsKeeper()", +"01d511f1": "request(string,string)", +"01d5c488": "gemCriticalRateConversion()", +"01d6e35b": "unfreezeTeamTokens(address)", +"01d78a8b": "alterTotalSupply(uint256)", +"01d81121": "allocateCreationInvestmentingToken(address[],uint256[])", +"01d81a50": "slice(bytes,uint8,uint8)", +"01d8715f": "replaceManager(address,address)", +"01d8ce92": "KpopArena()", +"01d90bbc": "getCurrentUserMaxPurchase()", +"01d92dc8": "unsoldAllocatonScheduled()", +"01d97f08": "setMapping(bytes32,bytes32)", +"01d98d44": "changesDenied()", +"01da31ad": "_setPermission(address,address,bytes4,address,bool)", +"01da73ff": "isValidChannel(bytes)", +"01da7b31": "getBankName(address)", +"01db61e0": "HARD_CAP_EUR()", +"01dbdf44": "priceAt(uint256,uint256)", +"01dd91c0": "force_received()", +"01dda205": "updateSoftCap(uint256)", +"01ddc95e": "getTargetBlockLength()", +"01ddfa9d": "referalFundBalance()", +"01de7a1c": "updateVendorName(uint256,string)", +"01dee025": "getTombDetail(uint256)", +"01df6885": "getTokenDetails(uint64)", +"01df7f30": "validateProposedThroneConfig(uint256,uint256,uint256,uint256)", +"01e0ba3a": "bonusAccountIndex(uint256)", +"01e11c29": "SellToken()", +"01e1bcf7": "rateIcoPreICO()", +"01e1c861": "minWeiValue()", +"01e1d114": "totalAssets()", +"01e1ecb4": "releaseTokensAndEtherForEmergencyFund()", +"01e30a7f": "bigContributionBound()", +"01e33667": "withdrawToken(address,address,uint256)", +"01e343db": "setOffset(uint256)", +"01e3d346": "create(bytes1,bytes32,uint256)", +"01e3d718": "transto(address,uint256)", +"01e40f5b": "getFeeWindowBurnTargetValue()", +"01e4741c": "Ebets()", +"01e4abc1": "setWhiteList(address,address,uint32)", +"01e5691c": "createTransaction(uint256,address,uint256,uint256,address)", +"01e56c77": "stopPayouts()", +"01e57a37": "dth()", +"01e5aa3e": "getIssuerArray(bytes32)", +"01e68cbb": "timestamp_msg()", +"01e6a70e": "EthlanceInvoice(address)", +"01e73b73": "bulkVote(uint256[])", +"01e7fefe": "addParticipant(address,uint256)", +"01e88208": "permissions(address)", +"01e8b608": "TOKEN_SECOND_EXCHANGE_RATE()", +"01e91872": "DECToken(uint256,string,string)", +"01ea6270": "setTeamTokenAddress(address,address)", +"01eb6fdd": "max(uint32,uint32)", +"01ebc88e": "pingReading(uint256)", +"01ebccb9": "activeNameOf(address)", +"01ebd36b": "enable_sale()", +"01ebebf2": "myTulips()", +"01ec0793": "profitsOf(address)", +"01ec16ef": "RulesChangedEvent(uint256,uint256,uint256,uint256)", +"01eca37c": "medalDataContract()", +"01ecaca5": "changeOVCPerEther(uint256)", +"01ed7f8b": "distribute(address,address,address)", +"01edb1ea": "dayIdx()", +"01ef6cad": "addJobContractFeedback(uint256,string,uint8)", +"01ef74f1": "tokens_rewards_available()", +"01efb6c8": "getOrderInfo()", +"01f2a2c5": "buyForBtc(address,uint256,uint256,uint256,uint256)", +"01f40a85": "issuePurchase(address,uint256)", +"01f59d16": "maxFee()", +"01f5af30": "addJobSponsorship(uint256,string,string)", +"01f6dad0": "remaining_for_sale()", +"01f6e6d5": "asignarDni(uint256)", +"01f78f43": "getFreeCHICKEN()", +"01f7e49a": "removeFromPresaleWhitelist(address)", +"01f81649": "claimBrokerFee()", +"01f865c3": "setWinPercent(uint256)", +"01f89de0": "purchaseSharesOfArtwork(uint256)", +"01f99ad7": "left9(uint256)", +"01f9a0aa": "setOraclizeQueryMaxTime(uint256)", +"01fa3e53": "addSocial(address[],uint256[])", +"01fabd75": "addArbitrator(address)", +"01fae3b6": "setTokenState(uint8)", +"01fbaf99": "totalLareSold()", +"01fc59e1": "checkId(bytes32)", +"01fce27e": "getQueue()", +"01fd1b1d": "finalizationFailHook()", +"01fd89a4": "getFlags(bytes20)", +"01fe34e3": "EWCertificationCenter(string,string,string)", +"01feeef4": "getTitleDeeds(bytes32)", +"01ff62ab": "isConcerned(uint256,address)", +"01ff8961": "getPortfolio(uint256,address)", +"01ffc9a7": "supportsInterface(bytes4)", +"0200b10d": "collectedEthers()", +"0201b5d5": "transferOverBalanceFunds(address,address,uint256)", +"0201e253": "WhoHoldsPatentFor(bytes32)", +"0202f3ea": "allowTransfersTo(address)", +"020331dd": "getFact(bytes16)", +"0203596d": "purchaseKingdom(string,string,bool)", +"0204c163": "maxFadeoutPromille()", +"0204d0f8": "unlockOwnerDate()", +"02055186": "Alexa()", +"02063d93": "calcMaxDeposit()", +"0206432d": "FlexionCoin()", +"02064b42": "consul_price()", +"02065fb8": "isLoanFunded()", +"02067e6a": "add(uint8)", +"0206deb5": "unitsLimitForCurrentSaleStage()", +"0206e79d": "decodeParamId(uint256)", +"02072579": "controllerSet()", +"02078166": "unburnedTypeTokens()", +"0207eda6": "NOVA(uint256,string,uint8,string)", +"02083e27": "REET()", +"02093ee2": "finalize2()", +"02096a8e": "amountsByCurrency(uint256)", +"02099186": "totalRise()", +"0209f982": "reminder()", +"020a0ff5": "setClaimLimit(uint256)", +"020acb6a": "round1Bonus()", +"020bdf54": "getFreeStrippers()", +"020d308d": "removeDelegate(address,address)", +"020d4786": "OmmerToken()", +"020de876": "setTakerFeeRate(uint256)", +"020df04b": "createBarCode(bytes32)", +"020df957": "setAirdropReceiver(address)", +"020e2d48": "getArrayHashLibry(bytes32)", +"020eb6e1": "createWorkOrder(address,uint128)", +"020f899a": "hybridizationPrice(uint256)", +"0210d751": "getMyGames()", +"02114111": "allowTimelock()", +"0211c4bb": "MessageToken()", +"0212d0b9": "payByTokens(uint256)", +"0212fd1f": "InternationalRapidAsset()", +"0213443c": "changeZombieCreator(address)", +"02135534": "getNinja(uint256)", +"02138563": "buyOre()", +"02140adf": "CryptoHuntersToken()", +"0214e9cf": "preIcoFinishTimestamp()", +"0216f544": "transferExecutor(address)", +"02171e7c": "largeConstant()", +"02172276": "triggerEvent(string,string)", +"02175beb": "setOzr(address)", +"0218a1c3": "setString(bytes32,bytes32,string,bool)", +"02190a52": "allowRecurringBillingInternal(address,uint256,uint256,uint256,uint256)", +"021979c3": "wlcontract()", +"021991e7": "getBetsLocked()", +"021a11d0": "setContractICO(address,address)", +"021ba8f8": "CLAWBACK_PERIOD()", +"021bb947": "burnAfterIco()", +"021bc974": "checkPoolBalance()", +"021c309a": "solveBet(address,uint8,bool,uint8)", +"021c43b4": "NBY()", +"021c7bd7": "setInspectorId(address)", +"021da58e": "initCrowdsale(uint256,uint256,uint256,address,address)", +"021dc2fc": "tokenExchangeRateInWei()", +"021dd82c": "checkNotLocked(address,uint256)", +"021e7f85": "CONTRACT_ALLOWANCE()", +"021ea45e": "claimTilesForExistingUser(uint16[],uint256,bool)", +"021efe49": "getPawnOwner(uint256)", +"021f0376": "_addAssetTo(address,uint256)", +"021f36a4": "changeResource(bytes32)", +"021fe51f": "VUPRefundedForWei(address,uint256)", +"0220611a": "timeOfLastPublish()", +"022079d9": "ecmulVerify(uint256,uint256,uint256,uint256,uint256)", +"0220a5b4": "terminate(string)", +"0220f662": "addPolicyAttribute(uint8,uint256,uint8)", +"0221038a": "payOut(address,uint256)", +"02218ad6": "desBan(address)", +"0221f2fb": "Beneficial()", +"0222f96e": "Poppy()", +"02238cbd": "_activateDevice(bytes32)", +"02238e43": "launchnewround()", +"0224dc18": "TOKEN_SALE1_PRE()", +"0224e9a7": "devFees()", +"02258730": "nodeRegistration()", +"02259b07": "setPBTTForGas(uint256)", +"02262ced": "setBackendOperator(address)", +"0226401d": "ownerTestValue()", +"02264b63": "private_withdraw(uint256,address)", +"0226a5c9": "petOnLeaderboard(uint64)", +"0226ed48": "changeGlobalAdmin(address)", +"02285548": "FarmHopeProjectToken()", +"0228e05a": "walletFromData(bytes)", +"022914a7": "owners(address)", +"02299496": "updateICOStatus()", +"0229ae31": "CosmoCoin()", +"0229b23e": "pauseSALE()", +"0229c4eb": "TransferMinimumFeeProposalAdded(uint256,address,uint8)", +"0229e448": "founderMulSigAddress()", +"022b7433": "add(bytes32,uint8,uint8)", +"022b8a7f": "getIdProject()", +"022b9735": "GetMyBalance()", +"022bc71f": "getNextCallSibling(bytes32)", +"022bd24c": "hypes(uint256)", +"022c254a": "pendingChanges(address)", +"022cabac": "CoinViewToken()", +"022e1e59": "USBEEF()", +"022e9c95": "getinverstinterval()", +"022ec936": "updatePeriod(uint256,uint256)", +"022edd35": "getActiveContracts()", +"022fc88b": "approveToken(address,uint256)", +"02300cbb": "DepositReleased()", +"0230a07c": "releaseDeed(bytes32)", +"0230d870": "tierThreeRate()", +"02329a29": "pause(bool)", +"02337657": "documentIPFSHash()", +"0233d94d": "getEscrowsByTaker(address)", +"02340ad6": "deleteVisaOffering(uint256,uint256)", +"023569aa": "MoniCoin()", +"02356ec0": "returnCoupon(address,bytes32)", +"02358773": "XFL(uint256,string,string)", +"02359fdd": "OfferingCloses(uint256,uint256)", +"02361dbc": "totalAllStage()", +"0236bb5a": "isAdminAddress(address)", +"0237ef12": "contributionInWei()", +"0238777f": "preCrowdsaleContractAddress()", +"0238b5aa": "testToAddress()", +"0238b770": "endDateICO()", +"02394872": "getLastBlockHeight()", +"02395e9b": "lpc()", +"023a624a": "right11(uint256)", +"023b011e": "getRateEth()", +"023bb74d": "DATE_PRESALE_START()", +"023c19ce": "MyWishChain()", +"023c23db": "getSize(uint256)", +"023c6042": "tokencap()", +"023c61ca": "price_agent()", +"023c8be2": "setWithdrawalAddress(address,address)", +"023d44df": "RNBlock()", +"023d6c03": "REPO_APP_NAME()", +"023e1c34": "communityContributionPercentage()", +"023e36d8": "nVotesCast()", +"023eff9f": "airdrop(uint8,bytes32,bytes32)", +"023f4147": "totalContributed()", +"023f4a66": "issueToReserve(uint256)", +"023fadda": "getRedeemedList()", +"02400845": "publish(bytes12)", +"02404bee": "crowdsaleCount()", +"02404fcb": "buyBanana()", +"0240ab3f": "finishRetrieving()", +"0240db33": "summFounders4()", +"02410cf6": "isFundReleased()", +"0241747f": "ReceivedBTC(address,uint256)", +"024187a5": "window0TotalSupply()", +"0241fb82": "returnChildForParentNew(address)", +"02421ca7": "SaddleFS(uint256)", +"0242622b": "changeMultisigAddress(address)", +"0242a5fc": "testRecovery(bytes32,uint8,bytes32,bytes32)", +"0242ba2a": "FOToken()", +"0242c430": "CreateTokenToTeam(address,uint256)", +"0242deb8": "registerIntermediary(address)", +"0242f1ef": "TonCoin()", +"0242f351": "getVote()", +"0242fc62": "voteNo(string)", +"02431422": "addSuperPlayer(address,bytes32)", +"02433d0f": "num_holders()", +"02437982": "adjustRate(uint256,uint256,uint256)", +"0243aa1b": "getCurrentNbVote()", +"02443111": "oneTrancheAmount()", +"0244ba4a": "Hubble()", +"0244eb3f": "testFundsAreLockedDuringSale()", +"0245c5c8": "importSequence()", +"02460d1e": "_emitHolderRegistered(bytes32,uint256,uint256)", +"02474718": "paydayFrequencyInDays()", +"02474c59": "myPledgeTo(address)", +"0247e02a": "subFromAddressBalancesInfo(address,uint256)", +"024800ff": "presaleWeiSold()", +"024858b1": "createTrade(bytes32,uint256,uint256,address,address)", +"02491bd5": "CryptoLottoCoin()", +"0249e64a": "CodeMailStamp()", +"024a56a4": "testIsData(bytes)", +"024adb25": "LogStateSwitch(uint8)", +"024bb1fd": "changeName(uint256)", +"024c4199": "addListener(address,address)", +"024c6def": "BONUS_ICO_WEEK_TWO()", +"024c764f": "setChallengeCooldownTime(uint256)", +"024cc06d": "updateRecipientInfo(bytes32,string,string,address)", +"024ddebe": "Error(bool)", +"024edd75": "buyHero(uint256)", +"024fcc6c": "enableService()", +"024fd650": "tokenData()", +"024fd912": "GoToken()", +"02500824": "buyDentacoinsAgainstEther()", +"025026d5": "updateEmployee(uint256,uint256)", +"02502787": "FDT(uint256,string,uint8,string)", +"0250bd2d": "unregisterName(string)", +"02521b16": "saveTxt(string)", +"0252607e": "bitcoinPublicKey(uint256)", +"0252b995": "gameStartTime()", +"025313a2": "proxyOwner()", +"0253a95a": "getMaxMerge()", +"0253e935": "setOrderListLengthFactor(uint256)", +"0253fbd1": "momFab()", +"025404d4": "amountRaisedUSD()", +"02543238": "setDiscountValueOff()", +"02548866": "TOTAL_CAP()", +"0254aa41": "CommonEth()", +"0254e687": "GodlyCoin()", +"0254ef0f": "enterMedium()", +"02550e4d": "profit(address)", +"02556de3": "updateMajorTree(bytes32)", +"02565633": "buriedSupply()", +"0256c7f5": "Afin()", +"0256e827": "enablePurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"02571be3": "owner(bytes32)", +"0257210f": "ForgeCDN()", +"02573fc2": "resetStellarInvestor()", +"0257a0c0": "onLotteryCompleted(uint32)", +"0257c48c": "meta(bytes32,bytes32)", +"02581ab3": "offerIndexedPieceForSaleByAddress(address,uint256,uint256)", +"02581cde": "refundExpiredBet(bytes32)", +"025830ac": "changedBrokerDealer(uint256,address)", +"025845ae": "thinkTankFundAddress()", +"02587586": "companyAddr()", +"025932fd": "bitikzikToken()", +"0259371c": "TTTTokenSell()", +"02593c2b": "_Split()", +"025a6f02": "OsmiumCrowdsale()", +"025abd58": "getTokenBalance(string)", +"025b22bc": "updateImplementation(address)", +"025b97bd": "getProviderAdmin(uint256)", +"025bbbe5": "newSale(bytes16,uint256,uint256)", +"025cce45": "AMULETS()", +"025cf89f": "setMigrationManager(address)", +"025dd017": "OnReceive(uint64)", +"025e029b": "buyStar(uint256,uint8,uint256)", +"025e56d3": "NeuroDAO()", +"025e7c27": "owners(uint256)", +"025e8095": "transferCell(address,uint256)", +"025ec81a": "getBytes32Value(bytes32)", +"025f9bc1": "updateTokenInformation(string,string)", +"025ff12f": "airdrop(address,address[],uint256[])", +"026164ad": "sunset()", +"026189ec": "BitRecord()", +"02618eb2": "AltCurrency(uint256,string,string)", +"0261a403": "issueDID(address,uint256)", +"0261edec": "getContractByID(string)", +"0262dc13": "claimOne(address)", +"0263379b": "bringBackTokens()", +"026345b6": "ledgerContract()", +"0264ba24": "sendValueToJackpot()", +"0265190c": "b66ReserveTokens()", +"026654bf": "PoolManager(address)", +"02667e9b": "killPay()", +"0266ba02": "list(address[])", +"0266f044": "reservePool()", +"02682ab3": "setNewWallets(address,address,address)", +"026858ea": "getRateModifierInPermilles()", +"0268ec43": "MyEtherTeller()", +"02690ef0": "setICOElePrice(uint256)", +"026993e0": "Midas(address,address)", +"026a308a": "_checkWhitelistContract(address)", +"026a9cdd": "getPotato(uint256)", +"026b1d5f": "getPool()", +"026bb254": "upVoteHouse(address)", +"026c0d8f": "RHP()", +"026d0e1c": "grantUserLicense(address,string)", +"026d19d5": "WeTestToken(address,string,string,uint256,uint256)", +"026d6a67": "setStartStopBlocks(uint256,uint256)", +"026e402b": "delegate(address,uint256)", +"026eca12": "createTapPoll(uint8)", +"026f9d56": "SOT()", +"026fcf83": "setSaleFinish()", +"026ff05e": "deleteUser()", +"02704a4d": "COIN_SUPPLY_ICO_PHASE_3()", +"027116f7": "approveNewOwnersCount()", +"027391bf": "sendMoneyBeforeEnd(uint256)", +"02742425": "preFundingtokens()", +"027471b0": "roundActive()", +"0274d5ff": "soulIsOwnedBy(address)", +"0274ea81": "jadd(uint256,uint256,uint256,uint256,uint256,uint256)", +"0276650b": "individualCap()", +"027681ab": "setJackPotInfo(uint256,uint256)", +"02780677": "LN2()", +"0278199e": "StandardToken(uint256)", +"0278bde1": "ask(address,uint256,uint256,uint256)", +"0278fa20": "TeambrellaWallet()", +"027903ef": "setReservedTokens(uint256)", +"02795b3a": "tokenMarket(address)", +"027a4425": "EthereumDiamond()", +"027a5e3f": "getLastVersion(bytes)", +"027a7ccc": "calculateFirstCut(uint256)", +"027aa9f5": "getUnits()", +"027b1fb3": "SimpleStorage()", +"027bb838": "FLTToken()", +"027bd9a8": "changeColorGreen()", +"027bfab4": "discountedIcoTokensSold()", +"027c3e08": "ControllerChanged(address)", +"027cb7c6": "clearing()", +"027e7a0f": "getTotalGamePot()", +"027ec848": "setDurationOfLock(uint256)", +"027efe2b": "makeOperation(uint32,string)", +"0280052d": "setKing()", +"028118a1": "PREBUY_PORTION_MAX()", +"02814b86": "maxETH()", +"0281b752": "admin_set_ExchangeRateInWei(uint256)", +"02825adc": "gvOptionToken30()", +"02836f24": "upgrading()", +"0283f4b4": "addPropertyForUser(bytes32,address)", +"02846858": "removeBurner(address)", +"0285d554": "transferWithEvent(address,address,uint256)", +"028780e4": "ownerWithdrawZth(address)", +"02879f9c": "addProduct(string,uint256,string,string,string)", +"02884909": "authorizedLogicContractAddress()", +"02889f26": "getCustodianChangeReq(bytes32)", +"0288a39c": "withdrawDelay()", +"0288ab5d": "TCC()", +"0288c0a0": "TransferDomain(string,address)", +"0289e966": "newVersionReleased()", +"028a582e": "findEndpointByAddress(address)", +"028a95a0": "lockRemainingTokens()", +"028ab3b1": "__get(address,uint256)", +"028ae3b7": "setAffiliateList(address)", +"028af743": "getServerCurrentMatch(uint256)", +"028b7854": "throwsSaleWalletIncorrectBlock()", +"028e10ac": "BidaCoin(uint256)", +"028e3731": "getUsersByDocHash(bytes)", +"028e6c67": "intOrRevert(uint256,uint256)", +"028ebc44": "setRegistryContract(address)", +"028fb6b8": "deleteRef(bytes32)", +"029043a4": "removeBlacklistSpender(address)", +"02911cfe": "distribute(address,uint256,uint8,uint256)", +"02917f4a": "issuePatrons(address,uint256)", +"0291b9b1": "judgeIsReachDailyLimit(uint256,int256,uint256)", +"02927d20": "setupEventsHistory(address)", +"0292f88a": "setBaseDenominationAddress(address)", +"02931e59": "getUserPower(address)", +"02932f56": "totalCampaigns()", +"0293a772": "get_sale_owner(address,address)", +"0293fafc": "ADBToken()", +"02940dbb": "Decenturuon()", +"02942724": "preservedTokens()", +"02949bff": "CampaignToken()", +"0295d71b": "currentDepositLimit()", +"02965297": "update_height(uint256)", +"0296b3a8": "STARLIGHT()", +"02978be8": "gameHostAddress()", +"0297abe5": "getLimitMaxGame()", +"02981cfe": "transferedToPool()", +"02987db8": "priceInWeiPerSatoshi()", +"02989d9f": "SellOrder(uint256,uint256,address)", +"0298d557": "isValidSignatureAndData(address,address,bytes)", +"029a258a": "claimDonations(address[2],uint256[8],uint8,bytes32[2])", +"029a8bf7": "multiAsset()", +"029ad03e": "get_nb(address)", +"029bca78": "isPremium(uint256)", +"029c19aa": "getCreditBondAddress()", +"029d1ecd": "ownerApprove(address,uint256)", +"029d4b2d": "isTimestampInsideRange(uint256,uint256,uint256)", +"029da1c4": "walletFounder2()", +"029dc6d2": "piggyToWallet()", +"029deeb0": "updateUportInfoFromOracle(string,address,address)", +"029eabcb": "contributions()", +"029f1d0e": "userName(uint256)", +"02a10d87": "getPreSaleEndDate()", +"02a182d1": "setInvestmentCapIcoPhaseTwoPounds(uint32)", +"02a1a7a8": "isReachCapped()", +"02a251a3": "votingPeriod()", +"02a2680c": "getUserWalletByID(uint256)", +"02a2c88f": "kycLevelOf(address)", +"02a2cf02": "NOK_Omnidollar()", +"02a2e105": "RYANTOKEN()", +"02a2f06e": "GetMyBet()", +"02a3036d": "init1_block_height()", +"02a4e488": "decreaseAllowanceProxy(address,address,uint256)", +"02a4e849": "getMiniPoolEdit_9()", +"02a566bd": "Woyager()", +"02a59ea3": "isEntitledForCluster(address)", +"02a5c0be": "CryptoSagaArenaRecord(address,address,uint8,uint8)", +"02a63c28": "consumeMarketOrderAsk(uint256,address,address)", +"02a6f266": "Presale(address,address,address,address)", +"02a72a4c": "tokenGrantsCount(address)", +"02a86781": "authorAddress()", +"02a8a406": "setBurnPolicy(bool,bool)", +"02aa26f6": "buySeatForEvent(uint256)", +"02aa274b": "setForward(bytes4,address)", +"02aa6318": "getDistributions()", +"02aa9be2": "unvote(address,uint256)", +"02ab4781": "reservedCoins(address)", +"02abb4c5": "Miner()", +"02ac8168": "Launch()", +"02acbaa3": "CrowdsaleMinter()", +"02acc6b6": "GNTTokenERC20(uint256,string,string)", +"02acdb44": "setAnyoneCanCall(address,bytes4,bool)", +"02ae832f": "trashTokens(address,uint256)", +"02ae8cdc": "tokenProduct(uint256)", +"02aec20d": "PrintableToken(string,uint256,string,uint256,int256)", +"02af2095": "massTransfer(address[],uint256[])", +"02b04384": "AIRDROP_ADDRESS()", +"02b09ac5": "charityVault()", +"02b32af5": "greenToken()", +"02b33929": "SMTToken(uint256,uint256)", +"02b3b3da": "Divium()", +"02b40d11": "tokenSetMarketMaker(address,address,address,address)", +"02b4b52c": "isLogoInitied()", +"02b518fd": "callback(address,address,uint256,uint256,uint256)", +"02b5ecc8": "rateAngelsDayEnd()", +"02b68bbf": "getPlayersItemTickets(address)", +"02b6ef74": "CRofMakerByIndex(address,uint256)", +"02b6f286": "TokenContract(address,string,string,uint8)", +"02b70b41": "addConfirmation(bytes32,address)", +"02b7144f": "updateCheckpoint(address,address)", +"02b74a7e": "setupStates(uint256,uint256,uint256[])", +"02b857f3": "unlockMintDate1()", +"02b985d3": "arr(uint256,uint256,uint256,uint256)", +"02ba302b": "nextPrice1Of(uint256)", +"02ba6f8d": "getHistoryEntry(uint256,uint256)", +"02ba742b": "extendMembership(address,uint256)", +"02ba8742": "sendCoins(address,uint256)", +"02baaf40": "lastInitTimestamp()", +"02bb2929": "etherToDustPrice()", +"02bb5d6e": "setEOMarketToken(address)", +"02bb8465": "setContent(uint8,string,string)", +"02bc54bf": "companySite()", +"02be8e4e": "changeOwnerShip(address)", +"02beee07": "_getElement(uint8[],uint8)", +"02bf3165": "auctionUnpause()", +"02bf7fe7": "JumpCoin()", +"02bf9e7f": "verifySignature(address,bytes32,uint8,bytes32,bytes32)", +"02bfeeb8": "totalPicoUSD()", +"02c06bcd": "prevTokenAddress()", +"02c1d7cf": "iSportNews()", +"02c1ecbf": "returnStateChange()", +"02c28410": "getPublicAllocation()", +"02c29349": "fixWithdrawalAddress(address)", +"02c2a74d": "episodeManager()", +"02c3d7f6": "end_ICO()", +"02c4897b": "getAutorPicture(bytes32)", +"02c4960e": "InsufficientFee(address,uint256)", +"02c4980c": "BOC()", +"02c63852": "TokenVesting(address,address,uint256,uint256,uint256)", +"02c6d827": "getgamecardpos2(address,address)", +"02c6f427": "PRESALE_LEVEL_4()", +"02c71d92": "newClonedRepo()", +"02c76d45": "mintCoolDown()", +"02c7e7af": "sold()", +"02c85991": "distributeMinting(address[],uint256[])", +"02c90584": "userAddressExists(address)", +"02c95d2d": "setHaltIco(bool)", +"02c9972c": "TICK_TIME()", +"02c9e537": "cresusAddress()", +"02ca5994": "registerToken(address,uint256)", +"02ccee02": "getNoteLine(uint256)", +"02cd0f96": "Deadline(uint256)", +"02cdc1ee": "setSendGodz(uint256)", +"02ce5813": "whitelistActive()", +"02ce5fc4": "generateMintEvents(address,uint256)", +"02ce728f": "updateExchangeRate()", +"02ce8ac9": "withdrawSale(uint256)", +"02d0181c": "HamidToken()", +"02d05531": "getUriCount()", +"02d05d3f": "creator()", +"02d06d05": "bytesToUint(bytes)", +"02d19fe5": "testApproveWillNotModifyAllowance()", +"02d1c1e6": "sendOwnerBalance(address,address,uint256)", +"02d1d5fe": "getDesign()", +"02d23cef": "sendWithFreeze(address,uint256,uint256)", +"02d2f349": "lastPeriodChange()", +"02d3b339": "drawColors(uint256[],uint256[],address)", +"02d3bd16": "circulatingSupply_()", +"02d3fdc9": "burnMin()", +"02d44e57": "_getBetTimestamp(bytes32)", +"02d49d0b": "_createHiveInternal(address)", +"02d52fa4": "createProposal(uint256,string)", +"02d596d8": "getUserFromAddr(address)", +"02d66fc2": "hasSchema(bytes32)", +"02d6e7f4": "tokenXchangeRate()", +"02d6f730": "getFreezing(address,uint256)", +"02d77954": "getVoteOf(uint256)", +"02d7ccef": "UP_winRate()", +"02d800ec": "deactivateKey(string)", +"02d8146e": "tokensWallet()", +"02d947ef": "vote(uint256,address)", +"02d99637": "BlockClaimedEvent(address,address,uint256,uint256)", +"02da667b": "createProject(uint256,uint256)", +"02da6d06": "lastDao()", +"02dadf8e": "registerCitizen(bytes32,address)", +"02db2d8a": "myRefund(address)", +"02dbf3c8": "CGE()", +"02dc2e1d": "queuePayment(bytes)", +"02dcfc8e": "setAssetFees(address,uint256,uint256)", +"02dd6731": "disableApiAccess(bool)", +"02dd92c4": "crowdsaleOn()", +"02de2cf3": "isLatestPreReleaseTree(bytes32,bytes32)", +"02df0b61": "deprecateById(bytes32)", +"02df45a8": "closeActive(uint256)", +"02e0a2ff": "getAvailableBlance()", +"02e0b293": "LogVote(address,uint256,uint256,uint256,uint256)", +"02e0c14a": "get(bytes12)", +"02e0d5a5": "AquaToken()", +"02e1033a": "monsterFleeTime()", +"02e132f6": "recalcInvestorsFee(address,uint256)", +"02e26c38": "richest()", +"02e2c3b7": "setRefererPercent(uint256)", +"02e2f0b6": "Erc20TokenMarket()", +"02e32144": "precentDecimal()", +"02e33d25": "HydroToken()", +"02e4879d": "setProposalDuration(uint64)", +"02e49bd9": "publicityAddress()", +"02e4af01": "generateRandom()", +"02e4ef66": "transferWhiteList(address)", +"02e4f63b": "doExchange(address,address,address,uint256)", +"02e635e6": "AID()", +"02e650b6": "DigitalMoney(uint256,string,string)", +"02e6a5dc": "LIC(uint256,string,string,uint8)", +"02e6a951": "PayableContract()", +"02e7491e": "ERC165ID()", +"02e8243e": "WeiCoin(address,uint256,uint256,uint256)", +"02e8d8c0": "scheduleTransaction(address,uint256,uint256)", +"02e97770": "InfinitiEstate()", +"02e98e0d": "diffMinutes(uint256,uint256)", +"02e99e16": "SplitAmount(address,address,uint256)", +"02e9ad65": "dispatchTo(address,uint256)", +"02e9d5e4": "acceptBid(uint256,uint256)", +"02eb4759": "RightAndRoles(address[])", +"02eba8a7": "auditContract(bytes32,bool)", +"02ec77d2": "joinPot(string)", +"02ed26d1": "startTokensSale(uint256,uint256,uint256)", +"02ed292b": "receiverSpend(bytes32,uint256,bytes32,address,address)", +"02ed4d2d": "Purox(uint256,string,uint8,string)", +"02edcbfb": "proposeAmendment(uint256[],uint256[],bytes32)", +"02ee3275": "setSatoShi()", +"02ee3a52": "getAllProducts()", +"02ee50e0": "EliteToken()", +"02ee6a6b": "RegisterEvent(address,address)", +"02eef456": "UK()", +"02eef7c3": "MassivelyMultiplayerOnlineGame()", +"02ef3844": "getBountiesByCreator(address)", +"02ef43c3": "recordPurchase(address,uint256,uint256,string,uint256)", +"02ef521e": "registerEtherToken(address,bool)", +"02ef6c86": "calculateWithdraw(address)", +"02efbde5": "batchApproveWhitelist(address[])", +"02f050e4": "getWinningDetails(uint256)", +"02f08568": "lockController()", +"02f0c937": "buyItem(uint256,address,string,string)", +"02f1bfad": "setupTimeWindow(uint256)", +"02f1ed99": "putOnInitialSale(uint256)", +"02f2008d": "hintURL(bytes32,string)", +"02f20b9c": "getReport(string,uint256)", +"02f41314": "continueDistribution(uint256)", +"02f48c8b": "transferAvailableBalances(address,address,uint256)", +"02f58015": "claim_bounty()", +"02f65096": "executeBid(uint256,uint256,uint256)", +"02f652a3": "setTransferAgent(address,bool)", +"02f83a56": "withdrawBonusToken()", +"02f9fd84": "HHGTTG()", +"02faabb3": "fetchOrderByIdWithMerchant(string,address)", +"02fac967": "ownerHasCard(address,address)", +"02faf1e2": "revokeAccessFromAddress(address,address)", +"02fb0c5e": "active()", +"02fb4d85": "slash(address,uint256)", +"02fbe0d5": "getKittyGetOrNot(address)", +"02fc1f85": "ownedNumbers(address)", +"02fc28c4": "TAP_POLL_DURATION()", +"02fc2a8a": "_buy(address,uint256)", +"02fc3127": "tokenSaleBalanceOf(address)", +"02fd9dd8": "market_DeclareForSaleToAddress(uint256,uint256,address)", +"02ff1fac": "changeDevevoperAccont(address)", +"02ffc0b0": "getApprovedAddressesOfList(address[])", +"03015ea3": "registerArbiter(uint256,uint256)", +"03021c87": "setMaxInterval(uint256)", +"0302263a": "getPendingManager()", +"0302c688": "prod()", +"03031960": "VestingVault(address,address,uint256)", +"030326ad": "pushAddr(address)", +"0303f694": "_getBonusPercent()", +"0304363a": "fetchAllVoteResult()", +"030481d5": "changePreseller(address)", +"03048590": "ratePresale()", +"03048a42": "createRequest(address,uint256,string,bytes,bytes)", +"0304de3b": "setFeeRecieverValue(uint256,address)", +"03058aad": "getLatestManifest(address)", +"0305bdfe": "Trongold()", +"03060b68": "getCoreSupply()", +"03062183": "getVisaLeft(address,uint256,uint256)", +"03068d57": "setMinimumTextDonation(uint256)", +"0307024f": "getCreatedStatus(uint256)", +"03070ae7": "MANHATTANPROXYRIVDR()", +"03071302": "getCCH_edit_23()", +"030745ec": "_calculatePaymentToOwner(uint256,bool)", +"03075018": "getCosts()", +"03075ded": "emitIssuanceRatioUpdated(uint256)", +"03078416": "requestOfAmount(address,uint256)", +"0307acae": "copy(uint256[],uint256)", +"0307f82a": "SoldToken(address,uint256,string)", +"03083883": "compose(uint256[],uint256)", +"03090958": "_transferAct(address,address,uint256)", +"03096e92": "proposedMilestones()", +"0309922f": "icoMaxAmount()", +"0309c7f8": "payLastSixteenWinner(uint256)", +"030a78aa": "MAX_SITE_TOKEN_ID()", +"030b1776": "ROPE()", +"030ba25d": "withdraw(uint256,bytes)", +"030bccb0": "QLANCE2()", +"030c3631": "dungeonPlayerCount(uint256)", +"030cc118": "depositSuccessful_()", +"030cecc7": "decode(string,bytes32)", +"030d406b": "entryPayout(uint256)", +"030d945c": "PMHToken(uint256,string,uint8,string)", +"030e30df": "super_transferFrom(address,address,uint256)", +"030e6b98": "testFinalizingBeforeCapChangesHardCap()", +"030e9080": "returnAllCoke()", +"030eafa0": "endThisContact()", +"030f5702": "returnAmount(uint256)", +"03101f46": "setDistributionMinimum(address,uint256)", +"03110f23": "returnKitty(uint256)", +"031122ef": "exhaustChibis(uint256,uint256)", +"031126e1": "_approx(uint256)", +"0311904c": "investAmount()", +"0311a8f0": "getUploadNames(uint256)", +"03122043": "setCompte_40(string)", +"031324fa": "_transferDivis(address,uint256)", +"03137d43": "test_insert_findWithHintPrevRemovedUpdateHead(int256)", +"03138b31": "phase_5_remaining_tokens()", +"0313953d": "indexBalance()", +"03141fcd": "listPairForReserve(address,address,address,bool)", +"03145ac2": "WildFurToken()", +"03149252": "everyoneDisabled()", +"0314bcfb": "FUND_SUPPLY()", +"03152429": "newAccount(address)", +"031578af": "bytes32Storage(bytes32)", +"0315a513": "getDigitalAsset()", +"0316bdb0": "CofounditToken(address)", +"03178d05": "getB3()", +"0317c06e": "isAllowedBalance(address,uint256)", +"0317fb71": "asmApprove(address,address,uint256)", +"031a36f1": "EBBToken(address,uint256)", +"031a8161": "convertDecimalBack(uint256)", +"031adff0": "whitelistingAddress()", +"031b3677": "funders(address)", +"031bd4c4": "TOKEN_LIMIT()", +"031d5d01": "readMessage()", +"031d7421": "createRegistry(address,address)", +"031d973e": "closeMarket(bytes32)", +"031e1b65": "sendFounderAndTeamToken(address,uint256)", +"031ee1c8": "contribute(address,bytes32,bytes32,uint8,bytes32,bytes32)", +"031f22e7": "PRICE_STAGE_TWO()", +"031f273c": "getMixerCountByType(bytes32)", +"031f3b1a": "remainderAmount()", +"031f74d4": "bugDiscovered()", +"031f9d7b": "buyCore(address,uint256,uint256)", +"031fce17": "listBackers(uint256)", +"0320fead": "getUsedBySoftware(uint256)", +"03216695": "monthlyWithdrawLimitInWei()", +"0321f836": "namiMultiSigWallet()", +"03228d0f": "changeSendingBanPeriod(uint256)", +"0323aa55": "isValidDeletion(uint8,bytes32,bytes32,string,address,address)", +"0323cc33": "getKnowledgeSinceLastUse(address)", +"0323e576": "INITIAL_CARD_PRICE()", +"0323f64a": "removeSubDivision(uint256)", +"03240775": "getActiveEntryById(bytes32)", +"0324149a": "marketGolds()", +"0324d0d9": "calculatVotePrice()", +"03251a08": "setMin(uint256,uint256)", +"0325be06": "biathlon_transfer(address,address,uint256)", +"03261030": "Time_call()", +"03267c60": "CITY_START_PRICE()", +"0326be45": "Permission()", +"0326c06b": "utfStringLength(string)", +"0327194a": "startPublicsale(uint256,uint256,uint256)", +"03282473": "AcceptedApplication(address,uint256,string)", +"03291893": "issueAndActivateTokenBounty(address,uint256,string,uint256,address,bool,address,uint256,address)", +"03294614": "buyPickaxes(address)", +"032a0af7": "adIds()", +"032a8838": "withdrawOnBehalfOf(address)", +"032aabf0": "has_presale_time_ended()", +"032b0824": "updateLatestRevision(bytes32,bytes32)", +"032b13da": "fourthChainETC()", +"032b3400": "end_Time()", +"032b642d": "changeStartAndEndDate(uint256,uint256)", +"032bc66b": "Locked(uint256)", +"032be08b": "ticketCountMax()", +"032c05aa": "maximalParticipationAmount()", +"032cbc5f": "chainStartBlock()", +"032ccf33": "dayPot()", +"032cfa5c": "comelBabyCoin()", +"032dbae5": "setTiers(uint256,uint256)", +"032e0868": "getAllStaff()", +"032eb997": "CCXTokenERC20(uint256,string,string)", +"032fa796": "SVCoin()", +"032fc13b": "whatRound()", +"03314efa": "shares()", +"0332c6d4": "advertisementPayment()", +"03335d04": "ethGoal()", +"03339af5": "getRobotCountForUser(address)", +"0333d499": "getOwnedPoints(address)", +"0333d4a2": "ZilleriumPresaleToken()", +"03347d75": "findOrderIndexForAddress(uint256,address)", +"0334e725": "FALCON(uint256,uint256)", +"0335d533": "USER_GET_CROWDSALE_TOKEN()", +"0335e18f": "timeComplete()", +"03379e7f": "Initialize(string,string,uint256,uint256)", +"0337aa74": "systemAuctionDuration()", +"0337e379": "releaseTokenOwnership()", +"0338e3a5": "getArrIntField2()", +"03395ba5": "AUCTION_TOKENS()", +"033988a1": "Pollen()", +"0339f300": "revise(uint256,bytes32)", +"033a010b": "adminClaimAirdropMultiple2(address[],uint256)", +"033a38b0": "vehreqexist(uint256,address)", +"033a6cab": "admin_redeem(address)", +"033b8675": "ICOCREED()", +"033ba5d1": "getWillData()", +"033c44c3": "m_totalInvested()", +"033c6ee6": "countHolders()", +"033c8477": "mined()", +"033d62ee": "is2D(bool)", +"033da70b": "setLogicContractAddress(address)", +"033df9cb": "stepOneStartTime()", +"033e7ef4": "registerVoteToken(bytes32,bytes32)", +"033e86d4": "PurchaseLocked()", +"033f7bc9": "testEmergencyStop()", +"0340249e": "HotelloadTokenERC20(uint256,string,string)", +"03402a9a": "ClubTransferContract()", +"03406e76": "getOptionSellOrders(uint256,uint256)", +"034187fd": "setEthToCents(uint256)", +"03427656": "getDefaultSoftResolutionBlocks()", +"03432744": "disputesWithoutJurors()", +"0343d550": "getApprovalCount()", +"0343dfa0": "checkInvariants()", +"03440022": "setAsSeller(address,bool)", +"0344a36f": "draw(address,bytes32,uint256)", +"03460f6c": "airdropAllowed()", +"0346a4ad": "MAXIMAL_PARTICIPATION()", +"034741a8": "patformWithdraw(uint256)", +"03487513": "SIGToken(uint256)", +"034889ff": "unFollow(address)", +"0348946d": "mintedTokensCap()", +"034a7bce": "saosao4()", +"034ac7a3": "ROLE_GRADE_PROVIDER()", +"034cb28e": "addressOf(address,bytes)", +"034cd0b0": "buyTokensGrowthLife()", +"034cf8bc": "transferClub(address,uint256)", +"034d0834": "NoBsCrypto()", +"034d3b0d": "withdrawTipForDeveloper()", +"034de540": "_getEthAmount(uint256)", +"034f55d2": "calculateSum(uint256[])", +"034f9774": "setWhitelistWallet(address)", +"034fcf55": "updCouponConsumed(string,bool)", +"0350bcd9": "toSendLeft()", +"0350d085": "Sign(string,string)", +"035186d6": "increasePrizePool(bytes4)", +"0351947f": "claimFine()", +"0352017b": "getInvestmentRecord(uint256)", +"03520535": "getPI_edit_10()", +"03526ff0": "LFDNetwork()", +"035340f1": "Bitether()", +"03547e53": "ownedBalance(address)", +"0354d6c5": "accountslength()", +"035502f2": "addCategory(string,uint256)", +"03553835": "calculateTokenAmount(uint256,uint256)", +"0355b70a": "getSpaceshipTotalSold()", +"03562dbb": "changeEmissionContractAddress(address)", +"0356948e": "previousstagedata()", +"0356fe3a": "genesisBlockNumber()", +"0357088b": "trancheByIndex(address,uint256)", +"0357371d": "release(address,uint256)", +"03580712": "executeDueToInactivity(bool)", +"03582fc5": "setReferralBonusPercent(uint256)", +"0358395d": "DominionCoin()", +"0358c295": "testInitialBalanceWithNewRGXBonus()", +"0358d965": "addPayout(uint256)", +"035ac814": "lastTimeUpdate()", +"035cf142": "getMinimumDeposit()", +"035d0880": "_requireQuePayment(uint256)", +"035d37a8": "setMinContribAmount(uint256)", +"035e898a": "getStellarInvestor()", +"035e902d": "Set_EmergencyCode(uint256,uint256)", +"035f057d": "multiIncreaseApproval(address[],uint256[])", +"03602e9e": "getPrivAddress()", +"03606b30": "setStopFunding(bool)", +"03611ec7": "Finside()", +"03612cb5": "settle(bytes32[],uint256[],uint256[])", +"03627e70": "countStudent()", +"0362d1f6": "getGamblerBet(address,uint256)", +"03635100": "bizcoin()", +"0363b1e1": "trade(address,uint256,address,address,bool)", +"036478c1": "GlobalAmountCapSoft()", +"0364a254": "getStringValue(bytes3)", +"03652c4e": "ICOStartTime()", +"03656d07": "exchangeMethodIsAllowed(address,bytes4)", +"036648b7": "TokenRateUpdated(uint256)", +"036723a2": "Payout_intern(uint256)", +"0367f96d": "setHardCapValue(uint256)", +"036896ab": "getERC20TokenBalance(address,address)", +"036a131d": "setPI_edit_28(string)", +"036a66eb": "GetProductionPerSecond(address)", +"036ae645": "deleteMessage(uint16)", +"036b3a81": "partnerSupply()", +"036bd387": "totalEthInWeiForFirstIco()", +"036c36eb": "relaySellerRequestCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"036dd086": "createGame(string,string,uint256,uint256,string,string,string,string,bool)", +"036e05b0": "CreatePHX(address,uint256)", +"036e4220": "changeMinAcceptQuorumPct(uint256)", +"036ecf84": "dDownInsSplit()", +"036ee850": "votingDeadline()", +"036f60ec": "setSupplyAdjuster(address)", +"037051eb": "startRound(address)", +"0370c0d9": "_repayLoan(uint256,uint256)", +"0370ca41": "contractStage()", +"0370e65c": "preSaleEndedAt()", +"037101c4": "remainingPresaleCap()", +"03710668": "callContract(address,bytes)", +"0371193b": "getEmployeeAllInformation(uint256)", +"03714af7": "burnApproveReset(address,address)", +"0373e649": "Withdrawal(address,address,uint256,uint256,uint256)", +"03741040": "get_presale_arbits_total()", +"0374fc6f": "getBestOffer(address,address)", +"03750d94": "serverSeed(address,bytes32)", +"03771327": "HardcapGoalReached(uint256,uint256,uint256,uint256)", +"03771f2f": "numOfInflatableTokens()", +"0377ebe8": "itemKindCount()", +"0378f83f": "destroyFashion(uint256,uint16)", +"03792d52": "lastSubTokenBuyerOf(uint256)", +"037933dd": "calcSTQAmount(uint256,uint256)", +"0379565f": "EIP165Implementer()", +"037a417c": "testFunc()", +"037a9d30": "isDataSource()", +"037ae882": "reLoadKey(uint256,uint256)", +"037b5fdc": "burn_balance(address)", +"037c68b2": "disagreeCount()", +"037c983a": "resumeCrowdSale()", +"037c99b0": "setBonus(uint256,uint256)", +"037ca5fc": "HubCrowdsale(uint256,address,address)", +"037ca6c4": "allAgingTimesAdded()", +"037cf465": "has_token_sale_time_ended()", +"037d4ff8": "get_pre_kyc_bonus_denominator()", +"037e2e91": "Insureum()", +"037ed3e2": "executeClaim(address,address,uint256)", +"037ef916": "CaterToken(address,address)", +"037f8f8f": "_getDefaultTranchesForAmount(address,uint256)", +"037f9cf0": "rewardDistributionStarted()", +"0380e2f3": "getHashOfTheSignedDocument()", +"0380fd03": "newExchange()", +"0381c260": "getYearlyUSDSalary(address,address)", +"0381cb3b": "setRowcol(uint256,uint256[2])", +"03824f76": "hasSoldOut()", +"03828729": "coordinatesToAddresses(uint32)", +"0382c254": "CheckHash(uint8,uint8,uint8,uint8,bytes32)", +"038339ab": "publicGetDeposit(uint256)", +"03833bae": "ValidContributionCheck(uint256,bool)", +"0383966b": "testCanFinalizeOnCap()", +"0383a6f0": "CheckLimTransferDay(address)", +"038424c3": "maxEarningsClaimsRounds()", +"038461ea": "getCertifiedStudentsCount()", +"0384899b": "OwnershipChanged(address,address)", +"03850848": "saleAuctionContract()", +"03856d15": "BalanceOnlyOwner()", +"03866aad": "transferCrc(address)", +"0386a016": "closeProposal(uint256)", +"03872547": "setarg_1_input(uint256)", +"0387b0a2": "saleCounter()", +"03880bab": "deal(uint256[2],bytes32,bytes32,uint8)", +"03894922": "allocateTokens()", +"038b117b": "onlyAdminAndNotFinal()", +"038ccee8": "createNew(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"038d71ee": "switchOff()", +"038e666f": "ethereumSaleRate()", +"038e7577": "setConfigUint(bytes32,uint256)", +"038f1845": "returnFunding()", +"038f21a6": "mapToRange(uint16)", +"038f5ed6": "drawDown(uint256)", +"038f8b64": "batchFillOrdersNoThrow(uint256[],bytes[])", +"038fa9cb": "getRomms()", +"03901913": "DLBToken(uint256,string,uint8,string)", +"03905f10": "scoreKnockouts(bytes32,bytes32,bytes12)", +"03906217": "SaddleNotForSale(uint256)", +"0390d190": "YouDealToken()", +"0392d2b4": "isManagerAllowed(address,string)", +"039314b1": "VotingEnded(address,bool)", +"03941cc5": "onwerName()", +"0394b9ce": "getWeaponList()", +"03959bb7": "setDataContract(address)", +"03960631": "raindropAddress()", +"03969758": "SetDurationOfLock(address)", +"0396dcb0": "purchaseByEMONT(uint16,uint256,address)", +"0396ece5": "SetupReserve(address)", +"0396f60a": "Invested(address,uint256,uint256,uint128)", +"03975d1f": "_validateBetOrRefund(uint8)", +"03976b0e": "setBattleProviderAddress(address,address)", +"03980ac4": "prophetize(string,string,string,bytes32,bytes)", +"03985426": "getMode(bytes32)", +"03991aea": "getReleasableFunds()", +"0399247a": "isVotingProxy(uint32,int256,address)", +"0399321e": "set(bytes)", +"03995b2d": "holdingsOf(address)", +"03999795": "rouletteOwner()", +"0399c357": "assignFreeReadings(address,uint8)", +"0399f881": "ART_DECIMALSFACTOR()", +"039a21b8": "tryExecute(address,bytes,uint256)", +"039af9eb": "tiers(uint256)", +"039b267d": "mdtFoundationAddress()", +"039b6c34": "assign(uint16,address,uint256)", +"039ba6be": "getPriceETH()", +"039bd55a": "constrctor()", +"039c84c1": "Add(uint32)", +"039c9a21": "refundTransactionInternal(uint256)", +"039c9d84": "getOpenNum(bytes32)", +"039d0bfa": "setSelfOn()", +"039d8751": "GOX()", +"039de01d": "unregisterScheme(address,address)", +"039e4e2a": "situation_challenge()", +"039e9e00": "acceptOwnershipAPI()", +"039efdeb": "startMilestone()", +"039f0156": "withdrawNxc(address,uint256)", +"039f0e9c": "_createPuppy(uint256,uint256,uint256,uint256,address,uint16,uint16,uint16,uint16)", +"039f6b28": "QuadrantAssets()", +"039fb41c": "get_description_hash()", +"03a0d68f": "expiry_date()", +"03a168e0": "jackpotLastWinner()", +"03a19a4f": "maxDropsPerTx()", +"03a1b87d": "manageInvestors(address,uint256)", +"03a1bdc3": "walletLockBoth(address,uint256)", +"03a250f9": "startWork(uint256)", +"03a3053b": "reserveFundManager()", +"03a47b58": "tyms(uint256)", +"03a503a4": "addHorseIndex(bytes32)", +"03a5c8e7": "tdeActive()", +"03a68d1d": "REBToken()", +"03a6981b": "StateUpdate(uint128,int128,int256,uint256,address,uint128)", +"03a76fed": "createToken(uint256[],address)", +"03a77c7a": "setRegulator(address,address,bool)", +"03a7b41f": "queryPlotExists(uint8,int256[],int256[])", +"03a7bdd7": "testCloseContract(bytes32,bytes32,uint256,uint256,uint64,uint64,bytes32,bytes32,bytes32,uint64)", +"03ab614d": "testTranferOneToken()", +"03ac58d7": "deathData_f8()", +"03ac7215": "setTotalSupply(uint256,bool)", +"03aca792": "pendingList(uint256)", +"03ad4be3": "updatetoken(uint256,string)", +"03adaee6": "applyForCertification(string,string,string,string,address,uint128)", +"03adcbd2": "walkBook(uint16)", +"03addce2": "payout(address[],uint256,address)", +"03ade532": "ctrtMarketPrice()", +"03ae0357": "DevidendsSnapshot(address,uint256)", +"03ae3ded": "aproveLoan(uint256)", +"03ae4c1f": "buyCoke()", +"03ae8508": "createGladiatorBattle(uint256,uint8[2],bool,uint256,uint16)", +"03aeeba6": "_setClientSupply(address,uint256)", +"03af2cda": "createMultiple(uint256[],uint256[],uint256[],uint256[],uint8[],uint256[],address[])", +"03af73d3": "sendCollectedEther(address)", +"03b05c73": "maxIssuedTokensPerIco()", +"03b0a55c": "icoPvtEnded()", +"03b0e428": "_unpackRarityBonusValue(uint256)", +"03b103ea": "Vote(uint256,string,bytes32[])", +"03b25050": "CGCToken()", +"03b4e20c": "removeAddressFromAccountFor(address,address)", +"03b59255": "withdrawForeignTokensTo(address,address,uint256)", +"03b5af0f": "incomingRandomNumber(address,uint8)", +"03b5d494": "takeBet()", +"03b5ddbe": "_usdMinAmountValidate(uint256)", +"03b62931": "proveInConfirmedGblock(bytes,bytes32,bytes32)", +"03b62e10": "lowestDiff()", +"03b6eb88": "note(address,uint256)", +"03b718ee": "getCityBuildings(uint256,bool)", +"03b753dd": "tokenPurchase(address,uint256)", +"03b8a24e": "ritual(uint256)", +"03b918dc": "allow_contributions()", +"03b98c0e": "pauseable()", +"03b9b4f9": "releaseTokens(bytes32,uint256)", +"03b9f0b2": "referrerBonusRate()", +"03ba27f6": "withdrawToWallet()", +"03ba3a88": "notifyContract(address,address,uint256,bytes)", +"03bad56e": "transferERC223(address,uint256,bytes)", +"03bb5d8a": "openGameResultAndNewGame(uint256,string,bytes32)", +"03bbba93": "incentiveDistributionStarted()", +"03bc1e19": "changeOneBet(uint256)", +"03bc6d0d": "amendFee(uint256)", +"03bcebea": "initOneChance(address)", +"03bcf11d": "abortSale()", +"03bcf514": "finishedCrowdsourcingDisputeBond()", +"03bda14e": "raiseMaxNumBets(uint256)", +"03bdecf5": "right69(uint256)", +"03bec188": "ChangeMinAmount(uint256,uint256)", +"03bf4fb7": "setTradersContract(address)", +"03bf8e70": "birthKitty()", +"03bfee9e": "_getBidId()", +"03c0bfb5": "getOwnUserState()", +"03c13148": "setReceiver1(address)", +"03c175ff": "isRestrictedAddress(address)", +"03c1d1df": "collectERC20(address,uint256)", +"03c2d5b6": "nextGameDeveloperMiningPower()", +"03c327f0": "changingMilestones()", +"03c401e3": "ADDR_TKG_VC()", +"03c411d3": "MOMToken()", +"03c41c04": "NewUpgradedAmount(uint256,uint256,address)", +"03c45305": "foundersSupply()", +"03c49580": "priceOfElement(uint256)", +"03c4d93a": "payWithGold(uint256)", +"03c5b1dc": "setPeriod(uint256,uint256)", +"03c5f26a": "PublicCheckGameStart()", +"03c5faf4": "s12(bytes1)", +"03c63869": "resumePlayer(address)", +"03c6c8f9": "TheExcelToken()", +"03c7bce1": "_addMinter(address)", +"03c7da39": "mintMarketingTokens()", +"03c83302": "distributeDividends()", +"03c94ca6": "tokenSoftCapReached()", +"03ca0a95": "performSetTokenControlInfo()", +"03ca0eed": "requireCustomerId()", +"03ca0f6c": "advisors(address)", +"03ca30e0": "changePreMine(address)", +"03ca558a": "read_i8()", +"03ca71d6": "setSecurityCheck(string)", +"03ca7bcc": "debug_last_approved()", +"03cba01e": "bonusEndTime250()", +"03cbcf57": "getBetAmountAtLayer(uint16)", +"03cc1e32": "addFundingRound(uint256,uint256,uint256,address[])", +"03cc5597": "wrestle()", +"03cc5e4d": "setTechnicalAdmin(address)", +"03cc7b85": "num_tokens_auctioned()", +"03cc8efb": "BethingWorldCup()", +"03cd3e47": "transferRecovery(address,address,uint256)", +"03cddb2c": "capitalAllocated()", +"03ce6c55": "roundUp(uint256,uint256)", +"03ce9c00": "AcceptsTokens(address)", +"03cf0678": "bigBang()", +"03cf4fd6": "expire(uint256,uint256,uint8,bytes32,bytes32,bytes32)", +"03cf678b": "vitToken()", +"03cfe12d": "benefactorsKeys()", +"03d08f3b": "nextLotteryTTWTokenId4()", +"03d0b7d2": "minimumFeePlusDividends()", +"03d0cecd": "getLx()", +"03d2107f": "getSender(bytes32)", +"03d22885": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8,uint256)", +"03d231b5": "signerFlag(address)", +"03d258c4": "set_prices(uint256)", +"03d285fd": "nameok(string)", +"03d2e963": "zint_now()", +"03d37d78": "showPoolNumber(address)", +"03d38296": "indexSuperInvestor(uint256)", +"03d3a6b7": "shutForETH(uint256)", +"03d41eb6": "reserveSupply()", +"03d499ef": "totalEthereumICOReceived()", +"03d4e98a": "getProposalVote(uint256,uint256,uint256)", +"03d50703": "challengeExit(bytes32[],bytes32[],uint256,uint256)", +"03d51a0c": "transfer_ether_to_owner(uint256)", +"03d5aa0c": "PigChain()", +"03d5f483": "founderTokenVesting()", +"03d699da": "YggdrashCrowd(address,address,address,uint256,uint256,uint256,uint256)", +"03d6b6b4": "EpigenCareCrowdsale(uint256,uint256,uint256,address,address,address)", +"03d6d7b6": "getCallMaxCost(bytes32)", +"03d7244f": "dice_game(uint256)", +"03d756cb": "ethealToken()", +"03d75937": "setUIntValue(string,uint256)", +"03d76547": "addressFin()", +"03d83c4d": "stopTge()", +"03d9d253": "unlock(uint256,address,address,bytes)", +"03da04d7": "BRN()", +"03da8902": "transfearDBOwner(address)", +"03dc0532": "getLableRecords(bytes32)", +"03dc6340": "AdminTokenSent(address,uint256)", +"03dcead2": "directDebitOf(address,address)", +"03dcf6bc": "truToken()", +"03dd5a18": "testSimpleArray()", +"03dd88f8": "getAssTotal()", +"03ddc104": "ownerClaimOverride(uint256)", +"03ddcae9": "checkTradeSignature(bytes32,uint256[],bytes32[])", +"03dec463": "getRentOwed(address)", +"03defdc5": "jobHunterWithdrawal()", +"03df1550": "ECR20HoneycombToken()", +"03df6106": "setNewReleasePeriod(address,uint256,uint256,uint256)", +"03e07b2f": "getMinRefEthPurchase()", +"03e1b3c6": "sellAllAmountBuyEth(address,address,uint256,address,uint256)", +"03e20503": "localManualEntry(bytes32,bytes32,uint256,uint256,address)", +"03e28366": "playerNum()", +"03e2b9f5": "syncDate()", +"03e337d1": "SEPCToken()", +"03e39113": "BeggarToken()", +"03e3b1ed": "applicationApproved(address,address)", +"03e3f677": "setICOStart(uint256)", +"03e3fa51": "editScores(uint256[],uint256[])", +"03e4d9f5": "getDayIndex(uint256)", +"03e55f1c": "lockEscrow(bytes32,address,uint256)", +"03e5affd": "add(string,int256,int256)", +"03e6c117": "getIcoAddrListByIcoRuleId(uint256,uint256)", +"03e7b4e9": "getEmission(uint256)", +"03e83b6a": "MyToken(uint256,string,string)", +"03e864fa": "TestableMarketContractOraclize(string,address,address,uint256[5],string,string)", +"03e8837c": "getUserCount(address)", +"03e9287a": "Tacoin(uint256,string,string)", +"03e93b2e": "changeStarbitWallet(address)", +"03e9598c": "updateClientVersion(bytes32)", +"03e96fe3": "getAllTickets()", +"03e9e609": "getRecord(uint256)", +"03ec1bbe": "tokenIssuedTotal()", +"03ed9d21": "setMaxContribution(uint256)", +"03edae57": "withdrawFounderFunds(uint256)", +"03edf914": "placeBet(uint256,uint8)", +"03ee8f08": "getCoeff(uint16)", +"03eea024": "issueTreasury(address,address)", +"03eeb40e": "AngelsvsRedSox419()", +"03ef03b4": "buyBulkMidGradeCar(address,uint256[],address)", +"03ef2a2c": "tryExecuteProposal(uint256,bytes)", +"03efb5c4": "book(address,uint256)", +"03f0cc64": "affiliateCodes(address)", +"03f10bff": "IDMONEY()", +"03f11878": "casino(uint256,uint256)", +"03f14886": "add_new_hash(string)", +"03f14be9": "updateEmployeeWallet(address,address,address)", +"03f14e96": "currentAirdrop()", +"03f166de": "calculateTransferValue(uint256,uint256)", +"03f17336": "BOPs(uint256)", +"03f187ea": "registerFee()", +"03f21bda": "privateOfferingTokens()", +"03f3b07f": "setUserScore(address,uint32)", +"03f3cea1": "requiresHardCap()", +"03f3e275": "getRatioList()", +"03f3e7c8": "setICOWeek4Bonus(uint256)", +"03f4864d": "XXXXXXXX05()", +"03f499b8": "refundState()", +"03f6477d": "setBonusSetter(address,address)", +"03f67e1b": "changelp2(address)", +"03f73f08": "start_ICO2(uint256)", +"03f744b0": "JessieEducationToken()", +"03f7d4ff": "BitpaintingStorage(uint8)", +"03f8008c": "getUserDAOsCount(address)", +"03f979c8": "saleEndTokenCreationRate()", +"03f9b456": "LockupTokensWithdrawn()", +"03f9c793": "invest(address)", +"03fad66e": "settokenCap(uint256)", +"03fb3f63": "currentMigrationSource()", +"03fba444": "_receiveBuyNextRank(address)", +"03fce7ef": "approveEscrow(uint256)", +"03fd8c65": "withdrawBalanceHashing(address,address,uint256)", +"03ff20a1": "crowdfundEndTime()", +"03ff5e73": "stopTime()", +"03ff8590": "random2(uint256,uint256)", +"03ff90f6": "minApproval()", +"03ffae3b": "FlightDelayDatabase(address)", +"040177b7": "previousDungeonId()", +"0401d897": "setVestingCliffDateTime(uint256)", +"04021ba8": "_increaseBalance(address,uint256)", +"04029f23": "_setBugFixVersion(string,uint32,bytes32,uint32)", +"040425d1": "protectedSupply()", +"040502e4": "EmmiumCoin()", +"04053d21": "checkCourse(uint256)", +"0405440c": "secureMode()", +"040622a9": "UNITPaymentGatewayList()", +"040677f1": "sentFirst()", +"0406870c": "SupplyManagementChainSolutions()", +"04072322": "GetEventData()", +"0407dc78": "medalBalanceOf(address)", +"04089c7d": "ALTnextCoin()", +"040a772e": "getUserDividends(address)", +"040c014b": "_changeName(string)", +"040c3a53": "maxRacers()", +"040cf020": "withdraw(bytes32,uint256)", +"040d54ce": "addFile(bytes32,string,uint256,string,string)", +"040d5e82": "partialFlip(bytes32)", +"040d70bd": "GetSeries0()", +"040da8f4": "jackpotBalance()", +"040e33f0": "SHRToken()", +"040e55f5": "getTransferCount()", +"040ea2f4": "ownerSetPriviledgedAddress(address)", +"040f9a5e": "transferRemainingTokens(address)", +"040fa051": "isPendingRegistration(address)", +"04106c8b": "startGeneration()", +"0410ec85": "randomReward(uint256[])", +"0410fac7": "adminRemoveTrustedCurrencyContract(address)", +"04115187": "initTime()", +"0411bca8": "getChallengeAnswerResult(uint256)", +"041257ef": "setWhitelistControllerAddress(address)", +"04126ce5": "getHashSubmissionEnd()", +"04143865": "dec_multiple()", +"04148f7e": "createGame(uint256,uint256,string,address)", +"04150694": "airdropBSupply()", +"04153ac9": "inflateActiveSupply(uint256)", +"04155727": "dcntrpls(uint256,uint256,uint256,uint256,uint256,bool)", +"04157752": "withdrawRed_(uint256,uint256)", +"0415bd13": "create(uint256,uint256,int256,address)", +"04165443": "gatherAllOldBalanceOf(address[])", +"0416c10c": "_getBytes(address,bytes32)", +"04186c57": "getPermissionsProvider()", +"0418945a": "addStablecoin(address)", +"0418ac09": "unFreezeTransfer()", +"04194636": "bulkTokenSend(address[],uint256[])", +"04198675": "setHitPrice(uint256)", +"0419c814": "isExistedOwner(address)", +"0419eca5": "createChild(uint256)", +"041abd9f": "timestampEnd()", +"041ae880": "funder()", +"041b1406": "checkPoDs(address[])", +"041b8c3e": "group(address,uint256)", +"041c3ade": "punkIndexToAddress()", +"041d0c0b": "MyTokenLoad(uint256,string,uint8,string,address)", +"041d15c9": "getPurchaseTimestamp(uint32)", +"041d40c1": "buyOrders(bytes32)", +"041dad49": "incrementpostId()", +"041dd0f9": "ValueToken()", +"041dd3f6": "testControlCreateWithParentsParentNotInUse()", +"041e3929": "getInvitationCreatedOn(address,uint256)", +"041e6b8b": "rejectUpgrades()", +"041f173f": "blacklist(address[])", +"041fa8aa": "times9()", +"041fe13d": "onEtherandomSeed(bytes32,bytes32)", +"04213a59": "setServiceDuration(uint256)", +"0421a94c": "sendSpecialTasterPackage(address,uint256)", +"042228db": "adminUpdateArrayInvite(uint256,uint256,address,address)", +"0422ddf3": "isGamePaused()", +"04239743": "lastGrantedIndex()", +"0424b6fe": "ContentChanged(bytes32,bytes32)", +"0424d979": "removeDepositCreator(address)", +"0425b5e9": "initialLockAddress(address)", +"0425c357": "submitVote(uint256,bytes32,bytes)", +"0425c4bf": "updateProduct(address,string,string,uint256,string,bool)", +"0425ccba": "DoubleETH()", +"0425e6ff": "SEXNTestToken()", +"04267892": "koth()", +"04269bc2": "ICO_SUPPLY()", +"0426c697": "changePayoutAddress(address)", +"0426dcef": "unlockBalance(address,uint256)", +"04275375": "MCToken()", +"0428c6aa": "earlyBirds(uint256)", +"0428ca27": "WalletAddressUpdated(address)", +"04293236": "m_owner80()", +"0429b880": "confirmationPeriod()", +"0429b9ca": "totalEthAmount()", +"042abdf8": "PRE_ICO_MIN_CAP()", +"042ae62b": "killAborted()", +"042b5fed": "placeBet(bytes32)", +"042c71f5": "DevsmartCoinFour()", +"042cb150": "batchSend(uint256,address[])", +"042d65ab": "getTokenAwarded()", +"042e58c8": "receiveResults(string,uint256)", +"042e9a43": "propose(bytes32,string)", +"042f3b34": "DesafioStone()", +"04304b55": "getUSDEth()", +"04306d69": "MOOSToken()", +"0430e405": "gameStopped()", +"043106c0": "deleteAddressValue(bytes32)", +"043122bb": "minimumParticipation()", +"04318794": "giveTimeToDemoc(bytes32,uint256,bytes32)", +"0431dd86": "TokenNedCoin(uint256,string,uint8,string)", +"0432ff56": "START_WEEK_4()", +"043331ee": "addOnCount()", +"04336615": "hashLoop(uint256,bytes32)", +"04338def": "maxAmountPreICO()", +"04339140": "setCloneFeePercentage(uint256)", +"04339582": "buyAndTransfer(uint256,address,address,bytes,uint8)", +"04343722": "addUsers(address)", +"0434a44d": "codeSize()", +"0434e5a6": "changeWalletForETH(address)", +"0434fe0b": "heal()", +"043531b1": "setFeeDivisor(uint256)", +"0435a745": "stat()", +"04362c2d": "getEsgoTXCount()", +"043728b4": "initBet(bool)", +"043753ba": "makeDecision(uint256,bool)", +"043799e3": "inquire_domain_id(uint16,uint16)", +"0438ebce": "getPlayerBetForPlayRound(address,uint256)", +"043996c2": "setUseAmountBasedBonus(bool)", +"0439f7d4": "getProviderSupply(uint256,uint256,uint256)", +"043aea8b": "CrypthubtTokenTest()", +"043b743f": "investor_getShortInfo(address)", +"043bb5e7": "getIdentities(address[])", +"043c8816": "INM()", +"043cf01a": "addCourse(string,uint256,uint256,uint256,string)", +"043cf343": "CreditIDENTITY(address)", +"043d0258": "changePriceLimits(uint256,uint256)", +"043d5f1a": "ENCSToken(uint256,string,uint8,string)", +"043d9aaa": "verifiersPerShard()", +"043da739": "getNextBid()", +"043eabd0": "RUVI()", +"0440187e": "hostingProfitAddress()", +"04403b30": "TokenSaleSucceed()", +"0440c8e4": "_unpackRarityValue(uint256)", +"044166ec": "PollManagedFund(address,address,address,address,address,address,address,address,address[])", +"044215c6": "token(uint256)", +"044337ca": "setPortfolio(address)", +"04433bbc": "getContractAddress(string)", +"044431f0": "setRefundEnabled(bool)", +"0444c5db": "SSPRegistryReplaced(address,address)", +"0445154c": "PRIVATESALE_USD_PER_MSENC()", +"044553ae": "configureBoard(address)", +"04455e95": "testIsList(bytes)", +"04461f4d": "XaurumAmountMelted()", +"0446e187": "buyDonation(address,uint8)", +"04474181": "JixoCoin(uint256,string,uint8,string)", +"0448e936": "setSite(string)", +"0448f79f": "addOptionChain(uint256,string,uint256,uint256,bytes,address,int256[])", +"0449aa40": "allowedToBeSold()", +"044a3038": "_changeResolverAllowances(string,address[],uint256[])", +"044a5f97": "mgmtDistribute()", +"044aed7c": "removeEmployee(address,uint256)", +"044b1b02": "addProblem(string,string,string,string,string)", +"044bf6c2": "getSpinnerData(address,uint256)", +"044c1d4d": "clientVersion()", +"044c9366": "privateCrowdsale(address,uint256)", +"044c96e4": "startGame(string,string)", +"044ce308": "refundBuyer(uint256,uint256)", +"044d0b06": "oraclize_query(string,string[2])", +"044ec699": "get_mail(uint256)", +"044f19bd": "InfiniteCorridor()", +"044f53ee": "OPC(string,string,address)", +"044f9ac8": "findThroneCalled(bytes)", +"04509918": "scheduleCall(address)", +"04514185": "ShortBlog(string)", +"04517225": "transferlock()", +"04520116": "centsPerEther()", +"045236b4": "getChainyData(string)", +"0452396c": "subtrInvestorBalance(address,uint256)", +"04532035": "settleEth(address,uint32,uint32)", +"0453a7d2": "computeBonus()", +"0453e3b1": "ITIX()", +"04549d6f": "presaleStarted()", +"04550e70": "MyTestToken2()", +"04554443": "lockDuration()", +"045585a4": "priceList(uint256)", +"0456860a": "acceptAtCommunity(address,uint256)", +"04571211": "setTokenReward(address,address,uint256)", +"04578f90": "JTC(uint256,string,string)", +"0457d76b": "Mesa(bytes32[],uint256,address)", +"045820b3": "Player()", +"045894ab": "getCreate()", +"0458996a": "CBTSToken()", +"04590a28": "EtherWithdrawn(uint256)", +"04599012": "balanceToken(address)", +"045a1796": "upgraderSet()", +"045aceb9": "useResolver(string)", +"045b1a0c": "isBreakingInvestorCap(address,uint256)", +"045b7dca": "mintSupply()", +"045b9c72": "START_TIME_PRESALE()", +"045c123a": "sponsorDAI(uint256,uint256)", +"045c6ce0": "voteForProposal(uint256)", +"045cc8ec": "_createZodiacWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"045ccf7b": "byte64ToString(bytes1[64])", +"045d0389": "exchange(address,uint256)", +"045d2ad9": "upgrades()", +"045d4503": "TeamDeleted(uint256,uint256[])", +"045d465f": "setDataFactory(address)", +"045d46c2": "getBalances(address,address)", +"045e240f": "getAvailableTokensToWithdraw()", +"045e7dd7": "ContractEdited(string,address)", +"045ea88a": "fishySalmonToken()", +"045eb3b5": "expLimited(int128,int256,int256)", +"045ec563": "rndInc_()", +"045eea7d": "changeSelfName(string)", +"045f2593": "getRoot2(uint256)", +"045f7850": "airDrop(address,uint256)", +"045f8aad": "CONUNToken(uint256,string,uint8,string)", +"045f91ea": "getCurrentWallet()", +"045f955b": "buyPets(uint256,uint256)", +"045ff49a": "TIER2END()", +"0460b206": "Bxcoin()", +"046111e9": "addVip(bytes32,string)", +"04612d20": "minionAdd(address)", +"0461ac58": "dteamVaultAddr3()", +"04638e1a": "getBalanceOf(address,address,address)", +"0463cd73": "getSuperManager()", +"0463e4af": "releaseDividendsRights_(address,uint256)", +"0464f4b2": "InitialPriceEnable()", +"0464f8d0": "getCatsCount()", +"04651a1e": "firstRoundICOEnd()", +"0465832e": "modifyTransFee(uint256)", +"04658ad8": "NonIssueDeposits()", +"04659819": "capUsd()", +"0465a76d": "airdrop_cnt()", +"0466450e": "getUserByAddress(address,address)", +"046672cc": "batchTransfer(bytes32[],uint64)", +"0466c7ab": "executeComputation()", +"04670c9d": "nextStage(uint256,uint256)", +"04673368": "getCurrentPrice(uint256,uint256)", +"04676af4": "getCompte_7()", +"0467c3ff": "ThirdBonus()", +"04684ba3": "convertTokens(address,address,uint256,uint256)", +"0469756a": "MintAuthority(int256,address)", +"04699a72": "tipbot()", +"0469d644": "storeSecretVote(bytes32,uint256)", +"046a3d91": "distributePrizze(uint256)", +"046ae3c2": "YourPyramid()", +"046c472f": "IOU()", +"046c82e4": "GraceFund()", +"046ce030": "isFactoryApproved(address)", +"046d30c7": "_random(uint256)", +"046d5c53": "setMintAmountApproval(address,address,uint256)", +"046dc166": "setSignerAddress(address)", +"046e85f9": "getLastPendingTransaction()", +"046f7da2": "resume()", +"04706fdf": "giveContributionsBackProfitBugged()", +"047087cc": "getTotalTokenSupply()", +"04710a23": "toSgaAmount(uint256)", +"04719030": "manualSendTokens(address,uint256)", +"04729a8d": "tokensToEthereumAtSupply_(uint256,uint256)", +"0472a3bf": "doCrowdsaleMinting(address,uint256,uint256)", +"0472f549": "ran()", +"0472f72c": "_allocation(address,uint256)", +"0473e09c": "setConfigUint(bytes,uint256)", +"047408aa": "getAngelByIndex(address,uint256)", +"0474b484": "AllyICO()", +"0474d4a4": "isInitialAllocated()", +"04751333": "getRevForecast()", +"047564b7": "revokeValidator(address)", +"0477d647": "setSalary(uint256,uint256,uint256,uint256)", +"04780570": "ERC223Token_STB()", +"04787d83": "winBidDekla(address,address,uint256,uint256)", +"047956cf": "assign(address,uint256,bool)", +"0479fcd0": "setPopNameOriginal(uint256,string)", +"047a7ef1": "transferrable()", +"047a8dcb": "JetwingToken(address)", +"047ba641": "LowerStartingPrice(uint256)", +"047c738e": "wdivfloor(uint128,uint128)", +"047cfed9": "hasOwnership(uint256)", +"047d6649": "getUpdateByID(uint256)", +"047da93f": "testInvariantOverflow()", +"047de1f3": "drawerFee()", +"047e2b27": "setDataStorage(address)", +"047f9651": "make(uint256,uint256[4])", +"047f993d": "_vote(bytes32,uint8)", +"047fc9aa": "supply()", +"047fe8b3": "getUnsoldTokensBack()", +"047febbe": "admin_renewLockedAddress(address,address,uint256)", +"04803c2a": "addSales(uint16,uint128,uint16,uint16,uint64,uint64,uint16,uint8)", +"04804ee8": "sell(string,uint256,uint256)", +"0480c975": "setUnicornContract(address)", +"0480e58b": "maximumSupply()", +"04812aaf": "moveAccountData(address[],bytes32[],uint256[])", +"0481559b": "getLockDataFromMerkleTree(bytes,uint256)", +"04819507": "ICO_START4()", +"0481cb1b": "tokensAlreadyClaimed(bytes32,address)", +"048259e6": "UTCToken()", +"0482cfa8": "investorDividends(address)", +"04830ddd": "getVotersAt(uint256,uint256,uint256)", +"0483a7f6": "lockedBalances(address)", +"0484c7cf": "AppSupply(address,uint256)", +"0485066e": "addReading(uint8,uint256,uint256)", +"04858fef": "StartQuiz(string,string)", +"04859ceb": "afterTime(uint256)", +"048641be": "updateUserInvestBalance()", +"0486529b": "boardMemberApply(uint256)", +"04865327": "PlayerBet(address,uint256,uint256)", +"04869083": "auctionCreated(uint256,address,uint128,uint128,uint64)", +"0487b7e9": "Unity3d()", +"0487eed2": "restrictionsAllow(uint64,uint8)", +"0488781a": "teamOwnerOfPlayer(uint256)", +"0488dbfb": "getConfirmRefund(address,address,uint256)", +"048911a6": "createRandomZombie_ZOB_smallpack()", +"048926ac": "updateMaxPhase1(uint256)", +"04892c9f": "BASE_MIN_CONTRIBUTION()", +"048957d8": "sideBetPayToken(bytes32)", +"048986ae": "activityCore()", +"0489882e": "totalAdminsMapping()", +"0489fa70": "removePermittedContracts(address[])", +"048a5fed": "getSelfBalance()", +"048ae1bb": "addAssetPartOwner(bytes32,address)", +"048b0bcc": "addCustomerNReqACC(address,address,address)", +"048b3918": "messageNumber()", +"048bbc72": "CIR_SUPPLY()", +"048c35ca": "debug_is_recipient()", +"048ca698": "trackTotalVolume(address,uint256,uint256)", +"048cb8e0": "CarlosMatos()", +"048cc4a2": "BurnToken(address,address,uint256)", +"048cf8ed": "serviceDecreaseBalance(address,uint256)", +"048de56d": "setName(bytes2)", +"048dec38": "changeMarketingAddress(address)", +"048e2e94": "getAccountSize(address,uint256)", +"048e8c3a": "FidgetSpinner(uint256,uint256)", +"048e927b": "Checked(string,bool,uint256,bool,uint256)", +"048eb854": "_sortTopQuestions()", +"048f06f2": "setRoot(uint256,bytes32)", +"04903592": "withdrawAirdropTokens()", +"04904105": "setMiniPoolEdit_9(string)", +"0490540b": "Parameterizer(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"0490c71c": "unclaimedDividends(address)", +"0491eda0": "isCertainProduct(uint256,address,uint256,uint256,uint256,bool)", +"0492600e": "Issue(address,address,uint256,string)", +"04937cf9": "DoremiXToken()", +"0494630f": "oraclize_query(uint256,string,string[4],uint256)", +"04950f45": "KWHForGas()", +"049540c5": "structurePreIco(uint256)", +"0495cad9": "motionPasses(uint256)", +"0496e9ae": "triggerRequireError()", +"0496ee77": "checkPosition(address,uint256)", +"049766a8": "CleariumToken()", +"049878f3": "join(uint256)", +"04990162": "newChain(address[])", +"04994883": "ustAddress()", +"049948b0": "getMyGrapes()", +"0499ed13": "TOKEN_PRICE_WEI()", +"049a2dd1": "claimPartnerTokens()", +"049abf89": "queryUserContractCount(address)", +"049ae734": "scheduleCall(address,bytes4,uint256,uint256,uint8)", +"049b7852": "getElevations()", +"049c9bf2": "addExchangeAccount(address)", +"049cac16": "tokensUnvested()", +"049cc8b1": "soldForSecond()", +"049e63ee": "defaultClaimPercentage()", +"049eb289": "submitBuyOrder(bytes32,uint256,uint256)", +"049efcc7": "startReleasing()", +"049fb520": "countTickets()", +"04a077a4": "MyPasswordHint()", +"04a0c67e": "EagorNetwork()", +"04a1c63c": "token_a_amount()", +"04a1eb6b": "lastBlock_f16Hash_uint256()", +"04a23be0": "isAddressInWhiteList(string,address)", +"04a2b2c2": "testOwnerCanBreach()", +"04a2eaa5": "getTimeBonusPercent(uint256)", +"04a3693c": "applyFee(address,uint256,uint256)", +"04a373cc": "s20(bytes1)", +"04a3c21f": "maybeNewRound()", +"04a3ddd2": "_addToValueHeld(address,uint256)", +"04a48c27": "setActivityCoreAddress(address,address)", +"04a4a0d4": "getPriceMoney()", +"04a4a0ec": "TOTAL_XB_TOKEN_FOR_PRE_SALE()", +"04a4b776": "updateOpeningTime(uint256)", +"04a5288a": "stepcode()", +"04a6021d": "getByTypeNameVersion(string,string,string)", +"04a7137e": "controlledMint(address,uint256)", +"04a782ee": "addRecordByAdmin(bytes32,address,address,string,string)", +"04a79e9a": "spendDeposit(address,address,uint256)", +"04a7ca0e": "BonusUpdated(uint256)", +"04a7ff18": "totalNum()", +"04a82adf": "privateReservedUFT()", +"04a84938": "avaliableSupply()", +"04ac3b80": "addReceivedTrade(address,bytes32)", +"04ac75b0": "withdrawMulti(uint256,address[])", +"04aca4bc": "getClout(address)", +"04af7a20": "setDividendAndPayOut(uint32,uint32,uint32)", +"04afd2ce": "Multisended(uint256,address)", +"04b02ed6": "times_()", +"04b07a5e": "removeUpdater(address)", +"04b1142c": "getGuessCount(address)", +"04b1af75": "buy20()", +"04b1c6f0": "ICO_CAP()", +"04b2bf99": "stateControl()", +"04b370ab": "icoOver4()", +"04b43c5a": "withdrawZOB(uint256)", +"04b47e21": "isSignedWithEnc(uint16)", +"04b4e7e5": "awardsReservations()", +"04b5723d": "disableNewStakes()", +"04b5b5b6": "pointToToken(uint256,address,uint256)", +"04b64260": "tmpShuffleSeed(uint256,uint256)", +"04b65e74": "checkSTAGE()", +"04b69fa0": "jockeyNotForSale(uint256)", +"04b6ae61": "failedVotingCount()", +"04b6d39e": "_transferCroupier(address)", +"04b70576": "resetAgent(address)", +"04b7dcde": "hashData(string)", +"04b8ca98": "MAYTotalSupply()", +"04b92b7d": "overdraftAllocation()", +"04b94ec5": "MyToken30(uint256,string,string)", +"04badade": "get_hub_addr()", +"04bb1e3d": "updateActive(uint256,bool)", +"04bb754c": "TradeFinancing()", +"04bb89d5": "saveNick(string)", +"04bbc255": "isPricingStrategy()", +"04bd05d5": "getPeriodicalPnL()", +"04bd85f0": "getCapTab(uint256)", +"04be2f50": "isInvalid()", +"04bf1ee2": "JtoA(uint256[3])", +"04bf2a7f": "getScriptExecutor(bytes)", +"04c07569": "getBlock(uint256)", +"04c08fbd": "borrowFunds(uint256)", +"04c181f5": "beneficiars(address)", +"04c2a0ae": "DonateToLosers()", +"04c2a4a0": "computeKeyConstant(uint256)", +"04c313f4": "setAirdropGameInterface(address)", +"04c402f4": "set(int256,int256)", +"04c49f2c": "setFeePeriodDuration(uint256)", +"04c64e25": "revealMyVote(address,bytes32,bytes32,uint256,uint256)", +"04c6a9c5": "startIcoForOptionsHolders()", +"04c6ff7c": "devTeamTokenAddress()", +"04c76899": "sellerApprove(uint256,bytes)", +"04c76af0": "withdrawAdmin()", +"04c80c3c": "TOKEN_HODL_6M()", +"04c8384d": "trivialThreshold()", +"04c97ada": "setThirdRoundPricing(uint256)", +"04c98a2a": "validatePurchase()", +"04c98b2b": "startPresale()", +"04ca2775": "saleActive(uint256)", +"04caa6dd": "pauseReason()", +"04cb17ad": "returnPeriodExpired()", +"04cbc791": "getSellerOption()", +"04cc734b": "VoxelTransferred(address,uint8,uint8,uint8)", +"04ccf60e": "WrapperLockEth(string,string,uint256,address)", +"04cd1819": "disableVoting()", +"04cd5294": "getRefundAmount(uint256)", +"04ce1a61": "tokensWithdrawal(address,uint256)", +"04cf447d": "estimatesellvalue(uint256)", +"04d092c7": "claimPoints()", +"04d0a647": "getWallet(address)", +"04d0ac48": "tokensPending()", +"04d0c98a": "distribute10MTI(address[])", +"04d0fefe": "HoneyPot()", +"04d10f1c": "isValidChainyJson(string)", +"04d1290b": "getAlamat()", +"04d16482": "strConcat4(string,string,string,string)", +"04d1809c": "validateJoinSplit()", +"04d1b108": "_computeOwnerCut(uint128)", +"04d2cdbf": "setAcceptable(address)", +"04d2dec6": "getWalletAddress()", +"04d332a2": "setRefereeRewards(uint256[])", +"04d41474": "totalNormalContributorIdsAllocated()", +"04d58b3f": "MrwToken()", +"04d5c2c5": "toEGR(uint256)", +"04d6878f": "closeMicroWallet(uint256)", +"04d68a2b": "transferMoreThanBalanceTest(address)", +"04d69a11": "SoldToken(address,uint256,bytes32)", +"04d6db05": "startSale(address,uint256,uint256,uint256,uint256)", +"04d742dc": "startSale(uint256,uint256,uint256)", +"04d84108": "SWAP()", +"04d88bce": "DDJETH()", +"04d91c6a": "testFail()", +"04dbd2d3": "LogInvestorProfit(address,uint256)", +"04dcad85": "testDifferentTokenPrice()", +"04dcc44a": "getTip(address,bytes32)", +"04dd2dea": "getCardDivShare(uint256)", +"04dd69fa": "getGenerationIdForCall(address)", +"04de40ea": "AnnoToken()", +"04de76cf": "VisualChain()", +"04deaeb5": "retrieveEth(uint256,address)", +"04dee65f": "contractBatchTransfer(address[],uint256[])", +"04def102": "getRemainReleaseTimeOfStage(address,uint256)", +"04df0a1d": "kudosByMember()", +"04df48ef": "ICO_LEVEL_4()", +"04dfe14e": "LandmarkCoinTestF()", +"04e15de5": "issues(uint256)", +"04e1805a": "setFreezeForAngel(uint256,address,uint256)", +"04e1826c": "getNumTransactions(address,address,uint256)", +"04e262b8": "wlStartBlock()", +"04e5a069": "registerUBetCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", +"04e639b6": "fetchSlot(uint256,uint256)", +"04e6a9a1": "teamLock(address,uint256)", +"04e6adf8": "serHoldTime(address,address,uint256)", +"04e75fda": "Contribution(uint256,address)", +"04e78a30": "stakingMintAmount()", +"04e7dfcf": "getAssetRaised(address)", +"04e80e90": "getMasterCopy()", +"04e86e15": "calctime(uint256)", +"04e88f2d": "SayaToken(uint256)", +"04e98568": "withdrawBalanceCut(uint256)", +"04ea23bf": "FLUXBlockToken()", +"04ea4a57": "getDisputedPayoutDistributionHash()", +"04eab1e1": "gvpe_per_Keos()", +"04eb7d83": "setFirstPeriodEndDate(uint256)", +"04ebb1d9": "commonWithdraw(address,address,uint256,uint256)", +"04ebfc52": "userCount_()", +"04ec70a7": "determineAttackingOrDefendingOutcomeForAttributes(uint256,uint256,uint256,uint256,uint256)", +"04ecdaac": "rateSecondRound()", +"04ed02f6": "getCards(uint256)", +"04ed3f6a": "canStartSale2()", +"04ed6fbc": "minCDTToParticipate()", +"04edad4d": "YouLose(address,uint256)", +"04ee54d2": "revokeInitiator(address)", +"04ee9748": "storeWinnerShare()", +"04ef1353": "setTokenWithoutFee(address,bool)", +"04ef161b": "findSeed(address)", +"04efa227": "feeMakeExporter()", +"04f016c9": "transferMulti(address[],uint256)", +"04f03b6a": "getSomeVar()", +"04f041b5": "BtcEthRateChange(uint256)", +"04f05f91": "joltToken()", +"04f08b55": "getPolicy(uint8)", +"04f08eec": "PayEth(address,uint256)", +"04f0aa4e": "setServiceAgent(address)", +"04f13e40": "HashLand()", +"04f14090": "setBlacklist(address,bool,string)", +"04f17b11": "PriceChanged(uint256,address)", +"04f182f4": "icoPhase1End()", +"04f1e4e2": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", +"04f24897": "PlanetagroExchange(address)", +"04f30b37": "getFutureTransIdxByAddress(address)", +"04f31a47": "confirmICOSpec()", +"04f342f6": "_addToAging(address,address,uint256,uint256)", +"04f3bcec": "resolver()", +"04f49a3a": "addressStorage(bytes32)", +"04f4d425": "toEthFunction()", +"04f4f7ab": "KYRO()", +"04f5222c": "setEthMinContribution(uint256)", +"04f53231": "SendEth()", +"04f65288": "AK47Coin()", +"04f65590": "preSaleWeiRaised()", +"04f68d49": "dataSourceGetFinals()", +"04f6aa30": "forwardETHtoSTCcontract(uint256)", +"04f74b59": "make(address[],uint256[],address,bool)", +"04f7a69d": "baseSummonPrice()", +"04f7e87c": "issueBounty(address,uint256)", +"04f80977": "setBattleContract(address,address)", +"04f88d71": "testFailHardLimit()", +"04f8aa9b": "IoTeXNetwork(uint256)", +"04f92405": "icoTokensLeft()", +"04f9d030": "test_interface_call()", +"04fad28d": "instanceId()", +"04fb82cc": "_deliverTokens(address,uint256,uint256,uint256,address)", +"04fb9e81": "closeRequested()", +"04fc11d5": "getActual()", +"04fc7c6d": "updateJoinedCrowdsalesMultiple(address[])", +"04fcadf1": "totalZTHWagered()", +"04fd295c": "WOLF2()", +"04fd9f78": "variationsOfOwner(address)", +"04fda0d8": "_trade(address,uint256,address,uint256,address,uint256,bytes32)", +"04fe947c": "mapToNewRange(uint256,uint256,uint256)", +"04ffb5b9": "registerToken(address,string,string,uint256)", +"05009f0a": "_createBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", +"0500de3e": "interestResolution(uint8,uint8,uint8,bool)", +"0500fe3e": "getRegionCurrentPixelPrice(uint256)", +"05010105": "stakeRequired()", +"05015e79": "coldAdmin()", +"05018d91": "objectPants()", +"0501b79f": "getBlocktime()", +"0501d556": "setEmergency(bool)", +"05021ce9": "_trade(address,uint256,address,uint256,address,uint256)", +"050225ea": "giveaway(address,uint256)", +"05026317": "bitcoinSaleRate()", +"0502ca6b": "addTime(uint256)", +"050394ec": "minGasPriceForDrawing()", +"0503a3bb": "transferCharity(address)", +"050414bb": "addWhitelist(address[],uint256[])", +"0505140c": "totalSupplyWithDecimals()", +"05062247": "blocknumber()", +"050642f2": "exchangeTokenRate()", +"0506689a": "omegaPerEther()", +"050895ff": "backEndOperator()", +"0508ed90": "contribute(uint256,address,address,uint256)", +"050906ea": "_computeDamage(uint256,uint256,uint8)", +"050a2eb4": "diceRollAddress()", +"050a3250": "ArithLib()", +"050b8c66": "drainStrayTokens(address,uint256)", +"050c09ee": "founderWithdraw(uint256)", +"050c0fd6": "AmmbrToken()", +"050c8803": "getAmountFida(uint256)", +"050c931d": "paymentNumber()", +"050d6a15": "setSellPrice()", +"050df9f7": "PoolJoined(uint8,address,uint256,uint256)", +"050e25a0": "getHash(address,uint256,address,uint256,uint256,uint256)", +"050eb8c0": "BuyableCourt(address[],uint256[])", +"050f2f3e": "updateBools(bytes32[],bool[])", +"051064c6": "lighthouseFee()", +"051097ef": "addProposal(uint256,string)", +"0510e186": "getSncTokenAddress()", +"05111c1e": "getItemHolder(uint256)", +"05117619": "endVesting(address,address,address,address)", +"05117e0d": "validateTokenPurchase(address,int256[],int256[])", +"0511a431": "addOns(uint16)", +"05120ba6": "getTokensReleased()", +"05128716": "sale(string)", +"0513fc8b": "onBurn(uint256)", +"0514be3b": "ownedTemplates()", +"0514c275": "REALPlaceHolder(address,address,address)", +"05160860": "initialDayWithdrawCount(uint256)", +"0516af06": "getMonsterId(uint256)", +"0516c9f0": "frozenToken(address,uint256)", +"0517431e": "_teamSupply()", +"05175786": "announceWinnerManually(uint256)", +"051847d5": "childTokenByIndex(address,uint256,uint256)", +"0518afdc": "tokenToReward(uint256)", +"0519adad": "largestLoaner()", +"0519b873": "heroLottery()", +"0519bb83": "getVoteStatus(uint256)", +"0519ce79": "cfoAddress()", +"051a2664": "nameOf(uint256)", +"051a65dd": "deal_cancel_rate()", +"051a86cc": "mintApprove(uint256,int256)", +"051b044f": "_sell(uint256,address)", +"051b4e6c": "getSurveyInfo(bytes32)", +"051ba270": "getLogCancelArguments()", +"051c4ab6": "AddPlayer(uint8,address)", +"051c8a8d": "tradeUserAsset(address,address,address,address,uint256,uint256,uint256)", +"051cb630": "mintRandomCards(address,uint8,uint8)", +"051d9955": "confirmCustodianChangeProxy(bytes32)", +"051e5c45": "fiatPerEth()", +"051f4f6f": "transferAll()", +"05204231": "setPermission(address,address,uint8)", +"0520ed4a": "LYT(uint256,string,string)", +"05215b2f": "createStandardToken(uint256)", +"0522345a": "blackListFreezeTime()", +"052369a6": "submitLocation(uint256,uint8)", +"052424f5": "recordPromoterBonus(address,uint256)", +"052534e7": "VerificationEvent(address,address,uint32)", +"0525ca77": "packParams(address,uint16,uint32)", +"0526179e": "getSoilTempControlLimits(bytes32)", +"05261aea": "finalize(uint256)", +"0527da64": "_openGamePlayNos(uint256[])", +"0528bb57": "isSubscriptionProduct(uint256)", +"05297781": "MintToken(uint256)", +"05298d37": "setWhiteListERC20(address)", +"0529be17": "circulateTokensForSale(uint256)", +"0529de04": "getCertificateExpires()", +"052a076f": "disablePresale(bool)", +"052a6849": "tokenStartPrice()", +"052a829c": "notSoldTokens()", +"052ab49c": "bytesToUint1(bytes)", +"052b2aa7": "getRegistrants()", +"052b81c7": "releaseBadges()", +"052ca699": "end_()", +"052d5707": "JYToken()", +"052d9e7e": "setWhitelistEnabled(bool)", +"052deec5": "investorsIter(uint256)", +"052f1a7a": "BGXToken()", +"052f6557": "setExtraLimit(uint256)", +"052f72d7": "getIsGlobalOperator(address)", +"052f7d11": "freezeAccountSend(address,bool)", +"053011b7": "authenticate(uint256,uint256,uint256)", +"0530abf0": "SwingTradeToken()", +"0533073c": "publishingOwner()", +"0533f57b": "RAISED_AMOUNT()", +"0534ab04": "setCapsMerkleRoot(bytes32)", +"0535020d": "payTokens(uint256)", +"05354bed": "etherPricesAreClose(uint256,uint256)", +"05357c69": "isAssigned(uint256,address)", +"0535ec77": "initialDistributionDone()", +"05365bb0": "presale1()", +"0537665d": "setOutcome()", +"053902f6": "DTCC_ILOW_4()", +"0539272a": "startDay()", +"05398302": "destroyFrom(address)", +"05398d45": "setNewMiner(address)", +"0539c6d6": "num_squares()", +"0539eba9": "setAllowBuying(bool)", +"053abd3c": "createShareToken(uint8)", +"053ae2ca": "getHairColorValue(uint256)", +"053b8d2f": "deleteBackgroundImage(uint256)", +"053c351b": "oraclize_getPrice(string)", +"053c5d59": "e_Purchase(address,uint256)", +"053db3a9": "testSetPresaleTokens()", +"053e3169": "openSaleStartTime()", +"053e3253": "window3EndTime()", +"053e71a6": "getTotalNumberOfTokensForWinningOption(uint256)", +"053f14da": "lastPrice()", +"053f598a": "policyActiveNum()", +"053f7492": "minimumPriceInDailyAuction()", +"05401284": "debundle(uint256,address,address)", +"0541b0f8": "acceptPayment(bytes8)", +"0542b61b": "snt_claimed()", +"05433a26": "GetNumbersFromHash(bytes)", +"054348d6": "icoIsOver()", +"0544587f": "getCRYPTON_CUT()", +"054550f3": "assertEq8(bytes8,bytes8,bytes32)", +"05459f42": "WeeklyLotteryB(address)", +"0545a03b": "getGroupManagement(uint256)", +"0545f8ba": "changeExchangeAdmin(address)", +"054604a2": "miniToken()", +"05468c26": "addToBond(address,uint256)", +"0546a746": "restrictedTokensOf(address)", +"054726cb": "MNTOKEN()", +"0547bf4d": "DEFROST_MONTHLY_PERCENT_OWNER()", +"054909aa": "_addNewOwnerHoldingsToToken(address,uint256,uint256)", +"0549f150": "getAdministrator(address)", +"054a8c02": "getGirl(uint256)", +"054a9f11": "shopGloves()", +"054ba658": "delete_key(uint256,uint256)", +"054baaf2": "jan()", +"054be0b7": "setIssuanceRatio(uint256)", +"054c3c71": "getBetsOnTimestamp(uint256)", +"054d2a7e": "ChuCunLingAIGO(uint256,string,uint8,string)", +"054dcbb5": "AdvisorsTokensHolder(address,address,address)", +"054ded2b": "registrazione_candidato(string)", +"054e9507": "lastEventId()", +"054f268e": "getDCategoriesN(bytes32)", +"054f381b": "entrepreneur()", +"054f7d9c": "frozen()", +"054fce82": "ZipperWithdrawalRight(address)", +"05502a62": "BONUS_PRESALE()", +"0550f92f": "setMintAddress(int256,address)", +"05514a3e": "winBonusArray(uint256)", +"05529d94": "addMultipleParticipants(address[])", +"0552ce3e": "MonthToken()", +"05533ce1": "setSettings(address,uint256)", +"0553b805": "transferStorage(address)", +"0553e156": "finalize(address,uint256)", +"0553fd5b": "incSupply(uint256)", +"05540534": "setMultisigAddress(address)", +"0554bb48": "depositToLock(bytes32)", +"0556369e": "tokenToReserve()", +"055680f0": "purchaseCounter()", +"0556a66f": "deliverPresale(address,uint256)", +"0556fcd0": "setIcoFinish(uint256)", +"0557b2b0": "getApprovedTransfer(uint256)", +"0557df99": "FundingRulesSet(address,uint256,uint256,uint256,uint256)", +"0558171d": "maxCharId()", +"05597d88": "setOwnerCut(uint8)", +"0559c114": "removeSellOrder(uint256)", +"055a7341": "USEAddr()", +"055ad42e": "currentPhase()", +"055bb725": "_approveForSale(address,address,uint256)", +"055c7c96": "sliceBytes32Arr(bytes32[],bytes32,uint256,uint256)", +"055cbb3d": "CalculatePayout(bytes32,uint256,uint256,uint8)", +"055cdee1": "UpdateBetOnTeams(string,address,uint256)", +"055cff88": "AlarmxToken()", +"055e0e07": "Bela()", +"055e6d8b": "playGameCheckBid(uint256)", +"055ee253": "claim_reward()", +"0560ff44": "tokenMetadata(uint256,string)", +"056129a6": "TravelShare()", +"0561d562": "GoldiamToken()", +"0561eff6": "addStoneToBoard(uint256,uint8,uint8)", +"0561fc18": "ICOResumed(uint256,uint256,uint256,uint256)", +"056265d1": "storeData(bytes32[],bytes32[],bytes32[],bytes32[])", +"05626694": "LABEEToken(uint256,string,string)", +"05626f09": "timeFundingStart(uint256)", +"0562b9f7": "withdrawAmount(uint256)", +"0563324c": "executeOrder(bytes32,uint256,address)", +"0563451a": "icoEnd()", +"056362e8": "Crowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"0563bbf6": "USDEtherPrice()", +"0563d55e": "MomaSpace()", +"05645168": "_removeFundkeeper(address)", +"0564a9a7": "getPollResults()", +"0564df4a": "_addBattleSequence(uint8,uint8,uint256)", +"0565ac43": "get_bonus(uint256)", +"0565c3f4": "pushAngelInvestmentData(address,address,uint256)", +"05664cea": "getRevisionTimestamp(bytes32,uint256)", +"0566bc12": "getDebrisPrice(bytes32,uint8)", +"0566c02a": "discountedSaleDuration()", +"0566c979": "iCashToken()", +"05674427": "numToString(uint256)", +"0567e83e": "kill(address,address)", +"05681031": "_sendBack()", +"056841b0": "InsertManifesto(string,string)", +"056a6421": "activateInvoiced(address)", +"056ab62a": "TestPool(address[3])", +"056b01ce": "mint(string,uint256)", +"056b2300": "TxUserWallet()", +"056b8197": "tokensInVault()", +"056ba056": "trade(address)", +"056bcc72": "_getVoteInterface(uint256)", +"056bef9e": "addRequester(address,string)", +"056cf6bf": "Witness()", +"056e1059": "oraclize_query(uint256,string,string,uint256)", +"056e25e3": "returnIcoInvestments(uint256)", +"056e4d88": "TotalInvested()", +"056e81a6": "TokenBooksAirdrop()", +"056ed205": "EstateTransactions(string,string,string,address,int256)", +"057101b1": "Token(uint256,string,string,string,uint8)", +"0571d85f": "Forwarded(address,address,uint256)", +"05733989": "setAttribute(address,string,bytes,uint256)", +"057466ea": "buyToken(uint256,uint256)", +"05748be2": "dropAmount()", +"05763ff7": "pauseProposer()", +"0576cb6f": "verifyTargetWallet()", +"05777d9b": "ReturnToken(uint256)", +"0577f15c": "exchangesStatus()", +"0577f62f": "PRE_MAX_CAP()", +"05785e4c": "minimumBuy()", +"05788701": "Ribble()", +"0578e3e5": "isAtMost(uint256,uint256)", +"0578f356": "addManagedInvestmentProposal(uint32,bytes24,uint256,uint152)", +"0579d25d": "price(uint256[],uint256[])", +"057af1c4": "exist(string)", +"057b0416": "getAccDetails(address,address)", +"057b17c0": "timeMode()", +"057b7105": "calculateTokenAmountICO(uint256)", +"057bd53f": "sameVar()", +"057bfcc7": "amount2()", +"057c3cf5": "get_flag()", +"057c824f": "proveInConfirmedBalances(bytes,bytes32,bytes32)", +"057d2c17": "Jack()", +"057dd42d": "purchaseCompanyCard(uint256)", +"058026d0": "checkTransferToICAPWithReference(bytes32,uint256,string)", +"058029a2": "icoCoinCap()", +"0580d5c7": "massBurnTokens(address[],uint256[])", +"0581345e": "issueClaimOwnership(address)", +"058206d9": "ICBCCoin()", +"05831c62": "donateFor(address)", +"05839b29": "sortTopTen()", +"0583ae52": "IRCToken()", +"05860b6f": "getBidIndex(address,bytes32)", +"058618f8": "setAuthorizeMintToken(uint256,int256)", +"05862435": "testFloatKeyValue()", +"05862611": "CrowdsaleLimit(uint256,uint256)", +"0587c1ba": "requestTokensFromOtherContract(address,address,address,uint256)", +"05888fcd": "tradeBalances(address,uint256,address,uint256,address,uint256)", +"0588dcbc": "updateStatsVars(uint256,uint256)", +"058a628f": "setAuthorizer(address)", +"058aace1": "divest()", +"058ab8c9": "EthVerifyCore()", +"058af982": "nameIsAdvocate(address,address)", +"058b316c": "MANAGEMENT_KEY()", +"058c5103": "safeKill()", +"058ceff7": "borrowBalanceStoredInternal(address)", +"058d4dd0": "setAssetCooldown(uint256,uint256,uint64)", +"058d7433": "setAlliesContract(address)", +"058fa067": "setGasRefundForClaimLootWithConsolationPrize(uint256)", +"058fcde9": "testFailTransferFrom()", +"058fe7d9": "setMiningRate(address,uint256)", +"05910b91": "canBreed(uint40)", +"05915147": "authType()", +"05917369": "populateFromOldContract(uint256[])", +"05917e8d": "updateWhitelistAddresses(address[],uint8)", +"0591eb24": "promoCreated()", +"059275ab": "howManyTokensForEther(uint256)", +"0593813f": "getBuyerTransaction(address)", +"0593d244": "setSaleContract(address)", +"05940728": "setGGCFee(uint8)", +"059417da": "_getAllParentIds(bytes32)", +"05943a15": "TEAM_SHARE()", +"0595ba4c": "getRoundMinAmountByBet(uint256)", +"0596334f": "rewardOne()", +"0596bd84": "_ChallengeFailed(uint256)", +"05976587": "test_expiry_increaseTimeBy30000()", +"05978450": "tokensReleasedAdvisorsTeam()", +"0597f3aa": "setGasRefundForClaimConsolationPrizeLoot(uint256)", +"05989e9d": "getAward(uint256)", +"05991e56": "Freewatch(uint256,string,uint8,string)", +"0599c284": "setAddress(string)", +"059a500c": "makeDeposit(uint256)", +"059a7d93": "cardEmojified(uint8)", +"059b8140": "upgradeAllowance(address,address,uint256)", +"059b8c77": "computeGainsRate(address)", +"059c00be": "STL(uint256,string,string)", +"059c5c4f": "policyFeeCollector()", +"059c5ecd": "WaniaToken()", +"059caad3": "creatorSupply()", +"059ce95d": "getVerifier(address)", +"059d45da": "removeAllPVPContenders()", +"059d92dc": "FeefersToken()", +"059eb515": "crowdsaleSold()", +"059efd9e": "_getShipColor(uint256)", +"059f8b16": "MULTIPLIER()", +"059f9342": "ownerSetLiquidationSpread()", +"05a0c707": "setMintAgent(address,int256)", +"05a10028": "burn(uint256,uint256,uint256)", +"05a10e6d": "withdrawStakeTokens(uint256,address)", +"05a17fc6": "getAccountFeed(address,uint256,uint256,uint256)", +"05a308fa": "setReferralSignupTokens(uint256)", +"05a30a7a": "lastDepositDate()", +"05a3823b": "colorplat()", +"05a3e81a": "ratePerWeiSecondPhase()", +"05a44292": "Train(uint64,uint64,uint64)", +"05a506b0": "seEnableTransfer(bool)", +"05a5b8c6": "verifyTx(bytes,int256,int256[],int256,bytes,int256,int256[],int256)", +"05a5f830": "signedApproveAndCallHash(address,address,uint256,bytes,uint256,uint256)", +"05a873dc": "setMetadataSize(uint256)", +"05a8bf98": "SEXYKITTEN(uint256,string,string)", +"05a955af": "holderList(address)", +"05a95f04": "triggerPayout()", +"05a9cec2": "BetOnMe()", +"05a9f274": "totalLockedAmount()", +"05aaee1f": "unlockTimeStamp()", +"05ab421d": "sendTokens(address,uint256)", +"05ac7908": "TakeBackToken(uint256)", +"05ac9bce": "voteVoting(uint256)", +"05ace573": "commitPhaseMinSeconds()", +"05ae6bcc": "userPublicFundingEthCountMap(address)", +"05aeb1e1": "RDMGameToken()", +"05aebead": "plantationSize()", +"05aecc80": "IAmVeryPoorToken()", +"05af0194": "getUserQuickPromoBonus(address)", +"05af2a81": "AddrDevelopFunds()", +"05af636b": "PunkTransfer(address,address,uint256)", +"05afff5b": "isHandleValid(bytes32)", +"05b0876d": "mgrAddress(uint256)", +"05b09e07": "getGameNumber(address,uint256)", +"05b1137b": "transferEther(address,uint256)", +"05b19fc5": "ZzyToken()", +"05b2b03a": "CertificationCentre(address)", +"05b34410": "creationDate()", +"05b35924": "totalLuxCents()", +"05b3dcb9": "roomFree()", +"05b4655a": "withdrawlWinnings()", +"05b496bb": "penalizeSolutionSubmitter(uint256,uint256)", +"05b4fe5f": "DepositFrozen(address,uint256)", +"05b542d9": "startPortalGun()", +"05b5711d": "level_3_amount()", +"05b575a5": "addWhitelister(address,address)", +"05b5b0dc": "submitSolution(uint8[])", +"05b5da23": "setPlayerTokenAddress(address)", +"05b64993": "setRequestCancellationMinimumTime(uint32)", +"05b67c8e": "BitGuildCrowdsale(uint256,uint256,address,address,address)", +"05b6d298": "assertEq0(string,string)", +"05b6d9e2": "distributeeBitcoinCashLarge(address[])", +"05b74d87": "inPrivatePreSalePeriod()", +"05b765ea": "getCertifierStatus(address)", +"05b8b29e": "profitOwner()", +"05b95822": "enableFundingWallets(address)", +"05b961e6": "PayWinner(address)", +"05b9cb3c": "totalDelegations()", +"05ba2ded": "voteForCashBackInPercentOfWeight(uint256)", +"05bbf5db": "startDocumentPoll(uint8,bytes32)", +"05bc99f8": "eth_sent(address)", +"05bccd09": "EGGCOIN()", +"05bdd57b": "AVMTestSuite()", +"05be478b": "calulateXticket(uint256,uint256,uint256)", +"05bf3bf0": "FtechizTestToken()", +"05bf4ecc": "batchPopularitySetting(uint256[],uint8[])", +"05bf779f": "setFoundation(address,address)", +"05bf9ece": "ICOSuspended()", +"05c06367": "RequestDetachment(uint256)", +"05c06db9": "majorPartnerAddress()", +"05c080be": "getTotalF6()", +"05c091f6": "_setCEO(address)", +"05c0dd91": "DEPOSIT_WINDOW()", +"05c0e497": "CDcurrency()", +"05c1f502": "post()", +"05c1f5ff": "getWhiteListStatus(address,address)", +"05c24481": "reserveSlash(bytes32)", +"05c270e2": "getPreviousBlockNumber(uint256,uint256)", +"05c31491": "test_oneTrueAssertNoMessage()", +"05c35eb6": "MICE(uint256,string,string)", +"05c3cb8d": "changegp(address)", +"05c4af9d": "getProto(uint16)", +"05c4b3dc": "Snydertoken()", +"05c54cd6": "MUNIRAHAMID()", +"05c7603d": "updateGenGuVault(uint256)", +"05c78929": "thirdWeekTokenPrice()", +"05c7cd4b": "confirmAndForwardWithRevert(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", +"05c7f589": "BACS()", +"05c85c42": "icoTimeStart()", +"05c8a4e2": "FeuzingToken()", +"05ca11cf": "TIM5(uint256,string,uint8,string)", +"05ca3557": "makeAdoptionOffer(bytes5,uint256)", +"05ca3841": "getOraclizeAddr()", +"05caca6c": "transferOwnershipServer(address)", +"05cb177a": "referralPay(uint256)", +"05cb71d4": "firstLoos()", +"05cc1d8e": "openForceAutoFree(address)", +"05cc49dd": "distributeFee(uint256)", +"05cc72e3": "FilmscoinToken()", +"05ccfddd": "invalidateCombat(uint256)", +"05cd4794": "ExEquity()", +"05ce55fc": "channelDisputeResolver(uint64)", +"05cf5fcd": "mediationExpiry()", +"05d0e91c": "withdrawFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", +"05d0f15b": "tokenPriceWei()", +"05d1127f": "changeChanceToWinModule(uint256)", +"05d1afec": "ausGroup()", +"05d1fc5d": "AIRDROP_MAX()", +"05d2035b": "mintingFinished()", +"05d258dd": "getMixingResult(uint256,uint256)", +"05d26bc6": "feedme(uint256)", +"05d2f3e2": "ErrorReport(address,uint256,uint256)", +"05d2f92a": "check_depth(address,uint256)", +"05d35816": "ConstitutionalDNA()", +"05d430db": "isNameValid(string)", +"05d4665f": "CROWDSALE_TOKENS()", +"05d473da": "assinaPresenca()", +"05d52eeb": "OMPxContract()", +"05d53802": "setPreSaleTokens(uint256)", +"05d55093": "oraclizeRequests(bytes32)", +"05d56a4e": "GetDChainNumRevokableHashes(bytes32)", +"05d57a59": "destroy_time()", +"05d6671c": "m_txs()", +"05d67464": "getTether(address,uint256)", +"05d74066": "SendPreReserved5()", +"05d7649f": "sendPortion(uint256,address)", +"05d78739": "cratesMigrated(address)", +"05d85eda": "count(address)", +"05d861fa": "CommunityAdVoucher()", +"05d866cd": "MemberChanged(address,address)", +"05d87fe2": "issueLetterOfCredit(uint256,uint256,uint256)", +"05d8bb97": "additionalDebt()", +"05d8c792": "_buyHicsTokens(address,uint256)", +"05d9a5fb": "sgn2sga(uint256,uint256)", +"05da403d": "withdrawBalance(bytes32,address,uint256,address,uint256)", +"05dabbcd": "lockedHasEnd()", +"05dad1c0": "test_userSetup()", +"05dae1f9": "ChargeStation(address,uint256)", +"05db3b82": "minwei()", +"05dc2708": "getCardNumber()", +"05dd071c": "_initialTransfers(address,address[],uint256[])", +"05dd23f7": "_stringGas(string)", +"05dd686f": "MIN_TOTAL_AMOUNT_TO_RECEIVE_ETH()", +"05dd7303": "EthereumStack()", +"05ddd49f": "Rotharium()", +"05de4f07": "getContentParent(uint256)", +"05de6288": "WithdrawalDone(address,uint256,uint256)", +"05df5e86": "XPAToken()", +"05df75db": "foobar()", +"05dfedac": "incrementDate()", +"05e0141d": "getOrders(uint256)", +"05e1bd8c": "calculateInterest(uint256,uint256,uint256)", +"05e1c942": "reclaimTokens(address[])", +"05e206f0": "_registerBid(uint32,uint256)", +"05e24a93": "DISTRIBUTED_STATUS()", +"05e2b66a": "update_eth_ratio(uint256)", +"05e2eee0": "getArrayString(bytes32)", +"05e33b6e": "calculateMask(uint256,uint256)", +"05e33dd0": "allParticipants(uint256)", +"05e43263": "AzwieToken(address)", +"05e437b5": "setAllSteps(uint256,uint256,uint256)", +"05e4438a": "applyHotFix(address)", +"05e4545d": "nextActionIsAuthorised()", +"05e45546": "promoCreatedCount()", +"05e49d1d": "findWinner(uint256)", +"05e4a75c": "setupairdrop(address,address)", +"05e52ea0": "numberOfBasesSold(uint256)", +"05e53535": "operationTokenCreated()", +"05e57cb1": "CommitGoodToken()", +"05e633e2": "bonusEnds3()", +"05e6b4a4": "_emitHolderAddressRemoved(bytes32,address,uint256)", +"05e6ee11": "btcInvestment(address,uint256,uint256,string,uint256)", +"05e7781e": "changeReserveWallet(address)", +"05e87e2a": "tracetoMultiSigContract()", +"05e88b69": "production()", +"05e992ff": "BitcoinDeuce(string,string,uint8,uint256)", +"05eb1877": "projectBuget(address)", +"05ecc085": "snapshotAt(uint256)", +"05ed2cd3": "settleBBDBatch(address[],int256[],uint256)", +"05ed76c4": "resolveTime()", +"05ee27a6": "RavneetToken()", +"05ee72b5": "playerEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", +"05ee8d89": "investorMinimalBalance()", +"05eed946": "waracoin_per_ether()", +"05ef6848": "getTokenPods(address)", +"05f04e46": "writePublicRecord(bytes32,bytes32,string,uint8,bytes32,bytes32)", +"05f0f662": "ComputeMyEggs()", +"05f203d9": "revoke(address[])", +"05f29b89": "smartSpeedEarning()", +"05f36283": "Nitrogen()", +"05f3a852": "tkn()", +"05f43bba": "calculatePreTokenAmount(uint256)", +"05f53b29": "getSkillCount()", +"05f5c0f3": "FrozenFunds(address,uint256,uint256,uint256,uint256,uint256)", +"05f6237f": "canClaimRefund()", +"05f671d9": "UUSD()", +"05f6d329": "limitTokenForSale()", +"05f6ee21": "updateBurnAgent(address,bool)", +"05f70f21": "getTokensWithoutRestrictions(uint256)", +"05f766a4": "Spc(uint256,string,string)", +"05f8002a": "setts01(uint256,address)", +"05f8b0cf": "setERCContract(address)", +"05f8b6f5": "_rewireIdentities(bytes32[],uint256,uint256,uint32)", +"05f8d55d": "addOwnerBalance()", +"05f908e6": "ICOPERIOD()", +"05f9bb6b": "transfersEnabledFlag()", +"05f9bf10": "AuctionCreated(uint256,address,uint256,uint256,uint256)", +"05fa0d5f": "_createTileAt(int32,int32)", +"05fc0586": "buyOptions(address,uint256,string)", +"05fcd234": "batchTransfer(address[],uint256,uint256[])", +"05fd22d0": "isPopulous(address)", +"05fe035f": "right100(uint256)", +"05feb950": "SOVREN()", +"05fec4be": "transferAdvisorToken(address,uint256)", +"05fefda7": "setPrices(uint256,uint256)", +"05ff088c": "getVendingInfo(uint256)", +"05ff711b": "blackList(uint32)", +"05ff792e": "cancelEscape(uint32,int256)", +"06005754": "nameRegAddress()", +"0600a865": "totalWithdrawable()", +"0600b814": "tokenBonusPct(uint256)", +"06011b14": "getUnitInfo(uint256,uint256,uint256)", +"06021e7e": "finalizeWork(address,string,string,string)", +"06024287": "attemptSomeMethod(address,uint256)", +"06026d87": "addAddressesToBonuslist(address[])", +"06027876": "sendBountyProgramBalance(address,uint256)", +"06040618": "currentPeriod()", +"0604c594": "getFreeBalances(address)", +"0605062f": "ownerOf()", +"0605d0cd": "emitSkillSet(uint256,uint256,uint256,bytes32)", +"0607dd94": "submitChoose(uint256)", +"06087e5b": "setColdWallet(address)", +"0608a48a": "reactivate_trading()", +"06090738": "setAdultTime(uint256)", +"06096931": "bountySupplied()", +"0609b433": "amendRetention(uint8)", +"060a02b7": "_hasIcoContributorType(address)", +"060a1051": "isExistInWhiteList(address)", +"060a56dc": "publisherCut()", +"060a7ef1": "getCreator(bytes32)", +"060b2128": "getEndPointOfCampaign(bytes32)", +"060ba7e9": "hackAdept(address)", +"060c265f": "checkMaxCap(address,uint256)", +"060c7f33": "AVAILABLE_FOR_EARLY_INVESTORS()", +"060ca250": "distributionsLength()", +"060cf4e8": "_cap()", +"060d15f9": "getBonusFactor(uint256,uint256,uint256)", +"060d206e": "modifyWhitelist(address,bool)", +"060d4f0d": "canDownload(address,address,bytes32)", +"060dac88": "setTokenBalance(address,address,uint256)", +"060eb520": "snt()", +"060f3102": "UbexToken()", +"060f400b": "removeFromOwnership(address)", +"060f58c3": "getUserFee(address)", +"060f919b": "getHash(address,bytes32)", +"060f99c4": "ZillaGDToken()", +"060ffb99": "getPromiseCount(address,bool)", +"0610e037": "isEnabled(bytes32)", +"0611037c": "QiiToken()", +"06114d36": "testChangeBet()", +"0611ae4a": "allocateBid(bytes32,uint256)", +"06122ea8": "createTokensAnySale()", +"061268d7": "requestFoundationTransfer(address,bytes32)", +"06127a11": "privateEntranceProvideAccessFor(address[])", +"061303a7": "refundIsAvailable()", +"061307b0": "fixPlayerPrename(uint256,string)", +"06130ca6": "getTopicAtIndex(uint256)", +"06132b38": "_create(address,uint16,uint16,uint8)", +"06137c9d": "add_luck(bytes32)", +"0613c265": "getLockBalance(address,uint8)", +"0613d936": "setAttackAddress(address,address)", +"0614117a": "recoverETH()", +"06155e95": "EmployeeSignedToESOP(address)", +"0615b520": "isBurner(address,address)", +"0615f7c3": "setGasForPBTT(uint256)", +"0616558c": "CampaignRules(address)", +"06169f63": "setAirdropAgent(address,bool)", +"0616ae05": "GenerateChips(address,uint256,uint256,uint32[])", +"0616cca0": "currentMood()", +"06171a5d": "OpsAddressUpdated(address)", +"061777ed": "incrementOpenInterestFromMarket(uint256)", +"06177ba8": "getdepositValue()", +"06184a25": "monthlySubscriptionCost()", +"0618c0b0": "INACTIVITY()", +"061931eb": "buySkill(uint256,uint256,uint256,uint32)", +"0619978d": "raiseApprovalEvent(address,address,uint256)", +"061a85c7": "forwardedOracle()", +"061ab664": "receiverTwo()", +"061b3245": "withdrawToExchange(address,uint256)", +"061c8800": "setInt(bytes32,bytes32,int256)", +"061c9040": "getLockInfo(address,address)", +"061d5102": "LivingstonCoin()", +"061d8169": "_addResolvers(string,address[],uint256[])", +"061e494f": "getBet(uint256)", +"061e5844": "withdrawFor(address,uint256,uint256,uint8,bytes32,bytes32)", +"061e7845": "buyTokens(string,string,address,uint256)", +"061ea8cc": "countByOwner(address)", +"061f7650": "supportsToken(address)", +"061f9811": "deleteRecord(uint256)", +"06201ad9": "getPLATPrice()", +"0620b2af": "PenaQuantumLeapToken()", +"0621472c": "approveAll(address)", +"0621afe4": "Virgingold()", +"0621b4f6": "sellAllAmount(address,uint256,address,uint256)", +"06222be3": "buyIcoTokens(uint256)", +"06223dac": "getDRCTotal(uint256)", +"06228e95": "freeTransferItem(uint64,address)", +"0622e74b": "crowdsaleTokenPriceNumerator()", +"06232bb0": "openAgreement(bytes,uint8,bytes32,bytes32)", +"06237111": "_getFilteredBoxes(bool)", +"06237526": "serviceCount()", +"06240d7d": "getWeiInCents(uint256)", +"0624ac2c": "getOutcomeTokens(bytes32,uint8)", +"0625d365": "getRightCoordinate(bytes1)", +"06262f1b": "trust(address,bool)", +"0627586a": "splitterNames(address)", +"06279d72": "priceUnits()", +"06287693": "directDebitAllowance(address)", +"062907d5": "initiateVotingContractUpdateVote(string,address)", +"062af37d": "isVersionContract(address,bytes32)", +"062b01ce": "isPricingSane()", +"062bbe59": "setEditedTrue(address)", +"062bd3e9": "getMarketTokenAddress(uint256)", +"062d0f09": "timestep()", +"062d4a34": "addressAdvisoryBountyTeam()", +"062db578": "createtoken(string,string,string,string,string,string,address)", +"062e43a1": "withdrawalToken(address)", +"062e53f3": "intFunc(int256,int256,int256)", +"062fe08e": "TOKENS_AVAILABLE()", +"062ff957": "fetchVoteNumForVoter(address)", +"06301ce8": "delUnpausedWallet(address)", +"06309aa0": "SistanToken()", +"0630da28": "TokenDeskProxy(address,uint256)", +"0631a171": "DocumentAdded(uint256,string,uint256,string)", +"0632a2f3": "getBlockAddress(uint256,uint256)", +"0632f718": "RedditRegistry(bytes32,uint8,uint16)", +"0633cd32": "requestAddressChange(address)", +"06347def": "getCooldownEndTimeFromIndex(uint16)", +"063575de": "withinPeriod()", +"0635fe90": "playerLockedFunds(address)", +"0636d7ac": "getOrdersForSeller(address)", +"063925c8": "scheduleCall(bytes,uint256,uint256)", +"06394c9b": "changeOperator(address)", +"063a7400": "registerUserOnToken(address,address,uint256,uint256,string)", +"063b1566": "partyTo(address)", +"063b3b29": "getPlayerStatus(uint256,uint256)", +"063bac1f": "giveRightToVoteByBatch(address[])", +"063bde24": "MAX_VALUE()", +"063c67c2": "getMatchInfo()", +"063ca521": "setPossibleMobs(uint32[])", +"063cea26": "prenupAgreement()", +"063cfaf0": "getVestingReleaseRate(address,uint256)", +"063d93d8": "register(address,string,string,string)", +"063db820": "payFee(uint256,uint256,address,bool)", +"063dda8b": "preSaleBonus(uint256)", +"063e1b78": "setTradingTime(uint256[])", +"063e7451": "initialSupplyAddress()", +"063ec2f0": "MEDIA_SUPPORT_PERCENT()", +"063f4540": "LogBet(address,uint256,uint256,uint256)", +"06407746": "Grant(address,bool)", +"0640f885": "PAYCLECOIN()", +"0641d812": "accruedDiv(address)", +"064292a8": "updateDates(uint256,uint256,uint256,uint256,uint256,uint256)", +"06437e4f": "_getCards(uint8,address)", +"0643be3e": "transferFrom(uint256,uint256)", +"06444e91": "register(address,uint32)", +"06459119": "testThrowsTransferNotTransferable()", +"0645b5d5": "getMyShareholderID()", +"06463556": "validateFunction(bytes4)", +"064701c6": "buyChest(uint16)", +"06474d12": "tokenIdOf(uint256)", +"06477332": "getMemberAtIndex(address,uint256)", +"0647b106": "Store(address,uint256,uint256,bytes32)", +"0647f697": "Uint256Oracle(uint256)", +"06490f47": "lockup()", +"064aa0e3": "ATMToken(uint256)", +"064af4ee": "setCoreContractAddress(address,address)", +"064c4ebc": "backDevvoteOwner()", +"064cc7a7": "delegatesByDelegator(address)", +"064cd77f": "changeFreezeDate(uint256)", +"064cfc16": "checkIsOpen()", +"064d4d7c": "_minAmount()", +"064da5e7": "getBAAU(bytes32,address,address)", +"064da642": "TransferSellAgentMulti(address[],uint256)", +"064dcb17": "sellTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"064ddd04": "getItemsForSale()", +"064f4fa7": "rateAge()", +"064f5dcd": "decentralizedEconomy()", +"064f67e7": "LockRemoved(address)", +"064fe208": "IxiniumFundingCoin()", +"06502ac0": "setMemberShip(address,uint256)", +"06504c31": "getNeedCloseBets()", +"0650b590": "bulkAdd(address[])", +"0651844e": "activateBalance(address)", +"06525841": "canCashBack()", +"0652d7f5": "fxFee()", +"065361a6": "buyBkgAtExchg(address,uint256,uint256,uint256)", +"0654cb16": "canInvest(address,uint256)", +"0654fbc4": "giveEther(address,uint256)", +"06552ff3": "init(address,address,address,address)", +"0655c58b": "getIcoTokensAmount(uint256,uint256)", +"06562575": "isTermOver()", +"0656dd02": "existingContract(address)", +"06575c89": "currentWeek()", +"0657a9c5": "registerTopPlayers(uint256,uint256[],uint256[])", +"0657f3a1": "finishIco(address,address)", +"0658a429": "BlockHashStorage()", +"0658b574": "storeImageString(string)", +"0659928c": "weiPerMinToken()", +"065b1061": "ln(uint256,uint256,uint8)", +"065b3133": "getDataColla_AA_02(string)", +"065c6b90": "setLevelRewards(uint256,uint256)", +"065de1f6": "minionRemove(address)", +"065de950": "dropNectar(address[])", +"065df077": "createBondFundToken(string,string,uint256,int256,uint256,uint256,address,string,uint256)", +"065e5360": "currentTick()", +"065ec2e6": "_restriction()", +"065ece90": "StageTwoDisable()", +"065f7a98": "totalNonSaleSupply()", +"065fcdff": "distributionThree(address)", +"065fe24f": "heldTimeline(address)", +"0660b8b2": "updateethFee(uint256)", +"0661b2f4": "setOtherPCK(address)", +"0661f204": "generateOtherNums(uint8[4])", +"066208de": "setInitialDuration(uint256)", +"06621ff6": "AZEEMCOIN(uint256,string,string)", +"0662572f": "activateSale(address)", +"06637876": "customers()", +"06637cd9": "getNewPeriod()", +"06638e92": "GetNumbersFromHash(bytes32)", +"066406ad": "LootEtherCom()", +"0665a06f": "createVesting(address,uint256,uint256,uint256)", +"0665c82b": "doPurchase(address)", +"06661abd": "count()", +"066636da": "getTotalEtherOfCurrentRound()", +"0666a6da": "setUnlceRateAndFees(uint256)", +"0666c071": "getEmployeeInfoByName(string)", +"06673ac7": "OmnesToken(address,address)", +"0668f649": "lambosTuneCount()", +"066aa53b": "updatCokeTotal(uint256,uint16)", +"066aff83": "calc1RealTokenRateFromRealTokens(int128)", +"066b0380": "assertEq30(bytes30,bytes30,bytes32)", +"066b3136": "paymentSuccessful(bytes32)", +"066bdc1b": "Legend_Royale(uint256,string,uint8,string)", +"066bf18c": "checkGoal(address)", +"066c94ba": "minTxSize()", +"066cc231": "YouAreHereAt(uint256)", +"066cd2c6": "createOfferAssets(uint256[],string,uint256,uint256)", +"066cf539": "vaultSecondaryUnlocked()", +"066d4701": "callFirstTarget()", +"066d76fe": "update_ratio(uint256,uint256)", +"066e4748": "calculateIdeaBuy(uint256,uint256)", +"066e4ce3": "CancelSell(address,uint256,uint256)", +"066f8a7d": "_disconnectModule()", +"066fd899": "availableReward(address)", +"067002ce": "removeSellingItem(uint256)", +"06713c3e": "proxy(address)", +"0672859b": "getMonsterCP(uint64)", +"0672cce3": "changeMinBet(uint8[157])", +"0673c8be": "isZero(address)", +"0674763c": "assert(bool)", +"06748fb1": "_random()", +"067497e2": "LogIcoTokenSupplyUpdated(uint256)", +"0674fde4": "aventus()", +"0675cb0b": "mintBool()", +"0675e962": "delegateIsCurrent()", +"0676aade": "GetOtherCustomerInfo(bytes18)", +"0676bde3": "BitGuildToken()", +"06771000": "ownerClawbackCredits()", +"06772bbd": "LogStateTransition(uint8,uint8)", +"06780cf5": "preIcoWallet()", +"06784b81": "MAXWIN_inTHOUSANDTHPERCENTS()", +"06787b98": "setHalfLifeRate(uint256)", +"0678c282": "extendRound(uint16,uint256)", +"067903f9": "withdraw4()", +"067906b1": "profiterole()", +"0679195a": "BerryLakeToken()", +"06791fc8": "enterPool(address,uint256)", +"067969a3": "sale2Accepting()", +"067a1e16": "getLockedValue(address)", +"067a2f3e": "Goochain(uint256,string,uint8,string)", +"067a6b05": "myRole()", +"067a8eb4": "registeredFundToRegistrants(address)", +"067ad784": "defaultBonussRate()", +"067ade9f": "claimSeedOwnership()", +"067c2d78": "thirdStartTime()", +"067cf182": "generateReport(int8[],uint32[])", +"067e06ee": "getServerStatus(string)", +"067ec02e": "Xkcd()", +"067eeeac": "tempTokensBalanceOf(address)", +"067fc6dd": "isTokenHolder(address,address)", +"06802613": "mintForCreatorsPool(uint256)", +"068045c7": "crowdsaleSetup(uint256,uint256)", +"0680d58a": "replaceService(address)", +"0681ae70": "FARTCOIN()", +"0681ca55": "milestoneCount()", +"068365ec": "buyWithCustomerId(uint256)", +"0683751e": "_removeByValue(address)", +"0683d56a": "minimumParticipationAmount()", +"0683dc58": "checkTransferIn(address,address,uint256)", +"0683dfdb": "getIdentifiersCount(address)", +"068417d9": "_registerInterface(bytes4)", +"06845b9f": "setTransferAbility(bool)", +"06845c4a": "LogFreezerRemoval(address,uint256)", +"0684c12b": "distributePresaleTokens(address,uint256)", +"0685224c": "GraspSmartBlockchainLock()", +"0685b410": "submitChooseByFactory(address,uint256)", +"0685b42c": "maascash()", +"06867f7d": "accountA()", +"0686dc8d": "setNEW(address,uint256,uint256,uint256,uint256)", +"06873418": "getcoolduwn(uint32)", +"0687bb4a": "purchaseCarCard(uint256)", +"06880dc0": "takeLoan(uint64)", +"06881fd1": "setBaseTokenGetRate(uint256)", +"068841c6": "getNeedLockFunds()", +"06884fc8": "airdrop2()", +"06886a53": "curOpenBNumber()", +"06886fd0": "logRoyalty(address,uint256)", +"0688b135": "recipient2()", +"0688ec24": "preicoAndAdvisorsAmounts(uint256)", +"06894f59": "TakeBack()", +"0689d0ff": "timeToChallenge()", +"068aafb8": "NepExToken()", +"068ae02b": "DATE_LIMIT()", +"068aebbc": "transfer(uint8[],uint8[],uint32[])", +"068b7310": "maxWei()", +"068bcd8d": "getPool(uint256)", +"068c017b": "calcUnlock(address,address)", +"068c8e61": "GetLandData()", +"068c966b": "DrawDetails(uint256)", +"068d5363": "withdraw_bix()", +"068ea2aa": "getLawyerAtIndex(uint256)", +"06900a40": "coAdmin()", +"06900c41": "ZeroPonzi()", +"06903e3e": "offeringProposals(address,uint256)", +"06903ecc": "GVE()", +"06907e17": "block(address)", +"06909f69": "cancel(string,uint256)", +"0691d0bf": "move(address,int64)", +"069215c9": "icoPhaseAmount4()", +"06921a9c": "PRESALES()", +"06934753": "getLanguageCountry()", +"0693b1ab": "minCount()", +"0693e603": "tokensAmountForPurchase()", +"0693ee6e": "firstStartTime()", +"069476ea": "_dispute(address,uint256,uint256[])", +"069489a2": "init2()", +"0694d1be": "refundsOpen()", +"0694f9d6": "getQtyValidators()", +"06961560": "DAO(address,uint256,uint256,uint256,address)", +"0696647a": "test_insert_findWithHintNextAtPosition()", +"0696ba24": "revokeTickets(address,bool)", +"0696eab6": "RICHCrowdsale(address,address,uint256,uint256)", +"0697dfb1": "tokenSetMintFeeProp(address,address,uint256)", +"0698ac9b": "decreaseWeiRaised(uint256)", +"06991539": "_addTokenToOwnersList(address,uint256)", +"06993c97": "writerAccountSupplyRemaining()", +"069984c9": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,string,string)", +"0699d07d": "updateMaxVal()", +"0699f10a": "LightAirdrop()", +"069a2e73": "registerModuleHandler(address)", +"069a6947": "biddedico()", +"069b559c": "migrateThroughOneFork()", +"069b9232": "ChenXiangToken(uint256,string,string)", +"069bd974": "validateTransfer(uint256)", +"069c97df": "angels_lock_days()", +"069cff34": "getMymorties()", +"069d6d1c": "closeOrder(uint256)", +"069d92e3": "showInvestEther(address,uint256)", +"069e5e53": "createEscrow(address,address,uint256,uint256,uint256,uint256)", +"069e9dba": "activateHandbreak()", +"069f5f72": "getMineableTokens()", +"069f74c7": "zcc()", +"069f7e85": "getGreeksBattlePoints()", +"06a0ab2b": "earningsPerShare()", +"06a24640": "setNextPot()", +"06a248c6": "depositTo()", +"06a33300": "BITOX(address,address,address,address,uint256,uint256,uint256)", +"06a36aee": "getUserRoles(address)", +"06a46703": "pubsaleDeadline()", +"06a493fa": "redeemCards(address,uint8)", +"06a49fce": "getCandidates()", +"06a5312b": "GetNumber()", +"06a585e6": "addInvestor(bytes32[3][],address,uint256,uint256)", +"06a5cb3a": "ecosystemAddress()", +"06a5f087": "signSeller(uint256)", +"06a628d4": "packSize()", +"06a669fc": "createPayment(address,uint256)", +"06a6c28f": "commitDividend(address)", +"06a74947": "getBigWinPot()", +"06a81591": "_price_token_PRE()", +"06a85497": "getGameBonusAdded()", +"06a86539": "PBTTForGas()", +"06a8f8a2": "admin2()", +"06a95b53": "blablabla()", +"06a98f0a": "Mine_Block()", +"06a9ce79": "updateTimer(uint256,uint256)", +"06a9d1a9": "fundraisingDeadline()", +"06aa4083": "icoWeek1Bonus()", +"06aacb14": "Broker(bool,address,address)", +"06ab34cf": "initExit(uint256,bytes32)", +"06ab5923": "setSubnodeOwner(bytes32,bytes32,address)", +"06aba0e1": "getTotalWeight()", +"06ac1527": "capWalletAddress()", +"06ac2303": "EthereumButton()", +"06ac5879": "perReserveListedPairs(address,bytes32)", +"06adb71d": "increaseEmployeeExtraOptions(address,uint32)", +"06ae9483": "contractExists()", +"06aef16a": "getAuthorizationDate(address,address)", +"06aef6fb": "_withdrawToken(address,uint256)", +"06af0650": "initializeCurve(bytes32,bytes32,int256[])", +"06af3c75": "get_next_user_recast_from_item(bytes32,bytes32)", +"06af7414": "ContestAnnouncement(address)", +"06b05238": "safeWithdrawAmount()", +"06b091f9": "withdrawTokens(address,uint256)", +"06b0c76d": "setReferenceHash(bytes32,bytes32)", +"06b16a6c": "petPresell(uint16)", +"06b1b479": "indCommunity()", +"06b1efe5": "pushData(string)", +"06b28cec": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256)", +"06b2be05": "payStyle()", +"06b2e607": "GetGamestatus()", +"06b2fe22": "remainingTokensCount()", +"06b2ff47": "canReverse(address)", +"06b3bcd1": "getIpfsAddress(bytes32)", +"06b3efd6": "assetBalanceOf(address)", +"06b4c3e9": "ABCToken(string,string,uint256)", +"06b5338a": "JCoinz()", +"06b5760d": "getCreateShareTokenOutcomeValue()", +"06b5ad18": "recovery(string,address)", +"06b5b21e": "proposeTransfer(address)", +"06b5f02d": "calcWinnings(uint256,uint256)", +"06b6689b": "nextLotteryTTMTokenId5()", +"06b70f62": "MULTISIG_OWNER()", +"06b726d6": "smartBlockAddress(address)", +"06b764ed": "addAddressDataPatternVoteRules(address,address,uint256,uint256,bytes,bytes,uint256[5])", +"06b77972": "getDescriptionInfo(bytes32)", +"06b82a7d": "deregisterSettlement(uint64)", +"06b89153": "BBB()", +"06b8ef4a": "rewardCheckpoint()", +"06b96bb4": "HoloSale(uint256,uint256,uint256,uint256,uint256,address)", +"06ba089a": "updateWebsite(address,address,string)", +"06ba2987": "addSellTokensRequest(address,string,string)", +"06ba8e42": "logDisputeCrowdsourcerRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", +"06bb18c0": "NewCratePreSale()", +"06bbbeff": "getUserBetOf(uint256,address,address)", +"06bc7ef3": "deleteInvestContract()", +"06bced7c": "set_presale_arbits_total(uint256)", +"06bcf02f": "updateStartTime(uint256)", +"06bd7aac": "setSubdivisionEnabled(bool)", +"06be8e04": "_payToInviter(address,uint256)", +"06bee2be": "CartycoinToken(uint256,string,string)", +"06c01551": "setAtomDna(uint256,uint64)", +"06c0e841": "withdrawPayout()", +"06c1032c": "Created(address,address,uint256,uint256,string)", +"06c15206": "GTL()", +"06c17cd7": "sliceLengthThrow()", +"06c18600": "takeOwnership(uint256,uint256)", +"06c18ae0": "CyberVeinToken(address,address,address,uint256)", +"06c1b0ba": "adPriceDay()", +"06c1df7b": "checkBetColumn(uint8)", +"06c265b6": "VICCOToken()", +"06c270be": "HmcDistributor()", +"06c2b53c": "becomeTo()", +"06c2f050": "setSendToSafeWalletPercentage(uint256)", +"06c30e84": "CoVEXTokenERC223()", +"06c3f137": "getLastNReadingsByDeviceId(uint8,uint8)", +"06c45c2a": "addToTradeList(uint256[],uint256[],uint256[],uint256[])", +"06c4811e": "TokenOWLProxy(address)", +"06c5b9d0": "XiaoMuBiaoERC20()", +"06c6c546": "massApprove(address[],uint256[])", +"06c7e165": "SevenStandardToken(uint256,string,uint8,string)", +"06c80102": "releaseAbstractToken_(address,uint256)", +"06c89667": "change(string,string,uint256,uint256,bool)", +"06c8ffed": "removeMultipleAddressesFromWhitelist(address[])", +"06c91ce3": "gx()", +"06ca218f": "doPayout(uint256)", +"06ca66f0": "Indosat(address)", +"06ca9bba": "Start_NewRound(uint256)", +"06caf3e6": "extraDiscount(uint256)", +"06cb0ea4": "updateAd(uint256)", +"06cb4bcd": "sendDeposit()", +"06cc01bc": "setBuyCommissionBps(uint256)", +"06cc2035": "revokeFeeExemption(address)", +"06cc2cd2": "recordSoldPrice(uint256)", +"06cc6373": "UpdateUserExtraData3(address,bytes32)", +"06ccd230": "addToNumber(uint256)", +"06cd4728": "RublixToken(uint256,address)", +"06cf2280": "transferWithFee(address,address,uint256,uint256,uint256,address)", +"06d00b10": "doesOwn(bytes32,address)", +"06d0407e": "getBeneficiaryFinance()", +"06d0db26": "roundMoneyUpToWholeFinneyET(uint256)", +"06d145c9": "getFundingInfoForUser(address)", +"06d1772d": "TWOIoT()", +"06d177c1": "divPoolAmt()", +"06d19d68": "getHashRevealEnd()", +"06d19eb3": "updateSeller(address,uint256,address,uint256)", +"06d37817": "loanToken()", +"06d44278": "_emitError(uint256)", +"06d586bb": "maxPerUser()", +"06d58f2a": "claimAndWithdraw(address,address,address,uint256,uint256)", +"06d65af3": "preSaleStartTime()", +"06d6b095": "ProposalAdded(uint256,address,uint256,bytes)", +"06d6e513": "checkIsKYC(address,address)", +"06d83296": "setData_17(string)", +"06d832a3": "ownerStartContract()", +"06d8619b": "transferKing(address)", +"06d91eea": "getExoplanet(uint256)", +"06d978b2": "setMinDepartureLim(uint256)", +"06da3309": "Deposited(uint256,uint256)", +"06dafac6": "setGreyToken(address)", +"06db33e4": "getVotesByCandidate(uint16)", +"06db8af7": "toAddrString(uint256)", +"06dc5d7f": "total_user_eth()", +"06dc8949": "calculateTokenSellPrice(uint256)", +"06dcd5d0": "CATTOKEN()", +"06dd497f": "cancel(address,uint256,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"06df6cf0": "icoTokenExchangeRate()", +"06e102a0": "Presale(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"06e16a36": "currentTierId()", +"06e1976c": "lockAccount()", +"06e232c4": "getLuckyblockIds()", +"06e25081": "getFreeToken(uint256,address,uint256,bytes32,bytes32,uint8)", +"06e28346": "redeemPlatformMaintenance()", +"06e2f5c1": "getRoundRate(uint256)", +"06e31056": "FANCrowdsale(uint256,uint256,address,address)", +"06e34150": "filters(uint256)", +"06e3a700": "setStartingSeeds(uint256)", +"06e3d732": "getMyChest()", +"06e42962": "_winnerJackpot(uint256)", +"06e430f6": "getAcceptedOracles()", +"06e48538": "defaultOperators()", +"06e4d36f": "getSoftCapReached()", +"06e53e5c": "getCountHolder()", +"06e53f47": "whichChainIsThis()", +"06e5fe85": "promoPurchase(uint32,uint8,uint8,uint8,string)", +"06e63ff8": "insert(string,string)", +"06e64907": "End()", +"06e795e8": "sendToAddress(address,uint256,uint256)", +"06e7b5ad": "isDisputing(address)", +"06e8337f": "getTotalTickets()", +"06e83e2f": "send(address,address,address,uint256)", +"06e840ea": "incrementStatistics(uint256,uint256)", +"06e91d2e": "ROY()", +"06e99fef": "sendEth()", +"06ea1c02": "setArbitrationFeePerJuror(uint256)", +"06ea29c2": "notEqual(int256[],int256[],string)", +"06eb0c2f": "TokenERC20_test(uint256,string,string)", +"06eb6ac1": "TokenPaymentGateway()", +"06eb815f": "handleETH(address)", +"06ebe49f": "incMemberGoodRep(address,uint256)", +"06ec16f8": "collect(address)", +"06ec6272": "payCustom(address,uint256)", +"06ec8ca6": "setCurrency(bytes32)", +"06ec967b": "deleteHpbNodeBatch(address[])", +"06ec9b9e": "ETH_PRICE_USD()", +"06eca511": "unhaltICO()", +"06eccccb": "_getPersonalAirdrop(address,address)", +"06ed6908": "buyTokensFromContract()", +"06ed69b9": "dDeprecateCategory(bytes32,uint256)", +"06edcd24": "hasOpenedOldCrates(address)", +"06ee3b69": "startCloseSalePhase()", +"06ee4917": "ChainMaster()", +"06eeaba0": "tokensForParnter()", +"06ef53e0": "latestWinner()", +"06ef856b": "ethRelief()", +"06efdecd": "OwnerTransfered(address,address)", +"06f1117d": "REFERRAL_BONUS_LEVEL2()", +"06f13056": "batchCount()", +"06f13b8f": "transferTokensToEarlyEquityInvestor(address,uint256,bool)", +"06f2bf62": "getExchange(address)", +"06f33115": "ClaimedAmount()", +"06f33ae2": "setUnownedLifeRate(uint256,uint8)", +"06f36cc9": "helpBlue()", +"06f3a06a": "zeroInvestments()", +"06f3fc8a": "Mapoc(address)", +"06f470e9": "purchaseEstate(uint256)", +"06f4b12e": "changeTenant(address)", +"06f4f7de": "cancelDigitalArtSellingItem(uint256)", +"06f53cb3": "tryFinalizeProposal(uint256)", +"06f57add": "getWeekNumber()", +"06f639fe": "tier3(address)", +"06f660ef": "getInitialPrice()", +"06f68f12": "updateFirstBuyNum(bytes32,bytes32)", +"06f69881": "crossForkFundDeposit()", +"06f70295": "answer(uint256)", +"06f74bcf": "pauseInternal()", +"06f7ec97": "preICOBonus()", +"06f7f3fe": "getERC20Pawn(uint256)", +"06f84701": "canRedeemUTXO(bytes32,bytes20,uint8,uint256,bytes)", +"06f8ac40": "miniumInvestment()", +"06fa01b1": "MasonCoin()", +"06fa9df9": "hashPositions(uint32,int64[],bytes16)", +"06faebbe": "setPromoToPartner(string)", +"06fbf606": "setBurnFeeProp(uint256)", +"06fd06f8": "Exchanger()", +"06fd537b": "burnMoney()", +"06fdde03": "name()", +"06fdde58": "structure_variant_confirmation(int8)", +"06fde169": "REQUIRED_SHARES_TO_BE_BOARD_MEMBER()", +"06fdf75d": "getRedeemValue(uint256,address)", +"06fe0c29": "finishMilestone(string)", +"06fe1fd7": "getPackageName(bytes32)", +"06fe2212": "changeWaitTime(uint256)", +"06ff8908": "JoyToken()", +"06ffce53": "getTokenValue()", +"07002f02": "canIssue(uint256)", +"07006a55": "createPromoEggs()", +"07016f60": "getPOOL_edit_25()", +"0701da46": "limitAccount(address,uint256)", +"07023a38": "SellerHistory(address,uint256,uint256)", +"07031305": "setExpiration(uint256,uint256)", +"0703ffd1": "getLimitedReporterMarkets()", +"070485a9": "setGlobalPause(address)", +"070494ce": "blockFundsInEscrow(address,uint256,address)", +"0705028c": "addTransaction(uint256,address,address,bool,uint256,uint8)", +"070545d8": "Extend(bytes32)", +"07058808": "WinTokenLock()", +"07062cf2": "vision()", +"070669e6": "Requested(address,bytes32)", +"07073756": "_getTokenAmountForReferral(uint256,bool)", +"0707873c": "getInvestorInfo(address)", +"0707a106": "setRateEthToToken(uint256,uint256)", +"070816f1": "transferTeam1Tokens(address,uint256)", +"07085842": "smartcontracts(uint256)", +"0709544e": "getColor(bytes1,bytes1,bytes1)", +"0709d116": "setBlackListERC223(address)", +"0709df45": "vaultOf(address)", +"070a888f": "updateRewardDuration(uint256)", +"070ae23b": "createContractTokenWithPrice(string,uint256)", +"070b91d1": "voting(uint256,uint256,bool,uint256)", +"070bc415": "_computeUniqueness(uint256,uint256)", +"070bc508": "SupremIOTToken(address)", +"070be532": "BSE()", +"070c04b1": "setFromContractAddr(address)", +"070c3c23": "previousPayoutBlock()", +"070c87f9": "enableERC20()", +"070caf36": "exchangeTokenToEther(address,uint256)", +"070cf0cb": "isAgreementFullySigned(bytes32)", +"070f0e96": "countTokenHolders()", +"070f52f4": "canExchange()", +"070f5c09": "pausePresale()", +"070f723d": "_initializeGame()", +"070f7926": "_sendByDefaultTranches(address,address,address,uint256,bytes,bytes)", +"070fdb96": "getTakerBet(uint256,address,uint256,address)", +"07113965": "setPOOL_edit_3(string)", +"07120872": "createFightAuction(uint256,uint256,uint256,uint256)", +"07121a7a": "_requireBidderBalance(address,uint256)", +"07129e67": "SimpleEthBank()", +"07133caf": "HCToken()", +"07134b8b": "tokensNeededToGetPayment()", +"071357bd": "concludeCampaign(uint256)", +"0713d054": "checkDateExsit(uint256)", +"07142877": "PRE_SALE_MAX_CAP()", +"07144458": "forwardTokens(address[])", +"07146786": "userRankAddress()", +"0714c622": "anotherFunction()", +"07153d3b": "setStates(bytes32[])", +"07156854": "flipSwitchTo(bool)", +"0715b09f": "nouvelleProduction(uint256)", +"0715ec34": "EnchantedShop(address,string,string,uint256,uint32,uint256)", +"071696e0": "transferFAIDS(address[],uint256[])", +"0717f39e": "_isValidPerkToAdd(uint8[32],uint8)", +"0719d365": "TOKENS_CAP_ICO()", +"071a56df": "addOracle(address,string)", +"071a7541": "BETA()", +"071b7e73": "FinishIco(address,address,address,address)", +"071bafb5": "sin()", +"071bd079": "demo(uint256)", +"071bdfbd": "PlayCoin()", +"071c0306": "AvailableTokenPool()", +"071c802b": "saiVox()", +"071da02f": "totalBelaStaked()", +"071e1ddc": "processFunding(address,address,uint256)", +"071e8730": "AqsaJawaid()", +"071e9a76": "distributeFunds(address,uint256)", +"071ecb13": "getCurrencyContrData(uint256,uint256[7])", +"071eeeb3": "setStarNameMessage(uint256,string,string)", +"071fac61": "getAllMediators()", +"071fe9b0": "isBurnInClose()", +"07202460": "getMonsterObj(uint64)", +"07209e2b": "AllowanceCrowdsale(address)", +"0720fc78": "removeOWhitelist(address)", +"07216bda": "getBurnRequestStringMap(uint256,string)", +"072180ff": "buyCoinsAtExchg(address,uint256,uint256)", +"0721c6dd": "setCompte_29(string)", +"07220134": "getBetInfoByReveal(uint256)", +"0722559c": "endRentFlatDaily()", +"072419f4": "changeTeamFee(uint256)", +"072448f7": "midTimeBonusValue()", +"07256175": "SecondLevelCost()", +"07259d06": "limitGasPrice()", +"0725e898": "getTokensForOwner(address)", +"07260a43": "serveTx(address,uint256,bytes,bool,bytes)", +"07266117": "networkDevelopmentSupply()", +"0727adb3": "last_balance()", +"0728d5e3": "getDiscountedItemsForSale(uint256,uint256)", +"072933e9": "OWN_kill()", +"07293b9d": "maxStage2AllocationPerInvestor()", +"07298203": "GetStats()", +"072b3f49": "createContract(address,address,address,uint256,uint256,uint256)", +"072b8277": "VAPEbits()", +"072b9c83": "AxieERC721BaseEnumerable()", +"072b9cf2": "schema(bytes32)", +"072bdbb8": "getScripts(uint256,uint16)", +"072de7f3": "calculateTokenPrice(uint256)", +"072e28c2": "setCRManager(address)", +"072e4308": "detailsOf(string,string)", +"072ea61c": "entryFee()", +"073005f1": "canTransferFrom(address,address)", +"07304435": "getKilled()", +"0730a322": "FoundationTransfer(address,uint256,uint256)", +"073171d8": "LeaseBill(uint256,uint256,string)", +"0732717d": "buy_the_tokens(bytes32)", +"07336e35": "producedCaps()", +"0733b888": "getRoundsActive(address)", +"07342e9f": "MultiSigWalletWithDailyLimit()", +"073455f1": "BitDex(address,address,address,uint256,uint256,uint256)", +"073767fc": "changeRateFee(uint256)", +"073933ed": "isNotZero(int256,string)", +"07394d39": "TeamTokenLock(address,address)", +"0739cd26": "tsSucceeded()", +"073b3bf9": "addressToNumVillages(address)", +"073b423d": "mintTransfer(address,uint256,uint256,uint256)", +"073cc554": "newProposal(address,string,address,uint256,address,uint256,bytes)", +"073d5fd8": "DeadlineExtended(uint256,uint256)", +"073d9a28": "transferactive()", +"073e1fa3": "givecandyfrom()", +"073ede30": "addTeam1(uint64,uint64,uint64,uint16)", +"073f323d": "MamatToken(uint256,string,uint8,string)", +"07414002": "secureApprove(address,uint256)", +"07415ce8": "addressOfTokenUsedAsReward4()", +"0741dc1e": "withdrawToken(bytes8,address,uint256)", +"07420a41": "sendReward(address,uint256)", +"07433ca4": "createVesting(address,uint256,uint256,uint256,uint256,bool)", +"0744c56b": "getFreeHipster()", +"0745c160": "startProICO()", +"07461622": "setMinMax(uint256,string)", +"0746bfd9": "buySharesForProposal(uint256)", +"07471b18": "distributeInvest(uint256,uint256,uint256)", +"0747ab2a": "Winner(uint256,address,uint256,uint256)", +"0747e4eb": "wpr()", +"07489aa6": "totalFinalStage()", +"07489f92": "getUnsoldTokensVal(uint256)", +"074a1594": "addToAging(address,address,uint256,uint256)", +"074a1600": "percent2()", +"074b1e61": "referralsVault_()", +"074b5270": "leadingBid()", +"074bc101": "btcToken()", +"074c0836": "POMoooon()", +"074c09eb": "catalog()", +"074c32c4": "updateRatePlan(uint256,uint256,string,bytes32)", +"074c71e5": "SaleWallet(address,address)", +"074c9647": "updateEtherAmount(uint256)", +"074cac6c": "getFreeMinerForMiniGame(address)", +"074e06ee": "_addLuck(address,uint256)", +"074e0f36": "setMaxRefundableGasPrice(uint256)", +"074e6254": "blendWithYourself()", +"074e8940": "companyWalletAddress()", +"074f0a22": "DataContacts(address,address)", +"074fcfd5": "_blockKey(bytes32,bytes32,uint256)", +"07501073": "migrationGetPlayer(bytes32,uint8)", +"0751076d": "setBetMax(uint256)", +"07518c8e": "blockhashOf(uint256)", +"0752881a": "buyTokens(address,uint256)", +"075360bb": "moveRoundsToHolder(address)", +"07537ad4": "closeCrowdSale()", +"07539074": "LogInvestorRefunded(address,uint256)", +"0753afdf": "registration(string,string,string)", +"0753c30c": "deprecate(address)", +"0754236d": "minContributeETH()", +"07542576": "BayernvsRealMadrid()", +"07546172": "minter()", +"07549893": "SimpleChildToken(address,string,string,uint256,uint8)", +"0754e744": "icofunding()", +"07550f0a": "areAllBalanceNull(bytes32)", +"07560f13": "transferWithMessage(address,uint256,bytes)", +"0756f58f": "getDifficultyAsFixedPointForGameId(uint256)", +"0757114e": "getenddate()", +"07571c99": "getPayoutsCount()", +"075840d0": "bounty_funds()", +"075865c4": "getMiningWarDealine()", +"07587fa3": "KissMe(uint256,string,string)", +"075881d6": "purchasePlayer(uint256)", +"0758a980": "specialBonus(address)", +"0759a351": "getCCH_edit_30()", +"075a3b57": "releasedTo(address,address)", +"075acda7": "gasAmt()", +"075b1a09": "schemaId()", +"075bbcc7": "RESERVED_TOKENS_TIQPIT_SOLUTIONS()", +"075bf772": "teamTotal()", +"075c04ab": "dividendRewards(address,address)", +"075c18f7": "contributeByBitcoin(uint256,uint256,address,uint256)", +"075d4782": "publish()", +"075d7bb3": "setDontIndex(bool)", +"075deb95": "buyGana(address)", +"075e0a7c": "window3TotalSupply()", +"075f8ec2": "CommunityCoin()", +"075fe66a": "EDD()", +"075fe877": "scheduleCall(address,bytes,uint256,uint256)", +"0761923c": "TargetWalletUpdated(address)", +"0761a004": "step(uint256,bytes)", +"0761c57a": "rocketBlocksUntilAllowedToLaunch()", +"07621038": "getSponsorshipUser(address,uint256)", +"07626adb": "getApiId(string)", +"0762c317": "createNewPop(uint256,string)", +"07630eac": "sendTokensToBatch(uint256[],address[])", +"07632269": "_deliverPack(address,uint8)", +"07634cbe": "getCoupon()", +"0763b78b": "getPVEDuration(uint256)", +"0763f34e": "referrerReward()", +"0764a7fa": "FinderHyper()", +"0764ebd9": "updateExcludedAddress(address,bool)", +"0764f5e0": "serviceDeployCount(address)", +"076600ec": "ClaimDivs()", +"07660978": "PrepareForSale()", +"076736a2": "maxPurchaseSize()", +"07675951": "UpgradePurged(address)", +"0767d178": "weightOf(uint256)", +"076804b8": "checkAddressVerified()", +"0768e8fa": "payAffiliateToAddress(address)", +"07695379": "ControlStructure(uint256)", +"0769aefa": "createAnimecard(string,string,string,string,uint256)", +"076a1852": "zTransferLosingBets()", +"076a39a0": "HOUSEEDGE_inTHOUSANDTHPERCENTS()", +"076a6440": "setMain(address,address)", +"076ae31d": "BountyEscrow()", +"076b5fe1": "FangToken()", +"076c4870": "owner(address,address)", +"076c52b2": "betA()", +"076ccbe4": "testLedgerZeroCollateral()", +"076e18a0": "getCurrentTokenPriceWei()", +"076fdf3c": "getLockingTimestampTo()", +"076ffa3a": "___isActive()", +"0770a074": "adjustSupply(uint256,uint256,uint256)", +"077135a8": "totalNoOfTokenAlocated()", +"07715fd4": "BCOToken(address,string,string,uint256,uint256)", +"07716dd2": "hasEmployee(address)", +"07718a3b": "BankOwner_WithdrawDonations()", +"07730eb9": "BurnAllTokens()", +"077340c5": "transferAndFrozen(address,uint256,bytes,uint256,uint256)", +"0773aa85": "changeFoundersWallet(address)", +"0773e6ba": "addPermissions(address,address[])", +"0774774f": "lineageToken()", +"07751070": "getProperty()", +"07762e74": "viewMult()", +"0776e4fa": "set_balance(address,uint256)", +"077757fc": "transferWithoutChangeBest(address,uint256)", +"07776028": "creatorOwnership(address,address)", +"07777949": "transferEthBackToUser(address)", +"07779627": "isDelegate(address)", +"0777fa95": "TokenTKC()", +"0778425a": "getProposalsBySeller(address)", +"07786d0c": "sendAward()", +"0779afe6": "send(address,address,uint256)", +"0779d0f5": "refundApToken(address)", +"077a05dd": "sellSpecialTokensForPreSale(address,uint256)", +"077a8eaf": "abandonedIcoBalances()", +"077b109b": "_checkLedger(string)", +"077b124b": "addSuperInvestor(address)", +"077cd4bf": "petHpThreshold()", +"077d256a": "icoInvestorsAddresses(uint256)", +"077d3f8c": "Engrema()", +"077dadb2": "coinBalanceMultisig(address)", +"077e43b4": "getLastBallot()", +"077e6334": "endLock()", +"077f1008": "tovote(string,uint256,uint256)", +"077f224a": "initialize(string,string,address)", +"07801ac9": "addallmoney(address[],uint256[])", +"07801b5c": "nextroundGOTCHatcontract()", +"07805363": "joinGames(address,uint256)", +"07806b19": "cardDetailsStructs(uint8)", +"0780a196": "createDetail(address,uint256)", +"0781c111": "TokenSeller(address,uint256,uint256,bool)", +"0781f4d2": "emitting()", +"07822f7d": "viewauctionlist(uint256,uint256)", +"0782709a": "setKrsUsdRate(uint256)", +"0782fc35": "releaseValue4()", +"0783c2ef": "getAuditState(uint256)", +"0783d820": "getSysRestEth(uint256,uint256,uint256)", +"0784a07f": "distributedTokensAmount()", +"0785001c": "amountGoal()", +"07855f4f": "startPlacingPhase(uint256)", +"07858f0e": "setBallotOwner(uint256,address)", +"0785ca29": "BalanceCheck(uint256)", +"0785cb94": "DateOfBirth()", +"0786f01e": "setCookUpFee(uint256)", +"0786f72b": "etherAddress()", +"0787006d": "setCosignerCallGas()", +"0787bc27": "providers(address)", +"07883703": "Mint(uint256)", +"07885cd1": "PaymentChannel(address,address,address,address,uint256,bytes)", +"078895ea": "GbeeStandardToken(uint256,string,uint8,string)", +"0788f69c": "setCityPicture(uint256,string)", +"07894b1e": "initMartial()", +"0789fc01": "burningPercentage()", +"078aa5af": "testStorage(uint256[],uint256[])", +"078b247e": "shouldBeTerminated()", +"078b55e6": "createLibrary(string,string)", +"078bd227": "outputa(address)", +"078c0452": "setJobCompleted(bytes)", +"078c3fa4": "_transferToICAPWithReference(bytes32,uint256,string)", +"078c42e6": "AirdropCheck()", +"078c51f0": "getTournamentCount()", +"078cc1cb": "setStartersProxyAddress(address)", +"078cfee6": "initializePrivateSale(uint256,uint256,uint256,uint256,uint256)", +"078d1258": "addFrostTokens(address,uint256,uint256)", +"078d88ff": "Validated(string,uint256)", +"078db9c9": "Mepoupe()", +"078dcd2f": "isGoodAlreadyAdd(bytes32)", +"078dfbe7": "transferOwnership(address,bool,bool)", +"078e096d": "endPublicIco()", +"078f872c": "closeProposal(bytes32)", +"078f8d3b": "ConversionAborted(uint256,string)", +"078f9378": "updateParameters(address,address,uint256,uint256,uint256)", +"078fd9ea": "saleCap()", +"079095ae": "VULCAN_POD()", +"0790e880": "setBlockappsAddr(address)", +"07910a78": "get10Tokens()", +"07912c14": "setI6(address)", +"079172da": "proofSet()", +"07927187": "addEmployee(uint256,string,address)", +"07930644": "getExchangeAdapter(bytes32)", +"07932772": "judge(uint8)", +"07939a17": "BUYER_STEP_3(bytes32,uint256)", +"07957360": "verifyOwnership(address,address)", +"0796c325": "Loading()", +"0796f97b": "FIRST_DAY_END()", +"07973ccf": "userCount()", +"0797595a": "donateDnaFromContract(address,uint256,uint8)", +"0797adb0": "loadEngineerOldData()", +"07986518": "GoogleChainSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"0798d7ef": "removePreIcoMembers(address[])", +"07993f04": "getPaper(uint256)", +"0799ad8d": "takeBackNTRY(address,address,uint256)", +"0799f1b2": "registerZTKCheck(address,string,string,string,string,string,uint256,string,string,int256,uint256)", +"079a193b": "changeAllowance(address,uint256)", +"079aab88": "newPresserFee()", +"079b365e": "reportProfit(int256,bool,address)", +"079c002f": "TOKEN_WITHDRAWAL_START_DATE()", +"079c12fb": "RongWQToken(uint256,string,string)", +"079c345d": "major(uint256)", +"079c9fbb": "airDropSame(address[],uint256)", +"079caa14": "grantAdvisorsTokens(address)", +"079ce327": "reLoadXname(bytes32,uint256,uint256)", +"079cf76e": "getRoot(address)", +"079d229f": "freeFromUpTo(address,uint256)", +"079d2b96": "IsCampaignAvailable(uint256)", +"079d7d7f": "winningPot()", +"079e0e0e": "batchBuild(uint256[],int256[],int256[],uint8[])", +"079eaf34": "addUser(string,string)", +"079ee6b3": "addParticipant(address[],uint256[])", +"07a1ca5f": "endGame(address,bytes)", +"07a2aac2": "reverseBytes()", +"07a2c4d5": "DanatCoin()", +"07a3082d": "ConstructByCredits(uint256,uint256)", +"07a43efd": "export()", +"07a67fb3": "get_pool(uint256)", +"07a6e434": "getDocs(uint256)", +"07a72184": "stringToBytes32(bytes)", +"07a7465f": "getDescendantsOfThing(uint256)", +"07a77473": "_isOnAuction(uint256)", +"07a8275d": "getInviteEarnings(address)", +"07a878f6": "CLPToken()", +"07a8af6f": "expiryLimit()", +"07a8df44": "capInitialized()", +"07a94ed2": "powerDayRemainingLimitOf(address)", +"07a9574a": "changeLeaderMessage(string)", +"07a95e83": "refundUnclaimedEthers(uint256)", +"07a993e5": "setOtherCurrenciesChecker(address)", +"07a9d7a8": "hasConfirmedApplicant(address,address)", +"07aba33d": "getNext(uint256)", +"07ac15e2": "getInitBlock()", +"07ac8087": "getQuickBuyEtherTokenAddress()", +"07ad3282": "lastSettlementStartedTimestamp()", +"07ad9ecb": "safeSend(address,uint256)", +"07ae279c": "stage_Days()", +"07ae3095": "setNotMoreThan(uint256)", +"07aef7a6": "BGGToken()", +"07afbe74": "addAssetToOwnedAssets(address)", +"07b1470c": "debugVal3()", +"07b15667": "addPresaleAllocation(address,address,uint256)", +"07b1be24": "addTokenPairSecondPart(address,address,uint256,uint256)", +"07b261bc": "addOwner2(address)", +"07b26217": "removeAvailability(uint256[],uint256)", +"07b2779f": "BasicRegulator(address,uint256,uint256)", +"07b3776c": "currentRecord()", +"07b39962": "delAllowContractList(address)", +"07b578a0": "getGuestName()", +"07b5fc54": "updateDividendsFor()", +"07b60c02": "calculatePermillToRelease(uint256)", +"07b657ce": "lastBlock_v17()", +"07b6b762": "reserveFullMintAllowance(int256)", +"07b6f631": "testTestHarnessAuth()", +"07b86b41": "transactionsOnNowVal(address)", +"07b88cb3": "registerOffering(bytes32,bytes32,address,uint256)", +"07b8ef24": "votesSupport()", +"07b99366": "initExit(bytes32)", +"07b9ac2c": "editTrustee(address)", +"07ba216c": "coinsaleactive()", +"07ba217c": "pay1(address)", +"07baa3db": "ARXCrowdsale()", +"07bbb378": "BoughtTokens(address,uint256,uint256,uint256,uint256)", +"07bc6fad": "withdraw(address,uint256,bytes32,uint256)", +"07bc8829": "showText()", +"07bcf03a": "CFXToken()", +"07be02fe": "getPublisher(bytes32)", +"07be6ef8": "getTopCompanyStartPrice()", +"07be74b9": "refundWhite(uint256,uint256,uint256)", +"07bec66f": "buyout(uint256)", +"07bee472": "totalMainSaleTokenLimit()", +"07bf5863": "unprocessedQueryList(uint256)", +"07bf9b9f": "BONUS_SCALE()", +"07bfaa03": "toB32(uint256,uint256,bytes)", +"07bfce37": "long()", +"07c037af": "NipToken()", +"07c1880a": "logMarketCreated(bytes32,string,string,address,address,address,bytes32[],int256,int256,uint8)", +"07c24086": "preSaledeadline()", +"07c299c2": "eT(address,uint256,uint256)", +"07c2e16c": "getOrdersLength()", +"07c34e73": "releaseState1()", +"07c38522": "RMBToken()", +"07c3d98b": "balanceOfTotalUnclaimedMilk()", +"07c430bd": "Robincoin(uint256,string,string)", +"07c4d580": "transferForAdmin(address,address,uint256)", +"07c4e9e4": "ToggleFreezeToken(uint256)", +"07c533a5": "MTSCoin()", +"07c599df": "Stakefasttoken()", +"07c6b2fa": "_addDataStream(address,string,bytes32)", +"07c7accb": "getIdentityProvider(address)", +"07c7bae8": "LogContributions(address,uint256,bool)", +"07c8e56f": "Filter(address[],uint256[])", +"07c8fb5a": "HelperSearch()", +"07c9cd45": "cancelSell(uint256)", +"07ca140d": "numberOfCampaigns()", +"07ca3bc1": "ping(bool)", +"07ca6931": "StrategyAddress()", +"07cadb0f": "createCryptoAvatar(uint256,uint256,uint256,uint256,address)", +"07caf9e1": "advisorFirstLockTime()", +"07cb33d5": "ReleasableToken()", +"07cb4419": "OWN_contractlocked(bool)", +"07cbe8ab": "raisedFromToken(address)", +"07cc36da": "BNBNSRegistry()", +"07cc6051": "airAmount()", +"07ccad95": "TEAM_POOL_TOKENS()", +"07cd401c": "dividendDistributionPool()", +"07cd5c29": "batchRefund(address[],uint256[])", +"07cdee49": "coo()", +"07ce55a0": "ExtraFinalizeAgent(uint256,address,uint256)", +"07cfa11f": "WELFARE_HANDOUT()", +"07cff6f2": "getERC20(address,uint256,address,uint256)", +"07d03f8c": "sendTokensToSale()", +"07d0da7e": "NormalToken(string,string,uint256,uint8)", +"07d15ffd": "SteriliumToken()", +"07d1c4af": "ICOStartPromo()", +"07d1ccd2": "nStages()", +"07d20edc": "preSoldTokens()", +"07d31642": "trustDealer(address)", +"07d3be03": "setItemsForSale(uint256[],uint256[])", +"07d3d941": "CIRCULATING_BASE()", +"07d4db39": "transferResidualScoupons(address,uint256)", +"07d52598": "purchase(uint256,string,bool,uint256)", +"07d544fa": "OrpheusOrganicsThailand()", +"07d5b826": "buyAllOutcomes(bytes32,uint256)", +"07d5ebf5": "getDrones()", +"07d6a5d4": "dripToken(address,uint256)", +"07d71e73": "getAllMatchesForRoundId(uint256)", +"07d76ae9": "getOrderDealSpeed()", +"07d78e21": "bonusRateInPercent1()", +"07d7f8ed": "ANHUI_ANNUITY_DAO_33()", +"07d86788": "finalizeReclaim(uint256)", +"07d94ac7": "canSendWebGift()", +"07da14ce": "AddItem(string,uint256,uint256)", +"07da68f5": "stop()", +"07db37e7": "contribute(address,address)", +"07db4228": "beneficiaryMultiSigWithdraw()", +"07db7fe0": "initOne(string,string,uint8,uint256,uint256,address,address,bytes32)", +"07dbd529": "getLeastExpensiveCryptoGamer()", +"07dc6bd1": "setRoundParams(uint8,uint256,uint256,uint256,uint256,uint256)", +"07dc6f12": "refundInternal(bytes32,address,uint256)", +"07dcfebe": "DURIANFX()", +"07dd8271": "_removeArbiter(address)", +"07dd8e3b": "merge(uint256,bytes32,address[])", +"07dda675": "view70()", +"07ddd6c9": "SkinBase()", +"07de67dc": "makeVisible(uint128)", +"07de8e8c": "MultiSigController(address,address[],uint256)", +"07def80d": "teamsCreatedCount()", +"07defcac": "pizzaHolder()", +"07df18d3": "test0Vote()", +"07df3fa4": "tokensIssuedForBonusRangeFour()", +"07dfe49f": "ALLOC_ADVISORS_BOUNTIES()", +"07e00bcb": "kissBTCCallback(uint256,uint256)", +"07e0421f": "repossessionBlocks()", +"07e0e6f1": "addEmployee(address,address,address[],uint256)", +"07e124aa": "prolongPreIco(uint256)", +"07e1967a": "setAccountShareRuleGroupId(address,uint256)", +"07e27959": "reduceReserves(uint256)", +"07e33107": "addMetaProject(address)", +"07e35246": "getMinimumWishTribute()", +"07e3ad2d": "_getTokenBonus()", +"07e63412": "getPoster(uint256)", +"07e655eb": "resetFinalize()", +"07e669c3": "_cancelAuction(uint256,address)", +"07e7d5b9": "ZUKToken()", +"07e7f941": "setBonuses(uint256[],uint256[])", +"07e82a1e": "indexOf(uint16[],uint16,bool)", +"07e89ec0": "PUBLIC_SALE_PRICE()", +"07e8d284": "addressToPowerlevel(address)", +"07e9f217": "setDefconLevel(uint16)", +"07ea65c8": "getLastAlert(string,int256)", +"07eaa38b": "changeSettings_only_Dev(uint256,uint256,uint256,uint8,uint8)", +"07eb6123": "LogFinishPreICO()", +"07eb752e": "getListAddressHolders()", +"07ec0ead": "changeTechAccountAddress(address)", +"07ec4b42": "unicornBreedingAddress()", +"07ecdfe9": "XAUsToken()", +"07edb029": "MainstreetToken(address,address,uint256,bool)", +"07ee9df2": "NDT2Token()", +"07ef3ea1": "forceNextStage()", +"07ef8b33": "ETG()", +"07ef99a0": "demintTokens(int256,address,uint8)", +"07efbf2b": "DEVELOPERSFUND()", +"07f07648": "catalogPlayersAddress()", +"07f0973e": "EtherLotto()", +"07f125e7": "setMintPrice(uint256,int256,uint256,int256,uint256,int256)", +"07f171b7": "checkGoalandPrice()", +"07f1eb0d": "setMinimumTokenAmountForUpdate(uint256)", +"07f30f6a": "owner2OK()", +"07f3f764": "godMode(address,address,uint256)", +"07f442c4": "fightAlphaMonster()", +"07f4556f": "KIA()", +"07f4eace": "preSaleAmount()", +"07f4f3f4": "assertToken(address)", +"07f5888b": "vote02YesCount()", +"07f5b7a2": "TokenSale(address,address,address)", +"07f64725": "gotParticipants()", +"07f79d38": "presaleOpeningTime()", +"07f7aafb": "approveContract(address)", +"07f8f100": "startSell()", +"07f90e5d": "lotteries()", +"07f95fc2": "mintParticularPart(int256,uint8[4],address)", +"07f9f7ba": "StandardBounties(address)", +"07fa40e4": "withdrawEtherTo(address)", +"07fb363a": "cap_()", +"07fb37d4": "ChangePrice()", +"07fb462c": "SCEscrow()", +"07fb7c60": "getKudosSentFromTo(address,address)", +"07fd3687": "Seller()", +"07fe178b": "HLCoin()", +"07fee2a6": "presaleStartedAt()", +"07fee501": "getNumberOfFirstBuyer()", +"07ff1413": "multiBatchSafeTransferFrom(uint256[],address[],address[])", +"07fffa9d": "privateDiscountPrice()", +"08003f78": "burnTokens()", +"0800a05f": "cryptoStorage()", +"0800b89e": "setCategoriesCreator(address)", +"0800e300": "getComment(uint256)", +"08016f6d": "firstRefundRoundRateNumerator()", +"0801baca": "talkToWorld(string)", +"08020361": "distributeFixed(uint256,address[],uint256)", +"0802350d": "testThrowExecuteSellOrderChecksAmount()", +"08029105": "InvestFund()", +"08038a29": "createCarToken(string)", +"0804d013": "ProcessedInvestment(address,uint256,uint256)", +"08051004": "AddNewPhase(uint256,uint256,uint256,uint256,uint256,uint256)", +"08054fd5": "RevokeBid()", +"080571eb": "mintAndTransfer(address,uint256)", +"0806506e": "bigId()", +"080692bd": "setEtherPriceInUSD(string)", +"08071c05": "addit(uint256,uint256)", +"08081302": "clearClaims(uint32,int256)", +"08083039": "isSponsor(uint32,uint32)", +"0808f3eb": "canBuy(address)", +"08093ff6": "post(string,address[],uint256[])", +"08098336": "balanceWinPoolToTeam()", +"080991e4": "Trustless_Transfer(uint256,address,address,uint256)", +"0809f95d": "Asset(string)", +"080a57f9": "whitelistAddr(address)", +"080b2356": "AirEX(uint256)", +"080b2a86": "getTicketsCount()", +"080b3713": "createWinner()", +"080bdfa8": "brokerVerifierContract()", +"080bfdeb": "kindCount()", +"080c8a83": "unlock(bytes,bytes,bytes32)", +"080ca381": "totalDivided()", +"080d840c": "getRandomValue(bytes32)", +"080e74f7": "lotById(bytes32)", +"080f27f3": "view_readyTime()", +"080fbebf": "setup(uint256,uint256,address)", +"080fd28a": "regulatorApprovedKycProvider()", +"0811dda0": "SolarEclipseToken()", +"0812226e": "approveOrderHash_(bytes32)", +"0812cfbf": "registerInvestorAccount(address)", +"08148f7a": "timeout(uint256)", +"0814931a": "canTake(address)", +"08151de1": "attack(uint256,uint256,bytes)", +"0815711a": "hmultiply(uint256,uint256)", +"08165230": "TarynToken()", +"08167a4e": "getJsonToValue(string,uint256,uint256)", +"08171d30": "numOfFinishedPromotions()", +"081780f4": "clearRecord(bytes32)", +"0817e5c1": "upgradeM5(address,address)", +"081812fc": "getApproved(uint256)", +"0818d1da": "VestingCreated(address,address,address,uint256,uint256,uint256)", +"08190cda": "HT()", +"08195e10": "makerFeeRateE4()", +"0819815e": "addressPositions(address,address,uint256)", +"081b8bb4": "refreshVoteForAllByIndex(uint256)", +"081bde95": "buyTrack(address,bytes32)", +"081bf263": "isOOB(uint8,uint8)", +"081ce187": "disallowAddressToSendMoney(address,address)", +"081d203e": "plantedRate()", +"081d5380": "sendFundsToManager(uint256)", +"081e1b12": "giveEther()", +"081e21b4": "allowancePaillier(address,address)", +"081e806d": "PayOut(uint256)", +"081f74c6": "ArchiveCreation()", +"081f9190": "DiscToken()", +"0820b7c9": "activePresale(uint256)", +"082104e3": "boxChoice(uint256)", +"082152b4": "toB32(uint256,bytes,bytes)", +"08216c0f": "createHumanStandardToken(uint256,string,uint8,string)", +"08218c98": "trade(address[3],uint256[4],bytes,uint256)", +"0821c87e": "sanMaxFree()", +"082346d9": "recoverAllFunds(bytes32,uint64,bytes32[],uint256[],uint256[2])", +"0823b38d": "calculateAveragePixelPrice(address[16],uint256,uint256)", +"0823d3a7": "Voted(address,bool,string)", +"082442f5": "feePayee()", +"08245f90": "testAbsMin()", +"08252f03": "CodeFundToken()", +"0827940f": "quitArbitrator()", +"0827ab43": "tokenRate10()", +"0828799b": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[4])", +"08290dc5": "setMaxSale(uint256)", +"082a4513": "releaseAllOnceLock()", +"082a7e60": "ODD()", +"082a8c4e": "arenaContract()", +"082b57e9": "TIER4_PRICE()", +"082b7c57": "FeesPayout(uint256)", +"082bd485": "BLAINetworkToken()", +"082c250c": "MDD()", +"082d7187": "mintFish(address[],uint32[],uint8[],uint8[],uint8[],bytes16[])", +"082d8f49": "left41(uint256)", +"082e0f6f": "makeupLegendary(uint256)", +"082e2814": "startDividendsPeriod()", +"082e6d81": "receivePriceFromOracle(uint256)", +"082f699e": "tokenReleaseAtStart()", +"082fa708": "tokensPerTrunche()", +"0830602b": "registerName(string)", +"08306af3": "PAYOUT_FRAC_BOT()", +"08314798": "setTokenSeed(uint256,string)", +"0831fb6c": "getWinnerListLength()", +"0832b925": "allowance(address,bytes32,address,address)", +"0832cf68": "FTNTCoin()", +"0832ff59": "Mentoscoin()", +"0834ab44": "cancelWagerOfCard(address)", +"0834d1e7": "getBetsSumByAgentId(uint256)", +"0834fe80": "LitecoinOne()", +"0835b8b2": "start2BonusPeriod2()", +"0835e754": "sendToRST(address)", +"08366c9d": "removeCZRLock(address,uint256)", +"0836d160": "WithdrawDividends(address,uint256)", +"08378040": "dayStartTime()", +"083903de": "setExchangeRateAgent(address)", +"0839e0fb": "migrationReceiver_setup()", +"0839f2ee": "WinbitToken(uint256,string,string)", +"083a0436": "getSentTransactionData(uint256)", +"083a3a74": "returnTokensToExchange()", +"083ab393": "bonusTokenRateLevelThree()", +"083ae00e": "postWish(bytes,bytes)", +"083ae1fe": "setPackage(string)", +"083b2732": "callback()", +"083baf15": "get_participant_arbits(address)", +"083c6323": "endBlock()", +"083cadf0": "approveInternal(address,uint256)", +"083ccc8a": "_forwardFunds(address,uint256,uint256,uint256)", +"083d13c4": "returnTokenDepositState(address[2],uint256[8],uint8,bytes32[2])", +"083d4aa5": "QoToken()", +"083d9e6d": "period4End()", +"083eb6f8": "icoSaleHardCap()", +"083ed817": "getEmployerJobsForFreelancerInvite(address,address)", +"083eea12": "Unfrozen(uint256)", +"08404ac8": "ERC20dex()", +"0840972b": "setClue(string)", +"0841abd2": "verifyNextTurn(uint256,uint256[3],uint256[3],uint8[176])", +"08421645": "changePresaleTimeRange(uint256,uint256)", +"08421e7f": "paymentsByAddress(address)", +"08434ef5": "updateRequestSeed(bytes32,bytes32)", +"08436588": "getUsersAwaitingForTokensTop150()", +"08447aef": "KudosTokenLockup(address,address)", +"08447c9f": "SilverWhitelist(address,bool)", +"0845817c": "resetCommission()", +"084592cb": "turnon()", +"0845e2d8": "SingularityTest2()", +"08464b68": "changeAREFWallet(address)", +"0846c0ee": "invalidate(string)", +"0846ca3c": "deleteAccounts(address[])", +"08474d2a": "judgeReleaseRecordExist(uint256)", +"084794f8": "_devFeesAddr()", +"0847e9fa": "numDarknodesNextEpoch()", +"084992a6": "closeChannel(address,uint8)", +"0849a197": "EventUpgradeCar(address,uint32,uint8,uint8)", +"0849cc99": "getArrayLength()", +"084a4011": "whitelistBonusSent()", +"084ab6f5": "requestLoan(address,address,uint256,uint256,uint256,bool,string)", +"084b410d": "getNormalCard(address)", +"084b8246": "getOwnedAndTotalTokens(bytes32,address)", +"084b8f8d": "set_presale_arbits_sold(uint256)", +"084bbafb": "update_entity(address,string)", +"084bdabe": "vestedBalanceOf(address,uint256)", +"084ccb41": "cBAListLength()", +"084ce708": "pay(address[],uint256[])", +"084d113b": "addMerkleTreeRoot(uint8,bytes,bytes)", +"084d72f4": "getWinningOutcome(uint256)", +"084ee60f": "convertWeiToTokens(uint256)", +"084fa898": "Raffle(uint64,uint32,uint256)", +"08508b8f": "hasBeenDeployed(address)", +"0850de0c": "_setUserInfo(address,uint256,uint256,address,address)", +"0850e4c3": "Sunny2()", +"0851762a": "transferLockedToken(address,uint256,uint256)", +"0851d08c": "setChainType(string)", +"08528190": "changeRegulator(address)", +"0852aa9d": "maafakaToken()", +"08534888": "privateSaleReleased(address)", +"0853b015": "lastBetUser()", +"0853e875": "adjustTradeRange(uint256,uint256)", +"0853ea45": "_stringToBytes32(string,string)", +"0853f7eb": "frontRunnerPeriod()", +"08540812": "removeContractFromTokenFallbackWhiteList(address,address)", +"085431f4": "getGameProprietaryData(uint256)", +"085487a5": "Shiva()", +"0854f856": "getPoolInformation(address)", +"08551a53": "seller()", +"08551d34": "haltPurchases()", +"085554a4": "DHUB()", +"08555a0a": "secondStageRaisedInWei()", +"085634ec": "changeStatus()", +"08567a87": "removePoliceNode(address)", +"08573a0b": "reservePunksForOwner(uint256)", +"08587a76": "_scheduleCall()", +"08595e5e": "puppySports()", +"0859e844": "getEthRate(uint256)", +"085a1daa": "startCollection()", +"085a3600": "_exchangeMatronSireId(uint256,uint256)", +"085a4705": "issueAsset(bytes32,uint256,string,string,uint8,bool)", +"085ba55b": "getRoundStageEndInfo(uint256)", +"085bcb34": "getSamplesForJingle(uint256)", +"085c1cee": "teamTokenBonus()", +"085ca4e3": "preIcoEndBlock()", +"085ca679": "setAirDropShadowTag(bool,uint256)", +"085ca94e": "payFiat(address,uint256,uint256)", +"085ceb30": "tokensCap()", +"085d1973": "getContributorByIndex(uint256)", +"085d4883": "provider()", +"085d9335": "participantBonus(address)", +"085dedf1": "init(uint256,uint256,address,uint256,address,uint256,uint256,uint256,address,uint256)", +"085e658c": "setSpecialWallet(address)", +"085e9579": "getCompte_35()", +"085f8ebb": "transform(uint64,uint64,uint64,uint64)", +"085fa50a": "changeMainContractInCoin(address,address)", +"085fd114": "o3Address()", +"085ff39a": "getPremiumCarsForVariant(uint256)", +"086013c0": "stackOwner(bytes32)", +"08604366": "nextPayeeIndex()", +"0860a902": "ownerBurnUnsoldTokens()", +"08612c35": "getReservedTokens(uint8)", +"08614362": "donateTokens(address)", +"086146d2": "getCurrentPeriod()", +"086282b9": "getIpfsHashToTokenId(string,string)", +"0862fdf3": "plantToken()", +"08637d20": "bountyPool()", +"08658523": "FraCoinAuct(string,uint256,uint256,address)", +"0865dadc": "setAdminContract(address,bool)", +"086610d2": "currPicHash()", +"086677de": "personalMaxcap()", +"08669aab": "withdrawInterest(uint256)", +"0866efcc": "FineArtCoin()", +"0867ecf3": "SimpleCustodian()", +"08681a74": "timeOfLastOwnerWithdrawal()", +"086914c3": "saleDateStart()", +"086949b7": "get7()", +"0869b302": "setBeneficiaryAddress(uint256,address)", +"0869db30": "emergencyWithdrawalActivated()", +"086a1b86": "walletForBounty()", +"086a9cd8": "AddMultipleItems(uint256,uint8)", +"086ac6d7": "setDeprecated(uint256)", +"086ae9e4": "getCallGasUsed(bytes32)", +"086af728": "moveUnsoldTokensToICO()", +"086b339e": "baseACL()", +"086b60dd": "contributionAmount(address)", +"086b8331": "requiredLockedForColorRegistration()", +"086ba261": "deleteIssuer(address)", +"086bdf2d": "nameArt(uint256,string)", +"086c2e09": "drawEther()", +"086c875b": "NewCloneToken(address,uint256)", +"086df89e": "withdrawPowhDivs()", +"086e4e52": "setCompte_23(string)", +"086fb1f8": "setFirstLogEntry()", +"086fd46b": "getAgreementsCount()", +"08700f0b": "MonaLease(string,uint256,uint256,address)", +"087038db": "switchLiquidity(bool)", +"0870607b": "addSubUser(address)", +"08707031": "setCryptoCupTokenContractAddress(address)", +"0870803d": "TermsOfUSe()", +"0870f1ff": "FundingProposalAdded(uint256,uint256,bool,uint256,address,uint256,uint256,uint256)", +"08714bfa": "TestContract()", +"0871968b": "isOverBalanceLimitHolder(address)", +"087205f0": "getTokenByID(uint256)", +"08722e78": "ethVerify()", +"0872c813": "closeBeta()", +"087380ca": "setSpecialAttack(uint256,uint8)", +"0874ba06": "player5Timestamp()", +"0875029e": "POXToken(address,address)", +"08752869": "buyXname(uint256,bytes32)", +"08753085": "MAT_TEAM_SUPPLY_LIMIT()", +"08761432": "onReceive(address,address,uint256,bytes)", +"08768c04": "setFundsCreditBondContract(address)", +"0876eb00": "ownerMigration(address)", +"08774410": "changeBridge(address)", +"08782469": "Akilos()", +"0878424f": "vota(bytes32,bytes32)", +"0878833d": "fourth_whitelistSupplier()", +"08789521": "revokeRole(address,string)", +"0878bc51": "getAttachesto(uint8)", +"087905c9": "getMiningEpoch()", +"08796ea0": "deployBTTSTokenContract(string,string,uint8,uint256,bool,bool)", +"087b230c": "getNextStageStartTime(int256)", +"087bb610": "USDXGE()", +"087c0055": "setIcoLockUntil(uint256)", +"087c7863": "testtop2()", +"087ca568": "setGalleryOnePrice(uint256)", +"087cbd40": "setStore(address)", +"087ccebe": "POOL_EDIT_3()", +"087ce940": "CPCEPrivateDeposit()", +"087da715": "removeStorage(string)", +"087ded64": "ChildChains()", +"087e055a": "getConfigBool(bytes)", +"087e5b5f": "ShiftContract()", +"087e926c": "setId()", +"087ee4c6": "random(uint8,uint256)", +"087f4ece": "limitTeamType()", +"087fc48b": "claimLoanToken()", +"088061bd": "momentSenderOf(uint256,uint256)", +"0880fb66": "transferOwnershipReceive()", +"0881acd3": "getWeiCollected()", +"0881fa0d": "shop()", +"08824fb7": "createCitizen(uint256,address)", +"088266b5": "isClearTime()", +"088322ef": "tradeWithHint(address,address,uint256,address,address,uint256,uint256,address,bytes)", +"0883cb04": "ERC20Batch(address,address)", +"0884e5d6": "RocketCoin()", +"08853525": "round6TokensRemaning()", +"08867fc2": "REFUND_POLL_DURATION()", +"088787a3": "getMultiLedgerValue(string,address,address)", +"0888ad41": "PFCCContribution()", +"08891c0a": "addVoter(address,address,bytes32)", +"088947a0": "universalexchangertoken()", +"088ae6e5": "releaseCreatedCount()", +"088b513e": "getAffiliateSender(bytes32)", +"088c20de": "IcxToken(uint256,address)", +"088cbf7e": "incrementRate()", +"088df612": "cancelTokenSale(uint256,bool)", +"088e3595": "GoldVein(string,string,uint256)", +"088ee7ec": "bountyTokenIssuedTotal()", +"088f11f3": "punksOfferedForSale(uint256)", +"088f5e58": "mergeCard(uint256,uint256)", +"088f87e0": "refundAlienDeposit(address)", +"088fc1a8": "movePendingToSetting(uint256)", +"08901fce": "expand(uint256[])", +"08908579": "KAL2Token()", +"0890e86e": "icoMinimumWei()", +"08910fe6": "getSpinResults(uint256,address,uint256)", +"08911cd5": "settokenDeployer(address)", +"0891f387": "getPaintedPixelsCountByAddress(address,address,uint32)", +"08927a67": "Jcoin()", +"089327de": "MyToken()", +"08933d11": "getJoinBlock(address)", +"08936ac0": "_removeContract(address,uint256)", +"08937f62": "transferChildToParent(uint256,address,uint256,address,uint256,bytes)", +"08941307": "getParametersHash(uint256[12])", +"0894183d": "priceof()", +"08946081": "setSalesFinished()", +"08949a76": "getNumberTwo()", +"0894bdf2": "setBehalfer(address)", +"0894c6c1": "queryDataInternal(address)", +"08956746": "erotixFundMultiplier()", +"08956ff8": "syncFunds()", +"089587cd": "getServer()", +"089620fc": "transferGrantJoinAddr(uint256,uint256)", +"08968426": "unfreezeDeposit(address,uint256)", +"0896937e": "MultiTransfer(address[],uint256[])", +"0897bf6f": "releasedRecordsCount()", +"089854fe": "LLG(uint256,string,string)", +"08988822": "RareAsset(bytes,uint256,bytes,bytes,address)", +"0898deeb": "op2()", +"0899146b": "lock(bytes32,address,uint256)", +"089922b5": "burnUnicorn(uint256)", +"08998acb": "contributionCapInWei()", +"08998c93": "activeBalance()", +"0899a99c": "canIssue()", +"089a15e4": "songTitle()", +"089aa819": "weiPerInitialHONG()", +"089ac36f": "distributeCards(uint256)", +"089ae962": "EOSGOLD()", +"089af913": "endNumber()", +"089b4d46": "totalCookieProduction()", +"089bb99a": "changeNameAndSymbol(string,string)", +"089bead1": "changeOuts(address,address)", +"089c22ad": "recoveryAfterPeriod()", +"089c9964": "setFriend(address)", +"089d1239": "Ssnc()", +"089d5200": "WILLTOKEN(uint256,string,uint8,string)", +"089d5c4a": "repr()", +"089dc937": "markAsReceived()", +"089e0ad0": "buildDSMap()", +"089ee2d6": "likeVoting(uint256)", +"089f7f85": "hasRisk(address,address,address,uint256,uint256)", +"089fa8b1": "trySolution(uint8[])", +"08a0f32f": "buyNow(uint256)", +"08a10ffe": "allRewPaid()", +"08a12b9a": "getBuyerFunded(address)", +"08a1360a": "publicSaleCapReached()", +"08a1b574": "getTokenProposalDetails()", +"08a2a386": "addProof(address,bytes32)", +"08a36a1c": "totalAmountWagered()", +"08a47243": "LCCToken()", +"08a47c32": "setVestingType(uint8)", +"08a4f072": "getParams(uint256)", +"08a60004": "LSDToken(uint256)", +"08a6077c": "tokenDistribution()", +"08a62d0a": "stopThrowing()", +"08a65591": "BUYGOODSWITHCRYPTODOTCOM()", +"08a6fb88": "setAdminsContract(address)", +"08a71396": "tokenRecovery(address)", +"08a80ff5": "transferAdminOwnership(address)", +"08a8ce1f": "setFactories(address[],bool)", +"08a91751": "getMyFairy()", +"08a9ba84": "setSourcePrice(address)", +"08a9dd29": "setEndEdit()", +"08a9ec7a": "startDApp(bytes32)", +"08aa3567": "BMPre_ICO()", +"08aa62c4": "industry()", +"08aa6a7e": "ContractorAdded(uint256,address,uint256)", +"08ab4097": "instruct_3()", +"08aba5aa": "setAccountBalance(uint256)", +"08abd7ff": "addArrayToWhitelist(address[])", +"08ac184b": "finishCurrentLimit()", +"08ac320e": "getAllGameAmount()", +"08ac5256": "maxValidators()", +"08ac782c": "lockTokens(uint256,uint256,bytes32)", +"08adf7b1": "transferFromMarketplace(address,address,uint256)", +"08ae8677": "pIDIndex_()", +"08aeda8b": "getEggPhaseList()", +"08af4d88": "allowAddress(address)", +"08af6ebc": "getEtherMonsterNumber()", +"08af723e": "calculateSha3(string)", +"08af84f0": "setAmountForPlayer(address,uint256)", +"08aff933": "hasConfirmed(uint256,address)", +"08b0e909": "initialExchangeRateForETH()", +"08b140dc": "Emergence()", +"08b1adf3": "RestoredInvestment(address,uint256)", +"08b27e3e": "transferAnyERC20Token(address)", +"08b309e3": "final_price()", +"08b3479c": "calcIOHash(bytes32[10])", +"08b370cf": "childExists(bytes32)", +"08b407da": "emergency(uint256,address)", +"08b40dc6": "CPGPEREGRINE()", +"08b4312b": "maximumRedeemable()", +"08b490f0": "EARLY_INVESTOR_AMOUNT()", +"08b4fa40": "GetClickPrice()", +"08b591a5": "revealOpen(uint256)", +"08b5a85a": "registerEndpoint(string)", +"08b6808c": "assignPartition(address,uint256,uint256)", +"08b6bb56": "playerTransactionList(address)", +"08b73b31": "setBurnAfterSoldAmount(uint256)", +"08b74d3c": "LogPolicyExpired(uint256)", +"08b7c13b": "getExists(bytes20)", +"08b7c837": "withdrawJackPot(address)", +"08b7fa31": "PriceFeed()", +"08b83b08": "appealOpen()", +"08b8d60f": "setAffiliateProgramAddress(address,address)", +"08ba7ee7": "setParties(address,address,address,address,address)", +"08bad193": "acceptSolution(uint256,uint256)", +"08bbd947": "globalTransferLock()", +"08bca566": "allocateTo(address,uint256)", +"08bd4d29": "ICO_CAP3()", +"08bd6e4e": "_activenessUpgrade(uint256,uint256)", +"08bddf32": "rescueAllRewards(address)", +"08bde7d4": "setMyContractt(address)", +"08be5bf3": "_doTransferFrom(address,address,uint256,bytes,bool)", +"08be8700": "increaseJackpot(uint256,uint256)", +"08bf2d0d": "getOrderBook(uint256,uint256)", +"08bfdd76": "refuseInvestment(address[])", +"08c01e5b": "Scicoins()", +"08c1090b": "getReferralAddress(bytes8)", +"08c2e0a6": "refundToBuyersIfSoftCapNotReached(uint256)", +"08c36eb0": "s30(bytes1)", +"08c372c3": "investSteps(uint256)", +"08c379a0": "Error(string)", +"08c3bf39": "upgradeCoinbase(address)", +"08c409bb": "numberOfCellsBought()", +"08c572b8": "PreIcoSupply()", +"08c5780a": "DU30()", +"08c7cf22": "Redeem(uint256,uint256,bool,address,uint256)", +"08c7e75c": "fechStageIndexByBlockNum(uint256)", +"08c87809": "maxFirstRoundTokenLimit()", +"08c8b880": "bonussale_EndDate()", +"08c8ba00": "BonusCalcPos()", +"08c977e7": "setMaxDexSize(uint256)", +"08c9ac21": "doubleBalances(address)", +"08caaa46": "UploadMusic(uint256,string,address,bool,uint256,uint256)", +"08cad05c": "bookerAddress()", +"08cb2e7e": "AJDToken()", +"08cb3b54": "GetUnpaid(uint256)", +"08cb4cb5": "releaseAmountPerDay()", +"08ce2136": "pricePreICO()", +"08ce9790": "updateOraclizeGas(uint256)", +"08d067bc": "indVestingDeposit()", +"08d0a7cf": "changeWhitelist(address)", +"08d0ca62": "TUINETWORK()", +"08d10c91": "TokenUnionToken()", +"08d233dc": "checkFunds()", +"08d299ba": "_setOutstandingPower(uint256)", +"08d317dd": "sellCrystal(uint256,uint256)", +"08d33e4c": "setAllocations(bytes32)", +"08d39380": "stageFourStart()", +"08d4073d": "startPreSale(uint256,uint256,uint256,uint256)", +"08d40e9c": "InvestorRefunded(address,uint256)", +"08d49d1f": "parseNewOrder(uint224,uint8,uint256[],uint256)", +"08d4ca92": "isImageOnSale(uint256)", +"08d4db14": "getBuyPrice(uint256)", +"08d50eb3": "_CAP()", +"08d605f2": "TrueToken()", +"08d68b97": "_getBlockCost(uint8,uint64,uint8)", +"08d6b4b9": "goldName()", +"08d7557a": "totalUsdReceived()", +"08d79718": "TilcoinStorage()", +"08d7aa9c": "houseTopUp()", +"08d7bd23": "toToken(uint256,uint256,uint256)", +"08d84b82": "ReleasedChanged(bool,bool)", +"08d90dc1": "BAHACAN(uint256,string,string)", +"08d9a77b": "addSaleWallet(address)", +"08daaf4a": "_premine()", +"08dbb18e": "getQuorumState(uint256)", +"08dc615c": "getWarrantyByIndex(uint256)", +"08dcf4f1": "setRollAddress(address)", +"08dd14fc": "defaultIcoStart()", +"08de68cc": "FootballerAccessControl()", +"08de795d": "testGetReceiptDetails(bytes)", +"08debacb": "ensureLoanBalance(uint256)", +"08def058": "mintme()", +"08df8602": "Futarchy()", +"08dfef4c": "upsertAll(address[],uint256,bool,bool,uint256)", +"08e05b85": "instantTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"08e12ad3": "addressOfERC20OldToken()", +"08e130c9": "setStables(address)", +"08e1438c": "everToken()", +"08e150db": "LogInvest(address,uint256)", +"08e2287c": "getPlayerVaultsHelper(uint256)", +"08e2cd00": "testFailTransferBeforeFinalize()", +"08e3399f": "hashes(address)", +"08e34e7f": "endBounty()", +"08e46cea": "processAndCheckParam(address,string,uint8[],bytes32[],bytes32[])", +"08e484a8": "doEscape(uint32,int256)", +"08e496ea": "vaultPercentOfTotal()", +"08e6b41c": "claimLegacy()", +"08e8000c": "transferSecurityDeposit(address,address)", +"08e88aa1": "newPackage(address,uint256[])", +"08e88ab9": "giveMultipleItems(address,uint256[])", +"08e8ac38": "hexStrToBytes(string)", +"08e929b1": "YunJiaMiToken()", +"08e93d0a": "getAllAccounts()", +"08e9988b": "airDropAmount()", +"08e9daa5": "countries(uint256)", +"08e9f758": "GenericCrowdsale(address,address,address)", +"08eb4e98": "cancel(address[5],uint256[6],uint256)", +"08ebbfc4": "AdminAccessTransferred(address,address)", +"08ebd3d3": "KBKToken()", +"08ec17a2": "testDeductCoin()", +"08ec6164": "colonyMultiSig()", +"08ec651f": "createDeklaBidAuction(uint256,uint256,uint16)", +"08ed0236": "setAirdropStatus(bool)", +"08ed8d16": "setTesting(bool)", +"08ed8e0c": "minimumBidAllowed()", +"08edf505": "claimH1()", +"08ee33af": "getRdFee()", +"08ee7325": "tokensPerCentsWeekOne()", +"08ee76a7": "dickbutt()", +"08ef59ff": "setBonusSystem(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"08efde8b": "DXYToken()", +"08f0b1b0": "PRE_WIN_MULTIPLE_PER()", +"08f10999": "beatGame()", +"08f12470": "getLockById(uint256)", +"08f14dd8": "ComputeMyDivs()", +"08f20630": "getWalletAddress(string)", +"08f235ec": "getDefaultPayment()", +"08f2e24c": "setFreelancerJobIndex(address,uint256,address,uint256)", +"08f2e704": "MBCash()", +"08f46b0a": "LeapCoin()", +"08f48256": "StorageEnabled(address)", +"08f53f44": "setAllowanceAddress(address)", +"08f68b90": "SetsecondTTax(uint256)", +"08f6e3b4": "BOUNTY_EXCHANGE_RATE()", +"08f7349a": "_addDistribution(uint256)", +"08f75d17": "move_reveal(bytes32,uint8)", +"08f7d570": "incrementalInverse(uint256,uint256,uint256,uint256)", +"08f9732b": "ForwarderTarget()", +"08f978c6": "migrationInfo()", +"08fa0e92": "canTrade(address[3],uint256[4],bytes)", +"08fa3b51": "approveCorrespondent(uint256)", +"08fae7db": "ICO_PHASE1_BONUS_PERCENTAGE()", +"08fb8a88": "changeServer(address)", +"08fc299b": "presaleMaxSupply()", +"08fc9ec8": "chunk6IsAdded()", +"08fcec89": "setNoteReportingGasPrice(bool)", +"08fd866c": "deleteAllCoverImages()", +"08fe23ca": "sq(uint256)", +"08ff597a": "tier_cap_3()", +"08ffce24": "predecessorAddress()", +"090015d8": "CONFIG_MAX_VALUE()", +"09004eb1": "getCard(uint8)", +"09007804": "getEOSKeyFor(address,address)", +"0900f010": "upgrade(address)", +"09010e53": "changeTransfer(bool)", +"09019ca0": "enter(bytes32,bytes8,uint32)", +"0901a3f1": "currentAllocations(uint256)", +"0902b25d": "maxEther()", +"0902c6d7": "testToUint(bytes)", +"0902f1ac": "getReserves()", +"0902f72f": "addOrder(bytes32)", +"090399fd": "announceWinner(address,uint256)", +"0904603e": "FTFNExchangeToken()", +"0904cb57": "gameStarted(uint256)", +"0905aa5c": "withdrawnTokens()", +"0905f560": "emergencyMode()", +"090637a1": "GetPart(bytes,uint256)", +"0908178f": "NoFeePonzi()", +"09081c51": "TCEToken()", +"0909338a": "emitHeartBeat(bytes32,int256,int256)", +"09094f7a": "ethWallet()", +"0909981a": "Created(address,address,bytes)", +"0909e8f7": "SafeModeActivated(address)", +"090a1f92": "RapidChain()", +"090b78e9": "setTrustedTokenHandler(address)", +"090b8d18": "SPIDER_BASE_REQ()", +"090bb93f": "mtcRate()", +"090bf3b7": "left29(uint256)", +"090c01d0": "editLimits(uint256,uint256)", +"090cebff": "unDelegate(uint8,bytes32,bytes32)", +"090cfb04": "DiamondscoinToken()", +"090d23b9": "setBank(address)", +"090d5386": "GDOAdv(uint256,string,string)", +"090d94cc": "WithdrawalsOpen(address)", +"090d993a": "updateParticipantCapTier1(uint256)", +"090e5465": "trainFee()", +"090e871f": "createNewSubtoken(uint256,address,uint256)", +"090ea6f3": "setProxyManagementAddress(address)", +"090f4465": "payoutDate()", +"090f92f7": "kittensRemainingForSale()", +"0910c715": "bringKydyHome(uint256)", +"091157cb": "getSerializedEmployee(address)", +"0911bdf7": "cancelTokenTransaction(address)", +"0911def1": "QoppaCoin()", +"0912d306": "TokensReceived(uint256,address,uint256)", +"0912fabd": "canWrite(address,bytes32)", +"09130ba1": "getEtherToBuy(uint256,uint256,bool)", +"09130f5d": "getAllMyTokensForAllEtherOnContract()", +"091356c5": "hasPrestige(address)", +"0913fc3a": "leekStealPot_()", +"09146664": "_burn(string,address)", +"0914a363": "cofoundersSupply()", +"09151f2d": "checkTotalPrizesWaiting()", +"09153f57": "unsoldVestingAddress()", +"0915db6d": "End9()", +"091621bd": "getHeadWalletList()", +"091691c5": "AgriChainNextData()", +"0916a263": "showLockTimes(address,address)", +"091734e0": "ROBEthExchangeRate()", +"0917f827": "JoannaToken()", +"09194fe8": "hasSponsor(uint32,int256)", +"091a79b2": "getVoteAndTime(uint256,uint256)", +"091a7a4b": "OperatorAdded(address,bool)", +"091ac806": "getGuestNotesInfo(bytes32)", +"091b3e6d": "transferMilestone()", +"091ba3da": "storeDataAndValue(bytes)", +"091cde0b": "DisbursementHandler(address)", +"091d2788": "GAS_LIMIT()", +"091d709b": "createVisa(address,uint256,bytes32,uint256)", +"091dbbd7": "currentEventId()", +"091dbc20": "ContractUpdate(address,address,uint256,uint256,uint256)", +"091dbfd2": "enterBidForPunk(uint256)", +"091dffca": "withdrawFromVault()", +"091e3f60": "getSponsorshipsAmounts(address,uint256[])", +"091e97f9": "sellnode(uint256)", +"091e9a60": "buyCoin()", +"091eea8f": "withdrawChildDao()", +"091f2f11": "getChildren(bytes32,bytes32)", +"0920829b": "adminGetPastShopFund()", +"0920d32c": "CardsRaffle()", +"0920d9a0": "getNumTokensForContributorInternal(uint256,uint256,uint8)", +"09214a07": "switchStage()", +"09218e91": "position()", +"0922e596": "paymentController(address,uint256)", +"09231602": "setGasPriceLimit(uint256)", +"09236161": "Craftmelon()", +"09241200": "wasSuccessful()", +"0924da5c": "resetHealthAndManaTimestamp(uint256)", +"0924fbba": "Imdex()", +"092501a0": "setCommission(uint32)", +"092518a7": "SecurityDeposit(address,address,uint256)", +"09260db7": "cut(uint256)", +"092626a7": "Bitcoin_address()", +"09262f71": "is_signed(address,address,bytes32)", +"09265805": "freeGiveProduce(uint256,string)", +"09267785": "notarizeTwo(bytes,bytes)", +"0926b32a": "getTokenSizes(uint256)", +"0926e6a2": "joinTeam(uint256)", +"09270ef4": "set_address(address)", +"09276ea4": "notifier()", +"092854e5": "cry()", +"092a2e37": "multiAccessAddOwnerD(address,address)", +"092a5cce": "destroyContract()", +"092a5fcd": "Devolver_Tickets(uint256)", +"092ac9e5": "approveByB(uint256,string)", +"092b25e9": "setOwner(string,address)", +"092c506e": "maxSGTSupply()", +"092d3de4": "closeAnyGame(uint256)", +"092dde45": "BteCoinToken()", +"092ecf1c": "raffleRewardAmount()", +"092f3623": "setBlockDotBlockHash(uint256,bytes32)", +"092f9d79": "DONATION_WALLET()", +"092fe5c5": "sendFirst(address,uint256)", +"093077ee": "calcRewardPool(uint256,uint256)", +"0930907b": "zeroAddress()", +"0930f27b": "QVT(address)", +"0930f6db": "getFunderContribution(address)", +"09310c61": "MinutemanToken()", +"0931ce67": "getAnimalsCount()", +"09320100": "addAllCandidates()", +"0932c3c6": "setPriceLocked(bool)", +"093376fe": "getOrders(address)", +"09339f2e": "lastSignedTimestamp()", +"0933a670": "offerOff(uint256)", +"0933b939": "renewMembership()", +"0933e3a7": "setRandomContract(address)", +"09357344": "setBuyExchangeRate(uint256)", +"09358584": "stageSupply()", +"0935fced": "Bhinneka(address)", +"09362a6a": "changeOwnerTwo(address)", +"09366ed2": "downdoot(uint256)", +"0937be1a": "createFixedPeriodVpfFactory(string,bytes32,uint256,int256[],uint256,uint256,uint256)", +"0937e68a": "paymentCount()", +"0937fb36": "getEventOutcome(uint256,uint256)", +"09386cc6": "leggiMsg(uint256)", +"0938be6e": "RockScissorPaper(address)", +"09390af1": "getPercentageAmount(uint256,uint256)", +"0939e863": "shareholder()", +"0939f6f4": "ContractFunded(address,uint256)", +"093a86d3": "gateways()", +"093ac512": "MINCAP_TOKENS_ICO()", +"093ae918": "ETH_EURCENT()", +"093c16db": "getActualTierIndex()", +"093c4ee6": "getChannelBalance(bytes32)", +"093c5284": "migrateFrom()", +"093d11a1": "getLocksAmount(address,uint256)", +"093d5fd4": "getOperationsLength()", +"093db6ff": "fetchOrderByIdWithWithPayer(string)", +"093e9633": "getNewDefaultPrice(address)", +"093f5198": "make(address,address,uint128,uint128)", +"09405164": "getOpenCandidates()", +"094111be": "FCMCOIN(uint256,string,string)", +"09412b53": "delBot(address,address)", +"09417110": "signatureBurnStatus(bytes32)", +"0942adbd": "getPetCardSeries(uint64)", +"09442d66": "getCurrentInvestments()", +"094455c4": "addProduct(string,uint256,uint256,uint256)", +"094493b9": "getAPAddresses()", +"0944e35d": "TimedCrowdsale(uint256,uint256)", +"09453628": "TokenERC20(uint256,uint8,string,string)", +"0945f04f": "completeWhiteList(address[])", +"09478fb7": "_totalEtherDonated()", +"09491490": "smsVerifiedBonusBps()", +"0949fcfe": "setInviteCollateralizer(address)", +"094b94c7": "BROKER_RESERVE_SUPPLY()", +"094c2919": "performWrite2()", +"094c491b": "rewardFiboken()", +"094c6f98": "TokenSaleFail()", +"094c8bee": "unlockSales()", +"094ca5f2": "RemoveAuthority(address)", +"094cd5ee": "deletePost(uint256)", +"094d583b": "_newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"094db54b": "private_setMaxMultiRolls(uint256)", +"094fb864": "getCampaignBudgetById(bytes32)", +"09508ce4": "getReportedMatches()", +"0950e4ad": "_getNextPrice(uint256)", +"0950fe78": "setSoftCapCHF(uint256)", +"09518753": "calculateTokenBuyPrice(uint256)", +"0951b3ac": "receivedDividends()", +"095228b5": "unfrozenType(string)", +"09522d7f": "reservedAllocation()", +"0952c504": "requestOwnershipTransfer(address)", +"09533303": "setWhitelistedUser(address)", +"095408a7": "addCustomSecurityToken(string,string,address,address,string,bytes32)", +"09541d48": "disqualifyBid(address)", +"0954896e": "MultivestUnset(address)", +"09553b28": "addressDev()", +"0955ae99": "getAds()", +"09574810": "getOperationsNumber()", +"0957c807": "setToForking()", +"0957de9a": "unsoldTokensWallet()", +"0958ab50": "isInvestAllowed()", +"0958f83d": "registerName(bytes32,address,uint16)", +"09598dfd": "finalizeBet(uint8)", +"0959bd1a": "redeem(uint256,address[])", +"095a9983": "ETUex()", +"095b697b": "setClearingPriceCode(bytes)", +"095bbe59": "findContractByModText(string)", +"095bcdb6": "transfer(address,uint256,uint256)", +"095c075e": "guessAnswer(uint256)", +"095cf5c6": "setTeam(address)", +"095d5a70": "approveRound(address)", +"095daeb1": "getVoterProposal(address,uint256)", +"095dc5cf": "removeVIP(address)", +"095e360e": "getMiningWarRound()", +"095e596f": "AccountVoid(address)", +"095e89ac": "setTranslatorRate(uint256)", +"095ea7b3": "approve(address,uint256)", +"095f2f16": "tech()", +"0960002f": "registerAff()", +"09603109": "Vote_Customly(address)", +"09607679": "changeTest(uint256)", +"0960db7c": "finalizeExit(bytes32)", +"096191dd": "executeBeneficiary(uint256)", +"0962f869": "_getList()", +"0963415c": "getSPBalance(address)", +"09639373": "createZombie(string,uint256)", +"0963b12d": "tokenChanged(address,uint256)", +"0963d4b7": "mintMonster(uint32,address,string)", +"096437bc": "TokenTes()", +"09648181": "refundDeadlineTime()", +"09648a9d": "getState(bytes32)", +"0965b0b7": "fechAllForCandidateByStage(uint256)", +"0965be64": "managerETHbonus()", +"0965bf7d": "processProposals()", +"0965c4b2": "collectedNDAO()", +"0965f6ac": "superPrivilegeCost()", +"0965fd36": "LaxmiCoin(uint256,string,uint8,string)", +"09660513": "getGameById(uint256)", +"09663cef": "getTotalPetCardSeries()", +"09671f79": "tokensCount(uint256)", +"0967417b": "getExpectedRate(uint256)", +"0967cff0": "setCrowdsaleStartTime(uint256)", +"096835e3": "NewOraclizeQuery(string)", +"09688000": "makePurchaseForClient(address,address,uint32)", +"0968f264": "withdraw(bytes)", +"096908f9": "_adeptToken()", +"09696f1a": "tokenHardCapReached()", +"09699581": "setPI_edit_13(string)", +"0969a71f": "POCG()", +"096a113d": "getCipher(uint256,address)", +"096a3778": "placeBet(bool)", +"096a8ab7": "setTransactionFee(uint256)", +"096aadce": "ownershipTransferCounter()", +"096ac348": "guagua()", +"096b4039": "bitlumensDelivered()", +"096c0c27": "amountOfLovers()", +"096c45b1": "setGasUsed(uint256)", +"096c9d6f": "getStartHourglass(bytes32)", +"096cf33f": "onlyDeves()", +"096d740b": "stopWork()", +"096e27d9": "isBeneficiary(address,address)", +"096e47ca": "SetConfirmRound(address,uint8,bool)", +"096f4090": "minecoin()", +"096f4a49": "CrowdSaleFinished(address,string)", +"097284b2": "maxSupply_()", +"09738d25": "preSaleHardCap()", +"09745c5b": "ShariqCoin()", +"0974f94c": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256)", +"0975c338": "DKK_Omnidollar()", +"097694e1": "getFileByIndex(uint256)", +"0976e9a7": "catchMonster(uint256,uint32,string)", +"09772f8f": "getMembersCount()", +"097788d7": "ADPOWER()", +"09779838": "changeKeeper(address)", +"09787a2c": "newComment(uint256,string)", +"09798e2f": "currentpreicobonus()", +"09799c01": "stopDate()", +"09799ead": "recoveryToString(uint256)", +"0979f7f2": "wagerCardForAmount(address,uint256)", +"097b36dd": "createUser(bytes32,string)", +"097b4eea": "addToReferrals(address,address)", +"097b557f": "cancelAuction(uint64)", +"097b94d1": "mediaTokensInitialSupply(address)", +"097bcf7b": "getEtherOrdersLength()", +"097c3ead": "AddGift(string,uint256,uint32[],uint256[])", +"097cf31c": "MengToken()", +"097d44a8": "setNFTAddress(address,uint256)", +"097d5155": "holdTime()", +"097d8376": "request(address,bytes,bytes)", +"097dced0": "updateLawyer(uint256,address)", +"097dfa2f": "placePurchaseOrder(bytes32)", +"097e8fad": "getTheInvestor()", +"097f1192": "Miners()", +"0980150f": "payInternal(address,address,uint256,address)", +"09801707": "DOWN_winRate()", +"09821095": "setDailyVolumeCap(uint256)", +"09824a80": "registerToken(address)", +"09828a47": "promoPause()", +"098300bb": "goldDecimals()", +"09838bd9": "maxTokensRaised()", +"0984f0c1": "sendMessage(bytes,bytes,bytes,bytes)", +"09850495": "minusFreezeEndTime(uint256,uint256)", +"09857955": "recordRoundProfit(uint256,uint256)", +"09861b81": "flooredSub(uint256,uint256)", +"0986e647": "getLength(uint256)", +"09879962": "namehash(string)", +"09886649": "transfer(address,string)", +"0988ca8c": "checkRole(address,string)", +"09894422": "TokensIssuedOwner(address,uint256,bool)", +"098956a8": "getOldRecordInHistoryRecord(uint256)", +"098a7259": "addAfterValidId(address,uint32,uint128,uint128,uint32)", +"098a7321": "firstDueDate()", +"098ab6a1": "snapshotCount()", +"098ae858": "ReverseConfirmed(string,address)", +"098b939a": "isEnoughConfirmed(bytes,uint256)", +"098bf5de": "requestTransferOfETH(address,uint256)", +"098c83fe": "notContractPred(address,address[],uint256)", +"098dbf5c": "executeTransfer(address,uint256,address)", +"098deeb5": "startScoring()", +"098e349a": "currentRoundParameters()", +"098e652b": "batchCreateAsset(uint8[],uint256[],uint256[],uint256[],address[])", +"098e8fc4": "setOffer(address,uint256,uint256)", +"098eb040": "contributeFiat(address,uint256)", +"098ed807": "productAccountsLength()", +"098f076e": "isRejected(uint256)", +"098fb45c": "setFeeDistributionsAndStatusThresholds()", +"098fc010": "LylToken(uint256,string,string)", +"098fe7da": "MYSLF()", +"099015d9": "totalBurnedOfType(uint256)", +"09904c00": "depositWallet()", +"09905bdb": "priceForVerificationInWei()", +"0991bb09": "makeSperm(address)", +"0991f5a6": "closingTimeForCloning()", +"099224e9": "TrexToken()", +"09929628": "Contractbalance()", +"0992e4c3": "contributorMaxCap(address,uint256)", +"09931e00": "QWoodDAOToken(uint256,uint256,uint256)", +"09936cd6": "FLescoin(address,address)", +"0993e87f": "setSellingPrice(uint256)", +"0994257a": "BitcoinSamaritanSupply()", +"0994a0a0": "DSTokenTest()", +"09957e69": "newSale(bytes,uint256,uint256)", +"099583de": "PRESALE_TOKEN_IN_WEI()", +"09959439": "check_rhash(bytes32,bytes32)", +"09959a95": "JCWCToken(uint256,string,string)", +"0995efb5": "isChainCode(uint32)", +"0996a625": "MSPPlaceholderMock(address,address,address,address)", +"0996b4cc": "BitChordCrowdsale(address)", +"0996e0e5": "periodITO_mainCapInWei()", +"09987f3c": "checkAllRewPaid()", +"09989c8b": "getCfiEstimation(address)", +"09990611": "weiPerBtc()", +"09999404": "subLoan(address,uint256)", +"099a019d": "getBid()", +"099a5ab8": "lastBlock_v2Hash_uint256()", +"099ae6bc": "flowerAuction()", +"099aea0a": "isWorking()", +"099b9531": "contractownsthismanyP3D()", +"099ba954": "eSwitchToken()", +"099c00b9": "GWCoin_v3(address,address)", +"099c4c7e": "setCaps(address[],uint256[])", +"099c7ab2": "freePeriodEndTime()", +"099dccc8": "getTeamMemberAddres()", +"099dde07": "maxTarget()", +"099e0a26": "listPairs()", +"099e4133": "backend()", +"099f40a9": "throwsWhenFinalizingNotEndedSale()", +"09a00fb1": "IcoToken()", +"09a02562": "getCensored(address,uint256)", +"09a0307d": "tipLockCheck(bytes32)", +"09a0cfe4": "changeChampsName(uint256,string,address)", +"09a14f2e": "linkSelf()", +"09a2b4ad": "asmSymbol(address)", +"09a38873": "purchaseTokens(uint256,address,uint256)", +"09a38f26": "feed100AndPay(uint256)", +"09a39777": "projectWorkStarted()", +"09a399a7": "personAdd(string,int256,int256,string)", +"09a3beef": "setTokenURI(string,uint256)", +"09a44334": "changeElection(uint256,uint256,uint256)", +"09a547bd": "approveAndCall(address,uint256,bytes,string)", +"09a555c0": "setIcoStart(uint256,uint256)", +"09a55b65": "votePreProposal(uint256)", +"09a69f57": "getRewardAmount()", +"09a71a00": "addTask(bytes,uint256,uint256,address,uint256,uint256,uint256)", +"09a71ffb": "feesProfitDeposit()", +"09a7dbb4": "CollectReturns()", +"09a7dd17": "PRE_ICO_SINCE()", +"09a8d3f5": "oneEth()", +"09a94a3d": "_initiateClaim(string,bytes32)", +"09a97b6f": "_getCategoryIdx(uint256)", +"09aa3dcf": "maxTokenPurchase()", +"09aa69c2": "cancelFlight()", +"09aa7b67": "_mint(address)", +"09ab5008": "ISeeVoiceToken()", +"09ab8a03": "privateEndTime()", +"09ab8bba": "delegateAllowance(address,address)", +"09aba9ab": "ETHWalletCreated(address)", +"09ac3b00": "remainderWallet()", +"09ad1c47": "getUserPayoutBalance(address)", +"09ad8eef": "TBSTK1()", +"09ad8f7e": "getNumChildOperation(bytes32,uint8)", +"09ad9dd3": "BASE_PRICE_IN_WEI()", +"09ae2943": "stage_3_TokensSold()", +"09ae9452": "PreICOProxyBuyer(address,uint256,uint256,uint256,uint256)", +"09aea85f": "getMaxTradeAmount()", +"09af014f": "refillBalance()", +"09af4b1e": "IoexCoin()", +"09af8ffe": "guessAnswer(bytes32)", +"09b0245f": "Long()", +"09b0ce3c": "DCVToken()", +"09b13db0": "fundraisingReservation()", +"09b17085": "___proxyOwner()", +"09b22a4d": "allowAirdrop()", +"09b230cd": "getPriceSpeedTokenBlock()", +"09b258f7": "exchangeRateIco()", +"09b2996a": "originalRate()", +"09b30ed5": "afterExecute(address)", +"09b481b0": "LIABILITIES()", +"09b565f3": "updateTicketSum(address,uint256)", +"09b5e4ad": "ProxyBuy(bytes32,address,uint256)", +"09b637bc": "_founder()", +"09b70ad0": "sellGenes(uint256,uint256)", +"09b7c704": "addIdArrayItem(address,uint256,string,string,address)", +"09b86f84": "getPonziFriend(address)", +"09b8e3cc": "ValidateExec(string)", +"09b8f77a": "proposedRecoveryKey()", +"09ba4a4a": "registerEmail(string)", +"09bb03b4": "isChemistry()", +"09bb317d": "FredToken()", +"09bb7162": "createGateway()", +"09bb9267": "getDev()", +"09bb9b04": "isEtherSpaceBattle()", +"09bc1812": "setVerificationPeriod(uint256)", +"09bc4096": "developersTokensPercent()", +"09bc4933": "freezeof(address)", +"09bc90a4": "PerlToken()", +"09bd1d41": "testF1(uint256)", +"09bd3894": "SendTokens(address,uint256)", +"09bd5a60": "hash()", +"09bd98a4": "getNumAds()", +"09beb01b": "feed50(uint256)", +"09bf284c": "unanchor()", +"09bf6e42": "futureSaleVault()", +"09c0f771": "getScoringMask(bytes8)", +"09c110a1": "gzeFromEth(uint256,uint256)", +"09c12ccb": "getNextPaymentDate()", +"09c1a4b9": "totalIssuanceData()", +"09c25e6c": "FinishedExporting()", +"09c2b7f8": "MINCONTRIBUTION()", +"09c38bc8": "isAuctionManager()", +"09c4a273": "isVetted(address)", +"09c4bb2b": "releaseTime(uint256)", +"09c4f8be": "GetContractStateTerminatedOK()", +"09c51b4e": "assertSaneHTLC(uint256,int256)", +"09c5eabe": "execute(bytes)", +"09c5eb76": "getBalanceOfLogicContract()", +"09c62a1b": "ONECToken()", +"09c62c5c": "vanbexTeamAddress()", +"09c71690": "tokenFallbackBuyer(address,uint256,address)", +"09c72b26": "bonusInPhase6()", +"09c76571": "operationAt(uint256)", +"09c8d173": "claim(bytes32,uint8,bytes32,bytes32)", +"09c922e6": "setOracleGasLimit(uint256)", +"09c95e10": "isPlayer(address)", +"09c975df": "getCallContractAddress(bytes32)", +"09c99d10": "_stalemateTransfer()", +"09ca4b76": "getCurrentPriceAuction(uint32)", +"09ca60c1": "createLambo(uint256,address,uint64)", +"09cb22d5": "betFeePerMil()", +"09cc4f95": "increaseTS(uint256)", +"09cc5551": "topUp(string)", +"09ce4a91": "RLCPerSATOSHI()", +"09ceb7be": "icoAmountBonus2()", +"09cf0329": "StarterKit(address,address,address,address,address)", +"09cf8766": "grantPrivatePurchaserToken()", +"09d02b74": "getRamdomness()", +"09d03d90": "FounderUnlock(address,uint256)", +"09d0b12e": "ViewMyTokens(address)", +"09d0bb66": "NeodiumNetwork()", +"09d11c1d": "ZhangToken()", +"09d2100d": "ADEToken(uint256,uint256)", +"09d256fe": "getPresaleRate()", +"09d2d0b9": "setServiceAccount(address,bool)", +"09d31d8d": "addPerson(bytes32,address)", +"09d33f1d": "addRequest(address,uint256)", +"09d37704": "pushIssuer(address)", +"09d3cbda": "setUpdateDelay(uint256)", +"09d451ab": "calculateEthersAmount(uint256)", +"09d45f1d": "_deleteString(bytes32)", +"09d46057": "IcoStageStarted(uint256)", +"09d54b21": "checkAddressTransfer(address,uint256,address)", +"09d60069": "trade(int256,int256)", +"09d60db1": "claimedTokensWallet()", +"09d64774": "DevForceOpen()", +"09d6796f": "our_transferFrom(address,address,uint256)", +"09d6b0a3": "transfer(address,uint256[],uint256[])", +"09d6d33a": "NewCup(address,bytes32)", +"09d74cc5": "createJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"09d77ad3": "Next(bool)", +"09d78e32": "ETCLocking(address,address)", +"09d78fba": "assertEq4(bytes4,bytes4)", +"09d7ab7a": "convertGene(uint8[7])", +"09d7e9ca": "decodedAsset()", +"09d84fc4": "bindingSmartIdentity(bytes32)", +"09d87ab5": "isAddressAuthorized(address,address)", +"09d89784": "TradeNetCoin()", +"09d8da2e": "isLock()", +"09d929d6": "releaseLockFounders1()", +"09d9f95e": "WinnerTakesAll()", +"09da52a2": "greet(address,string)", +"09da56c1": "getBoardBalance(uint256)", +"09db5d29": "notUsedToken()", +"09dba083": "GC()", +"09dc66af": "GT(uint256,string,string)", +"09dd0e81": "getBlockchainHead()", +"09dd1761": "attachPreOrder(address)", +"09dd7b3e": "paySize()", +"09ddc583": "getPropertyData(uint16)", +"09de4148": "getWinPercent()", +"09de92d0": "RENEE()", +"09df06b7": "TIE()", +"09df3248": "publicGetParticipants(uint256)", +"09df5060": "logoutUser(address)", +"09dfdc71": "currentPyramidBalanceApproximately()", +"09dfe330": "_checkItemId(uint256)", +"09e0a77c": "totalIco()", +"09e0a9eb": "batchBid(uint256[])", +"09e1a1f7": "PresalePurchase(address,address,uint256)", +"09e1c751": "CDPer()", +"09e24516": "ZepCloud()", +"09e25141": "bidInAuction()", +"09e2f193": "addVerificatorAddress(address)", +"09e419d1": "withdrawLongTermFoundationBudget()", +"09e587a5": "homicide()", +"09e6a0ed": "EASTADScredits()", +"09e76161": "getVideoGameDetails(uint256)", +"09e785e1": "payoutInterval()", +"09e7d837": "reachGoal()", +"09e7ec7a": "getInt256Max()", +"09e8046a": "fullfillAdvisors()", +"09e91cfb": "tokenUnits()", +"09e979e6": "getSquarePriceAuction()", +"09e9976d": "MetadataUpdated(address,uint256,string)", +"09e9c325": "createBooking(uint128,uint128,uint32,uint32,uint256,address)", +"09e9d7e2": "removeCandidate(uint256)", +"09e9e85b": "readAllUsers()", +"09ea63e3": "recoverPreSigned(bytes,bytes4,address,uint256,bytes,uint256,uint256)", +"09ebcd64": "getLockedUserInfo(address,address)", +"09ec6b6b": "supplyInterestRate()", +"09ec6cc7": "cancelTrade(uint256)", +"09ece618": "initiatable(bytes32)", +"09ecf413": "updateFoundAddress(address)", +"09ed1782": "withdrawCredits(uint256)", +"09ed4607": "clone()", +"09ed5022": "checkFileNamespace(string,bytes32)", +"09ed5673": "getScouponTransferCost()", +"09edf3ca": "x_Header()", +"09ee3e2a": "Global_Currency_Reserve()", +"09ee75a2": "documentIt(uint128,uint64,bytes32[],string,string,string)", +"09eecdd7": "isValidBet(uint8,uint256,uint256)", +"09eef43e": "hasVoted(address)", +"09ef7085": "is_name_used(bytes32)", +"09efcb8d": "fiatDeposits()", +"09f03da2": "getCurrentTimeRate()", +"09f0fe0d": "lamdenTau()", +"09f14a20": "addBuyerSig(string,string)", +"09f14e7e": "ownerSetExchangeRateInWei(uint256)", +"09f28927": "Crowdsale(address,address,address,address,uint256,uint256,uint256)", +"09f29d1b": "retrieveTokens(uint256)", +"09f2b6a9": "TokenBCC(uint256,string,string)", +"09f30eac": "unitTestSetRewardLevels()", +"09f32957": "lastCreditorPayedOut()", +"09f3ad26": "calcBonus(uint256)", +"09f41822": "batchVoteByIndex(uint256,address[],uint256[])", +"09f4614d": "product1()", +"09f4fc61": "addReferral(address,uint256)", +"09f580b0": "Bolivar()", +"09f5ca99": "GLBToken()", +"09f64d2e": "isIcoPaused()", +"09f68e96": "setPrivateSale(address)", +"09f6c607": "currentEthBlock()", +"09f70d2e": "getRequestHash(bytes,address[],uint256)", +"09f767e0": "deathFactor_iv()", +"09f80dd9": "feerate()", +"09f8477a": "getRandom(uint128,uint256)", +"09f8cc58": "upgradeAgentLocked()", +"09f90127": "fallback(address,bytes)", +"09f92a6a": "wordSize(string)", +"09f9630f": "BETHToken(address)", +"09f9b3c5": "getGrantBalance()", +"09fa6f96": "wpTokensBaskets()", +"09fa90b3": "globalLocked()", +"09fb1668": "changeMaxBetCoinDice(uint256)", +"09fba360": "alreadyHarvestedTokens()", +"09fbb22c": "decreaseGlobalInterestAmount(uint256)", +"09fc1ae0": "getCallTable(uint256)", +"09fc3c53": "burnWarrior(uint256)", +"09fc7046": "bytesToBytes2(bytes)", +"09fc8f6d": "isTokenUpgraded(bytes32)", +"09fc93c1": "getBalanceOfWei(address)", +"09fca951": "accumulated_from()", +"09fcda87": "PayPerView()", +"09fd018e": "setClaimer(uint256,address,uint256)", +"09fd8212": "isInWhitelist(address)", +"09fe5fbd": "CoinPaws()", +"09fe89c8": "privateBuyer()", +"09ff453a": "PFS()", +"09ff4b75": "Redenom()", +"09fffec0": "transferToAdmin(uint256)", +"0a0078bc": "unSet(address,address)", +"0a00840c": "challenge_period()", +"0a0092bf": "LakersvsRockets()", +"0a00ee41": "INNOToken()", +"0a0155e5": "passed(uint256)", +"0a01ad4d": "processWinner()", +"0a01ae41": "Supernova()", +"0a01bc2f": "WhitelistAddressisListed(address)", +"0a02037b": "girlOps()", +"0a0209d0": "soldTokensOnPreIco()", +"0a027825": "currentUnit()", +"0a0279f8": "determineDiscountTranche()", +"0a0313a9": "iterateValid(uint256)", +"0a0352d5": "_getOwnerNFTCount(address)", +"0a04dde8": "ThanosXToken(uint256,string,uint8,string)", +"0a0513da": "IEOEnded()", +"0a06f35e": "setBonusesForAmounts(uint128[],uint32[])", +"0a075a32": "spawnNewZeroCard()", +"0a07eadd": "systemWalletsMint(uint256)", +"0a07f3d8": "contains(uint8,uint8)", +"0a084473": "tokenPerEth()", +"0a08de75": "isContruibuteOpen()", +"0a0900a1": "buyXname(bytes32,uint256,bytes32)", +"0a09284a": "endsAt()", +"0a09815c": "presaleTokens()", +"0a0a2876": "killVesting()", +"0a0a876f": "stopSetPrice()", +"0a0b3139": "testFailOnFailedTransfer()", +"0a0c5e0d": "addSignature(string,string)", +"0a0c75aa": "setEmployeeSalary(uint256,uint256)", +"0a0cd8c8": "setupDone()", +"0a0d5509": "computeTimeBonus(uint256)", +"0a0e3c76": "nextMintFeeProp(uint256)", +"0a0e7883": "nDelegations(bytes32)", +"0a0e78e3": "addNOSPackage(uint256,uint256)", +"0a0f8168": "ceoAddress()", +"0a0fac2b": "isProxyOrSender(address)", +"0a0fb66b": "transferPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", +"0a10376f": "newReplyEvent(uint256,uint256,string,string,uint256)", +"0a107ac3": "setPI_edit_19(string)", +"0a10df7c": "bookingId()", +"0a114a70": "extendExpiration(uint256)", +"0a12a7a0": "LogContribute(address,uint256)", +"0a12c89e": "BTImint(address,uint256)", +"0a12c90f": "AddNewChallenge(uint256,uint256,uint256,uint256,bool,string)", +"0a1432f7": "openResult(uint256,uint8[])", +"0a14504c": "participate(bytes32)", +"0a14849e": "setOpenBetIndex(uint256)", +"0a15299b": "TourCash(uint256,string,string)", +"0a15a07f": "removeUnicorn(address,uint256)", +"0a15d3a8": "ETFT(uint256,string,string)", +"0a16605e": "receiveSpendingDeposit(address,uint256)", +"0a16697a": "targetBlock()", +"0a16916a": "RESERVE_POOL_TOKENS()", +"0a16a53f": "setCitizen(address)", +"0a16e225": "getrestrict(address)", +"0a16efc0": "_addCommittedValidator(uint256,address)", +"0a17d422": "isZero(uint256,string)", +"0a1856db": "Billing(address,address)", +"0a18c334": "Denar()", +"0a18edfa": "returnCouponProportion(address[3],bytes32)", +"0a18f6c1": "playForcibly()", +"0a19283c": "_createCryptsy(uint32,uint32,uint32,address)", +"0a1930b7": "LogDonation(address,uint256,uint256)", +"0a193612": "setCountry(address)", +"0a19b14a": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"0a1a677e": "searchtickets()", +"0a1a802e": "MatchPay()", +"0a1ab7fc": "arrayOfAccountsThatHaveClaimed(uint256)", +"0a1ceb0e": "usableBalances(address)", +"0a1dfb5a": "nextNextBid()", +"0a1e3a2c": "publishExecution(string,string,string,string,string,string)", +"0a1e71de": "isIco(uint256)", +"0a1e7701": "AtraOwner()", +"0a1e7a89": "getStudentRequest()", +"0a1e9f5e": "TokensOut()", +"0a1f0d9b": "reCap(uint256)", +"0a1f194f": "removeTrader(address)", +"0a1f5862": "minedTokenCap()", +"0a1f868c": "fuint256a(uint256[])", +"0a20aba4": "investOtherCrypto(address,uint256)", +"0a213e5b": "TWIMToken()", +"0a2282ae": "JackPot()", +"0a22ee73": "accountExists(address,uint8)", +"0a24c5bb": "yearlyMintCap()", +"0a2557d5": "wasInvestorWithdrawn(bytes32,address)", +"0a262f48": "setPreActiveTime(uint256)", +"0a26ccb1": "putBool(bytes32,bool)", +"0a276680": "transferOwnership(address,uint256)", +"0a27813d": "finalizedHoldingsAndTeamTokens()", +"0a28c664": "tokensOfWithData(address,uint256)", +"0a298034": "getFreeBulls()", +"0a29f508": "uploadSignedString(string)", +"0a2a9a01": "addWallet(address,uint256)", +"0a2ad0f3": "resetState(address)", +"0a2c0c65": "getAvailableVolume(bytes)", +"0a2cafac": "BPRchain()", +"0a2d31ad": "addToOptionChain(uint256,uint256[],uint256[],bytes32[],address[])", +"0a2d7629": "month12Unlock()", +"0a2d967b": "stopThisIco(bool)", +"0a2df1ed": "callSender(bytes4)", +"0a2eb301": "isAdministrator(address)", +"0a2ebc39": "NVISIONCASH()", +"0a2fd551": "ValidateKey(address,bytes32)", +"0a323fd0": "Boardcoin()", +"0a33cd41": "seIcoAddress(address)", +"0a35a7b1": "saleTierList()", +"0a36645f": "getShopOwnerProductList(string)", +"0a377f3a": "reserveKNCWallet(address)", +"0a384665": "maxTokensAmount()", +"0a38b400": "intermediadorAprovaDevolucao(bool)", +"0a394245": "doesReferralCodeValid(string)", +"0a39e222": "transferFromReserve(uint256,address)", +"0a3a0531": "manualContribution(address,uint256)", +"0a3b0a4f": "add(address)", +"0a3b1cd2": "setHotwallet(address)", +"0a3b7d9b": "TokenMacroansy()", +"0a3c000d": "buyerSymbol()", +"0a3c3088": "ARIZONE()", +"0a3c34fb": "successfulTransactions_()", +"0a3c4dbe": "merculetPrice()", +"0a3cb663": "freezePeriod()", +"0a3d7cce": "assertEq27(bytes27,bytes27,bytes32)", +"0a3dfba7": "giftCharacter(address,uint8)", +"0a3dfd10": "KittenTalked(string)", +"0a3e5712": "revokeWithdrawConfirmation(uint256)", +"0a3ecdfe": "drawNumbers(uint32)", +"0a3f013f": "releaseTimestamp()", +"0a3f5897": "placeBetEth()", +"0a401086": "operational()", +"0a402742": "allocateNormalTimeMints(address,uint256,uint256,uint256,uint256)", +"0a402a32": "LadaToken(uint256,string,string,uint8,address)", +"0a40878a": "EXSCoinSeller()", +"0a40f15f": "fundDeal(string,address)", +"0a40fb8c": "permissionMarker(address,bool)", +"0a412ae4": "aboveMinimumPurchase()", +"0a41442f": "setNewWallet1(address)", +"0a41dfee": "cancel_face_proof_request()", +"0a425a33": "getTreeIds(address)", +"0a42f86f": "getFrequency()", +"0a44b9cf": "amountIAmOwed()", +"0a4543ec": "MonoretoToken(uint256)", +"0a4625af": "totalEthers()", +"0a4655dd": "insert(bytes32,address)", +"0a46706b": "toCom(uint256)", +"0a47185d": "calcNav(uint256,uint256)", +"0a4740ff": "disableSale()", +"0a47a7a6": "mutiTransfer(address,address[],uint256[])", +"0a48dcb3": "appendUint8ToString(string,uint8)", +"0a49646b": "CreationRate()", +"0a49dece": "getDevelopmentFundBalance()", +"0a49e536": "getPoolAmounts(uint256)", +"0a4a3f0a": "GetConfirmRound(uint32,uint8)", +"0a4a57bc": "contain(uint256[],uint256)", +"0a4bb260": "buyItemAndApply(string,uint256)", +"0a4bfa6d": "IMDEXwithdrawToken(address,uint256)", +"0a4c374a": "birthPerTen()", +"0a4c6a45": "TEAM_UNFREEZE()", +"0a4caed0": "getChannelByRank(address,uint256)", +"0a4d564c": "TieUpLooseEnds()", +"0a4d7cd7": "setUserIdentityDocs(string)", +"0a4da2d4": "MyAdvancedTokenV2(uint256,string,string)", +"0a4dea01": "VETRI(uint256,string,string)", +"0a4fa201": "View_TrustlessTransaction_Status(uint256)", +"0a50e361": "generateNumberWinner()", +"0a513bc7": "CMBUpgradeableToken(address)", +"0a516805": "takerArguments(address)", +"0a518754": "periodICOStage4()", +"0a52d194": "payCommission(address,uint256,uint256)", +"0a55fbfe": "getMember(address,address)", +"0a56094d": "AriesToken()", +"0a56293d": "lockTokens()", +"0a564a03": "rateRound2()", +"0a569e8a": "currShares(address)", +"0a56a5f3": "nfsPoolLeft()", +"0a597da7": "impl_additionalRewards()", +"0a5988a8": "Term()", +"0a59b81b": "mesasCreated()", +"0a59bf2d": "setPersonalisationCost(uint256)", +"0a59c66e": "AuctusTokenVesting(address,uint256,uint256,uint256)", +"0a5a00c1": "recovery(address,address,uint256)", +"0a5a1e9a": "withDrawTips()", +"0a5a4e17": "AMBASSADOR_STAKE()", +"0a5a5b11": "releaseSecond()", +"0a5ab11d": "vestingWallet()", +"0a5ccb2a": "reclear(address,uint256,uint256,uint256,uint256,bool)", +"0a5cced2": "bookRoom(string,uint256[],uint256,address,bytes32,uint256,bool)", +"0a5cf9bb": "NeuralControl()", +"0a5dc24d": "getAuthorisationStatus(address)", +"0a5dc5a9": "blockMessagesFrom(address)", +"0a5de7bb": "midOf(uint256)", +"0a5ee9b0": "StakeReleased(uint256,uint256,address,bytes32,uint256)", +"0a5f558e": "mintInitialSupply(uint256[],address,address,address)", +"0a5f80f4": "publicAddDeposit(address,uint256)", +"0a6076b3": "SellableFund(uint256)", +"0a612095": "replaceToken(address[])", +"0a6184ce": "oneHundred()", +"0a623a11": "determineOutcome(uint8[],uint8[],uint8[],bool[],uint256)", +"0a62db33": "YToken(uint256,string,string)", +"0a639726": "oldPriceChangeBlock()", +"0a639ed1": "safeDiv_dec(uint256,uint256)", +"0a63ae38": "NukeContract(address)", +"0a64143a": "totalWithdrawn(address)", +"0a642d00": "retrait_3()", +"0a64bdb1": "_verifyOptionPoolDefray(address)", +"0a66d698": "isSealed(address)", +"0a67d2c7": "withDraw(address)", +"0a67dfbb": "setTeamTokenHolder(address)", +"0a681f7f": "NEXT_POT_FRAC_BOT()", +"0a68f374": "getATitty(uint256)", +"0a692347": "withdrawBack()", +"0a6a3f00": "B3nsToken()", +"0a6aec63": "cloneActiveToPlayed()", +"0a6b378c": "pushTokenId(uint256)", +"0a6be0e7": "BalancedPonzi()", +"0a6bea46": "principle(string)", +"0a6c0642": "frozenPortions(uint256)", +"0a6ee71a": "VISTACrowdSaleP1(address,address)", +"0a6ee947": "lockupContract()", +"0a6f2fbb": "setAllowDrawETH(bool)", +"0a6f5d8e": "_jackpotTax(uint256)", +"0a6fbb05": "SetPass(bytes32)", +"0a703549": "__forward(uint256)", +"0a70c0fd": "getTogglePrice(uint256)", +"0a70cae0": "getBalance2()", +"0a71943f": "PresaleToken(address)", +"0a71d020": "adjustFeaturePrice(uint256)", +"0a720fa9": "MemberSoldToken(address,uint256,uint256,uint256,uint256,uint256)", +"0a7258d8": "setNameWriterId(address,bytes32,bytes32)", +"0a728b85": "MakeSellOrder(bytes32,address,uint256,uint256,address)", +"0a732dac": "getCrowdsaleAddress()", +"0a7354d9": "getOwnedShipsByAddress(address)", +"0a738326": "Whitelist(uint256,address,bool)", +"0a738559": "AitasChain()", +"0a73f7c4": "GNNM(uint256,string,string)", +"0a740f74": "checkDatesPayment(address,uint256)", +"0a7493b4": "Etheropt(uint256,string,uint256,uint256,bytes,address,int256[])", +"0a74a181": "updatefundendtime(uint256)", +"0a751225": "shutDownDAO()", +"0a756f09": "StorageFund()", +"0a762b42": "PROMETHEUS_VOUCHER_PRICE()", +"0a766cfa": "sellCommission()", +"0a77b078": "Exchange()", +"0a77c3ed": "saleDuringRefundPeriod()", +"0a781bf4": "iCASH()", +"0a78e560": "PlayerNeedRefresh(address,uint256)", +"0a790e19": "MAX_ATHENIANS()", +"0a790eb7": "services(bytes32)", +"0a798f24": "openChannel(address,address,uint256)", +"0a799557": "setStartRefund(bool)", +"0a7a0807": "evaluateBet()", +"0a7a1c4d": "action()", +"0a7a2fef": "emitCapabilityRemoved(address,bytes4,uint8)", +"0a7a37bc": "setMonkey(string)", +"0a7a783a": "addOrg(address,address,string,string,string,string,uint8)", +"0a7a8c0a": "ItemMarket()", +"0a7c1922": "bitexlive()", +"0a7c1c35": "mItems(uint256)", +"0a7c1e9f": "NebeusToken()", +"0a7cf2aa": "weiHardCap()", +"0a7d29aa": "checkFunding()", +"0a7ead50": "_processPresalePurchase(address)", +"0a7f4239": "getAccountFundContract(address)", +"0a7f565f": "Intermediary()", +"0a7f734e": "_processTx(address,uint256)", +"0a7fb746": "removeMilestoneFrom(address,uint8)", +"0a7fc3df": "Sentivate()", +"0a80e725": "isReserveSupplyAssigned()", +"0a80ef45": "getIsClosed()", +"0a811fcc": "DigitalPesoCoin()", +"0a82f06b": "deleteCoverImage(uint256)", +"0a82fd1c": "deletePortfolio(uint256)", +"0a834ac0": "START_TGE()", +"0a85107a": "LogTransfer(address,address,uint256)", +"0a857040": "withdrawTrx(uint256)", +"0a85bb25": "isAuthorized(address,address,bytes)", +"0a864240": "TMBCStandardToken(uint256,string,uint8,string)", +"0a866f3a": "addThing(string,bytes32,bytes32,string)", +"0a86f644": "test_0_testBasicTxExecution()", +"0a87391c": "investorsAccounts()", +"0a874df6": "lookup(uint256)", +"0a875313": "createFunded(address,uint256,bytes32,bytes32,bytes1)", +"0a87557c": "ICO_END_TIME()", +"0a883790": "payrollCount()", +"0a888a63": "operation_address(uint256)", +"0a8972f9": "LoveAirCoffee(uint256)", +"0a898428": "nodesVars()", +"0a89e0aa": "switchModeSoOnlyEmergencyStopsAndEscapeHatchesCanBeUsed()", +"0a8a2485": "invite(address,bytes)", +"0a8b88f6": "SECOND_VOLUME_BONUS()", +"0a8bcdb9": "withdrawFromReserve(uint256)", +"0a8c138e": "NAABHAToken()", +"0a8c1551": "EtherAsset()", +"0a8d032d": "QuantumToken()", +"0a8d5fb8": "techProvider()", +"0a8e891f": "Medcash()", +"0a8e8e01": "test3()", +"0a8ed3db": "grantPermission(address,address,bytes32)", +"0a8f8fb9": "advisersReserve()", +"0a8fed89": "setup(uint256,uint256)", +"0a90011f": "setStatus(address,uint256,uint8)", +"0a90b578": "getLenderInterestForOracle(address,address,address)", +"0a90c704": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"0a9110b2": "NewDataRequest(uint256,bool,string)", +"0a919e3c": "QUEENTEN()", +"0a91cad0": "nextReleaseDate()", +"0a91f2a5": "get_owner_of(address)", +"0a9254e4": "setUp()", +"0a92b264": "getRandom(address,uint256,uint256,uint256)", +"0a934b9d": "mainSaleAllocations(address)", +"0a94031c": "GigaProfitIn(uint256,string,string)", +"0a94ece7": "nextUpgradeAgent()", +"0a95011e": "getCreateMarketNumTicksValue()", +"0a95c49d": "closeOutSweeps()", +"0a95dbfa": "approveUser(address,bytes32)", +"0a9626ba": "setLiqPrice(uint256)", +"0a968d5e": "issueFirstRoundToken()", +"0a979511": "gcExchangeRate()", +"0a9848ac": "setAdminlist(address,bool)", +"0a986540": "chinainc()", +"0a988892": "saveCurrentArbitrationFees(address,bytes32)", +"0a9a70c0": "changeDevFeesAddr(address)", +"0a9a7842": "logAllStop()", +"0a9aa521": "callAMethod1(uint256,uint256,uint256,uint256)", +"0a9ac3d0": "getMarketerAddress(bytes32)", +"0a9ae69d": "bb()", +"0a9d4e95": "_buy(uint8,bytes6,uint32,uint32)", +"0a9de288": "distributeTokens(address,address,address,address,address,address)", +"0a9e24c1": "addBurnWallet(address)", +"0a9ef927": "newTimeLockedWallet(address,uint256)", +"0a9fc06f": "verifyProposal(bytes32,address,address,uint256,bytes32,string)", +"0a9fec36": "sPeriodSoldTokensLimit()", +"0a9ff623": "voteUID()", +"0a9ffbf9": "confirmDividend(uint256)", +"0a9ffdb7": "allocateToken(address,uint256)", +"0aa0903c": "MINIMUM_PRESALE_PURCHASE_AMOUNT_IN_WEI()", +"0aa0bd00": "getPartyB(bytes)", +"0aa0fbe5": "netContractBalance()", +"0aa1ae29": "SMCT()", +"0aa1ee4c": "membersWhiteList()", +"0aa20e73": "multiTransfer(address,address[],uint256)", +"0aa24f50": "adjustInvestorCount(address,address,uint256)", +"0aa28f09": "splitInService()", +"0aa2b673": "cumReqMarbles()", +"0aa2bbaa": "lastWillAccount()", +"0aa2bf7f": "test_26_assertGasUsage2000Boards()", +"0aa34c7c": "updateJMAmount(uint256)", +"0aa3ae7e": "refill(address,uint256)", +"0aa46c12": "testClearBitFailIndexOOB()", +"0aa5418f": "IrfanFr()", +"0aa56368": "claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", +"0aa59fe3": "miningFivePlat()", +"0aa5aa2d": "transferAndNotify(address,uint256,uint256)", +"0aa6d45d": "oraclize_randomDS_proofVerify__main(bytes,bytes32,bytes,string)", +"0aa7881a": "MintableToken(int256,uint256)", +"0aa79fc6": "refundParticipant(address)", +"0aa83f5a": "consume(uint32,uint32)", +"0aa86791": "NujaBattle()", +"0aa93fff": "updateBytes32s(bytes32[],bytes32[])", +"0aa9a4fb": "payPrize(address,uint256,uint8,uint256,uint256,uint256)", +"0aa9c58b": "fillOrKillOrder(uint256,bytes)", +"0aaa9e46": "TNT()", +"0aaba432": "salesVolume()", +"0aac1073": "getSwapOutgoing(uint256)", +"0aac5dfd": "getAssetsCount()", +"0aac8034": "prizeWinners()", +"0aad1f3b": "fechSumNumForCandidateByStage(address,uint256)", +"0aad8ef9": "removeTypeAddressById(uint256,address,address,uint256)", +"0aae7a6b": "info(address)", +"0aaef916": "addManyWhitelist(address[])", +"0aafa40e": "IOVOToken()", +"0aafefb8": "QPay()", +"0ab03e1b": "testControlRegisterContractAgain()", +"0ab0c6c8": "getWinnablePot(uint256)", +"0ab0df87": "timeStamp()", +"0ab174a3": "untrack(uint256)", +"0ab21db7": "sencEthRate()", +"0ab2a9b8": "modifyJurySize(uint256)", +"0ab3bb1b": "totalFundingGoalInIBC()", +"0ab41690": "_forfeitShares(address,uint256)", +"0ab44f74": "AllNewsCash()", +"0ab4846c": "rewardLast7Draw(uint256)", +"0ab4c065": "subdomainOwner(string,string,string)", +"0ab4ca55": "registerNameXaddr(string,address,bool,uint8)", +"0ab4debd": "shortBuy()", +"0ab51bac": "aum()", +"0ab58ead": "SingularDTVFund()", +"0ab5bed4": "platformWithdrawAccount()", +"0ab66be3": "paySubscription(address)", +"0ab68776": "addDiscount(uint256,uint256)", +"0ab6ead5": "Ended(address,uint256)", +"0ab6fb36": "capitalPoolOf(address)", +"0ab6ff19": "addFullFundTX(uint256,uint256)", +"0ab757df": "withdrawEIP777(address,address,uint256)", +"0ab763d0": "polyCustomersAddress()", +"0ab77095": "assignUnitRafflePrize(address)", +"0ab7ec3a": "rejectProject(address)", +"0ab84ed9": "pivx()", +"0ab85a10": "getTotalRewards(uint32)", +"0ab880e5": "resumeBuy()", +"0ab8afac": "auctionContract()", +"0ab9059c": "OrphanToken(address)", +"0ab93971": "GetCount()", +"0ab9419d": "addint256(int256,int256)", +"0ab9db5b": "banker()", +"0aba73d7": "getDealById(uint256)", +"0aba8ec2": "brokerImp()", +"0aba980f": "unblockFundsInEscrow(address,uint256,address)", +"0abb691b": "buynode(uint256)", +"0abb8409": "getPoolETHBalance()", +"0abbf2de": "TeamLocker(address,address[],uint256[],uint256)", +"0abcbbcd": "makeShitClone(address)", +"0abd171b": "setinfo(string,string,string,address)", +"0abd2ba8": "tokenPause()", +"0abe293d": "addRefiller(address)", +"0ac0b31f": "calculateMultiplierAndBonus(uint256)", +"0ac10c0d": "createVesting(address,address,uint256,uint64,uint64,uint64)", +"0ac153ac": "lockMax()", +"0ac168a1": "blockReward()", +"0ac1a281": "CapRevealed(uint256,uint256,address)", +"0ac25e1a": "createPromoClown(uint256,address,bool)", +"0ac28725": "requestTradeDeal(uint256,uint256,string)", +"0ac298dc": "get_owner()", +"0ac2a1c7": "bonusDeliverTime()", +"0ac2ae27": "MarketContractOraclize(string,address,address,uint256[5],string,string)", +"0ac2ffc5": "getMiniByOwner(address)", +"0ac313e0": "setPlatAuction(address)", +"0ac3ccc4": "calcBUYoffer(uint256,uint256)", +"0ac42534": "isCancellable(address)", +"0ac50a6e": "CPCToken(uint256,string,uint8,string)", +"0ac51bd7": "getTimestampsFromPublishers(address[],string[],int256[],int256)", +"0ac5a67f": "paymentGateways()", +"0ac5f441": "paySellerForBuyer(uint256,address)", +"0ac62e02": "emergencyStop(bool)", +"0ac67e2f": "getLowPrice()", +"0ac7366b": "IRONtokenSale(uint256,uint256)", +"0ac799ff": "_transferXToken(address,address,uint256)", +"0ac7c7ba": "getBalanceMessage(address,uint32,uint192)", +"0ac8dc61": "GetLandId(uint256,uint256)", +"0ac924a0": "Minter(uint256,address)", +"0ac94000": "executeRequest(uint32)", +"0ac96103": "getBaseUrl()", +"0ac9bb29": "nextSeedHashed()", +"0ac9d35f": "_getRandomNumber(uint256)", +"0aca08ca": "closeGiveAway()", +"0aca7403": "process_swap(address,address,uint256)", +"0aca9de0": "placeLong(address[2],uint256[7],uint8,bytes32[2])", +"0acaad4c": "getWeiContributed(address)", +"0acae9a7": "publicEnd()", +"0acb4c28": "activateOracle()", +"0acc4382": "getMinDailyWithdrawLimit()", +"0acdc3ef": "_Doihave(uint8)", +"0acdd69f": "TOTAL_SOLD_TOKEN_SUPPLY_LIMIT()", +"0ace8c9a": "addPackage(string)", +"0ace9469": "setmaxContribution(uint256)", +"0acf0b8e": "admin_add_modify(address,uint8)", +"0acf473b": "AdminCloseContract()", +"0acf4b0b": "createPromoToken(address,string,uint256)", +"0ad0a0f3": "setPurchaseValues(uint256,uint256,address,bool)", +"0ad137c4": "Provide(address,address,address,address)", +"0ad182bc": "getTickets(address)", +"0ad1c2fa": "getContract(address)", +"0ad2074c": "logFailedSweep(address,address,uint256)", +"0ad20914": "getRequestByRequesterAddress(address)", +"0ad23aad": "getNumberOfRatingForAddress(address)", +"0ad24528": "end(uint256)", +"0ad27798": "depositPresale(address,uint256)", +"0ad40377": "KYCPresale(address,uint256,uint256,uint256)", +"0ad40df1": "setConfiguration(uint256)", +"0ad43eaa": "enterMessage(string)", +"0ad4b97b": "fibonacciIndex()", +"0ad50c02": "buyPropertyInETH(uint16)", +"0ad54c03": "playerRefundBet(bytes32)", +"0ad59fa2": "CocaCola()", +"0ad63730": "virtuePlayerPoints()", +"0ad65128": "logPresaleResults(uint256,uint256)", +"0ad6aa28": "currentstagedata()", +"0ad6ac85": "pay(uint256,uint256,address)", +"0ad7cf3c": "BitCloud()", +"0ad7f29f": "CampaignManagerContract(address,address)", +"0ad80f41": "WorldTrade(uint256,string,string)", +"0ad95b44": "bribery()", +"0ad98d71": "showTotal()", +"0ad9cf6f": "_resetTransferredCoinFees(address,address,uint256)", +"0ad9d052": "model()", +"0adaa7bf": "expireAssociate(address)", +"0adae972": "detailsOf(address)", +"0adb1354": "RimuoviProfessore(address)", +"0adcaddc": "iterate_valid(uint256)", +"0adcdbaa": "redeemRate()", +"0add0baa": "maxInvestments()", +"0add8140": "pendingProxyOwner()", +"0adde487": "getPurchaseLimit()", +"0ade4942": "tokenPriceProvider()", +"0ade7142": "terminateDirectDebit(address)", +"0ade9429": "getNext(uint256,address,uint256,uint256,uint256)", +"0adeb700": "changeQuarterlyRate(bytes32,uint256)", +"0adf331b": "stateSuccess(uint256)", +"0adf7912": "TokenDestroyed(uint256,address)", +"0adfb4e2": "Elemental()", +"0adfba60": "callSelf()", +"0adfdc4b": "setAwardedInitialWaitSeconds(uint256)", +"0ae08793": "confirmAndCheck(bytes32)", +"0ae100d8": "addOrganFunction(address,string)", +"0ae1b13d": "post(string,string)", +"0ae1fac0": "startICOStage4()", +"0ae25ca3": "withdrawToTeamStep4(uint256)", +"0ae31fbd": "setDistrictAddress(address,address)", +"0ae32e72": "ZhangHongBinToken()", +"0ae41574": "logOrderCreated(uint8,uint256,uint256,address,uint256,uint256,bytes32,bytes32,address,address)", +"0ae50a39": "GetOwner()", +"0ae5e739": "grantAccess(address)", +"0ae66820": "getBuyCost(uint256)", +"0ae75eb8": "amountOfBRAsold()", +"0ae7a310": "tokenMeta(uint256)", +"0ae80c37": "kickStartMiniICO(address)", +"0ae870bd": "Mjolnir()", +"0ae8f28f": "getProposalTextArrayLength()", +"0aea47bc": "getTimer(uint256)", +"0aeacb5e": "getTotalRecords()", +"0aeb0f79": "UserCategorySet(address,uint256)", +"0aeb1552": "insertStrategy(bytes15,address,uint256,string)", +"0aeb4b26": "WorldCupControl()", +"0aeb6b40": "register(address,bytes,uint256)", +"0aebeb4e": "close(uint256)", +"0aeccc9c": "setScribe(address,address,string,string)", +"0aece23c": "getFeeAmount(int256)", +"0aed3c36": "testIsCase()", +"0aed3ca1": "getLoans(uint256)", +"0aed5a21": "NamiExchange(address)", +"0aed80f2": "secondSellPrice()", +"0aed8e72": "rotate(uint256,bool)", +"0aed9c45": "TicketsSoldForThisGame()", +"0aef8500": "amountFundAirdrop()", +"0aef8655": "PXLProperty(address)", +"0aefc573": "KyberHandler(address,address)", +"0aeffa65": "ETH_MIN_GOAL()", +"0af15f6e": "stopSellingGenes(uint256)", +"0af179d7": "setDNSRecords(bytes32,bytes)", +"0af1fe11": "getAllPRS()", +"0af23be2": "ETHERREDSupply()", +"0af39032": "testMintThis()", +"0af3e660": "getHolderId(address)", +"0af4187d": "getAllowance(address,address)", +"0af4626d": "testRetract()", +"0af4cd61": "setHalted(uint256)", +"0af658ca": "personUpdateActivity(uint256,bool)", +"0af6c9ff": "setColdWallet(address,uint256,uint256)", +"0af6f6fe": "changeAgentPermission(address,uint8)", +"0af72ad0": "isStrategy()", +"0af825da": "_transferInternal(address,address,uint256,bytes)", +"0af8bd95": "TIDAChain()", +"0af95750": "deactivateProject(address)", +"0af9d89c": "getPaintingGeneration(uint256)", +"0afa371d": "XMAX()", +"0afa6dde": "getAddressLost(address)", +"0afa9fb9": "contains(int256,address)", +"0afb0409": "refresh(address)", +"0afb9f1f": "getProposalByIdIteration(uint256,uint256)", +"0afc0a59": "computeTokens(uint256,uint256)", +"0afd21d2": "failSale(uint256)", +"0afd2778": "changeFundOwnerWalletAddress(address)", +"0afd548d": "setOperationContracts(address,address,address)", +"0afdca95": "impl_batchTransferMSM(address,address[],uint256[])", +"0aff2076": "getLastAuctionId()", +"0b009517": "YourToken()", +"0b00a111": "WhitelistUpdated(address,address)", +"0b00de8d": "unregisterWorkerAffectation(address,address)", +"0b00fd54": "TEAM_ADDR()", +"0b01517c": "getPlayerBalance()", +"0b01856d": "startPreICOTimestamp()", +"0b02177f": "testnetWithdrawn(uint256)", +"0b03ad11": "unregisterToken(address,string)", +"0b0608db": "LolaCoin()", +"0b070845": "Dagt()", +"0b073865": "share3()", +"0b0740ae": "getItemIndexToOwner(uint256)", +"0b077fe7": "Whales()", +"0b0788dc": "assertEq27(bytes27,bytes27)", +"0b0a4b17": "askHash()", +"0b0b6d5b": "supportImpeachment()", +"0b0bbd65": "addrToAsciiString(address)", +"0b0c2e80": "test_basicWithTwoAssertThrow()", +"0b0c564d": "Enter(uint256,uint256,bool,address)", +"0b0c8f1f": "initSmartToken(address,address,uint256)", +"0b0c92bd": "_isOperatorFor(address,address,bool)", +"0b0d031a": "fetchCreatedOrdersForPayer()", +"0b0d0eb7": "transferToBeneficiaries()", +"0b0e13d6": "closeStageTwo()", +"0b0edad3": "getBooking(address,uint256)", +"0b0f7743": "issuedCount()", +"0b100a5a": "policiesCount()", +"0b107904": "authorizeOne(address)", +"0b10bd1b": "HiroyukiCoinDark()", +"0b11a6e3": "ERGOIN()", +"0b11ed63": "getGenerationForWindow(uint256,uint256)", +"0b1200da": "setWalletContractAddress(address)", +"0b121c04": "createIssue(uint256,uint256,uint256)", +"0b12a148": "_distributeNewSaleInput(address)", +"0b12e7e2": "soowhat()", +"0b1350cf": "assetProxy()", +"0b1414c1": "oneStaIsStb()", +"0b14331f": "getExpiration(uint256,uint256)", +"0b151811": "getBonusByDate(uint256,uint256)", +"0b15650b": "randInt(uint256,uint256)", +"0b1573b8": "setRoundLockAmount(uint256)", +"0b181567": "exceed()", +"0b1851a9": "Billionscoin()", +"0b1a3144": "pushToApproved(address,uint8)", +"0b1a8e1e": "setMasterServer(uint32)", +"0b1a94e7": "validPurchasePresale()", +"0b1aff48": "extendTDE(uint256)", +"0b1b62fa": "transferBackMANAMany(address[],uint256[])", +"0b1b92dd": "FACTOR_11()", +"0b1b9aa5": "getluckyuser()", +"0b1ba852": "changeDepositCell(address,uint256)", +"0b1bf3e2": "Galleass(string)", +"0b1c45c9": "getPhiladelphiaBets(address)", +"0b1c4a75": "subFees(uint256,uint256)", +"0b1c5b76": "fetchVoteMainInfoBySnapshotBlock(uint256)", +"0b1ca49a": "removeMember(address)", +"0b1d366d": "getLastAwardInfo(uint256)", +"0b1dcc88": "buyCountry(uint8)", +"0b1dfa26": "fxpDiv(uint256,uint256,uint256)", +"0b1e400a": "_transferFromToICAPWithReference(address,bytes32,uint256,string)", +"0b1e5acc": "roleHas(string,address,address)", +"0b1e7f83": "posts(uint256)", +"0b1ec92e": "RoundCreated(uint256,uint256,uint256,uint256)", +"0b1f3850": "num_hosts_revealed()", +"0b1fc3c0": "getVendingAmountLeft(uint256)", +"0b210a72": "getDrugInfo(uint256)", +"0b2140ab": "buyUSD(address,uint256)", +"0b214493": "_stageValidation(uint256,uint256,bool)", +"0b21d446": "setValidBwCaller(address)", +"0b225b42": "PHASE4_START_TIME()", +"0b2478b3": "getSaleIsOn()", +"0b247b1b": "CreateACI(address,uint256)", +"0b25cbb2": "Ftechiz()", +"0b261340": "marbleBalance(address)", +"0b269898": "setPricing(uint256[])", +"0b274f2e": "passPhase()", +"0b27fa51": "noOfTokenAlocatedForPresaleRound()", +"0b280a29": "isBatchActive(uint256)", +"0b2909e6": "addOwed(address,uint256)", +"0b294bdf": "GetPlayerDetails(address,address)", +"0b299630": "addItem(string,address,uint256,address,uint128)", +"0b2a6c70": "marketWine()", +"0b2acb3f": "add(address,bytes)", +"0b2accb2": "getPercentage()", +"0b2c588c": "setAdventureHandler(address)", +"0b2d25ca": "calculateCharityFee(uint256)", +"0b2e02c7": "migrateAgent()", +"0b2e7423": "maxSecurityGuardDelay()", +"0b2ee7e9": "create(uint256,uint256,uint256,bool)", +"0b2f6a7e": "_mintPlayer(uint32,uint32,address)", +"0b2f6cef": "m_hodlers()", +"0b2fce74": "addGardener(uint256,uint256)", +"0b305c62": "playerEndGameConflict(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", +"0b305ce9": "destFoundation()", +"0b309c93": "Timer()", +"0b30ab4f": "bubbleSort()", +"0b30fc7b": "pastValues(uint256)", +"0b317697": "investorToken(address)", +"0b31fc3a": "DiamondToken()", +"0b341245": "activityAddress()", +"0b3464c3": "activeHeroGenome(address)", +"0b34f78c": "MintProposalAdded(uint256,address,uint256)", +"0b3532b3": "balanceSellingOf(address)", +"0b354090": "SimpleConstructorBool(bool,bool)", +"0b3598c6": "_sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", +"0b35ea61": "stopGuess(uint256,bool)", +"0b35fe44": "VerifyEd25519(bytes32,bytes,bytes)", +"0b368627": "releaseOldData()", +"0b377a8f": "setNumIncorrectDesignatedReportMarkets(uint256)", +"0b38bae2": "_totalSupplyLeft()", +"0b393a9d": "MANHATTANPROXY1STAVE()", +"0b395d1e": "_addUserExperience(address,int32)", +"0b39aaa9": "privateEquityClaimed()", +"0b39c3e1": "requestLoan(address,address,bytes16,uint256,uint128,uint128,uint16,uint64,uint64,string)", +"0b39f18e": "setCardTokenAddress(address)", +"0b3a2ffd": "setRoyaltyInformationContract(address)", +"0b3af901": "proposePlatformWithdrawal(address)", +"0b3b2222": "TokenDistribution(address,address)", +"0b3bb024": "getTenant()", +"0b3bc259": "funderCount()", +"0b3cd070": "multiBet(uint256[],uint256[],uint256[])", +"0b3d7174": "prev_week_ID()", +"0b3e9c7b": "userEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address)", +"0b3ed536": "claimDonations(uint256)", +"0b3f191a": "disableChanging(bool)", +"0b3fe32d": "setHalfTimeAtkBoss(uint256)", +"0b407022": "migrateV1Upgrades(address[],uint256[],uint256[])", +"0b40ab43": "setBankAddress(address,address)", +"0b4130f2": "GenomaToken()", +"0b424b66": "HHDCToken(uint256,string,string)", +"0b42d1de": "BejonesStandardToken(uint256,string,uint8,string)", +"0b43c6e6": "CryptonCoin()", +"0b440f33": "initCrowdsale(uint256,uint256,uint256,address)", +"0b4438e5": "spinAll()", +"0b45e8db": "SALE_CAP()", +"0b464bf6": "blocksSinceLastBid()", +"0b4650a0": "FiatContract()", +"0b467b9b": "revoke(bytes)", +"0b47459b": "LAARToken()", +"0b480095": "teamAddressThreeTokens()", +"0b483f6e": "toAllow()", +"0b48af0b": "interestOf(address,address)", +"0b4964a8": "addDungeonNewFloor(uint256,uint256,uint256)", +"0b4a1ece": "VisibilityDerived()", +"0b4aca45": "__formatDecimals(uint256)", +"0b4b5d5e": "GamityToken()", +"0b4bb61f": "burnPercentage1000m()", +"0b4c72a9": "rejectProvider(address)", +"0b4ca1cd": "doResult(uint256,bytes32,bytes32,uint256)", +"0b4cf825": "getRandomColorType()", +"0b4da628": "IsPlayer()", +"0b4db63a": "Tratok()", +"0b4dfc77": "contractMint(address,string,bytes32,bytes32,uint256)", +"0b4e0513": "reserveTokenFund()", +"0b4efd9a": "RobotBTC(uint256,string,string)", +"0b4f12f6": "updateUser(string)", +"0b4f3f3d": "cancel(string)", +"0b4f79a1": "RejekiKita()", +"0b509e1d": "getCountOfCell()", +"0b513828": "parseChannel(bytes)", +"0b513ce9": "PonziBet()", +"0b51989a": "setData(address,string)", +"0b520ad5": "freePeriodDuration()", +"0b522abf": "closeCrowdsale(address)", +"0b549884": "matingPrice(uint256)", +"0b54cbfb": "setType(uint8)", +"0b5608f2": "PackageCoinPresaleOne(uint256,uint256)", +"0b566f33": "unlockedCollateral(address)", +"0b56d4c6": "airdropNum()", +"0b56f01c": "createAmountFromEXORForAddress(uint256,address)", +"0b573638": "ethToTokenTransferOutput(uint256,uint256,address)", +"0b57adc0": "Transwave()", +"0b57c487": "COVERCOINToken(string,string,uint8,uint256)", +"0b583982": "getUserProductCount(bytes32)", +"0b586f1a": "_emitWorkResumed(uint256,uint256)", +"0b58dc38": "SetNewBlockchainEnabled()", +"0b590c6b": "SingularDTVToken()", +"0b591195": "largestPenis()", +"0b5945ec": "setTokenURL(address,string)", +"0b597135": "onHardCapReached(uint256)", +"0b5982f0": "payOutDividend()", +"0b59a5c4": "purchasedCoins()", +"0b59df68": "withdrawEscrow(uint64)", +"0b5a006b": "currentYear()", +"0b5ab3d5": "destroyDeed()", +"0b5ad1c1": "UpdateSellAgentCreators(address)", +"0b5adfff": "getNumTickets()", +"0b5ba082": "stagesManager()", +"0b5c2307": "globChanceOwner(uint256)", +"0b5c3f87": "addReferral(address,address)", +"0b5ca8db": "issuedBounty()", +"0b5d1c3d": "testLessThanOrEqual()", +"0b5d69ab": "UpdateMaxBalance(uint256)", +"0b5d94f6": "getOrderPrice(address,address,uint256,uint256)", +"0b5e19b0": "getInvestSum()", +"0b5e2232": "HunxuHappyToken()", +"0b5e89f4": "icoStarted()", +"0b5ee006": "setContractName(string)", +"0b5f2efd": "setCurrentRate(uint256)", +"0b5f5ef1": "setAvatar(uint256,bytes)", +"0b5faf97": "claimWin(bytes32)", +"0b5fcf81": "enableAutoDividends(uint256)", +"0b604085": "setBombletAddress(address)", +"0b605fcd": "tokensTo0xbtc_(uint256)", +"0b60ca88": "raisedSale2USD()", +"0b611241": "ieoStorageVault()", +"0b6142fc": "breach()", +"0b620b81": "withdraw(address,address,address,uint256)", +"0b6386d4": "KyberNetworkCrystal(uint256,uint256,uint256,address)", +"0b63b114": "freeTokens(address)", +"0b63fe95": "processPayment(address,uint256)", +"0b642d72": "recoverLostEth(address,uint256)", +"0b65108b": "merge()", +"0b654e7d": "finishedRaceCount()", +"0b663e63": "promoCount()", +"0b66c247": "scoreTeams(uint32,uint32[],int32[],uint32[],uint32,uint32)", +"0b66f3f5": "multisendToken(address,address[],uint256[])", +"0b6700d6": "getLogo()", +"0b6780aa": "extendSaleEndDate(uint256)", +"0b679d2c": "REQUEST_CANCELED_BY_CREATOR()", +"0b6826ca": "payDividend()", +"0b682cb8": "Quhabitat()", +"0b684de6": "CitizenOneCoin(uint256)", +"0b695449": "MiningUpgrade(address,uint256,uint256)", +"0b697362": "withdrawFromSubRound(uint256)", +"0b6b80b2": "sampleRegistry()", +"0b6bd1b0": "GetAcorn(address)", +"0b6bf29f": "partner1_will()", +"0b6c754b": "isSuccess()", +"0b6c9ac7": "airdroppedAmount()", +"0b6d3017": "overflow_upper()", +"0b6d715b": "createGame(string,uint256,uint256)", +"0b6d8d52": "createDAO(address,uint256,uint256)", +"0b6e01db": "total_bet_available()", +"0b6e46fe": "enableController(address)", +"0b6e6511": "convertToELIX(uint256,address)", +"0b6ebf86": "KWHTokenAddress()", +"0b6f0530": "test_twoInvalidEqBytes32Message()", +"0b6f2fad": "HashCoin(uint256,string,string)", +"0b6f46ed": "isPresaled(address)", +"0b6f5b3d": "ShrimpFarmer()", +"0b6f6e0d": "CanYaCoinToken()", +"0b6fc163": "claimSignerAddress()", +"0b6fcdb0": "getEnforceRevisions(bytes32)", +"0b70ce55": "Betfunding()", +"0b714b17": "AddHash()", +"0b71ff6a": "MTDCERC20()", +"0b72396c": "validateContractWithCode(address,string)", +"0b730fae": "ICOadvisor2()", +"0b731652": "Ethbet(address,address,address,uint256,uint256)", +"0b7373d6": "giveAllBack()", +"0b73aad0": "msgsWaitingDone(uint256)", +"0b74074b": "startPayouts()", +"0b743021": "TOKENS_TOTAL()", +"0b745a01": "setLockup(address)", +"0b747d91": "randomSeed()", +"0b74b620": "getChannelsParticipants()", +"0b74edc6": "testFinalHash()", +"0b74f633": "getTradeParameters(uint256,address,address,uint256,uint256,uint256,uint256)", +"0b7507ae": "getTaskAtIndex(uint256)", +"0b7623ba": "abs(int8)", +"0b76619b": "staked()", +"0b779363": "checkVotingForChangeAdminAddress()", +"0b77fa28": "generateThemedSpinners(uint256,uint256,uint256)", +"0b781385": "nextCampaignBalance()", +"0b78f9c0": "setFees(uint256,uint256)", +"0b7abf77": "TOTAL_TOKENS()", +"0b7ad54c": "getContent(uint256)", +"0b7d1de1": "proofOfSMS()", +"0b7d6320": "crowdsaleAgent()", +"0b7d796e": "loop(uint256)", +"0b7ddd25": "setRaisedAmount(uint256)", +"0b7e4e7f": "substractNumber(uint256)", +"0b7e9c44": "payout(address)", +"0b7ef89b": "contributeToCampaign(uint256)", +"0b8021c4": "getPublishedTokens(address)", +"0b803b6b": "transferApprovedBalance(address)", +"0b80b4f9": "QuantaloopToken()", +"0b80f8d3": "invmod(uint256,uint256)", +"0b811cb6": "executeProposal(uint256,bytes32)", +"0b816045": "getRequestInfo(uint256)", +"0b81e216": "setAllowTransfer(bool)", +"0b82a541": "setIcoEndTime()", +"0b82d33d": "withdrawBalanceDifference()", +"0b83284e": "MinterFunction(address,uint256)", +"0b834864": "publicTransfers(address,address,uint256)", +"0b83de20": "ABI(bytes32)", +"0b841433": "agentApproval(address,uint256)", +"0b8440ec": "bonusTokenRateLevelTwo()", +"0b84cc4a": "Committees(uint256)", +"0b8514b9": "exit(bytes32,bytes,bytes32)", +"0b851937": "year4Unlock()", +"0b85877f": "isICAP(address,address)", +"0b85881c": "ceilLog2(uint256,uint256)", +"0b869824": "CeoAddress()", +"0b87572b": "communityDevelopmentSupply()", +"0b8762d1": "Block18Token()", +"0b87cf10": "crowdsaleActive()", +"0b88e06b": "testTokenBalance()", +"0b892e3f": "celebs(uint256)", +"0b897f64": "invert(address,uint256,address)", +"0b8a7bf8": "coinbaseWallet()", +"0b8b709d": "_createDroneInternal(address)", +"0b8ba87d": "UnilotBonusTailEther(address)", +"0b8bbd5b": "webGiftEtherAmount()", +"0b8d0a28": "wallet2()", +"0b8d9d94": "createSportsBet(string,uint256)", +"0b8e845a": "burnFeeFlat()", +"0b8eebde": "gameEnd()", +"0b8f0b61": "sendCoinsToBeneficiary()", +"0b8f0e0a": "LIWUC()", +"0b901c82": "totalRepaidQuantity()", +"0b910f86": "PRESALE_MIN_INVEST()", +"0b91eaf9": "isValidated(address)", +"0b926ecd": "validStoreVal()", +"0b927666": "order(address,uint256,address,uint256,uint256,uint256)", +"0b93381b": "success()", +"0b936a77": "DuanZiToken(address)", +"0b93bf0d": "setRecruitHeroFee(uint256)", +"0b948684": "delegatedTransfer(bytes,address,uint256,uint256,uint256)", +"0b95c8ae": "aggiungiMsg(string)", +"0b962e8f": "AlphaChainConstructor()", +"0b96406a": "vestingMappingSize(address)", +"0b96740c": "changeMinimumContributionForAllPhases(uint256)", +"0b967584": "voteForCandidate(uint256,address)", +"0b967fd2": "remove_master(address)", +"0b967fe7": "assertEq18(bytes18,bytes18)", +"0b96e72e": "setBAS(bytes32,address,string)", +"0b972ff6": "weiPreCollected()", +"0b97bc86": "startDate()", +"0b97fc8d": "WeiPerTicket()", +"0b98107c": "dateFrom()", +"0b9830ba": "tokensIndexOf(address,bool)", +"0b9835cf": "pvpContenderRemoved(uint32)", +"0b9849ab": "WEChainCommunity()", +"0b98f975": "setBonus(uint256)", +"0b9902d0": "WithdrawPerformed(uint256)", +"0b99ccee": "ico2Ended()", +"0b9aa067": "isVerified(address,address)", +"0b9ac851": "getCurveUnset(address,bytes32,int256)", +"0b9adc57": "deleteBytes32(bytes32)", +"0b9b0e7d": "highRate()", +"0b9b8130": "registerMintedToken(address,string)", +"0b9b9602": "SalesWalletUpdated(address,address)", +"0b9bfa6c": "inCommunity(address,address)", +"0b9cae77": "KinetiQ()", +"0b9d5847": "getExchange(uint256)", +"0b9d98e9": "getTotalVolume()", +"0b9e9817": "CanaryV7FastTestnet()", +"0b9ea6c8": "getCurrentSold()", +"0b9ea95d": "configureSaleClockAuction(address,uint256)", +"0b9f1e76": "wphcToken()", +"0b9f2816": "nowwww()", +"0b9f2ca6": "getCountBuildings(uint256,uint256,bool)", +"0b9f6108": "divsm(uint256,uint256)", +"0b9fc8fb": "checkerSign(bool)", +"0ba00420": "bulkPay(address[],uint256)", +"0ba0a3a1": "TakerSoldAsset(address,uint256,uint256,uint256)", +"0ba12c83": "commitUpgrade()", +"0ba1772d": "callDistributed()", +"0ba1f7ad": "getImpactCount(string)", +"0ba234d6": "cancelRecovery()", +"0ba24e4c": "customers(address,address)", +"0ba27775": "fondToken()", +"0ba2e8a8": "allowFunding()", +"0ba3aa55": "setdoctor(string,uint256,string)", +"0ba46624": "setBountyAgent(address,bool)", +"0ba4d242": "s43(bytes1)", +"0ba5890a": "noteBallotDeployed(bytes32)", +"0ba6d271": "updateFunds(address,uint256)", +"0ba7ebe2": "changeAll(address)", +"0ba8916f": "updateMeterKey(address)", +"0ba8d735": "purch(address,uint256)", +"0ba8ebec": "lockance(address)", +"0ba92878": "delOrganizationCertificate(string)", +"0ba95909": "getMaxAmount()", +"0baaaed9": "setConfigBytes(bytes,bytes)", +"0bab4d84": "setClearingPriceSubmissionDeposit(uint256)", +"0bab718f": "updateCurs(uint256)", +"0bab7ff6": "messiCommunity()", +"0bac0312": "TryUnLockBalance(address)", +"0bac15ae": "PUBLICSALE()", +"0bac2850": "setFunctionFourPrice(uint256)", +"0bac3c01": "isDeferred(address)", +"0bac9fe7": "getUsernameByIndex(uint256)", +"0bad342a": "EscrowContract(address,address,address,address,uint256,uint256,uint256,uint256)", +"0bad4481": "setupRegion(address[16],uint256,uint256,uint256[],bool,uint8[128])", +"0bae2129": "affiliateTree()", +"0bae3288": "getSale()", +"0bae461c": "KomicaToken()", +"0baf0bcc": "lockDateTimeOf(address)", +"0bb0482f": "concatBytes(bytes,bytes)", +"0bb0e827": "add_addys(address[],uint256[])", +"0bb15acc": "GoldeaToken(uint256)", +"0bb18da2": "saveRefundJoinId(uint256,uint256)", +"0bb24375": "ITX_Token()", +"0bb25901": "freezeSupply(uint256)", +"0bb2cd6b": "mintAndFreeze(address,uint256,uint64)", +"0bb2cdef": "operatorManager(address,uint8)", +"0bb3a066": "unsetAdministrator(address[])", +"0bb4bbaf": "testInitialNumberOfVoters()", +"0bb4e6f4": "getTotalWei()", +"0bb536a2": "fightMix(uint256,uint256)", +"0bb563d6": "logString(string)", +"0bb5e62b": "EGC()", +"0bb700dc": "getStats(bytes32)", +"0bb7a81a": "ZhuhuaToken()", +"0bb8b9c3": "zint_convert(string)", +"0bb954c9": "WithdrawAndTransferToBankroll()", +"0bb9ee71": "createRepository(bytes32,bytes)", +"0bb9f21e": "SCAMERC20()", +"0bba3065": "AuthorityFilter()", +"0bba662d": "oneCoin()", +"0bbaa27a": "seedSourceB()", +"0bbad618": "setupReclaim()", +"0bbd4e38": "defrostReserveAndTeamTokens()", +"0bbd501e": "NewEtherPrice(uint256)", +"0bbdb469": "getLuckyblockSpend(bytes32)", +"0bbe0ee3": "transferAllFrom(address,address,uint256[])", +"0bbed2b7": "secondsaleopeningTime()", +"0bbf2768": "infrastruct(uint256)", +"0bbf709a": "validHolder(address)", +"0bbf8f38": "setMinBid()", +"0bbfdbec": "setUsdAmount(uint256)", +"0bc09cfe": "buy(uint256[6][])", +"0bc0c61f": "destroyOwner(address,uint256)", +"0bc1236e": "getTokenAmount(uint256,uint256)", +"0bc16f1b": "presell()", +"0bc1734c": "addPermissions(address[])", +"0bc217d9": "setCastleSale(uint256,uint256)", +"0bc23901": "WalletAddressesSet(address,address,address)", +"0bc2a3b7": "Showercoin()", +"0bc30aa0": "getTicketWinnings(uint256,uint256)", +"0bc311ea": "addFound(address)", +"0bc32570": "_sendTokenReward(address,uint64)", +"0bc32ab6": "tokenToPointBySkcContract(uint256,address,uint256)", +"0bc33b22": "addressJenkins()", +"0bc3a268": "KelvinToken()", +"0bc43490": "yesVotes(uint256,address)", +"0bc4ec45": "FirstDropToken()", +"0bc59a8e": "date15Nov2018()", +"0bc5b2c5": "stage_2_tokens_scaled()", +"0bc5e51e": "endTimeSale3()", +"0bc5f216": "kgtToken()", +"0bc69912": "createICO(bytes,bytes)", +"0bc6b708": "placeBetTESTONLY(uint256)", +"0bc6b89c": "dailySpent()", +"0bc6c96e": "failSafe()", +"0bc7760c": "crowdsaleSet()", +"0bc785df": "ACTToken()", +"0bc7fd93": "toTuis(uint256)", +"0bc8982f": "getBQL()", +"0bc8b4c2": "getMintRequestUintMap(uint256,int256,string)", +"0bc954dc": "addEgg(uint64,uint32,address,uint256)", +"0bc9c89c": "removeMessage()", +"0bca1704": "setHardcupTrue()", +"0bca441b": "BETHERTokenSale(uint256,address)", +"0bca5903": "claimMedals(uint16)", +"0bcab28a": "verifyReceiverAddress(address,address,address,uint8,bytes32,bytes32)", +"0bcb8a23": "getBondDivShare(uint256)", +"0bcbad90": "WLMTPrice()", +"0bcbbd21": "r2()", +"0bcbe35b": "lastBlock_f19()", +"0bcbfe1c": "withdraw_Eth(uint256)", +"0bcd0694": "getUserCities(address)", +"0bcd3b33": "getBytes()", +"0bcd87ed": "dashboardAddress()", +"0bce62ea": "isPreICOPublicOpened()", +"0bce8cdf": "getContributorInfo(address)", +"0bcef54c": "Eticket4Sale(address,address,uint256,uint256,uint256)", +"0bcf963b": "getDocumentsCount()", +"0bd089ab": "MyAdvancedToken(uint256,string,uint8,string,address)", +"0bd11894": "addBuilder(uint256,address)", +"0bd12120": "MMCC()", +"0bd18d7a": "investment(address)", +"0bd263ff": "registerPID(address)", +"0bd2ae1c": "ERW()", +"0bd38767": "testCanClone()", +"0bd3ae61": "EARLY_BIRD_SUPPLY()", +"0bd3cf7e": "Timebomb()", +"0bd58493": "sellMyApple(uint256)", +"0bd5b493": "payPostDrawRef(address,address,uint256)", +"0bd601df": "setLockEndTime(uint256)", +"0bd61e79": "_finalRoundLosersFight()", +"0bd62ad5": "FantasySportsCoin()", +"0bd64dbf": "BsToken(string,string,uint256,address)", +"0bd6a40f": "setWorkerAdress(address)", +"0bd6c769": "Load(address,uint256,uint256)", +"0bd7abde": "setMaxWinRate(uint256,uint256)", +"0bd7b6b8": "computed_fundraise()", +"0bd85158": "setUInt8Value(bytes32,uint8)", +"0bd8599e": "countUp()", +"0bd8a1d0": "auctionFinalized()", +"0bd8a3eb": "SaleEnded()", +"0bd934c3": "UPEXCoin()", +"0bd93738": "updateShareTimeGap(uint256)", +"0bd9c534": "right43(uint256)", +"0bda4dbf": "refundCount()", +"0bdaaaf5": "getAllOperations()", +"0bdab855": "distributeHNC(address[],uint256,uint256)", +"0bdc0031": "STARTBLOCKTM()", +"0bdc7953": "multiBuy(address[],bytes32[])", +"0bdc9c35": "CalculateReward(uint256,uint256,uint256)", +"0bddb83b": "bonusPresale()", +"0bdddb73": "stampOut(address,uint256,uint256)", +"0bdde107": "balanceOfme()", +"0bde1d36": "changeAllowanceToMint(address,address,int256)", +"0bdf3dae": "CryptoRoboticsToken()", +"0bdf5300": "TOKEN_ADDRESS()", +"0be0453b": "StringDemo()", +"0be0713d": "gcSupply()", +"0be0f677": "log(bytes32,string)", +"0be21ea9": "MAX_TIME_EXPLORE()", +"0be23ace": "RealMoney()", +"0be2858e": "multipleTransfer(address[],uint256[])", +"0be48491": "personalMax()", +"0be5430f": "DroneTokenSale(address,address)", +"0be560be": "NarniaUSDT()", +"0be5ca05": "privatePresaleTokenReservation(address,uint256,uint256)", +"0be5efa6": "year2LockAddress()", +"0be6ba2b": "addRestricedAccount(address,uint256)", +"0be702bf": "_v4()", +"0be72b6d": "allOfferingQuota()", +"0be76f80": "memberData(uint256)", +"0be77485": "Unlock(address)", +"0be77f56": "log(bytes)", +"0be80f39": "setComission(uint256)", +"0be80fa9": "changeVisitLengths(uint256,uint256,uint256,uint256,uint256,uint256)", +"0be8287e": "getJackpotInfo()", +"0be9189d": "showInvestorVault(address,uint256)", +"0be924ef": "tier_rate_4()", +"0be96fbd": "MAX_TOKENS_SALE()", +"0be9f930": "REL(uint256,string,uint8,string)", +"0beb90d3": "icoLimit()", +"0bebd0f9": "addAddressToGeneration(address,uint256)", +"0bec3231": "GalaxyChain()", +"0bece492": "setPhaseBonusAddress(address,address)", +"0bed63c7": "_isActive(uint256)", +"0bee1c3e": "availableICO_w2()", +"0beeb0af": "getValue(address,bytes32,address)", +"0beedbd4": "AdoptionRequested(bytes5,uint256,address)", +"0befe82b": "AddBankerPrincipal(uint8,uint256)", +"0befeeb0": "lastCreatedGame()", +"0bf05c99": "DraftPlayer(address,uint256)", +"0bf09985": "openRound(uint256,uint256)", +"0bf0e4e4": "myProfit(address)", +"0bf1c747": "destructed()", +"0bf2c50d": "setCFO(address,bytes)", +"0bf2ee8d": "addPerson(string)", +"0bf318a3": "finalizeCrowdsale()", +"0bf34d54": "CVToken()", +"0bf36806": "Bivacoin()", +"0bf474a9": "claimDonations(address[2],uint256[7],uint8,bytes32[2])", +"0bf5035d": "secondYearEnd()", +"0bf51f36": "updateTime(uint64)", +"0bf53613": "getBonusNow(address,uint256)", +"0bf53668": "consumers(address)", +"0bf61fd4": "t_Slava()", +"0bf63c60": "setBasicCentsPricePer30Days(uint256)", +"0bf6898e": "DPSToken(uint256,string,string)", +"0bf6dbfd": "VanityToken(address)", +"0bf75567": "voteSuperQuorum(uint256,bool)", +"0bf757e5": "HopiumToken()", +"0bf77989": "debug_coinbaseTxSha(bytes,uint256)", +"0bf7fb57": "getUserMilestone(address)", +"0bf82810": "removePartnerAddress(address)", +"0bf84797": "RATE_FOR_WEEK1()", +"0bf867c2": "Zemana()", +"0bf9236a": "KillContracts()", +"0bf9c50f": "calcNextNBonuses(uint256)", +"0bf9fd52": "wasPaid(bytes32)", +"0bfa1191": "setPriceStorageInternal(address,uint256)", +"0bfd1271": "confirmErc20TransactionRequest()", +"0bfd7b62": "getBonusesAmountAvailable(bytes32,uint256)", +"0bfefed4": "createUser(address,string,bool,bool,bool)", +"0bff2ac2": "NewBatch()", +"0bffa8b4": "changeMigrationInfoSetter(address)", +"0c0075a3": "getBallotOptions()", +"0c0078e8": "RESERVED_TOKENS_ANGLE()", +"0c012834": "ARS()", +"0c0174a4": "escapeRequest(uint256)", +"0c01b2ae": "setConfiguration(string,string,uint256,address[],uint256)", +"0c02159f": "HavEtherToken(uint256,string,uint8,string)", +"0c022933": "highTimeBonusValue()", +"0c031f45": "TokenBuy(address,uint256)", +"0c03348d": "getIntel(uint256)", +"0c0399a4": "iteration()", +"0c03f24a": "parseDate(string)", +"0c03fbd7": "getNumPassingTokens(address,uint256)", +"0c0615a7": "evaluate(address,string,string)", +"0c0662a8": "getLastWithdrawal()", +"0c06c3ee": "viewHouseFee()", +"0c06fda1": "AVINCOIN()", +"0c07fa56": "ICO_END()", +"0c087782": "PXLProperty()", +"0c087bc5": "stage1Start()", +"0c08bf88": "terminate()", +"0c08ec49": "importTokensToSidechain(address,address,uint256,bytes32)", +"0c099133": "ERC20TokenFactory()", +"0c0a5c55": "cancelAuth(address,address)", +"0c0a7a68": "Stars()", +"0c0ad299": "removeProject(address)", +"0c0b86ca": "currentAuctionId()", +"0c0bea5c": "FinalTokenToken()", +"0c0c13c8": "query2_fnc()", +"0c0cde7c": "ZIBToken(uint256,string,string)", +"0c0d6caa": "newDrawer(address)", +"0c0e5f0d": "calculateGrapeBuy(uint256,uint256)", +"0c0e6dea": "publicAllocationEnabled()", +"0c0ef2b0": "isGameActive()", +"0c103837": "votedHarvest(address)", +"0c112598": "fun(bytes32)", +"0c119354": "rateMain()", +"0c11dedd": "pay(address)", +"0c11f32e": "milestoneShares(uint256)", +"0c12fe41": "redeemResearchAndDevelopmentBal()", +"0c131629": "RDFToken()", +"0c14080b": "bonusSale()", +"0c15b963": "againAttack(address,uint256)", +"0c15f601": "meltTokens(address,uint256)", +"0c16683e": "SCLToken()", +"0c1688f7": "IstriumToken(address,address)", +"0c1754f0": "BitcoinXToken()", +"0c17d023": "dungeonTokenContract()", +"0c17d42c": "setAlpha(uint256)", +"0c1838e9": "importAmountForAddresses(uint256[],address[])", +"0c18e1c9": "balanceInSpecificTranche(uint256)", +"0c1925f3": "stock(string,string,uint256,string)", +"0c192fe5": "RBCToken()", +"0c195d99": "totalAllocatedTokens()", +"0c196a74": "getInterestRate(uint256)", +"0c19f80e": "checkReferral(address)", +"0c1a8b05": "toSPool(uint256)", +"0c1a972e": "newAccount(string,bytes)", +"0c1b33d2": "setRemainingSupply(uint256)", +"0c1be377": "removeSupport(address,address)", +"0c1c0974": "littPoolIDExists(uint256)", +"0c1c3c14": "registerNameXID(string)", +"0c1c972a": "startPublicSale()", +"0c1ca1ba": "withdrawOwnerEth()", +"0c1cd8cd": "endPvtSale()", +"0c1d4af7": "LogTokenAssigned(address,address)", +"0c1db532": "getPI_edit_28()", +"0c1e3fd4": "submitWithdrawTransaction(address,uint256,bytes)", +"0c1e3fea": "previousState()", +"0c1e517f": "bytes16ToStr(bytes16,bytes16,uint8,uint8)", +"0c1f679f": "WithdrawalTokensAfterDeadLine()", +"0c1fad51": "setSeedSourceA(address)", +"0c1fe4b1": "showTransaction()", +"0c204dbc": "getF()", +"0c2073e4": "LemonSelfDrop2()", +"0c21a2f1": "nextGameMinBlock()", +"0c21e754": "setLLV_edit_9(string)", +"0c237dde": "servusTokensAllocated()", +"0c23cf4b": "buyCardXid(uint256,uint256)", +"0c241b2d": "generateSeedA()", +"0c250dcd": "logUnsigned(bytes32)", +"0c255c94": "max256(uint256,uint256)", +"0c25c6c1": "getBonusUsersCount()", +"0c26a816": "pvpMaxIncentiveCut()", +"0c26ac30": "closeEarlyAdopters()", +"0c26e42e": "getReleaseHashForNameHash(bytes32,uint256)", +"0c270f44": "recleared(address)", +"0c2737d2": "incrementCounters(uint256,uint256)", +"0c27677a": "getCRaddress()", +"0c28e291": "Prout()", +"0c294f51": "getAllCounts()", +"0c29e589": "createMyEntity(uint256,bytes32,bool,uint256,uint256)", +"0c2a48e2": "realitycheck()", +"0c2ab324": "SAN()", +"0c2ad9e3": "battle(uint64,uint64)", +"0c2b14fe": "buyCostume(uint256,uint256)", +"0c2b3eda": "TeacherCoin()", +"0c2b4b85": "addGames(bytes32[],bytes32[])", +"0c2b663c": "SDR22(uint256,string,string)", +"0c2bc34d": "indexOf(uint256[],uint256,bool)", +"0c2c5add": "contribute(address,uint256,uint8,bytes32,bytes32)", +"0c2c81ed": "platformFundingSupply()", +"0c2cb820": "setDebug(bool)", +"0c2d71b1": "docStore()", +"0c2e4bf4": "icoStartAt()", +"0c2ec050": "isCurrentRoundFinishing()", +"0c2edc1c": "setExchangeAddresss(address,address)", +"0c2f6f48": "crowdSalePeriodInit()", +"0c31309e": "getPrivatePurchaserStatus(address)", +"0c316d6a": "DTOToken(address)", +"0c319d80": "BidiumToken(address,address,address,address)", +"0c3257d0": "changeUserClass(address,uint256)", +"0c326330": "_isICO()", +"0c3304d1": "mintMAN()", +"0c333556": "Vault(address[],address,address[],address[])", +"0c340a24": "governor()", +"0c345385": "RenaS()", +"0c34644c": "getInstructor(address,address)", +"0c3499ca": "_setSkills(address,uint256,uint256,uint256)", +"0c34f8a5": "addAddressesToWhitelist(bool,address[])", +"0c367f63": "DAEXToken(address)", +"0c36add8": "issue(uint256,uint256,address,address,uint256,address)", +"0c37348d": "buyPreSaleTokens(address,uint256,uint256,string)", +"0c376ee6": "setPvtTokens(uint256)", +"0c38708b": "get_all_project_information(uint256)", +"0c3890b7": "addThing(string,string,string,bytes32)", +"0c3980ef": "NextRewardHalving()", +"0c3a9658": "MTUV1()", +"0c3b3b70": "Unihorns(uint256,string,string)", +"0c3b7b96": "minTokensToCreate()", +"0c3c450e": "icoHashedPass()", +"0c3c92a3": "finishHardcap()", +"0c3cebfa": "issueTo(bytes32,uint256)", +"0c3d5157": "contractStartTime()", +"0c3dbf43": "removeMarket()", +"0c3dfa0e": "SLoader()", +"0c3e2d2d": "getTotalFundsRaised()", +"0c3e3c58": "getAdministerList()", +"0c3e4004": "GraceCoin()", +"0c3e564a": "airDeliverMulti(address[],uint256)", +"0c3f08c6": "newGame(uint8,string,string,bytes32,uint256)", +"0c3f0cac": "getLastPlayer(string)", +"0c3f1f14": "updateSupply()", +"0c3f64bf": "isDev(address)", +"0c3f6acf": "currentState()", +"0c402ed8": "confirmMinting(uint256)", +"0c424284": "setWhitelistStatus(address,bool)", +"0c4326a0": "getMajorMinorPatch(bytes32)", +"0c432c8d": "calcJadeReceived(uint256,uint256)", +"0c432f1f": "handleLastRef(address)", +"0c433edf": "receiptUsed(address,address,uint256)", +"0c437aa7": "setMandateInBlocks(uint256)", +"0c44ba40": "getMyTicketAddresses(address)", +"0c45361f": "creators_count()", +"0c45453c": "_feed(uint256,bytes32)", +"0c45e8d7": "roomsAvailable(string,uint256[])", +"0c4641d3": "BJCToken()", +"0c46fc92": "deliverLastMilestone(bytes32)", +"0c486a96": "requestPayment(uint256,uint256)", +"0c486c00": "CNRToken()", +"0c48ae9e": "createAdSlot(string,uint256,uint256,uint256[])", +"0c48c6bd": "getBonusMultiplierAt(uint256)", +"0c48e582": "updateVendor(address,address)", +"0c497094": "createAngel(uint8)", +"0c49c0a2": "MIN_CONTRIBUTION_AMOUNT()", +"0c49c36c": "sayHi()", +"0c4a3338": "CheckTime(uint256)", +"0c4a5153": "commitStageActive(uint256)", +"0c4a8d94": "STAGE_3_FINISH()", +"0c4a9869": "unregisterContract(bytes32)", +"0c4ada17": "cards_gold(uint256)", +"0c4ae1ca": "cancelBooking(address,address)", +"0c4bfa94": "left13(uint256)", +"0c4c4285": "setHash(bytes32)", +"0c4d6bdf": "EarlyBirdsFinalized(uint256)", +"0c4dd1d9": "totalUsdAmount()", +"0c4ecab4": "confirmations(bytes32,address)", +"0c4f65bd": "getOwnerAddress()", +"0c4f8f6f": "regularTransfer(bytes32,bytes32)", +"0c50b116": "BTHPoint()", +"0c51015d": "adjustTap(uint256)", +"0c51171d": "getTokensSold(address,bytes32)", +"0c516283": "freezeHybridizationsCount(uint256)", +"0c5241fa": "LOL6()", +"0c525571": "arraySum(uint16[])", +"0c52780d": "unCertifyDelegate(address)", +"0c52bb4c": "auditorsList(uint256)", +"0c547097": "goldenTicketOwner()", +"0c549dd9": "getCET6ByAddr(address)", +"0c54ce44": "ProofOfRipple()", +"0c5532bf": "singleValueAirdrop(address,address,address[],uint256)", +"0c55699c": "x()", +"0c5589b8": "DecreaseWithdrawalAmount(uint256)", +"0c559757": "setHouseEdge(uint8)", +"0c55d925": "deleteBytesValue(bytes32)", +"0c55d9a4": "confirmStaking()", +"0c55f818": "CTU_ADDRESS()", +"0c560c64": "USD(uint256)", +"0c58062b": "teamLockPeriodInSec()", +"0c584803": "SGTMock(address)", +"0c58bcb8": "EthLendToken(address,address,address)", +"0c58e23c": "ZClassicGold()", +"0c59b556": "viewCoinsKarmaBySymbol(string)", +"0c59c570": "CashTron()", +"0c5a534e": "allowBuying()", +"0c5a97a6": "getProviderName(uint256)", +"0c5c2ca3": "getIndexName(bytes)", +"0c5ce593": "open(address,bytes32,uint256,uint256)", +"0c5d919d": "totalsuplly()", +"0c5e3f11": "nestedFirstManyToSome(uint256,uint256)", +"0c5ebb1a": "userForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"0c5ed9d5": "REB()", +"0c5f9a60": "allocationFee(bytes32)", +"0c5fd414": "preOrder(address,address,address,address,bytes32,uint256,uint256,uint256)", +"0c5fd4b2": "minttoken(address,uint256)", +"0c60223e": "withdrawAuctionBalance(address)", +"0c61257e": "WartegToken()", +"0c620494": "changeAllowTransferWallet(address)", +"0c62b816": "minableSupply()", +"0c62bfbb": "_calcNextRate()", +"0c636091": "adoptAxies(uint256,uint256,uint256,address)", +"0c646fbd": "get_entity_count()", +"0c64a739": "price_exponent()", +"0c64a7f2": "remainingTime(uint256)", +"0c657eb0": "bankroll()", +"0c65829b": "_setSkills(address,uint256,uint256[],uint256[])", +"0c65e229": "startICOPhaseThree()", +"0c662943": "_lockup(address,uint256,uint256)", +"0c66adf8": "getCurrentRoundInfo(uint256)", +"0c68194f": "getCourseIdOfStudent(address)", +"0c68a104": "fundingMaxInEth()", +"0c68ba21": "isGuardian(address)", +"0c68f917": "cancelOfferingProposal(address,uint256)", +"0c693110": "getVoted(address,uint256)", +"0c6940ea": "addMeToAllGames()", +"0c69b189": "claimCrystal()", +"0c6a3161": "RESERVE_ADDRESS()", +"0c6a5be4": "Arexium(uint256,string,uint8,string)", +"0c6a62dd": "updateCurator(address)", +"0c6b1324": "Etherboard()", +"0c6bfdd0": "openTheRabbitHole()", +"0c6cbf92": "lastPayOut()", +"0c6cd73a": "issueCard(uint256,uint256,uint256)", +"0c6d1efb": "releaseEachTokens()", +"0c6ddc0d": "getUserAllowance(address)", +"0c6de527": "addToBonusSeed()", +"0c6df351": "doBondBonusTransfer(address,address)", +"0c6e29e3": "subscribeToPool()", +"0c6fc9b2": "processTakerOrder(uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"0c6fe674": "getPresaleTotal(uint256)", +"0c700183": "listGlobalAuditDocuments(uint256,bool)", +"0c7013c1": "send(address,address[],address,uint256[])", +"0c70f055": "getRandomRarity(uint32,uint256)", +"0c71614c": "divsforall()", +"0c717036": "colourID(uint8,uint8,uint8)", +"0c71b48c": "BTCTransactions(bytes16)", +"0c72bf39": "ArtToujourToken()", +"0c72fe56": "_payBidAllocationFee(bytes32)", +"0c736e04": "refundForValidPartners(uint256)", +"0c73a392": "getLogSize()", +"0c740736": "addPicture(string,uint32,uint32,uint32,uint32,string,string,string)", +"0c7452b8": "viewPetitionSignerWithAddress(address,uint256)", +"0c74be3d": "TIME_TO_MAKE_TOMATOES()", +"0c7516fd": "numPurse()", +"0c754b9f": "BuyOptions(address,uint256,string,uint8)", +"0c75941a": "setContractMessage(string)", +"0c76316d": "withdrawPot()", +"0c763fef": "showContractMsgSender(address)", +"0c77a697": "claimFounders()", +"0c77b44e": "setLedger(address,address)", +"0c790369": "maxMessageChars()", +"0c798c81": "SCCToken(address,address)", +"0c79af3d": "witrhdraw(uint256)", +"0c79e3e6": "setCrydrStorage(address)", +"0c7ac7b6": "arbitratorExtraData()", +"0c7b5616": "Time_Start_Crowdsale()", +"0c7befb2": "_tokenLayersExist(uint256)", +"0c7bf731": "pendingRemain()", +"0c7ca61e": "ArrAccountIsFrozenByDate(uint256)", +"0c7caded": "destroyMe()", +"0c7d8c20": "_register(bytes32,address)", +"0c7de59d": "edit(address,bytes,bool)", +"0c7e30b7": "getUsdCentsFromWei(uint256)", +"0c7eca6e": "setCurs(uint8)", +"0c7ef39b": "HUBTToken()", +"0c7f076e": "advisoryReserveTokensDistributed()", +"0c7f27ba": "COE()", +"0c8004b5": "buyTokens_Address(address,uint256,bytes8)", +"0c80d6dd": "view_last_result(address,address)", +"0c8114d3": "_forwardFunds(address,uint256)", +"0c8135a7": "getTeamOwner(uint256)", +"0c8209b6": "manualWithdrawEtherAll()", +"0c823abe": "importedTokens()", +"0c828c42": "getTxIndex(uint256)", +"0c82b942": "whitelistRemove(address[])", +"0c832ef0": "restoreOwner()", +"0c8367fb": "HALAL()", +"0c83700a": "divCutPool()", +"0c8496cc": "getReturnByPath(address[],uint256)", +"0c857b25": "getLoveLock(uint64)", +"0c85b18c": "SetBuildingData(address,uint256,uint256,uint256,uint256,uint256)", +"0c85feea": "matchOrders(uint64,uint64)", +"0c861d4b": "Aeron()", +"0c87355e": "BANCOR_CONVERTER_UPGRADER()", +"0c875c8d": "Withdrawn(uint256,uint256)", +"0c898482": "getShare(address,address)", +"0c89a0df": "transferTokens(address)", +"0c89b766": "randomSource()", +"0c89ef35": "hasEnoughAllowance(address,address,uint256)", +"0c89ef67": "PXMCCoin(uint256,string,uint8,string)", +"0c8a611f": "getInvestorsETH(address)", +"0c8ac6f7": "transferAnyTokens(address,address,uint256)", +"0c8b29ae": "hodlTillBlock()", +"0c8b494d": "RadarSpeedChain()", +"0c8bae5c": "sellTokensForBtc(string,address,uint256,uint256)", +"0c8bd2c5": "Issue(address,address,address,address)", +"0c8bdcfa": "GetPolicy(address,string,string)", +"0c8c0392": "listAsset(uint256,uint256,uint256,uint256)", +"0c8c085f": "getNumContents()", +"0c8dfeda": "maxLinkedWalletCount()", +"0c8e3166": "assignAtheniansToBattle(uint256)", +"0c8e9977": "whitelist_pool(address,address,uint256)", +"0c8f167e": "TOKENS_SOLD()", +"0c8f78fb": "setGasAmount(uint256)", +"0c9066dd": "getZodiac(uint256)", +"0c90da51": "End2()", +"0c915c74": "releaseWithStage(address,address)", +"0c91af81": "IGTUSD()", +"0c91e624": "Winner(string,address)", +"0c91f2d0": "rewardForWork(address,address,uint256,bool)", +"0c92b17b": "checkBurnTokens()", +"0c932e77": "ritualFee()", +"0c938c3f": "changeSubscriptionFee(uint256)", +"0c939ae1": "KYROInv()", +"0c93c981": "playBatch(uint256[],uint256[])", +"0c96526b": "getRateUsd()", +"0c96c4ea": "triggerRelease()", +"0c97200a": "getLoansCount()", +"0c975447": "lowBonusRate()", +"0c976ace": "existenceApproveTest(address)", +"0c97bb77": "curConfig()", +"0c98048d": "transferFromAdmin(address,uint256)", +"0c981d58": "closeGame(address)", +"0c987501": "EtheraffleFreeLOT(address,uint256)", +"0c990004": "createToken(uint256,address,bytes32,uint256,uint256,bytes32)", +"0c99d807": "_isValidBlock(uint8)", +"0c9a6c24": "getUserCoinMarketValue(uint16,uint256)", +"0c9b016c": "expItemClass()", +"0c9b5777": "Erc20()", +"0c9bb7d2": "denyByPassword(bytes8,bytes)", +"0c9bc2c0": "calculateNonVestedTokens(uint256,uint256,uint256,uint256,uint256)", +"0c9be46d": "setCharityAddress(address)", +"0c9c1c58": "setAltFundAddress(address)", +"0c9cbfee": "moveProduct(address,address,uint256)", +"0c9daf45": "vcxWallet()", +"0c9dc2b8": "checkEthFundDepositAddress()", +"0c9dd381": "RewardTransfered(uint256,address,uint256,uint256,uint256)", +"0c9f6ed8": "ZEXCoin()", +"0c9f88c0": "Zignal()", +"0c9f980f": "isCSO(address)", +"0c9fcec9": "setApproval(address,address,uint256)", +"0c9fd581": "assertTrue(bool)", +"0c9fe5eb": "PIXEL_COUNT()", +"0c9ff620": "listINF()", +"0ca09e1e": "XoudCoin()", +"0ca1988b": "getnum(address)", +"0ca1c5c9": "getTotalMinted()", +"0ca2bda2": "isAllowedTransferDuringICO()", +"0ca2f2fd": "MultiBonusCrowdsaleMock()", +"0ca35682": "recover(uint256)", +"0ca35c22": "setScouponTransferCost(uint256)", +"0ca36263": "exit(bytes32)", +"0ca40865": "capRound2()", +"0ca413a4": "getDateRanges()", +"0ca435a6": "grabBooty()", +"0ca4f838": "BetCommunity()", +"0ca5bdb4": "novaBurn()", +"0ca5f72f": "rewardPercentageDecimals()", +"0ca621a8": "updateSplitandEmit()", +"0ca6afa7": "EtfToken()", +"0ca6d310": "setNamePiture(uint256,string)", +"0ca72e82": "testGetLawyerCount()", +"0ca7395f": "returnFund(address,uint256)", +"0ca78923": "updateConnector(address,uint32,bool,uint256)", +"0ca8fe1e": "burnCoins()", +"0ca9183c": "icoFundingRatePredictionBonusInPercentage()", +"0ca97903": "emergency(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"0ca9897c": "citePaper(address)", +"0ca99ca8": "hardCapInWei()", +"0ca9c14e": "PryvCn()", +"0caa1d84": "isUserGranted(address,string)", +"0caa5d91": "UserDestroy(address,address)", +"0caa8605": "getStage3End()", +"0caaa284": "PresaleClosed(uint256,uint256)", +"0caab83a": "poolBounty()", +"0cab068c": "isVestingRevoked()", +"0cac54ed": "claimTransfer(address,address)", +"0cacbf21": "getSponsorshipsSortedByAmount(address,uint256)", +"0cadc5b3": "deliverBonus()", +"0cae3cbb": "checkStageCondition()", +"0caeb350": "upgradeValue(uint256)", +"0caee2ca": "calculatePayout(uint256,uint256,uint256)", +"0caf10b2": "GreenEnergy()", +"0caf9d39": "testFailTooManyMembers()", +"0cafabd8": "getTPrice()", +"0cafef9c": "Clen(uint256,string,uint8,string)", +"0cb08716": "airdropDynamic(address[],uint256[])", +"0cb08e3b": "_finalizeICO()", +"0cb09309": "ArysumToken()", +"0cb0a44b": "enableInvestment()", +"0cb0c7f0": "forceOwnerChange(address)", +"0cb1982b": "updateNAV(uint256)", +"0cb1d243": "ICT(uint256,string,string)", +"0cb1d6b4": "fourthWeek()", +"0cb296ae": "Gemstones()", +"0cb335c4": "setMissedVerificationSlashAmount(uint256)", +"0cb5f653": "newUser(address)", +"0cb60443": "minRate()", +"0cb61d7a": "setCurrentBonusPercent(uint256)", +"0cb6aaf1": "keys(uint256)", +"0cb6b577": "TOKEN_DECIMAL()", +"0cb743a5": "buyOld(uint256)", +"0cb749b6": "FutureBlockCall(address,uint256,uint8,address,bytes,bytes,uint256,uint256,uint16,uint256,uint256)", +"0cb795e8": "getDividendInfo(uint256)", +"0cb7eb4c": "getReleaseTime(address)", +"0cb812d3": "openWithoutCounterparty(address[4],uint256[3],uint32[4])", +"0cb9208a": "JorgeCoin()", +"0cb97f57": "advisorsTotal()", +"0cb9da1b": "RedemptionContract(address,uint256)", +"0cb9ec43": "TemperatureMeasurementB(address,uint32,uint64)", +"0cb9ee4b": "getAllPlayerObjectLen()", +"0cba5853": "angelCollection(uint64)", +"0cba6d27": "getSocialAccountsLength()", +"0cbb0f83": "entryCount()", +"0cbc90d8": "makeProposal(address,uint8,uint256,address)", +"0cbc9ce7": "sendToToteLiquidatorWallet()", +"0cbe1eb8": "USDDOWNLOADPRICE()", +"0cbf0601": "numMessagesSigned(bytes32)", +"0cbf54c8": "auctionDuration()", +"0cbf711a": "LogClosed()", +"0cbf7ec0": "startPrivateIco()", +"0cbfe979": "updatePrivateSaleWithMonthlyLockupByIndex(address,uint256,uint256,uint256)", +"0cc00bc9": "MarketPlace(address,uint256)", +"0cc03e7a": "claimShare(uint256)", +"0cc04b55": "adminUnregister(string)", +"0cc06221": "getUserAccountInfo(address)", +"0cc10550": "BIToken()", +"0cc2001c": "TastToken()", +"0cc20a0c": "getHoldEarningsInRound(address,uint256)", +"0cc3ad77": "verdictExecuted(address,bool,uint256)", +"0cc3db97": "_createToken(uint256,uint256,uint256,uint256,address)", +"0cc4330c": "visit()", +"0cc4fb87": "changeGeneralSaleEndDate(uint256)", +"0cc6373f": "tokenExchangeRateMile3()", +"0cc69a27": "Marketplace(address,address)", +"0cc69b5b": "NOKIA()", +"0cc7086b": "canBurnUtility(address,uint256)", +"0cc73b6a": "BLOCKS_PER_ROUND()", +"0cc79a85": "getEnded()", +"0cc8299b": "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()", +"0cc87b1c": "soldPreSaleTokens()", +"0cc88021": "hasPlayer(address)", +"0cc8c9af": "getOrCreateNextFeeWindow()", +"0cc91bb9": "setEarlyParicipantWhitelist(address,bool,uint256,uint256)", +"0cc966fa": "buy(address,address,uint256,uint256,uint256,bool)", +"0ccc642e": "emergencyFlagAndHiddenCap()", +"0ccc68bb": "_create_mineral(bytes32,address,uint256,uint256)", +"0ccc88b1": "BurnupGameBase()", +"0cccfc58": "auctionPeriod()", +"0ccde0b1": "initialSupplyPerAddress()", +"0ccec396": "getNumReleases()", +"0ccf30f1": "setRentTime(uint256)", +"0ccf5af4": "_prizeAmount()", +"0ccfdd8b": "potentiallyCirculatingPop()", +"0cd0563b": "broadcast(string)", +"0cd0c3d7": "resetRental()", +"0cd1812f": "sendFundsTo(address,uint256)", +"0cd205bb": "CrowdsaleContract(uint256,uint256,address,uint256,uint256)", +"0cd28e9d": "getRoundPlayerList(uint256)", +"0cd2b327": "approveSponsorableJob(address,uint256,address)", +"0cd30783": "getcompany(uint256)", +"0cd3c7f7": "ransom()", +"0cd3fad2": "_base64decode(bytes)", +"0cd4700a": "NT()", +"0cd522da": "returnStartBlock(uint256)", +"0cd55abf": "nextNonce(address)", +"0cd5ea83": "earlyBirdDuration()", +"0cd641b2": "tokenForComunity()", +"0cd64ad0": "changeEthDailyLimit(uint256)", +"0cd6ceb3": "Boldman()", +"0cd74cd9": "etherWallet()", +"0cd7d0f2": "DestlerDoubloons()", +"0cd865ec": "recover(address)", +"0cd8dd0b": "setXPTokenAddress(address)", +"0cd9aec6": "testFailTrustWhenStopped()", +"0cd9f271": "buy10()", +"0cda88ce": "mul256By256(uint256,uint256)", +"0cdbf3dd": "setReferralsMap(address[],address[])", +"0cdc92ea": "canBeCanceled(uint256)", +"0cdd4234": "mainAddress()", +"0cddb437": "CNDTPrivate()", +"0cde0e7d": "solve(int256,int256,int256,int256)", +"0cde6009": "KinTokenSale(address,uint256)", +"0cded5f0": "migratePool()", +"0ce08a49": "refundAmount(uint256)", +"0ce10cbd": "changeOwnerToZero()", +"0ce11049": "setBCoinContractAddress(address,address)", +"0ce11a77": "registrarAddress()", +"0ce11ded": "updateMthEthRate(uint256)", +"0ce18afc": "TabToken()", +"0ce1f4b7": "toB32(bytes,uint256,bytes)", +"0ce3151c": "personUpdateRelation(uint256,string)", +"0ce38276": "setColorYellow()", +"0ce3d998": "fetchCancelledOrdersForMerchant()", +"0ce46c43": "scheduleCall(address,bytes4,bytes,uint16,uint8,uint256[5])", +"0ce4c990": "minRevenueToDeliver()", +"0ce4e104": "bnbTokenWallet()", +"0ce52e25": "time_on_trademarket()", +"0ce5a098": "getWordCount()", +"0ce64868": "setPendingValue(uint256,string)", +"0ce6bd26": "EtherCarbon()", +"0ce71356": "canPropose(address,uint256)", +"0ce84479": "Wallet10()", +"0ce8544a": "Ethlyte()", +"0ce90ec2": "levelUp(uint256)", +"0ce96e71": "removeAddressFromQueue(uint256)", +"0cea64a0": "callSomeFunctionViaOuter()", +"0cea7534": "withdrawMargin(uint256)", +"0ceaeb5a": "ecosystemSupplyRemaining()", +"0cec1ecd": "getPixelDistributor()", +"0cecf728": "ListingCancelled(bytes5,uint256)", +"0ced5b02": "buyTokens(uint128)", +"0cedd0bd": "_getDestinationPartition(bytes32,bytes)", +"0cee1725": "withdrawFund(uint256)", +"0cee22e9": "testSetBalanceSetsSupply()", +"0cef7d5a": "WBW(uint256,string,uint8,string)", +"0cef9a27": "add2MarketPlace(uint256,uint256,uint256)", +"0cefa4de": "minPersonalCap()", +"0ceff204": "withdrawRevenue(uint256)", +"0cf01051": "startFunding()", +"0cf039e3": "setBuyRequestLimitInterval(uint256)", +"0cf044ee": "enable_exploration()", +"0cf1d050": "withdrawAllToExchange(address,uint256)", +"0cf1dafc": "refreshRate(uint256)", +"0cf1dd6e": "BattleOfThermopylae(uint256,uint256,uint8,address,address,address,address)", +"0cf20cc9": "withdrawBalance(address,uint256)", +"0cf3da77": "ELCToken()", +"0cf45ba5": "updateFirstDuel2(uint256)", +"0cf56f3f": "addBetWithReferrer(uint256,address,address)", +"0cf59cc6": "changeScientistForElement(uint256,uint256)", +"0cf6d879": "getARInvTable()", +"0cf7193d": "Tradex()", +"0cf79e0a": "transfer(uint256,uint256)", +"0cf7f3b5": "changePrice(uint256,uint64)", +"0cf820e0": "lengthOfRecord(uint256)", +"0cf838e1": "Test2(address)", +"0cf85c4c": "stateMask()", +"0cf868bf": "_airdropLimit()", +"0cf8bcab": "setItemTransferable(uint256,bool)", +"0cf935c0": "getDegreeCount()", +"0cf93a60": "ICOweek1End()", +"0cf94990": "checkMD(address)", +"0cf94cda": "calcInvitationAmount(uint256)", +"0cfa0318": "approveBurn(address,uint256)", +"0cfa1d12": "rndExtra_()", +"0cfa8af4": "deleteCandidateByStage(address,uint256)", +"0cfb37a7": "revealProofOfPerfBlock(uint32,bytes32,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", +"0cfbf6c6": "lockConfiguration()", +"0cfccc83": "SUPPLY_CAP()", +"0cfd0a0d": "INDI()", +"0cfd2c6a": "RecreationCultureMassMediaCoin()", +"0cfed2a2": "pauseSale(bool)", +"0cff4058": "AacharyaToken()", +"0d009297": "initOwner(address)", +"0d011088": "convert2(string,string,address)", +"0d015e4b": "get_depositLock()", +"0d01c1ae": "set_Area_name(string)", +"0d02369b": "takeSellOrder(address,uint256,uint256,address)", +"0d024f83": "DownStats(uint256,uint256,uint256,uint256)", +"0d02e05c": "setBuyStatus(bool)", +"0d032623": "getRemainingCompanyTokensAllocation()", +"0d043a60": "getRewardsWithdrawn(uint32,address,address)", +"0d047c5b": "NewFounderAddress(address,address)", +"0d047d49": "getFashionsAttrs(uint256[])", +"0d051c52": "clearCrowdsaleCloseTimer()", +"0d052f39": "getBurnAdminApproval(address,address)", +"0d055d1e": "sendBill(uint256)", +"0d0567ae": "latestAddress()", +"0d058fe3": "create(uint256,string,address)", +"0d062959": "FXTOKEN(address,uint256,uint256)", +"0d06a2ee": "setBenefeciar(address)", +"0d0a1901": "secondReserveAllocation()", +"0d0a6bf2": "investor_clearRefBonus(address)", +"0d0abf52": "matureBalanceOf(address)", +"0d0b0c74": "loadN(uint8[],uint256,uint256)", +"0d0b86c6": "CryptaurDepository()", +"0d0b8825": "weiPerRtc()", +"0d0bfb2f": "ba2cbor(bytes[])", +"0d0c0c51": "LogParticipation(address,uint256,uint256)", +"0d0c2008": "TwoAndAHalfPonzi()", +"0d0c2c62": "MOTDiscount()", +"0d0c529a": "getacttslen()", +"0d0cd4f4": "allWalletBalances(address)", +"0d0d0554": "ARMYToken()", +"0d0d7dc9": "raiseEvent2()", +"0d0ed6b9": "fetchAllCandidatesByIndex(uint256)", +"0d1017d6": "EnterRentCrowdsale()", +"0d10e842": "weiAmount()", +"0d1118ce": "burnTokens(address,uint256)", +"0d117d16": "chunk1IsAdded()", +"0d11dd70": "currentRefundInvestorsBallot()", +"0d121337": "transferOperatorRole(address)", +"0d126bc4": "getCurso()", +"0d1352cf": "marketAnts()", +"0d13bec6": "SellAcorns(uint256)", +"0d13d85e": "transferMintTokens(address,uint256)", +"0d13ea7d": "BONUS_2_DAYS()", +"0d145d16": "RegisteredPlayer(address,uint256)", +"0d14ed4f": "midgradeOpen()", +"0d157352": "ForkiToken()", +"0d15fd77": "totalVotes()", +"0d16b6ca": "setBTCRate(uint256)", +"0d16cba5": "addMessage(address,address,address,string)", +"0d172a01": "transferTokenTo(address,address,uint256)", +"0d174c24": "setWithdrawer(address)", +"0d17ace0": "currentDiscountPercentage()", +"0d17bc2e": "_disallow()", +"0d17c576": "_deliverBonusTokens(address)", +"0d18952b": "UpdateReleasePrice(uint32,uint256)", +"0d1946df": "MasterToken()", +"0d1a0c62": "setPackSize(uint256)", +"0d1a0d5e": "TokensPurchased(address,uint256,uint256,uint256)", +"0d1a94de": "SeriesCreated(uint256)", +"0d1ce2d2": "activateToken(address)", +"0d1cf200": "muscFund()", +"0d1d38aa": "info(uint256,bytes32)", +"0d1d6ffd": "checkTransferIn(address,uint256)", +"0d1d8d6d": "listTeams()", +"0d1dcd74": "foundersRewardsMinted()", +"0d1edad1": "Start8()", +"0d1ee029": "add(string,int256)", +"0d1efd7d": "getDistrictCode()", +"0d1f3471": "deleteRecord(address)", +"0d1f9bb6": "isBetLocked()", +"0d1fce42": "getBankroll()", +"0d20a889": "getRegistrantId(address)", +"0d213d31": "migrateTo(address,uint256)", +"0d2218d6": "millRaised()", +"0d229be7": "priceTokenWei()", +"0d24317d": "_getTotalHp(int256,int256,int256,int256)", +"0d244d68": "setNotRetractable(bytes32)", +"0d25320c": "distributedAmount()", +"0d2560ee": "addMe()", +"0d25b6f2": "getMonsterName(uint64)", +"0d260b60": "_sendTranche(bytes32,address,address,uint256,bytes,bytes)", +"0d2646d4": "switchNodes()", +"0d26c879": "getTotalFundationTokens()", +"0d271720": "transferFromAdmin(address,address,uint256)", +"0d274929": "getChannelName(uint256)", +"0d27864f": "TokenSwapOver()", +"0d278a8b": "Technology3GCrowdsale(uint256,address,address)", +"0d2806ad": "TOKEN_PRICE_D()", +"0d285d8c": "ETH_TO_QST_TOKEN_RATE()", +"0d28f8d1": "importIsland(bytes32,address[3],uint256[7],uint256[8])", +"0d290220": "getAllCardsType()", +"0d290deb": "SumToken()", +"0d294629": "splitProfits()", +"0d298318": "heapSort(uint128[])", +"0d2a1fa7": "mintAfterIcoPeriod()", +"0d2a246e": "tokenDividend()", +"0d2a25bb": "tentimes()", +"0d2bd1ac": "changeFact(string)", +"0d2be064": "buyToken(address,uint256,uint256,bool)", +"0d2cbe13": "settleBet(uint256,uint256)", +"0d2cc54a": "rebirthAxie(uint256,uint256)", +"0d2ce376": "submitVote(bytes32,bytes32)", +"0d2e017b": "getGamers()", +"0d2e677a": "getHotels()", +"0d2f2971": "authorized_recordFailedOldOwnerTransfer(address)", +"0d2f99d0": "removeChild(address,bytes32,bytes32)", +"0d2fc226": "createTokenUri(uint8,uint8,uint64,uint64,uint64)", +"0d3016bf": "_getIPFSHash(address,bytes32)", +"0d301c75": "removeFromGoldList(address)", +"0d30afb0": "CONFIG_DICE_SIDES()", +"0d310998": "DataContacts(address,address,address,address)", +"0d3167da": "BarmatzTestToken()", +"0d325b29": "setTokenApproval(uint256,address,bool)", +"0d329d14": "ICOtotalSupply()", +"0d334130": "m_callbackGas()", +"0d33cfa0": "meltAddress(address)", +"0d342cab": "autoTransfer()", +"0d3471f9": "sumHardCapICOStage5()", +"0d349aea": "updatePaid(address,address,uint256)", +"0d35f64c": "teamReservedBalanceOf(address)", +"0d3665b5": "IloveYou()", +"0d368fee": "deverify(address)", +"0d36c02c": "BACKUP_TWO()", +"0d3737b0": "mintAgent()", +"0d37ac7f": "toggleFunding(bool)", +"0d381a28": "tokensByOwner(address)", +"0d381cad": "addJobContract(uint256,string,bool)", +"0d38a077": "affRegister()", +"0d38ea48": "ethreceived()", +"0d38ffcd": "donationRate()", +"0d392cd9": "updateWhitelist(address,bool)", +"0d39820c": "preInvestStart()", +"0d39968c": "funderSmartToken()", +"0d3a557e": "_allowance(uint256,uint256,bytes32)", +"0d3ade73": "adjustNextTranche(uint8,uint8)", +"0d3b7901": "withdrawBonus(address[])", +"0d3c1b45": "addLayer(address,uint256,string,string)", +"0d3c7519": "distribute_NRT()", +"0d3cb409": "getAdjudicatorAddress()", +"0d3e4044": "binary_search(uint256,bytes32)", +"0d3f5cb5": "findCliPendTAndSetPrfm(address,address)", +"0d3fbdf8": "getPI_edit_8()", +"0d40022a": "_buildShip(uint16,uint16,uint8,bytes32)", +"0d40e8d6": "supportHarvestQuorum()", +"0d41117f": "calculateFee(uint256,uint256,uint256,bytes32,bool,bool)", +"0d42240a": "isWhiteListedAddress(address)", +"0d425559": "ownerSetMiningProfit(uint256)", +"0d441f8c": "totalNacInPool()", +"0d44cf79": "lastDelayedSetStake()", +"0d465263": "assessFees()", +"0d469483": "fiatToWei(uint256)", +"0d46f410": "getProposalParent(bytes32,bytes32)", +"0d46f877": "irucoin()", +"0d46f91a": "kycCertifier()", +"0d472f5f": "airdrop_byadmin(address,uint256)", +"0d4766a3": "STARTING_SHITCLONE()", +"0d480993": "getFoundersTokens(uint256)", +"0d483442": "NO()", +"0d4891ad": "signalDoneDistributing(uint256)", +"0d48a771": "claim(address,uint256,uint256,uint8,bytes32,bytes32)", +"0d48e8d0": "doBalance()", +"0d494a05": "isICOUp()", +"0d498b1e": "setTokenSPUsdCentPrice(uint256)", +"0d49a0f0": "addProofOfPerfBlock(uint32,bytes32,bytes32,bytes32,bytes32)", +"0d4a464f": "_newHorseShoe(uint256,uint256,uint256,bool,bool,address)", +"0d4a690a": "KopiToken()", +"0d4a8b3b": "wadmin_freezeAccount(address,bool)", +"0d4b8208": "convertCarbonDollar(address,uint256)", +"0d4c8f62": "setPayouts(uint256,uint256,uint256)", +"0d4d1513": "mint(address,uint256,address)", +"0d4d389f": "POOL_EDIT_4()", +"0d4e03e1": "changeTargetWallet(address)", +"0d4ea316": "buyLandWithTokens(bytes32,int256[],int256[])", +"0d4faa05": "acheter()", +"0d50266c": "TEAM_PERCENT_GZE()", +"0d505d54": "GDX()", +"0d5260e7": "setGasReserve(uint256)", +"0d5269ab": "distributeInviteReward(uint256,uint256,uint256,uint256,uint256)", +"0d5302c4": "DEVCLASS_EXTRACTION_BASE()", +"0d533e99": "UnlockEvent(address)", +"0d53b406": "recordEscrowOnBid(uint64,uint64)", +"0d543862": "sigBountyProgramEDUSupply()", +"0d54c49e": "processEndGame(uint256)", +"0d550b75": "allowance(uint256,address,address)", +"0d55af64": "AFRIHUBcredits()", +"0d5624b3": "preSaleStart()", +"0d567f38": "setStartRound(uint256)", +"0d571742": "setGenesisAddress(address,uint256)", +"0d57a47f": "setTokenCountFromPreIco(uint256)", +"0d582f13": "addOwnerWithThreshold(address,uint256)", +"0d5866e2": "setDeprecated(address)", +"0d59b564": "submitTransaction(address,uint256,bytes,uint256)", +"0d59c736": "Gavsino()", +"0d5a13f4": "BitdealCoin(address)", +"0d5a5c32": "CROWDSALE_OPENING_TIME()", +"0d5a621b": "childContractByIndex(uint256,uint256)", +"0d5be2df": "ballotLog(address,uint256)", +"0d5d6f7a": "BitEyeExchange(address)", +"0d5defa4": "escrowAddress()", +"0d5dfdd8": "debugVal4()", +"0d5e1e82": "redeemReputation(bytes32,address)", +"0d5e4c8d": "initialPrizeWeiValue()", +"0d5e87f4": "calcTokenAmountByZWC(address,address,uint256)", +"0d5f8f17": "setXWinContractAddress(address)", +"0d5fced3": "CHAJING()", +"0d605c4a": "NUM_RESERVED_AXIE()", +"0d60889c": "Thanks(address,address,uint8,uint8)", +"0d609939": "setParameters(uint256,uint256,uint256,uint256,address,address)", +"0d60e231": "migrationRewardTotal()", +"0d6103a1": "unsoldTokensBack()", +"0d616d20": "withdrawContribution()", +"0d61a4ff": "HUT34_VEST_ADDR()", +"0d61b519": "executeProposal(uint256)", +"0d61cd5d": "mintICD(address,uint256)", +"0d623e10": "oracleType()", +"0d63e87d": "setIntervalTime(uint256)", +"0d63fdbe": "parseOutputScript(bytes,uint256,uint256)", +"0d6495ef": "View_MediatedTransaction_Status(uint256)", +"0d649f90": "getVisaIdentifier(address,uint256,uint256)", +"0d65d50b": "TIER3()", +"0d65e3e7": "IS_SIGNATORY(address)", +"0d66343c": "getPaintingOwner(uint256)", +"0d668087": "lockTime()", +"0d668818": "dataContract()", +"0d66a3ec": "ApisCrowdSale(uint256,uint256,uint256,address,address,address,address)", +"0d679531": "soldedSupply()", +"0d6798e2": "userFinalize()", +"0d67d01b": "GradeBook()", +"0d68ddeb": "setBUUU(bytes32,uint256,uint256,uint256)", +"0d694114": "addressPremineBounty()", +"0d6a5c75": "ComputeHarvest()", +"0d6c66a1": "safesub(uint256,uint256)", +"0d6d1437": "changeMemberName(address,string)", +"0d6d1e64": "EricToken(uint256,string,uint8,string)", +"0d6dcab3": "getProofOfStakeReward(address)", +"0d6e548e": "getAgentsNum()", +"0d6ec16f": "isMyDrone(uint256)", +"0d6f6f0b": "summTeam()", +"0d6f72aa": "DLXV()", +"0d6f7ca3": "maxgas()", +"0d6f849b": "minAmountPresale()", +"0d6f8563": "withdrawWei(uint256)", +"0d6fef5f": "MoonBook()", +"0d70e29c": "isAuthorizedToTransfer(address,address)", +"0d70e7e3": "getRate(uint256,uint256)", +"0d71212f": "robotLiabilityLib()", +"0d7128d8": "setGoalETH(uint256)", +"0d7172f4": "canMakeUnrefusableOffer()", +"0d71aba5": "getRace(uint256)", +"0d729abc": "setStopDay(uint256)", +"0d72d57f": "backendAddress()", +"0d730a1a": "updateMerchant(string,string)", +"0d73a44a": "_collectFee(address,uint256)", +"0d73c10e": "totalWeiRaisedDuringICO2()", +"0d7519a9": "initialTokenSupply(address,uint256,bool)", +"0d7548f7": "seeEthPrice()", +"0d75d68e": "_canDownload(bytes32,uint8,bytes32,bytes32)", +"0d75f659": "TemperatureMeasurementA2(address,int8,int8,uint16,string)", +"0d7714e2": "PiedPiperCoin(uint256,string,uint8,string)", +"0d78573e": "releaseManager()", +"0d78bc17": "importCustomer(address,address,uint256)", +"0d7982ad": "lockMinting()", +"0d799734": "setMinSet(uint256)", +"0d7a90c8": "maxSeedStage()", +"0d7af726": "addGame(address,string,string)", +"0d7b4ac4": "setLLV_edit_27(string)", +"0d7b69e2": "fiatCurrency()", +"0d7bca61": "withdrawSuccessful(bytes32)", +"0d7bf53c": "getBlockHash(uint256,uint256)", +"0d7c064f": "setMinStandingBalance(uint256)", +"0d7cffb0": "PrizePool()", +"0d7dc36a": "setManagement(address,address,bool)", +"0d7eaa8b": "FudgeCucks()", +"0d7f7eff": "TokenDestructible()", +"0d8053ca": "getBetLength()", +"0d806df7": "setXaurCoined(uint256)", +"0d80b84b": "crowdSaleTime()", +"0d80bf64": "whitelist(string)", +"0d80fcdb": "distributeBonuses(uint256)", +"0d81057e": "multiplierOnWin()", +"0d81a570": "migrationDone()", +"0d826264": "phaseThreeLimit()", +"0d82cb3a": "setHeir(address,uint8,uint256)", +"0d830190": "getCharacterInfo(uint256)", +"0d831d09": "forwardUpdateFeesTo()", +"0d83304c": "getSales()", +"0d83a371": "unprocessedQueryBytes32s(uint256)", +"0d83dd8a": "recordNewAddress(address)", +"0d854646": "magic()", +"0d85ef17": "ZombiewCreator()", +"0d8693bd": "sBitcoin()", +"0d869ada": "immortals()", +"0d873644": "addToken(uint256,uint256,uint256,uint256,bytes)", +"0d87a7c0": "WLBDrawsDB()", +"0d8814ae": "cardOwnerOf(uint256)", +"0d882848": "BTNSold()", +"0d883bdf": "generateN()", +"0d88fb04": "removePatternUserIndex(address,bytes32)", +"0d895ee1": "setBurner(address,bool)", +"0d8b2708": "functionFour(uint256,uint256,uint256,uint256)", +"0d8b5fa2": "testControllerValidTransferFrom()", +"0d8b70bf": "grantAccessMint(address,address)", +"0d8c1a62": "toogleActive()", +"0d8c1c17": "read_supply()", +"0d8c2f67": "_logSendWebGiftAndSendEther(address,uint256)", +"0d8c3c2f": "calculator(address,uint256,uint256)", +"0d8cba74": "PublicMiningSupply()", +"0d8e6e2c": "getVersion()", +"0d8f9cee": "disableToken(address,address)", +"0d8fbe23": "getDigitFromUint(uint256,uint256,uint8)", +"0d8fd836": "ExeniumToken()", +"0d9019e1": "RECIPIENT()", +"0d9029ea": "Cryptodraw()", +"0d9049f2": "createOffer(uint256,uint256,string,uint256[])", +"0d927924": "XPCoin()", +"0d92b691": "transferDefaultPercentsOfInvested(uint256)", +"0d92d381": "ElectricQueue()", +"0d92ddac": "LockEvent(address,uint256,uint256)", +"0d92e3e8": "claimedTokens()", +"0d9332e2": "setMinContractBalance(uint256)", +"0d93afef": "revokePermissionBatch(address[],string)", +"0d9543c5": "donateAs(address)", +"0d955209": "ARTWORK_STARTING_PRICE()", +"0d95ccc9": "setPreSale(bool)", +"0d963235": "setGrowthBump(uint256)", +"0d973d2e": "getTimestampProposal(bytes32)", +"0d97f395": "redeem(string,bytes32)", +"0d98dcb1": "getTransferPreSignedHash(address,address,uint256,uint256,uint256)", +"0d997dc3": "setdivsforall(bool)", +"0d99bbec": "calculateUSDWithBonus(uint256)", +"0d99edbf": "presaleWeiLimit()", +"0d99f40a": "setInvestors(address)", +"0d9b2730": "FireXToken()", +"0d9b71cc": "setParter(address,uint256)", +"0d9d19b9": "joinMatch(uint256,uint256,string)", +"0d9db3f1": "VertesCoin()", +"0d9e16d1": "Alphonic()", +"0d9e8cab": "winnerLast(uint256,uint256)", +"0d9ec228": "_price_token_ICO3()", +"0d9f2817": "getJobSkillsCategory(uint256)", +"0d9f5aed": "mixGenes(uint256,uint256,uint256)", +"0d9f5faa": "oasisDirect()", +"0d9fcb03": "juegoSillaConsensys01(address)", +"0da03197": "_build(uint256,int256,int256,uint8)", +"0da04fa6": "Smrtoken()", +"0da072a8": "newMediaTokenCreated(string,address,string)", +"0da108ff": "JointICOBonusAmount()", +"0da1eb03": "deleteHiddenPosition(uint32,int64,bytes16)", +"0da24421": "bytesMemoryArray(bytes)", +"0da2c5f0": "setBuyLimits(uint256,uint256)", +"0da2e088": "upgradedContractAddress()", +"0da2ee2f": "init_register_contract(bytes32,address,address)", +"0da30317": "ExchangerPoint(address,address)", +"0da304b0": "AssetToken()", +"0da3bec6": "addToCategorie1(address,address)", +"0da3e613": "EthFactory()", +"0da4f991": "createContinuousSaleContract()", +"0da4fc46": "unMutex()", +"0da590d4": "withdrawDevFees()", +"0da5f845": "unBlacklistAccount(address)", +"0da719ec": "onERC998Removed(address,address,uint256,bytes)", +"0da76f1c": "externalDecline(uint256,bytes32)", +"0da84bc1": "newIntegrityFeeProposal(uint256,string)", +"0da86f7f": "JUSTed()", +"0da877d3": "getWeis(uint256,uint256)", +"0da8ba5d": "checkRecentInvestments(address)", +"0da95761": "upgrade(string)", +"0da97716": "isSignedByAlex()", +"0da9e3d7": "tokenIcoAllocated()", +"0daa431a": "currentstageplayer1()", +"0daa5703": "set(bytes32,bool)", +"0dab6e08": "getallowedContracts(uint256)", +"0dac3d99": "deadlineTwo()", +"0dae2a63": "DTXToken()", +"0daf233b": "agingTimeByStage(uint256)", +"0daf37e6": "Sales(address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", +"0daf7a8c": "setBlacklistInternal(address,bool)", +"0daf96f9": "ThaiBahtDigital()", +"0daf999a": "heroContract()", +"0dafc58f": "Compound_now_Accrued_interest()", +"0db02622": "ownerCount()", +"0db03955": "fundingProcessed()", +"0db0624a": "z_Determinations()", +"0db14e95": "getStakedAmount(address,address)", +"0db1b335": "getNextMaximumPlayers()", +"0db293cb": "depositDekla(uint256,uint256,bytes,uint256)", +"0db38253": "DEFAULT_CLIFF()", +"0db38f66": "BetChampion(uint256)", +"0db3be6a": "decrementOpenInterestFromMarket(uint256)", +"0db49c84": "TokensSold(address,uint256,uint256,uint256,uint256,uint256)", +"0db4bad0": "claimDate()", +"0db5db26": "weiToOwner(address,uint256)", +"0db6a786": "SALES_DEADLINE()", +"0db6ba9b": "debugGetNumPendingSubmissions()", +"0db71d53": "createCrowdsale(uint256,uint256,uint256,uint256)", +"0db73c72": "noevent()", +"0db74aaa": "getInvestorBalance(uint256)", +"0db75ab9": "UsingAVirtualStruct()", +"0db79003": "addWineryOperationByRegulator(string,string,string,string,uint256,uint16,string)", +"0db81580": "purchaseAd(uint256,string,string)", +"0db9d891": "icoEndOfStageA()", +"0dba2400": "addToMidnightPrize()", +"0dbb78ce": "showPoolMembers(uint256)", +"0dbbc14c": "endOfROSCARetrieveSurplus()", +"0dbcca89": "computeinterval(uint256,uint256)", +"0dbce4dd": "registerCandidate(string,string)", +"0dbd5270": "numberOfBackers()", +"0dbd5e81": "Send_Data(uint16)", +"0dbda70b": "angelOnLeaderboards(uint64)", +"0dbe671f": "a()", +"0dbea6d0": "robotRefund(address)", +"0dbedee7": "getNFTbyTokenId(uint256)", +"0dbf19cb": "PRICE_RATE_LAST()", +"0dbf23f4": "vehicleregistration(address,string,string,string)", +"0dbf2a3f": "isNewWeek()", +"0dbf527e": "MintedToken(address,uint256)", +"0dc03ec7": "INFLIV(uint256,string,uint8,string)", +"0dc06e50": "postTX(address,uint256,uint256)", +"0dc081c5": "tokenTransferOwnership(address)", +"0dc10a60": "advisorsAddress()", +"0dc115c8": "coinanxtemp()", +"0dc16a56": "getDepotEth(address)", +"0dc174bd": "track(address)", +"0dc1819f": "purchase_tokens()", +"0dc193f5": "getEtherReceived()", +"0dc1d357": "isAfterEnd()", +"0dc224ec": "partnersMintLockEnd()", +"0dc26492": "bankPercent()", +"0dc2e439": "setBZxAddresses(address,address,address,address)", +"0dc30397": "counterAppeal(uint256)", +"0dc3279d": "maxnumber()", +"0dc32b72": "EtherStopLoss()", +"0dc36f2a": "migrationAgentCandidate()", +"0dc5bffb": "crowdsaleTokenAmount()", +"0dc6bae5": "allowFreezeBypass(address)", +"0dc6c392": "Puttu()", +"0dc7bd07": "testBurnAuth()", +"0dc8b5a8": "shortenPreIco(uint256)", +"0dc8f435": "Party(address,uint256)", +"0dc96015": "getVotes()", +"0dc9c838": "changeSaleTimes(uint256,uint256)", +"0dc9ebfe": "FoundationAddr_()", +"0dca59c1": "debt()", +"0dca7ed8": "winningOption(uint256)", +"0dcad340": "getCitizenLocation(address)", +"0dcaf3e2": "test_setupSucceeded()", +"0dcb4627": "_addPendingRequestId(uint32)", +"0dcc59e6": "DEFROST_INITIAL_PERCENT_OWNER()", +"0dccca72": "showFPLocktime()", +"0dccfde4": "WithdrawProfitFunds(uint256,address)", +"0dcd772c": "AmountSent(address,uint256)", +"0dcd7a6c": "sendMultiSigToken(address,uint256,address,uint256,uint256,bytes)", +"0dcd9759": "PPToken(uint256,string,string)", +"0dcdefa8": "playThreeDiceTotal(uint256,uint256)", +"0dce06c1": "goalOfState(uint256)", +"0dcec63d": "updateEtherPrice(uint256)", +"0dcf298b": "pollExists(bytes32)", +"0dcf38a9": "FirstPaySend(uint256,address)", +"0dcf4b8f": "totalContribution()", +"0dd0a042": "lock(bool)", +"0dd0cf9e": "founderAdress()", +"0dd12d38": "moderatorTransferFrom(address,address,uint256)", +"0dd1d147": "ActionCompose(address)", +"0dd27120": "exchangeState()", +"0dd2d96c": "doFinalize()", +"0dd2d9c0": "Rookcont()", +"0dd30c81": "toB32(uint256,bytes,uint256)", +"0dd327fe": "FundsKeeper(address)", +"0dd32910": "welcomeMsg()", +"0dd3e1b1": "CNT_Crowdsale()", +"0dd3fd03": "buySpins(uint256)", +"0dd5db48": "startPreSale1()", +"0dd5e582": "masterTransferFrom(address,address,uint256)", +"0dd5ee1b": "verify(address,bytes32)", +"0dd636ef": "setBuyDividendPercentageFee(uint8)", +"0dd63ba3": "setIntArrayIndex(bytes32,uint256,int256)", +"0dd6a4ad": "addOversight(address)", +"0dd6eae1": "setCourse(uint256)", +"0dd84392": "setAllowance(address,address,uint256,uint256)", +"0dd8cdbb": "initRegistryData(address,address,address)", +"0dd93b56": "restartAuction()", +"0dda20d1": "sellCrystalDemand(uint256,uint256,string,string)", +"0dda350f": "dumpdivs()", +"0dda507e": "manualFinish()", +"0ddc4a94": "WHOLESALE_TOKENS()", +"0ddcc528": "Testable(bool)", +"0ddcfe8e": "checkAddress(address)", +"0ddd0824": "checkHash(bytes32,bytes32,uint256)", +"0ddeb632": "buy(bytes32,uint256)", +"0ddeeb4f": "tokenSaleUpperLimit()", +"0ddef58d": "isUnfrozen(address)", +"0ddf0bfd": "Cryptogs()", +"0ddf0c41": "updateCandidate(address,string,string)", +"0ddf78c2": "divForEthertoteDevelopmentWallet()", +"0de0271e": "paymentReceived(address,uint256)", +"0de04691": "testCreateWithParentForeign()", +"0de0b1bc": "giveBirthByUser()", +"0de1f4c1": "CreateCodeToken(uint256,string,string)", +"0de2b2d8": "openPosition(address[11],uint256[10],uint32[4],bool,bytes,bytes)", +"0de3513a": "test_validRuleChange()", +"0de39733": "activateFlat(address,uint256)", +"0de3b100": "VoteForProposal(uint256)", +"0de41aa4": "checkIfAddressIsWhitelisted(address,address)", +"0de41e45": "lockBegunAtBlock()", +"0de54c08": "setUpgradeController(address)", +"0de607c3": "makeSubscriptionID(address,uint256)", +"0de6aa7f": "getOneTimeCostsPaid()", +"0de78a7f": "removeEggFromSale(uint256)", +"0de94e4a": "HodlEth(address,uint256)", +"0de96dff": "giveBack()", +"0de9b825": "sellShip(uint256,bytes32)", +"0de9cacd": "reCalc()", +"0dea35bf": "playerBet(uint256)", +"0dea38b6": "VESTING_TIME()", +"0deaf3f8": "claimNextReward(address,uint256)", +"0dec1c23": "requestDetachment(uint256)", +"0dec5d85": "initializeCrowdsale()", +"0ded195e": "freezeTokensOfOneUser(address)", +"0ded7f62": "secondBonusEnds()", +"0dedffb8": "feedAndMultiply(uint256,uint256)", +"0dee302e": "transferToRef(address,uint256)", +"0dee34ed": "tokensaleStageAt(uint256)", +"0dee3863": "nameEntriesCount(bytes32,uint16,bytes32)", +"0dee4af0": "doThrow(uint256)", +"0def3866": "updateChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"0df04802": "_7_russkayaRuletka()", +"0df07980": "secondLevelPrice()", +"0df0de11": "ownerChangeBuyerfee(uint256)", +"0df104d7": "EtheeraToken(address)", +"0df12532": "setpricefactor(uint256)", +"0df18942": "hsub(uint128,uint128)", +"0df19d35": "lockup(address)", +"0df22268": "CryptoSanguoToken()", +"0df23e5b": "saleCounterThisPhase()", +"0df2dcd2": "OdinToken()", +"0df3a342": "_coldStorage()", +"0df4135a": "CMCT()", +"0df428f0": "GoldenFleeceToken(uint256)", +"0df62a33": "Lilbank()", +"0df63210": "DOMAIN_SEPERATOR()", +"0df71602": "setWinner(uint256)", +"0df76370": "createInvoicingAddress(string,string)", +"0df8cbfe": "isCluster()", +"0df8e481": "setassetPrice(uint256)", +"0df9178f": "LimeEyes()", +"0df9d568": "CentraWhiteList()", +"0dfa1140": "_RaffleDraw()", +"0dfa71ae": "salesAgent()", +"0dfad849": "TokenSale(address,address,address,address)", +"0dfb0297": "changePriceSelectFight2Death(uint256)", +"0dfb6615": "user(bytes32)", +"0dfbdcc5": "lethalBonusAtHits()", +"0dfc2bcd": "originalFunds()", +"0dfce266": "setCovman(address)", +"0dfd085a": "ICOBeginsAt()", +"0dfd45f9": "removeHelper(address)", +"0dfd799c": "SponsoredLink(string)", +"0dfdcb76": "setAuctionWinnerMessageHash(bytes32)", +"0dff5cb9": "bop()", +"0e001ec0": "balanceOfContractFeeToken()", +"0e011262": "mockWhiteList()", +"0e014cf8": "viewBalance(address,address)", +"0e0280d0": "bookRoom(string,uint256[],uint256,address,bytes32)", +"0e0290a4": "_3_orientation()", +"0e037cc0": "bulkRemove(address[])", +"0e03f276": "setLLV_edit_7(string)", +"0e04a7d8": "isGameOver()", +"0e05a512": "superVoteAgree(address)", +"0e0643ae": "EvTokenAdd(uint256,uint256)", +"0e06e7ef": "NFOCoin(uint256,string,string)", +"0e0701be": "test_oneValidEqStringUint(int256)", +"0e07419c": "ConversionStarted(uint256)", +"0e07658b": "eliminate(uint256)", +"0e07ef81": "registerNameXname(string,bytes32)", +"0e088c98": "cancelChainlinkRequest(bytes32,uint256,bytes4,uint256)", +"0e0a0d74": "getAmount(bytes32)", +"0e0a6f0c": "getHours()", +"0e0ac84c": "QBASE()", +"0e0afb86": "getKYCVerificationContractAddress()", +"0e0b3519": "rateTierHigher()", +"0e0bc104": "computeNextGen0Price()", +"0e0c3f58": "super_transfer(address,uint256)", +"0e0c8241": "MAXIMUM_LOOP_BOUND()", +"0e0d3567": "highestAddressReserving()", +"0e0d946b": "CyberPayToken()", +"0e0dbd72": "updateToSendFromStorage(address)", +"0e0e26da": "getRemainShareAmount()", +"0e0e4acc": "LIANG(uint256,string,string)", +"0e0e73a8": "next_round_players()", +"0e0f05a5": "executeRaiseCapital(uint256)", +"0e0f1f00": "allocationAddressPreICO()", +"0e0f55d0": "RewardOrder(uint256,uint256)", +"0e0fec9f": "Arbitrage()", +"0e1087c3": "getMarketMakerFunds()", +"0e10e99d": "Vault(bytes32)", +"0e10f1ae": "X2()", +"0e114c89": "setBonusAffiliate(uint256,uint256)", +"0e11624b": "crowdsaleBalances(address)", +"0e136b19": "deprecated()", +"0e137368": "getBorrowInfo(uint256)", +"0e13af5d": "lockedTokensWallet()", +"0e13b9af": "getValue(uint8,uint8)", +"0e1456c0": "maxPreSale2Token()", +"0e149b52": "RBRToken()", +"0e14a376": "deleteAddress(bytes32)", +"0e14f955": "readyTobreed(uint256,bool,uint256,bool)", +"0e153d48": "MarketStake(address,address,address,address)", +"0e15561a": "totalRewards()", +"0e1565c2": "getClaims(string)", +"0e15dc89": "sizeOf()", +"0e169119": "grantAccess(bytes32,address,string)", +"0e18d11e": "changeFunder(address,address)", +"0e18ea3c": "fuoco()", +"0e19bac1": "MOBILINK()", +"0e19f74f": "makeDeposit(uint256,address,address,address)", +"0e1a0217": "boolOrRevert(bool,uint256)", +"0e1a0399": "calculateWithdrawalAmount(uint256)", +"0e1a9e3f": "getJobSkillsArea(uint256)", +"0e1ac81f": "natecoin(uint256,string,string)", +"0e1ae0e4": "RateUpdated(uint32)", +"0e1af57b": "getScore(uint256)", +"0e1b39fb": "Wallet()", +"0e1c0188": "errorTickerQueryError(string,bytes32)", +"0e1c2d46": "deliveryVSpayment(bytes32,uint8,bytes32,bytes32)", +"0e1c6491": "getTotalBettersForFighter(address,address)", +"0e1ca8a5": "Oraclize()", +"0e1cdd2d": "getStandardComponent(uint256)", +"0e1cfd97": "tokensub(address,uint256)", +"0e1d2ec8": "isUpdatable()", +"0e1d88fc": "addTender(uint256,uint256,address,uint256)", +"0e1da6c3": "claimTimeout()", +"0e1e1d0f": "removeAuthorized(address,address)", +"0e1e3914": "coreSupply()", +"0e1e56f7": "Tix()", +"0e1f6d3b": "DIGC(address[],uint256[])", +"0e1fa28f": "containMinValueFromOther(uint256,address)", +"0e1fd315": "changeWhitelistStatus(address[],uint256[])", +"0e20ebe2": "right96(uint256)", +"0e213129": "ZestCoin()", +"0e216954": "ReturnEthToEtherhero()", +"0e21750f": "setFund(address)", +"0e219339": "getContractHash(string)", +"0e21a6a6": "ADD_TIERS(bytes32)", +"0e21c886": "OWNERS_TOKENS_AMOUNT()", +"0e21f784": "getCoverImage(address,uint256)", +"0e21fce3": "Suggest(string)", +"0e2286d3": "rdiv(uint256,uint256)", +"0e22dc5b": "getAllCommentIdsByAd(uint256)", +"0e2318cb": "BonumFinancialTokenPreSale(uint256,uint256,address,address,uint256)", +"0e234cd4": "countBonus(uint256)", +"0e2350ba": "TopCoinSaleClosed()", +"0e239679": "SputnikToken(address)", +"0e2451c7": "Lilith()", +"0e24c52c": "register(string,string,string,string)", +"0e24c810": "calcAmountWithBonus(uint256,uint8)", +"0e2562d9": "getAccountAddress()", +"0e25b620": "addFreeze(address)", +"0e263906": "transferToBranch(address,uint256)", +"0e26fb41": "SeniumSupply()", +"0e27324d": "approveKYC(address)", +"0e274eab": "pullTokens()", +"0e275b49": "artworkSaleCount()", +"0e27e3df": "removeConsumer(address)", +"0e2833eb": "random(uint8,uint8)", +"0e288064": "setManyBonusExtra(address[],uint256)", +"0e28bc4a": "CanceledAuctionEvent(address,address,uint256,uint256)", +"0e2916e1": "requestClosingChannel(uint256)", +"0e2984d1": "Cancel(uint64,address,address,uint256,int256)", +"0e29df22": "sendEther()", +"0e2a05c8": "delayOfICO2()", +"0e2a273f": "getCandidateIndexArrayLength()", +"0e2a9237": "r15Backers()", +"0e2ae77c": "addVesterManager(address)", +"0e2b75cc": "setWhitelistedMemberTypes(uint256[])", +"0e2cfe93": "getPercent(uint8,uint256)", +"0e2d1a2a": "vestedBalanceOf(address)", +"0e2d27cd": "claimUnsoldCoins()", +"0e2dc949": "TIER_3_BUYIN()", +"0e2dce69": "Play()", +"0e2df9aa": "Withdraw(address,uint256,int256)", +"0e2e4037": "removeOwnersConfirmations(address)", +"0e2e4ce8": "maximumLockYears()", +"0e2ebe6c": "GetPoolInformation(address)", +"0e2f0a0f": "weiReceive()", +"0e2f5fb3": "getThree()", +"0e2f8058": "setBCFContractAddress(address,address)", +"0e2f94a6": "RegionsToken()", +"0e2fb51f": "addinverst(address,uint256)", +"0e30643f": "MemberChanged(address,uint256)", +"0e30cda7": "getTotalCoinsAvailable()", +"0e316ab7": "removeSigner(address)", +"0e32a720": "sendMarketByOwner(address,uint256)", +"0e336f00": "getSeedsSinceLastHatch(address)", +"0e33e181": "get_modulo_value(bytes32,uint32,uint32)", +"0e3484c1": "DelGift(string)", +"0e34df82": "openTicket()", +"0e351605": "transfer_token(address[],uint256)", +"0e3589d9": "DAILY_FUNDS_RELEASE()", +"0e366cbf": "ourLastJackpotWinner()", +"0e3802e9": "addRewardToken(address,uint256)", +"0e388774": "setContractorImpl(address)", +"0e38901a": "unvault(uint256)", +"0e39b210": "founders_1()", +"0e3a04a7": "digitalcashToken()", +"0e3a23db": "mineMany(address[],uint8[],bytes32[],bytes32[])", +"0e3a997e": "countPartnerPlayers()", +"0e3ab61d": "startSale(uint256)", +"0e3b70fd": "month48Allocated()", +"0e3bc6ca": "BLOCKLAND()", +"0e3be37d": "ToggleTransferAllowanceFor(address,bool)", +"0e3c8068": "BotpyToken(uint256,string,string)", +"0e3c9563": "privateIssue(address,uint256)", +"0e3d2202": "feeFixed()", +"0e3db9f2": "startNow()", +"0e3e9a67": "FundsMigrated(address)", +"0e3f732a": "TheGame()", +"0e3fd8c2": "getSolid(uint256)", +"0e407bdd": "soldTokensMainSale()", +"0e414500": "setClaimingStart(uint256)", +"0e417055": "address5()", +"0e41c63b": "addHistory(uint256,address,uint8)", +"0e420f42": "setEventResult(string,uint64,uint8)", +"0e429ecc": "providerValue()", +"0e4355d4": "validFactories(address)", +"0e43806a": "Rental(address)", +"0e438ee5": "withdrawTeamToken()", +"0e43d7c3": "getUserRoleBitmask(address)", +"0e449cf9": "foundersTokens()", +"0e4649fd": "LogProcessedInterval(uint64,uint64)", +"0e46695e": "sumHardCapICO2()", +"0e468245": "pledgeEth(uint256)", +"0e473722": "volumeType4()", +"0e4739b1": "_refulshFrozenInfo(address)", +"0e476e27": "getten(string)", +"0e479dc7": "getShop(address)", +"0e47c259": "evolveByAtom(uint256)", +"0e47c76f": "rotate(uint64,uint256)", +"0e496d25": "VICETOKEN_ICO_IS_FAKE()", +"0e4983ff": "setSecondsAfter(uint256)", +"0e4a4e8c": "fechVoteNumForCandidateByStage(address,uint256)", +"0e4aed3f": "yearlyRewardPercentage()", +"0e4b0ba8": "account2Address()", +"0e4b10b6": "totalETHLimit()", +"0e4b8389": "getEstKeyBlockNr(uint256)", +"0e4c3aa6": "OrangeCirculateChain()", +"0e4d5919": "PHASE1_START_TIME()", +"0e4debbc": "SHIT()", +"0e4e0054": "isIcoFinshed()", +"0e4e47cb": "claimAfter90days()", +"0e4e5d93": "_bidERC20(address,address,uint256,uint256)", +"0e5004e6": "_calcPhasesPassed()", +"0e501834": "emergencyTransfer(address)", +"0e5112a4": "get_dividend()", +"0e51574f": "endGameRound()", +"0e51c00d": "getPawnStatus(uint256)", +"0e5229b0": "addOwner(address,uint8)", +"0e5263fa": "discountedTokensPerDollar()", +"0e5356ec": "testEvents()", +"0e536ff4": "ratifyMint(uint256,address,uint256)", +"0e5376d6": "vars()", +"0e53aae9": "connectors(address)", +"0e53bf67": "producedDiamondCaps()", +"0e541185": "pauseBet(uint256)", +"0e542f82": "refundOptions(address)", +"0e54316f": "setSantaClaus(address)", +"0e54a883": "setPublicSaleDate(uint256)", +"0e54b872": "registerUser(string,address)", +"0e54d1fc": "pruneShareholders(address,uint256)", +"0e554bd8": "scheduleCall(bytes,uint256,uint256,uint8)", +"0e5689bc": "getBidsNum(address,uint256)", +"0e56f529": "guardarDocumento(string,bytes32,bytes32)", +"0e58369f": "registrator(address)", +"0e583df0": "GEN0_STARTING_PRICE()", +"0e587aee": "set_presale_arbits_per_ether(address,uint256)", +"0e58d08c": "setInvestmentGateway(address)", +"0e597ed9": "PreCrowdsale(address,address)", +"0e5a6c70": "peep()", +"0e5aaace": "initIcoRule()", +"0e5aaffc": "getSellingItemByObjId(uint64)", +"0e5c011e": "harvest(address)", +"0e5c6a3d": "_withdrawTo(address)", +"0e5ceb47": "register(bytes32,bytes32,string)", +"0e5d095d": "codepointsOf(uint256)", +"0e5d4b99": "fechVoteMainInfoForVoter(address)", +"0e5e36fb": "TCH(uint256,string,uint8,string)", +"0e5e4d72": "createAndExecuteTransaction(address[],uint256[],uint256)", +"0e5fc721": "addUserBalance(uint32,uint64)", +"0e5fdad4": "releaseTeamTokenTransfer()", +"0e5ffb3c": "hashVersion(uint32,uint32,uint32,string,string)", +"0e60de7a": "rinkeby3()", +"0e620d70": "MultiSend()", +"0e62fde6": "getAttributeTypeID(uint256)", +"0e6436d2": "TokenChange(address)", +"0e64780d": "distribute(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"0e64ff0e": "tradeWalletTokens(address,uint256)", +"0e655432": "adventureItemContract()", +"0e65e5d9": "ETBSToken(address)", +"0e662cf0": "buyTokens(uint16)", +"0e662ff9": "oddEven(uint8,address)", +"0e666e49": "userExists(address)", +"0e67cf6c": "GetWageredWei(bytes32)", +"0e67f4bb": "ReferrerRegistered(address,address)", +"0e6848cc": "massNotify(address[])", +"0e686170": "changeTotalAirdrop(uint256)", +"0e687501": "OpticalNetwork(address)", +"0e68c2f0": "finishPurse(uint256)", +"0e69782b": "BCTT()", +"0e698493": "transferFounderTokens(address,uint256)", +"0e69890f": "withdrawATN()", +"0e69d16b": "testToSliceB32()", +"0e6ae3fb": "bid(string,string,uint256)", +"0e6b0afc": "adminContractSettings(uint32,address,uint256)", +"0e6b5823": "changeMaxBet(uint8[157])", +"0e6bc36c": "OkeToken()", +"0e6c04db": "icoThreshold1()", +"0e6c5f93": "changeAddr(address)", +"0e6ce30d": "createNew(uint256)", +"0e6d1de9": "getLatestVersion()", +"0e6d3a89": "mintingState()", +"0e6dfcd5": "redeem(address,address,uint256)", +"0e6e1b3e": "addSubject(bytes32)", +"0e6e4f3e": "lockPlayerFunds(address)", +"0e6f21f2": "sendBatches(address[],uint256)", +"0e6f2cf8": "game_withdraw()", +"0e708203": "rewardAccount()", +"0e70ab11": "addEthBonusToBuy(address,uint256,uint256)", +"0e70f147": "immediateRefund()", +"0e713a50": "_preValidatePreICOPurchase(address,uint256)", +"0e714202": "returnContributionsToTheSponsors()", +"0e7238f1": "setNormalRoomMax(uint256)", +"0e741a36": "generateVoteSecret(string,uint256)", +"0e7470cb": "getFullProfit(uint256,uint256,uint256)", +"0e752702": "repayBorrow(uint256)", +"0e757191": "finalizeRound(bytes32,uint8,bytes4)", +"0e757a2e": "testSetAndGet()", +"0e78501f": "ChangeStart(uint256)", +"0e787cce": "predict(bytes32)", +"0e792536": "removeGlobalConstraint(int256,address,int256,address)", +"0e7938ec": "tokenCreateFunction()", +"0e79964c": "getBoolField3()", +"0e7a2d4e": "isInAssetList(address)", +"0e7a967a": "_distributeBountyToken(uint256)", +"0e7b592a": "Halo()", +"0e7b8e07": "Sleipnir()", +"0e7b9f10": "hasBuyerLotteryBonusWon(address)", +"0e7bda18": "addAddressListItem(bool,address,address,uint256,address)", +"0e7c0f80": "masterCopyCountdown()", +"0e7c1cb5": "originalToken()", +"0e7c5d2b": "test_validEmptyEqEmpty256()", +"0e7ce976": "owner_bonusSend()", +"0e7d490d": "numberOfVotes()", +"0e7ebce4": "min_bid()", +"0e7f2be7": "DecreaseAllowance(address,uint256)", +"0e7f756a": "totalAssetUnits()", +"0e801d7a": "ticket(address,bool,uint256)", +"0e80d8b9": "PRICE_SALE()", +"0e8162ba": "totalBurntCoins()", +"0e816f66": "payForYourGladiator(uint256)", +"0e830e49": "setEngine(address)", +"0e8354b9": "CreateOOG(address,uint256)", +"0e83afbb": "approveTokens(bytes32,address,uint256)", +"0e83d92b": "playerPull()", +"0e840284": "LMDA()", +"0e848c1d": "NeoBitToken()", +"0e850239": "scheduleCall(bytes4,bytes)", +"0e856588": "getScheduledTimelockCount(address)", +"0e858b64": "setBridgeValidatorsOwner(address)", +"0e8670e0": "highestPrice()", +"0e86b63e": "calcLevel2Bonus(uint256)", +"0e86ec01": "doConfirmDeath()", +"0e870871": "rateOfZLT()", +"0e87457b": "ZincElement()", +"0e887cda": "getUserMoney(address)", +"0e88aace": "contractErc20Token()", +"0e88c4a4": "RegisterMine(string,uint256,address)", +"0e89341c": "uri(uint256)", +"0e89439b": "stake(uint256,bytes)", +"0e8a4ac7": "getPositionPrincipal(bytes32)", +"0e8b3971": "mintTap()", +"0e8bf00e": "ReleaseOfAccount(address,uint256)", +"0e8c0cdd": "_mineableSupply()", +"0e8ca718": "transferCurationRights(address)", +"0e8da019": "getInitRound(uint256)", +"0e8de473": "getDividendBalance(address,address)", +"0e8ef0c1": "systemOnSaleCount()", +"0e8f0a95": "commonDiscount()", +"0e91f4b3": "removeBadToken(address)", +"0e923d3b": "submitEther(address)", +"0e9279a0": "BountyManager()", +"0e929611": "AdminRemoval(address)", +"0e92eb6d": "sellMyTokens(uint256)", +"0e934447": "createPromoPlayer(address,string,uint256,uint256)", +"0e940fd8": "CELL_ADD_SPACE()", +"0e94869e": "ArJoust(uint256,uint256)", +"0e94a0ee": "proofToken()", +"0e95e127": "readpriceXname(string)", +"0e96127a": "transferEther(address,address,uint256)", +"0e96938c": "matchExistingBids(bool,bytes32)", +"0e972421": "isSpawningAllowed(uint256,address)", +"0e975f73": "FirstPeriodEndDateUpdated(uint256,uint256)", +"0e978e81": "AgriChainDocumentContract()", +"0e97cfdf": "placeOrder(uint256,uint256,uint256)", +"0e97e3d3": "validateAuthentication(address,uint256,uint256)", +"0e97fa7a": "setEarlyParticipantsWhitelist(address[],bool[],uint256[],uint256[])", +"0e98f811": "reservedTotalSupply()", +"0e995ff5": "cd()", +"0e997ce3": "IPMCoin()", +"0e99b380": "getCoinAddress(bytes4)", +"0e99f5e6": "claimBonus(address)", +"0e9a9dbb": "signature(string,address,bytes32)", +"0e9aa208": "getAddressAdmixture()", +"0e9b6281": "setSubsidy(uint256)", +"0e9cbbad": "PurchaseFailed(address,uint8)", +"0e9ccb94": "Boboho()", +"0e9d02cc": "setTokensPerKEther(uint256)", +"0e9d56a2": "getTotalEth()", +"0e9e543a": "collectableTokenOf(address)", +"0e9ecedd": "mEtherInvalid()", +"0e9ef902": "join_voter()", +"0e9f0816": "getContractHash(uint256)", +"0e9f9f86": "isMinimalReached()", +"0e9fb0ed": "getOptionAddress(address,uint256,address,uint256,uint256,bool)", +"0e9fd199": "licenseAffiliate(uint256)", +"0ea008c8": "bonuscalpre()", +"0ea04562": "requestRandom(uint256)", +"0ea12558": "girlIdToOwner(uint256)", +"0ea126f9": "registerUser(address,string)", +"0ea17a76": "safe_mul(uint256,uint256)", +"0ea1f459": "DVCToken()", +"0ea227e7": "StarTravelLane()", +"0ea317a9": "SUNCOIN()", +"0ea37c64": "repost(uint256)", +"0ea412ab": "_setPrice(uint256)", +"0ea49bc1": "changeRental(address)", +"0ea4eef0": "getMaxGroupBalance(uint256)", +"0ea51122": "decreaseMarketCreatorSettlementFeeInAttoethPerEth(uint256)", +"0ea5edea": "payTodayReward(address,uint256)", +"0ea662ea": "hourPot()", +"0ea733bf": "setmyPrice(uint256,uint256)", +"0ea7a110": "getEmployee(address,uint256)", +"0ea7c8cd": "airDeliver(address,uint256)", +"0ea7ee82": "testRegisterAndVerified()", +"0ea81cf9": "initialPokemonInfo()", +"0ea8e5ac": "tokenPriceIncremental_()", +"0ea9e4f1": "doInitialReport(uint256[],bool)", +"0eaac106": "TokensAdded(address,uint256)", +"0eaadd04": "_addBurner(address)", +"0eaaf4c8": "withdrawBid(uint256)", +"0eaaf5ac": "auction_start_time()", +"0eab31b1": "initAuctions(uint256,uint256,uint256,uint256)", +"0eaba26a": "getCurrentValidatorsLength()", +"0eabdab6": "removeOracles(bytes4[],address[])", +"0eabeffe": "sendMessage(string,string,string)", +"0eac6ae7": "getClientAtIndex(uint256)", +"0eac7a0e": "transferToAnotherAddr(address,address,uint256,string)", +"0eacecd2": "getEquipTokens(address)", +"0eacf634": "BKCToken()", +"0ead3ec8": "payeePricePerPart()", +"0eada49f": "standingOrdersByPayee(address,uint256)", +"0eae2f86": "initAccount(address,uint256)", +"0eae73dd": "stringToAddr(string)", +"0eaee52c": "setGrantsUnlock(uint256,bool)", +"0eaf94c3": "secondDueDate()", +"0eaf9fa4": "ownerSetMinBorrowedValue()", +"0eafb6da": "getCapInWei()", +"0eafe473": "balanceOfCoin(address)", +"0eb05d49": "viewGoldList(address)", +"0eb0afa6": "createDebt(address,address,uint256)", +"0eb14edb": "Mondo()", +"0eb15f0f": "claimRewardWithBlockData(uint256,bytes)", +"0eb1947f": "changeGatewayAddr(address)", +"0eb288f1": "executeTransaction()", +"0eb34740": "lockedTokens()", +"0eb3f5a0": "sweepCommission(uint256)", +"0eb3f993": "getAreaQualityByDay(uint32,uint32)", +"0eb40426": "IncPreSupply(uint256)", +"0eb40916": "EthernautsStorage()", +"0eb43fe3": "SaleClockAuctionERC20(address,uint256)", +"0eb495c2": "pushCity()", +"0eb4c7d6": "checkTeamUnlockedTokens(address)", +"0eb4d170": "setLockup_dakehus(address,uint256,uint256)", +"0eb51018": "getProductOperation(string,address,uint256,uint256)", +"0eb523ac": "PRIVATE_STAGE_FINISH()", +"0eb524d4": "block1()", +"0eb5a167": "XCloudRoc()", +"0eb6f543": "hodlerTotalValue6M()", +"0eb82c13": "updateHpbNode(address,bytes32,bytes32,bytes32)", +"0eb8d153": "AICoreCoin()", +"0eb8ed07": "transferEnable(bytes32)", +"0eb8fe7a": "getChannelCount()", +"0eb944d5": "PiperToken()", +"0eba6b06": "getChannelInfo(address,address,uint32)", +"0eba7f2d": "SomeCoin(string,string,uint8,uint256)", +"0ebb0d30": "getSummaryReferralProfit(address)", +"0ebb172a": "WITHDRAWAL_DELAY()", +"0ebbe5d6": "firstPrivateLockTime()", +"0ebbf213": "AddPauser(address)", +"0ebc1568": "viewTokenName(uint8)", +"0ebdc43a": "IsSaleEnabled()", +"0ebe0f32": "HacToken()", +"0ebe31c8": "getCountTrack()", +"0ebe4acb": "EtherModifierMonstro()", +"0ebf0bcb": "FAID(uint256,string,uint8,string)", +"0ebf3886": "CryptoLandmarks()", +"0ebf5f27": "Reservation2(address,uint256)", +"0ec0692a": "prizeEth()", +"0ec0786d": "tb()", +"0ec08b29": "getLoopLimit(uint256,uint256)", +"0ec0fce5": "setPercentage(uint256,uint256,uint256,uint256)", +"0ec1268c": "_freezeFunds(address,address,uint256,uint256)", +"0ec12782": "internet()", +"0ec173d0": "changeTreshold(uint16)", +"0ec1b057": "verify(bytes32,string,string)", +"0ec1ce16": "_getCurrentRate()", +"0ec1e7ac": "claimBalanceByOwner(address)", +"0ec2c379": "_getJYPCBonus(uint256)", +"0ec2c5d7": "loik()", +"0ec3b247": "testControlSetEnforceRevisionsNotOwner()", +"0ec3f62e": "NITRONEUMERC20(uint256,string,string)", +"0ec48a42": "quater4()", +"0ec4fb0a": "WHITELIST_PERIOD()", +"0ec52541": "unshelf(string)", +"0ec55d6d": "SprinkleCoin(uint256,string,string)", +"0ec59606": "addPlayerTxHistory(address,uint256,uint256,uint256,uint256)", +"0ec5c49a": "changeEthToTokenRation(uint8)", +"0ec6688d": "intrepidSoldCount()", +"0ec66924": "getStudentRequestsLength()", +"0ec6b08d": "validIdentifier(uint256)", +"0ec78d9e": "setup(address[],uint256,address,bytes)", +"0ec843d1": "setMinAmount3Round(uint256)", +"0ec852f2": "QuranToken()", +"0ec89f2b": "requiredProgressOfPreviousDungeon()", +"0ec8c387": "getContractRates(bytes32)", +"0ec8e2b4": "Moneyplant()", +"0eca4c92": "CryptoPunksMarket()", +"0ecae7d3": "wager(bool,uint256,uint256,uint8,bytes32,bytes32)", +"0ecaea73": "create(address,uint256)", +"0ecb93c0": "addBlackList(address)", +"0ecba3f8": "BusinessAutomationUnion()", +"0ecd0424": "decompressPoint(uint256,uint8)", +"0ecda113": "freezeEndTime(uint256)", +"0ecdbfd4": "DesingCoin()", +"0ecdd94f": "goldFeeDataUpdatedAtBlock()", +"0ecea92c": "allowInvestor(address)", +"0ecf19e5": "balanceWithoutFreezedBonus(address)", +"0ed0b19f": "resetBonusPool(uint256,uint8)", +"0ed15d23": "dInit(address)", +"0ed21029": "getIssueAssignee(uint256,bytes32)", +"0ed2fc95": "exchange(address,address,uint256,uint256)", +"0ed387c1": "getSpinsContainer(bytes32)", +"0ed3909c": "startBonusCompaign(uint256)", +"0ed3d5b9": "passed(address[])", +"0ed40dff": "resetAppendDecryptedBids(uint256)", +"0ed469b8": "houseFee()", +"0ed5410a": "endOfRewards(bool)", +"0ed59a60": "releaseProof(bytes32,string)", +"0ed5a933": "isCanceled()", +"0ed61407": "makePick(uint8,uint256)", +"0ed659b4": "getLLV_edit_18()", +"0ed68aa5": "getPlanetOwners(uint256,uint256)", +"0ed6b171": "LogStartICO()", +"0ed74c08": "func_0C2C()", +"0ed7a0f2": "Predatex()", +"0ed7c905": "FantomToken()", +"0ed86f04": "withdrawDivis()", +"0ed9b97b": "buy_fromContract()", +"0edaf441": "lockAddressRegistration(address)", +"0edc1923": "changeMaximumHodlDuration(uint256)", +"0edc4737": "SEED()", +"0edc54a8": "holdTokens(address)", +"0edd2ffc": "penalty()", +"0edddd3e": "lstFunc(uint256[])", +"0ede050b": "ico3Max()", +"0edf2134": "deathData_a17()", +"0edfb0f7": "withdrawCollectedInterest()", +"0edfe7ec": "setBackendWallet(address)", +"0ee02d9d": "getHash(address,address,uint256,bytes,address,uint256)", +"0ee07836": "adjustDifficulty(uint256)", +"0ee21ddc": "setEtherPriceUSDWEI(uint256)", +"0ee2b0e6": "commissionToWithdraw()", +"0ee2cb10": "getCreator()", +"0ee2ce58": "VKNToEth()", +"0ee33128": "RequestRefund()", +"0ee33c70": "claimed_blocks()", +"0ee36dbc": "setParamsStopSale(bool)", +"0ee3c31d": "getUserIndexOnEther(address)", +"0ee4229c": "grantReservedToken(address,uint256)", +"0ee454dc": "getBUB(bytes32,uint256)", +"0ee526e0": "enableMintToken()", +"0ee5ca1f": "secondsLeftPublic()", +"0ee62c77": "getStageVolumeBonuses(uint256)", +"0ee75f6b": "TOKEN_THIRD_PRICE_RATE()", +"0ee7968e": "REWARD_NUM()", +"0ee79fb3": "closeReferendums()", +"0ee7c858": "beatMartialOwner()", +"0ee7f045": "TransferSellAgent(address,uint256)", +"0ee85800": "getCFOHashing(address,uint256)", +"0ee8e338": "testFailCreateWithParentsForeignNotInUse0()", +"0ee95ecf": "getNextPrice(bytes32)", +"0eea10b1": "sysPer()", +"0eeb63b9": "getUserAccountTokenBalance(address,address)", +"0eebd59b": "log_recast(address,uint256)", +"0eebdb04": "AprilAirdrop(address,address)", +"0eecae21": "draw()", +"0eecc2a3": "updateRequiredTimeBetweenDraws(uint256)", +"0eeccb84": "removeAdvisor(address)", +"0eed49d0": "_createFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"0eedc7b5": "voteDescription(uint256)", +"0eedc9d9": "payAffiliate1Address(address)", +"0eefdbad": "tokenTransferProxy()", +"0ef12aa9": "getUserID(address)", +"0ef14b98": "viewFirstLotOfClauses()", +"0ef25f8b": "TicTacToeRules(address,address,address,address,uint256)", +"0ef26743": "height()", +"0ef270d5": "CreateNewAccount()", +"0ef2d7af": "bonusDeadline()", +"0ef43cbd": "confirmerNouveauProprio()", +"0ef486d1": "revisions(uint256)", +"0ef504ae": "preSaleHalted()", +"0ef524ff": "setDefaultMint(uint256)", +"0ef5a7e0": "allocateToCrowdsalePurchaser(address,uint256)", +"0ef60e48": "setRubusOrangeAddress(address,address)", +"0ef67887": "Balance()", +"0ef6eb9c": "getCompte_33()", +"0ef71d79": "privatized(bytes32,bytes32)", +"0ef72880": "DADXChainERC20()", +"0ef76243": "withdraw_Arina(uint256)", +"0ef7cc8e": "metadataOf(uint256)", +"0ef845df": "propose(address,string,string,string,string,string,uint256,uint256,uint256,uint256)", +"0ef96356": "stakeFor(address,uint256,bytes)", +"0efafc03": "SaleClockAuction(address,uint256)", +"0efafd01": "getPlayerGainLossOnLastFlip()", +"0efc9d03": "minEthToRaise()", +"0efcf295": "deleteAnyProposal(bytes32)", +"0efd0973": "club()", +"0efd2cca": "postICO()", +"0efd3d5b": "getPrice(string,string,uint256)", +"0efd4989": "numAdmins()", +"0efe5fb7": "addToCart(uint256,string)", +"0efe6a8b": "deposit(address,uint256,uint256)", +"0efe7f62": "objectShoes()", +"0f00dfdb": "NonOperationalWithdrawManager(address)", +"0f027c67": "membersLength()", +"0f0308fb": "upgradeGems()", +"0f03be37": "mimax(uint64,uint64)", +"0f03e4c3": "numberOfAccounts()", +"0f041cef": "KitFutureToken()", +"0f0433c4": "_getDroneAbility(uint256)", +"0f050dce": "getBitcoinAddress(bytes32,int256,bytes32,int256)", +"0f052173": "invest2017()", +"0f059913": "vested(address,uint256)", +"0f06670a": "didWin(bytes32)", +"0f092c44": "MIDGRADE_TYPE3()", +"0f096163": "Chainy()", +"0f0ba766": "removeChild(uint256,address,uint256)", +"0f0c27ad": "HashRegistered(bytes32,address,uint256,uint256)", +"0f0ed39e": "EthealPromoToken(address)", +"0f0f3f24": "addOwnerAddress(address)", +"0f106e0a": "encodePacketCommit(uint256,uint256)", +"0f120fc3": "toggleTrading()", +"0f122a6c": "_setSealableProperty(uint256,bytes32,bytes32)", +"0f12354d": "updateStateBasedOnContributions()", +"0f12b32a": "Garcut()", +"0f12d8f8": "RoundWinner(uint256,uint256,address,uint256)", +"0f12ffac": "weiToFNU(uint256)", +"0f134bee": "payPreviousOwner(address,uint256)", +"0f1354f3": "burnFrom(bytes32,uint256)", +"0f136527": "getShareIndex(address)", +"0f13af83": "setCurrentCoin(address)", +"0f13dbde": "inRankList(address)", +"0f14212b": "transferFromOwner(address,uint256,uint256)", +"0f145dca": "Ethbet(address,address)", +"0f149d0a": "changeBurnPaused(uint256)", +"0f14a7e4": "ModeratorRemoved(address,address,bool)", +"0f14b900": "setTimeStampStatus(uint256,uint256,string)", +"0f15573b": "setLLV_edit_2(string)", +"0f15f4c0": "activate()", +"0f166ad4": "local()", +"0f183119": "vote_for_candidate_D_for_Free()", +"0f188e1d": "studioLevel(address)", +"0f18a530": "chemistry()", +"0f18ac07": "transferFromOwner(address,uint256)", +"0f191524": "fillOrder(uint256,bytes)", +"0f19f92a": "isIcoOver()", +"0f1a6444": "cliffTime()", +"0f1bf454": "getGameStatus(uint256)", +"0f1ca0d9": "sethToken()", +"0f1df574": "WithdrawETH()", +"0f1e3b5b": "getHousePayout()", +"0f1e8c24": "commitTeam(address,uint256,uint256[])", +"0f1ed0c6": "setOwner(address,bytes32,address)", +"0f1fd654": "ELearningCoinERC()", +"0f2004a1": "Bob(address)", +"0f201ca6": "reportConvertTokens(uint256,address)", +"0f20b9df": "crowdsaleContracts(address)", +"0f215afb": "paySeller(uint256,uint256)", +"0f21a046": "WithdrawMonethaBuyerUtility()", +"0f226a31": "getServiceUpdateAddress(address,uint32)", +"0f228087": "transferTokens(address[],address)", +"0f2284cc": "SbuyToken(address,address)", +"0f22a95d": "deleteCountry(uint256)", +"0f23a104": "burnAssetOperator(uint256)", +"0f23b047": "getPlayNumber()", +"0f23cbaa": "recycle()", +"0f246780": "ZJF()", +"0f24f5c8": "doTransfer(address,uint256)", +"0f250780": "AKCToken()", +"0f2636bd": "getStockSellOrderPrices(uint256)", +"0f264e1a": "farmerRequestCertificate(address,uint256,string,string,string,uint256)", +"0f2905f7": "verifyStage()", +"0f29eb73": "revokeStaking(address)", +"0f2bc56d": "fixTokenCalcBug()", +"0f2c9329": "split(address,address)", +"0f2da195": "LimitSet(uint256,uint256,uint256,uint256,uint256)", +"0f2dabca": "punchIn(address,uint64)", +"0f2e5b6c": "Locked()", +"0f2f9bb7": "getNextWhitelistedNode(address)", +"0f2fa473": "test_already_paid()", +"0f3092fb": "EasyHomes()", +"0f30c971": "TheGambler()", +"0f3554ad": "addBoolListItem(bool,address,address,uint256,bool)", +"0f36f691": "getLockStatus(address)", +"0f37e79a": "transferClockmaker(address)", +"0f37fd4a": "HexelErc20Token(string,string)", +"0f391236": "ethRateMax()", +"0f39c6ab": "removeVotersVote(address)", +"0f3a00d5": "CreateCOR(address,uint256)", +"0f3a0533": "extraReceiverAmount(address)", +"0f3a1412": "getArrlist(uint256,uint256)", +"0f3a31d6": "SymbolChange(string)", +"0f3a9f65": "setPeriod(uint256)", +"0f3ae419": "PreferentialRateChange(address,uint256)", +"0f3afeec": "Nodelist()", +"0f3b305e": "getPawnPackageId(uint256)", +"0f3bd3fd": "teamJust()", +"0f3c92f3": "calculateFLCCore(address,uint256)", +"0f3cb8bc": "setCardUpgradeLevels(uint256,uint256,uint256)", +"0f3d7c3e": "release(string,uint32[3],string,string,string)", +"0f3d8803": "getMinPurchase()", +"0f3de489": "newAuction(uint256,uint64)", +"0f3e7027": "clearTransferValueby(address)", +"0f3e9438": "frontRunner()", +"0f3eb785": "add(string,uint256,uint256,uint256)", +"0f3f0e42": "allowTotalMintAmount()", +"0f3f53c1": "dappsBonusCalc(address,uint256)", +"0f3fb52a": "LogSetState(uint256,uint8,uint256,bytes32)", +"0f3fc29e": "setChestProduct(uint16,uint256,uint16,bool,uint32,uint24,uint24,uint8,uint8)", +"0f40593e": "ViewMyBet()", +"0f40988e": "contributorsShare()", +"0f40d645": "demander(uint256)", +"0f4170f2": "BaseICO(address,address,uint256,uint256,uint256,uint256)", +"0f41ba4b": "bid(address,uint256,uint256)", +"0f420113": "_calculateCurrentRate()", +"0f42fdfb": "recoveryModeTriggerTime()", +"0f4391f5": "setPauseMaster(address)", +"0f43a677": "validatorCount()", +"0f43c196": "setTournamentAddress(address,address)", +"0f45368c": "checkTransferHash(address,uint256,address,address,uint256,uint256,bytes)", +"0f45c3e1": "transferFromAny(address,address,uint256)", +"0f45f528": "getTknOfferor(uint256)", +"0f4665aa": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address,address,uint256)", +"0f47165e": "managePlayer(address)", +"0f473d72": "_calculateDiscount(uint8,address)", +"0f47435b": "pvt_inv_Pool()", +"0f481bf7": "postTransfer(address,address,address,uint256)", +"0f482da1": "unblockSpending(address)", +"0f482e64": "LikeCoin(uint256,address,address)", +"0f4acfcd": "charToByte(bytes1)", +"0f4b1cfc": "setGovernment(address)", +"0f4bbdf2": "registerBuyer(string,string,string,string,address,string)", +"0f4cf692": "numMessages()", +"0f4d14e9": "depositEth(uint256)", +"0f4df754": "Gladiethers()", +"0f4dfc17": "ICOTokenDelivery(address,uint256)", +"0f4ef8a6": "rewardManager()", +"0f4f8184": "bancorRegistry()", +"0f4fd9cc": "log_event(string)", +"0f4ff474": "_openGameResult(uint256,uint256,uint256,string)", +"0f501d07": "saveInfoAboutInvestors(address,address,uint256,uint256,bool)", +"0f505a01": "sealDataStream(address,uint256,bytes32,uint256,bytes32)", +"0f5127f5": "Ariston()", +"0f5137f9": "sellOrderBalances(bytes32)", +"0f522614": "Shufflix()", +"0f527200": "SimpleCoin()", +"0f529ba2": "D()", +"0f52fb0a": "searchFreelancers(address,uint256,uint256[],uint256[],uint8,uint256,uint256[],uint256[],uint256[],uint256)", +"0f5381f1": "testUserCanIncreaseVersionNumber()", +"0f53a470": "getProfile(address)", +"0f53b7ee": "communityTokensAddress()", +"0f53ba51": "appWasMade(string)", +"0f53e2a8": "NewToken(address)", +"0f555b46": "MicroCoins()", +"0f560cd7": "list()", +"0f56e460": "Shitcoin()", +"0f574ba7": "subscribe(uint256)", +"0f577d97": "getCompte_16()", +"0f57b9d9": "removeFromPrivileged(address)", +"0f57eb79": "minboc()", +"0f581aed": "MinimumBitcoinInvestmentUpdated(uint256,uint256)", +"0f58d28f": "weightOf(string)", +"0f590c36": "emergencyFixGameResult(uint64,uint256)", +"0f59a638": "totalWeiCommitted()", +"0f59eb95": "ownerUpdateOthers(uint256,bool,uint256,uint256,bool)", +"0f59f83a": "go()", +"0f5a5466": "claimWithResolver(address,address)", +"0f5a8d9c": "raiseDollarsFunded(address,uint160,int160)", +"0f5aa9f3": "setAuthorization(address,address)", +"0f5ad969": "node_index(address)", +"0f5b807d": "cuddleData()", +"0f5bab7c": "countManagers()", +"0f5c8c0a": "balancesDB()", +"0f5e41c8": "_getDestinationPartition(bytes)", +"0f5e7348": "getCommunityBallotCentsPrice()", +"0f5ea100": "price(address,uint256,uint8)", +"0f5eacf6": "EndStage()", +"0f5ed9e9": "escrowAllowed(address)", +"0f5ee138": "userSignupCount()", +"0f5f0151": "GxTradersProxy(address)", +"0f5f1dbc": "operationsAccount()", +"0f5f4c53": "unpause2()", +"0f5f8593": "MetaBall(uint256,string,string)", +"0f601679": "balanceOwner(address)", +"0f60e3d9": "resetAddTokenData()", +"0f610c06": "getValidatedLiability()", +"0f61280e": "nutzAddr()", +"0f62562f": "pregnantNinjas()", +"0f62c3e3": "releaseEscrow(bytes32,address,uint256)", +"0f632fd3": "onMint(address,uint256)", +"0f63d864": "addOwners(address[],uint256[],uint256[])", +"0f6413b7": "batchAssignStopped()", +"0f64864d": "transferTokensAndDividends(address,address)", +"0f6521e2": "FROZEN_TOKENS()", +"0f66791c": "setHTML(string)", +"0f66acd1": "EcosystemEthereum()", +"0f66d082": "gauntletTypeOf(address)", +"0f670da6": "destroyLogicContract()", +"0f6798a5": "Mint(address,uint256)", +"0f67f3f7": "distributeToDev(address,uint256)", +"0f683fd1": "Token(string,string,address)", +"0f69cdbe": "approvespender(address,uint256)", +"0f6a1734": "Crowdsale(address,uint256)", +"0f6b6756": "tokenSaleIsPaused()", +"0f6bb3c3": "doSpawn(uint32,int256,address,bool,address)", +"0f6c2a33": "setMaxStage2AllocationPerInvestor(uint256)", +"0f6d37d6": "supportAddress()", +"0f6d6236": "setIssueDividendReward(uint256)", +"0f6d9f00": "ERA_PERIOD()", +"0f6e40c3": "startRound(bytes32,bytes32)", +"0f6ea4fc": "MISCELLANEOUS_TOKENS_SUPPLY()", +"0f6f5f98": "setAndFixTokenPriceInWei(uint256)", +"0f6f72a8": "getClosingTimeValue()", +"0f710616": "TRSToken()", +"0f710e32": "CryptoFinexToken()", +"0f71590c": "setPOLYUSD(uint256)", +"0f732bdc": "getEncryptionAlgorithmCount()", +"0f73b4f4": "setStartingPrice(uint256)", +"0f73d212": "addLog(string,string,bytes32)", +"0f74a5cc": "cancelCenturionSale(uint256)", +"0f74e527": "RenmiCoin()", +"0f74e689": "registerNewPubKeyForHash(bytes28,string)", +"0f7503c9": "baseStartTime()", +"0f75806f": "GraphenePowerCrowdsale()", +"0f75c82e": "getObjClassExp(uint64)", +"0f75e81f": "issue(bytes32)", +"0f762cfe": "emission(address,address,uint256,uint256,uint256)", +"0f76496a": "returnTokens3(address,uint256,uint256)", +"0f76b651": "unlockDate5()", +"0f76c114": "getCurrentValue()", +"0f76de0d": "left45(uint256)", +"0f76f489": "getPoolName(uint256)", +"0f774287": "Burnt(address,uint256,uint256)", +"0f774931": "administrativePayouts(address,uint256)", +"0f776fb2": "PutDiv(address)", +"0f77c1d3": "addUsersWhitelistB(address[])", +"0f784943": "mintable(uint256)", +"0f78628e": "allowedToBurn()", +"0f7875c6": "startblock()", +"0f78d408": "JuvToken()", +"0f78ee7c": "payoutLockedToken()", +"0f79cfa2": "addReferrer(bytes32)", +"0f79e120": "nrFailures()", +"0f79e1c7": "createRandomDeveloper(string,uint256)", +"0f7a4590": "goalAchieved()", +"0f7a8971": "buildBoolMapping()", +"0f7bd1dd": "enterRaffle(uint256[],uint256)", +"0f7bff76": "getHeroDBZHeroAddress(uint256)", +"0f7c9085": "addToAdmin(address,bool)", +"0f7c932a": "getReservedTokensListValInPercentageDecimals(address)", +"0f7d6673": "Channel()", +"0f7e1653": "OpenGame()", +"0f7f97c8": "calcNewSkinAppearance(uint128,uint128,uint128)", +"0f7fa72f": "addOperator(address,uint256)", +"0f809adb": "changeTokenOwner(address)", +"0f80fc58": "exponent(uint256)", +"0f8143f6": "discardRejectedProposal()", +"0f819fe8": "disableTuneOption(uint256)", +"0f81d248": "endPeriodC()", +"0f822b78": "admin_transfer(address,uint256)", +"0f825673": "deleteCoupon(string)", +"0f82b42f": "userAccountTokenBalances(address)", +"0f832bc6": "testIsLawyer()", +"0f832f18": "_nextLoanInterestRate(uint256)", +"0f83f112": "CanTransferChecked(bool,address,bool,bool)", +"0f8410e3": "getPresellToKenAmount()", +"0f85751e": "change_p5(uint256)", +"0f861127": "argl(uint256,uint256)", +"0f861ca3": "ownerUnpause()", +"0f86abc1": "modifyStakerLimit(uint256)", +"0f86e3eb": "denaToken()", +"0f86f702": "compatible223()", +"0f87a044": "withdraw1(uint256)", +"0f88aa81": "emitRecord(bytes32,uint256,uint256,uint256)", +"0f88f1a5": "collectBounty(address,uint256,uint256)", +"0f89c305": "removePendingArray(address)", +"0f89fa28": "OrganizationRegister()", +"0f8a771e": "skr()", +"0f8a8887": "rocketSetResourcePrice(uint256,uint256,uint256)", +"0f8b70c9": "getBotContract()", +"0f8bca8c": "getStage0Start()", +"0f8c04e2": "create(address[],uint256[],uint256[],address,address,bytes)", +"0f8d4030": "totalShareholders()", +"0f8d598a": "decayedPriceOfSocialIdentity(uint256,uint256)", +"0f8dc272": "ComputeAcornPrice()", +"0f8ea4f3": "addSomeOfManyLine(uint256,string,uint256,string)", +"0f8eaa74": "addToPreSaleRefunds(address,uint256)", +"0f8ef9f8": "getBoosterRaiseValue(uint256)", +"0f8f8b83": "spendableBalanceOf(address)", +"0f8fcb74": "_setInt(bytes32,int256)", +"0f8fd363": "getRepPriceInAttoEth()", +"0f900587": "addBonusPerShare()", +"0f902bc2": "delayedTransferFrom(address,address,uint256)", +"0f907ba3": "failCar(string)", +"0f90b83a": "deployTokenContract(uint256)", +"0f917e31": "transferAndDonateTo(address,uint256,address)", +"0f917f9e": "totalSupplyTeamTokens()", +"0f91c8a5": "setCap(string,uint256)", +"0f91cce1": "releaseVanbexTeamTokens()", +"0f92f38f": "changeMartial(uint256)", +"0f9302c8": "LogEvent(string)", +"0f95378f": "MerchantWallet(address,string)", +"0f953b97": "getCmcAddress()", +"0f960644": "addClaim(address,bytes32,string,string,uint256)", +"0f96dd39": "maxTokenCap()", +"0f973874": "MiniMeTokenSimple(address,address,uint256,string,uint8,string,bool)", +"0f974ef2": "PasserBy(address)", +"0f977561": "getUserEvents()", +"0f97f2f1": "managePlayer(uint256,uint256)", +"0f98a9cc": "lockTokens(address,uint256,address,uint256)", +"0f98c91a": "TOKENS_PER_ETHER_EARLYSALE()", +"0f99da4a": "getBoosterAmount(uint256)", +"0f99fab2": "allowWrite(uint256,uint256)", +"0f9ad6b8": "GGPOKoFToken()", +"0f9aea56": "last_release_date()", +"0f9b481a": "TokenFinalized()", +"0f9b5129": "maxSellRateInPrecision()", +"0f9b87be": "transferToDestination(bytes32)", +"0f9bac2d": "ADVISORS_ADDRESS()", +"0f9bb8b3": "getCurrentUserQuickPromoBonus()", +"0f9c95da": "GDCAcc04()", +"0f9ce471": "Ether2Gen()", +"0f9e144d": "changeMaxMin(uint256,uint256)", +"0f9e39bf": "minBidMultiplier()", +"0f9e42da": "drawToken()", +"0f9e5bbd": "createShares(address,uint256)", +"0f9fb983": "lastBetTimeSEC()", +"0fa01949": "yearOfProduction()", +"0fa2b5d4": "Interestv3(address,address)", +"0fa2d864": "block4()", +"0fa45298": "getRoundAhead(uint256,uint256)", +"0fa48688": "calculateItemId(bytes32)", +"0fa53db8": "divideDecimalRound(uint256,uint256)", +"0fa6002e": "sellCharacter(uint32)", +"0fa6e84d": "SouYingToken()", +"0fa7a798": "getOpenRequestPublicKey(uint256,uint256)", +"0fa7b7b3": "totalRefunded(uint256)", +"0fa803e8": "SetCategoryName(string)", +"0fa85ab0": "claimTokensForUser(address)", +"0fa87b15": "closeMyGame(uint256)", +"0fa8beb3": "claimBonus(address,uint256)", +"0fa8f516": "getPosition(address,bytes32)", +"0fa95aee": "etherToTokens(uint256,uint256)", +"0fa9ced4": "emergencyFuneral()", +"0fa9e486": "registerCoin(string,string,address)", +"0faa2aae": "amountOfBSTRequired(address)", +"0faaa357": "nCanOpenRewardMinEth()", +"0fab0f6a": "minimumWitcoins()", +"0fab14e8": "agencyOwner()", +"0fab459c": "transferSoldTokens(address,uint256)", +"0fab7539": "getIssuanceCount(bool,bool,bool,bool)", +"0fac20e1": "dev1Wallet2Pct()", +"0fac8dc5": "update(string,string,bool,string,address,uint256,uint256)", +"0fac960e": "sellTokensForWaves(string,address,uint256,uint256)", +"0fadb5c7": "getWHaddress()", +"0fae42cd": "pricePreSale()", +"0faf0904": "set_creator(address)", +"0faf2775": "newGame(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"0fb0a8d3": "manageOperable(address,bool)", +"0fb0cf2d": "changeLockupDuration(uint64)", +"0fb125ac": "transferTokens(uint256,address[])", +"0fb26f0b": "switchTransfers()", +"0fb2e692": "buyMCTTokenProxy(address,uint256,uint256)", +"0fb35574": "SCC()", +"0fb3844c": "_status()", +"0fb411e8": "evc()", +"0fb4b070": "tokensMintedForSale()", +"0fb4ecdf": "complained(address,address)", +"0fb524ce": "castVote()", +"0fb54f3a": "AuthenticationManager()", +"0fb553ba": "FLC()", +"0fb59f95": "buy(uint256,string,uint256,uint16)", +"0fb5a6b4": "duration()", +"0fb65f10": "authorizeMintRequester(address)", +"0fb66557": "trustedTransfer(address,address,uint256)", +"0fb66da3": "getMessageOfVisit(address)", +"0fb7657f": "isAllocationLocked(address)", +"0fb792d0": "ONE_HUNDRED_PERCRENTS()", +"0fb7a5e6": "getCensuredBy(uint16)", +"0fb7cb1d": "addToKycTeam(address)", +"0fb7e602": "startEmergency()", +"0fb9398f": "getProductBuyers(uint256)", +"0fb9d85e": "buyIndex(uint256,address,bool)", +"0fb9dcd5": "getTokensAtCurrentRate(uint256)", +"0fba34a4": "has(bytes12)", +"0fba4ca1": "accept(string)", +"0fba80de": "pickValues(bytes32)", +"0fbad611": "setTimeFrame(uint256)", +"0fbb3b6b": "shittyRandom()", +"0fbbeceb": "PostCompleted(address,address)", +"0fbc0cd1": "bounty_solve(address,bytes32)", +"0fbc0f82": "LotterySymbol()", +"0fbe333a": "getLastBidder()", +"0fbe3e40": "returnLast()", +"0fbed9fe": "EFAFCOIN()", +"0fbf7151": "startsWith()", +"0fc03687": "Booko()", +"0fc0e9a8": "_addWithdrawal(address,address,uint256)", +"0fc10026": "CALLER_EXCHANGE_RATE()", +"0fc12b1a": "isGetWhiteList()", +"0fc1b08b": "setValue(string,string,string)", +"0fc1c83d": "minimumTokenCommission()", +"0fc24c03": "ZarFundsToken()", +"0fc33bb7": "lrcBalance()", +"0fc3866f": "isSoftCapGoalReached()", +"0fc38daa": "CSToken()", +"0fc3c5e8": "shipMedicine(address,string,string,string,string)", +"0fc4af53": "cloneTokens(uint256,uint256)", +"0fc4f262": "updateSubdivsFor(address)", +"0fc55d1e": "ENTS()", +"0fc55fd1": "bid(uint256,string)", +"0fc63d10": "tokenA()", +"0fc66f45": "PO24()", +"0fc69407": "BidPlaced(uint256,uint256)", +"0fc6ed30": "Satum()", +"0fc709e5": "setDistribution(uint256,uint256,uint256,uint256)", +"0fc72f4e": "purchaseCallback(string)", +"0fc783d1": "SacToken(address)", +"0fc7c15e": "getUnapprovedUsersTop150()", +"0fc81bdc": "editEventResult(string,uint64,uint8)", +"0fc85c7f": "INAYCOIN()", +"0fc8a393": "transferUpdater(address)", +"0fc8afbd": "getFreeSnake()", +"0fc92096": "isValid(address,bytes32[])", +"0fc958dd": "tMemberSolId(uint256,address)", +"0fcac452": "addToRakePool()", +"0fcaed94": "restartLottery()", +"0fcb5984": "getprice()", +"0fcb83f2": "SancojTokenContract()", +"0fcbb5b9": "getSubscriberType()", +"0fcbbc8e": "_lookupOwnerIdentityCount(address)", +"0fcc0c28": "deprecate()", +"0fcc1e47": "_grantAccess(bytes32,address,address,string)", +"0fccf22e": "ban_user(address)", +"0fcd1cab": "killInstance(address,address)", +"0fcda174": "getAccountTokenBalance(address,address)", +"0fcddd06": "CreateCRC(address,uint256)", +"0fce00ed": "calculatedPaymentInterval()", +"0fce349e": "popularitySetting(uint256,uint8)", +"0fce887b": "transferLockedFrom(address,address,uint256[],uint256[])", +"0fd02fc1": "isValidUnbondingLock(address,uint256)", +"0fd0aa67": "Parties()", +"0fd0ae10": "insert(address,uint256)", +"0fd0e440": "uniq(uint8[])", +"0fd1ed1f": "setMarginForVictoryPercent(uint8)", +"0fd1ed78": "LOG_EmergencyWithdrawalFailed(address)", +"0fd1f94e": "firstClaimBlock()", +"0fd2ce17": "funcArrayInArguments(address[])", +"0fd3d758": "WWAMPricingStrategy(uint256,uint256,uint256)", +"0fd3ee83": "__redeemTokens(address,uint256)", +"0fd4d286": "BlueSkyDragon()", +"0fd5084a": "validOrigins(uint256)", +"0fd548ef": "myShareToken()", +"0fd56202": "addressToNumCities(address)", +"0fd57f3e": "seatPrice()", +"0fd58d07": "expectedWinnersCount()", +"0fd62f57": "adminCharge_p2()", +"0fd68e3f": "newRaffle()", +"0fd6fc49": "IntelliShareEco()", +"0fd7410c": "in_finalization_phase()", +"0fd7b03d": "HackDivs()", +"0fd8a8fb": "setAnonymousCap(uint256)", +"0fd9d5bf": "Matrexcoin(uint256,string,uint8,string)", +"0fda890e": "changeGenRNGcontractAddress(address)", +"0fdb1c10": "withDraw()", +"0fdb468f": "fee(uint64)", +"0fdc3609": "changeDeposit(address)", +"0fdc7956": "unlockAllTokens(bool)", +"0fde0f8e": "ROLE_VENDOR()", +"0fde5686": "setBUB(bytes32,uint256,bytes)", +"0fdfa5ee": "preBuy3()", +"0fe1dfa8": "lastRoundLengthUpdateRound()", +"0fe1f548": "getTokenSCADARequiresHardCap()", +"0fe234ed": "testSetController()", +"0fe2abcf": "exchange(uint256,address)", +"0fe2c5d1": "BTSMToken()", +"0fe3152e": "airdropEnd()", +"0fe3c10d": "MANHATTANPROXY4THST()", +"0fe41fd5": "acquisitionsTokens()", +"0fe433db": "reallocate(uint256)", +"0fe43e1f": "foundersAdvisorsPartnersTokensVault()", +"0fe4ea72": "killDragonDeathContract(address,uint256,uint256)", +"0fe793aa": "studioHandler(address,uint256)", +"0fe7c250": "DaoRulesProposals()", +"0fe7db9c": "MedSupplyToken()", +"0fe83bb8": "preSaleTokens()", +"0fe8c788": "addCertificate(string,address)", +"0fe961da": "_getCurrentRoundTeamCos()", +"0fea657f": "totalExch()", +"0fea81fe": "setComisionInETH()", +"0fea9be6": "ChinhCoin(uint256,string,uint8,string)", +"0feacc42": "CommonToken(address,address)", +"0feaf627": "_safeStaticCall(address,bytes)", +"0feb10ff": "Register(uint256,string,string)", +"0feb172f": "buyTeam(uint256)", +"0feb376b": "AMOUNT_ICO()", +"0febb8b7": "setSaleInfo(uint8,uint256,uint256,uint256,uint256)", +"0feca6d5": "releaseAdvisorsTokensForPercentage(uint256)", +"0fecef48": "getProductsByOwner(address)", +"0fed240b": "dAdd(bytes32,address,bool)", +"0fed5dc8": "setSendAllow(bool)", +"0fee32bb": "setAuctionIndex(address,address)", +"0fee5a40": "getProviderCurve(address,bytes32,int256)", +"0ff0a4df": "reFund()", +"0ff188c7": "transferPixel(uint16,uint16,address)", +"0ff244b2": "transferByAddress(address,uint256,address)", +"0ff2e4b2": "assignCEO(address)", +"0ff3687b": "remainingGenesisCats()", +"0ff39daa": "generateDepositAddress()", +"0ff3d57e": "addMasterWallet(address)", +"0ff3d5ea": "getCastleSale(uint256)", +"0ff4009c": "getLotteryInfo(address)", +"0ff42eab": "setProofAddr(string)", +"0ff43cfd": "IFCNBToken()", +"0ff4c916": "getValue(uint256)", +"0ff4d239": "HashRushICO()", +"0ff4f160": "oraclize_query(uint256,string,string[1])", +"0ff58f40": "month24Allocated()", +"0ff7bb07": "refundClient(address,uint32)", +"0ff88a8d": "getChar(uint256)", +"0ff88baa": "RoyalTransfer()", +"0ff89c2b": "divide(int256,int256,uint256)", +"0ff8cf9b": "dividend()", +"0ff92e7b": "burnDead(address,uint256)", +"0ff9aafe": "updateMinimumBond(uint256)", +"0ffb1d8b": "whitelistToken(address,bool)", +"0ffbe43b": "initializeOfferChannel(uint128,address,address,uint256)", +"0ffdbd42": "feePoolShare(uint256,bool)", +"0fff6e06": "totalAvailableGames()", +"0fffbb54": "changeRankingSize(uint256)", +"10001fdd": "setPublicSaleParams(uint256,uint256,uint256,bool)", +"10002f39": "WorthlessEthereumTokens()", +"100153b6": "blocksByDay()", +"1001c39c": "tokensReleasedToIco()", +"100278d8": "startPreSale2()", +"100349fa": "Good_Bye_World()", +"10038099": "isPuppySports()", +"1003ac0c": "customFallback(address,uint256,bytes)", +"1003e2d2": "add(uint256)", +"10042e10": "remainingPublicSupply()", +"10055c1d": "role()", +"100565f4": "setTurnover(uint256)", +"10059be0": "do_redemption()", +"1006a41f": "auctionStarts(address,address)", +"10072af7": "SetupRaffle(string,uint256)", +"1007f753": "erase(uint256)", +"10082bff": "getActorBillXdetail(address,uint256,bool)", +"1008737d": "test_oneValidEqBytes32()", +"1008a2a5": "getTotalLendingItem(address)", +"10096c84": "exchangeBalanceOf(address,address)", +"10098ad5": "available(address)", +"100a0ed1": "receiveCreateAuction(address,address,uint256,uint256,uint256)", +"100a1099": "getTransactionIdsOf(address,address)", +"100a5ec5": "mintedCrowdsale()", +"100ab561": "updatePolicy2(bytes32,string,uint256,uint256,string)", +"100ac510": "addRx(address,address,uint256,uint256,bool)", +"100aca47": "totalFund()", +"100acefc": "_storeProof(string)", +"100af203": "reserveETH()", +"100b815d": "loadData()", +"100bce92": "toHex(string)", +"100be094": "setRefundRate(uint256)", +"100c6cfd": "ipoPlatformPercentage()", +"100c8ada": "setCAmodulus(bytes)", +"100c98fe": "SaleFailed()", +"100cdd91": "burnAll(uint256[])", +"100d7e30": "FuckFacebookCoin()", +"100e187a": "transferHolds(address,address,uint256)", +"100e4b94": "every_day_im_shufflin()", +"100ed0fc": "preallocateFirstStage(address,uint256,uint256)", +"100f23fd": "cancelWhitelistAddition(bytes32)", +"100f2e78": "determineSalaryTokens(address)", +"100f759f": "EDU_PER_ETH_SALE()", +"100f7a79": "registerBounty(address,uint256)", +"100fd02f": "isAbove(int256,int256,string)", +"101005bd": "releaseReserve(uint256)", +"10103122": "totalDurationInDays()", +"1010a515": "MONOGRAM()", +"101175e8": "BONUS_DATES(uint256)", +"10119521": "TokenBurnt(address,uint256)", +"1011a635": "changeCommissionFeeRate(uint256)", +"1013ad53": "KairosToken()", +"10142785": "assign(bytes,uint256,bytes1)", +"1014a29e": "firstRefundRoundRateDenominator()", +"1015295c": "ClaimMyBet()", +"10154bad": "addWhitelisted(address)", +"1016774e": "period3End()", +"1016ad94": "Baliv()", +"1016eadb": "Epilepsy()", +"10174967": "God()", +"1017a357": "HeirOwnershipClaimed(address,address)", +"101817ba": "getLastEmissionNum()", +"1018f294": "getRandom16(uint16,uint16)", +"1019635d": "assignReserved(address,uint8,uint256)", +"10196bf7": "pendingRefs(uint256)", +"1019dc59": "setSale(address,bool)", +"101a3fec": "setIsTokenTransactionOpen(bool)", +"101a889b": "LogBeneficiaryPaid(address)", +"101a917e": "makeTradeDetail(address,address,uint256,uint256,address,uint256)", +"101af16b": "countriesTokens()", +"101b6106": "RevokeEntity(bytes32,bytes)", +"101b7e7c": "vbtToken()", +"101b94f1": "setRightOfGroup(string,string,bool)", +"101ca1b9": "YoobaBatchTransfer()", +"101d1135": "ANNA(uint8)", +"101d52d2": "checkStoredFileName(string)", +"101d990c": "hmul(uint128,uint128)", +"101e1f2c": "initLottery(uint256,uint256,uint256,uint256,int256)", +"101e359b": "reviveFee()", +"101e5a32": "setSoftcap(uint256)", +"101e652e": "presaleUnlimitedStartTime()", +"101e8952": "forward(address)", +"101f13e2": "verifyProof(bytes,bytes32,bytes32)", +"102046db": "townPrice()", +"1021688f": "changeAdminAddress(address)", +"1022b30b": "proposalResult(uint256)", +"1023d597": "priceDecraseTime2Action()", +"102455a5": "sanity_check()", +"10253fec": "election(string,string,string,string)", +"10258bfd": "Payment(address,address,uint256,uint256)", +"10271334": "receiveICOcoins(uint256,uint256)", +"1027853f": "withdrawShare(address)", +"10278bc8": "setBytes32Value(string,bytes32)", +"1027e242": "getBoosterStrength(uint256)", +"10282b61": "payoutcount()", +"10286952": "parseKeys(bytes32[])", +"10288c4b": "startIco(uint256,uint256,uint256)", +"1028e4a8": "theCyberMemberUtilities()", +"1028f980": "getAssertDowntimeCost()", +"10290e51": "computeProfit(uint256,uint256,uint256)", +"102accc1": "fireEventLog2()", +"102b5cc5": "check_address_share_and_transfer_bond_token(uint256,uint256,address,address)", +"102b61f7": "setMinimumWeiAmount(uint256)", +"102c920a": "allRefunded()", +"102ce658": "setRule(address,string)", +"102deb9c": "changeMonethaVault(address)", +"102e58d0": "timeoutAt()", +"102e8b94": "sellnow()", +"102ff0b3": "amountToken()", +"10309781": "createdTimestamp()", +"1030adea": "change_king_name(string)", +"1030c539": "setCreditbit(address)", +"1030e227": "TroyToken(address,address)", +"1030f288": "releaseState2()", +"10314b07": "GOX(uint256,string,string)", +"10316eec": "getActionParametersCountByIndex(uint256)", +"10319417": "returnHost(uint256)", +"1031e34e": "raisedFromToken()", +"1031e36e": "pauseTrading()", +"10328e89": "CoinhiToken()", +"103359ce": "sendToIco()", +"10340069": "tokenDistributionPool()", +"10342d02": "endSaleCarProduct(uint32)", +"10347a2c": "lockSymbol()", +"10348938": "setRankDynamic(uint256)", +"10361bf2": "transferLog(address,address)", +"10369540": "icoPhaseAmount2()", +"1036bbe2": "MAX_PERCENT()", +"1036cde8": "allocateCustomer(address,uint256)", +"103728a3": "FundingFueled(uint256,uint256)", +"10375a67": "getRemainingTokens(address)", +"1037706d": "uploadSignedString(string,int256,bytes20,int256,string)", +"1037a5f4": "getPrev(uint256)", +"10388809": "setTransferPrice(uint256)", +"1039cf3c": "isIcoStopped()", +"103aeda7": "isContractAuthorized(address)", +"103b0506": "preter(uint256)", +"103b5dad": "computeIndexId(address,bytes32)", +"103bf0bd": "tSLDToken(address,address,address,address)", +"103cbb7f": "ethpyramid()", +"103cfacf": "CryptovationX(address)", +"103d26ac": "getRareItemsPrice(uint256)", +"103e8154": "sellComissionUnits()", +"103ed140": "_getSkill(uint16)", +"103ef9e1": "authorizeOperatorByPartition(bytes32,address)", +"103f3a83": "getAuraColor(uint64)", +"103f9251": "transferFrom(address,address)", +"10400446": "setMaxAppeals(uint256)", +"10402040": "createSaiCollectorsEdition(uint256,address)", +"1040233f": "LevelUp(address,uint256,uint32)", +"1040762d": "setExchangeRates(uint256)", +"1040dc27": "getSTODetails()", +"1040e5a5": "showBal()", +"10422c24": "releaseAngelVested()", +"1042604f": "isTrue(bool,string)", +"1042876d": "getDisplayName(address)", +"1042ca73": "getWeekIdx()", +"1043dcdf": "LastIsMe(uint256,uint256)", +"10442a1b": "GetMainAddress()", +"10443ab3": "setLotteryTokensWallet(address)", +"10445a16": "_joinGame(address,uint256)", +"1044bbe6": "unLockTokens()", +"1045290e": "Boocoin()", +"10458684": "GBCCoin()", +"1045a889": "buildContract(string,string)", +"1045de72": "isEndOffer()", +"1046bc68": "deleteContact(address)", +"1046d078": "transferItemFrom(uint256,address,uint256,uint256)", +"1046e2ab": "Flood_Standard_Ethereum_Coin(uint256,string,string,uint256)", +"1047456e": "userTransfer(address,address,uint256)", +"10476aa9": "_activateIfUserIsNew(address)", +"1047d79e": "freezTime()", +"10482f57": "getWhitelistedResolvers()", +"1048a25c": "view_random(address,address)", +"1049334f": "tokenBalance(address,address)", +"1049f742": "terminateEscrow(address)", +"104a5963": "targetDiscountValue9()", +"104a5e75": "getRareItemsPLATPrice(uint256)", +"104ace02": "register(string,string,string,string,string,string)", +"104b6704": "currentManager()", +"104b78bd": "amountRaised(bytes32)", +"104bb708": "GetStatusCount(string)", +"104bc708": "LamboCrowdsale(uint256,uint256,address,address,address[])", +"104bf512": "createBATokenContract(address,address,uint256,uint256)", +"104bff92": "HasBooster(address,uint256)", +"104c9cff": "releaseDividendsRights(uint256)", +"104ce199": "Launcher()", +"104d5fdd": "getPriceProxy()", +"104d7bbb": "LuzCoin()", +"104de5a1": "setPromoted(bool)", +"104e81ff": "_approve(address,address,uint256)", +"104e9929": "tokenPool()", +"104f2d8f": "_approve(uint256,uint256,bytes32,uint256)", +"104fea4c": "activeCrowdsalePhase2(uint256)", +"10510ec1": "payToken(address,uint256)", +"10518aeb": "removeOldFirst(address)", +"10519ff4": "WestCoin()", +"1051db34": "implementsERC721()", +"10523af3": "getPokemonCD(uint256)", +"1052506f": "isSignedBy(bytes32,string,address)", +"10525660": "setConsumeToken(address)", +"10549874": "tokenRate1()", +"1054d657": "divestETH()", +"105541ae": "returnPtSafeSmall()", +"10561361": "logDisputeCrowdsourcerTokensBurned(address,address,uint256)", +"105689a0": "doLockdown()", +"10570116": "newGroup(string,uint32,uint256,uint32,uint32,uint32,uint32,uint32,uint8)", +"1057ce8c": "create3DoggiesTokens()", +"10594e19": "JPGProject()", +"1059c492": "CROWDSALE_WALLET()", +"105a6356": "minimalSuccessUSD()", +"105ae3bf": "getRoundIsEnded(uint32)", +"105b2645": "CheToken()", +"105b6f00": "Fructus()", +"105c287b": "lockPeriod1()", +"105d3e0f": "cryptogs()", +"105d9e37": "disputeLength()", +"105e029f": "JSONpath_string(string,string,string)", +"105e68f0": "allBankers()", +"105e87a1": "redeemaAt(bytes32)", +"105ea540": "minimumToRaise()", +"105edd83": "toTheTop()", +"105ee9a7": "endFight(uint256,uint256,bool)", +"105fc4e8": "REQUEST_FOUNDATION_AMOUNT()", +"105ff033": "redeemReward(address,uint256)", +"10609902": "sendFundsToBorrower()", +"1060c965": "ZILLION()", +"106109c9": "RandiveBhToken()", +"10618776": "setETHUSDdemon(address)", +"10619300": "lockAccount(bytes32)", +"106233e8": "addAltOracle(address)", +"106259c8": "getNonEtherController()", +"10639ea0": "cancelMigration()", +"106524a5": "multisendEth(address[],uint256[])", +"106639ba": "getOwnAssets()", +"1066cd3c": "voteFor(uint16,address,bytes32,bytes)", +"1067f077": "setCompte_41(string)", +"1067f361": "totalTokenToSale()", +"10680b84": "getShareTokenAddress()", +"106812c9": "setPI_edit_18(string)", +"106858cb": "getRemainingPreSalesAmount()", +"1068d056": "getaddress0()", +"106a182b": "getLambosCount()", +"106b291f": "ethUsdRateInCent()", +"106bd2da": "initiateEscrow(uint64,uint256,address,address,address,address)", +"106be310": "getNameByNumber(uint256)", +"106c0a45": "collectOriginalBetERC20(address)", +"106c5511": "create(address,string,string,uint8,uint256)", +"106c6441": "removeReinforcedWhitelist(address[])", +"106c9da1": "mine(uint256,uint256,uint256)", +"106d2813": "setCreditGameAddress(address)", +"106e6290": "withdraw(address,uint256,bytes32)", +"106f6a3d": "TOKEN_FIRST_EXCHANGE_RATE()", +"106f6f33": "bountyTokensCount()", +"106f77a7": "multiMint(uint256,uint256[],uint256)", +"106f923f": "RewardClaimed(address,uint256)", +"106fcb7a": "changeAsset(bytes32,string,string,uint8)", +"106fd2d5": "setSaleAddress(address,address)", +"106ffbd3": "withdrawBatchTokenToInvestor()", +"107046bd": "projects(uint256)", +"1070eb4f": "calculateInterestDue()", +"1070f410": "convertToBytes(uint8[],bytes1)", +"10711911": "BONUS_TIER_5_LIMIT()", +"107169c5": "allLinesWrong()", +"10717a2e": "switchCompatible223(bool)", +"10718655": "contributeFor(address)", +"1072cbea": "transferToken(address,uint256)", +"10731a65": "claimTokenOwnership()", +"10735089": "readteamXaddr(address)", +"1073c4a9": "exploreBuilding(uint8,uint8[176])", +"1073d1f8": "releaseTprFund()", +"10745f7e": "getMinAmountToWager(uint256)", +"1074c619": "flushEthers()", +"1075153f": "multiPartySend(address[],uint256[])", +"1075f186": "fundingPoCEndTime()", +"10764268": "salvageOtherTokensFromContract(address,address,address,uint256)", +"10768bdd": "myUsingOracalize()", +"10769e01": "POOL_EDIT_2()", +"1076c2d7": "StreamXOnline()", +"1077135a": "oraclizeSetWinner(uint256)", +"1077666e": "unmined()", +"1077f06c": "makeClaim(uint256)", +"10780cce": "grantsStartTimestamp()", +"107853a9": "Spacoin()", +"10787d58": "checkfriend(address)", +"1078ad80": "makeContractPermanent(string)", +"107925bb": "viewCustomer(string)", +"10793b50": "m_contributionHistory()", +"10796a47": "staticCall(address,bytes,bytes)", +"10797bab": "runtoeth(uint256)", +"1079b859": "finalRewardPeriodPercent()", +"1079ed67": "getChildByAddress(address)", +"107a2c5e": "betEvents(uint256)", +"107a69e8": "WithdrawResult(uint256,bytes32,uint256)", +"107a77d0": "finalizeVestingAllocation(uint256)", +"107a83e2": "prizesAwarded()", +"107b1f8c": "debug_verifyShare(bytes,uint256[],uint256[],bytes,uint256,uint256)", +"107bf304": "withdrawEthToOwner(uint256)", +"107d1d55": "startPeriod(uint256,uint256)", +"107d4b23": "Bitcan()", +"107d8a90": "COBA()", +"107e1a29": "setEndTimeIco(uint256)", +"107e7b1f": "setBroker(address,uint256)", +"107e8b24": "setTimeSale(uint256,uint256)", +"107f3f6a": "setExeStatus(uint64,uint64)", +"107f587c": "deactivateEmergencyProtectedMode()", +"107f76c5": "cancelOrder(bytes32,uint64)", +"10802749": "maxPlayerNum()", +"1080b7b1": "token4DivsOwing(address)", +"1080f251": "ownerOfLand(int256,int256)", +"10814c37": "bot()", +"10816757": "crowdsaleClosingTime()", +"1081dc8a": "contractIndex(uint256)", +"10828bcc": "noOpenGameResult()", +"1082a128": "SaveRickAndMorty()", +"1082cda1": "Register(bytes32,address)", +"1082d51e": "COINESIA()", +"1083d2fe": "technicalAmount()", +"1083f761": "assetToken()", +"10840303": "alterAdmin(address,bool)", +"108456b4": "FIRST_AUCTIONS_MINIMUM_RAISE()", +"10848ddf": "getDaysInMonth(uint256)", +"1084a1fb": "transferToAccount(bytes32,uint256)", +"1084bc90": "farmSingle(address,address,uint256)", +"1084cc51": "canDoubleDown()", +"10855269": "setProxyStorage(address)", +"10861f40": "wasDelegate(address,address,uint256)", +"108623f2": "checkProofOfWork(uint256,uint256,uint256)", +"10867877": "eatUnicornWithoutCorn()", +"1086a9aa": "approve(address,uint64)", +"1087452c": "signatureOwner()", +"10875ac0": "getMembershipExpiryDate(address)", +"10878ea1": "REGISTRY_INTERFACE_REQUIREMENT()", +"10888f2f": "admin_exFeeRate(uint256)", +"1088996b": "_newOutgoingTransaction(address,address,uint256,string)", +"1088f03f": "crowdsaleCompleted()", +"10895087": "DDJXRP()", +"1089843c": "OAKTokenCrowdsale(uint256,uint256,uint256,address)", +"10898a3e": "currentStateStartTime()", +"1089b16e": "setPod(address,uint8)", +"1089f215": "ex(uint256)", +"108a101b": "hasEmptyEditionSlots(uint256)", +"108a936b": "_initGame(uint256,bytes32,bytes32,bytes32,uint256)", +"108afb9f": "getBonusAmount(address,uint256,uint256,uint32)", +"108b77ad": "tokenPresaleSold()", +"108c3708": "paoContactAddress()", +"108c8ae4": "completeTask(uint256,uint256)", +"108caf79": "whitelistTokens()", +"108d0c84": "enableDefinedGame(uint256,bool,bool)", +"108d40f8": "PutGift(address)", +"108d6f94": "ProjectOwner()", +"108d995b": "getContinuityNumber(uint32)", +"108e161b": "isBallotSealed(uint32)", +"108e4bdb": "isKycTeam(address)", +"108eaa4e": "resolver(uint256)", +"108f69f8": "verifyTetherLoss(address,uint256,uint256)", +"108fa161": "newEnglandBets()", +"108fe10c": "advisers(uint256)", +"109050bc": "jackpotLastQualified()", +"1090a638": "presaleGoalReached()", +"10922cc1": "testTransferCost()", +"1092735d": "Created(address,uint256,uint8,uint256,string)", +"10937b5a": "adminAddMoney()", +"1094252e": "reconciliationDate()", +"109447e1": "createHash(uint8[5],bytes32)", +"10947164": "changeCEO(address)", +"1094d009": "LowGasAmount()", +"10950708": "setInvoicePaid(address,address,uint256,uint256)", +"109538ca": "transferAdeptTokenOwnership(address)", +"10953c22": "ChangeChallengeAdditionFee(uint256)", +"1095b6d7": "withdrawFee(address,address,uint256)", +"1095f211": "PushInvestorList(address)", +"10961935": "Bionic()", +"10970fbb": "convertTransferredTokensToMny(uint256,address,address,uint256)", +"10971bee": "bonusDayPercent()", +"10972704": "getCurrentAward()", +"10978594": "depositSoul(uint256)", +"1097b9ee": "sellingPrice(bool)", +"1097c929": "episodePurchase(address,uint256)", +"1097d54a": "addMaster(address)", +"1097e579": "Enter()", +"1099107b": "apSaleIssue(address,uint256)", +"1099d3ec": "scheduleTransaction(uint256,uint256,uint256,bytes)", +"1099f6fa": "disablePOSReward(address,bool)", +"109a9dbc": "bulletAddress(address)", +"109ac462": "safebalance(uint256)", +"109b678a": "immortals(address,uint256)", +"109c2032": "LotteryToken()", +"109d42d3": "addTokenSale(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"109df68e": "rotateBitsRight(bytes,uint256)", +"109e591a": "SchmecklelToken()", +"109e8b21": "addOldMayors(uint256[],uint256[],address[])", +"109e94cf": "client()", +"109e9de6": "getMaxBuy(uint256)", +"109ef276": "newDutchPriceRate(uint256,uint256)", +"10a03b22": "PHASE1_SUPPLY()", +"10a0d2f1": "startOfCrowdsale()", +"10a101df": "getKeyData(bytes32,bytes32)", +"10a20b4c": "testMintGuy()", +"10a2f7cb": "createOption(uint256,string)", +"10a31091": "createRadar(uint256)", +"10a37c26": "getWinnerAddress()", +"10a3ec4f": "test_fiveAssertTrue()", +"10a4fd08": "Platinum()", +"10a5bbdb": "changeCharPrice(uint256,uint256)", +"10a64976": "ARLCToken(uint256,string,string)", +"10a6fdc2": "updateEtherPrice(uint256,uint256)", +"10a73f5e": "jackpotrate()", +"10a78f4a": "playerTwoReveal(bytes32,bytes32)", +"10a7a5f5": "secondStageWallet()", +"10a80397": "addBudget(uint256,uint256,uint256)", +"10a82579": "lockTokensAddress()", +"10a86088": "getIntField3()", +"10a942b4": "withdrawCoindropsToken()", +"10a9de60": "getOracle(uint256)", +"10aa3d8c": "VirsymCoin(string,string,uint256,address)", +"10ab96e1": "LYNDO()", +"10abda2b": "leaderAddress()", +"10abdb0a": "Dealer_HitOrStand(uint256,bool)", +"10acec5d": "_save(address,uint256,uint256,uint256,string,string,address,uint256,uint256)", +"10adb0ea": "sanMaxLength()", +"10adda0e": "feesAvailable(address,bytes4)", +"10ae4a73": "presaleAllocation(address,uint256,uint8)", +"10ae4ce2": "setReleaseValidator(address)", +"10af92ba": "eachCandy()", +"10b0a4cb": "updateServiceMaxCreditsPerProvision(address,uint32,uint256)", +"10b0b5d5": "add(uint256[])", +"10b1bf2c": "LongPlace(address[2],uint256[8],uint256,uint256)", +"10b23ceb": "isAdjacent(uint8,uint8,uint8,uint8)", +"10b3d502": "ICO_BONUS2_RATE()", +"10b44094": "LogUserRegistered(address,address)", +"10b60e65": "SimpleTrade(address,address,uint256,uint256)", +"10b787d1": "evaluate_model(uint256)", +"10b798d9": "countRef(address)", +"10b7d9ae": "view_get_maintenanceMode()", +"10b8b441": "PrediksiToken()", +"10b9e583": "shutDown()", +"10bc044f": "setUserLanguages(address,address,uint256[])", +"10bc3c75": "getCurrentMiner()", +"10bd0d9e": "LegendsToken(address,address,uint256,bool)", +"10bd6d2b": "__address2__()", +"10bdc6cc": "joingames(uint256)", +"10be0ab0": "getDaoist(address)", +"10be3808": "receivedWei(address,uint256)", +"10beb070": "getRaffleStats()", +"10bebe64": "OneExchangeToken()", +"10bf5068": "setProposalFee(uint256)", +"10c067d2": "setPriceForProtectedCrypton(uint256,uint256)", +"10c0afaa": "balanceForReward()", +"10c1181d": "memberId()", +"10c12917": "calculateWinnings(uint256,uint256)", +"10c193b9": "total_tokenwei()", +"10c19421": "born()", +"10c1952f": "setLocked()", +"10c1b414": "moveTokens(address,uint256)", +"10c1de19": "GeneratedNumber(uint256)", +"10c1ff21": "crowdsaleSuccess()", +"10c2a365": "PreICO()", +"10c2c1c1": "setArbiter(uint256,address)", +"10c36365": "SetExchanger(address,bool)", +"10c3b15f": "calculateAmountToRelease()", +"10c452ef": "deactivate_trading()", +"10c4610b": "exporterBanker()", +"10c49b78": "CarlosCoin()", +"10c4b19a": "minMakerBetFund()", +"10c4e8b0": "all()", +"10c5b269": "orderMatchSell(uint256,uint256,uint256,uint256,uint256)", +"10c5b328": "mintTokens(uint256,address)", +"10c70801": "setMaxAddresses(uint256)", +"10c74fc6": "setGlobal(uint256,uint256)", +"10c7868f": "sessionNumber()", +"10c9135e": "getTime3(address)", +"10c9ab39": "makeTrans(address,uint256)", +"10c9c76d": "updatePokecoinAndPokemarketAddresses(address,address)", +"10cad61f": "combinedGoalReached()", +"10cad69c": "getBrickIds(uint256,uint256,bytes32[],uint256,uint256,uint256)", +"10cb4302": "DstTokensIssued(uint256,uint256,uint256,uint256)", +"10cb4d64": "rejectCurrentPlayerDraw(bytes32)", +"10cb5628": "isPartOf(uint256)", +"10cb954c": "members_push(address,address)", +"10cbe445": "applyMC()", +"10cc6e21": "Dappster()", +"10cc969b": "sumbitForElection()", +"10ccbbdb": "_checkVotes(address)", +"10ccbe66": "setAltCapitalization(uint256)", +"10ce0516": "canSwap()", +"10ce2f3f": "buy3(address[],address[],uint256[],bytes,bytes,bytes)", +"10ce6452": "set_deposit_fee(uint256)", +"10cf5d47": "awaitingPayout()", +"10cfcc19": "left17(uint256)", +"10d0059c": "removeLock(uint256)", +"10d07e27": "_lotteryCard(uint256,address)", +"10d08ef4": "_check_winner()", +"10d0ffdd": "calculateTokensReceived(uint256)", +"10d26354": "greaterThan(bytes32,bytes32)", +"10d2f2e5": "set_whitelist_enabled(bool)", +"10d3bd2a": "transferMoneyMoney(address,uint256)", +"10d426f2": "_remove(address)", +"10d48cd3": "verificationAddressOn(address)", +"10d5105d": "offlineTransfer(address,address[],uint256[],uint8[],bytes32[],bytes32[])", +"10d58506": "transFeeCut()", +"10d5e276": "maxAttempt()", +"10d6a13a": "tokenSaleClosingTime()", +"10d72742": "removeFailedGame()", +"10d7b903": "DIALSSPUN()", +"10d89d37": "isExchangeUser()", +"10d8d74d": "setPrice(bytes32,uint256)", +"10d92060": "requiredGasPrice()", +"10d979f6": "tokenDivsOwing(address)", +"10da9f75": "StayBitContractFactory()", +"10dc0e3c": "decimalOfPrice()", +"10ddaa87": "_setCurve(uint256[],uint256[])", +"10ddd6fc": "_onPromo(address,uint256)", +"10debdf8": "isAuditFinished(uint256)", +"10dff452": "getStatsData(uint256)", +"10e04dcb": "BONUS_500()", +"10e0ebb3": "callStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"10e1c5e5": "getKrsFromApproved(address,uint256)", +"10e1d6db": "payoutEscrow(uint256)", +"10e22d41": "receivedWei()", +"10e2b914": "setTargetDiscountValue6(uint256)", +"10e3a28b": "iEther()", +"10e56973": "keyPrice()", +"10e5bff8": "setSuccessor(address)", +"10e6913e": "upDate()", +"10e6a223": "allocateSurvivorWinnings(address)", +"10e6be35": "getRewarder(int256)", +"10e6d3c9": "teamReservation()", +"10e6d746": "_mint(address,string)", +"10e6e06c": "vote(bool,uint256)", +"10e776ed": "lockBalanceOf(address)", +"10e7a9ce": "countMonths()", +"10e7e89f": "getLockingTimestampfrom()", +"10e80ded": "accumulate_to()", +"10e82384": "airdropAdmins(address)", +"10e89b22": "remove_deal(uint32)", +"10e96b3c": "createMorePaymentChannels(uint256)", +"10e9f2eb": "_getFetchVoteInterface(uint256)", +"10ea13df": "totalInvestment()", +"10ea6b34": "setReadOnly(bool)", +"10eae945": "wdToken(address,address,uint256)", +"10eaf707": "getWarehouseByAddress(address)", +"10eb3a32": "getContinuityNumber(uint32,int256)", +"10eb5a8c": "transferAndCallFST(address,uint256,bytes)", +"10ebb38d": "ASFBToken()", +"10ebf103": "getPokemonBet(uint256)", +"10ec5d2c": "funeralAndBirth(bytes32,int256,bytes32)", +"10eca945": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256)", +"10ece9c6": "correctedHeroContract()", +"10ed5dfe": "_emitActiveChanged(bool)", +"10ee1910": "submitGameResultAndTriggerPayout(uint256)", +"10ee51ca": "GXVCSentByEther(uint256,address,uint256)", +"10eeb69a": "arbitrate(uint256,bool)", +"10ef0ac7": "endTimeICO()", +"10ef1976": "getEpmBalance(address)", +"10f01eba": "pIDxAddr_(address)", +"10f0c4da": "maximalInvestment()", +"10f13a8c": "setText(bytes32,string,string)", +"10f169e8": "disputeStatus(uint256)", +"10f1726d": "isDayTokenActivated()", +"10f1a274": "setMinWei(uint256)", +"10f226df": "addAction(bytes32,int256,int256,bytes32[],bytes32[],bool)", +"10f2bf3e": "closeSale2()", +"10f2e11c": "PrometheusX(address,address)", +"10f32982": "GetQueueLength()", +"10f3ac24": "EmergencyWithdrawNoAccountedTokens()", +"10f40804": "alottMainSaleToken(address[])", +"10f41715": "updateMintingData(uint256,uint256)", +"10f444ac": "ChinaInvestmentToken(uint256,string,uint8,string)", +"10f5f1b3": "get_participant_arbits_kyc_whitelist(address)", +"10f5f6b6": "free_vote_for_candidate_A()", +"10f66c54": "AirdropOne(address,uint256)", +"10f6e2a6": "setCountWinnerByPlace(uint256,uint256,uint256)", +"10f6fd02": "GetAllChallengeIDs()", +"10f74467": "kycRegisteredContributors(address)", +"10f7cf32": "statuses(bytes32)", +"10f85f44": "EAACoin()", +"10f88546": "declareCheater(address)", +"10f91e39": "walesaDawajMojeStoMilionow()", +"10f945c7": "withdrawToPoolOwner(uint256)", +"10fa01e6": "isBattleCreator(string,address)", +"10fa85c6": "HybridToken(string,string,uint8)", +"10fab6c7": "addReceivedMessage(address,address,uint256)", +"10fae6f4": "futureFundingWalletAddress()", +"10fb3c85": "addDelayedBonus(address,uint256,uint256)", +"10fb52bf": "createSaiFoundersEdition(uint256,address)", +"10fc0a6e": "RigCraftPresalePackageManager()", +"10fc0d39": "transferToMultisig()", +"10fc31ce": "balancesForPreICO(address)", +"10fccbf0": "presaleBurnPaused()", +"10fcda55": "DDFToken(uint256,string,uint8,string)", +"10fcdecc": "fechVoteInfoForVoter(address,uint256)", +"10fe42b8": "getBdpControllerHelper(address[16])", +"10fe5a2a": "rateEarlyStage3()", +"10fe7c48": "placeBet(uint256)", +"10fe9ae8": "getTokenAddress()", +"10feb0e5": "setPowerToken(address)", +"10ff4a1b": "lockedTokenBalance()", +"1100482d": "attach()", +"1100a9d8": "endGame(uint256,uint256,address)", +"1101a0fd": "claimWinnings(bytes32,bytes32[],address[],uint256[],bytes32[])", +"1101eaaf": "purchaserCount()", +"1101fa06": "WhaleChain(uint256,string,uint8,string)", +"1102610e": "setMarketplaceContract(address)", +"110466ed": "setOperatingStatus(bool)", +"110496e5": "allow(address,bool)", +"1104e09e": "SaddleShopSaleFee()", +"110506f0": "createCard(uint256,uint256)", +"11056874": "finishDApp(bytes32)", +"1105efe2": "_setExtraReceiverAmount(uint256,address)", +"11063eb1": "updateUnlockDate(uint256)", +"11071cb3": "CratesPurchased(address,uint8)", +"1107c3f7": "orderConfirmer(bytes32)", +"1107e77c": "removeRequester(address)", +"1107fa00": "thirdStageMintingDate()", +"1109a0a8": "blocksProducers(uint256)", +"1109ef92": "transferFromCrowdsale(address,uint256)", +"110ae711": "checkReferral(bytes8)", +"110b5f76": "ApprovalDenied(address,address)", +"110b8a6d": "changePlatformFlag()", +"110c478b": "uintRound(uint256,uint256,uint256)", +"110cee6b": "FlightDelayPayout(address)", +"110d35b8": "buyAsset(uint256)", +"110d9e68": "insert(bytes32,uint256,uint256,address,address)", +"110dc7a6": "doInvest(address[3])", +"110df916": "getChannelID(uint256)", +"110f8874": "withdrawRefund()", +"110fd65f": "toBeRaised()", +"111002aa": "createTask(string)", +"11102d4d": "devRatio()", +"11103599": "Token_Offer(address,address,uint16)", +"1110b13a": "getWinningPosition(uint32)", +"11115e38": "controlTime()", +"1111cd24": "getBuyReturn(uint256)", +"11125497": "setCodename(string)", +"1112b124": "setBuyPrice(address,uint256)", +"11136747": "_init(uint256)", +"1113ed0d": "KERNEL_APP_ID()", +"1113f2e6": "_addEth(uint256,address)", +"1114811a": "FACTOR_9()", +"111485ef": "individual_cap()", +"11149ada": "getProof(uint256)", +"1114fce5": "clearAdmins()", +"1116cba9": "WWNCoin()", +"1116f631": "setFunctionSevenPrice(uint256)", +"111723ed": "getShipDetails(uint256,uint256)", +"1118069c": "enforceKyc(bool,address)", +"111839d5": "rushTimeFloorCount()", +"11184392": "registrationDeadline()", +"111878f6": "addBonus(uint256)", +"11191186": "setReservingPercentage(uint256)", +"11196117": "setGameStateFCF(bool)", +"11196cc2": "tournamentFinished(uint256[])", +"11199872": "setSignatureChecker(address)", +"1119e8a6": "increaseNumber(uint256)", +"111a1fe9": "dividendsBuffer()", +"111a7427": "setNewAttributes(string,string)", +"111b30a7": "setFundariaTokenBuyAddress(address)", +"111b63ab": "CoinparkToken()", +"111b72c3": "accountCreated(address,bytes32,int256)", +"111bc51a": "VibeCoin()", +"111cf909": "setIntegerVaule(uint256)", +"111d7241": "tournaments()", +"111d8171": "getNews()", +"111da3a7": "popFirstFromArray(address[])", +"111e73ff": "SetAlias(uint256,bytes32)", +"111eaba0": "updateOwners(address,address[],uint256,uint8[],bytes32[],bytes32[])", +"111fba02": "NETM()", +"1120ba47": "ApolloSeptemCrowdsaleExtended(address,address)", +"112227ae": "TIER3_BONUS()", +"11223a2f": "phasePublicSale1_From()", +"1123adb1": "currentDividendPeriodNo()", +"1123cdd9": "decideSplit(uint256,uint256,string)", +"1123e608": "LogMigrate(address,uint256)", +"1123efd5": "getNumGamesStarted()", +"1123fcce": "getEmployeeCount(address)", +"11247233": "changeArrangerFeeRecipient(address)", +"1124c05a": "getLogs(uint256)", +"1124e9ea": "setfocuscardid(address,address,uint256)", +"11262105": "getLog(address,uint256,uint256)", +"11269de6": "setFreezeForCoreTeam(uint256,address,uint256)", +"1127be97": "recomputeLastAverageBalance()", +"1128798f": "isCrowdSale()", +"1128b59e": "bonusStage2FirstDay()", +"1128bbfd": "getProposalAddress(uint256)", +"112940f9": "addConsumer(address)", +"1129f644": "STAKE_START_TIME()", +"112a19af": "Enlisted(address)", +"112b3c52": "MuxeToken()", +"112b4495": "_appendTagged(string,string,string)", +"112b466e": "btcraised()", +"112c7075": "ManualDeposit()", +"112cc015": "ROLE_CRO()", +"112d6b34": "getRefBalSended()", +"112d761c": "addAnimal(uint8,address,uint32)", +"112dd4fd": "foundation_coins()", +"112e39a8": "scheduleCall(uint256)", +"112e40b5": "setBalanceOfETH(address,uint256)", +"112ea262": "authorizeProvider(address)", +"112ed3f5": "resetWeiBalance(address)", +"112f5eb8": "airdropCall(address,address,uint256)", +"112fb7c9": "finishGenerating(bool)", +"112fbe9b": "transferMinimumFee(address)", +"11302818": "addRefBonus(address,uint256)", +"11308d66": "freeLandsOf(address)", +"1132fae4": "_utoa(uint8)", +"113353a8": "changeMember(uint256,address,address)", +"1133f89d": "sendToGrowthContract()", +"11340c21": "getEGTTotalSupply()", +"1134269a": "convertForPrioritized(address[],uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"11349a6d": "dispute_end()", +"1134b7da": "emptyBody(uint256)", +"11355585": "setBlockLimit(uint256)", +"1135b3ac": "allocateInternalWallets()", +"113642e5": "getConfirmationCount(bytes32)", +"11367b26": "destroyer()", +"1136aa64": "rocketTravelTime(uint256)", +"1138001c": "lenghtenFrozenState(uint256,uint256)", +"11390441": "logic(address)", +"113990b8": "PRICE_MULTIPLIER()", +"1139a355": "releaseForTransfer()", +"113a8ed5": "Film()", +"113b2eff": "_userRefund(address)", +"113b5cf2": "checkBonus(address)", +"113bb8db": "EventTransfer(address,address,uint32)", +"113c589f": "SmartBillions()", +"113ca356": "ticket(address,bool)", +"113ce458": "winnerBidValue()", +"113d1975": "totalTokensForSaleDuringICO4()", +"113d32d0": "TournamentCreated(uint256)", +"113d8938": "addBytesSetting(string,bytes32,address,address,string)", +"113e2088": "votingData()", +"113e5b93": "dayToDate()", +"113e6b66": "fipsAddToLedger(bytes20,address)", +"113e9d4f": "DigitalKeyCoin()", +"113ee583": "aliceClaimsPayment(bytes32,uint256,bytes32,address,address)", +"113ee964": "transferFromByDate(address,address,uint256[],uint256[])", +"11400d8e": "priv_fastGetBlockHash__(int256,int256)", +"1141d7de": "URI()", +"11420f90": "MYINITIALSUPPLY()", +"11424eac": "implementInterface(string)", +"11428ce8": "DTXToken(address)", +"1142d47f": "spentFunds()", +"114385a0": "AddReward(uint256,string,string,string,uint256)", +"1143c026": "disableICOSwapLock()", +"11448a56": "scuttle()", +"11456b47": "addName(string)", +"11459f9c": "viewFinalScore(uint8)", +"1145a20f": "scheduleCall(address,bytes4,bytes32,uint256,uint8)", +"1145a49c": "test_oneTrueAssert()", +"1146015e": "setData_6(uint256)", +"11461614": "pushRatePlan(uint256,string,bytes32,bool)", +"114630e1": "ADVISORS_TOKENS_SUPPLY()", +"11463a01": "getChampion()", +"11466110": "Pretorian(string,string,string)", +"11467d7c": "deactivateUser(address,uint256)", +"1146eedd": "Referrer(address)", +"114719c5": "getLongGap()", +"11471e17": "tokensPerEther2()", +"1147b142": "MercatusDeals()", +"1148d93e": "initializedRatify()", +"1148da2f": "proposeWrittenContract(string)", +"11497c69": "PlayChapToken()", +"1149b5f5": "PendingManager(address)", +"1149f736": "unpackPrice(uint16)", +"114b4f1c": "howManyGuaranteed()", +"114beab3": "availableTokensforPreICO()", +"114d081d": "markHours(bytes32,bytes32,int256)", +"114d38a0": "notExceedingSaleCap(uint256)", +"114d69b2": "setCRLaddr(address)", +"114d8be1": "addNewOwner(address)", +"114da3e3": "mintWithEvent(address,uint256)", +"114de05e": "addMultipleRecords(uint256[])", +"114e4802": "congratulationsText()", +"114e6b37": "setDependencies(address,address,address,address,address,address)", +"114f0e49": "player4()", +"114f9511": "pay(bytes32,uint256,address,bytes)", +"11506970": "freezeTokensAmount()", +"11506d4b": "forgiveThis(address)", +"11513ba5": "setTTWTokenAddress(address)", +"11552212": "Hodl(address,uint256)", +"1155d042": "accumulateFee()", +"1155f60f": "RoundBetStarted(uint256,uint256)", +"11563b04": "ETokenAirdrop()", +"11566dd7": "fundingMax()", +"11567f95": "readnameXaddress(address)", +"115793d4": "newClockmaker()", +"1158183a": "isPreIcoActive()", +"11589260": "_createProxy(address,address)", +"1158f696": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes32)", +"115976c4": "admin1()", +"1159f39b": "transferFromCroupier(address,uint256)", +"1159fd53": "isAContract(address)", +"115a43e9": "getWarriorOwners(uint256[])", +"115b7fa8": "setOverBalanceLimitHolder(address,bool)", +"115bd3f8": "rejectInvestmentWithdrawal()", +"115bdfe7": "currencyMap(address)", +"115ce332": "isAddressMember(address)", +"115d5376": "passPeriod(uint256)", +"115e397e": "getTotalchannels()", +"115e9375": "getUint256Min()", +"115ecc58": "fundStorageVault()", +"115ece4c": "getTokenAmount(address,uint256)", +"115f2be2": "customBuyerLimit(address)", +"115f2f2f": "tokensPerUSD()", +"115f6795": "cratesSold()", +"115fd072": "PowerStandardToken(uint256,string,uint8,string)", +"1160a807": "addWinTickets(uint256,uint256)", +"1160b93b": "calculatePayrollRunwayInMonths()", +"11610c25": "bet()", +"116134ee": "mask()", +"11613fc9": "godBank()", +"116191b6": "gateway()", +"1161a5c8": "registMyHns(string,address)", +"1161d226": "_participateIsAllowed(uint256)", +"1162247e": "lastTwoAmbassadorsAdded()", +"11642134": "produceEmeralds(address,uint256)", +"1164e11e": "getPurchaserAddressCount()", +"1165214d": "NotToRent(uint256,uint256,address)", +"1165dce2": "getTeamList()", +"11667335": "adminRetrieveContractConfig3()", +"1167ecb2": "finishPreICO()", +"116877cc": "changeAuthority(address)", +"116a6f6c": "BONUS_TIER_7_LIMIT()", +"116a8221": "airFropTracker_()", +"116b556b": "founder1()", +"116b7aa9": "setGameGiftOnceAmount(uint256)", +"116c347a": "_withdrawTokensTo(address)", +"116c6eab": "getProfitShare(address)", +"116c92b7": "addAccount(address,uint8,bool,address)", +"116d816b": "assetManagement(address)", +"116e4ca9": "flag_is_Online_Solidity_Decompiler_NB()", +"116e8726": "crowdsaleDasTokensChangeBeneficiary()", +"116ea900": "createETHCardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"116fb2a8": "setTokensPerETH(uint256)", +"116fe01b": "ClipperCoin(uint256,string,uint8,string)", +"11704f52": "tradingLive()", +"1170a759": "withdrawalCoolingPeriod()", +"11715316": "CorpCoin(address,uint256)", +"11715c94": "getBonusRateForAmountBased(uint256)", +"11717501": "IEFBR14Contract()", +"11719d7e": "getCrowdsalesForUser(address)", +"11725ac5": "Determine_FiveLinkGame_Result(uint32)", +"11728ecf": "toKey(address,uint256)", +"117328b9": "LogBidReturned(address,uint256,uint256)", +"11737d7b": "getFreeTime()", +"11738735": "bnbWithdrawEnabled()", +"1173ca7d": "CashBackToken()", +"11746e5e": "getSpaceshipProductCount()", +"1174ca26": "totalLossValue()", +"117546c5": "lastParentBlock()", +"1176205e": "setMaxRequestQuota(uint256)", +"1176f5f7": "setDisputeData(uint256[2])", +"1177275e": "ZferToken(address,uint256,uint256)", +"117735f0": "NewQuest(string,bytes32)", +"1177645b": "set_devContract(address)", +"11776737": "CrowdServe(address,uint256,uint256)", +"11777af7": "refundVault()", +"1177892f": "getBalanceByAdress(address)", +"1177dc34": "nullFace(address)", +"117803e3": "OWNER()", +"11780a01": "erc20tk()", +"11789bec": "njbToken()", +"1178f51a": "ubiatarPlayVault()", +"11791368": "removeCurrentIcoRound()", +"1179778b": "setBasePremium(uint256)", +"1179cf71": "lowEtherBonusValue()", +"117a0a22": "CosmoToken()", +"117a4425": "setII_S(uint256)", +"117a5b90": "games(uint256)", +"117b198e": "soldTokensLimit()", +"117b4705": "retract(bytes32)", +"117b652b": "rewardinterval()", +"117cae9a": "editStartlist(uint256[],uint256[])", +"117d4128": "getOrder(uint128)", +"117d82d6": "playCount1()", +"117d94f5": "sendFundsToWallet()", +"117ddaf9": "weiRaisedInPreICO()", +"117de2fd": "payout(address,uint256)", +"117df088": "withdrawDeposit()", +"117e1ebb": "lastRoundWinnerInfo()", +"117e62fd": "getLastAuctionsWinningBid()", +"117f8684": "changeBZxVault(address)", +"1180788e": "searchString()", +"1180d67e": "angelFoundationShareNumerator()", +"1180f83b": "changeFMPcontractAddress(address)", +"1181324b": "updater(address)", +"11815312": "grantTeamAdvisorSupply()", +"1181a459": "freezeAdministrationContract()", +"11822cb7": "UTPL()", +"11823d43": "OCMarket()", +"11823e04": "advisorAllocation()", +"1182c796": "debug_is_dry()", +"11831234": "testFailPullWhenStopped()", +"1183429a": "removeAddressesFromWhitelist(uint256,address[])", +"11844aae": "period2End()", +"11851b5e": "BOARD_3()", +"11857ed7": "spendAdvertising(uint256,uint256)", +"1185a6b9": "getBBFarm(uint8)", +"118644f6": "OxBtcDex(address,address,address,uint256,uint256,uint256)", +"118654f1": "XinXianToken(address,uint256)", +"1186560e": "increaseEthRaised(uint256)", +"11873ee7": "SetGuestName(string)", +"1187497e": "updateContractState(uint256,uint8)", +"1187648b": "testInstant(uint256[3])", +"11878333": "InitialToken(string,address,uint256)", +"1187d66e": "votedNo()", +"1188189e": "storeSomething()", +"1188263c": "MBOTCOIN()", +"1188324b": "soldCWC(address,uint256,bytes32)", +"11883c6d": "make_hash(uint256,uint256,address,address,uint256,uint256)", +"11886bd4": "view36()", +"118934cc": "ownerCommission()", +"118a0aae": "addHero(string,address,address,uint256,uint256)", +"118a9db3": "revenueShare(uint256)", +"118aa5a1": "convertToRate(bytes32)", +"118b0f04": "santToken()", +"118b53ec": "LogTeamTokensTransferred(address,uint256)", +"118cbccb": "etherWeiRate()", +"118ceab6": "lastAdjust()", +"118da6fb": "getGameCompleted(uint256)", +"118dd8fc": "bonusesAfterClose(uint256)", +"118e1f2e": "globalOrderSerial()", +"118e31b7": "getBorrowBalance(address,address)", +"118e4575": "get_branch(uint256)", +"1190516d": "GetByte(uint256,uint256)", +"1190647c": "buyerHistory(address,address,uint256,uint256)", +"11916ce7": "moveIcoTokens(address,address,uint256)", +"11933e4b": "Transmuted(address,address,address,uint256,uint256)", +"11937ccd": "adminUpdateStartEndTime(uint256,uint256)", +"1193e38e": "setPercent3(address,uint256)", +"1194ed46": "payerString()", +"11952369": "onRemove()", +"1196004f": "newCycle()", +"1196245b": "registerDIN()", +"1196493c": "getJobContracts(uint256,uint8)", +"119669cb": "GiveChipGitf()", +"1196deda": "sendTeamTokens(address,uint256)", +"1196fb60": "contributeToPrizePool(string,string,string)", +"119739ff": "privatesaleEnds()", +"11997dc6": "BASE_DURATION()", +"119aa5c8": "checkForward(bytes)", +"119b22b3": "roundNum()", +"119c1c23": "tokenAllowance(address,address)", +"119cb2ff": "tokenPriceDivides(uint256)", +"119cbed6": "rtm_contract()", +"119cc328": "setFoundersWallet(address)", +"119ce91b": "voteInfo(bytes32,address)", +"119d0cb5": "DumbCoin()", +"119d97ee": "team4Address()", +"119d9bfe": "KudosTokenFactory()", +"119dd1b0": "presaleLimitReached()", +"119e045b": "checkMaintenanceTime()", +"119e5cdf": "creationUnit()", +"119ebe89": "getExternalCurrencyProcessor()", +"119ecb35": "tokensaleStageNow()", +"119ee4ab": "batchCancelAuctions(uint256[])", +"119eeb9c": "darx()", +"119f118d": "ethToCash()", +"119f1edb": "claimPlatinum(uint64)", +"119f2546": "distributeEBTC(address[])", +"119f2c9f": "transferCard(address,uint256,uint256)", +"119f32dd": "adminIsDead()", +"119f8747": "support()", +"119fdee2": "sha256ofString(string,string)", +"11a00327": "deleteOrder(uint256)", +"11a09ae7": "airDropTracker_()", +"11a0c16c": "dsquare(uint256,uint256)", +"11a10508": "switchToNextSale(address)", +"11a10698": "ERC223Token(uint256,string,uint8,string)", +"11a153df": "getBlockNumSinceInit()", +"11a1b31e": "commandGetBonusTime()", +"11a4c710": "buyRecipient(address)", +"11a5a793": "percentageToKill()", +"11a5b9bc": "migrateBlock(string,uint256,uint256,uint256,address)", +"11a76729": "transferFromInBatch(address,address,uint256[])", +"11a76f37": "addStakeHolder(address)", +"11a800bc": "addressOf(uint256)", +"11a881e8": "setFee(uint256,uint16,uint256)", +"11a88e05": "preSale2()", +"11a8f413": "latestRoundId()", +"11a98193": "ETHfund()", +"11a9c3c2": "sellDOTCH(uint256)", +"11a9f10a": "noToken()", +"11aa2722": "assignOldUserFunds(address[],uint256[])", +"11aa7e26": "setKevin(uint256)", +"11aaf884": "HCPToken()", +"11ab19f8": "addTokenToTotalSupply(uint256)", +"11ab27d2": "HydroCoinPresale()", +"11ab31ed": "rejectProposal(bytes32)", +"11ac20c0": "cancelLottery(uint32)", +"11adbaad": "getListOfAddresses()", +"11ae40b2": "Presale(uint256,uint256,uint256,uint256)", +"11ae6aee": "_mint(int256,uint256,uint256,uint256)", +"11aee380": "memberCount()", +"11af07e2": "create_event(string)", +"11af3c68": "divest(address)", +"11af6564": "getCurrentGasPrice()", +"11affa5c": "setEggTable(uint16,uint32[])", +"11b059c6": "mintableProperties(uint256,bytes32)", +"11b2b22a": "FRKT()", +"11b35c48": "AGSCoin()", +"11b4bbdb": "mintTokens2(int256,address,uint256,uint256)", +"11b546f6": "firstWeekTokenPrice()", +"11b639d9": "currentTokenCount()", +"11b63a17": "CROWDSALE_TOKENS_NUMS()", +"11b70018": "bookingList(address,uint256)", +"11b7702a": "ImportTestA()", +"11b7d483": "addressGains(address,address)", +"11b8f957": "dayAfterDeadline()", +"11b97324": "participateCrowdsaleSelected(address[])", +"11b98e12": "isMainSaleTokenRaised(uint256)", +"11b9fee8": "ForkChecker(uint256,bytes32)", +"11ba65e5": "_setUpgradeabilityOwner(address)", +"11baae84": "Contribution(address,address,uint256,uint256)", +"11bab044": "getCreditFundAddress()", +"11bb20da": "withdrawBattleValue(address,uint256)", +"11bbb155": "goLong()", +"11bbdf53": "maxOpenAttacks()", +"11bc0a34": "BuyOrder(uint256,address,uint256,uint256,uint256,uint256)", +"11bc5315": "drawer()", +"11bcd573": "SetTest(address)", +"11bcd830": "MinDeposit()", +"11bd85ad": "Owned2()", +"11bdfe19": "revertBet(uint256)", +"11be40e0": "transfer(address,address,address[],uint256[])", +"11bec062": "EVT()", +"11bed352": "eip20Approve(address,address,uint256)", +"11bf68cf": "_issue(bytes32,address,address,uint256,bytes,bytes)", +"11bfe017": "playerWinItems(address)", +"11c07649": "getMainAccount(uint256)", +"11c09100": "calculateNumWeiToIssue(uint256,uint256)", +"11c0b024": "_setDamgeValue22(uint256)", +"11c0f931": "bindSmartIdentity(string,string)", +"11c12715": "LCToken()", +"11c134e1": "sumPreICO()", +"11c15dcc": "purchaseBalances(address)", +"11c19d3c": "SpiderFarm()", +"11c1dc82": "monakojima001()", +"11c1ddd9": "addMedalBurned(uint16)", +"11c28e1a": "initial_tokens()", +"11c33625": "royaltyInformationContract()", +"11c3a62f": "GetLuckyResults()", +"11c3fec5": "CreateLand(uint256,address)", +"11c4d4f4": "communityAddr()", +"11c4dbf4": "auctionReputationReward()", +"11c4e123": "rootHashOf(bytes32)", +"11c52ec0": "setMaxWagerWei(uint256)", +"11c57757": "tixPromoDeposit()", +"11c5a234": "logResult(int8,string)", +"11c60418": "remAdmin(address)", +"11c7d6bd": "issueNewSeries()", +"11c8efac": "lifeA(uint256)", +"11c911d9": "unreserve(address,uint256)", +"11c91914": "isUnderLimit(uint256)", +"11c93d03": "crowdsale_eth_refund()", +"11c94362": "COMMUNITY_RESERVE()", +"11c98718": "getMsgDataBefore()", +"11c99f3b": "FundsWallet()", +"11c9ccf6": "deleteCustomer(address)", +"11ca3c63": "satoshiRaised()", +"11cb0bcf": "getParticipantOriginWithIndex(uint256)", +"11ccf822": "beneficial()", +"11cd98ed": "convertToAllTable(uint256,string)", +"11cda415": "peer()", +"11cdf27a": "addVersion(address)", +"11ce0267": "storageContract()", +"11ce3d24": "postMonForMon(uint64,uint64)", +"11ce3d2c": "GQHToken(uint256,string,uint8,string)", +"11ce4556": "TOKEN_TO_CREATOR()", +"11ceb21c": "ZigZagSupply()", +"11cec8f0": "getTradeByIndex(uint256)", +"11cfb19d": "freezedTokenOf(address)", +"11d12402": "testEasyPropose()", +"11d15e17": "freeReadings(address)", +"11d17e78": "Blocker_destroy()", +"11d295bf": "_getShipName(uint256)", +"11d36bf5": "reservedSaleEther()", +"11d36c4f": "setBoolF1F2F3(bool,bool,bool)", +"11d40001": "EthernautsVendingMachine()", +"11d414af": "changeIcoStatus(uint8)", +"11d4f314": "setBounties(address[],uint256[])", +"11d60664": "ethtoeth(address,uint256,uint256)", +"11d62de9": "ownerShip(address,address)", +"11d634ac": "HamsterMarketplaceToken()", +"11d7b2fe": "unlockAccount()", +"11d817f2": "getUsers(address,bytes32)", +"11d8657a": "finalizeAndPayoutForHopeful(uint256,uint256,uint256,uint256)", +"11d87c4e": "initGame(uint256,bytes32,bytes32,bytes32)", +"11d89f3a": "setResearchAndDevelopment(address)", +"11d8cac7": "view_state()", +"11d986e6": "BlockSigner(uint256)", +"11da60b4": "settle()", +"11da9598": "add2MarketPlace(address,uint256,uint256,uint256)", +"11daa2d0": "jpPercentage()", +"11daa7a0": "gamessage(address,address)", +"11daca81": "joinPot()", +"11daea9c": "removeExchangeTestAccounts(address,address)", +"11daf56a": "MainFabric()", +"11db0176": "unLockFreeze(uint256)", +"11db3be7": "invokeVerification(uint256,uint256,uint256,string,bytes32[2])", +"11db6e0e": "ownsSouls(address)", +"11db8d1b": "burner(uint256)", +"11dbb12e": "removePolicyRule(bytes4,address,bytes32)", +"11dc273d": "currentBalances(address)", +"11dc45c9": "withdrawPrize(address)", +"11dc4703": "removeUser(uint256)", +"11dc6816": "getAllowanceOwnerValue()", +"11dcee2f": "priceCallback(bytes32,uint256,bool)", +"11dd2837": "_updateCurrentStage()", +"11dd39b4": "cancelApprove(bytes32)", +"11dd46b4": "calVoteResult()", +"11dd576d": "userCheck(bytes32)", +"11dd8845": "getRecord(string)", +"11ddf693": "debug_changeOwner(address)", +"11df19f7": "_medalTotalSupply()", +"11df9995": "coin()", +"11e0de8b": "tickets10kprice()", +"11e13c32": "BONUS_ICO_STAGE1_PRE_SALE4()", +"11e14b2e": "employees()", +"11e21245": "weiSoftCap()", +"11e3655f": "updateInstantToken(address)", +"11e38468": "MarketboardListingComplete(address,uint256,uint256,uint256,uint256)", +"11e3d606": "min_investment_eth()", +"11e48cdf": "tokensAllocatedTotal()", +"11e5b955": "Order_sell(address,uint256,uint256)", +"11e5ea57": "teamsWallet()", +"11e67c57": "totalBuyOrders()", +"11e6a0fd": "getProviderDetails(uint256)", +"11e847b6": "HATCHBACK()", +"11e84c71": "claim(bytes32,string)", +"11e956c8": "isMasterNode()", +"11e96ab6": "LockCredits(address,uint256,uint256)", +"11e99c22": "arrival()", +"11eb6d4b": "GxAuth()", +"11ebbf24": "createWallet()", +"11ec76cb": "LogClaimHalvingSubsidy(address,uint256,uint256,uint256)", +"11ec7b4a": "balancePrivateSale()", +"11ed1bf6": "artworkIndex()", +"11ed7b42": "thirdItemWrong()", +"11ee0ec5": "getZone(uint256)", +"11ef8d4b": "delegateBonusTokens(address,uint88)", +"11efbf61": "getFeePercentage()", +"11efec9b": "shareHolderByNumber(uint256)", +"11efff1f": "unlockRecordAdd(uint256,bytes32,string,string,uint256)", +"11f02c87": "createHybridization(uint256,uint256)", +"11f03b83": "GiftCrowdsale(uint256,uint256,uint256,uint256)", +"11f0b806": "getDutchAuctionToCraftAddress()", +"11f11b9c": "editName(string,uint256)", +"11f1507e": "getAssetToken(uint256)", +"11f15380": "clientKeysCount(uint256)", +"11f1fc99": "withdrawTreasury(uint256)", +"11f217c7": "getNodeAddress(address)", +"11f29729": "setsymbol(string)", +"11f2a395": "finalWithdraw()", +"11f2eed1": "convertEthToMet(uint256,int256)", +"11f37ceb": "get_price()", +"11f3eecd": "sellTokens(uint8)", +"11f43157": "openCrates()", +"11f45f23": "buyVIBET()", +"11f48166": "IntroToken()", +"11f4a9ce": "KernelProxy(address)", +"11f4ba60": "importBalanceOf(address)", +"11f54545": "SmatrOCrowdsale(uint256,uint256,uint256,address)", +"11f58e99": "maxTokensSold()", +"11f598cd": "editPersonalNote(string,uint256)", +"11f6649b": "authorizers(uint256)", +"11f6ad2b": "lastWinnerId()", +"11f72496": "testT()", +"11f82a2b": "_getPolishingPrice(uint256)", +"11fa3d14": "LeekCoinCrowdsale(uint256,uint256,address,address)", +"11fa3f4f": "weiUsdExchangeRate()", +"11fa7da2": "getInvestmentsInfo(address)", +"11fa9ea6": "narrowCyclePrize()", +"11facae2": "setValidatorCount(uint256)", +"11fb57e2": "TokenManager(address[],uint256)", +"11fb584a": "BloccaConto(address)", +"11fbad62": "_rejectTransfer(uint256,uint256)", +"11fdff0c": "advisorPool()", +"11fe12b3": "isRecovery(address,address)", +"11fe773d": "memcpy(uint256,uint256,uint256)", +"11ffb1d4": "deleteMember(address)", +"11ffe7c9": "getUserDocCount(address)", +"12005e53": "alexToken()", +"1200617f": "auction(uint256)", +"12007984": "addBalanceToGame(uint256)", +"120149a1": "readCube(bytes32)", +"120184fa": "gvCF()", +"1202be01": "eth2mnt()", +"12032e52": "getSecondaryRecord(string)", +"12035ca6": "setData_3(uint256)", +"12038a01": "totalDevelopmentFundEarned()", +"12039fed": "mintMedal(uint256)", +"12045d3f": "VKTToken(uint256,address)", +"1204bab4": "popcount(uint64)", +"1204ce91": "Debug(bytes32,uint256)", +"1204d27c": "coinIssuedBurn()", +"12055758": "checkOwner(address,uint32[11])", +"12058764": "lockBalanceGroup(address,uint256)", +"12059f68": "LoversAdded(string,string)", +"12065fe0": "getBalance()", +"1206dc5f": "transferMarketplaceOwnership(address)", +"12074a46": "getUserBets()", +"1207bb8e": "crowdsalePrice()", +"1207f0c1": "issueTo(address,uint256)", +"1208a256": "getLock(address,uint256)", +"1209073c": "updateBalances(uint256)", +"120960de": "depositInPot()", +"1209b1f6": "ticketPrice()", +"1209f7ed": "withdrawPledge()", +"120bd501": "approves(address,uint256)", +"120bd8f5": "setMinimumBetValue(uint256)", +"120c5194": "getCollectReporterAddress()", +"120c52ef": "calculateDemurrage(uint256,uint256)", +"120c7efd": "certifier()", +"120cc993": "isEmptyOwner()", +"120cf351": "bitdietecToken()", +"120dae83": "setMinimalContribution(uint256)", +"120e6c16": "_finneyToWei(uint32)", +"120e8f05": "calculateMintAmount()", +"120fe731": "Tropycoin()", +"120fe89b": "getPolls()", +"121114e1": "SuperTicketCoin(uint256,string,string)", +"1211540c": "withdrawPartial(uint256)", +"121166ef": "clearTrade(bytes,address,bytes32,address,uint256,int256,string)", +"1212c12f": "RecordManager()", +"12136918": "setMaxTranferLimit(uint256,uint256,uint256)", +"12136e57": "ERC777ERC20BaseToken(string,string,uint256,address[])", +"12146222": "highSupport(address)", +"1214ab82": "Lightning()", +"121557a3": "Avatarium()", +"121563ae": "Axioms()", +"12156c66": "snowflakeCall(address,string,string,uint256,bytes,bytes)", +"1215f8ef": "releaseValue3()", +"1216e771": "expiration(uint64)", +"12179a2d": "pendingReferals(address)", +"1217b6ff": "TransactionConfirmedByMediator(uint256,uint256)", +"121839f6": "addConfirmationNode(string)", +"1218d6bf": "decree()", +"12192649": "countOfParticipants()", +"12192b00": "getInitialHP(uint64,uint64,uint64)", +"1219bcfc": "MolToken()", +"1219d5c8": "APM_APP_NAME()", +"121a47ac": "nonceForPublicKeyX(uint256)", +"121a496b": "Lupecoin(address,address)", +"121ab65b": "LogChangeSponseeAddress(address)", +"121af083": "DFSCrowdsale(uint256,uint256,uint256)", +"121b5a25": "calculateCompensation()", +"121b68c1": "ERC223Received(address,uint256)", +"121c2b35": "burnPXLRewardPXLx2(address,uint256,address,uint256,address,uint256)", +"121c5e91": "putOnSale(uint256,uint256,uint256)", +"121d6426": "senderWeiBalance()", +"121dbc31": "changeMax(uint256)", +"121e0d4e": "godPause()", +"121e6832": "frozenDaysForPartner()", +"121e8122": "unQuarantineAddress(address)", +"121eb9e2": "createMintRequest(address,uint256,string)", +"121ef243": "createUser(string,uint256)", +"121f0a10": "resolve(uint256,uint256,string,bool)", +"121f2081": "testCreateWithForeignParent()", +"121fb72f": "ownerSetInterestSetter(uint256,address)", +"1220c6ed": "registerOwner(address)", +"12217378": "oldTokenTotalSupply()", +"1221a071": "cmctcybermovie()", +"1222c25a": "redeem(string)", +"1222e789": "isPublicSaleWithBonus()", +"122366fd": "PACCOIN(uint256,string,string)", +"1223716a": "masterHas()", +"1223f208": "withdrawadm(address,uint256,uint256)", +"12243b67": "deletePlayer(address)", +"12247a57": "IncentCoffeeToken()", +"12253a6c": "stopContract()", +"12263017": "setBool82(bool,bool)", +"122636b1": "getRemainingDaysToThirdPhase()", +"12267abc": "PRICE_6()", +"1226afde": "numtickets()", +"1226be3e": "NotifyMe(address,address)", +"1226cd98": "allocate(uint128,uint256)", +"1226f5f8": "wei_per_token()", +"12278825": "Git(uint256)", +"1227d0f4": "gameListOf()", +"122809dc": "deposits_refunded()", +"12285576": "Donated()", +"12286715": "SimpleSavingsWallet(uint256)", +"12287629": "consultantsKey()", +"1229987d": "collectProfitERC20(address)", +"1229af09": "FreshROI(uint256,uint256)", +"122a1949": "Group_1()", +"122a7723": "GetPriceMultiple()", +"122b0e85": "getVerificationLevel()", +"122bdc32": "ThemKhoaHoc(string,uint256,string,string,string,string)", +"122d34d9": "returnToken(string,uint256)", +"122d9a8d": "piEndTime()", +"122e04a8": "WITHDRAW_ADDRESS()", +"122e74f4": "getWeiLeft()", +"122fe685": "presaleAddress()", +"122ff73a": "_getStrengthDexterityVitality(uint256,uint256,uint256)", +"12302932": "reinvestAffiliate()", +"123119cd": "payer()", +"12317402": "betMinAmount()", +"123180a2": "testInitialBalanceWithNew()", +"12333b32": "StartGame(uint256)", +"123398aa": "johnnycoin()", +"1233f543": "distribute55M(address[])", +"12342248": "CreditleetToken()", +"12360151": "dayPotLeader()", +"123702e2": "profitAddress()", +"123731c4": "addressPositions(address,uint256)", +"1237b2a6": "TotalPot()", +"1237dd9a": "decimalMul(uint256,uint256)", +"123802e1": "forceRefundState()", +"123807b2": "markParticipantIdentifiend(address)", +"123841cf": "MintedGreen(address,uint256)", +"12386471": "sumExpOffset(int256,int256[],uint256,uint8)", +"1239ec8c": "batchTransfer(address,address[],uint256[])", +"123b06d5": "currentPendingParticipants()", +"123b1dae": "accountOfP(address)", +"123b5e98": "setAttributeSigned(address,uint8,bytes32,bytes32,bytes32,bytes,uint256)", +"123ba3e2": "changePrizeSplits(uint256,uint256,uint256,uint256,uint256)", +"123c047a": "createShares(uint256)", +"123c3a4f": "maxTokenSupplyICO2()", +"123c3ada": "getMedalInfo(uint256)", +"123cc082": "setJoinedCrowdsales(address)", +"123d997a": "removeAllowCnsContract(address,bytes32,address,bytes32)", +"123e4112": "arrayToCrabPartData(uint256[])", +"123f513c": "testDeadChickenCnt()", +"12407f98": "toSaleWallet()", +"1240adc8": "stoppCrowdsale(uint256)", +"1240b381": "PermarektToken()", +"1240de76": "testUnexpiredBalance()", +"124135c9": "exit(bytes,bytes,uint256,bytes,bytes,uint256,bytes)", +"1241d7a7": "setEnableRecord(bool)", +"1241ee7d": "profit(uint256)", +"1242031a": "ZhaoGuCoin()", +"12424e3f": "approve()", +"124279a7": "activeSignersCount()", +"1242e96d": "updateMarketPhase()", +"12432fee": "canSendWebGifAmount()", +"124442be": "approveIncrease(address,uint256)", +"1244861e": "addTokenData(uint256,string,string)", +"1245c653": "currentDrop()", +"1245e347": "teamWalletAddress()", +"1245f45e": "getRunningAuctions()", +"12460fdd": "confirmCeilingRaise(bytes32)", +"12468cc5": "getWifiPwd(string)", +"12474435": "unfreezeAwardedTokens(address)", +"1247caf4": "ChangeFounderMulSigAddress(address,uint256)", +"1248b101": "claimDay(uint256)", +"12491ad9": "ReverseRemoved(string,address)", +"1249209e": "returnExcess(address)", +"12494160": "isHolder()", +"12495a5d": "ContributionWallet(address,uint256,address)", +"1249c58b": "mint()", +"1249d3b8": "isEcoAllocated3()", +"124abb0a": "_checkAndCallSafeTransfer(address,address,uint256,uint256,bytes)", +"124b0939": "afterCallBack()", +"124c27a9": "addPrize(uint16,address,uint256,uint256,uint256)", +"124c2dde": "executeBet(address,address,uint256)", +"124c32a1": "enter(bytes32,bytes8)", +"124cf830": "isSecondaryOperator(address)", +"124cfc8c": "beneficiaryOf(uint256)", +"124d3396": "releaseICO()", +"124eaee6": "Identity()", +"124f0b31": "rewardDecimalPercentByTime(uint256)", +"124f2418": "deleteBytes32Value(bytes32)", +"124fc7e0": "increaseSupply(uint256,address)", +"124ff29b": "getAyantDroitEconomique_Compte_5()", +"12504109": "getLast24hSendingValue(address)", +"12508ea4": "play(uint256,bool)", +"1250ca3d": "getUserPaybackRate()", +"12511c14": "transferEnable(bytes20)", +"12514bba": "transfer(uint256)", +"12529d22": "getRank10()", +"1252aadb": "EightBitToken()", +"1252cc33": "processTickets()", +"125385f2": "COLOR_GREEN()", +"1253b82f": "travelPrice()", +"1254e64d": "transferEthers(address,uint256)", +"1254f0dc": "startRate()", +"12555df2": "zasxzasxqaqq()", +"12568c24": "blanceOf(address)", +"125716d6": "getContractStatus(address)", +"12571a33": "migrateInternal(address)", +"12582c1a": "setAdminMode(bool)", +"12592381": "incomeAllocation()", +"12599d3f": "GlobalEnergyDigitalChain()", +"1259c00d": "stampIndextodissolved(uint256)", +"125b8f06": "isInNextGeneration()", +"125bfb66": "claimToken(address,address,uint256)", +"125d5d71": "startEpochTimestamp()", +"125e527e": "Ether()", +"125f67e7": "SunriseCoin()", +"126004b8": "deleteRole()", +"12600aa3": "concatStrings(string,string)", +"1260c19a": "showInterval()", +"12610b5b": "pendingEditionsOf(address)", +"1261795d": "withdrawGas()", +"126262a3": "init(address,address,address,address,address,address,address,address,address,address,address,address,address,address)", +"1262d6be": "fortnightsFromLast()", +"1262eb73": "queryPlayer(uint32)", +"12630012": "LEOToken()", +"12635cd8": "I_store_ETH_to_contract()", +"12635d26": "getTotalWeiContributed(uint16)", +"1264299a": "endPresaleTime()", +"126596e7": "ownerSetCallbackGasPrice(uint256)", +"12660306": "getLogos()", +"1266cae2": "setCrowdsale()", +"1266d5f9": "getWitnessesCount()", +"126702a0": "DOW_TUE()", +"12671fb4": "balanceAirDropToken(address,address)", +"12675713": "getTestekTokenIssuance(uint256,uint256)", +"1267961b": "ERC777BaseToken(string,string,uint256,address[])", +"12686aae": "transferLocked()", +"1268cb71": "XBPToken()", +"1269359a": "enableWallet(address)", +"126a04b5": "transferFromSGNToken(address,uint256)", +"126a710e": "dnsrr(bytes32)", +"126af4af": "tokensContractBalance()", +"126b12e7": "initICO()", +"126b6e17": "downX(uint256)", +"126b85e7": "addLevelQuest(address,uint256)", +"126c1232": "addPanelist(address,address)", +"126c13c8": "toldYouSo(bytes32)", +"126c27b5": "setETHAssets(address)", +"126d20f1": "getBestPromouter()", +"126d5b83": "getPoolAmounts()", +"126d9882": "updateLogoFee(uint256)", +"126eac43": "getContribution(address,address)", +"126f992c": "forceOff()", +"126fb2a3": "getCurrentRoundPrizePot()", +"126fbb3a": "removeFunds(uint256,uint256,uint256,uint256)", +"127043c3": "feesRate()", +"12706ccd": "NIGIZ()", +"12709b90": "SuddenDecayingTokenFunction()", +"1270a4d3": "setMinSale(uint256)", +"12711ae3": "wtech2()", +"127157c3": "activateDevice(address)", +"1271bd53": "upgradeContract(string,address)", +"1271f09a": "approve(address,uint256,address)", +"12724689": "addToTokenTransferDisallowedList(address)", +"1273f6e7": "BIGSELL()", +"12746e9f": "changeParam(uint256,uint256,uint256)", +"1274c3f3": "announcementHash()", +"127616f9": "releaseMultiWithStage(address[],address)", +"127714c7": "getBudget()", +"12778e8d": "addDistributionContract(address)", +"1277b0c9": "createBid(bytes32,uint256)", +"1277b4f1": "createCandy(string,uint256)", +"1277e24f": "payOneTimeFee()", +"127810bc": "getCompany()", +"12783f2f": "VESTING_TIMES()", +"12788f97": "B0xPresale(address,address,address)", +"1278cec4": "WinnerPaidEvent(address,string)", +"12795d7f": "putSaveData(string)", +"127a0dd9": "setJypcBonus(uint256)", +"127afec6": "MakerTransferredAsset(address,uint256)", +"127b0901": "delayAutorelease()", +"127b0efd": "gauntletRequirement(address,uint256,uint256)", +"127b4da5": "getAmountForCharger(uint256)", +"127c3d45": "getUserLibrary()", +"127cc6bf": "medalTotalSupply()", +"127cf0b9": "multiInvokeWith3Args(address,string,address[],address[],uint256[])", +"127dd730": "donationNum()", +"127e499c": "firstBonus()", +"127eca3f": "totalDividendPayments()", +"127ecfa9": "getMinReward(string)", +"127effb2": "operatorAddress()", +"127f0b3f": "roundCount()", +"127f1068": "pieceprice()", +"127f2d2c": "shutForDai(uint256)", +"127f3374": "calculateselfOdd()", +"127f902f": "addressFundReserve()", +"12800751": "determineWinner(uint256,uint256)", +"12806653": "setMaxContributionPhase2(uint256)", +"1280db73": "donate(address,string,string)", +"12810fd8": "Lesson_6(address,uint256)", +"1281311d": "buy(uint256,uint256,uint256,uint256)", +"1281619b": "SeeleTokenLock(address,address,address)", +"12818f0c": "withdrawNac(uint256)", +"12819817": "setXauForGasCurrator(address)", +"1281d056": "test_threeValidEqBool()", +"12821b5e": "sellingPrice()", +"1282467d": "checkTip(uint8)", +"12826f30": "isEthereumBased(address)", +"1282cc2a": "getNumContributionsDID(address,address)", +"1283c377": "FixedCapSampleCoin()", +"1283e328": "bonusOf(address)", +"128424a7": "sort(address[])", +"1284c8f5": "transferSafety()", +"1286d9e8": "setRowColors(uint16,uint8,uint256,uint256)", +"1286e393": "removePartOwner(address)", +"12874688": "setMinBid(uint256)", +"12883df0": "lcSold()", +"12889639": "settleFeePub(address,address,uint256,address,uint256)", +"1288c42a": "Prism()", +"12892b7f": "setblnpereth(uint256)", +"128952e4": "addElements(bytes32[])", +"128a0b2c": "approveFund(address,bytes)", +"128a1c74": "createUpdateRisk(bytes32,bytes32,uint256)", +"128a3765": "clearTransferInsToken(address)", +"128b265f": "addBridgeTokenFeeReceivers(uint256)", +"128b3bc0": "_withdrawFunds(address,uint256)", +"128bad8d": "MFL()", +"128bfcae": "startStake(uint256,uint256)", +"128c785f": "ICACOIN()", +"128cf7c5": "SEC_PER_ETHER()", +"128d7215": "addRequest(string)", +"128d9281": "checkTransferFunction(address,address,uint256)", +"128e0423": "getSenders()", +"128e1329": "offerHelpUsingBalance(address,address,uint256)", +"128e1af0": "withdrawFromPot(uint256)", +"128e3761": "firstTeamContributorId()", +"128e87e0": "tokensAfterCrowdsale()", +"128eb401": "expiredCrates(address)", +"128ef181": "ticketMag()", +"128f04e7": "importPresaleBalances(address[],uint256[])", +"128f060a": "perETH(address)", +"128f8e04": "admin_active_payable()", +"12901f26": "purchaseTokens(uint256,address,address,address,address,address)", +"12907e08": "lastBlock_f6Hash_uint256()", +"1290a2b4": "rightSharePriceRateOfIncrease()", +"1290aed9": "AcornPotSplit(uint256)", +"12919d90": "setMoneyManager(address)", +"1291ebdd": "getAllowedTokenAt(uint256)", +"1292de0b": "sendTokensTo(uint256,address)", +"129441cf": "_cMoney(uint256,uint256,uint256,uint256)", +"129484b6": "changeFeeRecipient(int256,int256,int256,int256,int256,int256)", +"1294d4db": "assignReferral(address,address)", +"12950877": "setOrCacheValidityBond(uint256)", +"12958f1c": "getUserName()", +"1296830d": "transferPreSigned(bytes,address,uint256,uint256,uint256)", +"1296aef3": "timeInvestInMinute()", +"1296d47d": "signedApproveHash(address,address,uint256,uint256,uint256)", +"1296ee62": "transferAndCall(address,uint256)", +"12973afd": "isNotDuplicateTreasure(bytes32)", +"12974218": "tokensRemainingForSale()", +"12975687": "mediaTokensDecimalUnits(address)", +"12987c98": "large()", +"129893dc": "ParameterizedToken(string,string,uint256,uint256)", +"129932d5": "_spto(uint256,uint256,uint256,uint256,address)", +"1299c8fe": "GetAccountIsFrozenByDateCount()", +"1299f11e": "updateNextWindowAdjustmentRatio(int256,bool)", +"129a1a37": "Dissolved(address,uint256)", +"129a5b99": "getPropertyStatus(bytes32,address)", +"129a75a7": "viewSecondBatchOfContractState()", +"129a8d25": "LogKYCConfirmation(address)", +"129a9e99": "enterEvent(uint256[12])", +"129b873b": "addVote(uint256,address)", +"129bc044": "unlockAccount(bytes32)", +"129caa18": "haltICO()", +"129cf7cb": "ForeignBridge(uint256,address[],uint256)", +"129ed395": "accountLock(address)", +"129f80fb": "rewardAirdropMany(address[],uint256[])", +"12a00b21": "calculate_base_mining_reward(uint256)", +"12a0421c": "safeWithdrawal2(address)", +"12a06c35": "NFF()", +"12a0b32c": "transferRestrictedStock(address,uint256,uint256)", +"12a0b3ba": "VOLOP(uint256,string,string)", +"12a12106": "setPayoutAmount()", +"12a15b91": "BlocktorialTestToken()", +"12a187f3": "toggleTransfer(bool)", +"12a1c2f2": "Mether()", +"12a203c3": "getFinalAnswerIfMatches(bytes32,bytes32,address,uint32,uint256)", +"12a2716d": "affirmations()", +"12a3234c": "unlockAdvertisement(uint256)", +"12a3bbaf": "_addHorse(bytes32)", +"12a3cda2": "TokenOMG(uint256)", +"12a3ff95": "endPrivatesale()", +"12a49007": "p_setInvestorFundPercent(uint256,uint256)", +"12a4b899": "claimPresaleTokens()", +"12a63964": "Releaseable(address,uint256)", +"12a71ee0": "setBiddingAuctionAddress(address,address)", +"12a77dbd": "getLockedToken(address,uint256)", +"12a7b914": "getBool()", +"12a837b4": "transfer(address,address,uint256,bytes)", +"12a8c1ed": "testAllocatesTokensInSale()", +"12a916f9": "getPlayerWallet()", +"12aa2c0d": "getMinBal()", +"12aa5360": "addAlpha(string,string,bytes32)", +"12aaac70": "getKey(bytes32)", +"12aaafa7": "amount_milestone()", +"12ab7242": "setupStackDepthLib(address)", +"12abbaaf": "WhosItGonnaBe()", +"12ac18ff": "About()", +"12ac4a2e": "bonuscal()", +"12ac5bad": "GetContractStateCancelledByTenant()", +"12ac9b46": "_escrow(address,uint256)", +"12ad8bfc": "registerSecret(bytes32)", +"12ad8d20": "CryptoElections()", +"12addb94": "saleEnd4()", +"12ade015": "oneTokenInFiatWei()", +"12aef8c3": "tokensForSale()", +"12afbc78": "getOwnedPointCount(address)", +"12afef2e": "Reservation(address,address,address,uint256,uint256,uint256,uint256)", +"12b0b3ca": "transferFromToICAPCallGas()", +"12b0b627": "splitStr(string,string)", +"12b0d309": "restrictTokenTransfer(address)", +"12b1cc95": "createHash(uint256)", +"12b1f8a9": "removeLand(address,uint256)", +"12b27e3e": "miningActive()", +"12b2ecc6": "init_bounty_program(address)", +"12b392ee": "admin_profit()", +"12b3a445": "getERC721Nfts(uint256,address)", +"12b48d3c": "CountryCoin()", +"12b495a8": "delta()", +"12b4ba71": "emitTokenStateUpdated(address)", +"12b58349": "getTotalBalance()", +"12b62a07": "playerWinHeroes(address)", +"12b68263": "creditDragon(address,uint256)", +"12b68286": "whitelistMinTok(uint256,address)", +"12b6ef5c": "Decision(uint256,address,address[],uint256[])", +"12b706a7": "buyPreSale(uint256)", +"12b8854b": "redeemNewTalentsAndPartnerships()", +"12b8ca5e": "_isDiamondOutside(string)", +"12b93ec6": "ChallengeContract(uint256,string,uint256,address,address)", +"12b97812": "addOffering(address,bytes32,address,uint256)", +"12bae48d": "StartDate()", +"12bb05ff": "claim1Ply(uint64,uint64,uint64,uint64,uint64)", +"12bb65ca": "MANHATTANPROXY7THAVE()", +"12bb6df7": "LogRewardPicked(uint256,address,uint256,uint256)", +"12bb9d3e": "RefundableCrowdsaleWithCommission(uint256,address)", +"12bc74e2": "withdrawBondReward(address)", +"12bcc858": "claimTokensInBulk(address[],uint256[])", +"12bd2cea": "setImageDataCloud(uint256,uint256,string)", +"12bdc81b": "freedWinPoolForThirdStage()", +"12bddc9c": "changeRules(bool,bool,bool,bool,bool)", +"12be78d1": "freeze_pool(bool)", +"12bea6eb": "kickStartICO(address,uint256,int256)", +"12bff72f": "doTransferOwnership(address)", +"12c0af96": "getVoterOnElection(address,address,uint256,address,address)", +"12c0d1ea": "changeLuck(uint32)", +"12c1083d": "distributing()", +"12c2302e": "DocumentRegistered(uint256,string)", +"12c24128": "FootStarCrowdsale()", +"12c27c64": "contrp3d()", +"12c3ee37": "setStorageControllerContractAddress(address,address)", +"12c3f754": "modificationFee()", +"12c3f757": "soldiersinfo(address)", +"12c45f64": "maximumTokenSupply()", +"12c55a9b": "openDeposit()", +"12c59488": "setAddress(address,address,address,address,address)", +"12c61a20": "initambassadorsbags()", +"12c6651c": "MoralityAI()", +"12c6ac16": "Reconcile(address,uint256,uint256)", +"12c723e1": "createDeposit(uint256,uint256,bytes)", +"12c77207": "getLLV_edit_1()", +"12c7df73": "rewardValue()", +"12c8052f": "won()", +"12c82894": "compute(string,string,uint256,uint256)", +"12c82bcc": "sendRobust(address,uint256)", +"12c85095": "getRestrictedTokens(uint8)", +"12c89869": "getHeroCurrentPrice(uint256)", +"12c96f5f": "ZAYAToken()", +"12c99005": "startPREICO()", +"12cacbb5": "inPresaleMode()", +"12cc08f2": "getPackageReleaseHashes(string,uint256,uint256)", +"12cc1abc": "set_exchange_rate_in_eth(uint256)", +"12cc9dd3": "usdId()", +"12ccb421": "payPlatformIncomingTransactionCommission(address)", +"12cd2101": "transfered(address,uint256,bytes32[])", +"12cd24be": "funder(address)", +"12cd57c9": "inputauction(uint256,address,uint256,string)", +"12cdc37a": "OrderTake(uint256)", +"12ce73dc": "callFor(address,uint256,bytes)", +"12cef27a": "secondWallet()", +"12cf0ec8": "balanceOfAt(address,uint256,int256)", +"12cf85c8": "s26(bytes1)", +"12cf8a10": "getType(uint32)", +"12d00c2e": "soloWithdraw(uint256)", +"12d0e65a": "changeBeneficiaryAddress(address)", +"12d1456f": "requiredExpIncreaseFactor()", +"12d1612a": "closeContest(string)", +"12d1b19a": "poissonData()", +"12d2c9a5": "isWhitelistedInvestor(address)", +"12d43a51": "gov()", +"12d60f86": "fillUpAllowance()", +"12d6468d": "mathTransfer(address[],uint256[])", +"12d67c5f": "getLastDataLength()", +"12d69389": "maxUint32()", +"12d6c704": "getTMul(uint256)", +"12d72e99": "deregisterProduct(uint256)", +"12d96887": "getRollUnder()", +"12da6e2b": "fourthTime()", +"12dc006a": "racer_index()", +"12dc34a0": "disableSetTransferable()", +"12dc5ca0": "CrowdsaleToken(address,string,string,uint8,uint256,bool)", +"12dc6449": "test_remove_head()", +"12dc8c4b": "InitialTokensAllocated(uint256)", +"12dc9a5b": "assert(bool,bytes)", +"12dcb676": "remainPackage()", +"12dd4763": "_transItem(address,address,uint256)", +"12dd8700": "CevacFund()", +"12dd9b94": "addBet(address,address)", +"12de10fd": "setMinimumFundingLimit(uint256)", +"12de8a12": "addReferenceParentWineryOperationByRegulator(string,string,uint256,string,string,int256)", +"12df172d": "setScale(uint256,uint256)", +"12df2f49": "serviceStation()", +"12df9b63": "AddContact(bytes32,address)", +"12e135a0": "setBuyCommission(uint256)", +"12e228fd": "investorAddress()", +"12e26673": "maxMSC()", +"12e36530": "addMerkleTreeRoot(bytes32,bytes)", +"12e382b4": "lockFunds(address,uint256)", +"12e43d92": "AVAILABLE_PRESALE_SUPPLY()", +"12e43da5": "kycConfirmer()", +"12e530aa": "Hacksig(uint256)", +"12e56faf": "activeTransfer()", +"12e57fdc": "MONEYTREETOKEN()", +"12e5b7fa": "GetOwnertName()", +"12e6414e": "getCampaignStartDateById(bytes32)", +"12e753e1": "modifyContact(address,string)", +"12e7b2ba": "vanilAddress()", +"12e8e2c3": "setPlatformFee(uint256)", +"12e8ebdf": "unpauseWithdrawal(address,address)", +"12e905b0": "selfAddress()", +"12e9d888": "removeSkillFromSale(uint256)", +"12e9db2d": "get_deposit_balance(address,uint256)", +"12ea0b0e": "INV()", +"12ea7d20": "BoSToken()", +"12ea965d": "icoStartBlock()", +"12eabe7e": "approuver(address,uint256)", +"12eacf4b": "fundInsurance()", +"12eba773": "isAdvisorsTokensFirstReleased()", +"12ebca9c": "get_admin_list()", +"12ecaa62": "freezeAccountOf(address)", +"12ef900b": "getMaxLoanAmountAllowedByLtd()", +"12ef934b": "nCryptClubShare(address,address,address,address)", +"12efe5ad": "minDonationInWei()", +"12effc32": "rejectTransfer(uint256)", +"12f05418": "campaignCanceled()", +"12f0f9df": "createBountyContract(address)", +"12f11ed3": "getDenyPremium(bytes32)", +"12f17735": "calculateEntryHash(address[],uint256[])", +"12f20e2a": "withdrawFundsToOwner(uint256)", +"12f26140": "setWhitelistContract(address)", +"12f2b838": "updateReservedWei()", +"12f31b5f": "firstTeamWithdrawal()", +"12f3d1e0": "discoverResources(uint256)", +"12f4cbd9": "Vote(uint8)", +"12f53950": "refunded()", +"12f58b43": "RATE_CHANGE_THRESHOLD()", +"12f62bd6": "updateProperties(uint256,bytes)", +"12f63d96": "lockedByUser(address,address)", +"12f6e641": "okamiMaxPurchase_()", +"12f7cf74": "approve(address,uint8,uint8)", +"12f7fb6f": "RocketCoins()", +"12f8ae31": "getRedeemEst(address,uint256)", +"12f8b3db": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", +"12f95b16": "GIC()", +"12fa6feb": "ended()", +"12fa769f": "paidAmount()", +"12fb5b67": "purchaseTokensInICO(uint256,address)", +"12fc41a1": "MyScheme()", +"12fc848e": "_randomLucyAddr()", +"12fca967": "contract6function2()", +"12fd67ba": "getValidations()", +"12fdf767": "FuseaNetwork()", +"12ff2ad9": "Consent(address,address)", +"12ff658f": "DmitryCoin()", +"12ffb59b": "checkIcoStatus()", +"12ffe4df": "_decreaseApprovalAllArgs(address,uint256,address)", +"130067ca": "updateCostContract(address)", +"1300a6d1": "timeLeft()", +"1300cc41": "freezeTransferToken()", +"13012a3b": "doMap(address,string)", +"13019a5e": "EtherTool()", +"1301b876": "EmbiggenToken(uint256,uint256,string,string,uint8)", +"1301c4aa": "CryptoniumCoin()", +"1301ee02": "transferringETC(address)", +"1302188c": "getLastDataHash()", +"13028f44": "addUserRewardPayouts(address,address,uint256)", +"1302d03a": "setWhitelist(address,uint256)", +"130346d2": "icostart()", +"13037d22": "xioniCoin()", +"1303a484": "commitment()", +"13040bc1": "tokensFinalized()", +"13045155": "MONTHLY_INTERNAL_VAULT_CAP()", +"130497ac": "getCountryList()", +"1305413e": "BetMade()", +"1305d2de": "changeAllCosigners2(uint256,address[],bytes,bytes,bytes,bytes)", +"13063180": "doEscape(uint32)", +"13065fed": "MoneroClassic()", +"130766c5": "enterLarge()", +"1307d2d7": "EARLY_CONTRIBUTOR_STAKE()", +"1308c324": "setAddrForPrivilege(address)", +"1308d2c2": "gauntletRemovable(address)", +"1308e82d": "L19_PALToken()", +"1308e9e0": "startSweepStake()", +"130985f4": "GetcrowdsaleContract()", +"1309a563": "IsPaused()", +"1309d3bd": "RAVI_ALLOCATION()", +"130a39b1": "removePersonalTokenLock(address)", +"130bcaa2": "removePersonalLockMultiple(address[])", +"130c0e88": "advisoryVUPDestination()", +"130d04d0": "companyHolding2y()", +"130d7906": "register(uint32)", +"130d993d": "lifeFactor_iii()", +"130e54a1": "prizeshow(address)", +"130fbba4": "setPixelToken(uint24,uint256,uint24)", +"13110199": "twentyEndTime()", +"13110874": "preSaleFirstEtherCap()", +"1311457c": "transferToken(address[],address,address,uint256)", +"13114a9d": "totalFees()", +"1311b45e": "setGasForCMT(uint256)", +"1311c860": "KCoin()", +"131284c8": "FUNDING_START_TIMESTAMP()", +"13137731": "testThrowsUpdateLatestRevisionNotUpdatable()", +"1313c739": "getBidForAuctionByIdx(uint256,uint256)", +"1313f631": "Register(bytes4,bytes32,bytes32[8])", +"1314e272": "addAddressesToOperators(address[])", +"13151981": "to()", +"13155455": "legacyToken()", +"13163d53": "CTO_Signature()", +"13169ab7": "rewardManual(address,uint256)", +"131719e1": "testtop()", +"13174093": "bountyAccount()", +"13175b40": "_emitUserCreated(address,address,address,address,uint8[],uint256,uint256[],uint256[])", +"13178704": "ContributeToPool()", +"1317b559": "buyshares()", +"1318b88c": "GetPlayer_FromID(uint32,uint8)", +"1318cd2d": "NameInt()", +"13193936": "GEMERAToken(address[50])", +"13194658": "MossCoin(uint256)", +"1319b880": "borrowToken(uint256,uint256,address,address,bool)", +"131a0680": "store(string)", +"131ad118": "avaliableBets()", +"131ad146": "getWorksStatus(bytes32)", +"131b0563": "EITARD()", +"131b81ad": "transferExecutorOwnership(address)", +"131b9c04": "getEarnings(address)", +"131bb0d6": "ethCostTotal()", +"131be36c": "preICOregulations()", +"131c4305": "SoundcoinsAddress()", +"131d2873": "isContractFrozen()", +"131de517": "getKeyBlockNr(uint256)", +"131e03ba": "withdrawOtherEDEX(address)", +"131e1816": "setRetiro(address)", +"131fa183": "createBoard(address)", +"132002fc": "votingDuration()", +"1320f614": "callServer(string,uint256)", +"1320f838": "modify_ICOStartDate(uint256)", +"1321d291": "enact_liquidation_greater_equal(address,uint256,uint256)", +"1321ea19": "mulTransfer(uint256,address[])", +"13220305": "doTransferOther(address,address,address,uint256)", +"13222d0a": "payoutsETH(address)", +"1322311b": "LoanBit()", +"13224fc5": "missingTokensFallback()", +"1322e9d0": "checkPayoutReadyState()", +"13233cd9": "appointAgent(address)", +"13242733": "getRoundOfSixteenTeams(uint256)", +"1325c502": "debugSetNow(uint256)", +"13270bb8": "authorizedCount()", +"1327290d": "isAddressActivated(address)", +"1327487f": "activation(uint256,address)", +"1327d383": "hybridizations(uint256)", +"1327d3d8": "setValidator(address)", +"1327fbe5": "getPanda(uint256)", +"1328ec9b": "getAvatar(uint256)", +"1328fd8f": "getDetails(string)", +"13299604": "getWallet()", +"132ac1dd": "itemsForSaleCount()", +"132ae5e9": "numInvestors()", +"132c3bea": "setContractPrice(uint256)", +"132c8641": "given()", +"132d05e5": "_distributeJackpot()", +"132d807e": "upgradeTo(address,address)", +"132df661": "isPrePreSale()", +"132e4f3c": "fail(uint256)", +"132e63ba": "PRICE_8()", +"132e8bee": "batchWithdraw(uint16[])", +"132ff514": "SQUAD_SIZE()", +"133086a5": "SphereTokenFactory()", +"1330a21f": "calulateRate()", +"1332143c": "getGoldTransactionsCount(string)", +"133252a6": "grantToken(uint256,address)", +"13326f43": "transferTokenToSender(address,uint256)", +"1332dd07": "_isFreezeList()", +"13331391": "buyPreIco()", +"133323c8": "setLevToken(address)", +"13332c6c": "myVoteFactory()", +"133369c6": "GetRigData(uint256)", +"1334a5e2": "eventCallback(uint8,address,address,uint256)", +"13352334": "payOwners()", +"1335461c": "joinGameWithBalance(uint256,address)", +"13357914": "from(uint256)", +"1335b56b": "GasSell()", +"1335b598": "get_ptc_count(address)", +"1335ff36": "createEventAndMarketMaker(uint256,uint256,uint8,uint32,address,uint256,uint8,uint16,uint256)", +"13368364": "getMarketPriceOracle(uint256)", +"1336a756": "previousPeriodRate()", +"1336cff6": "isAccountFreeze(address)", +"13373786": "powerBalanceOf(address)", +"1337d6ed": "sendFlower(address,bytes32,string,bytes16,uint256)", +"13381fbf": "registrantsPaid(address)", +"1338736f": "lock(uint256,uint256)", +"1338c9e9": "SspStandardToken(uint256,string,uint8,string)", +"1338f493": "isClose()", +"13390cf2": "VASTToken(uint256,string,string)", +"133922ad": "setCompanyURI(string)", +"13392662": "totalTokensOfThisContract()", +"1339305f": "createRandomZombie_FreeZombie()", +"1339870e": "GetOrderBookScreen(address,uint256)", +"13399d10": "INCRYPT(uint256,string,string)", +"1339cba2": "getRemainingDaysToSecondPhase()", +"133a473e": "sleep()", +"133ae30b": "transferFunds(uint256)", +"133af8b3": "getIcoTokenHoldersAddressesCount()", +"133b5ba9": "honestisFort()", +"133c5ff5": "getAdminAccounts()", +"133cbe3a": "setLatestToNow(address)", +"133d10e6": "HPCToken()", +"133d27e1": "partner1_address()", +"133d2afe": "myfast(address,uint256)", +"133d5d4e": "setMultisignWallet(address)", +"133d8555": "withdrawTokenFromElc(address,uint256)", +"133e3f71": "getOld_BalanceOfr(address)", +"133f44dc": "removeVerifiedInvestor(address)", +"133f50f5": "checkUserExists(address)", +"133f6ac0": "earlyExchangeRate()", +"133f8a2f": "getStockReleaseTime(address,uint256)", +"133fe629": "calculateCuts(uint256,uint256)", +"134000c0": "getGrid()", +"134087a2": "gameLogic()", +"1340d09a": "isPoint(uint256,uint256)", +"13413858": "isFreelancerAvailable(address,address)", +"13414a4e": "doDisputeMemoryWrite(uint256,bytes32,uint256)", +"13419be3": "LifeFactor_v()", +"1341b33c": "releasableViewOrSend(address,bool)", +"13424bf0": "unpause_4()", +"13426d87": "addEmitter(bytes4,address)", +"13429e31": "newPrice(uint256,uint256)", +"1342c0e8": "VZT_WALLET()", +"1343a35f": "sendLoan(address,uint256)", +"1343ed05": "isStoreSet(string)", +"134538f3": "testRemoveGains()", +"134562a6": "SimpleToken(uint256)", +"13463751": "ThroneClaimedEvent(uint256)", +"13468929": "signedApproveCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"1346c20e": "canBuy(address,uint256)", +"134741f7": "SimpleERC20Token(uint256)", +"1347b972": "setICOWeek2Bonus(uint256)", +"1347b9ae": "CommonToken(address)", +"1348ab3a": "setRequiredTotal(uint256)", +"1348fdcc": "changeStarttime(uint256)", +"1349c273": "ClearExpiredFreezingEvent(address)", +"1349f5ec": "_provideChars(address,address,uint32)", +"134a04ea": "breedingDB()", +"134a153a": "buyVirtTokens(address)", +"134a5330": "updateTokenPrice(int128)", +"134abf66": "sendVesting(uint256)", +"134b684f": "SafeGiftTokens(uint256,string,string)", +"134c021b": "divForTransfer()", +"134c1a28": "L2Cash(address,address)", +"134c91be": "setFile(string,string,uint256,string,string)", +"134ccdfb": "IBIZACASH()", +"134dc5ad": "setManagerAddress(address,address)", +"134e3917": "setM2(address)", +"134f1893": "goWiner()", +"134fd7d0": "_convertToWei(uint256)", +"134ff97e": "startGame(uint32,bytes32)", +"1350a997": "AccessGrant(address)", +"1350acbd": "PRESALE_MAX_ETH()", +"135128c2": "CounterPartyDeposit()", +"13517fea": "maxCost()", +"1351cf51": "setAuthorizedAddress(address,bool)", +"135217e7": "requires_depth()", +"1352faec": "setReleaseDate(uint256)", +"1353e7b3": "purchaseMetal(uint256,uint256)", +"1356c5dd": "raceBet(uint8)", +"13574cd2": "calculateKnowledgeBuy(uint256,uint256)", +"1357b862": "contractSolidStamp()", +"1357e1dc": "totalPaidOut()", +"13582b6e": "HIDDEN_CAP()", +"135859c0": "distributeICOTokens(address,uint256)", +"135892bf": "FundUpdated(address)", +"1358937f": "TEAM_HOLDER()", +"13590153": "ManualChangeEndDate(uint256,uint256)", +"1359844a": "winNetworkFeeBasisPoints()", +"13598b71": "LightningEthereum()", +"1359cb2c": "getCommissionWithdrawn(uint32)", +"1359fc91": "setPublicKey(bytes32,bytes32,bytes32,bytes32)", +"135a2474": "joysoWallet()", +"135bada6": "setDungeonStatus(uint256,uint256)", +"135bf431": "gamerun()", +"135c0701": "purgeAccount(address)", +"135da3c2": "getBal(bytes32,address)", +"135da767": "LennartCoin()", +"135e9ad6": "fulFillTX(uint256)", +"135ec4bd": "AddAppraise(address,string)", +"135ed7bd": "priceRound1()", +"135f01df": "addDocument(bytes16,bytes32,uint8,bytes32,bytes32)", +"135fae64": "getOwnerProprietaryData(uint256)", +"135fc676": "loseHandler(address,uint8)", +"13601234": "checkRejectionRatio()", +"136047ab": "ticketTransferers(address,uint256)", +"13612119": "distribToken(address)", +"136125a7": "GoldFiatFee(string)", +"13618756": "readnationnameXteam()", +"1362180e": "setItemName(uint256,bytes32)", +"13622274": "prealocateCoins()", +"1362dd32": "testinx()", +"1364326c": "countVotes(uint256,uint256)", +"13643605": "crowdsaleTarget()", +"136439dd": "pause(uint256)", +"13651124": "WithdrawAmountFromBankAccount(uint256)", +"136512c9": "_checkPixelRight(uint256)", +"13653b24": "RECFToken(uint256)", +"1365e6a3": "REBELCOINSupply()", +"1366b970": "test_transfer_token_to_contract()", +"1367641e": "releaseAdvisorTokens()", +"1367944b": "getIdByName(string)", +"13683532": "getAccountCap(uint256)", +"1369f6fd": "getCurrentOwnerBallence()", +"136aa762": "Remmittance(uint256,uint256)", +"136ac4bf": "WillTestament()", +"136af582": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"136b4fea": "getActiveFish(uint256,uint256)", +"136bcbab": "Windlord()", +"136c545c": "transferToProjectWallet()", +"136c8744": "WBSToken()", +"136cf5c1": "deleteVestingFromStorage(address)", +"136d1057": "accountBalanceCount()", +"136d5a59": "giveKudos(bytes32,uint256)", +"136d6a39": "getBalanceByAddress(address)", +"136dbbab": "revenueFraction()", +"136e1949": "buyFunderSmartToken(string,string)", +"136e1c45": "suspendGame()", +"136ede68": "verifyCopieExecutoire(bytes32)", +"136ef18a": "allowTransfers(address[])", +"136f1016": "hasBet(address)", +"136f2bf4": "allowToken(address[])", +"136f5b5a": "ordersCanMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", +"136fa2d7": "rateSeedStage()", +"1370128e": "free()", +"13711a31": "presale_allocation()", +"13714545": "GATEL()", +"137157c0": "changeBlock(bool)", +"1371dab9": "whitelisters(address)", +"13730838": "getCanvasPainters(uint32)", +"13734a9f": "setClaimDividendPercentage(uint256)", +"13737db2": "TiValueToken()", +"13740cf3": "isTrigger()", +"13748a40": "Withdraw_2()", +"1374b22d": "proposalExists(uint256)", +"1374eb6f": "getLockByIndex(address,uint256)", +"1375111e": "returnrandom()", +"13754f9a": "notUpgradableInStore()", +"13765838": "deposit(uint64)", +"13767204": "AirDropRedeemAFTK()", +"1376f2ce": "setCrowdsaleStartDate(uint32)", +"137759df": "ammendReceivedLand(uint256,uint256)", +"13776ba1": "buyPLATCards(address,uint256,uint256,uint256)", +"1377900b": "PreICODayOneCents()", +"1377ae65": "_getEarnings(address,address,uint256,uint256,uint256)", +"13788651": "test_oneValidEqBytesNoLog()", +"137935d5": "totalGuaranteedCollected()", +"1379c6e0": "getICOEndDate()", +"137a1464": "ifEmergencyStop()", +"137a3fa7": "transferPayment(uint256,address)", +"137b3bcd": "getBounsByAmount(uint256,uint256)", +"137b763d": "SetReferrer(address,address)", +"137b8721": "getTierWhitelist(address,bytes32,uint256)", +"137baa2a": "BigToken()", +"137c1feb": "buyCommonTTMByETH(uint256,address)", +"137c638b": "getExtraGas()", +"137ce088": "TokenReserveMinted(uint256)", +"137ce8e3": "HARD_CAP_USD()", +"137d7026": "abiEncode(bytes,bytes,address[])", +"137db23c": "updateWhitelist(address,address,bool)", +"137e37d9": "accountGet(address)", +"13801995": "getHopefulId(address)", +"13819313": "OTTToken()", +"1381e400": "cancel(uint32)", +"13823365": "setOneTokenInWei(uint256)", +"13827950": "getShareholderDB()", +"1382a652": "isTrustedShop(address)", +"1382e75e": "addUser(uint256,string,string,uint256)", +"13831693": "getLevitatingUnicorns(bytes32,uint64)", +"13844e60": "totalOVCSold()", +"13845d2f": "creation()", +"138495de": "SimpleToken(string,string,uint256,uint256)", +"1384dc12": "endTx(uint256,uint256,uint256)", +"1385053e": "FlyCareTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,uint64[5])", +"1385625d": "MintTimelocked(address,uint256)", +"13857c1a": "foundersFundMultiplier()", +"13859f46": "_metadata(uint256)", +"1385d24c": "toggleContractActive()", +"138665ff": "testJoin()", +"13869333": "RealityCheck()", +"1386a244": "getSettingAddress(string)", +"1386dc2d": "orgName()", +"138716e8": "root_domain()", +"13872f8d": "test_againstFor()", +"13877deb": "FBLFund()", +"1387c80b": "test_invalidRuleChange()", +"1388483d": "BLING()", +"13887592": "multilocked()", +"13888565": "surplus()", +"13889727": "setHeroName(uint16,string)", +"138a7084": "_4_owner()", +"138a886e": "testGetTransactionDetails(bytes)", +"138acb80": "View_MediatedTransaction_Info(uint256)", +"138b3ab1": "numPlots()", +"138b806c": "addMultipleAddresseseToWhitelist(address[])", +"138bdf1b": "simpleTest(address)", +"138cc941": "testErrorTransferToRejectAuthority()", +"138e2317": "IcoTokenMock(address)", +"138e8da1": "getIncreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", +"138efd00": "_createTot(string,address,uint256)", +"139020d1": "deedByIndex(uint256)", +"13902e9f": "initBonusPeriod(uint256,uint256,uint256,uint256)", +"13905905": "addWhiteListedAddressesInBatch(address[])", +"13907d22": "abrirDoacoes()", +"1390b247": "getNbSellOrder()", +"1390df6c": "oldXPAAssets()", +"1391697d": "weiRound1()", +"13916c2e": "bidOnCraftAuction(uint256,uint256)", +"1391c5f8": "EnddateICO()", +"1391fd60": "raised(address)", +"1391ff43": "fetchVoteInfoForVoter(address)", +"1392c495": "updateItemPrice(bytes32,uint256)", +"13930cf6": "setCurrentVersion(string)", +"13932337": "highTimeBonusLimit()", +"13943033": "RBOC()", +"1394f216": "addProjectManager(address)", +"139654e0": "window2StartTime()", +"13966db5": "mintFee()", +"1397d7ae": "setPI_edit_24(string)", +"1397fdbd": "getShares(address,bytes,int256[])", +"139818a1": "setFrozen(address,uint256)", +"1398bbf7": "getRanking()", +"1398e076": "lotteries(uint256)", +"139949fa": "sAssert(bool)", +"1399cc5b": "UWC()", +"139a667a": "_calcNextPrice(uint256)", +"139b3752": "_batch1_rate()", +"139c7048": "generateTokenAmount(uint256)", +"139ccd1e": "stopCollectSignatures()", +"139cd9d3": "drawnTokens(address,uint256,uint256)", +"139ddefe": "ProposeProposal(bytes32,bytes32,uint256,uint256,uint256)", +"139df200": "getAllMarketsInfo()", +"139e23b5": "getDividendInfo()", +"139f1838": "NoBonustimer()", +"13a070b7": "add_admin(address)", +"13a0c990": "BearTrap()", +"13a110b4": "getMin(uint64[])", +"13a19e1b": "initialCoach(uint256,uint256,uint8,uint256)", +"13a1da40": "tgrSettingsMinimalContribution()", +"13a22af9": "latest_buy_time()", +"13a24744": "BurnupGameAccessControl()", +"13a2852d": "setICOEndTime(uint256)", +"13a30010": "refund2(address)", +"13a396d8": "getRequiredDeposit(bytes)", +"13a3d9a1": "registerDocument(string,string,string)", +"13a460b7": "tourisToken()", +"13a46425": "getNumberOfDisputedStepsProDoctor()", +"13a46827": "fund(address,address,uint256,uint256,uint256)", +"13a4b3bc": "OwnershipRequested(address,address)", +"13a4fd37": "soldTokensIco()", +"13a517bf": "eighthTeamWithdrawal()", +"13a5aac7": "paymentRegularTokensPriority(uint256,uint256)", +"13a5d9e4": "remaingNTRY()", +"13a666a6": "hasReachedSoftCap()", +"13a7070f": "withdrawDeveloperCut()", +"13a7f56e": "internalAllocate(address,uint256)", +"13a8a080": "TokenDemo(uint256,address,address,address,address)", +"13a91cc8": "getVlsTokenAddress()", +"13a927c7": "toggleMatchStartEnd(uint256,uint256)", +"13a92f02": "frozenAccountForLogic(address)", +"13a931dc": "gasForOraclizedQuery()", +"13a9589c": "getSalt()", +"13a9cd8d": "lastDETCWC()", +"13aa48bf": "minePepe(uint256,address)", +"13aa7b6f": "viewUnclaimedDepositDividends()", +"13aa8133": "resolveChallenge(uint256,bytes32)", +"13abdd75": "ecosystemSupply()", +"13ac2bdb": "addNetworkMember(address,bool,bool,bool,bytes32)", +"13ac58bb": "increaseCredits(string,uint256,uint8,address)", +"13acb45b": "calcDoubleBindedBlindHash3(string,address,address)", +"13ad41d8": "getSkill(uint32)", +"13ad9ce1": "getRepMarketCapInAttoeth()", +"13adc129": "MIGG()", +"13ae4522": "token3MstepCAP()", +"13ae457d": "mainCapInUSD()", +"13af4035": "setOwner(address)", +"13afa97a": "readMarketplaceConfigs()", +"13b15b24": "setRoundGap(uint256)", +"13b18640": "participate(uint256,address)", +"13b222ba": "getMyPoohs()", +"13b2663b": "cash_received(string)", +"13b2807e": "setCampaignEndPointById(bytes32,string,int256)", +"13b2e657": "unfreezeAccount(uint256)", +"13b37a83": "getRandomUuid()", +"13b39b9c": "approveMint(address,uint256)", +"13b3cd91": "collectForREQBurning(uint256)", +"13b3cdf6": "ownersLUT(uint256)", +"13b3fffc": "updateChannelManagerContract(address,string)", +"13b4312f": "transferCollectedFees(string,address,uint256,bytes)", +"13b499ce": "PRE_ICO_TIER_FIRST()", +"13b53153": "isFunding()", +"13b57686": "self_last_result()", +"13b5a19e": "GBPsToken()", +"13b5d420": "returnWebsiteData()", +"13b63f60": "updateBuildingPrivacy(uint256,bool)", +"13b6c8a8": "setListingFeeInWei(uint256)", +"13b6f213": "ContributionReceived(address,uint256,uint256,uint256)", +"13b7423a": "setFundraiserCallData(string)", +"13b796f4": "getMilestoneTimeAndRate(uint256)", +"13b84004": "gameTokenAmount(address)", +"13b96a9e": "numOfSamples()", +"13ba350a": "Whales_group()", +"13bac8f2": "updateStorage(string,string)", +"13baf1e6": "removeToken(address,uint256)", +"13bb7b0d": "PreICO(address,uint256,address)", +"13bbae9b": "addProxyManager(address)", +"13bc33ca": "CryptonHotels()", +"13bc4bda": "operatorSendTo(address,address,uint256,bytes,bytes)", +"13bd05e4": "silo_addr()", +"13bd4e2c": "_prepareAndSendReward()", +"13bd53e6": "applySettings(uint8,uint256,uint256,uint256,uint256)", +"13bd9e3c": "fundFoundation()", +"13bdbb19": "getCustomer(address,address)", +"13bdfacd": "print()", +"13be31ae": "preSaleDeposit()", +"13bfabf0": "isCurrentOrPastAccountReader(address)", +"13bfcd2c": "growthContract()", +"13c03159": "payPlayers(uint256,uint256)", +"13c04769": "submitBallot(bytes32,bytes32)", +"13c10e44": "attackerExpAdjustment()", +"13c13d6b": "updateMarketContract(address)", +"13c1629c": "_getBlockIndexAtYear(uint256,uint256,uint256)", +"13c1e906": "RentaCoin()", +"13c25ba6": "subtr(uint256,uint256)", +"13c2beff": "processWithdrawalForAccount(address)", +"13c32148": "_computeFee(uint256)", +"13c3922f": "Aborted(address)", +"13c42ca1": "getPrice(bytes1)", +"13c4f953": "getTime(address,address)", +"13c52111": "amountOfTokens()", +"13c58cbb": "countNoClients()", +"13c667d1": "calculateAmountBoughtICO(uint256,uint256)", +"13c68344": "Verto()", +"13c709d4": "transferToGame(address,address)", +"13c7db1a": "limitOfBranch()", +"13c82b0b": "setIsForkingMarketFinalized(bool)", +"13c89a8f": "getAllowedTime(bytes32)", +"13c8a376": "recovered(uint256)", +"13c8e60d": "getCurrentDebt(uint256)", +"13c9134b": "setcoinfee(uint256)", +"13ca1464": "getDHandRank(uint32)", +"13ca18ac": "WatermelonBlockToken(address,address,address)", +"13ca43a0": "teamWallet1()", +"13cc22ea": "createController(address)", +"13ccca96": "limitbreak_RELEASE()", +"13cceb21": "getHolderWithdrawIndex()", +"13cd528a": "miadd(uint64,uint64)", +"13ce15a9": "left67(uint256)", +"13ce401b": "getPlayerRecommond(address)", +"13ceb89b": "getCopaMarketAddress()", +"13cfed7f": "deposits_until_jackpot()", +"13d033c0": "cliff()", +"13d073d0": "Sign(uint256,address,uint256,uint8,uint256,string)", +"13d19950": "stringsEqual(string,string)", +"13d1aa2e": "f(uint256,uint256)", +"13d1bdfb": "priceForMateAdvertisement()", +"13d40e71": "RefundableCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"13d4bc24": "buyTokenProxy(address)", +"13d4c63a": "_purchaseWhaleCard()", +"13d53ca9": "check(bytes32,uint256,uint256,uint256)", +"13d5469d": "periodICOStage7()", +"13d557bc": "operatorRedeemByPartition(bytes32,address,uint256,bytes,bytes)", +"13d567ca": "isApprovedTAAddress(address)", +"13d59ca9": "upgradeAddr()", +"13d5d4fe": "test_insert_findWithHintNextRemoved()", +"13d5ee74": "accPartner()", +"13d5f1fe": "durationOfStatusSell()", +"13d65cd9": "test_34_assertGasUsage700Boards()", +"13d73a08": "AMOUNTWAGERED()", +"13d769de": "auctionCreated(uint256,uint256,uint256)", +"13d8867c": "mint(string,uint256,string,uint8,string)", +"13d8c840": "tail()", +"13d9028b": "Remain_burn(uint256)", +"13dc01bb": "BKBK()", +"13dce04f": "updateRoutingPreference(string,string)", +"13dcfa08": "AmountClaimed(address,uint256)", +"13ddb69a": "CROWDSALE_START()", +"13ddd3ae": "getTokePerWei()", +"13ddecd5": "withdrawICOReserve()", +"13de214e": "minimalSuccessUSDWEI()", +"13debf7c": "_getPersonalAirdropAmount(address,address)", +"13defbd9": "getMyCrabs()", +"13df20fd": "createTimeBasedVesting(address,uint256)", +"13df35d1": "publicTGEStartBlockTimeStamp()", +"13df7091": "mintAll(int256)", +"13e003dd": "ASStoken(string,string,uint8,uint256,uint256)", +"13e0e70d": "ownerRegistry(address)", +"13e1d1d2": "multiCancelVoteForCandidate(address[],uint256[])", +"13e1f2b0": "DATToken(address)", +"13e26d58": "minRequired()", +"13e28415": "ownerSetMarginRatio()", +"13e2cae1": "revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", +"13e2dfc1": "depositDividend(uint256)", +"13e3151b": "MyEPPToken()", +"13e33fb6": "calculateBonus(uint96)", +"13e41971": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"13e468b3": "getVotingToChangeProxy()", +"13e4b51f": "putHash()", +"13e50ca4": "totalFiatValue()", +"13e5a3b1": "SetUp(uint256,address)", +"13e5d8b6": "icoStartsAt()", +"13e5e26e": "recirculateLateFees(uint256)", +"13e60074": "OwnerRetireHodl(uint256)", +"13e7323e": "fundingEnd()", +"13e75206": "getParentOf(uint256)", +"13e7a234": "getAccessor(bytes32,uint256)", +"13e7d076": "STERNIUMHUGEELLIGENCECOIN()", +"13e81119": "purchaseTicketsWithReferral(uint256[],uint256)", +"13e8360d": "commissionerAuctionComplete(uint32,uint128)", +"13e8e5d2": "address2a()", +"13e8e74b": "IexecHub()", +"13e8fdea": "TxExecuted(uint32)", +"13ecfbfa": "lastBuyer()", +"13ed0846": "calculateReward(uint256,uint256)", +"13ed5f31": "getTransactionConfirmerInfo(uint256,address,address)", +"13ee4bc5": "pay(bytes32,address[],uint256[])", +"13f06abc": "balanceFrozenTokens(address)", +"13f07317": "enableStaticLogic(address)", +"13f0790c": "tokensSoldWithBonus()", +"13f07f6f": "Object()", +"13f0ec1f": "withdrawDekla(uint256,bytes)", +"13f20d76": "fundDigitalMarket()", +"13f233c2": "ethReceiveMainSale()", +"13f25eb6": "NinjaToken(address,address)", +"13f29768": "addUnsoldAllocationOrder(bytes32)", +"13f4318e": "SetSubscriptionTo(address,int256)", +"13f44d10": "isAddressWhitelisted(address)", +"13f46d3e": "SponBToken(address,uint256)", +"13f47f24": "lockedDelegatingTokens(address)", +"13f4b42c": "pixelsPerCell()", +"13f4c7a5": "INVESTOR_LOCK_DURATION()", +"13f4e977": "minimumFundingGoal()", +"13f52533": "capitalLedger()", +"13f56f73": "changeMinInvestment(uint256)", +"13f5ef00": "Main(string,bytes)", +"13f652fe": "getText(string)", +"13f6ee53": "cliffAdvisorsTokens()", +"13f73570": "manualyAddReferralPayer(address,address,uint256)", +"13f94a43": "getSiteTokenIds(uint256)", +"13f9cf76": "disableBundlingMultitoken(uint256)", +"13fa095f": "setDestinationWallet(address)", +"13fac256": "xem()", +"13faede6": "cost()", +"13fb2324": "EndEvent()", +"13fc5ace": "depositForMySelf(uint256)", +"13fc6ac2": "getEventData(bytes32)", +"13fcaf54": "getDepositCount(address)", +"13fdcbec": "developer_Coin_Character(string)", +"13fdd2b4": "TilexSupply()", +"13fe2de0": "releaseLockedFund(address,uint256)", +"13ff962a": "privatesaleSupply()", +"13ffdbfc": "gameCountOf(address)", +"13fff718": "doBet()", +"14001f4c": "setSiringAuctionAddress(address)", +"14004ef3": "multimint(address[],uint256[])", +"14007c6d": "nextState()", +"1400d1e4": "checkName(string)", +"14012549": "isMainSaleTime()", +"14025dcd": "cancelFee()", +"14029756": "setaddress(address)", +"1402c310": "NEWSOKUCOIN()", +"1402f031": "triggerAttackManually(uint32)", +"1402f80d": "selectTemplate(uint8)", +"1403041b": "PegasusToken()", +"14036f62": "Vboom()", +"1403835f": "_isExpired(uint256)", +"140420a9": "isRateValid(uint256)", +"140529c2": "YCoin()", +"140575af": "LogTokenPriceChange(uint256,string)", +"140604cc": "getInitialState(uint256)", +"14061862": "setIcoMin(uint256)", +"14069b12": "MXMPDMToken()", +"1406b921": "vent()", +"1406d3be": "lowestGameWithoutQuorum()", +"14074135": "dividendsRightsOf(address)", +"140758a9": "disableServiceProvider(address,bytes)", +"1408073e": "GangnamToken()", +"14081570": "addEpisode(string,uint256)", +"14081e39": "setEscrowFee(uint256)", +"14082cd2": "findProductById(uint256)", +"1409b88f": "getManualByAddress(address)", +"140a681a": "_getVersion()", +"140a7ac6": "getFinalScore(int256[])", +"140ad293": "spitnetwork()", +"140aee46": "_0xDogecoinToken()", +"140b1706": "maxHLPMTMarkup()", +"140b2cdd": "calculateMyRewardDecreased(uint256,uint256)", +"140b4465": "executeSpendingRequests()", +"140cc562": "isCollectSignatureCorrect(address,address,uint256,bytes32,bytes32,uint8)", +"140cd7af": "issueToken(address,address,uint256,uint256,uint256)", +"140d3e95": "changeFiatFeeContract(address)", +"140da6b7": "getAddressField1()", +"140dcec4": "right23(uint256)", +"140f64b4": "GoyanToken()", +"140f7f8d": "Staged()", +"14102159": "presaleLimit(address)", +"14106b49": "JustifyClaim(address)", +"14107f3c": "buy(uint8)", +"14111a43": "isValidService(bytes32)", +"1411539d": "multiSend(address[],uint256[],address[])", +"14116c3c": "SetPeriodPreITO_startTime(uint256)", +"14117228": "getNoteKeyByIndex(uint256)", +"1411d713": "licenseIssuedTime(uint256)", +"1412409a": "whitelistSetterAddress()", +"14127f13": "setOrderFill_(bytes32,uint256)", +"141283f1": "setNewWallets(address,address)", +"14131611": "setChibiForFusion(uint256,uint256)", +"14133a7c": "setSaleAgent(address)", +"14139904": "directorB()", +"14143c91": "TotalSpecialFeeTakes()", +"1414a506": "falangiToken()", +"1414ef78": "createInvoice(uint256)", +"14162e8d": "IouRootsReservationToken(string,string,uint8)", +"14163a83": "setCrowdsaleContractAddress(address)", +"14167bf0": "oraclize_query(string,string[])", +"1416a6eb": "ROMAKELAPA()", +"14174f33": "withDraw(uint256)", +"14177dbf": "setLockTokensAddress(address)", +"14179865": "logos(uint256)", +"1417b946": "adminOwner()", +"1417c845": "Mortal()", +"14189a7e": "outstandingValue()", +"141926fa": "updateAccount(string)", +"14193456": "MainSaleEnd(uint256)", +"141961bc": "campaigns(uint256)", +"1419c3f3": "grand_factory()", +"141a8dd8": "approver()", +"141bd92a": "getBallotInfo(uint256)", +"141c4306": "AbroToken()", +"141c4e60": "challenge(uint256,address)", +"141c9422": "listingDate()", +"141ca2c7": "reservedIcoCrowdsale()", +"141d717b": "OC()", +"141dbe66": "distributeBTCB(uint256,address[])", +"141e26a5": "setEditionMaxSales(uint8,uint256)", +"141edaa1": "manufacture(address,address,address)", +"141f211c": "snapshotStakeAmount(uint256,address,address)", +"141f6800": "fundingMinimumTargetInUsd()", +"141fd3cf": "channelResultTimeout(uint64)", +"14204ca9": "QZG001TOKEN()", +"1420765a": "isBuyLocked(address)", +"14211803": "hasBuyTotal()", +"14219ff9": "sq(uint64)", +"1421c1a4": "vote_for_candidate_C_for_free()", +"14225b9b": "token_ratio1()", +"1423113a": "fluxFeed(uint256,bool,bool)", +"142359f4": "fillOrder(bytes32[],bytes32[])", +"1423649b": "cofounderApproveSwitchRequest(address,bytes32)", +"1423c40e": "setBudgetOfCampaign(bytes32,uint256)", +"1424c182": "recordDeposit(uint256)", +"14253887": "certify(address)", +"1425d2fa": "getBalanceToken()", +"14263f0c": "Dadice()", +"1427407f": "NINECOINTOKEN()", +"142769aa": "requestNumber(address,uint256,uint8)", +"14279086": "getIndividualCount(uint32)", +"1427f168": "log2Bounds(uint256)", +"14280bb8": "getBodyColorValue(uint256)", +"14287a07": "playerPrizeClaim()", +"1429a36b": "getOrCreateFeeWindowByMarketEndTime(uint256)", +"1429e26c": "User()", +"142b353d": "MultiTransferETH(address[],uint256[])", +"142bc2ae": "latestData()", +"142c99d2": "closingSettle(bytes32,address,uint256,address,uint256)", +"142d239a": "canPurchaseAmount(address,uint256)", +"142dc95d": "testAmount(uint256)", +"142e0bdf": "LogAllocate(address,uint256,uint256)", +"142e133f": "totalBalanceDown()", +"142e8e25": "setAdmin(uint256,address)", +"142e9ab8": "setTrade(bool)", +"142e9bc9": "weaponToOwner(uint256)", +"142f328e": "fundDao()", +"142f53c2": "sendInitialTokens(address)", +"14307c48": "addHpbBallotAddress(address)", +"143085c3": "updateRankBoard(uint256,uint256)", +"1430990a": "bidTransfer(uint256,address,uint256)", +"1431b23a": "getData(bytes)", +"143211ec": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"14325458": "calculateTokensFrom(uint256,uint256)", +"1432621a": "getPeakSupply()", +"14332c93": "SetConfirmRound(uint32,uint8,bool)", +"14350c24": "changeMinimumMakerProtocolFee(uint256)", +"143551e4": "timeExtension()", +"143580d0": "PGDA()", +"14359466": "NBTV()", +"1435e397": "setAllocation(address,uint256,uint8)", +"14361fd1": "singleWithdrawMin()", +"14363e65": "setPeriod(uint256[])", +"14367652": "revealStageActive(uint256)", +"1436fb39": "_isVotingAddress(address)", +"14371c33": "someMethod5(uint256,uint256,uint256)", +"14373817": "rateSoft()", +"1437f9a3": "Set_your_game_number(uint16)", +"14386a74": "saleToggle(bool)", +"143a1a2f": "pilfer(uint256)", +"143bb3e6": "StartRollDice(uint32)", +"143c56cf": "disprove()", +"143c6d4f": "TokenTransferTo(address,uint256)", +"143c7a3f": "OPAY()", +"143e55e0": "era()", +"143e6209": "setImagePartsCount(uint256,uint16)", +"143f68c9": "getRedemptionBalance()", +"143f9d1f": "week4Price()", +"143fb46d": "setRemainingTokensWallet(address)", +"143fcbbe": "cancelBooking(string,uint256[],uint256,bytes32,bool)", +"14404eb2": "roundOver()", +"144052b6": "C4coin()", +"1440f2bf": "PRE_SALE_PERCENT()", +"144136a1": "restartCrowdsale()", +"144138c8": "removeGlobalConstraintPre(address,int256,address)", +"1441a5a9": "referral()", +"1441c288": "showUnpaidInterest(address)", +"14423381": "GameConfig()", +"144267e0": "refundSecurity(address,uint256,uint256)", +"1442b548": "ZTST()", +"14432f6e": "Received(address,address,uint256,uint256)", +"144344b9": "setEth(uint256)", +"14442f54": "VERSION_NAME()", +"14447e11": "checkGamesReadyForSpinning()", +"14449c92": "finishRoundB()", +"14459309": "price_constant2()", +"1445c6da": "increasePosition(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", +"1445f713": "hexstrToBytes(string)", +"14462b93": "findWhichCTD(address)", +"14468d32": "nextBidExpireBlockLength()", +"1447431e": "setCCH_edit_24(string)", +"1448b3ca": "tokenSaleAddress()", +"1449757d": "annulCertificate(address,address)", +"1449c321": "view_get_gameStates()", +"1449c6dd": "Staked(address,uint256,uint256)", +"144a2752": "getBuyAmount(address,address,uint256)", +"144a3260": "createWithDeposit(address,address,uint256)", +"144a3472": "inMaintenance()", +"144a88a0": "updatePlayerPoint(uint32,uint32,uint32,uint32,int256)", +"144b2a82": "transferICO(address,uint256)", +"144be7eb": "totalNumberOfCards()", +"144c7e40": "CRYPTOKEN(uint256,string,uint8,string)", +"144cbdfd": "NobeToken()", +"144f2f94": "_burn()", +"144fa6d7": "setToken(address)", +"145000ab": "PRICE_2()", +"14525b6b": "auctionFee()", +"14525bce": "INITIAL_BALANCE()", +"14526f8c": "Buy(string,address,uint256,uint256)", +"14534ad0": "LogCertifierAdded(address)", +"14534ba7": "ballotEncryptionPubkey()", +"1453671d": "changeWithdrawAddress(address)", +"1453bfb3": "visitingUnicorns()", +"1453d756": "bytes64ToString(bytes32,bytes32)", +"145538ea": "phase1StartBlock()", +"145671aa": "getValidations(address,bytes32)", +"14567b8b": "setSelfAsContributor(string)", +"1456974f": "setNameReaderId(address,bytes32,bytes32)", +"1456979f": "setNewValidator(address)", +"14572dff": "incrementUniquenessIndex()", +"14576a49": "NewSophonToken(address)", +"14577c55": "accountLevels(address)", +"14584a9d": "getAuctionIndex(address,address)", +"1458ffb3": "VREO_SALE_PHASE_1_END_TIME()", +"1459457a": "initialize(address,address,address,address,address)", +"1459cef4": "balanceOfMine()", +"1459ecc4": "lastrecordindex()", +"145a0adc": "setDataLink(uint256,string)", +"145a7f92": "social(address)", +"145af145": "getAllCardsLowestPrice()", +"145b2ab2": "CocoToken()", +"145ba84c": "_payAwardOwner(uint256)", +"145c03f2": "TransferFromCompanyInventory(address,uint256,bytes32)", +"145ca0b3": "UnLockTokens(address,uint256,string)", +"145cb459": "showCertificate()", +"145ccb0f": "planWithdraw(uint256)", +"145cf0c2": "decrementTokenIdsLength()", +"145d82d6": "setKingdomFactoryRP()", +"145e1944": "buy(bytes,int256)", +"145e6701": "SteemitFund()", +"145e818f": "BALVINDER()", +"145e8f5e": "HVB()", +"145eb4ee": "HuaTuoToken()", +"145ee04c": "pendingFeesWithdrawals()", +"145f3143": "releaseTime1()", +"145f8ba2": "getPainting(uint256)", +"145fa890": "setWhiteListDuration(uint256)", +"145fd87a": "getTotalHashRateOf(address)", +"145ff9cb": "terminateShortPosition()", +"146008e3": "grid(uint256,uint256)", +"14606109": "cap1(address)", +"14607fc2": "dispute(bool,address)", +"146091f1": "removeFromAllocationList(address)", +"1460b505": "setWeights(uint256[])", +"1460e603": "numDarknodes()", +"146124f9": "totalDistributedr()", +"146155bf": "createUserByEmailVerify(bytes32,bytes32,uint256)", +"14619c7f": "setContractAdmin(address,bool,uint256)", +"14627834": "GOVERNANCE()", +"14633039": "VanityToken_v3()", +"146483f9": "setCreateUnicornPrice(uint256,uint256)", +"1464bc45": "walletFacebook()", +"1464f516": "votosTotales()", +"14653f87": "SHIP(uint256,uint256,uint256)", +"14656957": "PeculiumToken()", +"1465aa97": "testingContract()", +"1466724a": "subUserBattleValue(address,uint256,bool)", +"14670850": "test_33_assertGasUsage200Boards()", +"14673d31": "setReserveAddress(address)", +"146740ee": "bulkAddMake(address[],uint256[],uint256[])", +"14679957": "GenesMarket()", +"14686ac2": "puntAmount()", +"1468d9cb": "Latium()", +"1468fc26": "changeSharedExpenseAllocation(uint256)", +"146901db": "setFailed()", +"14690be7": "TransactionSucceededICAP(bytes32,uint256,string,address)", +"14697cc8": "claimHalvingsSubsidies(uint256)", +"14698895": "Certification()", +"146b4955": "RICHERC20(uint256,string,string)", +"146b58df": "getInvestment(address)", +"146bea7b": "nextYear()", +"146c8710": "addressOf(address,uint256)", +"146ca531": "round()", +"146d2148": "setReaderId(address,bytes32,bytes32)", +"146dd227": "BLTToken()", +"146dd8e0": "BestEther()", +"146e3cb5": "getDroidsIds()", +"146e7eea": "soulsForSale()", +"146e91b5": "signContract(bytes32,string,bool)", +"146e9329": "summJenkins()", +"146ee571": "requestFreeDistribution()", +"146ef27d": "balancePreSale2()", +"147035ba": "processPublicPurchase(uint256,address)", +"14704d91": "getCCH_edit_26()", +"14709544": "BetCoin()", +"1470dfa8": "closeWindow(uint8)", +"1470fc6f": "approveRejectOrg(string,string,string,string,string)", +"14712e2f": "proxyApprove(address,uint256,bytes32,address)", +"147180ab": "feesA()", +"147288fb": "test_insert_findWithHint(int256)", +"1472d56a": "assertEq1(bytes1,bytes1)", +"1473248d": "SampleContract()", +"14743e7e": "activateRound(uint256)", +"1474b789": "burnXPTokens(address,uint256)", +"1475e751": "game_token()", +"1476e40f": "multiCall(address[],uint256[])", +"1478b6af": "abortUpdate()", +"1479290e": "removeBouncer(address)", +"14793058": "createPhoenixes()", +"14794702": "withdrawWinnings(uint256)", +"147a5640": "_getAllRevisionIpfsHashes(bytes20)", +"147aaa8d": "giveTokensTo(address,uint256)", +"147bfd66": "GuardedBeercoinICO()", +"147c9f6d": "updateWallets(address,address,address)", +"147d57b0": "send_bounty_token(address,uint256)", +"147d959a": "setUSDPrice(uint256)", +"147da3c9": "newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", +"147e14a4": "retrieveTokens(address,address,address)", +"147e51f4": "freezeTheMoment()", +"14807045": "flipCapSwitchTo(bool)", +"148105ab": "addBankroll()", +"148174cd": "ownerSetCasino(address)", +"1481c04a": "getTXSValue(uint256)", +"1481d439": "deleteUserClaimInBulk(address[])", +"148222cf": "donateSkin(uint128,address)", +"1482bd40": "bountyBalanceMap(address)", +"148303a7": "SafePower(uint256,uint256)", +"14838617": "DEV_PORTION()", +"1483fc8c": "addBlockData(uint256,bytes)", +"14841164": "extraBalanceWallet()", +"1484abf4": "whitelistApplication(uint256)", +"1484cd32": "getWinners(uint16,uint8)", +"1484e9ad": "startICOStage2()", +"14852606": "setAccompliceBContract(address)", +"1485ffc4": "finalizeTDE()", +"14870a57": "setMonthClose(uint256,bool)", +"14870d2c": "withdrawAllToken()", +"14887c58": "isEntity(address)", +"1488f983": "LogFinalized(address)", +"148ab04e": "balance_in()", +"148ab078": "MEW_RESERVE_FUND()", +"148bea6b": "gamblerlist(uint256)", +"148cd939": "transferBecauseOf(address,uint256,address,uint32,uint256)", +"148ce4a4": "test_claimShare_isTranscoder()", +"148d3e7b": "FQCoin()", +"148da7f6": "disableInvestment()", +"148dd101": "thirdChangeBlock()", +"148f2e5e": "sendWei(address)", +"148fa780": "just10Send()", +"14900396": "changeRaceOwnership(address,address)", +"149148e0": "getCityPlanAddres()", +"1491858e": "calculateSetupAllowedUntil(address[16],uint256)", +"14918f5e": "performInitialWithdrawal()", +"14930d7e": "transferResidualBcoupons(address,uint256)", +"14941e80": "getFreeAmount()", +"14946a97": "CoreToken(uint256,string,string,uint8)", +"1494ecfc": "SentosaX()", +"14950f64": "RevokeAddressChanged(address)", +"14959741": "UserMessage(address,string)", +"149607d3": "EtherollToken()", +"149679b9": "GOE()", +"1496fc4c": "Telcoin()", +"14975cc7": "hardCapPrice()", +"14986f5b": "setCooldowns(uint32[100])", +"1498970a": "getDeployedblockbytesMarriages()", +"149947fd": "finding(address,bytes8,uint8[])", +"1499c592": "setParent(address)", +"149acf9a": "daoCreator()", +"149b8690": "supplyInCirculation()", +"149c5066": "ChanceOfWinning(uint256)", +"149cc1f6": "_finalizeBet(bytes32,address,uint256,uint256)", +"149cd0be": "alterCreatePetitionFee(uint256)", +"149dffc8": "numCancelledRequests()", +"149e6788": "heroClasses(uint32)", +"149e685a": "getFundById(uint256)", +"149eead5": "master_contract()", +"149f2fdb": "sellExchangeRate()", +"149fc918": "_rejectMint(uint256,uint256)", +"14a0069a": "getVoter(string)", +"14a03e7c": "concludedGameIndex()", +"14a06710": "TokenRelease(address,uint256)", +"14a091a9": "createLockTokenHistory(address,uint256)", +"14a1231f": "guardian2Vote()", +"14a26806": "setPreUri1(string)", +"14a2d99f": "Grant(address)", +"14a34ebd": "getMilestones(uint256,uint256)", +"14a3557b": "intrepidVoucherSoldCount()", +"14a3b19a": "transferIndexedByAddress(address,uint256,address)", +"14a47046": "add_blockedAddress(address,address)", +"14a4a273": "penalizationOpen()", +"14a528f2": "HasGift(string)", +"14a54912": "token_a()", +"14a57db7": "LogPreparePreContribution(address,uint256,uint256,uint256)", +"14a59e9d": "getStakeholderConfirmationCount(uint256)", +"14a5cd29": "getAssetEmitter(uint256)", +"14a6a1a5": "REQUESTED_STATUS()", +"14a7945a": "redeemAllOwnedAssets(uint256)", +"14a7c57d": "getData_26()", +"14a89904": "rollDie(address,uint256)", +"14a8bd0d": "EXCHANGE_RATE()", +"14a8ca20": "fromPercentage(uint256,uint256)", +"14aa0eaa": "claimBountyToken()", +"14ab260e": "retrieveCompletedProof(bytes32)", +"14ab9038": "setTTL(bytes32,uint64)", +"14aba0db": "MineAD(address,uint256)", +"14ac1102": "get_total_items_in_state(bytes32)", +"14ad47eb": "SwapToken()", +"14ae1229": "setRightForInterest(uint256,uint256,bool)", +"14aedbee": "TokenFactoryAirdrop()", +"14af0908": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256,uint256)", +"14af1e92": "MinterGaveCWC(address,address,uint256)", +"14af35c3": "MyToken(string,string,uint256)", +"14afd79e": "ownerOf(address)", +"14b0519d": "AltExtraHolderContract(address)", +"14b08b4d": "getAllDepositors(uint256)", +"14b0e266": "addBid(uint256)", +"14b11606": "BONUS_ICO_STAGE2()", +"14b11651": "setPoolAndAmount(address,uint256)", +"14b11875": "verifyProposal(address,address,uint256,string)", +"14b1e1f8": "setRefer50x50(address)", +"14b24209": "multiGuess(int256[])", +"14b2cd55": "LightPool()", +"14b2d6dc": "isValidDate(uint256,uint256,uint256)", +"14b419c9": "getAllUsers(address)", +"14b49c36": "Police_5()", +"14b5202c": "stage_Discount()", +"14b546b4": "FreePublicity()", +"14b577ab": "addIdArrayItem(address,address,string,string,uint256)", +"14b72000": "txFeeCapInWei()", +"14b77798": "unsetMany(address[])", +"14b78abb": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,uint256)", +"14b79e21": "_depositTransferCredits(uint256,uint256)", +"14b7c684": "DGD()", +"14b80402": "isStateDestructed()", +"14b85c1b": "removeSalesAgent()", +"14b87862": "getParticipant()", +"14b8e9a4": "checkpointLevel()", +"14b92721": "loveMessage()", +"14b933e1": "getWeiPerSatoshi()", +"14ba5c09": "getDay()", +"14bafeab": "getMessage2()", +"14bb4dd9": "WavesTransfer(address,string,uint256)", +"14bba4b8": "setDiscount(uint256,uint256,uint256,uint256,uint256)", +"14bba8a2": "updateRequestExpired()", +"14bbe21c": "transferBeneficiary(address)", +"14bc3efc": "endBorrowAgreement(string,string,uint256,uint256)", +"14bd0c21": "getServiceAddress(bytes)", +"14bd3d87": "acceptOffer(string)", +"14bd8acd": "massApproval(bool,uint256,uint256)", +"14be4ecc": "setWETHContract(address)", +"14be5169": "releaseLockAgencyLock2()", +"14be7793": "isPrivateSale()", +"14beb3a3": "latestParams()", +"14befc70": "parkingOff(address)", +"14bfd6d0": "admins(uint256)", +"14c01fb4": "_checkPixelAbove(uint256)", +"14c0a37a": "stateBorrowerDefaulted(uint256)", +"14c0bc27": "EtherBalanceOf(address)", +"14c0ffdc": "formula(uint256)", +"14c15569": "getAccountOutputSdcslength()", +"14c16f41": "updateStageWithInvested()", +"14c239a9": "_cappedReward(uint256)", +"14c259eb": "white_duration()", +"14c292ca": "finishITO()", +"14c2d2e0": "handleRef(address,uint256,uint256,uint256)", +"14c33c24": "setSystemEndingPrice(uint256)", +"14c3512d": "adminSetFeeUsdDialNumber(uint256)", +"14c3e29f": "NONEC()", +"14c411c7": "releaseTeamTokens()", +"14c44e09": "registrationFee()", +"14c485c9": "getMartialListInfo()", +"14c588de": "setPromoGen0(uint256)", +"14c5f158": "callModifiedTransfer(address,uint256)", +"14c65687": "_getWeightUntil(uint256,uint256)", +"14c72e9e": "_getFirstIndex(uint256,uint256[])", +"14c74834": "setHeir(address,uint256)", +"14c7763b": "MINTING_LIMIT()", +"14c78333": "batchResolveAquarium(uint256[])", +"14c7bddf": "manualRefund()", +"14c888da": "setFeeParams(uint16,uint256,uint256)", +"14c8e5f4": "requestHangingDividends()", +"14c9035e": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"14c9b8a5": "closeEarly(uint256)", +"14c9eed0": "onlyadmin()", +"14ca5200": "MiningRewardTransfer(address,address,uint256)", +"14ca5398": "submitFullBlock(bytes,uint256[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,uint256)", +"14ca6e01": "setBleachPrice(uint256)", +"14ca8e01": "validPlayer2(uint256,address)", +"14cabddb": "joinProof(uint256)", +"14cb1ae4": "ContractOwnable()", +"14cba002": "_forwardTransferFromWithReference(address,address,uint256,string,address)", +"14cbb90d": "yea()", +"14cbd993": "getRegisteredTokens()", +"14cbdb54": "EspCoin()", +"14cc3cf9": "FOUNDERS_LOCK_PERIOD()", +"14cd70bc": "FakeOwner(address)", +"14cddf9e": "whiteListMinAmount()", +"14ce2f61": "MappingDone(address,uint256)", +"14ce4059": "owner_fee()", +"14cf12d5": "softCapTime()", +"14cf19fe": "TIER1_PRICE()", +"14cf588f": "LBA()", +"14cf6983": "getBalanceCell(address)", +"14cfb977": "minFinneyPerSaleMoreThan()", +"14cffda2": "synertreeToken()", +"14d03ea6": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256)", +"14d04e06": "FooozCrowdsale(address,address)", +"14d066d5": "addCertificator(address)", +"14d07a3e": "left28(uint256)", +"14d0f1ba": "moderators(address)", +"14d10920": "BetstreakToken()", +"14d140b0": "communityPool()", +"14d20606": "devTeamPrecent()", +"14d23c8b": "MaliciousSeller()", +"14d296f4": "getPremiums()", +"14d2d59d": "_approve(uint40,address)", +"14d30335": "assignInitialDays(address,uint256,uint256)", +"14d33a30": "addCandidateBatch(address[])", +"14d36f53": "checkVerifyAccess()", +"14d3df67": "getSMPTokensAmountPerEthInternal(uint256)", +"14d47bc9": "registerBeneficiaries(address[])", +"14d4ecd9": "defineCurrentPeriod(uint256,uint256)", +"14d547aa": "returnInvestments(address)", +"14d5d892": "changeMemberAddress(uint256,address)", +"14d67848": "setClass(uint256,uint256)", +"14d6c2b1": "_maint_updateOwner(address)", +"14d72106": "nextNumberOfWagersToFinalTimeout()", +"14d75e9d": "createProduct()", +"14d79e37": "GetRed(address)", +"14d8c981": "getItem(address)", +"14d9d2e5": "getCostForUprade(uint256,uint256,uint256)", +"14dacf5b": "disableWhiteUserList()", +"14db6d58": "hasUserPermission(address,bytes4)", +"14db8c7d": "getGladiatorPower(address)", +"14dba3ba": "PPToken(uint256,uint256)", +"14dbb508": "Project(string)", +"14dcd58f": "derpcoin()", +"14dcfd55": "vendorWallet()", +"14de9cc2": "tokenGenerated()", +"14dea8e7": "onCancel(bytes32,uint256,address)", +"14deb0ac": "addressAt(address,bytes,uint256)", +"14df96ee": "isRoundingError(uint256,uint256,uint256)", +"14dfad27": "_emergencyLoop()", +"14e0246a": "setMintSigner(address,int256)", +"14e2bc2a": "finishMinting(uint256)", +"14e3fad3": "extra_bonus_amount()", +"14e4a723": "SafePromo()", +"14e580ab": "LogIdentityCreated(address,address,address,address)", +"14e604b6": "EXPLOSION_DENOMINATOR()", +"14e6a86d": "doCheckBounds(bytes32)", +"14e8093f": "clientWithdrawAll()", +"14e887e8": "transactionCounter()", +"14e904e8": "LogBidCompleted(uint256,bytes32,bytes32)", +"14eaa43b": "withdrawToken(address,uint256,string)", +"14eb75bb": "assignRoles()", +"14eb76ac": "updateTeamAddress(address)", +"14eba026": "removeTeamMember(address)", +"14eba5d8": "affiliateList()", +"14ec4106": "createAuction(address,uint256,address,uint256,uint256,uint256)", +"14eda32c": "COZE()", +"14eea0dc": "IND()", +"14efaf86": "ChangedPaymentDestination(address,address)", +"14f0ff32": "FUNK()", +"14f1244c": "reclaimDeposit(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"14f1586a": "objective()", +"14f1dcac": "setFreeCoins(uint256)", +"14f2979f": "getTickets(uint256)", +"14f36e17": "getTokenIssued()", +"14f3f491": "preICOContract()", +"14f52c07": "Blogcoin()", +"14f604b8": "deposit_asset_to_session(uint32,uint32,uint64)", +"14f60881": "getJobClient(uint256)", +"14f64d6c": "PRESALE_START_WEEK1()", +"14f685a8": "Etherumble()", +"14f6c3be": "getETH()", +"14f72e50": "EightStandardToken(uint256,string,uint8,string)", +"14f7731b": "getAllowedAmount(uint256)", +"14f7789d": "GRAChain(uint256,string,string,string)", +"14f796ca": "changeStageAndReleaseETH()", +"14f80083": "setMultisigVault(address)", +"14f8917a": "initialSupplyPreSale()", +"14f8b424": "roundID()", +"14f8f160": "hasIssue(address,bytes32)", +"14f99533": "changeAuthorisedContract(address)", +"14f9e35b": "groom()", +"14fa0b45": "NenasChain()", +"14fa274c": "MigrationInfoSet(string)", +"14fbc22b": "createHero(uint256,address)", +"14fc2812": "setAuthorized(address)", +"14fc7b9d": "AscToken(address)", +"14fcb95c": "ubiatarPlayWallet()", +"14fd0c14": "deadlineVoting()", +"14fd24f0": "updateIndividualCap(uint256)", +"14fddb71": "devTeamBalance()", +"14fdecca": "getPromotion(uint256)", +"14fefca1": "set_hp(uint256)", +"14ff5ea3": "getTokenId(uint256)", +"14ff5f99": "punterAddress()", +"14ff89cd": "getContactByIndex(uint256)", +"14ffbafc": "startEthGet()", +"1500214e": "calcPercent(uint256,uint256)", +"15003368": "withdrawEMONT()", +"1500c257": "startTimePre()", +"1501bf03": "transferFunds(address,address,uint256)", +"15020cb0": "commandTookAway()", +"1502906d": "timeStep()", +"15036fa2": "update_dividend(address,uint256,uint256,uint256)", +"1504460f": "poke(bytes32)", +"150455a4": "HOTCASH()", +"15045c3e": "GenieToken()", +"1504ce95": "payout(string)", +"1504d8f0": "createSnapshot()", +"1504e40b": "RoundEnded(address,uint256)", +"150627bb": "minimumInWei()", +"15067c4e": "p_setRoundDuration(uint256)", +"15070401": "getSymbol()", +"150727ff": "getSecondAddressBalance()", +"15087f7d": "cancelBet(uint256,bool,uint256)", +"15093e03": "minimumAllowedWei()", +"1509c42a": "pr()", +"150a5655": "giveVote(string,uint8)", +"150a6480": "allowMinter(address)", +"150aaf74": "BHB(uint256,string,string,uint8)", +"150ad280": "review(uint256,bool)", +"150ad2a8": "owner_transfer_ownership(address)", +"150b52db": "removeAddressFromPartnerWhiteList(address)", +"150b60e6": "MAYNILAD()", +"150b6885": "genaroDevMultisig()", +"150b7a02": "onERC721Received(address,address,uint256,bytes)", +"150bc419": "unitMythGrowth()", +"150c3e8b": "getIdxArray(uint256)", +"150d6277": "setMinBetPerSpin(uint256)", +"150d7163": "UnfreezeTokensOfOneUser(address)", +"150eb4d9": "releaseTeam(uint32)", +"150f16ac": "stoppedPresale()", +"150fa89f": "FirstUser()", +"15105fa8": "clearCreator(uint256)", +"1510ca79": "MAX_CROWDSALE_TIME()", +"151110b0": "releaseLockedBalance(uint256)", +"1512cfc1": "_preValidateInvest(address,uint256)", +"15136fb5": "ChiTrader()", +"15139f09": "ExaGBP()", +"15142ed4": "shutDownVersion(uint256)", +"15143d6a": "buyOx()", +"1514617e": "vestingDuration()", +"15148649": "getAllowedTokensCount()", +"1514b9cb": "RKCToken()", +"1514bc48": "tokensForPurchase(address,uint256)", +"1514ea54": "getLossesShare(address)", +"15154aff": "ITO()", +"15158a10": "numberOfTokensToAvail25percentDiscount()", +"1515bc2b": "hasClosed()", +"151682a5": "HASH_RATE_MULTIPLIER()", +"1516bbc4": "setTeamVault(address)", +"1516db09": "allOwners(uint256)", +"1516def7": "multiSigAddress()", +"1517d107": "totalNormalCollected()", +"15183e2f": "twitterBotAddress()", +"15191c98": "hibernate(uint256)", +"15194a9f": "init(uint256,string,string,uint8)", +"151b0bed": "getSponsorshipsBalance(address,uint256)", +"151b2342": "getOraclizeCallbackFee()", +"151bc167": "Control()", +"151bcc06": "massAdvertiseTransfer(address[],uint256)", +"151c0d40": "crowdsaleEther()", +"151c3b12": "store(address,bytes)", +"151c61b6": "setUSDExchangeRate(uint256)", +"151d7d32": "flushDividends()", +"151e2a0a": "check_ptc_num(address)", +"151eeb55": "transferAllowed(address)", +"151fa6be": "delegateIsDeleted()", +"15226b54": "getReserveBalance(address)", +"1522f110": "preregvills(address)", +"15248362": "buy_bounty()", +"152583de": "getAttributes()", +"152592b0": "WALLET_ALLOCATION()", +"1525b4f5": "mintLockedTokens(address,uint256,uint256)", +"1525d680": "MainToken(address)", +"1525ff7d": "setTeamWallet(address)", +"15263ef7": "VHW()", +"15270ace": "distribute(address,address[],uint256[])", +"152713b3": "sumAcceptedVirtualContrib()", +"152744ea": "BondInfoById(uint32)", +"1527d657": "returnHowMuchMoreETHNeeded(uint256)", +"152826e9": "cashoutable()", +"15285aa3": "EventBid(uint256,address)", +"1528f43c": "getPOOL_edit_10()", +"152993a8": "addContract(string,bytes)", +"1529a639": "getCollateralBalance()", +"152a3f28": "getSponsorships(address,uint256)", +"152af8f9": "acceptFoundationTransfer()", +"152afab4": "adicionarAssinatura(string,string)", +"152b6f9a": "hasDNN(address)", +"152cf3af": "ethPayment(bytes32,address,bytes20,uint64)", +"152cf9db": "getDataPoint(int256,uint256,uint256)", +"152e84a7": "tokensDistributed()", +"152fb125": "SimpleMixer()", +"152fb5fd": "period_count()", +"15303771": "updateUnsold(string,uint256,uint256)", +"1531076c": "getAgonArray(uint64,uint64)", +"15312b50": "SimpleTokenVesting(address,uint256)", +"153154fd": "getRecommender(address)", +"1531c267": "fipsRegisterMulti(uint256,address,bytes)", +"1531dfdb": "ethtosend()", +"15328109": "parentAddr()", +"153345ce": "changePrice(uint256,uint256,uint256,uint256)", +"15334b77": "setGameStarterDividendPercentage(uint256)", +"15334fa7": "SOCToken(uint256)", +"15336f80": "setProof(string)", +"15338724": "mediaTokens(address)", +"1533ba50": "EMBCToken()", +"1534180f": "_transfer(address,uint256,bytes,string)", +"15347380": "priceInWeiToken(uint256)", +"1534b1fc": "getPlayerDepositData(address)", +"1534b392": "getNumLockers(address)", +"1534e8d2": "multiVesting(address[],uint256[],uint256[],uint256[])", +"1535884e": "notarizeHash(bytes32)", +"153677b7": "deployOtherVesting(address,uint256,uint256)", +"1536a614": "EphesusToken()", +"1536cabf": "addCertAdmin(address)", +"1536fec6": "get_end_time()", +"15370598": "getCurrentMode()", +"153737f5": "OWN_DistributeTokenAdmin_Multi(address[],uint256,bool)", +"15373e3d": "castVote(uint256,bool)", +"1537671c": "qtdePokemonsMapping(address)", +"15382559": "LogDepositReceived(address)", +"153913e3": "ICO_Live()", +"15398afe": "compareNumericStrings(string,string)", +"153a1f3e": "bulkTransfer(address[],uint256[])", +"153a6bd3": "test_sendFundsToContract()", +"153a79c9": "buySaleTokens(address)", +"153aa771": "totalSupplyBonus()", +"153b0d1e": "setBlacklist(address,bool)", +"153b31fd": "sign(string,uint256,uint256)", +"153cc53d": "hasCrowdsaleStarted()", +"153d3572": "deletePawn(uint256)", +"153debee": "FOUNDERS()", +"153e66e6": "buy(address,address,uint256)", +"153e6d70": "setPercentFrozenWhenAwarded(uint256)", +"153faf2c": "FOUNDER_WALLET()", +"153fbb81": "setCAPAddress(address)", +"153fe583": "getAddressFromSig(bytes32,uint8,bytes32,bytes32)", +"153fe6aa": "STATUS_INITIAL()", +"15408734": "addMake(string,address,uint256,uint256,bool)", +"15409c1d": "TradingAccount()", +"1540fe22": "weiMinimumLimit()", +"15413ccf": "logicProxies(address)", +"1541eb12": "JournetToken()", +"15420b71": "transferPreSignedHashing(address,address,uint256,uint256,uint256)", +"1542b365": "phase_4_remaining_tokens()", +"1543136c": "getDeployedLength(address)", +"1543d99f": "bonus_calculation()", +"1544fc67": "delegatorStatus(address)", +"15454cd2": "registerNameCore(uint256,bytes32)", +"15480c63": "createDefaultCobeFriend(uint256,uint256,uint256,address,uint256,uint256)", +"15490ebb": "transferReward(address,uint256)", +"154920b0": "firstEmptyId()", +"15497d2c": "lockStatus(address)", +"1549be43": "getOutstanding(address)", +"1549c1e2": "usePlayerToken()", +"154a7d71": "DATE_31_DEC_2019()", +"154ad3f7": "ChangeMemberName(address,string,string)", +"154af6b1": "sendShares(uint256,uint8,uint256,address)", +"154b3f4c": "executeSigned(address,uint256,uint256,address,bytes)", +"154d56db": "callHotel(address,bytes)", +"154d6e12": "buyPack(uint8,uint128)", +"154d7944": "newCarID()", +"154e3f61": "enroll(address,address,uint256)", +"154e45a4": "privateSold()", +"154e8152": "withdrawnBalance()", +"154e95f1": "changeNamespaceOwner(string,address)", +"154e9bd5": "PumaPayToken()", +"154f78dc": "FREETOKENTEST(uint256,uint256)", +"154faf5d": "getTodayIndex()", +"15502d73": "changeTokenFreezeDate(uint256)", +"15506bf1": "RemoveParticipant(address,address)", +"15519af1": "RANGESTART_PRESALE()", +"1551e636": "tokensReceived(bytes32,address,address,address,uint256,bytes,bytes)", +"15525991": "getMaxAmount(address)", +"15527006": "icoPhaseDiscountPercentage3()", +"1552cb04": "addBaseWhitelist(address[])", +"15544fc2": "Teaeum(uint256,string,string)", +"1554611f": "escapeHatch()", +"1554c243": "_setApp(address)", +"1555e337": "ConferenceCertificate()", +"1555fe7e": "RecordableRefundableCrowdsale(uint256)", +"1556195c": "LowRiskBag()", +"15574634": "requestTransferFundToSupplier()", +"1558687a": "DepositContract()", +"155897cc": "changeDeDeAddress(address)", +"1558ab7e": "sendEthBack(uint256)", +"1558ae4d": "Etheroll()", +"155949ca": "buyStores()", +"15598339": "GetPurchaseInfo(address)", +"155ac95f": "switchname(bytes32)", +"155bdaa0": "SEGFAULTCOIN()", +"155ce432": "Restitution_Historique_Transactions(address)", +"155dcb47": "ZJFTokenDeposit()", +"155dd5ee": "withdrawFunds(uint256)", +"155f0ebc": "dividends(bool)", +"155f1861": "claimBonusCard()", +"156014e8": "addAddressToPartnerWhiteList(address,uint256)", +"15613495": "earlyBackersWallet()", +"15613d9f": "chainIdValue()", +"15616d2b": "getCurrentResult()", +"1563f4ff": "adminOrInitializing()", +"1564d706": "lockIn()", +"15659dde": "getBidCount(bytes32)", +"1565b0b6": "PRICE_ICO4()", +"1565c3c8": "takeEther()", +"1565f12f": "createVote(bytes32,address,address,uint256,bool,string,string,uint256)", +"156773ca": "setAllStopper(address)", +"1567d7a7": "transferPromotionalShares(uint256,address,uint256)", +"1568a1a1": "vinciSold()", +"15691522": "AltSocialAccountPw(bytes32,bytes32,bytes32,bytes32)", +"15698812": "redeemExcluded(bytes32)", +"156a0528": "getBalancesPayer(uint256)", +"156a2f36": "bid(address,uint128)", +"156b1494": "removeExpiredAssignments(address,uint256)", +"156bf4c1": "getKtcAddress()", +"156c0ed4": "Scanetchain()", +"156c2e82": "withdrawGxTokens(address)", +"156c6baf": "isAllowCnsContract(address,bytes32,bytes32)", +"156cacc3": "Etheroneum()", +"156e29f6": "mint(address,uint256,uint256)", +"156e5039": "safeadd(uint256,uint256)", +"156e9507": "mineTotalBalance()", +"156f985c": "getFundsStatus()", +"157003d9": "tierCaps(uint256)", +"157024b3": "producerStatement(string)", +"15728a73": "GoBlockSupply()", +"1574126a": "preSaleEndBlock()", +"15748250": "freeze(address,address)", +"15752ac5": "bonusTokensAllocated()", +"15764334": "Hybrid()", +"15770d99": "disapprove(address)", +"15781c80": "checkPurchaseValid(address,uint256,uint256)", +"15786590": "lotteryTotalEarning()", +"1578a123": "Send_MediatedTransaction(address,uint256)", +"1579e5c5": "getAllCardAddressesOfOwner(address)", +"157a18b4": "ADMOToken()", +"157a68df": "createIssue(uint256,address,uint256[],address[],string)", +"157ad5a1": "canWithdrawBond(address,uint256)", +"157b5167": "fun2()", +"157bbbf5": "winJackPot(address,string,uint256)", +"157cb62c": "getPlayerDnas(address)", +"157d5956": "isGetFreeZombiew(address)", +"157daf2e": "returnChange(uint256)", +"157db359": "airdroper()", +"157ddf8f": "bonusTotalSupply()", +"157e2063": "ASTBToken()", +"157f33f5": "coinIssuedTotal()", +"157f5610": "showGameEnd()", +"157f67e8": "withdraw_my_tokens()", +"157f8f51": "feePaid(int256,int256,int256,int256)", +"157fbd8d": "emitAccessBlocked(address,bytes32)", +"1580391c": "set(bool,string)", +"158048a0": "settlePut(uint256,uint256,address)", +"158059e2": "changeVotingRules(uint256,uint256)", +"1580beb7": "HOPEtoken()", +"158163c8": "setMerculetPrice(uint256)", +"15817881": "saleStageStartDates(uint256)", +"1581b600": "withdrawAddress()", +"15830662": "assignTokens(address[],uint256[])", +"15834aed": "tournamentQueue(uint256)", +"1583deb2": "businessAddress()", +"15843245": "PeoplesToken()", +"158495df": "tokenIds(uint8)", +"15862aff": "lookupIndex(uint256,uint256)", +"158641f5": "getArtistId(bytes32)", +"158686b5": "change_admin(address)", +"15875f54": "getVestingEndTime(address)", +"158859f7": "disableTokenTrade(address)", +"1588ce09": "closeManualyMining()", +"158952da": "tipUser(bytes32)", +"15899670": "todaysBidTotal()", +"158a1184": "operation_amount(uint256)", +"158a4988": "distributeTokens(address,uint256)", +"158b8e54": "LastTokenId()", +"158be5a2": "WTF()", +"158d1fd4": "crowdsaleEndedSuccessfully()", +"158dec25": "maxSubmissions()", +"158e7986": "addBallotAndVoterWithPk(bytes32,bytes32)", +"158e7e53": "maxPreIcoAmount()", +"158ee887": "emergencySetOwner(address)", +"158ef412": "forceUpdateName(string)", +"158ef93e": "initialized()", +"158f7f5c": "reservedFounder()", +"15902a09": "removeOpenOrderFromBook(uint128)", +"159090bd": "take()", +"15910e5c": "logPurchaseViaToken(address,address,uint256,uint256,bytes32)", +"15915ddd": "directMintTokens(address,uint256)", +"15917977": "changeUniqueOwnership(string,uint256,address,address)", +"15919eed": "Arena()", +"1591bf51": "getPubKeyArr50(bytes32,uint256,uint256[])", +"1591dc6a": "BuyLoan(address,uint256,uint256)", +"159218d2": "setStagesManager(address)", +"15927801": "distributePrize(bool)", +"1592aa2e": "registHns(string,address)", +"1592c087": "transferTusdProxyOwnership(address)", +"1593796e": "didReveal(bytes32,address)", +"1593a8c7": "endLottery()", +"1593ecb8": "LOG_IncreaseInvestment(uint256)", +"1594060a": "HalvingInfo()", +"15945790": "_supply()", +"15949ed7": "getPermissionParamsLength(address,address,bytes32)", +"1594afd1": "setExchangeRateShift(uint256)", +"1595f207": "TKT(address)", +"159621d2": "getProfesor()", +"15969c4e": "minimumStageDuration()", +"1596b2bf": "getServiceFeeNumerator()", +"1596facb": "saleTime()", +"15977d45": "ledger(bytes32)", +"1597ee44": "encode(uint8[])", +"15980795": "freezeOf(uint8,uint8)", +"15981650": "setTicketPrice(uint256)", +"15983796": "getNextSnapshotBlock()", +"1598653d": "firstThousandUsers()", +"159887d1": "calculateFactor(uint256,uint256)", +"1598b2e0": "getSeatClaim(uint256)", +"15992cda": "uniq(uint16[])", +"1599a096": "mixStringAddressFunc(string,address)", +"159a3c33": "AWAXToken()", +"159a6475": "getFingerprint(uint256)", +"159ad680": "updateuser()", +"159b4e91": "sendTempTokens(address,uint256,uint256)", +"159bd2f3": "earnedFunds()", +"159c18bc": "removeWhitelistOperator(address)", +"159c2d9f": "BuyKeys(uint256,uint256)", +"159c60e8": "ZDMCoin()", +"159ce057": "getReturn()", +"159d3c24": "sellZone(uint256,uint256)", +"159d526f": "calcStateHash(bytes32[10],uint256[4])", +"159d8562": "ediv(uint256,uint256)", +"159da82d": "getInvitationValidPeriod()", +"159dbef7": "_0xDiaryToken()", +"159de07a": "FundariaBonusFund()", +"159e1e14": "EthereumPrivate()", +"159f82fc": "getEventResult(uint64)", +"159fb416": "transferCreditBotAddress()", +"15a03930": "TossMyCoin()", +"15a090c0": "getMiningWarRoundNumber()", +"15a0df43": "testThrowCreateNewRevisionNotOwner()", +"15a0ea6a": "claimFees(address)", +"15a269f7": "withdrawBalance(address,address)", +"15a29035": "getTask(bytes32)", +"15a2bd76": "allowOrRestrictMethod(bytes4,bool)", +"15a38bda": "isOldVersion()", +"15a3c611": "project_registry(uint256)", +"15a4806c": "EtherButton()", +"15a4d313": "NovaChain()", +"15a50aff": "getInvalidKeys()", +"15a51595": "TeamMembersAddress()", +"15a52302": "getService(address)", +"15a529b6": "getAllSalesByAddress(address)", +"15a55347": "reservedTokens()", +"15a5d9d8": "contractAddr()", +"15a60b76": "_calFrozenAccountCoin(address)", +"15a653a0": "numberOfSupportedTokens()", +"15a686f3": "PixelOperationsContract()", +"15a6a11c": "mintLeftOverZCOToWallet()", +"15a6a38d": "RedeemMTU(bool)", +"15a6f5c1": "setLatestTokenPayday(address,address,address,uint256)", +"15a75f9f": "playFor(address,bytes32)", +"15a9a145": "numRewardsAvailable(address)", +"15aaa09b": "PRECOE()", +"15aaefd5": "_transferPrimordialToken(address,address,uint256)", +"15ab250d": "setCresus(address)", +"15ab8302": "RoundASold()", +"15abc160": "createValidatedRequest(address[3],address,uint256[11],uint256,bytes)", +"15ac4c90": "setDayEthInLimit(uint256)", +"15ac534d": "closeBetting()", +"15aca0c4": "LogError(uint256)", +"15acce5e": "arpDeposited()", +"15ad1be3": "unrestrict(address)", +"15ae0629": "getHash(bytes,uint256)", +"15ae1972": "stageRate()", +"15aec1fb": "airdropadd()", +"15aec7ee": "BlockChainCourse()", +"15aee408": "FinaliseSale(address,address,uint256)", +"15af64e7": "JACToken()", +"15afa98e": "totalEth_()", +"15b02a4c": "totalICOable()", +"15b03fde": "getaddresstotal(uint256)", +"15b07f69": "nextCourse()", +"15b0821f": "mintDRSCoin(address,uint256)", +"15b21082": "requestCustodianChange(address)", +"15b23e47": "OncoToken()", +"15b2b1ae": "SaleStatus(string,uint256)", +"15b3433b": "dexjartoken()", +"15b37899": "setKyberNetworkAddress(address)", +"15b40ec0": "deployed(uint256)", +"15b4bc22": "getMinerHalving()", +"15b53beb": "TournamentOver()", +"15b556df": "getSellPriceAfterTax()", +"15b56b44": "checkReward(uint256[])", +"15b66fef": "calculateClaimableRewardTillRound(address,address,uint64)", +"15b73a1d": "ICOSupply()", +"15b7ab02": "setAgriChainProduction(address)", +"15b8003b": "buyChance(uint32,uint32,bytes32,uint256)", +"15b88b35": "PeaceToken(uint256,string,string)", +"15b9a8b8": "controllerCount()", +"15ba9ea2": "register(address,bytes32[5],address)", +"15bbc15d": "approveMP(address,int256,uint8)", +"15bc9441": "convertToDEF(uint256)", +"15bd73f1": "offerchangeprice(uint256,uint256)", +"15bd8bb2": "getTimestampByHash(string)", +"15bddfbe": "__setParameters(uint32,uint256,address)", +"15be2e7c": "totalSaleLimit()", +"15bef9cd": "changeMembers(address[],bool)", +"15bf2b51": "last10()", +"15bf430d": "Project()", +"15bf7cd7": "deployedPresaleContract()", +"15bf7ed2": "publicFundingPersonalEthLimit()", +"15c0251c": "getCoinWallet(bytes4)", +"15c12d4d": "totalWeiWon()", +"15c1c5b8": "EternaCoinContract()", +"15c2eed8": "RedlineFinancialLabCoin()", +"15c30006": "_payoutReferr(address,address)", +"15c32297": "setCanTrade(address,bool)", +"15c3cd94": "canTransferUST(bool,bool)", +"15c43aaf": "contractInfo()", +"15c4dc29": "MOSToken()", +"15c560c7": "addTotalInvoiced(address,uint256,uint256)", +"15c5c950": "isProcessedTx(bytes32)", +"15c6b117": "CRPA()", +"15c6b40a": "cloneFeePercentage()", +"15c73afd": "resolveEmergency()", +"15c7ff34": "isPaidUntil(address)", +"15c8276d": "_supportsInterface(bytes4)", +"15c83cac": "getNewItemId(address,bytes32)", +"15c8d628": "normalBuyLimit()", +"15c91115": "pbkdf2(bytes,bytes,uint256)", +"15c98193": "getCampaignCreator()", +"15ca41c3": "notarizeHash(uint256,bytes32)", +"15ca65f0": "purchase(uint256,uint256,uint256,address,bytes)", +"15cab9c0": "pre_active_time()", +"15cb75e3": "replaceChiphash(uint256,bytes32)", +"15cbfdc1": "SpendingBlockedEvent(address)", +"15cce224": "setFeeToken(address)", +"15cd8e0b": "SECOND_PHASE_MAX_SPAN()", +"15ce09ad": "winningTimestamp()", +"15cec355": "_escrow(address,uint40)", +"15cedef7": "TFCPTest(uint256,string,string)", +"15cf4a5f": "createElection(string)", +"15cf59b6": "getCreatefeeWindowIdValue()", +"15cf7a35": "fechVoteResultForCandidateBySnapshotBlock(address,uint256)", +"15cff546": "isOperationBlocked()", +"15d10f38": "decreaseICOcap(uint256)", +"15d28e11": "totalLendingAmount()", +"15d2fc8a": "setPreIcoEndsAt(uint256)", +"15d3b5d8": "getTotalAllocation()", +"15d3cfe2": "EtherCashPay()", +"15d3e0a3": "transferToSafe()", +"15d3f614": "Bet4Land()", +"15d42327": "testMulMod(uint256,uint256,uint256,uint256)", +"15d44202": "resultsValidationStep()", +"15d494c4": "test_chain2_1_increaseTimeBy5000()", +"15d4c5d5": "proposeMint(address,uint256)", +"15d4f2df": "_internalTransfer(address,address,uint256,uint256)", +"15d51761": "partner2_will()", +"15d5219f": "calLoanAmount()", +"15d53d7d": "_existPublicKey(address)", +"15d655c9": "claimPrice()", +"15d6af8f": "winnerList()", +"15d707af": "KD0Token()", +"15d7085f": "calcRankFundsFee(uint256)", +"15d7811e": "findYforX(uint256)", +"15d7b2c4": "setVestingManager(address)", +"15d7bf44": "register(bytes32,bytes32,address)", +"15d85401": "QbaseTalk()", +"15d87dc4": "vendorVerify(address)", +"15d887a7": "confirmedTotalToken(bytes32,uint256)", +"15d99a77": "CleanSweap()", +"15d9a9ee": "registerBarcode(bytes32,bytes32,string,bytes32,string,bytes32,bytes32)", +"15d9ad50": "illiquidBalance()", +"15d9aefd": "TeaToken()", +"15da0b02": "setCommunity(address)", +"15da42dc": "airdropSEEDSinWei(address[],uint256)", +"15da63a0": "thirdStagePriceOfTokenInWei()", +"15da65a5": "currentQuestionId()", +"15dacbea": "transferFrom(address,address,address,uint256)", +"15dae03e": "getType()", +"15dbfe28": "fromReal(int128)", +"15dc806e": "getStageBonus()", +"15ddf344": "getWhitelistStatus(address,bytes32,uint256,address)", +"15de4607": "getOwnFashions(address)", +"15de8027": "getAquaTokenAudCentsPrice()", +"15deaa3f": "INTARO()", +"15df1a09": "_fromToken(uint256,uint256,uint256)", +"15dfaccd": "delAdministrator(address)", +"15dff3b3": "RoleLookup()", +"15e04206": "Strings(string,string,uint8,uint256)", +"15e1146b": "deadlinePreIcoTwo()", +"15e1c65c": "added_to_the_bank()", +"15e28700": "addTokenPairWhitelist(address,address)", +"15e3187d": "amIBeneficiary(address)", +"15e33901": "digest(bytes,uint256)", +"15e3ab3a": "nccToken()", +"15e3d37d": "getAllCardsForClaim()", +"15e5ae1e": "Killer()", +"15e5c69e": "_purchase(address,uint256)", +"15e70102": "myTarif()", +"15e812ad": "getBaseFee()", +"15e82e87": "Free_vote_for_candidate_B()", +"15e839c1": "setHeroGenes(uint256,uint256)", +"15e89927": "JAR(uint256,string,uint8,string)", +"15e9c2d4": "PainPoints()", +"15e9fc28": "setBets(uint256,bytes32[])", +"15ea426d": "hasUserWon(uint8,uint256,bytes32,bytes32)", +"15eaef6b": "tokenTransfer(address,address,uint256)", +"15eaf224": "getlastJadeProductionUpdate(address)", +"15ed6d06": "totalBondSupply()", +"15ed97c5": "_preValidateAssign(address,uint256)", +"15ee1255": "overrideCharPrice(uint256,uint256)", +"15ee3726": "createMesa(uint256,address)", +"15eec1b6": "setPayerString(string,string)", +"15ef29c3": "configureTokenParams(string,string,uint256)", +"15efc893": "confirmAdminTx()", +"15eff89b": "DiamondToken(string,string,uint8,uint256)", +"15f063f7": "totalStores()", +"15f06ede": "placeBuyOrders(uint256[],uint256[])", +"15f0c220": "marketingAllocation()", +"15f17902": "updateCeleb(uint256,string,uint256[6],uint256[6])", +"15f2226e": "removeAccessor(address,address,address,string,uint32,string,string,bytes32,bytes32,uint8)", +"15f24053": "getBorrowRate(uint256,uint256,uint256)", +"15f28c5f": "walletB()", +"15f2e1bf": "getFunderCount(bytes32,string)", +"15f2e2f7": "LOCK_START_TIME()", +"15f2eb87": "getNumEndableGames()", +"15f2fe4f": "setDelegadoDeDistrito(bytes32,bytes32,uint8)", +"15f3161f": "issue(address,uint256,uint32,uint32)", +"15f3223c": "assertHash(bytes32,bytes32)", +"15f570dc": "burn(address,uint256,string)", +"15f59033": "setPropertyLastUpdaterLastUpdate(uint16,address,uint256)", +"15f5ea17": "stop_auction()", +"15f647fc": "setLoanProductActiveState(uint32,bool)", +"15f667ca": "phase2TokenSold()", +"15f73331": "invalidateName(string)", +"15f78c0c": "GetBank()", +"15f84d25": "isActiveContributor(address)", +"15f903a3": "setNameValue(uint256)", +"15f92e3b": "getBeat(uint256)", +"15fa168a": "setVerificationRate(uint64)", +"15fb1a65": "slashPower(address,uint256,bytes32)", +"15fb2185": "adminSetAdmin(address)", +"15fbba7a": "delPokemonFromMaster(address,uint256)", +"15fdf660": "mPerSellData()", +"15fe3b6c": "testTransferAfterFinalize()", +"15ff8f3c": "RESERVE_PORTION()", +"16002f4a": "totalAuctions()", +"16011bf1": "addReader(string,address)", +"1602a124": "allowMinting()", +"1602c424": "purchaseRect(uint256,uint256,uint256,uint256,uint256[])", +"160344e2": "startLottery()", +"16035ba0": "getTotalVolumeEth()", +"16038be8": "mintVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool,address)", +"1603c521": "opensourceFundManager()", +"1604901b": "getGameByID(uint32)", +"1604a127": "calculateBetOutcome(uint256,bool,uint256)", +"1604c449": "numTilesClaimed()", +"1604f9ea": "requestPrice()", +"1604fa4d": "checkIfProjectExists(bytes32)", +"1605750d": "addToWhiteList(address,address)", +"1605782b": "sha1(bytes)", +"16059170": "onSubCanceled(uint256,address)", +"1605a889": "DecenterHackathon()", +"1605bc07": "SVDelegationV0101(address)", +"1605dd61": "getAddressBySymbol(string)", +"1606a1c9": "getAuditReportIPFS(address,bytes32)", +"1607dd9d": "distributeSpecial(address,uint256)", +"160849a7": "participateICONow(address,uint256)", +"1608e93f": "dice(uint256,uint16)", +"1608f18f": "disableTransfers(bool)", +"16090250": "getPolicyDetails(bytes4,address)", +"1609a397": "unhaltsTrades()", +"1609b182": "ReputationToken()", +"1609bbbf": "BarimCoin()", +"1609bdf2": "EEMWallet()", +"1609be1d": "sweepTokens(address,address)", +"1609e43b": "levelStartupTimestamp()", +"160a453e": "queryTokens()", +"160a7925": "getPermissions(address)", +"160abc9d": "tier1Rate()", +"160b01a1": "childTokenByIndex(uint256,address,uint256)", +"160b313d": "addAssociatedAddress(uint256,address,address)", +"160c5239": "read_total_global_purchased_today()", +"160d5240": "_toNanoNIL(uint256)", +"160d66ae": "voteToken()", +"160dc0ac": "buyItem(uint256,address,string,string,string)", +"160e3f3d": "grant(uint256)", +"160e915f": "canAcceptPayment()", +"160f202f": "send_ETH_from_contract_to_me()", +"160fc374": "cancelOrder(address[3],uint256[3],uint8,bytes32,bytes32)", +"160fe0e2": "getWtotalEth(uint8)", +"1610b59b": "infoFields(bytes32)", +"1610c734": "bonusLimit5()", +"16114acd": "recoverTokens(address)", +"161181ea": "getUserLengthOnToken(address)", +"1612ec4f": "applyToken(address)", +"1613520f": "priceTLP1()", +"1613ec9d": "getInitFunction()", +"161448df": "BossContract()", +"16145311": "ISAO()", +"161593a3": "landmarkToApproved(uint256)", +"1615d035": "airdropWallet5Pct()", +"1615e11d": "DARK()", +"16163c89": "encodeBool(bool)", +"16164467": "findRequiredSubscriberIndex(address)", +"16164b33": "icoTarget()", +"16164e15": "setInvestorData(address,uint256,uint256,uint256)", +"161666eb": "calculateAddress(uint8)", +"1616f54a": "FOURTH_TIER_SALE_START_TIME()", +"16173f39": "sin(int256)", +"1617adf7": "periodITO_softCapInUSD()", +"16180e8e": "reallocation(uint256)", +"16181a48": "insert(address,string)", +"16181bb7": "shortSellShares(bytes32,uint8,uint256,uint256)", +"16188c79": "isBadToken(address)", +"161895eb": "startBuy()", +"16192d2a": "accountInformation(address)", +"161965d9": "getRN()", +"1619fc14": "initOraclize()", +"161b5e46": "transferOwner(address,address,uint256)", +"161b75b2": "returnRemainingTokens()", +"161b9f5e": "ControllerManager()", +"161c389a": "NewImage(uint256)", +"161c8594": "setKpopArenaContractAddress(address,address)", +"161d2a59": "approveCertificate(bytes32,bytes32,bytes32,bool)", +"161dc300": "mintForSampleRegitry(address,uint32)", +"161fc5b3": "StartNewMiner(address)", +"161ff662": "proxyTransferFromWithReference(address,address,uint256,bytes32,string,address)", +"16201c24": "updateLastActive(address)", +"16205a7c": "RateDelivered(uint256,uint256,uint256)", +"162094c4": "setTokenURI(uint256,string)", +"16210e25": "verificationHoldersVerifierAddressMap(address)", +"16212265": "closeAirdrop()", +"16216f39": "return13()", +"16220188": "AddToWhiteList(address)", +"16222950": "golemFactory()", +"162255e1": "m_frozen()", +"1622dbe4": "buy(address,uint256,uint256,uint256)", +"16233f3f": "withdrawMortgageTokens(address)", +"1624288d": "balanceOfTokens()", +"16243356": "end_time()", +"16244907": "changeAnimal(uint256,uint256,bytes32,uint8)", +"1624f6c6": "initialize(string,string,uint8)", +"16260713": "isFrozenByAddress(address)", +"1626315c": "purchaseNew(uint256,string,string,uint256)", +"16265694": "validRateDurationInBlocks()", +"16265b4e": "isDatasetRegistred(address)", +"16266fbc": "returnPays()", +"1626ba7e": "isValidSignature(bytes32,bytes)", +"1626fe64": "checkApprovalStatus()", +"16270f7d": "ownerIndexBit(address)", +"1627540c": "nominateNewOwner(address)", +"16277952": "userLoveLocks(address)", +"16279055": "isContract(address)", +"1627c3c1": "divForTeamEthContract()", +"1627d3f2": "createToken(string,string,address,address,uint8)", +"16281405": "buyXaddr(address,uint256,bytes32)", +"162856f5": "_emitOracleRemoved(bytes4,address)", +"162897c0": "sendUnsoldTokenToRewardSupply()", +"16291032": "setQualifiedPartner(address,uint256,uint256)", +"162927b6": "approve(uint256,address,uint256,uint256,address)", +"162a8e5f": "distributeTokensAfterIcoByOwner()", +"162bb373": "disableERC721()", +"162bc80c": "WithdrawTokens(uint256)", +"162bf1ee": "getBurnRequestAddressMap(uint256,string)", +"162cbefe": "AVAILABLE_AIRDROP_SUPPLY()", +"162d563d": "withdrawGNO()", +"162d7daf": "buyQST()", +"162dd6da": "takeEtherProfits()", +"162e2f6c": "reservationFromEthereum(address,uint256,uint256)", +"162e4fd0": "getFinalOutcomeByEntity(uint256)", +"16317946": "notifyTestimonial(address)", +"16317e7e": "setLiquidationThresholdPercent(uint256)", +"1631eb07": "unlockReward(address,uint256)", +"1632070c": "setRewardDivisor(uint256)", +"1632612a": "TrustEURO()", +"16328378": "precrowdsale(address)", +"16330c55": "setRafEnd(uint256)", +"163317c6": "fundAdvisor()", +"16339604": "_FIVETHOUSAND()", +"1634ab52": "transferCrt(address)", +"1635717c": "getInstruments()", +"1635e13c": "initBuilding(uint256,uint256,uint256,uint256,uint256,uint256)", +"16367c63": "earlyParticipantWhitelist()", +"163687ab": "defaultOperatorsByTranche(bytes32)", +"1636ed74": "gatewayOpened()", +"163740d1": "HieToken()", +"16381382": "getBetUint(int8,int8)", +"1638e70d": "DIETSweets()", +"1638f628": "calculatePayout(uint256,int256)", +"163935a8": "BlokTokenSale(address,uint256)", +"163aa00d": "lastRewardEthBlockNumber()", +"163aa631": "isIssued(bytes32)", +"163aba3c": "getQueryFee()", +"163c0351": "reserveTeam(uint256)", +"163c17b1": "goldFreeze(address,uint256,uint256)", +"163c4e3c": "CryptoGripInitiative(uint256,uint256,uint256,address)", +"163db71b": "totalDistributions()", +"163dba92": "setBlocks(uint256)", +"163ebd3a": "MainExchangeNM()", +"163eec78": "_addFundkeeper(address)", +"163ef5cb": "tgrSettingsPartProject()", +"163f6691": "getAttribute(address,bytes32)", +"163f7522": "isUserRegistered(address)", +"163f9b4f": "withdrawalOwner()", +"163fa64a": "setSkillPointCost(uint256)", +"163fa8af": "addInvestmentPackage(string,uint256)", +"164116f8": "_getPrice(uint256)", +"16413515": "tokenIdToData(uint256)", +"16419aa7": "slice16(bytes,uint256)", +"1641bced": "jackPotGameLockedToken(address,uint256)", +"1642fcca": "SZ(uint256,string,string,uint8)", +"16431c5b": "CreateANM(address,uint256)", +"16443801": "Zigilua()", +"16448c99": "allocateTokens(address,address,uint256)", +"1644b20b": "Bhinnekamint(address,uint256,uint256)", +"1644ed01": "isVolumeReached()", +"16450092": "totalCap()", +"16458d74": "show_Candidate_Victorious_in_Election()", +"1645f0cb": "_mintIdentityToken(address,address)", +"16468fe2": "mintEndYear()", +"164745c5": "presaleendTime()", +"1648371d": "bboBalance()", +"1648be60": "lockSupplierAndLockPosition(address,address)", +"1648f38e": "createExchange(address)", +"16495308": "setReceiver3()", +"16496a15": "onceAddTime()", +"1649b76d": "maxDexSize()", +"1649cdcd": "testGetItemStore()", +"1649d72b": "proposeNewNotary(address)", +"164a009e": "WHITELISTING_DURATION()", +"164ba24b": "Payments()", +"164c9bf0": "Trust()", +"164ce703": "useless(uint256)", +"164ceb70": "getTradeByReferenceCode(bytes32)", +"164d3f3a": "Redeem(string,string,address)", +"164e68de": "withdrawFees(address)", +"164f81c3": "confirmAddress(address)", +"164fa4ef": "withdraw_token(uint256)", +"1650533f": "distroyIssuerToken(uint256)", +"16511a67": "removeHodler(address)", +"16512624": "setAgonValues(uint256[5])", +"16514052": "setPropertyDAppContract(address,bool)", +"1651f29a": "redeemForAllFeeWindows()", +"16521a2b": "getGameJackpot(uint256)", +"1652a9d3": "StartPeriod(uint256,uint256,uint256)", +"1652b365": "Xenith()", +"1652e7b7": "getAssetData(address)", +"1653441c": "donate(string,string)", +"16534bfc": "SKRToken()", +"16537a85": "makeschoolToken()", +"1654474b": "submitSellOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", +"16552393": "creatorAddr()", +"1655a451": "PotPayout()", +"1656df0a": "_5_avto(uint256)", +"1658d496": "TamasCoin()", +"16597742": "announceWinner(uint8)", +"1659aecc": "timeoutYEnabled()", +"165a0e03": "channelsLimit()", +"165b22c1": "claimNxc()", +"165b2644": "getDepositN(address,address,uint256)", +"165b9ad0": "MOMO_FOUNDATION_WALLET()", +"165c4a16": "multiply(uint256,uint256)", +"165c86df": "rewardsWithdrawalRecipient()", +"165ca484": "USDDigital()", +"165cfea3": "TheImmortals()", +"165d35e1": "getChainlinkToken()", +"165db404": "AdvisorsAndPartnersMinted(address,address,uint256,uint256)", +"165e2eea": "setFund(address,string)", +"165f7d38": "buyIntoSyndicate()", +"165ffd10": "restart(bytes32,bytes32)", +"16603758": "setUserCategory(address,uint256)", +"16618e61": "ICOweek3End()", +"16628014": "setBitcoinRate(uint256)", +"1662da6a": "setWhitelisterAddress(address)", +"1663f4ee": "SplitEqual(uint256)", +"166428c0": "PoolSubmitted(address,uint256)", +"16643430": "setRateEarlyStage4(uint256)", +"1664b9cf": "create(uint8,uint8,uint64,uint64,uint64)", +"16654268": "getName(address,address)", +"1665e6b3": "approveOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,bool)", +"1666b514": "RipeXToken()", +"16670bcd": "resolveDispute(uint256,uint256,uint256,uint256)", +"16671990": "minCapMain()", +"166728cb": "feesend()", +"1667504e": "updateTitleTransfer(string,string,string)", +"1667590d": "GenesisRewardPerBlock(address,address)", +"1667d763": "changeRegulatorStatus(uint8)", +"16685890": "huntingPrice()", +"1668603f": "PFXTestCoin()", +"16687369": "chargeProtocolFee(address,address,uint256)", +"16691869": "addClient(address,address)", +"16694dd9": "isReportingActive()", +"166a3952": "createVoter(address)", +"166bf1b0": "createC1(uint256)", +"166c4b85": "len(bytes32)", +"166d3bbf": "payOutJob(address,bytes32)", +"166d561a": "FatPeople()", +"166d91fd": "FOUNDATION_RESERVE()", +"166dc43e": "setManagementProxy(uint32,int256,address)", +"166e55d9": "computeStablecoinFee(uint256,address)", +"166eb4cb": "Put(bytes32,uint256)", +"166ee1de": "newIdentityL1(address,bytes32,bytes32,bytes32,bytes32,uint256)", +"16706514": "MyDice75()", +"16708bc6": "metadataSize()", +"1670cb6f": "oracleA()", +"1671055d": "etherollBeneficiaryAmount()", +"16713b37": "receivedTotal()", +"1671719d": "MINIMUM_LOCK_AMOUNT()", +"16730131": "addHpbNodeWithString(address,string,string)", +"16735925": "setAllowErc20OwnerClaim(bool)", +"1673f758": "FundTransfer(address,uint256,bool,uint256)", +"1674bade": "setMinDuration(uint256)", +"16754c55": "createArea()", +"1675f455": "tokenUri(uint256)", +"1676503e": "updateParameters(address,uint256,uint256,uint256,uint256,uint256)", +"16772492": "HngCoinSale(uint256,string,string)", +"16772b6a": "SentPrizeToWinner(address,uint256,uint256,uint256,uint256,uint256)", +"1677496d": "withdrawART(uint256)", +"16783ba7": "assertEq18(bytes18,bytes18,bytes32)", +"16786ae2": "createMineral(bytes32,uint256)", +"1679657a": "isTrustedBy(uint256,address)", +"167aee44": "rewardPoolShare(uint256,bool)", +"167d219e": "ROLEX()", +"167d3e9c": "SetOwner(address)", +"167dde94": "affirmationWithinLimits(uint256)", +"167ddf6e": "getArtwork(uint256)", +"167e7921": "setTotumAllocation(address)", +"167f66c0": "startOfDay(uint256)", +"167ff46f": "openSale()", +"16801d17": "getBattle(string)", +"1680a070": "setPlotDataMultiple(uint256[],string,string,string,string)", +"1680f70d": "transferlottery(address,uint256,bytes)", +"168110f3": "Tokens_For_Sale()", +"16812d5b": "retreiveFinalResult()", +"16815137": "Poge(uint256,string,string)", +"168179e2": "ESCBCoin(address)", +"16821349": "ETH_RECEIVED_MIN()", +"16829de5": "changeEthPrice(uint256)", +"1682fa59": "GetMaximumBet_Ether()", +"16831877": "BMICOAffiliateProgramm()", +"16842582": "createLottery(string)", +"1684844b": "registerNameXaddr(string,bool)", +"1684c715": "TaskCompletedEvent(uint256)", +"168656e1": "OwnerWithdrewERC20Token(address,uint256)", +"16868752": "buyTicketWithRef(address)", +"16870257": "getTileDescription(uint8,uint8)", +"16876976": "addrTeam()", +"16878b07": "activeVerifiers()", +"16879344": "commitPeriodActive(bytes32)", +"1687f112": "left54(uint256)", +"168936a0": "Remain()", +"1689eb38": "batchSendTokens(address[],uint256[])", +"168a80d3": "deleteAllTopics()", +"168b3c69": "CertificationDeleted(string,address,uint256)", +"168b4a53": "changeColorBlack()", +"168b6231": "getCoinIds()", +"168b912d": "numOfDeclaredPublicOfferingPlans()", +"168bb279": "insertAllowedTokenInternal(address)", +"168c8120": "COMMISSION_DIV()", +"168cd7ae": "tokenQuota()", +"168d71e5": "mediaTokensSymbol(address)", +"168e41e8": "getHash(bytes32,uint256)", +"168ecec5": "revokeOperatorByPartition(bytes32,address)", +"168f3260": "calculateMinPriceForNextRound(uint256,uint256)", +"168f788e": "reRollMove(uint256,uint256,uint256)", +"168fb79d": "RANGESTART_7()", +"16907c12": "updatePlanetLiason(uint256,uint256,uint256,string)", +"1691473c": "getProducts(address)", +"16915743": "proofLink()", +"1691d6cb": "checkIfFrozen(address,address)", +"16922822": "getWarriorOwners(uint32[])", +"16925ee2": "changeTradingEnabled(bool)", +"1692823d": "getViewDatasCount()", +"16928a44": "updateProjectDescription(string,bytes32)", +"16937d56": "addressMoneyBalance()", +"1693b85d": "allowDelegate()", +"16948e9b": "changeSettings(uint256,uint256,uint256,uint256,uint256)", +"169509b6": "getOraclizedIndices()", +"1695533d": "signLease(string,string)", +"16958c79": "registerBid(int256,int256,int256)", +"1695d97c": "removeRange(uint256)", +"16962849": "changeBalanceReplenishmentStorage(address)", +"16962bc1": "setAllocationClosed(uint256)", +"16962d7f": "_createKittyToken(address,uint256,uint32)", +"16963872": "tokenPriceInitial()", +"16967407": "getAdministrator()", +"1697283a": "getRequesterLock()", +"169742f6": "ebyteBalance()", +"16985349": "standardGrowthRate()", +"1698755f": "claimToken(address,uint256)", +"1698933d": "myStrongHand()", +"1698c7ff": "removeOrc(address)", +"16992af5": "answerCompare(bytes32,bytes32)", +"16993811": "ptxHead()", +"16996713": "WXGToken()", +"169a7c3a": "eventWebsite()", +"169b15fa": "TechZU()", +"169b7012": "userToAccounts(address,uint256)", +"169b9890": "signByGroom()", +"169bd52d": "MyTestToken(uint256,string,uint8,string)", +"169bf233": "reportDoubleSpend(bytes32[],bytes32[])", +"169c13ed": "pendingTransaction(address)", +"169c4733": "feeForOrder(uint256,uint256)", +"169d16f4": "authorizerTwo()", +"169dc72c": "MBEToken(address,address,address)", +"169e18d9": "currentHitTotal()", +"169e2633": "tokenOwnerAdd(address)", +"169ea2f8": "dropCoins(address[],uint256)", +"169f66df": "monetarySupervisor()", +"169fab66": "TIXToken(address)", +"169ff375": "RANGEEND_2()", +"16a0390b": "BountyAmount()", +"16a0ea3c": "totalLockedSupply()", +"16a11ae5": "testFailPullWithoutTrust()", +"16a124e8": "setKeys(uint32,int256,bytes32,bytes32,uint32)", +"16a25cbd": "ttl(bytes32)", +"16a27019": "allowedAddr()", +"16a2a0cc": "setBountyFactory(address)", +"16a398f7": "effectiveBalance(address)", +"16a3feca": "_canOperate(address)", +"16a50228": "minLimitPublicFirstSale()", +"16a5290c": "purchaseWeapons(uint256,uint256,uint256,uint256)", +"16a54085": "setSideBetPercentage(uint256)", +"16a5410c": "Joined(address,uint256,uint256)", +"16a558d0": "_generateRandomhashNumber(uint256)", +"16a69a9a": "getDiscountStage()", +"16a7859b": "listService(uint32,string,uint256,uint256,address,address)", +"16a8e046": "setLuckThreshold(uint256)", +"16a92f39": "getDocByIndex(string,uint256)", +"16aa8508": "_leftSupply()", +"16aab1bf": "fundingEndTimestamp()", +"16aabcbd": "onlyAdvisorsCanDoThis()", +"16ab2b03": "getBid(address,uint256)", +"16ab4b17": "checkPoolsEnd()", +"16abdf7d": "setB(uint8)", +"16ad42ad": "holderList(uint256)", +"16ada547": "time()", +"16ae10f5": "USD_SOFT_CAP()", +"16ae4ec4": "FT_OPERATIONAL_FUND()", +"16ae5607": "KakToken(address,uint256)", +"16ae7944": "UpdateRateAgent(address,address)", +"16aee925": "saleDuringRestrictedPeriod()", +"16af001c": "calcBonusAt(uint256)", +"16af87a9": "getSavedReferral(address)", +"16afdf8e": "release(address,address,uint256,uint256)", +"16afe218": "setarg_1(uint256)", +"16b07323": "winsReported()", +"16b08755": "minorEditsAddr()", +"16b0c11e": "upgradePrefixPreSignedSecond(uint8,bytes)", +"16b0cc2d": "Extend(uint256,uint256)", +"16b0dc06": "getCitizenLevel(address,address)", +"16b0fc55": "removeAdmin(address,string)", +"16b14e19": "SingularityTest34()", +"16b15135": "getEscrowCount()", +"16b1f6b3": "CROWDSALE_PHASE_1_START()", +"16b208eb": "_clearApprovalAndTransfer(address,address,uint256)", +"16b21dfb": "getLockAccount(address)", +"16b2cd34": "airdroptotal()", +"16b3299d": "printListOfBooks()", +"16b33e74": "shuffleNDecks(uint256)", +"16b3d4ae": "_approved(address,uint256)", +"16b40451": "changeRandao(address)", +"16b4e79c": "setCampaignPriceById(bytes32,uint256)", +"16b57509": "killBounty(uint256)", +"16b60f2c": "mintMAYToken(address,uint256)", +"16b64898": "GEN0_TOTAL_COUNT()", +"16b65fac": "BITXOXO()", +"16b66016": "tier1Timestamp()", +"16b6824c": "CryptoWarriorCore()", +"16b6c75b": "changePeriods(uint256,uint256,uint256,uint256,uint256)", +"16b6c7bd": "withdrawUnallocatedRestrictedToken(uint256,bytes32)", +"16b78191": "decrementValue()", +"16b7d8f2": "VIP_MINIMUM()", +"16b86ed8": "amountOfMeatInUnicorn()", +"16b87739": "setCrowdsaleActive(bool)", +"16b8aa6b": "secondStageDatetime()", +"16b96f05": "addTotalDividendPoints(uint256)", +"16ba7197": "WITHDRAW()", +"16baa937": "AddMinter(address)", +"16bac350": "overthrow(string)", +"16bac7e5": "lockBet()", +"16bb1f6a": "isOriginalRoundContributor()", +"16bb6c13": "setBaseToken(address)", +"16bdb7b6": "stage3_price()", +"16bf3537": "SocialMediaIncomeCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"16bf4657": "getNumPayments()", +"16bfe25c": "emergencyRefund()", +"16c05aa2": "depositMoney()", +"16c0acde": "CryptoStars()", +"16c12746": "getAllOwners()", +"16c19739": "getPosition(address)", +"16c1df06": "WorkerPool(address,string,uint256,uint256,uint256,address)", +"16c24739": "uintInArray(uint256,int256,uint256[],uint256)", +"16c27c4a": "UNITSimplePaymentGateway(address)", +"16c3002e": "allowanceForContract(address)", +"16c38b3c": "setPaused(bool)", +"16c393a6": "oraclizeBytes()", +"16c45c7a": "areStringsEqual(bytes32,bytes32)", +"16c4fcbb": "gotransfer(uint256)", +"16c519ee": "hasRecentPrices(address[])", +"16c5792d": "transferCurator(address)", +"16c6ec92": "ChangeTarget(bytes32,address)", +"16c6f470": "addNewRaz(uint256,uint256,uint256,uint256)", +"16c72721": "forked()", +"16c72861": "nextFrontWindowAdjustmentRatio()", +"16c7f79f": "testTransferTokenAllowanceAndReturnFunds()", +"16c85710": "buyMasternode()", +"16c9b08d": "WenWanCoin()", +"16ca3b63": "increaseApproval(address,uint256,bytes)", +"16cac8c7": "Why(string)", +"16cb9100": "ETHER_MIN_CONTRIB()", +"16cb9a01": "assertFalse(bool,bytes)", +"16cba9d3": "checkEtherBalance()", +"16cbf987": "changeMemberGroup(uint256,string)", +"16cc7699": "getHistoryRecord(uint256)", +"16cc9022": "_newWallet(address)", +"16cd84c1": "AltCrowdsalePhaseOne(address,address,address,address)", +"16cdf170": "CoinTransfer(address,address,uint256)", +"16ce8a69": "setBuilding(uint256,uint256)", +"16ce8c98": "changeBiteCost(uint256)", +"16ceaa95": "getStageCount()", +"16cf1651": "setArbiters(address,address[])", +"16cf8f77": "createDroid(uint256)", +"16cff09c": "ETHER_MAX_CONTRIB_PRIVATE()", +"16cff511": "setFunctionFivePrice(uint256)", +"16d05042": "finalLoser()", +"16d061a5": "gettime()", +"16d0ba10": "putOwner(bytes32,uint256,address,bool,string)", +"16d190e3": "maxWin()", +"16d2bc5c": "getPlayerRoundInfoByID(uint256,uint256)", +"16d390bf": "addOwner(address,address)", +"16d3aa92": "removeTransferRate(address[])", +"16d41a5a": "setNFTContractInfo(string,string,string)", +"16d45615": "test_0_ensureDefaultRulesSetToFalse()", +"16d4c77c": "removeBlockeddUser(address)", +"16d4db19": "teamCompanyLock()", +"16d544f1": "resetActive()", +"16d63f17": "simFirstObligation(bytes)", +"16d64127": "_setReserveHolders()", +"16d6be4c": "buyOfferedStakes(address,address)", +"16d873cf": "TransferOddEther(address,uint256)", +"16d8b5a2": "ferromContract(uint256,string)", +"16d8f16c": "updateTentativeWinningPayoutDistributionHash(bytes32)", +"16d9356f": "oraclize_query(string,string[4])", +"16d93f3d": "getAddressAnswerKeccak256(uint256)", +"16d960b5": "createThing(bytes32[],bytes32[],uint88)", +"16d99cb0": "NewContribution(address,uint256,uint256)", +"16da1d50": "transferdissolvedFrom(address,address,uint256)", +"16da7d91": "reorganize(uint256,address)", +"16dabbf6": "getWalletSetting()", +"16db5172": "getStaker(bytes32,address)", +"16dc9704": "numberOfVestedContracts()", +"16dd68b1": "getFirstAuctionsEndDate()", +"16ddcef5": "WillCoin()", +"16de035a": "EtherBB()", +"16dfae3c": "setGenaroDevMultisig(address)", +"16e02e2a": "inventoryLocked()", +"16e10d6a": "ICOInvestorsAmount()", +"16e1286d": "BEXToken()", +"16e17852": "TAO()", +"16e1aed4": "setPartitionControllers(bytes32,address[])", +"16e242ca": "burnTotalSupply(uint256)", +"16e27349": "getFeeRecipient(int256,int256)", +"16e32d82": "_burnPlayerTokensFrom(address,uint256)", +"16e33aa2": "getData_27()", +"16e3cad0": "HAYATO_MAX_CARGO()", +"16e3cfc7": "testStoresUser()", +"16e457f0": "sellAll()", +"16e4822b": "calculateEarning(address,bytes32,uint256,uint256,uint256,uint256,address,address,bool)", +"16e4f677": "UpdateICOAddress(address)", +"16e55626": "getDogName(address)", +"16e58a1b": "detach(uint32,uint32)", +"16e7371f": "LiquidDemocracyController(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"16e74f09": "getWinner(uint256[])", +"16e7c80d": "getTierStartAndEndDates(address,bytes32,uint256)", +"16e807c4": "addBid(address,uint256,uint256)", +"16e82dcf": "MMaker()", +"16e85b2e": "scapeHatch()", +"16e8f2c4": "Rectangle(address,address)", +"16e93702": "addTeam(bytes32,bytes32,address,bytes32)", +"16e9fe81": "resetValue()", +"16ea0728": "totalBuriedValue()", +"16eb6603": "right50(uint256)", +"16ebd6d5": "devResWithdrawal()", +"16ebf77d": "revealConsensus(address,bytes32)", +"16ecc686": "setup(address,address,uint256,uint256)", +"16ece9db": "GetContributionInfo(uint16,uint16)", +"16ed2ae4": "ONE_TOKENS()", +"16ed36fb": "EscapeHatch()", +"16ee94bf": "giveArraywords(string)", +"16eea70f": "RaffleResult(uint256,uint256,address)", +"16eebd1e": "launcher()", +"16ef376b": "getPhase(uint256)", +"16eff85d": "sendRefund(address,uint256,uint256,uint256)", +"16f0115b": "pool()", +"16f0e221": "configTimeMax()", +"16f25d16": "LindaCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,uint64,uint64)", +"16f33fc2": "getLockupCell(address)", +"16f36d74": "withdrawEtherHomeLocal(address)", +"16f38b63": "heroAsset()", +"16f3cb5e": "__kill()", +"16f4acf8": "changeHolder(uint256,address)", +"16f4d022": "tier()", +"16f573e6": "addtoblacklist(address)", +"16f60f5f": "SPIKE()", +"16f898fe": "LogCompanyTokensTransferred(address,uint256)", +"16f8e09b": "privateSaleEtherCap()", +"16f9ce49": "_slotCommitNew(address)", +"16fa2f7f": "getUsernameByAddress(address,address)", +"16fa99be": "totalSuplay()", +"16fc1a0b": "FaFengToken()", +"16fc1e64": "resetCreateShareToken()", +"16fc68cb": "PrivateSaleBuy(address)", +"16fcdb84": "minBuyPrice()", +"16fd381a": "settleBet(uint256)", +"16fd48a1": "ThreesigWallet()", +"16fd9869": "DepositProjectProfit()", +"16fed3e2": "receiverAddress()", +"16fef995": "sundown()", +"16ff1c76": "appreciateTokenPrice()", +"16ff5b87": "getNumProjects()", +"16ff83bf": "setLedger(uint256)", +"17011011": "BookERC20EthV1()", +"17019fb4": "givePoint(uint32,int256,address,bool)", +"1701feaa": "GobizToken()", +"1702ef0c": "getProposalOrganization(bytes32)", +"17031f9c": "advisersPeriodLength()", +"170381fe": "setIcoContractAddress(address)", +"17038cb2": "partialForwardFunds(uint256)", +"1703a018": "quorum()", +"1703b7fd": "eth4DivsOwing(address)", +"1703c11a": "setFundManagementContract(address)", +"17040713": "WithdrawRequest(address,uint256)", +"1704c271": "getShipCount()", +"170594c6": "totalTeamSupply()", +"1705a3bd": "migration()", +"17075992": "lastThreads(uint256)", +"1707e05a": "loanRequested(bytes32[8],bytes,bool,uint256)", +"170815ff": "InTokenTest10(uint256,string,uint8,string)", +"17089563": "rand(uint256,int256,int256)", +"1708a723": "setRootAddress(address,address)", +"1708d725": "unregisterFromPool(address)", +"1708f617": "gasPriceForOraclize()", +"170ab405": "setSize(uint256)", +"170ad53c": "totalUnclaimedTokens()", +"170b0782": "setSystemAddress(address,address)", +"170b99d9": "trivial()", +"170bdb36": "inPermissions(address)", +"170c28a2": "burnlvlToken(address,uint256)", +"170e1dcb": "bountyVault()", +"170e2070": "unfreezeAccounts(address[])", +"170e6d4c": "getLuckynumber()", +"170eb245": "secondTeamWithdrawal()", +"170eeb0f": "investmentRefunded(address)", +"170ff3e1": "addExtension(address)", +"171060ec": "setLocker(address)", +"17111edb": "DevvotePrefundClosed()", +"1712193f": "_requireERC721(address)", +"17124ed9": "LogCratePurchase(address,uint256,uint32)", +"1712649b": "rlc_reserve()", +"17126586": "getOwnerPercentage(address)", +"1712a72f": "ProofPresaleToken()", +"1712c489": "setDates(uint256,uint256,uint256)", +"17135b7b": "transferTokents(address,uint256)", +"17140bcf": "isSecond(bytes32,uint8)", +"1714b0c5": "testContract(uint256)", +"17154004": "checkIfRefundAvailable(bytes32)", +"17155659": "createBadge(string,string,string)", +"17158228": "signupUserWhitelist(address[],uint256)", +"1716b7f0": "longTermBudgetAllocation()", +"1716f47e": "getCurrAmount()", +"171755b1": "getQuote()", +"1717bb12": "VoxelPlaced(address,uint8,uint8,uint8,uint8)", +"171827e9": "tokenTransfertoKYC(address,address,uint256)", +"17183ca3": "maxCallFrequency()", +"17186ca3": "GetLastBetUser(address)", +"17191704": "refundToken(uint256)", +"17193854": "SetAngelCardDataContact(address)", +"1719b727": "_getTokenAmount(uint256,uint256)", +"1719d726": "stopBallot()", +"171c0077": "compare(uint8,uint256)", +"171d833c": "test_twoValidEqAddress()", +"171d9243": "TokenOfEightSilver()", +"171da314": "showPendingAdmin()", +"171dde3f": "devsTokens()", +"171dfb4f": "target_hit()", +"171ef0b2": "exchange_rate()", +"171efc3f": "refreshWaitPairBetIDsByCancelBet(uint256)", +"171fc143": "controllerLocked()", +"171fcb5a": "revealNumber(address)", +"17203e1d": "makeProfit()", +"1720684a": "whitelistBonusClosingTime()", +"1720ce1f": "addTxToRegistry(bytes32,uint256,uint256,uint256)", +"172110b4": "getCountTransactions(address)", +"1721117b": "UpgradeabilityProxy()", +"17214a8a": "GenesisInitialSupply(address)", +"17216484": "genericSender()", +"17219f03": "Ehfirst()", +"1721ebba": "mokenNameExists(string)", +"1722a8b0": "rateAngelDayEnd()", +"172325c7": "refundDuration()", +"17235779": "Tutorial()", +"1723934d": "setAvailableSupply(uint256)", +"17241962": "Zerk()", +"172419a8": "getCapByStage(uint256)", +"1724cf8a": "isCARegistered(address)", +"17255086": "blackjack(uint256,uint256)", +"1725b847": "voteAgree()", +"1725d8aa": "getOwnedShipAtIndex(address,uint256)", +"1726cbc8": "releasableAmount(address)", +"1726d2c5": "getRefPercents(uint256)", +"172727c0": "lastCheckBlockNo()", +"17274abd": "setBtcTokenBoughtAddress(address,address)", +"172775ef": "generateOrderWithPayeeByAdmin(address,address,address,uint256,string,string,string)", +"172820de": "KaliToken()", +"1728ac68": "SPTOKEN()", +"1728dd43": "GameFinished(address)", +"1728fb46": "ROLE_LOCKUP()", +"172960d4": "LogWhitelistAdd(address)", +"17299c04": "setDisputeFee(uint256)", +"172a735c": "updateDocumentPoll(bytes32)", +"172a9438": "ArsenalvsManCity()", +"172ab60c": "getPositionFromHolding(uint256)", +"172ac1ea": "isInvoice(bytes32)", +"172b319d": "GOOLA_UNIT()", +"172b95e1": "get_transaction_by_row(uint256)", +"172c453b": "setInventory(address)", +"172c61e6": "totalAdoptedAxies(uint8,bool)", +"172c9a0e": "inspire(address,uint256)", +"172cf717": "left55(uint256)", +"172d8a30": "setDirectorLock(uint256,uint256)", +"172e0456": "set_property_contact(uint256,string,string,string)", +"172e1e52": "priceView()", +"173029d7": "derivePayoutDistributionHash(uint256[])", +"173067a3": "priceStart()", +"1730e216": "setStartLockPeriod(uint256)", +"17324249": "playNumber(uint256[])", +"17324543": "nationalitiesOf(address)", +"1733043f": "getAllChildIds(bytes32)", +"1733cbb5": "ConfirmationNeeded(bytes32,address,uint256,address,bytes)", +"1733fea0": "SKYST()", +"17342859": "batchSetApprovalForAll(address[],bool)", +"17342d36": "init(address,address[],uint256[],address,string)", +"17349ad5": "TokenDecimals(uint256)", +"17356c22": "getVirusLength()", +"17367bc8": "VDN(uint256,string,uint8,string)", +"173817b6": "checkSellerOffer(address)", +"173825d9": "removeOwner(address)", +"1738c3ff": "removeVendorById(uint256)", +"17393f04": "PURCHASE_DIVIDER()", +"173975aa": "SetENGCommunityAddress(address,address)", +"173a0615": "Dealer()", +"173a21f8": "changeWethContract(address)", +"173a2b5c": "proposalAmount()", +"173a48a4": "distributeFUDD(address[],uint256,uint256)", +"173a4b70": "newProposal(address,uint256,bytes32,string)", +"173a705f": "transmitStatus()", +"173c9d27": "batchTransferForDifferentValues(address[],uint256[])", +"173cb7de": "getNumReleasesForNameHash(bytes32)", +"173d2795": "train1(uint256)", +"173d6ca2": "tier1Reached()", +"173dbd4e": "GoCryptobotCoinCore()", +"173dc741": "addBonusToUser(address,uint256,uint256,uint256)", +"173e49b7": "BoomstarterToken(address[],uint256)", +"173ea238": "changeBtcOracle(address)", +"173ea341": "isPrivilegeAddress(address)", +"173f22f0": "rmin(uint128,uint128)", +"173fc012": "preSignedCheck(bytes8,address,address,uint256,uint256,uint256,uint8,bytes)", +"173febeb": "Send69Wei()", +"17409b42": "registrarAlumno(uint256,string,string,string)", +"1740b479": "gameManagerSecondary()", +"1741526f": "getContractPayout()", +"17415d50": "_deleteRequest(address,address)", +"1741c48e": "getNextPoliceNode(address)", +"17421c8c": "withdrawAmountToken(address,uint256)", +"17431634": "LevelUp(uint256,uint32)", +"17436b1e": "RoundOpen(uint256,uint256,uint256)", +"1744215a": "EIP20()", +"1744cfe4": "GetLoansLenght(bool)", +"1744d5a5": "StageBonusUpdated(uint256,uint256)", +"17453358": "date01Oct2018()", +"1745422c": "addTx(address,uint256,string)", +"174609f8": "UNC()", +"17462891": "proofOfShit()", +"1746bd1b": "getGameInfo()", +"17473975": "breakDurationBetweenPresaleAndICO()", +"1747af0d": "AdminOwnershipTransferred(address,address)", +"1747b48b": "Reveal(uint256)", +"1747dfd4": "ContractPlay()", +"17484b0c": "RSOC()", +"17490da8": "modifyTrialDeadline(uint256)", +"1749bdf1": "getClassRank(uint32)", +"1749c16f": "isEnded(uint16)", +"1749e462": "getOwnersTokenList(address)", +"174a363a": "getpro(uint256)", +"174a6277": "getTxDataBlockNumber(address,bytes32)", +"174a84d8": "BetComplete(bool,uint256,uint256,uint256,address)", +"174b0093": "createDefaultGen0Zodiac(uint256,address,uint256,uint256,uint256)", +"174b9fa4": "getCurrentDayDepositLimit()", +"174c2002": "burnAndDist()", +"174cd9b3": "lastBlock_a19()", +"174dcea8": "getBalanceAndHolderByIndex(uint256,address)", +"174e7d55": "isReadyToAction(uint256)", +"174efd12": "minBidValue()", +"174f51eb": "winOdd()", +"174fa48e": "distributeBTCG(uint256,address[])", +"1750f564": "newProposal(bytes32,address,uint256,uint8,uint256,bytes)", +"1751dc90": "createMultiplePhoenixes(uint256[],uint256[],uint256[])", +"175207b7": "_readBlockBeneficiary(uint256,bytes)", +"17528c7f": "ReceiverAddressSet(address)", +"175323a8": "contributeETH()", +"1753a655": "singBy(address)", +"1753d61c": "AirdropToken()", +"175466ee": "proofVerifyFailed()", +"17548962": "SPTI()", +"17549ff0": "lovelock_price_LOV()", +"1754bd8e": "minerState(uint256)", +"1754de57": "sendleftmoney(address,uint256)", +"1755ff21": "poolAddress()", +"1756ffd9": "addMonsterClassBasic(uint32,uint8,uint256,uint256,uint8,uint8,uint8,uint8,uint8,uint8)", +"17570e80": "logReportingParticipantDisavowed(address,address)", +"1758078b": "trader()", +"175892b4": "previligedSubApproval(address,address,uint256)", +"17597b0f": "getLockedAmount_contributors(address)", +"175a0061": "install()", +"175a8bf4": "MigrationAgent(address)", +"175b0284": "closeChannel(uint256)", +"175b859d": "Bitwincoins(uint256,string,string)", +"175baaf1": "accrual(uint256,address)", +"175beead": "advisoryTokens()", +"175c6709": "TransferStatus(address,bool)", +"175c8640": "ZEEX()", +"175c9885": "POSSCOIN()", +"175d27e0": "MONTH_IN_SEC()", +"175ebfc7": "AdoptionOffered(bytes5,uint256,address)", +"175f6d9c": "JustAnIndex1()", +"17602ddf": "isFlowerAuction()", +"1760705f": "setAssetContract(address)", +"1761af6d": "upgrade(address,address,address,address,address)", +"1761eab4": "buyLong(address[2],uint256[5],uint8,bytes32[3])", +"17623c41": "isAllowedToParticipateNow()", +"17623e5b": "unauthorizeManager(address)", +"17634514": "creationBlock()", +"17634ec8": "freezeAccounts(address,bool)", +"176416ed": "getVotesBetween(uint256,uint256,uint256)", +"1764250a": "verifyWithdrawSignatures(uint256,address,address,uint256,bytes,bytes)", +"17645315": "migrate_participant(address)", +"1764dc3d": "GiveTokenPerm(address,address,bytes32)", +"17653b6e": "setChainRoot(address)", +"17655f6c": "transferOtherERC20Assets(address,uint256)", +"17659a1d": "Undelegate(address,uint256)", +"1766f424": "unsoldAllocationDelay()", +"17671962": "calcTotalWinnerKeys(uint256)", +"17674544": "deleteEntry(string)", +"17674e4d": "logMarketMigrated(address,address)", +"17676e4c": "valueSet(string,bytes)", +"1767da08": "addBalanceForOraclize()", +"176854f6": "setLastJadeSaveTime(address)", +"176898c9": "setRefundStatus(bool)", +"1768b436": "ETCSurvey()", +"1768fd6f": "getMaxLockAmountAllowedByLtd()", +"1769511c": "fidaTokenAddress()", +"1769af29": "removeFromOwnerlist(address)", +"1769d552": "indexextend()", +"1769f049": "fee_balance()", +"176b0eac": "gcStartTime()", +"176b63f4": "seedSourceA()", +"176b6742": "EtherFlip()", +"176b866f": "alterBankBalance(address,uint256,bool)", +"176cd40a": "PUBLIC_OFFER_SUPPLY()", +"176d0780": "createMicroWallet(uint256,uint256)", +"176e5f32": "withDrawMoney()", +"17700f01": "disableTrading()", +"17701ee6": "mission()", +"1770616c": "tier3LOT()", +"17711a46": "setTokenTimelockFactory(address)", +"1771b7dc": "bids_burned_count()", +"1771d4d4": "setAliasPrice(uint256)", +"1771ece6": "updateHouseFee(uint8)", +"17727a00": "withdrawCapital()", +"1773234b": "kscBatchBurnWhenUseInSidechain(address[],uint256[],string)", +"17733eac": "yank(address[],address[])", +"177378f0": "testRegularBuy()", +"17738cef": "placeEMONTBid(address,uint8,uint256)", +"177413da": "bet(bytes32)", +"1774218e": "CRAToken(address)", +"17743338": "MakeClaim(address)", +"17749a16": "adminRefund(address,address)", +"1774df3e": "distributeMAGGIE(address[],uint256,uint256)", +"1774e646": "setUint8(uint8)", +"1774f6c6": "confirmPurchase(uint256,address,address)", +"17753c44": "DIGTREX()", +"17759493": "TotalPoSRequests()", +"1776683e": "payDev(address)", +"1776b437": "countInvestorsRefundedInCrowdsale()", +"177766e6": "getOptionChain(uint256)", +"17776b86": "ExhibitToken()", +"1778f1df": "ICOStartDate()", +"177a9e9d": "refundFor(uint256)", +"177b3010": "registerProject(string,string)", +"177b979e": "initiatecontract()", +"177bd86e": "syncSubscriptions(address[],string[],uint256[])", +"177c75ae": "offerIndexedPieceForSale(uint256,uint256)", +"177cf218": "UNIX_DAY()", +"177cfaa2": "teamTwoShares()", +"177d8ee4": "emitSkillsSet(address,uint256,uint256,uint256)", +"177dc9e5": "getCompte_15()", +"177dcde9": "_transferTokens(address,uint256)", +"177e0f71": "setLockedWalletReleased(address,bool)", +"177e6ae4": "ETHERFLEXCrowdsale(address,address)", +"177ea52d": "buyTokensSigned(address,bytes,uint256,uint8,bytes32,bytes32)", +"178003e1": "BCTopCraftCannabis()", +"178021e3": "saleFee()", +"1780eb18": "charityFundations(uint256)", +"17813d37": "BitGCoin(uint256,string,uint8,string)", +"178228f1": "enterGame(address,uint256)", +"1782a789": "removeContact(bytes32)", +"17834d36": "isReachedHardCap(uint256)", +"178394bd": "LockedUnsoldTokens(uint256,address)", +"178407ca": "Board(address)", +"178450bd": "EbocoinToken()", +"1785478c": "_preValidatePurchase(address)", +"1785f53c": "removeAdmin(address)", +"1785f8dd": "PreTgeDisable()", +"1786351b": "AllbesticoContract()", +"1786e362": "orderTokensOf(address)", +"1787119c": "spendlarge(uint256,uint256,uint256)", +"17880b67": "getTotalBorrowingMonsters()", +"17888efc": "projectTokens()", +"1788de80": "enableTokenTransfers()", +"17897fcd": "RedRabbitToken()", +"178a8c8d": "accountsHolding(uint256)", +"178a8f34": "lotIdsByAddress(address)", +"178a9e2e": "tixGenerationContract()", +"178a9ffb": "HarborCrowdsale(uint256,uint256,address,uint256,uint256)", +"178ab6bb": "startICOStage8()", +"178af534": "createTokensWithoutReffer()", +"178afb39": "setSalesState(bool)", +"178b6de6": "getAllTokens(address)", +"178b8baf": "printCoins(uint256)", +"178b9d1a": "closeTicket()", +"178c02e9": "prometheusSoldCount()", +"178c17f0": "_createRandomNumber(bytes32,uint256)", +"178c4e40": "proof_of_public_key1()", +"178cec5c": "setBAU(bytes32,address,uint256)", +"178e6079": "APP_ADDR_NAMESPACE()", +"178ef307": "numberOfTokenHolders()", +"17904743": "bitpaintingStorage()", +"17905b2a": "Taur()", +"1790bd17": "contributorIndexes(uint256)", +"179101a6": "DECoin()", +"17916537": "clearDistributionDetail()", +"179194e1": "Bitnova()", +"1791cf01": "arr(uint256,uint256,uint256,uint256,uint256)", +"1791db21": "tokenMult()", +"1792b0bc": "transferTokens()", +"1792cc61": "tokenDecimalPlaces()", +"1793140a": "setO1(address)", +"179381d8": "setICOController(address)", +"1793b0f2": "addRecord(bytes32,string)", +"1793c314": "lastChance(address,address)", +"1794164b": "killcontract()", +"1794a463": "changeDevFees(address)", +"1794bb3c": "initialize(address,address,uint256)", +"17958e75": "omegaToken()", +"17961d0f": "ord()", +"17968fc9": "doPurchase(address,uint256)", +"1796b2ca": "unspent_supply()", +"17974399": "changeWithRef(address,address,uint256,uint256,address)", +"1797552b": "approveansCall(address,uint256,bytes)", +"1797814e": "IADOWR()", +"1797ec8a": "totalCrabTraded()", +"17986d83": "setRefferalFee(uint256)", +"17993e2f": "IREC()", +"17997878": "totalOwned()", +"179a5480": "masterresellercontract()", +"179ac197": "setOraclizeContract(address,address)", +"179b1b70": "LogFinalize(uint256)", +"179b51b1": "lotteries(int256)", +"179b73da": "killBoardProposal(uint256,address)", +"179c537e": "setSaleContractDepositAddressVerified(address)", +"179d375c": "addToken(uint256)", +"179dd216": "calculateMarketPixelPrice(uint256)", +"179dfbf3": "getBettingStatus()", +"179e91f1": "tokensLockedAtTime(address,bytes32,uint256)", +"179ee8bb": "acceptLoan(address,address)", +"179ef331": "nameRegistered(bytes32,address,uint256)", +"179fc99f": "etherBalanceOf(address)", +"179ffe76": "getMovie(uint256)", +"17a081bf": "queryTimestamp(uint40)", +"17a23ec6": "TOKEN_scaleDown(uint256,uint256)", +"17a2aaa4": "WithdrawalPremature(address,uint256)", +"17a2c026": "setCampaignEndDateById(bytes32,uint256)", +"17a3a329": "GLBX()", +"17a40e92": "updateAsset(address,bytes32,bytes8,uint256,string,string,address[2],uint256[],bytes4[])", +"17a432f5": "getActualPriceOfCardOnCraftAuction(uint256)", +"17a523c1": "useInsurance(uint256)", +"17a5d4df": "minTransactionAmount()", +"17a5f8cc": "createRatePlan(string,bytes32)", +"17a601b5": "MAX_STACK_DEPTH_REQUIREMENT()", +"17a650cc": "enter_square(uint256)", +"17a66006": "stageBaseRate()", +"17a689f3": "SuperSkyNet()", +"17a7cd10": "weeksFromCreation()", +"17a7eb4c": "vote02NoCount()", +"17a7f4cc": "feedOnKitty(uint256,uint256)", +"17a7f53e": "PriceHKGChange(uint256,uint256,uint256)", +"17a7f9b2": "countOfAddresses()", +"17a87b80": "changeInitialPrice(uint256,uint256)", +"17a950ac": "actualBalanceOf(address)", +"17a96982": "pullBounty(uint256)", +"17aa2899": "toB32(address,bytes)", +"17aaaea7": "BaseAltCrowdsale(address,address,address,address,bool,uint256,uint256,uint256,uint256,uint256)", +"17aad447": "FOUNDERS_LOCK_START_TIME()", +"17ab6cbb": "getRedCards()", +"17ac195a": "devTokensWallet()", +"17ac410f": "mintedtokens()", +"17ac896c": "GlobalBusinessSystemToken()", +"17adeb7c": "setClientProviderUID(address,uint256)", +"17adfa08": "confirmOneBuy()", +"17ae1f6c": "commission1()", +"17ae1fc5": "getIsActive(address)", +"17ae5d88": "unPreIco()", +"17af4d8a": "removeRoleAll(string)", +"17afa8a3": "set_refererPercent(uint256)", +"17afd19a": "decrementDID(address,address,uint256)", +"17b2e350": "deletePermissions(address,address[])", +"17b3a34b": "_addIdentities(uint256,bytes32[])", +"17b3c7ea": "getAllProposalVotersAndVotes(uint256)", +"17b4c4d3": "META()", +"17b54069": "setRoundOne(bool)", +"17b591e5": "closeContract(bytes32,bytes8,uint256,uint32,string,uint32,uint32,uint64,uint64,bytes32)", +"17b5f729": "_getAuctionIdArray(uint64,uint64)", +"17b65ae6": "hasEmployerMinRating(address,address,uint256)", +"17b75be6": "setBigICOStopped(bool)", +"17b7c328": "OpenPollCoin()", +"17b83aa6": "getSaleContractDepositEtherMax(address)", +"17b88dd7": "NEC(address,address)", +"17b98723": "isAuraSet(uint256,uint256)", +"17b9a28e": "calcWinner(uint256,uint256,uint256,uint256)", +"17b9e89c": "sumHardCapPreICO3()", +"17ba169a": "HybridEXToken(address,uint256)", +"17ba86af": "OpenContentIndex()", +"17bb0532": "AdminAddressChanged(address)", +"17bbcb6f": "newInvest(address,uint256)", +"17bd1251": "txsThreshold(uint256)", +"17bd5956": "withdraw_token(address,address,uint256,uint256)", +"17bd927c": "testNewCounterValueAfterADecrease()", +"17be3fa5": "lockToken(address,uint256)", +"17be85c3": "getEntries()", +"17be89f0": "createTradeContract(address,uint256,uint256,bool)", +"17bf2671": "PDOne()", +"17bf8f50": "sendTokenFromDex(address,uint256)", +"17bfdfbc": "borrowBalanceCurrent(address)", +"17c0b0f9": "Escrow(address,uint256,address)", +"17c163e9": "ROLE_STATE_LOCK_PROVIDER()", +"17c201a1": "getRemainingMineSupply()", +"17c208a0": "EtherGirls()", +"17c24891": "completeInternal()", +"17c2d98b": "minSizeInvest()", +"17c2f390": "getNumberOfSuccessfulSteps()", +"17c3119b": "TeamAndAdvisors()", +"17c32a58": "latestPhaseNumber()", +"17c35e88": "deedName(uint256)", +"17c3925f": "encodeBillingMetadata(uint256,uint256,uint256,uint256)", +"17c39286": "getCars()", +"17c4c7bb": "getShipPriceById(uint256)", +"17c4f0a0": "autoReleaseTokenSaleJM()", +"17c4fcbf": "getExpectedGameSize()", +"17c51080": "getMyLockedFundsReleaseTime()", +"17c520f9": "CerttifyToken(uint256)", +"17c5838a": "stopMinting(string)", +"17c59204": "determinateWinners(uint256,string,int256,int256[],uint256,string,string)", +"17c5fed8": "emergencyWithdrawalRatio()", +"17c63141": "getCountSenderCities(address)", +"17c65aa7": "getMaxLossAfterTrade(address,uint256,int256,int256)", +"17c6ee4f": "PaidOut(address,address)", +"17c70de4": "initiationTime()", +"17c73612": "ItlyCoin()", +"17c73ff0": "COMMISSION_WALLET()", +"17c83ed4": "getBindAddressAccount(address)", +"17ca1a6d": "getCrystalsSummary(address)", +"17ca2e41": "addBlacklist(address,bool)", +"17ca7f63": "getMintMarketMakerApproval(address,address)", +"17cacc1e": "_beingVIP(address)", +"17cb6426": "totalPaidOut(address)", +"17cbe981": "ChangeShipSellMaster(address)", +"17cc4138": "lastUETCWC()", +"17cc67b9": "firstRoundICOStart()", +"17ccf6a0": "rate5()", +"17cd4d5a": "setEtherPriceInEuroCent(uint256)", +"17cd802d": "repayment()", +"17cdb812": "TEAM_VESTING_AMOUNT()", +"17cdbac0": "usedvalue()", +"17ce42bd": "addEntry(string)", +"17ce9aae": "getIsSecondPhaseByTime()", +"17ce9d68": "getMeshPointByName(string)", +"17cfd0d6": "house_edge()", +"17cfde55": "onSubUnHold(uint256,address,bool)", +"17d01716": "unregisterPair(address,address)", +"17d077af": "NamiPool(address,address,address)", +"17d0aa13": "TXOtoken(address)", +"17d18cd6": "_capOwO()", +"17d28620": "toggleTransferFor(address)", +"17d2e4e4": "realDevRewardWeight()", +"17d35f47": "setLocked(uint256)", +"17d3953f": "tmed()", +"17d48fc7": "getMigrationAccount(address)", +"17d4e24c": "EXT_COMPANY_STAKE_THREE()", +"17d51877": "cancelLine(uint256)", +"17d55d13": "timeLeftToBid(address)", +"17d5e4be": "testDrip(address,address,uint256)", +"17d60394": "Briant2Token()", +"17d6de15": "setSnapshotBalanceBatch(address[],uint256[])", +"17d70f7c": "tokenId()", +"17d7a154": "getShipTotalEarned(uint32)", +"17d7a47d": "sendOtherTokens(uint8,address,uint256)", +"17d7de7c": "getName()", +"17d8405a": "setUserAccount(bytes32,address)", +"17d86154": "setStartPrice(uint256)", +"17d8fd7a": "acceptedBookingfc(uint256)", +"17d928a7": "ClaimNFT(uint256,uint256,uint256)", +"17d94ad3": "isMinterAllowed(address)", +"17d9adb7": "stage_3_tokens_scaled()", +"17d9b4ab": "checkPromo(string)", +"17d9bfcb": "withdrawAndTransfer(uint256,address)", +"17d9c090": "isCharged()", +"17da485f": "getMiningDifficulty()", +"17db59a4": "dEthereumlotteryNet(address,address,address)", +"17dba48c": "GRAC2Coin()", +"17dbaf9b": "unlockFirst()", +"17dbe4f1": "burnPassportToken(address,uint256)", +"17dc86c5": "minWeiContribution()", +"17dc92f5": "cash(uint256)", +"17dd0873": "Winner(address,uint256,uint256,int256,string)", +"17dd4cc1": "getPreviousPrice(bytes32)", +"17de15ad": "GreHackCoin()", +"17de2f1f": "defaultOwner()", +"17dec7af": "distributionFixed()", +"17df1773": "StopIco()", +"17df5696": "finishPreSale4()", +"17df74f9": "availablePercent(uint256)", +"17df9a73": "findBid(address,uint256,bytes32)", +"17e01c95": "isClientBlocked(address)", +"17e04e55": "PoSatoshi()", +"17e0aeb8": "setPropertyEarnUntil(uint16,uint256)", +"17e0dfb2": "backAtIndex(uint256,uint256)", +"17e139a7": "lockedTokenHolder()", +"17e1b09b": "minimumDeposit(uint256)", +"17e1bfb7": "addInstitution(address,string)", +"17e22621": "joinGameWithInviterID(uint256)", +"17e2912f": "Amount_of_AOC_for_One_ETH()", +"17e30f6b": "TimeChainToken(uint256,string,string,address)", +"17e398a5": "seizedTokensWallet()", +"17e3f5fa": "callModifiedContractBalance()", +"17e49dc9": "ETH033()", +"17e50791": "FundsReceived(address,uint256,uint256,uint256,uint256)", +"17e51f21": "CrowdsaleController(address,uint256)", +"17e5259e": "ETH_MAX_LIMIT()", +"17e63b79": "centsPerMonth()", +"17e63bff": "setupICOPeriod(uint256,uint256)", +"17e6a087": "markFunding(address,uint256)", +"17e72721": "VLToken()", +"17e760bb": "votingAllowed()", +"17e7dd22": "getBooleanValue(bytes32)", +"17e875e3": "Transparancy()", +"17e95fbc": "releaseAdvisorsAccount()", +"17e9884d": "OG()", +"17ea0a46": "getalldeatil(uint256,uint256)", +"17ea4a79": "Took(address,uint256,uint256,uint256)", +"17eb85e3": "contractBoost(uint256)", +"17eba34d": "MIN_PRICE_IN_CENTS()", +"17ed31f4": "TIACOIN()", +"17edfb06": "trade(uint256,uint256,string)", +"17ee9c1d": "agreeProposal(address)", +"17eef4cd": "setTotalTokensForPublicSale(uint256)", +"17ef67c6": "setContract1(address)", +"17efa370": "SmartTokenController()", +"17f143e1": "supplyExponent()", +"17f19efb": "ZoarToken()", +"17f1d65b": "hasIcoPhaseOneEnded(uint256)", +"17f1ee05": "paySecurityPool()", +"17f3679f": "testGetMixItemStore()", +"17f46c15": "getVoucher()", +"17f5de95": "MAX_TOKENS_SOLD()", +"17f5f53a": "XYTTEST()", +"17f6252f": "PRESALE_PERCENTAGE_4()", +"17f6c712": "ObjectPurchase(address,address,uint256,uint256)", +"17f708fb": "removeWhitelist()", +"17f7a530": "_computeNextMinerPrice()", +"17f80c13": "releaseJoyToken()", +"17f8252e": "tokenOwnerNumber()", +"17f95eac": "approveCloser(address,bool)", +"17f992ab": "SECOND_VOLUME_EXTRA_BONUS()", +"17fa664f": "callerDel(address)", +"17faa66f": "transferOwnershipWithBalance(address)", +"17fab0a0": "info(string)", +"17face84": "withdrawCommission(uint256)", +"17fad7fc": "batchTransferFrom(address,address,uint256[],uint256[])", +"17fafa3b": "test_sub(uint256,uint256)", +"17fb44c1": "returnAmountPaidBackSoFar(uint256)", +"17fb4d66": "Destroy(address,uint256,address)", +"17fb6c6e": "approveRequest(uint256,bool,string)", +"17fc01bf": "LegendsCrowdfund(address,uint256,uint256)", +"17fc3f55": "angelGoal()", +"17fc91f8": "holdAmount()", +"17fccb47": "erc20TokensContractAddress()", +"17fd9cc5": "tradeWithInputFixed(address,address,address,uint256)", +"17fe375f": "getComments(address)", +"17fe5b79": "apolloSpecialTransfer(address,uint256)", +"17fe6185": "log(address,address,uint256)", +"17fe72bb": "setEnabled(address,bool)", +"17ff0caa": "WeatherBet(uint256,address,address,address)", +"17ffa830": "tixFounders()", +"17ffc320": "reclaimToken(address)", +"17ffd225": "KittyTrained(uint256,uint256,uint256,uint256[5])", +"17ffe171": "lock(address,address)", +"18004bba": "transferArrayBalanceForPreSale(address[],uint256[])", +"18005d93": "JinuToken()", +"1800c0fe": "extraTime()", +"1800e68e": "calculateTokens()", +"1800ed8e": "manager_address()", +"18015191": "transactions()", +"1801db43": "ExaCHF()", +"1801f00f": "newProposal(uint256,uint256)", +"1801f38e": "restart(uint256)", +"1801fbe5": "mint(uint256,bytes32)", +"1801ff10": "getAllContact(bytes32)", +"18024acc": "voteStartTime()", +"1802f969": "PokeCentral(address,address)", +"18037b78": "issuerJurisdiction()", +"18039230": "getPlayerGoodList(address)", +"180489ed": "Withdrawal(address,uint256,bytes)", +"18051c4a": "targetWei()", +"18054275": "executeSpins(bytes32,bytes)", +"180603eb": "registrationFee_()", +"1806874a": "amountLockedInVestings()", +"1806be68": "CompanyReserve(address,address)", +"1806cb4e": "getGiftSoldFromType(uint256)", +"180773de": "MAXIMUM_CONTRIBUTION_WHITELIST_PERIOD_USD()", +"1808c6b6": "setDividendsDistributor(address)", +"1808eeb8": "pending(bytes32)", +"180941f0": "setPredictions(int16,string)", +"1809549f": "updateAllComponents()", +"1809ced7": "sendEther(string)", +"180a3277": "sendDiary(address,bytes)", +"180a351b": "getByteFromByte8(bytes8,uint8)", +"180a42a3": "LifeSet_006()", +"180aadb7": "underLimit(uint256)", +"180afbf6": "DaxtherCrowdsale()", +"180b0d7e": "feeDenominator()", +"180b2607": "lastRelease()", +"180c0da6": "GlobalAssentToken()", +"180c0dfe": "maxBuyTokenAmount()", +"180c9309": "hasOracle(address)", +"180ca180": "CooperativeToken()", +"180cb47f": "GOV()", +"180da450": "addTierRateAndTokens(uint256,uint256,uint256)", +"180db1b4": "getErrno()", +"180dc318": "owners(uint32)", +"180ee30d": "forgivedChars(uint256)", +"180eebba": "accumulatedGasFees()", +"180f4c2c": "submitTotalBuyOrder(bytes32,uint256,uint256)", +"180f8f4f": "nextPrice2Of(uint256)", +"18117abb": "changeOwnerWallet(address)", +"18126325": "getOrganBlog()", +"18128ec7": "buyMorty()", +"1812982c": "fechAllForCandidate(uint256)", +"1812d2aa": "setBonusToken(address,uint256,uint256)", +"1812d996": "signature(bytes32,uint256)", +"1813b684": "preIcoEnded()", +"18158e6b": "BdpController(bytes8)", +"18159bf3": "_addSGCUsers(address)", +"1815ce7d": "setBackendAddress(address)", +"18160ddd": "totalSupply()", +"181670e6": "isApprovedOnceFor(address,address)", +"18167416": "officialGameUrl()", +"1816e794": "getMainsale()", +"18178358": "poke()", +"1817c5a7": "revokeGrant(address)", +"181a916b": "getKeys(address,uint256,uint256)", +"181aa1fd": "takeFee()", +"181b3bb3": "functionOne()", +"181b591a": "phase_4_bonus()", +"181be00d": "getValue(uint8)", +"181c8ef9": "enter(bytes8,address)", +"181d85eb": "internalRedeem(address,uint256)", +"181da773": "EosPizzaSliceDonationraiser(address)", +"181dcbcd": "setMaxConfig(uint256,uint256)", +"181e0124": "getRemainingTime(uint256)", +"181f1437": "permissibleWithdrawal(uint256)", +"181f1965": "fillSellOrderPartially(uint256,uint256,uint256)", +"181f4456": "setAuctionStart(uint256)", +"181f4477": "getLockedStructStartTime(address,address,uint256)", +"181fd85b": "cancelSale(address,bytes32)", +"181ffc5f": "GetGift(bytes)", +"182092a8": "ChangeSymbol(string)", +"1820b575": "Team(uint256,address,uint256)", +"1821cd93": "jackPotFunds()", +"1821e7c6": "acceptOffer(address,address,uint256)", +"1822b886": "createTradeOffer(bytes32,bytes32)", +"1822cbc5": "mintingIsAllowed()", +"1822f8db": "finishSafe(address)", +"18237476": "getAccountTotal(address)", +"18237e0c": "enableBuyback(uint256)", +"182439de": "claim_PreICOTokens(address)", +"1824461d": "administror()", +"18248f2a": "sendToken(address,uint256,address)", +"182493f2": "plantedOf(address)", +"182499fe": "ico_address()", +"1824a46b": "onUpgrade()", +"18253234": "ticketsAvailable()", +"182575f1": "authorizeFloor(uint32,address)", +"1825d0e8": "_mintCUSD(address,uint256)", +"18264f33": "startMigration()", +"1826fb35": "_calculateShards(int256,uint256)", +"1827caf4": "getInfoB(uint256)", +"1827edbc": "Reaper11()", +"18285e6b": "secondPlay(bytes32,uint8,bytes32,bytes32,uint256)", +"18287ef2": "executeOption(address,uint256)", +"18289482": "currentIcoPeriodStartDate()", +"1828983a": "authorizedUsers(address)", +"1828b254": "nextTicketPrice()", +"1828db82": "ownerPayout(address)", +"182930ce": "AddedToWhiteList(address,uint256,uint8,uint8)", +"1829b73f": "buyoutAmount()", +"182a7506": "setMinimumFee(uint256)", +"182ae5f2": "getVotesForItem(uint256)", +"182af96b": "regularEndGame(address,uint32,int256,uint256,address)", +"182b0b00": "checkChangeToReceive()", +"182b144c": "incrementBatch(address[])", +"182b434b": "newRequest(address,uint256,bytes32)", +"182d326e": "getTeamAddress()", +"182d709a": "scaleWeights(uint256)", +"182db370": "getWhatHappened()", +"182df0f5": "exchangeRateStored()", +"182e0c49": "totalUnrestrictedAssignments()", +"182e7533": "getBetResult(bytes32,bytes32,bytes32,uint256)", +"182e8a67": "changeGroupActiveStatus(bytes32,bool)", +"182e9a1e": "getOwnerVehicleDetails(address)", +"182ee07f": "setDistributionMinimum(uint256)", +"182ef78e": "getTMul()", +"182f67a3": "reservedWei()", +"18300c1a": "CappedMintableToken(uint256)", +"1830d69d": "IsGot(uint256[],uint256[])", +"1830f493": "getPermission(bytes4)", +"1832425f": "registerAddress()", +"1833198f": "makeMemChange2(uint256,uint256,uint256,int256)", +"1833a548": "changeGas(uint256)", +"1833b7c6": "changeMyAddress(address)", +"1833fa4c": "update(uint256,string,uint256,uint256,uint256,uint256)", +"18342c9c": "BettingCore()", +"1834906c": "thisContractAddress()", +"1834ef4e": "addMoneyToContract()", +"1835e57d": "VESTING_DURATION_4Y()", +"183651d9": "tokenApprovalWithSignature(bool,address,address,address,uint256,uint256,uint256,bytes32,bytes)", +"18369a2a": "initialBalance()", +"183718d1": "getCheckoutTime()", +"18384df2": "getMetadataOf(uint256)", +"1838daab": "getRealmSale(uint256)", +"1839a417": "_cancelEthOffer(address)", +"1839babf": "zGetGameBalance()", +"183a7947": "pregnantKitties()", +"183abe66": "testRewardSB(string)", +"183b3159": "getAssetBalance()", +"183bfb4f": "AddBankerProfit(uint8,uint256)", +"183c5901": "DigitalGold()", +"183d255e": "SetWhat(uint256)", +"183d4cf7": "CNT_address()", +"183df5ef": "test_invalidSuicide()", +"183f9bcf": "isQuorum(address[3])", +"183ff085": "checkIn()", +"184018c6": "awardHighScore()", +"1840f0ca": "countVotes(uint256)", +"184188f2": "setStopTransfer(address,bool)", +"18423074": "ShowerToken()", +"18433bb7": "DrawPrepare()", +"1844fef1": "roundTotalWinnings(address)", +"18456048": "auctusTokenAddress()", +"18469491": "lastPlayerPaid()", +"18469dfe": "canStartDispute(bytes32)", +"1846d125": "isGroupExists(bytes32)", +"18476db4": "newRandomValue(uint256,address,uint256,uint256)", +"18477799": "Touch()", +"1847c06b": "ids(address)", +"18489f50": "thingExist(bytes32[])", +"18494108": "doPayout()", +"1849bd6a": "ExecuteTrade(address,address,address,uint256,uint256)", +"1849cb5a": "get(uint80)", +"184a9ce1": "Log2_fnc(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", +"184ad5ff": "VjuCoin()", +"184b1912": "minimum_goal()", +"184b9559": "init(address,address,address)", +"184bd394": "changeSaleAddress(address)", +"184c703d": "LogVoteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", +"184d009b": "teamNameIndex(string)", +"184d1a77": "acceptBid(int256,int256,int256,int256)", +"184d69ab": "isWhitelistEnabled()", +"184db3bf": "initErc20Deal(bytes32,uint256,address,bytes20,bytes20,address)", +"184e8549": "getPI_edit_31()", +"184fb2bd": "signOwnerCount(uint256)", +"184fd65e": "addMomRelation(address)", +"184ffd9d": "RATE_CROWDSALE_S2()", +"18501714": "clearJackpotParticipantsAfterDistribution()", +"185061da": "undoIt()", +"18507210": "templatesOfOwner(address)", +"185190f6": "addCustomerwithETH(address,uint256,uint256)", +"1851e59e": "Omnidollar()", +"18520be5": "EventBid(uint32)", +"18520de3": "sendFrom(address,address,address,uint256,uint256)", +"1852e8d9": "calculateReward(address,uint256)", +"1853d033": "GetAskingTokenBought()", +"1854229a": "REFERRAL_BONUS_LEVEL1()", +"1855e405": "managerOff(address)", +"1856a6df": "coupleImageIPFShash()", +"1856bc0f": "BuyGenesis(address)", +"1856c1dc": "main_sale()", +"1856e01b": "setVotingController(address)", +"18573bf9": "calculeReward(uint256,uint256)", +"18577f8d": "calVote(address)", +"18579ece": "clearances(address)", +"18584a5d": "hasAlreadyPlayed(address)", +"185870f9": "developerWallet()", +"1858cb5b": "verifyProof(bytes,bytes32)", +"185917c5": "distributeToFound(address,uint256)", +"1859b2d7": "getDStructData(address,uint256)", +"1859c8e2": "getUserTicket(uint256)", +"185a5671": "setTransferAddress(address)", +"185a6284": "discountedMiningTarget(address)", +"185a7daf": "FundingRules(uint256)", +"185b9067": "QuadCoin()", +"185c4279": "hardCapCHF()", +"185cc751": "loan(address,uint256)", +"185d1af6": "setUncirculatedSupplyCount(uint256)", +"185d9e79": "AOL(uint256,string,uint8,string)", +"185e00fd": "getDisputeStateText(uint256)", +"185e4a00": "getCurrCanRefund()", +"185e9969": "getContractDetails(bytes32)", +"185f23c4": "_arbitrationPercent()", +"1861355b": "transferMintOwnership(address)", +"1861cb28": "getNowVestingType()", +"1861e523": "testOwnerToken()", +"1862c10b": "withdrawBalancesToLogic()", +"1862caec": "firstStageMinting()", +"186415c0": "releasesollidaTeamTokens()", +"18643d37": "raffleLimit()", +"1864db71": "getCompetitionInfo(uint256)", +"18656a1e": "founderAmount()", +"18659adb": "starbitWallet()", +"1865c57d": "getState()", +"186601ca": "activated()", +"1866191a": "editDiscount(uint256,uint256,uint256)", +"186690b0": "broadcastMessage(string)", +"1866ae7d": "PayRollHistory(address)", +"1866f761": "ConstantaToken()", +"18671d23": "Auditor(address,address,address)", +"1867b937": "_bytesToBytes32(bytes)", +"1868291f": "getIp(string)", +"1868516d": "KMEToken()", +"1868c2a1": "computeSeed(uint64,address)", +"18695c4d": "DSToken(bytes32,uint256)", +"1869a084": "releaseLockedBalance(address,uint256)", +"186b6f05": "updateFallbackDeposit()", +"186b79c9": "isProviderInitiated(address)", +"186ba9de": "lastUnlockMineBalanceTime()", +"186bbb05": "getAppCode(bytes32)", +"186bcaf0": "ontology()", +"186c9b11": "issueTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"186cd7d2": "card_black_first()", +"186d9ce8": "allowAvatarCreation()", +"186d9d88": "unblockAddress(address)", +"186db237": "ecosystemBuildingTokens()", +"186e378a": "CCH_EDIT_4()", +"186e4297": "charityCut()", +"186e7047": "forceAdvance()", +"186eb86b": "cnt_per_eos()", +"186f0354": "safe()", +"1870082d": "inviteCollateralizer()", +"187047b5": "LogUserAdded(address)", +"1870a73a": "totalNTD()", +"1870ad14": "setAddress(string,address,bool)", +"1870c10f": "donateAndCreateGiver(address,uint64,address,uint256)", +"18714bc8": "purchaseWithFiat(uint256)", +"18718656": "XENCToken()", +"1873355e": "Emoji()", +"18737e07": "Redeemed(uint256,address,address,uint256)", +"18758480": "worldContract()", +"1875aa22": "transferWhiteList()", +"1875ccf3": "setGlobalCompositionFee(uint256)", +"18760eb3": "RequiringAuthorization()", +"18764471": "ANTDToken()", +"1876d0a9": "astutelandToken()", +"1877fc8a": "quickSort(address[21],int256,int256)", +"1878265a": "Rent()", +"1878d1f1": "ETH_TOKEN_ADDRESS()", +"187958ac": "VOCToken()", +"18797499": "ENTERED_MASK()", +"18797c35": "emitAccountFrozen(address,uint256)", +"1879c2da": "NewSale(address,uint256)", +"1879dcf3": "MIN_TOKEN_PRICE()", +"187a62d5": "voteEmergencyWithdrawal(bool)", +"187ac4cb": "migrationManager()", +"187adf2e": "failsafe_subtract(uint256,uint256)", +"187b1f2a": "VOZToken()", +"187cba25": "issueNomins(uint256)", +"187cbdd2": "subWallets()", +"187d2371": "LOG_MaxInvestorsChanged(uint256)", +"187d3954": "getClaimableBalanceFor(address)", +"187d8803": "updateKoCommissionAccount(address)", +"187ecd37": "Open(bytes)", +"187ed86e": "ROE()", +"187f707b": "AdvertisementFinance(address)", +"187fac20": "setStartStage1(uint256)", +"187fd079": "MINI_GAME_TIME_DEFAULT()", +"18804b0d": "setDescriptionHash(bytes32)", +"1880692f": "getPublicKeyCount()", +"1881656b": "canSpend(address,uint256)", +"1881b0f0": "kycVerify(address)", +"1881f980": "read_i64()", +"18821400": "TOKEN_NAME()", +"1882d267": "liquidityFundAddress()", +"18836994": "get_allowance(address,address)", +"1883d2a4": "IUPToken()", +"1884c517": "registerWorkerAffectation(address,address)", +"18856694": "deny(bytes8)", +"1887af2b": "LogicBase(address,address)", +"18886657": "purchaseLimit()", +"1889500c": "marketplaceManager()", +"18896972": "isBuyFull()", +"18898452": "saleMinimum()", +"18899745": "AffiliateMarketing(address,uint256)", +"1889fc0a": "_preValidateReserve(address,uint256,address)", +"188a1d68": "getOuverture_des_droits()", +"188af657": "generateWinner()", +"188b5372": "generateToken(address,uint256)", +"188b81b4": "getGameEnd(uint256)", +"188c668c": "recordDealRefundReason(uint256,address,uint32,uint32,uint256,string)", +"188cad26": "referralTokensAllocated()", +"188d0aae": "buyAndCreateGame(uint256,uint256,address)", +"188dbc1a": "setAccountIsFrozen(address,bool)", +"188ec356": "getTimestamp()", +"188f1fee": "notifyObservers(address,address,int256)", +"188fdbdc": "commission_rate()", +"189048fc": "getAccountLevel(address)", +"189052ac": "_setFreezingPeriod(address,bool,uint256)", +"18911bbe": "ProdFToken()", +"1891381d": "setROI(uint256)", +"1891c701": "AssignOwnerToProject(int256,address)", +"18921de4": "addSignature(string,uint256[],uint256[],uint256[],bool[],uint256[])", +"1892c15a": "fwdPayment(address)", +"18940084": "_getDestinationTranche(bytes)", +"18942a33": "new_record(address,address,uint256)", +"18946e8f": "voteOnParameter(bytes32,int256)", +"18954b3e": "collectEstimation(int256)", +"18955b1e": "willThrow()", +"1895687d": "issueLoan(address,uint256)", +"18958959": "individualClaim()", +"1895e858": "resetWallet()", +"1896367e": "setBlockSze(uint256)", +"18968a03": "finalize(uint256,address,address)", +"1896f70a": "setResolver(bytes32,address)", +"18976fa2": "closeVault()", +"1897bcf3": "sellToken(uint256,uint256)", +"1898a1c7": "addVendor(address,string)", +"189959de": "EXPC()", +"1899f1ad": "setChargerAddress(uint256,address)", +"189a5a17": "nodes(address)", +"189ae13c": "numArbiters()", +"189af42f": "powsm(uint256,uint256)", +"189aff3a": "authorizedSupply()", +"189b11fc": "AddSeed(address[])", +"189b600c": "setNameHashByWriter(bytes32,address,bytes32)", +"189c94ae": "testFallbackStaticSig()", +"189ca316": "setVoteWeight(uint256)", +"189d165e": "setBurnRate(uint256)", +"189e688a": "ClaimDividend(address,address,uint256,uint256,uint256)", +"189eeebe": "isMembershipAllowed(address)", +"189f0197": "getPlayersPick(string)", +"189f4d34": "setMinUCCoinSellingValue(uint256)", +"189f9041": "mintCoreToken(address[])", +"18a08d2d": "TheTokenH()", +"18a0e773": "UnlockGrant(address,uint256)", +"18a17df1": "DataDump()", +"18a24b5b": "unlockToken()", +"18a30d16": "getResponse()", +"18a39c54": "payForward()", +"18a3aad2": "ReserveCoin()", +"18a4155e": "calculatePrice(uint256,uint256,uint256,address,uint256)", +"18a45c41": "_receiveFundsUpTo(uint256)", +"18a51621": "getReadableSupply()", +"18a54ecd": "mintTokenForPrivateInvestors(address,uint256)", +"18a6217d": "comments1()", +"18a66563": "AQI()", +"18a689aa": "getNamePicture(bytes32)", +"18a6bc32": "tokenDistributor()", +"18a6d58b": "addTokenTeller(address,uint256)", +"18a6d765": "BANKROLL_LOCK_PERIOD()", +"18a6dec5": "getCountTokensByGame(uint32)", +"18a727c5": "_withdrawDev(address,uint256)", +"18a7bad6": "setFreezeAdmin(address)", +"18a8fac9": "icoInvestment(address,uint256,uint256)", +"18a94030": "putStoWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"18a991f7": "setEmeraldPrice(uint256)", +"18a9cc1b": "isUser(uint256)", +"18a9f29f": "setMetadata(uint128,string)", +"18aaaa51": "registerTickets(uint256)", +"18ab8888": "paymentSortId()", +"18ab8c37": "timeToCalm()", +"18abb75c": "createLibraryBounty(string,string,address,uint256)", +"18abfdfc": "totalSupplyFromCrowdsale()", +"18ad052b": "safeTransferByContract(uint256,address)", +"18ad28af": "icoWasSuccessful()", +"18ae15e4": "DBC(uint256,string,uint8,string)", +"18ae19c2": "get(bytes32,uint256)", +"18ae21e8": "NuoYiLian(uint256,string,uint8,string)", +"18af26fe": "setRestrictedWallet(address)", +"18af4099": "PARALLELNETWORK()", +"18af5e74": "addressesDeposited(address)", +"18af7021": "force_refund(address)", +"18b03ceb": "remainderPurchaser()", +"18b0bdf7": "getMensaje(uint256)", +"18b0efb6": "isEmptyName(string)", +"18b123d5": "hasBeenApproved(address,uint256)", +"18b15e2a": "Ongo()", +"18b20071": "setCurrentPrice(uint256)", +"18b2739d": "giveEthJackpotAddress()", +"18b31f94": "registerLengthFunction(string,string,address)", +"18b322a4": "update_instant()", +"18b38777": "fuzexAccount()", +"18b3a119": "getCrowdsaleMaxRaise()", +"18b3b58b": "Hamza__Coin()", +"18b3c724": "forceRecoverCollateralOnBehalfOfRecurse(address,address,bytes32,address)", +"18b3cd45": "qwecoin()", +"18b40adf": "maximumCirculation()", +"18b437aa": "COMMERCIALPOINTCHAINSYSTEM()", +"18b49ba4": "AMPIToken()", +"18b4a702": "EPACOIN()", +"18b4a924": "week_max()", +"18b64d5b": "unmint(int256,uint256)", +"18b749c4": "payEther(uint256)", +"18b7bb11": "EthRoi()", +"18b7fed8": "deliverPresaleTokens(address[],uint256[])", +"18b8275a": "addUser(string)", +"18b919e9": "ROLE_WHITELISTED()", +"18ba4218": "countAssetEvents(bytes32)", +"18ba5cdc": "ownerAddToWhitelist(address,uint256)", +"18ba6973": "setTrainingFormulaContract(address)", +"18bb2edb": "maxRegistrants()", +"18bb7c08": "_setNameToAddress(address,string)", +"18bbedf4": "Bulletin()", +"18bc1558": "Th_stage2(uint256)", +"18bcd3d0": "transferOwnership(address[])", +"18bd21f9": "_purchase(uint256,uint256)", +"18bd387a": "level_referrals_count_by_address(address,uint256)", +"18bd5108": "stopCrowdsaleTime()", +"18bd710b": "NewGirl(address,uint256,uint256,uint256,uint256)", +"18bd8dcb": "ufoodoToken()", +"18bdb1b0": "StartdateICO()", +"18bdc79a": "payOwnerOnly()", +"18bdffbb": "verifierAddress()", +"18bee97e": "Creator()", +"18beeeb4": "redeemInternal(uint256)", +"18bf0225": "etherFundsOf(address,address)", +"18bffce9": "voteToResult(uint256)", +"18c0e04f": "purchaseStake()", +"18c10ad0": "disabled(uint256,uint256)", +"18c1d9b2": "bonusWallet()", +"18c1fc68": "buyOne(address,address,uint256,bytes)", +"18c20f44": "entrarAJuego(uint256)", +"18c26389": "multivestMint(address,address,uint256,uint8,bytes32,bytes32)", +"18c2d4c9": "initialSingleWithdrawMin(uint256)", +"18c306bd": "checkSignatures2(bytes32,bytes,bytes,bytes)", +"18c3cf34": "EthPriceProvider()", +"18c41a80": "mint(bool)", +"18c48e96": "bitRegisters(address)", +"18c53aca": "tokenIsComponent(address)", +"18c5bddc": "PRESALE_THIRD_DAY_START()", +"18c5e3af": "addInvestmentProposal(uint32,bytes24,uint256)", +"18c5e502": "GetTime()", +"18c8bda5": "Procare()", +"18c93884": "_setCrowdsaleStage(uint8)", +"18c9ef97": "mintETHRewards(address,uint256)", +"18caa857": "emitJobBinded(uint256,uint256,bool)", +"18cadf30": "getVATTransactionData(uint256)", +"18cc4c65": "startEngines()", +"18cd55f3": "canCreateGrants(address)", +"18cda1e7": "lockInternalAccount(address,bool)", +"18ce1a23": "BailOutToken()", +"18cee8a4": "setPlatformCommissionRate(uint256)", +"18cf1c25": "lookupDonation(uint256,uint256)", +"18cf85d1": "adminSetCityData(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"18cfa483": "invalidate(address,uint256)", +"18d0073e": "startNextMilestone()", +"18d0122a": "upgradeAgentStatus()", +"18d0376c": "getFastGap()", +"18d0a7cc": "incentFundAddress()", +"18d0c322": "EtherLambosCore()", +"18d0eb93": "finalizeAndDistributeToken()", +"18d30bfa": "setLastMoveTime(uint16)", +"18d32128": "CLVRCrowdsale()", +"18d43f0d": "userTokensValues(address,address)", +"18d4b4b3": "COCCToken()", +"18d4d326": "SAFethToken()", +"18d4e834": "getPrivilegeState()", +"18d62bc6": "PHXFlip()", +"18d6676c": "entityStructs(uint256)", +"18d69faa": "StopDistrib()", +"18d74c37": "deleteShare(address)", +"18d760be": "LogFinalize(bytes32,bytes32)", +"18d76b78": "CCIToken()", +"18d78358": "ICOCENTRAL()", +"18d80168": "startUnitRaffle(uint256,uint256)", +"18d80d4a": "check_prize()", +"18d84553": "calculatePayout(bytes32)", +"18d8ec5b": "validateWinnersCount(uint32,uint32,uint32)", +"18d8f9c9": "erc677token()", +"18d92a5d": "getRegistryDataCustodian()", +"18d95092": "domainOwner(string)", +"18d97731": "setPriceStep7(uint256)", +"18da0011": "treasuryContract()", +"18da650d": "WithdrawalInterCrypto(uint256)", +"18da754a": "setBuyMinLimit(uint256)", +"18dad1cd": "multiTransferFromValues(address[],address[],uint256[])", +"18db02e1": "etherToLEONRate()", +"18db0750": "contributionReward()", +"18db62fb": "checkValue(uint256)", +"18dcdfbe": "isRetirementAllowed(uint256,bool)", +"18dd97f0": "secondStageTokensForSale()", +"18de0afd": "getEnabled()", +"18deb066": "init(uint8,uint256,uint256,uint256,address[2],address[],uint256)", +"18debd27": "addWalletAddressAndTokens(uint256,address,uint256)", +"18def2a1": "DistributedCreditChain()", +"18df0038": "getSwapType(bytes32)", +"18df02dc": "Migrate(address,address,uint256)", +"18df11ee": "SpendingApproved(address,address,uint256)", +"18df6090": "mintBountytokens(address)", +"18dfcf7b": "_investorCount()", +"18e01199": "burn(uint256,bytes,bytes)", +"18e02bd9": "setTokenOwner(address)", +"18e0d683": "getBAI(bytes32,address)", +"18e124e4": "upgradePackageCountOf(address)", +"18e146f9": "InvestmentPolicyChanged(bool)", +"18e2d679": "describeTile(int32,int32)", +"18e2e4be": "getInvestor(address,address)", +"18e37cdd": "ITGToken()", +"18e3b44c": "setMemory(uint256,uint256)", +"18e3d998": "crowdSaleEndTime()", +"18e45427": "whitelistedContract()", +"18e4ac35": "isConfirmed(address)", +"18e4c3f3": "GMOON()", +"18e4d2db": "_AIExchangeSupply()", +"18e536bc": "comissionList()", +"18e6ab9c": "funding(address,uint256,uint256)", +"18e75a1c": "PresaleEDUSupply()", +"18e7eb4b": "PRE_SALE_1WEEK_BONUS()", +"18e857ab": "queried(uint256)", +"18e9e7ab": "listSimpleService(uint32,string,uint256,address[],address)", +"18eacb96": "GetDivs(address)", +"18ebcc8c": "takeOrder(uint256,uint256[5],uint256[3],bytes32[3])", +"18ecc6f4": "getTotalDividendsRounds()", +"18ece632": "superApprove(address,address,uint256)", +"18edf434": "_revokeConfirmation(uint256,address)", +"18ee00b6": "_changeRate(uint256)", +"18ee1b9f": "WithdrawEther()", +"18ee9d5e": "EtherIncognito()", +"18eeef80": "Wallet1()", +"18ef7adb": "transferAdvisorTokens(address,uint256)", +"18f0db29": "remainingBettingFor(uint256)", +"18f11de2": "BSSCoin()", +"18f2217a": "EPXtokenSupply()", +"18f2a0bb": "ownersConfirmedTransactions(address)", +"18f303a1": "SetInternalValues(uint8,uint256)", +"18f3a50d": "cooAddress2()", +"18f3fae1": "setOversight(address)", +"18f61c0d": "configRunTime()", +"18f729da": "founderLockance(address)", +"18f76a2c": "getCCH_edit_3()", +"18f7d5ad": "lastBlock_f13Hash_uint256()", +"18f80bb9": "createContract(string)", +"18f839bd": "Expensive()", +"18f873df": "chAllowTransfer(bool)", +"18f889c2": "setOracleGasPrice(uint256)", +"18f9266c": "talks(bytes32)", +"18f95486": "openPendingPartCrates()", +"18f96441": "getShipDetails(uint256)", +"18f96857": "Lazadex()", +"18f9b023": "addPayee(address,uint256)", +"18f9bdee": "allocationOpen(uint256)", +"18fa11ab": "revokeRequestorAddress(address)", +"18fa223a": "GGCT()", +"18fb75f4": "callDeposit()", +"18fc6513": "companyCurrentPeriod()", +"18fd3474": "HumaniqICO(address,address)", +"18fd8903": "refund(address,uint256,uint256)", +"18fdcaba": "getSumAmountOfDisputedDealsProDoctor()", +"18fe1a8d": "banToken(address)", +"18fe3df7": "_buildInternalSalt(uint128,address,address,address,uint256,uint64)", +"18fed50a": "getLast4Bytes(bytes32)", +"18ff1361": "manualyMintTokens(uint256,address,uint256,int256)", +"18ff318d": "thorToken()", +"190038dc": "supplyAdjuster()", +"190042b8": "CARA()", +"19006185": "getNumRefundTransactions()", +"1900aabf": "CollectChips(uint256)", +"190108b5": "getAyantDroitEconomique_Compte_3()", +"19013cf2": "detachFromStorage(address)", +"190151c6": "_createNumber(uint256,uint256)", +"19018557": "COCToken()", +"19022f20": "TTT()", +"1902e902": "adjustEntitlement(address,address,uint256)", +"190377a5": "getCategory(string)", +"1903bbe0": "_getQueryStr(uint256,uint256)", +"1903c10e": "setPI_edit_3(string)", +"190406b3": "customExchangeSecure(address,address,uint256)", +"19045a25": "recover(bytes32,bytes)", +"19055df2": "preSaleTokenExchangeRate()", +"19058903": "NewPassProject(address,address,string,string,bytes32)", +"1905fbf6": "setNewWallet(address)", +"19062b8f": "settleTransaction(uint256)", +"190663e4": "setGreeter(string)", +"1906a3d6": "getBonusFund(address)", +"1906ff98": "getVotePrice()", +"19077dca": "resetOwnership()", +"1908c425": "m_leeway()", +"1909773f": "get_milestone_information(uint256)", +"1909787f": "NextMint(uint256)", +"1909d314": "GCPrightToken()", +"190a2688": "changePrices(uint256[3],uint8)", +"190a338f": "_createAccount()", +"190a597b": "restartCrowdsale(address,uint256,uint256,uint256,uint256,string)", +"190a6aa9": "burn(address,uint256,bytes,bytes)", +"190a8613": "getNodeLeftChild(bytes32)", +"190a867e": "testThrowNoPartialTokens()", +"190bc9d4": "w_Advisers()", +"190bfa4d": "singleDVIPQty()", +"190bfcd0": "initialTokenValue()", +"190bfea8": "sellWei()", +"190c23c4": "adminSetTxFeePaidGame(uint256)", +"190c69a2": "unWhitelistUser(address)", +"190d9253": "testInitialContract()", +"190e4c77": "numOfProperties()", +"190e8266": "makeProduct(string,string,uint256,uint256)", +"190eaaba": "getDenominator()", +"190ef61d": "readAnalyticsMap()", +"190f4cfc": "doCalculate(uint256,uint256,uint256,bytes32)", +"190fe712": "payoutETH(uint256)", +"19110d05": "DTCC_ILOW_8()", +"19113b4a": "changeStatement(string)", +"19123c1f": "magnitude()", +"1912f84f": "BONUS2_LIMIT()", +"191313ae": "EndOfPayments(address,uint256)", +"191347df": "setStr(string)", +"1913742f": "appendSchellingSupplyChanges(uint256,uint256,bool)", +"191384d1": "viewMessage()", +"19141100": "bankRollDivest(uint256)", +"1914427f": "MultiSigWalletWithDailyLimit(address[],uint256,uint256)", +"19154616": "FART()", +"1916037d": "withReferrer(address)", +"19162a30": "getYumWithETH(uint256)", +"19165587": "release(address)", +"1916fcb7": "Galaxy100()", +"191723ed": "lockBalance(uint256,uint256)", +"191797df": "isStoped()", +"1917ab5c": "activate(string)", +"1917e6d1": "addDoctor(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"19190495": "SimulateCurrentDate(uint256,string)", +"1919cf62": "allEthShares()", +"1919fed7": "setSalePrice(uint256)", +"191ad190": "open_free()", +"191af4bc": "thirdroundprice()", +"191b548e": "VIVACrowdsaleRound(bool,uint256,uint256,bool)", +"191b8260": "_createScene(string,uint256[],address,uint256)", +"191be7b7": "getQueryResults(bytes32)", +"191d7a7a": "TVToken()", +"191d8cd7": "passToken(address)", +"191e2fc7": "setTokenizedRegistry(address)", +"191e39b3": "setOwnerCut(uint256,uint256)", +"191e521f": "moken(uint256)", +"191e8daa": "_getRand(uint256)", +"191f06e7": "setEscrowFactoryContractAddress(address)", +"192014f4": "buyKeyWithReff(string)", +"1920b2a6": "BitOnBayToken(uint256,string,string,uint256)", +"1920ed48": "isOwner(uint32,address,address)", +"19213471": "addFRA(address)", +"192159a6": "ListingCreated(uint256,uint256,uint256,uint256,address)", +"19216c4d": "getPreIcoInvestorsCount()", +"19216e8d": "freezeForOwner(uint256,uint256)", +"19218eda": "secondTokenExchangeRate()", +"192193b9": "transferFrom(address,address,int256)", +"1921c454": "priceChangeBlock()", +"19220c69": "TAKLIMAKAN()", +"1922936d": "RegisterTransferBeneficiaryContract(address)", +"1922e9b4": "getJobApprovals(uint256)", +"1922ff39": "payOut(address)", +"1923350f": "ADVISORS_TOKENS()", +"19236b4e": "getSanTimeAlive(uint256)", +"192399d1": "vestingBalance(address)", +"1923a4a3": "issuePercentToReserve(address,uint256)", +"1923e5d4": "noActiveBallotExists()", +"19240661": "setTrusted(address)", +"19245155": "StartedSafeUnlock(uint256)", +"1924f74a": "PVP_INTERVAL()", +"1925259b": "ShroomFarmer()", +"19254e2e": "getInsuranceStatus(address)", +"19261e6f": "setERC20ApproveChecking(bool)", +"1926b63d": "savePost(bytes32)", +"1926de89": "readInt256(bytes32)", +"1927a754": "drainEther()", +"1927a8ea": "listFiles(uint256,uint256)", +"19287f3a": "withdrawBalanceAll()", +"1928b3cb": "getPosition(bytes32)", +"19291c74": "getGoldStatusLastauditid(address)", +"192a4422": "safeWithdrawalAmount(uint256)", +"192b3092": "mintPreAllocatedTokens()", +"192b3608": "Bond(uint256,string,string,string,uint128,uint128,uint128,uint128,uint16,string,string,address)", +"192b663d": "vestSupply()", +"192b7700": "CitrusCrowdsale(address,address)", +"192d65c9": "getRoundByRId(uint256)", +"192e571d": "getPlayerByName(string)", +"192e7a7b": "releaseFunds(address)", +"192ecd68": "getDistrito(uint256)", +"192f1076": "crowdsaleEndDate()", +"193080cb": "getLockedContract(address)", +"1930fc01": "FastmarketNetwork()", +"193115b4": "changeHiddenOwner(address)", +"193118fa": "CPCCrowdsale()", +"193237f5": "_isValidSignature(address,address,bytes)", +"1932bb33": "lastBlock_a12()", +"19337d6c": "setLink(string)", +"193402bb": "PRE_SALE_PRICE()", +"1934d55a": "isPermanentlyApproved(address,address)", +"19350aea": "nameFor(address)", +"19354750": "setRegistryLogic(address)", +"1935f8d2": "Instacocoa(uint256,string,string,address)", +"19362921": "CONTRIBUTORS_SHARE()", +"1936a8cd": "getSeedByWinner(uint256)", +"1936dd8f": "writeMessage(string,string,string,string,string)", +"1936e4be": "advisor()", +"19375602": "challengeOwner()", +"1937714b": "confirmDeployment(uint256,address,bytes32)", +"1937b7fa": "Burnfrom(address,uint256)", +"1938a238": "softcapInTokens()", +"19397ed0": "Transfer(address,address,address,address,uint256,bool)", +"1939805f": "TPPC2018Token(uint256,string,string,uint256)", +"1939c1ff": "transfer(address[],uint256)", +"193a4249": "minFunding()", +"193a824e": "_escrow(uint256)", +"193a8a83": "getCCH_edit_28()", +"193ab829": "addGood(address,string,uint256)", +"193c114b": "transferTokensOut(address,address,uint256)", +"193c8da4": "AkikToken()", +"193c9be1": "getCreateShareToken(uint256)", +"193ccc20": "depositTokenToUser(address,address,uint256)", +"193d5b77": "getGiffBlock(uint32)", +"193df7ea": "addBlacklist(address,address)", +"193e06c4": "CalcPeriod(address,uint256)", +"193e6679": "MarginBanc()", +"193f69a1": "getPhaseBonus()", +"193fc711": "_getBeginIndexKey(uint256)", +"19404c2f": "replayAnserWithReferrer(uint256,uint256[],string)", +"1940a936": "isPregnant(uint256)", +"19424222": "approveAndCall(address,uint256,bytes32)", +"1942c3ce": "_transfer(uint256,address)", +"194307bf": "terminated()", +"19447eb6": "userStructs(address)", +"19449cb2": "changeAuthorizedCaller(address)", +"1944bc3d": "priceThresholds(uint256)", +"1946283a": "CarRegistrationFailed(uint256)", +"19465953": "changeInfo(string)", +"1946fdf4": "logicVersion()", +"19476244": "icoNumeratorPrice()", +"1947bd2f": "getMap(address)", +"194809a6": "finalistTeamFIFAIdsSet()", +"19483cd1": "checkHash()", +"19498426": "BOUNTY_REWARD_SHARE()", +"194a7adc": "CONNECT(uint256,string,string)", +"194b546b": "_addRec(uint256)", +"194b81d0": "TGxToken()", +"194c78d0": "setApp(string,uint256)", +"194c8e15": "Update_START_ICO_TIMESTAMP(uint256)", +"194d0de2": "createOrder(address,uint256,uint256,address,uint256)", +"194d297f": "canSend(bytes32,address,uint256,bytes)", +"194dee32": "setTokenForSale(uint256,address)", +"194e10ce": "run(bytes,uint256)", +"194e4acd": "reqvehreg(address,string,string,string,string)", +"194eb01c": "CimbomCoin()", +"194f4795": "getItemsLength()", +"194f8806": "setMigrationHost(address,address)", +"194f97ba": "setColorGreen()", +"194fe9a4": "transferWithBonuses(address,uint256,uint256)", +"195055f1": "isTransferable(address)", +"19507d2c": "allowedToTransfer()", +"19509649": "ImpactRegistry(address,uint256)", +"1950c218": "checkWhitelist(address)", +"1950ee41": "unlockPresaleTokens(address,uint256)", +"195199f6": "setDeadline(uint256)", +"1951f9ba": "isRequestPending(address)", +"19530f76": "multiTransferFixed(address[],uint256)", +"19547404": "sendTokens(uint256,uint256,address)", +"1954f39e": "EndDate()", +"195629de": "initMETToken(address,address,uint256,uint256)", +"195743fc": "claimSMRforAll(uint256)", +"19583b05": "modifyCollectorAddress(address)", +"1958623f": "BitcoinPluse()", +"1958ccb1": "setParams(address[],uint256)", +"195977a6": "emit(uint256)", +"1959a002": "userInfo(address)", +"195aa377": "SportsChainToken()", +"195ad926": "authenticate(uint256)", +"195b616c": "_unmountSameSocketItem(address,uint256,address,uint256)", +"195d06ff": "addBigPromoBonus()", +"195de8a1": "CapReached(address,uint256)", +"195e38b2": "EnergyModulationProject()", +"195e8688": "Osiris()", +"195ec9ee": "getAllParticipants()", +"195f4807": "getTotalPayouts()", +"195fa903": "ownersNum()", +"195fd221": "issueAmount()", +"19608123": "Vetricoin()", +"1960d761": "AccommodationCoin()", +"19617fe4": "coinBurnIco()", +"19618a9b": "testDivideFractional()", +"196198fa": "getDepositWithdrawCount(address)", +"1962d041": "SayadyToken()", +"1962df71": "_performTransferWithReference(address,uint256,string,address)", +"19638ca5": "CryptolifeToken()", +"1963a0d1": "OWN_freezeAddress(address,bool)", +"1963a693": "IncreaseAllowance(address,uint256)", +"1963df66": "dtGetWorldData()", +"1964569b": "Aktium()", +"19648bed": "batchSend(address,address[],uint256[])", +"1964dcbf": "SCCCOIN()", +"19656b46": "teansferFrom(address,address,uint256)", +"1965e183": "MIN_TOKENS()", +"19663f7f": "TransferAmountFromBankAccountToAddress(uint256,address)", +"196667e4": "start_amount()", +"1966cdbe": "pickWinner(bytes32,uint256)", +"19677635": "TEAM_SALE_MULTIPLIER()", +"19679680": "emptyInactiveToken(uint256)", +"1967d701": "fuToken()", +"19682b09": "DonationDeposited4Doubling(address,uint256)", +"19689e76": "paySemiFinalWinner(uint256)", +"1968bf4f": "getPersonalStakeUnlockedTimestamps(address,address)", +"1968c160": "addPaymentDetail(address,bytes32,uint256)", +"1969c21a": "removePixelsFromMarket(bytes32)", +"196be409": "DLTESTToken(uint256,string,uint8,string)", +"196c16cb": "tokenPriceInEth()", +"196c9909": "_bounty()", +"196cd388": "isRangeInsideRange(uint256,uint256,uint256,uint256)", +"196e5c46": "sellSeeds()", +"196ecd25": "getOwnedCount(address,uint256)", +"196ee9c7": "remainingCats()", +"196f2f61": "njcoinToken()", +"196f5851": "transferAgents()", +"196f9aa5": "getLedger(uint8)", +"196fa707": "GAMEMAGICERC20(uint256,string,string)", +"19711d67": "campaignDurationDays()", +"1972172b": "satLimit()", +"19726b4e": "TheGoDigital()", +"1972b464": "emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", +"1972c8dc": "Eggfrenzy()", +"19739117": "checkSignatures(bytes32,uint256[3],bytes,bytes,bytes)", +"1973c5de": "icoPreEnded()", +"1973cae7": "nextPriceDate()", +"1973e795": "setWorkpointSupportCancel(uint256)", +"197425c4": "testSupplyOf()", +"1974a003": "_startAuction()", +"1974a540": "RoundIndex()", +"1975a9e7": "o_deus(bytes32,bytes32)", +"1976804a": "TTCoin(address)", +"19774b86": "bulkWhitelistInvestor(address[])", +"19774d43": "orderFills(address,bytes32)", +"19775795": "aquariumCost()", +"1977bd68": "pepePremine(uint256)", +"1977f5c6": "Anubis()", +"197828b1": "bucketHolding(bytes32,address)", +"1978658b": "setCaps(uint32[],uint256[])", +"1978a87b": "TokenERC20()", +"197a1976": "setInvested(address)", +"197a2820": "depositarLucro()", +"197a9187": "NodeAction()", +"197b9454": "paintingsCount()", +"197bc336": "holderAt(uint256)", +"197c0f3d": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"197c3555": "getPlace(uint256)", +"197c418f": "MyAdvancedToken7(uint256,string,uint8,string)", +"197cb5bc": "balanceLockedUp(address)", +"197d24ad": "changeModuleOwner(string,string,address)", +"197ea97e": "mintAsideTokens()", +"197f0f05": "getMarketInterestSetter(uint256)", +"197f3c29": "notLike(address)", +"197f8a82": "claimReveralTokens(address,uint256)", +"197f9508": "_getExchgAddr()", +"19806d8e": "s11(bytes1)", +"19810f3c": "withdrawShares(uint256)", +"19811fc9": "TPOMZ()", +"1981d521": "participate(uint8)", +"19825187": "changeMinToken(uint256)", +"1982640c": "walletOf(address)", +"1982c626": "withdrawOverpay()", +"1982ed58": "ChangeReuseCashInHarware(bool,uint16,uint16)", +"1983111d": "getTotalCompositionPrice(uint256[])", +"1983f4c2": "getDivsBalance()", +"1984a063": "StarbaseEarlyPurchaseAmendment()", +"1984a906": "preallocatedTokenAmount()", +"1984d419": "getProvisionBalance(uint256)", +"1985a440": "ContractRegistry()", +"1985acf0": "checkLimit(address)", +"1985f54a": "getScribe(address,address)", +"19863bb7": "ReDraw()", +"19869555": "evacuateToVault()", +"1986bc55": "stopBatchAssign()", +"1986f704": "setTrigger(address,bool)", +"1986fd4d": "getAccountWhitelist(uint256)", +"1987b887": "setTokenPorter(address)", +"1987da04": "secondPreSaleDate()", +"1987e50c": "getSellerAddressPayment(address,uint256)", +"1988f6fd": "didWithdrawProfit(bytes32,address,uint256,uint256)", +"1989a5ba": "canDoLoop(uint256,uint256,uint256)", +"1989d175": "YEAR_THREE_SUPPLY()", +"198a2085": "isATrustedContract(address)", +"198a5423": "presaleFundingGoalReached()", +"198ae785": "payTrnsTax(address,uint256)", +"198b5d0d": "MinimumPoStokens()", +"198c1f97": "getKeysfromETH(uint256,uint256,uint256)", +"198c548b": "supplyTokensSaved()", +"198df3b9": "LoginCheck(bytes32)", +"198e2b8a": "create(string,string)", +"198fa9a3": "isSigned(address,address,bytes32,uint8,bytes32,bytes32)", +"19901f1d": "TokenSale(uint256,uint256)", +"19901f20": "removeMultipleAllowedAddresses(address[])", +"19902b40": "changeCardAttr(uint256,uint16[5],uint16[5],uint16)", +"199099dc": "updateAccountState(address,uint256,bool)", +"1990ad6b": "private_delPermittedRoll(uint256)", +"1990f521": "fundings()", +"199156e4": "generatePresaleHouse()", +"1991d34a": "getDataColla_AB_02(string)", +"1991d6ac": "moveTokensFromSaleToExchange(uint256)", +"19921ad2": "AuthStart()", +"199317cf": "mining_uncle(bytes,bytes,uint256)", +"199326cb": "lastBlock_a2Hash_uint256()", +"1993584b": "countSecondWinners()", +"1994ad1e": "founderEggSupply()", +"19950c5b": "withdrawUnprotectedFunds(address,address,uint256,bool)", +"1995333b": "burnFunds(uint256)", +"1995b86d": "changeServerState(uint256)", +"199676c7": "TOKEN_RATE_40_PERCENT_BONUS()", +"19973261": "assigner()", +"19978a49": "rejectRequestUnpause()", +"1998524c": "updatePriceBottomInteger(uint256)", +"1998a5c4": "RHC()", +"1998aeef": "bid()", +"1998fb75": "addCar(uint80)", +"19996d50": "DinosaurFarmer()", +"1999cf37": "CHINESE_EXCHANGE_BUYIN()", +"1999eca8": "attack(uint8)", +"199a620a": "acceptNegotiationOwner(address)", +"199ba9e8": "basicFunctionReturn()", +"199c8b74": "SecvaultTest()", +"199cbc54": "totalVested()", +"199d70f4": "forceWithdrawRejected(address)", +"199d743a": "bountyTransfers()", +"199ed01b": "weightOf(uint256,uint256)", +"199f0791": "withdrawCntr(uint256)", +"199f4045": "NewRisk()", +"19a04a33": "SetDraftOrder()", +"19a08058": "setDelay(uint256,uint8,uint256)", +"19a0d492": "getValueOfInitialTokens()", +"19a0e572": "unverifyAddresses(address[])", +"19a17468": "ENS(address)", +"19a1b54f": "WEI_PER_ETHER()", +"19a1c691": "_removeChild(uint256,address,uint256)", +"19a1f592": "BONUS_AMOUNTS(uint256)", +"19a231eb": "getMilestoneDisputes(bytes32)", +"19a278b9": "getBAddress()", +"19a2bfd8": "unreadMessageCount(address)", +"19a32f66": "setHashByProvider(address,bytes32,bytes32)", +"19a3d0bb": "getMyStrippers()", +"19a3e3c0": "getAllRevenue()", +"19a50f49": "numUsers()", +"19a51554": "scheduleNextAuction(address,address)", +"19a523b0": "Violated(string,address)", +"19a5ce51": "oraclizeGasExtraArtwork()", +"19a64104": "Lockup6m(address)", +"19a6b356": "updateStrategyLabel(bytes15,string)", +"19a6fe7d": "setFixedAssets(bytes32,bool)", +"19a72fef": "DroneEmployeeROS(address,int256,address,address)", +"19a7e59d": "assertEq4(bytes4,bytes4,bytes32)", +"19a876c2": "stopPubTrade()", +"19a9119f": "prolongedDuration()", +"19a96e72": "setCarrotsMultiplier(uint8)", +"19a9c2f1": "generateId(string)", +"19aaff86": "claimAllDividends(address)", +"19ab453c": "init(address)", +"19ac2756": "TIER1_RATE()", +"19ac74bd": "userCampaigns(address,uint256)", +"19ac8c0f": "payComission()", +"19adda2c": "fairsaleProtectionOFF()", +"19ae8994": "test1(uint256)", +"19aec48a": "endTimeNumber()", +"19aec6a9": "newThreadEvent(uint256,string,string,uint256)", +"19af1bd9": "WeiRaised()", +"19af6f48": "crowdsaleTokenSold()", +"19afa824": "setFactoryInterface(address)", +"19afdfe1": "showMigrationAmount(address)", +"19b0297d": "info_BalanceOf(address)", +"19b05f49": "accept(uint256)", +"19b09f9b": "payWinner(address)", +"19b1f94b": "getLastAuditPass(address)", +"19b24684": "updateEntity(uint256,address,uint256)", +"19b35f3d": "organisationIndex(address)", +"19b36162": "updateParams(uint256,uint256,uint256,uint256,uint256,uint256)", +"19b3fa4b": "removeEmitter(address)", +"19b4006e": "get45(uint256,uint256)", +"19b500ef": "deposit_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256,uint256)", +"19b5176e": "memberGroupNameHash(address)", +"19b587ad": "putCompanyOnsale(bytes32,uint256)", +"19b61c09": "createSaddle1(uint256,uint256,uint256,address)", +"19b64015": "connectorTokens(uint256)", +"19b667da": "setFinalizeAgent(address)", +"19b6eabe": "setBounty(bytes32)", +"19b7b0b4": "acceptBid(uint256,uint256,bytes32)", +"19b7d7bd": "getBudget(address)", +"19b97530": "setFundariaPoolAddress(address)", +"19b985b3": "fixamt()", +"19ba0b63": "getNumberOfProjects()", +"19ba567c": "cancelAddOwnerRequest()", +"19bad1b2": "Stage1MEI()", +"19bb3c3d": "Reddit(uint256,uint256,bytes,bytes)", +"19bba58b": "_updateInventories(uint256,uint256,uint16)", +"19bdfc7f": "returnTokensFromHoldProjectAddress(uint256)", +"19be28ec": "CurrencySwap()", +"19be65f0": "GetBalance(address,address)", +"19bece1b": "buytoken(uint256)", +"19bee474": "totalFundsDistributed()", +"19bf01c0": "firstLockTime()", +"19c02b27": "allowTransfer(address,uint256)", +"19c039bc": "airDropJoin(bytes32)", +"19c0737f": "WineChainToken()", +"19c2a5b5": "auctionClose()", +"19c2b4c3": "getLastRequestId()", +"19c2f201": "GEN0_AUCTION_DURATION()", +"19c32e0b": "hmacsha256(bytes,bytes)", +"19c35319": "extendCaller(address,address,uint256)", +"19c38c66": "inPermission(address,bytes4)", +"19c46f51": "kscBatchBurnWhenMoveToMainnet(address[],uint256[],string)", +"19c47214": "getBlockVersion(bytes)", +"19c4e40f": "envelopeTypes(uint256)", +"19c54359": "createData(uint256,uint256)", +"19c55a31": "SearchByGit(bytes)", +"19c55cea": "cancelBid(bytes32,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint8)", +"19c5ab4b": "addAccountReader(address,address)", +"19c5b887": "bonusSize()", +"19c5b89c": "DToken()", +"19c5ef1b": "oneStepRate()", +"19c61b6f": "dealEndOffer(bool)", +"19c6c6cd": "THRD()", +"19c6eeb8": "getIPFS(address,string)", +"19c76700": "withdrawBankroll(uint256)", +"19c85a4d": "RakugoCrowdsale(uint256,uint256,address,address,address[])", +"19c87f1f": "toAddress()", +"19c8b591": "ChangeCurrencyAdditionFee(uint256)", +"19c97154": "getLastTicketTime()", +"19c9a4f3": "platformTokensAddress()", +"19ca6feb": "_appendSchellingSupplyChanges(uint256,uint256,bool)", +"19ca964c": "_isOperatorForTranche(bytes32,address,address)", +"19cac495": "isYes(uint256)", +"19cae462": "difficulty()", +"19cb355d": "requiredStake()", +"19cbe072": "contractFallback(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"19cc02aa": "airdropped()", +"19cc1ec4": "maxContributionAmount()", +"19cddd4b": "hackoin(string,string)", +"19ce4432": "DMPhuongToken()", +"19ceb660": "Ticket_Price()", +"19d0f54d": "allowRecovery()", +"19d152fa": "vestingToken()", +"19d1997a": "supplyLimit()", +"19d1b6c6": "getRegistrationRight(address)", +"19d1d967": "MOAC()", +"19d2993e": "phase1DurationInHours()", +"19d2fe85": "_iD()", +"19d3237c": "setDataColla_001_002(string,string)", +"19d375f1": "isLeagueRosterContract()", +"19d3be48": "_getPartId(string,uint8,uint8,uint8)", +"19d40b08": "approved()", +"19d41c69": "ticket_price()", +"19d45925": "isJobHasFreelancer(bytes)", +"19d45a08": "launchContract()", +"19d46f71": "makeWeeklyInvest(uint256)", +"19d4c380": "setBestGuessSecondPlaceTentativeWinningPayoutDistributionHash(bytes32)", +"19d56f84": "BuyChestSuccess(uint256)", +"19d70e0b": "createSaleAuction(uint256,uint256)", +"19d7943a": "reLoadXid(uint256)", +"19d8ac61": "lastTimestamp()", +"19d9217c": "midTermHolding()", +"19d9c8df": "ScaleObs(address,bytes32)", +"19da8c99": "getICOStatus()", +"19dacbf8": "Deposit(address,bytes32,uint256)", +"19dad16d": "setOwnerCutPerMillion(uint256)", +"19dba3d2": "getBountyToken(uint256)", +"19dc2525": "closeChannelEcrecover(bytes32,uint8,bytes32,bytes32,uint256)", +"19dc831a": "withdrawHavvens(uint256)", +"19dd9455": "getContractTimestamp()", +"19ddd5a3": "_buyXname(bytes32,uint256,bytes32)", +"19de029a": "setBountyDuration(uint256)", +"19dec62a": "approveAgreement()", +"19e044f8": "MockToken(uint256)", +"19e06f20": "mintIssuerToken(address,uint256)", +"19e072ef": "updateStatus(bool)", +"19e0a0cf": "sendTokensWithLock(address,uint256,bool)", +"19e0eb0e": "currentBlockHash()", +"19e13c93": "winningTeamName()", +"19e1568c": "pause_1()", +"19e1d8d4": "Luckblocks()", +"19e1fca4": "allowed()", +"19e3897a": "UpdateUserExtraData2(address,bytes32)", +"19e3a1d8": "BoomstarterICO(address[],address,uint256,bool)", +"19e4540b": "getBankAccount()", +"19e5221a": "getBonusFee(uint256)", +"19e5bf3a": "Register()", +"19e5d0cb": "mintInPeriodCount(uint256)", +"19e66508": "ztToken()", +"19e6ab23": "icoDiscountLevel1()", +"19e6e158": "totalVotes(uint256)", +"19e740c0": "getNextVestingIndex(address)", +"19e743fe": "addICOToken(address,address)", +"19e77c34": "startSlotAt()", +"19e7998c": "votingInfo()", +"19e7fbc2": "totalEthPos()", +"19e82d86": "cfi_whitelist(address)", +"19e82e6f": "BrokerBank(address,uint256,address,address)", +"19e858e5": "processCollateral(address,address,uint256,uint256,uint256,uint256,bool)", +"19e860c1": "secondPrivateLockedAmount()", +"19e9e5de": "getGooProduction(address)", +"19ea61db": "testFailTransferDisabled()", +"19ea809b": "intercrypto_convert(uint256,string,string,address)", +"19ea8a98": "setPackSaleAddress(address,address)", +"19eae36b": "setMaxBlockPurchaseInOneGo(uint256)", +"19eaeccb": "getInfoCellLockup()", +"19eb4a90": "getValues()", +"19eb5dc6": "transferToken(address[])", +"19eb691a": "curUserId()", +"19eb8d48": "canVote(address,uint256)", +"19ecb310": "allocateTicket(address,address)", +"19eced6d": "mCURRENT_STATE()", +"19edc0aa": "minimalInvestment()", +"19ede85a": "Hydron(uint256,string,string)", +"19ee1f1c": "getPrizeFund()", +"19ee5bca": "BountyManagerEntity()", +"19f02ceb": "set(address,address,uint256)", +"19f1cded": "getStakedTeller(address)", +"19f1d7b0": "Kentkoin()", +"19f2b931": "removerAssinatura(string)", +"19f30aaa": "hire(uint64,address[])", +"19f353bb": "protectionPrice()", +"19f37361": "isToken(address)", +"19f3edec": "_released(uint256,uint256)", +"19f4ff2f": "setFeeRatio(uint256)", +"19f577b3": "placeBuyOrder(uint256)", +"19f8dee9": "isEthWithEnc(uint16)", +"19f97a46": "createContractPlace(string,string)", +"19fa55bd": "MinasAlbarit()", +"19fa8f50": "InterfaceId_ERC165()", +"19fa9f72": "DNNToken()", +"19fac8fd": "setCommissionRate(uint256)", +"19fb361f": "transferTo(address,address,uint256,bytes)", +"19fb52db": "mainPoolCutPercentage()", +"19fc36ed": "MIN_TRANSFER_TIMESPAN()", +"19fc3b9d": "getMyHolding()", +"19fc5b88": "minEthAmount()", +"19fc5dfa": "LogBeneficiarySet(address,address)", +"19fc9e54": "cashInvestment(address,uint256)", +"19fce740": "capCommitment()", +"19fd93f1": "unregisterSsp(address)", +"19feda7e": "addEmployee(address,address,uint256,uint256)", +"19ff1d21": "hello()", +"19ff7096": "cost_of_transfers()", +"1a000513": "getLotteryResultTotal(address)", +"1a0058f5": "getBatchInfo(uint256)", +"1a006503": "hasAlreadyClaimed()", +"1a009265": "setArrBoolField1(bool[])", +"1a013939": "gameStarted(string,uint256,uint256,uint256)", +"1a017f3f": "transferPrivileged(address,uint256)", +"1a026c96": "wallet1()", +"1a02af40": "tokensInAuctionsOfOwner(address)", +"1a036357": "removeDeactivatedList(address)", +"1a038873": "FREEZE_TIME()", +"1a041463": "retryOraclizeSetProof(uint256)", +"1a04d5c5": "startingFeeBalance()", +"1a053713": "unblockTokenFunds(address,uint256)", +"1a05619b": "infoTier()", +"1a05ba8d": "setPI_edit_12(string)", +"1a06008a": "dividendFund()", +"1a069c72": "contribute(uint256,uint256,uint8,bytes32,bytes32)", +"1a0725ce": "wagerIndex()", +"1a0726df": "getHatValue(uint256)", +"1a080a7a": "placeBet(uint8,int8,uint256,uint256)", +"1a081330": "isSaleOpen()", +"1a08a7bf": "ConfigAction()", +"1a08b189": "setFounderAddress(address)", +"1a0919dc": "unregister(bytes32)", +"1a092541": "getDescription()", +"1a09510a": "index(address[],address)", +"1a0a617d": "fetchVoteInfoForCandidateByIndex(uint256,address)", +"1a0a8fae": "creditJackpotTokens(address,uint256,uint256)", +"1a0a9ac7": "KNOXV()", +"1a0abd34": "getMyDepositAmount()", +"1a0b1b86": "crowdPrice()", +"1a0b4656": "LiveStarsToken()", +"1a0bc596": "pandora()", +"1a0be73f": "DispatchHub()", +"1a0c3479": "decreaseApproval(address,uint256,bytes,string)", +"1a0c83f8": "buyerLastPaidAt(uint256,address)", +"1a0d77b9": "ClaimAmount()", +"1a0ddce9": "setRewards(address[],uint256[],uint256[])", +"1a0de74c": "selectWinners()", +"1a0e722b": "LogDeliverEVN(address,uint256)", +"1a0f0bf1": "unrestrictedMintToPool(uint128,uint256,uint128)", +"1a0f2f5f": "BroToken()", +"1a0f518d": "updatePlayerBalance(address,int128,int128,uint256)", +"1a0faecf": "addNewMeme(uint32,string,string,string,string)", +"1a0fb847": "disperseRewards(address,uint256)", +"1a10cfc3": "delete_entry(uint256,uint256,uint256)", +"1a11415e": "PRIVATESALE_BASE_PRICE_IN_WEI()", +"1a120481": "enlist()", +"1a12e7a9": "setCreationFee(uint64)", +"1a144940": "codetokenIndexToOwner(uint256)", +"1a145c34": "getNumEthTweets()", +"1a148644": "newDocument(string,string)", +"1a14e94a": "buyAnimal(uint256)", +"1a14f128": "EventCreateAccessory(address,uint256)", +"1a14ff7a": "getD()", +"1a1542e6": "checkGameResult()", +"1a15b206": "holdTokens(address,uint256)", +"1a160fe9": "checkPermission(address,address)", +"1a170aa1": "buyTickets(bytes32)", +"1a1773f4": "otherchainstotalset()", +"1a182801": "createNewCertifier()", +"1a18e707": "setBlockReward(uint256)", +"1a197588": "availableAmount(address[3],uint256[4])", +"1a19b0da": "confirmEngineerQuest(address)", +"1a1a0d65": "distributeSRNT(address[],uint256)", +"1a1a0d76": "updateTopicDescription(bytes15,string)", +"1a1a4ed7": "HALVING_DELAY()", +"1a1a7993": "random(uint64)", +"1a1a8da8": "WebPay()", +"1a1aab46": "unlock_times(uint256)", +"1a1abe3d": "sizes(uint8)", +"1a1b8d08": "CompleteInit()", +"1a1c59e2": "setBidSubmissionProofsAdd(address)", +"1a1ceb11": "cloneProposal(uint256,string,bytes32,uint256,uint256,uint256,bool)", +"1a1d28aa": "ClaimAcornShare()", +"1a1dca07": "setLockFunds(address[],uint256)", +"1a1df394": "Play(bool)", +"1a1e01d5": "pushAllRemainToken(address)", +"1a1eea7d": "ProposalRequestSubmitted(bytes32,uint256,uint256,string,address)", +"1a1feae1": "txGasPriceLimit()", +"1a2084f1": "updateCreator(address)", +"1a209776": "isVerified(address,uint256)", +"1a21bb22": "PREVIPdeadline()", +"1a21c229": "gracePeriodMaxTarget()", +"1a2309f0": "CONTRIBUTION_MAX()", +"1a23bee3": "endOfROSCARetrieveFees()", +"1a24b91a": "setPriceFee()", +"1a24befc": "clearSaleSharesSold(uint256)", +"1a254884": "Coffeecoin(uint256,string,uint8,string)", +"1a256090": "sawan()", +"1a25e513": "upgradeProvider(address,address)", +"1a261fda": "scoreUp(address)", +"1a26ed1c": "validateReservedWindowSize(uint256,uint256)", +"1a2a4ab5": "withdrawDeadFund(address)", +"1a2a627c": "nextroundtotalsupplyGOTCH()", +"1a2ad007": "GetCurRoundInfo()", +"1a2b3431": "completeBooking(uint256)", +"1a2b3adf": "signedTransferFromHash(address,address,address,uint256,uint256,uint256)", +"1a2b4cd8": "airDropPool_()", +"1a2b6250": "canPerform(address,address,bytes32)", +"1a2c4334": "FortuneGodToken(address)", +"1a2c752a": "testLimiting()", +"1a2d3be8": "masterNodable()", +"1a2d72fb": "_api_PlaceBet(bool)", +"1a2d8629": "getinfo()", +"1a2e2b2c": "getHolderIndex()", +"1a2eaaeb": "Unicoin()", +"1a2f1640": "amountSecond()", +"1a300a98": "_setCooldownEndTime(uint256,uint256)", +"1a3057f3": "performAddToken()", +"1a30ec13": "ETHWallet()", +"1a311968": "roundICO()", +"1a3142bd": "depositAndWithdraw(uint256)", +"1a314552": "isUsernameExists(string)", +"1a31752a": "masternodes(uint256)", +"1a31e733": "WinningsClaimed(address,uint256)", +"1a327d97": "bitmask_rm(address,uint256)", +"1a3352c1": "getOrderBookSize()", +"1a3480b5": "rateDecimals()", +"1a34b59d": "OjtToken()", +"1a34fe81": "max_amount()", +"1a3538f3": "closeFailedInstallationAndWithdraw()", +"1a360f5f": "EWM()", +"1a363bf1": "giveMeTokens()", +"1a365f2b": "stampIndexToOwner(uint256)", +"1a3722b2": "grantPermission(uint8,address)", +"1a372eaa": "allPiranhasInfo(uint256)", +"1a3739ec": "getInitialReporter()", +"1a389eb9": "exploreFastenEMONTFee()", +"1a38fa06": "distributeBounty(address[],uint256[])", +"1a399698": "genDailySecondPrizeKey(uint8[4])", +"1a39d8ef": "totalAmount()", +"1a39e1cf": "addAffiliate()", +"1a3a67d8": "zGetGameID()", +"1a3ae67a": "getPlatBalance()", +"1a3b8bad": "CABoxCrowdsale()", +"1a3cb4f5": "getBalanceA(bytes)", +"1a3cd59a": "getInfo(uint256)", +"1a3d069b": "totalEuroUlps()", +"1a3d96ff": "IdentityManager(bytes32)", +"1a3dc39c": "getRewardPotSetting()", +"1a3de5c3": "_pay()", +"1a3e42d0": "setSignUpOnOff(bool)", +"1a3e5457": "validDestination(address)", +"1a3e91b9": "getTitle(bytes32)", +"1a3f9eb5": "getVanillaERC20BalanceSlot(address,uint256)", +"1a421103": "getProperty(address,bytes32)", +"1a426550": "claimBounty(uint256,string)", +"1a429a0e": "SCND_CRWDSALE_RATIO()", +"1a433daf": "withdrawProposedAction()", +"1a437780": "orderOnFightAuction(uint256,uint256,uint256)", +"1a43c338": "compute()", +"1a44731c": "statePhase()", +"1a454ea6": "COMMISSION_RATE()", +"1a45fac7": "removeOwner(address,address,address)", +"1a463a7d": "amountReceived(uint256)", +"1a464fa1": "claimProductOwnership(bytes32)", +"1a470b6a": "SweepBalances()", +"1a476260": "indiFundAndSocialVaultDeposit()", +"1a4813d7": "setBaseRate(address[],uint256[],uint256[],bytes14[],bytes14[],uint256,uint256[])", +"1a488a60": "zpzToken(uint256,string,uint8,string)", +"1a48fb3a": "testDeleteLawyer()", +"1a49803b": "investWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", +"1a4a1a6c": "benefactorsBalance()", +"1a4b4cff": "updateWithdrawalModeByIndex(uint8,uint32)", +"1a4b746f": "CharacterRegistry()", +"1a4bcc4a": "validTokenBalance(address)", +"1a4be5d8": "HITSCoin()", +"1a4be6ff": "ConstantConfig(uint256,bool,bool)", +"1a4c24f9": "purchaseInternal(address,uint256,address)", +"1a4e0afd": "countBit(uint8)", +"1a4e1e78": "tips()", +"1a4e9a6c": "getWithdrawConfirmations(uint256)", +"1a4f5b67": "isFrontRunnerPeriodOver()", +"1a4fb653": "getGDemoc(uint256)", +"1a4fbee1": "committeesArrayIndexCounter()", +"1a514d97": "reActivate()", +"1a51a28c": "contributorsAllocation()", +"1a52691b": "refundForAll(uint256,uint256)", +"1a534fd1": "calcCanAcceptAmount(address,bool,uint256)", +"1a5375e1": "passTurn(uint256)", +"1a53cd90": "presaleBalancesLocked()", +"1a555b0c": "NewClonedToken(address)", +"1a55ad28": "_verifyProof(string,bytes,bytes,uint256)", +"1a55b8f7": "BACKUP_ONE()", +"1a582962": "isMintingFinished()", +"1a58349a": "fetchCreatedOrdersForPayerByAdmin(address)", +"1a5834aa": "start_game(string,string)", +"1a592bc1": "saasPayUser()", +"1a5ab391": "Wallet7()", +"1a5b189d": "NCASHTOKEN()", +"1a5b72c3": "endStage3()", +"1a5b8f96": "MAX_SITE_ID()", +"1a5bd7fc": "getTournament(uint256)", +"1a5d3b75": "getAssetIdOwner(uint256)", +"1a5d60bd": "removeBoard(address,address)", +"1a5dbe98": "iflea()", +"1a5e2110": "tokensPerEthPrice()", +"1a5e6f7d": "getOneBet()", +"1a5e7852": "kaliSupply()", +"1a5eba21": "invest(uint256,string)", +"1a5f9613": "DevMiningRewardPerETHBlock()", +"1a5f9bed": "exploreUsingETH(uint256,uint256)", +"1a620a3e": "AgriChainMasterContract()", +"1a6253ed": "ownerTransferPHX(address,uint256)", +"1a629b00": "AddTokensToMember(address,uint256)", +"1a62c928": "approveAllocation(address,address)", +"1a62f6f7": "escrowReturn(address,uint256,uint256)", +"1a63aa4d": "prolong(uint256)", +"1a64937b": "cleanupAbandonedGame(address)", +"1a64adae": "vestedTokens(address,uint256)", +"1a65569b": "placeBid(uint256,uint256,uint256,uint256,bytes32)", +"1a65d3c2": "SnakeFarmer()", +"1a65e283": "buyCountry(uint256)", +"1a668c42": "finishAirdrop()", +"1a67456e": "getNumberOfItemsByTypeAndOwner(string,address)", +"1a67d6e5": "MainSaleClosed()", +"1a68b1a1": "setRetirementManager(address)", +"1a690752": "UDCC()", +"1a695230": "transfer(address)", +"1a699085": "view64()", +"1a6a3c03": "GetEscrowOwner()", +"1a6a57f4": "getInviters()", +"1a6af7b7": "currTime()", +"1a6b0e73": "addArts(address)", +"1a6b13e2": "changeMinimumTakerProtocolFee(uint256)", +"1a6becd6": "getAllDividends()", +"1a6c0983": "getShipSell(uint32)", +"1a6c6e38": "MagicStore(address)", +"1a6c9c0d": "withdrawStart(uint256[],uint256,uint256,uint256)", +"1a6d7561": "getFundingInfoOfPhase(uint8)", +"1a6dafa6": "getJackpotRoundEndTime()", +"1a6e1315": "pay_salary(uint256)", +"1a6e2445": "changeRelease(uint256)", +"1a6ea411": "MANHATTANPROXY5THAVE()", +"1a6f1974": "disableNodeRegistration()", +"1a6f56a0": "balancesLocked2Y(address)", +"1a6f7be5": "voteNo(uint256)", +"1a6fb342": "getTransferStatus()", +"1a700013": "inWhiteList(address,address)", +"1a700a95": "QWHappy()", +"1a701609": "HEAD()", +"1a70388f": "shareToWei(uint256)", +"1a70d015": "exchangesTokens()", +"1a715bcf": "lauToken(address,address)", +"1a71733c": "determineAllocation(address,address[],uint256[])", +"1a71d3db": "freezingBalanceNumberOf(address)", +"1a7303de": "eddToken()", +"1a73293d": "updateWhitelist(address,uint256)", +"1a74d536": "hasExited(address,address)", +"1a750945": "vote03YesCount()", +"1a751b2c": "makeMonthlyInvest(uint256)", +"1a7626e7": "minimumFee()", +"1a76e30c": "BONUS_DAY2_DURATION()", +"1a776b3c": "reclaimSurplusEth(address)", +"1a7777bb": "getMarketSpreadPremium(uint256)", +"1a787915": "startConditions(bytes32)", +"1a790a2c": "_setPowerPool(uint256)", +"1a79464e": "setFeeBurner(address)", +"1a799617": "revokeRound(uint256)", +"1a79bbef": "addAddressToMaster(address)", +"1a79c5de": "setTimeWindow(uint256,uint256)", +"1a7a98e2": "getDomain(uint256)", +"1a7ae0ba": "updateCostUSD(uint256)", +"1a7aed0e": "_checkMyAging(address)", +"1a7b11f5": "epoch_fund()", +"1a7b9fe7": "setCouponRatio(uint32)", +"1a7c6eb0": "getHalvingBlocks()", +"1a7c7105": "__load128(bytes)", +"1a7cecb2": "recoverAddressFromCooperativeSettleSignature(uint256,address,uint256,address,uint256,bytes)", +"1a7cf619": "round0StartTime()", +"1a7e0c50": "totalBaseLareSoldInPreSale()", +"1a7f8588": "IRE()", +"1a7facff": "rcn()", +"1a7fae47": "pubkeys2(uint256)", +"1a8012e4": "is_active()", +"1a809b02": "unpauseRefund()", +"1a81284b": "CCH_FGRE_1()", +"1a81a01f": "configContract(uint256,address[],uint256[],uint256[],uint256[],uint256[])", +"1a81c3a2": "getUserContract(address,uint256)", +"1a81e7b4": "getExtender()", +"1a82844c": "getERC721AmountPawn(uint256,address)", +"1a82eeb4": "ocpTokenContract()", +"1a833d3f": "trancheNumerator()", +"1a83690d": "Work()", +"1a841b1b": "configureFromStorage()", +"1a8432ea": "isUnLockedAccount(address)", +"1a844205": "SaintCoinWorld()", +"1a859db8": "rewardsAccounts(uint256)", +"1a85bd57": "_find(uint256)", +"1a85c6cb": "RandomNumber(uint8)", +"1a85f4fb": "UrlHint(int256)", +"1a85f7d2": "applySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1a860d91": "AddUser(string,address,uint256)", +"1a861d26": "maxLimit()", +"1a86430e": "calcTotalShareRewardFee(uint256)", +"1a86535a": "GetWhoSignedAVersion(string)", +"1a86ac4f": "initialAddressSet()", +"1a86d5b6": "sendToOtherBlockchain1(string,string)", +"1a871a2c": "playerCharacter(uint256,uint8)", +"1a88bc66": "slot()", +"1a88cc31": "getCommissions(uint256)", +"1a88f306": "transferFromContract(address,uint256)", +"1a8932d9": "allocated2Year()", +"1a8943dd": "overflowResistantFraction(uint256,uint256,uint256)", +"1a895266": "unBlacklist(address)", +"1a8a5de1": "citizensAmounts()", +"1a8a85f3": "checksum(address)", +"1a8af7a8": "restartMint()", +"1a8b1874": "endprivate()", +"1a8c7243": "presale_finish()", +"1a8dc392": "checkAddressTeamTwo(address)", +"1a8f8f3e": "MJCCToken()", +"1a8fc985": "INITIAL_TOKENS_PER_ETHER()", +"1a9069cf": "signDate(bytes32)", +"1a90f0c4": "numTurnsToRevolve()", +"1a918bdd": "addTraps(uint256,bytes,uint256[])", +"1a92e6da": "Veegotoken(uint256,uint256)", +"1a9360dd": "checkDate()", +"1a93d1c3": "getGasLimit()", +"1a93fa4b": "reorganizeSubUsers()", +"1a9425c1": "verified(uint256)", +"1a94d49b": "BASE_BET_ETHER()", +"1a955061": "numToWei(uint256,uint256)", +"1a95bc99": "GreatHarmon()", +"1a95f15f": "TICKET_PRICE()", +"1a968069": "multiSig(bytes32)", +"1a974bb5": "KOCMOC()", +"1a97d1fa": "CLASSYToken()", +"1a98d0de": "whitelistedParticipantsLength()", +"1a991f0d": "approveSpenderDecimalAmount(address,uint256)", +"1a9938aa": "activateAddress(address,bool)", +"1a994fd2": "addVideoGame(string,address,uint256)", +"1a99bed2": "VestingSent(address,address,uint256,uint256,uint256)", +"1a9a01fb": "removeGame()", +"1a9a0426": "setDecimal(uint8)", +"1a9aa710": "ownerAuctionCount(address)", +"1a9aea0a": "lockTransfer()", +"1a9b0b7c": "isWinner()", +"1a9b26a2": "decode(bytes,uint256,uint256,uint256)", +"1a9b70f2": "destroyBlockFunds(address)", +"1a9be331": "getFastExtra()", +"1a9bf9cf": "bountyTokens()", +"1a9c4571": "listEggsIds()", +"1a9caab9": "createGen0(uint256)", +"1a9d64c8": "publicsale_address()", +"1a9df17b": "OrderPaid(uint256,address,uint256,uint256)", +"1a9df9d4": "getLowerSend()", +"1a9e3e18": "ownerBuyCut()", +"1a9f170d": "buyIcoToken1()", +"1a9f66c4": "StrimTeam()", +"1a9faa80": "setUpdateAddress(address)", +"1aa022bf": "UacToken()", +"1aa02d59": "set_fee(uint256)", +"1aa05ab6": "testSellTwoTokens()", +"1aa19567": "interruptLastRound()", +"1aa20b68": "verify(address,uint256,uint8,bytes32,bytes32)", +"1aa260c0": "withdrawAsSupporter(uint256)", +"1aa2852f": "DToken(address)", +"1aa359ff": "newTokenContractAddress()", +"1aa37733": "AudCoinToken()", +"1aa3a008": "register()", +"1aa43078": "minTime()", +"1aa44efd": "createNamedDistrict(uint256,string,bool)", +"1aa49291": "Getter()", +"1aa57ec5": "TokenLab(address,uint256,uint256)", +"1aa58bd3": "isAetherClockAuction()", +"1aa5b55c": "stageTwoStart()", +"1aa5c70e": "getDAI(uint256)", +"1aa6e29f": "hasOneYearWithdraw()", +"1aa7655c": "START_TOKENS()", +"1aa7e54c": "dungeonDifficulty()", +"1aa859d0": "remTokenPairWhitelist(address,address)", +"1aa86370": "updateXIPFSPublicKey(string)", +"1aab7bb5": "setParamsPreSale(bool)", +"1aab9a9f": "holderCount()", +"1aabaffe": "WhaleToken()", +"1aac38c8": "addPhase(uint256)", +"1aacd03c": "checkNewPlayer(address)", +"1aad5bc2": "_getRarity(uint256)", +"1aad8b82": "calculatemortiesell(uint256)", +"1aadadaa": "getRegistrantFund(address)", +"1aadcc34": "convertGreyGreen(uint8,uint8)", +"1aadddea": "investorGiven()", +"1aae3460": "investedAmountOf(address)", +"1aaf39ff": "check_dividend(address)", +"1ab06ee5": "set(uint256,uint256)", +"1ab08c61": "albosAddress()", +"1ab1025c": "tokensOutInMarket()", +"1ab12b10": "CurrentDevFee()", +"1ab268d6": "getCompleteSetCostInAttotokens()", +"1ab27060": "Unapproved(address,address)", +"1ab2935c": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256,uint256)", +"1ab30817": "gasLimitForOraclize()", +"1ab3a6c8": "getParentsForTokenId(uint256)", +"1ab3c515": "balanceOfLocked1Y(address)", +"1ab3d055": "removeAdminWhitelist(address[])", +"1ab46d4e": "referralBonusCalculate(uint256,uint256)", +"1ab51aec": "buyEPU()", +"1ab59612": "setAllowPriceLower(bool)", +"1ab5c5b8": "adduser(address,uint256,uint256)", +"1ab5d260": "transferTo()", +"1ab681e8": "withdrawEth(uint256,address,bytes32)", +"1ab733a3": "getTotalProfits(address)", +"1ab7df5f": "addUserTokens(address,uint256)", +"1ab86572": "calculateRoom(uint256,uint256,bool,uint256)", +"1ab8bc44": "_setMilestoneTo(address,uint256,uint8)", +"1ab8ff3b": "_finalization()", +"1ab961a1": "BSDB()", +"1ab971ab": "setFee(uint32)", +"1abb0ba9": "getTotalCurrentSaled()", +"1abb10e8": "chipSpeed()", +"1abb7192": "YCCToken(uint256,string,uint8,string)", +"1abca540": "Toptech()", +"1abd409d": "champsForSaleCount()", +"1abe8385": "InvestmentToken()", +"1abebea8": "LogSetAuthority(address)", +"1ac10d11": "testGreatherThanOrEqual()", +"1ac10f1f": "setPixelRate(uint256)", +"1ac14219": "testEns()", +"1ac25a81": "RegisterDrupal()", +"1ac25e99": "extractBalanceProofSignature(address,uint32,uint192,bytes)", +"1ac33b3d": "createTrack(bytes32)", +"1ac39336": "GelatoCoin()", +"1ac3ddeb": "withdrawFee(address)", +"1ac46290": "setProviderInfo(uint256,string)", +"1ac4754b": "redeemInternal(address,bool)", +"1ac47963": "functionSeven()", +"1ac589b4": "setJoiningFee(uint256)", +"1ac58dd5": "kimsCreated()", +"1ac5c96f": "test_4_someTest()", +"1ac61e8c": "testBlobCreate()", +"1ac68a12": "HavvenGoldSupply()", +"1ac7e1f9": "CollectedAllFees(address,uint256)", +"1ac84690": "powerOf(address)", +"1ac8a9b2": "teamlock()", +"1ac8aa4e": "minimowea()", +"1ac9180e": "tokenReinvest(uint256)", +"1ac96124": "numOfCommon()", +"1ac975ed": "UcCoinPriceChanged(uint256,uint256)", +"1ac9f70d": "multiplicate(address)", +"1aca00fd": "variable(uint256)", +"1aca120b": "updateAnimalSpecial(uint256,bool)", +"1acb2719": "getNextRequest(address,address)", +"1acb7077": "setCentsPerToken(uint256)", +"1acbf6e0": "alfatokenFee()", +"1acc26bc": "disableLimit()", +"1acc478a": "getContentMetrics(address,address,bytes32)", +"1acc57b8": "AGENCY_TOKEN_CAP()", +"1acd8237": "LEK(string,string,uint256,uint8)", +"1ace02a3": "RaptorsvsWizards425()", +"1ace4d05": "bigAmount()", +"1ace88a4": "realWorldPlayerTokenForPlayerTokenId(uint32)", +"1acf6485": "requestWithdrawalFromLimit(uint256,string)", +"1acfd02a": "changeAdmin(address,address)", +"1ad065f1": "prepare(uint256,address,address,uint256)", +"1ad11fd1": "TrieToken()", +"1ad2ad1a": "stopPresale()", +"1ad50586": "safePower(uint256,uint256)", +"1ad509f0": "MUIcoin()", +"1ad6037f": "LEXInContract()", +"1ad607da": "_addUserCity(address,uint256)", +"1ad614c3": "setRequireAuthorisation(bool)", +"1ad66d21": "earlyPurchasesLoaded()", +"1ad781b4": "PennyGrab()", +"1ad7c199": "callVote()", +"1ad874b4": "presaleOn()", +"1ad8f65b": "distribute_for_founders()", +"1ad8fde6": "changeSymbol(bytes32)", +"1ad95744": "START_ICO()", +"1ad9f190": "getUserHotGoldBalance(string)", +"1ada70a8": "lockupDuration()", +"1adadda8": "claimLockedTokens(address)", +"1adb4842": "setLockup_jishis(address,uint256,uint256)", +"1adb631b": "distributePuppyCoinMedium(address[])", +"1adbdfab": "SimpleApproveTransfer(address)", +"1adc36b9": "doesUserOwnCeleb(address,uint256)", +"1add4f5a": "tranferMoneyToName(bytes32)", +"1add5486": "Multiownable()", +"1add6bcf": "getDoubleKeccak256(uint256)", +"1adda83a": "calculateTokens(address,uint256,uint256)", +"1adf2bec": "CancelOrder()", +"1adf2d1a": "Offer(address,address,bytes,uint256,uint256,uint128,uint256)", +"1adf42fb": "setPreICO(bool)", +"1adf692f": "_changeSquarePrice(uint8,uint256)", +"1ae0a693": "SetApplicant(bytes32[])", +"1ae0b4d0": "master5invest()", +"1ae0c787": "getControlInfoMaxTotalImbalanceList()", +"1ae2379c": "excess()", +"1ae32b82": "disallowReceiver(address)", +"1ae3a94a": "devFeeRate()", +"1ae3d8d0": "protectedBalance(address,address)", +"1ae460e5": "isInPool()", +"1ae4dfb7": "getcardPrice(uint256)", +"1ae638f7": "times6()", +"1ae6b6ee": "cancelAuctionWhenPaused(address,uint256)", +"1ae6c09c": "showMyAnimalBalance()", +"1ae6d375": "AirSwapToken(address,address,uint256)", +"1ae7341f": "OneledgerToken()", +"1ae743ad": "withdraw_token_and_eth()", +"1ae7b7fb": "jackpotSmall()", +"1ae7b8e1": "newOffer(address,string)", +"1ae7ef0a": "QISHENG(uint256,string,string)", +"1ae8494e": "purchaseTopCompany(bytes32,bool)", +"1ae879e8": "walletOwner()", +"1ae8ab81": "setNickname(bytes32)", +"1ae8fc87": "addContract(address,address,uint256,string)", +"1ae97bd9": "updateName(bytes32)", +"1ae9fe6a": "cutOffBidID()", +"1aea4d0f": "setMaxSend(uint256)", +"1aea558a": "auditReport(address,uint256,uint256)", +"1aeb10a6": "testApprove()", +"1aebb44e": "firstBlockAllowedToMonitor(uint256,uint256,address,address,address,address)", +"1aebcb89": "getProfitPerShare()", +"1aec2cf9": "Subscribe(address)", +"1aeca515": "getTierIndex()", +"1aece0db": "PRE_SALE_END_TIME()", +"1aed001e": "_miningOneSelf(address)", +"1aed8e1e": "GigERC20(uint256,string,uint8,string,bool,bool)", +"1aedefda": "includes(address)", +"1aedf542": "ercOwnerClaim()", +"1aee3f91": "PRESALE_LIMIT()", +"1aef8058": "DECIMAL_MULTIPLIER()", +"1aefce3b": "ratioVote(bool,uint8)", +"1af11767": "CauldronsMinigamePresale(uint32,address)", +"1af217ab": "maxTokenPurchase(address)", +"1af26fc2": "isJobExpired(bytes)", +"1af2c9fd": "numberOfInvestors()", +"1af31d7b": "GetPoolEntranceFee(string)", +"1af32223": "get_owner(bytes32)", +"1af36a78": "level1(address,bytes32,uint256)", +"1af39907": "_inMoney(uint256,address)", +"1af476a6": "setEggTotal(uint8,uint256)", +"1af47cc7": "addSellTokensRequest(string,uint256,uint256)", +"1af48c85": "checkCertificates(uint256)", +"1af50c5e": "setDisbursementAmount(uint256)", +"1af5163f": "TokenBurned(address,uint256)", +"1af5205c": "period3Numerator()", +"1af526b0": "getSell()", +"1af5dd41": "balanceOfComision(address)", +"1af62808": "getLicensePrice()", +"1af6b60f": "ScamSealToken()", +"1af716ba": "transferFrom(address,address,uint256,string)", +"1af77842": "setE93ContractAddress(address)", +"1af82fbf": "viewDividendCooldown()", +"1af855f8": "Funding(address,uint256)", +"1af88bc1": "GetPatientFromAddress(address)", +"1af8c18a": "InitBalanceFrom961e593b36920a767dad75f9fda07723231d9b77(address,uint256)", +"1af97fb7": "getBabyGen(uint16,uint16)", +"1afa6542": "AirCoin(uint256,string,uint8,string)", +"1afaa8bf": "crowdfundPercentOfTotal()", +"1afc540d": "set_saleAddress(address)", +"1afcc95b": "getCCH_edit_21()", +"1afccfa5": "Proposal(address,address,address,bytes,bool)", +"1afd08a2": "setConfirmationTime(uint256,uint256)", +"1afd96dc": "withdrawForThreeYear()", +"1afe3e10": "getCurrentPhaseDivisor()", +"1afe56aa": "markRead(uint256)", +"1aff30dd": "getGameStats()", +"1affa814": "getProviderPriv(uint256)", +"1affcd7e": "createCollectible(uint256,address,uint256,uint256)", +"1b005a38": "authorizerOne()", +"1b00fe51": "testHypothesis()", +"1b011bd9": "test_insert_findWithHint()", +"1b027b44": "getBuyPosition(bytes32,uint256)", +"1b03316f": "getSecond()", +"1b044be7": "setFundScheme(uint256,uint256)", +"1b04803e": "contractModifierAddress()", +"1b04a435": "durationSecondsIco()", +"1b0569b2": "IPToken()", +"1b059c0a": "JoinRound()", +"1b05aeb5": "WinMatrix()", +"1b05c594": "newGame(uint256,uint256)", +"1b05ea8c": "CheckPrepare()", +"1b06128b": "burnLeftoverTokens(uint8)", +"1b06ec3b": "getAllTransactionIdsByEntityId(address)", +"1b0710b5": "TOZToken()", +"1b073c67": "XGEToken()", +"1b0762bb": "remunerationBalance()", +"1b076edc": "dataSource()", +"1b07fcc1": "linkImpact(string)", +"1b082009": "getCrowdsaleBalance()", +"1b088f70": "computeLeaf(uint256)", +"1b08d96f": "ret()", +"1b0a102c": "getPrediction(uint256,uint256)", +"1b0a5d4e": "totalPartnerSupply()", +"1b0a68f2": "decreaseMintApproval(address,uint256)", +"1b0b906b": "getMyPlayedAmount(address)", +"1b0ba14d": "InvestmentFailed()", +"1b0c72dc": "isRecipientActive(address,address)", +"1b0cb61f": "_whitelistAddress(address)", +"1b0d320f": "FriendsCoin()", +"1b0db7fe": "getAllValuesSum(uint256[])", +"1b0dbdaf": "manualReserve(address,uint256)", +"1b0dc452": "isAnOwner(address)", +"1b0e25e2": "onInitialized()", +"1b0e3061": "BCW(uint256,string,string)", +"1b0eaf78": "stop_or_resume_Contract(bool)", +"1b0f5395": "ChargeNetwork()", +"1b0f7ba9": "proxy(address,uint8,bytes)", +"1b0fa385": "transfeFrom(address,address,uint256)", +"1b0fc106": "acceptChallenge(uint256)", +"1b107f7b": "storeUnlockData(uint256,address,address,uint256,bytes32)", +"1b112541": "getPTicketSumByRound(uint256,address)", +"1b118984": "TOKEN_ICO1_LIMIT()", +"1b12b60f": "canBuyTokens(uint256)", +"1b130063": "sendPrize(address,uint256,string)", +"1b131bbd": "_split(uint256)", +"1b136c6f": "getPlayerRounds(uint256)", +"1b13756a": "getFirstBorrowAgreement(address,address)", +"1b14cd05": "verifyLockSignature(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes)", +"1b1665ca": "updateLimitPerMonth(bytes32,uint256)", +"1b1686b6": "currentEthInvested()", +"1b17595f": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32)", +"1b181e58": "getOverTokens()", +"1b189efb": "EURsToken()", +"1b18f952": "test01()", +"1b18ffac": "random(uint256,int256,int256)", +"1b195a7c": "buildAddition(uint256)", +"1b19f6a3": "removeReferrer(bytes32)", +"1b1a7a58": "multiSendToken()", +"1b1b6069": "initEachPUST()", +"1b1c15d5": "tokensForInvestors()", +"1b1c6acf": "getUintField3()", +"1b1ccc47": "getDSTName()", +"1b1d6af8": "_PLUTOToken()", +"1b1d95ff": "getPow(uint256)", +"1b1da1af": "updateSharePrice(uint256,uint256)", +"1b1e5d5d": "rejectMany(address[])", +"1b1ef88d": "authorizedByUser(address,address)", +"1b1f2fb8": "preTGE()", +"1b1fe68a": "SOLO_MARGIN()", +"1b203b9d": "checkAndCloseRound(bool)", +"1b2051f6": "tempTokensPeriodOf(address)", +"1b208786": "delegatedTransfer(address,address,uint256,uint256)", +"1b2212f5": "forbidDirectDebit()", +"1b23cfd2": "AceguyToken()", +"1b258d50": "withdraw(bytes32,address)", +"1b25d0e6": "POST_ICO()", +"1b26fa6a": "priceStep1()", +"1b27274b": "testPure()", +"1b27c873": "advisorsTokensFirstReleaseTime()", +"1b27c8f2": "takeBountyTokens()", +"1b27ca21": "MonthsProfit()", +"1b27e705": "_forwardFunds(uint256)", +"1b28591c": "escapeFunds(address,uint256)", +"1b28985e": "MotorToken()", +"1b29d70a": "weiRefund()", +"1b2a8715": "notIn(bytes32[],bytes32)", +"1b2ace9d": "lockedProvider(address)", +"1b2ae899": "removeModule(uint8,uint8)", +"1b2ae964": "BuyPriceChanged(uint256)", +"1b2bd803": "issueAtIco(address,uint256,uint256)", +"1b2be5f8": "transferredAtSupplyValue(address)", +"1b2bf378": "BLM()", +"1b2d26e9": "OwOWorldToken()", +"1b2d515f": "setA(bytes32)", +"1b2d93a0": "load(address,bool,address,address,address,address,address)", +"1b2dba8c": "setCertifierId(address,string)", +"1b2e4002": "LIZAToken(string,string,uint8,uint256)", +"1b2f1109": "sntController()", +"1b302a16": "tokenUnpause()", +"1b31abda": "getGameDetails(uint256)", +"1b31c5c2": "RESERVED_TOKENS_OPERATIONAL_EXPENSES()", +"1b328100": "valueToBeSent()", +"1b33157a": "buyTickets(uint256[],uint256,bytes)", +"1b338905": "getActualDates()", +"1b33a497": "tranferToReserve()", +"1b33d412": "offer(uint256,address,uint256,address,uint256)", +"1b346a63": "testMoveWithTrust()", +"1b34737f": "setSCoinContractAddress(address,address)", +"1b347aae": "retrieveToken()", +"1b354a30": "kscIncreaseApproval(address,uint256,string)", +"1b357750": "setLegacyNFTAddress(address)", +"1b35f56f": "getCurrentlyRunningPhase()", +"1b360912": "transferTokensFromPartnersAddress(address,uint256)", +"1b369fad": "removeBlockListed(address)", +"1b36cbfc": "EtheremonDataEvent(address)", +"1b370abb": "getPreviousNode(bytes)", +"1b37cb3e": "VOCOToken()", +"1b3821e8": "addSentMessage(address,address,uint256)", +"1b385f34": "buyOmegaEgg()", +"1b3878f5": "addToEmployerTotalPaid(address,address,uint256)", +"1b391d09": "benefeciar()", +"1b393b9a": "emergencyRelease()", +"1b394dce": "_chkBuyerLmts(address,uint256)", +"1b397d79": "OurBank(address,address)", +"1b39f3d7": "timeset()", +"1b3a8e6f": "directionCount(int256,int256,int256,int256)", +"1b3a91ac": "addTiers(uint16,uint256[],uint256[])", +"1b3aaf06": "setRspTokenAddress(address)", +"1b3b5742": "PayJackpot()", +"1b3c72aa": "getAddressLevel()", +"1b3ca096": "MarketBase()", +"1b3d36de": "calculateToken(uint256)", +"1b3d803f": "TokenRegulatorService()", +"1b3e100d": "PRE_ICO_PRICE()", +"1b3e2002": "giftRock(uint256,address)", +"1b3e704a": "supplyICO(address)", +"1b3e8cda": "isEthPayable()", +"1b3ed722": "multiplier()", +"1b3efd15": "claimrefund(address)", +"1b3f2fd3": "checkAvailableTokens(address)", +"1b3f8a67": "addToSyncList(address)", +"1b3fddb8": "PRESALE_BONUS()", +"1b3ff96f": "getForecastCount(uint256,uint256,bool)", +"1b4032f5": "lastBlock_f7Hash_uint256()", +"1b40ee88": "sellArtwork(uint32)", +"1b411fc8": "createRound()", +"1b413d27": "getLuck()", +"1b414708": "hasDisclosureAgreement(uint256)", +"1b418207": "toUint64Throw()", +"1b41c096": "setStartsAtUTC(uint256)", +"1b41c134": "UsernameDoesNotMatch(bytes32,bytes32)", +"1b426d8d": "LOG_ProofFailure(bytes32,address)", +"1b42b7ab": "decreaseSalesBalance(address,uint256)", +"1b42f904": "LogFreezerAddition(address,uint256)", +"1b437d0c": "compareLastCalldata(bytes)", +"1b44a5ef": "handleSingleItem(address,uint256,uint256,uint256,uint256)", +"1b44f449": "Chain3()", +"1b45c301": "assetManager(bytes32)", +"1b4646bf": "setReferalsMinInvestLimit(uint256)", +"1b464764": "withdrawAdvisor(address,uint256)", +"1b468ed8": "addHandlerToWhitelist(address)", +"1b476945": "devTokensIco1()", +"1b477633": "determinePlayer(bytes32[],bytes32[],int256[],uint8,bytes32,bytes32)", +"1b47dbbe": "IdentityVerifier(address)", +"1b482452": "getWinnerUrl(uint256)", +"1b49d82b": "joinClub(address)", +"1b4a2001": "minReserve()", +"1b4a93aa": "SetupFuseaNetwork(string,string,uint256,uint256,uint256,address,address)", +"1b4b1cfa": "isICOPeriod()", +"1b4b546f": "ChooseA()", +"1b4c19ac": "startSale(uint256,uint256,uint256,address,uint256,uint256)", +"1b4c5a10": "SupportFund()", +"1b4c84d2": "isTradeable()", +"1b4cd2de": "ICO_START_TIME()", +"1b4cd4ef": "depositPAXTR(uint256)", +"1b4d02c2": "cryptoAgent()", +"1b4d18c1": "rateOfSpecificTranche(uint256)", +"1b4e1c4d": "increaseProductAvailability(uint256,uint256)", +"1b4f4285": "notifyNewAccount(address,address)", +"1b4f6c46": "acceptOwnership(bytes32)", +"1b4fa639": "ownerFinishContract()", +"1b4fa6ab": "getDefaultStackCheck()", +"1b503a09": "LogRmUser(address)", +"1b50ad09": "updateDuration(uint256)", +"1b5171f0": "BountyKilled(uint256,address)", +"1b517663": "mintPriceOffset()", +"1b520b68": "lethalBonusAtHitsLead(uint256)", +"1b52abde": "redeemRestore(address,uint256)", +"1b531d4b": "settings_added()", +"1b538bcc": "getCurrentVotes(uint256)", +"1b542aa7": "Swob()", +"1b55ba3a": "Start()", +"1b55c148": "BidPlaced(bytes32,uint8,address,uint256,bool,int32)", +"1b55ec45": "getTokenToBurn()", +"1b55fe4e": "setFourthAddressBalance(address)", +"1b561fe7": "getSeniorContract()", +"1b5631de": "ManualChangeStartDate(uint256,uint256)", +"1b5710ed": "_deleteAllPackedRevisionTimestamps(bytes32)", +"1b580620": "setOwner1(address)", +"1b58c88f": "restoreOwner(address)", +"1b58c943": "getNBallots()", +"1b5a8da6": "giveEthBankrollAddress()", +"1b5ac4b5": "abs(int256)", +"1b5ae2f7": "day0x1(address,address)", +"1b5c16bf": "setTargetRepMarketCapInAttoeth(uint256)", +"1b5c9ae3": "get_etc_balance(address)", +"1b5df453": "addUserWhoSell(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"1b5e42f5": "amountOfUnitsOutsideAdminWallet()", +"1b5e75be": "evalParams(bytes32,address,address,bytes32,uint256[])", +"1b5ee6ae": "mintToken(int256,address,uint256)", +"1b5f03a6": "getRoute(string)", +"1b5f6cea": "P3DtoTokens_(uint256)", +"1b61a179": "mulbonus()", +"1b61f340": "finishADrop()", +"1b6282e3": "issuerDelegate()", +"1b64b172": "core(uint256,address)", +"1b65144d": "burnTokensForSale()", +"1b6527b4": "GetAssignedAddress(uint256)", +"1b655054": "dataAddress()", +"1b660f15": "EthIdentity(bytes32)", +"1b66303d": "request(bytes32,uint256,uint8)", +"1b66cb00": "setTargetToken(address)", +"1b672154": "setMEAAttributes(uint256,uint256)", +"1b677b08": "total_snt_claimed()", +"1b67ab2b": "StreamNetworkToken()", +"1b68039c": "bitcoinblack()", +"1b688565": "PUBLIC_RESERVED_PERSENTAGE()", +"1b697bb2": "setBuyerAddress(address)", +"1b6aa580": "developer_new_address_for_funds(address)", +"1b6ad60a": "transferFromWithReserving(address,address,uint256)", +"1b6aed05": "grant_token_from_offchain(address,uint256,string)", +"1b6b405c": "UnableToAcceptPayment(address,bytes8,uint256)", +"1b6b6d23": "LINK()", +"1b6b8656": "setBureau(address,address,address)", +"1b6bb739": "getThreeLastInvestors()", +"1b6bc433": "addMemberAcct(address)", +"1b6c104e": "marketingAllocationTokenSend(address,uint256)", +"1b6caad9": "setPersonaAttributes(bytes)", +"1b6e37ee": "thirdWeekBonusInWeek()", +"1b6e66aa": "rescueInvestor(address,uint256)", +"1b7035ea": "getAccountStatus()", +"1b709561": "UnlockCredits(address,uint256)", +"1b70a2e1": "TerpCoin()", +"1b72194f": "getUserDivs(address,uint256)", +"1b72410b": "EladCrowdsale()", +"1b728ed4": "getAssetRawMeta(uint256)", +"1b748399": "TeamCoin()", +"1b753dad": "Mithril()", +"1b75738a": "enable(address[])", +"1b760719": "addMember(address,string,uint256)", +"1b7623be": "payInterest(address,uint256)", +"1b76929c": "getActiveGames()", +"1b769e74": "testThrowsRestartNotUpdatable()", +"1b76dd7c": "disapprove(uint256,string)", +"1b773df1": "withdrawAll(string,uint256)", +"1b775638": "ContributionReceived(address,bool,uint8,uint256,uint256)", +"1b776808": "_updatePixelMapping(address,uint256,uint256,uint256,bytes32,bytes32)", +"1b78240f": "Fixie()", +"1b78e3c4": "processHunting(uint256,uint256,uint256[])", +"1b7949e2": "supply_increased()", +"1b79a2f3": "lastStageSubmitted()", +"1b79d406": "getWhoPiad(uint256,address,address,address,address,address,address,address)", +"1b7aad1b": "AMOUNT_TOKENS_FOR_SELL()", +"1b7b7b0d": "latiumBalance()", +"1b7b7c3d": "Partnership(address[],uint256)", +"1b7bbecb": "challengeExists(bytes32)", +"1b7be47e": "STQToken(address[])", +"1b7c058e": "getLicensePrice(address)", +"1b7ccc3d": "_registerLockedDeposits(bytes32,uint256,uint256)", +"1b7ce6f3": "disableTokens(uint256[])", +"1b7cf899": "recentActivity(uint256)", +"1b7d5f8c": "release18m()", +"1b7d83e5": "addDefaultOperator(address)", +"1b7d8aaf": "End8()", +"1b7db340": "sysAdmin()", +"1b7e0902": "getcardOwner(uint256)", +"1b7e78f6": "updateFirstChangeBlock(uint256)", +"1b7f00c1": "purchaseBundle(uint8,string)", +"1b800a3d": "watchPreferersTasks(address,uint256)", +"1b814f02": "splitFunds()", +"1b8202a7": "LegalContractManager()", +"1b825e89": "detachmentTime()", +"1b82f68f": "kingdomFactory()", +"1b83b823": "notifyPlayer(uint256)", +"1b841fea": "nextDerivativeTokenTime()", +"1b848606": "blacklistEscapeToken(address)", +"1b84e72d": "_createEscrow(address,address,uint256,uint256)", +"1b851e10": "LogDeposit(address,uint256)", +"1b855044": "getHash(uint256,uint256)", +"1b85aa49": "MIN_INVEST()", +"1b862027": "save(uint256)", +"1b8689b6": "getInvestorTokensPurchasesLength(address)", +"1b878f71": "setUpgrader(address)", +"1b87945e": "buyPointer(bytes32,bytes1[64])", +"1b87ccae": "getAssetIdItemType(uint256)", +"1b87d58a": "bonusMin()", +"1b88094d": "getRecipient()", +"1b880bcf": "KareToken()", +"1b89ee31": "closeBridge()", +"1b8a0b46": "WowDiaondToken(address)", +"1b8a9031": "BetPlaced(uint256,address,uint256,uint256)", +"1b8ab64d": "testTodo()", +"1b8b13a7": "getRewardPool()", +"1b8b3605": "setInvestorList(address)", +"1b8b4787": "TOKEN_SALE2()", +"1b8b921d": "call(address,bytes)", +"1b8bd57c": "getCardInfo(uint32)", +"1b8beafe": "BLOCK_DURATION()", +"1b8ca217": "getProperties(uint256)", +"1b8d0e60": "getMyBanker()", +"1b8db774": "_deadline()", +"1b8de48c": "distributeTCASH(address[])", +"1b8e61c7": "setEndTimePreIco(uint256)", +"1b8e94a1": "Rate()", +"1b8ef0bb": "getRemainingCapacity(uint256)", +"1b8f2610": "quickCloseChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"1b8f3d23": "krakenTicker()", +"1b8f5d50": "multi()", +"1b8f66a4": "watchedURL(string,string)", +"1b8fc2f0": "setAllowedAddress(address)", +"1b8fc6e4": "marketorsTotalBalance()", +"1b900c27": "anotherOwner1()", +"1b924b7e": "enableInterface(string,address)", +"1b9265b8": "pay()", +"1b929940": "pushIntArray(bytes32,int256)", +"1b92bbbe": "maxDrawingTime()", +"1b92ce6b": "WOCC()", +"1b93aa8d": "getPackage()", +"1b93f66d": "claimedAirdrop(address)", +"1b9414ae": "itemBid(uint256)", +"1b94198d": "sellingAccepted()", +"1b94413f": "transferEth(bytes32,address,uint256)", +"1b949f85": "lockContractOwner()", +"1b953909": "authorizeOperatorTranche(bytes32,address)", +"1b955df4": "changeRefund(uint8,uint256,uint8)", +"1b962c65": "decodeCurrency(bytes32)", +"1b963742": "AwesomeToken()", +"1b968160": "wipeAndFree(address,bytes32,uint256,uint256,address)", +"1b96b2f9": "masterMint(address,uint256)", +"1b97429d": "EthToUsdChanged(address,uint256,uint256)", +"1b981d7f": "packedToSubmissionBits(uint256)", +"1b987c41": "retrieveExternalTokens(address,address)", +"1b98c54f": "getProviderCurveLength(address,bytes32,int256)", +"1b98cd68": "updateAffiliate(address,uint8)", +"1b98f6ac": "setProviders(address[])", +"1b9900b8": "userRollDice(uint256)", +"1b995aa7": "BitCompare(uint256,uint256)", +"1b998dac": "updateMCs()", +"1b9a91a4": "withdrawEth(address,uint256)", +"1b9b0b23": "KruhftsToken()", +"1b9bfa3a": "_oldOwnersOf(uint256)", +"1b9c7f31": "Werbecoin()", +"1b9cbdfb": "priceOfToken()", +"1b9ceef1": "purchaseTokenInPublicSale()", +"1b9d1bed": "setPOOL_edit_18(string)", +"1b9d4c8e": "setBudget(address,address,uint256)", +"1b9db2ef": "getParticipant(uint256)", +"1b9dbcaf": "kittensIssued()", +"1b9e16ad": "getAccountInfo()", +"1b9e9a27": "createComponent(string)", +"1b9f9647": "accessMyWallet(address)", +"1b9fec58": "getBlockToHashForResults(uint256)", +"1ba1648a": "changeTokensOwner()", +"1ba1f10b": "updateTaxPercentages(uint256,uint256)", +"1ba22084": "ecadd(uint256[3],uint256[3])", +"1ba23f1e": "setAllowedMultivest(address,address)", +"1ba326c4": "calcShare(uint256,uint256,uint256)", +"1ba39a4c": "calcMult(uint256,bool)", +"1ba3afd3": "getLocalGame(uint16)", +"1ba46cfd": "assetAddress()", +"1ba527d6": "gkAddress()", +"1ba54100": "distributeEbyteForEBYTE(address[],address,uint256,uint256)", +"1ba5b3e8": "currentTotalAirdrop()", +"1ba5e63f": "tournamentQueueSize()", +"1ba5eec0": "nextTurn()", +"1ba60f9b": "availableDgxNg()", +"1ba6e1bd": "externalPurchase(address,string,string,uint256,uint256,uint256)", +"1ba7013b": "distributedBountyTotal()", +"1ba83c3c": "ChargingGas(uint256)", +"1ba88666": "isBiometricLockedOnlyOwner(address)", +"1ba8ef21": "electrolightTestnet()", +"1ba9146e": "PethToken(uint256,string,string,uint256)", +"1ba91c20": "foundationMultisig()", +"1ba9998b": "advanceRound()", +"1baaeb91": "getSignature(bytes4,uint256)", +"1bab0908": "hasValidParam(address,uint64,uint64,uint64,uint64,uint64,uint64)", +"1bab8148": "fulfillMintRequest(uint256,string)", +"1bacbf4e": "secureTransfer(uint256)", +"1bacfd66": "Vote(address,bytes)", +"1bad1d2e": "monitorWallet(address)", +"1bad3903": "stakeWithCurrentPeriod(uint256)", +"1bad5558": "withdraw3(address)", +"1bad9e8f": "getUserTokenInfos(address,uint256)", +"1bada3c0": "closeKYC()", +"1badbd5c": "increaseAssuranvePayments(address,uint256)", +"1badfbae": "setWhitelistBallot(address,bool)", +"1baf1494": "QToken(address,uint256)", +"1baf7122": "custodyStorage()", +"1baf823f": "NewUsername(address,string)", +"1bafc373": "confirmNewHash(uint256)", +"1baffe38": "withdrawEtherTo(address,uint256)", +"1bb00447": "CryptonomicaVerification()", +"1bb02ffb": "MWAV()", +"1bb0b762": "A2ABToken()", +"1bb0c665": "toHexString(address)", +"1bb1151a": "Error(uint64)", +"1bb1bf2e": "team1Query()", +"1bb2921b": "getProjectedPayout(uint16)", +"1bb3fb67": "operatorSendTranche(bytes32,address,address,uint256,bytes,bytes)", +"1bb4067b": "checkPoolDone(uint256)", +"1bb409c4": "QueryBonus()", +"1bb460cc": "ContributionReceived(address,uint256)", +"1bb47b44": "appendVestingEntry(address,uint256,uint256)", +"1bb534ba": "fundingRecipient()", +"1bb58beb": "RECToken(uint256,string,uint8,string)", +"1bb5f0a2": "registerBarcode(bytes9,string,string,string,string,string,string)", +"1bb63d0c": "Nova()", +"1bb6cb47": "getPlayer2()", +"1bb73a2a": "batchCreateAuthorDrawings()", +"1bb797da": "isIcoStage()", +"1bb7c3c2": "UpdatedDonationAddress(address)", +"1bb7cc99": "WHITELIST()", +"1bb8365f": "calculateGoldBuy(uint256,uint256)", +"1bb96dff": "AuctionStarted(uint256)", +"1bbb4f63": "LogMoneyline(int256,int256)", +"1bbb696a": "swapContracts(address)", +"1bbb9a99": "claimEthers(uint256)", +"1bbc4b83": "ERC20Interface()", +"1bbc7952": "getPropertySalePrice(uint16)", +"1bbc99c6": "UpdateDividendPartners(address[],uint256[])", +"1bbce9a2": "bidState(bytes32)", +"1bbe1813": "getTotalSpecials()", +"1bbe2ff3": "TransferEtherInitiationEvent(uint256,address,address,uint256)", +"1bbe9d8c": "addFunder(address)", +"1bbec4e7": "coldWallet2()", +"1bbef399": "isVoting()", +"1bbfb029": "addTx(address,address,uint256,string)", +"1bbfce0e": "bidOnBreedingAuctionTutorial(uint40)", +"1bbfdaaf": "selectElf(uint8,uint16)", +"1bc0585f": "stopTokenSale()", +"1bc08834": "stsc()", +"1bc125f3": "finishMintingSTO()", +"1bc2b813": "divUInt(uint256,uint256)", +"1bc2dd5a": "doesContractExist(address,address)", +"1bc390dd": "reconfig(string,string)", +"1bc3c855": "setWhiteListERC223(address)", +"1bc41284": "uncleRate()", +"1bc44200": "Dasabi_ioToken()", +"1bc44213": "MAX_BID_FRAC_BOT()", +"1bc4c81b": "QuizQuestion()", +"1bc4cdb9": "ReceiveFund(address,uint256)", +"1bc4d6b2": "XXXXToken()", +"1bc50b05": "canUpdateNextGamePotSplit()", +"1bc59aa6": "bountyAllocated()", +"1bc5ee1a": "transfer_eth_to_contract()", +"1bc84458": "getAddOnSupport(uint16)", +"1bca179b": "RentedBlock(uint256,uint256,uint256,uint256,address)", +"1bca5689": "havvensReceivedForEther(uint256)", +"1bca7d6d": "NigelFundSum()", +"1bca989e": "setTokenInfoMaxPerBlockImbalanceList(uint256[])", +"1bcad37a": "getTotalCost()", +"1bcb6fa2": "snapshotValidators(uint256)", +"1bcbce52": "isEarlyInvestorsTokenRaised(uint256)", +"1bcc9b1a": "TruPreSale(uint256,uint256,address,address)", +"1bcd57c7": "ContributionAmount()", +"1bcdb8e0": "responder(uint256,uint256,uint256,bytes5,bytes14,bytes5,uint256,uint256,uint256,uint256,uint256,uint256)", +"1bcdd57d": "writeNextId(uint256)", +"1bce6ff3": "begin()", +"1bceeaa7": "resell(address,string)", +"1bcf468b": "costOfToken()", +"1bcf5241": "countCliTasks()", +"1bcf5758": "getOccupies(uint8)", +"1bcf659d": "getMinTalent(uint256)", +"1bd0c431": "updateETH()", +"1bd13df1": "GetSummFee(uint256)", +"1bd16dbf": "preSaleDuration()", +"1bd2511a": "addEarlyAccessAddress(address,address)", +"1bd27296": "_fetchCancelledOrdersForMerchant(address)", +"1bd2b37c": "isMasterRecruitment()", +"1bd2c21c": "playBigger(uint256[])", +"1bd2d4cc": "getNextIndex(uint8)", +"1bd3553e": "TheTokenA()", +"1bd5363c": "getBPaddress()", +"1bd5d127": "NaviToken()", +"1bd60ae9": "buyerBalance(address)", +"1bd61eee": "updateHeartBeat()", +"1bd6f596": "right56(uint256)", +"1bd6fb9f": "LockedFunds(address,uint256)", +"1bd72647": "round0Target()", +"1bd8b041": "PRICE_INCREASE_SCALE()", +"1bd8f9ca": "challengeFee()", +"1bd95155": "stringToUint(string)", +"1bd983a4": "PlaceSellOrder(uint256,uint256)", +"1bd9a7e7": "LogNewWhitelistUser(address,uint256)", +"1bd9c46e": "setImporter()", +"1bda6d55": "publicSaleSoldTokens()", +"1bda84b3": "getOfferIdsByToken(address)", +"1bda8781": "Taouaf(uint256,string,uint8,string)", +"1bdb3f65": "ZoomToken()", +"1bdbabdd": "registerProduct(uint256,bytes32,bytes32,uint256,uint256)", +"1bdbce49": "setWhitelist(address,address,bool)", +"1bdc4038": "_updatePurchasingState(address,uint256)", +"1bdd193a": "placeStar(uint8,uint8,uint16,uint256)", +"1bddcf48": "_asyncTransfer(address,uint256)", +"1bde9998": "getWhitelistStatus(address,bytes32,address)", +"1bde9bc1": "rebatelvlEconomy(string,string,string,string,string)", +"1be05289": "DURATION()", +"1be0717f": "_reward()", +"1be0f1ad": "getSpinOutput(uint256,uint256,uint256,address)", +"1be0f793": "USDExchange(address)", +"1be16003": "Answer()", +"1be1bf7f": "TessrX()", +"1be20ca1": "TokenCAP()", +"1be22528": "TechnicalRise()", +"1be3175e": "mortgage(uint256)", +"1be35b0c": "statusOperation()", +"1be4aaa1": "getTokenInfoHeritor(address,address)", +"1be4da5b": "MateriaPrima()", +"1be64997": "BucketCreated(bytes32,uint256,uint64)", +"1be6ce57": "decreaseOwnershipTokenCount(address)", +"1be6dd64": "points()", +"1be70510": "acceptAdoptionOffer(bytes5)", +"1be73e2b": "_fhMoney(uint256,uint256,uint256,uint256,uint256,uint256)", +"1be7c5ef": "fullfillFounder()", +"1be863bf": "PushData()", +"1be88614": "onetimeLaunch(uint256)", +"1be8dbfd": "dsMul(uint256,uint256)", +"1bea4a61": "getObjIndex(uint64)", +"1bea67b7": "BFDToken()", +"1bea69e3": "isAdmin(address,string)", +"1bea8006": "tokenBalanceOf(address,address)", +"1beafada": "PROMETHEUS_PRICE_THRESHOLD()", +"1beb2615": "destruct(address)", +"1beb375d": "proxyManagementAddress()", +"1beb4b5e": "fetchAllVoteResultBySnapshotBlock(uint256)", +"1bebf13c": "sendOrderEvent(address,uint256,uint256,uint256,address,uint256)", +"1bef9059": "ProtocolToken()", +"1befcbaf": "buyRareEgg(uint8,uint256,address)", +"1befd26a": "setDesignatedReporterWasCorrect(bool)", +"1bf028b1": "OddMoney(address,uint256)", +"1bf049b9": "Prediction(uint24,uint24,bool)", +"1bf0635b": "setGoldFeeAddress(address)", +"1bf1de9b": "COMMISSION_PERCENTAGE()", +"1bf20668": "testAdminTransfer()", +"1bf219de": "Faucet(uint256,address)", +"1bf2a90a": "totalPostIcoContributorIdsAllocated()", +"1bf38b28": "addAccessor(address,address,uint8,address,string,uint32,string,string,bytes32,bytes32,uint8)", +"1bf426ba": "Spendelotto()", +"1bf498b6": "registAgent(address)", +"1bf57f41": "salesAddress(address)", +"1bf5b38a": "finalizeDonation(address)", +"1bf5f736": "endOfDay()", +"1bf651ff": "YBHY()", +"1bf678cf": "setOtherNTech3D(address)", +"1bf6ba7e": "_transferFromOwner(address,uint256)", +"1bf6c21b": "USD()", +"1bf6e00d": "frozenOf(address)", +"1bf6e939": "accManager()", +"1bf703b2": "addCategory(string,string)", +"1bf7628b": "firstHolder()", +"1bf7d749": "curves(uint256)", +"1bf831cf": "initialOperatorValue(address)", +"1bf8c094": "setOwnedToken(address,uint256,uint256)", +"1bf983a6": "getTokenInfoMaxTotalImbalanceList()", +"1bf9b325": "deletePublicKey(address)", +"1bf9b387": "setIcoRate(uint256)", +"1bf9def0": "Transferable()", +"1bfa5d8a": "hash_pubkey_to_pubkey(uint256,uint256)", +"1bfa90bf": "getIntField1()", +"1bfaf155": "foundersWallet()", +"1bfb7245": "tToken(address,uint256)", +"1bfba595": "incrementTotalIssuerCount()", +"1bfc596b": "presaleBonusAddressColdStorage()", +"1bfc8bd1": "setRequestIdToMultiRequestId(uint256,uint256)", +"1bfce853": "vestedAmount(uint256)", +"1bfd4858": "hash_db(bytes32)", +"1bfd6814": "TRANSFERABLE()", +"1bfe0308": "removeRole(address,string)", +"1bfe3508": "triggerRecoveryAddressChange(address)", +"1bfe7831": "AllLockAccounts(uint256)", +"1bfe783e": "MaxDropReward()", +"1bfea87f": "by(bytes32)", +"1bff4786": "etherDeltaInfo()", +"1bff4bfa": "beneficiaryTwo()", +"1bff4c07": "LukaCoin()", +"1c0019c4": "getCostForTrait(uint8)", +"1c014c60": "casinoBalance()", +"1c0183e3": "TweedentityRegistry()", +"1c02708d": "killContract()", +"1c02a63d": "SetEcosystemContract()", +"1c0463de": "isUpgradeAllowed()", +"1c05123d": "LicenseIssuer(string,string,string,uint256,uint256,address)", +"1c054b14": "bonusRangeCount()", +"1c057493": "withdrawERC721(uint256,uint256,address,uint256)", +"1c07f0a3": "getAccountKeys(uint256)", +"1c080404": "contributed3(address)", +"1c08366b": "tokenPCT(string,string,uint8)", +"1c084385": "WhitehatWithdraw(address,address,address,address)", +"1c085a21": "totalRaiseWei()", +"1c088897": "MINER_AUCTION_DURATION()", +"1c08c08e": "claimBond(uint256)", +"1c09496a": "transferWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"1c09c194": "testInsertMultipleProductsIntoCart()", +"1c0acbd5": "bidOnDklSiringAuction(uint256,uint256,uint8,bytes,uint256,uint256,bytes,uint256)", +"1c0ad646": "coreAddress()", +"1c0b6367": "processTransaction(bytes,uint256)", +"1c0bbe26": "createAccountForUser(address)", +"1c0c3d33": "mintAuthorizedBatchWithBalances(address[],uint256[])", +"1c0ce15f": "TUBE()", +"1c0d1274": "setCCH_edit_21(string)", +"1c0de1b3": "LogResult(bytes32,uint8,bytes,bytes)", +"1c0e0225": "minDonation()", +"1c0e7109": "addFreelancer(address,uint256[],address)", +"1c0f12b6": "transferFrom(uint256,address,address,uint256)", +"1c0f96bb": "ManagerProxyTargetMockV1(address)", +"1c0f9a7c": "requestEURPrice(string)", +"1c114b38": "canReadInDataObject(address,bytes32[])", +"1c11fce2": "requestToken(address,uint256)", +"1c135881": "testHardCap()", +"1c1401e7": "OWNER_TRANSFER_TOKENS()", +"1c140bdd": "addCampaign(string,string,string,address,address,address,string)", +"1c14179a": "GavCoin()", +"1c14b340": "passMessage(address,string)", +"1c152982": "addEditwalletContractAddress(bytes8,address)", +"1c15b285": "getAmbientHumidityControlLimits(bytes32)", +"1c1697ae": "get_presale_arbits_per_ether(address)", +"1c169ba5": "closed_()", +"1c16c3ad": "calcAirDropAmount(uint256)", +"1c177502": "LogCollectEth(uint256,uint256)", +"1c1935ce": "getHistoricPrice(uint256)", +"1c196d77": "returnSubscriptionDesposit(uint256)", +"1c1b863b": "updateBetDataFromOracle(uint256)", +"1c1b8772": "update(address)", +"1c1bc850": "changePayee(address)", +"1c1bd814": "TIMEOUT_TIME()", +"1c1c2289": "userKey()", +"1c1d7517": "dedeNetwork()", +"1c1f6a3f": "removeTokenFrom(address,uint256)", +"1c203612": "battle(uint256,uint256,uint8[2])", +"1c20be7e": "getVestingBalance(address,address,address)", +"1c226164": "isAddressVoted(address,address)", +"1c22ac19": "aprovaDevolucao(bool)", +"1c22b196": "TransferTRAC()", +"1c22f765": "zhoudayiToken(uint256,string,uint8,string)", +"1c232194": "refundPreSale()", +"1c23281c": "GZSToken(uint256,string,uint8,string)", +"1c2353e1": "isCertifier(address)", +"1c235f5f": "getHipstermasterReq()", +"1c238e1f": "Signum(address,address)", +"1c23e280": "buyTicketsFor(address,uint256)", +"1c249494": "setStarted()", +"1c24f0bd": "applyForCertification(string,string,string,uint256,uint256,uint256,uint256,uint8,uint8,uint16)", +"1c25331d": "setMaximumNonWhitelistAmount(uint256)", +"1c25f452": "topupSupply(uint256)", +"1c27e291": "refundCoin(address)", +"1c27f30b": "Lover()", +"1c28b99e": "pressFee()", +"1c296b34": "cryptiblesAuctionContract()", +"1c2ac59d": "sosoToken()", +"1c2ac5ac": "IcoStatus()", +"1c2b1e54": "SalesManagerUpgradable()", +"1c2bbd18": "exchangeTemplate()", +"1c2d6356": "getActivityName(uint256)", +"1c2e2796": "ContractCallerProxy(address)", +"1c2e53ef": "promotionRate()", +"1c2f2f9f": "recoverAndSetSecretHash(string,bytes32)", +"1c2f38ff": "paid(uint64)", +"1c30549f": "set_rand_addr(address,uint256)", +"1c3101d3": "addRecipient(address)", +"1c3122ba": "BuyStartingSnails()", +"1c31f710": "setBeneficiary(address)", +"1c321f62": "executeLottery()", +"1c3274ff": "PlayX10()", +"1c338601": "setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", +"1c338644": "withdrawERC20Balance(address,address)", +"1c350d6b": "TRLToken()", +"1c35b76f": "VOLUME_BONUS_CONDITION()", +"1c35e7ba": "manualFinalizeRound()", +"1c363e14": "DeathFactor_v()", +"1c38f800": "currentIcoSupply()", +"1c398075": "sellClimateCoinsAgainstEther(uint256)", +"1c39b5c4": "Administrated()", +"1c39c375": "buyUninitializedPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", +"1c3a36d0": "addComment(bytes3,string)", +"1c3a5713": "getProposalExternalTokenReward(bytes32,address)", +"1c3a8892": "closeRoom(uint256)", +"1c3ad417": "getBAS(bytes32,address)", +"1c3b093f": "Track(address,bytes,uint256,uint256)", +"1c3b3b9f": "expandPeriod(uint8)", +"1c3bc31f": "firstPreSaleEndDate1()", +"1c3c050c": "genTime()", +"1c3c0ea8": "setExecutor(address)", +"1c3c295e": "registerInstitutionAsset(string,string,address,address)", +"1c3cbf07": "TokenTest123()", +"1c3cf5d0": "setEditionPackPriceIncrease(uint8,uint256)", +"1c3d4f20": "ChangeBalance(address,uint256,address,uint256,uint256)", +"1c3db16d": "currentRuling(uint256)", +"1c3db9a8": "approveFlower(address,uint256)", +"1c3de07a": "calculateCoinSell(uint256)", +"1c3f2f8c": "dealsNumber()", +"1c3f7637": "isAllowedHICAddress(address)", +"1c3fe22d": "GaillardCrowdSale()", +"1c40baf5": "EUROCASH()", +"1c41d143": "KPTLToken()", +"1c41e2db": "getEducation()", +"1c423713": "addPromoCode(string,bytes32,uint256,uint8)", +"1c4261f4": "createGift(bytes32)", +"1c429165": "tryRollRoom(address,uint256,uint256)", +"1c42959c": "maximumCap()", +"1c42daf7": "winMeta(address,bytes32)", +"1c435872": "setInterRefreshLock(bool)", +"1c43814f": "registerAsSlaven(string)", +"1c43b4a6": "initAddressAsMultiOwner(address,string)", +"1c43d8b1": "EndEvent(bool)", +"1c442754": "participated(address,uint256)", +"1c448231": "SDToken()", +"1c44bac7": "tournamentBankCut()", +"1c465538": "DoFee(uint256)", +"1c465e87": "getTopOnce()", +"1c467dec": "HODLrSellWin(uint256)", +"1c47624b": "getUserProductContracts(address)", +"1c480cb6": "remove(int256,int256)", +"1c481767": "sendfrozen()", +"1c484766": "aloha()", +"1c484a34": "enableSuperDragon(bool)", +"1c488825": "MintTokens()", +"1c490883": "MelonBitIndex_Erc223Token()", +"1c49b101": "_preValidatePurchase(address,uint256,uint256,uint256)", +"1c49d19f": "finishRoundC()", +"1c4ad465": "custodyFactory()", +"1c4b0da6": "setMinSalePrice(uint256)", +"1c4b1ff7": "setGood(bytes32,uint256)", +"1c4b774b": "getReward(uint256)", +"1c4b8659": "getBoardSingleSpaceDetails(uint256,uint8,uint8)", +"1c4bcbb0": "distributePowerToAddress(address,uint256)", +"1c4be509": "forkTransfer(address,address,address,uint256)", +"1c4bfcfe": "BoxChange(address,uint256)", +"1c4c2681": "cirusToken()", +"1c4c710b": "getAreaIndex(string)", +"1c4d5608": "getSchemeParameters(address,address)", +"1c4d749b": "GetContractStateActive()", +"1c4e6cd0": "NameReg()", +"1c4ef6c2": "ethPriceInEuroCent()", +"1c4fda10": "tokenSafe()", +"1c50e880": "cancelAuctionHashing(uint256,uint64)", +"1c51a8e0": "setConfigString(string)", +"1c533a09": "Trupee()", +"1c535d96": "getuserdayeths(address)", +"1c53faf8": "backSggCoinOwner()", +"1c5412f7": "_computeCut(uint256)", +"1c54220d": "c_centsPerTokenSecond()", +"1c545049": "maxPresaleEDUSupply()", +"1c548c78": "foreignBridgeProxyOwner()", +"1c54e565": "getNextUserId()", +"1c54fbab": "getShip(uint16,uint16,address,address)", +"1c558b71": "ORIUMCOIN()", +"1c560f68": "CreatePreSale(address,uint256)", +"1c5633d7": "setPeriodLength(uint256)", +"1c566ef2": "setOperationAttributes(string,uint256,string)", +"1c568925": "addPendingUserListArr(address)", +"1c572f8c": "getICOPercentage(uint8)", +"1c5736ee": "add_record(string)", +"1c575f7f": "sendDivsToBankroll()", +"1c57a386": "oraclize_query(string,bytes[1],uint256)", +"1c581205": "targetAmount(address)", +"1c58c3ff": "totalMineSupply()", +"1c58d0d2": "_unsafeDecodeTokenId(uint256)", +"1c5992ff": "Zandar()", +"1c59a667": "disableBlacklist(address[])", +"1c59c177": "FCCContribution()", +"1c5a3942": "BPPOL()", +"1c5a5a58": "getRandomNum(address,uint256)", +"1c5a5bc4": "createShip(uint256,string,uint256,uint256,uint256)", +"1c5a9005": "HashRemoved(address,string)", +"1c5a9d9c": "activate(address)", +"1c5be3d7": "updateTimestamp()", +"1c5ca530": "IprontoToken()", +"1c5caa6b": "Rate9()", +"1c5d3c60": "stateIsWaitingProofs(uint256)", +"1c5d9faa": "setNickname(string)", +"1c5daad7": "_maint_withdrawFromPool(uint256)", +"1c5eaa23": "findByModuleText(string)", +"1c5ef50b": "Rasper()", +"1c5f2810": "setnewowner(address)", +"1c5f3176": "someMethod4(uint256,uint256,uint256)", +"1c5f8675": "getMyTuple()", +"1c5fe1a4": "TeamAmount()", +"1c606dd3": "GetConstructCost(uint256,uint256)", +"1c607f14": "setDynamicArraySize(uint256)", +"1c60a158": "TEAM_TOKEN_AMOUNT()", +"1c60f3bb": "buyEthCards(uint256,uint256)", +"1c61babe": "CelsiusToken(uint256)", +"1c61bd38": "showValue()", +"1c61eeb0": "acceptRelayedCall(address,address,bytes,uint256,uint256,bytes,bytes)", +"1c61f2bc": "fuckingClaim2(bytes,bytes)", +"1c623ddd": "reward(bytes32,uint8,bytes32,bytes32,bytes32,uint256)", +"1c624a60": "qtyInitiators()", +"1c624d19": "mintObizcoinTokens(address,uint256)", +"1c637987": "_setAuctionStatus(bytes32,uint8)", +"1c638376": "setProductAttributesByRegulator(string,string,uint256,uint256,string)", +"1c63c6c3": "setPartData(uint256,uint256,uint256[])", +"1c64065d": "myInfraList(address,uint256)", +"1c6416ad": "pubaddr()", +"1c65706e": "allowInvest(address,address)", +"1c657c63": "setEtherInUSDInternal(string)", +"1c668855": "getGenotype(uint256)", +"1c674fba": "createRandomBox(string,address,uint64,uint256,uint128)", +"1c67a7aa": "TransCompleted()", +"1c67e9a6": "setTokenStatus(bool)", +"1c68571d": "bonusLimit1()", +"1c6868c8": "adjustBonusPrice()", +"1c68fe82": "listProperty()", +"1c69ad00": "balance0()", +"1c6a0cf8": "GuangPengChain()", +"1c6a866c": "Collect_accrued_interest_and_transfer(address,uint256)", +"1c6b69b7": "rateCent()", +"1c6b7c1d": "EtherTransfer(address,address,uint256)", +"1c6ba386": "_claimReward(address,uint256)", +"1c6be97d": "allowanceRewriteTest(address)", +"1c6ce9a3": "executeSendCapital(address,uint256)", +"1c6d31f7": "xxx()", +"1c6d4575": "getTokensAmountAllowedToWithdraw(uint256)", +"1c6d6483": "approveMappingProposal(address)", +"1c6debbb": "UnionChainSupply()", +"1c6e3899": "getTierId(uint256)", +"1c6ef374": "recordingResultsOfBet(bytes32,bytes32[],uint8[])", +"1c6f609b": "cooperativeClose(address,uint32,uint192,bytes,bytes)", +"1c6f634e": "oracleItQuery(string,string)", +"1c70362c": "setSettingValues(uint8,uint8,uint16,uint16,uint16,uint16,uint16,uint8,uint8,uint32,uint32,uint8)", +"1c7040cc": "setProxyCurator(address)", +"1c7106e6": "setOracleAPIAddress(address)", +"1c7276f5": "updateLuck(uint256,uint8)", +"1c72961d": "setRandomSign(address)", +"1c72e225": "transformSeedToFlower(address,uint256)", +"1c7307f4": "get_topl_address(address,address)", +"1c732d83": "centsToWei(uint256)", +"1c73561f": "jobCompleted(bytes16,address,address,uint256,uint256)", +"1c73601e": "getUncorrelatedRN(uint256)", +"1c74d5c8": "Successor(address,address)", +"1c7564cb": "DWMP()", +"1c75b6b2": "setDevFee(uint256)", +"1c75f085": "teamAddress()", +"1c761245": "buyDOTCH(uint256)", +"1c762a27": "show_Balance_of_interest_bearing_deposit(address)", +"1c76e2b2": "getOrderBookKey(uint256)", +"1c77a4ec": "Lemmon()", +"1c77c58c": "collectRoundLength()", +"1c7a08ef": "isActivate(uint256)", +"1c7a39e2": "_distributeRewards(address,address,uint256)", +"1c7a3c9d": "setExchangeContractAddress(address)", +"1c7a3d31": "updateNextOrderUser(address,address,uint256,address,address)", +"1c7b10aa": "merkleTreeRoots(uint256)", +"1c7b530a": "secondTotalSupply()", +"1c7bfdce": "test_votingWhenCertified()", +"1c7cf44c": "claimCommit(bytes32)", +"1c7d5334": "DORCoin(address)", +"1c7f3a96": "getMarketCreatorSettlementFeeDivisor()", +"1c7f578a": "mintC()", +"1c7f6942": "getPlayerSpaceshipModelByIndex(address,uint256)", +"1c7f98ca": "getRunInfo()", +"1c800d64": "insert_helper(uint256,bool,uint256)", +"1c81525c": "NitinToken()", +"1c81bcfb": "dividendPathways()", +"1c81ed15": "raiseSupply(uint256)", +"1c8293c4": "PriceChanged(uint256,uint64)", +"1c82a013": "onOffCrowdSale(bool)", +"1c844171": "bakkaToken()", +"1c8499e5": "greeter()", +"1c857765": "sumElements(uint128[])", +"1c85d890": "productListing(bytes32)", +"1c85ee51": "getBasicIncome()", +"1c8670fc": "endEarlyStage4()", +"1c8685e0": "WXSLToken(uint256,string,string)", +"1c87055f": "Fund(address,address,address,address,address,address,address,address[])", +"1c870eee": "setUserPermission(address,bytes4)", +"1c878c97": "releaseLockAgencyLock1()", +"1c879c47": "getMarketHashes(bytes)", +"1c87deec": "returnTokenDepositState(address,bytes32)", +"1c895915": "getNumberOfPayments(uint256)", +"1c89f174": "calculateUserBid()", +"1c8a1e20": "membershipAddress()", +"1c8a3821": "AllocateFounderTokens(address)", +"1c8a7795": "archiveText(string)", +"1c8c4509": "addSiteSet(uint256,uint256)", +"1c8ca56d": "stopSelling(bool)", +"1c8cba3b": "getSubjectClaimSetSize(address,uint256,uint256)", +"1c8ce890": "disburse(address)", +"1c8d25bc": "proposed_beneficiary()", +"1c8d51e6": "getSentAmount()", +"1c8d5d38": "allowance(address,address,bytes32)", +"1c8dddbd": "editContributors(address[],uint256[])", +"1c8e9a6f": "commitWork(uint256)", +"1c8eac0f": "endFunding()", +"1c8f7570": "depositLogic(address,uint256,uint256,uint256)", +"1c90e9cf": "testwallet8()", +"1c9193c0": "TakeOut(uint256)", +"1c91a6b9": "startExit(uint256,bytes,bytes,bytes)", +"1c921e16": "claimHeirOwnership()", +"1c92b497": "crowdsaleInitialSupply()", +"1c92cab2": "auto_transfect(address[])", +"1c931313": "setDesignatedReportDueTimestamp(uint256)", +"1c931439": "getLockedContractAddress(address)", +"1c933e2f": "multiplyDecimalRoundPrecise(uint256,uint256)", +"1c946642": "intellisys()", +"1c949bdf": "setEtherollAddress(address)", +"1c95b42e": "payBonus()", +"1c95c89d": "authorizeForToken(address,address)", +"1c96b242": "balanceOfReal(address)", +"1c96ef03": "Presale(address,address,address)", +"1c9713bd": "transferTobucketOneContract(address)", +"1c973c57": "getSpecialityValue(uint256)", +"1c982066": "refreshGameTime()", +"1c983347": "maxBidPercent()", +"1c98680f": "_redeemByDefaultTranches(address,address,uint256,bytes,bytes)", +"1c990670": "realDividends(address)", +"1c991783": "mintUniqueTokenTo(address,string,uint256)", +"1c997344": "createBid(bytes32,address,uint256)", +"1c9981f8": "donate(address,address,bytes4)", +"1c99d341": "removeParty(uint256)", +"1c9a5ddf": "returnBox()", +"1c9ab3ad": "getBlockData(uint256)", +"1c9ad79d": "newCampaign(string,address,uint256,uint256,address)", +"1c9b612e": "ledTokensAllocated()", +"1c9c549d": "buyEggPrice()", +"1c9cae74": "removeScore(uint256,uint256)", +"1c9cafd7": "tan(int256)", +"1c9cf54c": "getStockAmount(address,uint256)", +"1c9e9999": "migrateDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"1c9f289d": "setCCH_edit_6(string)", +"1c9f369e": "purchase_propose(uint256)", +"1c9fbb11": "finishPreSale3()", +"1c9fe5d7": "BRONZE_AMOUNT_TPT()", +"1c9feaa5": "isExecuted()", +"1ca0076c": "multisend2(address,address,address[],uint256[])", +"1ca03b8e": "senderHasRole(string)", +"1ca0a28d": "multiTransfer(address,address[],uint256[])", +"1ca19ece": "IsaDalawa()", +"1ca2d6b7": "WalletChange(address,uint256)", +"1ca2e94a": "setPresalePhase(uint8)", +"1ca3630a": "updateComponent(string)", +"1ca3d4b7": "icoPhase4End()", +"1ca4399b": "DEV_TEAM_HOLDER()", +"1ca43cef": "ADMISSION_TIME()", +"1ca46d61": "bigChicken()", +"1ca5df03": "multiVesting(address[],address,uint256[],uint256[],uint256[])", +"1ca60aeb": "setMeltingContract(address)", +"1ca750f4": "privateSaleTokensSold()", +"1ca7bcc7": "toBytes32(bytes,uint8)", +"1ca84592": "RA(address)", +"1ca84efc": "secondTTaxAmount()", +"1ca89953": "batchFund(uint16[])", +"1ca8b6cb": "totalTokenSupply()", +"1ca9ad47": "createLockingTokenVaults()", +"1ca9fb9d": "updateContract(uint256,uint256,uint256,uint256)", +"1caa0c6d": "saleExchangeRate5()", +"1caa5ccb": "startDapp(address,address)", +"1caaa487": "tokenOwner(uint256)", +"1caba41f": "decimalUnits()", +"1cabc5ed": "userVoteFor(address,uint256,uint256)", +"1cabc785": "getPlayerDefend(uint256)", +"1cabe3ef": "pethPEReth(uint256)", +"1cac31d7": "setAdvisorsTokensWallet(address)", +"1cac7b7f": "MINERTA()", +"1cad5a40": "depositERC20(address,address,uint256)", +"1cadd93e": "initPlayers()", +"1cae7c2f": "TransferCoinsEther()", +"1cae947a": "firstPrivateLockedAmount()", +"1caf1752": "Coinvilla()", +"1cafc144": "distruggi()", +"1cb07902": "mintMore(address)", +"1cb08889": "MERIDIANERC20(string,string)", +"1cb0d481": "transferTokens(address,uint256[],uint256[])", +"1cb120d6": "ENSRegistry()", +"1cb1778a": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[])", +"1cb20fe6": "Devcoin()", +"1cb252fe": "investorsTotal()", +"1cb2dbf6": "Reduction(string,address,uint256,uint256)", +"1cb3bbc0": "updateGlobalUnlockTime(uint256)", +"1cb3d9be": "grantEditorRights(address)", +"1cb5bfc4": "LogBet(bytes32,address,uint256,uint256,uint256,uint256)", +"1cb64196": "ethStore()", +"1cb6adec": "tubFab()", +"1cb6d99a": "buyTokensOthersCoins(address,uint256,string,string)", +"1cb78879": "TitleDelisted(uint256)", +"1cb82d79": "registrarOwner()", +"1cb9a02a": "calculateScore(uint256,uint256)", +"1cb9ce63": "makeCall(address,bytes)", +"1cba6f79": "_isERC721Contract(address,address,uint256,bytes)", +"1cbaaea7": "set_payment_details(uint256,string)", +"1cbaee2d": "saleStartTime()", +"1cbb67c4": "FooUser(address)", +"1cbc5ab1": "Buy(address,uint256,uint256)", +"1cbcb9b9": "BellaBluToken()", +"1cbcc77c": "test_suicide()", +"1cbd0519": "accountLevel(address)", +"1cbda93d": "p_update_mResalePlotDevPercent(uint256)", +"1cbea83d": "proposalReason(uint256)", +"1cbea99b": "getAddress(address[],bool,bool)", +"1cbeae5e": "winner(uint256)", +"1cbfbe47": "assignTokensToMultipleInvestors(address[],uint256[])", +"1cc0eb83": "kickcityWallet()", +"1cc13dff": "totalplayers()", +"1cc1cf46": "paymentInterval()", +"1cc1e7bc": "appendPacket(bytes)", +"1cc2502e": "auctionList()", +"1cc47026": "trans(address,address,uint256,uint256)", +"1cc48f08": "getResolverAllowance(string,address)", +"1cc54204": "totalGenesisAddresses()", +"1cc69ac1": "assignNewParcel(int256,int256,address)", +"1cc6ba74": "testWIP()", +"1cc6ea05": "populateStringMember()", +"1cc6f13d": "setComplianceService(address,address)", +"1cc70934": "getPolicyLockedPercentage(uint8)", +"1cc72c04": "CheckPoolOwnership(string,address)", +"1cc78eb6": "RANGEEND_1()", +"1cc8092f": "FOURTH_TIER_DISCOUNT()", +"1cca13d3": "is_watched(address)", +"1ccb2601": "FoodWithdrawEvent(address,address,bool,uint256,uint256,uint256)", +"1ccc7013": "setPriceAt(uint16,uint16,uint8,uint256)", +"1ccd2706": "CatholicCoin()", +"1cce70d4": "getHowManyWinners()", +"1ccf6955": "getBets(uint256)", +"1ccf8abe": "phiWon()", +"1cd01e3a": "collectPercent()", +"1cd07895": "DmlToken(address,uint256)", +"1cd0b87f": "B33RToken()", +"1cd23711": "nouveauContrat(address,address[],uint256[])", +"1cd30149": "paybackRequired()", +"1cd3072b": "transferSub(address,address,uint256)", +"1cd30a3a": "randomGen(bytes32,uint256)", +"1cd3b754": "preICOcoinsLeft(uint256)", +"1cd421cc": "Show_Product(uint256,uint256)", +"1cd45773": "getruns(address)", +"1cd58891": "requestRedemption(uint256,uint256,bool)", +"1cd60a85": "setFiscal(bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"1cd732c1": "currentEthPrice()", +"1cd73845": "updatePremiumCalculator(address)", +"1cd76498": "crossForkFund()", +"1cd8b96c": "poolDLock()", +"1cd8d8a9": "checkTeam(address)", +"1cd95d2a": "_freeze(address,uint256,uint8)", +"1cda37f2": "eraseRecords(bytes32)", +"1cdadfae": "balanceNotEqual(address,uint256,string)", +"1cdb0989": "getMaxEmpruntable(address)", +"1cdb8571": "left2(uint256)", +"1cdc3f8a": "STQPreICO(address,address)", +"1cdc51e7": "requestRates()", +"1cdce200": "walletOne()", +"1cde0ff0": "withdrawScamEarnings()", +"1cde3cde": "BDIToken()", +"1cdeae52": "setSynopsis(string)", +"1cdef3ed": "agree(uint256,address)", +"1ce00c50": "registerUnlock()", +"1ce10a9d": "get_Sponsored_Amount_in_Job_By_Address(uint256,address)", +"1ce1e1b8": "White(address,uint256)", +"1ce26ecd": "addOwner()", +"1ce26faa": "fundingEndsAt()", +"1ce28e72": "getLimit(address)", +"1ce30927": "getOption(uint256,uint256)", +"1ce477d8": "createTransferEvent(bool,address,address,uint256)", +"1ce48441": "getrm()", +"1ce5e9a6": "getOption(uint256)", +"1ce62383": "expected()", +"1ce624d6": "Crypted_RPS()", +"1ce6717d": "CouponDeposit(address[2],uint256[8],uint256)", +"1ce6a810": "KBKJToken()", +"1ce7d9da": "ico_finish()", +"1ce7eff3": "bytecodeAt(address)", +"1ce817ab": "NoWinner(address,uint256,int256,string)", +"1ceb1b87": "setCanAcceptTokens(address,address)", +"1ceba89b": "getH3Bidder()", +"1cecb935": "isSignedNoEnc(uint16)", +"1ced2c75": "SpritzCoin()", +"1cedf8a3": "getDarknodeOwner(address)", +"1ceea715": "GetMyInvestFee()", +"1cef2b4e": "TokenCreated(address,uint256)", +"1cef3c13": "StandardTokenFreezer(address)", +"1cef92b1": "getRewardStatus(address)", +"1cf081f6": "changeProductionFee(uint256)", +"1cf190b0": "getAvailableInvestmentsBackValue(address)", +"1cf196df": "changeCommissionFee(uint256)", +"1cf19ad7": "Mundo()", +"1cf1bb72": "releasedAmount(address)", +"1cf25dc9": "incentivisingAddress()", +"1cf28a65": "expand()", +"1cf28ae3": "_bonusTime1()", +"1cf2de25": "MinterUpdated(address,address)", +"1cf3d16d": "LogRegularityConfirmation(address,bool,bytes32)", +"1cf41a81": "deployContract(uint256)", +"1cf43b63": "extractExportFeeChargeLength()", +"1cf52f2b": "isActiveRegistrant(address)", +"1cf57f67": "future_round_coins()", +"1cf67724": "getImplChangeReq(bytes32)", +"1cf73c13": "setStake(uint256,uint256)", +"1cf74ece": "left56(uint256)", +"1cf91bf2": "setOwnerAtomsCount(address,uint256)", +"1cf9c88a": "addAction(string)", +"1cfa42d0": "isReleaseRecordExist(uint256)", +"1cfa8e65": "_requireBalance(address)", +"1cfac68e": "BitSelectModerado()", +"1cfb4e1b": "InsureShares()", +"1cfb7c9a": "ifAllowed(string,address)", +"1cfbc7d0": "finalRewardPeriodEndBlock()", +"1cfc832e": "invalidateProposal(bytes32,bytes32)", +"1cfcc5bb": "checkGameSideAmount(uint256,uint256)", +"1cfce386": "calculateTarget()", +"1cfd11d5": "getDungeonDetails(uint256)", +"1cfdf90e": "updateWinnersList()", +"1cfe04a7": "canPay()", +"1cfe699e": "getFreezingSummaryOf(address)", +"1cfef64c": "SEELE_TOTAL_SUPPLY()", +"1cff272e": "show_Accrued_Interest(address)", +"1cff3e09": "testCreateBallotContract()", +"1cff79cd": "execute(address,bytes)", +"1cff87db": "burnMyQUATransferAndSendQUAToSomeone(uint256,address)", +"1d000b61": "BNT_TOKEN()", +"1d007f5f": "changeDAO(address)", +"1d010815": "createSaleAuctionERC20(uint256,address,address,uint256,uint256,uint256)", +"1d012c8e": "gameIsOver()", +"1d017b28": "setUnownedNumOfExoTokensBonus(uint256,uint32)", +"1d0192e1": "editEntity(address,bool,bytes32)", +"1d01ee9d": "BPX_per_ETH()", +"1d0205b8": "months(uint256)", +"1d029641": "rntTokenVault()", +"1d02fb06": "nCryptToken()", +"1d03842f": "onePlus(uint256)", +"1d048136": "setBaseStamina(uint256)", +"1d04c92b": "appendKeyValue(string,int256)", +"1d05bcb3": "dividendsRound()", +"1d05c57e": "_createCobeFriendWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"1d05d1d8": "refundContributorEnd()", +"1d065dde": "_transferWithReward(address,address,uint256)", +"1d075862": "getUpgradeProposals()", +"1d079c20": "IETToken(address)", +"1d07b797": "destroyTheUniverse()", +"1d0806ae": "initialPrice()", +"1d08837b": "setBaseRate(uint256)", +"1d09ba2c": "right15(uint256)", +"1d0a3cb8": "suspendedPayments()", +"1d0ba36e": "transferToPartner(address)", +"1d0cc1e7": "fullfillTeamAddress()", +"1d0ced55": "IonicCoin()", +"1d0d35f5": "isContributor(address)", +"1d0d5992": "transferBetweenUsers()", +"1d0e8a4d": "isShop(address)", +"1d0f2c99": "setTarget(uint256,uint256)", +"1d103139": "commissionCheck()", +"1d107603": "totalInitialBalance()", +"1d111d13": "withdrawBNB()", +"1d121dfe": "communityGrantsAmount()", +"1d123801": "airDropNum()", +"1d124fe4": "setUtils2(address)", +"1d128687": "myDividendsNo()", +"1d12b52f": "AKBToken()", +"1d130935": "isSuspended()", +"1d143848": "issuer()", +"1d14e5ff": "crowdSaleDonate()", +"1d153624": "CIBNLiveInteractiveToken()", +"1d15f317": "SUFFICIENT_STATUS()", +"1d16d1bb": "setComponent(string,address)", +"1d16d9a0": "sendETH()", +"1d184872": "lastrandom()", +"1d18ee83": "getCurrentHardcap()", +"1d1997a0": "lengthNotEqual(int256[],uint256,string)", +"1d19a56d": "claimFeeRebate(uint256,bytes32,bytes32,bytes32,uint8)", +"1d19a78e": "deactivateHedge(address,uint256)", +"1d19ffc3": "uniqueIds(uint256)", +"1d1a696d": "contains(bytes32)", +"1d1a7c32": "concat(bytes,bytes1,bytes,bytes1)", +"1d1ac66a": "signOut(address)", +"1d1ada90": "manuallyAssignTokens(address,uint256)", +"1d1ca65b": "BROKER_RESERVE_ADDRESS()", +"1d1cc622": "CurrentDistribPublicSupply_()", +"1d1ce884": "VoteCommitted(address,uint256,uint256)", +"1d1eda5e": "setBonusesForTimes(uint32[],uint32[])", +"1d1eff42": "AccessRevoke(address)", +"1d1fe108": "burnInvestorTokens(address,uint256)", +"1d209605": "Controllable()", +"1d20a9c9": "setCardActive(bool)", +"1d211d74": "tokensToSale()", +"1d21f252": "getInvertedPrice(address)", +"1d222b77": "UserUpdate(address)", +"1d231b2c": "_blackListed(address)", +"1d24190c": "GetGiftInfo(string)", +"1d24310d": "setTransferMode(bool)", +"1d2531f3": "is_alive()", +"1d25a5eb": "CGToken()", +"1d25bba2": "addSomeCWCsTo(address,uint256)", +"1d25c1a5": "get_remaining_quantity()", +"1d2627bb": "setEidooWallet(address)", +"1d263b53": "callSecondTarget()", +"1d263f67": "flip(bool)", +"1d27769f": "participate(string)", +"1d289e57": "regulationsFulfilled()", +"1d291990": "getNumberOfBid()", +"1d293500": "gamePayOutWinner(address)", +"1d296e8d": "geneLabAddress()", +"1d29de63": "clearAllCandidates()", +"1d2a6dcf": "getNumArchers()", +"1d2aa5b3": "skip()", +"1d2aabcb": "MicroBitcoinToken()", +"1d2af28b": "pay055loyal(address)", +"1d2b4ae7": "BuyStartingSnail()", +"1d2b63bf": "GetNumber(address,uint256)", +"1d2b7155": "activateImportFeeChargeRecord(address)", +"1d2b8d96": "MintICO(address,address,uint256)", +"1d2bca17": "MyToken(uint256,string,uint8,string)", +"1d2bf543": "fetchCoinAge(address,address)", +"1d2c1b59": "query(uint256,bytes32,string,string,uint256,uint256)", +"1d2d4c34": "test_assert()", +"1d2d8400": "delegateToNewContract(address)", +"1d2d86dc": "setChecksum(bytes32)", +"1d2d9b06": "raiseEvent(string)", +"1d2dbb22": "CancelMyInvest()", +"1d2e18cd": "stageOneStart()", +"1d2e2cc4": "ENS()", +"1d2e5a3a": "setSale(bool)", +"1d2eda60": "DIUToken()", +"1d2ee278": "Angel()", +"1d2fd267": "getCarCurrentPriceAuction(uint32)", +"1d2fed16": "updateRates(bytes4[],uint256[],uint256)", +"1d300421": "NuruToken(uint256,uint256,string,string,uint8)", +"1d30d3db": "Transfer(address,address,string,uint256)", +"1d3231d4": "totalCommitted()", +"1d32a70c": "upgradeMining(uint256,uint256)", +"1d32ab99": "originTransfer(address,uint256)", +"1d32f106": "openZoneTeller(bytes2)", +"1d32f29a": "SetDescript(string)", +"1d33267a": "revokeGrant(uint256)", +"1d333265": "_removeCryptantFragments(address,uint256)", +"1d3390a1": "carefulSendWithFixedGas(address,uint256,uint256)", +"1d34be47": "updateRefund(uint256,uint256,uint256,bytes32)", +"1d34cf60": "getNumSuppliers()", +"1d351f53": "decreaseAllowanceToken(address,uint256)", +"1d356eef": "getDepositEtherForAddressValue()", +"1d3639ec": "preDGZTokensSold()", +"1d365669": "transferDirectoryToken(uint256,address,uint256)", +"1d36e06c": "tokenIndexToOwner(uint256)", +"1d36ee16": "RBC(uint256,string,string)", +"1d376a44": "PriceOracle(uint256)", +"1d3795e8": "startFreeGet()", +"1d37c8a6": "setPurchaseRate(uint256)", +"1d381240": "addKey(bytes32,uint256,uint256)", +"1d38869b": "ShopiBlock()", +"1d38bebd": "isInitialAuctionEnded()", +"1d38e433": "gasForIAD()", +"1d38fcda": "freeze(address[])", +"1d3a5dbe": "requiredPrefix()", +"1d3b9edf": "times(uint256,uint256)", +"1d3ce58d": "currentMintable()", +"1d3d4c0b": "make_contact(bytes32[])", +"1d3d93d4": "activateCurrency(address)", +"1d3e2d1b": "changeFriend(address,address)", +"1d3e43c8": "VCcoin()", +"1d3e904e": "BasicSPIKE()", +"1d3f6f1b": "setFounderMultiSigAddress(address)", +"1d3f864b": "campaignCaptain(uint256)", +"1d3f90c6": "bonusUnlockTime()", +"1d40bbcf": "_addMember(address)", +"1d411612": "EthernetCashAddress()", +"1d4233b9": "flushEth()", +"1d42cf72": "nochange()", +"1d433d52": "_getbonusRate()", +"1d43776e": "rngAddress()", +"1d43b653": "submitTransaction(address,uint256)", +"1d43cc98": "increaseTotalSupply(uint256)", +"1d4494f1": "changeApiUrl(string)", +"1d45e9e1": "notEqual(uint256[],uint256[],string)", +"1d461b83": "airdropMDL(address[],uint256)", +"1d46ef0a": "OxBitcoinExchange(address,address,address,uint256,uint256,uint256)", +"1d47ae34": "YShare()", +"1d47f8c1": "getApprovals(address,uint256)", +"1d480d8b": "addRefBonusWithRefs(address,uint256)", +"1d49e081": "EXECUTE_EXTRA_GAS()", +"1d4a48b7": "Start7()", +"1d4a9209": "initializeTokenSale(uint256,uint256,uint256,uint256,address)", +"1d4ac2b6": "yearteam()", +"1d4b0796": "updateTxStats()", +"1d4b11e4": "ownerOfLandMany(int256[],int256[])", +"1d4be3df": "getFoundAddress()", +"1d4c8e5d": "removeAddressesFromBonuslist(address[])", +"1d4cecaa": "setInfo(uint256,bytes32,string)", +"1d4d691d": "fill(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"1d4d8656": "donateAuthor()", +"1d4d8808": "_getFeeHistory(uint32)", +"1d4eaf06": "StoreFile(uint256,bytes32,string,string,string,string,string,uint256,bytes)", +"1d4f2c6d": "setMythicalGravatar()", +"1d4f3e8b": "getCLottery()", +"1d4f9bbf": "NewTTL(bytes32,uint64)", +"1d50169c": "sendToken(address,uint256,uint256,uint256)", +"1d5023c8": "setReferrerAddress(address)", +"1d511879": "buyTokensPresale()", +"1d523047": "COMMUNITY_TOKENS()", +"1d523107": "SOFT_CAP_IN_TOKEN()", +"1d52573f": "set_address_B(address,address)", +"1d532a97": "increaseAssetsCertified(uint256)", +"1d5407aa": "helpCoinAddress()", +"1d5459f7": "updateFundAddress(address)", +"1d545d09": "crowdsaleEndTime()", +"1d54ab74": "_getRateIndex(uint256)", +"1d54e16e": "reinvestPartial(uint256)", +"1d570166": "previligedAddApproval(address,address,uint256)", +"1d57b474": "updateMAX_BET(uint256,uint256)", +"1d57bcf7": "ProofLibInterface()", +"1d590771": "TeuToken()", +"1d598d10": "BitcoinBlue()", +"1d59cde3": "retrieveEarnings(address)", +"1d5a9f3f": "object_types(uint256)", +"1d5aca61": "ZITRON()", +"1d5b26b1": "presaleMarket()", +"1d5b9efe": "mintAfterSale()", +"1d5c7ef5": "getPaymentToAddRemoveCountry(string,bool)", +"1d5de3fb": "ECOToken()", +"1d5e3350": "transferReservedTokens(uint256)", +"1d5e3f6d": "sumOfN(uint256,uint256,uint256,uint256)", +"1d5ea379": "newUserFrom(address,string,string,string)", +"1d5f624a": "unPaidBurnTokens(uint256)", +"1d5fe710": "finalizeCurrentStage()", +"1d60208a": "TrezorMultiSig2of3(address,address,address)", +"1d608659": "onWhitelist(address)", +"1d60993b": "stakeScale(uint256)", +"1d62a312": "thirdPreSaleDate()", +"1d62a40f": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"1d62c5bf": "PublicSold()", +"1d6456c4": "_transfer(address,address,uint256,uint256)", +"1d645b12": "getEventInfo(uint256)", +"1d6477e1": "reclaimableLand()", +"1d64976b": "HBCM()", +"1d65551d": "updateRenExSettlementContract(address)", +"1d659153": "CanObtainChip(uint32)", +"1d65d60e": "PRE_ICO_MAX_TOKENS()", +"1d66105b": "buyDrangon()", +"1d66ff8e": "getInvestorDividends(address)", +"1d68463e": "CreateSWP(address,uint256)", +"1d68b449": "crowdClosed()", +"1d6916ab": "buyTicket(uint256,uint256,string)", +"1d693910": "Piezochain()", +"1d69ccdc": "SuccessfulVote(address,bytes32,bytes32)", +"1d6a8bda": "enableTokenTrade(address)", +"1d6b5d2c": "setDnaMixerAddress(address)", +"1d6b867c": "getGamePlayer(uint256)", +"1d6c0dfa": "setActiveHero(uint256)", +"1d6c263c": "Election()", +"1d6ca15d": "Presale(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"1d6d8d60": "modifyMilestoneTo(address,uint8,uint8)", +"1d6f5e03": "PubkeyChanged(bytes32,bytes32,bytes32)", +"1d6f757d": "withdraw(uint256,uint8,bytes32,bytes32,uint256)", +"1d6fe151": "ROSCtoken(uint256,string,string)", +"1d704684": "setBinanceCoinPrice(uint256)", +"1d706777": "getCertifier(address)", +"1d7099d3": "payFromAllowance(address,address,address,uint256)", +"1d709ab4": "set_transfer_gas(uint256)", +"1d718288": "referralTokensAvailable()", +"1d71929d": "MIAMIcoin()", +"1d71a1cd": "newIncome(string)", +"1d724a7a": "getFounderStatus(address)", +"1d731345": "calculateRoom(uint256,uint256,uint256)", +"1d7315cc": "storedAmount()", +"1d732304": "generateRand(uint256)", +"1d73268a": "PHDToken(uint256,string,string)", +"1d733337": "participantRegistered(address)", +"1d73fb93": "autoTransfer(address,uint256)", +"1d747131": "getTotalApprovers()", +"1d74c1a8": "_addToFund(uint256,bool)", +"1d74f3a5": "DIRT()", +"1d75493a": "setWinnerPlaceDistribution(uint256,uint256)", +"1d755c8d": "recieveVote(address,bytes32)", +"1d759214": "minMinBuyETH()", +"1d75a4b9": "viewAuthorized()", +"1d7630f0": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes32,address)", +"1d7747d1": "addAuthByCode(string,string)", +"1d777856": "tokensForBurn()", +"1d7786e3": "numToksSwitchedOver()", +"1d77d696": "setMockUint256(bytes4,uint256)", +"1d780960": "pauseGame(uint256,bool)", +"1d786cd0": "widthdrawEtherDelta(uint256)", +"1d7876e7": "transferBack()", +"1d78ca63": "AuctionClosed(address,uint256)", +"1d790c99": "parseData(bytes,uint256)", +"1d7915ad": "setSeed(uint256,uint256)", +"1d793e9a": "batchChangeChannel(address[],uint256[],uint256,uint256)", +"1d7add35": "appendPricePoints(uint64[])", +"1d7b46b2": "tokensPurchasedTotal()", +"1d7b5baf": "setUint(int256,bytes32,string,uint256)", +"1d7b6d58": "forkAndRedeem()", +"1d7bb2db": "CasinoCoin()", +"1d7bc449": "getCeleb(uint256)", +"1d7c194e": "bulkRejectMints(uint256[],uint256[])", +"1d7c5cd1": "userServicesLength(address)", +"1d7c8894": "issueGoldTokens(address,uint256)", +"1d7ca2be": "subAddressToWhiteList(address[])", +"1d7d1f17": "BFX()", +"1d7d8d2e": "EthereumPoint()", +"1d7e1f68": "getContentRank(address,uint256)", +"1d7f2e0c": "SecondNode(address,string,string)", +"1d7f8039": "mineMany(bytes32[])", +"1d7fb62f": "initVote(uint256)", +"1d80009a": "rootHash()", +"1d80e62a": "changeTransfersPaused(uint256)", +"1d814480": "provideInfoCourseBaseOnIdStudent(uint256)", +"1d81564d": "minutesInPeriod()", +"1d819ef0": "testEqualityAddr()", +"1d82e9c7": "EXTRA_GAS()", +"1d833aae": "drop(address,address[],uint256)", +"1d834409": "totalOrders()", +"1d834a1b": "insert(uint256,uint256)", +"1d836ae9": "EQUIEX()", +"1d83e3a9": "withdraw_(address)", +"1d846f5c": "currentCancellationResults()", +"1d849220": "getTokenSaleTime()", +"1d84f303": "ETPC()", +"1d8557d7": "updateState()", +"1d862a81": "getPop(uint256)", +"1d87614a": "OPTION_POOL_PERIOD()", +"1d87a65c": "createBattleboard(uint8)", +"1d88c05b": "successorAddress()", +"1d898f52": "IM()", +"1d89dbc9": "updateExchangeRate(uint8,uint256,uint256)", +"1d8a8db9": "ethRaisedAddress()", +"1d8aa5ec": "currentSettlementPhase()", +"1d8acf1b": "getBoolValues(bytes32)", +"1d8adb7a": "setMaxUserPayment(uint256)", +"1d8ae626": "Security(string,string)", +"1d8b13a6": "setPersonal(address)", +"1d8b4dd1": "createContractExoplanet(string,uint256,uint32,string,uint32,uint8,string)", +"1d8b70da": "order_received(string)", +"1d8bab91": "RDN()", +"1d8c61c0": "setTMEXAddress(address)", +"1d8c7c20": "internalSellTokenFromAdmin(address,uint256,bool,uint256)", +"1d8ceb44": "extractClosingSignature(address,uint32,uint192,bytes)", +"1d902fe9": "currentBonusRate()", +"1d9046ce": "transferShip(uint32,address,bool)", +"1d90824b": "getMinPrivateSaleCompanyBuy()", +"1d90c509": "cardPresale(uint16)", +"1d91bd9f": "transferPaymentAddress(address)", +"1d927f21": "userDraw(uint256)", +"1d93d8d9": "WaboToken()", +"1d9400c2": "ManagerProxyTargetMockV3(address)", +"1d9680a7": "oldWriteMessage(string)", +"1d96d4c9": "VIRES()", +"1d976e05": "transferMultiple(address,uint256[])", +"1d978f9e": "ContributionRegistered(bytes32,address,uint256)", +"1d981758": "__signatureIsValid__(address,bytes32,uint8,bytes32,bytes32)", +"1d98532f": "_computeTournamentCut(uint256)", +"1d98f3c5": "safeTransferChild(uint256,address,address,uint256)", +"1d991ffe": "IsBoilerValid(address,uint256)", +"1d9976e9": "LedgerRandomProofVerifier()", +"1d9b0783": "withdraw(uint128,address)", +"1d9b1d6f": "schedule(uint256,uint256)", +"1d9b1d85": "ReFund()", +"1d9bd2b9": "totalSoldOnICO()", +"1d9becf5": "CatAdopted(bytes5,uint256,address,address)", +"1d9caa69": "sendMessage(address,string,string,uint256)", +"1d9cfd6d": "setSale()", +"1d9d1bdc": "buyTradeConfir()", +"1d9d281d": "add0xbtcnnAddresses(address,address)", +"1d9e6c34": "compose(string,address,uint256[])", +"1d9f3cb5": "changeSaddleShopPrice(uint256,uint256)", +"1d9f4f88": "VetCoin()", +"1d9f68ad": "updateMaxBonusTickets(uint256)", +"1da05199": "hasAvailableCard()", +"1da09dd5": "getUserActionOnStory(bytes12,address)", +"1da0fb1b": "updateSettings(uint256,uint256,uint256,uint256,uint256,bool)", +"1da16e8b": "FirstSaudiToken()", +"1da26a8b": "setToken(address,address)", +"1da2d92b": "IDRT()", +"1da3f151": "presaleVolumeBonus(uint256)", +"1da4eb7a": "_secondUnlockAmmount()", +"1da4ed85": "setRewardPool(uint256)", +"1da55b9f": "YeedToken(uint256,address)", +"1da5f94d": "acceptableAddress()", +"1da6822c": "testThrowsTransferEnableNotTransferable()", +"1da74e77": "wtToken()", +"1da790a1": "showTopWinners()", +"1da83550": "setWinner(address,uint256,uint256,uint256)", +"1da83eab": "canDefrostReserveAndTeam()", +"1da88cbe": "getNew(address,bytes32)", +"1da93873": "baseTokenPrice()", +"1da97544": "ETHtoZWeirate()", +"1da97ea3": "getSenderFromData(address,bytes)", +"1da97f36": "HunterCoin()", +"1da98538": "totalMEATonsClaimed()", +"1da9ea0c": "hardCapInTokens()", +"1daae314": "secondStagePriceOfTokenInWei()", +"1dab2271": "setSuggestedAdPrice(uint256,uint256)", +"1dacad8a": "CentralizedOracle(address,bytes)", +"1dacd8fd": "buyDisciple(uint256,uint256,uint256)", +"1dad202f": "ctz64(uint64)", +"1dad57fa": "notifyCollateralNotReturned(uint256)", +"1dad63e4": "ERC20Standard(uint256,string,bool)", +"1daee82d": "secondLockAmount()", +"1daf779f": "SDpay(uint256,string,uint8,string)", +"1db021c0": "mintedCoins()", +"1db046ad": "OneToken()", +"1db05ab8": "FXNOW()", +"1db087db": "_setAllocation(address,uint256)", +"1db0ad5a": "firstUnlockTime()", +"1db0ffe9": "ECHARGE()", +"1db19959": "RATE_SALESTAGELAST()", +"1db1c805": "setDefaultReputationForManufacturer(bytes32,bytes32)", +"1db256e4": "WCCCOIN()", +"1db29a20": "getPlotInfo(uint256)", +"1db2bbe8": "allocationIndicator()", +"1db2ea77": "_91_MR()", +"1db38da2": "ClaimExecuted(uint256,uint256,address)", +"1db4012d": "newProject(string,string,uint8,address[],address)", +"1db4b07f": "rntToken()", +"1db4d7a2": "returnBalance(address[2],uint256[8],uint8,bytes32[2])", +"1db580fa": "foundersAllocation()", +"1db5ca3b": "becomeAgent(uint256,uint256)", +"1db5f974": "highBonus()", +"1db625c3": "newInvestCommission(uint256)", +"1db71ffb": "doLoops(uint256)", +"1db834f0": "NextDouble(address,uint256)", +"1db87be8": "receivingAddress()", +"1db890a6": "getCassetteSize_()", +"1db894fc": "signToApproveTokenControlInfo()", +"1db93968": "transferProperty(uint16,address)", +"1db9ec2c": "ENDDATE()", +"1dba92ab": "setKeys(address,uint256)", +"1dbb0bff": "buyBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"1dbb9867": "buyEggFee()", +"1dbbda4d": "bytesToUint(bytes20)", +"1dbc04ae": "setVestingToken(address)", +"1dbcc5ad": "RiesGraham()", +"1dbd21c3": "Daereum()", +"1dbdd617": "LILITHCOIN()", +"1dbdd792": "MIDGRADE_TYPE_COUNT()", +"1dbde6c7": "maxTokenSupplyICOEND()", +"1dbe342d": "TRND()", +"1dbe6508": "bobClaimsDeposit(bytes32,uint256,uint256,address,address,bytes)", +"1dbf3bc7": "spend(uint256)", +"1dbf79a3": "TicketGlobalChain(uint256,string,string)", +"1dc05f17": "subtract(uint256)", +"1dc0819e": "_isBreedingPermitted(uint40,uint40)", +"1dc1166f": "horseSold(uint256)", +"1dc17cce": "VALUE_DISTRIBUTION_KEY_OWNERS()", +"1dc18c45": "editNode(uint256,address,bool,address,uint8,bool)", +"1dc18f7a": "hashAmount(uint256,uint256)", +"1dc1c5e3": "payMoney()", +"1dc30bdb": "payJackpot5()", +"1dc3ac22": "setOwnerNickName(address,string)", +"1dc436cd": "getIDChildRelationshipCountOperationParentProductPositionReferenceBinding(string,address,uint256,uint256)", +"1dc45248": "getMoveCount()", +"1dc45c6d": "spenderDecreaseApproval(address,uint256)", +"1dc55c2d": "GetDividends(address,uint256)", +"1dc615bc": "checkIfAllARTDistributed()", +"1dc76e78": "buyPlayerDataRecord(uint256,uint256,uint256)", +"1dc7f1b4": "getaddressname()", +"1dc82285": "oldBalance()", +"1dc8a3bb": "B123Token()", +"1dc9186a": "updateWeiAmountShare()", +"1dc9a3b9": "transferDomainOwnership(bytes32,address)", +"1dc9bb48": "hasDividends()", +"1dcb0d36": "goBackToPreSale()", +"1dcb304b": "fipsGenerate()", +"1dcb66ff": "coordinatesOf(uint256)", +"1dcd0305": "toStr(bytes32)", +"1dcd5312": "editMessage(string)", +"1dcd9b55": "substring(string,uint256,uint256)", +"1dcdf215": "getCoursesCount()", +"1dce0b5c": "getNoteKeysCount()", +"1dce77b8": "Linkmanagement()", +"1dce79cf": "blockchainExchange(uint256,int256,bytes32)", +"1dcea427": "erc20token()", +"1dd0c71b": "myPendingPayment()", +"1dd1349d": "getNameHash(bytes32)", +"1dd14317": "setProtocolVersion(address,bytes32)", +"1dd14a96": "totalSupplyPaillier()", +"1dd15fca": "tokenInWhiteList(address)", +"1dd16db6": "customBonus()", +"1dd17e7d": "setPreSaleParameters(uint256,uint256,uint256,uint256,uint256)", +"1dd300ce": "lastWithdrawal()", +"1dd319cb": "burnFor(address,uint256)", +"1dd46c1e": "getTxCount()", +"1dd4914b": "withdrawEtherOrThrow(uint256)", +"1dd49208": "getFeed(uint256,uint256,uint256)", +"1dd49cae": "remWhitelist(address[])", +"1dd5301a": "PRICE_PREBUY()", +"1dd572a0": "fortune_sell(uint256,uint256,uint256)", +"1dd637d8": "emergencyProtectedMode()", +"1dd6f85e": "CreateLOK(address,uint256)", +"1dd72454": "TransferManual(address,address,uint256,string)", +"1dd7335c": "allocateDividendsToWinners(uint256,address[],uint256[])", +"1dd7cf6d": "getHumanInfo(uint256)", +"1dd80586": "getPlayerSpaceshipBattleStakePaidById(uint256)", +"1dd85687": "adminSetEnviroment(uint256)", +"1dd8f053": "minPriceInWeiForIco()", +"1dd95a98": "AIRDROPS_COUNT()", +"1dd9a3cf": "_sendEthereum(uint256)", +"1dda5c7d": "testFailSubBalanceBelowZero()", +"1ddabf7a": "friends(address)", +"1ddb9105": "creditVault(uint256,address,uint256)", +"1ddc0ef0": "audit()", +"1ddd303d": "setV_R3(uint256)", +"1ddd39cc": "addcoinslimit()", +"1dddbf07": "confirmExchange(address,uint256)", +"1ddde716": "advisorsAccount()", +"1ddf147f": "assignedDoublrContract()", +"1ddf9729": "IncomeTaxCalc()", +"1ddfd7db": "supportsTradingPair(address,address,bytes32)", +"1de012cd": "TRUST()", +"1de032a5": "setIsStudio(address,address,bool)", +"1de0e877": "proposedControllerPendingUntil()", +"1de14175": "setDelegadoDeEscuelaVerify(bytes32)", +"1de1441f": "remainingEPXSupply()", +"1de1ee7b": "addPublicKey(bytes32,address)", +"1de21b76": "P1()", +"1de22867": "BeatTokenPurchased(address,address,uint256,uint256)", +"1de250bf": "bless(string,uint256)", +"1de26e16": "deposit(bytes32,uint256)", +"1de271a4": "cap_tmx()", +"1de28857": "getShareBalance()", +"1de38038": "makercoin(uint256)", +"1de3d4b9": "ReleaselockAddress(address)", +"1de4334a": "get_time_locked_contract(uint256)", +"1de46a78": "admin3()", +"1de473ea": "setC4FContractStatus(address,uint8)", +"1de54fcd": "unlockedNowBalanceOf(address)", +"1de7f3e3": "setBankrollpercentage(uint256)", +"1de95d74": "AREFWallet()", +"1de98d93": "deleteUserByEmail(bytes32)", +"1dea0c57": "getRealBet(uint256)", +"1dea157f": "getPaintingArtist(uint256)", +"1dea3f0c": "recordOffchainPurchase(address,uint256,uint256,string)", +"1dead827": "_percentSoldInICO()", +"1deb0a8f": "changeState(bool)", +"1deb112b": "initialSupplyPublicPreICO()", +"1deb9b9e": "EventBid(address,uint32)", +"1debbe2f": "addExp(uint256,uint32)", +"1dec8585": "getCurrentStageByTime()", +"1ded2d87": "Transaction(address[2],bytes,uint256,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", +"1ded319d": "numberOfClaimed(address)", +"1ded587c": "Hotlist()", +"1dedc6f7": "consume()", +"1def4c9d": "TransferToBTCoE(uint256)", +"1def5033": "taskArray()", +"1df0187b": "BONUS_AMOUNTS_VALUES(uint256)", +"1df025d6": "updateGoalCheck()", +"1df0e359": "createForecasting(uint256,uint256,uint256)", +"1df13f28": "ICOBonusPercent2week()", +"1df19259": "Khabayan()", +"1df1ec82": "getProviderOwner(uint256)", +"1df224c1": "privateToken()", +"1df2bcbc": "setPresaleCont(address)", +"1df36e63": "delInvestor(address)", +"1df3e8a9": "GuardaProva(string,string,string,string)", +"1df411a6": "setOfferTime(uint256)", +"1df4241f": "StatEvent(string)", +"1df473bc": "newContract(bytes)", +"1df47aad": "ReplayProtection()", +"1df4ccfc": "totalFee()", +"1df4f144": "multiply(int256)", +"1df5a8f4": "GlobalBTC()", +"1df5e755": "Etherandom()", +"1df68102": "createSellOrder(uint256,uint256)", +"1df6d86e": "_buyLeader(uint256,uint256)", +"1df73f51": "getFreeSperm()", +"1df87cad": "raiseBuyOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"1df8eaa2": "showAuthorizerTwoAmount()", +"1df93558": "fundingStartTime()", +"1df95786": "envelopes(uint256)", +"1dfa0cf6": "ConfirmDispose()", +"1dfa3ca8": "thirdPartyInvestments(address,uint256)", +"1dfa6329": "finishPVE(uint32)", +"1dfbf227": "makeInvestment(address,string,uint256,uint256)", +"1dfc91d4": "TokenPresalePurchase(address,uint256,uint256)", +"1dfd04b9": "buyEmptyPixel(uint256)", +"1dfd1ddd": "ListNotValSince(uint256)", +"1dfde4a5": "test_insert_findWithHintPrevAtPosition()", +"1dffa3dc": "cancelJob(uint256)", +"1dffd012": "getUserManager()", +"1dffdbe6": "trade(string,uint256,uint256)", +"1e0018d6": "investor()", +"1e010439": "getBalance(uint256)", +"1e0197e2": "tournament()", +"1e01a0e6": "doit(address)", +"1e01a172": "issueDescription(uint256)", +"1e021b2b": "getproductstatus()", +"1e02bf62": "checkOutstandingQueries()", +"1e02f805": "newInvestment(address,uint256)", +"1e031a00": "QuickFlip()", +"1e0419d4": "finalWinner()", +"1e04e856": "depositEth(address,address)", +"1e04eee9": "mintChipUnsafely(uint256,bytes32)", +"1e0582e9": "_daysFromDate(uint256,uint256,uint256)", +"1e05e0c8": "bonusesForTimesCount()", +"1e0610f6": "getRealty(address,uint256)", +"1e063d98": "MRDSTSCoinToken()", +"1e06c41f": "saleStartUnixTime()", +"1e06e25e": "Zoo721(address)", +"1e075aba": "batchUnlockVestedTokens(address[])", +"1e08045d": "getOwnedTanks(address)", +"1e084558": "licenseInfo(uint256)", +"1e08d687": "removeSubcontract(address)", +"1e095eb3": "GHPToken()", +"1e0976f3": "receiveVerification(uint256,uint256,uint256,bool)", +"1e09e67b": "Rasthen()", +"1e0a0f60": "info_CanBeClaimed(uint256)", +"1e0a24b1": "revertIfReturnLessThanMin()", +"1e0b760c": "Cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"1e0b8c87": "hasSkills(address,uint256,uint256,uint256)", +"1e0c60e2": "SGem()", +"1e0c7ed4": "setConfigBool(bytes32,bool)", +"1e0e17a2": "claimMistake(bytes32)", +"1e0e3925": "numElements()", +"1e0e7c2b": "KODOKv()", +"1e0efae1": "claim_devidend()", +"1e0f6ed8": "TokenSaleFinished(uint256,uint256,uint256,uint256)", +"1e0f9795": "getNewFib(uint256)", +"1e11764e": "GameFinished(uint256,uint256,string,uint256,address)", +"1e120efb": "showEducationDetails(uint256)", +"1e1401f8": "getReturn(address,address,uint256)", +"1e141bb0": "releaseTime4()", +"1e14c48c": "setTokenFeeWithdraw(address,uint256)", +"1e14d823": "addMarketplaceContract(address)", +"1e16521b": "fulfillBurnRequest(uint256,string)", +"1e16980c": "setUnburnableWallet(address)", +"1e171d7c": "hasFunded()", +"1e172e90": "TransferHappened(uint256,bytes32,address,address)", +"1e1781af": "unfreezeAccount(address,bool)", +"1e179ae0": "getToken(bytes32,uint256)", +"1e17f292": "getAPRTx(uint256)", +"1e185b2a": "BTEcoin()", +"1e186e4c": "TestERC20()", +"1e18c404": "huroc()", +"1e191c0f": "goalSale()", +"1e1a48cf": "transferMethodId()", +"1e1a4eef": "setShareTokenAddress(address)", +"1e1a90a6": "onPayout(address,uint256)", +"1e1ad51c": "getFunding_Old(uint256)", +"1e1b13c0": "coinAge()", +"1e1b2e0f": "getLotteryPrizesLength(uint256)", +"1e1c72f4": "requestFreezeAccount(address,string)", +"1e1c86b7": "CCProject()", +"1e1d237e": "getSortedArray(uint256[])", +"1e1d696a": "changeLibAddress(address)", +"1e1ddacc": "saleController()", +"1e1e0a5e": "doHash(string,uint32,string,string)", +"1e1e3e0f": "vaultBalance(string)", +"1e20363a": "setTokenMetadataBaseURI(string)", +"1e204acf": "HODLrSoldWin(address,uint256,uint256,uint256)", +"1e20b4b9": "allocateAllUnsoldTokens(address)", +"1e215f70": "gbtAddress()", +"1e217bf8": "releaseUnclaimedFunds()", +"1e223143": "getFirst()", +"1e22648a": "setSnapshotBalance(address,uint256)", +"1e2273a7": "convert256ToReal(uint256)", +"1e22ffa5": "ClickRUB(uint256,string,string)", +"1e23300b": "createDiamond(string,address,string,string,string,string,string)", +"1e2466c6": "ICOTerminated()", +"1e24e029": "createRequestAsPayer(address[],int256[],address,uint256[],uint256[],string)", +"1e25dc54": "transFee()", +"1e2629e1": "initiateMigration(address,address,address)", +"1e26fd33": "setBool(bool)", +"1e273649": "getCountPartipants()", +"1e275d5f": "mock_getUInt(address,address)", +"1e279a37": "get_balance(address)", +"1e27a965": "JullarCrowdsale()", +"1e27ae4d": "getRecordHolder(uint256)", +"1e28a3a5": "attachCrowdsale(address,address)", +"1e28ba20": "YeojinToken()", +"1e28f29b": "initialTiers()", +"1e2a7105": "FromQueue(address)", +"1e2a9d4c": "topup(address,address,uint256)", +"1e2aebf9": "ETHERCREDIT()", +"1e2b6db2": "getBdpEntryPoint(address[16])", +"1e2bdfdf": "setAdvPrice(uint256)", +"1e2c23b3": "toEth(uint256)", +"1e2c74f6": "kill(bool)", +"1e2ca0f3": "updateLeftLottery(address)", +"1e2d5651": "totalContrib()", +"1e2da3e9": "PawsCoin()", +"1e2def3a": "saleStopTimestamp()", +"1e2e35a4": "sellPoohs()", +"1e2e3a6b": "getExchanges()", +"1e2e7a06": "registrationTime()", +"1e2ed152": "ECO_SYSTEM_BONUS()", +"1e2f48da": "assertOwnersAreConsistent()", +"1e2fc4f7": "test_mint()", +"1e2fee94": "CatDestinity()", +"1e2ff94f": "currentTimestamp()", +"1e2ffcef": "Show_All_Company()", +"1e30397f": "isValidName(string)", +"1e30b599": "Processables()", +"1e31264d": "_premiumPricePer30Days()", +"1e3339f0": "MTT()", +"1e335962": "token_multiplier()", +"1e33a6d5": "setGasUsage(bytes4[5],uint256[5])", +"1e34c585": "setConfig(uint256,uint256)", +"1e35e567": "fetchOrderByIdWithMerchant(string)", +"1e36d755": "sendTokenToOwner()", +"1e372dd3": "Advanced_Anemoi(uint256,string,string)", +"1e375ab9": "claimReferralBonus()", +"1e38046c": "address3()", +"1e38a011": "setRoutePrice(uint256)", +"1e391738": "minimumGoalInWei()", +"1e39499d": "scheduleCall(address,bytes,uint256)", +"1e3a5831": "Claimable(address)", +"1e3b92b4": "getGalaxy(uint256)", +"1e3b9de5": "getClaimant(address)", +"1e3ba116": "_supportsAllInterfaces(address,bytes4[])", +"1e3ba941": "StexTalk()", +"1e3c73bd": "BdpPriceStorage(bytes8)", +"1e3c9352": "grant(address[])", +"1e3d9c04": "removeLink(address,bytes)", +"1e3e6369": "GetMySnail()", +"1e3ea569": "SentTokens(address,uint256,uint256,uint256)", +"1e3f11ee": "getPlayerGeneralAttr(uint64,uint8)", +"1e3faf22": "airdropNum1()", +"1e40375f": "killTo(address,bytes32)", +"1e4092e5": "FOUNDER_AMOUNT()", +"1e4146b0": "generateCombinationKey(uint8[4])", +"1e41583b": "reclaimElement()", +"1e41be58": "deleteApplication(string,bool)", +"1e41f63e": "viewAll(string)", +"1e42698b": "setScrapAuctionDuration(uint256)", +"1e440e02": "TKCDStandardToken(uint256,string,uint8,string)", +"1e442919": "getAccessoryLockStatus(uint64)", +"1e4433c4": "getVar(string)", +"1e44b919": "KAPAYcoin(uint256,string,string)", +"1e44c112": "find_strike(uint64,uint32,uint32)", +"1e44e6af": "setPI_edit_10(string)", +"1e4532f1": "balances_bonus(address)", +"1e45de61": "GetWinningAddress()", +"1e4623e1": "segmentHash(string,uint256,bytes32)", +"1e464460": "AscendGod()", +"1e466eee": "triggerVolcanoEruption()", +"1e49d5ab": "getUserInfoAndConfig(address)", +"1e4a126e": "BeforeChipObtain(uint32)", +"1e4adcf7": "weiDonated(address)", +"1e4b5652": "setKNCRate(uint256)", +"1e4ba4d4": "swap(uint256,address,address,uint256,uint256,uint256,uint256)", +"1e4bb033": "HcoinToken()", +"1e4bd42c": "claimAllTokens()", +"1e4bdf27": "TransferActive()", +"1e4bffde": "_getBegin(int256)", +"1e4c6e7e": "gatito()", +"1e4c6f7c": "base_token_seed_amount()", +"1e4c7736": "updateManyLandData(int256[],int256[],string)", +"1e4ccdc4": "resultDraw()", +"1e4d17c5": "setFundraiserAddress(address)", +"1e4df315": "HRChainERC20()", +"1e4df938": "referralPool()", +"1e4f95c7": "pipeMoney()", +"1e504c9c": "setRegisterPrice(uint256)", +"1e5140dd": "closeTradeProfile(bytes,bytes32)", +"1e516c32": "OMIVIATEST()", +"1e519c4c": "getCurrentModifier()", +"1e51a907": "getServiceNames(bytes32,address[],address)", +"1e51cb10": "_MineId()", +"1e5253a4": "RegisterShareholder(address)", +"1e5296ef": "getMySellOrdersBlackMarketComplete()", +"1e52aa52": "startBetRed()", +"1e52ca35": "ROLE_SUPER()", +"1e52f7b5": "accoutToPayLevel(address)", +"1e5330ca": "checkBetResult(uint8,address,bytes32,bytes32)", +"1e5393cf": "setDividendAndPayOut(uint32,uint32)", +"1e53a3a0": "SetContracts(address,address)", +"1e53efe0": "getBonusAmount(uint256)", +"1e542fd4": "AddLock(address,uint256,uint256,uint256,uint256)", +"1e550ca2": "carTaxiTokenAddress()", +"1e552efc": "MarnieCoin()", +"1e5571bc": "getTankSell(uint32)", +"1e561d5e": "createSellingProposition(address,uint256,uint256,uint256)", +"1e566dae": "_moveToken(address,address,uint256,bytes,address,bool)", +"1e567582": "gxc()", +"1e57e3bb": "EtherReceived(address,uint256)", +"1e580615": "cashIn()", +"1e5890c4": "saveResult(uint256)", +"1e59b53f": "Medallion()", +"1e59c529": "register(string,address)", +"1e5a652b": "MDICOStage1(address,address,uint256,uint256,uint256,uint256)", +"1e5b433b": "testTransferControl()", +"1e5bd14a": "setRegulator(address,bool)", +"1e5c6176": "BitChordCrowdsale(address,address)", +"1e5d1a4c": "End(string)", +"1e5d2e41": "geneCore(uint256,uint256,uint256)", +"1e5d2e78": "_updatePools(uint8,uint256)", +"1e5d629d": "createChannel(bytes32,address,uint256,address,uint256)", +"1e5e668f": "fetchDataMain()", +"1e5e8aa9": "token_rate()", +"1e5f34af": "sub(uint8,uint8)", +"1e5f3569": "createEIP20(uint256,string,uint8,string)", +"1e5f35f3": "Prover()", +"1e5f9149": "getWinner(bytes32)", +"1e5fc8e7": "bonusThirdWeek()", +"1e5ff41a": "tier5()", +"1e6000c2": "AffiliateReceived(address,address,bool)", +"1e6090f4": "isContractDeprecated()", +"1e60ab84": "PalaceResidence()", +"1e625935": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address)", +"1e626456": "tokenFallbackData()", +"1e6288fa": "soldTokenValue()", +"1e629a75": "StartNextStage()", +"1e62a511": "cHWCtoEth()", +"1e62a915": "set_participant_topl_address(address,uint256)", +"1e62be25": "Bytes32Passer()", +"1e639798": "reset(address,address,address,address,address,address)", +"1e63b3d3": "bancorConverterAddress()", +"1e658b74": "_userSignUp(string,address)", +"1e659135": "PVBToken()", +"1e65dc88": "EtherMemes()", +"1e6704bd": "maintenanceSetAccountsList(address[])", +"1e688c14": "fulfillBounty(uint256,string)", +"1e6b0e44": "finderFee()", +"1e6b4c6f": "setStakePeriod(uint256)", +"1e6bd462": "getAllGamesCount()", +"1e6c3d0e": "BLACKCOIS()", +"1e6c593c": "checkClaim(string,string)", +"1e6d4180": "stageBonus()", +"1e6d58ce": "AHA_Token()", +"1e6e5d81": "addContact(bytes32,address)", +"1e6efc83": "setRestartGamePeriod(uint256,string)", +"1e6f01a7": "setPI_edit_23(string)", +"1e6f9c1e": "adjust_Transfer_data(bool)", +"1e701780": "MICRODAO(address,uint256,uint256,uint256,address)", +"1e70a239": "getAllGiftTemplateIds()", +"1e711ec0": "plan_active_time()", +"1e7230c5": "benReady()", +"1e7231b6": "disablePhenomenon(bytes32)", +"1e724447": "icoTill()", +"1e725589": "getAddressesFromUsernames(string[])", +"1e72a7fc": "calculateVariation(uint64,uint64,int64)", +"1e72d642": "BezantToken()", +"1e737709": "getSourceValue(uint256,uint256,uint256)", +"1e73b362": "withdrawContractEther(uint256)", +"1e7401d9": "ArconaToken(uint256,uint256,address,address,address,address,address,address,address)", +"1e7421a2": "changeKYC(address,bool)", +"1e745e61": "createContest(string,uint256)", +"1e74a2d3": "getMinimumEndowment()", +"1e74c414": "WashExchange()", +"1e7527b0": "setOwner(uint32,int256,address)", +"1e75c12d": "ETLTokenPresale(address)", +"1e7769de": "tryForcePublic(uint16)", +"1e77933e": "change(address)", +"1e77b2e0": "updateRate(string,uint256)", +"1e78cfe1": "minimumPayout()", +"1e79933f": "removeTagByModuleType(uint8,bytes32[])", +"1e7a505f": "register(address,bytes32)", +"1e7a5bf7": "testMintAuth()", +"1e7ae71f": "owner1Of(uint256)", +"1e7be210": "whitelists(address)", +"1e7bef65": "setIncubatorContract(address)", +"1e7c20ac": "getCompte_24()", +"1e7c27cb": "ADMIN_CONTRACT()", +"1e7c402b": "test_percOf2()", +"1e7cedb7": "TKTToken()", +"1e7d84cb": "getproduuct(uint256)", +"1e7de8cc": "setChibiGEN0Price(uint256)", +"1e7e2064": "addPeers(address[])", +"1e7e4b5e": "PREISSUED_AMOUNT()", +"1e7ea8d5": "getFreelancerCategories(address,address)", +"1e7fa008": "amountRemaining(address,bytes32[])", +"1e801c8c": "sealForChanges(uint256)", +"1e81086d": "setDirectMintAgent(address,int256)", +"1e815fcd": "isBuyOpen()", +"1e81ccb2": "pings()", +"1e820325": "finalizeRound()", +"1e822140": "transferToLockedBalance(address,uint256)", +"1e829230": "createGrant(bytes32)", +"1e82965e": "DCTR()", +"1e83409a": "claim(address)", +"1e83bab7": "singleInvokeWith2Args(address,string,address,uint256)", +"1e83cdab": "extract()", +"1e83ce17": "houseFeeThreshold()", +"1e83e697": "setTokenOptions(bool,bool,bool)", +"1e841271": "setTestFee(uint256)", +"1e84c725": "emergencyTransfer(address,address,uint256)", +"1e85107c": "bonusPercentages(uint256)", +"1e8551e3": "voteRewardPerUnit(uint256)", +"1e85e8f0": "TLN_TOKEN_SYMBOL()", +"1e860d43": "setNewInvestorsList(address)", +"1e86ccf5": "setOperatorCommission(uint256)", +"1e871309": "rewards_id(uint256)", +"1e872f55": "setPlayerLastUpdateTime(address)", +"1e8784c9": "SabrinaToken()", +"1e87fe1d": "setSmallCapWhitelistParticipant(address,uint256)", +"1e8812f3": "BonusCrowdsale(uint256)", +"1e891c0a": "setTimelock(uint256)", +"1e892c21": "returnForRedemption(uint256,uint256,uint256)", +"1e893437": "stageClose()", +"1e8997ec": "PUNCToken()", +"1e89c83b": "read_where_gadget(uint256)", +"1e89d545": "multiTransfer(address[],uint256[])", +"1e8a98cf": "UP_totalBets()", +"1e8b0d03": "EventBankrupt()", +"1e8b31dc": "batchPay(address[],uint256[],address[])", +"1e8bf006": "getNumbersFromString(string,string,uint16)", +"1e8bf1f9": "readInt256s(bytes32[])", +"1e8c72b4": "incrUserAvailBal(address,uint256,bool)", +"1e8d1510": "KeyFund(uint256,uint256)", +"1e8d15f8": "LasVegas()", +"1e8f11ab": "candleCost()", +"1e8fba36": "fortifyClaim(address,uint16,uint256)", +"1e909841": "getEmployerContracts(address,address)", +"1e912334": "maxDonors()", +"1e923f1b": "myAddr_test()", +"1e924bf8": "tokensReleasedPerPeriod()", +"1e92a65c": "teamAmounts()", +"1e935ab1": "requestPause()", +"1e93c209": "powerPool()", +"1e93d358": "multiStake(uint256,uint256,uint256,uint256,uint256)", +"1e9447f3": "hasDuplicate(string)", +"1e9493d8": "ETH_MAX_GOAL()", +"1e962e62": "F0002Token()", +"1e96bf0e": "separate(address,uint256)", +"1e9824ee": "setExchangeRates(uint8,uint8)", +"1e982b40": "saleOverInTime()", +"1e98d334": "initRace(uint8[4])", +"1e98d54a": "addGlobalConstraint(address,int256,bytes32,address)", +"1e9a04a7": "secondRoundICOStart()", +"1e9a6272": "onDelivery()", +"1e9a6950": "redeem(address,uint256)", +"1e9b1312": "accountAddress()", +"1e9b91db": "VictorieumNewICO2Token()", +"1e9be6a1": "usdEthPrice()", +"1e9bf0da": "disown()", +"1e9cefa3": "updateEmployeeWallet(uint256,address)", +"1e9d2d28": "NewGame(uint256,bytes32,bytes32,bytes32,address,uint256)", +"1e9d3bc9": "LZXToken()", +"1e9d48cf": "checkUser(address)", +"1e9d8232": "TheGame(address)", +"1e9da16a": "n_domains()", +"1e9dd927": "kycVerify(address,bool)", +"1e9e541c": "TEAM_TOKENS2()", +"1e9e6949": "ActiveChanged(address,bool)", +"1e9e928e": "GBPValue()", +"1e9ea66a": "balanceEther10000000(uint256)", +"1e9eb554": "deathData_v14()", +"1e9f3c24": "ETH888CrowdsaleS1(address)", +"1e9f6dcb": "ticketsFaceToFaceSold()", +"1e9fcc77": "activateAllowance(address,address)", +"1ea06b9e": "_allowManualTokensGeneration()", +"1ea0d0de": "endRace()", +"1ea103d0": "Registra()", +"1ea134b9": "PeculiumOld()", +"1ea1380c": "getScores()", +"1ea1e522": "claimF()", +"1ea333ea": "_generateDutchAuction(uint256,uint256)", +"1ea3cae9": "addressToAccountMap()", +"1ea48870": "isFunder(address)", +"1ea5a292": "endorse(uint256,uint256)", +"1ea5efc4": "partner1_voted_update_marriage_status()", +"1ea6af82": "reward9()", +"1ea6b97f": "getTotalTokensOwed(address,uint16[])", +"1ea7b0f9": "Bilibit()", +"1ea82655": "generatePartnerTokens(uint256)", +"1ea8b099": "endMark()", +"1ea906b5": "leftTokens()", +"1ea90acd": "fetchOrdersForPayer()", +"1ea92826": "currentTierIndex()", +"1eaa6c4b": "firstTokenExchangeRate()", +"1eab0a95": "testingContracts()", +"1eabc116": "buy(uint16)", +"1eabef31": "YKToken()", +"1eada765": "getConditions(uint256)", +"1eae5ff9": "getWaitPreselled()", +"1eae85cb": "priceOfDate(uint256,uint256,uint256,uint256)", +"1eaec76f": "FENIX(uint256)", +"1eafe00c": "isAmendedEarlyPurchase(uint256)", +"1eb02078": "getUIntTypesCount(uint8[])", +"1eb21875": "artistManifestoFundAddress()", +"1eb22b45": "sellerDatabase(address,uint256)", +"1eb25d13": "InitialSupply()", +"1eb25e0a": "configure(uint256)", +"1eb3957b": "requestDelegatedFrom(address)", +"1eb42523": "update(address,address,address)", +"1eb4dac6": "endSecondWeekICO()", +"1eb55c51": "CEI()", +"1eb5cb66": "resume(string)", +"1eb5de94": "privateExchangeRate()", +"1eb5ea2e": "returnFunds()", +"1eb726af": "contractAddress(string)", +"1eb79e44": "gasForGR()", +"1eb8befb": "setNewMediator(address)", +"1eb92366": "setRecommenderMulti(address[],address[])", +"1eb96a5c": "cancelOwnershipOffer()", +"1eb96f7c": "MahalaToken()", +"1eb9ef91": "getAccountsForUser(address)", +"1eba7c7a": "setDefaultClaim(string)", +"1ebb24bc": "_postTransferHook(address,address,uint256)", +"1ebbc515": "MakerWithdrewAsset(uint256)", +"1ebbe681": "getWinningById(uint256)", +"1ebcbc93": "transferAdminShip(address)", +"1ebcdba4": "getWactive(uint8)", +"1ebcf2fb": "reclaimParsecCredit()", +"1ebd8263": "setMinimumBuyAmount(uint256)", +"1ebd8e6d": "XEVENUE()", +"1ebdaf8b": "testNewAccountHasZeroBalance()", +"1ebdd39a": "getWithdrawalData(uint256)", +"1ebde78b": "getSecondsTimeLockedByString(string)", +"1ebe1827": "EthLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"1ebe5051": "StarzToken()", +"1ebe5c0f": "sendWithAllOurGasExcept(address,uint256,uint256)", +"1ebe8105": "tokenPriceUSDWEI()", +"1ebeb80b": "getBools()", +"1ebebb9b": "_checkAndSub(bytes32,bytes32)", +"1ebedded": "setAllRates(uint256,uint256,uint256)", +"1ebeec82": "_withdrawNAC(address,uint256)", +"1ebf0d11": "sellAllAmount(address,address,uint256,address,uint256)", +"1ebf1f5b": "hasSellerGuarantee()", +"1ebf42e5": "TokenAFL(uint256,string,uint8,string)", +"1ebfa2df": "getDiscountsAmount()", +"1ebfa358": "dateToTimestamp(uint16,uint8,uint8)", +"1ebfdca0": "servicesLength()", +"1ec29a5f": "getPurchasedAmount()", +"1ec32d15": "companyWallet()", +"1ec41163": "lastWinnerAddress()", +"1ec42d50": "_createWarrior(uint256,address,uint256,uint256,uint256,uint256)", +"1ec68b92": "saveMetaData(address,bytes,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", +"1ec6b60a": "startVoting()", +"1ec6dba6": "SimpleSaleToken()", +"1ec75025": "developerWithdraw()", +"1ec762a4": "setlvlWebsite(string)", +"1ec7cda4": "addTokenInternal(address,address,uint256)", +"1ec7e345": "tokenValue()", +"1ec87b86": "getTravelPrice(uint256)", +"1ec8a460": "AdifyToken()", +"1ec8bb8c": "distributeReward(address,uint256)", +"1ec8d4ef": "setMinBetForJackpot(uint256)", +"1ec8d5f7": "initialReleaseDone()", +"1ec8f9ba": "purchaseTickets(uint256[])", +"1ec9c2c0": "Sub(uint256,uint256)", +"1ec9f7b5": "longTimeLock()", +"1ec9fc84": "pendingFeesWithdrawals(address)", +"1eca98ce": "transferToAdvisors(address,uint256)", +"1ecb3889": "EurocoinB()", +"1ecb450e": "Devpr()", +"1ecc05f2": "validDelegate(address,string,address)", +"1ecc17c4": "pauseTransfer(bool)", +"1ecc56f2": "initTimeOf(uint256)", +"1ecc644f": "vestStage()", +"1ecca316": "nextFreeTier()", +"1ecd0d03": "PoSPerCent()", +"1ecd3f30": "tokenReserved4()", +"1ecd9f21": "calculateDrugBuy(uint256,uint256)", +"1ecdfd2f": "setIEIAddress(address)", +"1ecfd4c3": "takeToken()", +"1ecfe64d": "_jSub(uint256,uint256,uint256,uint256)", +"1ed01f61": "maxWagerWei()", +"1ed0c2cc": "LifeSet_004()", +"1ed0e01c": "ltdParams()", +"1ed113ae": "getSignature(bytes)", +"1ed1d0f7": "KryptoGiftsMessages()", +"1ed1f196": "pf(address)", +"1ed20347": "cfo()", +"1ed24195": "getPeriod()", +"1ed2730a": "createInvoice(uint256,address,address)", +"1ed27a14": "setPoliceNodesPerReport(uint256)", +"1ed358e6": "recycleAppearance(uint128[5],uint256,uint128)", +"1ed378a1": "getHybridizationPrice(uint256)", +"1ed454a5": "memberLevel(address)", +"1ed5336b": "changeExerciseprice(uint256[],uint256[],uint256[])", +"1ed5da2f": "Controller_Address1()", +"1ed64f7b": "is_king_for_sale()", +"1ed692c0": "finalizeCrowdfunding()", +"1ed6a6ab": "emitFeeAuthorityUpdated(address)", +"1ed6f423": "changeDescription(address,string)", +"1ed77dc8": "presaleWallet()", +"1ed7830e": "partnerWallet()", +"1ed83fd4": "setHash(string)", +"1ed8f023": "BlockableContract()", +"1ed96e32": "disableTransmit()", +"1eda49be": "AheVotingBrainfood2()", +"1eda61d4": "customBonuses(address)", +"1edb0e73": "GILToken()", +"1edc44ed": "GameCoinToken()", +"1edc5ce0": "SUPPLY_FOR_MARKETING()", +"1edc8f03": "withdrawalEth(uint256)", +"1edc8f91": "openAuction(uint256)", +"1edd19e1": "bidExpireBlockLength()", +"1ededc91": "repayBorrowVerify(address,address,address,uint256,uint256)", +"1edf0c1e": "lockAndDraw(address,bytes32,uint256)", +"1edf0c3d": "TESTTOKEN()", +"1edf49ff": "myFirstToken()", +"1edfdb48": "addjoinlist_odd(address,uint256)", +"1ee04a3d": "TLTContract()", +"1ee13d0a": "creditDao()", +"1ee1665d": "WAMToken()", +"1ee17afd": "Thief()", +"1ee185ad": "roleRemove(address,string)", +"1ee284b1": "rockOwners(address,uint256)", +"1ee2e3cf": "unsetBlacklist(address)", +"1ee2fe6a": "defreeze(address,uint256)", +"1ee392c6": "getMaxProfitAsPercentOfHouse()", +"1ee426e1": "Eth2preNSP(uint256)", +"1ee44a5e": "listRequire(string,uint256,uint256,uint256)", +"1ee45da0": "sellEndTime()", +"1ee53e56": "presaleRate(address)", +"1ee55080": "getMotherCount(uint32)", +"1ee5f936": "stopTeamTokenTransfer()", +"1ee7c4bc": "LogNewAllocation(address,uint8,uint256,uint256)", +"1ee7ccc7": "preIcoInvestorsAddresses(uint256)", +"1ee952ad": "getPhysician(address)", +"1ee97dda": "_intervalFor(uint256)", +"1ee9f029": "PREICO_HARDCAP()", +"1eea92c1": "levelExpAdjustment()", +"1eeaa389": "lockSupply(bool)", +"1eeac5d5": "TradelizeToken(uint256)", +"1eebb48c": "___test(address,address)", +"1eeccead": "tokensAlreadyMinted()", +"1eed0347": "applicationNameHashTaken(bytes32,bool)", +"1eed0f27": "setPriceUSD(uint256)", +"1eed1192": "newUser(string)", +"1eed4e09": "getVoteBy(address)", +"1eee993a": "addChild(address)", +"1eef94bd": "setAwardedUnfreezePeriodSeconds(uint256)", +"1eefddb1": "grace()", +"1ef0625b": "player_2(uint256)", +"1ef085db": "price3rdWeek(uint256)", +"1ef09ccf": "executeDelegateCall(address,uint256,bytes)", +"1ef17972": "ChangeOwner(bytes32,address)", +"1ef2c6d1": "closeTurnByHand(uint256)", +"1ef31b0d": "erotixFund()", +"1ef3755d": "restart()", +"1ef410e2": "addAudit(uint256,bool)", +"1ef5b90f": "release_(address,uint256[],uint256[])", +"1ef60485": "returnAccounts()", +"1ef741fd": "interestPeriod_()", +"1ef75084": "getCompoundPlan(uint256)", +"1ef75b1a": "GGToken(address,string,string,uint256,uint256)", +"1ef7b68a": "purchaseReceiptById(bytes32)", +"1ef8766f": "reserveTokens(uint256,uint256,bytes)", +"1ef987c1": "getInvestedAmount(address)", +"1efad671": "isPreSaleReady()", +"1efb06e0": "LogNewWallet(uint256,address)", +"1efb17ee": "changeHouseAddress(address)", +"1efba6c2": "fixedPrice()", +"1efdebb2": "hodlersCount()", +"1efe3abf": "getNumTasks()", +"1eff2b2f": "advisorIssueVesting(address,uint256)", +"1effc0d8": "createPerRound()", +"1f00c55b": "TOKENS_CAP()", +"1f0276fc": "_getKey(bytes32,uint256)", +"1f03bc1b": "setNewUserBonusCardTradable(bool)", +"1f049a49": "tokensBank()", +"1f04b54c": "test_ConsensysReached()", +"1f04becc": "ppFinishTime()", +"1f05ff29": "fromWeiToFp(uint256)", +"1f065f56": "KangGuo()", +"1f06c859": "promises(uint256)", +"1f078962": "setFlowerContract(address)", +"1f078f56": "winTokens(uint256,address)", +"1f0815ce": "togglePromo(bool)", +"1f09b0a2": "getDisplayGenVault(uint256)", +"1f0a21ad": "setAdvisers(address[],uint256[])", +"1f0b2561": "getCurrentBonusPercentage()", +"1f0b5553": "setBalances()", +"1f0ba6c9": "trade()", +"1f0c03f4": "forwardEndTime(uint256)", +"1f0c1e0c": "getEventTokenAddress(bytes32,uint256)", +"1f0c5f26": "CashMove(uint256,bytes32,address,address)", +"1f0da298": "transferTokensAndEtherValue(address,address,uint256,uint256)", +"1f0de21c": "addrunmoney(address,uint256,uint256)", +"1f0f2ce4": "withdrawOrderRefund(uint256)", +"1f0f711f": "discontinue()", +"1f0fd191": "test_threeValidEqUint()", +"1f0fd905": "getAssetIdCargo(uint32)", +"1f101520": "preIcoMin()", +"1f107635": "ownerSetAdmin(address[])", +"1f1144dc": "ViewOffer(address,uint8)", +"1f11d503": "GameSicBo(string,uint256,uint256,uint256)", +"1f124116": "approveSettingUpdate(uint256,bool)", +"1f12da06": "getPropertyPrivateModeLastUpdateEarnUntil(uint16)", +"1f130761": "tokensSent()", +"1f130d1f": "insertAddress(address)", +"1f13b5ae": "NokuMasterToken(uint256,uint256)", +"1f13de92": "inEther(uint256)", +"1f13f165": "NecromeunToken()", +"1f14df69": "balances(address,bytes32)", +"1f150322": "LogUserUnregistered(address,address)", +"1f15bc1b": "disallowTransfersTo(address)", +"1f15e163": "LaunchRocket(uint32,uint32,uint32,uint32,uint32,uint32)", +"1f161533": "distributeXYZ(address[],uint256)", +"1f167829": "nextDraw()", +"1f16c8b9": "getEndDateOfCampaign(bytes32)", +"1f16fda4": "multiTransfer(address[],address,uint256[])", +"1f1836fa": "isPresalePurchase()", +"1f1886e4": "extendSale(uint256)", +"1f18e56e": "removeOwnersWithHowMany(address[],uint256)", +"1f194b9f": "getFreeKilo()", +"1f1953ad": "addPokemonToMaster(address,uint256)", +"1f1aea6e": "initSale3(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"1f1b11cc": "buyMinerFromSale(uint256)", +"1f1bd005": "getRocCoreAddress()", +"1f1bd692": "text()", +"1f1c827f": "StartGame(string,string)", +"1f1c84b7": "decreasePresetTransfer(address,uint256)", +"1f1cb62b": "peg()", +"1f1dc61b": "checkPayLoan()", +"1f1de456": "regName()", +"1f1e1295": "isApprove(uint256)", +"1f1e2cfa": "calcUnMaskedEarnings(address,uint256)", +"1f1e6c4e": "createCollectible(uint256,uint256,address)", +"1f1ea554": "HolahopToken()", +"1f1ec029": "updateKeyPrice(uint256)", +"1f1eef6b": "getContributionHashByIndex(uint256)", +"1f1f5e76": "addValueToContribution(uint256)", +"1f1f8240": "_parseIntScientific(string)", +"1f201d7e": "level_judgment(address,address)", +"1f201e39": "etherandomExecWithGasLimit(bytes32,bytes32,uint256,uint256)", +"1f20f762": "losingAmount(address,uint256)", +"1f212106": "startICOStage7()", +"1f218cf1": "ICO_PERIOD()", +"1f21f9af": "marketMaker()", +"1f220be0": "unlock(string,bytes32,address,address,uint256)", +"1f221d4c": "updatePublicityBalance(address,uint256)", +"1f227fc8": "importTokensFromSourceToken(address)", +"1f23a9bc": "getAcceptedAndRejectedVotes(uint256,uint256)", +"1f23c22b": "getOpenBids(bytes32)", +"1f25cfaf": "changeBot(address)", +"1f261939": "payBid(bytes32,uint256)", +"1f2698ab": "started()", +"1f275713": "prefixed(bytes32)", +"1f278d32": "MyartPoint()", +"1f27a8b5": "set_transferrable(bool)", +"1f28c821": "tokensPreMinted()", +"1f296600": "brickETHPrice()", +"1f299c1a": "updateRegistry(bytes32,address)", +"1f29bdcf": "setAStore(string,address,address)", +"1f2a3e06": "scissors()", +"1f2c6414": "getAddressBatchByUsername(bytes20[])", +"1f2d62bc": "gameStartedAtBlock()", +"1f2d8d66": "getNumberVote(uint256)", +"1f2dc5ef": "divisor()", +"1f2e5461": "LOUDEX()", +"1f2e886c": "testControllerTransferTriggersEvent()", +"1f2e97c8": "slaveWalletPercentInitialized()", +"1f2ea6e0": "dealership(address)", +"1f2ec9c9": "setHoldAmount(address,uint256,uint256)", +"1f2efa83": "allocateIntoHolding(address,uint256,uint256)", +"1f2f7fc3": "dispute(uint256,uint256)", +"1f305ec7": "removeFromKycTeam(address)", +"1f30edc7": "CTOSignature()", +"1f312375": "referralBonusRate()", +"1f32768e": "getSubscription(bytes32)", +"1f32c18f": "getDrink(uint256)", +"1f34556a": "changeMaxReward(uint256)", +"1f34563c": "newUser(string,string)", +"1f34d1d3": "registerAppVersion(bytes32,bytes32,address,bytes4[],address[])", +"1f35bc40": "setCrowdsaleAddress(address)", +"1f3634ed": "ink(bytes32)", +"1f368fa6": "ExtrabitToken()", +"1f378b8a": "refundEther(address)", +"1f38034c": "removeEmailAddress(string)", +"1f38c358": "allocateIds(uint32)", +"1f390975": "MAX_TOTAL_CONTRIBUTIONS()", +"1f3943df": "SURT(uint256)", +"1f39716c": "aggregateBet(uint256,uint256)", +"1f39a141": "getTokenAmount(uint256,address)", +"1f3a3a53": "mint(int256,uint256)", +"1f3a4c14": "addFreezableAddress(address)", +"1f3a7c0b": "FOUR_YEAR_KEEPING()", +"1f3a98d1": "getReferralRates()", +"1f3b3148": "endEpochTimestamp()", +"1f3bec3b": "secondarySaleReserveWallet()", +"1f3c99c3": "logout()", +"1f3ce938": "increasePresaleEndTime(uint256)", +"1f3ceb51": "getGameById(bytes32)", +"1f3d3261": "JustForward(uint256)", +"1f3dcc8d": "maxGasPricePenalty()", +"1f3e1c8d": "LogTokensPurchased(address,uint256,uint256,uint256)", +"1f3e50f6": "withdrawBCEO()", +"1f3e64e6": "getTXwithCode(address)", +"1f3ee21f": "setUsdEthValue(uint256)", +"1f3fd5ca": "PI_EDIT_1()", +"1f3fe8d1": "ICO_BONUS1_SLGN_LESS()", +"1f3fed8f": "tokensForMarketing()", +"1f400477": "inLendingMode()", +"1f402356": "markContractAsInited()", +"1f417317": "WalletSimple(address[])", +"1f42103c": "AworkerToken(uint256)", +"1f4356e4": "emissionFunds()", +"1f43f396": "startICOStage5()", +"1f4425f3": "checkCloseTimer()", +"1f44a40f": "airDropSame(address,address[],uint256)", +"1f44b1de": "ValithToken()", +"1f45006c": "checkEthRaised()", +"1f455922": "removeToken(string)", +"1f45ad5c": "modifyContentAccess(bytes32,bool,uint256)", +"1f461f0d": "withdrawableAmountFor(address)", +"1f468245": "calculateObtainedBUB(uint256)", +"1f46eb98": "agentPermission(address)", +"1f470b14": "lockUpAmountOf(address)", +"1f471ad0": "proxyMint(address,uint256)", +"1f47b50d": "MineablePOWCoin()", +"1f47ba29": "safeToMul(int256,int256)", +"1f4848ef": "setTakeFee(uint256)", +"1f48af0a": "updateWeapon(uint256,string,string,string)", +"1f48ff7c": "mintMarketMakerApproval()", +"1f49aff4": "ACLYDcid()", +"1f49caac": "canUseLock()", +"1f4a5c32": "confirmTransactionAfterExpiry(uint256)", +"1f4a6d32": "removeEth()", +"1f4ab41e": "createUser(bytes32,bytes32,uint256)", +"1f4ae468": "returnETHforNormalBuyers()", +"1f4b8e41": "getLastUpdateId()", +"1f4ca28f": "isAdvisorsTokensSecondReleased()", +"1f4d7ec4": "newParameterizerWithToken(uint256,string,uint8,string,uint256[])", +"1f4dba8e": "OPTinToken()", +"1f4dde9f": "Jade()", +"1f4e01d9": "absoluteEndBlock()", +"1f4e1504": "upgradeContract()", +"1f4e996b": "challenge(bool)", +"1f4f77b2": "timestampFromDate(uint256,uint256,uint256)", +"1f4f9ab1": "supervisorVote(uint256,bool)", +"1f4fc29c": "refShare()", +"1f502a13": "volumeDiscounts(uint256,string)", +"1f513660": "ctoAddress()", +"1f522595": "donationsCount()", +"1f52692b": "vaultOwner()", +"1f52cc35": "removeTrustedContracts(address[])", +"1f532b39": "getRelation(address)", +"1f534715": "ComplexChildToken(address,string,string,uint256,uint8,bool,int256,bool)", +"1f535833": "referralCodeAt(address,uint256)", +"1f53ac02": "setDevWallet(address)", +"1f54d80d": "verifyCustomer(address,bytes32,bytes32,uint8,bool,uint256)", +"1f5623f3": "ZebiToken()", +"1f572504": "JackToken()", +"1f57256f": "transferEth(uint256)", +"1f583087": "ClickGemTokenERC20(uint256,string,string)", +"1f59653c": "setprices(uint256,uint256)", +"1f59d30e": "unlockEarnings(address,uint256)", +"1f5a0bbe": "addExecutor(address)", +"1f5a0dd2": "courts(uint256)", +"1f5a177f": "registerVestingScheduleWithPercentage(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"1f5a2a52": "getDamageValue(uint256)", +"1f5bb9f8": "Refund_TrustlessTransaction(uint256)", +"1f5bdf5d": "isRegisteredUser(address)", +"1f5c3a3c": "approveMultiple(address,uint256[])", +"1f5c6f67": "getOpeningTimeByStage(uint256)", +"1f5d0b4c": "address(address,address,uint256)", +"1f5dddab": "WithdrawContribution(uint256)", +"1f5dfcd5": "lastBlock_a7()", +"1f5e881f": "_buyTokens(address)", +"1f5e8f4c": "isRestricted()", +"1f5e9a2a": "CyberMilesToken()", +"1f5eeb13": "tokenSendFailuresCount()", +"1f6034fd": "getInt8FromByte(bytes14,uint256,bytes1)", +"1f60d9f7": "crowdfunding_allocation()", +"1f617a60": "setReceivable(address,bool)", +"1f6275bb": "issueTokenAndTransfer(uint256,uint256,address)", +"1f63a350": "settle(bytes32,bytes32,uint8,bytes32,bytes32)", +"1f64c1f2": "getInvestorInforValue(uint16)", +"1f66531d": "getEsgoTX(uint256)", +"1f67298d": "Daq()", +"1f677d8d": "ownershipLength()", +"1f68f20a": "baseRate()", +"1f69565f": "getTokenInfo(address)", +"1f69aa51": "left77(uint256)", +"1f69d230": "setMultiLedgerValue(string,address,address,uint256)", +"1f69f929": "teamVestingCounter()", +"1f6a1bf7": "lastDifficultyAdjustmentEthereumBlock()", +"1f6a1eb9": "execute(bytes,bytes)", +"1f6a3943": "icoBackend()", +"1f6b0a9d": "getReleaseLockfileURI(string,uint32,uint32,uint32,string,string)", +"1f6b28bf": "valueOf(string)", +"1f6b5b7d": "setRefundState()", +"1f6b9b97": "placeBet(uint8,int8,uint8,uint256)", +"1f6c0a9b": "ReleaseLockedBalance(address,uint256,uint256)", +"1f6c76f4": "reserveDeveloperTokens(address,uint256)", +"1f6ce1d3": "setDaySellAmount(uint256,uint256)", +"1f6d2086": "setCooldownIndex(uint256)", +"1f6d3d13": "AddrDevelopGroup()", +"1f6dc06c": "SetSaleStep(uint256)", +"1f6de588": "PiedPiperNetworkCoin()", +"1f6e5117": "getCallbackAddress()", +"1f6e6f3a": "DigitalThothToken()", +"1f6eb6e7": "escapeHatchCaller()", +"1f6ee77a": "setInitialData(address)", +"1f6eeb68": "canMintBurn()", +"1f6f3c0f": "getShipProductAmountByModel(uint16)", +"1f706c64": "EndTimeUpdated()", +"1f71f250": "updateTopicAddress(bytes15,address)", +"1f720e71": "testThrowTranferTooManyTokens()", +"1f7266e8": "owner_TransferFromTo(address,address,uint256)", +"1f7299c1": "processSell(address,uint256,uint256)", +"1f72d7d8": "increaseCap(int256)", +"1f7334e2": "TransferFlower(address,address,uint256)", +"1f74de51": "getAuditOutcome(address,bytes32)", +"1f772a34": "token_symbol()", +"1f77aac0": "queryUserContract(address,uint256)", +"1f790a94": "BananaGame()", +"1f794436": "getBlockHeader(int256)", +"1f7a41f1": "rawNameOf(address,address)", +"1f7a72f7": "bobClaimsDeposit(bytes32,uint256,bytes32,address,address)", +"1f7ab15d": "setdecimals(uint256)", +"1f7af1df": "canReceiveMintWhiteList()", +"1f7b4f30": "roll(uint256)", +"1f7b5318": "getBlocklancerToken()", +"1f7b6d32": "length()", +"1f7b8622": "getVotingDeadline()", +"1f7bf1eb": "_mintShares(address,uint64)", +"1f7c4bf3": "AccessControl()", +"1f7ccc09": "initAssetFile(string,string,string,string,string,string)", +"1f7cdd9b": "unicornsGifted()", +"1f7d16f7": "managementWalletAddress()", +"1f7df96f": "registLogo(address,address,string)", +"1f7e3e72": "test_oneValidEqStringUint()", +"1f7e495b": "systemSupply()", +"1f7f3082": "addForwarder(address,address)", +"1f7fe78b": "balanceAtSnapshot()", +"1f800e8e": "releaseVested()", +"1f803ac3": "getUnlockedTokens(address)", +"1f807736": "withdrawFreeAuctionBalances()", +"1f81582c": "returns()", +"1f816c6d": "hodlerReward()", +"1f820f52": "migrateEuroTokenOwner(address,uint256)", +"1f83bcd7": "withdrawlDeadline()", +"1f83d11a": "addMilestonesAndSeal(uint256[],uint256[],uint256[],uint256[])", +"1f83d75e": "updateProfileDetails(string)", +"1f83f440": "getPaymentByAddress(address)", +"1f86ab51": "confirmCollection()", +"1f86ffda": "UpdateBid(address,uint256,uint256)", +"1f8712af": "isValidPurchase(address)", +"1f871726": "getCategoryWorkClockTimeRef(uint256)", +"1f879433": "setSolver(address)", +"1f8814ad": "ElyERC20(uint256,string,uint8,string,bool,bool)", +"1f8864ac": "setStorageOwner(address)", +"1f887d56": "CryptoSagaDungeonVer1(address,address,address,address,address,uint32,uint256,uint256,uint32,uint256,uint32,uint32,uint32[4],bool)", +"1f8947c1": "extractUint(int256,bytes,uint256,uint256)", +"1f89e911": "getCompositionPrice(uint256)", +"1f8ac604": "mul0()", +"1f8ae3f0": "proofFailed(bool)", +"1f8c07b0": "startPhase(uint256,uint256,uint256)", +"1f8d1d50": "setTotal(uint256)", +"1f8d99a9": "assetIsRegistered(address)", +"1f8df2cd": "setGeneScientist(address,bool)", +"1f8e6fb3": "transferSale(address,uint256,uint256,uint256)", +"1f8e728c": "addMilestone(uint8,uint256[],uint8[])", +"1f8e9143": "AcceptsKDI(address)", +"1f8ea5e8": "EternalChainToken()", +"1f8eac47": "spentByTeam()", +"1f8f1d21": "addMember(uint256,address,bytes32)", +"1f8f69e3": "fechAllVoteResultForCurrent()", +"1f8f8100": "Tspace()", +"1f8fcc45": "Vantador(address)", +"1f903037": "getBytes32()", +"1f903b5d": "preSaleSpenderTxDetails(uint256)", +"1f90b2a5": "snapshotBlock()", +"1f90ffc8": "AddSupply(uint256)", +"1f91666d": "newOrganisation(string,string,string,uint8,bool)", +"1f91e309": "getBuyBackPrice(uint256)", +"1f922d06": "duplicate()", +"1f92f6b7": "setBtcUsdRate(uint256)", +"1f934299": "calcConfirmsNeeded(uint256,uint256)", +"1f960571": "picops_balances(address)", +"1f963f80": "getReportingWindowId(uint256)", +"1f96938d": "deliverSale(address,uint256)", +"1f96add4": "ChronoMint(address,address,address)", +"1f974fe4": "NExT()", +"1f979e23": "GetRigData(uint8)", +"1f97a238": "rejectCertificate(uint256)", +"1f97c00e": "tokenCreationMax()", +"1f97ea5d": "EDU_PER_ETH_PRE_SALE()", +"1f97f2ef": "issuedTokensForCommand()", +"1f98394d": "basicReward()", +"1f994137": "booleanStorage(bytes32)", +"1f995ef1": "HDCTestToken()", +"1f9988c9": "transferTokens(bytes32,address,uint256)", +"1f99c458": "listNamesLen()", +"1f99d862": "test_method_increaseTimeBy30000()", +"1f9a08ca": "reelIn(uint16,uint16,bytes32,bytes32)", +"1f9a391c": "setCanCreateGrants(address,bool)", +"1f9ab193": "place(uint8)", +"1f9b1153": "initiateMigration(uint256)", +"1f9c381e": "setTokenMinAmountBuy(address,uint256)", +"1f9c5580": "AMIS(address)", +"1f9c564f": "rubusOrangeAddress()", +"1f9c649f": "HashInvalidated(bytes32,string,uint256,uint256)", +"1f9d7ab8": "addTokens(uint256,string)", +"1f9ea25d": "_setDepositAccount(address)", +"1f9eba17": "bitcoinInvest(address,uint256,uint256)", +"1f9ecab1": "TowerImagesCoin()", +"1f9ef7fa": "getPayoutNumerator(uint8)", +"1f9f168e": "startNewRound(address)", +"1f9fed62": "checkMySellerOffer(address)", +"1fa03a2b": "isApprovedFor(address,address)", +"1fa08755": "upgradeDexterity(uint256)", +"1fa08ad8": "EtchReward(uint256)", +"1fa0914e": "buyStamps()", +"1fa096e6": "isInversor(address)", +"1fa0dc70": "saveReturnSatoshi(address,uint256)", +"1fa13a61": "longTermTokens()", +"1fa224bf": "setOraclizeAddr(address)", +"1fa24aa7": "makePermanantlyTradable(uint8)", +"1fa30523": "doMint(address,uint256)", +"1fa3c372": "redeemTokens(bytes32)", +"1fa3cfaa": "bmc(uint256,uint256,address)", +"1fa4070c": "TestCoinVN()", +"1fa422a2": "earliestNextSettlementTimestamp()", +"1fa45291": "arrayOfClones(address)", +"1fa498ce": "messagetodovie()", +"1fa4c486": "PublicResolver()", +"1fa4d9de": "completedAddingParsels()", +"1fa4ea66": "reservationAddress()", +"1fa59521": "FTBCToken()", +"1fa5e43b": "freezedBalanceOf(address)", +"1fa62fb7": "setCountrySlogan(uint256,string)", +"1fa6f19b": "getAddressForQuery(bytes32)", +"1fa96b96": "currentProposalResults(uint256)", +"1fa98406": "fundType()", +"1fa9d21f": "DASABI_IO_Contract()", +"1faae8b3": "getTypeValue(uint256)", +"1fab0265": "messiDev()", +"1fab3fd4": "setFinishedTx(address)", +"1fabb318": "MAX_ALLOWED_BY_STAGE_1()", +"1fabe6cf": "getActualCompletionDate(bytes16,address,address,uint256,uint256)", +"1fad4d46": "getShipOwner(uint32)", +"1fad4e79": "sevenWinnerWithdraw()", +"1fae75eb": "Xandra()", +"1fae9361": "changeTimes(uint8,uint8)", +"1faec182": "getBet(uint8,uint256)", +"1faf1ed4": "unlockTip()", +"1faf8995": "fillOrder(address,bytes32,uint256,bytes32)", +"1fafc2c8": "updateBusinessReserveAddress(address)", +"1fb00cdc": "investWithId(uint128)", +"1fb150c4": "_batch1_icosaleEndTimestamp()", +"1fb156ef": "ecmul(uint256[3],uint256)", +"1fb168ac": "setStopStatus(bool)", +"1fb1f18b": "getWinnings(address,uint256)", +"1fb25f07": "getCertification(bytes32)", +"1fb291cb": "registerInt(address,int256)", +"1fb2de2c": "sendTokensToTwo(address,address,uint256)", +"1fb2f2a0": "testUpdateLatestRevision()", +"1fb384cb": "RemoveRocketForSaleEvent(address,uint32)", +"1fb47fe8": "CulturePhilosophyFaithChain()", +"1fb4bcf8": "SetSaltPassword(bytes32,bytes32)", +"1fb4d1e7": "TheMutualCurrency()", +"1fb59f9d": "swapProxyTokens()", +"1fb6e99d": "paymentNeeded(uint64)", +"1fb82d26": "storeProof(string)", +"1fb8875d": "referralSent()", +"1fb8c0ed": "releaseEQUIWihtoutKYC()", +"1fb8d5de": "vaultUnlocked()", +"1fb97c34": "updateFirstAmount(bytes32,bytes32,uint256)", +"1fbab493": "checkPrice(address,address,bool,uint256,uint256)", +"1fbb408a": "RacingToken()", +"1fbb4def": "CalculateDividents(uint256)", +"1fbbf4bb": "setKillingGap(uint256)", +"1fbcf2c1": "_lotterySupply()", +"1fbd3564": "getContentsManager()", +"1fbd7771": "didSoftCapReached()", +"1fbd9a0b": "REFUNDSACTIVE()", +"1fbda78f": "LibraryToken()", +"1fbe1979": "rescue()", +"1fbe480e": "shipToMe(string,uint256)", +"1fbe7475": "findEndpointByAddress(address,address)", +"1fbeaa83": "PublicBatchTransfer(address,uint256)", +"1fbee22c": "updateSearchingFee(uint256)", +"1fbee6ed": "CNYTokenPlus(uint256,string,uint8,string)", +"1fbf7c3e": "increaseReserve(uint256)", +"1fbfe6f3": "auditReport(address,bool,bytes32,bytes32)", +"1fc03aa0": "getTypeByNumber(uint256)", +"1fc05f86": "minimalWei()", +"1fc06f0d": "niceGuys(uint256)", +"1fc083cf": "OurBit()", +"1fc0e5e9": "StartPaymens()", +"1fc1e25f": "listToken(address)", +"1fc242b9": "onVote(address,int256)", +"1fc24caa": "changeMaxTransactions(uint256)", +"1fc27ef2": "isIcoActive()", +"1fc2e0fb": "MinedThisYear()", +"1fc3a519": "computeReturn(uint256)", +"1fc5b4ee": "balancesByIndex(uint256,address)", +"1fc5c9b7": "setNextPeriod(uint256,uint256)", +"1fc62fce": "Trillionereum(address,address)", +"1fc6e13a": "getRoundKeyPrice(uint256)", +"1fc75e41": "preSaleWallet()", +"1fc7d658": "purchase(address[16],uint256)", +"1fc82e83": "allocateUnclaimedFees()", +"1fc86532": "endBlockBonus2()", +"1fc87587": "get_CountProfitsToken()", +"1fc928ae": "taxToken()", +"1fc97e34": "Genius()", +"1fc983fb": "ChelseavsArsenal()", +"1fca5278": "highScore()", +"1fca5fda": "IsRazRunning(uint256)", +"1fcafd8f": "FomoMasterCoin()", +"1fcb292d": "getTokenFunction(uint8)", +"1fcbbefa": "sendBooty(address,uint256)", +"1fcc02e8": "EthereumTestToken()", +"1fcc2515": "ChangeCrowner(address)", +"1fccc158": "tCampaignEnd()", +"1fcd08f0": "AaadharDemo()", +"1fcd7ea6": "getPOOL_edit_33()", +"1fcdfe14": "icoTokenAmount()", +"1fcf25be": "getTransactionSuccess(bytes32,uint256)", +"1fcf55ff": "withdrawApplication()", +"1fd01085": "_sellPresale(uint256)", +"1fd01de1": "_checkOnERC721Received(address,address,uint256,bytes)", +"1fd023ab": "FFCryptoCoinToken()", +"1fd22140": "CountCourses()", +"1fd2676f": "jackPotPercents()", +"1fd2e006": "changeClassFee(uint256,uint256)", +"1fd3dd97": "OneEtherEqualsInWei()", +"1fd41949": "setMaxInvestedLimit(uint256)", +"1fd476bd": "AutonomousSoftwareOrg(bytes32,uint8,uint8,bytes32)", +"1fd4b40c": "saleEtherCap()", +"1fd55a8a": "crowdsaleOpened()", +"1fd7b802": "ModifyMine(uint256,bool,string,uint256)", +"1fd7f431": "setCCH_edit_7(string)", +"1fd8088d": "minLimit()", +"1fd8291a": "endpresale()", +"1fd86a6a": "FundICO(uint256)", +"1fd96b69": "ManagedAccount(address,bool)", +"1fd97c12": "CNotesICO()", +"1fd982a5": "releaseForEarlyInvestor(address,uint256)", +"1fd9b2a4": "createValidatedRequest(address[3],address,uint256[12],uint256,bytes)", +"1fd9f187": "catNoLongerForSale(uint256)", +"1fda4271": "MindToken()", +"1fda5b45": "receivePlayerInfo(uint256,address,bytes32)", +"1fda8278": "drawCoach(uint256,address,address)", +"1fdaedf2": "BoomstarterPresale(address[],address,address,bool)", +"1fdaf3f2": "ServiceAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"1fdb5a2b": "addInvestmentPreIco(address,uint256)", +"1fdba848": "BiekensToken()", +"1fdcf5a7": "lockEthBalance(address,uint256)", +"1fdd7695": "getbuyprice(uint256)", +"1fddbba4": "totalVUP()", +"1fde4607": "setCreditDaoFund(address)", +"1fde8469": "setExchangeRate(uint32)", +"1fdf071c": "approveMintAgent(address,bool)", +"1fdf6e0c": "protectKingdom()", +"1fdfa40d": "test_setupBoardRoomAndAssert()", +"1fdfec35": "calculateTotalDue(uint256,uint256)", +"1fe00a15": "individualMaxCapTokens()", +"1fe07274": "SDEToken(uint256,string,string)", +"1fe08e28": "how_many_arbits_do_i_have()", +"1fe0ff58": "finishRound(uint256)", +"1fe1516d": "sendToTeamEthContract()", +"1fe15db5": "MarketboardListingComplete(address,uint256,uint256,uint256)", +"1fe1b208": "totalavl()", +"1fe26e9d": "componentCount()", +"1fe2a6f2": "updateJugada(uint256,bool)", +"1fe2c933": "UpgradeByCredits(uint256,uint256)", +"1fe2d046": "assignRafflePrize(address)", +"1fe2e229": "getTotalTrust(address)", +"1fe3aec7": "CGCGToken()", +"1fe4ee7f": "getVoteItemDetails(uint256)", +"1fe51f82": "persistLimit()", +"1fe55867": "rew()", +"1fe6189e": "PARTNERS_ADDRESS()", +"1fe64f19": "MaximumHodlDurationChanged(uint256,uint256)", +"1fe74895": "Etherchicks()", +"1fe7b624": "resumeMint()", +"1fe7ff2c": "SpriteToken()", +"1fe8149e": "createTokenByHWC(address,uint256)", +"1fe8500e": "setItemRegistry(address)", +"1fe8629a": "giveMultipleItemsAndDestroyMultipleItems(address,uint256[],uint256[])", +"1fe93774": "totaleFrasi()", +"1fe97e45": "whoIsConcerned(address)", +"1fe9eabc": "setMax(uint256)", +"1fea96cd": "removeUserFromBlackList(address[])", +"1feac75b": "setCommissions(uint256,uint256)", +"1feaee17": "getSetupParametersByIndex(uint256)", +"1feb0c4f": "PreICOProxyBuyer(address,uint256,uint256)", +"1feb19d6": "initialize(uint256[],uint256[],uint256,address,uint256,address,address)", +"1feb3569": "transferToken_toBalance(address,uint256)", +"1fec0e96": "LogCampaignAdded(uint256,address,uint32,uint96,uint16,uint16,uint256)", +"1fec5a11": "Coin77()", +"1fec6dce": "createVestingPeriod(address,uint256,uint256,uint256,address,address)", +"1fedbc03": "getSharesPercentForPeriod(bytes32,uint256)", +"1fedd70b": "snipCoinToEtherExchangeRate()", +"1fee37c8": "ADDR_TKG_NODE()", +"1fee5c51": "set_min_max_FinneyPerSale(uint256,uint256)", +"1feef08e": "getTotal(uint256)", +"1ff13086": "size(int256)", +"1ff14311": "totalOutcomeAmounts(int256)", +"1ff1a378": "maxSalesAllowed()", +"1ff2c22b": "setCharityFund(address)", +"1ff2e214": "proposeAmendmentJUR(address,uint256[],uint256[],bytes32)", +"1ff42195": "minimum_cash_proof_amount()", +"1ff517ff": "totalDebt(address)", +"1ff5668c": "depositForDividends()", +"1ff5e17c": "_itemLength(uint256)", +"1ff6536c": "setCrowdSaleStart(uint256)", +"1ff6a54b": "cancelFavor()", +"1ff6ad55": "tokensForPeriod(uint256)", +"1ff6c241": "collectedUSD()", +"1ff75851": "updateICODate(uint256,uint256)", +"1ff76f86": "ROBReserveAllocation()", +"1ff7a278": "ownerNegTokens()", +"1ff858d0": "activateNextStage()", +"1ff8ac8a": "getFinalval()", +"1ff8d507": "toggleSwap()", +"1ff96c74": "getHonour(uint256)", +"1ffa27f9": "hasPermissions(address)", +"1ffa451c": "serviceTransfer(address,address,uint256)", +"1ffb6ca6": "unlockTransfer(address,uint256)", +"1ffbb064": "isAgent(address)", +"1ffbf32b": "MUSPRA()", +"1ffc973a": "HedgeCash()", +"1ffcb18c": "numQuestions()", +"1ffd3aef": "log10Floor(int256)", +"1ffd42ab": "getVotingScriptAction(uint256,uint256)", +"1ffd99f4": "saler()", +"1ffe3c9b": "UECToken(address,uint256)", +"1ffe4cca": "startline()", +"1fff2d8a": "payToPresale(address)", +"1fff5c2f": "bindEthereumAddress(address,bytes32)", +"1fff7a97": "CompositionPart(uint256,address)", +"1fffbe7a": "getJobSponsorships(uint256)", +"200138b9": "CrowdTmoney()", +"20020a3a": "createAsset(bytes,uint256,bytes,bytes,address)", +"20027275": "saleStartBlock()", +"2002c2f6": "slogans(uint64)", +"200308ee": "rewardVoteResultForCandidate(address,uint256)", +"20033848": "MagixRecordsCoin()", +"20035e36": "icoEth()", +"200373c9": "fees_()", +"2004b6a6": "TheWhaleWins()", +"2004dff6": "Basics()", +"2004ffd9": "mintToken()", +"200538c6": "DTE()", +"200576b5": "TchainToken()", +"2005db6d": "preIco(uint256,uint256,uint256,uint256[],uint256[])", +"2007474e": "theRelayer(address)", +"20076659": "Arbitrator()", +"2008c2ca": "destPercent(address)", +"2009a059": "setLandProductionMultiplier(address)", +"200a252a": "PhanToken()", +"200aa519": "addCustomerwithToken(address,uint256,address)", +"200aac9f": "burnAZLTEST(uint256)", +"200b0fa6": "initVote(uint8)", +"200b894d": "assertEq(int256,int256,bytes32)", +"200b8951": "_distribute(address,uint256,uint256,uint256)", +"200c1f19": "premiumPacks()", +"200c7295": "whitelistAddress(address,uint256)", +"200c7770": "bountyDuration()", +"200cdf8e": "becomePickleRick()", +"200d10dc": "OrpheusOrganicsLaos()", +"200d2ed2": "status()", +"200deb8b": "MessageSent(string,string,string,uint256)", +"200ebe34": "addTokensToGive(address)", +"200ef97e": "payNTS()", +"200f29e3": "advisorAccount()", +"200fbcf0": "getFullyVestedAmount(address,address)", +"201035ed": "getGunsIds()", +"20104dca": "engCommunityAddress()", +"2010bdce": "removeSupervisor(address,address)", +"20120dce": "ADMIN_SET_TEST_RANDOM(string)", +"20130753": "testThrowSetNotRetractableNotOwner()", +"20145328": "changeMelonportAddress(address)", +"2014c515": "tgrNextPartInvestor()", +"2014d703": "approveAllArgs(address,uint256,address)", +"2014e1fb": "W0keAFCrowdsale(uint256,uint256,address,address,address[])", +"2014e5d1": "isRunning()", +"20150e21": "sendDividends(uint256)", +"20153d38": "EarlyAdoptersAmount()", +"20154e78": "unpausePVP()", +"20158c44": "fills(bytes32)", +"201745d5": "disown(bytes32,address)", +"2017af61": "initialTokensHolder()", +"2017ee03": "nextDealIndex()", +"20183926": "EngagementToken()", +"20185aa2": "liquidityWithdraw(uint256)", +"20188d4f": "getAdjustedContribution(address)", +"20190ccd": "startCirculation()", +"201bafee": "TroneriumSupply()", +"201dcd7a": "newChallenge(uint256,uint256)", +"201de654": "mnemonicsCount()", +"201e8f0e": "changeWhitelistCornerstoneStatuses(address[],bool)", +"201e908e": "blockDuration()", +"201f1506": "EthereumEra()", +"201f6e02": "oldAppreciationRateWei()", +"201f96e5": "setRepMarketCapInAttoeth(uint256)", +"20202965": "expired(bytes12)", +"20204fb7": "genericCall(address,bytes,address)", +"2020e9ea": "bid(uint16,uint16)", +"2021dfcb": "BONUS_DURATION_3()", +"20226e17": "valueOnContract()", +"2022936f": "BalanceClaim(address)", +"202329cb": "get_all_activityn(uint256)", +"2024617e": "initialize(string,string,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"20250264": "setData_5(uint256)", +"2025867b": "qualifiesAsCommunityBallot(uint16)", +"2025e52c": "createSaleTokensVault()", +"20260697": "createWallet(uint256,address[],bytes32)", +"20263e87": "incentiveTokenAddress()", +"2026a0a7": "change_sale_address(address,string)", +"20277ed7": "GWGFPLUS(uint256,string,string)", +"2027d2c6": "ETHLottery(address,uint256,uint256,uint256,address)", +"2027d746": "getCustomerCount()", +"2027e1d3": "COCO()", +"20281990": "ProposalAddedEvent(uint256,address,uint256,string)", +"20283da9": "trustedWithdrawETH(address,uint256)", +"202920ef": "FST()", +"2029e599": "addCode(string,string)", +"202a46cf": "limitEther()", +"202a6ce0": "NFXCoin()", +"202ac3bc": "withdraw(bytes,bytes,bytes32)", +"202b876a": "allocateToMarketingSupporter(address,uint256)", +"202bb36d": "JTBlockchain()", +"202bc7e7": "getIntervalCoefficientMultiplier(uint256,uint256,uint256,uint256)", +"202c413d": "setNickname(uint256,bytes32)", +"202ca027": "setPayrollAddress(address)", +"202d5123": "STRTToEth()", +"202d6eaf": "addInvestorsValue(uint256)", +"202e3924": "getOperation(uint256)", +"202ece74": "sendToWinner(uint16)", +"202feb77": "test_2_assertGasUsage100Boards()", +"2030762a": "PoolICO()", +"2030f721": "num_objects()", +"20323763": "addPerformance(string,uint32,uint8,uint8,uint8,uint16,bool)", +"2032677f": "roundOpen()", +"20334668": "verify(uint256,uint256,uint256[],uint256,uint256,uint256[],uint256[])", +"20339891": "addGridMember(address)", +"2033d9ae": "switchToDistributionMode(uint256)", +"2033de43": "setNewRatesCustom(uint256,uint256,uint256,uint256,uint256,uint256)", +"20352a6e": "ChildDeposit()", +"2035d6b4": "addAccountData(string,bytes)", +"20364306": "setMaxLinkedWalletCount(uint8)", +"2036e2f7": "getCurrentExchangeRate(uint256)", +"20375692": "initVesting()", +"2037fcbf": "withdrawInvestment(uint256)", +"2038d1e5": "setTokenMintFeeAbs(address,address,uint256)", +"2038e2e6": "timestampLast()", +"2038e80a": "mixFormula()", +"20392160": "round1Sold()", +"20396553": "safeMul(int256,int256)", +"203967a5": "toDie(bytes32)", +"203985d6": "getWeeklyTickets(address)", +"20398971": "abiOf(uint256)", +"20398b83": "sendPrepaidEthTweet(uint256,string,uint256)", +"2039b386": "isHashSigned(uint256)", +"2039d9fd": "depositERC20Token(address,uint256)", +"203a318f": "ico_startdate()", +"203a79f6": "cutoffTimestamp()", +"203ab888": "collectOriginalBet()", +"203b2352": "_checkOpenings(uint256)", +"203c03fa": "Coinflip()", +"203cbee2": "ownerPetTransfer(address,uint64)", +"203d39ff": "getOrderBook(address,address)", +"203dacb9": "PrivatePreSale()", +"203e0dc9": "SupbToken()", +"203e3204": "goldIfFreeze(address)", +"203faa89": "lastState(address)", +"203fb521": "addTransaction(address,uint256,bytes,uint256)", +"203fec23": "LogTransfer(address,address,uint256,string)", +"204009d2": "transferForMultiAddresses(address[],uint256[])", +"20409b47": "updateContent(string,uint256)", +"2041518d": "calculatePrice(uint256[],address)", +"2041b997": "tokenizeProperty(string,address)", +"20422fd9": "setAutoInvestByAdmin(address,bool)", +"204241cb": "leaveTeam(uint256)", +"2042495b": "changeUsed(address,int256)", +"2042e5c2": "removeWhiteList(address)", +"2043285d": "getMarketMakers()", +"2044b21b": "exceedsSaleCap(uint256)", +"204525e6": "mul256()", +"204605ad": "ngrzicoToken()", +"2047e4af": "updateTokensState(uint256,uint256)", +"2048cba4": "inGroup(address)", +"2048e5f7": "PaytherToken()", +"20495427": "setBreedingAuctionAddress(address,address)", +"204a88c5": "hasAgreement(bytes32)", +"204b21d1": "AVAILABLE_BONUS3_SUPPLY()", +"204b676a": "numVestingEntries(address)", +"204d3d65": "getCountPlayersOfTeam(uint256)", +"204e6749": "rewardToken(address,uint256,uint256)", +"2050c26e": "preSaleFourthCap()", +"205140c7": "totalClaimableTokens()", +"20514abf": "tktotal()", +"20522347": "changeEndDate(uint256,uint256)", +"20523d0d": "closeAgreementWithTimeout(bytes,uint8[2],bytes32[2],bytes32[2])", +"2052de16": "checkContinuousPurchase(uint256)", +"2053480e": "ActionMiningPlat(address,uint16,address)", +"205360e0": "setReward(uint64,uint256)", +"2053e690": "turnOffOraclize()", +"20544010": "getWinningsForRecordId(uint256,bool,bool)", +"20547a42": "increaseDailyTransactionVolumeReceiving(uint256)", +"2054b2c6": "assert(address,address)", +"205525d2": "set_comp(uint256,string)", +"2055c2ff": "SerchUserPurchase(address,address)", +"20566ae8": "initMonsterClassSiteSet()", +"2056ab36": "NewNodePriceTicker(string)", +"20572943": "SignedMessageOracle(bytes32,uint8,bytes32,bytes32)", +"205730fd": "SELL()", +"2057420b": "withdrawVault(uint256,address)", +"2058308d": "_addPropertyValue(bytes32,address)", +"20592076": "HeyToken()", +"2059c548": "exerciseOptionsDeadline()", +"205b1946": "hasContributed(address)", +"205b931e": "addOracles(address[])", +"205ba186": "DSJL()", +"205c2878": "withdrawTo(address,uint256)", +"205c7cf5": "issueCenturion(address)", +"205c9cc7": "w()", +"205d0063": "feeTakeExporter()", +"205d6c86": "purchaseEgg(uint64,uint16)", +"205dc0ee": "poolAddressCapTier1()", +"205e0e26": "advisersCliff()", +"205e921c": "delegatedRefund(address,address)", +"205f3b58": "calculateOwnerCut(uint256)", +"2060a150": "props()", +"20610779": "deathData_a2()", +"20614514": "HHDToken()", +"20620f37": "onAuctionEnd(string)", +"206288d3": "deployBlockNumber()", +"2062e457": "setDirectPaymentThreshold(uint256)", +"2063165d": "union(uint256[],uint256[])", +"206369fa": "AthleteToken()", +"206465f7": "_getPendingOwner()", +"20647eb7": "externalFailure()", +"20651d5d": "batchTransferToken(address,address[],uint256[])", +"20654277": "ArtsCoinV1()", +"206545c2": "DIAMOND()", +"206607f2": "updateCanFetch(bool)", +"20675504": "hyperInterface()", +"2067c85c": "transferTokensFromMarketingAddress(address,uint256)", +"20688582": "saleIsRunning()", +"20689f29": "preSalePeriod()", +"2069381a": "multiPresaleMint(address[],uint256[])", +"20694db0": "addIssuer(address)", +"2069de94": "TonalQuantum()", +"2069f66c": "isPresalesNotEndedInAdvance()", +"2069fc46": "excludeAmbassadors(uint256,address)", +"206a44f3": "getNum(bytes,uint256)", +"206b64b4": "generateName(bytes16,uint256,uint256)", +"206cfd24": "cleanFinishedOperations(uint256)", +"206d0125": "getWithdrawnFromBatch(address,uint8)", +"206d1fde": "setMegaAddress(address)", +"206d468f": "PriceOracleInterface(address,address)", +"206ec7a1": "multisend(address,bytes32,address[],uint256[])", +"20701967": "confirmPlatformWithdrawal()", +"2070748c": "XeroBest()", +"20709b35": "jackpotPaused()", +"2070b6de": "donationPhase()", +"20714f88": "setSelfDestructBeneficiary(address)", +"2072343e": "MeowToken()", +"2072863b": "setCMO(address)", +"20729b83": "DistributeButtonIncome()", +"2072cde2": "NewsCash()", +"207368fc": "startSelling(uint256,uint256)", +"20745669": "ClaimedSignature(address,string)", +"2074cc86": "MikCoinToken()", +"2075281c": "Marko()", +"2075eec6": "tokenQuantities()", +"20768ee8": "getProposalID()", +"20770caf": "GRUCoin()", +"2079405b": "AmountToDistribute()", +"20799608": "convertDecimal(uint256)", +"2079fb9a": "signers(uint256)", +"207a6c33": "calculateCurrentVirus(address)", +"207a6d80": "TukBuk()", +"207aba24": "Migrate()", +"207acb53": "_calculateRequiredTokenBalance(uint256,uint256)", +"207b89e2": "purchaseLand()", +"207bd99d": "ableTransfer()", +"207beb59": "getRateIcoWithBonus()", +"207c64fb": "validate(address)", +"207cb710": "grantInvestorTokens(address)", +"207e6467": "pieBalances(address)", +"207f4f38": "contTransfer(address,uint256)", +"2080d8dc": "EVTCTLToken(address,uint256)", +"20813154": "deregister(bytes32)", +"2081e911": "Set()", +"208318bd": "Total_Amount()", +"20832219": "setOps(address,bool)", +"2083250d": "Atriark(uint256,string,uint8,string)", +"20834ed0": "AddPlayers(address,address)", +"20835e8c": "getBet()", +"2083c730": "_hatchEggs(address)", +"2083cbd8": "execAirDrop(address,address[],uint256[])", +"2083f44f": "lastFell()", +"20857295": "setErc20TokensContract(address)", +"2085f554": "approveAndCall(address,uint8)", +"20867ccd": "addEmployee(uint256,string,string,string,string,string,string,address)", +"2086ad60": "MiewGold()", +"20871322": "ForecastingFactory(address)", +"208838c8": "tokenPerWai()", +"20885d9e": "PGE02CH()", +"208904c7": "startFrom()", +"208972b4": "PartialPayment(uint256,address,address,uint256)", +"2089d0c9": "Swachhcoin(address)", +"208a099c": "createKitty(uint256,uint256,uint256,uint256,address)", +"208a9e37": "tweakRefundStatus()", +"208af09f": "setIsForking(bool)", +"208b080f": "changeExpiryLimit(uint256)", +"208b3116": "next(uint256,uint256)", +"208b7427": "AgriChainContext()", +"208c1019": "BLOCK_BASIC_PRICE()", +"208c8692": "mint(bytes,uint256,bytes,bytes)", +"208ca719": "SellIPG(uint256)", +"208df65f": "getValueByNumber(uint256)", +"208e1cc3": "writeConditions(uint256,string)", +"208e8914": "atFundDeposit()", +"208eba04": "_withdraw(address,uint256,address)", +"208ebf16": "lpBidVolume()", +"20907d9a": "BlockClout()", +"20909455": "triggerAirDrop(address[],uint256)", +"20909fa0": "communityCurrency()", +"2090b0a8": "m_allowPrivileged()", +"2090cf8b": "consultBalance(address)", +"2090d5e9": "lookupByProject(uint256)", +"2090d8a6": "trackOdd(uint256)", +"2090f3e3": "lethalBonusAtHitsLead()", +"209164d5": "_processPurchase(address,uint256,uint256)", +"20917902": "globalether()", +"2091f2d9": "ICOoverTimeStamp()", +"2092970f": "StartDistrib()", +"20940b13": "btcTransactionClaimed(uint256)", +"2094e9d8": "newJob(bytes32,bytes32)", +"20956341": "slice2(bytes,uint256)", +"2095f2d4": "endCrowdsale()", +"20965255": "getValue()", +"20968dc7": "rewardHistoryLengthOf(address)", +"2096b768": "getCoreAddress()", +"2096c958": "GEXAirDrop(address)", +"2096f2ff": "issueTokensMultiple(uint256[],uint256[])", +"2097dd04": "getLatestAuthorizedAddresses(uint256)", +"2097e5f0": "VaultbankToken()", +"209878b9": "lockReleaseTime()", +"20987e64": "addInvestment(address,uint256)", +"2098e37a": "LogBoonReleased(address,uint256,uint256,uint256)", +"2099940e": "freezOne()", +"209a5b8a": "moneySumAtSettlement(address,uint256,int256,uint256)", +"209ab711": "registerReferral(address)", +"209b7067": "CALLGToken(uint256,string,string)", +"209b80ce": "previousstageloser()", +"209bb163": "Ethex(address,address,uint256,uint256)", +"209cccd7": "channelCloseTimestamp(uint64)", +"209ebc08": "isPaid()", +"209f36d0": "registerApiKey(address,address,bytes32)", +"209f3c9c": "MINIMAL_PARTICIPATION()", +"20a0045a": "SALE_END_TIME()", +"20a0128e": "ICOEndDate()", +"20a09dec": "COMM_SUPPLY()", +"20a168b1": "coinsPerEth()", +"20a17b24": "dexWallet()", +"20a2b135": "forkThis()", +"20a3952b": "MyTestGameToken()", +"20a4e8f8": "_clearSnapshotDelegators(uint256,address)", +"20a60ace": "TokenBurner()", +"20a733df": "countPerformers()", +"20a7b2d7": "_setMintFeeProp(uint256)", +"20a7d5c3": "lend(uint256,bytes,address,bytes)", +"20a99bd0": "templates(address)", +"20aac36f": "getstopBlockNumber()", +"20aba08b": "rho()", +"20abf417": "stageFourCap()", +"20acbc83": "withdrawTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"20ad3874": "vestingBonusMultiplierPrecision()", +"20ad8a81": "setTeamTokensPercent(uint256)", +"20ae2059": "setMaximumBet(uint256)", +"20af0841": "_payPayee(bytes32,address,uint256)", +"20af2042": "setCountPerStep(uint256)", +"20b023c8": "disavow()", +"20b0554e": "payoutBalance()", +"20b0747f": "start1stRound()", +"20b0961c": "pE(uint256,uint256,uint256,uint256)", +"20b0eafb": "PoWH4D()", +"20b0fe2c": "setGlobalParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint32)", +"20b1b0ab": "getStuckCoin(address,uint256)", +"20b1d054": "TAAS_VAULT()", +"20b27291": "setFinalized(bool)", +"20b28ade": "getIPFSHash()", +"20b2af52": "Author()", +"20b2d97b": "LiquidDemocracyRules(address,address[],uint256)", +"20b3c9c9": "InfinixSupply()", +"20b43094": "mulUInt(uint256,uint256)", +"20b431aa": "dividendDivisor()", +"20b44b29": "lockTransfer(bool)", +"20b4577e": "numBonuses()", +"20b4fc29": "setBbAddress(string)", +"20b519bb": "setBarrierAsOpen(bool)", +"20b652ba": "chainedFunctions()", +"20b748f4": "REGULAR_TYPE3()", +"20b7ceb8": "R2Xtoken()", +"20ba5b60": "insert(bytes,bytes)", +"20bacfbd": "addDoc(string)", +"20bb0ef6": "originalHash(uint256)", +"20bb280b": "buy5(address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes)", +"20bb2adf": "setAllowedTransferFrom(address,bool)", +"20bc4425": "getHost()", +"20bcbee5": "EarlyTokenSale(address,address)", +"20bd0475": "resetLotteryBalance()", +"20bd46b7": "drawTertiaryAWinners(uint256)", +"20bf0c52": "Derived(uint256)", +"20bf2f47": "_setAddresses(address,address,address)", +"20bf92ca": "oldSeeleToken()", +"20bfa95c": "bookAndCalcRemainingPremium()", +"20bfde8b": "s24(bytes1)", +"20bfec70": "WatchFees()", +"20c0b493": "getWarriorChestPrice()", +"20c12f16": "penalizeInactiveJuries(address[],uint256[])", +"20c21ba5": "_setTypeValue3(uint256)", +"20c257f5": "_adjustReserve(uint256)", +"20c28b85": "schelling(address)", +"20c2d5e4": "withdrawAffiliatePot(address)", +"20c2f40b": "doCalculate(uint256,bytes32)", +"20c381af": "cityPoolTotal()", +"20c3be47": "_createZombie(string,uint256)", +"20c427b0": "sumBalance()", +"20c5429b": "revoke(uint256)", +"20c5478f": "RtBCoin()", +"20c55a8a": "AirDropAFTK5May()", +"20c58794": "PHN()", +"20c5b497": "recoverAddressFromBalanceProof(bytes32,bytes32,uint256,bytes32,bytes)", +"20c5e29a": "increaseDailyTransactionVolumeSending(uint256)", +"20c726b4": "view_product(uint256)", +"20c8580f": "getBalanceEthContract()", +"20c8651b": "makeFee()", +"20c90167": "distributeCDD(address[],uint256,uint256)", +"20c93c62": "trackFee(uint256)", +"20c9d73c": "validCountryId(uint256)", +"20c9f377": "OneUpToken(address)", +"20ca0418": "getEscrowById(uint256)", +"20ca292e": "AUFBToken()", +"20cad613": "isVersionLogic(address,bytes32)", +"20caea39": "surprisePanda()", +"20cb27fb": "requireWhitelistingBeforeDeposit()", +"20cb7bce": "takeFee(address,address,uint256)", +"20cc6889": "getAvatarByNickname(string)", +"20cc7b4e": "changeToken(address,address)", +"20cd2141": "advisorLockUp_address()", +"20cd3972": "grab(address,address,address,address,uint256)", +"20ce4c66": "getInteractive()", +"20ceb1bb": "SetCoinManager(address)", +"20ceb536": "grantToSetUnpausedWallet(address,bool)", +"20cf3e1f": "maintenance_mode()", +"20d00018": "jackpotTime()", +"20d01a7f": "ContestClosed(uint256,address[],address[])", +"20d0c13c": "getStatusModerator(address)", +"20d19181": "crowdsaleEndedBlock()", +"20d3a0b4": "unlockPeriod()", +"20d3fc20": "totalSeedStage()", +"20d615c2": "testControlTransferDisableNotEnabled()", +"20d71dad": "_repopTransaction(address,uint256,uint256)", +"20d76113": "admin_tokenBurn(uint256)", +"20d786b5": "withdrawalCounter()", +"20d7d367": "allowRegistryUpdate()", +"20d7d860": "ahmadToken(uint256)", +"20d8741f": "Feed()", +"20d8dad0": "checkWhitelisted(address)", +"20d95f90": "removeInt256(bytes32)", +"20d9822e": "setAnyoneCanCall(address,string,bool)", +"20d9a9e2": "getChallengeType(uint64,uint256)", +"20db0c7e": "B21Token(address,address,address,address,address)", +"20db31d6": "totalFortunes()", +"20db91e2": "createPartner(address,uint256,uint256,uint256)", +"20dc3d06": "bpLockUp(address)", +"20dc407a": "creditOwner()", +"20dc4677": "minPublicContribAmount()", +"20dcce99": "PRE_CROWDSALE_CAP()", +"20dce978": "setExchanger(address,address)", +"20dd60f5": "setEnvelopeType(uint256,uint256[2])", +"20ddf1de": "editEpisode(uint256,string,string,uint32)", +"20df7f35": "DATE_TOKENS_UNLOCKED()", +"20dfcd27": "purchaseCountry(uint256)", +"20dffb08": "testCancelSellOrder()", +"20e07e7f": "changeCardCost(uint256)", +"20e0dc9f": "RTCoin(string,string,uint8)", +"20e1063e": "toekensForBTCandBonus()", +"20e12a43": "createRound(bytes32,bytes32)", +"20e25965": "timestampRelease()", +"20e33b13": "GoodBit()", +"20e3dbd4": "setConfig(address)", +"20e537c7": "isTransactionAlreadySettled(address,bytes32)", +"20e561f3": "BecomePharaoh(uint256)", +"20e57371": "ownerVault()", +"20e59116": "startChampionGame()", +"20e62bbc": "StreamityEscrow()", +"20e647e1": "checkBetColor(uint8,address,bytes32,bytes32)", +"20e65a42": "stakeForAirdrop(address,uint256,bytes)", +"20e6a2cb": "getStrField1()", +"20e6e921": "transfer(address,uint8)", +"20e76d31": "_solveGame(uint256,uint256,uint256)", +"20e87093": "getDSTSymbolBytes()", +"20e89790": "POWR()", +"20e979b1": "assignBank(address)", +"20e98bf4": "setNick(string)", +"20e9aac3": "playerTimestamp(address)", +"20ea2533": "authorizePayment(string,bytes32,address,uint256,uint256)", +"20ea31f8": "giveTo(uint256,address)", +"20ea8d86": "revokeConfirmation(uint256)", +"20eb2a87": "setContract(address,address,address,address,address)", +"20eb6dec": "frozenControl(address,uint256,uint256)", +"20eba3f2": "gamesLength()", +"20ec0f01": "lastBlock_v12Hash_uint256()", +"20ec75c2": "searchStartIndex()", +"20ed1a52": "badge(address,address,uint8)", +"20ed9451": "set_active_contract()", +"20edae5a": "createChallenge(uint256,string,uint256)", +"20ee0c94": "setUrl(bytes32)", +"20ee5445": "addToPrivileged(address)", +"20eea675": "ESOPOffered(address,address,uint32,uint32)", +"20eeba1f": "testConstructorUsingNewContract()", +"20ef57ed": "bumpCounter(uint256)", +"20f067a8": "PRETDESupply()", +"20f06c9b": "start_LOCKUP(uint256)", +"20f06fef": "_createWarrior(uint256,address,uint256)", +"20f0751d": "turnOn(address)", +"20f0c28f": "MainContract(string,address,address,string)", +"20f0db91": "VerifCert(uint32,bool,bytes,bytes)", +"20f10ae7": "_supportsERC165Interface(address,bytes4)", +"20f10fdd": "tokenSupplyLimit()", +"20f1895c": "fechVoteSumNumForCandidate(address)", +"20f1d85b": "removeApprovedAddress(address)", +"20f317fb": "districtContractAddress()", +"20f320d0": "setBonusExtra(address,uint256)", +"20f361b3": "optionExercise(uint256)", +"20f3d413": "getTargetBlockNumber()", +"20f4014a": "ApolTestToken()", +"20f4914a": "changeMyString(string)", +"20f4d7aa": "redeemPayout()", +"20f541fa": "purchaseAsQualifiedPartner()", +"20f5a0b9": "readTeamByIndex(uint256)", +"20f5afdf": "OwnershipTransferInitiated(address)", +"20f5e8dd": "resetBalance()", +"20f65816": "extractToken(address,address)", +"20f71018": "Aqo()", +"20f727e2": "Caller(address)", +"20f756bd": "getArmySoldiersCount(uint256)", +"20f801d4": "payout(address,address,uint256)", +"20f86e9f": "_isBonusAvailable()", +"20fa6fd9": "ethSendSameValue(address[],uint256)", +"20fa70b0": "getAvailableWithdrawableCount(address,uint256)", +"20fb2bc2": "AllowClaimBTC(bool)", +"20fb36af": "Test8J()", +"20fb9bad": "LogSortedOffer(uint256)", +"20fc4881": "getCheckpoint(uint256)", +"20fcf2e5": "Castor()", +"20fd8861": "customerWallet()", +"20fea5cf": "getUserTaskAtIndex(uint256)", +"20fee8f1": "_timePer()", +"2100bf7a": "lolaToken()", +"21015328": "getLLV_edit_28()", +"21027354": "buyerHistory(address,uint256,uint256)", +"21029f47": "chickenHunt()", +"2102df31": "_totalDonations()", +"2104c2bb": "fundTeamInstant()", +"2104cdd2": "totalNumberOfScammers()", +"2104d832": "AddHelenium(address,uint256)", +"2104ebf1": "executeWithdraw(uint256)", +"2104fa0b": "skinIdToOwner(uint256)", +"21059e63": "createProposalAndPublish(bytes32,string)", +"2105c049": "setCSO(address)", +"21065f10": "mintInternal(address,address,uint256)", +"21067b3f": "startRoundWithFirstBet(uint256,uint256,uint256,bytes32)", +"210790c8": "signWholeConfiguration()", +"2107a796": "createGame(string,string,uint256,uint256,string,string,string,string,bool,string)", +"2108292e": "mint_(address,uint256)", +"210846ae": "is_kyced(address)", +"21090b31": "_decrementInventory(uint256,uint256)", +"210970c5": "update_count(uint256)", +"2109b408": "bitsMask()", +"2109cf80": "depositEth(address,uint256,bytes)", +"210a6eec": "sendMultipleAddress(address[],uint256[])", +"210a854b": "preIcoTokenHoldersAddresses(uint256)", +"210a8d0e": "changeGranularity(uint256)", +"210ab6af": "numOfJingles()", +"210ae4d5": "setTransferDisabled(uint256,bool)", +"210b7e0b": "tokenAllocation(address,uint256)", +"210ba961": "demurringFeeOwner()", +"210bc472": "ownerTokensMinted()", +"210bd306": "getCurrentHunterLicencePrice()", +"210c1f29": "closeBoard(uint256)", +"210c5a56": "_removeMinter(address)", +"210c5ff6": "getBlockNumber(bytes)", +"210d14b8": "burnPREICOTokens()", +"210d2bba": "PRICE_MULTIPLIER_PREICO2()", +"210dee2f": "setMigrateOut(bool)", +"210e2484": "icoDiscountPercentageLevel3()", +"210e734c": "isBoxItemId(uint256)", +"210e9a34": "getPendingReferals(address)", +"210f5dda": "createToken(string,string,uint8,uint256)", +"210fcbf6": "createPromoCutie(uint256,address)", +"210fd271": "sizeLimit()", +"210fe93b": "catIndexToAddress(uint256)", +"2110273d": "addToShareHoldersProfit(string,string)", +"21105d35": "addressForNonce(uint8)", +"21106109": "finalRate()", +"2110a57c": "User(address,bytes32)", +"2111006f": "create(address,address,bool)", +"21114904": "balanceOfEther(address)", +"2111871c": "endPreICOStage2()", +"2111c0f9": "freezeDeliverMuti(address[],uint256,uint256,uint256,uint256)", +"2111d1e2": "OnUpdateMessage()", +"21129137": "saleover()", +"2112e7fe": "getListGames()", +"2113342d": "totalDividendPoints()", +"2113aab4": "BTL_IMMORTAL()", +"21141c38": "updateInvestorFunds(uint256,uint256,address,uint128)", +"21141de0": "ReturnEthToEthero()", +"2114fd0f": "AxpireToken()", +"2115d328": "getSemiResult(uint256)", +"2115fd55": "RecievedEther(address,uint256)", +"21166476": "ARC()", +"2116b530": "ChangeOwner2(address)", +"21180138": "isCA(address,address)", +"21180722": "init(int256)", +"21187172": "Gate(address)", +"21188011": "maxIssuedWithAmountBasedBonus()", +"2119249f": "getNumTokens(uint256)", +"21194bc0": "devCutPercentage()", +"211a048a": "getFastestSpaceship()", +"211a04db": "totalToDistribute()", +"211a0f39": "ERC20TokenComplete(uint256)", +"211a1ba8": "changeTokenController()", +"211b2758": "changeBlockedTimeForInvestedTokens(uint256)", +"211b4f54": "startUpdate(uint256)", +"211b72a3": "sub1(uint256,uint256)", +"211db50d": "allowNewStakes()", +"211e28b6": "setLocked(bool)", +"211ed6c1": "freeTransfer()", +"211f0b93": "getCreateReputationTokenUniverse()", +"211f0ef9": "SaleOfChametz()", +"211f390e": "ECO_SYSTEM_HOLDER()", +"211feec5": "executeEtherDeltaSell(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", +"211ff90c": "SpiceControlled(address)", +"2120e527": "stakingBonus(uint256,uint256,uint256)", +"21217668": "getDrawBlockNumberByWinner(uint256)", +"2121dc75": "isTransferable()", +"212257de": "changeCap(uint256,uint256,uint256)", +"2123015e": "test_insert_findWithHintNextIncreased()", +"2123476b": "startConstitutionPoll(address)", +"21235083": "cancelSubscription(uint256)", +"21241e44": "addressOfTokenUsedAsReward3()", +"21242279": "MintToKen(address,uint256)", +"2125b65b": "transfer(uint32,address,uint224)", +"2126a923": "reverse(address,uint256)", +"2127c30a": "setBlockHash(bytes32)", +"2127fe90": "addOnStage(address,uint256)", +"21288400": "lastPurchaseTick()", +"21289506": "MichaelCoin()", +"2128a580": "total_claim_codes()", +"212954dc": "setAddBonus(uint256,uint256)", +"2129e25a": "finalBalance()", +"212a6fd3": "CloseEntry()", +"212a850c": "showMyNumber()", +"212ac4b5": "UnicornChain()", +"212ac7d1": "mintNewSpinner(uint256,uint256,uint256)", +"212bf316": "setCaps(uint256,uint256)", +"212c3fce": "returnTokensToAirdropper(address)", +"212c5fea": "close(bool)", +"212c8157": "disallowTransfers()", +"212d6723": "payRoyalty()", +"212e2596": "sellOrderTotal()", +"212ebbd6": "addTokenLock(address,uint256,uint256)", +"212f6066": "enableInvestment(address[])", +"21309ae3": "setTimeBonuses(uint256[],uint256[])", +"2131c68c": "daoAddress()", +"2132626f": "_removeByIndex(uint256)", +"21326768": "finishGame(bytes32)", +"213294cd": "crowdsaleHasEnded()", +"2132ce0a": "BASE_AMO_TO_ETH_RATE()", +"2132eb23": "TreasurerToken()", +"21335ad5": "getDepositAggregate(address,uint256)", +"21338d1b": "rewardsWithdrawalProposed()", +"2133ddeb": "settleBetV1(uint256,uint8)", +"2133e3b9": "calculatePercentage(uint256,uint256)", +"213408da": "sendCreatorReward()", +"2134214b": "getPreorders(bytes32)", +"21346edd": "savedBalanceToken()", +"2134927e": "setAuctionParms(uint256,uint256,uint256)", +"21355869": "getAuctionTimeLimits(bytes32)", +"2135810e": "curRequestId()", +"2135d2e4": "lasttokencount()", +"213671bf": "mainSale_TokenCap()", +"213681cd": "getRecord(bytes32)", +"21370942": "updateEthPrice(uint256)", +"21376d07": "scheduledPayout()", +"2139c2aa": "setwinnerLimit(uint8)", +"213a2622": "offerAsSacrificeFromVault()", +"213a72a7": "LightofGalaxy()", +"213ac932": "addUser(address,uint256,uint8,bytes32,bytes32)", +"213ad495": "TimeWeekTwo()", +"213ae9ec": "newGame(uint256,bytes8,uint256,uint256,string)", +"213aedb8": "getAllGames(bool,uint256,uint256)", +"213b9eb8": "setAddr(string,address)", +"213c3375": "callCustomTokenFallback(address,address,uint256,string,bytes)", +"213d6771": "editionData(uint256)", +"213d8f4a": "setCurrentRewardNum(uint256)", +"213db226": "move(address,address,uint8,uint256)", +"213e609f": "getTknOfferAmount(uint256)", +"213e84d3": "maxIssueTokenLimit()", +"213ea6bb": "donationReceiver()", +"213f44ab": "getUserAddressList()", +"213f9ad4": "generateWinners(uint256)", +"213fe044": "getInstanceAddress(address)", +"213fe2b7": "getContracts(address)", +"21420a3d": "_depositTokens(address,uint256)", +"21424e7d": "ETHcollected()", +"2142adc9": "changeMargin(uint256)", +"21435e07": "setTokensWallet(address)", +"2143da91": "GameOfThrones()", +"214405fc": "addToWhitelist(address,uint256)", +"21446cfe": "unitDefense(uint256)", +"2145465a": "SOUNDBOY()", +"2145a455": "getRebackRate()", +"2145e36c": "testBitSetFailIndexOOB()", +"21462191": "bid3(address,uint8[],uint8[])", +"21464e71": "inOneYear()", +"2147783f": "smitToken()", +"21479265": "addToBlackList(address,address)", +"21484786": "notificationFee()", +"21486833": "maxRewardUnitsAvailable()", +"21491e82": "secondCurrentAmount()", +"214958ba": "BLOCKCURRICO()", +"214962d1": "identifierHash(string)", +"21499737": "setIco2Tokens(uint256)", +"2149c619": "functionThree(uint256,uint256,uint256,uint256)", +"214ab314": "searchDiplomaByID(uint256)", +"214af6b9": "acceptTokensFromUsers(address,uint256)", +"214b146f": "storeName(uint256,string)", +"214bb60f": "finalised()", +"214c2a4b": "getServiceURI(address)", +"214c9d50": "WritedrawStatus()", +"214cdb80": "registerInterface(bytes4)", +"214dda84": "regularPhase()", +"214e52ca": "transferAllowed(address,address)", +"214e5f3a": "setForwardUpdateFeesTo(address)", +"214e8a47": "getSingleLocker(address)", +"214f71fe": "tokenFulfillmentDeposit(address[2],uint256,uint256[7],uint8,bytes32[2])", +"2150097f": "timerInfo()", +"2150c518": "getKeys()", +"2150c75d": "newItem(uint256,string,uint256)", +"2150cd56": "setRateAdmin(address)", +"2151f9a0": "TCT(string)", +"21520c5f": "calculatePayout(uint8,bool,uint256)", +"215213dd": "updateTierTokens(uint256,uint256,uint256)", +"2152b483": "OWN_SmartContract_Allowed(address,bool)", +"2152c649": "LOVEYOUToken()", +"2152ebac": "getContributionAmount(uint256)", +"21537caf": "setRequiredBlockQueueTime(uint256)", +"21538acb": "approveCallGas()", +"2153bade": "ZJZJToken()", +"2153bf23": "x3Token()", +"21542702": "MakeBet(address,uint256)", +"215458b0": "salvageNotAllowedTokensSentToContract(address,uint256)", +"2154dc39": "maxMintable()", +"21554dca": "GetCurrentBonusStageTokenBalance()", +"2155af2f": "execute(address,uint256,bytes1[])", +"2156a96c": "getTotalSales()", +"2157320e": "votedAddress()", +"21575889": "distributionSupply()", +"2157ab24": "GetBankerRound(uint8)", +"21592a2b": "YaoMaoCoin(uint256,string,uint8,string)", +"21594110": "createProductionUnit1Beta()", +"215a3bcc": "setStatus(bytes32)", +"215a4862": "eligibleForBonus(uint256,address)", +"215a6ce4": "createBet(uint64,uint256)", +"215ac4be": "fillContract()", +"215ae66d": "mintForWebsites(address[],uint256[])", +"215afc5f": "totalTokenDistribution()", +"215b3e32": "fromBytes(bytes)", +"215b5411": "purchaseCallbackOnAccept(uint256,address[],uint256[])", +"215bad32": "TPTTransfer()", +"215bd303": "createWorkerPool(string,uint256,uint256,uint256,address)", +"215bf604": "addFreelancerFeedback(address,uint256,address,string,uint8)", +"215cb8df": "createIlliquidToken(address,uint256)", +"215cc031": "getAvatarByAddress(address)", +"215d6b61": "getTierOfMember(address)", +"215d902c": "extractString(bytes,uint8,uint256)", +"215de48a": "getParentCount(bytes32)", +"215de791": "getTankName(uint32)", +"215e25ea": "upgradeReferrer()", +"215f1cd1": "oraclizeSetWinner(uint256,uint256)", +"215f865e": "resetDropAddress(address)", +"215fce93": "changeExchangeRate(uint256)", +"216093aa": "getIsThirdPhase()", +"21614f62": "randomSkinAppearance()", +"2161d0e9": "tokensToP3D_(uint256)", +"21627dad": "getCart()", +"2163d49a": "lockedCore()", +"2163ef1a": "GangnamTokene(address,address)", +"216481d6": "icocontract()", +"21650145": "Revoked(bool)", +"2165e1aa": "withdrawRemainingBalanceForManualRecovery()", +"2165fef9": "allocateStrategicTokens()", +"21667940": "issueTokenAndApprove(uint256,address)", +"21670f22": "reward(address,uint256)", +"216716af": "ExoMiniumToken(address,address)", +"21687444": "newDAO(address)", +"2168c988": "transferToInternalLedger(uint256,bytes32)", +"2168ca06": "numberOfIndex()", +"216903f9": "confirmTx(bytes32)", +"216974cc": "refundNonCompliant(address)", +"216986b0": "entradaJugador(uint256)", +"216a5543": "getAllForSaleStatus()", +"216aa0ba": "proposalBlock()", +"216b8c95": "internalIsApprovedForAll(address,address)", +"216be181": "hodls(uint256)", +"216c1606": "_claimExistingCard(uint256,address)", +"216ced43": "setPenaltyDisbursal(address)", +"216d93d6": "pricers(uint256)", +"216de17a": "priceStage1()", +"216e2a97": "totalOrder()", +"216e3449": "changeToken(string,string)", +"216ea239": "miningResolve(uint256,uint256)", +"216ea5ec": "remainder(uint256,uint256)", +"216ec69b": "getColour()", +"216ecfa7": "Tbaol()", +"216ef940": "proxyUpgrade(address,address,bytes)", +"2170ebf7": "makerWithdrawEther(uint256)", +"2171454a": "bountiesKey(uint256)", +"2171526e": "Chewbaka()", +"21717ebf": "siringAuction()", +"2171dc73": "buyXaddr(address,address,uint256,string)", +"2172ac5a": "_requestExistsReverse(address,address)", +"217311ac": "getWords(uint64)", +"21733f6a": "sendDv(string)", +"2173a10f": "INITIAL_POLL_NONCE()", +"21745c15": "numberOfSales()", +"217477f6": "ICO_PERCENTAGE_3()", +"2174b88f": "transferBanker(address)", +"2174dcec": "ConfigPromoter(uint256)", +"21751df9": "BugBountyOne()", +"21752974": "compromiseContract()", +"21765510": "getLockedAvailable(address,string)", +"21765d23": "addLockedTime(address,uint256,uint256,uint256)", +"217720d7": "getHeldCoin(address,address)", +"21774f4b": "CUSTOMER_PERCENTAGE()", +"2177885d": "isOnAuction(uint40)", +"2177a36f": "getCountProof()", +"2178139d": "acceptAbstractToken_(uint256)", +"21795635": "TOTOAirdrop(address,address)", +"217987ad": "delBlackList(address)", +"2179f0f7": "EtherToken()", +"217aab68": "_updateCommission(uint256)", +"217ad35a": "minimalEther()", +"217af162": "whitelistKyberAddress(address)", +"217b97e4": "hatchMaxTime()", +"217bd046": "computePoolAmount()", +"217cab2b": "GetWhitelist(uint256)", +"217d9bbe": "depositExit(uint256,bytes)", +"217db8e8": "toBase(uint256,uint256,bytes8)", +"217f2d23": "CRVToken()", +"217fe6c6": "hasRole(address,string)", +"21815a1a": "updateHolderShareInfo(uint256)", +"21819e5c": "computeArtistTxFee(bytes32,uint256)", +"2181c11f": "batchNewAuctions(uint128[],uint256[],uint256[])", +"2182e6d8": "buy_lovelock(bytes32,string,string,string,uint256)", +"2182ebbf": "use(address,uint256,uint256,uint256,uint256,uint256,string)", +"2182f7b4": "MINIMUM_PURCHASE()", +"2182ff7e": "sellMNC(uint256)", +"21835af6": "__dig(uint256)", +"2183e390": "setTotle(address)", +"21842be3": "unlockTransfers()", +"218444ab": "Test2()", +"21844b08": "drWinChances(uint256)", +"21848580": "lastBlock_a14()", +"2184f977": "TRANSITION_WINDOW()", +"2184fe2c": "transferTechSupport(address)", +"2185072f": "SerpenSegmentCount()", +"21853009": "participantRoundRewarded(address,address,uint256)", +"21856b36": "interestOwed()", +"2185810b": "allowTransfers()", +"21858521": "tickets()", +"2185ca52": "BITRUS()", +"21860a05": "airdrop(address)", +"21861cce": "AUDITED_AND_APPROVED()", +"2187a833": "setGreenToken()", +"2187bdca": "getAllETH(address)", +"2187e6a6": "createHolder(string,address,uint256)", +"21887c3d": "has(address)", +"21895086": "RL(uint256,string,string,bool)", +"218a51e8": "UnFrozenTokenEvent(address,uint256)", +"218a7667": "addToBalances(address,uint256)", +"218a9640": "setTeamStatus(bool,uint256)", +"218bc5ec": "createBid(uint256,address,bytes32,bytes32,uint256,uint256)", +"218bd577": "enterGame()", +"218cd7a1": "POOPOO()", +"218d5637": "realSupplyWeight()", +"218d6ca2": "calcPurchase(uint256,uint256)", +"218d984b": "registryProxy()", +"218dd3dd": "checkIdentity(bytes32)", +"218e4562": "updateBalanceOf(uint256)", +"218e4a15": "getCooldown()", +"218e6877": "setDelegate(bool)", +"218e767d": "TokenFactory(address,address)", +"218eee82": "addAd(uint32,uint32,string,string,uint256)", +"218fbdec": "callWithdraw(address)", +"218fd1c4": "CompanyName()", +"218fe479": "generateRenown()", +"218ffb4c": "Fund(address,bytes32,address,uint256,uint256,address,address,address,address[],address[])", +"21901fa8": "WithdrawFunds(address,uint256)", +"219047f7": "MasternodeRewardSend(uint256)", +"2191207a": "setTAOFactoryAddress(address)", +"21914e29": "day2Start()", +"2191f4a9": "storjPrice()", +"2191f92a": "isInterestRateModel()", +"219285d2": "presaleClosedManually()", +"2192b99d": "mintContributors(address[])", +"219356bc": "GxConstants()", +"21937192": "finishedSTOMinting()", +"21938610": "set0xExchange(address)", +"2193cdba": "send_all()", +"2194f3a2": "fundsWallet()", +"21956036": "SmartRouletteDividend()", +"2195845f": "withdrawAltcoinTokens(address)", +"21958a50": "AddressSeries(address)", +"2196ae0d": "hint(bytes32,string,bytes20)", +"2196feac": "createMarketItem(bytes16,bytes16[],bytes16[],uint256[])", +"2197021b": "proxyVotingContract()", +"21970c0c": "pay_royalty()", +"21974a74": "EtherNetworkConfig()", +"21978e58": "_removeSale(uint256)", +"2197b236": "Goldjunge()", +"21981514": "totalUnclaimedBidsAmount()", +"219862d0": "marketKebabs()", +"2198e780": "addDollarAmount(address,int160)", +"21998504": "setCompte_7(string)", +"2199d5cd": "registerUser(address)", +"219a6ead": "MICRO_DOLLARS_PER_BNTY_PRESALE()", +"219a6f04": "getFounderMember(uint256)", +"219bc76c": "currentRoundInitialized()", +"219c7ad1": "getwinningaddress10()", +"219caaa9": "reclaimChildOwnership(address)", +"219d0ece": "transferAdminship2(address)", +"219da4ac": "ResumeTokenContract()", +"219dabeb": "registerDeposit(address,uint256)", +"219dc688": "technicalPercent()", +"219df7ee": "ZTHTKN()", +"219f5052": "updatePokeMarketAddress(address)", +"219f5b92": "revokeAuthorization(address,address)", +"219f72c9": "startICOStage3()", +"219fd010": "accredited()", +"21a19b2d": "neverdieSigner()", +"21a2ad3a": "nextSlasher()", +"21a2c72d": "BitcoinDublicate()", +"21a32e5c": "VanityCrowdsale(uint256,uint256,address)", +"21a33743": "DroidEIP20Token(uint256)", +"21a33e00": "gasReq()", +"21a389cc": "PRE_SALE_3WEEK_BONUS()", +"21a3fb85": "addValidator(address,bool)", +"21a49ec2": "LCoin()", +"21a4a5bb": "endDateOfSaleStageLast()", +"21a4c6c3": "openMarket(address)", +"21a4cdaf": "HDCToken()", +"21a4d259": "setMinAuditPriceLowerCap(uint256)", +"21a5065e": "returnableTokens(address)", +"21a5c1c3": "buyItem2()", +"21a5dcfe": "multivestBuy(address,uint256)", +"21a638d8": "addTerminal(address,uint256,address)", +"21a6c649": "privatePresaleWallet()", +"21a6c7aa": "megabossCutPercentage()", +"21a78f68": "ref()", +"21a7d652": "EQUIPMENT_REWARD_TOKENS_NUMS()", +"21a80189": "getBalance(address,address,uint256,bytes,uint8,uint256)", +"21a804fc": "SphereToken()", +"21a83738": "getDragonPriceNo(uint256)", +"21a8a771": "setPort(uint16)", +"21a91d2b": "PrcntRate()", +"21a9cf34": "setTradeAddress(address)", +"21aa1706": "startPresaleTrading()", +"21aace42": "setTokenForSP(uint256)", +"21ab13ab": "maxBet(uint256)", +"21ab3074": "transferOwnershipOfStorage(address)", +"21ab561d": "MIN_BID_FRAC_BOT()", +"21ab7fb4": "marketplace_admin_controller()", +"21ab9177": "fixPlayerGraphic(uint256,string)", +"21abf58b": "feesB()", +"21ac01d8": "ClaimedTokens(address,uint256,uint256,uint256)", +"21ac4982": "issue(bytes32,int256,bytes,uint256)", +"21ac5aba": "cityIndexToOwner(uint256)", +"21ac64af": "declareRCV(string)", +"21ac8967": "setPatentFee(uint256)", +"21b12a4b": "clearTransaction()", +"21b133ed": "icoTotalAmount()", +"21b1e5f8": "sendETH(address)", +"21b288d8": "endSecondBonus()", +"21b36a08": "setFee(uint64,uint256)", +"21b43777": "advisorCount()", +"21b48008": "getInvestorsETH(address,address)", +"21b4b3dc": "proposalsCnt()", +"21b55c42": "testConcat()", +"21b5b8dd": "extraBalance()", +"21b68d2b": "DyginoteToken()", +"21b6ac62": "lockGate()", +"21b6c321": "StoreProduct(bytes32,bytes1)", +"21b6fcbf": "SendFund(uint256,bytes32)", +"21b8092e": "setWithdrawalAddress(address)", +"21b8151e": "Mixer()", +"21b8b11e": "_addToDebtRegister(bytes4,uint256)", +"21b8d973": "returnHash(address[2],uint256[8])", +"21b920eb": "upgradeTank(uint32,uint8)", +"21bacf28": "getDefaultFee()", +"21bb79fe": "luckyDogInfo()", +"21bb86ab": "setExchange(uint256,uint256,uint256,uint256)", +"21bc84fd": "canCompose(string,uint256[],address,uint256)", +"21bc9a55": "buyTokens(address,address)", +"21bcc5e5": "multiBatchTransferFrom(uint256[],address[],address[])", +"21bdb26e": "maxPresaleSupply()", +"21bded12": "capitalPctBips()", +"21be2244": "PrivatePlacement(address,address,address,address,address)", +"21be26ed": "deauthorizeContractById(uint256)", +"21beba94": "lastTxBlockNum()", +"21beedf4": "BlocklancerToken()", +"21c0183e": "centralAdmin()", +"21c02472": "numberOfResolutions()", +"21c03a97": "setTradingOpen(bool)", +"21c0b342": "claim(address,address)", +"21c0e95d": "setBountyPool(address)", +"21c17ab8": "unproposeMilestones()", +"21c24081": "GDC(uint256,string,uint8,string)", +"21c26195": "distAirdrop(address,uint256)", +"21c4d650": "priceForBasePart()", +"21c5fb20": "Deposit_double_sum_paid_from_the_balance(uint256)", +"21c60ac6": "div(uint8,uint8)", +"21c60c74": "createMobster(string,uint256,uint256,uint256,string)", +"21c63a47": "getTicketCount()", +"21c6b951": "BetherCryptocurrency()", +"21c6d7b6": "BitbabeToken()", +"21c87627": "getUnlockedPercentage()", +"21c87ee8": "setMaxLevel(uint8)", +"21c882ef": "testGetCaseAtIndex()", +"21c88358": "anyTokenWithdrawal(address,uint256)", +"21c9a6b1": "localCheck(uint256,string,bytes32,bytes32,string,bytes32)", +"21cb1568": "registerArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", +"21cb18cd": "assignVested(address,uint256,uint64,uint64,uint64,bool)", +"21cbed35": "setOperationAttributesByRegulator(string,string,uint256,string)", +"21cda790": "tokensOwned(address)", +"21cdb03c": "shopShield()", +"21cde824": "fighterIndexToTeam(uint256)", +"21ce14a9": "injectTokens(address,uint256)", +"21cefec0": "tokenBuyRate()", +"21cf3514": "priceStalePeriod()", +"21cf5132": "setManualBonus(uint256,bool)", +"21cf59ac": "mintInternal(uint256,int256)", +"21cf9f22": "updPool(int8,uint256)", +"21d148ab": "weiForXau()", +"21d1a303": "checkRemained(uint256)", +"21d1b7a4": "TJ2()", +"21d269dc": "fastCashBank()", +"21d2daa0": "unFreezeToken(uint256)", +"21d3523c": "voteToHarvestFund()", +"21d36529": "feePercentage(uint256)", +"21d365af": "_processVestingRules(address,address)", +"21d376ce": "tokensOfOwner(bytes32)", +"21d3d2ee": "isMigrationFinished()", +"21d41bc2": "IRobo()", +"21d45bec": "getReverseFee(address,uint256)", +"21d4b08c": "numTicksTillAuctionStart(uint256)", +"21d50273": "createParty()", +"21d53fb9": "withdrawLockupTokens()", +"21d5c0f6": "finalizeAgent()", +"21d5cb51": "verifiedUser(bytes32)", +"21d65d80": "blockPart(uint64,uint64,uint64)", +"21d67daa": "internalFinishMinting()", +"21d6cdb6": "newPeriod(uint256)", +"21d739f1": "TokensIssued(address,uint256)", +"21d7bdff": "startCountDown()", +"21d800ec": "relayedMessages(bytes32)", +"21d80111": "getHero(uint256)", +"21d8ad4c": "getContractName(uint256)", +"21d9d5ba": "testRemoveLocked()", +"21da1719": "impl_unlock4Circulate(address,uint256)", +"21da94e7": "getSEScore()", +"21daae34": "getQuoteToBaseReturn(uint256)", +"21daf0f8": "TransferToReferrer(address,address,uint256,uint256,uint256)", +"21db06bc": "wolf4Balance()", +"21db087e": "getLevelCitizenById(uint256,uint256)", +"21db0f0d": "getImmortalsOnTheBattlefield(address)", +"21db2aa0": "getArtwork(uint32)", +"21dc04f4": "Vibranium()", +"21dc512e": "replaceSSPRegistry(address)", +"21dc74fa": "addWhiteLister(address,address)", +"21dcbbae": "HighJackpotHolder()", +"21de6b01": "setKtcAddress(address,bool)", +"21de861a": "narrowCyclePrizeView()", +"21df0da7": "getToken()", +"21df2ea5": "getNewInstance(address)", +"21df8b9b": "addTotalBondValue(uint256,uint256)", +"21e01596": "logCall(uint256,uint256,uint256)", +"21e0f228": "winningNumbers()", +"21e2933a": "setBasicIncomeLimit(uint256)", +"21e38e81": "ownerCheck()", +"21e3cdd0": "voteDn(uint256)", +"21e5383a": "addBalance(address,uint256)", +"21e53d77": "_buyTokens(address,address)", +"21e5d0e4": "PRESALE_START_WEEK2()", +"21e5e2c4": "shareOf(address)", +"21e69b42": "dataMerkle(bytes32[],uint256,uint256)", +"21e6b53d": "transferTokenOwnership(address)", +"21e76826": "Gamblr()", +"21e866be": "getCompanyCreationCost()", +"21e88888": "setColor8(uint256,uint8)", +"21e92d49": "transferByOwner(address,uint256)", +"21e96b88": "setProxyManagementCurator(address)", +"21e9b296": "ExtractedTokens(address,address,uint256)", +"21ea2b8d": "delayOfICOEND()", +"21ec0129": "HAUZ()", +"21ec5981": "Jekyll_Island_Inc()", +"21ed0f64": "removeEmployee(uint256)", +"21ed46ad": "Dollars()", +"21ed47b3": "annualPos()", +"21edbe24": "pricesAndInventoriesOfDate(uint256,uint256,uint256[],uint256)", +"21ee102b": "removeExtension(address)", +"21ee6457": "set_sale_arbits_total(uint256)", +"21eeb9a7": "LogSaleCapReached(uint256,uint256)", +"21ef10f0": "revokeSelf()", +"21ef8368": "DataSentToAnotherContract(address,address,bytes)", +"21eff7fc": "getContribution(address)", +"21f032d3": "BitDAOToken()", +"21f0a727": "node_right_child(uint256)", +"21f0b382": "unblockClient(address)", +"21f118a6": "createByCOO(string,uint256,uint256)", +"21f1a18c": "battleRemove(uint256)", +"21f1b677": "updateTime(uint256,uint256)", +"21f222dd": "minWeiAmount()", +"21f2a9a9": "_getUnlockedTokensPercentage()", +"21f2ca3b": "unregisterUser(address)", +"21f2ed2e": "dividendDistributionEndTime()", +"21f35609": "CAT_FIRST()", +"21f38c6e": "bundlingEnabled()", +"21f3f338": "proposalCensorshipFee()", +"21f3ff41": "maxMultiRolls()", +"21f408be": "tk()", +"21f4911a": "addFiveParticipants(address,address,address,address,address)", +"21f4d29f": "getPoolHistory(uint256)", +"21f610d3": "endEarlyStage3()", +"21f6b513": "Airdropper(address,uint256)", +"21f72d82": "YODCToken()", +"21f7ac0d": "codeExportCost()", +"21f8a721": "getAddress(bytes32)", +"21f8dab6": "THRESHOLD4()", +"21f9a878": "NewHashnodeTestCoin()", +"21f9caef": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,address)", +"21fa1730": "Ballot(string,string,string,uint256,address[],uint256[],uint256[])", +"21faf403": "getStatusLogCount()", +"21fb39d4": "WithdrawEvent(address,address,bool,uint256,uint256)", +"21fb9869": "getAdminLog(uint256)", +"21fc2cd1": "NounToken()", +"21fda809": "payment(address,address,uint256,address)", +"2200919f": "addVersion(string,address)", +"22009af6": "BASE_REWARD()", +"2200cdec": "finishPVE(uint256)", +"22017c5f": "DSTokenBase(uint256)", +"2202dcad": "FACTOR_7()", +"22039f89": "isServiceContract(address)", +"2203ab56": "ABI(bytes32,uint256)", +"2204ef4b": "getMeTokens(uint256)", +"22054fe0": "updInvestorEnabled(address,bool)", +"22057bc7": "getAllRevisionBlockNumbers(bytes20)", +"2206e837": "undisapprove(uint256)", +"220772a9": "starUpZero(uint256,uint256,uint256)", +"2207a93a": "etherInUSD()", +"22081c12": "processPayment()", +"22082c72": "getDoneSelfDropAmount(address)", +"2208ee1d": "_releaseTime()", +"2209e991": "sendBet(address,uint256)", +"220a0e36": "LoggedERC20(uint256,string,uint8,string,bool,bool)", +"220a2247": "givePermission(address,string)", +"220b4a73": "TCPC()", +"220c166c": "hatchingSpeed()", +"220c773a": "changeMarketingRecipient(address)", +"220d5d8d": "YioCoin()", +"220d7a7f": "NoteToken(uint256)", +"220d8707": "BONUS_DAY3_DURATION()", +"220d9944": "MailHustleCrowdsale()", +"220e44d0": "_buy(uint256,uint256,address)", +"220e5d06": "qshdrop(address[],uint256[])", +"220e693f": "ALLOC_ADVISORS()", +"220eb9b6": "run(uint256,bytes)", +"220ee9ec": "purchase_dates(address)", +"220eeab4": "BonumPreSale(uint256,uint256,address,address,uint256)", +"220f1202": "lowestAskAddress()", +"220f1aee": "createVoting(string,string,uint256,bytes32,address)", +"220f52c5": "whoIsTheOwner()", +"220f9dfd": "getFighterInfo(uint32,uint32)", +"220fde2e": "setSellPrice(uint16,uint256)", +"221067a1": "JULIAN_ALLOCATION()", +"221086af": "buyerBonus()", +"2210d525": "getRareAddress()", +"2210e0f7": "MassPay()", +"2211218a": "ARMtest()", +"2211944a": "ActiveAdmin()", +"2211ae76": "canReceive(address,address,uint256,bytes)", +"2211c3b3": "eraseContribution(address)", +"22122cb3": "blockTokenFunds(address,uint256)", +"2212dbc3": "get_timestamp()", +"22132598": "numArtworks()", +"221353ca": "finalizeByAdmin()", +"22137935": "productsExported()", +"2213c7db": "tokenPreSaleRate()", +"2214f65d": "toWei(address,address,uint256)", +"221538f4": "BurnupHoldingCore(address,address)", +"22156bb2": "WerderCoin(uint256,string,uint8,string)", +"22159d89": "ticketsOwned(uint256)", +"2215fc82": "getONETIMESOLD()", +"2216573d": "internalIncreaseGoldKeyCounter(uint256)", +"22169ab3": "START_PRESALE_TIMESTAMP()", +"22174ebf": "TokenSBT()", +"2217bf78": "getReputationRewards(address,address,bytes32)", +"2219a95b": "DWBTPreICO(address,address,uint256,uint256,uint256,uint256)", +"221a66d9": "presaleFee()", +"221ab8e2": "setBlockResult(uint64,uint64,bytes32)", +"221b1c4a": "_NumOfStudentsPass()", +"221b30df": "btcPurchase(address,uint256)", +"221b5ec2": "setTimeBegin(uint256)", +"221b5fad": "getCardsCount()", +"221b850c": "changeInstallerEscrowAddress(address,string,address)", +"221d4dff": "create(string,uint256,string,string,uint8)", +"221e5da9": "GetContractStateEarlyTerminatedByTenant()", +"221e9370": "recordedCoinSupplyForRound(uint256)", +"221ed3cc": "CONSTELLATION()", +"221ed748": "shareCycle()", +"221ef94d": "userMigration(uint256)", +"222101d1": "vestingMappingSize()", +"222160c0": "isProposalExecutable(bytes32,uint256,address,bytes)", +"2221fb3e": "hasActiveBet()", +"22230fc4": "countFishAtBase()", +"22239e8e": "loanActivation()", +"2223a5da": "reserveCap()", +"2224044c": "calcWeiForTokensAmount(uint256)", +"22242382": "checkPriceAmount(uint256)", +"22245b64": "MAXCAP_TOKENS_ICO()", +"22246200": "deleteElementWithValue(uint256)", +"22250809": "BoardClaimed(uint256,uint256,address)", +"222594c5": "findModuleNameByAddress(address)", +"2226549e": "fixedLog2(uint256)", +"22284872": "Escrow(address)", +"22287914": "icoWallet()", +"2228c895": "getWinningRate(uint256)", +"2229d348": "attackMonster(uint256)", +"222a5343": "BOWTERC20()", +"222a95ee": "LastMsg()", +"222af991": "stringToUint(int256,string)", +"222b0d7d": "massRevoke(address[])", +"222b8947": "depositTokens(bytes32,uint256)", +"222c1390": "maxPublicSaleStage()", +"222cfe94": "myEtherBrosCount(address)", +"222d777a": "createEvent(string,uint256,uint8,uint256,uint256,uint64)", +"222d7e34": "currentRoundStart()", +"222f51e9": "getDailyHash()", +"222f5be0": "transferInternal(address,address,uint256)", +"22305fb7": "ShowSegmentation(address,uint256,uint256)", +"2231454f": "updateCampaignManagerContract(address,string)", +"223162e7": "WithdrawSharedExpense(address,address,uint256,uint256)", +"2231f72c": "setownership(uint16,uint16)", +"223208af": "walletName(address)", +"22326584": "WBE()", +"2233db62": "InvestorRegistry()", +"2233dbf4": "wantNewMinter(address)", +"22347d5b": "confirmTrade(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"22351b6b": "VibeToken()", +"22366844": "isRegistered()", +"223699c1": "units30percentExtra()", +"22372795": "HIT()", +"2237d55c": "setTargetDiscountValue1(uint256)", +"22384945": "checkPresaleBalance()", +"22393ef4": "bundleFirstTokens(address,uint256,uint256[])", +"223964bc": "queryAccounts(address)", +"2239c48a": "startUpgrade()", +"2239d43b": "uintMinimalSize(uint256)", +"2239e688": "getUrlFromKey(bytes32)", +"223a6399": "newAssociate(address)", +"223ab941": "transferForProjectTeam(address,uint256)", +"223b01db": "decimalsETHToUSD()", +"223b530e": "antiques()", +"223c217b": "withdrawTokenTo(address,address,uint256)", +"223c5939": "UnilotBonusTailToken(address)", +"223cd20e": "shareHolderByAddress(address)", +"223d0417": "viewUnpaidRewards(address)", +"223dad70": "sendMsgSndr(address,address)", +"223db315": "allow_refunds()", +"223dcc74": "left14(uint256)", +"223e5a9d": "pls()", +"223e8eff": "etherPriceAuditor(address)", +"223e97be": "setParent(uint256,uint256)", +"223e9f17": "_redeemSameClassAdoptedAxies(address,uint8,uint256)", +"223fcbc9": "_locked()", +"223ff4cc": "getShipsIds()", +"224076d4": "pegIsSetup()", +"22408401": "ArtSale(address,address,uint256,uint256,uint256,uint256,uint8,uint256)", +"2240b645": "GetClientCategory(address)", +"22412ded": "MyProducts(address,uint256)", +"2241a733": "GOLD_AMOUNT_XPER()", +"22425fa4": "feePeriodDuration()", +"22427047": "Payout(uint256)", +"22429085": "updateFees(uint256,uint256,uint256)", +"2242cf7f": "getConBal()", +"22434836": "setTimes(uint256,uint256)", +"2243fb15": "getHashratePerDay(address)", +"22446093": "editPerson(address,address,string,uint256)", +"2245675f": "setCustomerSignature(address,uint256)", +"22471e16": "identityApproved(address)", +"2247328c": "vote01YesCount()", +"224846de": "deletePaymentContract(uint8)", +"224854f7": "Trie()", +"224993c2": "setTimeBlock(uint256)", +"224a1775": "transferByOwner(address,uint256,uint256)", +"224a6ac3": "nextPE()", +"224a8174": "TESTER()", +"224a967c": "CTSCoin()", +"224b4bfd": "TYCOONCoin(uint256,string,string)", +"224b5c72": "consume(address,uint256)", +"224bed07": "transferIndexed(address,uint256)", +"224c1a21": "getMyEthBalance(address)", +"224c1c9b": "getNonVestedBalanceOf(address)", +"224c4657": "createOrder(address[3],uint256[3])", +"224ccc49": "chainLastMessageHash(bytes32)", +"224d5d54": "wylouToken()", +"224dc278": "dis()", +"224e5efd": "DNACoin(address,address)", +"224e7462": "removeToken(bytes32)", +"224f127d": "LogNewWhitelistedAddress(address,address,uint8)", +"224f143a": "setme()", +"22500af0": "OwnershipTransfer(address,address)", +"22518a75": "getVotersCandidateVote()", +"2251a8a9": "isSubscribed(address,address,string)", +"22526635": "payOut(uint256,uint8,uint256)", +"22529fff": "getReferral(address,address)", +"2252d5c1": "exemptMeFromFees()", +"225386fe": "SimpleERC20()", +"2253fff1": "initialCongress(address)", +"22542fb6": "collectTokenPhaseStartTime()", +"225435c0": "detach()", +"22547931": "registerOperation(uint256,string)", +"22551da7": "double(address,bytes32,uint8,uint256)", +"22554f34": "getT()", +"22555bea": "UNITv2(address)", +"22556bd7": "createRound(string,bytes32[],uint256)", +"2255ad10": "RefugeCoin()", +"225640ab": "getOrCreatePreviousFeeWindow()", +"225682d1": "test_contractBalance()", +"2257406e": "getMemory(uint256)", +"2257defa": "removeCustomerFromBL(address,address)", +"2259315d": "TokenFactoryCN()", +"22593300": "Small(address)", +"2259d221": "LifeSet_005()", +"225a1d46": "PODH()", +"225a905f": "NewSubscription(address,address,uint256,uint256)", +"225b6574": "hasBase(address,uint64)", +"225c4011": "cyberEntry(address)", +"225c5567": "withdrawLeftTokens()", +"225ce00f": "_createAuction(uint256,string)", +"225cf990": "setAgriChainContext(address)", +"225cfd59": "addPromille(uint256,uint256)", +"225da7e5": "transferManagerFactory()", +"225f406a": "buyInSaturday()", +"225f9d7d": "stopIt()", +"225fce8d": "getGameByPlayer(address)", +"22609373": "calculateEthereumReceived(uint256)", +"2260b98b": "finalizeVoting()", +"226187dc": "maxPreICOTokenAmount()", +"2261b07f": "getConverter()", +"2261c6d9": "AllowedAddressAdded(address)", +"2262cd94": "wroom()", +"22636e65": "setContractValue(address,string,uint256)", +"2263ae04": "POHD31()", +"2263e8b7": "routingCodes(uint256)", +"2263f2c5": "createTokens1()", +"22643a47": "JokerCoin()", +"226454c1": "getGoldDataDocumentation()", +"22657697": "priceForStage(uint256)", +"2265931d": "transferToken(address,uint256,uint8)", +"2265a94b": "ValyutaTestCoin()", +"22665bc9": "setICO(address,uint256)", +"22666da6": "makeGuess(uint256)", +"226685ee": "Visit()", +"22673030": "SALE_START()", +"2267b2e3": "veredictum()", +"2267b30d": "removeFounder(address)", +"22686250": "index(int256,uint256)", +"2268a358": "changeMultisig(address)", +"226942e6": "RollEvent(address,uint256,uint256,uint256,uint256)", +"2269d2ec": "addNewPotatoCoinsForSale(uint256)", +"2269f1c9": "voteA(uint256)", +"226ac321": "updateTokenRate(address,uint256)", +"226bf449": "addPackage(string,address)", +"226d2f86": "keyEmployeeAllocation()", +"226dd769": "howManyEtherInWeiToChangeSymbolName()", +"226e2b91": "setPaycarnita(uint256)", +"226e2d10": "manual()", +"226ee47c": "set_validator(address)", +"227185d6": "Send1Get2()", +"2272b0af": "csoAddress()", +"2272df67": "changeFounderAddress(address)", +"2272f879": "walletThree()", +"227326b1": "proposalPassed()", +"22734c0c": "createRawDeposit(address,uint256,uint256,uint256)", +"22742564": "quickConvertPrioritized(address[],uint256,uint256,uint256,uint8,bytes32,bytes32)", +"2274346b": "vaultContract()", +"22758a4a": "whitelister()", +"22760877": "getCurrentHeroOwners()", +"22763ae1": "stopInEmergency()", +"22766696": "bidEnd(uint256)", +"2276774c": "finalizeRemainders()", +"2277466b": "voteToClose()", +"22776478": "getDistrict(uint256)", +"2279295d": "resetPhoenixes()", +"22798c10": "MANHATTANPROXYACPBLVD()", +"2279fa4c": "numPayments()", +"227a7911": "etherGetBase()", +"227ac0cf": "GetPerSellInfo(uint16)", +"227ada37": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"227bf6b8": "ethorseOracle(address,bytes32,string,bool)", +"227c74a7": "giveEntity(uint256,address)", +"227cade5": "maximumBet()", +"227d111e": "GetExistsCardList()", +"227d3fb4": "checkTxProof(bytes,uint256,bytes,bytes)", +"227d535f": "Wolk()", +"227dd788": "isFinal(bytes32[])", +"227e14e9": "currentDateTime()", +"227e26c4": "deleteChild(uint256)", +"227f592c": "TIXGeneration(address,address,address,address,address,uint256,uint256)", +"227f9633": "addOption(string,address,uint256)", +"227fb30b": "MosaiCoinContract()", +"227fda27": "BitcoinSamaritan()", +"2281411b": "allocateAndFreeze(address,uint256)", +"22817359": "_transferTokenToOwner()", +"22824bbd": "checkFind(address,address)", +"2282d9f2": "transferIsEnabled()", +"22848a0c": "TCTToken(uint256,string,string)", +"2284a6fa": "interest(uint8,bool,uint8)", +"2284b051": "gameRandon1()", +"2284e8fe": "push_or_update_key(uint256)", +"22855bf0": "CheckBest(uint256,address,address)", +"22855ef9": "registerTransfer(address,address,uint256)", +"22867d78": "repay(address,uint256)", +"2286b46b": "stakePathIDToAccountAndSubcourtID(bytes32)", +"2286b7de": "BONUS_ICO_STAGE1_PRE_SALE2()", +"2287d2ec": "donealready(uint256,address,bool)", +"2287dad2": "getTicketByHolderId(bytes32)", +"2287e96a": "withdrawEnabled()", +"2288193b": "testFundACampaign()", +"22888f35": "depositPremium(address[2],uint256[7],uint8,bytes32[2])", +"2288fad6": "earlyPurchases(uint256)", +"2289115b": "createPlanet(string,uint256)", +"228acf2f": "tokenTeam()", +"228b70d3": "registerNewPubKeyForHash(string,string)", +"228b7bf8": "Vasacoin()", +"228bbf45": "getItemsForSale(uint256,uint256)", +"228bff5a": "secToDays(uint256)", +"228c2df1": "hodl(address,uint256,uint256,uint256)", +"228c790c": "RudysToken()", +"228cb733": "reward()", +"228cc2aa": "maxQuanValues()", +"228ce144": "getKingdomType(string)", +"228d2820": "disableConversions(bool)", +"228d477f": "tokTakers(uint256,address)", +"228dff13": "setPepeName(uint256,bytes32)", +"228e41bd": "getdeptcount(uint256,address)", +"228e554a": "_refundBond(uint256,address)", +"228e892e": "icoStages(uint256)", +"228e92cf": "YuanLianToken()", +"229063fc": "discoveryCooldown(uint256)", +"2290d6e2": "entryFee_()", +"2290db50": "buyEnergy(address,address,uint256)", +"2290e106": "mintBuyerToken(address,uint256)", +"22923160": "updateWithdrawals(address,address,uint256,uint256)", +"229233b6": "FOR_FOUNDER()", +"22928b4d": "isIpoPeriodOver()", +"22928d6b": "removeUser(address,address)", +"22935caa": "setInitialAllocationUnlock(address)", +"22937ea9": "returnInt256(int256)", +"229460e7": "AdminstratorRemoved(address)", +"2294795d": "deuseth()", +"22949fb1": "TicketBought(address)", +"2294c48a": "initUsers()", +"2295115b": "adminWithdraw(address,uint256,address,uint256,uint8,bytes32,bytes32,uint256)", +"2295ee5b": "updateTokenBaseURI(string)", +"22968885": "getBalanceOfContract()", +"22969eac": "changeAuth(address)", +"22978e57": "unlockedAfter()", +"229824c4": "calculateTrade(uint256,uint256,uint256)", +"2298b9ce": "icoOver1()", +"229906b3": "updateStringSetting(uint256,string,address,string,string)", +"2299219d": "unlockTemporary(bytes32,address,bytes)", +"229a336b": "BodyMassIndex()", +"229a4978": "batFund()", +"229b04bf": "pauseMode()", +"229b5223": "weiScale()", +"229b9bc5": "buildingToUnitCount(uint256)", +"229cfc32": "calculateViralRewards(uint256)", +"229ddd9a": "foreignBuy(address,uint256,string)", +"229df5c6": "getSig(bytes)", +"229e0b16": "updateLoanAsLender(bytes32,uint256,uint256,uint256)", +"229eb105": "payaFinished()", +"229f3e29": "presaleEnd()", +"229f4caf": "minBetPrice()", +"22a036dd": "ico2Bonus()", +"22a15848": "btcOracle()", +"22a1ec8f": "setSomething(address[])", +"22a27f3b": "getDeveloperAddress()", +"22a3eab5": "withdrawn_balances(bytes32)", +"22a4381d": "fromTokenDecimals(uint256)", +"22a47143": "Tokensale(address,address)", +"22a4993c": "getReferedCount(address)", +"22a635c4": "Hodl(address)", +"22a7118d": "buyTokensFor(uint256,address,uint256,bool)", +"22a7533b": "deathData_a19()", +"22a7906f": "getOwnedPointAtIndex(address,uint256)", +"22a7ac34": "rake()", +"22a7ba2b": "totalSupplyCrowdsale()", +"22a8fb18": "freezelvlAccount(address,bool)", +"22a90082": "setInterval(uint256)", +"22a92c45": "sendTokensToHold()", +"22a993ca": "getKun()", +"22aa7196": "refund_window_end_block()", +"22aab53a": "temperatureRange()", +"22aacad5": "incCounter()", +"22aaea91": "setCurrentAuctionId(uint256)", +"22ab9433": "getPrecomputedEToTheHalfToThe(uint256)", +"22abb147": "ResolutionAdded(address,uint256,string,string)", +"22ac5f40": "fulfillEscrow()", +"22ad3b76": "fiatFee()", +"22ae634f": "getInvestment(uint256)", +"22aef13c": "requestChangeRequirement(uint256,string)", +"22af00fa": "bets(uint256)", +"22af1b27": "UnpackAccessDChain(bytes)", +"22af47e3": "tokensIssuedAir()", +"22b01343": "initializeAssetsToThisApplication()", +"22b05ed2": "getStatus(string)", +"22b08180": "purchaseVideoGame(uint256)", +"22b0e99a": "EARTHToken()", +"22b0f6ee": "getStatusOfPayout(uint256)", +"22b11169": "setWalletOwnerAddress(address,address)", +"22b152a3": "liquidateLosing()", +"22b19192": "imAlive()", +"22b1a226": "withdrawPaymentsRegistrar(address,uint256)", +"22b1f39c": "currentInvoice()", +"22b263b2": "nextPlayerID()", +"22b2678a": "hasBalance(address)", +"22b28aa4": "resetTimes(uint256,uint256)", +"22b2ea22": "registerHWCDep(string)", +"22b2f178": "minimumDifficultyThresholdWei()", +"22b36d88": "stopTde(bool)", +"22b45ddc": "EarlyBackerDeposit(address,uint256)", +"22b4891d": "capICO()", +"22b524fe": "getFreelancer(address,uint256)", +"22b53192": "arr(bytes32)", +"22b53b4b": "accruedLiq(address)", +"22b6fe9e": "getAgreementSetCount()", +"22b6ffca": "isSignedUp(address)", +"22b79623": "resetEpocum(address)", +"22b87601": "testRemovePending()", +"22b930f7": "VESTING_1_DATE()", +"22b954f8": "poolFeeRate()", +"22b96b63": "getIPFSHash(address,bytes32)", +"22b9b712": "BETTING_OPENS()", +"22b9bd35": "adjustPrizePoolAfterWin(uint256,uint256)", +"22bac568": "grantAdditionalShares(address,uint256)", +"22bae392": "setBenecifiary(address)", +"22bb06d8": "marketting()", +"22bb4f53": "retentionMax()", +"22bbad0b": "instruments(uint256)", +"22bc0d6c": "appendEncryptedBid(bytes32,uint256)", +"22bc3b8e": "getArgument(uint256)", +"22bc98b1": "basicPresaleRate()", +"22bcabcd": "TOKENS_ACCELERATOR()", +"22bd6d3f": "hired()", +"22bdf293": "grantVestedEDEX(address,uint256)", +"22be9342": "resolve(uint256,uint256,bool)", +"22beb9b9": "scheduleDoIt(uint256)", +"22bf1a2a": "addrLockUp()", +"22bf2e24": "ROLE_STAFF()", +"22bf9d7c": "slashTranscoder(address,address,uint256,uint256)", +"22bfba59": "drawRandomUnitWinner()", +"22bfdcbb": "RaffleStrangeLoop(bytes32)", +"22c07ad3": "indFutureDeposit()", +"22c1d0d2": "_withdrawAmount(address,uint256)", +"22c21e6c": "ZHIHUIGUO()", +"22c25c50": "Addr7()", +"22c25d8f": "set_presale_arbits_total(address,uint256)", +"22c2b9eb": "MakeOver(address)", +"22c30931": "calculateStep(uint256)", +"22c4d98f": "hasAllowanceToRecieveTokens(address)", +"22c4f168": "setTransferFeeProp(uint256)", +"22c51659": "getWhitelistedZone(address)", +"22c5b279": "addLayer(address,uint256,bytes32)", +"22c61e73": "createContractPoo(string)", +"22c66ae7": "decimal_precission_difference_factor()", +"22c69b15": "tradeDAI(uint256,uint256)", +"22c6aad9": "pigcoin(uint256,string,string)", +"22c6ae15": "mul(uint64,uint64)", +"22c83245": "clearBlackAccount(address)", +"22c8c2cc": "setEtherPriceAuditor(address,bool)", +"22c9427e": "recycleDividend(uint256)", +"22cacd6b": "setUSDBtc(uint256)", +"22cb1ec8": "teamTokensMinted()", +"22ccd000": "Blocksale(uint256,string,uint8,string)", +"22cd5ea8": "claimBet(bytes32)", +"22ce1f8f": "VixcoreToken2(uint256,string,string)", +"22ce61b2": "globalMetSupply()", +"22ce9bac": "numberOfVotesCast()", +"22ced0bd": "BTrustToken()", +"22cf1745": "USTToken(address,string,string,uint8)", +"22cf5011": "privilegedTransfer(address,uint256,bytes)", +"22cf981d": "proposeMintLocked(address,uint256)", +"22cfadc7": "isFundingNow()", +"22d0d31f": "OD1Coin(uint256)", +"22d122a9": "MyTestWallet7()", +"22d1bd32": "currentlyActive(bool)", +"22d2cfac": "getNextElement(uint256)", +"22d310f9": "setMarket2(address)", +"22d34212": "get_eth()", +"22d40b96": "defcon()", +"22d4e0fd": "pay2(address,uint256,address)", +"22d60d17": "tokensPerWei()", +"22d6eb87": "getInfo2(address,address,uint256)", +"22d7642e": "getScene(uint256)", +"22d85334": "isValidBicoinAddressPrefix(bytes)", +"22d8c8a8": "AddMaterial(address,uint256,uint256)", +"22d8cf5b": "CheckUserVote(uint8,uint8)", +"22d9f13e": "changeCUSD(address)", +"22da10b0": "checkPermissions(address)", +"22da3368": "IoMTToken()", +"22da5d04": "tokenCreationMaxPreICO()", +"22db2f7b": "processOffchainPayment(address,uint256)", +"22db4143": "BONUS_THRESHOLD()", +"22db61ab": "setunitDefenseMultiplier(address,address,uint256,uint256,bool)", +"22dbaf75": "test_oneInvalidEqBytes32()", +"22dbd0e4": "payComisionSponsor(address)", +"22dbf6d2": "reserveFeeToWallet(address,address)", +"22dc36e2": "processed(uint64)", +"22dc5a85": "ERC20address()", +"22dc8e71": "setIV_R1(uint256)", +"22dce86c": "getEscuelas()", +"22dd0d2c": "TEAM_KEEPING()", +"22dd9b8c": "templateSupply()", +"22ddde5b": "getLRCAmount(address)", +"22dde4cd": "secToNextMiningInterval()", +"22de2457": "clientVerifyKeyHash(bytes32,bytes32,bytes32,bytes32)", +"22df1caf": "grantPresaleTokens(address[],uint256[])", +"22e01192": "setPrice(string,uint256)", +"22e02b22": "ClaimEth()", +"22e113a3": "freezeTokens(address,bool,uint256)", +"22e12720": "MAX_HOLDERS()", +"22e256e2": "Addr5()", +"22e2b31f": "unlockAmount(address,uint256)", +"22e37189": "tklosses()", +"22e3989b": "multNumerator()", +"22e412ce": "strikePut()", +"22e465ee": "tolerantSub(uint256,uint256)", +"22e58557": "getFreeEggs()", +"22e5aa3a": "totalProportion()", +"22e5d0fa": "CoCoToken()", +"22e62038": "close_bank()", +"22e63356": "setValueAgent(address)", +"22e67e71": "maxTime()", +"22e6f1d0": "giveGoldenTicket(address)", +"22e77ff3": "plz(address)", +"22e78480": "getGoldDataSku()", +"22e803c2": "transferBounty()", +"22e84682": "isValidContributorAddress(address,address)", +"22e8571d": "legalsAddress()", +"22e8c87d": "getUserData()", +"22e8c8fc": "gamble(uint256,uint256)", +"22e8df23": "ICO_MINIMUM_CONTRIBUTION()", +"22e91248": "getLeaf(uint256)", +"22e95f6c": "payout_normalizer()", +"22e9afca": "cofoundersSupplyVestingTranches()", +"22ea2231": "purchaseTokens(address,uint256)", +"22ea2d96": "getBookInfo()", +"22eb2c02": "viewPreSaleRefunds(address)", +"22ebb3ac": "DieselPricePeg()", +"22ebc4a0": "fpartSigned(int256)", +"22ec1244": "shaBid(bytes32,address,uint256,bytes32)", +"22ed6302": "setCrowdsale(address,uint256)", +"22ed96a0": "getInvestorsFee()", +"22ee1db4": "uint32At(uint32,bytes,uint256)", +"22ee46db": "VapeToken()", +"22ef83ef": "AuthInit(address)", +"22efee2d": "get_participant_num_of_pro_rata_tokens_alloted(address)", +"22f06ae4": "isRecoverer(address)", +"22f0e6ae": "MarketingMethodAddress()", +"22f0f2f9": "unlockContract()", +"22f16c8d": "checkDividends(address)", +"22f256f8": "buyIOD()", +"22f2f89a": "allOperationsCount()", +"22f3e2d4": "isActive()", +"22f43bb5": "seedGame()", +"22f4596f": "_maxSupply()", +"22f48627": "SIACASHCOIN()", +"22f4afb5": "relayKingContract()", +"22f4e916": "GdprCrowdsale(uint256,uint256,address)", +"22f607f6": "Escrow()", +"22f6af6e": "TokensBought(address,uint256,uint256,uint256)", +"22f6fa7a": "contractorTransfer_Bcoupon(address,uint256)", +"22f709dd": "getEther(address,address)", +"22f77d2a": "Refundable()", +"22f7be85": "setFlight(uint16,uint16,uint256,uint256)", +"22f7d1f8": "normalFunc()", +"22f85eaa": "buyOrder(uint256)", +"22f872a7": "allocateBounty()", +"22f8a2b8": "getDayOfWeek(uint256)", +"22f905ec": "GetPartNum(uint8)", +"22f93f16": "updatingViaOracle(string)", +"22fa1ff4": "MAX_PROMO_GIRLS()", +"22fa85ca": "testFailRegisterContractAgain()", +"22faa5db": "removeURL(string,uint256)", +"22faf03a": "setInstructor(string,uint256)", +"22fb5303": "_transferFromWithReference(address,address,uint256,string,address)", +"22fb71f1": "getGoldStatusVendorverify(address)", +"22fb730b": "claimerOfTwitterId(uint256)", +"22fbde38": "qtdePokemons(address)", +"22fbf1e8": "addDeveloper(address)", +"22fc3149": "setWhitelistThresholdBalanceInternal(uint256)", +"22fec5e7": "VEToken()", +"22fefe31": "devuelvePuntuaciones(bytes32)", +"22ff1110": "CancelSellOrder(bytes32,address,uint256,uint256,address)", +"22ff79d8": "USA()", +"23017a3a": "rewardVaultContract()", +"2301e7b7": "isInPreSaleState()", +"23020be5": "SetfirstTTax(uint256)", +"23023aa4": "_doCatchFish(uint16,uint16,bytes32)", +"23024408": "fund(address)", +"2302c948": "EtherDank()", +"2303084b": "hasTransfers(address)", +"23037a85": "setNextPrice(uint256)", +"23040327": "oraclize_query(string,bytes[4])", +"230434d2": "Technology5GCrowdsale(uint256,address,address)", +"2304ede4": "ADSToken(address,address)", +"230614fb": "batchTransferToken(address[])", +"23063da2": "Hellina()", +"230662f8": "changeSaleManager(address,address)", +"23087c04": "_isWinnerOf(address,address,address)", +"230894f8": "transferTileFromOwner(uint16,address)", +"2308a41c": "amountRaisedBy(uint256)", +"23092560": "RecoverAddress(bytes32,uint8,bytes32,bytes32)", +"23098a9a": "burnAssessor(address)", +"230a1074": "getRegionCurrentImageId(uint256)", +"230a14c0": "RISK_LEVEL()", +"230a3c05": "constructWeaponTokenId(uint256,uint256,uint256)", +"230a8020": "getAddressValue(uint256)", +"230b1eb5": "totalReservedTokenAllocation()", +"230b9667": "getProviderInfoFields(uint256)", +"230b9da3": "parentContract()", +"230bd25d": "requestBounty()", +"230c50fe": "AuthorizePayments(bool)", +"230c96b9": "BuyTokensWithAffiliate(address)", +"230cf412": "test(uint256,int256,uint256,uint256,uint256)", +"230d3469": "canExchangeNum()", +"230d6ed8": "addCandidate(bytes32)", +"230dff66": "theclub()", +"230f49d9": "buy_token(address[])", +"230f6e83": "getCrydrViewStandardNameHash()", +"2310b384": "finalizeStake()", +"2311542e": "SSOrgToken(string,string,uint256)", +"2311bdb2": "isForgiven(string)", +"2311d39c": "dot()", +"2311dc0b": "postProduct(bytes32,bytes32,bytes1)", +"2311e345": "SaleFinalized(address,uint256)", +"23133115": "changeIncreaseStep(uint256)", +"23141fd0": "sendP(address,uint256)", +"23145ca0": "forceCheck()", +"23146c20": "getBuyerAddressPayment(address,uint256)", +"2314a5c8": "getReput(address)", +"2314aad6": "setExtensions(address)", +"2315550e": "add(address[],uint256[])", +"23158cae": "addBet(uint256,uint256)", +"23165b75": "acceptBidForPunk(uint256,uint256)", +"23169ec4": "medalName()", +"23169fca": "EDU_PER_ETH_EARLY_PRE_SALE()", +"2316d0cd": "deathData_a16()", +"2317880c": "requestArbitration(bytes32)", +"2317c28e": "mediaTokenIndex(uint256)", +"2317cd54": "_endRound()", +"2317ef67": "removeAsset(address,uint256)", +"2317f9f3": "setSanMaxAmount(uint256)", +"2318ffc7": "setRokBalance(address,uint256)", +"23191bf1": "finalizeByArbitrator(bytes32,bytes32)", +"231944e2": "moveUnits(uint256,uint256,uint256[])", +"23198b98": "setTokenHolderTribunal(address)", +"231a00cc": "changeBonusRate(uint256)", +"231a2be3": "minimumContributionPhase6()", +"231a439e": "setBlacklistDestroyer(address)", +"231ace68": "MiningRewardPerETHBlock()", +"231b0268": "firstBlock()", +"231b48aa": "settingsSetWeiPerMinToken(uint256)", +"231c1ce8": "unusedMethod(address)", +"231c1d43": "generate(uint256,string)", +"231cb6ab": "ENS_SUB_APP_NAME()", +"231d45a4": "addProduct(uint256,uint256,uint8,bytes32)", +"231d87e1": "competitorTeam(uint256)", +"231da56e": "getSenderValue()", +"231e0750": "register(bytes32,bytes32,bytes32,bytes32)", +"231e18a9": "pureFunc()", +"231fa805": "IsControledAddress(address)", +"23210c1a": "StfuToken()", +"23214fab": "maxProfitAsPercentOfHouse()", +"2321e625": "publicSaleSencPerMEth()", +"23221f1e": "getNbVersions(string,string)", +"2322f484": "balancesQuantity()", +"232397e2": "addAccount(uint256,uint16,bytes32,uint256)", +"2323a00e": "WagaToken()", +"23240d81": "getDailyTransactionVolumeReceiving()", +"23245216": "removeWhitelist(address[])", +"2324c67c": "getAllSignatureHashes(bytes4)", +"232523e8": "forceDivestOfAllInvestors()", +"23260a8b": "getPreviousPrice(bytes10)", +"23262615": "claimVaultOwnership()", +"23266dfe": "getOrganizersAddresses()", +"2326df93": "site_url()", +"2326ef22": "CreateDMSContract(address,bytes32,uint32)", +"2326faf9": "getResearchPerDay(address)", +"23285480": "RefundDeposit(address,uint256)", +"23290737": "logMarketTransferred(address,address,address)", +"2329b4f7": "CryptDash()", +"232a2c1d": "executeSignatures(uint8[],bytes32[],bytes32[],bytes)", +"232a3060": "setFundManager(address)", +"232a6b9d": "signed()", +"232c4d24": "sub_fCode(string,uint256)", +"232c6bab": "delIndividualCertificate(string,bytes32)", +"232cae0b": "last_offer_id()", +"232db034": "abortFunding()", +"232e57c1": "optionSupply()", +"232e7e91": "getproduct(uint256,uint256)", +"232e9051": "gunsFund()", +"232fd216": "getPoolDone(uint256)", +"233023de": "setCertifierInfo(address,bool,string)", +"23306ed6": "getMinimumBond()", +"2330f247": "isAuthority(address)", +"233104d6": "setPresidenteDeMesa(bytes32)", +"233120aa": "getChainyURL()", +"2331af61": "transferActive()", +"23338b88": "delMinter(address)", +"23343af3": "setConfigAddress(address,address)", +"2334623f": "totalETM()", +"23350e4a": "regainEther()", +"23355749": "IkokoToken()", +"2335d307": "IFSActive(address,uint256,uint256)", +"2337d9f1": "endOfferingImpl()", +"23385089": "emitApprove(address,address,uint256)", +"23389c5a": "docs(uint256)", +"2338c002": "_applyShare(address,address,uint256)", +"233907a3": "signedApproveAndCallSig()", +"23394e46": "TripAlly()", +"2339dd43": "HcftSale(address,address)", +"233a04ec": "setEditionSales(uint8,uint256)", +"233a74c9": "currentTokenDistribution()", +"233aacf9": "Announce_winner(address,address,uint256)", +"233ab10d": "setBaseEthCapPerAddress(uint256)", +"233b39c9": "_initCardDetails(uint8,uint256)", +"233b7451": "lastStakedFor(address)", +"233bf71e": "FOCToken()", +"233d264a": "startTicker()", +"233de126": "odds()", +"233dedf1": "averageBlockTime()", +"233e0877": "Purchase(address)", +"233e3220": "renounceSuperInvestor()", +"233e5d00": "WorldStage()", +"233ff4b2": "_fund(uint256)", +"23400cf6": "getLOCCount()", +"2340903d": "EEZcoin(address)", +"23412ede": "StorageEnabled(bool)", +"2341a1af": "receivePlayerInfo(uint256,address,bytes32,uint256,uint8)", +"2341d778": "giveTix(uint256,address)", +"2342293d": "collectionFees()", +"23437d50": "discountICO()", +"23447982": "replaceManager(address)", +"2344acdf": "pauseOffset()", +"2344b0e5": "url_white_paper()", +"2344e4ec": "getHint(uint256)", +"23452b9c": "cancelOwnershipTransfer()", +"2345fe81": "xperToken()", +"234638df": "PreICOHardcap()", +"23471d18": "setStakeAddress(address)", +"2348238c": "transferPrimary(address)", +"23483e45": "delRosenCertAdmin(address)", +"2348f1ee": "lockAttemp()", +"234917d4": "getCallTargetBlock(bytes32)", +"2349748d": "MenoroCashSupply()", +"2349e719": "processStepsByStep(uint256,uint256)", +"234a0ee7": "appHub()", +"234a6ed8": "initializeToken(address)", +"234ae1a0": "WallDirectory()", +"234b2cb4": "whitelistApplication(string)", +"234c0ae5": "combine(uint256[],uint256)", +"234c4bd9": "deployStepThree()", +"234e0056": "COIN_SUPPLY_ICO_PHASE_1()", +"234e5273": "tittyContract()", +"234e5f16": "TIMETHRESHOLD()", +"234ea19c": "lockRate()", +"234f1eb6": "JVToken(address,address,address,uint256)", +"234f9db2": "getBalanceIco()", +"235029ee": "SQT()", +"23509e69": "donkeysEligibleForFees()", +"2350e762": "participantWithdrawIfMinimumFundingNotReached(uint256)", +"2351299a": "createTokensToOwner(uint256)", +"2351baca": "fechVoteNum(address)", +"2351c2f8": "get_tokenReward()", +"2352551f": "bbPublicSaleWallet()", +"23525826": "maxNumbPerSubscr()", +"23526a34": "turnOffSale()", +"235304b2": "updateNextGameInitalMinBetSize(uint256)", +"23533138": "seedMarket(uint256,uint256)", +"23537880": "TestSale()", +"23539cd4": "mintResource(uint16,uint256)", +"235422fb": "_medalUnFreeze()", +"23548b8b": "maxCap()", +"2354b3ed": "requestSatsPrice(string)", +"2354bda7": "auditGuess(uint256,string,uint8,uint256,uint8,uint256)", +"2354ecf7": "balanceOfOnUpdate(bool)", +"2355300f": "unspentCreditsWithdrawn()", +"2355c602": "queryToAddress(bytes32)", +"2356f46a": "Kontlo()", +"23571ac9": "seenHereA(uint256)", +"2357cd3b": "invadeAddress()", +"23584a21": "initStats(string,address,uint256)", +"23586685": "recordSale(uint256,uint256)", +"23587733": "DEVELOPER_BONUS()", +"2359116d": "refill(address,uint256,string)", +"23594797": "createContractRegion(string)", +"235977ca": "ParadiseTokenSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"2359bd08": "reinvestTokens(address)", +"235b1eb7": "getOverRate(uint8)", +"235bd895": "_getGameInfoPart1(address,uint256)", +"235c002d": "transferOther(address,address,uint256)", +"235c279f": "addEmitter(address)", +"235c9603": "getNextTranscoderInPool(address)", +"235e5d47": "isRoundEnd(uint32)", +"2360f5a1": "openSaleSupply()", +"2362189a": "defaultExchangeRate()", +"23624a10": "tokenFee(uint256)", +"23626067": "thirdCheckpointPrice()", +"23626df7": "setContractAddress(address,address)", +"2362b26d": "Awards(uint256)", +"23637e60": "votePrice(uint256,bool)", +"23647398": "testThrowRetractNotOwner()", +"23655d7b": "Fantom()", +"236571e2": "determineWinnerEven(string)", +"2365ceb3": "SetWagerData(bytes32,bytes15)", +"2367e1ae": "getLengthOfMatches()", +"2367f35d": "crowdsaleEnded()", +"23685b97": "bpToken()", +"2368d215": "multipleAddToWhitelist(address[])", +"236a160e": "isValidIssuance(uint256,uint256,uint256,uint256)", +"236a8d9d": "registerNode(uint256,uint256)", +"236ae025": "distributionThreshold()", +"236be3e2": "BlockcloudToken()", +"236dd0e8": "paidBidAllocationFee(bytes32)", +"236e06f6": "exchange(address,uint256,uint256)", +"236e1a15": "PromotionCoinMintFinished()", +"236ebbae": "setAuditNodePrice(uint256)", +"236ed5a6": "getVoterProposalsCount(address)", +"236ed8f3": "closeAuction(uint256)", +"236eeff7": "compensate_log(uint256,address)", +"236f86a1": "remainingTokens(address)", +"236ffad4": "initOwned(address)", +"237032da": "isBacker()", +"237082bd": "getCertifiedDocCount(address)", +"2371bb4b": "SetNumber(uint64)", +"23724ffd": "TransferManagerApproved(address)", +"237297a4": "claimWinner()", +"2372996a": "CUSTOM_ERC20_CREATE_SERVICE_NAME()", +"23732ad8": "OSTestToken()", +"2373f091": "_setMinter(address)", +"23749f69": "donationsEndedTime()", +"23751e95": "addRedbullQuest(address)", +"237548fa": "seriesFactory()", +"2375766a": "unlatchContract()", +"2375da83": "setIntArr(uint256,address)", +"2376fe70": "approveProxy(address,address,uint256)", +"23773f81": "calcTapAmount()", +"2378fe2d": "FAPFundDeposit2()", +"23797ed9": "getAppByIndex(uint256)", +"237a35b2": "professionalName()", +"237a4a7f": "requestOneUUID(address,uint256)", +"237b5e96": "child()", +"237c2b22": "MCTCrowdsale(uint256,uint256,uint256)", +"237c72ac": "replaceDecoration(uint256,uint256)", +"237d2628": "issueTokens(address,uint256,uint8)", +"237e9492": "executeProposal(uint256,bytes)", +"237f142a": "ownersLen()", +"237f1a21": "hasIdentity(address)", +"23807da8": "getInvoicingAddressCount(string)", +"2380c39d": "backUtcoinOwner()", +"2382534a": "STR()", +"2383b074": "getSurplus()", +"23845e4b": "getPoolSize()", +"2384c058": "account3()", +"23855c18": "updateDeposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"23855cd3": "setBalanceForUser(bytes32,uint256)", +"23858314": "sizeOfProviders()", +"238604f0": "SuperContract()", +"23866438": "joinChannel(bytes32,uint256[2])", +"23867979": "getHealBalance()", +"2386d33e": "_tenuousToken()", +"2387c87d": "setTokensSold(uint256)", +"2387e75e": "RequestBitcoinNodesValidation(address,address)", +"23898138": "MoneyCoin()", +"2389a290": "joinGame(address)", +"238a3fe1": "transferDistribution(address,uint256)", +"238ac933": "signer()", +"238bf375": "PROMETHEUS_MAX_PRICE()", +"238bfba2": "getChannelWith(address)", +"238c5b06": "icoDiscountPercentageLevel1()", +"238d3590": "getTotalTheoreticalSupply()", +"238dafe0": "enabled()", +"238e5b14": "burnAmount(address)", +"238e9de7": "StopFuseaNetworkDistribution()", +"238efcbc": "acceptGovernance()", +"238f7743": "unlockSecondTokens()", +"238fcbf8": "DISCOUNT_TOKEN_AMOUNT_T2()", +"2390507b": "COMMUNITY_ADVISERS_STAKE()", +"239131af": "NEXUS()", +"2391ddf3": "handleLuckyPending(uint256)", +"2391f0b3": "isProtect(bytes32,uint8)", +"23924cff": "TeamLockingPeriod6Months()", +"23926732": "ifDestory(address)", +"23949cd1": "setNFTContractAddress(address)", +"2394a797": "makeHybridization(uint256,uint256)", +"2394cc40": "transferInternally(address,address,uint256)", +"2395e9b6": "specialAllowed(address)", +"23967d78": "FOUNDATION_HOLDER()", +"2397e4d7": "sellToken(uint256)", +"2397f92b": "KNDToken()", +"23985742": "STANToken()", +"23987690": "indFuture()", +"2398a6a6": "sendPrize(uint256)", +"2398b8fc": "SCHEMA_HASH()", +"2399a5af": "balanceAdd(address,address,uint256)", +"2399e1f2": "addPromotionalCompany(string,uint256,uint256,uint256)", +"2399f870": "updateFlipAndMDT(address,uint256,address,uint256)", +"239a2545": "totalNights()", +"239ab208": "notifyAssessors(uint256,uint256)", +"239aee06": "execute(address,address,address,uint256)", +"239b6dd1": "QUINToken(uint256,string,string,uint256)", +"239bb5a6": "getConstructorString()", +"239c02ba": "OPSToken()", +"239d339b": "updateStageByTime()", +"239da1a3": "SportStarMaster()", +"239da7de": "getServiceFeeDenominator()", +"239e7881": "GEBEC()", +"239e83df": "guardedArrayReplace(bytes,bytes,bytes)", +"239f26ee": "BethereumERC223()", +"239f29dd": "setConsensusPercent(uint256)", +"239fcf0f": "Balance(address)", +"239fd68f": "setCurrentPricePerWei(uint256)", +"23a08d97": "totalPreICOavailible()", +"23a1b159": "maxTimeBonusPercent()", +"23a1bd8f": "Dancoin()", +"23a1c271": "setPongval(int8)", +"23a1e00e": "openLeaderboard(uint8,string)", +"23a24a33": "setBAA(bytes32,address,address)", +"23a2725a": "LeS3coin()", +"23a27bcd": "checkProofOrdered(bytes,bytes32,bytes32,uint256)", +"23a31463": "setBlockLock(bool)", +"23a3335c": "BuufmanToken()", +"23a36d2b": "mintToken(address,uint256,uint256)", +"23a37c09": "addRNTBContribution(address,uint256)", +"23a3ad72": "checkRole(address,uint8)", +"23a50727": "endStage(uint256,uint256)", +"23a52674": "expandX()", +"23a58576": "zeroBool()", +"23a6b8ca": "currentBeneficiaryCap()", +"23a8792e": "ChangeTokenPrice(uint256)", +"23a8edb5": "LociBackend()", +"23a90e5e": "getCustomerTxTimestampPaymentMCW(address,bytes32)", +"23a9a156": "SNL()", +"23aa6a17": "issueTokenAndApprove(uint256,uint256,address)", +"23aa7e12": "controllerDelegate()", +"23aba14f": "iCapToken()", +"23abea43": "getPlayerKeys(uint256,uint256)", +"23ac3fd4": "getPOOL_edit_32()", +"23ac4b03": "addQuickPromoBonus(uint256)", +"23ac9ae2": "CcStandardToken(uint256,string,uint8,string)", +"23add736": "claim(uint256,uint256,uint8,bytes,bytes)", +"23adeb05": "OneChance(address,address,address)", +"23ae4438": "getLastRoundInfo(uint256)", +"23aea69d": "isNextBudgetPlanMade()", +"23aed228": "selling()", +"23aedc62": "startSale(uint256[],uint256[],uint256,uint256)", +"23afba86": "Lancer()", +"23b06313": "getPoolBonusFirstExpertFactor(uint256)", +"23b0abeb": "showPhaseInfo(uint256)", +"23b0bbea": "getBullsmasterReq()", +"23b0db47": "delegate_2x(address,uint256[],address[],bytes32[])", +"23b1131c": "unlockDate2()", +"23b11bb1": "getPropertyLastUpdate(uint16)", +"23b11d8d": "addProxy(address)", +"23b17715": "AddressDescriptionAdded(address,string)", +"23b1ed54": "getConstantName()", +"23b1f8e4": "lastPriceUpdateTimestamp()", +"23b2b48f": "addressToAccountMap(address)", +"23b364ab": "getAvailableTicketCount()", +"23b37bb6": "sqrt(uint64)", +"23b3af89": "addHolder(address,address)", +"23b3b704": "calculateUntaxedEthereumReceived(uint256)", +"23b3c771": "getFreeShrimp()", +"23b44cfc": "assignNewParcel(int256,int256,address,string)", +"23b493fe": "getUserFiatBalance(string)", +"23b5aa8d": "STAT()", +"23b5b257": "tokenHasFreeTrial(address,address)", +"23b62b75": "mainWallet()", +"23b6ce11": "buyDiscipleItem(uint256,uint256,uint256,uint256)", +"23b6fc8b": "verifyUrl()", +"23b715cb": "updateShare(address[],address,uint256[],uint256)", +"23b7b140": "setFreezTime(uint256)", +"23b7ec3b": "ownerOf(uint32)", +"23b7fc86": "count_token_holders()", +"23b80995": "saleOver()", +"23b872dd": "transferFrom(address,address,uint256)", +"23b8feb0": "safeMul_dec(uint256,uint256)", +"23b98f92": "getPOOL_edit_6()", +"23ba3420": "t_Michail()", +"23ba467a": "isLastRound()", +"23bb1f69": "prepareToScore(uint32)", +"23bb8022": "getCurrentRateByTokenSold()", +"23bb81ae": "transferSoldToken(address,address,uint256)", +"23bba494": "setContribPeriod(uint256,uint256,uint256,uint256,uint256)", +"23bc29a0": "systemEndingPrice()", +"23bcaae9": "newPost(string)", +"23bd4d7a": "organization()", +"23bd9914": "_calcReward()", +"23bda0ee": "MyCurrency()", +"23be45e2": "matchOrders(bytes,bytes)", +"23bef5dd": "storeWelfare(address,string)", +"23bf0425": "fastEnd()", +"23bf2973": "tgeSettingsPartFounders()", +"23bfc777": "changeRoundDelay(uint256)", +"23c0889a": "initMinerData()", +"23c105a2": "eliminateFrom(address,uint256)", +"23c1236a": "burnFromByAddress(address,uint256,address)", +"23c2460d": "rate(uint16,uint256)", +"23c2b4ea": "finishPREICO()", +"23c2de55": "SmartContractCasino()", +"23c32d74": "cstToMicro()", +"23c3dae7": "NewTranch(uint256)", +"23c4841e": "ToggleFreezeBuying()", +"23c4948c": "getDonator(address)", +"23c5a088": "updateCost(uint256)", +"23c5c55a": "buyImagePriv(uint256)", +"23c5e967": "mul2Throw(uint256)", +"23c639fe": "getback(uint256,uint256)", +"23c69d2a": "currentDividend()", +"23c6bc39": "addressThreshold()", +"23c6c98b": "activeShareholdersArray(uint256)", +"23c731f5": "isCanList()", +"23c79ab3": "CoinFuns()", +"23c850db": "registerGold()", +"23c860a8": "INTREPID_SHIP_PRICE()", +"23c89a00": "requestSignature(bytes32[8],bytes)", +"23c94353": "currentTokenBalance()", +"23c99826": "getDictJob(address,uint32)", +"23cadd34": "move(address)", +"23cafc3d": "voteNoLockByAdminBatch(address[],address[],uint256[])", +"23cb7b19": "_influenceAlgorithm(uint8,uint256)", +"23cba56f": "bonusProgramEnded()", +"23cc16be": "burnInvestorTokens(address,address)", +"23cc3496": "_setRunesValue11(uint256)", +"23cc75a8": "finalizeICO()", +"23cc7615": "userIdIndex()", +"23cc9a90": "addParticipant(address,address,address)", +"23cd5090": "registerToProvider(address)", +"23cd7cd5": "Model()", +"23cdd8e8": "log(string,bytes)", +"23ceb6d8": "mintTokenEscrow(address,uint256)", +"23d0601d": "getAccountIdFromSignature(bytes32,bytes)", +"23d17a40": "addrBRXPay()", +"23d1ab35": "donationReceiverLocked()", +"23d1b8eb": "etherPayout()", +"23d1c95e": "addProposal(string,string)", +"23d1fe56": "s22(bytes1)", +"23d24f24": "LogEscrowEth(uint256)", +"23d2691b": "addAuditRequest(address,string,uint256)", +"23d27633": "EtherLite()", +"23d2b3aa": "HaoCoin()", +"23d32d6a": "generatedBytes()", +"23d34f84": "setGuessAnswer(string)", +"23d44dee": "collectedSignatures(address)", +"23d533c8": "EBCBToken()", +"23d5a686": "getSpaceshipUpgradeCount()", +"23d669db": "setValidationClosed(uint256)", +"23d6b008": "assignedAmountToTheFoundation()", +"23d6c92f": "setFreelancerParams(uint256)", +"23d71b26": "mtrTokenFallBack(address,uint256)", +"23d73ca5": "test_invalidEmptyNotOne()", +"23d7caee": "BitMineToken()", +"23d7e089": "getPotCost()", +"23d808da": "getMatch(uint8)", +"23d80d3a": "IfContractRegist(address)", +"23d862ed": "getAddressLockedLength(address,address)", +"23d88efd": "preIcoTokenSupply()", +"23d9ea80": "getOfferPriceCandy(uint256)", +"23da9c4b": "WhiteListAccess()", +"23db3e50": "_checkAreaAndCategory(uint256,uint256,uint256)", +"23dbf825": "distributionComplete()", +"23dc1314": "failSafeLimit()", +"23dc14c0": "AdAgency()", +"23dc210f": "transferToAddress(address,address,uint256)", +"23dc33b9": "reward6()", +"23dc3f72": "_checkGrid(uint256,uint256,uint256)", +"23dc42e7": "query1(uint256,string,string)", +"23dca40f": "Submit(uint256,bytes32,uint16)", +"23dccbd6": "LogFollow(uint256,address,uint256)", +"23dd03c3": "getLLV_edit_23()", +"23dd523d": "unregisterMember(uint256)", +"23dd797b": "setESOP(address,address)", +"23dddaba": "simpleVotingDapp(bytes32[])", +"23de1915": "NewTicket(address,bool)", +"23de6651": "emitTransfer(address,address,uint256)", +"23defc77": "setHeir(address)", +"23df9df5": "_refund(uint256)", +"23dfed97": "emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"23e1d351": "buyKeyUseBalance(uint256)", +"23e1d8d0": "failedTimestampLength()", +"23e1f881": "PendingOwnershipTransfer(address,address)", +"23e25f7d": "sendReserveBalance(address,uint256)", +"23e26c43": "datestart()", +"23e375dd": "_computePrice(uint256,uint256,uint256,uint256)", +"23e3d7a9": "updateDescriptiveInformation(address,string,string,string,string,bytes20)", +"23e3fbd5": "depositOf(address)", +"23e4172d": "testValidationOfDecrease()", +"23e44848": "DPToken()", +"23e4d669": "getPlayerPortfolio()", +"23e53b2e": "setSiringAuctionAddress(address,address)", +"23e5942a": "initWallets(address,address,address,address)", +"23e5d13c": "declareWinner(address,bool)", +"23e5e822": "mintToken(int256,address,uint256,address)", +"23e5f1c5": "hour()", +"23e798e6": "getDocumentIdWithName(string)", +"23e7a900": "setIcoEnd(uint256)", +"23e7d9b2": "createInvoice(bytes32,address,uint256,string)", +"23e8cefc": "encodeIfElse(uint256,uint256,uint256)", +"23e957b6": "calculateScore(address)", +"23e9637f": "setSoftCapInCents(uint256)", +"23e9c216": "setBounty(address,string,uint256)", +"23eac4bd": "setTokenOwner(uint256,address)", +"23eb0197": "giveMemberAllowance(address,uint256)", +"23eb3831": "PurchaseCapChanged(uint256)", +"23eb861c": "unchainedMultisigVersionMajor()", +"23ec5939": "returnInvestoramount(address,uint256)", +"23ec8f62": "ownerUnlockFund()", +"23ecb66f": "getPreviousDate(bytes32)", +"23ecc4a1": "claimAmountSet()", +"23ecf108": "MartinKoToken()", +"23ed0a2e": "registerWorker(uint256,uint256,bytes32,bytes32)", +"23ed476f": "treasurySent()", +"23edfb89": "cancelSaleWhenPaused(uint256)", +"23ef2e4f": "stopPreIcoMint()", +"23ef2e56": "setBAI(bytes32,address,int256)", +"23ef604f": "removeOwnedNote(address,uint256,uint256)", +"23f02f56": "crowdEther()", +"23f0b2b6": "getProfile(address,string)", +"23f14e86": "setAutoAddress(address,address)", +"23f1dbe0": "minBidPercentage()", +"23f2cbb0": "sponsorGas()", +"23f3ad03": "ParminderToken()", +"23f4c025": "Cherrio()", +"23f5c64f": "get_data_owner(address,address,string)", +"23f614dd": "TinyOracleLookup()", +"23f64051": "setClaimToken(bool)", +"23f64140": "depositAgent(uint256,uint256,uint256[],uint256[],uint256)", +"23f685dd": "getUnclaimedHalvingSubsidy(uint256)", +"23f6e4fb": "Registered(address,address,uint256,uint256,uint256)", +"23f7dc66": "hasReadership(address,uint256)", +"23f806b7": "tokenAdvisoryBountyTeam()", +"23f809f6": "generateAddAddressSchemaHash(address,bytes32)", +"23f907d9": "MAXIMUM_ETHER_SPEND()", +"23f938ee": "isTransferLock(address,address)", +"23fa370d": "suspendedUntil()", +"23fa495a": "setFlatFee(uint256)", +"23fcdb20": "getRequiredSigs()", +"23fd0176": "destroyCredits(uint256)", +"23fd4524": "OMT()", +"23fe073e": "BancorQuickConverter()", +"23fe1da1": "purchaseWithETH(address)", +"23fe5b90": "hardCapFundingGoalInCents()", +"23fe6146": "pushIssuers(address[])", +"23fed09e": "hasEnoughFund()", +"23ff2af0": "setAttrs(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"23ffcc3e": "PenchantICO()", +"24008a62": "repayBorrowAllowed(address,address,address,uint256)", +"2400b582": "_issue(address,address,uint256,bytes,bytes)", +"2401db10": "sendFunding(address,uint256)", +"24021127": "_setOriginationFee(uint256)", +"2402598c": "BNSToken()", +"24026bfb": "getMarketOrderTrust(uint256)", +"2402ae57": "YudizCoin()", +"24032866": "checkExecutionAuthorization(address,uint256)", +"24038339": "updatePriceAndDenominator(uint256,uint256)", +"24038d2e": "purchaseArmy(uint256)", +"2404608f": "getSignatures(string)", +"24052927": "velReduction(int256)", +"240557b8": "cleanTokensAmount(address,uint256)", +"2405b1a3": "SwissBit(uint256)", +"2405d03e": "refundTokensPurchase(address,uint256)", +"2405e3c6": "initial_supply()", +"24064617": "getMom(address)", +"2406cedb": "setPackageOwner(bytes32,address)", +"2406e626": "createPool(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"2406e9fa": "playRandom(address)", +"240705eb": "withdrawWithFee(address,uint256,uint256)", +"24070feb": "_create(address,uint8,uint8)", +"240860f1": "setHasCommissionerAuction(uint32)", +"2408771e": "validateInvestmentGroups(address[])", +"240961db": "showPoolOwner(uint256)", +"2409dfa2": "drawback()", +"240ad8bd": "applyAsProvider(string,string,string,string)", +"240bd9e6": "DcorpProxyCreated(address,address)", +"240c2709": "toReserved(address,uint256)", +"240cf1fa": "changeOwnerSigned(address,uint8,bytes32,bytes32,address)", +"240dfd6e": "stopEnrollment()", +"240e07e0": "impl_apply4Redeem(address,uint256)", +"240e0b2e": "JinKuangLian()", +"240ecad5": "transferViaProxy(address,address,uint256)", +"24108475": "vote(uint256,string)", +"2411ca69": "startPrivatesaleDate()", +"2411e6a3": "NonEmissiveToken(address,string,uint8,string,string,uint256)", +"2412bdb8": "exchange(address)", +"2413372d": "TestETCCoin()", +"24141f14": "CRYPTOHEDGECoin(uint256,string,string)", +"2414b63e": "CasinoBank(uint256,address)", +"2414e134": "NEWCICO(address)", +"24153b73": "Tosh(uint256,string,uint8,string)", +"241673e8": "withdrawTokenToFounders()", +"24167745": "ShamelessUETRipoff()", +"2417f31d": "maxPresaleTokens()", +"2419217e": "teamAddresses(uint256)", +"2419ef4d": "Coverage()", +"241a2305": "MultiTransfer(address,address[],uint256[])", +"241b701f": "openPot()", +"241b88b6": "threeMillionTwoHundredThousand()", +"241d1108": "nextDerivativeToken()", +"241d2c76": "getCount(address,string)", +"241d7aea": "BeautyCoinToken()", +"241de9e9": "proxy(address,address,uint256,uint256)", +"241e0fa0": "updateBytes20inBytes(bytes,uint256,bytes20)", +"241ea03c": "Pregnant(address,uint256,uint256,uint256)", +"241f675d": "CMO_SHARE()", +"24206c2e": "updateTokenAddress(address,address)", +"2420703e": "transfer_tokens_through_proxy_to_contract(address,address,uint256)", +"2421101f": "returnAddress(address)", +"2422224e": "signatures(bytes32)", +"24223a3c": "allowanceItem(uint256,uint256,uint256,address)", +"2422d991": "getADR()", +"2423a088": "UNKNOWN_TYPE()", +"24241ebc": "challengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"2424276c": "freezeMultiAccounts(address[],bool)", +"24248168": "getBracketScore(bytes8,bytes8,uint64)", +"24250852": "mintToPublic(address,string)", +"2425ce3e": "upgradeTank(uint256,uint8)", +"2426169a": "_getSwapType(bytes32)", +"24263f77": "mintICOTokens(address,uint256)", +"24265000": "canCollect(uint16,uint16,uint8)", +"24265408": "FaucetManager(address,address[])", +"242654a2": "transferEnable()", +"242655d4": "prefixedEncode(address)", +"24270d1e": "get_arbits_max_contribution(address)", +"24272479": "_finishBet(uint256)", +"24280cc4": "createPuppySaleAuction(uint256,uint256,uint256,uint256)", +"24285ade": "AlpineMegalith(uint256,string,uint8,string)", +"24294b1f": "startFirstRound()", +"2429b755": "isPrivateSaleRunning()", +"2429d61a": "isOnSale(uint32,uint64)", +"2429ee2a": "isBountyPayStage()", +"242a0087": "getParents(uint256)", +"242a60b5": "withdrawValue(bool)", +"242a7450": "validateTenant(address,bytes32,uint256)", +"242aa460": "presaleInvestors(address)", +"242aeac1": "DiscoverCoin()", +"242b0a73": "rewardPayedOf(address)", +"242be01a": "_setAppIfNew(bytes32,bytes32,address)", +"242c721e": "testSetOrganiserUsingDeployedContract()", +"242c9ce9": "_burnFrom(address,address,uint256)", +"242ce07b": "frozensTotal(address)", +"242d1259": "WeiWeiToken(address,uint256)", +"242d7dba": "totalAmountRaised()", +"242d9f69": "getOraclizeWinnerGasFee()", +"242db433": "getMarketManagerAddress()", +"242ddf37": "NewBook(bytes32,address,uint256)", +"242de145": "TokenCreationContract()", +"242ed69f": "setActiveTranscoders()", +"242fc36e": "cashback()", +"243056d6": "writeMerchandises(uint256,string)", +"2430731f": "cancelRecurringBillingInternal(uint256)", +"2430d881": "getLastAction(address)", +"2431676c": "getTotalWinsCount()", +"24318b5c": "numberOfHosting(address)", +"2431f164": "process_payment()", +"243222c0": "processFailedVerification(bytes32)", +"2432282d": "getLoanCountForAddress(address)", +"24323110": "McFlyCrowd(uint256,uint256,address,address,address,address,address,address,address,address,address,address,address,address,address)", +"2432eb23": "testThrowRetractLatestRevisionNotUpdatable()", +"2433c978": "setupOwners(address[])", +"2433f617": "getIIPTotalSupply()", +"24349551": "deleteContract(uint256,uint8[],bytes32[],bytes32[])", +"2434cf10": "UseBySoftware(address)", +"2434ec3e": "declareLost(address,bytes32)", +"243527a2": "addID(address,bytes32)", +"24355ea6": "isA(address)", +"24359879": "ownerAt(uint256)", +"24361cec": "picops_block()", +"2436219c": "doubleEntryPrice()", +"243669ad": "totalOwners()", +"2436b1d2": "NUM_COUNTRIES()", +"2436d4e3": "TwoStandardToken(uint256,string,uint8,string)", +"2436d5f8": "StorageBase(address)", +"2437160f": "TFTOKEN()", +"24372fa3": "SignCurrentVersion(string)", +"24378482": "bnOf(bytes32,bytes32)", +"2437e1c2": "setPresaleParams(uint256,uint32,uint32,uint256,uint256,uint256)", +"24386b3e": "testMultitransfer3()", +"243870bd": "createChannel(string,bytes,address,address,address[],uint256[],address,uint32[])", +"2438b674": "window2TokenExchangeRate()", +"2438db59": "setServices(address,address)", +"243a28eb": "returnedWei(address,uint256)", +"243af82d": "stageBuys(address)", +"243b22cf": "setGameResult(uint256)", +"243b2a39": "createDispute(bytes32,address,address,bytes32)", +"243c33a1": "testCreateShortId()", +"243d230c": "dateTo()", +"243d3827": "getRewardInfo(uint256)", +"243d51b4": "betD()", +"243dc8da": "getFoo()", +"243e280b": "publish(string)", +"243eb89f": "endIcoMainSale()", +"243f6b58": "removeKYC(address)", +"243f6e0c": "change_active(uint256)", +"243feeb0": "ADDR_TKG_ASSOCIATION()", +"24415953": "lengthEqual(int256[],uint256,string)", +"244159af": "getPriceOneToken()", +"24417f39": "getCostForHealth(uint8)", +"24425cbf": "TEST_CONTRIBUTION()", +"24429e34": "OliveGardensResort()", +"2442cfec": "putBtoWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"2442e1cb": "getMilestone(uint256)", +"24434852": "buyOnBehalfWithCustomerId(address,uint128)", +"2443a30e": "ChangeInsurerOperationEvent(address,uint256)", +"2443f0ae": "derivePayoutDistributionHash(uint256[],bool)", +"24444749": "NUM_POTATOES()", +"2444d352": "setWhitelistOff()", +"24452f44": "tryBuy(uint256,uint256)", +"24453ed6": "getCustomerTxAmountMCW(address,bytes32)", +"24454fc4": "getTranscoderEarningsPoolForRound(address,uint256)", +"24455e7d": "createNetwork(string,string,uint256,uint256,uint256,uint256,uint8)", +"24457036": "LockChainFundDeposit()", +"2445caf1": "ERC20Token(uint256,string,string,uint8)", +"24463cbe": "AddressDailyReward(address)", +"2446e1de": "icoClose()", +"2447fe10": "initBridge()", +"2448fe2f": "redTeamSupply()", +"24496026": "removeQuoter(address)", +"244967b3": "start_game()", +"24497829": "ethFundAddress()", +"2449dd55": "sendCommission()", +"244b252a": "SaturnToken()", +"244b34c5": "Stage2Deadline()", +"244bfa6b": "buyCelebrity(uint256)", +"244c23ee": "Token(uint256,string,uint8,string)", +"244c757a": "getCurrentIcoNumber()", +"244c91d4": "setMaxIssuers(uint256)", +"244c96a1": "compareOrders(uint128,uint128,uint128,uint128)", +"244cb924": "EnableSelling(uint256)", +"244cee6d": "helloWorldWeb()", +"244d04f5": "finalizeTokensale()", +"244dad09": "createdUser(bytes32)", +"244ded7a": "ChangeOwnership(address)", +"244e0c87": "balanceOF(address)", +"244eab9e": "lovelock_price()", +"244eba55": "frozenDaysForBounty()", +"244f4894": "getWithdrawed(address)", +"244f828a": "SetHFee(uint16)", +"244fcd03": "removeRelease(bytes32,string)", +"24500e05": "tokenAdvisorPartners()", +"24503ab0": "setDefaultTransferGas(uint256)", +"24506e2a": "KoalaChain()", +"24516000": "getPOOL_edit_26()", +"24519a6a": "takeFee(address,address,uint256,uint256)", +"2451a899": "isSuccess(uint256)", +"2451b3d8": "accessProvider()", +"24528499": "_getSettingVariables()", +"24534192": "addMutagenFight(uint256,uint256)", +"2453759a": "setNoDataSubcontract(address,uint256,uint256)", +"2453ffa8": "orderCount()", +"24541f78": "getTransferProxy(uint32)", +"24545f82": "LULUToken()", +"2454d1f0": "incFightWin(uint256)", +"24562747": "tokensPerETH()", +"245678d6": "MINBET()", +"24571783": "NESTFAME()", +"2457d765": "CHSC()", +"2458d472": "getCurrentStage(uint256)", +"2458d606": "exchange(address,uint256,string,uint256)", +"2458f2a8": "swarmTree(uint256)", +"2458f679": "instContWallet()", +"245a03ec": "scheduleSetIt(uint256,uint256)", +"245a30ec": "setDataAuction(address)", +"245a367c": "GetParticipant(address,address)", +"245a6f74": "isProxyLegit(address)", +"245a810b": "addMetaData(bytes32,bytes32,bytes32,bytes32[],bytes32[])", +"245ae4a0": "slashUsername(bytes,uint256)", +"245b565d": "ballotEncryptionSeckey()", +"245ba519": "addVerifier(address,address)", +"245ccdb7": "setFeePrice(uint256)", +"245d1314": "signUserChange(address)", +"245d5556": "_deleteEntry(bytes32)", +"245e22de": "transferDirectly(address,address,uint256)", +"245e70f0": "_commitBallot(bytes32,bytes32,bytes32,address,uint64)", +"245f57a9": "asyncSendSilently(address,uint256)", +"245fa2ab": "newBankManager(address)", +"24600157": "CUBES()", +"2460053e": "LegionToken(uint256,string,string)", +"24600fc3": "withdrawFunds()", +"2460f09d": "MarketContract(string,address,address,uint256[5])", +"24612b5d": "GenbbyToken()", +"24619da7": "RechargeMain(address)", +"24627547": "vestingFunc(uint256,uint256,uint256,uint256,uint256,uint256)", +"2462a0d5": "funcFromC1()", +"2462f6f1": "setFadeoutStarts(address,uint32)", +"2463de5a": "getPastWinnerTimestamps()", +"24642510": "rechallengePossible()", +"24645254": "getBalance(uint8,address)", +"24645c5a": "totalTokenSale()", +"24646ce4": "getBuySellSum()", +"2464a69f": "_computePublisherCut(uint128)", +"24652ba2": "PeerBudsToken()", +"24664106": "mintRep(int256,address,uint256)", +"24667568": "ORGANIC(uint256,string,uint8,string)", +"24675116": "PK(uint8,bytes32)", +"24676ae3": "SmzdmToken()", +"246982c4": "getPerson(uint256)", +"2469a846": "terminateCrowdSale()", +"2469c14e": "setState(address,uint256)", +"246a3234": "getEthChfPrice()", +"246a44f8": "isNeedCloseCurrentGame()", +"246c01cd": "tryUpgrade(uint32,uint8)", +"246c02e6": "check_depth(uint16)", +"246cbacc": "test_twoInvalidEqAddress()", +"246d4098": "openToThePublic()", +"246d41a9": "incrementTotalVoters()", +"246eb968": "deleteUri(uint256)", +"246f02bb": "tickets_bought(string,uint256)", +"246f0ca4": "KuaiKanToken(uint256,string,uint8,string)", +"246f1e17": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint8)", +"246f8b96": "removeOwner()", +"247121e3": "MakeAdministrator(address)", +"2471fa1c": "_building(uint256)", +"24724b5b": "changeAmisWallet(address)", +"24743d40": "f1(bytes32)", +"24749b59": "bonus(uint256)", +"2474a21c": "collectedEther()", +"2474e236": "TOKENS_MAXIMUM_SUPPLY()", +"24752467": "getParticipantPublicKey(bytes32)", +"247534cf": "WrapperLock(address,string,string,uint256,address,bool)", +"2475a9b3": "UTXORedeemed(bytes32,uint8,uint256,bytes,bytes,uint8,bytes32,bytes32,address,uint256)", +"24788429": "removeExecutor(address)", +"24788ed9": "ledgerContractAddr()", +"247956f1": "withdrawEtherInBatch(address[],uint256[])", +"24797d1b": "decreaseThreshold(uint256)", +"247ab51f": "markAsProcessed(uint256)", +"247aebbb": "tokensup(uint256)", +"247b127d": "MiIToken(uint256,string,uint8,string)", +"247b188b": "icoTotalSupply()", +"247b3bd6": "BitCronus()", +"247baa3e": "ALH2()", +"247bb39c": "privateOfferingCap()", +"247bb432": "test_addAndRemovePermissions()", +"247bbed7": "borrowTokenFromEscrow(uint256,uint256,address,bool)", +"247c6c70": "priceLC()", +"247cf1aa": "lengthNotEqual(bytes32[],uint256,string)", +"247cff43": "freezingManager()", +"247ecab5": "bonusDrop(address,uint256)", +"24804cef": "Deed()", +"24806d4a": "getBounsInRound(uint256)", +"2480d9e6": "saleAirdrop(address,uint256)", +"2481325a": "ExtremeCoin()", +"2481851a": "finalizeName(address,string)", +"24819384": "btycaddmoney(address,uint256)", +"2481c51c": "includesGblock(bytes32)", +"2481f92c": "setClockAuction(address,uint256)", +"2483761f": "buy1ktickets()", +"24841bbd": "interfaceBurnTokens(address,uint256)", +"24845131": "proclaimDeath()", +"2484a023": "verifyTetherCurrency(address,uint256,string)", +"24850e10": "releaseFunds(bool)", +"24851914": "isTeam(address)", +"2485484d": "clearGenVaultAndMask(address,uint256,uint256,uint256)", +"24854bd8": "updateThirdExhangeRate(uint256)", +"248582b0": "receivePaymentForGoodsSoldEarly()", +"24860443": "toBytes2(bytes,bytes,uint256)", +"24863354": "saleOverReachMaxETH()", +"24876434": "addPriceTier(uint256)", +"24880bcb": "getTierUnsoldTokens(uint256)", +"24884fc2": "startPeTime()", +"24887c04": "SieChain()", +"24888154": "Buy(uint64)", +"24888b4a": "isVoterLocked(address)", +"24889e37": "removeAmountForAddresses(uint256[],address[])", +"2488fd55": "countPlayersInPosition()", +"24896a47": "signPA(uint32)", +"248b0dba": "toBytes16(bytes,bytes,uint256)", +"248baabd": "FUND_ADDR()", +"248c4439": "setFunctionOnePrice(uint256)", +"248c6380": "_tokenBankrollBuyIn(uint8)", +"248d14eb": "allowPriceUpdate()", +"248dd407": "Transfer(uint256)", +"248e150a": "getFirstAuctionsExtendableStartDate()", +"248e1993": "setMinTarget(uint256)", +"248e4dd4": "pank13()", +"248e86e6": "ProjectToken(uint256,string,uint8,string)", +"248ec326": "DAILY_LIMIT()", +"248fcccc": "CRSAccount()", +"24900d7c": "initializeAddresses(address,address,address,address,address)", +"24902e24": "LOG2_E()", +"2490be24": "exchangeEurToEth(uint256)", +"2490e13f": "editPieceData(uint256,string,string)", +"2490e16e": "getDirectBoughtTokens()", +"24924bf7": "maxParticipants()", +"249292b9": "testUnlockedDay()", +"2493097b": "finalizeDestruction()", +"24932186": "enterOrder(uint128)", +"24937124": "fetchPaidOrdersForMerchant()", +"2493a2f2": "setBonusTokenRateLevelOne(uint256)", +"2493d006": "openWeek()", +"2493d669": "AllowanceGranted(address,uint256)", +"24941147": "cancelProject(uint256)", +"24943c7d": "resolveDispute(bytes16,address,address,uint256,uint16,uint8,bytes32,bytes32,uint8)", +"2494aef9": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE2()", +"2494e267": "CXLExchangeRate()", +"24953eaa": "removeAddressesFromWhitelist(address[])", +"249559ad": "computeVoteOutcome(uint256)", +"249586f2": "editPayoutSetting(uint8,uint16)", +"2495c0ce": "stopVote()", +"24968a70": "getHomePost(uint256)", +"2496a431": "robPantry(address,uint256)", +"2496b796": "sellMyTokensElixir()", +"249830d8": "setUnclaimedPlotPrice(uint256)", +"24992680": "SelfKeyCrowdsale(uint64,uint64,uint256)", +"24999c9c": "bonusSignalValue()", +"2499a533": "Purchase(address,uint256)", +"249a1120": "licenseTermsMaxCostPerSec(bytes32,bytes32)", +"249a5438": "getInvestorsAndBalances(address)", +"249aa292": "preIcoPrice()", +"249b4d0b": "removeTrustedIssuer(address,bytes)", +"249b4d4f": "transferContractUser(address)", +"249b7c19": "presaleEndTime()", +"249bc291": "transferMintMaster(address)", +"249cb3fa": "canImplementInterfaceForAddress(bytes32,address)", +"249eae4d": "addInvestors(address[],uint256[])", +"249f1f22": "insertNodeSorted(uint256,address)", +"249f77ef": "CancelSimpleOffer(uint256)", +"249f7aa0": "exchangeRateChangesBlock()", +"249ff838": "getAddressByNames(bytes32[])", +"24a039c7": "CBToken(address,uint256)", +"24a084df": "sendValue(address,uint256)", +"24a12edf": "getAuctionIdForUserAndIdx(address,uint256)", +"24a1871e": "LOL2()", +"24a1c1e0": "addCertificateAndBind2Wallet(address,uint256,bytes32,bytes32)", +"24a1cd1e": "currentCoefficient()", +"24a20a25": "feed10(uint256)", +"24a23361": "getTeamAttribute(uint8,uint8,uint8,uint32[11])", +"24a27bd2": "tokensForAdvisory()", +"24a30e46": "m_claimingIsActive()", +"24a38383": "WhitelistedSmallCap(address,uint256)", +"24a3b013": "attachToToken(address)", +"24a434eb": "openCarousel()", +"24a43c51": "releaseMultiple(address[])", +"24a4411d": "DecoderTester(address,address,address,address,uint256)", +"24a47aeb": "merge(uint256)", +"24a4aff6": "adaCoin()", +"24a684e1": "get_perms(bytes32)", +"24a69051": "allowClaim(address)", +"24a6a409": "MINTY()", +"24a6ab0c": "freeSupply()", +"24a73e5f": "decreaseAllowance(address,uint256,bool)", +"24a779ca": "PELOMemberMap(address)", +"24a7d277": "removeAddressFromBlacklist(address,address)", +"24a80b31": "BusinessUnion(uint256,string,uint8,string)", +"24a852c6": "unset(bytes)", +"24a8e11d": "isAuthorized(address,address,bytes32)", +"24a9d3d9": "callAndReward(string,string,uint256)", +"24a9d853": "feeBps()", +"24aa62fe": "setObjectionPercent(uint256)", +"24aa6dd1": "ProxyManagementContract()", +"24aa93b9": "getVestedAdvisorTokens()", +"24abfc02": "getTournamentThresholdFee()", +"24ac4df1": "cancelNewOwnersCountRequest()", +"24ac4e65": "getServerUserNumber(address)", +"24accfa3": "refundMoney(uint256)", +"24acec2b": "PayeeWithdrawInterest(address,uint256,uint256)", +"24ad35e1": "PisangChain()", +"24addfc0": "swapMe()", +"24ae84cc": "participateCrowdsaleInvestor(address)", +"24aee933": "usePower(uint256,uint8,uint8,uint8,uint8[176])", +"24af4cdb": "setNewUserState(string,bytes,string)", +"24aff74d": "Debit(address,address)", +"24b04905": "gift()", +"24b06a96": "getAllElectionsOfOrganiser(address,address)", +"24b07165": "get_property_facility(uint256)", +"24b0ff0f": "approveTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"24b1905b": "sendFirstBatch(address[],uint256[])", +"24b19da5": "TokenDistribution(address)", +"24b1a2fa": "disableArbiter(address)", +"24b1aa5c": "domain_build(address,uint16,uint8,uint8)", +"24b1babf": "claimEarnings(uint256)", +"24b1bfdf": "resetToken()", +"24b27fc8": "CoquiToken()", +"24b2c2f6": "GYUToken()", +"24b33f5d": "_auction(uint256,address)", +"24b35ef2": "mintTokens(address,uint256,uint8,bytes32)", +"24b3940a": "sayGoodBye()", +"24b492d7": "SetInitData(uint256,uint256,uint256,uint256,uint256)", +"24b4cee0": "openBatch(uint256)", +"24b4ec3d": "buyOwn(address,uint256)", +"24b4fc8e": "closeChannelWithoutReceipt()", +"24b508a3": "listByGroup(string)", +"24b50e43": "getMsgHash(address)", +"24b51369": "tgrSettingsPartFounders()", +"24b570a9": "totalPot()", +"24b5c134": "numCities()", +"24b5efa6": "RewardClaimed(uint256,address,uint256)", +"24b6b8c0": "_safeTransfer(address,address,uint256,bytes)", +"24b6f7d3": "TestBathTx(uint256,uint8,string,string)", +"24b72667": "buyprices()", +"24b77f05": "acceptCounterStack(bytes32,bytes32)", +"24b79a1c": "ICO_PHASE3_BONUS_PERCENTAGE()", +"24b82a76": "voterReward(address,bytes32,uint256)", +"24b89fa7": "unlockStepLong()", +"24b8fbf6": "register(address,bytes)", +"24b94ac6": "atto()", +"24ba1a46": "isSpawnProxy(uint32,address)", +"24ba506d": "getNumberOfTransactions()", +"24baeb12": "initCrowdsaleToken(bytes32,bytes32,uint256)", +"24bb49d6": "balanceMinusFeesOutstanding()", +"24bb7734": "mainSaleDuration()", +"24bb7c26": "pausedPublic()", +"24bbd049": "mintOpen()", +"24bc4e92": "QueenXChain()", +"24bcdfbd": "tradeFee()", +"24bce60c": "freeze(address,uint256)", +"24bdaf95": "about(uint256)", +"24bdf96a": "getUserRefBalance(address)", +"24c034a7": "ERC721Auction(address)", +"24c05c72": "requestLoans(uint256)", +"24c06d7d": "buyBreeding(uint256,uint256,uint256,bool)", +"24c0db84": "ico1receivedTotal()", +"24c12bf6": "code()", +"24c1f9c7": "stage_3_add()", +"24c2362b": "buyCrySolObject(uint256)", +"24c30182": "BleedFomo()", +"24c31975": "increaseJackpot(uint256,uint256,uint256)", +"24c33d33": "round_(uint256)", +"24c37507": "getMinBet()", +"24c4c9e4": "getCurrentPRETDEBonus()", +"24c4e3b9": "getPatientHealthData(address)", +"24c55380": "TicketPurchase(uint256,address,uint256)", +"24c65927": "createNewAuction(string,uint256)", +"24c65f35": "updateRefundGas()", +"24c6ef60": "SafeTokenTransfer()", +"24c74c1d": "LogClaim(address,uint256,uint256,uint256)", +"24c74c78": "certify(bytes32)", +"24c91c1b": "isDataResponseValid(address,address,address,string,bytes)", +"24c93343": "error(string)", +"24c9bf5e": "Prizes()", +"24ca77e5": "teamNum()", +"24ca984e": "addRouter(address)", +"24caf5e1": "sale_address()", +"24cb015a": "_ONE()", +"24cb57dc": "whitelistEntries(uint256,uint256)", +"24cc35a6": "_isTeam()", +"24cd2ae4": "beneficiaryUserIds(uint256)", +"24ce2562": "updateGameSpecifics(uint256,uint256,uint256,uint256)", +"24ce2917": "create(address,uint256,uint256,address,address)", +"24ce9d27": "sellOrder(address,uint256,uint256)", +"24cee3d6": "Change(address,address,address,uint256,uint256)", +"24d0cc0f": "getPayouts(address)", +"24d16a4d": "makeUnderlier(bytes32,address,int256)", +"24d1c28b": "changeVoteRules(uint256)", +"24d29cfb": "_removeSigner(address)", +"24d3048d": "cancelNode(string)", +"24d30d54": "enableMerge(bool)", +"24d3eaf3": "bonusEndTime333()", +"24d427a9": "print(address)", +"24d4e90a": "ln(uint256)", +"24d5336a": "deicmals()", +"24d6169c": "startLockPeriod()", +"24d6d601": "voteFor(address,uint256)", +"24d70dea": "hasEntered(address)", +"24d7378a": "m_totalTokens()", +"24d7806c": "isAdmin(address)", +"24d86f00": "decreaseStake(uint256,uint256)", +"24d89171": "changeNeedFightToAdult(uint256)", +"24d97a4a": "killme()", +"24da48a3": "updateMaxAllocation(uint256)", +"24da569a": "AGToken()", +"24daddc5": "setRestricted(bool)", +"24db1f50": "masFreezedTokens(address[],uint256[],uint256[])", +"24dbb91d": "BusinessCard(string,uint256,string,address)", +"24dc793f": "getKydy(uint256)", +"24dcd0ef": "transferFounders(address,uint256)", +"24dd24ed": "allowingClaimBTC()", +"24ddb58c": "performStepVerification(uint256,bytes,bytes,bytes)", +"24de30f1": "distributeEarlyBackerTokens(address,uint256)", +"24de3c0e": "gwei()", +"24de908d": "wins()", +"24df2d5b": "Filmpass()", +"24df75d9": "withdrawFromTicker(uint256)", +"24dfc9d7": "getBytes32(uint256)", +"24e04871": "horseForSale(uint256,uint256)", +"24e0be2e": "EVenToken()", +"24e1c3f3": "PRCT_ETH_OP()", +"24e1fa3a": "FIRST_WITHDRAW_RATE()", +"24e21cde": "sendTradeOffer(address,uint256[],uint256[])", +"24e2ca92": "withdrawSharedExpense(uint256,address)", +"24e2cda7": "TestOrder2(address)", +"24e2dbd3": "linkRecipientName(bytes32)", +"24e34476": "myStoredDividends()", +"24e5355e": "JerryToken()", +"24e581be": "transferAllToOwner()", +"24e5bdb9": "getEventsCount(string)", +"24e5eeaa": "slogan()", +"24e65e14": "Addr6()", +"24e7a38a": "setGeneScienceAddress(address)", +"24e7c824": "performTransfers(address[],uint256[])", +"24e846c7": "confirmedSaleEther()", +"24e8b3ec": "getClaimableRewards(bytes32)", +"24e998c3": "Ethershift()", +"24e9dad8": "_safeCall(address,uint256)", +"24ea8d1a": "Fortnitecoin()", +"24eaf1ea": "SendBadge(address,address,uint256)", +"24ec6f66": "cancelContest(uint32)", +"24ec7590": "minFee()", +"24ed1486": "getPeriodAliasFor(uint256,address)", +"24ed2d8b": "initOwnership(address,address)", +"24ed3dc0": "PolyAnalytixProjectToken()", +"24ed3e78": "BACKUP_THREE()", +"24eda713": "teamTwoWin()", +"24edc2a1": "WINT()", +"24ee0097": "myMethod(uint256,string)", +"24ee62ee": "secondWavePrice()", +"24ee9be4": "getVirtualBalance(address,address)", +"24eebc47": "SWAPCOINZ()", +"24efe4c3": "_addToClaimList(address,uint256)", +"24f07356": "batchIncreaseApproval(address[],uint256[])", +"24f073ad": "getTimeOfLastBid()", +"24f12f1e": "ProfitSharingMock(address)", +"24f159c2": "extensions()", +"24f1ec37": "multiAccessRecipient()", +"24f2cc02": "preIcoLimit()", +"24f32f82": "changeHardCap(uint256)", +"24f35549": "setup(uint256[])", +"24f3c639": "buyApprenticeChest(uint256)", +"24f481c8": "oracleItQuery(string,string,string,uint256,uint256)", +"24f48bc5": "setWatcher(address)", +"24f5445b": "transferFundToAccount()", +"24f55e29": "hasCompany(string)", +"24f618b6": "GetDOTRevokableHash(bytes32,uint32)", +"24f65ee7": "getTokenDecimals()", +"24f690ac": "cryptowars()", +"24f696fd": "LogFundTransfer(address,address,uint256,uint8)", +"24f731d5": "PlaceBet(uint256,bytes)", +"24f743dc": "freeSpaceOf(address)", +"24f74697": "callbackGasLimit()", +"24f7a980": "WaitStarted(uint256)", +"24f82526": "closeLong()", +"24f8fe9c": "EdgelessCasino(address,address,uint256,uint256)", +"24f91d83": "init(address,address,address,string)", +"24f9702e": "allocateArrayOfTokens(uint256,address[])", +"24f99ba4": "ChiMarket()", +"24fa6f3b": "requiredBlocksElapsedForVictory()", +"24fabb87": "setImageOwner(uint256,address)", +"24fad665": "enableMasterTransfers()", +"24fb563f": "PlayerTickets(address,uint256,uint256)", +"24fc253e": "eraIndex()", +"24fc65ed": "getId(uint256,uint256)", +"24fc70ff": "setBonusOn(bool)", +"24fcb80c": "parseAddress(bytes32)", +"24fcbc1c": "withdrowErc20(address,address,uint256)", +"24fd0a5c": "isAvailableForTransfer(uint64)", +"24fd2be1": "NationalCoin()", +"24fd5585": "fixedExp(uint256,uint8)", +"24fd6ec9": "zeroBonus()", +"24fe722e": "requestUnpause()", +"24fe73fe": "isRegularOrBoardMember(address)", +"24fe8e68": "MyToken(uint256,uint256,string,string,uint256,uint256)", +"24fef683": "OwnershipGranted(address)", +"24ff026b": "getScheduleDetails(bytes32)", +"24ff065a": "addressOk(address)", +"24ffca71": "visitCost(uint8)", +"24ffea1a": "presaleToken()", +"25005498": "updateEntityNew(uint256,bool)", +"2500ec4a": "getDHand(uint32)", +"25010816": "get_length(uint256,uint256)", +"25012699": "KERNEL_APP()", +"25017e10": "transferSubscription(bytes32,address)", +"2501faa5": "triggerRecoveryAddressChangeFor(uint256,address)", +"2502c19c": "setRBInformationStoreAddress(address)", +"250312ce": "bleachAppearance(uint128,uint128)", +"2503dce8": "updatePublisherFee(address,uint16,address)", +"25052d02": "getMyTokensReturns()", +"250537fc": "_createCollectible(bytes32,address)", +"250540cf": "calcMaxWithdraw(address)", +"25059052": "WhitelistedLargeCap(address,uint256)", +"2505c445": "finalizedEthFundAddress()", +"2505f349": "setTokenMinter(uint256,address)", +"25062287": "_ownerDist()", +"25068a28": "freezeAllowance(address)", +"2506bfe7": "validateBySymbol(string)", +"25074d73": "Registered(string,uint256,address,string)", +"25084b04": "manualOverrideEditionHighestBidder(uint256,address)", +"25096f28": "KryptopyTokenMock()", +"2509f1b9": "SLP()", +"250a1c1d": "Validate(string,string,string,bool)", +"250a8dc2": "isAccountAddress(address)", +"250a93cb": "POEXToken(address,address)", +"250ac096": "BuyRoseCoin()", +"250b1154": "tokenRate3()", +"250b35e8": "BidSaved()", +"250bc504": "Ambassador()", +"250c95fe": "setMaxBuy(uint256,uint256)", +"250ccce4": "getOutStreamOf(address)", +"250d5bc8": "LineToken3()", +"250de298": "EthlanceSearchJobs(address)", +"250dea06": "modifyBalance(address,uint256)", +"250e7d61": "CROWDSALE_CLOSING_TIME()", +"250e816b": "getPeriodSealedPurchaseOrderFor(uint256,address)", +"250e87c9": "pyramid()", +"250ef961": "checkCorrectPurchase()", +"250fe144": "setInvoice(uint256,bool,string,string,string,string)", +"25100b4d": "placeBet(bytes32,string)", +"25102f27": "PRESALE_START_TIME()", +"25107a47": "TransactionRefundedAfterEscalation(uint256)", +"25112004": "XCNTToken()", +"25112743": "getSaleContractStartBlock(address)", +"251139f6": "setPrevContract(address)", +"25119b5f": "channelManagerByToken(address)", +"2511b182": "minBuyableAmount()", +"25128b02": "CampaignResumed(uint256)", +"25137f46": "setSalesPipeAllowance(address,uint256)", +"251481c8": "testDecodeTransfer(bytes)", +"2514a6b4": "withdrawDividends(uint256)", +"251506fa": "SendFart(string)", +"25155eef": "JupiterToken()", +"25161e70": "HKDHToken(uint256,string,string)", +"2516a18f": "setMintableToken(address)", +"2516af82": "createLottery(bytes32,uint256,uint256)", +"2516c6c6": "min_tokens()", +"2516d738": "secureAddOrderFunds(address,bool,uint128,uint128)", +"25174f0e": "getOwnerIndex(address)", +"25182e79": "winAmount4()", +"25185d3e": "freeBalance()", +"25192fca": "issuanceDraft(address)", +"2519a378": "finalizeReplaceTrueUSD()", +"251a8096": "total_wins_wei()", +"251aaf67": "dividendsPaidPerShare()", +"251b5f8e": "team_fund()", +"251c1aa3": "unlockTime()", +"251c7182": "seed_multiplier()", +"251d3589": "setUseEIP712(bool)", +"251d8ffb": "setNav(uint256)", +"251e3843": "_preValidation(address,uint256,uint256,uint256,uint256)", +"251e3d7d": "registerMember(address,bytes,uint256)", +"251ed995": "walletSetWallet(address)", +"251fa3b1": "testFailRetractLatestRevisionNotOwner()", +"251fbe37": "get_training_index()", +"25200718": "requestAudit(string,uint256)", +"2520573f": "getProposalMetaHash(bytes32)", +"25209260": "PrepareRoll(uint256)", +"2520bf04": "shuffle()", +"2520d2e1": "readvalidrollsXaddr(address)", +"25221a4f": "addToBlacklistMulti(address[])", +"25223bd4": "donor()", +"25233782": "magicnumsig()", +"252348dc": "ratePerEth()", +"2524380f": "buy_Exchg_BkgChk(address,uint256,uint256,address,uint256)", +"25245b26": "sendEth(address[],uint256[])", +"25248587": "indexview(address)", +"252498a2": "setUrl(string)", +"25250519": "addGlobalAdmin(address,address)", +"2525aa78": "mintStart5()", +"2525f5c1": "cancelBid(address,bytes32)", +"25266f96": "isNewPlayerInBattle(string,address)", +"2526d960": "clawback()", +"2527331b": "transferToSimpleService(address,uint32,uint256,uint256,uint256)", +"252733f0": "registrantsPaid()", +"252786e4": "WatchBlockSizeInEther()", +"25280163": "RedFundCrowdsale(uint256,uint256,uint256,address,uint256)", +"25287c0e": "bonusesGiven()", +"2529b907": "setVaultDeposit(uint256)", +"2529d1a3": "fused()", +"252ba7a0": "userDeployCount(address)", +"252bb9c3": "PHOENIX_CORSAIR_EXTRACTION_BASE()", +"252cb4fe": "registerProposal(uint256,uint256[])", +"252ccac3": "getTotalActiveBets()", +"252cde48": "checkPrizesView(address)", +"252cedc3": "sendERC20Tweet(uint256,string,string)", +"252d1578": "init(address[],uint256,uint256,uint256,uint256)", +"252d7eb3": "getCurrentPayoutIndex()", +"252dbc36": "setTokenPoolReward(uint256)", +"252e40b1": "secondsPerYear()", +"252edb76": "setUInt8(bytes32,bytes32,uint8)", +"252f14ba": "_addArbiter(address)", +"252f34a7": "loserOne()", +"252f4977": "destroyTokensInBntyTokenContract(address,uint256)", +"252fb38d": "bytes32string(bytes32)", +"253089b5": "smxTeamAddress()", +"2530c905": "rand(uint256)", +"25316ff5": "getBetUint(uint8,int8)", +"2531a36a": "getDesignatedReportDisputeDueTimestamp()", +"25327b75": "latestErc20TxRequest()", +"2533bb9d": "dataCentreAddr()", +"2533ff94": "LogPersonUpdate(address,uint256,uint256,string)", +"2534076e": "cancelRemoveOwnerRequest()", +"253459e3": "feesSeperateFromBalanceApproximately()", +"253515d5": "accruedBuyout(address)", +"2535b150": "cryptoJingles()", +"2535dd53": "getAvailableWithdrawInvestmentsForBeneficiary()", +"2535f762": "transferWithData(address,uint256,bytes)", +"25361060": "getReferralStatus(address)", +"2536d7f1": "endOfCrowdsale()", +"25384770": "reserveAllocated()", +"25387eed": "tallyTheVotes()", +"253abf4a": "processSalesForAllBuyers(uint256)", +"253bc579": "companyClaimed()", +"253bd7b7": "check(address,bytes32)", +"253c8bd4": "change_owner(address)", +"253caf94": "setTasksAddress(address)", +"253d8195": "SavingsBank()", +"253e3447": "numberOfSpritesOwnedByUser(address)", +"253e7fdf": "becomePacifistmaster()", +"253ebd92": "isTierJoined(address)", +"253f029c": "performUpdatePC()", +"253f055b": "getStage2End()", +"253f2809": "offerCollectibleForSale(uint256,uint256,int256,uint256)", +"253f5c38": "addtoLeaderboard(uint64,uint64,uint64)", +"253f89b0": "minContributionUSDc()", +"25400abc": "buyPuzzle(uint8)", +"25402e6c": "vcxCount()", +"2540424b": "isDefIndexInRange(uint8)", +"25406480": "extendPeriod(uint256)", +"2540c420": "phaseOneRate()", +"2541edcc": "oferta()", +"25435704": "updateTokenSupply(uint256)", +"254439fe": "addTokenList(address,uint32)", +"25449c54": "ArteumToken()", +"2545686d": "is_slot_in_bid(uint8,uint8,uint8)", +"2545a07a": "MOEToken()", +"25461328": "MSPMock(address)", +"25464902": "AUCC()", +"2546559c": "Demo()", +"2546de10": "vest(address,uint256,uint256)", +"254747a5": "checkAvailableAmount(address,uint256)", +"25476ed8": "settleAndWithdrawCfd(uint128)", +"254800d4": "vestingStart()", +"2548bbbd": "WithdrawalCreatedEvent(uint256,uint256,bytes)", +"25495998": "getMinimumConsumerDeposit()", +"25498152": "setBuyDividendPercentageFee(uint8,uint256,uint256)", +"2549ad8f": "MANHATTANPROXYCNVNTAVE()", +"2549e0b1": "getLockedBalance()", +"254a46f4": "cycleMintSupply()", +"254b302d": "revokeAllMyId()", +"254bd326": "getUserAddr(uint256)", +"254c70ac": "getPlayerData(uint32)", +"254c91b3": "testBitNotSetSuccess()", +"254d2e12": "GetDemolishCost(uint256,uint256)", +"254dacba": "BurnTokens(address,uint256,string)", +"254dcfe2": "lastActiveTransaction(address)", +"254fd745": "transferUCASH(address,uint256)", +"255016c8": "checkIfExploded()", +"255074a9": "addManualContributor(address,uint256)", +"2550c435": "CRYPTO_USD()", +"2551858e": "getFlags(bytes32)", +"2552317c": "lastBlockNumber()", +"25524400": "placeBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8)", +"25534a1e": "saleEtherReceived()", +"2553795a": "AragonSupply()", +"2553ac0d": "getPlayeds(uint256,address)", +"2553e0cb": "OwnedMortal()", +"2554a358": "queryCurrentTradablePrice()", +"2554b9b3": "kkkTokenSale(uint256,address)", +"2555611a": "AOKPAY()", +"25568fd7": "__setBeneficiaryForDasTokensChange(address)", +"2556befa": "feeBank(address)", +"255706f5": "start_service2(uint256,address)", +"25575a04": "peBalance()", +"25579702": "calculateDrugBuySimple(uint256)", +"25580656": "dataSourceGetRoundOfSixteenResult(uint256)", +"25583590": "_cancelAuction(uint256)", +"25585ee8": "diamondIndexToApproved(uint256)", +"255884ae": "discoveryPrice(uint256)", +"2559e0dd": "rateInSpecificTier(uint256)", +"255bd903": "signByBride()", +"255c8244": "amountRaisedPreSale()", +"255c8fee": "TestyTest()", +"255e2f81": "adjustDollarToEtherRatio(uint256)", +"255e444e": "scientists()", +"255e4685": "mintStart()", +"255eac5c": "newRegistration(address,uint256)", +"255f82e2": "sealed(uint256,bytes32)", +"25605c6a": "balanceOfSC()", +"2560a8c0": "houseedge()", +"2560baeb": "calculatePayrollBurnrate()", +"25616007": "getLandplayerFirstDefenderID(uint8,uint32)", +"25618ca8": "setBattleContractAddress(address,address)", +"2561ee35": "estimateBuyOrder(uint256,bool)", +"25625608": "FoundWinner(address,uint256)", +"2562b427": "declineKyc(address)", +"25630c9f": "fwithdrawal(uint256)", +"25635b68": "updateBaseInventory(uint256,uint256,uint16)", +"2564e1c4": "PaymentAddressFactory()", +"256540cd": "turnover()", +"256688fb": "UseRedEgg(uint256)", +"256697df": "ibcDistributed()", +"25672ee6": "OpenBids(address,uint256,address,address,uint256,uint256)", +"256738d1": "AGT()", +"25686e15": "getMarketsRocId(uint256)", +"25687e28": "tuneLastStageStartAt(uint256)", +"2569100d": "runtoeth(address,uint256)", +"256919c6": "fixSale()", +"25696308": "lastBlock_a10Hash_uint256()", +"25697337": "getLittAdminCount()", +"25698d89": "isLottery()", +"2569cd6c": "assistant()", +"256a9f81": "extendedTime()", +"256b8dfe": "Travelcash()", +"256bcaa0": "addToJackpot()", +"256bdaa4": "setEtherRate(uint16)", +"256c0926": "RocketPoolCrowdsale(address)", +"256c09d4": "_protocolInterestRate(uint256)", +"256c10a1": "market2021TokenCreated()", +"256c3232": "getPreICOBonusAmount(uint256,uint256)", +"256c5fc6": "LooisToken(uint256,string,uint8,string)", +"256df407": "test_spamFreeze()", +"256f992b": "organizers_percent()", +"256fa241": "distributeTokens(address[],uint256)", +"256fec88": "lastSender()", +"2570c13d": "GBCoin()", +"2570e31e": "getTokens(uint256,address)", +"2571a4ab": "MaxBetAmountChanged(uint256)", +"25731e97": "quitBanker()", +"257341a8": "vestingCountOf(address)", +"2573aa7d": "newShare(address)", +"2573ce27": "validateUserByHash(bytes32)", +"25746251": "canVote(uint256)", +"25750995": "updateChfCentsPerEth(uint256)", +"25756d90": "getWeaponRarityFromTokenId(uint256)", +"2575d47e": "EmitAccountChartDetails(address,uint256,uint256,uint256)", +"2576a779": "updateServiceFee(bytes32,uint256)", +"257714db": "getTransferRate(address)", +"257781e7": "deleteIPFSHash(bytes32)", +"2577929b": "settleContract(uint256)", +"257793f9": "getConstructorTouches()", +"2578117b": "getPotAsFixedPointForGameId(uint256)", +"25787747": "icoDuration()", +"2578e943": "RHYNOTE()", +"25799b18": "getUnapprovedArtists()", +"2579dd3c": "registrantToHopefulIds(address)", +"257bcd6a": "placeBet(uint256,bytes32,bytes32)", +"257c360d": "getCurrentBalanceForCampaign(bytes32)", +"257c88b5": "curQuater()", +"257d3db5": "setNumNumbers(uint256)", +"257d4166": "Partner()", +"257d5995": "updateSinglePayout(address,uint256)", +"257d849f": "ZegartToken(uint256,string,string,string)", +"257d9bb8": "MINIMUM_AMOUNT()", +"257e0523": "addLockedTokeD(address)", +"257e1f8f": "endUpgrade()", +"257e5c69": "matchStake()", +"257ef522": "approveBountyTransfer(address)", +"257ef70b": "fillSellOrder(address,address,uint256,uint256)", +"257f9abf": "removeFromList(address)", +"257fc838": "setResolveValueGasLimit(uint256)", +"258072e5": "display_rate()", +"2580ce84": "totalAndRemainOf(uint256,address)", +"2581021c": "depositCollateralOnBehalfOfRecurse(address,address,bytes32,uint256)", +"258108da": "slaveWalletPercent()", +"25818751": "test_oneValidEqUint3()", +"2581c674": "testBitsOrFailIndexOOB()", +"2581f5a4": "distributeAirdrop(uint256,address[],uint256[])", +"2582bf2a": "updateDelegateKey(address)", +"258315b3": "ATC(uint256,string,uint8,string)", +"2583373c": "distributeAndUnlockTokens()", +"2583a1d9": "oraclizeQueryId()", +"2583b2e4": "totalWithdrawTokenAll()", +"2583cfef": "removeFromBothSendAndReceiveAllowed(address)", +"2584295e": "userWhiteListContracts(address,address)", +"2586539e": "batchTtransferEtherToNum(address[],uint256[])", +"2587eb4e": "setRate(int256)", +"2588f9a5": "ReleaseAgentSet(address)", +"25892f92": "ApprovedBy(uint256,address)", +"2589af4a": "getProjectKudosByUsers(bytes32,address[])", +"258a61d6": "coordinateToIdentifier(uint256,uint256)", +"258a6ca6": "getStoryExpiry(bytes12)", +"258ae582": "verify(bytes32,bytes)", +"258b5a35": "challengeSettle(bytes,uint8[2],bytes32[2],bytes32[2])", +"258b5c06": "finalizeCrowdsale(uint256,uint256,uint256)", +"258b5da6": "recoverWETH()", +"258b85d4": "verifyHash(string,string)", +"258c047e": "getStatusEventClosed(bytes16)", +"258c0f1e": "deleteCaller(address)", +"258c2a2d": "Charity()", +"258c4f63": "channelManagerByToken(address,address)", +"258c5ddd": "softWithdraw()", +"258d3d6e": "PlayHallToken()", +"258da4b4": "seedStarted()", +"258dd544": "estimateSellOrder(uint256,bool)", +"258e60b6": "start(string)", +"258f6b8f": "GiveReferralRocket(uint16,address)", +"258fd4f3": "Stage1Allocation()", +"25910753": "addCourse(string,string,bytes32)", +"2591432d": "canary()", +"25925806": "tokensAllocatedForCs(address,address,address)", +"2592e921": "verifyParams()", +"2593ed21": "setICO1Phase()", +"2594b343": "walletTwo()", +"259653b8": "distributionClosed()", +"2596c93b": "manualBonusActive()", +"2596e62c": "test_oneValidEqBytesUint()", +"25973ef7": "CIFRCOINTOKEN()", +"25979983": "sendToAll(uint256)", +"25981559": "bluceTestCoin(uint256,string,string)", +"25982586": "AddressDemo()", +"259852f8": "updateGenVault(uint256)", +"2598ab9d": "createPromoSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"25990d4d": "TokenFulfillment(address[2],uint256[8],uint256)", +"2599c661": "getgamecardsalemoneyuint256(uint256)", +"259a28cf": "UNLOCK_PERIOD()", +"259b2ce0": "whitelistRegistrants(address)", +"259b5181": "_batch2_rate()", +"259b5605": "PTL()", +"259bc6f5": "getWhiteUsers()", +"259c05f5": "DEV_TAX_DIVISOR()", +"259c29e8": "replaceShorter()", +"259c95c4": "_sendWebGiftToken(address,uint256)", +"259ceee5": "contractTokensTotal()", +"259d1cb4": "eth_decimal_num()", +"259d33c1": "roundStats(uint256)", +"259eb959": "privilegedTransfer(address,uint256,bytes,string)", +"259fddaf": "stakeCommunityTokens()", +"259fefcb": "angelAddress()", +"25a02ff6": "setGeneratorAddress(address)", +"25a10a70": "getChild(address)", +"25a190c9": "inicializaStatusPossiveis()", +"25a2219f": "promotionsUsed()", +"25a30145": "preSaleTime()", +"25a31135": "Disable()", +"25a34aca": "returnMargin()", +"25a3ba49": "getCertKey(string)", +"25a42081": "setPriceStep3(uint256)", +"25a43ea5": "setts10(uint256,address)", +"25a50636": "completeBountyAddresses(address[])", +"25a52d9d": "curentWinner()", +"25a583a3": "_reAdjustDifficulty(uint256)", +"25a6c545": "generalInfo()", +"25a7650a": "beginGame(uint256)", +"25a78057": "DeClubToken(uint256,string,string)", +"25a86d56": "ETH_USD_EXCHANGE_CENTS()", +"25a8e6f9": "addNewEditor(address)", +"25a9d450": "getClientBalance()", +"25a9e534": "DataToBlockchainKeeper()", +"25ab2d03": "getReturnSize(uint256)", +"25ab526d": "MITPurchase(address,address,uint256,uint256)", +"25ab9f43": "addDoubleChanceLine(uint256,string,uint256)", +"25abc312": "changeICOPrice(uint256)", +"25ac29da": "generateUrl(string,uint256)", +"25ace2a7": "checkExpired()", +"25ad7f2e": "OneStep()", +"25ad91ce": "createUser()", +"25adfc8f": "SetMaxMinersXblock(uint256)", +"25aeb4a2": "addPayment(uint256,string,int256,bool)", +"25aef744": "ValuePlaced(address,address,uint256)", +"25b05c88": "playerGameId(address)", +"25b10186": "INITIAL_PRICE_INCREMENT()", +"25b16c4a": "getWeis(uint256,uint256,uint256)", +"25b198eb": "inList(address)", +"25b1a072": "setGOPCreator(address)", +"25b29d84": "getEtherValue()", +"25b2ac77": "privateOfferingWallet()", +"25b31a97": "purchase(address)", +"25b3b5a8": "_totalMinedSupply()", +"25b3bfb8": "transferFrom0(address,address,uint256)", +"25b3edd9": "updateTraits(uint256)", +"25b5160c": "setICOPrice(uint256)", +"25b56727": "createProxy(address,address)", +"25b56dd4": "averageScrapPrice()", +"25b634c0": "approveDisbursement()", +"25b64bba": "signerConsumerNonce(address,address)", +"25b6ae80": "incSALESTATE()", +"25b72273": "SGT(address)", +"25b75b7b": "deregistrationDate()", +"25b825ab": "newMediaToken(uint256,uint8,string,string)", +"25b886eb": "constructors()", +"25b89c52": "AirDropToken()", +"25b901c8": "Refundlineinfo()", +"25ba0824": "grantOwners(address)", +"25ba0f51": "initContract(address,address)", +"25ba2d2e": "minimalPrice()", +"25bae118": "earlyPurchaseClosedAt()", +"25bb8e93": "_badgeUnFreeze(uint256)", +"25bccea2": "setFreeze(address)", +"25bd4639": "paymentId()", +"25bd713f": "tokensForPlatform()", +"25bdb2a8": "getSaleState()", +"25bdb73d": "benefitPercents()", +"25bdc110": "Resolve(bool,uint256)", +"25bddc18": "DGXCrowdsale(address,address)", +"25be124e": "token2()", +"25be53e7": "kickStartICO(address,uint256)", +"25c065b1": "minStakingAmount()", +"25c10247": "buyIPC()", +"25c2052f": "last_random()", +"25c24bc3": "folioToken()", +"25c302e4": "totalDonors()", +"25c33e13": "setMaxReward(uint256)", +"25c48f30": "MYDECIMAL()", +"25c50f97": "enablePhenomenon(bytes32)", +"25c54456": "existsContract(address)", +"25c5ce04": "availableOnStage()", +"25c5d4d4": "tileDrop(address[])", +"25c62d5a": "MAX_TOKENS_AIRDROPS_BOUNTIES()", +"25c70a44": "moveToArea(uint16)", +"25c782d7": "addStageCrowdsale(address)", +"25c7cd17": "getCurrentLeaderOwners()", +"25c843b9": "comments()", +"25c9307d": "lastBetBlockNumber()", +"25c93df3": "rewardTokenAmount(uint256)", +"25c95538": "isRepeated(string)", +"25c972ff": "JoinGameAsBanker(uint8,uint256)", +"25ca4c9c": "isAccount(address)", +"25ca5cc6": "candidateTillETHAssets()", +"25ca953d": "resetAirDrop(uint256,uint256)", +"25caa262": "getBal()", +"25caaa37": "getMyChicken()", +"25cb2bc6": "getBrokerAddress(uint256,uint256)", +"25cb366d": "manualMigrate(address)", +"25cb4f2c": "profitContainerAddress()", +"25cb5bc0": "getExpiryTime()", +"25cb6303": "isItIco()", +"25cb98d5": "removeVerifiedUser(address)", +"25cbd68e": "fifthTeamWithdrawal()", +"25cbe702": "tokenSupportLimit()", +"25cbeb0a": "DICIMALS()", +"25cbeb7e": "creatorsAddress()", +"25cc348f": "testDeployedValues()", +"25ccdb4c": "currentspudinfo()", +"25ccf381": "create_forwarder()", +"25ccf688": "KEO()", +"25cdca8d": "CommonWhitelist()", +"25cde42c": "addPayerRefundAddressAction(bytes32,bytes)", +"25ce77a0": "devuelveEncuestados(bytes32)", +"25ceb4b2": "submitBlock()", +"25cf512d": "setBytes32Value(bytes32,bytes32)", +"25cf98e5": "EduCloud()", +"25cfa566": "StartingPrice()", +"25d00041": "registrantIndex()", +"25d04034": "KT07Coin(uint256,string,uint8,string)", +"25d0b4ef": "minFundingGoal()", +"25d104d4": "returnVestingSchedule()", +"25d1da84": "revokeAll(bytes32,address)", +"25d30d8e": "cnt_per_Keos()", +"25d3a09d": "getProposal(string)", +"25d3b2c6": "check_array_add(address)", +"25d3bcd1": "saleHardcap()", +"25d3d0e3": "purchaseTimestamp()", +"25d4bdeb": "LookAtCollectedFees()", +"25d5971f": "withdrawStake(uint256)", +"25d5eafa": "total_points()", +"25d76e6d": "setCompte_27(string)", +"25d78d3b": "IcoPhaseManagement(address)", +"25d83bb3": "authorized_setCardPerkText(uint256,string)", +"25d85e12": "totalPopulation()", +"25d8a4b2": "SpiceToken()", +"25d8dcf2": "betAndFlip()", +"25d8f6a5": "dividendForHistory()", +"25d91125": "earlyWhitelistBeginTime()", +"25d92ee2": "updateFeeWallet(address,address)", +"25d988bb": "buy_token(address[],uint256,uint256)", +"25d998bb": "availableBalanceOf(address)", +"25d9d57d": "highTokensToSellGoal()", +"25d9ec83": "requestBuywithETH(address)", +"25dac5e3": "DocumentStored(uint256,uint256)", +"25db4dd0": "jackpotBlance()", +"25db6699": "tgrSettingsBlocksPerStage()", +"25dbe054": "setDonationUnlockTs(uint32)", +"25dccaf9": "postMessage(address,uint256,string)", +"25dd0ee6": "checkTotalBalance(uint256[])", +"25dd495a": "Recycle()", +"25ddda76": "changeMixEnable(bool)", +"25dfbfba": "addProduct(string,string,string,string,uint256)", +"25dfcf84": "saleAllocated()", +"25e023b3": "unlockOwnerBalance()", +"25e0671f": "areReservedTokensDistributed()", +"25e0c876": "sosTransfer(address,address,uint256)", +"25e11811": "addFunctions(address)", +"25e1350f": "insert_candidate(string,uint8,string,string)", +"25e16063": "withdrawEth(address)", +"25e1b5e4": "pricePerMessage()", +"25e1c6f7": "batchTransferORS(address[],uint256)", +"25e3172b": "AdminClaimAirdropMultiple(address[],uint256)", +"25e330fb": "_increaseRarity(uint256,bytes32)", +"25e37b2b": "delTournament(address)", +"25e3d3ba": "blockResult(uint64,uint64,uint64)", +"25e3d7b4": "assignSharedOwnership(address,uint256)", +"25e41da1": "getRandomValue(uint256)", +"25e524d3": "right8(uint256)", +"25e629f2": "fundraisingDelta()", +"25e65584": "getPlayerBossWannaCryData(address)", +"25e6c304": "totalPrizes()", +"25e6f516": "tokenDescription()", +"25e7514b": "remainAmount()", +"25e7c9ad": "getTotalAmountOfFirstInvestors(uint256)", +"25e7e3cf": "recoverAllEth()", +"25e89283": "mainSaleActive()", +"25e8f38c": "logUI(string,uint256)", +"25ea269e": "Scissors()", +"25eafb45": "AikcoinSupply()", +"25eb64c7": "buildingAddress()", +"25ede147": "depositSecretBid(bytes32,bytes)", +"25ee8abb": "winningTeamSet()", +"25eeecbc": "divisionByZero()", +"25ef9afa": "LOG_newSpinsContainer(bytes32,address,uint256,uint256)", +"25f08fc4": "decayedPriceOfTwitterId(uint256)", +"25f0f467": "updateTransferFeeRate(address,uint256)", +"25f0fd23": "_revoke(bytes32,address)", +"25f262c7": "draw(address[])", +"25f281b4": "changePriceSetter(address)", +"25f2f6db": "awardRoundPrize()", +"25f39a63": "div(int128,int128)", +"25f3da52": "GetBankAccountNumber()", +"25f3f2ef": "joinBuyRequest(uint256)", +"25f43ed5": "setMemsize(uint256)", +"25f4c703": "setFoundersPercent(uint256)", +"25f5cb1e": "getAllowedForTransferTokens(address)", +"25f5ec45": "getCheapestCardWager(address)", +"25f673f5": "Love(address,address,uint256)", +"25f731c8": "transferOwnershipBack()", +"25f885d0": "CashOut(bytes)", +"25f96b73": "ownerSupply()", +"25f9bfef": "CONTRACT_REGISTRY()", +"25f9f1e6": "lockOwnerBalance(uint256,uint256)", +"25fa0131": "isZero(address,string)", +"25fa5ae1": "createShapeShiftTransactionPost(string,string)", +"25fa8a4f": "_firstTokenId(address)", +"25fab539": "removeDragonFromSale(uint256)", +"25fad06a": "clearances()", +"25fb439c": "POW33()", +"25fb66b9": "getHeroItems(uint256)", +"25fc575a": "deregisterToken(uint32)", +"25fc5f02": "HIPHOP()", +"25fc790f": "te()", +"25fcdad8": "complaint(address)", +"25fced01": "sellTokensPreIco()", +"25fd1e29": "REFUND_TIME_FRAME()", +"25fda176": "notify(address,uint256)", +"25fdb725": "MIN_CONTRIBUTION_ETH()", +"25feb519": "fifthTime()", +"25ff68dd": "Initialized(address,uint256)", +"25ffba04": "updateTokenStatus()", +"26000ba2": "updateBalanceOnFunding(uint256)", +"2601d1bc": "checkGameState()", +"2602bc8f": "_transfer(uint256,uint256,uint256,bytes32,string,uint256)", +"26030a34": "report(bytes32)", +"2603ace6": "unRegOwn(address,string,address)", +"2603f70c": "ownerDeclareRefundFinish()", +"26044feb": "fetchdivs()", +"26046743": "assetOwnerRemoved(bytes32,address,address)", +"2604b767": "getEggsSinceLastHatch(address,address)", +"2604f424": "FUTURE_DISTRIBUTE_LIMIT()", +"26052ef6": "getCurrentSolver(address)", +"2605b3c7": "participant(address)", +"26066ad5": "offer(uint256,bytes,uint256,bytes)", +"2606a10b": "report()", +"26070774": "Token(address)", +"26073003": "congratulationFromNoel()", +"26086c70": "triggerVersion(address)", +"2608f818": "repayBorrowBehalf(address,uint256)", +"2609037c": "requestArbitration(address,bytes32)", +"26091cbe": "OwnersBySpinner(uint256,uint256)", +"26093bbc": "safeIncrement(uint256,uint256)", +"26094c60": "setUnsoldTokensWallet(address)", +"260958a5": "getTransfer(bytes32)", +"260993f9": "registerSister(address)", +"260a5227": "buyOnBehalfWithSignedAddress(address,uint128,uint8,bytes32,bytes32)", +"260a54d3": "getCA(address,address)", +"260a818e": "unregister(bytes8)", +"260abfa5": "EnableMember(address)", +"260b0bc8": "payToOracle(uint256,uint256)", +"260b8f6e": "GetEvaluate(address,uint8)", +"260bf85a": "updateAmountToTakeAsRake(uint256)", +"260c2214": "setValid(uint256,bool)", +"260c3af1": "IcapTransfer(bytes32,address,bytes32,uint256)", +"260d387b": "blacklistUserForTransfers(address)", +"260e6885": "BazraCoinToken()", +"260e9640": "lock(uint256,uint256,uint256,uint256)", +"260ea6c9": "myDividendBalance()", +"260edaaa": "surplusTokens()", +"260f836d": "intercrypto_getInterCryptoPrice()", +"26109699": "Withdrew()", +"26111ab2": "addToSet(uint256,uint256)", +"2611341b": "submitApplication(address)", +"26119a0b": "changeFeeETH(uint256)", +"26121ff0": "f()", +"26134334": "getProjectKudos(bytes32)", +"2613ba9a": "PlatformDeposit(address,address)", +"2614195f": "getNameFee()", +"2614d4a4": "spendCredits(address,uint256)", +"2614fff6": "lengthOfCommonPrefix(bytes32,bytes32)", +"26161670": "donkeyRanking(uint256)", +"2616501d": "defaultRate()", +"261669ba": "HeroesToken()", +"26168eed": "getTestimonial(uint256)", +"261775f6": "BlokGrup()", +"2617fc13": "resetcardPrice()", +"26180224": "newChallenge(uint64,uint64)", +"261879ed": "addKitty(uint256,uint256,uint256[5])", +"26188437": "tokenReserved(address,uint256)", +"26188a3f": "increaseAllowed(address,address,uint256)", +"2618a571": "DEVELOPMENT_TEAM_CAP()", +"26195901": "numAnimals()", +"2619ba7f": "ETHFee()", +"261a323e": "exists(string)", +"261aa1c5": "additionalBonusPercent()", +"261ac279": "getApiByIdWithoutDynamics(uint256)", +"261b2c5e": "stepVestingDuration()", +"261b4205": "equalBytesToBytes(bytes,bytes)", +"261bd0f1": "BUY_BACK_BONUS()", +"261c085e": "registerChallenge(bytes32,uint256)", +"261c42dd": "getAllRevisionTimestamps(bytes20)", +"261c70bd": "voteMessage(bytes32,uint256)", +"261cb08a": "burnPausedTime()", +"261de7c4": "right33(uint256)", +"261e9693": "balances4(uint256)", +"261eafc8": "addMasterTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"261ed1d8": "farmCities(uint256)", +"262006e9": "getFirstDocumentIdBetweenDatesValidFrom(uint256,uint256)", +"262007c0": "getBetter()", +"26207bd1": "indices(int128)", +"26208591": "payDividendsTo(address)", +"2620f61c": "storeClaim(uint16,address,uint256)", +"2620fb2b": "getNextTime(address)", +"2620fd4a": "setupICO(uint256,uint256,uint256,uint256)", +"262199c3": "changeTokenOwner()", +"2621b6e3": "finalStageRefund()", +"2623297e": "zt()", +"26232a2e": "platformFee()", +"2623f687": "getRevenue(uint256)", +"2624597c": "createTokensForEvent(address,uint256,uint256,string)", +"2624b2d9": "EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH()", +"2624c4eb": "EtheremonEnergy(address)", +"2625e2e1": "post(address,address,bytes32)", +"26278f86": "unrestricted()", +"262799f7": "PaquariumTokenTest2(uint256,string,uint8,string)", +"262834da": "_addOperator(address)", +"2628803f": "migrateREP()", +"262933cb": "responseFromWS(address,uint256,bytes32)", +"26295b52": "createGalaxy(uint8,address)", +"262aa9fc": "DOGToken(uint256)", +"262af333": "sponseeAddress()", +"262af3dd": "getClassViewValue(uint256)", +"262b9f8c": "finishRoundA()", +"262bcb68": "mintBooster(address,uint32,uint8,uint8,uint32,uint24)", +"262c0b72": "getPayoutFreezePeriod()", +"262c3666": "forward(bytes32[],uint8,bytes32,bytes32)", +"262da6df": "TransferOwnershipOperationEvent(address,uint256)", +"262f8244": "HGSOCIAL(uint256,string,string)", +"262f8c0e": "addTimelock(address,uint256)", +"262fe547": "testCheckSavecEthBalance()", +"2630271d": "setlockaddress(address,bool)", +"2630c12f": "priceOracle()", +"2630d97d": "setAtomLev(uint256,uint8)", +"2630ee9f": "revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", +"2630ef36": "setNumOfTimesSteal(uint8)", +"263164b9": "getSalaryTokensTotalCount()", +"26316e58": "setMigrationMaster(address)", +"26324eff": "producers(address)", +"26325bd3": "allowEveryone()", +"2632924d": "left30(uint256)", +"2632bf20": "unblockMe()", +"2632fc3c": "MichiganvsLoyola()", +"2634592a": "logReportsDisputedCalled()", +"26345de2": "VendingMachine()", +"26348325": "smartContactForSale()", +"2634d90d": "ArcherFreeCoin(uint256,string,uint8,string)", +"263570c0": "addStorage(string,address)", +"2635f4de": "registerLibrary(bytes,address)", +"2635f59f": "InterfaceToken()", +"263631b4": "euroCents2wei(uint256)", +"2637bb2e": "isTransferProxy(uint32,int256,address)", +"26381b05": "canReceiveTokens()", +"26387b07": "Fortune()", +"2638b25c": "seedEndTime()", +"263a6d79": "initiateTransaction(address,uint256,bytes)", +"263b694a": "MIMIMUM_CONTRIBUTION_AMOUNT_ICO()", +"263c0a8d": "_setLagParams(string,uint16,uint8)", +"263c493a": "enable_deposits(bool)", +"263c6ec0": "usdToTokens(uint256,uint8)", +"263ce6a0": "getWinningPrediction(address)", +"263d4878": "triggerRefund()", +"263d5ad0": "vaultPercentage()", +"263dffba": "_releaseVouchers(address,uint256,uint16)", +"263e3d5d": "terminateContract(uint256)", +"263e6d0d": "INDOPAY()", +"263e74e6": "computeBonus(uint16)", +"263e79b5": "addCreditScore(uint256,string)", +"263eb5b6": "assertEq8(bytes8,bytes8)", +"263ef0cf": "needRefoundETH(address,uint256)", +"263f6a42": "rateFeesNumerator()", +"263fa1ad": "XYZToken()", +"263fbd45": "getContractUpdatedTimeById(bytes32)", +"263fbef2": "District0xNetworkToken(address,address)", +"263ff8b9": "buildTokenId(uint256,uint256,uint256)", +"26407e36": "calculateSharesInTheRevenue(uint256,uint256)", +"26409047": "BDACoin()", +"2640b401": "SetRate(uint256)", +"2640f62c": "getTokenToEthOutputPrice(uint256)", +"26413760": "reducePlayersGooProduction(address,uint256)", +"2641d381": "totalNumberTokenSold()", +"26423259": "viewCoinSupplyAndFunding(bool)", +"2642567e": "coinData(address)", +"264282f2": "markTokens(address,uint256)", +"26428430": "_deleteInt(bytes32)", +"2643fc13": "spermlordReq()", +"2644f9f8": "getAssetsOwners(uint256)", +"26452036": "InitCountry(uint256,uint256)", +"264534be": "OMC(uint256,string,string)", +"26458beb": "firstPreSaleDate()", +"2646754d": "TestTokenA()", +"2646b176": "getPaimentStatus(address,uint256)", +"2646bce6": "LogWinner(uint8)", +"2646bfcb": "pay(uint256,uint128,address,bytes)", +"26470ae4": "getBonusFactor(uint256)", +"26476204": "stake(address)", +"26483bcd": "tokenMultiTransfer(address)", +"26484a44": "start3XPhase()", +"26487265": "contractExecuted()", +"26488531": "banMember(address,string)", +"2648a7e2": "EtherRedeemAccepted(address,uint256)", +"264934de": "submitTokenForEdit(uint256)", +"26493a6f": "setAllocateAgent(address,bool)", +"26496cab": "Milestone_IcoSuccessful(string)", +"2649cb10": "pNumberOfLockedTokens(address)", +"2649d62e": "multiMint(address,uint256)", +"264a3edc": "setPolls(address,address)", +"264a6d10": "get_next_asset_document_from_document(bytes32,bytes32)", +"264ae918": "withdrawChannel(address,uint256)", +"264b2b8e": "returnBalance(address)", +"264c22bb": "getAmountOfGene(uint256)", +"264c2cdc": "generateRandomNumber(address,uint8)", +"264c8e9a": "whatWasTheVal()", +"264caf14": "addVestor(address,uint256,uint256,uint256)", +"264d26e1": "ICO_CAP1()", +"264d7797": "tokensBought(address)", +"264dac0f": "endBorrowAgreement(string,uint256,uint256)", +"264e3018": "EtherDeltaHandler(address)", +"264f28fe": "getOwnerDeposit()", +"264f5718": "rondaSilla()", +"264f630d": "DonationReceived(address,uint256)", +"264faeb8": "getReportsCounter(uint256)", +"26500c84": "ResolverNode()", +"265028c2": "GetMaxBuyIn()", +"2650a47c": "withdrawEther(uint256,uint256)", +"26529836": "ADVISER_STAKE()", +"2652b4a5": "UDA()", +"2652c0f4": "hasVerifiedAttributeValue(address,uint256)", +"2652c757": "submitBracket(bytes32)", +"26532df8": "subZero(uint256,uint256)", +"2653ab19": "getMC(uint256)", +"2654e624": "ResumePayment()", +"265580f5": "setRegistryExecID(bytes32)", +"2655dd0b": "storeId(address,address,uint256)", +"26563b40": "whitelistManager()", +"2656455f": "claimEthFor(address)", +"2656b77d": "addToBattle(uint64)", +"2656da30": "setFuelContract(address)", +"26571388": "xpaExchange()", +"26591e79": "BONES()", +"2659d8ef": "setExchangeFormula(address)", +"265a3afd": "registerBase(bytes32)", +"265a8636": "_mintFish(address,uint32,uint8,uint8,uint8,bytes16)", +"265af6d1": "withdrawFundsAndPayRoyalties(uint256)", +"265b3e6c": "calculateIssueGoldFee(uint256,uint256,bool)", +"265b5d93": "getMaxLockAmount(uint256,uint256)", +"265c920f": "setBonusParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"265cdd88": "Bet(address,string,uint256)", +"265cfbbc": "Emitter()", +"265d900b": "wtech()", +"265dcbd3": "StandardTokenWrapper(address)", +"265f0393": "KryptopyCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"265ffe2b": "ethMin()", +"26602470": "hashEIP712Message(bytes32)", +"2660316e": "plyrNames_(uint256,bytes32)", +"26605772": "renameTulip(uint256,bytes32)", +"2660b56c": "setData_2(string)", +"26617c28": "_setPaused(bool)", +"26625e46": "formatDecimals(uint256)", +"26627d80": "third_whitelistSupplier()", +"266361f5": "getLottoData(uint8)", +"26637579": "_removePlayer(uint256,uint256)", +"26638a38": "spin(int256)", +"2663a4ed": "byteToLower(bytes1)", +"26654d57": "refundParticipant(address,uint256,uint256,uint256,uint256)", +"266578d0": "_isRateActual(uint256)", +"26657c77": "Validate(string,string,string)", +"26663203": "withdrawFromEscrow(address,bytes32)", +"266710ca": "manualUpdateBalances_only_Dev()", +"266716f6": "GTSToken()", +"2667f407": "__proxy(address,bytes)", +"2668748d": "applyAuditorsCheckUpdate(address,address,uint64)", +"2669268b": "FUC(uint256,string,string)", +"266987ef": "p2pLocker(address)", +"26699576": "playSystem(uint256,address)", +"266b059e": "setSendAmount(uint256)", +"266b2eb5": "Conserve()", +"266bd375": "MyPizzaPieToken()", +"266bd901": "check_price(uint256)", +"266c2132": "_prand()", +"266cc170": "Y2J()", +"266ce248": "createPlayer(uint16)", +"266cf109": "record()", +"266d7bda": "lockupEndTime()", +"266d8299": "DriveholicToken()", +"266fc436": "producedSilverCaps()", +"266fc5d5": "totalContributorsProfit()", +"2670bdf0": "setERC777(address)", +"2670cc14": "transfekbolPlutocrat(address)", +"267127ec": "getTokenSettings()", +"267177eb": "sendPayout(bytes32,uint256)", +"2671b61d": "OfferRouting(bytes32,bytes32,uint256,bytes)", +"2671e253": "resetTraps(uint256)", +"26728b14": "rewardPXL(address,uint256)", +"2672b3e2": "SplitterEtcToEth()", +"2672c952": "seed_coins()", +"26735c06": "TOTAL_POOL_COMMISSION()", +"26736363": "APRInflationToken(uint256)", +"26741c88": "IcoMessage()", +"26744071": "WLCoin()", +"26745909": "PRNG_Challenge()", +"26746f5f": "updateGenerationRatio(uint256,address)", +"26748804": "BlockPoints()", +"2674899b": "getSaleHour(uint256)", +"267490aa": "turnOnPresale()", +"26749ad7": "approvedContracts(address)", +"267502c9": "setAquarium(address)", +"2675c123": "CloseContract()", +"26760d1d": "setMaxTms(uint256)", +"26767298": "RimuoviMiner(address)", +"26767cfe": "shareProfits()", +"26768b83": "_emitDestruction()", +"2677ef1b": "_seal(address,address,uint256)", +"26782247": "pendingAdmin()", +"267822c1": "finalizeChangeBurnBounds()", +"267835a4": "_removeBurner(address)", +"26798494": "EusdContract(address,address,address,uint256,uint256,uint256)", +"26798680": "toReal(int216)", +"267acd6c": "getPricesPerInterval(uint8)", +"267b6922": "entries(bytes32)", +"267c4ae4": "exists()", +"267c8507": "authorizeManager(address)", +"267f20a2": "_transferTo(address,uint256)", +"267ff78c": "approveRequestUnpause()", +"26811c09": "NVBToken()", +"26815de3": "updateGoldPrice()", +"2682644f": "PURCHASE(address,uint256)", +"26826bf8": "setImage(bytes)", +"2682a0ac": "CrowdsaleTokenExt(string,string,uint256,uint256,bool,uint256)", +"26834988": "numListed()", +"26839e53": "getUintValues(bytes32)", +"26839f17": "depositEther(uint256)", +"26843251": "presale1_startdate()", +"268451a2": "testFail_set_price_unauth()", +"26848a86": "setPicture(string)", +"26848b68": "checkCrowdsaleBalance()", +"26866160": "secondsBetweenReadings()", +"2687c645": "contributeInternal(address,uint256)", +"26881518": "setupFee(address)", +"2688454a": "U()", +"268855a4": "ParsecCrowdsale(address,address,address)", +"26887303": "TourCashStandardToken(uint256,string,uint8,string)", +"268959e5": "removeAdmin(address,address)", +"268a4559": "competitionStatus()", +"268b0459": "getRecordBalance(address)", +"268b5344": "PlanetOfOwner(address)", +"268b946c": "toUint8Throw()", +"268bb78e": "propose(address,bytes,uint256,uint256)", +"268bc65d": "signatureDropMultipleAmount(address[],uint256[])", +"268c969a": "emergencyDrawingReset()", +"268cb5f7": "queryCost(address[])", +"268d50fe": "ownerSetHouseEdge(uint256)", +"268da061": "CRFtoken()", +"268e7075": "toBytes2(bytes)", +"268ea7f6": "ReInvest(uint256)", +"268eb055": "setDescription(uint64,bytes)", +"268ef7e8": "holdAddress1()", +"268efdaf": "StdInt64(int64)", +"268f1153": "changeState(uint8)", +"268fe426": "dailyReset()", +"2690f0d5": "foundationLock()", +"269106e9": "dayCycle()", +"2692281d": "requestChangeBurnBounds(uint256,uint256)", +"2692de22": "sendAllFunds(address)", +"2693c150": "getPlayersTickets(address)", +"2693eca0": "devSFTDestination()", +"2693ed9b": "calcTokenSold(uint256)", +"2693ee80": "bonusPool()", +"269445db": "phase_6_rate()", +"26949220": "withdrawWonCosFromGame(uint256,uint256,uint256)", +"2694f6bb": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"26961b8c": "Token99chain(uint256,string,uint8,string)", +"26965dad": "deployStepOne()", +"269695fe": "groomVow()", +"269714dd": "maximumTarget()", +"269724ef": "assertEq6(bytes6,bytes6)", +"26976e3f": "upgradedAddress()", +"26987b60": "currentIndex()", +"2698eec9": "logFeeTokenMinted(address,address,uint256)", +"269975d0": "GameDetails(uint256)", +"2699a7e7": "setPOOL_edit_31(string)", +"2699c808": "tradeOption(address[3],uint256[3],uint256[2],bool,uint256,bool)", +"269a7c3f": "buyAndTransfer(address,address)", +"269aacc8": "getDividendPayout(uint256,uint256,uint256)", +"269b0737": "DaoCasinoToken()", +"269c4bca": "viewFoundersTokens()", +"269c6ece": "lockedTwoHasEnd()", +"269cdaac": "withdrawLockedTokens()", +"269db987": "calculateBonusAmount(uint256,uint256)", +"269de5a0": "EpicExchange()", +"269e4f3c": "refundWei()", +"269eb58c": "setFeeFromPayer()", +"269ecc6d": "backersAddresses(uint256)", +"269ecf28": "submitBuyOrderWithPosition(bytes32,uint256,uint256,uint64,bool)", +"269f4663": "approveMintTokens(address,uint256)", +"269f96c9": "presaleSoldTokens()", +"269fe82e": "calcBurnAmountFromFeeBurner(uint256)", +"26a09392": "addSecondaryAddress(address,address)", +"26a1529e": "amountOfStakeReturnedOnCancellation(uint256)", +"26a18375": "setAvailability(bool)", +"26a21575": "tokenRaised()", +"26a26f71": "TgeTeamReleasingScheduleContract()", +"26a3bd4e": "subtractBalance(address,address,uint256)", +"26a3f45d": "initOwner1(address)", +"26a4861c": "CROWDFUNDING_PERIOD()", +"26a49e37": "price(uint256)", +"26a4c847": "maxLendingItem()", +"26a4e8d2": "setTokenAddress(address)", +"26a52019": "agentMakeOrder(address,address,uint256,uint256,address)", +"26a5a554": "removeFromReceiveAllowed(address)", +"26a65c10": "createDigitalArtFee()", +"26a6dfed": "toogleTransfers()", +"26a7985a": "getMaximumCallGas()", +"26a82e8b": "autoPreSaleSuccess(address,uint256)", +"26a8d1e5": "_changeManagerImpl(address)", +"26a934f5": "minResalePercentage()", +"26a9408c": "returnTokensFromHoldBountyAddress(uint256)", +"26a9de53": "verifiedTransferFrom(address,address,uint256)", +"26aa101f": "isTokenRegistered(address)", +"26aa7c58": "addBuyer(address,uint256)", +"26ab378b": "addMood(string)", +"26abc9ab": "CmctSale(address)", +"26abfe09": "burnUndistributed()", +"26ad3abc": "startTimeStage3()", +"26ad7b40": "_doesEveryTokenHaveLockupPeriod()", +"26ad8d1b": "getPositionStartTimestamp(bytes32)", +"26ae27d6": "lonmemay()", +"26aeba91": "FarziTokenSale()", +"26aebfac": "delPack(uint8,uint128)", +"26afe980": "queryOracle()", +"26b238d8": "doom()", +"26b3293f": "deposit(address,uint256,bytes32)", +"26b387bb": "pendingReturns(address)", +"26b3a6f8": "SelfKeyToken(uint256)", +"26b41613": "processFunding(address,address,uint256,uint256)", +"26b45b09": "rateTier4()", +"26b4ce7f": "NP(uint256,string,string)", +"26b51c8c": "finalBlock()", +"26b52faf": "firstWithdrawAmount()", +"26b66cb7": "amendedEarlyPurchases()", +"26b6c0b4": "settingsSwitchTransferAccess()", +"26b7d803": "getTotalBuyCount()", +"26b7fe35": "GainStuff(address,uint32,uint256)", +"26b85ee1": "myAddress()", +"26b85f0d": "mininumContributeUSD()", +"26b916b4": "Set_Interest_Rate(uint256)", +"26b92a0e": "SomniumToken()", +"26b93939": "Jokercoin()", +"26b9ce13": "setTransfersEnabled(bool)", +"26ba1c19": "addBagAndGiftAtTime(uint256,address,uint256)", +"26ba2e47": "paidETH(address)", +"26ba4319": "setDirector(address)", +"26baca1c": "getStats2()", +"26bca0f8": "get_my_info()", +"26bceb59": "mul256(uint256,uint256)", +"26bd4d96": "adPriceMultiple()", +"26bd78b9": "LogEvent(uint256,address,bytes4,bytes,uint256,uint256)", +"26bdd20b": "getNominatedMediator()", +"26bdd814": "refundPresale()", +"26bf02cf": "getBaseLevelUpFee()", +"26bf2051": "KickCommitteeVoteEvent(address,address)", +"26bfcde0": "GMCToken()", +"26bfd35c": "rewardAD()", +"26c009cb": "privateIcoSold()", +"26c0ad3a": "allowRefunding(bool)", +"26c19eba": "readValue(bytes32,uint8)", +"26c1e750": "planets(uint256)", +"26c21722": "getwithdrawEtherToAddressValue()", +"26c2bcb4": "checkBenefit(address)", +"26c30b50": "BITS(uint256,string,uint8,string)", +"26c32ff5": "demi(uint256,string,string)", +"26c387fa": "testFail_mint_without_add_authority_to_controller(int256)", +"26c3d6f8": "get_deposit_term(address,uint256)", +"26c435a9": "totalUsdFunding()", +"26c43d8f": "hodlerTotalCount()", +"26c47909": "SXCToken()", +"26c4b863": "XIOToken()", +"26c4fa3d": "setOfficialGameUrl(string)", +"26c5c154": "employeeAddress()", +"26c6d361": "FanCoin()", +"26c7edaa": "flip4(bytes)", +"26c81320": "lastgamewinner()", +"26c93389": "removeFreezableAddress(address)", +"26c989df": "holdBalance()", +"26c9959f": "LoveToken()", +"26c9bc42": "setTokenInformation(string,string,uint256)", +"26c9e547": "bestow(bytes32,uint256,address)", +"26ca1280": "_addToken(address)", +"26cb2257": "outRate()", +"26cb83b9": "setDescrutionContractAddress(address)", +"26cbb8ff": "inviterRegister()", +"26cbe6f5": "getHeroAvailableAt(uint256)", +"26cc2256": "blockRewardAmount()", +"26ccd77a": "withdrawStuckEther(address)", +"26ce3da0": "collectRefund()", +"26cee3a7": "getPlayerId(bytes32,bytes32,address)", +"26cf53b9": "BTL_PERSIAN()", +"26cf660d": "trustedOrderbook()", +"26cf9165": "pixelgrid()", +"26cfc76f": "TriPinCoin()", +"26d0d75a": "ResolutionProposals(uint256)", +"26d111f5": "note()", +"26d29ce0": "refundBid(uint256)", +"26d2b840": "addDadRelation(address)", +"26d2cba5": "updateMetaData(bytes32,bytes32,bytes32,uint256,bytes32,bytes32)", +"26d2eb11": "stopPostIcoAndBurn()", +"26d312f7": "sendWebGiftToken(address,uint256)", +"26d3325d": "getExpectedPayment(uint256)", +"26d3bde5": "execCUSEOption()", +"26d3df61": "deedsOf(address)", +"26d3e7e8": "inititalSupply()", +"26d3e889": "testCreateWithParentsForeign2()", +"26d3ed0a": "isSpentCustomerTxPaymentForMCW(address,bytes32)", +"26d541b0": "totalPlayerCount()", +"26d64f3b": "readTeam(bytes32)", +"26d6eca3": "retrieveReward(uint256)", +"26d7b3b4": "unRegister()", +"26d83db8": "LoveYToken(uint256,string,uint8,string)", +"26da881f": "setPrivateFundStart(uint16,uint8,uint8,uint8,uint8,uint8)", +"26da8e17": "ownerUpdateCostToCallOraclize(uint256)", +"26db3c0a": "tokenIssue(address,uint256)", +"26db7648": "proposedVersion()", +"26dcbcfc": "catPaymentCollector()", +"26dd1510": "pixelblockPrice(uint24,uint24,uint24,uint24)", +"26dd860a": "mintUniqueTokenTo(address,uint256,string)", +"26ddaebc": "getPriceWithBonus()", +"26dec45e": "getUserUsername(address)", +"26defa73": "addAuthority(address)", +"26df61f6": "permittedContractsCount()", +"26dfb6b4": "advteamPool()", +"26dfe583": "partialDivest(uint256)", +"26e010c8": "minInitialMarginAmount()", +"26e137c2": "getInterfaceImplementationStatus(address,bytes4)", +"26e23485": "renamingCostsPerChar()", +"26e33670": "NewQuiz(string,bytes32)", +"26e41a3e": "airdropTokens(bytes32,address[],uint256)", +"26e43db5": "TransferSell(address,address,uint256,string)", +"26e501a8": "BitonlineStore()", +"26e56c05": "SaleCapReached()", +"26e5ab38": "changeMaxWithdraw(uint256)", +"26e5afdf": "Yinfiniti()", +"26e5b0be": "stopMulti()", +"26e6050d": "setParamsIco(bool)", +"26e6074b": "frozenBalance()", +"26e683fb": "NotitiaToken()", +"26e72d31": "resetCurrentRoundSales()", +"26e770e9": "Information()", +"26e77179": "PaymentRefunding(uint256,address,uint256,string)", +"26e80650": "upPlayerRound(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"26e85250": "viewRequest(uint256)", +"26e89689": "applyForCertifition(address,string,uint256,string,uint256,bool)", +"26e8cd23": "bobMakesEthDeposit(bytes32,address,bytes20,bytes20,uint64)", +"26e90775": "calculatePrize(uint256,uint256,uint256)", +"26e97fce": "allowMint(address,uint256)", +"26e9fd9e": "remove(bytes20)", +"26ea66bf": "Mortal(address)", +"26ea74e2": "approvedDividendsOf(address)", +"26ea7ab8": "changeadmin(address)", +"26ea9268": "FEE_SELECT_MAX_VALUE()", +"26eaee92": "devReward()", +"26ebc8af": "UserAuthorizedForToken(address,address,address)", +"26ebe0bf": "totalCentsGathered()", +"26eca77c": "HelloGoldRound1Point5()", +"26ed274e": "decreaseBurnApproval(address,uint256)", +"26ed794b": "mobilinkTeamAddress()", +"26eda1ac": "putMessage(string)", +"26ef8ba1": "putEth()", +"26f08aec": "setotherchainstotalsupply(uint256)", +"26f09042": "testThrowNoFreeTokens()", +"26f1069f": "approvePresale(address)", +"26f21080": "allowedToTransferOf(address)", +"26f2458a": "RequestP(bytes32,bytes32)", +"26f35ff2": "activenessUpgrade(uint256,uint256)", +"26f3ceaf": "TSToken()", +"26f4739e": "LogBuyTokens(address,uint256,uint256)", +"26f489f6": "_updateCardPerkText(uint256,string)", +"26f4b3de": "userTakeOrder(address,address,uint256,uint256,address)", +"26f590f6": "setAttribute(string,string,bytes)", +"26f59b8b": "ProICOHardcap()", +"26f6ec3b": "getCities(uint256[])", +"26f743d0": "createGuess(uint256,uint256,uint256,uint256)", +"26f78835": "XXXChain()", +"26f86791": "_indexOf(string,string,uint256)", +"26f8abf9": "getRankOnePlayer(address)", +"26fa9082": "Enumivo()", +"26faae42": "addChild(address,bytes32,bytes32)", +"26facdb1": "TeamTokenDistribution(address)", +"26fae0d3": "setMaster(address)", +"26faf1e9": "SVLightIndex()", +"26faf9c2": "EatMeCoin(address)", +"26fc4c7f": "returnTokens(address,uint256)", +"26fc71eb": "isConfirmedGblock(bytes32)", +"26fd8422": "calculateEggBuy(uint256,uint256)", +"26fdb484": "OwnershipRevoked(address,address)", +"26fe18e2": "setMintingOracle(address,address)", +"26fe2024": "newRate(string)", +"26fe7cf2": "createStar(uint8,uint16,string,string)", +"26fe9951": "delegatedFrom()", +"26feba74": "MaorTestCoin()", +"26fed988": "addCancelledOrFilled(bytes32,uint256)", +"26ffa189": "setEnableWhiteList(bool)", +"2700615c": "_getShipInfo(uint256)", +"27018631": "icoBonus()", +"2701d40f": "ForSale()", +"2701ebd8": "NDT3()", +"27028aae": "voteOnBounty(uint128,uint256,bool)", +"27029357": "addToReceiveAllowed(address)", +"27029e83": "BurnToken(address)", +"2703506f": "CouponDeposit(address[2],uint256[8],uint8,bytes32[2],uint256)", +"2703e545": "projectInfoPublic(address)", +"2704355c": "setGenesisCallerAddress(address)", +"2704e8e9": "addRemovableIdArrayItem(address,uint256[],string,string,string,address)", +"2704ead4": "_isValidSkin(address,uint256,uint256)", +"27053417": "_updateSeed()", +"270537c0": "lockReserveTokens(address)", +"2705ce6a": "setAuditorDelegate(address)", +"27066ebb": "getOwnedTokensIds(address)", +"27071f6a": "_tokenOfOwnerByIndex(address,uint256)", +"270835d0": "allocateBid4a(bytes32)", +"2708a710": "MintHelper(address,address,address)", +"2708db73": "requestLeave(uint256,string)", +"270a3856": "startDist()", +"270a5420": "buyFST()", +"270a8ef7": "existingMarketOrder(uint256)", +"270abf36": "getChickenAmount()", +"270ba309": "getRegistryDataInitialized()", +"270bb8ad": "setImmigration(address)", +"270bfc07": "fundingAccount()", +"270cf206": "ENSReverseRegister(address,string)", +"270cfee1": "getTokenAccount()", +"270d13fb": "isCoinIdUnique(uint16)", +"270dc9fd": "changeName(string,uint256)", +"270e4cf0": "buyerAddressTransfer(uint256,address,address)", +"270ef385": "CLAIM_AMOUNT()", +"270f611f": "burnBalances()", +"270f7219": "getJntController()", +"270f9359": "Exploit(address)", +"270fdd1a": "GricCoin()", +"2710ddcb": "setMsg(bytes32)", +"27120de9": "numberOfStarsReserved()", +"27121069": "verify(bytes,uint8,bytes,bytes)", +"27121b76": "claimDailyLoot(uint256)", +"2712d916": "setSanTTTCost(uint256)", +"27132be6": "getCustomBuyerMappingCount(address)", +"27136e46": "changeTransactionService(address)", +"2713a1b4": "getUserWithdrawnBalance(address)", +"27150f01": "devFeeSize()", +"27151526": "nextBid()", +"27158b7b": "MFToken()", +"271619fb": "CreateContract(int256,int256,uint256,uint256,int256,address,string,uint256,int256,string,uint256)", +"27164f15": "getBuyOrdersInfo()", +"2716783d": "distributeERG(address[],uint256,uint256)", +"2716baa6": "startContruibute()", +"271761c0": "EventSuccessfulTraining(uint64,uint64,uint64)", +"271781ad": "getRestSumStageICO()", +"2717cc7c": "ParticipatedInVoting(address,address,bytes32,uint256)", +"27180e42": "wantItMoreThanYou(uint256)", +"27187991": "setEtherPrice(uint256)", +"271a50db": "setAgonFight(address)", +"271af8c1": "tokenCollector()", +"271b3e8a": "snakemasterReq()", +"271b5311": "getValidateSignatureAddress(address,string,uint256,uint8,bytes32,bytes32)", +"271bac4a": "setBonusPhase(bool)", +"271c34d7": "denyProposal(uint256)", +"271cacbf": "batchAddToWhitelist(uint256,address[])", +"271cd760": "getPackageDb()", +"271d9090": "HenryToken()", +"271dd15b": "getWinNumberAddress(uint256,uint256)", +"271dec50": "Invested(uint256,address,uint256,uint256)", +"271df6e5": "canLotteryFree()", +"271f88b4": "setAmount(uint256)", +"271fe8be": "buyNormal(address)", +"2720e4f6": "LC()", +"27213345": "totalSupplyToken()", +"2721a114": "queryWinner(string)", +"2722692c": "lastBlockSet()", +"2722c043": "raiseEventIfMinted(address,uint256)", +"27234ecc": "takeBalance(address,address,uint256,address)", +"2723639b": "getPixelAreaColor(uint256,uint256,uint256,uint256)", +"2724312a": "Micropayment(address)", +"27243160": "bookmark(string)", +"2724e032": "manualEndDay()", +"27258b22": "isRegistered(bytes32)", +"2726403a": "testCanTrade(address,address)", +"2726a530": "getHodlHasBeenWithdrawn(uint256)", +"2726b506": "getDeposit(address,uint256)", +"2726f061": "commitVotes(address[],bytes32[],bytes32[],bytes32[])", +"27270550": "swapAble(bool)", +"27275a35": "SuretlyToken()", +"2727d018": "PlusPayLite()", +"272870ac": "pausable(bool)", +"272894ca": "refundTokenBet(uint256,uint8)", +"27295d7c": "updateMaxPhase2(uint256)", +"272961ff": "depositAgent2(uint256,uint256,bytes,uint256)", +"2729f44e": "addTxToRegistry(bytes32,bytes32,uint256,uint256,uint256)", +"272a33e8": "allocateBid2(bytes32)", +"272a3e16": "PlayerWon(uint256)", +"272a847f": "HAICrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"272ae0b5": "MIMIMUM_CONTRIBUTION_AMOUNT_PREICO()", +"272caf69": "stakeContractAddress()", +"272cda88": "EternalDB()", +"272d20e7": "amount_direct()", +"272e20fa": "__abort__()", +"272edeac": "currentMineTokenAmount()", +"27301964": "withdrawDevTokens(address,uint256)", +"2730e4a2": "_arrangeMasternodeFlow()", +"273123b7": "delBot(address)", +"27315b5f": "Settlement(address,address,uint256,string,string)", +"27329380": "getRecentPlayersCount()", +"27329b05": "enableBot(address)", +"27332624": "_lottery(uint256,address,address)", +"27341c8a": "isEmpty(string)", +"2734242b": "BunnyToken()", +"273696cd": "SetImplementation(address,address)", +"2736a558": "removeBackdoor()", +"2736f6d9": "setTokenAndRate(uint256,uint256)", +"2737033f": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,address)", +"27374015": "functionFive()", +"27378684": "price4()", +"27380c2c": "updateAngelCardSeries(uint8,uint64,uint64)", +"2738154e": "checkRokBounty()", +"2738a112": "triggerSelfDestruction()", +"2738bf4d": "addLeaderboard(string,string,uint256)", +"2738ed25": "Player_Bettings(uint256,uint256)", +"27393390": "setTokensMultiplier(uint256)", +"273a041c": "_self()", +"273a5729": "eligibleTokens()", +"273afe15": "ParisToken()", +"273b1dd3": "RealMadridvsLiverpool()", +"273b1fb3": "betbucketOne()", +"273b465b": "verifiedAgeOver(address,uint256)", +"273ba6bb": "ICO()", +"273bc3c9": "numberOfThrones()", +"273ca81c": "getMegaBalance()", +"273cb593": "isMasterOfCeremonyRemovedPending()", +"273cbaa0": "getTokenList()", +"273cc2a5": "depositOpen()", +"273dd51f": "_distributeHorse()", +"273e2c78": "F2UPay()", +"273ea3e3": "incrementNumber()", +"273f1de7": "paySellerFee(bytes32,address,uint256)", +"273f4940": "set(bytes32,uint256)", +"273f9ace": "getNumbers(bytes32[])", +"273f9bed": "signedTransferFromCheck(address,address,address,address,uint256,uint256,uint256,bytes,address)", +"273fd520": "EthlanceFeedback(address)", +"2740509d": "urbitTeamTokensVault()", +"2740e64b": "getInitializeParentPayoutDistributionHashValue()", +"27411dfd": "getPoliceFee(uint256)", +"27413437": "grantFounderToken()", +"2741876a": "totalPresses()", +"2742d511": "setWhitelistedStatus(address,address,uint256)", +"27436b59": "getCarCount()", +"274465b4": "payForMyself(uint128)", +"27457b3b": "getMyInventory()", +"27458664": "enableTokenMinting()", +"27458cbc": "disallowClaimer(address[])", +"274748e6": "setInactivityReleasePeriodForToken(address,bool,uint256)", +"2748503f": "ChangedOwner(address,address)", +"27486a7c": "combineCards(uint256[])", +"2748d7e4": "claimPlotWithData(uint256,string,string,string,string)", +"2749bd81": "getTimestamp(address,uint256)", +"274a1f29": "setNextLotteryTTMTokenId4(uint64)", +"274a9b1c": "addressToEtherContributed(address)", +"274acb35": "add(uint96,uint96)", +"274b1615": "keyValidations(address)", +"274b3df4": "deposit_eth()", +"274b9bc5": "ETHx2()", +"274bc107": "test_threeValidEqBytes()", +"274c343a": "HTCCToken()", +"274c7922": "privilegedAddress(uint256)", +"274db4d6": "_price_tokn_PRE()", +"274ed288": "debtBalanceOf(address,bytes4)", +"274f97bb": "buyReply(uint256,uint256)", +"274faa9f": "minContributionUnits()", +"274fadf6": "updateServiceDescription(address,uint32,string)", +"274ff7ce": "burnFrom(uint256)", +"27506099": "getCountPlayersOfOwner(uint256,address)", +"27507458": "isLive(uint256)", +"2750fc78": "setIsActive(bool)", +"275103fd": "hault()", +"27521702": "mint(int256,address,uint256,bool)", +"2752808a": "CAPcoin()", +"2752de56": "addMoneyPool(address,address)", +"27538e90": "getCapabilityRoles(address,bytes4)", +"2753d7f2": "artworksFactory()", +"2753f254": "workedTodayInSeconds()", +"2754ff69": "test_2_ensureProposalExecution_increaseBlocksBy100()", +"2755a13b": "forceClose(uint256)", +"2755cd2d": "tip()", +"275601f6": "getAllProviderParams(address)", +"27566b80": "transferCollectedEther(address)", +"275676cf": "ClassicVolkswagen()", +"27567c4c": "setIsPoop(string)", +"2756d38a": "IonChain()", +"27571087": "getBonus(bytes32,uint8)", +"2757a07c": "SSDDTT(uint256,string,string)", +"2757e976": "transferredIndex()", +"2758743c": "LATINOToken()", +"27589224": "minBuyingRequestInterval()", +"275893a9": "updateMaintenanceAddress(address)", +"27593eee": "ChangedName(address,string)", +"27597f0a": "costForProductCycles(uint256,uint256)", +"2759ea4a": "lookupSprite(uint256)", +"275a1334": "buySellPrices()", +"275a329a": "BCASToken(uint256,string,string)", +"275a92cf": "TokenPurchase(uint256,uint256,address,address,uint256,uint256)", +"275acbe3": "ln(uint256,uint256,uint256)", +"275b6eb0": "calculateSeedSell(uint256)", +"275babee": "getRareInfo(uint256)", +"275be02c": "MRBLToken()", +"275beec6": "createItem(uint256,string,address,uint256,string,string,uint256)", +"275bf230": "addAddressToAccount(address,address)", +"275c82ca": "GasUsed(uint256)", +"275cb687": "setNextPoolPercentage(uint256)", +"275ccb13": "computeLeaf(uint256[],uint256)", +"275d60bc": "getReturnAddress(address)", +"275e2d3f": "st4ckCount()", +"275e2f86": "MORCoin(uint256,uint256,uint256,address)", +"275e5da5": "probe(address)", +"275f3d92": "view_readyTime(address,address)", +"27608c24": "unsoldToken()", +"2760c57e": "lastPing()", +"276184ae": "erc20Address()", +"2762484a": "SBIToken()", +"2762cf10": "contract_transfer(uint256)", +"2763d8fb": "FabCoin()", +"2765faae": "MaximalInvestmentTimeTresholdChanged(uint256)", +"276605bc": "updateFundingStartBlock(uint256)", +"27669781": "emitInfo(uint256,uint256,address,uint256,uint256)", +"27678dca": "getHWCAddressCount()", +"27687d34": "advisersTokenTimelock()", +"276920eb": "setOwnerTokenPercentage(uint256)", +"276927c5": "sellSpaceship(uint256,uint256)", +"2769b96b": "updateItemPrice(uint256,uint256)", +"2769c89a": "setGameStartTime(uint256)", +"276a28a3": "isTokenLocked(uint256)", +"276b94e1": "copypaste()", +"276bf637": "isTimedout(uint256,uint256,uint256)", +"276c9d0a": "balanceOfOld(address)", +"276cd2e8": "BTTPERETH()", +"276e3968": "bits(uint256,uint256,uint256)", +"276e6472": "deleteById(string)", +"276ebc6a": "ChargeTest()", +"2770a488": "transferWithIndex(address,uint256,uint256)", +"2771083f": "setSpreadPercent(uint256)", +"27729e93": "openLottery(uint8)", +"2772dffd": "votes(bytes8)", +"27731e77": "setCCH_edit_9(string)", +"27734225": "getCommitteesNumber()", +"2774d052": "mintPresell(address,string)", +"277576ca": "theTurn()", +"27757c49": "isVariation()", +"2776a859": "computeResponseSecondHalf(uint16)", +"2776b163": "setstoredaddress(address)", +"27773ba2": "addrAirDrop()", +"27782e42": "refreshActiveShareholdersArray()", +"27783050": "getEntryHash(address,uint256,bytes32)", +"27793f87": "outcome()", +"277942db": "marriageLicenceImageIPFShash()", +"27796092": "t4tToken()", +"2779ea96": "addPostOnBoard(address,address,address)", +"2779eb52": "setUserRank(address)", +"277a6889": "calculateInterest(uint32,uint256)", +"277ad1f6": "amountSellForOneEth()", +"277ad5d8": "secondRoundMayDiscount()", +"277ad6d4": "PreSaleResumed()", +"277b2db6": "getPlayerVaults()", +"277b6527": "targetCrowdsale()", +"277b8ffc": "getBeneficialAddress()", +"277ccada": "unlistTrophy(uint256)", +"277ccde2": "getHKGPrice()", +"277d4725": "getEthereumToken()", +"277e1b16": "changeMaxDonationLimit(uint256)", +"277e1de7": "transferAccessory(address,address,uint64)", +"277e268e": "testFail_set_label_unauth()", +"277ea83d": "getTrustPlatform()", +"277f6331": "ETVRToken()", +"277fc0e9": "getSignature(address)", +"277fc17d": "daysToSeconds(uint256)", +"277fef99": "transferPoint(uint32,int256,address,bool)", +"27806a16": "DoxCoin()", +"2780d22b": "getMigrateMarketInFromNiblingCalled()", +"27810b6e": "burner()", +"27815883": "_setHairValue6(uint256)", +"27816235": "onSaleEnded()", +"27816932": "AdaptableToken(uint256,uint256)", +"27816ffc": "logMarketFinalized(address)", +"2781c3d1": "ownerSetdiceRollAddress(address)", +"2782ca8d": "MINIMUM_PURCHASE_IN_USD()", +"27836f77": "setImageData(uint256)", +"2784ad48": "computePayment(uint256,uint256)", +"2784d868": "getMiniPoolEdit_2()", +"2784e3f3": "refundVotingTokens(address,address)", +"27854452": "allocateAgents(address)", +"2785ed21": "LogCertificationDocumentAdded(address,bytes32)", +"2785fb98": "getContributionETH(address)", +"27860587": "TXToken()", +"27869c57": "gluon()", +"2786f089": "setUserAllocMin(address,uint256)", +"2787fac2": "LordCoinPreICO(address,address,uint256,uint256,uint256,uint256)", +"27880e1f": "KyberNetwork(address)", +"2788f4f3": "OraclizeCallback(bytes32,string)", +"2789192f": "isConfirmedSettingsRequest(uint256)", +"27895f13": "_advanceClock(bytes32,uint256)", +"27899ce2": "allowNewReceiver(address)", +"27899d9b": "LGOToken()", +"278a3684": "advisorAmount()", +"278a4c4f": "setMasterToReferral(address,address)", +"278a5e7c": "cancelScript(address)", +"278ab692": "startDispute(address)", +"278af72c": "isSaleClockAuctionStorage()", +"278b8c0e": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"278bb4a2": "EthealDeposit(address,address)", +"278bee92": "_receiveMakePlant(address,uint256,uint256)", +"278c284c": "CrowdsaleToken(string,string,uint256,uint8)", +"278c2977": "chooseOpponentForGladiatorBattle(uint256,uint256,bytes32)", +"278c3030": "phase_2_Time()", +"278c4d71": "peaceOfTRC20(address,uint256)", +"278c688e": "getBackToken(uint256)", +"278cc714": "getUsablePlayerFibokens(address)", +"278d6e5b": "funcArrayInArguments(address[],address[])", +"278d818c": "setMaxRankingSpots(uint8)", +"278d9637": "limitTransfer()", +"278e07ce": "setStatus(address,uint8)", +"278e72da": "_destroy(uint256)", +"278e9d03": "testMemoryIntegrityCheck33Bytes()", +"278ecde1": "refund(uint256)", +"278f05ba": "SolomexCrowdSale()", +"278f2ab8": "deposit(bytes32,uint256,uint256)", +"278f49b9": "SetupRaffle(string,string)", +"278fcffa": "accountsLastClearTime(address)", +"278ffa13": "confirmTopUpLimit(uint256)", +"279029b3": "remainingARXSupply()", +"27904ee0": "getRabbitMotherSumm(uint32)", +"2791cb17": "setClientLastSupplyID(address,uint256)", +"2792949d": "BTC()", +"2792e765": "transferCroupier(address)", +"27933ffa": "LYToken()", +"27939ea2": "issuerReservedMaximumPercentage()", +"2795348d": "KittenSelfDrop2()", +"279586f3": "AltBuy(address,uint256,string)", +"27960c5f": "validateEndowment(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"279616fe": "TransferDissolved(address,address,uint256)", +"27962fc1": "tokensAmount(uint256)", +"27970ea1": "updatePlayerRecommendFund(address,uint256,uint256)", +"27972584": "MintRestarted()", +"27972b99": "StarterToken()", +"27972e8f": "GRVToken()", +"27979b35": "genLevelExpGain()", +"2797e0c3": "getInitBlockNum()", +"27987533": "defaultResolverChanged(address,address)", +"2798cecd": "requestData(address,uint256,uint256,bytes32,address,bytes4,bytes32,bytes)", +"2798d1b2": "my_token_balance()", +"2799276d": "totalItems()", +"279a34f1": "switchSaleStage()", +"279a475f": "TJToken(uint256,string,uint8,string)", +"279aa01f": "getManualAddress(uint256)", +"279b4e76": "createAuction(uint256,uint256,uint64,uint256)", +"279b9562": "initIntervals()", +"279b9c7b": "HJToken()", +"279bad16": "fuel()", +"279c7425": "getTokensOwed(address,uint16)", +"279c94c0": "admin_add(address)", +"279cea35": "execScript(bytes,bytes,address[])", +"279ddc64": "SetBankerCandidate(uint8,address)", +"279e02a0": "getMemberDividendsAmount(address)", +"279e0912": "getDownloadPrice()", +"279e1c43": "_createCollectible(uint256,uint256)", +"279e79b5": "ZebiCoinCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"279f5d31": "pop1()", +"279fdf6d": "trustedVault()", +"279fdf96": "setPresaleMarketAddress(address,address)", +"279fe967": "maxEthCapSellInFp()", +"27a030eb": "getRandomLotteryTicket()", +"27a06733": "setKycRequirement(address,bool)", +"27a099d8": "getOperators()", +"27a0d669": "getImplementation(string,string)", +"27a1a414": "allowedLocks(uint256)", +"27a1d948": "doubleDown(uint256)", +"27a1f35a": "setOpenStatusEgg(uint256,bool)", +"27a21061": "to_start_ico()", +"27a2aee2": "Commission()", +"27a3181d": "price2()", +"27a3e16b": "setBlockRewardContract(address)", +"27a3fe41": "getMintLimit(address)", +"27a49cbe": "BankrollLending(address,address)", +"27a5428b": "setLevel(uint256)", +"27a5b3bc": "transitivePath(bytes32,bytes32,bytes32)", +"27a5c7c6": "voteDecline(uint256)", +"27a5e952": "testDecimalsUsingDeployedContract()", +"27a69644": "checkTransferDelegated(address,address,uint256,uint256,uint256,bytes)", +"27a6a7de": "newMinimalEthers(uint256)", +"27a75474": "salvageNotAllowedTokensSentToContract(address,address,uint256)", +"27a7b827": "updateExistingMember(address,uint256)", +"27a7c883": "transferWithExtra(address,uint256,bytes32,bytes32)", +"27a822df": "smart()", +"27a82833": "_supportsInterface(address,bytes4)", +"27a8890e": "withdrawedCoummunityCounter()", +"27a910dc": "ownerWithdrawETH()", +"27a936d7": "BlockchainBattleground()", +"27a93cce": "playerGetPendingTxByAddress(address,address)", +"27a9ec0f": "IDice()", +"27ab6871": "addCandidateByIndex(uint256,address,bytes32)", +"27ab9f20": "botIndexToOwner(uint256)", +"27ac36c4": "reserveTokens()", +"27ac4b70": "getNamespace()", +"27ac7934": "transferPAIReceiptOwnership(address)", +"27ac9e5f": "periodNow()", +"27acfff9": "badgeFreeze(address,uint256,uint256)", +"27add9fb": "VoxelRepainted(uint8,uint8,uint8,uint8)", +"27ae587c": "MAX_TOKEN_REWARDS()", +"27ae949f": "buyFST0(address)", +"27aeafb7": "AuditorUnregistered(address)", +"27aedd10": "Founders()", +"27aeeaa8": "AxiePresaleExtended()", +"27af1d98": "disToken(address)", +"27af7d9c": "assertEqDecimal(uint256,uint256,uint256)", +"27af9e38": "space()", +"27b00b3e": "setUpdateState(bool)", +"27b022af": "MembershipChanged(address,bool)", +"27b075a7": "FlCToken()", +"27b0c674": "updateEtherBalance()", +"27b37367": "parseLoanOffering(address[9],uint256[7],uint32[4],bytes)", +"27b380f3": "withdrawalRequests(address)", +"27b3a83c": "buyAtIndex(uint256)", +"27b3bf11": "claimTime()", +"27b44a6c": "pendingWeiAmount()", +"27b4634e": "transmuteTransfer(address,uint256,address,string,string)", +"27b4e228": "setPoolFeeRate(uint256)", +"27b55475": "review(string,bool)", +"27b57aee": "emissionContractAddress()", +"27b57fcc": "sumValues(uint256,uint256)", +"27b5985b": "addToException(address)", +"27b5aaf8": "RESERVE_TOKEN_AMOUNT()", +"27b5db8a": "addPlayer()", +"27b752b8": "sha3HexAddress(address)", +"27b7a2f5": "nameRegistryAddress()", +"27b7cf85": "log(bytes32)", +"27b7d0a6": "EditDomain(string,string)", +"27b96df7": "pausePayment()", +"27b972f9": "getNameOwner(string)", +"27b9c257": "setRequestProcessed(uint256)", +"27bb020a": "altarCut()", +"27bb1db7": "SOPToken(string,string,uint256)", +"27bb2d82": "_checkPixelIdExists(uint256)", +"27bb3d0f": "eth_price()", +"27bb46f0": "removeActiveArray(address)", +"27bb6d8e": "buyoutCost(uint256)", +"27bbea3a": "setWhiteListAddress(address)", +"27bc39c0": "submitCanonicalCandidate(bytes,bytes,bytes,bytes)", +"27bcc9ca": "finalizeConfig()", +"27bce91b": "betId()", +"27bd56d9": "sendAuctionQuery(uint256,uint256)", +"27be1b35": "promoCode()", +"27bf6568": "authorityBalance()", +"27bfeaf5": "setGemPrice(uint256)", +"27c16605": "getBidByProducerAndDay(address,uint32)", +"27c1f423": "preBuy1()", +"27c2e437": "buyTokensFromBalance(address,uint256)", +"27c36a47": "specialAllowance(address,address)", +"27c39749": "test_oneValidEqBytesUint(int256)", +"27c42050": "buildIdentifier(address,address,address,bytes32,uint128,uint128,uint256,uint32,uint64,uint64,string)", +"27c4a208": "GSCoin()", +"27c4bde8": "Planethereum(address,address)", +"27c5cdea": "test2(address[5],uint256[5])", +"27c5e534": "mixDNK(uint256,uint256,uint256)", +"27c67440": "getWarranty(string,string,address)", +"27c6c720": "privateWallet()", +"27c725e1": "applyforCetification(string,string,string,string,string,string,bool)", +"27c78c42": "request(address)", +"27c7ff61": "noShares()", +"27c81eb8": "TestDRMK()", +"27c830a9": "emergencyPaused()", +"27c8dae5": "getAmountOfLinkerBuy(uint256)", +"27c96207": "WinnerAnnounced(uint8)", +"27c97fa5": "deauthorize(address)", +"27cadd13": "getSides(uint256,uint256)", +"27cc1fd8": "party_b()", +"27cca148": "lastClaimedBlock()", +"27ccdbc5": "setWalletContract(address)", +"27ccdd0a": "changeServiceReceiptAddress(uint32,address)", +"27cd0d96": "getLockedAmount_simus(address)", +"27cd933a": "RequestEvent(address,address,uint32)", +"27cda9d5": "AcceptsEtheropoly(address)", +"27cdab06": "fee(bytes32)", +"27cdbf4a": "existingNames(bytes32)", +"27ce5b8c": "getNumberOfOutcomes()", +"27ce6fa9": "unlockup(address)", +"27cef820": "hasForgivedChar(string)", +"27cfe856": "DAY()", +"27d120fe": "updateTransfer(uint64,uint256,bytes32,bytes32,bytes)", +"27d1913c": "buyerCancel(uint16,address,address)", +"27d1c3a6": "transferChamp(address,address,uint256)", +"27d1f39e": "mastery()", +"27d21602": "buildings_total()", +"27d23b86": "receive(address,uint256,bytes)", +"27d26d6e": "testCannotRedeployANT()", +"27d272c5": "getFirstBuyersFee()", +"27d3a8ad": "LogUpdatedComplianceProof(bytes32,bytes32)", +"27d42fc0": "setReservedWallet(address)", +"27d511ae": "activateCommunityFund()", +"27d51979": "getTokenTransferSetCount()", +"27d6ba21": "getDistributedToken()", +"27d6c032": "unregister(bytes)", +"27d6d6e0": "ownership(address)", +"27d6dfbf": "BITNT()", +"27d741df": "SALE_END_DATE()", +"27d7874c": "setCEO(address)", +"27d795d7": "start_date()", +"27d8455c": "setMainSaleStartAndEndTime(uint256,uint256)", +"27d87924": "registerNameXaddr(string,address)", +"27d8a9e5": "CofounditICO(uint256,uint256,address)", +"27d8fb97": "removeLaureato(string)", +"27d93a70": "addFighter(address,address)", +"27d94182": "MAX_PRIVATE()", +"27d95c8c": "getContaOuvidoria(uint256)", +"27d9ac67": "NewMarketMaker(address,string)", +"27da0078": "SpindleToken()", +"27da5ca5": "batlordReq()", +"27dad426": "init(address,string,string,uint8,uint256,bool,bool)", +"27db9e82": "reevaluateETHPrice(uint256)", +"27dba183": "getProcessablesSize()", +"27dba807": "buyWithBonus(address)", +"27dc297e": "__callback(bytes32,string)", +"27dc7085": "getInvestorInforValue(address)", +"27dd16e5": "paymentAction(bytes32,uint256[],uint256[])", +"27dd3873": "plantedTime()", +"27dd941e": "unlockDates(uint256)", +"27ddbb16": "mnyLeftInCurrent()", +"27de1a4d": "mintToAddressesAndAmounts(address[],uint256[])", +"27de1fc9": "fixPlayerCountryString(uint256,string)", +"27de2459": "HungerCoin()", +"27de2765": "Assert(bool)", +"27de9e32": "unbond(uint256)", +"27defa1f": "onlyAmbassadors()", +"27df664b": "minPrivateContribution()", +"27dffba6": "startRegularPhase()", +"27e056a5": "addMinter(int256,address)", +"27e07647": "setFundingFueled(uint256)", +"27e0feaf": "_allocateTokens()", +"27e10295": "storedProfit(address)", +"27e152bb": "maxCoinSides()", +"27e1f7df": "deleteAdmin(address)", +"27e235e3": "balances(address)", +"27e2dd48": "getRandomSeed(string)", +"27e44059": "VReetUp()", +"27e56719": "ENIGMA()", +"27e584d4": "TOTAL_PARSEC_CREDIT_SUPPLY()", +"27e65007": "min_investment_presale_eth()", +"27e728ec": "enableCodeExport(address)", +"27e72e41": "defaultDelay()", +"27e7c023": "sendTokensToFounders()", +"27e7e21e": "air()", +"27e7fe5a": "ONEPERCENT_TOKENS_PER_ETH()", +"27e8c2d8": "burnUnicornShares()", +"27e90a7e": "offerBorrowingItem(uint256,uint256,uint256)", +"27e95f87": "pubkeys2()", +"27e9a0b6": "files(bytes32,uint256)", +"27e9b1a0": "getArrLength()", +"27e9f294": "addItem(string)", +"27ea06b8": "numberOfTokensLeft()", +"27ea6f2b": "setLimit(uint256)", +"27eac914": "cancelAuction(uint32)", +"27eb95cf": "deathData_v13()", +"27ebcf0e": "sharesTokenAddress()", +"27ebe40a": "createAuction(uint256,uint256,uint256,uint256,address)", +"27ec2c03": "getAvgPps()", +"27ed31ff": "localityCode()", +"27ed810d": "setMaxBlockDrift(uint256)", +"27edf097": "burnPerTransaction()", +"27eea9cd": "CCCCCToken(address)", +"27eeefa6": "paymentOnTime(uint256)", +"27ef89bc": "DEV_TEAM_PORTION()", +"27ef986d": "ExternalToken(address)", +"27efc086": "TOTAL()", +"27f02f74": "core(uint256,uint256,uint256)", +"27f05e06": "distributeTokensPreIco(uint256)", +"27f06a6e": "permitChildContract(address[])", +"27f06fff": "requestFillUp(uint256)", +"27f12c8e": "registerAsImportingAuthority(address)", +"27f1bb7f": "prefixedHash2(address)", +"27f1f521": "Kurecoin()", +"27f2402b": "acceptSacrifice(uint256)", +"27f2db32": "finalizeChangeStaker()", +"27f397a9": "borrowerReturnFiatAmount()", +"27f39abf": "tokenOwnerWallet()", +"27f3a72a": "thisBalance()", +"27f3fb69": "setMachine(bytes32,bytes32,uint256,uint256,uint256,uint256)", +"27f498c9": "changeTokenSender(address)", +"27f4b056": "getDemocInfo(bytes32)", +"27f50a2d": "getDocuments(address)", +"27f576d1": "withdrawFromReserve(address,uint256)", +"27f69c37": "roundInvestorInfoByIndex(uint32,uint32,uint32)", +"27f6e676": "addApprovedGame(address)", +"27f7be99": "boosterContract()", +"27f85c13": "setUsdEth(uint256)", +"27f8ce38": "gamePause()", +"27f8d7ba": "setEndPreICO(uint256)", +"27f93e59": "createContractMeme(uint256,string)", +"27fa35c3": "getMarketsCount()", +"27fb1da7": "ICOState(bool)", +"27fbcac5": "getChannelFeed(address,uint256,uint256)", +"27fc2414": "follow(address,uint8)", +"27fde806": "erc20GST(uint8)", +"27fe0d10": "maximumWEI()", +"27fe75ed": "lockTokenLocker()", +"27ff1374": "TotalDeposited()", +"27ffb7b0": "purchaseRound()", +"28006b31": "makeLiquidPri()", +"28012606": "createAuction(uint256,uint256,uint256,uint256,address,uint256)", +"2801617e": "set(address)", +"2801e43a": "authorizedLoggers(address)", +"28026ace": "depositAndApprove(address,uint256)", +"2802cacc": "cancelOrderByAdminWithPayer(string,address)", +"280376b3": "CinderTokenSale()", +"2803d8e5": "MIN_TOKEN_UNIT()", +"28043306": "migrateTransfer(address,uint256)", +"28044357": "CollectibleIndex1()", +"280464ed": "fundsToTokens(uint256)", +"28046f30": "handleBlockBalanceLedger(address,uint256,uint256)", +"2804b2c0": "customer()", +"2807eece": "purchaseNo()", +"2808241e": "vote(uint8,bool)", +"28086f18": "bidETHMin()", +"2808c8ad": "thisContractBalance()", +"28090abb": "logSweep(address,address,address,uint256)", +"2809c5e1": "isBountyAllocated()", +"2809c7e1": "AuctionCancelled(uint256)", +"2809df16": "MetaUpdated(string,string)", +"280a3382": "fundariaTokenBuyAddress()", +"280af7d3": "setData(string,string,string)", +"280b8846": "Token(string,string,uint8)", +"280c2604": "SCADA_requires_hard_cap()", +"280ca666": "getAllElements()", +"280cd0e6": "getBetSizeAtRound(uint256)", +"280da6fa": "withdrawAllTokens()", +"280dd460": "adjustFeePercentage(uint256)", +"280e0359": "bonusLevel0()", +"280e682c": "mintImpl(address,uint256)", +"280f958e": "transferLockedFrom(address,address,uint256,uint256,uint256[])", +"281027b9": "isPrimaryOperator(address)", +"28102e54": "amountWon()", +"2810dd4a": "ParcelXToken(address[],uint256)", +"2810e1d6": "resolve()", +"28111984": "setIcoState(uint8)", +"281134bc": "noahToken()", +"2811d4e0": "sendSecondBatch(address[],uint256[])", +"2812988f": "object()", +"2812f8b8": "FutureCall(address,uint256,uint16,address,bytes4,bytes,uint256,uint256,uint256)", +"281318c8": "all_unfreeze()", +"281336b4": "terminateEmployee(address,uint32,uint32,uint32,uint8)", +"2813acc9": "indexAccount()", +"2813de17": "toggleTransferablePending()", +"28148d07": "setCategoryVerify(uint256)", +"2814a371": "createOfAthleteCard(string)", +"2814da3c": "transferDeposit(uint256)", +"28155727": "makerWithdrawEther()", +"2815741c": "Sort()", +"28159ef6": "removeIcoContract()", +"2815cc38": "discoverNewPlanet(uint256,uint256,bool)", +"2815f054": "setTCoinContractAddress(address,address)", +"2815f50f": "addManyToBlacklist(address[])", +"28169ec1": "testProvidedValues()", +"2816bd78": "incentiveForHolder()", +"28171882": "customText()", +"28180023": "closingBlock()", +"2819598d": "removeManyFromAllocationList(address[])", +"28195d2c": "GDO(uint256,string,string)", +"281972af": "getExplorerList()", +"281989bf": "ComputeSquare(uint256)", +"28198eab": "RLCSentToBTC()", +"281a0ff7": "revokeDelegate(address,address,string,address)", +"281ae558": "ETH_TOKEN_EXCHANGE_RATIO()", +"281bdaf8": "weightedMultiplierByAddress(address)", +"281c08ad": "totalAuctorCount()", +"281ca73e": "write(uint256,uint64,bytes8)", +"281cee59": "_approveOwner(address,uint256)", +"281dfbb6": "sendPlatformSupplyToken(address)", +"281e1856": "deAuthorize(string)", +"281e399c": "Token(string,string,uint256)", +"281fa792": "givenBonus()", +"281fe829": "addFirstBuyers(address[],uint256[])", +"2820d6a5": "totalPresaleBonus()", +"2820f454": "setNewBeneficiary(address)", +"2821ca71": "nextPrice(uint256)", +"2822f62d": "fixedLoge(uint256)", +"282303b5": "_buy(uint256)", +"2823c24d": "howManyTokens(uint256)", +"2823e871": "canTransfer(bytes32,address,address,uint256,bytes,bytes)", +"2823fbe5": "walletLockBothForever(address)", +"28242dd4": "setLLV_edit_25(string)", +"282440ed": "allowWorking(uint32)", +"28249577": "getContractCode(address)", +"28250d43": "ETH_QCO()", +"28252bc4": "saleIsGoing()", +"28261850": "getProfits(bytes6)", +"28262dd1": "TOKEN_HODL_9M()", +"282651fe": "getWinTokenAmount()", +"28276ed6": "totalT8EXSold_GENERAL()", +"28278d0a": "makerich4(address,uint256)", +"2827d4ca": "TokenSale(uint256)", +"2828fc39": "getAllReporterMarketsCount()", +"2829104b": "ElectricUniverse()", +"28292af2": "chAirDropFadd(uint256)", +"282b065a": "setEmail(string)", +"282b5b19": "IsFreezedAccount(address)", +"282ba1b8": "GetPreSale()", +"282c3c47": "DEFAULT_MAX_LOCK_DURATION()", +"282c3cf7": "MAX_TOTAL_TOKEN_SUPPLY()", +"282c8749": "setParameters(uint256,uint256,uint256,uint256,uint256,uint256)", +"282d3fdf": "lock(address,uint256)", +"282d60bb": "eButton()", +"282de6b8": "priceCents()", +"282e0fe0": "updateIndexOrderToken(uint256,address,uint256,uint256,uint256)", +"282ef05c": "collectorsCount()", +"282f7cdd": "isDispositionDue()", +"28310f10": "percentageRecipient1()", +"2831ed5a": "YOUQIANBI(uint256,string,string)", +"2832b5cc": "setInstantFee(bool)", +"2832e44b": "addPrediction(bytes32,uint256,uint256,uint256,uint8,uint256,address,address)", +"28331152": "getActives(uint256,address,address)", +"28334e64": "subTokens(bytes32,uint256)", +"2833747f": "test_oneTrueFalse()", +"28339175": "getCreateSharesOwner()", +"28339320": "deleteRegion(address[16],uint256)", +"283506fb": "buySqr(uint256)", +"283557ac": "getContributorTokens(address)", +"2835b45c": "getETH(uint256)", +"283654c3": "storjBalance()", +"28368e0f": "OppToken()", +"28376f05": "testCreateAuthority()", +"2837919d": "impl_mining_uncle(address,bytes,bytes,uint256)", +"283890ef": "checkGetFreeQuest(address)", +"28392315": "sellerCancel(uint16,address,address)", +"2839e928": "ackermann(uint256,uint256)", +"2839fc29": "exchanges(uint256)", +"283a4576": "Tomeka()", +"283a6e88": "mgmtBodyWalletAddress()", +"283acbfc": "enableRefund(address)", +"283b19bf": "addReward(uint256,uint256,address)", +"283b31a6": "addWorks(bytes32,bytes32,uint8,uint256,uint256)", +"283b5f95": "getUndistributedBalanceOf_(address,uint256)", +"283ba681": "transferAirdropTokens(address[],uint256[])", +"283bcbed": "ChannelToppedUp(address,address,uint32,uint192)", +"283ced9d": "FOUNDATION_CAPPED_VALUE()", +"283ceee2": "cryptaurToken()", +"283dc942": "ReferralWeToken(address,uint256)", +"283f7820": "_totalFee()", +"2840f290": "addTier1Member(address)", +"28412d70": "KING()", +"284131c7": "buyApple()", +"284180fc": "getSecret(address)", +"284237e4": "bitm(uint256,string,uint8,string)", +"28428a42": "importBalances(uint256,address)", +"2843314e": "getAccountList()", +"28439961": "setTimePeriods(uint256,uint256,uint256,uint256)", +"2844328f": "submitVote(uint256)", +"28444381": "setPeriods(uint256,uint256,uint256,uint256,uint256,uint256)", +"28450159": "_updateSnapshot(address)", +"28459871": "OreOreCoin(uint256,string,string,uint8)", +"2845c8cd": "totalPreSaleStage()", +"28469c36": "littafiAccount()", +"2846a35b": "mainSaleEndTime()", +"28470b40": "_axiesPrice(uint8,uint256)", +"28472c6c": "claimComputation(bytes,bytes)", +"2847a7af": "newDocument(bytes32)", +"28491003": "getAllTurnover()", +"28491b3f": "SetPresaleAmountLimits(uint256,uint256)", +"284b1e8e": "generatedByte()", +"284cb916": "endMintingTime()", +"284cfedb": "m_proofs()", +"284d2fd4": "mintVested(uint256,address,uint256)", +"284d94e1": "lockAssetEscrow(bytes32,uint256,address)", +"284e1567": "addrFWD()", +"284e4175": "changeGBTAddress(address)", +"284e650a": "vanbexTeamVestingPeriod()", +"284f083a": "processJackpot(address,bytes32,uint256)", +"284fb363": "deploy(uint256,uint32,uint256)", +"284fd42f": "gasEpoch()", +"2850c72a": "debug_extendCoinbaseTxOutput(uint256,uint256)", +"2850d4e6": "KNOWToken()", +"285109d1": "getTotalInfo()", +"285137c9": "registerNameXaddrFromDapp(address,bytes32,bool)", +"2851f27b": "PrizePaid(string,uint256)", +"2852b71c": "accept()", +"2852bdf2": "whitelist(uint8[],address[])", +"2852ca81": "getTypeFromEdition(bytes16)", +"2853a0d7": "BRXToken()", +"2853f925": "unfreezeFoundingTeamBalance()", +"28543417": "removeOrderOfOwner(address,uint256)", +"2854ba7d": "getCreatedPayoutDistributionHash()", +"2854bc7e": "setTokenCap(uint256)", +"285669e9": "setRegionNextImageId(uint256,uint256)", +"28579137": "remove(uint80)", +"2857bc60": "triggerStealManually3(string,uint256)", +"28583dcc": "getRoundCounter()", +"2858507f": "IDD()", +"2858c764": "checkStatus(uint256)", +"285a4639": "Rotterdam()", +"285a9b32": "payoutfordividend(address,uint256)", +"285b5dde": "MoreTokensMinted(uint256,string)", +"285bf4c7": "CryptoCopyToken()", +"285c22b1": "addOrigin(bytes32)", +"285c51c3": "getRemainingEthersForCurrentRound()", +"285c7f37": "addUpgrade(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"285d70d4": "setMintable(bool)", +"285da5a9": "ceilTokens(uint256)", +"285dfc1c": "AmigoCoin()", +"285e1406": "changeFeeAddress(address)", +"285e8516": "advisor2Sum()", +"285f2346": "getNotApprovedProposals()", +"285f6a55": "ADDR_BOUNTY_TOKENS_ACCOUNT()", +"285fc97f": "TestChain()", +"285fe426": "bet(uint256[],uint256[])", +"286012b0": "getDealCancelRate()", +"286294b3": "buyByTomo(address,uint256)", +"286362f8": "AllowTransferExternal()", +"28636578": "setMultiRequestRequestor(uint256,address)", +"2863cd7e": "batchMintWithData(address[],uint256[],bytes)", +"2863f9f3": "emergencyStopSale()", +"286401df": "is_claim_period(uint256)", +"28640599": "fetchCreatedOrdersForMerchant()", +"2864ddde": "nextPriceOfElement(uint256)", +"28657aa5": "bankBalance()", +"2865dc2e": "getUserRewardPayouts(address)", +"2866bae1": "HarryCoin()", +"286707a1": "genToExtraStats(uint256,uint256)", +"28675325": "PURCHASER_MIN_TOKEN_CAP()", +"2867586e": "setInvContract(address)", +"286781c7": "suspend(address)", +"2867bc92": "refreshGames()", +"28680c1e": "bonusUnlockAt()", +"28687e61": "checkPriceCalled()", +"2868eda3": "admin_withdraw(uint256,uint256)", +"286a8993": "_clearBridgeNativeFee(uint256)", +"286b583b": "offerCanvasForSale(uint32,uint256)", +"286c1a9b": "confirmJoinAirdropQuest(address)", +"286c241a": "releaseTimeOf(address)", +"286d2e3a": "setContractAddr(address)", +"286dd3f5": "removeAddressFromWhitelist(address)", +"286dd83c": "unPauseCrowdsale()", +"286eab15": "getSnailmasterReq()", +"286ec4d1": "erc20_contract()", +"28707f3d": "addCharacter(uint32,uint16)", +"28713d0c": "SunContractToken(address)", +"2871587d": "MAX_PAYOUT_FRAC_BOT()", +"2871b1b9": "setRate1666()", +"2871f2c0": "getMySquirrel()", +"28720849": "verifyReport(uint16,int8[],uint32[])", +"2872a8e7": "kkk()", +"287301c1": "COMMUNITY_PERCENTAGE()", +"287418e7": "query(uint256,uint16)", +"28753dc2": "ApprovedFunds(address,bool)", +"28761ea5": "calcDividend()", +"28762e3a": "rdDoisToken()", +"28764b44": "rnBlock()", +"2877af10": "STARToken()", +"2877c748": "claimVotingProposal()", +"2878d3a7": "getClue3()", +"287977d6": "updateScore(uint8,bytes32,uint24)", +"287ad39f": "upgradePrice()", +"287ad3e5": "endPeTime()", +"287b020b": "founderMembers()", +"287b7cc1": "setStageLimit(uint256)", +"287b8862": "s35(bytes1)", +"287b895c": "MAX_OBR_CAP()", +"287bd206": "MAX_ALLOCATIONS_COUNT()", +"287cc96b": "getTotalEthBalance()", +"287dd8d2": "HIcToken(uint256,string,string)", +"287e85e9": "getTimeoutBlock(bytes32)", +"287e9fbc": "setGameIdCntr(uint256)", +"287eda92": "setIntervalSize(uint256)", +"287efb57": "setMixFormulaAddress(address)", +"287fcbfc": "PEPEso()", +"28802f19": "stare(uint256,uint256)", +"28805407": "refundToken(bytes32,address,address,uint256)", +"2880ebe7": "underdogPayoutMarkup()", +"28811f59": "F()", +"288169fd": "_changeAddress(address)", +"28828b1e": "claimMultipleAndWithdrawBalance(bytes32[],uint256[],bytes32[],address[],uint256[],bytes32[])", +"2882ab48": "BurnGas()", +"28831187": "setCompanyWallet(address)", +"288343e4": "Start(address,uint256,uint256,uint256,uint256,uint256)", +"288365a7": "foundation_vesting_contract()", +"2884c115": "_finishICO()", +"28852b61": "allOfferingPercentage()", +"2885b593": "extractMasterKeyIndexLength()", +"28861d22": "market(uint256)", +"2886b47a": "PERC_TOKENS_TO_RELEASE()", +"2886d76f": "setColorTeal()", +"288714be": "getPreviousWinner()", +"2887318f": "RATE_ETH_WXW()", +"2887cecd": "QYTestingToken()", +"288811cb": "grantAdvisorToken()", +"28889862": "setRandomPlayerAddress(address,address)", +"2888bb9c": "fixedAssets(bytes32)", +"2888c701": "setClearingPrice(bytes32,uint256)", +"2888f9d0": "updateMaxBet()", +"28896066": "transfer_owner(address)", +"2889e822": "team3Address()", +"288a6535": "_getPurity(uint16,uint16)", +"288aa69b": "VirusGame()", +"288b7ad8": "homeMaxPerTx()", +"288bcfb5": "getIntegerVaule()", +"288bd8fd": "mintReserveTokens(uint256)", +"288c4602": "WRTCCToken(address,uint256)", +"288c6ed2": "getSeedCost(uint256)", +"288cdc91": "filled(bytes32)", +"288dca30": "softCapFundingGoalInCents()", +"288dd331": "getTotalBidded()", +"288ddec7": "reversePercent(uint256,uint256)", +"288fa739": "isValidVote(uint256,address)", +"2890e0d7": "burnNFT(uint256)", +"289120cf": "goToNextState()", +"28916184": "createProduct(string,bool,uint256,address)", +"28918296": "verifyBBODocument(bytes32,bytes)", +"28919b47": "best_gamer()", +"2891da02": "tokensCounter()", +"28929072": "setMaxAssignedRequests(uint256)", +"28931484": "SmartLinkToken(uint256,string,string)", +"2893c5b0": "mint(address,uint64)", +"289471d5": "getOnTokenTransferFromValue()", +"2894ceda": "publisherRegistry()", +"28962b94": "DS1Token()", +"28968872": "minusFreezingTime(uint256)", +"289768b7": "_checkForJoin(uint256,address,uint256)", +"2897768d": "grantJoinAddr(uint256)", +"289799b7": "setUnitTime(uint256)", +"2898410b": "totalMintedToken()", +"289850b7": "FundTree()", +"28985c17": "returnsTwoUnnamed(uint256,uint256)", +"289912cc": "CLXTokenSale(address,address)", +"28997e32": "token(uint256,string,string)", +"2899a870": "claimAllInvestorTokensByOwner(address)", +"289aac50": "teamWithdrawSupply()", +"289ae4c7": "AddressWhitelist(address)", +"289b3aab": "Arith()", +"289b45fb": "subtractAction(bytes32,uint256[])", +"289b5b15": "setTypeName(uint32,string)", +"289cb681": "testSetPresale()", +"289cd94f": "setWhere(address)", +"289cf1e2": "PRESOLD_TOKENS()", +"289de615": "getTokenDetail()", +"289e0f82": "STAGE_1_START()", +"289ea30b": "requireNotZero(uint256)", +"289fd839": "presaleBonusTier3()", +"28a006af": "ethBalance(address,address)", +"28a07025": "liquidate()", +"28a1cab8": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", +"28a20a2f": "transferXPAAssetAndProfit(address[],uint256)", +"28a24f30": "set_base_token_as_seeded()", +"28a3dd2c": "_redeem(uint256)", +"28a42e9d": "getUpgradeInfo(uint256)", +"28a45038": "testTryProxyCall()", +"28a49874": "regPrice()", +"28a52d3e": "maxHistoryRecordID()", +"28a5be59": "getExchangeRateAtTime(uint256)", +"28a5c5e9": "address_to_tokens_prev_week0(address)", +"28a5e6f0": "regularOpen()", +"28a741db": "publicityFunds()", +"28a76045": "setAsMinter(address,bool)", +"28a767b0": "ClaimAirdropMultiple(address[],uint256)", +"28a7f25d": "transferJokerOwnership(address)", +"28a852db": "SOFTCAP_LIMIT()", +"28a8ee68": "minimumTakerProtocolFee()", +"28a92ef7": "requestRemoveAdmin(address,string)", +"28aa1a22": "IlumXXToken()", +"28aa48b4": "heroTypeToHeroSales(uint16)", +"28aa5257": "updateTransfer(bytes)", +"28aa69cf": "end_race()", +"28ab4f76": "changeSupply(uint256,bool)", +"28ab7375": "p_update_tokensRewardsAvailable(uint256)", +"28abda51": "resetUrls(bool,bool)", +"28acb002": "collectFees(uint128)", +"28acb520": "IdentityManager(uint256,uint256,uint256)", +"28ae8ea3": "redeem(uint256,bytes32,bytes)", +"28aea735": "getCreatedDate()", +"28af792c": "fundBTC(address,uint256)", +"28af94c8": "addData(bytes32)", +"28b070e0": "contractIndex()", +"28b0e795": "advance(bytes32,uint32,uint64,uint64,int64,uint64)", +"28b1b051": "external_call(address,uint256)", +"28b2105c": "endCrowdfund()", +"28b2362f": "custodianRegistry()", +"28b2e781": "minprice()", +"28b34ef6": "updateLandData(uint256,uint256,string)", +"28b3f3ae": "getBetAmount(uint8)", +"28b44b4b": "getBalanceOfContract(address)", +"28b4e62a": "numTokenPerEth()", +"28b53247": "_burnCarbonDollar(address,address,uint256)", +"28b59782": "Initiate(address,uint256)", +"28b5a8e6": "fechPreAllForCandidate()", +"28b5dde8": "setPI_edit_9(string)", +"28b5e965": "artDescription()", +"28b60031": "ownerTokens(address,uint256)", +"28b6c658": "maxAgonCount()", +"28b7bede": "getTokenContract()", +"28b7e183": "enableAffiliate()", +"28b8b108": "withdrawStoreBalance()", +"28b8e9cf": "buy_the_tokens()", +"28b94289": "isPreICOPrivateClosed()", +"28ba671f": "_getBonusTokens(uint256)", +"28baf31d": "EscrowVault(address,address)", +"28bb6f24": "webGiftTotalAmount()", +"28bc5dcc": "promotionIndexToHost(uint256)", +"28bc5ee4": "beginVote()", +"28bc8a04": "airdropSpent()", +"28bcd985": "PRIVATE_PHASE()", +"28bdbdca": "productionUnitIdRange()", +"28be67f9": "get_amount_get_sell(uint256)", +"28bf2448": "availableForWithdrawalAt(uint256)", +"28bf4079": "initStage(uint256,uint256)", +"28bf794d": "set_price(uint256)", +"28bfdeee": "distributeInsurance()", +"28c05d32": "shortSell(uint8,uint256,uint256)", +"28c0898b": "ZAR_Omnidollar()", +"28c0b0ef": "_partialPaid(address)", +"28c11fd6": "SetIPR(string,string,address,string,string,uint256,string,string,string)", +"28c23a45": "renounceOwner()", +"28c32be6": "refundPeriodStart()", +"28c3d685": "logPlaying(address)", +"28c4b676": "maxPaysPer()", +"28c4e24c": "retrieve(address,address,uint256)", +"28c4f410": "getShifterByToken(address)", +"28c5cf0a": "finalizeContract()", +"28c69eb2": "hasStake(address,address)", +"28c6cd05": "minBuyTokens()", +"28c6d8e3": "preBuyersDispensedTo()", +"28c743e6": "WelfareTokenFund()", +"28c78227": "openBoxPlayer(uint256,uint256)", +"28c8b217": "approveProject(address,uint256)", +"28c8ed98": "disableAutoDividends()", +"28c8f3ba": "airDropManager()", +"28c9ca90": "ethereumWei()", +"28c9f19a": "exchangeAndPay(uint256[10],address[5],uint256[4],bytes32[4])", +"28ca3062": "testCannotSetPresaleTokensAfterActivation()", +"28ca5a1c": "InvestmentEvent(address,uint256,uint256)", +"28cab0d6": "TokenBought(address,uint256,uint256)", +"28cbe9ac": "useKnowledge(address)", +"28cc413a": "getProof(uint256,uint256,uint256)", +"28cc4150": "tokenSaleRate()", +"28ccffe7": "etherFromAltar()", +"28ce213e": "setBalanceOf(uint256)", +"28ce5cdb": "withdrawMinerFee()", +"28ce8845": "addToTotalSupply(uint256)", +"28cf8b6f": "ERC223Token()", +"28cffcd8": "YFT()", +"28d005e9": "firstTTaxAmount()", +"28d08142": "getCurrentHighscoreUser()", +"28d0d223": "withdraw_amount()", +"28d18745": "getMiningAuthority()", +"28d2a961": "chkBSize(uint256,uint256)", +"28d3ad3f": "getPot(uint256)", +"28d3e3e1": "min_goal_amount()", +"28d42350": "endIco1()", +"28d445f6": "_afind(address)", +"28d4cc24": "window2TokenCreationCap()", +"28d5e117": "numberOfPossibleChoices()", +"28d6ce3d": "startSale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"28d76403": "dataForSell(address,uint256)", +"28d84c9b": "delAltOracle(address)", +"28d879e4": "depositEtherBalance()", +"28d8f102": "ABOX()", +"28d905e5": "getAssetIdTripCompletedTime(uint256)", +"28d90b63": "ChangeFee(uint8)", +"28d936fe": "numImages()", +"28d969a5": "resetIndex()", +"28d969e2": "initialARXtokenSupply()", +"28d9dcd4": "createErc20Token(string,string,uint256)", +"28da6ba3": "PreSaleComplete(address)", +"28da740f": "firstTimeLine()", +"28da75fa": "addAddressToCaller(address)", +"28da850b": "buyAllOutcomes(uint256)", +"28db5470": "getPrivateName()", +"28db90a4": "BadgeCoin()", +"28dc38e6": "calculateWithdrow()", +"28dcce7c": "addWinner(address,address)", +"28dcfdac": "getSignsCount(uint256)", +"28de15b2": "MajorityList()", +"28de4426": "setLockupPeriodSeconds(uint256)", +"28de78d0": "WandtChaintest(uint256,string,uint8,string)", +"28dee1d2": "transferEtherOut(address,uint256)", +"28df192d": "releaseSbtToken()", +"28df3707": "HawkToken(uint256,uint256)", +"28df7755": "TravellingFreeToken(uint256,string,uint8,string)", +"28e07244": "getTurn()", +"28e08186": "ownerAllocateTokens(address,uint256,uint256)", +"28e0b502": "getDrawStatus(uint256)", +"28e0ba9a": "affsend(uint256,uint256,uint256,uint256,uint256)", +"28e158d0": "TokenVestingContract(address,address,uint256,uint256,uint256,uint256,bool)", +"28e1a604": "BurnFrom(address,uint256)", +"28e36ab8": "_getPrice(uint256,uint256)", +"28e3844c": "Member_AssignTokensToProject(int256,int256)", +"28e3c4f8": "checkLock(address,address)", +"28e454ee": "setDusting()", +"28e47076": "testFailCreateWithParentsParentSameItemId0()", +"28e53bb2": "approveKYCAndDeposit(string,address,uint256,uint256,string)", +"28e5617e": "weeklength()", +"28e5e5d3": "snowflakeCall(address,string,address,uint256,bytes,bytes)", +"28e665ef": "releaseTokenForTransfer()", +"28e68ebe": "getLastFundId()", +"28e69b16": "setBalances(address,uint256)", +"28e70c4e": "getPosition(uint256,uint256,address)", +"28e8776e": "getAyantDroitEconomique_Compte_9()", +"28e8bc61": "endTokensale()", +"28e8ed1b": "resetCrowdSaleaddress(address,address)", +"28e96cb0": "setDefaultAllowedLock(uint256)", +"28e98537": "logicProxiesStatic(address)", +"28e9bff8": "presaleAllocations()", +"28ea0fc3": "transferCollectorship(address)", +"28ea6aab": "addToBlackList(string,address)", +"28ea9203": "___setTarget(address)", +"28eaa326": "_noThrowCall(address,bytes)", +"28ec4173": "UnicornCrowdsale(address,address,address,address)", +"28ecb74e": "Grow()", +"28ed5c0d": "MCC()", +"28ef26cc": "JEXToken()", +"28ef42ce": "preICOSwapRate()", +"28ef6f40": "openCrowdsale()", +"28efa3a6": "processRebond(address,uint256)", +"28effe67": "gasForPBTT()", +"28f03554": "ProcessDividend()", +"28f0d47b": "ticketTransfersAmount()", +"28f22cc1": "getRemovedServicesForApplication(address)", +"28f28529": "fstUnitPriceNumerator()", +"28f2d4da": "identifiers(uint256)", +"28f3402b": "changeRuningState(bool)", +"28f371aa": "isApproved()", +"28f3ebd6": "BitPrize()", +"28f4c7de": "getMaximumReportingFeeDivisor()", +"28f4dbb6": "thresholdAmount()", +"28f5c7b3": "totalETHRaised()", +"28f66b77": "getAllHead()", +"28f68d39": "getVestingPeriodsCompleted(uint256,uint256)", +"28f6a48a": "getBidCount()", +"28f798a8": "toBinary(uint256)", +"28f7f13b": "Acandy(uint256,string,uint8,string)", +"28f833b7": "depositAddress()", +"28f90e4b": "Etheramid2()", +"28f9a563": "maxPreCrowdAllocationPerInvestor()", +"28fa17b6": "estateData(uint256)", +"28fb29d7": "_transferEvent(address,address,uint256)", +"28fbd958": "registerContract(bytes32,address,address,bytes20,bytes32)", +"28fbf28a": "revealPeriodActive(bytes32)", +"28fce8c8": "ZEUSCoin()", +"28fd287c": "_addmoney(address,uint256,uint256)", +"28fd72e2": "updateRndSeed()", +"28fdcdf7": "safeMemoryCleaner()", +"28fe549a": "STATE_BET_ENABLED()", +"28fe9a7f": "founder1Address()", +"28fecd48": "reinstate()", +"28ff498a": "presaleTokenLimit()", +"28ffe6c8": "join(address)", +"28fff8d6": "NokuConsumptionPlan(address,address)", +"2902320a": "totalTokensToSend()", +"2902b093": "addnewOwner(address)", +"2902df61": "remove_helper(uint256)", +"29033133": "clearValueBonuses()", +"290382dd": "DFCToken()", +"29055edd": "createNew(uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256,address,address)", +"2905be9a": "IronHands(uint256,address)", +"29062d76": "startGame(address[],uint256)", +"29079291": "RVRCoin()", +"2907eb16": "finalizeContract(uint256)", +"290842a1": "setPI_edit_1(string)", +"2908fb5a": "Y1_release()", +"29090202": "Resolver(address)", +"29092d0e": "remove(address)", +"2909acef": "isSpawnProxy(uint32,int256,address)", +"2909cc5d": "left16(uint256)", +"2909f638": "setData(uint256,uint256,uint256)", +"290a9fa0": "setRangeGameAttr(uint256,uint256,uint256)", +"290b1e5f": "initTokenBank()", +"290b7dfd": "getTransactionLength(bytes32)", +"290c292d": "preMint(address,uint256)", +"290c398f": "getChipIds(bool)", +"290c8eb1": "doMint(int256,address,uint256)", +"290cb460": "MitkeyCoin()", +"290cba7f": "getLen(string)", +"290cf4fb": "payBonusToAddress(address)", +"290d2494": "startBuffer()", +"290d256e": "ExchangeLinkToken()", +"290e1c20": "AutoFare(uint16,uint16)", +"290ed1be": "RESERVED_MARKETING_GROUP()", +"290fe2df": "getEscrowAddress(uint256)", +"29107555": "soldByChannels()", +"29108d1b": "transferReserveToMain()", +"2910a32b": "setTokenBuyRate(uint256)", +"2910f159": "LogBidMade(address,uint256,uint256)", +"29113bc8": "hotWallet()", +"29114d65": "winnerPoolTotal()", +"291194b2": "NOT_AUDITED()", +"2911982e": "balanceOfPlayer(address)", +"2911c9e7": "dashId()", +"29143bdd": "onwerfee()", +"29147530": "setValidKYC(address)", +"29148c0c": "changeOwnerBook(uint256,address)", +"2914fb3e": "porcodr(uint256)", +"29153250": "withdrawalList(uint256[],address)", +"2915a915": "determineNumber()", +"2915fd3d": "subToZero(uint256,uint256)", +"29161820": "Base(uint256)", +"29163502": "addWhitelistedTransfer(address[])", +"291675f2": "add_another_owner(address)", +"291681b5": "signupUserWhitelist(address[])", +"2916f075": "check_invalidator(uint256)", +"2917f162": "getCooldownIndex(uint40)", +"2917f66b": "distributeAllTokens()", +"2918435f": "fun_sandbox(address)", +"29189c9e": "ATTToken()", +"291948ff": "date_ico_end()", +"29194964": "setUsdCap(uint256)", +"2919fccd": "Gaoguans(address)", +"291bc657": "Predecessor()", +"291bd15c": "confirm(string,int256)", +"291c0dbb": "setEtheremonAddress(address)", +"291cef95": "startSlammerTime(address,uint256[5],address,uint256[5])", +"291d1185": "updateCurrentBonusPeriod()", +"291d4f98": "transfered_total()", +"291d778c": "CancelSellOrder(bytes32,address,uint256,address)", +"291d9549": "removeWhitelisted(address)", +"291e6777": "sendVote(uint256,uint256)", +"291ea526": "constructionEnd()", +"291f028d": "calculateRoom(uint256,uint256,uint256,bytes32)", +"291f3665": "balanceOfFund(address)", +"291f37a4": "CHESSToken()", +"291f5a1f": "ORIGINAL_IPFS_HASH()", +"291fce73": "TmoneyTest2()", +"291fd18f": "issueCertificate(string,string,uint256)", +"292005a2": "TOKEN_SUPPLY_LIMIT()", +"29213a2f": "approveMember(address)", +"2921441e": "mysteriumPricing()", +"29216d20": "setLockTime()", +"2921be51": "ALLOC_SALE_GENERAL_1()", +"2921e6fc": "IfModuleRegist(string,string)", +"29223bdb": "changeServiceUpdateAddress(uint32,address)", +"2923f101": "Set_eth_gift(bytes32)", +"2924416f": "validateAndGetRedeemFee(address,address,uint256)", +"29245dd1": "startCall(uint256)", +"2924e254": "getInterestTimestamp(uint256)", +"2924f0dc": "_lockProjectToken()", +"2925827c": "preallocated()", +"2925ffc2": "modifyCommunityTaxes(uint256,uint256,uint256,uint256)", +"2926050f": "pubEnd()", +"29263630": "initialiseContract(address,uint256,uint256,uint256)", +"29274fe1": "buyBOTx(uint256,string,string,address,uint256)", +"2928859c": "runsOutOfGas()", +"29291054": "setContract(address,address,address)", +"2929abe6": "distribute(address[],uint256[])", +"2929dc09": "WithdrawAllReserves()", +"292a2879": "setFundAccount(address,address)", +"292a7409": "processBuyCard(uint256,address)", +"292a9873": "attackTileForNewUser(uint16,bytes32,bytes,bytes32,bytes32,address)", +"292b79b9": "HashReleased(bytes32,uint256)", +"292c1323": "vestAddress(address)", +"292c8aaa": "getPayOutAmount()", +"292ca2fe": "Jeopardy()", +"292cbbba": "DAYSECONDS()", +"292cdfa5": "getForthRoundReleaseTime()", +"292d64e0": "transferHotel(address,address)", +"292d98cd": "allSet()", +"292eb75d": "openAccount()", +"292f4a6e": "Token(address,address)", +"292fec04": "isClaimable(address)", +"2930cf24": "red()", +"2930fa49": "PLATFORM_FEE_RATE()", +"293100a9": "meleeElementBySubtypeIndex(uint256)", +"293100c1": "tournamentsReserve()", +"2931ebb3": "AdminshipTransferred(address,address)", +"29322e05": "sendTokens(uint256,address)", +"293230b8": "startTrading()", +"29325ebd": "zeroUInt()", +"2932ea90": "creatUserPurchase(string,string)", +"29337bda": "personalisationCost()", +"2933cc47": "getIdeaDate(uint256)", +"2933ee88": "get_account_id(address)", +"293528c9": "GOL()", +"2936981c": "setNumRewardsUsedForAddress(uint256,address)", +"2936c27a": "getFoundersTokens()", +"2936ce62": "crowdSaleOngoing()", +"2936d35c": "millLeconteRate()", +"29372ad0": "getWarrior(uint256)", +"29372d21": "testLog()", +"29377d61": "receiveFunds(uint8)", +"293849f4": "addLimitation(uint256)", +"293877d7": "bthFundDeposit()", +"29388f8d": "setArbitration(address)", +"29390370": "setPricer(address)", +"293a9169": "getSpawnCount(uint32)", +"293b1103": "Bitlike()", +"293b682f": "fSub(uint256,uint256)", +"293be456": "setReward(uint256)", +"293c2958": "getRoundState()", +"293c29de": "swapHotCold()", +"293c33b5": "authorizedFundsAvailable()", +"293c6a3a": "mint(bytes32,address)", +"293d5050": "getPlayerNum()", +"293d7663": "refundErrCombat(uint256)", +"293ee91f": "_fillOrder(uint64,uint64)", +"293f2ad7": "teamTokensIssueDate()", +"293f3fa9": "setBatman(address)", +"293f4825": "fire(uint64,address[])", +"293f5e6a": "get_first_user_recast(bytes32)", +"293f9a9c": "showDemurrageConfigs()", +"293f9f4f": "recordBounty(address,uint128,uint256)", +"293fc820": "setData(string,string,string,string,bytes32)", +"293ffca3": "AddressReg()", +"2940ff1e": "cancelBet(bytes32)", +"29415664": "buy_part_amount_show(bytes32,uint256)", +"294247aa": "BlackjackTipJar()", +"29432e0d": "setaddressname(string)", +"29434e33": "insertUser(address,bytes32,uint256)", +"29435cde": "TadamWhitelistPublicSale()", +"2943fd5e": "TokensIssuedCrowd(address,uint256,uint256)", +"29441674": "DOW_SUN()", +"2944363f": "updateAllDependencies()", +"2944e740": "changeProfitContainerAddress(address)", +"29457483": "register(uint256[2],uint256[4],uint256[2])", +"2945a57d": "findClaim(uint32,string,string)", +"2946ae5d": "changePauseTranfser(bool)", +"29477e03": "exCount(uint256)", +"294914a4": "j2Timeout()", +"294919a1": "rate(address,uint256,uint256,bytes)", +"2949b11d": "mutiSendETHWithDifferentValue(address[],uint256[])", +"294a6511": "checkRefundExistanceByOwner(address)", +"294afbf2": "sendBigPromoBonus()", +"294bbc09": "ggcd(address)", +"294cd2e8": "BACA()", +"294cdf0d": "tokenOfOwner(address)", +"294cedb8": "resolveOffer(uint256,bool,bool)", +"294cf912": "getBoosterPrice(uint256)", +"294e47e3": "FlipToken()", +"294f3d4d": "setUpLimit(uint256)", +"294f4025": "pendingWhitelistRemoval()", +"294fa425": "MIN_BUYIN_VALUE()", +"29501ad6": "changeManagerAddress(address,address)", +"29516a47": "PoWMLottery()", +"29516ba7": "purchasedTokensRaisedDuringPresale()", +"29516c41": "betMatch(uint8,uint8)", +"29519c9c": "LAFINAL7()", +"2952438e": "transfer(string,address,address,uint256)", +"295310bf": "setTransferRate(address[],int16)", +"2953a286": "setGenesisToken(address)", +"2953ee6f": "InvalidPullRequest(uint256)", +"2953f198": "addEntity(string)", +"29546713": "claimableHalvings()", +"2955d4ce": "setRealisation(uint256)", +"29560980": "getCapital(uint256)", +"2956262b": "ownersStakeAdded()", +"29569e80": "accountPubICOSale()", +"29575f6a": "superAdmin()", +"29576c82": "generalExp(uint256,uint8)", +"295777be": "releaseFundsNotification(uint256)", +"295780ea": "RequestInfo(uint64,uint8,address,uint256,address,bytes32,uint256,bytes32[])", +"2957ca33": "BONUSTWO_DATE()", +"2957d848": "batchWhitelistAddresses(address[])", +"2957da23": "ownerDestroy()", +"2957fef4": "redeemBalanceOf(address)", +"2958263a": "lastBucket()", +"29589f61": "tradeWithHint(address,uint256,address,address,uint256,uint256,address,bytes)", +"2959275d": "increaseCompanyCountByOne()", +"29594e4f": "hash(bytes32,address,uint256)", +"295961b1": "checkMinerQuest(address)", +"295a1cc2": "getNowTotal()", +"295a49ca": "Unclosed()", +"295a5212": "mode()", +"295a8b34": "update(uint256,uint256,bytes,bytes)", +"295b3299": "submitTopUpLimit(uint256)", +"295b4e17": "paid()", +"295c219c": "getMarketMakerAddress(address,address)", +"295c25d5": "addAmbassador(address)", +"295c39a5": "getNumMarkets()", +"295c6e4d": "setBytes32Slice(bytes,uint256,bytes32)", +"295d0eb5": "_buyAndCreateToken(uint256,bool,uint256)", +"295d2d69": "BotManageable(address)", +"295d4756": "PARSECS_TOTAL_AMOUNT()", +"295dad5e": "TriedToken()", +"295e0503": "transfreFrom(address,address,uint256)", +"295e1421": "getSaleOrderSeller(uint256)", +"295e3362": "getCutoffTime(uint256)", +"295f6ce7": "launchGame()", +"295fe611": "valueAtAddressLUT(uint256)", +"2960109d": "etherReceivedCrowd()", +"296032f2": "pauseContribution(bool)", +"29605e77": "transferOperator(address)", +"29610252": "payFee()", +"29613086": "payoutRewards()", +"2961320c": "retrieveToken(address,address)", +"29638223": "greet(bytes)", +"29638eee": "GetTheWho()", +"2964a643": "checkPartner(address)", +"2964e4e6": "totalAccounted()", +"2965486a": "safeTokenWithdrawalFromCrowdsale(address,address,uint256)", +"2965558f": "getSignerIndex()", +"2965fa54": "ethers_collected()", +"2966d1b9": "unset(address)", +"2966e97b": "kscApprove(address,uint256,string)", +"29678a53": "playerInDraw()", +"29684907": "numerai()", +"29689a8c": "ergo()", +"2968d629": "YLCToken(uint256,string,uint8,string)", +"2968e640": "playerTakeOff(uint256)", +"29699a88": "viewSentBonuses()", +"2969b226": "batchTransferETHS(address[],uint256[])", +"2969d202": "weiBalance()", +"296b11b2": "getWeightedRandomArbiter(uint128)", +"296b76bb": "drawPhone()", +"296ba4ca": "LogValue(bytes32)", +"296ca48a": "weiLimitPerAddress()", +"296cab55": "setPresaleStartTime(uint256)", +"296cc401": "roundPrice()", +"296d84d5": "teamAdvisorsReserveTokensAddress()", +"296d9009": "calculate_should_return_bix(address[],address,uint256[])", +"296dbf31": "sendGameGift2(address,uint256)", +"296e3661": "removeClaim(uint32,string,string)", +"296ed88f": "testFailControllerInsufficientFundsTransferFrom()", +"296f1ce1": "getHasStartedState()", +"296f4000": "delegateApprove(address,uint256,address)", +"29700653": "fundTransfer()", +"297072a1": "cNiceGuyIdx()", +"2970c9c6": "TEAM_TOKENS_RESERVED()", +"29710388": "isProxy(address)", +"29712ebf": "accountBalancePublish(string,string,uint256,string,string,uint256)", +"29713781": "HumanToken(address,address)", +"29713f86": "cheapredeemvillage()", +"29723ade": "setMediumPrice(uint256)", +"29724d54": "offerOn(uint256)", +"2972b0f0": "isAuthorized(address,uint256)", +"29730ea4": "buyIdeas()", +"29735a89": "getSubmissionsForCommit(bytes32)", +"297398b5": "hourlyProduction()", +"2973e372": "isAlphaUpper(bytes1)", +"29745306": "tgrSetLive()", +"2974a822": "CustodianRegistry(address)", +"29750e85": "depositEndTime(address)", +"2975659d": "determineStatus()", +"2975c690": "SetLimited(address,bool)", +"29760657": "setStarDistance(uint8,uint16)", +"2977b1b1": "testAllowanceStartsAtZero()", +"29780a4e": "eventTransfer(address,address,uint256)", +"29781ec8": "addExemptedAccount(address)", +"29784d90": "shortenTde(uint256)", +"297882d5": "createDistrictOmni(uint8,uint8,uint8,uint8)", +"2978b826": "assignRevenue(uint256)", +"297a1677": "getAllHpbNodesCache()", +"297a1f56": "carCount()", +"297a9dc4": "WalletFunded(address,uint256)", +"297b5dce": "private_setminRoll(uint256)", +"297c4143": "PUBLIC_START_TIME()", +"297c9cd9": "regStopTime()", +"297cb974": "FlightDelayAccessController(address)", +"297d1a34": "returnOwnership()", +"297d7964": "investors_locked(address)", +"297f119d": "transferToAdmin()", +"297f407b": "addWinner(address)", +"297f9af0": "membersCount()", +"29803b21": "join(string,string)", +"2980a7b6": "specialManagerOn(address)", +"2981155e": "weiPerDTH()", +"29816998": "right63(uint256)", +"2981cceb": "_mintFromDeposit(address,uint256)", +"29822734": "Win()", +"2982add7": "notContains(address)", +"29832c0f": "hasSigned(bytes32,address)", +"2983d752": "advisory()", +"29842d15": "TokenClaimed(address,address,uint256,uint256)", +"29846afe": "freezeAccount(address,uint256)", +"2984a077": "setFemaleBonus(address[])", +"2984bc4d": "getAreaInfo(address,uint256)", +"2984f486": "setBU(bytes32,uint256)", +"2984f999": "totalLockTokenAllocation()", +"298503d9": "createCategory(string,string,uint256)", +"298569f0": "SetApplicant(string,uint32,string,int256,string)", +"2985aacf": "getSponsorsN(uint256)", +"29864547": "feeIndex()", +"2986c0e5": "index()", +"2987ace5": "getCapsuleInfo(uint256)", +"2987c8f7": "checkProduct(bytes32)", +"2988e36b": "migrateBalance(address)", +"29893dcf": "checkKhFundDepositAddress()", +"298994c6": "getCET6InfoById(uint32)", +"2989ac22": "rollDie(address)", +"298a49da": "_0xDogecoin()", +"298aa634": "nextContributorToReturn()", +"298ac61c": "AgencyWallet(string)", +"298ad569": "CFOAddress()", +"298c0733": "send(address[])", +"298c154e": "addListing(string,string,uint256)", +"298c1e14": "COIN_PER_ETHER_SUPPORT()", +"298c3dc4": "addStrip(uint256,uint16,uint8,uint8,string,string,string,string,string,string)", +"298c3fc1": "changeFrozenBalance(address,uint256)", +"298c61e3": "TOTAL_TULIP_SUPPLY()", +"298d075f": "tokenPoolAddress()", +"298d3567": "depositBBO()", +"298d5f33": "getPI_edit_1()", +"298e4f79": "depositTokens(address,uint256,address)", +"298e685a": "getFrozen(address)", +"298fb0d2": "setEvenDistThresh(uint256)", +"298fbf1c": "ClaimBTC(string)", +"298febed": "towncrierCallback(uint64,uint64,bytes32)", +"2990194a": "setICOStage(uint256)", +"29913150": "createTicket(address,uint256)", +"29917954": "exitPool()", +"2991835f": "extract(address,address,uint256)", +"2991964c": "GameLoose(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"29928852": "NoteChanged(string)", +"2993ed2d": "cancelSellOrder(address,uint256)", +"299453ca": "cb0f5ef7()", +"299550d9": "LogBetStart(uint256)", +"299599cc": "preICO(address,address,uint256,uint256)", +"29965a1d": "setInterfaceImplementer(address,bytes32,address)", +"2996f972": "tokenBurner()", +"29976934": "ModifyPublicKeySize(uint8)", +"2997ec89": "getStudentIDText(uint32)", +"29981db4": "setAdvocate(address,address)", +"2998dff2": "SuperUltraPowerCoin()", +"29991a5b": "checkMilestones(address[],uint256[])", +"29995f4c": "MoonStone()", +"2999c76b": "initNameSymbol(string,string)", +"299a017c": "getCurrentMilestone()", +"299a7bcc": "setOwner(address,address)", +"299af64b": "setContract(address,bytes32,bool)", +"299b861e": "changeUnitsPerEth(uint256)", +"299c55f7": "TOKEN_BOUNTY()", +"299cc524": "updateEarlyIncome(address,uint256)", +"299cdc9d": "changeEtherCost(uint256)", +"299df3f1": "WithdrawDividendsAndCoupons()", +"299e6b07": "Wallet(address)", +"299e7318": "resolveVoting()", +"299e7abb": "calculateWinners(uint32)", +"299e952f": "buyKeys(address)", +"299ed37a": "emergencyCall()", +"299ee814": "OraclizeBet()", +"299f5f1a": "cumAlienDeposits()", +"299f7200": "burnOwnership(address)", +"299ffcbc": "latestReleaseTime()", +"29a0097c": "internalSend(address,uint256)", +"29a00e7c": "calculatePurchaseReturn(uint256,uint256,uint32,uint256)", +"29a03d8d": "distributionReward(uint256,string,bytes32)", +"29a065bd": "getLOg(uint256)", +"29a19987": "teamVesting4Years()", +"29a2629c": "showRoundNum()", +"29a2aa2d": "thankYou(address)", +"29a2c27b": "finishLastCount()", +"29a2d339": "chknodenumber(uint256)", +"29a36e0a": "addScheduleCall(address,uint256,uint256,uint256,uint256)", +"29a3fab9": "finilize()", +"29a40403": "submitCounterStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"29a52db6": "getCurrentUserLocalTokenBalance()", +"29a5c0f4": "WithdrawAllETH()", +"29a5dd7c": "refund_bix(address,uint256)", +"29a6344a": "removeSupporter(address)", +"29a64dd1": "startCrowdsalePhase2Date()", +"29a67202": "UHUGIN()", +"29a6f31b": "oraclize_query(uint256,string,string[2],uint256)", +"29a742aa": "HappyLifeCoin()", +"29a7d5c1": "joinAirdrop()", +"29a81222": "getOwnerName(uint8)", +"29a833ee": "getSumData(bytes32)", +"29a86dde": "getGameWin(uint256)", +"29a8cda5": "PolarisToken(address)", +"29a8fcd2": "Proxy(address,address,uint256,uint256,uint256)", +"29a9c91d": "setCurrentPeriod(uint256)", +"29aa1408": "getTotalFlips()", +"29aa7ec5": "removeSignature(string)", +"29aa9cbe": "min(int256,int256)", +"29aab068": "Pen(address)", +"29aacd10": "InitalPos()", +"29ab0ca7": "ownerSetResolverPercentage(uint256)", +"29abdeed": "addCoinBalance(address,uint256)", +"29ad27d7": "maxDays()", +"29ad4a34": "_transferMoneyMother(uint32,uint256)", +"29ae4c70": "isSenderEmergencyMultisig()", +"29aebf05": "initialMoySupply()", +"29aec173": "levelUp(uint256,uint16,uint16,uint16,uint16,uint16,uint16)", +"29b03cfd": "getBid(bytes32,uint256)", +"29b0de1e": "unsetManager(address)", +"29b0ffea": "numberOfPreviousEntries()", +"29b1ce4d": "addWhitelistedUserAddr(address)", +"29b1e640": "claimReporterReward(address)", +"29b20bb6": "numCharactersXType(uint8)", +"29b26bc1": "clearTradePreSignedHashing(address,address,bytes32,address,uint256,int256,string)", +"29b43a68": "createDepositAddressFor(address)", +"29b49825": "ADVISOR_POOL_INIT()", +"29b4d111": "price_start()", +"29b65a2e": "POCY()", +"29b6cdd5": "Alphacoin()", +"29b737ae": "LerToken()", +"29b84c9c": "transferExchange(uint256)", +"29b8caff": "totalInvestors()", +"29b8dab4": "currentBidNumber()", +"29b981bb": "operationAdress()", +"29b9f367": "addressDataProviders()", +"29ba1cb4": "setPrivelegedWallet(address,address)", +"29ba2e07": "TokenPoolExhausting(uint256)", +"29ba725a": "setTransformTarget_miner(address,uint256)", +"29ba7bb2": "initialOwner()", +"29ba8780": "executeTransaction(uint256,address)", +"29ba8d03": "getMigrateMarketInFromSiblingCalled()", +"29bb4bf2": "showCollectorsBalances()", +"29bc3b85": "isAccepted(uint256)", +"29bc5d0f": "finalyzeContract()", +"29bcb186": "transferToContributor(address,uint256)", +"29bd028a": "startIcoPreICO2ndRound()", +"29bd58b4": "revokeToken(address,uint256)", +"29bed3bf": "EthereumRoulette()", +"29bee342": "Get_Last_Value()", +"29bf56c3": "setUnitAttackIncreases(address,address,uint256,uint256,bool)", +"29bf960a": "getResultTable(uint256,uint256)", +"29c08ba2": "payPremium()", +"29c10e37": "filter(string)", +"29c19304": "setInitialVaribles(uint256,uint256,address,address,address)", +"29c1c61e": "modifyPowPrice(uint256,uint256)", +"29c1ee0d": "TOKENS_address()", +"29c2e15d": "_calculateInterest(uint256)", +"29c3340f": "dividends_share()", +"29c36bb5": "feedAddress()", +"29c40d5f": "CheckSoilHumdtyException(bytes32,uint32)", +"29c50df4": "getEIN(address,address)", +"29c510b6": "reveal(bytes32,bytes32,address)", +"29c660a4": "ComputeAcornBuy(uint256)", +"29c6647b": "addCET6(uint32,string,uint32,uint32,uint32,uint32)", +"29c71c1b": "modifyFeeShare(uint256)", +"29c78e0b": "Ethash()", +"29c886bf": "TokenCampaign(address,address,address,address,address,address,address,address,address,address,address)", +"29c8d3ce": "activateTokens(uint256)", +"29c8dae7": "create21PizzasTokens()", +"29c90b63": "onTapPollFinish(bool,uint256)", +"29c924cf": "setFundingGoal(uint256,bool)", +"29ca9dca": "updateRelay(address)", +"29caf0c9": "getStringValueByKey(string,string)", +"29cb924d": "getCurrentTime()", +"29cbdc86": "buyin(address,uint256)", +"29cca3ae": "getYouTubemasterReq()", +"29ccb4df": "getCompte_11()", +"29cd00f7": "approve(address,string)", +"29cd5777": "_tryEraseSingleNode(bytes32)", +"29cd62ea": "setPubkey(bytes32,bytes32,bytes32)", +"29cd7767": "_NT()", +"29cd92cf": "deleteHelper(bytes32)", +"29cdda23": "newVersion()", +"29ce0939": "Timeout(uint256,uint256)", +"29ce1ec5": "addFactory(address)", +"29ce3b69": "increaseApprovalAllArgs(address,uint256,address)", +"29ce7fc1": "getAllRightHand()", +"29cee59e": "finishCrowd()", +"29cf90f3": "sellUnicorn(uint256,uint256,uint256)", +"29d00d64": "ReloadKeys(uint256,uint256)", +"29d017b5": "TestWithConstructor(address,uint256[])", +"29d07c23": "registerForVoting()", +"29d0807b": "addone(uint256,uint256)", +"29d10b6e": "addSupervisor(address)", +"29d11b32": "btycbalanceOf(address)", +"29d24cbe": "TOKEN_SUPPLY_SEED_LIMIT()", +"29d287ec": "isFinishDateReached()", +"29d28aad": "Broker(address)", +"29d368e3": "curMax()", +"29d428ca": "requiredTokenAmount()", +"29d50682": "setupPlotOwnership(uint256,int256[],int256[])", +"29d56381": "balance_factor(uint256)", +"29d592bf": "arconaToken()", +"29d6ec95": "cancelBuy(uint256,uint256,uint256,uint256)", +"29d6f899": "BetOnBlue()", +"29d729ac": "ticket_addresses(uint256)", +"29d77446": "WhitelistSet(address)", +"29d87fbf": "setSeasonal()", +"29d91164": "delWhiteList(address,address)", +"29d98a7b": "change_individual_cap(uint256)", +"29da2fda": "UpdateToken()", +"29da3b4d": "removeBorrowingItem(uint256)", +"29da5738": "actionCount()", +"29daaa5e": "numFactories()", +"29dacb60": "getEthRaised()", +"29daf3ce": "create(bytes32,address,address,uint256)", +"29db191f": "approveForAll(uint256)", +"29db1a4f": "burnForInsurance(uint256)", +"29db3256": "getRandomBox(string)", +"29db8ec4": "getAccountSpendingRemaining(address)", +"29dbdd77": "updateDetails(bytes32)", +"29dcb0cf": "deadline()", +"29dd07eb": "KarlisToken()", +"29dd0b86": "lastSaleDate()", +"29dd0d7d": "requestBlokTokenOwnershipTransfer(address)", +"29dd8b26": "EGTToken()", +"29de3653": "register(uint256,uint256,bytes,bytes)", +"29de91db": "setMsg(address,uint256)", +"29df8972": "Nilometer()", +"29dfdded": "addNewDonkey(address)", +"29e10c13": "getAd(uint256,uint256)", +"29e1ddb8": "freeLottoInfo()", +"29e206bd": "forceDivestAll(bool)", +"29e21cbd": "UIWish(address)", +"29e286c6": "boughtWithoutWhitelist()", +"29e2b478": "addAddressToWhitelist(address,address,uint256)", +"29e30910": "testThrowCreateExistingNonce()", +"29e341f1": "adminAddRole(uint256,address,uint256)", +"29e3ae3d": "virtualTradesSummedCount(bytes32)", +"29e46d3f": "openingTimePeriodOne()", +"29e5dab7": "BytomGoldToken()", +"29e614ee": "addDrop()", +"29e63cd7": "addImmutableContract(string,address)", +"29e67fce": "Rate2()", +"29e6b5be": "VPTToken()", +"29e6f3f8": "setPI_edit_6(string)", +"29e80a80": "_iWantXKeys(uint256)", +"29e81c79": "isJobCancel(address,bytes)", +"29e846df": "dividends(address,uint8)", +"29e8bc0a": "getShareToken(uint8)", +"29e94503": "VersionedBlob()", +"29e94ef6": "getProjectedJackpot()", +"29e99f07": "test(uint256)", +"29e9a3b9": "tokensReceived(address,address,uint256)", +"29e9afc9": "EnterCode(uint32)", +"29ea110c": "maxCapInCents()", +"29eae053": "setService(address,address)", +"29eae264": "EosChain()", +"29eae797": "oldController()", +"29ec09cc": "GetConfirmRound(address,uint8)", +"29ecd1e0": "PriceChanged(string,uint256)", +"29ed0f06": "BitcoinLegendToken()", +"29ed1297": "setItem(address,address,string,string,string,bool)", +"29ed82a1": "getDeflator()", +"29ed9a6a": "depositERC721(address,uint256,address)", +"29edd574": "buyCopper(uint256,uint256,uint8,bytes32,bytes32)", +"29edfbb8": "GetApplicant(address)", +"29ee0480": "FlatPricingExt(uint256)", +"29ee1580": "setMyPrice(uint256,uint256)", +"29ef1919": "discountPercent()", +"29ef5552": "setupZoomLvl(uint8,int256,int256,uint256)", +"29ef56b1": "getAskOrderBookStats()", +"29f0a422": "MakeTransfer(address,uint256)", +"29f11c8d": "edit(uint256,string,string)", +"29f1bff4": "withdrawFromChildDAO(uint256)", +"29f20618": "createLineItem(string,uint256,uint256,uint256,uint256[])", +"29f27577": "InvestorList(uint256)", +"29f321e4": "buy_Vault(uint256,bytes8)", +"29f3533c": "setPriceStalePeriod(uint256)", +"29f4071b": "RegistrationStatusChanged(address,bool,uint256)", +"29f46429": "WIE()", +"29f5fb9c": "icoTokenSales()", +"29f62f70": "logSendEvent()", +"29f69427": "o2Address()", +"29f6d9c3": "clearTokenApproval(address,uint256,bool)", +"29f75dc2": "samePooling()", +"29f799cb": "Studio()", +"29f7bd2f": "transferToContributionPool(uint256)", +"29f958dc": "publish(uint16,uint16,bytes4,string,bytes3)", +"29fa7266": "setSuperOwner(address)", +"29fb598e": "bountyTransfer(address,uint256)", +"29fc550f": "getChallengesForUser(address)", +"29fc7bd8": "PERCENT_DIVIDER()", +"29fcfe2b": "VestingScheduleConfirmed(address,address,uint256,uint256,uint256,uint256,uint256)", +"29fcfeb0": "AUCTION_STARTED()", +"29fd06cf": "Qripplex()", +"29fd50eb": "libAddress()", +"29fd8201": "setReputationAddress(address)", +"29fe6199": "dailyPercent()", +"29fec030": "MAX_DAILY_TOKEN_SOLO_SPEND()", +"29ff42e1": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16,bytes32,bytes32)", +"29ff4f53": "setReleaseAgent(address)", +"29ff7d04": "revertReservation(address,address)", +"2a004bd0": "deleteChannel(address,address,address,address,address)", +"2a00d284": "rewardReferrer(address,address,uint256,uint256)", +"2a00ff6f": "endianConvert256bit(uint256)", +"2a013925": "setFundingCap(uint256)", +"2a0213f6": "FeeOnAllocation(uint256,uint256)", +"2a022f22": "ALLOC_SALE_GENERAL_2()", +"2a035b6c": "endGame(address)", +"2a03b48b": "Campaign(uint256,uint256,uint256,address,address)", +"2a03ffa5": "CryptoGOToken()", +"2a0401f0": "confirmOrder(bytes32,bytes32)", +"2a040c16": "TemboCoin()", +"2a04e88a": "ethRateInUsdCents()", +"2a0763ce": "endGameConflict(uint8,uint256,uint256,int256,uint256,bytes32,bytes32)", +"2a095c14": "getCompte_3()", +"2a095fbe": "unlinkEID(bytes,bytes,address)", +"2a096397": "myDeposit()", +"2a0a3b53": "NewText(string,string)", +"2a0a5f50": "BidCanceled(uint256,uint256)", +"2a0acc6a": "ADMIN()", +"2a0b2617": "getAccountDetails(uint256)", +"2a0b9cb5": "check_authorization(address,address)", +"2a0bb7ea": "mulIsSafe(uint256,uint256)", +"2a0bba0e": "ImperoCoin()", +"2a0c5221": "battle(uint256,uint256)", +"2a0d06ec": "getTotalPctx10()", +"2a0d479f": "TutorialToken()", +"2a0d79ef": "totalSupply(bytes)", +"2a0deab4": "getDataAndOwner3(uint256,uint256,uint256,uint256)", +"2a0f189a": "setCallPtr(uint256)", +"2a0f3c35": "rentableSetup(uint256,uint256,uint256)", +"2a104d8d": "withdrawLoan(uint256)", +"2a10abc3": "CrypteloERC20Address()", +"2a10ff23": "product2()", +"2a11b950": "contractEvents(uint256)", +"2a11ced0": "holders(uint256)", +"2a12b54d": "_transferToLock(address,uint256,uint256)", +"2a139f75": "PLATprice()", +"2a14314f": "satoeLocked()", +"2a143af4": "_calculatePercent(uint256)", +"2a14b80a": "partition()", +"2a151090": "canPerform(address,address,bytes32,uint256[])", +"2a16a9ee": "emitCategorySet(uint256,uint256,bytes32)", +"2a16cca4": "isApproved(address,uint256)", +"2a1727f8": "checkExistAddress(address)", +"2a174710": "getAttackForCost(uint32)", +"2a179054": "setTokenFeeTake(address,uint256)", +"2a17e397": "multiTransferTightlyPacked(bytes32[])", +"2a1828fb": "attController()", +"2a18ca16": "currentSaleLimit()", +"2a19642c": "setSpawnProxy(uint32,address)", +"2a1a3303": "getNumberOfFlips(address)", +"2a1a8d4a": "updateIcoStatus()", +"2a1ab57e": "register(address[],uint256[])", +"2a1bbc34": "generate()", +"2a1be747": "rateFirstWeekEnd()", +"2a1c70e7": "Indemnisation_1()", +"2a1cdf7a": "enableReturnContribution()", +"2a1e37de": "armyCountBattlesLost(uint256)", +"2a1eafd9": "targetSupply()", +"2a1eb7cc": "MintToOwner(uint256)", +"2a1ef0ca": "teamAllocation(address)", +"2a1f63f8": "MiningRewardSent(address,address,uint256)", +"2a1fc45d": "decreaseArrayOfBeneficiariesBalances(address[],uint256[])", +"2a21566f": "grantPositionOwnership(bytes32,address,address)", +"2a21a3af": "isNormalUser(address)", +"2a22196d": "getVoucherDetails(uint256,uint256)", +"2a2235f2": "winAmount0()", +"2a226857": "AlbaritTokenV4(address,string,string,uint256,uint256)", +"2a228fc2": "processWithdrawals()", +"2a23475f": "blockCrowdsale(address)", +"2a23ac02": "eBitcoincash()", +"2a24b8e1": "instruct_4()", +"2a24f46c": "auctionEnd()", +"2a2514a2": "AceFundToken()", +"2a258842": "ETHOS()", +"2a2604dd": "bidRefund(uint256,uint256)", +"2a272974": "tokensIssuedForBonusRangeTwo()", +"2a27fd4a": "forGenesis()", +"2a286a19": "rewardSplitPercent()", +"2a286eda": "productAccounts(uint256)", +"2a2879d3": "createPromoCar(address,string,uint256)", +"2a28822e": "create(address,int256,address)", +"2a288272": "setUpgradesOwned(address,uint256)", +"2a28c610": "uint256_to_bytes(uint256)", +"2a292cce": "openCrowdSale(uint256)", +"2a29312a": "recoverAddressFromSignedMessage(bytes,bytes)", +"2a295c1f": "ChainMonstersCore()", +"2a29700f": "setForceExecuteOfContracts(bool)", +"2a2998a0": "houseFeeVal()", +"2a29c8d9": "getLoansLengthByClient()", +"2a29d109": "rewardController(address)", +"2a2a62f6": "removePrivelegedWallet(address)", +"2a2a6434": "register(bytes32,bytes32,address,bytes32,bytes32,string)", +"2a2acdce": "getMyFrontEndTokens()", +"2a2ad4df": "ExpiringMembership()", +"2a2b48f5": "largestRetro()", +"2a2bb728": "ElephantsPaymentCoin()", +"2a2d78b0": "DeDeContract(address,uint256)", +"2a2dd486": "_computeAura(uint256,uint256)", +"2a2e00be": "MintingClosed(bool)", +"2a2e1320": "isEven(uint256)", +"2a2e2f0c": "convertInternal(address,address,uint256,uint256)", +"2a2e6358": "setMinRecharge(uint256)", +"2a2e6ee6": "countCrowdsalesForUser(address)", +"2a2eddde": "setVesting(address,uint256,uint256,uint256,uint256)", +"2a2f366c": "getPlayer(uint8[176],uint8,uint8)", +"2a2f7bda": "daysRemaining()", +"2a2fbd4b": "min_required_amount()", +"2a2fe110": "isCosignerSet()", +"2a304900": "getHunting(uint256,uint256)", +"2a305613": "transfer(uint152,uint152,uint256)", +"2a308b3a": "transfer(address,address,uint64)", +"2a30b0b8": "addARA(address)", +"2a316353": "JMTOKEN(uint256,string,string)", +"2a31c5b8": "_addBonusOfTop(address,uint256)", +"2a332b2a": "setLotteryAddress(address)", +"2a335c17": "getTotalSalaryBunny(uint32)", +"2a337d30": "submitMatch(bytes32,bytes32)", +"2a3386e5": "covmanagerAddress()", +"2a33fec6": "proceed()", +"2a3520e1": "addDataInstance()", +"2a3590b9": "mimetype()", +"2a35d251": "_move(uint256,address,address)", +"2a3602b2": "DayLimitMock(uint256)", +"2a369647": "getEndpointParams(address,bytes32,int256)", +"2a36b7ac": "TotalRate()", +"2a37d540": "CrowdToken()", +"2a37eaea": "buyWithHash(address,uint256,uint256,bytes32)", +"2a387bdd": "bsx(uint256,string,string)", +"2a388b1f": "cancelDeposit(bytes32,uint256,uint256)", +"2a389fdc": "Pray4Prey(uint128[],uint8[])", +"2a38d484": "getNumEntries(uint256)", +"2a3966ff": "setActiveStatusEgg(uint256,bool)", +"2a396734": "burnPXLRewardPXL(address,uint256,address,uint256)", +"2a39a069": "minInvestmentInWei()", +"2a39c1ea": "officialUrl()", +"2a3a236f": "setMasterContract(address)", +"2a3b1228": "RobotnikToken(address)", +"2a3c2c56": "getConversionFeeAmount(uint256)", +"2a3d05cc": "getSignedIndex()", +"2a3d30c2": "coinValue()", +"2a3dc703": "updateRewardLedger(address,uint256,uint256)", +"2a3de92f": "getCurrentBonusPct()", +"2a3e6ba1": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE5()", +"2a3ec4ff": "takeICOInvestmentsEtherCommission(address,address)", +"2a3ef566": "EscapeCalled(uint256)", +"2a410068": "updateShares()", +"2a41360d": "processOfflinePurchase(address,uint256,int256)", +"2a41d1ff": "ArrAccountIsNotFrozen(uint256)", +"2a42e85f": "MiBoodleToken(uint256,uint256,uint256,uint256,uint256)", +"2a437269": "RCCCToken()", +"2a43b847": "TEACHToken()", +"2a43db3a": "Creature()", +"2a45a39a": "Post(address)", +"2a4654ab": "getAnimecard(uint256)", +"2a46d079": "MAT_UNIT()", +"2a472ae8": "checkIfCalled(bytes32)", +"2a4735c1": "EXOTokenSale(address,address,address)", +"2a47e08a": "Potato()", +"2a4802bc": "JINS()", +"2a4843a7": "freezeHeight()", +"2a486a28": "raisedETH()", +"2a48cabb": "testSwapTop()", +"2a491877": "lastTimeOf(address)", +"2a49222b": "isUsernameTaken(bytes32)", +"2a4a1a9b": "addFunds(address)", +"2a4a1b73": "vote(address,uint256,uint256)", +"2a4a8d68": "PRESALE_WEI_WITH_BONUS()", +"2a4a8e02": "stakedAmount(address,address)", +"2a4c7c6d": "initiateClaim(bytes32)", +"2a4caf67": "setDistenseAddress(address)", +"2a4d1a12": "CardExists(uint32)", +"2a4dc687": "callLib2(uint256)", +"2a4e0d55": "getTranscoderPoolSize()", +"2a4e4a84": "forx()", +"2a4ef2a3": "wpxTeamAddress()", +"2a4f1f21": "ACLYDTOKEN()", +"2a4f370f": "forTesting()", +"2a4fe4ef": "ClimateCronToken()", +"2a4ff14a": "Vlogchain(uint256,uint256)", +"2a50097b": "getPlayerBets(uint256,address)", +"2a501a43": "grantBonusDrops(address,uint256)", +"2a50d71d": "transferWithLock(address,uint256,uint256,uint256)", +"2a513dd9": "changeMinimum(uint256)", +"2a515949": "_attack(uint256,uint256,uint256,uint256)", +"2a523e89": "maxReferrerTokens()", +"2a52ee60": "createAuthority()", +"2a548276": "AddStaticProfit(address,uint16,uint256)", +"2a54d313": "pay(address,address,address,uint256,uint256,uint256)", +"2a555650": "HoneySuckleTimes()", +"2a55c47d": "TrumpFarmer()", +"2a55cab6": "UniCoinSize()", +"2a55feec": "isBuyer(address)", +"2a560845": "ownerWithdrawUnsupportedTokens(address,address)", +"2a571b15": "strikersChecklist()", +"2a583b90": "withdrawRake()", +"2a5854d9": "getFreeSquirrel()", +"2a58b330": "nextOrderId()", +"2a59143a": "HIKI()", +"2a595dd2": "GridcubeToken()", +"2a5b204a": "subCoinBalance(address,uint256)", +"2a5b51c3": "TokensIn(uint256)", +"2a5b68fd": "validate(bool)", +"2a5bfc7b": "isFunctionAuthorized(bytes32)", +"2a5c0e7c": "HomeBridge(uint256,address[],uint256,uint256,uint256)", +"2a5c2a64": "ITGCToken()", +"2a5c4675": "reservation()", +"2a5c65e4": "lookupInterest(uint256,uint256)", +"2a5c792a": "getAllTokens()", +"2a5cd45e": "getModuleIDByName(string)", +"2a5da7cd": "AnimatixToken()", +"2a5e695e": "Clean()", +"2a5eb26a": "BITCOINGAME()", +"2a5ed678": "currentContributionLimit()", +"2a5f6239": "_addReferrer(address,address)", +"2a5f6a0f": "setVariationCycle(uint256)", +"2a607962": "minCutValue()", +"2a608c0c": "VicoOwner()", +"2a60cf07": "FUTURE_DEVELOPMENT_FUND()", +"2a61ae19": "LockBalance(address)", +"2a61d47b": "getResourceSetCount()", +"2a62738b": "icoEndDate()", +"2a62b7fa": "IcoContract()", +"2a632eb5": "setUsdTokenPrice(uint256)", +"2a6389dc": "IsTransferFromOldContractDone()", +"2a649d6a": "returnFixed()", +"2a64e635": "simpleToken()", +"2a64fb63": "getSaleDate(bytes)", +"2a663686": "fpartSigned(int128)", +"2a666e01": "_fight(uint32,uint32)", +"2a66ede5": "giveMeETH()", +"2a677fb9": "getTokensForValue(uint256)", +"2a6852bf": "KOKOCoin()", +"2a6865e3": "PibbleToken()", +"2a69d486": "changeCraneStatus(bool)", +"2a69e1c6": "onlyWhitelistedCanDo()", +"2a69e7d9": "transfer(address,uint48)", +"2a6a5394": "TokenCappedCrowdsale(uint256)", +"2a6b157a": "CrowdsaleClosed(address)", +"2a6c703b": "RATING_EXPAND_INTERVAL()", +"2a6c7757": "kjhcoin()", +"2a6cc9bf": "QRReal()", +"2a6d474d": "usdPerEthMin()", +"2a6d6c08": "ReleasableAmount(address,uint256)", +"2a6dd48f": "approvedFor(uint256)", +"2a6dd8c9": "getPercent()", +"2a6dd9cb": "getInfoA(uint256)", +"2a6e3803": "getSoldAreasCount()", +"2a6e3e5e": "correct_check_match(uint256[39])", +"2a6efd76": "additionalRewards()", +"2a6f39ed": "deleteAllParents()", +"2a6f65c7": "getRoundToGroupToInput(address,uint256,uint256)", +"2a70214a": "TWD_Omnidollar()", +"2a707d2c": "personal_withdraw(string,uint256)", +"2a709b14": "tokenManager()", +"2a70d1e7": "registerInit(address)", +"2a711ab4": "voteTeam(bool)", +"2a714078": "triggerAuth()", +"2a71e729": "NAGACOIN()", +"2a724f2a": "reclaimAllAndBurn(address)", +"2a729061": "IDXToken()", +"2a7292d0": "createToken(uint256,address,uint256)", +"2a7318ac": "changePresaleEndDate(uint256)", +"2a73db5c": "GetContributorInformation(address)", +"2a741385": "subTokens(uint256,string)", +"2a745971": "BlockKing()", +"2a745ae6": "flowerAllowed(address,address)", +"2a74833d": "getUserSupportInTournament(uint256)", +"2a7575ee": "availableBalanceOf(address,address)", +"2a75a2ac": "addressFundAdministration()", +"2a75cb71": "removeOwnerRequest2(address)", +"2a764406": "CreateLRP(address,uint256)", +"2a76a169": "freezeMultipleAccounts(address[],bool[])", +"2a76ffae": "depositEtherForRefund()", +"2a774c27": "totAllocation()", +"2a776e3d": "setKYCLimited(address[])", +"2a7781cc": "postData(address,string,bytes32)", +"2a77b4af": "FEE_MUL()", +"2a77f2b7": "minMaxBuyETH()", +"2a7806e4": "noTokenLocked()", +"2a7813a4": "BitcoinBlackPearl()", +"2a781f78": "getKYCPresalePayload(bytes)", +"2a782802": "creatorBalances(address)", +"2a792f57": "buyAKeyWithAmount(uint256,address,uint256)", +"2a795d79": "bounty_allocation()", +"2a79fa0e": "TakePrize(uint256)", +"2a7a3ac7": "claimUnallocated(address)", +"2a7a50a5": "Intro(string,string,string,string)", +"2a7a80a4": "trade(address,address,uint256,address,address,uint256,uint256,address,bytes)", +"2a7b0172": "dontSellRock(uint256)", +"2a7b2c93": "split(string)", +"2a7b3d4d": "resumeWhitelist()", +"2a7c24f1": "power(int256,int256)", +"2a7ca11f": "getMemeData(uint256)", +"2a7caaec": "FOUNDATION_WALLET()", +"2a7e0cc0": "createtoken(string,string,string,string,string,uint256)", +"2a7e5018": "timeVault(address)", +"2a7e60b6": "setRevealClosed(uint256)", +"2a7ef0cc": "IDEA()", +"2a7f26c4": "GetAllCurrencyIDs()", +"2a8014ca": "escrowAmount(address,uint256)", +"2a804835": "setCooldownEndBlock(uint256,uint64)", +"2a805069": "createToken(uint256,uint256)", +"2a808899": "getSkillCount(address)", +"2a8092df": "isMinting()", +"2a812941": "getInitializeDesignatedReporterAddressValue()", +"2a816e65": "factorWeight()", +"2a8219e2": "setFundingBlock(uint256,uint256,uint256)", +"2a827f99": "getTokenOwnerReward()", +"2a82fdbd": "approveAdd(uint256,address,bool)", +"2a835d67": "changePreIcoStartTime(uint256)", +"2a83cd70": "MrReaperToken()", +"2a845b9f": "ADPay()", +"2a8565b4": "GACT()", +"2a856fcf": "debit(bytes32[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", +"2a858126": "tickerRegistry()", +"2a8587f9": "unAuthorized(address,address)", +"2a85a45d": "right38(uint256)", +"2a85b7dd": "getBackEtherFor(address)", +"2a862f1a": "notLessThan()", +"2a86eef3": "countDiscount(uint256)", +"2a874f34": "finishCampaign(bytes32)", +"2a87a86f": "shift(address,uint256,bool)", +"2a882d1d": "TokenHolderSnapshotter(address,address)", +"2a887299": "bid_threshold()", +"2a89d1bc": "TranchorToken(uint256,uint256,address,address)", +"2a89d6fd": "registerForGetTogether(address)", +"2a8a8b19": "bonusList()", +"2a8a8ebb": "unitStake()", +"2a8ab73c": "getProductOrderPayer(uint256)", +"2a8ade3a": "TotalCapacity()", +"2a8d1c61": "maxMask()", +"2a8d26e8": "approveTransfer()", +"2a8d7baa": "claimCompanyReserve()", +"2a8de0ca": "DranMe()", +"2a8e251f": "BitcoinNature()", +"2a8e391d": "OperationsFund()", +"2a8e5eae": "isInGroupOf(uint256,uint256,address)", +"2a8eb9a3": "arpToken()", +"2a8ec8cc": "numberOfPledges()", +"2a8f368b": "RESERVED_COMPANY_GROUP()", +"2a8f6aa8": "TOKENS_FOR_OPERATIONS()", +"2a8faf95": "secondaryGasLimit()", +"2a8fd223": "Flagged(address,bool)", +"2a9043e4": "sellValue()", +"2a9046d8": "disableGeneration()", +"2a905318": "TOKEN_SYMBOL()", +"2a905ccc": "getAdminFee()", +"2a9078d6": "OWNERS()", +"2a909257": "MultiCappedCrowdsale(uint256,bytes32,uint256)", +"2a9121c7": "ethereumToTokens_(uint256)", +"2a91ab16": "doAirDrop(address[],address,uint256[],uint256)", +"2a922d54": "collectedAddresses(uint256)", +"2a92362c": "getPaid(uint256)", +"2a9278c5": "optionPoolLockTotal()", +"2a92bb17": "OPRAH()", +"2a92bffa": "setEditionPackPrice(uint8,uint256)", +"2a93b5bb": "pausePreIco()", +"2a943be1": "LIRAX(string,string,uint256,string)", +"2a952b2d": "process(bytes32)", +"2a952b4b": "setParents(uint256,uint256,uint256)", +"2a970043": "create(string,uint256,uint256,uint256)", +"2a98e802": "setPerformanceBonus(uint256)", +"2a9a86c1": "createBucket(bytes32[])", +"2a9af123": "DOMTOK()", +"2a9b4921": "testManager(address)", +"2a9b6975": "SuperNanoCoin()", +"2a9b6dee": "pastFiveMinutes()", +"2a9ba092": "resizeIssuersArray(uint256)", +"2a9d04f0": "TOKEN_PRIVATE_SALE_CAP()", +"2a9e97f1": "matured_block_number()", +"2a9edf6f": "ownerSetStakeStartTime(uint256)", +"2a9f0fb2": "getPriceWithInterests(uint256)", +"2a9f1a79": "acceptPayment(address)", +"2a9fabd2": "betMatch(uint256,uint256)", +"2a9fb933": "MintExecuted(uint256,address,uint256)", +"2a9fb9b2": "userTransfer()", +"2aa0426c": "getAllBlocksByOwner(address)", +"2aa056cd": "shares_holders_count()", +"2aa073c5": "icoActive()", +"2aa0da47": "paymentSettings(string)", +"2aa1e848": "getPlayerAffT2(uint256)", +"2aa2b7eb": "T8CToken(address,uint256)", +"2aa2c381": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address)", +"2aa2f7a4": "getOwnOrderByIndex(uint256)", +"2aa3177a": "self_store()", +"2aa37a41": "substractBalance(address,uint256)", +"2aa49dd7": "Pixiu()", +"2aa4c051": "setifoodDevAddress(address)", +"2aa531d9": "getPlayerData(address)", +"2aa5411f": "jadeRec(uint256,uint256)", +"2aa5ed61": "DayLimit(uint256)", +"2aa6f98b": "ledToken()", +"2aa71e24": "init(bytes32,address)", +"2aa852b3": "removeListener(address,address)", +"2aa8be8d": "createPermission(address,address,bytes4,address)", +"2aa9466b": "updateMyWorks(bytes32,address,address,bytes32,uint256,uint256)", +"2aaa308e": "finalize(address,address,address,address)", +"2aaa49f5": "percentageQuarter3()", +"2aaa9de1": "AlicToken()", +"2aab1351": "receiveFromSigned(address,bytes,uint256,uint8,bytes32,bytes32)", +"2aab22ff": "BonusReferrerCrowdsale(uint256)", +"2aab80dd": "optionPool()", +"2aabb48e": "nextContributionCap()", +"2aabffdf": "disableSaleAgent(address)", +"2aac6911": "poolBLock()", +"2aac8ad4": "getFirstAndSecondItem()", +"2aad292e": "setOperatingOfficer(address)", +"2aadafe8": "refundAdvertiser(address,uint256)", +"2aae7f26": "Arcturus()", +"2aae88f6": "removeFromGeneration(uint256,address)", +"2aaee1a5": "Drawer()", +"2aaef20c": "sixth_withdrawal(uint256)", +"2aaefa9f": "centsExchangeRate()", +"2aaf1685": "testControlCreateWithParentSameItemId()", +"2aafbf7c": "Getether()", +"2aafe9e7": "metToken()", +"2ab0252d": "getERC721AddrPawn(uint256)", +"2ab08396": "OwnersDb()", +"2ab0be77": "getTicketCode(uint256)", +"2ab0bf3c": "GetContributorData(address,uint256)", +"2ab13037": "votesNo()", +"2ab19a7e": "GoalMaximumReached(address,uint256,uint256)", +"2ab2174e": "subOnOneStage(address,uint256,uint256)", +"2ab22592": "updateWinnerBid(bool,bytes,uint256,bytes,bytes,bytes)", +"2ab24e3b": "commitVote(address,bytes32,bytes32,bytes32)", +"2ab26831": "getRateIco()", +"2ab28ce4": "buyTree(uint256,address)", +"2ab290fc": "updatejingzhi(uint256,string,uint256)", +"2ab34a91": "claimEnergy()", +"2ab4672a": "BatchCreateSaleAvgPrice(uint256[],uint256,uint256,uint256,uint64,address)", +"2ab4d052": "maxTotalSupply()", +"2ab4ebfa": "AddItem(address,address)", +"2ab6a50e": "payoutBigBonus(address)", +"2ab6f3f0": "BteamBets(uint256)", +"2ab6f8db": "renounceOperator()", +"2ab7173b": "lockup_startdate()", +"2ab72d2f": "assetIdOfToken(uint256)", +"2ab76377": "icoEndTimestampStage3()", +"2ab7961e": "aDeleteMessage(uint256,string,string)", +"2ab7d104": "_getAllRevisionIpfsHashes(bytes32)", +"2ab8de9b": "hash_ripemd160(string,uint256)", +"2ab8fc2d": "reservesPerTokenSrc(address,uint256)", +"2ab90d66": "ownerrestart()", +"2ab924d2": "HRCoin()", +"2abaa0c9": "picosCap()", +"2abaca23": "participate_in_arbits_presale_fiat(address,uint256)", +"2abd7fc8": "withdrawDao()", +"2abdbeb8": "forceOverStage()", +"2abdf1ef": "_update(string,uint256,string,uint256,uint256,uint256)", +"2abe4f60": "getInStake(uint256)", +"2abe5a2d": "getCandidate(uint32)", +"2abf2aae": "payMaxAuctionEther()", +"2abfab4d": "donationCount()", +"2abfaf1f": "setFreeTransfer(bool)", +"2abfbd28": "mintCommunityRewards()", +"2ac016ad": "addBackend(address)", +"2ac025ab": "removeAddressFromRole(address,string)", +"2ac08739": "getCurrentDuke(string)", +"2ac110c5": "icoPhase2Start()", +"2ac12622": "cancelled(bytes32)", +"2ac197c4": "IPMCOIN()", +"2ac1a995": "HiBTCToken()", +"2ac1db5a": "getEthToTokenUpdateOrderHint(uint32,uint128,uint128)", +"2ac20ed4": "createInitialDays(uint256)", +"2ac2af53": "updateParameters(bytes32)", +"2ac306b0": "BitCoin()", +"2ac364b4": "PalavraCoin()", +"2ac394a4": "durationBetweenRewardMints()", +"2ac48524": "getTokensCount(address)", +"2ac4a51d": "OVALExchangeToken()", +"2ac50df1": "tokenPriceOracle()", +"2ac68b78": "acceptPayment(address,uint256)", +"2ac69167": "StockLocation(string)", +"2ac6f15f": "exchangePreDGZTokens()", +"2ac71c16": "maxUSD()", +"2ac7f8ce": "CrowdSaleChanged(address)", +"2ac85e46": "isValidNode(uint256)", +"2ac87112": "ETHRaised()", +"2ac9bf09": "bid(uint256,uint256,uint256)", +"2aca2b16": "setInvestxPlatform(address)", +"2acada4d": "getAllAssets()", +"2acc204c": "killMeshPoint(int256,address,address,string,address)", +"2accf2f7": "splitFunds(address,address)", +"2acd1a95": "sling(string,string,string,string,uint256)", +"2acd2000": "removeFreezer(address)", +"2acd7e41": "transferOwnerToTest()", +"2acefd0f": "setCitySlogan(uint256,string)", +"2acf3908": "StealthGridToken(uint256,string,string)", +"2acf8551": "playMeta(address,address,uint256)", +"2ad02172": "MAX_PREICO_SUPPLY()", +"2ad0a4e9": "pauseNotice()", +"2ad11b9e": "getMinerals()", +"2ad12937": "OwnableToken()", +"2ad1bc09": "steal(int128,string,address)", +"2ad2a9f8": "transfer(bytes32,uint256,address)", +"2ad2ae2e": "collectLocalBounty(uint16,uint256)", +"2ad3274f": "UpgradeScheme()", +"2ad3509b": "ExcreteumToken()", +"2ad389e3": "constructHashRs1Rs2(bytes,bytes)", +"2ad3e8bc": "GreenChain()", +"2ad3ef70": "randContract()", +"2ad45312": "WEI_MINIMUM_PURCHASE()", +"2ad4d818": "userCreate(string,string)", +"2ad64a4d": "MAXCAP_TOKENS_PRE_ICO()", +"2ad8016e": "changeDiscount(uint256,uint256,uint256)", +"2ad8aaa6": "bonusAmmount(uint256)", +"2ad8d875": "getPayeeExpectedAmount(bytes32,uint8)", +"2ad8fbd2": "MerrierToken(string,string,uint256,uint256,bool)", +"2ad92740": "tokensPurchased(address)", +"2ad9527e": "h_pwd()", +"2ad95786": "winner(address)", +"2ad9618c": "startCrowdsale(uint256,uint256,uint256,uint256[],uint256[])", +"2ad99825": "setOwnerCutPercentage(uint256)", +"2ad9efc0": "UbayToken(address,uint256)", +"2ada2596": "getMember(address)", +"2adbb84d": "onFreezing()", +"2adbc396": "BurnableCrowdsaleToken(string,string,uint256,uint256,bool)", +"2adc2cd2": "COIN_PER_ETHER_ACTIVE()", +"2adc7da3": "setCentralBanker(address)", +"2add5a50": "cofounders(uint256)", +"2add78bb": "StartQ(string,string)", +"2addeab6": "getSolver(uint256)", +"2ade6c36": "getNodeAddress(bytes32)", +"2adf68bb": "UTPLToken()", +"2adf7d2f": "tenZero()", +"2ae1158d": "votingWeightOf(address,uint256,uint256,uint256)", +"2ae26d8e": "tenDecimalPlaces()", +"2ae3594a": "hit()", +"2ae418a4": "getPrivatePreSaleTokenBalance(address)", +"2ae4b85f": "MAX_HOST_PERCENT()", +"2ae524c2": "mintRiskTokens(address,uint256)", +"2ae6218d": "getBurnPrice()", +"2ae67563": "GameSicBo(string,uint256,uint256,uint256,address)", +"2ae6f9c2": "Ownerburn(uint256,address)", +"2ae72544": "length(int256)", +"2ae7c2df": "Ethernite()", +"2ae7c313": "Injected(address,uint256,uint256)", +"2ae8284a": "_newGame(uint256)", +"2ae8636d": "withdrawPRSTokens(address)", +"2ae87a70": "getNumContents(address,uint256)", +"2ae8a2d2": "sendFunds(address,uint256,uint256)", +"2ae8a7e3": "checkRole(address,bytes32)", +"2ae8b4a3": "actualGotETH(address)", +"2ae9782c": "MARRON()", +"2ae9c600": "protocolVersion()", +"2aea4d21": "sealer()", +"2aeaa291": "checkRewards()", +"2aeabfbf": "getLiquidityAndPositions(bytes32,address)", +"2aeacd4a": "exchangeTokensFromOtherContract(address,address,uint256)", +"2aebcbb6": "finishVote()", +"2aec3169": "setThirdWinner(address[])", +"2aec3a71": "ProofOfHumanityAddOn()", +"2aec9466": "updateInfo(uint256,uint256,uint256)", +"2aed1390": "kyberContract()", +"2aed1905": "setMatchingEnabled(bool)", +"2aed256e": "inRangeToDisembark(uint16,uint16,address)", +"2aed7f3f": "reclaimContract(address)", +"2aee19c7": "testCreateWithNonce()", +"2aef3898": "ChangeMinSaleAmount(uint256)", +"2aef6ff6": "serviceTrasferFromDist(bytes32,address,uint256)", +"2aefb7c5": "funds_claimed()", +"2af004e7": "setReferralAddress(address,address)", +"2af05c4e": "lastMintingTime()", +"2af05d07": "unlockCurrentAvailableFunds()", +"2af0ac71": "getAmountSoldAfterPowerDay()", +"2af123b8": "diffHours(uint256,uint256)", +"2af1616d": "MissionToken(uint256,string,uint8,string)", +"2af1b5a2": "protectedUnlock(address,uint256,string)", +"2af1c247": "mint(string,uint256,uint8,string)", +"2af22e3b": "getJobs(address,uint256)", +"2af37ba0": "Donate(string)", +"2af38eab": "totalBspAmount()", +"2af39bab": "AssetBackedTokens(string,uint8,address)", +"2af3b7f8": "updateState(bytes32,uint256,bytes,bytes,bytes)", +"2af4c31e": "changeOwnership(address)", +"2af52312": "TRAToken(address)", +"2af5356a": "claimTeamTokens()", +"2af5cfdd": "priceOfEthOnEUR()", +"2af5e6b2": "setPriceEther(uint256)", +"2af6fb10": "ERC20TokenImpl()", +"2af7ac0a": "rtu(uint256)", +"2af7c4d7": "Certifiers()", +"2af7ceff": "testPrice(uint256)", +"2af7ecc7": "addRosenCertAdmin(address)", +"2af8afca": "dgt()", +"2af8b645": "release(bytes32,bytes32)", +"2af8fd94": "ISmartCert()", +"2afaca20": "buy(uint256,address,uint256)", +"2afb21bc": "InvestWithdraw()", +"2afb9fb1": "isCardTradeable(uint64)", +"2afbbacb": "canStake(address,uint256)", +"2afbc38f": "Annexe_SO_DIVA_SAS()", +"2afbe339": "QQQToken()", +"2afcdfbc": "createGen0Auction(uint256,uint256,uint256,uint256,uint256)", +"2afcf433": "PriceTwoEnable()", +"2afcf480": "invest(uint256)", +"2afd1a7d": "getReleasableAmount(address)", +"2afe4c37": "tokensleft()", +"2afe9f1e": "TestTokenContract()", +"2afed67e": "amountFundBounty()", +"2aff101c": "LinearDecayingTokenFunction()", +"2aff2843": "servusMultiSig()", +"2aff49d7": "setSizeAndRate(uint256,uint256)", +"2b000f00": "calculate_next_expected_wei(uint256,uint256,uint256,uint256)", +"2b00c6fd": "createHorseShoe1(uint256,uint256,address)", +"2b019692": "RYNote()", +"2b01bf51": "isValidMember(address)", +"2b028bbb": "LKCExchangeRate()", +"2b02d9af": "NIMBUS()", +"2b03b8d4": "IMDEXdeposit()", +"2b03d70e": "undisputeFavor()", +"2b04451a": "totalExtraOptions()", +"2b048f77": "getMyDeployAt(uint32,uint32)", +"2b04b478": "removeUsersFromGroup(bytes32,address[])", +"2b04d8f7": "takeOffer(uint256,address)", +"2b04e840": "getBalance(address,uint256)", +"2b051b50": "revealVoteOnProposal(bytes32,uint8,bool,bytes32)", +"2b05d346": "CallScheduled(address)", +"2b069816": "getJobValue(uint256)", +"2b071e47": "spread(address[],uint256[])", +"2b07682a": "withdrawFoundersTokens()", +"2b086b92": "convertToTMEX(uint256,address)", +"2b08fef7": "buy_token(address[],uint256)", +"2b093fe9": "TOKEN_MULTIPLIER()", +"2b0999f3": "initialYear()", +"2b09e707": "amountHives()", +"2b0aa1ed": "updateEthFee(uint256)", +"2b0ac7c4": "_createToken(uint256,uint256,uint256,uint256,uint256,address)", +"2b0cb194": "mintRawTokens(address,uint256)", +"2b0d0180": "luckyBuy()", +"2b0d0c6a": "afterFirstRefundRoundFundsReleaseNumerator()", +"2b0e16bf": "PRESALE_BALANCES()", +"2b0e64b3": "determineCommissions()", +"2b0ebfe9": "activatedJuryTokens(address)", +"2b0fbf72": "getMobster(uint256)", +"2b0fd89e": "ARcoin()", +"2b0fdb72": "MINIMUM_MANUAL_SIGN_PERIOD()", +"2b0ff02d": "listCard(uint64,uint128,uint128,uint24)", +"2b100a31": "setStatsSumHours(uint256,uint256)", +"2b1071c9": "testTransferToNullAuthority()", +"2b112e49": "getCirculatingSupply()", +"2b11e7f6": "SILVER_AMOUNT_SKL()", +"2b124245": "selfRegisterDINsWithResolver(address,uint256)", +"2b12553b": "saleExchangeRate()", +"2b13d799": "redeemedList(uint256)", +"2b1453dd": "addSwap(string)", +"2b146407": "PrivateSale()", +"2b14b712": "addClient(address,address,uint256)", +"2b14ca56": "sellFee()", +"2b151096": "placeSaleOrder(bytes8,bytes8,uint256,uint256,uint256)", +"2b15eb9b": "TongTong(string,string,uint256)", +"2b16b56a": "setIndex(uint256,uint256)", +"2b16f1ef": "nextPoolPercentage()", +"2b17355e": "balancesPrivate(address)", +"2b17b6a9": "bnbToken()", +"2b1841d2": "openCdp(uint256,uint256,uint256,address)", +"2b1857a5": "dividendPathways(address,uint256)", +"2b190f18": "getFreeTokens()", +"2b193ac4": "INITIAL_AC_SUPPLY()", +"2b198366": "addCertifier(address)", +"2b198808": "BloccaConto(address,bool)", +"2b1c511f": "getAvailability(address)", +"2b1c6982": "testTemp2()", +"2b1dd8da": "refundFees()", +"2b1e27f1": "migrateDomain(uint256,bytes32)", +"2b1e5016": "releaseTheHodl()", +"2b1ed01a": "warehouses()", +"2b1f7660": "PRZTToken(uint256,string,uint8,string)", +"2b1fcc10": "impl_cancelOrder(address,uint256,bool)", +"2b1fd58a": "acceptBid(uint256)", +"2b20e397": "registrar()", +"2b214618": "listAllBuyBalance(address,uint256,uint256)", +"2b21502f": "totalEthRcvd()", +"2b21d01b": "rateBTCxETH()", +"2b223264": "BitcoinBrand()", +"2b22a18c": "allocate8ProjectToken()", +"2b232741": "pullFromCirculation(uint8)", +"2b2443db": "canRaiseUsing(uint256)", +"2b2449b5": "setMaxCAP(uint256)", +"2b24aa6e": "rateA()", +"2b252d17": "_randomize(uint256,uint256)", +"2b25303b": "USDTUBE()", +"2b25a7e4": "giveKudos(address,uint256)", +"2b28d2d0": "totalFrozenAccountsMapping()", +"2b291eb6": "UserAddTicket(bytes)", +"2b29532b": "distributeLCASH(address[],uint256,uint256)", +"2b297f9e": "registerDao(address)", +"2b29908d": "BGB_address()", +"2b29fbfa": "testFail_voterNotCertified()", +"2b2b2882": "mintIcoTokenMultiple(address[],uint256[])", +"2b2badb3": "getAuditor(address)", +"2b2c71af": "doTradeofCollateral(address,address,uint256,uint256,uint256,uint256)", +"2b2c91b9": "refundApprove(address,uint256)", +"2b2dc12e": "RECEIVER_PAYOUT_THRESHOLD()", +"2b2e7159": "typeB()", +"2b2e76f3": "LA_wallet()", +"2b2f4d84": "setVestingParams(uint256,uint256,uint256)", +"2b2f88a8": "quantidadeDeAutorizacoes(address)", +"2b2fbd68": "minTicketEur()", +"2b302b60": "fairymasterReq()", +"2b30a84e": "rollTwo(address,uint8,uint8)", +"2b30d2b8": "invoke(uint256)", +"2b318568": "AddDynamicProfit(address,uint32,uint256)", +"2b321633": "testCloseChannel()", +"2b3297f9": "swapper()", +"2b337152": "totalissue()", +"2b343100": "newPlayerFee()", +"2b359e6b": "fundingTokens()", +"2b35d08a": "_computePrice(uint256)", +"2b36316e": "updateStageCap(uint256)", +"2b36a657": "profits()", +"2b379218": "globalDailySupply()", +"2b37d313": "tdeIssuer()", +"2b38ee56": "exitFee_()", +"2b3a4ae3": "adjustFeeEntitlement(address,uint256)", +"2b3b885d": "BGJC(uint256,string,string)", +"2b3c7562": "tierThreePurchase()", +"2b3da717": "BOBOTOKEN2()", +"2b3eae40": "MatchmasterTakeover(address,address,uint256)", +"2b3eb76c": "awardAmountPrime()", +"2b3ed526": "setFiatContract(address)", +"2b3ede1c": "WithdrawAll(address)", +"2b3f9f01": "_setSpendAvailable(uint256)", +"2b3fbbbb": "setPixelColor(uint16,uint16,uint24)", +"2b3ff9e9": "DLVO()", +"2b4143bd": "BasketRegistry()", +"2b4158cb": "buyFreePixels(uint256,uint256,uint256,uint256)", +"2b41a901": "grandTotalAllocated()", +"2b423b05": "changeRequiredMinor(uint256,bool,bytes)", +"2b42a89a": "setWhitelistOnlyPermission(bool)", +"2b42f4b2": "TokensCreated(address,uint256,uint256)", +"2b435366": "fund(address,bool)", +"2b4353f2": "payoutRate()", +"2b44d05f": "LISA()", +"2b44e5be": "distributeTokenToAddress(address,address,address,uint256)", +"2b44fd38": "dayLimit_()", +"2b455ac6": "insertMilestone(uint8,uint256,uint256,uint256)", +"2b459e81": "SpermLabsReborn()", +"2b45bcf9": "minimumHydroStakeUser()", +"2b4656c8": "initialize(address,address,address,uint256,uint256,uint256,uint256)", +"2b46e7f8": "SLUTZToken()", +"2b47571a": "resetWithdrawTimer(uint256)", +"2b47cb17": "TopToken()", +"2b49c9c2": "updateBanqueAddress(address)", +"2b49d425": "currentProposal()", +"2b49d9e5": "setFighters(uint32,uint32,uint256[])", +"2b4a27cb": "fechPreAllSumNumForCandidate()", +"2b4a2d0a": "getInfoFromCreateAuction(bytes)", +"2b4a3b31": "doTransferFrom(address,address,uint256)", +"2b4a964b": "networkGrowthAmount()", +"2b4bdf76": "getBdpController(address[16])", +"2b4ca103": "TXQToken(address,uint256)", +"2b4cbcc3": "getCombat(uint256)", +"2b4d0450": "BaseToken(string,string)", +"2b4d7c3e": "getPositionLender(bytes32)", +"2b4e8413": "userNumber()", +"2b4f79b3": "buyMessage(bytes32,uint256,string)", +"2b5129f5": "WaterMeterAcorn(bytes32,uint8,uint256,uint256,uint256)", +"2b513549": "mokenNameBytes32(uint256)", +"2b514749": "getTeamPrice(uint256[])", +"2b5184a6": "addSponsorship(address,address,uint256)", +"2b5187fd": "STCC()", +"2b521416": "features()", +"2b549b82": "createAuction(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"2b54c3ce": "addToken(uint256,string)", +"2b554142": "redeemMany(address[],uint256[])", +"2b556813": "twitterDropMultipleAmount(address[],uint256[])", +"2b5570ad": "PatientFactory()", +"2b5630c2": "displayvehicledetails(address,uint256)", +"2b57298b": "getDate(uint256)", +"2b577ec4": "PREMINE_RELEASE(address,uint256,uint256)", +"2b58072f": "getDatasetsCount(address)", +"2b58150b": "setLotteryDuration(uint256)", +"2b587555": "privateTransfer(address,uint256)", +"2b58e202": "tokensOfOwnerFromIndex(address,uint256,uint256)", +"2b5914fe": "setUserName(string)", +"2b5947e7": "checkDivsRndView(address)", +"2b596a23": "balanceOfShares()", +"2b597e4d": "updateBool(bytes32,bool)", +"2b59d1fc": "borrar()", +"2b5ad2ad": "secondTimer()", +"2b5af004": "appendDecryptedBid(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"2b5b6872": "AIRDROP_AMOUNT()", +"2b5da915": "Property(string,string,uint256,uint256)", +"2b5daa86": "newModule(string,address,bool,bool)", +"2b5f227e": "encodeBytes(bytes,uint8)", +"2b5fa90a": "currentselectorchoosegiverandreceiver(address,address,address,address)", +"2b5faebd": "_calcTokens(uint256,uint256)", +"2b5fc4ce": "RSUNToken()", +"2b603c71": "allowances(address)", +"2b6133f5": "checkTierCap(uint8,uint256)", +"2b625874": "distributePeerTokens()", +"2b62ef2a": "CryptoCurrencyToken()", +"2b633f77": "ballotCancelingThreshold()", +"2b644ac8": "_setAvatarIfNoAvatarIsSet(address,uint256)", +"2b65d18a": "wireLimit()", +"2b65e040": "ownerPool()", +"2b664d8a": "getUsersByDocHash(bytes32)", +"2b680932": "ANNOUNCE_WINNER_DEADLINE()", +"2b68b9c6": "destruct()", +"2b68bb2d": "cancelContract()", +"2b68fc21": "guarenteedPaybackTime()", +"2b69f40d": "PaymentServ(address,address,address,address)", +"2b6a8b46": "addSpace(uint256,uint256,bytes,uint256,uint256,uint256,uint256,string,string,uint256)", +"2b6aa69d": "NewFunds(address,uint256)", +"2b6ada6d": "WalletWithDailyLimit(address[],uint256,uint256)", +"2b6b7c69": "airdropIndividual(address[],uint256[],uint256,uint256)", +"2b6bbc31": "testingOnly()", +"2b6bc920": "answerRequest()", +"2b6bd13a": "ChainInfo()", +"2b6c750f": "loseSponsor(uint32,int256)", +"2b6d0ceb": "test(address,address)", +"2b6d7706": "transferTokensManuallyToMany(address[],uint256[],uint256)", +"2b6d7a66": "hasActivePass(address)", +"2b708fc9": "usageFee(bytes32,uint256)", +"2b70faf1": "game_paused()", +"2b711051": "investorsCount()", +"2b713d71": "rankToAddress(uint256)", +"2b71b0e5": "getStat()", +"2b7216e5": "donateToCampaign(uint256,uint256)", +"2b726758": "ETIC()", +"2b72c5fc": "FANCY(uint256,string,string)", +"2b73a83b": "CBS(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"2b741ed6": "claimedFees(uint256,address)", +"2b7423ab": "average(uint256,uint256)", +"2b747a29": "buy_tickey(address)", +"2b750f4f": "DIVISOR_PRICE()", +"2b75289b": "placeBet(uint8,uint8,uint8,int256)", +"2b7568d9": "admin_withdraw_all(address)", +"2b7582c0": "sendEthForReward()", +"2b76823c": "ICOBuyer(address,address,uint256,uint256,uint256)", +"2b770ee9": "Ddjtab(uint256,string,string)", +"2b774d46": "XWALLET()", +"2b78194f": "GAS_REFUND()", +"2b7832b3": "adminCount()", +"2b783bc8": "addCredentials(bytes32,bool)", +"2b785960": "testBitAndSuccess()", +"2b788e33": "MAX_BOUNTYTOKENS_AMOUNT()", +"2b790ee4": "calcProfitFromTotalWon(uint256,uint256)", +"2b791053": "getDailyLimitRemaining()", +"2b791d6e": "storedDividendsOf(address)", +"2b79d7ba": "testFailMoveWithoutTrust()", +"2b7ac3f3": "verifier()", +"2b7b3a6c": "createBuildingAuction(uint32,uint8,uint8,uint8,uint8,uint8,bool)", +"2b7be84b": "AfterSchoolCrowdsaleToken()", +"2b7c3138": "MANETokenPartnerCrowdsale(uint256,uint256,address,address,address,address,address)", +"2b7ce9cd": "updateThresold(uint256)", +"2b7d13cc": "withdrawRemainingToken(uint256,address)", +"2b7d177b": "isvalidOrg(address,address)", +"2b7dd488": "totalLBSold_GENERAL_3()", +"2b7e063e": "GenOutChipsNum(uint256,uint256,uint256)", +"2b7e2169": "getTotalSell(uint256)", +"2b7e4295": "invadePlanets(uint256,uint256[],uint256[])", +"2b7ec7fe": "getLotInvested(uint256,address)", +"2b7fda2f": "mintAllowed(address,address,uint256,int256)", +"2b81b8a4": "alreadyRegisteredMessage()", +"2b82714f": "deliverAngelsREDAccounts(address[],uint256[])", +"2b828e4a": "addTx(bytes32,bytes4,address)", +"2b82aed6": "setPayerAddr(address)", +"2b82cf1f": "unFroze(address,uint256)", +"2b84aabe": "trust(uint8)", +"2b84fe83": "reserveFeeToBurn(address)", +"2b85ed9c": "purchaseCount()", +"2b860e6d": "transferToThroughVariable(address,uint256)", +"2b861629": "storeBlockHeader(bytes)", +"2b865dea": "airdropTokenDistributionMulti(address[],uint256[])", +"2b86d48a": "MDKToken(address)", +"2b876784": "ZHOUToken()", +"2b877dfd": "sendCoin(bytes4,bytes32,bytes32,uint256)", +"2b878c7c": "KYCValid(address)", +"2b88c42d": "buyItem1()", +"2b88cbbf": "getExcludes(uint256)", +"2b8a1c00": "t2tokenExchangeRate()", +"2b8a1c5a": "setGuardian(address,bool)", +"2b8a36e0": "freezeTransferTime()", +"2b8a789b": "ChangeGameHidden(address)", +"2b8af65b": "INTERFACE_SIGNATURE_ERC165()", +"2b8b09d4": "REDGIL()", +"2b8b1bc4": "transferAndFrostTokens(address,uint256,uint256)", +"2b8b6667": "deregister(address[])", +"2b8bbbe8": "add(uint256,address)", +"2b8c8a20": "Sale(address,uint256,uint256,uint256,string,uint256)", +"2b8cc346": "acceptRequest(address)", +"2b8cd2f7": "withdrawUncommittedTokens(uint256)", +"2b8cd5c6": "getComponentSupport(uint16)", +"2b8d0cd7": "setIcostart(bool)", +"2b8e4df1": "vest(bool)", +"2b8f2042": "withdraw_funds()", +"2b8f7a49": "depositMoney(string)", +"2b8f899e": "OzoneToken()", +"2b901a0a": "getOwnerByName(bytes32)", +"2b90557c": "minSet()", +"2b905bf6": "TEAM_WALLET()", +"2b90bb3a": "distributeGoTokens(address,address)", +"2b9122df": "getTimeTillEnd()", +"2b913151": "secondCapEndingBlock()", +"2b919aa6": "validPurchaseSize()", +"2b920a6b": "CampaignAccountFactory(address)", +"2b925b25": "minimumInvestment()", +"2b92b8e5": "hashValue()", +"2b92c776": "cancelBuyOrder(address,uint256,uint256,uint256,uint256)", +"2b9530d8": "transferTokens(address,uint256[])", +"2b956ff7": "getUserId(address)", +"2b968958": "revokeOwnership()", +"2b96a0a1": "getGamesMeta(uint256[])", +"2b96c00e": "abortGame(address,uint256)", +"2b97c6e4": "Cilox()", +"2b98222e": "getInstitutionByAddress(address)", +"2b985942": "LittleStoreERC20Token()", +"2b985f7c": "testNegatives(int256)", +"2b9897fb": "smallCapLimitOf(address)", +"2b991746": "approveFor(address,address,uint256)", +"2b99a087": "getLpIsWorking(int256)", +"2b99db6a": "tokensApproved()", +"2b99f359": "carOfByIndex(address,uint256)", +"2b99f3e1": "setIsTurnDataSaved(bool)", +"2b9a5c34": "_getTileAt(int32,int32)", +"2b9a7fae": "_updatePlayerOverrideId(uint256,uint256)", +"2b9b7573": "MAX_TRANSFERS()", +"2b9be92e": "GanaTokenAirdropper(address)", +"2b9cb4f8": "uniq(uint64[])", +"2b9cd08b": "submitAddOwnerTransaction(address)", +"2b9ce01e": "currentIcoTokenPrice()", +"2b9e05d1": "Betportchain(uint256,uint256)", +"2b9e5088": "filterTransactions(bool)", +"2b9e98b1": "changeFundingPercentages(uint256,uint256,address)", +"2b9edee9": "softCapReached()", +"2b9fd446": "isHatchOnCooldown()", +"2ba00198": "setBaseCap(uint256)", +"2ba0ab78": "EyeToken()", +"2ba0b09f": "AddNewCategory(bytes4,uint8,uint8,address)", +"2ba11f2a": "CONVERSION_DECIMAL_FACTOR()", +"2ba1e439": "createOraclizeCallback(bytes32,uint256,uint8,uint256)", +"2ba25366": "mintInBatches(address[],uint256[])", +"2ba29217": "canExecute(uint256,uint256)", +"2ba2a853": "thelnwaonToken()", +"2ba2d714": "LordXChain()", +"2ba2ed98": "setMagicNumber(uint256)", +"2ba5390f": "isFirstPartReleased()", +"2ba5b90d": "get_number_of_DBs()", +"2ba665e5": "getDoc(uint256)", +"2ba6d8fe": "PRESALE_WEI_CAP()", +"2ba73c15": "setCOO(address)", +"2ba7910a": "provider1()", +"2ba7fc87": "tgeIssuer()", +"2ba8b7e4": "getMinimumAuctionPrice(uint256)", +"2ba8f526": "OfferToGuardian(uint256,uint256)", +"2ba96462": "supportsERC165Interface(address,bytes4)", +"2ba996a5": "getListedTokens()", +"2baa2c58": "disqualifyBid(address,bool)", +"2baab935": "Fuschain(address,uint256)", +"2baabbf7": "finalSupply()", +"2babd014": "sellSecond(uint256)", +"2bac0b3b": "vendingCreateCollectible(uint256,uint256,address)", +"2bac276b": "badgeTransfer(address,uint256)", +"2baeceb7": "decrement()", +"2baf2acb": "mintTo(address,uint256,uint256)", +"2baf4f22": "_safeFalse()", +"2bafc817": "EpietherToken()", +"2bb03ab9": "earlyPresaleEDUSupply()", +"2bb03f6d": "ValidateCitySnapshot(address,uint256)", +"2bb0e10b": "serviceAccount()", +"2bb14104": "myData()", +"2bb20f4a": "soulsSold()", +"2bb22480": "calculateDrugSell(uint256)", +"2bb3dcc8": "totalInvocations()", +"2bb4c7d5": "STribeToken()", +"2bb51a05": "EDEX(address,uint256,uint256,uint256)", +"2bb685bc": "kill2()", +"2bb6ccf1": "delAuditAddress(address,address)", +"2bb70e54": "lockMasterTransfers()", +"2bb768f0": "adminGetCityData(address)", +"2bb77b8e": "setRewardAddr(address,address)", +"2bb81546": "getClaim(string)", +"2bb9cb1d": "buyXid(uint256,uint256,bytes32)", +"2bb9ffef": "startBalance()", +"2bba2d6d": "changeInvitedReward(uint256)", +"2bbb44b8": "adminCreat(address)", +"2bbc50b5": "getTotalInvestedEur()", +"2bbc9396": "periodICOStage2()", +"2bbd3c93": "ART_CONTRACT_ADDRESS()", +"2bbd59ca": "messages(bytes32)", +"2bbd84e8": "totalPurchaseValueInWei()", +"2bbd88f3": "LOBO()", +"2bbd9530": "unregisterAddress(bytes32)", +"2bbdb18a": "hasEnoughApproval(uint256,uint256)", +"2bbe62d6": "createSetup(address,uint256,uint256,bool,address,uint256)", +"2bbeac91": "lockTokenHolder()", +"2bbf532a": "isUnlocked(address)", +"2bbf54e8": "isBuyStopped()", +"2bc06a92": "canSend(address)", +"2bc0fe34": "infoMining(address)", +"2bc24d52": "IXTPaymentContract(address)", +"2bc31ca4": "developers()", +"2bc3217d": "forbid(address,address,bytes32)", +"2bc3656c": "buyTokensPreSale(address,uint256)", +"2bc38531": "setup(string)", +"2bc3a349": "GWTCrowdsale()", +"2bc402fa": "TOTAL_PREALLOCATION()", +"2bc40f9a": "setAddressUInt8(bytes32,bytes32,address,uint8)", +"2bc43fd9": "claim(address,uint256,uint256)", +"2bc46f27": "getQuestionIndex(uint256)", +"2bc4aa1a": "showInvestEther(uint256)", +"2bc53254": "priceFci()", +"2bc542a4": "votePublic(address,bool)", +"2bc57d73": "_doTransferFrom(address,address,uint256,bytes,address,bool)", +"2bc588ee": "release(uint256[],uint256[])", +"2bc5ca7a": "fullCycleSellBonds(uint256)", +"2bc5f9cb": "updateRateInWei()", +"2bc6597c": "depositsTillNow()", +"2bc67bde": "MIN_TASK_VALUE()", +"2bc80f3a": "T()", +"2bc85d5d": "updateTokenPriceProvider(address)", +"2bc86dc0": "AddBankerRound(uint8)", +"2bc89ff6": "REV()", +"2bc8ba53": "solicitaPagamento(uint256)", +"2bcb849c": "updateFeeProvider(address)", +"2bcbdf7f": "s29(bytes1)", +"2bcbe1b5": "getCelebrity(uint256)", +"2bcc79a7": "MockDeed(address)", +"2bccf04e": "createSale1()", +"2bce9e7b": "updateToken(address,uint256)", +"2bcef221": "signOne()", +"2bcf300e": "LC(uint256,string,string)", +"2bcf5760": "addToken(address,address,uint256,uint256,uint256,uint256)", +"2bcf892c": "div32(uint32,uint32)", +"2bcfcd7b": "getBonusAmount()", +"2bcfe0a6": "FitToken()", +"2bd00610": "numberOfCyclePlayers()", +"2bd0bb05": "totalSpentPerDay(uint256)", +"2bd0ce0f": "cancelBuyTokenOrder(uint64)", +"2bd152f0": "_getCollectibleDetails(uint256)", +"2bd15c25": "_doCancel(uint256)", +"2bd185e5": "appendTokenHolders(address)", +"2bd21738": "CAIDCrowdsale(address,address)", +"2bd2523e": "cooAddReviewer(address)", +"2bd2a965": "openNextSale(uint256,bytes24,uint256,bytes24,uint256)", +"2bd30ca3": "costContract()", +"2bd4aa40": "total_amount(string,uint256,uint256)", +"2bd543c7": "calcTimedQuota(uint256,uint256,uint256,uint256)", +"2bd55918": "confirm_token_deposit()", +"2bd57604": "claimPlotMultiple(uint256[],uint256)", +"2bd579fc": "ico(uint256,uint256,uint256,uint256,uint256[],uint256[])", +"2bd5a48d": "finishMintingToken(uint256)", +"2bd5e353": "phase3Duration()", +"2bd71875": "hasMissedCheckpointSubmission()", +"2bd75c3c": "sendMarketingAndRNR()", +"2bd7cd17": "killToken()", +"2bd7e5fc": "getSGNAuthorizationManager()", +"2bd928e4": "commonDeposit(address,uint256)", +"2bd9530a": "editGas(uint256,uint256)", +"2bd97c6d": "getDawexSignature(string)", +"2bda04c5": "autoFreeze()", +"2bda1a55": "frozenReserveTeamRecipient()", +"2bda2a49": "BHIMToken()", +"2bda4eee": "getBridgeValidatorsInterfacesVersion()", +"2bdad637": "tokensSupply()", +"2bdb0d92": "getShareToken()", +"2bdb33c3": "getNumberOfDisputedDealsProPatient()", +"2bdb7097": "setRate(address,uint256)", +"2bdbc0ce": "ContractTokensReclaimed(uint256)", +"2bdc05c5": "assertEq26(bytes26,bytes26,bytes32)", +"2bdcd90d": "claimChip(uint256,string)", +"2bdd2290": "setBlockNum(uint256)", +"2bdd530b": "holderReferalTokens()", +"2bdd5958": "Purchased(address,uint256,uint256,uint256)", +"2bddb9b5": "canTransferIfLocked(address)", +"2bddc31c": "coauthor()", +"2bde41e1": "submitRing(address[3][],address,uint256[7][],uint256,uint8[1][],uint8,bool[],uint8[],bytes32[],bytes32[],uint256,uint16)", +"2bde8e96": "getGPShashRandomValue()", +"2bdf66d5": "SmartToken(string,string,uint8)", +"2bdfbd39": "finaliseCrowdsale()", +"2be09561": "startMint()", +"2be10384": "_removeKey(address)", +"2be29d71": "addressPartnerships()", +"2be2ad3c": "logUniverseForkedCalled()", +"2be2d95e": "amountOfInvestments()", +"2be2f085": "getCostForRace(uint8)", +"2be32dbb": "categoryCount()", +"2be3d1c9": "_getDroneDefaultAbility(uint256)", +"2be3d2df": "CreamCoin()", +"2be4a903": "removeUsers(address[])", +"2be4f3f5": "boardCost()", +"2be4fd9c": "getRemainManus()", +"2be51660": "calcTime()", +"2be521b2": "increaseBalance(address,address,uint256)", +"2be52293": "setExchangeOracle(address)", +"2be596ee": "unpauseInternal()", +"2be5e93a": "TOTAL_SUPPLY_UPPER_BOUND()", +"2be64f51": "RegisteredCampaign(address,uint256,address)", +"2be65e2a": "getFree()", +"2be65e45": "setMarketingRates(uint256,uint256,uint256)", +"2be6d43c": "ARKTagger_1_00()", +"2be6ec1f": "NULL_ENCRYPTION_ALGORITHM_ID()", +"2be79833": "nonFungibleRegistry()", +"2be86e01": "jcrUsdRate()", +"2be8c2a5": "transferTokensTo(address,uint256)", +"2be8f373": "changeWLMWallet(address)", +"2be90846": "enableBonus()", +"2be98d38": "HourglassV2()", +"2be9da97": "getBestAngel()", +"2beaead0": "lastDivideRewardTime()", +"2beaf416": "ShareXERC20()", +"2bec76fd": "maxBetCoinDice()", +"2becb6f7": "STARTING_SPERM()", +"2bed55b0": "buildDSEasyMultisig(uint256,uint256,uint256)", +"2bed69e0": "founderPercent()", +"2beea5c5": "testhash(uint256,uint256)", +"2beeaca4": "whitelist(address,string)", +"2bef4595": "authorize(address,address)", +"2bf04304": "whitelistAddresses(address[])", +"2bf0aeda": "DigiToken()", +"2bf1aa1d": "EthHodler(string,uint8,string)", +"2bf1f9da": "restart(bytes32,bytes)", +"2bf29ddb": "EventRedeemRisk(address,uint128,uint256,uint256)", +"2bf34551": "setRate340()", +"2bf34e60": "getUuid(uint256)", +"2bf37c42": "addFunds(uint256,address)", +"2bf435f9": "myMethod(string)", +"2bf4760b": "getEthPerfit(address)", +"2bf4d812": "AumentaToken(uint256,address)", +"2bf4e53d": "getCurrentShareholders()", +"2bf59135": "addLootbox(address,uint256)", +"2bf5a2ea": "mintForFounders()", +"2bf6e0a5": "setContract(address,address)", +"2bf7299b": "setMaxParticipants(uint256)", +"2bf79c94": "getTokenByOwner(address)", +"2bf7d279": "shouldRevertWithReturn(bool)", +"2bf7f6ba": "privateSell1LockEndTime()", +"2bf81dd3": "NPTToken()", +"2bf82843": "pay(address,uint128,string,uint32)", +"2bf885f0": "addNote(bytes32,bytes20,string)", +"2bf8faba": "AimiToken(address,uint256)", +"2bf9ab0b": "getPresellUpToTime()", +"2bfacd62": "calculateLockedBalance(address)", +"2bfaf3da": "Oracle(bytes32)", +"2bfc33ee": "KDI()", +"2bfc4c69": "getStringValue()", +"2bfd2a13": "calculate_dividend(uint256,uint256)", +"2bfd2e06": "buyBasicUnit(uint256,uint256)", +"2bfd91d4": "getMessageSigner(bytes32,uint8,bytes32,bytes32)", +"2bfda313": "getFile(uint256)", +"2bfe243f": "minStartPriceForCommishAuctions(uint128[])", +"2bfea0e4": "unpauseTransfer()", +"2bfefd5c": "calcMultiStage()", +"2bff4b66": "reapFarm(address,address)", +"2bff5630": "coachTakeOff(uint256)", +"2bff5fc4": "Incomplete()", +"2bffc7ed": "add(string,address)", +"2c011e7b": "winning_month()", +"2c01bb1c": "LogNewOwner(address)", +"2c01d52b": "_createRegion(string,address,uint256)", +"2c027eb9": "getDeployArrayLength(uint256)", +"2c02d622": "precalculate()", +"2c035157": "calculate_minimum_contribution()", +"2c044779": "getPublic()", +"2c04bf0c": "transferIXT(address,address,string)", +"2c052031": "getInsertPointForNumTokens(address,uint256,uint256)", +"2c0657c2": "additionalBonusAmounts(uint256)", +"2c06862b": "setCanBuy(bool)", +"2c07398d": "registerObserver(address)", +"2c0784ce": "send_DividendToAddress(address,uint256)", +"2c089048": "tokenCreationInit()", +"2c08ab0c": "ENJCrowdfund(uint256,address)", +"2c08eb0b": "changeTokensPerEther(uint256)", +"2c0994c1": "getMicroWalletAddress(uint256)", +"2c09bef7": "priceSetter()", +"2c0a036b": "resetICO()", +"2c0a33ef": "BethereumToken()", +"2c0a3f89": "castVote(uint256,uint256)", +"2c0a5c08": "BuyIn()", +"2c0a7e33": "pendingEthWithdrawal()", +"2c0aadc1": "nextGameInitialMinBetSize()", +"2c0b9685": "distributeeBTG(address[])", +"2c0bec2f": "sendCurrentPayment()", +"2c0c6488": "AirTrafficController(string,address[],address,address)", +"2c0c8563": "SetCoin(address,address)", +"2c0d0dbe": "AddProduct(uint256)", +"2c0d4e70": "RYNOTE()", +"2c0e0054": "lockInGuess(uint8)", +"2c0e3850": "storeInContract(address,address)", +"2c0f13a7": "icoStartTimestampStage3()", +"2c0f7b6f": "numCampaigns()", +"2c0fc8cb": "registerHandle(bytes32)", +"2c10e90c": "update(address[],uint256[])", +"2c1169ac": "ELOT()", +"2c12cc79": "HuumanStandardToken(uint256,string,uint8,string)", +"2c1352cf": "contacts(address)", +"2c135b93": "marketCap()", +"2c138236": "reservedTokensWallet()", +"2c142511": "_offlineHash(bytes32,bytes32,bytes32)", +"2c145eef": "DutchAuction(address,address,address,address,uint256,uint256,uint32)", +"2c154345": "getParticipantStake()", +"2c16c6ca": "addPrivilegeAddress(address)", +"2c16cd8a": "record(uint256)", +"2c174073": "PeriodSale(uint256,uint256)", +"2c181929": "getChainWork()", +"2c183fad": "mintTokenWithUnit(address,uint256)", +"2c197985": "VirtualExchange(address,address)", +"2c199889": "request(string)", +"2c19d480": "emitAccessGiven(address,bytes32)", +"2c19fbbb": "getUserTX(address,uint256)", +"2c1b17e4": "BonBonToken(address)", +"2c1b38ee": "isValidTokenId(uint256)", +"2c1bcb4f": "ContractLocked(uint256,string)", +"2c1cf6f6": "updateTradeStatus(bool)", +"2c1cf78b": "ETHinvested()", +"2c1d68d4": "countStakeHolders()", +"2c1e064b": "_translateWSIC(uint256)", +"2c1e6e48": "getADminFromDutchProxy(address)", +"2c1e816d": "setAdminAddress(address)", +"2c1ea461": "nextController()", +"2c1eed5f": "isPlayer(address,address)", +"2c1f1f8f": "getFreeBalances()", +"2c1fecfe": "isRefundable()", +"2c1ff9f8": "mInviteAddr()", +"2c203edd": "getOrderDetails(uint256,uint256)", +"2c2146aa": "verify(address,address)", +"2c215998": "updateStatus(string)", +"2c21ec94": "ethUpdates(uint256)", +"2c2206e4": "setAuditReportHash(uint256,string)", +"2c22af02": "cidTokenSupply()", +"2c22f2e2": "burnSplitPercent()", +"2c232609": "dislikeCelebrity(uint256[],uint256[],uint256)", +"2c237912": "processSellRequestFiat(uint256,uint256)", +"2c23f91a": "ignoreTokenFallback(address,bool)", +"2c244618": "calculateVestedOptions(uint256,uint256,uint256)", +"2c24909c": "getVotedTokensPerc()", +"2c24ecc7": "BecToken()", +"2c2622db": "LOCK_SLOTS()", +"2c2689b5": "getModuleAddress(string,string)", +"2c270617": "TempleDonationTrackingNote()", +"2c270c7e": "tokensFor1EthP2()", +"2c276699": "CheckOut(uint256)", +"2c27e581": "publicEndTime()", +"2c28aa1b": "RATE_FOR_WEEK3()", +"2c28f579": "goLive()", +"2c296656": "changeRequiredDevSignatures(uint256)", +"2c297478": "prolongH(uint256)", +"2c29eedd": "startPrivateSale(address,uint256,uint256)", +"2c2aa66c": "PokeCentral()", +"2c2aecf5": "isProcessNeeds()", +"2c2b4358": "setPercentOfPool(uint256[])", +"2c2bc50b": "LOWIQ()", +"2c2ccdfb": "kittyCoreAddress()", +"2c2da3cf": "expPercentage()", +"2c2de40a": "setMaximumSellableTokens(uint256)", +"2c2e3abe": "allocateFoundersTokens()", +"2c2fdc35": "getBalanceFromRound(address)", +"2c305abf": "updatePlayedNum(address,address,uint256)", +"2c308714": "returnBetAndOffer(uint64)", +"2c321ea1": "abToken()", +"2c327538": "ProofOfDiligenceToken()", +"2c329e99": "Last_block_number_and_bloctime_used()", +"2c344d14": "tokenRewardPreDGZ()", +"2c349627": "pauseToken()", +"2c34ce05": "increasedPrice()", +"2c34e6b9": "addDepositQuest(address)", +"2c354067": "executionBlockOf(uint256)", +"2c3597a1": "testToUint64()", +"2c3599a5": "VINToken()", +"2c3788b1": "registerUserIfNeeded(uint256)", +"2c37a512": "bountyLockEndTime()", +"2c39d855": "confirmAndForward(address,uint256,bytes,bytes32,uint256,uint8,bytes32,bytes32)", +"2c39da94": "batchSend(address,uint160,uint256[])", +"2c3a15a0": "EidosToken(address,address)", +"2c3a1d5d": "Nerotoken()", +"2c3af973": "GStarToken()", +"2c3ba9e1": "addManyRegistered(address[])", +"2c3c42b2": "WLM()", +"2c3ca924": "handleProductionIncrease(address,uint256)", +"2c3ccb98": "levelUpByPenguinId(uint256)", +"2c3d3453": "csale()", +"2c3d38f0": "mintTokens(int256,uint256,address,address)", +"2c3dcdcf": "issueDuringICO(address,uint256)", +"2c3dfca7": "getPhException(bytes32)", +"2c3ee88c": "getRedeemAmount(uint256)", +"2c3f1304": "getSlotLength()", +"2c3f6a4f": "getMineCooldown(uint256)", +"2c3f9b80": "getActiveFlagRate(uint16)", +"2c408059": "getFallbackAddress()", +"2c409871": "MobileTokenAlert()", +"2c416754": "doBurn(address,address,uint256,bytes,bytes)", +"2c420201": "getDataCounterForSubject(uint256)", +"2c421074": "exploreETHFee()", +"2c425687": "EthTeamContract(string,string,address,uint64,uint64,address)", +"2c42f2e8": "toSendFromStorage()", +"2c4449ab": "_rankByNumber(uint256)", +"2c445273": "_payEthereumAndDistribute(uint256)", +"2c4464d4": "Dryad()", +"2c4482c5": "_assignCountry(uint256)", +"2c44a261": "updatePrivateSaleCloseTime(uint256)", +"2c45f068": "transfer(uint128,bytes16,uint32)", +"2c4617d7": "getMethodState(string)", +"2c46b205": "query()", +"2c46d8d5": "EndRound(uint256)", +"2c47413f": "ERC20PGEToken()", +"2c4806d8": "ordersFor()", +"2c4879d1": "AFWBurn(uint256)", +"2c4881ff": "withdrawMoneyByAdmin(uint256)", +"2c48e7db": "confirmTransfer(uint256)", +"2c4a84f7": "StaxToken()", +"2c4ab666": "enact_withdrawal_greater_equal(address,uint256,uint256)", +"2c4ac770": "sendMessage(address,bytes,bytes32)", +"2c4aecc1": "sampleBoolRetFalse()", +"2c4b2334": "setTeamWalletAddress(address)", +"2c4b27ae": "burnAirDrop(address[],address)", +"2c4bca2c": "crowdsaleDeadline()", +"2c4bf8bc": "increasePresetTransfer(address,uint256)", +"2c4c2719": "MAXIMUM_CAP()", +"2c4cb4be": "removeRegistryFromNameIndex(address)", +"2c4d25f5": "DeathFactor_ii()", +"2c4d4d18": "changeMinter(address)", +"2c4e55c5": "killedContract()", +"2c4e591b": "totalGames()", +"2c4e722e": "rate()", +"2c4e8885": "unLinkFromMasterWalletInternal(address,address)", +"2c4e9d2b": "AuctionWon(uint64,uint64,address,uint256)", +"2c4ee4d4": "ObirumTalk()", +"2c4fa8b2": "assignAnotherOwner(address)", +"2c5104f5": "MTC()", +"2c511788": "addToWhitelistAllocation(bool,address,uint8)", +"2c512d6e": "getTokens(address,uint256)", +"2c526196": "_mint(uint256)", +"2c52d930": "feeForArtWorkChangeRequest()", +"2c532a71": "ChangeCrowdSaleDate(uint8,uint256)", +"2c5337dd": "winnerAnnounced(address,uint256)", +"2c53f31b": "bonusWindow2EndTime()", +"2c54357f": "lifeReserveAllocation()", +"2c54de4f": "transferToken(address,address,address,uint256)", +"2c54e6d9": "getCanvasCount()", +"2c560ec0": "queryInfo()", +"2c56462f": "addAllowedContract(address)", +"2c566ae5": "length(address)", +"2c572eb5": "_isFuture(uint256)", +"2c574a94": "next_tower_index()", +"2c577347": "changeMakeFee(uint256)", +"2c57fdf4": "create(uint8,uint8,uint64,uint64)", +"2c580a35": "revokeAndReclaim()", +"2c58139c": "teamRelease(address)", +"2c5a736f": "distributeInitialFunds()", +"2c5af544": "isAllocatedLending()", +"2c5b3b5b": "UniverseChain()", +"2c5c8f7c": "getDailyProfitSumForAllUsers()", +"2c5c9dc5": "BeldenCoin(address)", +"2c5cb666": "setCollectFeeWindowReportingFees(uint256)", +"2c5d0546": "KuaiToken(address,uint256)", +"2c5d690d": "getBlocksUntilReset(address)", +"2c5e52d1": "CandyDropIsOpen()", +"2c5f5234": "collateralisationRatio()", +"2c5fac89": "isIcoSucceeded()", +"2c6009a6": "viewPeerToPeerMarketplaceTransactionFee()", +"2c60a055": "MapTest()", +"2c6105f9": "setElectedMediator()", +"2c6127c7": "availableBets()", +"2c6287b2": "yunosupporttuples(bytes4,int32,bool)", +"2c629299": "allOperations()", +"2c62fa10": "assetsOf(address)", +"2c62ff2d": "deleteBool(bytes32)", +"2c638806": "totalPaymentsHeld()", +"2c63b326": "memoryArray(uint256)", +"2c63e4b9": "removeExpiredAssignments(address,uint256,uint256)", +"2c642950": "createBallot(string,bytes32[],uint256)", +"2c642f51": "sendDividends(address,uint256)", +"2c64b05f": "LockEDUTeam()", +"2c664701": "profit_per_token()", +"2c66a604": "Blizzard()", +"2c678c64": "migrated()", +"2c67a8e5": "getItemsByOwner(address)", +"2c684eb6": "afterVoteNoCashBackTime()", +"2c684f30": "postListed(address,string,string,uint256,string,string,string)", +"2c68fcd4": "determineBonus(uint256,uint256,address)", +"2c69e64e": "refundBet(address)", +"2c69ed89": "BerryLake()", +"2c6a0140": "cutoffBlock()", +"2c6b2c92": "checkProfitLossSinceInvestorChange()", +"2c6b77e1": "admin_isPayable(bool)", +"2c6c1108": "autoTearDownAndDestruct()", +"2c6e38d0": "modifyNextPremiumSale(uint8,uint256)", +"2c6e4aea": "withdrawFundBeneficiary()", +"2c6e7598": "toAsciiString(address)", +"2c6e879f": "settingsSwitchState()", +"2c6ed612": "stringToBytes5(string)", +"2c6f11b8": "listApproval()", +"2c6f39fd": "setLicenseSalesContractAddress(address)", +"2c6fa230": "getServiceInformation(address,uint32)", +"2c6fa84c": "Pausable()", +"2c7077c0": "enableFeatures(uint256,bool)", +"2c70b7ca": "emitEntityResolution(address,address)", +"2c70d64e": "unVote()", +"2c710cc8": "closeInvest(uint256)", +"2c71d524": "IcoBonus(uint256)", +"2c71e60a": "grants(address,uint256)", +"2c71ecb6": "_startBlock()", +"2c72fdfc": "getProposals(uint256)", +"2c735ef8": "tradeStartTime()", +"2c740844": "setStakingRegistry(address)", +"2c757eed": "startPhase3(uint256)", +"2c7622b0": "txorigin()", +"2c767201": "admin_account()", +"2c76d586": "zint_bytes32ToString(bytes32)", +"2c78ba6f": "ArbTokFromHGame(uint256)", +"2c78bfdc": "burnCrown(uint256)", +"2c791826": "moiTestToken()", +"2c792276": "endRound(uint8)", +"2c79aea3": "minedTotalSupply()", +"2c7a64c7": "isOperationActive(bytes32)", +"2c7a8559": "setMaxGift(uint256)", +"2c7b0085": "PocketChain()", +"2c7ba564": "setTransferProxy(uint32,address)", +"2c7c4549": "PurchasableToken(uint256)", +"2c7cc1f0": "emergencyEthDrain(uint256)", +"2c7cce9e": "auctionMinPriceIncrease()", +"2c7e06a4": "rateEarlyStage1()", +"2c7ec2c2": "_fulfillPayment(address,address,uint256,uint256,address)", +"2c7ee894": "B2Lab_TokenPlus(address)", +"2c7ee946": "setting(uint256,uint256)", +"2c8082a6": "PiBetaSupply()", +"2c828e46": "TransferToken(address,uint256,uint256)", +"2c837334": "getPlot(uint256,uint256)", +"2c83d77e": "goforit()", +"2c84bfa6": "generate(address,bytes)", +"2c84d560": "OwnerWithdraw()", +"2c84e31f": "addAccounts(address,address,address[])", +"2c85448d": "isInt256ValidIn64(int256)", +"2c854d13": "AUTH_REMOVEOWNER()", +"2c8595bc": "updatePartnerMap(address,uint256,uint256,uint256)", +"2c85f8e0": "oraclize_query(string,string,string,uint256)", +"2c86033e": "checkAddressTeamOne(address)", +"2c8668d4": "withdrawNoLimit(address,uint256,uint256)", +"2c868287": "withdrawToTeamStep3(uint256)", +"2c86d091": "buyTokens(address,bytes32)", +"2c86d98e": "leverage()", +"2c86e3b4": "setContributor(string)", +"2c873761": "getMyDragons()", +"2c87aecc": "orders_sell_list(uint256)", +"2c87ba12": "getTitulaire_Compte_2()", +"2c882333": "vota_un_candidato(uint256)", +"2c887399": "confirm(bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"2c88837e": "VotingRightsWithdrawn(address,uint256)", +"2c88fad9": "addWhitelistedAddr(address)", +"2c890550": "toPower2(uint256)", +"2c899ab6": "CecCoin()", +"2c89a84c": "ChronosAccessControl()", +"2c8ab429": "registerMeDao(address)", +"2c8ace6c": "TokenERC20(uint32,string,uint8,string,address)", +"2c8af2d8": "s_rand(address,uint256)", +"2c8b2ad7": "calculatePaymentGoal(uint256,uint256,uint256)", +"2c8b8b94": "addAccreditedInvestor(address,uint64,uint64,bool,bool,uint256,uint256)", +"2c8bcd1a": "createBid(uint256,address,address,bytes32,uint256,uint256)", +"2c8be60e": "ONO()", +"2c8c047a": "ownerOperationsAt(address,uint256)", +"2c8c28a7": "loadNewTickets(bytes32[])", +"2c8c892b": "allocateSalesTokens(address,uint256)", +"2c8ca0ea": "isFinish()", +"2c8cbe40": "setFreeze()", +"2c8df693": "ServiceProviderEnabled(address,bytes)", +"2c8e3ebb": "secondRefundRoundRateDenominator()", +"2c8ed4c4": "_toToken(uint256,uint256,uint256)", +"2c8ee2ec": "checkWin(uint256,address)", +"2c8f1b71": "socialIdentityOfClaimerAddress(uint256,address)", +"2c906ba2": "finishLottery()", +"2c90ccba": "getNextAuditByPrice(uint256,uint256)", +"2c90d20d": "getWarriorsFromIndex(uint32,uint32)", +"2c91324c": "usersAddress(uint256)", +"2c915aa3": "assetAddresses()", +"2c92a2bc": "minWithdrawalThreshold()", +"2c92c071": "_addPayTable(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"2c92e5b7": "BlockspacesToken()", +"2c92fb99": "getFilter(uint256)", +"2c948034": "longTermbudgetAllocAddress()", +"2c94a235": "profitTransferTimeSpan()", +"2c95ad52": "addItem(bytes32)", +"2c960569": "updatePriceOraclize()", +"2c9619ce": "FCOIN1036Token(uint256,string,string,uint256)", +"2c96bee2": "MultiSigTokenWallet(address[],uint256)", +"2c9868df": "approveAndCall(address,uint32,bytes)", +"2c98bf4a": "WelcomeMsg(string)", +"2c995e1b": "AllowTransferGlobal()", +"2c9a0a95": "getPricingStartsAt()", +"2c9a86d2": "payCarnita(uint256,uint256)", +"2c9afb18": "addrFabricContract()", +"2c9b1625": "FUTMOTO()", +"2c9c0fb5": "modifyTransferableHash(address,bool)", +"2c9cdfd9": "Provider(string,string)", +"2c9d6989": "withdrawDklBalance()", +"2c9d9e9e": "getCommitByContent(string)", +"2c9e1885": "setBZxVault(address)", +"2c9ea1b7": "nextSkinId()", +"2c9f092f": "refundToOwner(address)", +"2c9f4f62": "isPurchased(uint256)", +"2c9f6792": "emaPeriods()", +"2c9f9fed": "tokenInit()", +"2c9fcd8c": "Donator()", +"2ca0228a": "initialTokenPrice()", +"2ca0c835": "referrerBonusCalculate(uint256)", +"2ca0d7ca": "batchTransfer1(address[],uint256)", +"2ca126f8": "endtime()", +"2ca15122": "sign()", +"2ca16a37": "publish(bytes32,string,uint256)", +"2ca1aa16": "currentSaleLimitPerAddress()", +"2ca1b7da": "CROWDSALE_ETH_WALLET()", +"2ca23c4f": "KapelaToken()", +"2ca2537e": "changeNotSoldTokens(address)", +"2ca26866": "Tccchain(uint256,string,string)", +"2ca33e70": "YoutubersCoin()", +"2ca36da0": "left39(uint256)", +"2ca38363": "priceEth()", +"2ca59abf": "changeCollateralTaker(address)", +"2ca5a623": "change_flag(uint256)", +"2ca5e3f5": "replyAlice(uint256)", +"2ca5e626": "getOrder(uint32[8])", +"2ca60d85": "versionIdent()", +"2ca6d2c0": "getAccountSize(address)", +"2ca76003": "checkWinner(uint32)", +"2ca781f1": "firstPay()", +"2ca8c6d3": "numberOfBets()", +"2ca8cbd0": "minePhx()", +"2ca9cbe8": "distributeToken(address,uint256)", +"2caafb54": "totalFreezeTokens()", +"2cab00de": "buildPrice()", +"2cab6c6a": "editTile(uint16,uint16,uint8,uint16,address)", +"2cacb97c": "GetProfitEarnedByPartner(address)", +"2cacd13a": "takeOrder(uint256,uint256,uint256)", +"2cad9404": "salvageFinished()", +"2cae0c76": "crowdSaleIsOver()", +"2cae249a": "rvDepositAddress()", +"2cae66d8": "encodeRequest(uint128,address,address,address,uint256,uint64,address,bytes)", +"2cae8ae4": "getPayload()", +"2cae9add": "rawTokenSupply()", +"2cae9ca1": "spendWithGas(address,uint256,uint256)", +"2caeb8fc": "checkMyUndistributedBalance(uint256)", +"2caed832": "partOf(uint256,uint256)", +"2caef765": "setBoardController(address)", +"2caf1f15": "set_tickerQuery(string)", +"2cb0d48a": "setEditable(bool)", +"2cb0de18": "setFeeAccountToken(address)", +"2cb15864": "initialBlock()", +"2cb2f52e": "updateTokenMetadata(uint256,string)", +"2cb3ce8c": "TIER3_RATE()", +"2cb44156": "minterGivesCWC(address,uint256)", +"2cb4f63e": "price_target()", +"2cb51970": "_batch4_icosaleStartTimestamp()", +"2cb58378": "getStateRoot(bytes32)", +"2cb676be": "NVBSupply()", +"2cb6a435": "oneTimePrice()", +"2cb71af3": "startBuyback(uint256,uint256)", +"2cb8460c": "PlutusDex()", +"2cb856f3": "dgxContract()", +"2cb86824": "preIcoStartAt()", +"2cb8f2e9": "executeBet(uint256,bool)", +"2cba85c6": "popcontract()", +"2cbb827f": "withdrawToSelf(uint8)", +"2cbbbd2d": "SHIPToken(address,address)", +"2cbbd738": "getPoll(bytes32)", +"2cbcaba9": "SimpleICO()", +"2cbdb5fb": "addChunk3ToWhiteList()", +"2cbe679b": "Travelerscash()", +"2cbef0f3": "getAffiliateCommission()", +"2cbf1b12": "CirclePay()", +"2cbf1f0d": "left62(uint256)", +"2cbf4e27": "removeParticipant(address,address)", +"2cbf9cf6": "MintableToken()", +"2cbfd034": "intCallWithArray(uint8[4])", +"2cc0a28c": "_matchedTags(bytes32[],bytes32[])", +"2cc0b254": "init(address,bytes32)", +"2cc138be": "rewardStartTime()", +"2cc1b92a": "addr_communityBuildingToken()", +"2cc205d9": "totalStakedFor(address,address)", +"2cc27341": "setMinMargin(uint256)", +"2cc361a6": "removeTank(address)", +"2cc53743": "GxEvents(address)", +"2cc5cfd6": "withdrawDevelopersFund(address)", +"2cc5d662": "arawWallet()", +"2cc63332": "returnCoupon(address[2],uint256[8],uint8,bytes32[2])", +"2cc689f9": "markRewardsSet()", +"2cc695de": "addCertification(address)", +"2cc6cf4a": "BABI()", +"2cc6d768": "RecordingRefundVault(address)", +"2cc75331": "getTeamsOnLeaderboard()", +"2cc763e7": "milliPercent()", +"2cc7c475": "TokenSaleCreation(uint256,address)", +"2cc7fc36": "ICOPurchased(uint256)", +"2cc82225": "setPriceCreatingChannel(uint256)", +"2cc82655": "setPhase(uint256)", +"2cc88401": "wirePurchase(address,uint256)", +"2cc8b455": "recoverAddressFromWithdrawMessage(bytes32,address,uint256,bytes)", +"2cc92b2b": "isICOOpened()", +"2cc9636c": "buyerCancel(bytes16,address,address,uint256,uint16)", +"2cc9c151": "verifyOwnership(address)", +"2cca179d": "addPoll(uint256,uint256,bytes,uint8)", +"2cca23f1": "Timeless()", +"2cca5ce3": "setEngine(address,bool)", +"2cca664b": "totalPlayerWinnings()", +"2cca75d3": "StupidCoin()", +"2ccaa3e9": "getPropertyOwner(uint16)", +"2ccb1b30": "transferTo(address,uint256)", +"2ccbd053": "set(uint256,string,string,string,string,string)", +"2ccc452d": "pushByte(bytes32)", +"2ccc9057": "RATE_CROWDSALE_S3()", +"2ccce58a": "cancelGame(string)", +"2ccd0991": "extraData1FromHash(string,string,string,string,string)", +"2ccd9623": "referralManager()", +"2ccdbc25": "prometheusVouchersMinted()", +"2ccde4bd": "withdrawAllUncommittedTokens()", +"2cce0c60": "eth_to_usd()", +"2cce4abe": "_finishNoCallback()", +"2cce753a": "batchAddAddresses(address[])", +"2cce81aa": "getBlockHash(int256)", +"2ccf16f9": "CashPoints()", +"2ccf27bb": "PatrickHuynhToken()", +"2ccf8d40": "HVAL()", +"2ccfc58c": "FeesReceived(address,uint256)", +"2cd046eb": "countMembers()", +"2cd05122": "ZENOSEarlyPurchase()", +"2cd05248": "lastBlock_f3Hash_uint256()", +"2cd11849": "depositAdvisor(address,uint256)", +"2cd19faf": "_getAdminInterface(uint256)", +"2cd1bab2": "partnerID()", +"2cd2338f": "thawAddress(address)", +"2cd23d7a": "createCommit(bytes32,bool,bytes32,string,uint256)", +"2cd33a54": "eth_amount()", +"2cd3fd70": "BurnTokens(uint256)", +"2cd44064": "UNHCToken(uint256,string,string)", +"2cd53cfe": "addEducation(string)", +"2cd6305f": "unsellpause()", +"2cd64f65": "TokenMintGeneral()", +"2cd78450": "activateExportFeeChargeRecord(address)", +"2cd8c9ae": "fillPhase(uint8,uint256,uint256)", +"2cd9e233": "Quarters(address,uint256)", +"2cda1bf7": "titles(uint256)", +"2cdad41c": "isInspector(address)", +"2cdb0213": "dailyHourLimit()", +"2cdb8eec": "updateTokenValue(address,uint256)", +"2cdba70e": "_getMaxPooling()", +"2cdc1c74": "lister()", +"2cdcb1fc": "wrongManagerOrUnsetInClaimer()", +"2cddc488": "transferTaxes(address,bool)", +"2cde15d1": "weiTotalRaised()", +"2cdedd5c": "StateChannel(address,address,address,address,uint256,bytes)", +"2cdf2bfd": "sellPatent(uint16,uint256)", +"2cdf37d4": "_admin(uint256,uint256)", +"2cdf55af": "RC()", +"2ce04b20": "tokenLockoutPeriod()", +"2ce0a6ee": "setBalanceLimit(uint256)", +"2ce0b4f6": "ICO_FINISH()", +"2ce0ca6b": "setChainFees(uint256[10])", +"2ce14d90": "_willFallback()", +"2ce1ec67": "HelloCoin(uint256,string,uint8,string)", +"2ce20579": "mutagen2Face(uint256,uint256)", +"2ce21999": "fees_(uint256)", +"2ce2907b": "CryptoCourt(uint256,string,string)", +"2ce2d7c0": "completeRegionAuction(uint16)", +"2ce37b10": "getListCount()", +"2ce3d440": "updateAccount(address)", +"2ce47de4": "payWinners(uint32,uint32,uint256,bool,uint32,uint32)", +"2ce52d9b": "shareCycleSessionSize()", +"2ce5c284": "processed()", +"2ce5fb75": "getHorseShoe(uint256)", +"2ce68269": "registerByList(address[],bool)", +"2ce78fc0": "getDemande(uint256)", +"2ce7900b": "getTokenTimelockCount(address)", +"2ce82189": "balanceTransferred(address,uint256,bytes)", +"2ce90c11": "killTokens()", +"2ce91d08": "TokensWorld()", +"2ce92dfd": "updateMinGasForDrawing(uint32)", +"2ce946a5": "teame()", +"2cea0654": "setStateClosedIfClosed()", +"2cea53bd": "returnChametz()", +"2cea70e4": "isAds()", +"2cea905a": "IAMEPrivateSale()", +"2cea9442": "totalUsdRaised()", +"2cead42c": "_createIntention(address)", +"2cead658": "Companion()", +"2ceae552": "AVAILABLE_BONUS1_SUPPLY()", +"2ceb1bb3": "addPreEntranceMembers(address[],uint256,uint256)", +"2ced7cef": "log(string,string,string)", +"2cedc5ec": "enableTokenAiTransfers()", +"2ceee12e": "seeBidders()", +"2cef4dac": "updateMasterCopy()", +"2cefc429": "sellCard(uint8,uint256)", +"2cefeb07": "setname(string)", +"2cf003c2": "referrer(address)", +"2cf033a0": "setNewTokenAddress(address)", +"2cf0be44": "transferToService(address,uint32,uint256,uint256,uint256)", +"2cf0d6ca": "PLAT()", +"2cf1a5fb": "airdropStatus()", +"2cf2f1d1": "rndReduceThreshold_()", +"2cf32bc9": "PayoutEarnings(address,uint256,uint8)", +"2cf3f1f3": "setTokenPerEther(uint256)", +"2cf42a6c": "cancelHybridization(uint256)", +"2cf45905": "addHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", +"2cf4db51": "amountVote(bool,uint8)", +"2cf4e56f": "withdrawBounty()", +"2cf5346a": "totalSupplyAt(uint256,int256)", +"2cf5702a": "verifyPublic(bytes32,uint256,uint256[],uint256[],bytes32[])", +"2cf5fe89": "maxChildCount()", +"2cf65a06": "logite(string)", +"2cf6b532": "STARL()", +"2cf6e740": "adminSum()", +"2cf75c11": "_generateLog(uint32,uint8,uint32,uint8,uint8,uint8)", +"2cf86006": "calculateDividends(uint256)", +"2cf8a1d6": "CCRToken()", +"2cf91024": "getFlightInfo(uint16,uint16)", +"2cf9185c": "getMyPlayedCount(address)", +"2cf975af": "isPreferredTokensAccount(address)", +"2cf99422": "publish(address)", +"2cfa606d": "tvcEthFund()", +"2cfa74da": "buyKeys(uint256,string)", +"2cfac6ec": "teamSupply()", +"2cfbb031": "claimReward(bytes)", +"2cfbd0b9": "addNewBlock(bytes32,bytes32,bytes32[])", +"2cfc1f4c": "updateGift(uint256,uint256,string,string)", +"2cfc42f5": "blacklistParty(address,address,bool)", +"2cfd10a0": "CrowdsaleMain()", +"2cfd3005": "mint(address,bytes32)", +"2cfd35bb": "employeeMigratesToNewESOP(address)", +"2cfdd7df": "newReward()", +"2cfed9f0": "setSpeaker(address,address)", +"2d0041c5": "setAmbassador(address,bool)", +"2d00b442": "_createBid(bytes32,address,uint256)", +"2d0104a5": "updateFirstDuel1(uint256)", +"2d014833": "e93Contract()", +"2d01564c": "littContentExists(bytes32)", +"2d019a71": "get_asset_info(bytes32)", +"2d021624": "BTBToken()", +"2d02a5b2": "setGoldPrice(uint256)", +"2d0335ab": "getNonce(address)", +"2d03c4eb": "nxcPerBcy()", +"2d040add": "updateRegistrationState(bool,uint256)", +"2d042a7f": "PonziRevolutionBeam()", +"2d045780": "isAllowedToBuyByAddressWithoutVerification(address)", +"2d04d07d": "goTokenCollection()", +"2d04f820": "DEV_WALLET()", +"2d06177a": "addManager(address)", +"2d062140": "SiringClockAuction()", +"2d067d4c": "isBurn()", +"2d06a1fa": "ALFA()", +"2d06fd13": "getTotalDeveloperCut()", +"2d077ad0": "Latch()", +"2d07bf2f": "CryptoHarborExchange()", +"2d087944": "hasBuyNowOffer(uint256)", +"2d08d408": "Send(address[],uint256[])", +"2d09839f": "tokens_push(address)", +"2d0a8809": "testAddVoters()", +"2d0b1451": "DevotteToken()", +"2d0b7d53": "registerVariation(uint256,address)", +"2d0cc13c": "MoonMinerToken(string,string,uint8,uint256)", +"2d0d4827": "startIco1(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d0d9c2a": "getCompletedGamesStatistics()", +"2d0d9e0f": "getUserProductsKeys(bytes32)", +"2d0daca8": "assertEq25(bytes25,bytes25,bytes32)", +"2d0e6636": "tokenToEtherAllowed()", +"2d0f5573": "right35(uint256)", +"2d0ff779": "claimEOSclassic()", +"2d103ed4": "addAllowedHICAddress(address)", +"2d10d4d1": "getCityActiveBuildings(uint256,uint256)", +"2d116186": "deityBalance()", +"2d118bbf": "getUserPaybackPool()", +"2d11fa16": "throwsWhenTransferingPresaleTokensBeforeCliff(address)", +"2d123aa4": "useDefaultRegistry()", +"2d126239": "calcAndGet()", +"2d126d2b": "indCommunityDeposit()", +"2d129442": "mountainHeight(uint256)", +"2d132467": "buyPreIcoTokens()", +"2d133eee": "KYC_THRESHOLD()", +"2d136dd6": "TrillionToken()", +"2d139417": "migrateToNewNewControllerContract()", +"2d13c164": "_computePayMoney(uint256,address)", +"2d144e6b": "totalPlayerSupply()", +"2d1608db": "YouLongToken()", +"2d162c70": "distrust(address,uint256,bytes)", +"2d171243": "getUnitsProduction(address,uint256,uint256)", +"2d17d956": "buildRequest(string)", +"2d19413c": "setJackpotToken(address,uint256,uint256,address,uint256,uint256,uint256)", +"2d1a330b": "marketmorties()", +"2d1a6477": "lengthEqual(address[],uint256,string)", +"2d1a67e1": "Ledger(address,uint256,uint256)", +"2d1b42f5": "encryptCounter(uint256)", +"2d1babed": "setRates(uint256)", +"2d1c56a9": "totalTxVolume()", +"2d1ced82": "priceBox1()", +"2d1d744a": "isPass()", +"2d1d9627": "changeAddress(bytes32,address)", +"2d1d9feb": "removeRRA(address)", +"2d1e0516": "setBal(bytes32,address,uint256)", +"2d1f0021": "NextItemID()", +"2d1f0097": "getData_18()", +"2d1fb389": "authorize(address,bool)", +"2d1fdef6": "extendDeadline(uint256,uint256)", +"2d202d24": "setNextOwner(address)", +"2d20fbf3": "ownedBonus(address)", +"2d215518": "pause(uint256,uint256)", +"2d217d43": "AntasCoin()", +"2d21ca88": "ICOTokenHardCap()", +"2d226a10": "allocateServusTokens()", +"2d22a4e3": "isPrivateInvestmentPhase()", +"2d22b464": "createEgg(string,bytes32)", +"2d241248": "getFeeBurnerAddress()", +"2d24447a": "LBCoinJ()", +"2d247cc6": "coinPriceInWei()", +"2d278518": "EtherReceived(uint256,address,uint256)", +"2d278e9e": "picosPerEther()", +"2d27c8cd": "ALLOC_SALE_GENERAL()", +"2d2800f1": "react()", +"2d287e43": "insert(bytes32)", +"2d2899b6": "getIntArray(bytes32)", +"2d28bb02": "setTokenStart(uint256)", +"2d28d4cf": "transferIfTokenAvailable(uint256,uint256,address)", +"2d28e89d": "MINIMUM_DURATION()", +"2d290d8b": "MAX_CROWD_SALE_TOKENS()", +"2d2925c7": "transferInitialTokens()", +"2d296bf1": "buyToken(uint256)", +"2d29842c": "upgradePhoenixStats(uint256)", +"2d29953f": "withdrawByFoundation(address,uint256)", +"2d29a47b": "execute(uint256,uint256,uint256)", +"2d29b29b": "migrateSome(address[])", +"2d29c72d": "stopUpgrading()", +"2d2bb154": "kycWallet()", +"2d2bcd37": "setRelayContractAddress(address)", +"2d2c44f2": "Vault()", +"2d2c5565": "TREASURY()", +"2d2c9ed8": "softcapReachedCallabck()", +"2d2d23f7": "Cordbank()", +"2d2e3bb2": "deleteFincontract(bytes32)", +"2d2f7e4d": "withdrawBidForStar(uint256)", +"2d2f8f9b": "getAddListSize()", +"2d2fa531": "hank()", +"2d2fe9d4": "stakeWaived_Eth()", +"2d30ae45": "distributeCrowdsaleTokens(address,uint256)", +"2d31908f": "PRICE_7()", +"2d31d9c9": "sales(bytes16)", +"2d31f270": "UNTToken()", +"2d328551": "numberOfHalvings()", +"2d345670": "revokeAdmin(address)", +"2d345799": "balanceOfPretty(address)", +"2d349a1f": "icoLtc()", +"2d34ba79": "setup(address,address)", +"2d354cf8": "_isContract(address,address)", +"2d358710": "HARJToken(address,string,uint8,string)", +"2d35a8a2": "candidatesCount()", +"2d364687": "toLucky()", +"2d36ad42": "cleanUp(address)", +"2d370378": "switchSaleAuctionERC20For(address,address,uint256)", +"2d3727bf": "CloseDiv()", +"2d37329a": "lastBlock_v4Hash_uint256()", +"2d37e6dc": "getCrowdsaleInfo()", +"2d381f84": "ATTR_GOLDENGOOSE()", +"2d38bf7a": "rewardEra()", +"2d3a926a": "computeCut(uint256)", +"2d3b3141": "ERC20Standard(uint256,string,string,bool)", +"2d3b4643": "coresale()", +"2d3b634c": "Crowdsale(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d3b9e59": "isFinished(uint8)", +"2d3c5d28": "DonatedEthPayout(address,uint256)", +"2d3cb6bd": "mulX(uint256,uint256)", +"2d3d165d": "parameterizerFactory()", +"2d3d403a": "challengeContract(address,address,address)", +"2d3e2065": "minBetWei()", +"2d3e474a": "marketing()", +"2d3e579a": "hasRole(address,bytes32,address)", +"2d3e9efe": "mint(int256,bytes32,bytes,uint256[],bytes,bytes)", +"2d3ec656": "setMinimumIcoRate(uint256)", +"2d3ed075": "Certificate(bytes32,string)", +"2d3fb0d5": "getCrowdsaleState()", +"2d3fb721": "secondRoundICODiscount()", +"2d3fcc23": "beingVIP()", +"2d405b43": "Win(address,uint8,uint256,bytes32,bytes32,uint256)", +"2d40957f": "TheWinner()", +"2d4147e3": "bountyToken()", +"2d416b4d": "bindCertificate2Wallet(address,bytes32)", +"2d41777f": "SnapshotUpdated(address,uint256,uint256,string)", +"2d4194c7": "getAuditRequestBlockNumber(uint256)", +"2d41bc9b": "store(uint8[],uint256,uint256,uint256,uint256)", +"2d41c7a4": "Nikone()", +"2d434139": "addCustomerNReqAcc(address,address,address)", +"2d43573d": "landmarks(uint256)", +"2d4364ae": "placeTokens(address,uint256)", +"2d448c49": "setO2(address)", +"2d449b5e": "Etokenchain()", +"2d44c049": "modifyCreator(address,bool)", +"2d459dd6": "transfer(address,uint48,bytes)", +"2d45c78d": "requireAuthorisation()", +"2d46253f": "CommunityWithDraw()", +"2d462dbb": "rollLo()", +"2d467358": "LAPTOPTOKEN()", +"2d46a9ce": "getVestingCreatedAt(address,uint256)", +"2d46b54e": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string,string)", +"2d46f5df": "registerProduct(address)", +"2d475386": "ownerWithdrawUnclaimedCredits()", +"2d47adcb": "BancorNetworkToken()", +"2d47c29e": "otherchainstotalsupply()", +"2d480a80": "thankYou()", +"2d483bec": "setNewRate(uint256)", +"2d48bcec": "pool_drain(address)", +"2d493910": "_computeNextPrice()", +"2d49f5fc": "verifyERC20(address)", +"2d49ffcd": "getLocked()", +"2d4a170a": "calculateBid(uint256)", +"2d4c4aea": "GOTGCOIN()", +"2d4d671f": "startRevealingPhase()", +"2d4e4472": "LandClaimExecuted(address,uint256,bytes)", +"2d4ede93": "deleteNode(address)", +"2d4f40c6": "setBotAddress(address)", +"2d4fd9dd": "rejectDispute(uint256)", +"2d501611": "PERCENT_BONUS()", +"2d50e2d5": "getSupercedesRegistryInterfaceID()", +"2d5132cd": "getOuvidoriaEnteNome(address)", +"2d5134f7": "setApplication(address,address)", +"2d52164b": "stopsell()", +"2d5216a5": "PHASE_CHALLENGE()", +"2d52d1a2": "rewardDistributionEnded()", +"2d54ab45": "initTokenSale(address,address,address,uint256,uint256,uint256)", +"2d54f04d": "changeVotingBlocks(uint256,uint256,uint256,uint256)", +"2d5505b6": "_setAreas(address,uint256)", +"2d550c0b": "optionality()", +"2d55dd31": "_agreeAmendment(address)", +"2d56acce": "setMinAcceptedInPublicSale(uint256,uint256)", +"2d56af6c": "burnCoin()", +"2d56d572": "releaseMany(address[],uint256[])", +"2d571013": "getFeedBackFeeAward(string)", +"2d571cc4": "createToken(uint256)", +"2d578304": "update(address,uint16,bool)", +"2d57b6c8": "getInvestorDeposit(address)", +"2d57ea40": "FundariaTokenBuy(address)", +"2d580ef6": "add(address,bytes32)", +"2d581e71": "add_user(address)", +"2d5858a3": "publicSoftCapReached()", +"2d58c9a2": "gy()", +"2d58fab1": "pauseCWC()", +"2d592a34": "sellKissBTC(uint256)", +"2d5949a0": "setNumMarkets(uint256)", +"2d596330": "bmcPlatform()", +"2d59680d": "pool_name()", +"2d598d7b": "isAccredited(address)", +"2d599750": "updateUrl(bytes32,string)", +"2d59dc12": "displayMessage()", +"2d59ea6c": "oscarGuindzbergAddress()", +"2d5a5d34": "blacklistAccount(address,bool)", +"2d5a858c": "checkCompanyNameAvailability(bytes32)", +"2d5b2e15": "CLIForGas()", +"2d5b778b": "refundingDeadline()", +"2d5b8d99": "paymentsOf()", +"2d5bbf60": "subscriptions(uint256)", +"2d5c3ed1": "KWHToken(address,uint256)", +"2d5cb5d5": "CryptoKitties()", +"2d5cd1d6": "getPrize(address)", +"2d5ea8e3": "numplayers()", +"2d5f1f61": "getSlashAmount(uint256)", +"2d5fd89f": "getClaimData1(uint256)", +"2d60a72c": "DEPOSITS_KEPT()", +"2d614ad2": "Webpuddg()", +"2d620e1e": "deedsOfOwner(address)", +"2d62ce38": "collectAirdrop(bytes32)", +"2d62f428": "coinIssuedSale()", +"2d63e9f4": "Registration(uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint8,string)", +"2d63f728": "mintWithMetadata(address,uint256,string)", +"2d646742": "executeGameProposal(uint256,bytes)", +"2d658888": "RobotarTestToken(address)", +"2d6653a9": "seed_coins_vault1()", +"2d668da4": "returnAmountOfTmexAddressCanProduce(address)", +"2d66acf1": "fortune_open(uint256)", +"2d67a79e": "verifyAccount(address,string,string)", +"2d67bb91": "World()", +"2d6842b5": "admin_MinimalPayValue(uint256,uint256)", +"2d685f15": "takeSell(address,uint256,uint256,address)", +"2d68bad7": "withdrawForTo(address,address,uint256)", +"2d68bc6e": "saleProceedsEther(uint256)", +"2d68de95": "currentStageTokensCap()", +"2d690f28": "LogSetTokenPrice(uint256)", +"2d6a3482": "TradeListing(bytes32,address,address)", +"2d6acb3a": "RESERVE_POOL_ADDR()", +"2d6afbd0": "unlockWithSpend(uint256,address)", +"2d6b113a": "in_sharing_phase()", +"2d6c17a3": "rewind(uint256)", +"2d6c25fa": "recommendedPrice(uint16)", +"2d6c5a84": "reverter(uint256)", +"2d6d1646": "untokenize()", +"2d6d372d": "getAccountWei(uint256)", +"2d6d4caa": "addtoContributos(address,address,uint256,uint256)", +"2d6ddfda": "closeModifyCountdown()", +"2d6df368": "borrarRegistro(bytes32,bytes32)", +"2d6e2bb0": "regularHold()", +"2d6ef310": "closeGame(uint256)", +"2d6f70f7": "transferViaTokenTransferProxy(address,address,address,uint256)", +"2d6f8049": "setBountyTokensReserve(uint256)", +"2d6fc906": "setBonuses(uint256,uint256,uint256)", +"2d703f88": "getMeeting(uint256)", +"2d706a34": "isName(address)", +"2d710551": "UlleToken()", +"2d7243ef": "payTodayReward(address)", +"2d740722": "close_pre_ico()", +"2d75c39a": "_removeClearingPriceValidator(address)", +"2d762b0d": "changeTokenContractAddress(address)", +"2d76a85a": "PundiXCash()", +"2d76be2d": "player_getPendingTxByAddress(address,address)", +"2d76d7b0": "releaseTokensByAddress(address)", +"2d774da2": "isSetFund()", +"2d776793": "downvoteComment(bytes32,bytes32,bytes32)", +"2d7788db": "rejectRequest(uint256)", +"2d78737b": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"2d78b7fc": "_withdrawInvestorTokens(address)", +"2d7aa82b": "initialize(uint256,uint256,uint256,uint256,uint256,uint256)", +"2d7ae086": "MarkHours(bytes32,bytes32,int256,bool)", +"2d7af0f4": "transferLoan(bytes32,address)", +"2d7b299d": "setNote(string)", +"2d7b8c98": "returnInvestmentsTo(address)", +"2d7bf927": "Migrations2()", +"2d7c597f": "whois(bytes32)", +"2d7c93e9": "register_claim(string)", +"2d7cd4cd": "rand1()", +"2d7cdeb1": "withdraw(string,uint256,address,bytes)", +"2d7da889": "ruleA(uint256)", +"2d7dc81c": "sendAfterIco(uint256)", +"2d7deae2": "testDeployMultiSigWallet()", +"2d7e92a5": "CWCCTokenIssue(address)", +"2d7eba3f": "ganaBalance()", +"2d7ed15c": "BNB_TOKEN_PRICE_DENOM()", +"2d804ca2": "amountFilled(address,uint256,address,uint256,uint256,uint256,address)", +"2d806bfd": "createProduct(bytes32,bytes32,address[],int256,int256,address)", +"2d806cdd": "setRefund(address)", +"2d80bc86": "getNumberOfParticipantsOrigins()", +"2d80f13c": "EthlanceSponsor(address)", +"2d817a91": "withdraw(uint32[])", +"2d81844e": "_createPrecious(address,uint256,string)", +"2d81e877": "Gocc9()", +"2d826eda": "updatetoken(uint256,string,string,string,string,string,uint256,bool)", +"2d829146": "buyshares(address)", +"2d83549c": "escrows(bytes32)", +"2d839989": "clearingPriceCode()", +"2d83f5a3": "divAmt()", +"2d84c3e8": "_getSigner(bytes32,bytes)", +"2d852552": "CreditDAO()", +"2d85db6b": "ChangeEndByManager(uint256)", +"2d873f21": "CrowdDevAllocation(address)", +"2d87cdd6": "DmlContribution(address,uint256)", +"2d883a73": "getByIndex(uint256)", +"2d884a51": "icoOpeningTime()", +"2d888869": "toAddress(bytes)", +"2d88af4a": "setPauser(address)", +"2d88df6f": "lvePay(string,string,uint256)", +"2d89560a": "TOKEN_INFORMATION_ADDRESS()", +"2d897146": "changeBonusIncreasePercentage(uint256)", +"2d8a08b6": "DepositEvent(address,uint256)", +"2d8a4dca": "committeeKickVotes(address)", +"2d8aa855": "playerInput(address)", +"2d8c1c35": "level_up()", +"2d8c4416": "airDropMonster(uint32)", +"2d8d488c": "getProductContractCommissionWei(address)", +"2d8d96fa": "stockSellCertainOrder(uint256,uint256,uint256,uint256)", +"2d8df871": "alimtoken()", +"2d8e3250": "Version(string)", +"2d8e3278": "grantPermission(address)", +"2d8ebff1": "joinAndDeposit(uint256,uint256)", +"2d8ed84a": "getExpiryDate()", +"2d8f0981": "setPI_edit_14(string)", +"2d9029ca": "earlyResolve(bytes32,uint256,bytes32,bytes)", +"2d9068ed": "matchpoolAddress()", +"2d906a19": "Solario()", +"2d90ae94": "transferToOwner()", +"2d910376": "valueFromPercent(uint256,uint256)", +"2d91657b": "giveConsent(string,string)", +"2d91ad22": "Group_5()", +"2d91bf11": "foxcoin(uint256,string,string)", +"2d923561": "sellItem(uint256,uint256)", +"2d9240f3": "pauseCrowdSale(bool)", +"2d92b1c0": "setupPhases(uint256,uint256[],uint256[],uint256[],bool[])", +"2d92b371": "addVal(address,bytes32,address)", +"2d9346ab": "setAgentVerificationByAdmin(address,address,bytes32)", +"2d935d11": "calculateTokenOnlyBuyPrice(uint256)", +"2d936763": "hasTeamKeepingWithdraw()", +"2d937fe8": "isBeginnerQuestContract()", +"2d93a44e": "getEndClaimDate()", +"2d93d3ac": "getFirstStageWallet()", +"2d94d41e": "DEVCLASS_FTL_SPEED()", +"2d9525d6": "YankeesOrioles48()", +"2d957790": "testRemoteWithdraw(uint256,uint256,uint256,uint256,address,address,uint8,bytes32,bytes32,address)", +"2d958dfc": "Payout(address,address,uint256,uint256,bool)", +"2d95fdb5": "_isApprovedForAll(address,address)", +"2d962d0f": "burnLeftTokens()", +"2d969204": "KingJamesToken()", +"2d96a297": "addStore(uint256,uint256)", +"2d976404": "upgrade_token(address,address,string)", +"2d978678": "left23(uint256)", +"2d97fc5d": "rand(uint256,address)", +"2d980646": "allowanceEliminate(address,address)", +"2d985cfb": "testControlRestartNotUpdatable()", +"2d98d251": "ArtaoToken(uint256,string,string)", +"2d992bde": "applyAffiliate(address,uint256,uint256)", +"2d9a37d3": "getMaxPayout()", +"2d9abaed": "Purchase(uint256,address,address)", +"2d9b1530": "Electrocoin(uint256,uint256)", +"2d9b4ab7": "blnpereth()", +"2d9c3052": "createPaper(string,uint256,uint256)", +"2d9c6001": "prometheusVoucherSoldCount()", +"2d9d5ab7": "withdrawByAdmin(address,uint256,address,uint256,uint8,bytes32,bytes32)", +"2d9de472": "setVerified(uint256)", +"2d9e84b4": "userCampaignID(address,uint256)", +"2d9e87c5": "setRefundable(bool)", +"2d9e8ed6": "addEntryInYears(address,uint256,uint256)", +"2d9ec349": "TOKETH_PRESALE_THREE()", +"2d9eceb5": "BETHERcoin()", +"2d9f669d": "sendProportion(address,uint256)", +"2d9fab98": "suscribeTrial(uint256)", +"2d9ff1d0": "m_Owner2()", +"2da03409": "flushForwarderTokens(address,address)", +"2da09fac": "sellBkgAtExchg(uint256,uint256)", +"2da0c25c": "priceChanger()", +"2da0d1ea": "etherSold()", +"2da11b2e": "biddingClosed()", +"2da13d5e": "CONTRIBUTIONS_MIN()", +"2da1670f": "deAuthoriseSale(uint256,uint256)", +"2da2440c": "registerAuditor(address,address)", +"2da39239": "updateUserShares()", +"2da40888": "TaskUpdated(uint256,uint8)", +"2da40ac7": "emitTokens(address,uint256,uint256)", +"2da4dddd": "createSystemSaleAuction(uint32,bytes,uint16)", +"2da5a444": "deleteSire(uint32)", +"2da5b88e": "remoteSetWinner(uint256,uint256,uint256)", +"2da5deb4": "addBuyTokensRequest(string,string)", +"2da64861": "bulkReserveTokensForAddresses(address[],uint256[],bool[])", +"2da6a0d8": "getBomb(uint8)", +"2da6b8f8": "_getMinersAt(uint32,uint32)", +"2da7293e": "isSuperseded(address)", +"2da758b0": "ResearchAndDevelopment()", +"2da80893": "phase_3_rate()", +"2da8b2be": "TokenSubtracted(address,uint256,uint256)", +"2da8d3e6": "woe()", +"2da8f764": "submitVideo(string,string)", +"2da92e05": "setEmissionCap(uint256)", +"2da9a6cc": "collectMilestoneInvestment(bytes32)", +"2da9b51e": "setBuilding(uint8[176],uint8,uint8,uint8)", +"2da9d048": "startQueue(address)", +"2dab0374": "sendFutureFundingBalance(address[],uint256[])", +"2dab3e7a": "setTransferPlan(address,uint256,bool)", +"2dab7ee2": "convertToBytes(uint8[])", +"2dabbeed": "reclaim(uint256)", +"2dac17cd": "getBattleKuns(uint256)", +"2dacdaf7": "_createGirl(string,address,uint256)", +"2dad2f97": "getLeastExpensiveShare(uint256,uint256)", +"2dad5872": "newAttack()", +"2dad6b6a": "_distributeToken(address)", +"2daddb32": "VVToken()", +"2dadf781": "KudosOrganisations(address)", +"2dae35c4": "RGXBonus(string,string,uint256,uint8)", +"2dae9878": "BankOwner_EnableConnectBankAccountToNewOwnerAddress()", +"2daeb49a": "fundPuppets()", +"2daedd52": "stake(bytes32,uint256,uint256)", +"2daf0e1c": "presaleLevel()", +"2db0d129": "VIDALCOIN()", +"2db237bb": "MARGIN_SPLIT_PERCENTAGE_BASE()", +"2db25e05": "getTrade(uint256)", +"2db26de1": "checkBalances(address[])", +"2db2caef": "rmExchangeAccount(address)", +"2db3dc12": "FrozenAccount_event(address,uint256)", +"2db4f279": "createRoom(string,uint256)", +"2db579f2": "ETHPToken()", +"2db59e2b": "MyOwned()", +"2db6ad32": "testEmpty()", +"2db6e0fe": "fixPlayerFlag(uint256,string)", +"2db6fa36": "batchAddToWhitelist(address[])", +"2db78d88": "adminSealBallot(uint32)", +"2db78d93": "indexes(address)", +"2db8069f": "makeMemberOfCommunity(address,uint256)", +"2db89533": "Auth(uint8,address)", +"2db9395a": "availableTo(address)", +"2db93fc7": "buyBag(uint256)", +"2db95aa9": "getTomatoCount()", +"2dba1a44": "stockCancelSellOrder(uint256,uint256,uint256)", +"2dba3614": "app_address()", +"2dba5cfa": "transferCoins(address,uint256)", +"2dba9e63": "EMACToken(uint256)", +"2dbacf5f": "premiumOpen()", +"2dbb9050": "setSecurityTokensPercent(uint256)", +"2dbc62cc": "BlindCroupierTokenDistribution(address[16],uint256[16])", +"2dbcc104": "getAddressFromList(uint256)", +"2dbce390": "setDepositary_function_control(uint256)", +"2dbd606e": "set_sale_address(address,bytes32)", +"2dbe713d": "EOSPlusToken()", +"2dbede89": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"2dbf7b98": "certificate()", +"2dbf8bf0": "getRolled()", +"2dbffa6a": "executeBuyRequest(uint256)", +"2dc03259": "registerUser(bytes32)", +"2dc03b22": "createNTVU()", +"2dc0562d": "taxWallet()", +"2dc09c39": "protectedReclaim(address,uint256)", +"2dc26661": "unlockOutcome(string,uint256)", +"2dc2dbf2": "makeSimpleDeal(address,address,uint256,bytes32)", +"2dc47153": "datafeed()", +"2dc62c4d": "MintProofOfStake()", +"2dc70b2a": "getCorrectedTotalBPOfTokens(uint256[])", +"2dc7a2e5": "testSetupMultisig()", +"2dc88138": "submitCoin(address,string)", +"2dc8b9de": "f1(address)", +"2dc8be64": "buyoutWallet()", +"2dc8d88d": "privatesale_beneficiary()", +"2dc95548": "adjustTokenExchangeRate(uint256)", +"2dc9ad7f": "multisend(address[],uint256)", +"2dc9b8f7": "createGuess(uint256,uint256,uint256,uint256,uint256)", +"2dc9d3e5": "placeSellTokenOrder(uint32,uint256)", +"2dca374f": "FBToken()", +"2dcac811": "TTNCoin(uint256)", +"2dcb4691": "EventBuyTank(address,uint256,uint256,uint256)", +"2dcb5c8d": "xaurumProxyWorking()", +"2dcbac97": "getGen(uint256)", +"2dcbfdfa": "endEarlyBird()", +"2dcca1f9": "TokenRetriever()", +"2dccba89": "MAX_DEPARTURE_LIM()", +"2dcd4e41": "getGain(uint256)", +"2dcdcd0c": "minChild(uint256)", +"2dce6a1f": "KHT(uint256,string,string)", +"2dcebd16": "setWorldTreasuryAddress(address)", +"2dd02e92": "weGotAWinner(address,uint256)", +"2dd0e79e": "getMarket_CommunitUsedTokens()", +"2dd117e0": "RESERVED_TOKENS_BOUNTIES_ADVISORS()", +"2dd1a932": "WE3TOKEN()", +"2dd1cc27": "MichCoin(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"2dd28736": "view50()", +"2dd2995a": "ETHERCOINSupply()", +"2dd2f86b": "maxTokenSale()", +"2dd306f7": "getTearBalance()", +"2dd31807": "unlistOpenProposals(bytes32)", +"2dd34f0f": "Whitelistable(address)", +"2dd395ae": "SUN()", +"2dd3ed9a": "addWorkRecord(uint256,bytes16)", +"2dd40301": "amountJurors(uint256)", +"2dd407f9": "Vag()", +"2dd4f8d4": "totalSupplyYear()", +"2dd522c6": "ATN()", +"2dd5b58e": "setNewGameLogic(address)", +"2dd608ce": "setPreICOLimit(uint256)", +"2dd694ff": "EntryExistAlready(bytes32,uint256)", +"2dd6ba7e": "release_remain()", +"2dd7030b": "removeAuction(uint256)", +"2dd78759": "affAddr_()", +"2dd7ab99": "BlackSnail(uint256,string,uint8,string)", +"2dd81ed3": "CROWDSALE_REWARD_TOKENS_NUMS()", +"2dd854d4": "addLoanToPortfolio(uint256,uint256)", +"2dd8a25e": "MakeTransaction(address,uint256,uint256)", +"2dd96c84": "presaleGranteesMap(address)", +"2dda04fa": "enterContest(uint32,uint32[])", +"2dda30a7": "transferAndFreeze(address,uint256,uint256,uint256)", +"2ddae32d": "UTCoin()", +"2ddbc04a": "play2(address,uint256)", +"2ddbc97e": "addAuthor(address)", +"2ddbd13a": "total()", +"2ddc36ba": "BRC()", +"2ddcac03": "_checkLimit(uint256)", +"2ddcb21f": "limitSupply()", +"2ddd196f": "bookGuest(string)", +"2ddd6fa5": "incomingRandomNumberError(address)", +"2dddd8e0": "CROWDSALE_HARDCAP()", +"2dddf3e1": "request_withdrawal(uint256,uint256)", +"2dde1911": "balancesImporter2()", +"2dde7241": "priceWithDiscount(uint256,uint256)", +"2dde7dbc": "MAX_DTH()", +"2dde9aca": "deployment()", +"2dde9f81": "getLockWFee()", +"2ddea5fc": "enableEscapeHatch()", +"2ddeac16": "getForeignTokenBalance(address,address)", +"2de02bfa": "allocate(address,address,uint256)", +"2de05136": "unregisterVerifier(address)", +"2de16fdb": "fetchDayTokens()", +"2de1e234": "requestUSDPrice(string)", +"2de22cdb": "currentMintedTokens()", +"2de39dbe": "DifficultyOracle(uint256)", +"2de3ad02": "getUserWalletByUsername(string)", +"2de3cddc": "setCostToCreate(uint256)", +"2de40ce3": "registered()", +"2de4ca59": "Check()", +"2de4fbd8": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"2de541e0": "updateAvatarInfo(address,uint256,string,uint256)", +"2de5aaf7": "getAgent(uint256)", +"2de61d1f": "changeIcoTimeRange(uint256,uint256)", +"2de6fac6": "delKYC(address)", +"2de86c5b": "transferPlayerBudget(address)", +"2de896f6": "MaxTokensPerAccountUpdated(uint256)", +"2de90801": "hashtagToken()", +"2de954af": "fixedLog2(uint256,uint8)", +"2de9a13a": "ToGoConcert()", +"2dea5f6d": "markCombatStarted(uint256)", +"2dea82b4": "checkActualPrice()", +"2deb65c7": "GetPoolInformation()", +"2deb7571": "queryByAddr(address)", +"2deb79b6": "getStockShares(uint256)", +"2ded516e": "giftIsTo()", +"2dee466d": "getAllActiveAuctions()", +"2def6620": "unstake()", +"2df056bd": "ServiceProvider(string,string,string)", +"2df05a3e": "payoutIndex()", +"2df33eee": "ShareEstateTokenCrowdsale(address,address,uint256,uint256)", +"2df38460": "unFreeze(address,uint256)", +"2df39546": "_generateRandom(bytes32,uint32,uint32)", +"2df3f82a": "setClaim(string,string)", +"2df456d4": "SetAllPaymentsSent(uint256)", +"2df56bb2": "unitBattleEthCost(uint256)", +"2df5a559": "year4LockAddress()", +"2df5ce67": "WorkOrderCompleted(uint128,uint256,string)", +"2df6e80a": "cancelTradeOffer(bytes32)", +"2df7c637": "ensureCurrentStage()", +"2df80280": "lastState()", +"2df80c87": "privilegedMintLock()", +"2df8e00d": "becomeMortal(uint256)", +"2df939cd": "Banglatoken()", +"2df9feaa": "stopElection()", +"2dfaf204": "executeContract(uint128,uint128)", +"2dfd27e8": "fecharDoacoes()", +"2dfdaf59": "CheckSoilTempException(bytes32,uint32)", +"2dfdf0b5": "depositCount()", +"2dff0d0d": "getById(bytes32)", +"2dff3498": "Relay()", +"2dff692d": "orderStatus(bytes32)", +"2dff6941": "content(bytes32)", +"2dff7a2b": "authoriseMaker(address)", +"2e0025c1": "ROLE_BACKEND()", +"2e011136": "deployTokens(address[],uint256[])", +"2e012698": "validate(bytes32)", +"2e01783d": "calcprice()", +"2e0179b5": "increaseApprovalWithSender(address,address,uint256)", +"2e01d229": "Attacker(address)", +"2e02583c": "wordlist()", +"2e028287": "test_oneInvalidAssertFalse()", +"2e029c65": "HARDCAP_TOKENS_ICO()", +"2e02b24c": "PMCToken(address,uint256)", +"2e038aaf": "randaoAddress()", +"2e04d730": "BuyGoods(uint32)", +"2e05177f": "OpenTransferToken()", +"2e055bcc": "preSaleSupply()", +"2e05b37b": "settleFee(address,address,uint256,uint256)", +"2e06c756": "post(string,string,string,uint256,uint256,address)", +"2e071db3": "updateUserAge(address,uint256)", +"2e081f31": "pause_3()", +"2e08c3d1": "checkUserWhiteList(address)", +"2e08eb77": "InitialTreeICO()", +"2e09c32f": "playRound(address,uint256)", +"2e0a020e": "refunduingStartDate()", +"2e0b1834": "periodByDate()", +"2e0bee7b": "createCampaign(string,string,uint256[],uint256,uint256,uint256,uint256)", +"2e0c6c36": "RANGEEND_3()", +"2e0ca1ee": "first_pay()", +"2e0cb498": "hashValue(bytes32)", +"2e0de515": "setTip(uint256)", +"2e0dfafc": "addBlockListed(address)", +"2e0e11b2": "OrderMatchFailure(address,int256,address,int256,uint256,uint256)", +"2e0e5ce8": "getBonusNames()", +"2e0eb6fd": "Lucy()", +"2e0eb943": "doSend(address,address,uint256)", +"2e0ef395": "voteOnNewEntryFees_only_VIP(uint8)", +"2e0f2625": "DECIMALS()", +"2e0fb349": "mainSaleSecondEndDate()", +"2e0fc7a6": "updateContributor(address,uint256,uint256)", +"2e102ee4": "setGasPrice(uint8)", +"2e108133": "qshdrop(address[],uint256)", +"2e10870f": "makeAnotherContractOwnerOfToken(address)", +"2e10feff": "addSigByProvider(bytes32)", +"2e13bd10": "not()", +"2e14ef92": "mutiSendCoinWithSameValue(address,address[],uint256)", +"2e15ba63": "forwardData(bytes32,address)", +"2e16cf54": "retrieveWallet(address)", +"2e16e82e": "BitcoinCityCoin()", +"2e17de78": "unstake(uint256)", +"2e18270f": "receiveBTC(address,string,uint256,string)", +"2e18762c": "LogUpdateInvestorProfitSum(uint256)", +"2e18cead": "PrivateSale(address,uint256,uint256,uint256,uint256)", +"2e18d8a9": "becomeBullsmaster()", +"2e190d03": "IncreasingPriceCrowdsale(uint256,uint256)", +"2e19599c": "getTargetRepMarketCapMultiplier()", +"2e19d31b": "proposalText()", +"2e19ebdc": "pIDxName_(bytes32)", +"2e1a348e": "TicTacToeGame()", +"2e1a37ee": "TCToken()", +"2e1a7d4d": "withdraw(uint256)", +"2e1a9ffe": "getPepe(uint256)", +"2e1b2098": "PlayerCreated(uint8,address,uint256)", +"2e1b7f08": "SetClaimRate(uint256)", +"2e1bbe98": "setLimitEth(uint256)", +"2e1c1d63": "BoardMeetingClosed(uint256,uint256,bool)", +"2e1c49d9": "testInitalBalanceUsingNewContract()", +"2e1d22b6": "getPlayerDividend(address)", +"2e1dc4b8": "setTokenReward(address)", +"2e1dea6b": "updateHours()", +"2e1e786d": "setWhitelist(address[],address[],uint256[])", +"2e1eb7fe": "slice32(bytes,uint256)", +"2e1ef07a": "getAmountOfTokens(uint256,uint256)", +"2e1faf75": "transferToken(address,uint256,uint256)", +"2e1fbfcd": "getProposalObjectionByIndex(uint256)", +"2e20255e": "MasterToken(uint256,string,uint8,string)", +"2e20b66a": "setThings(address[],uint256[],uint256)", +"2e217405": "limitedWallets(address)", +"2e21b085": "lastPriceOf(uint256)", +"2e226c84": "rewardForDrawing()", +"2e23062d": "increaseBase()", +"2e2326d5": "isPrivileged(address)", +"2e247e4f": "SRGToken()", +"2e25aa96": "setCharPrice(uint256)", +"2e25d2a6": "marketPlace()", +"2e26328d": "RaiToken()", +"2e271ff3": "getEmail(address,address)", +"2e276499": "minPayment()", +"2e279344": "getLunckyInfo()", +"2e27c10a": "setPI_edit_25(string)", +"2e283b94": "TokenClaim4BTC(address,address,uint256,uint256,uint256,uint256)", +"2e28b3f5": "SGX_ADDRESS()", +"2e28d084": "setBytes(bytes32,bytes)", +"2e28fd42": "complete(uint256,string)", +"2e293e58": "setClientPaidUpTo(address,uint256)", +"2e297a44": "getSmartContractsLength()", +"2e298f75": "setPositiveGrowth(int256)", +"2e2a51bd": "WitdrawTokenToHolder(address,address,uint256)", +"2e2a6488": "evaluation_stage_block_size()", +"2e2aad44": "NIMFAToken(address,address,address,address,uint256,uint256)", +"2e2b3f61": "TokenCreated(address)", +"2e2b5809": "Insurechain(address,address)", +"2e2bac04": "addControllerContract(address)", +"2e2bec5c": "getMinerLevel(uint256)", +"2e2cce55": "icoRound5()", +"2e2d6ab1": "DelayedPayment(address,uint256,address,uint256)", +"2e2e4149": "minTomoContribution()", +"2e2ed6a7": "PALToken(uint256,address)", +"2e2fe8a9": "ZYL()", +"2e2ff7c6": "transferPreSaleTokens(address,uint256)", +"2e3196a5": "set(string,bytes32)", +"2e323f5d": "Update(uint256,uint256,string)", +"2e325020": "getStage(uint256)", +"2e33178a": "zRefundAllPlayers()", +"2e334452": "getPublicKey()", +"2e336eea": "testDieIfMinReturn0()", +"2e338df5": "transferInner(address,uint256)", +"2e33cd7a": "distructVault(bool)", +"2e340599": "info(uint256)", +"2e340823": "cancel(uint256[])", +"2e35d7a8": "companyTokensCurrent()", +"2e368e03": "beneficiariesPercentage(address[],uint256[])", +"2e36a709": "Error(uint256)", +"2e3712c4": "Bitelectroneum()", +"2e376ada": "whitelistIndexMap(address)", +"2e379264": "AIRDROP_CLAIM_AMMOUNT()", +"2e37fa97": "doneOptions()", +"2e39c2b1": "Prize(string,uint256,string)", +"2e39ff84": "isGeneSynthesis()", +"2e3a0a7c": "destroyMultipleItems(uint256[])", +"2e3a4d12": "handleRSMCUpdateTx(address,bytes32,uint256,address,uint256,address,uint256)", +"2e3a4def": "isTier2(address)", +"2e3a5611": "create(string,string,string,uint256,string,string,uint256,string)", +"2e3a71d5": "futureFundingBalance()", +"2e3acf6b": "contractPreICO()", +"2e3aff3b": "getSpinnerPrice(uint256)", +"2e3b3123": "_multiSet(address[],uint256[])", +"2e3b96bf": "developersTokens()", +"2e3be78d": "setPrecisionDirect(uint8)", +"2e3c2259": "playingNTVU()", +"2e3c9e99": "managerAddr()", +"2e3ca08c": "WALLET_MARKETING()", +"2e3cbb3b": "sellPop(address,uint256,uint256)", +"2e3ced61": "periodPreITO_startTime()", +"2e3db828": "getAddressForUsername(bytes32)", +"2e3edd0f": "ntsDepositAddress()", +"2e3fa349": "isLpStart()", +"2e4040b0": "releaseTeamTokensAfter6Months()", +"2e404c0f": "_setDOwner(bytes32,address)", +"2e4054cf": "vest2advisors(address,address)", +"2e4099bd": "transferAirdrop(address[],uint256,bytes)", +"2e414890": "challenge(uint256,uint256)", +"2e415444": "transferUniqueId(bytes32)", +"2e416162": "tkstest()", +"2e4176cf": "chairperson()", +"2e4216c1": "setMinInvestmentInWei(uint256)", +"2e42b012": "LockAccount(address)", +"2e42f80c": "CDC()", +"2e42f860": "toUint32(bytes)", +"2e430824": "trackable(address,address)", +"2e43bdfd": "approveDecrease(address,uint256)", +"2e440403": "rounding()", +"2e448f4b": "transferAngel(address,address,uint64)", +"2e450881": "PRESALETOKENMAXSALES()", +"2e4644bf": "sellDragon(uint256,uint256,uint256,uint16,bool)", +"2e465465": "provideIndex(string,uint256)", +"2e466373": "resumePlaying()", +"2e46cb09": "AddChipTempTime(uint32,uint256)", +"2e46ed94": "uint8ToString(uint8)", +"2e471d47": "addInvest()", +"2e478dd8": "provideCertificate(uint256,uint256)", +"2e4837ea": "pickUp()", +"2e48f65d": "UpdateMoney()", +"2e49d78b": "setStatus(uint8)", +"2e4a3657": "returnToken()", +"2e4ab29e": "technicalContract()", +"2e4b3d59": "setSecurityPercent(uint256)", +"2e4bd18a": "ApproveFinishMintingRequest()", +"2e4c4a9f": "lunyrPercentOfTotal()", +"2e4c697f": "pow(uint256,uint256)", +"2e4d2a09": "DMC()", +"2e4d3189": "withdrawal(address,uint256,uint256)", +"2e4d59c4": "CheckBalance(address)", +"2e4d8c8f": "exerciseToken()", +"2e4eaa15": "destroyToken()", +"2e4f43bf": "allOf(uint256)", +"2e4fd0ca": "addReferrer(uint256)", +"2e502569": "emitTransferred(address,address,uint256,address)", +"2e504bdb": "distributeTokens(uint256,uint256,uint256)", +"2e50e3ff": "simulateOptions(uint32,uint32,uint32,uint32,uint32,uint8,uint32)", +"2e5113b7": "benefit()", +"2e519ad5": "joinGameReferred(bytes32,address,uint8)", +"2e519dd5": "updateLottoParams(uint256,uint256,uint256)", +"2e51cdf6": "getAddressFromBytes(uint8,bytes)", +"2e52d606": "n()", +"2e532ba2": "getBackgroundImage(address,uint256)", +"2e533630": "sendBatches(address[],uint256[])", +"2e541234": "AllThingsTokens()", +"2e558a2d": "ETTToken()", +"2e56f71e": "deactivateMint()", +"2e56fd7a": "currentDelayOnNewLevel()", +"2e574191": "NEURAL()", +"2e58e65a": "getTokenInitialPrice()", +"2e597ada": "ChenToken()", +"2e599054": "depositETH(address,uint256)", +"2e5a6f17": "releaseAdvisorsTokens()", +"2e5a79fc": "_withdraw(string,address,uint256)", +"2e5ab94f": "BLOCKS_PER_PHASE()", +"2e5ac9b1": "createToken(address,address,address)", +"2e5b02ae": "setCrcWithdrawAccount(address)", +"2e5b2168": "maxBet()", +"2e5b4c43": "allowTrading()", +"2e5b604e": "lockBonus(address,uint256)", +"2e5c4cef": "RRRR_Token()", +"2e5cc103": "createDefaultEtherDog(uint256,uint256,uint256,address,uint256,uint256)", +"2e5d1042": "requestPayout(uint256,uint256,bytes32,uint256,uint256)", +"2e5d89bd": "BlockmoXyz()", +"2e5df0fe": "signUpDelegatedUser(string,address,uint8,bytes32,bytes32)", +"2e5e00e1": "_FIFTY()", +"2e5ec035": "_ApplicationRemoved(bytes32)", +"2e5fe746": "communityTokens()", +"2e609c10": "presaleStartsAt()", +"2e61319d": "getNumberOfAddresses()", +"2e617512": "getAddressFromName(bytes32)", +"2e62190c": "valueWithFee(uint256)", +"2e6245c6": "internalBalance()", +"2e62efbb": "getOpenOrderInfo(address,address)", +"2e63046d": "mybUSDPrice()", +"2e63756f": "PriIcoSale(address,uint256,uint256,address,address)", +"2e639fd5": "GetPlayerInfo()", +"2e63cfe1": "Twoandtwo()", +"2e63dc80": "get_description_url()", +"2e63fa72": "calculateFillHash(address[],uint256[],uint8,uint8)", +"2e64bcf1": "weiWantedOf(address)", +"2e64cec1": "retrieve()", +"2e65280d": "ListNotValidated()", +"2e660475": "PonziTokenV3()", +"2e66ee1b": "currentStateToString()", +"2e69e69b": "getQuantity(address)", +"2e69e8c5": "CarolToken()", +"2e6aa830": "testInitialBalanceWithNewMetaCoin()", +"2e6b2662": "sponsoredBonusMin()", +"2e6b921c": "claimTokensByAdmin(address)", +"2e6bbde5": "_updateCurrentAnswer(bytes32,bytes32,uint32)", +"2e6c4933": "getchilds()", +"2e6ccbf6": "getFactorybyIndex(uint256)", +"2e6d18ec": "getRoomData(uint256)", +"2e6d561b": "sendUnsoldTokensToTreasury(address)", +"2e6e190e": "Play(uint256,uint256)", +"2e6e504a": "trusteeWithdraw()", +"2e6e795c": "shareHoldersOf(uint256)", +"2e6f2136": "emitToken(address,uint256)", +"2e6f3e4a": "PERCENT_RATE()", +"2e6f456c": "updateCrowd(uint256,uint256,uint256,uint8)", +"2e70bd4f": "mintOperationCount()", +"2e712cc1": "getAdminComission()", +"2e71e68f": "IDX()", +"2e72057e": "GetLiasonURL(uint256,uint256,uint256)", +"2e722561": "CrowdsaleController(uint256,address)", +"2e7248bf": "MINIMUM_SELLING_UCCOIN()", +"2e729daf": "totalTRsWagered()", +"2e73dba0": "FeneroToken()", +"2e76a6d4": "allocateMarketingTokens(address,uint256)", +"2e771b17": "Spent(address,uint256,string)", +"2e77b3d0": "annual_circulating_supply()", +"2e788443": "resolve(string,address,uint256)", +"2e788faf": "HOLODECKS()", +"2e78f9a7": "getCardValue(uint256)", +"2e79477f": "SGD()", +"2e799a77": "GainChip(address,uint32,bool)", +"2e79d702": "addPolicyRule(bytes4,address,bytes32,uint256,uint256)", +"2e7a26d6": "Delineto()", +"2e7a9409": "_winJackPot(address,string)", +"2e7bcc55": "put(bytes32,bytes32,bytes32)", +"2e7ceb0f": "THIRD_TIER_RATE()", +"2e7d6253": "Sale(address,address,address)", +"2e7db440": "prepurchase(uint32)", +"2e7dc6af": "src()", +"2e7e33df": "sendFunds(address,uint256,bytes)", +"2e7e9af8": "addDistributee(address,uint256)", +"2e7e9d82": "ModerateBill(uint256,bool)", +"2e7f5107": "_processCredit(address,uint256)", +"2e7f9127": "setSize(uint8,string)", +"2e7fa0bb": "ReyNetMax()", +"2e8057ba": "NucleusVisionToken_ASTER87901()", +"2e80a85d": "last_jack()", +"2e80cc56": "crowdSaleMin()", +"2e80d9b6": "QUORUM()", +"2e80e77c": "minimumWeiAmount()", +"2e817963": "set_sdl(address)", +"2e81cdda": "setItemOptions(address,uint256,uint256,uint8)", +"2e82aaf2": "lock(bytes32,uint256,uint256)", +"2e831cd1": "update_bitcoin_ratio(uint256)", +"2e834576": "tokensForEth(uint256)", +"2e83faee": "CustodianUpgradeable(address)", +"2e84a374": "reclaimEtherTo(address,uint256)", +"2e84bed8": "VESTING_2_AMOUNT()", +"2e84e8ca": "ItsComingHomeToken()", +"2e8511f0": "getReg1()", +"2e85dd54": "getGPSMaxEth()", +"2e860fc2": "setRaiseLimit(uint256)", +"2e867c77": "PRESALE_BONUS_PERCENT()", +"2e86cb13": "publicGetAsset(uint256,uint256)", +"2e875a9f": "RnMmasterReq()", +"2e87b461": "getPlayerFrontDataForMarketPlaceCards(uint256)", +"2e87edd9": "MINIMUM_PARTICIPATION_AMOUNT()", +"2e87f4a5": "_emitRoleAdded(address,uint8)", +"2e881918": "setVariantCount(uint256,uint256)", +"2e894203": "delLitAddress(address)", +"2e898ddc": "validateTemporalUnit(uint256)", +"2e8a34a7": "addTo(bytes32,uint256)", +"2e8ac384": "SmartIdentityRegistry()", +"2e8ac517": "TokensMinted(address,uint256,uint256)", +"2e8b73cd": "getPoolUrlOfAuditReport(uint256)", +"2e8c0ac2": "balancing(int256,int256,uint256)", +"2e8c5793": "BonumPromoToken()", +"2e8cbf7d": "_determineAttack(uint256)", +"2e8e66b9": "newRequest(address)", +"2e8e9bb9": "Venuscoins()", +"2e90610d": "auditActivity(uint256,string,uint256,uint256)", +"2e9066b2": "lastBlock_v6()", +"2e90aae8": "cuck()", +"2e913118": "txTaskMap(uint256)", +"2e91812b": "setSmallCapWhitelistParticipants(address[],uint256)", +"2e92abdd": "withdrawDividends()", +"2e932961": "setTimeEnd(uint256)", +"2e93497e": "ownerRandomHash()", +"2e9392bb": "marketEggs()", +"2e9453c2": "stateOfICO()", +"2e94afe0": "EDN()", +"2e94c0df": "_withdrawTokens(address)", +"2e9501d6": "maxThreshold()", +"2e963adc": "timelocksContracts(address)", +"2e97766d": "getBlock()", +"2e97c5a5": "ethToLoveyRate()", +"2e97f1bb": "setCustomerTxAsSpent(address,bytes32)", +"2e984745": "partnerID(address)", +"2e9868f8": "issuerName()", +"2e986b54": "TransferMinimumFeeConfirmed(uint256,address,uint8)", +"2e98a401": "preCheckAndPay(string,uint256,address)", +"2e993994": "changeUnforked(address)", +"2e995fd7": "setOraclizeAllowance(uint256)", +"2e99df84": "InitiateTeams()", +"2e9a06fd": "isValidIPFSMultihash(bytes)", +"2e9a3869": "MORCO()", +"2e9b4414": "getSpawnLimit(uint32,int256,uint256)", +"2e9b50bd": "addPeer(address)", +"2e9bbbb8": "transferOwnershipUpdateToken(address)", +"2e9be9d5": "signWithdraw(address,address)", +"2e9c135b": "proxydeposit()", +"2e9c5e77": "doStackExtension(uint256)", +"2e9c91a8": "getStartParams(bytes32)", +"2e9efb8e": "commitToWeek(uint256,uint256)", +"2e9f86cd": "create0(uint256,bytes)", +"2ea0dfe1": "transferFrom(address,address,uint64)", +"2ea1f9aa": "getEpisodeLength()", +"2ea23b11": "testTransferFromDoesNotAllowTransferByAddressThatHasNotBeenApproved()", +"2ea38693": "testCreatePrizeUsingNewContract()", +"2ea3ad74": "finishPreIco()", +"2ea3f9fc": "gelerCompte(address,bool)", +"2ea459b8": "claimThrone(bytes)", +"2ea60e35": "fourthWeekBonus()", +"2ea68d4b": "LazyCoderCoin()", +"2ea6d6da": "absMin(int256,int256)", +"2ea7b4d0": "ALPHA_DIVISOR()", +"2ea7e0d2": "Test5(uint256)", +"2eaa7be9": "PoolSegregationCrowdsale(uint256)", +"2eaad0b0": "_getAllChildren(bytes32)", +"2eabb38d": "doTransferIn(address,uint256)", +"2eac3a7d": "divCashCoin()", +"2eac5a77": "Getscoins()", +"2eac5ca2": "deleteUsername(bytes20)", +"2eacfd0f": "admin_withdraw(uint256)", +"2ead28fa": "BBTToken(address)", +"2eadda54": "number_to_hash(uint256)", +"2eae0018": "setMaxChildCount(uint256)", +"2eae0d0a": "SetTimes(uint256,uint256)", +"2eaf7fe0": "buyTokenPostIco(address,uint256)", +"2eaf81f9": "concludeTournament(uint256,uint256)", +"2eafb9fa": "setMintTokenOwner(address,address)", +"2eafc2aa": "installWinner(uint256)", +"2eb0111c": "currentPhaseAddress()", +"2eb0b45a": "setGlobalsSize(uint256)", +"2eb1482a": "isHorseInStud(uint256)", +"2eb1ee9e": "CandyLand(address)", +"2eb255ec": "divpaid()", +"2eb2c2d6": "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)", +"2eb37466": "removeWhitelistedAddress(address,address)", +"2eb3a797": "getBetKey(uint256)", +"2eb44efc": "ICOSaleType()", +"2eb4a7ab": "merkleRoot()", +"2eb51417": "isWithinSaleLimit(uint256)", +"2eb516b8": "setGNR(address,address,address)", +"2eb56ad4": "getUserTokensByGame(address,uint32)", +"2eb5c61f": "testThrowsUpdateLatestRevisionEnforceRevisions()", +"2eb61d15": "getAdvisorStatus(address)", +"2eb67f53": "isERC20()", +"2eb73307": "internalRefund(address,uint256)", +"2eb77b44": "PNNP(uint256,string,uint8,string)", +"2eb9526e": "GetBoilersInfo()", +"2eb95fd4": "doHijack(uint256,uint256,uint256,uint256)", +"2eb96988": "getMetBalance()", +"2eb98d34": "hosp_count()", +"2eb9a518": "ChangeRateOfToken(uint256,uint256)", +"2eb9f831": "markAsFounder()", +"2eba1c40": "deleteName(address)", +"2eba9ca9": "liquidateUser(address,uint256)", +"2ebabea0": "preSaleRaise()", +"2ebba2cf": "unitsPerEthAt(uint256)", +"2ebbac6c": "ico4Cap()", +"2ebbc58c": "getAllRouter()", +"2ebc4293": "getEthereum()", +"2ebc760b": "AvPresale()", +"2ebd1e28": "setTokenAddr(address)", +"2ebd632a": "addSystem(address,address)", +"2ebd9242": "TOTAL_TOKENS_ICO()", +"2ebe14b0": "timeoutBlocks()", +"2ebec916": "withdrawalProfit()", +"2ebeee0f": "increaseMinPurchaseQty(uint256)", +"2ebfa208": "checkFreeze(uint256)", +"2ebfeaac": "setCCH_edit_33(string)", +"2ec0090a": "withdrawEtherBalance()", +"2ec0faad": "createPassport()", +"2ec19f0f": "itemTransfer(address)", +"2ec21efd": "OuCoin()", +"2ec29c59": "ICOSALE_BONUSJOINTTOKENS()", +"2ec2c246": "unregister(address)", +"2ec40ac8": "reached()", +"2ec449d7": "MedexTestToken()", +"2ec47069": "assignFoundationSupply(address)", +"2ec6b4f6": "getUnitCoinProductionMultiplier(address,address,uint256)", +"2ec6ea30": "Hodl()", +"2ec82b8f": "balanceOfInt(address)", +"2ec86103": "booleanToUInt(bool)", +"2ec90e34": "decrementOwnedArea(address,uint256)", +"2ec9322d": "returnStartTime(uint256)", +"2ec9ad44": "removeAccessor(address)", +"2ec9c537": "MyFiChain()", +"2eca51e2": "elements(uint256,uint256,uint256)", +"2ecad13f": "getSaleEndDate()", +"2ecae90a": "getLeverageList()", +"2ecb0d64": "getNumber(bytes32)", +"2ecb20d3": "fromHexChar(uint8)", +"2ecb9279": "yesHash()", +"2ecbd6d8": "allowedForWithdrawn()", +"2ecc8703": "guardInterval()", +"2ecca4e6": "_destroyNinja(uint256)", +"2ecd071e": "Freezed(address,uint64,uint256)", +"2ecd7020": "getTotalTokenSold()", +"2ecde40e": "getRefWallet(address,address)", +"2ece07c3": "setUserAirDropRate(uint32)", +"2ecf307e": "_addrNotNull(address)", +"2ecf66e4": "softCapToken()", +"2ed028da": "addGift(address,uint8)", +"2ed0d097": "_getTotalTokenBalancePerShard(uint256)", +"2ed196bd": "ccLockedUpBalances(address)", +"2ed1a7f6": "setProposalTTL(uint256)", +"2ed1e521": "generateWinMatrix(uint16)", +"2ed1f26e": "unlockBatchOfAddresses(address[])", +"2ed20ec7": "Yiha()", +"2ed23a73": "_releaseTo(address)", +"2ed252cb": "toERC20(uint256,uint256,uint256)", +"2ed42bf7": "_config()", +"2ed44309": "setIcoParameters(uint256,uint256,uint256,uint256)", +"2ed4595a": "participantContributionInEth(address)", +"2ed4a2c7": "changeState(address,uint8)", +"2ed4b68a": "creditFundNIMFAAddress()", +"2ed5016a": "SolidStampRegisterAddress()", +"2ed5ca29": "recordFillOrder(bytes32,uint256,uint256)", +"2ed604c8": "secondsLive()", +"2ed73df6": "starterPackCardLevel()", +"2ed94f6c": "bulkWithdraw(address[])", +"2ed9859f": "hasSongWriterSigned(address)", +"2ed9cf65": "editPerson(address,string,string,string,uint256,uint256)", +"2edb5389": "replenishTokens(address,uint256)", +"2edcc661": "crowdsaleStartDate()", +"2edcedc6": "parkingSwitches(address)", +"2edefc26": "founderMultiSigAddress()", +"2edf8042": "collectProvisions(uint256)", +"2ee01240": "getUnitJadeStealingMultiplier(address,address,uint256)", +"2ee057ca": "deallocateItem(uint256,uint256)", +"2ee07c00": "closeEvent(uint256)", +"2ee07cbf": "AxieClockAuction(uint256)", +"2ee119cb": "demint(address,uint256)", +"2ee1e64c": "toRLPItem(bytes,bool)", +"2ee2a7af": "getContractPartner()", +"2ee3cf83": "cancelOrderByAdminWithMerchant(string,address)", +"2ee40908": "stakeFor(address,uint256)", +"2ee551bf": "RESERVED_BOUNTY_GROUP()", +"2ee56469": "cancelGoldBuyOrder()", +"2ee5d2e3": "last_forwarder_created()", +"2ee6807a": "raiseCoinsDeducted(address,uint32,uint256)", +"2ee6f8b6": "changerType()", +"2ee6fe55": "_addOwnerPlayerToTeam(uint256,address,uint256,uint256)", +"2ee79ded": "change()", +"2ee86973": "resolveHTLC(uint256,uint256,uint256,bytes32,int256,bytes32,uint8,bytes32,bytes32)", +"2ee8dda9": "allocateFoundationToken()", +"2ee92639": "purchaseCancel(address)", +"2ee94319": "RecievedEth(address,uint256)", +"2eea1efe": "getCCH_edit_20()", +"2eebdeb8": "_setStakeHolder(address,uint256)", +"2eebe94f": "weiRaisedAmount()", +"2eecbc7f": "deployMeDao(string)", +"2eecc46c": "sendTokensToInvestor()", +"2eed0079": "createMicroModule(uint256,string,uint256,uint256,uint256,uint256,uint256)", +"2eee5a3e": "totalPresaleTokensYetToAllocate()", +"2eef13cd": "changeArt(bytes32,string,string,string,string,string,address)", +"2eef3d65": "query(bytes32,string)", +"2ef01862": "subscriptionDetails(uint256)", +"2ef0a28d": "seraphims(address)", +"2ef140ef": "send(address,uint256,uint256,uint256)", +"2ef22b34": "setExpRewards(uint256,uint256)", +"2ef2b51d": "OWNER_TAKE_SHARE()", +"2ef2d55e": "channelTimeout()", +"2ef2edb8": "endICOStage1()", +"2ef345e4": "DAppSky()", +"2ef35214": "setVestingRate(uint256)", +"2ef3a7e1": "setBalancePercentageLimit(uint256)", +"2ef3accc": "getPrice(string,uint256)", +"2ef4940f": "withdrawalsVotes()", +"2ef4d922": "revertMe()", +"2ef5c784": "allTimePlayers()", +"2ef6d6c0": "countWebsite(address)", +"2ef70523": "SVDelegation()", +"2ef75ebc": "STAGES_PERCENT_RATE()", +"2ef761d3": "buyTile(uint8,uint8)", +"2ef771ae": "hodlFor(uint256)", +"2ef82db9": "getCandidatePollingResesult(address,uint256)", +"2ef875fb": "div10(uint256,uint8)", +"2ef8c22b": "FunWorldCoinToken()", +"2ef9b4aa": "EngkusTechResearch()", +"2ef9b5a7": "changeBonusMultiplier(uint256)", +"2efa3c87": "TokensSpent(address,uint256)", +"2efa79d3": "tokensFrozen()", +"2efaa460": "testActivateSale()", +"2efad59d": "EmployeeServ(address)", +"2efb3f04": "getNumberOfScams()", +"2efb77c4": "changeDates(uint256,uint256)", +"2efbb80c": "addMeaningToCovfefe(uint256,string)", +"2efc5013": "Ask(uint256,uint256,address)", +"2efcb5e0": "TransferCommissionToken(uint256)", +"2efd08df": "totalPaintingsCount()", +"2efd5632": "candyLandAddress()", +"2efeb4e5": "LogSale(address,uint256,uint256)", +"2effbada": "eligibleTestAndIncrement(address,uint256)", +"2f0019f2": "getFeatureStatus(string)", +"2f002511": "viewTotalPaid()", +"2f004218": "PERCENT_COMMISSION()", +"2f00b84a": "SECToken(uint256,string,string)", +"2f0160e7": "fromOtherCurrencies(uint256,address)", +"2f034f35": "PerformingMonthlyMinting(uint256)", +"2f038fd5": "enable(uint8)", +"2f0573d9": "DSToken(bytes32)", +"2f0579db": "_isBreedingPermitted(uint256,uint256)", +"2f0746bf": "unsetWildCardToken(uint256)", +"2f078b12": "HashGenerator()", +"2f087a28": "getTokenCap()", +"2f08acfa": "Extreme()", +"2f0989ec": "release12m()", +"2f0ae513": "calculateTotalWithdrawableTokenAmount(address,address)", +"2f0b0222": "numberOfRound()", +"2f0b15f6": "testGetUnset()", +"2f0b5cb5": "setTokenTransferPercentage(uint256,uint256)", +"2f0b9dcb": "getArray2()", +"2f0c2c7c": "getReward(uint32)", +"2f0c59e7": "DISTRIBUTION_INVESTORS()", +"2f0c9387": "TestCitySnapshot(address,uint256)", +"2f0cca79": "dataMerkle(uint256[],uint256,uint256)", +"2f0d2079": "getEventBanks(uint256)", +"2f0d8962": "ChangeFeed(bytes32,uint256)", +"2f0dbae1": "MaxICOpublicSupply()", +"2f0ddcb2": "getTechBonus2(uint256)", +"2f0e23fb": "purchaseEndTime()", +"2f0e3a6c": "status(address,address)", +"2f1017cb": "getwinnerloser()", +"2f109d2b": "afterWhtelisted(address)", +"2f113f27": "LOCK_STAKE()", +"2f121ada": "companyBalance()", +"2f12bc02": "LiquexPrivateSale()", +"2f1335cf": "splitFunds(uint256)", +"2f13b60c": "isExpired()", +"2f148f55": "showMoseEvent(uint32)", +"2f156f69": "deployTgeTeamVesting(address,uint256)", +"2f158162": "setHKHcoinAddress(address,address)", +"2f16753c": "ShellToken(uint256,string,uint8,string)", +"2f16c072": "getPeaks(uint256)", +"2f1766c5": "addCA(address,address,string,string,string,string,string,string)", +"2f17a466": "terminateSchedule(address)", +"2f186785": "showProfit(address)", +"2f18a920": "setDeputy(address)", +"2f1927cb": "prepareRoll(uint256,uint256,uint256)", +"2f194e40": "isMintDone()", +"2f1a2e72": "allocate(address,int64)", +"2f1a332a": "OwnerRandomNumber(uint256)", +"2f1a8177": "weiToBnty(uint256)", +"2f1a8b63": "modify_ICOEndDate(uint256)", +"2f1af169": "EscrowMyEther()", +"2f1afbac": "doAirdrop(address,address[],uint256[])", +"2f1c34ef": "buyStar(uint256)", +"2f1c6494": "tgeSettingsAmount()", +"2f1c935e": "setSkinContract(address)", +"2f1cae85": "isIssuable()", +"2f1cc35b": "getRoundBetNumber(uint256,uint256)", +"2f1d29fd": "HarjFarmer()", +"2f1d3e28": "sendAwardToLastWinner()", +"2f1d5a60": "setOperatorAddress(address)", +"2f1ddbe3": "nodalblockShortLink(uint256,string)", +"2f1de784": "getPoolsAllot(bytes32)", +"2f1e4968": "makeNewProposal(string,uint256)", +"2f1ee5e1": "recycleUnreceivedBonus(address,address)", +"2f1f1d43": "getownership2(uint16,uint256,uint256)", +"2f20270a": "addNewUrl(string)", +"2f2035ed": "test_feePoolShare_notTranscoder()", +"2f204237": "setupSaleContract(address)", +"2f212780": "KYCbit4()", +"2f220d7a": "executeEscrow(uint256,address)", +"2f237e82": "create(string,string,bytes)", +"2f24bdc7": "is_transaction(bytes32)", +"2f254d09": "UGVCToken()", +"2f262471": "GetPlayerCards(address)", +"2f265cf7": "totalVotesFor(bytes32)", +"2f26b5d1": "delayIcoEnd(uint256)", +"2f26f6f5": "getIsCompany(address)", +"2f2712f8": "getStat(bytes32,address)", +"2f274d91": "buyVotes(uint8)", +"2f2769d1": "assertEq(address,address,string)", +"2f2770db": "disable()", +"2f278ecb": "reverseBytes(bytes)", +"2f27b556": "card_start_minamount()", +"2f29d8c5": "elapsed()", +"2f2b348d": "setBeneficiary1(address)", +"2f2bd5ac": "testTransferCorrectlySendsTokens()", +"2f2c00f3": "PTMCrowdFund()", +"2f2d783d": "claimReward(address,address,uint256)", +"2f2d783e": "rewardRoto(address,bytes32,uint256)", +"2f2d9109": "changeAirdropTotalQty(uint256)", +"2f2dc6e2": "setCardsCount(uint256)", +"2f2e2d7f": "fstUnitPriceDenominator()", +"2f2e3cea": "userDividendsWei(address,address)", +"2f2ebe41": "setToken4Gas(uint256)", +"2f2f010c": "OCLotteryContract()", +"2f2f20c1": "INCH()", +"2f2f4859": "helloworld()", +"2f2f4a63": "buyWorldCupTeamToken(uint256)", +"2f30283e": "testSomething()", +"2f3085d6": "LEGAL_EXPENSES_TOKENS()", +"2f30c6f6": "set(uint256,address)", +"2f30cd5f": "addLockAddress(address,uint256)", +"2f310bad": "redeemToken()", +"2f318039": "isTransferable(address,address,uint256)", +"2f32013d": "Kolidat()", +"2f330041": "transfers(address,uint256[])", +"2f334131": "lastAddYear()", +"2f334652": "teamClaimed()", +"2f335a6a": "getTitulaire_Compte_9()", +"2f3423b8": "grantTokenStartNow(address,uint256,uint256,uint256)", +"2f347e48": "DigitalTicks()", +"2f34adb4": "airdropNum2()", +"2f34c645": "endBounty(address)", +"2f35a71e": "Blockchain()", +"2f366637": "buyTickets(uint256)", +"2f36cacf": "dispute(uint256,uint256[])", +"2f377902": "CandyDropOpen(bool)", +"2f379fc8": "isInStage2()", +"2f381df0": "London()", +"2f38262a": "GetBankBalance()", +"2f384523": "removeFunds(uint256)", +"2f386a8e": "sellingDisable()", +"2f38b55a": "_checkDetail(uint256,uint8)", +"2f39bf80": "LirkToken()", +"2f39f5cd": "PresaleMarket(address)", +"2f3a212e": "test_oneValidEqUint2()", +"2f3a26ee": "TransferTimeSet(uint256)", +"2f3a77fd": "narrowRoundPrizeView(uint256)", +"2f3b24d2": "GenesisManager(address,address,address,address)", +"2f3b5603": "setPayoutLimit(bool)", +"2f3c8bd1": "returnTokenBalance(address,bytes32)", +"2f3d8035": "grantVestedTokens(address,uint256,uint256,uint256)", +"2f3e5408": "takerFeePercent()", +"2f3e9bc5": "canSelfDestruct()", +"2f3f2092": "ARIONTOKEN()", +"2f3f234a": "RLCSentToETH()", +"2f3fecaa": "startOffering()", +"2f3ff501": "getDynamicElementAt(uint256)", +"2f401300": "EPAchain()", +"2f405bb7": "getCoversForPacks(uint256[])", +"2f408990": "testAccessPermissions()", +"2f430e17": "approveTx(uint8)", +"2f434748": "setMintAndBurnOwner(address)", +"2f443315": "get_liquidity_account(address)", +"2f443785": "ComputeAcornCost()", +"2f455d51": "changeRate(uint8)", +"2f45aa21": "getblockRevenuePerTicket(uint256)", +"2f4675cd": "OranguSale(uint256,uint256,uint256,uint256,uint256,address,address,uint256,uint256)", +"2f46b3cc": "getMyReport(bytes32,bytes32)", +"2f46ba70": "DAOToken(string,string,uint256)", +"2f4736da": "_canTransferBatch(uint256)", +"2f47571f": "isCapabilityPublic(address,bytes4)", +"2f475c32": "withdrawPart(address,uint256)", +"2f482935": "SFTToken()", +"2f48ab7d": "usdt()", +"2f48c4aa": "setFoundersTokensWallet(address)", +"2f48f151": "addFee()", +"2f4a81df": "howManyOwnersDecide()", +"2f4c0b08": "joinGreatHarmon(string,string)", +"2f4c3a84": "transferPlayer(uint256)", +"2f4cf60f": "MultiSigWalletWithTimeLock(address[],uint256,uint256)", +"2f4e32f5": "FlexiERC20Token()", +"2f4e4c27": "ErrorContract()", +"2f4ea4ee": "release_1()", +"2f4ee5d4": "registerThrone(bytes,uint256,address,uint256,uint256)", +"2f4f3316": "isInstantiation(address)", +"2f4fda30": "BIG_NUMBER()", +"2f512b6b": "LomeliMultilpleTokens()", +"2f520081": "setPurchaseTimestamp(uint32,uint64)", +"2f53cc96": "CHINESE_EXCHANGE_3()", +"2f53e929": "emitBurn(address,uint256,string)", +"2f540d94": "BONUS_MID()", +"2f54a61e": "setClaimerForTile(uint16,address)", +"2f54bf6e": "isOwner(address)", +"2f553d31": "isCreated(bytes32)", +"2f554288": "listPrycto2()", +"2f554d53": "agreeFromPod()", +"2f5552f5": "KAL6Token()", +"2f55745b": "getPendingCrateForUserByIndex(address,uint256)", +"2f558ba0": "setFinish(uint256)", +"2f55f125": "decreaseAllowanceOrEmtpy(address,uint256)", +"2f56dc5f": "prepareContinuousPurchase()", +"2f570a23": "test(bytes)", +"2f576f20": "doNothing()", +"2f581480": "CandyCoinBigBang()", +"2f5867b3": "changeRates(uint8,uint256)", +"2f58768f": "contractors()", +"2f591a6a": "setRateForTransaction(uint256,address,uint256)", +"2f593404": "payoutCycleInDays()", +"2f597e71": "testLongInput()", +"2f598404": "getCatDetails(bytes5)", +"2f599242": "getEvaluationByStudentID(uint32,uint64)", +"2f5a5c5b": "timegame()", +"2f5bb661": "getNextVestingEntry(address)", +"2f5c3102": "Make_Deposit()", +"2f5c5a08": "setEthealToken(address,address)", +"2f5d3916": "testControllerApproveTriggersEvent()", +"2f5e80c3": "withdrawToken(address,uint16)", +"2f5e8d29": "setDAIRate(uint256,uint256)", +"2f5ebbaa": "marketState(address,uint256)", +"2f5f3b3c": "pointer()", +"2f605106": "getSponsor(uint256,uint256)", +"2f6113dc": "assignICOState(address,uint256,uint256,uint8)", +"2f6174ef": "getSig(bytes,uint8,bytes32,bytes32)", +"2f62a6ff": "fipsRegister(uint256,address,bytes)", +"2f634a90": "getOwner(address,uint256)", +"2f635c6a": "VolumeImbalanceRecorder(address)", +"2f63e2fa": "_incrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"2f640a09": "setConfirmer(address)", +"2f646bd5": "ArmMoneyliFe()", +"2f65142c": "getTransfers()", +"2f653279": "getReceivedTrade(address,uint256)", +"2f658c3f": "Raffle(uint256)", +"2f65be54": "transferBonusEarnings()", +"2f65e086": "NardoTest1()", +"2f661946": "cliffPeriod()", +"2f668c5c": "etherFeeMin()", +"2f66d5a7": "KPOP_ITEM_CONTRACT_ADDRESS()", +"2f6701b0": "withdrawalList(bytes32[],address)", +"2f674ab9": "maybeUpdate()", +"2f677038": "grantUserRole(bytes32,string,address)", +"2f67cf56": "eth_fallback(address,bytes)", +"2f684b83": "addDecimals(uint256,uint256)", +"2f695053": "getCertifierAtIndex(uint256)", +"2f69ca13": "createCounts(bytes32,address)", +"2f69f161": "getGameResultPrice(uint256)", +"2f6a638b": "GetMaxEther()", +"2f6a6e20": "calculateMaxEggG0(uint64)", +"2f6ae467": "transferDocument(bytes,address)", +"2f6b7bbd": "Gubberment()", +"2f6b8143": "wethBalance()", +"2f6b9099": "completeOrder(address,address,address,address,bytes32,uint256)", +"2f6c493c": "unlock(address)", +"2f6dc6b3": "removeBorrowingOfferItem(uint256)", +"2f6e2711": "Int256Oracle(int256)", +"2f6e931f": "changeBurnPausedTime(uint256)", +"2f6f1c68": "speciesSymbol(uint256)", +"2f700fb6": "autoJudge()", +"2f70197c": "_getBalanceFactor(bytes32)", +"2f7146cc": "setLockingTimestampFromTo(uint256,uint256)", +"2f71d022": "updateTokenInfo(string,string)", +"2f723c7f": "RewardHoDLers()", +"2f72d697": "GCOXOWNToken(string,string,uint8,uint256)", +"2f72ffaf": "getEmployerContractsByStatus(address,address,uint256[],uint256[])", +"2f73010a": "ratePerWeiFirstPhase()", +"2f7359a3": "TOKEN_STANDARD_ERC223()", +"2f73ef91": "getFundsWalletBalance()", +"2f743591": "burnFinished()", +"2f7442bb": "transferBounty(address,uint256)", +"2f745c59": "tokenOfOwnerByIndex(address,uint256)", +"2f75a929": "extractRepository(string)", +"2f76c31d": "roundTwoLimit()", +"2f77428e": "collectdustatcontract()", +"2f774e44": "getMsgSigner(bytes32,bytes)", +"2f77688b": "TestingUseCoin(uint256,string,string)", +"2f77dba4": "tokenPerEther()", +"2f781228": "IjasCoin()", +"2f781393": "setDiscountStep(uint256)", +"2f782b32": "weiContributed()", +"2f78bab1": "LockDiv(address,uint256)", +"2f78dc14": "ErrMsg(address,string)", +"2f7907e4": "calculateBestPrecision(uint256,uint256,uint256,uint256)", +"2f7981c2": "getWealthOfUser(address,address)", +"2f798500": "clockAuctionStorage()", +"2f7a163b": "nearestKnownBlockHash()", +"2f7a407b": "exchangeFormula()", +"2f7a7192": "capFiat()", +"2f7b3677": "getMetadataUrl(uint256)", +"2f7cdb0e": "DEV_DECIMALS()", +"2f7dbc9b": "fromInt256(int256)", +"2f7f3ecf": "findNextHour(uint256,bytes)", +"2f7f7f55": "approveFee()", +"2f80324c": "EURO()", +"2f8061d4": "repayment(address,uint256,address)", +"2f815ed1": "transferToContractCustom(address,address,uint256,bytes,string)", +"2f81bc71": "multiMint(address[],uint256[])", +"2f83e16d": "_allocateTokens(address)", +"2f83f781": "fetchSuccessfulSaleProceed()", +"2f851184": "H4DAddress()", +"2f85577f": "changeACAddress(address)", +"2f85f092": "destTokensAdvisors()", +"2f86282e": "CheckGameStart(bool)", +"2f865568": "liquidate(address)", +"2f869d26": "getAssetPoolAddress(address)", +"2f86f2ee": "MAX_OPEN_SOLD()", +"2f8803bb": "addressCOO()", +"2f885f79": "trakToken()", +"2f88ae5f": "setIco3Tokens(uint256)", +"2f899fec": "Pharmatron(uint256)", +"2f8a12fe": "setMsg2(string)", +"2f8abfbe": "roundIt(uint256)", +"2f8b023d": "allowedTransferFrom(address)", +"2f8b0250": "setEndTimeIcoStage1(uint256)", +"2f8bd891": "directMint(address,uint256)", +"2f8c239f": "giveAdvisers(address,uint256)", +"2f8c98c2": "flipMovingSwitchTo(bool)", +"2f8cfe0e": "deleteResources(address[],bytes4[])", +"2f8d2d19": "BurnAssignedFees(address,address,uint256)", +"2f8de810": "tokenPriceInWei()", +"2f8e7133": "lockBBK(uint256)", +"2f8eed98": "adminTransfer(address,uint32)", +"2f8f0c92": "canDeposit(bytes32,address)", +"2f8f175c": "seal(address,address,uint256)", +"2f8f8c0b": "approveCertificate(address)", +"2f8ffce8": "allItemsWrong()", +"2f9021fd": "withdrawToCooperate(address,uint256)", +"2f90daf4": "raisedForEther()", +"2f91822c": "ETHCollector()", +"2f91b591": "RemoveMinter(address)", +"2f923c59": "tokenCapForFirstMainStage()", +"2f926732": "register(bytes32,bytes32)", +"2f92acc5": "test_4_accessRestriction_execute_shouldThrow()", +"2f92b151": "HotLove()", +"2f92f5a0": "query1_fnc(uint256,string,string,uint256)", +"2f94afba": "cao()", +"2f94e335": "_createLambo(uint256,address,uint64)", +"2f95055e": "deleteHiddenPosition(uint32,int64[2],bytes16)", +"2f95b833": "requiredStackDepth()", +"2f969d43": "MAX_UNSOLD_RATIO()", +"2f977b3f": "newTask(string,string,uint256,uint256)", +"2f978ec0": "getProviderInfo(address,uint256)", +"2f98511c": "createHistory(bytes32,address,address)", +"2f991b5a": "hasMemberAccess(address)", +"2f99c6cc": "BENEFICIARY()", +"2f9a7c22": "TransferToWaves(uint256,string)", +"2f9a8bf2": "StreamerContractChanged(address,uint256)", +"2f9b3126": "founderShare()", +"2f9b4096": "removeExternalController(address)", +"2f9c1df6": "createDeposit(address,uint256,uint256)", +"2f9cb9aa": "getClosingTime()", +"2f9ffab9": "Airstayz()", +"2fa00e58": "fipsTransfer(bytes20,address)", +"2fa05208": "minimalGoalReached()", +"2fa06ff1": "exchangesLockEndingAt()", +"2fa07bfc": "_increaseApproval(address,uint256,address)", +"2fa146d8": "officialEmail()", +"2fa1df4f": "RIG()", +"2fa241fc": "playerBook()", +"2fa267fc": "ReadBible(uint16,uint16,uint16,uint16)", +"2fa26aaa": "minimalEthers()", +"2fa30d33": "calcResolve(address,uint256,uint256)", +"2fa3a41e": "testLowestTranch()", +"2fa3e006": "CreatedToken()", +"2fa49c06": "SetTxFee(uint256,uint256)", +"2fa4f694": "setAssessorPool(uint256,address,uint256)", +"2fa553d3": "sendMinerByOwner(address,uint256)", +"2fa5620a": "Mpay(uint256,string,string)", +"2fa61cd8": "generate(address)", +"2fa6512f": "clearWalletPending()", +"2fa69585": "strikeCall()", +"2fa78393": "returnUserBalance(address,address[2],uint256[7],uint8,bytes32[2])", +"2fa7cbfb": "getExecCost(uint256)", +"2fa80164": "AgruCoin()", +"2fa8591e": "TACTICALCRUISER()", +"2fa92dde": "jackpotConditionPercent()", +"2fa94fb3": "teamTrustAccount()", +"2fa975c5": "seatsList(address,uint256)", +"2fa99791": "completeOrderBySafePeriod()", +"2faa2998": "startICO_20_December()", +"2faa3014": "uintFunc(uint256,uint256)", +"2faa5e3c": "changeMerchantAccount(uint256,address)", +"2faa9bbb": "LockClaimed(address,uint256)", +"2faad46f": "addAllowedTransactor(address)", +"2fab662a": "_decreaseMintApprovalAfterMint(address,uint256)", +"2fabc174": "multFracCeiling(uint256,uint256,uint256)", +"2fac1a54": "newOrder(bool,uint256,uint256,uint256,uint256)", +"2fac1d36": "isReadyFor(address)", +"2facc4e8": "depositGovernance(uint256,address)", +"2faccbeb": "changerProprio(address)", +"2fad380d": "burnWithDecimals(uint256,uint256)", +"2fae43dc": "m_ETHPriceLowerBound()", +"2faebb20": "getBettersArrayLength()", +"2faef47a": "AbcToken()", +"2faef4e5": "getGranteesSize()", +"2faf1895": "saveContractEvent(string,string)", +"2faf9a93": "checkUnsold()", +"2fafb11d": "get_profit_by_roll_under(uint256,uint256)", +"2fb07482": "restoreWebGift(address)", +"2fb131d4": "preicoClosed()", +"2fb1746d": "turnOnTradable()", +"2fb1b25f": "sign(uint256)", +"2fb22cfa": "ECO_SYSTEM_STAKE()", +"2fb260f6": "EthertokenDelta(address,address,address,uint256,uint256,uint256)", +"2fb27669": "preSaleComplete()", +"2fb2a061": "rateForDays(uint256)", +"2fb2bcf4": "postTwit(string)", +"2fb2f3dd": "updateFrozenToken(address)", +"2fb556f7": "tokenNeedForBonusLevel0()", +"2fb565e8": "update(uint256,uint256)", +"2fb5b5f6": "setNextSnapshotBalance(address,uint256)", +"2fb61f7d": "dispute(address,bool,uint256)", +"2fb767c5": "failSubtractWhenALessThanB()", +"2fb840f5": "transferFrom(bytes32,bytes32,uint256)", +"2fb88284": "parseRLPHeader(bytes)", +"2fb9d203": "VoteSubmitted(address,bytes8)", +"2fbaba26": "setHash(uint256,string)", +"2fbac05c": "transferManagment1(address)", +"2fbbc9c9": "calcCoinsReceived(uint256)", +"2fbbde2d": "buyDrago()", +"2fbc0bf1": "getSalePrice()", +"2fbc2449": "COLETOKEN()", +"2fbc8353": "ownerCanBurn(bool)", +"2fbcf568": "getCurrentCryptantFragmentPrice()", +"2fbd2134": "_migrateExpiredCrates()", +"2fbd2432": "transferExternalToken(address,address,uint256)", +"2fbebd38": "foo(uint256)", +"2fbf6f73": "TRNDToken()", +"2fbfbc85": "PETTCOIN()", +"2fbfc252": "changeTeamETHAddress(address)", +"2fbfc376": "HRY(uint256,string,string)", +"2fbfe951": "change_min_amount(uint256)", +"2fbfeba9": "getTokenAddressByName(string)", +"2fc0aad3": "isNumericString(string)", +"2fc15517": "kelly()", +"2fc17e40": "TdeStopped(uint256)", +"2fc17f8b": "setCompte_3(string)", +"2fc35948": "SCWhitelist()", +"2fc3f13f": "WindowPeriodClosed(address,uint256)", +"2fc4eea0": "removeName(bytes32)", +"2fc516e3": "COMMON_BUDGET_AMOUNT()", +"2fc52220": "setPOOL_edit_19(string)", +"2fc5a8ec": "Joules()", +"2fc60405": "TANK_TYPE()", +"2fc64ff7": "organizer8()", +"2fc6e8b7": "isEnd()", +"2fc71565": "setMarketplaceAddress(address,address)", +"2fc761a6": "createItem(uint256,string,address,uint256,uint256,uint256,uint256)", +"2fc77d85": "TotalETHGivenToNorthPole()", +"2fc8124d": "setSecondWallet(address)", +"2fc84de8": "XCTToken()", +"2fc8c39d": "TADPOLE_BASE_REQ()", +"2fc94ba6": "getAddressArrayLength(bytes32)", +"2fc9a415": "_emitAccessGiven(address,bytes32)", +"2fca3b0d": "TBECrowdsale()", +"2fca5414": "isTAO(address)", +"2fcaa8fa": "removePresaleHolder(address)", +"2fcb20e9": "changeReserveTeamRecipient(address)", +"2fcb6628": "_stringGas(string,string)", +"2fcd410a": "MiniPoolEdit_2()", +"2fcd6075": "BlocktekUniversity(address)", +"2fcdeba1": "fund_owner()", +"2fce1291": "EcroContract(uint256,uint256,uint256,uint256,uint256)", +"2fce1b7a": "GetSocioFromCuenta(address,address)", +"2fcf84bf": "getEthereumFromPreIco()", +"2fd0f37e": "claimConsolationPrizeLoot(uint256,address)", +"2fd1b320": "myMostRecentAssignedAudit()", +"2fd23817": "MFTU()", +"2fd3bd2e": "passFoundation()", +"2fd3dee8": "testDisputedValidMemoryAccessSequence()", +"2fd3fc9d": "bthFoundationWallet()", +"2fd463e1": "STARTMETADOLLAR()", +"2fd47643": "getRoundIssued()", +"2fd4ec28": "terminateIco()", +"2fd4f2f9": "changePreICODates(uint256,uint256)", +"2fd55265": "depositToken(address)", +"2fd5a13d": "GetClientCategory()", +"2fd5ecda": "b66AdvisorFundDepositAmt()", +"2fd61f92": "unstakeEther(uint256)", +"2fd6d40b": "getBetValueByGamble(uint8)", +"2fd949ca": "terminateContract()", +"2fd95a6f": "createGen0(uint256,uint256,uint16,bool)", +"2fd97c7d": "AllotAward()", +"2fda7166": "stopReceiveTicket()", +"2fdadc21": "sendtoA(uint256)", +"2fdae3c5": "addProposal(string)", +"2fdaf6af": "claim_tokens(address,uint256)", +"2fdb3e6c": "getBalanceETH(address)", +"2fdbb3d4": "cumAcceptedDeposits()", +"2fdc505e": "mine(bytes32)", +"2fdcfbd2": "sendToken(address,address,uint256)", +"2fdd653e": "getFortune(uint256)", +"2fdde1d4": "setUseTimeBasedBonus(bool)", +"2fddf859": "getLockedTokens_(address)", +"2fdeca37": "DEFAULT_TEXT()", +"2fdf15d5": "usernameToAddress(bytes32)", +"2fdf795a": "BOUNTY_TOKENS_PERCENT()", +"2fdfd2ae": "checkSecret()", +"2fe045fa": "initiateClaimDelegated(string,bytes32,uint8,bytes32,bytes32)", +"2fe1c0f8": "tokenTransfer(address,uint256,address[])", +"2fe20e94": "totalRestrictedTokens()", +"2fe29c78": "auctionIdToSeller(uint256)", +"2fe45a8d": "RetailSale(address,address,address,uint256,uint256,uint256,uint256)", +"2fe4b2d9": "submitSteak(address,address,bytes32)", +"2fe55632": "NexxusToken()", +"2fe69430": "TokenERC20(uint256,string,uint8,string)", +"2fe6a47c": "largestPro()", +"2fe6ecb2": "PHASE3_SUPPLY()", +"2fe71915": "request(uint256,address,address,bool)", +"2fe7a0bd": "burritoData(uint256)", +"2fe8ace3": "changeSuperOwnership(address)", +"2fe9541f": "addIssueBounty(string,uint256)", +"2fe97e3a": "approveAndCall(address,uint256,string)", +"2fe9950e": "adminSetDuel(uint256,uint256)", +"2fe99bdc": "insert(string,string,string)", +"2fe9e1a9": "change_address(uint256,address,address)", +"2fe9f821": "startRefunds()", +"2fea0c40": "revealBid(bytes32,uint256,address,address,bytes32,uint256,uint256)", +"2fea6915": "weiReqFund()", +"2fea7b22": "GetIndex(uint256,uint256,uint256)", +"2fea7b81": "getIdentity(address)", +"2fea9624": "DepositorsQty()", +"2feceb46": "extend_end_block(uint256)", +"2fed3c9e": "VoteCast(address,uint16)", +"2fed7da0": "getNextBackUserId()", +"2feda2fa": "POI()", +"2fee26ce": "addApp(address,uint32,uint32,string)", +"2feee782": "YWBToken()", +"2feef2ec": "expectedAmount()", +"2ff077be": "updateBettingOpensTime(bytes32,uint256)", +"2ff284c2": "computeFee(uint256,uint256)", +"2ff2e9dc": "INITIAL_SUPPLY()", +"2ff36e9b": "BTHBCoin()", +"2ff420ef": "CHF_CENT_PER_TOKEN()", +"2ff42757": "approveAndCall(address,address,address,uint256,bytes)", +"2ff4f24e": "createLoveStory(bytes16,bytes32,bytes32,uint256)", +"2ff50b51": "modifyEscrowPrice(uint256,uint256)", +"2ff59dec": "getEthartRevenueReward()", +"2ff59ee7": "miningIncentiveWallet()", +"2ff5e00c": "setAttaccContract(address)", +"2ff5ec3f": "armyTanksCount(uint256)", +"2ff6c55f": "DEVELOPMENT_FUND_LOCK_TIMESPAN()", +"2ff6fe76": "priceToken()", +"2ff76163": "getAdres(uint16)", +"2ff7a81f": "getAvgReportingGasPrice()", +"2ff92323": "oraclize_query(uint256,string,string[4])", +"2ff98d53": "getStageClosingTime(uint256)", +"2ff9b03a": "hackDecisive(address,uint256)", +"2ff9f017": "exchangeNominsForHavvensAtRate(uint256,uint256)", +"2ffa815b": "changeHouse_and_Owner_Addresses(address,address)", +"2ffb054e": "setMarketplaceManager(address)", +"2ffb8631": "getReleaseLockfileURI(bytes32)", +"2ffb9e64": "updateGasForXaurData(uint256,uint256)", +"2ffbf988": "packedBytes(uint256)", +"2ffc7b7e": "firstDiscountPrice()", +"2ffda1e0": "setBlackflag(uint256,bool)", +"2ffda952": "walletWithdrawTokens(uint256)", +"2ffdaa44": "BDToken()", +"2fff7bb3": "assignMultirequest(uint256)", +"2fffaa00": "Kingdom()", +"2fffb3f9": "getLockFundsReleaseTime(address)", +"2fffe0dd": "rocketArrivalTime(uint256)", +"2fffee92": "setContingencyFunds(address)", +"30007ed3": "tgeStartBlock()", +"30008b48": "pullDividendPayment(uint256)", +"30012940": "checkTeamFreezePeriodOver(address,address)", +"300182b8": "sale1(address,uint256)", +"30021bae": "SubDiv(uint256)", +"300240d6": "MAX_REGULAR()", +"300309f0": "setUserPaybackRate(uint256)", +"30043d4e": "AddedToHolder(address,uint256,uint256)", +"3004ea88": "EOSDRAM()", +"30067bc8": "setRegistrationOpen(bool)", +"3006f513": "coinSendDifferentValue(address[],uint256[])", +"30073514": "_allocation(address,address,address,address,address)", +"30074c6c": "publicSaleRaised()", +"30092ded": "changeVoteWeight(address,int256)", +"30093319": "_setRevealsCount(uint256,uint256)", +"3009a265": "isReg(address)", +"3009bc01": "claimFreeDragon()", +"300a1a7f": "mixWithStringFunc(int256,string,bool,string)", +"300a246f": "can_get(address,bytes12)", +"300a411e": "getRecording(address,uint256)", +"300abd61": "m_numMembers()", +"300ac0e9": "priceTimeToExpiration()", +"300b59da": "initTokens(address[],uint256[],bool,bool)", +"300ba0ec": "prevTweetTime()", +"300ba8ab": "_decode()", +"300c229f": "changeMaxDepositAmount(uint256)", +"300c3091": "setMigrationContractAddress(address)", +"300c7063": "SbToken()", +"300cc37a": "paySomeRewards(uint32,uint32)", +"300d55a5": "transferAdvisor1Tokens(address,uint256)", +"300d9e90": "icoOver3()", +"300e4b3c": "setminprice(uint256)", +"300e7b2d": "firstAuctionsExtendedDuration()", +"301058c9": "DURATION_PRESALE()", +"30106b17": "calckeys(uint256)", +"3010b5cd": "clearWizzType(uint256[2])", +"3010f39d": "playersToBetIndices(address,uint256)", +"3011b4c2": "CreateARTL(address,uint256)", +"30124349": "balanceLoc(address)", +"301249eb": "setPercentWeiMC(uint256)", +"3013ad89": "RangeToken()", +"3013ce29": "paymentToken()", +"30140053": "burnIcoTokens()", +"3015394c": "cancelRequest(uint256)", +"30155f5e": "setzAddress(address)", +"3015a521": "totalSignatures()", +"3016a439": "getImageBlurredAt(uint256)", +"3016e108": "removeGameMachine(address)", +"3017fe24": "callAPIVersion()", +"3018205f": "getController()", +"30183a2c": "GemstoneToken()", +"30184635": "getMinCap(address)", +"3018579e": "TokenSampleG()", +"30188fdf": "BFreeContract()", +"3018c90a": "getSubOrderStatus(uint256,address)", +"301997ae": "fundEscrow(address,uint256,uint256,uint256)", +"301a9b09": "startPhase(uint256,uint256,uint256,uint256)", +"301b7a86": "inquire_totdomains_amount()", +"301b9307": "getABsort()", +"301c42d7": "issueRateDecDuringICO()", +"301cbcb3": "STARTING_RICE()", +"301cf6e7": "payoutsPaused()", +"301d5209": "delegatecall_selfdestruct(address)", +"301d5eda": "change_start_block(uint256)", +"301dd027": "TIER_2_CAP()", +"301df7ab": "_create(address,uint256)", +"301ea971": "lockReleaseDate1Year()", +"301ecf82": "_createEtherBro(uint16,address)", +"301f0464": "ratePerEthPhase3()", +"301f2dac": "getRegionPrice(uint16)", +"301f93e0": "calculateEthereum(uint256)", +"301fbdef": "totalWeiToBeDistributed()", +"301fdb54": "getPayouts(int32,int32)", +"30203994": "stage2_price()", +"3020a18e": "setSaleEnabled(bool)", +"3020ea8a": "retrieveEarnings()", +"3020fc3b": "sendIPFS(address,address,string)", +"302155e5": "CHAToken()", +"30223c12": "del_product(uint256)", +"30226121": "CCXCrowdsale(address,address)", +"30228a12": "YouAreRichToken()", +"30230796": "setTradeABIHash(bytes32)", +"30231ea4": "canRenounce()", +"30232cb0": "buySeele(address)", +"3023641d": "removeTokenGrant(address)", +"30238687": "ALLOC_NEW_USERS()", +"3023d0c4": "Ethstick()", +"302579c6": "getWarlordChestPrice()", +"30257bf7": "getByAddress(address)", +"3026a128": "LOG_InvestorExit(address,uint256)", +"3026aedf": "getTopBidders()", +"30288f03": "setFile(string,string,uint256,string)", +"30289c61": "getDetails(address)", +"3029300f": "nextSellTime(address)", +"3029948a": "phase_2_bonus()", +"3029ba69": "withdrawBountyTokens(address,uint256)", +"302a4100": "decayedTransferFrom(address,address,uint256,address)", +"302a7ff3": "getDAdmin(bytes32)", +"302bcc57": "playerCount()", +"302bda24": "getSell(uint256,address,address)", +"302c46ba": "ReleaseTokenForTeamAdvisersPartners()", +"302cc9c3": "setroommoney(uint256)", +"302d350e": "firstChainedCallback(uint256)", +"302dfe97": "commissionPer()", +"302eb389": "transferFund()", +"302f3915": "LockFunds(address,uint256)", +"302f4303": "setRandomGenerateMethod(uint8)", +"30311898": "Account(address)", +"3032236f": "depositAndVest(address,uint256,uint256,uint256,uint256)", +"30322b12": "weiForMcr()", +"30323542": "_delOwner(address)", +"30324370": "fetchOrderByIdWithPayer(string)", +"30324f55": "DutchAuctionToBuy(address,address,address)", +"30326c17": "proposal(uint256)", +"3032f951": "advisorsBalanceMap(address)", +"30332aea": "P2()", +"3033f4d3": "pastOneHour()", +"30347537": "STARTING_CAT()", +"30366d5f": "getEventsCount()", +"3036d769": "minGasPriceGwei()", +"3037408d": "balanceOfAtTime(address,uint256)", +"3037801e": "recordNum()", +"3037cea3": "knownRoleNames(bytes32,bytes32)", +"3037e694": "disburseDividends(uint256)", +"30381f5f": "getHistoricalDelegation(uint64)", +"30389c45": "round1BonusSteps()", +"3038e357": "returnTokensToContractFrom(address)", +"3039b1ce": "changeETHLockingAddr(address)", +"3039e6f9": "CHARITY()", +"303a2372": "getDSP(address)", +"303a36e2": "getRow(uint256)", +"303a88b4": "convertRate(address,bytes32,bytes,uint256)", +"303b069f": "enableEmergencyWithdrawals()", +"303b5d3b": "toInt(string)", +"303b8144": "MobilinkToken()", +"303b9379": "SetLogFile(address)", +"303bef74": "deleteAllMessages(address)", +"303c2569": "payRakeInternal(address,uint256)", +"303c7d69": "allocatePrivateSaleTokens(uint256,uint256,uint256,address[],uint256[])", +"303d0870": "limitForChecklistId(uint8)", +"303e74df": "descriptor()", +"303ed73a": "setSkills(address,uint256,uint256[])", +"303ee989": "isPendingDeregistration(address)", +"303f5f51": "LEGEND()", +"303ff1d8": "YDTC()", +"30406423": "payJackpot()", +"30411a27": "testAddGains()", +"3041ba2a": "setForecasting(address)", +"3042b17d": "setUmkaAddress(string)", +"304318d3": "editDuration(uint256)", +"3043cbc5": "newTankType(uint256,uint256,uint32,uint32,uint32,uint32)", +"30443062": "penultimateFeePeriodStartTime()", +"3045a299": "Society(string,address)", +"3045aaf3": "Symbol()", +"3046868d": "AccountStructs(address)", +"3046fe26": "XulToken()", +"30473c2f": "getSelectedName()", +"30490e91": "processProposal(bytes32)", +"304a45c2": "getvalues()", +"304a87b7": "setOpenGroup(uint256)", +"304ab76a": "DebtTokenCreated(address,address,uint256)", +"304bac6f": "func_0A6E()", +"304c69ed": "_packItemData(address,uint256)", +"304cb3d8": "setTrusted(address,address,bool)", +"304d50b2": "addStar(address,uint8,uint8,uint16,uint8,uint8,uint8,uint256)", +"304d95a6": "RefundPoll(address,address,uint256,uint256,uint256,bool)", +"304dd754": "IsActive()", +"304ddebe": "eventSetWinner(uint256,address,uint256)", +"304de747": "MARKET_CAP_PER_ROUND()", +"304dfd33": "_onRandomFailed(bytes32)", +"304e48bb": "LogFundingReceived(address,uint256,uint256)", +"304e6ade": "setContenthash(bytes32,bytes)", +"304f34a0": "splitBid(uint256)", +"304f5027": "myUserWallet(address)", +"304f8af4": "sendBountyTokens()", +"30500684": "addEarlyBird(address,uint256)", +"3050226a": "addTransferableAddresses(address[])", +"30507451": "receiveBonus()", +"305075db": "NormalizeRanks()", +"305094ab": "ispackagesaleClosed()", +"30509bca": "claimBalance()", +"3050caa4": "calculateStake(bytes8,bytes5)", +"3050f769": "transactionsClaimed(uint256)", +"3052b75e": "changeEndTime(uint256)", +"3053aedc": "capDoublingTimestamp()", +"3054c79a": "transform()", +"3055e5e8": "JEMBUT()", +"30573dfa": "auditGuess(uint256,string,uint8,bytes,uint256)", +"305788fa": "newTransferProposal(address,string)", +"3057d5e0": "residualAmountPromille()", +"305876a7": "isRoundOver()", +"305939b0": "setReceiptAsset(address,address)", +"305997c8": "addIsSafe(uint256,uint256)", +"30599ba7": "SOSBOTTOM()", +"30599fc5": "recoverTokens(uint256)", +"3059ac30": "Escrow(address,address)", +"305a67a8": "cancelListing(uint256)", +"305a762a": "getTicketsCountByBuyer(uint256,address)", +"305a99c1": "Kemonocoin()", +"305b73d9": "configure(address,address,uint256,uint8,bytes32,bytes32)", +"305bcfab": "TrustlessTransaction_Protection_Seconds()", +"305d6d31": "stopFundRaising()", +"305e3552": "eggPrice()", +"305eae79": "updateBusinessWallet(address,address)", +"305ec69e": "finish(address)", +"305ed015": "giveReward(address)", +"305f17d5": "setCrydrController(address)", +"305fcef3": "decide()", +"306023a3": "allocateTeamTokens()", +"3061d568": "GOC()", +"3061e0ef": "changeRecovery(address,address,address)", +"3062cd8a": "purchaseETH()", +"30630699": "testDisputedWriteDifferentValueInState()", +"306387a4": "dealStatus(uint256)", +"3064061b": "checkNotSmartContract(address)", +"3064448e": "ASCCToken()", +"30659e74": "moneyBack()", +"3065a575": "setAElfDevMultisig(address)", +"3065d22c": "setVariationProbably(uint256)", +"30677b83": "multiplierFactor()", +"306781c1": "getCurrentPayoutBlock()", +"3068bffd": "grantIssuer(address)", +"30690468": "atleastZero(int256)", +"306a2ea8": "disapproveUser(address,bytes32)", +"306a401d": "delMarketMakerAddress(address,address)", +"306a8589": "p_update_mNewPlotTaxPercent(uint256)", +"306ab1ba": "forwardFundsAmount(uint256)", +"306ae57b": "standAndRebet(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,uint256,bytes32,bytes32,bytes32)", +"306b031d": "getGenerationEndAt(uint256)", +"306b0d84": "SetSharedStorage(address,address)", +"306b4dea": "addQuantityListItem(bool,address,address,uint256,uint256)", +"306c4ebe": "getCurrentTrancheVolume(uint256)", +"306c7290": "eth_balance()", +"306d4ed9": "userHasWithdrawn(address)", +"306df22d": "GPSDestination(int256,int256,uint256)", +"306e3e99": "COMPANY_SHARE()", +"3070352b": "buyAMI(string)", +"3070c38b": "checkTermination()", +"30710f01": "Crack(address,uint256,uint256)", +"30725c46": "_ownerOfPopInAnyPlatform(uint256)", +"3072cf60": "_initialized()", +"3073530b": "release_2()", +"3073c916": "cancelEscrowByProvider(uint256)", +"3073ef42": "calculateOperationFee(uint32)", +"307482cf": "POINT_ROOTNODE_ROLE()", +"3074cca7": "change_data(bytes32)", +"3074f556": "Compra_Ticket(uint256,uint256)", +"307540f6": "keys()", +"30756ab6": "MyTestToken()", +"3075f552": "getMax()", +"30762e2e": "allowManuallyBurnTokens()", +"30765517": "fechAllSumNumForCandidateByStage(uint256)", +"3076dc42": "intervalDuration()", +"3076e56a": "tankOut()", +"3077fdf1": "startNewICORound(uint256,uint256)", +"3078db6c": "transferAuthority(address)", +"307970b2": "addEntry(uint8)", +"3079ddc3": "isCanBuy()", +"307a1f46": "paramsValid()", +"307c6f8e": "job(string,string,uint256,uint256)", +"307c7a0d": "withdrawExcessBalance(address,address)", +"307ca045": "get_amount_minus_fee(uint256)", +"307d2a90": "priceEUR()", +"307e38ca": "isICAP(address)", +"307e8614": "returnUserBalance(address[2],bytes32)", +"307edff8": "endTokenSale()", +"307f35e6": "AobcToken()", +"307f6244": "changeMedia(address)", +"307f6b12": "findWinners(uint256)", +"30807e8e": "updateCSV(string,uint256)", +"3080b9c7": "SocialBlock()", +"30818189": "bonus1()", +"3082538f": "decimalMultiplier()", +"30835cc5": "BDCC()", +"3083a4f9": "withdraw_2()", +"3083ab1f": "closeContest(uint32)", +"30840c31": "testControlCreateWithParentForeignNotInUse()", +"3084e3ac": "nDEX(address,address,address,address,uint256,uint256,uint256)", +"30852db8": "newGame(uint256,uint256,uint256)", +"30859963": "getAttrVal(uint64,uint8)", +"3085c91d": "SellOrderCanceled(uint32,address)", +"30865362": "withdrawRemainingRewards()", +"308655b1": "A2AToken()", +"3086719a": "_setTokenUri(uint256,string)", +"3087110a": "donors()", +"30880441": "borrowFor(address,address,uint256)", +"308879bf": "setVoteCost(uint256)", +"308a9717": "_distribute(address)", +"308af165": "lastProcessedDay()", +"308b2fdc": "getProposalValueByIndex(uint256)", +"308b7fea": "rakeToken()", +"308c0065": "currentPrice(uint32)", +"308d6613": "getSignData(uint256,uint8)", +"308dc720": "DissolveBusiness()", +"308dccac": "EtherMinerals()", +"308e1b2f": "ltcId()", +"308e25ac": "InvestorsToken()", +"308e63f4": "TigerToken(uint256,string,string)", +"308f505b": "sellSupply()", +"308fb3ee": "GrapeToken()", +"3090bef7": "releaseLockedBalance(address)", +"3091bc8b": "acceptAndPay(bytes32,uint256[],uint256[],uint256)", +"30920505": "createInvestContract(address,uint256,uint256)", +"3092afd5": "removeMinter(address)", +"3092e73f": "getNoOfTokensTransfer(uint32,uint256)", +"30935e4b": "LogOrderCancel(address,uint256,uint256)", +"309424fe": "get_all_names()", +"30943fcf": "ownerCounter()", +"30945443": "update(address,string,string)", +"309593ee": "emergencyThaw()", +"30962d4d": "KyberContirbutorWhitelist()", +"309652ec": "getPoolMoney()", +"3097324c": "saleShare()", +"30977ab8": "recordMove(address,address)", +"3097f94c": "blok()", +"30982855": "setPublisherStake(bytes32,uint256)", +"30986dea": "timeToFinishPresale()", +"3098d33a": "payoutPartners()", +"309945ba": "collectedFees(uint256)", +"30996897": "placeBet(address)", +"309ab7e1": "getIsParticipate(address,uint256)", +"309b40b2": "liquidityStatus()", +"309b7ed3": "deleteParent(uint256)", +"309ba120": "upgradeClass(uint256)", +"309bdcf7": "createContract(uint256,string,string)", +"309c1769": "ProspectorsObligationToken()", +"309c315d": "calcTokenPriceFactor()", +"309c3ee2": "_grandPVPWinnerReward(uint256)", +"309d094b": "RELEASE_DATE()", +"309d6669": "addVerification(address,string,string)", +"309d8210": "ICOPart()", +"309d9358": "XENTToken()", +"309e078a": "destTokensBounties()", +"309e21a9": "rewardPromille()", +"309e36ef": "getNumberOfAccounts()", +"309e6005": "batchTransferEther(address[],uint256)", +"309e63e5": "SimpleConstructorInt(uint256,uint256)", +"309f7421": "buildTeamMapping(string,string,string)", +"309f955a": "updateTopicDescription(bytes15,bytes32)", +"309fcbdd": "MakeTradable(bool)", +"30a0b231": "oraclize_query(uint256,string,bytes[])", +"30a1d746": "shareholdersWalletAddress()", +"30a24abd": "create(bytes4,bytes)", +"30a3160d": "approveInternal()", +"30a35ce2": "getPOOL_edit_20()", +"30a39d5d": "preCoinSentToEther()", +"30a3ce81": "getNumChips()", +"30a55316": "smsCertifier()", +"30a65fdf": "set_buyPriceEth(uint256)", +"30a69955": "setFeeInfo(string)", +"30a69b53": "PlutocracyAchieved(string,string)", +"30a7351c": "removeFromApprovedAddress(address)", +"30a7a11c": "setRateEarlyStage1(uint256)", +"30a8b2c9": "NUM_TEAMS()", +"30a95aa7": "payService(address,uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"30a95e67": "withdraw_eth(uint256)", +"30a9ef5b": "checkTokBalance(address)", +"30aa311a": "QMQCoin()", +"30aa81c6": "getPayer()", +"30aacc0a": "setProjectAgent(address)", +"30ab0a16": "setInstructor(address,address,string,string)", +"30abac7b": "randomNext(uint256,uint256)", +"30abf433": "signBBODocument(bytes32,bytes)", +"30ac3052": "sendText(string,string)", +"30ac324b": "apply(uint256,uint256)", +"30acd249": "oneEtherInKicks()", +"30aceb89": "validateRequestParams(address[3],address,uint256[11],uint256,bytes,uint256)", +"30acedf1": "ownerFreezeTokens()", +"30ad12a6": "initializeFundraiserToken(address)", +"30adce0e": "etherReceived()", +"30ae8d0c": "Xinfin()", +"30af41b3": "getValidatorByIndex(uint256)", +"30b0e001": "airdropTokenDistribution(address,uint256)", +"30b0faab": "changeSettings(uint256,address,uint256)", +"30b2b8aa": "mintPresaleTokens(address,uint256)", +"30b3409e": "getInitialDeposit()", +"30b39a62": "withdraw(string,uint256)", +"30b3a90c": "_setCurrentPassportLogic(string)", +"30b4429e": "submitBlock(uint256,bytes)", +"30b5198f": "blockNumberUpdated()", +"30b57b1e": "player(bytes32)", +"30b66475": "VerifSignature(bytes,bytes)", +"30b66cee": "claimProxy()", +"30b69426": "calculate_eligible_token_balance(address,uint256)", +"30b7222f": "mintcoin()", +"30b751d9": "rivetzRelease(uint256)", +"30b823f7": "userGrowthAddress()", +"30b8f85d": "HSB()", +"30b9af98": "withdrawFunding()", +"30ba040a": "TOKENOMICX()", +"30ba2d4d": "eidooSigner()", +"30bb7499": "_batchActivenessUpgrade(uint256[],uint256[])", +"30bbb55e": "instructions()", +"30bd2ba9": "MassivelyMultiPlayerOnlineVideoGames()", +"30bd3eeb": "tokenRewards(address)", +"30bd60ef": "marginCall(bytes32,uint256)", +"30bdd344": "getPossibleWinAmount(uint256,uint256)", +"30bdf202": "RobinHood()", +"30be5990": "updateThirdChangeBlock(uint256)", +"30bf00cd": "mintFresh(address,uint256,int256)", +"30bf2d3e": "whaleBalance()", +"30bfeded": "EffectAdded(uint256,uint256[])", +"30c0f8d6": "scheduleTransaction(address,bytes)", +"30c2927d": "concludeUFT()", +"30c2fb04": "UserAuthManager(address)", +"30c308d8": "testInsertCase()", +"30c30a50": "authorizeMintFulfiller(address)", +"30c33da7": "_addPresale(uint256,uint256)", +"30c3eaa8": "grant()", +"30c47f77": "getEtherCoinPrice()", +"30c5375e": "ConstructHuntStart()", +"30c5a614": "ethereumToTokens_(uint256,uint256)", +"30c74e04": "tokenWithdraw()", +"30c8a488": "ERCToken()", +"30c8f372": "getTrustedShopCount()", +"30c93307": "GetPermissionIdx(uint256)", +"30c97068": "plockFlag()", +"30ca0a53": "DELEGATION_HASH_EIP712()", +"30cb14d2": "pop(bool)", +"30cc1d18": "airDropShadowTag()", +"30cc248e": "increaseProfit()", +"30ccc891": "testTransferHandlesNegativeAmountRequest()", +"30ccebb5": "getStatus(address)", +"30cd90b8": "transferToAddress(address,address,uint256,bytes)", +"30cd9ac6": "TokenAuctionCompleted(uint256,address,address,uint256)", +"30cdc195": "xclusivecoinSupply()", +"30cdcc63": "MAX_ISSUED_FROM_OTHER_CURRENCIES()", +"30cddc83": "checkIfCustodiesServedETH(address[])", +"30ce7b5d": "generateWinNumber()", +"30ce8bd5": "_rightChild(uint8)", +"30ced655": "EventRandomLedgerRevealed(address,uint256,uint256,uint256,address)", +"30cf7af6": "FreeZombieCount()", +"30cfac6c": "assignTo(uint256,address,uint256)", +"30d02d83": "batchWithdraw(uint256,uint256)", +"30d07d61": "getParticipantName(uint256,uint256)", +"30d12640": "disableWithdrawal()", +"30d15b0a": "lockInQuarterFinalPrize()", +"30d1c191": "MetaPoc(address)", +"30d2219b": "add(string,string,string,string,string,bytes32)", +"30d2474f": "buy1ticket()", +"30d281e0": "getChannelInfo()", +"30d323ae": "NHC()", +"30d4b967": "Octogram()", +"30d4d8d0": "_verifyHistoryInputOrRevert(bytes32,bytes32,bytes32,uint256,address)", +"30d500bf": "CFO()", +"30d636a0": "SmartVerifying()", +"30d65b72": "getPaymentsFor(address)", +"30d68214": "transactionReplay(address,uint256)", +"30d86516": "verifyTransferSignature(bytes32,address,uint8,bytes32,bytes32)", +"30d88a9e": "DISPLAY_VIDEO()", +"30d9161d": "cancelCreatorAuction(uint40)", +"30da4684": "buyPriceFinal()", +"30db7654": "activeBuy()", +"30dbb4e4": "isUnlocked(address,uint256)", +"30dce923": "getDeactivatedList(address)", +"30dcf0e8": "calculatedTokens(address,uint256)", +"30dd6a42": "totalSoldToken()", +"30dd9ee4": "confirmMinerQuest(address)", +"30de7e88": "FINXToken()", +"30df2c47": "currentSeller()", +"30df7727": "canRemove()", +"30dfc62f": "fundValueCount()", +"30dfe1da": "getTransactionCount(bool)", +"30e0789e": "_transfer(address,address,uint256)", +"30e07be0": "getMaxAmountToWager(uint256)", +"30e08a6e": "adjustMinter(address,bool,int256)", +"30e0f7e9": "setToppingUpBankroll(bool)", +"30e1e4e5": "freeze(address,uint256,uint256)", +"30e1f16f": "claimDividendAll()", +"30e26cb8": "disableBundling()", +"30e290e4": "Twitter()", +"30e34360": "setValue(bytes32,bytes15)", +"30e44278": "howVotesHasDispute(uint256)", +"30e45c14": "preSaleHasEnded()", +"30e4f9aa": "contractbalance()", +"30e57b67": "getNumberOfCrySolObjects()", +"30e5be52": "Prototype()", +"30e656d8": "addAnimal(uint256,bytes32,uint8)", +"30e6570b": "BucketSell(bytes32,uint256,address,uint256)", +"30e664f6": "getBuy()", +"30e6c333": "producedGoldCaps()", +"30e6d8d3": "addInitialInvestor(address)", +"30e7002c": "POCN()", +"30e76dae": "getContractEtherBalance()", +"30e77c75": "EthTranchePricing(uint256[])", +"30e804d1": "withdrawFromProject(address,address,uint256)", +"30e80864": "setTrustedAddr(address)", +"30e82803": "balanceOfByPartition(bytes32,address)", +"30e8b963": "reserveMember()", +"30e9c341": "updateTimeLock(uint256)", +"30e9f6ed": "STATUS_NO_DEAL()", +"30ea55a0": "updateEventStartsTime(bytes32,uint256)", +"30eaa9b5": "priceIncrease_20_February()", +"30eb4934": "_validateRefundTimestamp(uint256)", +"30eb4ba8": "setHoldDuration(uint256)", +"30ebf88c": "createGuess(uint256,uint256,string,uint8,uint256,uint256,uint256[],bytes32[],uint256)", +"30ec0e2b": "setHolder(address,address,address)", +"30ec98a1": "OKFToken()", +"30ece116": "setOpeningTime()", +"30ed54ed": "setVestingToken(address,address)", +"30ee776c": "StopTransferToken()", +"30ef3d56": "takeNumber(uint256)", +"30efac4e": "changeCardPrice(uint256)", +"30efb8d3": "doUnpause()", +"30f1154f": "updateNodeIPFSHash(bytes)", +"30f12642": "createContractPreciousForEdition(address,uint256,string)", +"30f1fe82": "checkLength(string)", +"30f20847": "CandyBox()", +"30f24455": "_getProductShopInfo(uint256)", +"30f3f0db": "increase(uint256)", +"30f46b70": "power(uint8,uint8,uint8,uint8[176])", +"30f4babb": "Fetch_User_Profile(uint32)", +"30f4f396": "UTBTokenTest(uint256,string,string)", +"30f4f4bb": "getMarketData(bytes32)", +"30f56d21": "RoundEndTime()", +"30f59c1b": "lastTicketBought(uint256)", +"30f6716f": "HFCoin()", +"30f6eb16": "mintedForAccountInBlock(address,uint256)", +"30f75890": "MilestonesEntity()", +"30f7cf80": "stox()", +"30f7f148": "ONEPAY()", +"30f857f3": "addPrivateSaleWithMonthlyLockup(address,uint256[],uint256)", +"30fa27cc": "_BTC()", +"30fa9ef3": "SantimentWhiteList()", +"30faa3e9": "compareHands(uint8,uint8)", +"30fb641b": "PurchaseFailed(address,uint256,uint8)", +"30fb6bfb": "setMessage(uint16,string)", +"30fb7541": "_createSkull(uint256,uint256,uint256,uint256,address)", +"30fba22f": "changeManipulatorAddress(address,bool)", +"30fbe411": "endIco3()", +"30fd300f": "registerBytes32(address,bytes32)", +"30fd7696": "createLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", +"30fe86b7": "declarePulicOfferingPlan(uint256,uint256)", +"30fee9b1": "setICOtime(uint256,uint256)", +"30ff2ad5": "needVerifiedAccount(bool)", +"31002556": "getAmountToGive(bytes,uint256)", +"310092b9": "REFUND_TIME()", +"3100ef7b": "Fulcrum()", +"3101170b": "addPixelPayable(uint256,uint256,uint256,uint256,uint256)", +"31014853": "buySWL()", +"3101ab7f": "confirmEjectment()", +"3102b21a": "setAllocation(address[],uint256[])", +"3102be4c": "ownerHistoryOf(uint256)", +"3102deb7": "SetPlayerBetInfo(uint8,address,uint256,uint8)", +"3103fa26": "firePaidProposalEvent(address,uint256)", +"310441fa": "payees(address)", +"31047973": "lightpool()", +"3104b21a": "unApprove(address,uint256)", +"3106aa80": "getLLV_edit_21()", +"3106e50e": "joinBet()", +"3106fea0": "voteOnProposal(uint256,bool,uint256)", +"31076417": "setTokenUSDRate(uint256)", +"310774a3": "setContractPreICO(address,address)", +"310781e7": "LogCertificationDbRegistered(address)", +"310815ee": "setDesignatedReporterShowed(bool)", +"31085c5f": "getAddressByNickname(string)", +"31088032": "MTOKEN()", +"310883a8": "player2Timestamp()", +"3108bd87": "voteNoLockBatch(address[],uint256[])", +"3108f0d7": "isNotZero(uint256,string)", +"310b065b": "cerotest()", +"310bc5fc": "newAsset(uint256,uint256,uint256,bytes32,bytes32,uint256,bytes32)", +"310bd74b": "reset(uint256)", +"310c0c1e": "minRollUnder()", +"310c87cc": "NFTAddress()", +"310ce4e2": "execute(bytes32,address,int256)", +"310d3f69": "token_description()", +"310e5ce7": "isBreedingMarket()", +"310ec4a7": "setAllowance(address,uint256)", +"310efb48": "setResult(uint256,uint256)", +"310eff5d": "pageByGroup(string,uint256)", +"310f4cdd": "mint(uint256,string,uint256,uint256,address)", +"3110235a": "maxInvest()", +"311028af": "initialTotalSupply()", +"311104f3": "getMintRequestsLength()", +"31119b4d": "changeDeveloper(address)", +"3111dcfd": "_nextAmount(uint8,uint256,uint256,uint256,uint256,uint256)", +"311277c1": "PHASE3_RATE()", +"3112fb6e": "BackToLife()", +"311325bd": "totalPledgedFees()", +"31134651": "donateToLovers(bytes32)", +"311385f4": "oraclize_query(string,bytes[3],uint256)", +"3113b8fa": "initDebris(bytes32,uint256,uint8)", +"311515a3": "disableInterface(string)", +"311551ad": "_getCalculationStartDate(bytes32)", +"311551d7": "MasternodeMinedTokens(address,uint256)", +"31159923": "isAllocatedICO()", +"3115b4c4": "bulkStoreHeader(bytes,uint256)", +"3115c3ee": "exploreEMONTFee()", +"3115d2ce": "ZitKOIN()", +"31170c0e": "Joyso(address,address)", +"3117d6bb": "request(bytes32,string,string)", +"31184dc3": "get2(uint256)", +"3118879a": "removeSurvey(bytes32)", +"3118dc71": "aSites(uint256)", +"3119255c": "setMinBetPerTx(uint256)", +"31198d19": "transferEthFromContract(address,uint256)", +"311a6c56": "rule(uint256,uint256)", +"311a985f": "testNotEnoughMemory()", +"311b2e98": "totalBetsMade()", +"311bcda6": "stage1Sale()", +"311c2644": "ironTokensaleRunning()", +"311d5a2a": "recordBalance(address)", +"311fb64f": "countInvestorsRefunded()", +"3120cefa": "NickoinToken()", +"31212a6b": "unicornRanchAddress()", +"3121369d": "validateRequiredStackDepth(uint256)", +"3121c7c0": "buyMultiplier()", +"3121db1c": "setName(address,string)", +"312212c1": "stoptransfer()", +"312220bc": "payoutQuickBonus(address)", +"312253ae": "newOption(uint256,uint256,bytes32,bytes32)", +"31225ad1": "icoThreshold3()", +"31226f71": "writeMerchandises(uint8,string)", +"3123016d": "calcCostLevel(int256,int256[],uint256)", +"31230e23": "createWithParent(bytes32,bytes32,bytes32)", +"31232cd3": "pre_amount_stages(uint256)", +"312386b7": "techDevelopmentEthWallet()", +"3123bd9d": "memberProfitShare()", +"3124167b": "_getTokenAmount(uint256,bool,address,address)", +"312452b3": "mLoadAndReturn(uint256)", +"3125443d": "secondChangeBlock()", +"31277306": "buyByEth(address,uint256)", +"3128012a": "logEthDeposit(address,address,uint256)", +"31288397": "payWithoutChecksum(uint128,address)", +"3128d1be": "buyName(string)", +"312975a6": "setReservedHolder(address,address,address)", +"312983dc": "LogForkAnnounced(string,string,uint256)", +"3129be35": "calculateCoinsPerWeiAndUpdateAvailableIcoCoins(uint256)", +"3129e6d4": "RATE_SALESTAGE3()", +"3129e773": "getItem(uint256)", +"312ad4b9": "banThreshold()", +"312c0684": "Organicco()", +"312cba69": "EternalStorageProxyForPayinMultisender(address)", +"312dae8a": "changeCrowdsaleClosingTime(uint256)", +"312defb4": "INITIAL_ENDTIME()", +"312df321": "p_update_mRefPercent(uint256)", +"312f8b19": "blockedTime(uint256)", +"31302244": "approveAsInvestor(address,int256)", +"3130e89d": "EtherShot()", +"313138e1": "tuneLambo(uint256,uint256)", +"313186e7": "_calculateTotalLockedBalance(address)", +"3131d8de": "etherflipContract()", +"31324b0a": "IOXOwned()", +"3132605d": "DinoToken(uint256)", +"313354dc": "maxSellable()", +"3133f2a7": "outstandingBalance()", +"31347482": "CSELToken(uint256,string,string)", +"3134e2e1": "_setCollectRoundLength(uint256)", +"3134e9be": "verifyLinkPrivateKey(address,address,address,address,uint8,bytes32,bytes32)", +"3134f4f1": "SpecialRatedCrowdsale()", +"3135471d": "privateEtherFunded()", +"3135ed16": "race_start_block()", +"313602d4": "claimRemainingTokens()", +"31361399": "setICODate(uint256)", +"31363c86": "esteem(bytes32,string,address)", +"3136fa86": "NeuroProtect()", +"3136fbb8": "totalBaseLareSoldInMainSale()", +"31375242": "ownerSetTreasury(address)", +"31378811": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[])", +"3137f3d4": "FhnwToken()", +"31380c89": "TokenSale()", +"3138d328": "gameMining(address,uint256)", +"3138d8d5": "Bid(uint256,address,uint256,uint256)", +"3138ee5c": "getPermittedContracts()", +"31391828": "_computeTournamentIncentiveReward(uint256,uint256)", +"31399b4d": "indexOfOperator(address)", +"3139c691": "_isInWhiteAddresses(address)", +"313a9204": "addPurchased(address,address,uint256)", +"313aaf96": "Double(bytes32,uint8)", +"313b7b19": "finance()", +"313c4093": "newExit(address,uint256)", +"313ce567": "decimals()", +"313d98f3": "getTokensTo(uint256,address)", +"313dab20": "treasuryBalance()", +"313f5a57": "tradeAirswap(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"313f944f": "externalPurchase(address,uint256)", +"313fc3fc": "getMyRevenue(uint256)", +"314094c2": "devfee()", +"3140b09e": "distributeBonusTokens()", +"314312d3": "setEtherDeltaExecutor(address)", +"31434041": "burnSTCDR(uint256,uint256)", +"3143d97c": "setTimeLock(uint256,uint256)", +"3143fd60": "dev_allocation()", +"314475b2": "TokenEntity()", +"31447a32": "KeplerTokenCrowdsale(uint256,address,address)", +"3144c859": "executeCode(bytes)", +"31462b96": "the_nominal_annual_interest_rate()", +"3146a6bb": "transferTeam(address,uint256)", +"3146d282": "HyperTestToken()", +"31477b9b": "getString(bytes32,bytes32)", +"31483bdc": "PushToken()", +"314848fa": "CICoin()", +"3148ac62": "InitialRateChange(uint256)", +"3148f14f": "modExp(uint256,uint256,uint256)", +"3149694a": "burnHackingAmount(address,string)", +"314989b2": "SimplePHXSalesContract()", +"3149c440": "transferDomain(bytes8,string,address)", +"314a05db": "ownerRetrieveContractConfig2()", +"314a522e": "getTermsContractParameters(bytes32)", +"314aabb5": "EthDice50()", +"314cd12c": "createPromoToken(uint256,address)", +"314dd783": "GoldiamICO()", +"314e0fb6": "scheduleTransaction(address,bytes,uint256[3],uint256)", +"314e39c3": "trustContract(address)", +"314e99a2": "abdicate()", +"314ec2e5": "set_sale_owner(address,bool)", +"314ef8cb": "Besiktas()", +"31503ec4": "setFeeWalletAddress(address)", +"3150456e": "GenChipIndex(uint256,uint8,uint256[],uint256[],uint256[])", +"3150a7da": "HarvestedBabyBrain()", +"3150efbd": "beneficiaryMultisig()", +"31511e61": "getAffiliateCount()", +"31513039": "transferTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"3151609e": "setMetadata(uint256,bytes32)", +"3151ecfc": "myDividends()", +"3152dd00": "fundingActive()", +"31543cf4": "getTemplate(uint256)", +"3154d790": "rentByAtom(uint256,uint256)", +"3155625c": "setCleide(uint256)", +"3155c856": "getTotalF5()", +"31561b0d": "isGauntletExpired(address)", +"3156560e": "setApprover(address)", +"31577cc0": "getModuleIDByAddress(address)", +"3157be49": "imageVerified()", +"3157d347": "nonVestedTokens(uint64)", +"31580446": "acceptDividends(uint256)", +"3158923d": "setReferralshipAddr(address)", +"3158c52b": "isSoftCapAchieved(uint256)", +"3158f643": "ico1Ended()", +"315a095d": "withdrawTokens(uint256)", +"315a0a09": "BasicForecasting(address,uint256,address,address,address)", +"315a6001": "purchaseUniqueSpinner(string)", +"315a6d65": "withdrawTeamToken(address)", +"315ad5ce": "resetGroupInfo(uint256)", +"315b86da": "MNPYToken()", +"315ccd21": "MAX_ETHER()", +"315d142d": "GayCoin()", +"315d758f": "_setERC20compatibility(bool)", +"315e2f1b": "setTestString(string)", +"315e3124": "pack(bytes4,address)", +"315e6c0a": "UpgradedContract(uint256,address,address)", +"315ebe81": "LockedOutTokens(address,address,uint256,uint8,uint256,uint256)", +"315f81c5": "useVaults(uint256,uint256)", +"315fd022": "MyToken(uint256,uint256,string,string)", +"315fdea3": "TreasureChest()", +"315fe684": "getMyPrize()", +"31601d09": "AuctionCreated(uint256,uint256,uint256,address)", +"31606828": "registrationDeposit()", +"3160d63b": "removeSupport(address)", +"31616395": "crowdsaleContract()", +"3162360d": "_emitBoardRatingGiven(address,uint256,uint8)", +"31629388": "setPendingValue(uint256,bytes32)", +"31638ced": "getDatasetByIndex(uint256)", +"3163b41a": "AdjustableRoundsManager(address)", +"31641629": "releaseSomeKims(uint256)", +"31649233": "allocatedTotal()", +"316524e5": "setGene(uint256,bytes)", +"31657926": "ticketsOf(address)", +"3165a051": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16,bytes32)", +"3165b26e": "transferOnBehalf(address,uint256,uint256,uint8,bytes32,bytes32)", +"31666144": "BTCproxy()", +"31666156": "latestReferenceBlockNumber()", +"3166e133": "Metropolis()", +"3166f49f": "balances_for_refund(address)", +"31670619": "GROWCHAIN()", +"31670ea7": "resetWithdrawEtherToValues()", +"31671a02": "TokenClaim(address,address,uint256,uint256)", +"31671f57": "Litecoinprivate()", +"31677980": "migrationCompleted()", +"3167e9d2": "infoUrl()", +"316866bf": "getRatingsForAddress(address)", +"3168e98a": "getExtensionFor(bytes4)", +"316943cc": "transferExtOwnership(address)", +"31694d6f": "TEAM_TOKENS_SUPPLY()", +"3169ff3e": "LooneyLottery()", +"316a0131": "viewWinningOption()", +"316b08a0": "scheduleTransaction(address,bytes,uint256[7],uint256)", +"316b13b4": "setMemberContract(address)", +"316b8cab": "Oogroll()", +"316bc682": "setKYCLockupIgnoring(bool)", +"316cb1b4": "withdrawKittenCoins()", +"316db7f2": "updateInfo(uint256)", +"316e539e": "currentStanding()", +"316f2f06": "requestUnclaimed()", +"316fb7c4": "updateGoal(uint256)", +"316fda0f": "cycleCount()", +"317053f8": "setStringMember(string)", +"31707a05": "initOwner(address,address)", +"31711884": "tokenRate()", +"31711abe": "bookkeep(address,uint256,uint256)", +"31719c69": "lastPriceSetDate()", +"31723abd": "DMTokenC()", +"31729a45": "setCommission(address,uint256)", +"31748401": "_investorAddresses(uint256)", +"3174cc87": "refundToBuyersIfSoftCapNotReached()", +"31757f2e": "collisionCount()", +"3176bd18": "MyTestingToken()", +"3176d373": "updatePriceFci(uint256,uint256)", +"3176e734": "addHiddenPosition(uint32,bytes32)", +"3176f912": "getPlayersBattlePower(address,address)", +"3177029f": "approveAndCall(address,uint256)", +"3177b83a": "isCustomerHasACC(address)", +"317830b4": "crowdsalePaused()", +"31787b91": "maxIcoDuration()", +"31798893": "DistributedSoFar()", +"317a71ea": "_removePendingRequestId(uint32)", +"317ab6dc": "getChampsCount()", +"317b0b77": "_setCloseFactor(uint256)", +"317b4b76": "setPreIcoMin(uint256)", +"317c00be": "maxTokensPerArticle()", +"317c0ae9": "tokensByZecTx(string)", +"317c1291": "isCrowdFundActive()", +"317cd9fb": "setethtoken(address)", +"317d5d9b": "rand(uint32)", +"317d7a2b": "depositInfo(uint256)", +"317d9453": "getContractTokenBalance()", +"317ebc79": "scoreTeams(uint32[],int32[],uint32[])", +"317ec08b": "removeMaliciousValidator(address)", +"317ed7dc": "rebateTwoFenzi_()", +"317ffcf2": "getCreateUnicornPrice()", +"31806aaf": "unlockBalanceByKey(uint256,uint256)", +"318077a1": "Logo(address,address,string)", +"31809eac": "dayAfterInMinutes()", +"3182c3aa": "createSale(uint256,uint256,uint256,string,uint256)", +"31836cb9": "testMiddleTranch()", +"31839753": "getVolumeBonusAmount(uint256,uint256)", +"3183a55c": "Alchemy(uint256,uint256)", +"3183ef3d": "_release(address)", +"31845f7d": "setPublic(uint256)", +"31852177": "ConsToken()", +"31852a02": "allocate6ProjectToken()", +"31859556": "startPreico()", +"3185a61e": "getSellOrder(uint80)", +"31861423": "_deleteAllPackedRevisionTimestamps(bytes20)", +"3186f390": "tokensToPartner()", +"3187878b": "Follor()", +"31885119": "mintSelf()", +"3188949a": "DIT()", +"3188c5b1": "updateTotalChild(address,address)", +"3188da5f": "meltCoin(address,uint256)", +"3188ed13": "UNSOLD_ALLOCATION_SIZE()", +"3189418f": "connect_to_nodelist()", +"318992d0": "RewireToken()", +"318a3fee": "relayTx(bytes,int256,int256[],int256,int256)", +"318b526c": "AIGInvestment()", +"318cbe20": "BountyBG()", +"318dbcae": "releaseFundsBuyer()", +"318e6c78": "getAdminAddress(address,address)", +"318f0fe9": "acceptRequest(address,address)", +"318fd7e4": "HomeChainToken(address)", +"318fd93d": "registerSeller(string,string)", +"31906ebd": "airdropTotal(address)", +"3190abc0": "addCustomer(string,string)", +"3192164f": "idle()", +"31921cad": "headerColor()", +"319288d8": "setNVTface(address)", +"3192b995": "developer_crowdsale_text(string)", +"3192cccb": "queryTokenGrant(address)", +"31933916": "getMessageCount()", +"3193c749": "placeBet(uint256,uint256,uint256,int256)", +"31950032": "createContract(bytes32,uint16,bytes8,uint256,uint32,string,uint32,uint64[],bytes8[],uint32,bytes32)", +"319609fa": "EtherPiggyBank()", +"31970bd8": "nextRangeID()", +"31978b99": "changeBoardMetadata(bytes32,bytes32,string)", +"3197cbb6": "endTime()", +"31985b51": "sendGiftCard(address,address)", +"3198a38f": "findAllCliWithPendingTask(address)", +"3198acad": "Billionsgame()", +"319983f8": "FoundationSupply()", +"31999749": "getTimePeriodsUsed(uint256)", +"319a2494": "getBlockOf(address)", +"319a30d4": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"319a9395": "setGlobalLock(bool)", +"319ae4b2": "spaceCount()", +"319af333": "log(string,address)", +"319b0cd2": "calculateRate(uint256)", +"319b0e75": "getTotalInvested(address)", +"319c068c": "current_round()", +"319c33cc": "setOrganization(string)", +"319c7748": "_KiwiToken()", +"319dac48": "polishRoughStone(uint256)", +"319db3be": "advisorWallet()", +"319df3bf": "icoManager()", +"319f0852": "MSCTToken(uint256,string,string)", +"319f21b6": "placeGame(uint8,uint256,uint256,uint8,bytes32,bytes32)", +"319f3930": "mintFraCoins(uint256)", +"319f7700": "SealCrowdsale()", +"319f9887": "SnowdenAffect()", +"31a02bce": "requestMint(address,uint256)", +"31a06772": "scrap(uint256)", +"31a079ca": "ArtexToken()", +"31a14db3": "getParticipantName(bytes32)", +"31a2aba8": "create(address,uint256,uint256,address,address,address)", +"31a360b4": "LUVITOKEN()", +"31a36424": "getAllAdmin()", +"31a38c89": "executed()", +"31a3a506": "closeFunding()", +"31a3b36f": "blockDotTimestamp()", +"31a3b873": "ICO_MIN_CAP()", +"31a40b62": "delAuthorized(address)", +"31a51f46": "getTransactionConfirms(bytes32,uint256)", +"31a642db": "getTransferInfoValue(address,uint256)", +"31a73991": "GetUserIdByAddress(address)", +"31a76bca": "FOUNDERS_VESTING_CLIFF()", +"31a7d4c2": "LogPause(uint256,bool)", +"31a83ca2": "oraclize_randomDS_setCommitment(bytes32,bytes32)", +"31a8aeb3": "stakeFrom(address,uint256)", +"31a95c7a": "redeemTokens(address,address,uint256)", +"31a97ff0": "noteInitialReportingGasPrice()", +"31a9b2f2": "maximumPurchase()", +"31aa01c4": "contributed2(address)", +"31aa91fc": "completeContribution(address)", +"31aaa74a": "accountParent(address)", +"31ab4066": "testAuthorityTryAuth()", +"31ab6055": "TMCoin()", +"31abdd2a": "calculateEthValueFromTokens(uint256,uint256)", +"31ac7253": "releaseState3()", +"31ac76c7": "getSiteTokenLength(uint256)", +"31ad6b62": "sendToEthertoteDevelopmentWallet()", +"31ad836e": "Flabba()", +"31adba2f": "victimsCount()", +"31ae0019": "KissBTC()", +"31ae450b": "getAdmins()", +"31ae6b6e": "isFactProviderInWhitelist(address,address)", +"31af56ed": "transTo(address,address,uint256)", +"31afa55f": "decreaseMonsterExp(uint64,uint32)", +"31b0795c": "registerAddress(address,address)", +"31b259cf": "setUser(address,address,string,string,string,bytes32)", +"31b27c44": "DeusMarketplace(address,address)", +"31b28664": "PAGE_SIZE()", +"31b29629": "ownerAddBankroll()", +"31b2d49c": "cancelOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"31b31b88": "setTokenFee(uint256)", +"31b36c45": "CHECKgamberTwo()", +"31b39a56": "addWalletConfig(uint256,uint256,uint256,uint256)", +"31b3eb94": "withdrawPayments(address)", +"31b4784e": "lastUpdateOverall()", +"31b48f86": "setPeriods(uint32,uint256)", +"31b57b46": "initialize(address,address,bytes32,address,int256,bytes32,address,int256,bytes32,uint256)", +"31b59508": "LDIT()", +"31b5da2a": "numMC()", +"31b61ece": "getAllLeftHand()", +"31b62fae": "GetCardInfo(uint32)", +"31b6421e": "Approve(uint256,bool)", +"31b77da4": "getEmptyIndex()", +"31b7a196": "emitGenericLog(string,string)", +"31b7c458": "claimedAirdropTokens()", +"31b8b100": "Static()", +"31b93ae6": "MIN_PRESALE2()", +"31b97e45": "addGame(bytes32,bytes32)", +"31b9d81d": "kscBatchTransferToEcosystem(address,address[],uint256[],uint256,uint256[],string)", +"31ba7ede": "create(address,bytes32,address,bytes32,bytes32,address,bytes32)", +"31baa8ae": "getCitizenCharacteristics(uint256)", +"31bab608": "getVersionSelectors(bytes32,bytes32,bytes32)", +"31bac434": "unpauseMint(uint256)", +"31bae156": "getPartialAmountRoundedUp(uint256,uint256,uint256)", +"31bbb695": "takeCapital()", +"31bcce1c": "CryptoAtoms()", +"31bcd2b7": "sendTokens(uint256,uint256)", +"31bd1fa5": "levAddress()", +"31be23e4": "getLotteriesLength()", +"31be6985": "testBitXorSuccess()", +"31be6a17": "addNewGroup(bytes32,uint256,uint256)", +"31beedd9": "setOWhitelist(address[])", +"31bf0667": "tokensaleWallet()", +"31bf0b42": "setSB(uint256,uint16)", +"31c0018b": "listApi(uint256,bytes32,bytes32,string,string)", +"31c05b8f": "getWalletAddress(bytes8)", +"31c15301": "maxRandom(uint256,address,uint8)", +"31c1eea4": "delCEx(address)", +"31c29c25": "newContribution(address,uint256)", +"31c2b6e6": "animator()", +"31c2bd0b": "propose(address,bytes,uint256)", +"31c33669": "GetChequeInfo(string)", +"31c359fa": "getReferralAddress()", +"31c3e2c9": "VotingProxy(address,address)", +"31c3e456": "update(string,string,string)", +"31c420d4": "unfreezeTransfers()", +"31c42ca6": "testSell()", +"31c571f5": "setLastStellar(address,uint256,uint256,uint256)", +"31c5e407": "PaymentSubmitted(address,bytes8,uint256)", +"31c5e56b": "init(address,uint256,uint256,uint256,uint256,uint256,uint8)", +"31c6c4cf": "transferFromWithReference(address,address,uint256,bytes32,string)", +"31c78498": "Metadollar()", +"31c89d3e": "FromQueue(address,address)", +"31c91117": "withdrawAllEther()", +"31c9472a": "constantname()", +"31ca0bae": "DAO(address,uint256)", +"31ca208c": "greylist(address)", +"31ca4340": "GetTokenData(uint256)", +"31ca6b67": "setWinnerManually(uint256)", +"31cb27d7": "processHandEndSplit(uint256,uint256)", +"31cba838": "BOUNTY_ADDRESS()", +"31cbf288": "createContract(string,address,address,string)", +"31cbf5e3": "pay(uint256,address)", +"31ce6b47": "getTicketCounter()", +"31cfcf84": "IDAGToken()", +"31d03594": "getOfferPrice(uint256)", +"31d0e3f5": "setChainlinkToken(address)", +"31d1c995": "_batch1_icosaleStartTimestamp()", +"31d29af1": "getMyWallet(address)", +"31d2f891": "crowdsaleAddress()", +"31d31647": "hasSenderVoted(uint256)", +"31d3518a": "IvoryToken()", +"31d35cb2": "getDayEthIn(uint256)", +"31d36cf0": "relaySellerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"31d397ef": "initialWallet()", +"31d4116f": "nextsize()", +"31d41325": "isMonethaAddress(address)", +"31d42bf2": "addBlackAccount(address)", +"31d4ac45": "bookWithLif(uint256,uint256,bytes,string,uint256[],bytes32)", +"31d4ed2e": "_isUnderLimit()", +"31d4fad4": "refundPayment(uint256,address,string)", +"31d6183b": "tokensToEth(uint256,uint256)", +"31d67353": "transfer_data(address,uint256,string)", +"31d694a0": "NEBC()", +"31d78a50": "signedApproveAndCall(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", +"31d87de2": "setRBACAddress(address)", +"31d90e04": "canClaimPayout()", +"31d98b3f": "getPrice(bytes32)", +"31d9931f": "setOwnedTokensIndex(uint256,uint256)", +"31daabb7": "updateOwner(uint256)", +"31db4b95": "doTriggerAuth()", +"31db6c48": "TYPE_EXPLORER()", +"31db9efd": "right88(uint256)", +"31dbd8a5": "feeAuthority()", +"31de13e8": "tBonusStageEnd()", +"31de7e72": "iceFund()", +"31deb7e1": "nodeCost()", +"31e12c20": "setowner()", +"31e19cfa": "getStrategyCount()", +"31e396c8": "calculateYourValue1(uint256)", +"31e3e2fe": "WithDraw()", +"31e41fba": "_localFight(uint32,uint32)", +"31e5144c": "isAvailable(uint32)", +"31e574a5": "addProduct(address,uint256,string,string)", +"31e59772": "deletenullarr()", +"31e5f055": "one_card()", +"31e63199": "codename()", +"31e6a707": "getWalletInfoByIndex(uint256)", +"31e7b060": "constructProof(bytes32,bytes32[],bytes1[])", +"31e7bf9d": "Multivest(address)", +"31e88fee": "claimedPartnerPreICO(address)", +"31e8c7ba": "CertID()", +"31e8ebbb": "DenToken()", +"31e92f32": "blocksPerMonth()", +"31e99e2b": "getCurrentSmartSpeedPrice()", +"31e9e9c0": "unlockToken(address,uint256)", +"31e9ea8a": "PlaceBet(address,uint256,uint256,bool)", +"31e9ee7c": "currentIcoWallet()", +"31ea1a39": "cancelDeal(uint256)", +"31eaa5c9": "erc20CTH()", +"31ebd13f": "logAllStart()", +"31ee080d": "setComisionInvesorInTokens(address,bool)", +"31ee6c2e": "dividePerfectlyBy(uint256,uint256)", +"31ee8277": "_createship(uint256,address)", +"31ef107f": "SetProfitAddr(address)", +"31ef916a": "approve_timed(address,uint256,uint256)", +"31f01140": "getUserInfoById(uint256)", +"31f0528e": "updateNextGameMinAndMaxBlockUntilGameEnd(uint256,uint256)", +"31f070d9": "getSet()", +"31f09265": "withdraw(address,uint256,bytes)", +"31f0fca1": "_addTokenToTranche(address,bytes32,uint256)", +"31f170c2": "coinSupply()", +"31f1fd2b": "setCriterionTime(uint256)", +"31f25330": "initialRound()", +"31f27c96": "isWarriorChest(uint256)", +"31f2c8a5": "whitelistedSenderAddresses()", +"31f2d72d": "TelegaSend(address)", +"31f3af90": "removeAuditorFromMultiRequestAssignment(uint256,address)", +"31f4a23f": "EtherDeltaWithdrawToken(address,uint256)", +"31f4f682": "investmentMin()", +"31f53447": "operatorProductCommissionInPerc()", +"31f607a5": "Coin_Character()", +"31f6eac8": "availableVolumeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint256)", +"31f72b44": "NewPhase(uint8)", +"31f76043": "resetSymbol(string)", +"31f850e6": "create(address,uint256,uint256,uint256,bool,string)", +"31f9a211": "getOrderState(uint128)", +"31f9a8f2": "accessToken(address,uint256)", +"31f9c919": "mintingActive()", +"31fa0a45": "withdrawAdamcoins()", +"31fa76db": "short_tokens(uint256)", +"31fa7c84": "cancelRent(uint256,uint256)", +"31fa8e73": "payrolls()", +"31fa90d8": "stopIssuingIndividualTokens()", +"31fb4c1d": "preIcoFinishTime()", +"31fb67c2": "withdraw(string)", +"31fc5b18": "MIN_BID_FRAC_TOP()", +"31fd725a": "PassHasBeenSet(bytes32)", +"31fdb712": "getFlight()", +"31fea236": "testFailTransferFromWhenStopped()", +"31ff1ed9": "linkDirectly(string,uint256,uint256)", +"31ffc9fa": "DentacoinTimeLock()", +"3200aa7a": "startRoundB()", +"32013ac3": "preallocate(address,uint256,uint256)", +"320228ca": "minimunEth()", +"32033229": "writeAddr()", +"32035ca6": "madeOperatorForTokens(address,address,address,uint256,bytes,bytes)", +"3203fe4b": "softcap1Reached()", +"3204dbc5": "distributeELTC(address[])", +"3205c5c1": "intunderflow(uint256)", +"3205f5fc": "division()", +"3206163f": "Drawcolor(uint256,address,uint256,uint256)", +"32064946": "start_buyer(address,address,uint32)", +"32064db7": "left20(uint256)", +"320665a6": "BCCB()", +"3206b2c6": "getLog(uint256)", +"3207230d": "purchaseVehicleSpace(address,uint256,uint256)", +"3207408f": "PrivateSaleCents()", +"32075c49": "buySCTK(address,uint256)", +"3207b544": "BRI()", +"32083c44": "payoutForWagerAndOutcome(uint256,uint8)", +"320878d5": "BFYToken()", +"32089b74": "LEGLToken(uint256)", +"32098d4c": "setCalculateFloatingValue(uint256)", +"3209943e": "proceedsAddress()", +"3209c6de": "iterate_start()", +"3209e9e6": "setMinimum(uint256)", +"320a352a": "ExposureCollected(bytes32,address,uint256)", +"320a3c5e": "AJinToken()", +"320a5018": "MilestoneInput()", +"320a6c73": "transferFor_(address,address,uint256)", +"320a8ef8": "transferTokensToTeamMany(address[],uint256[],uint256)", +"320a98fd": "lock(string)", +"320b2ad9": "_pause()", +"320bebaa": "setPromoMinPurchaseEth(uint256)", +"320cffcd": "getCostForCards(uint256,uint256,uint256)", +"320d2800": "finalizeSale(address,uint256)", +"320d2fa0": "liquidationThresholdPercent()", +"320d4534": "setMinSwapAmount(uint256)", +"320d46d4": "canRegister(address)", +"320dc63a": "TotalSTC(uint256,uint256)", +"320e028d": "setCountryToken(address)", +"320e6c01": "set_default_approval_duration(uint256)", +"320ea024": "isVerificator(address)", +"320fdc75": "one(uint256,uint256)", +"321022a5": "updateSettlementInstitution(address)", +"3210318e": "PotaosBucks()", +"3210bb1d": "moneybuy(uint256)", +"3211bb90": "OwnerAddFunds()", +"32121896": "GDK()", +"32139a0e": "platformOperatorNeumarkRewardShare()", +"32145dd2": "gamePlayerNumber()", +"321489d4": "getDataByIndex(uint256)", +"3214e6ba": "cpow2(address,uint256)", +"3215b483": "getTokensByMerkleProof(bytes32[],address,uint256)", +"3216255b": "setCertificate(string,string,string,string,string,string,string)", +"3217e44e": "RGHTC()", +"3218b99d": "gameStart()", +"3218ebcc": "SUBMISSIONREWARD()", +"32191017": "updateFeeForCurrentStakingInterval()", +"3219ac2a": "showMyVote()", +"3219e73f": "addScore(string)", +"321a7c8c": "createVestingByDurationAndSplits(address,uint256,uint256,uint256,uint256)", +"321b3157": "firstPartOfTeamTokensClaimed()", +"321bbc1c": "test_insert_findWithHintNextUpdateHead(int256)", +"321c48f2": "getTemplate()", +"321cb98a": "creationMaxCap()", +"321d43cd": "approve_sell_proposal()", +"321db4d4": "getQueryAddress()", +"321de1d4": "BuyToken(address,uint256,string)", +"321f0013": "do_nothing()", +"321f4584": "DataRegistered(bytes32)", +"321f63a2": "HMToken()", +"322062b8": "FixBet31()", +"3220ad89": "refundSuccessful(address,bytes32)", +"3220b95a": "getEscrowOrder_seller(uint256)", +"32214874": "verifyAmount(address,uint256,uint256,bool)", +"3221e125": "addBag(uint256)", +"32227425": "stopReceiveTicket(uint256)", +"3222ae71": "airdropFinished()", +"322370ff": "BetexStorage()", +"32246e9f": "auctionEnd(uint256)", +"322471cf": "createAffiliate(uint256,uint64,uint64,address,address)", +"3224ba23": "submitPoliceReport(uint256,bytes,bool)", +"32254992": "getPrevHash(int256)", +"32255d90": "confirmShipping(uint256)", +"32258794": "removeAddressesFromBlacklist(address[])", +"322671cd": "_checkLockUp(address)", +"32268c01": "artistsArtworks(address,uint256)", +"3226a94e": "TRNCoin()", +"3227563a": "logPriceAfter()", +"3227bd8b": "DragonCoin()", +"3228556f": "setPOOL_edit_8(string)", +"3228afcb": "HyperIslandCoin()", +"32293954": "LogTokenPreissued(address,uint256)", +"322a5e5f": "balanceContract()", +"322a7050": "addHospital(uint256,string)", +"322a8957": "teamTokenTimelock()", +"322b1bc0": "getarray_length()", +"322b8c7e": "dKERNEL_PANIC()", +"322e5021": "Penalty(address,uint256)", +"322eccdc": "withdraw_all_admin(address)", +"323046b1": "date()", +"32307c67": "LCASH()", +"323082d7": "Vote(string)", +"3230d486": "getHeroRequiredExpForLevelUp(uint256)", +"323162a9": "getDisputeParticipants(uint256)", +"3231a2b9": "voteSnapshotBalanceAutoBatch(address[],uint256[])", +"32326b44": "Invested(address,uint256,uint128)", +"3232f204": "SPAMed()", +"32331418": "ExchangeTokenToZWC(address,address,uint256)", +"3233b455": "appFundDeposit()", +"3233c686": "claimerDeposit()", +"3233c791": "nextlotnumber()", +"32347487": "forwardFundsToWallet()", +"32353fbd": "resumeAuction()", +"323560b5": "ZebraToken(uint256,string,uint8,string)", +"32363b47": "period1End()", +"32363e0a": "calculateMultiplierAfterBurn(uint256,uint256,uint256)", +"323661f6": "releaseLockedBalance()", +"32366ea5": "isOMITokenContract()", +"32366fb9": "makeTomatoes(address)", +"32369e38": "GetPlayerDynamicRatio(address,uint256)", +"32373e25": "CREATED_STAR4()", +"323772ee": "unlocktime()", +"3237d63c": "tgeLive()", +"32383a69": "WashCrowdsale()", +"3238c832": "updateDBZHeroDetails(uint256,string,address,address,uint256)", +"32395c2b": "addPayee(address,address,uint256)", +"3239825c": "edCoreContract()", +"3239d232": "weekProcessed(uint256)", +"323a5e0b": "deposits()", +"323a73d9": "generateId(uint256,uint256,uint256)", +"323a7acb": "Joyreum()", +"323aca70": "InterCryptoNode()", +"323b1b87": "FreezeTokenTransfers(address,bool)", +"323b2c26": "MAX_RELEASE_DATE()", +"323bc818": "_createTeam(string,string,uint256,address)", +"323be1c5": "canPause()", +"323bf0b8": "icoPhase2EndTime()", +"323c20fa": "tokenPtx()", +"323c59c4": "Common()", +"323cb59b": "uncooperativeClose(address,uint32,uint192)", +"323d5c68": "sendPer()", +"323dc51a": "MomoToken(address,uint256)", +"323ded4d": "_getLegendaryPlusRarity(uint32)", +"323df879": "MILLION_TOKENS()", +"323e71fd": "turnOffCanUpdateFrontWindowAdjustmentRatio()", +"323ea3f9": "photoText()", +"323efacd": "checkAndCallSafeTransfer(address,address,uint256,bytes)", +"323f6fe0": "VESTING_OFFSET()", +"323fe92c": "setPriceAttr(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"32414926": "CarTaxiToken(address)", +"32418558": "stakeTokensManually(address,uint256,uint256)", +"32424aa3": "_decimals()", +"324298ff": "ArrayDemo()", +"32434a2e": "register(address,string)", +"324365b1": "createCollectible(uint256,uint256,address,address)", +"3243c791": "distributeDividends(uint256)", +"32443d7d": "developmentFundUnlockTime()", +"324536eb": "totalSupply_()", +"3245a55f": "mintFull(address,uint256)", +"3246887d": "setLedger(address)", +"3246bac5": "getGameIpfs(uint256)", +"3247dd8b": "ySignToken()", +"32484dab": "totalContributedUnits()", +"3248687a": "getLockSize(address)", +"32492f96": "getStellarBalance()", +"32495c58": "requiredEntries()", +"3249759c": "TAToken()", +"324a5562": "setMaxNumber(uint8)", +"324ab080": "MIN_BONUS()", +"324b0085": "createBlogger()", +"324b8ad2": "totalBurnLotsByAddress(address)", +"324b8d6e": "oracleConfig()", +"324c6add": "KBV01()", +"324cb3cb": "contractLocked()", +"324cf51a": "setPurchaseParamCount(uint256)", +"324da66f": "removePromoCode(bytes32)", +"324dd3b0": "getFighterArray(uint256[])", +"324ecd96": "power10(uint256)", +"3250e151": "PakEKO()", +"32513ce5": "newContractAddr()", +"32519e0e": "roundEth()", +"32525f09": "testTransferFromDoesNotAllowTransferOfMoreThanAllowedByDelegate()", +"325294e5": "calculateEthers(uint256)", +"3252b8fb": "returnGrantedToken(uint256)", +"3253277c": "badge(address,uint256)", +"3253ccdf": "burnNomins(uint256)", +"32546f7e": "HammerChain()", +"3254de48": "ITSEndTime()", +"32555f06": "dissBlock(uint256)", +"325586dc": "checkStateProof(bytes,uint256,bytes,bytes)", +"32564d82": "identifierToIndex(bytes32)", +"325654ae": "secondPrivateLockTime()", +"3257bd32": "getDepositorMultiplier(address)", +"3257d818": "hasResponded(bytes32)", +"32581fb0": "getArtefactById(uint256)", +"3258e255": "setWithdrawBeforeTime(uint256)", +"325a19f1": "created()", +"325ab9ac": "buildCharging()", +"325ad39b": "UltraNote()", +"325add98": "sellDaiForEth(uint256,uint256)", +"325c25a2": "auctionLength()", +"325c35c5": "setFightsAddress(address)", +"325cf9e6": "splitPayment()", +"325da1c0": "LogAllocateTicket(uint256,address,string)", +"325dfddf": "waittokens()", +"325ecf99": "addMarketingToken(uint256,uint128)", +"325f33e0": "checkUserByWallet()", +"325f9f41": "processShares(uint256)", +"32606387": "_draw3()", +"32608243": "Iou()", +"3260db59": "UnityToken(address,uint256)", +"32611e2b": "stage2_start()", +"32615457": "FullAssetRegistry()", +"32617353": "GoldBlockTickets()", +"32619375": "ChangeMiningReward(uint256)", +"3262207c": "isTransferProxy(uint32,address)", +"32624053": "blocksToWaitShort()", +"32624114": "isValidAccessMessage(address,uint8,bytes32,bytes32)", +"3262fd9a": "getMoney(uint256)", +"326360fe": "uncommittedTokenBalance()", +"32643513": "_computeContendersTotalHp(uint256,uint256,uint256,uint256,uint256,uint256)", +"32644829": "removePlayerFromBoard(bytes32,bytes32)", +"3264a34b": "getBoard()", +"3264a844": "hundredtimes()", +"3265bf5b": "registerPlayerToBoard(uint256)", +"3265c436": "btcsAddress()", +"32665ffb": "getProperty(uint256)", +"32666a31": "setMonsterObj(uint64,string,uint32,uint32,uint32)", +"326687b9": "onSale()", +"3266c856": "WanToken(address,uint256,uint256)", +"3266fb05": "lockedTime(address)", +"32670d10": "contributors_locked(address)", +"3267a2c5": "returnedToOwners()", +"3267db34": "setCurrentBadge(bytes32)", +"3268215c": "getPuppyAttributes(uint256)", +"3268419f": "PreSale(uint256,uint256,address,address,uint256)", +"32691d18": "updateLastTransactionTime(address)", +"326959cc": "MMMToken()", +"32696a92": "totalpatient()", +"326a794d": "safeMathSub(uint256,uint256)", +"326a7d77": "LEVEL_MAX_VALUE()", +"326abfce": "curent_mul()", +"326b0c7e": "BuyPresalePackage(uint8,address)", +"326b1001": "crowdSaleHardCap()", +"326b7a14": "WthdrawTo(address,uint256)", +"326cf61c": "toBytes(bytes32)", +"326dd62d": "migrationStartedTime()", +"326e8d60": "getTurnover(bytes32)", +"326fac6e": "getCurrentGames()", +"326fd584": "maxEtherCap()", +"32708966": "setMonsterIndexToApproved(uint256,address)", +"3270f753": "depositHouseTakeout()", +"327107f7": "targetToken()", +"32715bf2": "userContentByIndex(uint256)", +"32716063": "calcTotalFee(uint256,bool)", +"3272b28c": "allowedSenders()", +"32733a08": "balanceB()", +"32736fb0": "RoundsManager(address)", +"3273b110": "setMinDuration(uint32)", +"327419b7": "NeedsCoin()", +"327428b1": "Lockable(uint256)", +"32750350": "setcardaddress(address,address,uint256)", +"3276249f": "vrcWallet()", +"327683bb": "setIII_R3(uint256)", +"3276eaa9": "incrementContinuityNumber(uint32,int256)", +"32773ba3": "challengeExit(uint256,uint256,bytes,bytes,bytes,bytes)", +"3277bbda": "setUintF1IntF3AddressF3(uint256,int256,address)", +"32780d05": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", +"3278ba2f": "getNumBounties()", +"3278c960": "terminateSelfDestruct()", +"3278dc67": "Founder()", +"327942a2": "move(bytes32,uint256)", +"32794823": "withdrawToOwnerCheck()", +"32797f44": "failedTimestampSecondsAt(uint16)", +"327a765a": "_getString(address,bytes32)", +"327a943a": "getUserAmount(address)", +"327b95b5": "USDXCoin()", +"327c0dd9": "resetLotteryManually()", +"327cc732": "registrantIndex(address)", +"327e36dc": "RefundVault(address,address[])", +"327efb0c": "supplylimitset()", +"327f0b6b": "pollTitle(uint256)", +"327fc33c": "isUpcoin()", +"32807be0": "PrymexPreICOCrowdsale(uint256,uint256,uint256,address)", +"3280922b": "TOKENS_SALE()", +"3280a836": "getPayment(uint256)", +"328175cd": "editorSignUp(address)", +"3281c4e1": "salesAllocation()", +"3281c4fa": "upRound(uint256,address,uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"3281d576": "isContractMiniGame()", +"32820d5f": "setupWeiCaps(uint256,uint256)", +"328243d5": "changeSale(uint256,uint256,uint256,uint256)", +"32828d9e": "BbbToken(uint256,string,uint8,string)", +"32829a23": "OpenBankAccount()", +"3282aa8a": "individualMaxCapWei()", +"32833d51": "power(uint256,uint256,uint32,uint32)", +"3283f641": "task()", +"32842c39": "picture(address)", +"32846270": "goldSaleLimit()", +"3284d75c": "sendRefTVs(address)", +"3284fd79": "issue(address,uint32)", +"32859392": "dividendDecreaseFactor()", +"3285ecde": "tokensMintedDuringPreICO()", +"3285f406": "GetWithdrawalFunds(address)", +"3286b611": "Generate(address,address,uint256,uint256)", +"3286fb75": "addressNotSet(address,address)", +"3287c399": "isSignedBy(bytes32,address,bytes)", +"3287d0dc": "ownerLocked()", +"3287d0f6": "switchReserve(address)", +"3287db4b": "lockFunds(uint256,uint256)", +"3288eb0b": "ChineseCookies()", +"32892177": "TOKEN_VERSION()", +"328929e0": "Offer(address,address,bytes32,uint256,uint256,uint128)", +"32895c2a": "ERH()", +"3289e004": "redeemPackage(uint256,address,uint256,bytes32[])", +"3289fba6": "getSanPrevOwner(uint256)", +"328a2c2d": "updateStartDate(uint256,uint256)", +"328a7e97": "setKyber(address)", +"328a8cc4": "addRestaurant(address)", +"328b10d7": "vestingStarts()", +"328c0ec0": "endPreICOTime()", +"328d15f4": "_getCurrentWeek()", +"328d8f72": "setEnabled(bool)", +"328db985": "getPotCnt(string)", +"328ede54": "DAFZOToken(address,address,address,address)", +"32902924": "signSendDiamond(bytes32,string,string,address,string,bytes16,uint256)", +"3290bd90": "getInfoFromBidding(bytes,bytes32)", +"3290ce29": "purchaseTokens()", +"3290f515": "addInterest(uint256)", +"32911111": "getroundinfo(uint32)", +"3291b39a": "addReserve(address,uint32,bool)", +"32921690": "checkDepth(address,uint256)", +"3292b71f": "transferCrowdSale(bool)", +"3292cd37": "payWithDailyFreePoint()", +"32931fbb": "left1(uint256)", +"329350ea": "storeOwnership(address,address)", +"3293d007": "isValidDateTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"329430ca": "teamAllocated()", +"32947122": "updAirDropTokenDestroy(bool)", +"32948515": "QLinkToken()", +"3294ab00": "withdrawBtc(bytes,uint256)", +"3294c2d7": "updateDocument(uint256,uint256)", +"32958fcb": "boolToBytes32(bool)", +"3295feb3": "numAuthorities()", +"32967ea0": "isOlderOwner(address,address)", +"3296a373": "createPromoPerson(uint256,address,uint256)", +"3297ef5b": "voting_started()", +"32985244": "joyTokenContract()", +"3298caa3": "getDoneRegistrationAmount(address)", +"3298e6c8": "GanaPublicSale(address,address,address)", +"32990ad2": "rewardTokensForClient(address,uint256)", +"3299ad23": "PapushaToken()", +"329a23b8": "Wallet(address[])", +"329a27e7": "getWalletBalance()", +"329a88d5": "UBIATARPLAY_CAP()", +"329b1c92": "getReferral()", +"329b59d1": "fallback(uint256)", +"329b8f38": "yesCount(uint256)", +"329bfc33": "getCurrentWinner()", +"329c095b": "getLatestReading(string)", +"329ccce1": "vmaxEtherPerPurchase()", +"329cd958": "get_next_item_in_state_from_item(bytes32,bytes32)", +"329ce1b7": "delOwner(address,address)", +"329ce29e": "buyTile(uint256)", +"329d1a35": "testReentracyGuard()", +"329d1a8b": "depositIndex(uint256)", +"329d3346": "closeVote()", +"329d5f0f": "setApprovedUser(address)", +"329da011": "addNewToken(string,address,address)", +"329daf90": "onlyPauserMock()", +"329eac15": "phase2Price()", +"329f36b5": "BONUS_TIER_2_LIMIT()", +"329f5b21": "DiatomAirdrop(address,address)", +"32a16f4e": "isLocked(bytes32)", +"32a21a28": "registerInvitor(address,address)", +"32a2c5d0": "getContractAddress()", +"32a2fda7": "isPermissionGranted(address,string)", +"32a36e53": "enterRound(bool)", +"32a3869a": "getBonusPercentage(uint256)", +"32a3abbb": "LALATokenAddress()", +"32a42882": "buyPropertyInPXL(uint16,uint256)", +"32a45ac5": "addMessage(address,uint256,uint256)", +"32a521c1": "disallowToLock(address,address)", +"32a52fcd": "FOR_ICO()", +"32a54712": "DecalinxCoin()", +"32a55bb4": "swapActivity()", +"32a58dc2": "change_client_manager(address)", +"32a6baf6": "isTimePassed()", +"32a71b36": "AleaCoin()", +"32a7ae95": "deleteClaim(address)", +"32a7d7c2": "AddressOwnershipVerification()", +"32a7dbda": "getMintManager()", +"32a7e45a": "eosBlanceOf()", +"32a80329": "getTokenTransferable()", +"32a8589a": "FercCoin()", +"32a89e50": "NextBabyIs(address,uint256)", +"32a8bb33": "getParticipantIds(string,uint256,uint256)", +"32a8d49e": "ADV_TEAM_TOKENS()", +"32a8e74c": "participateBuyback()", +"32a92229": "creditBalanceOf(address)", +"32a9a43b": "removeLeverage(uint256)", +"32a9df46": "setSecondBonus(uint256)", +"32aa952f": "UpdateSellAgentCreators(address,address)", +"32aae34d": "LogVoteToFreeze(address,uint256,uint8,bool)", +"32aaf9d7": "addCommissionAmount(uint256,address)", +"32ab6af0": "newRepoWithVersion(string,address,uint16[3],address,bytes)", +"32aba656": "stillAvailable()", +"32abff8e": "lastBlock_v5Hash_uint256()", +"32ac752b": "matches(string)", +"32ace499": "getNextOrderPrice(address,address,uint256)", +"32aeaddf": "lockingPeriodInMonths()", +"32af5858": "behalfBet(address,uint256,uint256)", +"32afa2f9": "claimEtherOwner(uint256)", +"32b12eac": "setFallback(address)", +"32b182c3": "eligible(address,uint256)", +"32b1ad5a": "checkContructIsLocked()", +"32b28b95": "edoPerWeiDecimals_()", +"32b30b64": "calculateUnsoldTokens()", +"32b3c323": "anyoneEndICO()", +"32b431da": "setPlanetAuctionAddress(address)", +"32b45055": "EREEBERRY()", +"32b4623a": "shareCertificate(string,string,string,address,address,string)", +"32b4b5ed": "openProvider(bool,string,string,uint256,string,uint8,bool,address)", +"32b4d74c": "getNumRemainingSeats()", +"32b525bb": "beginMotion(address)", +"32b5b2d1": "missedVerificationSlashAmount()", +"32b65a95": "getSplitCount(string)", +"32b680d6": "payReceiver(address)", +"32b693b0": "PetCoin()", +"32b6f97a": "UXDToken()", +"32b7214e": "setNextSnapshotTime(uint256)", +"32b734b7": "awardsEnd()", +"32b85a44": "currentWeight()", +"32b8c086": "testSuperUser(address)", +"32b98616": "updateCardDetail(uint256,uint256,bytes32)", +"32ba36d6": "EtherShare()", +"32ba4b8b": "RANGEEND_5()", +"32ba65aa": "clearBalance(address)", +"32baa8d9": "existingCategory(uint256)", +"32bace54": "invest_cin(address,uint256)", +"32bafb2c": "withdrawMln(address,uint256)", +"32bb2c0d": "calc(uint256,uint256)", +"32bbb8cc": "mgrVotes(uint256)", +"32bbc1c8": "WEI_PER_USD()", +"32bc873d": "AZExchange(address,address,address,uint256,uint256,uint256)", +"32bc934c": "MILLION()", +"32bd8644": "MPYRefund(address,uint256)", +"32be9502": "getOwnerInAnyPlatformById(uint256)", +"32bf1def": "FACTOR_2()", +"32bf775d": "testControlTransferDisabled()", +"32bf9e5b": "AfricacoinToken()", +"32bfaa23": "initializeRefundableFundraiser(uint256)", +"32bfdc38": "ROC()", +"32c0c583": "setDenyPremium(bytes32,bool)", +"32c0f801": "tokenFacebook()", +"32c0fba5": "airDrop(address,address,uint256)", +"32c1eb82": "getActualRate()", +"32c22154": "livepeerToken()", +"32c26957": "isTimeout()", +"32c2ed9a": "inquire(uint256,uint256)", +"32c35352": "marketSale(uint256,string,address,address)", +"32c3de5d": "listCreatedTokens()", +"32c442d6": "Super87Coin()", +"32c468fa": "setPreFundingStartTime(uint256)", +"32c4903d": "getAllParents(bytes32)", +"32c514d5": "getJobDetailsIPFSHash(uint256)", +"32c66a9d": "Nome_vincitore()", +"32c6f294": "deadline120()", +"32c6f315": "exchangeIsRunning()", +"32c716b6": "dividendsAcc(address)", +"32c7de60": "_RamenCoin()", +"32c862ed": "inSalePeriod()", +"32c896d4": "REFERRAL_BONUS_LEVEL4()", +"32c9635b": "_getEthUsdPrice()", +"32c990b4": "getUserKeys(address)", +"32ca5587": "isWoidRegistred(address)", +"32ca966e": "toTileId(int32,int32)", +"32cae0a8": "userPoolFund()", +"32cb46e0": "totalContributedWei()", +"32cb6b0c": "MAX_SUPPLY()", +"32cb93d9": "getPaintingName(uint256)", +"32cba128": "_deleteShareholder(address)", +"32cc0105": "setAmountForDeal(uint256)", +"32cc6a9f": "modifyNextCap(uint256,uint256)", +"32cce1e4": "_unlockTokenByIndex(uint256)", +"32cd0487": "delist(address[])", +"32cd0b3d": "totalRemainSupply()", +"32cd3148": "CashmoneyToken()", +"32cd724a": "getStateStartTime(bytes32)", +"32ce92cb": "setFIRST_STEP_MULTIPLIER(uint16)", +"32cea83e": "birth(bytes)", +"32cee2eb": "getMinableSupply()", +"32cfbe90": "initialBalance(address)", +"32d05a53": "IdToAdress(uint256)", +"32d05c6d": "withdrawXPA(uint256,address)", +"32d0cf68": "setOutOfLimitAmount(uint256)", +"32d17917": "SPECIALIST_THREE()", +"32d1ae2e": "RepairCenter(address,address)", +"32d2e55c": "subSafe(uint256,uint256)", +"32d2fb9f": "getRefRemainingTime(uint256)", +"32d33cd0": "isRedeemed(uint256)", +"32d3725b": "burnStage(uint256)", +"32d3b711": "getPI_edit_29()", +"32d540af": "_clearExtraReceivers()", +"32d5fe98": "revealCampaign(uint256,uint256)", +"32d68fd5": "transferFeeNum()", +"32d69342": "terminateServer(uint256,uint8)", +"32d6eeb5": "changeQueryDelay(uint256)", +"32d72694": "updateGameTimes(uint256,uint8)", +"32d79689": "currentNiceGuyIdx()", +"32d80490": "Dandy()", +"32d8a3bd": "initCommunityReputation(address)", +"32d8eee5": "testFailSetNotUpdatableNotOwner()", +"32da1329": "setStartEndTime(uint256,uint256)", +"32da3fe3": "upgradeComponent(uint256,address,address)", +"32da57cf": "getTheStocksTokens()", +"32da7448": "amout()", +"32da7840": "isWhitelistAgent(address)", +"32dae2a5": "maxAmountICO()", +"32db8e2b": "MAX_RECEIVED_PER_PERIOD()", +"32dbc7d4": "NECPToken()", +"32dbeb21": "GoalMinimumReached(address,uint256,uint256)", +"32dc04aa": "changeBlockTimeAverage(uint256)", +"32dc2a01": "setmsgprcnt(uint256)", +"32dc9e81": "functionFive(uint256,uint256,uint256,uint256)", +"32dcb01c": "createBytes32s(bytes32[],bytes32[])", +"32dea130": "finishCrowdsaleMinting()", +"32deac1b": "setThirdBonusPercent(uint256)", +"32dee40b": "withdrawAllFunds(address)", +"32df3068": "clearKeys(uint256)", +"32df52aa": "LigmaToken()", +"32e07a20": "howManyEthersToKillContract()", +"32e12734": "addSpecialOffer(address,uint8)", +"32e1ed24": "updateAccountOwner(bytes32)", +"32e26d24": "CROWD_WAVE1_BONUS()", +"32e30e84": "INTERFACE()", +"32e43a11": "dummy()", +"32e43b5b": "PlayerTransported(uint256,address,uint256,uint256)", +"32e459b4": "LogFinalized(uint256)", +"32e45b8b": "guessTotalBeanOf(uint256)", +"32e54f72": "proxyPayable(address,string,string)", +"32e5535a": "ticketString(uint256)", +"32e5645d": "_computeNextArtworkPrice()", +"32e5905b": "film()", +"32e5d676": "c_priceRiseTokenAmount()", +"32e5e595": "getTimestamp(string)", +"32e62358": "_platformSupply()", +"32e70029": "MGCGameToken()", +"32e7179a": "MintedLocked(address,uint256)", +"32e7c5bf": "B()", +"32e7ecd8": "tierMin(uint256)", +"32e7f81f": "allocateLiquid(address,uint256)", +"32e94e81": "setPlayerEngineersCount(address,uint256,uint256)", +"32e991cf": "sellScale()", +"32e99708": "getMiningTarget()", +"32eb2314": "OraclizeQueryTest()", +"32eb2564": "initGame()", +"32eb5e44": "getaddtime(address)", +"32ec39a4": "mntpMigrationsCount()", +"32ec7a4e": "_emitDayLimitChanged(bytes32,uint256,uint256)", +"32ec991c": "ballotOf(uint256,address)", +"32ed3d60": "startPoll(uint256,uint256,uint256)", +"32ef78c4": "remove_scribe(address)", +"32ef8dfa": "previousDistribution()", +"32f04209": "evReleaseFund(address,uint256)", +"32f05fd1": "releaseAndUnlock(address,uint256)", +"32f07d01": "LogRedeemNET(address,uint256,bytes32)", +"32f16c74": "claimPepe()", +"32f2129a": "getBetArr()", +"32f23601": "setSubTourFreezingPrice(uint256)", +"32f289cf": "claimToken(address)", +"32f2bb50": "HouseInfoListing(address)", +"32f402c5": "createGrant(address,uint256,uint256,bool,bool)", +"32f46374": "create(string,address[],address,address)", +"32f58fc8": "retrieveRemainingCoinsPostSale()", +"32f5ea27": "UbiRewardToken()", +"32f637db": "createVesting(address,address,uint256,uint256,uint256,uint256)", +"32f6438b": "setCFO(address,bool)", +"32f72c27": "remove(int256)", +"32f72e39": "setSubmissionDeposit(uint256)", +"32f7470b": "DATE_31_DEC_2018()", +"32f76167": "isLockedWalletEntity(address)", +"32f76c11": "didTradePosition(bytes32,address,address,uint256,uint256)", +"32f7b41b": "setCCH_edit_29(string)", +"32f8290c": "returnMachine()", +"32f896af": "getSettingIdByTAOName(address,string)", +"32f8d1e4": "RockCoin()", +"32f8db38": "mainSaleMinEth()", +"32f8e034": "finalizeIcoDate()", +"32fac3a3": "listAddresses(bool,bool,bool,bool,address[])", +"32fb082f": "hasOrderedRobotParts(uint256[])", +"32fb5833": "AutomatedExchange()", +"32fb9860": "getSettledScoreAmount()", +"32fbe8d3": "setSavedBalance(uint256)", +"32fd8478": "artistCommission(uint256)", +"32fe334b": "totalEtherPaid()", +"32fe5afc": "setICOEthPrice(uint256)", +"32fefb4c": "add_account(address,address)", +"32ff6e21": "setAirDropToken(address)", +"32ffe442": "getExpectedPrice(address,address,uint256)", +"33007cdf": "deposit(address,uint152)", +"33012507": "addMemberInternal(address)", +"33016c6a": "FOUNDER_FUND_3()", +"3302363b": "_nextMonth1stDayTimestamp(uint256,uint256)", +"33026bb6": "addDeposit(address,uint256)", +"330278e0": "betPlaced(address,address,uint256,uint256)", +"3302ece0": "setStopDate(uint256)", +"33039d3d": "MAX_TOTAL_SUPPLY()", +"3305cf85": "weiToCap()", +"33065ac5": "firstTokenId(address)", +"330696c8": "PREMINER_CHANGED(address,address,address)", +"330738a3": "KetherHomepage(address,address)", +"3308ecf1": "coinanx()", +"3308f42d": "getPlayer()", +"33091bd2": "returnTokenBalance(address[2],uint256[7],uint8,bytes32[2])", +"33099beb": "theCyber()", +"330a4822": "_createOrder(address,uint256,uint256,uint256)", +"330aa207": "frozenAccountCoinByTime(address,uint256,uint256)", +"330ae38f": "disableAmbassadorPhase()", +"330ae7b3": "addUserBattleValue(address,uint256)", +"330c3fe5": "finalise(address)", +"330c4ce0": "burnedToken()", +"330ca427": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", +"330cbc75": "createEdition(uint256)", +"330d57f9": "maxbuyinQuantity()", +"330f412b": "MorphToken()", +"330f9588": "xrt()", +"330fb148": "setETHRateAgent(address,bool)", +"330fb4a3": "putEther()", +"330fd319": "MMTOKEN()", +"33102ff9": "openRoom(uint256,uint256)", +"33105218": "isVerifier(address)", +"331172f3": "getDisputeRoundDurationInSeconds()", +"33132860": "EcRecover(bytes32,bytes)", +"331350ee": "finishAllocation()", +"3313d27e": "verifyAllSigned(uint256,uint256[3],uint256[3],uint8[176])", +"3313d9bf": "bytesToString(bytes,bytes1)", +"3313e95d": "strcpy(string,uint256,string)", +"33140016": "feesByPeriod(address)", +"331450dc": "minerPreTime()", +"3314b33a": "BoardMeetings(uint256)", +"3314b62d": "AuPetitCoinToken()", +"3314c351": "Trade(address,uint256,address,uint256,address,address,uint256)", +"33158ba4": "openNetfRevenueRound(uint256)", +"331670c5": "getIsEnabled(uint256)", +"3316d122": "log(uint32,address,address,uint256,uint256,uint256)", +"331725b5": "callAndReward_0(string,string,uint256)", +"3317bbcc": "getLockedTokens()", +"3318d4a5": "incomeFees()", +"33195fca": "getApprobation(uint256,address,address)", +"3319bf1a": "upgradeGalleass(address)", +"331a6bf5": "setOwnerAddress(address)", +"331a72bb": "s7(bytes1)", +"331a72d1": "getRetractable(bytes32)", +"331a9d73": "availableSTCTokens()", +"331b6f66": "sizeOfAddress()", +"331c4594": "TalentICO()", +"331c55b4": "addTeamTimeMints(address,uint256,uint256,bool)", +"331c5d60": "LogSetName(string)", +"331d03d1": "BubToken(address)", +"331d8e5d": "unlock(address,address,bytes)", +"331e58a1": "adjustedRaised()", +"331e6b78": "setToNotForking()", +"331eac01": "SendPreReserved1()", +"331fbc1d": "tokensCreationMin()", +"331fef86": "bonusStrategy()", +"33210356": "setDelegadoDeDistrito(bytes32,uint256)", +"332129a7": "getJYPCBonus(uint256)", +"3321c76c": "RITUAL_COMPENSATION()", +"33223f1b": "materializeBalanceIfNeeded(address,uint256)", +"33228b9b": "E_AuctionFinished(address,uint256,address,uint256,uint256)", +"33232609": "blake2b(uint64[],uint64[],uint64)", +"33242b60": "getODEMClaim(address,bytes32)", +"332514d8": "totalT8EXSold_PRIVATE()", +"332559d3": "getcanuse(address)", +"33260fe7": "getInteractionPrice(address)", +"332659e0": "getBountyAddres()", +"33267961": "run2(uint256,bytes32[],uint256[],uint256,uint256,uint256,uint256)", +"3327057c": "Arina_judgment()", +"33271a3b": "getTokensPerWave(uint256)", +"33278aae": "setUntradeable()", +"3327f4fa": "setInstrumentRegistry(address)", +"33281815": "getRate(address,uint256,uint256)", +"33283e59": "usedReveralSupply()", +"33285fb4": "confirmAtkPlayerQuest(address)", +"33287446": "setMinTokensRequiredForMessage(uint256)", +"33289a46": "withdrawDeposit(uint256)", +"3328bd24": "lockAddress(address,uint256)", +"3328d3f0": "numberOfDates()", +"3328f396": "totalLevBlocks()", +"33291126": "_tavern(uint256)", +"332954c0": "YumeriumTeamWallet()", +"3329578b": "SpectrumNetwork()", +"33298e25": "invoke(uint256,uint256)", +"332a2219": "_goodAddress(address)", +"332ad859": "buyTokensBonus(uint256,uint256)", +"332ae26c": "test_insert_findNoHintUpdateHead()", +"332b0b34": "oraclize_randomDS_getSessionPubKeyHash()", +"332b3177": "totalTimelockedBeneficiaries()", +"332b9f06": "consumeNextOrderId()", +"332bb4c1": "approvalCallback(address,uint256,bytes)", +"332c26d6": "getSecretAtLevel(uint256)", +"332db078": "setTicketsPerPlayerLimit(uint256)", +"332e1a81": "getContributors(bool,bool)", +"332e25be": "getCCH_edit_19()", +"332ea814": "amIAgent()", +"332ea9ed": "VRCoinCrowdsale(address)", +"332eb83e": "steal_reveal(address,uint256)", +"332ec5f9": "unblockMember(address)", +"332efa80": "clearNewOwnerBid(address,uint256)", +"332f7acf": "amountCollected()", +"332f7d6e": "Lpktransfer()", +"332f93a9": "nextPayoutGoal()", +"332fa285": "nextGameMaxBlock()", +"332fa5bb": "ownerCountInt()", +"332ff6f9": "Buyin(address,uint256,uint256,uint256)", +"3330a6bd": "set_min_max_CWCsPerReturn(uint256,uint256)", +"3331f391": "giftAsset(address,uint256)", +"33324445": "changeClientCategory(address,uint256)", +"3332baa3": "PreSaleDeadline()", +"3332f720": "transfer_remaining_funds_to_project()", +"333432fe": "_withdrawBonuses(bytes32,uint256)", +"3334f1f8": "getAmountWithBonus(uint256)", +"3335aa78": "eRefund(address,uint256,string)", +"33360632": "getNumParameters()", +"33360978": "EndTime()", +"3336d5e5": "addABaddress(address,address)", +"33377f32": "turnOnFurnace(bytes32,bytes32,bytes32,bytes32)", +"33379137": "transferCoinToUser(address,address,uint256)", +"333885a0": "createBill(address)", +"3339451b": "fireDeliveryProposalEvent(address,uint256)", +"33397816": "withdrawAccountBalance(address)", +"3339f96d": "floaksAddress()", +"333a653e": "PeakAssetCoin()", +"333ab570": "WeiSent(address,uint256)", +"333abd90": "acceptKinTokenOwnership()", +"333aed82": "nextGameSettings()", +"333bfec5": "delegatedSignedEscrow(bytes,address,address,address,uint256,uint256,uint256)", +"333cfa14": "checkBlockMature(uint256,uint256)", +"333cffe5": "withdrawWithholding(uint256)", +"333dbda8": "paymentsInOtherCurrency(uint256,uint256)", +"333e1a72": "investorsLoses()", +"333e5180": "setOperatorPrivileges(uint256,address,bool)", +"333e99db": "isBlacklist(address)", +"333f55ed": "managerSelfRemove()", +"333f57b3": "contractStarted()", +"333f7f70": "changeFrozenStatus(address,address,bool)", +"33403a81": "_calculateWinner(uint256)", +"334191f7": "donatorReward()", +"3341b445": "proposals(address)", +"334249a7": "getProviderCountry(uint256)", +"334340d2": "EthCoin(address)", +"3343c18c": "AddBTCTransaction(address,uint256,uint256,bytes4)", +"334460a4": "createMetadata(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", +"3344e0b3": "WWW()", +"33455dd0": "PRICE_5()", +"3345854d": "NewGame(bytes32,bytes32,bytes32,address,uint256)", +"3345b65f": "listNextFourCards(uint128)", +"3345b784": "tokenSaleWeiMin()", +"33465c5f": "auctionStartTime(uint256)", +"3347d025": "teamUnlock3()", +"3348904b": "amountOfBets()", +"3348cad7": "_breedWith(uint40,uint40)", +"3348f537": "massClaimLimited(uint256,uint256)", +"33492138": "joinFraction(uint256,uint256,int16)", +"3349bc19": "nonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2])", +"334b8771": "AIRDROPBounce()", +"334b9f14": "initializeArray(uint256)", +"334c5997": "JavaSwapTest(uint256,string,string)", +"334cc3e5": "TimeDecayingTokenFactory(bool,address)", +"334d86bf": "getPI_edit_7()", +"334dc700": "CanaryV7Testnet()", +"334df120": "getBeneficiaryById(address,uint256)", +"334ef224": "testThrowsUpdateLatestRevisionNotOwner()", +"334ef43d": "tokensToCounter(uint256)", +"334f0611": "cnd()", +"334f22c7": "getUrl(bytes32)", +"334f45ec": "currentStepIndex()", +"334f5224": "bettorMap(address)", +"334fe638": "getProvisionCreditsRemaining(address,uint32,uint256)", +"33500e26": "bid(uint8)", +"33506115": "setPauseSave()", +"335094c2": "setPreICOEnd(uint256)", +"3350ae36": "fitCollectedValueIntoRange(uint256)", +"3350b915": "setDungeonPreparationTime(uint256)", +"3350c3ba": "BlockEstateToken()", +"33512aa9": "getUserReward(address,bool,bool)", +"33513739": "lowerCeiling(uint256)", +"335154ed": "setRateSteps(uint256[],uint256[])", +"3351886e": "getFilm(uint256)", +"3351ee19": "donatePurchase(uint32)", +"33533e84": "NeterContract()", +"33545d48": "setIdentity(address,address,string)", +"3354741a": "eveFromEth(uint256,uint256)", +"335494a4": "getMintingPowerById(uint256)", +"3354d682": "destroyVoxel(uint8,uint8,uint8)", +"335611d9": "makeOrder(uint256,address,address,uint256,uint256)", +"3356294b": "setAyantDroitEconomique_Compte_3(uint256)", +"335665c4": "canBuyCompany(bytes32)", +"3357162b": "initialize(string,string,string,uint8,address,address,address,address)", +"335721b0": "NewResolver(bytes32,address)", +"33575f64": "buyRank(uint256)", +"3357db75": "SALE_ENDED()", +"33580959": "poolFees()", +"33588dfa": "doCalculateRoom(uint256,bytes32)", +"3358d2d3": "buildDSTokenFrontend()", +"33592a1f": "getProviderById(uint256)", +"335a6b7d": "Wicflight()", +"335aa61a": "setMaxPrizeOneDay(uint256)", +"335ae0cb": "GetEscrowBalance()", +"335b496e": "totalTransfersInSchedule()", +"335b52f2": "initGameAt()", +"335b61e8": "enableArea(string)", +"335b7c13": "phase5EndBlock()", +"335b942a": "arbitrateC4FContract(address,uint8)", +"335c8b63": "packPrice()", +"335d43a3": "Kubera()", +"335e8067": "tricklingSum()", +"335eb60f": "getCoursesLength()", +"335f463d": "DVChain(uint256,string,string)", +"335f5642": "getinfowin(address,uint256)", +"335f9303": "PunchToken()", +"335fba7e": "calculateRedeemReturn(uint256,uint256,uint32,uint256)", +"336077c3": "getApprovedBuyer(address,address)", +"3360ac90": "transferByOwner(uint256)", +"3360caa0": "publicSaleStart()", +"336120fe": "removeTokenList(address,uint32)", +"336137c8": "updateMember(address,uint256)", +"33613cbe": "getBondBalance(address)", +"33637d5a": "getPendingBlock(uint256)", +"33641775": "change_sale_address(address)", +"336481d4": "dSetCommunityBallotsEnabled(bytes32,bool)", +"3365aa3b": "description2()", +"3365d358": "addContractAddress(address,address)", +"336634bb": "MASIKIToken()", +"3366eeb2": "getLockedToken()", +"33670c1c": "SupportsInterfaceWithLookup()", +"33677c30": "recycling(address,uint256)", +"3367aeb2": "maxPVB()", +"33683ec6": "safeHolderOf(uint256)", +"3368a120": "dividendBalance()", +"3368db4f": "DCE_Coin()", +"3368e968": "init(bytes32[])", +"336989ae": "customers(address)", +"3369c33d": "pregnantDogs()", +"3369c3b6": "ReturnEthersFor(address,uint256)", +"3369dace": "flipTheCoinAndWin()", +"336abddc": "allocateCash()", +"336b739a": "setCovmanager(address)", +"336b9f80": "updatePublisherFee(address,uint16)", +"336c6d39": "setPrizePool(address)", +"336c9b97": "_updateEditionTypeLookupData(uint256,uint256)", +"336ce69e": "CyberyTokenSale()", +"336da059": "MAX_TOTAL_TOKEN_AMOUNT_OFFERED_TO_PUBLIC()", +"336e24aa": "getQuestionAnswerCount(uint256)", +"336fa72c": "addTransferableAddress(address)", +"3370204e": "enter(bytes8)", +"33705526": "p5()", +"337176cd": "getVideoGameItemOwner(uint256)", +"337188d9": "secSaleSpenderTxDetails(uint256)", +"33722c47": "testGetLawyerAtIndex()", +"33731c04": "plxToken()", +"3373739b": "usedTokens()", +"33739483": "etlContract()", +"33751fec": "WeatherToken()", +"33756534": "LogVote(address,bool,uint256)", +"33759ee1": "CrowdSaleTokenPurchase(address,address,uint256,uint256)", +"3375e38a": "CreatedBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", +"3376887a": "test_oneValidEqInt2()", +"3376e2dc": "callDividendAndUserRefund()", +"33771860": "setGoldContract(address)", +"337748b8": "StartFuseaNetworkDistribution()", +"3377f212": "set4RoundTime(uint256)", +"33783b9e": "PapaToken()", +"3378eb29": "ElectricQueue(address)", +"33791c36": "Fundraiser(address,address)", +"3379d7a3": "greedyowner()", +"337a693c": "AkiCoin(address)", +"337a8cdb": "allowMoveTokens()", +"337b1cf9": "setIpfsHash(bytes)", +"337b5988": "testSimpleNameRegister()", +"337b68ba": "takenProfit()", +"337bd656": "HashSolved(address,string,bytes32)", +"337c1e28": "getIndexRoot(bytes)", +"337c445d": "increaseWordSize(string)", +"337cc706": "transferContract(string,string,string,string,string)", +"337d2aea": "PHASE3_START_TIME()", +"337f4c46": "gameDeveloper()", +"3380104a": "Streamity()", +"3380c0d8": "cancelTransaction(uint256)", +"338116b0": "checkContract()", +"3381ffe0": "transferTrusteeOwnership(address)", +"338246e2": "minSwapAmount()", +"3382ac57": "customCreateTokens(address,uint256)", +"3382ddab": "tokenBurnAddress()", +"33833037": "allBalance()", +"33835161": "setConfig(uint256,uint256,uint256,uint256,uint256,uint256)", +"3383e335": "LogTake(bytes32,bytes32,address,address,address,address,uint128,uint128,uint64)", +"33840712": "checkImageInput(address[16],uint256,uint256,uint256[],bool,bool)", +"338410f2": "setUnicornBreeding(address)", +"33848008": "newDepositWallet(address)", +"33849e55": "voteOnSolution(uint256,uint256,bool)", +"3384d2af": "PARKToken()", +"3384e128": "soldSS()", +"33862708": "changeServiceAddress(address)", +"33862914": "SOYA()", +"33863ed9": "order(uint256,uint256)", +"3387e52f": "LLV_311_EDIT_3()", +"33882479": "multiplyDecimalRound(uint256,uint256)", +"3388e429": "ecrecoverDecode(bytes32,uint8,bytes32,bytes32)", +"3388fa72": "Duranium()", +"33893071": "checkMyWithdraw(address)", +"3389f273": "setManyAllocations(address[],uint256)", +"338a0261": "rhi()", +"338a1379": "_setPackedBlockNumber(bytes20,uint256)", +"338a63a4": "_createKitty(uint256,uint256,uint256,uint256,address)", +"338b5dea": "depositToken(address,uint256)", +"338bfcd6": "refundTokensPresale(address[])", +"338cdca1": "request()", +"338d43f6": "_decrementTokenBalance(uint16,uint16,uint8,address,uint256)", +"338dbf59": "startPrivateSale()", +"338dfafa": "HVNToken()", +"338e22ff": "ProcessablesMock()", +"338e4fd6": "setTokenForSale(uint256,uint256,bool)", +"338e579e": "tryFinalize()", +"338e93d1": "active_dividend(address)", +"338ed326": "createCustomCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,address)", +"338ef191": "GetBetGamblers(uint256)", +"338f3039": "amountAvailableToWithdraw()", +"338f43a0": "getReservedTokensListValInTokens(address)", +"338f4ad6": "withdrawMineralTo(address,uint256)", +"338f4dd9": "limitTier2()", +"338ff5e3": "updateInvested(uint256)", +"33902973": "createReserveTokensVault()", +"33904cb1": "MasterNet(uint256,string,string)", +"33905d41": "highFunding()", +"3390e6c7": "getIsSecondPhaseBySoldedTokens()", +"33911763": "greenshoeActive()", +"3391c265": "transferManagment2(address)", +"33920f65": "getEarliestPosition(address)", +"33921b2c": "DEXHIGH_V1()", +"339282b7": "isRegisteredAuthority(address)", +"3392f927": "hasConverted(address)", +"3392ffc8": "testExp(int256,int256,uint256)", +"3393385f": "disableUpdates()", +"3393780f": "DdosMitigation()", +"3393b069": "nothingLib2()", +"339594f9": "logMarketMailboxTransferred(address,address,address,address)", +"3395dc70": "acceptTransfer(address,address,uint256)", +"33966cb6": "_bid(uint256,address,uint256)", +"33967c74": "isZero(bytes32,string)", +"3396c405": "tokensAreLiquid()", +"3396c780": "b21TeamTokensAddress()", +"3397c60a": "getpubprize()", +"3397ca17": "numBalanceRecords(address)", +"3397d5d5": "setTokenPrice(uint8)", +"33985caf": "Exera()", +"33989396": "requestNewEtherRealID(string,string,string)", +"339a7670": "mineToken(uint256)", +"339a95f6": "secondCrowdSaleEndDate()", +"339ab6f2": "getPurchaseAmount(address)", +"339ac174": "playerSurrender()", +"339b6b39": "isRevokedBefore(bytes32,uint256)", +"339cfb9a": "isHolderAddress(address,address)", +"339e23d1": "ownerVote(bytes32,uint256,address)", +"339e2604": "setPayBackRate(uint256)", +"339e2c45": "isRegisteredToFirm(string,address)", +"339e9550": "_sendReward(uint256)", +"339f890d": "setMinBlockPurchase(uint256)", +"339fd959": "getLockAmount(address,address)", +"339ff96d": "transferCommitment(address)", +"33a02a6d": "openLandEthSale()", +"33a02c22": "betAdded(uint256,uint256,address,uint256)", +"33a263e6": "peggedSymbol()", +"33a27f75": "estimateNextPotSeedAmount()", +"33a3b654": "managementAmount()", +"33a3d023": "finalizationCrowdsale()", +"33a3e669": "setClientLastPaidRate(address,uint8)", +"33a4ec8d": "NCMToken(uint256,string,string)", +"33a581cd": "createPeerWallet(address,address[],address[],uint256[])", +"33a581d2": "MAX_UINT256()", +"33a5bae4": "verifyTx(uint256[2],uint256[2][2],uint256[2],uint256[5])", +"33a5ec7e": "changeTokenAmount(uint256)", +"33a738c9": "_executeTransfer(address,address,uint256)", +"33a7d2e3": "BONUS_DURATION_2()", +"33a8319e": "EtherJob()", +"33a87ade": "gasInTokens()", +"33a8c45a": "contact()", +"33a8dc1d": "nextPack(uint256)", +"33a9824a": "PopulStayToken()", +"33a99e04": "selectWinner()", +"33aac4aa": "BaseModule()", +"33ab0541": "setBaseLevelUpFee(uint256)", +"33ac2009": "countValidations()", +"33ac67c3": "ShowChargeCount(address)", +"33ac7256": "getParent(bytes32,uint256)", +"33ad846d": "getStringValue(string)", +"33ad9495": "WithdrawPotShare()", +"33adb264": "invokeTop()", +"33ae6e19": "distributeTimelockedTokens(address,uint256)", +"33ae7166": "tier4()", +"33ae88ad": "numberOfKingdoms()", +"33af060f": "accountInGoodStanding(bytes32)", +"33b0f7f7": "paidCreateWikiPage(string,string,string,uint256)", +"33b1503d": "PostWish(address,uint256,bytes,bytes,uint256,uint256)", +"33b16d93": "determineWinner()", +"33b186c1": "AdvisorsPartnersAmount()", +"33b19417": "NodeManager(address[])", +"33b1f812": "totalPromotions()", +"33b37915": "setOrderEnd()", +"33b3dc04": "castVote(string,uint8)", +"33b416db": "BaseICOToken(uint256)", +"33b56638": "testGetAllLawyers()", +"33b58484": "WEEKS_104()", +"33b5b62e": "minPurchase()", +"33b5fa75": "buyTokensWithRef(address)", +"33b6baf5": "developerAddr()", +"33b7d187": "getDCategory(bytes32,uint256)", +"33b85b73": "modifyCommunityRates(uint256,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"33b8b1c1": "transferInt(address,address,uint256,bool)", +"33b8c29d": "updatePriceOfEth(uint256)", +"33b91db5": "GetTocPrice()", +"33b9d3f4": "_buyCoins(address,uint256)", +"33ba2ef9": "hipstermasterReq()", +"33bb70ee": "getCoinAge()", +"33bbae93": "end_date()", +"33bc1c5c": "publicSale()", +"33bc6283": "TruReputationToken()", +"33bd8036": "addressPayableFunc(address)", +"33bd943e": "abandonListingService(uint256)", +"33bebb77": "forceTransfer(address,address,uint256)", +"33bfaf4e": "MickeyToken()", +"33bffccc": "openPreSale()", +"33c023ef": "doInvestment(uint256,address,string,uint256,bool)", +"33c1420a": "raffle()", +"33c24bd3": "accountIds(uint256)", +"33c4a1d6": "SetScndOwner(address)", +"33c5da42": "setGaspriceMax(uint256)", +"33c6c1af": "setCentralAccount(address)", +"33c6cdd3": "modifyRatePlan(uint256,string,bytes32)", +"33c724ee": "setLosers()", +"33c74e79": "participantContribution(address)", +"33c77a6d": "pauseICO()", +"33c7b38f": "withdraw_to_eti()", +"33c7c026": "feePayment()", +"33c7d1cc": "restart(bool)", +"33c84990": "setNewClaimer(address,address)", +"33c8adce": "enterLeague(uint256[],uint256,bytes)", +"33c90632": "createTransferAuction(uint256,uint256,uint256,uint256)", +"33c91611": "safePay(uint256,uint256,address,bytes)", +"33c9b83c": "preIcoSoldTokens()", +"33c9ccf5": "isKeyOwner(bytes32,address)", +"33c9f271": "get_project_information(uint256,address)", +"33ca4773": "getBrandData(address)", +"33ca55d7": "requestTransferChildrenOwnership(address)", +"33caaa43": "tokenRewardContract()", +"33cbee23": "teamTwoDivsTotal()", +"33cc4f9f": "FIDAToken()", +"33cc9c3e": "getLuckyPendingSize()", +"33cd3383": "investmentsOf(address)", +"33cd7ede": "totalJackpotOdd()", +"33cdfc76": "accountOf()", +"33ce1cda": "JSJC()", +"33ce724a": "sendSoldTokens(address,uint256)", +"33ce7787": "transferInvestorAccount(address,address)", +"33ced321": "genLevelExp()", +"33cf3ca0": "icoDeadline()", +"33cf58f9": "Accepted()", +"33cfc5e3": "DEFToken()", +"33d020ae": "getManifestId(address,bytes32,bytes32)", +"33d072e2": "processFunds(address,uint256,uint256,bool)", +"33d0a56b": "Melt(address)", +"33d14097": "DoRollEvent(address,uint256,uint256,bool,bool,bool,bool,uint256,uint256,uint256)", +"33d1e5b9": "lockupAccount(address,address,uint256)", +"33d24dc4": "setTypeAdvantages()", +"33d2cea2": "getDiceWinAmount(uint256,uint256,uint256)", +"33d34bad": "nextlotnr()", +"33d52c71": "ico3Cap()", +"33d58ca6": "F2UToken()", +"33d59f0a": "setJobStatus(uint256,uint8)", +"33d5d29b": "containsOperator(address)", +"33d5e4ca": "LogErrorMsg(string)", +"33d634df": "getSpinResults(uint256,uint256,uint256,address)", +"33d63869": "icoReserveSupply()", +"33d64a6f": "Start_Resume_ICO()", +"33d6c065": "PenCrowdsale(uint256,address,address)", +"33d764a2": "transferPreSigned(bytes,address,uint256,uint256)", +"33d9529a": "Totalbalance(address[])", +"33d97457": "GRAPE_SECS_TO_GROW_VINE()", +"33da67a0": "setForceNsfw(uint16[],bool)", +"33daaa5e": "setMakerFeeRate(uint256)", +"33db82fd": "outToken()", +"33dd1b8a": "setAllowed(address,address,uint256)", +"33dd5fb8": "TransferAntique(bytes32,address,address)", +"33dddc3a": "openLootbox(address)", +"33de06d5": "changeEscapeHatchCaller(address)", +"33de61fb": "Marvin()", +"33de96c6": "cancelTransaction(address)", +"33decdc6": "returnVolAdjuster(uint256)", +"33df4155": "setSPARCAddress(address)", +"33dfc93c": "untokenizePosition(bytes32,address)", +"33dfe91d": "isDefValueInRange(uint8)", +"33e06ee7": "buyTokensAtRate(address,uint256)", +"33e11ec4": "getBcouponTransferCost()", +"33e13ecb": "Execution(uint256)", +"33e2df5c": "newTeamCreated(bytes32,bytes3,bytes3,bytes3,bytes3,bytes3,bytes3)", +"33e2df5d": "isTokenValid(string)", +"33e335a0": "fromPaymentGateway(address)", +"33e364cb": "resumeSale()", +"33e36c50": "FundsLoaded(uint256,address)", +"33e3e86a": "isValidSan(string)", +"33e5bce1": "allow_spend(address)", +"33e663a4": "BonusEarned(address,uint256)", +"33e665eb": "setMonsterAuctionAddress(address,address)", +"33e67012": "disableChain(uint256)", +"33e712fe": "functionEight()", +"33e747b3": "setCapAtWei(uint256)", +"33e7ed61": "submitPool(uint256)", +"33e7fb97": "modifyExecutorAddr(address)", +"33e85eac": "get_king_price()", +"33e8b084": "dePesoToken()", +"33e8b8ac": "setFounderAllocation(address,uint256)", +"33e8df7e": "get_property_address(uint256)", +"33e90f98": "migrateMntp(string)", +"33e9698c": "tokenIssueDeadline()", +"33ea3dc8": "getTransaction(uint256)", +"33ea7a2b": "setBundinha(string)", +"33ea80cb": "getProposalUint(int256,uint256)", +"33eb5564": "mid(uint256,uint256,uint256)", +"33eb647f": "ECNcoin()", +"33ee2297": "MintedGrey(address,uint256)", +"33eeb147": "isFrozen()", +"33ef5698": "setShareTradingEnabled(uint256,bool)", +"33f0779d": "sendWhitelistReferralRewards(uint256)", +"33f08327": "generate_paymentID(uint256)", +"33f1da25": "BiQToken(address,address,address,address)", +"33f1dfb5": "withdrawTokenByAdmin(address,uint256)", +"33f2da95": "test_insert_findWithHintNextUpdateTail(int256)", +"33f2e7f8": "takeOffer(uint256)", +"33f30a43": "getNarco(uint256)", +"33f3197e": "Bet(uint256,string)", +"33f327be": "FeemCoin()", +"33f3344c": "readQuantity(address,uint256)", +"33f35c40": "webdToken()", +"33f37304": "tTokens()", +"33f44026": "mintFoundingTeamTokens(address,uint256)", +"33f4406a": "addressCommunity()", +"33f472b9": "MPO()", +"33f50b1c": "extendICO()", +"33f707d1": "ownerWithdraw(uint256)", +"33f7c9fe": "UsersList()", +"33f8845d": "GetTotalRigCount()", +"33f88d22": "mintOwner(uint256)", +"33f8e8c7": "getUserTokenInfosLength()", +"33f9942b": "awardPoint(bytes32)", +"33f9b36f": "getIcoStartDate()", +"33fa59f0": "creationProfit()", +"33fb1e05": "withdrawChamp(uint256)", +"33fb9e35": "killSelf(uint256)", +"33fba1ed": "_getFightData(uint32)", +"33fbff32": "setSaler(address)", +"33fc56d9": "withdrawUnclaimed()", +"33fc5f47": "proposePurge(address,bytes32)", +"33fc6367": "updateRefundState()", +"33fcffa8": "Option(uint256,uint256,string,string,string,string,string,string,bytes32,address,string,address,uint256)", +"33fd066d": "doBalanceFor(address)", +"33fd40ec": "oraclize_query(string,bytes[4],uint256)", +"33fd9397": "buyBackPriceWei()", +"33fdb097": "BTSC()", +"33fdbbe5": "DECIMAL_FACTOR()", +"33ff588d": "ownerChangeRunning(bool)", +"3400a6dd": "crowdsale(uint256,uint256,uint256)", +"3400d00d": "PayTokens(address,uint256,uint256)", +"3401c277": "subtractAmount(address,uint256,uint256,uint256)", +"3402b841": "closeVoteCommitPhaseIfAllowed(address,bytes32,bytes32)", +"34032f4f": "teamSupply12Months()", +"3404ab6a": "calcEthersToTokens(uint256,uint8)", +"3405321d": "_setPrice(uint256,uint256)", +"34057a45": "rollAddress()", +"3405ae40": "setMaxSubscribers(uint256)", +"3405deed": "alwaysReverts(uint256)", +"34065b66": "getSmallBonus()", +"3406784d": "arbitrateC4FContract(uint8)", +"3406956a": "bountyTokenFund()", +"340695c0": "PRESALE_RATE()", +"3406e3fb": "singleTransGasCost()", +"340700e5": "Satochi4()", +"34075cbd": "proposalStatuses(uint256)", +"34083a28": "HoneyToken()", +"34085549": "buildAt(uint256,uint256,uint256)", +"340867a0": "setMiniPoolEdit_1(string)", +"3408f73a": "getStorage()", +"340955fc": "isNotDuplicateMembers(bytes32)", +"3409952b": "setStorageInterface(address)", +"340a247c": "getQueryCost(string)", +"340a773a": "LockedToken(uint256,string,string)", +"340adb29": "getExportingParty()", +"340dc485": "addEmailHash(uint256,address)", +"340ddda6": "MeatConversionCalculator(uint256,uint256)", +"340df28f": "finishUpgrade()", +"340e47f8": "activateStore(string,bool)", +"340e4fd5": "totalRequestsAmount()", +"340ea558": "isFavorEscrow(uint256,address)", +"340f4fea": "setBetExpirationBlocks(uint256)", +"340f5920": "winningTicketNumber(uint256)", +"340f5e4e": "get_all_num_levels()", +"340fef94": "MMMbCoinCrowdsale(uint256,uint256,uint256,address,address,address,address)", +"34100027": "withdrawLegalContingencyFunds()", +"34103ee4": "setCrowdsaleAgent(address)", +"3410452a": "getRequestsCount()", +"34106c89": "updateRenExTokens(address)", +"34107282": "signer1()", +"3410cbd5": "layersRec(uint256,uint256)", +"3410eb5b": "userRefundTo(address)", +"3410fe6e": "DIVISOR()", +"3411231c": "ANXToken()", +"341176d6": "crowdsaleManager()", +"34119d15": "setSellFeeBps(uint256)", +"3411c81c": "confirmations(uint256,address)", +"3411cb08": "getFreelanceAgent(address)", +"34122952": "build(uint256,int256,int256,uint8)", +"34127649": "JvaToken(address)", +"3412a15c": "testConnection()", +"3412a4ac": "setFundingEndTime(uint256)", +"34133df9": "TR()", +"341367ec": "getMaxCAP()", +"34140748": "_upgradeTo(address)", +"34145808": "totalRewardToken()", +"3415650e": "buyStatus()", +"3415bdd4": "buyAKeyWithDeposit(uint256,address,uint256)", +"3416f9d4": "subtractSafely(uint256,uint256)", +"34174331": "selfHybridization(uint256,uint256)", +"3417f8d3": "addHolder(address,uint256,uint256)", +"341855bf": "HappyBirthdayToken()", +"341881e6": "endPreIco()", +"34190567": "DebugInt(int256)", +"341912ad": "SOCIALXBOUNTY()", +"341b96c2": "WalletAddressChanged(address)", +"341b9cc2": "ValueToken(uint256,string,string)", +"341bae0e": "refBonusPercentAtNow()", +"341bcbc1": "endIco2()", +"341c3304": "presaleTokensSold()", +"341cc817": "preicobrandingWallet1Pct()", +"341ceb42": "updateAmountOfEachChoice(uint256,uint256)", +"341f13f2": "authorizeDeploy(address)", +"341f5ee2": "omsairam18()", +"341f6623": "toAddress(bytes32)", +"3422e048": "getFirstTokens()", +"3422ede1": "Vault(address,address,uint256,uint256,address,uint256)", +"3422f709": "totalSencCollected()", +"34231e72": "getMyTransferredWine()", +"342368e4": "SubFromDividends(uint256)", +"3423a768": "finalizePreICO(uint256)", +"342442bd": "lockTeamAndReserve()", +"342454c7": "isDigit(bytes1)", +"34247b9b": "changeDBAddress(address)", +"34253af5": "isICORunning()", +"34256ab2": "createQuote(uint256,bytes32,bytes32)", +"34265c48": "releaseTime(address)", +"34273351": "withdraw2(uint256)", +"34289460": "cleanupTo(address)", +"3428e7ba": "checkForNewDay()", +"342930aa": "peekHatch()", +"342b7e71": "setTokenList(address[])", +"342b88ba": "setIcoTier(uint256)", +"342ba8de": "getGen0IVs()", +"342bd327": "GenesisRewardPerBlock(address)", +"342c17cd": "finalReserveAllocation()", +"342ca5d6": "pricePointsLength()", +"342d9185": "pricePerTokenAtCurrentTier()", +"342d9a04": "challengeClearing(bytes32)", +"342e0260": "gettruelevel(address)", +"342e515c": "Electrium(uint256,string,uint8,string)", +"34302882": "ETY(address)", +"34302d82": "midTimeBonusLimit()", +"34306cb8": "placeMessage(string,bool)", +"34309e97": "tokensOwner()", +"3430f7b1": "TitleAdded(uint256,address,uint256,string,string,string,uint256)", +"3431024f": "disApproveUsers(address[])", +"3431a0be": "RegisterSeller(address,string,string,string,string)", +"3432000c": "kittiesContract()", +"343214ae": "isFundFreezePeriodEnded()", +"34334e9e": "removeBlacklistedUser(address)", +"34335c01": "getPresale2()", +"343458e2": "withdraw(uint256,bytes32,address,uint256)", +"34354f93": "ABC()", +"3435dea2": "PoolJoined(uint8,uint8,uint256,uint256)", +"3435e5f3": "newChief(address,uint256)", +"3435ea80": "adduser(address,uint256)", +"34364afa": "modifyICOStartDate(uint256)", +"34376542": "OwnerUpdate(address,address)", +"34376ca0": "authorizeBurner(address)", +"3438c758": "DelayedPayments(uint256,uint256,uint256)", +"34399ea8": "considerCurrentInterest()", +"3439b433": "RSPLT_E()", +"343a875d": "getUint8()", +"343a8d56": "Lucky888Token()", +"343aad82": "flow()", +"343ab4cd": "getMiningPoolAddres()", +"343ab68b": "getFreelancerContractsCount(address,address)", +"343bd7eb": "insertOwner(address)", +"343c018b": "GarudaToken()", +"343d5048": "FighterCore()", +"343dbeb6": "isServiceRemoved(address,uint32)", +"343dfb7e": "referralPercent()", +"343efc6c": "WorthlessToken()", +"343f3acb": "GetAllBetIDs()", +"343f40a0": "testFailCreateSameItemId()", +"343ff8c7": "deductshares(uint256,address)", +"3440465e": "addElement(bytes32)", +"34406f33": "sha3Docs(bytes32)", +"344090f2": "Ownable1()", +"34409e38": "_generateNewSaddle(uint256,uint256,uint256,address)", +"3441ecf2": "Calculator()", +"34428440": "tokenExchangeRateMile1()", +"3442a868": "getBtcForkCoins()", +"3443c64a": "changeEEMWallet(address)", +"3444189b": "newKudosPoll(string,string,uint8,uint256,uint256,uint256)", +"34452f38": "disableMint()", +"3445679a": "USDto1ETH()", +"34457cbe": "ExponentialDecayingTokenFunction()", +"344605f4": "ETFloorPresale(address)", +"344615ab": "unSell()", +"3446bac4": "retirarDividendos()", +"34475d8d": "getERC721Addrs(uint256)", +"3447a7ef": "addInWhiteList(address)", +"3448348d": "getEventSize()", +"34484b47": "functionSix()", +"34486434": "ConsentFactory()", +"3448c7d6": "createHistory(bytes,address,address)", +"3448ec4a": "checkMatchBatch(address,uint256[16])", +"344929e4": "CTS(uint256,string,string)", +"3449387b": "GetFileLocation(bytes32)", +"3449f61c": "_getBonus(uint256,uint256)", +"344b8386": "firstYearPeriods()", +"344bcc7d": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes,address)", +"344bcd7d": "allCrowdSaleTokens()", +"344c0dd5": "newChamp(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"344c5ea1": "Mino()", +"344c5fd6": "firstPeriodOfICO()", +"344cc2b8": "getAllBidsByAdunit(uint256)", +"344d1ef2": "getCarSelling(uint32)", +"344d9576": "ReinvestWallet()", +"344e23cf": "previligedBalanceOf(address)", +"344eca75": "amountRaisedICO()", +"345006b6": "getGenerationForCall(address)", +"34501134": "get_pre_kyc_bonus_denominator(address)", +"34516038": "getSellCount()", +"34523cbc": "numberOfWhitelists()", +"3452f51d": "push(address,uint128)", +"345393f0": "getOuLianPublicAddress()", +"34552a0a": "RegisteredContract(string,address)", +"34553a44": "getRequiredSubscribers()", +"34556035": "icoCompleteB()", +"345591ec": "inDistributionMode()", +"345607ab": "StoreProofOfUplinePaid(address,address,address,address,address,address,address,uint256)", +"34574ff3": "XFMSold()", +"345899fe": "addRoles(bytes32[],address,address)", +"34592491": "infoWithdraw2()", +"345942c8": "revealBet(address,string)", +"3459b1af": "SaleNew()", +"3459d2ba": "getTilePriceAuction()", +"3459fb6f": "unpack_data_groups(int256[],bool)", +"345a1ae4": "LASTTRIAL123()", +"345a3899": "Insurence()", +"345a4423": "win(uint8)", +"345a5fe4": "addRecoveryAddress(address,uint8)", +"345a8e5b": "uint2bytes(uint256)", +"345ac602": "fixAmount()", +"345b256a": "projectStorageVault()", +"345b3d3a": "newOrder(address,address,string,string,uint256,uint256,uint256)", +"345bc544": "maxAllowedBetInTokens()", +"345c8fca": "setFreezeTx(address)", +"345cad7e": "useItem(address,uint256,uint256)", +"345d116f": "LotteryRoundWinner(address,bytes4)", +"345da007": "setClassName(uint8,string)", +"345e2f91": "transferEarningsToOwner()", +"345e3416": "adminRetrieveDonations()", +"345efa4e": "CurrenseeCrowdsale(uint256,address,address)", +"345f342e": "concludeVoting(uint256)", +"345f58b2": "AcceessoryWrapper721()", +"34610182": "getFuelsIds()", +"34615bef": "_discipleVendPrice(uint256,uint256)", +"3461a5e8": "ARCO()", +"346223f5": "Cocoon(address[],address,address)", +"3462f32d": "execWithGasLimit(bytes32,bytes32,uint256,uint256)", +"3463934b": "Bqt_Token()", +"3463c5c7": "patentValidTime()", +"3463d76d": "databaseDownloadUrl()", +"34646163": "getDataset(address,uint256)", +"3464af6a": "testCopyAddress(address)", +"3464e4da": "grantTokensCommonPool(address,uint256)", +"3465d6d5": "record(address)", +"346692b7": "tokenKeys(uint256)", +"3466f07f": "DRAKE()", +"34686b73": "numberOfAddress()", +"346896c0": "getMinerLv1(address)", +"3468b4a8": "OxTokenInitialized(address)", +"3469a55b": "getDepositID(address)", +"3469acbb": "initCard2()", +"3469f6e2": "finalizeRound(uint256)", +"346a2f9e": "percentBank()", +"346a37d2": "markComplete(bytes32)", +"346b306a": "oraclize_query(string,string,string)", +"346b783c": "refundToPlayer(address)", +"346b7939": "icoReservedSupply()", +"346bfd9f": "eventBurn(address,uint256)", +"346c1aac": "getNextAvailableBond()", +"346c95df": "SuNFT()", +"346c96e9": "addFund(uint256)", +"346cabbc": "scheduleCall(address,bytes4,uint256,bytes,uint256)", +"346cf356": "tradeCards(address,uint256)", +"346e8cea": "allCarsInfo()", +"346e9a26": "getCanWithdraw(address,uint256)", +"346f2eb7": "set_bonus_received(bool)", +"346f5991": "sendTokensToTeamLock(address)", +"346f8827": "addWineryOperation(bytes32,address,string,string,string,uint256,uint16,string)", +"346f9f95": "collectAddr()", +"346fc0dd": "maxCrowdsaleSupplyInWholeTokens()", +"346ff6b3": "getNumRounds()", +"346ffa4b": "changeValues1(bool,bool,bool,bool,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"34701db8": "totalTicketsSold()", +"34705c2f": "validateTransferAmount(address,uint256)", +"3470b833": "blackListERC223(address)", +"34716f67": "post(string,bytes20[])", +"3471728a": "masterContractAddress()", +"3471aef0": "handbreak()", +"3471b034": "Submission(uint256,string,address,address,uint256,string)", +"34721e08": "test0Alice()", +"3473bf30": "setEndingTime(uint256)", +"3473f5e4": "HashOfDB()", +"34746d86": "killTokensForGPower()", +"347518c7": "validPurchaseTime(uint256)", +"34757fa9": "correctPreICOPeriod(uint256)", +"34758cb3": "currentEggPrice(uint256)", +"3475c1e7": "attemptPublishOfArticle(uint256)", +"34762a94": "ethHandleIsRegistered(bytes32)", +"347632e8": "getShareholderAdressByID(uint256)", +"34763586": "FoundersAndPartnersTokensIssued(address,uint256,address,uint256)", +"347637b3": "setBDApprove(address,uint256,bytes32)", +"34766ecc": "PauseOff(uint8)", +"3476aeb0": "signer2_proposal()", +"34771f81": "setData_5(string)", +"34776c6e": "DEAToken()", +"347820eb": "previousUpdateTime()", +"34785e79": "setEthRelief(address)", +"34786d1d": "totalTokensToTransfer()", +"3478ab86": "HYToken()", +"3478ac2b": "createShow(uint256)", +"3478dc44": "getRecordOffers(bytes32)", +"3479101f": "setProviderSupply(uint256,uint256,uint256)", +"34791ae5": "POPPToken()", +"3479f017": "ServiceContract(uint256,uint256[],uint256[],string,uint256,uint256,uint256[],uint256[],address,address,address,address,address)", +"347aa903": "SDOGE(uint256,string,uint8,string)", +"347aba23": "evePerEth()", +"347acf2f": "mintingFactories(uint256)", +"347b3923": "putProfit()", +"347b5193": "LiquexPrivateInvestment(address)", +"347caeb4": "PhxHell(address)", +"347cda88": "needsBlockFinalization()", +"347d5bc2": "setPayoutOdds(uint256)", +"347e26c0": "icoEtherContributed(address)", +"347f5f00": "TokenPurchase(address,uint256,uint256,uint256)", +"347f8f54": "_setDiscount(uint256,uint256)", +"347ff187": "changeAirAmount(uint256)", +"34805e7c": "targetBlockNumber(uint256)", +"34809ee7": "doge()", +"34810336": "discountEndTime()", +"34814e58": "transferBalanceWithFee(address,address,address,uint256,uint256,address)", +"34825a23": "playGame(uint256,uint256)", +"3482e0c9": "cancelAuthorization(address,address)", +"34831b79": "VENSale()", +"34833a6d": "icoBalanceOf(address,address)", +"34835560": "innerlockStartTime()", +"348378d0": "Whitelisted(address,uint256,uint256,uint32)", +"348508cf": "thirdDueDate()", +"34854101": "ETH_TO_WEI()", +"3486645f": "forkReceive(address,uint256)", +"3486fb30": "mintLockPeriodBatch(address[],uint256[],uint256)", +"3487d97c": "setPriceCredentialItemId(bytes32,bytes32)", +"348a653a": "CONFIG_DURATION()", +"348b1b7d": "temperatureMin()", +"348be311": "LogBidOpened(uint256,address,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"348c5b20": "basicApproveTest(address)", +"348e9779": "Restart(uint256)", +"349136af": "BonusScheme()", +"3491a19d": "TokenDemo(string,string,uint8,uint256)", +"3491d0f1": "processTransactionFee(address,uint256)", +"349221be": "ColorCoin(address,address)", +"349296a5": "SaleAuction()", +"3493075e": "getLevelCitizenLength(uint256)", +"3494ab3d": "validEAContract(uint32,address)", +"3494f222": "issueSuperMetal(address,uint256)", +"3495015a": "UnlimitedIPToken()", +"349501b7": "checkDepth(uint256)", +"34950dcf": "approvedSubmissions(uint256)", +"34954a99": "updateBalance(address,address,uint256)", +"34955a2b": "setTavernContract(address)", +"3495b21e": "setNewReleaseEndTime(address,uint256,uint256)", +"349718ed": "MarketCoin()", +"34971dd6": "totalEtherCap()", +"34984add": "signedTransferFrom(address,address,address,uint256,uint256,uint256,bytes32,address)", +"34988b95": "ExToke()", +"3498aaaf": "LogAllowedFromAddress(address,bool)", +"3498b00f": "getSectionIndexFromIdentifier(uint256,uint256)", +"3498c518": "StageClosed(uint256)", +"349a1f03": "getNumSums()", +"349a373b": "batchcreatevillage(uint256)", +"349a6edb": "_purchaseTokens(uint256,address)", +"349aa97e": "ethereumToTokens2_(uint256)", +"349ab992": "divCutAdmin()", +"349ae23b": "collectFor(address)", +"349b586c": "isCrowdsaleFinalized()", +"349b6486": "revokeGrant(address,uint256)", +"349c1ee3": "enableCrowdsale()", +"349c3d75": "changeSaleBonusRate(uint256,uint8)", +"349c870c": "initChainLedger(address,address)", +"349ca600": "Tags()", +"349cdcac": "reLoadXid(uint256,uint256,uint256)", +"349d1661": "BuyToken(address,uint256,bytes32)", +"349d3dc5": "breedTimeout()", +"349d8b4e": "communityMultisig()", +"349dc329": "miner()", +"349eb329": "jsonCat(string,string)", +"349f7173": "lastOraclePrice()", +"349f939a": "SaleEnded(address,uint256)", +"349fcf85": "UpdateAddressPayForService(address,address)", +"349fdb09": "setUnPaused()", +"34a014dc": "lastWithdrawalTime()", +"34a042d8": "bountyPoolAddress()", +"34a2b766": "getMarketData(address,address)", +"34a3312e": "setStore(string,address,address)", +"34a3b820": "getNewFallbackDepositPeriod()", +"34a4a527": "getCountHolders()", +"34a4b10b": "allocatetokensAndWL(address,uint256,uint256)", +"34a503e8": "_utfStringLength(string)", +"34a5eaa9": "_createPerson(string,address,uint256)", +"34a6074e": "buyWithBalance()", +"34a6301e": "setmessager(string)", +"34a6d832": "canPurchase()", +"34a6e514": "updateTaskState(string,string)", +"34a7ed17": "wikiAddTokenTo(address,uint256)", +"34a814a3": "setMyEthBalance(address,uint256)", +"34a8c392": "webSite()", +"34a8eb53": "getarg_1_input()", +"34a8f866": "setMatured(uint32)", +"34a90d02": "lockAddress(address)", +"34a9918e": "DEWCOIN()", +"34a991db": "enableManager(address,bool)", +"34a9a1ae": "getTokenDefaultPartitions()", +"34a9bb34": "getCurrentPublicBracket()", +"34aa0e7f": "dividendRegistration()", +"34aa982a": "getInfoForDisputeAndValidate(bytes32,address,address,address)", +"34ab32e1": "minerTotalYears()", +"34ab8256": "RUDAWORLD()", +"34abd1b1": "updateMaxPhase3(uint256)", +"34ac6f5e": "AVAILABLE_FOUNDER_SUPPLY()", +"34acc716": "projectDone()", +"34ad1e53": "giveBalance(uint256,uint256,uint256)", +"34ad324c": "sendToOwners(uint256)", +"34ad6f00": "TimePassBy(string,uint256)", +"34ae6984": "view66()", +"34aeefd5": "RemovePlayer(address)", +"34af370f": "lockTime(address,uint256)", +"34b0e5ed": "icoPrice()", +"34b122cb": "addTokensToReturn(address,address,uint256,bool)", +"34b20591": "createERC20Token(uint256,string,uint8,string)", +"34b3ae71": "_distribute()", +"34b3b014": "resolveSupply()", +"34b4eef2": "setStartIcoPreICO2ndRound(uint256)", +"34b55235": "registerAffiliate(address,string)", +"34b63592": "addre(address)", +"34b73591": "DevMiningRewardTransfer(address,address,uint256)", +"34b768c7": "summonHero(address,uint8,int256)", +"34b7ac9b": "END_MINTING()", +"34b88e04": "claimCoreTokens(address,uint256)", +"34b8b690": "Yuri()", +"34b98747": "onlyOwnerGetTeamWallet()", +"34bafed3": "date_string(int8,int8,int16)", +"34bb1a9e": "founderTimeLock()", +"34bb3ee1": "updateEthICOVariables(uint256,uint256)", +"34bb447f": "getDiceWinAmount(uint256,uint256,bool)", +"34bbabbd": "RaffleTshirt(string,uint256)", +"34bc5156": "Crowdsale(uint256,address)", +"34bc98b7": "latestPing(uint256)", +"34bd08c4": "getLargeAmountBonus(uint256)", +"34bdcd0a": "getLedgerValue(string,address,address)", +"34bdea85": "setICO2Phase()", +"34bdf2c4": "setReference(address)", +"34be5fab": "mintParcelTokens(address,uint256)", +"34be9ffb": "confirmApplication(uint256,bool)", +"34beb204": "ZZC(uint256,string,string)", +"34bed16c": "bountyRefund(address,uint256)", +"34bf97ea": "setBonuses(uint256[])", +"34c05ca8": "modifyMetadataHashes(uint256,bytes32,bytes32,bytes32[],bytes)", +"34c0c9c6": "RemoveApprovedAddress(address,address)", +"34c0d654": "setPackageDb(address)", +"34c19b93": "getCallGracePeriod(bytes32)", +"34c1b4ba": "sha(bytes)", +"34c1ef77": "publicSaleTokensAvailable()", +"34c2904b": "giveDividend(uint64)", +"34c2b620": "getNickname(uint256)", +"34c31392": "breakParentsHaveGreaterPriority(uint256,address)", +"34c3236a": "signatureDropSingleAmount(address[],uint256)", +"34c39d1c": "ThreeDLTokenDeposit()", +"34c42106": "BOXT()", +"34c5c059": "addEtherToSphere()", +"34c6766f": "getImportingAuthority()", +"34c6a9ae": "getTokenTimelockDetails(address,uint256)", +"34c721a9": "getExploreResult(uint256,uint256)", +"34c73884": "Mint()", +"34c757cf": "NBAT102(address,address,address,address,address)", +"34c7b8e8": "getReadMessages(address)", +"34c7dcf8": "proposedUserKey()", +"34c8e114": "reservedDestinations()", +"34c8ea26": "SetupiBird(string,string,uint256,uint256,uint256,address,address,uint256)", +"34caa999": "setMinimumFundingAmount(uint256)", +"34cac67e": "investorsArray(uint256)", +"34cad6b8": "retreiveTokens()", +"34cad836": "coinsaleDeadline()", +"34cbbef9": "EndRateChange(uint256)", +"34cc0a12": "_addWhitelister(address)", +"34cc182b": "updateDiamond(string,string,uint256)", +"34cc4b8f": "ratePerWeiInPrivateSale()", +"34cdb15f": "addressToTimestamps(address,uint256)", +"34cdf78d": "blockHashes(uint256)", +"34cec84d": "maxCapCompanyInventory()", +"34d05b1f": "freezeDeliver(address,uint256,uint256,uint256,uint256)", +"34d09ff1": "DemoraCash()", +"34d0cb6d": "CNYToken()", +"34d1c0e6": "transfer_bond_token(address,address,uint256)", +"34d2485c": "tribeTokens(address)", +"34d24bff": "no(uint256,string,uint256)", +"34d2c4cb": "mintProxyWithoutCap(address,uint256)", +"34d31de3": "length(uint8)", +"34d33f9f": "kycRefuse(address)", +"34d40382": "nextSection(bytes32)", +"34d4776b": "removeApprovalStatus(address)", +"34d4cd82": "getTokenForTeam(address,uint256)", +"34d55cd9": "SerpentCountDown()", +"34d56b0a": "Currentproposal()", +"34d5751a": "approveContractCall(address)", +"34d5f37b": "round(uint256)", +"34d5fc4b": "transferInitialAllocationWithTimedLock(address,uint256,uint256)", +"34d609ac": "auditorHasStaked(uint256,address)", +"34d64e50": "getDoneAirdropAmount(address)", +"34d71238": "sencBalance()", +"34d722c9": "minterAddress()", +"34d83dab": "PhaseICO()", +"34d8521b": "quarterlyWithdrawable()", +"34d8c24d": "init(uint256,uint256,address,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"34d92490": "changeFuckyou()", +"34d95bf0": "ShitCloneslordAddress()", +"34d9aee3": "assertEq7(bytes7,bytes7)", +"34dbe44d": "getLastBlockNumberUsed()", +"34dc2176": "inventoryProduct(bytes32)", +"34dc3c32": "pricePerWei()", +"34dc864c": "YYYToken()", +"34dcfec4": "minimalETH()", +"34df4222": "hasBeenLinked(uint32,int256)", +"34df8b63": "PER_USER_MAX_AVATAR_COUNT()", +"34df9b60": "getCow(uint256)", +"34e19907": "setSwapFee(uint256)", +"34e1ad21": "EmontFrenzyTool(address)", +"34e22921": "Call()", +"34e23416": "lastcombo()", +"34e24640": "distr(address,uint256)", +"34e24853": "encode(address)", +"34e255a4": "WTechTestCoin()", +"34e415db": "growWeed(uint256)", +"34e41bbf": "RATE_DAY_1()", +"34e4c06d": "maxSupplyGenerable()", +"34e5a5f8": "getPlayerInfoWithRoundID(uint256)", +"34e5a692": "distribute(uint128)", +"34e5e97a": "assignProduct(uint256,uint256,uint256,uint256)", +"34e70cc2": "tub()", +"34e73122": "calculateFee(uint256,uint256)", +"34e73f6c": "getAuctionCost(bytes32,uint256)", +"34e7a57a": "nonWLBalanceOf(address)", +"34e80c34": "getKeys(address)", +"34e8980f": "bootUpHangouts()", +"34e8c679": "retrieveTokens(address,uint256)", +"34e8ecea": "FindTheCureCoin()", +"34e8f247": "setStartTimeIcoStage3(uint256)", +"34e98037": "batchAssignment(address[],uint256[])", +"34e9d146": "EstateToken(uint256)", +"34ea5fe5": "setNumeratorDenominator(uint256,uint256)", +"34eaa923": "moveEther(address,uint256)", +"34eac76f": "withdrawalDeployed()", +"34eaf154": "investorAmount(address)", +"34eafb11": "totalCount()", +"34eb0cf5": "isUserBlacklisted()", +"34eb3200": "setRequiredProgressOfPreviousDungeon(uint32)", +"34ebb615": "maxTokenToBuy()", +"34ec514b": "setInitialPrize()", +"34ec96bf": "dAddCategory(bytes32,bytes32,bool,uint256)", +"34ed557f": "setTokenIpfsHash(address,bytes32)", +"34eea4a2": "executeRoom(uint256)", +"34ef39f1": "owner_withdraw()", +"34ef801e": "wcOnCrowdsaleSuccess()", +"34efcb8e": "getPlanet(uint256)", +"34f00e83": "setCrowdsaleStart()", +"34f03321": "PCM(uint256)", +"34f0e39e": "addCurator(address)", +"34f10c39": "chkcan(address,uint256,uint256)", +"34f110e5": "getPoolMaxPayoutQspWei(uint256)", +"34f1f9b1": "lbToken()", +"34f20f31": "setExchangeRateAuth(address)", +"34f245c2": "hasSecondUnionIds(bytes32,bytes32)", +"34f25146": "numOfReleased()", +"34f2d1ec": "scheduleUnsoldAllocation()", +"34f361a4": "bonusSecondWeek()", +"34f42df8": "testerc20()", +"34f50813": "PreICOToken(address)", +"34f64dfd": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address)", +"34f682e2": "GetPriceOfRigs(uint256,uint256,uint256)", +"34f6bef3": "allTokensDecimalsBalances()", +"34f6d0b3": "Congress(address)", +"34f71c5d": "InDetailToken()", +"34f732e8": "withdrawalLockTime()", +"34f8cc6d": "DrAgentToken()", +"34f9445e": "consumeEnergy(address,uint256)", +"34f96971": "lockedBalanceCount()", +"34fa0606": "getControlInfoTokenlist()", +"34fa17cb": "getTeamBet(string)", +"34fa37da": "grantTokens()", +"34fb032e": "getAddr(string,string)", +"34fb11ed": "setMintingFeeEnabled(bool)", +"34fc2591": "toggleFreeze()", +"34fc62ff": "_badgeOwnerChange(uint256,address)", +"34fcc3e7": "getBetting(uint256,address)", +"34fcf437": "setRate(uint256)", +"34fe00b1": "getDocumentMajorities()", +"34fe0cf5": "payFee(address,address,address,bytes32,address,address,bool)", +"34fe5473": "largestDonation()", +"34fec467": "transferAllowed()", +"34fee3e4": "AuctionSuccessful(uint256,uint256,address,uint256)", +"34ff37f3": "returnLongCouponAmount(address[3],bytes32,uint256)", +"34ffea2c": "token_iso_price()", +"35001a1a": "internalMint(address,uint256)", +"350078b8": "staticblock()", +"3500a48d": "transferCommunityCommune(uint256,address)", +"35013592": "getStageCap(uint256)", +"35020cb9": "getReferenceType(bytes32)", +"35021991": "PresaleStarted(uint256)", +"350279c6": "getStage3Cap()", +"3502be27": "TaxTillNow(uint256,uint256)", +"35039525": "isBarCode(bytes32)", +"350460f8": "basicTokensPerEth()", +"35046722": "getAddressBalance(address)", +"350486da": "AgiCrowdsaleMock(address,address,uint256,uint256,uint256,uint256,uint256)", +"35058a2a": "approveOperatorTo(address,address,bool)", +"3505e844": "userExists(address,address)", +"350604f1": "rakesOwing(address)", +"3506b32c": "FailedTransfer(address,uint256)", +"35082933": "setAdminWallet(address)", +"350845f5": "maxStage3AllocationPerInvestor()", +"35085b58": "weekThreeStart()", +"350896f7": "setEtherPriceManually(uint256)", +"3508eddb": "AnkitToken()", +"3508f2e8": "Monday(uint256,string,string)", +"350a6429": "minAmountETH()", +"350b4c6f": "setWLMTBounce(uint256)", +"350b4cb6": "BaseAirdrop(address,address)", +"350bb144": "createContractGirl(string)", +"350c0acf": "checkWithrawStock(address)", +"350c35e9": "withdrawCollateral(address,uint256)", +"350cf91c": "createManufacturer(address,address,string,string)", +"350d141e": "getWasApprovedBeforeDeadline()", +"350d9b96": "walletWithdraw(uint256)", +"350dbcc5": "get_Sponsors_list_by_Job(uint256)", +"350dd4a4": "Nettekcoin()", +"350ee628": "addVerifiedInfo(address,address,string,uint8,string,string)", +"350f4270": "specificTransfer(address,uint256)", +"350f9e01": "swypes()", +"350fbe2e": "calcNextDrawTime()", +"35100acc": "credit_token(address[],uint256)", +"35101d8e": "balancesForOutcome(uint8,address)", +"35105e3b": "executeChildDaoProposal()", +"35109cc6": "PRE_SALE_TOTAL_TOKENS()", +"3510b66c": "reduceTotalSupply(uint256)", +"3511c1af": "getMySnake()", +"3511ca9c": "Freezing(address,uint256,uint256)", +"351210b3": "BpxToken()", +"35126330": "GanaTokenLocker(address,address)", +"35130678": "additionalPreMine(uint256)", +"351314a5": "oIDIndex_()", +"3513651c": "Spin(address,int256,uint256)", +"35139014": "preICOstart()", +"3513cab2": "getWeeklyBuyVolume()", +"3513d339": "ForceSendTokens(address)", +"351509a8": "TEAM_ADDRESS()", +"3515519c": "getInitialval()", +"3516df21": "supplyBurn(uint256)", +"3517a740": "getNodeParent(bytes)", +"35181711": "SetStartTimeIco(uint256)", +"3519786f": "setAvailableFlat()", +"35197d6b": "sendData(address,uint256,uint256,bytes)", +"3519932e": "authorized_recordStashedPayout(uint256)", +"3519a2f8": "fundContract(uint256)", +"351a97f8": "accountKind(address)", +"351abe61": "getBusinessVATStatus(uint256,uint8,address)", +"351adcb0": "SocialPay()", +"351b68db": "SWAP_LENGTH()", +"351be6ad": "releaseProduct(address)", +"351bf518": "transferFeeRate()", +"351c2576": "completeFavor()", +"351c9133": "userkeys_push(address,uint64,uint64,uint64)", +"351dadf4": "support_ban_of(address)", +"351df92a": "setBattleAddress(address,address)", +"351e46de": "setBLInterface(address)", +"351f42c3": "msgs(address,uint256)", +"351f98d9": "icnq()", +"35209715": "burritoPoolTotal()", +"35209821": "metadataContract()", +"35213a69": "abandonedFundWithdrawal()", +"35216bba": "enableTokenTransfer(bool)", +"3521d7da": "prvd()", +"3522e868": "changeLogicContractAddress(address)", +"35259f1a": "ThriveToken()", +"3525d66d": "CanvasFrag()", +"35269662": "importerBanker()", +"3527cae0": "_deleteUint(bytes32)", +"3528351d": "bouleDevMultisig()", +"3528a0c8": "GlobalTransfersLocked(bool)", +"3528c022": "days_interval()", +"3528f564": "allowancePerYear()", +"352a482f": "havedDistFoundCoin()", +"352a950c": "updateCnyBtcRate(uint256)", +"352bbdff": "referralContracts(address)", +"352c93b7": "getFess()", +"352d2790": "UUID4()", +"352d5cd0": "setPhaseSupply(uint256,uint256)", +"352e0891": "_isValidSignatureAndMethod(address,bytes)", +"352e1dff": "getWorkflowActivity(uint256,uint256)", +"352f43a8": "RongWQToken(uint256,string,uint8,string)", +"352f64f9": "getOwnerFee(uint256)", +"352fd696": "PERCENTAGE_OF_TOKENS_SOLD_IN_SALE()", +"352ff2bd": "setPreSaleRate(uint256)", +"352ffb9a": "Trident()", +"35300990": "propExists(bytes32)", +"353086e2": "MAX_BET_VALUE()", +"3530e895": "getClaimEst(address)", +"3531f0de": "LogWeiWithdrawn(address,uint256)", +"35347560": "getLamboAttributes(uint256)", +"35353b03": "parseAndRound(string,uint8)", +"353559cb": "Controller_Address3()", +"35359a3f": "tokenHolderAddress()", +"3535ab2a": "btcUsdRate()", +"3535cd52": "setDailyCosts(uint256)", +"3536046a": "getUInt(string)", +"35361909": "withdrawStart()", +"35371218": "closePositionDirectly(bytes32,uint256,address)", +"3538b13a": "MAX_TOKENS_FOUNDERS()", +"3538b9db": "test_twoValidEqBytes32()", +"3538e747": "rePayLoan(uint64)", +"35390714": "maximumFee()", +"353928d8": "helpRed()", +"35393197": "setReferer(address)", +"35396c1c": "createItem(uint256,uint256,uint256,uint256,uint256,uint256)", +"3539c468": "remainingTokenAmount()", +"353a3475": "setTargetAddress(address,address)", +"353ba8e9": "vvc(uint256,string,string)", +"353be218": "ToorToken()", +"353c0573": "burnInternal(address,uint256)", +"353d90ec": "numTickets()", +"353db436": "setCosts(uint128[])", +"353e65e9": "wallets(address,uint256)", +"353edf58": "presaleEndtime()", +"353f0e40": "getCurrGameInfoPart1()", +"353f1bc7": "setIsAllocatingInterest(bool)", +"353fe553": "BNDToken()", +"35400daf": "setTier2Participants(address[])", +"3540233b": "set_status_user(address,address,bool)", +"3540b529": "readIncUpdatedOn(string)", +"3540e96c": "tokenOWL()", +"35410f85": "KPCoin()", +"3541d365": "GPUMining()", +"3541fd53": "setStake(bytes32,uint256)", +"3541fe94": "teamVestingAddress()", +"354211c9": "TriwerToken()", +"35423643": "totalmoneyearned()", +"354271b4": "test_7_accessRestriction_UnderscoreRemoveMember_shouldThrow()", +"3542758f": "addOwner(address,string)", +"354284f2": "party()", +"3542aee2": "mintByOwner(address,uint256)", +"3542d0f6": "msgQPut(string)", +"35436725": "CoinMovement(address,address,int64)", +"3543b23c": "assign(address,string)", +"35446c78": "setAirDropPayableTag(bool,uint256)", +"3544a864": "whiteList()", +"354537da": "safeCloseSale()", +"3545acb0": "after_test_1_method()", +"354685fb": "setSellDividendPercent(uint256)", +"35468963": "rentModified(address,uint256,uint256)", +"354709dd": "trade(address,address,uint256,uint256,uint256,address,uint256)", +"3547800a": "lockTokens(address[],uint256[])", +"354836b9": "setIsReportingActive(bool)", +"3548fcd7": "getCardAttrs(uint256[])", +"35490ee9": "setPublicOfferPrice(uint256,uint256)", +"3549345e": "setPresalePrice(uint256)", +"35493e98": "icoEtherReceivedPreSecondSale()", +"35496d82": "POWHclone()", +"354a5137": "setWinnerTimeStatus(bool)", +"354b2735": "testDeploy()", +"354b7b1d": "updateVerified(address,bytes32)", +"354d68f2": "validate(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256,uint256)", +"354d7e40": "Payout()", +"354d89ee": "setTokenSaleContract(address)", +"354e1063": "setExtraConfig(uint256,uint256)", +"354e6ca7": "HippieCoinv2()", +"354eb40b": "emojisan()", +"354f1651": "completeBountyDistribution()", +"354f6398": "insert_candidate(string,uint8,string,string,string,string)", +"35509937": "changeWithdrawal(address,address)", +"3550b6d9": "getTokenAddressBySymbol(string)", +"3550e2e2": "changeBlockedTimeForBountyTokens(uint256)", +"3551a6ca": "nullifyFrom(address)", +"3551c8b9": "tokenesia()", +"355255f5": "totalSyndicateShares()", +"35527354": "submitNewHash(bytes32,uint256,uint256)", +"355274ea": "cap()", +"3552f552": "_random(uint256,uint256,uint256)", +"3552f9f6": "GetBetReadyTime()", +"3553f60d": "getPoolAdmin(uint256)", +"355421a8": "create(uint256,uint256,uint256,address,address)", +"355473d0": "setuped()", +"355474d2": "commitReading(address)", +"35548c02": "WINNERTAX_PRECENT()", +"35552dbc": "transferDSPRecord(address,address)", +"35554e58": "SearchUserPurchase(address,string)", +"3555fa90": "contractSpend(address,uint256)", +"35566ff0": "rewardSources(uint256)", +"3556afd8": "m_exchangeRate()", +"355784cb": "settleToken(bytes32,address,uint256,uint256)", +"35579f0c": "withdraw_token(address,address,uint256)", +"3557c1f6": "labAddress()", +"3557c70a": "removeMintingFactory(address)", +"3557d0e9": "testThrowIfNotExist()", +"35593bcf": "vestedAmountAvailable()", +"35595c95": "getSkillName(uint256)", +"355ae09c": "Fluzcoin()", +"355ba211": "emergencyOverwrite(bytes32,uint8,uint8)", +"355c6457": "tryToRecord(address,uint256)", +"355d59aa": "publicTokensAvailable()", +"355d7d03": "batchAllocate(address[],uint256[],uint256[])", +"355d7e05": "withdrawByMint(address,uint256)", +"355d8c64": "Uptrennd()", +"355dd1b3": "Donate_LuGoddess()", +"355df00b": "getTicketNumber(address)", +"355e0c5d": "tokenUri()", +"355e1b84": "Mstcoin()", +"355e56b9": "Assembly(address)", +"355e6b43": "setCommission(uint256)", +"355eb2c0": "canWrite(string,address)", +"355f41a9": "pay(uint256,uint256,address,bytes)", +"355f51a0": "right49(uint256)", +"355f7ea7": "canUpdateNextGameMinAndMaxBlockUntilGameEnd()", +"355fd8db": "thirdTimeLine()", +"35603440": "sections(uint256)", +"3560f05e": "AsX()", +"356282db": "changeMinBidMultiplier(uint256)", +"3562a1db": "CoderForge()", +"3562fd20": "setUIntValue(bytes32,uint256)", +"35639e11": "updateMinGasPriceForDrawing(uint32)", +"356442b9": "lockPercentage()", +"356594ab": "EtherTransfer()", +"35671214": "prev(uint256)", +"3567950c": "blockchainExchange(uint256,uint256,bytes32)", +"3567d5ef": "BuyGoods(address,uint32)", +"3567d637": "getTransactionListLength()", +"3568bd39": "mintStart2()", +"3568fb04": "createUint256(bytes32,uint256)", +"356b00af": "tranferMoneyToAddress(address)", +"356c22ec": "teamOne()", +"356ca551": "ZhkCoin(uint256,string,uint8,string)", +"356d414c": "transferFrom(address,address,address,uint256,uint256,bool,bool)", +"356d4a3a": "createJaroSleep(address,uint256)", +"356d6b24": "fifthBonusSalesEnds()", +"356e2927": "icoFinished()", +"356e7e9d": "mintToAccount(address,uint256)", +"356eeaab": "payAndReset()", +"356f056f": "releaseTime3()", +"356f083e": "_bytes32ToString(bytes32,bytes32)", +"356f55b7": "adminDropETH()", +"356f8964": "transferMed(address,uint256)", +"356f9865": "tokenPerWei()", +"356fefb3": "developer_edit_text_crowdsale(string,string)", +"357006c4": "Propellerhead()", +"3570c2ee": "PosRewards()", +"3570f217": "CarbonTOKEN()", +"3571e567": "PausableCappedDividendToken(uint256)", +"3572a28e": "EPT()", +"35734ba5": "ExternalSale(uint8,string,address,uint256,uint256)", +"35735226": "returnBonus()", +"3573df50": "CreateMND(address,uint256)", +"357401f5": "cancelBet(uint256)", +"35743ac9": "proposalActive(uint256)", +"3574da8c": "deployShop(address)", +"35759333": "checkList(uint256,address)", +"3575ecc6": "BreakbitsToken()", +"35765828": "addSystemUserEarnings(uint256)", +"3576a32f": "setBackupOwner(address)", +"3577d94e": "loanTerm()", +"35785e09": "sweepsState()", +"3578abf4": "QuintessenceToken()", +"3578b7b3": "setBuyPrice(uint256,string)", +"3578bb7f": "calculateScore(uint8[])", +"35796635": "numEndedGames()", +"3579c0df": "newAward()", +"357a0333": "initWithdrawal(address,uint256)", +"357a05cd": "cram(address,uint256,string)", +"357a05f1": "Crowdsale(address,address,address,address)", +"357a0ba2": "sgt()", +"357af806": "Restart()", +"357bd7d6": "ROHH()", +"357be177": "DemSoKhoaHoc()", +"357d0173": "removeArbiter(address,uint256)", +"357d4d1a": "ICloudSecAddress()", +"357e2e57": "addRequiredBlockHash(uint256)", +"357ee486": "createDonationsBank()", +"357fe12a": "createPromoMonsterWithTokenId(uint32,bytes,address,uint256)", +"3580031a": "consumesGas()", +"358049ea": "setDiscountTime(uint64)", +"35804a88": "returnBook(uint256,address,address)", +"35815b95": "FACTOR()", +"35817773": "getContract(string)", +"3581b257": "_addDividendsForAddress(address,address)", +"35828c8d": "TransactionInitiated(uint256,address,address,address,address,address,uint256,bytes32)", +"3583727f": "tokenSetSpeedBump(address,address,bool)", +"358373bd": "withdrawalInterCrypto(string,string)", +"35842f74": "depositDai(uint256)", +"358455b4": "testDefaultWallet()", +"3584fa38": "setDelegate(uint8,address)", +"358507d7": "claimRefundOnUnsuccessfulEvent()", +"3585609b": "getJobCanCancelAfter(bytes16,address,address,uint256,uint256)", +"358564ee": "allocateLoyaltySpend(uint256)", +"358592ce": "_freeze(address,bool)", +"3585e500": "nTransfers()", +"35862824": "isIcoOpen()", +"35866368": "transferFromWithCustomReservingNet(address,address,uint256,uint256)", +"35875623": "get_list_deposit_key(address)", +"35876476": "initialize(address,address,address,address,address,address,address)", +"3587904b": "limitOfTeam()", +"3587b26c": "setAutoBuy(uint256)", +"3588aa0b": "BMV()", +"358a074c": "admin_isRequireData(bool)", +"358a08cb": "activate(address,uint256,address,uint256,uint256,uint256,bool,bool)", +"358a11b4": "change_data(string)", +"358a18b2": "ThePatriotCoin()", +"358a2a84": "toHorse(uint256)", +"358c24b1": "CONFIG_MIN_PLAYERS()", +"358cc6f6": "acceptKyc(address)", +"358cfa25": "setTotalEtherPool(uint256,uint8,bool)", +"358d1e26": "HitToken(string,string,uint8,uint256,address,address)", +"358d5dc2": "getIsCashed(uint256,uint256)", +"358dff07": "minEthPerTransaction()", +"358f7f3a": "numberRange()", +"358fa6c6": "calcBuyout(uint256)", +"358fcee9": "fetchdivs(address)", +"358ffd79": "Controller(address,address,uint256)", +"3590699d": "_newSchellingRoundEvent(uint256,uint256)", +"359170e6": "setTransfersEnabled()", +"3591a1a9": "canDrip(address,address)", +"3591f5bd": "removeSomeDETsFrom(address,uint256)", +"3591fadc": "STAGE_2_FINISH()", +"3592336c": "getRetailerStatus(address,address)", +"3592c3b5": "uintToString(uint256,uint256)", +"3592dfea": "updatePackage(uint256,string,address)", +"3592f369": "disableTokenSwapLock()", +"35930e13": "setMinimalRewardedBalance(uint256)", +"359320de": "getCurrentVelocity()", +"35953108": "removeAddressesFromWhitelist(address[],string)", +"359531f4": "allowCnsContracts(bytes32,address,bytes32)", +"35956083": "Parabola()", +"35956c42": "ABCPresale(uint256,uint256,address,address)", +"35958196": "getGamesPool(uint256[])", +"359582ca": "downstream()", +"3595b570": "copyBalance(address)", +"35960028": "payMeFor(uint16)", +"359627e5": "canPay(address,uint256)", +"35967501": "setManualOverride(bool)", +"35972f46": "techAccount()", +"35975a37": "setStart()", +"3597727c": "EtherDLT()", +"359803cd": "pauseMinting(bool)", +"359819cc": "Group(address,bytes32,address[])", +"359829db": "numOfBackers()", +"3598ac34": "Cider()", +"35995022": "getPhaseCount(uint256)", +"359976a7": "getCheckSum(bytes20)", +"359ae0f3": "set_Shops(address[],address[])", +"359bc19e": "finalize(uint64)", +"359c1912": "setUintF1(uint256)", +"359c1f72": "getGravatar(address)", +"359c8a93": "claimD()", +"359cc28e": "changeIcoDeadLine(uint256)", +"359cf2b7": "requestTokens()", +"359d04a2": "voteRuling(uint256,bool)", +"359d393d": "votes_against()", +"359d9277": "XXXXXXXX01(address,uint256)", +"359db8c8": "partialDistributeDivident(uint256,address[],address)", +"359dbafe": "validatorWrotePart(uint256,address)", +"359ef75b": "init(address,address,address,address,address)", +"359f517e": "confirmWithdrawal()", +"359fe132": "getSharesByShareOwner(address)", +"359fe780": "increaseMintApproval(address,uint256)", +"35a063b4": "abort()", +"35a07291": "makeAssessment(uint256,uint256,uint256,uint256)", +"35a1529b": "dripAmount()", +"35a1bf6e": "test_insert_findWithHintNextRemovedUpdateTail(int256)", +"35a1d95d": "requestSnapshots(uint256)", +"35a21728": "multiERC20Transfer(address,address[],uint256[])", +"35a23659": "miningTimePerTrip()", +"35a26787": "AuthAddr(address,address,address)", +"35a374dc": "issueLottery(uint8)", +"35a3a96f": "marketingRecipient()", +"35a3cfa0": "transferMarketallocationTokens(address,uint256)", +"35a3e83c": "getCurrencyDecimals(uint256)", +"35a3fbb0": "_triggerStashedPayoutTransfer(uint256)", +"35a4015d": "numberOfBudgetPlan()", +"35a49063": "personalityTypes()", +"35a4fa30": "createPromoWhale(address,string,uint256)", +"35a53379": "_increaseWinPotChance()", +"35a568b9": "setLockPostion(address,uint256,uint256,uint256)", +"35a5c43a": "get_FTVTOKEN_EURCENT(uint256)", +"35a5e06d": "getRoots()", +"35a5e8bf": "SectorUpdated(uint16,address,string,string,string,bool)", +"35a66ef8": "arrayOfAccountsThatHaveClaimed()", +"35a6861a": "login(address)", +"35a6c1e0": "totalPausedSeconds()", +"35a6ed92": "calculateBonusAmount(address,uint256,bytes32)", +"35a8076b": "Accounts(address,address)", +"35a951b8": "endTime(bytes32)", +"35a9731b": "approveRefund()", +"35a9a5c7": "setWithdrawAccount(address)", +"35a9c82f": "setSecret(bytes32)", +"35a9d051": "ETH_address()", +"35aa6bec": "checkExpectedTokens(uint256[],uint256)", +"35aa6c31": "getMoney(address,uint256)", +"35acac4e": "abort(string)", +"35acbcab": "makeStudentID(bytes)", +"35ad84f9": "buyFromValue(uint8)", +"35ad9581": "saleRateSecondDay()", +"35adc0c5": "sellerCancel(bytes16,address,address,uint256,uint16)", +"35ae20bb": "AddEthBalance(address,uint256)", +"35ae41c9": "godAutomaticCollectFee()", +"35aec024": "findTwoPercent(uint256)", +"35aed70f": "getNumAnimalsXPlayerXType(address,uint8)", +"35af1986": "div27(uint256,uint256)", +"35af2c4f": "unsetIdentity(uint256,address,address)", +"35af5a9c": "MOTCToken(uint256,string,string)", +"35b05d1e": "purchaseRequest(uint256,uint256)", +"35b09a6e": "someFunction()", +"35b1097e": "communityTokensHolder()", +"35b1114a": "REQUEST_CANCELED_BY_BORROWER_STATUS()", +"35b11b72": "setColors(uint16,uint256[5],uint256)", +"35b21ceb": "totalChildTokens(uint256,address)", +"35b28153": "addAuthorization(address)", +"35b2b51b": "getAllInvestmentsWithdrawnByOwner()", +"35b3caf0": "cancelOrderWithPayerByAdmin(string,address)", +"35b3ee0e": "NGA()", +"35b46459": "distribute(uint256,address[],uint256[],uint256)", +"35b4a6d9": "updateBTCPrice()", +"35b4a93e": "HSDJCoin()", +"35b55d98": "SUBSCRIPTION_MODULE()", +"35b643d4": "getBalanceTimestamp(uint256)", +"35b6a6c6": "tokensForAdvisors()", +"35b6cc03": "RankingBallGoldCrowdsale(bytes32[5])", +"35b6df5d": "BurnableCrowdsaleToken(string,string,uint256,uint256)", +"35b6eaea": "isPayed(address)", +"35b75391": "test_validProposalExecution()", +"35b7588f": "allowedMinting()", +"35b8e820": "getCandidate(uint256)", +"35b94b5d": "MIOTToken(uint256,string,string)", +"35ba1d0a": "closeOnBehalfOf(address,address,bytes32,uint256)", +"35ba66de": "ACATokenSale(address,address,uint256,uint256,uint256)", +"35ba9af8": "availableForWithdrawal()", +"35bb0398": "didSign(address,bytes32,uint8,bytes32,bytes32,uint8)", +"35bb3e16": "grantAdmin(address)", +"35bb5fd2": "isToonInterface()", +"35bbe70e": "getAllVoters()", +"35bce6e4": "transferMulti(address[],uint256[])", +"35bd8b94": "Noblebit(uint256,uint256)", +"35bdac34": "withdrawToAddress(address,uint256)", +"35be7bf3": "getSecondRoundReleaseTime()", +"35bf82f6": "setChallengeFee(uint256)", +"35bf90ca": "getContributorByNumber(uint256)", +"35bfe158": "changeGoldIssueBurnFeeContract(address)", +"35c019e2": "LogFundTransfer(address,uint256)", +"35c05ab0": "hodlFor3y()", +"35c0cbaf": "upgradeDragonGenes(uint256,uint16[10])", +"35c1d349": "participants(uint256)", +"35c23200": "computeNextPrice(uint256)", +"35c2d49d": "minInvestETH()", +"35c40fe3": "testParamOutOfBoundsFail()", +"35c42d7f": "getPetByIndex(address,uint256)", +"35c4de7a": "OracleRequest(address)", +"35c5b475": "getExpectedReturn()", +"35c648c5": "POMDA()", +"35c6511b": "endMiniGame()", +"35c699c4": "getUnclaimedEtherIfAny(uint256)", +"35c72df0": "bryan()", +"35c7421b": "testMinReturn32WithReturn()", +"35c77e6f": "configurer()", +"35c80c8c": "isCustodian(address)", +"35c8518b": "setCloseBlock(uint256)", +"35c914c2": "finishPayaning()", +"35c969ea": "Presale(address,address,address,uint256,uint256,uint256,uint256)", +"35c990d4": "getGameCalculationProgress(uint256)", +"35ca8ce1": "setPriceToRegSale()", +"35caecc3": "getPeriod(uint256,uint256)", +"35caf648": "DonationMatched(address,uint256)", +"35cb1f07": "wethDeposit()", +"35cb27b5": "minedToken(uint16)", +"35cbdc25": "AcceptsProofofHumanity(address)", +"35cbe716": "getRemainingAirdropSurplusAddressesLength()", +"35cc2d80": "isInState()", +"35cc59a9": "createSchema(bytes)", +"35cd2358": "setAffiliation(address,uint256)", +"35cd4cc4": "getLastKicker()", +"35cd78b3": "saveMetaData(address,bytes32,bytes32,bytes32,bytes,uint32,uint256,uint256,bytes,uint256)", +"35cf60df": "enableFreezePriceRateRecalc(uint256)", +"35d0b444": "LogRedeemToken(address,uint256)", +"35d129f6": "untag(string)", +"35d13969": "SendAllMoney()", +"35d1f606": "destroyCard(uint256)", +"35d1f869": "setAtomOwner(uint256,address)", +"35d357ac": "logCeiling(int256,uint8)", +"35d37dbb": "mgmtFeePercentage()", +"35d4a49a": "setSubFreezingPrice(uint256)", +"35d65132": "canClaimPayout(address)", +"35d6d214": "getBids(uint256[])", +"35d6d611": "DAY_LENGTH()", +"35d79fad": "CertificationDb(address,uint256,address)", +"35d7a052": "freeze(uint256,uint256)", +"35d7d09a": "next_diary_id()", +"35d7f149": "takeBuyOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"35d82d16": "setGeneralInfo(bool)", +"35d91b85": "cancelOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"35d94797": "verifyBetMask(uint256)", +"35d97405": "dividends()", +"35d99f35": "masterMinter()", +"35d9ba1f": "getTill()", +"35d9ceee": "uintMax()", +"35da3c1a": "createNewGalaxy(string,uint256)", +"35daa731": "ordersCount()", +"35db2829": "sendStableReward(address,address,uint256,uint256)", +"35db2b72": "Winchain()", +"35de5e89": "setPixelBlockPrices(uint256[],uint256[],uint256[])", +"35de74b8": "PBC()", +"35decc5f": "updateTargetToken(address,uint256)", +"35dfcc92": "totalCastle()", +"35dffde5": "updateReleaseAmount(uint256)", +"35e04fab": "prePayment()", +"35e09095": "decTotalSupply(uint256)", +"35e0f450": "stageMaxBonusPercentage()", +"35e24a6b": "preICOstate()", +"35e49e5f": "sellBlocks(uint8,uint8,uint8,uint8,uint256)", +"35e4d30f": "nonzeroAddressesElementForApi(uint256,uint256)", +"35e5f617": "transfer_erc20(address,address,address,uint256)", +"35e608be": "addUpgrade(address,address,bytes)", +"35e60bd4": "setTransferLocked(bool)", +"35e64aaa": "transferLand(int256,int256,address)", +"35e6a7af": "addab()", +"35e6e5b6": "removedSalesAgent()", +"35e82f3a": "removeAddressFromBlacklist(address)", +"35e83446": "testInitialBalanceWithNewMySale()", +"35e9d83b": "transferToAddress(address,uint256,bytes)", +"35ea6821": "masternodeTransferOwnership(address)", +"35ea94ad": "TokenSold(address,uint256,uint256)", +"35eb5208": "registerAgent()", +"35eb702f": "getPlayerWinning(address,uint256)", +"35eb8479": "showBidder()", +"35ebbfd1": "weekTwoStart()", +"35ec6dab": "earlyWallet()", +"35ed3fd6": "BONUS_PERCENTAGE()", +"35ed548f": "getPositionRequiredDeposit(bytes32)", +"35ed64c3": "CZToken(string,string,uint8,uint256)", +"35ed663d": "ENJToken(address,address,address,address)", +"35ee2783": "Alarm()", +"35ee2f8a": "initCanOffsetTime()", +"35ee72c7": "ISSToken()", +"35eead41": "addNote(bytes32,string,string)", +"35eec76a": "privatePreSaleSoldTokens()", +"35f067cf": "updateTokenURIPrefix(string)", +"35f097f3": "isOnBattle(uint64)", +"35f0d665": "reloadStoreByName(uint256)", +"35f10cc3": "sendWinnings(address[],uint256[])", +"35f1bd11": "EcoCrypto()", +"35f21f0a": "GladiethersOraclize()", +"35f2507f": "recoverUser(address)", +"35f27b20": "collectAirDropTokenBack()", +"35f2fbaf": "_bid(address,uint256,uint256)", +"35f3cf85": "setSaleManagerAddress(address)", +"35f4581b": "pwn(uint256)", +"35f46994": "die()", +"35f4de27": "HumaniqICO(address)", +"35f64a30": "albosWallet()", +"35f6806b": "addNewAccount(string,address,uint256,uint256,uint256)", +"35f68424": "getTokensByBTC(uint256)", +"35f6c161": "createWallet(uint8)", +"35f79b83": "LordCoin()", +"35f7ff63": "stringStorage(bytes32)", +"35f80a1b": "UbiatarPlayVault(address,address,uint256)", +"35f82876": "fillOrderNoThrow(uint256,bytes)", +"35f84393": "contructor(string,string)", +"35f88860": "listScam(uint256,string,uint256)", +"35f8a2c6": "RefundableCrowdsale(uint32,uint32,uint256,address,uint256)", +"35f931cb": "AmberToken(uint256)", +"35f96a7d": "goldBought(uint256,address,bytes32,string,string,string,string,string)", +"35fa3128": "BTTSToken(address,string,string,uint8,uint256,bool,bool)", +"35fa3843": "setend()", +"35faa416": "sweep()", +"35facf78": "createProposal(string,uint256)", +"35fb2125": "onlyBouncerTransferOwnership(address)", +"35fb337c": "finalCap()", +"35fb8e36": "triggerTestEvent()", +"35fc3e90": "claimRefundEther(address)", +"35fc7506": "StatsSold()", +"35fd8877": "isCashBack(address)", +"35fe3660": "MID_GRADE_CATEGORY()", +"35ff058a": "pushArray(bytes32,uint256)", +"35ff217d": "CrowdfundFinalized(uint256)", +"35ff3a51": "getRaisedEther()", +"35ffa20d": "handleWithdraw(address,bytes32,address,address,uint256,uint256,bytes32,bytes32)", +"35ffbe74": "verifyClaim(bytes,uint256,uint256,uint256[],uint256[],uint256[],uint256[])", +"35ffd687": "getStageLimit(uint8)", +"360035c6": "RepoToken()", +"360038b5": "CheckOver()", +"3600af8b": "updateProfileImgurl(string)", +"3600e1e2": "controlLimits(address)", +"36013189": "randomness()", +"360184e9": "Fouracoin()", +"3601dd87": "TNTToken(uint256,string,uint8,string)", +"36025bf8": "licenseTermsHasMaxCost(bytes32,bytes32)", +"3602627d": "BdpImageStorage(bytes8)", +"3603b0b0": "MULTISIG_WALLET_ADDRESS()", +"36044ecc": "changeTokenReward(address)", +"36046916": "generatePresciptionCode(int256)", +"3604caa1": "lockAddress(address[])", +"36054f51": "affiliatThreshold4()", +"360583c6": "getUsersGunsIds()", +"36066f71": "Token(address,string,uint8,string,address,address)", +"36067543": "FirstEtherLimit()", +"3606c983": "createClaimMsg(bytes32,string,string,address)", +"36080694": "deleteRate(bytes4)", +"360821e8": "setMinimumBitcoinToInvest(uint256)", +"3608672c": "liveBetexICO()", +"3608c9eb": "MULT_FACTOR()", +"360998e6": "Cryptex(address,address,address,uint256,uint256,uint256)", +"3609ac8f": "START_PRICE()", +"3609bf09": "updateBusiness(uint256,uint256)", +"360aa28b": "isVersionContract()", +"360aac67": "accountGameResult(address,uint256)", +"360b3b31": "setAirdropEnabled(bool)", +"360b8115": "VipMigration(address,uint256)", +"360c97dd": "frozenAnnually()", +"360c9ed0": "deprecateBodySubtype(uint8)", +"360cdf5e": "AsOyToken()", +"360e5f54": "TokenGift(address,uint256)", +"360ec1b8": "processPurchase(bytes32,int256[],int256[])", +"360ed9c2": "receiversCount()", +"360f1d07": "bonusRatePrivateSale()", +"360f6b21": "chargingSwitches(address)", +"360ff695": "timeTier3()", +"3610724e": "buyTokens(uint256)", +"361228ea": "weiForToken()", +"36127d7e": "updateEMA(uint256)", +"36134a4b": "shouldBeStarted()", +"3613b781": "revokeVesting(address,address)", +"36144c9a": "getUserReferrer(address)", +"3614ac6f": "test4_searchSameNode()", +"36157f5a": "totalDivSupply()", +"361698ff": "adminSetWorldSnapshot(uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"36169d90": "sweep(address,uint256,uint8[],bytes32[],bytes32[])", +"36170ae5": "startingDateFunding()", +"36173764": "frozen(address,uint256)", +"3617653e": "powerContract()", +"3617d5c6": "viewIndexNumber()", +"36181026": "tryToFinalize()", +"361819e8": "RANGEEND_4()", +"36186868": "icoWeek2Bonus()", +"361893f7": "getBrand(address)", +"3618b290": "hodlFor2y()", +"3618c2a2": "removeAddressesSet(address)", +"36199817": "setFinalTimestampOfBonusPeriod(uint256)", +"3619cd99": "myHalfDividends()", +"361a4eb8": "Party()", +"361a5468": "testFailMoveWhenStopped()", +"361ae621": "LifMarketValidationMechanism(address,uint256,uint256,uint8,address)", +"361b5eaa": "token(bytes12)", +"361b94be": "contributorMinCap(address)", +"361bb340": "left48(uint256)", +"361bfc5b": "ETH_per_BRA()", +"361c14b0": "teamUnlock4()", +"361cac82": "marketStores()", +"361cc3ab": "getUserTotalPromoBonus(address,address)", +"361d004f": "changeBank(address)", +"361d292e": "getCarAuctionID(uint32)", +"361d4e53": "usedTokenBalance(address)", +"361d55be": "callback_ForUnderwriting(uint256,string,bytes)", +"361f10e5": "setSiteAccountAddress(address,address)", +"361fab25": "setSupplyLimit(uint256)", +"361fd603": "First_pay_clientmanager()", +"3620f56d": "addQuest(address)", +"3622b5ef": "PIGGY_BANK(address)", +"36234138": "registerPair(address,address)", +"362344b8": "MAX_YAYS()", +"3623c225": "bid(uint16,uint256)", +"3623f548": "getAllWinner()", +"36249140": "third_withdrawal(uint256)", +"36261907": "setting(address,address)", +"36262665": "getOwnershipTokenCount(address,address)", +"362698a2": "Unlocked(string,bytes32,address)", +"3626aae7": "getMedalType(uint256)", +"36274669": "Poll()", +"3627d195": "FuckToken()", +"3627d3a1": "mintPrivate(address,uint256)", +"36281b38": "uppercaseOf(string)", +"36285df7": "bonusWindow1EndTime()", +"3628731c": "addAddresses(address[])", +"3628ca60": "getEpisodeList()", +"3628e6f3": "BMTToken()", +"3629c8de": "activation()", +"362a0c27": "_withdrawWonCosFromGame(uint256,uint256,uint256)", +"362a198d": "nextBurnFeeAbs(uint256)", +"362a36b4": "bidFeePercents()", +"362af076": "createRequest(address[3],address,uint256[11],uint256,bytes)", +"362bd679": "updateFreeStorage(address,uint256)", +"362c160e": "changeWithdrawalDate(address,uint256)", +"362c78b9": "invitedReward()", +"362cb8ff": "icoSucceeded()", +"362cba6f": "PlotSale(uint256,uint256,address,address,uint256,bool)", +"362e1c76": "updateparentdynamicprofis(address)", +"362e2565": "returnDeposits()", +"362e4945": "lengthAddresses()", +"362e669a": "BarrosTest()", +"362ec5e2": "createProductionUnit5()", +"362f04c0": "participantCount()", +"362f5fb2": "getDogInfo(uint256)", +"362f74e7": "updateBatchSupport(bool)", +"362f8833": "stakeRoto(address,bytes32,uint256)", +"362fe943": "MainBridge(address,uint256,address[])", +"36304e91": "allFactories()", +"3631826a": "multiline(uint256,uint256)", +"3631ecd9": "privateStart()", +"36321001": "will()", +"363210c9": "_delegatecall(bytes32,uint256)", +"363221fe": "advisorTokens()", +"3632803f": "calculateGrapeSell(uint256)", +"3632b4d9": "withdrawCoin(bytes32,uint256)", +"36330b0c": "updateInitialZero(uint256)", +"363349be": "fillOrdersUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", +"36335e19": "contributePublic()", +"3633b1ad": "createRealmSale(uint256,uint256,uint256)", +"3633c522": "GiftPoolContribution(address,uint256)", +"36344022": "testAuthorizedTransfer()", +"363487bc": "currentInterval()", +"3634a1b7": "createSeries(bytes32,string,bytes32,uint256)", +"3634b376": "GATcoin(uint256,string,string,uint8)", +"3634dcd8": "sub0(uint256,uint256)", +"36351c7c": "recharge(address,uint256)", +"36354b2f": "updateEtherAndtokenAmount(address,uint256,uint256)", +"3635e329": "getCurrentPeriodByEntity(uint256)", +"363626ad": "addressesToTotalWeiPlaced(address)", +"36371722": "chunk4IsAdded()", +"36382941": "changeTokenOwnerWalletAddress(address)", +"3638ae05": "transferETHtoProviders(address,address,uint256,address,uint256)", +"3638fb00": "transferOwnership(address,bytes32[3],bytes32[3],uint8[3])", +"3639dda5": "monthly_token_growth()", +"3639e955": "addToBothSendAndReceiveAllowed(address)", +"363a0903": "Creatable()", +"363a4708": "setMintFeeReceiver(address,address)", +"363ad06f": "getFrozenAmData(address,uint256)", +"363bc3a2": "alreadyAutoAirdropAmount()", +"363bf964": "setAddresses(address,address,address)", +"363c3747": "TestBalance(address)", +"363c51dc": "set_savings_goal(uint256)", +"363c6b81": "MAX_PENDING_REQUESTS()", +"363c76f3": "HLChain()", +"363c9bca": "runTimeAfterSoftCapReached()", +"363db35d": "IcoTotalSupply()", +"363dc725": "_unpackProtectionParams(uint256)", +"363dd19e": "summon()", +"363df59a": "UNGTToken(uint256,string,string)", +"363ef9dc": "APB()", +"363f7746": "validSignature(uint8,bytes32,bytes32)", +"363fa6b2": "renameChibi(uint256,string)", +"36400cd2": "ALM()", +"3640599c": "getPI_edit_6()", +"364083f4": "makeSale(uint256)", +"3640ca5b": "SupermarketKontrak()", +"3640e413": "YunPengToken(uint256,string,uint8,string)", +"3640f613": "cancelMatch(uint8)", +"3640f910": "LogEndSale(bool,uint256,uint256)", +"36422e49": "_createEtherDogWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"3643d14b": "withdraw_to(address,uint256,uint256,uint256)", +"3645ebfb": "indFundDeposit()", +"36470665": "battleboardDataContract()", +"36471908": "ownerPerThousandShareForMating()", +"36475668": "getCommunityData(string)", +"3647b084": "setAmountBonuses(uint256[],uint256[])", +"3647b87a": "buildFactory()", +"364832cd": "isStrongHand()", +"36484ea0": "PHASE2_START_TIME()", +"36489775": "USDZAR(uint256)", +"364aa98d": "createDate(uint256,uint256,uint256,uint256)", +"364c7815": "addCredit(uint256,address)", +"364cc73e": "isEatingAndDrinking(address)", +"364d0b53": "getAddress(bytes32,uint8,bytes32,bytes32)", +"364d279a": "phase2Duration()", +"364d2a06": "queryCreatureOwner()", +"364ddb0e": "left52(uint256)", +"364ddc2d": "getmemberposition(uint256,address)", +"364deeef": "Sceatt()", +"364e022f": "buyProduct(string)", +"364e0af3": "_createEdition(string,uint256,uint256)", +"364e1c59": "publicsalesendTime()", +"364e69b7": "canBet(uint256)", +"364e74eb": "releaseTokenTime()", +"364ea9e7": "set(uint256,uint256,bool[],uint256[])", +"364ee75d": "getRoundEnd()", +"364f4896": "emission(address,address,uint256,uint16,uint16)", +"364f6695": "earlybird_coins()", +"365044a8": "priceDivider()", +"36516a8a": "publisherAddress()", +"3651b401": "commissionGetter()", +"3651b5df": "setTargetWallet(address,address)", +"36525c4e": "resetStorage()", +"36527357": "getUint(int256,address,string)", +"3653cf9f": "getOldESOP()", +"36540b3b": "amountFundPlatform()", +"36548b58": "arrayIndexOutOfBounds(uint256)", +"36555b85": "add(string,uint256)", +"36566f06": "togglePaused()", +"3656de21": "getProposalById(uint256)", +"3656eec2": "balanceOf(uint256,address)", +"36579ff6": "Burnable()", +"3657ba36": "getSharedAccountPw(bytes32,bytes32,bytes32)", +"36585cd3": "getBatchStartTimesLength()", +"3658964c": "totalBal(address)", +"3659078c": "DailyDivs()", +"3659467b": "registerName(uint256,bytes32)", +"3659887c": "isAlreadyUser(address,address)", +"3659a8b2": "bonusEnds1()", +"3659cfe6": "upgradeTo(address)", +"3659d90f": "month12Allocated()", +"365a5306": "loan(uint256)", +"365a86fc": "hub()", +"365af466": "failedWhitelist(address)", +"365b1b15": "upgradeKiOS()", +"365b29e8": "WEBPOUND()", +"365b5055": "isAccountFreezed(address,address)", +"365b94ad": "saleFinished()", +"365b98b2": "users(uint256)", +"365c2e95": "hasEnough(address,uint256)", +"365c81fb": "pubsaleRate()", +"365ccbef": "didTakeOrder(bytes32,address,uint256)", +"365ce233": "removeAccountReader(address,address)", +"365db060": "acquireExternalGauntlet(uint256,address)", +"365e304d": "DATE_31_DEC_2021()", +"365e808d": "transferFromHyperstakingdisbursementfund(address,uint256)", +"365ede48": "setReport(string,uint256,string)", +"365f6e9f": "getCellsSinceLastEvent(address)", +"365fe9fd": "isDistributionTransferred()", +"36600999": "fundRepository()", +"366077ee": "addToPot(uint256)", +"3660943d": "checkState(bytes)", +"3660a084": "transferSigner(address)", +"3660bef0": "setDemandCurve(uint256,uint256)", +"3660fcd0": "setGuestName(string)", +"36610cb9": "storeOptions(address,uint256)", +"36645e01": "Election(uint256,uint256,uint256,address)", +"3664a0ea": "getLastCallKey()", +"3664b12d": "erc223Activated()", +"36651d2a": "setDestoryAddress(address)", +"3665708e": "nextMinPlay()", +"3666750e": "fillHeldData(address[],uint256[])", +"3667551c": "Partial8Send()", +"36682d5d": "Transtoken()", +"366859c4": "job(address,address[],uint256)", +"3669acad": "_newChallenge(uint64,uint64,address,uint256)", +"366a4120": "release(uint256,uint256)", +"366a68dc": "setBlockLock(uint256)", +"366ac8e0": "LGCCoin()", +"366b6e9e": "secureUnapprove(bytes32)", +"366ba691": "CBX()", +"366bb03c": "totaTeamRemaining()", +"366bc343": "AssignFeeToWallet(address,address,uint256)", +"366bc401": "collectedUSDWEI()", +"366d2b4e": "CancelledBySeller(bytes32)", +"366df51d": "initializeMintableTokenFundraiser(string,string,uint8)", +"366dff9c": "walletAllowances(address,address,address[])", +"366e81d6": "TokenSold(uint256,uint256,uint256,address,address)", +"366e881a": "commitScores(uint256[],uint256[])", +"366f2d86": "paymentDue(address)", +"366f77b7": "checkChoice(uint8)", +"3670e072": "gettoday()", +"3672404e": "getServiceCount()", +"367265fb": "transferTokensManual(address,uint256)", +"36730467": "split(uint256,uint8,uint256,address[],address,uint256[])", +"36733fa0": "addRange(address,uint256)", +"36738b41": "Crowdsale(address,address,address,uint256,uint256,uint256,uint256,address,uint256)", +"36746413": "PrivateInvestment()", +"367488ce": "roulette(uint256)", +"36751a6b": "uploadCode(string,bytes)", +"36756935": "FinalConfirmation(address,bytes32)", +"36756a23": "constructor(address[],uint256)", +"3676049b": "setFundFeeAddress(address)", +"367605ca": "setApprovalForAll(address,address,bool)", +"36760fd2": "HULKtoken()", +"36767205": "increaseTokenLock(address,uint256)", +"3676b342": "createAddOn(string,uint256)", +"3677b5f2": "LATokenMinter(address,address)", +"3677c333": "authorizeBurnRequester(address)", +"3678933c": "isEpochDataSet()", +"3678f179": "crosairShipMinted()", +"367a0f97": "getReputationProblems(address,string)", +"367ad6ea": "redeemPack(uint256)", +"367afa7a": "_nextPrice(uint256)", +"367ba52c": "submitOrder(uint8,uint8,uint64,uint64,uint16,uint16,uint16,uint16,uint16,uint16,uint256)", +"367bbd78": "strlen(string)", +"367bc8d3": "TransmutedTransfer(address,address,uint256,address,string,string)", +"367bf2f9": "currentBlockHeight()", +"367c574f": "DIP_Pool()", +"367cad89": "alternative_Exchanges_links()", +"367ebb99": "deathData_a12()", +"367edd32": "enableContract()", +"367f0708": "ico1Raise()", +"367f20f6": "_unpackBaseDamageValue(uint256)", +"367f34de": "performALU()", +"36805961": "setStr(string,string)", +"368186ef": "DigiberyToken()", +"3682905e": "RICOStandardPoD()", +"36829419": "AddrInvestor()", +"3683b44a": "checkPrizeAlreadyReceived(address,uint256,uint256)", +"3683ec67": "CavsvsPacers425()", +"3683ef8e": "preSign(bytes32,address,bytes)", +"36840423": "AddAdrJullarTeam(address,address)", +"36842110": "wasCrowdsaleStoped()", +"36851957": "CustodianInterface(address)", +"36865384": "BuyShare(uint32,uint32,address,address)", +"368691fc": "comprarTicket(uint256,uint256)", +"3686ca3e": "beneficiaryWithdrawal()", +"3686d52a": "ppsBase()", +"3686edc7": "_getBmcDaysAmountForUser(bytes32,uint256,uint256)", +"368701b9": "firsttestnetico()", +"3687e257": "TenantTerminate(string)", +"3687e921": "readInfo(address,uint256)", +"3687f24a": "setFee(uint128)", +"36880b82": "recordOwnerOf(bytes32)", +"368818aa": "FrozenMediaTokenFunds(address,address,bool)", +"3688632e": "setAvgSalesCount(uint256)", +"3688c272": "getTokenPriceListByIds(uint256[])", +"3688fa2c": "issue(address,uint64)", +"3689a651": "paymentFrom(uint256,bytes,address,address)", +"368a5773": "SpermLab()", +"368a5e34": "AIRDROPPER()", +"368aa9ca": "p_update_priceUpdateAmount(uint256)", +"368af7f3": "availablePonzi()", +"368b069d": "deployEscrowClone(address)", +"368b2842": "safeBatchTransfer(address,uint256[],uint256[],bytes)", +"368b3c81": "PTTYC(uint256,string,string)", +"368b8772": "setMessage(string)", +"368bf74e": "TEAM_LIMIT()", +"368d09d8": "requestOracleValue()", +"368d6b25": "setRushTimeChallengeRewardsPercent(uint256)", +"368daf8f": "goldMigrationsCount()", +"368dde4b": "currentCost()", +"368e5d4e": "BTC_SUISSE_TIER_4()", +"368e85ff": "IICO(uint256,uint256,uint256,uint256,uint256,address)", +"368f3492": "AnemoiSaleContract()", +"368f76a9": "bossCutPercentage()", +"36909ddd": "isATMHolder(address)", +"3690fd03": "CPLPrivate()", +"3691125a": "LianPaiToken()", +"36917dfa": "getPony(uint256)", +"3691dd11": "userApprove(address,uint256,uint256)", +"3692d61a": "log(string,bytes32)", +"3693396a": "getLastSignedTime()", +"36937781": "initialize_proposal()", +"369388cc": "EMISSION_FOR_BOUNTY()", +"3693db0a": "FOUNDER_ONE()", +"36944e49": "secondRefundRoundRateNumerator()", +"36945328": "setAddrContractCaller(address)", +"3694566e": "getRate(uint256,bytes32)", +"3694569e": "IHateEos(string)", +"3694629a": "getQuestionFinalizable(uint256)", +"3695507b": "IRC_PER_ETH_PRE_SALE()", +"3695672b": "newBurnableOpenPayment(address,uint256,bool,uint256,string)", +"36958413": "weaponEntities(uint256)", +"36965e3a": "SetAElfDevMultisig(address,address)", +"3697d0a7": "renderLandingHash()", +"3697efb2": "MinerEdgeCommunity()", +"3697f055": "withdrawFunding(uint256)", +"36988bc4": "currentLoanPerson()", +"3698de0a": "soliditySha3(bytes32)", +"369ac28f": "deltaTime()", +"369b1ce5": "initialBuy(address[])", +"369badf1": "getCreditsAtIndex(uint256)", +"369bcd64": "_checkPixelUnder(uint256)", +"369cbbb4": "checkMonthlyLimit(address)", +"369cd460": "totalPilfered()", +"369d32f1": "Items()", +"369d8138": "createAsset(string,string,string,uint256)", +"369de07d": "PDTX()", +"369e2422": "updateTokenPricePerUSD(uint256)", +"369e8c1d": "commit(address)", +"369f927f": "initBlockEpoch()", +"369fe962": "getDisputeMemorySize(uint256)", +"36a013c8": "LogInvestment(address,address,uint256)", +"36a09eae": "SetPriceMultiple(uint256)", +"36a0f511": "getPeriodMinting(uint256)", +"36a128c2": "MyJioCoin()", +"36a1bbfd": "baseTargetReached()", +"36a1c184": "IsArt()", +"36a1fb5f": "changeUserStatus(address,bool)", +"36a23dbf": "freezing(bool)", +"36a26b99": "END_TIME_PRESALE()", +"36a26fd9": "TokenDeactivated()", +"36a2f0f1": "changeLocked()", +"36a31de5": "getRequestOwner(uint256,uint256)", +"36a33f99": "isLimitMint()", +"36a3668a": "teamTokensPerPeriod()", +"36a36f7c": "betexStorage()", +"36a39882": "_proceedStage()", +"36a42675": "combineInterest(uint8,uint8)", +"36a4f2ba": "createBtcAddress(uint256,int256,uint256,int256)", +"36a60891": "setTrainingFeeMultiplier(uint256)", +"36a6412b": "buyMicroKeysWithHandle(string,bytes32)", +"36a6ad58": "mintPartnershipTokens()", +"36a716da": "createOrderHash(address,address[3],uint256[5],int256)", +"36a7cf1f": "setBallotFactory(address)", +"36a9f2f7": "xactionFeeNumerator()", +"36aa972e": "FullPayChain()", +"36ab0f15": "getNewAllowancesEffectuation()", +"36ab753e": "startRefunding()", +"36abffd4": "_receiveFunds()", +"36ac732e": "updateSecondChangeBlock(uint256)", +"36ad6e46": "SendTokensToFounders(uint256,uint256,uint256)", +"36add1df": "interestDistribution()", +"36ae22f0": "emitFeePeriodRollover(uint256)", +"36ae31ec": "getCatOwners()", +"36ae5040": "isMinted()", +"36aec5a3": "amountContributed(address)", +"36af1954": "withdrawnReadable()", +"36af50fd": "setSale(address)", +"36af8151": "setSpareRecommAddr(address)", +"36b024ab": "setTransferableDate(uint64)", +"36b09474": "winningNumbersPicked()", +"36b1315c": "min64(uint64,uint64)", +"36b19cd7": "adminWallet()", +"36b1f6a3": "getDApp(uint256)", +"36b222b3": "fillOptionOrder(address[3],uint256[3],uint256[2],bool,uint8,bytes32[2])", +"36b2e0f9": "acceptBidForCollectible(uint256,uint256,uint256)", +"36b2fe94": "setPurchaseAdmin(address)", +"36b324ff": "unMap(address)", +"36b33415": "modifyMemberInfo(string,string,string,string)", +"36b3da05": "chargeBalance()", +"36b40bb6": "leftOnLastMint()", +"36b61e3c": "otc()", +"36b641c2": "MakeMyToken(string,string,uint256)", +"36b69367": "parentFees(address)", +"36b77107": "lastDeposit()", +"36b81feb": "Deed(address)", +"36b97fd5": "TestToken5(address,address,address,address,address,address,address,address)", +"36b9856d": "newOraclizeSetProof(string)", +"36bacc7c": "getTentativeWinningPayoutDistributionHash()", +"36bb9ffa": "MANHATTANPROXYPARKAVE()", +"36bc32a2": "expectedPayout(address)", +"36bcb4c9": "changeAge(uint8)", +"36bcb4cd": "ViteToken()", +"36bdee74": "totalETH()", +"36be2a73": "setLedger(uint8,int256)", +"36bee178": "add_to_withdraw_bounty()", +"36bf094b": "BonusPeriodsCount()", +"36bf2e15": "ERC20ImplUpgradeable(address)", +"36bf392b": "distributeInvestorsFee(uint256,uint256)", +"36bffe1e": "nextCommonTTMTokenId7()", +"36c0aada": "setValueAll(uint256)", +"36c0c834": "buySignature(bytes16)", +"36c1a50f": "notZeroNotSender(address)", +"36c28466": "Panel()", +"36c2a922": "KryptopyToken()", +"36c2d72d": "getTotalSlaves(address)", +"36c35f94": "finalize1()", +"36c4a520": "Volks()", +"36c4ad0c": "getEthFromKeys(uint256,uint256)", +"36c4db09": "setCOO(address,bytes)", +"36c4ff7a": "payoutAddr()", +"36c5787e": "setTokensWave(uint256,uint256[10])", +"36c5bf8c": "_ownerReleaseLimit()", +"36c5d724": "removeToken(uint256)", +"36c5ff5d": "addToTransactionDisallowedList(address)", +"36c61b60": "_buyToken(uint256,uint256,uint256)", +"36c63b8d": "AbstractVirtualToken()", +"36c6a410": "BatanCoin()", +"36c7d4bd": "processReinvest(uint256,uint256,uint256)", +"36c802a0": "priceStage2()", +"36c84de5": "getPlayerDataByAddress(address)", +"36c8af5d": "_getId()", +"36c8c0e9": "addBonusBatch(uint256[],address[])", +"36c8c5ee": "voteForCandidate(uint256)", +"36c8e831": "PhillionToken()", +"36c92c3f": "setRoundDuration(uint256)", +"36c9c62d": "transfer_opt(address,address,uint256)", +"36ca97d6": "tokenFeePercent()", +"36cb4c48": "log256(uint256)", +"36cb8098": "BouCrowdsale(uint256,address,address)", +"36cb8740": "test_3_accessRestriction_vote_shouldThrow()", +"36cbee23": "bountyFunds()", +"36cc17a7": "clientClaim(uint256,uint64)", +"36cc18b5": "setPriceIdv(bytes32,address)", +"36cc1ebb": "setCCH_edit_13(string)", +"36cc6a10": "modifyTokenFee()", +"36cd24aa": "prepareVote(bytes32,uint256)", +"36ce94bf": "bytesToAddress1(bytes)", +"36cf7c87": "dead()", +"36cfe3eb": "starbaseEarlyPurchase()", +"36d0288c": "CL()", +"36d02c94": "changeSettings(uint256,uint256)", +"36d03356": "setAdvisorsTeamAddress(address)", +"36d10e45": "LemonsRemainingToDrop()", +"36d1535d": "getEbola()", +"36d15f2a": "_validateSettleSignatures(bytes32,bytes,bytes,bytes,bytes)", +"36d18b67": "RED()", +"36d1f54b": "UnitedfansTokenCrowdsale(address)", +"36d213ec": "TRToken(uint256)", +"36d22de7": "pokerbox(uint256,uint256)", +"36d26647": "getReportHash(uint256)", +"36d300b3": "addAction(uint256,uint256,uint256)", +"36d373c0": "writeDefinitions(uint8,string)", +"36d38bd4": "scs()", +"36d43c24": "withdrawId()", +"36d505cf": "_breedWith(uint256,uint256,uint256)", +"36d61112": "getVendingStepQty(uint256)", +"36d647cf": "bonusLine()", +"36d81f07": "getUser1()", +"36d90c2d": "Dillionworldcoin()", +"36d9377e": "GetAllNode()", +"36d938d8": "Transaction(uint256,uint256,address,uint256,uint8,uint256,uint256,bytes)", +"36d95f56": "MIN_FUNDING_GOAL()", +"36da1471": "crowdSaleCheck()", +"36da4468": "supplier()", +"36da5cd8": "atomToken()", +"36da9ec9": "roundTwoRate()", +"36dac2cc": "getMeta(uint256)", +"36dc1dd2": "createBSMHash(string)", +"36dc58f6": "total_SDCC_supply()", +"36dd20a7": "getJobWorker(uint256)", +"36dd58f2": "dispatch(address,uint256,string)", +"36de44e0": "GFC(uint256,string,string,uint8,address)", +"36df05bc": "wholesaleLeft()", +"36df99b6": "blackswanToken()", +"36dfe260": "payOneTimeReward()", +"36e0004a": "multiSig()", +"36e05d94": "fundariaShare()", +"36e0e824": "asset(uint256,bytes)", +"36e0f6cc": "allowSell()", +"36e4e8fd": "tulipToOwner(uint256)", +"36e4f915": "claimToken(bytes32,string,address)", +"36e520bc": "verifyAddresses(address[])", +"36e61cf7": "decTap(uint256)", +"36e685f5": "setCLevelAddresses(address,address,address,address)", +"36e6b92e": "taskProcessedWithCosting(uint256,uint256)", +"36e73918": "getRegionNextImageId(uint256)", +"36e9f43f": "SMRDistributionVault()", +"36ea1938": "executeTrade(address,address,uint256,uint256,address)", +"36ea76e2": "Hyperion()", +"36ea8189": "DetailsUpdated(bytes32,bytes32,uint256)", +"36ea8702": "makeMetaPublic(uint256,bool)", +"36eb3aa9": "LGBT()", +"36eb5b47": "getResoSCParams()", +"36ebc4dc": "__allocateTokens(address)", +"36eda23f": "setRST(address)", +"36edbe17": "createPlayer(address,uint256)", +"36ee1f2b": "SDTToken()", +"36ee46f5": "killAnimal(uint8,uint16)", +"36ee7773": "getBallotsStorage()", +"36ee83f9": "getOrderPriceTotal(uint256)", +"36ee8812": "updateReleasedBalance()", +"36eec28e": "allocated4Year()", +"36eed01f": "getScoreWithCustomerAddr(address)", +"36ef0cea": "createStartingColors()", +"36ef1abb": "disburseDividends()", +"36ef6c82": "addEmbassyOfCountry(address,uint256)", +"36ef80db": "getId(address,address)", +"36f00e8a": "setFeeFlat(uint256)", +"36f19b77": "getPurchasedBlockhash(uint256)", +"36f2393e": "changeTokenURIPrefix(string)", +"36f26095": "minimalCap()", +"36f2b803": "Oceans8RT()", +"36f3dc2d": "STAGE_FOUR_ETHRaised()", +"36f54767": "VitaminToken(uint256,string,string)", +"36f656d8": "assertEq(string,string,string)", +"36f66528": "EtherDelta(address,uint256,uint256)", +"36f78d77": "newGroup(address[],uint256,uint256)", +"36f7992b": "putOnSale(uint256,uint256)", +"36f7ab5e": "contactInformation()", +"36f7cd70": "setPricePerStake(uint256)", +"36f8edc2": "getPlayerShipBattleLossesById(uint64)", +"36f93a99": "cofoundersSupplyVestingStartDate()", +"36f9825f": "accountIndex(uint256)", +"36f9f49c": "etherandomSeed()", +"36faa509": "ssps(uint64)", +"36fbedd3": "existsAuditorFromMultiRequestAssignment(uint256,address)", +"36fc75ee": "setRegsitrarAddress(address)", +"36ff37f4": "UpdateEvent()", +"36ffa905": "getMyProposals()", +"370014f2": "sendFundHome()", +"370097ac": "donotUSBDappToken()", +"370099d4": "airSwap()", +"370158ea": "info()", +"37016a5f": "getAuctionStartedAt(uint256)", +"3701fada": "PFC()", +"370292eb": "clearApproval(address[16],address,uint256)", +"3702ab03": "buyBasicCards(uint256,uint256)", +"37033be6": "processReservationFundContribution(address,uint256,uint256)", +"37034853": "ownerHistoryCount()", +"3703d911": "createItem(string,uint256,uint256,address,uint32,string,uint32)", +"370419e5": "arm()", +"37048f8f": "_newValidatorSetCallable()", +"37049b06": "getTier(uint32,uint256)", +"3705f69e": "canRelease()", +"37072ec7": "getHealthCitizens(uint256)", +"37074dae": "receivedEther(address)", +"37077409": "_updatePurchasingState(address)", +"3707a967": "putForExchange(uint256)", +"3707cfc1": "update(uint256,uint256,address)", +"3707ed7e": "gettops(address)", +"37086c8e": "airdropWithLockup(address,address,uint256,bytes)", +"3708c99e": "openWhitelistEndTime()", +"370943e3": "ZionToken()", +"370b6939": "AdminSetDrawer(address)", +"370b8c90": "info(bytes)", +"370c6001": "abortTransaction()", +"370d4c6e": "setGameOn(bool)", +"370d62ad": "anyRateIsStale(bytes4[])", +"370e052b": "addPreSaleTokensMulti(address[],uint256[])", +"370e9161": "rollDice(uint256,uint256)", +"370ec1c5": "_fillOrder(address,uint256)", +"370f2827": "finishJackpot(uint256,uint256)", +"370f388e": "MegaCandy(address)", +"370fb47b": "triggerTime()", +"370fc812": "set_stopsell(bool)", +"370fed6e": "setProfile(string,string,string,uint32)", +"37110967": "eTokensToSend(address,uint256)", +"371115d1": "LamboToken(uint256,string,uint8,string)", +"3711d9fb": "saleDuration()", +"3711e829": "withdrawnAmountForSalePromotion()", +"37126b38": "getTime5(address)", +"3712880c": "changeTokenExchangeRate(uint256)", +"37128a12": "initBoostData()", +"371303c0": "inc()", +"3713513a": "TOKENO()", +"3713ab41": "WPXSold()", +"37142391": "GetPartManager(uint8,uint256)", +"3714ae13": "newTokenPrice()", +"3714e274": "mintAllBonuses()", +"3715ae53": "sendApprovedTokensToInvestor(address,uint256)", +"37164433": "withdrawConfirm(uint256,address)", +"3716b8b4": "DonatorSetBanner(string)", +"3716bd22": "showCertificationDetails(uint256)", +"3716ca33": "updateGenerationRatio(uint256)", +"3716f65d": "withdrawDthShop(address)", +"3717798b": "auctionStarted(string)", +"3717a7a7": "Omnic(string,string,uint256,uint256)", +"3717f34c": "divRemain(uint256,uint256)", +"37180750": "getTaskKeyAtIndex(uint256)", +"3718766b": "EventQuitBattle(address,uint256)", +"37189157": "checkWithdrawalAvailability(address,address)", +"3718a923": "canShelf(string)", +"3719427e": "acceptDividends(uint256,uint32)", +"371a4ea8": "getProposalById(uint32)", +"371aa158": "init(address[],uint256[])", +"371ab702": "getMicroModuleByIdPart2(uint256)", +"371be589": "getconfig()", +"371c7dba": "setAllowPriceUpdate(bool)", +"371db7af": "BlockPaymentSystem()", +"371dd5ed": "initRound()", +"371e8e27": "gameResultsLogged()", +"371ecfde": "_directTransfer(address,uint256)", +"371f468c": "GlobalSuperGameToken(uint256,string,string)", +"371fe247": "_checkHashAndTransferExecutorFee(bytes32,bytes,address,uint256,uint256)", +"37205d76": "isCrowdSaleSetup()", +"3720e5b6": "E_AuctionStarted(address,uint256,uint256)", +"3721a634": "requestSpectatorRewardForGladiatorBattle(uint256)", +"3721ee15": "ownerAccessoryCollection(address,uint256)", +"372210d1": "addGenesis(address,bool)", +"37227c07": "logFeeTokenTransferred(address,address,address,uint256)", +"3723100d": "mutiEthTransfer(address[],uint256[])", +"37235758": "currentEndsAt()", +"3723bc0e": "shareholders()", +"3723f149": "FOUNDATION_SHARE()", +"37246f43": "getVoteRulesOfTransaction(address,uint256,bytes)", +"37247af5": "_recalculateAvailable(address)", +"3724fb24": "tradeSpreadInvert()", +"372500ab": "claimRewards()", +"37253e35": "defrostTokens(uint256,uint256)", +"37254184": "jvCoin()", +"3725814a": "getMaxAddresses()", +"37258302": "SubwooferToken()", +"37268dbb": "_internalExchange(address,bytes4,uint256,bytes4,address,bool)", +"37270069": "maxWeiRaised()", +"37270936": "commander()", +"37271cc7": "withdrawBid()", +"37273b86": "PRICE_STAGE_PRESALE()", +"3727ae2d": "AthTokenBase()", +"3728aa4c": "saleCapReached()", +"3728bec2": "getCharacter(uint32)", +"3728f1f7": "EthereumOne()", +"37292eeb": "AVAILABLE_COMPANY_SUPPLY()", +"3729847b": "processSalesForSingleBuyer(uint256,address)", +"372a2a36": "DigitalArtChain()", +"372a49bd": "mspController()", +"372c1aff": "getPublicKeys(uint256)", +"372c6533": "START_DATE()", +"372c66e3": "updateAsset(uint256,string,string,string,uint256,address)", +"372cb1d9": "CallCount()", +"372cd183": "addAdmin(address,bytes32,bool)", +"372cd7ad": "clearAuthOfPermission(address)", +"372cfcc3": "noteSaleLocked(address,uint256,uint256,uint256)", +"372d6b27": "getStatistics()", +"372e80c3": "FLIPPINESS()", +"372ea717": "test_oneInvalidEmptyAddress()", +"372ed8cc": "setOraclizeDelay(uint256)", +"372f6bfe": "_refererUpdate(address,address)", +"372f88b6": "ICC()", +"372fc8d3": "HTSupply()", +"372ff945": "isInPhase(uint256)", +"37305e2a": "withdrawFromCustody(uint256,address,address)", +"37306299": "BurnableToken()", +"3730bb40": "yxkTOKEN()", +"37321bd7": "callstoredaddress(address)", +"37323d19": "LuckyETH()", +"3732c86b": "doubleTransferWithBurn(address,address,uint256,uint256)", +"3732e153": "ETHPrice()", +"37334878": "SHORTADDRTOKEN()", +"37338b05": "requireDing(uint256)", +"37339506": "restrictedPercent()", +"3733b378": "transferStackAndCall(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"3733faba": "forceStopCycle()", +"3733ffca": "convertTo(uint256,string,string)", +"37354a68": "luckyNumberOfAddress(address)", +"3735ab75": "buyCastle(address)", +"3735d57d": "PRESALE_BONUS_LIMIT()", +"3736d853": "setAverageBlockTime(uint256)", +"37371bc5": "getRandomRouter()", +"37375a43": "createContractEditionForCollection(string,uint256,uint256)", +"37376ca8": "cancelProposal(bytes32)", +"37383c2d": "getEventStart()", +"3738aa19": "ReleaseFundsToInvestor()", +"3738eb8a": "GolfCoin()", +"37391ce2": "testUnescapedQuoteInString()", +"373a1bc3": "scheduleCall(address,bytes4)", +"373a3af8": "intersect(uint256[],uint256[])", +"373a7c01": "fundTotalSupply()", +"373ae230": "checkLimit(address,address,uint256)", +"373c1df9": "test_3_destoryTokensAccrossBlocks_increaseBlocksBy1000()", +"373c98a2": "authCall(address,bytes32)", +"373d46b0": "IPOI(uint256)", +"373dde4f": "countPurchasedPixels()", +"373e0c80": "setFreezeAccount(address,bool)", +"373e441c": "addUserRole(string)", +"373eef4b": "ABsCoins(address,uint256)", +"373f5ff0": "COLOR_GREY()", +"3740eee9": "SetFund(address)", +"37411dc3": "createRandomZombie_Ether()", +"3741b92b": "jrecover_y(uint256,uint256)", +"3741c90b": "setAuthorizedWithdrawalAmount(uint256)", +"3743f0bf": "teamReserveAllocation()", +"3746010d": "createPrizeFighter(uint16,uint256,uint8,uint8,uint8,uint8,address)", +"3746b446": "Predictor()", +"37472c4b": "setDepository(address)", +"3749ea8e": "contribute(address,address,uint256,uint256)", +"374abace": "contractstarttime()", +"374aed97": "getCells()", +"374b8cda": "getTrade(uint256,address,address)", +"374b94c8": "MEC()", +"374ba203": "get_hosp1(uint256,uint256,uint256)", +"374bb090": "isAddressSet(address,address)", +"374bfba7": "claimFreeReferralPack()", +"374e164c": "addVirusDef(address,uint256)", +"374e9aa1": "stageForBlock(uint256)", +"374f7b7e": "checkLoanStatus(address,uint256)", +"375023f2": "total0xbtcReceived()", +"3750e05a": "TOKENS_BOUGHT()", +"37516ead": "microTip()", +"375188dc": "nextTask()", +"3751e6bc": "get_last_global_audit_document()", +"37525ff0": "listItemFromRegistry(uint256)", +"37528882": "calculateIntervalEarning(uint256,uint256)", +"37531b45": "StudentCoin()", +"37542d10": "addReferrer()", +"37548549": "setRecipientString(string,string)", +"37567d49": "maintenanceDeactivateUser(address)", +"3756b62b": "toB32(uint256,address)", +"3756bb45": "noOfTicketsOwned(address)", +"3756e207": "ExtremiumToken()", +"37574b3d": "TOKEN_FOR_TEAM()", +"37593f46": "queryN_fnc(uint256,string,bytes,uint256)", +"375a8131": "addStudent(string,bytes32,string)", +"375b3c0a": "minStake()", +"375b74c3": "custodian()", +"375c0117": "BurnTokens(address,uint256,bool)", +"375c21b0": "random(bytes32,uint32)", +"375c405d": "canIssueIndividual()", +"375c4627": "supplyPICO(address)", +"375c86dd": "m_pools()", +"375d6d90": "received_ethers(address)", +"375d9dc6": "isLimited(address,address,uint256)", +"375dce69": "getIssuable()", +"375e3ea8": "payoutForBudget(uint256,uint256)", +"375e88bd": "increaseBTCRaised(uint256)", +"375f2b96": "getCost(uint8)", +"375f3a9d": "PERC_TOKENS_TO_INVESTOR()", +"375f4498": "SetEditMode()", +"3760153c": "ETHero()", +"37603132": "RollLottery(uint64)", +"3760ceb0": "WAITTIMEUNTILWITHDRAWORTRANSFER()", +"37612672": "producer()", +"3761a3d6": "buyUcCoins()", +"3761d23f": "setFeeDistributionAndStatusThreshold(uint8,uint8,uint256)", +"3761dea8": "MarketPlace(address,address,uint256,uint256,address)", +"37621da0": "setMinChildCount(uint256)", +"3762346b": "externalPurchaseTokens(address,uint256,uint256)", +"37624204": "endPreIcoDate()", +"37629dda": "getArticleItem(uint256,uint256)", +"3762f0fe": "initMembers()", +"37632065": "claimUnderlying(address[2],uint256[7],uint8,bytes32[2])", +"37633f29": "TokensGate(uint256,uint256,uint256,address)", +"37638119": "getHouseEdgeAmount(uint256,uint256)", +"3763965f": "private_profits()", +"3763d4b4": "generalSaleEndDate()", +"3764cf3f": "NUMUS()", +"3764e2be": "setup(string,string,uint256,uint256)", +"37664643": "retractLatestRevision(bytes32)", +"376678e3": "BABYT()", +"37668a8b": "create(bytes32,address,bytes32,address,bytes32)", +"3766baba": "transferAllFromForcibly(address,address)", +"3767aec6": "handleTimedTransitions()", +"3767ea7e": "setTotalCapacity(uint256)", +"37680f18": "ERC20Standard(uint256,string,string)", +"37681083": "incrementReputation(uint256)", +"3768304c": "autoMint()", +"37689317": "generateLockedTokens(uint256)", +"3768bd09": "mulToFraction(uint256,uint256,uint256)", +"3769862f": "isAllowedUser(address,uint256,address)", +"376a4ce0": "setstring(uint256,string)", +"376b9c25": "depositProvider()", +"376c7374": "w_Bounty()", +"376d1555": "sendAuto(address)", +"376d567c": "setMod(address)", +"376db394": "setFreeze(address,uint256)", +"376ed9c6": "totalHedgelyWinnings()", +"376edf93": "getBidsByAdslot(uint256,uint256)", +"376ef9b8": "fromContractAddr()", +"376fc790": "fullTransfer(address)", +"376fc952": "setMaxReferrerBonusRequirement(uint256)", +"376fe102": "userId(address)", +"376ff7f0": "isRefundAllowed()", +"377002fb": "beArbitrator()", +"37714274": "FrancevsArgentina()", +"37717342": "breedOwn(uint256,uint256)", +"3771ab97": "payDividents()", +"37721ab7": "getDougName(string)", +"377272b3": "createValue(address,uint256)", +"3772c371": "getprize()", +"3773930e": "ConfigureFunction(address,uint256,uint16,uint16,uint16)", +"377481ca": "unlockedAddress()", +"3774e6f5": "starbaseMarketingCampaign()", +"37751b35": "doTransfer(address,address,uint256)", +"3777261d": "approvedFactories(address)", +"37775807": "buyerBalances(address,address,uint256,address)", +"3777f5d0": "tokensPerWeiBonus333()", +"3778e5b2": "groupInfo(uint32)", +"37790454": "PrintWinningInfo(bytes32,uint256,uint256)", +"3779a3b6": "saleRunning()", +"377a0f53": "bankAccount()", +"377ab651": "nextTurn(uint256,uint256[3],uint8[176])", +"377b2009": "isCanSell()", +"377b47a3": "logIn()", +"377c6a3e": "eth(uint256,uint256)", +"377d54ce": "assertOnlyParticipants(uint256)", +"377d78ce": "defineProjectWallet(address)", +"377dda1a": "NamiCrowdSale(address,address,address)", +"37800bde": "calculateTransferFee(uint256)", +"37806f07": "galleryOne()", +"3781afbc": "_isCorrectFullBuyin(uint256)", +"3781d882": "setRate347()", +"3781e576": "isOperatorForTranche(bytes32,address,address)", +"37820c57": "bulkMint(address,string,uint256)", +"378252f2": "closeAuction()", +"37828c52": "OTHER_STAKE()", +"3782cae2": "set_max_contribution(uint256)", +"37831b97": "payReward(address,address,uint256,uint256)", +"37848b6b": "getOwnedShipCount(address)", +"3784f000": "setEndDate(uint256)", +"378525bd": "bestAngel()", +"378544df": "timeAfterSoftCap()", +"378652d2": "MultiTransper(address[],uint256)", +"3787a30a": "ownerWithdrawEth(address)", +"3787b748": "WalletChange(address)", +"3788036f": "isAgreementSigned(bytes32)", +"37881299": "getCompare()", +"37881810": "setCallbackAddress(address)", +"3788e371": "BaldcoinCore(string,string,uint8,uint64,uint64,uint16,uint256,address[])", +"37890f94": "maliceReported(address)", +"378a2178": "tallyVotes()", +"378aa701": "getCurrentState()", +"378afddb": "withdrawMYB()", +"378b6a89": "canContribute(address,uint256)", +"378bc89d": "findAddress(bytes32,bytes32)", +"378c0605": "buyTickets(address)", +"378c4c1c": "computeMerkleRoot(bytes,bytes)", +"378c7cd9": "logCheck(uint256,string,uint256)", +"378c93ad": "setClaimable(bool)", +"378ca888": "setMaxFinalizationTime(uint256)", +"378cdb62": "proxyList(uint256)", +"378dc3dc": "initialSupply()", +"378e061e": "inactive_payable()", +"378e0fc1": "checkKwhDeployerAddress()", +"378e25f2": "withdraw_2Completed()", +"378ebf93": "setTokenToEtherAllowed(bool)", +"378efa37": "divider()", +"37900d5a": "issuedFromOtherCurrencies()", +"3790613f": "minChildCount()", +"379080da": "PRICE_MULTIPLIER_PREICO1()", +"379119af": "SJT()", +"3791759c": "migrateFeesDueToFork()", +"3791792a": "mintPack(uint256,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"37918bcb": "declareMvpLaunched(uint256)", +"3792a018": "left8(uint256)", +"3792a865": "MacroTokenContract()", +"3792e117": "GaiaToken()", +"37930615": "extend(bytes16[],uint64)", +"3793c1e8": "get_num_of_uses(address,address)", +"3793ccb3": "isPlayerOnBoard(uint256,address)", +"37941589": "test123token(uint256,string,string)", +"3795ad25": "lockStartDate()", +"379607f5": "claim(uint256)", +"37960cd5": "publicKeySize()", +"379698c1": "calculatePie()", +"37970dbe": "shouldAirdrop()", +"379725ee": "queryName()", +"3797528e": "IllusionDust()", +"3797b4de": "forwardRemaining()", +"37981c32": "pre_maxGoal()", +"37983aed": "getMyCards(address)", +"37986d2b": "freezeAndConfiscate(address)", +"37989eb6": "setOwnerBurner(address)", +"379930f7": "WHEEL_SIZE()", +"379986d9": "executeBurnProposal(uint256)", +"379995c3": "getDealerAndLuckyInfo(uint256)", +"3799bbd3": "privatePresaleAllocatingToken()", +"3799c5eb": "test_insert_findWithHintPrevRemovedUpdateHead()", +"379abed8": "ANPlaceholder(address,address)", +"379b7589": "signedTransfer(address,address,uint256,uint256,uint256,bytes32,address)", +"379ba1d9": "setTradingStatus(bool)", +"379ba2ab": "exchangeForQIU()", +"379ba3b7": "currSaleActive()", +"379bad0b": "addProofOfPerfBlock(uint32,string,bytes32,bytes32,bytes32)", +"379c1bd9": "createHorseShoe4(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"379c5131": "getByOwner(address)", +"379c5d3f": "ModuleToken(uint256)", +"379c8f6c": "_keepLastTransaction()", +"379ca09e": "priceStep5()", +"379dbdeb": "accessAllowance(address,address)", +"379e00d4": "maxTextLength()", +"379e2919": "setDevFeePercent(uint256)", +"379e9957": "fiveMatchPayoutInPercent()", +"379f946a": "initGeneralAttr(uint32,uint64)", +"379fed9a": "isMasterOfCeremonyRemoved()", +"37a0b958": "DATAToken()", +"37a14b52": "changeICODates(uint256,uint256,uint256)", +"37a1c540": "founder1Wallet()", +"37a1c84f": "registerNameResolver(string,address)", +"37a2890d": "eraByIndex(uint256)", +"37a28979": "setSettings(uint256,uint256)", +"37a30d3b": "current_price_atto_tokens_per_wei()", +"37a31079": "pointsLimit()", +"37a31895": "withdrawSelect(address)", +"37a366d8": "loggedBalances(address,uint256)", +"37a38bb1": "StateChanged(uint8,uint256,string)", +"37a3931f": "invalidate(address)", +"37a47106": "create(uint256,bytes32,uint256,uint256,uint256)", +"37a58bb4": "KudosPollFactory()", +"37a59139": "estimate(string)", +"37a5ae1f": "withdrawSingleBucket(address,uint256,uint256,uint256)", +"37a5fbab": "SaleStart()", +"37a66d85": "setPaused()", +"37a6b9f8": "recordCallback(address,uint256,bytes,bytes)", +"37a6d42b": "participant()", +"37a7095b": "LeviathanToken()", +"37a74f7e": "p_update_currentPlotEmpireScore(uint256)", +"37a7983b": "changeminContribAmount(uint256)", +"37a7b7d8": "feed()", +"37a7f2b7": "MIN()", +"37a87dfa": "updateList(address,address,bool)", +"37a91776": "OSATOKEN()", +"37a920f1": "Universe()", +"37aa1689": "getIcoDiscount()", +"37aa7f91": "isAuthorisedMaker(address)", +"37ab8f20": "notifyPlayer(uint256,uint256,uint256,uint256)", +"37ab9dcf": "getCPFee()", +"37ac8236": "getPunchCardsOf(address)", +"37ac9153": "Retrieve(string,address)", +"37adf3a3": "hasRefBonus()", +"37ae31c7": "DemSinhVienRequests()", +"37ae43a3": "BetOnHashV81()", +"37af5c32": "ANYtoken()", +"37aff76d": "getSystemAvaliableState()", +"37b0574a": "isClassic()", +"37b0786a": "icoInvestmentWei(address,uint256)", +"37b0ac71": "confirmTeamWithdrawal()", +"37b0f257": "setConfirmAddr(address)", +"37b34974": "reverse(bytes32)", +"37b475d4": "SOFT_CAPACITY()", +"37b4d863": "maxbet()", +"37b4f299": "IMTERC20()", +"37b54140": "buyTokensForAddress(address)", +"37b5dce4": "PDP()", +"37b6efeb": "engraveDefault(bytes32,string,string)", +"37b7bf11": "Tile(int256,int256)", +"37b89705": "getAgilityValue(uint256)", +"37b8cade": "raisedEthAmt()", +"37b8db1a": "executeVerdict(uint256,bool)", +"37b9756b": "totalIssuanceDebt_limitedSum()", +"37ba1b4d": "Fpgcchain(uint256,string,string)", +"37ba682d": "END_TIME()", +"37bb223e": "CUC()", +"37bb25bc": "withdrawalLimit(address)", +"37bd0d28": "howManyFucksGiven(uint256,bool)", +"37bd1868": "setHatchedEgg(uint64,uint64)", +"37bd78a0": "secondsTimeLocked()", +"37bdc146": "weiFounded()", +"37bdc99b": "release(uint256)", +"37be04b4": "EZStandardToken(uint256,string,uint8,string)", +"37be827d": "Sum()", +"37c08923": "totalContributions()", +"37c0a5ef": "Finished(uint256,uint8,uint8,uint8,uint8,uint8)", +"37c2afda": "signJUR(address)", +"37c30a98": "round_()", +"37c345cd": "specialManagerAddressMap(address)", +"37c35157": "updateTerm(uint256)", +"37c390e3": "allow_move(uint16)", +"37c3d50d": "buyAlt(address,uint256,string)", +"37c3ee6e": "doDistro(address[],uint256)", +"37c43088": "hashesSize()", +"37c44802": "initMonsterClassConfig()", +"37c57718": "ListingBought(bytes32,address,uint256,uint256,uint256,address)", +"37c62ed6": "createUnicornPriceInCandy()", +"37c6fcba": "LandlordTerminate(uint256,string)", +"37c74948": "getPropertyPrivateMode(uint16)", +"37c75992": "mintingIsFinished()", +"37c8d21f": "echo(string,string)", +"37c8f1d1": "AIgathaToken(address,uint256,uint256,uint256,uint256,uint256)", +"37caa8b6": "getTop(uint256)", +"37cb3c86": "distributeSlotBuy(address,uint256,uint256)", +"37cc7761": "contractReservedBalance()", +"37cc7cc0": "bannedCycles(uint256)", +"37ceb05b": "getFixtures()", +"37cef791": "getRate(address)", +"37d004b3": "bulkRelayCMCT(address[],uint256[],bytes32)", +"37d0208c": "bribe()", +"37d044cd": "tokenCreationPreSaleCap()", +"37d05434": "getCurrentRoundIssued()", +"37d1eb35": "setOffChainManagerAddress(address)", +"37d2649a": "Ownedfunction()", +"37d2d350": "setBOPSAddress(address)", +"37d33438": "totalHedgelyInvested()", +"37d3433f": "calculateAmountBoughtPreICO(uint256)", +"37d35507": "tokenCreationMinConversion()", +"37d365de": "admin_set_shopStoreRegister(address,address)", +"37d3ec7a": "ZBillionaire()", +"37d45088": "transferAllowed_(uint256,address,address,uint256)", +"37d48628": "totalSaleCapUnits()", +"37d4fc84": "Alpha()", +"37d76636": "item(uint256,uint256,bytes)", +"37d876b6": "GVTTeamAllocator()", +"37d9d7fc": "getBytes32(bytes32,bytes32)", +"37d9ffd1": "registerClient(address,uint32,uint256)", +"37da8058": "in_top_n(uint256,uint256)", +"37daa09e": "getUpCount()", +"37dac676": "getPOOL_edit_8()", +"37daf0ed": "getETHBalanceInfo()", +"37db0703": "isClean(string)", +"37db12c4": "PausePayment()", +"37dbbac4": "deleteMyEntity(uint256)", +"37dc414b": "balanceOfTarget(address)", +"37dc4b14": "setSpeedBump(bool)", +"37dd186b": "removePermission(address,string)", +"37dd5dd6": "poicoin()", +"37dda1ae": "setTktPrice(uint256)", +"37de1334": "rand16(uint256,uint16,uint16)", +"37de84d0": "createGame(string,string,bytes32[],string,uint256,uint256,uint256,uint256,uint256)", +"37df00c9": "receiveToken(uint256)", +"37df4828": "buy_planet()", +"37df6c03": "setAccountC(address)", +"37dfc70c": "getInvitationMultiple()", +"37e05590": "setKYCManager(address)", +"37e0e290": "numTokensSold()", +"37e12ab7": "checkGoalReach(uint256)", +"37e15240": "addRecord(uint256)", +"37e16f40": "currentAfterIcoPeriod()", +"37e246ad": "isOnAuction(uint256)", +"37e29e93": "BlueHillMining()", +"37e50f39": "awardPrizes()", +"37e531c0": "fechVoteNumForCandidate(address,uint256)", +"37e582b9": "LogRefundsEnabled(address)", +"37e58bd8": "GlowEther()", +"37e6b280": "verifyCommit(uint256,uint256,uint8,bytes32,bytes32)", +"37e6e03b": "setMultisigPre(address)", +"37e7a739": "Token3G()", +"37e822b8": "addRank(uint256,uint256,uint256,string)", +"37e87c7d": "OwnerManage(uint256,uint256,uint256,uint256)", +"37e8c09e": "getBet(bytes32)", +"37e922d7": "TERMS_AND_CONDITION()", +"37e94529": "setHardCapDividends(uint256)", +"37e94853": "TakerBoughtAsset(address,uint256,uint256,uint256)", +"37e9af0c": "IsAdmin(address,address)", +"37e9ebb5": "getExists(bytes32[])", +"37ea010a": "transferWithRef(address,uint256,uint256)", +"37ea1f63": "getWithdrawalCounter()", +"37eb6f91": "LiquidSwapToken()", +"37ebd0e0": "whitelist(address,uint256,uint32)", +"37ec33b7": "startDateOfUseTeamTokens()", +"37ec757f": "getStrFromId(uint256)", +"37ed2bef": "tokensToLock()", +"37ed89b2": "BitcoinPro()", +"37ede426": "WhaleWater()", +"37ee1837": "isCrowdSaleRunning()", +"37ee3edb": "buyTokensWithReferrer(address)", +"37efa397": "cryptoRomeWallet()", +"37f03888": "panicButton(bool)", +"37f0fa43": "PricingDay(uint256)", +"37f1353f": "PayPoolEntranceFee(string)", +"37f13fd6": "prova2()", +"37f1a470": "appoint(address)", +"37f1e7f2": "getPrice(uint8)", +"37f265e6": "get_session(address,uint32)", +"37f26746": "Remainder(uint256)", +"37f2beed": "getProposalVoterList(uint256)", +"37f2eaf6": "addTransaction(address,uint256,bytes,bytes)", +"37f33bd5": "EvenCoin()", +"37f344ff": "WhitelistedEarlyParticipant(address,bool)", +"37f3cb24": "testInitialBalanceUsingDeployedContract()", +"37f42841": "queryBalance(address)", +"37f4494b": "castLine(uint16,uint16,bytes32)", +"37f46e7e": "mintTokensByETH(address,uint256)", +"37f4c00e": "anchorGasPrice()", +"37f4dfea": "unsafeWriteBytes(uint256,bytes)", +"37f50f57": "wishes()", +"37f50f5b": "leggiFrase(uint256)", +"37f531ea": "_addHolding(bytes12)", +"37f534b6": "Blocform(address)", +"37f57d05": "StarterTokenBase()", +"37f7151b": "MTPToken()", +"37f7c4d4": "pow2()", +"37f80a58": "INVESTMENT_CAP_ICO_PHASE_ONE_POUNDS()", +"37f83291": "monuments(uint256)", +"37f86dce": "giveupBid(uint256)", +"37f9034d": "getAnimal(uint32)", +"37f944cc": "raiseBy()", +"37fa33fe": "EVATOKEN()", +"37fb217a": "valueForTranches(uint256)", +"37fb7e21": "distributionAddress()", +"37fbd30f": "etherHolder()", +"37fbec96": "totalTaxed()", +"37fc55bf": "give(string,uint256,string)", +"37fc91e3": "balanceWosPoolToTeam()", +"37fcb747": "TestERC20Token()", +"37fcb779": "sendAllFeesToAddress(address)", +"37fd25c7": "balanceOf(address[],address)", +"37fd6128": "tokenRate15()", +"37fd686f": "balanceOf(string,address,address)", +"37ff2506": "PRESALE_CONTRACT()", +"37ff65da": "Bugis_Crowdsale()", +"3800a119": "closeGateway()", +"3800d0a3": "get_proposal_count()", +"38014395": "originalAuction()", +"3801cde7": "Foodiecoin()", +"3801e6b6": "Cloud(uint256,uint256,string,string,address)", +"3802a4a2": "getEthDealRange()", +"3802d3ef": "totalTokensEmitted()", +"38039479": "setCandidate(uint256,string,string)", +"3803b7d3": "readAddressList(address,uint256,uint256)", +"3803f80e": "cancelCall(bytes32,address)", +"3804482a": "setMaxDistributions(uint256)", +"3804ab8d": "getTokensOnAuction()", +"3804c73d": "gameStartBlock()", +"380547c0": "addCompany(string,address,uint256,bool)", +"3806153e": "tier2()", +"3806422a": "stagesCount()", +"38075446": "shouldStopCoinSelling()", +"3807aabd": "generate(address,uint256)", +"3807ba1b": "poi()", +"380862b2": "getSynthesizeApproved(uint256)", +"3808ac11": "DXN()", +"38095a4a": "fccController()", +"3809b240": "settlementContract(uint64)", +"3809c0bf": "doInfinite()", +"380b5450": "getPrecomputedEToThe(uint256)", +"380ba30c": "confirmPrint(bytes32)", +"380bbf78": "getTokenIdOfAddressAndIndex(address,address,uint256)", +"380be68e": "open_new_node()", +"380bf002": "mintCountByTemplate(uint256)", +"380c686d": "setTokenPriceByOwner(uint256,uint256)", +"380c7a67": "authenticate()", +"380d831b": "endSale()", +"380e5e44": "makeProposal(string,string,uint256)", +"380e809e": "batchTransferFromMany(address[],address,uint256[])", +"380f3087": "addHashes(uint256)", +"380f3771": "viewRand()", +"3811264a": "ErrorLog(address,string)", +"38116187": "buySpike()", +"38118614": "sigTeamAndAdvisersEDUSupply()", +"3812783e": "getDeployedEvents()", +"38131bc5": "redeemOrSellCoinsToICO(uint256,uint256)", +"38132838": "setProviderSupply(uint256,uint256)", +"3813a7f2": "getWineIdentifierAt(address,uint256)", +"3813be76": "currentGameBalance()", +"3814253f": "grantFoundersTokens(address)", +"3814a7a3": "CardsBase()", +"3814b764": "setBridgeWidth(uint256)", +"381501e6": "SwapManager()", +"38151862": "SHSToken()", +"38151930": "isTokensPreIcoDistributed()", +"38158549": "NENCToken(uint256)", +"3815c742": "Koyo()", +"38164d41": "SGDsToken()", +"381656e2": "declineAll()", +"3816a292": "setToken(address,bool)", +"3816d4ee": "iICO()", +"381731be": "approveAndCall(address,uint256,uint256,bytes)", +"38178fbe": "addString(string,string)", +"3817ffda": "_limitedTotalIssuingCollateral(uint256)", +"3818657b": "isActiveFreelancer(address,address)", +"3818d907": "addPrecommitment(address,uint256)", +"38194aab": "_addNewCompanyTraders(uint256)", +"38198c65": "totalEtherGooResearchPool()", +"3819986e": "createNewPoll(string,uint256,uint256,uint256)", +"3819ea68": "SimpleMarket()", +"381a0161": "TRONIXGOLD()", +"381a730e": "withdraw_3()", +"381abeb5": "RonaldoChain()", +"381ae69a": "createReferee(address,address)", +"381c215f": "SEXYCOIN()", +"381cec91": "isVestingStarted()", +"381d5441": "roger()", +"381db641": "distributeTokenAndLock(address,uint256,uint256)", +"381ee645": "lastBlock_v0()", +"381f4b9e": "RRROToken()", +"381fe9ca": "DgxDemurrageCalculator(address,address,address,address)", +"38200801": "getExtensionPublication(string)", +"3820a686": "canBurn(address)", +"3821891e": "requestRegistration(string,address)", +"38218aa1": "getBettorInfo(uint256,uint256,address)", +"38219832": "spendEther(address,uint256)", +"38222858": "setThrowOnIncompatibleContract(bool)", +"3822de0f": "kvtToken()", +"38235781": "checkICO()", +"382396ee": "getGameStatus()", +"3823d66c": "withdrawn(bytes32)", +"3823df95": "testPop()", +"38241c16": "setKYC(address[],address[])", +"3824d8ee": "buy100DaoFor1Eth()", +"3824ea31": "getHighScore()", +"38266b22": "getData(address)", +"3827d0bf": "_createDank(string,address,uint256)", +"38280e6b": "setTokenDistributor(address)", +"38284f36": "release(uint256,uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", +"38285534": "gameDeveloperSupply()", +"3828b522": "serviceApprovedBy(address,address)", +"3828becc": "setBountyAmount(uint256)", +"3829111f": "BuyNowEvent(address,address,uint256,uint256)", +"382964a5": "withdrawForTeam(address)", +"38299afd": "recommendPaused()", +"3829dd22": "tokensForOneEth()", +"382b6f69": "test_oneInvalidEqBytes()", +"382c52cd": "transferableTokens(address,uint256,uint256)", +"382cbc79": "userDelete(address)", +"382cf0a6": "gamesPlayed(uint256)", +"382d39bb": "planCount()", +"382d606b": "CROSAIR_VOUCHER_PRICE()", +"382db937": "finishContributionPeriod(uint256)", +"382df05d": "getInvestmentByAddress(address)", +"382e5272": "addGameRecord(address,uint256,uint256,uint256,uint256)", +"382ef945": "Contributed(address,uint256,uint256,uint256,uint256,uint256)", +"382f431b": "open(bytes)", +"382f8411": "_createPassport(address)", +"382faa6a": "cancelToken(uint256)", +"382fc09f": "CoinVilaStart()", +"382fd819": "kyc(address,address)", +"38300f19": "setCAORatio(uint256[])", +"38302989": "getUsernameForAddress(address)", +"38304483": "pauseAllTransactions()", +"3830901a": "assignImmortalsToBattle(uint256)", +"3830ceeb": "totalriskcoinsSupplys()", +"38310f49": "weiMinimumAmount()", +"3831a8d5": "BurgerKapija()", +"3832677d": "partsMinted()", +"38331353": "MoreAI()", +"38350541": "_ownerOf(uint256)", +"38353104": "setBlockDotTimestamp(uint256)", +"38360ed8": "balance(bytes32,string)", +"3836a6d2": "setKYCLevelsBulk(address[],uint8[])", +"3836d3f4": "JapanvsPoland()", +"3836fe6e": "addPermittedContract(address)", +"38376154": "setGasForOraclize(uint256)", +"3837e9bd": "getGooCostForUnit(uint256,uint256,uint256)", +"3838a099": "aboutItem(uint256)", +"383a194c": "buyUnicornWithEth(uint256)", +"383bb22a": "setMinorEditsAddr(address)", +"383cf18f": "getGovtApplicationsCount(string)", +"383e3a5d": "buyPriceAt(uint256)", +"383e4b27": "submitRing(address[4][],address,uint256[6][],uint256,uint8[1][],uint8,bool[],uint8[],bytes32[],bytes32[],address,uint16)", +"383e9a3a": "claimTokensFromTokenDistrict0xNetworkToken(address)", +"383eea0e": "transferDevship(address)", +"383f61b3": "refundPlayersInRoom(uint256)", +"383fcd3a": "getLastPlayDateTime(address,address)", +"383fe467": "transferTokenOwnership(address,address)", +"383fe6d3": "setCentsPerMonth(uint256)", +"3840369b": "triggerEvent(int256)", +"3840d63d": "unknownReserved()", +"38416341": "getbetData(uint8,int8,address)", +"38419800": "taylorToken()", +"38421476": "changePaused(bool)", +"3842c57c": "petCollection(uint256)", +"38436c60": "transferEgg(uint256,address)", +"38439bb6": "update_tree()", +"3844426c": "EST(uint256,string,string)", +"3844e1c4": "getClientBalance(address)", +"38453f29": "registerCat(uint256,uint256,uint256,uint256,uint256,uint256)", +"384711cc": "vestedAmount(address)", +"38471dd6": "athenians()", +"3847807a": "stopGamGetToken()", +"38478ae7": "setMinterContract(address)", +"38495d66": "updateVault(uint256)", +"3849794f": "setDataSourceAddress(address,address)", +"384a6494": "setStartPreSale(uint256)", +"384af0de": "setMinimumprice(uint256)", +"384b1393": "follow(uint256)", +"384b93f2": "pullTheLever()", +"384baa8a": "round1StartTime()", +"384bb70b": "getData_17()", +"384bfacb": "cofounderIndices(address)", +"384c3335": "requiredToAddress()", +"384c440b": "DISTRIBUTION_TEAM()", +"384c4d2f": "reserveFeesInBps(address)", +"384d0b12": "claimByProof(bytes32[],bytes32[],uint256)", +"384d2e0c": "getNumberByWalletUser(address)", +"384db9fc": "WithdrawEther(uint256)", +"384ddc32": "JM_ETH_ExchangeRate()", +"384e04c9": "setarg_2(uint256)", +"384e2bf5": "MNLTOKEN()", +"384e5018": "etherandomCallbackAddress()", +"384f58eb": "contract_owner()", +"384fae3b": "hashDataStream(address,string,bytes32)", +"38503f55": "AdjustDifficulty(uint256)", +"3850f804": "castVote(uint256,uint256[],uint256,uint256)", +"38516064": "getFeePool()", +"3852c53f": "battlesTillBattleCooldown()", +"3853682c": "Try(string)", +"38536878": "getOwed(address,address)", +"3854bc2e": "setUSD(uint256)", +"3855323f": "updateKey(address,uint256,address,address)", +"38556c3a": "contract8function2()", +"38557648": "executeSellOrder(address)", +"3855b3dc": "GetEscrowNotifierAddress()", +"3855cf0e": "Proxyable(address)", +"3855dcd6": "getContrarians_by_index(uint256)", +"3855f32e": "keysRec(uint256)", +"385794c4": "MAGENDAVID()", +"38597911": "appendKeyValue(string,uint256)", +"3859d609": "raccoltaMessaggi()", +"385ab2d7": "allowSelling()", +"385ae665": "getNumberOfAnnotations(address)", +"385af1c3": "setChainPrev(address)", +"385c0ecf": "whitelistMaxWei(uint256,address)", +"385cd083": "tgeActive()", +"385d8590": "Committed(address)", +"385df389": "tokenURIEdition(uint256)", +"385e27ed": "testSubtract()", +"385e9e2e": "MintNFT(address)", +"385fae43": "setBetclose(uint256)", +"385fb8a6": "STAGE_3_MAXCAP()", +"385fbe24": "ListingContractEntity()", +"385fea5c": "countCliManagers()", +"38613690": "agentAddress()", +"38616105": "LogDestroy(uint256)", +"3861ee08": "EventBuyCar(address,uint32,uint32)", +"3862822d": "buyHo(uint256)", +"3862e6ee": "getEvaluationCountByRecorderID(uint32)", +"3862ea9d": "lockedBitmask()", +"386304e4": "receiveFromGame()", +"38634337": "CrowdsaleToken(uint256,uint8,address,address)", +"386381db": "fundariaTokenAddress()", +"38644538": "setAdditionPrice(uint256)", +"38649b2a": "isConstructedOwned()", +"3865bf3a": "joinNetwork(address[6])", +"3866ecdd": "forceWithdrawToken(address)", +"38670cb4": "founders_address()", +"386741fa": "onSubNew(uint256,uint256)", +"386762fb": "withdrawSnowflakeBalanceFromVia(string,address,address,uint256,bytes,bytes)", +"386892d8": "endICOStage3()", +"38689772": "FixBet16()", +"38692ca6": "setRegistrationPeriod(uint8)", +"3869416b": "getDisputeStartTime()", +"3869eaff": "USEaddress()", +"3869ffd0": "newIteration()", +"386a646e": "QDToken()", +"386b5fe7": "aelfDevMultisig()", +"386c5a74": "LogFeeTopUp(uint256)", +"386c69f2": "setCanBurn(bool)", +"386ca47e": "minCompanyValue()", +"386dd46e": "BTK()", +"386e0d75": "setPopName(uint256,string)", +"386e2b29": "registHnsBatch(bytes32[],address[])", +"386e3441": "tokensIssuedPrivate()", +"386e69dc": "nextRoundStartsAt()", +"386ee512": "Crowdsale(uint256,uint256,uint256)", +"386f36f3": "Deployed(uint256,uint256,uint32)", +"386fcda8": "testCreateCostToken()", +"387008c2": "updateStatus(uint256,bool)", +"3871b694": "LogSell(address,uint256,uint256,uint256)", +"3871bdd7": "depositPresaleWithBonus(address,uint256,uint256,uint256)", +"38721fa4": "getOperationCost(uint256)", +"3872b3ec": "setCoolDungeon(uint32)", +"387349fc": "numberOfTokensToAvail50PercentDiscount()", +"38734c33": "OnContribution(address,bool,uint256,uint256,uint256)", +"3873eeb8": "approveForBurn(address,uint256)", +"38742685": "pegglebot()", +"38743904": "moderator()", +"38752e58": "batchApprove(uint256[],address)", +"38756a89": "getLevelsCount()", +"38759ce9": "getFhMoney(uint256,uint256,uint256,uint256)", +"38760f13": "NewAccreditedInvestor(address,address)", +"387621fb": "cleanupDelay()", +"3876c137": "FRAC_TOP()", +"3876df0e": "ProjectWithBonds(string,uint256,uint256)", +"3876e05e": "appWallet()", +"3876e6d3": "securityTokenVersion()", +"3876f81d": "getPeriodBounus()", +"38771242": "completedAt()", +"387787ed": "setProperty(address,bytes32,bytes32)", +"38785014": "lastBlock_f4Hash_uint256()", +"3878f423": "remainingInvocations()", +"3879aa23": "firstCheckpoint()", +"3879c9f3": "teamCliff()", +"387a54d9": "callInternalTransfer(address,address,uint256)", +"387a76ce": "tokenChanger()", +"387b6c2f": "OwnedResolver()", +"387be94f": "minimumAmountRequired()", +"387bef56": "nodeAllocation()", +"387c0cb4": "hashRegistrar()", +"387d3821": "increaseMarketValue(uint256,uint256)", +"387d49d4": "setBountyBeneficiariesCount(uint256)", +"387da66c": "MCoinToken()", +"387dd9e9": "slots(uint256)", +"387e01fd": "ITO_TOKENS_PERCENT()", +"387e7bb4": "SingularityTest4()", +"387eaedb": "jypcBonus()", +"387ed59b": "hardCapTxWei()", +"387f4172": "GorillaSale(uint256,uint256,uint256,address)", +"388085be": "module(address)", +"38811792": "disallowWrite(uint256,uint256)", +"38812e58": "setStartTime(uint64)", +"38813ee0": "allEther()", +"3882f333": "partnerSaleTokenValue()", +"3882f742": "exitStake()", +"3883aee2": "checkGoalsReached()", +"388415e5": "Exchange(address,uint256,address,uint256,uint256,address)", +"38848911": "AmountRaised(address,uint256)", +"3884d635": "airdrop()", +"3884f307": "withdrawTo(address,uint256,address,bytes)", +"38856ecb": "assertEq5(bytes5,bytes5,bytes32)", +"38857786": "presaledeadline()", +"3885ce81": "avgEtherBetValue()", +"3885fd3d": "sendEther(address,address,uint256)", +"3886b116": "chkConsul(address,uint256,bytes32)", +"3886c957": "tokenLedger()", +"38874945": "developersWallet()", +"388777f1": "setlimits(bytes32,uint32[],uint32[],uint8[])", +"38879da8": "Transfer(address,address,uint256,uint256,uint256,uint256)", +"3887abb7": "checkPeriod()", +"3888188d": "releaseLockFoundation()", +"3888624b": "trueOrFalse()", +"3888dca0": "q_test(string)", +"388911dc": "sudoEnabled()", +"3889c8dc": "Payiza()", +"388a1526": "defaultTreesPower()", +"388a74ab": "validPurchaseSize(address)", +"388aef5c": "WAIT_TIME()", +"388b5786": "econReserveTimeLock()", +"388b9f37": "LogTokenDistribution(address,uint256)", +"388ba4b5": "COIN_SUPPLY_MKT_TOTAL()", +"388e28f9": "stop_all()", +"388f2c39": "recover(bytes32,bytes32,bytes32,uint8)", +"388f3cd3": "cashin(address,uint256)", +"388f58cd": "addMarket(bytes6)", +"388fb0af": "reservedTokensPercent()", +"388fe911": "new_tablet_created(address,bytes32,address)", +"38905bea": "lulaToken()", +"38906dbd": "Token(uint8,uint256,string,string)", +"38909b68": "getBonusUnlockAt()", +"3890d77f": "esopState()", +"3891c320": "vote(int256)", +"3892be14": "payoutPreviousRoll()", +"3893966d": "distribute(address[],uint256[],uint8)", +"389435e8": "calculateTotalWithdrawableAmount(address)", +"389439bb": "OwnerSigneture(address[])", +"389441b2": "getvaluejoinlist_even(uint256)", +"38948c53": "finalizeable()", +"3894ca57": "catOwners(bytes5)", +"3894e516": "generateToken(string,uint256)", +"38953534": "BTCEX()", +"3895f466": "buyoutWithData(uint256,string,string,string,string)", +"38960027": "aliveSince()", +"38969d64": "changeZipper(address)", +"389755a7": "setDefaultTransferRate(uint16)", +"3898ee61": "generateTicketData(uint256,uint8,uint8)", +"3899ad41": "unlockSecondary()", +"389aa67c": "addOrder(string,address,uint256,uint256,string,address)", +"389ab31c": "networkDevelopmentWallet()", +"389ae4d1": "foundersKey()", +"389b5bd2": "CryptobullsCoin()", +"389b7533": "extendDeadline(uint256)", +"389b75d6": "resetPool(uint32)", +"389cabee": "ceoWallet()", +"389cd1ae": "setGasPrice(uint256,uint256,uint256)", +"389d9636": "buyDiamond(uint256)", +"389db4f1": "_adjustDifficulty()", +"389e40d2": "PACOIN(uint256,string,string)", +"389e4839": "setState(bytes32,bytes32)", +"389eb9f9": "withdrawalTime()", +"389ece2f": "changeTelephoneOwner(address)", +"389f0846": "balanceUpdate(address,address,int256)", +"38a003e0": "getOrderAddressesForDay(uint256)", +"38a0615f": "TabooToken()", +"38a0fc9a": "registerPool(string,uint256,uint256,uint256,uint256)", +"38a0fdde": "setSnapshot()", +"38a1187d": "calculateEthAmount(address,uint256,uint256,uint256)", +"38a18cbe": "createTradeContract(address,uint256,uint256,uint256)", +"38a211b7": "lockTopLevelDomainOwnershipTransfers()", +"38a21db8": "create(bytes32,bytes32[3],bytes32,bytes32)", +"38a2cd0f": "setData_3(string)", +"38a2fb4f": "TransferBaseContract(address)", +"38a326e4": "activatedSalesTotalCount()", +"38a332eb": "EndGame(address,uint8,uint256)", +"38a4045e": "despoit(uint256)", +"38a4ba0b": "getAdPriceHalfDay()", +"38a52fb1": "setEthPlan(address,uint256,uint256,bool)", +"38a57d0c": "buildShip(uint16,uint16,uint8,bytes32)", +"38a5e016": "acceptTokenOwnership()", +"38a699a4": "exists(bytes32)", +"38a6e813": "updateAllowedAddressesList(address,bool)", +"38a74bbf": "endGameInternal()", +"38a7543e": "issuers(address)", +"38a8a0ca": "DeadCow(address,uint256)", +"38a964d6": "getFeeValue(address)", +"38a9a6f8": "bonusPreset()", +"38a9f25a": "PlayerLab()", +"38aa156c": "getKeccak256Address(address,address)", +"38ab0287": "nextMintPossibleTime()", +"38ab8ef4": "RelentlessConscienceToken()", +"38abdf41": "CraigGrantShrimper()", +"38af3eed": "beneficiary()", +"38af4eff": "tokenCents()", +"38b025b2": "parseInt16Char(string)", +"38b09889": "VictorieumNewToken()", +"38b0ea85": "startRedemption(uint256)", +"38b15dab": "setMyTokenBalance(address,uint256)", +"38b3e983": "Better(uint256,uint256,uint256)", +"38b52627": "supportsInterfaces(address,bytes4[])", +"38b5491b": "getInvestmentProposal(uint256)", +"38b56ead": "setURIToken(string)", +"38b59359": "ChangeEthPrice(uint256)", +"38b59be6": "addPercents(uint256,uint256)", +"38b5e0fe": "numElementsEven()", +"38b6e407": "endGrantAuthentication(address)", +"38b7a530": "addToAvgRating(address,address,string,string,uint8)", +"38b88052": "staleTime()", +"38b90333": "CONTRACT_VERSION()", +"38b93440": "replaceModule(string,address,bool)", +"38b9499b": "circulationStartTime()", +"38b9d61e": "bonusLimit4()", +"38b9ef9c": "betWithRound(uint256,bytes32)", +"38bb3977": "JuventusvsRealMadrid()", +"38bbbceb": "test_failed_payment_nonthrowing_token()", +"38bbfa50": "__callback(bytes32,string,bytes)", +"38bbfc51": "FCOIN1050Token(uint256,string,string,uint256)", +"38bc01b5": "getAddresses(bytes32[])", +"38bc1b96": "_airdrop(address,uint256)", +"38bcdc1c": "getURL()", +"38bd44f3": "createSDCC(address,address,uint256)", +"38bd8357": "next_week_timestamp()", +"38bde636": "GoodBoyPoints()", +"38be706d": "__callback(uint256)", +"38beb446": "PlayerToken()", +"38beb67f": "getCertificateHash(address,address,uint256)", +"38bef35c": "CFCdistrubution()", +"38bf77c3": "setFeesPerTenThousand(uint256)", +"38c0ac5f": "signer2()", +"38c1b824": "transferBookKeeping(address,address)", +"38c20499": "accMinterTwo()", +"38c33862": "wineries(bytes32,uint256)", +"38c3d4ed": "PORNCASH()", +"38c4090b": "getMarketOrderValue(uint256)", +"38c4d4a6": "pairTransfer(address,uint256)", +"38c59de9": "getNumberInvestors()", +"38c5a3dc": "changeRealUnicornAddress(address)", +"38c67b73": "setCurrentStage(uint256)", +"38c68f8f": "right84(uint256)", +"38c72883": "DealFullyFunded(uint256)", +"38c73f9f": "by(bytes32,uint256)", +"38c7db75": "getUnredeemedBalance(address,address)", +"38c80857": "unlock1Y()", +"38c80fc3": "getWhitelistStatus(uint256,address)", +"38c8e611": "getPreorderInfo()", +"38c8ec85": "convert1(string,string)", +"38c9027a": "calc(uint256)", +"38c92ef0": "propose(bytes,address,string)", +"38c97949": "StandardGame()", +"38c9dbf3": "TEAM_STAKE()", +"38ca59cf": "createTargetedValentineRequest(string,string,string,address)", +"38ca60a2": "IBST()", +"38ca683b": "MARKTY()", +"38ca830c": "updateWhiteList(bool)", +"38caa2c6": "MaxCapReached(uint256)", +"38cb252f": "getBonusPercent()", +"38cb583d": "checkAndUpdateTokenForManual(uint256)", +"38cc17ee": "setGameState(bool)", +"38cc4831": "getAddress()", +"38cc639d": "_setUserAttribution(bytes32,address,uint256)", +"38cd2c1a": "TransferSellAgentSiteRegMulti(address[],uint256)", +"38cdaab1": "changeICOState(bool,bool)", +"38cde380": "changeWeight(uint256)", +"38ce1df8": "sideServicesCount()", +"38ce4d51": "canRedeemUTXO(bytes20,uint256,bytes32[])", +"38ce61b2": "transferAndFreeze(address,string,address,address,uint256,uint256,uint256)", +"38ceaf1b": "LicenseManager(address,string)", +"38cef1ab": "ESCBCoinPlaceholder(address,address)", +"38cf2087": "parametersAreSet()", +"38cf22e3": "getHoldingsSupply()", +"38d084b5": "address4a()", +"38d0ae6c": "stakeFunds(uint256,uint256)", +"38d0e36f": "SBSEducationToken()", +"38d16011": "verifyKYC(address)", +"38d1ed57": "getTotalFeesDistributedCount()", +"38d28d4c": "setTicketCountMax(uint256)", +"38d28de3": "getGoldInfoWeight(address)", +"38d2b172": "lowCapTxWei()", +"38d33337": "RoundAHardCap()", +"38d335ef": "ShowTestB(bool)", +"38d40ced": "changelp15(address)", +"38d44ad5": "recall(uint256,string)", +"38d480a6": "bulletAddress()", +"38d4d73e": "isVotedGood(uint256)", +"38d52e0f": "asset()", +"38d560b6": "gmtAddress()", +"38d65020": "JackpotAccessControl()", +"38d67d88": "changeContractName(string,string)", +"38d762ef": "LogBurn(address,uint256)", +"38d7be3c": "WXBET()", +"38d888a6": "impToken()", +"38d93280": "ProfitContainer(address)", +"38da5b07": "verifyIncludedAtIndex(bytes,bytes32,bytes32,uint256)", +"38dacaab": "teamTimeLock()", +"38db6dd3": "registerVoter(address)", +"38dbb74a": "initialize(uint256[],uint256[],uint256,address,uint256,address)", +"38dbdae1": "player3()", +"38dc25d1": "KMCToken()", +"38dc92bc": "NCP()", +"38dca34a": "AddStudent()", +"38dd22f0": "isOwnerOrAdmin(address,address)", +"38dea895": "auction(address)", +"38dec0fa": "RefundAdded(address,uint256)", +"38df6fb2": "CollateralPosted(address,uint64,uint256)", +"38dfe2f5": "getString2()", +"38e078b4": "FixBet76()", +"38e11779": "OriginalAddress(address,address)", +"38e1294c": "updateBuyStatus(bool)", +"38e288f1": "airdrop(address[],uint256,uint16)", +"38e29ef0": "ICO_BONUS_TIME_1()", +"38e2c296": "processJackpotDeposit(uint256,uint256,address)", +"38e3aaf1": "Error(uint256,uint256)", +"38e43840": "collected(address)", +"38e45c65": "endCall()", +"38e47639": "getHighWater()", +"38e48f06": "save(string)", +"38e48f70": "getDonation(address,uint256)", +"38e4b06b": "releasedTeam()", +"38e55e89": "SigmaToken()", +"38e586fd": "right5(uint256)", +"38e64f9e": "milestoneReached()", +"38e771ab": "refundAll()", +"38e7920a": "setTokenRate(uint256,uint256)", +"38e7a375": "textaaaToken(address,uint256)", +"38e8feed": "TokensTransfer(address,address,uint256)", +"38e91e41": "devHolder()", +"38e95d55": "amountToRaiseInUsdCents()", +"38e998a7": "buyLand(int32,int32)", +"38e9e6b5": "setClaimingCosts(uint256)", +"38ea1c4d": "setTransferCreditBot(address)", +"38eada1c": "addAddress(address)", +"38eaf913": "setDirectorNode(string)", +"38ec18c3": "changeAccountModifiers(address)", +"38ec6ba8": "getAddressOfName(string)", +"38ec8672": "newAvto(string)", +"38ec8736": "assertEq11(bytes11,bytes11)", +"38ecadac": "bountymanagerShare()", +"38ecdca9": "claimProduct(address,uint256)", +"38ed85b0": "_claim(address)", +"38eda0e5": "createCalcFunc()", +"38ededc9": "getNoteOwner(uint256,uint256)", +"38ee95ab": "_emitCapabilityRemoved(address,bytes4,uint8)", +"38eee93e": "scheduleCall(address,bytes,bytes,uint16,uint8,uint256[5])", +"38ef2dc0": "testSign2of3()", +"38eff6c6": "backETH(uint256)", +"38f0de1f": "_fFinish()", +"38f14845": "deleteUser(uint256)", +"38f196b2": "COR()", +"38f22b42": "viewSpecific(string,uint256)", +"38f23e18": "recoverContractBalance()", +"38f41711": "updateCapAndExchangeRate()", +"38f42d41": "GameWin(address,uint256,uint8,uint8,uint8,uint256,uint256)", +"38f46240": "StartRefund()", +"38f4b734": "getShit()", +"38f4cc7a": "QtumToken()", +"38f50b6f": "modifyAuth(bytes8,bytes8,bool)", +"38f55e59": "doVote(bytes32)", +"38f736c5": "step(uint256,bool)", +"38f77d69": "getDistributeProfitsInfo()", +"38f817c5": "getUsersEnginesIds()", +"38f84614": "useGoldenTicket(string)", +"38f88ee0": "tokenOwnerRemove(address)", +"38f8f3cc": "quarter1()", +"38f98d09": "getWeaponValue(uint256)", +"38fa1570": "showDevCut()", +"38fa4029": "currentStageIndex()", +"38fa8ef9": "isFundkeeper(address)", +"38fab8c5": "lifToken()", +"38fbf0b9": "destroyShares(uint256)", +"38fdba18": "doSplit()", +"38fe48b8": "batchReturnUNT(uint256)", +"38fff2d0": "getPoolId()", +"390063f0": "fundsToMSF(uint256)", +"39009094": "Cooperium()", +"39009482": "returnTuple()", +"3900f8f6": "minusFreezingTime(uint256,uint256)", +"390209c1": "getMetadata(uint128)", +"390246b2": "bid(bytes32,uint8,bool,int32)", +"3902b9fc": "getBbAddress(address)", +"3902bf72": "donate(bytes32,bytes32,bytes)", +"3902cb92": "TERATO()", +"3902d417": "resumeAirdrop()", +"39035d56": "record(address,address)", +"39048f02": "setSchellingRoundReward(uint256)", +"3904c5c1": "sweepFunds(address,uint256)", +"3904e1bf": "userBuys(uint256,address)", +"39055172": "UpgradeTokens()", +"390576d9": "Sogan()", +"3905910e": "MultiEventsHistory(address)", +"3905cab8": "drpsToken()", +"39069d8c": "setRegistryAdmin(address)", +"3906f560": "SUPPLY_LIMIT()", +"39074f59": "getDelayedBonusAmount(address)", +"390a05a8": "getParticipantBalances()", +"390b4f0c": "NaGeBi()", +"390b8482": "fillWithHashes()", +"390c0ddd": "purchaseCollectible(uint256)", +"390c3434": "nextrafflenr()", +"390c5874": "getCashbackRate(address)", +"390ce0d3": "getSellOrder(uint256)", +"390d70f5": "getTransformTarget_miner(address)", +"390e16c1": "EXTENDED_SLACK_PERIOD()", +"390e4855": "MilestoneTracker(address,address,address)", +"390eca6b": "finish(string)", +"390ff134": "isApprovedFor(address,uint256)", +"39106821": "memberId(address)", +"3910814b": "diamondAuction()", +"391193ae": "getTotalF2()", +"3911e1e1": "totalEthxCollected()", +"3912253e": "betConditions()", +"39125215": "sendMultiSig(address,uint256,bytes,uint256,uint256,bytes)", +"3912572d": "TokenCLC(uint256,string,string)", +"3912657a": "lastBlock_f11Hash_uint256()", +"3912b99f": "FOUNDERS_SHARE()", +"391363b5": "reducetime()", +"3913848e": "changeMerchantChargingAccount(uint256,address,bool)", +"3913a0fe": "getPlayerAward(address)", +"3913d6e0": "burnEnergyAttributionToken(address,uint256)", +"3913f487": "RIPAC(uint256,string,uint8,string)", +"3914010a": "getPartnerCash(uint8,bool,address,bool,uint256)", +"3915111e": "getRoundPrize(uint256)", +"39166ee9": "holding(address)", +"391687e3": "raiseTraderRegistered(address)", +"3916a402": "ShowInfoStr(string)", +"391714f8": "closeSale(bool)", +"39179ef9": "BitcoinFast()", +"3917b761": "product2_sell()", +"39181e6c": "Monthprofitstart()", +"39192fd7": "mintReserveTokens(address,uint256)", +"391b11ce": "updatePartner2_vows(string)", +"391c44b2": "addToWhiteList(address,uint256,uint256)", +"391c918e": "transferFromOwner(address,address,uint256,uint256)", +"391d2eb4": "MottoCoin()", +"391ecc2c": "_setOwners(address[])", +"391efaf2": "getEscrowFullInfo(address)", +"391f2e96": "InvestCancel()", +"391f3b2d": "_nextPotJackpot(uint256)", +"39203874": "ALpay(uint256,string,string)", +"392087fd": "changeSoftCap(uint256)", +"392114b7": "sellingAccept(bool)", +"392212c8": "EvaCash()", +"39221913": "_forwardT4T(uint256)", +"392327b5": "owner_set_fraction(uint256)", +"392338f5": "createPost(string,string)", +"39236bef": "claimGame(uint256)", +"3923afee": "allocateToEarlyContributor(address,uint256)", +"39246290": "getB2()", +"39246d75": "VersionModel()", +"3924b718": "m_tokenPrice()", +"3924f089": "getRunning()", +"392542fb": "unFreeze(bytes32)", +"39255494": "setAdminAccounts(address[3])", +"3925ad8a": "getRank07()", +"392603d3": "_getCsAddr()", +"3926384d": "setMaxWithdrawal(uint256)", +"392664e5": "GenesisAddressSale(address,address,uint256,uint256)", +"39269596": "endPrivateIco()", +"3927010d": "ownerPauseGame()", +"392752b9": "lifeFactor_iv()", +"3928bc8b": "setBoostData(uint256,address,uint256,uint256)", +"39293113": "earlyBirdCap()", +"39298633": "forceTransferFrom(address,address,uint256)", +"39298f4a": "listAssets(uint256,uint256,bool)", +"3929e43f": "proposalExpireAt(bytes32,uint256)", +"392a2cb6": "withdrawFromFailedLottery(uint32)", +"392aa4d5": "openRefund()", +"392c00a2": "mint(int256,address,uint256,bytes)", +"392c6238": "currentNiceGuyIndex()", +"392c623e": "docIndex()", +"392cb9ed": "DhaCoin(uint256,string,string)", +"392d42ae": "left38(uint256)", +"392da9b4": "fetchCancelledOrdersForMerchant(address)", +"392db91e": "genuine(address)", +"392e53cd": "isInitialized()", +"392e6678": "validCandidate(bytes32)", +"392eaafa": "HackDao()", +"392ec230": "PaymentForwarder(address,address)", +"392ec66b": "bobClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", +"392ecfa6": "buyWithTokens(bytes32)", +"392ee145": "jackPotA()", +"392f37e9": "metadata()", +"392f5f64": "roles()", +"392ffcfb": "test_twoValidAndInvalidEqAddress()", +"39300836": "fundCrowdfund()", +"3930d3dd": "minBuyETH()", +"3931845d": "registraAluno(address)", +"3931c9a8": "purchaseWithToken(uint256)", +"39332b05": "foreignBridgeErcToErcImplementation()", +"39333bbe": "tokenBankrollBuyIn()", +"39341dde": "unseatKing(address,uint256)", +"39347d52": "setMarketers(address)", +"39354244": "percentAllocationFeeNumerator()", +"3935ae8f": "POKERCOIN()", +"39363923": "invalidationBounty()", +"3936dbe4": "decimals(address,bytes32)", +"3936e99a": "releaseAssets(uint256)", +"39384126": "getCampaignValidById(bytes32)", +"3938bd78": "updatePayment(uint256,address)", +"3938faa1": "_emitErrorCode(uint256)", +"393a1955": "crowdfundingTarget()", +"393a4d34": "getStorageAddress()", +"393b011c": "setOwnerPercentage(uint256)", +"393b9b0f": "TransferPreAllocatedFunds(uint256,address,uint256)", +"393bb56e": "setApprovalStatus(address)", +"393bbbf8": "mokenName(uint256)", +"393cb7e3": "feesPerMillion()", +"393e0c63": "maxPreICOandICOSupply()", +"393e77c9": "minMonsterHit()", +"393ebbf8": "setSlashPercentage(uint256)", +"393eec7b": "setSafeToken(address)", +"393eefb8": "withdrawMyDividend()", +"393f4605": "getProviderWebsite(uint256)", +"393f7cd4": "init_dev_and_presale_allocation(address,address)", +"393fb37b": "gettruelevel(uint256,uint256)", +"39408c83": "icoFinishedDate()", +"3940e9ee": "total_supply()", +"3941456c": "frontendAddress()", +"39419d60": "grandConsolationRewards()", +"394218b1": "electNewMayor(address)", +"3942a979": "s6(bytes1)", +"39431308": "commissionPercentForCreator()", +"3943380c": "key()", +"3943807b": "insert(bytes,bytes,int256)", +"3943909e": "ScamStamp()", +"39443b8e": "canDeposit(uint256)", +"3944615c": "getCompanyAddress()", +"3944750d": "ACCEPT_EXCHANGE()", +"394479c5": "TestKeiosToken()", +"39451a88": "tokenBurn(uint256)", +"394580d2": "distributeManyTokens(address[])", +"394610cf": "tokensTotal()", +"39464884": "entryInfo(uint256)", +"3947050f": "randomTicket()", +"39478568": "isFounder()", +"39495f8e": "RealTract(uint256,string,string)", +"3949630e": "before_test_method()", +"3949b636": "doDaysFollowEachOther(uint256[])", +"394a0926": "addUnicorn(address,uint256)", +"394a3f61": "updateFollower(uint256,bool)", +"394a8698": "getTotalBondValue()", +"394b0ba9": "RetengoToken()", +"394bcb49": "updateClient(address)", +"394c21e7": "cancelOrder(address[5],uint256[6],uint256)", +"394cd121": "qryModuleDetail(string,string)", +"394d57a2": "EtherPriceUpdate(uint256)", +"394da86b": "WEECoin()", +"394dfffb": "GFCI(uint256,string,uint8,string)", +"394e0cdd": "standingOrdersByOwner(address,uint256)", +"394f4ec6": "User(bytes32,bytes32,bytes32,bytes32,bytes32)", +"394fc3a6": "MaecenasToken()", +"39500019": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256,address)", +"39500105": "egcd(int256,int256)", +"39509351": "increaseAllowance(address,uint256)", +"3950d1b2": "p1_duration()", +"3950f3a2": "disavowTokens()", +"39515e3c": "bonusOver30ETH()", +"39518b5e": "startingTime()", +"39527ed6": "withdrawTatAmount(uint256)", +"395382ee": "squareWins(uint256,uint256)", +"3953ca8b": "setPropertyRowColor(uint16,uint8,uint256)", +"3953f4a1": "setLastEditionOf(uint256,uint256)", +"3954a389": "c_MaximumFunds()", +"3954b4ee": "pricePerEther()", +"3955b070": "unhold(uint256)", +"3955b6af": "_createToken(uint256,address)", +"3955c147": "MatchmasterPrevails(address,address,uint256,uint256,uint256)", +"3955f0fe": "sellEggs()", +"3955f12e": "crowdSaleOn()", +"39564561": "isCapper(address)", +"3956e963": "Mydo()", +"39575795": "getBalances1()", +"395764ff": "OilToken(string,string,uint256)", +"3957f093": "calculateTokensAmountToSale(uint256,uint256)", +"39580054": "getOpponent()", +"3958884b": "unblock(bytes32)", +"3959b945": "getSolver(bytes32,string)", +"395a9ab3": "Success()", +"395acdeb": "lockedCounts()", +"395b6f71": "getOrderBookInfo(address)", +"395b9467": "totalSUM()", +"395c22c9": "submitNewPolicy(string,string,string,string,string,string,string,string)", +"395deefa": "RefreshDayBonus()", +"395ea0c9": "Medikia()", +"395eda08": "MINIPOOLS_LLV_FIFA_1()", +"395ede4d": "collectToken(address)", +"395eec79": "studInfo(uint256)", +"3960c001": "buy(uint32,uint16,uint32,bytes16,bytes32)", +"3960eddf": "SupeciesToken(uint256,string,uint8,string)", +"3960f787": "decrypt(uint256[])", +"39612b0e": "refundingIndex()", +"39614759": "toBase58Checked(uint256,bytes1)", +"39614e4f": "bytesToString(bytes)", +"39624847": "getNumWinners()", +"39625faf": "pokerbox()", +"3962c4ff": "TimeStart()", +"3962d9f1": "User(bytes32,bytes32,uint256)", +"3962f82d": "getTokensCount()", +"39631849": "transferOutBalance()", +"39633cee": "getCompte_39()", +"39635d13": "withdrawToTeamStep1(uint256)", +"39636504": "teamPool()", +"39637616": "setTimedCrowdsale(uint256,uint256)", +"39639fbd": "trackToken(address)", +"3963d0c1": "MonthlyPaySend(uint256,address)", +"39658245": "ChannelTimeout()", +"3965e75d": "cancelEnter(address)", +"3966291e": "StaticEthAvailables(address[])", +"396724c3": "getCCH_edit_1()", +"39673345": "EPCToken(string,string,string)", +"396773b7": "getHeader(uint256)", +"3967d46a": "updateDeposit(bytes32,address,uint256,address,uint256)", +"39681333": "get_last_global_audit_time()", +"396876bd": "mintAllowance()", +"39688256": "tokenHardCap()", +"39694f47": "totalUnClaimed()", +"396ad86f": "setpatient(uint256,uint256,string,string)", +"396bf78a": "WalchainToken()", +"396c8228": "purchase(uint16,address)", +"396d1ddf": "totalAdvisor()", +"396e70e0": "reducePlayersJadeProduction(address,uint256)", +"396ed0ab": "Burn()", +"396ff799": "setFoundersTokensWalletMaster(address)", +"3970f698": "tokenForSale()", +"39714adb": "trackHolder(address)", +"397182ef": "buyInSharePrice()", +"3971ee42": "promo(address[])", +"3971eea1": "bidReferral(uint256,uint256)", +"3972323a": "lockedBalances(uint256)", +"39737ea4": "proposalData(string,address,uint256,bytes)", +"397388af": "getAllRegisteredUsers()", +"3973e87e": "betSizeFINNEY()", +"397412cb": "setMinPrivateSaleBuy(uint256)", +"39745791": "removeWhiteList(address[])", +"3974874b": "drop(address[],uint256)", +"39754b9a": "internalContribution(address,uint256)", +"3975e32b": "RequestTest(bytes32,bytes32)", +"3976304e": "topupEnergy(uint256)", +"397656c6": "enableTuneOption(uint256)", +"3976b022": "LOG_SuccessfulSend(address,uint256,uint256)", +"3976be0b": "DCToken(uint256,string,uint8,string)", +"39774576": "isMiBoodleToken()", +"39785281": "winAmount3()", +"39785550": "withdrawAnyERC20(address,address,uint256)", +"39787fbd": "payeeArray(uint256)", +"39788bc8": "approval()", +"397895f3": "HoldChanged(address,uint256,uint256)", +"397986a1": "setUpAllowance()", +"39799e5d": "test_updateKey_missingId()", +"397a6b3d": "PrizeResultCalculated(uint256,uint256[])", +"397ab649": "Bet(address,uint256,address,uint256,uint256,uint256,address,uint256)", +"397b3378": "rewardPoolSupply()", +"397b8b17": "buyTokensForFiat(address,uint256)", +"397b90a5": "issueReserveToken(uint256)", +"397de27f": "changeServicePercent(uint256)", +"397e0287": "setIdentityExtended(bool,bool,bool)", +"397e8091": "betFeeMin()", +"397e953f": "ERC721Contract()", +"397eb91b": "closeLoanOnBehalfOf(address,address,bytes32,uint256)", +"397edab9": "ChangeOperatorAccount(address)", +"397efdbc": "CodeMailStampSale()", +"397f2a71": "getNbNamespaces()", +"397fa015": "updateCrowdsaleInfo(address,string)", +"397fe617": "CROSAIR_PRICE_THRESHOLD()", +"3980b680": "isHolidayToday()", +"3982316c": "getAllStorages()", +"3982b10d": "read_collectors_addresses()", +"3982b55d": "XCareToken(uint256,string,string)", +"3983af00": "setYearTwoMultiplier(uint256)", +"3983d5c4": "calcBaseFee(uint256)", +"398427e6": "sendByCheque(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"39846a67": "sol_clean(uint256,uint256)", +"39849771": "maxBetDivisor()", +"39849a67": "isSpaceExist(uint256)", +"3984a89b": "updateFamedStarOwner(uint256,address)", +"3984ae12": "bountiesMinted()", +"3985a4ab": "crowdsaleEndDeclarationTime()", +"398712b5": "clearTheSeason(uint32)", +"3987fcb4": "setGasForFLKD(uint256)", +"39882a2d": "setUseWhitelistFlag(bool)", +"39885b23": "finishPreSale()", +"3988bad8": "pendingRewardsOf(address)", +"39895801": "allowPublicTransfer()", +"3989c666": "setRate(uint256,uint256,uint256)", +"398ab9a7": "totalPrizePool()", +"398af892": "Jimtoken()", +"398b35b1": "setShouldBlockPublicTrade(bool)", +"398bd6b2": "Cancelled(address)", +"398c1a89": "migrateOutByPayout(uint256[],bool,uint256)", +"398c7424": "getBalanceTokenContract()", +"398d07f0": "LightLemonUnicorn()", +"398d3c37": "getAyantDroitEconomique_Compte_1()", +"398d92bb": "withdrawTokens(uint256,address)", +"398e92a5": "updatePlotPrice(uint256,uint256)", +"398eb93c": "NardoT2()", +"398f0970": "secondsInBlock()", +"398f2648": "change_max_amount(uint256)", +"39900857": "closeTournament()", +"39900dcc": "totalBuriedCapsules()", +"39901be8": "getBoosterData(uint256)", +"39903398": "test_twoFalseAsserts()", +"399075da": "RES(address,uint256,string,string,uint8)", +"39907af1": "getSecurityValue()", +"39909f0b": "withdrawFundToOwner()", +"3990b7c7": "registerGold(address,address,bytes32)", +"39918c4f": "crowdsaleAllocation()", +"3991c09d": "addMatch(uint256,uint256)", +"3992503d": "TRIPAGO()", +"39927ebe": "registerGame(address,bool)", +"3992b494": "energyContract()", +"3994789d": "onICO(address,uint256)", +"3994b883": "SoccerBet(address,address)", +"3994bce4": "SALE_CAP_USD()", +"3995943b": "FUND_FRAC_TOP()", +"39960940": "registryRequestWeight()", +"39965233": "awardPrizes(uint256)", +"3998e2a9": "EBCoin()", +"39995511": "freezeAllTransactions()", +"3999968c": "mintRefCredits(address,uint256)", +"3999bbce": "SmartBitcoin()", +"399a24b1": "invokeFallback()", +"399ae724": "init(address,uint256)", +"399c0425": "buyingPrice()", +"399c6f55": "NewStage(uint256,string,string,uint256)", +"399cd55f": "ReferralRewarded(address,address,address,uint256,uint256,uint256)", +"399d6465": "getLockAmount(address)", +"399d7bf5": "against_ban_of(address)", +"399e3ca8": "PrivateSaleFinished()", +"399e7195": "CentraAsiaWhiteList()", +"399f6248": "ContractOwnershipBurn()", +"399fa840": "removeItem(address)", +"399fd8d9": "getDiaryLength()", +"399fdb86": "testFailNormalWhitelistReset()", +"39a12c3b": "Trade(uint256,uint256,bytes32,address,address)", +"39a13fb3": "enableTokenSale()", +"39a1e9ff": "SmallProject()", +"39a1ec37": "getInvestorDatePayout(address)", +"39a248f3": "feecounter()", +"39a26069": "housePercent()", +"39a2616c": "_removeDefaultOperator(address)", +"39a2a7bd": "confirmDeposit(uint64)", +"39a2b580": "_initialDistribution()", +"39a2bc8d": "SynchroCoin(uint256,uint256,uint256,address)", +"39a2eb2a": "selectWinners(uint256)", +"39a3f168": "secondPeriodWindows()", +"39a45a5c": "createGun(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"39a5a400": "TOKEN_SOFT_CAP()", +"39a5fdda": "earlyBackerSupply()", +"39a6ea72": "getEndICO()", +"39a73978": "unpackInvestment(bytes32)", +"39a7919f": "changeSupply(uint256)", +"39a7c3d9": "onMint(address,address,uint256)", +"39a7cb16": "retrieveCurrentTokensToOwner()", +"39a87bd9": "left31(uint256)", +"39a897fc": "Builded(address,address)", +"39a89c1a": "getNumberOfCapsules()", +"39a90f7a": "IS_MAINNET()", +"39a9144b": "_isTokenDiscounted(uint256)", +"39a9e6c5": "clearRequests()", +"39aa7599": "ITDollar(uint256,string,uint8,string)", +"39aaba25": "get_status()", +"39ac2d9b": "SuperTroopersRTscore()", +"39ac3300": "EtalonTokenPresale(address,address)", +"39ac7a08": "isMember(address,address)", +"39ad0212": "purchasers(address)", +"39ad8847": "fifth_withdrawal(uint256)", +"39ade9aa": "dDeployBallot(bytes32,bytes32,bytes32,uint256)", +"39ae662c": "setFactors(uint256,uint256,uint256,string)", +"39aee3b1": "CCCoin()", +"39af0513": "backlog()", +"39af0a81": "OPENCUKUR()", +"39b09ed8": "is_owned(uint256)", +"39b0b6c2": "updatePosition(address,int256,uint256)", +"39b0bc59": "getNonce(address,uint256,bytes)", +"39b0bde9": "Constrctor()", +"39b21937": "issue(address,bytes32)", +"39b22120": "contractBurn(address,uint256)", +"39b2447e": "addCutie(uint40,uint256)", +"39b25269": "makeOrder(address,address,uint256,uint256,address,uint256)", +"39b25ad1": "XcelToken(address)", +"39b26735": "TicTokenERC20()", +"39b333d9": "Play(uint8,uint8,uint8,uint8)", +"39b35753": "authCancel(address)", +"39b37ab0": "fee(uint256)", +"39b3fba8": "setRabbitData(uint256,uint32,uint32,uint32,uint256,uint8,bytes32,bytes32)", +"39b50688": "cancelSellOrder()", +"39b55e74": "developReserveAllocation()", +"39b57835": "multWee(uint256,uint256)", +"39b5ca6d": "MintFinished(address)", +"39b61914": "DescriptionPublished(string,address)", +"39b651c6": "paymentContractAddress()", +"39b6b1e5": "cancelBid(address,uint256)", +"39b73122": "createDataset(string,uint256,string)", +"39b73771": "_b3(string,uint256)", +"39b7e62f": "GENPCoin()", +"39b80e1b": "recoverAddressFromCommonSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes)", +"39b83b68": "allowBank(string,address,bool)", +"39b860d9": "findPlayerIndex(address,uint256)", +"39b8ce98": "weiCollected()", +"39b8dc40": "sunsetWithdrawalPeriod()", +"39b8e0ff": "proposeAllocation(address,address,uint256)", +"39b8e63c": "getPI_edit_9()", +"39ba645b": "revokeKYC(address)", +"39bbaed2": "SNOOP()", +"39bc91fa": "OwnerICOsupply()", +"39bea1f0": "coindropsWallet()", +"39bef274": "setRegionCoordinates(uint256,uint256,uint256,uint256,uint256)", +"39bf03b4": "NBAOnlineLaunchPromotion()", +"39bf5462": "MANHATTANPROXYWSHWY()", +"39c09753": "setBombAddress(address)", +"39c0c415": "toB32(uint256,uint256)", +"39c0ea6e": "rateProperty(uint256)", +"39c0f29d": "laxToken()", +"39c1852d": "withdrawal_party_b_gets()", +"39c2697c": "DELIVERED_FEE_FLAG()", +"39c27bd4": "substr(string,uint256,uint256)", +"39c28e82": "SSPParametersChanged(address)", +"39c294be": "minMargin()", +"39c2f6a0": "setConfiguration(uint256,uint256,uint256,int256)", +"39c38266": "manualBuy(address,uint256)", +"39c480c9": "endDate2()", +"39c5a13e": "secondVestAmount()", +"39c5dde6": "setInitialOwners(address[],uint256[])", +"39c5f3fc": "getNetworkId()", +"39c64f1b": "setPOOL_edit_5(string)", +"39c65ca6": "updateDates(uint256,uint256,uint256,uint256)", +"39c670f0": "claimedAirdropTokens(address)", +"39c73169": "totalSupplySale1()", +"39c7967d": "vote(address,uint256,uint256,string)", +"39c79cfc": "HJHToken(uint256,uint256)", +"39c79e0c": "close(bytes32)", +"39c7a376": "LogCreate(address,uint256,uint256)", +"39c7b6fc": "getMaxSend()", +"39c98a1b": "getCarOwner(uint32)", +"39c9ffe3": "deleteTeam(bytes32)", +"39ca6e86": "registryBase()", +"39cace6d": "PradxToken()", +"39caf7bb": "makeSwap(address,uint256,bytes32)", +"39cc8a8e": "GorToken()", +"39ccdd49": "createRef(bytes32,string)", +"39cd9dba": "KiwiCoin()", +"39cdde32": "ecverify(bytes32,bytes,address)", +"39ce3983": "debatingPeriod()", +"39ce743e": "replaceCharacter(uint16,uint16)", +"39cef0b7": "issueTokensForAssets(uint256)", +"39cfc56a": "ETHERanate()", +"39d00f12": "transferTokens(uint256,address[],address)", +"39d05fdd": "cetokToken()", +"39d08c2a": "saleOngoing()", +"39d1f908": "actualBalance()", +"39d2036d": "_validateMaxSellAmount(uint256)", +"39d20a5f": "read_user(address)", +"39d216f2": "chefOwner()", +"39d26051": "getOrCacheTargetReporterGasCosts()", +"39d2be30": "setDistributedAutonomousExchange(address,address)", +"39d319e5": "unblockUser(address)", +"39d31e14": "CoroToken()", +"39d34323": "product3_sell()", +"39d396b5": "amountRemaining(bytes32[])", +"39d428ea": "AddToken(address,address,uint256,bool,uint256)", +"39d4e21a": "addToSellList(uint256,uint256,uint256)", +"39d51cc0": "get_testing_index()", +"39d66fc0": "effectiveValue(bytes4,uint256,bytes4)", +"39d8db86": "setICOPhase()", +"39d8dc9b": "BEST()", +"39dad8f5": "minusTourFreezingTime(uint256,uint256)", +"39dba209": "keysRec(uint256,uint256,uint256)", +"39dc5ef2": "depositTokens(address,address,uint256)", +"39dd134c": "advisoryPool()", +"39dd437b": "isWithinICOLimit(uint256)", +"39dea537": "registerNickname(string)", +"39df1608": "setPongAddress(address)", +"39e028ba": "AdviserTimeLock(address,address)", +"39e0c751": "setDiscountStage(uint256,uint256,uint256,uint256)", +"39e1038f": "getaddressfocuscardid()", +"39e1e859": "exchangeRateFUTX()", +"39e20523": "setWriter(address)", +"39e22509": "isCustomerHasKYC(address)", +"39e2637f": "TokenERC20(uint256,string,string,address)", +"39e301ff": "numWinnersToPay(uint32)", +"39e31ceb": "addressNotUpgradable()", +"39e33636": "EKK()", +"39e3407b": "isInFinalState()", +"39e395e2": "bidOnSynthesizingAuction(uint256,uint256)", +"39e3af9b": "isCanceled(uint256)", +"39e3ea83": "checkNotConfirmed(bytes32,uint256)", +"39e44ca4": "oraclize_network_name()", +"39e46ebe": "Quotation(uint256,string)", +"39e4dc18": "sendETH(bytes32,bytes32)", +"39e525f9": "resolveCallback(uint256)", +"39e53ca3": "updateUsersIndex(bytes32,uint256)", +"39e54c34": "_takeOffItem(uint256,uint8)", +"39e5a487": "BETSQUARE()", +"39e613d9": "mintVested(address,uint256,uint256,uint256)", +"39e65b46": "setIsRentByAtom(uint256,uint128)", +"39e7fddc": "feeAddr()", +"39e84cef": "EXT_COMPANY_STAKE_TWO()", +"39e851a3": "_isApproved(address,uint256)", +"39e899ee": "setWhiteList(address)", +"39e8bd48": "killMeshPoint(address,address,string,address)", +"39e8d1a4": "round1EndTime()", +"39e9eda1": "BackupChanged(address,address)", +"39ea68ba": "transferEntityOwnerPush(address,address)", +"39eabf7f": "bar(string,string)", +"39eb3491": "getMaximumPlayers()", +"39eb54d2": "bookExtendedVisit(uint256)", +"39eba5f9": "XXXXXXXX02(address[],uint256)", +"39ec68a3": "getRound(uint256,uint256)", +"39ecacac": "addContribution(address,uint256)", +"39ecc94f": "scamStampTokenAddress()", +"39eda73b": "jsonUpdate(string,string,string)", +"39edb660": "priceForDate(uint256)", +"39ede2b1": "SubmitNote(string)", +"39ef16f2": "Test2J()", +"39ef9105": "PhenixToken(uint256,string,uint8,string)", +"39efa270": "setClout(address)", +"39f05521": "withdrawVestedTokens()", +"39f165c6": "ParticipantAdded(address,uint256,uint256)", +"39f36220": "addThing(string,bytes32,string,string)", +"39f47875": "totalAmountOfWeiPaidToUsers()", +"39f4da78": "setSucessor(address)", +"39f4debc": "fillOrderAuto()", +"39f5b6b6": "fundsTreasury()", +"39f636ab": "changeRequiredSignatures(uint256)", +"39f64289": "quarter2()", +"39f64b52": "calcTokenPrice()", +"39f663ec": "isFundingFailState()", +"39f73a48": "fee2()", +"39f8e560": "setRewardAddress(address,address)", +"39f931b2": "placesSold()", +"39f95e63": "finaliseICO()", +"39fb1043": "_callRecipient(address,address,address,uint256,bytes,bytes,bool)", +"39fb435d": "initSiteSet(uint256)", +"39fc04f4": "setGftFundWallet(address,address,uint256)", +"39fc978d": "createCeleb(string,uint256,uint256[6],uint256[6])", +"39fd2003": "QPSEToken()", +"39fd615c": "complexityForBtcAddressPrefixWithLength(bytes,uint256)", +"39fdc5b7": "setExpectedStart(uint256)", +"39fded47": "Swap(address)", +"39fdf2fd": "OVERALLSOLD()", +"39ff8ff9": "CreatedBallot(address,uint256,uint256,bytes32)", +"39ffb234": "createContractScientist(string)", +"39ffd774": "getNamelessTouches()", +"39ffe67c": "withdrawOld(address)", +"3a000f23": "preallocate()", +"3a0046a3": "preIcoTokenHolders(address)", +"3a015ef9": "transferpoints(address,uint256)", +"3a01e53a": "getActivity(uint16)", +"3a02263c": "newController()", +"3a024d1c": "withdrawRewardedTokens(address,uint256)", +"3a027b26": "countDownToEndCrowdsale()", +"3a02a2cc": "addValidated(address)", +"3a03171c": "HARD_CAP()", +"3a031bf0": "getIsLocalOperator(address,address)", +"3a035edf": "sendWinnerPriceToAll(uint256,uint8)", +"3a03ce87": "lockBatch(address[],uint256[],uint256[],uint256[])", +"3a051334": "adjustMOTFeeDiscount(uint256)", +"3a05369f": "getMax(uint32[])", +"3a060bc9": "isOnLent(uint256)", +"3a062acd": "LogEscrow(uint256)", +"3a067e64": "transferJackpot(address)", +"3a079bda": "AmethystCoin()", +"3a07e78a": "icoIsFinishedDate()", +"3a080e93": "rebondFromUnbonded(address,uint256)", +"3a089d17": "addressLength(address)", +"3a0936ce": "contributeMsgValue(uint256[])", +"3a0a377b": "new_id()", +"3a0aec6c": "distributeDEXT(address[],uint256,uint256)", +"3a0d6350": "batchTransfer()", +"3a0d649a": "fundsToBank()", +"3a0e0418": "Prepare()", +"3a0e2475": "etherDonation(bool)", +"3a0f12dc": "grantTokensByShare(address,uint256,uint256)", +"3a0f5500": "lastBlock_a6Hash_uint256()", +"3a1053a1": "TokenBlockPay()", +"3a10a614": "get_hidden_layers(uint256[])", +"3a11aa20": "mutiSendETHWithSameValue(address[],uint256)", +"3a11b6cf": "AnotherParticipant(address,uint256,uint256)", +"3a122e65": "SPECTRUM()", +"3a12e933": "startPublicSale(uint256,uint256)", +"3a134c00": "isFreeTransferAllowed()", +"3a1460ac": "mint(address[16],address,uint256)", +"3a14bf4c": "binomial(uint256,uint256)", +"3a15021a": "confirmAndForwardOnBehalf(address,uint256,bytes,bytes32,uint256[2],uint8[2],bytes32[2],bytes32[2])", +"3a157860": "freezeBlock()", +"3a15bbee": "changeInvestmentFee(uint16)", +"3a15e7ca": "migrateFromLegacyRepContract()", +"3a16c51e": "readyOracles()", +"3a16e81e": "determinePID(address)", +"3a16f2ef": "crowdsaleStop(bool)", +"3a1767e5": "callerAdd(address,address)", +"3a178d99": "isAvailable(uint256)", +"3a180fee": "sellQuantity()", +"3a190e60": "LeeroyPoints()", +"3a1a635e": "createNewRevision(bytes20,bytes32)", +"3a1ca19e": "get_property_layout(uint256)", +"3a1d9a7d": "secondPriceTime()", +"3a1e08e0": "setAllowedTokens(address,uint256,address[])", +"3a1e7130": "teamBonuses(uint256)", +"3a1e7430": "TestTokenERC20(uint256,string,string)", +"3a20bade": "registerIncome(address,uint256)", +"3a20e9df": "getProduct(bytes32)", +"3a21cb9d": "vestingAgent()", +"3a21ec8d": "bleachPrice()", +"3a22a593": "advisorAllocatedTime()", +"3a22a94d": "lockedTokensOf(address)", +"3a232c2d": "getCurrentBonusInPercent()", +"3a23399c": "getBidCountByToken(address)", +"3a237322": "superchain()", +"3a23a483": "approveTransferManager(address)", +"3a24d701": "doSuicide()", +"3a2524c1": "enableAllowBuy()", +"3a253cee": "removeOwnerRequest(address)", +"3a256daa": "getProposalExecutionTime(bytes32,address)", +"3a257fdc": "checkFwdAddressUpgrade()", +"3a2647cf": "addMessageToQueue(string,string,uint256)", +"3a283d7d": "templates()", +"3a289d1b": "updateEscrowGoalReached()", +"3a2960e1": "numAllocations()", +"3a29c32e": "MCBA(uint256,string,string,address)", +"3a29ff34": "tokenClaims(bytes32,address)", +"3a2a0af2": "MCSToken()", +"3a2b4cdf": "addAgree(bytes32)", +"3a2b9c37": "GxCallableByDeploymentAdmin(address)", +"3a2bc42b": "fundPrize()", +"3a2c7a37": "ICOstate()", +"3a2d8784": "getDepositMultiplier()", +"3a2f1289": "BitQuickpay()", +"3a2f6e57": "transferAnyERC20Token(address,int256)", +"3a300490": "MarkRead()", +"3a300d6b": "updateAccountAmount(uint256,uint256)", +"3a30452a": "withdrawOverflow(address)", +"3a306682": "GSContract(uint256)", +"3a30cdec": "postWalletPayment(uint256)", +"3a311b84": "SimpleNameService()", +"3a31427b": "AcceptTxTaskEvent(address,uint256)", +"3a314b24": "SendETH(address)", +"3a319eff": "NZToken()", +"3a323bdf": "internalBurn(address,uint256)", +"3a32a387": "lockAmount(bytes32,bytes32,bytes32)", +"3a333d30": "TelewaveCoin()", +"3a338256": "getarg_1()", +"3a344ab8": "DragonToken(address)", +"3a349d20": "getOpenBidsByLine(bytes32)", +"3a34f09a": "getRandom(uint8,uint8,address)", +"3a357b1d": "isCrowdSaleStateICO()", +"3a36399e": "address1()", +"3a3650cf": "eurRaised()", +"3a365403": "maxWeis()", +"3a373db7": "batchTransferToken(address,address,uint8,bytes32[])", +"3a375a92": "allowsAllowance()", +"3a377c82": "_magic(uint256)", +"3a37a917": "KHCToken()", +"3a38a08c": "verifyOperation(address,uint32)", +"3a38b90f": "fusionChibis(uint256,uint256,uint256,string,string,uint8)", +"3a393ed3": "claimReward(uint256,address,address,address,address)", +"3a3ab672": "isOnWhitelist(address)", +"3a3af53f": "getMasterNodes(address,uint256)", +"3a3b0382": "PLATFORM_FUNDING_SUPPLY()", +"3a3b955b": "enableExchange(uint256)", +"3a3bc0cb": "feeCoownerAddress()", +"3a3bdf56": "claimOwnerFee(address)", +"3a3cd062": "clientWithdraw(uint256)", +"3a3d12d4": "numberOfItemsForSale()", +"3a3d523f": "setTokenLogic(address)", +"3a3e49fe": "referalAirdropsTokensAddress()", +"3a3e8e84": "getAuthorizer(uint256)", +"3a3eaeef": "repayBorrowFresh(address,address,uint256)", +"3a3eda84": "blockNumberForVictory()", +"3a3f7279": "getProductRetailer(uint256)", +"3a3f8239": "claimOrder(uint256)", +"3a3fdf05": "remainAirdrop()", +"3a4027bb": "createWithReward(string,bool,uint256,address)", +"3a40c544": "exchangeERC20(address,address,uint256)", +"3a4148de": "setPreSalesSpecialUser(address,uint256)", +"3a4268e7": "doCall(bytes32,address)", +"3a42f7de": "changeShop(address)", +"3a447341": "SplendSale(uint128,uint128,uint128,uint128,uint256,uint256,uint128,uint128,uint128,uint128,address,address,address,address,address,address)", +"3a45268b": "LocklistAddressenable(address)", +"3a45af86": "modifyProductLimit(bytes32,uint256)", +"3a45d3ef": "setAllowanceBeforeWithdrawal(address,address,uint256)", +"3a4634e4": "changeCrytiblesAddress(address)", +"3a470b9e": "removeAccountMinter(address)", +"3a47de24": "Match()", +"3a47e629": "nCurves()", +"3a48f8c1": "removeFreelancer(address,uint256[],address)", +"3a49b95a": "getMyInvestment()", +"3a4a4233": "how()", +"3a4a921e": "revokeVested()", +"3a4ac6c7": "calculateCardHolderDividend(uint256)", +"3a4ac98a": "tokensToEth(uint256,bool)", +"3a4b3664": "ownerBurn(uint256)", +"3a4b4532": "comission()", +"3a4b5e6d": "disallowOwner()", +"3a4b66f1": "stake()", +"3a4b948f": "hardBurnSMS(address,uint256)", +"3a4bece2": "CollectFromTransaction(address,uint256)", +"3a4c11b0": "setHydroStakingMinimum(uint256)", +"3a4cb854": "BrehonContractFactory()", +"3a4cba05": "SetCustomerInfo(uint64,bytes18,bytes32,bytes11)", +"3a4dcc88": "TronToken(address,address,uint256,string,uint8,string)", +"3a4de190": "repost(bytes32)", +"3a4e3342": "rate_BTCUSD()", +"3a4f6999": "maxNumber()", +"3a4faf7f": "max64(uint64,uint64)", +"3a50083d": "getRealXaurCoined()", +"3a500ae7": "JOYToken()", +"3a501155": "crowdSaleBalance()", +"3a50ccb7": "getMilestoneBonus()", +"3a5167e9": "forwardCollectedEther()", +"3a518b95": "functionName4(bytes32)", +"3a51d246": "getBalance(string)", +"3a525983": "TotalICOSupply()", +"3a531998": "getDisputeRoundDurationSeconds()", +"3a537b0c": "deliver(address,uint256)", +"3a5381b5": "validator()", +"3a551c6d": "HarborPresale(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3a559de6": "iGniter()", +"3a55f1f1": "BitcoinBravado()", +"3a562b78": "getOwnTokens(address)", +"3a573e02": "_badgeTotalSupply()", +"3a579abc": "withdrawTokensForEtheeraTeam(uint256,address[])", +"3a57e698": "registerGuide(address)", +"3a5860c4": "ETHERCExchange()", +"3a5b2080": "updateEducation(uint256,string,uint16)", +"3a5b5bde": "encrypt(string)", +"3a5d73d1": "airdrppReward()", +"3a5dd603": "chunk2IsAdded()", +"3a5e2576": "updateOwnerPercentage(uint256)", +"3a5ec2f8": "lemonsDroppedToTheWorld()", +"3a5eefc0": "EOSpace()", +"3a5f32cd": "updatePriceFreq()", +"3a600ce7": "sendToken(address,address)", +"3a60703b": "_transfer(uint256,address,address,uint256)", +"3a6120c5": "stopThinking(uint256)", +"3a6128db": "setLLV_edit_5(string)", +"3a6157cf": "richDatabase(uint256)", +"3a61738d": "calcReward(address)", +"3a618d26": "triggerRsclearRefund()", +"3a61dbfe": "ownerAddWorkRecord(address,uint256,bytes16)", +"3a621018": "unFreezeAccounts(address[])", +"3a62244f": "activateTransfers()", +"3a629ab3": "issueToken(address,string,string,uint8,uint256)", +"3a62a9d7": "AddressRegistered(address,string)", +"3a62cd2e": "currentCapEther()", +"3a62f663": "getAllPelvic()", +"3a63d886": "resource()", +"3a645c6d": "getLastTranche()", +"3a6514c8": "OddCoin()", +"3a669dd9": "TokenVesting(address,uint256,uint256,uint256,bool)", +"3a66caef": "ColuLocalCurrency(string,string,uint8,uint256,string)", +"3a672722": "ccSupply()", +"3a674500": "finalizeApprovedContracts()", +"3a677696": "setMigrateFrom(address)", +"3a67a0f6": "disableTransfers()", +"3a689082": "withrawFee()", +"3a693759": "changeRescueAccount(address)", +"3a6991ce": "luckVegas(uint256)", +"3a699294": "Schmeckle()", +"3a69ab39": "getItemId(bytes4)", +"3a69db94": "multiDynamic(uint256[2][])", +"3a6a0474": "VisualTechnologyToken()", +"3a6a2a69": "lockAssetHolder()", +"3a6a43f4": "marketingTokenAllocation()", +"3a6a4d2e": "distributeFunds()", +"3a6ab569": "setMemberInfo(address,bytes32)", +"3a6ddf70": "sendit(address,uint256)", +"3a6e3d98": "calcCommission(uint256)", +"3a6eb318": "getMiningReward(uint256)", +"3a6f85b1": "TIER2_BONUS()", +"3a6fbacb": "currentAmountReceivedDeposit1Ether18Decimals()", +"3a6ffc92": "GetBetResult()", +"3a70491e": "incrementBattles(uint256,bool)", +"3a70eabd": "GetMinerUnclaimedICOShare(address)", +"3a7104d1": "updateFlag()", +"3a71386f": "functionName2(bytes32)", +"3a7221e0": "bestInvestorInfo()", +"3a72cd49": "preSaleFinishedProcess(uint256)", +"3a7327a3": "setAccessLevel(address,uint256)", +"3a7343ba": "setBeneficiary(address,uint256,uint256,uint256)", +"3a73b0ad": "HypeToken()", +"3a740a63": "getBonus(address)", +"3a74a767": "_setAdmin(address)", +"3a74b05b": "changeDesigner(address)", +"3a74c05b": "updateMasternode(uint256)", +"3a750183": "_commitHash(bytes32)", +"3a752c31": "HARDCAP_TOKENS_PRE_ICO()", +"3a7562ee": "addLegitRaceAddress(address)", +"3a762f73": "getRunningRazInstance(uint256)", +"3a764462": "enableTokenTransfer()", +"3a76a282": "getBlocksTillMatthew()", +"3a76abff": "_eraseNode(uint256,bytes32[],bytes32)", +"3a7749c0": "bonusRatePeriodTwo()", +"3a774b48": "register(address,uint256,uint256,uint256)", +"3a777ce0": "_C_sendToToteLiquidatorWallet()", +"3a77c91a": "setNotes(string)", +"3a789ffb": "setMinAndMaxEthersForPublicSale(uint256,uint256)", +"3a78e324": "updateIsAttached(uint256,uint256)", +"3a79311f": "Ploutos()", +"3a79a55c": "needsLotteryFinalization()", +"3a7a1ba9": "EscapeHatchCalled(uint256)", +"3a7a302c": "LogCrowdsaleStarted()", +"3a7a52d2": "HasCard(address,uint32)", +"3a7bd7b5": "isMixGen()", +"3a7befc6": "checkUserTokenBalance(address)", +"3a7c92af": "LogWeekRate(uint32,uint256)", +"3a7d22bc": "getElement(uint256)", +"3a7d280c": "login(string)", +"3a7d8df3": "ClubToken()", +"3a7e6854": "setnewPlayerFee(uint256)", +"3a7f5e2c": "LogFundsUnlocked(address,uint256,uint256)", +"3a7fb796": "mintGreen(int256,address,uint256)", +"3a80bd25": "CoinVillaTalk()", +"3a830a96": "Leimen()", +"3a8343ee": "confirmCustodianChange(bytes32)", +"3a838636": "withdrawTeam(address)", +"3a842044": "getDeviceById(uint8)", +"3a8468f7": "isToOffChainAddress(address)", +"3a84f002": "commitDispute(uint256)", +"3a8504b5": "NewSale(address,uint256,uint256,bool)", +"3a876e88": "setMDAPPSale(address)", +"3a878528": "setlvlNominalValue(string)", +"3a88594d": "isOptionPairRegistered(address,uint256,address,uint256,uint256)", +"3a8a0a5c": "prizeMoneyAsset()", +"3a8a7907": "getbetData(int8,int8,address)", +"3a8ac516": "toKiwi(uint256)", +"3a8b069e": "depositCreator()", +"3a8ba4f6": "removeResolvers(address[],bool)", +"3a8bcc91": "startPrice(uint256)", +"3a8c5065": "developer_add_Exchanges(string)", +"3a8d1eb1": "creditWinner()", +"3a8d6e5e": "viewKYCAccepted(address)", +"3a8ed5c4": "deathFactor_v()", +"3a8f1585": "createChannel(uint256,address,address)", +"3a8fdd7d": "getExchangeCost(address,address,uint256,bytes)", +"3a903dfa": "LEYBAERT()", +"3a911d30": "getAppsCount(address)", +"3a9143e6": "CCHToken(uint256,string,string)", +"3a91db97": "onNewCampaign(uint256,address)", +"3a920766": "WALLET_TEAM()", +"3a9214d2": "AsiaPropertyCoin()", +"3a9253a3": "BurnMe(address)", +"3a92a590": "YuanTaiToken(uint256,string,uint8,string)", +"3a9407ec": "abstractFunc()", +"3a94ab31": "_upgradeTo(uint256,address)", +"3a95152d": "getEvaluationCountByStudentID(uint32)", +"3a9588ba": "changeOwnerWithTokens(address)", +"3a95a332": "left57(uint256)", +"3a95a3c8": "init(uint8,uint256)", +"3a963033": "_addIndexGame(address)", +"3a96d16d": "setInitialAllocationTimelock(address,uint32)", +"3a96df81": "bbwallet()", +"3a96fdd7": "compare(string,string)", +"3a98c533": "getElementOwners(uint256[])", +"3a98ef39": "totalShares()", +"3a9c0ae7": "issueDividendReward()", +"3a9c7d3d": "maxMultiplierByAddress(address)", +"3a9c9ffc": "historyCount()", +"3a9d8be8": "moveAccountOut()", +"3a9db5a7": "_withdrawBonus(address)", +"3a9de0b8": "settleDevFund(uint256)", +"3a9e7433": "scheduleCall(bytes4,uint256,uint256,uint8)", +"3a9e9d0d": "prizeCooldowns(uint256)", +"3a9ebefd": "decrement(uint256)", +"3a9eea12": "Impressio()", +"3a9f967e": "TOKENS_SOFT_CAP()", +"3aa0145a": "getFinalAmount(uint256,uint8)", +"3aa0396a": "mintFromICO(address,uint256)", +"3aa0eafb": "registrarUsuario(bytes32,bytes32,bytes32,bytes32)", +"3aa2ad63": "_setPlayerId(uint256,uint256)", +"3aa36dd4": "GetSaleInfo_Presale(uint8)", +"3aa3f154": "TokenSale(address,address,uint256,uint256)", +"3aa3f75a": "isOpenForSale()", +"3aa435a5": "DST_TEAM()", +"3aa4868a": "computeCacheRoot(uint256,uint256,uint256[],uint256[],uint256)", +"3aa49656": "phase2MaxEtherCap()", +"3aa51e41": "vaultFunds()", +"3aa5f4f7": "changeTokenSettings(uint16,uint256,uint256)", +"3aa5fe59": "hashAddress(address)", +"3aa612b9": "FT_TEAM_FUND()", +"3aa6608e": "processOrder(uint128,uint256)", +"3aa6c4f9": "withdrawableBalanceOf(address)", +"3aa6f0ee": "getRedemptionRequest(uint256)", +"3aa718d5": "changeDeveloperCATDestinationAddress(address)", +"3aa7429c": "TestX()", +"3aa89e83": "preICOActive()", +"3aa90889": "frozenPauseTime()", +"3aa935cb": "setDonationProportion(uint256,uint256)", +"3aa9376c": "releaseTokenSaleJM(address,uint256)", +"3aa94b1d": "getCoinStats(uint256)", +"3aaa36e6": "Fees()", +"3aaa3f24": "setPhaseSold(uint256,uint256)", +"3aaa74b2": "withdrawTips()", +"3aab3306": "SmartController(address)", +"3aab47b2": "UnpackDOT(bytes)", +"3aac430c": "TAKE()", +"3aac7661": "changeMonsterNickname(uint256,string)", +"3aaec03d": "kingGladiator()", +"3aaec5c5": "addToWhiteList(address[],uint256)", +"3aaf1898": "supplement(uint256)", +"3aaf3232": "maxRoundDelay()", +"3ab1a494": "setWithdrawAddress(address)", +"3ab1b765": "MainstreetCrowdfund(uint256,uint256,uint256,uint256,uint256,address,address,address,address)", +"3ab1e703": "roundMoneyDown3SF(uint256)", +"3ab207a3": "Flash()", +"3ab2dcec": "countCows()", +"3ab337b9": "addData(uint8,string,string,string)", +"3ab3bfc1": "splitFunds(string)", +"3ab4c395": "STARTING_SQUIRREL()", +"3ab50a9c": "getVersion(string)", +"3ab55c44": "getCurrentTokenPriceICO(uint256)", +"3ab562f2": "nextTarget()", +"3ab5657d": "getSourceConstraint(uint256,uint256,uint256)", +"3ab58703": "coldStorageYears()", +"3ab64c33": "beneficiaryMultiSig()", +"3ab71189": "_detailsLength()", +"3ab81062": "GOGO()", +"3ab89b78": "testFailHitPresaleCapPreDistribute()", +"3ab8e61a": "querybalance2()", +"3ab8ee2f": "HonestisnetworkICOregulations()", +"3ab966f4": "lastTokenPriceWei()", +"3aba9e9b": "WiredToken()", +"3abbf56a": "_setHourlyValueDecayRate(uint128)", +"3abc2106": "suicideContract()", +"3abcf3e7": "checkAssetListLength()", +"3abd0136": "totalBuyers()", +"3abd3a68": "summPartnershipsAndExchanges()", +"3abd8e4e": "getother()", +"3abdad4e": "totalCascadingPercentage()", +"3abdf792": "BATTLE_POINT_DECIMALS()", +"3abe2280": "updateTemperature(uint8)", +"3abee034": "emitRLC(uint256)", +"3abf30fc": "hash(bytes32,uint256)", +"3ac07183": "setDeprecated(bytes32)", +"3ac0feac": "getApprovedProposals()", +"3ac14078": "SEEDWhitelist()", +"3ac140e8": "distributorCount()", +"3ac163a7": "RepToken(address,uint256,address)", +"3ac19acf": "GenChipLevel_General(uint256,uint256,uint256)", +"3ac256d8": "getCurrentMilestonePostponingProposalDuration()", +"3ac2f3cc": "YinchengToken(address,address)", +"3ac31e02": "icoBalance()", +"3ac39d4b": "updateDarknodeDeregisteredAt(address,uint256)", +"3ac3a2fe": "teamPrizeClaim(uint256)", +"3ac4217c": "setJackpot(address,uint256)", +"3ac46b25": "getWithdrawableAmountPES(address)", +"3ac46e6b": "Irb()", +"3ac4aeeb": "amountFunded(bytes32,string,address,address)", +"3ac5cb73": "GeometricPonzi()", +"3ac6dd9d": "createPromotionalPurchase(uint256,uint256,address,uint256)", +"3ac70266": "setType(uint256,uint256)", +"3ac7d6fe": "pendingAddress()", +"3ac7fe84": "TestUtils()", +"3ac87121": "currentWorkStagePercent()", +"3ac8858b": "setMinimalBet(uint256)", +"3ac8b026": "storeShip(uint16,uint16,uint8,uint256,bytes32)", +"3ac8ca63": "beginContrib()", +"3ac9a77a": "createGen0Auction(uint256,uint16,uint16,uint16,uint16,uint16)", +"3ac9dfa3": "AgrolotToken()", +"3aca3788": "UCCoinSaleIsOn(uint256)", +"3aca9ffd": "createNewMsgAwaitingAudit(string,uint256)", +"3acab680": "SafeMath()", +"3acacfbe": "capitalFundable()", +"3acbd9eb": "doesOwnBase(bytes32,address)", +"3acbe450": "sow(uint256)", +"3acc2712": "partialUnlockAngelsAccounts(address[])", +"3accb428": "distributionMinter()", +"3acce2b2": "addRecord(string,address,string,address)", +"3acd8b80": "initExAlice(address,uint256)", +"3acddfc1": "marker()", +"3acde419": "addSellOrder(uint256,uint256)", +"3ace049e": "allowedSenders(uint256)", +"3acf4f9f": "ownershipUnits(bytes32,address)", +"3acf597c": "globalParams()", +"3acfad2b": "toB32(uint256,address,bytes)", +"3acfc185": "moduleAddress(string)", +"3acfd909": "getOption(string)", +"3ad0486b": "Token_1()", +"3ad04d8f": "setupFundingTime(uint256,uint256)", +"3ad06d16": "upgradeTo(uint256,address)", +"3ad075ea": "maximumSellableTokens()", +"3ad0d840": "setAvailableSeats(uint256)", +"3ad10beb": "cup()", +"3ad10ef6": "devAddress()", +"3ad14af3": "add(uint32,uint32)", +"3ad15258": "getProfits()", +"3ad17019": "changeDepositStopTimeFromNow(uint256)", +"3ad17f6d": "getWinnerAndBestMinorty()", +"3ad213e0": "connectOrderUser(address,address,uint256,address)", +"3ad359cf": "setDelegateWallet(address)", +"3ad389f2": "SanJaviercoinforwe()", +"3ad49222": "getMinimumAmount(address)", +"3ad520d8": "interestArray(uint256)", +"3ad55b83": "Tyzon()", +"3ad5b3a2": "createFunding(address,uint256,uint256,uint256)", +"3ad6f8ac": "getMaxClaimableWeiAmount()", +"3ad77392": "getTiersData(uint256)", +"3ad7c15c": "setDefaultClaimPercentage(uint256)", +"3ad84c89": "TXOsaleTwo()", +"3ad9248c": "fillInvestorAccountWithBonus(address)", +"3ad9801d": "importReward(address,uint256)", +"3ad9a928": "setFeePercent(uint256,address)", +"3ad9f722": "sendPoolMoney(uint256)", +"3ada121c": "Ballot(address)", +"3adb2de7": "bet_this_spin()", +"3adb3ad5": "querySeed(uint256)", +"3adbb3a4": "mint(uint32,uint32,uint32)", +"3add5a99": "getContractCreationGas()", +"3adda69a": "doBuy()", +"3addedd3": "getCostForAttack(uint8)", +"3adf7280": "getTotalHashRate()", +"3adf96d7": "_createProxy(address)", +"3ae01f84": "USDOracle()", +"3ae033a0": "payBounties(address[],uint256[])", +"3ae0e63f": "BtradeWhiteList()", +"3ae15692": "EEFcoin(address)", +"3ae1786f": "returnTokens(uint256)", +"3ae192bd": "changeFactorySubscriptionFee(uint256)", +"3ae2119b": "selfKill()", +"3ae24412": "addAddWhitelist(address)", +"3ae25075": "_getBonusAmount(uint256,uint256)", +"3ae26afa": "getRate(bytes32,bytes)", +"3ae34403": "stage1Bonus()", +"3ae46aed": "UruguayvsPortugal()", +"3ae49204": "setWaracoinPerEther(uint256)", +"3ae4b008": "createBounty(string,address[],uint256)", +"3ae50ce7": "createPresaleUnicorns(uint256,address)", +"3ae69708": "cryptaurBackend()", +"3ae7cdfa": "fipsLegacyRegister(bytes20[],address)", +"3ae7f938": "hash(uint256,uint256,uint256,uint256)", +"3ae83bd4": "transferFreeze()", +"3ae9133d": "coupon(uint256,uint16,uint8,bytes32,bytes32)", +"3ae983a8": "OriginalMyAccessControl()", +"3ae9b510": "getLatestMajorTree(bytes32)", +"3ae9de9b": "StatusSecurity()", +"3aeac4e1": "withdrawToken(address,address)", +"3aeaccf5": "Address()", +"3aeb512c": "updateTranscoderWithFees(address,uint256,uint256)", +"3aeb6c71": "vestingPercent()", +"3aeb850a": "DaysTillUnlock()", +"3aebe2a3": "GluuTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address,uint256,address,address,address)", +"3aec4439": "NSCBurnToken()", +"3aec5458": "callEmitter(uint256)", +"3aecca37": "newManuscript(bytes32,string,address[])", +"3aecd0e3": "getTokenBalance(address)", +"3aedded5": "PUBLIC_SALES_3_RATE()", +"3aedf90a": "wei_raised()", +"3aedfb8b": "withdrawl()", +"3aee0254": "addWinner(uint256)", +"3aee69bb": "changeTeamAddress(address)", +"3aef157b": "wingsTokensReward()", +"3aef3900": "proposalContract()", +"3aefaa75": "computeHash(string)", +"3aefaeb8": "setTransferRate(uint256)", +"3af05903": "deleteApprovedWalletAddress(address)", +"3af0dbc1": "contributionsOf(address)", +"3af1e17e": "createCelebrity(string,address,address,uint256,uint256,bool,uint256[])", +"3af242fd": "_createTrainer(string,uint16,address)", +"3af2b770": "BOBOTOKEN3()", +"3af32abf": "isWhitelisted(address)", +"3af34254": "LogChangeAccountAddressForSponseeAddress(address)", +"3af39c21": "undefined()", +"3af3c72d": "changeBonusUntilDate(uint32)", +"3af3db55": "channelValidator(uint64,uint64)", +"3af3f24f": "totalCalls()", +"3af41dc2": "adminDeleteRegistry()", +"3af5b3aa": "month48Unlock()", +"3af5dbb6": "mandateInBlocks()", +"3af6486e": "testStartNewCampaign()", +"3af690c2": "claimId(bytes32,uint256)", +"3af74940": "setRemainingTokenHolder(address)", +"3af75ee1": "storeBlockWithFee(bytes,int256,bytes,int256)", +"3af76638": "deployAndSetANT(address)", +"3af7d71c": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"3af826a4": "auctionCancel(uint256)", +"3af8286f": "ContractFPC()", +"3af8470d": "Rate6()", +"3af88261": "deleteTokens(address,uint256)", +"3af8e4ab": "backupOwner()", +"3af90f35": "requiresAuction(bytes32)", +"3af91491": "convertMinimalToSignal(uint256)", +"3af923ff": "CreateRCN(address,uint256)", +"3af946d2": "testnetWithdrawn(address,uint256)", +"3af94817": "getPongvalRemote()", +"3af9e169": "setStartIcoMainICO(uint256)", +"3af9e669": "balanceOfUnderlying(address)", +"3af9f8ac": "ArrowCOin()", +"3afa476c": "unstash(uint256)", +"3afa895f": "deleteSecondaryAddress(address,address)", +"3afb01d4": "testGetProgress()", +"3afbf039": "pastTenMinutes()", +"3afc7282": "getVoting(uint256)", +"3afd4b5e": "coef()", +"3afd716f": "setVIPLibraryAddress(address)", +"3afdbd83": "Activate(bytes32,string,string)", +"3afdce53": "newCrowdSale(string,string,string,uint256)", +"3afe3a8a": "GetEntityDelegatedRevoker(bytes32,uint8)", +"3b0007eb": "MinterChanged(address,address)", +"3b0107fc": "calculatePerformanceBonus(uint256)", +"3b011b30": "getSeedForTokenId(uint256)", +"3b016d83": "getAllBonus(uint256,uint256)", +"3b01788a": "throwIfSetPresaleTokensAfterActivation()", +"3b0363fa": "summFutureInvest()", +"3b039176": "CreateEvidence(bytes32,string)", +"3b040fb8": "failedKycCount()", +"3b048123": "onlyInEmergency()", +"3b048284": "totalCoinCap()", +"3b0506f7": "getVoteByAddress(address,uint256)", +"3b05a861": "setEthDepositAddress(address,address)", +"3b05c869": "StoreTest()", +"3b066dd7": "BunkToken()", +"3b06903e": "reassignModerator(address)", +"3b06a6fc": "toggleAuthorization(address,bytes32)", +"3b0732a4": "interaddtoken(address,uint256,uint256)", +"3b078de3": "changeIsPayableEnabledForAll()", +"3b079e10": "manualTransferToken()", +"3b0819b8": "create(uint256,uint256,address,address,uint256,uint256,address,uint256,bool)", +"3b08d35e": "setAuditReportBlockNumber(uint256,uint256)", +"3b098c8c": "assertEq13(bytes13,bytes13,bytes32)", +"3b0a895d": "setUsdEthRate(uint256)", +"3b0a9555": "_callReturn(address,bytes,uint256)", +"3b0ad68a": "InitializedToken(address)", +"3b0b037a": "getPriceChange(uint256)", +"3b0c197e": "getBook()", +"3b0d2764": "SNT(address)", +"3b0da260": "revokeVesting(address)", +"3b0da3b8": "updatePolicy2(bytes32,string,uint256,uint32,string)", +"3b0f0f2f": "getReferral(address)", +"3b0f343b": "getDividendAmount(address,address)", +"3b0f3ed3": "attend(uint32,string)", +"3b1019ef": "getAdvisersConsultantsTokens()", +"3b102248": "withdrawFromBalance(address,uint256)", +"3b107682": "DualIndex()", +"3b111bf3": "EtherTwitter()", +"3b116370": "GalacticX(uint256,string,string)", +"3b11b577": "CampaignOpen(uint256)", +"3b130649": "div256_128By256(uint256,uint256,uint256)", +"3b13873c": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,uint256)", +"3b13f8a6": "setDealerCut(uint8)", +"3b143184": "Congress(uint256,uint256,int256,address)", +"3b143b51": "untrustedProposals(uint256)", +"3b14ab12": "GetAquiredAssetBalance()", +"3b15a398": "rewardContributor(address,uint256)", +"3b161361": "VoidAccount(address,address,uint256)", +"3b1663be": "changeAdvisor(address)", +"3b16c27a": "ta()", +"3b16f5f6": "releaseMultiWithStage(address[])", +"3b172a32": "bancorToken()", +"3b172fb9": "AuctusToken()", +"3b17ebb1": "adminAddWinner()", +"3b186bfc": "logFeeWindowRedeemed(address,address,uint256,uint256)", +"3b192105": "_getLastDate()", +"3b19a17d": "resetOrderIdTo(uint256)", +"3b19c868": "BookingUpdate(address,uint256,uint8,uint256)", +"3b19d67a": "dateICO()", +"3b19e84a": "getTreasury()", +"3b1a4170": "cmulpow2(uint256)", +"3b1a520d": "testSimpleBurning()", +"3b1b69f9": "Upgradable(string)", +"3b1b8ca0": "trustedClients(address)", +"3b1bebd1": "referee()", +"3b1cbad8": "getArraySize()", +"3b1cda49": "GetBaseN(uint256)", +"3b1d21a2": "getCash()", +"3b1e2542": "updateToken(uint256,address,uint8)", +"3b1ecef0": "private_getGameState()", +"3b1ede9a": "LOOMIA2_ADDR()", +"3b1ef91c": "NeyrosNetwork()", +"3b1fe51b": "changeTimestamp(address,uint256,uint256)", +"3b20c3f3": "rocketLaunch(uint256)", +"3b215823": "taxFeeBps()", +"3b22263c": "move(uint16,uint8,uint8)", +"3b2269cf": "systemAcc()", +"3b22c8e3": "resolveGameByHand(uint32,uint32)", +"3b23a5ca": "switchStatus(bool)", +"3b242439": "ratioDenominator()", +"3b24b547": "getTransactionData(uint256)", +"3b25a6b9": "processDeposits(address,uint256)", +"3b25cf37": "PintOd()", +"3b265d35": "MatchingEngine()", +"3b270710": "ico1stPrice()", +"3b278f2a": "icoPaused()", +"3b2812ad": "newWindow(uint8,uint256)", +"3b283ff9": "TransferAllowanceFor(address,bool)", +"3b29c470": "calcTokensAvailableToBuyback()", +"3b29fe55": "isSecondLockTimeEnd()", +"3b2aa8cd": "getWeaponEntity(uint256)", +"3b2b7fec": "setCompte_21(string)", +"3b2b8ce9": "setAirdropped(address)", +"3b2dbb7f": "token2Player(address,uint256)", +"3b2e5f94": "getDepositValue(address)", +"3b2f3d4d": "BitCoin(address,uint256,uint256,uint256,address,address)", +"3b2fd34d": "backProjectXOwner()", +"3b2fe781": "sendEth(address[])", +"3b304147": "draw(uint256)", +"3b305964": "accBonusTokens()", +"3b30ba59": "ZRX_TOKEN_CONTRACT()", +"3b31cbad": "ContractFunded(address,uint256,uint256)", +"3b33175b": "setWhitelistIn(address,bool)", +"3b338da0": "getActionsCount(bytes)", +"3b33fe73": "setAuctionPrice(uint256)", +"3b340ceb": "DWEToken()", +"3b343a13": "getNodeAddress(bytes)", +"3b3493d3": "lost()", +"3b355af6": "baseData()", +"3b3561ea": "PresaleCapUpdated(uint256)", +"3b356d71": "playerKiller()", +"3b3571f1": "setMinHouseClassic(uint256)", +"3b357f4e": "determineInviter(uint256,bytes32)", +"3b35cde5": "Genesis(address)", +"3b360c7f": "getInvestorsAndTheirBalances()", +"3b3672bd": "getAddressLength()", +"3b37044d": "WWWToken(uint256,string,string)", +"3b3783e7": "ETHLotteryManager()", +"3b38e7d1": "totalSupplyByAsset(bytes32,int256)", +"3b393b03": "Zorro02Token()", +"3b39becd": "isMainSaleRunning()", +"3b3a1a7a": "tokenIdPointer()", +"3b3ae670": "getBaseRandom()", +"3b3b57de": "addr(bytes32)", +"3b3c0717": "switchRecycleAllowed(bool)", +"3b3c594b": "updateOldToken(address)", +"3b3c5aed": "addSpecialRateConditions(address,uint256)", +"3b3d5b88": "completeUnlock(bytes32,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"3b3d9485": "calcRandomNumber()", +"3b3dca76": "rand()", +"3b3df3d5": "tradeIn(address,uint256)", +"3b3e672f": "transferBatch(address[],uint256[])", +"3b3fa917": "setStartTimePreIco(uint256)", +"3b3fb38b": "rebuySum(address)", +"3b404266": "getDeployAt(uint32,uint32)", +"3b4159da": "voteProposal(address,address,uint256,string,bytes)", +"3b41b5f2": "setTotalProjectEscrow(uint256)", +"3b421f9e": "greeter(bytes32)", +"3b424f09": "setPermission(address,bytes32,bool)", +"3b427b20": "changeWhitelistCornerstoneStatus(address,bool)", +"3b428c9b": "tokenForWei(uint256)", +"3b42dfad": "saleWeiLimitWithoutKYC()", +"3b434169": "setUsdPerHundredEth(uint256)", +"3b43fa0a": "DSAuth()", +"3b441344": "setOtherRich3D(address)", +"3b442edf": "deathData_a14()", +"3b44383f": "TokenERC20(uint256,string,string,uint8)", +"3b45afed": "internalTransferFrom(address,address,uint256,uint256)", +"3b462d5b": "bounty(address[],uint256[])", +"3b46321f": "setMultisendLimit(uint256)", +"3b4656a1": "removeAssociatedAddress()", +"3b4664f0": "addToResult(int256)", +"3b46a7df": "ivote(bool)", +"3b46aca3": "fetchSnapshotBlockByIndex(uint256)", +"3b4700fa": "releaseLockToken()", +"3b470582": "getOverall()", +"3b4719d0": "getJockey(uint256)", +"3b47513b": "onlyWhitelisted(bytes,address,uint256,uint256,uint256)", +"3b478fc5": "ethUsdRate()", +"3b4793fc": "sendGift(address,uint256,string)", +"3b47d37a": "RealTimeRayTracing()", +"3b47dab6": "setSaleMinter(address,uint256)", +"3b4920b8": "batchMintPresaleTokens(address[],uint256[])", +"3b495d6b": "Petcoin()", +"3b496f53": "IssueAccepted(uint256)", +"3b49a77b": "hasConfirmed(bytes,address)", +"3b49c216": "_createSchedule(address,uint256,uint256,uint256,uint256,uint256)", +"3b49f84b": "TokenD(uint256,string,uint8,string)", +"3b4a00b4": "unPauseBuy()", +"3b4a20f2": "getExternalFundsRaised(string)", +"3b4a40cc": "ManagerAdded(address)", +"3b4b7808": "returnEthReceived()", +"3b4c4b25": "setSupply(uint256)", +"3b4cb5e5": "GoldFees()", +"3b4cc7a3": "totalCompanies()", +"3b4d75d8": "withdrawRemainPrivateCoin(uint256)", +"3b4d900a": "NANO()", +"3b4dbf8b": "setSecret(uint256)", +"3b4e06e6": "getTokenAmounts(uint256)", +"3b4e8dbf": "tokenDev()", +"3b4fb68f": "LXKToken()", +"3b52147f": "LogFundsCommitted(address,address,uint256,uint256,uint256,address)", +"3b5251b7": "getPlayerVoteRewards(address,uint256)", +"3b52f2be": "winnersLength()", +"3b53f274": "LogInt(string,uint256)", +"3b540814": "transferFundWallet(address)", +"3b545d2f": "etherToSendCharity()", +"3b5535b9": "getLastWeekStake(address)", +"3b55d26f": "workDone(address)", +"3b561709": "initTransferArr(address[],uint256[],uint256[])", +"3b563137": "transferBeer(address,uint256)", +"3b574beb": "minTokensToBuy()", +"3b57aa90": "setHash(address,uint16,bytes32)", +"3b57fdff": "emitMint(address,uint256)", +"3b58524d": "setAddress(address,address)", +"3b58d5d7": "getPremiumCarSupply(uint256)", +"3b58f49a": "setMinBounty(uint256)", +"3b591ea7": "AmountToForgeTheNextBlock()", +"3b594cd0": "_delegateAssetOwnerRemoved(bytes32,address)", +"3b599b18": "ChainclubToken()", +"3b59cb24": "bulkApproveMints(uint256[])", +"3b5a3357": "transferForFinanceTeam(address,uint256)", +"3b5a938a": "kick(uint32)", +"3b5adcef": "reservedFundsCharging(address)", +"3b5ae589": "Bitcash()", +"3b5b64f4": "conversionsCount()", +"3b5c020d": "BOT_ELEMENT_4()", +"3b5dd70b": "bigBonusPercent()", +"3b5e295c": "maxmoneypercent()", +"3b5e5376": "baseComparable()", +"3b5f24eb": "percentile(uint256)", +"3b5f30db": "EKKChain()", +"3b5fdb83": "buyP3D()", +"3b615624": "getEndorsements(bytes32)", +"3b61db4c": "stopIco(address)", +"3b61f5f5": "ChangeAuctionMaster(address)", +"3b623c19": "StripperToken()", +"3b62545b": "getNBAIWallet(address)", +"3b626b83": "getWidthrawStatFor(string)", +"3b630493": "DAPPToken()", +"3b632a74": "getInterMixed()", +"3b64e77e": "enableCrowdsaleRefund()", +"3b653755": "seedMarket(uint256)", +"3b663195": "init(bytes32)", +"3b664dc7": "addRoleForUser(address,string)", +"3b666e48": "getCurHash()", +"3b668059": "ContractBalance()", +"3b66c415": "EmergencyWithdrawalFailed(address)", +"3b66d02b": "tokenFallback(address,uint256)", +"3b68f8aa": "deleteDonator(address)", +"3b69eed4": "updatePlanetName(uint256,uint256,uint256,string)", +"3b6b639c": "luckyStoneEarning()", +"3b6b9a5e": "fuckingkill()", +"3b6c35c3": "MubsToken()", +"3b6c6c72": "SALE_MIN_CAP()", +"3b6cbaeb": "OverseasReturneesToken()", +"3b6ccee7": "switchMinting()", +"3b6d05c7": "mdtTeamAddress()", +"3b6d2544": "Found(uint8)", +"3b6dde13": "getRandomNumber(address)", +"3b6e2970": "ContractStakeToken(address)", +"3b6e31bb": "isAllowedToUpdateProxy(address)", +"3b6e750f": "isAcceptedToken(address)", +"3b6e8ec3": "doProvideMemoryAccesses(uint256,bytes32,uint256[],uint256[])", +"3b6ea083": "startTimeIco()", +"3b6ed0a7": "processSteps(uint256,uint256)", +"3b6ed992": "STBToken()", +"3b6eeb23": "HighestBidChanged(address,uint256)", +"3b704588": "BCT()", +"3b709e8d": "WeiN()", +"3b70b171": "saveBlock(string)", +"3b70cf44": "firstRoundCosmosEnd()", +"3b7104f2": "checkStatus()", +"3b7169fb": "setopVaultAddr(address)", +"3b72a1b6": "approveDeliverable(bytes32)", +"3b7404bc": "createDepositProxy(address)", +"3b746963": "minLimitPrivateSale()", +"3b750f86": "DDJDTCoin()", +"3b751f7f": "claimThroneRP(string)", +"3b7616ff": "fwdToResolver(bytes)", +"3b76594d": "depositFunds(uint256)", +"3b768433": "getByReferenceCode(bytes32)", +"3b77227c": "_addIndex(address)", +"3b7773cd": "WanchainContribution(address,uint256)", +"3b784e9e": "SafeOwnable()", +"3b789750": "transferAllFunds(address)", +"3b7a3b7f": "thisVotersName()", +"3b7a8ff5": "addInvestors(address[],uint256[],bool[])", +"3b7b9d83": "marketToken2021()", +"3b7bfda0": "boolStorage(bytes32)", +"3b7cbfcf": "depositPercents()", +"3b7d0946": "removePool(address)", +"3b7da659": "changeLocalCryptoContract(address,string)", +"3b7dc55e": "onMintCalled()", +"3b7e9825": "appendArray(uint8[],uint8)", +"3b7f7cfa": "getValidity()", +"3b7f9649": "localsTruth(address,uint256)", +"3b7ff404": "getVotersPartyVote()", +"3b809273": "unlockedReserveAndTeamFunds()", +"3b80938e": "setDeposit(address)", +"3b80fac0": "updateVisa(address,uint256,uint256,bytes32,uint256,uint256,uint256,uint256)", +"3b80fc5f": "elc()", +"3b81a5a4": "assertEq23(bytes23,bytes23,bytes32)", +"3b81b785": "showVotes(address)", +"3b81caf7": "TransferAdminPending(address)", +"3b825302": "deleteTokenGrant(address)", +"3b82fe0e": "sellItem(string,string,uint256,string)", +"3b84333e": "FaucetToken()", +"3b84bec7": "setTIME_TO_MAKE_TOMATOES(uint256)", +"3b84edbd": "setRNG(address)", +"3b85746f": "existsCountsByName(bytes32)", +"3b86758a": "window3TokenCreationCap()", +"3b8678de": "setDefenceBoss(uint256)", +"3b871b4a": "awards(uint256,uint256)", +"3b874521": "withdrow()", +"3b87ec2d": "ecoSystemFund()", +"3b882832": "updateIsReverted(bool)", +"3b8908f2": "investmentsCount()", +"3b8918df": "submitMilestone(bytes32)", +"3b89332e": "verify_signature(uint256[4],bytes32,uint256[2])", +"3b893c2d": "icoTotalBalance()", +"3b895f28": "stageTwo()", +"3b89a83a": "adminRefund()", +"3b89be73": "registerUser(address,string,uint256,uint256)", +"3b8a3d5e": "setPI_edit_4(string)", +"3b8b44d0": "getUnissuedBP(uint256,uint256,uint256)", +"3b8b4a61": "createRefund()", +"3b8dbf6d": "operatorSendByTranche(bytes32,address,address,uint256,bytes,bytes)", +"3b8e2a26": "weiCapReached()", +"3b8e603c": "outputb(bytes32)", +"3b8e6f2e": "balanceAt(address,uint256)", +"3b8ea9e7": "getValuePayment(address,uint256)", +"3b8ecdf9": "right3(uint256)", +"3b8eee6d": "checkDistance(uint256,uint256)", +"3b8f0ef4": "counterRequest(uint256)", +"3b8ff7be": "getBB0()", +"3b8ffa5e": "addVoters(address[],bytes32[])", +"3b90176f": "getTotalNormalTokensByAddress(address)", +"3b903521": "setModel(address,uint256)", +"3b9056bf": "userWithdraw(uint256)", +"3b9178f7": "transferEntireStake(address)", +"3b91c253": "getSkillNames(uint256,uint256)", +"3b91ceef": "setMax(uint256,uint256)", +"3b91ee26": "agency()", +"3b92015e": "setTokenDiscountThreshold(uint256)", +"3b92d384": "barrierStrength()", +"3b92f3df": "payment(address)", +"3b930294": "voteTokenBalance(address)", +"3b932584": "buyTokens(address,string,string)", +"3b9341f4": "setTransactionFeeRefundSettings(bool,uint256,uint256)", +"3b936961": "HuatUSD03()", +"3b942742": "totalCoinSupply()", +"3b947d2b": "removeStablecoin(address)", +"3b949785": "raiseDollarsWithdrawalCancelled(address,uint160,int160)", +"3b94b012": "restartMinting(string)", +"3b957b67": "getSumAmountOfDisputedStepsProDoctor()", +"3b95f23e": "deactivatePackage(uint256)", +"3b968963": "shortAirdropTime()", +"3b971f9f": "_tokenPrice()", +"3b97e856": "tokenDecimals()", +"3b9855ea": "experienceToLevel(uint256)", +"3b9901cc": "getChannelsByRanks(address,uint256,uint256)", +"3b9927df": "HVZSupply()", +"3b996f40": "quarter(uint32,uint32,uint32,uint32)", +"3b99915d": "getMarketWallet()", +"3b9aa6f8": "getRare(string)", +"3b9aaae4": "avt()", +"3b9bbb2f": "withdrawTotalBalanceCommissionWei(address)", +"3b9bd54d": "ClientsHandler()", +"3b9c0fdc": "deleteRound(uint256)", +"3b9c67e1": "Press(uint256,uint256)", +"3b9c7ac2": "claimLockedTokens()", +"3b9ca2d0": "migrate(address,uint256,address)", +"3b9e1497": "updateVirus(address)", +"3b9e9c91": "testSettle()", +"3b9ed710": "caculateFill(uint256,uint256,uint256,uint256)", +"3b9f7d6b": "m_unclaimedHolderIdx()", +"3b9f87a5": "setNeedToReserve(uint256)", +"3b9ff58e": "Academicon(uint256,uint256)", +"3ba04463": "p_setInvestorsPercent(uint256,uint256)", +"3ba0b9a9": "exchangeRate()", +"3ba1356c": "earnedOf(address)", +"3ba15036": "getWei()", +"3ba2a67e": "lockFund(uint256)", +"3ba2aaf2": "setOwnerToken(address)", +"3ba2cfc1": "createBitcoinAddressPrefixTask(bytes,uint256,uint256,int256,uint256,int256)", +"3ba308dd": "preSaleTokenBalances()", +"3ba72b88": "checkAvailability(address,address)", +"3ba7ecc0": "BuzFinancialStrategy()", +"3ba86465": "oraclizeQueryCost()", +"3ba87e3e": "setMultiRequestFirstRequestId(uint256,uint256)", +"3ba8b0a8": "setPendingSignatureStatus(address,uint256)", +"3ba8c9a7": "mintingFinish()", +"3ba8f108": "SetOwner(string,address)", +"3ba93114": "getEtherMonsterInfo(uint256)", +"3baa8170": "setName(string,uint256)", +"3baad248": "delWhitelist(address,address[])", +"3bab3088": "DOCTokenSale()", +"3baba4d7": "milestonesLength()", +"3bac2837": "SSAToken()", +"3bacf5ed": "changeTokenHolder(address,address)", +"3badca25": "batchTransfers(address[],uint256[])", +"3bae15df": "deleteOwner()", +"3bae795e": "ActionAuction(address)", +"3baf35fb": "nPayments()", +"3baf4e1e": "newPayment(uint256,uint256)", +"3baf6e3f": "setReferral(address,address,uint256)", +"3baf77aa": "increaseClaimsBalance(address,uint256)", +"3bafc5c0": "removeBankroll(uint256)", +"3bb0cc55": "tokensReceived()", +"3bb168a1": "isPresaleFull(uint256)", +"3bb197cf": "icoPhaseAmount3()", +"3bb1a882": "TradeListing(address,address,address,uint256,uint256,uint256)", +"3bb28957": "p2_start()", +"3bb2dead": "resolveAddressLight(address)", +"3bb33d56": "checkAtkPlayerQuest(address)", +"3bb3a24d": "getTokenURI(uint256)", +"3bb4218a": "requireContractExists(uint256,bool)", +"3bb4497c": "getAllProviders()", +"3bb54b4c": "LOG_ContractStopped()", +"3bb5a02c": "unsetAllowedMultivest(address)", +"3bb5d604": "ExchangeWhitelist(address,address)", +"3bb66a7b": "getETHBalance(address)", +"3bb735e7": "Arrholders(uint256)", +"3bb81b60": "total_bet_purchased()", +"3bb8a87f": "getConsideredTokens()", +"3bb8bd85": "TICDist(uint256)", +"3bb8da29": "GetWorldData()", +"3bb91c77": "calculatePayout(uint256)", +"3bb9f133": "listSimpleService(uint32,string,uint256,address,address)", +"3bba16da": "ifClaimedNow(address)", +"3bba21dc": "swapTokenToEther(address,uint256,uint256)", +"3bba340c": "dateMainEnd()", +"3bba72c3": "TzTToken()", +"3bbac579": "isBot(address)", +"3bbacb55": "STVCOIN(uint256,string,string)", +"3bbb0025": "ownerOfRobot(uint256)", +"3bbb11a1": "getImageMetadata(uint256)", +"3bbb44ca": "eth_is_seeded()", +"3bbbce82": "computeCurrentPrice(uint32)", +"3bbca7b4": "ImpToken(string,string,uint256,uint256)", +"3bbe0b5c": "OKFCrowdsale()", +"3bbed4a0": "setRecipient(address)", +"3bbf41d9": "GameState()", +"3bc0461a": "devFee(uint256)", +"3bc058c7": "setBS(bytes32,string)", +"3bc17b28": "round3TokensRemaning()", +"3bc17fc3": "CreateNewPool(address,address,uint256,uint256,uint256,bool,address[],uint256,uint256)", +"3bc19bba": "webGiftSentAmount()", +"3bc1e0f1": "depositCoin(bytes32,uint256)", +"3bc261bb": "balanceTokenContract()", +"3bc273b0": "changeWelcome(string)", +"3bc2859e": "blockOffset(uint256)", +"3bc2b866": "getBla()", +"3bc2bc42": "AddSubscriber(address,string,string)", +"3bc325ee": "withdrawTokenToInvestor()", +"3bc3c7f9": "ERC20Token(string,string,uint256,uint256)", +"3bc45598": "update_SRNT_price(uint256)", +"3bc47fbe": "campaignEnded()", +"3bc4be52": "ownersTokenIndex(address,uint256)", +"3bc518ea": "getTokenBySelf()", +"3bc578fe": "getClosingTimeByStage(uint256)", +"3bc58532": "hodler()", +"3bc5a0b7": "updateBytesSetting(uint256,bytes32,address,string,string)", +"3bc5b73e": "_saleSupply()", +"3bc5de30": "getData()", +"3bc5f48a": "addBook(string)", +"3bc6db30": "settleAndClose()", +"3bc70184": "getPurchase(uint256,uint256)", +"3bc756d0": "NACToken(uint256,string,uint8,string)", +"3bc764f7": "depositCPT(address,uint256,bytes32)", +"3bc7ebac": "pinnedCode()", +"3bc834fc": "usersAddress(address)", +"3bc867f5": "getLockedEth()", +"3bc91e28": "setCurrentRound(uint256)", +"3bc983d3": "decreaseAssuranvePayments(address,uint256)", +"3bca915f": "NickSterBate()", +"3bcb1edb": "_payoutDividends(address,address,uint256)", +"3bcbb6d8": "Zarina()", +"3bccbbbc": "phase3TokenSold()", +"3bcd6624": "approveTokensAndCall(address,uint256,uint256,bytes)", +"3bcdbd22": "TweedentityClaimer()", +"3bce14c8": "numberOfRecentPlayers()", +"3bceb170": "raisedByAddress(address)", +"3bced141": "transcodeReceiptHash(string,uint256,bytes32,bytes32,bytes)", +"3bcf7d22": "newBribedCitizen(address)", +"3bcff3b0": "getProjectCount()", +"3bd04d69": "addWhiteList(bytes32)", +"3bd099d3": "ICO_RATE()", +"3bd0a6e5": "clickButton()", +"3bd0aa47": "modifyItem(string,address,uint256,address,uint128)", +"3bd0dd47": "getBackEther()", +"3bd0f412": "changeMin(uint256)", +"3bd10bf1": "_seekOdd(uint256,uint256)", +"3bd137e0": "makerDAOMedianizer()", +"3bd13b4a": "completeBounty(address)", +"3bd3593f": "_PurchaseInsurance()", +"3bd4aab7": "_thirdLevelEth()", +"3bd575fa": "acceptTrustSC(address)", +"3bd5aceb": "nProposals()", +"3bd5c209": "getContractCreationData()", +"3bd6695e": "testCoin()", +"3bd74880": "HARDCAP()", +"3bd756b6": "addPrivateFund(address,uint256)", +"3bd794d0": "solveDispute(address,bytes32,address,bool)", +"3bd797b0": "Tasks(address,address)", +"3bd7a51a": "IfContractRegist(string,string,string,string)", +"3bd87ebd": "hardCapTime()", +"3bd89deb": "DAX()", +"3bdc5173": "disallowNorthPoleMinting()", +"3bdcaab9": "getEndpointBroker(address,bytes32,int256)", +"3bdd504a": "rateOfZNT()", +"3bde045f": "numberOfRounds()", +"3bde3072": "onAssetReceived(uint256,address,address,bytes,address,bytes)", +"3bde5ba8": "targetReached()", +"3bdebbe1": "withdrawERC20Token(address)", +"3bdf157a": "setoraclegasprice(uint256)", +"3bdf2c0c": "setBaseValue(uint256,uint256)", +"3bdfafac": "randomJackpot()", +"3bdff827": "StaticArbiter(address[])", +"3be08dab": "setAddress(address,address,address)", +"3be1212b": "approveValidDurationData(uint256)", +"3be1c410": "dev2Wallet2Pct()", +"3be1e952": "freezeTo(address,uint256,uint64)", +"3be258bb": "getBuyPriceDecimals()", +"3be272aa": "createRoom()", +"3be2b60c": "joinwithreferral(address)", +"3be31d63": "updateVerificationStatuses(address[],bool)", +"3be32f7d": "deleteAccount()", +"3be3a3f5": "setCloseTime(uint256)", +"3be3bdd9": "offTimeLock()", +"3be46378": "getAffiliate(uint256)", +"3be4ee30": "getUserTokenLocalBalance(address,address)", +"3be52c2c": "setStatusBurn(bool,bool)", +"3be546a2": "raiseDollarsAdded(address,uint160,int160)", +"3be554d4": "setCostPerDay(uint256)", +"3be59443": "_setOracle(address)", +"3be64ed7": "addPeriod(uint256,uint256,uint256)", +"3be6ccd9": "freezeWithdraw(address,uint256,uint256,bool)", +"3be746b6": "lockState(string)", +"3be75aa3": "shareLimit()", +"3be86ba1": "setIcoAgent(address,bool)", +"3be8fd6a": "setContent(string)", +"3be924fa": "hasAuth(string)", +"3be92863": "burnLotById(bytes32)", +"3be93b98": "createCountry(string,string,string,uint256)", +"3be94219": "purchaseAttack()", +"3be9cfb7": "changeDropper(address)", +"3bea92a3": "addToTipperQueue(uint256,address)", +"3bead271": "sale3(address,uint256)", +"3beb0044": "hminus(uint256,uint256)", +"3beb26c4": "setTime(uint256)", +"3beb4db1": "setIcoStage(uint256)", +"3bed33ce": "withdrawEther(uint256)", +"3bed93f2": "MAX_COLLECTORS()", +"3bee0613": "updateExchangeStatus(bool)", +"3bee8726": "getMaxContenders()", +"3beea695": "corruptElite()", +"3beedf6d": "lotteryAddress()", +"3befedea": "getPersonParents(uint256,bool)", +"3bf03e9e": "HelloWorldContract()", +"3bf11a6c": "initToken(address,address,uint256,uint256)", +"3bf12c88": "Rate1()", +"3bf13ded": "changERC20(address)", +"3bf17f75": "initializeCompanyTokens(uint256)", +"3bf2313d": "__transferToICAPWithReference(bytes32,uint256,string)", +"3bf2a861": "cancelOrder(bool,uint32)", +"3bf2b4cd": "approveDisband()", +"3bf2cade": "justPureFunction(int256)", +"3bf30f85": "execute(address[],bytes)", +"3bf329bf": "fraction(int216,int216)", +"3bf3d531": "miningThreePlat()", +"3bf47720": "totalTransfers()", +"3bf48672": "BattleToken(address)", +"3bf4ac5c": "day3Start()", +"3bf53a89": "unVoteAll()", +"3bf5b9c0": "getNumberByChoice(uint256)", +"3bf5f781": "Trendercoin()", +"3bf6de96": "max(uint256[])", +"3bf81b91": "testAddVoter()", +"3bf8f34a": "designatedReporterShowed()", +"3bf99b3f": "buyTokensByBTC(address,uint256)", +"3bf9b801": "_Hit()", +"3bfa0de9": "changeFundWallet2(address)", +"3bfa4449": "createFreeToken(string,address)", +"3bfb3246": "_detectInvestorGroup(uint256,address)", +"3bfb3c35": "fourthBonusEnds()", +"3bfca20f": "TokenToken(address)", +"3bfd7fd3": "incrementValue()", +"3bfdd7de": "transferManagment(address)", +"3bfecbf0": "setNeverdieSignerAddress(address)", +"3bfed5dc": "DolyToken2()", +"3bffb839": "Cryptolotto1Hour(address,address,address,address)", +"3bffd31e": "depositaPagamento()", +"3bfffc49": "getSumOfValues(uint256[])", +"3c0093a6": "MithrilToken()", +"3c01a9fa": "getEscapeRequests(uint32)", +"3c027d4f": "isTokenSelling(uint256)", +"3c0359a4": "certifications(uint256)", +"3c03d8be": "judgeAddress()", +"3c0471a2": "pregnantLinglongCats()", +"3c05187b": "execute(uint8,bytes32,bytes32,address,address,uint256,bytes,address,uint256)", +"3c067945": "fundBalance()", +"3c06ae68": "raiseBuyOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", +"3c070b60": "dataSourceCallbackFinals(uint256,uint8[4])", +"3c077a48": "getAll(uint256)", +"3c0870ae": "challenge(uint256,uint256,uint256,bool)", +"3c096005": "managerAmount()", +"3c09ee26": "Token(address[],uint256)", +"3c0ab650": "buyAllAmount(address,address,uint256,address,uint256)", +"3c0afb59": "changeStartDate(uint256,uint256)", +"3c0b0279": "KhawCoin(uint256,string,string)", +"3c0b1c41": "AFTBToken()", +"3c0b8577": "getUserApproval(address)", +"3c0b9db2": "PolyDistribution(uint256)", +"3c0ba651": "getDutchAuctionToBuyAddress()", +"3c0cd36b": "manualPurchaseTokens(address,uint256)", +"3c0ce567": "fetchConfirm(address,bytes32)", +"3c0cfb3d": "mintMigrationTokens(address,uint256)", +"3c0dabdb": "getMidgradeCarSupply(uint256)", +"3c0dde1c": "_addPools(address,address)", +"3c0de47c": "probabilities()", +"3c0e1cc2": "revealPhaseMinSecondsWaitForClearMajority()", +"3c0e5d74": "frozenCheck(address,address)", +"3c0e6adc": "reset_individual_shares(address)", +"3c0f60ad": "setSecondaryStorage(address)", +"3c0f92e3": "supportAddOn(uint16,uint256)", +"3c0fc6ea": "kill(address[])", +"3c0fcdd1": "depositEgereg(uint256)", +"3c1008bb": "internal_transferFrom(address,address,uint256)", +"3c107402": "LongPlace(address[2],uint256[7],uint8,bytes32[2],uint256)", +"3c10d7cd": "bonusInPhase2()", +"3c11845e": "ContractConstructor(string)", +"3c11f969": "sentSecond()", +"3c121ef5": "is_empty()", +"3c126795": "OMIVIA()", +"3c130d90": "tokenURI()", +"3c133818": "winningVote(bytes32)", +"3c13ec32": "team1LockEndTime()", +"3c13fc33": "transferBase(uint256)", +"3c1593ab": "endFirstWeek()", +"3c15d28f": "createQuestion(string,address,uint128,uint256)", +"3c1650ff": "getData_23()", +"3c16761f": "SUM()", +"3c168093": "addOrder(uint256,uint256,address,address,uint256)", +"3c173bf0": "ZarfundsToken()", +"3c17494d": "set(uint16[],string,string,string,bool)", +"3c17622a": "setFreelancerSkills(address,address,uint256[])", +"3c17b656": "investmentGateway()", +"3c1800cd": "isPresaleEnd()", +"3c1853e7": "etherBack()", +"3c18d318": "sweeperOf(address)", +"3c198047": "RollToken()", +"3c19df06": "stakeCreativeCommonsContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256)", +"3c19fc06": "Holder()", +"3c1a7c6f": "getCountApplyForCertification()", +"3c1a7e2d": "adminWithdrawBCEO(uint8)", +"3c1a7eda": "certificate(bytes32,bytes32)", +"3c1a88d7": "blockTokens(address,uint256)", +"3c1ab2a3": "URL()", +"3c1b81a5": "getInstructor()", +"3c1b87f9": "setSettings(uint256,uint64,uint64,uint256)", +"3c1c423c": "getInfoLibra(bytes32)", +"3c1c5931": "promoCodeToContractAddress(bytes16)", +"3c1cc14e": "stopTokenSwap()", +"3c1ce6a5": "mintDigm(uint256)", +"3c1d28a3": "redeemLevAndFee(address)", +"3c1d7078": "BookCreated(address)", +"3c1e60a6": "tokenParametersSet()", +"3c1f1cb7": "ethSaver()", +"3c20307b": "CTWtoken()", +"3c203d44": "PreCrowdAllocation()", +"3c2040c1": "setInviteAdmin(address)", +"3c20485e": "limitIcoTokens()", +"3c205b05": "currAdminEpoch()", +"3c206900": "disableEmergencyBlock()", +"3c2087c9": "Withdrawal(address,uint16,uint256)", +"3c20d1a5": "getStageCap(uint8)", +"3c20ee6e": "_end()", +"3c21001d": "getMySentTradeOfferId()", +"3c21acc6": "extraMintArrayPending(address[])", +"3c21b968": "loadBalances(uint256[])", +"3c21db0a": "theGames(uint256)", +"3c21f0a1": "GHIToken(address)", +"3c21fa2e": "setELHeroTokenAddr(address)", +"3c226cd9": "ChangeDeadLine(uint256,bool,uint256)", +"3c22c935": "processMilestoneFinished()", +"3c232bb6": "set_traded_token_as_seeded()", +"3c237167": "getProductivityCitizens(uint256)", +"3c240a63": "updateFourthExhangeRate(uint256)", +"3c24550c": "isRefundTime()", +"3c263cf4": "savingPoints()", +"3c264820": "getWinningPayoutNumerator(uint256)", +"3c26777b": "StartedGame(address,uint256,uint256,uint256)", +"3c2698d5": "YUNLAI()", +"3c269b96": "setExchange(bool)", +"3c26cfe3": "drawLottery(string)", +"3c275e24": "getInfo(address,uint256,uint256)", +"3c276d86": "saleStartTimestamp()", +"3c278bd5": "lift(address)", +"3c279f1f": "submitWithdrawTokenTransaction(uint256,address,uint256)", +"3c28308a": "rndNo()", +"3c287a3f": "BitcoinDiamondToken()", +"3c28b9c0": "expirationInSeconds()", +"3c28ee5b": "addDeactivatedList(address)", +"3c2aba9f": "manageApprovedTransferModule(address,bool)", +"3c2b0725": "delegateContract()", +"3c2b2508": "PREMINER_ADDED(address,address,uint256)", +"3c2c21a0": "scheduleCall(address,uint256,bytes4)", +"3c2c4b5e": "MASTER_WALLET()", +"3c2cf368": "BIGTTokenDeposit()", +"3c2d55e6": "GetSubscribers()", +"3c2d6447": "setIcoPercent(uint256)", +"3c2d70e9": "start(address,uint256)", +"3c2dba23": "stakedForPollID(address,bytes32)", +"3c2e2624": "transferManyDirect(address[],uint256)", +"3c2e2a75": "depositTokenForUser(address,uint256,address)", +"3c2e671e": "founder3Wallet()", +"3c2e6b32": "AquaSale(address,uint256,uint256,uint256,uint256,address,address,address,address,address,address,uint256)", +"3c2e7d54": "priv_inMainChain__(int256,int256)", +"3c2efb22": "isContributionRegistered(bytes32)", +"3c2f24af": "loopFor(uint256,uint256,uint256)", +"3c2f7df5": "incGen0Limit()", +"3c306250": "mybalance(address)", +"3c311f3c": "previous(uint256)", +"3c314a91": "playerGetPendingTxByAddress(address)", +"3c31762c": "setMinPurchaseValue(uint256)", +"3c31fa62": "setFeeRates(uint16,uint16,uint16)", +"3c324c2e": "totalCollectableToken()", +"3c32673f": "BTTSTokenUpdated(address,address)", +"3c329dc4": "delModule(string)", +"3c32d8ef": "getOffChainIdentity(address,address)", +"3c3313a8": "registerLoan(address)", +"3c335b0e": "getRetractable(bytes20)", +"3c33808d": "preallocateSecondStage(address,uint256,uint256)", +"3c33863c": "computeGroupPhasePoints(uint8,uint8)", +"3c33d473": "setLargeCapDelay(uint256)", +"3c345335": "addSignature(uint256)", +"3c347cbd": "_0xTestToken()", +"3c358483": "setData_10(string)", +"3c35a858": "processProcessableAllocations()", +"3c35c88a": "sendFundHome2()", +"3c37a88b": "stage4_start()", +"3c37b640": "commitHash(bytes32)", +"3c3861b6": "getRace(uint32)", +"3c389cc4": "erc20Impl()", +"3c391c95": "preSaleBonus2Time()", +"3c3a8c39": "UpcToken()", +"3c3ad016": "forceUpgrade(address[])", +"3c3b4b31": "getHouseTraits(uint256)", +"3c3b7995": "privateLimit()", +"3c3bdb7a": "changeExchange(address)", +"3c3be494": "dtCreateCityData(address,uint256,uint256)", +"3c3c22b3": "oldest()", +"3c3c88b1": "initializeOnTransfer()", +"3c3c9c23": "totalEth()", +"3c3ccc44": "startNextRound()", +"3c3ce17d": "insure()", +"3c3d1385": "tinhtong(uint256,uint256)", +"3c3d3af6": "amountInvested(address)", +"3c3d9ada": "_bctc(uint256,uint256,uint256,uint256,address)", +"3c3deb54": "contractCreatedTimestamp()", +"3c3e1662": "ctf_challenge_add_authorized_sender(address)", +"3c3e2447": "MINIMUM_BUY_AMOUNT()", +"3c3e6af4": "QTX()", +"3c3efdc9": "calculateEarnings(uint256)", +"3c3f4c63": "maxSpend()", +"3c3ff394": "IRECToken()", +"3c40066d": "investByLegalTender(address,uint256,uint256)", +"3c402bd1": "AMTBToken()", +"3c41c816": "EthlanceUser(address)", +"3c4293d8": "refund_my_ether()", +"3c42f95a": "setMetadata(string,uint256,bytes)", +"3c43b91d": "setStage2Ends(uint256)", +"3c444637": "setSaleBonus(uint256)", +"3c454d7f": "getper()", +"3c45b373": "addVoting(address,uint256)", +"3c46f604": "testDeleteCase()", +"3c473336": "isEndedTrack(bytes32)", +"3c4857a7": "_approve(uint256,address,address)", +"3c489238": "HappyFutureToken()", +"3c48d7de": "shapeshiftTransfer(uint256,string,string)", +"3c490a70": "getGlobal(uint256)", +"3c4961ff": "_processAirdrop(address,uint256)", +"3c49dde4": "registerDonation(address,uint256)", +"3c49ec88": "getMyKebabs()", +"3c49ff0c": "StarCoinPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"3c4a2989": "POPCHAINCASH()", +"3c4a4b1e": "createTokenTimelock(address,uint256)", +"3c4b07de": "extUnlockBot(uint256,uint16)", +"3c4b303d": "token_decimals()", +"3c4b40b8": "fundingWallet()", +"3c4b5e2b": "setInviteeAccumulator(address,uint256)", +"3c4c51c9": "getClue()", +"3c4dbb17": "PriceWeekOne()", +"3c4e7d9f": "setESCBDevMultisig(address)", +"3c4ec769": "VCT()", +"3c4f3c12": "issueTokensSale(address,uint256)", +"3c4f5a66": "getActivePlayers()", +"3c4f5be3": "registrantOfToken(uint256)", +"3c50afe1": "_icoSupply()", +"3c50edbd": "getSidesById(uint256,uint256)", +"3c5192b7": "EscrowEscalation(uint256,uint256)", +"3c520944": "getPromoCodeForFish(bytes16)", +"3c526ef1": "_divideDecimalRound(uint256,uint256,uint256)", +"3c530ace": "registerProducer(address)", +"3c536938": "executeTransaction(uint256,uint256)", +"3c5395b2": "revokeAdmin(address,address)", +"3c53cb96": "lastBlock_v0Hash_uint256()", +"3c53dabe": "BeggarBetting()", +"3c540687": "txCount()", +"3c54ca8c": "trade(address,address)", +"3c54caa5": "reclaimTokens()", +"3c5524d8": "listContractByModuleName(string,string)", +"3c552556": "verify_signature(bytes32,uint8,bytes32,bytes32,address,address)", +"3c55563e": "cards_metal_total()", +"3c560064": "mintPartner(address,uint256)", +"3c566f0f": "shopStoreAddress(uint256)", +"3c56d236": "HashLotto()", +"3c56e2ae": "register(address,uint8,bytes32,bytes32)", +"3c56eae3": "setForceReadyTime(uint256)", +"3c5746dd": "recipientExtraMIT(address)", +"3c580e92": "setLocalGame(uint16,address)", +"3c584d86": "convertWT(uint256)", +"3c58795d": "hasFetchedProfit(address)", +"3c58d378": "lockChanges()", +"3c58ef44": "getWishIdxesAt(address)", +"3c594844": "leftToday()", +"3c5972ff": "multiSetWhiteList(uint256[])", +"3c59c17a": "AgentWallet()", +"3c5a12cb": "getVal(string)", +"3c5ad147": "Debug(string,uint256)", +"3c5b7d3f": "buyTkn(uint256)", +"3c5bd949": "mine_jade()", +"3c5bdcc4": "FCOIN0939Token(uint256,string,string,uint256)", +"3c5c6331": "addAddressToUniqueMap(address)", +"3c5d1812": "totalPhases()", +"3c5e270f": "teamSupplyAddress()", +"3c5e28d6": "setClientIdentRejectList(address[],uint8)", +"3c5e417e": "_mintApproveClear(address,address)", +"3c5e57e4": "_getRarity(uint8)", +"3c5e94dd": "bulkRegisterPoA(bytes32,bytes32,bytes32,uint256)", +"3c5f10a3": "winning_ticket()", +"3c5f2bf2": "getFullRace(uint256)", +"3c5fc608": "preDGZtoDGZExchangeRate()", +"3c612c11": "authorize(address,address,address,uint256)", +"3c617685": "SocialMediaPay()", +"3c61d003": "advertisingDeposit(uint256)", +"3c6251bd": "test_oneValidEqUint1()", +"3c627c9b": "releaseAndDistribute()", +"3c630356": "AirCrash()", +"3c63d000": "setBurnRequestStringMap(uint256,string,string)", +"3c6403b4": "GetAccountIsNotFrozenCount()", +"3c647fbd": "angelMaxAmount()", +"3c648ddd": "voteSvp01(bool)", +"3c64f9aa": "ClusterToken()", +"3c65c506": "adjust_difficulty()", +"3c6677d6": "promoBun(address,address)", +"3c667b13": "rentalsContract()", +"3c671e53": "collectPayout(address)", +"3c673470": "createGroup(address,bytes32,address[])", +"3c673c19": "deleteTopic(uint256)", +"3c67b6b7": "getClaimLeft(address)", +"3c67c51e": "testLogs()", +"3c67dad5": "revertLuckyCoin(address)", +"3c6806b8": "getDiary(uint256)", +"3c681da0": "getCandy(string)", +"3c6867c3": "CallBack(string,bytes32)", +"3c68eb81": "transferFunds()", +"3c695d4e": "authorityAddress()", +"3c69a5e6": "mintPresaleBonuses()", +"3c6a2929": "setArrIntF2ArrUintF3ArrBoolF1(int256[],uint256[],bool[])", +"3c6a71f7": "exchangeRatePreIco()", +"3c6aa9f1": "decimalsValue()", +"3c6b97c9": "TokenContribution()", +"3c6b9d8c": "captains()", +"3c6bb436": "val()", +"3c6bc24b": "getBrickDetail(uint256)", +"3c6bf582": "ElementBought(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"3c6c67e2": "etherAllowance()", +"3c6d2610": "TalentToken(address)", +"3c6d2e19": "contributionsETH(address)", +"3c6d736d": "ZZZCoinERC20Token()", +"3c6d7b47": "setDebugNumber(uint256)", +"3c6dfba1": "buy(uint8,bytes6,uint32,uint32)", +"3c6e03d7": "thewhalegame()", +"3c6e5927": "getMonsterCurrentStats(uint64)", +"3c6ea2a5": "HooyToken()", +"3c6eab08": "KICKICOCrowdsale(address,address,address,address,address,address,address)", +"3c6ee392": "createTokens(uint256,uint256)", +"3c6f2cc4": "sendICOTokens(address,uint256)", +"3c704089": "DigitalCash()", +"3c7045fe": "takeEtherBack()", +"3c7066d1": "feeCMT(uint256)", +"3c7097a3": "setMaxCharId(uint32)", +"3c70bd42": "sell_(uint256)", +"3c716e08": "updateAuthority(address)", +"3c71b186": "ElementeumToken(uint256,address[],address[])", +"3c71b7b6": "validDelegateSignature(address,string,uint8,bytes32,bytes32,bytes32)", +"3c71faf2": "BMToken()", +"3c72751e": "lerp(uint256,uint256,uint256,uint256,uint256)", +"3c72a83e": "getKyberNetworkAddress()", +"3c72e9bf": "IMDEXadminWithdraw(address,uint256,address,uint256)", +"3c72f070": "initialTokensBalance()", +"3c73db77": "RecycleToken()", +"3c745371": "finalAddress()", +"3c745ad5": "nextProfile()", +"3c74db0f": "expirations(address)", +"3c76aa19": "CWCreturnQueryData()", +"3c771309": "setSiringRate(uint256,uint256)", +"3c774dbb": "buyChickenParkCoin(address)", +"3c775b08": "airdropLimit()", +"3c77b95c": "testExpUnroll16(int256,int256,uint256)", +"3c77e474": "_updateKeyPrice(uint256)", +"3c7818a1": "startRoundD()", +"3c78929e": "lockUntil()", +"3c78fe07": "getReceiver(uint32)", +"3c796430": "getOneTimePayment()", +"3c799547": "amountAvailable()", +"3c7a337a": "InDeepToken()", +"3c7a3aff": "commit()", +"3c7b3d90": "rewardAirdrop(address,uint256)", +"3c7b682d": "PunkOffered(uint256,uint256,address)", +"3c7b6869": "finishPresale(uint256)", +"3c7c2563": "createtoken(string,string,string,string)", +"3c7cc806": "validateOrderAuthorization_(bytes32,address,uint8,bytes32,bytes32)", +"3c7d6f30": "publicStartRegularPhase()", +"3c7e03c1": "getRelayingKing()", +"3c7e31f0": "addCutie(uint32,uint128,uint128,uint128,uint128)", +"3c7fdc70": "fibonacciNotify(uint256)", +"3c807878": "stageOne()", +"3c811ee0": "putSellOrder(address,uint256,uint256,uint256)", +"3c8161c5": "KVC(uint256,string,uint8,string)", +"3c816217": "killBoard(uint16)", +"3c81df21": "getMultisig()", +"3c8259b4": "SACoin()", +"3c837b7d": "changeSettings_only_Dev(uint256,uint256,uint8,uint8,uint256)", +"3c8394ac": "ICORaised()", +"3c83f7aa": "rateForPhase2()", +"3c842a26": "_Test_Oraclize()", +"3c847e52": "withdrawVested(address)", +"3c84f868": "set(int256,address,uint256)", +"3c8515b1": "_createCrypton(string,address,uint256,uint256,bool,uint8)", +"3c86063c": "insertInfo(string,uint256,uint256)", +"3c875a35": "buyFuel(uint256,uint256,uint256,uint256,address)", +"3c8766c6": "sendProfitsReward(address)", +"3c876c6f": "newIdShipProduct()", +"3c87b8ef": "get_player_state()", +"3c889e6f": "getBid(uint256)", +"3c889fe1": "masterCalculator(uint256)", +"3c890e4c": "getVoteStake(uint256,uint256,uint256,bool)", +"3c893718": "transferCity(address,address,uint256)", +"3c894475": "scheduleTransaction(address,bytes,uint8,uint256[6],uint256)", +"3c89f9d4": "accept(uint256,address[],uint256[])", +"3c8a072e": "temporalUnit()", +"3c8a321c": "setPaymentGatewayList(address)", +"3c8ac88e": "createIdentityWithCall(address,address,address,bytes)", +"3c8b0c55": "set_arbits_min_contribution(address,uint256)", +"3c8b6597": "addPrivateSaleTokensMulti(address[],uint256[])", +"3c8bb3e6": "wmultiply(uint256,uint256)", +"3c8bccd9": "getCommission(uint256)", +"3c8c681a": "RoundCSold()", +"3c8c6a1e": "sendToken(address,address,address,uint256)", +"3c8ca83d": "gameBeginTime()", +"3c8cd434": "getCabCoinsAmount()", +"3c8d284b": "receiveBtcPrice(uint256)", +"3c8da588": "priceInWei()", +"3c8e3b52": "getTotalPercent()", +"3c8e66fb": "calculateTotalDirectDebitAmount(uint256,uint256,uint256)", +"3c8eac87": "getTransactionState(uint256)", +"3c8f202e": "Dashicoin(uint256,string,uint8,string)", +"3c8f3278": "hmax(uint128,uint128)", +"3c8f96f1": "bonusTokens(uint256)", +"3c9046c9": "yearTwoClaimed()", +"3c9070b5": "ConsultaProva(address)", +"3c90861c": "Enigma()", +"3c90ee6a": "DNARtoGoldXchgRate()", +"3c918bae": "wallet3()", +"3c920d0d": "liquidityPoolTotal()", +"3c925f16": "getAccountHolder()", +"3c9266e0": "sendSalary(address)", +"3c9340ae": "orderForDays(bool[])", +"3c936e97": "lockBonusTokens(address,uint256,bytes1)", +"3c93d8be": "uint2hexstr(uint256)", +"3c941423": "getDesignatedCaller(bytes32,uint256)", +"3c959aca": "CheckTickets()", +"3c960be9": "transferFromSenderPaysFee(address,address,uint256,bytes)", +"3c961202": "getHighscore()", +"3c96a7a8": "withdrawOwnerFee()", +"3c96d048": "setnow(uint256)", +"3c9719a7": "getReleasableFunds(address)", +"3c984f4a": "sellTokensForEur(string,address,uint256,uint256)", +"3c993482": "_payfee()", +"3c9a4baa": "requestOutput(bytes)", +"3c9a5d59": "getAuditAuditor(uint256)", +"3c9ad41b": "tokenIssuedToday()", +"3c9af31c": "getSponsor(uint32,int256)", +"3c9c4001": "whitehat()", +"3c9c97f0": "setBlocksPerRound(uint64)", +"3c9d377d": "f5()", +"3c9d93b8": "removeAllowedAddress(address)", +"3c9ee04c": "previousstageplayer2()", +"3c9f861d": "totalBurn()", +"3c9ff012": "timeRangeCreateGen0()", +"3ca1595a": "addNewRaz(uint256,uint256,uint256,uint256,string)", +"3ca19952": "getBookingCount(address)", +"3ca22916": "dollarPerEtherRatio()", +"3ca520f5": "LaunchPartnersAmount()", +"3ca5c69c": "AllMake()", +"3ca5c8b8": "createFilmToken(string,uint256)", +"3ca6268e": "log(string,int256)", +"3ca63675": "getNumberOfVotes(uint128)", +"3ca65e77": "JMJToken()", +"3ca6a437": "assignedGameContract()", +"3ca6b228": "getEmployee(address,address)", +"3ca6c07a": "setTokenAdd(address)", +"3ca6d100": "create(string,string,uint256)", +"3ca6d5a9": "initialBuyPrice()", +"3ca7aad7": "xorReduce(uint8[],uint256)", +"3ca805ba": "pwrFloat(uint256,uint256,uint256,uint256)", +"3ca84001": "transferFromContractTo(address,uint256)", +"3ca88a2f": "canBuy(uint256)", +"3ca8b002": "isDeploymentAdmin(address)", +"3ca95c89": "getCompte_26()", +"3ca967f3": "getCurrentExchangeRate()", +"3ca96e0e": "teamBonusAllocatedTokens()", +"3cab648a": "getModuleAddressByName(string)", +"3cac14c8": "returnArray()", +"3cac2387": "trustedTokens(address)", +"3cac38e4": "advanceStep()", +"3cacf895": "doPayments()", +"3cad71cf": "RetStatic(uint128)", +"3cad7c4e": "setLockQtyToAllowTrading(uint256)", +"3cae09ac": "silencePeriod()", +"3caebce4": "BRFToken()", +"3caed876": "submitTransaction()", +"3cb00fd2": "get_presale_iconiq_arbits_per_ether(address)", +"3cb025e2": "SimpleSafeToken()", +"3cb0b51b": "Redeem200AFTK16SeptSandbox()", +"3cb21103": "isAllowedFactProvider(address,address)", +"3cb260b2": "set_dimensions(uint256,uint256)", +"3cb27169": "receiverVestings(address,address)", +"3cb32f77": "currentHolders()", +"3cb3d027": "getTokenBankrollAddressFromTier(uint8)", +"3cb3ea68": "LAMBO_TYPE()", +"3cb40e16": "withdrawToOwner()", +"3cb4986a": "ZeusToken()", +"3cb4ff3c": "getActiveCards()", +"3cb579c1": "setValueParam(uint256)", +"3cb5bc74": "setMintLimits(uint256,uint256,uint256)", +"3cb5d100": "contributors(uint256)", +"3cb5d170": "sendTokenReleasedToBalanceInternal(address,address,address)", +"3cb5d1df": "TicTacPotato()", +"3cb6465e": "numOfWinner()", +"3cb6e20c": "LeadcoinSmartToken()", +"3cb802b9": "unclaimedDividends()", +"3cb83751": "getCofounderCount()", +"3cb8cfc8": "acceptTokens(address,uint256)", +"3cb8cfcd": "totalEthInWeiForPreIco()", +"3cb9032e": "getInvoicesCount(address,uint256)", +"3cb94596": "addressOf(bytes)", +"3cb960a6": "calcCORtoETC(uint256)", +"3cba3c77": "OperationalSplit(uint256)", +"3cba41bf": "store(bytes,address)", +"3cbcf9a4": "RatingToken(address,uint256)", +"3cbd4285": "addWinnigs(address[],uint256[])", +"3cbd6429": "playerId(address)", +"3cbdfcd9": "bountyTokensToAddress(address)", +"3cbe7309": "AgriChainDistribution()", +"3cbeb49a": "setColorBlue()", +"3cbec314": "FRUT()", +"3cbf41d2": "completeCrowdsale()", +"3cbfed74": "getBondBalance()", +"3cc0be9a": "setCompte_37(string)", +"3cc0fb45": "testFailRetractNotOwner()", +"3cc12603": "ABCToken(uint256)", +"3cc136e0": "destroyRoto(address,bytes32)", +"3cc1429c": "createEthAuction(uint256,address,uint256)", +"3cc15011": "_calculateExcessTokens(uint256,uint256)", +"3cc1635c": "deleteBooleanValue(bytes32)", +"3cc228fd": "minVotes()", +"3cc26b71": "admin_active_dividend(address)", +"3cc3c3b5": "terraformReserve()", +"3cc45596": "updateCar(uint256,bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", +"3cc4c6ce": "resumeGame()", +"3cc54aae": "updateGenGuVault(uint256,uint256)", +"3cc626b6": "PotoToken()", +"3cc6441d": "Smile()", +"3cc71c3f": "COMMUNITY_ALLOWANCE_LIST()", +"3cc7508f": "uncooperativeClose(address,uint8,uint256)", +"3cc75749": "volumeType2()", +"3cc7790a": "GSI()", +"3cc7fd84": "infoTokenSilverRatio()", +"3cc8626d": "set_sellPriceEth(uint256)", +"3cc86b80": "GetMoney(uint256,address)", +"3cc86b9a": "takeAllNotClaimedForRefundMoney()", +"3cc8daf7": "setNameOwner(bytes,address)", +"3cca2420": "contractData()", +"3cca779b": "gameOpen()", +"3ccad6fc": "getNamedAddresses()", +"3ccaf593": "createReport(string,string,string,string,uint8)", +"3ccb25a2": "setRequiredBlocksElapsedForVictory(uint256)", +"3ccb47cb": "roundPot()", +"3ccb4ae4": "initLocalNodeReputation(address)", +"3ccb6c31": "setWallet2(address)", +"3ccb7dc9": "CrowdFund(uint256,uint256)", +"3ccbad50": "initialize(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"3ccc5e2c": "icoSale()", +"3ccc8193": "lastWiningTicketNumber()", +"3cccfc1b": "promotionCommisionPercent()", +"3ccd1c7f": "getFactoryProfit(uint256,address)", +"3ccdbb28": "withdrawToken(address,uint256,address)", +"3ccf127e": "raisePreSale()", +"3ccf5861": "TOSInstitutionsIncentiveContract()", +"3ccf5c8f": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256,uint256)", +"3ccfd60b": "withdraw()", +"3cd02acd": "airdropTokens(bytes32,address[],uint256,uint256)", +"3cd109cb": "addAuthorizedOwners(address)", +"3cd17060": "getProposalHash(string)", +"3cd1b6b1": "isSponsorable(address,uint256)", +"3cd1e213": "GetRecordID(address,address)", +"3cd21d88": "ClosePeriodEvent(uint256,uint256,uint256,uint256)", +"3cd260e6": "doWorkAndPayEBT()", +"3cd2df82": "calculateTokensWithoutBonus(uint256)", +"3cd35429": "DQCoin()", +"3cd36358": "_getApproved(address,uint256)", +"3cd510ee": "getWinNumbers(string,uint256,uint256)", +"3cd5d5fc": "Sacar_BlackList(address)", +"3cd5f8ea": "addCourse(address)", +"3cd78a2b": "addToSpecialRatesMapping(address,address,uint256)", +"3cd8045e": "splitter()", +"3cd99b70": "setMaxDepartureLim(uint256)", +"3cd9a0fa": "stage_2_maxcap()", +"3cda0103": "supplyOf(string)", +"3cda0b45": "contribute(bytes8)", +"3cda6524": "addUnlockedAddress(address,address)", +"3cdb01ae": "atxChangeAddrCount()", +"3cdb3aa6": "activateRefund()", +"3cdb9762": "getTokenBalance(string,address)", +"3cdb982b": "getNumeroDeOuvidorias()", +"3cdbd414": "multivestBuy(bytes32,uint8,bytes32,bytes32)", +"3cdd37e1": "WatchedWallet(address,address)", +"3cdd9262": "peMaxPerPerson()", +"3cde5627": "SendEtherToDex(uint256)", +"3cdf60e2": "TurkCoin()", +"3cdf6783": "withdrawDeferred()", +"3ce0a093": "getHash(bytes8)", +"3ce0c432": "TokenPurchased(address,address,uint256,uint256,bytes)", +"3ce123dc": "highBidder()", +"3ce1314f": "setUnlockStart(uint256)", +"3ce17f24": "_createPlayer(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"3ce1f4e7": "testFailUpdateLatestRevisionNotUpdatable()", +"3ce24239": "AddSharedAccount(bytes32,address,bytes32,bytes32,bytes32)", +"3ce276f5": "setFreezeTransfer(bool)", +"3ce32c0a": "AWAToken()", +"3ce3480a": "closeStageOne()", +"3ce39a3d": "proposeTx(address,uint256)", +"3ce54ac3": "testFailCreateWithParentParentSameItemId()", +"3ce5facd": "HeyfanToken()", +"3ce6d89b": "approveTaxData(uint256)", +"3ce70aac": "getDocumentSequence(bytes16,bytes32)", +"3ce716f9": "WalletChanged(address)", +"3ce7da3d": "setTokenSymbolName(string)", +"3ce819e2": "captcha()", +"3ce948c8": "Token_3()", +"3ce97eb9": "GetManifestoById(uint256)", +"3ce9d22e": "setupFinal(uint256)", +"3cea6965": "gasMin()", +"3ceb7783": "rankNumbers_()", +"3cebb4d7": "setOpGas(uint256,uint256,uint256)", +"3cebb823": "changeController(address)", +"3cebff9c": "airdropPool()", +"3cec21c8": "register_(uint256)", +"3cec475a": "connectTest()", +"3cec9309": "segmentSize()", +"3cecd719": "cleanup()", +"3cece78b": "__getEthPrice(uint256)", +"3cecf2e6": "exchangeRateArray(uint256)", +"3ced516c": "descriptionHashes(bytes32)", +"3ced842b": "make_offer()", +"3cedd004": "setMinimumInitialBudgetForAudits(uint256)", +"3cee32e3": "set_allow_withdraw_amount(uint256)", +"3ceeafa7": "amountOfTokensPoolA()", +"3cef162a": "allocatetokensAndWL(address,uint256)", +"3cef51c5": "maxWeiTier3()", +"3cefc1e0": "hasTokens(address)", +"3ceffd41": "TokenPurchased(address,uint256,uint256)", +"3cf0659a": "right25(uint256)", +"3cf26a33": "transferAssetOwner(address)", +"3cf274a5": "bighype()", +"3cf2eb85": "dispossess(address,uint256)", +"3cf39ed3": "ini_supply()", +"3cf3a338": "WithdrawTithes()", +"3cf3d6d8": "getAllCellInfo()", +"3cf3ecd7": "StartGuess_tw(string,string)", +"3cf3f105": "checkInvarience()", +"3cf43e08": "revertTokens(address,address)", +"3cf43e2c": "btcId()", +"3cf46fee": "RoundClose(uint256,uint256,uint8)", +"3cf5040a": "getHash(bytes32)", +"3cf5161c": "Th_stage0(uint256)", +"3cf52ffb": "proposedTimestamp()", +"3cf572a7": "setNotice(string)", +"3cf5da75": "getTokenInvocations()", +"3cf679a5": "lastBlock_v19Hash_uint256()", +"3cf682b8": "CikkaCoin()", +"3cf6ed95": "stageForDate(uint256)", +"3cf7cbdb": "showTimeLockValue(address)", +"3cf7d47b": "IncreaseInvestedWeiAmount(uint256,uint256)", +"3cf885c4": "isBitSet(uint256,uint8)", +"3cf8acec": "allocateBid5(bytes32)", +"3cf9db41": "drawWinner(uint256,uint8)", +"3cfa92de": "BAToken(address,address,uint256,uint256)", +"3cfaa9ed": "mintedWallets()", +"3cfaaca0": "DMRToken()", +"3cfac38e": "validatePrediction(bytes32,uint256,uint8)", +"3cfb35aa": "ensSubdomainRegistrarBase()", +"3cfba0e3": "ethBalances(address)", +"3cfc47ea": "getPostPoster(uint256)", +"3cfc83f5": "addGame(string,address)", +"3cfd1f80": "VirginToken()", +"3cfd78f3": "onlyBouncerAddExtension(address)", +"3cfd86f1": "CashPokerProToken()", +"3cfe25cf": "cap_ACE()", +"3cfe6731": "claimfordividend()", +"3cff5b66": "getIsAuth(address)", +"3d00b8e3": "buyTokens(uint256,uint256,bytes)", +"3d0141f6": "whatProposal(bytes32)", +"3d01bdec": "CTO()", +"3d02c85b": "rejectTokens(address,uint256)", +"3d03582f": "collectBack()", +"3d0383c2": "getthismuchethforyourspud(uint256)", +"3d03886a": "setRobotAddr(address)", +"3d03a284": "getMyBat()", +"3d03ec29": "createCoin()", +"3d05d0e6": "MintFToken()", +"3d06242a": "setVIPFee(uint256)", +"3d062adf": "deleteMember(address,address)", +"3d0673d4": "getTotalToken()", +"3d080bd9": "dateRelease3()", +"3d089bf6": "GlobalBusinessSystem(uint256,uint256,uint256,uint256,address)", +"3d092b3d": "getMatch(uint256)", +"3d0977e1": "CROWD_WEEK2_PERIOD()", +"3d0a8dab": "endExclusive()", +"3d0ab170": "feePerUnitOfCoin(uint256)", +"3d0ab7e8": "PresaleContribution(address,uint256)", +"3d0acdaa": "getReservedPercentageUnit(address)", +"3d0c3836": "emergencyERC20Drain(uint256)", +"3d0c46d0": "getMessagesCount()", +"3d0c4924": "MAXIMUM_SUPPLY()", +"3d0c7eb6": "purchaseTicket(uint256,address)", +"3d0c9cc4": "PACK_SIZE()", +"3d0e6afc": "crownFreeze(address,uint256,uint256)", +"3d0ed048": "delBlacklist(address)", +"3d0ef823": "DepositReturn(address,uint256)", +"3d0f963e": "updateWhitelist(address)", +"3d11fa43": "delUnicornContract(address)", +"3d124c9d": "PointGameParticipate(address,uint256,uint256)", +"3d125f03": "buyTokens(address,address,address,uint256)", +"3d126a45": "devTokensPercent()", +"3d126e57": "SparkChainToken()", +"3d13341c": "_bytes32(string)", +"3d13aec8": "save(address,uint256,uint256,uint256,string,string,uint256)", +"3d140d21": "approve(address,bool)", +"3d14263a": "FailedSend(address,uint256)", +"3d147789": "UpgradeCommited(address)", +"3d160de9": "pricesAreStale()", +"3d160e0b": "UNLOCK_PHASES()", +"3d1657ff": "getIncreaseBalance(uint256,uint256)", +"3d1678f4": "redeemEnableTime()", +"3d16991a": "getStep(bytes16)", +"3d17a2d8": "merchantHistory()", +"3d182c42": "private_SetPause(bool)", +"3d1843c3": "callAndFail()", +"3d18678e": "setFees(uint256)", +"3d18b912": "getReward()", +"3d18bb7f": "HP()", +"3d18c615": "LastProposalID()", +"3d18e7b5": "amIH1()", +"3d1930ac": "mintBounties(address)", +"3d19481f": "balancePreSale5()", +"3d1a653f": "Ticket_Ganador(uint256,uint256)", +"3d1aa963": "chargeFee(address,address,uint256)", +"3d1aac95": "setWalletToClientAccount(bytes32,address,bytes32)", +"3d1b9d00": "TRCToken()", +"3d1bd1bf": "totalLockedHavvens_byAvailableHavvens_limitedSum()", +"3d1ced2b": "candyuser(address,address,uint256)", +"3d1cefc4": "SurveyToken(uint256)", +"3d1d2202": "getMinersOnSale()", +"3d1d4703": "newTribe(string,string)", +"3d1e215d": "redistributeTokens(address,address)", +"3d1e40a7": "changeTimeWithoutUpdate(uint256)", +"3d1ea04a": "getUnitCoinProductionIncreases(address,address,uint256)", +"3d201fcf": "MatchEnd(uint256,string)", +"3d20d9b0": "BONUS_ICO_ROUND2()", +"3d20e09e": "lpBidPrice()", +"3d20e3d7": "SetMemberLevel(address,address,uint8)", +"3d21aa42": "sendApproval(address,uint256,address)", +"3d226146": "createEvent(bytes32,bytes32[],bytes16[],uint256[])", +"3d2271fd": "setBytesRaw(string)", +"3d228ce8": "presaleTokenCreationRate()", +"3d22d571": "userBanning(address)", +"3d235d88": "KPRToken()", +"3d23af26": "newRegistryWithToken(uint256,string,uint8,string,uint256[],string)", +"3d24081c": "randomSkinAppearance(uint256)", +"3d249031": "Multicoin()", +"3d26851a": "_transferFrom_byProxy(address,address,address,uint256)", +"3d2796f5": "Forwarder(address)", +"3d289a76": "irbg(address,uint256)", +"3d28bab2": "SetGasBuy(uint256)", +"3d28ce75": "ChooChooCoin()", +"3d28e2ac": "totalDividendPayOuts()", +"3d2a9b9b": "getPartIndexes(uint256)", +"3d2c8d18": "lastEvidenceCheck()", +"3d2ce522": "setdaily(uint256)", +"3d2d812f": "MultiTransferValues(address[],uint256[])", +"3d2d8263": "tokenFund()", +"3d2dea63": "transferAny(address,address,uint256)", +"3d2e7538": "IPv6Token()", +"3d2f5bda": "startVoting(uint256)", +"3d2fbd0a": "usdEstimateInContract()", +"3d30276b": "Presale(uint256,address)", +"3d30dbe9": "updateBonusEligibity(address)", +"3d316134": "maxTokensToSale()", +"3d31e97b": "appendDebtLedgerValue(uint256)", +"3d32cb63": "updateReputationScore(bytes32,bytes32)", +"3d330c49": "findElevenPmUtc(uint256)", +"3d34a3e7": "setStage2()", +"3d34f921": "HexelErc20Token(string,string,uint256,address)", +"3d35d7ba": "getBuyRate()", +"3d36f7dd": "assertCorrectAllocations()", +"3d37542b": "launchOutcome()", +"3d37ef8c": "RESERVED_PARTNERS_LOCKED_SIDE()", +"3d380ff3": "releaseBatch()", +"3d389faf": "buyEnable()", +"3d38abd9": "MercadoMoeda()", +"3d3984bf": "ironProcessed(address)", +"3d39c260": "managers(uint256)", +"3d3b1c02": "SendEtherToBoard(uint256)", +"3d3b1fdf": "STRAToken()", +"3d3b2056": "getReadableTime(uint256)", +"3d3b26a6": "inflate(address,uint256)", +"3d3b4738": "GXVCReplay(uint256,address)", +"3d3bc43e": "getMessageRequestHashUsingProviderAddress(address,uint256,address)", +"3d3c3f2d": "snapshotUpdate(address,uint256,string)", +"3d3c5c9f": "trustedFillOrderTransfer(address,address,uint256)", +"3d3cba10": "decrementIncome(address,uint256)", +"3d3da831": "valueAfterAddingPremium(uint256)", +"3d3db8eb": "getOutcomes()", +"3d3eb22a": "desapprove(address)", +"3d3f5114": "MEW_CROWDSALE_FUND()", +"3d405342": "fechAllCandidatesBySnapshotBlock(uint256)", +"3d40c266": "takeSellTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"3d412396": "JBXPERETH()", +"3d4197f0": "setVal(uint256)", +"3d424dc0": "ViewtBet(address)", +"3d4311e2": "getRoundCasteValues(uint256)", +"3d432808": "destroyTokens(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"3d436ea1": "getEthBullet()", +"3d438c1e": "TheHumanFund(uint256,string,uint8,string)", +"3d43bd1e": "replaceDSPRegistry(address)", +"3d44c476": "getLinkDigest(bytes32,address)", +"3d456aa5": "extendFreezeBy(uint256)", +"3d45b9ef": "TokenCLCC(uint256,string,string)", +"3d46b819": "getNonce(uint256)", +"3d472d4d": "devGiveBlockReward()", +"3d488c52": "getPackageNameOfCampaign(bytes32)", +"3d48c067": "testSmartContract(string)", +"3d48f3af": "costOfOrder(uint256,uint256)", +"3d493572": "setSoftCapReached()", +"3d49ba0f": "updateMemeUrl(uint256,string)", +"3d4a7c1e": "setStage1Ends(uint256)", +"3d4a8b4e": "ScholarToken()", +"3d4af864": "CatToken()", +"3d4b2c2c": "totalTokenBalance()", +"3d4ba37a": "setMajorityThreshold(uint256)", +"3d4d3600": "itemList(uint256)", +"3d4d8d4f": "withdrawEarnings(address)", +"3d4ee7a0": "FundariaToken()", +"3d4ef007": "vestingCount(address)", +"3d509c97": "removeRewardToken(address)", +"3d532ac5": "SWEET(uint256,string,string)", +"3d532bde": "removeSchedules(uint256,uint256[])", +"3d536a2e": "joinGame(string)", +"3d54b48a": "CreaEther()", +"3d561f73": "getBattleboard(uint16)", +"3d565121": "lockup_enddate()", +"3d568185": "createSpecialCards(uint32,uint16,uint16)", +"3d56dca3": "getBecomeHostSignatureAddress(address,string,uint8,bytes32,bytes32)", +"3d582391": "setEndsAtUTC(uint256)", +"3d584063": "getManager(address)", +"3d58650a": "BreakCoinToken()", +"3d58d0c3": "DROP()", +"3d5905a9": "setHolderAddress(address,uint256)", +"3d595134": "changeDubiAddress(address)", +"3d59995c": "remoteSetWinner(uint256,string,uint256,uint256)", +"3d59cd60": "changeRoot(bytes32)", +"3d5a3016": "canGotoState(uint8)", +"3d5aed1d": "_subGene(uint256,uint256,uint256)", +"3d5b0124": "RCR()", +"3d5b2b4e": "GxDeploymentAdmins()", +"3d5bb7f4": "setDaVinci(address)", +"3d5d0720": "totalContributedETH()", +"3d5db1c2": "incrUserOnholdBal(address,uint256,bool)", +"3d5dfb63": "_Approval(address,address)", +"3d5dff53": "tokensOwed(address)", +"3d5ef471": "nfcIdOf(uint256)", +"3d608572": "testControlCreateWithParentsSameItemId()", +"3d614def": "deployWillWallet(uint256)", +"3d619212": "basePublicPlacement()", +"3d62fa80": "getByFromAndTo(uint256,uint256,uint256)", +"3d637ebe": "tokensCreationVIPsCap()", +"3d639d84": "_getItemPrice(uint256)", +"3d64125b": "balanceof(address)", +"3d6571e5": "blub()", +"3d65a59d": "ICG()", +"3d65cf9c": "initParams(address)", +"3d65ecdf": "payToProvider(address)", +"3d662cff": "tokenDestroy()", +"3d66da8e": "claimRefund(address,address)", +"3d6759ec": "_createAsset(address,uint256,uint256,uint256,address)", +"3d677067": "buyProp(uint256,uint256,uint256)", +"3d68011a": "PRCT_TEAM()", +"3d6839c6": "REAL(address)", +"3d6859f2": "investorInfo(address,uint256)", +"3d68d33f": "BTCP()", +"3d694f30": "approveSettingCreation(uint256,bool)", +"3d695002": "_addressNotNull(address)", +"3d69b403": "isOutcomeSet(bytes)", +"3d69f4d6": "outsourceDelivery(uint256,uint256,int256,int256,int256,int256)", +"3d6a2231": "DrepToken()", +"3d6a32bd": "createTradeContract(address,uint256,uint256,uint256,bool,bool)", +"3d6a3664": "setNewOracle(address)", +"3d6a58ea": "convertSgnToSga(uint256)", +"3d6a71e4": "endedAt()", +"3d6a9750": "ShowTickets(uint256,uint256,uint256)", +"3d6ab68f": "CREATE_PERMISSIONS_ROLE()", +"3d6ad962": "claimPrizes()", +"3d6b0cb7": "testFailCreateWithParentForeignNotInUse()", +"3d6b6c70": "increaseJackpot(uint256,bytes32,address,address,uint256)", +"3d6b7301": "readAddresses(bytes32[])", +"3d6bc807": "cancelEtherBroAuction(uint256)", +"3d6bcaef": "GetWagerData(bytes32)", +"3d6c4df7": "updateWallet(address,string)", +"3d6df0d5": "docHash()", +"3d6e38b8": "changedp1(address)", +"3d6e87c1": "cancelSaleByAddress(address)", +"3d6ea8b2": "confirmMany(bytes32[],address[],uint256[],uint8[],bytes32[],bytes32[])", +"3d6eec6b": "RootNo3(uint256,string,uint8,string)", +"3d6f3366": "TokenCrowdsale()", +"3d6fc91d": "SetDestination(address,address)", +"3d6fda19": "stopIssue()", +"3d709ff1": "getRemixCount(uint256)", +"3d724027": "setLock(address[],uint256[])", +"3d725831": "getFundedTokensByIndex(bytes32,string,uint256)", +"3d72c71b": "SimpleToken()", +"3d72f40f": "getUserP3DInfo()", +"3d73c2de": "reserveCATDestination()", +"3d73ddfc": "SGNL()", +"3d7403a3": "update(string)", +"3d7417a1": "removePrMemberById(uint256,address,address)", +"3d741994": "preIcoStart()", +"3d747f67": "invalidateToken(address)", +"3d74e856": "setMinJackpotBet(uint256)", +"3d750b28": "found()", +"3d756973": "getWrapperData()", +"3d75c49e": "OEBCBank()", +"3d75e106": "ImportTestC()", +"3d7646f7": "getRok()", +"3d769e3d": "EXT_COMPANY_ONE()", +"3d76b7a3": "checkHash(uint256)", +"3d79c332": "ALU()", +"3d79d1c8": "bal()", +"3d7a8baf": "setQuoteKey(uint256)", +"3d7a8c0e": "POPKOIN()", +"3d7bed99": "addProxyForSender(address,address)", +"3d7c9f8c": "THB_Omnidollar()", +"3d7d20a4": "mintFungibles(uint256,address[],uint256[])", +"3d7d3f5a": "createSaleAuction(uint256,uint256,uint256,uint256)", +"3d7daab3": "_isValidSignatureAndData(address,bytes)", +"3d7e1048": "TransferredUnlockedTokens(address,uint256,bytes32)", +"3d7f09a3": "editEtherLimit(uint256)", +"3d7f6536": "getGraffiti(uint256)", +"3d80b532": "balance(string)", +"3d80ea28": "claimUSInvestorTokens()", +"3d813d8b": "setBountyAmounts()", +"3d814377": "window3StartTime()", +"3d820a90": "TOKEN_RATE_PRESALE()", +"3d8270f5": "getContributor(address)", +"3d82cf5a": "maxBattleRounds()", +"3d82e1b1": "assertEq3(bytes3,bytes3,bytes32)", +"3d82f71e": "distributeEGOX(address[])", +"3d832080": "ownerSetJackpotOfHouseEdge(uint16)", +"3d83230f": "auctionSuccessful(uint256,uint128,address,address)", +"3d83ed36": "increaseQuota(uint256,uint256,address)", +"3d84b8c1": "mintedForAccount(address)", +"3d856c9b": "getCmasByOwner(address)", +"3d8731ac": "LOCK_MAX()", +"3d8807f8": "cardsOfOwner(address)", +"3d888aa5": "PerformAirDrop()", +"3d88eb3f": "replOne(address,address)", +"3d8a03af": "getMatch()", +"3d8a63e4": "scam()", +"3d8b41f3": "createBurnRequest()", +"3d8c3dc9": "addTotalSupply()", +"3d8c5af4": "oddsSingle(uint256)", +"3d8c9b8c": "purchaseWolk(address)", +"3d8d020a": "withdraw(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"3d8d0db4": "totalBuyPrice(uint256,uint256)", +"3d8e0f4e": "checkRevert2(uint256)", +"3d8e1b7c": "sumICOStage6()", +"3d8e2947": "getFileAddress(bytes)", +"3d8f89d7": "setBooleanValue(string,bool)", +"3d908c82": "distributeTokensToAllUsers()", +"3d90d44d": "addPowerSource(address,uint256,uint256)", +"3d90eeb9": "getCartSubtotal(address)", +"3d91eec0": "NebbexToken(uint256,address)", +"3d922f90": "depositar()", +"3d9277f0": "unlockTip(bytes32)", +"3d9287fa": "whitelisted()", +"3d937410": "CokecoinTokenTest()", +"3d937824": "setCompte_35(string)", +"3d93a355": "InTokenTest12(uint256,string,uint8,string)", +"3d944953": "withdrawCollectedResources()", +"3d946410": "isPreSalePeriod()", +"3d946c53": "restartElection()", +"3d94e23b": "viewXCAT(address,address,bytes32)", +"3d955aa3": "poll(uint256)", +"3d956691": "tokensToSell()", +"3d957b0b": "third_bonus_amount()", +"3d960ec3": "round2Sold()", +"3d96c758": "TreeLim()", +"3d96fa3c": "getAllDelegatorAddress()", +"3d972839": "withdraw(uint16)", +"3d9aa932": "oraclize()", +"3d9ad7ce": "SENIUM()", +"3d9aeef0": "isBetStorage()", +"3d9af4d1": "setMigrateDueToNoReports(bool)", +"3d9ce89b": "scheduleCall(bytes4,bytes,uint256)", +"3d9dcb07": "getFamedStarByID(uint256)", +"3d9e23ca": "PartnersFund()", +"3d9e4233": "registerAlbum(bytes32[],bytes32[],bytes32[],bytes32[],bytes32,bytes32)", +"3d9f01fb": "renterOf(uint256)", +"3d9f923b": "updateDenomination(bytes8,address)", +"3da01325": "blockUser(address)", +"3da04e4a": "getUserGroups(address)", +"3da06d6c": "getTemporaryWinningFaction()", +"3da09d40": "Ripple()", +"3da0ac79": "compare()", +"3da1c0c3": "isVerifiedUser(address)", +"3da1eff5": "claimOwnerSupply()", +"3da1f79a": "revokeSignature(uint256)", +"3da216da": "LuckyMoneyToken(uint256,string,uint8,string)", +"3da32dc5": "FcsCoin()", +"3da368c0": "ETHcomeback820()", +"3da4ba4a": "AiboCoin(address,uint256)", +"3da55aba": "setZlotsAddress(address)", +"3da5c3ce": "puzzle(address,bytes32)", +"3da5d173": "ZeroExExchange(address,address)", +"3da611cd": "ContractEthLimitChanged(uint256,uint256)", +"3da64a06": "issueTokenToGuaranteedAddress(address,uint256,bytes)", +"3da69ff4": "Salome()", +"3da76788": "getDataLength()", +"3da79946": "allEthOUT()", +"3da80d66": "contains(address[],address)", +"3da98498": "Crowdtes()", +"3daa33d5": "buyAndSellPrice()", +"3daad222": "asmTransferFrom(address,address,address,uint256)", +"3dab45b6": "setMtdPreAmount(uint256)", +"3dabb0f6": "verifySignature(address,address,uint8,bytes32,bytes32)", +"3dac68b7": "setAddressAdv(address)", +"3daceda1": "createSyndicate(address,uint256,uint256,uint256,uint256)", +"3dad1583": "getAyes(uint256)", +"3dae94f0": "cumulativeIndexOf(uint256[],uint256)", +"3daee1b8": "weekThreeRate()", +"3daefe4b": "Election1()", +"3daf099f": "transferEthereum(uint256,address)", +"3daf31b5": "withDecimals(uint256,uint256)", +"3dafbf92": "SNPToken()", +"3db05068": "toForecastData(uint8,uint8,bool,uint8,uint8)", +"3db08826": "isProofValid(bytes32[],bytes32)", +"3db13fec": "PalletOneToken()", +"3db1c253": "projectFailed()", +"3db1f00a": "TOSMidHoldingContract()", +"3db2254b": "deleteAllReports()", +"3db2a12a": "Empty()", +"3db36b5f": "transferTokensFromTeamAddress(address,uint256)", +"3db3f2cf": "submitBid(address,bytes32)", +"3db62953": "currentExchangeSystem()", +"3db7a118": "blockDotDifficulty()", +"3db7c149": "SmartCityCrowdsale(address,address,address,uint256,uint256,uint256)", +"3db7e347": "contributorAt(uint256,uint256)", +"3db80346": "closeGroup(uint32)", +"3db8352d": "setEvaluator(uint256)", +"3db8433c": "setLeagueRosterAndCoreAndContestContractAddress(address,address,address)", +"3db8493a": "put(uint256,string,string)", +"3db9c4aa": "createIntention(address)", +"3dba0b57": "MCTTokenAddress()", +"3dba6197": "etherAccumulator()", +"3dbad089": "Contribute(address,address,uint256)", +"3dbae017": "EasyToken()", +"3dbae9f9": "startIcoTwo()", +"3dbb07ac": "s28(bytes1)", +"3dbb270d": "AshCashToken()", +"3dbb7f46": "setPrizeFundFactor(uint256)", +"3dbb874e": "getPetClaims(uint64)", +"3dbba05c": "callDefaultRelease()", +"3dbc7c69": "totalApproval(address)", +"3dbe56f0": "getUnfreezedTokens(address)", +"3dbe6469": "ChangeBuyer(address)", +"3dbedbd4": "StopICO()", +"3dc02266": "fipsRegister(uint256)", +"3dc09a70": "OwOToken()", +"3dc0d600": "nome_vincitore()", +"3dc11dd1": "ethSwapRate()", +"3dc1579a": "RELEASE_TIME()", +"3dc19db8": "addAdministator(address)", +"3dc1a6bc": "getSkillLength()", +"3dc1d46b": "auditGuess(uint256,string,uint8,uint256,uint256,uint256)", +"3dc1ef34": "limitMaxSupply()", +"3dc23486": "_addBalance(address,uint256,address)", +"3dc268a6": "oraclize_query(uint256,string,bytes[2],uint256)", +"3dc286ae": "getEncSeckey()", +"3dc37539": "reveal_test_data(int256[],int256)", +"3dc38fc1": "addCourse(uint256,uint256)", +"3dc4cac9": "Mycryptonline()", +"3dc58149": "getDepositRecord(address)", +"3dc5bf97": "acceptRegistrarTransfer(bytes32,uint256)", +"3dc60e52": "getKittyCount(address)", +"3dc6e9b0": "changeMaxLockDuration(uint256)", +"3dc7426e": "setMaximumMintableQuantity(address,uint256)", +"3dc7c549": "sumHardCapICO()", +"3dc7ea7f": "recently_added_address()", +"3dc9124e": "numOfLoadedCrowdsalePurchases()", +"3dcb0b81": "PollManagedFund(address,address,address,address,address,address,address,address[])", +"3dcb66db": "Storer()", +"3dcbab40": "UnFrozenFunds(address,uint256)", +"3dcbf7eb": "addAddressToAccountFor(address,bytes,bytes,address,bytes32)", +"3dcd351f": "getAllReceipt()", +"3dcd6176": "returnTokenBalance(address[2],bytes32)", +"3dce1ea9": "curPayoutId()", +"3dced193": "getPI_edit_33()", +"3dcf59ca": "initiateMigration(address,address)", +"3dcfbdd0": "getBrickAddress()", +"3dd00c42": "getMyMinersAt(uint32,uint32)", +"3dd02f06": "setCoinStorage(address,address)", +"3dd16673": "teamETHAddress()", +"3dd287d4": "monsterNFTContract()", +"3dd297da": "safeMultiply(uint256,uint256)", +"3dd2b811": "CSNO()", +"3dd2e0f0": "optionTotalTimes()", +"3dd35279": "memberIndex(address)", +"3dd49939": "ext(address)", +"3dd5b2da": "withdrawContractETH()", +"3dd5e0ec": "NewSouth21Token()", +"3dd7609a": "ETHER_AMOUNT()", +"3dd7b14b": "optionPoolBalance()", +"3dd7c1b9": "newProduct(string,string,uint256,uint256)", +"3dd82637": "Transformers()", +"3dd83fe1": "newPlayer(address,uint256,uint256)", +"3dd86478": "isFromState(address,address,uint256)", +"3dd93a8a": "getUsersGeneratorsIds()", +"3dd95d1b": "setExecutionDailyLimit(uint256)", +"3dda1aff": "Football()", +"3dda37dc": "flags(address,address)", +"3dda7b1d": "fuddToken()", +"3ddac459": "changeminpresale(uint256)", +"3ddb77bd": "_distDay()", +"3ddc3277": "charityFoundationIdx()", +"3ddc8e9c": "fixedLoge(uint256,uint8)", +"3ddcbace": "Escrow(address,address,address)", +"3ddd4698": "registerNameXaddr(string,address,bool)", +"3ddd5313": "acceptPayments()", +"3dde1598": "redeemBattleCrates()", +"3dde3918": "removeAdministrators(address)", +"3de035bf": "endWork(uint256)", +"3de1a4bc": "getDepositPool()", +"3de24c17": "refundInvoice(address,address)", +"3de33a32": "doIssueTokens(address,uint256)", +"3de377ec": "mock(uint256)", +"3de39c11": "maxGasPrice()", +"3de3ebf8": "getPlayerEnergy(address)", +"3de3fbd9": "totalTokenRewards()", +"3de46340": "getBlockVoterBalance(uint256,address)", +"3de478cc": "validateSignatures(bytes32,bytes,bytes)", +"3de4ca9e": "Karma(address,address)", +"3de4eb17": "getAdopters()", +"3de696d3": "percentFeeTimes5()", +"3de6a03f": "checkStatusICAP(bytes32,uint256,string,address)", +"3de7dfb1": "Amount_of_Chi_for_One_ETH()", +"3de8c792": "BUYER_STEP_4(bytes32,uint256,bytes1,address)", +"3de8d340": "dividendsBlocks()", +"3de9c8e6": "haltFundraising()", +"3de9e4c6": "__transferFromWithReference(address,address,uint256,string)", +"3dea6b9a": "getMeme(uint256)", +"3deaa297": "transferAllDividends()", +"3deaa323": "minPurchaseLimit()", +"3dead9e8": "Mythereum()", +"3deaf6d4": "MAXIMUM_FIRST_DAY_CONTRIBUTION()", +"3deb23d2": "STANDARD_RATE()", +"3deb91c7": "setMinReserve(uint256)", +"3debd2d8": "sendToAddress(address,uint256)", +"3dec4cb3": "pre_ico_start()", +"3dedc36e": "getGunByIdPart2(uint256)", +"3dee7237": "amountOfBPs(address)", +"3def449b": "FipsNotary()", +"3defb962": "heartbeat()", +"3df08c6a": "privateSalesTokensSold()", +"3df16377": "make_move_and_claim_victory(uint256,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", +"3df18d2a": "model(address)", +"3df18e0a": "bytes32ToHex(bytes32)", +"3df19507": "intToDec(uint256)", +"3df2b29d": "powerDown(address,address,uint256)", +"3df2b723": "adminClaimAirdropMultiple(address[],uint256[])", +"3df2d6fd": "FIGHTMONEY()", +"3df40c7a": "startPreIcoDate()", +"3df4a282": "setCurrentSaleDayAndBonus(uint8)", +"3df4ddf4": "first()", +"3df5140c": "setIsTokenCanBeSell(bool)", +"3df5958f": "VillanovavsRadford()", +"3df6b23c": "angelRound()", +"3df76482": "fipsPublishData(bytes20,bytes)", +"3df77c0e": "testBalanceOf()", +"3df7c86d": "mom()", +"3df86f79": "split32_20_12(bytes32)", +"3df91162": "getUpdatable(bytes20)", +"3df95fc9": "HAYATO()", +"3df96853": "carIdToRenter(uint256)", +"3dfa0384": "messageSenderAddress()", +"3dfa1c46": "LLV_v31_5()", +"3dfb4843": "renewDeed(bytes32)", +"3dfc42c8": "TdeFinalized(uint256)", +"3dfc6980": "set_verifiedUsersOnlyMode(bool)", +"3dfca2ad": "finishVoting(address,uint256)", +"3dfcdf2b": "CoinVila(address)", +"3dfd288a": "checkVotingForTransferWeiFromExchangeToPayment()", +"3dfd83c6": "SPARCToken()", +"3dfeac48": "MaximalInvestmentChanged(uint256)", +"3e00b910": "buyTokenPreIco(address,uint256)", +"3e011b11": "getTokensBackAFterCorwdsale()", +"3e032a3b": "slippage()", +"3e03c84f": "tokenIsLocked(address)", +"3e03d50f": "isTeam(uint256)", +"3e0448c2": "ChangedId(address,string)", +"3e045845": "issueSecurityTokens(address,uint256,uint256)", +"3e04bf23": "upgradeShip(uint32,uint8)", +"3e058664": "getBonusPercentRate()", +"3e05c964": "withdrawnByBeneficiary()", +"3e05ca7c": "get_PendingGains(address,address,uint256,bool)", +"3e05e01b": "ethReward()", +"3e0663e0": "AdminDrawProcess()", +"3e06be20": "downgradeToBasic(bytes32)", +"3e0764ba": "set_payment_details(uint256,string,address)", +"3e07905e": "endBuffer()", +"3e0807ca": "numberBtcUpdates()", +"3e0831e2": "putStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e083f7d": "deals(uint256,uint256)", +"3e085c3d": "airDropToOldTokenHolders(address[])", +"3e085d0e": "transfer(address,uint48,bytes,string)", +"3e087d01": "addEligibleBurner(address)", +"3e0912ec": "KangEOS()", +"3e093f38": "testPullWithTrust()", +"3e09876a": "vehicleFound(address,uint256)", +"3e0a322d": "setStartTime(uint256)", +"3e0a51b4": "TweetAccount()", +"3e0a7ab5": "addONG_AUDIT(bytes32,string,string)", +"3e0aba92": "fourth_release(uint256)", +"3e0ad2d4": "TPC(uint256,string,string)", +"3e0aedaf": "TreePlusToken()", +"3e0b7eb2": "updateTranscoderWithRewards(address,uint256,uint256)", +"3e0bd52e": "setAccountMaster(address)", +"3e0c1f2a": "fetchNextSnapshotBlock()", +"3e0c5d2c": "earlySafeWithdrawal(uint256)", +"3e0d4f4a": "ApproveContractorProposal()", +"3e0dfbdf": "getInvestorByAddress(address)", +"3e0efe67": "putBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"3e0fddbd": "ClaimHodlToken(address,uint256,uint256)", +"3e1092f2": "changeModuleRegisterOwner(string,string,address)", +"3e109a19": "minBid()", +"3e112bf3": "calcResult(uint256,uint256,uint256)", +"3e112ed7": "reserveCoins(address,uint256)", +"3e11456f": "PRIVATE_SALE_ACCOUNT()", +"3e11741f": "sellToken(address,uint256,uint256)", +"3e118dbe": "_version()", +"3e118f1f": "weiMinSaleIco()", +"3e11b765": "batchApprove(address[],uint256[])", +"3e11e378": "changeController(address,address)", +"3e127ab7": "maxPoly()", +"3e127e76": "safe_add(uint256)", +"3e129967": "SpaceWar()", +"3e1457a1": "initRates(uint256[],uint256[])", +"3e152d8e": "maxBonusTickets()", +"3e15346d": "removeGlobalConstraintPost(address,int256,address)", +"3e156601": "p_setMinInvestment(uint256)", +"3e15ef90": "GetDataPoint(uint256,uint256,bool,string)", +"3e165810": "initBMC(address,uint256,uint256,uint256,uint256)", +"3e175c0b": "goldUnFreeze()", +"3e17b882": "mutateCrabPart(uint256,uint256,uint256)", +"3e18117a": "AhooleeToken()", +"3e182d3f": "addSelctFight2Death(address,uint256,uint256,uint256,uint256)", +"3e184adf": "BucksTecToken()", +"3e18e78e": "endTimeinMinutes()", +"3e1a3376": "updateInvestorsComission(uint256)", +"3e1a420f": "publishRewardlessTaskListing(string,address,uint256,uint256)", +"3e1a9300": "getLastIndex()", +"3e1b0d29": "fechAllVotersBySnapshotBlock(uint256)", +"3e1b4645": "qualifiedAddress(address)", +"3e1b5b3e": "rateEarlyStage4()", +"3e1ba676": "subBountySupply(uint256)", +"3e1c01b5": "capitalAllocation()", +"3e1c2d5a": "RegisterKey(address,string)", +"3e1cc152": "fundWallet2()", +"3e1d09be": "changeSubcourtMinStake(uint96,uint256)", +"3e1d8156": "Issue(uint256,address,uint256)", +"3e1da046": "isDelegateOf(address,bytes8)", +"3e1e292a": "testCopy(bytes)", +"3e1eab35": "VUTEST2()", +"3e1fd0da": "checkAccess(bytes32,address)", +"3e20f7fb": "HashnodeTestCoin()", +"3e214e96": "changeAirDroper(address)", +"3e2153bf": "viewBeneficiaryDetails(address)", +"3e21b00f": "C40Coin()", +"3e239e1a": "getHour(uint256)", +"3e23ee7e": "executeTrade(address,address,uint256,uint256,uint256)", +"3e23ee9c": "BlackHorseWallet()", +"3e24fcbf": "capHicsToken()", +"3e254a0c": "YTCOMMUNITY()", +"3e2557c5": "_price_tokn_ICO_second()", +"3e25e837": "withdrawCommission()", +"3e25fdd4": "getLastStellar()", +"3e260a2c": "allocateReserveTokens()", +"3e262e46": "getTradeOfferSender(uint256)", +"3e2640d6": "extendClosingTime(uint256)", +"3e2729bf": "isRevocated(bytes)", +"3e275f06": "crowdSaleStart(uint16,uint16[5])", +"3e27e1be": "validateResetDeadTokens(uint256)", +"3e28912f": "getStrField3()", +"3e2cd68b": "get_share_by_address(address,address)", +"3e2d6cf6": "_emitWithdrawn(address,uint256,address)", +"3e2d7004": "getTokenRate()", +"3e2d7de1": "mintTokensWithIncludingInJackpot(address,uint256)", +"3e2ddb60": "changeMajorThreshold(address,uint256,bool,bytes)", +"3e2e806d": "rewardTokensFloor(address,uint256,uint32)", +"3e2ee39e": "debug_resetuser()", +"3e2fce37": "updAutoFreeze(bool)", +"3e2fe149": "getNewOwner()", +"3e30046a": "maxSale()", +"3e30838d": "delOperator(address)", +"3e313f28": "_changeColour(uint256,uint8,uint8,uint8)", +"3e31c77f": "setZoPrice(uint256)", +"3e321249": "PdexToken(address)", +"3e32224a": "BF1Token()", +"3e325589": "init(address,address,uint256,int8)", +"3e326048": "initWallet()", +"3e32bea2": "priceIncreasePerPurchase()", +"3e33c37b": "gameContext(uint256)", +"3e345bd8": "FatherToken()", +"3e34f34e": "isUserHasPermissonToModify(address,string)", +"3e351a45": "lotteryWinner()", +"3e352d49": "updateTokensForEtheeraTeam(uint256)", +"3e361281": "betsWon()", +"3e362c96": "bountyCount()", +"3e363696": "BuyWithPathwayFromBeneficiary(address,uint256)", +"3e3657a5": "addConfigEntryInt(bytes32,uint256)", +"3e3756db": "PauseOn(uint8)", +"3e379d64": "setBonus()", +"3e38a2b7": "delegateCount()", +"3e38dab8": "refundFlip(bytes32)", +"3e3926e4": "whitelist(address,uint256,uint256,uint32)", +"3e3b429a": "canPurchase(address)", +"3e3bc743": "AmazingDex(address)", +"3e3c9eae": "qsize()", +"3e3cba8f": "changeBalancesDB(address)", +"3e3ce4f3": "GSEN()", +"3e3d64e2": "hatchingsNeeded()", +"3e3dae41": "maximumSaleLimitUnits()", +"3e3deb8b": "MyMonsterCount(address)", +"3e3dff65": "GainsCalculated(address,uint256,uint256,uint256,uint256)", +"3e3e0b12": "stopMinting()", +"3e3ee859": "NewQuestion(string,bytes32)", +"3e3f4e24": "RealEstateCryptoFundAirdrop(address)", +"3e40aab4": "returnActions(uint256[8],uint256)", +"3e412533": "Easy()", +"3e415358": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32,uint256)", +"3e41d5eb": "addOwnersWithHowMany(address[],uint256)", +"3e427e89": "returnHostAndCreatorCut(uint256)", +"3e42ad79": "Instantium()", +"3e42ed80": "ProgressiveToken(string,uint8,string,uint256,uint256,uint256,address)", +"3e43b652": "betValueOf(address)", +"3e43e8b4": "AnimeToken(address,uint256)", +"3e441ef4": "SetItem(address,uint256,address)", +"3e445446": "STARTING_KILOS()", +"3e445506": "successfulPreSale()", +"3e44694f": "DID()", +"3e4476a3": "addAddressToJackpotParticipants(address,uint256)", +"3e450fff": "adminDeleteAccount()", +"3e4565d2": "testErrorUnauthorizedNameRegister2()", +"3e4604b3": "robotAddr()", +"3e460a84": "distributeBooking(uint256)", +"3e46eb60": "fortune_endauction(uint256)", +"3e476053": "moveFunds(address,uint256)", +"3e4852bd": "getGroupData(uint256)", +"3e4882fc": "AddressChangeConfirmed(address,address)", +"3e49077a": "createSaflokKey(bytes32,bytes32,bytes32,bytes32)", +"3e49776b": "VOLUME_5()", +"3e49820d": "changeTicketCap(uint256)", +"3e499dff": "addKYC(address)", +"3e49bed0": "setInt(bytes32,int256)", +"3e4a9263": "enforceSecondLock(address,address)", +"3e4b20cf": "updateGameSpecifics(uint256,uint256)", +"3e4b2570": "investorsAllocation()", +"3e4bdce4": "hasAccountPendingOrders(address)", +"3e4bee38": "GOLD()", +"3e4c0c82": "player_1(uint256)", +"3e4c9534": "getInvestmentMin()", +"3e4d914e": "lastBlock_f12Hash_uint256()", +"3e4e0432": "notifyOfArbitrationRequest(bytes32,address)", +"3e4f49e6": "state(uint256)", +"3e4ffa9b": "getImage(uint256,bytes32[],uint256,uint256)", +"3e5087cc": "testBasicThing()", +"3e50b0b8": "sendOwnerEther(address)", +"3e50de30": "calculateRewards()", +"3e510870": "transferOPSPool()", +"3e52d5c6": "openBoxes(uint256[])", +"3e530e5b": "find(uint256)", +"3e531e0d": "queryGameStatus(uint256)", +"3e53ccee": "actualPriceDivisor(uint256)", +"3e5442bd": "getBitsoAddress()", +"3e546675": "DelegateDualOwnable(address,address)", +"3e55eab0": "parcipateCrowdsaleInvestor(address)", +"3e5615bc": "FourToken()", +"3e568fe7": "GetDaysInOffice()", +"3e56f9f9": "getPayout(uint256)", +"3e57324e": "EmergencyPause()", +"3e586a81": "BeatTokenEthPriceChanged(uint256)", +"3e589050": "changeKeys(string,bytes1[])", +"3e58a465": "getShareList()", +"3e58c58c": "send(address)", +"3e592d50": "ResourcesOwner(uint8,address)", +"3e5933fe": "removeAll(address[])", +"3e5a2024": "MyActive()", +"3e5a907f": "addSrNOfBallotPapper(uint256,uint256,uint256,uint256,uint256)", +"3e5ac28f": "toggleTransfers()", +"3e5b15e1": "addCoin(bytes4,address)", +"3e5b5e39": "addPrecommitment(address,uint256,bool)", +"3e5b7fec": "TwoPhaseAuction()", +"3e5beab9": "allowance(address)", +"3e5cee05": "issueIOU(string,uint256,address)", +"3e5d5cee": "sellPriceAtIndex(uint256)", +"3e5d901e": "autoTokenSent()", +"3e5daf02": "startRoundC()", +"3e5edb1d": "REFUND_LOCK_DURATION()", +"3e5efd92": "clearProcessedBet(uint256)", +"3e5fbedd": "NOTNCoin()", +"3e5fd9b5": "dEthereumlotteryNet(address,address,bool,address)", +"3e604f48": "registerAadharDetails(string,string,string)", +"3e6075a4": "battleCountOf()", +"3e60c83a": "acceptMediation(uint256)", +"3e62d835": "setNumberOfOutcomes(uint256)", +"3e6357a9": "UserFund(address)", +"3e650c15": "withdrawalUser()", +"3e65a153": "longMul(uint256,uint256)", +"3e675cb0": "changeMaxValueBetForEmission(uint256)", +"3e6784b8": "ATLToken()", +"3e68119b": "setDebugNumber2(uint256,uint256)", +"3e681375": "totalDropAmount()", +"3e68680a": "create(address,address)", +"3e68aa3a": "getTopWinners(uint256)", +"3e68dea3": "BaseAccountService(address,address)", +"3e693ffd": "AppSet(address)", +"3e6968b6": "getCurrentDay()", +"3e6a569a": "claimReward(address,string)", +"3e6a6a31": "beneficiarySend()", +"3e6b16d9": "setShowInterval(uint256)", +"3e6c0637": "getFirstStartableIndex()", +"3e6d4e12": "getOptional(uint40)", +"3e6d6a6b": "setAdvisorAddress(address)", +"3e6d6d0b": "removeMastercardUser(address)", +"3e6d6d26": "withdrawAllTokens(uint256)", +"3e6d9770": "investments(address,uint256)", +"3e6e0adf": "whiteListPeriod()", +"3e6e2a73": "_mintEstate(address,string)", +"3e6eaa03": "mint(uint32,address)", +"3e6f118a": "blastOff(address)", +"3e6f4160": "roundParameters(uint256)", +"3e709982": "isDefValid(uint8,uint8,uint8,uint8,uint8)", +"3e715da2": "logPromiseFulfilled(uint256)", +"3e721015": "getFunds(uint256)", +"3e72b2bb": "addMembers(address[],uint256[])", +"3e72df41": "ff(string)", +"3e76018b": "getNextMinimumBet()", +"3e7614cd": "TIER3_PRICE()", +"3e764fdb": "_getNewFloorGene(uint256)", +"3e774409": "_mint(address,address,uint256,bytes,bytes)", +"3e77dcfb": "setPercentages(uint8,uint8,uint8,uint8,uint8,uint8)", +"3e786d80": "DickheadCash()", +"3e788ba3": "getRequestState(address,address)", +"3e78afd8": "ReferrerBonusTokensTaken(address,uint256)", +"3e78cf7a": "transactionFeeMin()", +"3e798e83": "calculateUserCommission(uint256)", +"3e799335": "RefundManager()", +"3e79e4c2": "customerPolicies(address,uint256)", +"3e7b5e80": "getUserRemainingAlloc(address)", +"3e7b684d": "NBAT(address,address,address,address,address)", +"3e7bb43c": "transferKycOwnerShip(address,address)", +"3e7cb0d3": "verify(uint256,bool)", +"3e7d081a": "emitBoardClosed(uint256,bool)", +"3e7d1acc": "currentAllocationLength()", +"3e7e250e": "GetDynamicCardAmount(uint32,uint256)", +"3e7e30ba": "poolPercentage()", +"3e7e42fa": "initialCreatorAccount(uint8)", +"3e7e70a4": "tokenBuyerWallet()", +"3e7e730d": "addressToReceiverToAmountAllowed(address,address)", +"3e7f26a5": "heroIdToBuyer(uint256)", +"3e7f54a9": "updateAppInstance()", +"3e803343": "subIsSafe(uint256,uint256)", +"3e80cbc6": "adminUpdateWallet(address)", +"3e81ba66": "preBountyAdded()", +"3e81d56e": "calculateProviderFee(uint256)", +"3e82055a": "addSignature(uint256,bytes16,bytes)", +"3e82eca7": "getAddressOne(address)", +"3e83f6cd": "Nickelcoin()", +"3e83fe36": "getMyShares()", +"3e84b266": "priorityPassContractAddress()", +"3e853128": "getGasForXau(address)", +"3e85713d": "marketingReserve()", +"3e85755a": "bonusInPreSalePhase2()", +"3e859fcb": "updateCap(uint256,uint256)", +"3e8616c8": "setBullAmount(uint256)", +"3e867089": "setDelegadoDeEscuela(bytes32,bytes32,uint256)", +"3e8686cc": "getSubmission(uint256)", +"3e86a2e5": "transferToAddress(address,uint256,bool,bytes)", +"3e870d63": "subHashrate(address,uint256)", +"3e8786a1": "reclaimFund(address)", +"3e87d301": "tokenPriceInEuroCents()", +"3e8817aa": "getPaymentAmount()", +"3e88d93b": "getRecorderID(address)", +"3e89340f": "lockStatus()", +"3e8a0585": "Bidding()", +"3e8a0bc9": "lockdown()", +"3e8a76e4": "CommerceBlockToken(address)", +"3e8a9439": "proposalDestination()", +"3e8b1dd7": "claim(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"3e8be2e1": "reTweetRewardPool()", +"3e8c34e5": "cardboardUnicornTokenAddress()", +"3e8cc273": "doBlockContract()", +"3e8ce607": "successfully_closed()", +"3e8cee07": "getPOOL_edit_5()", +"3e8cfa26": "Nut(uint256,string,uint8,string)", +"3e8d6e9f": "multyTx(address[100],uint256[100])", +"3e8d97e7": "underwriteToken()", +"3e8eca23": "plusFreezingTime(uint256)", +"3e8f5b90": "setConfig(string,uint256)", +"3e8f682f": "setETHFee(uint256)", +"3e8ff43f": "converterType()", +"3e904876": "devexit()", +"3e9196b4": "NokuTokenBurner(address)", +"3e91a622": "LOCToken()", +"3e92128c": "gettruelevel(address,uint256)", +"3e92fa26": "claimComputation(bytes,bytes,uint256)", +"3e9439cf": "removeLockedWalletEntity(address,address)", +"3e9491a2": "revenue()", +"3e94c904": "collectionOf(address)", +"3e955225": "getN()", +"3e95c9b6": "MOONTRAIL()", +"3e95f06d": "_handleProductionDecrease(address,uint256)", +"3e96c107": "People(uint256,string,uint8,string)", +"3e96d28e": "setReleaseAgent()", +"3e96e868": "addRole(string)", +"3e9744da": "walletBountyAndAdvisors()", +"3e9761b4": "projectIndex(uint256)", +"3e97db0d": "changeMainWallet(address)", +"3e97ee6c": "isOwnerOfAllPlayerCards(uint256[],address)", +"3e98039a": "multiOwnerSides()", +"3e9836c6": "oraclizeGas()", +"3e98b93a": "getAvatarCount(address)", +"3e99633f": "haltIEO()", +"3e997e71": "isPeronalLock(address)", +"3e99a35e": "BitMantas()", +"3e99c395": "isValidPublicKey(uint256,uint256)", +"3e99d2c9": "Foo(string,string)", +"3e99e26a": "SellableToken(address,address,address,uint256,uint256,uint256,uint256)", +"3e9b4c24": "CNToken()", +"3e9bee1b": "getBalanceDivis(address)", +"3e9c77f9": "ListingRegistry(uint8,uint8,uint8,uint8)", +"3e9e9f26": "distributeCallback(uint256,uint256,address[])", +"3e9eb6c1": "recursive_read(uint256)", +"3e9ed7e4": "burnSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"3e9f0d52": "userOddsRound(address)", +"3e9f9664": "withdrawItem(address,uint256)", +"3ea053eb": "deactivate(address)", +"3ea0fb3e": "getCurrentPrice(uint32)", +"3ea11222": "createGame(uint256,address)", +"3ea14a4f": "escFund()", +"3ea252eb": "finalOptions()", +"3ea2cde5": "addFiatCurrencyRaised(uint256)", +"3ea376fc": "changeAdmin(address,address,bytes32[3],bytes32[3],uint8[3])", +"3ea3c2bb": "_updateFundingGoal()", +"3ea3e42f": "AgriChainRootData()", +"3ea3f6c5": "activateRegistrar()", +"3ea51dc2": "ZIRC()", +"3ea556da": "getEtherForTokens(uint256,uint8)", +"3ea5cdba": "MIN_INVESTMENT_ICO_PHASE_ONE_POUNDS()", +"3ea69d76": "setEmployee(address,bytes32,bool)", +"3ea6c986": "ltcRaised()", +"3ea75e3d": "addJobContractMessage(address,address,address,string,uint256)", +"3ea79cb1": "MSCToken()", +"3ea89fd1": "popQueue()", +"3ea97009": "initialToken()", +"3eaa7643": "eligibilityRate()", +"3eaa8128": "buyCovfefe(uint256)", +"3eaab2dc": "FabotCoin()", +"3eaaf86b": "_totalSupply()", +"3eac48a0": "getTotalVoter(address,address)", +"3eac5cac": "PayingBackContract()", +"3ead67b5": "changeContractOwner(address)", +"3eadb6db": "nextPhase()", +"3eae396f": "GodzSwapGodzEtherCompliance()", +"3eae8ac8": "SkillChainPresale(uint256,uint256,uint256,address,uint256,address,address)", +"3eaf5d9f": "tick()", +"3eaf7591": "makeVote(uint256)", +"3eaf9923": "right68(uint256)", +"3eafec21": "sellTokens(address,address,uint256)", +"3eb10ab3": "FundAccount()", +"3eb1d777": "setStage(uint256)", +"3eb1eb1a": "issuingBody()", +"3eb2a37d": "priceCreatingChannelChanged(uint256,uint256)", +"3eb2b5ad": "addTeamMember(address)", +"3eb2cb02": "totalSquareStakesByUser(address,uint256,uint256)", +"3eb34e09": "AlterContactName(bytes32,address,bytes32)", +"3eb3aaad": "_getClosingObligation(bytes32)", +"3eb51dc4": "releaseForTeamAndAdvisor(address,uint256)", +"3eb54d80": "Pele()", +"3eb578bf": "ADVISER_STAKE2()", +"3eb5caca": "setProductType(uint8,string)", +"3eb610f5": "_requestContractApprove(bytes32,address)", +"3eb76b9c": "castVote(uint256)", +"3eb78420": "mainFundAccount()", +"3eb7dbc0": "FoxTradingToken()", +"3eb96aed": "DrunkCoin()", +"3eba223c": "CopyTokens()", +"3eba9ed2": "setBooleanValue(bytes32,bool)", +"3ebb047f": "allowanceTransfer()", +"3ebb2a17": "CreateTokenToMarket(address,uint256)", +"3ebb2d6b": "instructOracleToDistribute(uint256)", +"3ebbf394": "BergCoin()", +"3ebc2ab3": "isCompromised(address)", +"3ebc457a": "closeCurrentFeePeriod()", +"3ebd6092": "checkPermission(uint8,address)", +"3ebdc754": "setDiscipleSale(uint256,uint256)", +"3ebfc934": "transferFrom(address,address,string)", +"3ebfdaaf": "Swap()", +"3ebfde04": "proceedPreIcoTransactions(address[],uint256[])", +"3ec045a6": "auditor()", +"3ec16194": "calculateShares(uint256)", +"3ec1d668": "Vendor(bytes,uint256)", +"3ec27341": "getConfigAddress()", +"3ec27c4a": "setTimeRangeGen0(uint256)", +"3ec36b99": "commitVotes(uint256[],bytes32[],uint256[],uint256[])", +"3ec3aedc": "executeSell(address,uint256,uint256)", +"3ec414c8": "editMeta(string,uint256)", +"3ec48a2e": "move()", +"3ec548b6": "initLottery(uint16,uint256,uint8,bytes32)", +"3ec6a4c4": "getContributorsCount(address)", +"3ec6dac2": "getSize(bytes32)", +"3ec862a8": "hatchEggs(address)", +"3ec8d571": "TronToken(address,address)", +"3ec8ec5a": "getFinish()", +"3eca264e": "getWithdraw(address)", +"3eca443b": "generatedTokensSale()", +"3eca48db": "BonusesAllMinted(address)", +"3ecaabca": "ownerSetEarningsRate()", +"3ecae564": "canSend(address,address,bytes32,uint256,bytes)", +"3ecafef5": "isIcoStart()", +"3ecb9884": "frozensDetail(address)", +"3ecbbf39": "list(address,address)", +"3ecbf72a": "_find(address)", +"3eccca1e": "transferAllTokens(address,address)", +"3eccd456": "initializeSale(address[5],uint256[6],uint8,bytes32,bytes32,uint256,uint256)", +"3ece9c61": "teamHoldAmount()", +"3ecf965f": "rateETH_BCDT()", +"3ed01e02": "takerDispute(uint256,uint256,uint256)", +"3ed03798": "addToStat(uint256,uint256)", +"3ed0619b": "stabilityBoardProxy()", +"3ed08dc9": "balanceOfEthFee()", +"3ed0a373": "getDepositAtIndex(uint256)", +"3ed0f52c": "setCustomBonus(address,bool,bool,address)", +"3ed10b92": "allowances()", +"3ed23f91": "BlockPayeeToken(uint256,string,string)", +"3ed28f39": "getUniCoinSize()", +"3ed2d908": "buyerTokenName()", +"3ed35855": "removePayee(address)", +"3ed38181": "setInvalid()", +"3ed3d6a6": "getthird(uint256[])", +"3ed4006b": "OwnerCashout()", +"3ed4c4c8": "phaseAddtlInfo(uint256)", +"3ed58536": "record_human_readable_blockhash()", +"3ed5d456": "finishReplayPhase(uint256)", +"3ed620a4": "updatePrices(uint256,uint256,uint256)", +"3ed66d3d": "sellMintingAddress(uint256,uint256)", +"3ed70628": "SCPSToken(uint256,string,string)", +"3ed72caf": "icoTokenAddress()", +"3ed731bc": "makeCollectibleUnavailableToSale(address,uint256,uint256,uint256)", +"3ed7530d": "amountOfPerRelease()", +"3ed8ff25": "TotalFeesReceived()", +"3ed9bc86": "initializeToken()", +"3eda009b": "rewardRound(uint256)", +"3eda062c": "updateTap(uint256)", +"3eda7b88": "contractorTransferFrom_Scoupon(address,address,uint256)", +"3edab9d0": "AuctionCanceled()", +"3edaf264": "stopBounty()", +"3edbd76e": "GetChallengeCreator(uint256)", +"3edc65d3": "recordWithdraw(address)", +"3edc69b8": "maxAbsKindness()", +"3edcd61f": "times8()", +"3edd1128": "deposit(address,uint256,bool)", +"3edd90e7": "NewOwner(address)", +"3edddc0a": "incrementWrite()", +"3edef04b": "limitPreIcoTokens()", +"3edfd954": "mint(address,uint256,uint256,uint256,string)", +"3edfe35e": "ethPriceInCents()", +"3ee066e5": "sspRegistry()", +"3ee0c627": "currentBadge()", +"3ee2dd16": "FunGame()", +"3ee39cee": "testCannotActivateBeforeDeployingANT()", +"3ee3f499": "validateHash(bytes32)", +"3ee5313f": "SetState(uint256)", +"3ee58d13": "testBurnGuyAuth()", +"3ee5f2e4": "BreakToken()", +"3ee6d933": "rndInit_()", +"3ee6de34": "work(bytes32[])", +"3ee71e85": "NortontokenERC20(uint256,string,string)", +"3ee788e1": "_updateLoveStory(bytes16,bytes32,bytes32,uint256,string)", +"3ee7ab85": "airdropUpdateToken(address[],uint256[])", +"3ee822f4": "setAllLocations(uint256[])", +"3ee8747a": "isOrganisationExits(address)", +"3ee89a63": "withcom()", +"3ee90a29": "FOUNDER_STAKE()", +"3ee9d648": "lastGameId()", +"3eea5150": "milkTotalSupply()", +"3eeafccc": "getCountryStats(uint256)", +"3eeb3235": "geCompoundTimestampsFor24Months(uint256)", +"3eebc589": "isMarketManager()", +"3eed3822": "bigPrice()", +"3eed5d17": "Cipher()", +"3eeda7d3": "deliverTokens(address,uint256,string,bool)", +"3eedabcf": "getMelonAsset()", +"3eedf7d8": "getCurrentAuctionPrices(uint128[])", +"3eee36c6": "_split(uint256,uint256,uint256)", +"3eee83f1": "addAcceptedToken(address)", +"3eeeb1c3": "fastEscape()", +"3eefe239": "mintReservedTokens()", +"3eefef7b": "testFailTransferFromSelfNonArbitrarySize()", +"3ef06b6b": "previousprice()", +"3ef0784e": "configurationGenericCrowdsale(address,uint256,uint256)", +"3ef13367": "flushTokens(address)", +"3ef14cc8": "getTotalAuctions()", +"3ef37e30": "REFUND_PERCENT()", +"3ef39571": "isRequireData()", +"3ef4691f": "MyFreeCoin(uint256,string,uint8,string)", +"3ef4c16b": "withdrawVPC0xTokens(address)", +"3ef4f4ca": "world(uint256)", +"3ef530da": "_reduceReservesFresh(uint256)", +"3ef5aee9": "maxProportion()", +"3ef5d325": "getBaseValue(uint256)", +"3ef5e445": "subtract(uint256,uint256)", +"3ef5f368": "payMultiple(uint256)", +"3ef7c687": "getExpiringUnitList()", +"3ef84fcb": "withdrawCommonCoin(uint256)", +"3ef87414": "getRevisionCount(bytes20)", +"3ef8e872": "numberOfTokensOfOwner(address)", +"3ef8ec78": "announce_numbers(uint8,uint8,uint8,uint8,uint32,bytes32)", +"3ef92150": "ICO(uint256)", +"3efa31b0": "initialAddress(address)", +"3efa8d51": "feesD()", +"3efab21b": "icoTokensIssued()", +"3efb537e": "getPastGameResults(uint256)", +"3efb760d": "nextLevel()", +"3efcad6d": "EMPR()", +"3efcd2e0": "transferPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"3efd1403": "createGame(uint8,bytes32)", +"3efe54d4": "percentWeiDividend()", +"3efe6441": "getRemainingToken()", +"3efea4d1": "buy(uint256,uint256,uint256,uint256,string,string,string)", +"3eff1ef3": "DYBToken()", +"3f001dd7": "MIC(uint256,string,string)", +"3f003d59": "removeAddressFromGrantAccess(address)", +"3f00f5aa": "HAOToken()", +"3f01dc99": "ETHFINEX_FEE()", +"3f01e642": "roundCount(uint256,uint256)", +"3f0218ac": "startThirdPhase()", +"3f021e2e": "oracalize_gaslimit()", +"3f02e4f0": "getTotalValidTk()", +"3f03aab4": "communityAddr_()", +"3f045e61": "inArray(address[],address)", +"3f047053": "songTokenExchange()", +"3f04b06d": "shareLove(address,address,uint256)", +"3f050f02": "subdomainSale()", +"3f0547bb": "changeAllowAllTransfers(bool)", +"3f056d2a": "StrongHoldTEST()", +"3f06e17c": "changeDonation(address)", +"3f073031": "addCredits()", +"3f07618d": "createDragon(address,uint256,uint256,uint256,uint256,uint240)", +"3f08882f": "assertIsWhitelisted(address)", +"3f089de9": "GameRefunded(uint256)", +"3f09ba9c": "TupleDemo()", +"3f0a0797": "exchangeContract()", +"3f0a9f65": "requiredBlockConfirmations()", +"3f0adce9": "setSmallWalletAddress(address)", +"3f0b67e9": "_addIndex(address,address)", +"3f0b70b6": "itgTokenTransfer(uint256,bool)", +"3f0cea3f": "withdrawOwner(address)", +"3f0cf183": "MockSale(uint256,uint256,address,address)", +"3f0d9ad5": "contractBalance_()", +"3f0ec70b": "RequestFactory(address)", +"3f0ed0df": "setContract(string,address)", +"3f0f42e2": "addWalletToWhitelist(address)", +"3f0f7248": "SpaCoin()", +"3f109205": "setFoundationInterface(address)", +"3f10dea6": "canUse(address,uint256)", +"3f10f08a": "nextCommonTTMTokenId3()", +"3f117b85": "setPaymentContractAddress(address)", +"3f1199e6": "buried(address)", +"3f11e43d": "newEtherdelta(address)", +"3f124f1d": "totalMintContracts()", +"3f13d339": "getTxnNum(address,uint256)", +"3f14710d": "GameEnded(address,address,uint256,uint256,uint8)", +"3f14e2db": "withdrawfund()", +"3f152d11": "Coin(address)", +"3f15457f": "ens()", +"3f174064": "crowdsalePause()", +"3f181ef2": "getTotalUniqueCards()", +"3f18400e": "owlmasterReq()", +"3f1887e9": "Gamblers_Until_Jackpot()", +"3f18acb4": "CarRoute(string)", +"3f19bfbf": "allocateLedTokens()", +"3f19d043": "getContributions(address)", +"3f1a1cac": "useSingleItem(uint256,uint256,uint256)", +"3f1a3d9e": "dropEnabled()", +"3f1ae30f": "ReverseConfirmTransaction(uint256)", +"3f1b1267": "icoSince()", +"3f1bfdee": "testFailCreateShortIdAlreadyExists()", +"3f1da980": "lastBlock_v11Hash_uint256()", +"3f1e600a": "PHASE_3_PRICE()", +"3f1f59a4": "ICO_START2()", +"3f1f8f68": "seventh_withdrawal(uint256)", +"3f202951": "SampleCrowdsale(uint256,uint256,uint256,uint256,address)", +"3f20fa9e": "requestDispute(bytes16,address,address,uint256,uint256)", +"3f2266c2": "ownerAngelCollection(address,uint256)", +"3f22b0fb": "last50plushacker()", +"3f23503d": "minBtcValue()", +"3f23a566": "mintingCap()", +"3f242990": "tokenHardcap()", +"3f24ef7c": "setGidMax(uint8)", +"3f250493": "Crowdsaled()", +"3f257776": "getN2ControlLimits(bytes32)", +"3f265ddd": "FructusToken()", +"3f266242": "getSubjectCountByAddress(address)", +"3f26c5ee": "addMilestone(uint256,uint256,uint256,uint256,string,string)", +"3f26fa01": "InvestmentPolicyChanged(bool,bool,bool,address,address)", +"3f27e9e1": "recoverAddressFromBalanceProofUpdateMessage(bytes32,bytes32,uint256,bytes32,bytes,bytes)", +"3f27f105": "batchTransferSame(address[],uint256)", +"3f2885cb": "publish(string,string,address,bytes32)", +"3f288f05": "addPubKeyHash(bytes20,uint8,bytes,bytes)", +"3f28b20e": "Bemo()", +"3f28e9fb": "createBounty(uint256)", +"3f28f24c": "claim_rest_of_tokens_and_selfdestruct()", +"3f2965f0": "registerSeller(address)", +"3f29cd27": "set(bytes12,bytes32,uint40)", +"3f2b1040": "enableTokenWithdrawals()", +"3f2c0e35": "getNumberOfRequest()", +"3f2c736a": "tokenSetBurnFeeAbs(address,address,uint256)", +"3f2cb5d4": "popEducation()", +"3f2cba2b": "airdropMVP(address[],uint256)", +"3f2cdb53": "setETHPriceLowerBound(uint256)", +"3f2e0564": "setIcoWallet(address)", +"3f2e907c": "resumeTransferToken()", +"3f2e917c": "changeLimits(uint256)", +"3f2eed3b": "publicPresale()", +"3f2f1596": "setupTreasury(address,uint256)", +"3f2f46b4": "revealRock(string)", +"3f31281a": "changeUserKey(address)", +"3f3173f3": "MyTokenyy()", +"3f31b3ac": "extCustomerPolicies(bytes32,uint256)", +"3f3246a0": "getLastBuyer()", +"3f32aa70": "removeFromWhiteList(bytes32,address)", +"3f32af65": "calculateFare(string,string)", +"3f33252d": "changeDisown(uint256)", +"3f332792": "getGiftsCounter()", +"3f34dd5c": "setVestingAmoundAndApproveCrowdsale(address,address,address)", +"3f35d033": "transferToContract(address,uint256,bytes)", +"3f36d33d": "getpotReward()", +"3f37c9d4": "servicePercentage()", +"3f384026": "setStatusBuySell(bool,bool)", +"3f392b42": "trade(address[5],uint256[11],uint8[3],bytes32[6])", +"3f3935d1": "confirmReverse(string)", +"3f395781": "Capsule(uint256,address)", +"3f3a1ed2": "alottTokensExchange(address,uint256)", +"3f3a279d": "getBetResult()", +"3f3a4966": "getVotingPower(uint256,uint256,address)", +"3f3a78d5": "rateAngelDay()", +"3f3bdc6c": "upgradeAllowance(address,address)", +"3f3c212d": "kittenTalk()", +"3f3c51c3": "Setmyadress(address)", +"3f3c594c": "TestingToken()", +"3f3cde05": "whitelistFilteringSwitch()", +"3f3d83c3": "purchasable()", +"3f3e4c11": "setMaxTotalSupply(uint256)", +"3f3edfa4": "RootCoin()", +"3f3f43a8": "setPreDGZtoDgzRate(uint256)", +"3f402dfc": "CreateGameIco(address,uint256)", +"3f40adb8": "createPetition(string,string,uint256,bool,string)", +"3f415772": "releaseExists(bytes32)", +"3f419c40": "getMessageMaxCharacters()", +"3f423afe": "DIVISOR_STAKE()", +"3f4263ef": "x(uint256)", +"3f430616": "getThirdRoundReleaseTime()", +"3f43c7cf": "open(uint256,uint256,uint256,string)", +"3f444db1": "internalDoRoll(bytes32,bytes32,uint256,uint256,uint256)", +"3f44d89f": "NigerianNairaToken()", +"3f450915": "_mateWith(uint256,uint256,uint8)", +"3f454406": "tokenEscape(address)", +"3f4628c1": "disputeLimitedReporters()", +"3f46a2ea": "DucLongToken()", +"3f478372": "newDeposit(uint256)", +"3f479562": "kingGladiatorFounder()", +"3f47e662": "decimals(uint256)", +"3f487b8b": "securityGuardLastCheckin()", +"3f48ae1a": "initInsecure(address)", +"3f493a1d": "Playforfreetoken()", +"3f497d52": "batchAirDrop(address,address,address[],uint256)", +"3f4a6484": "removeCapper(address)", +"3f4acbe8": "_teamTax(uint256,bool)", +"3f4ad13d": "LOTE(uint256,string,string)", +"3f4b1401": "releaseDragonTokens()", +"3f4ba83a": "unpause()", +"3f4be889": "callContractAddress()", +"3f4c0733": "batchTransferEtherWithSameAmount(address[],uint256)", +"3f4c89ca": "show_minimum_amount()", +"3f4d2fc2": "addConnector(address,uint32,bool)", +"3f4d97f0": "TOTAL_TEAM_TOKENS()", +"3f4dd268": "releaseTokens(uint256,uint256)", +"3f4e5ab9": "getB1()", +"3f4e6d66": "CryptoFamous(address)", +"3f4e95d7": "investorsAccounts(address)", +"3f4eb701": "updateUnderlying(string,uint256)", +"3f4f057f": "candidateBlockNumberHash()", +"3f4f070c": "newSpaceshipUpgrade(bytes1,uint8,uint256)", +"3f4f3075": "setRenewable(uint256,bool)", +"3f4f50c8": "EvtUnlock(address,uint256)", +"3f50331d": "batchTransferPaidTokens(address[],uint256[])", +"3f516018": "setCreator(address)", +"3f5174df": "numberOfEarlyPurchases()", +"3f5228c7": "fifishICO()", +"3f52c660": "TokenPerETH()", +"3f52e589": "setStartingTime(uint256)", +"3f541d08": "burnTokens(address,address)", +"3f541ffc": "exchangeEtherForHavvens()", +"3f549d87": "contributeByOracle(address,uint256)", +"3f55b895": "delegate(uint8,bytes32,bytes32)", +"3f572432": "investment(uint256,address,string,uint256)", +"3f5750c6": "distributeCoins()", +"3f576af0": "GoodDayTokens()", +"3f579f42": "executeTransaction(address,uint256,bytes)", +"3f58774b": "ecbuy(uint256)", +"3f58a043": "ceoEtherBalance()", +"3f58f8c0": "voteRuling(uint256,uint256,uint256[])", +"3f590062": "getTokenCreationTime(string)", +"3f59b1ab": "TokenImpl(string,string,uint256)", +"3f59e45a": "bincentiveLogger()", +"3f5a0bdd": "selfDestruct(address)", +"3f5a9e22": "getAmountOfTitties()", +"3f5ab2fe": "seed_eth()", +"3f5adb8e": "LIRAX()", +"3f5b7675": "periodTwo()", +"3f5bc9b6": "makeACall(address,uint256)", +"3f5c6a50": "MinimumDonation()", +"3f5cbdb6": "returnWei()", +"3f5cd055": "advisorsVesting()", +"3f5d0203": "getCreationWeiCost()", +"3f5d2b79": "CrowdsaleFinished(uint256,uint256)", +"3f5d8056": "currRound()", +"3f5e268f": "convictInitial(uint256,uint256)", +"3f5e3ec1": "changeTransactionStorage(address)", +"3f5ea068": "addLockAccount(address,uint256)", +"3f5f5217": "sellAth(uint256)", +"3f601972": "TotalToken()", +"3f606cfc": "enableAutoSeller()", +"3f60efa2": "HANDLE()", +"3f615272": "sendICO(address,uint256,address)", +"3f61dcf6": "enableTransfering()", +"3f62c084": "collectMessage(address,address,uint256)", +"3f635e30": "ethTransfer(uint256,address,uint256)", +"3f64a7ab": "devFeePercent()", +"3f64b318": "initSale(address,address,address,address)", +"3f651bab": "TOURNAMENT_ENDS()", +"3f65d97f": "removeEndorsement(bytes32,bytes32)", +"3f67364a": "PayValsToList(address[],uint256[])", +"3f67a94e": "getOffChainAddresses()", +"3f683b6a": "isStopped()", +"3f6849eb": "listedMonForMon(uint64)", +"3f686170": "freezeAll(bool)", +"3f68fde4": "removeVote(uint256)", +"3f69034f": "enableGeneration()", +"3f697ce9": "startBlock(address)", +"3f69babd": "cancelEvent(uint256)", +"3f6a2c97": "calculatePoints()", +"3f6a6792": "Bribed(uint256,uint256)", +"3f6b33c4": "ping(address,uint256,uint256)", +"3f6b5fde": "generate(address,string)", +"3f6b6f2e": "Airdrop()", +"3f6c0696": "superMint(address,uint256,uint256)", +"3f6c0c60": "isTransferNotExpired(uint256,uint256)", +"3f6c3567": "listSales(uint256)", +"3f6c4a1b": "getTeamA(uint256)", +"3f6c4cfd": "withdrawBountyAndAdvisory()", +"3f6c71c5": "edgePigmentR()", +"3f6c95fe": "increaseLotteryBalance(uint256)", +"3f6d8256": "validatorFee()", +"3f6dd911": "multisig_owner()", +"3f6ddb75": "Allocated(address,uint256,bool)", +"3f6ea2a8": "MIN_LEADER_FRAC_TOP()", +"3f6ec73a": "itemVoteUp(address,uint256)", +"3f6f7ed6": "updateEthRate(uint256)", +"3f6fa655": "resolved()", +"3f6fff4e": "closeCycle(uint256)", +"3f70c2b4": "getProductById(uint256)", +"3f720922": "setConfig(uint256,uint256,uint256,uint256,uint256)", +"3f723c62": "addRecord(string,string,string)", +"3f73365f": "getOneFree(address)", +"3f738402": "goalIncrement()", +"3f74a3b7": "MINIMUM_VESTING_PERIOD()", +"3f74a8be": "totalEthJackpotCollected()", +"3f74fecb": "DSTrueFallbackTest()", +"3f751ad0": "addTxToCustomerRegistry(address,uint256,uint256)", +"3f7525bf": "getAddressesSet()", +"3f76fbd3": "dhopakcoin()", +"3f77b560": "newDocument(bytes)", +"3f77e1e9": "testFee()", +"3f79a0a9": "NewGame(bytes32,bytes32,bytes32,bytes32,address,uint256)", +"3f7a0270": "setN(uint256)", +"3f7aea39": "getCET4ById(uint32)", +"3f7b2ea9": "testMintInvalid()", +"3f7b54f9": "DevChangeMiningReward(uint256)", +"3f7b6be8": "createProductionUnit2()", +"3f7c42a7": "setJob(address,uint256,address,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", +"3f7ca612": "FMWL()", +"3f7d3969": "fetchAllCandidates()", +"3f7d5361": "changeSafetyLimit(uint256)", +"3f7d72d8": "rSetE(address)", +"3f7da39a": "whitelisterAddress()", +"3f7e2120": "CloseGift()", +"3f7eabc9": "setRobot(address)", +"3f7eb0fe": "func_1()", +"3f7f2eda": "Order(address,uint256,address,uint256,uint256,uint256,address)", +"3f7f4f17": "getUserAccountBalance(address)", +"3f7f6d23": "BuyWithBonus(address,address,uint256,uint256,uint256)", +"3f7f8b24": "getAllocationProposal(uint256)", +"3f7f9faf": "attachTicker(address)", +"3f80135f": "test_threeInvalidEqAddress()", +"3f801f91": "proxyAssert(address,uint8,bytes)", +"3f802220": "ProposalAdded(uint256)", +"3f802ca0": "singleValueBatchTransfer(address[],uint256)", +"3f806783": "potSizeChanged(uint256)", +"3f807199": "changeParticipants(address[])", +"3f80a82b": "getbuyPrice()", +"3f80db69": "_totalTokenSold()", +"3f811b80": "createContract(bytes32)", +"3f8126d5": "GetStatus(uint256)", +"3f817449": "tokenSmartcontract()", +"3f81e4be": "lastBlock_a9Hash_uint256()", +"3f82065b": "setDiscipleVend(uint256,uint256)", +"3f82e2c6": "PUBLIC_RESOLVER_NODE()", +"3f836dcf": "addAsAddress(bytes32,address)", +"3f83acff": "get_contract(bytes32)", +"3f8416fb": "doUpgrade(address)", +"3f85be9c": "calcChanges(uint256,uint256,uint256)", +"3f85f916": "founderContract()", +"3f862a19": "remainUserTokenBalance(address)", +"3f87f870": "checkRequest(string,string,string)", +"3f883dfb": "transferExternalValue(bytes32[])", +"3f887fad": "buyShares(uint256,uint8,uint256,uint256)", +"3f89b09c": "update_fee(uint256,uint256)", +"3f8a04aa": "getCurrentUserPromoBonus()", +"3f8a4c13": "previousSnailPot()", +"3f8a92b3": "setmangeruser(address,bool)", +"3f8ae6d9": "GetUserExpire(address)", +"3f8af40c": "amendedEarlyPurchases(uint256)", +"3f8b0a1d": "getIssuedBy()", +"3f8c2582": "ethSale(address)", +"3f8c75a6": "_createLicense(uint256,uint256,address,uint256,address)", +"3f8cfba6": "lifeVestingStages()", +"3f8d9568": "buyins(address)", +"3f8d95bd": "_delete(address)", +"3f8df98d": "calculateMyReward(uint256)", +"3f8e0298": "parseTicket(uint256)", +"3f8f0714": "SimpleLife()", +"3f900962": "manualRaffle()", +"3f914aef": "setWhitelistAddress(address,bool)", +"3f923f9d": "NIZIGEN()", +"3f92edaf": "getMaxDropsPerTx()", +"3f935379": "_isSingleFlag(uint256)", +"3f94904a": "bankValReserve()", +"3f95c0c2": "timeboundTest(address,uint256,uint256)", +"3f9628e8": "addOldWithdrawals(address[],uint256[])", +"3f966082": "exchangesOwner()", +"3f96f3a3": "toInt()", +"3f97b106": "GetSuspend()", +"3f97d995": "VALIDITY()", +"3f982b74": "createInitialAllotment(string,uint256)", +"3f9942ff": "canceled()", +"3f9945d2": "ByThePeople(address)", +"3f99a12b": "saleEndBlock()", +"3f99fa54": "addInitialMember(address,uint256)", +"3f9a3886": "OWNERS_ALLOCATED_TOKENS()", +"3f9af464": "AK4Token()", +"3f9b250a": "getDocument(uint256)", +"3f9b8fdc": "updateAllowedTransfers(address,address,bool)", +"3f9c7822": "print(int256,uint256)", +"3f9cbd65": "mainSaleTokenWallet()", +"3f9ce517": "getRefAddress()", +"3f9d0954": "FarChainToken()", +"3f9d95ed": "addAcceptedToken(address,uint256,uint256)", +"3f9da856": "_addFreezer(address)", +"3f9e0eb7": "_getDaysInMonth(uint256,uint256)", +"3f9e23e5": "migrationFinished()", +"3f9e3494": "ReleaseSupply(address,uint256,uint256)", +"3f9e50fd": "LitToken()", +"3f9e9a37": "getBonusesAmount(uint256)", +"3f9e9df2": "removeInWhiteList(address)", +"3f9f5b68": "setPreviousID(uint256,int256)", +"3f9f7779": "BitCronus1()", +"3fa10e0a": "CountryJackpot()", +"3fa1436e": "updateTokenSaleState()", +"3fa1930d": "getPlayerBet(uint256)", +"3fa19804": "updateTeller(int8,bytes16,int8,int16,bool)", +"3fa21806": "lastHash()", +"3fa2dd2a": "getStage2Cap()", +"3fa2fe7a": "getActiveUserCount()", +"3fa40f94": "mintTokens(address[])", +"3fa4687b": "bytesToAddres(bytes)", +"3fa4ed06": "updateValue(bytes32,uint256)", +"3fa4f245": "value()", +"3fa54ed8": "setTileTypeAt(uint16,uint16,uint8,uint16)", +"3fa58b61": "Whitelistable()", +"3fa6010f": "setGallerySixPrice(uint256)", +"3fa615b0": "minCap()", +"3fa6497f": "AdminAddFunds()", +"3fa68836": "removeParticipant(uint8)", +"3fa69faa": "testtoken()", +"3fa6c7ca": "findLaptopUsage(address,address)", +"3fa8543a": "IMEXToken()", +"3fa8a7b8": "releaseTokenOwnership(address)", +"3fa911ae": "refundAllowed()", +"3fa9fcf8": "createPlayer()", +"3faaef28": "BurnFSATokens(uint256)", +"3faaffdb": "SCToken()", +"3fab8fb0": "EatToken()", +"3fabf8c0": "developmentAuditPromotionTokensPercent()", +"3fac68d5": "payOff()", +"3facd57c": "registerBill(uint256,address,address,uint256,uint256,uint256)", +"3facdfb6": "gatFund()", +"3fad1834": "getRequestCount()", +"3fad9ae0": "question()", +"3fadbd3e": "minTokenPurchase()", +"3fadc388": "current_plot_price()", +"3fae1928": "timenow()", +"3faed436": "setXTVTokenAirdropStatus(bool)", +"3faf511f": "vouch(bytes32)", +"3faff9d5": "purchaseTokens(uint256,address,bool)", +"3fb0b2c9": "CancelRoundAndRefundAll()", +"3fb18aec": "contains(string,string)", +"3fb1ab52": "_getUserSupportForTeamInTournament(uint256,uint256)", +"3fb1fed4": "startingExchangePrice()", +"3fb23166": "TeamVesting()", +"3fb23865": "fundingStatus()", +"3fb27b85": "seal()", +"3fb326ba": "MAX_ETHER_CONTR()", +"3fb39b8b": "rewardBeneficiary(address,uint256)", +"3fb3bec2": "deactivateTime()", +"3fb3ec28": "delegatedAmountsByDelegate(address)", +"3fb48c4c": "AAACoin()", +"3fb51a76": "frozenDaysforTestExchange()", +"3fb58819": "getMinGasPrice()", +"3fb5c1cb": "setNumber(uint256)", +"3fb64e75": "gameInProgress()", +"3fb655a3": "CPLTokenDeposit()", +"3fb8b692": "affiliateAddresses(uint256)", +"3fb92b10": "gameNbr()", +"3fb97857": "getCouponMulFactor()", +"3fbb539d": "scheduleCall(address,bytes,uint256,bytes)", +"3fbb8f98": "drawTertiaryDWinners(uint256)", +"3fbc2a1e": "preSaleTLYperETH()", +"3fbc6345": "Token_Remaining()", +"3fbd40fd": "ProcessDraw()", +"3fbda23f": "CharityToken()", +"3fbfdefc": "checkMyAging(address)", +"3fbffca6": "getTeamB(uint256)", +"3fbffcef": "bidsCount()", +"3fc0234d": "train1(uint256,uint256)", +"3fc15f15": "mainToken()", +"3fc22c51": "buyPreSaleTokens(address)", +"3fc3e53f": "Funding()", +"3fc44ab3": "setCustomEvent(uint256,uint256,bool,string,uint256)", +"3fc499b2": "ihomekey()", +"3fc4caa1": "levelThreeBonus(uint256)", +"3fc4e866": "RudiantoToken()", +"3fc50b92": "agingTime()", +"3fc523c7": "test_fourInvalidEqUint()", +"3fc5b69b": "set_sale_arbits_per_ether(uint256)", +"3fc5ed50": "_openGameResult(uint256,string)", +"3fc6a97a": "sellNow()", +"3fc6bc94": "payDAO()", +"3fc6d75a": "crowdsaleTokenPrice()", +"3fc7e3d5": "volumeType3()", +"3fc821ee": "getStackholderConfirmationCount(uint256)", +"3fc86d32": "newInvestor(uint16,address,uint256,uint256)", +"3fc8b029": "testSaleHasOwnerOnCreation()", +"3fc8ca58": "JetherToken()", +"3fc8cef3": "weth()", +"3fc90f7c": "addresses1(uint256)", +"3fc98bd5": "robotInfo(uint256)", +"3fcb21d3": "ecoFundingSupply()", +"3fcce626": "setDeprecated(address,string,string)", +"3fcd06fa": "checkMinimalGoal()", +"3fcdd2d3": "transfertoken(uint256,address)", +"3fce1b82": "addAnimal(uint8)", +"3fcead58": "TKRPToken()", +"3fd01a77": "is_purchase_allowed()", +"3fd0f727": "isIcoTrue()", +"3fd1f232": "LookAtAllTheseTastyFees()", +"3fd2300d": "curveIntegral(uint256)", +"3fd2799d": "newShortPosition(address[7],uint256[4],uint32[3])", +"3fd29369": "offer(string,string,string,uint256)", +"3fd3370a": "FooTime()", +"3fd3a371": "stageThreeEnd()", +"3fd3c997": "assetProxies(bytes4)", +"3fd68ca7": "lastCheckedToken()", +"3fd6b1db": "InoCoin(uint256,string,string)", +"3fd76a98": "MANAGEMENT_LOCKED_ALLOC()", +"3fd8b02f": "lockPeriod()", +"3fd8cc4e": "isPermitted(address)", +"3fd8cd9b": "ETHReturn(address,uint256)", +"3fd94686": "changeEligibleDonkeys(uint256)", +"3fd97621": "testTransferHandlesTooLargeRequest()", +"3fd9c56d": "checkDoubledProfit(uint256,uint256)", +"3fda1281": "get_keys()", +"3fda417a": "LADCoin(uint256,string,string)", +"3fda5389": "fill(uint256)", +"3fda926e": "addGame(address,string)", +"3fdb03ca": "getselfaddress()", +"3fdb3628": "aggregateCDPValues(bytes32)", +"3fdb372a": "buildWinery()", +"3fdb571f": "reGround(uint256)", +"3fdb705b": "platformTokenSupply()", +"3fdb8cbd": "dt()", +"3fdbb6c7": "RATE_THRESHOLD_PERCENTAGE()", +"3fdccd8d": "setDCNForGas(uint256)", +"3fdcef0d": "PRICE_BEFORE_SOFTCAP()", +"3fdcefe0": "doSelfdestruct()", +"3fddd97d": "XCoin(uint256,string,string)", +"3fdddf01": "EGGS_TO_HATCH_1PACIFIST()", +"3fdde728": "MTP_PER_ETH_SALE()", +"3fddee64": "isAgency(address)", +"3fded490": "referralDiscountPercentage(address)", +"3fdeef90": "fstSold()", +"3fe0522c": "setTravelCore(address)", +"3fe14e03": "setAuthor(string)", +"3fe3347a": "assetType()", +"3fe3df76": "leaf_from_address_and_num_tokens(address,uint256)", +"3fe3f427": "depositTokens(address,address,uint256,uint256,bytes32)", +"3fe43020": "decreaseRepAvailableForExtraBondPayouts(uint256)", +"3fe43822": "Collect(uint256)", +"3fe75b8d": "Unity()", +"3fe80d6e": "begin(uint256)", +"3fe97ead": "left49(uint256)", +"3fe9bf0e": "createContract(bytes,uint256)", +"3fe9f2a4": "EventCentsPerEtherChanged(uint256,uint256)", +"3fe9f2b2": "totalPublicFundingSupply()", +"3fea1c2b": "getIHand(uint32)", +"3fea2313": "ProposalAdded(address,address,uint256)", +"3feab517": "DreamCoin(uint256,string,uint8,string)", +"3feafa87": "NucleusVisionToken_ASTER8793()", +"3feb1bd8": "transfer(bytes32,address,uint256)", +"3feb4f83": "BankeraToken(uint256,uint64)", +"3feb5f2b": "investors(uint256)", +"3febb070": "backlogAmount()", +"3febe823": "ClapClapToken()", +"3fec0561": "addclip(address)", +"3fec156b": "timeLockTeam(address)", +"3fec1a75": "setIcoDiscount(uint256)", +"3fec4a4c": "queryjingzhi(uint256,string)", +"3fec91a4": "addProposal(uint256)", +"3fecde21": "setTilePrice(uint8,uint256,address)", +"3feced03": "minAmountWei()", +"3fed491f": "testStoreBalanceAfterCheckout()", +"3fedcc31": "transfer(uint256,address,address,address,uint256,bytes,bytes)", +"3fee28b1": "logEthTx(bytes32)", +"3fefc25d": "getFundByManager(address)", +"3fefdb01": "setStageGenomes(uint8,string,string,string,string,string)", +"3feff510": "showMainERC20()", +"3feff76d": "tokenaddress()", +"3ff00ba5": "airdropMinting(address[],uint256[])", +"3ff0a1e5": "FoundToken()", +"3ff0ab0b": "updateUserDetails(bytes32)", +"3ff11c8b": "right85(uint256)", +"3ff1a578": "IsCheckNeeded(uint256,uint256)", +"3ff1d68f": "_totalXT()", +"3ff1dcf6": "PermianICO()", +"3ff1e05b": "viewBalance()", +"3ff20c8a": "setPause(uint8)", +"3ff26c01": "catches(address)", +"3ff33185": "newCaller(address)", +"3ff42b92": "marketingAddr()", +"3ff4d491": "checkFile(bytes32)", +"3ff5481d": "cancelSellBlock(uint256,uint256)", +"3ff54c71": "issueTokens(address)", +"3ff66381": "ACCC()", +"3ff69113": "myEntityCount()", +"3ff7f21c": "mulFactor()", +"3ff8c954": "addAnimals(uint8)", +"3ff8da5f": "recipient3()", +"3ff98455": "set_participant(address,address,uint256,uint256,uint256,bool,uint8)", +"3ff9a877": "makeXID(uint256)", +"3ffa274a": "transfersAllowedTo(address)", +"3ffb8f27": "changeMinter(address,int256,address)", +"3ffbd47f": "register(string,string)", +"3ffc2832": "_buyIcsTokens(address,uint256)", +"3ffc813f": "toCompare(uint256,uint256)", +"3ffd2798": "distributeAdviserBounty(address,uint256,bool)", +"3ffdabda": "poi_token()", +"3ffe5eb7": "claimWork(uint256,uint256[2],bytes32)", +"3fffebbd": "setBonusUser(address)", +"400002c4": "modifyOpenStatus(bool)", +"4000164d": "getClaimData2(uint256)", +"4000601f": "sellStakes(address,address,uint256,uint256)", +"4000aea0": "transferAndCall(address,uint256,bytes)", +"4000d5c3": "BACTest1Token(uint256,string,uint8,string)", +"4001261e": "activeTier()", +"40015d99": "getProviderInfo(uint256)", +"4001cee6": "getPeerOwnership(address)", +"4001e364": "SendEthOff()", +"40026c87": "getSubcourt(uint96)", +"4002d3fd": "LargeFunction()", +"4002eda6": "nextRoundId()", +"4002f0b0": "CheckCourse(uint256)", +"40032d8d": "checking(string,uint8,bytes32,bytes32)", +"400351cb": "applyForCandidate(string,uint256,string,string,string,uint256,bool)", +"4004b6da": "getAmbassador(address)", +"40058f61": "TIER2()", +"40066733": "getTotalVotersCount()", +"40067c91": "VoteFactory()", +"4006ccc5": "exchangeRatio()", +"400718ea": "expressBuyNumSec(uint256,uint256[],uint256[])", +"40079df0": "getDividendIndex(uint256,int256)", +"40086158": "calculateHash()", +"40086aa0": "directDebit(address,address)", +"400a44b2": "EE(uint256,string,uint8,string)", +"400a4deb": "sendPresaleTokens()", +"400aaab7": "CTOC()", +"400aae08": "isInCurrentGeneration(address)", +"400adee3": "releaseByCount(address,uint256)", +"400b56e5": "setReg2(uint256)", +"400b8bf8": "releaseMintTokens()", +"400ba069": "calculateFee(uint256,address)", +"400bb308": "SimpleTGE(address,uint256,uint256,uint256,uint256)", +"400bbbd8": "rebalanceGetTokensToSellAndBuy()", +"400d1f45": "dtGetEthBalance(address)", +"400e3949": "numProposals()", +"400eb4f5": "ParaType()", +"400ee783": "TOKENS_LOCKED_1Y_TOTAL()", +"400f7a1e": "getPairInfo(address,address)", +"400ff9a4": "BuyGold()", +"4010a018": "fundAvailable(address)", +"40111f6d": "RESERVED_TOKENS_BACE_TEAM()", +"40117f50": "CanalToken()", +"4011baf9": "MARKETING_POOL_TOKENS()", +"401214a7": "updateParams(uint256,uint256,uint256,uint256,uint256)", +"40128db3": "registerAsDelegate(bytes32)", +"40129a40": "updateAddress(bytes32,address)", +"4012e02e": "Info()", +"401356f1": "Salt()", +"40135913": "releaseImpl(uint256)", +"4014c1c7": "changeMutagen2FaceContract(address)", +"4015e83b": "renExTokensContract()", +"401611ed": "acceptEndorsement(bytes32,bytes32)", +"4016535a": "parseBlock(bytes,uint256)", +"4016e969": "allowOwner()", +"4018e263": "stageTwoCap()", +"40193883": "goal()", +"40193d17": "getPongvalConstant()", +"40194596": "RealBloq()", +"4019fc54": "masterTokenBalanceHolder()", +"401b57b5": "transferLockedToken(uint256)", +"401bd3fe": "distributeEth(address[],uint256[])", +"401c3ba1": "LogClaimRefund(address,uint256)", +"401d7175": "_buyShip(uint256,address)", +"401dc09f": "setGeneSynthesisAddress(address,address)", +"401e3367": "transferFrom(address,address,uint256,bytes32)", +"401e77de": "GameCreated(bytes32,address,string,string,uint16,uint64)", +"401f2be5": "collectRemainingFunds()", +"40202f9d": "LogTransaction(address,uint256)", +"4021581a": "dollarBalance(address)", +"40217452": "ProdBToken()", +"40217786": "setRatePerOneEther(uint256)", +"4021d93c": "Alibabacoin()", +"40220b03": "previousVersion(bytes32,bytes32)", +"40222b64": "allocationsIndex(uint256)", +"40229e14": "B_Com()", +"4023da38": "Bacini(uint256,string,uint8,string)", +"40243ecd": "SimplePaymentChannel(address,uint256)", +"402456c0": "bank1Val()", +"4024a33e": "stageBonusPercentage(uint256)", +"4024db80": "license(bytes32)", +"4024eb2a": "approveAndCallN(address,uint256,uint256)", +"4025005a": "SmartIdentity()", +"4025b22d": "getShip(uint256)", +"4025b293": "redeemAllOutcomes(bytes32,uint256)", +"4025b5a8": "ownerUpdateContractBalance(uint256)", +"40267e53": "updateWhitelistBatch(address[],uint8)", +"4026b261": "PlatoToken()", +"4026c101": "deathFactor_iii()", +"4026eb92": "endround()", +"4027522c": "DanetonToken()", +"40275f73": "addMapping(string)", +"40275f85": "getPersonalDepositAddress(address)", +"40277604": "collectedFeesInTwei()", +"40278124": "setListedTime(uint256)", +"4027b475": "MasterCardEscrow()", +"4027d4d8": "spendFromSwap(bytes32,uint256,address)", +"4028354b": "PlaceADiceBet(uint8)", +"40285ad5": "setfees(uint256)", +"4028db79": "isFrozenAccount(address)", +"402914f5": "claimable(address)", +"402962bc": "deleteAddressesFromWhitelist(address[])", +"4029a3ce": "mintMany(address[],uint256[])", +"402a1533": "angelAmountRemaining()", +"402b2bca": "IcoStartDate()", +"402bf0ab": "_delHolder(address)", +"402c5644": "XNON()", +"402c569c": "unlockBonusTokensClaim()", +"402caccd": "RANGESTART_6()", +"402d1c9c": "CONFIG_MAX_EXPOSURE_MUL()", +"402d5f2e": "unlockTokenPriceChange()", +"402d8883": "repay()", +"402e46b9": "finito()", +"402e6230": "getTotalGambles()", +"402e912f": "issuedInsurance()", +"402eb694": "reliabilityPercentage()", +"40307cdd": "setCOMMUNITY_POOL_ADDR(address)", +"4030bc19": "sendRTB(address,uint256)", +"4030ddc0": "blockVContractAddr()", +"4031f60d": "INMCOIN()", +"40326686": "paymentsFinished(uint256)", +"4032b72b": "addKeeper(address)", +"4033236e": "getProofOfStakeReward(address,address)", +"4033c268": "isFullInvest(address,bytes5)", +"4033cd77": "applyForCertification(string,string,string,uint256,bool)", +"403446bd": "getPlayersFibokens()", +"4034af00": "setWhitelistInternal(address,bool)", +"4034b817": "loadVersion(address)", +"4034cfed": "fundWallet1()", +"403575f7": "setMaxMessagesTop(int32)", +"4035d16a": "createPromoCovfefe(address,string,string,uint16,uint256)", +"403639d5": "StartSale(address,uint256,uint256,address,address,uint256,uint256,uint256)", +"40365852": "roundStart()", +"4036778f": "reveal(uint256,bytes32)", +"4036ab78": "getType(uint256)", +"4036ff30": "changeHouseCutPercentage(uint256)", +"403911a6": "tokenSaleStart()", +"40394dcc": "freezeAccountByTime(address,uint256)", +"403988c6": "setCustodianName(address,bytes32)", +"403a0a78": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32,uint256)", +"403a734a": "MMMbCoin(uint256)", +"403a8f53": "registerForRaffle2()", +"403abbc7": "updateFirstActiveGamble()", +"403b0cfd": "LogErr(uint256)", +"403b3757": "getValueTip(uint256)", +"403b7d9b": "secondRoundICOEnd()", +"403bb94e": "StatsEthereumRaised()", +"403c617e": "Hydrogen()", +"403c9fa8": "getPot()", +"403d8a6a": "initialMartialTimes()", +"403dca55": "totalIssuedSynths(bytes4)", +"403de107": "executeDecision(uint256)", +"403e73ea": "_DemSinhVienDat()", +"403f6cff": "putInWinnerPool(uint256)", +"403fbf54": "initiateEthUsdOracleUpdate(address)", +"40400fa7": "getBurnedItemCount()", +"404239f6": "validateLegalRate(uint256,uint256,bool)", +"40426fb0": "stopIssuing(uint256)", +"40429946": "oracleRequest(address,uint256,bytes32,address,bytes4,uint256,uint256,bytes)", +"4042b66f": "weiRaised()", +"40440891": "Donate_some_amount_and_save_your_stake_rewards(uint256)", +"40441eec": "balance2()", +"40445a4f": "numTiers()", +"4044856a": "preIcoEthers()", +"4044e8ec": "cancelOrderWithPayer(string,address)", +"4045c846": "setAccreditationActive(bytes32,bytes32,bool)", +"404635db": "_canBreedViaAuction(uint256,uint256)", +"404704b9": "sendBounty(address,uint256)", +"40477126": "exchangeTokens(uint256)", +"404823d1": "wagerPool()", +"40482475": "startTokenSwap()", +"4048c449": "getParent(bytes32)", +"40490a90": "getMultiplier()", +"40496aef": "SecuredWithRoles(string,address)", +"404983fb": "addsm(uint256,uint256)", +"40499ae8": "approvedTill()", +"404a9272": "promoEndTime()", +"404ae80c": "_randomCardSetIndex(uint256,uint256)", +"404cbffb": "entityList(uint256)", +"404cf932": "mintStart3()", +"404d0e3e": "gen0CreationLimit()", +"404ed1fa": "_founder_two()", +"404ef602": "disapproveToSell(uint256)", +"404efc53": "left26(uint256)", +"404f7d66": "challengeExit(uint256,uint256,uint256,bytes,bytes)", +"404f8dc8": "KRW_Omnidollar()", +"404fdfdf": "_setTempHeroPower()", +"4050a394": "getWishName(uint256)", +"40510399": "miningKing()", +"40512dcc": "TotalDividendsPerShare()", +"405136fa": "multiSendEth()", +"40517083": "dig(uint256)", +"4051ddac": "getSummary()", +"4051ed26": "BONUS_SLAB()", +"40520f85": "tokenToEtherRate()", +"40523946": "spectreTeam()", +"40528f98": "ownerUnlock(address,uint256)", +"4052c02a": "ProToken(uint256,string,uint8,string)", +"405353b5": "NPToken()", +"4053873c": "_safeTransferTkn(address,address,uint256)", +"4053c797": "save(bytes32)", +"40543538": "get_asset_events_count(bytes32)", +"4054834a": "refferedBy()", +"4054f5de": "EthVentures3()", +"40556191": "getCrowdsaleWhitelist()", +"40557cf1": "saleRate()", +"40557e87": "totalBondSupply_BEAR()", +"405665fb": "isMeInWhiteList()", +"4056675e": "transferTokenOwnership()", +"4056f8a8": "minimumTokens()", +"4056fe06": "MAX_GOAL_EBC()", +"405710a8": "sentTokensToCompany()", +"40582f13": "getWeiRaised()", +"405871e5": "SealPrivateCrowdsale()", +"4059240c": "intervalNow()", +"405a66da": "claimOtherTokens(address)", +"405abb41": "updateRate(uint256,uint256)", +"405b8816": "testIsContractZero()", +"405bd7bb": "getCurrentNumberOfVoters()", +"405c649c": "timeLeft(address)", +"405c6f6e": "addDelegate(string)", +"405cae3b": "LOG_SpinExecuted(bytes32,address,uint256,uint256,uint256)", +"405cb7f6": "KimJCoin()", +"405d1c32": "_getVATToPay(uint256,uint256,address)", +"405d3adf": "exchange(bytes4,uint256,bytes4,address)", +"405dd87c": "EAT()", +"405df338": "start_PREICO()", +"405f63e7": "MANHATTANPROXY9THCOLAVE()", +"405f8006": "BlocToken()", +"405fea2f": "setTokenAudit(address,address,address,address)", +"4060d9f5": "isCarSpecial(uint256)", +"40621412": "BetexICO(uint256,uint256,uint256,address,address,address)", +"4063d563": "advertise(address)", +"406499d2": "Redhorse()", +"40650c91": "MIN_CONTRIBUTION()", +"40652435": "BURENCY()", +"40654e14": "balanceOfEth(address)", +"40656963": "contribute(bool)", +"40664496": "getTransferFee(address,address,uint256)", +"4066fdea": "feeProvider()", +"4067ffda": "transactionsOnForHolder(address)", +"406838b3": "etoken2()", +"40684172": "getICORaisedAmount()", +"406843ee": "recommendProportion()", +"4068665d": "TokenVesting(address,uint256,uint256,uint256,bool,address)", +"40695363": "floor()", +"40695625": "testRetractLatestRevision()", +"40698729": "withdrawERC20s(address,uint256)", +"4069925a": "releaseVested(address)", +"4069de8b": "MultiSender(address,address)", +"406a0e61": "VOLUME_50()", +"406a1180": "FATRANSOM()", +"406a318e": "getCitationRecordsLength(bytes32)", +"406a6f60": "attachToken(address)", +"406af848": "ArenplayToken()", +"406b0593": "tokenHoldersByIndex()", +"406b9394": "level0(address,bytes32,uint256)", +"406c22d3": "getLocalNodeReputation(address)", +"406c52d5": "changeElectorate(address)", +"406c5590": "FILO()", +"406c6633": "moveToNextCeiling()", +"406c92b5": "PRIVATE_SALE_MAX_ETHER()", +"406d7e98": "isAllowingTransfers()", +"406d81c7": "safeSendFunds(address,uint256)", +"406f1d22": "crowdSaleApprove(address,uint256)", +"406f390c": "_unsafeCall(address,uint256)", +"407001c6": "TruSale(uint256,uint256,address,address)", +"4070372d": "earlyInvestorsMintedTokens()", +"40710587": "usersCanSell(bool)", +"407167b6": "cantEntidades()", +"40716fc7": "DunderBet()", +"4071f89b": "payCharity()", +"40722e3e": "getNameReaderId(bytes32)", +"407235ba": "LogStop()", +"407255b5": "getWhitelistByIndex(uint256,address)", +"407299ba": "getWarriors(uint32[])", +"4072eee2": "getTopic(address,uint256)", +"4073002e": "AssetCollectionNum()", +"40731c24": "getPost(uint256)", +"40732c89": "makeDeposit()", +"40734387": "termination()", +"407456d1": "fundsOf()", +"407489ff": "concat_nodes(address[])", +"4074c648": "createPromoCollectibleWithMining(uint256,address,uint256,uint256,uint256,uint256)", +"407532bb": "presaleFundingTargetInEther()", +"40753a76": "addSupply(uint256)", +"40754714": "blockClient(address)", +"407617e5": "updateAmountIncrease(uint256)", +"4076a248": "BetPower()", +"40773279": "pay_Bounty(address,uint256)", +"407787e6": "Division(uint256,uint256)", +"4077aa14": "coreStaffAmount()", +"4077aaf8": "totalBountyTokens()", +"4077ef5d": "getMiniPoolEdit_4()", +"40784ebd": "slashInvalidUsername(string,uint256,uint256)", +"40786dec": "mint(bytes32,uint256,bytes32)", +"4078fca8": "feeETH()", +"40799f4c": "currentDayRate10000()", +"407a5c92": "getAdminLogN()", +"407a6727": "totalVIP()", +"407b899b": "returnInt64(int64)", +"407c554a": "getTSTTokenAddress()", +"407ca6f8": "BsktToken(address[],uint256[],uint256,string,string)", +"407cba67": "buyKNOW()", +"407cfe5e": "get_all_players()", +"407d0cd0": "addGame(string,uint256,bytes32[])", +"407d1a0c": "unstoreHorsey(uint256)", +"407d2a67": "_figthCommander(address)", +"407d552a": "jackpotTokenWinRewardRate()", +"407e5e5d": "newVoting(bytes,string)", +"407e9588": "rejectMintRequest(uint256,string)", +"407e9e2c": "setcommissionCompany(uint256)", +"407ea214": "getPortion(uint256,address)", +"407ed2e2": "ComputeSell(uint256)", +"407f56e5": "HEAL()", +"407f8001": "secondsPerPeriod()", +"407fb687": "exchangeEtherForNomins()", +"407fc2e8": "eggsSold()", +"407fcc31": "tokenPriceUSD()", +"407fce7b": "left12(uint256)", +"4080277f": "guhb(address)", +"408056e4": "weiMinInvestment()", +"408057c4": "getStockCount(address)", +"40806f7c": "getAvailableFees()", +"40807049": "transferManyLands(uint256,uint256[],address)", +"40809acd": "stake(uint256,uint256,address,address)", +"40809f9d": "calcEma(uint256,uint256,uint32,uint256)", +"4080c884": "XstarToken()", +"40811e90": "transferDataAuthority(address)", +"4081c065": "massGrant(address[])", +"4081d916": "checkPlayerExists(address)", +"408275bb": "transferToVault(bytes32,address,address,uint256)", +"40828698": "s(address,address,uint256)", +"4082b499": "totalNumberOfPurchases()", +"4082defb": "isBasicAccount(address)", +"408318ae": "addAllowCnsContract(bytes32,address,bytes32)", +"4083c555": "Oasis(uint256,string,uint8,string)", +"4083cdbb": "changeTokensLimit(uint256)", +"4083e2af": "getFinalRoundPoints(uint160)", +"4083e935": "transferEthersInternal()", +"40844a8d": "safeDeduct(uint256,uint256)", +"40848af5": "markMyWord(bytes32,uint32)", +"4084c3ab": "finalizedBlock()", +"40857e02": "create(address,address,uint256,bytes32,int256)", +"4086b620": "sweepsCreationTime()", +"408760b8": "setAngelLastVsBattleTime(uint64)", +"40876f6e": "getMaxMakerAmount(address,address,bytes)", +"4087908f": "RicoToken()", +"40884c52": "getOracles()", +"40890bc2": "getCurrentProvider()", +"408938d0": "testUpdatePackageDb()", +"4089462d": "registerPackage(bytes32,string)", +"40896550": "bountyTotal()", +"4089b170": "totalPayouts()", +"4089d22a": "buyDepo(address)", +"408a2ac9": "addNewSupplier(address,address,uint256)", +"408a8094": "releaseTeamTokensAfter24Months()", +"408aee81": "removeVendorByAddress(address)", +"408b9945": "getBuyerNumber()", +"408bcbda": "getBalancesLength()", +"408bf4c3": "getAllCompanies()", +"408c1932": "distributeDisputeFunds(address,address,address,address,uint8,bool,address,uint256,uint256,uint8)", +"408cfe24": "iToken()", +"408d407d": "getClaimData(uint256,uint256,uint256)", +"408d5773": "createContractCovfefe(string,string,uint16)", +"408d947e": "SmartToken(string,string)", +"408d9e35": "ExecutorChanged(address)", +"408e097c": "createDestructibleCloneToken(address,uint256,string,uint8,string,bool)", +"408e2727": "votingActive()", +"408e2eb4": "ico2Tokens()", +"408ee7fe": "addAlerter(address)", +"408fef2e": "requiredMessageLength()", +"40901b08": "p_setLimitedReferralsMode(bool)", +"40908298": "allowedAddress(address)", +"4090cb64": "getWToken()", +"4090e696": "GetMinCost(uint256,uint256,uint256)", +"4091adf5": "onlyOwnerGetCompanyWallet()", +"4091ca4c": "gettopuser(address)", +"4091f4c6": "refreshMonarchyGames()", +"409242fc": "citation(uint256)", +"4092a611": "upVote(bytes12,bytes12)", +"4092acdd": "tokenFulfillmentDeposit(address[2],uint256[8],uint8,bytes32[2])", +"4092e2c2": "addMember(bytes32,address)", +"409315ce": "executePure()", +"4093b49c": "votes_for()", +"4094ac75": "ProofOfWeakHandsClassic()", +"4094ef5e": "addDataRequest(string)", +"40953102": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8,uint256)", +"40954254": "addPublicSalesSpecialUser(address)", +"4095fbba": "SubmitTransaction(bytes32)", +"40966a97": "CMCEthereumTicker(address,uint256)", +"40976b60": "setNewAgent(address)", +"4097d865": "increaseRound()", +"40980953": "setWhitelistOff(bool)", +"409817b1": "FOTToken(address)", +"40992e9d": "getTotalAirDroppedAmount()", +"40998845": "_recordName(address)", +"409a3d8f": "ALLANCOIN()", +"409b479c": "GetTotalPlayers()", +"409bc43c": "changePersonalMaxcap(uint256)", +"409bd95b": "getProductionTimeBusiness(uint256)", +"409c7baf": "BONUS_MIN_DURATION()", +"409c962e": "view34()", +"409dba83": "calcKeysReceived(uint256)", +"409e81a4": "Create(uint256,uint256,uint256,uint256,bool)", +"409ed1db": "setCCH_edit_5(string)", +"409f2607": "ESCOToken()", +"409f33c1": "sumPublicSale()", +"409fb4c0": "configMaxKeys()", +"409fc358": "canGiveMoneyBack()", +"40a0dd4b": "updateStateBasedOnTime()", +"40a141ff": "removeValidator(address)", +"40a19a71": "BLOCKSUNTILCLEANUPSTACK()", +"40a1b96e": "getTickets(uint8)", +"40a1f4d5": "invalidateStage(uint256)", +"40a1f87d": "getTotalLockedTokensPerUser(address)", +"40a203c4": "CoinVillaIssued()", +"40a2bfc1": "setXPAAssets(address)", +"40a3a9c7": "createTokenLocker(address,address)", +"40a3d246": "toggle()", +"40a401d0": "setMonsterIndexToOwner(uint256,address)", +"40a4437e": "setBattleProviderAddress(address)", +"40a45440": "getPlayerBetNumbers(address)", +"40a49a96": "searchSmallestInvestor()", +"40a4c3cc": "loanCreator()", +"40a4c580": "validateTransfer(address,address,uint256,bytes,bytes)", +"40a50a5e": "setNormalBuyLimit(uint256)", +"40a51199": "PubPresale(address,address,address)", +"40a53017": "FeedEgg()", +"40a53ab9": "replaceAuditorRegistry(address)", +"40a5737f": "setIndex(uint256)", +"40a57cb8": "makeAdmin(address,bool)", +"40a5bfc5": "PentacoreToken()", +"40a72363": "sigTeamAndAdvisersAddress()", +"40a7ed8b": "uintFunc(uint256,uint256,uint256)", +"40a806ed": "_borrowTokenFinal(address,bytes32,uint256,uint256,address,address,bool)", +"40a8a96c": "KingdomCreatedEvent(uint256)", +"40a915a5": "setTokensLocked(bool)", +"40a92f0f": "setMinSign(uint40)", +"40aab81b": "UpdatedBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32,address)", +"40aad0fe": "getUserPair(address)", +"40ab2634": "lastBlock_f8()", +"40ab4879": "pePrice()", +"40ab7b8c": "bnt()", +"40ac40b2": "setInvitationMultiple(uint256)", +"40ac89a2": "returnInvestment()", +"40acbee3": "TokenFactoryAirdropToken()", +"40acf805": "setCompanyInfo(bytes32,string)", +"40ad654c": "transferForVote(address,uint256)", +"40adf94e": "setOraclizeGasPrice(uint256,uint256)", +"40ae0851": "withdrawEtc(address,uint256)", +"40aec640": "bonusState()", +"40aee1a9": "numHashTypes()", +"40af1a45": "PrivateSaleDays()", +"40b00033": "deposit(string,uint256,bytes,uint8,bytes32,bytes32)", +"40b0a77f": "updateInstantTrade(address)", +"40b0c3d1": "DiligenceToken()", +"40b12b40": "testIsTrue()", +"40b14606": "getOverPLayer()", +"40b1ad52": "slashReservedUsername(string,bytes32[],uint256)", +"40b31937": "pledgeDecline(uint256)", +"40b359f5": "markTaskCompleted(address,bytes32)", +"40b43701": "getSetting(uint256)", +"40b5336d": "_updateDepositCountry(uint256,uint256,uint256)", +"40b5886b": "getHotWalletAddress()", +"40b5ce01": "fightStartTime()", +"40b60b85": "forceBuyback(address)", +"40b61fe9": "removeOperator(address,address)", +"40b6290f": "acceptSale()", +"40b6c71f": "EthLyteToken()", +"40b73897": "getFeeWindow(uint256)", +"40b74c91": "dislikeArtist(address)", +"40b7802d": "GiveUpTheDough(address)", +"40b7b240": "calculateAmount(address)", +"40b80684": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE4()", +"40b8783d": "raiseSlammer(bytes32,bytes32,bytes32)", +"40b8d53a": "startFeeExit(address,uint256)", +"40b98253": "canContribute()", +"40ba0e94": "getRegion(uint256)", +"40bb28e8": "watchVideoB(address)", +"40bb8474": "RENEETOKEN()", +"40bbf5b9": "ChunksToken()", +"40bc9308": "startTimeRound1()", +"40bcff15": "bet1000_01eth()", +"40bd8720": "_changeOslikiFoundation(address)", +"40bdd3e9": "bytesEqual(bytes,bytes)", +"40bea8d2": "lockedEndTimeOf(address)", +"40beafc9": "depositToTWI(uint256)", +"40beee2b": "setPermanentPlatinumLevel(address,string)", +"40bf6424": "removalPrice()", +"40bff23d": "_createCard(uint256,address)", +"40c00acf": "invest_mined()", +"40c05401": "getWithdrawableAmountFIIT(address)", +"40c0bcb9": "checkBetNumber(uint8,address,bytes32,bytes32)", +"40c0c5ff": "PityToken()", +"40c0ece3": "updateMyReturns(uint256)", +"40c10f19": "mint(address,uint256)", +"40c243c9": "totalEthRefunded()", +"40c2dc4a": "getCCH_edit_6()", +"40c3198e": "getBenzByOwner(address)", +"40c3418c": "sendCrowdsaleBalance(address,uint256)", +"40c36524": "getFreeHatchCnt()", +"40c37ed2": "sellGameLockedToken(uint256)", +"40c3a6db": "MaxNumberOfBetsChanged(uint256)", +"40c3b187": "left37(uint256)", +"40c3b18e": "approveTransferableToggle()", +"40c44c5b": "DivisibleFirstCommonsForumToken()", +"40c44f6a": "setNewCFO(address)", +"40c48c8d": "setNewPriceInFinney(uint256)", +"40c48dfa": "Entropy()", +"40c558b2": "releaseCatIndexUpperBound(uint256)", +"40c58b2b": "get_foreign_balance(address)", +"40c5b34e": "currentPhaseId()", +"40c65003": "bonusEnds()", +"40c657c7": "buyTokens(address,uint256,uint256,uint256,uint256)", +"40c73d17": "changeAnimator(address)", +"40c7535b": "TangToken()", +"40c7e279": "requiredPlayers()", +"40c7e707": "contributeBTC(address,uint256)", +"40c85a59": "getLestCommonMulArray(uint256)", +"40c87214": "_startNewMiningEpoch()", +"40c8a90a": "GetLastMsg()", +"40c91c05": "submod(uint256,uint256,uint256)", +"40c92ae6": "multisigwallet(address[],uint256)", +"40c97617": "getReferralAddressShare()", +"40c9adcf": "_cancelOffer(uint256)", +"40c9e804": "SanityRates(address)", +"40ca0f05": "W0keAFPresale(uint256,uint256,uint256,address)", +"40ca925d": "ChannelManagerContract(address,address)", +"40caae06": "setOwner()", +"40cc1239": "TokenEmission(string,string,uint8,uint256)", +"40cc35ce": "teamWithdrawalProposed()", +"40cc8854": "bite(bytes32)", +"40cd988d": "refundBroadcaster(uint256)", +"40cde403": "exchangeBalanceOf(address)", +"40ce1d43": "EWWCOIN()", +"40ce5062": "isPublicSaleNoBonus()", +"40ceb451": "increasePromoCreatedCount()", +"40d0a103": "MarketOrderEvent(uint256,uint128,uint8,uint16,uint256,uint256)", +"40d113da": "sqrtAsm(uint256)", +"40d1d255": "claimEndTime()", +"40d1df53": "etStringValue(bytes32)", +"40d21e6a": "getRelations(uint256)", +"40d22cf8": "completedTasks(uint256)", +"40d2e73c": "VanHardwareResourcesChain()", +"40d32df9": "MetaIdentityManager(uint256,uint256,uint256,address)", +"40d3d25a": "playersStorage(address)", +"40d40a72": "MANAGE_CAP()", +"40d48958": "_endTime()", +"40d67116": "setTokensPerOneETH(uint256)", +"40d681cb": "setupPresaleClaim()", +"40d699b7": "deathData_a4()", +"40d75432": "provideExchangeRate(uint256,uint256,uint256)", +"40d7b7b8": "dollarPrice()", +"40d7f7e8": "Staked(address,bytes32,uint256,uint256,uint256,uint256)", +"40d815cf": "Cyberium()", +"40d84b52": "updateCase(address,uint256)", +"40d8c74f": "checkForPayout()", +"40d96e6c": "finalizeSale3()", +"40da948f": "updateUnit(uint256)", +"40db4b09": "tokensOwedByInterval(uint256,uint256,uint256)", +"40dca307": "buyCoinsUpdateState(uint256)", +"40dda9af": "USER_LOCK_BLOCKS()", +"40de2784": "buildICOStageTwo()", +"40debefd": "SomeCoin(string,string,uint8)", +"40dee0c5": "LogRedeem(address,uint256,bytes32)", +"40df280e": "alliesContract()", +"40df78b6": "bankBurnFrom(address,uint256)", +"40e0653c": "_getLevel(uint256)", +"40e099ac": "makePromise(uint256)", +"40e15134": "presaleDist()", +"40e1e62b": "RedSoxYankees412()", +"40e2ad58": "buyOwnedPixels(bytes32)", +"40e31490": "killAnimal(uint16)", +"40e40765": "setTokenSaleHardCap(uint256)", +"40e424ee": "chooseWinner(bytes32)", +"40e4ebf4": "GenDayRatio(uint256)", +"40e50d00": "gcsc(uint256)", +"40e58ee5": "cancel(uint256)", +"40e5f3cb": "getEtherBalanceOnCrowdsale()", +"40e63ef3": "getPubKeyByHash(string)", +"40e687a9": "blockno()", +"40e6b00a": "createRefundPoll()", +"40e7261d": "Golem()", +"40e87f13": "dropTokenV2(address[])", +"40ebe5bc": "SHARD()", +"40ec0b6a": "isCurioAuction()", +"40ecb7f2": "isTransferValid(address,address,uint256)", +"40ed79f4": "hashimoto(bytes32,bytes8,uint256[],uint256[],uint256)", +"40eddc4e": "getCollectedEther()", +"40ee2485": "CryptoCovfefes()", +"40eedabb": "leader()", +"40ef4704": "getState(bytes10)", +"40ef78a7": "getExploreData(uint256)", +"40f03605": "existingContribution(address,address)", +"40f04616": "_buyDiscountTTW(uint256,uint256,address,address)", +"40f0a21f": "ceil(uint256)", +"40f10af2": "revokeAttribute(address,address,string,bytes)", +"40f12a02": "getPureWeaponDamageFromTokenId(uint256)", +"40f13c0f": "mintingFoundersFinish()", +"40f13db5": "addWhitelisted(address,address)", +"40f19da7": "isFinish(bytes32,bytes32)", +"40f29da3": "testReturnsProductInformation()", +"40f2a50b": "findDsp(address)", +"40f313b9": "ImportRemappingTestA()", +"40f354f3": "insertTopic(bytes15,address,string,string)", +"40f3633e": "icoMin()", +"40f3b6f1": "yourShares(address)", +"40f3c364": "ProjectTag()", +"40f47d41": "registerNameByCOO(string,address)", +"40f523f9": "TourMEToken()", +"40f54c08": "TrumpCoins()", +"40f56cfb": "PYPToken()", +"40f5c954": "sumICOStage8USD()", +"40f5ed88": "XPS()", +"40f702b4": "userInfo(string,uint256)", +"40f81cb5": "providerAllowance(address,bool)", +"40f828a2": "setLiquid(bool)", +"40f9b34c": "BetrTokenPurchase(address,address,uint256,uint256)", +"40f9c62c": "setLargeWalletAddress(address)", +"40f9cdf9": "get_tokens_count(uint256)", +"40fa368c": "getOrderHash(bytes32,uint256[2],address,bool,uint96)", +"40fa61f7": "upgradeFee()", +"40fc5e7a": "upgradeableTarget()", +"40fdef80": "administration(uint256,string,uint256,uint256,address)", +"40fdf515": "issuetender(address,uint256,uint256)", +"40fe90d0": "setFreezeOut(address[],bool)", +"40ff26ba": "adminAdd(address,string)", +"40ff38b2": "rootDomain()", +"40fff80c": "setCommissionAddress(address)", +"41002439": "amIReady(address,address)", +"410085df": "refund(address,uint256)", +"410090db": "ChangeEmissionGrowthCoefficient(uint8)", +"410158cd": "Winsshar(address)", +"4102bf5c": "getAvailableAmount(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"4102f4e8": "mToken(address,uint256)", +"41031b1d": "NutzEnabled(address,address)", +"4103257e": "ReceivedETH(address,uint256)", +"410366c1": "settleDispute(bytes32,uint256,uint256)", +"4103c4c4": "OwnedHelper()", +"410453ae": "serverEndGame(uint32,int256,bytes32,bytes32,uint256,address,address,bytes)", +"4104df21": "cardsMinted()", +"4105048d": "Revealed(uint256,uint8)", +"410520f7": "PrivateReserveCoin()", +"4105e02f": "remark1()", +"41061c04": "addVestingMember(address,address,uint256,uint256,uint256)", +"410646e0": "getUnclaimedAmount(address,uint16)", +"41068ae2": "LicenseCore()", +"41080cfa": "getLLV_edit_7()", +"41095b60": "voteForUltimateOutcome(bytes,uint16)", +"410968d8": "MajLastNotVal()", +"41097886": "LogAirDrop(address,uint256)", +"4109a71a": "CerttifyCrowdsale(address,address,address)", +"410a1d32": "getDonation(address)", +"410a1db1": "setCommunityPool(address)", +"410a6734": "setAllBlockHashes()", +"410a68b5": "setOraclizeCallbackGasPrice(uint256)", +"410ace1f": "EOSBetSlots()", +"410af6b6": "allowAddressDelegate(address,address)", +"410b1da8": "currentTotalSupply()", +"410bf4bf": "CloudMoolah()", +"410c2601": "testGetAccountBalance()", +"410c47a0": "bb(uint256)", +"410c8005": "SetReciver(address)", +"410c83a3": "get_amount_get_buy(uint256)", +"410cbcc6": "YaoToken(uint256)", +"410da27d": "surveyEndAt()", +"410dbad6": "setaddress(address,address,address,address)", +"410dcc42": "setSeedHash(uint256,bytes32)", +"410e05b3": "bdevIssue(address,uint256)", +"410e7b42": "TestCoin()", +"410e8340": "checkAndConfirm(address,bytes32)", +"41104ef9": "GlobalOperatorChanged(address,address)", +"41107bee": "parseSums(bytes)", +"4110a489": "validatorsState(address)", +"4110b2c9": "addCapital()", +"411273d8": "getTokenToEthAddOrderHint(uint128,uint128)", +"4112987c": "strConcat(string,string,string)", +"4112b7f1": "tryGetNameOwner(bytes)", +"4112ea75": "SongTokenExchangeContractSet(address,address,bool)", +"41130267": "fxxkicotestToken()", +"4113d05b": "createGen0TokenWithDna(uint256)", +"4115f883": "requestAuditWithPriceHint(string,uint256,uint256)", +"411615fd": "investorWithdrew(address,address)", +"41161aac": "X(uint256,string,string)", +"41163f7c": "deedCount()", +"4116dfc3": "getMetaDataCount(address,bytes32)", +"411735ee": "getAddressGains(address)", +"41179685": "finalizeContruibute()", +"4118cbc9": "setTokenExchangeRate(address,uint256)", +"41192788": "refund(address,address[],uint256[])", +"41193c18": "blockPlaylist(string)", +"411a1714": "setOperational(address[],bool)", +"411a1ac1": "BitcoinEye()", +"411a3dcf": "forward(address,uint256,uint256)", +"411a42ea": "ConeTest()", +"411a492e": "getNumOfLotteryTickets()", +"411ae567": "setSlogan(uint256,bytes)", +"411b007e": "founders()", +"411b65ef": "setPropertyLastUpdate(uint16,uint256)", +"411c4e72": "ModifyFeeFraction(uint256)", +"411cc791": "transferWithParams(address,uint256,uint256,uint256,uint256)", +"411d3021": "MahalaCoin()", +"411d6e19": "USDETH()", +"411dddb2": "TrueVeganCoinPresale()", +"411e6832": "tokenObj()", +"411f93d1": "transferTicket(address,address)", +"411fcce5": "BitcoinSoft()", +"41203243": "dateOfBonusRelease()", +"4120a236": "FreeNapkins()", +"4120a800": "PrepareRollEvent(address,uint256)", +"4120bcec": "forceRecoverCollateralOnBehalfOf(address,bytes32,address)", +"41215aff": "NewUpgradeMaster(address)", +"4121b9f8": "SBECoin()", +"41224405": "get_planet_price()", +"41225b0e": "broadcastSchellingRound(uint256,uint256)", +"412282cd": "addOwnerAccount(address)", +"41228803": "updateBalance(address,uint256,bool)", +"4123057e": "update_oraclize()", +"41237fd5": "levBlocks(address)", +"4123a0ac": "deleteToken()", +"4123a482": "transferTx(address,uint256)", +"4123cb6b": "m_numOwners()", +"41240314": "teamTwoSharePrice()", +"4124a6a7": "getLockedFunds()", +"41252b55": "FreezeTransfers(address,bool)", +"41264107": "TEChain()", +"412648bf": "setAvatarIndex(uint256)", +"412661c4": "_setAuth(address,address)", +"412664ae": "sendToken(address,uint256)", +"41266ae8": "Composed(uint256,address,uint32[5],uint32[5],string,string,uint8[20])", +"4126d29e": "justFailRequire()", +"412740c5": "balanceWithInterest(address)", +"41275358": "feeAddress()", +"4127d54a": "tokensForPresale1()", +"41282fe0": "usersCanUnfreeze()", +"41288e76": "sendEtherToMultisig()", +"412956ce": "goBackToPrivateSale()", +"412988e7": "subSupply(uint256)", +"4129912c": "misub(uint64,uint64)", +"4129a9d5": "newIcoRound(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4129b2c9": "getWinner(uint256)", +"4129b8ed": "remainingTokenHolder()", +"4129d7d1": "MessageSent(address,address,uint256,string,string,uint256)", +"412a5a6d": "createContract()", +"412a7be0": "athlete()", +"412b2ee0": "forkMe()", +"412c0b58": "initiate(bytes32,address,bytes32,uint256)", +"412c0c2d": "getWin(uint256)", +"412c7dfb": "FOUNDER_WALET()", +"412cbc06": "assetsCount(address)", +"412e829f": "LoveTracker()", +"412ec94f": "updateTokenPoolAddress(address)", +"412edecd": "setDAOAndMultiSig(address,address)", +"412eee05": "enactProp(uint256)", +"412f83b6": "getDelegatorUnbondingLock(address,uint256)", +"41300d03": "secondBonusRate()", +"41304fac": "log(string)", +"413100e0": "getLeftoverWei(address)", +"4131775e": "_removeUserCity(address,uint256)", +"4131f609": "verifyWining(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", +"41326679": "inVaults()", +"4132bae8": "calculateRAUS()", +"4133e7a1": "GxCancelOrders(address)", +"41348053": "ratePlanOfVendor(uint256,uint256)", +"413499f1": "deleteVoters()", +"4134a92a": "registerResource(bytes32,uint256,bytes32,string)", +"41354590": "setAtomIsBuy(uint256,uint128)", +"413699de": "setOwnerName(address,string)", +"4136aa35": "isAlive()", +"41388aed": "TokenHash(string,string,uint8,uint256)", +"41388c71": "DolyToken()", +"41395efa": "dgxBalance()", +"41398b15": "ethAddress()", +"413992b3": "createWarranty(string,string,address,uint256,uint256,uint256)", +"413a7f9a": "MethNSupply()", +"413ab4a8": "_reserve()", +"413abc3d": "min_share_price()", +"413bac7a": "jackpotinfo()", +"413bba97": "withdraw(uint256,bytes,address[])", +"413bc8eb": "TableDeRapprochement_322()", +"413c6d13": "setAddressValue(string,address)", +"413d18cb": "currentMessage(uint256)", +"413d7b08": "mainSaleTLYperETH()", +"413d9c3a": "LOCK_TIME()", +"413dc451": "countPerfClients(address)", +"413e31a8": "Testita()", +"413e4aaf": "calculateOwnerFee(uint256)", +"413e90e7": "putHashes(uint256)", +"413e920d": "oneMillion()", +"413ed292": "logState(string,uint8)", +"413f50da": "addAddressToWhitelist(uint256,address)", +"413f7d4c": "SECONDS_BETWEEN_ROUNDS()", +"414053be": "best_adjustment_for(bool,uint128)", +"41409437": "publishMetaData(bytes32,bytes1)", +"4141a121": "ETHERlemon()", +"4142f460": "segundos()", +"4143125f": "dusttorafflepot()", +"41431908": "setManagerAddress(address)", +"41434351": "oneday()", +"41445fd2": "c4c()", +"41446e0a": "bankersAcceptanceOfDeal()", +"4145aa9d": "grantMythexTokens(address,uint256)", +"41461bad": "gracePeriodStartBlock()", +"414689ff": "unlockAmount()", +"4146e099": "getCurRoundInfo()", +"4147060a": "LogRequirementChange(uint256)", +"41470877": "returnVesting()", +"4147e15e": "verifyOptionPoolMembers(address)", +"4147ffe5": "bitfwdToken()", +"41481372": "Fight(uint256,uint256,bool,bool)", +"41488cc9": "depositData(bytes32,address,uint256,address,uint256)", +"4149953d": "transferRestore(address,address,uint256)", +"414b49a2": "setFreeLOT(address)", +"414b7ad6": "updateAff(uint256,uint256,uint256,uint256)", +"414b85e4": "isPreIco(uint256)", +"414bbda2": "declineCoins(address,uint256)", +"414c2aab": "MemberHandler(string,address)", +"414c377b": "updateSaleLimit(uint256)", +"414c4a8d": "maxAmountToSell()", +"414ceac0": "investorAddFee(uint256)", +"414d784e": "DECIMAL_ZEROS()", +"414db054": "Loss(address,uint8,uint256,bytes32,bytes32,uint256,uint256)", +"414db89e": "tokenForSale(uint256)", +"414e2e9e": "walkTowardsBlock(uint256)", +"414e5738": "panicOn()", +"414ee145": "lastBlock_f18Hash_uint256()", +"415016f4": "getBalance(uint16)", +"4150f4cd": "setSysAcc(address)", +"415194fb": "referral_ledger(address)", +"41522e41": "setHighWater(uint256)", +"41524433": "sellKissBTCWithCallback(uint256,address,uint256)", +"4153090e": "startFavorEscrow(uint256,uint256,uint256)", +"41533ba7": "getRateByTime()", +"4153d65b": "securePay(uint256)", +"4153d751": "onTransferOwnership(address,address)", +"41541318": "createPromoNinja(uint256,address)", +"4154aede": "refund(address,uint256,address)", +"415510df": "addressPreSale()", +"41554a2e": "issua(uint256)", +"41555acd": "storeOwner(address)", +"41562e69": "insertNodeBatch(bytes32,bytes32[2][5])", +"41566585": "whitelistAddress(address)", +"4156fdb7": "createSwap(uint256)", +"41583c4b": "_updateCardClaimerAddress(uint256,address)", +"4158506a": "participantsLength()", +"41585a0c": "increaseCount(bytes32)", +"41587b08": "addWeapon(uint8[176],uint8,uint8)", +"4158d848": "fundChecking()", +"41595f04": "ALLOC_RESERVED()", +"4159712a": "LogOwnerEthWithdrawn(address,uint256,string)", +"415a0d46": "_preValidateTokenTransfer(address,uint256)", +"415bc701": "HCPTToken()", +"415bd3fa": "_report(bool,string)", +"415c7593": "autoRentByAtom(uint256,uint256)", +"415dd7d8": "newRandomValue(bytes,address,uint256)", +"415eea1b": "vaultNum()", +"415ef37c": "weiSold()", +"415efb15": "setup(string,string,string,uint256,string,string,uint256)", +"415f1240": "liquidate(uint256)", +"415f47ea": "decodeOrderUserId(uint256)", +"415f9498": "commission2()", +"415fad10": "test_threeInvalidEqInt()", +"415ffba7": "close(uint256,bytes)", +"416108e2": "ERRLCoin()", +"4162169f": "dao()", +"416232af": "CampaignContract(address,address,address,address,uint256,string)", +"4163afb6": "MANHATTANPROXY8THAVE()", +"4163b5a4": "weiUsdRate()", +"4163d75d": "delPokemonFromSellingList(address,uint256)", +"4165295a": "getMixParticipantIdByAddress(bytes32,uint256,address,address)", +"416608a9": "updateTemplate(uint256,uint256,uint256,string,string)", +"4166c1fd": "getElevation(uint8,uint8)", +"4166eab4": "zeastadscredits()", +"41676f15": "isOrganizer(address)", +"4167c2fd": "setVaults(address,address,address,address,address)", +"416851a0": "testOracleQuery(string,string)", +"4168614a": "volumeBonus(uint256)", +"4168de57": "teamIssueVesting(address,uint256)", +"41696fa8": "updateMyEntity(uint256,bytes32,bytes32,bool,address,uint256,uint256)", +"416a1b62": "Liquet()", +"416ae768": "getUserState(address)", +"416bc7f6": "createSplitter(address[],string)", +"416c0d38": "adminRetrieveContractConfig()", +"416c334d": "withdrawDistributedToPoolOwners()", +"416c3f16": "eligibleAmount(address,uint256)", +"416c6383": "testConcatMemory31Bytes()", +"416c8701": "beyond()", +"416c9627": "updatePresaleBonus(uint256)", +"416ccd02": "limitVIP()", +"416cf34e": "ULCToken(address,uint256)", +"416da702": "TOKEN_USDCENT_PRICE()", +"416dc762": "endThirdPeriodTimestamp()", +"416dffb0": "cleanupURLs()", +"416e517e": "setOutcome(uint256)", +"416e6d5e": "balanceManager()", +"416e70f6": "linkToMasterWallet(address,address)", +"416f222a": "submitBid(uint256,uint256,uint256)", +"416f5483": "changeEthAddress(address)", +"41709748": "getTotalDrone()", +"4170a419": "setCCH_edit_34(string)", +"4170e191": "MiniMeBaseCrowdsale(address)", +"4170ee08": "reVote(uint256)", +"41713a37": "directTradeAllowed()", +"41718066": "hitFoundationPrecent()", +"417297a0": "issueTokensSale(address[])", +"4172d080": "tokenExchangeRate()", +"41733f7a": "fooToken()", +"4173b181": "setWeiPrice(uint256)", +"4173c27a": "REEFToken()", +"4173ffbc": "getRand(uint256,uint256)", +"41744dd4": "feeRatio()", +"4174a943": "Deposited(address,address,address,uint256)", +"4174f1a5": "TOKEN_RATE()", +"4175b307": "addAddresses(address[],string)", +"41760afc": "_setEventsHistory(address)", +"41763225": "createRewardCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"4176368f": "paymentSizeE()", +"4176ce68": "IsAuthority(address)", +"41771b62": "changeFees(uint8)", +"4177340d": "openGamePlayNo(uint256)", +"4177afa6": "TIER_2_BUYIN()", +"4178617f": "addAllowedToken(address)", +"41796bea": "OfferCreated(uint256,bytes,address)", +"41799883": "decreaseSoldSaleSupply(uint256)", +"417a2909": "getUpdateTimes()", +"417a767e": "getBetsBlock()", +"417a7d60": "checkMessageData(address)", +"417b3409": "DownloadMusic(uint256,address,uint256)", +"417b86fb": "getPolicyDetailsByHash(bytes32)", +"417ba840": "checkMemberLevel(address)", +"417c73a7": "addToBlackList(address)", +"417c8d40": "SEK_Omnidollar()", +"417cb353": "totalDecimals()", +"417d5fb4": "advisersPeriodsNumber()", +"417de5b5": "mintAirdropToken(uint256)", +"417e8e67": "getCompoundedInterest(uint256,uint256,uint256)", +"417ea2dc": "platformSupplyRemaining()", +"417f204e": "GATC(uint256,string,string)", +"417fd6b6": "setMinBidAmount(uint256)", +"41808d4a": "test_remove_tail()", +"4180b70d": "KKday()", +"4180c2d5": "payout(address[])", +"4180f6ec": "RESERVED_TOKENS_FOUNDERS_TEAM()", +"4181641b": "engrave(string,bytes32)", +"41829445": "createNewCE(bytes32)", +"4182e5eb": "deleteContract(uint256,address,uint8[],bytes32[],bytes32[])", +"4182fa46": "getHouseAddressShare()", +"41831218": "maxPerPersion()", +"41832bed": "generateOrderHashes(address[4],uint256[8])", +"4183689f": "initSignetures()", +"4183f0b3": "startCardSale()", +"41843aa5": "subusermoney(address,uint256)", +"4184907e": "ESPlatts()", +"41852eb2": "BuyToken()", +"418599cb": "SerenityTeamAllocator()", +"4185f8eb": "receiveEth()", +"4185fdc5": "decreaseFrozen(address,uint256)", +"41863a7d": "victorieumICO1Token()", +"41867384": "new_bonus_for_next_period()", +"41868769": "CallAborted(address,bytes)", +"4187a193": "stageThreeStart()", +"41883b78": "withdrawHouseEarnings()", +"4188d79c": "releaseExists(string,uint32,uint32,uint32,string,string)", +"418939c0": "fillBid()", +"4189a68e": "sell(uint256,address)", +"418ae602": "verificationAddressHoldersListCountMap(address)", +"418bc2ee": "updateHatchingRange(uint16,uint16)", +"418bc76c": "gasForKWH()", +"418c7de1": "currentFulfillment(string)", +"418ca0c7": "subOnStage(address,uint256,uint256)", +"418cb077": "CustomToken()", +"418cf199": "setEstimateCost(uint256,uint256)", +"418d4dcc": "collectPayoutForAddress(address,address)", +"418d75b6": "getBuyerOption()", +"418f1487": "confirmDividendsFromPot()", +"418f3a9b": "Invest(address,uint32,uint32,uint256)", +"4190af2e": "walletTokenReservation()", +"4190cfc1": "getAllQuestionAddresses()", +"4190f365": "PUBLIC_MAX_CONTRIBUTION()", +"41910104": "returnSuspendedPayments(address)", +"41910112": "DecentBetToken(address,address,address,uint256,uint256,uint256)", +"41910f90": "BASE_RATE()", +"41923c0c": "PRICE_ICO1()", +"419259ef": "reissueCert(bytes32,bytes,bytes32,uint256,bytes32,bytes,uint256)", +"4192610e": "callThisToStop()", +"419308f7": "getPreviousNode(bytes32)", +"4193b8b7": "bytesToUint(int256,bytes)", +"4193e15f": "OrbusToken()", +"419469fe": "calculateCellSell(uint256)", +"41953e90": "CoinTel()", +"4196cd4a": "stateIndexToApproved(uint256)", +"4196fad9": "mop()", +"419759f5": "depositAmount()", +"41976e09": "getPrice(address)", +"4198d24a": "mintAllocations()", +"4198e94d": "setbounty(uint256)", +"419905e5": "pray()", +"419945f8": "ExpiringMarket(uint256)", +"4199dbe6": "avvia_votazioni()", +"419a3de6": "allotItem(uint256,uint256)", +"419a88b6": "XPA()", +"419ab31e": "USERS_address()", +"419b96fa": "removeBusiness(address)", +"419bd6c0": "Nairotex()", +"419ce264": "ercToNativeBridgesAllowed()", +"419db07b": "generousFee()", +"419e6e5c": "getTotalNamesCount()", +"419e7589": "setProviderDetails(uint256,string,string,uint256,string,uint8,address)", +"419eafdc": "winPercent(uint256)", +"419ef898": "IBRToken()", +"419f6a3a": "isAirdropOver()", +"419ffa03": "fipsRegister(address)", +"41a0894d": "getReferrals(address)", +"41a08aaf": "judge(uint256,bool)", +"41a0be7b": "renameHorsey(uint256,string)", +"41a1053f": "strRemoveLastCharacter(string)", +"41a1a582": "getOwnerPayout(uint256)", +"41a1d66c": "sendTokensToExchange(uint256)", +"41a2625f": "endPreico()", +"41a28df6": "setAdminAddr(address)", +"41a292be": "calcPriceAt(uint256)", +"41a41523": "TIMEDEX()", +"41a42ba2": "updateNetworkConnection(string,string,address)", +"41a461fb": "SDAToken()", +"41a49409": "setWhitelistManager(address)", +"41a494c5": "award()", +"41a4c309": "_burnApproveClear(address,address)", +"41a4c5bf": "changeBonus(uint256,uint256,uint256,uint256,uint256)", +"41a51d00": "total0xbtcBalance()", +"41a5518f": "getMineInfoInDay(address,uint256,uint256)", +"41a59cef": "SDGT(uint256,string,uint8,string)", +"41a5b33d": "withdrawFromToken(address,address,uint256)", +"41a6cfda": "ROSCcoin(uint256,string,string)", +"41a6f46e": "FIESTA()", +"41a70b4c": "addArgumentToRequestString(uint256,bytes32,bytes32)", +"41a76287": "updateUintSetting(uint256,uint256,address,string,string)", +"41a7726a": "subscribe(address)", +"41a806ca": "addFamily(address)", +"41a82cc1": "ruleB(uint256)", +"41a84a0d": "getTokensForContribution(address,uint16)", +"41a928fe": "downTick(uint256,uint256)", +"41a943e2": "addAdmin(address,address,bool,bool,bytes32)", +"41aaccb0": "claim_eth_by_address()", +"41abe705": "doCount(address)", +"41ac59b7": "massTransfer(address[])", +"41ac5dd0": "updateFulfillment(uint256,uint256,string)", +"41ad3f57": "chickenToAltar(uint256)", +"41ad5c72": "createGroup(bytes32,uint256)", +"41ad785e": "payAndDonate(address,address)", +"41adb3f5": "saveInfo(string)", +"41ade6b7": "setRegisteredFirm(string,bool)", +"41aeaea7": "restWei()", +"41aed7cb": "isActiveEmployer(address,address)", +"41af1524": "verificationCodeHash()", +"41affe19": "publicSaleWallets(uint256)", +"41b0b4cd": "distributedTeamStakes()", +"41b2121c": "newInvestor(address,uint256,uint256)", +"41b2485b": "fiatContract()", +"41b280d2": "getTXwithCode(bytes32)", +"41b3203c": "PlaySimpleGame(uint8,bool)", +"41b3a0d9": "contractEnabled()", +"41b3d185": "minDeposit()", +"41b44392": "removeDarknode(address)", +"41b4a626": "cashSale(address,uint256)", +"41b4be87": "getPoolbyGtype(uint8)", +"41b5467a": "getUnpaidPerfit(uint32,uint32,uint256)", +"41b6f6ce": "getStatusDeal(bytes32)", +"41b6fcf7": "paymentDigest(bytes32,uint256)", +"41b80184": "lastProfitTransferTimestamp()", +"41b8547c": "Dev_Supply()", +"41b94f10": "_toTaxed(uint256)", +"41b989d0": "CashDeposit(address,uint256)", +"41b9c14c": "getShipsByOwner()", +"41b9dc2b": "has(bytes32,bytes32)", +"41ba4738": "GOLD_AMOUNT_NDC()", +"41ba9a17": "removeMilestones(uint8)", +"41bb0559": "symbol(string)", +"41bb26d3": "handlePayment(address)", +"41bb50f7": "eachIssuedAmount()", +"41bc0b6a": "LivepeerVerifier(address,address,string)", +"41bc2bea": "setProviderOwner(uint256,address)", +"41bc7b1f": "getOracleDetails()", +"41bcd712": "RTPToken()", +"41bd84aa": "_removeAffiliate(uint256)", +"41be0a14": "SPOT9()", +"41be44d5": "XAUDToken()", +"41be84cf": "getWingsValue(uint256)", +"41beb00c": "getResult(bytes32,uint256)", +"41bec0d2": "setERC20Address(address)", +"41becaef": "tokenIssueIndex()", +"41beef9d": "getSpareRecommAddr()", +"41c06b2a": "_reached(uint256)", +"41c0aa0e": "lockUnsoldTokens(address)", +"41c0dc59": "PAYOUT_FRAC_TOP()", +"41c0e1b5": "kill()", +"41c12a70": "voteNo()", +"41c14eb4": "BrokerImp(address,address,uint256,address)", +"41c173e2": "preICO(address,uint256)", +"41c1f017": "CONFIG_MAX_EXPOSURE_DIV()", +"41c1f5b4": "dreamToken()", +"41c1f60e": "instruct_5()", +"41c2c8f6": "FutaToken()", +"41c3e7c7": "report(address,bytes32,uint256[],bool)", +"41c41025": "updateFunders(address,bytes32,string,uint256)", +"41c41923": "freeze_contract()", +"41c46ff7": "PALToken8(uint256,address)", +"41c4c7eb": "sellBreeding(uint256,uint256,uint256,uint16,bool)", +"41c5cf5c": "ICOend()", +"41c61383": "totalClaims()", +"41c6f609": "registerNewMember(address,uint256)", +"41c7eb41": "populateTrancheRates()", +"41c8146c": "changeTimeBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", +"41c838cb": "getSANitized(string)", +"41c8b1de": "lendingInterestRatePercentage()", +"41c8ba1e": "MIN_CONTRIBUTION_CHF()", +"41c9692b": "phase1Duration()", +"41c96964": "getInvestorInfo(uint256)", +"41c9c72d": "updateDelegatorRewards(address[],uint256[])", +"41ca641e": "getShareholders()", +"41ca7242": "maxCapPre()", +"41caea7d": "EventWithdraw(address,uint256)", +"41cbd6ea": "getTrustedPartner(address)", +"41cbfc7b": "getKeysByType(uint256)", +"41cc0aa5": "RET_MUL()", +"41cc8912": "renameToken(string,string)", +"41ccf987": "ownedPool()", +"41cd47bf": "FEE_NUMERATOR()", +"41cdd253": "TestFMA(uint256,string,string)", +"41ce7f23": "BACToken(uint256,string,uint8,string)", +"41ce909f": "Bitroneum()", +"41ce979d": "VanityReleased(string)", +"41ce9f0e": "setBZRxTokenContractAddress(address)", +"41cfbb96": "test_someOtherFalseTest()", +"41d003cb": "setBonusCreationRate(uint256)", +"41d00774": "CoefRew()", +"41d00b1d": "EBIToken()", +"41d03085": "NEWONE()", +"41d09fbe": "sendWinnings()", +"41d0fcb6": "setSanctuaryAddress(address,address)", +"41d15b54": "createProductionUnitTokenContract(uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"41d1a4d6": "getStrategyAtIndex(uint256)", +"41d1da19": "Cloudeb()", +"41d20767": "ethMinContribution()", +"41d2c748": "applyCoeff(uint256,address)", +"41d31feb": "get_read_only_keys()", +"41d45f4a": "UNEK()", +"41d4a1ab": "bonusToken()", +"41d4a39e": "setCrowdsaleClosed(bool,bool)", +"41d5da6b": "getMyStatus(bytes32,bytes32)", +"41d5e10c": "BittwattToken(uint256)", +"41d5f7ac": "eligibleAmountCheck(address,uint256)", +"41d76a9c": "firstTime()", +"41d80050": "FundsGot(address,uint256)", +"41d875dc": "setStr(uint256,string)", +"41d8bc5f": "setExchangeRateOracle(address)", +"41d966a3": "sendFyle(address,address,string,string)", +"41d9cc43": "forgeItems(uint256,uint256)", +"41da7538": "getJadeProduction(address)", +"41da7555": "ownerPercentage()", +"41db1875": "makeBuyOrder(address,uint256)", +"41db61e1": "toGMT(uint256)", +"41db7e16": "RGN()", +"41db8c93": "_startCrowdsale(address,uint256)", +"41dbb51e": "IsFrozen()", +"41dbbb61": "SmartexFundsManager()", +"41dbe546": "HedeCoin()", +"41dc02cf": "changePatentSale(uint16,uint256)", +"41dcf454": "tokenURI(uint256,string)", +"41de2164": "getPhaseStartTime(uint256)", +"41de4181": "fireDepositToChildEvent(uint256)", +"41de4f16": "queenchUSBToken()", +"41dedc58": "gradeinfo()", +"41defd82": "cancelJobByAdmin(bytes32,uint256,address,uint256)", +"41df696e": "start_play_quiz(string,string)", +"41dfed3a": "viewCurrentPrice()", +"41e0b5d4": "Fenerbahce()", +"41e0c407": "getStudentCount()", +"41e1234e": "presaleFemaleStart()", +"41e14251": "devuelveUsers()", +"41e18398": "batchTransferFromManyToMany(address[],address[],uint256[])", +"41e2cdf4": "myGauntletType()", +"41e34be9": "unitSellable(uint256)", +"41e3a6b5": "updateSplitBalances()", +"41e50814": "DEVCoin(uint256,uint256)", +"41e51e89": "approveZeroTokensTest(address)", +"41e60c86": "unsign()", +"41e62be6": "VRToken()", +"41e6fd4b": "hasSecret(uint256)", +"41e7a787": "ERC223StandardToken(string,string,uint8,address,uint256)", +"41e7c47e": "FBR2()", +"41e831b0": "Oboc(uint256,string,string)", +"41e884d4": "viewLastClaimedDividend(address,address)", +"41e8b94c": "isThereABlockAtCoordinates(uint16,uint16)", +"41e8da52": "makeBet(uint256,uint256,address,uint256,uint256)", +"41e8fe9f": "EventRandomLedgerRevealed(address,uint256,uint256,address)", +"41e906e5": "getExercised(address)", +"41ea5127": "BaseAuction()", +"41ea59a9": "isFoundationSupplyAssigned()", +"41eb1a4a": "setUintCoinProduction(address,address,uint256,uint256,bool)", +"41eb24bb": "renouncePauser(address)", +"41ebb063": "KRHCoin(uint256,string,uint8,string)", +"41ebe9c6": "ScarcecoinStart()", +"41ecd1cd": "withdrawOwnerUnrevealed(uint256,address)", +"41ece976": "updateMinInvestmentForPreIco(uint256)", +"41ecf95b": "ParticipantJoined(uint8,uint16,uint32,address)", +"41ed2c12": "marketManager()", +"41eddf00": "checkIfCurrentlyActive(uint256)", +"41ee903e": "clear(uint256,uint256)", +"41eeb105": "doRelease(bytes16,address,address,uint256,uint16,uint128)", +"41ef3879": "stage1_price()", +"41ef6bb7": "uncirculatedSupplyCount()", +"41ef858f": "whitelistAddress(address,address,uint256)", +"41ef9184": "Pretorian()", +"41f18b43": "claimEarlyIncomebyAddress(address)", +"41f1d4dd": "whitelistControl()", +"41f1e76c": "minFundingGoalReached()", +"41f1f3e5": "getPayeeIndex(bytes32,address,address)", +"41f2ce14": "setABalance(address,uint256)", +"41f31724": "Tzedakah()", +"41f36984": "collectGamePayout(uint256,uint256)", +"41f4793a": "getCurrentImpeachmentVotesSupporting()", +"41f48ebf": "currentIco()", +"41f4ab98": "addManyToPresaleWhitelist(address[])", +"41f4fcaf": "isDrop(uint256,address)", +"41f51941": "doActivateSale(address)", +"41f59e81": "initBonuses()", +"41f64b85": "deleteBag(uint256)", +"41f65507": "pendingOracleA()", +"41f6e77e": "FindTheCureCoin2()", +"41f70465": "startCoinOffering(uint256,uint256,uint256,uint256)", +"41f77260": "withdrawSyndicateTokens()", +"41f8a524": "Verificator()", +"41f99b69": "setWithdrawalCoolingPeriod(uint256)", +"41f99e2f": "getPostDonationAmount(address,uint256)", +"41fa4876": "multiBlockRandomGen(uint256,uint256)", +"41fade8f": "getconfig(address)", +"41fb55c6": "mMaxAppCode()", +"41fbb050": "foundation()", +"41fcb0f7": "buyNapkins(address)", +"41fd32cf": "SafecontractsTREXCrowdfunding()", +"41fe0a24": "buyCrystalDemand(uint256,uint256,string,string)", +"41fee898": "refundPercent()", +"41ff4275": "_calculateUnlockedTokens(uint256,uint256,uint256,uint256,uint8)", +"41ffbc1f": "ringIndex()", +"42007fd3": "MarkRazAsComplete(uint256)", +"4202d214": "isActiveUser(address)", +"4203ea57": "minInvestmentPreICO()", +"4204f7d5": "deployMinersTest(uint32,address,uint32[],uint32[],uint32[])", +"4205875f": "ROUND_6_PRESALE_BONUS()", +"4205e5af": "pauseClosingTime()", +"4206311b": "TimeLockSend(address,address,uint256)", +"420714bd": "requestIndex()", +"42071a73": "bltRetained()", +"4207d648": "directorJurisdication()", +"42091137": "addStringSetting(string,string,address,address,string)", +"42091e76": "saltoken(address,address)", +"42095679": "lindyhanCoin()", +"420977d8": "viewStudent(uint256)", +"4209a1ef": "registerPlayer(string,uint256)", +"4209fff1": "isUser(address)", +"420a83e7": "tokenHolder()", +"420a8ac8": "NanoPyramid()", +"420a8b76": "Dancer()", +"420aa07d": "serviceTrasferToDist(bytes32,uint256)", +"420aadb8": "_execute()", +"420ae446": "allocatetokensAndWLExp(address,uint256,uint256)", +"420b5fe0": "initializeVestingFor(address)", +"420b81f6": "peekData()", +"420b9921": "ecsubtract(uint256,uint256,uint256,uint256,uint256,uint256)", +"420c96ea": "newArtwork(bytes32,uint256,string,string,string,uint256)", +"420d0ba4": "nobodyCanDoThis()", +"420d23fd": "POOL_EDIT_1()", +"420d4a02": "getUnlockedAmount(address)", +"420d4bdd": "CRYPTAU()", +"420dd15a": "getLast(string)", +"420ddaa6": "encodeKYCFlag(bool)", +"420e1f51": "tokenExchanges()", +"420e7ea6": "tokenAmountRasied()", +"420ef2b3": "TargetHash()", +"4210ad0e": "newBurnableOpenPayment(address,uint256)", +"42111339": "contributeLocal()", +"42118f51": "manualLCs()", +"4212616b": "localsUser()", +"4214352d": "write_what_where_gadget(uint256,uint256)", +"4214d52f": "updateIndex(address,address)", +"421521b1": "finalizeOpenSale()", +"42154e9c": "countAddress()", +"42159ca3": "getMaxDelayDays()", +"4215a39b": "getCreateMarketNumOutcomesValue()", +"4215da7d": "investorsStorage()", +"4216503c": "setFunStr(string)", +"42170736": "secondPhaseStartTime()", +"421715c2": "canBorrow()", +"42172a6a": "_emitERC20DividendDepositedEvent(uint256,int256,uint256,uint256,address,uint256,uint256,uint256,bytes32)", +"42173c98": "purchaseCompany(bytes32,bool)", +"42193473": "DUST_LIMIT()", +"421983d7": "confiscate(address,address)", +"421a5727": "stealPot()", +"421ae949": "thawTokenTransfers()", +"421aeba2": "setEditedFalse(address)", +"421aeda6": "Set_your_game_number(string)", +"421b2395": "UltiCoinICO()", +"421b2d8b": "addUser(address)", +"421c0d9c": "unregisterDsp(address)", +"421d72e2": "isPaymentForked(uint256)", +"421db384": "leftICOTokens()", +"421e2dc2": "getPartnerAmount(address)", +"421e52e3": "card_gold_minamount()", +"421ed7dd": "balancesInitialized()", +"4220324b": "mainSaleStart()", +"42207083": "getGameRoundOpen(uint256,uint256)", +"4221115c": "SfomoToken(uint256,string,string)", +"42226e02": "setMaxEth(uint256)", +"4222e211": "getPhaseState(uint256)", +"42235da6": "minimumTarget()", +"4223ac0f": "ABCToken()", +"4223ad89": "NewRefundTransaction(uint256,uint88)", +"4224f2ca": "HzxhcToken(address,address)", +"42261ea4": "cancelSale(address[])", +"422624d2": "destroycontract(address)", +"422627c3": "getDna(uint256)", +"42263aa2": "set_token_address(address)", +"422752bf": "getPartialAmountFloor(uint256,uint256,uint256)", +"42279e82": "removeFromPreSaleRefunds(address,uint256)", +"422810ea": "transData(address,uint256,bytes)", +"42285bc5": "_ensureRef(address)", +"42287b66": "createPromoPerson(address,string,uint256)", +"4228974c": "Videos()", +"4229616d": "collectPercentOfFees(uint256)", +"4229c35e": "setItemPrice(uint256,uint256)", +"422b00bb": "dataentryclerk()", +"422b1c70": "setMinweiAmount(uint256)", +"422b423e": "getCheatWarrant()", +"422b7964": "_approve(uint256,address)", +"422c29a4": "getWallets(address)", +"422c3ad9": "changeEndTime(address,uint256,uint256)", +"422cbb48": "MarkosToken()", +"422d3374": "tbitfwdToken()", +"422d37c4": "mintWithEvent(int256,address,uint256)", +"422d4cd6": "increasePayout(uint256,uint256,uint256)", +"422dabac": "allocateEther(uint256,address)", +"422e33f3": "migrationNewAddress(address)", +"422e82a7": "EthToCoins1()", +"422f1043": "addLiquidity(uint256,uint256,uint256)", +"422f3a2c": "nestedFirstAnyToSome(uint256,uint256)", +"422fcbd5": "MCST()", +"4230bb10": "badgeLedger()", +"42317bbc": "flipRefundSwitchTo(bool)", +"42318e3d": "percent(uint256,uint256)", +"4231a2c3": "getLastRound()", +"4231e2d7": "transferFreezership(address)", +"4231ee16": "addInBountyProgramMap(address)", +"42320732": "allSupply()", +"423252f9": "buscarDocumentoPorTitulo(bytes32)", +"4232a399": "XC()", +"42340458": "disable(uint8)", +"42346c5e": "parseInt(string)", +"423592ce": "startTde()", +"4235e336": "BetDirectory()", +"4235e98e": "Buy(uint8,string,string)", +"42367389": "test_twoValidEqInt2()", +"4236b312": "dealContract(uint256,string,uint256,uint256,string)", +"4236da98": "INTREPID_PRICE_INCREMENT()", +"42382353": "restartTheQueue()", +"4238b84c": "DMBToken()", +"423948fd": "changeCollateralAmount(uint256)", +"42399220": "setCampaignOwnerById(bytes32,address)", +"423a7954": "developerfee()", +"423a968d": "_setRSPScienceAddress(address)", +"423b1ca3": "battleContract()", +"423c3a48": "burnTokens(address,address,uint256)", +"423c485a": "depositFee(uint256)", +"423d4ef2": "createChannel()", +"423da88e": "Unix_Timestamp_Binary_Trading(uint256)", +"423dcf29": "dustToEtherPrice()", +"423e1298": "setDoNotAutoRefundTo(bool)", +"423e7e79": "_dispatchEarnings()", +"423f0b6e": "replaceModule(address)", +"423f6cef": "safeTransfer(address,uint256)", +"423fb140": "CrowdsaleToken(string,string,uint256,uint256)", +"423fcd5e": "_promo()", +"42402c2c": "fipsTransferMulti(bytes20[],address)", +"4240a978": "ICO_TILL()", +"42419336": "ICO_BONUS_RATE()", +"42427bf8": "upgradeController(address,address)", +"4243cb36": "payConversionFromTransaction(uint256,address,uint256)", +"4244e09f": "getBetterBettingInfo(address)", +"4245508a": "getRoundMaxNumberOfBets(uint256)", +"424592ca": "calculateDistributedIntervalEarning(uint256,uint256)", +"424599c4": "seedSaleTokenLeft(address)", +"4245b0f7": "Lottery()", +"4245d48e": "getHashes()", +"4245f3da": "tokenOfOwnerByIndex(uint256)", +"42465a1e": "getTokenUnits(address)", +"42469e97": "_setBonusRate(uint256)", +"4246ad24": "calculateMinedCoinsForTX(uint256,uint256)", +"4247f52d": "DoRoll()", +"4248083b": "approveUser(address,uint256)", +"4248aefe": "awardMiniGamePrize()", +"4248afe8": "addCrowdSaleTokensMulti(address[],uint256[])", +"424976f9": "registryRead(bytes32,bytes32)", +"42498389": "transferLimitedFundToAccount(address,uint256)", +"424a8993": "selectOfferingProposal(uint8)", +"424a8c0d": "constructorReconToken(address,string,string,uint8,uint256,bool,bool)", +"424aa0e5": "StockusToken()", +"424b828f": "CharityReservesWallet()", +"424bc2e9": "newGame(string,string)", +"424d6bb1": "changeApi(address,address)", +"424ddaac": "get_available_interest_amount()", +"424e418f": "setMinSecondaryAmount(uint256)", +"424e94da": "VoteHub(address)", +"424ea3b2": "refund_deposits(string)", +"424ea872": "startTimestampIco()", +"424eb9fe": "getInitBalance(address)", +"424f4fef": "vendingMachine()", +"424f9947": "privateIcoBonus()", +"424fa9ec": "Prismacoin()", +"424fed48": "EBPtandardToken(uint256,string,uint8,string)", +"424fffda": "updateContact(string)", +"4251447a": "WhiteListSet(address,uint256)", +"42516f1d": "startAirdropBy0Eth()", +"425189e0": "getFashion(uint256)", +"4251a7a4": "totalNihilum()", +"4251ecb4": "nMsg()", +"42526e4e": "bytesToAddress(bytes)", +"425432b1": "tokensPerAddress(address)", +"42545825": "hasVoted(address,uint256)", +"4254704f": "TOKEN_CLAIM_WAIT_PERIOD()", +"4254b155": "register(bytes32,string,address,address,address)", +"425543f1": "CreateDummyPlayer(bytes32,uint8,uint256,address)", +"4255e808": "jackpotContract()", +"42565405": "setNeuroChainAddress(string)", +"42569ff3": "limitedPrinter()", +"4256dbe3": "setReserve(uint256)", +"4256fa5a": "timeToBorn()", +"4256fa9f": "exchangeTokens(address,uint256)", +"4257347e": "freezeAccountToken(address,uint256,uint256)", +"42577935": "createPanda(uint256,uint256)", +"4257d3e0": "currentGameBlockNumber()", +"42585b34": "getSnap(uint256)", +"42587795": "deploySimpleContract(string,string,uint256)", +"4258cb76": "Ultracash()", +"4258d771": "funding_ended()", +"425946e3": "setCurrentMember(address)", +"4259701b": "getSocialAccountPw(bytes32,bytes32)", +"4259b52e": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8)", +"425adae7": "isBonusEnabled()", +"425d4980": "mintAddress()", +"425d512a": "setDAOContract(address)", +"425e0d3c": "BasicToken(uint256,string,uint256,string)", +"425ef4b5": "modify_str(string)", +"425f7857": "taxTokenCreated()", +"4260c779": "start_ico()", +"42616d21": "goldTotalSupply()", +"42618b91": "buyRoundKey(uint256)", +"426201ef": "lastBlock_v19()", +"42623360": "stakeOf(address)", +"426365ad": "setForceOffsetAmount(uint256,uint256)", +"42636c09": "existIdAfterVersion(bytes32)", +"4263ed83": "hasNextSeedHashA()", +"4264b4e0": "ownerPayout()", +"4266806b": "cf1Wallet2Pct()", +"4266873f": "setAicPrice(uint256)", +"426695c6": "getDeedId(bytes32,uint256)", +"4267e19c": "getOwnedTokensIndex(uint256)", +"42686bbe": "GetPartLimit(uint8,uint256)", +"4268a257": "updateRoundInformation()", +"4268db7d": "cite(string,string)", +"4269d8ef": "_safeSend(address,uint256)", +"426a0af3": "updateManyLandData(uint256,uint256[],string)", +"426a8493": "approve(address,uint256,uint256)", +"426aa87f": "deleteRecording(uint256)", +"426ad3f5": "getChainName(uint32)", +"426b7113": "tokensSoldPre()", +"426bc60c": "Educoin(uint256,string,uint8,string)", +"426d4f22": "expandNegative128BitCast(uint256)", +"426d5ef1": "oraclizeCallbacks(bytes32)", +"426d70fa": "isPrivateIcoActive()", +"426dd27c": "getGroup(uint256,uint256)", +"426e0b20": "daoStakeClaimed()", +"426e5ae6": "senderTokenBalance()", +"426e6f8e": "updateValueAndMint(uint256,uint256)", +"426eae45": "bondingManager()", +"426eb017": "uri(address)", +"426f5531": "maxAllProfit()", +"426f8f6b": "viewNumberOfRequests()", +"426fa499": "isIcoStarted()", +"426fe411": "contributorDeposit()", +"4270d48a": "nextmarketoffer()", +"42714978": "removeInvestor(address)", +"427163dc": "refundBid(bytes32)", +"4272f2d5": "heroTokenContract()", +"4273601c": "factoryOwner()", +"4273bc59": "bids_sorted_refunded()", +"42740286": "maxMintPoS()", +"42750020": "tokensCreated()", +"42753e7e": "isInSale()", +"4276016f": "oversightAddress()", +"427654da": "getDailyLimitUsed()", +"42767018": "smallRate()", +"4276d082": "FrozenEther()", +"42772947": "callEndRoundControl()", +"4277b5b1": "check(address,address,address,uint256)", +"4277e497": "PaymentRejected(address,bytes8,uint256)", +"4277e823": "TravelHelperToken(address,address,address,address,address,address)", +"42787798": "grantedContracts(address)", +"4278ff31": "setTangibleAssetAddress(address)", +"427913f2": "getClaimedFinancialData()", +"4279523e": "serviceChangeOwner(address)", +"427982f2": "tokenSaleMax()", +"427a2fc2": "getClaim(uint256,uint256)", +"427ac5e4": "checkForUpdates()", +"427b59d3": "HiPrecious()", +"427b72fc": "proofFailed(address,uint256)", +"427c854d": "_createSkull(uint256,uint256,uint256,address)", +"427c9aca": "LogPayoutFailed(address,uint256,uint256)", +"427d5f2e": "tierAmountCaps(uint256)", +"427da275": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32)", +"427e024a": "AdministratorRemoved(address,address)", +"427e332f": "lastBlock_a8()", +"427eebfc": "returnOwnershipOfToken()", +"427f0b00": "roundInfo(uint256)", +"427f56ff": "bonusAllocAddress()", +"427f9614": "getReference(bytes32)", +"427fa1d2": "getLastNode(address)", +"427fc2df": "preIcoPeriod()", +"4280606b": "addCondition(bytes32,bytes32,address,int256,bytes32,address,int256,bytes32)", +"4281267b": "buyLCARS()", +"4281a651": "SponsoredItemGooRaffle()", +"4281b13f": "getAllbetByNum(uint8,int8)", +"4281b34b": "play(uint256,uint256[])", +"42836c2e": "hasAddress(address,address)", +"4283fbe5": "dummyGasBurner()", +"42842e0e": "safeTransferFrom(address,address,uint256)", +"42846c09": "Bonus(address)", +"42849570": "myReward()", +"4285d477": "teamTokensFreeze(address)", +"428657f7": "storeNewVesting(address,string,uint256)", +"4286ed3e": "callBtoWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"4287eef9": "fechStageBlockByIndex(uint256)", +"4287f14a": "teamReserve()", +"428840f6": "fadd()", +"4288d759": "betOf(address)", +"4289c781": "setSellPrice(uint256,string)", +"428a2ece": "createTokenVault(uint256)", +"428a8120": "tier0Total()", +"428afcd1": "setUpgraded(uint256)", +"428be33f": "ReleaseFundsAndTokens()", +"428c91ae": "genAddressFromGTIN13date(string,string)", +"428d189c": "takeTokens(uint256)", +"428d475a": "beConstant()", +"428d5630": "mintOnDemand(address,uint256)", +"428d64bd": "getShares(address,bytes32[])", +"428e2d64": "getMsg(address)", +"428e357b": "getUInt8(bytes32,bytes32)", +"428e5aaa": "addToPrize()", +"428eb006": "batchAirdropWithLock(address[],uint256,bool)", +"428eb5cf": "getRandomNumber(int256,int256)", +"428f180c": "minimumSpend()", +"428f4146": "SimplePHXExchange()", +"42906029": "newManager()", +"42909a9e": "create_game()", +"4290a5b9": "uninject(address)", +"4290bd4d": "isTokenOfferedToken(address)", +"4290db52": "burnFromAnotherAccount(address,uint256)", +"4290e6b6": "setTokenName(address,uint256,string)", +"42915914": "test_dispersal()", +"4292327c": "_isMyLeague(uint8)", +"42923409": "ArinToken()", +"4292a797": "ZAZA()", +"4293253c": "tokenSaleLowerLimit()", +"429374f3": "ScorpioCoin(address)", +"42946d88": "getIGOAccoountByAddr(address)", +"4294857f": "isRevoked(bytes32)", +"42948e18": "getSenderAddress()", +"4294bea0": "BarcelonavsRoma()", +"4294cdb2": "BixcPro(uint256,string,uint8,string)", +"42958b54": "issue(address[],uint256)", +"42966c68": "burn(uint256)", +"4296a9cb": "getNodeRightChild(bytes)", +"4296b4a7": "freezePlayer(address)", +"42974b1e": "freeReferralPacksClaimed()", +"42980e20": "LifeToken()", +"429838e0": "Allow_Entries()", +"42992dd5": "icoStartTimestampStage2()", +"4299431e": "REALMock(address)", +"42995e12": "canReceiveMintWhitelist()", +"4299c213": "lastReading(address)", +"4299f706": "PonziScheme(uint256)", +"429a2591": "convertAmountToTokens(uint256)", +"429aa0a4": "DAILYC()", +"429adcb9": "minSumICOStage7USD()", +"429b62e5": "admins(address)", +"429b92bf": "getProposalName(uint256)", +"429c1561": "setReputationProblems(address,string)", +"429c6e5b": "getClaimedAmount(uint256)", +"429cddca": "selectOwnerAddressForTransactionFee(address)", +"429d15ba": "testCorrectFunctionIsCalledOnTransfer()", +"429d6a69": "walletBeneficiary()", +"429f3b48": "blockAccount(uint256)", +"42a04fea": "getBadges()", +"42a173a5": "transferByCasino(address,address,uint256)", +"42a1928b": "initSale(uint256,uint256,uint256)", +"42a19c71": "giveProjectTokens(address,uint256)", +"42a1f3eb": "ProvToken()", +"42a37176": "showMyEtherBalance()", +"42a38a00": "mediatorWallet()", +"42a4af66": "updateCatReleasePrice(uint32,uint256)", +"42a5000d": "startPRESALE()", +"42a63361": "updateTribeProducts(address)", +"42a657fd": "primaryListing()", +"42a6617d": "stepTwoRate()", +"42a66f68": "totalRate()", +"42a6739b": "acceptRandom(bytes32,bytes)", +"42a6b21a": "getContributionLimit(address)", +"42a6c4dd": "getBidByToken(address,uint256,uint256)", +"42a745cb": "testBitEqualSuccess()", +"42a787fa": "determinePlayer(int128,uint128,uint8,bytes32,bytes32)", +"42a7a8e0": "SmartzToken()", +"42a7c40e": "ThiccCoin()", +"42a7cfd5": "naturalUnit()", +"42a8f2f4": "internalTransfer()", +"42abfde8": "getLunckyIndex(uint256)", +"42ad2c6f": "maxPreIcoDuration()", +"42ae07c0": "RateRemove(address)", +"42ae0a16": "crowdsaleBalance()", +"42aeba30": "Shipment(address,address,string,string,int256,int256,uint256,uint256)", +"42af2478": "PartialFundsTransfer(uint256)", +"42af4821": "TUDOR()", +"42af8f0c": "buy(uint256,uint256,address,address,address)", +"42b053ce": "SyedaMahaAliTestCoin()", +"42b07d6d": "cashBackFromProject(address)", +"42b1295a": "addMultipleAllowedAddresses(address[])", +"42b2106c": "FoundationTransferred(address,address)", +"42b222bd": "showTokenValue(address)", +"42b31b1f": "Elythrium()", +"42b38674": "isValidValidatorSignature(address,bytes32,address,bytes)", +"42b41aa4": "sendCoin(address,address,address,uint256)", +"42b4632e": "canPropose(address)", +"42b4807a": "getRegionCoordinates(uint256)", +"42b4ef95": "Helper()", +"42b50a7a": "getOrderById(uint256)", +"42b594cb": "buyTicketByEth(uint256,bytes32,bytes32,bytes32)", +"42b5a2a9": "maxTxGasPrice()", +"42b614a9": "round_after()", +"42b64a59": "VisionX()", +"42b8c415": "balanceTotal()", +"42bb5709": "FundsTransfer()", +"42bb66c4": "setInvest(uint256,uint256)", +"42bd0959": "setIsBuyByAtom(uint256,uint128)", +"42be5eea": "thing(string,string,uint8,string)", +"42be9307": "changeSale(bool)", +"42beb58b": "setPreSaleOff()", +"42bf1270": "cslToken()", +"42bf41ae": "drainStrayEther(uint256)", +"42bf4431": "orderMatchTest(uint256,uint256,uint256,int256,uint256,uint256,address,address,int256)", +"42bf5347": "getUserFreezeInfo(address,uint256)", +"42bf8db3": "getRate(string,uint64)", +"42bff0d0": "setExchangeAdapterManager(address)", +"42c01f66": "setRateEarlyStage3(uint256)", +"42c102a5": "GetSnail(address)", +"42c1867b": "mintAgents(address)", +"42c1ea29": "evidenceInterval()", +"42c23db5": "AddToDividends(uint256)", +"42c2d31a": "EtheremonToken(address,address,address,address)", +"42c304be": "accountsListLength()", +"42c3301a": "showJackpotThisRd()", +"42c469e0": "GameSpiritCoin()", +"42c501a1": "LogOwnerTransfer(address,uint256)", +"42c50f75": "TeamMembersAmount()", +"42c549c0": "getMilestones(uint256)", +"42c5d7ad": "sendAdvisorsBalance(address,uint256)", +"42c62865": "withdrawsCount()", +"42c62882": "getMyDividends(bool)", +"42c6498a": "genesisTime()", +"42c65ae5": "eUSD()", +"42c69566": "get_address(address,string)", +"42c71f1d": "getApp(bytes32)", +"42c74c73": "EPVToken()", +"42c7551e": "tokenRemain()", +"42c7ea5f": "totalNumberAvailable()", +"42c80fc9": "isUpgraded()", +"42c81f45": "MLB_Legal()", +"42c8705b": "Mine()", +"42c87205": "VirgoContract()", +"42c96767": "EtherHiLo()", +"42ca08cf": "applyFadeoutToOptions(uint32,uint32,uint32,uint256,uint256)", +"42ca2fe3": "FCOIN1110Token(uint256,string,string,uint256)", +"42cb1fbc": "ETHER()", +"42cbb15c": "getBlockNumber()", +"42cc6b04": "addAuthorizedEditAgent(address)", +"42cde4e8": "threshold()", +"42cdfe37": "tokenWithdrawEther(address)", +"42ce0555": "DisableSuicide()", +"42ce0aff": "registerAndValidateToken(address,string,string,uint256,uint256)", +"42ce0f30": "testThrowUpdateLatestRevisionNotOwner()", +"42ce1488": "upload(string)", +"42cf0a4b": "increaseEthBalance(address,uint256)", +"42cf0e72": "searchByOwner(address)", +"42cf2f81": "getSequence(bytes)", +"42cfd792": "postJob(uint256,uint256,uint256,bytes32)", +"42cffda9": "TREETOKEN()", +"42d01878": "keyRequired()", +"42d02b30": "HARD_CAP_IN_TOKENS()", +"42d16748": "getMinDailyWithdrawalLimit()", +"42d1b202": "_adoptSameClassAxies(address,uint8,uint256,address)", +"42d1f17f": "bankrollerTable()", +"42d2c127": "getStagesBeginEnd()", +"42d46a9a": "castVote(uint256,uint256,bytes32,string,bytes32)", +"42d544fb": "disallowSale()", +"42d596e0": "isPoint(int256,uint256,uint256)", +"42d64601": "pacifistmasterReq()", +"42d7cc8e": "Tx(address,uint256,string)", +"42d8f5be": "customPayment(address,uint256)", +"42d928fc": "SWIFTSCO(address)", +"42d9643c": "KYCLimitValue()", +"42da3b6b": "getAmount(uint256,address)", +"42daedea": "win_by_timeout()", +"42daf6ee": "icoStartP6()", +"42db2fba": "renounceRecoverer()", +"42dbad44": "makerOf(string)", +"42dbcdba": "weiRaised(address)", +"42dca9ea": "getManifestIdsByRegistrant(address)", +"42dd519c": "getClients(uint256)", +"42dd96f7": "killswitch()", +"42df7085": "ROLE_EXCHANGER()", +"42dfb036": "calcRateFromQty(uint256,uint256,uint256,uint256)", +"42e06ee7": "HotCold()", +"42e11316": "claimReadership(uint256,string)", +"42e1452a": "PolarisUniversalToken()", +"42e15c74": "managedTokenLedger()", +"42e16015": "AddedBlackList(address)", +"42e296d3": "soundEffects(uint256,uint256)", +"42e2d18c": "presaleIsRunning()", +"42e2da09": "QuantorPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"42e2f54c": "shutDownFund(address)", +"42e35f63": "addGoal(string)", +"42e3b919": "NMFToken()", +"42e49d5a": "FUNDING_GOAL()", +"42e4d72b": "oxen()", +"42e5033e": "mainSaleEndDate()", +"42e59afa": "reloadRound(address,uint256)", +"42e5b9f1": "totalDistributedDividends()", +"42e5d5c8": "getPI_edit_17()", +"42e5da0d": "UpdatePlatformContract(string,address)", +"42e6377f": "LabtorumToken()", +"42e6c88a": "approveObjectReception(uint256)", +"42e7ba7b": "hasManagerAccess(address)", +"42e8051c": "testExternal()", +"42e81b0c": "dislikeCelebrity(uint256,uint256)", +"42e86d27": "callData(address,bytes)", +"42e90c33": "Store()", +"42e94c90": "contributions(address)", +"42e9555e": "getProviderLastSupplyID(uint256)", +"42e956f6": "addtoMarketingBusinessDev(address,address,uint256,uint256)", +"42e9c6ce": "pullTokens(address)", +"42ea74c0": "getTokenPriceInWEI()", +"42eabc29": "posibleRedemptionOf(address)", +"42ead91f": "getMegabox(uint256)", +"42eafaf5": "showFPInfoAll()", +"42ec38e2": "tokenOf(address)", +"42ed00da": "getSenderArmyDetails()", +"42ed567c": "tmpQuerySeed(uint256,uint256)", +"42ed5816": "ethDailyLimit()", +"42ed6072": "publicBattlepm2()", +"42ee4e0b": "ICO_PRICE5()", +"42ef4c1a": "hodlerTime6M()", +"42ef8c76": "alsToken()", +"42efdebf": "exchangeAdmin()", +"42f030e4": "minusTourFreezingTime(uint256)", +"42f0b07e": "BountyFund()", +"42f0ca0d": "setPreSaleEndDate(uint256)", +"42f1181e": "addAuthorizedAddress(address)", +"42f362aa": "registerNameCore(uint256,address,uint256,bytes32,bool,bool)", +"42f39381": "presaleRate()", +"42f39a6f": "ARXPackageSale()", +"42f3f7e0": "activate_reserve()", +"42f45790": "testAddress(address)", +"42f57e4c": "enableUser(address,bool)", +"42f5b7e0": "setGenome(uint256,uint256[4])", +"42f5d95d": "AllUnLock()", +"42f6208e": "lock(address[])", +"42f6487a": "payment()", +"42f6e389": "isModule(address)", +"42f81580": "CLAIM_DEADLINE()", +"42f85ce5": "pay(address,uint256,uint256[])", +"42f88548": "updateRegionPixelPrice(address[16],uint256,uint256)", +"42f88699": "ExShellToken()", +"42f9192a": "nameFilter(string)", +"42f91e9e": "BcxssToken()", +"42f989e2": "setUnlockTimeStamp(uint256)", +"42f98b14": "buyIssuerTokens()", +"42f9b306": "teamLockTransfer(address,uint256)", +"42fa3967": "toSlice(bytes,uint32)", +"42fa98e0": "Orange()", +"42fba0f5": "grantedTokensHardCap()", +"42fbbc9c": "managerPercentage(bytes32)", +"42fc63be": "DebugHash(bytes)", +"42fd6acc": "checkProof(bytes32[],bytes32)", +"42fd7d4c": "_buy(address)", +"42fdbed7": "isDeDeContract(address)", +"42fea02b": "confirmPayer(uint256,uint256)", +"42feba84": "arbiterResponseRate(address)", +"42ff1c1a": "getMetadataURL()", +"42ffb76b": "getWorkflowName()", +"4300705d": "withdrawGTO()", +"4300e8ef": "addContract(address,string)", +"4301b55b": "MintOpened()", +"4301cbe5": "getAllNames(string)", +"43021054": "BTestToken(address,string,string,uint256,uint256)", +"43021202": "fundValuePublish(uint256,uint256,uint256)", +"4302b3c8": "myTotalSupply()", +"43031e9b": "getSumOfPlayers()", +"4303707e": "generateRandomNumber(uint256)", +"43039433": "handleReturnData()", +"43046844": "placeBet(uint8)", +"4304a43f": "updatedBalance()", +"4304a6b9": "setUnfreezeStartTime(uint256)", +"430558c2": "buyGifto()", +"43062beb": "getAvailableTokensToSellTillPhaseIdxValue(uint256)", +"43062ea7": "changePurchaseCap(uint256)", +"430694cf": "getProposal(bytes32)", +"4306cc3f": "queryEarnings(address)", +"4307d081": "jazzxToken()", +"4308a36b": "getIcoPrice()", +"43090357": "readUserPurchasedToday(address)", +"4309b4b2": "getPollIdentifier(address,bytes32,bytes32)", +"430a74b7": "CrypcenToken()", +"430ab56a": "sendAllLocalEthers(address)", +"430ae7a2": "AvtcToken()", +"430bf08a": "vaultAddress()", +"430c2081": "isApprovedOrOwner(address,uint256)", +"430c2a69": "crdjetToken()", +"430c73c5": "setMarketAddress(address,address)", +"430c9247": "changeDebt(address,uint256)", +"430ca46f": "finishAuction()", +"430d2803": "getTotalPossibleTokens()", +"430d6eb2": "ParadiseToken(address)", +"430de98a": "GetCardNumber(uint8,uint8)", +"430e484a": "setupNetwork()", +"430ecff8": "blksze()", +"430fe5f0": "changeWorkerPrice(uint256)", +"430fe9c1": "getDate()", +"4310033d": "Gotoken()", +"43102eab": "isItConstantinopleYet()", +"43104d92": "addMultipleRecordsStrict(uint256[])", +"43107290": "createRequest(address,address[],int256[],address,string)", +"43114842": "acceptChallenge(uint256,uint256,uint256)", +"4311de8f": "ownerWithdraw()", +"43128a4c": "feeUSD()", +"4312f19c": "setTransferEmittables(address,bool,bool)", +"4312fece": "addAddressToIndex(address,address)", +"43133b07": "gameBeginPlayNo()", +"4313b9e5": "setup(uint256)", +"4313de82": "closeBidOrder()", +"4314162d": "untsqm()", +"431454fb": "totalMintedBountyTokens()", +"43146f36": "resetBet()", +"431562b9": "countWithdraws()", +"43156db6": "withdrawOldToken(address,uint256)", +"4315f545": "proofType_NONE()", +"43160e3d": "rootOfTrust()", +"4316abbb": "newJester(address)", +"4316fae5": "NABC()", +"43171485": "tokensHasSoldOut()", +"4317f04a": "Transfer(address,string,address)", +"431851ad": "NenoToken()", +"431993b9": "endPrivate()", +"4319dfd9": "defence(address,uint256,uint16,bytes,uint256[])", +"431a4d46": "getContractSample(string)", +"431ab1f2": "xmasFundWallet()", +"431ab233": "allOperations(uint256)", +"431adcb1": "isSellOpen()", +"431bff74": "MINING_POOL_AMOUNT()", +"431cc3dd": "batchWithdraw(address[])", +"431d6256": "Conversion(address,address,address,uint256,uint256,uint256,uint256)", +"431dac16": "registerUser(address,string,uint256,uint256,uint256,string,bool)", +"431dbd9e": "getLatestRaffleInfo()", +"431dc4b6": "current_period()", +"431dc892": "OwnedProxy(address)", +"431e0a48": "AnteilToken()", +"431e83ce": "absMaxFee()", +"431ec601": "get_exchange_count()", +"431ef9b5": "OptionsConversionOffered(address,address,uint32,uint32)", +"431f188c": "set_presale_arbits_per_ether(uint256)", +"431f21da": "createAuction(uint256,uint256,uint256,uint256)", +"431f63c9": "setTokenPrice(address,uint256)", +"4320ea1c": "CrowdsaleBase(uint256,uint256,uint256,address,address[])", +"43212413": "Addr2()", +"43212c3c": "getHighestMilesAt(uint256)", +"43214675": "setMintAgent(address,bool)", +"43216a11": "MAX_NUM_AVAIL()", +"43226631": "CURRENTLY_ISSUED()", +"4322b73b": "getAdd(uint256)", +"43235a24": "_transferProperty(uint16,address,uint256,uint256,uint8,address)", +"43243797": "fundsOf(address)", +"43245816": "tokensToEther_(uint256)", +"43245953": "CoinToken(uint256,string,uint8,string)", +"4324aa21": "classOf(uint256)", +"4324ae4f": "PhoenixExchangeDeposit()", +"4325f6bb": "OfferToCastle(uint256,uint256)", +"432607fc": "cancel(address,address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"4326e22b": "getMerkleTreeRoot(bytes20,uint8)", +"4326f3f6": "setMinimumPriceCount(uint256)", +"4327115b": "_AddedToGeneration(address,uint256)", +"4327979a": "getPaymentParams(uint8)", +"4327acda": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256)", +"4328894f": "showReportForMonth(uint16,uint8)", +"4329db46": "transferETH(uint256)", +"432a042b": "makeRegistration(bytes32)", +"432a3dfb": "roundState(uint256,uint256)", +"432a805b": "changeDailyRate(bytes32,uint256)", +"432a84d9": "ownerDepositInterest()", +"432a89aa": "GetBuildingParam(uint256)", +"432af6e9": "calculateTokensForMonth(address)", +"432b3f85": "fetchVoteResultForCandidateBySnapshotBlock(address,uint256)", +"432ba8be": "voterToBallotID(address)", +"432c4209": "IQT_DECIMALSFACTOR()", +"432c685f": "trustClient(address)", +"432ce549": "sendToUser(address,address,uint256)", +"432ced04": "reserve(bytes32)", +"432d7a1e": "_dividendsOutstanding(address)", +"432e83c5": "resetReferedCount(address)", +"432e8946": "disableTransfer(address)", +"432f0d20": "EVA(uint256)", +"432f3223": "AceFund()", +"432f3c22": "request_until()", +"43302ff3": "getMaintainFee()", +"4330301f": "_ratio()", +"4331576f": "BITVM()", +"4331e00f": "pay_claimed(address)", +"4331e8dd": "setLeader(address)", +"433288a2": "setCurrency(string,address,address,uint8,bool)", +"4334614a": "isBurner(address)", +"4334a8a5": "CHAD()", +"433503f6": "ChangeEmissionSumm(uint256)", +"4335b046": "CRAWDSALE_EARLYBIRD_END_DAY()", +"4335dfc0": "getPurchaseTimestamp()", +"43361a6e": "MineralBase()", +"4336a5a8": "EtherGold()", +"433740f8": "Purchase(address,uint256,uint32)", +"4337b391": "PriceDiscovery(address,address)", +"433836dc": "scheduleTransaction(address,bytes,uint8,uint256[3],uint256)", +"43386ea9": "getUniqueValue(uint256)", +"433900db": "presaleTokensLimit()", +"433914c9": "VeChainX()", +"43398685": "BancorFormula()", +"4339bc30": "changePool(address)", +"433a8323": "UnityCoin()", +"433adb05": "tokensReserved()", +"433b409f": "BTTSTokenListing(address,address,string,string,uint8,uint256,bool,bool)", +"433b64b1": "eventId(uint256)", +"433b77c7": "getCampaignOwnerById(bytes32)", +"433bb0e4": "fillOrder(address,address,address,bytes32,address,address,uint256)", +"433bd924": "getBreed(uint32)", +"433c39ff": "transferVoteController(address)", +"433cdc26": "PriceAdjusted(uint256,uint256)", +"433d0f33": "canUserCancelArtwork(address,address)", +"433d4aab": "resolve(uint8,uint8)", +"433d7110": "provas(address)", +"433e852d": "flushDividends(uint256)", +"433fc1da": "Bandit()", +"43406182": "enableLotteryGiveHunt()", +"43409bc5": "linkData(bytes)", +"4341274f": "_sameClassAxiesPrice(uint8,uint256)", +"4341aebc": "distributeTokensToRank(uint256[],uint256)", +"434253ff": "createItem(string,address,uint256,uint256,uint256,uint256)", +"43428e45": "minimumNumberOfBlocksToEndGame()", +"4342e966": "approve(address,uint8)", +"4342ffe5": "changeMinimumContributionForPrivatePhase(uint256)", +"4343ede6": "currentStageNumber()", +"43441a2c": "totalGivenBountyTokens()", +"4344f73d": "AssToken()", +"4345c7c9": "_upgradeTo(string,address)", +"434622fe": "additionalMint()", +"43463b98": "getconf()", +"43463c3a": "UnityToken(uint256)", +"4346aa58": "ITTM()", +"4346ea77": "PrimasToken()", +"43471101": "getSenderFunds(address)", +"434786f4": "getBalacne()", +"434847e0": "withDrawFees()", +"4349168e": "GenesisSalesPriceCount()", +"43496568": "timeLock(address)", +"434a55eb": "bonusFirstTwoDaysPeriod()", +"434afdfc": "totalObol()", +"434b1208": "rescueOrder(uint256)", +"434b14e7": "randomGen(uint256)", +"434b349c": "LCEToken()", +"434b635e": "getMaxBetAmount(uint256)", +"434c4498": "EthperPoe()", +"434cb64c": "startNextGeneration()", +"434d16f5": "rotate_left(uint32,uint32)", +"434d185c": "getKingdomOwner(string)", +"434df07e": "NewSerpent(uint256)", +"434e0618": "addMedicalProviderReply(address,string,string)", +"434e6a55": "addWebsite(address,string)", +"434ea7d3": "_lottery5(uint256,address,address)", +"434ec416": "EXT_COMPANY_STAKE_ONE()", +"434f5f27": "checked_in(address)", +"434f811b": "partIndexToApproved(uint256)", +"434fb2ae": "PRICE_MULTIPLIER_ICO3()", +"435010d8": "SrcToken()", +"43503fac": "getWord(uint256)", +"43509138": "div(int256,int256)", +"43516832": "getSuppliers()", +"43525d73": "MAX_FUNDING_SUPPLY()", +"435263ef": "ecosystemWallet()", +"4352e407": "RozetkaCoins()", +"4352fa9f": "setPrices(address[],uint256[])", +"4353401f": "NetkillerAdvancedTokenAirDrop(uint256,string,string,uint256)", +"43543242": "isSignatureOkay(address,bytes32,uint256[3])", +"4355644d": "addMonths(uint256,uint256)", +"43558826": "exchangequeue(address)", +"43559743": "edgePigment(uint8)", +"4355b9d2": "approveTransfer(address)", +"43562bd0": "NextRewardBonus()", +"4356f35b": "addIntermediary(address)", +"43574d9e": "owner2Of(uint256)", +"4357855e": "fulfill(bytes32,uint256)", +"43579fe8": "deleteShop()", +"4357b3de": "getCrowdsaleTier(address,bytes32,uint256)", +"4357da58": "pausePreSale()", +"4357e20f": "MinSlippageFactorSet(uint256,uint256,address)", +"4357e289": "Multiplexer(address,address[])", +"43581c80": "tdeFundsRaisedInWei()", +"4358630f": "Certificate(address,address,address,address,address)", +"4358c156": "isBonus()", +"43596b8b": "getLLV_edit_25()", +"435a0803": "testNowClock()", +"435a1220": "createERC20TokenNetwork(address,address)", +"435ad5c1": "getMixedStack(bytes32)", +"435adacc": "EtherrateUpd(uint256,uint256)", +"435ae547": "ResumeTokenAllOperation()", +"435afa54": "changeRepoSettings(uint256,uint8,uint8)", +"435bb6b9": "nextJackpotTime()", +"435c35b6": "startGeneralSale()", +"435ce40a": "isAccount(address,address)", +"435cebda": "createMember(address,address,bool,bool)", +"435cf753": "winCount(bytes32,address,address)", +"435dc3fb": "setGenesisAddress(address,address,uint256)", +"435e119e": "SetupRaffle(uint256)", +"435e33a5": "TokenRewardsAdded(address,uint256)", +"435f02f9": "ACIFToken()", +"435ffe94": "setHello(string)", +"4360617b": "Sell(bytes32,address,uint256,uint256,address,address)", +"4360f90f": "getOfferState(bytes)", +"436108ce": "changePasswd(bytes32,address,uint8,bytes32,bytes32)", +"4361443f": "getClaim(address,bytes32)", +"43614f8b": "endFinalStage1()", +"4361b3f9": "TokensCreated(address,uint256)", +"43620f24": "startWork(uint256,bytes32,bytes32)", +"43626c52": "AllInvestorsRefunded(uint256)", +"4362c088": "affiliateLevel()", +"4362c116": "transfert(address,uint256)", +"43634c39": "useSuperPowers()", +"436393ab": "AlrzshTest()", +"4363e888": "withdrawERC20Tokens(address,address,address,uint256)", +"43655fd3": "votesItem(address,uint8)", +"436577ae": "createIssuance(uint256,uint256,uint256,uint256,string,string,uint8,uint256)", +"4365e11e": "BingoLight()", +"43668efa": "ProposalAdd(uint256,address,string)", +"4366af55": "RTC(uint256,string,string)", +"43677ca7": "checkInternalBalance()", +"4367aa3c": "_isReserveUnlocked()", +"4368600c": "initDeposit()", +"436962b4": "_setTarget(address)", +"4369a2c2": "charityAmtToCharity(address)", +"4369c250": "rewardsFactor()", +"436a66e7": "length(string)", +"436a88c1": "DEV_FEE()", +"436b6158": "card2PowerConverter(uint256[])", +"436b8fa5": "Salman_nomaniTestCoin()", +"436d4ff5": "hash(string,address)", +"436d796c": "startPreIco(uint256)", +"436d8fd6": "setGameBanker(address)", +"436da5fe": "transferLog(uint256)", +"436e1e2e": "computeAirdrop(address)", +"436e388d": "enterWallet()", +"436ee4af": "SEEDS_TO_HATCH_1RICE()", +"436f64ac": "rInFp()", +"436fdc0e": "getBattleCardsInfo(uint256)", +"436fedc3": "getRegionUpdatedAt(uint256)", +"43700afe": "strConcat(string,string,string,string,string,string)", +"43703b0e": "getEventData(bytes)", +"437159de": "SYCPrivateEarlyPurchase()", +"4371c465": "isWeekEnd(uint256)", +"4371e46e": "blockCount(uint64)", +"43722993": "NPSTToken(address)", +"43722b09": "extOwner()", +"437257bd": "handlePointer(uint256,int256,uint256)", +"4372df99": "getNotaryForSeller(address)", +"4373f3b4": "setFunding(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"4374356b": "DRUGS_TO_PRODUCE_1KILO()", +"437583a9": "updateReserveToken()", +"4376890e": "egcToken()", +"437764df": "getBridgeMode()", +"43777117": "getMarketOptions()", +"4377cf65": "numberOfContributors()", +"4377d12c": "ChooseWHGReturnAddress(uint256)", +"437852b6": "getRefererAddress(bytes)", +"4378a6e3": "getAttributes(uint256)", +"437933cc": "setDataFeedHash(string)", +"437a8ae6": "multiple()", +"437b1a1d": "KITTY_BURN_LIMIT()", +"437c58a8": "YourtekToken()", +"437c9162": "pre_mined_supply()", +"437cfa4a": "setContractICOAddress(address)", +"437d07d5": "mktCoinCap()", +"437dbf49": "_isAuctionAble(uint256)", +"437f5b65": "isLUNVault()", +"437f6a4b": "userMakeOrder(address,address,uint256,uint256,address)", +"437fa667": "appAccountsLength()", +"4380ab6d": "clock(bytes32)", +"438195f9": "MAX_WHITELISTED_COUNT()", +"4381a07b": "setCustomDisputeFee(bytes32,uint256)", +"4381e1c5": "verificationAddressHoldersListNumberMap(address,uint256)", +"4383603b": "setAllowHalfLife(bool)", +"43846074": "getPreviousDarknodes(address,uint256)", +"43846fc8": "shortLock()", +"4384d53a": "BunnyCoin()", +"43859632": "hasVoted(uint256,address)", +"43863045": "addUintSetting(string,uint256,address,address,string)", +"438652e0": "addTransferWhiteList(address)", +"4386fe0d": "changeMinTokenSale(uint256)", +"43876776": "setPubKey(uint256,uint256)", +"4387d35a": "lockedWallet()", +"43886946": "getPlayerTeam(uint256)", +"43894ac3": "setMintMarketMakerApproval(address,address,address)", +"438af924": "buy(uint256,bool,uint256)", +"438b2aed": "setSettings(uint256,uint256,uint256)", +"438b7b99": "setProfitRatio(uint256)", +"438b9ff2": "payForUrl(address,string)", +"438c3585": "releaseTokensBlock()", +"438c3aff": "contractIds(uint256)", +"438c9068": "ownersProductCommissionInPerc()", +"438c9509": "test_invalidTokenFreeze()", +"438cd2d3": "UnPause()", +"438d1bd7": "storeBubbleSort(uint256[])", +"438d359e": "buyXname(bytes32)", +"438e1316": "next(uint80)", +"438e15fc": "contains(uint256,uint256)", +"438f1eee": "PowZoneToken()", +"4390921e": "distributeOne(address,uint256)", +"43909d76": "EthCannabis(address)", +"4390a4f8": "batchTransferToken(address,address,address,uint8,bytes32[])", +"439198af": "timeLeftToContestStart()", +"4392281e": "SCTX()", +"43923258": "addAddressToAccessControl(address,uint8)", +"43925cc3": "getRoomPlayers(uint256)", +"43927707": "NehalCoin()", +"43928cfd": "addClient(address)", +"439370b1": "depositEth()", +"4394aaad": "getNextAvailableReward(address,uint256)", +"4394cc96": "versionBase(bytes32,bytes32)", +"43951999": "getReportingWindowForForkEndTime()", +"4395dc06": "getTokenInfoTokenList()", +"43973140": "check_lock_period(address,address)", +"439766ce": "pauseContract()", +"43977911": "addFreezeList(address)", +"4398da85": "tokensPercentageForKeyHolder()", +"4398fbd6": "treeWater(uint256,uint256)", +"439abc5b": "getLockByIdx(address,address,uint32)", +"439b91c4": "addBlockeddUser(address)", +"439be05c": "getLoanFilledAmount(bytes32)", +"439d4265": "recordToTransfer(address,uint256,uint256)", +"439d7275": "issuerSymbol()", +"439e10e5": "createUniqueSpinner(string,address,uint256)", +"439e97c4": "alertCreators(uint256)", +"439f5ac2": "getEndTime()", +"439f7d3c": "getSponsor(uint32)", +"439fab91": "initialize(bytes)", +"43a085c2": "ProsperPresaleToken(address,string,string,uint256,uint8)", +"43a335d6": "CreditCarToken()", +"43a4344f": "calcNetworkFee(uint256)", +"43a44f1e": "bonusTimes(address)", +"43a468c8": "delegateBalanceOf(address)", +"43a47345": "floatHolder()", +"43a47ae2": "EthTermDeposits()", +"43a61a8e": "rootOwnerOf(uint256)", +"43a68f3a": "NegToken(uint256,string,uint8,string)", +"43a6e680": "DonationSentButNotDoubled(address,uint256)", +"43a77530": "serviceAgent()", +"43a78b50": "MyAddress()", +"43a7f749": "getInitialPriceOfToken(uint256)", +"43a8775a": "amountOfBagTypes()", +"43a886ea": "filterBrick(uint256,bytes32[],uint256,uint256,uint256)", +"43a88da6": "buyOpen()", +"43a8d9d5": "authorizeWithdrawal()", +"43a92f24": "getAvatarInfo(uint256)", +"43a98caf": "reinvest(bool)", +"43aa8784": "endedGameCount()", +"43ab599f": "EPSCoin()", +"43ab850b": "setDividends(uint32)", +"43abab26": "whitelist_addys(address[])", +"43acb067": "ChefICO()", +"43acd7bc": "Bailout()", +"43ae2695": "propertyToken()", +"43aefca0": "withdrawThetokens(address)", +"43af755a": "blockedDeadLine()", +"43b03d37": "i(address,address,uint256)", +"43b0e8df": "set(uint256,uint256,uint256)", +"43b114fd": "getMyCoins()", +"43b12e95": "BCEToken()", +"43b1938d": "getPhaseSale(uint256,uint256)", +"43b1c529": "getSig(string,bytes4)", +"43b25452": "createPortfolio(uint256)", +"43b3181c": "AIOS()", +"43b3769e": "checkStatus(address,uint256,string,address)", +"43b37dd3": "executionDailyLimit()", +"43b3aa46": "getTokenAmountOf(address)", +"43b50d8e": "evKickoff(address,uint256,uint256)", +"43b5126d": "getVendingPrice(uint256)", +"43b6c7d0": "setClaimedFlag(bool)", +"43b6caf3": "setMintPerBlock(uint256)", +"43b7d9c8": "ITToken()", +"43b7fd58": "RoomRoundAdd(uint8)", +"43b812ef": "r2VaultAddr()", +"43b89c62": "getTransactionAtIndex(address,uint256)", +"43b8aedf": "gimmeTendies(address,uint256)", +"43b978b3": "playerNames(address)", +"43ba2cf5": "transferPreSaleTokens(uint256,address)", +"43bb6a63": "getmemreqscount(uint256)", +"43bc1612": "artist()", +"43bc867e": "claimStupidFluffyPink(uint64)", +"43bcf52a": "bbdToken()", +"43bd262e": "injectAvatarService(address)", +"43bd6e6f": "changeColorYellow()", +"43bdaacb": "getPlayerInternalWallet()", +"43bddf40": "horses()", +"43bdfb72": "updatedTime()", +"43bf63e8": "priceInWeiEdition(uint256)", +"43bf6756": "getMixItemStore(bytes32)", +"43bf718e": "getHashOfTheProposalDocument()", +"43bf74ef": "setKYC(address,uint256,uint8,uint256)", +"43bff765": "tokensPerMicroEther()", +"43c09e77": "updateNote(uint64,uint16,bytes12,bytes)", +"43c0d38c": "getSlotId(address,uint256)", +"43c14b22": "revokeVote()", +"43c1598d": "maxProfitDivisor()", +"43c1f0ed": "timeBeforeJackpot()", +"43c238db": "POMCOIN()", +"43c273c7": "DevSupply_Released()", +"43c29522": "PUBLICSALE_USD_PER_MSENC()", +"43c33ac9": "submitShares(uint256,uint256)", +"43c35651": "completeCrowdSale()", +"43c3658e": "EmporeumToken()", +"43c37393": "solveTask(uint256,uint256)", +"43c569f4": "TotalWin()", +"43c5d889": "locationOf(bytes,uint256)", +"43c639e7": "ownerResetLockedShares()", +"43c6b1f2": "_transferAsset(address,address,uint256)", +"43c6d558": "SportsBet(string,uint256)", +"43c6e10d": "getAffiliateCommision()", +"43c6eff1": "submitClaim(uint256,uint256,uint256,uint256,bool)", +"43c8124d": "PoolAdvisors()", +"43c885ba": "inited()", +"43c8c30e": "removeModeratorship()", +"43c9a189": "allocate1ProjectToken()", +"43ca46dd": "_ownsToken(address,uint256)", +"43ca57bc": "getRetailerStatus(address)", +"43ca78a2": "getNotaryInfo(address)", +"43ca86c6": "nukeApps()", +"43ca9d26": "onNewCampaign(uint256,address,uint256)", +"43cade1c": "reStartPreIco()", +"43caf0dc": "distroyToken(address)", +"43cb0af7": "getBytesArrayLength(bytes32)", +"43cb2b03": "getCurrentTokenCost()", +"43cb3189": "ETHZToken()", +"43cbbce6": "icoRound2()", +"43cc113b": "holdersBonus(address)", +"43cd1638": "deposit3()", +"43cd2c40": "UpdateForecast(bytes32,bytes32,bytes32,bytes12)", +"43cd5ea1": "sendBussinessByOwner(address,uint256)", +"43cd9655": "XBTexToken()", +"43cdaad2": "modelId()", +"43cdc49e": "unlockTokens(address,uint64)", +"43ce179e": "issueOwnerMore(uint256)", +"43ce7422": "getMyEggs()", +"43cf5f0c": "PunaniSupply()", +"43cfbd65": "getCompanyName()", +"43cfd44c": "recover_unclaimed_bets()", +"43cffefe": "challenge(bytes32,string)", +"43d018a0": "whitelistMaxTok(address)", +"43d0ee54": "userRounds(address)", +"43d111ae": "binScan(uint256,address)", +"43d1498b": "setCoAuthor(address)", +"43d1be7b": "setPresalePhase()", +"43d24a5e": "addUpdater(address)", +"43d2b618": "_removeToken(address)", +"43d32e9c": "getSellPrice()", +"43d3a4c1": "getTotalVoters(uint256)", +"43d42780": "icoSoldTokens()", +"43d4759f": "HuuuumanStandardToken(uint256,string,uint8,string)", +"43d47f82": "ProjectFund()", +"43d4b78b": "stateIsWaitingReplay(uint256)", +"43d5773b": "SpaceCraftCore()", +"43d64976": "OwnershipDeleted(address,address)", +"43d6add1": "accessoryOnLeaderboards(uint64)", +"43d6cac5": "removeTokenMetadata(uint256)", +"43d6ec16": "LIFEFORM()", +"43d6fab6": "RegularContract()", +"43d726d6": "close()", +"43d77c7b": "platContract()", +"43d7bfcb": "mintBountyTokens(address[],uint256)", +"43d7cce6": "getToken(address,uint256)", +"43d84d49": "updateCrowdsaleInfo(string)", +"43d8b570": "isTeamVestingInitiated()", +"43d9e070": "sencSold()", +"43db053e": "withdrawDevShare()", +"43db24ad": "EthereumWings()", +"43db5324": "ownerSetCanMining(bool)", +"43db7821": "BINKEY()", +"43dbb2de": "MAX_ETH_FUND()", +"43dc3ab2": "register(address[])", +"43dc7233": "getTokenCreationRate()", +"43dcbc86": "hasNotaryBeenAdded(address)", +"43dd8b30": "updateWhitelistMapping(address[],address,bool)", +"43ddc1b0": "callETH(address)", +"43de34dc": "impl_cancelRedeem(address,uint256)", +"43de6f90": "createHero(string,uint16,uint16)", +"43de82f3": "revealVote(uint256,uint8,bytes32,bytes32,uint32,bytes32)", +"43deb064": "LemonSelfDrop()", +"43deb8e5": "START_SKO1_UNITS()", +"43ded8e3": "MyGlobeToken(uint256,string,string)", +"43defc10": "getVendorByAddress(address)", +"43defdac": "AudtStandardToken(uint256,string,uint8,string)", +"43e08ad1": "addHash(bytes32)", +"43e09695": "deactivatePass(bytes32)", +"43e0c65a": "allowToBurn(address)", +"43e0dfdd": "Leverage()", +"43e1b94f": "AnyName()", +"43e1eb82": "setSiftContractAddress(address)", +"43e204b3": "isTokenLock(address,address)", +"43e20f97": "getPoolbyGtype(int8)", +"43e271ad": "woodworksCities(uint256)", +"43e2e504": "GetBalance(address)", +"43e332c5": "Last_block_number_and_blockhash_used()", +"43e3e527": "Weko()", +"43e41c44": "Kotlind()", +"43e4cef1": "processPrivatePurchase(uint256,address)", +"43e57976": "EthMsig(address[])", +"43e6125d": "Badge(address)", +"43e6cc40": "issueTokens(uint256[])", +"43e6cc64": "StopToken()", +"43e72c5a": "totalPotHomeTeam()", +"43e74f46": "sendPrepaidEthTweet(uint256,string,string,string)", +"43e76a26": "SellerRequestedCancel(bytes32)", +"43e7aa1d": "commitPhaseLength()", +"43e91384": "setICOEndDate(uint256)", +"43e92866": "reservingPercentage()", +"43ea0313": "setRitualFee(uint256)", +"43ea8d7b": "newWithdraWallet(address)", +"43eb37e2": "initChargeJNT(address,string)", +"43eb5ac7": "getData_21()", +"43ec31e2": "TdToken(address)", +"43ec3f38": "toSliceB32(bytes32)", +"43ed2863": "StandardToken(string,string,uint8)", +"43edcb07": "_itransfer(address,address,uint256)", +"43ee67cf": "_transferFallback(address,uint256,bytes)", +"43f0179b": "takerFee()", +"43f29372": "redeemWinningTokens()", +"43f294a6": "setCrowdsaleStop()", +"43f3d27c": "setPrPercent(uint256)", +"43f415d0": "executeDecayFunction(uint256,int256,int256,uint256,uint256)", +"43f46a5c": "getPolicyState(uint256)", +"43f48fbd": "rates()", +"43f4cb4b": "GetCurrentTypeDuration(uint256)", +"43f58f9f": "createNetwork(string,uint256,uint256,uint256,uint256)", +"43f6c643": "purchaseRequest(uint256)", +"43f6c741": "HGToken()", +"43f70917": "create(address,address,address,address,address,address)", +"43f70f60": "dna5(uint256)", +"43f73a3d": "UpdateCurrency(uint256,string,string,string,string)", +"43f76b98": "generateLuckyNumbers(uint256)", +"43f8c639": "tickets100kprice()", +"43f97628": "EcosystemFund()", +"43f98345": "calculateAllReclaimedNow()", +"43f98a56": "tradingDate()", +"43f99e68": "refundExternalPurchase(address,uint256,uint256)", +"43fb86d2": "getGameLength()", +"43fce818": "createAngelCardSeries(uint8,uint256,uint64,uint8,uint16,uint64)", +"43fd377a": "ChannelNew(address,address,address,address,uint256,uint256,uint256)", +"43fd6b21": "revokeStackholderConfirmation(uint256)", +"43fe32fc": "activateProvider(address)", +"43fedd01": "setDisputeData(uint256[3])", +"44004cc1": "withdrawERC20(address,address,uint256)", +"44013585": "setPaymentTime(address,uint256)", +"44017cd6": "test_BondPostedButNoMajority()", +"44019db3": "testCreateWithParents()", +"4401a6e4": "safeSend(address)", +"4401c905": "INTREPID_PRICE_THRESHOLD()", +"4401ff5c": "sellShares(bytes,uint8,uint256,uint256)", +"440208c3": "right12(uint256)", +"440235c0": "changeTrade(address,address)", +"44030e71": "getIsBlockRevenueCalculated(uint256)", +"44036b6f": "setFeePercentTenths(uint256)", +"44036c41": "getTrustedTransferDestinationValue()", +"4403e2ab": "nextLotteryTTWTokenId3()", +"4403ee2b": "setIFS(address,uint256)", +"44048aa5": "getContributorUSD(address)", +"440574eb": "adminUpdatePayout(uint256,uint256,uint256,bool)", +"4405a339": "logReputationTokenBurned(address,address,uint256)", +"4406bc60": "guessHash(bytes)", +"4406face": "lock(string,string)", +"4406fbab": "NectarCrowdsale(uint256,uint256,uint256,address,address)", +"44074cc7": "MaxCoin()", +"4407a75d": "BasicCrowdsale(address,address,address,string,string,address,uint256,uint256)", +"440878c4": "store(bytes,address,uint256,uint8)", +"4408c38a": "HIKEN(uint256,string,uint8,string)", +"4408f3f9": "place_bet(uint8)", +"44090448": "to(bytes32,uint256)", +"440961c3": "adjustPointsDecayFactor(uint256)", +"44097d70": "costWei()", +"440991bd": "freezeDuration()", +"440a16c4": "SEC(uint256,string,string)", +"440a7a0c": "unblockFirstStake()", +"440a926a": "home(uint256)", +"440adb38": "BullsFundToken()", +"440d2437": "designatedReport()", +"440d2ad0": "PRICELESS()", +"440f19ba": "draw(bytes32,uint256)", +"440f807e": "loadMesa(bytes32,bytes32[],uint8[])", +"4410121f": "test_voteSpammingFor()", +"441156cf": "Plutaneum()", +"4411b8f8": "disputeFavor()", +"4411c36f": "avgTokenlossValue()", +"441230e4": "registerHandle(bytes32,bytes32,address)", +"4412e104": "getZombiesByOwner(address)", +"4413a688": "setPreallocations()", +"4414356b": "sale3Accepting()", +"44146c26": "setExpectedTimes(uint256,uint256)", +"441478c3": "prepareToRewardProcess()", +"4414a5c8": "totalLose()", +"4414d940": "napkinPrice()", +"4415516b": "getType(uint16)", +"4415a0bf": "preSaleDiscountPrice()", +"441628f1": "sendTokensToBountyWallet(address)", +"441666c5": "SimpleContract()", +"441691f2": "LexitToken()", +"44169752": "WALLET_ADDR()", +"4417bc66": "VESTED_TEAM_ADVISORS_SHARE()", +"4417f4db": "burnOWL(address,uint256)", +"44187d45": "HerdiusToken()", +"44188b72": "openPreICOPublic()", +"44191d9d": "TokensCreated(address,address,uint256)", +"44195fd2": "ApolloSeptemFinalized()", +"4419cd81": "isContractNodeOwner()", +"4419da33": "changeInvestorAddress(address,address)", +"4419f969": "QuaLed()", +"441a174c": "multiCallTightlyPacked(bytes32[],address)", +"441a2ee3": "Mangocoin()", +"441a3e70": "withdraw(uint256,uint256)", +"441b09d9": "allShares()", +"441b1b44": "getPartialValue(uint256,uint256,uint256)", +"441b4f01": "investContractDeposited()", +"441c3499": "getRefers()", +"441c77c0": "revealPeriodActive(uint256)", +"441d6a61": "timeWait()", +"441deede": "getSafeContract(address)", +"441e354c": "_checkoutCost()", +"441ea478": "GetLandId(uint256)", +"442085b2": "contributorCap(address)", +"4420e486": "register(address)", +"44210bbd": "claimPlotWithData(uint256,uint256,string,string,string,string)", +"44219b05": "getGamePlayingStatus()", +"442484ff": "ExtTokenPurchase(address,address,uint256)", +"44249f04": "tokensForCharity()", +"4425c0eb": "claimWhitelistPack(bool)", +"4425d66d": "backup_exchangeEthStb(uint256,uint256)", +"44261964": "claimFullPrize(address)", +"44268655": "addCroupier(address)", +"4426cdc9": "changeEtherContract(address)", +"44276733": "getRole(address)", +"442890d5": "getContractOwner()", +"4428b072": "getReply(bytes32,uint256,uint256)", +"44292e88": "setZRXToken(address)", +"442a494f": "NewRegistrar(address)", +"442b7ffb": "pow2(uint256)", +"442b8c79": "addYears(uint256,uint256)", +"442bc74f": "placeQuestion(uint256,uint8,uint256,string)", +"442cbcb3": "addParticipant(address,uint8)", +"442cf0ee": "sellTokensForLtc(string,address,uint256,uint256)", +"442d0927": "isSellPossible()", +"442d1759": "GIRLToken()", +"442d27dc": "getLoanTuple(uint256)", +"442d31ca": "ChefToken()", +"442dfae2": "mktSupply()", +"442e1079": "MIN_ICO_GOAL()", +"442e501d": "createDeposit(address,uint256)", +"442eb683": "YouthToken()", +"442edd03": "listItem(uint256,uint256,address)", +"442efdc1": "MigrateController(address)", +"442f52ab": "bilateralCancel(address,address,address,address,bytes32)", +"44304edf": "TGCTokenBase(uint256,string,string,uint8)", +"44314116": "totalRollsByUser()", +"44326354": "pauseITO()", +"4432ce5f": "setTradersProxyContract(address)", +"44337ea1": "addToBlacklist(address)", +"4433a440": "ADXSold()", +"44346e3b": "cancelOngoingTxByAdmin(bytes32)", +"44348a78": "referralIndex(uint256)", +"44350d5f": "neo()", +"4435947c": "CoinyMcCoinface(uint256,string,uint8,string)", +"4435f1c3": "SlashToken()", +"4437152a": "setPool(address)", +"44377ebb": "getTokenAmount(uint256,uint8)", +"4437e7a0": "FlogmallAirdropper(address,uint256)", +"4438744b": "unlockGrant()", +"44389678": "isAcceptedExportingAuthority(address)", +"4438c8ab": "ExchangeRate()", +"4438cf6f": "burnRestTokens()", +"4438d222": "userHasKYC(address)", +"4439ab32": "addRecordEntry(address)", +"4439defa": "getNonce(bytes32[])", +"443ace5b": "InitiateWhaleCard()", +"443af072": "percentToPresalersFromICO()", +"443afe2b": "bssTotalSuply()", +"443b22e6": "ActiveSalesPhase()", +"443bd56f": "getHandleOwner(bytes32)", +"443bdc43": "setStepOneRate(uint256)", +"443d4c9c": "sendPayout()", +"443d8967": "batchWithdraw(uint128[],address[],uint256[],uint128[])", +"443de10c": "getCurrentStaked(address)", +"443e1cf7": "isFightClockAuction()", +"443f19f4": "numberOfTokens(uint256,uint256)", +"443f41d5": "tokenDeposit(address,uint256)", +"443f45a4": "awardprize(uint256)", +"443f577e": "getTotalBalance(bytes4)", +"443f95dc": "allStart()", +"444115f6": "acceptOffer(uint256,string)", +"444195a3": "partnersFundAddress()", +"4441bbd9": "schemaRegistry()", +"44420311": "setInt(uint256)", +"444257a3": "_includes(string[3],string)", +"4442bf02": "closeArea(uint256)", +"444316e8": "MiniMeToken(address,uint256,string,uint8,string)", +"44431e52": "minOVC()", +"44440a59": "isDistributionReady()", +"44447f47": "lockTokenSupply()", +"4444c51f": "_recalculateTopQuestionsOnVote(uint256,uint256,uint256)", +"4444e3cd": "totalSupply(address,bytes32)", +"444581da": "createCloneToken(string,uint8,string,uint256,bool,address)", +"4445b569": "voteWeightOf(uint256,uint256)", +"4446bb11": "verify_signature(bytes32,uint8,bytes32,bytes32,address)", +"4446c98c": "foundersFundTimelock1Address()", +"4447e48c": "configureKeys(uint32,bytes32,bytes32,uint32,bool)", +"44482ab8": "w0keAFPresaleAddress()", +"4448604b": "testFailPreDistribute()", +"4448f5fb": "getEscapeRequestsCount(uint32)", +"4449307b": "addKycAddress(address,bool)", +"44495d7e": "migrateGold(string)", +"444b0c90": "bonusThirdWeekPeriod()", +"444b6048": "setMerchantDealsHistory(address)", +"444bb28d": "TownCrier()", +"444c3d9a": "isCompetitionActive()", +"444c8daf": "tipoCongelamento()", +"444cef88": "sentToken()", +"444d95b0": "proofs(bytes32)", +"444da733": "isRoundEnd()", +"444da951": "extractWei(uint256)", +"444dd6f3": "Elcoin()", +"444e8b43": "pubkeys1(uint256)", +"444e984b": "triggerAttack(uint32)", +"444fda82": "subYears(uint256,uint256)", +"44501404": "goldPrice()", +"445045cc": "_bid(uint256,uint256,address)", +"4451967c": "FOUNDATION_POOL_ADDR()", +"4451cfd9": "DeductFees(address,uint256)", +"4451d89f": "claimToken()", +"44525ace": "roundLatLng(uint8,int256)", +"445264db": "adventurePresale()", +"44536d27": "Create_AutoGame(uint256)", +"44539c72": "setManyWhitelist(address[],bool)", +"44540e57": "ownerBurnOccurred()", +"44554cef": "getRedbulls()", +"44558192": "FMT_Crowdsale()", +"44559f80": "start_token_time()", +"44566fe0": "HumanStandardToken()", +"4456eda2": "isOperator()", +"44578558": "addPlayerMapping(string,string,uint256,uint256,uint256)", +"4457ce5b": "CCH_LLV_303()", +"4457d5f0": "createProject(string,string,uint256,address)", +"44587e3e": "_setNumber(uint256)", +"4458ddca": "ChristCoin()", +"44598c11": "hasOfferingStarted()", +"445a7a23": "isOracleProxy()", +"445b8477": "transferAuditor(address)", +"445cb2df": "getVoting(bytes32)", +"445d1397": "maxTransfers()", +"445d1eff": "_getMyDividents(bool)", +"445d46e1": "onlyInvestor(address)", +"445d60d3": "placeBuyRequest(uint256,uint256,uint256)", +"445d688b": "COTTToken()", +"445d9936": "setTempHeroPower()", +"445df0ac": "last_completed_migration()", +"445df9d6": "getAllPrices()", +"445e4979": "_rejectCertificate(uint256,bool)", +"445f153a": "showBlockmaticsCertificate()", +"44602a7d": "testFallbackReturn()", +"44605ea0": "phase_1_remaining_tokens()", +"4460a2ca": "initializeVesting(address,uint256,uint256,uint8)", +"4460fb6d": "burn(address,bytes32,uint256)", +"4461550b": "devETHDestination()", +"44621145": "goodsOK(uint256)", +"446294ad": "multiAccessGetOwners()", +"446298e2": "Rubid()", +"446303f3": "preSaleCap()", +"4464aec7": "testTryGet()", +"4464c35e": "GNTAllocation(address)", +"4465e38c": "EligmaTokenContract()", +"4466862a": "randomtest()", +"44669e40": "purgeVoter(address,uint256)", +"44673b2d": "NextOwner()", +"44691f2b": "Dispute()", +"44691f7e": "hasStarted()", +"4469981f": "arrayInfoForDeposit(uint256)", +"446a45b7": "fun1()", +"446a7974": "Fokitol()", +"446b512e": "orderedTokens(address)", +"446bffba": "add(bytes32)", +"446c0955": "addWifi(string,string)", +"446d5aa4": "getAttributes(address)", +"446d750b": "setMonthly()", +"446da9c2": "xper()", +"446dba8f": "getBonus(uint256,address)", +"446dde9b": "MilestoneCashBackTime()", +"446e0b40": "onSubExecuted(uint256)", +"446e5079": "SendDividend(address,uint256,uint256)", +"446f608c": "EscrowEscalation(uint256,uint256,address)", +"446f6c1f": "sellStorj(uint256)", +"446fbcd1": "CredSign()", +"446fcf22": "refundPlayer(address)", +"44708f7d": "change_time_stamp_status(uint256,uint256,string)", +"4470da90": "register(bytes32,bytes32,address,bytes32,bytes32)", +"44710181": "parseChannelCompatible(bytes)", +"44720ed5": "TigerCash()", +"4472287e": "numDistributions()", +"4472d3bc": "getShopOwnerAllProductList(string)", +"447400bf": "mutate(uint256,uint256)", +"4474809f": "tournamentEndBlock()", +"4474e057": "ICOSwapRate()", +"44751760": "read(bytes,uint256)", +"44751e3c": "starCoinAddress()", +"447615df": "Whitelist(address,uint256)", +"44767548": "rectangle(uint256,uint256)", +"4476d23b": "destructor()", +"4476d66a": "mintedInBlock(uint256)", +"4476e9a9": "epcwallet(address)", +"44772899": "round6StartTime()", +"44773a6c": "sendToMultipleAccount(address[],uint256[])", +"4477c5da": "stopFunding()", +"44781a00": "notEqual(bool,bool,string)", +"447843cf": "approveChild(address,address)", +"447885f0": "get(bytes32,address,address)", +"4478fbb2": "chOwner(address,bool)", +"44795c13": "RecoverySha256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"447a64c4": "usdContribution(address,uint256)", +"447cd682": "scheduleTransaction(address,uint256)", +"447d7a1d": "_toLower(string)", +"447e2dc6": "c(address,address)", +"447e52a0": "answerQuestion(uint256,string)", +"447e6967": "endPublicSaleStage()", +"447ee48f": "maxUserCreatedPerformance()", +"447fa561": "CAST()", +"447fa8b7": "setDex(address)", +"447fbbe3": "manualSendEther(address,address,uint256)", +"447ffa91": "MineCooldown(uint256)", +"44804664": "OriginSportToken(address)", +"44816e2d": "readhistoricalrounds()", +"4481a486": "transferECOMTokenToContract(uint256)", +"448246c3": "updateReferralMasks(uint256)", +"44830788": "estimateTokensWithActualPayment(uint256)", +"44831edf": "developmentTeamTokensMinted()", +"44834aca": "buyerAddress()", +"44845c28": "MediaCash()", +"4484780b": "checkRecentInvestment(address)", +"4484a2a6": "forceBuyback(address,uint256)", +"4484d92b": "getTotalCommission(uint32)", +"4485cece": "EndTimeChanged(uint256)", +"4485d32c": "storePortfolio(uint256,uint256[],uint256[],uint256[])", +"4486598e": "zeeshanabbc()", +"44866955": "champion()", +"448735e7": "BTN4()", +"4487b392": "removeVerified(address)", +"448883d7": "claimTax()", +"4488ca9b": "hasApproval(address,address)", +"4488cc43": "_addExcluded(address)", +"44890014": "setFxBpsRate(string,uint256,string)", +"4489b2ec": "getABaddressByIndex(uint256)", +"448a064f": "YunMint(address)", +"448a0ceb": "setRoughSupply(uint256)", +"448a5e11": "mintForDisputeCrowdsourcer(int256,uint256)", +"448a5f0b": "getTestimonialCount()", +"448a627c": "SetConfirmRound(bytes32,uint8,bool)", +"448a9915": "oneBillion()", +"448b1f29": "tokensForTrivial()", +"448c0341": "FXRATE()", +"448c6656": "nodePhases()", +"448d76a3": "grantReserveSupply()", +"448d8910": "solve(int8)", +"448f1ec1": "tranferPresaleTokens(address,uint256)", +"448f30a3": "nothing()", +"448f8c86": "Acentiex()", +"44909c99": "Doftcoin()", +"4490efe3": "EthernetCashWebsite()", +"449106ac": "stageCap()", +"4491fe8f": "onlyPay()", +"44938e94": "checkPartner(address,address)", +"4493b8a4": "addrDevTeam()", +"4493ff1c": "vestedBalanceOf(address,address)", +"44947b9d": "getOutcomeOfSecondPeriodByEntity(uint256)", +"4494fd9f": "getGame()", +"4495147b": "RtcCoin(uint256)", +"4495bbf7": "DOXYCOIN()", +"44964dcb": "theList()", +"4496a7ea": "_getCurrentRoundInfo()", +"4497ce22": "getLicenseReimbursement(address)", +"4498acba": "provenAddress(address,bool)", +"44997a58": "MinusToken()", +"4499af81": "setChainLedger(address)", +"4499e043": "UNSOLD_ALLOCATION_EXPONENT()", +"449a058d": "getParentsLength()", +"449a09a4": "interfaceAddr(address,string)", +"449a52f8": "mintTo(address,uint256)", +"449c198d": "setSealed()", +"449c7ad3": "withdrawHouseCutFromGame(uint256)", +"449d0eb1": "checkAccountSchedule(address)", +"449d0f29": "disavowCrowdsourcers()", +"449d1ba4": "fundBountyAndTeam()", +"449d2712": "LEF()", +"449daa9a": "setCostPerEnergy(uint256)", +"449de356": "isIncluded(uint256)", +"449e815d": "getPrice(address,uint256)", +"449ed7e0": "callback(bytes32,string)", +"44a040f5": "getRewardAmount(address)", +"44a08b36": "checkAccess(string,address)", +"44a0d68a": "setCost(uint256)", +"44a17516": "Configurable()", +"44a2542a": "initiateRefund(bytes32)", +"44a2d0d2": "contributorsKeys(uint256)", +"44a3982d": "getTokenPriceForPeriod(uint256)", +"44a3bb82": "getGameIndex()", +"44a5450f": "PRESALE_WALLET()", +"44a5b69c": "Reederem(uint256)", +"44a60878": "DCXToken(string,string,uint256,string)", +"44a6a8f0": "getDonationLength()", +"44a71bc6": "fundingMaxCapInWei()", +"44a7a992": "ParametersChanged(uint256,uint256,uint256)", +"44a7f501": "getOwnersGeneration()", +"44a926f9": "assigned_shares()", +"44a9ff76": "getLastHatchPrice(address)", +"44aa1826": "_minChild(uint256)", +"44aa470a": "addressVerified(address,string)", +"44aa5782": "LagToken()", +"44aa768f": "getLLV_edit_26()", +"44aa8b0e": "createAgreement(string,string,uint8,uint256,uint256,uint256,address,address,uint256)", +"44ab1c2f": "calcHouseEdge(uint256)", +"44ab6970": "redeemBool()", +"44ab6efa": "comB_()", +"44ab7e6f": "setParamsUnOrdered(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"44abc212": "adminWithdrawEIP777(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32,uint256)", +"44abd790": "makePlant(uint256,uint256)", +"44ac423a": "Collect(uint256,uint256)", +"44ac9d81": "resumePreSale()", +"44acb8da": "crowdsaleTokenSupply()", +"44ace7c3": "Tribe(address,string,string,address)", +"44ad5535": "ProofOfContractSnipers()", +"44ae0567": "advisorsReleased()", +"44ae2c03": "getAppNickname()", +"44ae58f6": "Bittrees(uint256,string,string)", +"44af11a3": "startBuyBackOne()", +"44af18c2": "goolaTeamAddress()", +"44af1f4b": "replaceOfficials(address[])", +"44af24d6": "getCurrentPercentage(address)", +"44af946f": "calculateEndTime()", +"44afda9c": "_isValidBaseLayersOnly(uint256[],uint256)", +"44b0245d": "addPurchased(uint256,uint256,uint256)", +"44b07838": "setPaidPackage(uint256,uint256,uint256,uint256)", +"44b07a3e": "newProposal(uint256,string,bytes32)", +"44b11f26": "Registry(bytes32,uint16)", +"44b1231f": "vestedAmount()", +"44b1d6e3": "DEXLITE()", +"44b1e09d": "checkTargetReached()", +"44b1e61a": "isFirstInit()", +"44b20e7a": "drawNum_()", +"44b28d59": "enableMint()", +"44b2a172": "cards_metal(uint256)", +"44b49958": "presaleEtherRaised()", +"44b4d279": "payoutDividends()", +"44b55187": "DollarToken()", +"44b55c3a": "setParking(uint32)", +"44b70d79": "LiquidityNetwork()", +"44b76b9e": "ICOTimer()", +"44b77680": "init(address,address,uint256[])", +"44b786a1": "setRate_BTCUSD(uint256)", +"44b7a3b7": "_createScrapPartAuction(uint256)", +"44b8074c": "changeTotalAmount()", +"44b81854": "STSTEST1()", +"44b81a77": "BitcoinToken()", +"44b88a6d": "scannedBronzeCaps()", +"44b8ccda": "EthLongExercised(address[2],uint256[8],uint256)", +"44b9cab5": "roundBlockCount_()", +"44b9efb2": "setInputData(uint256,uint256,uint256)", +"44ba16a2": "COLOR_PINK()", +"44bb3b2f": "stopBlock()", +"44bb60cf": "sigDestinationApprove()", +"44bc3e27": "BetWEA(address,uint256)", +"44bd7186": "GestiToken()", +"44bd7b71": "setBountyPercent(uint256)", +"44bec848": "thirdRoundPercent()", +"44bee639": "distributeSupply(address,uint256)", +"44bfa56e": "getBytesValue(bytes32)", +"44c010c6": "_getReferralBonus(uint256)", +"44c040a6": "MyAdvancedToken(uint256,string,string,address)", +"44c11fe4": "currentTransferableTokens(address)", +"44c18aa7": "setPayout(uint256)", +"44c20957": "setPhase(uint8,uint256,uint256,uint256)", +"44c20e6f": "retrieveExcessEther()", +"44c2dd52": "RDPMoney()", +"44c2dd71": "HSCToken(uint256,string,string,address)", +"44c3cb29": "validPlayer(uint256,address)", +"44c3cc68": "BasePoll(address,address,uint256,uint256,bool)", +"44c47561": "whiteListed()", +"44c4bf10": "setBlacklist(bool)", +"44c4dc31": "totalContributedAmount()", +"44c4dcc1": "purchasedAmount(address)", +"44c526c1": "devRewardClaimed()", +"44c55801": "setVaribles(string,string,uint256)", +"44c5bbf8": "updateStatus(address,uint8)", +"44c5e758": "getCustomerPolicyCount(address)", +"44c63eec": "vesting()", +"44c71ef2": "changeSaleSettings(address,address,uint256,uint256,uint256)", +"44c73459": "weiPerBlock()", +"44c7d6ef": "claimStake(uint256)", +"44c9716a": "BVA()", +"44c9af28": "getState(uint256)", +"44c9e83d": "purchaseAuthorizer()", +"44ca361f": "Log1(string,uint256)", +"44caa8d6": "isArrAccountIsFrozen(address)", +"44cb1c33": "lastTokens(address)", +"44cc129e": "count_bytes(uint256)", +"44cc5f7e": "m_externalMintingEnabled()", +"44cc7f5e": "validWithdrawToken(address,address,uint256)", +"44ccbed0": "getAssetCollectedOreBallances(uint256)", +"44cef69b": "CreateTokenToOperation(address,uint256)", +"44cf262a": "addressChangeBlock(address)", +"44cff104": "setMarketManagerAddress(address,address)", +"44d02c2a": "infoICO()", +"44d03ac6": "BlockhashFetch(address)", +"44d0afbc": "signingLogic()", +"44d15446": "setDevelopmentAuditPromotionTokensPercent(uint256)", +"44d19d2b": "reservedSupply()", +"44d1a074": "marketsubscribers()", +"44d1a9ae": "setCardDrawPrice(uint256)", +"44d1ef3b": "setTCRHelper(address)", +"44d345f9": "UnclaimedRewardTransfer(uint256,uint256)", +"44d4fd19": "Now()", +"44d60e67": "TransferAssets(address,uint256,address)", +"44d6d259": "AdminAdded(address)", +"44d75fa9": "updateMinorTree(bytes32)", +"44d7e4ed": "stopIssuing()", +"44d9bc5f": "gameEndTime()", +"44daf94a": "showEthBalance()", +"44dbb571": "SALE_START_TIME()", +"44dbc282": "processCallback(bool,address,address,uint256)", +"44dc028d": "lockedtokensOf(address)", +"44dc4dec": "registerForRace(uint256)", +"44dd4b3b": "lookupGeneration(uint256)", +"44dd4b5e": "scheduleTransaction(address,uint256,bytes)", +"44dedf4d": "returnFundsForUsers(address[])", +"44defdfd": "paidInstallments()", +"44df8e70": "burn()", +"44dfdce0": "getNameOwner(bytes)", +"44e02dbc": "returnCollateral(uint256)", +"44e14e59": "lockReferralTokens(uint256,address,uint256)", +"44e191fa": "increaseApproveAndCall(address,uint256,bytes)", +"44e2024f": "createNewFreelanceContract(string)", +"44e20fd2": "EasyPocketCoin(uint256,string,uint8,string)", +"44e2651c": "whiteListOf(address)", +"44e2adeb": "claimedFlag()", +"44e2cc24": "JackpotTimer()", +"44e2f9ad": "buyerInfoOf(address)", +"44e43cb8": "depositRevenue()", +"44e44e0d": "Profeee()", +"44e4c366": "rmTrusted(address)", +"44e4d226": "alreadyVoted(string)", +"44e52420": "TRADERSCOIN()", +"44e5d154": "GenesisGlobalTestToken()", +"44e63717": "LaboToken()", +"44e66ee2": "updateMeterValue(uint256,uint8,uint256)", +"44e780b7": "PrepareRollEvent(address,uint256,uint256,uint256)", +"44e78d93": "wipeDAI(uint256,uint256)", +"44e796de": "doubleBonusArray(address[])", +"44e7faa4": "limitedWalletsManager()", +"44e86b2f": "left71(uint256)", +"44e880c1": "gasAfter_()", +"44ea1c71": "addNFBTNY(address,uint256)", +"44ea4a7c": "TokenCreated(uint8,uint8)", +"44ea54fe": "changeSoundcoinsContract(address)", +"44ec1a0d": "getContestStatusForDateAdmin(uint32)", +"44ec2c03": "addTransaction(uint256,uint256,uint256,uint16,bytes32,uint256)", +"44eccf16": "PSTBCoin()", +"44ed9039": "FLTTToken()", +"44edf6b2": "preIcoEndDate()", +"44ee398b": "secondThawDate()", +"44ee3a1c": "extendLock(uint256)", +"44eef96c": "sellShip(uint32,uint256,uint256,uint256)", +"44ef231b": "argumentCount()", +"44f04404": "forging(uint256,uint256)", +"44f06bc7": "getChampStats(uint256)", +"44f09d2a": "createDungeon(uint256,uint256,address)", +"44f0a4a8": "tdeStartTime()", +"44f0c3ce": "totalLost(address)", +"44f11e7e": "tokenBoughtPerTime(uint256)", +"44f1bbad": "giftRatioOf(address)", +"44f1beed": "Marble()", +"44f1ee5b": "Proof(address)", +"44f2428a": "adjustL(uint256)", +"44f252a0": "confiscate(address)", +"44f26d89": "forceUnstake(address)", +"44f27e30": "getAuctionData(uint256)", +"44f34576": "setTokensBought(uint256)", +"44f38756": "icoState()", +"44f396fa": "startStage2()", +"44f39803": "setBubbled(address)", +"44f5e447": "operatorFeeAcct()", +"44f6d70c": "giftOwnerByIndex(address,uint256)", +"44f7335b": "_verifyAvailability(uint256)", +"44f75cbd": "isAffiliate()", +"44f7636c": "publicOfferingWallet()", +"44f7787f": "ln(uint256,uint256)", +"44f7d03d": "valueOf(uint8,bool)", +"44f84579": "JP_winner()", +"44f96b36": "getRemainingPartnerTokensAllocation()", +"44f96bc6": "matured_timestamp()", +"44f977de": "setStore(string,address,uint256)", +"44f9ac5c": "getPendingWithdrawals(uint256)", +"44f9d060": "_getMinimum(bytes32)", +"44fa961d": "deleteLawyer(address)", +"44fa9ca6": "oracleIsUpdating()", +"44faa139": "Withdraw(uint32)", +"44fb5a1a": "Category(string)", +"44fbaf08": "bountyAmountLeft()", +"44fbc1ef": "Dollar()", +"44fbd125": "increasToken(uint256)", +"44fbe5f5": "NewBiggestDick(string,string,uint256)", +"44fc2a9b": "NOLLYCOINCrowdFund()", +"44fc364c": "setMarket3(address)", +"44fc709e": "set_property_facility(uint256,bool,bool,string)", +"44fc83dd": "LogTokenReward(address,uint256)", +"44fc9361": "maximumInvestmentInWei()", +"44fcbd79": "getLocksForAddress(address,uint256)", +"44fd1557": "ERC20Token(string)", +"44fd584d": "cancelLeaseOffer(uint8)", +"44fdbf5b": "releaseAllTokens()", +"44fddeb7": "BLOCKAPPS()", +"44fe2eb0": "totalPaidDividends()", +"44fe7cd5": "Eliminated(address)", +"44ff5a3e": "CWC_Address()", +"44fff35c": "openCrowdfund()", +"4500054f": "isCancellable()", +"45004310": "signUpUser(string)", +"4500e64f": "showLockValues(address,address)", +"4504169a": "_createFlower(uint256,uint256,uint256,uint256,address)", +"45044611": "TimeCapsule()", +"45048ced": "Presale(uint256,uint256,uint256,uint256,address)", +"450531e7": "aidPoolTokens()", +"4505d53f": "unclaimedPoolsPresent()", +"45061bf8": "tsc()", +"4506e64d": "putOn(uint256,uint256)", +"45078531": "PRESALE_LEVEL_5()", +"4507a545": "shouldBeTrusted(address,address)", +"4507fccf": "addDeal(uint256,bytes32,bytes32,uint256,bytes32,bytes32)", +"45083f73": "appendTranch(uint256,uint256)", +"4509052f": "scannedCaps()", +"4509fd81": "partnersPercent()", +"450a03dd": "getKunsNum()", +"450a9105": "setYctContractAddress(address)", +"450b6079": "RetRisk(uint128)", +"450c4b7b": "LogTokensBought(address,uint256,uint256,uint256,uint256)", +"450c99d3": "etherRealID(address,address,string,string,bool)", +"450cabcb": "publicGetExchangeRate()", +"450d94ef": "TransactionConfirmedAfterEscalation(uint256)", +"450db8da": "ContractUpgrade(address)", +"450dccf6": "cancelOrderWithMerchantByAdmin(string,address)", +"450e2ed3": "startNextCycle()", +"450eefae": "execute(address,uint256,string)", +"450efe21": "getTokens(address)", +"45102ca7": "generateCarId(uint256)", +"451048e2": "isALCDistributed()", +"45104b16": "EXECUTION_GAS_OVERHEAD()", +"45115a17": "PUBG()", +"4511cc7d": "Transfer_nodata_enabled()", +"45126711": "createRandomNumber(string)", +"4512b39b": "sendAndFreeze(address,uint256,uint64)", +"4513a44e": "Saturn()", +"4513a7f4": "IsTransferTempFromOldContractDone()", +"451450ec": "upgrade(uint256,uint256)", +"45145281": "CurrencyFactory(address,address)", +"451512ed": "forceDispute(uint256)", +"451515db": "addProduct(uint256,uint256,bytes32,address)", +"45152b14": "makeUnicTaskHashId(address)", +"45164b3e": "TRANSFER_PROXY_VEFX()", +"451659d9": "exchange(uint256,bytes8,bytes8)", +"45166351": "FRB()", +"4516b707": "DCOIN()", +"45176f8d": "CloutToken(uint256,address)", +"4517a273": "releasePremine()", +"4517bd42": "RetractRoutingDR(bytes32,bytes32,uint256,bytes)", +"4518982c": "firstBonusTokensLimit()", +"45190584": "remainPantry()", +"45196535": "calculateOrderHash(address[],uint256[],uint8,uint8)", +"45199e0a": "getPendingList()", +"4519a069": "toUint32(bytes,bytes,uint256)", +"4519c454": "tokenFallbackExpanded(address,uint256,bytes,address)", +"4519ef8e": "getMinutes(address,address)", +"451a308f": "buyProperty()", +"451b5f47": "preMaxContribution()", +"451bd752": "currentUniqueSpinnerPrice()", +"451bedb3": "getSettingsChangeConfirmationCount(uint256)", +"451beefc": "addressToSplittersCreated(address,uint256)", +"451c3d80": "acceptedToken()", +"451cd22d": "clnAddress()", +"451d65d3": "Debug(uint256,address,string)", +"451df00f": "SongTokenRemoved(address,bool)", +"451e3ec5": "_createName(bytes32,address)", +"451e422e": "windowPeriod()", +"451f0601": "advisersPartners()", +"451f7763": "admin_set_payable(bool)", +"451febcc": "equal(bytes32[],bytes32[],string)", +"452030c4": "end_PRIVATESALE()", +"4520d416": "getReserveminted()", +"45232370": "fechVoteMainInfo()", +"45239b90": "setBeneficiary()", +"4523be0d": "Daily()", +"45243120": "setFiatContractAddress(address)", +"4524c0cd": "defineReleases(uint256[],uint256[],uint256[])", +"4524c70b": "addEmployee(address,bytes32,bytes32,uint256,uint256)", +"4525f804": "constructor(address,address)", +"45261106": "maxBetsPerBlock()", +"4526196e": "addressB()", +"45262b05": "setDefaultExecuteTime(uint256)", +"45266d7e": "BrandAdded(address,address,string,bool)", +"452757f6": "changeContainer(address)", +"452766a5": "EGGS_TO_HATCH_1Cat()", +"45278394": "updateDemurrageReporter()", +"45279c81": "effectiveMaxBet()", +"4527b4b6": "HGUATToken()", +"4528f3ec": "lastPurchase()", +"45293f0e": "Luckybuy()", +"4529cae7": "getTotalPlayers()", +"4529cd71": "SOFT_CAP_IN_ETHER()", +"4529cd8a": "AdvertisementStorage()", +"452a33f0": "grantTrophy(address,bytes32)", +"452a344f": "MintStarted()", +"452ae331": "attack(address,uint256,uint256)", +"452af6c6": "ForegroundPaymentResult(bool,uint256,address,uint256)", +"452b7757": "AirDropPayBitsR3(address[])", +"452ccadb": "changeBountyFulfillmentAmount(uint256,uint256)", +"452d3c59": "transferPreSignedPayloadHash(address,address,uint256,uint256,uint256)", +"452d44dc": "checkBothNotNull()", +"452ddecc": "startBallot()", +"452e0d25": "sURL()", +"452e880b": "readArticle(string)", +"452e9802": "getDetails(address,address)", +"452e9acb": "setMsgHash(bytes32)", +"452fa483": "TOXToken()", +"452fbc41": "USN(address,address,bytes,uint256,uint256,uint128)", +"45301024": "ownerDispute(uint256,uint256,uint256)", +"4530a6c6": "getWishTribute(uint256)", +"4531aaa3": "EverydayTokenStandardToken(uint256,string,uint8,string)", +"45327fef": "calcSharePriceAndAllocateFees()", +"45334894": "setTeleportPrice(uint256)", +"4533f779": "determineWinnerOdd(string)", +"45350759": "addTier(uint256,uint256)", +"45350b6b": "readFromStorageView()", +"45362978": "query1(string,string)", +"4536be70": "periodITO_hardCapInWei()", +"4537544c": "makeAccountIterable(address)", +"4537b7de": "developingFund()", +"45385448": "BEERS()", +"45387d2c": "_getTournamentSupportAmount(uint256)", +"4538b7ec": "CallExecuted(address,uint256,uint256,uint256,bool)", +"453920cb": "changeTokenName(string,string)", +"45395b03": "tokensIssuedOwner()", +"4539bf18": "date01Feb2019()", +"453a6e0d": "getAmountConverted()", +"453aa450": "vote_proposed_address(string,string)", +"453b7eab": "totalControlledBalance()", +"453c2310": "maxPerWallet()", +"453ca7ee": "RewAddr()", +"453cbb11": "canConvertTokens()", +"453cddaf": "performPhase()", +"453dc243": "setWoodAddress(address)", +"453dd97f": "getDevWallet()", +"453dfcae": "payExtraTokens(uint256)", +"453e5a2c": "registerMarket(bytes32,address,address)", +"453e6fa0": "schedulableAmount()", +"453eca78": "getRealmNum()", +"453fe8cb": "calcUnMaskedEarnings(address)", +"453fef69": "setPrepaid(address,uint256,uint256,string,uint256)", +"454052ea": "relent()", +"45406101": "TTCToken(address)", +"45408a8a": "minCashout()", +"4540a396": "importBalancesOf(address[])", +"45411c8d": "checkAllowedTier(address,address,uint8)", +"45414df1": "b2s(bytes)", +"4541c39c": "to_end_ico()", +"4541e154": "sumICOStage4()", +"45421d9b": "reembolsar(uint256,uint256)", +"45426082": "countdownDecrement()", +"454274f9": "BroFistCoin(uint256,uint256)", +"4543754f": "totalUserStakes(address)", +"4543f79e": "withdrawERC20ToOwner(address)", +"454431c1": "RangeGameWithITG(address,uint256)", +"454481dd": "nextLotteryTTMTokenId4()", +"45448a28": "approveAddOwnerRequest()", +"4544ad22": "allByAuthor(address,uint256)", +"4544c48c": "distributeWinnings(uint256)", +"454584e6": "_setProviderInvitedUser(uint256,address,bool)", +"45458643": "setPI_edit_16(string)", +"45461e78": "MToken()", +"4546ad06": "sendProposal(string)", +"4548821c": "ExBatallionCoin()", +"45488ac1": "buyStake()", +"45493057": "validateClaimTokens(address)", +"454a2266": "dhopakexchange(address,address,address,uint256,uint256,uint256)", +"454a2958": "foundersTokenTimelock()", +"454a2ab3": "bid(uint256)", +"454aa6cf": "getPhoenix(uint256)", +"454b0172": "Created(address,address,address)", +"454b0608": "migrate(uint256)", +"454bccd0": "mininumContributeWei()", +"454bf426": "sysFeePermillage()", +"454c57ee": "getStockBuyOrderPrices(uint256)", +"454c5d34": "allocateBalance(uint256,address)", +"454c87b3": "matured()", +"454ca9fd": "get_my_tokens()", +"454ccc2f": "totalAngels()", +"454d3e24": "investorsBalance()", +"454d9bb4": "MerkleMine(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"454dd6d2": "GetMinimumBet_Ether()", +"454dfaaf": "claimSale()", +"454f7b8f": "totalPayout()", +"455052b9": "getInstanceMetadata(uint256)", +"4550fa72": "isConsensusObtained(uint256)", +"4551b1d7": "ProxyPayment(address,address)", +"4551dd59": "isCrowdsale()", +"455259cb": "getGasPrice()", +"45528aa8": "addItemToInternal(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4553c343": "getEarningMetrics(address,bytes32)", +"4553fd4d": "token_ratio2()", +"455501d3": "Submission(address,uint8[])", +"45550a51": "recoverAddressFromSignature(bytes32,bytes)", +"455530a6": "TestRandomNumber()", +"45556969": "DealerSocketCoin()", +"4555d5c9": "proxyType()", +"4555db10": "tokenRecovery(address,address,uint256)", +"4556611e": "weiToShare(uint256)", +"45576f94": "createToken(string)", +"455770a4": "setIcoPhase1(uint256,uint256)", +"455778ed": "advisorsTokensSecondReleaseTime()", +"45579b1f": "transferShares(uint256,address)", +"4557a579": "addWeapon(uint256,string,string,string,address)", +"4557b4bb": "init(uint256,address,address)", +"4557c70d": "CrowdWallet(address,address,uint256)", +"45585afe": "manageInvitations(uint256,address[],address[])", +"4558850c": "apps(bytes32,bytes32)", +"4558d717": "changePaymentToken(address)", +"45590ec8": "addTag(uint256,string)", +"45596e2e": "setFeeRate(uint256)", +"45598b4a": "cancelCampaign(uint256)", +"45599136": "tokenFee()", +"4559b2e8": "holderAdvisorsTokens()", +"455a2a37": "MyAdvancedToken(uint256,string,uint8,string)", +"455a380d": "getTotalAmoutStageAddress(address)", +"455b33ab": "gambler2()", +"455bf142": "refundeesListLength()", +"455c06e4": "mintTokens(address,int256,uint256)", +"455c7050": "EscrowManager()", +"455ca9bd": "refundTokens(address)", +"455d4077": "_startLockup()", +"455d86b8": "revenueShareOwnerAddress()", +"455dc46d": "nextMinimumEpochInterval()", +"455df579": "left84(uint256)", +"455ea98c": "getInUse(bytes32)", +"455eb777": "canStake(address,uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", +"455ef8f9": "coinsCount()", +"455f1725": "getTotalAmountOfBlocks()", +"455f6f31": "totalTokensBurnt()", +"455fd623": "totalWithdraw()", +"455fea46": "getTankDetails(uint32)", +"455ff9a4": "lastBlock_v16Hash_uint256()", +"456176eb": "PCDStartTime()", +"45622c31": "setContractAllowance(address,uint256)", +"45624260": "getNumPositionOperation(string,address,string)", +"45626ecb": "removeStages()", +"45629402": "changeDefaultWithdraw(address,address)", +"45639e37": "distributeEtherToAllShareholders(uint256)", +"4563b743": "getPAAttributes(uint32)", +"4563f30a": "transfersPaused()", +"45644fd6": "removeOracles(address[])", +"45645572": "presale(address,uint256,uint256)", +"4564ea36": "forceVoidExternal()", +"45653a6d": "creater()", +"45656757": "p1_start()", +"45668923": "Aikcoin()", +"45668f2b": "ORACLIZE_GAS()", +"45669c8d": "protectedTransferToMint(uint256,bytes32)", +"4567a6a7": "getXCPlugin()", +"4567c5f7": "buySharePriv(uint256)", +"45680e09": "createPixels(uint256)", +"4568fb50": "finishRoundAndStartNew()", +"4569db8a": "getCustomerTxAmountKWh(address,bytes32)", +"456a09c8": "withdraw(uint256[],uint256[],address)", +"456c2892": "finalizeLottery()", +"456c64e0": "getGamesOdds(uint256[])", +"456c8cac": "saleStopped()", +"456cb7c6": "authorized()", +"456cbafc": "AddressWarsBeta()", +"456cee82": "setAmountPerEther(uint256)", +"456f3c3b": "internalIcoFinished(uint256)", +"456fe579": "notate(address,uint256,uint256,uint256[])", +"4570160e": "MotionToken()", +"45705906": "isLeading4FF(address)", +"45705d93": "BwinToken()", +"457094cc": "fire()", +"45710074": "sell()", +"45714c7b": "TOKEN_CLAIM_WAITING_PERIOD()", +"4571a7f1": "maxStage()", +"4571d4c4": "FutureCall(address,uint256,uint16,address,bytes,bytes,uint256,uint256,uint256)", +"45734d2b": "sizeOfInt(uint16)", +"45737b1e": "changeEndDate(uint256)", +"457391e5": "createGame(bytes32)", +"4573a421": "ico4Sold()", +"4574dea5": "setBreedingFee(uint256)", +"45751137": "newDeposit(address,uint256,uint256)", +"457556c2": "getUBetChecks()", +"45755dd6": "returnFunds(uint256)", +"457610e5": "cancelTransaction(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"4576a635": "setCategoryCap(uint256,uint256)", +"45773e4e": "sayHelloWorld()", +"457750a4": "marketIncentivesAllocation()", +"457770d8": "PreICO(address,address,uint256,uint256)", +"4577942c": "lastTransactionTime()", +"45787fed": "WolframExchangeTimes()", +"45788ce2": "prev(address)", +"4579268a": "getOffer(uint256)", +"45798593": "Certification(string,string,string,string,string,string,string)", +"4579c805": "createDistritoVerify(uint256)", +"457a21bc": "GullitCoin()", +"457a893f": "upPlayer(address,bytes32,uint256,uint256,uint256,uint256)", +"457b4e1b": "_setMoreDetails(uint256,uint256,uint256,uint256,uint256,address)", +"457bb613": "initializeUsers()", +"457c600c": "getItemAllowanceAmount(uint256,address,address)", +"457ce032": "getTokensFromExchange(address,uint256)", +"457cf77a": "couponToken()", +"457d13ca": "getPlayerBet(string,address)", +"457dd8b3": "setMasterKey(address)", +"457e5521": "getAllPolicies()", +"457e8fc7": "calculateReward(uint32,address,address)", +"457eff2f": "GetMySnails()", +"457f4d41": "hammer()", +"457f55fb": "updateRightLottery()", +"4580a950": "setDecreaseRepAvailableForExtraBondPayouts(bool)", +"4580cc5e": "setFinished(uint256,uint256)", +"458284fb": "setACLRole7123909213907581092(address)", +"45837e5f": "updateLandData(uint256,string)", +"4584117e": "mintParts(uint16,address)", +"45848dfc": "GetAllAdmin()", +"4584afe5": "buyLambo()", +"45850658": "closeAssignmentsIfOpen()", +"4585ad02": "delayDefaultAction()", +"4586a517": "addTotalSponsored(address,address,uint256)", +"4586e4ab": "balanceInPlay()", +"45871918": "raceToBaseStats(uint256)", +"4587327a": "doAirdrop(address[],uint256)", +"45874c93": "PersonaIdentity()", +"4587501e": "baseIcoPrice()", +"4588c1ef": "setPI_edit_2(string)", +"45895620": "getAvatar(address,uint256)", +"458a645d": "resolveDeposit()", +"458b1471": "mintingFinishedTime()", +"458c9ca4": "year3Unlock()", +"458d5968": "getMyTokensEmits()", +"458d96bb": "transferLockedMultiply(address[],uint256[],uint256[],uint256[])", +"458da775": "_makePlant(address,uint256,uint256)", +"458e18d7": "AMLOveCoinVoting(address)", +"458e78d5": "getSchellingRound(uint256)", +"458efde3": "vest()", +"458f837f": "minSumICOStage1USD()", +"458fa428": "summDividendReserve()", +"458ff74f": "authorizeBurnFulfiller(address)", +"45906baf": "Restrictable()", +"45909a6f": "getBalanceOfUser(address)", +"4591a980": "verifyStep(uint256,bytes,bytes,bytes)", +"4591b7c6": "fillBonds(address)", +"4591c060": "fork()", +"4592282e": "LBC()", +"4592cd1d": "claimContractOwnership()", +"4592fec8": "returnBids(uint256,address)", +"459348dc": "BISTEXToken()", +"45934d0b": "getIdentityName()", +"45941a38": "lastTimeOfNewCredit()", +"45945a45": "isRoundActive()", +"459469e0": "FundsRegistry(address[],uint256,address)", +"4594762a": "getSkill(uint256,uint256,uint256)", +"459497fc": "ownerAddressInLUT(uint256)", +"4594d06a": "delMinter(int256,address)", +"45950cd4": "selfairdrop()", +"4595343f": "dividendsRightsOf_(address)", +"459659a4": "Exchange(address)", +"45967555": "deployedContracts(address,uint256)", +"45977d03": "upgrade(uint256)", +"45977ebb": "LINCToken()", +"4597dc8e": "CooldownThreshold()", +"45983b24": "isReferralSupported()", +"4599308f": "buyCow()", +"459a2192": "cardDetailsList(uint256)", +"459a585a": "testCreateToken()", +"459a6589": "transferInGame(address,address,uint256)", +"459ae9b3": "addMembers(address,bytes32,address[])", +"459b0d97": "SimpleConstructorBytes(bytes32,bytes32)", +"459b2cd6": "OwnableWithRecovery(address[],uint8)", +"459b3926": "Airdrop_Limit()", +"459c7d0b": "tokenIcoUsdCentPrice()", +"459cb2be": "agreedTermination(uint256)", +"459ccde6": "modifyRandomNumber2(uint256)", +"459ebb8c": "BCMtest()", +"459ec508": "betOnColumn(uint8)", +"459f93f7": "getBuyers(uint256,address)", +"45a058c1": "flag_is_Ethereum_Function_Signature_Database_Is_Big()", +"45a132d4": "LemonSelfDrop1()", +"45a15388": "marketPrice()", +"45a1b92c": "onBurn(address,uint256)", +"45a1d72a": "_tobuy(uint256,address,uint256,uint256)", +"45a1f1b9": "getInitials()", +"45a2556c": "getBucketOwedAmount(uint256)", +"45a2a3df": "withdrawTeamPerfit()", +"45a37bd6": "kycManagerWallet()", +"45a3816c": "forfietCollat()", +"45a3b0bf": "resolveFailPledge()", +"45a3c7c6": "_createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"45a40478": "downs(address)", +"45a45695": "baseTargetInWei()", +"45a48de6": "getBigPromoRemainingBlocks()", +"45a4a39c": "completePost(address,address)", +"45a727de": "checkForUpdaterUpdate()", +"45a743d1": "TOTAL_AIRDROPPED_TOKENS()", +"45a7b991": "getContributionHashes()", +"45a88ff6": "claimPlotMultiple(uint256[])", +"45a8d80e": "PiPiCoin()", +"45aa257a": "VICCoin()", +"45aa324c": "start_service(address,uint32)", +"45aa6e98": "tokensCreated(uint256,uint256)", +"45aa7f69": "OffMenuMorselToken()", +"45aa83d8": "blockoptions()", +"45ab17bf": "setRefunding()", +"45ab63b9": "walletFeesInBps(address)", +"45ab8e07": "CoinsdomCoin(uint256)", +"45abc063": "totalLoadedRefund()", +"45abe20a": "investorsIndex(uint256)", +"45acc490": "executeAmendmentMandate(uint256)", +"45ad35bc": "lastCallAddress()", +"45ad55cc": "PRE_ICO_DURATION()", +"45ade051": "getUtilizationRate(uint256,uint256)", +"45ae47fd": "CardFactory()", +"45aeff61": "getStockKey(bytes6,bytes6)", +"45af4bc2": "JJToken()", +"45af7ceb": "invalidateHash(bytes32)", +"45b0f6d2": "sealBurner(bytes32)", +"45b17abb": "distribute_private_sale_fund(address,uint256,uint256)", +"45b1c336": "icoWeek3Bonus()", +"45b21736": "getCBAStatusMessageLength(address)", +"45b26383": "contributeFund(string)", +"45b30e7a": "GTBToken()", +"45b35f56": "getAllRewards()", +"45b3fe42": "Y()", +"45b426f2": "option30symbol()", +"45b50255": "getBooking(string,uint256,uint256)", +"45b5143b": "TUMITOKEN(uint256,string,uint8,string)", +"45b581a2": "getPotentialProfit(address,string)", +"45b5a47a": "GetEther()", +"45b64133": "HHRLocker()", +"45b660bd": "IssueTokensToInvestors(address,uint256)", +"45b6ccfd": "MAX_MIDGRADE()", +"45b727f3": "getShop(uint256)", +"45b748ab": "SSPUnregistered(address)", +"45b7d5da": "setFrozenAccount(address,bool)", +"45b7fdd4": "TheGreatWishOfChina()", +"45b8bafc": "floorLog2(uint256)", +"45b8c0c2": "parcelGzeWithBonusOffList()", +"45b8fa03": "TokenLongExercised(address[2],uint256[8],uint256,uint256)", +"45b9ca21": "getEther(uint128)", +"45bae1eb": "carAccts(uint256)", +"45bae539": "getContributeParticipant()", +"45bbee71": "rmAsset(address)", +"45bbf9b5": "TotalPayment(uint256)", +"45bcd68f": "BitVideoCoin()", +"45bd3752": "intMemoryArray(int256)", +"45bd7f03": "addBountyAddresses(address[])", +"45bda564": "SPECIALIST_STAKE_THREE()", +"45bddbb8": "thanksAllGenesisUsers()", +"45bdfedb": "getAdrByIndex(uint256)", +"45be66eb": "SportsBet()", +"45beb6e0": "matchAgainstBook(uint128,uint256,uint256,uint256)", +"45bf5cb2": "testInitialBoardUsingDeployedContract()", +"45bfdca6": "addWalletAddresses(uint256,address)", +"45c08718": "updateCredit(address)", +"45c1234c": "Sent(address,uint256,string,string)", +"45c12560": "LogMoneyToPreICO(address,uint256,string)", +"45c1523a": "OzsToken()", +"45c16a22": "getSaleStage()", +"45c1c9fc": "setBuyEnable(bool)", +"45c35fd5": "publicOfferingTokens()", +"45c38053": "tankAllowance()", +"45c41132": "_emitPaymentReleased(uint256)", +"45c41478": "getMarkets(bytes,address)", +"45c46619": "addWhitelistedBurn(address)", +"45c531f3": "secondDiscountPrice()", +"45c5904f": "malangtoken()", +"45c5b8ac": "set_game(address)", +"45c5de81": "listTeamTokens(uint256)", +"45c654eb": "TravelToken()", +"45c6a874": "adminMultiSig()", +"45c7a092": "isValidSignature(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"45c8b1a6": "unfreeze(address)", +"45c8e118": "view44()", +"45c917ec": "closeDeposit()", +"45c9a11a": "maxProfitPercentage()", +"45c9a558": "getPeriods()", +"45ca25ed": "changeName(address,string)", +"45cb3dde": "withdrawTime()", +"45cb3f4d": "highestBidPrice()", +"45cb4559": "gameGiftUserTotalTimes()", +"45cb9994": "Lookup()", +"45cbf879": "getStageByBlockNumber(uint256)", +"45cc13c3": "tokenize()", +"45cc50ce": "endTimeIco()", +"45ccd426": "ObokContract()", +"45cd4820": "participate(address,uint256,bytes32,address)", +"45cdb714": "changeColorWhite()", +"45ce0dc1": "addLambo(string,uint256,bool)", +"45ce691a": "buy(uint256,uint256,uint256,uint256,uint256,uint256)", +"45ce86eb": "whitelistApplication(bytes32)", +"45cf093a": "sumDividend()", +"45cf8467": "getSqr(uint256)", +"45cfad3e": "TOKEN_PRICE_N()", +"45cfcc42": "getKeyVotes(string,string)", +"45d0695f": "arr(uint256,uint256)", +"45d1b657": "PRE_SALE_3000_ETH()", +"45d27edf": "forward_method(bytes,address,uint256,bytes)", +"45d30a17": "releasedAmount()", +"45d3292b": "receiveDonation()", +"45d3b8db": "superAddress()", +"45d3cc81": "getAnimal(uint256)", +"45d4cf2b": "createPrivilege(string,address,address)", +"45d5149f": "minContributionAmount()", +"45d53788": "numOrders()", +"45d58a4e": "getWalletOut()", +"45d607fe": "referralFee_()", +"45d63b07": "BrokerNekoNetwork()", +"45d63b66": "recommit(uint256)", +"45d6c9db": "PVP_BATTLE()", +"45d78d08": "getTokenAllocations()", +"45d7fd3e": "setCreationAddress(address)", +"45d8a232": "targetTime()", +"45d8a6df": "tablePrices(uint256)", +"45d9a1ce": "withdrawBalance(address,address,uint256)", +"45d9bd15": "getBookmarks()", +"45da75d3": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256)", +"45dafed2": "Marcellocoin()", +"45db72ff": "lastLoveLetter()", +"45dc16ca": "trade(uint256[12],address[4],uint8[2],bytes32[4])", +"45dc3dd8": "setMin(uint256)", +"45dcb788": "dataSourceGetRoundOfSixteen(uint256)", +"45ddc85d": "voteOf(uint256,address)", +"45ddcf99": "unlockUntradeableCards(address)", +"45de2567": "transferTokens(uint256,uint256)", +"45df30d2": "transferPlusFee(uint256)", +"45df925f": "ratingList()", +"45dfe7f3": "restrictedWallet()", +"45e05f43": "affiliate()", +"45e09e54": "getBoard(uint256)", +"45e0e324": "FoodStore()", +"45e0e412": "forwardTokens(address,uint256)", +"45e231a6": "XCONToken()", +"45e26105": "updateMaintenanceMode(bool)", +"45e29057": "_myLuckyNumber()", +"45e3553e": "setMaxProtoId(uint16)", +"45e373ed": "getCertificateById(string)", +"45e381a9": "set_minFinneyPerHedgeTransfer(uint256)", +"45e39705": "addMember(string,address)", +"45e3b8c0": "SHOP()", +"45e41468": "placeSell(address,uint256,uint256)", +"45e479f6": "GetDiv()", +"45e4c361": "rteamVaultAddr()", +"45e4db40": "addTxInBuffer(address,uint256,uint256,uint256,uint256)", +"45e4fd6e": "listItem(uint256,address,string)", +"45e5da07": "ETHAssets()", +"45e5fd8b": "nonActivationShortWithdrawal(address[2],uint256[7],uint8,bytes32[2])", +"45e63f22": "getNumberOfMessages()", +"45e7e140": "getReservedPercentageDecimals(address)", +"45e7e14b": "ReputationUpdated(string,uint256,uint256,string,string,address)", +"45e82175": "level_5_percent()", +"45e8baa7": "checkSignatures(bytes,bytes,bytes,address)", +"45e93903": "SpooksterCoin()", +"45e965cd": "strConcat(string,string,string,string)", +"45e971bf": "updateStatus(uint256,bytes32)", +"45ea375f": "viewPot()", +"45eada10": "setProvider2(address)", +"45eb4b28": "destinationAddress20()", +"45eb7c8e": "CompleteAddOn(uint256,address)", +"45ebc145": "publish(uint256,string,string,string,bool)", +"45ebe153": "moveIcoEndDateByOneMonth(uint256)", +"45ec26ac": "distributedCount()", +"45ec7670": "WallStreetCoin()", +"45ec9e87": "Eurovision()", +"45ecd02f": "isActiveMember(address)", +"45ed68e8": "defaultSalePrice()", +"45ede900": "setPropertyOwnerSalePrice(uint16,address,uint256)", +"45ee49b9": "getUltimateOutcomes(bytes)", +"45ee9151": "BountyTransfer(address,address,uint256)", +"45ef8217": "clear_market()", +"45f00b06": "setNewTalentsAndPartnerships(address)", +"45f03f31": "EthereumLottery(address,address,address)", +"45f09140": "chargebackCoins(uint256,address)", +"45f0db24": "get_coin(uint256)", +"45f11fc8": "trancheAmountPct()", +"45f23f10": "crowdsaleFundsWallet()", +"45f28864": "Appitoken()", +"45f28e77": "genToStartPrice(uint256)", +"45f32b02": "currentModifier()", +"45f32b6d": "totalCirculating()", +"45f32e77": "currBlock()", +"45f412b0": "removeStakeHolder(address)", +"45f45449": "EtherCash()", +"45f472fc": "saltNHash()", +"45f4c1ba": "pay(uint128,address)", +"45f536f7": "sendPer2()", +"45f63927": "increaseGame()", +"45f67eb4": "setTolerance(bytes32,uint256)", +"45f6ee41": "setPrice(uint16,uint16,uint8,uint256)", +"45f7f249": "totalAllocated()", +"45f826da": "setMinimumInvestment(uint256)", +"45f8567c": "paySmartContract(bytes32,address[],uint256[])", +"45f8f1e8": "RajTestICO(address)", +"45f9072b": "setColorOrange()", +"45f988a4": "priceT2()", +"45f99d51": "claimFailed()", +"45fa4045": "getVestingPeriodNumber()", +"45fa53e7": "pieAccounts(uint256)", +"45fb0cd6": "addMultipleAddressesToCappedAddresses(address[])", +"45fbe9cb": "spawnChild(string)", +"45fbfbca": "investment()", +"45fc916c": "setPricingPlan(address)", +"45fcceb4": "foundersTokensReserve()", +"45fd2478": "_getShipType(uint256)", +"45fd3666": "isTurnDataSaved()", +"45fd4040": "addAllowCnsContract(address,bytes32,address,bytes32)", +"45fd865a": "HazzaToken()", +"45fd9e23": "claimOwnership1()", +"45fdab4c": "sellSkill(uint256,uint256)", +"45fdef65": "addCandidate(address,bytes32,bytes32)", +"45fe5850": "OrganFunction(string,string)", +"45fe5a83": "deliveryTime()", +"45fe5aea": "useKey(address,uint256)", +"45fe6e2a": "Scheduler()", +"45febc32": "BugisNet()", +"45ff59b2": "createTokensForCrypton()", +"45ff8b75": "get_HoldersProfit(uint256,address)", +"45ff8fde": "request(bytes32,uint256,uint8,uint256)", +"460123cf": "findAddressByEndpoint(string)", +"4601cded": "getNumSides()", +"46021deb": "getLastAuctionedShipId()", +"4603032a": "withdrawByTeam(address,uint256)", +"46032178": "MigrateAgentSet(address)", +"460485e0": "fundsWithdrawnByOwners()", +"46051eb7": "getProductHistoryUser(bytes32)", +"46054144": "ASIEX()", +"46055acd": "Decline(address)", +"46057b70": "timeOver()", +"46061579": "check1(uint256)", +"4606ccd1": "spinAllTokens()", +"4607c26e": "periodsPassed()", +"4607ef57": "preICOTokenRewardRemaining()", +"46080a94": "subResearch(address,uint256)", +"46082aaf": "approveDeprecation(uint256,address,bool)", +"460885ab": "_createNewLottery()", +"46091499": "transferFrom(address,address[],uint256[])", +"46093b0e": "setOracleAddress(address,address)", +"460a6507": "giveReward(address,address,uint256)", +"460ab47b": "proposeChangeOwner(address,address)", +"460ad570": "newOraclizeResult(bytes32,string)", +"460b4a45": "getTotalBonusesAmountAvailable(bytes32)", +"460c1a7a": "cancelOrders()", +"460c3be5": "owner_LockUpdateTokenAccount(address,bool)", +"460d674b": "keyFromIndex(uint256)", +"460e2049": "getPlayers(uint256)", +"460f740e": "createData(string,string,string)", +"460fce3b": "milestoneStarted(uint256)", +"4610a448": "vestingBeneficiaryForIndex(uint256)", +"461105c7": "withdrawBoth(uint256,uint256)", +"4611636e": "erc20VGC(uint8)", +"46116e6f": "sireAllowedToAddress(uint256)", +"4611a5e3": "calcRefund(address,address)", +"4611efde": "changeTBrate(uint256)", +"4611fb0e": "RSC()", +"4612b88d": "deleteDiniRequest(uint256)", +"46134e33": "getPrivateSaleEndDate()", +"46141657": "SetdivForTank(uint256)", +"4614185a": "IkuraTransfer(address,address,uint256)", +"46143a39": "setMessageSpan(uint16)", +"4614689c": "showWinners(uint256)", +"4614874e": "createEscrow(address,uint256)", +"46156ea0": "odds(uint256)", +"461645bf": "window()", +"4616caa9": "pushCoin(uint256,address,string)", +"4616fc3f": "setSystemSaleAddress(address)", +"46172c04": "calculateRewardForAddressAt(address,address,uint256)", +"461751e6": "resetMistCallLoad()", +"46183d06": "getTktPrice()", +"46190e16": "getSpecId(bytes)", +"46190ec4": "nextId(address)", +"461998fc": "cancelRecurringPayment(address)", +"4619aa19": "pvpOwnerCut()", +"4619c0ca": "insertBeneficiaries(address,address,uint256,uint256,uint256)", +"461a2df9": "PretherICO()", +"461a4478": "resolve(string)", +"461ac019": "deployedTime()", +"461ad9e9": "saveGenCode(address,uint256,string)", +"461c89b3": "massMint(uint8[],address[],uint256[])", +"461db9ad": "GoCryptoCoin()", +"461df016": "getQuantities(address)", +"461e0be5": "ElphToken()", +"461efbf8": "testEtherFundMeCrowdfunding()", +"461f48cb": "setUsersBounty(address[],uint256[])", +"461fd83b": "myEtherBros(address)", +"46203efe": "frozenAccountCoinByHour(address,uint256,uint256)", +"46205ac3": "hodlFor1y()", +"4620adbb": "tokenPricePerUSD()", +"4621a5d9": "activateRevenueShareReference(uint256)", +"4621e552": "decreaseRemainLockedOf(address,uint256,uint256)", +"462219f8": "batchTransfer(bytes32,address[],address,uint256[])", +"46226514": "isPresidenteDeMesa()", +"4622ab03": "names(uint256)", +"46238c69": "nextRedemptionRequest(uint256)", +"4623beb6": "InterestTest(address,address)", +"4623c81e": "TIMELOCK_DURATION()", +"4623c91d": "setValidator(address,bool)", +"4624321e": "decreaseApprovalWithData(address,uint256,bytes)", +"46256be7": "getAgentAdressById(uint256)", +"46272a6d": "mySavings()", +"4627de42": "getIncrease()", +"46280a80": "sell(uint8,uint256,uint256)", +"46285e45": "checkBalanceAt(address,uint256)", +"46286c18": "_validateUserActive(address)", +"46287ddb": "rateLastWeekEnd()", +"4628b375": "TokenLeft()", +"4628bc22": "teamTokensVesting()", +"4628e45e": "ABAToken()", +"4629e619": "raceNum()", +"4629ffea": "newToken(string,string)", +"462a8e05": "setRabbitSirePrice(uint32,uint256)", +"462aa19e": "setToken(address,bytes)", +"462b2fca": "isRedeemLocked(address)", +"462c1bff": "H4D()", +"462c6070": "getLockedAmount_jishis(address)", +"462c6edb": "highBonusRate()", +"462dcfa0": "newMaster(address)", +"462e91ec": "addCandidate(string)", +"462f9a28": "get(bytes32,bytes32,uint256)", +"463079b5": "resetFactories()", +"4630a0ee": "changeTicketPrice(uint256)", +"4630d82e": "upgradeTokens(uint256)", +"4630f1d5": "toggleKillSwitch()", +"463107d4": "buyerfeeDivide()", +"46315237": "fiveHours()", +"46317712": "lastDebtLedgerEntry()", +"463193c7": "startselfdrop()", +"4631db54": "_burnTokens(uint256)", +"4631e15b": "assertEq15(bytes15,bytes15)", +"46325b48": "CTCoin()", +"46336cd3": "read(uint256,uint64)", +"4634009a": "getIdx(string,string,uint256)", +"46340b37": "RakugoPresale(uint256,uint256,uint256,address)", +"46348e0b": "calculateArea(uint256)", +"4634d81c": "getDividends(address)", +"4634ea79": "countCurrentPayment()", +"46352ad9": "transferToGrowthReserve()", +"4635b449": "raisedUSD()", +"4635ecd5": "lastTicketNumber()", +"4636a159": "newPhoneToAddr(address,uint256)", +"4636db04": "changeBid(bytes32,uint8,uint8)", +"4636e095": "acceptBet(uint32)", +"4637c85d": "wildcardTokenId()", +"4637d827": "trust(address)", +"4637de3c": "removeMod(address)", +"4637fd1a": "_transferEther(address,uint256)", +"463959fa": "minJackpotBet()", +"4639888b": "jockeyForSale(uint256,uint256)", +"463ac31b": "buyStore()", +"463c3347": "getMyLandMultiplier()", +"463c75b3": "GreenworldFarmToken()", +"463cde9e": "PUBGtoken(uint256,string,string)", +"463cf730": "maxEthCapBuyInFp()", +"463d3cda": "acceptExternalTransfer(string,uint256,string,uint256)", +"463d50b8": "transferFromVault(address,address,uint256)", +"463d5ce1": "isUserWithdrawalTime()", +"463dcf0a": "merge(address,uint256,uint256)", +"463dfae6": "setTrg(address)", +"463ee88a": "createBusiness(uint256,uint256,uint256)", +"463f2c21": "giveCredits(address,uint256)", +"463f7a7d": "_updateDependencies()", +"463f7a89": "getProperty(bytes32)", +"463fb5f1": "Bogotcoin()", +"463fbb76": "setTransportationFeeMultiplier(uint256)", +"46405ffc": "OhNoToken()", +"464066f5": "vote03NoCount()", +"4640f28d": "createPlayerToken()", +"4641257d": "harvest()", +"464299f9": "getReturnFromMonster(uint64)", +"46435fa1": "createPiranhaToken(string,address,uint256,uint8,uint8)", +"4643db5b": "DonationClaimed(address[2],uint256[8],uint256,uint256)", +"4644d17e": "getAirDropTokens()", +"46463941": "calcBonusReferrers(address,uint256)", +"4646939e": "updateWhitelistMapping(address[],bool)", +"464695b3": "tokensSoldTo(address)", +"4646f62a": "setAvatarFrom(address,string)", +"46478e91": "increaseGlobalInterestAmount(uint256)", +"46479541": "setWalletId(address)", +"4647d0c6": "CUNCoin()", +"464858c6": "NVT()", +"46488459": "getTopMigrationDestination()", +"4649bfee": "setCCH_edit_25(string)", +"464ae89f": "SponsoredLink()", +"464bb7a3": "findAccess(address)", +"464cccc8": "round4Cap()", +"464cecb8": "getHyper(address)", +"464d1208": "claimReward(address,address,uint256,address,uint256)", +"464da87e": "cofoundersSupplyVestingTranchesIssued()", +"464deba6": "TridentToken(uint256,string,uint8,string)", +"464e1d46": "setBalanceOfAddr(address,uint256)", +"464e47b4": "wasSoftCapMet()", +"464f37c9": "trustedChildRefund()", +"46503676": "_useCitizenAsLumberjack(address,uint16,uint16,uint8,uint256)", +"46503c01": "KansasvsClemson()", +"4650c308": "genericCall(address,bytes)", +"465105f0": "releaseAllETH()", +"46517145": "createNewCardType(uint256,uint256,uint256,uint256)", +"4651f716": "assertEq14(bytes14,bytes14)", +"4651ff39": "setopen()", +"4652e9fe": "getStartDateOfPlan()", +"46530c34": "activityExist(uint256)", +"46533d60": "setNewReleasePeriod(address,uint256,uint256)", +"46534649": "referralBalanceOf(address)", +"46538e07": "checkExistsOwnedMedal(uint64)", +"4653a1fa": "setAttackBoostCap(uint256)", +"4654b6e2": "addMonsterObj(uint64,uint256,uint32,address,string,string)", +"46567a07": "getTotal(address[],uint256[],uint256)", +"46570653": "_share(uint256)", +"4657681b": "set_num_of_uses(address,address,uint8)", +"4657ad8e": "payTxFees(bytes32,uint256)", +"4657d848": "getVendorIds(uint256,uint256)", +"46581235": "unlockToken(address,uint16)", +"465941e5": "ATMHolders(uint256)", +"4659f42a": "withdrawAfter(address)", +"465a092d": "PRESALE_ETH_CAP()", +"465aaeb7": "windowBonusMax()", +"465af554": "setLockJackpots(address)", +"465b43d0": "joy()", +"465c2cec": "SmartBonds()", +"465c8ce0": "getRobot(uint256,uint256,uint256)", +"465ce877": "HashnodeTenaraCoin()", +"465d1cbe": "getDepositsAmountLeft(uint256)", +"465d5c27": "_tokenIsApproved(address,uint256)", +"465d6e1a": "CAUSE()", +"465e759b": "testRestart()", +"465e920e": "getLineData(uint256)", +"465f1d07": "CrowdTmoney5()", +"465f41b1": "multiOwner(address[])", +"465fa408": "calculatePriceForTokens(uint256)", +"465fe311": "KEP()", +"46601278": "TotalTOkenSupply()", +"46602ce7": "FOUNDERS_POOL_ADDR()", +"4661bb98": "setClassWhitelist(uint32,bool)", +"46621234": "tmpAddr2contractAddr(address)", +"4662299a": "issuanceFinished()", +"4662fbdf": "promotorSale()", +"466339fb": "_rewards(uint256,uint256)", +"46642921": "changeModerator(address)", +"4664611e": "winningNumber()", +"4664b235": "bytes32_to_bytes(bytes,bytes,bytes)", +"4664fe1b": "changeMinFunds(uint256)", +"4665096d": "expiration()", +"46653287": "createInitialTokens(address,uint256)", +"466551f1": "LinqToken()", +"466559e2": "S26ICO()", +"46656c46": "OxToken()", +"4665975d": "registerCustodian(address,address)", +"46682cab": "canFinishTournament()", +"46683308": "freezeAccountForLogic(address,bool)", +"46689c64": "startPlaceOrder(uint256,address)", +"4668b43b": "updateTelegram(uint256,string)", +"4668f372": "MaxMiningReward()", +"466916ca": "pauseStatus()", +"466985f3": "escape(uint256)", +"4669e680": "getPreEntranceMemberCount()", +"466a3443": "getIndividualPercent()", +"466ae314": "forwardedOutcomeSetTimestamp()", +"466bb312": "getDeposited(address)", +"466bc3bd": "GOXX(uint256,string,string)", +"466bf275": "getFreeToad()", +"466c35fc": "MINT_ADDRESS()", +"466c3a2b": "getChecksumAlgorithmCount()", +"466ccac0": "forSale()", +"466cf98f": "giftBalance(address)", +"466d3d38": "setDragonTactics(uint256,uint8,uint8)", +"466df592": "votingPeriodBlockNumber()", +"466e37e7": "newTapProposalFromTokenHolders(uint256)", +"466e561f": "updateReserve(address,uint8,bool,uint256)", +"466ebdf6": "setAddressOut(address)", +"466f0004": "getData_10()", +"466f8870": "Solar()", +"4671e65e": "proposeEmergencyWithdrawal(address)", +"4672f555": "pow(int128,int128)", +"46743691": "transferPublisherRecord(address,address)", +"467523fa": "setBuyerRate(address,uint256)", +"46755c68": "setEndingBlock(uint256)", +"46758d0b": "setAgentRate(address,uint256)", +"4676b897": "balanceOfUnclaimed(address)", +"467730fb": "toFound()", +"4677b540": "ATOToken()", +"4677fe53": "validUnitId(uint256)", +"467abbbd": "addPlayerHistory(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"467aeec9": "addShareholderAddress(address)", +"467d7289": "clearRound(uint256,uint256,bytes32,bool,uint256,uint256,uint256,uint256)", +"467de087": "withdrawAdvisorsTokens(address,uint256)", +"467eb43f": "verifyIdentity(address,bytes32,uint256)", +"467ed261": "getDSTNameBytes()", +"467f0b7b": "del_rank(uint256)", +"467f85e4": "DividendPayment(uint256,uint256)", +"468014e1": "startTimeSale1()", +"46804137": "bonusStep()", +"46807803": "_payoutMining(uint256,address)", +"4681067d": "incAdminEpoch()", +"468129a5": "setUnit(uint256,uint256,uint256)", +"46817362": "importersBanksDraftMaturityDate()", +"46822869": "BTFM()", +"4682ff71": "redeemMarketingToken(string)", +"4683ef63": "delayedOwner()", +"46848114": "startOffering(uint256,uint256,uint256,uint256,bool)", +"4686030f": "promethExecute()", +"468628e1": "getActivityById(uint256,uint256)", +"46862c8f": "mintOnce(string,address,uint256)", +"4686753d": "Crowdfunding()", +"46875458": "ARM()", +"4688a372": "withdraw(address,bytes8)", +"4689ab4d": "right21(uint256)", +"468a0413": "parseResult(bytes32,string,address)", +"468ae69d": "multiMint(address[],uint256[],string)", +"468b0c1d": "AllPay()", +"468b0fcd": "preSaleGoalReached()", +"468b0fe2": "setBridgeNode(address,address,bool)", +"468b3b33": "unlockedBalanceOf(address,uint256)", +"468c17d7": "_sendMsgSndr(address,address)", +"468e1b53": "DEC15Contract()", +"468e4509": "setAutoridadElectoral(bytes32)", +"468ed002": "INITIAL_VUP_TOKEN_SUPPLY()", +"468eeece": "revertGame(address)", +"468f02d2": "getUnderlyingPrice()", +"468f3dcd": "getTokenHoldersCount()", +"46904840": "feeRecipient()", +"46906982": "amountRaisedEth()", +"46911b64": "testDisputedWriteValid()", +"46912a4d": "PERC_TOKENS_TO_BIZDEV()", +"46915fc4": "getAllShareholders()", +"4691a998": "addVesting(address,uint256,uint256)", +"4692a481": "WilliamCoin()", +"4692d7e3": "BitQ()", +"4693667a": "changeMdtFoundationAddress(address)", +"469450cc": "disableLockDown()", +"4694fe85": "isUseContractFreeze()", +"469506bf": "getFinalSeed(uint256,uint256)", +"469507c6": "transferReward(uint256,address)", +"4695cf7a": "getSteakPrize()", +"4696890e": "ethworld()", +"469737d5": "forceRejectVotes(bytes32,address)", +"46975b9a": "swypeCode()", +"4697f05d": "setAllowed(address,bool)", +"4698ad05": "transferWhileLocked(address,uint256)", +"4698d110": "numMembers()", +"4698d920": "setMintAuditApproval(address,address,address)", +"4698da9d": "releaseVestedTokens(address,address)", +"469912d7": "Crowdsale(uint256,address,address)", +"46999ee5": "addNamespaceMember(string,address)", +"469a6947": "unlockTimeOf(address)", +"469aaa98": "BitSTDLogic(address)", +"469ab1e3": "contractNameHash()", +"469bb426": "failedDonations(address)", +"469c62a6": "buy_tokens()", +"469c7f4d": "transferOwner2(address)", +"469c8110": "sendMessage(string)", +"469c8dbb": "ExternalSale(uint8,bytes32,address,uint256,uint256)", +"469e2d5c": "submitPresetTransferes()", +"469e9067": "records(address)", +"469ef000": "hasValue(address[],address)", +"469f4c41": "setPreIcoStatus(uint256)", +"46a06ddb": "getPreviligedallowed(address,address)", +"46a06eb9": "LogTimedTransition(uint256,uint8)", +"46a1749a": "AgingTransfer(address,address,uint256,uint256)", +"46a1cd08": "getAvailableReward(address)", +"46a1d95f": "closeMarket(bytes)", +"46a1fabf": "Withdraw(address,uint256,uint256,bool,bool,string)", +"46a2679a": "getSubpotsCount(uint256)", +"46a2b53e": "GAS_REQUIREMENT()", +"46a3e290": "Defreeze(address,address,uint256)", +"46a3ec67": "TheAnswerIs(string)", +"46a54e15": "privatesale_start_time()", +"46a5b318": "DutchAuction(address,uint256)", +"46a5bf0c": "airDropStage()", +"46a60e99": "buyRoseGRLC(bytes32,string,uint256)", +"46a672bd": "createCard(string)", +"46a6c499": "freezeMyFunds(uint256,uint256)", +"46a7551d": "isOnBattle(address,uint64)", +"46a79a4e": "changeGameSettings(uint256,uint256,uint256,uint256,uint256,uint8,bool,uint256)", +"46a9d680": "EthereumGold()", +"46aa6644": "sendAllFeeToAddress(address)", +"46aaf139": "getSignersCount(bytes32)", +"46ab3d5e": "evaluateProposalMarket(uint256)", +"46abf8a8": "setVariables(uint8,uint16,uint16,uint16)", +"46ace8fd": "removeServer(string)", +"46ad5859": "getTokensRemaining()", +"46ade2de": "RESERVED_TOKENS_FOR_PRE_ICO()", +"46ae38a8": "getHexSymbol(string)", +"46aee903": "changeminBuy(uint256)", +"46af23f5": "InstantLottery(address,address,bool,address)", +"46afb963": "CrowdsaleState()", +"46b04e53": "PlayerInfoPerZone(uint256,uint256)", +"46b1d3be": "endTimePreICO()", +"46b207b8": "checkExpiry()", +"46b249b9": "tokenSaleOnHold()", +"46b305d6": "lockBetsForWithdraw()", +"46b33bc2": "getDonebountyAmount(address)", +"46b33e05": "getFreeTurtle()", +"46b4320c": "showUserBalance(address)", +"46b45af7": "isMintable()", +"46b55416": "subBuy(bytes32,bytes32,bytes32,address)", +"46b56bf6": "contract_sha256()", +"46b5d107": "testFailMintGuyNoAuth(int256)", +"46b5e202": "set_num_levels(uint256,uint256)", +"46b61083": "GoDigit(uint256,string,string)", +"46b65ffd": "getModule(uint8,uint256)", +"46b7068c": "returneth(bytes32)", +"46b753a2": "setChargeFeePool(address)", +"46b77d9f": "areFundsReleasedToBudget()", +"46b84cad": "getPackageById(uint256)", +"46b8c49e": "setReserveData(address,uint256,address)", +"46b98d0c": "startContract(bytes32,uint64)", +"46ba6f61": "setSuppressedGame(uint256,bool)", +"46ba7783": "setDistributionMinter(address)", +"46bb2833": "founderAddress()", +"46bbb6cf": "removeSshKey(string)", +"46bc29bf": "getGoldMigration(uint256)", +"46bd7067": "requestCoinMarketCapPrice(address,bytes32,string,string)", +"46bdca9a": "equal(string,string)", +"46be2310": "export(bytes8,address,address,uint256,uint256,bytes)", +"46be2e0c": "left32(uint256)", +"46be6f87": "newGame(uint8,string,string,bytes32)", +"46be96c3": "amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"46be9c48": "lockState()", +"46bf3df3": "_setWallets(address,address,address,address)", +"46bf5864": "ERC223Token_STA()", +"46c017b5": "zhuchu(uint256)", +"46c068c3": "testEndsWith()", +"46c092b2": "presaleGuaranteedLimit(address)", +"46c13d28": "changeAccessTokenFee(address,string,uint256,uint256)", +"46c2997a": "notMoreThan()", +"46c3166f": "testThrowRetractLatestRevisionNotOwner()", +"46c34832": "WinnerProvidedHash()", +"46c49c58": "CustomToken(string,string,uint8,uint256)", +"46c4e533": "withdrawUpdate(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes)", +"46c52b1a": "blockHexCoordsValid(int8,int8)", +"46c59373": "ethManagementPropagate()", +"46c66b27": "_transferAll(address,uint256)", +"46c6f325": "TEACHTokenToken()", +"46c715fa": "original()", +"46c797e2": "updateMarriageLicenceImageIPFShash(bytes)", +"46c7c126": "getChallenges()", +"46c968db": "blocktubeClip(string,uint256,uint256,uint256)", +"46c9b457": "privatePreSalePrice()", +"46ca48a2": "freeAmount(address)", +"46caf5e8": "BTB()", +"46cc3179": "getComponent(string,string)", +"46cc43fb": "decodedSecret()", +"46cd9b23": "_triggerNewPVPContender(address,uint256,uint256)", +"46cdb099": "shareholderID(address)", +"46ce33d4": "clearLockBalance(address)", +"46cee8f7": "TemporaryPyramid()", +"46cf1bb5": "lockState(address,uint256)", +"46cf6d2e": "_validate(uint256,uint256,uint256,uint256,uint256)", +"46cffffd": "NewAreaStatus(uint256,uint8,uint8,uint8,uint8,uint256)", +"46d0a022": "transfer(address,address,address,address[],uint256[])", +"46d0e892": "makeOptions(uint256,address,uint256)", +"46d0eb60": "addAlias(address,string)", +"46d0fb60": "isUserLicenseValid(address,string)", +"46d1501a": "PoP()", +"46d17bfd": "LongBought(address[2],uint256[2],uint8,bytes32[3],uint256)", +"46d17c3a": "Unregister(address,uint256)", +"46d1c605": "balanceOfButter(address)", +"46d22c70": "canBreedWith(uint256,uint256)", +"46d24cbb": "refundedWei()", +"46d36fa0": "ChristopherRobinRT()", +"46d46a6a": "CashTelex()", +"46d47cdf": "testFailCreateWithParentsParentNotInUse0()", +"46d5688e": "RATE_CROWDSALE_S1()", +"46d64aa2": "Kuberand()", +"46d667db": "setBytes32(bytes)", +"46d6b1e8": "getChampsForSale()", +"46d6c93b": "addFeed()", +"46d7195d": "vote_until()", +"46d73def": "hasHalted()", +"46d7df42": "setTokenContactInformation(string)", +"46d89444": "getCrowdsaleTierList()", +"46d95146": "anvlTechToken()", +"46db63d7": "rewardUser(uint256,address,uint256)", +"46dbf9b0": "pickupProduct(uint256)", +"46ddb7db": "setAccountBalance(address,uint256)", +"46de0fb1": "isFrozen(address,address)", +"46deb279": "ElementUpgraded(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"46df1578": "refferBonus()", +"46df2ccb": "setRate(uint256,uint256)", +"46e04a2f": "claimTokens(uint256)", +"46e06634": "approveKYC(address,bool,uint256,string)", +"46e0c223": "_createOfAthlete(address,string,address,uint256,uint256,uint256)", +"46e184da": "Olife()", +"46e1bfbb": "acceptAtGroup(address,uint256)", +"46e1f732": "investorsProcessed()", +"46e1fa55": "_removeDefaultOperatorByTranche(bytes32,address)", +"46e2577a": "addProvider(address)", +"46e2a174": "preIcoTokensSold()", +"46e33afc": "getFACTOR()", +"46e34823": "tan(uint256,string,string)", +"46e36060": "subBalances(address[],uint256[])", +"46e3cb1a": "sellTradeConfir()", +"46e44f63": "getCheckRecordTS(bytes)", +"46e4959d": "mintMulti(address[],uint256[])", +"46e4d35d": "numOfLoadedEarlyPurchases()", +"46e5500f": "LogFinalized(address,uint256)", +"46e5c323": "largestHODLERBalance()", +"46e6ffdd": "OwnableStorage()", +"46e767bc": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256,uint256)", +"46e780b0": "getLinkHash(address)", +"46e7ccac": "isAuthorizer(address)", +"46e7f38e": "BayCoin()", +"46e87b1e": "RgiftTokenSale()", +"46e93dbc": "maturityProcess(string,bool,uint256,uint256)", +"46e9ab22": "Gateway()", +"46e9e3c2": "reclaimPeriod()", +"46ea2552": "transferManager()", +"46eac50e": "superTransfer(address,uint256)", +"46eba0c1": "fundWithdraw(address,uint256)", +"46ebb5e2": "TimedPresaleCrowdsale(uint256,uint256,uint256,uint256)", +"46ec56c5": "getNumInvestments()", +"46ed24a3": "setAirdropToken(uint256)", +"46ed3199": "ATCToken()", +"46edef6c": "accICO()", +"46eea9a1": "secondStageRaised()", +"46eeed5f": "rolloverFee(address,uint256,uint256)", +"46ef6660": "createTokenContract(address,bytes32)", +"46f02832": "queryPermissions()", +"46f04694": "periodICOStage8()", +"46f0975a": "signers()", +"46f19888": "get_total_info()", +"46f24c6a": "functionSix(uint256,uint256,uint256,uint256)", +"46f25cad": "setAuthor(string,string,address)", +"46f2e880": "payForMyselfWithChecksum(uint128,bytes1)", +"46f42dff": "Win(uint256,uint256,uint256,address,uint256)", +"46f43f15": "StierBitToken()", +"46f74c6d": "setArbitrationPercentage(uint8)", +"46f76648": "getTotalEthSended()", +"46f7a883": "BuyTicket(uint8,uint8,uint8)", +"46f7cf87": "insert(address,uint256,address,address)", +"46f84dc4": "grantPermission(address,address,bytes4,address)", +"46f8e5ec": "getBlocksUntilStart()", +"46f92818": "setCreditDaoAddress(address)", +"46f99063": "totalSent()", +"46f9bedf": "costPerTicket()", +"46fa14e5": "MyFeed2Token()", +"46fa2574": "preIcoMembers(address)", +"46fae630": "getAllCardsAttack()", +"46fbf68e": "isPauser(address)", +"46fc0294": "senderRefund(bytes32,uint256,bytes20,address,address)", +"46fc9037": "__beneficiaryTransfer(uint256)", +"46fcafe2": "etherContributions(address)", +"46fcff4c": "availableFunds()", +"46fd9446": "setUsdEtherPrice(uint256)", +"46fde171": "closeCdp(address,uint256,uint256,address)", +"46fe2edb": "reserveIAMDestination()", +"46fec37b": "LogBounty256(address,uint256,string)", +"46ff099d": "cancelOrderByPayer(string)", +"46ff43dc": "totalInCents()", +"46ff4ce6": "betRedCoin()", +"46ff64f3": "setOraclizeRoundGasFee(uint256)", +"46ff7eac": "depositContrac(uint256)", +"46ffb216": "m_startTimestamp()", +"46ffdfbc": "getMax(uint16[])", +"47002c6d": "TOTAL_RECEIVED_ETH()", +"47006460": "maximumInitialBuyoutPrice(uint256)", +"4700d305": "panic()", +"4700dc57": "setFirstBonusTokensLimit(uint256)", +"4700fada": "GVToken(address,address)", +"47021780": "QSBH()", +"47026d90": "Volkstest3()", +"47028fcf": "getSponsorshipAmount(address,uint256)", +"4702d115": "dataCalc(uint256,uint256)", +"4702fa12": "_getCurrentRound()", +"47040cb4": "getStateProofAndHash(bytes,uint256)", +"47048c7b": "getMemberBoss(address)", +"47055321": "deduct(address,uint256)", +"4705b55b": "XCOIN()", +"4705d888": "getlastmoney()", +"47062402": "buyFee()", +"47064d6a": "setData(string)", +"4706840e": "destroykill()", +"4706c375": "_withdrawEquity(address,uint256)", +"4707f44f": "tokensOfOwnerByIndex(address,uint256)", +"47085958": "SetIndustry(string)", +"47089f62": "addVerified(address,bytes32)", +"470905b1": "Founder3()", +"470a5f4e": "reinvest(uint256,bytes32)", +"470b1984": "investedBTC()", +"470b1f7c": "AnetCoin()", +"470b2867": "tablet_owner()", +"470b6e0e": "addStackholderTransaction(address,bool)", +"470bb62b": "record(string,string)", +"470ca291": "referrerLevel3Ether()", +"470d7722": "batchAddAddresses(address[],uint256[])", +"470e872c": "transferBill(address)", +"47102a5d": "ETC(address,uint256)", +"4710411d": "twenty_percent_of_amount()", +"4710c5bf": "preSale3()", +"4710c63c": "excavation()", +"4710cfd7": "nContract()", +"47115192": "voteCut()", +"4711748d": "setNDCContractAddress(address)", +"4711dbe1": "registrationBounty()", +"4713f29b": "setBuyingCostumeRate(uint256)", +"47146b28": "setFiscal(uint256,uint256,bytes32)", +"4714c0aa": "proxyAccountingCreation(address,uint256,uint256)", +"47156810": "scheduleNewDerivativeToken(address,address,uint256)", +"4715b308": "decreaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"47166f62": "Quarkchain(uint256,uint256)", +"47170eb8": "LogEtherTransfer(address,uint256,uint256)", +"4717dea9": "getTicket(address)", +"4717f25a": "charonsBoat()", +"4717f97c": "getResults()", +"4718d108": "_transfer(address,address,string)", +"4718dc4d": "payOutVoterById(uint256)", +"47198cd1": "get_baseAmount(uint256)", +"471a20e7": "getResponses(uint256,uint256)", +"471a2270": "Lottery(uint8)", +"471a23c8": "burnMe(uint256)", +"471ab294": "handleTokensFromOtherContracts(address,address,uint256)", +"471ad963": "redeemProposalFunds(bytes32)", +"471b37cf": "VESTING_ADVISOR_DURATION()", +"471c95db": "TransferFees(address,uint256)", +"471d0481": "randomB()", +"471d4118": "releaseTimeFund()", +"471d66cb": "exceedsMaxInvocations()", +"471eab5c": "removeAllowedSender(address)", +"471efce5": "tokensForPreICO()", +"471efe66": "set_addresses(address,address)", +"471f11ec": "purchaseTown(uint256)", +"471f4722": "setOnSaleAmount(uint256)", +"471f7cdf": "favoriteNumber()", +"471fabfd": "eexploitOwnn()", +"472016da": "playersAddresses(uint256)", +"47202819": "unregisterInit(address)", +"4721ed6f": "enableRedemption()", +"47220f25": "maxPremiumDragonsCount()", +"4722361c": "canStartSettling(bytes32,address)", +"4722b4a5": "getFeeParameters()", +"47237f47": "freeStorage(uint256)", +"47241a27": "setAdditionalBonusPercent(uint8)", +"47244212": "Product(string)", +"472457cb": "addDragonName(uint256,string)", +"47249b1a": "GetEventInfo()", +"4725211b": "recordNameCount()", +"47255591": "setOuverture_des_droits(uint256)", +"4725d544": "_utoa(uint256,uint8)", +"47274dbe": "disableUser(address,address)", +"4727925a": "KEKEcon()", +"4728537c": "lockupBalanceOf(address)", +"4728d3ae": "CreatedEDU(address,uint256)", +"472905ca": "makeAdmin(address)", +"47293d15": "getAddressesCount()", +"472aa7df": "createProduct(bytes32,uint128,uint256)", +"472ad331": "InvestmentsCount()", +"472b6492": "AddEth()", +"472b6efa": "getWinRate(uint8)", +"472c681f": "addPack(address[],uint24[],uint24[],uint16)", +"472ca5e4": "allocateBid3(bytes32)", +"472d35b9": "setFeeManager(address)", +"472e1910": "verifyOpenSignature(address,bytes,bytes32)", +"472eb03d": "payLoan()", +"472f36e2": "Allocated(address,uint256)", +"472fdb67": "totalTokensReserve()", +"4730725d": "addToTimeLockedList(address)", +"4730bf06": "STAGE_1()", +"4732a7dc": "setMigrationAddress(address)", +"47337aab": "Btencoin()", +"4733a341": "SubmitClaim(address,string,string)", +"4733dc8f": "transferProxy(address,address,uint256)", +"4733ec90": "preparePayment()", +"4734922a": "generateOrderByAdmin(address,address,uint256,string,string,string)", +"473528b2": "_updatePurchasingState(address,uint256,uint256)", +"473533e6": "estimatedWeight()", +"47355ba5": "PiplToken()", +"47356bd9": "show_automated_Buy_price()", +"47356dd8": "getServiceUpdateAddresses(address,uint32)", +"4735b35f": "createDiamondAuction(uint256,uint256,uint256,uint256)", +"4735c747": "CrowdsaleToken(string,string,uint256,uint8,address,bool)", +"4735e00a": "CollectibleBought(uint256,uint256,uint256,address,address)", +"4736786b": "EthereumUnionToken()", +"47369a7c": "getPositionDeedHolder(bytes32)", +"4736b531": "TdeStarted(uint256)", +"47372325": "getChannelSize(address)", +"47373033": "enableStartBattle(string)", +"473753cb": "batchCancel()", +"47378145": "getBlockNumber(bytes32)", +"4737e852": "viewContractHoldingToken()", +"47387404": "_getGameStartAuctionMoney()", +"47395ced": "append(string,string,string)", +"473a223d": "getClosingTime(bytes32)", +"473aa2a5": "getFile(bytes32)", +"473ae9fe": "testCreateWithParent()", +"473b0d46": "setMinContribution(uint256)", +"473b4c53": "BrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"473bc223": "gameName()", +"473bca32": "secondAllocation()", +"473ca96c": "win()", +"473e9408": "_getAttributesOfToken(uint256)", +"473edf73": "Award(address,uint256)", +"473f0117": "contributionID(uint256,address,uint256)", +"473f1803": "claimRewardForUser(uint256,address)", +"4740a08b": "getEggData(uint256)", +"474154bc": "divIsSafe(uint256,uint256)", +"47416aec": "setTokenContract()", +"4741b95c": "setPercentFrozenWhenBought(uint256)", +"47428855": "assertEq32(bytes32,bytes32)", +"47430b36": "parnter()", +"474448c4": "finishResolveFund(bytes32,string)", +"47448e8a": "set(bytes32,string,bytes32)", +"4746041f": "burnIndexedFrom(address,uint256)", +"4746cef8": "_confirmAndCheck(address,bytes32)", +"47471183": "freeOf(uint256)", +"474740b1": "batchLimit()", +"4748f7c2": "icoPhase1TimeBonusInPercentage()", +"47492352": "ROLE_PAUSE_ADMIN()", +"474a5a09": "AssetBackedToken(uint256,string,uint8,string)", +"474a88cb": "failsafe()", +"474a898b": "miniGameInfo()", +"474b2541": "setRevision(address)", +"474bbab2": "calculateTokensToSend(uint256,uint256)", +"474c0868": "getActiveBuySize(bytes32)", +"474cdca2": "countTotalInvestors()", +"474ce368": "Computer()", +"474ce872": "promisee()", +"474ceb4d": "setCrowdsaleDate(uint256,uint256,uint256,uint256)", +"474d904b": "totalTokensWithoutBonuses(address)", +"474da79a": "contracts(uint256)", +"474e9e74": "MaxICOSellSupply()", +"474ea7e9": "Cyrus()", +"474f067f": "setType(bytes32,string)", +"474fa131": "extraMintArrayPendingProcess(uint256)", +"47516910": "FileHash()", +"4751757a": "Metronome()", +"475289da": "numberOfMoods()", +"475297bc": "closeBets(bytes16,bytes16,uint256,uint256)", +"4752a3ce": "StdUInt32(uint32)", +"47535d7b": "isOpen()", +"47540b31": "setTeamAddress(address,address,address)", +"4754a311": "StatusContract()", +"4754d136": "rerollFee()", +"47556b73": "isSuperInvestor(address)", +"4757ace4": "milestoneCompleted(uint256)", +"4757f1d2": "redeemAllOutcomes(uint256,uint256)", +"47582291": "totalstakeamount()", +"4758871d": "FOUNDER_EXCHANGE_RATE()", +"4758b9cd": "checkNumber()", +"47593ae7": "oldPrice()", +"47598b62": "marketplaceController()", +"475a2ac6": "mainSale(address,uint256)", +"475a9fa9": "issueTokens(address,uint256)", +"475abbb7": "PLATAMOUNT()", +"475b54c9": "AdvancedOwnable()", +"475b723a": "setRate362()", +"475c051d": "grantPermissionBatch(address[],string)", +"475c3001": "FinishTokenSale()", +"475c420c": "setHelpMeTokenParts(address[])", +"475c578c": "walletPercentage()", +"475c5ed1": "contributedToSTO(address)", +"475c7605": "ImpeachmentSupport(address,uint256)", +"475ca435": "get_record_by_row(uint256)", +"475d41f9": "SISKCoin()", +"475d599b": "wolf2Balance()", +"475e0062": "RoundEnd()", +"475e4c0f": "buscarDocumentoPorHash(bytes32)", +"475ec95a": "PRESALE_MINIMUM_FUNDING()", +"475fd055": "supplyLeftAtOrigin()", +"4760eee3": "getStartersProxyAddress()", +"47615fa1": "RankScore(address)", +"47625694": "getPerformance(uint256)", +"476343ee": "withdrawFees()", +"47635dac": "transferContract(address)", +"4763e3fe": "LOG_ZeroSend()", +"4765fb39": "userstaticprofis()", +"4766551d": "getExCoins()", +"47665ae8": "setMaxEthPerAddress(uint256)", +"4766ae68": "RareToken()", +"476711cb": "currentPeriodEtherCollected()", +"4767aeec": "_getaward(uint256)", +"4767d305": "EventCreateRisk(address,uint128,uint256,uint256)", +"476810b5": "ico1Min()", +"4768136e": "MelonWallet()", +"47683f00": "isInTier2(address)", +"47688c74": "userAmount()", +"47695e60": "MENTORS()", +"4769ed8f": "buyFromRC(address,uint256,uint256)", +"476a29e2": "pauseStateSwithcer()", +"476a4558": "DigitalMaterai(uint256)", +"476a73ec": "transferEthToMultisig()", +"476aa607": "saleHardCapReached()", +"476b7e3b": "readyToFulfill()", +"476c089a": "finalyze()", +"476c494c": "newAnswer(uint256,uint256)", +"476c9f41": "SecurityToken(string,string)", +"476d7c13": "userToNumCities(bytes32)", +"476e04c7": "NewMessage(string)", +"476e4aa4": "Remove(uint256)", +"476e6172": "getCurrentPlayer()", +"476fe919": "setReleaseTime(address,uint256)", +"4770ca3c": "AddBTCTransactionFromArray(address[],uint256[],uint256[],bytes4[])", +"47722218": "setKycAdmin(address)", +"477269c0": "setHpbNodeAddress(address)", +"4772eb77": "callDisableCallback(string)", +"47734892": "getUserBalance(address)", +"4773e0be": "didCloseLoan(bytes32,address,bool,uint256)", +"4774027c": "changeOffchainUploaderAddress(address)", +"477492dc": "MAIN_COIN_PER_ETHER_ICO()", +"4774ef06": "forwardGas(address,uint256)", +"47751b98": "validUpgradeId(uint256)", +"477523c2": "flushERC20(address)", +"47767c5d": "CRYPTOZOLToken()", +"4776ed69": "AngelTokensHolder(address,address,address)", +"477721e9": "FrozenContract(bool)", +"4777338c": "lastPricePaid()", +"4777c1f4": "setUnownedPriceInEth(uint256,uint256)", +"4777dbcf": "EternalStorageProxyForStormMultisender(address)", +"477801b1": "getLastRoundResults_by_index(uint256)", +"47786d37": "setCap(uint256)", +"47786f51": "HODL()", +"4778a5be": "orderSubmitted(bytes32)", +"4778dfb8": "balanceById(uint256)", +"47799da8": "last()", +"4779fad9": "setMentorsTokensPercent(uint256)", +"477a0eb3": "removeAtIndex(bytes32[],uint256)", +"477a7042": "getCanvasState(uint32)", +"477adb83": "eggtracker()", +"477af741": "firstMaxAmount()", +"477bda31": "qnt10k()", +"477bddaa": "setContractAddress(address)", +"477cdbb5": "create(uint256,uint256,uint256,address)", +"477ce277": "cost(address,uint256,bytes,bytes)", +"477d47b5": "viewPreSaleRefundsInMainSale(address)", +"477d6c6c": "_emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"477e5d24": "pvpQueue(uint256)", +"477eab0a": "taxman()", +"477fe4e6": "payForTask(uint256)", +"477ff120": "addTokenAddress(address,address)", +"47803e97": "tokensOnHold()", +"4780eac1": "wethContract()", +"47810b3e": "LTY()", +"47816131": "EphronTestCoin(uint256,uint256,uint256,string,string,uint256)", +"4782f6fc": "removeOwners()", +"4783c35b": "multisig()", +"478573ca": "getMainWallets()", +"47858c79": "finalizedUpgrade()", +"478609f7": "mintTokens(int256,address,uint256,uint256)", +"4786cfea": "_estimateSupply(uint256,uint256,uint256,uint256)", +"47872b42": "unsealBid(bytes32,uint256,bytes32)", +"4787513a": "tokenHoldersCount()", +"4787e261": "calcQuickPromoBonus(uint256)", +"47883fd9": "product4_luckybuyTracker()", +"4788cabf": "getContractId()", +"4789aaef": "EthereumDice()", +"478aa69e": "unauthorizeUser(address)", +"478ae93c": "playToWin(uint256)", +"478b2f8b": "trieValue(bytes,bytes,bytes,bytes32)", +"478bdce2": "WinningNumbersEvent(uint256,string)", +"478c4238": "p_update_mResalePlotOwnerPercent(uint256)", +"478c4e0e": "resetData()", +"478cd032": "getLevelAmount(uint256)", +"478d2136": "proposalsByShareholder()", +"478db7e7": "getDataTrackingParameters(uint256)", +"478e25bf": "resetAction(bytes32)", +"478e7d7f": "getSponsorableJobs()", +"478f0735": "Jamatoken()", +"478f796a": "ownersWallet()", +"478f7b52": "mainSaleMinPaymentWei()", +"478f7eca": "CnytCoin()", +"47913dfe": "staticArrayChangeValue(int8,uint256)", +"47923d6f": "_addDividendsForAddress(address)", +"479245bb": "_transferOwnership(address,address)", +"4793017d": "stageLending()", +"47930567": "hashPosition(uint32,int64[2],bytes16)", +"4793504e": "Divider(uint256)", +"4793cebe": "allocateRemainingTokens()", +"479487e3": "getCar(string)", +"4794db02": "existenceDecimals(address)", +"479564d5": "getAssociatedTAOSettingDeprecation(bytes32)", +"4795ac60": "collectPayment(uint256)", +"47963cf8": "COINEIUM()", +"47966bc2": "spam()", +"4797debe": "approveAmountAndSetFirstUseTime(uint256,address,uint256,uint256)", +"4797f21b": "setLog(address)", +"479834ca": "generateRandomMonster(uint8[14],uint32)", +"4798a2e3": "limorico()", +"47992b25": "DST_RESERVE()", +"479a4ae9": "isSHA256HashRegistered(bytes32)", +"479a5d53": "setOtherMigrationSources(address[])", +"479ad4c3": "removeListing(uint256)", +"479b321e": "CyberCash()", +"479ba3a5": "_resetPlayRound()", +"479ba7ae": "rewardsOf(address)", +"479d29f4": "BiyuleCoin(uint256,string,string)", +"479e24e6": "setNewInvestCommission(uint256)", +"479e393c": "getBettingStastics()", +"479e840f": "playValue()", +"479ed225": "getMyGameCompleted(address,uint256)", +"479f8d33": "threeHotHoursDuration()", +"479fb784": "approveBalancesWaitingKYC(address[])", +"47a08955": "_Deposit(address,address,uint256)", +"47a0fd7e": "shieldsUp()", +"47a11f26": "lIKETOKEN(uint256,string,string)", +"47a1a2d6": "usdCollected()", +"47a21679": "sellKeys(uint256,uint256,bytes32)", +"47a21eda": "buySharesFor(address)", +"47a22ca4": "devChangeMiningReward(uint256)", +"47a34bcb": "getBlockMaxVotes(uint256,uint256)", +"47a36afd": "totalFeeFlows()", +"47a42ff7": "buy_sale()", +"47a5046a": "isKYCRequiredToReceiveFunds()", +"47a5b1b3": "addApprovedContractAddress(address)", +"47a64f44": "lockAccount(address)", +"47a66b57": "addUserEndorsement(address,bool,string,string)", +"47a68cd4": "EOSBetDice()", +"47a69105": "NewSmartSharingContract(string,uint256,uint256,string,string,string,string)", +"47a69dfd": "Vegetoken(uint256,string,uint8,string)", +"47a6e601": "getATMHoldersNumber()", +"47a7aad5": "_vest(address,uint256,uint256,bool)", +"47a8205f": "privateWeiRaised()", +"47a90325": "maxCapEcosystem()", +"47a98ed2": "WithdrawFailed(address,uint256,bool)", +"47a99264": "setBwServiceValidCaller(address)", +"47a9fd81": "rob(address)", +"47aa7cd4": "setPoolStatus()", +"47aaf4eb": "resetOldAndSetNewDiscounts(uint256[],uint256[])", +"47ab58ec": "valuationAndCutOff()", +"47ac704f": "oldTokenSale()", +"47ad396b": "setFundingRules(address,uint256,uint256,uint256,uint256,uint256)", +"47aee603": "DIW(address,uint256)", +"47aef0a9": "battles()", +"47af954d": "creationAddress()", +"47af9957": "pauseTransfers()", +"47afa4e4": "change_pre_ico_start(uint256)", +"47b24f15": "LavaWallet(address)", +"47b272c0": "startMining(uint256)", +"47b27b8b": "unblockTokens(address,address,uint256)", +"47b27fd0": "testIsComplete()", +"47b3aff8": "bundles(uint8)", +"47b40ba2": "betFreeGame(uint256,uint8)", +"47b47102": "bakeCookie(string)", +"47b4e272": "depositBTC(address,uint256,uint256,bytes32)", +"47b4f943": "canmint()", +"47b55a9d": "pendingWhitelistAddition()", +"47b5acfd": "getProposalPublishedAt(bytes32,bytes32)", +"47b5dd54": "burnedTokens()", +"47b60ec0": "investorsGrantsAmount()", +"47b64eb0": "setServerAddress(address)", +"47b6ab59": "Token(address,uint256,string,string,uint8)", +"47b7142b": "safeSubtrZJF(uint256,uint256)", +"47b72b89": "getdeptmembershipstatus(uint256,address)", +"47b79a31": "remainingTransfered()", +"47b79a40": "manVault(uint256)", +"47b82bec": "FUTURAX()", +"47b84579": "getCompte_30()", +"47b87e48": "GetSaleInfo(uint8)", +"47b8b30b": "toCancel()", +"47b950b6": "setWorkerDtPort(uint256)", +"47b989af": "MyReferrer()", +"47b98c2e": "RDWToken()", +"47ba65d2": "get(bytes8)", +"47bafa82": "refundingComplete()", +"47bb0613": "deactivateContract(address,address)", +"47bb159d": "getByFromAndToCount(uint256,uint256)", +"47bb1883": "computeReward(uint256)", +"47bb89f0": "balance(uint256)", +"47bba01d": "inactivateSelf()", +"47bbe867": "purchaseMembership()", +"47bc1f94": "tokenSaleSupplyRemaining()", +"47bc3e51": "mintBounty(address[],uint256[])", +"47bc7093": "removeIssuer(address)", +"47bda66d": "createAMIS(address)", +"47bdb7f4": "transferDisable(bytes20)", +"47bdc8b4": "oraclize_query(string,bytes[5],uint256)", +"47bdeedf": "getPlayerUsableTokensCount()", +"47be11ae": "addArrayItem(address,string,string,uint256)", +"47be7bce": "formulaPrecision()", +"47bf7924": "ClaimSHIT(address,uint256)", +"47c05c22": "massSending(address[])", +"47c0ea6b": "_invest(address,uint256)", +"47c1303a": "MeetsOne()", +"47c14648": "claimTokenReserveLife()", +"47c17bac": "getMonsterDexSize(address)", +"47c1b5cf": "setGGEFee(uint8)", +"47c1caff": "getDividendsOf_(address,bool)", +"47c23bff": "setproduct(string,string,uint256,uint256)", +"47c3114e": "OpenContract()", +"47c35910": "authorize(address,address,uint256)", +"47c3ebf3": "is_presale_open()", +"47c421b5": "changeOracle(address)", +"47c51f73": "VisibilityDemo()", +"47c55045": "transferTokensFromTeamAddress1(address,uint256)", +"47c66140": "getProposalVotes(uint256)", +"47c6ecc0": "TokenFrozen(bool,string)", +"47c705b9": "Update(uint256,address,address,string)", +"47c7b6e2": "initEthDeal(bytes32,address,bytes20,bytes20)", +"47c7e6a8": "getAssetPackName(uint256)", +"47c81699": "set(string,string,uint256)", +"47c81f22": "TTT(uint256,string,uint8,string)", +"47c848e4": "_toPct(uint256,uint256)", +"47c85634": "setEmergencyWithdrawAddress(address)", +"47c8771c": "rsVerifyPoint(uint256,uint256)", +"47c8cc69": "getCurrentTDEBonus()", +"47c8efa7": "name1()", +"47c9301f": "erc20MRL(uint8)", +"47c98521": "rewardTheWinner(uint8)", +"47c9f9e8": "getNextTimeAirdropJoin(address)", +"47ca16a2": "setMaximumClaimPriceWeiRP(uint256)", +"47ca78d7": "paymentFallBack(address,uint256)", +"47cade2b": "unlockPublic()", +"47cb1b35": "getDailyJackpot(uint32)", +"47cb7a68": "timeLeft(uint256)", +"47cbc4f1": "HasNoElement()", +"47ccca02": "nft()", +"47cd3fda": "removeTransferRate(address)", +"47cda525": "TribeProducts()", +"47ce07d7": "NewPassManager(address,address,address,address)", +"47cf6f76": "isVotingActive()", +"47cf7e1d": "calcDoubleBindedBlindHash256(string,address,address)", +"47cfbaf4": "DMDPangea()", +"47d01637": "ProofOfCommunity()", +"47d04c71": "getWithdrawCount()", +"47d0dd3c": "COPIthereum(uint256,string,string)", +"47d1045f": "setNextSeedHash(uint256)", +"47d137c5": "unFrozen()", +"47d1d135": "setPixelColor(uint256,uint32)", +"47d20373": "stages()", +"47d289a9": "setDapCarToken(address)", +"47d3523c": "_sumThem(uint256,uint256)", +"47d3856a": "awardPot(string,uint256)", +"47d38af4": "NaNoDigitalToken()", +"47d3def9": "listAddress(address,uint256)", +"47d3ed10": "newDepositContract(address,address)", +"47d4106f": "CryptoSagaArenaRecord(address,uint8,uint8)", +"47d42c73": "PaymentStatusBlockNum(address,address)", +"47d52d86": "getMessageValue()", +"47d54bff": "finishedAt()", +"47d5d5b5": "ERC721TokenMock(string,string)", +"47d690b4": "limitDateCrowdWave1()", +"47d6cd6b": "_airdropAmount()", +"47d70f74": "icoEndBlock()", +"47d8167d": "buyBack(uint256,uint256)", +"47d83127": "sendFrom(bytes32,address,uint256)", +"47d84bab": "MultiSigStub(address[],uint256)", +"47d8fcb3": "emergencySetABackend(bytes32,address)", +"47d98eb4": "QUASI()", +"47d9b0aa": "FXTOKEN()", +"47da115a": "changeETH2Token(uint256)", +"47daf09c": "SmthToken()", +"47db0a24": "buyCreditsAndSpend(string,uint256,uint8,address,uint256)", +"47dd33fb": "VerumToken()", +"47dd5138": "EPSBets()", +"47dd5172": "perAddressCap()", +"47ddb165": "HODLIT()", +"47ddf87e": "allTimeJackpot()", +"47de074f": "getNodes(uint256)", +"47de3b76": "addSubmittal(bytes,address)", +"47df1cff": "callTokenTransferFrom(address,uint256)", +"47e0d54a": "winningTickets()", +"47e122dc": "earlyBirdTokenRate()", +"47e17101": "PRIZE_TOKENS()", +"47e17349": "addBonuses(uint256)", +"47e1d550": "getGameInfo(uint256)", +"47e20183": "point(address)", +"47e2688d": "getFinalSupply()", +"47e271b8": "getWeeklyLotteryParticipants(uint256)", +"47e2a6f9": "GetSellingTokenSymbol()", +"47e2b978": "RESERVED_COMPANY_UNLOCK_AT()", +"47e2d3f5": "zeroInt()", +"47e40553": "nextRound()", +"47e46806": "toString()", +"47e4ddf2": "createFreeze(uint256,uint256)", +"47e4e65e": "INFLIV()", +"47e51d38": "getConfigs(bytes32[])", +"47e57351": "withdrawTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"47e5912a": "decreaseTokens(address,uint256)", +"47e5bec3": "closeTransaction(uint256)", +"47e60236": "setICOaddr(address,bool)", +"47e621b7": "backingToken()", +"47e6924f": "sanityRatesContract()", +"47e74409": "leadingGang()", +"47e7bce6": "roundStartedTimestamp()", +"47e7ef24": "deposit(address,uint256)", +"47e81c5f": "setBuildingContract(address)", +"47e87fcd": "maxSaleBalance()", +"47e9633c": "PaymentAuthorized(uint256,address,uint256)", +"47e99232": "doRebuy()", +"47ea13df": "setCurrentOwnerFeePercent(uint256)", +"47eacc78": "rateAngel()", +"47eafefc": "mainStartTime()", +"47eb86f1": "changeTokenPrice(uint256,uint256,uint256)", +"47ec8138": "transferWithLock(address,uint256,uint32)", +"47ec8d82": "AltSocialAccountPw(bytes32,bytes32,bytes32)", +"47ec8e21": "be()", +"47ecb665": "telegram()", +"47ed0112": "setAddressFundReferal(address)", +"47ee0394": "addToWhiteList(address)", +"47ee0a69": "decreaseApprovalInternal(address,uint256)", +"47ee2992": "COINS_PER_ETH()", +"47eeb75f": "claimMethodABI()", +"47eed11e": "test_fourInvalidFalseEqLog()", +"47eef00a": "issueUnsoldToken()", +"47ef01a1": "deleteRegion(uint256)", +"47ef3b3b": "liquidateBorrowVerify(address,address,address,address,uint256,uint256)", +"47ef55fe": "buyCore(uint256,uint256,uint256)", +"47f03d0b": "getFallbackDeposit()", +"47f07880": "ChatLinkToken()", +"47f1d8d7": "minBalanceForAccounts()", +"47f2748a": "getMixerTypes()", +"47f280aa": "DefaultToken(string,string,uint256,address)", +"47f3d794": "configure(uint256,uint8,uint256,uint256,uint256,uint256)", +"47f3dde5": "rewards(address,address,uint256,uint256)", +"47f4034a": "getUnitJadeStealingIncreases(address,address,uint256)", +"47f5666f": "getSanIdFromName(string)", +"47f57b32": "retract()", +"47f61a47": "Habits()", +"47f66790": "addThing(string,string,bytes32,bytes32)", +"47f66d15": "bestPromouterInfo()", +"47f67eab": "setActionPrice(string,uint256)", +"47f710a7": "free_transfer()", +"47f7af67": "sealdate()", +"47f7b304": "ownerApproves(uint256)", +"47f7d412": "withdrawFrozen()", +"47f8b863": "getNextCutoffTime()", +"47f95923": "alterPeerToPeerMarketplaceTransactionFee(uint256)", +"47f980e5": "claimTokenAddress(address)", +"47f9aa9f": "auditors(address)", +"47f9c371": "Proof_of_Stake()", +"47fa061e": "deposited(uint8,address)", +"47fa15e2": "ICOSuccess()", +"47fa1cbd": "evIssueManagementFee(address,uint256,uint256,bool)", +"47fa5648": "Minewar()", +"47fafe7d": "setAccountProvider(uint8,address)", +"47fb0bed": "checkSender()", +"47fc216e": "getEventsLength()", +"47fc4306": "contractWithdraw()", +"47fc822f": "setTargetContract(address)", +"47fdbfb7": "StageChanged(string)", +"47fee755": "getGeneralAttr(uint32,uint8)", +"47ff6d7b": "buildId(address,uint256)", +"48006daf": "removeBreedingFromSale(uint256)", +"480111b0": "potShare(address)", +"4801206e": "OodlebitToken()", +"480140ca": "checkSidePledge(uint256)", +"48016c04": "assertEqDecimal(int256,int256,uint256)", +"480184a9": "getNewToken(uint256)", +"48025070": "setGivenReadings(bytes32,bool,bool)", +"48027610": "transferPaidOut(address,address,uint256)", +"4803724e": "removeLock()", +"4803b482": "UpdatedBlockingState(address,uint256,uint256,uint256)", +"48042e0b": "makerArguments(address)", +"480443b7": "validateBSM(string,address,uint8,bytes32,bytes32)", +"4804a623": "getflag()", +"4804e06f": "firstStageMintingDate()", +"4804e1a2": "transferBlocked()", +"4804e2a5": "WalletConnector(uint256,address)", +"4805b069": "NCRToken()", +"4806249e": "badgerWallet()", +"4806a0bd": "declineTradeOffer(uint256)", +"4806b2d2": "getPoolPrices()", +"4807270b": "cancelOffer(uint16)", +"480744e0": "setOwnerAsAdmin()", +"4808bf1c": "paymentsByCustomer()", +"480a434d": "baseprice()", +"480b1f21": "rateWin()", +"480b70bd": "scheduleCall(address,bytes4,uint256,uint256)", +"480b890d": "setPercentRate(uint256)", +"480b9122": "DebugClock(uint256)", +"480b9707": "updateSecondWallet(address)", +"480bc31f": "getTotalPot()", +"480c6ca5": "getTokensIssued()", +"480d3b2f": "manualCheckInvestmentRequired(uint256,uint256)", +"480d7504": "getMineTokenAmount()", +"480e2f8e": "LastContributorChanged(address)", +"4810034a": "AirDropper(address[],uint256[])", +"48103077": "set_tokens_received()", +"48107843": "getNextCallSibling(address)", +"4811647c": "withdrawTip(uint256)", +"4811af4a": "preIcoMax()", +"4811c070": "team1Address()", +"4812663f": "nAuditorsRequired()", +"4813d8a6": "isAllowedToMint(address)", +"4813e3e5": "halvingCycle()", +"48144ef6": "BillHenryTestCoin()", +"481456f9": "probability()", +"48146113": "userDeposit()", +"48146341": "updateMaxGasPrice(uint256)", +"4814bee8": "useDragonSpecialPeacefulSkill(uint256,uint256)", +"481531e9": "FeeToken()", +"48156d9c": "Loss(address,uint8,uint256,bytes32,bytes32,uint256)", +"4815ccea": "confirmAndForwardOnBehalfWithRevert(address,uint256,bytes,bytes32,uint256[2],uint8[2],bytes32[2],bytes32[2])", +"4815d4a9": "SECOND_SUPPLY()", +"4815d83f": "setBountyTeamUnfreezeTime(uint256)", +"4817c3e2": "_modifyTopUpLimit(uint256)", +"4817db70": "approveAndCall1(address,uint256,bytes)", +"4819d270": "approveRobot(address,uint256)", +"481a3fc4": "close(address,uint256,uint256)", +"481a4f2a": "fundLockTransferFrom(address,address,uint256)", +"481ae5d0": "setColdLedger(address)", +"481af3d3": "kittyIndexToApproved(uint256)", +"481b3dbb": "CentsToken()", +"481b659d": "permitPermanentApproval(address)", +"481c6a75": "manager()", +"481d3bd5": "setRegionUpdatedAt(uint256,uint256)", +"481dbaa4": "amountWithTip(uint256)", +"481ed14c": "YetAnotherUselessToken()", +"481ef4fd": "getAdPriceDay()", +"481f9555": "ALLOC_SC()", +"481fb72a": "numRentStatuses()", +"481fcbf4": "ApolloCoinTokenSale(uint256,uint256,uint256)", +"4820059f": "setDisallowedForMinting(address,address)", +"482076b6": "preICOHolders(address)", +"4820946a": "getContributorRemainingSaleAmount(address)", +"48224f67": "SUPPLY_FOR_SALE()", +"4822d008": "hexControllerAddr()", +"4825fc0d": "_ownerWallet()", +"48261921": "getLotteryPrizeInfo(uint256,uint256)", +"4826a425": "sub_codicefiscale(string,uint256)", +"4826e9c5": "UTC2MYT()", +"482717a4": "GetAddrCallQty(address)", +"482769f3": "distributeFunds(uint256,uint256)", +"482871ed": "_transferSigner(address)", +"4828a833": "MultiTransfer()", +"4828f4a2": "recover(uint256,uint8,uint256,uint256)", +"48293aae": "showKeys(uint256)", +"482961e1": "updateReading(uint256,uint256)", +"4829b393": "Tombola()", +"482a0bc9": "computeTokenAmountAll(uint256)", +"482ae8a2": "lastBlock_v8Hash_uint256()", +"482b27c9": "GetAdminAddress()", +"482ccedd": "_payFees(address,uint256,bytes4)", +"482d3af0": "allOwnerOperations(address)", +"482d51e0": "startNewGame()", +"482d7d5a": "_mine(uint256)", +"482da403": "buyme()", +"482f63b0": "postMessage(bytes32,bytes)", +"482fbae2": "_resultToRoll(string)", +"4830868b": "setPrWallet(address)", +"4830d5d9": "removeRestriction()", +"4830e266": "buyReferral(address)", +"4830e636": "setFreeClaimAllowance(address,uint256)", +"4830fd5f": "TotalLose()", +"48318cbc": "newIdTankProduct()", +"48330262": "priceIncrease_20_January()", +"48330cf6": "updateAvailability(uint256)", +"48335238": "FrozenFunds(address,bool)", +"48338323": "getRanomSecret()", +"48338756": "withdrawArbFunds()", +"4833c47c": "getTokenByBid(uint32)", +"48351617": "consultarSerie(string)", +"483699f4": "tokensFor1EthP6()", +"4836f823": "salesRates(uint256)", +"48370565": "tradeValue(address)", +"4837715a": "___initialize(address,address,address)", +"48378eea": "getBool2()", +"4837e2fa": "amountOfLegs()", +"48389870": "cutToInvestorsDividendPool(uint256)", +"4838d165": "blackList(address)", +"483a15ed": "getManagerFor(address)", +"483a20b2": "setCrowdsale(address)", +"483a6cf9": "transferForExchange(address,uint256,string)", +"483a83df": "setKYC(address)", +"483b04e3": "angelExchangeRate()", +"483b1a76": "isInPassFilter(address)", +"483ba09e": "setBitcoinBridge(address)", +"483c8400": "MIN_FUNDING()", +"483c8abd": "UpSuccess(string,address)", +"483d31e9": "sfc(uint256,string,string)", +"483d45bd": "getProvider()", +"483d8b77": "onehour()", +"483e3956": "killPoll()", +"483e7872": "changeRealZipper(address)", +"483ea316": "bindOrderStakes(address,int256)", +"483eef18": "comminglerSellsProductSKUWithProRataIngred(address,uint256,string,uint256,string,string)", +"483f1b18": "MigratedTokens(address,uint256)", +"483f31ab": "consume(uint256)", +"483f5082": "getPriceTicket()", +"483f69c0": "HPToken()", +"483fa94b": "placeorder(uint256,uint256)", +"48401f1a": "joinBytes(bytes,bytes,bytes)", +"48403ad4": "preICOtokensSold()", +"4840d354": "XNGToken()", +"48410f80": "hexToString(bytes32)", +"48419aed": "tokensRemainingStage1()", +"484293a7": "VertexCoin()", +"4842f639": "setBreedingAddr(address,address)", +"4843b358": "withdrawalsAllowed()", +"484412e5": "A5DToken()", +"48447983": "QiMingCoinToken(uint256,string,uint8,string)", +"4844f367": "placeBet(string,string)", +"484595fa": "encode(uint256,uint256,uint256)", +"4845d3f8": "closingTimeExtensionPeriod()", +"4845d40c": "withdrawATokens(address)", +"4846f559": "getIsWinnerSelected()", +"4847a79c": "_transfer(address,uint256)", +"48481979": "getHorsey(uint256)", +"48481b8a": "ElepigCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address)", +"4848b1a5": "setData(uint256,uint256)", +"484916a3": "NewInvestor(address,uint32,uint256)", +"48498729": "_fetchOrdersForPayer(address)", +"484b8d33": "setWalletAmount(address,uint256)", +"484b973c": "ownerMint(address,uint256)", +"484c4056": "Redeemed(address,uint256,uint256,uint256)", +"484c8675": "allocateTokens(address[])", +"484c98af": "supplyAtIndex(uint256)", +"484cb173": "MiddleClass()", +"484db63f": "firstRate()", +"484dd086": "preFundingStart()", +"484dd472": "shobozilToken()", +"484ec26c": "onPayout(uint256,uint256)", +"484eccb4": "lastGen0SalePrices(uint256)", +"484f4bc0": "noStoresSet()", +"484f5a61": "GetChallengeInformation(uint256)", +"48509d2c": "updateCapsAndRate(uint256,uint256,uint256,uint256)", +"48519189": "MonedaAlcala(string,string)", +"4852a273": "setWhitelistStatus(address,address,bool)", +"4852e54b": "SolarNA(address[],uint256[])", +"48538112": "totalRaisedAmountInCny()", +"485458a1": "GetContractStageTermination()", +"48546971": "closeIco()", +"4854bde0": "pvt_plmt_set()", +"485587a2": "employeePoolTokens()", +"48558be7": "getOnTokenTransferValueValue()", +"48560630": "bonus3Ends()", +"4857d52d": "setLiquidityParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"48582a2a": "units40percentExtra()", +"48593bae": "getEnumValue()", +"48594f43": "powerAddr()", +"4859f430": "registerVehicle(string,string,uint8,address)", +"485ac9fd": "_canSetGameOver()", +"485c5e96": "generateTokensAll(address[],uint256[])", +"485cc955": "initialize(address,address)", +"485d5d7b": "TSTORZCv1()", +"485d5dd2": "DayInSecs()", +"485d7d94": "removeAuthorized(address)", +"485d992c": "getDoc(address)", +"485dc6cf": "create21KittiesTokens()", +"485e16a5": "summReserve()", +"485e35d3": "updateWhiteList(address,address,bool)", +"485e82d7": "tokenIdsForTeam(uint32)", +"485f2ce3": "AccendiCassaAutomatica()", +"485f7a7e": "preSaleAllotment()", +"4860165c": "destroyIdentifier(bytes32)", +"48601a7d": "getTxnNum()", +"486083fe": "itemLottery()", +"48612fc0": "IAHCToken()", +"4861b2cc": "Create(string)", +"4861f39b": "getDepositedOrderDetails(uint256,address)", +"486201ab": "deapprove()", +"48624e44": "ATTPlaceHolder(address,address,address)", +"4862e650": "setVerificationCodeHash(string)", +"48636254": "setWhiteBacker(address,bool)", +"4863ba17": "setLibraryAddress(address)", +"4863ed97": "setCoins(address,address)", +"48640aba": "phase1WeiRaised()", +"48642e21": "bleachDailyLimit()", +"4864d140": "baseAmount()", +"4864d8d9": "activeStage()", +"48650338": "withdrawDividends(address)", +"48655faa": "setMintingOracle(address)", +"486575a5": "reducePledgedFees(uint256)", +"4865a24a": "strToBytes(string)", +"4865c7bf": "timeInfo()", +"4866352b": "scrapCounter()", +"48663e7d": "modifyHoldings(address,uint256[],uint256[],bool)", +"48664c16": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"4867ec4f": "decodeParamOp(uint256)", +"4868204b": "FundTransfer(address,uint256,uint256)", +"48686205": "DevConSchoolReward()", +"48688367": "fundMintingAgent()", +"4868ab47": "Yumerium()", +"4869687b": "getAgreedMediators()", +"4869854a": "StfuTokenCrowdsale()", +"486a03e0": "approveMappingProposal(address,address)", +"486a7e6b": "burnAmount()", +"486b7217": "getnumber()", +"486c182c": "minAcceptEther()", +"486c363d": "_transfer_token(address,address,uint256)", +"486c50f3": "getDiscountHourglass(bytes32,uint8)", +"486d6aa8": "factorReward()", +"486de794": "_pay(address,uint256)", +"486e60f5": "createGoldBuyOrder(uint256,uint256)", +"486e66da": "hungry(uint256)", +"486e97ad": "VLUToken()", +"486ea48d": "Nodes()", +"486fc7e8": "tokenOwnership(address)", +"48700c7c": "EVEN()", +"48709183": "bountyBeneficiariesCount()", +"4870b81d": "transferToWallet()", +"4870dd9a": "PERCENT_DIVISOR()", +"4871052b": "LogSignature(address,bytes)", +"48719120": "renewFarmerCertificate(address,uint256)", +"4871c4c1": "ownerWithdrawTo()", +"48724227": "KickOwned()", +"487260bb": "startBlockBonus()", +"487269fb": "VLCToken()", +"48727dca": "TradeBitToken()", +"4873c721": "_remainingBlocks(address)", +"48749616": "getPoolInformation()", +"4874a41f": "Tfarm()", +"4874e62d": "concat(string,string,string)", +"48758697": "getRarity(uint256)", +"487621cc": "addNewbond(uint256)", +"4876a339": "accept1(uint256,uint256)", +"4876f3e5": "comfirmRedeem(uint256)", +"48794149": "credosReserveAllocation()", +"4879e07c": "happyNewYear()", +"487a5057": "getGameStart(address,uint256)", +"487a6e32": "deliver(uint64,bytes32,uint64,bytes32)", +"487a8043": "receiveApproval(address,uint256,address,bytes,bytes)", +"487a9e27": "USD_CAP()", +"487cd86f": "right34(uint256)", +"487e1d1f": "getNameOfAddress(address,address)", +"487f3f06": "team_address_count()", +"487ff8b6": "winningaddr()", +"48803406": "removeFundAccount(address)", +"48807db1": "getPI_edit_12()", +"4881148e": "safeGetPartialAmountFloor(uint256,uint256,uint256)", +"4881ae73": "add(uint16,uint16)", +"48823786": "allstocksFund()", +"4882419d": "isEpocum()", +"48839789": "ProofOfAIDS()", +"4883b6ce": "CryptoTorch()", +"4883c9dc": "prevHodlers()", +"48849c5a": "blockTransferFrom(address)", +"4884f459": "buyListing(uint256)", +"4885b254": "batchTransferFrom(address,address[],uint256[])", +"4885d732": "TokensAllocated(address,uint256,uint256)", +"488683f3": "_Token(string,string)", +"48868ac8": "sanityCheck(bytes32,bytes32)", +"4886d2d5": "setIsOver(bool)", +"48870630": "abi()", +"488725a0": "versions(address)", +"48887c8b": "setFreeAlien(uint16)", +"48889813": "mintedPercentOfTokens()", +"4888bc11": "getCompensation(uint256,uint8,address)", +"4888c619": "cryptocompareBtcOracleUrl(bytes32)", +"48894ad6": "FiveBalance()", +"488981cd": "countCourse()", +"4889ca88": "receiveApproval(address,uint256,address)", +"488a24c6": "isWalletContract()", +"488a6705": "AddConsentData(uint256)", +"488ab2c0": "TOKEN_EXCHANGE_RATE()", +"488b3538": "shares(address,bytes32,int256)", +"488b380b": "setLpIsStart(bool)", +"488bfa0b": "claimPaymentTokens(address,uint256)", +"488c1709": "setRefundAgent(address)", +"488c65fc": "stakeWithSignature(bytes32,uint256,uint256,uint256,uint256,bytes)", +"488c7951": "abstractFn(uint256)", +"488cec69": "tokensAreAvailable()", +"488dc208": "updateUrl(address,bytes32[5],address)", +"488ede8b": "getUserRating(address,address)", +"488f1e43": "getSellingInfoByIndex(uint256)", +"488f231f": "createAssociation(uint256,uint256)", +"488f3b6a": "tryCloseRoom(address,uint256,uint256)", +"488fdb81": "buyFrom(string,address)", +"48900438": "getAllowedAmountAndPendingPeriods(address,address,bytes32)", +"48906c27": "evaluateMany(address,uint256,uint256[],uint256[],uint8[])", +"48916211": "checkSigs(bytes32,bytes32,uint256,bytes)", +"48917d5d": "lastDrawTs()", +"4891c06a": "contributionPool()", +"4891f401": "PRICE_1()", +"4892f0af": "tokenPorter()", +"489306eb": "oraclize_query(string,string)", +"48931352": "TOTAL_SUPPLY_CAP()", +"4893de2a": "rewardUnicornAmount()", +"4893ed5b": "proposedUserKeyPendingUntil()", +"48940815": "doTriggerJackpot()", +"48941312": "CoinAdvisorCrowdSale(address,address,uint256,uint256)", +"4894e37f": "__callback(bytes,string,bytes)", +"48957fb8": "getAyantDroitEconomique_Compte_4()", +"4896672e": "updateSalePrice(uint256,uint256)", +"489667e6": "_isSynthesizingAllowed(uint256,uint256)", +"489807a5": "Donate(uint256,uint256)", +"4898556e": "SaleStopped(address,uint256)", +"4898722d": "setSink(address[],uint256[])", +"48989182": "ethMax()", +"489979a3": "allocateTopupToken(address,uint256,uint256)", +"4899e4c6": "addrDistribution()", +"489acecc": "requireMultiple(uint256)", +"489b1636": "icoPhaseCountdown()", +"489b5046": "GetBankerCandidate(uint8)", +"489ba092": "setNameLink(string,string)", +"489c1202": "isGuard(address)", +"489c14fd": "pathAdvisorVault()", +"489c18b0": "getLocksLength()", +"489d2104": "changePaymentContract(address)", +"489d2844": "notifyBuyToken(address,uint256,uint256)", +"489d426e": "ratePreSale()", +"489da639": "COIN_SUPPLY_COMPANY_TOTAL()", +"489e5656": "MAX_CANVAS_NAME_LENGTH()", +"489f3c88": "ping(address,uint256,uint256,uint256)", +"489fde35": "setEnforce(bool)", +"48a0c8dd": "isDepositable()", +"48a0d754": "available()", +"48a0fa29": "toggleTokenExchange()", +"48a15250": "setBurnRequestUintMap(uint256,string,uint256)", +"48a16b8c": "_itoa(int256,uint8)", +"48a1befb": "UserFactory(address)", +"48a3cbdf": "fundTeam()", +"48a46bd3": "isRejected(address)", +"48a490fb": "transferFromTreasury(address,uint256)", +"48a50a54": "saleClosedTimestamp()", +"48a54fc5": "checkContract(bytes32)", +"48a5d7bb": "AssetPool(address,uint256,uint256,uint256,uint256)", +"48a60b6c": "getPlayerBets()", +"48a73e96": "getFreeNapkins()", +"48a76740": "TokenData(uint256,uint256)", +"48a7f1f9": "proposeOfferingContract(address,address)", +"48a860dd": "confirmTransactionAfterExpiryFee(uint256)", +"48a87fa8": "emptyTTT()", +"48a8b427": "calculateShareCrystal(uint256)", +"48a935e2": "setIndividualCaps(address[],uint256[])", +"48a9866b": "kill(address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"48aa71f4": "isInCrowdsale()", +"48aac336": "getNumberOfParticipantsPerLevel()", +"48ab41d3": "getPOOL_edit_3()", +"48ac0f3c": "CORPORATE_SUPPLY()", +"48acce46": "ponziAddress()", +"48acd9b1": "changeFeeAccount2(address)", +"48ad5cd0": "product3()", +"48adfbdb": "getModerator()", +"48afc0fe": "FOMO3DLite()", +"48afd1b3": "hasReturns(address,uint256)", +"48afe4f5": "currentPersonalLimit(address)", +"48b15166": "blockTime()", +"48b17b64": "currSaleComplete()", +"48b24b88": "IAM_PER_ETH_BASE_RATE()", +"48b43020": "_setDistrictAddresss(address,address)", +"48b45d92": "isRequestApprove(bytes32)", +"48b49fa7": "buyGem(uint256)", +"48b4d3a4": "EmitTransactionIds(uint256[])", +"48b52c7d": "_transferFrom(address,address,uint256,string)", +"48b537ce": "MaggieToken()", +"48b5677f": "delegatedSignedRemittance(bytes,address,address,address,uint256,uint256,uint256)", +"48b59dd6": "changeCourse(uint256,uint256)", +"48b5b15c": "testHasCorrectPriceForMultistage()", +"48b5de18": "setEscapeHatch(address)", +"48b741de": "greaterPriceMsgComparator(uint256,uint256)", +"48b75044": "release(address,address)", +"48b84cde": "testCreateElectionOptions()", +"48b8ff83": "tokensForArtist()", +"48b9ed30": "getdisdone()", +"48b9f88f": "blockDiff()", +"48ba2d51": "LogBidRewardClaimed(uint256,address,uint256)", +"48bafd0e": "newGame(string)", +"48bb4067": "teamIssuedTimestamp(address)", +"48bb4347": "_checkOpenings()", +"48bc2a21": "bonusSecondIco()", +"48bc3e2a": "twoStepRate()", +"48bc4edf": "startAndSetParams(uint256,uint256)", +"48bd64c0": "getArrayHashLibry(bytes16)", +"48bdaaff": "TradeStatus(address,address,uint256,uint256)", +"48be4030": "INDToken()", +"48beae6a": "kkTestCoin1()", +"48bf51f5": "setInterestRatePunitory(uint256)", +"48bf9179": "Extradecoin(address,address)", +"48bf9cea": "serialNumberIsUsed(string)", +"48c0b782": "intermediariesCount()", +"48c0dc5b": "Inonit(uint256,string,string,string)", +"48c1ee9b": "wadmin_transferOr(address)", +"48c20a24": "getChildsAmount(address)", +"48c22f3f": "RateClient(uint256)", +"48c26e22": "purchaseRate()", +"48c2f845": "purchased_tokens()", +"48c40dbd": "transferTokensThroughProxyToContract(address,address,uint256)", +"48c44712": "refundERC20(address,address,uint256)", +"48c4cae9": "setNameReaderId(bytes32,bytes32)", +"48c4d7ce": "descendingCount()", +"48c54b9d": "claimTokens()", +"48c5be67": "numDistributionsRemaining()", +"48c6af04": "test_oneInvalidEqString()", +"48c6e2f7": "BaoFengCheng(uint256,string,uint8,string)", +"48c7a0bf": "SharePrice()", +"48c7f438": "setOldest()", +"48c81c16": "GamersToken()", +"48c834c0": "tier4Rate()", +"48c875cf": "resetRequest(string)", +"48c8cd41": "dateTime()", +"48c91284": "setM1(address)", +"48c981e2": "sendEther(address)", +"48c9ecf8": "allowTokenOperations(address)", +"48cb5aeb": "Easticoin(uint256,string,string)", +"48cc38e1": "nestedFirstAllToAll2(uint256)", +"48cc7b6e": "startForge()", +"48cd4cb1": "startBlock()", +"48cd65d9": "getInPlayGames()", +"48cdb451": "initializeVesting(address,uint256,uint256)", +"48ce382d": "addActivityAccount(address,uint256,string)", +"48cebd67": "presaleSold()", +"48cf9e5c": "getGroupIndex(uint256)", +"48cfa939": "minContribution_mBTC()", +"48cfc6c6": "crowdSaleEnabled()", +"48d0aff3": "drainexcess()", +"48d21789": "burnFunction(address,uint256)", +"48d24f35": "transferMintingAddress(address,address)", +"48d26dd1": "finalizeType()", +"48d2df48": "userBuys(address)", +"48d317ce": "stepTwo(int256)", +"48d3297c": "stageStatus(uint16)", +"48d34bc6": "getHashInternal(address,uint256,uint256,uint256,uint256)", +"48d37a58": "withdrawPrize()", +"48d453ee": "gcEndTime()", +"48d47e7e": "clc()", +"48d4eaf7": "storeData(bool,uint256,address,bytes32,string)", +"48d51a0d": "submitProposal(bytes32,uint32,uint32)", +"48d597e5": "addFromMapping(uint256,uint256)", +"48d5a5c0": "consensusAddress(address)", +"48d6002a": "otherPlayer(address,address[])", +"48d6047c": "WhitelistWalletUpdated(address)", +"48d64fd5": "changeTradeTracker(address)", +"48d6ca55": "getChangeFeeAmount(uint256)", +"48d7de63": "setTenant(bytes32,address,uint256,string)", +"48d82608": "InvestmentPolicyChanged(bool,bool,address)", +"48d848d0": "returnBoolean(bool)", +"48d8bb3f": "setIco(address,address)", +"48d9614d": "GetFee()", +"48d9a374": "blockTransfer(address,uint256)", +"48da08e6": "SilverCoin()", +"48da1532": "node_side(uint256)", +"48da60af": "limitClosedSale()", +"48da95b8": "VirtualExchange(address)", +"48db409a": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64)", +"48db5f89": "player()", +"48ddc01f": "changeFisherMansFeeCalculator(address)", +"48dddca8": "minSpend()", +"48de0cdc": "withdrawInBatch(address[],address[],uint256[])", +"48dfe175": "tier3Total()", +"48e021e9": "weiCostOfToken()", +"48e06300": "isEquipedAny2(address,uint256,uint256)", +"48e071d4": "denyUser(address)", +"48e0f410": "fundRaising()", +"48e11f70": "OMGCatCoin()", +"48e12ae3": "getAllowancePeriod()", +"48e1a760": "getttttttt(uint256)", +"48e1c18b": "itemsOwned(address)", +"48e252ab": "CryptoMilitary()", +"48e25bd2": "WinToken()", +"48e278f9": "NauticusToken()", +"48e37220": "presaleDateStart()", +"48e3a033": "mulPay(address[],uint256[])", +"48e3a064": "StandardCampaign(string,uint256,uint256,address,address)", +"48e4e297": "allowedToPurchase()", +"48e591ac": "getVote(address,address,uint32)", +"48e5c71f": "whoIS(string,bool)", +"48e61782": "left4(uint256)", +"48e624eb": "holderAdvPercent(address)", +"48e66722": "getRedeemRequestsLength()", +"48e68e30": "synthesizeWithAuto(uint256,uint256)", +"48e6b393": "test_logs()", +"48e7575d": "ecrecoverFromSig(bytes32,bytes32)", +"48e76563": "oraclize_setNetworkName(string)", +"48e7a100": "reparametrizeMultisig(bytes32,uint256)", +"48e837b9": "createGame(uint256)", +"48e9657d": "getSignatureAtIndex(string,uint256)", +"48e9f1ea": "EPXCrowdsale()", +"48ea97be": "tokenSalePausedDuration()", +"48eaa435": "safeExp(uint256,uint256)", +"48eab053": "fourthTeamWithdrawal()", +"48eaeb72": "BPCC(uint256,string,string)", +"48eb4ac1": "getAllMilestonesHashes()", +"48eb76ee": "attacker()", +"48ec8a0c": "getSecurityLimits()", +"48ed190a": "lastBlock_f11()", +"48ed1e3b": "LookUpAvailableDivInt(address)", +"48ed3e00": "date610()", +"48ed994c": "newLottery(uint256)", +"48edbf1d": "SKS()", +"48ef245b": "createFaucet(string)", +"48ef5aa8": "UpdateMaintaining(bool)", +"48ef670e": "UportRegistry(address)", +"48f001e6": "decreaseFreezeValue(address,uint256)", +"48f05187": "scheduleCall(address,bytes4,bytes,uint256)", +"48f082e8": "dayToMinusToken()", +"48f0b8e3": "getNumberOfGamesCompleted()", +"48f134f6": "closeSetup()", +"48f1e9c2": "getCertificationDocument(address,uint256)", +"48f2090b": "distributionPercent()", +"48f213e0": "PER_USER_AMOUNT()", +"48f221b6": "changePartner1(address)", +"48f36144": "claimOracle()", +"48f3e6f4": "getFourthAddressBalance()", +"48f549a4": "CreateToken(address,uint8,uint16)", +"48f6647b": "matchWithTheirs(uint256,uint128,uint16)", +"48f69212": "YELLQASH()", +"48f6cc0a": "_removeManager(address)", +"48f7f2a3": "daoFactory()", +"48f83e86": "authorizeAccess(address,address)", +"48f8fe69": "fnv(uint256,uint256)", +"48f918e0": "reclaimLeftoverEth()", +"48f95a7d": "depositsCountForUser(address)", +"48f9e246": "requestImplChange(address)", +"48fab2b0": "emitOracleUpdated(address)", +"48fb7332": "INTREPID_MAX_PRICE()", +"48fc66e9": "NzmLToken()", +"48fcb4e8": "getFrozenAccountCoinCount(address)", +"48fdb8c1": "partnernames()", +"48fee60f": "Criptohubcoin()", +"48fefd9b": "supportsToken(string,address,address)", +"48fefed2": "setNewGreeting(string)", +"48ff05b8": "removeUint256(bytes32)", +"48ff0c47": "testF4(uint256)", +"48ff1387": "rebuy(uint256)", +"48ff15b3": "acceptManager()", +"48ff30ff": "Breakup(uint256)", +"48ff6525": "applyRedenomination()", +"490052a8": "playerRoll(uint8,uint8)", +"49007329": "CCCRSale(address)", +"4900b48c": "checkOracle(address,address,address,bytes32,uint256[])", +"4901a205": "canShelf(string,address)", +"490203a7": "getMiningReward()", +"4902d163": "pendingOwnedOwner()", +"4902e4aa": "removeSuperAdmin(address)", +"490377a7": "setParameters(address)", +"4903c401": "Admins(address,address,address)", +"49041903": "getGame(uint64)", +"49044cc5": "premiumValue()", +"49051c1d": "threshold2()", +"49055da2": "getCurrGameInfoPart2()", +"4905c5b0": "_isUserInGame(address)", +"4905c769": "newLoan(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"490618d1": "deregisterBroker(address)", +"49063d37": "checkDivs(address)", +"4906da1e": "getMaxEther()", +"4907cd0f": "subscribe(address,uint256,uint256,uint256)", +"490825a9": "testControlTransferEnableNotTransferable()", +"49082bef": "TWO_YEAR_KEEPING()", +"4908d1de": "allUnsoldTokensAllocated()", +"490a32c6": "message(bytes32)", +"490a65c8": "PlutonDistribution()", +"490a6dac": "setWinner(uint256,bytes32,uint256,uint256,bytes32)", +"490b4f92": "coinAgeForAddressAt(address,address,uint256)", +"490bf04f": "rateToEther()", +"490c58f0": "addTokenTo(address,uint256)", +"490cce74": "FincontractMarketplace()", +"490d6d11": "Resume()", +"490e25c1": "C4FEscrow(address,uint256,address,uint256,uint8)", +"490e2bd1": "Autolen()", +"490f027a": "setPrizes(uint256[28])", +"490f611e": "Or(bytes32,bytes32)", +"490fc399": "votedKickoff(uint256,address)", +"490fdbd7": "transferTile(uint16,uint16,uint8,address)", +"490fea4d": "addBounty(address,address,uint256)", +"491045af": "LifeSet_002()", +"491274a8": "presaleContributorCount()", +"49128cdb": "updateRoundState()", +"49135b0f": "getAllAlgos()", +"4913732e": "buyTokenFromModerator(uint256,address,uint256,bool)", +"49137bca": "reading_cards()", +"4913ec88": "EnergisToken()", +"49144618": "Wasted(address,uint256,uint256)", +"4914fb27": "approveWithdrawal(address)", +"4915020f": "verifyLinkPrivateKey(address,address,address,uint256,uint8,bytes32,bytes32)", +"4915ef4a": "refund_contract_eth_value()", +"49164b41": "CryptoDivert()", +"491737f2": "ico3cap()", +"491759aa": "sendEthTweet(string,string,string)", +"4917c302": "ACCEPTED_AMOUNT()", +"4918d588": "test_BondPostedAndOverMajority()", +"491a6155": "REFERRAL_BONUS_PERMILLE()", +"491a7904": "transferTokenTo(uint256,address)", +"491abe0c": "servicePayment(uint256)", +"491b0712": "snpb(uint256)", +"491b8c45": "setWARTokenAddress(address)", +"491c8e08": "lastBlock_a6()", +"491cfc1c": "setNextRoundDuration(uint256)", +"491d525a": "pMintTokens(uint256,int256,address,uint256,uint256)", +"491d75f4": "configurationTokenTranchePricing(uint256[])", +"491dcfe9": "batchActive()", +"491e0df0": "totalContributorsContribution()", +"491e55db": "GAME_COST()", +"491e74f3": "YICHAINCoin()", +"491eeb3a": "resumeInvest()", +"491fd263": "updateMessage(uint256,bytes32)", +"49200d77": "numberOfOutcomes()", +"4920781b": "GATcoin(uint256,string,string)", +"4920adcc": "MysteriumCrowdsale(address,address,uint256,uint256)", +"4920ff15": "SetHome(string)", +"49212c92": "preValidateChecks(address,uint256,uint256)", +"4921a91a": "giveMe()", +"4921cea6": "transferFeeOwner()", +"4921e147": "setMinWeiToPurchase(uint256)", +"4921f9e9": "AnonReport(uint256)", +"4922d481": "recovery(address)", +"49231598": "fetchAllVotersBySnapshotBlock(uint256)", +"49231b28": "changeRates(uint256,uint256)", +"49239e10": "refundStageStartTime()", +"492430f6": "DissolutionRoom(uint8,bool)", +"4924d397": "Respond(address,uint256)", +"49251b18": "FrozenFunds(address,address,string)", +"4925480e": "fireAdmin(address)", +"49260304": "nDEX()", +"4926248f": "setListener(address,address)", +"49264032": "Spendcoin()", +"49266f2f": "maxBidEth()", +"4927f408": "Vertex_Token(uint256,address,uint256)", +"49285b58": "getVotingToChangeKeys()", +"492abc67": "signerIsApproved(bytes32,bytes)", +"492b3bf7": "baseTokenCapPerAddress()", +"492b67ea": "Etherdoc()", +"492b8d45": "POWToken()", +"492bd276": "getIntervals()", +"492c0325": "calculateNewRate(uint256,uint256)", +"492c70fb": "swipeToken()", +"492c981b": "entryInformation(address,bytes32)", +"492cc769": "buy(string)", +"492d06cf": "unFreeze(uint8)", +"492dda05": "reTweetReward()", +"492e333f": "allocate5ProjectToken()", +"492e672e": "DCETToken()", +"492eec25": "bountyOfflineTokens()", +"492f190d": "availableCommission()", +"492f8724": "subscriptionStatus(uint256)", +"492fb343": "feeBeneficiary()", +"492fea53": "_createPet(uint256,uint256,address,uint256,uint256,uint256,uint256)", +"4931b3b4": "setData_30(string)", +"4932a80b": "unownedPlanet(uint256)", +"4932ce32": "changeGame(address,uint256)", +"4932f35e": "NomToken()", +"49330cb8": "getVote(uint256,uint256)", +"493322c0": "calculateRewardInternal(address,address,uint256)", +"49336245": "getEntry(bytes)", +"49337227": "testCanCloneAfterTransfer()", +"49339f0f": "Delegate(address)", +"4934453a": "TPIToken()", +"4935b3b6": "PDTC()", +"4935e740": "withdrawMyFunds()", +"49361cfe": "lastInvestmentTime()", +"493770cc": "setTransferStatus(bool)", +"4938649a": "stopEverything()", +"49386f26": "getlistedItems()", +"493953de": "addOwnToken()", +"49399729": "minimumBidAmount()", +"4939bfde": "requestedBy()", +"4939ce85": "CLASS_BEAST()", +"493a64e4": "SetParticipantRole(address,address,uint8)", +"493a7209": "stopBuy()", +"493a8d0c": "tokenActive()", +"493b284e": "exchangeNominsForHavvens(uint256)", +"493bccc8": "awardMissedBlockBonus(address,bytes32)", +"493ca31a": "EPAYCLUB()", +"493caeea": "removeMemberWithAddress(address)", +"493dbd02": "forceEndGame(address)", +"493f8d30": "read_demurrage_config_underlying()", +"493fcf1c": "taxRateNumerator()", +"49403183": "isPassed(uint256)", +"49404d25": "lastBlock_v13()", +"494054f4": "createNota(string,string)", +"49407a44": "claimEther(uint256)", +"4940c807": "sumElements(uint8[])", +"49416e45": "RCD()", +"4941d059": "editRestrictedAddress(address,bool)", +"4941d296": "periodITO_startTime()", +"49420759": "changeWithdrawable(uint256)", +"494278e3": "getgamecardaddress(uint256)", +"4942a71f": "getFromBank(uint256)", +"49432923": "participationHistory(address)", +"49433942": "PointerChanged(uint8)", +"49435c0d": "whitelistSupplier()", +"49437210": "getUpdatable(bytes32)", +"49440b91": "lockMntpTransfers(bool)", +"49441fc3": "MIN_ETHER_CONTR()", +"4945a575": "childApproved(address,uint256)", +"494630cd": "PullRequestAlreadyClaimed(uint256,uint256,bool)", +"49463b8e": "SeeleToken()", +"49465a50": "changeTakerDeadline(uint256)", +"49465d33": "lastPriceFeed()", +"4946c574": "getTransformMineInDay(address,uint256,uint256)", +"4946e206": "rescueCat(bytes32)", +"4947c8d0": "setFinishTime(uint256)", +"49480bc1": "releasePrivilege()", +"49484450": "ProofOfNoSnipers()", +"4948c2db": "stage4_price()", +"4948d91d": "SicBo(address)", +"4948e51a": "freezeToken(address,uint256)", +"49499e14": "setCompte_15(string)", +"4949d9fa": "bankrolledBy(address)", +"494ac14c": "LOTTERY()", +"494b46f9": "_changeAdmin(address,address)", +"494b5e0f": "setUserFactoryContract(address)", +"494b90e8": "teamPoolAddress()", +"494bf608": "distributeEther()", +"494c2a0f": "STQCrowdsale(address[],address,address)", +"494cf333": "getAddressUIntMapping(address)", +"494cfc6c": "getTokens(uint256,uint256)", +"494d93cc": "result_block()", +"494e49a4": "createAccountWithBalance(string,uint16)", +"494e4bc3": "fundtransfer(address,uint256)", +"494fb622": "SetData(uint256,string,string,string,string)", +"494fee7d": "estimateDistribution(address)", +"4950b392": "exerciseCall(uint256,uint256,uint256)", +"49517b41": "addSolution(uint256,string,string,string,string,string)", +"4951a18f": "crowdsaleCap()", +"495289be": "setIssuer(address,bool)", +"4952d2dd": "logPromiseUnfulfillable(uint256,address,uint256)", +"4953b57d": "isAdminOwnersValid()", +"49550d66": "tryTakeBack(uint256,uint256)", +"49556aff": "fulfillEthereumLastMarket(bytes32,bytes32)", +"4955a79e": "transferOwnershipOperation()", +"4955f280": "createContractPerson(string)", +"4956cf1c": "migrating()", +"4956eaf0": "deploy(address,uint256)", +"49570293": "_addPurchasedTo(address,uint256)", +"49573edd": "tgeSettingsChange(uint256,uint256)", +"495816b4": "BOUNTY_TOKENS_AMOUNT()", +"49582509": "ICO_ON()", +"49582a20": "initializeSupply(uint256,uint256,uint256)", +"4958abb7": "switchFeePolicy(bool)", +"4958ace2": "restartSale(address)", +"49593f53": "submit(string,uint64,uint32,uint32,bytes32)", +"4959642c": "isUserKyced(address)", +"49596a65": "initProject(string,string,string)", +"495b3bcc": "LSEscrowContract()", +"495bbcae": "testNeededBalanceForContractCreation()", +"495bf26b": "lengthOf(string)", +"495c167f": "sumPayments()", +"495c5891": "getTotalAuthorizedForPayment()", +"495c9588": "minEligibility()", +"495ccca3": "WEEFundWallet()", +"495d32cb": "par()", +"495d7b26": "processScore(bytes32,string)", +"495df195": "CollectEarning()", +"495e1b3d": "etherEscrowAddress()", +"495f9bae": "getProposalVoterVotesCount(uint256,address)", +"495fe25b": "transferTo(address,uint256,bytes)", +"49602f5c": "OpusToken()", +"49606455": "take(bytes32,uint128)", +"49606d51": "Nihilum()", +"4960ae42": "numberOfVerifiers()", +"4960d2bc": "getLandTaxRate(uint256)", +"496128ec": "prosperaToken()", +"49614e91": "isRegisteredAddress(address,address)", +"4961b40c": "getReleaseValidator()", +"4962aa66": "discountedRates(uint256)", +"4962ab01": "removeMembers(address,bytes32,address[])", +"4962ad08": "approveAlgo()", +"4962b964": "getPuppetCount()", +"49630dda": "removeQuestion(address)", +"4963513e": "Reserved(bytes32,address)", +"49649fbf": "withdrawAllFunds()", +"4965fc89": "getForfeited(address)", +"49661fcf": "stage2Tokens()", +"49671d28": "setAmountSoldPerPeriod(uint256)", +"4968694a": "setCoolness(uint256,uint32)", +"496a698d": "currentAuction()", +"496bd844": "round_up_division(int256,int256)", +"496be2cf": "atxControllerAddr()", +"496c4fad": "setPriceAgent(address)", +"496c5ad8": "throwsWhenGettingTokensWithStoppedSale()", +"496e41d2": "quotaUsed(address)", +"496fbeb3": "transportationFeeMultiplier()", +"496fc976": "setC4FContractProvider(address,address)", +"496fd2c5": "ICOStartToken(uint256)", +"4970fb36": "armagedeon(address[])", +"4971129d": "CatTransfer(address,address,uint256)", +"49713811": "winnersCount()", +"49714815": "ownerKillContract()", +"49716f5a": "originalTotalWeight()", +"4973219d": "outputi(uint256)", +"497347b2": "_storeContent(address,string,uint256,bytes32,address)", +"4973dbf6": "RATE_ETH_CUE()", +"4973dd25": "unBlockExternalTransfer()", +"49741098": "admin_set_min_pay(uint256)", +"497484f6": "applyBonus(uint256,uint8)", +"4974af1f": "testPublic(uint256[20])", +"4974bc27": "download()", +"4974da81": "addWord(string)", +"49752baf": "chronoBankPlatform()", +"49755b9e": "issueSynths(bytes4,uint256)", +"4975d202": "balanceOfOwner()", +"4975e893": "getProposalCreatedAt(bytes32,bytes32)", +"49776581": "getDocumentUpdatedVersionId(uint256)", +"497777d5": "collect(bytes32)", +"4977d6a4": "DreamToken()", +"49786571": "Economeme()", +"4978ddcc": "transferAPIOwnership(address)", +"4979440a": "getHighestBid()", +"4979c012": "ClosingTimeForCloning()", +"4979d6ec": "setUserManagerContract(address)", +"497a7b48": "taskRewardVote(bytes32,uint256)", +"497aed49": "PRIMARY_START_PRICE()", +"497b383e": "buyReferTokens(address,uint8)", +"497b8018": "getBallotOptNumber()", +"497cc504": "claimE()", +"497cd327": "TMONEY272708()", +"497cd426": "updateRewardDistributor(address)", +"497d709d": "icoNumberBalanceOf(address,uint256)", +"497dbce9": "_assertAmount(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint8,uint256)", +"497dd0cb": "migrateContributors(address[])", +"497f3132": "getLastRegistration(string,int256)", +"497fb5b9": "tokensWithdrawn()", +"498022ea": "evalTransitionState()", +"49813e26": "MenovaToken()", +"4981b3ca": "performSell(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", +"49843982": "Coin(uint256)", +"4985acee": "getTransferFromToValue()", +"4985b325": "addSurplus()", +"49866ec0": "finishTokensSale(uint256)", +"4988ef98": "LOCK_TOKENS_DURATION()", +"4989ae8e": "RESERVED_TOKENS_FOUNDERS()", +"4989b0b6": "setCustomBuyerLimit(address,address,uint256)", +"498a37f0": "setSmallInvestor(address,uint256,uint256)", +"498a3944": "setNameWriterId(bytes32,bytes32)", +"498a4c2d": "startBlockNumber()", +"498a690f": "issuingRecordAdd(uint256,bytes32,uint256,uint256,uint256,string,uint256)", +"498a6de7": "setRevenueContract(address)", +"498b7718": "J8T_DECIMALS_FACTOR()", +"498be109": "FAPFounderFund()", +"498c07f3": "startCrowdsale1(address)", +"498cb7cb": "setDelegadoDeEscuelaVerify(bytes32,uint256,uint256)", +"498cc70d": "getResult(string)", +"498d2ae0": "getMintRequestAddressMap(uint256,int256,string)", +"498e78b1": "unregisterManager(address,address)", +"498e87a9": "setPI_edit_21(string)", +"498eecb2": "getLimitedReportersDisputeBondToken()", +"498f27ae": "countCampaigns(address)", +"498f6fbe": "NewSubscription(address,uint256,uint256)", +"498fd833": "priceDT()", +"498ff49a": "repayImmediately(uint256)", +"49911610": "getDay(uint16)", +"49912f88": "appeal(uint256,bytes)", +"49917511": "buyCoinsCrowdSale(address,uint256,address)", +"49926028": "typeHash()", +"499260d6": "get_activity_by_id(uint256,uint256,address)", +"49937e25": "buyPrimordialToken()", +"49942483": "ICO_PHASE2_BONUS_PERCENTAGE()", +"49942ccb": "scheduleCall(bytes,bytes,uint256,uint256)", +"49943a13": "PARTICIPATION_FEE()", +"49955431": "cupi()", +"4995b458": "week()", +"4995e9fb": "FOUNDER_ADDRESS2()", +"4996e899": "getGuaranteedContributorsLenght()", +"49970e16": "forwardPlay(address,address,bytes,bytes32,bytes)", +"499831f2": "pauseGame()", +"4998ce40": "setbonusTokens(uint256)", +"49996698": "trustedAddressSize()", +"499a1bcd": "setAQL(address,uint256)", +"499a8fea": "setClue3(string)", +"499ac979": "redistributeTokensForAddresses(uint256,address[])", +"499af77c": "current_spin_number()", +"499caf09": "secondTime()", +"499cd176": "endAttack(address,address,bool,uint256,uint256,uint256,uint256)", +"499cf7ce": "BOXEX()", +"499d1081": "mint(address,uint256,uint128)", +"499dae56": "getMultiRequestRequestor(uint256)", +"499e2c81": "getOrCreateWaitingBoard(uint256)", +"499e6c10": "isTheContract()", +"499fa529": "ALLOC_SALE()", +"499fd141": "getDrupeCoin()", +"499ff236": "maxAnonymousContribution()", +"49a0a3b3": "resetTokens(address[],uint256[])", +"49a0c976": "unlockEmission()", +"49a0e681": "rst()", +"49a24a7d": "DolyToken4()", +"49a3d2bb": "updateAllowed(address,address,uint256)", +"49a51839": "EGGS_TO_HATCH_1LOBSTER()", +"49a634f0": "LTS()", +"49a67b55": "commitStart(bytes32)", +"49a69078": "lastBlock_f5()", +"49a6a4de": "showAssetInfo(bytes32)", +"49a742eb": "validRate(uint256)", +"49a76444": "Hygen()", +"49a7a26d": "solver()", +"49a86c9e": "addToAccesslist(address)", +"49a8d337": "lockedTeamAllocationTokens()", +"49a92910": "setPlayer(address,uint64,uint64,uint64,uint64,uint64,uint64)", +"49a9d5ad": "CGENToken(uint256)", +"49aa480a": "VixCoin()", +"49aa4ee2": "removeVote()", +"49aafad7": "allowedToBurn(uint256)", +"49ab1d86": "setGeneLab(address)", +"49abee50": "phaseStart()", +"49abf2d6": "staticoins(uint256)", +"49acce72": "AnkitVictoContractToken()", +"49ad12a5": "getItemRarity(uint256)", +"49adf14f": "Claim_TRAC_1850()", +"49adf314": "_updateDividends(address)", +"49ae1f17": "KWHToken(address,address,address)", +"49ae8dc3": "getChildren(uint256)", +"49ae9b31": "canReadName(address,bytes32)", +"49af0af1": "baseEthCap()", +"49af63a9": "setWaitTime(uint8)", +"49afc6e5": "tokenBalance(uint256)", +"49afcc0e": "dataSourceGetSemiResult(uint256)", +"49b11f24": "dailyAuctionStartTime()", +"49b1b2d9": "newBonus_and_newPeriod()", +"49b2f5ff": "technicalCommunitySupply()", +"49b3b29f": "costs(uint256)", +"49b40402": "exchangeThreshold()", +"49b48e66": "setCheckOwner(bool)", +"49b54685": "updateDps(uint256)", +"49b5b541": "compute(address,uint256)", +"49b6313c": "getCurrentSellOffer(uint32)", +"49b71e47": "distributeWinnerPool(string,uint256)", +"49b76501": "getStorageRate()", +"49b7a9c2": "dividendManagerAddress()", +"49b7ef6c": "lockedSell()", +"49b85a16": "kycAddress()", +"49b88203": "declareProjectDefault()", +"49b88919": "setImageDescriptor(uint256,uint16)", +"49b8f5d9": "tokensDuringPhaseOne()", +"49b90557": "isAuditor(address)", +"49b9734d": "changeMainEndTime(uint256)", +"49b9a2d0": "address_to_tickets(address)", +"49b9a7af": "lastPriceUpdateTime()", +"49ba5a48": "checkSavedEthBalance(address)", +"49babd2a": "initiate(address,uint256,bytes32,address)", +"49bac542": "E4RowEscrowU()", +"49bedf42": "setLookup(address)", +"49beee4f": "adjust_Transfer_nodata(bool)", +"49bf2caf": "disputeTransaction(uint256)", +"49bf66d3": "addRegistryIntoNameIndex(address)", +"49bfb061": "txFeeDenominator()", +"49bff0d7": "setPI_edit_29(string)", +"49c03373": "changeGTOAddress(address)", +"49c04f27": "WorldBitEvent(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", +"49c15bd9": "Purchase()", +"49c16cc3": "CMCLToken(uint256,string,string)", +"49c16e15": "toUint()", +"49c1ad0f": "gotoNextState()", +"49c1d54d": "trusteeAddress()", +"49c2a1a6": "createProposal(string)", +"49c3567c": "ArbaCoin(uint256,string,string)", +"49c37f8c": "main(address,address)", +"49c3a91e": "getSponsorshipsTotal(address,uint256)", +"49c462d7": "createInvite(bytes)", +"49c53b2d": "doMidnightRun()", +"49c60cc9": "MICROMINESx()", +"49c6353c": "getInvId()", +"49c71fa8": "unholdTeamTokens()", +"49c7634f": "WorldwideGiftCode()", +"49c83e86": "unlist(address,uint256)", +"49c91267": "getSeedByWinner(address)", +"49c9d17a": "updateReceivers(address[])", +"49c9dcf5": "awardRafflePrize(address,uint256)", +"49ca30ab": "receiveIndex(uint256,uint256,uint256,uint256,bool)", +"49ca7656": "changeOwnerOfMonethaUserClaimStorage(address)", +"49ca8cc9": "getEventId(address,bytes32)", +"49cacb12": "dropOwner(address)", +"49cbe338": "tryRead(uint64)", +"49cc2eb1": "Fairsale(uint256,uint256)", +"49cc635d": "receivePlayerInfo(uint256,address,bytes32,uint256)", +"49cc8513": "_geneOfCrab(uint256)", +"49cc954b": "twoYearsPassed()", +"49cd4554": "afterIco(uint256)", +"49ce0a11": "hexToken()", +"49ce5804": "setSectorOwnerCut(uint256)", +"49cf211e": "storenumber()", +"49cf2eae": "certifierAddress()", +"49cf5f1b": "DSProxy(address)", +"49d0cd85": "functionSignatures()", +"49d10b64": "updateRegistry()", +"49d246e5": "getBetBasic()", +"49d24ae8": "withdrawAdmin(uint40)", +"49d2ca11": "Election(address,address,address,address,address)", +"49d3060f": "selectWinner50()", +"49d45693": "changeminprivatesale(uint256)", +"49d463e6": "sendBoard(bytes10,uint256,uint8,bytes32,bytes32)", +"49d4a344": "right99(uint256)", +"49d55d9d": "receiveTransfer(uint256)", +"49d596fe": "FSM()", +"49d689f4": "setJackpotAddress(address,address)", +"49d7e0b3": "mutiTransferFrom(address,address[],uint256[])", +"49d800a1": "ReleaseableToken(uint256,uint256,uint256)", +"49d834cd": "TSTEST()", +"49d8ef13": "ETHERFUNDME_ONLINE_FEE()", +"49d94871": "bonusRates(address)", +"49d94c83": "CappedCrowdsale(uint256)", +"49da847b": "iPay()", +"49daca7a": "tradeAddress()", +"49dbdf30": "initializeRefund()", +"49dc2b83": "miningFinished()", +"49dc5376": "getTokensBack(uint256)", +"49dc8fab": "Menu06(address,address,uint256)", +"49dcbc5e": "sendEth(address,uint256)", +"49dcd756": "getCurrentEthCapPerAddress()", +"49dd0fe3": "minechain()", +"49dd1262": "updatePrices()", +"49dd2880": "Gold(address,uint256)", +"49de0485": "addContributorManually(address,uint256,uint256)", +"49de3995": "EthlanceMessage(address)", +"49df7208": "addMember(address,bytes32)", +"49df728c": "withdrawTokens(address)", +"49e09da6": "genesisTransfer(address,uint256)", +"49e0cf2a": "createComunity(bytes32,bytes32)", +"49e0dada": "level_4_percent()", +"49e123c8": "monsterHealth()", +"49e1432c": "donateToPot()", +"49e1c2b7": "ATMToken()", +"49e284d1": "ZoologicalGarden()", +"49e347ae": "getContents(uint256[],uint256)", +"49e3ec5e": "setMediator(address)", +"49e4347b": "completeICO()", +"49e44f44": "ManagerProxy(address,bytes32)", +"49e4b3e5": "setPermissionManager(address)", +"49e51970": "CostilNetworkToken()", +"49e588df": "refundSubmission(address,uint256)", +"49e627d2": "getPreIcoTokenHoldersAddressesCount()", +"49e65440": "setSymbol(bytes32)", +"49e67544": "TeamFund()", +"49e6c454": "getMyEntityOwner(uint256)", +"49e77c8b": "hasEnoughTokensToPurchase(address,uint8)", +"49e9449a": "presalesCap()", +"49e9cee9": "GetMaxPrestigeLevel()", +"49ea33df": "icoEndDatetime()", +"49ead9b4": "createAsset(string,uint256,uint256)", +"49eb6d6f": "NumberAddresses()", +"49ec1ff0": "setSoftwareTokensWallet(address)", +"49ec7c3f": "giveBirth(uint256,uint256,uint256,bytes)", +"49edfb94": "FEE_OWNER()", +"49edfed9": "getEtherForStakes(uint256)", +"49ee161b": "getLockPosition1(address)", +"49ee2ae1": "getAllJingles(address)", +"49ee39ba": "nullBonusMessage()", +"49ee6c50": "getNewItemId(bytes32)", +"49ee72fc": "addCountryCities(uint256,uint256[],uint256,uint256)", +"49eee1a4": "setRoundRate(uint256,uint256,uint256)", +"49ef026f": "raisedFunding()", +"49efdbbf": "purchaseShow(uint256)", +"49f00964": "founders_2()", +"49f02baf": "YondToken()", +"49f0726d": "Centhereum()", +"49f0c90d": "adminSetAccountAdministrator(address)", +"49f12aa7": "hashState(address,uint256,uint256)", +"49f16ad1": "setTransferEnabled()", +"49f194a1": "setIco(address)", +"49f1fa67": "GetLiasonName(uint256,uint256,uint256)", +"49f202ff": "getTokenIdByIndex(uint256)", +"49f209af": "testThrow_3_invalidOwner_accessRestrictionThrow()", +"49f22b4a": "biddingComponent()", +"49f27c25": "ProdEToken()", +"49f298c6": "wallock()", +"49f2a049": "registerInternal(string)", +"49f30178": "nextFinalTimeout()", +"49f307a6": "setNewPriceToItem(string,uint256,uint256)", +"49f41a42": "updateAgent(address)", +"49f4cc17": "transferAssets(address,address,uint256)", +"49f4f5da": "XLifeCoin()", +"49f6444e": "buyLuckyStone()", +"49f65ce4": "handleDividends()", +"49f73d3d": "calculateCountryCut(uint256)", +"49f7825b": "lockAddressByKYC(address)", +"49f856ea": "setERC820compatibility(bool)", +"49f9231d": "LightCoinToken()", +"49f97939": "notEqual(string,string,string)", +"49f9b0f7": "calculateSaleReturn(uint256,uint256,uint32,uint256)", +"49f9c0e4": "transferEth(uint256,address)", +"49f9e95e": "withdraw_arbitrary_token(address,uint256)", +"49f9f4d0": "burnOwnerTokens(uint256)", +"49fa84ef": "hon1ninja()", +"49fa991f": "removeAttestation(address)", +"49fb2dc5": "add_to_association(uint256,uint256,uint256)", +"49fcea4a": "Lyfecoin()", +"49fcfce7": "saleInited()", +"49fd5791": "_removeLastOwnerHoldingsFromToken(address,uint256,uint256)", +"49fd5f64": "getAllAssembly(address)", +"49fdaea6": "isBrickOwner(uint256,address,address)", +"49fe5261": "CROSAIR_PRICE_INCREMENT()", +"49ffeb8f": "recursiveCalculation()", +"4a0023cd": "findAuraComposite(uint64,uint64)", +"4a00a522": "homebase(int256,int256)", +"4a00dc38": "getAreaPrice(uint8,uint8,uint8,uint8)", +"4a013296": "canEscapeTo(uint32,uint32)", +"4a024928": "D00KIE()", +"4a03707c": "draw(address,uint256)", +"4a03e7e3": "TrinityContract(address,address,uint256)", +"4a042f0d": "joinBattle(uint256)", +"4a046d82": "usdPerEther()", +"4a0473fe": "votings_(address)", +"4a0483c5": "trustedAddressLUT(uint256)", +"4a0767cc": "setIsPreventedAddr(address,bool,bool)", +"4a084736": "updateTokenToEthOrderWHint(uint32,uint128,uint128,uint32,int256)", +"4a09d3cf": "withdrawAdvisersTokens(address,uint256)", +"4a0a7f2d": "doDistributionRange(uint256,address[],uint256[])", +"4a0af245": "startPreSale(address,uint256,uint256,uint256)", +"4a0b132a": "TIME_TO_MAKE_1_SHITCLONE()", +"4a0ba49d": "pay(address,address,address,uint256)", +"4a0bb6a4": "WeQuest()", +"4a0cd926": "addBankerAddress(address)", +"4a0d89ba": "getSwap(uint256)", +"4a0d8b53": "setHasMaxPurchaseLimit(bool)", +"4a0f0bfe": "ServiceRegistry(address)", +"4a0f3134": "FundTransfered(address,uint256)", +"4a0f5974": "left27(uint256)", +"4a122266": "getForwardPurchaseFeesTo()", +"4a12389a": "MyToken(string,string,uint8,address)", +"4a123e1d": "setLev2(uint256)", +"4a1281c6": "numTokensIssued()", +"4a1311f9": "openingManualyMining()", +"4a14e3b2": "SentAmountToOwner(uint256,address)", +"4a150e2c": "getDonationsCount(address)", +"4a15ebce": "addCbAddress(address,bytes1,address)", +"4a16673b": "shouldSelectWinner()", +"4a168859": "getAvaIcoAmount()", +"4a169e4b": "setCoinInfo(address)", +"4a173383": "determineWinner(address,uint256,bytes32)", +"4a1753a6": "setCurrentGame(address)", +"4a176017": "finalizeAdd(uint256,address)", +"4a176ba5": "getaddr(uint256)", +"4a17bbde": "getEventId()", +"4a180cb3": "removeSpecialFeeTake(uint256)", +"4a184f51": "startCrowdsale(address,address)", +"4a186d69": "buyTokenFor(address)", +"4a187785": "aaandItBurnsBurnsBurns(address,uint256)", +"4a18c25e": "EUEBToken()", +"4a197057": "GameEnded(uint256,address,uint256,uint256,uint256,uint8,uint8)", +"4a1993e4": "firstDepositDate()", +"4a1a27a8": "qtAccount()", +"4a1a342b": "getOrderMoneyEscrowed(bytes32)", +"4a1a3ded": "createNewTask(uint256,uint256)", +"4a1a650d": "RecordNum()", +"4a1a89f1": "PHXTKNADDR()", +"4a1aa767": "claim_victory(uint256,uint8,uint8,uint8)", +"4a1ad538": "checkTransferMultipleDelegated(address,address[],uint256[],uint256,uint256,bytes)", +"4a1b13f0": "setPoliceTimeoutInBlocks(uint256)", +"4a1b504f": "distributeBonus(address[])", +"4a1b98b2": "exchangeUnderwrite(address,uint256)", +"4a1ba4ba": "Multibot()", +"4a1c13cd": "setIcoStartDate(uint256)", +"4a1c6549": "ETHBITA()", +"4a1d08af": "drawRandomItemWinner()", +"4a1df335": "addressCEO()", +"4a1e004c": "blockedTimeForInvestedTokens()", +"4a1f05f0": "setSaleImg(uint256,bool,address,uint256)", +"4a1f0bf6": "inheritToNextGeneration(address)", +"4a1f11a7": "MT()", +"4a1fb241": "fttIssued()", +"4a1fe393": "withdrawEther(uint32)", +"4a208c38": "setIV_R2(uint256)", +"4a21f8f7": "joinToPool(uint256,uint256)", +"4a2228f7": "_reducemoney(address,uint256)", +"4a222b74": "ecoLock23()", +"4a22c7fb": "tokens_rewards_allocated()", +"4a23418a": "foundersTokensWallet()", +"4a2388ff": "setAllowedForMinting(address,address)", +"4a23dc52": "FileStore()", +"4a2479c0": "initialOwnersShares()", +"4a24edd6": "startSale(uint256,uint256,uint256,uint256)", +"4a24f6d9": "getVendorApplicationScoringTrackCount(string)", +"4a254431": "MappingProposalIssued(address,address,uint256)", +"4a25780b": "RedRibbonCoin()", +"4a25b2fd": "deductCoin(address,uint256)", +"4a26410b": "SetGenesisBuyPrice(uint256)", +"4a268f52": "ExchBtcToken()", +"4a26920b": "sendTokens(address,address,address[],uint256[])", +"4a2697fc": "balanceOfIssuer()", +"4a272bff": "GetHoga(address,uint32,bool)", +"4a275a1e": "Blockdrop(address)", +"4a280a55": "transferFrom(address,address,address,uint256,bytes)", +"4a2929ee": "betLockTime()", +"4a2951d2": "AsianCapitalChain(uint256,string,uint8,string)", +"4a2a197e": "addBonus(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4a2a4ebc": "countries(uint8)", +"4a2b0c38": "DividendProfit()", +"4a2b22f9": "GameBase()", +"4a2b5235": "_addWhitelistAdmin(address)", +"4a2c3204": "getUserFLCEarned(address,address)", +"4a2cd48f": "getPreviousDate(bytes10)", +"4a2d5b6b": "getReleaseRatios(address)", +"4a2db4d8": "GetWinCards()", +"4a2dfbb4": "artWorkChangeRequest(uint256,string,uint8,bytes32,bytes32)", +"4a2e7752": "hashBid(address,uint256,address,address,address,uint256,uint256)", +"4a2ee75f": "addArticle(bytes,bool)", +"4a2f2333": "BitcoinMobile()", +"4a2f37a6": "updateItemTraits(uint256,uint256)", +"4a2fb1e4": "_mentors()", +"4a2fed3d": "test_SixtyPercentRules()", +"4a2ff078": "getRateFor(string)", +"4a303d30": "optAddressIntoHolding(address,uint256)", +"4a30f976": "censorship(uint256,bool,bool)", +"4a31259f": "totalNtsSoldWithBonus()", +"4a31dee2": "setTokenIdByIndex(uint256,uint256)", +"4a3270d7": "bytesStorage(bytes32)", +"4a330319": "tokensaleEndTime()", +"4a3310b8": "hasConfirmed(bytes32,address,address)", +"4a334c1c": "closePlacingPhase()", +"4a348da9": "getProductCount()", +"4a35035a": "dropNumber()", +"4a3573f1": "assignReservedTokens(address,uint8,uint256)", +"4a35d3ba": "SetBuildingSale(uint256,uint256,uint256,uint256)", +"4a35db7c": "restartValidation()", +"4a363fbc": "testNetworkDeployment()", +"4a366c46": "Th0m4z()", +"4a367140": "FoundersContract(address)", +"4a367827": "mintingStopDate()", +"4a367c68": "PrivateSaleStartTime()", +"4a367d73": "UpgradeMaster()", +"4a36870a": "firstRewardPeriodPercent()", +"4a36df25": "setMigrateContract(address)", +"4a375bc4": "FlagUint(uint256)", +"4a376c97": "OpenToThePublic()", +"4a37b5f7": "MyWill(address,string,string,string,address)", +"4a382c36": "freezeAccount(address,bool,uint256)", +"4a387bef": "removeLock(address)", +"4a393149": "onTransfer(address,address,uint256)", +"4a398c11": "SWIFTStandardToken(uint256,string,uint8,string)", +"4a39a5f4": "ALC_DECIMALSFACTOR()", +"4a3a835c": "withdrawAfterEnd()", +"4a3a87e2": "CreateProxyWithControllerAndRecoveryKey(address,address,uint256,uint256)", +"4a3a92f6": "minusFreezingTime(uint256,uint64)", +"4a3b0eec": "authorizeOpen(uint256,bool,string)", +"4a3b68cc": "referrers(address)", +"4a3bd672": "time1()", +"4a3bf377": "totalVotesFor(string)", +"4a3c4375": "getAllConsentTemplates()", +"4a3cdf21": "m_ETHPriceLastUpdate()", +"4a3d239c": "weiWithdrawed()", +"4a3d3510": "updateVotesOnTransfer(address,address)", +"4a3d3c09": "castleMinBrick()", +"4a3d5ec9": "ProofImpl(address)", +"4a3d72a1": "balancesContract()", +"4a3db7e7": "_generate(uint256,address)", +"4a3e2b21": "unpaid(bytes12)", +"4a3e4f90": "scamFlags(address)", +"4a3e8078": "emissionAddressUpdate(address)", +"4a3f17e7": "hodlers(address)", +"4a40e85b": "setMAYExchangeRate(uint256)", +"4a411f5a": "EventLuckyNumberRequested(address,uint256,uint256,uint8,address)", +"4a418b95": "logFlush(address,address,address,uint256)", +"4a418fb7": "numOfTransferableCompanysTokens()", +"4a41d1ac": "verify(address,bytes)", +"4a41d6f5": "_clearAllApproval()", +"4a41e045": "getUint8(int8)", +"4a420138": "scheduleHeartbeat()", +"4a4226a5": "TeamHeadsChoice(address)", +"4a42a397": "TakeSellOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"4a42d99b": "donGameGiftLineTime()", +"4a432a46": "updatePrice(string,uint256)", +"4a443471": "_money()", +"4a44664b": "withdrawVPCxTokens(address)", +"4a44bdb8": "getBlock(uint256,uint256)", +"4a4507ff": "testInitialBalance()", +"4a45b60b": "unregister(address,address)", +"4a45beed": "Accept(bytes32,string)", +"4a45d2e6": "setParam(uint256)", +"4a4666c1": "addAuthorizer(address)", +"4a4753bc": "BonusesDistributed()", +"4a48314f": "hodlerTime3M()", +"4a49ac4c": "removeFromBlackList(address)", +"4a4a2569": "getAudCentWeiPrice()", +"4a4a26d7": "EnChangToken()", +"4a4a2a97": "performReentrancyAttack()", +"4a4a2b52": "unfreezeAdministrationContract()", +"4a4b4eb0": "WISDOMCOIN()", +"4a4b674a": "setPenalty(uint256)", +"4a4b7202": "PPBC_API()", +"4a4b7de6": "deedContract()", +"4a4baed7": "setTokenControlInfos()", +"4a4c1bcd": "LeviusDAO()", +"4a4c560d": "whitelistUser(address)", +"4a4c5e59": "proceedTokenDeals(uint256)", +"4a4c82c6": "_resetSpentToday()", +"4a4e3bd5": "emergencyUnpause()", +"4a4e5776": "stepDuration()", +"4a4e6f95": "addFeedOut(address,address,int256,uint256,uint256)", +"4a4e8884": "getUserAddress(bytes32)", +"4a4ede50": "transferSalesAgentPermissions(address)", +"4a4ef738": "addAddressToPrivateWhiteList(address,uint256)", +"4a4f76d5": "getInitializeEndTime()", +"4a4fbeec": "isLocked(address)", +"4a4fd24d": "addMileagePoint(address,uint256,int256)", +"4a5033eb": "Reverted()", +"4a504a94": "Confirmation(address,uint256)", +"4a50c3a7": "EtherToWei(uint256)", +"4a5163b5": "numDefinedGames()", +"4a51dcea": "TIER3_CAP()", +"4a522e4e": "winCosFromGame(uint256,uint256,string)", +"4a52a5f8": "TerraFirma()", +"4a52e506": "enableLostAndFound(address,uint256,address)", +"4a53c127": "setTargetDiscountValue7(uint256)", +"4a54315c": "registerUser(bytes32,string)", +"4a54c00d": "sendRemainingTokensBool(address)", +"4a54fb0a": "updateProduct(bytes32,string,address,uint256,uint8,uint256)", +"4a55308c": "firstSellPrice()", +"4a562d81": "returnDeed(address)", +"4a574d18": "bonusMode()", +"4a5791e0": "UnFreezeProduct(uint256)", +"4a57c032": "IcoDiscountLevelsChanged(address,uint256,uint256)", +"4a57e1c9": "finalizeTransaction(uint256)", +"4a583ec5": "confirmSettlement(uint256,uint256)", +"4a588d87": "CYB(uint256,string,string)", +"4a5891ac": "changeEternalStorageContractAddress(address)", +"4a58c409": "changeStartSale(uint256)", +"4a58cf22": "totalSupplyInWei()", +"4a58db19": "addDeposit()", +"4a5a3d76": "setETHPriceManually(uint256)", +"4a5a831b": "EthlanceConfig(address)", +"4a5baa1b": "VULCAN_POD_EXTRACTION_BASE()", +"4a5c2d6e": "Change(address,uint256,address,uint256,address)", +"4a5c8f1a": "getEarnEachBlock()", +"4a5db3b5": "authorizeAddress(address)", +"4a5dcb5b": "Candy(address,address)", +"4a5dcdc9": "RANGEEND_9()", +"4a5dddd2": "proxyPurchase(address)", +"4a5df250": "nextContributionCaps(uint256)", +"4a5e1cf3": "initLottery(uint16,uint256,uint8)", +"4a5e4fa8": "setExpReward(uint32)", +"4a5e70c0": "ObitanChainToken()", +"4a5ecc66": "Sale(address,address)", +"4a5f41b6": "checkCanInvestInternal(address,uint256)", +"4a5fca4f": "offChainTokens()", +"4a5ff749": "teamAddr()", +"4a601994": "WesTechToken()", +"4a606c53": "_db()", +"4a60751f": "refundingEndtime()", +"4a61179b": "MANHATTANPROXY11THWEAVE()", +"4a617faa": "shaBid(bytes32,uint256,bytes32)", +"4a617fba": "gooDepositDivPercent()", +"4a61f347": "resetEditionLimits(uint256)", +"4a61fc1e": "getWinners(bytes32)", +"4a6213a1": "MAKERDAO_FEED_MULTIPLIER()", +"4a624310": "getAngelInfoByTile(uint16,uint8)", +"4a627e61": "someValue()", +"4a62cc73": "auditQueueExists()", +"4a62f5eb": "_isTokenActive()", +"4a63464d": "adminClaimAirdrop(address,uint256)", +"4a635d05": "testCampaignGoalReached()", +"4a63864b": "RATE_RATIO_SCALE()", +"4a63b3d3": "lockBlock()", +"4a63f8a4": "presellTimer()", +"4a6458ae": "Rescued(address,uint256,uint256)", +"4a64c23f": "removeCbAddress(address)", +"4a661152": "get_exchange_wei()", +"4a66ddff": "twin_contract()", +"4a67fa7d": "setLotteryFee(uint256)", +"4a681b1b": "EXPECTED()", +"4a683a65": "addBTCTransaction(uint256,bytes16,address)", +"4a68492c": "setTransferAgentStatus(address,bool)", +"4a6a225e": "proxyPayment(address,bytes4,bytes)", +"4a6aac33": "DATE_31_DEC_2020()", +"4a6b0b05": "NewArtwork(address,bytes32,uint256,string,string,uint256,address,bool,bool)", +"4a6b8cf6": "setPretgeAddress(address)", +"4a6b9473": "registerActionEvent(bytes32)", +"4a6bb4a5": "updateWallet(address,address)", +"4a6bfa2d": "salesActive()", +"4a6c121d": "uintToBytes32(uint256,uint256)", +"4a6cfca7": "getAccessory(uint256,uint256)", +"4a6d0292": "addSale(address)", +"4a6de5c3": "_getAvailableBalance()", +"4a6e2ffe": "calculateReferral(uint8)", +"4a6f2691": "setBoolF1(bool)", +"4a7004b9": "getTotalTokenDepositByAddress(address)", +"4a700545": "PrivateSaleAddress()", +"4a701fc3": "setownerInfo(address,bytes32,bytes32,bytes32)", +"4a7084bb": "setPublicOfferDate(uint256,uint256,uint256)", +"4a714378": "toggleVending(uint256,uint256)", +"4a714c24": "payers(address)", +"4a7160a2": "addSet(bytes32)", +"4a716adf": "transferVotes(uint256,address)", +"4a719a27": "getTargetRepMarketCapInAttoeth()", +"4a71a768": "setWeiCapPerAddress(uint256)", +"4a71d469": "collectRev()", +"4a720287": "setEarlyEndTime(uint256)", +"4a729fe1": "pay(address,bytes12)", +"4a733ded": "paybackContribution(uint256)", +"4a738bea": "withdrawWithFee(address,uint256,bytes32,address,uint256,bool)", +"4a74ca99": "disconnectOrderPrice(address,address,uint256,uint256)", +"4a751072": "rateBoundaries(uint256)", +"4a7510fc": "StealResources(uint256)", +"4a75c0ff": "StoreDocument(bytes32,string,string)", +"4a75e6c3": "servicePayment(address,uint256)", +"4a75e741": "add_owner(address)", +"4a765625": "AliParsafar()", +"4a76564e": "tokenReleased()", +"4a76869f": "commitOrder(string)", +"4a768eaa": "buytoken(address,uint256)", +"4a7759f8": "BALL()", +"4a776104": "canFinishPVP()", +"4a77f870": "migrateAll()", +"4a78a594": "getClaim(string,string,address,uint256)", +"4a78cdba": "jackPot()", +"4a7902d2": "changeRoot(address)", +"4a790540": "getPastWinnerPrizes()", +"4a793c0c": "cidTotalTokenSupply()", +"4a797494": "priceRound3()", +"4a7987a2": "setProvider(bytes32,address)", +"4a79d50c": "title()", +"4a7b1acc": "MapDemo()", +"4a7b26ec": "join_game(uint256)", +"4a7b7ec3": "mintMarketMakerCancel(address,address)", +"4a7b8f21": "addHarvestOperationEndorsement(string,bool,string,string)", +"4a7bb697": "AssignGGCPoolOwner(address)", +"4a7c7e46": "uintToAscii(uint256)", +"4a7cb0f5": "FoundationRequested(address,address,bytes32)", +"4a7d505c": "initBetType()", +"4a7d5899": "payOut(address[])", +"4a7d8bcc": "getCurrentTokenPricepreICO(uint256)", +"4a7d9f0f": "getSettlementPeriodEnd()", +"4a7dd523": "generate(uint256)", +"4a7de068": "finalizeSetDelegatedFrom()", +"4a7e00de": "rejectCompanyAllocation(address)", +"4a7e049e": "getFullCompany(address,uint256)", +"4a7e130e": "remainTime()", +"4a7ffcbc": "daoContract()", +"4a800b98": "cancelChampSale(uint256)", +"4a803387": "insert(uint256,uint256,uint256)", +"4a8075ac": "SaleAuction(address)", +"4a80dcab": "getProjectMilestonesCount(bytes32)", +"4a80f2ba": "registerKey(string)", +"4a812023": "logUniverseForked()", +"4a81db9a": "moneybackaddr()", +"4a81dc0f": "forceUpdatePrizes(uint256[])", +"4a82534b": "create(address,address,address,uint256,uint8,uint8,uint256)", +"4a825c68": "checkRoundEnd()", +"4a826823": "setCastle(uint64,uint64,uint64,uint64,uint64,uint64)", +"4a82804e": "setNewMessage(string)", +"4a8302a2": "SynixToken(uint256,string,uint8,string)", +"4a8305b4": "newCoinOwner(address)", +"4a838caf": "ethfortnite()", +"4a83cfa9": "burnMedal(uint256)", +"4a84fa81": "checkRokSold()", +"4a85223b": "addUser(address,string,string,int256,string)", +"4a85280e": "isAuthorizedAddress(address)", +"4a85512f": "awardInvation(bytes32)", +"4a85d0d5": "HeliumNetwork()", +"4a85dbcd": "setVal(string,uint256)", +"4a8646c3": "HomeLoansToken(uint256,string,uint256,string)", +"4a8671f1": "newWallet()", +"4a867488": "setVestingPercent(uint256)", +"4a87b419": "cancelApproveFee()", +"4a87e08a": "BUY_CITY_FEE()", +"4a881ac6": "addAddressDescription(string,address)", +"4a88eb89": "altDeposits()", +"4a88f9c7": "exFees(uint256)", +"4a891e7f": "FinalizeMove(address,string,string)", +"4a896384": "ask()", +"4a8967a6": "_today()", +"4a8a6eac": "CarRegistered(uint256)", +"4a8a83db": "calculateVestedTokensTime(uint256,uint256,uint256,uint256,uint256)", +"4a8b2b27": "testOne()", +"4a8b5389": "allocateBountyAndEcosystemTokens()", +"4a8beaf4": "decline(string)", +"4a8c1fb4": "isActivated()", +"4a8c2d64": "TopsXToken(uint256,string,uint8,string)", +"4a8c3129": "MultiOwners()", +"4a8cbae1": "charityPercent()", +"4a8e4d78": "getDuesIn(uint256)", +"4a8e5651": "resultAccept()", +"4a8ef4bd": "setOrderBookAcount(address)", +"4a8ef851": "pushTicketSetToAccount(uint256,uint256)", +"4a909d5f": "transferWithLockup(address,uint256,uint256)", +"4a910046": "getLastHash()", +"4a914e8c": "calculateTotalExpenseWithdrawableAmount()", +"4a915ea2": "votedHarvest()", +"4a91e536": "getWinnerDetails(uint256)", +"4a91ec80": "prospectors_dev_allocation()", +"4a91ee2a": "allowByPassword(bytes8,bytes)", +"4a91f195": "totalBought()", +"4a923199": "maximumTNB()", +"4a92fa06": "createPromoRide(address,string,bytes7,uint256)", +"4a92fb3a": "proxyTransfer(address,address,uint256)", +"4a943eb3": "numsuccesses()", +"4a945f8d": "setAddresses(address,address,address,address)", +"4a947bdb": "putMatingRequest(uint256,uint256)", +"4a950db6": "tradetxToken()", +"4a950f00": "TurkeyBurgerToken(uint256)", +"4a955659": "_getNewLotteryCreatedAt()", +"4a96712e": "confirm(bytes32,address,uint256,uint8,bytes32,bytes32)", +"4a96d129": "OfferTime()", +"4a975d6b": "allocateRestrictedTokenTo(bytes32,bytes32,bytes32,uint256)", +"4a980b49": "IRideToken()", +"4a98146a": "VILLAGE_START_PRICE()", +"4a994d22": "_getReleaseDate(uint256)", +"4a994eef": "setDelegate(address,bool)", +"4a9952c7": "setMintTokenOwner(int256,address,address)", +"4a9a6f15": "getFromFaucet(string)", +"4a9b3f95": "personUpdateName(uint256,string)", +"4a9b5c2e": "CREATOR_TOKEN_END()", +"4a9bdb65": "byuoutCount()", +"4a9cdfad": "setPlayerLAff(uint256,uint256)", +"4a9d367b": "RecipientChanged(address,address)", +"4a9d9172": "test_testableStandardCampaignAbsolvementAfterPayout()", +"4a9f0110": "setSellDailyLimit(uint256,bytes2,uint256)", +"4a9f6d4a": "setMaxPreCrowdAllocationPerInvestor(uint256)", +"4a9fefc7": "getReferrer(address)", +"4aa16737": "enter(uint8)", +"4aa1acb3": "withdrawEth(uint256,bytes)", +"4aa1d21b": "transferDryRun(address,address,uint256,uint256)", +"4aa1dde4": "isDisclosureFullySigned(uint256)", +"4aa2f0f5": "HKD_Omnidollar()", +"4aa3fcd3": "_getSkillConfigs()", +"4aa41e53": "minFinneyPerHedgeTransfer()", +"4aa47a50": "isIntermediateVault()", +"4aa4ba9b": "storeBatch(string)", +"4aa5a05d": "maxP1Cap()", +"4aa5b398": "voteCurrentResult()", +"4aa669d8": "Buy_Wall_level_in_wei()", +"4aa66b28": "getBonus(uint256)", +"4aa678c3": "getMyUnlockValue()", +"4aa6c09a": "setTargetDiscountValue3(uint256)", +"4aa735c0": "BST()", +"4aa74c27": "_emitFuture(bytes32,uint256,uint256,uint256)", +"4aa77c71": "Visualrocktoken()", +"4aa83079": "setSaleContractFinalised(address)", +"4aa880c1": "SetFactoryParams(bool,bool,uint256)", +"4aa8e57e": "buyBox1()", +"4aa8e773": "Cancel()", +"4aab421d": "tgrAmountCollected()", +"4aab8c14": "setPonzi(uint8,uint256)", +"4aabcec7": "SimpleWallet()", +"4aac390a": "hasLanguage(address,address,uint256)", +"4aac75a7": "setMainSaleDates(uint256,uint256)", +"4aaca86d": "saleStage()", +"4aacd437": "freezeAccountPartialy(address,uint256)", +"4aaceed3": "icoBonus2()", +"4aada45f": "KittensDroped(uint256,uint256)", +"4aae385f": "preSaleFirstStartDate()", +"4aaf4a12": "getOwner(string)", +"4aaf6b86": "contract_state()", +"4ab0c0ee": "testConcatMemory32Bytes()", +"4ab0fc08": "setDefaultURIEnd(string)", +"4ab1c98f": "requestControllerContractMigration(address)", +"4ab24cf3": "pornToken()", +"4ab273f0": "SellEggs()", +"4ab320b4": "viewSettingsChange(uint256)", +"4ab358c7": "recoverFunds(uint256)", +"4ab3bbdc": "_brokerFeeDistribute(uint256,uint256,uint256,uint256)", +"4ab3bc23": "getSelfCardDatas()", +"4ab3d487": "newEntry(uint256)", +"4ab40ac6": "allOpenTradesAmounts()", +"4ab5439b": "TEAM_POOL_ADDR()", +"4ab54530": "inPreSale1Period()", +"4ab5cc82": "latestValue()", +"4ab6d337": "getContributorsLength()", +"4ab74a1e": "tok()", +"4ab7508a": "multiWallet()", +"4ab788cb": "prebridge()", +"4ab798f1": "toggleTransfer()", +"4ab7cbfe": "getMinerHalvingHashRateOf(address)", +"4ab89400": "cancelRefund(address)", +"4ab9792d": "setTokenFrom(address)", +"4aba5f34": "getCandidatesList()", +"4aba76a3": "ESlotsToken()", +"4aba7f96": "setMixGenAddress(address,address)", +"4abad407": "startCrowdfund(uint256)", +"4abb525a": "moonIncContract()", +"4abb9d39": "depletable()", +"4abc8652": "inPrivateSalePeriod()", +"4abd89bd": "MDICOStage2(address,address,uint256,uint256,uint256,uint256)", +"4abd8e01": "putStcWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"4abd8f65": "updateEnabled()", +"4abdf2e0": "setWithdrawLimit(uint256)", +"4abe1a62": "settleEtherPolicy(address[],uint256[],uint256[],uint256[])", +"4abe34f2": "TecToken(string,string,uint8,uint256)", +"4abefa36": "getEmployees()", +"4abfacfd": "createTeam(string,string,uint32,uint32,uint256)", +"4abfbbe3": "getBlockInfo(uint8,uint8)", +"4ac0b6b0": "preparePaymentReferrer(address,uint256)", +"4ac0d66e": "newGreeting(string)", +"4ac1ad78": "getWeekday(uint256)", +"4ac1b5ff": "GoldmintUnsold(address,address)", +"4ac25224": "isChannelOpen()", +"4ac2d103": "miningReward()", +"4ac36201": "Yachtco()", +"4ac365c2": "DividendTransfered(uint256,address,uint256,uint256,uint256)", +"4ac38f13": "BlupassToken()", +"4ac39f37": "unsafeIsSigned(uint16)", +"4ac429f2": "ConstantinopleCheckFunction()", +"4ac54245": "_fulfill(bytes32)", +"4ac5aae5": "getTotalBonus()", +"4ac5dea9": "getRoundPointer(uint256,uint256)", +"4ac6b2be": "getCheckRecordCreator(bytes)", +"4ac6d5f4": "frostTokens()", +"4ac79795": "removeLogic(address)", +"4ac7becf": "SimpleSign()", +"4ac84218": "RequiredFeeNotMet(uint256,uint256)", +"4ac84242": "CWT(uint256,string,string)", +"4ac87af7": "frozenToken(uint256,string)", +"4ac87e47": "Bittwatt(uint256)", +"4ac8a529": "createDispute(uint256)", +"4ac9f0d7": "behalfer()", +"4ac9f881": "takeSellOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"4ac9fc37": "updateConvertionRate(uint256)", +"4acb17c8": "getPeggedTokenAddress(address,address,uint256)", +"4acb232b": "percentWeiMC()", +"4acb3e59": "QCOToken(address,address,address,address,address)", +"4acc50eb": "Invoked(address,address,bool,uint256)", +"4acceeea": "togglePrebrdige()", +"4acd058e": "auctionBonus(uint256)", +"4acd44db": "offChainManager()", +"4acd4d5c": "mintLockCashout(address,uint256)", +"4acdc150": "setupCrowdsale(uint256)", +"4acdd29a": "statusPred(address,uint256[],uint256)", +"4acddfa0": "register(address,string,uint256,string,string,string,bytes20)", +"4ace9ccc": "ratePlansOfVendor(uint256,uint256,uint256)", +"4acea254": "inviteAmountLimit()", +"4acefeb1": "ethartArtAwarded()", +"4acf071c": "setStepTwoTime(uint256,uint256)", +"4acf4a27": "withdraw(uint128,address,uint256,uint128)", +"4acf8867": "PillarToken(address,address)", +"4ad07b0e": "oracleOutcomes(bytes32,address)", +"4ad0a529": "currentMigrationTarget()", +"4ad1cbad": "withdrawTeamTokens(address,uint256)", +"4ad25557": "getMonsterNum(uint256)", +"4ad27ae1": "claimInternal(address,address)", +"4ad32970": "setUserAllocs(address[],uint256,uint256)", +"4ad37241": "destroyCard(uint256,uint16)", +"4ad37538": "DJPToken()", +"4ad42500": "ico26()", +"4ad447ba": "PutinCoin()", +"4ad4fa5d": "ERC223()", +"4ad59c54": "overpays(address)", +"4ad5a68c": "returnIdImage(uint32)", +"4ad5f440": "totalIcoTokensSold()", +"4ad6e648": "fightFactor()", +"4ad6f9f3": "checkTx(string)", +"4ad7799f": "VestingReleased(address,uint256)", +"4ad857a1": "etherSent(uint256)", +"4ad88363": "reset_application(address)", +"4ad8c869": "reCommentReward()", +"4ad8c938": "createSiringAuction(uint256,uint256,uint256,uint256)", +"4ad9b1c3": "addWallets(address[])", +"4ad9d7ab": "getGoldStatusRegistered(address)", +"4ada218b": "tradingEnabled()", +"4ada3b32": "approvedAccount(address,bool)", +"4adaedef": "send_allowed()", +"4adaf5f6": "changeFundOwner(address)", +"4adaf748": "eBlockPower()", +"4adbe551": "whitelistAdmin()", +"4adc0b09": "setMembershipPrice(uint8,uint256)", +"4adcbd19": "isThisHardforkedVersion()", +"4adf6591": "setReportTimestamp(uint256)", +"4ae00041": "call(address,bytes,uint256)", +"4ae0ac60": "FobsCoin()", +"4ae0f543": "publicAllocation()", +"4ae12e9f": "FHFToken()", +"4ae184f2": "createStandingOrder(address,uint256,uint256,uint256,string)", +"4ae2b849": "PHASE_DURATION()", +"4ae2c351": "createCrowdsaleTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", +"4ae3164d": "getNewGens(address,uint256)", +"4ae34a96": "changelp16(address)", +"4ae34bb1": "EfectiveToken()", +"4ae3643f": "phase_4_token_price()", +"4ae4dd6b": "KeyRewardPool(uint256,address,address)", +"4ae4e9ea": "m_currentTokensSold()", +"4ae51a9a": "transferDevTokens(address)", +"4ae55dd0": "amendedEarlyPurchaseIndexes()", +"4ae5d478": "setNodesVars(address)", +"4ae5eecb": "getUserP3DDivEarnings(address)", +"4ae6ab70": "_getRevisionTimestamp(bytes20,uint256)", +"4ae85627": "grindUnicorns(uint256)", +"4ae86038": "MultiBonusCrowdsale()", +"4ae8c55f": "getWwLength()", +"4ae8ef06": "setLastTier(uint16)", +"4ae8f9fb": "FSCP()", +"4ae90a40": "isNotaryAdditionValid(address,address,uint256,uint256,string,bytes)", +"4ae931cc": "setPresellUpToTime(uint256)", +"4ae96e77": "setTransformTarget(uint256)", +"4ae9af61": "getBotStats(uint256,uint256)", +"4aea0aec": "lendFee()", +"4aea5f0f": "Artcoin(address,uint256,uint256)", +"4aea7aa9": "SetIDChain(address,address)", +"4aeb0241": "LisaToken()", +"4aeba1a5": "removeCustomerService(address)", +"4aec4677": "migrateLosingTokens()", +"4aec6416": "removeTransferAndCallWhitelist(address)", +"4aecf91d": "_emitContractRemoved(address,address)", +"4aed8a76": "inPreSalePeriod()", +"4aeda70d": "changeAuctionContract(address)", +"4aeddad0": "ConvertBkp(uint256)", +"4aef05a5": "addSongWriter(string,uint256,address)", +"4aef8b7c": "_isOddFlag(uint256)", +"4aefc3c4": "ContributionStateChanged(address,uint8)", +"4af0700b": "isUniqueBlindedProposal(uint256,bytes32)", +"4af153a9": "_message(uint256)", +"4af165cb": "EPause(address,string)", +"4af1b8a7": "pullAddr()", +"4af1f96a": "getActiveSellSize(bytes32)", +"4af27ba2": "_redeem(address,address,uint256,bytes,bytes)", +"4af3182a": "move_x(uint8,uint8)", +"4af350eb": "transferTokens(address,uint256,address)", +"4af4a127": "bonusPeriod()", +"4af4c191": "TIER4_RATE()", +"4af54311": "burnSomeTokens(uint256)", +"4af56cb0": "getUseRegistry()", +"4af69189": "sponsoredJackpotToken()", +"4af6ffc2": "attest(uint256)", +"4af79ba2": "getChallengesForMentor(address)", +"4af7eedf": "VID(uint256,string,uint8,string)", +"4af80f0e": "setConversionWhitelist(address)", +"4af98f1b": "setFeeDivider(uint256)", +"4afb07c4": "getAccountActivity(address)", +"4afb09c2": "listDTH()", +"4afbac9c": "removeFromTokenList(address,uint256)", +"4afbb7d7": "getDepositary_function()", +"4afc0476": "RedPillCoin()", +"4afc7774": "_is()", +"4afce471": "test_requires_depth(uint16)", +"4afd74ff": "getRefunded(address)", +"4afd8a19": "getLendingInfo(address,uint256)", +"4afd8a98": "testEthIcoToken()", +"4afdcbde": "pauseOperator()", +"4afe2f80": "setRate(uint8)", +"4afe62b5": "placeBet(uint256,uint256)", +"4affb863": "isPartner(address,address)", +"4b00ebfb": "CheckExecution(string)", +"4b013f85": "_addVestor(address,uint256,uint256,uint256,bool)", +"4b023cf8": "setFeeAccount(address)", +"4b02e328": "IncorrectFee(address,uint256)", +"4b0304ab": "DonationReceived(address,uint256,uint256)", +"4b031397": "killAdminOnly()", +"4b031d0f": "shortSellShares(bytes,uint8,uint256,uint256)", +"4b03a15e": "_terminateSchedule(address)", +"4b042c0b": "specialsInfo(uint256)", +"4b05de75": "seventhTeamWithdrawal()", +"4b0697e4": "Manager(address)", +"4b06e1c7": "declareWininingFighter(address)", +"4b06fb28": "eatUnicornsAlive()", +"4b0720a7": "customGasPrice()", +"4b079fa6": "ownerof()", +"4b084d49": "checkEnd()", +"4b089b12": "withdrawManagerBonus()", +"4b09b72a": "reserveAmount()", +"4b09ebb2": "e_exp(uint256)", +"4b0a0d04": "checkRequestSignature(bytes,address[],uint256,bytes)", +"4b0ad8fa": "getStakedShop(address)", +"4b0adf6c": "MintingAgentChanged(address,bool)", +"4b0babdd": "releaseTokens(uint256)", +"4b0bbf84": "addEntropy()", +"4b0bddd2": "setAdmin(address,bool)", +"4b0c79aa": "turnOnOraclize()", +"4b0d5417": "disableSellToken()", +"4b0daadb": "getStaticArray()", +"4b0df486": "assertEq23(bytes23,bytes23)", +"4b0e2c90": "enableInternalLock()", +"4b0e5044": "HoldToken(address)", +"4b0e7216": "setBurnAddress(address)", +"4b0ee02a": "totalBalanceOf(address)", +"4b0f43fd": "canExecute(address,uint256)", +"4b106893": "inactive_withdraw(address)", +"4b11281e": "returnCreatorAddress(bytes32,uint8,bytes32[2])", +"4b11452c": "changeFoundationAddress(address)", +"4b114691": "playerInfo(address)", +"4b1146ca": "TOKEN_SUPPLY_BOUNTY_LIMIT()", +"4b11982e": "setCooldown(uint64)", +"4b11e7a0": "getVotingStart()", +"4b12416c": "setHeroTokenContract(address)", +"4b12dd39": "BTSCoin()", +"4b1325ea": "setNewOwnersCountToApprove(uint256)", +"4b143bb5": "harapan()", +"4b14e003": "transferAll(address,address)", +"4b16304f": "setTokenAddress(address,bytes)", +"4b1700df": "TokenListingManager()", +"4b1740ad": "tier3()", +"4b17bdd8": "transferTokensFrom(address,address,address,uint256)", +"4b18be1d": "moveLeftOvertokensToartistPool()", +"4b19eb09": "isStatePublic()", +"4b1a5773": "createSwapTarget(bytes20,address,address,uint256,address)", +"4b1be424": "getVotesBetweenFor(uint256,uint256,uint256,address)", +"4b1c5597": "dissolveFund()", +"4b1c8506": "bonusesList(uint256)", +"4b1cab4e": "calculateEthToToken(uint256,uint256)", +"4b1cdc2d": "token6DivsOwing(address)", +"4b1cff0b": "pot_()", +"4b1d00ee": "releasedCount()", +"4b1d29b4": "maxLockPeriod()", +"4b1dc225": "founderWithdrawablePhase3()", +"4b1dd21a": "getWhitelistLimit(address)", +"4b1dd591": "firstDiscountCap()", +"4b1ebc5a": "perpetuum()", +"4b1ec20c": "setPropertyPrivateMode(uint16,bool)", +"4b1ef6e1": "getMyRecord(address,uint256)", +"4b1f15d1": "updateDragonPrice(uint256)", +"4b1fb6d4": "removeNacFromNetf(uint256)", +"4b1fe17e": "ENSResolver(address)", +"4b200fac": "ClearCoin()", +"4b20ae39": "create(address,address,address,uint256,uint256,uint256,uint256)", +"4b21433a": "CoolICOToken()", +"4b21a587": "sellerfeeDivide()", +"4b21aaae": "getBondPrice(uint256)", +"4b2233df": "buyTokenSub(uint256,address)", +"4b227176": "pID_()", +"4b236401": "claimPlot(uint256,uint256)", +"4b242252": "levelByToken(uint256)", +"4b24ea47": "controllerAddress()", +"4b24f3a6": "setJackpotFee(uint256)", +"4b24f7aa": "CSpacesToken()", +"4b24fd0d": "getKeyType(address)", +"4b256137": "lockingContract()", +"4b259b5c": "getCumulativeAllowance()", +"4b25bfce": "whitelist(uint256,address)", +"4b269a00": "withdraw(int256[])", +"4b2702b3": "TokenSwitch(address,address,bool)", +"4b272c4a": "Greenbit()", +"4b274458": "getUncleAmount(uint256)", +"4b27a2ca": "fechVoteMainInfoForVoterBySnapshotBlock(address,uint256)", +"4b28a674": "organizer2()", +"4b28bdc2": "allRevealed()", +"4b2930d0": "IsICOrunning()", +"4b29c448": "setGoal(uint256)", +"4b2a12da": "changeMinDeposit(uint256)", +"4b2a4e18": "TradersWallet()", +"4b2a649c": "ECRecoverWrapper(string,uint8,bytes32,bytes32)", +"4b2ac3fa": "swapID(bytes32,uint256)", +"4b2acaa0": "openGateway()", +"4b2ba0dd": "originalSupply()", +"4b2be022": "BinaxToken()", +"4b2c0706": "getPeriod(uint256)", +"4b2c2596": "MerchantDealsHistory(string)", +"4b2c89d5": "redeemDeposits()", +"4b2cbc9d": "etherCollected()", +"4b2d5164": "transfer_tokens_after_ICO(address[],uint256)", +"4b2f249a": "isTileLive(uint16,uint8)", +"4b2f9eb7": "declareNewMaster(address)", +"4b313043": "preIcoMaxLasts()", +"4b314b34": "LogPause()", +"4b319713": "totalWithdrawn()", +"4b321502": "addHours(uint256,uint256)", +"4b331ca0": "getCitation(uint256)", +"4b33eac2": "updateTicketStructure(uint256,bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"4b341aed": "totalStakedFor(address)", +"4b3544d5": "Jakov()", +"4b35ae33": "setTimeLimited(uint256)", +"4b369820": "setEntry(string)", +"4b36bca9": "WagerGames()", +"4b3727fb": "SshKey()", +"4b374fbe": "BTEN()", +"4b376513": "lastBlock_v13Hash_uint256()", +"4b376e45": "BoodooToken()", +"4b37c73f": "removeFactory(address)", +"4b37cf47": "littIsCapsule(bytes32)", +"4b3881ff": "StakeDestroyed(uint256,uint256,address,bytes32)", +"4b3955a5": "tier0LOT()", +"4b396ade": "TicketMultiTear(string,string[],uint256[])", +"4b3985a4": "shareTime()", +"4b398a5c": "mainnetLocked()", +"4b3a5fa6": "saleStartFirstDayEnd()", +"4b3ab5bf": "paySubscriptionFee()", +"4b3ab9c5": "getShare(address)", +"4b3afdd2": "setEthernautsStorageContract(address)", +"4b3b1d69": "notZero(uint256)", +"4b3b548f": "preMine()", +"4b3b6168": "SetNewBigContract(address)", +"4b3c45db": "getDealDataByNumber(uint256)", +"4b3ce14d": "set_minUETsPerReturnMoreThan(uint256)", +"4b3d81b6": "initialBlockTimestamp()", +"4b3ec03a": "TEAM_ACCOUNT()", +"4b3f3987": "_updateLock(uint256,address)", +"4b419b5f": "setcardPrice(uint256,uint256)", +"4b41c74a": "Ticker()", +"4b41cb60": "withdrawPreSigned(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32)", +"4b41eb4a": "ZyryanovKubSU2018()", +"4b41f4df": "transferableTime()", +"4b42d208": "getUint8FromByte32(bytes32,uint8)", +"4b432966": "max_fortunes()", +"4b43b582": "changeAdminWallet(address)", +"4b43dc51": "testTokensAreLockedDuringSale()", +"4b449cba": "auctionEndTime()", +"4b452958": "_setStakingEpochStartBlock(uint256)", +"4b467105": "walletCommunityReserve()", +"4b467157": "stopEmergencyWithdrawal()", +"4b468b0e": "JDAnteil()", +"4b469490": "RichToken(address)", +"4b471dd0": "setWithdrawalAndReinvestmentContracts(address,address)", +"4b496444": "azatipToken()", +"4b4a456a": "ChargeFix(uint256)", +"4b4a5088": "switchCompatible20(bool)", +"4b4af4db": "allocateTeam(address,uint256)", +"4b4b6338": "MECoin(uint256)", +"4b4b87c0": "PowerCoin()", +"4b4bb75b": "DSToken(string,string)", +"4b4c01f4": "RobincoinERC20(uint256,string,string)", +"4b4c0d7c": "BONUS2()", +"4b4c2039": "_B_sendToEthertoteDevelopmentWallet()", +"4b4e23e1": "TIMESTAMP_BUCKET_SIZE()", +"4b4e38df": "GetCurrentPoolAmount()", +"4b4f8e36": "addCZRLock(address,uint256,uint256,uint256)", +"4b4f90ef": "saleIsOn()", +"4b504ecd": "logNewPlayer(address)", +"4b50c9f0": "getGameStartTime()", +"4b513e82": "RegistrantApproval(address)", +"4b5243b5": "ETGTestCoin()", +"4b52f48f": "withdrawLeft()", +"4b52f89b": "setGiftToken(address)", +"4b530090": "nextDiscountTTWTokenId1()", +"4b534c48": "unlockProjectToken()", +"4b54d131": "wipeProposedActions()", +"4b54f1fb": "S1Coin()", +"4b561a16": "getMatchInfo(uint256)", +"4b563657": "setMessages(bytes32,bytes)", +"4b56b10d": "preIco()", +"4b56cd27": "depositBoth(address,uint256)", +"4b56dcf4": "LogChangeIsPayableEnabled()", +"4b57b0be": "wethToken()", +"4b57ed55": "EnonRToken()", +"4b57fbaf": "SetMinChequeValue(uint256)", +"4b5830b4": "SENC_CONTRACT_ADDRESS()", +"4b58484d": "_createPlayer(address,address)", +"4b58bb40": "timeUntilNextRound()", +"4b58d0bb": "reserveFundAddress()", +"4b59e880": "puzzle(address,bytes32,bytes32)", +"4b5a0e65": "getWinningStageInfo()", +"4b5a726d": "getProgramInfo(uint256)", +"4b5c0234": "throwsWhenHittingHardCap()", +"4b5c4277": "log(string,string)", +"4b5c8bdf": "stakeTotal()", +"4b5dc8cb": "roundMoneyDown3SFExt(uint256)", +"4b5dcad7": "ServiceStation(address)", +"4b5e8d63": "registerInvestor()", +"4b5f297a": "hasAttribute(address,uint256)", +"4b5f2fa4": "TravelZediToken(uint256,string,uint8,string)", +"4b5f3e0a": "getDate(bytes32)", +"4b5fd350": "withdrawHeldToken(uint256,uint256,uint256,uint256)", +"4b5fea8a": "milestoneRecipients(uint256)", +"4b602673": "artworks(uint256)", +"4b603a83": "mintTokens_(address,uint256,address)", +"4b61cf17": "SWLPerEther()", +"4b623178": "removeFromPublicWhitelist(address)", +"4b627107": "setValidatorDescription(address,string)", +"4b62e0d9": "buyIns(uint256)", +"4b63036d": "holderContract()", +"4b63189c": "softcapPreSale()", +"4b63e601": "scheduleCall(address,uint256,bytes)", +"4b641f52": "coinbaseInit()", +"4b64a00f": "DiscountApplied(uint256,uint256,uint256)", +"4b64e492": "execute(address)", +"4b650d0b": "getPlayerClickCount(uint256,address)", +"4b656b41": "totalWeiRaisedDuringPhase1()", +"4b66cb7e": "teamHolder()", +"4b6753bc": "closingTime()", +"4b67f6af": "name2()", +"4b689cf0": "setCommunityAccountOwner(address)", +"4b69c3d4": "getRegistryDataVendor()", +"4b6a3334": "setEtherPrices(uint256,uint256)", +"4b6a8604": "setBiddingRate(uint256,uint256)", +"4b6a9f1d": "STORES_TO_UPGRADE_1CENTER()", +"4b6acafb": "totalDividend()", +"4b6ad918": "isCurrentUserRefAvailable()", +"4b6b2300": "updateTopicAssetClass(bytes15,string)", +"4b6bc655": "isFreeze(address,address)", +"4b6bdf1d": "poker()", +"4b6c144a": "getClaimById(string)", +"4b6dfe4e": "initialFundBalance()", +"4b6e7d78": "Data()", +"4b6ea677": "oracleURL()", +"4b6ede29": "Users()", +"4b702afa": "accountS()", +"4b70cec4": "getTime(address)", +"4b71bff3": "airdropReward()", +"4b726f61": "checkCustomer(string,string)", +"4b729aff": "buyNumber(uint256)", +"4b72bbaf": "getSirePrice(uint32)", +"4b739b61": "payByEth(uint256)", +"4b73ca04": "flipsCompleted()", +"4b741395": "requestNewMint(address,uint256)", +"4b749535": "hardCapTokens()", +"4b750334": "sellPrice()", +"4b75f046": "tokensIssuedCrowd()", +"4b75f54f": "formula()", +"4b760612": "localsCointoken(uint256,string,uint8,uint256,string,string)", +"4b763fe7": "PersistLimitChanged(uint256)", +"4b766b95": "markRewardsSet(string)", +"4b76cb13": "get_status_user(address,address)", +"4b76fe19": "EtherPredict()", +"4b778445": "addRound(uint256,uint256,uint256)", +"4b77b8d3": "stopCrowdfunding()", +"4b77c468": "invite(address)", +"4b77d17d": "is_king_found()", +"4b7829f1": "token_claim_waiting_period()", +"4b7863fe": "setIBalance(uint256,uint256)", +"4b78ab61": "notarizationList(uint256)", +"4b798b82": "setFixes(string,string)", +"4b79e8ef": "getVariablesForDapp()", +"4b7a5cc6": "PLATINUM_AMOUNT_NDC()", +"4b7a7a14": "PresaleFirst(uint256,uint256,address,address)", +"4b7ae9f6": "returnMe()", +"4b7b2ed1": "confirmTransaction(address)", +"4b7b45b4": "DreamMaker()", +"4b7bb8e3": "CfoAddress()", +"4b7c1d2c": "TransactionConfirmed(uint256,uint256)", +"4b7e23b3": "ShapeshiftBotLookup()", +"4b7fa6db": "viewFn(uint256)", +"4b7fcee7": "ownerPausePayouts(bool)", +"4b802dde": "rentals()", +"4b803095": "processReferralSystem(address,address)", +"4b813478": "FinishBallot(uint256)", +"4b81780e": "ADDR_MAYA_ASSOCIATION()", +"4b82d416": "preSaleSecondEndDate()", +"4b82ee28": "frozenDaysForEarlyInvestor()", +"4b82f437": "setFirstReporterCompensationCheck(uint256)", +"4b836181": "BuyTicket(address)", +"4b8399f4": "setEnum()", +"4b841fa9": "redeem(string,uint256,uint256,uint8,bytes32,bytes32)", +"4b84ee81": "LogAddTokenPairWhitelist(address,address)", +"4b851b23": "hasDefaultRelease()", +"4b852c03": "setDuration(uint64)", +"4b855c62": "purchaseKingdom(string,string,bool,address)", +"4b8574ad": "AttestationManager()", +"4b85fd55": "setAutoBirthFee(uint256)", +"4b8624c4": "BONUS()", +"4b865846": "suspend(uint256)", +"4b866981": "LP(uint256,string,string)", +"4b869e15": "investeth2017()", +"4b86c225": "lock(address,address,uint256,uint256)", +"4b86faba": "claimHodlReward()", +"4b86fc5b": "isEligible(address,string,string)", +"4b8772c1": "buyUnit(uint256,uint256)", +"4b886f09": "VantageCoin(uint256,string,uint8,string)", +"4b891518": "_grantAccess(uint256,address)", +"4b89c41d": "setClosingTime(uint256)", +"4b8a3529": "borrow(address,uint256)", +"4b8adcf7": "pauseContribution()", +"4b8b4cee": "postExternalPayment(address,uint256,uint256,uint8,uint256)", +"4b8b704e": "icoTokensCount()", +"4b8b7a2a": "addCourse(string,uint256,string,string,string,string)", +"4b8ca215": "Ornament()", +"4b8d12f0": "migrateAddress()", +"4b8dbd1a": "VRFtoken()", +"4b8dc588": "closeRefundVault(bool)", +"4b8e1ba8": "isMinter(int256,address)", +"4b8e31a2": "_erc20token()", +"4b8e38db": "test(uint32[26],uint32[4])", +"4b8f4b5e": "MordernToken()", +"4b8f9f87": "ownerSetMinJackpoBet(uint256)", +"4b8fe5eb": "setPendingUserListLength(uint256)", +"4b8feb4f": "multiSigWallet()", +"4b901b72": "balanceOfByTranche(bytes32,address)", +"4b9081bf": "getBonusSale(uint256,uint256)", +"4b90ac86": "isBountySent()", +"4b9143f7": "setSold(uint256)", +"4b915a68": "aliceClaimsDeposit(bytes32,uint256,address,address,bytes20)", +"4b91ab35": "unfollow(bytes32)", +"4b922b12": "getDataColla_AB_01(string)", +"4b92738e": "migrateBalances(address[])", +"4b92f39e": "tradingClass(address)", +"4b930503": "registerName(address,string)", +"4b931600": "evaluateCategory(address,uint8,uint256,uint256)", +"4b932327": "novaluetoken(uint256,string,string)", +"4b93fec0": "BetContract()", +"4b944b9b": "post(bytes32,bytes32)", +"4b94f50e": "getTokenPrice()", +"4b95dcc0": "ViberateCrowdsale()", +"4b960794": "spotsLeft()", +"4b963025": "addUniqueSaleTokensMulti(address[],uint256[])", +"4b96b0ee": "registerZone(bytes8)", +"4b96f855": "burnPercentageDefault()", +"4b97aed9": "numOptions()", +"4b97e6cc": "withdrawEthBalanceSave()", +"4b991bde": "challenge(uint64,uint256,bytes,bytes,bytes)", +"4b997d9a": "sendTokens(uint256,address,bool)", +"4b99f0c5": "setTradingPairCutoffs(bytes20,uint256)", +"4b9a22af": "teamWon()", +"4b9b808d": "setResetVoteKindnessEvery(uint256)", +"4b9c4358": "betPlaced(address,uint256,uint256)", +"4b9c78e5": "buyEngineer(uint256[])", +"4b9cdbe7": "addCurrencyInternal(uint256)", +"4b9ce83c": "recordAssetPrice(uint128,uint128,uint128)", +"4b9d5047": "PlutoToken()", +"4b9d8624": "getLinks(address)", +"4b9de7a2": "dataIdentifiers(uint256)", +"4b9de81e": "endTimeRound2()", +"4b9e7ecd": "test_1_restrictDoubleVote_shouldThrow()", +"4b9eb771": "CAT_PER_ETH_FIRST_EARLY_BIRD_RATE()", +"4b9ed302": "setEarlyInvestorsBonus(uint256)", +"4b9ee106": "setMetaBetWeight(uint256)", +"4b9eea9b": "decodeKYCFlag(uint128)", +"4b9f5c98": "vote(bool)", +"4b9faf4c": "setTokenBalance(uint256,bool)", +"4ba034dc": "unlockGrowthPoolTokenSupply()", +"4ba0dd3c": "BotFarmer()", +"4ba1f098": "acceptRequest(uint256)", +"4ba20050": "getProduct()", +"4ba2363a": "pot()", +"4ba26466": "TPP2018TOKEN()", +"4ba2ab8a": "RockPaperScissorsAdvanced()", +"4ba2d5ff": "setThreePowerAges(uint256,uint256,uint256,uint256,uint256,uint256)", +"4ba336e5": "calculatePoolCut(uint256)", +"4ba4079a": "enableSwitch(bytes32)", +"4ba4c16b": "guess(uint8)", +"4ba4d784": "getMinutes(uint256)", +"4ba5b7b3": "crowdsaleRefund()", +"4ba6e72e": "advisoryTotalSupply()", +"4ba71f3c": "OxToken(address)", +"4ba79dfe": "removeAddress(address)", +"4ba8fde0": "_computeIncentiveCut(uint256,uint256)", +"4ba90201": "setFinishPreICO(uint256)", +"4ba9bb67": "arr(address,address,uint256)", +"4ba9fb71": "closeAskOrder()", +"4baa39be": "editBet(uint256,uint256,uint256)", +"4baa8160": "triggerAttack(uint32,uint128)", +"4baa9dc7": "addCashback(string,address,uint256[],uint256[])", +"4baaab80": "MyToken(string,string,uint256,uint256,address,address)", +"4bab0236": "wercoin()", +"4bad0881": "P4WDToken()", +"4bad294d": "asFunc(uint256)", +"4bad3327": "_mul(uint256,uint256)", +"4bae2ef1": "referrerBonus()", +"4bae6659": "fixedDeposit(uint256)", +"4baf4a76": "addToWhiteListMultiple(address[],address[])", +"4baf7a30": "TypesToBytes()", +"4bafa2a4": "totalMIT()", +"4bafa437": "setSECOND_STEP_MULTIPLIER(uint16)", +"4baffdc6": "_withdrawHoldVault(uint256)", +"4bb017a1": "destroySalesManager(address)", +"4bb07665": "whitelistUser(address,uint128)", +"4bb13055": "returnAllAvailableFunds()", +"4bb13e63": "setTripleRoomMin(uint256)", +"4bb22b5a": "execReturnValue(uint256)", +"4bb24399": "survive(address,address,uint256)", +"4bb278f3": "finalize()", +"4bb2e417": "SokToken()", +"4bb32e8c": "setDNoEditors(bytes32)", +"4bb37790": "restrictionExpiraton()", +"4bb4b260": "cashAllOut()", +"4bb593b2": "updateUser(address,string,uint256,uint256,uint256,string,bool)", +"4bb6e766": "checkTransferAllowed(address,address)", +"4bb72dea": "setPriceStep4(uint256)", +"4bb77d9d": "updateRates(uint256[])", +"4bb8596e": "managerSet()", +"4bb89c4d": "sendBounty()", +"4bb9962f": "HexelErc20Token(string,string,uint256)", +"4bba32fb": "round3StartTime()", +"4bba38b8": "getRef(address,address)", +"4bba863e": "getEthOfferor(uint256)", +"4bba8a58": "RepostiX(address,address)", +"4bbaa946": "getAllArea()", +"4bbb216c": "_target(address)", +"4bbb58b2": "setVirusInfo(uint256,uint256)", +"4bbbe0cc": "exporter()", +"4bbc142c": "allowOwnership(address)", +"4bbc2a4a": "changebank(address)", +"4bbcc1bc": "payoutSelf(address)", +"4bbcd6e8": "buyPresaleTokens(address)", +"4bbd3061": "DateCreateToken()", +"4bbf2c69": "excludeInvestor(address)", +"4bbf3a7a": "swapToken(uint256)", +"4bc091a3": "getCrowdsaleStartAndEndTimes()", +"4bc18a64": "deleteLock(address,uint8)", +"4bc1aa42": "VESTING_ADVISOR_CLIFF()", +"4bc24ec5": "right61(uint256)", +"4bc2a657": "setVoter(address)", +"4bc32ea2": "getBidCountForAuction(uint256)", +"4bc36600": "reorganizeMembers()", +"4bc3b153": "REWARD_FORWARD_POSITION()", +"4bc3df81": "BuyBooster(uint256)", +"4bc4549c": "todaySold()", +"4bc4d2ba": "KIN_PER_WEI()", +"4bc4e892": "startNextEra(bytes32)", +"4bc53249": "toB32(uint256,bytes,uint256,address)", +"4bc57a7c": "Medis()", +"4bc5d101": "CreatorWithdraw(uint256)", +"4bc70b1e": "withdrawFunds(uint16)", +"4bc8c477": "VirtualRealEstate()", +"4bc935d7": "verifyProof(bytes32[],bytes32,bytes32)", +"4bc9fdc2": "calcMaxWithdraw()", +"4bca4626": "ethWeiRaised()", +"4bca5cc0": "_setAdmin(address,bool)", +"4bca7f95": "NigeriaNairaToken()", +"4bca893d": "Count(uint256,uint256)", +"4bcb776f": "sliceIndexThrow()", +"4bcbcd89": "getEngineerLv1(address)", +"4bcd245d": "gameStatusSet(bool)", +"4bce2e9b": "totalEnjSold()", +"4bce79a1": "getAllSocialAccounts(bytes32)", +"4bcf244b": "ECRecoverWrapperF(bytes32,uint8,bytes32,bytes32)", +"4bcf74b2": "AccountMinterAdded(address,address)", +"4bcf8645": "returnFundsToClient()", +"4bd09c2a": "distributeTokens(address[],uint256[])", +"4bd1c253": "ChipExists(uint32)", +"4bd21127": "setAdminLevel(address,uint8)", +"4bd22521": "Electricity(string,string)", +"4bd22766": "refundETH(address,uint256)", +"4bd3a225": "setMultiplePreSalesSpecialUsers(address[],uint256)", +"4bd3af72": "sellGolds()", +"4bd3b4c6": "allowAuditor(address)", +"4bd4d93a": "transferFromWithMsg(address,address,uint256,string)", +"4bd4ddb9": "testThrow_invalidZeroValue1()", +"4bd4e770": "CheckSign(string,string)", +"4bd50dcf": "sendFromContract(address,uint256)", +"4bd544e8": "isEligibleToPlay(address)", +"4bd54f04": "dynamic()", +"4bd5610d": "jsonCat(string,string,int256)", +"4bd58c92": "LogBuyForFiat(address,uint256)", +"4bd67ced": "get_last_asset_document(bytes32)", +"4bd70ea3": "testFailGetUnset()", +"4bd7730b": "Senpona(uint256,string,uint8,string)", +"4bd79ac1": "lastCalculationRewardTime()", +"4bd889b4": "removePersonalLock(address)", +"4bd8ae6f": "endCoinFlip(bytes32,bytes32,bytes32)", +"4bd9d10e": "backOut()", +"4bd9d76c": "payUnderwriter()", +"4bda2ad0": "addNote(bytes20,string)", +"4bda3f2b": "test_insert_findWithHintPrevUpdateTail()", +"4bda87b5": "GCHToken(string,string,uint8,uint256)", +"4bdb7369": "hasBoughtEgg(address)", +"4bdbb944": "GodviewChain(uint256,string,uint8,string)", +"4bdbea2f": "latestBalanceCheck(address)", +"4bdc44ae": "setNote(uint256,bytes20,string)", +"4bdc4ffe": "ProposalTallied(uint256,uint256,uint256,bool)", +"4bdd6a8e": "KPOPIO_CONTRACT_ADDRESS()", +"4bde38c8": "platform()", +"4bdec44a": "VotingRightsGranted(address,uint256)", +"4bdf1b0e": "receiveApproval(address,uint256)", +"4bdf6667": "IsGenesisAddress(address)", +"4bdf7e8b": "_updateExperience(address)", +"4bdfa061": "postGenesisSales(bytes32,uint256,uint256)", +"4bdfa999": "Given(uint256,address)", +"4bdfbb75": "isCanvasFinished(uint32)", +"4be02f32": "getPlayerWithdrawal(uint256,uint256)", +"4be04fd9": "getMyLastScore()", +"4be185f0": "editionOf(uint256)", +"4be36323": "bonusRoundId_()", +"4be366d5": "purch(address,address,uint256)", +"4be39f2f": "FEED2()", +"4be422ae": "logOut()", +"4be42c08": "updateRewardAmount(bytes32,bytes32,uint256)", +"4be4343d": "InterfaceApp(address,address)", +"4be5739e": "PUBLIC_SALE_LIMIT()", +"4be62668": "MainSaleDistributed()", +"4be6c20a": "Error(uint8,address,address)", +"4be7183a": "init(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4be7ced7": "withdraw_team_fund(address)", +"4be860eb": "getMinGas()", +"4be9b992": "THRESHOLD3()", +"4be9d332": "jsonCat(string,string,string)", +"4bea4df7": "addLeaderboard(string,uint256)", +"4beb031b": "numBallots()", +"4beb536e": "allWagered()", +"4beb9e32": "approveByAddress(address)", +"4bebbf14": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4bebdab7": "uintArrayToString(uint256[])", +"4bec70a8": "setAffirmationsSigned(bytes32,bool)", +"4bec8335": "changeSafeguardStatus()", +"4becfd56": "getCurrentGameInitialMinBetSize()", +"4bed33b8": "SHARE_PURCHASERS()", +"4bed6c23": "donationAmount()", +"4bed81c8": "getWalletUser(uint152)", +"4beda18b": "BILLION()", +"4bee09e1": "changeTicket(address)", +"4bef5e51": "assetRegistrant(bytes32,int256)", +"4bef6de9": "determinePrize(uint256)", +"4bef71ac": "changeColorTeal()", +"4befc326": "temperatureMax()", +"4bf003fa": "After(uint256,bytes32)", +"4bf02421": "calculateAttributeTotals(uint256)", +"4bf0d331": "canDeposit(address)", +"4bf1b68d": "setTokenSupplier(address)", +"4bf1e60a": "newDev(address)", +"4bf2c7c9": "setBurnFee(uint256)", +"4bf2d314": "setAdvisoryPool(address)", +"4bf365df": "mintable()", +"4bf49313": "requestPayment(uint256,uint256,string,address)", +"4bf4e421": "client_address()", +"4bf5ac36": "saleAgent2()", +"4bf69206": "stakeFor(address)", +"4bf79cd9": "OutCloud(address,address)", +"4bf80d39": "giveConsent()", +"4bf899a3": "buyPosition(address,uint256)", +"4bf8e7a2": "getPriceInPastAuction(address,address,uint256)", +"4bf9407f": "changeRecipientAddress(address)", +"4bf96e60": "nextPurchasableBlocknumber()", +"4bfa0d11": "TDEEndDate()", +"4bfa798a": "getWarlordChestAvailable()", +"4bfad14d": "WinnerPicked(uint8,address,uint16)", +"4bfaf2e8": "getPendingVersionTimestamp()", +"4bfbe5df": "eventDate()", +"4bfc4782": "change_a(address)", +"4bfde393": "myWinShare()", +"4bfe2779": "setETHRate(uint256)", +"4bfe642d": "proWallet()", +"4bff1b95": "STARTING_KEBAB()", +"4bff5009": "getUserByName(string)", +"4bff8e51": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4bffc5e4": "allowance(address,uint256,uint256)", +"4c0019c3": "logDisputeCrowdsourcerCompleted(address,address,address)", +"4c007b35": "BigerToken()", +"4c0348ee": "nInvalidatedHashes()", +"4c04f7f2": "addTranslatorContent(address)", +"4c05a636": "Registrar(bytes32,uint256)", +"4c05b40e": "createShortId(bytes32,bytes32)", +"4c05df98": "startEarlyBird()", +"4c062c81": "moveNapkinsTo(uint256,address)", +"4c07fb4f": "editAddressDescription(address,string)", +"4c081138": "assign(uint256)", +"4c097cb4": "trigger(bytes32)", +"4c0999c7": "bytes32ToBytes(bytes32)", +"4c0a6532": "lrcTokenAddress()", +"4c0aac9a": "WithdrawFunds()", +"4c0b1c90": "getMarketer()", +"4c0b2973": "mfrOf(bytes32)", +"4c0bcfe5": "getTransferableBalance(address)", +"4c0bd3ef": "getLLV_edit_16()", +"4c0c0ac2": "rewardsAllocation()", +"4c0ddea8": "decodeTokenImbalanceData(uint256)", +"4c0e207a": "__outputCallback(uint256)", +"4c0e9e6a": "acquisitionsWallet()", +"4c0eceb5": "plusOnePonzi()", +"4c0ee2e1": "unPausePriceRaise()", +"4c0eed51": "addMarketMaker(address,address)", +"4c10d0a5": "addFrostTokensMulti(address[],uint256[],uint256[])", +"4c123019": "tokenFallback(address,address,uint256,bytes)", +"4c125e79": "cancel(uint64)", +"4c12b33f": "burning()", +"4c12d8b9": "recipientETH(address)", +"4c12f8bb": "creditCEO()", +"4c13017e": "Transfer(bytes32,address,uint256)", +"4c1334a8": "GoodTo(uint256,string,string)", +"4c1344b7": "isGuilty(address)", +"4c136ea8": "totalEDUSAllocated()", +"4c13fbb2": "ImageToken()", +"4c146f38": "getFrontEndTokenBalanceOf(address)", +"4c14743b": "UnlockedBalanceOf(address)", +"4c148efb": "CollectPayment(address,address,uint256)", +"4c14f334": "getCouponBonus(string)", +"4c15469c": "tresholds()", +"4c1674e5": "descOf(uint256)", +"4c167a6e": "approvePreSigned(bytes,address,uint256,uint256)", +"4c1736a0": "subFrozen(address,uint256,uint256,bool)", +"4c174ef0": "isWitness(address,address)", +"4c176b21": "WALLET_SALE()", +"4c17b322": "performRead2()", +"4c182a95": "doDeveloperGrant()", +"4c18e57e": "PositiveWhuffiesSent(address,address,uint256,string)", +"4c18e960": "allowRecurringBilling(uint256,uint256,uint256,uint256)", +"4c19a199": "openGameResult(uint256,uint256,uint256,string)", +"4c19dd1c": "VicDemToken()", +"4c1b2446": "transmitInteger(address,bytes,bytes,uint256,uint16)", +"4c1b64cb": "deleteAccount(address)", +"4c1b8ffd": "voteCost()", +"4c1bbef8": "claimerKey()", +"4c1ccadf": "SmartexInvoice(address,address)", +"4c1d1fde": "withdrawTokens(address,uint256,uint256)", +"4c1d79ee": "setSalePeriod(string)", +"4c1d9d48": "tokenIndexById(uint256)", +"4c1e4169": "BIZDEV_WALLET()", +"4c1f20ec": "CEO_TEAM()", +"4c1f524f": "convertToMiniTtc(uint256)", +"4c1f7635": "getAccountRest(address)", +"4c1f85ae": "updateHydroMap(address,uint256,uint256)", +"4c1fbde8": "getPlayerColor(uint256,address)", +"4c20179e": "devAllocation()", +"4c2067c7": "expired()", +"4c207ac8": "setTraps(uint256,uint16,bytes)", +"4c21eb07": "put(string)", +"4c21fa45": "getNoteByIndex(uint256)", +"4c2233a5": "withdrawAll(uint256,address)", +"4c228656": "advisorsAllocationTokenSend(address,uint256)", +"4c22a8d1": "kvcAdd(uint256,uint256)", +"4c22b792": "calc_wei_rewards(uint256,uint256,uint256)", +"4c22c119": "isUser()", +"4c2324bb": "toBytes(uint256[])", +"4c23ba50": "removePeer(address)", +"4c24d4dd": "isPoliceNode()", +"4c25162a": "Babatoken()", +"4c2516de": "swapToken(uint256,address)", +"4c25727b": "viewPollData(uint8)", +"4c258eb1": "getQtyFilledOrCancelledFromOrder(bytes32)", +"4c25deb5": "USER_GROWTH_TOKENS_RESERVED()", +"4c26064b": "MVGcoin(uint256,string,string)", +"4c266e11": "setExchangeGroup(address,uint256)", +"4c26aaa2": "TokenExchange()", +"4c26b6eb": "total_buy()", +"4c281603": "getPlayerMax(uint256)", +"4c28a043": "adminGetFeeDial()", +"4c294188": "customer_tickets(address,uint256)", +"4c2a664b": "purchaseNotes(uint256)", +"4c2a799f": "checkFileProof(bytes32,bytes32[10],uint256[4],bytes32[],uint256)", +"4c2bc9a9": "assertEq26(bytes26,bytes26)", +"4c2bd226": "getDescriptionHash(address)", +"4c2d0378": "getAllTransactionIds()", +"4c2d71b3": "setConfigAddress(bytes32,address)", +"4c2d8649": "transferComplete(address,uint256,bytes)", +"4c2db6d8": "buyCoin(uint16)", +"4c2f04a4": "AddMessage(address,uint256,string)", +"4c2fac53": "requireFunction()", +"4c2fc8b2": "acceptProposedMilestones(bytes32)", +"4c2fe456": "right94(uint256)", +"4c2ff0ae": "getLLV_edit_31()", +"4c3052de": "submissionGasPriceLimit()", +"4c316f70": "mineCoins(uint256)", +"4c31a0ca": "mintFoundersRewards(address,int256)", +"4c31df50": "nextroundsolsforhire()", +"4c3221e1": "complexityForBtcAddressPrefix(bytes)", +"4c32a444": "_onCanvasCreated(uint256)", +"4c330471": "getReferralBalance()", +"4c33fe94": "cancel(address)", +"4c34c8de": "USDCToken()", +"4c34d7e9": "UNITED_NATIONS_FUND()", +"4c352323": "getNewVoting(uint256,bytes32[],address[],uint256[])", +"4c364ceb": "createAccessory(uint8)", +"4c36c36e": "resolveBet(uint256)", +"4c36cf16": "addRoundPrice(uint256,uint256,uint256,address[])", +"4c37077f": "chargeBuyer(uint256,address,uint256,uint256)", +"4c381350": "meteredPrice(uint256)", +"4c382d99": "terminateEmployee(address,uint32,uint8)", +"4c38661d": "lastPing(address)", +"4c387d82": "NSCToken()", +"4c38c366": "reLoadXaddr(uint256)", +"4c3997d4": "cancelBuyAuction(uint256,address)", +"4c3a00cb": "totalTradeRecords()", +"4c3a1a1a": "returnUserGrowthPoolTokens(address,uint256)", +"4c3a6ae0": "isMultiSigWallet()", +"4c3a9675": "ManagerProxyTargetMockV2(address)", +"4c3acb86": "debug(string,string)", +"4c3b67b4": "withdraw_for(address)", +"4c3ba268": "getBySemanticVersion(uint16[3])", +"4c3bf0b5": "changeInitialCost(uint256)", +"4c3d1f00": "EthDailyLimitChange(uint256)", +"4c3dff01": "InitialBasicBalance()", +"4c3ec50b": "FarziToken()", +"4c3eea9e": "generalLog(uint256)", +"4c3ef6dc": "minimumTokenThreshold()", +"4c3f333f": "Kalypso()", +"4c3f8ec0": "Tier_Wildcat_Registration()", +"4c409b80": "ChangeWallet(address,address)", +"4c413139": "minutesToPost()", +"4c418879": "getMyDino()", +"4c41a6c7": "blockThreshold()", +"4c41bf9d": "getOnBurnTargetValue()", +"4c4316c7": "donate(uint64,uint64,address,uint256)", +"4c433843": "parityOwner()", +"4c439436": "getTicketsAtAdress(address,address)", +"4c44d53f": "test_fourInvalidEqBytes32Message()", +"4c45c7ec": "setPhase(uint8,uint256,uint256,uint256,uint256,uint256)", +"4c466d37": "signer(bytes)", +"4c46e52c": "trancheOneBalanceOf(address)", +"4c46fb73": "stageCaps(uint256)", +"4c471cde": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8,uint256)", +"4c4766e8": "KittenRegistry()", +"4c478b62": "ERC827TokenMock(address,uint256)", +"4c47e9ee": "setLockedConfig(address[],uint256[],uint256[])", +"4c480c2a": "ownerCandidat()", +"4c4870c6": "checkGoal()", +"4c488dac": "getChannelValidUntil(bytes)", +"4c49515d": "presaleTokensIssued()", +"4c4a386f": "refundEnabled()", +"4c4a4c67": "assertEq2(bytes2,bytes2)", +"4c4a9761": "tokenRate4()", +"4c4aea87": "getReleaseData(bytes32)", +"4c4bf936": "landData(int256,int256)", +"4c4c23dd": "upgradeGreatCoin(address)", +"4c4c447e": "cancelBattle(uint256)", +"4c4cb69e": "INVEST_AMOUNT()", +"4c4cea5a": "completeAt()", +"4c4cfc3b": "tokensForEcosystem()", +"4c4d07e7": "isBouncer(address)", +"4c4d460e": "LogCampaignCreated(address)", +"4c4dc6e0": "docCount()", +"4c4deecb": "__callback(uint256,string)", +"4c4e03f2": "_getExtraParam(bytes)", +"4c4e829c": "TransactionRevoked(uint256)", +"4c4efef7": "totalCLNcustodian()", +"4c4f1386": "WartecToken()", +"4c4fa89a": "getChildBranch(bytes32)", +"4c50ea27": "RHOC(uint256,address)", +"4c515fb5": "TEAM_VESTING_CLIFF()", +"4c51b021": "substract_individual_shares(uint256)", +"4c524be4": "selectWinner(uint256)", +"4c53adb0": "blackFridayEndBlock()", +"4c54cc1d": "managerETHaddress()", +"4c56e992": "refillContract()", +"4c574afe": "unblockSecondStake()", +"4c575fcc": "numberOfRawEarlyPurchases()", +"4c57fc28": "setTokenMintFeeReceiver(address,address,address,address)", +"4c5802c1": "getPhaseAddress()", +"4c585ce4": "approveMultipleUsers(address[])", +"4c5879cf": "WidinShares()", +"4c58994c": "TrypCrowdsale()", +"4c594c1e": "limitDateCrowdWave3()", +"4c59b47c": "EthereumLottery(address,address)", +"4c59f021": "CakCrowdsale(uint256,uint256,uint256,address)", +"4c5a2044": "licenseCostDenominator()", +"4c5a628c": "renounceWhitelistAdmin()", +"4c5a82cb": "reportTemperature(int8[],uint32[])", +"4c5a94fe": "_removeToken(address,uint256)", +"4c5b632a": "addcoin(string,string)", +"4c5be574": "getOdds()", +"4c5cbe9a": "getBalancesForTeam(address)", +"4c5d6d93": "totalCrowdSale()", +"4c5df57a": "createLoan(address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"4c5df737": "addCar(string,string,string,uint16,string,address)", +"4c5f338b": "CheckStudentofCourse(uint256)", +"4c5f97b6": "PayThrone()", +"4c610ba4": "totalRewardThisYear()", +"4c611268": "balanceOfUnclaimedCookie(address)", +"4c6226fc": "oraclizeFee()", +"4c62a644": "withdrawComission()", +"4c64384c": "maxPrivateSale()", +"4c64cf92": "mint_time_locked_token(address,uint256)", +"4c65b2b3": "ethOwner()", +"4c65c62e": "AgentContracteGalaxy(address,address,address,uint256,uint256)", +"4c661a2c": "DaoOwnershipTransferred(address,address)", +"4c66326d": "deregisterCallback(address)", +"4c6686d8": "CONFIG_FEES()", +"4c66bcc1": "WorldWideLoveToken()", +"4c67567a": "firstLockAmount()", +"4c676725": "fundTeamCompany()", +"4c68df67": "totalReserve()", +"4c69c00f": "setOracleAddress(address)", +"4c69ec93": "changeReceiver(address,address)", +"4c6a3334": "buyEthLootbox(address)", +"4c6adb31": "firstReporterCompensationCheck(address)", +"4c6b25b1": "results(bytes32)", +"4c6b6cad": "newProposal(string,bytes)", +"4c6c27a1": "judgeCustom(bytes32,bytes32,bytes32,uint256,bytes32,uint256[4],bytes32[10],uint256[4],bytes32[])", +"4c6c6a5c": "upgradeFrom(address,address,uint256)", +"4c6c8bc3": "distribute(address[],uint256[],bytes32[])", +"4c6d1d9e": "checkOutTag(string)", +"4c6d350b": "approveShutdown(uint256)", +"4c6d8aac": "hasParameters()", +"4c6e4453": "EcoLend()", +"4c6e5926": "send_to_side_chain(uint256,address,uint256)", +"4c6ebbbe": "maxIcoTokenLimit()", +"4c6fc20f": "setDisbursingAddr(address)", +"4c703ccd": "FirstERC20TestToken()", +"4c70b6b2": "deList(address)", +"4c714ed4": "DescriptionChanged(string,string)", +"4c7241f8": "Potentl()", +"4c738909": "getMyBalance()", +"4c73eef6": "card_black_minamount()", +"4c743c45": "FCTOKEN()", +"4c750bca": "bountyFunds(address,uint256)", +"4c75dc8f": "EFOcallBack(string)", +"4c75fbca": "getThirdAddressBalance()", +"4c76318e": "award(bytes32)", +"4c77a28d": "AppleCoin()", +"4c77c0e2": "period2Numerator()", +"4c77e5ba": "getAddressValue(bytes32)", +"4c780596": "UpgradeSpace(uint8,uint16)", +"4c783bf5": "isControllable()", +"4c78529e": "setOfficialUrl(string)", +"4c78b276": "getShare(address,uint256)", +"4c7940c5": "getWithFrozenStockBalance(address,address,uint256)", +"4c79afe0": "EventBuyShip(address,uint32,uint32)", +"4c7a0271": "buyMiner(uint256[8])", +"4c7a2254": "checkMyWithdraw()", +"4c7a5c0f": "ArtifactCoin(address)", +"4c7ab28d": "setMaxToSell(uint256)", +"4c7ae3ac": "getNameFromKoikeToken()", +"4c7b18fd": "ratioUpdateTime()", +"4c7b8fba": "contributionHashes(uint256)", +"4c7c3ca1": "KryptopyCrowdsaleMock(uint256,uint256,uint256,uint256,uint256,address)", +"4c7c71fe": "startTimes()", +"4c7ce18a": "withdrawReturns()", +"4c7cfd9b": "MarketboardListingPriceChanged(uint256,uint256)", +"4c7d3e3f": "icoIsClosed()", +"4c7d7d3f": "standardToken()", +"4c7e6bab": "tokensPerCentsDayOne()", +"4c7f0bdd": "isBackend(address)", +"4c7f74df": "EtherDelta(address,address,address,uint256,uint256,uint256)", +"4c7fa728": "getPlayerLeftDividend(address)", +"4c803feb": "fib1(uint256)", +"4c808da8": "StageUpdated(string,string)", +"4c80b03b": "minTransAmount()", +"4c80c937": "getEpochData(uint256,uint256)", +"4c80f5c1": "minimumAmountToParticipate()", +"4c813d6d": "sendItDv(string)", +"4c81a1db": "addressPayableFunc(address,address)", +"4c81c4d7": "startStage2Time()", +"4c81e13a": "incentiveDistributionRoundDenominator()", +"4c81e48b": "testToUint()", +"4c8316a6": "showTokensStaked()", +"4c833532": "resumeTransfer()", +"4c839beb": "getContributionTokens(address)", +"4c840214": "getBackToken(address,address,uint256)", +"4c841e5d": "_setBlacklistedUser(address)", +"4c85a8f3": "isAllowedToMint(address,address)", +"4c85b425": "buyShares(address)", +"4c85d2e6": "addImmigrationOfCountry(address,uint256)", +"4c86c2e5": "setPortUpdate(uint16)", +"4c86e97b": "bonusTokensLeft()", +"4c873c48": "tokenSetup(address,address,address)", +"4c87effd": "delete(bytes32)", +"4c88bc26": "YEAR_TWO_SUPPLY()", +"4c899118": "getProposalFromID(bytes32,uint256)", +"4c89c4c7": "getHash(bytes10,uint8)", +"4c8b16f4": "setTimeStep(uint256)", +"4c8b8ca7": "distroyBuyerToken(uint256)", +"4c8bae93": "_isTradeable(uint256)", +"4c8c121e": "getGameHash(address,uint256)", +"4c8cab79": "largestStake()", +"4c8cc20b": "toContentID(address,string,string,address,uint256)", +"4c8d1e42": "DockCrowdsale(uint256,address,address)", +"4c8f3562": "computeCooldownSeconds(uint16,uint16)", +"4c8f4810": "buyMCT(address,uint256)", +"4c8fe526": "next()", +"4c8fea7d": "_convertSgnToSga(uint256)", +"4c90aaeb": "randomize(bytes32)", +"4c9151e6": "TransferStarted(address,address,uint256[],uint256)", +"4c922a9f": "changeColorPurple()", +"4c9297fa": "scheduleStart(uint256)", +"4c93505f": "setRevoke(bool)", +"4c9362aa": "addActiveUserListArr(address)", +"4c93c1a6": "GetUpTickPrice(uint256)", +"4c9478ce": "_yearThreeClaimed()", +"4c947c86": "getInitInputDataBytes(address,address,address,address)", +"4c94ac6a": "clearMilestones()", +"4c9599f2": "validityDate()", +"4c95baf3": "compoundingFreq()", +"4c95ca9c": "setRatePreICO(uint256)", +"4c95cb98": "OracleBase()", +"4c966822": "winnerWithdrawal()", +"4c96a389": "deploy(address)", +"4c96f0cc": "transferAllTokens()", +"4c96f281": "getAllPublishers()", +"4c97057a": "LogWinner(string)", +"4c970b2f": "foo(int256)", +"4c977972": "Soft_Cap()", +"4c97c836": "upgradeConstitution(uint256)", +"4c982872": "ElextroCoin()", +"4c985dfb": "newTokens(address,uint256)", +"4c98aec9": "CASHX()", +"4c990cc7": "startAirdrop(address[],uint256[])", +"4c9b30b4": "allow(bytes8)", +"4c9b60dc": "changeUserEthAddress(address,address)", +"4c9b760d": "changeMaxContribution(address,uint256)", +"4c9e2779": "balancesLocked2Y()", +"4c9e502e": "totalLoanAmount()", +"4c9ed763": "requestTokensBack()", +"4c9f166d": "bettingAllowed()", +"4c9f2bfc": "SOBU()", +"4c9f45eb": "repossessionBountyPerHundred()", +"4c9f66c7": "feePot()", +"4ca0a305": "GlobalIdolCoinToken()", +"4ca14270": "AddressChanged(string,address,address)", +"4ca15352": "airDropCount_()", +"4ca168cf": "register(bytes,uint256,address,string,uint256)", +"4ca18ebd": "reject(uint256,string,uint256)", +"4ca1c417": "isValidNameLength(string)", +"4ca1fad8": "addRequest(uint256)", +"4ca3a111": "getWeiPriceMicroKeys()", +"4ca3e9b8": "getProjectAddress(uint256)", +"4ca40518": "ReBornEnergyCoin(uint256,string,uint8,string)", +"4ca43f41": "transferAny(address[],uint256)", +"4ca50f59": "sellsTokens()", +"4ca5558c": "AllCaptcha()", +"4ca63a84": "TimeLimitedStoppable()", +"4ca64b3a": "bulkTransfer(address[],uint256)", +"4ca6ba2f": "AporooToken(uint256,string,uint8,string)", +"4ca6d7e6": "tier2Time()", +"4ca6fcfc": "registerVIP(address,address,uint256)", +"4ca7fbd0": "updateTokenPriceWeekTwo()", +"4ca82b52": "finalLoos()", +"4ca8b0d0": "registerExistingThrone(bytes,address,uint256,uint256)", +"4ca8c1e8": "isInMaintainance()", +"4ca92e08": "deductExtraBalance(address,uint256)", +"4ca98997": "getAmount(uint256,uint256)", +"4ca9b258": "contributorRefund()", +"4caa1a09": "_calculatePaymentToOwner(uint256)", +"4caa7f37": "withdrawSnowflakeBalanceFromVia(string,address,string,uint256,bytes,bytes)", +"4caaf45f": "changeSigningAddress(address)", +"4cad12e0": "orders_sell_price(address)", +"4cad3438": "setRateFinalStage1(uint256)", +"4cad42d3": "testWager()", +"4cae5f99": "loanRepaymentNotification(uint256)", +"4caeebd0": "STAGE_FOUR_TIME_END()", +"4caf6231": "COLOR_WHITE()", +"4cb0c7a1": "getOrdersOfVendor(address,uint256,uint256,bool)", +"4cb10ed3": "hasStartTimePassed(bytes32)", +"4cb44f8d": "getConfigEntryAddr(bytes32)", +"4cb532db": "socWarefareAddr()", +"4cb5465f": "transferWithLock(address,bytes32,uint256,uint256)", +"4cb5a45d": "GSUMedal()", +"4cb5ef77": "closeVoteRevealPhaseIfAllowed(address,bytes32,bytes32)", +"4cb5f1c6": "totalsum()", +"4cb6bf73": "FZTToken(address)", +"4cb6d6af": "finalizeCrowdsale(address)", +"4cb6f4a5": "voteRequest(uint256)", +"4cb71b9b": "getAllReleaseHashes()", +"4cb79536": "presaleStartBlock()", +"4cb7da65": "abortMatch(uint256)", +"4cb7dd6f": "popLeader(address)", +"4cb84b9a": "getIcoCap()", +"4cb85312": "_addInvestor(address)", +"4cb85356": "BranchSender(uint256,bytes32)", +"4cb88ad8": "ABEToken()", +"4cb93ff8": "capTokenAmount()", +"4cba4ca4": "updateGene(uint256,bytes)", +"4cba5c6a": "setResults(uint256[4])", +"4cba67ce": "addAddressToAccountForUser(address,bytes,bytes,address,bytes32)", +"4cbabcdc": "invest(bool)", +"4cbac3d2": "calculatePurchasedTokens(uint256,uint256)", +"4cbb4a0a": "_removeTokenFromAllTokensEnumeration(uint256)", +"4cbb7532": "setBorrowAgreement(uint256,uint256,string,string)", +"4cbbb987": "DOSXToken()", +"4cbc07f2": "weisPerBigToken()", +"4cbc49ad": "claimRewardManually(address)", +"4cbc82cd": "getTrackByArtist(address,uint256)", +"4cbd2b74": "allowanceByLegacy(address,address)", +"4cbd7a26": "withdraw(address[],uint256[],bytes,bytes,bytes32)", +"4cbe02a5": "createAuthorDrawings(bytes32,bytes32,address,string)", +"4cbe552c": "myEntityStructs(uint256)", +"4cbee813": "logout(string)", +"4cbf3d4c": "getNumbersOfPick(uint256,uint8)", +"4cbf6ba4": "hasDNSRecords(bytes32,bytes32)", +"4cbf867d": "intervalSecs()", +"4cbfafd9": "DefaultReleaseDelayed()", +"4cbfbf47": "REAPER_INTREPID_MAX_CARGO()", +"4cc05a71": "withdrawCount()", +"4cc09eac": "tokenRatePre()", +"4cc0a885": "maxRevealSeconds()", +"4cc0ee3c": "modifyDescription(address,string)", +"4cc22528": "setRateForOrder(bytes32,uint256)", +"4cc22f9d": "getSaleEnd()", +"4cc2a4bb": "_preValidateTransfer(address,address,uint256)", +"4cc2b5d0": "addPolicy(bytes32,uint256,uint256,uint256,string)", +"4cc2c0fe": "getTotalFor(uint256,uint256)", +"4cc3a6b0": "ConvertQuote(uint256)", +"4cc45f50": "changeAddressQueen(address)", +"4cc47910": "oraclizeQueryIdsToBetIndices(bytes32)", +"4cc53838": "getSaleContractTargetEtherMin(address)", +"4cc60757": "getOperator(address,address)", +"4cc6083a": "totalTrading()", +"4cc62409": "EOSOwned()", +"4cc653c8": "calculateDividends_(uint256)", +"4cc682ee": "getPubKeyHash(bytes20,uint8)", +"4cc747c8": "unlistAllOpenProposals()", +"4cc78983": "setPreviousDungeoonId(uint32)", +"4cc7a88d": "sendLoveToken(uint64,string,string,string)", +"4cc82215": "remove(uint256)", +"4cc87328": "adminWithdrawMiscTokens(address,uint256)", +"4cc885d4": "right65(uint256)", +"4cc9f4e1": "lockTokenController()", +"4ccb5a33": "canClosePot(string)", +"4ccb908f": "auctionSuccessBonus()", +"4ccbd06b": "MIN_DEPARTURE_LIM()", +"4ccbe888": "getLongExtra()", +"4ccbf17b": "presaleAddressAmountHolder()", +"4ccc4c36": "getPendingOracleFor(address)", +"4ccc5da0": "sold(bytes32)", +"4cccb7ba": "unrestrictedWithdraw(uint128,address,uint256,uint128)", +"4ccd0e1e": "Flippitt(string,string,uint8,uint256,string)", +"4cce4d63": "addNewCompany(string,uint256,uint256,uint256,uint256)", +"4ccee9b6": "getAddr(bytes32)", +"4cceeccd": "setFee(uint32,address)", +"4ccef7e0": "averageSoldPrice()", +"4ccf05cd": "CompanyTokenPushed(address,uint256)", +"4ccf8a35": "TokenSupplied(address,uint256,uint256)", +"4cd06a5f": "iterateNext(uint256)", +"4cd08d03": "register(string,string,string)", +"4cd11943": "NewManualInvestor(address,uint256)", +"4cd18a83": "gimmeEtherr()", +"4cd217b7": "getPreEntranceTo()", +"4cd273d1": "tilePrice()", +"4cd280bc": "popClient()", +"4cd28aa6": "_queue(address,address)", +"4cd2b343": "RedBlueToken()", +"4cd36fb7": "Mine(address,uint256,uint256)", +"4cd3745d": "getRandomClassId(uint256)", +"4cd412d5": "transferEnabled()", +"4cd44519": "stageTokensBought(uint8)", +"4cd52207": "_claim(address,uint256,bool)", +"4cd5af91": "CrowdFundClosed(uint256)", +"4cd5d776": "FundingWithdrawn(address,uint256)", +"4cd6bd32": "withdraw(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"4cd7699a": "eventCardRangeMax()", +"4cd85837": "mintICOTokens(address,uint256,uint256)", +"4cd88b76": "initialize(string,string)", +"4cd995da": "registerCompany(address,string)", +"4cd9c3e4": "crowdsaleEndsAt()", +"4cdabb16": "MAX_PREMIUM()", +"4cdb48e4": "isValidNym(address)", +"4cdc6a73": "Marriage()", +"4cdc9549": "_isApprovedOrOwner(address,uint256)", +"4cdc9c63": "genesisBlock()", +"4cdcb334": "transferrers(address)", +"4cdd3002": "setNote(uint256,bytes32,bytes20,string,string)", +"4cdd3b43": "getScoreForName(string)", +"4cddae28": "recharge()", +"4cdfc605": "Refund_user()", +"4ce0032f": "TutorialToken(address)", +"4ce01d86": "totalBetValue()", +"4ce02a33": "overdraftCliff()", +"4ce053ab": "approveAndPayout(uint16)", +"4ce0ef95": "getStatus(address,uint256)", +"4ce11c52": "children(bytes32)", +"4ce149d7": "setCandyLandSale(address)", +"4ce14f8c": "FOMOCoin()", +"4ce18d6b": "getAmount(bytes)", +"4ce18ec3": "addInterval(uint256,uint256,uint256,bytes32)", +"4ce197f3": "GetTempStuffExpire(address,uint32)", +"4ce1e317": "TeamAndAdvisorsAllocation(address,uint256)", +"4ce309f8": "getElection(address,address,uint256)", +"4ce37426": "EtherOlympics()", +"4ce4f927": "getJackpot(uint256)", +"4ce51b92": "WithdrawSpecialEth(address,uint256)", +"4ce56c5d": "ethAvailable()", +"4ce61604": "InitializedTier(uint256,address)", +"4ce63074": "test_increaseBlockBy5000()", +"4ce6962c": "numPurchasers()", +"4ce6a521": "emitAdditionalTokens()", +"4ce6a74e": "testerNonReentrant()", +"4ce7033d": "LogWithdraw(address,uint256)", +"4ce71fac": "getRegionPurchasePixelPrice(uint256)", +"4ce75274": "setEnableSell(bool)", +"4ce99591": "Vegan()", +"4cea7af0": "MembershipChanged(address)", +"4ceab75e": "newIdTank()", +"4ceab858": "multiplex_add(address)", +"4ceaeb35": "PleasePayMe(uint256,uint256)", +"4ceb0173": "to(bytes32,bool)", +"4ceba015": "LogCollect(uint256)", +"4cec73b1": "checkClaimTokenByAddress(address)", +"4cecac6d": "requestReward()", +"4ced0a26": "SetData(string,string)", +"4ced4734": "isPreSale()", +"4cedf74e": "get_party1()", +"4cedfc02": "TornadoChain()", +"4cedfc0c": "activateWhitelist(bool)", +"4cee81cb": "Marriage(address,address,string,string)", +"4cef0cb9": "usdPerEthMax()", +"4cef0ff6": "approveMore(address,uint256)", +"4cef2221": "ZazToken()", +"4cef5a5c": "negligibleRateDiff()", +"4cf00716": "getCreateFeeTokenFeeWindowValue()", +"4cf045d5": "addSoftwareExecRecord(bytes32,bytes32,uint256,uint256)", +"4cf088d9": "staking()", +"4cf0afca": "changeWallet(address,uint8)", +"4cf1115d": "ethFee()", +"4cf125de": "Ledger()", +"4cf127bf": "modelSupply()", +"4cf178c6": "POWEROFTHREE()", +"4cf2010e": "addCar(uint256)", +"4cf21f5f": "CFNDToken()", +"4cf2c2a2": "Dexter()", +"4cf2e2dc": "GameStart()", +"4cf32de3": "getNumTransactions()", +"4cf33010": "purchaseShare(uint256)", +"4cf373e6": "addFortune(string)", +"4cf37429": "AMOCoinSale(address,address)", +"4cf43440": "Megaloh()", +"4cf439d8": "_addToPools(address)", +"4cf4a292": "getHouseEdge()", +"4cf50009": "genesisCreation()", +"4cf52fa2": "buyBulkPremiumCar(address,uint256[],address)", +"4cf5b6c7": "millWeiRate()", +"4cf61aba": "_canTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"4cf6475d": "getPlayerShipCount(address)", +"4cf76cca": "thirdDiscountPrice()", +"4cf78170": "allowedAddress()", +"4cf812ea": "rateRoundSeed()", +"4cf8b0f5": "BlipToken(string,string)", +"4cf8dce7": "balanceOfOre(address)", +"4cf91026": "isAirdropping()", +"4cf93599": "getPaidInfo(string)", +"4cf95c21": "shareholderIsToken()", +"4cf96509": "safeWithdrawalAll()", +"4cfb4c28": "roundProfit(address,uint256)", +"4cfc4d30": "VESTING_DURATION()", +"4cfd5a82": "phaseOneLimit()", +"4cfddcfb": "getMarketOrderCategory(uint256)", +"4cfe3e7f": "debitAccount(address,uint256)", +"4cfe4c69": "getProviderRateHistory(uint256,uint256,uint8)", +"4cfe50cb": "BAFCToken()", +"4cfe59a7": "simulateWithdrawalAmount(address,address)", +"4cfe62c7": "transferRole(string,address)", +"4cfea68a": "blocksPerDay()", +"4cfef220": "getSpankPoints(address,uint256)", +"4cff5d75": "setTokenAllocator(address)", +"4cff6ae5": "AltToken(address)", +"4cff7a82": "createDefaultGames()", +"4d003070": "timestamp(bytes32)", +"4d015fcc": "Pong()", +"4d0217b7": "firstSaleComplete()", +"4d023404": "removeIntermediary(address)", +"4d02438b": "getMaximumBetHome()", +"4d02a8fb": "judgeFakeToken(uint256)", +"4d047055": "monsterIdToNickname(uint256)", +"4d053af6": "removeAds(address)", +"4d056f6d": "coolDown()", +"4d057803": "TEAM_LOCK_TIME()", +"4d05a822": "JusticeTokenV2()", +"4d06068a": "airdropToken()", +"4d0633f6": "assignedAmountToCornerstoneInvestment()", +"4d07b23d": "buyPrice(uint8)", +"4d08e0b4": "mediaTokensName(address)", +"4d0a32db": "minAmount(address)", +"4d0a391c": "addPayment(uint256,uint256)", +"4d0a5dbd": "addPermission(address)", +"4d0ad141": "CAP_USD()", +"4d0b2a29": "NUM_TILES()", +"4d0c381a": "Token99(uint256,address)", +"4d0c5be4": "redemptionLocked(address)", +"4d0c69d9": "EnterSwap(uint256,uint256,bool,address)", +"4d0cac9d": "sendCancelValue(address,uint256,bool)", +"4d0d1cb9": "processTransfer(address,address,uint256,bytes)", +"4d0d35ff": "getPlayerAddr(uint256)", +"4d0d80a2": "_getRandom(uint32)", +"4d0de225": "getWorkerBalance(address)", +"4d0e8a5f": "MYEX()", +"4d126774": "validateWhitelisted(address)", +"4d1271e3": "VersionedToken(address)", +"4d129486": "max_shares_to_sell()", +"4d129fb5": "startPre()", +"4d12b695": "unbanUser(address)", +"4d12fca4": "exchanger()", +"4d130369": "interestPaid(address)", +"4d130e64": "_collectFee(address,address,uint256)", +"4d134f2f": "createAddresses(bytes32[],address[])", +"4d13507d": "releaseFund(address)", +"4d1387b4": "changeRatio(uint256,uint256)", +"4d13a583": "PrepaidTokensClaimedEvent(address,uint256,uint256,uint256)", +"4d13c565": "bVideoCost()", +"4d13d134": "publicAllocatingToken()", +"4d140467": "EARLY_CONTRIBUTOR_VESTING_CLIFF()", +"4d14c57e": "claimBasicResources()", +"4d14e344": "numberOfChoices()", +"4d15642a": "startMEAMission(uint256,uint256,uint8,uint256)", +"4d15d797": "_exists(int256,int256)", +"4d1636c3": "onSold(address,uint256,uint256)", +"4d16dd41": "communityUnvested()", +"4d17ed11": "LUVIToken()", +"4d17f7fc": "sta()", +"4d182bfc": "getEpisodeDataRandom(uint256,uint256,uint256)", +"4d1975b4": "gameCount()", +"4d199766": "WEI_CAP()", +"4d19cdf8": "DME()", +"4d1a08cd": "MIN_LIMIT()", +"4d1a9763": "T8CToken(address)", +"4d1b93b3": "allowedTransferWallet()", +"4d1bc2df": "expertThreshold()", +"4d1bd1fa": "product2_luckybuyTracker()", +"4d1bfe99": "BenefitGameToken()", +"4d1c43b2": "ETHUSDPRICE()", +"4d1c5f83": "EditMode()", +"4d1ed74b": "maxGuaranteedLimit()", +"4d1f8c31": "owner(uint64)", +"4d1f97ba": "LastResult(address,uint8,uint256)", +"4d1ff181": "setPaymentEnabled(bool)", +"4d207d9a": "identify(address)", +"4d20b992": "setLargeCapWhitelistParticipants(address[],uint256[])", +"4d20d4bc": "BET_TYPEHASH()", +"4d21a24c": "generateLockId()", +"4d22b9c8": "DMSContract()", +"4d22d1d1": "vestTime()", +"4d2301cc": "getEthBalance(address)", +"4d238c8e": "addValidator(address)", +"4d23aaa8": "foreignBuy(address,uint256,uint256)", +"4d242bbc": "adjustTotalSupplyCheckpoints()", +"4d253629": "updateChangeAttemptCount(address)", +"4d25cc91": "transfer_token(address,uint256)", +"4d268ddd": "payImporterBankForGoodsBought()", +"4d269617": "XENIACOIN()", +"4d27a548": "rICO(address,address)", +"4d28ca02": "addMultipleContracts(bytes32,bytes32,bytes32,bytes32,address[],bytes32)", +"4d298265": "isWhitelistedPresale(address)", +"4d2a16e6": "myTradeValue()", +"4d2a30c1": "customerDepositedEther()", +"4d2a99a5": "GVOptionProgram(address,address,address)", +"4d2b1444": "WAITING_TIME()", +"4d2c29a0": "tokenOfferingAddr()", +"4d2d0a3d": "token_totalSupply()", +"4d2d35bc": "TokenPartners(address,address,uint256)", +"4d2d3dfc": "_generateHash(bytes32,uint256,address,uint256)", +"4d2db81f": "alreadySold()", +"4d2e9d04": "ShowDepositInfo(address)", +"4d2ee8e7": "GetLoanInfo(uint256,bool)", +"4d2efe4e": "collectOwedDividends()", +"4d305073": "uintRound(uint256,uint256)", +"4d307e3f": "getCurrentReward(address)", +"4d30b6be": "balanceOf(address,bytes32)", +"4d314b5a": "ERC20MIST(uint256,string,string)", +"4d318b0e": "tallyVotes(uint256)", +"4d32a117": "documentsIds(uint256)", +"4d32ef8c": "hurifymint(address,uint256,uint256)", +"4d3314f4": "TotalFee()", +"4d33e6d7": "hasDisputeSolved(uint256)", +"4d341bbc": "findSubscriberIndex(address)", +"4d3465fd": "weicap()", +"4d34dce1": "AHS(uint256,bytes32,bytes32)", +"4d358a00": "PreSale(address,address)", +"4d366398": "runPeerBalance()", +"4d36dd87": "finalizeTransferChild(uint256)", +"4d37ec46": "__generateOrderHashes__(address[4],uint256[8])", +"4d380a0d": "revealBid(uint256,uint256,bytes32)", +"4d3820eb": "registerUser()", +"4d3830e5": "releaseFunds(uint16,address,address)", +"4d387d35": "lockAccount(address,address,uint256)", +"4d38f6c5": "signTruelove(bytes32,string,string)", +"4d3915e9": "testF3(uint256)", +"4d392341": "ICO_BONUS1_RATE()", +"4d392e49": "getSubjectById(uint256)", +"4d395384": "configString()", +"4d399cb3": "updateWhitelist(address,uint8)", +"4d39ed06": "initialFoundersAmount()", +"4d39f535": "transferFrom(uint40)", +"4d39fa7d": "getMultiplierAtTime(uint256)", +"4d3a01b1": "setLongAirdropPicker(address)", +"4d3a2f10": "lastReceivedMessage(address)", +"4d3b915e": "minTokenSale()", +"4d3bdb82": "KickcityToken()", +"4d3cd84e": "setCanAnyMint(bool,int256)", +"4d3ceef1": "freezeCheck(address,uint256)", +"4d3cf035": "tokens2ether(uint256)", +"4d3cfbcd": "NextStep(uint8)", +"4d3d096b": "isExist(string)", +"4d3d14f2": "calculateTransferFee(address,address,uint256)", +"4d3e7682": "DataSellToken()", +"4d3ec092": "LogReplaceToken(address,uint256)", +"4d3eff3c": "setICOSpec(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4d3f0a6e": "becomeRenown()", +"4d3fac53": "getRatingRange(uint256,uint256,uint256)", +"4d40ed9c": "setSanMaxFree(uint256)", +"4d40f03c": "SovietCoin()", +"4d414c18": "Victim()", +"4d41fee4": "logit()", +"4d425812": "getCountryCount()", +"4d428204": "getTransferTime()", +"4d4282e9": "bytes32IsEmpty(bytes32)", +"4d42b0e5": "getUserLogin(address)", +"4d42c7e4": "getTotalIndividualWeiAmount(address)", +"4d42c952": "destroyedToken()", +"4d42fc66": "gen0Profit()", +"4d437034": "getInvestedTokenBalance(address)", +"4d437a62": "TPCToken()", +"4d43bec9": "emitEvent(uint256)", +"4d4439fa": "ZipperMultisigFactory(address)", +"4d444fac": "isDepositAllowed()", +"4d4479a8": "FLC_address()", +"4d44f108": "checkProof(bytes32)", +"4d4549fb": "GDCNumber1()", +"4d4582a1": "submitChallenge(bytes32,bytes32)", +"4d461ed1": "completeSale()", +"4d46474a": "option10symbol()", +"4d474898": "mine(uint256)", +"4d474d63": "MAPT()", +"4d4765dc": "complete_buy_exchange()", +"4d47ae8c": "setPartyB(address)", +"4d47ce56": "seek(uint256,uint256,bool)", +"4d47feaa": "ShareholderDB(uint256)", +"4d480faa": "setMaxDelay(uint256,uint256)", +"4d486406": "addEmbassy(address)", +"4d492b50": "transferMulti(address[])", +"4d493f24": "maximumTokenIssue()", +"4d49451c": "candidateExchange()", +"4d4a919f": "bailout()", +"4d4aa77f": "getTicketDetails(int256,uint256,uint256,address)", +"4d4af36f": "setMins(uint256,uint256)", +"4d4b1a88": "addTokenTrust(address)", +"4d4b298e": "creditAccount(address)", +"4d4b3202": "getTrustedTransferSourceValue()", +"4d4ba1d7": "changeDivestFee(uint256)", +"4d4c277d": "MAINTENANCE_FEE_PERCENT()", +"4d4d2b1c": "hasVoted(address,address)", +"4d4eeaa8": "logoPng()", +"4d50169e": "distributionThresholds(uint256)", +"4d50d5f2": "firstPreSaleEndDate2()", +"4d51fad6": "Bittoq(uint256,string,uint8,string)", +"4d52a512": "getSoftCap()", +"4d536c03": "buySaleNonReferral(uint8)", +"4d536f9f": "validateNameExt(bytes)", +"4d536fe3": "doit()", +"4d53c30f": "t4tRaised()", +"4d547ada": "worker()", +"4d54dc96": "isNonlistedUser(address)", +"4d55a924": "KudosRouter()", +"4d561721": "etherandomSetNetwork()", +"4d562c82": "freezeProhibited()", +"4d563540": "HUN(uint256,string,uint8,string)", +"4d56a130": "BitfuryToken()", +"4d586512": "_rand(uint256,uint256)", +"4d589c5b": "curatorIDOf(address)", +"4d58e413": "pushDividendPaymentToAddresses(uint256,address[])", +"4d597b2d": "totalTokensCompany()", +"4d5a1173": "calculateMaximumBurnAmount(uint256,uint256,uint256)", +"4d5a225c": "ethCoin()", +"4d5ad11e": "getAnnualGrantsLength()", +"4d5b0081": "reward(address,address)", +"4d5b080c": "scheduleTransaction(uint256,address,uint256)", +"4d5b335d": "mintHeroAsset(address,uint256)", +"4d5b608b": "testTransfer(address)", +"4d5b85f1": "createLighthouse(uint256,uint256,string)", +"4d5c07aa": "CryptoSim()", +"4d5d528a": "FeibeiContract()", +"4d5de6ba": "stageThreeSupply()", +"4d5e58a4": "purchasedTokensRaised()", +"4d5e9a2a": "getInterestRatePunitory(uint256)", +"4d5eceac": "nextAssigneeIndex()", +"4d5f327c": "supportsToken()", +"4d5fc38a": "amountOfGames()", +"4d610837": "indPreSale()", +"4d61537f": "secretSigner()", +"4d620299": "postSale(address,bytes32,uint256)", +"4d622831": "getLast()", +"4d624906": "PriceChanged(address,uint256,uint256)", +"4d628c44": "setWagerWinner(uint256,address)", +"4d62a9da": "MindCoin()", +"4d62f83c": "_distributeAuctionTax(uint256,address)", +"4d655aff": "db()", +"4d65beb1": "getVipInfo(uint256)", +"4d66a3ab": "testtxorigin()", +"4d66d44d": "ArtToujourICO(uint256,uint256,uint256,uint256,uint256,address)", +"4d677d32": "Manager(address,address,address)", +"4d6804c2": "transferTokensFromVault(address,address,uint256)", +"4d68282f": "releaseFunds(uint256)", +"4d689543": "mmLibAddress()", +"4d6a26be": "tryOpenRoom(address,uint256,uint256,uint256)", +"4d6a304c": "GetLatestCheckpoint()", +"4d6a7d33": "collect(address,uint32[])", +"4d6a813a": "isCutieCore()", +"4d6aa2e5": "generateReferralAddress(address)", +"4d6aed53": "getIssued()", +"4d6b3d83": "Brave()", +"4d6bc04e": "totalPerTokenPayout()", +"4d6c3427": "REGULAR_TYPE_COUNT()", +"4d6c3b6b": "setCompte_4(string)", +"4d6f49b3": "updateChainlinkOracleWithENS()", +"4d6f58d5": "proveOwnership(bytes,int256)", +"4d70d1d7": "generateId(uint256)", +"4d712228": "Storesumdata(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,uint64)", +"4d71d6be": "finalizeDelegation()", +"4d720209": "withdrawDistributionCRL()", +"4d722c4c": "checkWinner(address)", +"4d729be4": "calculateFishermansFee()", +"4d730d51": "numOfPurchasedTokensOnEpBy(address)", +"4d73452e": "START_WEEK_3()", +"4d7439cb": "getBusiness(uint256)", +"4d7480ea": "_allowPublishSecret()", +"4d74d3b4": "setMetadataContractAddress(address)", +"4d754715": "burningEnabled()", +"4d7559a8": "totalGoldSupply()", +"4d7569ac": "TOKEN_SUPPLY_CROWD()", +"4d77551a": "eleventhTime()", +"4d782655": "confirmCertificate(uint256)", +"4d782cbc": "executeSellOrder()", +"4d78fdc6": "unblockAccount(address)", +"4d794cfc": "START_ETH_TO_CENTS()", +"4d79874e": "validateLandTakeover(address,uint256,uint256)", +"4d79ddb2": "getVotesForItemFromVoterIndex(uint256,uint256,uint256)", +"4d7a2052": "getTicketPrizeFromIndex(uint256)", +"4d7a7577": "DURATION_VIPPLACEMENT()", +"4d7ad1dd": "deleteProposal(bytes32,string)", +"4d7ad205": "gasRewardPercent()", +"4d7b8d2f": "DWBTICO(address,address,uint256,uint256,uint256,uint256)", +"4d7b9bd5": "checkBalance(address,uint256)", +"4d7ba587": "setDecider(address)", +"4d7bc8c9": "removeCompanion(address)", +"4d7c0192": "changeCanUpgrade(bool)", +"4d7c7485": "getActiveFlag(uint16)", +"4d7d003f": "dropCoinsSingle(address[],uint256)", +"4d7d13e1": "getUniqueIdOfPlayerByPlayerAndCountryID(uint256)", +"4d7d87b2": "prodTokens(address,uint256)", +"4d7d8a60": "marriageDate()", +"4d7d9a91": "transferCoadminship(address)", +"4d7dcfbd": "parseVarInt(bytes,uint256)", +"4d7e2a6a": "Token_Unlocked()", +"4d7e897f": "rollOne(address,uint8)", +"4d7ec628": "requestToken()", +"4d7ece70": "advisorVesting(address[],uint256[])", +"4d7edc15": "assignTokens(address,uint256)", +"4d7ee4ee": "changeGlobalOperator(address)", +"4d804e60": "WITHDRAWAL_TRIGGER_AMOUNT()", +"4d80bf14": "NewManager()", +"4d82f25c": "VestingTrustee(address)", +"4d831535": "allocatePVT_InvTokens(address[],uint256[])", +"4d83ffdd": "createUser(address,uint256,bytes32)", +"4d840bcc": "isWithdrawable()", +"4d843acd": "getSalaryTokensTotalAddress(uint256)", +"4d846a99": "getMin(uint128[])", +"4d846c8e": "getCurrentCandyAmount()", +"4d84ba37": "depositsAddress()", +"4d85006d": "Incredibles2RT()", +"4d853ee5": "founder()", +"4d8589c5": "getProofOfStakeRewardUpdateToken(address,address)", +"4d85b8d0": "checkEndOfChallenge()", +"4d86b498": "BucoTestCoin()", +"4d87a49b": "updateInvVault(uint256,uint256)", +"4d882c97": "EthPenis()", +"4d88a639": "getOrder(uint80)", +"4d88a8cf": "getExitBySlotId(uint64)", +"4d894d24": "getLevelByIndex(uint256)", +"4d8a666b": "EnterEntidadesdonaciones(address)", +"4d8a9310": "isCrowdsaleStopped()", +"4d8b7056": "Dd(address,address)", +"4d8bd784": "getGuestToken()", +"4d8c10a6": "AJCMToken()", +"4d8c3ea6": "getTxVoteDetails(bytes32)", +"4d8c61c1": "LogChangeTimestamp(address,uint256,uint256)", +"4d8caa7e": "setTokensPerWei(uint256)", +"4d8d9e92": "tokensPerSecond()", +"4d8dcc7a": "initDeposit(uint256)", +"4d8de4fc": "unbond(bytes32,uint256)", +"4d8e15f2": "KockToken()", +"4d8f00f4": "RatingsContract(address,address)", +"4d8fef1c": "produceWiner()", +"4d908a55": "InitiateCars()", +"4d909110": "EtherBank()", +"4d912393": "mintReservation(address[],uint256[])", +"4d918282": "addmoney(address,uint256,uint256)", +"4d91c096": "stakeCommence()", +"4d91d4f1": "incrementBasketsMinted(uint256,address)", +"4d9250c4": "TakeMyEther()", +"4d936889": "ConsentTemplate(string,uint256,string,string,string)", +"4d93d1db": "EventCreateAngel(address,uint64)", +"4d94994c": "lucky_number()", +"4d94cee7": "opetWallet()", +"4d9577af": "getFirstMilestoneStartsAt()", +"4d95a7a2": "tokensToRecieve(uint256)", +"4d95c76c": "activeCanvasCount()", +"4d964da6": "GBBCOIN(uint256,string,string)", +"4d96e062": "whenStakeCanBeReturned()", +"4d986c8f": "icoSalesSupply()", +"4d98a6ff": "createGroup(string,string,string,uint256,uint256,uint256,uint256,uint256,bool)", +"4d99055c": "getBonus(uint256,address,uint256)", +"4d9994e8": "setAccountNickname(string)", +"4d999756": "tokensPreICO()", +"4d9a3136": "findByName(string)", +"4d9a81d4": "IsDistribStarted()", +"4d9aa424": "crowdsaleEnd()", +"4d9b3735": "getFunds()", +"4d9b3d5d": "getbalance()", +"4d9b8fcf": "allowTransfer(address,bool)", +"4d9bcac4": "getProviderParameter(address,bytes32)", +"4d9c1bf3": "payTokenBatch(bytes32[],uint256[],address,address,bytes)", +"4d9e40af": "TOKEN_CREATORS_SUPPLY()", +"4d9e4e22": "Etheria()", +"4d9fb121": "Trade()", +"4d9fcee9": "getExportingAuthority()", +"4da07fe5": "getCardType(uint32)", +"4da0a4fc": "promoToken()", +"4da1397c": "durationOfLock()", +"4da1668d": "giftNFT(address,uint256,uint256)", +"4da1b25d": "weiFundingCap()", +"4da1e0b7": "cancelTokenSale(uint256,address,bool)", +"4da2317f": "payoutAll()", +"4da25c74": "triCmp(uint256,uint256)", +"4da2906b": "updateUser(bytes32,bytes32,bytes32,bytes32,bytes32)", +"4da2b48e": "getCat(uint256)", +"4da36913": "migrationIndex()", +"4da3b6db": "otherF3D_()", +"4da47ba0": "TokenSale(address,uint256)", +"4da51208": "OKMcoin(uint256,string,uint8,string)", +"4da5160f": "getFirstDocumentIdStartingAtValidFrom(uint256)", +"4da5598a": "syndicatePrecision()", +"4da5d4c0": "isEthernautsExplore()", +"4da5ed85": "disableContinuousDelivery()", +"4da74ee6": "setVoteIntention(uint256,bool,bool,string)", +"4da7c5d6": "LendingBlockTokenEvent(address)", +"4da837e3": "transferDevelopment(address)", +"4da845b3": "swapWinner()", +"4da86598": "getFileMd5(uint256)", +"4da8a771": "INHERITANCECrowdsale(uint256,uint256,uint256)", +"4da946d9": "TakeOffWorldwide()", +"4da9cb07": "LilithToken(uint256,string,string,uint8)", +"4daa1208": "SetPoolCreationFee(uint256)", +"4daaa98f": "doReward()", +"4daade18": "TravelCoinToken()", +"4daadff9": "extractCLNfromMarketMaker()", +"4dab54fd": "removeFromInxWhitelist(address)", +"4dab63ff": "_unpackItemData(uint256)", +"4dabb674": "changePhaseToNormalLife()", +"4dac7d6f": "renewableOf(uint256)", +"4dad66f5": "divForTank()", +"4dad9003": "transferManyLand(int256[],int256[],address)", +"4dadac8f": "STAKING_UNIT()", +"4daea42a": "TOWN_INCREASE_RATE()", +"4daf490c": "getFarm()", +"4daf890a": "invokeLottery()", +"4dafdc50": "exchangeId()", +"4db0040e": "createWonderNotAuction(string)", +"4db08aea": "SALE()", +"4db08e5b": "getSaleContractTokensMinted(address)", +"4db19e7e": "assertEq(bool,bool,string)", +"4db1ba5a": "repossessionBountyPerTen()", +"4db1c7b2": "changeId(uint256,uint256)", +"4db208ba": "Titanization()", +"4db2beef": "distroyToken(uint256)", +"4db347a3": "acceptChallenge(address)", +"4db3c6d7": "buyTokensWithReferal(address)", +"4db3da83": "scheduleCall(bytes4)", +"4db3eef8": "delegateFromBonus(uint88)", +"4db4eae6": "_topBonus()", +"4db4eff0": "hatchCoins(address)", +"4db52924": "setNumMessagesSigned(bytes32,uint256)", +"4db53a70": "VTest()", +"4db59565": "getHistoryRoundInfo(uint256)", +"4db5d52b": "getWagerOwner(address)", +"4db61d21": "compareNoCase(string,string)", +"4db6397f": "calculatePlayerValue(address)", +"4db77d9d": "getMaxJump(uint256)", +"4db8349e": "buyerToSentWeiOf(address)", +"4db8cbc9": "wordCounter()", +"4db94441": "limitAgentBets()", +"4db9bfe6": "getPostVoteCount(uint256)", +"4dbaa16b": "recoverLeftoversPreICO()", +"4dbac733": "INITIAL_RATE()", +"4dbb1964": "setSalesAgent(address)", +"4dbb37eb": "checkLeftToken()", +"4dbb4da5": "increaseMaxContribTime()", +"4dbb51f6": "Hashfex()", +"4dbbddff": "BOBTokenVesting(address,uint256,uint256,uint256,bool)", +"4dbbfcc6": "stageLength()", +"4dbc355a": "releaseTeam()", +"4dbdb0fd": "signUpForPVP(uint256)", +"4dbddc18": "getPoolID()", +"4dbe5889": "ownerClaim()", +"4dbf27cc": "follow(address)", +"4dbfb6fb": "PredictionMarket(uint256)", +"4dc0884f": "playerCards(uint256)", +"4dc08ce2": "GameWon(uint256,address)", +"4dc133a5": "stopTge(bool)", +"4dc13951": "vendingAttachedState()", +"4dc189ef": "createContractWhale(string)", +"4dc18c02": "finalSendTokens()", +"4dc1dbec": "priceToMint()", +"4dc266b4": "submitAnswerReveal(bytes32,bytes32,uint256,uint256)", +"4dc2c67a": "veriPass(string)", +"4dc3141b": "CalcAll()", +"4dc3ba8f": "assignVoterMoreVotes(address,uint256)", +"4dc3f289": "changeCommonDiscount(uint256)", +"4dc41210": "preStartTime()", +"4dc415de": "reject()", +"4dc43eaf": "setTreasury(uint256,uint256)", +"4dc49b25": "InitialPointUnit()", +"4dc59196": "icoAllocation()", +"4dc5c69f": "getTotalDiscount(address)", +"4dc5c771": "dividendsAccount()", +"4dc5fa4e": "MEDIA_SUPPORT_WALLET()", +"4dc65411": "GEM()", +"4dc666b3": "sendTokensManually(address,uint256,uint256)", +"4dc6b523": "divestFee()", +"4dc73428": "transferFromByModule(address,address,uint256,bool)", +"4dc7cc55": "terminateAlt()", +"4dc7d31b": "transferRwrd(uint256)", +"4dc8ed02": "ICObonusStages(uint256)", +"4dc936c0": "mintItem(uint256,address)", +"4dc958e1": "addToBounty(uint256)", +"4dc996d5": "updatetoken(string,string,string,string)", +"4dca2770": "BecomeMemberCandidate(bytes32)", +"4dcad927": "tokensSoldTotal()", +"4dcb05f9": "depositBond(uint256)", +"4dcbb8ee": "getAllAuditors()", +"4dcc889d": "Conference(string,uint256,uint256,uint256,string)", +"4dcd4fb1": "MetaChanged(bytes32,bytes32,bytes32)", +"4dcd85d8": "setPriceOfApis(uint256)", +"4dce4142": "opVaultAddr()", +"4dcee2e0": "hashes(uint16)", +"4dcf2917": "allowUpgrades()", +"4dcf7430": "receiveTokenLoot(uint256[],uint256,uint8,bytes32,bytes32)", +"4dd0f157": "getWinnerType(uint256)", +"4dd12329": "rightSharePrice()", +"4dd19434": "getLeaf2(uint256)", +"4dd1e81c": "tokenBuyable(uint256,uint256)", +"4dd33832": "tokensSoldAtIco()", +"4dd36a0e": "buyTokens(uint8,address)", +"4dd37f19": "getHashRateOfCurrentHalving(address)", +"4dd3e575": "endMinting(bool)", +"4dd4547d": "fireOnChanged(bytes32,uint256[])", +"4dd49680": "SetEvaluate(uint32,uint8,uint8)", +"4dd49ab4": "get(bytes,uint256)", +"4dd49e08": "deliverTokens(address,uint256)", +"4dd5df8c": "setPOOL_edit_16(string)", +"4dd60ff9": "buyNDC(uint256,uint256,uint8,bytes32,bytes32)", +"4dd7f293": "Kayako()", +"4dd83243": "hasNextKey(uint256)", +"4dd83cb1": "refreshPublicFundingTime(uint256,uint256)", +"4dd850fb": "UfoPonzi()", +"4dd8aefd": "DTT()", +"4dd93bd3": "getInvestmentValue()", +"4dd9e437": "transferUserToUser(address,address,address,uint256)", +"4dda1764": "CafeMaker()", +"4dda71a8": "newAuction(uint128,uint256,uint256)", +"4ddad616": "genesMarket()", +"4ddb5f01": "ROPCOIN()", +"4ddbf2b3": "teamTokenFund()", +"4ddc36df": "renounceClearingPriceValidator()", +"4ddc8f74": "SPEX()", +"4ddd108a": "money()", +"4ddd648b": "buyer_profit_pool_amount()", +"4ddddd4c": "SearchIPR(string)", +"4dde3fe1": "redemptionAddress()", +"4dde88ad": "getGroupMembers(uint256,uint256,uint256)", +"4dde8de6": "registerUBetCheck(address,string,string,string,uint256,string,int256)", +"4ddf6795": "getVoteRulesOfProposal(uint256)", +"4ddfd20f": "offer_id()", +"4de0089a": "becomeHipstermaster()", +"4de037c7": "getTitulaire_Compte_8()", +"4de0cdf2": "setICOParams(uint256,uint256,uint256)", +"4de1454f": "targetReached(uint256)", +"4de16053": "getLockProductCount()", +"4de162e4": "extractAccountLength()", +"4de1fc55": "submitAnswer(uint256[],uint256[])", +"4de2578c": "reproduce(uint8,address,uint256)", +"4de260a2": "hack()", +"4de261ef": "presalecap()", +"4de2d5d5": "checkPrize()", +"4de2eee9": "zapVillain(uint256,uint256)", +"4de2f146": "SentAmountToNeighbours(uint256,address)", +"4de315ea": "unlockAddressToken(address)", +"4de4145f": "_transferSenderPaysFee_byProxy(address,address,uint256)", +"4de4f479": "RiskPrice()", +"4de504cd": "setTransferLockFree()", +"4de5120e": "lastWithdrawalTime(address)", +"4de62cd6": "removeGemmyMusicLock(address)", +"4de799c2": "cancelTeamWithdrawal()", +"4de85639": "failDivideFractionalByZero()", +"4de8a799": "addPrivateSaleBuyer(address,uint256)", +"4de90f34": "minForNewTopic()", +"4de94320": "logic_contract()", +"4de946bf": "ideaProofDocument(bytes,uint256)", +"4de952c7": "cmulpow2(address,uint256)", +"4de970fd": "RATE4()", +"4de9e482": "ENDHarvest()", +"4dea208b": "upgradeKingdomType(string,uint256)", +"4dea4d15": "setConfig(uint64,string,uint256,uint256,address,string)", +"4deaad5f": "reverseBytes(uint256)", +"4deb68a3": "auctionStart(bytes32,uint256,uint256)", +"4deb9f47": "UnlockRig(uint8)", +"4deba2e0": "LogCreateToken(address,uint256)", +"4dec1014": "stageFokenCap(uint16)", +"4dec5dc4": "employeeExerciseOptions(bool)", +"4dec9b57": "testView()", +"4ded452e": "InviteCreated(address)", +"4ded6e89": "airdropParticipants()", +"4ded9bfe": "releaseMultiAccounts(address[])", +"4dee529a": "Muggelo()", +"4def0453": "setContentURI(uint256,string)", +"4defd1bf": "setCrowdsaleManager(address)", +"4df0b78a": "withdrewThisYear()", +"4df0ca7e": "EarlyAdoptersAddress()", +"4df17cdc": "maxEtherInvestment()", +"4df28ae4": "capTime()", +"4df34124": "RyxEx(address,address,address,uint256,uint256,uint256)", +"4df3ad68": "setTokenPriceInCent(uint256)", +"4df498b2": "getPreSaleEnd()", +"4df53a0f": "testSetApprovalDb()", +"4df62441": "percentOfPresaleSold()", +"4df65873": "getDefaultRgb(address)", +"4df679e3": "BonusAllocation(address,string,string,uint256)", +"4df68ada": "enable(bool)", +"4df6b45d": "delegateTransferFrom(address,address,uint256,address)", +"4df6ca2a": "setQuestionFee(uint256)", +"4df6d6cc": "allowedRecipients(address)", +"4df7e3d0": "b()", +"4df86126": "SECONDS_PER_HOUR()", +"4df93196": "Joe223()", +"4dfa2722": "CryptoWuxiaVoting()", +"4dfa3f18": "createNewUser(string,string)", +"4dfad511": "_redeem(address,uint256)", +"4dfb10bc": "realVotedSupply()", +"4dfb4807": "etherTotal()", +"4dfc7aa1": "existsDistrito(uint256)", +"4dfc97c5": "policyTokenBalance()", +"4dfcf67a": "NeroSupply()", +"4dfd14b2": "EMACCrowdsale(uint256,uint256,uint256,address,address)", +"4dfd1b02": "setUint8(int8,uint8)", +"4dfd964f": "TSTCallAPI()", +"4dfdc21f": "maxNum()", +"4dfdebe9": "ClientQty()", +"4dfe13e7": "distributeTokensToWallets(address[])", +"4dfe28e7": "releasedTokenOf(address)", +"4dfe950d": "purgeUpgrade()", +"4dfff04f": "approveSiring(address,uint256)", +"4e010942": "LogOraclizeCallback(uint256,bytes32,string,bytes)", +"4e0128fb": "watchPrice()", +"4e012918": "whitelister_address()", +"4e017994": "capEth()", +"4e01bb60": "RefundPeriodOver()", +"4e01bd10": "emergencyTokenWithdrawal(uint256)", +"4e02107a": "getWeddingData()", +"4e022f11": "setSpark(address)", +"4e023fc9": "FakeXUC()", +"4e028c67": "SAC()", +"4e02ed40": "CESCoin(uint256,string,string)", +"4e039d26": "setPreallocationWhitelist(address,bool)", +"4e0416a6": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", +"4e054a67": "setBlacklist(address)", +"4e05ded6": "ClassicCheck()", +"4e06369c": "getPurchasableAmount()", +"4e077f2a": "addGasEther()", +"4e07a7a5": "thirdStageMinted()", +"4e088eb7": "stopPrivateSale()", +"4e0896a1": "teamIndexToExist(uint256)", +"4e0a0f21": "preICOstartTime()", +"4e0a3379": "setCFO(address)", +"4e0ade00": "SmartWallet(address,address,address)", +"4e0b7888": "_updateStage()", +"4e0ba39d": "reserveAdd(uint256,uint256,uint256,uint256)", +"4e0be991": "removeChild(address,address)", +"4e0c4a9c": "setCommissioner(address)", +"4e0ce969": "moduleToken(uint256,uint8)", +"4e0d93a3": "increasePriceForNeighbours(uint256)", +"4e0e9675": "isIdentity(address)", +"4e0f1064": "getMonthlyTransactionVolumeReceiving()", +"4e102951": "can_claim(address,address,address)", +"4e1053cc": "RobinHoodPonzi()", +"4e10c212": "TxAttackWallet()", +"4e10c3ee": "transferWithoutReward(address,uint256)", +"4e116eb8": "unRegisterCertificationDb(address)", +"4e1243b6": "AddClaim(uint32,string,bytes32,bytes32,address,uint32)", +"4e1273f4": "balanceOfBatch(address[],uint256[])", +"4e12e51a": "getBonusList()", +"4e1339fe": "HALT()", +"4e13f066": "RedSoxRays48()", +"4e140274": "isDiscount()", +"4e1415ab": "testThrowExecuteSellOrderDaoChallengeRefusesZeroFunds()", +"4e14e4c8": "CyberCapitalInvestToken()", +"4e153418": "CreateLottery(uint32)", +"4e159a05": "clacCooperateNeedLockAmount(uint256)", +"4e15dfe9": "wholeTokensPerEth()", +"4e16bef5": "jack_max()", +"4e16e0c7": "participantCanParticipate(address)", +"4e18405d": "TOTAL_ARK()", +"4e18c1a7": "IcoPhaseAmountsChanged(uint256,uint256,uint256,uint256)", +"4e191701": "lamboPresaleAddress()", +"4e194cc0": "getCreateFeeToken()", +"4e195faf": "totalEthereumRaised()", +"4e19c112": "deleteOwner(address,uint8)", +"4e1a150b": "netherToken()", +"4e1a1853": "ParentCoinAddress(address)", +"4e1a50b7": "setBonuses(uint256,uint256,uint256,uint256)", +"4e1bdfdf": "withdrawOlder()", +"4e1cfa8c": "batchAddCandidateByIndex(uint256,address[],bytes32[],bytes32[])", +"4e1dc0d7": "LAYA()", +"4e1f6c14": "FUTURE_WALLET()", +"4e1fa837": "TestERC721()", +"4e205cee": "signedApproveAndCallHash(address,address,uint256,bytes32,uint256,uint256)", +"4e209678": "testFailBreach()", +"4e2133ba": "addExchangePartnerAddressAndRate(address,uint256)", +"4e21f25e": "soldPresale()", +"4e22102b": "LIMITS_END_DATE()", +"4e2280c4": "clearQuickBuyPath()", +"4e228d8f": "ExchangeableToken(address)", +"4e23176c": "buyRBCTokens()", +"4e232730": "ownerOn(address)", +"4e233065": "delKeyValue(uint256,bytes32)", +"4e23a144": "fundUser(address,uint256)", +"4e25658e": "setSegment(string,uint32,uint32,string,string,string,string)", +"4e2567d0": "addToAccountList(address)", +"4e25c92e": "ttlSply()", +"4e2611ae": "vnetToken()", +"4e2659a8": "createTeam(bytes32,bytes3,bytes3,bytes3,bytes3,bytes3,bytes3)", +"4e26c95e": "EASYLIFE(uint256,string,string)", +"4e272768": "remove_bounty()", +"4e2743b3": "setStack(uint256,uint256)", +"4e275295": "tokensSell()", +"4e2786fb": "roundNumber()", +"4e27e916": "voteLock(address)", +"4e2808da": "cancelOwnership()", +"4e280fd6": "SolarioToken()", +"4e284af1": "INCENT_FUND_NON_VESTING()", +"4e285acb": "setsendgoods(uint256)", +"4e29cba6": "disbursements(uint256)", +"4e2a953a": "gameStartedAt()", +"4e2aae36": "setzUint256(uint256,int256)", +"4e2ab933": "transferFrom(address,address,uint256,bytes,string)", +"4e2ad943": "mainSaleBonusEndTime()", +"4e2b57fe": "mincap()", +"4e2ba115": "DFVToken()", +"4e2bd9ce": "rescind(address)", +"4e2bdfd4": "getBetMutableData()", +"4e2c9524": "upgradeDuties()", +"4e2de9e1": "setGzeBonusOffList(uint256)", +"4e2e8a10": "setTime3(address,uint256)", +"4e2e94f7": "MAX_PRE_SALE_AMOUNT()", +"4e2f220c": "createCentralizedOracle(bytes)", +"4e2f2af4": "PayoutRedemption(uint256,uint256,uint256)", +"4e2fa68f": "crowdsaleStarts()", +"4e2fd44e": "setPriv(address)", +"4e304bfb": "CRAIC()", +"4e30506f": "dropLast()", +"4e30a66c": "safeToAdd(uint256,uint256)", +"4e317ead": "cancelTemplateProposal(address,uint256)", +"4e31aea3": "firstThawDate()", +"4e329bd3": "HealthCoin(uint256)", +"4e358ce7": "DITCOIN()", +"4e35aacf": "createCompany(string,uint256)", +"4e360eaf": "EmergencyStopActivated()", +"4e3673a6": "connectCrowdsaleContract(address)", +"4e36fddf": "XdacTokenCrowdsale(address,uint256[],uint256[],uint256)", +"4e37af4e": "offlineCallback(bytes32)", +"4e38413f": "setBytes32(bytes32,bytes32,bytes32,bool)", +"4e385512": "setCampaignValidity(bytes32,bool)", +"4e38f205": "generateWithdrawalHash(string,uint256,address)", +"4e390f2a": "initLottery(uint256,uint256,uint256,uint256)", +"4e395e2a": "isExecutable(uint256)", +"4e3acafe": "Cr1tikalIsShort()", +"4e3b33d4": "prepareRefund()", +"4e3b52fe": "metaCoin()", +"4e3c2f47": "getCardDivs(uint256,uint256)", +"4e3c50a0": "addBuyTokensRequest(address,string,string)", +"4e3d2745": "ManoloToken()", +"4e3d539a": "newChainlinkWithENS(address,bytes32)", +"4e3dc2f1": "STAT_MAX()", +"4e3df857": "removeEA(uint32)", +"4e3e4035": "notEqual(int256,int256,string)", +"4e400bda": "getSenderStatus(address,uint256)", +"4e406167": "setContractICO(address)", +"4e4081ef": "pregnantBots()", +"4e41108d": "Bank()", +"4e417a98": "callData()", +"4e41a1fb": "symbol(uint256)", +"4e41ebf6": "createCommissionerAuction(uint32,uint256,uint256,uint256)", +"4e42b632": "WEBcoin()", +"4e43502a": "BDSMTOKEN(uint256,string,uint8,string)", +"4e43603a": "getUserStats(address)", +"4e448ffa": "winnerLuckyNumber()", +"4e44b5cc": "Kiwi(address,uint256,string,string,uint8,uint8)", +"4e44c855": "setGameStatus()", +"4e44d956": "configureMinter(address,uint256)", +"4e458cc2": "setNewEndTime(uint256)", +"4e458eb6": "posstoken()", +"4e45fba9": "getProviderDetails(address,uint256)", +"4e46869c": "accountAndSubcourtIDToStakePathID(address,uint96)", +"4e46fc2c": "finalizePreICO()", +"4e47d99a": "WubCoin(address)", +"4e4831d8": "removeDelegatorById(uint256,address,address)", +"4e485c52": "closeTransfer()", +"4e48a495": "checkTransfer(address,address,uint256,uint256)", +"4e4965ff": "AIPAY()", +"4e49954e": "createReceipt(address,string)", +"4e49acac": "setParams(address)", +"4e4a8c0d": "sendMessage(address,uint256,uint256,bytes)", +"4e4ab830": "amIOwner()", +"4e4ac577": "claimFeesForRound(address,uint256)", +"4e4afa1b": "minimumTickets()", +"4e4cf65c": "forwardMoney()", +"4e4d02db": "DeathFactor_iii()", +"4e4d3e56": "get_funds_left_for_reinvestment()", +"4e4e2d6d": "PaymentForwarded(address,uint256,uint128,address)", +"4e4e7862": "addWithdrawal(address,address,uint256)", +"4e4f776c": "TCT(uint256,string,uint8,string)", +"4e4fbee1": "renounceProxyManager()", +"4e4fe306": "getData(uint256,uint256)", +"4e500760": "CreditUnits()", +"4e504313": "Addr3()", +"4e505367": "initialTokenAmount()", +"4e51193b": "sealTimestamp()", +"4e5141eb": "buyTokens(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"4e5146a9": "hexToAscii(uint8)", +"4e520a94": "getNumRecords(address)", +"4e521a2a": "INCUToken()", +"4e523b91": "MonethaToken(address,uint256)", +"4e52622b": "eth6DivsOwing(address)", +"4e52678e": "digix()", +"4e53a0b9": "update(address[],uint256[],uint256[],uint256[])", +"4e53b564": "adminTransferContractBalance(uint256)", +"4e542bff": "_triggerPVPSignUp(uint256,uint256)", +"4e542c5f": "deleteById(uint256)", +"4e543b26": "setResolver(address)", +"4e5497de": "BuyoutDividend(address,address,uint256,uint256,uint256)", +"4e55936d": "NorthPoleMintingEnabled()", +"4e56925f": "updateMasternodeAsTeamMember(address)", +"4e57d27d": "_getAllRevisionTimestamps(bytes20)", +"4e58e920": "officialFacebook()", +"4e599551": "getPreviousWinners()", +"4e59f947": "SucToken()", +"4e5a33c5": "executeTokenRepartition(uint256)", +"4e5aabe6": "resetStellarBalance()", +"4e5ac744": "PDPCoin()", +"4e5acb1a": "changeAutherOwner(address)", +"4e5b0d29": "getVisaEntered(address,uint256,uint256)", +"4e5b3cb8": "EtherusPreSale(address,address,address,address)", +"4e5b5f54": "purchasePresale(address,uint256)", +"4e5bec6e": "addTypeAddressById(uint256,address,address,uint256)", +"4e5c0595": "tokenAdvisorsAllocated()", +"4e5d49a0": "DariumToken(address)", +"4e5d7186": "LogAccountRegistered(address,address,bytes32,bytes32,bytes32,bytes32)", +"4e5d793f": "setAsset(address,uint256,uint256,uint256)", +"4e5d8edd": "VOLUME_70()", +"4e5ed65b": "_indexAccount(address)", +"4e5f13bc": "landPriceCurrent()", +"4e5f8751": "newInvestWallet(address)", +"4e60321d": "userOddsMiniGame(address)", +"4e605688": "setBtcBuyer(address)", +"4e6093f8": "HeirChanged(address,address)", +"4e6106c5": "getRealisation()", +"4e61c362": "transferMul(address,uint256)", +"4e61df06": "DigixbotEthereum(address)", +"4e61efc5": "getWizzTypeOf(uint256)", +"4e637fab": "DepositsTransferred(address,uint256)", +"4e659145": "levPerUser()", +"4e6630b0": "ethBalance()", +"4e68354e": "LogLockStateTransition(uint8,uint8)", +"4e6885f3": "depositPresale(address)", +"4e6944cf": "totalStaticoinSupplys()", +"4e696d3c": "startCoinSale(uint256,address)", +"4e69d560": "getStatus()", +"4e6ab570": "insert_order(address,bool,uint32,uint128)", +"4e6b29ee": "returnIsParentAddress(address)", +"4e6b558a": "removeVerifiedAddress(address)", +"4e6b97f3": "transferMultiSameVaule(address[],uint256)", +"4e6ba0a9": "testCreateCostMultisig()", +"4e6c61aa": "testFailAddForeignChildNotChild()", +"4e6d1405": "invoices(uint256)", +"4e6d35ea": "currentlyReleased()", +"4e6d739d": "getSupernovaBalance()", +"4e6d73da": "LogUserUserRemovedFromWhiteList(address)", +"4e6e5d69": "unMint(address)", +"4e6e6928": "latestFriend()", +"4e6ec247": "_mint(address,uint256)", +"4e6f42ba": "changeSeizedTokensWallet(address)", +"4e6fedb7": "remainOfStage(address,uint256)", +"4e705549": "setDefinition(uint8,uint8,uint8,uint8,uint8)", +"4e7073f1": "setMinETH(uint256)", +"4e70a604": "Withdrawal(uint256)", +"4e70b1dc": "num()", +"4e7196c7": "setReg1(uint256)", +"4e71d92d": "claim()", +"4e71e0c8": "claimOwnership()", +"4e724f0f": "numBlocksLocked()", +"4e725b7a": "test_hasClaimableShares_nonZeroClaimableStake()", +"4e72ec91": "setPointer(uint8)", +"4e72f19e": "SendFundsToReceiver(uint256)", +"4e730025": "register(uint256,uint256,uint8,uint8,uint8,uint8,string)", +"4e7343ea": "verifyOrder(address,uint256,uint256,address)", +"4e7344d5": "ABitcoin()", +"4e7355d6": "RegistrantRemoval(address)", +"4e7445c8": "drainRemainingToken(address)", +"4e7455d0": "createMilestones(uint256,bool,uint256)", +"4e7602d3": "setRecipients(address[])", +"4e761a91": "STEP_SIZE()", +"4e7654fe": "buyTokens(uint256,uint256,bytes16,uint256,uint8,bytes32,bytes32)", +"4e76a725": "test_withAssertTrue()", +"4e76a846": "numParticipants()", +"4e76f5d2": "GetMinimumBet_ether()", +"4e77a38e": "releaseTrickleDownBonuses()", +"4e78e0c2": "setVerificationSlashingPeriod(uint256)", +"4e79909c": "WithdrawalApproved(uint256,uint256,bool,uint256,bytes)", +"4e79fd7c": "stepLockedToken()", +"4e7a540b": "doUpgradeInternal(address)", +"4e7a6978": "PersianTokenICO(uint256,uint256)", +"4e7ad367": "fireEventLog1Anonym()", +"4e7b1ce1": "PayNihilumToContract()", +"4e7ceacb": "getFeeAddress()", +"4e7cff38": "toBytes20(bytes,uint256)", +"4e7d656a": "EtherSpermBank()", +"4e7dbb29": "TTARD()", +"4e7e96f1": "buyBackInvestedValue()", +"4e7ec0e4": "setGlobalTimeVault(uint256)", +"4e7ec7e3": "RANGEEND_6()", +"4e7f1264": "leaveMessage(string)", +"4e7f9b19": "getReport(uint256)", +"4e80f241": "YCStandardToken(uint256,string,uint8,string)", +"4e8127f6": "icoSupply()", +"4e815698": "removeBlacklistAddress(address,address)", +"4e8182c8": "addJugada(uint256,string,string,uint256,uint256)", +"4e81b17d": "createMonthlyBill(uint8,uint256,uint256)", +"4e81eec9": "EventProductEndSale(uint32)", +"4e8204a4": "NewRoundStarted(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"4e82844d": "countWishes()", +"4e82c134": "getAddressFromUsername(string)", +"4e83977a": "validationWallet()", +"4e840bea": "IGTToken()", +"4e84c614": "getWaitingState()", +"4e85a0e1": "cancelVoteForCandidateByIndex(uint256,address,uint256)", +"4e860ebb": "disableTokenIssuance()", +"4e876ecc": "directSellRate()", +"4e87c715": "DEFAULT_INITIAL_COST()", +"4e880082": "distributeTheSameAmountOfTokens(address[],uint256)", +"4e89eb98": "bonusDicrement()", +"4e8a411b": "deallocate(address,address,uint256)", +"4e8afc5f": "getRegister(string,bytes32)", +"4e8b759c": "BuyOrdersOf(address,uint256)", +"4e8b75d0": "IRtokenChain(uint256,string,string)", +"4e8be64d": "TokenToken(uint256,string,string)", +"4e8c185b": "setFeePropMaxGlobal(uint256)", +"4e8c2927": "FreeToken()", +"4e8eaa13": "cancelAuction(uint256,address)", +"4e8ec73e": "jockeyPr(uint256)", +"4e8f05d1": "setGrowthTokensWallet(address)", +"4e8f7fdf": "allocateTokenForTeam(address)", +"4e8fb35c": "referralBountyTokensAddress()", +"4e91025e": "Liquidate(address,uint256,uint256,uint256,uint256)", +"4e91ca3a": "updateModuleStatus(address,bool)", +"4e91db08": "setBytes32(bytes32,bytes32)", +"4e91f906": "getNewPetCard(uint8,uint8)", +"4e922731": "calcRefBonus(uint256)", +"4e926eab": "getInviteePIDs()", +"4e9282af": "setBDApprove(uint256,bytes)", +"4e930483": "addbtycmoney(address,uint256)", +"4e9384da": "addSecondPreferences(bytes32[],bool)", +"4e938539": "preSaleSecondBonus()", +"4e93bf32": "maximumBuyBackAmountInWEI()", +"4e9466f7": "withdrawToMany(address[])", +"4e94917a": "Claim_TRAC_20000()", +"4e94c829": "getAugur()", +"4e94fbcf": "setIntervalCoefficient(bytes2,uint256,uint256,uint256)", +"4e954f87": "IsEthereum()", +"4e961921": "getCurrentTokenRate()", +"4e96ea53": "addContract(address,address,address,string)", +"4e97bcfc": "EmergencyStop()", +"4e98323c": "setReturnAgent(address)", +"4e9833ac": "changeHoldingTaxInterval(uint256)", +"4e989a5b": "importPlayers(address,address[])", +"4e98a5b3": "receiveAssets(uint256)", +"4e99b800": "tokenBaseURI()", +"4e9b5db0": "BASEPRICE()", +"4e9c6b1f": "million()", +"4e9cc134": "JPG1Token()", +"4e9cf5b1": "changeOperational(bytes32,bool)", +"4e9de828": "registerAuthContract(address)", +"4e9e456b": "oraclize_query(uint256,string,bytes[1])", +"4e9ec8a6": "transferETHtoContract(uint256)", +"4e9ee738": "test_8_basicTransfersBetweenAccounts_increaseBlocksBy300()", +"4e9f0f06": "GimmerTokenSale(address,address,uint256,uint256)", +"4e9f9d37": "startTimeTwo()", +"4e9faaba": "_sell(address,uint256)", +"4e9feee6": "changeFrozenTime(uint256)", +"4ea05686": "countSet()", +"4ea0db6c": "HardCapReached(address,uint256)", +"4ea10c74": "FounderAllocationTokens()", +"4ea14479": "setProjectToVerify(address,uint256)", +"4ea1fcb6": "getWithdrawAmount(address)", +"4ea201cc": "betInfo()", +"4ea28ee6": "MyToken(uint256,uint256)", +"4ea2ea9f": "allocLastTxRewardByHand()", +"4ea2f66a": "_claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"4ea34cdb": "getActionContract(address)", +"4ea37fec": "presaleStartTimestamp()", +"4ea412f4": "setPrice3(uint256)", +"4ea44358": "setGen0Step(uint256)", +"4ea5195a": "participantRoundCalced(address,address,uint256)", +"4ea5a6ac": "getRocIndexToOwner(uint256)", +"4ea611cd": "setPartnerDurance(uint256,uint256)", +"4ea640da": "ManoAntrasToken()", +"4ea66c38": "buyinInternal(address,uint256)", +"4ea6c89e": "isPreviousStageFinalized()", +"4ea73b07": "APOTokenCrowdsale()", +"4ea7d483": "priceStar5Now()", +"4ea801c5": "writeRate(string,uint256)", +"4ea8b6d0": "changeProfilePicture(bytes32)", +"4ea9560e": "FoshaAirdrop()", +"4ea9a27a": "registerHolder(bytes32,address,uint256)", +"4ea9ea71": "_submitTransaction(address,uint256,bytes,bytes,address)", +"4eaaad7b": "left72(uint256)", +"4eab38f4": "depositReclaim(uint256,uint256)", +"4eab3998": "Allocations()", +"4ead4771": "getBIDList()", +"4eae51f4": "getHeirs()", +"4eae8e30": "isSenderApprovedFor(uint256)", +"4eaef8a2": "getCEOHashing(address,uint256)", +"4eb03f6e": "updateMinter(address)", +"4eb054e6": "createPinMoTrade(bool,uint256,uint256)", +"4eb06f61": "manualLockFunds()", +"4eb09bf4": "getParametersHash(uint256,uint256,uint256,uint256,address,address)", +"4eb1483d": "IcoAddress()", +"4eb166af": "right73(uint256)", +"4eb1e71c": "HashTestCoin()", +"4eb1f578": "saleValve(bool)", +"4eb21301": "currentSaleCap()", +"4eb259aa": "burnAndReturnAfterEnded(address)", +"4eb2a8fb": "Banear_Oraculo(address)", +"4eb3148e": "feesTakenFromPrize(uint256,uint256)", +"4eb333c7": "setSynthesizingAuctionAddress(address,address)", +"4eb37fe7": "Tournament(uint256,uint256,uint256,uint256,uint256)", +"4eb396cd": "mintByMintable(address,uint256)", +"4eb421e5": "MockFailUpgradeableToken()", +"4eb4fe80": "getBackLendingItem(uint64)", +"4eb5162e": "collectSellFee()", +"4eb56999": "claimRefundVaultOwnership()", +"4eb665af": "setLockDuration(uint256)", +"4eb7221a": "nameRegistry()", +"4eb7d857": "getSite(uint256)", +"4eb81ba4": "getSchellingRoundDetails()", +"4eb8ffb4": "ORACLIZE_GAS_LIMIT()", +"4eb933bf": "withdraw(bytes32[],address[],uint256[],uint64[],uint8[],bytes32[],bytes32[])", +"4eb94102": "setAuctionManagerAddress(address,address)", +"4eb94872": "Err(string)", +"4eb95b97": "DropNotice(uint256,string,string,string)", +"4ebab5cf": "specificApprove(address,uint256)", +"4ebc31f3": "managerETHcandidatAddress()", +"4ebc7a9c": "processReinvest(address,bool)", +"4ebcdc2b": "SwapStarted(uint256)", +"4ebd7741": "extraMint(address)", +"4ebe2d46": "createMultisig()", +"4ebfa8bc": "getUserBettingInfo(address,uint256)", +"4ebfd6e8": "freeForAll()", +"4ebfff02": "setAddressAPI(address,address)", +"4ec06982": "paybackToDepositer(address,uint256)", +"4ec0744d": "UtrustToken()", +"4ec109f4": "receiveToken(address,address,uint256)", +"4ec1646d": "claimFreeAnimalFromAnimalFactory(string,string)", +"4ec18db9": "poolSize()", +"4ec19512": "calculateRunway()", +"4ec1adf1": "callAMethod2(uint256)", +"4ec24fa0": "getManagementProxy(uint32,int256)", +"4ec2b417": "getBankKYC(address)", +"4ec2cde6": "totalSupplyForCrowdsaleAndMint()", +"4ec2d0b6": "buyMiner(uint256[])", +"4ec32507": "parentBlockInterval()", +"4ec42e8e": "antToken()", +"4ec4878b": "donateJackpot()", +"4ec6396d": "TransChain()", +"4ec6a61a": "InitializeCoinToUser(address)", +"4ec70fde": "publicMin()", +"4ec7344e": "MetaFoxToken()", +"4ec735ae": "revokePermission(address,address,bytes4)", +"4ec79937": "approve(bytes32,bool)", +"4ec7a6e7": "externalSale(address,uint256,uint256,uint256)", +"4ec7b58b": "delSaleOwner(address)", +"4ec7ddc0": "addCommitteeVote(address)", +"4ec883d1": "editRestrictedAddress(address)", +"4ec8a8ff": "unpausecontract()", +"4ec9ef9c": "calculateTokenPurchase(uint256,uint256)", +"4eca4b19": "sendCoins(address,address,uint256)", +"4ecb02aa": "firstTierDiscountUpperLimitEther()", +"4ecb1390": "saleTokens(address,uint256)", +"4ecb35c4": "confirmations(address)", +"4ecb5e79": "IamGROOT()", +"4ecb8d0f": "transferOwnershipSend(address)", +"4ecc6eab": "setDefaultBuyerLastPaidAt(uint256)", +"4ecc7f59": "assignPreicoTokens()", +"4ecd4aa9": "createRequestAsPayeeAction(address[],bytes,int256[],address,bytes,string)", +"4ecd73e2": "DistributeDividends(uint256)", +"4ecd81b3": "redeemUTXO(uint256,bytes32[],bytes,bool,uint8,bytes32,bytes32,address)", +"4ecdf165": "rareIdRange()", +"4ece90a8": "getERC20()", +"4ecf77d3": "getUnfinishedGames()", +"4ed0694f": "kkICOTest77()", +"4ed0efd1": "selfdestructs()", +"4ed250bf": "freezeTime(uint256,uint256)", +"4ed3881e": "setTokenTransferIdentifier(string,bytes4)", +"4ed3885e": "set(string)", +"4ed4831a": "all(bool[7])", +"4ed4d42a": "transferTokenAddress(address)", +"4ed577bb": "IssuedToken(string,string,uint256,uint256)", +"4ed600d1": "confirmVestingSchedule(uint256,uint256,uint256,uint256)", +"4ed767a1": "totalFinalised()", +"4ed7cb10": "XXXXXXXX10(address)", +"4ed8579e": "setGPSMaxEth(uint256)", +"4ed87713": "ADVISORS()", +"4edac8ac": "num_claimed()", +"4edba7bf": "adapterEnabled()", +"4edbca6e": "getCategory(uint256,uint256)", +"4edbe9f7": "MintCommandBonus()", +"4edc689d": "allowAddress(address,bool)", +"4edc8ccf": "registerEIP777Interface()", +"4edccd31": "replace_square(uint256,bool,uint256,address)", +"4edce4e1": "push(int256,bool)", +"4edd0d07": "setConsumeTokenAddress(address)", +"4edd74e8": "reservesBalance()", +"4eddbd8d": "getCurrentPrice(uint128,uint128,uint24,uint64)", +"4eddcf5b": "setReleaseBlockNumber(uint256,uint256)", +"4ede23c8": "addressNotNull(address)", +"4edefd31": "setExpireDelay(uint256)", +"4edefe83": "doBroadcast()", +"4ee0ab0d": "forceEnd()", +"4ee0b9a9": "DaoHubVerify()", +"4ee0cb8a": "CutieBit()", +"4ee0cd98": "setFundMintingAgent(address)", +"4ee0d066": "setTotalsContract(address)", +"4ee16aba": "contributeToPurse(uint256)", +"4ee1d045": "secPerBlock()", +"4ee29ec5": "getNumberOfAssertions(uint128)", +"4ee2a3df": "setTargetDiscountValue2(uint256)", +"4ee2cd7e": "balanceOfAt(address,uint256)", +"4ee3659d": "AGC()", +"4ee3ad07": "HareemCoin()", +"4ee3c579": "DurioToken(string,string,uint8,uint256)", +"4ee3dc91": "publicToken()", +"4ee4d731": "enableMETTransfers()", +"4ee4d8fa": "isGlobalConstraintRegistered(address,int256,address)", +"4ee51a27": "airdropTokens(address[])", +"4ee67d33": "Etheradium()", +"4ee7ca3a": "erc20FOBS(string,uint8,string)", +"4ee9eb70": "InformRebuyTo(uint256,address)", +"4eea636f": "GROWCHAIN(uint256,string,string)", +"4eea9a8d": "withdraw2(address)", +"4eec0185": "aomracoin()", +"4eec44b4": "beforeBalanceChanges(address)", +"4eeca076": "Counter()", +"4eecafdb": "ifEndGetting()", +"4eed8a45": "LogTokenAllocation(address,uint256,uint256)", +"4eed965e": "_createGame(string,address,uint256)", +"4eee121f": "setOrCacheTargetReporterGasCosts(uint256)", +"4eee424a": "removeClaim(bytes32)", +"4eee59b3": "guess(string)", +"4eee8c25": "tokenBuyCost()", +"4eee966f": "setTokenInformation(string,string)", +"4eeea29d": "transferPreSaleBalance(address,uint256)", +"4eeedef1": "BCALAttToken()", +"4eeee8ac": "updateFighterBattleStats(uint256,uint64,uint16,uint64,uint16,uint16)", +"4eef440c": "bonusLevel0PercentModifier()", +"4eef683d": "PALAIR()", +"4ef02cf3": "preicoEndDate()", +"4ef05de3": "evacuate()", +"4ef1a23a": "manualInsuranceResolution(bytes32,uint8,bytes32)", +"4ef20030": "_setTokenMeta(uint256,bytes)", +"4ef37628": "getChallengeNumber()", +"4ef39b75": "finalize(address)", +"4ef3f235": "changeMaintenanceTime(uint256,uint256)", +"4ef45cac": "Announcements()", +"4ef50711": "apply4Redeem(uint256)", +"4ef5710a": "WatchNumberOfPlayerInCurrentRound()", +"4ef65c3b": "setUint(uint256)", +"4ef6b8ce": "Certificate()", +"4ef8086a": "switchManagerAndRemoveOldOne()", +"4ef83a70": "withDrawEth(uint256)", +"4ef85140": "CAOsale(uint256,uint256,string,string)", +"4ef8885f": "getSocialAccountPw(bytes32,bytes32,bytes32)", +"4ef8ff33": "MIN_INVESTMENT()", +"4ef94e34": "setMilestones(uint32[],uint8[],uint32[])", +"4ef98616": "CelebsPartyGate()", +"4efa45a1": "addAddressSetting(string,address,address,address,string)", +"4efb023e": "totalModerators()", +"4efb04ff": "created_contracts(address)", +"4efb7296": "updatePlotData(uint256,string,string)", +"4efbb734": "PublisherRegistryReplaced(address,address)", +"4efbe933": "buyForHackerGold(uint256)", +"4efc067f": "getAuraValue(uint256)", +"4efcc69e": "ExMoneyToken(uint256,string,string,address)", +"4efd0848": "_refreshVoteForVoter(address)", +"4efd1551": "add(address,address,uint256,uint256)", +"4efd9e2c": "updateMinContribution(uint256)", +"4efdd4f9": "viewUnclaimedResearchDividends()", +"4efddcd9": "artWorkChangeByAdmin(uint256,string,uint256)", +"4efeb2cf": "crowdDistribution()", +"4eff13dc": "OFFER_SIZE()", +"4eff86e7": "RBFToken(uint256,string,string)", +"4f0016d0": "endContract(uint256,uint256,uint8,bytes32,bytes32)", +"4f002522": "set_creature_builder(address)", +"4f011d9d": "getIntermediary(uint256)", +"4f013184": "investInTheSystem()", +"4f013ea6": "_THOUSAND()", +"4f01541e": "setReceiverAddress(address,address)", +"4f01d77e": "manual_lottery(bytes32)", +"4f02c420": "minted()", +"4f03c340": "proposeTx(address)", +"4f046439": "updatePurchaseSize(uint256)", +"4f04a36e": "setDesignatedReportPayoutHash(bytes32)", +"4f04af35": "CORReserveAllocation()", +"4f052648": "XaurumDataContract()", +"4f052b82": "UNLOCK_OUTINGRESERVE()", +"4f057506": "Limit()", +"4f059a43": "getClaimAmountForBlock()", +"4f062c5a": "getTier(uint256)", +"4f065672": "Start(string,bytes32)", +"4f0693a1": "BONUS_LATCH()", +"4f069517": "removePublicSalesSpecialUser(address)", +"4f07307b": "setLoanCreator(address)", +"4f073130": "takeOrder(bool,uint256,uint256)", +"4f07a663": "close(address,uint32,uint192,bytes,bytes)", +"4f07b5f0": "startSale(uint256,uint256,uint256,uint256,uint256,address)", +"4f07cc4f": "ETH_MIN_LIMIT()", +"4f082843": "enableChain(uint256)", +"4f084c0c": "payLast(uint256)", +"4f089298": "Etch(bytes32)", +"4f089898": "updateBlackListTrader(address,bool)", +"4f090ab4": "burnPrimordialToken(uint256)", +"4f0913ef": "MANHATTANPROXY6THST()", +"4f092510": "allowIgnoreTokenFallback()", +"4f09cfc5": "changeDiviRate(uint256)", +"4f09eba7": "proxyApprove(address,uint256,bytes32)", +"4f0a195e": "totalBasicIncome()", +"4f0a746f": "blacklistAddress(address,address)", +"4f0a97b9": "test_basicThrow()", +"4f0b0deb": "gameCreate()", +"4f0b584e": "getCCH_edit_18()", +"4f0b8374": "addToPrivilegedList(address)", +"4f0b9a2b": "KarTokenERC20(uint256,string,string)", +"4f0c563f": "depositBonus()", +"4f0ca055": "getMiniPoolEdit_5()", +"4f0cae88": "balanceThis(address)", +"4f0cc59d": "swapID(address,bytes32,uint256)", +"4f0cd27b": "getCount(address)", +"4f0cdd29": "getAddressByUserName(string)", +"4f0cf7e1": "fillTradesInfo(bytes32,uint256,uint256[])", +"4f0d8533": "addNewStreetType(string)", +"4f0ddd27": "getTemplate(string,string)", +"4f0e3333": "wedaddress()", +"4f0e3dad": "USD_GOAL()", +"4f0e760a": "_takeOwnershipOfTokenFrom(uint256,address)", +"4f0e8656": "showAdmin()", +"4f0eaf96": "oraclizeCallbackGas()", +"4f0f4aa9": "getNode(uint256)", +"4f0f539e": "getActiveMessage()", +"4f0f97ab": "TokenForSale()", +"4f1069ad": "serchIndexByAddress(address)", +"4f10a0bd": "_createAvatar(string,address,uint256)", +"4f10acc1": "updateGoldFeeData(uint256)", +"4f1157aa": "EtheriumWall(string)", +"4f118ad7": "GenericToken(string,uint8,string,uint256)", +"4f11ca65": "distributeTeamTokens()", +"4f11e07d": "getProof(address,uint8,bytes32)", +"4f1243d7": "pepsToken()", +"4f139314": "compensateLatestMonarch(uint256)", +"4f13e130": "fightAsuriMonster()", +"4f13fc0a": "setCompte_30(string)", +"4f150787": "batchFillOrKillOrders(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"4f161245": "getUIntValue(string)", +"4f162f8f": "icoEndTimestampStage4()", +"4f18d6fb": "BITAD()", +"4f190ed2": "changeDekzAddress(address)", +"4f192fa3": "MajestyAssetsJunction()", +"4f197ee7": "transferPackageOwner(string,address)", +"4f19e977": "INVALID_ORDER_SIGNATURE(bytes32)", +"4f1a5b86": "tokenReserved1()", +"4f1a7678": "getInsuranceDataByID(uint64)", +"4f1a892b": "setSectionForSale(uint256,uint256)", +"4f1ae61a": "releaseFeesAndBountyJM(address,uint256)", +"4f1afb63": "ownerforce()", +"4f1b2d4f": "toBool()", +"4f1bbc4d": "SuccessAuctionEvent(address,address,uint256,uint256)", +"4f1c3417": "getSpawnProxy(uint32,int256)", +"4f1c3b66": "setAccountData(address,uint8,bytes32)", +"4f1c8d0f": "milkBalanceOf(address)", +"4f1d38c0": "activeCrowdsalePhase3(uint256)", +"4f1d76ef": "buyabletoken()", +"4f1e0d0b": "getGoldInfoCustodian(address)", +"4f1e4334": "setMinBalanceForContractCreation(uint256)", +"4f1ea770": "bc(uint256,address)", +"4f1eb4b2": "proposalInProgress()", +"4f1ef286": "upgradeToAndCall(address,bytes)", +"4f1f421b": "SuMain()", +"4f1f99aa": "changeOzreal(address)", +"4f1fa7ef": "streamityContractAddress()", +"4f20f35a": "payExpenses(address,uint256)", +"4f219ceb": "getPlayRate(uint256,uint256)", +"4f223fe3": "StatefulFactory(string,string,string)", +"4f224baa": "setMetaBaseUrl(string)", +"4f2253d4": "addStudent(string,string,string,bytes32)", +"4f22bcf8": "allocationAddressList(uint256)", +"4f232f77": "transferFromRoot(address,address,uint256)", +"4f238029": "getSaleAuctionAddress()", +"4f23cce0": "ownerBetsCount(address)", +"4f23e50a": "defineReward(string,address,uint256,uint256)", +"4f24186a": "newProposal(string)", +"4f242cde": "startICO(uint256,address)", +"4f245ef7": "auctionStart()", +"4f248409": "endICO()", +"4f24e471": "numRewardsAvailableSetForChildAddress(address)", +"4f255b80": "getCharacterIndex(uint32)", +"4f256693": "addFile(bytes32,bytes32)", +"4f2578ba": "getVestedFounderTokens()", +"4f25a319": "PUBLICSALE_STARTTIMESTAMP()", +"4f25d6dd": "solveTime()", +"4f25ec6e": "_transferFee(address,uint256,address)", +"4f25eced": "distributeAmount()", +"4f26ef80": "buyAd(uint256,string,string)", +"4f271740": "UNFREEZE_DATE()", +"4f27869e": "defaultExit(uint256,bytes,bytes32,bytes,bytes,bytes32,bytes,bytes)", +"4f27ce68": "setSlogan(uint64,string)", +"4f27de64": "ByteExtractor()", +"4f28216a": "lowContributionAward(address)", +"4f284594": "info_TotalSupply()", +"4f28af6a": "handleBet(uint256)", +"4f28c443": "AIRDROP_TOKENS_PERCENT()", +"4f297b2b": "TokensGiven(address,uint256)", +"4f2989af": "indexExists(bytes32)", +"4f2996ab": "getBalanceByEscrowId(uint256)", +"4f2af869": "lastCalculatedToken()", +"4f2b0e41": "preSaleFund()", +"4f2be91f": "add()", +"4f2c9196": "getUsedBySoftwareLength()", +"4f2cc469": "transferZeroTokensTest(address)", +"4f2cd9cc": "auditConfirm()", +"4f2d7ab5": "contributionMinimum()", +"4f2eebc3": "PreSaleStartTime()", +"4f318dd8": "confirmVestingSchedule(uint256,uint256,uint256,uint256,uint256)", +"4f31cc51": "frozenTokenTransfer(address,uint256,uint8)", +"4f31e3ec": "minRoundSize()", +"4f32c65b": "emitFuture(bytes32,uint256,uint256,uint256)", +"4f32de0a": "request_payout_holder()", +"4f33428a": "setConsolationRewardsRequiredFaith(uint256)", +"4f33a013": "artHash()", +"4f346a7d": "emit(address,uint256,uint256)", +"4f348b46": "getTokenAmountOnAdd(uint256)", +"4f3655a8": "verifyBet(uint256,uint256)", +"4f36fbdc": "setMinMaxPriceInWei(uint256,uint256)", +"4f36fec8": "hardCapSale()", +"4f3741b5": "RateChanged(address,uint256,uint256,uint256)", +"4f37edfd": "burnAndRetrieve(uint256)", +"4f383934": "setMyTokenList(address[])", +"4f39ca59": "drop(bytes32)", +"4f3b1fb6": "unlock(string,address,bytes32,string)", +"4f3b8938": "mythexTokenAddress()", +"4f3bb920": "lockDownPeriod()", +"4f3c1542": "getMarginRatio()", +"4f3d057a": "push(string)", +"4f3d1416": "SetOriginator(string,string,string,string,string,string,string,string,string,address,string)", +"4f3d1c27": "setLpMaxVolume(uint256)", +"4f3d3003": "participantRoundValue(address,address,uint256)", +"4f3d520c": "getClearance(address)", +"4f3ded8a": "getFinalPaymentAmount()", +"4f3df0a8": "getRemainingTimeOf(uint256)", +"4f3f2cbc": "changeFeeModifiers(address)", +"4f3f4211": "awardDailyLottery(address,uint256)", +"4f3f5746": "participatingIn(address)", +"4f3fc162": "removeOriginByIndex(uint256)", +"4f3fd173": "get10Animals(uint16)", +"4f3fed94": "tokenIncrease()", +"4f4027d0": "SHAREHOLDERS_SHARE()", +"4f4200e5": "setAddressOfERC20Token(address,address)", +"4f424da3": "Bounties_Wallet()", +"4f438a12": "provideTransactionFeedback(uint256,uint8,bytes32)", +"4f438ddb": "changePercent(uint256,uint8)", +"4f44728d": "ownerChangeOwner(address)", +"4f4522b0": "getIntelligenceValue(uint256)", +"4f452b9a": "isStormBirdContract()", +"4f4548f9": "registerAudit(bytes32,bytes,bool)", +"4f45779f": "mintTokensWithinTime(address,uint256)", +"4f45c308": "DocumentSigned(uint256,address)", +"4f466ce6": "TOTAL_T8EXTOKEN_SUPPLY()", +"4f4821e1": "createGiftTemplate(uint256,uint256,string,string)", +"4f48e46d": "get_all_payment(uint256)", +"4f494cad": "createAuction(uint256,uint128,uint128)", +"4f495513": "privateSaleTokens(address,uint256)", +"4f4a69c8": "TestTokkSale()", +"4f4a6a66": "GovernanceDelOwner(address,address)", +"4f4b30ba": "dropManualState()", +"4f4b890a": "getCET6ById(uint32)", +"4f4cd650": "getAllTellers()", +"4f4d022b": "upgradeQualificationByTokens()", +"4f4d4728": "offeringEnded()", +"4f4df442": "approve(address,uint256,uint256,uint256)", +"4f4e1b74": "founderSwitchRequest(bytes32,bytes32)", +"4f4e47f1": "stopAirdrop()", +"4f4ec991": "PubToken(uint256)", +"4f4ef121": "firstBonusSalesEnds()", +"4f4f23ef": "SundayFundayToken()", +"4f4fa5a6": "removeReferral(address)", +"4f501f27": "changeOuts(address,address,address)", +"4f504d72": "getBalanceInPlay()", +"4f50ef53": "allBids()", +"4f511102": "setDeveloper(address,address)", +"4f51bf46": "getBidIdList()", +"4f52b2bc": "findLockupIfCTD(address)", +"4f52ccfa": "beneficiary1()", +"4f53126a": "pauseGame(bool)", +"4f538ae1": "rain(address[],uint256)", +"4f53e83e": "smartProperty(uint256,string,uint8,string,address,uint256,uint256,uint256)", +"4f54f4d8": "getMatchDetails(bytes32)", +"4f5539c0": "SetPrice(uint256)", +"4f556b23": "onceoutTimePer()", +"4f558e79": "exists(uint256)", +"4f55f292": "convertIntoHtlc(bytes32,address,uint256,uint256,uint256,bytes32)", +"4f573cb2": "withdrawRevenue()", +"4f57641c": "getHorse(uint256)", +"4f58704c": "ARI()", +"4f58d5c9": "getTokenUSDRate()", +"4f5963fb": "calculateYourValueEven(uint256)", +"4f5a4eb9": "setAssetOwner(uint256,address)", +"4f5af739": "getBirthTime(uint256)", +"4f5b3318": "dateEndIco()", +"4f5b9f23": "power2(uint256,uint256,uint32,uint32)", +"4f5ba601": "airdropOn()", +"4f5c6e0a": "bonusOne(uint256)", +"4f5d06c2": "getPurchasePrice(uint256,uint256)", +"4f5d5295": "chairBalance()", +"4f5e6a8d": "whitelistedTransfer(address)", +"4f5f560a": "founderOf(uint256)", +"4f5fca97": "LimitEther()", +"4f5fcb34": "authorize(string)", +"4f6065e0": "get_presale_arbits_total(address)", +"4f60ae2e": "DividendReceived(address,uint256)", +"4f60f334": "multiAccessAddOwner(address)", +"4f610e74": "getDeclaration()", +"4f617b81": "unsetSectionForSale(uint256)", +"4f61db15": "VEGAS()", +"4f61ff8b": "kyberNetworkContract()", +"4f6247f8": "setThirdAddressBalance(address)", +"4f645993": "lastMiningBlock()", +"4f64808d": "createCustody(address)", +"4f64aa09": "advisorsLock()", +"4f64b2be": "tokens(uint256)", +"4f653f09": "_scheduleTournament()", +"4f655a61": "setMinimum(uint256,bool)", +"4f65cc3c": "ethToTokens(uint256,bool)", +"4f66a8ec": "getVotingData(uint256)", +"4f6716d3": "whitelistAddressArray(address[])", +"4f674164": "addBookSigner(bytes16,address)", +"4f67498e": "updateUSeqIndex()", +"4f6754d7": "tenEndTime()", +"4f67bd9e": "numberFor(uint256)", +"4f67fe22": "LOG_OwnerAddressChanged(address,address)", +"4f69dd3d": "triggerWithdraw(address)", +"4f6a441c": "getRandom8(uint8,uint8)", +"4f6a461a": "CatalogPlayers()", +"4f6acaa1": "getLedgerCount(string)", +"4f6adf48": "setPayOuts(uint256,string)", +"4f6b1a70": "vuePayETHDestination()", +"4f6b472d": "tokenSupplies()", +"4f6c3372": "CrowdSale_Halt()", +"4f6c63ea": "TeamRegistered(string,address,string,bool)", +"4f6c87fb": "STARTToken()", +"4f6cb43f": "advisers()", +"4f6ccce7": "tokenByIndex(uint256)", +"4f6d04e7": "createSeedCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"4f6d150d": "LuvCoin(uint256)", +"4f6d20a9": "getRewardForAddress(address,address)", +"4f6d3aed": "refundGas()", +"4f6d97ed": "MakeTransaction(address,uint256,uint256,string,string,uint8)", +"4f6d9e16": "_settleAndRestart()", +"4f6dcf74": "PoS()", +"4f6de652": "_getDepositedOrderDetails(uint256,address)", +"4f6de831": "testComplexCombination()", +"4f6fcc46": "getAirdropList()", +"4f7035b4": "DeleteAllRequests()", +"4f7132c0": "TokenDemo(uint256,string,uint8,string)", +"4f71473e": "withdrawAll(address,address[])", +"4f71ef81": "parse(bytes32)", +"4f72e1c3": "buyChamp(uint256)", +"4f731087": "checkTokenBalance()", +"4f734965": "setBBDPrice(uint256)", +"4f73928a": "setComment(bytes3,string)", +"4f739ff0": "addHouseStake()", +"4f73b7fa": "EthernityFinancialOracle()", +"4f73b8e6": "STAKE_BONUS_MIN_THRESHOLD()", +"4f73f1f8": "withdrawToAdress(address,uint256)", +"4f73f71d": "getOwlmasterReq()", +"4f7474cb": "closeAnnouncement(uint256)", +"4f74acfe": "buyEggs()", +"4f74d4f6": "ftechiz()", +"4f755fe7": "financialAccount()", +"4f75af3a": "tokensSuppliedFromReferral()", +"4f75c464": "startExit(bytes32[],uint256)", +"4f75e930": "UNLOCKINTERVAL()", +"4f7666a9": "VisionG8()", +"4f76a077": "addInvestorToWhiteList(address)", +"4f76c87c": "createSportEvent(string,uint8,uint256)", +"4f76cb02": "testGetBitFailIndexOOB()", +"4f772420": "changeFundContract(address)", +"4f779753": "DimaCoin()", +"4f77feec": "getPositionInterestRate(bytes32)", +"4f79409f": "LogBuy(address,uint256)", +"4f7ac7ab": "toteLiquidatorWallet()", +"4f7aede9": "add(uint8,address,uint256)", +"4f7baec0": "test_mint(int256)", +"4f7c6552": "calcDividends(address)", +"4f7cd683": "setReportRegistrationFee(uint256)", +"4f7d4951": "addVIP(address)", +"4f7d5de9": "setTimeRC(uint256,uint256)", +"4f7d87ac": "PoiseToken()", +"4f7dad6a": "buyToken(uint256,string,string)", +"4f7e7086": "iconiqToken()", +"4f7eb571": "getHowMuchUntilHardCap_(uint256)", +"4f7fc13f": "CLIENT_TIME_TO_DECIDE()", +"4f801270": "releasableBalanceOf(address)", +"4f802f8a": "unagreeAmendment()", +"4f803516": "getOrCreatePreviousPreviousFeeWindow()", +"4f8115a2": "tokensAddress(uint256)", +"4f817a2a": "tInstance()", +"4f81b930": "_sendFunds(address,uint256)", +"4f829ee8": "set2(uint256,uint256)", +"4f82ff41": "isCertified(uint256)", +"4f83fe64": "timeLocked(address)", +"4f840761": "demandTrial(uint256)", +"4f840c2b": "setMigrateToAddress(address)", +"4f8411e5": "_approvedFor(address,uint256)", +"4f851d73": "BineuroToken()", +"4f85769a": "closingTimePeriodOne()", +"4f8632ba": "user()", +"4f868b94": "etherSince20()", +"4f86bde2": "BuyFromFollower(address)", +"4f879ff0": "StackLottery()", +"4f883783": "CheckProofOfOwnership(bytes32)", +"4f88cc3c": "returnAllPollStakes(bytes32)", +"4f895031": "finalizeSale(uint256,uint256,uint128)", +"4f896d4f": "resolve(uint256)", +"4f8b9e64": "getBuyersList()", +"4f8c2a8a": "block02w()", +"4f8d40e1": "closeTournament(bytes32)", +"4f8da1fe": "RewardWallet(address,address,address,uint256)", +"4f8dd40a": "getOpinion(uint256)", +"4f8e2fdf": "LinkToken()", +"4f8e624e": "Greeter(string)", +"4f8fb544": "erc223Received(address,uint256,address,uint256)", +"4f8fc8ef": "setNonceForPublicKeyX(uint256,uint256)", +"4f8fe6a4": "THREE_YEAR_KEEPING()", +"4f8ffd1f": "set_contrib_arbits_min(uint256)", +"4f9000a0": "nextPrizePoolPercent()", +"4f932d44": "_generateIdentity(uint256,uint256,uint256,uint256)", +"4f935945": "capReached()", +"4f93995d": "saleNotEnd()", +"4f93b9e8": "setCommunityLock(address)", +"4f945a8a": "transferOwnCoins(address,uint256)", +"4f9559b1": "cancelOrdersUpTo(uint256)", +"4f958146": "LongLegs()", +"4f95a04b": "ethTransfer(address,uint256)", +"4f95ddec": "shopStorePrice()", +"4f95e960": "getTotalDropsOf(address)", +"4f961a6b": "RATE_TIER3()", +"4f962b72": "setPriceRate(uint256,uint256)", +"4f9660ed": "sendToTeam()", +"4f968868": "PauseTokenContract()", +"4f96ab8e": "retrieveUportInfo()", +"4f96baf1": "createNewAccount(address)", +"4f96bc00": "records(bytes32,uint16,bytes32,uint16)", +"4f96cddd": "calculatePreBonus(uint256)", +"4f96decf": "migratePlayerData1(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"4f96e039": "waitingOracles()", +"4f96f446": "tier1LOT()", +"4f96fba7": "setAuditAssignBlockNumber(uint256,uint256)", +"4f97f97f": "lastCrowdsale()", +"4f9899c3": "PythonCoin()", +"4f990ef0": "card2PowerConverterSingle(uint256)", +"4f995d08": "getPeople()", +"4f996a07": "callerDel(address,address)", +"4f99a96e": "getBorrowingItemByObjId(uint64)", +"4f99b7c5": "currentDate()", +"4f99b82d": "setBurntWalletAddress(address,address)", +"4f9b7bc8": "totalTokensSale()", +"4f9bf601": "totalTxFeePercent()", +"4f9bfdac": "OVISBOOKED_BONUSTOKENS()", +"4f9c5253": "Store(string)", +"4f9c5bf3": "airdrop_percent()", +"4f9d482a": "HALF_TIME()", +"4f9d719e": "testEvent()", +"4f9da09f": "getAddressByIdSorteo(int256)", +"4f9de158": "_sendTokens(address)", +"4f9e01c3": "OCCT()", +"4f9ea1c3": "flightDone(uint32)", +"4f9ebe09": "getDonationPrice()", +"4fa037c4": "setTokenMintFeeProp(address,address,uint256)", +"4fa07325": "adddraw(uint256)", +"4fa0a4b7": "_getCanvas(uint32)", +"4fa10cfc": "getdata()", +"4fa11dd2": "setAirdorpList(address[],bool)", +"4fa20a52": "isDelayed()", +"4fa232fe": "getIcoDeflator()", +"4fa2cb50": "solved(string,string)", +"4fa3d029": "setSTFactory(address)", +"4fa3eeff": "withdraw3()", +"4fa406ee": "BeforeChipCost(uint32)", +"4fa43991": "getArtistTrack(bytes32,address)", +"4fa48a88": "isSameDay(uint256,uint256)", +"4fa4a531": "getbackTB(uint256)", +"4fa4d01a": "_averageSalePrice(uint256,uint256)", +"4fa519fa": "setValue()", +"4fa65d58": "WRLToken()", +"4fa679d8": "forward(uint256)", +"4fa6a6d5": "crowdSaleStartTimestamp()", +"4fa6caf6": "getSigner(bytes32,uint256)", +"4fa6cde4": "requestEthUsd(uint256)", +"4fa7e353": "pledgeFees(uint256)", +"4fa87fd3": "frozenFunds(address,uint256)", +"4fa88720": "setBypassStatus(address,bool)", +"4fa972e1": "maxSupplyForEra()", +"4fa99402": "spinnerCountsByType(uint256)", +"4fa99dd0": "Matching_Ethers()", +"4fa9b5d5": "seed_base_token()", +"4fa9e4dc": "getArticlesOwn()", +"4faa2d54": "getTimeElapsed()", +"4faa8a26": "depositEtherFor(address)", +"4fab2035": "newSchellingRound(uint256,uint256)", +"4fab2ca4": "testGetFrontend()", +"4fac7e41": "getOwnedTokenIds(address)", +"4fac9c65": "bonussale_WeiRaised()", +"4faca8f4": "sendTokenTeamAdvisor(address,address)", +"4fad404a": "confirmProposal(string,uint256)", +"4fad5c8a": "depositAgent(uint256,uint256,string,string)", +"4fad96dd": "DST_ICO()", +"4fae3254": "setMaxAuditDuration(uint256)", +"4faea4d6": "FrankTestToken1()", +"4faed396": "checkVotingForSendWeiFromExchange()", +"4faf9420": "airdropFor(address)", +"4fafee40": "lottoPrice()", +"4fb057ad": "ContractInstantiation(address,address)", +"4fb0a3cd": "claimTeamReserve()", +"4fb0d95e": "getLocalBountyBalance(uint16)", +"4fb19db5": "dollarCost()", +"4fb2e45d": "transferOwner(address)", +"4fb30d8b": "txs()", +"4fb31a6a": "replaceProto(uint16,uint8,uint8,uint8,uint8,uint8,uint8)", +"4fb320b2": "setClaimRate(uint256)", +"4fb34523": "deployStepFour()", +"4fb3d3b1": "getUserHistory(address)", +"4fb3fef7": "totalExecutedPerDay(uint256)", +"4fb46d5c": "getRoundStatuses(uint16)", +"4fb4bcec": "step5()", +"4fb4e833": "entryStorage(bytes32)", +"4fb4f5a3": "ETHMCoin()", +"4fb55858": "setTargetDiscountValue4(uint256)", +"4fb67111": "utfStringLength(bytes4)", +"4fb764c9": "orders()", +"4fb7f1d7": "getPastWinnerAddresses()", +"4fb8843c": "getAllBonus()", +"4fba68c5": "pWhitelist(address)", +"4fbc7e11": "enableTokenWithdrawals(address,bool)", +"4fbcd6d5": "DepositFunds()", +"4fbd051d": "verifyCertification(address,uint256)", +"4fbda01f": "LogPenaltyDisbursed(address,uint256,address,address)", +"4fbe30d4": "changeTokenRate(uint256)", +"4fbea8ea": "approveKyber(address[])", +"4fbf6e9f": "getFish(uint32)", +"4fbf6fbb": "getMultiRequestLastRequestId(uint256)", +"4fc09275": "tokenOfCreatorByIndex(address,uint256)", +"4fc0ee17": "setCreditMCCurator(address)", +"4fc28f68": "getUndistributedBalanceOf(address,uint256)", +"4fc2d3be": "setBaseExchangeRate(uint256)", +"4fc3f41a": "setCooldown(uint256)", +"4fc4b5a0": "highEtherBonusValue()", +"4fc573c7": "addrDevelopment()", +"4fc59e6b": "set_Rate(uint256)", +"4fc5a549": "StartAuction(string,uint256)", +"4fc63e02": "ExToke(address,address,address,uint256,uint256,uint256)", +"4fc78cf1": "add_reward()", +"4fc7a47d": "extra_time_bought()", +"4fc84791": "senderAddress()", +"4fc91633": "setNotLessThan(uint256)", +"4fc9584a": "messageSpanStep()", +"4fc9c91a": "identityOf(bytes32)", +"4fca3159": "rawBuy(bytes32)", +"4fca329a": "drawBookLotto()", +"4fcaadae": "_createDivCard(string,address,uint256,uint256)", +"4fcb2968": "kingSpirit()", +"4fcb9e2f": "getLastPayoutDate()", +"4fcc30d9": "AuctionSuccessful(uint256,uint256,address)", +"4fcc9e07": "getDynamicArraySize()", +"4fced032": "OneKeyToken(uint256,string,string)", +"4fcf1f39": "revealWinner(string)", +"4fcf8210": "eraseRecord(bytes32)", +"4fd0fcb6": "partnerAmountLimit(address)", +"4fd1519c": "getValidDurationBlocksData()", +"4fd23dd4": "transferMulti(address,address,address,address,address,address,address,address,address,address,uint256)", +"4fd2ee52": "getTargetContactPubKey(bytes32,address)", +"4fd394ba": "getMax(uint128[])", +"4fd3d125": "onlyAdminsCanDoThis()", +"4fd42e17": "_setLiquidationIncentive(uint256)", +"4fd4dbaa": "_emitError(bytes32)", +"4fd61333": "DataChanged(bytes32,address,string,string)", +"4fd6194d": "setup(string,address[])", +"4fd64591": "tokenClient()", +"4fd6b325": "test_5_generateSecondAccountBalance_increaseBlocksBy1000()", +"4fd6e8ac": "andTheWinnerIs()", +"4fd6ff6e": "CROSAIR_SHIP_PRICE()", +"4fd7718b": "firstStageDuration()", +"4fd798b1": "TsingDaToken()", +"4fd81926": "setMaxDividendDepth(uint256)", +"4fd839c6": "getRabbitDNK(uint32)", +"4fd8411c": "AddressChangeRequested(address,address)", +"4fd88a1c": "spendFunds(address,uint256,string)", +"4fd9c9ac": "ExposureClosed(bytes32,address,uint256,uint256)", +"4fdb7c47": "RtbRpay(address,uint256)", +"4fdb91ab": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE1()", +"4fdbe2c3": "changeFoundationAddress(address,string,address)", +"4fdc1a70": "icoCore(uint256)", +"4fdc4295": "_offerCanvasForSaleInternal(uint32,uint256,address)", +"4fdc53f6": "setTokenOwner(address,uint256)", +"4fdc5f65": "LiverpoolvsManCity()", +"4fdcd18d": "setHistory(address,uint256,uint256,uint256,uint256,uint256,string,string)", +"4fdd228d": "ownerOfPosition(bytes32)", +"4fde7cd9": "tokenToFounder()", +"4fdf4c9a": "Icebox(uint256)", +"4fdf64ce": "totalBorrowingItem()", +"4fdf8a03": "VLTMultisig()", +"4fdfcd42": "removeBytes32s(bytes32[])", +"4fe01d38": "setTokenReward(uint256)", +"4fe06988": "toTimestamp(uint256,uint256,uint256)", +"4fe0bd1e": "fundsAvailable()", +"4fe0ff1a": "submitInitialMerkleState(bytes32,uint64,bytes32[],uint256[],uint256,uint256,bytes32,uint256[2],bytes32,bytes32,uint8)", +"4fe2e15a": "checkTicket(uint256,uint256)", +"4fe2f085": "INVESTORS_TOKENS_RESERVED()", +"4fe47cb4": "emitStoreAndPay()", +"4fe47f70": "setMaxAmount(uint256)", +"4fe4a909": "returnToken(address,address,uint256,uint256)", +"4fe50bc6": "baseTokenGetRate()", +"4fe51ee6": "ValkyrieNetwork()", +"4fe5c2b4": "Vidnix()", +"4fe5f587": "CCXToken()", +"4fe61b9e": "disableBonus()", +"4fe6adb4": "NewToken(string,string,string,address)", +"4fe71e95": "withdrawUserReward()", +"4fe72439": "DEVELOPER_SUPPLY()", +"4fe7940b": "show_Balance_available_for_Sale_in_ETH_equivalent()", +"4fe81ffd": "artistsArtworks()", +"4fe82444": "addEthContribution(address,address,uint256)", +"4fe85563": "RAGTOKEN()", +"4fe87fe0": "FundsWithdrawnEvent(address,address,uint256)", +"4fe8b1a8": "changesoldierreplenishrate(uint256)", +"4fe8b4c1": "deleteData(uint256)", +"4fe8d03f": "bountyTokensTransferred()", +"4fe917fe": "reduceallmoney(address[],uint256[])", +"4fe9cc63": "InitHostBalance(address,uint256)", +"4fea572e": "ERC20Token(string,string,uint8)", +"4febb4f9": "WorldCupTeam(address,string)", +"4febe793": "NewText(string,string,address,uint256)", +"4fecf22d": "delegateManagement(address)", +"4fecf9cf": "Helex()", +"4fed1c94": "isTokenForSale(uint256)", +"4fed6a10": "teamTimelock()", +"4fed9a60": "Bonus(uint256,uint256)", +"4fedebf6": "numOfTeam()", +"4fee13fc": "startAuction(uint256,uint256)", +"4fee2437": "tokensaleStartTime()", +"4fee5360": "transferLike(address,uint256)", +"4fee63da": "securitiesOf(address)", +"4feeb18a": "priceQuerySent()", +"4ff0b071": "SILENT_Token()", +"4ff13571": "x2()", +"4ff1ddec": "TransactionConfirmedAfterExpiry(uint256,uint256)", +"4ff2bcb7": "getStageBonus(uint256,uint256)", +"4ff30c5f": "nextMintPossibleDate()", +"4ff3a989": "BLOCK()", +"4ff44fda": "_holding()", +"4ff45d73": "unapproveDisbursement()", +"4ff4ab6c": "ticketsOwners(address,uint256)", +"4ff57e9f": "airdropAndBurn()", +"4ff62627": "convertCore(address,uint256,uint256)", +"4ff6aa46": "deactivateTeam()", +"4ff6e86e": "getProviderPublicKey(address)", +"4ff7ff32": "withdrawERC20Tokens(address)", +"4ff92d6f": "getAssignedSupply()", +"4ffb01ce": "RemoveEvidence(bytes32)", +"4ffb32d3": "BlackSnailE()", +"4ffb861e": "_addAuthorization(address,address)", +"4ffc9204": "centralBankAddress()", +"4ffcd9df": "exchangeRates()", +"4ffcfefe": "m_weiBalances(address)", +"4ffd23a7": "sell(uint32)", +"50003ca6": "calculate(address)", +"5000a443": "jingZhiManager()", +"50010427": "bet(address,uint256,uint256,uint256)", +"50013a53": "LICERIOToken()", +"5001780b": "maxFundingGoal()", +"5001f3b5": "base()", +"50020560": "Accessible()", +"5002b2b9": "FusoraToken()", +"50035eb8": "getInUse(bytes20)", +"5003c2cc": "setPriceProgression(uint16)", +"5003c81d": "ERC223StandardTokenFactory(address)", +"5003d58f": "returnTokenBalance(address[2],uint256[8],uint8,bytes32[2])", +"5003e4d1": "Token(uint256,string,uint8,string,address)", +"5003efca": "extendedTokenCap()", +"50048174": "addItemLendingList(address,uint256)", +"5004e7a6": "CoinFast()", +"50050769": "changeRegistrationFee(uint256)", +"50051c20": "CELToken()", +"50058508": "getPubkey(address,address)", +"5005ba47": "setDestroyEnabled(bool)", +"50060f34": "getBatch(address,uint8)", +"5006bf0b": "internalExecuteDelegatecall(address,uint256,bytes)", +"5006e60a": "ownershipToCreator()", +"5007364f": "getLeaderboard(uint16)", +"50077f00": "jsonCat(string,string,uint256)", +"5007e47e": "getIntrospectionRegistry()", +"5007ec95": "IbzCoin()", +"5007ff15": "GridcubePlatformToken()", +"500844dd": "setTotalStakingHistory()", +"5008b7dd": "buyProduct(address,address,uint256)", +"5008cfcc": "votePerETH()", +"5008f699": "setRollover(uint256)", +"5009432d": "MAX_PRIVATE_FUNDING_SUPPLY()", +"500b6b3e": "calculationTotalSupply()", +"500b9426": "accountLocked(address)", +"500c6755": "DepositAmount(uint256,uint16)", +"500c6f21": "setManagementFeeChargePercentage(uint256,uint256)", +"500d22db": "setData_14(string)", +"500e73a4": "SSChainToken()", +"500e9eaa": "finishZeroDistribution()", +"500ec41b": "setAirState(bool)", +"50107c77": "addThing(string,bytes32,string,bytes32)", +"501146b4": "_updateNextPeriodPoints(address,uint256)", +"50114925": "transferDelegated(address,address,uint256,uint256,uint256,uint256,bytes)", +"50116afb": "decreaseAssetsCertified(uint256)", +"5011e399": "replaceSigner(address,uint256,uint8,bytes32,bytes32)", +"5012416f": "processAndCheckParam(string,address,uint8[],bytes32[],bytes32[])", +"50125546": "cancelRequest(bytes32)", +"50127418": "Question(address,string,uint256,uint256,string)", +"5012adca": "packInfo(address,bytes)", +"5012b772": "call_addr(address)", +"5012eb67": "trFee()", +"50133d50": "MinimumViableToken(uint256)", +"5013bb79": "TheTokenB()", +"50140fe5": "distributeBountyTokens(address,uint256)", +"50148ed2": "initEpochBalance()", +"5014a18e": "node_parent(uint256)", +"501578ca": "EntryAdded(bytes32,uint256,uint256)", +"50159de6": "ownerRemoveCeo(address)", +"5016128e": "isLock(address)", +"5016b9b1": "buyFromBlackMarket(uint256,uint256)", +"5016d29f": "refundedAmount(address)", +"5017f1f1": "constructor_()", +"50180944": "NEST()", +"50188301": "withdrawable()", +"5018a0fd": "withdrawAddr(address)", +"50192ae6": "test_31_assertGasUsage50Boards()", +"501957b8": "getManifest(address,bytes32,bytes32)", +"50197646": "rId()", +"501a4d68": "changeNameSymbol(string,string)", +"501a7a74": "uint256Min(uint256,uint256)", +"501b0b18": "receiveLoanOwnership(address,bytes32)", +"501bae76": "setr2VaultAddr(address)", +"501bfb60": "transferStampsToOwner(uint256)", +"501c5205": "_updateLandData(uint256,uint256,string)", +"501e3a2c": "_icoPercent()", +"501e8428": "getPart(bytes,uint256)", +"501fdd5d": "setSpecID(bytes32)", +"5020dcf4": "convertToEach(uint256,string,uint256)", +"5021051e": "setInflation()", +"50213c9f": "EXPERTS_POOL_ADDR()", +"502146db": "modify_addr(address)", +"5021783a": "addPerformer(address,string,uint8,string)", +"5021e534": "_dividendsSum(uint256[])", +"5022238f": "AVAILABLE_IN_PRE_SALE()", +"50228201": "getCollector()", +"5022d232": "CelebrityBreederToken()", +"5022e940": "experty()", +"50234173": "addNotary(address,uint256,uint256,string)", +"5023d124": "TestFactory()", +"50240158": "rejectContribution(address)", +"50240a34": "onLotteryInsurance(address)", +"502414e4": "marketMaker(string)", +"50248cd1": "ownerYHT()", +"50259cd3": "privatePreICOFreeBonusPercent()", +"5025b9ae": "expire(uint256,uint256,uint8,bytes,bytes,bytes)", +"5028594a": "setBlockDotGasLimit(uint256)", +"502a86bf": "gameGiftUserDayTimes()", +"502aa3b5": "usersList(uint256)", +"502b31d2": "splitEther()", +"502b8bda": "synths(bytes4)", +"502be15e": "unregisterByList(address[],bool)", +"502c9bd5": "userAddresses(uint256)", +"502cc114": "KittyToken()", +"502d7599": "IssueTokens(address,uint256,uint256)", +"502dadb0": "disableWhitelist(address[])", +"502e3b46": "EffectAdded(uint256,uint8[])", +"502f2dee": "sendFromTeamWallet(address,uint256)", +"502fe251": "getUidLastUpdate(string)", +"5030c325": "signBuyer(uint256)", +"503129c3": "ISC()", +"50312c9e": "checkContractBalance()", +"503248fe": "minPriceForMiningUpgrade()", +"5032f33b": "TokenLocker(address,address)", +"50357beb": "buyCard(uint256,address)", +"5036258b": "disableAddress(address)", +"50364825": "InsertImage(string)", +"503667bd": "_burnFor(address,uint256)", +"503687bc": "getTokenReleasePercentage()", +"5036d610": "Presale()", +"50372085": "isTokenContract()", +"503765c6": "LOCKTokenCOINLock(address,uint256,uint256,uint256)", +"50379b5b": "IPFSHashStore(uint256)", +"5037ec62": "changeDelay(uint256)", +"5038c9c5": "getListingAtPosition(uint64)", +"50391932": "findContractVersionByAddress(address)", +"503919b1": "unblockTokens(address)", +"50392bcc": "CleanFoodCrypto()", +"50395188": "tan_lian()", +"5039c62c": "inviteHandler(bytes32)", +"503a0ef8": "requestLoans(address,uint256)", +"503a3609": "mainSaleSecondStartDate()", +"503adbf6": "changeableToken(uint16)", +"503b64c0": "setRequestProcessed(uint256,uint256)", +"503c449f": "decreasePregnantCounter()", +"503c849e": "cashOutRate()", +"503caa1b": "performPayout()", +"503caa53": "phase2TokenPriceInEth()", +"503de95b": "newCash()", +"503e11de": "getAssetIdCargoArray(uint32)", +"503e9d33": "changeWeTrustSigner(address)", +"503eb429": "destEthFoundation()", +"503ef9fe": "changeFeeAmt(uint8)", +"50400128": "RiskPrice(uint128)", +"5040307c": "amountOfOrderQueue()", +"50405fdf": "setMemberLevel(address,uint8)", +"50409041": "_computeSalesCut(uint256)", +"5040c6e7": "HardCap()", +"50411552": "challengeWinnerReward(uint256)", +"50416b93": "batchClaim(uint256,uint256)", +"5041742a": "bidOnEthSiringAuction(uint256,uint256,uint8,bytes)", +"50428f84": "insertLastPlys(uint256)", +"504291f0": "maxToSell()", +"5042ffbe": "contributeInIco()", +"504321e0": "toTeamEthContract()", +"504334c2": "setNameSymbol(string,string)", +"50449d9d": "whiteListPreSaleDuration()", +"5044b112": "getChecksumCount()", +"50473c82": "deathData_f15()", +"50479065": "cancelCreation()", +"5047b337": "changeName(bytes16)", +"5047f867": "setAirdropParams(bool,uint256)", +"5049b238": "potentialWinner()", +"5049f497": "nominate(address,address)", +"504ac982": "transfer(string,string)", +"504b0ae8": "LOG_ValueIsTooBig()", +"504b122f": "readMulti(bytes32,bytes32[])", +"504b91b5": "GeishaCoin()", +"504b97ae": "getcertifieddata(uint256)", +"504bcde7": "getAuctionTokenIDsOfOwner(address)", +"504c9582": "PARTNERS_SHARE()", +"504cceac": "purchaseTokens(uint256,address)", +"504d080b": "getActions()", +"504d27fd": "transferAmount()", +"504e6827": "setWhiteListInvestor(address)", +"504f1671": "getSize(address)", +"504f5e56": "floor(uint256)", +"504f6085": "serviceTransfer(address,uint256)", +"504fac70": "getGiftTemplateById(uint256)", +"504fbb19": "LifeChain(uint256,string,string)", +"50500934": "right28(uint256)", +"50500fac": "LaunchPartnersAddress()", +"50512420": "getPlayerDiscount(address)", +"505158bb": "getRecordsCount()", +"50515d5a": "resolveDispute(bytes16,bool)", +"50520b1f": "contribution()", +"5052587f": "Show_automated_Sell_price()", +"5052abad": "viewContribution(address)", +"50548d85": "LogMakeDeposit(address,uint256,string)", +"5054e8bf": "collectDevFees()", +"5055225f": "preSaleStartDate()", +"5055557a": "perform_selfdestruct(uint256)", +"50558dd5": "setPropheth(address)", +"5055d7c3": "withdrawnMelon()", +"50560a1a": "_oraclizeQueueWinner(bool)", +"5056a36a": "AuthorizationSet(address,bool)", +"5056b309": "getSetting()", +"50584827": "getInvestorBalances(address)", +"5058c460": "safeWithdraw(address,uint256)", +"5058f013": "periodWeek()", +"505903ba": "GetEthBalance()", +"50591478": "getChainDrawingsByChainID(bytes32)", +"5059d25a": "setContributor(address,bool)", +"5059fad1": "transferIssuer(uint256,address,address)", +"505a202b": "priceChangeName()", +"505a7bce": "pullEther(uint256,address)", +"505ba497": "processInvestment(address,uint256,address)", +"505c3c58": "MasAnu()", +"505c3d5e": "piecesOwned()", +"505d394d": "GetSeries2()", +"505da5c7": "_bonusToFighters(uint32,uint8,uint256)", +"505e71d0": "test_twoInvalidFalseEqLog()", +"505ed108": "createPetCardSeries(uint8,uint32)", +"505f2697": "rejectCertification()", +"505f5a8c": "freezeByValue(address,uint256)", +"505fb46c": "add(uint256,uint256,uint256)", +"505ff574": "register(address,uint256,bool)", +"506092f7": "getAmbientLightException(bytes32)", +"50609cea": "onTokenTransferCalled()", +"5061029d": "MINE()", +"50613afe": "getDropNotice()", +"5062ef16": "readOpentasks()", +"50635394": "claimBonus()", +"50635e2f": "CYPHERX()", +"50636a68": "ERC223Token(uint256)", +"50637dd2": "stageName()", +"5063f361": "addMembers(bytes32,address[])", +"50648403": "registerWithInviterID(uint256)", +"506535f3": "verify(address,bytes32,uint8,bytes32,bytes32)", +"50655d8c": "maker()", +"5065cbab": "geteth(address)", +"50669508": "DatasetHub()", +"50669a03": "unpauseToken()", +"5066a9ac": "setLPTargetPostion(uint256)", +"5066e2bd": "teamKeepingWithdraw(uint256)", +"5067f32d": "KALToken()", +"50685c81": "SwarmRedistribution()", +"50692d9a": "toContentID(address,string,string,address,bytes32)", +"50699e89": "requestBuywithFX(uint256)", +"5069a6a6": "calculateKebabSell(uint256)", +"506a0aaa": "reverseSplitTokensBeforeDistribution(uint256)", +"506a6a10": "tokenBonusForThird()", +"506aaede": "issueDividend()", +"506b56da": "centralBanker()", +"506bd3a6": "removeExchanger(address)", +"506bff11": "left7(uint256)", +"506cb188": "NewOrder(uint256,address,address,address,uint256,uint256,uint256,uint256)", +"506cf560": "blackil()", +"506d54c7": "getBigWinner()", +"506d9ebd": "getData_8()", +"506dc7e1": "getUsageDetails()", +"506e106c": "setToS(string)", +"506ec095": "periodEnd()", +"506ee1ef": "traderNonces(address)", +"50710ef5": "_finalRoundWinnersFight()", +"50713dc0": "transferOwnershipManualMinter(address)", +"5071fcf0": "recoverSouls(address[],uint256[],uint256[])", +"5072a21b": "_createPotato(uint256,uint256,uint256,uint256,address)", +"5073eda3": "setPOOL_edit_25(string)", +"5074449d": "isTradable()", +"50750497": "VestingTransfer(address,address,uint256,uint256)", +"50754fac": "totalNetworkCollateralisation()", +"5076d445": "AdminClaimAirdrop(address,uint256)", +"5077ac0e": "registerImage(uint256,bytes,uint256)", +"507843f8": "assemblyShamir(uint256,uint256,uint256,uint256)", +"50787341": "normalizedEarlyPurchases()", +"507959e1": "newBeneficiary(address)", +"507a83ea": "arand(address,uint256)", +"507a8e40": "AssetToken(uint256,string,uint8,string,address)", +"507afbec": "processBuyAmount(uint256)", +"507b3450": "getKNCRateRangeSignatures()", +"507bbc7e": "isRunUpStage()", +"507d17bb": "MultiplyContract(address,address,uint256,uint256,uint256,uint256)", +"507d5954": "stopCrowdsale()", +"507d8887": "setCompte_19(string)", +"507e7888": "subscribe(string)", +"507e97a9": "setBUA(bytes32,uint256,address)", +"507eeff9": "trade(address[2],address,bytes,bytes)", +"50807ecc": "getSellerfee()", +"50818fbb": "internalGetHowMuchUntilHardCap(uint256)", +"50833515": "RestartReceivingContributions()", +"508335e6": "maxRentPeriod()", +"508343d6": "initiateEscrow(uint64,uint256,uint256,address,address,address,address)", +"5083b29f": "changeBookingFee(uint256)", +"508493bc": "tokens(address,address)", +"50849c3b": "placeoffer(uint256,uint256)", +"5084b2a3": "MintAuthority(address)", +"5084da18": "fipsOwner(bytes20)", +"5085c9f1": "numTokensInCurrentCompactData()", +"50867236": "debug_token_balanceof_faucet()", +"50872d1e": "onTransferFrom(address,address,address,uint256)", +"50872e32": "EUROQUINNToken(uint256,string,string,uint256)", +"50875b6c": "remainingLockDate()", +"508762c1": "right10(uint256)", +"5087abc7": "joinOutBattle(string)", +"50894456": "manuallyMakeOraclizeCall(uint256,uint256,bool,bool,bool)", +"508a0a9e": "NitrToken()", +"508a8976": "saleSuspended()", +"508ab47a": "showPoolContract(uint256)", +"508b0955": "testNoTokensTwoCalls()", +"508bb866": "getMyBet(uint256)", +"508cde13": "getMappingID(string,address)", +"508d0f57": "getNumberOfPeriods(uint256,uint256)", +"508d60aa": "teamETHUnlock2()", +"508df5df": "numResponseOptions()", +"508e3718": "setValidKYC(bool)", +"508f352d": "heapSort(uint16[])", +"508f46a0": "getGameSettings()", +"50904081": "purchasesCount()", +"509065b8": "mintTokensForFirstStage()", +"50909851": "ownerEmit()", +"5091c49e": "bonusSeed()", +"5091e7c4": "selfdestroy()", +"5091f881": "updateArtistCommission(uint256,uint256)", +"50921b6c": "EGGS_TO_HATCH_1CROCS()", +"509239c0": "amountContributedBy(address)", +"50928ba4": "canCreateGames()", +"5092f97e": "Company()", +"50930ca5": "doFailingTransferFrom()", +"50933a0f": "Bitnusu()", +"5093cb38": "setEtherDelta(address)", +"5093dc7d": "setValue(int256)", +"50944a8f": "setMembership(address)", +"509484d5": "setStakeContract(address)", +"509515b5": "getWinnerAccount()", +"50963bc4": "returnTokensTo(address)", +"50965f57": "currentWulinMasterPrice()", +"509720a6": "putUint(bytes32,uint256)", +"50977faf": "fetchTokenBalance()", +"5097e51f": "Public()", +"509a13dd": "RoundId()", +"509a7e54": "getRoot(bytes32,uint64,bytes)", +"509bf2bf": "axe()", +"509c3fc8": "createTestNetContract(address,address,address,uint256,uint256,uint256)", +"509c5df6": "reservedFunds()", +"509c5eee": "ASGToken()", +"509c90b3": "callTokenFallback(address,address,uint256,bytes)", +"509cd360": "Board()", +"509d6d72": "mediumPrice()", +"509d8c72": "VALUE()", +"509f0fe4": "setupFundingTime(uint256,uint256,uint256)", +"509f6ff8": "AquaToken(uint256,string,string,uint8,uint8,address)", +"509f7cf2": "testingForFun(uint256[])", +"509f8633": "create_account()", +"50a09c7a": "refBonusPercent()", +"50a09d60": "SaleIsLive()", +"50a0f733": "final_shares_sold()", +"50a107cc": "setVotingPhase()", +"50a13702": "denyChangesMultitoken(uint256)", +"50a14ea4": "returnPreSaleTokens(address,uint256)", +"50a1676e": "createdAt(uint256)", +"50a1debd": "robAll()", +"50a22ee1": "BancorGasPriceLimit(uint256)", +"50a2f067": "getfromid(address)", +"50a3bd39": "enterPool()", +"50a49f5f": "getBurnDelegates()", +"50a58b3f": "exist(address,address[])", +"50a5c872": "host_reveal(uint256)", +"50a5ebd9": "updateSpaceshipStatus()", +"50a675fe": "QQBToken(address)", +"50a6887c": "UpgradedNodelist()", +"50a6b423": "settlementPayOut(bytes32,uint256)", +"50a7755e": "newDad()", +"50a82265": "EventEmergencyStop()", +"50a8246f": "testRIPEMD160()", +"50a85d36": "DeathNode()", +"50a8d2b9": "getNumSigsOwned(bytes32)", +"50a9b541": "bootyToken()", +"50a9cbd1": "partyCoincieded(address,uint256,address)", +"50a9e127": "backup()", +"50a9eddb": "testControlSetNotUpdatableNotOwner()", +"50ab6f7f": "getMsgs()", +"50ac9828": "FileData()", +"50ad2f76": "vendGuardian(uint256)", +"50ad7321": "GPSDecayingTokenEnvironment(uint256,uint256)", +"50adc70a": "winning_country_string()", +"50adcdb7": "fundToken()", +"50ae28ea": "StandardCertificate(string,string,string,string,uint256)", +"50ae85d8": "reservedAddr()", +"50aeddcf": "censorChatMessage(uint256)", +"50b0021c": "currentRandom()", +"50b04a4e": "getCountryById(uint8)", +"50b066b2": "changelp13(address)", +"50b149a9": "setPriceStep1(uint256)", +"50b1a697": "toReferrer(uint256)", +"50b1ab69": "PET(uint256,string,string)", +"50b1f058": "fetchPaidOrdersForPayer(address)", +"50b2ae66": "transferChips(address,address,uint256)", +"50b44712": "tickets(uint256)", +"50b48c5e": "autonomousConverter()", +"50b58c06": "JuggernautToken()", +"50b5bc93": "unlockFirstTokens()", +"50b62939": "getAddressBalance(address,address)", +"50b6ba0b": "getWtoken(uint8)", +"50b79722": "setSanLength(uint256,uint256)", +"50b7b7a2": "setRating(bytes32,uint256)", +"50b7e942": "acquireTokens(uint256,uint256,address,uint256)", +"50b82a48": "objectSack()", +"50b91881": "setKycWhitelist(address,address,bool)", +"50b926fd": "UnityToken()", +"50b93b3b": "sendBuzzCafe()", +"50b9963f": "_continueTokenPurchase(address,uint256)", +"50b9c428": "oraclizeGasLimit()", +"50baa622": "withdrawToken(uint256)", +"50bacea9": "icoPhaseAmount1()", +"50bb117a": "defrostDate(address)", +"50bb4e7f": "mintWithTokenURI(address,uint256,string)", +"50bc051e": "lockedForAsset(bytes32)", +"50bc373d": "regionAvailable(uint256,uint256)", +"50bc4ae6": "_joinToProvider(uint256,address)", +"50bc6bba": "createSaleAuction(uint40,uint128,uint128,uint40)", +"50bd1933": "UberDelta()", +"50bd5cb9": "logDisputeCrowdsourcerTokensTransferred(address,address,address,uint256)", +"50bda35a": "setCharge(bool)", +"50bda77e": "updateJobRate(bytes32,uint256)", +"50be7503": "giveToken(address,uint256,address,bool)", +"50beb835": "getDeploy(uint256,uint256)", +"50beca78": "isTrainer(address)", +"50bed043": "sendFunds(address,uint8,uint256)", +"50bfeadc": "initialTokens()", +"50c007c6": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[5])", +"50c0f2b9": "licenseTermsRegistry()", +"50c0fbe4": "getBlockNumber(uint256)", +"50c15c93": "depositChecking(address,uint32)", +"50c2e4f6": "ADVISOR_SUPPLY()", +"50c34878": "priceOfAUnicornInFinney()", +"50c35227": "central_account()", +"50c38479": "resetCurrentTokenOfferingRaised()", +"50c3e676": "resolveErrorReport(uint256,bool)", +"50c40877": "Nai()", +"50c42921": "replicate()", +"50c4b64c": "_unpackAuraValue(uint256)", +"50c4ebc4": "finalTimestampOfBonusPeriod()", +"50c5c99a": "setScrapyard(address)", +"50c67734": "setPricingStrategy(address)", +"50c6784d": "ShareableMock(address[],uint256)", +"50c6a4e0": "_buyPixelBlock(uint256,uint256,uint256,uint256,bytes32)", +"50c6ef88": "setChampsName(uint256,string)", +"50c7ac75": "addint8(int8,int8)", +"50c8512b": "CollectibleNoLongerForSale(uint256,uint256)", +"50c88103": "setEruptionThreshold(uint256)", +"50c8dbd2": "totalBlocksMined()", +"50c90136": "fixedLog(uint256)", +"50c90af0": "unLockAddr()", +"50c946fe": "getNode(bytes32)", +"50ca6227": "getTokenInfoData()", +"50ca73c8": "aSetLaunch(uint256)", +"50cc5d4b": "totalWeiVolume()", +"50cca1e1": "rejectMail(uint256)", +"50ccf36b": "getWeiPriceOneUsd()", +"50cd4df2": "o()", +"50cd4f3f": "ScratchTickets(string,uint256,uint256,address)", +"50cdbb6b": "setEarlyParticipantWhitelist(address,uint256)", +"50ce761d": "NumberCreated(address)", +"50cee5a0": "addToWallet(address,uint256)", +"50cf20dd": "richtestff(uint256,string,uint8,string)", +"50cf569c": "getUserAttribution(bytes32,address)", +"50d00b95": "authorizeProcessor(address,address,string,string)", +"50d0b060": "createVestingForFounder(address)", +"50d12a72": "payReferrer(address,uint256)", +"50d15fbe": "skills(uint256)", +"50d17749": "BuyLimits(uint256,uint256)", +"50d279bd": "changeRewardMintingAmount(uint256,int256)", +"50d2bfab": "set_exchange_rate(uint256[])", +"50d491ab": "userGetPendingTxByAddress(address,address)", +"50d4a2b9": "crowdsaleGoalReached()", +"50d4bf15": "buy100ktickets()", +"50d50324": "stopSaleDepo()", +"50d5914a": "TOKENS_PER_ETHER_PRESALE()", +"50d6d893": "_rejectTransaction(uint256,address)", +"50d78f7d": "QueryFrozenCoins(address)", +"50d7bf09": "record(string,string,string,address,bool,string,string,string)", +"50d7d290": "withdraw_refund()", +"50d7da00": "GSH(uint256,string,string)", +"50d808d4": "StartTradable()", +"50d80fef": "addOffChainAddress(address,address)", +"50d8bcf3": "SMLToken(address)", +"50d925fb": "REBELCOIN()", +"50d9b932": "PatronOneWithdrawal()", +"50d9d472": "numberOfAuctions()", +"50da9f6d": "SellENS()", +"50dad350": "Hodling(bool)", +"50db7247": "maxCapPreSale()", +"50dc26ec": "TokenUser(address)", +"50dc43a1": "addGameMachine(address)", +"50dc4bfe": "addUserFeedback(address,uint256,address,string,string,string,string,string,string,uint8)", +"50dcce5a": "upPrice()", +"50ddd6f7": "addToEmployerAvgRating(address,address,uint8)", +"50de84c1": "CesiraeToken()", +"50deda1c": "addtoken(address,uint256,uint256)", +"50dede35": "marketDrugs()", +"50df10c3": "lockTill(address,uint256)", +"50df7eb4": "unsoldTokensAmount()", +"50df8f71": "isReady(uint256)", +"50e01e16": "Registered(address,bytes4,string)", +"50e036ff": "allowedContractsCount()", +"50e06b57": "Etherization()", +"50e08ddb": "devidendsOf(address)", +"50e14731": "BKEXComToken()", +"50e17308": "maxMineSize()", +"50e17975": "_badgeFreeze(uint256)", +"50e1b95a": "getShipProductClassByModel(uint16)", +"50e26c23": "getAssetBaseInfo()", +"50e27f2d": "TicTacToeLockedState(address,address,address,address,address)", +"50e28cb3": "SECOND_USER_CUT()", +"50e2ccad": "CoreTeamAndFoundersSupply()", +"50e343d0": "prWallet()", +"50e37961": "setWhitelisting(address,uint128)", +"50e38e63": "groupMemberInfo(uint32,address)", +"50e3b157": "sharesValue(uint256)", +"50e43c9c": "c(address,int256,int256)", +"50e4b069": "set0xExchangeWrapper(address)", +"50e513ac": "destroyUser()", +"50e59eb3": "isMinter()", +"50e706fb": "getProposalFunds(uint256)", +"50e72f61": "Break()", +"50e78690": "getHomeGasPrice(bytes)", +"50e7dde2": "setParetoToken(address)", +"50e81a3b": "setProviderCompleted(bool)", +"50e81e08": "_releaseToken(address)", +"50e84925": "saleEnd3()", +"50e8587e": "multiApprove(address[],uint256[])", +"50e862db": "mint(bytes32,string,uint256)", +"50e86e1e": "setOwnerValidateAddress(address)", +"50e878df": "updateOrderAmount(address,address,uint256,address,uint256,bool)", +"50e9f948": "initialFiatPerEthRate()", +"50ea1932": "lookupISO3116_1_alpha_2(bytes)", +"50ea1c95": "MyIdolCoinToken()", +"50ea53db": "transferIncorrectDisputeBondsToWinningReportingToken()", +"50ea9274": "TokenRefund(address,uint256)", +"50eb2d02": "BBNToken()", +"50eb7ec4": "SupercarToken()", +"50eba4eb": "voteSnapshotBalanceBatch(address[],uint256[])", +"50ec2a6a": "batchCancel(address[5][],uint256[6][],uint256[])", +"50ec5903": "blackListSwithcer(address)", +"50ec6b1b": "getNamelistLength()", +"50ed2a2c": "poke(uint128,uint32)", +"50ed6264": "lastStakings(address)", +"50edd8c2": "nestedFirstAnyToAny(uint256)", +"50ee6de2": "candyLand()", +"50eebaf7": "mininumPurchaseTokenQuantity()", +"50ef3bae": "getQuestionVote(string,uint256)", +"50efc7c0": "districtToBuildingsCount(uint256)", +"50f07cf9": "setReadingDelay(uint256)", +"50f0880e": "sendLimitTokensToCompany(uint256)", +"50f0f83d": "getTransferFromFromValue()", +"50f1179a": "setPriceOfAss(uint256,uint256)", +"50f1c695": "authorizedLoggers()", +"50f2fb7f": "getCalls()", +"50f3dd7a": "assembleUnicorn()", +"50f4556b": "WhiteRhino()", +"50f462a4": "validationFailed(address)", +"50f46eef": "calcToken(uint256)", +"50f49db1": "getSlideEndTime(uint256)", +"50f4f9f8": "addShare(address,uint256)", +"50f503c1": "isSspRegistered(address)", +"50f5ef78": "getWork(address,address,uint256)", +"50f71526": "necashToken()", +"50f7c204": "maxTokenSupply()", +"50f8fc97": "LogCertificationDocumentRemoved(address,bytes32)", +"50f91ee3": "withdrawTokensRemaining()", +"50f93381": "logDisputeCrowdsourcerContribution(address,address,address,address,uint256)", +"50f956db": "nextAmount()", +"50f96b5d": "minEthPerNotification()", +"50f9b39e": "getReward(address,uint256,uint256)", +"50fa5d13": "stage4BeginTime()", +"50fb5a92": "buyWithReferral(uint128)", +"50fcff5c": "extCheckHalfLife()", +"50fdb01a": "setNewWinner(address,uint256)", +"50fe533b": "getLevitatingBirds(bytes32,uint64)", +"50feacc5": "PriceManual()", +"50fed3b4": "buy(address,uint256,uint256,uint256,bool)", +"50fef2e4": "tokenAirdropLeft()", +"50ff0761": "R_N_D_WALLET()", +"50ff2015": "endAtBlock()", +"50ff722b": "getChannelsGuids()", +"50ffbe81": "checkBan(address)", +"51003cab": "minimumIcoRate()", +"510040cb": "releaseLocked()", +"5100602a": "preallocate(address,uint256)", +"5100beab": "luxuriumGold()", +"5100db6f": "SYCC()", +"51017702": "isOutcomeSet(bytes32)", +"5101880f": "CPXWallet()", +"510219cd": "defaultAuctionDuration()", +"51027320": "EUNOMIA()", +"5102ad69": "setImpactRegistry(address)", +"5102bc9d": "setTitle(uint256,string)", +"5102e238": "test_oneInvalidEqAddress()", +"5103a5a3": "certify(address,bytes32)", +"5104a3a7": "burnedTokensCount()", +"5104cb5c": "refundOnBehalf(address)", +"5105df3b": "buyTicketByEth(uint256,bytes32,bytes32,bytes32,bytes32)", +"5106b8fe": "transfer(address,address[],uint256)", +"510792c8": "hydroPartnerMap(uint256,address)", +"5107c0a8": "FBEE()", +"5107fde8": "lockedTeam()", +"510a3e2a": "round2Bonus()", +"510ae121": "Yangshuai(uint256,string,uint8,string)", +"510b1529": "issueTranche(uint256)", +"510b5158": "creator(uint256)", +"510bf040": "launchVesting()", +"510c27ad": "getOracleList()", +"510c58c9": "Gig9()", +"510c8243": "CategoryDeleted(uint256)", +"510ccb43": "getRewards(address[])", +"510de15a": "ICOSaleExtended(uint256)", +"510e23eb": "invalidEarlyPurchaseIndexes(uint256)", +"510e4235": "_createForecast(uint256,uint256,uint256)", +"510ea296": "_createDiamond(string,address,string,string,string,string)", +"510ec598": "computeCurrentReward(address,address)", +"510ef1ce": "changeQuarterSeason(int8)", +"510ef1de": "setTokenMetadata(uint256,string)", +"510f44cb": "TestFactoryUser()", +"510fbf8d": "setValue(address,string)", +"511075a9": "getIpfsForAssets(uint256[])", +"5110d31c": "TradeEthShop(address,uint256)", +"5111249e": "checkMultOverflow(uint256,uint256)", +"51114b24": "interSendWithOtherEvent(address,uint256)", +"51118f1d": "transferFromSystem(address,address,uint256)", +"5112f02c": "getCard()", +"51131017": "setUpdateGasCost(uint256)", +"511354a1": "phase2MaxTokenForSale()", +"5113d5f7": "BTCETC(uint256)", +"51142cc3": "secondStageCap()", +"5114a9aa": "TheBestICO()", +"5114cb52": "makePayment(uint256)", +"51172285": "TwoAfrica(uint256,string,string)", +"51175e01": "setNumRewardsAvailableForAddresses(uint256[],address[])", +"51180c63": "removeValue(bytes32)", +"51192814": "GenesisBuyPrice(address,address)", +"51193bad": "LUVTOKEN()", +"5119a342": "GetUserInfo()", +"511aae8b": "addFreelancerContract(address,address,uint256)", +"511acd53": "TOKEN_RATE_30_PERCENT_BONUS()", +"511b1df9": "addr(string)", +"511b445b": "nowperiod()", +"511bb41c": "rebateTwoFenmu_()", +"511bc0f6": "_addOwner(address)", +"511c5d66": "SetAddressForReturn(address)", +"511d2299": "processBNBContribution()", +"511e2613": "getoddAndEvenBets(uint256,uint256)", +"511e5639": "KamuToken()", +"511e84ce": "setIsAutoRestart(bool)", +"511eb8da": "confirmOrder(address,address,address,address,bytes32)", +"511fa487": "getMinSell(address)", +"5120429c": "TokenSold(uint256,uint256)", +"51206d81": "getRefWallet()", +"5120bb20": "transactionsOn()", +"5120f028": "sendAmount(uint256,address)", +"512202d7": "getOuvidoriaEndpoint(int256,address)", +"51223fdc": "LogClaim(uint256,address,uint256)", +"512267b0": "rewardScarcityFactor()", +"51228c4e": "addReferralProfit(address,address,uint256)", +"5122c6d1": "onSell(bytes32,uint256,address,uint256,address,uint256,address,address,uint256,uint256,uint256)", +"512392cc": "BITCOIMINIG()", +"51239fde": "multiDistribute(address[])", +"5123e1fa": "etch(address[])", +"51243676": "LogBookTicket(uint256,address,string)", +"5124ae95": "getNonces(address)", +"51252412": "crowdsaleTargetBRA()", +"51254729": "CynkciarzToken()", +"512570d6": "updateBrand(address,string,bool)", +"5125796a": "changeOraclizeProofType(bytes1)", +"51259770": "GetEthShop(address)", +"51274842": "logEvent(uint256,string,uint256,uint16,address,uint256,uint256)", +"5127a94a": "getRaisedAmount(string)", +"5127ad4c": "getTokens(address,uint256,uint256,uint256,uint256)", +"5127cab5": "rateFirstRound()", +"5128ab7b": "GetSaleInfo_Airdrop(uint8)", +"5129096c": "INGCL()", +"51290d06": "cofounderB()", +"51297cc6": "airDropTokenEnabled()", +"512a9c33": "startCrowdsale(string,string,uint8,uint256,uint256,uint256,uint256,uint256,uint256,address,string)", +"512b64c6": "_productDoesNotExist(uint256)", +"512b658d": "mintToAddress(uint256,address)", +"512c0b9c": "randomDS_updateSessionPubKeysHash(bytes32[])", +"512d62df": "getClass(uint256)", +"512d8a87": "EdwanzToken()", +"512dd020": "getItemsCount()", +"512f1e64": "orderBookLength()", +"512f8f92": "changeLottery(address)", +"512f9890": "airDropFinished()", +"512fcd60": "changeOwner3(address)", +"512ff2c9": "CHEXToken(address,address,uint256,uint256)", +"51306a80": "_isVotable(bytes32)", +"5130b405": "setMinimumBidAmount(uint256)", +"5130c857": "forking()", +"5131d3e9": "setUseFreeze(bool)", +"5131f01d": "available_shares()", +"51327a6a": "emptyToWallet()", +"513284c6": "createShop(address)", +"5132faca": "stakeTokenContract()", +"51331732": "ICO_start()", +"51331ad7": "getRoleManager()", +"513419e3": "updateStartTimeManually(uint256,uint256)", +"513485fc": "CallRejected(address,bytes32)", +"51349d5f": "scheduleTier(uint256,uint256)", +"5135077b": "setContentName(string)", +"51355362": "transferWithFee(address,uint256,uint256)", +"51355cfb": "getTier(uint256,uint256)", +"51356817": "doPull(address,uint256)", +"5135d28d": "getScore(uint256,uint256,uint256[])", +"5135dffa": "NonActivationWithdrawal(address[2],uint256[8],uint256)", +"5135f714": "Basic(address)", +"5136099c": "premium(bool,address,address,address,address[],uint256[])", +"513611e5": "setStatusTransferFrom(bool)", +"5136260d": "getLockedFundsReleaseTime()", +"51379adb": "Crowdsale(address[],uint256,uint256)", +"5137aa7b": "reveal(bytes32,uint256,bytes32)", +"5137dd99": "only666()", +"5137de7a": "privateReleaseTime()", +"5138574b": "setNextCommonTTMTokenId3(uint64)", +"51392041": "getDividendTokenBalanceOf(address)", +"513a0149": "setRocCoreAddress(address)", +"513a976e": "YaqootToken()", +"513ad9cb": "EvTokenRm(uint256,uint256,uint256)", +"513cb145": "convertToUSD(uint256,uint256)", +"513d085b": "Pandemica()", +"513d16a7": "setFundingStartTime(uint256)", +"513de1d3": "changeDivisor(uint256)", +"513f7d1e": "tokenValue(address)", +"513f99e7": "tokenFrozen(uint256)", +"513fdce9": "addClearingPriceValidator(address)", +"51401d4d": "gameMaxBetAmount()", +"51404cbe": "forceDivestOfOneInvestor(address)", +"51409f51": "currentTradingSystem()", +"5142ba74": "rolloverFeePeriod()", +"5142bc1e": "getAllowedRangeOfChoices()", +"5142c3ec": "assertEq13(bytes13,bytes13)", +"51430cb3": "claimMaxAmount()", +"51431800": "getSendableEther()", +"5143284d": "start4NormalPeriod()", +"5143659d": "claimCooldowns()", +"51436641": "convertToMiniCQS(uint256)", +"5143821e": "_moveToArea(uint16,address)", +"514385be": "disableConnectorPurchases(address,bool)", +"5143a9fe": "deposit(address,uint256,address,bytes)", +"5143e246": "mintLocked(address,uint256)", +"5143eea2": "addOwnerFromRecovery(address,address)", +"514403b3": "setnodemoney(address,uint256)", +"5144417c": "news()", +"51446e85": "CITRUX()", +"51464905": "updateGoldInvestor(address)", +"5146585a": "calcInterestRateNumerator(uint256)", +"5146690e": "reservesWallet()", +"5147af92": "buyGasLimit()", +"51489551": "getToken(bool)", +"5148ccb9": "DynamicCeiling(address,address)", +"5148de8d": "minimumTimeBeforeUpdate()", +"5149ffcb": "calculateSubmissionIndex(uint256)", +"514a48ae": "_changeApproveDate(uint256)", +"514a88ae": "revokeSchedule(address,address,address,address)", +"514ae8a6": "MagneticsToken(uint256)", +"514b13f2": "presaleConversionRate()", +"514d6e07": "horseShoeFS(uint256)", +"514d7067": "workOrderCallback(address,string,string,string)", +"514d717c": "developReserveWallet()", +"514dcfe3": "seller_accept()", +"514ec8ae": "TOKEN_CENTS()", +"514f0330": "changeProtocolFeeRecipient(address)", +"514f310f": "_NewChallenge(address,bytes32,uint256)", +"514f4711": "In(address,uint256)", +"514fcac7": "cancelOrder(uint256)", +"515053c6": "depositBond(address,uint256)", +"5150e8ce": "CPPGToken()", +"515134b3": "TianZhuCoin()", +"5151e2cc": "GREENBIT()", +"5152249c": "Paladin(uint256,string,string)", +"51524e5b": "AirDrop(address[],uint256[])", +"5152abf9": "OrderCancelled(bytes32)", +"515361f6": "assertEq(address,address)", +"515371a3": "getWinnerAddress(uint256)", +"5154865a": "crowdFundAddress()", +"51548a2d": "TOKEN_AMOUNT_ICO_STAGE2()", +"5155287a": "whitelistedMin(address)", +"51553205": "PreSale(address)", +"5155bafa": "maxPeriods()", +"5155d9c6": "getPetCardSeries(uint8)", +"51560da9": "topDogInfo()", +"51563527": "passDao()", +"51576510": "bountiesWallet()", +"51582ef3": "sendProxyTransaction(address,uint256,uint256,bytes)", +"51584916": "allowexternalContract(address,uint256,bool)", +"5158c829": "RECFCO(address,address)", +"5158ea5e": "disallowUsers(address,address[])", +"51593759": "carCountOf(address)", +"515a20ba": "setExpiration(uint256)", +"515b1e41": "zss()", +"515b3557": "STARTING_CROCS()", +"515c1457": "emitTransfer(address,address,bytes32,uint256,string)", +"515cbcb4": "dropCoinsMulti(address[],uint256[])", +"515ced53": "best_submission_index()", +"515d4503": "getBarCodeDataAtIndex(bytes32,uint256)", +"515d4d52": "totalAmountsBet(uint256)", +"515da4b9": "transactionList()", +"515f128b": "COMMUNITY_POOL_TOKENS()", +"515f25ae": "launchShipOnMEA(uint256,uint8)", +"515fdde3": "migrateFunds(address,address[])", +"51602590": "threeHotHoursPriceOfTokenInWei()", +"51605d80": "imageHash()", +"5160a21e": "AddDomainInfoDocument(string,string)", +"51613683": "crowdSaleStart()", +"5162b2b2": "isAddressWhitelist(address,address)", +"5163311e": "getLastWinnerTicket()", +"51640fee": "getCertificate(uint256)", +"5164bb4d": "getCurrentStinkyLinkys()", +"51651003": "redenom_dao_fund()", +"516517ab": "make(uint256)", +"51656af5": "GuigsTokenSale(uint256,uint256,uint256,uint256,address,address,address,uint256)", +"51656f08": "AgesToken()", +"5165749e": "createToken(string,string,uint8,uint256,address)", +"516583fe": "depositFrom(uint256)", +"5165a03d": "payout(uint256,bytes32,bytes32,uint8)", +"5166b68f": "unfreezeTransfersUntil(string)", +"5166cf3d": "canAttack(address,address)", +"5168afa4": "getPackageHash(bytes,uint8,uint8,uint8)", +"5169ed0e": "getCCH_edit_29()", +"516a6b22": "PingoToken()", +"516ae993": "setChargeFee(uint256)", +"516af259": "setCurrentStage()", +"516b48fb": "insertList1(uint256,string,string,string,string,string)", +"516c731c": "setOwner(address,bool)", +"516cbe1a": "efwtest()", +"516cd39b": "revokePermissionFrom(address)", +"516d70c3": "lockAllocationAddress(address)", +"516dde43": "expiryDate()", +"516de876": "go(bytes16)", +"516dea30": "post_relayed_call(address,address,bytes,bool,uint256,uint256)", +"516e7be7": "contractFailed()", +"516e9aec": "lockAndDraw(address,uint256)", +"516ed622": "registerDINs(uint256)", +"516edc99": "UNITYCOIN()", +"516f279e": "location()", +"516f6afd": "Project_Enable(uint256)", +"516f8986": "TOKENADDRESS()", +"5170a9d0": "returnSender()", +"517125fa": "minTokensForSale()", +"51714d2d": "CIRCLECOIN()", +"517186f3": "ownerModOperator(address,bool,uint256)", +"5171bdec": "AllocationProcessed(address,address,uint256)", +"51720b41": "targetContractId()", +"51731f21": "changeFreezeTrading(bool)", +"51751612": "EtchToken()", +"51758666": "getMesa(uint256)", +"5175f65c": "_ownerApproved(address,uint256)", +"51764a94": "Lesson_3(address,uint256)", +"51768e4d": "updateItem(uint256,string,uint256,uint256,uint256)", +"51777183": "private_setRandomAPI_extract(string)", +"5177942a": "setFeeRate(uint8)", +"51780fdb": "w(address,address,uint256)", +"51784a75": "withdrawPlat()", +"517880df": "secondaryICO(bool)", +"51788439": "hashRequest(address,address,uint256,uint256,address)", +"517a626f": "getUserLengthOnEther()", +"517a70d4": "mintAmount3()", +"517a9d64": "share(address,address)", +"517afbcf": "votingController()", +"517b1d8f": "setRegionCurrentPixelPrice(uint256,uint256)", +"517b2fa8": "depositDaiFor(uint256,address)", +"517c48c3": "LATPToken()", +"517c8b12": "GetTicketOwner()", +"517cf73e": "getSupplyRate(address,uint256,uint256)", +"517d95fa": "addusermoney(address,uint256)", +"517e62ab": "getTxTimestampPaymentKWh(bytes32)", +"517ebace": "eosOf(address)", +"517ee2e8": "CSLottery()", +"517ee30d": "CreateHOLY(address,uint256)", +"517f4a23": "SalesManager()", +"517f6c51": "HardcodedCrowdsale(uint256,uint256,uint256,uint256,address)", +"517fe4de": "showUser(address)", +"51804743": "LandAccessControl(address)", +"5180629d": "transferByOwnerContract(address,uint256)", +"5181500d": "ExoplanetToken()", +"51819edb": "emergencyWithdrawParsecs(uint256)", +"5181aa01": "RELEASE_END()", +"51838717": "addSmartContract(address)", +"5183f10b": "getDataOfIdentity(bool)", +"51843b06": "supporterBalances(address)", +"51846028": "setColorsX8(uint16[8],uint256[40],uint256)", +"518496b2": "proposedWithdrawal()", +"5184c96d": "escrowList()", +"5184cc43": "getFactor()", +"5184ffc9": "setAmbiAddress(address,bytes)", +"51858e27": "emergencyPause()", +"5185b724": "allocateReservedTokens(address,uint256)", +"51867b19": "withdrawnFrom(address)", +"5187527f": "reversePurchase(address)", +"5187a7d7": "GetSign(string,address)", +"51883f6e": "RecievedAnonDonation(address,uint256)", +"5188875b": "withdrawalToken()", +"51888969": "weiRaisedPreIco()", +"5188f996": "addContract(bytes32,address)", +"51892c0f": "BIGER(address)", +"51892f07": "changeMintingAddress(address)", +"518995cd": "addClip(string)", +"518999f2": "TSTORZCo()", +"518a5b7a": "implementsMethod(address,bytes4)", +"518ab2a8": "tokensSold()", +"518ada3b": "GetUserBets(address)", +"518adacd": "notifyAuthority(string,string)", +"518b1a33": "ALLOC_LIQUID_TEAM()", +"518b4372": "getInvoices(address,uint256)", +"518b7a29": "totalDETsSold()", +"518bddd9": "getCustomer(string)", +"518bed3f": "calculateTokensAmount(uint256)", +"518c0f17": "tokensOnThisChain()", +"518d3b64": "getTotalSent()", +"518d6c2d": "_preApprove(address)", +"518d7981": "adjustBalance(address,address,int256)", +"518e62db": "createOrder(address,address,uint256,uint256,uint256)", +"518f2f10": "setAddressAuthorization(address,address,bool)", +"518fd40e": "cdtTokenAddress()", +"5190674b": "resignAsCurator(address)", +"51906bb0": "endTimeStamp()", +"51913124": "batchTransferMSM(address[],uint256[])", +"5191e37f": "listMultipleItems(uint256[],uint256,uint8)", +"51922341": "transferICOFundingToWallet(uint256)", +"5192f3c0": "boolToInt(bool)", +"519559ed": "contractMax()", +"5195e8c5": "mintData()", +"51965e75": "getRocrocId(uint256)", +"51971109": "UntungWaluyo()", +"51973391": "sentBonus()", +"51973ec9": "log()", +"5197c7aa": "getX()", +"519903f1": "unionBalance()", +"51992fcb": "addTokenAddress(address)", +"519936db": "StartAuction(string,uint256,uint256)", +"5199f1de": "lastYearTotalSupply()", +"519a078f": "getCommunitybyIndex(uint256)", +"519a1a41": "getSetup(address,bytes32)", +"519a73c3": "stopAcceptingDonation()", +"519af30e": "withdrawAllEth()", +"519be2f5": "resetDemo()", +"519bf602": "reward8()", +"519c6377": "signup(string)", +"519d1059": "setPurchased(address,address,uint256,uint256)", +"519e55da": "getStorage(string)", +"519e9a92": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1)", +"519ee19e": "tokenSold()", +"519f9590": "appointNewCFO(address)", +"51a073fb": "removeFromSpecialRatesMapping(address,address)", +"51a0aff0": "stockBuyOrder(uint256,uint256,uint256)", +"51a0c395": "myUsingOraclize()", +"51a11e94": "tokenIssued()", +"51a14c9f": "GetPartWeight(uint8,uint256)", +"51a1ad6b": "VikkyTokenAirdrop(address,address)", +"51a1c192": "get_solution()", +"51a282ae": "bidEMONTIncrement()", +"51a28572": "SALE0_RATE()", +"51a36e34": "changeCrowdfundContract(address)", +"51a3aed5": "getCompanyPreferences(string)", +"51a4cd73": "sellCoins(uint256)", +"51a4f7f2": "Har(address,address,address,uint256,uint256,uint256)", +"51a5f2f2": "ConsultingHalf(address,address)", +"51a6b851": "actual_feedout()", +"51a76924": "getSpeed(uint64,uint64)", +"51a784e3": "currentCirculating()", +"51a88a38": "PictureLibraryCoin(uint256)", +"51a8a8a4": "clearDividends(address)", +"51a8c3d7": "PausableCrowdsale(bool)", +"51a9111a": "BONUS_PRE_ICO()", +"51aa0199": "ethereumPrice()", +"51aa0a30": "modifyPMTAccount(address)", +"51aadcdf": "crowdSaleContract()", +"51ab351c": "BONUSONE_DATE()", +"51ab720d": "numOfTimesSteal()", +"51ac0d10": "getTimeBasedBonusRate()", +"51ad0299": "Ship(string,uint256)", +"51ae7f95": "COMPANY_TOKENS_LOCK_PERIOD()", +"51ae8754": "calcSectionTickets(uint256[],uint256[])", +"51af083b": "MONTH_IN_MINUTES()", +"51afc4af": "_getMinAuctionSeconds()", +"51b07a96": "getUSDT(uint256)", +"51b0b931": "updataLockPercent()", +"51b2270f": "getICOLength()", +"51b30900": "generateMemoryProof(uint256[],uint256)", +"51b3666f": "applyBooster(uint256,uint256)", +"51b3d7b9": "_transferWithReference(address,uint256,string)", +"51b41b62": "getAllOwnersOfCard(address)", +"51b42b00": "deactivate()", +"51b46399": "triggerUnpauseEvent()", +"51b488d4": "throwsWhenGettingTokensInNotInitiatedSale()", +"51b546af": "EDCoreVersion1(address,address,address,address)", +"51b59341": "MoncryptToken()", +"51b644c0": "roundedDiv(uint256,uint256)", +"51b6914a": "Lara(uint256)", +"51b699cd": "isAuthorised(address)", +"51b6fe96": "distributeTokens(address,address[],uint256[])", +"51b72a9a": "removeActivator(address)", +"51b79495": "performFeelessTransaction(address,address,bytes,uint256,bytes)", +"51b79d55": "maxPremium()", +"51b95400": "SophosToken()", +"51b98927": "_withdrawProfit()", +"51b9a2f8": "ballotVoters(uint32,address)", +"51b9c785": "step_level()", +"51ba24c7": "Token_ExchangeValue()", +"51ba5f04": "registerImpact(string,uint256,uint256)", +"51ba7534": "LastExec()", +"51babf0c": "sellToken(address,uint256,uint256,bool)", +"51bba1cc": "itemTransferred(bytes32,uint256,address,address)", +"51bcc53e": "checkFloatingOwnSupply(address,uint256,bool,uint256)", +"51bdd585": "currentChallenge()", +"51bdf229": "DummyContract(uint256,uint256,uint256[10])", +"51be2361": "InterCrypto_Wallet()", +"51c03b85": "makeBid(uint16)", +"51c08f4d": "gameTimeOut()", +"51c13af3": "MAX_ALLOWED_BOUNTY()", +"51c15991": "endGamblingParty(uint256,int256,int256)", +"51c1ae00": "DGClubCoin()", +"51c1bba1": "offlineGame(address)", +"51c221ec": "holderReserveTokens()", +"51c3934f": "getContractsByStatus(address,uint256,uint8)", +"51c3a2c6": "CPCEFundDeposit()", +"51c3a5d3": "getPollsSize()", +"51c3b8a6": "setFreezing(address,uint256,uint256,uint8)", +"51c40c6f": "setIntrospectionRegistry(address)", +"51c4e395": "logMarketCreatedCalled()", +"51c54c68": "buySprite(uint256)", +"51c54ec6": "transferAllBalance(address)", +"51c5d54d": "rateSecondWeekEnd()", +"51c65298": "exportFund()", +"51c69b12": "twoMonthsLater()", +"51c72c87": "ProofTeamVote(address)", +"51c74a9e": "addCertificate(bytes,bytes,bytes,address)", +"51c81f01": "setBursar(address)", +"51c85565": "nextTournamentBank()", +"51c875d2": "DB()", +"51c8d4d0": "get_arbits_whitelist(address,address)", +"51c8e02a": "setStore(int256)", +"51c9b233": "changepublicbonus(uint256)", +"51ca0eb8": "FACTOR_PRESALE()", +"51ca6966": "RefundableCrowdsale()", +"51ca7a94": "addNodes(string,address)", +"51cb21ff": "getgamecardname(uint256)", +"51cb6ecd": "addRandomFight2Death(uint256)", +"51cb860a": "setAccountNote(string)", +"51cb9712": "newExpertise(uint256,uint256)", +"51cbb299": "getClosingObligation(uint256)", +"51cc391d": "MULTI_SIG()", +"51cc4d1d": "payDemurrage(address,address)", +"51cc508d": "Zeinun()", +"51cc7cbe": "PawCoin()", +"51cd7c0f": "MatchPayoff(uint256,uint256,uint256,uint256)", +"51cdac6b": "find(address)", +"51ce3207": "getStockOwnerInfo(address,address)", +"51cf6b22": "burnInvestorTokens(address,address,uint256)", +"51cfa44b": "getStarTotalSupply(uint8)", +"51cfc731": "transferFromContract(address[],uint256[])", +"51cfdd58": "Dewcoin()", +"51cff8d9": "withdraw(address)", +"51d10161": "boughtToday(address)", +"51d20c7c": "Exchange_ETH2LuToken(uint256)", +"51d24a33": "addNewBoard(bytes32,string)", +"51d28a7e": "saleTokenPrice()", +"51d2a1e4": "getDepositRoot(bytes)", +"51d2a8fe": "BIKSPRO(uint256,string,uint8,string)", +"51d2cc8f": "grid(uint256)", +"51d31822": "setMarketAddr(address)", +"51d34040": "returnBet(bytes32)", +"51d38d5f": "addDeveloper(address,string)", +"51d467f5": "getLogFillArguments()", +"51d53bee": "HRHToken(uint256,string,uint8,string)", +"51d550d2": "getPendingBalance(address)", +"51d59a20": "impl_incomeOf10k()", +"51d5d98d": "hasEnoughTokensLeft(uint256)", +"51d5f44f": "saleHero(uint256)", +"51d6e547": "getNonce(bytes)", +"51d74ce5": "SetWageredWei(bytes32,uint256)", +"51d75dc6": "BUYER_STEP_2(bytes32)", +"51d962e1": "endRelease()", +"51d977a6": "TEST()", +"51d997b2": "isAbstainAllow()", +"51da463a": "_revokeAccess(bytes32,address,address)", +"51dabd45": "disapproveAll(address)", +"51dbc419": "_drainGame(bytes32,address,uint256[10])", +"51dc7659": "winNum()", +"51dc7f7d": "setPreferredCurrency(address,bytes4)", +"51dd3164": "getCurrentMinimum()", +"51dd8119": "announceFork(string,string,uint256)", +"51de097f": "e_Withdraw(uint256,uint256,uint256)", +"51de5541": "castUpgradeVote(uint8,address,bool)", +"51dea0ae": "updateOwnerShares(address[],uint256[])", +"51ded741": "rateThirdWeekEnd()", +"51df6d27": "GlobalLotteryToken()", +"51df9db9": "newPrice()", +"51dfc14d": "tokensOfferedOf(address)", +"51dff989": "redeemVerify(address,address,uint256,uint256)", +"51e00935": "Arrays()", +"51e09631": "totalVestedTokens()", +"51e0e26b": "allowedContracts(address)", +"51e10aa6": "calculateToFund()", +"51e16546": "_payFee(uint128,address)", +"51e1d427": "boolMemoryArray()", +"51e1ee12": "ContractorProposalClosed(uint256,uint256,address,uint256)", +"51e22125": "addPresaleWhitelist(address,uint256)", +"51e4eb07": "setContributionLockPeriod(uint256)", +"51e51b55": "startPreSalePhase()", +"51e55767": "getWeiPerContributor(address)", +"51e699a8": "setMainSaleDates(uint256)", +"51e6ba1d": "toggleContractFreeze()", +"51e6edee": "RETZO()", +"51e7f12e": "_doDestroyTokens(address,uint256)", +"51e82eec": "totalSetCredit()", +"51e94406": "weiRaisedPreSale()", +"51e946d5": "freezeAddress(address)", +"51ea468b": "getSupportersAddress()", +"51eace10": "unfreezeStartTime()", +"51eb5e93": "overdraftPeriodLength()", +"51ebe2f1": "bursarAddress()", +"51ec4285": "unvote(uint256)", +"51ec4525": "first_player()", +"51ec4fc7": "limitAddress(address)", +"51ec8433": "STTadmin2()", +"51ecabd6": "toPayable(address)", +"51ecfd16": "getCatPrice(uint256)", +"51ed17a4": "reservedTokensList(address)", +"51ed8288": "buyNFT(uint256)", +"51ed96b9": "enableContribPeriod()", +"51edbdbb": "setForeignBridgeErcToErcImplementation(address)", +"51edffed": "identifierIsOriginal(uint256)", +"51ee387d": "dividendsAvailable(address)", +"51ee43e5": "lottery(int8)", +"51eec810": "setCapitalization(uint256)", +"51eecc23": "setupBounty(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"51f1333e": "relievePool(uint256)", +"51f1fa97": "POHStartTime()", +"51f2f1d1": "timeTransferbleUntil()", +"51f364d5": "currentCostToPress()", +"51f3a7bd": "CoinFlip()", +"51f3b4bd": "collectFees(uint256,address)", +"51f468c0": "setClaimPrice(uint256)", +"51f4ec50": "setWriterId(bytes32,bytes32)", +"51f514d3": "computePayeeBalance(address,address,uint256)", +"51f550be": "IcoSupply()", +"51f59db2": "test_claimShares_emptyFeePool_notTranscoder()", +"51f68d80": "calculateLRCUnlockAmount(uint256,uint256)", +"51f6d8c6": "setBalances(address[],address,uint256[])", +"51f6f870": "createMicroModule(uint256)", +"51f80746": "DXBToken()", +"51f91066": "tag()", +"51f93215": "bond(bytes32,uint256)", +"51f96d33": "verifySignature(address,address,address,uint8,bytes32,bytes32)", +"51f9ff35": "lastDividendIncreaseDate()", +"51fa5810": "getEnginesIds()", +"51fa7efd": "returnAmountToMainAccount(uint256)", +"51fab7ff": "transferRemaining()", +"51fae45d": "astroIDPool()", +"51fafb72": "setSubscribe()", +"51fafd95": "cashierAddr()", +"51fb012d": "whitelistEnabled()", +"51fb3043": "tokensForPresale2()", +"51fb4001": "rateIcoMainSale()", +"51fba575": "NRB_Users()", +"51fbd91e": "donationsReceiver_()", +"51fbfe9d": "migrationCountComplete()", +"51fc6f59": "TokenManagerEntity()", +"51fd2c69": "quantityHeldInCustodyOfExchange(address)", +"51fdaf92": "checkExpiredfunds()", +"51ff1a06": "PaparazzoToken()", +"51ff4847": "signature()", +"51ffcab3": "bid(uint32)", +"51ffd9e7": "getRatePerTimeUnits(uint256,uint256)", +"52006050": "setBurnBounds(uint256,uint256)", +"5200d643": "OPENING_TIME()", +"52013484": "CalcWinnersAndReward(uint256[],uint256)", +"52019dc3": "payTokens()", +"5201effb": "setCompletionTime(uint256)", +"520282d0": "getBcouponAllocationFactor()", +"5202b615": "numberOfClosedGames()", +"52030899": "preSaleBlockNumber()", +"5204cfe1": "OpenRedEnvelope(string)", +"520543ab": "endStage2()", +"52058d8a": "tokenSupplyCap()", +"5205b80f": "getLeftToken()", +"52063985": "unlockAddr()", +"5206fea3": "_transfer(string,string,uint256)", +"5207c391": "setWhitelistedBatch(address[],uint256)", +"5208a157": "getCardsFromHash(uint256,uint256,uint256)", +"5208ce36": "STQPreICOTestHelper(address,address)", +"52091047": "changeVotingRules(address,uint256,uint256)", +"520929b6": "AlgeriaToken()", +"520aea97": "setNote(uint256,bytes32,bytes20,string)", +"520b1b65": "testGetAllCases()", +"520ba154": "changeAcct2(address)", +"520bbba3": "generateRequestAttestationSchemaHash(address,address,address,bytes32,uint256[],bytes32)", +"520bf4d8": "SmallInts()", +"520c37b7": "setOCGFee(address)", +"520c3db7": "relayRelease(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"520c5828": "whitelisting()", +"520c7c8c": "bountiesAllocation()", +"520c7d6f": "PAYOUT_ATTEMPT_INTERVAL()", +"520ce36a": "Permian()", +"520ce39e": "DamnRocks()", +"520d3f0d": "getrate()", +"520e12d7": "getCertAddressByID(string)", +"520e7b0e": "offer_energy(uint32,uint32,uint64,uint64)", +"520e8143": "returnTokenToWallet()", +"520eb620": "getTemplateByProposal(address,uint8)", +"520ee757": "NewSandwichTicket(string,address,string,string)", +"520fa2c1": "BetleyToken()", +"520fd799": "Nplay()", +"52108d4c": "setCCH_edit_30(string)", +"5210eb56": "targetAddress()", +"5211ac2e": "withdrawWei()", +"5211e91e": "CSTToken()", +"5211f843": "bbNetworkGrowthWallet()", +"52122abf": "JackpotHits()", +"52125b86": "eventcount()", +"5212e6ea": "firstExtendedBonusSalesEnds()", +"5213cca8": "AdvisorPoolAddress()", +"52146744": "AteamBets(uint256)", +"52159bcf": "CreateCityData(address,uint256,uint256)", +"5215ad0b": "batchTransfer(address,address[],uint256)", +"5215cb88": "onPresaleComplete()", +"5216509a": "numCandidates()", +"5216aeec": "totalInvested()", +"5217b774": "redeem_withdraw(address,address,uint256)", +"5217cdff": "greyToken()", +"52180208": "take(address,uint256)", +"5218402d": "claim_bix_with_not_start()", +"52185f0e": "isWithinAllocation(address,uint256)", +"5218bfbb": "getOffer(bytes32,address)", +"5218c37d": "bulkRejectTransfers(uint256[],uint256[])", +"5218f3b3": "CoinStocker()", +"52194acf": "addBank(address,address,uint256)", +"52196812": "getLoanCount()", +"5219823a": "hashMessage(bytes)", +"52199094": "setBurningPercentage(uint256)", +"5219a566": "hashForSignature(bytes32,uint256,address,bytes32)", +"5219a72a": "mcgregortoken()", +"5219ffb8": "withdraw_tokens_for(address)", +"521af962": "DataBrokerDaoToken(address)", +"521b20ec": "highestBidAddress()", +"521b601a": "setData_26(string)", +"521b7499": "setStageVolumeBonuses(uint256,uint256[],uint8[])", +"521be69c": "applyTokens(address,uint256)", +"521c82be": "getCCH_edit_17()", +"521cd656": "playersAmounts(address)", +"521ceba7": "pusherTracker_()", +"521d56c6": "regeneration()", +"521d80f8": "fundsTransfered()", +"521e5770": "fechCurrentSnapshotBlockIndex()", +"521eb273": "wallet()", +"521ec3af": "MGLTToken()", +"521ee1ae": "purchaseFor(address,address)", +"521f4195": "isOwn(address,uint64)", +"521fba45": "setTokenInfo(string,address,address)", +"521fba71": "getRandom256()", +"521fbd3a": "deploytime()", +"521fd5be": "getSingleBet(uint32,uint32)", +"52200a13": "getNumHolders(uint256)", +"522103fa": "changeUnicorn(uint256,address)", +"5222cd8a": "Deal(bool,uint8)", +"5223478a": "setIsPoop(bool)", +"52238fdd": "calculateFees(uint256)", +"522471fc": "setTotalWithdraw(uint256,address,uint256,address,bytes,bytes)", +"5224dfbe": "mainTokensPerDollar()", +"52251884": "setForwardPurchaseFeesTo(address)", +"52253542": "playSingleDiceBet(uint256,uint256)", +"5225528e": "getBadAddresses()", +"522567c8": "transferedTokenOf(address)", +"52256d44": "MuratCoin()", +"522577e9": "totalIncome()", +"522637e7": "CMCLToken(uint256,string,string,address)", +"52279295": "interestRatePerCycle()", +"52288195": "Sell(uint256)", +"5229c56f": "getDecreaseAllowancePreSignedHash(address,address,uint256,uint256,uint256)", +"522a6cf3": "computeMilkSellPrice()", +"522afaec": "increase(address,uint256)", +"522bb704": "run(address)", +"522c8401": "bidOnSiring(uint256,uint256,uint256)", +"522dba5b": "GoldTokenMinter()", +"522dc0b1": "walletsFromUser()", +"522dd549": "advisor3Sum()", +"522de7d3": "verifySubmissionIndex(uint256,uint256,uint256)", +"522dff9a": "setMocount(uint256)", +"522e1177": "complete()", +"522e2d3c": "BiathlonToken(address,address,string,string,uint256,address)", +"522e35fb": "changeIssueManager(address)", +"522e4c8a": "addStaff(address)", +"522f6815": "withdrawEther(address,uint256)", +"522f9585": "setNewWallet2(address)", +"52306f4a": "isCBE(address)", +"52314508": "registerOutcome(string,uint256)", +"5232d457": "PayoutEvent(uint256,address,uint256)", +"52337ab0": "interact()", +"52346412": "transfers(address[],uint256[])", +"52353e5b": "assetsOnDeposit()", +"52357779": "currentRId_()", +"523615aa": "AddApprovedAddress(address,address)", +"52374af1": "bitPremiumToken()", +"52375093": "m_lastDay()", +"5237d235": "getRightToken()", +"5237e325": "getAdIdByCat(uint256,uint256)", +"52380eba": "entitled()", +"52380f65": "MoneyAddedForRefund(address,uint256,uint256)", +"52388c1b": "AndreisToken()", +"523898f4": "cooperativeClose(address,uint8,uint256,bytes,bytes)", +"523934bb": "registerExport(bytes8,bytes8,uint256)", +"52393d45": "SGDT()", +"523a0b0d": "privateMaxEtherCap()", +"523a3f08": "withdrawReward(uint256)", +"523ad959": "bullAmount()", +"523aee69": "changeTokenContract(address)", +"523afb0d": "bet(bool)", +"523b6ae3": "MycoinToken(address,address)", +"523c02f5": "getRateForExternal(string)", +"523ccfa8": "isKnownCall(address)", +"523d897e": "wsub(uint128,uint128)", +"523da442": "getCurrentBonusTier()", +"523deadb": "getOwner(address,address)", +"523e27d4": "currentInvestor()", +"523e57be": "mintForHolders(address[],uint256[])", +"523e9551": "increaseCap(uint256)", +"523f110e": "updateRegion(address[16],uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", +"523f52c6": "setTgeIssuer(address)", +"523f53a6": "IntigoTest()", +"523f891c": "totalEligibleVotes()", +"523fba7f": "tokenBalances(address)", +"5240346d": "TV()", +"52405f56": "getMilestoneInformation(uint256)", +"52411891": "add(uint256[2])", +"52415840": "testMe()", +"5241590d": "addToAddressBalancesInfo(address,uint256)", +"52416347": "ParameterSet(string,string)", +"5241b39d": "renewal()", +"52437187": "callLib(uint256)", +"5244128a": "_claimableTokens(address)", +"52441d7d": "getCurrentUserShareBonus()", +"52447ad2": "doMint(int256,uint256)", +"52447d92": "burn_from(address,address,uint256)", +"5244d9a8": "removeIdentifier(bytes32)", +"5244ed87": "joinToTrack(uint256)", +"524559a3": "periodPreICO()", +"5245849e": "allowedAmountToTransferToPool()", +"5246a8df": "verifySig(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,address)", +"524705ef": "getsysdayeths()", +"52476ceb": "shareTimeGap()", +"524773ce": "burnCount()", +"5247b9e9": "firstMintRound0For(address[],uint256[],bool[])", +"5248f2c8": "removeBankroll()", +"52494a14": "_isOwner()", +"5249be25": "tokenPriceUsd()", +"524a2ed9": "setBAUU(bytes32,address,uint256,uint256)", +"524a8131": "STARTING_ASSET_BASE()", +"524aa413": "ValidateWorldSnapshot(uint256)", +"524aae98": "getPromoLOTEarnt(uint256)", +"524b5cb9": "approveMintDelegate(address,int256)", +"524bd747": "getNbDemandes()", +"524d5ddb": "wagerPool5()", +"524d7daf": "verifyGame(uint256)", +"524d81d3": "numContracts()", +"524dcda3": "MINT_LOCK_DURATION_IN_WEEKS()", +"524e1149": "joinCreateGame()", +"524e2444": "setPI_edit_32(string)", +"524e4e61": "testDistribution()", +"524e65b9": "_getWinnerBetted(uint32,uint32)", +"524e915d": "player4Timestamp()", +"524eb29c": "setRequestBurnerContract(address)", +"524ee639": "setSpaceImpulse(address)", +"524f3889": "getPrice(string)", +"524fa7b9": "whitelistAdd(address)", +"52507790": "transferAfterDeadline()", +"52512599": "latpToken()", +"5251a343": "stopPurchaseTokens()", +"52529852": "W0kiT0ken()", +"5252cb2f": "generateUnsoldTokens(uint256)", +"525417f1": "getNextKeyTime()", +"52541b68": "takeAGuess(uint8)", +"525426fd": "increaseUSDRaised(uint256)", +"52545021": "AkshayToken(uint256,string,string)", +"52548946": "isSimple()", +"5254a38c": "onERC721Received(uint256,address,bytes)", +"5254b595": "TransferIndex()", +"5254b660": "canDeCompose(string)", +"5254c846": "getAction(uint8)", +"525550ea": "rescueAddress()", +"52556421": "getIssuer()", +"52556a46": "State(address[])", +"52558c2b": "CSPTToken()", +"5255a07b": "HeroTokenAuction(uint256)", +"5256a36e": "MAX_ICO_GOAL()", +"5256fcaf": "_giveRNG(uint256,uint256)", +"52573529": "setupPeg(address,address)", +"52578012": "createService(string)", +"5257c2b3": "soldTokenInPresale()", +"5257c508": "ico1Cap()", +"5257c825": "registerNameXIDFromDapp(address,bytes32,uint256,bool,uint8)", +"5257cd90": "randomNumbers(uint256)", +"5258d9f4": "unequipSingle(uint256)", +"5259347d": "default_helper()", +"52595c0d": "getOraFee()", +"5259fcb4": "centsRaised()", +"525a0ac8": "Claim(address,uint256,bool,string)", +"525a8cf0": "add_product(uint256,uint256,string,string,string,string,string)", +"525b25b1": "getDeploymentReward()", +"525b3fe3": "presaleLimit()", +"525c3966": "GMCB()", +"525cedae": "TeamTokensAllocation()", +"525d0537": "getWinnerFunds(uint256[])", +"525f8a5c": "setSaleStartTime(uint256)", +"525ffb7c": "ownersPayed()", +"52608d85": "rateEth()", +"5260de57": "numberOfTokensPerUser()", +"52613423": "OLOVE(uint256,string,string)", +"52617234": "changeSalePeriod(uint256,uint256)", +"5261ee83": "amountOfOwners()", +"5262c873": "calcGain()", +"52631ab4": "lastNonce()", +"52638d75": "create(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"5263ba87": "getLatestPatchTree(bytes32,uint32,uint32)", +"5263dbf3": "RooToken()", +"52642070": "DinarETHCrypto()", +"526441bb": "ExecutionFailure(uint256)", +"5264ff53": "test_forAgainst()", +"5265440c": "checkIsAttached(uint256)", +"5265565e": "_ecosysSupply()", +"5265a078": "getMemoryWordsLog2()", +"5265db80": "setPriceRatePhase1(uint256)", +"526606c9": "addFreezer(address)", +"52666403": "lockRewardToken(address)", +"5266cc7b": "init(address,uint256[],uint256,uint256,uint256,uint256,uint8,string,string,uint8,bool)", +"52675be3": "getElectionName(uint256)", +"5267bd0c": "allowedRefund()", +"5267e681": "Tokens_Per_Dollar_Numerator()", +"526825af": "updateFcontracts(uint256)", +"526938f8": "left35(uint256)", +"5269660c": "createInvestment(uint8[])", +"526a6b48": "transferTo(address,uint256,bytes,bytes)", +"526a99c8": "getJackpotLoseSide(address,address)", +"526aadc2": "mintBaseLockedTokens(address,uint256,uint256,uint256)", +"526b71f4": "InvestboxToken()", +"526b8462": "getPersiansOnTheBattlefield(address)", +"526b91d1": "transferSysAdmin(address)", +"526ba9fa": "TSB()", +"526bc7fa": "getGenCode()", +"526cb803": "getAllOfferingProposals(address)", +"526de5ea": "addChunk2ToWhiteList()", +"526e4d79": "requestRemainingTokens()", +"526e7f3a": "AWD()", +"526f652d": "propertyIdToOwner(uint256)", +"526ff1f0": "TLB()", +"52700ef0": "_changeClosingTime()", +"52704644": "transferFromInternalstaffdisbursementfund(address,uint256)", +"52709725": "owner2()", +"5270aa7d": "EtherGoToken()", +"5270d70d": "readBytes32s(bytes32[])", +"5271027b": "rentFlatDaily(uint256)", +"5271309f": "migrationInfoSetter()", +"5271500b": "batchAddCandidate(address[],bytes32[],bytes32[])", +"52736814": "dutchAuctionToBuy()", +"52748cfe": "addDataResponseToOrder(address,address,address,string,bytes)", +"52753640": "registerXRateProvider(address)", +"52757292": "getEventSecond(uint256)", +"527596bf": "getDeployedChildContracts()", +"5276b91c": "BlackHToken()", +"52772264": "Contract(bytes32)", +"52774565": "getMyLockedFunds()", +"527749a4": "add_bounty(uint256,bytes32)", +"5277fda5": "bookWithEth(uint256,uint256,bytes,string,uint256[],bytes32)", +"52782648": "emitSkillAreasSet(address,uint256)", +"527942ac": "secondWeekPreICOBonusEstimate()", +"52798dae": "buyTicketByEarnings(uint256,uint256,string)", +"5279a5f8": "levelThreeTokenNum()", +"527aea0a": "getWeiBalance(address,address)", +"527ba1e1": "setIV_S(uint256)", +"527c08ec": "Max_CAP()", +"527cc85a": "Zxcvbnm()", +"527d8f12": "ping(uint256,bool)", +"527f0900": "IncPrivateSupply(uint256)", +"527f4ff1": "setTransferAddressUser(address,address)", +"52802121": "depositEther(address)", +"528050a9": "salePreiodChanged(uint256)", +"5280b8ad": "getAmountBounus(uint256)", +"5280c3ee": "dealToken()", +"52810d5e": "UnitToken(uint256,string,string)", +"52812053": "outstandingQuarters()", +"5281947d": "cancelAdoptionOffer(bytes5)", +"5281bbe9": "contractExpirationTime()", +"5282f649": "risedUSD()", +"5283f339": "getAddress(address,string)", +"5283fd87": "giveReward(uint256[4],bool,uint32[4])", +"52848d8d": "kcck256strstr(string,string)", +"5284a4c7": "allocateReferalBonus(address)", +"5284b044": "Products()", +"5284e3d8": "RobotTradingIco(address)", +"5284e660": "_getEndOfLastMiningDay()", +"52855882": "confirmAddress(bytes16)", +"52860ea2": "ADDITIONAL_BONUS_DENOM()", +"528626fc": "updateNextStealTimeByOperator(uint32)", +"52879334": "requireNotZero(address)", +"52879ba6": "roleCheck(string,address,address)", +"5287ce12": "getDepositInfo(address)", +"52883fc6": "addTokenBalance(address,address,uint256)", +"52892478": "disburseAuthorizedPayment(uint256)", +"52892baf": "localConst()", +"52894449": "lastBlock_f17Hash_uint256()", +"528976de": "issueRefunds(address[])", +"528a683c": "keyExists(string,string)", +"528b5176": "zgetOtherContract()", +"528b8ed8": "MaxBusiness()", +"528ce7de": "withdrawByRndNo(uint256)", +"528d4156": "authorizedCreateTokens(address,uint256)", +"528d8797": "ModiTokenERC20(uint256,string,string)", +"528d9479": "FeeUpdated(uint256,uint256)", +"528eb417": "Demome()", +"528ebdd5": "noSales()", +"528eedcb": "sendSafe(address,address,uint256)", +"528ef5a1": "UNINAcoin()", +"528fa135": "changeStartTime(uint64)", +"528fd7b0": "manualPayExpiredDuel()", +"52909fc2": "dynamicExchangeChecks(bytes,uint256)", +"5290d773": "amountBurned()", +"52911bd8": "doesOwnEthHandle(bytes32,address)", +"52916687": "setAuditRegistrar(uint256,address)", +"52929a0c": "disable_throwing()", +"5292af1f": "sendBalance(address)", +"5292c1a9": "testThrowsRestartEnforceRevisions()", +"5292c8f1": "validContribution(address,address,uint256)", +"5293a436": "EscapeHatchCallerChanged(address)", +"5293f22f": "EOSRegistration(string)", +"5294157f": "sendWithAllOurGasExceptExt(address,uint256,uint256)", +"5294188b": "randomizerLottery(bytes32,address)", +"5294409f": "Mineable()", +"5294924d": "getMyLastFreeLotteryTimestamp()", +"5294bb2b": "unpayPooling()", +"5294d0e8": "tokensUnlockable(address,bytes32)", +"52954e5a": "makerTransferAsset(address,uint256)", +"52959d16": "ambiC()", +"5296085e": "callServer(address,uint256)", +"529865c9": "preBuy2()", +"5299ccc6": "isSubjectApproved()", +"529a7d6c": "BurnProposalAdded(uint256,address,uint256)", +"529ae0bf": "maxEthPerAddress()", +"529af369": "createAndSellAllAmountPayEth(address,address,address,address,uint256)", +"529b8e60": "ergebnis()", +"529d15cc": "sequence()", +"529d4800": "getLockedWalletGroup(address)", +"529db099": "viewAllControls(bool)", +"529dbdb5": "getMs(uint256)", +"529e65e1": "removeShopModerator(address)", +"529e6713": "setCustodyFactory(address)", +"529f0fb8": "setFee2(uint256)", +"52a00779": "bountyDelivered()", +"52a08c29": "jackpotPersent()", +"52a0b5ac": "registerBasket(address,address,string,string,address[],uint256[])", +"52a0cf38": "p2pUnlocker(address)", +"52a16bb0": "amountSold()", +"52a23bbb": "approveTokenTransfer(address,address,uint256)", +"52a2695c": "isReachedGoal()", +"52a2720c": "extraTokensTransferred()", +"52a27baf": "read_user_daily_limit(address)", +"52a36938": "initDisabled()", +"52a554a1": "voteBoardProposal(uint256,address,bool)", +"52a5b002": "lastInterestCycle()", +"52a6f970": "ZHEY()", +"52a74b82": "getDebugNumber()", +"52a7cae5": "BitAlphaAirdrop(address[])", +"52a80129": "unlistQualifiedPartner(address)", +"52a82b65": "digest()", +"52a8aeab": "controller1()", +"52a8fe93": "kscBurnWhenUseInSidechain(address,uint256,string)", +"52a9039c": "allocations(address)", +"52a94adb": "TRMCrowdsale()", +"52a982d3": "distributeTokensRange(uint256,uint256)", +"52a9a35e": "retireAdmin(address)", +"52a9cd2d": "changeOwnerVault(address)", +"52aa2ae9": "enterPreSale()", +"52aadf3b": "generateLuckFactor(uint128)", +"52aaead8": "priceLastUpdated()", +"52ac3235": "amountOfQuotations()", +"52ac882c": "retirementManager()", +"52ad2aa8": "__getStore(uint256)", +"52ad4116": "getCrowdsaleStartAndEndTimes(address,bytes32)", +"52ad6468": "SHARE_FOUNDATION()", +"52ae68f6": "getRoundBonusPot(uint256)", +"52af1c04": "parseMessage(bytes)", +"52af719f": "initialize(uint256,address[],address)", +"52af89af": "getsum(uint256[])", +"52afbc33": "scheduleCall(address,bytes4,bytes32,uint256,uint8,uint256)", +"52b1e14a": "insertUser(address,string,uint256)", +"52b33d64": "clientmanagerShare()", +"52b4643c": "Fallback()", +"52b4be89": "totalBuyCardNumber()", +"52b566e4": "CitiDynamicsCoin()", +"52b5e85c": "firstPhaseEndTime()", +"52b5ff39": "RBAC()", +"52b75219": "freezeToken(address,uint256,uint256)", +"52b7fddb": "createMechVRC(uint256,address)", +"52b860eb": "tokenBonusForFifth()", +"52baee20": "getAllHpbNodesByStageNum(uint256)", +"52bafbfa": "vestingBeneficiaryForIndex(address,uint256)", +"52bafde9": "playersSignedUp()", +"52bbde34": "BiddingRing(address,uint256)", +"52bca4c3": "phaseOneCap()", +"52bd6945": "sellReply(uint256,uint256,uint256)", +"52bd9914": "TimeEnd()", +"52bddee6": "uintCeil(uint256,uint256)", +"52bf74b3": "airDropCoin(uint256)", +"52c01fab": "isEntrant(address)", +"52c05ca5": "setWeiPerBlock(uint256)", +"52c0b9f7": "ICO_START3()", +"52c1c03a": "removeUnlockedAddress(address,address)", +"52c1d3d5": "ZenomeCrowdsale()", +"52c204d0": "ICOMeetupToken()", +"52c22a72": "cancelContract(address,address,uint256,string)", +"52c28fab": "add(address,address)", +"52c34e68": "getStandardRobot()", +"52c53cb7": "checkPoint(int256,uint8,int256,uint16)", +"52c5785b": "purchaseTokensPreSale(address)", +"52c5b4cc": "setAuthorizations(address,address[])", +"52c5d892": "withdrawOwnersFunds()", +"52c700ea": "crowdsaleStop()", +"52c743d2": "callDestination()", +"52c76b8e": "TokenGame(uint256)", +"52c76de9": "addDiscountPhase(string,uint8,uint256,uint256)", +"52c790ee": "confirmTokens(address)", +"52c7c9e4": "isSubmission(bytes32)", +"52c8df64": "getFund(uint256)", +"52c91d43": "getLinkedWETHAddress()", +"52c944b2": "removeFromTokenLocked(address[])", +"52c98e33": "checkClaim(address,uint256,uint256)", +"52c9b906": "founderTokenWithdrawnPhase1()", +"52cb2a7b": "calcTransfer(uint256)", +"52cb36cd": "_getUtTotal()", +"52cb7688": "suspendSale(bool)", +"52cbfe09": "summAirdrop()", +"52cc5fdc": "retrieveMyEth(string)", +"52cd972d": "PreSaleCloseTime()", +"52ceac34": "bytesToUint(bytes,int256,bytes)", +"52cf4078": "transfertWDiscount(address,uint256)", +"52cf46d4": "transferAllowed(address,uint256)", +"52cfd41f": "advisorFee()", +"52d005d6": "findNewExchangeContract()", +"52d08730": "DogeCoin()", +"52d0bf14": "setDataColla_AA_02(string,string)", +"52d214a7": "removeUnitMultipliers(address,uint256,uint256,uint256)", +"52d23633": "getNumDividends()", +"52d28a17": "muscFundDeposit()", +"52d2d83d": "setBoolValue(bytes32,bool)", +"52d35197": "JLL()", +"52d3592a": "VoteExecuted(uint256)", +"52d3642d": "sellToContract()", +"52d3a9dd": "rentAuctionContract()", +"52d472eb": "rewardPercentage()", +"52d4747f": "BurnTokensFrom(address,uint256)", +"52d48a95": "getXPub(address)", +"52d4e76c": "ControllerRetiredForever(address)", +"52d50408": "statusContribution()", +"52d5ad25": "currentRecords()", +"52d63b7e": "setNextSale(address)", +"52d6804d": "minimum()", +"52d714e8": "approveMintingManager(address)", +"52d7d861": "AddrChanged(bytes32,address)", +"52d850d1": "tstinx()", +"52d8bfc2": "recoverEther()", +"52dbb027": "newModelShipProduct()", +"52dc09a5": "test_4_assertGasUsage700Boards()", +"52dca247": "ttlInvestCount()", +"52dd336a": "_tokenAllocate(uint8)", +"52e021c2": "securityReg(address)", +"52e0d025": "maxUserPayment()", +"52e0d0fa": "BIPOOH_DAO_32_a()", +"52e11d12": "DanCoin()", +"52e1ea89": "setDonator(address)", +"52e2525f": "ownerSetFee(uint256)", +"52e2f9ea": "MerculetToken(uint256,uint8,string,string)", +"52e32a55": "bounty0xToken()", +"52e34245": "disputeTX(uint256)", +"52e3d369": "saleConversionRate()", +"52e40d96": "PPKToken()", +"52e43613": "approveToMint(uint256)", +"52e536ad": "icoLeftSupply()", +"52e578ad": "LOG_EmergencyAutoStop()", +"52e57d1f": "makeLogError(uint8,uint256,uint256)", +"52e60b90": "setTalentCardAddress(address)", +"52e686a0": "EnableReturnFunds()", +"52e68c46": "list_token_ask(address)", +"52e8f2c3": "deleteRecord(uint256,string,string,bytes32)", +"52e94beb": "setPrice(uint256,bool)", +"52e97326": "changeTotalSupply(uint256)", +"52ea5667": "getMPbyIndex(uint256)", +"52ea8a71": "setRandomApiKey(string)", +"52eae80b": "doProvideStateRoots(uint256,bytes32,bytes32[])", +"52eb2580": "Tethered(address,string,string,uint256,uint32,uint256,uint256,string)", +"52eb5751": "MedicoHealthContract()", +"52ec8a58": "mint_and_transfer(address,uint256)", +"52ece9be": "freezeAllowance(uint256)", +"52ecf7c4": "pickWinner(uint256,bool,bool,bool,bool,bool,bool)", +"52efd35f": "INCENT_FUND_VESTING()", +"52efea6e": "clear()", +"52effe11": "transferOwnershipTo(address)", +"52f17ce9": "pomda()", +"52f18042": "addAdditionalBonusMember(address)", +"52f1e07b": "ethRefundAmount(uint256)", +"52f1f48c": "setInv3(address)", +"52f29a25": "nextPunkIndexToAssign()", +"52f37c40": "isHodler(address)", +"52f445ca": "setAssociatedContract(address)", +"52f46769": "InitializedTier(uint256,uint256,uint256,uint256,uint256)", +"52f50db7": "initiate(uint256,bytes20,address,address,uint256)", +"52f59e0e": "AICH()", +"52f62195": "picops_enabled()", +"52f662bb": "sendTokensToInvestors(address)", +"52f6747a": "rules()", +"52f6ca76": "deadDragons()", +"52f6ee58": "exponent()", +"52f775c8": "ViewSecretBet(address)", +"52f7c988": "setFee(uint256,uint256)", +"52f804a8": "burnPollStake(address,bytes32)", +"52f84b1b": "BlangsakToken()", +"52f8a766": "TimeStampSubstructOneDay()", +"52f9058b": "getFreeRickAndMorty()", +"52f91acf": "triggerDispute()", +"52f97117": "createContract(bool,string)", +"52fa1ac2": "createUnicornForCandy()", +"52fa2650": "withdrawPercents(uint64)", +"52fa3712": "makeBet(address,uint256,bytes32)", +"52fb0561": "setWhitelistedTransferer(address,bool)", +"52fba25c": "attack(address,uint256)", +"52fbeb57": "transferToContractWithCustomFallback(address,uint256,bytes,string)", +"52fc01f9": "func_1(uint256,uint256)", +"52fd2c15": "ServiceStation()", +"52fdcc65": "GAME_SUPPLY()", +"52fdeef5": "_addToFundHWC(uint256)", +"52fe8163": "randomDS_sessionPubKeysHash()", +"52fea23c": "teamAllocator()", +"52fedceb": "getMarketComissionRatio()", +"52fedefa": "decrementBalance(address,address,uint256)", +"52ffeb30": "highestBidTime()", +"52ffff99": "addAllowContractList(address)", +"5300a306": "changeTransactionFee(uint256)", +"5301fa52": "setPromoCode(address)", +"5302470a": "submitPlaintext(uint32,uint32,uint256,uint256)", +"530266c7": "getSellOrderInfo(address,address)", +"5302a136": "fourthPriceTime()", +"53030d91": "investmentAddress()", +"5303a5d7": "RESEARCH_DEVELOPMENT()", +"53043490": "ownerTransferFrom(address,address,uint256)", +"53047154": "createPromoMovie(address,string,uint256)", +"53055262": "awardMarble(uint256,address)", +"53055481": "totalDeposited(address)", +"53056351": "DIGIPLACEDS()", +"53067968": "GetSellingTokenContractAddress()", +"53069df6": "getRepaidAmount()", +"5306a5af": "LogRollbackTransfer(address,address,uint256)", +"530795fb": "initNormal()", +"5308db4b": "finalizeBundleIPFS(bytes32,string,bytes32)", +"5309ce38": "PrintLimiter(address,address,address,uint256)", +"530abf0f": "distributeTokensToContributor(uint256,uint256)", +"530b1e1a": "recording(address,uint256)", +"530c435f": "whaleWantMyEther()", +"530c4ca6": "setGames(address)", +"530c515e": "stake(uint256,address,uint256,uint256,uint256)", +"530c6868": "getContributorETH(address)", +"530d26b0": "MattewWon(string,address,uint256,uint256)", +"530d44f4": "normalRate()", +"530dfad3": "addItemToUserDebt(address,bytes32)", +"530e3543": "addMemberToGroup(address,uint256)", +"530e784f": "setPriceOracle(address)", +"53105fbc": "tokenConversionFactor()", +"5310f0f4": "priceInUsd()", +"531163c1": "TOKEN_MAIN_CAP()", +"53127b88": "encrypt(uint32[26],uint32[4])", +"5312918b": "VestingEndedByOwner(address,uint256,uint256)", +"5312aa24": "Bigchaintoken()", +"5312ab19": "HoviiExchange()", +"5312b4bb": "pyrBalanceOf(address)", +"53135ca0": "presaleActive()", +"5313d890": "_markCredit(address,uint256)", +"53147d4f": "TokenCrowdsale(uint256,uint256,address,uint256,address,address)", +"531571a9": "connectTokens(address,address)", +"5315810e": "isSponsor(uint32,int256,uint32)", +"53176195": "witnesses()", +"53179413": "transfersBlocked()", +"5317e444": "removeUserPermission(address,bytes4)", +"5319418a": "transferLockedBalance(address)", +"5319ae10": "generateInstance(address[2],bytes,bytes32[2],uint256[3],bytes32[3],bytes,bytes)", +"531a7f29": "dateProductCompleted()", +"531b6d98": "LogHodlSetStake(address,address,uint256)", +"531b97d7": "oneCentOfWei()", +"531c1b33": "getOperatingBudget()", +"531c267e": "getGameResolverData(uint256)", +"531c8628": "amount_referral_invest()", +"531c9a56": "iPayStar()", +"531ca478": "VantageCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"531ce262": "bankWithdraw(address,uint256)", +"531d1974": "testThrowRetractLatestRevisionEnforceRevisions()", +"531e1ee0": "EarlyPurchaseInvalidated(uint256)", +"531e4827": "poolTimeLastMinted()", +"531ebce5": "getReceiverAddress()", +"531ef079": "setBvToBpFee(uint256)", +"531efbee": "_score(bytes32)", +"531f0ade": "_adjustValue(uint256,uint256,uint256)", +"531f4c40": "accept(bytes32,bytes32)", +"531ff93b": "setMrkContract(address)", +"53214e5a": "kilo()", +"53216223": "TravelCoin()", +"5321fe04": "subFromBalance(address,address,uint256)", +"5322f0c5": "getChannelOwner(bytes)", +"5322f9d1": "switchSale()", +"532399d9": "setTransContractLocked(bool)", +"5323c6cf": "calcCostsBuying(bytes,uint256,uint256[],uint8,uint256)", +"5323df9e": "getShipDetails(uint32)", +"53240172": "midiv(uint64,uint64)", +"53251389": "addBridgeNativeFeeReceivers(uint256)", +"5325dc16": "test_validShouldBe3()", +"53269475": "loveToken()", +"5326ba37": "setSaleAuctionERC20Address(address,address)", +"53270910": "deedOfOwnerByIndex(address,uint256)", +"5327f96e": "OwnerTransfer(address,address)", +"53286957": "CuboToken(uint256)", +"53290b3a": "setStateLoading()", +"53290b44": "getBalanceOf(address,address)", +"53290d1c": "founderGrant(address,uint256,uint256,uint256,uint8)", +"53295e44": "OtcgateToken(uint256,uint8,string,string,address)", +"53297b71": "completeReleaseAuction(uint256)", +"5329c681": "checkTimeout(uint256)", +"532af7d2": "calculateResult(uint256,uint256)", +"532b581c": "round2()", +"532b5f86": "createBytes32(bytes32,bytes32)", +"532c3dc5": "nAuditors()", +"532da8f9": "getDelayDays(uint256)", +"532e4849": "setTokenUriPrefix(string)", +"532e7e6a": "calcEarningsSelling(bytes,uint256,uint256[],uint8,uint256)", +"532e87e4": "setTimeForCrowdsalePeriods()", +"532eb619": "_sellTokens(uint8,address)", +"532f1041": "setFormat(bool)", +"532f1179": "refundsEnabled()", +"532fb092": "isApproveConfirm(uint256)", +"532ff308": "setBonusRates(uint256[],uint256[])", +"532ff568": "Tutancoin()", +"533019cb": "kyberReserve()", +"5330a4c6": "buyMicroKeys(string)", +"5330bc61": "disallowTransfer(address,bool)", +"533178e5": "get_rate()", +"53322527": "EthlanceViews(address)", +"5332510b": "EthernautsLogic()", +"533265e6": "Database()", +"53329856": "secondBuyPrice()", +"5333c507": "allowTransferFor(address,bool)", +"5333ee4d": "buyEgg(uint256,uint256)", +"533425a5": "icoPeriod()", +"5334398f": "addRecordwithReward(bytes32,string,string,address)", +"53344481": "isInTier1(address)", +"5334c231": "currentSwapRate()", +"533574ca": "getLastDividends(uint256)", +"53358fc4": "castVote(address)", +"5336cd16": "_getEndIndexKey(uint256)", +"5337421a": "TrumpBingo()", +"5337448e": "payWinners()", +"53376d1f": "revokeAuthentication(address)", +"5337fa10": "awardPoint(int256,bytes32)", +"53384da7": "updateTier(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"5338b3e4": "miningTokenLeftInCurrent()", +"533945df": "editMemeTemplate(uint256,string,string,string,string)", +"53397be3": "lastConsolationPrize(uint256)", +"53398119": "emergency(bool)", +"533a645c": "minTx()", +"533ae8e5": "inTipperQueue(uint256,address)", +"533b180e": "LAcoin()", +"533c023b": "getGroupRight(string,string)", +"533d4270": "ClipperCoin(uint256,uint8,string,string)", +"533da8df": "getAreaOwner(string)", +"533de9e5": "addSmartContractByAddress(address)", +"533e00ec": "approveAndDo(address,uint256,address,bytes32,string)", +"533f6730": "clearInventory(uint256)", +"53400e7f": "debugNow()", +"534104df": "UnilotTailEther(uint256,address)", +"5341903b": "upgradeMe(address)", +"5341d618": "setDataColla_AB_02(string,string)", +"53423e50": "MaengDevToken()", +"5342da41": "testBeyond()", +"5343e6a4": "rateFinalStage1()", +"5343f1a0": "cancelOrderWithMerchant(string,address)", +"534439a3": "mintingDec()", +"53448316": "MIN_SALE_AMOUNT()", +"53449d26": "TourPool()", +"534514ee": "adminCharge_p3()", +"53458f5e": "defaultTreesOwner()", +"5345c415": "LogOwnerAdded(address)", +"534607fb": "info_OwnerOfContract()", +"53462d6b": "getReleaseTime()", +"53462fd8": "NCPTokenDeposit()", +"5346dcc5": "calculateTokensEnabledforAirdrop(address[],uint256)", +"5347d58c": "Paradime01()", +"534844a2": "withdrawAmount()", +"534878fb": "reply(address,address,bytes32,bytes32)", +"53488f0a": "activateAuction(uint256)", +"5348ac95": "makeTokensTransferable()", +"53490c67": "earlySuccessBlock()", +"53490fbb": "EPR()", +"53497794": "RepublicKey(address[])", +"534992c8": "showTokenBalance(address)", +"5349a335": "setThirdAdmin(address)", +"5349cdb6": "Testcoin()", +"5349efdc": "generatetoken(uint256)", +"534a2f7c": "WTechCoin()", +"534b0391": "getVerifiedInfo(address,address,string)", +"534c2609": "checkBtcRequestSignature(bytes,bytes,uint256,bytes)", +"534d5acb": "initialBSTSupply()", +"534d5ce3": "RobaToken()", +"534ddf19": "reclaimContributionDefault(address)", +"534e05c1": "_goldFreeze(uint256)", +"534e2645": "getLucy()", +"534e3f81": "finishPVP()", +"534eb1d4": "offerBonus(uint256)", +"534eec2c": "Yacksoncoin(uint256,uint256)", +"534f6a2d": "LogGrantClaimed(bytes32,uint256)", +"53501052": "extraTokensPercent()", +"53511819": "triggerAssertError()", +"53515226": "getEtherProceedsAccount()", +"5351ad81": "FrellyToken()", +"5352aadb": "allowedBetAmount()", +"5352b889": "isNewRound()", +"53535db9": "deployWallet()", +"53537303": "bonusRatePeriodOne()", +"5353a2d8": "changeName(string)", +"5353e168": "rlc_team()", +"53547d3f": "mintBooty()", +"53554015": "newZeusPriceTicker(string)", +"53556559": "exchange(uint256)", +"5355ee2f": "CryptoSneakersCoin()", +"535779ef": "removeFromAddresses(address)", +"5357b989": "calculateFee(uint256,uint256,uint256)", +"53584939": "bytesToBytes32(bytes,uint256)", +"5358677c": "BACKUP_FOUR()", +"5358c119": "getFaucetByCreator()", +"535999aa": "getarg_3_input()", +"535a920c": "setLANDRegistry(address)", +"535b27dd": "BitImageTokenSale()", +"535b4e58": "adminResetLottery()", +"535bf003": "appVersionList(bytes32)", +"535c69b6": "setEthAuction(address)", +"535d1ab3": "claimWork(uint256,uint256,uint256)", +"535d3f22": "RankingBallGoldToken(address)", +"535d4156": "killWithBenefits()", +"535d9289": "RDPTicks()", +"535dc2b0": "_b1(string,uint256,string)", +"535e401c": "check(bytes32,bytes32,bytes)", +"535f23ad": "mainSaleStartDate()", +"53601ec5": "_transferFees(uint256,uint256[],uint256)", +"5360cd82": "GetContractInfo(string)", +"53613273": "setTymTokensWallet(address)", +"53613769": "setDistributorAmount(address,bool,uint256)", +"53613dd3": "creatorFeePercent()", +"536253a9": "getRandomForContractClanwar(uint256,uint256)", +"53636220": "depositToExchange(uint256,uint256)", +"53645caa": "rewardDays()", +"5364e45d": "setStartBalance(uint256)", +"5364f721": "getArbInfo(uint256)", +"536529dd": "WarpSpeed()", +"5365939c": "unlockedTokensInternal(address)", +"5365ccf7": "CCH_MENA_1()", +"53661f87": "initStorageOwner(address)", +"53663c0b": "distributeAIC(address[],uint256)", +"53667f10": "getContracts(address,address[],uint256)", +"5366d0fd": "operationalExpensesWallet()", +"5366f338": "publishFor(bytes12,address)", +"53677154": "placeAnswer(uint256,string)", +"5368cc55": "getBack2()", +"536942b6": "finalizeAndRestart()", +"536a3ddc": "currentGameId()", +"536aace8": "setUserSignupTokens(uint256)", +"536ab151": "onFailedAffirmation(address,uint256,bytes32)", +"536bd93a": "SetAccessoryDataContact(address)", +"536c1ddd": "SampleERC23Token(address,uint256)", +"536c26e5": "MiniMeIrrevocableVestedToken(address,address,uint256,string,uint8,string,bool)", +"536c2e4a": "sendEmail(address,string,bytes32,string)", +"536c8c15": "jurySize()", +"536c9a7f": "dividendFundAddress()", +"536cb736": "setPreUri2(string)", +"536cfceb": "todaysSupply()", +"536d888b": "isServiceOwner(bytes32,address)", +"536d97c2": "setDividendsPercent(uint256,uint256)", +"536db4a8": "getParametersHash(uint256[14])", +"536dd8f9": "maxTokensToSold()", +"536e08bc": "getTokensBalance(uint256)", +"536e2800": "buyForWorkOrder(uint256,address,address,address,string,address,address)", +"536e2c75": "challengeCanBeResolved(uint256,bytes32)", +"536e3f6a": "getOracleData(uint256)", +"537038c3": "BOUNTY_PERCENT()", +"5370a049": "thebank()", +"5370e3d4": "Ozreal()", +"53718569": "generateRandomStats(string)", +"537187a3": "transferWithMsg(address,uint256,string)", +"53719b6e": "lockedTokens(address,uint256)", +"5371e490": "Presalezillion()", +"53729273": "getLLV_edit_9()", +"5372a9ce": "addService(address)", +"5372c1db": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool)", +"53734dc5": "refundContribution()", +"53738a4c": "distributeOwnedTokensFromOtherContracts(address,address,uint256)", +"53749313": "PortToken()", +"5374eec3": "hijack(uint256,uint256)", +"5375a828": "createLibraryWithFounder(string,string,address)", +"5375f182": "IronHandsCoin()", +"5376a03d": "getProfitOrLoss(address,address,uint256,uint256)", +"53770f9a": "isStateless()", +"53775572": "_claimOreAndClear(uint32,uint8)", +"53779c11": "claimDividendByIndex(address,uint256)", +"5377f047": "allowedMultivests(address)", +"53790097": "Exhibition()", +"53799e7d": "frozenType(string)", +"537a082c": "withdrawSaleRequest(uint256)", +"537a924c": "Pay()", +"537afe94": "eastadscreditsx()", +"537b9c93": "NotFomo3D()", +"537bf9a3": "updatePermissionName(address,bytes32)", +"537ca660": "_setPetValue13(uint256)", +"537dbb80": "claimUserToken(address)", +"537df3b6": "removeFromBlacklist(address)", +"537f5312": "updateSymbol(string)", +"537f74fc": "_transferFrom_byProxy(address,address,address,uint256,bytes)", +"537fcd6b": "_computeAndSetBaseParameters16_18_22(uint256)", +"537fdf59": "user_redeem()", +"538082af": "UKG_FUND()", +"53811553": "getCertificate(bytes32,bytes32,bytes32)", +"53813af8": "getmy(address)", +"5381464c": "PRE_SALE_START_TIME()", +"53819e85": "getTotalComission(address)", +"53822cda": "createShortId(bytes32)", +"53844552": "addPayees(address[],uint256[])", +"5384527a": "tokenResend()", +"5384602d": "craetePartnerBytes(address,address)", +"5384734e": "isConfirmedStackholder(uint256)", +"53850db3": "getParticipantById(uint256)", +"538548c5": "recevedEthFromEvabot(address,uint256)", +"538564de": "assegna_diritto_di_voto(address)", +"5385726e": "maxTIPSupply()", +"53865562": "CLOSING_TIME()", +"5386b7ad": "dtTestWorldSnapshot(uint256)", +"538739fa": "operatorManager(address[],uint8)", +"538741c5": "getAllowedContracts()", +"5387a233": "feeLottery()", +"538811cf": "hasAllocated()", +"5388842c": "mintTicket(address,string)", +"53892496": "finney2LemoRate()", +"538a289a": "getSandwichInfo(uint256)", +"538a3f0e": "initializeFactory(address)", +"538a849c": "newRound(uint256,uint256,uint256,uint256,uint256,bytes32,uint256)", +"538a8c21": "giveawayReserve()", +"538b9618": "createElectionVerify(bytes32,bytes32[])", +"538c91b2": "validCandidate(string)", +"538d1267": "Announcement()", +"538df6f2": "claimedPrepaidUnits()", +"538dfcac": "contributionRejected()", +"538e0759": "refill()", +"538e0ff4": "totUsers()", +"538e8ae0": "assertEq19(bytes19,bytes19,bytes32)", +"538eae06": "ZuperToken()", +"538f5997": "getBalanceSize()", +"538fb98c": "getCarProductCurrentPrice(uint32)", +"53900bdd": "incirculation()", +"5392279d": "CryptoWCRC(uint256,uint256,bool,address,address)", +"539407f6": "committeesNumber()", +"53941a74": "addInviteId(uint256)", +"5394772a": "MIN_BET_VALUE()", +"5394e49e": "getRandomPosition(uint8,uint8)", +"53954574": "withDrawBack()", +"5395dbb1": "createSchedule(address,uint256,uint256,uint256,uint256,uint256)", +"5397c83c": "distr0(address,uint256)", +"53994d51": "ThreeDJSToken(uint256)", +"53999040": "buyLandForCandy(uint256)", +"53999339": "prepareLiquidityReserve()", +"539af982": "changeStartDate(string)", +"539b9648": "icoSmartcontract()", +"539c0f14": "deposit2()", +"539e2bfb": "secondChainedCallback(uint256)", +"539f70d8": "setOperationState(uint8)", +"539ff41a": "ADVISORS_WALLET()", +"539ffb77": "cancelRedeem(uint256)", +"539fffc9": "WithdrawPrize()", +"53a01f68": "createWizzPanda(uint256[2],uint256,address)", +"53a023d1": "EUSBToken()", +"53a04b05": "play(uint8)", +"53a06609": "_incrementInventory(uint256,uint256)", +"53a1c51e": "getInitializeMarketValue()", +"53a3b71e": "tossIntoTheFire()", +"53a40850": "userHasPattern(address)", +"53a454e0": "SubtractAmount(uint256)", +"53a47bb7": "nominatedOwner()", +"53a4c8a3": "TriggminePresale()", +"53a4caee": "getMajorThreshold(address)", +"53a50f0f": "addDeal(uint256,uint256,string,string,uint256,bytes32)", +"53a5e2d9": "teamGrantsAmount()", +"53a5e68f": "CircusToken(address)", +"53a636dd": "updatePrice(uint256,uint256,string)", +"53a6e2c9": "Mantapjar()", +"53a73f6e": "setTotum(address)", +"53a8b307": "getObjective()", +"53a94aa6": "_computeNextSeedPrice(uint256,uint256)", +"53a9698a": "isProviderFor(uint256,address)", +"53a97873": "getPrice(bytes10)", +"53a9fc9c": "ELVToken()", +"53aa3f5e": "getUInt(bytes32,bytes32)", +"53aa7dcd": "setCallerFee(uint256)", +"53aaa63f": "collectBack2()", +"53aab098": "addPriceFeed(uint256,uint256,uint256,uint256,bytes)", +"53aab434": "buyIn()", +"53aaef7d": "weiToTokens(uint256)", +"53aaf7c7": "OperatorProductCommissionChanged(uint256)", +"53abf7f4": "parseTrade(bytes)", +"53ac36f4": "DropReward()", +"53acae4a": "RANGESTART_4()", +"53acb23f": "unlockPriceChange()", +"53adce21": "getGroup(address)", +"53ae8de6": "modify_Presale1StartDate(uint256)", +"53af5d10": "closingAddress()", +"53afda90": "initDiscounts(uint256[],uint256[])", +"53b0b620": "allocateBid1(address,bytes32)", +"53b15f31": "get_asset_details(bytes32)", +"53b1b49b": "Human()", +"53b239c7": "setPoWtfContract(address)", +"53b2dd41": "WGCToken()", +"53b382ea": "manuallyEnded()", +"53b5015c": "getClientSupply(address)", +"53b5306b": "getUnfreezingPrice(uint256)", +"53b54f5e": "transferWithoutDecimals(address,uint256)", +"53b5b427": "team4LockEndTime()", +"53b5b50a": "publish(bytes32,string,bytes32)", +"53b64b0b": "setNumDepositsSigned(bytes32,uint256)", +"53b6f766": "addTotalIndividualWeiAmount(address,uint256)", +"53b7a59b": "destinationWallet()", +"53b7b2e9": "cEthereumlotteryNet(bytes)", +"53b86342": "withdrawOwnersMoney()", +"53b8e278": "upgradedContract()", +"53b90b5b": "addWalletEmail(address,string)", +"53b93358": "_getPoS(address)", +"53ba11d0": "icoWalletAddress()", +"53babaf9": "processStellarReward()", +"53bad0b9": "boschcoin()", +"53bb2eb6": "buyOffer(uint256,uint256,address,bytes32)", +"53bc147e": "lastKickoffDateBuffer()", +"53bc1c12": "getJobState(uint256)", +"53bc1d9b": "ONTOPToken(uint256,string,string)", +"53bc373d": "SIT(address)", +"53bc7399": "play_stone()", +"53bc7d62": "setInvalidWithReturn()", +"53bd353b": "EarlyTokenSale(uint256,uint256,address,address)", +"53bd755a": "__setTokenPrice(uint256)", +"53bd8bdb": "isRequestExecutable(uint32)", +"53beb1f8": "checkHalfLife()", +"53bfd3d0": "getUserTearAward(address,uint256,uint256)", +"53c048ce": "TICToken()", +"53c06966": "startMining(address)", +"53c194af": "createIco(uint256,uint256,uint256,uint256,uint256,address)", +"53c1b31f": "MooToken(uint256,string,string)", +"53c24064": "EasyMineTokenWallet()", +"53c2828f": "rentalBalanceRemaining()", +"53c2e8ab": "FacebookCoin()", +"53c3419b": "bet(uint256,uint256,uint256,uint256,uint256,uint256)", +"53c37276": "frozenDaysForPreICO()", +"53c3a57d": "recalcFlags()", +"53c3cc1f": "ResumeEmergencyStop()", +"53c3fe8a": "hasICOClosed()", +"53c4aeac": "crowsaleSlots(uint256)", +"53c549da": "LemonContract()", +"53c64fbc": "peekQueue()", +"53c66d90": "YEEToken()", +"53c7186c": "test_token_creation()", +"53c7801c": "second_round_start()", +"53c8388e": "updateMetadata(uint256,string)", +"53c84526": "setSmartAffiliateContract(address)", +"53c86cfc": "UvoCash()", +"53c9843f": "preIcoCashedOut()", +"53ca1aa8": "GOLD_TO_COLLECT_1SWORD()", +"53cae7b8": "distributeAirdropMultiPresale(address[],uint256[],uint256[])", +"53caf582": "testThrowSetNotUpdatableNotOwner()", +"53cb26c6": "preciseDecimalToDecimal(uint256)", +"53cb430f": "setoldtoken(address)", +"53cc2fae": "unFreezeAccount(address)", +"53cc3e7a": "sysPrice()", +"53ce0a71": "USACoin()", +"53ce7de9": "participantIndex()", +"53ce910e": "getSafeKey(uint256)", +"53cea153": "claimableOwnerEth(uint256)", +"53ceee6c": "icoBuy()", +"53cf4d2b": "indexshow(address)", +"53cf51bc": "rewardSent()", +"53cfdda3": "setMonthlyPrice(uint256)", +"53d0f255": "STEP()", +"53d142a7": "setTokenInfo(uint16,string,address,uint64,uint256)", +"53d2822d": "isVesterManager(address)", +"53d3e848": "abortICO()", +"53d3ed60": "isBotAt(address,uint64)", +"53d3eeee": "profitsRatePercent()", +"53d413c5": "removeKey(bytes32,uint256)", +"53d590bc": "softUndelete(bytes32)", +"53d69b07": "setPreSaleStartAndEndTime(uint256,uint256)", +"53d6fd59": "setWhitelist(address,bool)", +"53d70700": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"53d736ed": "CreateCard(uint256,string,string,string,string)", +"53d73718": "voting_info()", +"53d74fdf": "totalHolders()", +"53d797c9": "GetGoodsInfo(uint32)", +"53d7edbc": "_crowdsalePaused()", +"53d838b6": "getMatchAwayPlayers(uint256)", +"53d97e65": "setPrizes(uint32[])", +"53d99c2a": "tokenToEthRate()", +"53d9d910": "create(address[],uint256,uint256)", +"53da0c7e": "bonusesForAmountsCount()", +"53da4859": "ACT()", +"53dad947": "oraclizeContract()", +"53db1deb": "DredgrSwap()", +"53db5fdb": "getCreatorTAOSettingDeprecation(bytes32)", +"53db6b21": "AUMToken()", +"53dba812": "Horizon0x()", +"53dc4cf1": "Greedy()", +"53dd1902": "strcat(bytes,string,bytes,string)", +"53dd8881": "tweakDailyDividends(uint256,uint256)", +"53de63e3": "isMasterWallet(address)", +"53e0b78f": "LandClaimContractSet(address)", +"53e0c46d": "nuoyilian(uint256,string,uint8,string)", +"53e1509c": "addExchangePartnerTargetAddress(address)", +"53e1a169": "doPayment(address)", +"53e1ead9": "companyAddress()", +"53e215f4": "getNodeInfo(uint256)", +"53e3926c": "compareNums()", +"53e4d8ef": "admin_set_withdrawable(bool)", +"53e4e607": "get_parameters()", +"53e551ff": "createContractItem(string,bytes32,address,address)", +"53e68147": "emissionInternal(uint256)", +"53e68720": "sendToBeneficiary()", +"53e7168b": "setUInt(bytes32,bytes32,uint256)", +"53e7d39c": "batchTtransferEther(address[],uint256[])", +"53e7daf2": "NewStandardToken(uint256,string,uint8,string)", +"53e86a88": "contributorsTotal()", +"53e8c040": "Winn()", +"53e9574a": "FOUNDERS_TOKENS_PERCENT()", +"53e9dcae": "attributeType(uint256)", +"53ea04fe": "AgencyLock2()", +"53ebf6bd": "setContractLock(bool)", +"53ecbdd2": "getTankType(uint256)", +"53ed5143": "getAll()", +"53ed589b": "LogNewProvider(address,string,bytes32)", +"53ee9114": "PassDao()", +"53eeb430": "allPurchasedSprites(uint256)", +"53ef5e03": "amount5()", +"53ef6781": "_start()", +"53efb13f": "setContractDurationInDays(uint16)", +"53f072e3": "numApis()", +"53f11cb3": "asm_clean(uint256,uint256)", +"53f24e33": "isUpgradeInterface()", +"53f25ca6": "isNameEmpty()", +"53f3807c": "STATE_PLAYING()", +"53f4a519": "queryResource()", +"53f4b36f": "calcFin()", +"53f4db01": "totalWeiRaised()", +"53f63bb3": "setPreSaleFinishDate(uint256)", +"53f65cf7": "forceRecoverCollateral(bytes32,address)", +"53f6740d": "setKpopItemContractAddress(address,address)", +"53f6ef28": "EUFBToken()", +"53f6f01f": "ADVISOR_STAKE_TWO()", +"53f754e0": "tokensDue(uint256)", +"53f818d6": "checkBetValue()", +"53f81ef8": "getSubscriptionTo(bytes32)", +"53f8e415": "SetDonateStep(uint256)", +"53f92e49": "UnableToRejectPayment(address,bytes8,uint256)", +"53f95cc6": "THIRD_TIER_DISCOUNT()", +"53f9ca96": "CCC(uint256,string,string)", +"53f9ec67": "setIsInvalid(bool)", +"53faa9a9": "changeRecovery(address,address)", +"53fafd15": "makeTransfer(uint256)", +"53fb9233": "checkDocument(string)", +"53fc3923": "safeAdd40(uint40,uint40)", +"53fc79d1": "setTargetDiscountValue5(uint256)", +"53fd0670": "sellArtworks(uint32[])", +"53fe12b0": "setusertoken(address)", +"53fe189c": "setAElfMultisig(address)", +"53fe7a59": "PURCHASER_MAX_TOKEN_CAP_DAY1()", +"53fefd7d": "changeMaxDeposit(uint256)", +"53ff7766": "_escrowTheAOPaymentEarning(bytes32,uint256,uint256,uint256)", +"53ffab1d": "disableconstruction()", +"53ffe1f9": "setRentalPricePerSecond(uint256)", +"5400a93e": "payoutMatch(uint256,uint8,bool)", +"54019949": "getShopOwnerCategorizedProducts(string,string)", +"540273bb": "changejp1(address)", +"54032862": "ZapCloud()", +"5403a0e5": "getTeamToken()", +"5404bbf7": "getEntropy()", +"54057aa6": "setPriceClaim(uint256)", +"5405e4f4": "SMILE()", +"54063f4e": "sendETHfromContract()", +"54070f83": "getTournamentAdmissionBlock()", +"54091a20": "removeFromTransactionDisallowedList(address)", +"540a5e4e": "cs()", +"540a9db3": "getVestingAccount(address)", +"540ae26f": "MassERC20Sender(address)", +"540b2255": "_invest(address,address)", +"540b34a0": "listMOC()", +"540c755f": "ethWithdraw()", +"540c97c8": "getAllRevisionIpfsHashes(bytes20)", +"540cafe0": "storeHeaderWithFee(bytes,int256,address)", +"540cc484": "getPreSaleTokensSold()", +"540cf75e": "getPendingPresaleTokens(address)", +"540d888e": "SendTaxFee(address,address,address,uint256)", +"540d915e": "serviceGroupChange(address,uint8)", +"540e2f5b": "customTokenDefrosting(address[])", +"540ea6db": "getuseraddress(uint256)", +"540f3d6d": "feeProcess()", +"540f5631": "isUnderwriter()", +"540fd4df": "addressFundFoundation()", +"54105974": "AdHiveToken(address,string,string,uint256,uint256)", +"54107401": "declareLove(string,string)", +"5410ac50": "raiseCap(uint256)", +"5411029d": "_validSignature(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"54114dee": "Caps()", +"5412af17": "Watsondog()", +"541334f6": "isUnicornContract(address)", +"5413d6f4": "ImmlaToken(address)", +"54147ecb": "withdrawForTokens(address)", +"54149777": "getAirDropedToday()", +"54149975": "DeleteToken()", +"54151bc3": "createPostboyAccount(uint256,uint256,bytes16)", +"54153f91": "getArrIntField1()", +"5415b8f8": "setAssetFeesList(address[],uint256[],uint256[])", +"5415c86e": "chngReNo(uint256)", +"5415f3a7": "buyStudioStake(address,uint256)", +"5416707c": "getEthOfferAmount(uint256)", +"541694cf": "get_exchange(uint32)", +"5416995e": "TGCToken()", +"5416a724": "isUserKYCed(address)", +"54186bab": "SolarDaoToken()", +"5418796c": "pubKeyToEthereumAddress(bytes)", +"5418bea9": "getCountReadyPlayerByTrackId(uint256)", +"5418ecdd": "setTokenHash(uint256,uint256)", +"54192046": "setAuctionStart(address,address,uint256)", +"541a01ed": "presaleTokenVault()", +"541a3656": "optionOrderCancelled(bytes32)", +"541ac2b3": "locked_since()", +"541aea0f": "put(uint256,uint256)", +"541afaf6": "getWarriorDistributedRandom(uint256)", +"541b2173": "IKT(uint256,string,uint8,string)", +"541bb358": "setRarityTargetValue(uint8,uint256)", +"541c15eb": "changeLock(address,uint256,uint256)", +"541d920c": "commit(bytes,string)", +"541dc9ba": "redeemPreSale(address,address)", +"541e22ea": "sendRefBonuses()", +"541e34a7": "QuantumPay()", +"541ee050": "bonusEnd10()", +"541f631a": "transferInternal(address,uint256)", +"54203101": "CTWorld()", +"54204ad4": "triple()", +"54215767": "upgradeTradeProfileImplementation(address)", +"54217c21": "Q2(address)", +"5421b037": "getDepositTransaction(address,uint256)", +"542241d0": "fifthExtendedBonusSalesEnds()", +"5422cf34": "sellPop(uint256,uint256)", +"54238645": "closeICO()", +"5423a05d": "GoToken(address,address,address,address,uint256)", +"54244518": "coinIssuedRewardPool()", +"54260cb6": "getBuyLandInfo(address,uint256)", +"5427789c": "MINT_AMOUNT()", +"54279bdd": "createAuction(uint256,uint256,address)", +"5427e4e1": "APS(string,string,uint256)", +"5427e8fa": "getTicketIsPaid(uint256)", +"54280260": "balancesLocked()", +"54290065": "getAsksCount()", +"54292c53": "rewardAvailableCurrentDistribution()", +"5429a417": "getBasicBallotsPer30Days()", +"5429d4b5": "mitfwdToken()", +"542a3368": "randomly_select_index(uint256[])", +"542a90bd": "remove_quote(bytes32,bytes32)", +"542aa99f": "stopSetup()", +"542aee37": "getTotalTonsClaimed()", +"542b5111": "MANXERC20()", +"542b9a40": "ProjectOwner_DisableProject(int256)", +"542bdb4d": "testMathOverloaded()", +"542bee82": "addGlobalBlockValueBalance(uint256)", +"542c8f37": "isOnSell(uint256)", +"542cad3d": "setCopaCoreAddress(address)", +"542cae98": "checkGameOverByUser()", +"542ccddb": "claimRoundReward(uint16,address)", +"542ceaad": "countRequest()", +"542cfdf0": "extendItem(address,uint256)", +"542d397c": "tokensBlocked()", +"542d3e34": "NewImage(uint256,uint8,uint8,uint8,uint8,string,string,string)", +"542d8dc0": "Mag50()", +"542de573": "BITHALALToken()", +"542df7c7": "getGameConstants()", +"542e8618": "dynamic_profits(address)", +"542e898e": "STC()", +"542e9b18": "logFeeWindowBurned(address,address,uint256)", +"542fce21": "KergToken(uint256,string,uint8,string)", +"542fd556": "getMakerProjects(address)", +"542fe6c2": "withdrawFromAbandoned()", +"54311422": "giveTokens(uint256)", +"54313b22": "tonextround()", +"5431dfb8": "stage3Sale()", +"5432202a": "isServiceAccount()", +"54353f2f": "example()", +"543577f3": "LandManagement(address)", +"543594b8": "verifySignature(uint8,bytes32,bytes32,address,bytes32)", +"5435a774": "Permissioned()", +"5435bac8": "itemsForSaleLimit(uint256,uint256)", +"5435dbd4": "CPF()", +"54361699": "registerContributorPool(address,uint256,int256)", +"54367179": "updateRealWorldPlayer(uint32,uint128,uint64,uint32,bool,bool)", +"5436c163": "createVillain(string,uint256,uint256,uint256)", +"5436e5a0": "getValueByHash(bytes32)", +"54370a8d": "QueryMyBonus(address)", +"5437988d": "setVerifier(address)", +"5437b39b": "hasUnprocessedDividends(address)", +"5437e401": "withdraw(address,bool)", +"5437f098": "changeStartBlock(uint256)", +"54385526": "setStatus(uint8,uint8,string)", +"5438a64e": "getContractSigners(bytes32)", +"5438c5d2": "hasListener()", +"54392a96": "simTotalObligation(bytes)", +"5439af13": "getIdeaDescription(uint256)", +"5439c6a1": "nonFungibleByIndex(uint256,uint128)", +"5439e185": "buyTreeTokens(address,uint256)", +"5439f5d2": "TimeToken(uint256,string,uint8,string)", +"543a3d62": "token_call()", +"543a86f6": "dblShaFlip(bytes)", +"543a9ce4": "setAStore(string,address)", +"543ad1df": "MIN_TIMEOUT()", +"543b4f6f": "endTimeTwo()", +"543ba50a": "FundsDeposited(address,uint256)", +"543e0a7b": "stringsEqual(string)", +"543e10b4": "contributeTo(address,uint256)", +"543e4dcd": "testFailUntrustedTransferFrom()", +"543e9954": "freeBalanceOf(address)", +"543e9c10": "containsAdmin(address)", +"543f8101": "activateOversightAddress(address)", +"54400c60": "right19(uint256)", +"544082e5": "authorShare()", +"54409599": "SHIVToken()", +"54413d29": "withdrawAllForAccount(address,address[])", +"544447bb": "unicornToken()", +"5445cbf3": "assetsCertified()", +"5445e38c": "_isCycleValid(uint256)", +"5446b604": "unlockMintDate2()", +"5446d669": "ShitToken()", +"544736e6": "isStarted()", +"544743d6": "getCharAt(uint256)", +"5447ad71": "newGame(bytes32)", +"5447b86f": "ipart(int256)", +"5447c05d": "updateTemplateReputation(address,uint8)", +"5447fab0": "serviceController()", +"5448c674": "IBCA()", +"544a026b": "protectCharacter(uint32,uint8)", +"544aa2cf": "LOG_BetLost(address,uint256,uint256)", +"544b1b24": "onlyHarvest(uint256)", +"544b9606": "ICO_BONUS2_SLGN_LESS()", +"544be427": "finalizeBurnUtility(address,uint256)", +"544c465c": "calcReward(uint256)", +"544cdbda": "send_to_owner(address,uint256,uint32)", +"544cfead": "reignBlocks()", +"544d6544": "transferPrivateSale(address,uint256)", +"544d8ca2": "registerLog(string,string,uint256)", +"544d9723": "itemAt(uint256)", +"544f113b": "startingAmount()", +"544f43e3": "getRatePlansOfVendor(uint256,uint256,uint256,bool)", +"544ffc9c": "proposalVotes(uint256)", +"5451436d": "EthLyte()", +"54517ddf": "transferFromByCrowdsale(address,address,uint256)", +"5451a1e1": "addressFounders()", +"5451cbcc": "ZEToken()", +"5451fb26": "increaseLoanOnBehalfOf(address,bytes32,uint256,uint256)", +"5452644d": "createNewDynamicPaymentAddress(uint256,address)", +"5452b7d4": "getReservedTokens(uint256)", +"545305fb": "finalizeCrowdsaleAndToken()", +"5453095b": "buyMNC(string)", +"545342a0": "ZaiZaiCoin()", +"5453f4e7": "createTokenUri(address,address,address,address,address,address,address,uint256)", +"545464ff": "ConsentFactory(string,address)", +"5454d6e0": "isMilestonesSetted()", +"5454fb7c": "ico1Sold()", +"54557250": "getAgentIdByPositionBet(uint256)", +"545599ff": "END_DATE()", +"5455e1b8": "setAddressesThatCanList(bool,address[])", +"54567923": "addServiceReward(uint256)", +"54569a86": "Needit()", +"5456d8d2": "removeSpecialBonusConditions(address)", +"54573835": "withdrawEtherInternal(address,address,uint256)", +"54573cfc": "setRule(uint256,uint256,uint256,uint256)", +"545842ff": "redeemLevAndFeeToStakers(address[])", +"545921d9": "providerRegistry()", +"545a153a": "getId(uint256)", +"545a5896": "changeSolidStampContract(address)", +"545ae0f6": "TokenFundTransfer(uint256)", +"545b2f0d": "getUpgradeAmt(uint256)", +"545c50f0": "pointRootNode(int256,address)", +"545c5a02": "setStepTwoLockEndTime(uint256)", +"545c5d54": "deliveryService(uint256,uint256,uint256)", +"545d2e29": "invalidateAdvertiserRefund(uint256)", +"545d5988": "claimCheckPriceReward()", +"545d8b55": "minCapFail()", +"545e6362": "PRE_ICO_BONUS_TIME_1()", +"545e7c61": "deploy(address,address)", +"545f6837": "returnSenderBalance()", +"54604eec": "stopAssign()", +"54605549": "setCoinBalance(address,uint256,uint8,bool)", +"5460687c": "test_chain2_3()", +"5460ef10": "sendWithExtraGas(address,uint256,uint256)", +"54610cea": "setProvider(address,uint256,uint256)", +"54612e27": "freeze(bytes32,bytes32,uint256,bytes)", +"54616911": "burnICOTokens()", +"54619b69": "eAccessTOKEN()", +"546216f1": "winningScore()", +"54622cef": "multiMintPreIco(address[],uint256[])", +"5462870d": "multisigAddress()", +"5463a2e4": "reasonableDiffInBps(address)", +"546434e3": "TwoStageSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"546455b5": "assert3(uint256)", +"54653352": "beView()", +"54657f0a": "setHiddenCurves(bytes32[])", +"54659685": "getTicketsCount(address)", +"54659d99": "SPINFund()", +"546639cf": "JacksToken(uint256)", +"546668bb": "conquesting()", +"54672768": "Instrument()", +"54674ebc": "HackableToken()", +"54675320": "EventProduct(uint32,string,uint32,uint32,uint256,uint256,uint256,uint256)", +"5467e0a7": "redemption()", +"5467f508": "indPresaleDeposit()", +"5468e4e1": "setGameStateFusion(bool)", +"5469a173": "getFifthRoundReleaseTime()", +"5469aabb": "_diviSplit(uint256,address,address,uint256)", +"546b270d": "getServer(uint256)", +"546b48b1": "makeSimpleBundle(uint256,address,bytes32,bytes32)", +"546c2b93": "paid(uint256,uint256,bytes32)", +"546d08fe": "dividendAddress()", +"546dc0ac": "collectAsset(address,uint256)", +"546dc71c": "approveWithdrawAddress(address,address,bool)", +"546dd883": "privateAmount()", +"546e1959": "changeOwnerStart(address)", +"546e428c": "modifySender(address,bool)", +"546ea281": "currentAction()", +"546efd98": "indiFundAndSocialVault()", +"547069bf": "crowdsaleWeiRaised()", +"5470b13b": "getWallet(uint256)", +"5470f6db": "setMaxSet(uint256)", +"547173da": "endPresaleDate()", +"54717ea9": "getValueBonusTokens(uint256,uint256)", +"54718917": "determineWinner(string)", +"5471d5d8": "VetLite(uint256,uint256)", +"5471dd4c": "FourthAddressBalance()", +"54722412": "OfferZone()", +"54734f7d": "setBoardAdd(address)", +"54738157": "OwnerCloseContract()", +"5473b4e9": "getTransactionConfirmCount(bytes32,uint256)", +"5473c701": "test_oneInvalidFalseEqLog()", +"54741525": "getTransactionCount(bool,bool)", +"54741f8d": "getMemBestPromouter()", +"5474d4d7": "_transferBag(address,address,uint256)", +"5474fbd3": "isDayThirtyChecked()", +"547505e3": "tokenAdministrator()", +"5475c22e": "bindOrderFunds(address,bool,int256)", +"5476bd72": "addToken(address,address)", +"5476ea9e": "auctionAddress()", +"5476f49d": "m_totalAppCount()", +"5477d33f": "price_constant1()", +"5477e571": "handleMultipleItems(address,uint256,uint256,uint256,uint256,uint256)", +"54786b4e": "getDSTSymbol()", +"5478786c": "IDLE()", +"5478dbb7": "play(uint256[3])", +"5478f06f": "updateMDTRewardAmount(uint256)", +"5478f468": "getHistoryLength()", +"54790b7d": "isOvertime()", +"547916ea": "finishRound()", +"54791f36": "_transferWithReference(address,uint256,string,address)", +"5479d940": "isUpgradable()", +"547a5168": "TomocoinTokens()", +"547a5eee": "setWhitelistSetter(address)", +"547ac053": "saveInitialParametersToStorage(uint256,uint256,uint256,address)", +"547c165f": "getApprenticeChestAvailable()", +"547c1b6a": "SALE_START_DATE()", +"547c4137": "setLLV_edit_32(string)", +"547c8011": "DemocraticPalette()", +"547cae29": "uintToString(uint16)", +"547cbaa5": "addFrozen(address,uint256,uint256,bool)", +"547dd162": "_newAgon(uint64,uint64,address,uint256)", +"547dfaf5": "WthdrawAllToCreator()", +"547e3f06": "changeReceiver(address)", +"547e6a5b": "simulate(uint256,uint8,uint8,uint8,uint8,uint8,uint8[176])", +"547eeac1": "acceptTransfer()", +"547fd950": "getTotalFrozenBalance()", +"54812d17": "initialize(address,address,uint256,uint256,address,uint256)", +"54817301": "setFreezeEnd(uint256)", +"5481c1ff": "referBenefitRate()", +"5481f43e": "getProviderTitle(address)", +"54823e66": "getStateHash(uint256)", +"54828eb7": "placeBetEven(uint256)", +"54829cad": "dubi()", +"5482d73c": "getDocument(bytes16,uint256)", +"5482d88e": "telcoin()", +"54830df7": "getApprovedTokenCount()", +"54840c6e": "tradable()", +"5484b5bf": "thelocation()", +"5485868a": "roundFactory()", +"5485bb82": "w_Team()", +"5486dfb3": "distributeSupply()", +"548707cd": "_bid(uint40,uint128)", +"54876921": "withdrawMoney(uint256)", +"5487e055": "PRICE_MID()", +"5488cc80": "currentCheckpointId()", +"548942e1": "UbecoinICO()", +"548ad42e": "chfScale()", +"548b273a": "outstandingEther()", +"548b5e6b": "contractStartDate_()", +"548c0ef4": "getRank(address)", +"548c20be": "getMyName(bytes32)", +"548d4a54": "updateTransferFeeRate(uint256)", +"548d91b1": "getPage(uint256[],uint256,uint256,bool)", +"548db174": "removeFromWhitelist(address[])", +"548dd51e": "newContract(address,address,uint256)", +"548e0846": "lastCallBlock(address)", +"548f896c": "setHouseEdgeMinimumAmount(uint256)", +"548fe136": "doWorkAndPayTOT()", +"549060bb": "Competition(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"54919a6c": "sendTokensSingleValue(address[],uint256)", +"549215a3": "amendEpoch(uint256)", +"54924aec": "adminsDisabledForever()", +"549262ba": "put()", +"5493a7f4": "importAmountForAddress(uint256,address,address)", +"549400bd": "valuee(uint256)", +"549503e5": "executeSell(address,uint256)", +"5495699f": "teamFund()", +"5495794b": "initialWei()", +"5495ca36": "MDC9Token(uint256,string,uint8,string)", +"5496b217": "createMintableBurnableToken(string,string,uint256,string)", +"549737e3": "setIBalance3(uint256,uint256,uint256)", +"549767c7": "balanceSpot(address)", +"5498e9e5": "AmericanAirlinesCoin()", +"5498eae4": "PAYA()", +"54990b15": "sendTranche(bytes32,address,uint256,bytes)", +"54999f6d": "initAmount()", +"5499c84e": "changeBonus(uint256,uint256,uint8)", +"5499dca5": "getMyStake()", +"549a9ffd": "changePiranhaName(uint256,string)", +"549aa194": "unreleasedAmount()", +"549bc193": "changeSwitchTime(uint256)", +"549bf4bf": "Liberty()", +"549bf9b9": "SFCapitalToken(string,string,uint8,uint256)", +"549c4627": "depositsOpen()", +"549c6bbb": "refundTokens(address,uint256)", +"549c7b58": "getAgon(uint256)", +"549caf35": "oxced()", +"549cbc7a": "startSale(uint256,uint256,uint256,address)", +"549d5e3b": "claimByAddress(address,address)", +"549d776a": "upgradeContract(uint256,address)", +"549ddcbd": "setFreezeHybridizationsCount(uint256,uint256)", +"549df19f": "resetAllWallets()", +"549eca74": "fpDiv(uint256,uint256)", +"54a019e2": "FOUNDER_FUND_2()", +"54a035aa": "_evaluateCategory(address,uint8,uint256,uint256)", +"54a04d2f": "setMigrateAgent(address)", +"54a0ebf5": "updateEntityName(uint256,bytes32)", +"54a1b431": "getVoteDetails(uint256)", +"54a1e232": "setSellOrdersContract(address)", +"54a28ded": "bhCheck()", +"54a2b2b8": "initialize(address,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"54a325a6": "setKyberNetwork(address)", +"54a46211": "_removeInvestor(address)", +"54a598b0": "globalTokenTransferLock()", +"54a6c8c4": "toSmallrtc(uint256)", +"54a6ff68": "isVersionLogic()", +"54a874b4": "isSolved(address)", +"54a8b217": "qryModules()", +"54a8ca69": "transferAnyMEPToken(address,uint256)", +"54a8ed7b": "USD_CENT_PER_GZE()", +"54a9409e": "charge(address,uint256,uint256)", +"54a9de1c": "referrerBonus(address)", +"54aa0546": "MCNC()", +"54aa4e44": "setDisableBuyingTime(uint256)", +"54aac764": "SALE2_CAP()", +"54ab5561": "setOwnerTwo(address)", +"54ac2119": "EMJACTestToken()", +"54aca207": "iwithdrawal(uint256)", +"54acbe7b": "setSaleShare(uint256,bool,address,uint256)", +"54accc88": "OOREDOOCHAIN()", +"54ad2d22": "BitcoinCrown()", +"54ad7e1c": "setDividendDistributionPool(address)", +"54ad9718": "feePrice()", +"54adb7b1": "doNotAllocateBid(bytes32)", +"54adc686": "claimRewards(bytes32[],uint256[])", +"54ae8492": "CustodialForward()", +"54aee843": "MANHATTANPROXYMANAVE()", +"54af0d4c": "validAfter(address)", +"54af3548": "getSigner(address,uint256,address,uint256,bytes32,bytes32,uint8)", +"54afc9a9": "MyFirstToken()", +"54b025c5": "deleteRole(address)", +"54b02ba4": "cutoff()", +"54b0a26a": "getCPModel(uint256)", +"54b16510": "CreateProduct(string,string,string,string)", +"54b2a080": "valueAtIndexHasNext(uint256)", +"54b302c5": "maximumDeposit()", +"54b3fa58": "ServiceTask(string)", +"54b48428": "endTGE()", +"54b49859": "fmpContractAddress()", +"54b51fcc": "testNumberOfElements()", +"54b5aeac": "deleteDataPatternVoteRules(uint256)", +"54b61723": "round3Cap()", +"54b67057": "setTranformed(uint64,uint64)", +"54b6a520": "ICOFinished()", +"54b6ba95": "durationInDays()", +"54b6d871": "TempusToken()", +"54b6ed85": "AddNewCurrency(string,string,string,string)", +"54b7636e": "isKYCVerified(address)", +"54b84910": "needToReserve()", +"54b8c024": "fieldOrder()", +"54b8d5e3": "getName(bytes32)", +"54b8dd66": "countryItems(uint256,uint256,uint256)", +"54b8dfcb": "settleBuyer(address,uint256)", +"54b9b4fa": "UNLOCK_TEAM_1()", +"54ba34b5": "available_slots()", +"54ba7daa": "enter(bytes,bytes)", +"54bbd376": "getNextDate(uint32)", +"54bc16f2": "Exchanges()", +"54bdbd4d": "changeMinPeriod(uint32)", +"54be44f0": "updateMinimumStakingTokenPercentageEnabled()", +"54be50a5": "lastHoldingTax()", +"54beb2f4": "ProfitSharing(address)", +"54bec662": "removeValidation(address,bytes32)", +"54bef3b4": "getPlayerVaultsHelper(uint256,uint256,uint256,uint256,uint256)", +"54bf3a73": "playerToDungeonID(address)", +"54c0775f": "GetItems(address)", +"54c15020": "awardReferalBonus()", +"54c15b82": "isGeneScience()", +"54c29ce6": "assertOperationIsConsistent(bytes32)", +"54c35a3c": "setup(address,address,address,address)", +"54c3b0c4": "icoPhase3EndTime()", +"54c41fb9": "viewMerkleHash(uint16,uint8,uint8)", +"54c51813": "setFreelancer(bool,string,uint256,uint8,uint256[],uint256[],string)", +"54c552db": "setNumber(bytes32,uint256)", +"54c58dc9": "_getAllStorages()", +"54c5aee1": "collectReward()", +"54c5b696": "maxBonus()", +"54c5f850": "withdrawTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"54c72ead": "_getHardCap()", +"54c86628": "etsContract()", +"54c91295": "getEloScore(address)", +"54c916a1": "setOCPTokenContract(address)", +"54c93a4e": "lockTeamTokens()", +"54c990cf": "periodTimeFrame(uint256)", +"54c9cc44": "changePlayersName(string)", +"54ca435f": "PRESS_MARKETING()", +"54ca9095": "newEntity(bytes32,bytes32,uint256,uint256)", +"54cacaba": "QuarkChain()", +"54caf101": "bonus(uint256,uint8)", +"54cb5081": "getPromoMinPurchaseEth()", +"54cbe1e6": "gamePayoutResolver(address,uint256)", +"54cbffc4": "LimitOfMinutes()", +"54cc463b": "PreICOPrice()", +"54cc61bc": "Krown(uint256,string,uint8,string,address)", +"54ccdb0d": "seriesCSupply()", +"54cdac25": "usd2weiTopSales(uint256)", +"54ce0851": "round5TokensRemaning()", +"54ce7616": "TestTalk()", +"54cecb21": "AuthPending(address)", +"54cf2aeb": "swapFee()", +"54cf6668": "setEarlyInvestorExchangeRate(uint256)", +"54cfcd1b": "DEAWCOIN()", +"54cfe7d0": "nextForkName()", +"54d03b5c": "changeFeeMake(uint256)", +"54d05ad2": "changelp10(address)", +"54d06009": "whiteListAddress()", +"54d15005": "isDestroyed(string)", +"54d15347": "adminSuspendDeposit(bool)", +"54d18864": "totalProjectToken()", +"54d1b356": "GetBankerProfit(uint8)", +"54d1f77c": "UnpaidDivInt()", +"54d24f33": "TOKEN_PRESALE_LIMIT()", +"54d271fb": "unpause_1()", +"54d29b9a": "bidderWhitelist(uint256)", +"54d2a34a": "getHouseFee()", +"54d30c87": "release(uint256,bool)", +"54d3f3e4": "getTopInfoDetail(address)", +"54d41bbd": "unregisterAdmin(address)", +"54d4b7b2": "DateOfDeath()", +"54d4da57": "extractInvoicedLength()", +"54d50378": "winner_pool_amount()", +"54d5e127": "withdrawSettle(bytes32,bytes32)", +"54d68405": "LogFundAnswerBounty(bytes32,uint256,uint256,address)", +"54d6a2b7": "cancelSwap(uint256)", +"54d734e2": "createSubscriptionOffer(uint256,uint16,uint256,uint256,uint256,uint256,uint256,bytes)", +"54d79868": "getPositionBalance(bytes32)", +"54d7c34d": "transferAidrop()", +"54d87002": "showContributed()", +"54d89c92": "numberParticipants()", +"54d92ba9": "getCurrAuctionPriceTankID(uint256)", +"54d9d6f8": "findNextDay(uint256,bytes)", +"54da44db": "GetUserBetsInRaz(address,uint256)", +"54da5393": "Utils()", +"54da80c9": "Patney()", +"54dacb96": "numWhitelisted()", +"54daedc3": "transferCoins(address)", +"54db4547": "ethbuy(uint256)", +"54dcc49b": "_withdraw(address,uint256,bool,uint256)", +"54dcfb9b": "LinkToken(uint256,string,string,address)", +"54dd1da4": "releaseVestedTokens()", +"54ddd5d6": "retrieveRefund()", +"54dea00a": "getTokenRate(address)", +"54dfbca8": "setExtra(uint256,address)", +"54dfefb4": "DEEPPAYMENT()", +"54e030b7": "bonusDistributionAddress()", +"54e031cb": "setLockAccInfo(address,string)", +"54e08f76": "theInvestor()", +"54e0b451": "claimReward(bytes32,uint256)", +"54e0b464": "ICO_ADDR()", +"54e16753": "BLUECoin()", +"54e2cf2d": "_getPartLevel(bytes,uint256)", +"54e2dc8d": "getAdditionalTime(uint256)", +"54e30c37": "earlyBirdPrice()", +"54e33cf0": "getRewardsIndex()", +"54e35054": "getRoundResultInfoWithRoundID(uint256)", +"54e35ba2": "issueTokens(uint256,uint256)", +"54e4df26": "test_0_testGenerateTokens()", +"54e707a0": "START_WEEK_2()", +"54e76d74": "minimumPoolPurchase()", +"54e7aed8": "Frozenable(address)", +"54e7e98c": "PiexT(uint256,string,uint8,string)", +"54e8561b": "RDOCrowdsale(address,address)", +"54e8e4e4": "Test_SignedInteger_AdditionOverflow(int256)", +"54e921cb": "setFreezeMustCalculate(uint256,bool)", +"54e9244e": "orderFills()", +"54e9d5e1": "refundDonation(address)", +"54ea1538": "sellDrago(uint256)", +"54ea1af9": "flyDrop(address[],uint256[])", +"54ea4000": "identify(address[])", +"54eae3e6": "streamEnd()", +"54eb3f74": "getOptionState(address[2],uint256[7])", +"54eb9e88": "_preValidateICOPurchase(address,uint256)", +"54ec5d9b": "weiRaisedRound()", +"54ec6a43": "taxPaid()", +"54ecaba4": "COMPETITION_VERSION()", +"54ecd994": "ALLOC_BOUNTIES()", +"54ed08c8": "getPurchasedTokens(address)", +"54ed44f7": "generateCostFromAttributes(uint8[14])", +"54ed7b6e": "addHash(bytes)", +"54ee4d4b": "addCommunityGrant(address,uint256)", +"54eea796": "setEpochLength(uint256)", +"54ef356f": "isUserAdmitted(address)", +"54ef9c3c": "getEpisodeBranchData(uint256,uint256)", +"54f10ed0": "IknewToken()", +"54f11256": "retrieveCadvsLeftInRefunding()", +"54f12a2c": "isAllowed(string,string)", +"54f1469c": "shuffle(uint256[])", +"54f1bb4b": "Etheraffle(address,address,address,address)", +"54f363a3": "addition(uint256,uint256)", +"54f47346": "lastBlock_f12()", +"54f47be7": "transformSettingContract()", +"54f4824d": "myLastRef(address)", +"54f50f1b": "nicknameOf(uint256)", +"54f5164b": "isLocked(bytes32,uint256)", +"54f51d32": "SetCitySnapshot(address,uint256,bool,uint256,uint256,uint256,uint256)", +"54f5675c": "OfferedForSale(uint256)", +"54f56df1": "Shop(address)", +"54f60aea": "ONE_EMONT()", +"54f6127f": "getData(bytes32)", +"54f63105": "maxMintingPower()", +"54f63ee5": "resumePresale()", +"54f703f8": "factor()", +"54f78dad": "setBalanceSheet(address)", +"54f7b493": "getMinimumFundsInEuroCents()", +"54f7dd8c": "lotOfOwnerByIndex(address,uint256)", +"54f81786": "startTokenVotes(address[10])", +"54f83483": "needsTick()", +"54f8c2df": "getShipName(uint32)", +"54f9962a": "getAffiliateLevel()", +"54f9cbb3": "newVote(uint256,string)", +"54fa8044": "sendKrs(address,uint256)", +"54fac919": "decay()", +"54fbde65": "USDWEI()", +"54fbed37": "tokenIsBeingTransferred(address,address,uint256)", +"54fc85ac": "maxEth()", +"54fd4d50": "version()", +"54fead44": "_removeRecoverer(address)", +"54fef819": "throwsWhenRedeployingANT()", +"54ffb323": "MaxOffer()", +"54ffe626": "_getBonusTokenAmount(uint256,uint256)", +"550052b5": "iaOnInvested(address,uint256,bool)", +"5502109e": "actualCap()", +"550271c9": "Candle()", +"5502be83": "getBountiesByParticipant(address)", +"55036214": "priceRound2()", +"5503a659": "smallponzi()", +"5503d9ba": "numberOfPledgeAdmins()", +"55042668": "jobStarted(bytes16,address,address,uint256,uint256)", +"55044042": "CreateGUNS(address,uint256)", +"5504bf71": "attackerPrizeByToken(bytes32,address,address)", +"5504f45e": "getFrontEndTokenSupply(address)", +"5505075b": "validArb(address,uint256)", +"550538f6": "getOneTimeCosts()", +"550563ba": "Iscm(uint256,string,string)", +"55061ccc": "setImageBlurredAt(uint256,uint256)", +"55064d85": "exists(uint256,uint256,uint256)", +"5506aa6c": "weiMaximumGoal()", +"55072fef": "PRIVATE()", +"5507a82e": "setCalculatorAddress(address)", +"5507e9c0": "lockForAll(bool)", +"5509b160": "weightLostPartLimit()", +"5509f0f3": "minPurchasePreICO()", +"550b1f48": "eighthTime()", +"550b47b8": "setCoinPrice(uint256)", +"550bcd8d": "testThrowUpdateLatestRevisionEnforceRevisions()", +"550c99c6": "_createCutie(uint40,uint40,uint16,uint16,uint256,address,uint40)", +"550d8dca": "secondPeriodSupply()", +"550dd006": "calcCostsBuying(uint256,uint8,uint8,uint256)", +"550e4f2b": "withdrawRemainingIPCToken()", +"550ed1f0": "getMaxBetAmount()", +"550ed61b": "jpyc()", +"55107916": "distributeMarketingShares()", +"5510f804": "acceptToken()", +"5510f8d7": "forkApprove(address,address,address,uint256)", +"55119b1a": "addBeneficiary(address,uint256,uint256,uint256,uint256)", +"55121498": "getLenderBalance(uint256)", +"55126d30": "LogEvent(address,uint256,uint256,string)", +"5512a353": "BONUSROLL()", +"5512a8d8": "myohoTest()", +"551336c5": "prophecise(bytes32,bytes32)", +"55138534": "Transaction()", +"55138d97": "addCar(address[4],uint256,uint256)", +"55139163": "refereesRateBonus()", +"5513a2ac": "claimByProof(address,bytes32[],bytes32[],uint256)", +"5513a34e": "getProductHistoryPrice(bytes32)", +"5514738f": "_packWarriorPvpData(uint256,uint256,uint256,uint256,uint256)", +"55152b9d": "DxChainToken()", +"55161913": "charge()", +"5516b6c5": "SECCoinSold()", +"55171365": "bitshmToken()", +"55173bb1": "ColaTokenToken()", +"55176f51": "FOUNDATION_POOL_TOKENS_VESTED()", +"55177ef1": "addressCoreSupply()", +"55181fba": "TEXBToken()", +"55186c99": "auditorCanWithdrawStake(uint256,address)", +"55189100": "payRewards(address,uint256)", +"551a450a": "tokenIdToListing(bytes5)", +"551a5376": "haltTokenTransferFromAddress(address)", +"551cacfd": "extractEther(address)", +"551dc401": "StateChanged(uint8)", +"551e2e39": "changeDefaults(uint256,uint256,uint256,uint256,bool)", +"551e44ca": "withdrawTokenForUser(uint256)", +"551e4c27": "setPeggleBot(string)", +"551e6ba6": "BoardRoom(address)", +"551ef860": "newRole(bytes32,address[])", +"551f3108": "versionSelectors(bytes32,bytes32,address)", +"551f8e2a": "add(address,address,uint256)", +"5520002a": "viewSharesSold()", +"552033c4": "RAY()", +"552079dc": "fallback()", +"55207a07": "changeMood(string)", +"55212c89": "seeleToken()", +"55219d5a": "tokenAllowed(address)", +"5521d17b": "betOnColor(bool)", +"552200f5": "check_part_location(uint256)", +"55234ec0": "remaining()", +"5523ec91": "fghcoin()", +"552405b0": "createCommunity(string,string,string,string,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"55241077": "setValue(uint256)", +"55247a52": "wantToBeWhale()", +"5524defd": "onPayoutFailure(address,uint256)", +"5524e97a": "placeBet(uint256,uint256,uint256,bytes32,bytes32)", +"552548b5": "setMaxDiscountPermille(uint256)", +"55258a11": "updateAllScores()", +"5525d87f": "setOracleQueryType(string)", +"55265669": "showSupply()", +"55274378": "updateInterCrypto()", +"55291dbd": "claimEther()", +"552984b3": "stabilize()", +"552a41a3": "getRemainingBountyTokens()", +"552a6915": "getGood(uint256)", +"552ac31e": "prod(address,bytes32,uint128)", +"552b71aa": "executeDistributeCapital(uint256)", +"552c190e": "_DoubleDown()", +"552d2d5c": "getPerson(address)", +"552e387d": "XBVHandler(address,uint256)", +"552eb9e2": "ETStarPresale(address,uint256,uint256)", +"552f1270": "startWeek(address,uint8)", +"552f27f5": "setupEventsAdmin(address)", +"552f8224": "fechAllForCandidate()", +"552fee9d": "airdropTokens(address,uint256,uint256)", +"55302ebd": "hasUnionId(bytes32)", +"5530c519": "validate_pko(address,bytes32,bytes)", +"5531680c": "transferableBlock()", +"55325d87": "prizeWinners(uint256)", +"55326893": "setPOOL_edit_24(string)", +"5532edf2": "autorizadoraNuncaAutorizouCandidata(address,address)", +"5533639e": "toB32(bytes,uint256,bytes32,bytes)", +"5533ffad": "setUserNotifications(bool[],bool,uint8[],uint8)", +"5534236e": "AirDropPromo(string,string)", +"55347cce": "Setuppackagesale(uint256,uint256)", +"55348d9b": "addBeneficiaryVestor(address,uint256,uint256,uint256,uint256)", +"55352638": "updatePresaleMaxWei(uint256)", +"553543c5": "tokenSoldPreSale()", +"553594e4": "getActionHistorySize()", +"5535cd2f": "setPOOL_edit_1(string)", +"5535e7a8": "GameCreated(address,address,uint256,uint256,bytes32)", +"55367ba9": "pauseSale()", +"55368442": "removeMetadataObject(string)", +"5536deb6": "finalizePhase()", +"5536e2d6": "OCTACrypto()", +"5537f0ef": "betFinalize(uint256,uint8)", +"55380ed8": "GOOGToken()", +"5538210e": "tokenSweep(address,address)", +"5538689c": "changePartner3(address)", +"5538c964": "getPartnerInfo(uint256)", +"55390b0d": "PrestoToken()", +"5539a9c2": "refreshPublicFundingPersonalEthLimit(uint256)", +"5539d400": "authorizedAddress()", +"553a48fd": "isFunctionRemoveAuthorizedAddress(bytes)", +"553a5c85": "mintedTotally()", +"553a90b8": "updateStopGameOnNextRound(bool)", +"553aaafe": "MSPPlaceHolder(address,address,address,address)", +"553b196f": "setPurchasingPaused(bool)", +"553b6975": "setAmbassador(address)", +"553b6f83": "lastOracleFee()", +"553b74aa": "getNumberWallets()", +"553bf56d": "accept(uint256,string,uint256)", +"553c02ec": "getCountryBet(uint256)", +"553c6de9": "getPreIcoInvestor(uint256)", +"553cc48d": "Player(string)", +"553cd9c6": "MLC()", +"553d0d12": "transferTokensThroughProxy(address,address,uint256)", +"553df021": "deal()", +"553eb4db": "registerRewards(address[],uint256[],uint256)", +"553ec6be": "batchCancelSale(uint256[])", +"553f4fb3": "requestRand()", +"553f9157": "completeSale(uint256,uint256)", +"553fd043": "setMoneyRange(uint256)", +"553fd8ee": "ALLOC_FOUNDATION()", +"5540e6c1": "iMMCoinsellPrice()", +"55416e06": "voteA()", +"5541b817": "_leftChild(uint8)", +"554249b3": "delegateIncreaseApproval(address,uint256,address)", +"55426bad": "processPresaleOrEarlyContributors(address[],uint256[])", +"55427b42": "getBalanceofModifiedWeth()", +"5542f680": "retrieveToken(uint256)", +"55434bc9": "ToggleFreezeSelling()", +"55456f58": "maxcap()", +"554571db": "updateNarco(uint256,string,string)", +"5545f12b": "OnChainOrderBookV013bFactory()", +"5545f584": "soldForForth()", +"554600fa": "setOraclizeTimeTolerance(uint256)", +"554644d5": "_removeHolding(bytes12)", +"554652ce": "airdropToken(address[],uint256[])", +"554680f2": "updateActivation()", +"5546a12c": "setInformation(string,string)", +"5546e1ab": "getMyRefund()", +"5547d2d9": "setHtlcSettlePeriod(uint256)", +"554803c7": "RTCCOINTOKEN(uint256,string,string)", +"55485779": "minGas4Accts()", +"5548c837": "Deposit(address,address,uint256)", +"554917f5": "processMyRefund()", +"55491da8": "distributeJST(address[],uint256,uint256)", +"55494d1e": "fillBuyOrder(address,address,uint256,uint256,uint256)", +"5549563c": "claimManyTokenFor(address[])", +"5549ce5e": "WarriorSanctuary(address,uint32[])", +"5549ce6d": "ticketTransfersPerAmount(uint256)", +"5549f46c": "CustomerInsert(string,address,string,int256)", +"554a854e": "TransferCryptibles(address,uint256)", +"554ad7ff": "queryNTVUs(uint256,uint256)", +"554bab3c": "updatePauser(address)", +"554d0429": "getArrBoolField2()", +"554d184b": "getPrices(address,address[],address[])", +"554d27ca": "createOffer(address,uint256,uint256,bool,uint256)", +"554d578d": "getCap()", +"554d758e": "houseStatsOf(address)", +"554dbfc2": "EMISSION_FOR_SALESTAGE6()", +"554e00b4": "miniGameStart()", +"554e6c61": "getTargetBNumber()", +"554ed8b6": "escrowTransferList(uint256)", +"5550e4f3": "blackBoxAddress()", +"5551b6b6": "isDelegateEnable()", +"5551d1b7": "isAllowToIssue()", +"5552a483": "newOffer(address,uint256,string,uint256,uint256)", +"5552d1cb": "prizeIncr()", +"55532953": "LOCKED_ADDRESS()", +"5553dc1e": "THToken()", +"55540004": "createCampaign(address,uint256,string)", +"5555d6d6": "exist(uint256,address)", +"55560fd5": "mLoadAndReturn(address)", +"55566036": "getGamePool(uint256)", +"5556db65": "totalMined()", +"5556f3f6": "RareCards()", +"55575ddb": "setRevokeAddress(address)", +"55589cdd": "addressOf(address,string)", +"5558e1c3": "setMinToken(uint256)", +"555984fd": "cancelMintRequest(uint256,string)", +"5559d8d9": "getClamTax()", +"555aaff6": "calculate_range_attempt(uint256,uint256)", +"555ab116": "AhooleeTokenSale(uint256,uint256,uint256,address,address,uint256,uint256,uint256)", +"555ae2c6": "STQPreICOBase(address)", +"555af8f4": "addressFundHolder()", +"555b6162": "allBalances()", +"555be5bd": "assignNewPlanet(address,uint256,uint256,uint256,string,string,string)", +"555befa8": "set1RoundTime(uint256)", +"555c4758": "distributeTimelockedTokens(address[],uint256[],uint256[],uint256[])", +"555d8e3c": "_printACourse(uint256)", +"555db767": "test_2_accessRestriction_newProposal_shouldThrow()", +"555e6582": "executeMintProposal(uint256)", +"555ea48c": "becomeHost(bytes32,uint8,bytes32,bytes32,string,string,string)", +"555f323a": "totalBurnedTokens()", +"555f498a": "getInvestorsTokens(address,uint256)", +"555fe48a": "batchTransferFrom(address,address,uint32[])", +"55605eee": "claimTokenReserveEcon()", +"5560ada8": "rateAddress(address,uint256)", +"5560d365": "horseShoeForSale(uint256,uint256)", +"5560ede2": "LYToken(uint256,string,uint8,string)", +"55616107": "setCOOAddress(address,address)", +"55619911": "emergencyTransfer(uint256,address)", +"5561c0e2": "registerChain(bytes8,uint256)", +"5563d919": "cancelCraftingAuction(uint256)", +"55642be7": "getRoundBets(uint16)", +"55642cf9": "CappedBonusSale(uint256)", +"55642e53": "blacklist(bytes32)", +"5564a08e": "setGame()", +"5565ca9d": "buyShip(uint16,uint16,uint8,bytes32)", +"5565ee7a": "exchangePointToCoin(address,uint256,string)", +"556665db": "expireTimeLimit()", +"55674064": "totalSupplyWithoutDecimals()", +"55674efe": "BondkickToken(string,string,uint8,uint256,int256)", +"55684aa6": "originBurn(uint256)", +"55688000": "burnIndexedFromByAddress(address,address,uint256)", +"5568fd5d": "icoPhase2End()", +"5569e58c": "EthereumPocket()", +"5569f5d0": "preSaleFinished()", +"5569fc0b": "CreateSale(uint256,uint256,uint256,uint64,address)", +"556a3689": "mint_Crowdsale(address)", +"556ae598": "depositBomb(uint256)", +"556b22c1": "get_record_count()", +"556b6384": "removeBlacklistDestroyer(address)", +"556bcece": "reinvest_color(address,uint256,uint256,uint256)", +"556cbc03": "setDefaultWhitelistVestingParameters(uint256,uint256,uint256,uint256,uint256)", +"556d5139": "getAverageTokenPrice(address)", +"556db16a": "validatePurchase(address,uint256)", +"556e2eb9": "TBL4TokenSale()", +"556e56d1": "BurnupGameFinance(address)", +"556e6edc": "indice()", +"556ed30e": "deactivated()", +"556f0dc7": "granularity()", +"556fe562": "notEqual(bytes32,bytes32,string)", +"55710346": "createTokensFromOther(address,uint256,address)", +"557119db": "withdrawForCharity(address)", +"5571954d": "_distributeRegistrationBonus(address)", +"55728d04": "setIssuer(address,uint256)", +"5572f9c6": "exchangeEther(uint256)", +"55737391": "LBRSMultitransfer(address,address)", +"5573a34c": "FP_SCALE()", +"5573c582": "walletTransfer(address,address,uint256)", +"5574cff5": "LOVEYOUFOREVER()", +"55764c81": "updatedTokensPerEth(uint256)", +"55765e9a": "createMeme(string,uint256)", +"5576af7d": "TransactionConfirmedAfterDispute(uint256,uint256)", +"5576b791": "transferWithVesting(address,uint256)", +"5577e89f": "testEqualityUint()", +"5578b51e": "CorelliCoin(uint256,string,string)", +"5578d24e": "addOldPresidents(uint256[],address[])", +"5579996d": "CHW()", +"5579ac74": "dna3(uint256)", +"5579ff8e": "walletBlogs()", +"557b0dc9": "addCar(string,string,string,uint16,string)", +"557bed40": "SocialMediaPayToken()", +"557d0195": "SuomenMarkka()", +"557d0479": "aidrop(address[],uint256)", +"557d0999": "userreinverst()", +"557dc796": "endRoundSeed()", +"557ed1ba": "getTime()", +"557f4bc9": "changeContractOwnership(address)", +"557f9ea6": "aDeposit(uint256,uint256)", +"557feee1": "setRegionCurrentImageId(uint256,uint256)", +"5581004d": "createThrone(bytes,uint256,uint256,uint256,uint256)", +"55810d11": "appFund()", +"5581800c": "isCappedInEther()", +"5581be8d": "privatePresaleSupply()", +"558225fc": "setAtomSons(uint256,uint32)", +"558234f0": "USD_PURCHASE_AMOUNT_REQUIRING_ID()", +"55827137": "refreshVault(address,uint256)", +"5582c08d": "startMonarchyGameReward()", +"5582df33": "performInitialAllocations()", +"558305f9": "isFreezeEnabled()", +"55832ffc": "purchaseStartTime()", +"5583318a": "TOL()", +"55838881": "STAGE_ONE_BET_LIMIT()", +"5584002b": "_isSimulation()", +"55843fda": "getAdOwner(uint256)", +"5584c4f9": "getActiveProposals()", +"558599ea": "SQR_TOKEN_DECIMALS()", +"55866c8d": "isRefunded(uint256)", +"55869af1": "fromVersion()", +"558790d8": "testInitialTokenBalanceShouldBeZero()", +"5588227e": "restCrowdSaleAddress(address)", +"55889d01": "setMaxLockPeriod(uint256)", +"5588b929": "streamerContract()", +"558a7297": "setOperator(address,bool)", +"558a8f47": "sendFutureSupplyToken(address,uint256)", +"558b5aab": "setSellingToken(address,uint256,uint256)", +"558da2e3": "preSaleprice()", +"558e223f": "_buyPutToOpen(uint256,uint256,uint256,uint256,address)", +"558e44d3": "MAX_FEE_PERCENTAGE()", +"558f285f": "unsetMyIdentity(uint256)", +"558f46c8": "getZTKChecks()", +"55909da3": "spreadTokens()", +"5590e4d2": "toBytes32(bool)", +"55915b97": "initialSuppy()", +"55923471": "fiveHourCap()", +"55923cc5": "ElementToken(string,string,uint256,uint8)", +"5592d687": "settleBounty(uint128)", +"5592fc71": "getLotteryWinners()", +"55947d16": "XJJ()", +"5594e88c": "delegateToken(address,address)", +"559510d8": "left53(uint256)", +"55951e15": "dollarToLoveyRate()", +"55954b49": "initVesting(address,uint256)", +"559659fa": "getTotalRefund()", +"55976b05": "depositNotification(uint256)", +"5597801a": "addwhitelistedBatch(address[],address)", +"5597e9dd": "setCompte_36(string)", +"5597f3a5": "createRecord(string,uint256,address,string,string,string)", +"5598c576": "reveal_move(bytes32,uint8,bytes32,bytes32)", +"5598f8cc": "getCampaign(uint256)", +"559ac092": "getAirdropIdsByContractAddress(address)", +"559b0432": "yearCap()", +"559b0ed5": "giveBackOwnership(address)", +"559b1df4": "TokenStoreUpdated(address,address)", +"559b678c": "IsLimitPart(uint8,uint256)", +"559e5e06": "updateTokenAge()", +"559ec80d": "settleDeposit()", +"559ed339": "setTokens()", +"559f05dc": "canTrade(address)", +"559fb6f5": "assertAvailable(uint256)", +"559fd7ee": "setYearOneMultiplier(uint256)", +"55a01845": "forceFinished()", +"55a05335": "totalDragonLotteryNumber()", +"55a0b387": "getFreeToken(bytes32,bytes32,uint8)", +"55a129bd": "Tier(uint256,uint256,uint256,uint256,uint256,uint256)", +"55a36746": "newDigitalContract(string,address[])", +"55a373d6": "tokenContract()", +"55a392ac": "ExerciseEndTime()", +"55a3f425": "getBalanaceOf(address)", +"55a53ed0": "EtherSteem()", +"55a5a8d4": "DHUBTest02()", +"55a5dc3c": "SpegniCassaAutomatica()", +"55a5f702": "right45(uint256)", +"55a6b827": "setPrices(uint32,uint32)", +"55a85240": "random(bytes32,uint32,uint256)", +"55a964a7": "distributeALLY(address[],uint256,uint256)", +"55a9794a": "extract(uint256,uint256[])", +"55a9a87c": "fightMonster(uint16,uint8,uint8)", +"55aa8ad4": "Filesystem()", +"55ab314e": "setOrders(uint224,uint32,uint8,uint8,uint64,uint64,uint64)", +"55ad798f": "removeRobot(address)", +"55ae603e": "sell(uint16,uint16,uint8,address,uint256)", +"55aea767": "batchClaim(uint256)", +"55aed629": "SpinnersByAddress(address,uint256)", +"55af5c59": "editBalanceOf(address,uint256)", +"55afb12d": "isStbMintedForStaEx()", +"55afee43": "validateKYC(address,bool)", +"55aff5ba": "minTokParticipate()", +"55aff703": "updatedBet(uint256)", +"55b09c58": "myuseOf(address)", +"55b1182c": "stakeholdersPoolAddress()", +"55b12570": "TransferError(address,uint256)", +"55b1aa23": "DEEPPASA()", +"55b23f4c": "econVestingStages()", +"55b2bb0f": "MIN_FUND()", +"55b32c83": "sendFoundation()", +"55b37685": "balancePreSale3()", +"55b4bb4b": "HeavyLitecoin()", +"55b4f231": "vestTokensDetail(address,uint256,uint256,uint256,bool,uint256)", +"55b5ec64": "proceeds()", +"55b62dcf": "getThresold(uint256)", +"55b6ec79": "endCall(bytes32,uint256,uint8,bytes32,bytes32)", +"55b6ed5c": "allowances(address,address)", +"55b700af": "PRESALERATE()", +"55b71344": "FlexibleToken(string,string,uint8,uint256)", +"55b726bc": "adjustRate(uint256)", +"55b72f38": "getLongitude()", +"55b775ea": "setFeed(address)", +"55b8415e": "processReward()", +"55b860e1": "_updateDiscount(uint256,uint256)", +"55b8ef5e": "UserInfo()", +"55b93031": "minNumber()", +"55b954ad": "getRestTokenBalance()", +"55b9b9cf": "PXLToken(uint256,uint256,uint256,address,address)", +"55b9ca40": "withdrawCell(uint256)", +"55ba13da": "VaN(address)", +"55ba343f": "getMarket(bytes)", +"55bb34e5": "enableEmission(bool)", +"55bc0f07": "returnLongTokenAmount(address[3],bytes32)", +"55bc8725": "bannedAddresses(address)", +"55bcaf06": "halfMultiplier()", +"55bdd4ac": "offerCatForSaleToAddress(uint256,uint256,address)", +"55be1168": "view42()", +"55bf3dbb": "OrangeToken()", +"55bf5656": "crowdfundStartDate()", +"55bfe5b1": "chfRate()", +"55c01345": "coupon()", +"55c081d4": "setTier(address)", +"55c08200": "setSpecialPeacefulSkill(uint256,uint8)", +"55c0a5f4": "appendSource(address[],uint256[])", +"55c1743d": "SEOS(uint256)", +"55c1e611": "cancelBets()", +"55c208ad": "TimeDecayingTokenBoundaryRange(uint256,uint256,uint256,uint256,address)", +"55c28ed0": "zeuscoin()", +"55c2a0ac": "addQuantity(address,address,uint256,uint256)", +"55c33624": "mock_set(address,address,uint256,uint256)", +"55c39193": "removeBoardOnUser(address,address)", +"55c47867": "withdrawTokensForCloudexchangeTeam(uint256,address[])", +"55c4a8bf": "vig()", +"55c4b226": "pushUpdate()", +"55c4c5b3": "Cartycoin(uint256,string,string)", +"55c4e704": "enableAgency(address)", +"55c60500": "setRemainAirdrop(uint256)", +"55c623c6": "bidEth(uint256)", +"55c64ce1": "resetReward()", +"55c797ce": "setBonusWallet(address)", +"55c79f49": "payToEvaluator(uint256,uint256)", +"55c81595": "raffleState()", +"55c81ae9": "recipientContainer()", +"55c8c6fd": "tokensSupplied()", +"55c94f04": "closePosition(bytes32,uint256,address,address,bytes)", +"55c9e290": "DOI()", +"55c9e926": "getNumPlayers()", +"55ca92f8": "createBallot(uint256,uint256,address,string)", +"55cacda5": "minimumEpochInterval()", +"55cb155a": "WebcoinToken(uint256,address[])", +"55cb61ca": "EthTransferContract(address)", +"55cc4e57": "setIssuer(address)", +"55cd1915": "GA_chain()", +"55ce15f4": "transferAmount(address,uint256,uint256)", +"55ce3b9a": "setFundWallet(address)", +"55ce596b": "flowingHairAddress()", +"55ce76e6": "feeAmountThreshold()", +"55cf1008": "numberOfValidPartners(uint256,uint256)", +"55cf4e30": "setAccesser(address)", +"55cf969d": "transferReverseProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"55cfa833": "clientmanager()", +"55d0012d": "signupUserWhitelist(address[],uint256[])", +"55d04877": "_payRefund(bytes32)", +"55d13efe": "sha_data_group(int256[],int256)", +"55d17201": "OHC_Crowdsale(uint256,uint256,uint256,address)", +"55d17251": "CROWDSALE_CAP()", +"55d1b4d3": "softCapPrice()", +"55d1c5c7": "getEuroCollected()", +"55d1f799": "triggerSkill(uint32[11][32],uint8[32],uint8[4][31],uint8[3][3][31],uint8[5][11][32],uint16[11][32],uint32[3][11][32])", +"55d28f20": "configure(address,address,address)", +"55d374e9": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"55d39bc0": "setETHPriceUpperBound(uint256)", +"55d4956f": "setEndSaleDate(uint256)", +"55d55a76": "isActionAccount(address)", +"55d56ddd": "_adoptAxies(address,uint8,uint256,address)", +"55d595d1": "rollbackContract(uint256,address)", +"55d66c3e": "getMarketOrderWorkerpoolOwner(uint256)", +"55d67ba0": "Begin(string)", +"55d6d06e": "XIDToken()", +"55d6f3c0": "Telephone()", +"55d72a7d": "ActionStarUp(address)", +"55d7592d": "emergencyETHDrain()", +"55d79248": "miningTenPlat()", +"55d7fe2b": "RATE_SALESTAGE5()", +"55d8bbd5": "beginSell()", +"55d9275e": "payMoneytoAuthor(address)", +"55dac078": "SecuredNotes()", +"55daf6e6": "setInitialOwners(address[],uint256[],uint256[])", +"55db4092": "setTOS(address,bool)", +"55dc3b65": "DAVCoin()", +"55dd16cd": "CrowdsalePhase1(uint256)", +"55dd574c": "startPreSale()", +"55dd8171": "bbFounderCoreStaffWallet()", +"55ddc9f0": "mainSaleFirstStartDate()", +"55de28ae": "burnBadge(uint256)", +"55de5a93": "getCurrentEdition()", +"55de97ac": "OBR_Duration()", +"55deb8fc": "tell(uint256)", +"55df34f2": "leftOverTokens()", +"55dfb430": "Test1(int256)", +"55dfc97c": "limitSupplyPerYear()", +"55e0aece": "getListingService(uint8)", +"55e1726c": "LogSetStageStartTime(bytes32,uint256)", +"55e17544": "Tardis()", +"55e21474": "firstRoundCosmosTokensLimit()", +"55e2305e": "preauthorize(address)", +"55e37cec": "discountRatePreIco()", +"55e38f9b": "canAddNewClient(address)", +"55e3f086": "startRound()", +"55e40d98": "updateItem(uint256,string,uint256[6])", +"55e447aa": "queryBalanceOf(address)", +"55e46476": "createA()", +"55e61dcd": "operationsInQueue(uint256)", +"55e6b18e": "victorieumStaticToken()", +"55e6fc50": "deposit_fee()", +"55e79d29": "regex()", +"55e7a663": "setLowerPricePercentage(uint256)", +"55e7db94": "GBCToken()", +"55e97e93": "closeGenesis()", +"55e9c358": "weekLength()", +"55e9caa1": "log_move_fees(address,address,uint256)", +"55ea14f2": "atomicxSupply()", +"55ea2cf3": "GameBit()", +"55eb27c8": "getActualUserTokenBalance(address)", +"55ebcc83": "Market(bytes,uint256)", +"55ec4da9": "VaultMint(address)", +"55ec671a": "canBet()", +"55ee684d": "initLogo()", +"55ee6afb": "Wallet(address,address)", +"55eed9de": "developerFunds()", +"55ef2913": "isOperatorAuthorizedFor(address,address)", +"55efe565": "Caligula()", +"55f03816": "orderOnSaleAuction(uint256,uint256)", +"55f0690d": "transferAndLockMulti(address[],uint256[],uint256[])", +"55f0d02c": "ResidualValue(uint256,string,string)", +"55f13278": "presaleTokenCreationCap()", +"55f14c30": "minter2()", +"55f150f1": "desc()", +"55f1a3c8": "disableTokenSale()", +"55f21eb7": "getProvider(address)", +"55f25e3f": "getLavaTypedDataHash(bytes,address,address,address,uint256,uint256,uint256,uint256)", +"55f28260": "getOwnerAt(uint256)", +"55f29166": "cancelUpgrade()", +"55f2dcb2": "GouBi()", +"55f2de40": "abioSold()", +"55f39677": "phase2WeiRaised()", +"55f3c49c": "bookrequest(uint256)", +"55f413c9": "presale3_startdate()", +"55f48a46": "CUSTOM_ERC20_BURN_SERVICE_NAME()", +"55f54552": "setPaySize(uint256)", +"55f57510": "positions(address)", +"55f5856f": "transferToLimited(address,address,uint256,uint8)", +"55f6a412": "modify_NovumAddress(address)", +"55f78af8": "getLockBalance(address)", +"55f804b3": "setBaseURI(string)", +"55f82589": "tryExec(address,uint256)", +"55f86501": "exec(bytes)", +"55f92d23": "privateSaleContribution(address,uint256)", +"55f953e6": "getTokensCountOfUser(address)", +"55fa1348": "minimum_donation()", +"55fb8cee": "userCountsInAccount(uint256)", +"55fb9765": "UniversalGamingCoin()", +"55fbc8c2": "UpdateEthBalance(uint256,uint256)", +"55fbf10e": "PanterX(uint256,string,uint8,string)", +"55fe13ea": "setBuyingEscrowAddress(address)", +"55fecb0b": "payTheWinner()", +"55ff440a": "castStringToUInt(string)", +"55ff85c3": "returnBet(uint32)", +"56000acf": "processPayment(address,uint256,bool)", +"56003f0f": "createTemporary(bytes32)", +"5600e827": "elapsedMonthsFromICOStart()", +"5600f04f": "url()", +"5601477b": "addMilestone(uint256,uint256)", +"5601da3d": "innerTransfer(address,address,uint256,uint256)", +"5601eaea": "execute(uint256,uint256)", +"56025c9e": "DatareumCrowdsale(address)", +"5602a812": "sumICOStage5USD()", +"5602c05f": "AREF()", +"560334c6": "angelPool()", +"5603a50d": "checkVesting(uint256,uint256)", +"5603ac35": "NewBudget(address,uint256)", +"5603b9f9": "registerReferral(address,address)", +"56048edc": "getThresold()", +"56049a86": "riddle()", +"5604af49": "battleProvider()", +"560667f1": "setDocToAddress(address,bytes)", +"56075a98": "becomePlayer()", +"56078480": "GoneTrippinToken()", +"560791a9": "returnHolder(uint256)", +"5607a548": "m_ownerIndex()", +"5607f324": "checkLicense(address,address)", +"5607f408": "freezeTokens(address)", +"56084329": "SAATCoin()", +"5608b6d9": "changeprivatebonus(uint256)", +"5609825e": "partyOwnsAsset(address,address,string)", +"56098295": "getCandidateVotesByIndex(uint256)", +"560a665a": "buyTokensByReferrer(address,address)", +"560bb612": "SignatureValidator(address)", +"560bd3ec": "addCollaborate(uint256,address,bytes32,uint256)", +"560cb0a5": "SikobaContinuousSale(uint256)", +"560d3ca5": "toEXTwei(uint256)", +"560ecab5": "setSellCeiling(uint256)", +"560ed6a1": "refundEther()", +"560ef1bf": "getLockedToken(address)", +"560f5d4b": "currentStateSales()", +"561015e2": "notEqual(uint256,uint256,string)", +"56104861": "addEjariRule(string,string,uint256,uint256)", +"56105a08": "DgxSwap()", +"56111751": "respond(uint256,uint256,bytes32)", +"561187ae": "russianBounty()", +"5611bf3e": "AlerterAdded(address,bool)", +"56129134": "createPromoKitty(uint256,address)", +"561296e4": "GetReferralDataOfAddress(address)", +"5612acd3": "getScenariosInfo(bytes32)", +"5612e139": "getWebsite(address,uint256)", +"56131736": "wcf(address,uint256)", +"561337eb": "contractMessage()", +"5613680a": "whitelistInvestors(address[])", +"561387b1": "setPrice(string,string,string,uint256)", +"5614678c": "calculateDayOwnerCut_(uint256)", +"5615f415": "q2()", +"56161605": "TestGOATToken()", +"5616cafd": "setGasForCLI(uint256)", +"5616f7df": "getHatchCooldown(uint256)", +"5617fb0d": "TKDToken()", +"56189cb4": "approveInternal(address,address,uint256)", +"561960b5": "activateStartBlockOf(address)", +"56196d87": "pickReward(uint256)", +"56196dc9": "getTagByModuleType(uint8)", +"561a0d65": "serviceClaimOwnership()", +"561a28df": "market2018TokenCreated()", +"561a4873": "buyAd(string,string,string,uint256,uint8,address)", +"561b1d72": "iDeal()", +"561bbe1e": "getluckyprize()", +"561cce0a": "LONG()", +"561cd462": "balanceOfETH(address)", +"561e91a1": "makeBet()", +"561ef5b6": "for_sale()", +"561f1ba1": "sendToken(address,address,uint256,uint256)", +"561f39c0": "getGameMaker()", +"561fe29c": "createDeposit(address)", +"56200819": "updatePayoutAddress(address)", +"56206581": "MyInvestments()", +"5620d1d7": "lastCompleteEpoch()", +"56216916": "changeFinishSale(uint256)", +"5621df99": "ESMBCoin()", +"5622d195": "SvEnsRegistry()", +"562328ec": "LogBidConfirmed(bytes32,address,bytes32)", +"5623715b": "updateUpgradePoll(address)", +"56238b02": "setTokensPerEth(uint256)", +"56240b38": "PalestinePound()", +"56242e07": "customerDeposit()", +"56247e6d": "createKingdom(address,string,string,uint256,bool)", +"5624e064": "makePurchase(address,uint32)", +"562557f7": "accountsUsed(uint256,uint256)", +"56257ae1": "getFUTTotalSupply()", +"562605f1": "refundOn()", +"56264d6c": "setMaxTickets(uint256)", +"5626e246": "Stage2Allocation()", +"56277619": "setFiatRaisedConvertedToWei(uint256)", +"5628d443": "BTYCT(uint256,string,string)", +"5628fc09": "initialize(address,address,uint256,uint256,uint256,uint256,uint256,address,address,address,address,address)", +"5629365b": "playerWithdraw(uint256)", +"5629c69e": "ArtBC(uint256,string,uint8,string)", +"5629c6d9": "doExecution(address)", +"5629e70b": "NobarToken(uint256,string,string)", +"562b2ebc": "orderCalldataCanMatch(bytes,bytes,bytes,bytes)", +"562bde28": "transferMyName(address)", +"562bfb9f": "getAllCardsModifier()", +"562c45da": "withdrawDragonsPrime()", +"562c4784": "targets(address)", +"562c82ec": "aboveSevenBets()", +"562c9dfa": "test2_verlappingIntervalNewNode()", +"562cad23": "startCycle()", +"562cb622": "setAffiliateLevel(uint256)", +"562cc70c": "minWeiWhitelistInvestment()", +"562d4570": "refundStart(address,uint256,address)", +"562df3d5": "COMMISSION()", +"562e9df9": "addressTeam()", +"562ea884": "Explain()", +"562fa0df": "deposit(address,address[],uint256[])", +"56304e33": "addBalanceBlocks(address)", +"563183fc": "maskerOf(address)", +"56318820": "setTokenSwarmHash(address,bytes)", +"56323b5d": "BenderCoin()", +"5632b1fa": "payrolls(uint256)", +"56330403": "getDocsCount(string)", +"5633af60": "HeliumNetworkAddress()", +"5633c442": "lockedUpCount(address)", +"563433d7": "setStock(address)", +"5634653d": "verificationCountInt()", +"5634c88c": "sumOfNGeom(uint256,uint256,uint256)", +"563540a2": "startQueueing()", +"5636548f": "enableWithdrawal(bool)", +"56378983": "validTokenAmount(uint256)", +"56387fa3": "toogleMinting()", +"56394455": "getStageStartDate()", +"56397c35": "ledger()", +"5639bb3c": "buyPriceEth()", +"5639d152": "NewRC(address)", +"5639eb64": "IngridIsAHorribleHumanCoin(uint256,string,uint8,string)", +"563ad62b": "ConfToken()", +"563b1358": "approvePack(address)", +"563b54b9": "getQueuesLength()", +"563baca1": "fundForBounty()", +"563bd001": "tokenPriceForPreICO()", +"563bef94": "ShipSellMaster()", +"563bf264": "slash(address,address,address)", +"563c23a0": "timePaused()", +"563c78b0": "SendPreReserved4()", +"563e8233": "envio_dinero(uint256)", +"563ed6d0": "delAdminAddress(address,address)", +"563fce0b": "mappings()", +"56410637": "ethernautsStorage()", +"56411a0f": "ChrizzxToken()", +"56412d85": "getVote(uint256,uint32)", +"56416147": "getopenDdaListAssets()", +"5641ec03": "emergencyExit()", +"56423986": "DecreaseTheAllowance(address,uint256)", +"56430201": "InvestmentMade(address,uint256,uint256,string,bytes)", +"5643a711": "increaseMonsterExp(uint64,uint32)", +"56442869": "destroyCrowdsale()", +"56447520": "dteamVaultAddr4()", +"56451bc2": "removeBalances(address[],uint256[])", +"564566a8": "isSaleActive()", +"5646435b": "burnTokens(address,address,address,uint256)", +"564952d5": "trickleSum()", +"5649efbc": "superFeed()", +"564a187f": "getPopRemainingAsFixedPointForGameId(uint256)", +"564a565d": "disputes(uint256)", +"564a6b94": "cos(uint16)", +"564ad142": "testSubItem(bytes,uint256)", +"564ca533": "setRelayedMessages(bytes32,bool)", +"564e406f": "changeAgencyOwner(address)", +"564ef91d": "PRNG()", +"564f8d23": "rightmost_leaf(uint256)", +"564f9728": "get_row(uint256,uint256)", +"5650152b": "getNextAvailableReward(uint256)", +"5650e5e0": "Couchain(uint256,string,string)", +"565118f7": "lockReleaseDate2year()", +"565135ce": "removeUsersWhitelistB(address[])", +"56514d83": "distributeReserveFunds()", +"5651ce38": "priceStepDuration()", +"5652077c": "finalizeProposal(uint256)", +"56522390": "addEditTokenFee(bytes8,uint256,uint256)", +"565287c9": "votar(uint256,bytes32)", +"5652ced0": "OpnMind()", +"5652ec7e": "GnosisIssued()", +"5653de64": "tokenSold(uint256)", +"56544af0": "taxTillNow()", +"5654a341": "gameIndex()", +"5654b526": "sumHardCapICOStage8()", +"5654edb8": "btcUpdates(uint256)", +"56553a95": "transferIssue(address,uint256)", +"5655c490": "setProviderCurrentRate(uint256,uint8)", +"5655e37b": "CONTRIBUTION_MAX_NO_WHITELIST()", +"56570671": "GetContractStageLiving()", +"565707a8": "getDErc20(bytes32)", +"56575bd7": "setParticipateDailyLootContribution(uint256)", +"5658d212": "getFactoryForCountry(string)", +"565974d3": "details()", +"56597e65": "circulationCap()", +"5659856c": "addApprovedAddresses(address[],uint8)", +"565a2e2c": "getBeneficiary()", +"565a2ecf": "classicTransfer(address)", +"565a7c4c": "epm_system()", +"565af6a8": "referralRegistration(address,address)", +"565b3324": "intMin()", +"565cee48": "ALLOC_ILLIQUID_TEAM()", +"565e2220": "view24()", +"565e4fa1": "subtractScalar(int256[],int256)", +"565eab8e": "TransferMyGGTokens()", +"565ed5a2": "LogMigrationFinalized(address,address,address)", +"565f2da9": "lockTokensForTeamAndReserve(address)", +"565f3297": "bindkey(uint256)", +"565f3624": "testArgOutOfBoundsFail()", +"565fd2a7": "registerCoinData(address,uint256,uint256)", +"5660000a": "tokenRewardRate()", +"566038fb": "cancelTransferRight(address)", +"56605326": "DTFCToken()", +"56610400": "Proposals()", +"566150a3": "GenerateTokenContract()", +"5661ba15": "setDungeonTokenContract(address)", +"5661bcd8": "saosao3()", +"56624ce6": "minVoteWeightK()", +"56630bce": "KycVerified(address,bool)", +"56632637": "node_dupes(uint256)", +"5663896e": "setSecondsPerBlock(uint256)", +"56639a8e": "fixUSDPriceTime()", +"56639ef6": "PikewoodFund()", +"56640afe": "getCampaignLength(uint256)", +"5664a5a3": "MonsterCreatorInterface()", +"5666496a": "_applyForCertifation(string,uint256,bool,string,string,uint256)", +"5666da53": "RYXEX(address,address,address,uint256,uint256,uint256)", +"566735d8": "PreVNK(uint256,string,string,uint8)", +"5669c94f": "issueToken(address,string)", +"566a3cb5": "getTokensHolder()", +"566b28f0": "m_tokenDiscountThreshold()", +"566bbee7": "EventCentsPerTokenChanged(uint256,uint256)", +"566bd6c3": "offerSigner()", +"566c20fc": "writeMessage(string,string,string,string)", +"566c23ad": "setLock(bytes32,string)", +"566c37de": "teamTokenHolder()", +"566c8ed2": "TCI_client(bytes32,address,address)", +"566da66c": "OwnableContract()", +"566dccf4": "enableSaleAgent(address)", +"566dd702": "chargeAdvertiser(address,uint256,uint256,address)", +"566e638e": "createCard(address,uint16[5],uint16)", +"566e78fe": "TokenDistributionMock(uint256)", +"566eebd8": "test_claimShares_emptyRewardPool_notTranscoder()", +"566f4ac5": "payMasters()", +"566fc6de": "getProfitPercent()", +"566fca87": "GazpromCoin()", +"5670d6f1": "stopAirdrop(bool)", +"5670ef72": "setConfigs(bytes32[],uint256[])", +"56715761": "minDuration()", +"567188da": "getTotalBuyBySkull(uint256)", +"5671ec30": "totalCardCount()", +"5672f548": "physicalString()", +"5674a3ed": "runLottery()", +"5675527f": "EtherIco(address,uint256,uint256)", +"567556a4": "fundsTransfer()", +"5675db9c": "setShouldGenerateDna(bool)", +"5675ef9d": "BetPlaced(bytes32,uint8,address,bool,uint256,int32)", +"56765c51": "WITHDRAWAL_WINDOW()", +"56768538": "registerForeignAddress(address)", +"5676d075": "hardCapETHInWeiValue()", +"56780085": "TOKEN_DECIMAL_MULTIPLIER()", +"56782e5b": "hplus(uint256,uint256)", +"5678494f": "ProvePrivKey(bytes32,uint8,bytes32,bytes32,bytes32,bytes32,address,uint256)", +"5678524f": "nextBuyoutPrice(uint256)", +"5679623b": "initializationDelay()", +"567990ae": "LogNoticeMsg(address,uint256,string)", +"5679f636": "toggleBankrollReachedCap(bool)", +"567a03a7": "grantBurner(address,bool)", +"567a0f35": "testHitSoftCapPreDistribute()", +"567a9c79": "claimedBountyTokens(address)", +"567c08e2": "set_minFinneyToKeep(uint256)", +"567c31f7": "taxEarningsAvailable()", +"567c5b70": "getTicketParticipant(uint256)", +"567cc2b6": "setProduction(uint256)", +"567dbf18": "__forward(address,uint256,uint256,bytes)", +"567e75c4": "getLoanState(uint256)", +"5680a3ad": "childExists(address,uint256)", +"56813535": "const_contract_eth_value()", +"56814312": "NekoToken()", +"5681e00b": "getContractMetrics()", +"56820930": "purchaseMakeCard(uint256)", +"56826ee6": "receiveApproval(address,address,uint256,bytes)", +"568287ee": "ShopperlyGlobalToken()", +"5682d43d": "checkWithdrawAddress(address,bytes32,address)", +"56833b16": "AYA()", +"5683a9e0": "LASTTRIAL456()", +"56841b36": "payToReferer(address,uint256,string)", +"56845ca0": "updateProposalOwner(uint256,address)", +"56848c05": "awardMILsTo(address,uint256)", +"5684c219": "getReportingPeriodDurationInSeconds()", +"568531cc": "accountRegistryLogic()", +"5685f6bd": "DELTA_Token()", +"56860ddc": "GTDNToken()", +"56861322": "RecievedTip(address,uint256)", +"56861450": "isAtLeast(int256,int256,string)", +"5686b54b": "cancelAgreement(uint256)", +"5687f2b8": "emitApproval(address,address,uint256)", +"56885cd8": "crowdfunding()", +"56891412": "totalLocked()", +"568a2c55": "setNewStart(uint256)", +"568a8077": "gameResult(uint256,address)", +"568ab21e": "enter(bytes32)", +"568b5915": "votesMaskByOperation(bytes32)", +"568c2163": "END_OF_MINT_DATE()", +"568d13eb": "calculateRegionInitialSalePixelPrice(uint256)", +"568d3900": "getAgentIdByAddress(address)", +"568f57e1": "removeFromApproveList(address)", +"568f7830": "SECoin(uint256,string,string)", +"568f910d": "createPost(address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"568f9ce1": "activateDevice(bytes32)", +"5690d326": "initialize(address,address,uint256,address[],address,address,address,uint256,uint256,address)", +"5692b273": "finalTier()", +"5692e367": "decodedExpiration()", +"5692e54e": "test_0_ensureRegistryFunctions()", +"5693077a": "registerCampaign(uint256,address)", +"56930b55": "tokenOperationsFinished()", +"56939048": "disqualified(address,uint256)", +"5695dd8c": "FindX()", +"5695fa58": "getTotalDistributed()", +"56963c31": "setDistributeAgent(address,bool)", +"56979da7": "assignmentsClosed()", +"5698176a": "getPlayersPoints(address)", +"56982986": "lastBlock_a11()", +"5698fb44": "getTokenBonus()", +"56990301": "FoundersVesting(address,address)", +"56996f6b": "TDESupplyRemaining()", +"56997fb4": "potReserve()", +"5699c7b1": "getPendingWithdrawal(address,address)", +"569a7aab": "isLowercase(bytes32)", +"569aa0d8": "getPlayerSubmissionFromCompetition(string,uint8,address)", +"569bf836": "GYTToken(uint256,string,uint8,string)", +"569c5f6d": "getSum()", +"569ca935": "_setRolePermissions(address,address)", +"569d617b": "postRelayedCall(address,address,bytes,bool,uint256,uint256,bytes32)", +"569d623f": "setEstimatedWeight(uint256)", +"569e9c82": "burnByAgent(address,uint256)", +"569eaf61": "isPaidOut(uint256)", +"569f76e1": "teamOneDivsTotal()", +"569fa9f9": "releaseRecordsCount()", +"56a041fc": "exception(address,address)", +"56a060a2": "isTradingOpen()", +"56a24be0": "getPositionCallTimestamp(bytes32)", +"56a3015c": "Generation()", +"56a3f4ef": "collectMyReturn()", +"56a49b7a": "getStakeLockedStatus(address)", +"56a4e7f9": "GetGlobalProduction()", +"56a61fc4": "_trainPart2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"56a620aa": "decreaseAfterBurn(address,address,uint256)", +"56a6d9ef": "transferBalance(address,uint256)", +"56a70646": "giveBackEthers()", +"56a7564e": "undistributedTokens()", +"56a765c4": "whitelistBonusAmount()", +"56a7b0bf": "Burner(address,address)", +"56a807d9": "mintvestedTokens(address,uint256)", +"56a8a270": "competitionAddress()", +"56a9399d": "YUNXIN3Token(uint256,string,uint8,string)", +"56a9a68b": "updateAllowances()", +"56aa3892": "FooContract(address)", +"56aa772f": "Use_EmergencyCode(uint256)", +"56aa7cef": "PaymentFinished()", +"56ab4b5d": "TokenPurchased(address,uint256,uint256,uint256,uint256,uint256)", +"56abf07c": "giftStar(uint256,address)", +"56ac1efa": "AcceptsProof(address)", +"56ad2931": "_moveToken(address,address,uint256,bytes,bool)", +"56ad41c8": "XandraSupply()", +"56ad609e": "Addr1()", +"56ad9f57": "CROWDSALE_SUPPLY()", +"56ae89a3": "UpdateUserBitFlag(address,uint256)", +"56af3f2b": "PredatexTiga()", +"56af4d4e": "AanshuToken()", +"56afad92": "TSTORZContract()", +"56afd6e3": "howMuchCanIContributeNow()", +"56afeed6": "SQUIRREL_BOOST()", +"56b00cb5": "Horizon0x(uint256,string,string)", +"56b0443f": "getMarketPrice(uint8)", +"56b09382": "creditDaoAddress()", +"56b15308": "deleteProvider(address)", +"56b1ddbb": "HDT()", +"56b2c5bb": "doSucceedingTransfer()", +"56b30aec": "getPendingWithdrawlListCount()", +"56b30f33": "minAmountForDeal()", +"56b32da1": "gameStarter()", +"56b49ef0": "AuctusWhitelist(uint256,uint256)", +"56b4d760": "getHeroOwner(uint256)", +"56b54bae": "blockRewardContract()", +"56b558d3": "kingContract()", +"56b5d0eb": "_replaceModuleHandler(address)", +"56b6274b": "verifyEmail(address,string)", +"56b62e2d": "JetCoin()", +"56b63df7": "tokenLocks(address)", +"56b644b0": "changeRake(uint256)", +"56b6cb70": "foundersTokensWalletSlave()", +"56b6dbe9": "AustraliavsPeru()", +"56b7538b": "nextRoundDonation()", +"56b760f2": "numFabrics()", +"56b83dc5": "info_Symbol()", +"56b86bc2": "EtherDogCore()", +"56b8c164": "getCreatorTAOSetting(bytes32)", +"56b8c724": "transfer(address,uint256,string)", +"56b8edf0": "TransferEther(uint256)", +"56b9a8ab": "tokenSales()", +"56b9e9de": "getBrehonContract(bytes32)", +"56bb4d4a": "ICO4Period()", +"56bb9b43": "getAppCode(address)", +"56bc0c5e": "UserManager()", +"56bccf91": "depositTokens(address)", +"56bd182d": "privateSupply()", +"56bd928a": "platformLaunchDate()", +"56bdb5c4": "isMainSaleBonusTime()", +"56bdc4ae": "TokenLoot(address,address,address,address,address,address,address,address,address,address)", +"56c11ba3": "priceSelectFight2Death()", +"56c190ec": "processRefundEther(address,uint256)", +"56c21897": "PowerCoin(uint256,string,string)", +"56c23836": "transferDirect(address,uint256)", +"56c26f25": "getPlayerOwner(uint256)", +"56c290b8": "t_wallet()", +"56c2c1f6": "VESTING_TEAM_CLIFF()", +"56c38b2e": "vestingGrant(address,address,uint256,uint256)", +"56c3e31a": "mintContract(address,uint256)", +"56c4339f": "isMainBridgeContract()", +"56c46ac2": "getLockedContract(address,address)", +"56c49c2a": "contractFeeMinAmount()", +"56c4b246": "WrapperLock(address,string,string,uint256,address)", +"56c4e05a": "_balance()", +"56c51ea2": "getRestrictionStatus(uint256)", +"56c5df29": "PCFF()", +"56c686b1": "getPendingWithdrawl()", +"56c6a608": "WeBuyAnyHouse()", +"56c7627e": "tokenLimit()", +"56c7eb7c": "_destroyTokens(address,uint256)", +"56c7f461": "refundContributors()", +"56c82ae5": "sendBalanceForDevelop(uint256)", +"56c88f5f": "mintAll(address)", +"56c8c30c": "maxPossibleWithdrawal()", +"56c8e12e": "refundBalance(address)", +"56c8eaba": "KRE8()", +"56ca528f": "right18(uint256)", +"56ca623e": "toString(address)", +"56ca7143": "INITIAL_FUND_BALANCE()", +"56ca8d75": "setBuyingAmountRanges(uint256[])", +"56cac2e0": "letItRain(uint8,uint256)", +"56cb6655": "stopTokenMinting()", +"56cba008": "stopSales()", +"56ccdadb": "last_roll()", +"56ccf300": "ToptalToken()", +"56cd26eb": "Digiblock()", +"56ce0e6c": "updateMetadata(string,string)", +"56ce3f5c": "dCoinswapToken()", +"56ce4bc5": "receiveEtherFromForegroundAddress(address,address,uint256,address)", +"56ce6377": "WaveVoteContractRegistery()", +"56cea4b2": "addressFounders1()", +"56cff99f": "calcGav()", +"56d0adac": "freeToExtraMinting()", +"56d0bc9a": "updateProfileEmail(string)", +"56d13e6e": "setMaxReferrerBonus(uint256)", +"56d1c866": "getMsg(string)", +"56d1d4a2": "setExchangeThreshold(uint256)", +"56d26468": "appBase(bytes32,address)", +"56d27150": "TheMMORPGToken()", +"56d2ec1b": "internalBurn(uint256)", +"56d399e8": "stakingRequirement()", +"56d3e57d": "_generateRandomNumber()", +"56d400a1": "approveDispute(uint256)", +"56d40468": "lockBountyTokens(uint256,address,uint256)", +"56d44694": "PRICE_4()", +"56d58452": "containsSender()", +"56d59777": "setAdministrator(address[])", +"56d5f541": "_getApprovedAddress(uint256)", +"56d6cad0": "iFx()", +"56d73ad1": "getCertifierDb()", +"56d7bc54": "altCreateTokens(address,uint256)", +"56d7c0da": "ChooseAwea()", +"56d7c2c8": "transferERC20Token(address)", +"56d88e27": "len()", +"56d89b1f": "AuctusBonusDistribution()", +"56d906c7": "setBounty(address[],uint256[])", +"56d95932": "getActualTokensPerEther()", +"56d9bb9a": "viewAllCertificate(address)", +"56d9c0e3": "requestReading(address)", +"56da7743": "getBetsNums(address,uint256)", +"56da934e": "addTowardsTarget(uint256,uint256)", +"56daf2c1": "paymentWeiOwed(uint256)", +"56daf906": "THAW_CYCLE_LENGTH()", +"56db3df0": "weiForToken(uint256)", +"56db6353": "buildChainlinkRequest(bytes32,address,bytes4)", +"56dbc007": "isChild(address,address)", +"56dcd2fa": "ICO_LEVEL_3()", +"56ddbe7a": "setVRC(address,address,uint256)", +"56ddeea2": "getIcoDiscountPercentage()", +"56ddf404": "Executed(string)", +"56de9219": "Arina_amount()", +"56de96db": "setState(uint8)", +"56dfe628": "viewa2(address)", +"56e19e6e": "DDNToken(uint256,string,uint8,string)", +"56e1c40d": "burnFeeNumerator()", +"56e27ce6": "LuxToken()", +"56e2eab8": "listAddress(address,uint256,uint256)", +"56e379c1": "setICOLimit(uint256,address)", +"56e39c58": "ProtectedTransfer(address,address,uint256,bytes32)", +"56e3df97": "getGeneration(uint256)", +"56e40a32": "auctionEthEnd(address,uint256,uint256,bytes)", +"56e428fc": "LogAccessChanged(address,address,bytes32,address,uint8,uint8)", +"56e44954": "setExchangeRates(address)", +"56e49287": "auctionsEndTime()", +"56e4b68b": "supervisor()", +"56e4bc1f": "payed()", +"56e4e073": "TestETHToken()", +"56e523e2": "OpenSourceChainToken(address)", +"56e52cbb": "getMinWeiForDInit()", +"56e567e5": "balanceOfa(address)", +"56e5cf2e": "setBytesArray(bytes32,bytes32[])", +"56e5e12b": "fundariaPoolAddress()", +"56e60a31": "TokenExchangeFailed(address,uint256)", +"56e62326": "createMultiple(uint256[],uint256[],uint256[],address)", +"56e721b3": "_getRefBonus(uint256)", +"56e789eb": "checkTotalSold()", +"56e7bcd1": "putUsername(string)", +"56e7f6c7": "layerCount()", +"56e83e81": "randao()", +"56e8596f": "grantContributorTokens(address)", +"56e8b3ac": "PabloPlusToken()", +"56e8efd4": "EventNotarise(address,bytes,bytes)", +"56e8f53e": "_crownTotalSupply()", +"56e97617": "bullcrapToken()", +"56e9ae71": "OCTCOIN()", +"56e9d1f3": "deList(bytes32)", +"56e9ec88": "equipmentItem(uint256[],uint256[],uint256)", +"56ea84b2": "getMarketCurrentIndex(uint256)", +"56eaf1c0": "commissionPoints()", +"56eb5a79": "Bags()", +"56ebb303": "rewardContributors(address[],uint256[])", +"56ebd52d": "STRAAToken()", +"56ed8636": "membershipStatus(address)", +"56eeb3b0": "startAtBlockNumber()", +"56ef9296": "getMultiRequestFirstRequestId(uint256)", +"56f09125": "getConverters()", +"56f10988": "GDCNumber4()", +"56f14cf6": "_burn(address,uint256,uint256,uint256)", +"56f1594e": "UpdateMoneyAt(address)", +"56f19703": "rejectedBookingfc(uint256)", +"56f1d2dc": "increaseSystemCreatedCount()", +"56f1dd6b": "ifoodDev()", +"56f2b308": "GDCNumber2()", +"56f2eb90": "pendingRewardsToMint()", +"56f2fc89": "deployIdeas(address)", +"56f399a7": "getContractInvoices(uint256,uint8)", +"56f43352": "tradingFee()", +"56f464ea": "releaseFundsWhenBothSigned()", +"56f50473": "downPayment()", +"56f66f4c": "reportResult(uint32[],int8[],uint32,uint32,uint32,uint32,bytes32)", +"56f6e184": "addToWhitelist(uint8,address)", +"56f7cafe": "registry_exec_id()", +"56f91399": "trCut()", +"56f99fcb": "freezeLottery(uint32,bool)", +"56fa47f0": "split(address)", +"56fa9f6b": "allowRating(address,address,uint256)", +"56fadf8e": "createItem(string,uint256,uint256,address,uint256[6])", +"56fb46d7": "COOPERATE_REWARD()", +"56fb8a34": "getPivot(uint256,uint256,uint256)", +"56fbd029": "Saflok(bytes32,bytes32,bytes32,bytes32)", +"56fbdca3": "whitelistInvestor(uint256)", +"56fbf488": "setPrix(uint256,uint256)", +"56fc35d3": "BunzolaToken()", +"56fc6dae": "getUpline()", +"56fcb29f": "selfPayout()", +"56ff2318": "usersWithdrew(address)", +"56ff55d1": "_isSchemeRegistered(address,address)", +"56ff83c8": "crowdsaleWallet()", +"56ff918d": "getNextKillingAfter()", +"57006864": "checkBetParity(uint8)", +"5700cb10": "getMainRemainCoins()", +"570136ad": "liuToken(address,address)", +"57014fee": "domainOwner(string,string)", +"57016ded": "transfer_to_reserves(address,uint256,uint256)", +"57019b37": "setControllerAddress(address,address)", +"5701ac59": "calculateReferralFee(uint256,uint256)", +"5701e9c0": "TrustlessTransaction_Refunded(uint256,uint256)", +"570200c0": "setStarterPack(uint256,uint16)", +"5702b530": "byteToString(bytes1)", +"57035b60": "SWIZERStandardToken(uint256,string,uint8,string)", +"570468f0": "SupportRemoved(address)", +"5704b927": "ASXC(uint256,string,string)", +"57056261": "insert(uint256,bytes32[])", +"5705b612": "getUserId(address,address)", +"5706d99a": "STAGES()", +"5707812e": "addToLists(address,bool,bool,bool,bool)", +"5709013e": "changeToStage(uint8)", +"570919a6": "retrunError()", +"5709d7bd": "DevPromotionsMarketingWallet()", +"570a2a16": "right53(uint256)", +"570a8496": "uploadData(bytes32[])", +"570b615a": "tournamentDataIPFSHash()", +"570bc25f": "makeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"570ca735": "operator()", +"570d2f8f": "trustedWallet()", +"570d31b7": "ConsultaRegistro(bytes32)", +"570e0db5": "addDestination(bytes32)", +"570e6729": "getOptionHash(address[3],uint256[3])", +"570e997d": "gettnode(address)", +"570f65c4": "getProjectArbitrationFees(bytes32)", +"570fceb0": "updateHashrate(address,uint256)", +"570fe8c3": "cancel_payment(uint256)", +"571080ae": "getMyLobster()", +"5710ac73": "unlock(address,address[],uint256[])", +"5710de14": "newProof()", +"5710ed95": "contractBlock()", +"5711b311": "executeRemoveAuthorizedAddress(uint256)", +"571218fa": "priceModel()", +"57128ec1": "userGrowPoolAddress()", +"57135859": "BBBToken(uint256,string,string)", +"57138106": "verifyKyc(address)", +"5713fcb7": "compatible20()", +"5714db23": "AdvisoryPool(address,address)", +"5714e01f": "ownsAddress(string,address,address)", +"5714f6a1": "getTotalAvailableRelays()", +"57157189": "getListMarkets(address,uint256)", +"5715b530": "claimReservedTokens(string,address,uint256,string)", +"5715c5b7": "getTokenAddressByIndex(uint256)", +"57163cc3": "initAtx(address,address,address,uint256)", +"571694cd": "getHashOfSecret(bytes32)", +"57183698": "addProject(uint256)", +"57183c82": "instantiations(address,uint256)", +"5718b760": "withdrawSize(address)", +"5718b994": "checkEvent(address,bytes,bytes,uint256)", +"571959e0": "getServiceProvider()", +"57199334": "insertUser(address,bytes32,bytes32,bytes32,uint256)", +"5719a565": "SignerChanged(address)", +"5719dd22": "getTokenListLength()", +"571a045d": "change_game_stic(string)", +"571a0830": "withdrawAndKill()", +"571a1f66": "erc165UpdateCache(address,bytes4)", +"571a26a0": "auctions(uint256)", +"571af13b": "unlock10PercentTokensInBatch()", +"571b0227": "createUserLottery(uint32,uint32)", +"571b3d52": "createCitizen(address,uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"571c4539": "askQuestion(address,uint256,string,address[])", +"571e4a6d": "addEngineer(address,uint256,uint256)", +"571ebd3c": "addCandidate(address,bytes32)", +"571ec8d9": "addBoardScore(bytes32,bytes32,uint256)", +"571f4d9a": "getOffsets()", +"571fe016": "MAX_SALE_SUPPLY()", +"57204a1d": "unlockat()", +"57207703": "initBank(uint256)", +"5720988b": "QLANCE()", +"57211ac0": "getPaidOut(address)", +"5721b89a": "withdrawNoMoney(bytes32,address)", +"5721e419": "getBuyer(address)", +"5722e24a": "setLogger(address)", +"57230ff8": "createCity(uint256)", +"57240913": "vouched(bytes32,uint256)", +"57241f8e": "tokensOnSale()", +"5724630c": "Disbursed(address,uint256)", +"57246c1c": "getPartnerCash(uint8,bool)", +"57246d23": "jackpotSize()", +"57257a67": "startPrivateSales()", +"5725b8c5": "_initRandom()", +"57260364": "changeSubcourtTimesPerPeriod(uint96,uint256[4])", +"57263ce1": "_isProviderValid(uint256)", +"57266803": "casinoWithdraw(uint256)", +"57271a93": "bountyP()", +"57277b92": "storeEth()", +"5727dc5c": "BB()", +"5727e25d": "getCurrentRoundId()", +"5727e30b": "makeOraclizeQuery(uint256,string,string,uint256)", +"5727eec0": "speed_limit()", +"572816ef": "audit(uint8,uint8,uint256)", +"57282b96": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,bytes20,address,uint64)", +"5728ab6c": "kyberTrade(uint256,address,address,bytes32)", +"57292af8": "bonusRateOneEth()", +"572b130f": "addItem(uint256,uint256,uint256,uint256)", +"572b7a03": "minimumFeePlusDividendsPercentage()", +"572bcb3e": "setLockByPass(address[],bool)", +"572bcfe1": "deliverRewardedTokens(address,uint256,string)", +"572c1517": "transfer(uint256,string,bytes)", +"572c62ca": "poolSale()", +"572d5298": "setProduct(string)", +"572e85ec": "getCurrentPhase(uint256)", +"572f37b4": "notePrepurchase(address,uint256,uint256)", +"57315881": "getdoctor(uint256)", +"5731d433": "balanceInLottery(uint32,address)", +"5731d9cb": "seriesInfo(bytes32)", +"5731d9e3": "onefive()", +"5731f357": "oraclize_query(uint256,string,string,string)", +"5732788a": "validateCompanyName(bytes32)", +"57329424": "getPorscheByOwner(address)", +"5732a273": "backup_drawdown_amount(uint256)", +"573328ef": "advertising()", +"57332f08": "Lexcoin()", +"57337044": "randomByWeight()", +"57344e6f": "getCredit(address)", +"57347f24": "playerWithDraw(uint256)", +"573618f3": "eXchangeQualityCoin()", +"5736c9d4": "getStageBuyers(uint8,uint16,uint8)", +"57381228": "betInStageAndReturnExcess(uint256,uint256)", +"57381ee4": "sendTokens(address,uint256,uint256,bytes32)", +"57386c2a": "smallId()", +"5738fa56": "hasDataStream(bytes32)", +"57393674": "exhaustFusion(uint256)", +"573939de": "_resetFrozenInfo(address)", +"573c0bd3": "updateValue(uint256)", +"573d2411": "VeraCoinPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"573d3a23": "makeTransfer(uint256,uint256,uint256,bytes32)", +"573d559f": "_handleCoolDown(uint256)", +"573d72b7": "PERIOD_AFTERSALE_NOT_TRANSFERABLE_IN_SEC()", +"573dea96": "toWei()", +"573f642d": "_productDigest()", +"573f7af5": "mintNFTsForSale(uint256[],bytes32[],uint256[])", +"57400cf3": "currentJackPot()", +"57405301": "creatorad()", +"57408a98": "getNode(int256)", +"5740a4be": "CertifyDelegate(address,uint256)", +"5740d43c": "setDeprecated(address,bool)", +"57411a67": "getAddressDigit(address,uint8)", +"57417e78": "insetMoney()", +"5741fbce": "isPresellOpen()", +"574356b4": "VULCAN_PROMETHEUS()", +"5743cee0": "BwwToken()", +"57446636": "createContractOfAthlete(string,address,uint256,uint256,uint256)", +"574479e6": "currentPot()", +"574490cd": "ERC721Address()", +"57451104": "bonus_for_add_stage()", +"57478e38": "Free_Ether_A_Day_Funds_Return()", +"5747baf5": "Roles()", +"57481222": "get_all_project_information(uint256,address)", +"574844f4": "BLMFund()", +"574a5e31": "weiPerAtom()", +"574a89e9": "GOOGLE()", +"574bea92": "bonusPhaseOneDeadline()", +"574c339a": "HackerSpaceBarneysToken()", +"574c8776": "addAddressesToRole(address[],string)", +"574cc0fe": "addManyToWhitelist(address[],uint16,uint256)", +"574d6554": "setIPFSHash(string,string)", +"574e9063": "crowdfundPercentOfTokens()", +"574edd28": "updatePropertyData(uint256,string)", +"574f9a81": "setAttr0(uint256)", +"5750644a": "setProviderParameter(bytes32,bytes)", +"5750abfa": "BONUS_TIMES(uint256)", +"5750daa0": "GameToken()", +"57518243": "addToWhitelist(address,address)", +"575185ed": "createGroup()", +"5751892f": "increaseProjectCompleteLevel()", +"57530017": "setReservedTokensWallet(address)", +"57536e64": "GuessTheRandomNumberChallenge()", +"5753a6b2": "construct(bytes32,string,bytes32,address,uint128,uint256,uint64,uint64,uint256)", +"57548f32": "_tokenPurchased(address,address,uint256)", +"5754a042": "attempts()", +"5754aadc": "getEntryByName(bytes32)", +"57553101": "updateDetails(string,string,string)", +"5756572e": "Show_the_name_of_Option_B()", +"5757a66a": "_deployBallotChecks(bytes32,uint64)", +"5757dcdf": "getCooldownIndexFromGeneration(uint16)", +"5758537b": "payBonusAffiliate(address,uint256)", +"57593c23": "TokensDelegated(address,uint256,address)", +"57595e2a": "get_previous_global_audit_document(bytes32)", +"57597321": "_findpos(uint256,uint256)", +"57599dff": "curatorAddressOf(uint256)", +"5759e7af": "getMilestonesLength()", +"575a4187": "getClaimableStake()", +"575a7722": "setPOOL_edit_29(string)", +"575ab848": "MatCashToken()", +"575b4071": "currentPeriodEndTimestamp()", +"575b6efe": "EARLY_INVESTORS_SUPPLY_LIMIT()", +"575b8cc8": "kcck256str(string)", +"575cb0f6": "block()", +"575cea6b": "getUserReferrals(address)", +"575d462a": "phase1EndBlock()", +"575dfc4a": "Sale(uint256,uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,string,string,uint8)", +"575eaf98": "fractionalize(address)", +"575ed3de": "ViewGold()", +"575f7832": "InterestFinal(address,address)", +"5760168b": "ElearningCoin(uint256,string,uint8,string)", +"576077e2": "realtransfer(address[],uint256[])", +"57607ddd": "PUBLIC_SALE_END()", +"57611ba3": "offerCollectibleForSaleToAddress(uint256,uint256,uint256,address)", +"57614c2a": "resetLockReleaseTime(address,uint256)", +"576168fc": "partnerAddress()", +"57623d59": "AttachAsset(uint256)", +"5762a880": "standFeeBefore500()", +"5762f25f": "test_1_validShouldBe5()", +"57635dc1": "validate(address[5],address,uint256[12],uint256,bytes,uint256)", +"5763e103": "powercontract()", +"57646d5d": "OkkamiToken()", +"57650592": "getPlayerBackDataForMarketPlaceCards(uint256)", +"57651be6": "replaceUser(address)", +"57652f13": "assingAdminship(address,uint8)", +"5765a796": "addRegistered(address)", +"5765cc2a": "setmessiDevAddress(address)", +"5765dd1a": "MTC(address,address,address,address,address,address,address)", +"57670366": "getTargetReportsPerReporter()", +"576709a2": "finishingWithdrawing()", +"5767b9ab": "retrieveV(uint256)", +"5768bc4a": "_createArmy(string,string,uint256,uint256,uint256)", +"5768fca3": "paymentDestination()", +"57693e9a": "NBB()", +"576b8bba": "SeedMemberCanDraw()", +"576bc138": "NKCToken()", +"576c3de7": "getTier(uint16)", +"576c51bc": "countOfPublicKey()", +"576cecdc": "checkStubs(bytes32,bytes32,address)", +"576cfdd7": "window2EndTime()", +"576d067b": "StageOneDisable()", +"576d1ce1": "internalVerifyCert(bytes32,bytes32,address)", +"576d4e13": "_createLinglongCat(uint256,uint256,uint256,uint256,address)", +"576e6d4e": "_buyXaddr(address,uint256,bytes32)", +"576eac66": "setFundingGoal(uint256)", +"576f35e3": "setBatchSize(uint256)", +"576f7e31": "getApprovedBuyerMappingCount(address)", +"576f9cba": "isInDirectory(address)", +"577000a3": "onlyPartnersOrAdmin(address)", +"57712f37": "CappedBurnToken(uint256)", +"577131ac": "bankrupt(address[])", +"57717090": "transferWinnings(uint256,address)", +"5771d6e4": "readMessage(string)", +"5772437f": "unfreezeOf(address)", +"57727a04": "ZZCoinToken()", +"5772ae70": "setLoanManager(address)", +"5773faf9": "modifyVariable(address,uint256,uint256,uint256,uint256)", +"5774ce4d": "sendBonus(address,address,uint256)", +"5775b57e": "totalBuyOrdersOf(address)", +"57764094": "getRate(uint256)", +"5776af28": "shardAward(address,uint256,uint256)", +"57771a23": "del(uint256)", +"5778472a": "getOrder(bytes32)", +"57786394": "feeMake()", +"57788716": "doKeccak256(uint256)", +"577890f6": "presaleFallBackCalled()", +"5778bec2": "Deal()", +"57796e1c": "setVote(uint256,uint256)", +"577a75a0": "CRAWDSALE_END_DAY()", +"577bd336": "progress()", +"577c78f1": "SitcomToken()", +"577ccfe0": "tokenFrozenUntilNotice()", +"577ec5ae": "cookieProductionMultiplier()", +"577ef53d": "SetA(uint256)", +"577f7133": "PHOENIX_CORSAIR()", +"57806705": "addpatient(uint256,uint256,string)", +"5781d9e7": "isRegisteredRetailer(address,address)", +"57820829": "UP_etherWin()", +"578242c3": "CompositeCoinCrowdsale(uint256)", +"57831809": "payoutCount()", +"57835720": "setSetupCompleted()", +"578436a7": "CoinDisplayNetwork()", +"57850fc7": "getPotentialAmount(address)", +"578551aa": "goods(uint32)", +"5785b3f9": "VIRALTOKEN()", +"57861e65": "VVDBCrowdsale(address,address)", +"5786a552": "registerEmployee(address)", +"5786cbdc": "sendBackSurplusEth()", +"5786f28c": "regionsIsPurchased(uint256)", +"5786fd40": "getProductsCount()", +"57875631": "setAccessPolicy(address,address)", +"578799b3": "QRTok()", +"57880042": "bulkPurchageEgg()", +"57880c04": "releaseForce(address,uint256[],uint256[])", +"57885380": "ChannelAudited(uint256)", +"5788a081": "ownerAddressMap(address)", +"57894c1b": "createClone(address)", +"57895ca2": "setManagerContract(address)", +"5789a722": "LocusToken()", +"5789b1cd": "transferAdminMessage(address,address)", +"5789baa5": "isUnlockedBoth(address)", +"578a791d": "setExchangeFeeRate(uint256)", +"578aa665": "_createToken(string,address,uint256)", +"578affb4": "Logger(string,bool)", +"578b08e2": "GPUxToken()", +"578b2dab": "euroTeams(uint256)", +"578b3a56": "normaliseCardIndices(uint256[])", +"578bbdc1": "isSaleContract(address)", +"578bcc20": "reduceDebt(address,address,uint256)", +"578bcf35": "distributed(address)", +"578bcfca": "AddedToHolder(address,uint256,uint8,uint256)", +"578c3485": "iWantToKillMyself()", +"578c6642": "BONUS_BATCH()", +"578cf4a9": "testTemp1()", +"578d52b6": "GetDidPayOut(bytes32)", +"578de482": "OCE()", +"578de8aa": "addressToAsciiString(address,address)", +"578e2f7d": "verifiPost(uint256,bool)", +"578e9825": "burnEscrow(uint256)", +"578ee866": "getCurrentTimeBonusRate()", +"578f9658": "shopTome()", +"578ff67a": "new_hash(bytes32)", +"57901b19": "genRandomArray(uint256,uint256,uint256)", +"57902a75": "rateTier2()", +"579078cf": "TestAnyChain()", +"5790de2c": "ProposalAdded(uint256,address,uint256,bool,string)", +"579140e8": "BITSEACoinERC20Token(uint256,string,string,uint256)", +"579140f4": "tokenInitialized()", +"57915897": "faucet(uint256)", +"57918052": "setPriceIncreasingRatio(uint16)", +"5792b512": "Bettereum()", +"5792e1de": "CheckCarToken()", +"5792e262": "registration_fee()", +"579327fd": "TOTAL_ETHER_HARD_CAP()", +"5793511f": "playersList()", +"57938b2a": "requestCancellationMinimumTime()", +"5793bfdc": "createSDC(address,address,uint256,uint256)", +"579424e7": "HOWLToken()", +"579425b7": "feeBurnerContract()", +"57945e3e": "anyAssetHasChanges()", +"57945ed1": "FindMyFish_EnterBarcode(bytes9)", +"57946897": "Test11()", +"57946a86": "SPEKToken()", +"57950697": "testState()", +"57955f3b": "ExampleIntervalTree()", +"579599bd": "canCreateEdition(uint256,uint8)", +"57978a75": "updateInviteInfo(address,uint8)", +"5797cd52": "Settle(uint32,uint32)", +"57987d38": "PSCN()", +"57988a55": "card_gold_first()", +"57989b4c": "IsCityNameExist(bytes32)", +"5798d5bc": "rSetA(address)", +"579952fc": "transferFromTo(address,address,uint256)", +"579b9499": "estimatePurchasePayment(uint256,uint256)", +"579badf6": "UniversalFunction(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", +"579cd3ca": "conversionFee()", +"579cdf17": "getAdminName(address)", +"579d4f7a": "changeHouseFeePercent(uint256)", +"579d5fba": "debug_hash3Int(uint256)", +"579da090": "needUpdate()", +"579db769": "getIudex(address)", +"579e0b87": "assignAnotherOwner2(address)", +"579f0789": "BNN_ALLOCATION()", +"579f20d8": "submitProxyVote(bytes32[5],bytes)", +"579f61d8": "valueDelete(string)", +"579fc25e": "contractFallback(address,uint256,bytes)", +"579fe761": "vote(uint80,uint80)", +"579fea7d": "setDolRate(uint256)", +"57a0685b": "privateSaleMinEth()", +"57a15c4f": "createOffspring(address,string,uint256,uint256)", +"57a1a58e": "setCycleResetTime(uint256)", +"57a218e6": "WeSource(bytes32)", +"57a27a76": "checkCompletedCrowdsale()", +"57a2e60c": "VoiceCoin()", +"57a373a1": "uintInArray(uint256,uint256,int256,uint256[],uint256)", +"57a533e9": "logPromiseCreated(uint256,address,uint256,uint256)", +"57a756d3": "walletC()", +"57a83f25": "TKRToken()", +"57a858fc": "shares(uint256)", +"57a8c01f": "registerUser(address,uint256,uint256,uint256,uint256)", +"57a967ca": "waitingForClaimTokens()", +"57a96dd0": "proxyTransferWithReference(address,uint256,bytes32,string,address)", +"57a9838a": "Tronerium()", +"57aaafe2": "toggleArtworkVisibility(uint256)", +"57aaf08b": "getAlgosByCreator(address)", +"57abd75d": "_weiToMth(uint256)", +"57acc118": "setForward(address)", +"57ad693b": "MIN_UPDATE(bytes32,uint256)", +"57adc83a": "angelTime()", +"57aeb5c8": "convertToMiniCFT(uint256)", +"57aee888": "_eraseNodeHierarchy(uint256,bytes32[],bytes32)", +"57aeeb25": "becomeSquirrelmaster()", +"57af3eec": "STARTING_HIPSTER()", +"57afb890": "collectRemaining()", +"57b001f9": "unpause(address)", +"57b021f3": "dynamic_profits2(address,address,uint256)", +"57b07cd9": "getReleaseHash(uint256)", +"57b16811": "totalsInfo()", +"57b34be7": "_moveStage()", +"57b394bf": "walletWithdrawal(address,uint256,uint256)", +"57b45386": "removeCode(string)", +"57b473e2": "okamiMinPurchase_()", +"57b543e2": "getOwnersLength()", +"57b69e72": "_kittenContract()", +"57b70510": "parseResult(bytes)", +"57b7247e": "UserWallet(address,address)", +"57b7a0b6": "Paye()", +"57b8e8c3": "devcon2Token()", +"57ba8652": "getRank02()", +"57babe2e": "collectedBcy()", +"57bbf921": "salesaccount()", +"57bcccb6": "revokePermanentApproval(address)", +"57bce8b0": "sendWei()", +"57bcfc09": "HomeChain()", +"57bd2a65": "allocated3Year()", +"57bd4f7b": "getTime1(address)", +"57bf04be": "changeOwnedOwnershipto(address)", +"57bf66d4": "accountForIncrease(uint256,uint256)", +"57bfab93": "getAllABaddress()", +"57c07055": "scheduleCall(address,address,bytes4,bytes32,uint256,uint8,uint256)", +"57c19b4f": "postFreezeDestination()", +"57c1a709": "travelUnitFee()", +"57c1f9e2": "removeDistributor(address)", +"57c1feca": "BonusChanged(uint256,uint256,uint8)", +"57c393fa": "transferSuperuser(address)", +"57c3b376": "updateRandContract(address)", +"57c3f997": "isReserved(address)", +"57c508d3": "IsThisExternal()", +"57c60982": "calcProfit(address)", +"57c67ad1": "RobotTradingIco()", +"57c6c642": "MultiTranser()", +"57c85787": "batchMint(address[],uint256[],uint128[])", +"57c8b724": "addPresetTransfer(address,uint256)", +"57ca94fa": "_addUser(address)", +"57cb2fc4": "getInt8()", +"57cb48c9": "issuerTokenName()", +"57cb4947": "mintRequest(address,uint256,uint256)", +"57cc2d52": "testStoresParentChallenge()", +"57cc5941": "getTileClaimerAndBlockValue(uint16)", +"57ccbe28": "isPreICOPrivateOpened()", +"57ccc80e": "putSmartContractOnSale(bool)", +"57cd23a6": "TeamLockingPeriod24Months()", +"57cd650d": "sealDataStream(address,address,uint256,bytes32,uint256,bytes32)", +"57cdd078": "isIcoInProgress()", +"57cdf799": "createContractItem(string,bytes32)", +"57ce0ec0": "MIN_PRE_ICO_SLOGN_COLLECTED()", +"57cea5c0": "weaponTokenIdToDamageForEncounter(uint256,uint256)", +"57cf9add": "showOwnerContract()", +"57cfd296": "getFurnace(address)", +"57cfeeee": "transfer(address,uint256,bytes32)", +"57cff409": "tpt()", +"57cff437": "getKunsByOwner(address)", +"57d0354b": "NothingToCancel(address)", +"57d083b5": "_evaluateSkill(address,uint8,uint256,uint256,uint256)", +"57d13917": "getCompany(uint256)", +"57d15c6a": "_time()", +"57d17805": "getTokensSold(uint256)", +"57d1c582": "TokenData(address,uint256,address)", +"57d25a0f": "retrieveAssets(address)", +"57d4021b": "nextPayoutWhenPyramidBalanceTotalsApproximately()", +"57d444fd": "detachController()", +"57d4617b": "getAllocatedTokenAddress(address,address,uint256)", +"57d4f398": "unfreezeBalance(address)", +"57d55116": "_safeApprove(address,uint256)", +"57d55367": "publishResult(uint32,string)", +"57d56267": "getModuleCount()", +"57d5927f": "LogOraclizeCall(uint256,bytes32,string,uint256)", +"57d5939c": "IsValidated(string)", +"57d61f3c": "TokensSold(address,uint256)", +"57d62a30": "accountFeeModifiers(address)", +"57d6f5f2": "canLogIn(address)", +"57d70c0b": "getIcoRuleList()", +"57d713d5": "getPendingUserCount()", +"57d775f8": "epochLength()", +"57d786da": "_checkPolicyEnabled(uint8)", +"57d93329": "endCrowdsalePhase3Date()", +"57d9fd41": "orderLastDate()", +"57da1fb2": "isMonsterChampionship()", +"57da9166": "Dodol()", +"57db8024": "adminDeposit(address)", +"57dbefdd": "addExcluded(address,address)", +"57dc2658": "setLastCrowdsale(address)", +"57dc561f": "assignTokenIJK(address,uint256)", +"57dc5d9d": "adminer()", +"57dc9760": "DaoChallenge()", +"57dd2f26": "AntriexToken(uint256,string,string)", +"57dd8366": "jackpotGuaranteed()", +"57ddf217": "gameoverGetYUM(uint256)", +"57de26a4": "read()", +"57df844b": "getTokenTotalSupply()", +"57e07140": "testTransferFromCorrectlyAllowsDelegationOfTokenOwnership()", +"57e0b222": "ERC20Store(address)", +"57e18886": "reserveTokens(address,uint256,uint256,uint256)", +"57e1fae2": "transferChild(address,address,uint256)", +"57e233e2": "hardcapUSD()", +"57e25a79": "PullPaymentCapable()", +"57e2880d": "scheduleTransaction(uint256,uint256)", +"57e49ca8": "safeTransferChild(address,address,uint256)", +"57e4e95d": "burnerChangeable()", +"57e53d4e": "currentStageETHContributions()", +"57e5be05": "current_mul()", +"57e5eea5": "getCurrentBonus()", +"57e60c27": "removeAccountReader(address)", +"57e6a64c": "AddrRewardPlan()", +"57e6a6af": "METS6()", +"57e6c2f4": "isAuthorized()", +"57e71cd7": "setPreIcoHardCap(uint256)", +"57e7afd0": "addIPFSFile(string,uint256,string,bytes32,uint256)", +"57e871e7": "blockNumber()", +"57e8f401": "getUserLandLimit(address)", +"57e984cf": "changeMonthlyRate(bytes32,uint256)", +"57ea563a": "tokensByLtcTx(string)", +"57ea89b6": "Withdraw()", +"57eabab4": "defaultMintingAddress()", +"57eaeddf": "_isContract()", +"57eb3431": "recordPresalePurchase(address,uint256)", +"57eb95a7": "trainSpecial(uint256,uint256,uint256[2])", +"57ebc286": "approve_fixed(address,uint256,uint256)", +"57ebc7a8": "logLargeContribution(address,address,uint256)", +"57ee24af": "getNum(bytes32,uint256)", +"57ef58c1": "canDefrostAdvisors()", +"57f011b6": "destTokensEarlyInvestors()", +"57f032e7": "changeAgent(address)", +"57f04d2b": "updateLedger(uint256,address[],address,uint256[],uint256[])", +"57f1935f": "refundTokens(address,address)", +"57f196fa": "lastBidID()", +"57f1f6ca": "rareStartPrice(uint256)", +"57f232e1": "buyFucks()", +"57f2c6b7": "withdrawOfferForCollectible(uint256,uint256,int256)", +"57f2d763": "LongTerm()", +"57f32591": "changePriceChangeName(uint256)", +"57f46cbe": "collect(uint256[])", +"57f47bf9": "sh_doAgree()", +"57f4d5ec": "processDividends(address,uint256)", +"57f5abe5": "setERC20TotalPromo(uint256,uint256)", +"57f6280e": "FundManager()", +"57f65e24": "setArray(bytes32,string[])", +"57f664ed": "TOKENS_ALLOCATED_TO_PROOF()", +"57f70b21": "WorldToken(uint256,string,uint8,string)", +"57f7b905": "balanceBonusOf(address)", +"57f86b6a": "theRiver()", +"57f91458": "sacredToken()", +"57f94c82": "airDropTokenIssuedTotal()", +"57f9fb11": "internalRefund(address)", +"57fa7044": "_changeCycleValue(uint256,uint256)", +"57faa161": "TokenBonusGiven(address,uint256)", +"57fb25cc": "initialize(address,address,uint256,uint256,address)", +"57fbac06": "setAllowTransferExternal(bool)", +"57fbb9df": "withdrawContractBalance(address)", +"57fc3991": "returnTokens(address,address,uint256)", +"57fc8a20": "custom(address,bytes)", +"57fc990f": "_createAuction(uint256,uint256,uint256,uint256,address)", +"57fdf2b2": "transferrableBalance(address,uint256)", +"57fe5a5f": "FREEREWARDPPOINT()", +"57ffd7cc": "createNewContract(uint256,address,address,address)", +"57ffd863": "deleteHiddenPosition(bytes32)", +"5800827c": "mintExtraTokens(int256,uint256)", +"580101c8": "startingSnailAmount()", +"580215fc": "transferFinal()", +"580225d5": "HomeBridge(uint256,address[])", +"58022de4": "recoverSigner(bytes32,bytes32,bytes32,uint8)", +"58022e3f": "AkbulutTokenICO()", +"5802c695": "setPendingValue(uint256,bool)", +"5802f02d": "SavingsAccount()", +"58047913": "getWrappedContract()", +"58056392": "setLockBalance(address)", +"58057468": "confirmTransferOwner()", +"58057d81": "transferDomainToBuyer(uint64)", +"58058304": "clearFund(uint256)", +"580588a1": "havedAirDrop()", +"58062e66": "VIRTVEN()", +"5806ba15": "InbotToken(string,string,uint8)", +"580709cb": "downTheDrainImmediate()", +"58074d8b": "keyIndex()", +"5807630f": "transferEthToOnwer()", +"5807703d": "getMainGasPrice(bytes)", +"580786cf": "getRoundOpen(uint256)", +"58078a5a": "_checkAndAdd(bytes32,bytes32)", +"58079e7b": "setStartOfPresale(uint256)", +"580822da": "CoinLordToken(address)", +"5808e1c2": "betOnNumber(uint256)", +"5808ee15": "setDefroster(address)", +"5809ea99": "hitPrice()", +"580b72e1": "approveTokens(address,uint256,uint256)", +"580bd977": "distributeFunds(uint8)", +"580bdf3c": "disableBetting_only_Dev()", +"580c0fd8": "COMIKETCOIN()", +"580c2ae9": "numberOfPurchasers()", +"580c5072": "IsPremature(uint256)", +"580cf318": "tokenRemainCap()", +"580e77d4": "startMainSale()", +"580ea491": "PatronageRegistry(address)", +"580efd6b": "totalWageredForAddress(address,address)", +"580f2427": "LeeSungCoin()", +"580f3904": "requestTokens(address)", +"5810291a": "getplayerpool()", +"581191f7": "DNATIXToken()", +"58128969": "cycleStart()", +"5812f78a": "A2UToken()", +"58144fbd": "covmanAddress()", +"58150c8b": "GameRegistry()", +"581515fd": "howManyEtherInWeiToBecomeOwner()", +"5815528c": "setInviterEdge(uint256)", +"581627bc": "ownerWithdrawl(uint256)", +"58163c23": "calcBonus(uint256,bool)", +"5816ba9d": "unFrozen(address)", +"58172da1": "payBankroll()", +"581732dc": "setLev1(uint256)", +"5817465c": "RidgeToken()", +"58178168": "punkIndexToAddress(uint256)", +"581847d6": "changeDeveloperSFTDestinationAddress(address)", +"58189259": "CerradoToken()", +"58189e03": "processExits()", +"5819dde2": "getNumbersFromBytes(bytes3)", +"581a3aea": "ActiveSCO(bool,uint256)", +"581a81c1": "setMinHouse(uint256)", +"581aa8a3": "SRVSKCOIN()", +"581bdd23": "createCampaignAndChannels(address,uint256,string,address[],address[],address[],uint256[],address,string,bytes,uint32[])", +"581c1f47": "isFreeze(address,uint256)", +"581c281c": "getVotingStatus()", +"581c5ae6": "invest(address,uint8)", +"581c71d0": "ifClaimedNowPublic()", +"581ca8bb": "adjustCash(address,int160,string)", +"581d1015": "publicsalesTokenPriceInWei()", +"581d1d04": "devTokensIco3()", +"581d416a": "Paid(uint256)", +"581e69de": "pauseRoundD()", +"581f1125": "returnUnsoldSafeSmall()", +"581f3c50": "createAndOpen(address,address)", +"581fc2ad": "getNextReleaseTimeOf(address,address)", +"581ff6e2": "VerifyPublishedResults(uint16)", +"5820c9ae": "round4()", +"5820dce5": "abbuchen(uint256)", +"5821c831": "AcceleratorStart()", +"58226a76": "isInTime()", +"58229d91": "MasToken()", +"58240d5f": "listPrycto4()", +"582420bb": "calculateMatchPrice_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes)", +"582518ac": "updateclaimableTokens(address,uint16)", +"582527f8": "setNewData(uint256)", +"5825884f": "setOwner2(address)", +"5826344b": "frozenAccount()", +"582681d2": "compareDateTimesForContract(uint256,uint256)", +"582747ba": "PLCCToken()", +"58275869": "ETHReceived()", +"5827834a": "DecenturionToken(uint256)", +"5827b250": "completeInitialization()", +"5827c0c8": "SSE()", +"5828fa47": "ThawTokenTransfers(address,bool)", +"58292a3d": "emission(uint256)", +"58294575": "updateComplianceAddress(address)", +"5829d310": "entries(int256)", +"582a466a": "burnGasAndFree(address,uint256,address,address[],bytes)", +"582a5c83": "HWGCToken()", +"582ab0b4": "setup(uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"582b4019": "updateCheckHourly(bool)", +"582b6add": "isDataSourceCallback()", +"582b6fe4": "crowdsaleUncappedTime()", +"582bd287": "snapshotDelegators(uint256,address)", +"582ca57b": "get_associations()", +"582cca06": "SafeCoin()", +"582d14f8": "updateHpbNodeWithString(address,string,string)", +"582d2d32": "removeFreeRoom()", +"582d6033": "listDda(address,uint256,uint256)", +"582d9008": "willyWantTalkToken()", +"582ee26e": "PendingFees(address)", +"582f5009": "calculateBonusToken(uint256)", +"58306772": "getAmountOfEtherSell(uint256)", +"5830da9c": "Escrow(address,uint256,uint256,bool,address)", +"5830f2ea": "subPrivateSale(uint256)", +"58317685": "getBuy(uint256,address,address)", +"5831e95d": "_burn(address,address,uint256,bytes,bytes)", +"58339a40": "CryptoScalper()", +"58341922": "totalSupplyLocked()", +"5835ac93": "extract(uint256,uint256,uint256)", +"5836746d": "deployStep()", +"58371ccd": "endSaleTime()", +"5837bb11": "ALLOC_FOUNDER()", +"5837e083": "move_history(uint256)", +"58392aaa": "setSibling(address)", +"583ae991": "BitCharityToken()", +"583b4715": "createTitty(uint256,string,uint256,address,string)", +"583ba757": "getrestrictTime(address)", +"583be14e": "isCampaignRegistered(uint256)", +"583c4be9": "PurchaseUnlocked()", +"583d175f": "clientClaim(address,uint64)", +"583d5435": "queryTokensOf(address)", +"583dbacc": "specialKitties(uint256)", +"583dbc09": "updateBonuses(address,bool)", +"583ed080": "End7()", +"583f0ae6": "purchaseMembership(address,address)", +"583f18ff": "totalRemainingTokens()", +"583fe287": "ReussitexCoin()", +"584084d9": "_setString(bytes32,string)", +"5840b0f8": "getPixelData(uint256)", +"5840f4ec": "applyRate(uint256,uint256)", +"58410259": "onBuy(bytes32,uint256,address,uint256,uint256,address,uint256,uint256,address,address,uint256,uint256)", +"58413194": "lmda()", +"5841b9bf": "kingCost()", +"58428322": "grantAccessDeploy(address)", +"58439b9f": "EtheraffleLOTPromo(address,address)", +"5843b811": "_setPendingUpgradeabilityOwner(address)", +"58441a58": "minimumBid(string)", +"58451f97": "totalAccounts()", +"58453569": "initializeSpendLimit(uint256)", +"58453fef": "updateBalance(uint256,uint256)", +"5845d13c": "NamdoToken()", +"58462b36": "contBuy(address,uint256)", +"58463e11": "FeedBackedCall()", +"58469cd1": "generateStakeForDelegationSchemaHash(address,uint256,bytes32,bytes32,uint256[],bytes32,uint256)", +"58476a7a": "mintForSale(address,uint256)", +"58480d41": "setVotesPerProposal(uint256)", +"584855f0": "shopShoes()", +"58487bee": "request(uint8,address,bytes4,uint256,bytes32[])", +"5848a7fa": "getOwnerPotatoes(address)", +"58491ad9": "ICNQCrowdsale(uint256,uint256,uint256,address,uint256,address)", +"58491ecb": "companyPeriodsElapsed()", +"5849cf77": "registerDINWithResolver(address,address)", +"5849f66b": "claim_ico()", +"584af2c3": "approveOwnerTransfer(bytes32)", +"584df977": "LimitPerUserEBC()", +"584e492a": "arr(address,uint256)", +"584e86ad": "suggestUrl(bytes32,bytes32)", +"584ed064": "getBattleCardList(address)", +"5851166c": "endOfRound()", +"58516661": "agents()", +"5851bc4f": "FJH()", +"5851f1e2": "trexdevshop()", +"58525fda": "tokenAllocation()", +"5852f5c1": "buildingToUnits(uint256,uint256)", +"58541aba": "jackpotLastPayout()", +"58543fbd": "getRoomIdxByNameElseLargest(string)", +"5855279e": "whitelistAccounts(address[])", +"58553baa": "cycleInfo()", +"5855da3d": "extractAddress(bytes,uint256)", +"5856db43": "isIcoClosed()", +"585789cd": "startPreDistribution(uint256,uint256,address,address,address)", +"5857b86f": "getAuctionByAuctionId(uint64)", +"5858e7d0": "bigBearCoin()", +"5858ef10": "testErrorNonOwnerCantBreach()", +"58593578": "toss(bool)", +"585a8aba": "getCredit(address,address)", +"585a9385": "icoProceeding()", +"585aa91e": "setSpecialDefense(uint256,uint8)", +"585ac3e8": "icoEnded()", +"585b0f05": "BitcoinMax()", +"585b143a": "getVariableReleasableAmount(address)", +"585b7752": "setOraclizeString(string,string,string,string)", +"585bc25b": "weiRaisedDuringRound(uint8)", +"585bc523": "cooAddManager(address)", +"585bf3e4": "totalLux()", +"585c6fc9": "EtherHealth()", +"585ce259": "VitToken()", +"585d2133": "newDeliverable(uint256)", +"585da351": "setUnitAttackMultiplier(address,address,uint256,uint256,bool)", +"585e1af6": "hard_cap()", +"585eb90c": "withDrawAmount(uint256)", +"585f9b7a": "addVoteOption(uint256,string)", +"58613568": "estimateNeumarkReward(uint256)", +"58619076": "OwnerRemoved(address)", +"58620daf": "RegistryAddress()", +"58623642": "minStartDelay()", +"5862fd31": "ethCrowdsale()", +"5863115e": "parseId(uint256)", +"586360ce": "distributedTokens()", +"5864c56c": "numberOfSuccessfulPings()", +"5865c60c": "getOperator(address)", +"58669d6d": "updateMinimal(uint256)", +"586a2d02": "Anastomos()", +"586a2d79": "_decreaseBalance(address,uint256)", +"586a4be5": "Bitsurge()", +"586a52e0": "GenerationSupply()", +"586a69fa": "getMaximumStackCheck()", +"586a94ba": "MassivelyMultiplayerOnlineGameToken()", +"586ab7a9": "MYSYMBOL()", +"586ac27d": "ProofOfPassiveDividends()", +"586b1c8f": "DetherCore()", +"586ccfa7": "deathData_f11()", +"586cf767": "MintedEthCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"586cf845": "setTierEndTime()", +"586dd1d5": "CCXTokenERC20()", +"586e416e": "updateMaxWei(uint256)", +"586e8283": "deliveredEth()", +"586facb4": "adminSetMarket(address,uint8,uint256)", +"586fc5b5": "lastMint()", +"58708479": "setWinningChance(uint256)", +"587097ab": "test_FiftySixPercent()", +"58712633": "GetCommission()", +"587181d1": "getVaultLock(address)", +"5872282d": "icoReferralBonusInPercentage()", +"5872fe45": "getAccountAddress(address)", +"5873533d": "playGame(uint256)", +"587378a4": "updateQualifiedPartnerCapAmount(address,uint256)", +"5873cbe6": "setFile(string,string,uint256,address)", +"587419d5": "depositStartTime()", +"58750784": "getUniqueKey(string,string,uint32)", +"5875caaf": "objectKnife()", +"587631eb": "PlayX5()", +"587695cd": "tokenGiveAway()", +"58769981": "transferAdminship1(address)", +"5876d2ef": "rwGas()", +"58793050": "Setup()", +"58793ad4": "submitHKGProposal(uint256,string)", +"5879f7ad": "myDroneList(address,uint256)", +"587ac47c": "sendFromAdvisorWallet(address,uint256)", +"587af98d": "GetConfirmRound(bytes32,uint8)", +"587b060e": "_setUpgradeContract(address,address)", +"587c2b8e": "setContributionDates(uint64,uint64)", +"587cde1e": "delegates(address)", +"587d044f": "saveHistory(address,address,uint256,uint32)", +"587d6a20": "ICOactive()", +"587ed791": "getPoolPayPeriodInBlocks(uint256)", +"587f2e50": "putInStud(uint256,uint256,uint256)", +"587fa8dc": "closeHouse()", +"587fae93": "release(uint8,address)", +"58802e24": "BancarCrowdsale()", +"5880b7da": "CAAction(address)", +"588100d4": "DIP_TGE()", +"588198c4": "getBonusByETH(uint256)", +"5882128d": "tradeActive()", +"588268a8": "tokensForCreators()", +"588378c8": "fillGoldSellOrder(address,uint256,uint256)", +"58838594": "anacoContract()", +"5884afe1": "setBetLimit(uint256,uint256)", +"5884f2f5": "GeneralUpdate(uint256,uint256,uint256)", +"5885c626": "allocateTokensToMany(address[],uint256[])", +"58864d04": "Clost(uint256,string,string,uint256)", +"588666e2": "updatePriceManualy(uint256)", +"5886c51e": "setnotice(string,string)", +"58883688": "setAvailableToken()", +"58888b40": "_calculateUnlockedTokens(uint256,uint256,uint256,uint8,uint256)", +"58892f63": "setCrowdsaleStartDate(uint256)", +"588a9db5": "CoreBuyShare(address,address,uint32,uint256,uint32,address,address)", +"588b1578": "contractEth()", +"588b5c7b": "approveExchange(address,address)", +"588bf28b": "addBonusForOneHolder(address,uint256)", +"588bf923": "removeEmailHash(uint256)", +"588c2a6d": "WithdrawReserve(address)", +"588cbbea": "changeSettings(uint64,uint8,uint8,uint8,uint8)", +"588cff4c": "emitPublicCapabilityRemoved(address,bytes4)", +"588d376f": "BoleroToken()", +"588d6a17": "findSemiRandomWinner(uint16)", +"588dadc6": "contestChampion(uint256)", +"588e6b83": "giveTurnToPlay(address)", +"588e730c": "numOfMythical()", +"588ec17f": "minContributionInUsdCents()", +"588ee29b": "debug()", +"588f27e6": "CloudCredit()", +"588f7e12": "lotteryRatio()", +"588f85b3": "IHPM()", +"588f9acc": "toggle(address)", +"58902cc6": "sendFromGftWallet(address,uint256)", +"5891215c": "getAllGas()", +"58919155": "DOGE()", +"5891c8aa": "removeExceptAddress(address,address)", +"58924b81": "getClaim(address,string)", +"589316f6": "level_2_amount()", +"58931f7a": "buyWhiteByName(bytes32)", +"58932f50": "btcTokenBoughtAddress()", +"58933dbc": "totalTokensRemind()", +"5893d481": "rndTmEth_(uint256,uint256)", +"58950108": "BucksCoin()", +"58958be3": "_getTxDataBlockNumber(address,bytes32)", +"58963c85": "setBilateral(bytes32,bool,bool)", +"5896521b": "getCurrentTotalFunders()", +"5896749a": "getAssetRate(address)", +"5896f37f": "getDistritos()", +"5897164a": "ADDR_MAYA_ORG()", +"589737fb": "getOwnPartnerMessage(uint256)", +"5897a1c6": "getValueToInvest()", +"5897a5a0": "setupInitialState()", +"5897e3e4": "splitTheBet(address)", +"5898f402": "compaundIntrest(uint256,bytes5,uint256,uint256)", +"58990372": "changeColorBlue()", +"589a1743": "creatorOf(uint256)", +"589b88bd": "pauseRoundC()", +"589c6beb": "_deleteDefender(uint32,uint8)", +"589d7a3c": "setupViaAuthority(string,string,string,string,address,uint8,bytes32,bytes32,uint256)", +"589dca45": "_emitEmission(bytes32,address,uint256)", +"589e5edd": "InvestorsQty()", +"589e74be": "giveSticker(address,uint256)", +"589f30c7": "FAPFundDeposit5()", +"589fd72a": "vehicleDates()", +"58a0bcdd": "checkPayout(address,uint32)", +"58a122a2": "cancelRequestUnpause()", +"58a191c3": "changeFactorySetupFee(uint256)", +"58a1cabf": "lastPayoutTime()", +"58a2982a": "_deleteSmallestBidder()", +"58a356d0": "sendMoney(uint32)", +"58a383fd": "jsonArrayLength(string,string)", +"58a3d1a1": "getUnclaimedTokenAmount(address,address)", +"58a4903f": "cards()", +"58a50ce8": "setEtherAddress(address)", +"58a53130": "getABaddress(uint256)", +"58a5b0f6": "tournamentStartTime()", +"58a687ec": "finalizeSale()", +"58a70a15": "acceptReturning(uint256)", +"58a74333": "singularDTVFund()", +"58a79319": "GetWildCardOwner(uint256)", +"58a87b69": "withdrawTokenFromCrowdsale(address)", +"58a94e73": "DigitalValleyToken()", +"58aa0f1b": "numOfRare()", +"58aabdf8": "MaxMinersXblock()", +"58aaf48a": "gasForShuffle()", +"58ab010d": "buyParticipationTokens(uint256)", +"58aba00f": "updateManager(address)", +"58acf31b": "findJob(uint256)", +"58ad4673": "LEXTokensContract()", +"58adc9ae": "transferToWalletAfterHalt()", +"58ae6242": "AOIS()", +"58ae8bcf": "voteInMasterKey(address)", +"58af7794": "create_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", +"58b092d7": "addRaiseTapProposal(string,uint256)", +"58b0a2aa": "setPriorityPassContract(address)", +"58b1effb": "bidOfBidder(address,uint256)", +"58b1f29c": "refundBounty(uint256)", +"58b255ea": "fechVoteNumForCandidate(address)", +"58b435fb": "MeritICO()", +"58b4370b": "round(int256)", +"58b4a3c4": "testInitalBalance()", +"58b4c035": "createNewGoBoard(uint256)", +"58b5525d": "depositCharge()", +"58b5e775": "batchAllocateExp(address[],uint256[],uint256[])", +"58b8dc61": "promoCreationPlayerCount()", +"58b92d57": "UserAuthorized(address,address)", +"58b9dcef": "registerVotingPrepareFailure()", +"58bad3eb": "setEarlyParticipantWhitelist(address,bool)", +"58bafdbc": "contribute(address,uint256,uint256,bytes)", +"58bb7d70": "checkEthSold()", +"58bc3456": "addtokensWL(address,uint256,uint256)", +"58bcdb5e": "collectCredits(address)", +"58be0830": "_refSystem(address)", +"58be98dd": "migrateBlockjack()", +"58beec9f": "summBounty()", +"58bf7067": "setBlockedAccount(address,bool)", +"58c0bde0": "feeNewThread()", +"58c16557": "disableTypeById(uint256,uint256)", +"58c1c328": "_validateId(bytes32)", +"58c23767": "setCXLExchangeRate(uint256)", +"58c264f6": "preico_holdersAmountInvestWithBonus()", +"58c31603": "loanCollectionNotification(uint256)", +"58c3b0eb": "updateTokensApproved()", +"58c3b870": "memo()", +"58c3c193": "newBatch(bytes32)", +"58c56f1e": "C20Token()", +"58c60d5e": "gracePeriodCap()", +"58c62b12": "SingularDTVWorkshopFee()", +"58c6bce8": "getCustomBuyerForIndex(address,uint256)", +"58c6f08b": "takeTokensBack()", +"58c721ce": "majorEvents(uint256)", +"58c75136": "currentPremiumSale()", +"58c757ba": "associateWithSig(bytes32,bytes32,address,uint256,uint256,bytes32,bytes32,uint8)", +"58c8c0a7": "getVoteNumberList()", +"58c8ca0c": "_clearInventory(uint256)", +"58c9e484": "buyPoints(uint256)", +"58ca5419": "CheckBest(uint256,address)", +"58cb7323": "MainnetETCSurvey()", +"58cc13f3": "asserts(bool)", +"58cda0ab": "requestData(address,address,uint256)", +"58cdddf9": "getRoundDifficultyBlock(uint32)", +"58ce4b48": "setFundingStartTime(uint256,uint256)", +"58cea888": "getWinOutcome(bytes16)", +"58cf7c71": "unfreezePrice()", +"58cf9570": "transferFeeRate(address)", +"58d0390b": "getCurrentICORoundInfo()", +"58d10aae": "BlackJack()", +"58d162da": "potSplit_()", +"58d168b7": "generatePermutationKey(uint8[4])", +"58d1aebd": "claim(string,string,string,bytes32,bytes)", +"58d213ae": "InToken()", +"58d25b93": "LogSendFunds(address,uint8,uint256)", +"58d2ab45": "numberOfPixels()", +"58d37dc5": "lastMintingAmount()", +"58d38231": "broughtSprites(uint256)", +"58d3b2c8": "babyBornEndVoting(string,uint256)", +"58d3b617": "Notifier(string)", +"58d3ce8a": "thirdExchangeRate()", +"58d40f7e": "existsUserByEmail(bytes32)", +"58d4e051": "YSS(uint256,string,string,uint8,address)", +"58d63255": "GandhiJi()", +"58d6a99e": "CTChinaCoin()", +"58d75180": "ECToken()", +"58d782be": "getLotteryDetails(uint16)", +"58d7bf80": "reserveRate()", +"58d80a8c": "doSetSettings(uint64,uint64,uint256)", +"58d8652e": "addIssue(string)", +"58d8f76f": "getPlayerBet(uint256,uint256,address)", +"58d90108": "COLOR_RED()", +"58d9e758": "DeleteUserByID(uint32)", +"58d9f95d": "VIETNAMTOKENTEST()", +"58d9fa04": "addUser(uint256,address)", +"58da3ca9": "jdecompose(uint256,uint256,uint256)", +"58da9bbc": "getAssetPackData(uint256)", +"58db3258": "removeFromPrivateWhitelist(address)", +"58dc03f9": "TigerCashToken()", +"58dc2a8b": "RESEARCH_AND_DEVELOPMENT_WALLET()", +"58dc8807": "updateMintAuthority(address,int256)", +"58dd0eb1": "propose(address,string,string,string,string,uint256,uint256,uint256,uint256)", +"58dd6f23": "setTokenTransfer(bool)", +"58df0383": "burnFinish()", +"58df8ed8": "adminGetEnabled()", +"58dfb058": "LNCH()", +"58e039bd": "listContractByModTextAndCttName(string,string,uint256,uint256)", +"58e0a9d7": "YanToken()", +"58e1c174": "RTI()", +"58e29e17": "initiateProof()", +"58e2cd76": "watch(address)", +"58e3815c": "BASalesPrice()", +"58e3e914": "devuelveNombreApp(address)", +"58e46275": "calculateTheEndPrice(uint256)", +"58e55365": "marketingBalance()", +"58e59c32": "get_entry(uint256,uint256,uint256)", +"58e5d5a5": "PunkBought(uint256,uint256,address,address)", +"58e61e12": "contribute(uint256[],bool,uint256)", +"58e66522": "CoolTourToken()", +"58e69c5a": "hashimoto(bytes32,bytes8,uint256,uint256[],uint256[],uint256,uint256)", +"58e71b15": "Organization()", +"58e756b6": "NewQ(string,bytes32)", +"58e77a92": "setSelfPretorian(address,address,address)", +"58e85e03": "LogTokensBought(address,uint256)", +"58e868c9": "DisableMember(address)", +"58e879f3": "nextThaw()", +"58e8922b": "payImportTax(address,uint256)", +"58e92fb0": "setFreezeForPEInvestors(uint256,address,uint256)", +"58e9a706": "checkLargeContributionsLock(address,address,uint256)", +"58e9b208": "Controlled()", +"58ea80e5": "setThroneCreationPrice(uint256)", +"58eae004": "awardBuyers()", +"58eafc37": "addVirusDefence(uint256)", +"58ebde43": "generic_holder()", +"58ec63bc": "setAccountMilestone(address,uint8)", +"58ecaa45": "StgThreebonusEnds()", +"58ed766d": "priceETHUSD()", +"58eda67a": "get_Holders(uint256)", +"58edaa9c": "getController(uint256)", +"58edbc84": "mkDelegation(bytes32,bytes32,uint256)", +"58ef82a0": "setMilFold(address)", +"58efa06f": "bytesToBytes5(bytes)", +"58efe3cd": "changeLink(bytes,address)", +"58f0cbc7": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"58f10528": "eggExists(uint256)", +"58f11566": "ReserveAccount()", +"58f1490f": "addTransaction(address,uint256,bytes,bytes,uint256)", +"58f24f3d": "transferFromGate()", +"58f33e98": "isTaker(address)", +"58f35f10": "createT513(uint256,address)", +"58f3a115": "tokenDistribution(address[])", +"58f3da21": "adminGetContractBalance()", +"58f4996f": "verifyIncluded(bytes,bytes32,bytes32)", +"58f4be1e": "getIntention(uint256)", +"58f4f160": "Halo3D()", +"58f5382e": "challenge(string)", +"58f65330": "_checkPixelUnderLeft(uint256)", +"58f693de": "tokenForSP()", +"58f7f6d2": "BNB()", +"58f816bf": "redeployProduct(bytes32)", +"58f8e99e": "Jackypot()", +"58f94f13": "CarParkCoin()", +"58fa67f9": "calculateMintTotal(uint256,uint256,int256)", +"58fa812b": "TRANSFERS_PER_TRANSACTION()", +"58fb9f36": "_addBonus(uint256)", +"58fc0151": "getRequired(address,uint256,bool,uint256)", +"58fd6aec": "register(bytes32,string,string)", +"58fd6fe2": "getBonusMultiplier(uint256)", +"58fd955c": "rateETHUSD()", +"58fd989b": "getLockedStructPulseLockHash(address,address,uint256)", +"58fe54a1": "GetBoilerInfo(address,uint256)", +"58fe8847": "BIRC()", +"58feb4a3": "earlyCommunityAddress()", +"58ff5111": "buyTokenForAddress(address)", +"58ff7613": "RxEALSaleContractExtended()", +"5900477a": "settleCancel(bytes,bytes)", +"59004b28": "checkIfExists(uint256,uint256[],uint256)", +"5900a09c": "addFunder(address,address,uint256,uint256)", +"59011400": "RewardDAO(address,address,address)", +"59015ed5": "getAccountModifiers()", +"59016c79": "getContent()", +"59032232": "setPatch(uint256,uint8,uint8)", +"59032614": "FipsTransfer(bytes20,address,address)", +"5903eff2": "root_10(uint256)", +"5903f01b": "giveEthBankRollAddress()", +"5904941b": "CoinealToken()", +"590528a9": "sellShares(uint256,uint8,uint256,uint256)", +"590589fd": "WithdrawToMember(address,uint256)", +"5905b171": "getNextAssignedRequest(uint256)", +"5905d314": "Added(bytes32)", +"5905e1c5": "askPrice(address)", +"590731b7": "secondarySaleCut()", +"590791f2": "getOwnerBalance()", +"59084ea9": "setWhitelistedWallet(address,bool)", +"5908984b": "foreignPurchase(address,uint256)", +"59092c29": "XtremCoin()", +"5909e897": "buyRate(uint256,uint256)", +"590a1c78": "LogBidFailed(address,uint256,uint256)", +"590a4595": "createNewChain(bytes)", +"590ba734": "getUint(int256)", +"590d431a": "wavesId()", +"590d5a67": "multipleTokenDistribute(uint256)", +"590daaec": "setTokenDeskProxy(address)", +"590def78": "IndonesiaRupiah()", +"590e1ae3": "refund()", +"590efa59": "setContrAddr(address,address)", +"590efee1": "isExec()", +"590f9ece": "getShow(uint256)", +"590fcc5b": "debugVal2()", +"591016bc": "generateId(bytes32,address)", +"591090ee": "ELIXAddressSet()", +"5910a18b": "addEntry(bytes32)", +"5910ce39": "_mint(string,string,uint8,uint256,bool,uint256)", +"591108a5": "setIcoStart(uint256)", +"59111d83": "add32(uint32,uint32)", +"59112e79": "payCow()", +"59117bae": "getRoomID(uint256)", +"59118221": "setTokenData(uint256,bytes32[])", +"59118ff2": "amount4()", +"5911fb9a": "setRate(address,address,uint256)", +"59125397": "indexedDocs(uint256)", +"59137533": "PillowCoin()", +"5913cacc": "unlockBonusDrop(address,uint256)", +"59144baa": "setFundContract(address)", +"591451fe": "setHostingProfitAddress(address)", +"5914589c": "RLC()", +"59151701": "VerifiedUser(bytes32,address)", +"591552da": "currentFee(address)", +"5915589e": "Dataset(address,string,uint256,string)", +"59161e57": "releseToken(address)", +"59167b9d": "setTokenContract(uint256,address,uint8[],bytes32[],bytes32[])", +"59167fcc": "getUserAccountInfo()", +"59169d06": "setBountyTokensPercent(uint256)", +"5916c2c9": "NeuroWire()", +"5916c5fa": "sellEgg(uint256,uint256,uint256,uint16,bool)", +"59179dbd": "createSaleAuction(uint256,uint256,uint256,uint256,uint256,uint256)", +"59187cec": "getEarningAmount()", +"5918bc7f": "addTerms(string,string)", +"5918f00c": "fillOrder(address,address,uint256,address,uint256)", +"5918f348": "hmcAddress()", +"59193981": "token_sale_end_block()", +"59194d0c": "totalEthBalance()", +"59197f51": "ethEt4Rate()", +"59198827": "initiateDocumentVote(string,bytes32)", +"5919896f": "Taracoin()", +"5919978b": "create_safe(address,string,string)", +"591a0d87": "foundersWallet2()", +"591a6ec4": "toBeDistributedFree()", +"591a89b2": "Voted(address,bool,uint256)", +"591b05b1": "domainHtml(bytes32)", +"591b41c6": "Multisend()", +"591beea8": "guardIntervalFinished()", +"591c515f": "append(string,string)", +"591d5236": "getDifference(int256,int256)", +"591d8bd0": "constantFn(uint256)", +"591ead36": "SplitTransfer(address,uint256,uint256)", +"591f36a6": "updatePreICOMaxTokenSupply(uint256)", +"5920375c": "thaw()", +"59208b8a": "userRefundWithoutGuaranteeEther()", +"59214765": "sendBonus(address,uint256)", +"5922b831": "refundPlayers(uint256)", +"592311ed": "freeze(address,address,bool)", +"592341df": "whatsMyJuryNumber(uint256,address)", +"5923c7f9": "maxSaleToken()", +"59242d11": "SmartIndustrialToken()", +"59245ff3": "fundAnswerBounty(bytes32)", +"59249c46": "duper()", +"5924f811": "tier2Reached()", +"592572e2": "getLoanCanceledAmount(bytes32)", +"5925cfe3": "getCCH_edit_7()", +"5926651d": "addBeneficiary(address)", +"592685d5": "getWindowStart(address,address)", +"5926b55a": "setArray(bytes1[],bytes8[],bytes32[],int256[],uint256[],bool[])", +"5926c826": "Mitronex()", +"5926cf13": "setGameId(uint256)", +"59275c84": "minerAddress()", +"59276653": "getTicketCount(address,string)", +"59287ce9": "setPbulicOfferingPrice(uint256,uint256)", +"5928aedc": "setEndStage2(uint256)", +"5928bdc4": "LatiumLocker()", +"5928c7db": "changeDividendWallet(address)", +"5928e80c": "updateNoteTitle(uint64,bytes12)", +"59291e2f": "MinedBlocks()", +"59292ef3": "gasLimitDepositRelay()", +"59296490": "CharityCommonweal(uint256,string,uint8,string)", +"59296e7b": "getCredit()", +"5929b837": "_setRate()", +"592a5f9b": "ValidToken()", +"592a97de": "encodeUInt(uint8,uint256)", +"592af188": "GaonToken()", +"592b5d17": "haltFX()", +"592b700a": "updateRegistrar(address)", +"592b71ab": "isRequestingEscapeTo(uint32,int256,uint32)", +"592bd705": "setowner(address)", +"592c0f09": "onLotteryFinalized(uint32)", +"592c518f": "ADDR_TKG_CHARITY()", +"592d4c7e": "CAD_Omnidollar()", +"592dc0a6": "setAyantDroitEconomique_Compte_2(uint256)", +"592e6f59": "initialise()", +"592ea64f": "LLV_v30_12()", +"592eef5a": "postIdToDonationAmount(address,uint256)", +"592efdab": "presaleWhitelistTokensLimit()", +"59301cb2": "_callRecipient(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"5930a295": "changeBetLimits(uint256,uint256)", +"5931228b": "endTimeDay()", +"59317ea2": "buyImplementation(address,uint64,uint256,uint8,bytes32,bytes32)", +"59318b2c": "unFrozenBalanceByIndex(uint256)", +"59328401": "getPlayerInfo(address)", +"5932c02c": "tradesCount()", +"59330b8e": "hashDetails(uint256,address,uint256,uint8)", +"59354c77": "changeSubcourtJurorFee(uint96,uint256)", +"59355736": "lockedBalanceOf(address)", +"59357045": "getDueTime(uint256)", +"5935fba5": "addContractor(address,uint256)", +"5936259c": "BullsFarmer()", +"59362835": "JPCoin()", +"5936387c": "checkOpposited(uint256,bool)", +"59366245": "bonusInPhase5()", +"5936812b": "changeLockedBalanceManually(address,uint256)", +"5937de14": "STATUS_DEAL_RELEASE()", +"5937e534": "appealSkip()", +"5937e86a": "setTokensQuantity(uint256[],uint248[])", +"5938748e": "changeVotingRules(address,address,uint256,uint256,uint256)", +"59388d78": "decreaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", +"59391a67": "earlyResolve(bytes32,uint256,bytes)", +"5939a84e": "isLawyer(address)", +"5939dd31": "setEthartRevenueReward(uint256)", +"5939ee04": "registrationPeriod()", +"593a5bff": "KUISToken()", +"593a6297": "getPlayerLaff(uint256)", +"593aa283": "setMetadata(uint256,string)", +"593af09f": "assertEq20(bytes20,bytes20)", +"593af4f1": "_fYou(address,uint256,string,string)", +"593af56a": "editionType(uint256)", +"593b4530": "proxyMergeMint(uint256,bytes32,address[])", +"593b79fe": "toBytes(address)", +"593be1f8": "_removeAuctionManager(address)", +"593c993c": "presaleWeiContributed()", +"593cca56": "checkExplore(uint256,uint256)", +"593d280d": "KToken()", +"593ea3e7": "VERDICT()", +"593efdf1": "setCurrentPassportLogic(string)", +"593f3a6c": "AllMarkingsProcessed(address,uint256,uint256,uint256)", +"5940f55c": "setEncryptionPublicKey(string)", +"594151e0": "Dice()", +"5941bb80": "transferFromBatch(address[],uint256[])", +"5941d8d4": "RtbSettlementContract(address,address,address,uint256)", +"5941ff52": "impl_yield7Day()", +"59423a7f": "BuySnail(address)", +"59424b78": "approveArtist(address)", +"594337a9": "investorsLength()", +"5944427b": "getRequestResult(uint256)", +"5944b7d9": "setCCH_edit_1(string)", +"594548d5": "newStakesAllowed()", +"5945793d": "getCorrectedTotalBPOfAddress(address,address)", +"5945841b": "ELIXAddress()", +"5945bdc5": "token2GT()", +"59462295": "WhiteWallToken()", +"5946e7eb": "Tier_Rainmaker_Registration()", +"594733c6": "getInvestorId(address,address)", +"594742da": "forecastOfToken(uint256)", +"59475891": "TransferHash(bytes32,bytes32,uint256)", +"59478411": "modifyProductPrice(bytes32,uint256,uint256)", +"5947cc6a": "level_2_percent()", +"5947d616": "updateAskingPrice(uint256,string)", +"59485790": "_emitPricesUpdated(uint256,uint256)", +"5948f733": "getAddressArray(bytes32)", +"5949a8f7": "notifyDeposit(uint256)", +"5949e525": "fundingUnlockFractionInvert()", +"594aa668": "getCourseList(string)", +"594afcff": "tgrContributedAmount()", +"594b18b5": "_transferToLock(address,uint256,string)", +"594bbe8f": "Corolexcoin()", +"594de857": "getDealsCount()", +"594eda64": "getBackend()", +"594ffb4e": "setReferralFee(uint8)", +"5950cb8c": "setCasinoName(uint16,string,string)", +"5950cee4": "checkProviderSupported(address,address)", +"5950d395": "recallPercent()", +"5951317a": "doFinalizeSale()", +"59514593": "addFreezableAddresses(address[])", +"595210ad": "openDispute(string)", +"5952176e": "removeBusinessOwner(address)", +"5953c806": "setSendCost(uint256)", +"5954c8c5": "manualWithdrawEther()", +"5954ee54": "actualPriceInCents()", +"595539cd": "modexp_naive(bytes,uint256,bytes)", +"5956b853": "soldAddresses(address)", +"5957eb17": "PeterToken()", +"5957ee49": "getProjectUsedTokens()", +"5958188d": "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress(address[],uint256,uint256,address)", +"5958611e": "finishTime()", +"5958621e": "setRewardWallet(address)", +"595882b3": "mintAll()", +"5958978c": "day_blocks()", +"595a161b": "amountOfZeros(uint256,uint256)", +"595a30f1": "RateChanged(uint256)", +"595a4fc2": "recomputeAccountLastAverageBalance(address)", +"595a69e8": "add_address(address,address)", +"595a7273": "QbaseIssued()", +"595aed65": "_getChild(address,uint256,address,uint256)", +"595b1a3e": "getUsersLength()", +"595b35d1": "NUMBER_OF_COUNTRIES()", +"595c3f61": "FactomTalk()", +"595cb7a3": "changePrice(address,bytes32,uint256)", +"595d0392": "transferHoldFrom(address,address,uint256)", +"595d71a5": "MintFinished(uint256)", +"595da94d": "has_owners(uint256)", +"595dcb68": "BIFAToken()", +"595e1e20": "placeToken()", +"595e615f": "betPool(address)", +"595ecbb3": "Int256(uint256)", +"595ee7a4": "MajListVal()", +"595f0e5e": "test_CuratorRules()", +"595f40d6": "getDevelopersFee()", +"5960b74f": "advisorTimelock()", +"59622aa6": "maxAmountForSalePromotion()", +"5962581e": "isInRoundOneState()", +"59626877": "AiToken(uint256)", +"59627b84": "getReduce(uint256,uint256)", +"5962a941": "totalPurchases()", +"5962ad30": "dkSB(string)", +"59633a1c": "removeBeneficiary(address)", +"59647984": "isValid(address,uint256)", +"5965e7c3": "SimpleCrowdsaleBase(address)", +"59667c24": "withdrawRound(uint256)", +"59679b0f": "_implementation()", +"5967dee8": "transferLOT()", +"5968c2a4": "getOrderTokenAllocationStatus(uint256)", +"596925d6": "expByTable(uint8)", +"596939f5": "addAgent(address,uint256)", +"5969549e": "modifyBeneficiary(bytes32,address)", +"59695754": "setMinimumPayout(uint256)", +"5969c0e1": "resetSignature(bytes32)", +"596a072c": "setOraGasLimit(uint32)", +"596a2735": "DICE_RANGE()", +"596aadaf": "transferFromCrowdsaleToUserAdoptionPool()", +"596b975a": "maxFunding()", +"596bda14": "_set9()", +"596c02fb": "assertEq22(bytes22,bytes22,bytes32)", +"596c0531": "bch()", +"596c49bd": "TimeControlled()", +"596c8976": "close(uint256,uint256)", +"596d6f08": "Blizzard(uint256,string,string)", +"596ea3db": "allowTransferTime()", +"596f3473": "applyToBeAReviewer()", +"596fab6c": "calculateLockAmount(uint256)", +"59704013": "setVar(string,string)", +"5970c40a": "addForecast(bytes32,uint256,uint8)", +"59716eed": "lockedEthBalanceOf(address)", +"59724977": "getwin011050(address,uint256)", +"59727e83": "registryTransfer(address,address,bytes32,uint256)", +"5972e062": "deleteNodeGroup(uint256,uint16)", +"5973016b": "Multiven()", +"59748c98": "plain()", +"5974ec50": "founderTokenUnlockPhase3()", +"59756526": "getJobHash(bytes16,address,address,uint256,uint256)", +"59758ebe": "repayLoan(address,uint256,string)", +"5975ce80": "mintApproveReset(address,address)", +"59761fcb": "test(address[5],uint256[5])", +"59764714": "MyDFSToken()", +"59769073": "totalBalancingTokens()", +"5976ddd0": "getScenarioNamesAndEventStatus(bytes32)", +"59770438": "getToken(address)", +"59780224": "joinGameWithInviterIDForAddress(uint256,address,address)", +"59790701": "updateFeeSchedule(uint256,uint256,uint256)", +"59793b3a": "derivativeTokens(uint256)", +"597c255f": "receiveChild(address,uint256,address,uint256)", +"597c69cc": "saveToColdWallet(uint256)", +"597cae8d": "getFeeWindowBurnAmountValue()", +"597d4601": "crowdsaleFinalized()", +"597d5c6e": "BiSaiToken(address,uint256)", +"597d6640": "getFreeFairy()", +"597df768": "buyPixelBlocks(uint256[],uint256[],uint256[],bytes32[])", +"597dfbaf": "confirmNode(uint256)", +"597e1fb5": "closed()", +"597ea5cc": "getUint8FromByte32(int8,bytes32,uint8)", +"597efd85": "UblastiToken(uint256,string,string)", +"597f7c35": "transferTechSupport(address,address)", +"597fef79": "funderBalance_()", +"59802e15": "makeBonus(address[],uint256[])", +"598052a3": "winPooling()", +"598077b9": "ownerPart()", +"5980d0d7": "_crowdSaleSupply()", +"5980e72d": "getSeedPercentageForGameId(uint256)", +"59810024": "VICETOKEN_ICO_IS_A_SCAM()", +"59813a0e": "allowToken(address,address,uint256,bool)", +"5981f187": "bookingBalanceOf(address,address)", +"5982688f": "revenueShareList(address)", +"59828c99": "FLIPPINESSROUNDBONUS()", +"5982a30f": "setFriendsFingersRateForCrowdsale(address,uint256)", +"5982a6bb": "DiipCoin()", +"59830bf4": "LogBidCompleted(bytes32,bytes32,bytes32)", +"5983ae4e": "hasher(address,bytes32,uint256)", +"59841fe9": "newRun(bytes32,address,string)", +"59849d30": "maxCreatorWithdraw()", +"5984d7ad": "buyHeart(address)", +"59852686": "transferEth()", +"5985ac40": "affiliateNetwork()", +"598647f8": "bid(uint256,uint256)", +"59869576": "TestERC20Token(string,string,uint8)", +"5986ce23": "setdteamVaultAddr1(address)", +"5986dbe4": "ccUserCount()", +"5987e370": "canJoin(uint256)", +"5987f859": "setInputs(string,string,string)", +"5988899c": "estimateDaiSaleProceeds(uint256)", +"59890fd2": "mod_product(uint256,uint256,string,string,string,string,string)", +"5989c283": "createChannelERC20(address,uint192)", +"598aa1fc": "checkEndorsement(address,uint256,address)", +"598ab2c9": "supplyRest()", +"598abc9c": "getListTeam(uint256)", +"598ac8f2": "permille(uint256)", +"598adef6": "addDepositor()", +"598af9e7": "allowance(address,address,uint256)", +"598b771d": "IOVContract()", +"598d34b7": "distributeBTR(address[])", +"598d772a": "changeEtherVault(address)", +"598db132": "setProviderIsForRent(uint256,bool)", +"598e3183": "newToken(string,string,uint256,address,uint256)", +"598e728a": "TIXIToken()", +"598e9eeb": "transferir(uint256,address)", +"598f512b": "Token(uint256,string,uint8,string,bool)", +"598f6dec": "reserveTimeLock()", +"5990e665": "NetworkSocietyToken()", +"59912df1": "totalTokensDestroyed()", +"59915fd3": "CheckRefundIsFair()", +"5991c0dd": "TSTEST3()", +"5991db0f": "contains(uint8[],uint8)", +"5991faf5": "contributors_countdownDate(address)", +"59923274": "sendFromBountyWallet(address,uint256)", +"59927044": "teamWallet()", +"5992f2a1": "_createVoter(string)", +"599312ec": "rescueCatHashCheck(bytes32)", +"599362d0": "_setBackgroundValue15(uint256)", +"59939e21": "getApprove(uint8)", +"599466fe": "abortCrowdfund()", +"5994d984": "TRUE()", +"59953744": "createVestingContract()", +"5996228e": "upgradeResistance(uint256)", +"599651f3": "setStartAuctionFee(uint256)", +"59966ae1": "allowClaimer(address[])", +"5996769e": "_getDefaultOperators(bool)", +"59970a08": "OneKeyToken(uint256,string,uint8,string)", +"59974e38": "distributeRewards(uint256)", +"5997ed4c": "DevFee()", +"59988dce": "newQuestioner(address)", +"5998e641": "getStrategyTokenByIndex(uint256,uint256)", +"5999917c": "get_cross_chain_nonce()", +"5999d385": "walletICO()", +"599b3e21": "buytokens2()", +"599b6808": "balanceList(uint256)", +"599c8761": "decodeParamsList(uint256)", +"599db6bd": "unsowed(address)", +"599dc6be": "setItemStoppedStatus(bool)", +"599e2364": "tokenItems(uint256)", +"599efa6b": "refundEscrow(address,uint256)", +"59a02589": "ico_PRICE()", +"59a02652": "miningWarContractAddress()", +"59a0b995": "AiraEtherFunds(address,string,string)", +"59a0e583": "lastBlock_v9()", +"59a131e2": "CrankysLottery()", +"59a23200": "authorizeTransaction(uint256,address)", +"59a29c6f": "no_of_tokens()", +"59a2c86f": "requestPayout(uint256,address,address)", +"59a3e577": "createClaim(address[],uint256,address)", +"59a4669f": "increaseJackpot(string)", +"59a536b0": "presaleWei()", +"59a547b0": "recordCommission(uint256)", +"59a58647": "setMaxCards(uint256)", +"59a591be": "setCrowdsaleTimes(uint256,uint256,uint256)", +"59a5f12d": "player2()", +"59a69426": "setStatuses(address)", +"59a765f9": "sendInvoice(string,string,string,string)", +"59a78c1a": "deathData_v8()", +"59a7b3fe": "hourlyRate()", +"59a7f754": "acquireWildcard(uint16)", +"59a80f0f": "setCurs(uint256)", +"59a83074": "set_participant_num_of_pro_rata_tokens_alloted(address,uint256)", +"59a87bc1": "buy(uint256,uint256,address)", +"59a8b6a3": "OptaToken()", +"59a941a6": "setApp(string,string,string,uint256)", +"59a9a63f": "isVulnerable(uint64,int8)", +"59a9a980": "isCosd(string)", +"59aa80b8": "getTransfer(string,uint256)", +"59aaa456": "tryAltOracles(bytes32,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"59aaaf86": "changeBlocPerEth(uint256)", +"59ab0306": "BuyTickets(uint256)", +"59ab0dd1": "JACKPOT_TOKENS_PERCENT()", +"59ac5b32": "createProject2()", +"59ac5c6d": "_shift(uint8)", +"59ac70ae": "totalTimeRange()", +"59acb42c": "createdAtBlock()", +"59acbcb1": "crownTransfer(address,uint256)", +"59adb2df": "returnUint256(uint256)", +"59adda9b": "checkOwnerFailedToSetTimeOnMeeting()", +"59ae2073": "GameNeedsTick(uint256,address,uint256)", +"59ae340e": "resumeMinting()", +"59ae6e34": "placeImage(uint8,uint8,uint8,uint8,string,string,string)", +"59aef196": "pauseCutoffTime()", +"59af143d": "beBanker()", +"59b09b25": "makeCount()", +"59b0a174": "transferLockUntil(address)", +"59b0d931": "removeBlockList(address)", +"59b112d8": "getServicesForApplication(address)", +"59b119dc": "ComeCoin()", +"59b11d6c": "setBetclose(bool)", +"59b17b43": "getTellerBalance(address)", +"59b25720": "fillUpTo(address[5][],uint256[6][],uint256,bool,uint8[],bytes32[],bytes32[])", +"59b2da20": "Raffled(uint256,address,uint256)", +"59b350fb": "time_of_token_swap_start()", +"59b36e3e": "partnerSaleWei(address)", +"59b373f2": "getExistsStatus(uint256)", +"59b4993c": "userAddressCheck(bytes32)", +"59b4ee89": "addVpf(bytes32,uint256,uint256,uint256,string,uint256,uint256[])", +"59b51bd1": "approveCertification()", +"59b563b5": "addRobot(address)", +"59b56a59": "HYIPToken(address,string,string,uint256,uint256)", +"59b58dba": "createCloneToken(address,uint256,string,string)", +"59b62658": "AddFishByToken(address,uint256)", +"59b6a0c9": "maxCapacity()", +"59b6f377": "transferFromContract(address,uint256,uint256)", +"59b79610": "sendUnsoldTDETokensToPlatform()", +"59b8d74e": "ACasadiAmiciToken()", +"59b910d6": "setStorageAddress(address)", +"59b9510a": "isAddressAllowedInPresale(address)", +"59b95f5a": "buyBlocks(uint8,uint8,uint8,uint8)", +"59b9a192": "buildToken(uint192,uint192,uint160,uint32)", +"59ba1dd5": "_fulfillPreapprovedPayment(address,address,uint256,address)", +"59ba2628": "transferCampaignCreator(address)", +"59ba59f1": "ETHFundDeposit()", +"59badbec": "CheckPhException(bytes32,uint32)", +"59baef40": "setNewController(address)", +"59bb6b5f": "TretanToken()", +"59bb7867": "setTournamentEntranceFeeCut(uint256)", +"59bc3d47": "Agreement()", +"59be5e45": "getTotalSoldTokens()", +"59be7e99": "getDonationAmount()", +"59be9cc0": "devTokensHolder()", +"59bed9ab": "Transacted(address,address,bytes32,address,uint256,bytes)", +"59befd58": "releaseTime2()", +"59bf1abe": "getBlackListStatus(address)", +"59bf5d39": "getReserve()", +"59bf77df": "confirmationCount(bytes32)", +"59bfd388": "setupPeriodForSecondStep(uint256,uint256)", +"59c13403": "FEE_MIN()", +"59c140be": "insertBonus(uint8,uint256,uint256)", +"59c14cf1": "mastery(address)", +"59c19cee": "batchWithdraw(bytes32[])", +"59c21fd8": "initDepth()", +"59c27917": "GenChipLevel_Extra(uint256,uint256,uint256)", +"59c281da": "openFirstRound(uint256,bytes32)", +"59c2aad0": "unitsToSell()", +"59c2af55": "StagedCrowdsale()", +"59c2b584": "reserve_fund()", +"59c2e1ef": "changeEthDefaultBackRate(uint8)", +"59c2edee": "CrowdsaleContribution(address,uint256,uint256)", +"59c33f94": "PriceUpdate(uint256,address)", +"59c39094": "withdrawDate()", +"59c3f3e0": "setPoolContract(address)", +"59c3f7f0": "createWallets(uint256)", +"59c42f75": "unreleasedCount()", +"59c44539": "GotecoinToken()", +"59c4e612": "icoSoftcap()", +"59c55429": "refundBond(uint256)", +"59c634b0": "getContributorAmount()", +"59c656df": "allowRefunds()", +"59c77133": "createNewHodl(uint256)", +"59c7a893": "participantsOf(uint32)", +"59c87d70": "request(bytes32)", +"59c88347": "isEmitting()", +"59c8969e": "withdraw(address,uint256,bytes32[],uint256[],bytes32[],uint256)", +"59c8bf9c": "OrpheusMarinaBangkok()", +"59c8d647": "buy(bytes32,bytes32)", +"59c9e118": "buyAndTransfer(address,address,uint8)", +"59cbf125": "GetETH(address,uint256)", +"59cc334a": "getItem(uint256,uint256)", +"59cc721c": "BONUS_TIER1()", +"59ce0a8f": "RuletkaIo()", +"59ce0bb8": "_saveParams(uint256[])", +"59ceb36f": "last_demurrageable_balance()", +"59cf3173": "Reclaim(uint256)", +"59cf901a": "preIcoTokensDistributed()", +"59cfaf6e": "gameWithdraw(uint256)", +"59d1d43c": "text(bytes32,string)", +"59d20b55": "committedValidators(uint256)", +"59d213fe": "contributePreSale()", +"59d27be8": "endEthGetToken()", +"59d2af39": "testFooSend()", +"59d313de": "MatchResetDeadline(uint256,uint256)", +"59d33d73": "bountyReserveTokens()", +"59d3ce47": "Activate()", +"59d3d57e": "totalUserLost()", +"59d3d632": "verifierAllocation()", +"59d3dad9": "miscNotLocked()", +"59d4447a": "MingToken()", +"59d52e2b": "XmonetaSale()", +"59d5335b": "refPercent()", +"59d55194": "getPet(uint256)", +"59d5d02a": "transferFee(address,address,uint256)", +"59d5dc11": "PhardusNetwork()", +"59d667a5": "bid(address,uint256)", +"59d6b35b": "lastProof()", +"59d7d46f": "doInvest(address,uint256,address)", +"59d89175": "setSellCommissionBps(uint256)", +"59d90c19": "addLockedAmount(uint256)", +"59d96db5": "terminate(uint256,string)", +"59d998e4": "transferHashOwnership(uint256,address)", +"59d9b2b7": "getTokenOwnership()", +"59dac714": "hashTo256(bytes)", +"59db5bac": "VisitCount()", +"59db9eb0": "deallocate(address,uint256)", +"59dc6d5c": "setDollarBalance(address,int160)", +"59dc735c": "getClient()", +"59dd35da": "ICOPrice()", +"59dd7ad4": "batchTransferFroms(address,address[],uint256[])", +"59dd8f34": "NRB_Tokens()", +"59dfdec8": "totalPlayCount()", +"59e026f7": "internalTransfer(address,address,uint256)", +"59e02dd7": "peek()", +"59e05c5f": "delay_pool_drain_block(uint256)", +"59e08fe1": "isSaleOver()", +"59e09fec": "getLockedAmount_dakehus(address)", +"59e0b91a": "LMOSupply()", +"59e0cf23": "setOraclize(address)", +"59e148fc": "getLastOfferId()", +"59e1667d": "testControlCreateWithForeignParentNotInUse()", +"59e20f69": "addJobInvitation(uint256,address,string)", +"59e239af": "donateAsset(address)", +"59e23ccf": "computeBlockPrice(uint256,uint256,uint256)", +"59e2d30e": "testThrowBlobStoreNotRegistered()", +"59e30226": "getTradeOfferSenderItems(uint256)", +"59e33e35": "indexdate()", +"59e3e1ea": "testDivAdd(uint256,uint256,uint256,uint256)", +"59e415d3": "crowdETHTotal()", +"59e4c4ca": "createLover(string,string,string)", +"59e4eec9": "startMarket(uint32,uint256)", +"59e529cc": "extra_bonus()", +"59e54095": "getRefundValue()", +"59e541af": "getTokenInfoMaxPerBlockImbalanceList()", +"59e5d4b5": "hicsToken()", +"59e6800c": "depositToken(address,uint8,uint256)", +"59e777f6": "newHeir(address,uint256)", +"59e86488": "hasteamadjacency(uint16,uint16)", +"59e94862": "getEthToTokenOutputPrice(uint256)", +"59e994ca": "endTimeOfBids()", +"59e99db2": "_mint(bytes32,uint256,bytes32,address)", +"59e9fb1b": "IPFShash(string)", +"59ea2647": "yearTwoMultiplier()", +"59ea287d": "pre()", +"59ea6d80": "setNegativeArray(int256,int256)", +"59eb8224": "trancheCount()", +"59ebb321": "isManagementProxy(uint32,int256,address)", +"59ebbe35": "cancelFinishMintingRequest()", +"59ebeb90": "Open()", +"59ec29fe": "successICO()", +"59eca3e2": "manipulateSecret()", +"59eddf34": "getSchool(uint256,address)", +"59eecbf9": "assert1(bool)", +"59eee5c7": "hosting(uint256)", +"59efcb15": "execute(uint256,bytes)", +"59f02c4d": "getOraclizePolicyId(bytes32)", +"59f121a8": "setCreator()", +"59f1286d": "queryCredit(address)", +"59f47523": "newUserBonusCardTradable()", +"59f4bbd2": "indexPaidAffiliate()", +"59f568b9": "setDefaultNumberJuror(uint16)", +"59f5e0ce": "purchase(string)", +"59f61c74": "nextKey(uint256)", +"59f62cdc": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256)", +"59f69ab6": "enforceWhitelist(bool)", +"59f769a9": "activeBalanceOf(address)", +"59f8714b": "changeableTokenCount()", +"59f96737": "convertMetToEth(uint256,uint256,int256)", +"59f96ae5": "postSellOrder(address,address,uint256,uint256)", +"59f974ce": "checkFundingGoalReached()", +"59f9a58f": "_vouchersInSharedPool(uint16)", +"59f9edd0": "sultantoken()", +"59fa0663": "setWhitelistOut(address,bool)", +"59fa34df": "findCurrentIndex(address)", +"59faf062": "bidPrice(bytes32)", +"59fb34bd": "_createRide(string,bytes7,address,uint256)", +"59fc2ba4": "DRONEXTOKEN()", +"59fd510a": "extraBalanceNeeded(uint256)", +"59fd95ae": "BTCCToken()", +"59fde1e0": "distributeRevenue(uint256)", +"59fe2720": "updatePollDescription(uint256,bytes,uint8)", +"59fe7279": "ADMINISTRATOR()", +"59ff5b55": "getMagicNumber()", +"59ff6473": "redistributeFees(uint256)", +"5a0024ae": "VerifyCheque(string,string)", +"5a0089d3": "getChildContractAddress(uint8)", +"5a012b17": "landsSold()", +"5a0178af": "update(uint256,uint256,bytes32)", +"5a018e01": "RESERVES_STAKE()", +"5a02dcde": "budgetWallet()", +"5a02ec19": "depositVault(uint256)", +"5a0391f2": "BuyForEtherTransaction(address,uint256,uint256,uint256,uint256)", +"5a044e91": "get_difficulty_list()", +"5a04ce5b": "setMinBalance(uint32)", +"5a051c47": "_purchaseLoopFifo(uint256,uint256)", +"5a052dff": "buyPixel(address,uint16,uint24,string)", +"5a055a33": "Enterprise()", +"5a059a44": "composeJingle(address,uint256[5],uint256[5],string,string)", +"5a05fff0": "bountyRewards(address)", +"5a061a7a": "TradexOne(address,address)", +"5a0646e2": "InitAssignCTC()", +"5a06f1e3": "TMEXAddressSet()", +"5a071517": "existPublicKey(address)", +"5a0718d0": "ICOadvisor1()", +"5a0753ac": "devFeeBalance()", +"5a079207": "Hydro()", +"5a083f54": "transferFromCheck(address,address,uint256)", +"5a09f2f4": "setHouseFee(uint256)", +"5a0ae8d5": "emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", +"5a0b7663": "getMaxResponseStates(uint256)", +"5a0ce676": "setParams(uint256,uint256,uint256)", +"5a0d9627": "updatePlayerMask(uint256,uint256,uint256,uint256,uint256)", +"5a0db89e": "test_mul(uint256,uint256)", +"5a0ebf94": "TokensReceived(address,uint256)", +"5a0f385a": "reverseTransfer(address,uint256)", +"5a0f3c40": "_foundationSupply()", +"5a1024d5": "setSinistre(uint256)", +"5a10d868": "Diyflex()", +"5a119ef2": "addIcoAddress(address)", +"5a1230bf": "computeCallKey(address,address,bytes4,bytes32,uint256,uint8,uint256)", +"5a129164": "vestingBeneficiary()", +"5a129e97": "byte32ToString(bytes1[32])", +"5a12b581": "GetUser(string)", +"5a13340f": "GetApplicant(bytes32)", +"5a140df0": "_remove(uint256)", +"5a142887": "grantAccessDeposit(address)", +"5a149f08": "finalizeNextUpgrade()", +"5a15656c": "developerCommissionFee(uint256)", +"5a15c373": "transferByOwner(address,address,uint256)", +"5a17877a": "LCDToken(address,address,address,address,address,address)", +"5a17aa41": "getContentTip(bytes32,address)", +"5a181478": "setPayoutCumulativeInterval(uint256)", +"5a182b8b": "SellLoan(uint256,uint256)", +"5a186c77": "init(address,uint256,uint256,uint256,uint256[],uint256,uint256,uint8)", +"5a18ae3d": "apply(string)", +"5a18f9ff": "isFundingNeeded(address,address)", +"5a1a1b67": "zTransferWinningBets()", +"5a1a8593": "bidBatch(uint256[],address)", +"5a1b0c0b": "LogBidCanceled(uint256)", +"5a1b472c": "getmykeyid(address)", +"5a1b96a2": "FiduxaCoinCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"5a1bdaa1": "deusETH()", +"5a1cc358": "getChannelRank(address,uint256)", +"5a1e0a46": "cancelVote(uint8)", +"5a1e6ca1": "endRound(uint256)", +"5a1e6fc6": "setEmployeeAddress(uint256,address,address)", +"5a1e921b": "isTradeSupported(address,address,uint256)", +"5a1e9c79": "ProofOfKennyCoin()", +"5a1f3c28": "getCollection(uint256)", +"5a1f892c": "addPresaleContributors(address[])", +"5a2056ba": "rejectPayments()", +"5a212e99": "stringandbytes(bytes)", +"5a22d81a": "buyCEO()", +"5a236389": "getFileLoc(uint256)", +"5a237491": "nextWithdrawDayTeam()", +"5a23932b": "cryptaurus()", +"5a2450c3": "EventHub(address)", +"5a24c6a9": "chart_call()", +"5a272403": "SetAdmin(address)", +"5a275879": "toHex(address)", +"5a2791ed": "block24h()", +"5a28340a": "accessOperatingBudget(uint256)", +"5a297cae": "claimApis(address)", +"5a29ee7b": "sendRemaningBalanceToOwner(address)", +"5a2a3039": "setTopWinnerPrizes()", +"5a2a4452": "_addRole(address,string)", +"5a2a553f": "isCollateralWithinMargin(uint256,uint256,uint32)", +"5a2a75a9": "getTranscoderPoolMaxSize()", +"5a2b043c": "updateNextRound()", +"5a2b31d9": "B24Token()", +"5a2b488e": "calculateRefundedEth(uint256,uint256)", +"5a2bcc18": "mintAmount()", +"5a2bf25a": "setAddressValue(bytes32,address)", +"5a2c0f78": "mintMarketMakerApproval(address,address,uint256)", +"5a2de12f": "ChipTreasury()", +"5a2e311b": "capDefault()", +"5a2e4a11": "raisedWithdrawal()", +"5a2e73a2": "usd2Foken(uint256)", +"5a2ee019": "m()", +"5a2f71d4": "setEquipmentTrainingFeeMultiplier(uint256)", +"5a2fe63a": "isInMainSale()", +"5a30b194": "__address0__()", +"5a317cb3": "SHA256HashRegister()", +"5a31ab2f": "PresaleClosed(bool)", +"5a325fb3": "_setPlatformFeeRate(uint128)", +"5a32d070": "trickleDownBonusesReleased()", +"5a3320ff": "isCrowdsaleOpen()", +"5a338506": "airdropToAddresses(address[],uint256)", +"5a34508b": "delistAddress(address)", +"5a34ced1": "disableFundingWallets(address,address)", +"5a353193": "KrakenPriceTicker()", +"5a353f98": "T20coin()", +"5a354e04": "ProxyUser(address)", +"5a35eb7c": "isWinSlot(uint256,uint256)", +"5a36c394": "executeOrder(uint256,address,address,uint256,uint256,uint256,uint256)", +"5a36e0da": "getProjectCreator(uint256)", +"5a36f4f3": "setMintableProperty(uint256,bytes32,bytes32)", +"5a37ae58": "Show_the_name_of_Option_A()", +"5a388a43": "MVM()", +"5a390a5f": "breedingMarket()", +"5a3a05bd": "subRegistrar(bytes32)", +"5a3a6ef8": "TXL()", +"5a3b7e42": "standard()", +"5a3c0287": "claimTokensFromTokenAiNetworkToken(address)", +"5a3c8826": "dynamicCeiling()", +"5a3dd13f": "getScoreTotal()", +"5a3e251f": "halvingPeriod()", +"5a3f2672": "tokensOf(address)", +"5a3f88f0": "changeGeneration(uint40,uint16)", +"5a4071fe": "lockInternalAccount(address,bool,uint256)", +"5a40bb8f": "setAllergies(bool)", +"5a40ec7e": "verify(uint256,uint256,uint256,string,bytes32[2],bytes,bytes)", +"5a41217e": "underMaintenance()", +"5a414ff6": "getAuthorizedOwners()", +"5a416920": "swapFor(address,uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"5a41d508": "setFlightPrice(uint256)", +"5a42e85f": "SICX()", +"5a4362e5": "closeDown()", +"5a43fa90": "getTokenProposalDetails(uint256)", +"5a4426bc": "proposeLOC(string,address,uint256,string,uint256)", +"5a444139": "canBurnWhiteList()", +"5a446215": "setNameAndSymbol(string,string)", +"5a4528c2": "distributionContract()", +"5a4537b0": "TransferableMultsig(uint256,address[])", +"5a46bb2b": "initChain(bytes,uint32)", +"5a46d3b5": "lockOf(address)", +"5a46f06c": "BANCOR_CONVERTER_FACTORY()", +"5a470aff": "setNthByte(uint256,uint256,uint8)", +"5a470b65": "gamePlayedStatus()", +"5a476e5a": "buyOrderBalances(bytes32)", +"5a481a7e": "ARBITRAGEToken(address)", +"5a4877c0": "timeLockedBeneficiariesDisbursedTo()", +"5a4a04a7": "OWNER_CLAWBACK_DATE()", +"5a4bffb8": "tokenPurchaseAmount(address)", +"5a4c07a0": "fillBlank()", +"5a4c822d": "setAdminPercent(uint256,uint256)", +"5a4cc5da": "Dunhil()", +"5a4d8e59": "getBAU2Length(bytes32,address)", +"5a4ded51": "tokenBuyCalc(uint256)", +"5a4e69f0": "KyberContirbutorWhitelistOptimized()", +"5a4fc9c5": "lookup(int256)", +"5a500066": "WSXToken()", +"5a5132be": "ambix()", +"5a51d1df": "sendReward(uint256[])", +"5a520f8b": "buyDragon(uint256,uint256,bool)", +"5a525491": "safeIndexOfTaskId(uint256)", +"5a527afb": "testFooApprove(uint256)", +"5a52da30": "didVoteForName(address,string)", +"5a52ecf6": "getSignedConfiguration()", +"5a531015": "getLotteryAtIndex(uint256)", +"5a5383ac": "canExitPool()", +"5a53fe20": "multiApprove(uint256[])", +"5a543683": "BuyerLotteryTimes(address)", +"5a54cd46": "proceedEtherDeals(uint256)", +"5a54e755": "hashMachine()", +"5a55c1f0": "getVote(uint256)", +"5a5638dc": "policyTokenBalanceFromEther()", +"5a56a31c": "FeeApplied(string,address,uint256)", +"5a57a901": "VIPSToken()", +"5a5804b3": "getAllocation(uint256)", +"5a589fc9": "authUser(string)", +"5a58cd4c": "deleteContract()", +"5a591a4e": "promotionDataRecord(address,uint256)", +"5a592380": "vestingPlans(uint256)", +"5a593a6e": "totalreleaseblances()", +"5a596aa4": "CheckBalance(address,address)", +"5a5a433b": "checkHash(uint256,uint256,uint256)", +"5a5b32b7": "_setHatValue10(uint256)", +"5a5c8068": "oraclize_setNetworkAuto()", +"5a5d096c": "isOwner(uint256,address)", +"5a5d3350": "KKToken()", +"5a5ddcf6": "startStopICO(bool)", +"5a5e0024": "SecondEtherLimit()", +"5a5e0074": "etherForOwner()", +"5a5e861e": "currentPayment()", +"5a5ebebf": "withdrawRent(address)", +"5a5ec54a": "neglectOwner()", +"5a609b96": "investorsIter()", +"5a61c40a": "setwithtoken(address)", +"5a625393": "ValueTokenBase(uint256,string,string,uint8)", +"5a628525": "reveal(address,bytes32)", +"5a628e17": "getWishIdxAt(address,uint256)", +"5a63cba0": "checkSaleLimit(uint256)", +"5a63feb8": "__targetExchangeAndSpendCallback(address,uint256)", +"5a648bc5": "WithdrawAll()", +"5a64ad95": "mintingFee()", +"5a64b786": "deposit_dividends()", +"5a650f45": "numBountyCredits()", +"5a6535fc": "call(bytes)", +"5a657452": "COD()", +"5a658f6b": "directorNode()", +"5a65f004": "isSynthesizeAllowed()", +"5a67a20d": "endingPrice()", +"5a67f389": "timeGone(uint256)", +"5a6814ec": "thisisfine()", +"5a686699": "post(uint128,uint32,address)", +"5a69fe0e": "TokenERC20(address)", +"5a6ad1e1": "multivestBuy(address,uint8,bytes32,bytes32)", +"5a6af33b": "subtrBalance(address,uint256)", +"5a6b26ba": "withdrawal(address,uint256)", +"5a6b3a79": "assignBounty(address,uint256)", +"5a6c6408": "updatePolicy(bytes32,address,uint32,uint32,uint256,uint256,bool)", +"5a6c787e": "updateWithMPO()", +"5a6cd237": "latestTokenBalance()", +"5a6d663c": "notifyTransfer(address,address,uint256)", +"5a6dad3c": "setFreelancerParams(uint256,uint256)", +"5a6e8980": "editusetaddress(uint256,string)", +"5a6f7aef": "tweakUpgrading()", +"5a703223": "GetToken(address,uint256)", +"5a70686a": "mintChip(bytes32)", +"5a70fe72": "GetInvestedAmount()", +"5a71be21": "ethEur()", +"5a732dd5": "CCPayoutArb()", +"5a74a715": "setWeiForMcr(uint256)", +"5a74dee5": "multiAccessRemoveOwnerD(address,address)", +"5a7511d0": "put(uint256,string)", +"5a753c6e": "getWarlordDistributedRandom(uint256)", +"5a75aa1c": "ChangeRate(uint256)", +"5a75b8d5": "currentHodlerId()", +"5a764631": "setSkillName(uint256,bytes32)", +"5a766620": "neglectGuess(int256)", +"5a768e4a": "ECONOMY_BOOST_TRADE()", +"5a769366": "sadf(address)", +"5a76e73e": "getNoOfTokens(uint256,uint256)", +"5a778cf9": "batchPresale(address[],uint256[])", +"5a78897b": "setFunctionSixPrice(uint256)", +"5a7a4c1e": "_applyPct(uint256,uint256)", +"5a7a8850": "rollWithSeed(bytes32)", +"5a7adf7f": "preSale()", +"5a7b4097": "fundBalanceOf(address,address)", +"5a7b57f2": "MadoffCoin()", +"5a7cb38f": "tokenTransferAddress()", +"5a7da6b5": "burnUpdateTokenFrom(address,uint256)", +"5a7db533": "getRef(address)", +"5a803611": "addDealerForSender(string)", +"5a81018a": "getClientCount()", +"5a811766": "replaceAdmin(address,address)", +"5a813fd5": "test_insert_findWithHintPrevAtPosition(int256)", +"5a8194d2": "getVersionIndex(bytes32,bytes32,bytes32)", +"5a81b5b9": "collectMegaJackpot(uint256)", +"5a825cbb": "getPayment(uint256,uint256)", +"5a851ffb": "calculateDiceWinner(bytes32,bytes32,uint256)", +"5a857565": "buyTokensInternal(address,uint256)", +"5a85d2fa": "playerSignUp(address)", +"5a861838": "addHpbNodeBatch(address[],bytes32[],bytes32[])", +"5a8654ad": "End6()", +"5a86c914": "getRateIcoWithBonusByDate(uint256)", +"5a87053e": "privateBonus()", +"5a87c380": "getRewardListLength()", +"5a8830e2": "partial_refund_my_ether()", +"5a88b15f": "Halo3DShrimpFarmer(address)", +"5a89b376": "contractDecimalsUpdate(uint256,bool)", +"5a8ac02d": "second()", +"5a8b1a9f": "upgradeTo(string,address)", +"5a8b55e2": "IsWildCardCreatedForCategory(string)", +"5a8bbba9": "createNewSecret(string,bytes32,bool)", +"5a8bbee1": "Group_4()", +"5a8cadb1": "migrateAll(address)", +"5a8cf571": "changeControlWallet(address)", +"5a8d580e": "forceNSFW(uint256)", +"5a8d6cea": "transferUnsoldIcoTokens()", +"5a8dd79f": "getDesignatedCaller(address,uint256)", +"5a8e9d66": "settle(address,uint32)", +"5a8ef28a": "GBP(uint256)", +"5a90a49e": "exemptFromFees(address)", +"5a9156f0": "LogAddUser(address)", +"5a91e5e9": "removeFabric(address,address)", +"5a93bf71": "delReferral(address,address)", +"5a93cc8f": "addBonus(address,uint256)", +"5a93f1a1": "_deleteCompany(bytes32)", +"5a9448e2": "multisigFunds()", +"5a94cd0c": "requestChangeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", +"5a95edd9": "OTHERCRUISER_FTL_SPEED()", +"5a960216": "ethUsd()", +"5a969f94": "InternationalModelChain()", +"5a975128": "minGamble()", +"5a979a5c": "LockContractOwner(address)", +"5a97b84a": "finishUserDistribution()", +"5a983451": "totalTokenMintedAngel()", +"5a992188": "getUserBet(uint256,uint256)", +"5a99719e": "getMaster()", +"5a998a09": "totalRoyalty()", +"5a99b525": "payoutRoyalties()", +"5a99d123": "unsetNotaio(address)", +"5a9a49c7": "verify(bytes32[],bytes32,bytes32)", +"5a9aa592": "currentWallet()", +"5a9b0b89": "getInfo()", +"5a9bb087": "claimContractTokens(address)", +"5a9c0a49": "setBasePrice(uint256[20],uint256,uint256,uint256,uint256)", +"5a9c2724": "create(string,string,address)", +"5a9c3ee4": "mainSaleDeadline()", +"5a9c84f3": "maximumTokensForSecond()", +"5a9cfac8": "hasPosts()", +"5a9d27dc": "createReleaseTokenAuction(string,uint256,uint256,uint256)", +"5a9d5c3c": "PCPP()", +"5a9e03ca": "isIssuedBefore(bytes32,uint256)", +"5a9e426b": "refundMe()", +"5a9e75a2": "maxBorrowAmount(address)", +"5a9e91df": "zlotsJackpot()", +"5a9f2def": "scheduleCall(bytes4,bytes,uint256,uint256)", +"5a9f97d1": "currentSaleDay()", +"5a9ffc35": "circulatingFame()", +"5aa00cc4": "_emitJobCanceled(uint256)", +"5aa037dc": "purchasedTokenBalanceOf(address)", +"5aa1eb4c": "createAdjudicator()", +"5aa23a52": "sendRewardBILL(address,uint256)", +"5aa3952a": "GERCoinCrowdsale(uint256,uint256,uint256,address)", +"5aa3d2b0": "purchasedAmountBy(address)", +"5aa4470f": "setLogicContract(address)", +"5aa451e9": "updateOfferingReputation(address,uint8)", +"5aa4c8a9": "addToMap(uint256,uint256)", +"5aa5b9d1": "LogPersonNew(address,uint256,uint256)", +"5aa61ec6": "getExchangeRatesLength()", +"5aa63592": "DeadMansSwitch(address,address,uint256)", +"5aa68ac0": "getParticipants()", +"5aa6b1f0": "reduceFiatCurrencyRaised(uint256)", +"5aa6cf97": "payout(uint256,uint256)", +"5aa720c3": "linkTaskToUser(address,address)", +"5aa77d3c": "pendingContractOwner()", +"5aa83129": "store(bytes,uint256,uint256,address)", +"5aa86386": "getMinNextBet(string)", +"5aa8a42c": "updateOwners(uint256,address[])", +"5aa8e281": "freezeAccountCoin(address,uint256)", +"5aa94a68": "computeResultVoteExtraInvestFeesRate()", +"5aa97a3b": "agreeNeg(string,uint256)", +"5aa97e16": "BBCPrimeEx()", +"5aa97eeb": "getMarkets(bytes32[],address)", +"5aaa250a": "TokensCappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"5aaac1d1": "fundingMaxCapUSD()", +"5aab1822": "stateEndDate()", +"5aab25b6": "isRedenominated()", +"5aab4ac8": "motd()", +"5aac8aad": "ICO_TokenValue()", +"5aad0450": "addVestingAllocation(address,uint256)", +"5aad507b": "userTotalCredit(address)", +"5aad7c56": "calculatePMAFromFiat(uint256,string)", +"5aae456a": "potatoTotalSupply()", +"5aae843e": "doPreAllocations()", +"5aaec2b1": "isdelegatinglisted(address)", +"5ab01088": "joinPreSale(address,uint256)", +"5ab027b0": "masterAddress2()", +"5ab0e470": "getShortPositionState()", +"5ab14385": "doProxyAccounting(address,uint256,uint256)", +"5ab1a0e2": "JungleScratch()", +"5ab1bd53": "getRegistry()", +"5ab2ff61": "read_u64_array()", +"5ab30d95": "bobMakesEthPayment(bytes32,address,bytes20,uint64)", +"5ab31a60": "drawNumber(uint256,string)", +"5ab35302": "ProofofHumanity()", +"5ab3ae21": "privatesaleTokens()", +"5ab3ded3": "changeDonationWallet(address)", +"5ab3fbc9": "BGB_Token()", +"5ab47550": "firstDayCap()", +"5ab4f162": "getVote(address,address)", +"5ab50913": "_recalculateAirdrop(address)", +"5ab58d64": "totalLockedHavvens_limitedSum()", +"5ab5956e": "startICOStage6()", +"5ab5d07d": "CROWDSALE_MAX_ACES()", +"5ab68072": "carTaxiCrowdsale()", +"5ab6eb7a": "Tabbo()", +"5ab7603a": "multivestBuy(address,address,string)", +"5ab7f1a8": "donatedAmount()", +"5ab81246": "newItem(uint256,string,string)", +"5ab827f6": "claimableRefund()", +"5ab89248": "AAcontributors()", +"5ab92022": "frozenTransfer(address,uint256,uint256,bool)", +"5ab98b8d": "DragonReleaseableToken(address)", +"5ab9bb26": "changeBonus(uint8)", +"5abaaa01": "unicornTokenAddress()", +"5abacc89": "RANGESTART_9()", +"5abb37d6": "cancelGame(address)", +"5abc3339": "create(bytes32,bytes32,bytes32)", +"5abc52d4": "SALE2_RATE()", +"5abcc417": "createCastle(address,uint256,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"5abd7728": "setMinTaskValue(uint256)", +"5abedab2": "getAllTheFunds()", +"5abfafe2": "holdAddress3()", +"5abfc588": "CreatedDebt(uint256,address)", +"5ac04bed": "CreateMUSC(address,uint256)", +"5ac0dc11": "doTimeoutForComplainant(uint256)", +"5ac14935": "test_0_createOpenController_test_methods()", +"5ac1caa0": "_getCurrentRound(uint256)", +"5ac207ff": "totalLossAmount()", +"5ac2523a": "minimalTokens()", +"5ac26ebd": "devuelveTodasEncuestas()", +"5ac31e68": "getOrdersForNotary(address)", +"5ac36d70": "setTeams(address[],uint256[])", +"5ac3835d": "verifyTransferSignature(address,address,uint8,bytes32,bytes32)", +"5ac44089": "setHardCapInCents(uint256)", +"5ac48043": "slice(uint256[],uint256,uint256)", +"5ac49ba1": "CORE_TEAM_TOKENS()", +"5ac5c4f7": "Out(uint256)", +"5ac5ec65": "UsableToken(uint256,string,uint8,string)", +"5ac5f82c": "computeBonus(uint256)", +"5ac72734": "tkt()", +"5ac77ad1": "isLockedOpen()", +"5ac7a8d0": "UTBToken(uint256,string,string)", +"5ac7b9f3": "reapFarm()", +"5ac7d17c": "getMarketIsClosing(uint256)", +"5ac801fe": "setName(bytes32)", +"5ac849d2": "liveBlocksNumber()", +"5ac87d76": "addToWhiteList(address,uint256)", +"5ac942a7": "getIdentifierByIndex(address,uint256)", +"5ac9e90f": "readLib()", +"5aca6153": "setJackpot(uint8[4])", +"5acb053b": "toggleDead()", +"5acb6787": "createRegion(uint256,uint256,uint256,uint256)", +"5acba201": "canOverride(address,address,address,uint256)", +"5acbd8e1": "ProxyStorage(address)", +"5acce36b": "getEndowmentBalance()", +"5ace5128": "_emitBoardClosed(uint256,bool)", +"5ace83d7": "approveWinner()", +"5acee3d6": "getFutureTransLength()", +"5acf061a": "validateContract(address)", +"5acf34df": "check_data(bytes32)", +"5acf36ca": "fwithdrawal(uint256,uint256)", +"5acfefee": "sendProfits()", +"5ad1854b": "advisersPeriodAmount()", +"5ad22eb3": "canonizedPLCR()", +"5ad35ac0": "numberOfTokensAllocated()", +"5ad4997e": "getResult(uint8,uint8)", +"5ad550bc": "testAbsMax()", +"5ad55aa5": "setCurrentSchellingRound(uint256)", +"5ad5ca74": "createXMLYTrade(bool,uint256,uint256)", +"5ad64dc5": "deletePick(uint256)", +"5ad6ba47": "getChronus()", +"5ad701c2": "getTier()", +"5ad74742": "ICO_Contract()", +"5ad7c05c": "getUserRequests()", +"5ad82148": "getUserid(address)", +"5ad871d5": "CrowdWithUs(uint256,string,address,uint256)", +"5ad8803d": "mintAndCall(address,uint256,bytes,bytes)", +"5ad95948": "wmin(uint128,uint128)", +"5ad9ca10": "changeBonus(uint8,uint256,uint256)", +"5ada0f51": "setTkContractAddress(address,address)", +"5ada7bee": "updateVerifier(uint256)", +"5adada87": "getPaymentsHeld(address)", +"5adb5813": "_setTokenURIBase(string)", +"5adb6ddb": "unfreeze(address,address)", +"5adbe6fb": "ComputeMyEgg(address)", +"5adc02ab": "confirmWhitelistAddition(bytes32)", +"5adc0c68": "getAddTokenParameters()", +"5adcba0e": "getEntryStatus(address,uint32)", +"5adcf475": "loikikdidad()", +"5addc540": "forceToken()", +"5addcc8f": "finishFromDutchAuction()", +"5ade3f8f": "NectarChina()", +"5ade7c8a": "getMyChest(address)", +"5ade9c3a": "removePass(bytes32,address)", +"5adf292f": "updateKittenCoinsRemainingToDrop()", +"5adfafdf": "updateRewardPercentageByIndex(uint256,uint256)", +"5adfff91": "_hashTheSecret(bytes32)", +"5ae11d5d": "order(address,uint256,address,uint256,uint256)", +"5ae17907": "getLossCount(address)", +"5ae23da2": "host_claim_earnings(address)", +"5ae23f84": "getTimeRangeInfo()", +"5ae270aa": "GToken()", +"5ae28fc9": "setMaxAge(uint256)", +"5ae46e93": "RaffleDappBook(string,uint256)", +"5ae4c04a": "viewprice()", +"5ae59132": "havvensReceivedForNomins(uint256)", +"5ae5b24f": "eosPizzaSliceSafe()", +"5ae5df8f": "deleteRef(string)", +"5ae61377": "getMaxBusinessesPerCity(uint256)", +"5ae63989": "WaraCoin()", +"5ae7ab32": "revokeKey(address)", +"5ae81492": "canceloffer()", +"5ae82dfd": "ariseWarrior(uint256,address,uint256)", +"5ae8a1e0": "updateUserPolicy(bool,bool,bool,bool)", +"5ae8daea": "getRoundJackPot(uint256)", +"5ae9c4d8": "getLineData2(uint256)", +"5aea5955": "ltc()", +"5aea92f5": "LingYanToken()", +"5aea9905": "BitrustToken(address,address,address,uint256)", +"5aeb45dc": "TetherToken()", +"5aebd1cb": "isRefundable(address)", +"5aebf21a": "getProviderAdmin(address)", +"5aebfd14": "createFile(bytes)", +"5aec11d4": "canUnshelf(string)", +"5aec2247": "balanceOfPreSale(address)", +"5aec57d8": "NewRound(uint256,uint256,uint256)", +"5aec6259": "getUInt(bytes32)", +"5aed37ef": "manualWithdrawEtherAdditionalOnly()", +"5aed4fa0": "safetyCheck(uint256)", +"5aee1bc0": "AirdropBeggarsCommunity()", +"5aee42bc": "createICOToken()", +"5aee9431": "method1()", +"5aeee9f9": "incFightLose(uint256)", +"5aef2447": "getClaim(uint256)", +"5aef447c": "presaleBonusTokens()", +"5aef7de6": "avatar()", +"5aefd89d": "Freezing()", +"5af0649e": "confirmNewNotary(address)", +"5af0dc98": "blockSkills(address,uint256[])", +"5af0e1ae": "MyWillCrowdsale(uint32,uint32,uint256,uint256)", +"5af0f053": "approveMove(address,bool)", +"5af123f4": "bonusRate()", +"5af14603": "GetSetting(uint8,uint8)", +"5af1cf27": "foundersWallet1()", +"5af1e55d": "op1()", +"5af25671": "HugMathou()", +"5af2f821": "getCounterProposals()", +"5af36e3e": "refund(uint256,uint256)", +"5af3741b": "getAddressAnserKeccak256(uint256)", +"5af3d5bf": "CWCfallback(address,uint256,bytes)", +"5af3e9d7": "bonusLOT()", +"5af40b77": "buildPreICOStage()", +"5af4cd99": "canBurnAddress()", +"5af5f7ba": "setWhitelisting(bool)", +"5af6333d": "getGoldInfoSerial(address)", +"5af73f3f": "getMinimalBalance(uint256,address)", +"5af77fff": "Contract()", +"5af82abf": "director()", +"5af86018": "VPE_Token()", +"5af89094": "getPMul()", +"5af95010": "Lenders(address)", +"5af9f68f": "getTxPaymentMCW(bytes32)", +"5af9f9d5": "TheSchmeckle()", +"5afa5036": "isCertified(address)", +"5afa5bb6": "minValue2()", +"5afb408a": "Penchant()", +"5afb540c": "getTokenCount(bytes32,string)", +"5afbfd4f": "getPublicBattlePokemon2()", +"5afc190d": "DrawHouse()", +"5afc250f": "getDad(address)", +"5afc7e59": "issueFrts(address,address,uint256,uint256,uint256,address)", +"5afd7627": "setCrowdsaleCompleted()", +"5afdc02c": "_9_dataSmerti()", +"5afe16ca": "GetProfile(uint256)", +"5afe5207": "setTokenSaleAddress(address)", +"5afe9ee1": "verifySignedBy(bytes32,bytes,address)", +"5afeb106": "Sqrt()", +"5afecaaa": "getAllArtworksByOwner()", +"5aff457f": "createAuctionFromArray(address,uint256[],uint256,uint256)", +"5aff59e3": "addrCanPurchase(address)", +"5aff7e54": "returnBalance(address,bytes32)", +"5affcbb0": "cancelIndexedSaleByAddress(address)", +"5b00763e": "ProofOfTrevonJames2()", +"5b0088fb": "setPlotData(uint256,string,string,string,string)", +"5b01b5b3": "teamEmail()", +"5b01e233": "getyestodayget()", +"5b02b729": "setLockUpPeriod(uint256)", +"5b04cbb5": "current_state()", +"5b04e512": "defaultLockin(address,uint256)", +"5b050e77": "isInGame()", +"5b053c04": "maxPreSale1Token()", +"5b054f9b": "chainStartTime()", +"5b060530": "createToken(string,string,uint256)", +"5b064754": "LogChiSale(address,uint256)", +"5b067cce": "testCreateCostMain()", +"5b06fc49": "HASHPERETH()", +"5b07371e": "getAttackRanking()", +"5b0783f3": "setCapRec(uint256[],uint256[],uint256)", +"5b07d7d6": "_generateGene()", +"5b091f92": "updateID(address,uint256)", +"5b09a518": "process(bytes32,bytes[])", +"5b0a3843": "emergencyWithdrawal()", +"5b0a6c58": "EasyMineIco(address)", +"5b0ad787": "getBonusSetter()", +"5b0b02ec": "deathData_f4()", +"5b0b7cc8": "payday(uint256)", +"5b0c12a1": "DeploymentInfo()", +"5b0cfcd8": "KillContract()", +"5b0d4eff": "mineral()", +"5b0d5b55": "getTankEarning(uint32)", +"5b0d823a": "referalFundBalanceMap(address)", +"5b0dad8e": "bcdcMultisig()", +"5b0e1a2f": "releaseMyTokens()", +"5b0e52b0": "unlockExternalTransfer()", +"5b0e70ff": "RetireHodl(uint256)", +"5b0e8b82": "admin_list()", +"5b0ec73e": "MNCToken()", +"5b0ef4a4": "getEtherTicket()", +"5b0efb03": "MintAndTransfer(address,uint256,bytes32)", +"5b0fc9c3": "setOwner(bytes32,address)", +"5b1052f1": "getCoinBySlotId(uint64)", +"5b10b796": "_removeCapper(address)", +"5b10d05d": "donotDKKDappToken()", +"5b113414": "mul(uint32,uint32)", +"5b11380d": "ExTokeB()", +"5b1214c6": "setCrowdsale(uint256,uint256,uint256)", +"5b1295d2": "LNDToken()", +"5b12f1b6": "getAuthorizeContractIds(uint256,uint256)", +"5b135806": "test_basicWithTwoAssertAfterThrow()", +"5b14f183": "isPaused(address)", +"5b151fd2": "fifty_fifty()", +"5b154394": "GANA()", +"5b15afb6": "isOuvidoriaCadastrada(address)", +"5b16ebb7": "isPool(address)", +"5b174f0b": "EtheremonTransform(address,address,address,address,address)", +"5b17b190": "onLEXpaContract()", +"5b18056b": "contributionCount()", +"5b195526": "getMyCenter()", +"5b195c86": "transfer(address,uint24)", +"5b196dae": "getOuvidoriaNome(address)", +"5b19a8f3": "prossWinOrLoss(uint256)", +"5b1a77fe": "sentTokensToBountyOwner()", +"5b1aa9b1": "eugToken()", +"5b1b5d90": "getTransfer(bytes32,uint256)", +"5b1b9316": "firstRoundCosmosStart()", +"5b1c1625": "prepareClaim(bytes32)", +"5b1c893a": "UBC()", +"5b1cba31": "freezeAddress(address,address,bool)", +"5b1d0d1e": "getOwnerAccessoryCount(address)", +"5b1dac60": "getSharePrice()", +"5b1dadc7": "PRICE_PRESALE_WEEK2()", +"5b1ea858": "signedTransferSig()", +"5b1eca38": "getTotalDevs()", +"5b1fe0cb": "sendGift(uint256,address)", +"5b1fef12": "GetPVPData(address)", +"5b206edb": "initAmount_()", +"5b208f76": "PlayX2()", +"5b209615": "ecrecover1(bytes32,uint8,bytes32,bytes32)", +"5b21a8b0": "NILEX()", +"5b21ba6f": "calculateProfit(uint256)", +"5b21e539": "decline(uint256,bytes32,bytes)", +"5b225526": "permissions(address,bytes32)", +"5b225d25": "getLatestManifestByName(address,bytes32)", +"5b228f88": "CLCToken()", +"5b229869": "getSenderArmyCount()", +"5b2298c8": "getSumAmountOfDisputedDealsProPatient()", +"5b229ae4": "dungeonRequirements(uint256)", +"5b22bbd2": "maxRaiseAmount()", +"5b2329d4": "checkGoalReached(uint256)", +"5b23bf8a": "forcePayout()", +"5b24f87d": "addManyToAllocationList(address[],uint256[])", +"5b250462": "join_private_room(bytes32)", +"5b251342": "KAnsariCoin()", +"5b25c137": "kycVerifiedBonusBps()", +"5b25ed6a": "tokensLimit()", +"5b284ecd": "InsertRank(uint256,uint256,uint256)", +"5b28919c": "getShipType(uint256)", +"5b28ad15": "dna6(uint256)", +"5b290c1d": "continueRedeeming(uint256)", +"5b29f2e4": "icoSold()", +"5b2a0e96": "multiSend(address,address[],uint256)", +"5b2a372d": "setTxDataBlockNumber(bytes32,bytes)", +"5b2aa4ae": "getMatchInfoList01()", +"5b2b0168": "_refundTokensPurchase(address,uint256)", +"5b2b2194": "addRange(address)", +"5b2b345c": "TOKENS_ACCOUNT_MAX()", +"5b2c44e1": "updateWhitelistInternal(address,address,uint8)", +"5b2ccdec": "hirerCancel(bytes16,address,address,uint256,uint256)", +"5b2cdda3": "returnWalletAddress()", +"5b2d2bcf": "set_car_dealer(address)", +"5b2d7ad1": "calculate_shares_and_return(uint256,uint256,uint256,uint256,uint256,uint256)", +"5b2e1eb1": "ETHPonzi()", +"5b2e299c": "Hypercoin()", +"5b2e39e0": "releaseEcosystemJM(address)", +"5b2e9a81": "UpdateSellAgentSiteReg(address)", +"5b2ec3a5": "createInternalAuction(bytes32,bytes32,uint256,uint256,uint256,string)", +"5b2f515b": "artistName()", +"5b2f8752": "claimLoss()", +"5b303e16": "eatUnicorns(uint256)", +"5b30535d": "updateFactorReward()", +"5b30a647": "checkapproval(uint256,address,bool)", +"5b31035d": "getReward(uint64)", +"5b325e94": "AddTransactionAgainstExistingEntity(address,uint256,uint256,string,string)", +"5b329058": "DSGroup(address[],uint256,uint256)", +"5b33233b": "increaseOwnershipTokenCount(address,address)", +"5b34b966": "incrementCounter()", +"5b34f4e2": "newUserAccount(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"5b353cfa": "PMC()", +"5b35f9c9": "rewardsWallet()", +"5b364f3b": "chkend(uint256)", +"5b366096": "changeHDXcontract(address)", +"5b36fea6": "transferToICAPWithReferenceCallGas()", +"5b372532": "press()", +"5b378d39": "ContractorCreated(address,address,address,address)", +"5b379044": "dateTier3()", +"5b37e150": "create(bytes32,bytes)", +"5b387273": "allowWhiteList()", +"5b38863a": "btcRateMax()", +"5b389666": "USDCryptoToken()", +"5b389dbb": "powerUpContract()", +"5b38a8e6": "updateAssets(address,int256)", +"5b3a4895": "totalInvestedWithBonuses()", +"5b3a6f9e": "DomusToken()", +"5b3b136a": "getMyTokens()", +"5b3b20e1": "CLN_PER_ETH()", +"5b3b449f": "incentiveTokensLimit()", +"5b3bab74": "NeCashTokenSale()", +"5b3be4d7": "mintAirDropTokens(uint256,address[])", +"5b3bf07a": "getPrizeNumbers()", +"5b3d386b": "transferAnyCaerusToken(address,uint256)", +"5b3d4b16": "SCUDO()", +"5b3ddbf2": "firstAuctionConcluded()", +"5b3de1c8": "getBankEth(string)", +"5b3ea961": "ChangeSharedExpense(uint256,uint256,uint256)", +"5b3f4d24": "PrelievoProprietario(uint256,uint256)", +"5b405418": "CallSpread()", +"5b4078de": "decodePriceFeed(uint256)", +"5b40a584": "curId()", +"5b40d5dd": "unlockInBatches(address[])", +"5b419a65": "join(bytes32,bytes32)", +"5b42109d": "getNarcoLocation(uint256)", +"5b4246d4": "proportion()", +"5b440596": "getWithdrawValue(address)", +"5b453810": "changeEtherBonuses(uint256,uint256,uint256,uint256,uint256,uint256)", +"5b454832": "declareDefaultAsBorrower(uint256)", +"5b45b999": "setMiniMeToken(address)", +"5b46016e": "KickTheCoinFactory()", +"5b467404": "getCounts(address)", +"5b472771": "level_8_amount()", +"5b475e22": "STARTING_ANTHILL()", +"5b477c53": "updoot(uint256)", +"5b4786ea": "getValusTokenIssuance(uint256,uint256)", +"5b48165f": "lastBlock_v17Hash_uint256()", +"5b482ec1": "disconnectModule()", +"5b485314": "IEFBR14()", +"5b48684e": "optIn()", +"5b48c11b": "regRefcode(bytes32)", +"5b48e66a": "changeCroStatus(address,uint8)", +"5b49ebdf": "GiantWeedKiller()", +"5b4a54a9": "isCrowdsaleOver()", +"5b4b1c0e": "orientation()", +"5b4b73a9": "setData(uint256)", +"5b4be32b": "setSellStatus(bool)", +"5b4c084a": "updateHpbNode(address,bytes32,bytes32)", +"5b4c3543": "options(bytes32)", +"5b4c6994": "setArbitratorI(address)", +"5b4cc249": "newSale(address,uint256,uint256)", +"5b4cc320": "onOwnershipTransfer(address,uint256,bytes)", +"5b4ccc9d": "addParticipants(address[])", +"5b4d20d2": "requireWhitelistedAddress()", +"5b4df1ca": "ROLE_CONTROLLER()", +"5b4ef70b": "eth(uint256)", +"5b4ef819": "increaseNumber()", +"5b4f472a": "tradingStarted()", +"5b4f5feb": "assignCardOwner(address,uint64)", +"5b500996": "bringuPort(address)", +"5b508cf0": "createRegulatorProxy(address)", +"5b511030": "activateSecondPreIco()", +"5b519132": "getInitHash(bytes32)", +"5b51a6d8": "getMintDelegates()", +"5b51acff": "migrationTarget()", +"5b525b2c": "changeItemName(uint256,string)", +"5b528aaf": "KaiKuangChain(uint256,string,string)", +"5b528ba1": "bonusPer(uint256)", +"5b52b9db": "WLMTfinney()", +"5b52c7fb": "GROWTH_SUPPLY()", +"5b530196": "tokensOfkitty(uint32)", +"5b53d291": "advisersTotal()", +"5b5416ca": "unfreezeTimestamp()", +"5b548ab4": "mixAuto(uint256,uint256)", +"5b54f077": "promissoryUnits()", +"5b55169c": "minContribAmount()", +"5b556bf0": "ZeroExHandler(address,address)", +"5b56af1e": "freezeAccountTimeAndValue(address,uint256[],uint256[])", +"5b56be8b": "prevEndTime()", +"5b56d57f": "getGameStartBlock(uint256)", +"5b588f26": "cfoWithdraw(uint256)", +"5b59af9c": "OwnershipAdded(address,address)", +"5b5a9160": "JackCoin()", +"5b5ae956": "Bytes4ToByteArrayWithLength4()", +"5b5aed3a": "identityExists(uint256)", +"5b5b45ef": "privateOfferingExchangeRate()", +"5b5bbb31": "changeSettings(uint64,uint64,uint8,uint8,uint16)", +"5b5c7705": "withdrawPlayer()", +"5b5cf8cf": "PacersvsCavaliers420()", +"5b5d1d88": "TMRToken()", +"5b5d2c8f": "updateValue(bytes32,uint256,uint256)", +"5b5ddb94": "read(bytes,uint256,uint256)", +"5b5e450b": "masterKeyIndex(uint256)", +"5b5e760c": "getTokenWinValue(uint256)", +"5b5e7bbe": "setAssetsOnDeposit(uint256)", +"5b5ecf19": "CryptoSagaArenaRecord(address,uint32,uint8,uint8)", +"5b5f8b88": "transerFrom(address,address,uint256)", +"5b5fa6ba": "ownerTemp()", +"5b60fa6b": "createTeam(uint256,uint256)", +"5b61291c": "aekS()", +"5b621b2c": "_setMintableProperty(uint256,bytes32,bytes32)", +"5b624b6e": "setinfo(string,string,string)", +"5b630d59": "EFH(uint256,string,uint8,string)", +"5b633cf2": "getItemsIdsByTypeAndOwner(string,address)", +"5b63831a": "getMinimumPurchaseVZTLimit()", +"5b6427fc": "nextNumberOfWagersToMinimumTimeout()", +"5b65b9ab": "setFee(uint256,uint256,uint256)", +"5b65da64": "getPhaseSupply(uint256)", +"5b6682aa": "Tom(uint256,string,uint8,string)", +"5b66cc84": "transferLog(address,uint256,string)", +"5b680aa6": "spentAllowance()", +"5b68a49d": "cancelVoteForCandidate(address,uint256)", +"5b68e09b": "appAccounts(uint256)", +"5b68f3a6": "Loggable()", +"5b6a42b8": "setNewMonster(uint256,uint32,address,string,string)", +"5b6a54bc": "adjustTransactionFee(uint256)", +"5b6a9eb4": "minCost()", +"5b6aa3c2": "isMinTokensReached()", +"5b6accb2": "manualBatchTransferToken(uint256[],address[])", +"5b6b431d": "Withdraw(uint256)", +"5b6beeb9": "getHash(string)", +"5b6c508c": "exitAll()", +"5b6ca99a": "setHint(string)", +"5b6e2492": "getDesignatedReporter()", +"5b6e7be2": "updateTokenBalance()", +"5b6edf78": "DISCOUNT_TOKEN_AMOUNT_T1()", +"5b7121f8": "getMinter(uint256)", +"5b714690": "valueBeforeFeesWereReduced(uint256)", +"5b715ae0": "referralProgrammeWallet()", +"5b7214b6": "m_ETHPriceUpperBound()", +"5b72b9fe": "pushId(bytes32)", +"5b72c3b7": "eraFromMokenData(uint256)", +"5b72cdd0": "estimateBalanceOf(address)", +"5b73024a": "opAddr()", +"5b73b332": "extendTge(uint256)", +"5b7450fc": "isOperable(address)", +"5b752d5d": "getjackpot()", +"5b754491": "transferFromTx(address,address,address,uint256)", +"5b75dd8d": "getSubscription(address,address)", +"5b7633d0": "signerAddress()", +"5b764811": "_jMul(uint256,uint256,uint256,uint256)", +"5b766089": "isCreditor()", +"5b766196": "hasWon(address,uint256)", +"5b767e86": "getArbiter(address)", +"5b791420": "isProxyForSender(address,address)", +"5b7991cd": "extensionsCount()", +"5b79b275": "_currencyToToken(address,uint256,bytes)", +"5b79dbe5": "reserveForTeam(address,address,uint256,uint256)", +"5b7a50f7": "setOldToken(address)", +"5b7a78c8": "test1_overlappingIntervalSameNode()", +"5b7ab891": "BAT()", +"5b7b716c": "tgrSettingsMaxStages()", +"5b7b72c1": "createCloneToken(address,uint256,string,uint8,string,bool)", +"5b7baf64": "claimRefund(uint256)", +"5b7c2dad": "getUserPosition(address)", +"5b7c38ad": "getLLV_edit_22()", +"5b7c569a": "trustedServer()", +"5b7ca9c6": "addPrizePool(uint256)", +"5b7d47a9": "betOnColor(bool,bool)", +"5b7d9043": "creditAccount(address,uint256)", +"5b7da338": "_balanceOf(uint256,bytes32)", +"5b7db24d": "addRemoveCountry(string,string,bool)", +"5b7dc56a": "updateLuckyblockSpend(bytes32,address[],uint256[],uint256)", +"5b7eed81": "T1898Token()", +"5b7f415c": "TOKEN_DECIMALS()", +"5b7fc27f": "getInitializParentUniverseValue()", +"5b7fd9b5": "brands(address)", +"5b806645": "badgeCount()", +"5b80f497": "getAvailableIds()", +"5b814e16": "freezing()", +"5b824208": "changeMinimumTimeBeforeUpdate(uint256)", +"5b82d694": "SetClaimFee(uint256,uint256)", +"5b8315e4": "TokenSCADAEntity()", +"5b833f1e": "nextTokenOwner()", +"5b839dd2": "initBonusSystem()", +"5b83b7f1": "investorExists(address)", +"5b84bb27": "MYTOKENNAME()", +"5b850d92": "PollCreated(address,address)", +"5b859394": "PunkBidEntered(uint256,uint256,address)", +"5b859500": "hardcapInEther()", +"5b863b5a": "ZenomeSale(address,address,uint256)", +"5b86914d": "bet_value()", +"5b869e68": "DeviceAddr()", +"5b86ce97": "buyEggWithToken(address)", +"5b86f599": "increaseBalance(address,uint256)", +"5b8710e5": "checkTransferRequirements(address,address,uint256)", +"5b87a2f2": "confirmreward()", +"5b8807d9": "claimReserveTokens()", +"5b88349d": "claimAirdrop()", +"5b889ab8": "ammount()", +"5b8943ff": "addAffiliate(address,address)", +"5b89a48a": "lockEpochsMap(address,uint256)", +"5b8aa811": "setRequiredParticipation(uint256)", +"5b8ad515": "isUtilityHolder(address)", +"5b8b4f91": "refererAllowed(address,address,address)", +"5b8bcb53": "CappedSale(uint256)", +"5b8be30c": "TheCoinSale()", +"5b8c6b58": "RoundBHardCap()", +"5b8d02d7": "payoutAddress()", +"5b8d8807": "setTokenMinAmountSell(address,uint256)", +"5b8e48df": "swypes(address)", +"5b8fa846": "payDividends(string)", +"5b8fb4ae": "EthKing()", +"5b905b6c": "newProposal(string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"5b90ed39": "emitEscrowUpdated(address)", +"5b91aa6b": "underNumber()", +"5b91fd60": "performTheMagicTrick()", +"5b9248aa": "correctResult(int8)", +"5b9283e7": "isInvalidEarlyPurchase(uint256)", +"5b92cdee": "bountyAffiliateWallet()", +"5b92e548": "CreateCBT(address,uint256)", +"5b93c2bc": "getWinnerAddressList()", +"5b940081": "releasableAmount()", +"5b945c0e": "getLableList()", +"5b947f36": "ItasToken()", +"5b94db27": "nominateOwner(address)", +"5b95f65e": "getAddressesByDocHash(bytes)", +"5b9632ca": "minValue1()", +"5b96c1e7": "oracleMasterCopy()", +"5b980628": "collectFunds()", +"5b984ff6": "enableWithdraw()", +"5b9900ce": "getWeiforTokens(uint256,uint256,uint256,uint32)", +"5b99cb2b": "joinGame(uint256,uint256,bytes32)", +"5b99df7f": "transferWithFee(address,address,uint256,address,address,uint256)", +"5b9a4690": "convertToMiniRYC(uint256)", +"5b9af12b": "addValue(uint256)", +"5b9b0609": "maxContribAmount()", +"5b9b44bf": "startDefinedGame(uint256)", +"5b9eb8ab": "CONVERSION_NUMINATOR()", +"5b9f0016": "stakedBalance()", +"5b9f7cbe": "createNode(bytes32,bytes32,bytes32,address)", +"5b9fdc30": "getSecret()", +"5ba05024": "getInsuranceByAddress(address)", +"5ba0cd78": "BitcoinZ()", +"5ba13abf": "createMulti(uint256,address[])", +"5ba17b2d": "NewtonTree()", +"5ba1a1d4": "viewKarmaVotesBySymbol(string,address)", +"5ba2dd22": "conflictRes()", +"5ba32008": "FDKToken()", +"5ba39782": "getCommentAccounts()", +"5ba3e63e": "MultiSigRules(address[])", +"5ba58955": "beneficiaryBalance(address)", +"5ba5b1b2": "setSoldPreSaleTokens(uint256)", +"5ba67330": "SendDivs()", +"5ba6c017": "setTotalSpentPerDay(uint256,uint256)", +"5ba83c0d": "getMEATime()", +"5ba87a4d": "getWithdrawedToken()", +"5ba88490": "privlocatumICO()", +"5ba88c28": "debug2()", +"5ba8c608": "activePoll()", +"5ba8eb42": "getClearance(address,address)", +"5ba91006": "Sports3D()", +"5ba92d7d": "_freeze(address,uint8)", +"5ba9e48e": "nextPriceOf(uint256)", +"5bab1a63": "totalEthxRecieved()", +"5babb758": "testSetUp()", +"5babe01b": "distributedBountyStakes()", +"5bac1e11": "ReclaimBegun()", +"5bad05bd": "hardCancelOrder(uint224)", +"5bad9fa7": "walletOut2()", +"5badbe4c": "requestCount()", +"5badcd08": "TokenFulfillment(address[2],uint256[7],uint8,bytes32[2],uint256)", +"5badf100": "fireOnChanged(bytes32)", +"5bae2120": "test_doubleVotingFor()", +"5bae3f75": "CategoryAdded(uint256,string)", +"5bae4e98": "getOwnerRating()", +"5bae510d": "deposits(uint32)", +"5bae8c36": "isNewParent(address)", +"5bae9ce9": "blacklisted()", +"5baef4f3": "INCREMENT_RATE()", +"5baf039f": "add(address,address,address,address)", +"5baf4a09": "ausgroupTransfer(address,uint256)", +"5bafecf5": "calculateFloatingValue(uint256,uint256,uint256,uint256,uint256,uint256)", +"5bb0fa46": "RESERVE_EXCHANGE_SHARE()", +"5bb18362": "isReadyToBear(uint256)", +"5bb2b102": "registerNameCore(uint256,address,uint256,bytes32,bool,bool,uint8)", +"5bb31436": "transferKnightOwnership(address)", +"5bb3e5f6": "fixNoCallback(bytes32)", +"5bb41203": "test_oneAssert()", +"5bb447a8": "NOTtoken()", +"5bb47808": "setFactory(address)", +"5bb4df3c": "assignFrom(address,address)", +"5bb59815": "claimWarranty(string,uint256,string)", +"5bb5b917": "insureClient(address,address,uint64)", +"5bb5bb86": "dtGetBuildingData(address,uint256)", +"5bb7cf11": "ERC20(address,uint256,string,uint8,string)", +"5bba11bd": "bonusTicketsPercentage()", +"5bba3307": "splTransferFrom(address,address,uint256,uint256)", +"5bba6a7c": "propagateRequest(address,uint256,bytes32,bytes32)", +"5bba7aa5": "_assignBlocks(bytes16,bytes16,uint8,uint8)", +"5bbb7c42": "CPCEFund()", +"5bbdc7c5": "accrueTeamTokens()", +"5bbe66a7": "lastBlock_a15Hash_uint256()", +"5bbe6790": "Electronero()", +"5bbe8a33": "EGYPTTEST()", +"5bbee518": "investmentETH()", +"5bbf9c94": "arbLocked(address)", +"5bbfd0d7": "mintedGBT()", +"5bbfe9b6": "_myGroupHelper()", +"5bc008a0": "getAccessLevel(address)", +"5bc02d5c": "GooGameConfig()", +"5bc07110": "numArticlesPublished()", +"5bc0b4db": "ONESATOSHIToken()", +"5bc22d1b": "getStart(uint256)", +"5bc24dd3": "changeSubcourtAlpha(uint96,uint256)", +"5bc34f71": "currentStep()", +"5bc4e163": "drainRemainingToken(address,uint256)", +"5bc550fe": "mining(bytes)", +"5bc5c1a8": "getRoundDividendPerBBTHelper(uint256)", +"5bc5cf42": "mocatoken()", +"5bc60cfc": "win(uint256)", +"5bc6d41d": "doDisableSellerCancel(bytes16,address,address,uint256,uint16,uint128)", +"5bc6e107": "GetEscrowCreationDate()", +"5bc72460": "alterBannedStatus(address,bool)", +"5bc7285f": "sumICOStage3USD()", +"5bc789d9": "tokenVault()", +"5bc7e259": "updateRelease(uint32,uint32,uint32,bytes,bool)", +"5bc8a672": "setDetachmentTime(uint256)", +"5bc91b2f": "createRound(uint256,uint256,uint256,uint256)", +"5bc97d73": "Purchase(address,uint256,uint256,uint256)", +"5bca7f38": "set_pre_kyc_iconiq_bonus_numerator(address,uint256)", +"5bcabf04": "baseUrl()", +"5bcafcf3": "ProfitByCard(address,uint32)", +"5bcb2fc6": "submit()", +"5bcbc0f9": "PRICE_DIVIDER()", +"5bcc1072": "addressesToChatMessagesLeft(address)", +"5bcc209d": "getTokenAmountForEther(uint256)", +"5bcc29d7": "setDefaultURIStart(string)", +"5bcc437c": "revokePastDelegations()", +"5bcc7928": "saleType()", +"5bcc8198": "tokenCommissionReceiver()", +"5bcd3dba": "ACAToken(uint256,address,address)", +"5bcf6674": "setMinimumAllowedWei(uint256)", +"5bd1b8c5": "countCars()", +"5bd1f067": "OONE()", +"5bd26361": "sentTokensToPartner()", +"5bd2cc9f": "Notified(address,uint256)", +"5bd4349b": "getTotalGames()", +"5bd475fd": "destTokensDevs()", +"5bd479ac": "SoccerBet(string)", +"5bd489e1": "HelperPortion()", +"5bd54fa3": "setCryptoSagaCardSwapContract(address)", +"5bd5e89c": "decreaseArrivalTime(uint256,uint256)", +"5bd674dd": "gallerySeven()", +"5bd74490": "regProxy(address,address)", +"5bd7b9fd": "Rbank()", +"5bd7c609": "getEtherDiceProfit(uint256)", +"5bd7ebc5": "changeMinInvest(uint256)", +"5bd91213": "TransferKO(address,address,uint256)", +"5bd9279c": "placeBuyNowOffer(uint256,uint256)", +"5bd948b1": "useEIP712()", +"5bd9749c": "initialValidators()", +"5bd9abfb": "CreateTestCoin()", +"5bd9e637": "buyLC()", +"5bd9ea2e": "out5Done()", +"5bda1af0": "startCrowd(uint256,uint256,uint256,uint8,uint8)", +"5bda8fa4": "setSecondTime(uint256)", +"5bdaa6dd": "Token_Price()", +"5bdaeba2": "PausableTokenMock(address,uint256)", +"5bdb280f": "RESERVES_SHARE()", +"5bdb9ddf": "changeStepPricesLimits(uint256,uint256,uint256)", +"5bdc3c53": "setImmigrationCtrl(address)", +"5bdcc165": "batchTrasferByValue(address[],uint256[])", +"5bdcd0b0": "lifetimePayouts()", +"5bdf7b4f": "initilSupply()", +"5bdfaaff": "ASIABITSToken(string,uint8,string)", +"5bdff855": "gettotalCardDivs(uint256)", +"5be0497e": "getAdjacentCells(uint8)", +"5be1d5c3": "buyBlueStarEgg(address,uint256,uint16)", +"5be2aca0": "tokenRegistryAddress()", +"5be4d442": "setTrustedContract(address,bool)", +"5be53284": "GlobaleCash()", +"5be54515": "assignBountryToReferals(address,uint256)", +"5be5d9e3": "XdacToken(uint256)", +"5be5e3ec": "castVote(uint256,uint256,uint256)", +"5be60644": "sendcdd(address,uint256,address)", +"5be62401": "createUserWithProxyAndRecovery(address,address,uint8[],uint256,uint256[],uint256[])", +"5be6affc": "CloverCoin(address)", +"5be6d2eb": "exitPot()", +"5be782d1": "WORLDMOBILITY()", +"5be7cc16": "transferAdminship(address)", +"5be7fde8": "releaseAll()", +"5be80e85": "markCompromised()", +"5be89fac": "dAlterPull(uint96)", +"5be989d1": "CRYPTOBITECOIN(uint256,string,string)", +"5bea05b1": "getUSDBtc()", +"5bea0e1c": "calculateDividend(uint256,address)", +"5bea2941": "LYBT3Token(uint256,string,uint8,string)", +"5bea641a": "change_admin_commission(uint256)", +"5beb1d8f": "currentIcoPhaseMinimum()", +"5beb3f61": "WhitelistedStatusUpdated(address,uint256)", +"5bebe2c6": "getData_32()", +"5bebefdc": "checkForInterest(uint256,bool)", +"5bec1496": "ChangeQuota(uint256)", +"5bec9e67": "infinite()", +"5becf24c": "confirmChannel(uint256)", +"5bee29b7": "retrieveData(uint256)", +"5bee29be": "setSalary(uint256,uint256,uint256)", +"5bef1208": "getModuleIDByHash(bytes32)", +"5bef95a2": "setFiscalVerify(uint256,uint256,bytes32)", +"5befbb9b": "calceth(uint256)", +"5bf042e5": "setTradeAddress(address,address)", +"5bf0cb1f": "isTransferAllowedadv()", +"5bf1f2f8": "numberOfAbilitiesSold(uint256)", +"5bf2a4e9": "contains(bytes32,bytes32)", +"5bf339b1": "DogCore()", +"5bf3a315": "isTrustedContract(address)", +"5bf4063d": "minEthValue()", +"5bf47d40": "bntyController()", +"5bf5c29c": "_createHero(uint256,address)", +"5bf5d54c": "currentStage()", +"5bf608b8": "getBuyer(uint256)", +"5bf6e582": "getAllHpbNodesExtByStageNum(uint256)", +"5bf72bb1": "use_test_data()", +"5bf85c28": "CryptomniumChain()", +"5bf8633a": "nftAddress()", +"5bf95e43": "strategicAllocated()", +"5bf9755e": "setUint256(uint256,uint256)", +"5bfb1dab": "EIP20Token(uint256,string,uint8,string)", +"5bfb8ff2": "getRegistration()", +"5bfbbe39": "_transfer_internal(address,address,uint256,bool,bytes)", +"5bfc61c0": "claimPlot(uint256)", +"5bfd1ab8": "unBlockAddress(address)", +"5bfd8efe": "blockSettlementHash(uint64,uint64)", +"5bfdab26": "queryWithdrawed(uint256)", +"5bfdb8b2": "crowdsaleStartingBlock()", +"5bfdc700": "registerData(address,int256,bytes,address)", +"5bff1aa8": "EOSCToken()", +"5bfface4": "setBuyComission(uint256)", +"5c003af9": "TOKEN_WITHDRAWAL_END_DATE()", +"5c004bcc": "sendFrom(address,address,uint256)", +"5c006f75": "changeHoldByAddressIndex(address,uint256,uint256,uint256)", +"5c00ad5e": "ShowPercent(address)", +"5c0133d9": "filled()", +"5c016b91": "ownerDisablePayee(address,address)", +"5c01943a": "bountiesBalance()", +"5c0252fe": "setOnlineTime()", +"5c025e03": "authorizeOperatorByTranche(bytes32,address)", +"5c0286c0": "changeLOT(uint256)", +"5c0305ec": "EUTBToken()", +"5c042d0f": "BiQCrowdFund(address,address,address)", +"5c044b86": "roundThreeTime()", +"5c04e9f8": "firstXRChangeBlock()", +"5c062d6c": "currentDifficulty()", +"5c06d880": "getRateWithoutBonus()", +"5c071492": "hardCapLow()", +"5c073ac4": "basicTransferTest(address)", +"5c0796fd": "emitUserCreated(address,address,address,address,uint8[],uint256,uint256[],uint256[])", +"5c07993b": "investorInterest()", +"5c07ac94": "changeCrowdsaleRate(uint256)", +"5c084a25": "get_pvn_token_balance(address)", +"5c0a8177": "claimOCDividend()", +"5c0a9b8d": "transferToContractAddr(address,uint256)", +"5c0b51fb": "theList(address)", +"5c0ba18e": "BitBoscoin()", +"5c0c3dce": "setUserList(address)", +"5c0cc07a": "TAXChain()", +"5c0e6166": "Bill(address,string,uint8,string,uint256,uint256,uint256,uint256,uint256)", +"5c0e6bc4": "icoTokenPrice()", +"5c0f82b7": "GetIdByAddr(address)", +"5c0f9a3e": "getStrandGenesisBlockHash(uint256)", +"5c0fc34c": "freedomcryptotoken(uint256,string,string)", +"5c0fed8e": "EOBIToken()", +"5c100cc2": "setPreIcoDiscount(uint256)", +"5c1020f9": "addPhenomenon(string,string,string,string,uint8)", +"5c102782": "reward(address,uint256,string)", +"5c10286a": "auctionsEnabled()", +"5c1098c3": "crowdSaleOverTimestamp()", +"5c109a59": "updateStatus(address,address,uint256)", +"5c10b2e8": "contributionsAddress()", +"5c10cab8": "collected_crowd_wei()", +"5c10ec87": "preSaleDurance()", +"5c10fe08": "proofOfWork(uint256)", +"5c12a0e8": "DroneShop()", +"5c12cd4b": "getPlayer(address)", +"5c12f040": "emergencyWithdraw(bool)", +"5c131d70": "burnMax()", +"5c135535": "gooBalanceOf(address)", +"5c1397de": "signup(bytes32)", +"5c13a439": "checkAccount()", +"5c13d06f": "checkLockedToken()", +"5c13e2b5": "end_ICOs()", +"5c142f2b": "freezeAccountWithToken(address,uint256)", +"5c146b80": "_existCaller(address)", +"5c148b47": "calcClaimableTokens()", +"5c1548fb": "getCollateral()", +"5c164624": "decisionOf(bytes32)", +"5c1671a6": "hasSameArrayLength(address[],uint256[])", +"5c16e323": "__executeOrderInputIsValid__(address[4],uint256[8],address,address)", +"5c1796ef": "sponsored(address)", +"5c17f9f4": "approve(address,uint256,bytes)", +"5c19a95c": "delegate(address)", +"5c1b3a68": "setPrvdWallet(address)", +"5c1b3ca1": "getConfigUint(int256,bytes32)", +"5c1b9377": "TestBNB(uint256,string,uint8,string)", +"5c1b94d1": "publicGetRound()", +"5c1bc695": "addSubDivision(address)", +"5c1d2215": "mintTokensLocked(address,uint256)", +"5c1f71af": "setAllowBurns(bool)", +"5c206c6b": "FreeTokensIssued(address,address,uint256)", +"5c206f41": "finalValue()", +"5c207547": "wantsBusiness(bytes32,bytes32,address)", +"5c20ad9e": "multiValueBatchTransfer(address[],uint256[])", +"5c20c1dc": "distributePuppyCoinSmall(address[])", +"5c20eec6": "twentyThirtyTokens()", +"5c221385": "preciowea()", +"5c221816": "burnAccountMoeny(address,uint256)", +"5c222bad": "getAsset()", +"5c22aaae": "setGameTransferFlag(address,bool)", +"5c2323e7": "authorizedToTransfer(address)", +"5c239e58": "createItemSaleMarkets(uint256,uint256)", +"5c23bdf5": "resolve(bytes32)", +"5c23d56f": "checkInbox()", +"5c242c59": "query1(uint256,string,string,uint256)", +"5c243f03": "GetLengthofList()", +"5c251cbf": "releaseStake(address,bytes32,uint256,uint256,uint256,bool)", +"5c253f52": "o_novo_problema(uint256)", +"5c25e903": "_lockNinja(uint256,uint16)", +"5c261556": "initFrozenTokenMap()", +"5c26a007": "IsEnable()", +"5c272fb2": "Unblocked(address)", +"5c27bbf6": "CryptoCompare()", +"5c27cdc3": "mintTeamTokens(uint256)", +"5c28c7e0": "privateSaleList()", +"5c2930ad": "shareholders(address)", +"5c2a8763": "percentageToReinvest(address)", +"5c2b0287": "BOXSToken()", +"5c2b1119": "getTop()", +"5c2b18e9": "VestingFund(address,uint256,uint256,address)", +"5c2bdc9f": "GainCard2(address,uint32)", +"5c2c2005": "issuePrice()", +"5c2c8db7": "withdrawToAddress(address,address)", +"5c2cc46d": "findResNameByAddress(address)", +"5c2ccaba": "GslStandardToken(uint256,string,uint8,string)", +"5c2d0e53": "KUNAsToken()", +"5c2e7a00": "setTokenBurnFeeProp(address,address,uint256)", +"5c2e7a13": "QuestionStore(address)", +"5c2e891c": "ECAP()", +"5c2eb1ef": "honestisFortbackup()", +"5c2ee908": "updateWinners(address[])", +"5c3004da": "getPpls(uint32)", +"5c30be8e": "callOracle(address,uint256)", +"5c314df0": "MINER_STAKE()", +"5c31f93b": "unpublish()", +"5c320516": "changeAmount(uint256)", +"5c32460b": "isAddress(address)", +"5c328e3d": "getMyAcceptance(address,uint256)", +"5c35b4e1": "exchangers(address)", +"5c35f464": "_modAccountBalance(bytes32,uint256)", +"5c361091": "PeerBetting()", +"5c36901c": "isActive(bytes32)", +"5c36a0bb": "collect(int32,int32)", +"5c36b186": "ping()", +"5c36e11c": "identified(address,address,bytes32)", +"5c37a17c": "saySomething(bytes)", +"5c390f82": "tokenEquivalent(uint256,uint256)", +"5c398d86": "_getHash(address,uint256,uint256,uint256,uint256,uint256)", +"5c39b671": "sendOwnerCommission()", +"5c39c1ab": "collectedAddressesCount()", +"5c39ec58": "addClaim(address,uint256,uint256,bytes,bytes,string)", +"5c3a4c3d": "startRick()", +"5c3c8c87": "putHere()", +"5c3cd827": "allOfferingSupply()", +"5c3cdec8": "getTotalFeeStake()", +"5c3d005d": "demote(address)", +"5c3d6a7d": "setSaleAuction(address,address)", +"5c3dcfde": "listedTokensAsBytes(uint256,uint256)", +"5c3e38ee": "updateMinSpend(uint256)", +"5c3e426c": "adminRetrieveDonations(address)", +"5c3f9765": "endDateClose()", +"5c3ffada": "getPlayerCardIdsForTeam(uint256)", +"5c40329e": "setPresaleTime(uint256,uint256)", +"5c40839f": "GenevExch(address,address,address,uint256,uint256,uint256)", +"5c40f6f4": "setStatus(bool)", +"5c416306": "extractApprovedIndexLength()", +"5c417695": "burnMana(uint256)", +"5c4271c9": "issueDividendRewardBips()", +"5c42d079": "getProvider(uint256)", +"5c4301f2": "multiExecute(address[],uint256)", +"5c435396": "show_the_name_of_Option_D()", +"5c43fce3": "showteam(address)", +"5c44a837": "RemainingTokenStockForSale()", +"5c44c3e5": "addAdv(address,string)", +"5c45079a": "dropToken(address,address[],uint256[])", +"5c45872e": "_addCategory(address,uint256,uint256)", +"5c4633a4": "_revealNumber(address)", +"5c469570": "ReiDoCoinToken()", +"5c473764": "RESERVE_FUND()", +"5c474f9e": "saleStarted()", +"5c475676": "getProposal(uint256,bytes32)", +"5c47e306": "advisorsTokensPercent()", +"5c47ead7": "getParticipantData(address)", +"5c481d8b": "convertToWei(bytes32,uint256)", +"5c492129": "totalGamesPlayed()", +"5c49660a": "privateIcoTokensForEther()", +"5c4978e0": "getCurrentYearGameMiningTokenCap(uint256)", +"5c49d96c": "nTickets()", +"5c4a627f": "totalPreICOAmount()", +"5c4b4c12": "transferPreSignedHashing(address,address,uint256,uint256)", +"5c4bade1": "transferEtherTo(address)", +"5c4bfa10": "buyout()", +"5c4c9f6f": "WithdrawToken(address)", +"5c4d3609": "getTargetDesignatedReportNoShowsDivisor()", +"5c4e10e8": "sendLimitTokensToFounder(uint256,uint256)", +"5c4f4024": "tryRoundEnd(uint256)", +"5c4fb1c5": "comisionGetter()", +"5c5020e7": "setValidatorStake(bytes32,uint256)", +"5c50c356": "getTotalBonded()", +"5c50c63a": "isTokenTransferLocked()", +"5c511a2a": "OrphanWalefareToken()", +"5c5204d6": "changeOwnerTo(address)", +"5c52b434": "Boxicoin()", +"5c52bba7": "countParticipants()", +"5c52c2f5": "resetSpentToday()", +"5c52e51e": "processPayout()", +"5c53ec59": "setReasonableDiff(address[],uint256[])", +"5c54305e": "InsufficientFunds(address,uint256,uint256)", +"5c552879": "bytesToBytes8(bytes)", +"5c552fab": "getMetadataUser(address)", +"5c5557e7": "setKWHForGas(uint256)", +"5c561fff": "removeAllowedTransactor(address)", +"5c56afa3": "priorTokensSent()", +"5c58ad8e": "processDiceBet(uint256,uint256,int256,bytes32,bytes32)", +"5c590683": "SomeRegister()", +"5c5991d4": "token_ratio()", +"5c5a8ad5": "LogBid(address,address,uint256,uint256,uint256)", +"5c5b9f8f": "depositTokens(address,uint256,uint256)", +"5c5ce16e": "NXTokenCoin()", +"5c5d625e": "getProof()", +"5c5dc9a0": "embark(uint16,uint16,uint256)", +"5c5df66a": "setRequiredExpIncreaseFactor(uint32)", +"5c5e0aca": "setGrowingMaxPerDay(uint256)", +"5c5e20b6": "revertAuction(uint256)", +"5c5e274e": "mMaxChainCode()", +"5c5e54c9": "hasBothAttributes(address,bytes32,bytes32)", +"5c5f786e": "s4(bytes1)", +"5c5f7c5b": "setAdvisorsTokensPercent(uint256)", +"5c60da1b": "implementation()", +"5c60f226": "deleteUser(address)", +"5c612167": "newMultiService(address[])", +"5c613a03": "bountyReservedBalanceOf(address)", +"5c617279": "registeredApps()", +"5c61c853": "getProposalIndex(uint256)", +"5c61d628": "changeFundingLimit(uint256,uint256)", +"5c61f9b4": "getBlockResult(uint256)", +"5c6224c9": "Operational(address)", +"5c622a0e": "getStatus(uint256)", +"5c622c09": "getIsSendingLocked(address)", +"5c629788": "totalLevel(uint256[])", +"5c634241": "CanaryV6()", +"5c64bb72": "getCurrentSale()", +"5c658165": "allowed(address,address)", +"5c659bdb": "declareHanged(address,uint256[])", +"5c665f89": "getFunds(address,bool)", +"5c66bd58": "addWeapon(address)", +"5c679f7b": "batchVote(address[],uint256[])", +"5c67a5db": "approvalRatio()", +"5c67ae76": "PRE_COIN_PER_ETHER_ICO()", +"5c67dd1e": "getBlockRoot(uint256,uint256)", +"5c67f7b0": "transferFromTgefund(address,uint256)", +"5c68908b": "CategoryCatalog()", +"5c693657": "setMaxPower(uint256)", +"5c69d5d6": "completeOrder(bytes32,uint256)", +"5c6a0246": "fundsClaimed()", +"5c6a6edd": "bloquear_contrato()", +"5c6ae355": "removeAuthorizeduser(address)", +"5c6baf3d": "createProxyAddressFor(address)", +"5c6bcad4": "transferFromOrigin(address,uint256)", +"5c6bd930": "calculateBonusToken(uint8,uint256)", +"5c6c8903": "Buy(address)", +"5c6cad31": "storeCryptoNames(string)", +"5c6ce321": "RDT()", +"5c6e0ebf": "getScenariosInfo(bytes32,string,string)", +"5c6eb2d2": "atl()", +"5c6eb7ae": "withdrawStock()", +"5c707f07": "setName(string,string)", +"5c714e90": "starterPackPrice()", +"5c71ae10": "EEZOToken()", +"5c71dec8": "FreezeAdmin()", +"5c72b160": "invalidatePendingWithdrawl(uint256)", +"5c72de09": "BONUS_ICO_ROUND3()", +"5c7460d6": "userRegistry()", +"5c752f6b": "incGen0Count()", +"5c7584b9": "isEarlyInvestors()", +"5c75df30": "churn()", +"5c76ca2d": "paidOut()", +"5c770267": "RefundVault()", +"5c7713d4": "CountCow(address)", +"5c77582f": "changeTeamCosts(uint256[])", +"5c778605": "borrowVerify(address,address,uint256)", +"5c78f9e2": "getDepositorsTokens()", +"5c796720": "CurrentIceDelta()", +"5c7a281d": "HugsByMathou()", +"5c7ae6e3": "ethDivsOwing(address)", +"5c7b0288": "gemAttackConversion()", +"5c7b35f8": "resetTokenOfAddress(address,uint256)", +"5c7b79f5": "cashOut(uint256)", +"5c7b9ccf": "BASE_POS()", +"5c7c43fa": "maximumBuyBack()", +"5c7c49c9": "validateKey(bytes32)", +"5c7c9aa4": "checkAccountState(address)", +"5c7cbb0f": "_decode(bytes32,bytes32)", +"5c7d6425": "setPVPEntranceFee(uint256)", +"5c7f3d9a": "hatchMorties(address)", +"5c7f7f63": "getGrantees()", +"5c7fe08e": "PURCHASE_AMOUNT_CAP()", +"5c803f19": "alarmRaised(uint256)", +"5c803f36": "empties(address)", +"5c80461e": "isInStage1()", +"5c80b448": "setMatingSeason(bool)", +"5c810f09": "disableSellerCancel(bytes16,address,address,uint256,uint16)", +"5c812737": "payoutMultiplier()", +"5c8136c2": "retrievedTokens()", +"5c81662e": "internalMint(uint8,address,uint256)", +"5c81b8f9": "MIRCOOToken()", +"5c838081": "getNota(address,uint256)", +"5c852231": "updateSizeBonus(uint256)", +"5c85267b": "PaymentChannel(address,uint256)", +"5c85974f": "setTxLimit(uint256)", +"5c8747cd": "getSoftwareVersionRecords(uint32)", +"5c87e40f": "SignatureCheckerChanged(address)", +"5c88da6f": "getUSD()", +"5c894469": "getPlayersByTrackId(bytes32)", +"5c89c10d": "setBannedCycles(uint256[])", +"5c8a1053": "extend(string)", +"5c8a694e": "FundableToken()", +"5c8a733a": "b32toString(bytes32)", +"5c8b94e7": "applyWithdraw(address,uint256,uint256)", +"5c8c02b3": "getWinnerById(uint256)", +"5c8cb8c0": "DBIPToken(uint256)", +"5c8cf750": "cancelTransaction()", +"5c8d1a6b": "setAtomMoth(uint256,uint64)", +"5c8e7376": "stageEco()", +"5c8f66f3": "getMinAuditPriceLowerCap()", +"5c8fe438": "books()", +"5c908ee5": "DawnX()", +"5c90b9a8": "createRequest(address[3],address,uint256[12],uint256,bytes)", +"5c919aa3": "getDemurrageableBalance()", +"5c91cdfa": "createPenguin(string,uint256,uint256)", +"5c91fa67": "test_3_assertGasUsage200Boards()", +"5c92abfd": "GameVerified(bytes32)", +"5c92e2f6": "castCommit(uint256,uint256[],bytes32)", +"5c9302c9": "currentDay()", +"5c9442a1": "addAdminList(address[])", +"5c97404a": "domainPrice()", +"5c975abb": "paused()", +"5c978499": "checkValidityOfBalance()", +"5c979fe4": "setRegistrar(uint256,address)", +"5c97efd6": "updateIcoStartTime(uint256)", +"5c97f464": "WNTOToken()", +"5c9920fc": "vaultClosed()", +"5c9a7a8b": "getCarType(uint256)", +"5c9b62b4": "comprarSala()", +"5c9c5a6f": "checkGameIndex()", +"5c9cc81f": "getFundDetails(address)", +"5c9d0fb1": "CROWDSALE_ALLOWANCE()", +"5c9d4528": "mainCapInWei()", +"5c9fa6ad": "bidSpread(bytes32,bool,int32)", +"5ca11c34": "minSalePrice()", +"5ca177cb": "LINK(uint256)", +"5ca1bad5": "CallScheduled(bytes32)", +"5ca1c5a0": "getNodeValue(bytes)", +"5ca1cacc": "changeMinEth(uint256)", +"5ca1e165": "getRoot()", +"5ca20102": "_checkPixelUnderRight(uint256)", +"5ca21490": "BitMilleCrowdsale()", +"5ca26ff9": "updateGuPhrase()", +"5ca3400c": "WithBeneficiary(address)", +"5ca3bf76": "setSendErrorValue(address,uint256)", +"5ca48d8c": "tokensLocked(address,bytes32)", +"5ca4d4bb": "disableScriptExecutor(uint256)", +"5ca5b054": "metherToken()", +"5ca5b334": "enableManager(address)", +"5ca6fa4a": "Nostradamus()", +"5ca7f2f0": "LivepeerVerifier(address,address[],string)", +"5ca81139": "createOnDay(uint256)", +"5ca86447": "put(address,uint256,uint256,uint256,uint256)", +"5ca8bc52": "returnIt()", +"5ca8e2ad": "ModultradeStorage()", +"5ca91d7f": "faddress(address)", +"5caa0dec": "currentSeries()", +"5caaa536": "confirmReference(address,uint256,uint256)", +"5caabecf": "transferFromWithReservingNet(address,address,uint256)", +"5cac0176": "MJT()", +"5cac79b2": "LockedCrowdSale(address)", +"5cac8b27": "amazing()", +"5cacd319": "nfcDetails(bytes32)", +"5cacdf29": "testChickenCnt()", +"5cad249c": "getLastWinNumber()", +"5cad7cfb": "getCrowdsaleStatus()", +"5cade372": "payAllOut()", +"5cae7767": "removeTrustedPartner(address)", +"5caed029": "tokenDecimal()", +"5cafbafb": "newMember(address)", +"5caff1a7": "Criptolira()", +"5cb047e8": "toInt(bytes,uint8,uint8)", +"5cb0887c": "contractExists(address,address)", +"5cb0c16f": "totalInCirculation()", +"5cb10016": "offchainSale(address,uint256)", +"5cb1470e": "_createRabbitInGrade(uint256,address,uint8)", +"5cb18a6d": "fipsLegacyRegisterMulti(bytes20[],address,bytes)", +"5cb24756": "unitEthWei()", +"5cb2d86e": "totalBlockContribution(uint256)", +"5cb2ffb5": "updateMinCapEthOnce(uint256)", +"5cb318bf": "unregisterUser(address,address)", +"5cb3ce15": "calculateMemoryState(uint256)", +"5cb4502c": "SCORE_TO_WIN()", +"5cb4f548": "partnerInfo(address)", +"5cb5de63": "recReward(uint256,uint256)", +"5cb603dd": "_getYearIndex(uint256,uint256,uint256)", +"5cb7226d": "prePreIcoStartAt()", +"5cb732be": "refundToken()", +"5cb7dd98": "BlueChipGame()", +"5cb85cd2": "changeCost(uint256)", +"5cb8dd09": "isAllowed(address,bytes32)", +"5cb92dc7": "_enableRefunds()", +"5cb9ceaa": "okAddress(address,address)", +"5cba658f": "setState(address[],uint256[],address,uint256)", +"5cba6caa": "notarizeHash(uint256,string,string,bytes32,string,string,string)", +"5cbaa74b": "canAttack(address)", +"5cbad0b5": "sumHardCapICOStage1()", +"5cbb122c": "transferBctToken(address,uint256)", +"5cbb2ac3": "purchaseTokenPointer()", +"5cbb7caa": "getFriends(address)", +"5cbbdfc9": "currentApplicationEntityAddress()", +"5cbc65b2": "getplayersurplus()", +"5cbc85d0": "returnBounty(uint256)", +"5cbcb302": "pre_ico_allocation()", +"5cbdf177": "emailVerified()", +"5cbe5f8f": "DIV_DIST()", +"5cbee9ba": "releaseLockedTokens(address)", +"5cbf0850": "BTN()", +"5cbfdd8d": "preBuy(address,uint256,bool)", +"5cc15001": "getContent(bytes32)", +"5cc18780": "StabilizationFund()", +"5cc1ad7f": "toTileId(uint8,uint8)", +"5cc2e6aa": "getFirstAuctionsRemainingDuration()", +"5cc2f6d8": "_processPurchaseInWei(address,uint256)", +"5cc3623a": "currentSection()", +"5cc373c7": "TestJ()", +"5cc39659": "preSaleBonus2Amount()", +"5cc3c951": "purchase_with_dai(uint256,address,uint256,uint256,uint256,address,bytes)", +"5cc3f5d7": "Deauthorization(address,address)", +"5cc41dad": "initiateCertificate(bool,string,uint256,uint256,uint256,uint256)", +"5cc422a1": "sumofsquares(uint256,uint256)", +"5cc501ce": "testFailSetNotTransferableNotOwner()", +"5cc52fba": "claimTokensBC(uint8)", +"5cc53bc7": "matchOpponents(uint256)", +"5cc57501": "_computeHeight(uint256,uint256,uint256)", +"5cc5c5cf": "jackpotDifficulty()", +"5cc5ca50": "formulaContract()", +"5cc8a6ed": "PRE_SALE_4WEEK_BONUS()", +"5cc8ce33": "dev_settledBalance()", +"5cc95422": "getVestingReleasedAmount(address,address)", +"5cca3905": "getDeveloperMiningPowerForGameId(uint256)", +"5ccb4f8f": "UmbrellaCoin()", +"5ccb5460": "ethInvestedDuringICO()", +"5ccb54c4": "BGD()", +"5ccbddeb": "IcelandvsCroatia()", +"5ccc3eaa": "roundMoneyUpToWholeFinney(uint256)", +"5ccd2f9b": "_deleteAllPackedRevisionBlockNumbers(bytes20)", +"5cce7dbb": "removeHolderAddress(bytes32,address,address)", +"5ccee1de": "newValidatorSet()", +"5ccf49ed": "isGenome()", +"5ccf9f43": "BonusCrowdsaleMock()", +"5ccfe157": "getDataById(uint8)", +"5cd03621": "periodRound()", +"5cd03a3f": "removeIdArrayItem(address,uint256[],string,address)", +"5cd137b4": "LogDonation(address,string)", +"5cd27e8d": "init3(int256[],int256)", +"5cd2f4d3": "approve(address,bytes32)", +"5cd31795": "HavenToken()", +"5cd31e83": "LastWillContract(address,address[],uint8[])", +"5cd3b917": "numberOfDeployedTokens()", +"5cd3f3a1": "decompress(bytes)", +"5cd42150": "KY8000Token()", +"5cd45e61": "getUuidsSize()", +"5cd48caa": "bet(uint256[],address)", +"5cd50b3f": "quater2()", +"5cd60dad": "add(address,int256)", +"5cd689e6": "sell_label(address,uint256)", +"5cd6bd0e": "getPlayerDividendByStage(uint256,uint256,address)", +"5cd72340": "SetEpochData(address,uint256,uint256)", +"5cd72b15": "setAllowedMultivest(address)", +"5cd7815b": "testInternalCall()", +"5cd7c8bc": "createLastDay()", +"5cd7d478": "isYesWinning()", +"5cd82ee5": "Act()", +"5cd85187": "MIN_ETHER()", +"5cd87c71": "supportsTradingPair(address,address)", +"5cd8d2ad": "buyAndTransfer(uint256,address,address)", +"5cd925cd": "assetSize()", +"5cd96091": "enable_refunds()", +"5cd9814f": "Mybalance()", +"5cda31dd": "GTN()", +"5cda4b41": "checkApproval(address,address)", +"5cdaab48": "previousEpoch()", +"5cdb0798": "burnMemberToken(address)", +"5cdb1bd7": "setRefundPercent(uint256)", +"5cdb88bc": "addClaim(string,string,uint256,string)", +"5cdbd2d1": "Constructor(string)", +"5cdc9eda": "peggedETHUSD()", +"5cdcf33d": "milieurs_per_eth()", +"5cdd7560": "STEToken()", +"5cdd95e3": "MintableToken(uint256,address,bool)", +"5cddb74b": "becomeShitClonelord()", +"5cddd93d": "referalsMinInvestLimit()", +"5cde15b9": "_Application(bytes32,uint256,string)", +"5cde871e": "_depositOrderBalance(uint256,address,address,uint256)", +"5cdf3450": "changeParticipationLimits(uint256,uint256)", +"5cdf76f8": "setServiceFee(uint256)", +"5cdfcd69": "car_expense(uint256)", +"5cdfd08c": "managementFees()", +"5cdfe733": "fastBuyBonus()", +"5ce1d810": "SmartN()", +"5ce22019": "getEtherInContract()", +"5ce2fea1": "CleosContract()", +"5ce308a7": "addEntry(string,string)", +"5ce32aca": "getAirdrop(bytes32)", +"5ce398c4": "Riddle()", +"5ce3dec1": "self_destruct()", +"5ce49fbf": "amountBets()", +"5ce4f8dc": "PoWHrGlass()", +"5ce57b50": "setPenalizedStatus(uint256,address,bool)", +"5ce5ba9b": "queryParent()", +"5ce62aa4": "checkStoredFile(address)", +"5ce7514e": "allowPublicWithdraw()", +"5ce75c7c": "PRESALE_SECOND_DAY_START()", +"5ce7c7e0": "tokenSetCrowdsaleManager(address,address)", +"5ce800ac": "user_off_freeze()", +"5ce8050f": "BuildCoinUtilityToken()", +"5ce83f70": "updateEndsAt(uint256)", +"5ce885ee": "initial_withdrawal(uint256)", +"5ce94328": "balanceOf(uint152)", +"5ce97dbb": "totalAirdrop()", +"5ceaa0bf": "modifyCurrentHardCap(uint256)", +"5ceb8bc8": "isPromoPause()", +"5cebcbf0": "setMaxGamePerBlock(uint256)", +"5cec2054": "dteamVaultAddr1()", +"5cec4cb9": "fundsTokensHaveBeenMinted()", +"5cec5ded": "balanceComisionOf(address)", +"5cecd728": "setWillContents(address,bytes)", +"5cedff32": "takeTokensForBacking(address,uint256)", +"5cee9ea7": "buyNew(uint256,uint256,uint256)", +"5cef51a6": "BdpDataStorage(bytes8)", +"5cf00394": "getResoPeriod()", +"5cf054f8": "SetRewAddr(address)", +"5cf0769c": "ETHERCOIN()", +"5cf1469d": "addPayout(uint256,string)", +"5cf28fa4": "minDai()", +"5cf29ecf": "forOwner()", +"5cf2befc": "getEthAddressesLength()", +"5cf2f261": "ProofOfBitconnect()", +"5cf3125c": "NASDAQ()", +"5cf34bcf": "getMinFee()", +"5cf3508a": "whiteListControllerAddress()", +"5cf38f24": "togglePlotBlockedTag(uint256,bool)", +"5cf3cd96": "payNode(bytes32,bytes32)", +"5cf3d346": "names(address)", +"5cf469ca": "tokenPreSaleCap()", +"5cf4ee91": "getPrice(uint256,uint256)", +"5cf5ad2e": "registerNameCore(uint256,address,uint256,bytes32,bool)", +"5cf5e386": "guardian2()", +"5cf6040b": "ERC20Token(uint256,uint8,string,string)", +"5cf6208a": "oraclizeTimeTolerance()", +"5cf625f0": "OffChainManagerImpl(address,address)", +"5cf6a536": "InternetWall()", +"5cf6a763": "receiveApproval(address,int256,address,bytes)", +"5cf858aa": "TOKEN_ESCALE()", +"5cf89f1e": "setDateRelease(uint256)", +"5cf8ca60": "isCase(uint256)", +"5cfa353a": "updateTotalGasCost(uint256)", +"5cfae3ba": "UNPC()", +"5cfaf2ef": "setNameTAOPositionAddress(address)", +"5cfb4aa4": "getMessageTimestamp(uint256)", +"5cfbcdbb": "committedEther()", +"5cfc1a51": "capacity()", +"5cfc53c1": "calculateForValue(uint256)", +"5cfc6432": "EcosystemPart()", +"5cfd5f89": "product4_pot()", +"5cfd8c24": "ResetPonzi()", +"5cfe237a": "TCGC(address)", +"5cfe585a": "calcDisputeEnds()", +"5cfea6fb": "TokensPerWei()", +"5cff876b": "carrotsCaught()", +"5d000c07": "getFreeFuck()", +"5d004e85": "getCommentsCountByAd(uint256)", +"5d01615f": "queryFusionData(uint256)", +"5d01b261": "_placeBet(uint256,address)", +"5d0213f7": "transferTokenOwnerShip(string,address)", +"5d029d1e": "indexedByTag(bytes32,uint256)", +"5d02b2f7": "hasPresaleEnded()", +"5d03147a": "ownership()", +"5d0341ba": "approvals(address)", +"5d036c8b": "payEther(address[],uint256[])", +"5d0413d1": "calculatePlotPrice()", +"5d04af9c": "iMMCoinbuyPrice()", +"5d064bab": "MoreGainCoin(uint256,string,string)", +"5d068051": "sendFees(address)", +"5d06a05c": "lockupAccounts(address[],uint256,uint256)", +"5d0792b7": "minimumInvest(uint256)", +"5d0808f2": "listedMartialsLength()", +"5d08225e": "getGidOfId(uint64)", +"5d088fc6": "changeRandomFight2DeathContract(address)", +"5d08c1ae": "salePaused()", +"5d09e625": "setMustSkipFee(address,address,bool)", +"5d0a740a": "GetSeries()", +"5d0a7628": "lockPresaleBalances()", +"5d0ad8d0": "testFail_set_owner_unauth()", +"5d0b4e5c": "isTradeFeasible(address,address,uint256)", +"5d0b6774": "counterFor(address)", +"5d0be9de": "softWithdrawRevenueFor(address)", +"5d0c0161": "IXCASHToken()", +"5d0cb15d": "TOKEN_SALE_SUPPLY()", +"5d0dd712": "bet_amount()", +"5d0e550a": "safetyModeOn()", +"5d0ef098": "burnUnsoldCoins()", +"5d0f4ee0": "isChampionAccount(address)", +"5d108ca2": "TokenChanged(address)", +"5d109aea": "maxResult()", +"5d10a60d": "createPost(string,string,bytes32)", +"5d113b03": "PayWinners(uint256,address)", +"5d121289": "addPreSaleEndDate(uint256)", +"5d123014": "setGameTax(uint8)", +"5d12ace4": "playGame(uint256,uint256,uint256)", +"5d12fc0c": "ONE_BILLION()", +"5d14076c": "lowercaseString(string)", +"5d145c5b": "setIcoTimeStartEnd(uint256,uint256)", +"5d14f925": "Invested(address,uint256,uint256,string)", +"5d15001e": "SupplyOp(uint256,uint256,uint256)", +"5d15b46a": "emitSkillCategoriesSet(address,uint256,uint256)", +"5d161310": "DataMining()", +"5d161c3f": "useAbility(uint256)", +"5d16a6f9": "lockedBalances(address,uint256)", +"5d16b8de": "take_back_money()", +"5d183b60": "supplyRound2()", +"5d184107": "AddCategory(string)", +"5d19212e": "markUserAsFounder(address)", +"5d19606e": "transferIssuer(uint256,address)", +"5d19a99f": "isLimitReached()", +"5d1a3b82": "getOutcome(bytes32)", +"5d1b45b5": "getEntityCount()", +"5d1b56c4": "TestUser(address,address,address,bytes32)", +"5d1bd962": "getArrayValue(uint256)", +"5d1be4e5": "deathData_f14()", +"5d1be58e": "pecunioToken()", +"5d1c01e0": "signedApproveAndCallCheck(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", +"5d1c3171": "luck()", +"5d1c985b": "setReceivers(address,address,address)", +"5d1ca631": "getId()", +"5d1ce03f": "tokensRaisedDuringRound(uint8)", +"5d1e2d1b": "split(address,uint256)", +"5d1edfa0": "checkContributedETH(address)", +"5d1f8098": "RoshaanCoin()", +"5d200f84": "GetPlayer(uint256)", +"5d201596": "getCategoryInfo(address,uint256,uint256)", +"5d202249": "totalCollectedETH()", +"5d204869": "slice(bytes,bytes,uint256,uint256)", +"5d208872": "setTimesEnabled(uint8,bool)", +"5d216562": "changeLockTransfer(bool)", +"5d2195dc": "getToBalance(uint256)", +"5d2230d7": "numfails()", +"5d2247a5": "stakeAirdrop(uint256,bytes)", +"5d228eb0": "getProviderDetailFields(uint256)", +"5d22a352": "manualWithdrawToken(uint256)", +"5d22e222": "BTCAir()", +"5d2392d6": "latchContract()", +"5d239d3e": "getSlice(uint256,uint256)", +"5d240c58": "addExperience(uint256,uint256)", +"5d2434ec": "transferFromTangibleassetdisbursementfund(address,uint256)", +"5d25cccc": "createVesting(address,uint256,uint256,uint256,uint256,bool,address,uint256)", +"5d25d021": "withdrawForeignTokensMultiple(address,address[],uint256)", +"5d267042": "PointlessToken()", +"5d268629": "Refund()", +"5d2694da": "BlackPearlETH()", +"5d270cdc": "setExpectedRate(address)", +"5d272468": "isLiquid()", +"5d27976a": "Final(string,string,uint8)", +"5d27bff3": "registerWithEncryption(string,string)", +"5d27e9a6": "SEPARATOR()", +"5d281384": "_isValidSignatureAndMethod(address,address,bytes)", +"5d285eca": "preICOspecial()", +"5d29206b": "createTokenEscrow(address,uint256,address)", +"5d293581": "ApplyForCertification(string,string,string,string,uint256)", +"5d2946f5": "futDevAddr()", +"5d295f67": "maxDGAME()", +"5d2973cd": "applyVIPLevel(address,uint256)", +"5d29bd40": "rollThree(address,uint8,uint8,uint8)", +"5d2a5d3d": "sentPreSaleTokens()", +"5d2a70a8": "getActualFee()", +"5d2a9b6a": "_randomIndex(uint256,uint8,uint8,uint8)", +"5d2aa757": "getSides(string,uint256)", +"5d2b811d": "getLastRegisterDate()", +"5d2bafed": "gee()", +"5d2c0af2": "Invest(address,bool,uint256,uint256,uint256)", +"5d2c53a7": "withdraw_funds(uint256)", +"5d2cce82": "LemonsDroppedToTheWorld()", +"5d2d5c37": "registered(string)", +"5d2dc5fa": "FraCoinAuct(string,uint256,address)", +"5d2dec87": "PRNG(address)", +"5d2fea9d": "reissuedTransactions(uint256)", +"5d302ba1": "UpgradeAgentEnabledToken(address)", +"5d306f34": "getRefundAmount(address)", +"5d307c6f": "giveToVoter(uint256,uint256)", +"5d3171d9": "transferFromPrivileged(address,address,uint256)", +"5d31c3bc": "deliveryApprove(address)", +"5d3235bd": "NutrioCoin()", +"5d3278f0": "LooneyFifty()", +"5d337b01": "largeSize()", +"5d3458ea": "DolToken()", +"5d346bd6": "addSaleOwner(address)", +"5d34b70c": "LavaDeposit(address)", +"5d354b4d": "foundingTime()", +"5d355804": "endPtopDeposit(address,address,bytes32)", +"5d359fbd": "transfer(address,uint64)", +"5d35a3d9": "approve(uint256,uint256)", +"5d3601d2": "_isRegularAddress(address)", +"5d36a791": "PartyToken()", +"5d36d182": "recycle(address,uint256)", +"5d37c840": "level_4_amount()", +"5d383eaa": "registerTokenPayment(address,uint256)", +"5d385031": "getCustomerTxOrigMcwTransfer(address,bytes32)", +"5d3899af": "place_to_push(uint256,bytes32)", +"5d397767": "publicBattlepm1()", +"5d3a08d7": "setNodePhases(address)", +"5d3a1f9d": "setText(string)", +"5d3a5e3b": "teamTokenAddress()", +"5d3a70f9": "YayyyToken()", +"5d3aac49": "PublishInterfaces()", +"5d3afb19": "CNYB()", +"5d3b2f37": "getNextGameId(address)", +"5d3bb19e": "XXXXXXXX09()", +"5d3c1d4c": "_getRequest(uint256)", +"5d3c7c9b": "AGASCrowdsale()", +"5d3c81a5": "feeWithdrawTokenAmount(address,uint256)", +"5d3ca4ab": "lotteryReinvest(string,uint256)", +"5d3cd79f": "endPrivateICO()", +"5d3d08a8": "cancelExchange(uint256)", +"5d3e64bf": "ttlPlayers()", +"5d3f4fe4": "withdrawMyTokens()", +"5d3fdd19": "updateDiscount(uint256)", +"5d40124e": "YunJiaMi(address,address,address,uint256,uint256,uint256)", +"5d40533f": "AnemoiToken()", +"5d40c0ae": "createAccessorySeries(uint8,uint32,uint256)", +"5d41363f": "rateRound1()", +"5d416cc2": "setIsTokenCanBeBuy(bool)", +"5d41dd6f": "ExampleToken(address[])", +"5d42513b": "test_withdraw()", +"5d428e08": "addTrader(address)", +"5d4293a0": "hatchPoohs(address)", +"5d439cf3": "transferEvent(address,address,uint256)", +"5d43e769": "batchTransfer(uint256,uint256[])", +"5d444ffb": "minMintingPower()", +"5d4453ba": "getGuess(address,uint8)", +"5d449d7d": "refererFeePercent()", +"5d44b508": "calculateRewardToWithdraw(uint32,address,address)", +"5d450bab": "setJobRating(address,uint8,uint256)", +"5d451a9a": "Wallet8()", +"5d4521dd": "updateWeedTotal(uint256,uint16)", +"5d452201": "ico()", +"5d4559ca": "get_coins_count()", +"5d45b4a7": "increaseMonthlyTransactionVolumeSending(uint256)", +"5d461de5": "sendAmount(address,uint256)", +"5d4626f6": "getInvoiceStatus(bytes32)", +"5d468d38": "releaseAuctionEnded(uint256)", +"5d469b74": "redeemUnderlyingInternal(uint256)", +"5d47762d": "Member_AssingTokensToProject(uint256,uint256)", +"5d47f4f2": "CanHandleAuth(address)", +"5d484e17": "StaticEthAvailables()", +"5d485e5d": "_hostContent(address,bytes32,string,string,string)", +"5d495aea": "pickWinner()", +"5d49705b": "getEmployer(address,uint256)", +"5d49719d": "SHA3_512()", +"5d49c199": "finishPreSale2()", +"5d4a8f74": "ATTRToken()", +"5d4aaf1c": "registerWithUserAgreement(address,bytes32)", +"5d4befc0": "emitSynthAdded(bytes4,address)", +"5d4c5cca": "participantsForPreSale(address)", +"5d4d061e": "keyValueStorage()", +"5d4dda72": "DirectInput()", +"5d4e1e5c": "substract(uint256,uint256)", +"5d4f012b": "tgeCurrentStage()", +"5d4f30e7": "get_address(address)", +"5d50601b": "getsumdata1(bytes32)", +"5d506a2e": "minPotSum()", +"5d51b550": "haltCrowdsale()", +"5d52fe64": "buyRemaining(address)", +"5d54322d": "canPurchase(address,uint256)", +"5d5483b3": "WatchAppliedFeePercentage()", +"5d54cb1f": "is_transfer_allowed()", +"5d54e612": "whitelistAll()", +"5d552c72": "BasicToken()", +"5d5576f8": "renounceCapper()", +"5d56550a": "buyCore(address,uint256,string)", +"5d5655dd": "BOOKIE()", +"5d567259": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address,uint64)", +"5d56e0a4": "developerMiningPower()", +"5d57135a": "KEBABER_TO_MAKE_1KEBAB()", +"5d582870": "requestInvestment(uint256,uint256,address)", +"5d585176": "GolemSupply()", +"5d586bfd": "deposit(string,address,uint256,string)", +"5d59072a": "OFFICAL_VOTING_DAY_OF_MONTH()", +"5d593462": "init(address,address,string,string,uint256,uint256)", +"5d5a1614": "STQCrowdsaleTestHelper(address[],address,address,address)", +"5d5aa277": "tokenSaleContract()", +"5d5b35f3": "dividendsTotal()", +"5d5b82fd": "Blockjack(address,address)", +"5d5b9021": "acceptTradeOffer(uint256)", +"5d5b92b1": "teamOneSharePrice()", +"5d5bc4cb": "BetOnRed()", +"5d5c3011": "ctyCoin()", +"5d5c606f": "DAOPolskaTokenICOregulations()", +"5d5d4fab": "TACTICALCRUISER_EXTRACTION_BASE()", +"5d5e22cd": "transferFromWithSender(address,address,address,uint256)", +"5d5e507b": "create_price()", +"5d61dd5a": "removeSingleAddressFromWhitelist(address)", +"5d62917b": "pickWinners(uint8,address,address,address,uint8,uint8,uint8)", +"5d63b758": "minAcceptedETH()", +"5d63b77c": "divideSafely(uint256,uint256)", +"5d644069": "request_face_proof(string,address)", +"5d6470a4": "STAGE_1_TIME()", +"5d64aa68": "dragonIndexToOwner(uint256)", +"5d651b62": "TimeLockSendCreated(address,address,uint256,address)", +"5d6542af": "way()", +"5d65432d": "IndorsePreSale()", +"5d65c37b": "Assessment(address,uint256,uint256,uint256,uint256)", +"5d666d3c": "getRurus(string)", +"5d667464": "usePrecompiledContracts(bytes32,uint8,bytes32,bytes32)", +"5d66ccf0": "updatePerSell(uint16,uint256,bool)", +"5d66d73f": "notarizeHash(uint256,string,string,uint256,bytes32)", +"5d671fc0": "switch_period()", +"5d6720b4": "getFreeMineral(address)", +"5d67830a": "doLogFighter(uint32,uint256,uint256)", +"5d685185": "periodITO_softCapInWei()", +"5d68564e": "ZontoToken()", +"5d6952d7": "changeSaleStartBlock(uint256)", +"5d69864e": "Bitscors()", +"5d69d600": "presold()", +"5d69f16f": "offerAsSacrifice()", +"5d69f68c": "getVotersName()", +"5d6af2af": "getOffChainRootAddress()", +"5d6b2f26": "destroyAllTokens()", +"5d6b70ae": "getSignedTable()", +"5d6b7798": "BCQ()", +"5d6c3ea7": "mined_coin_supply()", +"5d6c8e10": "getDHash(bytes13)", +"5d6cb67e": "ecosystemTokenSupply()", +"5d6cdfae": "EthereumPot()", +"5d6ceeb5": "returnMoneyToBuyers()", +"5d6d2992": "ownFiles(address,string,string)", +"5d705fe2": "MBCashSupply()", +"5d711db1": "get_candidates()", +"5d718818": "getHolderCountryCode(bytes32)", +"5d71cf46": "spendableAllowance(address,address)", +"5d723298": "PartialPayment(address,address,uint256)", +"5d728582": "hasAuthoritySignedSideToMain(address,bytes)", +"5d72b30d": "changePlayerName(uint256,string)", +"5d73e2bf": "startPlay(bytes32,uint8,bytes32,bytes32)", +"5d740d62": "YFJToken()", +"5d751443": "updateWebappMinBalance(uint256)", +"5d760b45": "forceWithdrawPayments(address)", +"5d766d35": "INITIAL_GLOBAL_DAILY_SUPPLY()", +"5d76a039": "PresaleReStarted()", +"5d771933": "BOUNTY_SUPPLY()", +"5d777893": "GetPlayers(uint8)", +"5d77aec8": "receiver3()", +"5d77d8d0": "getBlacklist(address)", +"5d78650e": "getAccountData(address)", +"5d796c05": "mintAuditCancel(address,address)", +"5d79eda7": "Digixbot(address)", +"5d7a6b10": "nextDerivativeTokenScheduled()", +"5d7b0758": "controllerMint(address,uint256)", +"5d7c3ad2": "ICO(address,address,uint256,uint256,uint256)", +"5d7c3b78": "costructor()", +"5d7c829d": "_messageToRecover(address,uint256)", +"5d7cf3e2": "Meltdown(uint256)", +"5d7e6b8d": "Schengencoin()", +"5d7e7219": "setFeeFor(address,uint128[2])", +"5d7e8c15": "ethToCents()", +"5d7e994a": "RewardStart()", +"5d801ec4": "SetmaxTokens(uint256)", +"5d80effc": "TimeBonusPricing(uint256[])", +"5d80f643": "Kujira()", +"5d818e6b": "recordDeal(uint256,address,uint32,uint32,bool,uint256)", +"5d81b206": "P3NGCT_v1(uint256,string,string)", +"5d8214db": "lastFactChangeValue()", +"5d8227e6": "FactoryBase(string,string,string)", +"5d82ddc8": "freezeEnabled()", +"5d8302f2": "CrypTollBoothToken(uint256,string,uint8,string)", +"5d831ca1": "FUT5()", +"5d8749ed": "workStages(uint256)", +"5d878b4f": "isInWhitelist(uint256,address)", +"5d88383e": "retrieveEth(address,uint256)", +"5d891d12": "foundersTokensWalletMaster()", +"5d895dac": "parse(string,uint256)", +"5d89c01a": "getCatIds()", +"5d8a776e": "award(address,uint256)", +"5d8aef9f": "_calculateLockedBalance(address,uint8)", +"5d8bc2a8": "assertEq12(bytes12,bytes12,bytes32)", +"5d8c5b87": "orderPlace(address,bool,uint256,uint256)", +"5d8ca2ac": "getApprovalsFor(address)", +"5d8d1585": "getUserInfo()", +"5d8d2904": "setKeyPermissions(bytes32,bool,bool,bool)", +"5d8d4415": "rawUseName(bytes32)", +"5d8dd304": "founderTokensAvailable()", +"5d8e0c2c": "isManualTradingAllowed()", +"5d8e7376": "DAOBalanceSnapShot()", +"5d8e772f": "gameCore(uint256,uint256,uint256,bytes32)", +"5d8f2640": "store(bytes32,bytes32,bytes32)", +"5d8f3b76": "createPercentageRequest(uint256)", +"5d90df32": "TRONIX()", +"5d9169f0": "ICO(address,address,address,address)", +"5d91e27b": "MVM24PeriodsCapUSD()", +"5d92e5d2": "ipyh()", +"5d946afa": "trashed(address)", +"5d94e35c": "contractRefundStarted()", +"5d94f108": "platformLogout(address,uint256)", +"5d956b3e": "changeGroveAddress(address)", +"5d95738b": "vHasVoted(uint256,address)", +"5d95a08b": "MizuCoin()", +"5d969f8f": "updateCustomerACC(address,address,address)", +"5d96ec65": "setAdministrator(address,string,bool)", +"5d975d70": "mx(bytes32)", +"5d977c02": "withdrawalFor(uint256,uint256)", +"5d9796eb": "WELTCOIN()", +"5d989a0c": "NyronChain_Crowdsale()", +"5d98d9ee": "ChannelCreated(string,address)", +"5d98fd9f": "Presale(address,address)", +"5d990791": "getDenominationByIndex(uint256)", +"5d99e02f": "myPinerTokenTest1()", +"5d9adc94": "withdrawPendingTransactions()", +"5d9c4f0f": "getFeeRecipient(address)", +"5d9d595c": "sendWingsRewardsOnce()", +"5d9d5b9a": "CreatedCAT(address,uint256)", +"5d9d8dd9": "makeupShiny(uint256)", +"5d9dacb5": "OPEN_VOTE_PERIOD()", +"5d9ec210": "signTransaction(uint256)", +"5d9fa6fc": "getContractBal()", +"5d9fd8b0": "listPersons()", +"5da01a5b": "configure(bytes32,bytes32,uint256,uint256,uint256,address)", +"5da03ff8": "EthergotchiOwnershipV2(address)", +"5da05e2e": "setCoinLimit(uint32)", +"5da08c42": "createSeedTeam(uint8,uint256[9],uint256[9])", +"5da0a987": "Run()", +"5da12d50": "Oduwacoin()", +"5da24f90": "closeTimer()", +"5da34093": "bonusRemain()", +"5da3d3d2": "minHEXCap()", +"5da47721": "getVIPLevel(address)", +"5da4a1d3": "setPercentage(uint256)", +"5da54cee": "DragonCrowdsale()", +"5da5a9b1": "ownerUpdateMinMaxNumber(uint256,uint256)", +"5da5f5ab": "Distribution()", +"5da6628a": "transferExt(address,uint256)", +"5da6bf67": "movePlayer(uint8[176],uint8,uint8,uint8)", +"5da6c04d": "getFeesOwedToOperator()", +"5da6c418": "burnMintFrom(address,uint256)", +"5da6e035": "_openAndJoinCDPWETH(uint256)", +"5da6ec5b": "t8exToken()", +"5da85a16": "setCEx(address)", +"5da888aa": "ChainKeyToken()", +"5da89ac0": "weiRefunded()", +"5da96520": "transferTeam2Tokens(address,uint256)", +"5da9781b": "readUint256s(bytes32[])", +"5da99f5e": "upgradeCardDamage(uint256)", +"5daa0c37": "referrerLinkedSales(bytes32)", +"5daa87a0": "Initialized()", +"5daab236": "runIco()", +"5dab2e0f": "left82(uint256)", +"5dac1601": "SimpleStablecoin()", +"5dac48bb": "approvePreSignedHashing(address,address,uint256,uint256)", +"5dac5682": "removeAuthorization(address,address)", +"5dac7044": "checkHardCap(uint256)", +"5dacf084": "THACO2()", +"5dada964": "expectedRateContract()", +"5dadf485": "takePosition(uint256)", +"5dae4e50": "makeItRain()", +"5daf08ca": "members(uint256)", +"5daf7514": "redeemTokens(uint256,uint256,bytes32[])", +"5daf8a71": "DestroyToken(uint256)", +"5db07aee": "mintFeeDenominator()", +"5db09db5": "getSplitPotAsFixedPointForGameId(uint256,bool)", +"5db17dab": "CDTToken(uint256)", +"5db2a233": "awailableDividends(address)", +"5db30bb1": "getMaxTotalSupply()", +"5db38c63": "nDemocs()", +"5db39a1e": "totalFails()", +"5db39d74": "HayaCoin()", +"5db3f963": "registerSimple()", +"5db3ffa5": "getUBetCheck(address,address)", +"5db42841": "createContractGameItem(string,uint256)", +"5db46961": "proxyExchange(address,uint256,string,bytes32)", +"5db4cd21": "ir()", +"5db524ad": "finishDividends()", +"5db5301f": "unsubcribe(address)", +"5db5d1fb": "startTimeTLP2()", +"5db5fc24": "alterInitialPricePerShare(uint256)", +"5db62dab": "getBalanceForUser(bytes32)", +"5db6687b": "Dev_TokenReleased()", +"5db6a31f": "transferBroker(address,uint256,uint256)", +"5db7ef3d": "intoverflow_mul(uint256)", +"5db8e202": "evaluateProposalAction(uint256)", +"5db8f084": "getNeighbourReward()", +"5dbb0ef8": "TuZaiCoin(uint256,string,uint8,string)", +"5dbbd139": "CentraSale()", +"5dbbfc47": "getMaxLoss(address)", +"5dbc374f": "UBCoin()", +"5dbe47e8": "contains(address)", +"5dc10a45": "whitelistMultiForTier(uint256,address[],uint256[],uint256[])", +"5dc11a89": "setNumTicks(uint256)", +"5dc1ba1b": "closeLotteryAndPickWinner()", +"5dc1bb52": "removeLocked(address,uint256)", +"5dc1c79d": "KANYE()", +"5dc2157d": "getBalancesOfAddress(address)", +"5dc22cce": "attackPlayer(address)", +"5dc2944a": "ratesForCurrencies(bytes4[])", +"5dc3d02d": "rc5()", +"5dc43f6e": "AddAuthority()", +"5dc49bf8": "SellENSCreated(address)", +"5dc4d8a6": "proposalTarget(uint256)", +"5dc4dcd1": "TicketPurchased(address,uint256,uint256,uint256,uint256)", +"5dc54308": "KickSportsManager()", +"5dc5aefe": "startIncentiveDistribution()", +"5dc6bfe4": "distributeLRN(address[],uint256)", +"5dc6f3df": "registerNameCore(uint256,address,bytes32,bool,bool)", +"5dc70cda": "_shareToPreviousOwner(address,uint256,uint256)", +"5dc774d7": "DrawingPrintToAddress(uint256)", +"5dc77e26": "andThen(string,address)", +"5dc824b9": "voteNoLock(address,uint256)", +"5dc86b85": "adminGetAmountAddressDial(address,address)", +"5dc94af6": "getTokensTotal()", +"5dc96d16": "burnEnabled()", +"5dca53d3": "right30(uint256)", +"5dcb6774": "_createBid(address,uint256,address,address,address,uint256,uint256)", +"5dcb71f2": "yoshicoin()", +"5dcb98c4": "CPO()", +"5dcbac7a": "registerBytes(address,bytes)", +"5dcbc01e": "addSellTokensRequest(string,string)", +"5dcbd8bb": "setLimit(uint16,uint64)", +"5dcc6dbc": "spawnAxie(uint256,address)", +"5dcd967d": "ndc()", +"5dcdddd1": "testSafeToAddFix()", +"5dce431b": "addGame(address,uint256)", +"5dce9948": "getTranscoder(address)", +"5dcf1b77": "fileMerkle(bytes32[],uint256,uint256)", +"5dcf451b": "CoinDogToken()", +"5dcf7c8c": "proxies(address,uint256)", +"5dd18a22": "setItemsNotForSale(uint256[])", +"5dd19463": "angelFoundationAddress()", +"5dd283cb": "pickSmallWinner()", +"5dd284e3": "getAllGoldTransactionsCount()", +"5dd39c12": "SOD()", +"5dd4599a": "usersCanTrade()", +"5dd48b04": "PURCHASE_PREMIUM_RATE()", +"5dd4a65f": "lookup(address,bytes32)", +"5dd588df": "isAuthorizedToTransferFrom(address,address,address)", +"5dd672ec": "latestBid()", +"5dd68acd": "setAddresses(address,address,address,address,address)", +"5dd68f36": "getTotalInvest()", +"5dd871a3": "canMint(uint256)", +"5dd8e1d5": "kek()", +"5dd8eb50": "rate4()", +"5dda837f": "mineBalance()", +"5ddae283": "transferRegistrars(bytes32)", +"5ddaf07f": "StarbaseToken(address,address,address)", +"5ddb2585": "icoStartTimestampStage4()", +"5ddb8a2e": "sendBonusTokens(address[],uint256[])", +"5ddbc632": "setHardCapToken(uint256)", +"5ddc98ba": "updateKYCWallet(address)", +"5ddd81b0": "firstPeriodCap()", +"5ddd8248": "setBurnerOwner(address,address)", +"5dddea66": "updateState(uint256,uint8,uint256)", +"5dde2066": "addBlocks(uint256,bytes,uint256[])", +"5ddf2998": "setOwnerValidatorAddress(address)", +"5de01497": "ownerWithdrawERC20Token(address,uint256)", +"5de047d3": "existPlatform(bytes32)", +"5de0e689": "startPromotion()", +"5de270c5": "adminFixCurve(uint32)", +"5de28ae0": "getStatus(bytes32)", +"5de2a21b": "onIncreaseApproval(address,address,uint256)", +"5de3ba97": "getAllIdentifiers()", +"5de40f30": "innerContract()", +"5de4381b": "_addItemToParent(bytes32,bytes32)", +"5de4c6fc": "lock(address,bool,uint256[],uint256[])", +"5de4ccb0": "upgradeAgent()", +"5de52fb7": "TakeMyEtherTeamAddress()", +"5de6dc55": "getTokensOfOwner(address)", +"5de6f040": "unlockFundrBal(bool)", +"5de7e350": "getTokensFromAddressEmits(address,address)", +"5de81534": "getEditionsCount(uint256)", +"5de910bc": "subSegmentation(address,uint256,uint256,uint256)", +"5de924bf": "DeepCoinToken()", +"5de97c8d": "setIntervalTimeAdjust(uint8)", +"5dea186c": "accept_relayed_call(address,address,bytes,uint256,uint256)", +"5dea19f5": "getHolderExternalIdByAddress(address,address)", +"5deab0ec": "grantLoanOwnership(bytes32,address,address)", +"5deb2cec": "fundsRecord(address,uint256)", +"5debb827": "SCFToken()", +"5debc7af": "get_tokenTime()", +"5dec18d4": "motto()", +"5dec74f8": "_finishTheBattle(uint256,uint256,uint256,uint8)", +"5dec7d49": "Transaction(bytes32,bytes32,address,bytes,bytes32,bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"5ded0235": "iRide()", +"5ded1865": "getCategoryProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"5dedd9cc": "resetWinners(uint256)", +"5dee2492": "AIR_2_SUPPLY()", +"5deeab39": "freeTokensIssued()", +"5deeffb2": "getSoftcapReached()", +"5def5814": "getByDistrict(uint256)", +"5defaec6": "createVirtualAddress()", +"5defe3d9": "grantAccessDeposit(address,address)", +"5deff965": "getEtherum()", +"5df285c8": "getBonusTokens(uint256,uint256,uint256)", +"5df29b4f": "settleBetUncleMerkleProof(bytes20,bytes20,uint40)", +"5df2df2f": "multiSendTokenComplete()", +"5df34ff2": "buyMintingAddress(uint256,uint256)", +"5df350ee": "setStableCoinAddress(address,address)", +"5df3bdb9": "ABRATOKEN()", +"5df3d87e": "bet1()", +"5df58352": "calculateScoresIfCellIsBought(address,address,uint256)", +"5df5f96f": "initialize(address,uint256,uint256,uint256,uint256,address)", +"5df607f0": "getMyEntry()", +"5df60977": "updateFrozenAddress(address)", +"5df6461d": "LOTTERY_FUND_SHARE()", +"5df6a6bc": "unbond()", +"5df70904": "giveToken(address,uint256,bool)", +"5df73398": "loadMesaVerify(bytes32,bytes32[],uint8[])", +"5df75bdf": "totalTokensICO2()", +"5df8122f": "setManager(address,address)", +"5df86d29": "etherInContract()", +"5df8d74e": "bytesCallWithArray(bytes,bytes32[4])", +"5df8f17b": "createVote(uint256,address[])", +"5df93f99": "MICL()", +"5df95255": "Rating(address,address,int256)", +"5dfb94cf": "nextBurnFeeProp(uint256)", +"5dfc09a4": "getCurrencySymbol()", +"5dfc273c": "Cloudbric(address)", +"5dfc2e4a": "noop()", +"5dfc3459": "maxIncrease()", +"5dfd1bff": "MeetingTimeSetFailure()", +"5dfd3278": "VOTE_AGAINST()", +"5dfde910": "STELLARGOLD()", +"5dfed2bb": "setCompte_14(string)", +"5dfee9bb": "refundTokens(uint256)", +"5dffe6dc": "contrEntrance(address)", +"5e0055e7": "ThreeStarToken()", +"5e007742": "Propethy()", +"5e00a177": "revokeVesting(address,string)", +"5e00b9a9": "incompletePercent(uint256[3])", +"5e00bd96": "DoNotBloodyDeployThisGetTheRightOne()", +"5e00e7b2": "getNoContributors()", +"5e01b2e6": "Gobi()", +"5e01d395": "getCapAtTime(uint32)", +"5e01eb5a": "getSender()", +"5e01ed34": "associatedAddresses(uint256)", +"5e02b84d": "Voiptoken()", +"5e031606": "round2TokensRemaning()", +"5e03d0c6": "getCreationDateOfHistoricalMetadata(string,uint256)", +"5e03d393": "setAccountFrozenStatus(address,bool)", +"5e04672b": "approveSynthesizing(address,address,uint256)", +"5e047822": "fundOf(address)", +"5e047975": "recoverSigner(bytes,address,uint256,uint256,uint256)", +"5e05bd6d": "timestampFromDateTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"5e05e84d": "buyCells()", +"5e068da5": "proxyVersion()", +"5e06911e": "SpecialTrained(uint256,uint256,uint256,uint256[2])", +"5e079aa5": "giveEthFundAddress()", +"5e07c354": "vestingTokens()", +"5e07f240": "shiftBitsLeft(bytes,uint256)", +"5e0842d7": "VEToken(uint256,string,string)", +"5e08f5fa": "setCGO(address)", +"5e0a6049": "LOG_newGasLimit(uint256)", +"5e0b1259": "end_block()", +"5e0b1597": "_unpackRatingValue(uint256)", +"5e0b4cb6": "setData_2(uint256)", +"5e0b5d9b": "changeStartAndEndTime(uint256,uint256)", +"5e0be607": "unlockAllTokens()", +"5e0be75c": "setDividendPayout(uint256,uint256)", +"5e0c8c8c": "getCountSales(uint256,uint256)", +"5e0c923a": "RinneganToken()", +"5e0d0f30": "krsUsd()", +"5e0e2118": "removeSignature(string,int256)", +"5e0e2957": "dumpOut()", +"5e0fac2e": "unlockedBalance(address)", +"5e0fec6a": "knownReserved()", +"5e0ff394": "setCompetitionAdmin(address)", +"5e10177b": "confirmDelivery()", +"5e101e51": "editionController(uint256)", +"5e1045ec": "addWhiteList(address[])", +"5e11544b": "newPeriod()", +"5e11dc0b": "openDistribution()", +"5e123ce4": "gameStarted()", +"5e131fa2": "removeLocker(address,address)", +"5e1372f4": "lockup(address,uint256,uint256)", +"5e159cd4": "LogOwnerRemoved(address,address,address)", +"5e15d642": "totalNumberOfTokensForSale()", +"5e1665f3": "SmartParkApp()", +"5e172fa3": "allowtransferaddress(address)", +"5e17580a": "setTime5(address,uint256)", +"5e1758fa": "addPermission(address,bytes32)", +"5e17b694": "promisedTokens()", +"5e17d423": "getBountyRate(address,address)", +"5e191293": "emitBoardRatingGiven(address,uint256,uint8)", +"5e1936d4": "testThrowSetNotTransferableNotOwner()", +"5e199157": "setWalletOut1(address)", +"5e199892": "forwardFee(uint256,address)", +"5e19b305": "isActive(uint32)", +"5e19d316": "clearICObyAddress(address)", +"5e19deda": "preCap()", +"5e1a01c3": "createAndJoinCDPAllDai()", +"5e1a6c17": "requesters(uint256)", +"5e1bd33e": "getBuildCost(int32,int32,bytes16)", +"5e1c8f89": "scoreOf(address,address)", +"5e1ce5b0": "phasePresale_To()", +"5e1d5482": "about()", +"5e1d7ae4": "changeFeeRebate(uint256)", +"5e1d832d": "giveChamp(address,uint256)", +"5e1d8cb7": "TextChanged(string)", +"5e1d9aba": "sanCurrentTotal()", +"5e1dca04": "shareholder1()", +"5e1e1004": "setPaymentAddress(address)", +"5e1e547d": "unsign(uint256)", +"5e1e5c88": "betByte()", +"5e1eabd2": "soldPerCurrentRound()", +"5e1f3fa8": "CREATE_REPO_ROLE()", +"5e1f56d9": "changeWalletOwner(address)", +"5e1f8b59": "_totalAssetSupply(uint256)", +"5e1fc56e": "close(uint64,uint256,bytes32,bytes32,bytes)", +"5e217162": "availableSTCDRTokensOF(address)", +"5e21f687": "getMarketID()", +"5e22a2fb": "getTokenIdByHash(string)", +"5e22b760": "buyDEV()", +"5e23464e": "TOTAL_REQUEST_TOKEN_SUPPLY()", +"5e24de11": "ownerSetCrowdsaleClosed(bool)", +"5e25495e": "getProviderSupply(uint256)", +"5e25f96d": "setYccContractAddress(address)", +"5e2642c9": "isInitialSupplied()", +"5e280e4e": "validateTransaction()", +"5e280f11": "endpoint()", +"5e29c47c": "walletCreatedTimestamp(address)", +"5e2a725c": "enableEmergencyBlock()", +"5e2bd421": "enableLogic(address)", +"5e2cb4f1": "BluToken()", +"5e2d13af": "addONG_AUDIT(bytes32,string,string,bool)", +"5e2d1f0d": "withdrawAfterTime()", +"5e2d285a": "GICTLock(address,uint256,uint256,uint256)", +"5e2d3798": "ETHERberry()", +"5e2dff7a": "foundersTokensLockedPeriod()", +"5e2e555f": "RogisterToVoteOnTransfer(address)", +"5e2ea5bd": "FIRST_PHASE_MAX_SPAN()", +"5e2ea799": "currentFlowerPrice()", +"5e2fe372": "getLastOrderIndex()", +"5e3013f1": "PlayX30()", +"5e3045c8": "getImpactTotalValue(string)", +"5e30b8a6": "refund(address,address)", +"5e30c961": "premium(address,address)", +"5e31005d": "scoreThresholdParams(address)", +"5e310670": "cancelTokenToEthOrder(uint32)", +"5e311cd7": "largestDonor()", +"5e318e07": "withdrawFees(uint256)", +"5e326b92": "setPreSaleStatus(bool)", +"5e331e62": "iterate_get(uint256)", +"5e33f94d": "ApolloSeptemCappedCrowdsale()", +"5e35359e": "withdrawTokens(address,address,uint256)", +"5e355dcc": "PJRToken()", +"5e3568b8": "session()", +"5e377b51": "Jackpot()", +"5e383d21": "values(uint256)", +"5e38ab4c": "BabyCoin(uint256,string,string)", +"5e38c77d": "getProductHistoryDate(bytes32)", +"5e393973": "get_contrib_arbits_max()", +"5e3b456c": "creatTokens()", +"5e3ba8ac": "usersGetter()", +"5e3bb4cc": "minimalSuccessTokens()", +"5e3bcaf7": "Fee(address[],string,uint8,string)", +"5e3cb7b0": "setTotalUsdAmount(uint256)", +"5e3cbb7c": "dayWithdraw()", +"5e3ced74": "callSurplus()", +"5e3d3b8a": "isPREICO()", +"5e3dbedb": "getTokenDescriptions(address,uint256[])", +"5e3df83f": "setFundingtokens(uint256)", +"5e3e2687": "transferFromParent(address,uint256,address,uint256,bytes)", +"5e3e37d1": "XfiniteAsset()", +"5e3e6092": "newService()", +"5e3e9158": "createWine(string,string,string,string,string,string,bytes32)", +"5e3fa843": "registerContract(string,bytes)", +"5e3fcbd1": "mintNewTokens(address,uint256)", +"5e402ae2": "getCurrentTokensPerEther()", +"5e402bb5": "setInfoTokenSilverRatio(string)", +"5e403a9c": "phase7Price()", +"5e404de3": "setMaximumCredit(uint256)", +"5e4293ba": "i_am_generous()", +"5e431709": "sealedBids(address,bytes32)", +"5e431a6f": "phasePublicSale1_To()", +"5e439f66": "changeAge(uint256)", +"5e43f719": "enablePublicTransfers()", +"5e44423c": "ChangePreSaleDates(uint256,uint256)", +"5e44daf3": "vote(uint256,int256)", +"5e44e0a4": "modifyHorseyTier(uint256,uint8)", +"5e46f419": "leed()", +"5e475bb6": "createKT(string)", +"5e48379a": "changePriceContract(address)", +"5e488540": "claimRefund(address,bytes32)", +"5e4887bd": "initializeTime()", +"5e48ce0f": "dequeue(bytes32)", +"5e48f58f": "PRESALE_PERCENTAGE_2()", +"5e49db8c": "getUsersFuelsIds()", +"5e49fbfc": "WOS()", +"5e4a1d36": "getSavingsBalance(address)", +"5e4a627d": "RN()", +"5e4a8a20": "setAppCode(bytes32,address)", +"5e4b587b": "_BLOCK_REWARD()", +"5e4b5f7d": "setColdAddress(address)", +"5e4ba17c": "remove(address[])", +"5e4e7cbc": "record(string,string,string,address,bool)", +"5e4f63ec": "extendLockPeriods(uint256,bool)", +"5e5098c2": "setmangerallow(address,uint256)", +"5e50f037": "reward(address,address,uint256,uint256,uint256)", +"5e511afa": "sendTokensBackToWallet()", +"5e5144eb": "change(address,address,uint256,uint256)", +"5e520c29": "tokensPerWei10()", +"5e5294b7": "endingTimestamp()", +"5e52a00b": "getReferrer()", +"5e53e2f9": "EXACOIN(uint256,string,string)", +"5e556a4a": "faucetTo(address,uint256)", +"5e5571ac": "pay(address,uint256,bytes32)", +"5e5650ef": "admin_set_Apply_Store_Id_Fee(address,address)", +"5e571440": "presalesTokenPriceInWei()", +"5e57966d": "addressToString(address)", +"5e58217d": "hardCapIco()", +"5e58331c": "SAGA()", +"5e585889": "claimDeposit(bytes32)", +"5e58f141": "shares(address,bytes,int256)", +"5e593cd3": "Funding_Setting_cashback_duration()", +"5e5a77e6": "getQuestionAnswer(uint256,uint256)", +"5e5a7eb0": "createCase(uint256,address,address,uint256)", +"5e5ae1fe": "invalidateAllPendingMints()", +"5e5b1e61": "closeTokensale()", +"5e5ca8d4": "BuyerSeller()", +"5e5d2adb": "HUBUToken()", +"5e5d4320": "deleteUser(bytes32)", +"5e5d73b5": "CloseSaleFund()", +"5e5d926c": "makeDai(uint256,address,address)", +"5e5de297": "getUidAsInteger(address,address)", +"5e5e305e": "bbAirdropWallet()", +"5e5e4cc5": "ownerToArmy(address)", +"5e5f2e26": "allowedTokens(uint256)", +"5e5f2e37": "startedNewVote(address,uint256,string,uint256)", +"5e5ff24b": "addUsersToGroup(bytes32,address[])", +"5e601fed": "changePaymentAddress(address,uint256)", +"5e604b60": "addWhiteListedContracts(address)", +"5e6096c5": "setMinimumTokenSell(uint256)", +"5e60d438": "LicerioToken()", +"5e615a6b": "getParams()", +"5e62463a": "TransferLimitedToken(uint256,address,address[],address)", +"5e62af4d": "grandJackpot(uint256,uint256)", +"5e645680": "getRegulatoryAuthorities(address)", +"5e64f392": "_completeTask(uint256)", +"5e6558e5": "addAtkPlayerQuest(address)", +"5e65db7f": "deleteThis(uint256)", +"5e66dfee": "regularPayment()", +"5e66eb1b": "phaseClaim()", +"5e675098": "addFoundation(address,uint256,uint256,uint256)", +"5e68ac2c": "Kingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"5e68d459": "_getRNGValue(uint256)", +"5e6911af": "hardcapReached()", +"5e6936ac": "HitToken(uint256,string,uint8,string)", +"5e6992e3": "rcnFundDeposit()", +"5e6a7777": "setCompte_39(string)", +"5e6ad49d": "_setCosignerAddress(address)", +"5e6b4ee5": "increaseRate(uint256,address)", +"5e6b7a5c": "getUnitsDefense(address,uint256,uint256)", +"5e6c5d77": "number_of_deals()", +"5e6cbd6d": "_getRandom(uint256,address)", +"5e6db193": "Bithenet()", +"5e6e91ac": "Mint(uint256,address,string)", +"5e6eb33a": "CampaignClosed(uint256)", +"5e6f6045": "vestingContract()", +"5e6fa5ea": "inclusionEnExchange()", +"5e6fc129": "isRecord(string)", +"5e6fc8b4": "getChildrenCount()", +"5e7037d0": "removeSpriteFromSale(uint256)", +"5e7051cd": "setQuickPromoInterval(uint128)", +"5e70a6dc": "increaseLock(uint256,uint256)", +"5e715c16": "ICO_CONTRACT()", +"5e717e2d": "readDeal(string,address)", +"5e71823b": "numPositions()", +"5e71c7fa": "testCheckRokSold()", +"5e733baa": "openEgg(uint64,uint16)", +"5e734f5c": "revealBid(bytes32,uint256,address,bytes32,bytes32,uint256,uint256)", +"5e73dd37": "tokenCapPhaseOne()", +"5e7591e2": "register(bytes32,address,address,bytes32,bytes32)", +"5e763377": "ModifyMarking(bytes32,uint256,uint256)", +"5e763946": "setTaxationPeriod(uint256)", +"5e76a101": "onlyOwnerSetTeamWallet(address)", +"5e77eec0": "setAdminsAddress(uint256,address)", +"5e7893e2": "showprize()", +"5e78998e": "BatLimitAsk()", +"5e79f1cb": "approvedByAdmin(address,uint256)", +"5e7aa842": "createEvent(bytes32,bytes32[],address,uint256)", +"5e7b9832": "updateItem(uint256,uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"5e7be40d": "getBeneficiaries(address,address)", +"5e7c85b1": "totalContrib(address)", +"5e7cafa4": "startPayments(uint256,uint256)", +"5e7d6fd0": "airdropHasExpired(address,uint256)", +"5e7f092c": "_createNFTCollectible(uint8,uint256,address,uint256,uint256[5])", +"5e7f22c2": "postBuyOrder(address,address,uint256,uint256)", +"5e7f322b": "exchangeEthToEur(uint256)", +"5e8023d1": "cascades(uint256)", +"5e80377b": "buySaleReferred(uint8,address)", +"5e815320": "forward_pass2(uint256[],int256[],int256[],int256[],int256[],int256[])", +"5e816740": "rollDice(uint256,address)", +"5e81b958": "isNonFungibleItem(uint256)", +"5e81ba96": "DestroyedBy(uint256,address)", +"5e8254ea": "commitVoteOnProposal(bytes32,uint8,bytes32)", +"5e825564": "setFactory(address,address)", +"5e83b463": "placeBet(uint256,uint256,uint256,uint256,bytes32,bytes32)", +"5e84d723": "publicSupply()", +"5e850225": "closePeriod(uint256,uint256,uint256)", +"5e8507f8": "destTokensAngel()", +"5e855f14": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"5e85db0a": "getMinSkills(uint256)", +"5e8714d5": "changeSaleAgent(address)", +"5e871f0c": "dividendDistributionDuration()", +"5e885c63": "getPack(uint8,uint128)", +"5e89d92a": "Credentials(bytes32,bool)", +"5e8a6044": "foundersFundTimelock3Address()", +"5e8a79e1": "setRef()", +"5e8a8b00": "setDocHash(string,bytes32)", +"5e8aedce": "SubajToken()", +"5e8af735": "placeBet(uint256,string)", +"5e8be190": "getCar(uint256)", +"5e8c63bb": "vehicle_assembled(uint256)", +"5e8e9589": "_createPenguin(string,uint256,uint256)", +"5e8f5022": "issueTokensWithReferral(address,uint256)", +"5e8f6597": "distributeInvestorsTokens(address,uint256)", +"5e90852d": "proposeTransaction(address,uint256,bytes)", +"5e90a9ff": "_getLotteryNum(uint256,uint256)", +"5e916b46": "rinkeby2()", +"5e91ba21": "checkSecret(address,string,bytes32)", +"5e91c37d": "tokensSoldInPresale()", +"5e91c5ed": "specialTransfer(address,uint256)", +"5e91d8ec": "updateEmployee(address,uint256)", +"5e943a30": "calculateReferralBonus(uint256)", +"5e949fa0": "changeDestination(address)", +"5e956abf": "createMeshPoint(string)", +"5e959287": "getSignature(string)", +"5e95ff98": "updateFreeze(address)", +"5e968a49": "ownerSetMaxProfitAsPercentOfHouse(uint256)", +"5e97894a": "TNPC()", +"5e983156": "getJudgeVoted(uint256,address)", +"5e983d08": "setPrices()", +"5e986ec7": "PoezenVoting(uint256,uint256)", +"5e987d32": "last_slot()", +"5e98e4c7": "abstain()", +"5e9a1849": "numDonations()", +"5e9a31fb": "MINBET_perSPIN()", +"5e9a523c": "assetPrices(address)", +"5e9a8c42": "get_deal_state(uint256)", +"5e9afc0e": "ERC223TestToken(string,string,uint8,uint256,address)", +"5e9bcab0": "getReferrerRates(address)", +"5e9d2b1f": "roundSize()", +"5e9d2e7b": "exchangesWallet()", +"5e9dbcb7": "_tag(string,string)", +"5e9e2226": "setOraclizeWinnerGasFee(uint256)", +"5e9f9613": "availableReserve()", +"5ea050ec": "InitiateCompanies()", +"5ea102b0": "Base()", +"5ea187c9": "BuildByteArray(bytes)", +"5ea194a3": "createScalarEvent(address,address,int256,int256)", +"5ea1bb17": "winInternal(address,bytes32)", +"5ea1d6f8": "commissionRate()", +"5ea1fc6a": "NAME_SATOSHI()", +"5ea27e40": "PRESALE_END_TIME()", +"5ea36bd6": "MultiHolderVault(address,uint256)", +"5ea39624": "ATTR_SEEDED()", +"5ea3ad0a": "doWithdrawal(uint256)", +"5ea40983": "addMember(address,uint256,bool,string)", +"5ea4cf50": "AMPTToken()", +"5ea56918": "BIAToken()", +"5ea63913": "getInvestorBalance(address)", +"5ea6474d": "getPVPBattleResult(uint256,uint256,uint256)", +"5ea67956": "CrowdtesICO()", +"5ea81231": "ownerAddRole(address,string)", +"5ea81e07": "editAccountData(address,string,bytes)", +"5ea82efb": "MariaToken()", +"5ea8cd12": "setMinPrice(uint256)", +"5ea8cf00": "PardiICO()", +"5ea94bcf": "updateUserTrustRankForMultipleChannels(address,bytes12[],int256[])", +"5ea95215": "SpaceXToken()", +"5ea98520": "changeNewExchange(address)", +"5ea9caff": "FrozenFund(address,bool)", +"5eaa6ca4": "_cancelMarkets(uint256)", +"5eaaa699": "SALES_SUPPLY()", +"5eaad235": "getDataByDeviceId(uint8,uint8)", +"5eab15e4": "devuelveApps(bytes32)", +"5eabc684": "updateIssuanceData(address,uint256,uint256)", +"5eabe01e": "saleSuccessful()", +"5eac1414": "UNIQ(uint256,string,string)", +"5eac6239": "claimRewards(uint256[])", +"5eac85d5": "burnGasAndFreeFrom(address,uint256,address,address[],bytes)", +"5ead330c": "getDungeonFloorDetails(uint256)", +"5ead8846": "updateFundsOwner(bytes32,bytes32)", +"5eadd607": "debugResetSubmissions()", +"5eae177c": "isTransferAllowed(address,uint256)", +"5eaefac1": "reservePricing()", +"5eaefb31": "CARD_TAKE_SHARE()", +"5eafe515": "newDeveloper(address,string)", +"5eb08d8a": "setBurnRate(uint8)", +"5eb101c3": "capped()", +"5eb17cdb": "setBeginTime(uint256)", +"5eb19ad1": "recalcAmountWithFees(uint256,bool)", +"5eb19eda": "InitiatePlanets()", +"5eb1f936": "JBToken()", +"5eb28fb2": "Robot()", +"5eb332da": "updateAward(uint256)", +"5eb38bef": "setcommissionPer(uint256)", +"5eb3f639": "assertTrue(bool,bytes)", +"5eb456c1": "goldIssueBurnFee()", +"5eb51d3c": "setTrancheMinTx(uint256)", +"5eb53bfa": "test_standardCampaignConstructionValuesFailsDueToNoParameterValidation()", +"5eb604bc": "GongChuangToken()", +"5eb61aa9": "executeSignedCall(address,uint256,uint256,bytes,bytes)", +"5eb62178": "getMinAmount(address)", +"5eb62d75": "sendPrivateSaleTokens(address,uint256)", +"5eb6a78f": "gamesCounter()", +"5eb7413a": "lockedTokens(address)", +"5eb7556f": "currentRoundIsActive()", +"5eb9bbf7": "founderTokenUnlockPhase4()", +"5eba2472": "Migrations3()", +"5ebad2ab": "GrowthPool_Supply()", +"5ebaf1db": "staker()", +"5ebb7077": "mkDomain(bytes32,address)", +"5ebc1db8": "positionScount1(address,address)", +"5ebc7826": "CasCoin()", +"5ebca187": "testFailTransferWhenStopped()", +"5ebcaf7e": "sendBuyAgent(int256,int256,int256,int256)", +"5ebcc621": "endFundraising()", +"5ebcfe50": "taxTransfer(address,address,uint256)", +"5ebd2196": "getMyBalanceDNT()", +"5ebd9a83": "add(bytes32,address,address)", +"5ebdd159": "tokenAvailable()", +"5ebe4746": "CCPLUS(uint256,string,string)", +"5ebe7c72": "reply(string)", +"5ebfed78": "buyRegion(uint256,uint256,uint256,string)", +"5ec01e4d": "random()", +"5ec0c707": "winnerFromGas(uint256)", +"5ec112a2": "setPreSaleOpened(bool)", +"5ec1b499": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"5ec1fc19": "convertMint(address,uint256)", +"5ec211a1": "accountOfN(address)", +"5ec2c7bf": "auctioneer()", +"5ec2dc8d": "depositReward()", +"5ec30be2": "assignListingDB(address)", +"5ec38bec": "updateFundWallet(address)", +"5ec3f160": "secondsInDay()", +"5ec4eb95": "GoldWhitelist(address,bool)", +"5ec5bc8e": "pushOrderOfOwner(address,uint256,bool)", +"5ec5bed6": "coupon(uint256,uint8,uint8,bytes32,bytes32)", +"5ec70cd2": "_getProviderPriv(uint256)", +"5ec72a90": "maxCumAcceptedDeposits()", +"5ec81130": "calcBonusRate()", +"5ec88c79": "getAccountLiquidity(address)", +"5ec93cb2": "withdrawal_gas()", +"5ec94770": "RhinexFundCoin()", +"5eca2aeb": "getBytesArrayIndex(bytes32,uint256)", +"5ecb16cd": "withdrawTokens(address[])", +"5ecb6594": "isCoreContract()", +"5ecb7d20": "testGetCaseCount()", +"5ecc33ac": "testPrivacy()", +"5ecc7975": "YUPVesting(address,uint256,uint256,uint256)", +"5ecd62b9": "divCut()", +"5ecef65f": "setTactics(uint256,uint8,uint8)", +"5ecf36f7": "Print(string,uint256)", +"5ecf71c5": "decreasePower(uint256)", +"5ecfdcfc": "KnownTokens(address,address,address)", +"5ecff851": "p_setDevAddress(address)", +"5ed0f3fd": "changeVariables(address[],uint256[],address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"5ed16294": "nacBalance()", +"5ed188c9": "MNTToken(address)", +"5ed18d95": "CollatLending()", +"5ed31991": "lastLockingTime()", +"5ed411e5": "setNewToken(address)", +"5ed4382f": "fourthStageMinting()", +"5ed49e9b": "ADVISERS_AND_FRIENDS_WALLET()", +"5ed4d7ae": "_getTokenAmount()", +"5ed50033": "myetherpay(uint256,string,string)", +"5ed5684c": "HCHToken(uint256,string,string)", +"5ed570f3": "toggleCanCreateGames()", +"5ed5ea28": "whiteListContract()", +"5ed65228": "sponsoredJackpotMin()", +"5ed66172": "getCertificateForWallet(address,address,address)", +"5ed66998": "usingOwnership()", +"5ed6a8e7": "setData_13(string)", +"5ed73bc7": "distribute(address,uint256,address[],uint256[],uint256)", +"5ed75366": "DEVELOPER_FEE_FRAC_TOP()", +"5ed7ca5b": "halt()", +"5ed81ebe": "getInspireTokens(address,address,uint256)", +"5ed84aa6": "getNymCenterAPIURL()", +"5ed85753": "ergoam(uint256,string,string)", +"5ed9ebfc": "soldTokens()", +"5eda17bc": "_tuneLambo(uint256,uint256)", +"5eda232d": "getTokenStakeByIndex(uint256)", +"5eda5b9a": "interestCollected()", +"5edabc99": "getPresaleEndTime()", +"5edb2fb3": "uint256ToBytes32(uint256)", +"5edc1ac8": "discountDecimal()", +"5edc9bff": "upgradeUnitMultipliers(address,uint256,uint256,uint256)", +"5edca2b4": "unsuccessfulWithdrawal()", +"5edd4436": "newOffer(bytes32,string)", +"5eddd157": "claim(uint256,uint256,bytes)", +"5edf34d4": "Transfer(address,address,address,address)", +"5edf413e": "burn(bytes32,address,uint256,bytes)", +"5edf8d3c": "SetAdOwner(uint256,address,address)", +"5edfa1f8": "calculateFees()", +"5edfd788": "completedGames()", +"5ee0f535": "_mint(address,bytes32,string,uint256)", +"5ee10f3b": "instruct_2()", +"5ee2a018": "deployMultiToken()", +"5ee2cec2": "issuerDateMinutes()", +"5ee345e4": "computeEndowment(uint256,uint256,uint256,uint256,uint256,uint256)", +"5ee4e3f8": "LocklistAddressisListed(address)", +"5ee58efc": "distribution()", +"5ee5a409": "transfer_token1_toContract(address,address,uint256)", +"5ee5e9ee": "SaleStarted(uint256,uint256,uint256)", +"5ee679f9": "removePolicyFrom(address)", +"5ee6cc38": "buyToken(address,address)", +"5ee7144c": "_removeTopic(string)", +"5ee759e8": "encodeCurrency(string)", +"5ee760a5": "hashHardCap(uint256,uint256)", +"5ee7b392": "sendToken_internal(address,uint256)", +"5ee7cd23": "isBCFBuyMarket()", +"5ee7e96d": "grant(address,uint256,uint256,uint256,uint256,bool)", +"5ee857d1": "test_insert_findWithHintPrevUpdateTail(int256)", +"5eeb9ff9": "get_transferLock()", +"5eebc031": "newReadAddr()", +"5eebea20": "pending(address)", +"5eec743b": "minContributionMainSale()", +"5eec9df0": "softCapWei()", +"5eecbad8": "getFunderByIndex(bytes32,string,uint256)", +"5eecdec0": "unLockup()", +"5eed1f1a": "setTotalIndividualWeiAmount(address,uint256)", +"5eed3dcb": "donorList(uint256)", +"5eed886b": "minimumPerTransaction()", +"5eedbceb": "emitTransferFeeUpdated(uint256)", +"5eee006a": "secondStageStartsAt()", +"5eee7078": "sendETH(uint256)", +"5eeeee22": "setMaxWin(uint8)", +"5ef013d0": "Ico()", +"5ef17eff": "getSettingValuesById(uint256)", +"5ef1bfdb": "landPriceWei()", +"5ef27d1a": "hasRazCompleted(uint256)", +"5ef2a3f4": "giveAwayInProgress()", +"5ef2c79a": "getMyNmBet(uint256,uint256)", +"5ef3f3d1": "voteRelease()", +"5ef3f9e1": "BETS_CLOSING_TIME()", +"5ef4d2af": "_calculateTokenAmount(uint256)", +"5ef4ed42": "setBattleTokenAddress(address,address)", +"5ef505c0": "discoveryBlocksUntilAllowed(uint256)", +"5ef572ad": "stageMgmtSystem()", +"5ef5cdb2": "doFailedOffer(uint256)", +"5ef6228c": "bytesToAddr(bytes)", +"5ef652ad": "EtherFarmDevSim()", +"5ef6543c": "YDMediaToken()", +"5ef680df": "flushTokens(address,address)", +"5ef6ad57": "Delivery()", +"5ef74958": "Epam()", +"5ef78561": "cashWallet(address)", +"5ef79434": "DATE_PRESALE_END()", +"5ef7ac4d": "startRedeem(uint256,bool)", +"5ef7b303": "getPI_edit_14()", +"5ef80c87": "create20ContractToy()", +"5ef82429": "tixPromo()", +"5ef8ce5d": "setPollType(uint256,address)", +"5ef8da77": "Altruism()", +"5ef97145": "BokkyPooBahsAutonomousRefundathonFacility()", +"5ef9dde8": "removeApprovedGame(address)", +"5eface14": "numStakersForPoll(bytes32)", +"5efb4dc5": "deathData_a7()", +"5efb8266": "setGoldContractAddress(address)", +"5efbb728": "transferold(address,uint256)", +"5efbcfba": "minWeiToBuy()", +"5efbdc47": "setLastBidId(bytes32)", +"5efc156f": "Roles2LibraryAdapter(address)", +"5efd1682": "transferPreSigned(address,address,uint256,uint256,uint256,bytes,bytes32,bytes32,uint8)", +"5efd3c41": "whiteListEndBlock()", +"5efdb1e4": "percentToTakeAsSeed()", +"5efe2fcf": "releasedLockedAmount()", +"5eff7d8f": "getAccountLiquidityInternal(address)", +"5eff7dae": "getInstructors()", +"5eff8b48": "Prakashcoin()", +"5effd20d": "withdrawForAddress(address,uint256)", +"5f01b42f": "alloweRefund()", +"5f02116f": "claimRewards(uint256[],uint256[])", +"5f024e91": "testCheckEthBalance()", +"5f0379f5": "firstPriceChange()", +"5f038b6d": "refillFunds()", +"5f05b3e4": "HappyToken(uint256,string,uint8,string)", +"5f05b9df": "removeTWhitelist(address)", +"5f065346": "pay(address,uint256,uint256)", +"5f06541d": "resetOwner()", +"5f065b4a": "checkItem(bytes32)", +"5f06900b": "changeBattleFee(uint256)", +"5f073f49": "gatherDetails(uint64[])", +"5f07a3e5": "addAllNewTicket(uint256,bytes32[],uint256[],uint256[],uint256[])", +"5f07bd15": "take_fees_eth_owner()", +"5f09952e": "voteAllowTransactions(bool)", +"5f0b37e4": "VeritokenToken()", +"5f0d5296": "reserveAllowance()", +"5f0d995b": "developer_string_contract_verified(string,string)", +"5f0da25b": "sendDeposit(uint256,address,uint256,bytes32)", +"5f0da5c9": "create(string,address,address,address,address,bool)", +"5f0e3855": "ownerRefundUser(bytes32,address,uint256,uint256)", +"5f0edfb8": "create(bytes,bytes32,bytes1)", +"5f0f1f85": "transferProposalEnd()", +"5f0f7786": "IssuedToken(address[],uint256[],uint256,uint256,address,string,uint8,string)", +"5f0fc2e8": "RealMoneyToken()", +"5f104c5f": "SalesAgentPermissionsTransferred(address,address)", +"5f111074": "picopsCertifier()", +"5f112c68": "renounceMinter(address)", +"5f11301b": "setServiceURI(string)", +"5f1231ea": "getMemberInfo(address)", +"5f141a0f": "confirmWrite(bytes32,address)", +"5f14af16": "Subscribe(address,address,uint256,uint256,uint256)", +"5f14e108": "openTokensale(address)", +"5f159e60": "TimeBoundaryChanged(string,uint256)", +"5f167276": "getNumElements()", +"5f17114e": "TimeDeposit()", +"5f1768c1": "buyerHistory()", +"5f1845f6": "transferDecimalAmountFrom(address,address,uint256)", +"5f184eda": "withdrawFactoryResourceBalance(uint16)", +"5f185329": "submitOrder(bytes)", +"5f1877a8": "productPrice(string)", +"5f18aa0c": "decimals(bytes32)", +"5f196876": "allPromotions(uint256)", +"5f19c7b2": "doSetSettings(uint256)", +"5f1a6f4b": "BARL()", +"5f1b3ee6": "getAPAddressSize()", +"5f1b46ab": "inflateToken(address,uint256)", +"5f1ca2fc": "ReferralRegistered(address,address)", +"5f1d146e": "eeeeeeeeeeeee()", +"5f1d7037": "KEDToken()", +"5f1d804f": "checkTxProof(bytes32,bytes,uint256[],bytes,bytes)", +"5f1d90ae": "getCurrentOpinion()", +"5f1e1c28": "__transfer(address,address,uint256,bytes)", +"5f1e580d": "ETUToken()", +"5f1e8c1b": "MAX_MODULES()", +"5f1f6c5e": "delFromList(uint256,address[])", +"5f1fc571": "set_prices(uint256,uint256,uint256)", +"5f1ff549": "issued()", +"5f222da1": "latestMomentOf(uint256,address)", +"5f227bfc": "totalPlayerTokenContracts()", +"5f22c42f": "getBuyerReceipt(address)", +"5f238402": "lastAllowancePaymentTimestamp()", +"5f241c8e": "AnythingToken(uint256)", +"5f24f6fe": "setUpgradedAddress(address)", +"5f2536f7": "calculateMaxContribution(address)", +"5f27e47d": "GetWinnerAt(uint256)", +"5f27f6e3": "getPlayerGeneralAll(uint32)", +"5f27f946": "handleTokens(address,address,uint256)", +"5f28213b": "SCTC(uint256,string,string)", +"5f28b383": "minPerUser()", +"5f28cb74": "getSubscription(bytes32,address)", +"5f2961e1": "walletFounder1()", +"5f2a9f41": "MAX_GAS()", +"5f2aeae9": "executeCreator(uint256)", +"5f2af8d9": "Logocoin()", +"5f2b9ac0": "startPhase3()", +"5f2bb66e": "BatchTransfer(address)", +"5f2befb9": "hasTerminated()", +"5f2bf49a": "BitcoinRateUpdated(uint256,uint256)", +"5f2da7ec": "todayDays()", +"5f2e0c20": "giveConsent(uint8,bytes32,bytes32)", +"5f2e2b45": "freeFrom(address,uint256)", +"5f2e4b31": "testDisputedInvalidSequenceWrongWriteAddress()", +"5f2e686d": "Ethereum_eight_bagger()", +"5f2e8493": "addmoney(address,uint256)", +"5f2ebcf2": "GMRToken()", +"5f2ef12d": "tokenFactory(uint256)", +"5f2f83ba": "getMul(uint256)", +"5f2fb08e": "removeElement(address)", +"5f3040bf": "getMIRABALANCE()", +"5f304615": "earlyAllocation()", +"5f309123": "sale2(address,uint256)", +"5f30ed2a": "withdrawAmountFromToken(uint256,uint256)", +"5f31ea82": "holdTokenInvestors(uint256)", +"5f32714d": "ChannelSettled(address,address,uint32,uint192,uint192)", +"5f3292d7": "DMCTCoin()", +"5f330669": "dateMove(uint256)", +"5f33afdb": "preallocCoins()", +"5f33c5e1": "Payout(bytes32,address,address)", +"5f34165d": "isRightBranch()", +"5f3616eb": "getNextOnce(address,uint256,uint256,uint256)", +"5f3619b1": "getProfitFromSender()", +"5f373c22": "setHydroContractAddress(address)", +"5f37b43f": "_getType(uint256,uint256)", +"5f3893ef": "getReward(address,uint256,address)", +"5f399d28": "TokenIceBox(address)", +"5f39fd73": "approveUpdate(uint256,address,bool)", +"5f3aa2bb": "checkIfRewarded(bytes,uint256,bytes,bytes)", +"5f3bc04c": "addressFundInvestment()", +"5f3c15ed": "radtokenSupply()", +"5f3c23be": "isProposalNotExpired(bytes32,uint256)", +"5f3c6686": "challengeBook(address,address)", +"5f3c91ad": "accrueEther()", +"5f3ca167": "crowdSaleInitialized()", +"5f3cebcd": "incrementalInverse(uint256,uint256)", +"5f3d634f": "freezeMulti(address[],uint256[],uint256[],uint256[])", +"5f3d7fa1": "maxAttendees()", +"5f3e3db0": "increaseWeeklyTransactionVolumeSending(uint256)", +"5f3f703c": "gifter()", +"5f403edc": "addThenSub(uint256,uint256,uint256)", +"5f40fc27": "withdrawGoldMoney()", +"5f412d4f": "releaseTokenTransfer()", +"5f412ff1": "ownerEnablePayee(address,address)", +"5f41ccef": "multMint(address[],uint256[])", +"5f421776": "switchONfreeForAll()", +"5f429ba5": "Risk()", +"5f437e48": "settingsState()", +"5f43e49c": "isDataYes(bytes)", +"5f4402c5": "distributeTokenToAddressesAndAmounts(address,address,address[],uint256[])", +"5f45161f": "payToInviter(uint256)", +"5f45221d": "retrieveIncompleteProof(bytes32)", +"5f452df1": "approveCrowdsale(address)", +"5f456c1f": "assignedAmountToEcoReward()", +"5f45c179": "ABYSS(address,address[],address)", +"5f46d750": "amountOfDividendsPayouts()", +"5f4784a5": "allOf(address)", +"5f478f74": "Milestone(string,uint8)", +"5f47ba42": "Plendito()", +"5f4821ab": "ContractFactory()", +"5f4874e4": "multiTransfer(address[],address[],uint256[],string)", +"5f48f393": "maxAmount()", +"5f493f63": "convertToMini(uint256)", +"5f495491": "claimsCreated()", +"5f4964e0": "setMarketComissionRatio(uint256)", +"5f497a09": "adminCharge_p1()", +"5f49c5ac": "_addRecoverer(address)", +"5f49d562": "QSTPerEth()", +"5f4a47c3": "updateUpdater(address,string)", +"5f4b125b": "get_pre_kyc_bonus_numerator()", +"5f4b2873": "getDepositedValue(address)", +"5f4b9b4f": "getPolicyCount(address)", +"5f4c71f1": "getTotalETH()", +"5f4dd2d8": "mintPreico(address,uint256)", +"5f4eab65": "hasEditionInProgress(uint256)", +"5f4ed0b1": "rebalanceBucketsInternal()", +"5f4f35d5": "setFullName(string)", +"5f504a82": "ownerCandidate()", +"5f5082dd": "setLast(uint256,address)", +"5f51028d": "checkIsReleaseRecordExist(uint256)", +"5f515226": "checkBalance(address)", +"5f516131": "ReserveUnknown(bool,uint32,uint256,uint256)", +"5f51d526": "balanceMapPos(address)", +"5f51db02": "Memes()", +"5f52583b": "processStorageRoot(address,uint256,bytes,bytes)", +"5f52e9fd": "WithdrawCashForHardwareReturn(uint256)", +"5f538fd4": "openMigrationPhase()", +"5f539d69": "addContract(address)", +"5f53e077": "setPausedTransfers(bool)", +"5f5404af": "PriceProvider(string)", +"5f542c94": "emitAreaEvaluated(address,address,uint8,uint256)", +"5f54a1c7": "requestEndCall()", +"5f54ae17": "buy50Price()", +"5f54fa98": "conventionId()", +"5f561763": "rolloverPosition(address,uint256,uint256,address)", +"5f56315b": "enableSell()", +"5f56b6fe": "safeWithdrawal(uint256)", +"5f56e134": "averageArtworkSalePrice()", +"5f5810ea": "UBIT2018069()", +"5f5868db": "freezedValue()", +"5f589599": "resultsPublished()", +"5f58ed2a": "disableBot(address,uint64)", +"5f596681": "setShpExchangeRate(uint256)", +"5f598510": "KVMToken()", +"5f59940c": "addressToSpentEther(address)", +"5f5a98ee": "dragonGirlLotteryPrice()", +"5f5bb161": "set(bytes20,uint256)", +"5f5d867b": "CryptoPoosToken()", +"5f5db5dc": "setVariables(string,address,uint256,int256,bool,bytes32,address[2],uint256[2],int256)", +"5f5df710": "updateCertifier(address)", +"5f5e38b6": "setBuyPrice(uint16,uint16,uint8,address,uint256)", +"5f5f23a0": "charityFactor()", +"5f5f2aef": "amendRetention(uint8,uint8)", +"5f5f62f9": "setControler(address)", +"5f5fa782": "getCurrencyByte(uint256,uint256)", +"5f5fca9a": "setEnforceAddressMatch(bool)", +"5f6076bf": "Access()", +"5f60a5d4": "CompleteWildcard(uint256,address)", +"5f60ef47": "get_heaps(uint256)", +"5f60f485": "updateStatus()", +"5f61a26e": "PRESALE_ETHER_MIN_CONTRIB()", +"5f61bf99": "claimG()", +"5f623e15": "divisible_units()", +"5f645f16": "setInputFile(uint256,bytes32)", +"5f647d5a": "ethSignedMessagePrefix()", +"5f64b55b": "tokenB()", +"5f65545d": "Raffle_Prize()", +"5f65d621": "setSkill(uint256,uint256,uint256,bytes32)", +"5f65d703": "setInfo(bytes32,uint256)", +"5f65faf1": "isProduct(bytes32)", +"5f677404": "INITIAL_VALUE()", +"5f68688f": "endFirstBonus()", +"5f68804e": "SimpleLotto()", +"5f689fed": "startPVE(uint256)", +"5f6a1301": "clearPending()", +"5f6a4546": "ROLE_REVIEWER()", +"5f6acfe9": "_updateRate(uint256,uint256)", +"5f6d0ded": "ReservationFund(address)", +"5f6dd297": "getProjectEndDate(bytes32)", +"5f6e388a": "ProofOfCloneWars()", +"5f6ea340": "revokeAccess(address,address)", +"5f6ecea0": "vestedTransfer(address,uint256,uint256)", +"5f6edff8": "assureDAppIsReady()", +"5f6f8b5f": "setExclude(address)", +"5f7033e5": "getCurrentStartTime()", +"5f704f3e": "updatePrice(bytes32,uint256)", +"5f70d9ac": "getBot(uint256)", +"5f7118c7": "setRevealOpen(uint256)", +"5f71249c": "changeOrganisationName(string)", +"5f722859": "updateHashValue(bytes32,bytes32)", +"5f723b50": "getInitialReportMinValue()", +"5f72a508": "playerPopMining(uint256,bool)", +"5f72f450": "check(uint256)", +"5f73d6c0": "promisedTokenBalance()", +"5f746233": "dispense(address)", +"5f74a5ec": "pecunioWallet()", +"5f74bbde": "vote(address,uint256)", +"5f74c16c": "getPrizePot()", +"5f75b5ef": "whitelistAddress(address,address)", +"5f75cb6b": "getCountTransferInsToken(address,address)", +"5f75d62d": "addCard(uint256,string,bool)", +"5f7619a4": "takeFee(uint256)", +"5f766118": "salutaAndonio()", +"5f76e49a": "addPerson(bytes32,bytes32,bytes32,bytes32,uint256,bytes32,address)", +"5f770d47": "HyperSale()", +"5f77ace0": "stop_token_time()", +"5f7807a4": "transferToUser(address,uint256)", +"5f788531": "buy5Price()", +"5f791c7c": "ZRSToken()", +"5f7a7bb5": "returnRegDate(address)", +"5f7b68be": "addKey(address)", +"5f7b73b2": "getInvestorCredit()", +"5f7b764f": "_getLuckySpaceshipMoney(uint256,uint256)", +"5f7bb7f1": "setMaxProfit(uint128)", +"5f7c944f": "mintAccount(uint256,uint256,uint16,bytes32,uint256)", +"5f7cbc39": "addressOfTokenUsedAsReward2()", +"5f7cfe49": "internalSalt(bytes32)", +"5f7d897e": "checkVendor()", +"5f7dfd3f": "totalPaidToFunders(bytes32)", +"5f7e61fa": "SendTo(address)", +"5f7e7138": "setDth(address)", +"5f7ee166": "setupOpenDistribution(uint256,uint256,address,address)", +"5f7eed5d": "LeajoeToken()", +"5f7f9482": "statusQuery()", +"5f800348": "balancesImporter1()", +"5f802448": "specialAttacks(uint256)", +"5f8162bb": "transferTokenContractOwnership(address)", +"5f824297": "SellOrderPlaced(uint32,address)", +"5f84d0f9": "tokenR0()", +"5f84e343": "Artemine()", +"5f84f302": "setInterestRate(uint256)", +"5f852975": "randomtests()", +"5f8534ae": "claimDeposit(uint256)", +"5f856dbf": "Token_AllowTransfer()", +"5f85abdc": "contains(int256,int256)", +"5f865912": "addContract(address,address,uint256,string,bool)", +"5f877108": "sendToCharger(uint256)", +"5f88bff0": "presaleFundingGoal()", +"5f88e83d": "checkAndCallTransfer(address,address,uint256,bytes)", +"5f88eade": "opened()", +"5f88ffed": "wallet10()", +"5f8909bd": "biddingPeriod()", +"5f8a3029": "Standard_4()", +"5f8a7eab": "getReleaseAmount()", +"5f8aaa69": "sourceToken()", +"5f8aaef7": "contractStakeToken()", +"5f8af054": "getMessageLength(string)", +"5f8b93d2": "SingularityTest13()", +"5f8bad42": "getCommunityBallotWeiPrice()", +"5f8c1fce": "nextBracket()", +"5f8c494f": "IntIDQuery(address)", +"5f8cb3f6": "bounty_paid()", +"5f8cf6c4": "SMILO_SALES_AMOUNT()", +"5f8cf7c5": "PermissionGroups()", +"5f8d96de": "getDeadline()", +"5f8e38e1": "depositERC20Compatible(address,uint256,uint256,uint256)", +"5f8eb4c7": "jsub(uint256,uint256,uint256,uint256,uint256,uint256)", +"5f8f0483": "buyBankerAgreementFromImporterBank()", +"5f9094f5": "GetCreditsPerEth()", +"5f9145ef": "RefundReceived(uint256)", +"5f918b05": "ServiceProviderDisabled(address,bytes)", +"5f91af39": "_increasePlayerDivis(address,uint256)", +"5f9209ad": "getPositioninterestPeriod(bytes32)", +"5f92dee8": "adminGetWorldSnapshot(uint256)", +"5f932d71": "walletSetSigner(address)", +"5f945733": "getTotalInvested()", +"5f94e3de": "setSecondaryOperator(address)", +"5f94e82c": "setBridgeValidatorsProxyOwner(address)", +"5f956244": "TribePlatform()", +"5f9590fc": "_isValidDataHash(bytes32,bytes)", +"5f95ad43": "HasNoEtherTest()", +"5f9602e8": "perClaim()", +"5f96d9fa": "gemSpeedConversion()", +"5f972df8": "_jDiv(uint256,uint256,uint256,uint256)", +"5f984bf6": "changeFounder(address,string)", +"5f9973b9": "WeiToken()", +"5f99c1b2": "_landholderJackpot(uint256)", +"5f99e8f5": "GetSeries1()", +"5f9a2c23": "endFourthWeek()", +"5f9aa94f": "SpiceRates(address,uint256)", +"5f9ac1a5": "distributeLeaderboardRewards()", +"5f9adf84": "getUserSentTradeOfferId(address,address)", +"5f9b71ce": "bet(uint256,address)", +"5f9bad28": "saleBonus()", +"5f9c84b5": "transferirSala(address,uint256)", +"5f9cb50d": "updateMasks(uint256,uint256,uint256,uint256,uint256)", +"5f9dfc79": "minBuyTokenAmount()", +"5f9e1080": "settleBet(uint256,address,uint256)", +"5f9e3c98": "canSetNewOwnerPercentage(uint256)", +"5f9f3f46": "MakeSharesFromAmount(uint256)", +"5f9f4734": "birthday()", +"5fa13b49": "shweta()", +"5fa21f1f": "enableBetting()", +"5fa27af0": "GITC()", +"5fa382ea": "getPixelsOwned(address)", +"5fa3df98": "changeKYCStatus(address,bool)", +"5fa413b0": "ownerShareInPercent()", +"5fa44602": "tokenCreationDate()", +"5fa458b7": "buysoldiers(uint256)", +"5fa51277": "emergencyExtract()", +"5fa513d5": "findPtr(uint256,uint256,uint256,uint256)", +"5fa58268": "approveRequestPause()", +"5fa60fc8": "DCAsset(address)", +"5fa67c00": "Credit(address,address)", +"5fa77dac": "all(bool[6])", +"5fa7b584": "removeToken(address)", +"5fa7dc56": "getCurrentRateWithBonus()", +"5fa7df6b": "setDelegateAndLockTokens(uint256,address)", +"5fa87163": "viewlisting(uint256,uint256)", +"5fa8c869": "_getRandomPartSubtype(uint256,uint8[])", +"5fab11a5": "startICO(uint256,uint256,uint256)", +"5fac4996": "findSignedSubscriberIndex(address)", +"5fad18e4": "Visualrockcoin()", +"5fad3b1a": "initialiseContract(address,uint256)", +"5fad663e": "expectedDividends(address)", +"5fae0576": "isWhitelistedAddress(address)", +"5faeb944": "setData_22(string)", +"5faeced2": "removeFromUserCounter(uint256)", +"5faf2880": "changeDna(uint256,uint256)", +"5faf6675": "forecastInfo(uint256)", +"5fb02f4d": "startContract()", +"5fb07a62": "getDrugs()", +"5fb0ac18": "birthDragon(uint256)", +"5fb130af": "retry(address)", +"5fb135f9": "distributeAff(uint256,uint256,uint256,uint256)", +"5fb1552c": "GanaLocker(address,address)", +"5fb1ef8e": "checkOrder(address)", +"5fb1f1d7": "getSketchesOnOffer()", +"5fb3b944": "privateSaleSoldTokens()", +"5fb3e119": "Auction()", +"5fb42c59": "goldListPeriod()", +"5fb437f2": "setWithdrowRate(uint256,uint256)", +"5fb4f78c": "finishConfiguration()", +"5fb500a5": "ETT(uint256,string,uint8,string)", +"5fb64fd6": "checkMembership(address)", +"5fb6bca2": "fighterCore()", +"5fb77b9c": "revealBracket(bytes8,bytes16)", +"5fb7a643": "enableServiceProvider(address,bytes)", +"5fb80f20": "weiPerAnimal()", +"5fb8dc8b": "MasternodeTransferred(address,address)", +"5fb8fed6": "PJR()", +"5fb93bb7": "transferDataEntryClerk(address)", +"5fba26a6": "getBorrowedBooksCount(uint256)", +"5fbaa390": "haltSale()", +"5fbabc49": "setSkill(uint32,uint8,uint32,uint32,uint32,uint32,uint32)", +"5fbddcf3": "isLivingMonarch()", +"5fbe4d1d": "tokenAddr()", +"5fbf0577": "sayYes(uint256)", +"5fbf17ac": "totalUBetCheckAmounts()", +"5fbf79a2": "EmergencyStopSell(bool)", +"5fbfd9f6": "crowdsaleController()", +"5fbff3e2": "preferentialRate()", +"5fbff3fc": "KuangJinLian()", +"5fc02dcd": "freezeAccountForOwner(address,bool)", +"5fc13e0f": "initTransaction(address,uint256,bytes)", +"5fc1a4b8": "treasurySupply()", +"5fc1afac": "forwarders_count()", +"5fc2b479": "unlock(address,uint256,uint8)", +"5fc2cb39": "buyTokensWithProperEvent(address,uint8)", +"5fc31aeb": "_rawGetTokenDelegation(address,address)", +"5fc378df": "sawcoin()", +"5fc3ea0b": "withdrawERC20(address,uint256,address)", +"5fc42ebf": "KTZ()", +"5fc483c5": "OnlyOwner()", +"5fc4a6f3": "getCurrentBonusSystem()", +"5fc5d48b": "burnUnsoldCoins(address)", +"5fc5e727": "investedSumOnIco()", +"5fc6bd17": "pendingParsecs()", +"5fc71288": "GOTPAY()", +"5fc75bf2": "viewCreatePetitionFee()", +"5fc7e71e": "liquidateBorrowAllowed(address,address,address,address,uint256)", +"5fc8cc16": "returnAmountOfELIXAddressCanProduce(address)", +"5fc9309c": "transferFrom(address,address,uint256,address)", +"5fc93ed7": "BirthdayBoyClickHere()", +"5fc9d392": "setMessageStatus(bool)", +"5fc9e75e": "historyCountOf()", +"5fca5a92": "set_arbits_max_contribution(address,uint256)", +"5fcb568c": "release(string,uint32,uint32,uint32,string,string,string)", +"5fcba9ae": "DURIANX()", +"5fcbd5b6": "countDown()", +"5fcc2edb": "IndividualityTokenRoot(address)", +"5fcc6277": "changeModuleBudget(uint8,uint8,uint256)", +"5fcc7ea1": "nextScheduledQuery()", +"5fcc9d0f": "hardCapPreIco()", +"5fcce279": "announcementType()", +"5fccf40a": "redeemBonusLot()", +"5fccfda4": "postICOSale()", +"5fcd7fe6": "OWNER_TOKENS()", +"5fce627e": "hasArea(address,uint256)", +"5fceab11": "incomingTransaction(uint256)", +"5fcee7a0": "CEOAddress()", +"5fcf0455": "interestEarnedAccount()", +"5fcf92ef": "received_tokens()", +"5fd030c0": "setLicenseNFT(address)", +"5fd0526e": "getReleasableBonusAmount(uint256,address)", +"5fd0f8b2": "smartContractSaleEnded()", +"5fd1bbc4": "publicStartTime()", +"5fd23730": "LogSwapToken(address,uint256)", +"5fd33b1b": "freezeTrading()", +"5fd357fc": "PortfolioContent(uint256,uint256,uint256)", +"5fd4b08a": "getName(address)", +"5fd56dfc": "AllInOne()", +"5fd56e98": "whoHadTheBiggestDick(uint256)", +"5fd5e3b4": "newEvent(uint256,address[],uint256,uint256)", +"5fd65f0f": "swapStorage()", +"5fd72d16": "addAllowance(address,address,uint256)", +"5fd7793a": "setStreamerContract(address,uint256)", +"5fd8c710": "withdrawBalance()", +"5fd8d3d1": "maxInvestorCap()", +"5fd9d610": "verifyGameResult(bytes32)", +"5fd9dff6": "allowance(address,address,bytes)", +"5fd9e124": "pStopBlock()", +"5fd9e693": "Crear_rifa(uint256,address)", +"5fda0dc1": "isOnExchange(uint256)", +"5fda83f6": "TokenTransferDisallowed(uint256,address)", +"5fdba1de": "setIBalance5(uint256,uint256,uint256)", +"5fdbba04": "debatePeriodOf(uint256)", +"5fdc1a97": "AllSportsCoin()", +"5fdc9e0a": "dropSupply()", +"5fdcd306": "check_status()", +"5fdd59f8": "messages(address)", +"5fde0ed5": "getCountBySeller(address)", +"5fde731c": "wdiv(uint256,uint256)", +"5fdf05d7": "two()", +"5fdf5357": "sortDescBy(uint256[],uint256[])", +"5fdf60fb": "circulation()", +"5fe07013": "revokePermission(address,bytes32)", +"5fe0e081": "changePeriod(uint256,uint256)", +"5fe16454": "Fragment()", +"5fe22c8b": "testFailTransferWithoutApproval()", +"5fe27ab0": "createHKG(address)", +"5fe2d689": "getInterest(uint256)", +"5fe36964": "TEAMS_TOTAL()", +"5fe3854e": "calculatePrice(uint256,bool)", +"5fe3b567": "comptroller()", +"5fe44141": "getRegistryDataRegistered()", +"5fe4c0f3": "validationTime()", +"5fe59b9d": "setMotd(string)", +"5fe5b825": "AuthComplete(address,address)", +"5fe6fb19": "ConsultaProva(string)", +"5fe736e9": "createContractPlayer(string,uint256)", +"5fe745ea": "unlockOwnFunds()", +"5fe75764": "specialAccounts(address)", +"5fe772c6": "buyStakes(address,address)", +"5fe78b9b": "_getCurrentBonus()", +"5fe825f8": "getHodlOwner(uint256)", +"5fe8e7cc": "getHolders()", +"5fe9219a": "transferToMainViaRelay(address,uint256,uint256)", +"5fe98f99": "_getPayOut()", +"5fea13f8": "distributeToken(address,uint256,uint256)", +"5fea3de9": "getDuration(uint256,uint256)", +"5fec4be9": "issue(address[],uint256[],uint16[])", +"5fec5d0b": "isDelegate(address,address)", +"5fed2091": "addLovers(bytes32,string,string)", +"5fed22a4": "payOffClientDebt(uint256,uint256)", +"5fed2edd": "pushArray(bytes32,bytes32)", +"5fee0aac": "giveBattleBonus(address,uint256)", +"5fee63c3": "calculatedTo()", +"5fee8a4b": "getCommitThreshold()", +"5fef2094": "qryModuleDetail(string)", +"5fef4d34": "setOwner(address,address,bool)", +"5ff149ba": "UpdateEthBalance(uint256,uint256,uint256,uint256)", +"5ff1569e": "developmentPercent()", +"5ff19392": "strToUnderlierType(bytes32)", +"5ff1a9c0": "setPlAAdress(address)", +"5ff3b980": "getCooloffPeriod()", +"5ff456cb": "refundToOwner(uint256,uint256)", +"5ff46857": "getEthToTokenMakerOrderIds(address)", +"5ff4909b": "setAbel(address)", +"5ff4ae32": "setGasForDCN(uint256)", +"5ff4f876": "NFTBalanceOf(address)", +"5ff63abc": "ETimesChain()", +"5ff65026": "addNodeToStakedList(address)", +"5ff65efe": "MaxPoSXblock()", +"5ff6b342": "getValidDurationNonce()", +"5ff6cbf3": "getMessages()", +"5ff6e9d0": "investtokens()", +"5ff77b22": "checkTeamToAdd(uint64,uint64,uint64)", +"5ff79c07": "DenmarkvsFrance()", +"5ff7ec2f": "SoldTokensFromCroupier(address,uint256,uint256)", +"5ff7f947": "setSinistre_effectif(uint256)", +"5ff85cc0": "feeUnit()", +"5ff8b778": "findWinners()", +"5ff97818": "setMetadata0(string)", +"5ffabbce": "teamReserveTimeLock()", +"5ffb1578": "pushArrayValue(uint256)", +"5ffbba3f": "relativeDateSave()", +"5ffc7cc7": "transferProfit(uint256,uint256)", +"5ffcb734": "setTokensControlInfo()", +"5ffcbe30": "voteForCandidateViaProxy(uint256,address)", +"5ffce121": "getTopCompanyCount()", +"5ffd59bd": "GetBalanceOwnerForTransfer(uint256)", +"5ffde7be": "priceUpdateInterval()", +"5fffad5a": "setselfdropvalue(uint256)", +"5fffb7c7": "changeTokenAddress(address,int256,address)", +"600005b3": "Delegation(address)", +"60003918": "AllWorksToken()", +"6000eb9f": "getTeamInvest(uint256,uint256)", +"6001279f": "decreaseApprovalByLegacy(address,address,uint256)", +"600160a3": "bet_luse()", +"6001b23e": "getCustomerTxAtIndex(address,uint256)", +"60027c25": "bankrollLockedUntil()", +"60035c3f": "swipeHoney()", +"600440cb": "upgradeMaster()", +"60048290": "Kanzhang()", +"60063887": "transferDebt(address,address,address,uint256)", +"6006eb9b": "Demor(uint256,string,string)", +"6006f178": "WitdrawLenderProfit()", +"600720c2": "sponsoredJackpotAmount()", +"6007c4f8": "isTokenSaleOngoing()", +"6007c836": "setIndividualMaxCap(uint256)", +"60084004": "getRectangleArea(uint256,uint256)", +"6008fb07": "EtherGit(address)", +"60095dcb": "stopCharging()", +"60098088": "deleteCar(uint256)", +"6009eed3": "crowdSaleOpen()", +"600a686e": "setResponse(address,string)", +"600b1ff2": "setBlackBox(address)", +"600c200e": "ANIToken(uint256,string,string)", +"600c523b": "LogIssue(address,uint256)", +"600cf0d9": "getOrdersOfOwner(address,uint256,uint256,bool)", +"600d05ac": "XZARToken()", +"600d0beb": "isInRaffle(address,address)", +"600d7003": "retrieveTokens()", +"600da23a": "checkTimeBonusPercentage()", +"600de26a": "getDigitFromUint(int256,uint256,uint256,uint8)", +"600e0ee7": "getMySeeds()", +"600e85b7": "tokenGrant(address,uint256)", +"600f8cfc": "registerByList(address[])", +"60104cef": "createGame(uint256,uint256)", +"6010d60c": "lockomio()", +"60116397": "Registrar(address,bytes32,uint256)", +"6012042e": "verifyPayment(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"60136123": "NTToken()", +"6013aa44": "testControlCreateSameNonce()", +"6013d092": "tokenSaleLimit()", +"6014e37c": "getLLV_edit_15()", +"60154e85": "payComision()", +"60155673": "TEC_TEAM_WALLET()", +"601570ea": "getResponseString(uint256,bytes32)", +"6016db70": "getAssetMinAmount(address)", +"6016dd4a": "credentials(address)", +"60173ede": "FondoNetwork()", +"60175bcb": "ActivityCore(address,address)", +"6017bb61": "Death()", +"6017d51d": "testInt(int256)", +"6019061b": "createSale(uint256,uint256)", +"60192799": "steps()", +"60196008": "replaceLevel(uint256,uint256,uint256)", +"601a0bf1": "_reduceReserves(uint256)", +"601a0e77": "pseudoRandomUint8(uint8)", +"601ab918": "CashBetCoin(uint256)", +"601b349c": "removeCollaborator(uint256,address)", +"601ba73a": "setMainSale(uint256)", +"601cd624": "transfersAreLocked()", +"601d3910": "reconcile(address[],int256[],uint8[],bytes32[],bytes32[])", +"601d54eb": "ZTCrowdsale(address,address,address,uint256)", +"601ee75e": "SPINToken(address,address,uint256,uint256)", +"601fba02": "activateBuyback(uint256,uint256)", +"601fc832": "getObserverAtIndex(uint256)", +"6020b90a": "_internalTransfer(address,address,uint256,bytes)", +"6020d2c5": "_newSaddle(uint256,uint256,uint256,bool,address)", +"60213b88": "getInitialWithdrawal()", +"60214c6f": "test_method()", +"60217267": "stakedBalance(address)", +"60219c7b": "totalTokensForSale()", +"6022e6f8": "createProposal(address,uint256,string,bytes)", +"602451ea": "showAuthorizerOneAmount()", +"60246c88": "getPoolInfo()", +"60249827": "Puzzle()", +"602501a1": "SGD_Omnidollar()", +"602512e1": "setDifficulty(uint256)", +"6025d3e5": "finalizeAll()", +"60261ce6": "deadlinePreIcoOne()", +"6026bb86": "battleUnitIdRange()", +"6026c151": "offerGanTokenForSale(uint256,uint256)", +"60274396": "createDutchAuctionToBuy(uint256,uint256,uint256,uint256)", +"60281080": "HBVToken()", +"6029755e": "_generatePersonalNumber(string,uint256)", +"60299843": "minWeightDeduct()", +"6029b13f": "collect(address,address,uint256,bytes32,bytes32,uint8)", +"6029bf9f": "distributeFees(uint256)", +"6029d66f": "setRecoveryContract(address)", +"6029f53f": "getOrderTakerTokenAmount()", +"602a3fee": "sendMiningProfit(address[],uint256)", +"602acca1": "InchainICO(address[],uint256)", +"602b7001": "updateRefundApplications(address,uint256,bool)", +"602bc62b": "getUnlockTime()", +"602cd226": "DelayedPayment(address,uint256,address)", +"602cf359": "IOXToken()", +"602d7d62": "stateFail(uint256)", +"602e2533": "_fee(uint256)", +"602e496c": "fundcruVaultLockTime()", +"602e6623": "minePool()", +"602ea880": "AlphoTestTokenCoin()", +"602fbd79": "afterCrowdSale()", +"603066a4": "foundationReserve()", +"60312cdd": "LazyToken()", +"60316801": "getTokenMetadata(uint256)", +"6031749c": "updatePassport(address,uint256,bytes32,bool)", +"60319f71": "EOEToken()", +"6032f4a6": "fulfill()", +"603318ad": "getContributions(uint256,address,address)", +"60339c7b": "resetUserPromoBonus(address,address)", +"6033abd5": "CafePayed()", +"6033cdc6": "voteToUpdateMaritalStatus()", +"60344938": "changeCongress(address)", +"603510cb": "USDYToken()", +"60351748": "genericAction(bytes32[],address)", +"603546b9": "UnMint(address,uint256)", +"603553df": "ReederemEvent(address,uint256,uint256,uint256)", +"603601d5": "esercita_potere_pubblico()", +"60368a33": "totalBribery()", +"60368f30": "XLedger()", +"603709e3": "get10Characters(uint16)", +"60393a55": "addPeriod(uint256,uint256)", +"6039c60c": "fiveTimes(address,uint256)", +"6039fbdb": "addTokens(address,uint256)", +"603a552e": "engineer()", +"603c1370": "onNewLoan(uint256,address,uint256)", +"603c5e52": "SetCreditsPerEth(uint256)", +"603ccf5e": "AMBASSADOR_SEVEN()", +"603d1b98": "guardian1()", +"603d1d1c": "setSellOpen(bool)", +"603d1ed9": "createdOn(uint256)", +"603daf9a": "getBuyer()", +"603e3a40": "bulkBuy(uint8[],bytes6[],uint32[],uint32[])", +"603f4d52": "saleState()", +"60425c48": "TokenSellPercentage()", +"604269d1": "isMain()", +"6042a760": "icapTransfer(bytes32,address,bytes32,uint256)", +"6042fbe1": "maxPower_()", +"60434dcf": "getGitHub()", +"60445142": "depositCntr()", +"604497a2": "_transferFrom(address,address,uint256,bytes,bool)", +"6044ce6e": "cancelAgonForce(uint64)", +"60456068": "appreciationStep()", +"60457034": "setVerificationStatus(bytes32,bool)", +"6045804f": "delManager()", +"60464627": "totalWithdrawals()", +"6046c37f": "activateEmergencyProtectedMode()", +"6046d718": "loggedTransfer(uint256,bytes32,address,address)", +"6046f71d": "getProposalEthReward(bytes32,address)", +"6047a00e": "bonusTokensPool()", +"6047f7f5": "getTotalBmcDaysAmount(uint256)", +"60483a3f": "submitEtherProposal(uint256,string)", +"6048e89e": "setEthToBeClaimed()", +"60493ea4": "ico4Raise()", +"604a4bc8": "createTrackFromBack(bytes32,uint256)", +"604a4f9d": "regularTicketPrice()", +"604a6fa9": "Random()", +"604aa2cb": "backResiliumOwner()", +"604b2399": "_hasFlag(uint256,uint256)", +"604bf292": "safeSubtrNCP(uint256,uint256)", +"604c0b60": "transferBuyer(address,uint256)", +"604c7ef4": "BCBtuCoin()", +"604ca461": "addStory(bytes12,bytes12,uint256,uint256)", +"604cc1a5": "startGiveaway(uint32,uint256)", +"604ce56c": "MAX_ACTIVE_CANVAS()", +"604d3943": "poolCut()", +"604e3588": "SmartDollar()", +"604e4732": "tryFinializeLastProposal()", +"604e5fb8": "structureIco(uint256)", +"604e7af6": "totalDropTransactions()", +"604f87d8": "transferFromCallGas()", +"604f90a8": "getGladiatorChestAvailable()", +"604fc446": "getAddOnNeeded(uint16)", +"60500245": "registerName(string,bool)", +"60506aff": "initialDeposit(address)", +"6050eeb4": "_createLibrary(string,string,address,address,uint256,uint256)", +"6051c7cd": "acquireTokens(uint256,uint256,address,uint256,address)", +"6051fa2c": "logTradingProceedsClaimed(address,address,address,address,uint256,uint256,uint256)", +"60521116": "showPoolInfo(uint256)", +"60528e7b": "proxyWithdraw(address)", +"6052a22b": "toTimestamp(uint256,uint256,uint256,uint256,uint256)", +"6052a849": "getEtherToBuy(uint256,bool)", +"60536172": "takeOwnership()", +"60542557": "SmartExchange(string,string,uint8,uint256)", +"60546602": "isAbsent(bytes32)", +"6054da0b": "setNextCommonTTMTokenId8(uint64)", +"60566675": "LeoCoin()", +"6056969b": "announce(bytes32)", +"6057361d": "store(uint256)", +"60577043": "tixFund()", +"6057f2ca": "addDealer(string,address,uint256)", +"60583488": "get_info()", +"60585358": "getByte()", +"60589137": "ListingCancelled(bytes32,uint256)", +"60595433": "Pass()", +"6059838b": "tierTwoPurchase()", +"605a18c2": "setTokenTransferFeeProp(address,address,uint256)", +"605a42db": "superDragon(uint256)", +"605a8ea3": "AvailableCommission()", +"605ae1d0": "BIDTToken(address)", +"605b24be": "gcard(uint256,address)", +"605c0209": "ZorffToken()", +"605c2dbf": "ManagerChanged(address,address)", +"605c43de": "getBetById(uint256)", +"605cee71": "delWallet(uint256)", +"605de51d": "getTotalSponsorship(uint256)", +"605e5ee1": "delWhiteList(address)", +"605f2ca4": "distributeTokensToContributorByIndex(uint256)", +"605ff295": "CelebrityToken()", +"60608438": "setCurrentAndNextSnapshotBalance(address,uint256,uint256)", +"60616ae2": "BllotPro(bytes32[])", +"6061d692": "month30Unlock()", +"60621984": "Mining24(uint256,uint256)", +"606224f8": "sendPendingAmounts(uint256,uint256,address)", +"60643652": "maxEntrants()", +"6064d863": "revealedCeilings()", +"6065140b": "setKYCVerificationContract(address)", +"60654e47": "getLotteryBalance()", +"60659a92": "tokensAvailable()", +"6065fb33": "genesisAddress()", +"60662fe2": "TOKENS_TOTAL_SUPPLY()", +"60668e58": "getData_5()", +"6066b066": "isSaleMarket()", +"6066ed11": "getCombatsCount()", +"6067be79": "getInvestedSumToRound(uint256)", +"60689557": "Rock()", +"6069272c": "getAllEntityIds()", +"60694549": "withdrawUserPrize()", +"60699026": "mulSafe(uint256,uint256)", +"60699d92": "createPersonalTime(address,uint256)", +"606a1f7a": "EtheremonTrade(address,address,address,address)", +"606a405e": "getAddressPlayNumber(uint256,uint256,uint256)", +"606a7f01": "Addr4()", +"606a9584": "_forwardPoly(address,address,uint256)", +"606aed30": "withdrawOwedToken(uint256,uint256,uint256)", +"606baff8": "minCrowdsaleAllocation()", +"606bc9a5": "setOwnerHoverText(address,uint256[2])", +"606ce3bf": "set(uint256,uint256,uint256,uint256)", +"606d0d14": "executeOffer(uint256,bytes)", +"606d2e96": "battles(uint256)", +"606d55b1": "getY(uint256,bool)", +"606da54e": "XBLContract_addr()", +"606dc104": "openRaceCount()", +"606deecd": "requestData()", +"606ec65d": "TransferUpdated(address,uint256)", +"60702417": "MakeERC20(uint256,uint256,string,string)", +"60704108": "getAssetProxy(bytes4)", +"60708ae3": "issueAndCommit(address,address,uint256,uint256)", +"6070f1be": "NodeMCU_Endpoint()", +"60711058": "getUserDeposit(address,uint256)", +"6071eb5c": "ecosystemReserve()", +"60721b7c": "debitAmountToRefund()", +"607267d3": "getPlayerRoundDividend(address,uint256)", +"60726abb": "copy()", +"60727416": "newUserFrom(address,string,string)", +"6072ec64": "auditData()", +"60733572": "setUnicornToken(address)", +"60734859": "changeSaleTokenLimit(uint256,uint256)", +"6073660a": "findNextDay(uint256,bytes2)", +"60737a7c": "FaucetToken(string,string,uint8)", +"6073d045": "userDepositedWei(address,address)", +"6074123c": "AthlierToken()", +"607485fe": "firstYearMinedTokenCap()", +"6074b806": "updateOrderbook(address)", +"607531b6": "bitownToken()", +"6075eb7d": "openChest(uint256)", +"6076a3d5": "setEarlyParams(bool,uint256,uint256)", +"60771261": "scalarBaseMult(uint256)", +"6077759c": "bubbleSortAllMatches()", +"6078268b": "advisorsTokens()", +"60785bd1": "easyUpdateMatriarch(address)", +"6078b87e": "communityPeriodLength()", +"60795d80": "requestAllowance()", +"607a124f": "setAttrs(address,address,address,uint8,uint256,uint256)", +"607af216": "getRepresentedDTH(address)", +"607afbb5": "mySum(uint256,uint256)", +"607b463a": "getCash(address)", +"607b9169": "toOwner()", +"607b9f97": "safetyWallet()", +"607cbaff": "viewPetitionShareholder(uint256)", +"607d35c4": "uint5ToStr(uint256[5])", +"607db616": "tokenAllocate()", +"607dbae5": "ProofOfIdleness()", +"607dc1d6": "createNewCSCResource(string,string,uint256)", +"607eaf70": "investorBankroll()", +"607ecd96": "checkAccBalance()", +"607fa5a4": "updateRequired(uint256)", +"60805e5a": "unlockAddress(address,bool)", +"60808037": "numTokensForContributor(uint256)", +"6080af05": "setVoterStakesContract(address)", +"6081f5cb": "calculateBonus(uint256)", +"60820d80": "getOwnedTokens()", +"60827be8": "IDChain()", +"60829f8a": "unstake(address,address,uint256)", +"6082a02c": "getPriceIdv(bytes32)", +"6082a6ad": "Punani()", +"60834493": "Veetune(uint256)", +"60836aa4": "changeDevCut(uint256)", +"6083e59a": "maxDeposit()", +"608427e6": "ApolloSeptemTokenPurchase(address,address,uint256,uint256)", +"608458eb": "TOKEN_FOR_SALE()", +"6084747f": "mostRecentBlock()", +"60851f28": "viewThirdLotOfClauses()", +"6085e6af": "tokenSellData()", +"6086e22f": "calculateInitialPayerDeposit(uint256)", +"608716ad": "CryptoMoviesToken()", +"60874b27": "SpankICO()", +"60887081": "IEOStarted()", +"6088a917": "artworkRegister()", +"6088caf3": "tier4Time()", +"608980eb": "intervalsAt(uint256,uint256,int256)", +"6089e3c4": "BitCashPlatform()", +"608a0ff0": "transferBet(address,address,uint256)", +"608bc08c": "airDrop(address,address,address[],uint256,bool,address)", +"608bd7f4": "setLong(address)", +"608be57f": "_startNextAccountingPeriod()", +"608cadb8": "Goldmint(address,address,address,address,address)", +"608cb457": "SLACK_PERIOD()", +"608cc40a": "createRules(address,address[])", +"608d031a": "checkMiningActive()", +"608d576b": "getMultiRequestRegistrar(uint256)", +"608d670a": "XfStandardToken(uint256,string,uint8,string)", +"608e7fa6": "addAlias(bytes32,address)", +"608e9122": "InbestToken()", +"608eaa6a": "setFiscalVerify(bytes32,uint256,uint256,uint256)", +"608eba96": "_createCard(uint256,uint256,address,address)", +"608f102e": "District0xContribution(address,address,address,address,address[])", +"608f1f7e": "DGDTalk()", +"608fc07a": "updateSalesWallet(address)", +"60900c88": "coinprice()", +"60909c51": "closeDataResponse(address,address,bool,bool,bytes)", +"6090befe": "setCompanyWalletAddress(address)", +"60913244": "botOnSale(uint256,uint256)", +"6092019a": "MAX_FUNDING()", +"6092e55b": "createCDPLeveragedDai(uint256)", +"60938601": "approveOnly()", +"6094fae8": "finishTransfer(uint256)", +"609526c2": "generateRandomNumber(uint256,uint256)", +"60953744": "Mul(uint256,uint256)", +"60958192": "getProposalTTL()", +"6095c2d5": "setExchangeCommissionAddress(address)", +"60961955": "addFakeVisitors()", +"609619b4": "SecurityDepositRegistryReplaced(address,address)", +"60965dc0": "firstRoundWMStart()", +"609669eb": "StopIcoManually()", +"6096bbde": "_getGameAuctionGap()", +"60970da4": "updateCustomer(address,string)", +"609725ef": "getCurrentPassportLogic()", +"60972a84": "reissuedTransactions()", +"60975988": "PING_ORACLE_INTERVAL()", +"60979759": "p_setOwner(address)", +"6097bca9": "atnSent()", +"60994bb0": "_createRoc(uint256,string,uint256,address)", +"6099af40": "setConfigBool(bytes,bool)", +"6099ecb2": "pendingRewards(address,uint256)", +"609a54b0": "get_all_sellable_token()", +"609ab538": "newSchellingRoundEvent(uint256,uint256)", +"609ada00": "logEntropyTxDetails(string,uint256)", +"609b5785": "_mainsaleSupply()", +"609b8394": "setAnimator(address)", +"609ba988": "approveAdvertiserCharges()", +"609bdc71": "MintableMultiownedTokenTestHelper(address[],uint256,address)", +"609bec67": "period3Denominator()", +"609bf323": "VestedTokenMock(address,uint256)", +"609bf6ba": "GetGuestCount()", +"609d2bc5": "oraclize_setConfig(bytes)", +"609da897": "setupCompleted()", +"609df32f": "listNode()", +"609e5ca4": "getTournamentAmt()", +"609ec605": "toBytes(bytes4)", +"609f8fe2": "verify(string,uint8,bytes32,bytes32)", +"609f9a8e": "betFromGame(uint32,bytes32)", +"609ff0fb": "developersRecipient()", +"609ff1bd": "winningProposal()", +"60a10fa7": "setBridgeHeight(uint256)", +"60a11672": "safeTransferFromWithData(address,address,uint256,bytes)", +"60a1623f": "_withdraw(string,string,bool)", +"60a1f397": "_evaluateArea(address,uint8,uint256)", +"60a22932": "totalSaledToken()", +"60a22fe4": "nextMinimumBond()", +"60a31921": "dividendsOf(address,address)", +"60a4a929": "Assigned(address,uint256,uint256)", +"60a4d104": "dteamVaultAddr2()", +"60a4d1a5": "AddNewCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", +"60a4d599": "getPreICOLength()", +"60a59bdb": "random_number()", +"60a60fd8": "testProxyCallWithValue()", +"60a64947": "getAdv(address)", +"60a703ea": "ReceivedOwnership(address)", +"60a72c29": "getAppData(address)", +"60aa0e1c": "ICO_token_supplyCap()", +"60aa6b9e": "changeDueDate(uint256)", +"60ab5852": "issueTokens()", +"60acf888": "token_transfer(address,address,uint256)", +"60ad2391": "settlement(uint256)", +"60ad5bd0": "getCountrySpots(uint16)", +"60ad970d": "getLoansForAddress(address,uint256)", +"60ad9d7b": "burnByAddress(address,uint256)", +"60ae1eb5": "buySaleCardFromSys()", +"60aeac18": "neverPayBack()", +"60aef331": "buyTokensBonus(address)", +"60af9f91": "masterRecruitment()", +"60b0b0f0": "contribute(uint256,address)", +"60b1e057": "EVMSCRIPT_REGISTRY_APP_ID()", +"60b1e173": "getProof(uint256,address,address)", +"60b2a56a": "drawWinner(uint256)", +"60b35739": "_multiMint(address[])", +"60b38880": "TemperatureMeasurementA(address,int8,int8,uint16,string)", +"60b431a4": "testGetSig()", +"60b4a8fd": "getLastBidId()", +"60b6aa92": "privateIcoEndTime()", +"60b6ff5c": "ioucoin()", +"60b73223": "refundMoney(address,address)", +"60b7b3f6": "getCurLotIndex()", +"60b82e2e": "getRandomNumberList()", +"60b831e5": "cancelCall(bytes32)", +"60b95da5": "YclDoCoins(uint256,string,uint8,string)", +"60b99afb": "getIconiqMaxInvestment(address)", +"60baabf3": "nizk_setup()", +"60bba03d": "setTeamMember(address,bool)", +"60bc59b7": "__addressToString(address,address)", +"60bc5a06": "airdropManually(address,uint256)", +"60bce2f4": "usdPerEth()", +"60bd409e": "setAllowSellLands(uint16)", +"60bd7a9d": "statuses()", +"60bddc04": "getRateScore(uint256)", +"60be3547": "newLottery(uint256,uint256)", +"60be5f70": "newUser(address,bytes20,uint64)", +"60bea672": "createPorscheTicket(address,uint256)", +"60bebe98": "translateTileToWidth(uint16)", +"60bf1d2f": "ownsHive(address)", +"60bf46ea": "setQuotePriority(address,uint256)", +"60bf4dd5": "PGO_INTERNAL_RESERVE_CAP()", +"60bf9a84": "getbetData(uint256,uint256,address)", +"60bfe04e": "setRewardOpen(uint256)", +"60bff45c": "_addHolder(address)", +"60c1461f": "setNewICOTime(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"60c17d1d": "freedWosPoolForSecondStage()", +"60c17eec": "eventPaid(address,uint256,uint256,uint256)", +"60c1e433": "getSellerTransaction(address,uint256,uint256)", +"60c20c16": "addOffer(string,uint256,address)", +"60c2db45": "walletTwitter()", +"60c2f663": "toUINT128(uint256)", +"60c311fd": "doBurnFromContract(address,uint256)", +"60c31544": "exporterReceivedPayment()", +"60c326ea": "setModel(address)", +"60c46821": "fundContractForRefund()", +"60c5cc3a": "acceptProposal(uint256)", +"60c6171c": "calculateGoldBuySimple(uint256)", +"60c66c5c": "maxNumOfPayoutCycles()", +"60c677ff": "commanderAlive()", +"60c6b3a5": "claim(bytes,address,uint256,uint8,bytes,bytes)", +"60c6ccb2": "removeMonsterIdMapping(address,uint64)", +"60c6ec6f": "validState()", +"60c71546": "enableTransferEarlier()", +"60c72285": "submitRemoveOwnerTransaction(address)", +"60c79d00": "setNumTranscoders(uint256)", +"60c7bb5a": "host_lottery(bytes32)", +"60c7d295": "cache()", +"60c82d6f": "addAddressToWhiteList(address,address)", +"60ca46cd": "toTokens(uint256)", +"60ca6890": "_submitTransaction(address,uint256,bytes,bytes,address,uint256)", +"60cb5fac": "deleteChannel(bytes32)", +"60cb66d0": "sum(int256[])", +"60cb8884": "TokenBank()", +"60cb96be": "CollectibleIndex0()", +"60cc2e8c": "maxGoalReached(uint256)", +"60cce8a5": "getValuableTokenAmount()", +"60ccf311": "getPlayerMerits(address,uint256)", +"60cd4ba4": "getTimeBasedBonus(uint256)", +"60ce03d5": "totalTokenIssued()", +"60cf7133": "testSetPermissions()", +"60cfc624": "setLLV_edit_26(string)", +"60cfd359": "mainSale()", +"60d12fa0": "getExecutive()", +"60d1c056": "usedPaymentSupply()", +"60d1ce36": "collectibleIndexToApproved(uint256)", +"60d26f01": "ownerTransferWei(address,uint256)", +"60d2bee9": "addArtistSignature(uint256,bytes)", +"60d3b4b0": "frwd()", +"60d3e4c5": "isDistributionInProgress()", +"60d4c79b": "burnOneBroGlobal(uint256)", +"60d50130": "FineArtsToken(uint256,string,string)", +"60d586f8": "getValue1()", +"60d60d2e": "countcomp()", +"60d60dad": "mainSaleFirstEndDate()", +"60d63425": "StakePool(string,string,uint8,uint256,uint256)", +"60d704db": "getBank()", +"60d8c2d2": "oneTokenWei()", +"60d938dc": "isPresaleActive()", +"60d975c9": "GG()", +"60d9c823": "removeClientAuthority(address)", +"60d9f0a8": "setNotarius(address)", +"60da4bd7": "batchCancelVoteForCandidate(address,address[],uint256[])", +"60dab6be": "ActionAgon()", +"60dccd89": "getContentAccount(uint256)", +"60dd5f90": "getPolicy(string)", +"60ddd8e8": "sumICOStage2USD()", +"60dddfb1": "votingWeightOf(address,uint256)", +"60dde4c2": "queueFront()", +"60de94d0": "setCCH_edit_11(string)", +"60e036a0": "EtheremonAdventurePresale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"60e092c6": "cancelOrder(address,address)", +"60e11e16": "Lira()", +"60e232a9": "changeVault(address)", +"60e2f6e8": "createProxyAndCall(bytes)", +"60e30a02": "ChinaInvestmentExchangeToken(uint256,string,uint8,string)", +"60e393c6": "DEVELOPER2()", +"60e39f73": "PotatoToken()", +"60e45f04": "UBSexToken()", +"60e474e3": "_issue(address,uint256)", +"60e4c1ac": "LogReceived(address,uint256)", +"60e519c0": "computeMarginAmount()", +"60e587f9": "goldReward()", +"60e5ef3a": "getPrice(uint8,uint8)", +"60e65bb8": "startTrading(bool)", +"60e68a25": "dash()", +"60e6cfd8": "addKey(bytes32)", +"60e6fb26": "resumePurchases()", +"60e708b3": "balanceOfUnlockTokens(address)", +"60e794de": "stageDataStore(uint256)", +"60e7a381": "o_aprendiz(uint256)", +"60e805c5": "LogMigrationCanceled(address,address,address)", +"60e85674": "checkLogin(address)", +"60e99b77": "getProposalState(bytes32,bytes32)", +"60e9c78b": "isNeedCheckTickets()", +"60e9f17e": "CRDToken()", +"60ea110b": "fromToken(uint256,uint256,uint256)", +"60eabebd": "CreateAPP(address,uint256)", +"60eb2826": "Badge()", +"60ebb498": "adminCancelWithdrawal(address,uint160,string)", +"60ec4f73": "starVoting(uint256,uint8)", +"60edc4c4": "timeOf(uint256)", +"60ee66c9": "setSubcontinentDiscoveryVotingContract(address)", +"60ef6037": "buySaddleShop(uint256)", +"60f01452": "updateEggs()", +"60f14509": "hodl()", +"60f17941": "tokensGranted()", +"60f1d148": "getMaximumBetAway()", +"60f247b5": "confirmTransaction(uint256,address)", +"60f2b9af": "setDocumentData(string,string,string,string,string)", +"60f2e1c0": "buyAndCrave(string)", +"60f2f673": "setcoe(uint256)", +"60f38d91": "endEarlyStage1()", +"60f5ac86": "campaignOpen()", +"60f5d0d8": "ReloadKeys(uint256,uint256,uint256)", +"60f61a4c": "buyUnitRaffleTicket(uint256)", +"60f66701": "useCoupon(string)", +"60f69dc0": "partnerReservedSum()", +"60f6e71d": "KuendeToken()", +"60f6fb2e": "chunkedWeiMultiple()", +"60f75530": "countRemaining()", +"60f75f3b": "closeMarketOrder(uint256)", +"60f8af90": "refundRound()", +"60f8bbb8": "setPuppySports(address,address)", +"60f8dab7": "userRefund()", +"60f8e036": "manageStatus()", +"60f96a8f": "parent()", +"60fb4aa0": "founder4Wallet()", +"60fd0668": "WAVcoin()", +"60fd0e91": "mintlist(address[],uint256[])", +"60fd1e66": "_movePendingToSetting(uint256,uint8)", +"60fd902c": "gnosisToken()", +"60fdd1c9": "setStakeRate(bytes32,uint256)", +"60fdf8ff": "GameEnded(uint256,uint256,uint256)", +"60fe103e": "logFeeWindowMinted(address,address,uint256)", +"60fe136e": "BogdanoffCoin()", +"60fe47b1": "set(uint256)", +"60fece43": "percentForTeam()", +"60ff77cc": "ledgerRecordAdd(uint256,bytes32,uint256,string,uint256,bytes32,uint256)", +"61001cd3": "testIsStarted()", +"61004364": "depositTokenTo(address,address,uint256,uint256)", +"6100b1e1": "resetDiscounts()", +"610103d9": "changeTxFee(uint256)", +"61012e15": "phaseLength()", +"6101a1f7": "unitStealingCapacity(uint256)", +"6101d16b": "getNumberOfSharesForAddress(uint256,address)", +"6101d4f5": "payTheMan(uint256)", +"6101f748": "FundsRegistryWalletConnector(address[],uint256)", +"61025532": "permitBurning(bool)", +"61027f78": "paying()", +"610285d2": "testControlRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"6102c049": "getBatchNumber(address)", +"6102d419": "getEthForMetResult(uint256)", +"6102e4e4": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[11])", +"610358ae": "removePrivelegedWallet(address,address)", +"61039bef": "releaseLocked(address)", +"6103ae75": "AGENCY_ADDR()", +"6103d70b": "withdrawPayments()", +"6103d915": "Winners(uint256)", +"6103dda6": "mutate(bytes32,bytes32)", +"6104464f": "previousPublishedVersion()", +"61046d8b": "setRLCPerETH(uint256)", +"61047ff4": "fibonacci(uint256)", +"6104d75a": "deathData_f13()", +"61050bb7": "_fetchPaidOrdersForPayer(address)", +"61053cd3": "tokensByUsdTx(string)", +"6105b499": "artCopyright()", +"6105c8af": "stubFunction(address,uint256)", +"61064b48": "GetInvestorAddress()", +"61064b5a": "processMarkings(address,uint256)", +"61066dc3": "enableServiceMode()", +"610757e4": "_wallet()", +"6108b5ff": "channel_deposit_bugbounty_limit()", +"6108bd0e": "sowCorn(address,uint8)", +"61096820": "CETH()", +"6109e255": "EtherSent(address,uint256)", +"6109ff33": "BihuaToken()", +"610af570": "voteOnDraft(bytes32,bool)", +"610b16ab": "onTransferStack(address,uint256,uint256,uint256,uint256,uint256,bytes32)", +"610b1abd": "lottery(uint256,uint256)", +"610bafaa": "getTotalBPOfAddress(address)", +"610bbebd": "Sensor()", +"610be654": "closeContract()", +"610c1d68": "addNtf(bytes32,uint256,address)", +"610c3009": "badgeName()", +"610cbcc7": "logHash(uint256)", +"610d006c": "getSourceConstraint(int256,uint256,uint256,uint256)", +"610d5de8": "validateEndowment(uint256,uint256,uint256,uint256,uint256)", +"610da891": "debug3()", +"610e9ed0": "postDisputeEth()", +"610efc86": "RegisterMine(string,uint256)", +"61101bed": "getTAmount(uint256,uint256)", +"611067a1": "Rate7()", +"6110e614": "duringSale(uint16)", +"61116d1d": "masternodeDeregister()", +"6111bd91": "cyberEntry2(address,bytes32)", +"6111ca21": "enroll(address,uint256)", +"6111dd02": "calcCostsSelling(uint256,uint8,uint8,uint256)", +"61129a80": "getEarlyIncomeMul(uint256)", +"6112c2ab": "summPartnerships()", +"6112c7c9": "RedirectChanged(address,uint256)", +"6112e8ac": "mint(address,uint256,uint8)", +"6113611f": "stakeVoted_Eth()", +"611408ff": "latestReleaseUrl()", +"6114dc0f": "lastFlight(address)", +"61150aae": "ethusd()", +"61161aae": "bury()", +"61162182": "storeDoc(string)", +"6116ec49": "VotingFinished(address,bool)", +"6117525b": "initialClaesOffering()", +"6117b80c": "getFixedAndShareFees()", +"6117c9db": "retainedTokensVault()", +"61186e23": "getCountdownDate()", +"611a20ae": "IotcToken(uint256,string,uint8,string)", +"611b4095": "isWhitelisted()", +"611c4662": "getPriceByDayIndex(uint16)", +"611c7f50": "Core()", +"611cb25f": "failStage()", +"611cb6aa": "Vault(address,uint256,uint256,uint256)", +"611daa7e": "EmergencyBalanceReset(uint256)", +"611eb470": "maximumICOCap()", +"611ef452": "cancelDelivery(string)", +"611efc09": "sale(address,uint256)", +"611f1fbe": "itsLikeChicago()", +"611f64f9": "setTokenPrice(uint128)", +"611f69de": "__proxy_motion(address,uint256,uint256,bytes)", +"611fd026": "showApproveToken(address)", +"61203265": "organizer()", +"6120ada7": "setAuto(uint256)", +"6120e125": "TUMIYUNTOKEN(uint256,string,uint8,string)", +"6120ffbc": "accountsPayableHeld()", +"61211087": "firstAuctionsHighestBidder()", +"6121e522": "teleportPrice()", +"612249fb": "communityContributionSupply()", +"6123218b": "registerPurchase(bytes32,address,uint256)", +"61235639": "AcreToken(address,address)", +"6123c63f": "removeEmbassy(address)", +"6123dfc3": "NoWinner(string)", +"6123f7ba": "onlyWithValidSignatureAndMethod(bytes)", +"61241c28": "setTokenRate(uint256)", +"612472fe": "toZT(uint256)", +"6124a577": "whitelistController()", +"6124e4e7": "dividendContract()", +"612544b3": "getReservedTokens(address)", +"6125fd20": "voteForRefund(bool)", +"6126cb99": "registerAsset(address,bytes32,bytes8,uint256,string,string,address[2],uint256[],bytes4[])", +"6127421d": "tokenPayments(address)", +"6127a1ad": "_setRarityValue1(uint256)", +"6127cfd9": "verify_withdraw()", +"6127f246": "getActiveTasks()", +"61282631": "tokenMintedSupply()", +"612845fc": "claimQueen(uint8)", +"612867c2": "calcRefund(bytes32)", +"6128a4f3": "investorsLosses()", +"61296540": "rewarded_refresh()", +"6129f25f": "setReferralPercent(uint256)", +"612a711f": "SimpleERC20Token(uint256,address)", +"612a7562": "setBountyRegistry(address)", +"612ab238": "balanceOfOnForHolder(address)", +"612acecc": "frozenForever()", +"612bfae2": "description4()", +"612c0968": "privateSaleRate()", +"612c56fa": "submitVote(uint256,bool)", +"612c9dea": "unreserveFor(address)", +"612d6061": "getExpectedMinReturn(address,address,uint256)", +"612d669e": "setMinStakingAmount(uint256)", +"612e45a3": "newProposal(address,uint256,string,bytes,uint256,bool)", +"612e731d": "TheGreatEtherRace(string)", +"612eb5e7": "revokePermission(uint8,address)", +"612ecc48": "MINIMUMCONTIB()", +"612ed785": "winningTeamIndex()", +"612ee726": "isOnAuctionToBuy(uint256)", +"612ef473": "betRevealed(uint256)", +"612ef6e9": "isRefundApplied(uint256)", +"612ef80b": "marketLiquidity()", +"612f2f37": "setMaintenance(bool)", +"612ff19e": "PolicyPool(address)", +"61301409": "minereum()", +"61309e2a": "tryFinalizeProposal(uint256,address[],bool,int256)", +"6130ced2": "UniCoin(uint256,string,string)", +"6130d537": "createPartnerPlayer(uint256,uint256,uint256,address)", +"61314ee3": "managerAddressMap(address)", +"6132ca1a": "getResult(uint32,int8)", +"6133a0eb": "PRE_SALE_300_ETH()", +"61347782": "getStakingRegistry()", +"6135a0ad": "getCallback(bytes32)", +"6135e084": "myDividendTokens()", +"6135f602": "contractPartTwo(uint256)", +"61362b68": "reInitialize(address,address)", +"613696eb": "burnCadvsLeftInRefunding()", +"6137412c": "monethaGateway()", +"6137d670": "submitWhitelistRemoval(address[])", +"6138889b": "distribute(address[])", +"61389e8b": "getTokensManual(address)", +"6139a008": "numTokensLimit()", +"6139faa6": "getAllTimes()", +"613a626b": "SnipCoin()", +"613aa6e7": "ResetCardPriceAdmin()", +"613bc081": "ExternalAccountWalletConnector(address)", +"613c36ae": "sendToStocks()", +"613d8fcc": "oracleCount()", +"613de7cb": "subWizard()", +"613e0fb8": "reservationWallet()", +"613e2de2": "getContractInfo(bytes32)", +"613f4594": "totalBetAmount()", +"613f5b9f": "TokenContractAddress(address,address)", +"613f5fe8": "MAX_USER_TOKENS_BALANCE()", +"613f7665": "getClosedSaleWallet()", +"613f8dac": "sellShitClones()", +"613fd87a": "calcBigPromoBonus(uint256)", +"613fd998": "messageSpecial()", +"613ff46f": "rewardPerNode()", +"6140128f": "getTupleDetails()", +"61402596": "setInitialSupply(uint256)", +"6140af43": "preICOcollected()", +"6140c54c": "createProxy(address)", +"6140ca78": "setIsMiningOpen(bool)", +"6141b54b": "FundsWithdrawn(uint256,address)", +"6141d5d0": "CoffeeToken(address)", +"6142101a": "last_buyer()", +"61425d79": "numRequesters()", +"61426df4": "STCListing()", +"6142e78f": "allowedAmountTransferedToPoolTotal()", +"6142ff70": "createShipment(address,string,string,int256,int256,uint256,uint256)", +"61432e81": "ConsumeGas(uint256)", +"6143a80a": "isGameEnded(bytes32)", +"6143abba": "totalCreatedOfType(uint256)", +"6144a8a1": "ZJFPrivate()", +"61461954": "execute()", +"61463838": "getMyPlumbers()", +"61463b64": "_hashToAscii(bytes32)", +"61465a32": "distribute(uint256,uint256,uint256,uint256)", +"61472fd4": "CSGOBets()", +"61476d55": "GetTotalAmountForMultiplicator()", +"614781f9": "atkBoss(uint256)", +"6147a55c": "SwapPaused(uint256)", +"6147bcb9": "getPVPState()", +"6148fed5": "pollMap(uint256)", +"614939b2": "allocateTokensForTeam()", +"61493b97": "set_minimum_payment(uint256)", +"61494714": "_createNewGame(uint64)", +"61496b83": "endSplitAgreement()", +"614984d1": "getUnicornGenByte(uint256,uint256)", +"614a31bf": "setII_R2(uint256)", +"614af914": "_updateMargins()", +"614b3e7f": "BCSToken()", +"614baf5c": "withdrawAffiliateRewards()", +"614bbc33": "privateContribution(address,uint256)", +"614be0c4": "getRemainShareAmountInternal(address)", +"614cb904": "isFinalizeAgent()", +"614d08f8": "CONTRACT_NAME()", +"614d5f07": "stepForPrice()", +"614d85e1": "timeOut()", +"614f2b3a": "_diff(uint256,uint256)", +"614f3994": "SpeedyNetwork()", +"61515334": "returnUserAccountAddress()", +"615155dd": "getVesting(uint256)", +"61523f2e": "changeEthReward(uint256)", +"61537010": "Whitelisted(address,uint256,uint32)", +"6153b827": "BancorHandler(address)", +"6154274d": "deleteProposal(string)", +"61543801": "currentPeriodIndex()", +"6154c16f": "MineOwner(uint256)", +"6154db6e": "UroToken()", +"61558349": "BitTeamToken()", +"615664ba": "Market()", +"6156e892": "checkOnlyContractOwner()", +"61571ddd": "distributionFinishing()", +"6157c5ec": "getGoldInfoSku(address)", +"615815f5": "releaseSecondUnlock()", +"61584936": "sealedBids(bytes32)", +"615878c8": "SkrumbleCandyToken()", +"61591a7c": "personUpdateDOB(uint256,int256)", +"61592b85": "getOrderDetails(uint32)", +"615a4e0f": "ChangeMainAccount(address)", +"615a604f": "setMarketer(address)", +"615acbae": "Freeze()", +"615af5fb": "areTokensSended()", +"615c2971": "Gametest()", +"615dbebb": "setContract(address,address,address,address)", +"615df83a": "remainderHolder()", +"615dfa5c": "defaultParams()", +"615ea899": "changeHello(string)", +"615ef639": "tokensClaimedAirdrop()", +"615f9f1f": "testFailTransferNotEnabled()", +"615fa416": "totalAtom()", +"61616292": "STCBonus(uint256,uint256)", +"6161eb18": "_burn(address,uint256)", +"61625c3a": "setLockByPass(address,bool)", +"61632d4d": "institutionStageSetting()", +"616361a7": "getArrUintField3()", +"61638ed5": "depositFunds(uint256,uint256)", +"61641bdc": "add(bytes32,address)", +"61649472": "getPoolFreezePeriod()", +"6165234c": "setPermissions(address,bool)", +"61665e40": "_premoveByValue(address)", +"61669dfa": "setSpecialBonus(address,uint256)", +"61679629": "UniversalRewardProtocolToken()", +"616852e9": "GoldBought(uint256,address,bytes32,string,string,bytes32,string,string,bool)", +"61688a85": "Lwcoin()", +"6168ba3c": "getWeiAggregateMayInvest()", +"6168c9c3": "tosell(address,uint256,address,uint256,address,uint256,uint256)", +"6169a7ed": "CashForHardwareReturn()", +"616a0997": "TokenPurchase(address,address,uint8,uint256,uint256,uint256,uint256)", +"616a3420": "verifySig(bytes32,bytes,bytes)", +"616a6371": "SingleAccountRules(address)", +"616b40e3": "totalInvest()", +"616b59f6": "deleteBytes(bytes32)", +"616b829d": "SwappedTokens(address,uint256,uint256)", +"616c9469": "Finalized(address,uint256,uint256)", +"616ceda7": "setJOYTokenAddress(address,address)", +"616d1fab": "distributeToAlternateAddress(address,address)", +"616d5058": "userAccounts(uint256)", +"616d50c3": "GCToken()", +"616dcf0c": "calculateTotalSupply(uint256)", +"616e2fd0": "FortaToken()", +"616e9f8f": "getInterval(uint256)", +"616eba4a": "getLocksrootIdentifier(address,address,bytes32)", +"616f7bc9": "addAddressesSet(address)", +"616fbee7": "changeMinimumBet(uint256)", +"616fca9b": "adopt(address)", +"616fe92a": "emitFeePoolUpdated(address)", +"616ffe83": "read(string)", +"61708908": "prepareDisputeValid()", +"6170a23e": "transferTech(address)", +"6170b162": "join(bytes)", +"6170feec": "getWinIndex(address,uint256)", +"61711115": "RegistrationStatusChanged(address,bool)", +"61718141": "totalSupplyIsLocked()", +"61719785": "clockmaker()", +"6171d7fc": "adjustTotalCoins(int32)", +"61725795": "setAquaman(address)", +"6172c0df": "updateDeposit(address,uint256,uint256)", +"6172f071": "setIsAllTransfersLocked(bool)", +"6173a70c": "initRandom(address)", +"6173e456": "setAMLWhitelistedBulk(address[],bool[])", +"617421c9": "calTripleRoom(uint256,uint256,uint256,bytes32)", +"61751577": "addCET6(uint32,uint64,uint64,uint64,uint16,uint16,uint8,uint8,uint8)", +"6175adee": "icoStandardPrice()", +"6175bc9c": "preStartBlock()", +"6175f9e2": "dragonHandler(uint256)", +"617605a1": "Zillion()", +"61764f59": "BitDATAToken()", +"6176caed": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,bool,uint256)", +"617708dd": "getEscapeRequest(uint32,int256)", +"61774704": "verifyBid(bytes32,bytes32)", +"61775ee1": "onlyBouncerRemoveExtension(address)", +"6177a197": "GoGoPay()", +"6177fa04": "setGenerateAddr(address)", +"6178a8b1": "splitStarFunds()", +"6178ac90": "_createCompanies(bytes32[],bytes32[])", +"6178efee": "returnToken(uint256)", +"617914be": "AUTH_CHANGEOWNEDOWNER()", +"61794267": "oldExecuteDecayFunction(uint256,int256,int256,uint256,uint256)", +"61798287": "safeToNextIdx()", +"6179ed72": "ProofOfSecret()", +"617a0951": "feeModifiers()", +"617a2a15": "icoStartP2()", +"617ac9a1": "SOSRcoinToken()", +"617b293e": "getInvestStatus(uint256)", +"617b390b": "approvePreSigned(bytes,address,uint256,uint256,uint256)", +"617bb8f5": "reject(uint32,uint32)", +"617c2fb8": "sell_Exchg_Reg(uint256,uint256,address)", +"617d2c84": "PRIMEx()", +"617d3c47": "RemovalPriceSet(uint256)", +"617d6bb4": "distributeEarningsBasedOnNumberOfCells(address,address)", +"617e80b4": "getPlayerShipModelByIndex(address,uint256)", +"617ee3a7": "MoonInc()", +"617f171f": "reopenDO()", +"617f4e3e": "set_got_refunded()", +"617f8666": "testFailRestartNotOwner()", +"617fba04": "getRecord(address)", +"617fc592": "priceStages()", +"61806891": "idVerification(address,address,uint256)", +"6180e4ac": "getAvailableNumbersForRaz(uint256)", +"6181d565": "getExpectAmount(uint256,uint256,uint256)", +"6181fb0a": "ERC20(uint256)", +"618293ba": "_updateState(uint256,uint256)", +"61829677": "claimdivs()", +"61836b0e": "lastUpdateEtherPrice()", +"61837e41": "get_stats()", +"6183c5d6": "EthereumAI(address)", +"618407e5": "tokenDrain()", +"61840c69": "getSaleSold(uint256)", +"61851416": "modifyCurrentVideoGamePrice(uint256,uint256)", +"61851679": "Protecthor()", +"6185bb50": "AOC_available()", +"6186b3e3": "showMoneyTransfer(uint256)", +"6186fe71": "CloseForecasting(uint16)", +"6187ce34": "gameRandon2()", +"61886014": "combineDice(uint8,uint8)", +"61888b40": "_percentSoldInPreICO()", +"618943c3": "WhitelistItemChanged(address,bool,uint256,uint256)", +"6189be15": "columnround(uint256,uint256)", +"618a057a": "_bidFirstShip(uint256,address,address)", +"618a1ec2": "getGoldDepositOfAddress(address,address)", +"618b870f": "setAmount2Claim(uint256)", +"618c5772": "removeTransferableAddresses(address[])", +"618cb85b": "GitCoinCrowdsale(uint256,uint256,address,address)", +"618ce6d7": "setWhitelistedAddressMain(address[],bool)", +"618de286": "addWhiteListMulti(address[])", +"618ea1c4": "terra()", +"618fa9ce": "getBotBillingIndex(uint256,uint256)", +"618fb1a6": "unsoldContract()", +"61903971": "MajListAll()", +"6190c931": "unclaimedCreditsWithdrawn()", +"6190c9d5": "cycle()", +"6190e9ca": "authorizedTokenUsers(address,address)", +"61919a08": "getWorks(bytes32)", +"6191fe9d": "FFC()", +"61927adb": "setDelegatedFrom(address)", +"61930630": "tokenStore()", +"61931f39": "zGetBothContractBalances()", +"61936d0a": "Wings(address,address,address,address)", +"619385bd": "newShare(address,uint256)", +"619419d8": "setTopic(uint256,string)", +"6194416b": "getProof(string,string,string)", +"6194acb6": "_validateOrder(uint256,uint256,bytes32,address,uint256,uint256,uint256,uint256)", +"6195c713": "against_proposal()", +"61962265": "PRESALE_MAXIMUM_FUNDING()", +"6196ac5b": "RubidSupply()", +"619792ba": "OwnershipGranted(address,address)", +"6197aadd": "JANDA()", +"6197bbab": "createRareAuction(uint256,string)", +"61983863": "MintedTokenCappedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"6198e339": "unlock(uint256)", +"61990759": "maxRandom(uint256,address)", +"6199ca26": "AmbrosusSale()", +"619a794d": "setAtomIsReady(uint256,uint32)", +"619c83ed": "completeTransfer(uint256)", +"619c89fe": "changeForeignBridge(address)", +"619caafa": "Reward(address,uint256)", +"619cba1a": "requestEthereumChange(address,string)", +"619cec73": "DSHAckCoin()", +"619cf5f9": "batchtransfer(address[],uint256[])", +"619d2671": "acceptContract()", +"619d3063": "getNftId(uint256,address,uint256)", +"619d36ef": "DRAW()", +"619d5194": "setLock(bool)", +"619e6e7c": "userWalletTokenBalances(address)", +"619ebc4f": "GetTimeWeightedBet(uint256,uint256)", +"619f5e72": "takeExcess()", +"619fabfd": "addMultiplePublicSalesSpecialUser(address[])", +"619fc641": "backup_exchangeStaStb(uint256,uint256)", +"61a00f6d": "Ballot(bytes32[])", +"61a07bc9": "AhihiToken(address,address)", +"61a12160": "getPendingAddReserveData()", +"61a1d8fa": "SchmeckleToken()", +"61a215e4": "Controller(address,address,address,address)", +"61a227b6": "mtdAmount()", +"61a23f42": "loadReferredInvestors(bytes32[],address[])", +"61a2493a": "Jancok()", +"61a255b5": "vote(string,string,uint256,bool)", +"61a25f07": "lotteryFinished()", +"61a2d076": "isWhitelistOnlyPermissionSet()", +"61a39946": "depositAgent(uint256,uint256,address[],uint256[],uint256)", +"61a3a281": "deployDefaultVestingContract(address,uint256)", +"61a5c4bd": "updateTokenAmount(uint256)", +"61a65433": "pot_total()", +"61a65e2a": "discountSaleEnd()", +"61a71303": "setMainSaleTLYperETH(uint256)", +"61a76900": "decode(uint256)", +"61a7b2f5": "transferFromIco(address,uint256)", +"61a99c4b": "ethDeposits()", +"61aa19d3": "icoAmountBonus1()", +"61aa8d93": "processFee()", +"61ab8904": "updateStats(uint256,uint256,uint256)", +"61ad08b5": "setSupervisor(address,address)", +"61ad487c": "PRESALE_PERCENTAGE_3()", +"61adeef4": "setUUID4Bytes(bytes16)", +"61aebe59": "stopSell()", +"61af1abd": "increasePriceAndDifficulty()", +"61afc1d5": "IsActiveUser(address)", +"61afd5ac": "denyAccess(address)", +"61b121f5": "OneCoinOneBeerToken()", +"61b1bd04": "HumanEvent(address,uint256,address,address)", +"61b20d8c": "retrieveFunds()", +"61b2bb37": "setHalfLifeTime(uint256)", +"61b3516e": "MyCoins()", +"61b3b8e3": "p_setInvestorFundPercent_out(uint256,uint256)", +"61b46d61": "buyHunterLicence()", +"61b65fbe": "UpdateRank(address,uint256,uint256)", +"61b6683c": "destroyedBots()", +"61b69abd": "createProxy(address,bytes)", +"61b6f889": "handleOffchainWhitelisted(address,bytes)", +"61b7542d": "absMax(int256,int256)", +"61b79ea4": "incentiveDistributionRound()", +"61b7d7f4": "FiveBalanceToken()", +"61b87f0d": "getTokenAddressIndex(address)", +"61b8ce8c": "nextId()", +"61b930ae": "ICOfundsReceiverAddress()", +"61b94bc7": "LiverpoolvsRoma()", +"61b9739a": "setPayTo(address)", +"61b97435": "Register(address,bytes4,bytes18)", +"61b98cb3": "buyShips(uint256,uint256,bool)", +"61b9c6a3": "useBottle(address,uint256)", +"61b9c9f4": "buySeat(string,string,string)", +"61b9e2bb": "proveInUnconfirmedBalances(bytes,bytes32,bytes32)", +"61ba228b": "LukSevenToken()", +"61ba3377": "WatchLastTime()", +"61ba89d4": "NSCDistributionContract()", +"61bb246c": "secondBonus()", +"61bb9c52": "baseValue()", +"61bc1a49": "depositBalance()", +"61bc221a": "counter()", +"61bc6c57": "unauthoriseAddress(address)", +"61bcbe6f": "goodluck(uint256)", +"61bd12e0": "FAILED_STATUS()", +"61bdc978": "unfreezeFrom(address,uint256)", +"61be8456": "updateMarketData(address,address,uint256,uint256,uint256)", +"61beb1d7": "createAuction(address,uint256,uint256,uint256)", +"61bec256": "setContractActive(bool,bool)", +"61bec4fd": "QLANCEGO()", +"61bedcdc": "registerEmployee(address,address)", +"61bf2829": "RegistrationStatusChanged(address,bool,uint256,uint256,uint256,uint256)", +"61bf49ee": "plots(uint256)", +"61bf7692": "withdrawFoundationFunds()", +"61bf9c2a": "updatePoolContract()", +"61bfdc5d": "PatentCoinPreICO(address,address)", +"61bfe61b": "testAddUser(address,uint256)", +"61bffe01": "addIdentities(bytes32[],bytes32[])", +"61c003a7": "buyerNumDeals()", +"61c028e7": "getTokenURI(address)", +"61c083b9": "updateInflationRate()", +"61c1f224": "Q8ECOIN()", +"61c2c9c0": "getHowMuchUntilHardCap()", +"61c2e349": "create_a_new_market(address,address,uint256,uint256,uint256)", +"61c3b7f1": "setCharityBeneficiary(address)", +"61c52660": "Said(address,bytes)", +"61c5623d": "Vanadium()", +"61c61309": "setTokenController(address,address)", +"61c651b9": "oneQuarterInSeconds()", +"61c6a8e4": "addMutagenFace(uint256,uint256)", +"61c6bc82": "create(string,string,uint8,address)", +"61c748c7": "TressexToken()", +"61c76231": "resetBeneficiaryList()", +"61c7eb81": "Millionaire()", +"61c91c69": "webGiftLineTime()", +"61c9559b": "get_arbits_presale_open()", +"61c99b92": "msgsender()", +"61cac1fb": "partnersReward()", +"61cb5a01": "testString(string)", +"61cc576d": "evaluateOdds()", +"61cd5683": "testToByte(bytes)", +"61cd756e": "prevRegistry()", +"61cd90b0": "revealY(uint256,uint256)", +"61cdb1d7": "getByMesa(uint256,uint256,uint256)", +"61cdd2dc": "rightAndRoles()", +"61cec717": "changeCurrentCirculating(uint256)", +"61cf6d1c": "investeth2018()", +"61d027b3": "treasury()", +"61d0ad9e": "TransferFunds(uint256,uint256)", +"61d11318": "RedEnvelope()", +"61d161ea": "unitsPerTransaction()", +"61d3ba8a": "addWhitelistAddresArray(address[])", +"61d3d7a6": "isUpgradeAgent()", +"61d3d902": "getPlayerReferrerID(uint256)", +"61d43971": "updateGasCost()", +"61d49ea8": "reveal(uint256,uint256,bytes32)", +"61d51df8": "SKYSWAP()", +"61d5593c": "calculatePoohSell(uint256)", +"61d585da": "state(bytes32)", +"61d5f225": "minBetSize()", +"61d60021": "getCourseID(address,address)", +"61d61998": "implementsERC721YC()", +"61d689fa": "register(uint8)", +"61d68b54": "requestConsent(address,address,uint256)", +"61d6d385": "withdrawUnsold()", +"61d7c713": "validPayDest()", +"61d81aed": "exitBuyRequest(uint256)", +"61d942f3": "_removeLicenseTerms(bytes32,bytes32)", +"61d97c41": "GetPartyRole(address,address)", +"61da1439": "read(bytes32)", +"61da46c4": "joinDraw(uint256)", +"61db17ab": "_validatePurchase(uint256)", +"61dbbc80": "LARGE_PURCHASE()", +"61dbfc3f": "changeConfig(uint32,uint256,uint8)", +"61dc648f": "LogExternal(uint256,address,bytes32)", +"61dcd7ab": "createTime()", +"61dd8d13": "DexAlpha()", +"61ddf923": "_getTokenAmount(address,uint256)", +"61df46f6": "DatCoin()", +"61df5c4d": "getEncounterResults(uint256,address)", +"61dfacf2": "removeBuildingFromServer(uint256,uint8[10],uint8[10],uint8)", +"61dfdae6": "setData(address)", +"61e01356": "randNonce()", +"61e062a4": "_emitHardcapFinishedManually()", +"61e0f7a8": "swypeCode(address)", +"61e1077d": "decreaseApprovalWithSender(address,address,uint256)", +"61e1fe91": "setFreeDino(uint16)", +"61e214d8": "isValidPurchase(uint256)", +"61e25d23": "numActiveTranscoders()", +"61e3564f": "approveAccount(address,bool)", +"61e360b7": "maximumIndividualCap()", +"61e3c944": "setUint(uint256,uint256)", +"61e3f0a4": "setTimeBasedBonus(uint256[],uint256[],uint256[])", +"61e42039": "priceString()", +"61e49344": "buyinReturn(address)", +"61e4a23a": "expireGame(uint256)", +"61e4fd2b": "approveEscrow(address,uint256)", +"61e539da": "testFailWrongAccountTransfers()", +"61e5f5f2": "balEth()", +"61e60550": "TransactionDisputed(uint256)", +"61e6e66b": "DestroyedBlackFunds(address,uint256)", +"61e76056": "denyByDelegate(bytes8,bytes8)", +"61e7662b": "getAccountSpendingLimit(address)", +"61e88f9a": "test_0_validOwner_construction()", +"61e8ee04": "TOXTToken()", +"61e91ea1": "getDataContractAddress()", +"61ea6ed7": "transferFromBase()", +"61eb2e1a": "UNITStagesManager(bool,address)", +"61eb3836": "getProjectStatus(address)", +"61eb71c1": "setSellable(bool)", +"61eba552": "getMetaData(uint256)", +"61ecc8b5": "isLogo(address)", +"61ed2094": "demicals()", +"61ed373b": "comment(uint256,bytes32,bytes32)", +"61ed8097": "SEOToken()", +"61eda968": "cancelAssessment()", +"61edfe6e": "p_setBankOfEthProfitPercent(uint256,uint256)", +"61ef265b": "spaceAfterReturns()", +"61ef669b": "dateTier2()", +"61ef8d91": "setErc20Rate(string,uint256)", +"61efc7db": "resolveDelegation(address,address)", +"61efc807": "transferbatch(address[],uint256[])", +"61f00da2": "OMIVIAToken()", +"61f127dd": "_price_tokn()", +"61f134fa": "OZRealestatesToken()", +"61f15236": "addHolder(address,uint256)", +"61f17532": "tune(uint256,uint256)", +"61f188de": "createTree(string,string)", +"61f1c5ba": "vaultWallet()", +"61f1d889": "setFlag(uint256,uint256)", +"61f2c8b0": "_addShareToNewOwner(address,uint256,uint256)", +"61f2de50": "spawn(uint256,address)", +"61f30408": "emitTimeAdded(uint256,uint256)", +"61f37dff": "calculateIcoTokenAmount(uint256)", +"61f3c006": "setRoundMaxPerUser(uint256,uint256)", +"61f3c62e": "remain()", +"61f3cfb1": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256,string)", +"61f43285": "gubberment()", +"61f529af": "initEthMultiplicator(address)", +"61f54a79": "getNextUnsortedOffer(uint256)", +"61f61867": "addSettingDeprecation(uint256,uint256,address,address,address)", +"61f66dc4": "updateUserClaim(address,uint256)", +"61f6b429": "myAvailableFunds()", +"61f70161": "placeOrder(bytes16,address,address,uint256)", +"61f7025f": "fetchBalanceByAddress(address[])", +"61f721e8": "HGFCToken()", +"61f76d67": "withdrawEtherToOwner()", +"61f82156": "receiveCashback(uint256,address)", +"61f8cdd6": "transferETHToContract()", +"61f8e91a": "unitTestModifyStaker(uint256,uint256)", +"61f9ca4d": "modifyGroup(uint256,string,string,string,uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"61f9e04d": "getWithdrawn(uint256)", +"61faee9e": "noTransfer(address)", +"61fba37d": "investorBalanceOf(address)", +"61fbdf4e": "gameIsCalculated(uint256)", +"61fc3790": "Monthprofitend()", +"61fc65a0": "checkBirth(uint256)", +"61fc703c": "Danku_demo()", +"61fd718f": "getOrderAllocatedToFundPool(uint256)", +"61fd8f1b": "sendTokensToCompany()", +"61fda640": "ownerUpdateContractBalance(uint256,uint256)", +"61fdfa9b": "returnDeed()", +"61fe51a1": "rootAuthority()", +"61fec3a4": "clearSponsorableJobApprovals(address,uint256,address[])", +"61ff715f": "deploy(uint256,bytes)", +"61ff8191": "CirculationEnabled()", +"6200979e": "AngelInvestmentAddr()", +"6201124f": "employeeDenyExerciseOptions()", +"6201510a": "getPreSaleRank(address,uint256)", +"62016083": "removeDestinationChain(bytes8)", +"62017ebc": "left46(uint256)", +"6201d683": "createTokenUri(string)", +"62024dce": "forceCrowdsaleRefund()", +"62026229": "validateLand(address,int256[],int256[])", +"6202745f": "specialPeacefulSkills(uint256)", +"62027c1e": "changeCJTeamWallet(address)", +"620346c6": "setStopReceive(bool)", +"6203f09f": "MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE()", +"62040de3": "numberOfBoardMeetings()", +"62040e50": "Bitscreen(bytes32,uint8,uint8,uint8,uint8,string)", +"62043bd8": "DIVIDER()", +"62059839": "_setOwner(uint256,address)", +"62066eb3": "getMinimumAmount()", +"6206880b": "contributorsLockdown()", +"62074c31": "getProjectMaker(bytes32)", +"62075af4": "giff(uint32,address)", +"6207c802": "getSubjectIdentById(uint256)", +"6207d239": "privSaled()", +"620892bd": "NRB_address()", +"620a9c95": "BITSToken(uint256,string,uint8,string)", +"620b0f23": "getMyAnthill()", +"620b2731": "_getClientProviderUID(address)", +"620b5cd2": "Crypto()", +"620b75df": "portfolioManager()", +"620d025c": "roundFunds()", +"620db609": "rubyToken()", +"620eb8ee": "setDisbursementEndTime(uint256)", +"620edb32": "allocatePrivateToken(address[],uint256[])", +"620ffe99": "testFooUdate(uint256)", +"6211db22": "querybalance1()", +"621277cb": "hardCaps(uint256)", +"62133a6c": "getPlanetName(uint256)", +"62135491": "distributeTokensToMembers(uint256,uint256)", +"62150b3f": "KaoPuToken(address,uint256)", +"6215be77": "depositToken(uint256)", +"6215f292": "updateBasePrice(uint256,uint256[],uint256[],uint16)", +"62161235": "getRandomNumber(uint16,uint8,address)", +"6216bde5": "TokensRewarded(address,address,uint256,address,uint256,uint256)", +"6217229b": "sellRate()", +"62173282": "updateMVNRate(uint256)", +"6217903f": "BNB_TOKEN_PRICE_NUM()", +"62182636": "setParams(uint256[],uint256[])", +"6218e5cd": "setGuardianVend(uint256,uint256)", +"6218fd8b": "icoEndsAt()", +"6219004d": "setPosttgeAddress(address)", +"621a25f8": "right66(uint256)", +"621a61ac": "STATE_NOT_FINISHED()", +"621ab11a": "bonustokn()", +"621b23e2": "getOwner(uint32)", +"621bc379": "setReverseRate(address,int16)", +"621bd8d7": "getPreviousReportingWindow()", +"621c3275": "disembark(uint16,uint16,uint256)", +"621d388c": "senderIsAdmin()", +"621de5ac": "AUSBToken()", +"621ded8b": "FinishCompetitionEvent(uint32)", +"621df4be": "getCurrentElectionCycleBlock()", +"621e9a45": "BAQToken()", +"621f7e45": "setPeriodRound(uint256)", +"621fb946": "getLLV_edit_27()", +"62205bd8": "privatesaleFinalized()", +"622104d9": "integration()", +"62219866": "getPercent(uint256,uint256)", +"6221c805": "supplyRound3()", +"6221dc20": "HackableETH()", +"6221e77b": "Logs(address,uint256,uint256)", +"622235e6": "getPage(address[],uint256,uint256,bool)", +"62228c17": "CTADevilleToken()", +"62246c41": "setNickName(bytes32)", +"62251182": "_withdrawOwnerTokens()", +"6225924e": "_mint(bytes32)", +"6225a8ad": "GetResult(uint256)", +"6225b759": "setForceExecuteOfUsers(bool)", +"6226bddb": "getProductStructById(uint256)", +"6226d4b2": "addAddressToAdmin(address)", +"6227ed6e": "createPerson(string,string,uint256,uint256,uint256)", +"6227fd3a": "firstItemWrong()", +"622a0a19": "playerBudget()", +"622a10fd": "CORECoin()", +"622a2d31": "setDistanceAndPrice(uint16,uint16)", +"622ac8ed": "countWishesAt(address)", +"622ae7aa": "getDeployedTokens()", +"622af809": "setMintContactAddress(address)", +"622b0b29": "StakeEvent(address,uint256,uint256,uint256)", +"622b2a3c": "validDelegate(address,bytes32,address)", +"622b6659": "doBigDrop(uint256,uint256,uint256,uint256)", +"622c77fe": "totalSupplyLocked2Y()", +"622d6c97": "ExecutionError(string)", +"622d82df": "Buddha()", +"622dda96": "chooseRandomNumber()", +"622ddaba": "getGenesForSaleBySeller(address)", +"622e5026": "Insurance()", +"622e88cb": "testBitsXorSuccess()", +"622f9730": "forward(bytes,address,address,uint256,bytes,address,uint256)", +"622fe39f": "getLoanData(uint256)", +"6230ebda": "defrostFrozenTokens()", +"6231775b": "miniGameId()", +"623195b0": "setABI(bytes32,uint256,bytes)", +"623406d2": "setRecordContract(address,address)", +"6235e3a2": "getAddressCreatorById(bytes32)", +"6235eef3": "getCurrentReportingWindow()", +"62362cc2": "COIN_SUPPLY_TOTAL()", +"623659b4": "doTransfer(address,address,uint256,uint256)", +"623670b2": "sendTokensToPartner()", +"62373537": "current_start_divholder()", +"6237564c": "isDopeRaiderDistrictsCore()", +"6239f13d": "triggerSoftCap()", +"623ba5c9": "callBackGasAmount()", +"623d2295": "Minado(address,address)", +"623d2b62": "getRequiredBetAmount(uint256)", +"623d5652": "projectExists(address)", +"623d5e56": "devolverBici()", +"623d96ed": "preDuration()", +"623decaa": "unlockedTokensOf(address)", +"623e4fb8": "BBCToken()", +"623eff55": "tokensTransferred()", +"62400e4c": "supplyOf(address)", +"6240282c": "LiquidDemocracyControllerFactory(address)", +"6240c7aa": "COENXToken()", +"6241bfd1": "Token(uint256)", +"6244326d": "humanityFund()", +"6244b7ed": "unWhiteListInvestor(address)", +"624522f9": "accountFrozen(address)", +"6245adff": "DirectlyDeposited(address,uint256)", +"6245eb07": "setProvenance(address,uint256)", +"62463079": "tier2End()", +"62464576": "stage_2_add()", +"62465f0a": "GenesisManager(address,address,address,address,uint256)", +"62469353": "firstDepositTimestamp()", +"6247c38f": "updateChargingRate(uint256)", +"6247cfd9": "priceForKeys(uint256,uint256)", +"6247f6f2": "whitelistToken(address)", +"62486d42": "getTokensAmount()", +"6248cf49": "_donationSupply()", +"6248d6bf": "getOracleMetaData(address)", +"6248fd10": "SLC()", +"62491332": "lockPurchase()", +"62492e9d": "preIcoBonus()", +"624964c3": "getBancorContractAddress()", +"6249a5c7": "UnpauseEvent()", +"624a8bc3": "MyTotalWithdrew()", +"624aba21": "_getWinCountWeight(uint256)", +"624adc4c": "OwnershipTransferCompleted(address)", +"624ae5c0": "rID_()", +"624ba0a4": "maxImports()", +"624bb58f": "marketingSupply()", +"624bb8b3": "setCBaddress(address,address,address)", +"624bd6c4": "depositToken(address,uint16,uint256)", +"624c3dbd": "imageUploadComplete(uint256)", +"624c5673": "USDollars()", +"624cc0a5": "teamMemberAtIndex(uint256)", +"624d4309": "USBcoin()", +"624dd6a9": "getInvestmentsByCountry(uint16)", +"624de3d9": "InterfaceSignature_ERC721Optional()", +"624dee7c": "_release(address,address,uint256)", +"624e3b36": "totalearners()", +"624ecda9": "Sleep()", +"624f011d": "doStop()", +"62502169": "sendCollateral(address,uint256)", +"62502fe7": "getNameDigest(string)", +"6250bfa3": "createOrder(bytes32,bytes32,address)", +"625101d5": "getOwnerMoney()", +"625126ed": "shift_left(uint32,uint32)", +"6251aee6": "icoPhase3End()", +"625295fd": "distributeCollectiblesTo(address)", +"6252c127": "onCrowdsaleEnd()", +"6252d651": "setForegroundColors(bytes3[])", +"62531721": "getStack(uint256)", +"6253367a": "queryChallenge(bytes32)", +"6254add1": "PRIVATE_SALE_POOL()", +"6254cf80": "setGameHostAddress(address)", +"62564c48": "getProposals()", +"62568d83": "min_buy_block()", +"62571cac": "getTodayOwnerName()", +"625785bb": "productionCardIdRange()", +"62581b79": "CubaazCoin()", +"6258683e": "devMiningRewardTransfer(address,uint256)", +"6258d524": "saveEther()", +"62598ae6": "PaymentExpected(bytes8)", +"62599964": "usesThem()", +"625a6726": "fixClock(bytes32,uint64)", +"625adaf2": "setTokens(address[])", +"625b666c": "Luxury()", +"625b8e60": "_redeemByPartition(bytes32,address,address,uint256,bytes,bytes)", +"625bc37b": "releaseTeamTokensAfter12Months()", +"625becbc": "showLockState(address)", +"625cbb23": "setWhiteListAddresses(address)", +"625cc465": "baseDonation()", +"625cfc46": "sellRateZeroQuantity(uint256)", +"625d1fe2": "viewSecondBatchOfClauses()", +"625fcce7": "dealer_cut()", +"625fe9ec": "updateCrowdsale(uint256,uint256,uint256,uint256,uint256)", +"6260f55b": "ETH_USD()", +"62612c6d": "PatronTwoWithdrawal()", +"62614ae6": "BNT_CONVERTER()", +"6261c662": "bonusStart()", +"626263c5": "calculateEthToChargcoin(uint256)", +"626340b2": "block0()", +"626452df": "test_feePoolShare_noClaimableStake()", +"6266e135": "Gmt()", +"62674e93": "getStepFunctionData(address,uint256,uint256)", +"62676d78": "RANGEEND_8()", +"6267967b": "batchReservedTokenAllocation(address[],uint256[])", +"6267c456": "organizer7()", +"6268a0cd": "stakeSDC(address,address,uint256)", +"6268e921": "acceptGame()", +"6269420e": "seedAndPresaleTokenIssuedTotal()", +"62694b68": "lastSignedBlockNumber()", +"62695eae": "allowedTransfer(address)", +"62697f69": "getLLV_edit_17()", +"6269ae48": "tokenToContributor()", +"6269f9fc": "getGameId(string,string,uint16,uint64)", +"626a0e1c": "addSoundEffect(uint256,uint256[])", +"626a413a": "activateBounty(uint256,uint256)", +"626b1070": "beneficiaryDeposit(uint256)", +"626be567": "totalToken()", +"626c0a45": "stock(uint16,uint16,address,uint256)", +"626c6bc6": "ETO()", +"626d0358": "setTokenDefaultPartitions(bytes32[])", +"626d4a36": "right55(uint256)", +"626d666c": "theDao()", +"626e4675": "directorLockDays()", +"626e8fd3": "setBonusDate1(uint256)", +"626ebe39": "toggleReceiveEth()", +"626f9e20": "calculateMaxEthIssued()", +"626fc458": "finalizeTrade(address,uint256,address,uint256,uint256)", +"626fd353": "getSelection(uint256)", +"627045bf": "changeActiveNameIndexTo(uint256)", +"6270b780": "DebitClient(address)", +"62714a14": "getPhone(address)", +"62715547": "castVote(bytes32[])", +"62721129": "getMultiSigWallet()", +"6273106a": "payoutPool()", +"62731ff1": "onDeposit(address,address,uint256,uint256)", +"62735618": "finalizedCapital()", +"62738998": "getInt()", +"62744fee": "PallyCoin()", +"6274a35c": "team_total_lock_days()", +"6274ca4b": "setWeiPerUSDinTGE(uint256)", +"62751a06": "SFT_PER_ETH_FIRST_EARLY_BIRD_RATE()", +"6275448e": "batchApprove(address,uint32[])", +"62754563": "CelebsParty()", +"62765eb7": "receiveApproval(address,uint256,address,string)", +"6276b368": "rateOfCharging(address)", +"62770252": "needsFuneral(uint256)", +"62773951": "TrustReso(uint256[3],address,address,address[])", +"627749e6": "closeTime()", +"62779e15": "payFees()", +"62797ef5": "dayPotHighscore()", +"627992c7": "VULCAN_POD_MAX_CARGO()", +"627a326b": "getBytes32Slice(bytes,uint256)", +"627a3311": "QvoltaToken(address)", +"627aa6d2": "buyAndTransfer(address,address,bytes,uint8)", +"627adaa6": "revealMulti(uint256[],uint256[],uint256[],bool[],bytes32[])", +"627b3d9a": "BTCAUC()", +"627c2516": "WizardsvsCeltics()", +"627c2d1e": "getTX()", +"627c34ad": "removeSubscriber(address)", +"627c81ff": "erc20ContractByIndex(uint256,uint256)", +"627d6f9f": "get_multiple(uint256,uint256)", +"627e64d2": "getQuote(address,uint64)", +"627e667b": "StandardToken(address,uint256)", +"627eb56c": "setMaxContributionPhase1(uint256)", +"627f09c3": "setConfiguration(address)", +"627f22fe": "GiftMetadata(uint256)", +"627f47c6": "transferWithLock(address,uint256,uint256[])", +"627fd3bb": "addCbAddress(address,bytes1)", +"6280382a": "cancelTrade(address,uint256,address,uint256,uint256)", +"62806296": "transfer_coins(address,uint256)", +"6280b0bb": "batchRegularTransfer(bytes32[],bytes32[])", +"6283051f": "setOraclizeQuery(string)", +"6283440b": "wingsTokensReserv()", +"62838d8b": "getLastAddress(bytes32)", +"628392bd": "bonusPhase1()", +"62848f36": "tokenRate30()", +"6284ae41": "exitFee()", +"6284fd22": "getMyPubKey(bytes32)", +"62850233": "transferWithDividends(address,uint256)", +"6285a259": "calculateTokensEnabledOne(address,uint256)", +"6285d703": "NERO()", +"6288020f": "endThirdWeekICO()", +"6288a63c": "NotaryChain(uint256)", +"6288a9a3": "maxUserContribution()", +"62890063": "WhitePrivilegeToken()", +"62891b5d": "multiAccessChangeRequirement(uint256)", +"6289fdbe": "VenomToken()", +"628a01ce": "stakingMintRate()", +"628b75bf": "slashDownRequest(uint256,address,uint256,bytes32)", +"628c225c": "roomNight(uint256)", +"628c2778": "DEXToken()", +"628c866e": "setCurrentActiveGameID(uint256)", +"628d5ef1": "setWeiUsdRate(uint256)", +"628da35e": "get_termAmount(uint256)", +"628dda8d": "VDGToken()", +"628e50b5": "brokerFee()", +"628e7a38": "_initializeVesting(address,uint256,bool)", +"628eaa88": "GeocashToken(uint256,uint256,uint256,address)", +"628ee84f": "in_dispute_phase()", +"6290a009": "bids_sorted_count()", +"62932301": "importer()", +"62935a98": "getContractDataSK()", +"6293a989": "TRONVSupply()", +"6293b5bb": "presaleMaxEtherCap()", +"6293fd1e": "payBack(address)", +"6294f858": "distributeFinancialAward(address[],uint256[])", +"6295c61a": "transferItem(address,address,uint256)", +"6297c16c": "deleteToken(uint256)", +"6297dbf4": "existsMesa(uint256)", +"62981b18": "deployBallot(bytes32,bytes32,bytes32,uint64[2],bool[2])", +"62985882": "VSTA(string,string,uint8,uint256)", +"62985b87": "NebuliToken()", +"62986e27": "Canary(address,uint16)", +"629873b2": "createRequestAsPayeeAction(address[],address[],int256[],address,address,string)", +"6298c93a": "usdCap()", +"6299a6ef": "update(int256)", +"6299f8cf": "stop(uint256)", +"629a9ce7": "coreTeamUnlockedAt()", +"629ad124": "chancesBought()", +"629aef56": "QuintToken(address)", +"629b656e": "PryzeToken()", +"629b9cb1": "takeProjectBonus(address,uint256)", +"629bc0b4": "getPlayerPayout(uint256)", +"629bf9a8": "updateMinMaxBetPrice(uint256,uint256)", +"629c1b67": "SoftCapReached()", +"629c37c2": "HSShopSaleFee()", +"629cefee": "adjustTiming(uint256,uint256)", +"629d0f2f": "teamd()", +"629d93db": "removePromo(bytes32)", +"629e89a0": "setMinDai(uint256)", +"629f1486": "YoonContract()", +"629f4028": "getVoteNum(address)", +"629f4b3b": "StatsTotal()", +"629fb53d": "getOrderbookLength()", +"62a09477": "changeOwner()", +"62a0b56b": "testUnset()", +"62a1029c": "YUPIE_PER_ETH_PRE_SALE()", +"62a144d9": "safeMod(uint256,uint256)", +"62a17a46": "AXPCoin()", +"62a31c4a": "dynamicLength(bytes4,bytes)", +"62a36a54": "Application()", +"62a39ff7": "setShareHolder(address)", +"62a44fe9": "has_voted()", +"62a49ae3": "depositTokensFor(address,uint256,address)", +"62a4b230": "setLockedRatio(uint256)", +"62a4be31": "buyTokensByProxy(address)", +"62a4cd14": "endFunding(uint256)", +"62a51eee": "move(uint80,uint80)", +"62a52ed6": "set_price(bytes12,uint256)", +"62a59ade": "distributePuppyCoinCLarge(address[])", +"62a5af3b": "freeze()", +"62a76ce1": "accrueAdvisorsTokens(address,address,uint256)", +"62a7c5a6": "nextWithdrawDayFoundation()", +"62a80b42": "newToken(string,address)", +"62a87466": "STATE_DONATION_ROUND_1()", +"62a974b6": "vote01NoCount()", +"62aa9a00": "enehtoken()", +"62aabb9e": "SafeToken()", +"62aac84d": "setHaltSale(bool)", +"62aaf089": "getExchangeRate(uint256)", +"62ab1216": "updateWithOracle()", +"62ab8cc1": "howMany()", +"62abb560": "transferSuperOwnership(address)", +"62abda69": "totalIssuanceDebt()", +"62ac6115": "updateRequireKYC(bool)", +"62aca822": "setNation(address)", +"62ad1b83": "operatorSend(address,address,uint256,bytes,bytes)", +"62ad9bda": "newProvider(address,string,bytes32,uint256)", +"62addeed": "HumanX()", +"62ae4d29": "OBIMOLOGIA()", +"62aecc47": "totalBondSupply_BULL()", +"62aee544": "ADVISOR_SHARE()", +"62afd64a": "unpaidPercentage(bytes32)", +"62aff4d5": "commitPeriodStartedTimestamp(bytes32)", +"62b08e70": "setVotingContractAddress(address)", +"62b0ae87": "pack(bytes)", +"62b24189": "DepositToBankAccountFromDifferentAddress(uint32)", +"62b26f95": "totalFish()", +"62b3b833": "createCoupon(string)", +"62b40489": "businessPlannedPeriodEndTimestamp()", +"62b40918": "addPersonalCaps(address[],uint256)", +"62b40f9f": "destroy(address,address)", +"62b45318": "exchangeEtherForNominsAtRate(uint256)", +"62b4faa7": "Edujano(uint256,string,uint8,string)", +"62b52b49": "LADCToken()", +"62b6a282": "left42(uint256)", +"62b6a963": "_batch2_icosaleEndTimestamp()", +"62b6dc8e": "RektToken()", +"62b78bc4": "team_coins()", +"62b83c6b": "balanceAsCreator()", +"62b96a18": "teamUnvested()", +"62ba1649": "stopLottery(bool)", +"62ba4aef": "payInvoice(bytes32,uint256)", +"62ba9687": "toTimestamp(uint16,uint8,uint8,uint8,uint8)", +"62bb7533": "getTokenToEthOrderList()", +"62bb758f": "userSecurity(address)", +"62bc56e6": "getCompany(address)", +"62bc63c4": "getCozyAgain(uint256)", +"62bca778": "withdrawalFX(uint256)", +"62bd689c": "setBonusPercent(uint256)", +"62be3172": "Message(address,address,address,string)", +"62beaa82": "toData()", +"62bf6fa7": "medalDecimals()", +"62c01b2d": "apply_compensation(uint80)", +"62c06767": "sweep(address,address,uint256)", +"62c0e3b7": "SpoutMintableToken()", +"62c0ffa8": "getDCountedBasicBallotID(bytes32,uint256)", +"62c13ff3": "initSale(uint256,uint256)", +"62c19061": "getYearDay(uint256)", +"62c1adb0": "KittenCoin()", +"62c1f389": "swap(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", +"62c24067": "blockFunds(uint256)", +"62c2b7c8": "getTTTAddress(string)", +"62c335c1": "checkCallback(address,uint256,bytes,bytes)", +"62c375a7": "library15function()", +"62c3dd5a": "prepareForRefund()", +"62c3fdb2": "getFundsOwner(bytes32)", +"62c47064": "setArbitrator1and2(address,address)", +"62c48e20": "capFiatAndETH()", +"62c49256": "whitelistBasketFactory(address)", +"62c4c89e": "getMixParticipantByPubKey(uint256)", +"62c509c3": "XYTgas()", +"62c5aecc": "getEthToTokenAddOrderHint(uint128,uint128)", +"62c5c03a": "getbalance(uint256)", +"62c5c254": "changeFounderMultiSigAddress(address)", +"62c63e31": "NotFinalized(bytes32,bytes32)", +"62c655f5": "removeVoters(uint256[])", +"62c6beea": "_buy(uint256,address,uint256)", +"62c7855b": "getConfigBytes(bytes32)", +"62c7e96c": "deathData_f16()", +"62c7fa76": "lockStartTime()", +"62c95aa1": "getMaxTickets()", +"62c99e84": "_Approval(address,address,bytes32)", +"62c9da62": "setCompte_1(string)", +"62caf484": "GDCAcc03()", +"62cb1ac2": "validateOrderHash(bytes32,address,uint8,bytes32,bytes32)", +"62cdd872": "verifySignatures(uint8[],bytes32[],bytes32[],bytes32)", +"62ce071c": "publicTokenCap()", +"62ce7043": "reloadEarnings(uint256,uint256)", +"62cee7ad": "staffInfo()", +"62cf0197": "getVIATokens()", +"62cf54c8": "setDeposits(uint64,address,uint16,uint64)", +"62d020d9": "addVersion(address,string,string)", +"62d027bf": "GXVCSentByToken(uint256,address,uint256)", +"62d05c78": "cancelOffer()", +"62d0af7a": "set_BCDB_contract()", +"62d0ce45": "TOKEN_RATE_05_PERCENT_BONUS()", +"62d176cb": "buyTokens(bytes32,address)", +"62d1dac2": "setUnofficialApplicationSignUpFee(uint256)", +"62d1fee3": "addLegitDevAddress(address)", +"62d21602": "bkaddress()", +"62d246a4": "getBetsMas(uint32)", +"62d2c393": "GenkiProject()", +"62d2ecb9": "setMaxSpend(uint256)", +"62d3755b": "fullTokenWallet()", +"62d3b5c5": "maxAmmount()", +"62d55b6d": "VOTING_TIMESPAN()", +"62d576bd": "periodITO_mainCapInUSD()", +"62d590ac": "GrantToken(address,uint256,string)", +"62d5acb1": "rebateOneFenzi_()", +"62d6b7fb": "percentageOfRaisedAmountThatRemainsInContract()", +"62d7216c": "unregister(uint256,bytes)", +"62d72c08": "RozowkaCoin(uint256,string,string)", +"62d73eb8": "startElection()", +"62d91855": "delAdmin(address)", +"62d93527": "setBrokerFee(uint256)", +"62d966c9": "changeEmployee(address)", +"62d9c267": "ICOEnded()", +"62dbc55c": "DevTokensHolder(address,address,address)", +"62dbdfef": "CompanyToken()", +"62dbf261": "getTokensForEther(uint256)", +"62dc0133": "HIGHER_PRICE_RESET_PERCENTAGE()", +"62dc6e21": "PRESALE_PRICE()", +"62dc9ced": "Roulette(uint256)", +"62dd748c": "toUpper(string)", +"62dd9c71": "checkWinNobody(uint32)", +"62de871e": "startBattle(string)", +"62df5b7d": "BD0Token()", +"62e05175": "setMotionDB(address)", +"62e1de00": "test_polarBoardInstance()", +"62e23e9e": "NAME_NOT_AVAILABLE()", +"62e26e45": "loanCompleted(uint256,uint256)", +"62e28f7d": "channelModule(uint64)", +"62e2aa00": "burn(uint256,string,uint256)", +"62e2d0de": "get_foo()", +"62e4aeb8": "customExchange(address,address,uint256)", +"62e534d2": "setBlocklancerToken(address)", +"62e5b1f2": "_owns(address,address,uint256)", +"62e69886": "RecipientUpdated(address,address)", +"62e6e7c7": "disTrustDealer(address)", +"62e76013": "management(uint256)", +"62e7707e": "whitelistAddresses(address[],bool)", +"62e7ba3f": "consumptionPointer()", +"62e838ef": "returnBet()", +"62e881a4": "nextTournamentRound()", +"62e888bb": "STRIKE_PRICE()", +"62e8b948": "stepOneLockEndTime()", +"62e8e8ac": "changeTokenPrice(uint256,uint256)", +"62ea82db": "bids(address)", +"62eb0068": "redeemByPartition(bytes32,uint256,bytes)", +"62eb33e3": "cr()", +"62eb4c89": "is_started_payouts()", +"62eb5789": "setLLV_edit_33(string)", +"62eb6da1": "registeredToken()", +"62eba54c": "doesUserOwnItem(address,uint256)", +"62ebcdcf": "setRtmContract(address)", +"62ec8e53": "adminAddBallot(string,uint256,uint256)", +"62ed4f04": "SSBToken()", +"62ee0082": "setTokenContractsAddress(address)", +"62ee37aa": "InfluToken()", +"62ee4b26": "AUORANEX()", +"62ee6d29": "changeHashtoLowOrHigh(uint256)", +"62ee7b03": "startTakeToken()", +"62ee922b": "unofficialApplicationSignUpFee()", +"62ef0e65": "withdrawPresale(address[])", +"62ef1f81": "confirmPayment()", +"62ef7738": "total_money_back()", +"62f03290": "payRefund(bytes32,uint256)", +"62f2296e": "_transfer(address,address,uint256,string)", +"62f3ed92": "PowerQuantumCoin()", +"62f3febf": "isUserBlockedByContract(address)", +"62f44d8a": "Dadyys()", +"62f4ed90": "isAuthorized(bytes32)", +"62f54c18": "removeAllowedTokenInternal(address)", +"62f57ff6": "GudTesteContratoF()", +"62f5a23f": "transferToToken(address[])", +"62f5aa4c": "getAirdropIds()", +"62f5c2e3": "maxContributionPhase1()", +"62f5ed61": "add_to_bounty()", +"62f60954": "_reAdjustDifficulty()", +"62f63c6e": "EarthMedz()", +"62f69039": "unlockVault()", +"62f6cf7f": "getRegisteredModuleAt(uint256)", +"62f91eff": "AnythingAppToken()", +"62f927d4": "getDefaultReportingFeeDivisor()", +"62f96fc1": "splitBalanceAccordingToRatings(int256,int256,int256)", +"62fb09b2": "getRefDescr(uint256)", +"62fb0ff8": "morties_TO_HATCH_1RickAndMorty()", +"62fb6fe1": "getMonster(uint256)", +"62fb9697": "diffSeconds(uint256,uint256)", +"62fc178b": "gasPriceOraclize()", +"62fca3fa": "mintTokenBulk(address[],uint256[])", +"62fdaf1d": "removeFromBattle(uint64)", +"62fde48a": "LogDeposited(address,uint256)", +"62fe3b4d": "setEndOfPresale(uint256)", +"62fec51b": "icoEndTimestampStage2()", +"62feff3a": "developerAllocation()", +"62ffb195": "REFERRAL_REWARD_PERCENTAGE()", +"62ffb3bf": "trueUSD()", +"630061f3": "getTokensDistributeds()", +"6300c768": "takeEther(address,uint256)", +"63018e1a": "minTokensToSale()", +"63036f86": "totalIssuedEarlySale()", +"63037b0c": "payees(uint256)", +"6304335b": "betsCloseAt()", +"6304fa3a": "Test(uint256,string,uint8,string)", +"63052d82": "getOwnersIndex(address)", +"63055d79": "fetchRate()", +"6305d010": "registerTeam(string,address,string,bool)", +"63066434": "getPlayerVaults(uint256)", +"63069a35": "assign2(address,uint256)", +"63079315": "lengthOfCommonPrefix(bytes,bytes)", +"63086b5e": "afterSoftCapDuration()", +"6308769e": "LogFinishICO(address)", +"6308a76f": "_approveMint(uint256)", +"6308ae65": "managersCount()", +"6309242c": "setUserHatchRate()", +"630a9f94": "viewMemory(uint256)", +"630babac": "WhitelistParticipant(address)", +"630bae99": "payoutWithFee(uint256)", +"630bcd99": "drawRandomItem(string,uint256)", +"630c010e": "getElements(uint256[])", +"630cd1e9": "ratePrivateSaleStage()", +"630cea8e": "submitSignature(bytes,bytes)", +"630d0552": "ColorPurchased(address,address,uint256,uint256)", +"630d43cc": "DoroDiamond()", +"630db9ee": "getRemoveMarketCalled()", +"630dbe79": "StandardERC20Token(string,string,uint8)", +"630dc19d": "_payoutJackpot()", +"630dd52f": "TOKEN_TREASURY()", +"630e07f1": "RESERVED_TOKENS_FOR_ICO()", +"630e0ae6": "createPersonGen0(string,string,uint64,bool)", +"630e1d5f": "hasEnoughStake()", +"630eb125": "getAuditAssignBlockNumber(uint256)", +"630f1e6c": "withdrawAsset(bytes,uint256)", +"630f479e": "perStageNxc()", +"630f6f47": "betWithAff(address)", +"630fd0ac": "totalSupplied()", +"6310c722": "convert(address,uint256,uint256)", +"6310d902": "getAddressBoughtCount(uint16,address)", +"631121ca": "ISCToken()", +"63121665": "countPeriod(address,bytes5)", +"6313bd30": "DEP()", +"631407a2": "setTokenSupplierAddress(address)", +"6315592b": "orderModify(uint256,uint256,uint256)", +"63155d2b": "craft(uint16[16],uint16[16],uint16[16],uint16[16])", +"63157e2b": "issue(uint32,uint8,uint256,bool)", +"6316f6d1": "getNotConstant()", +"63175913": "StandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"63176ad9": "changeDealDate(uint256,uint256)", +"6317cc5b": "tokenCapForThirdMainStage()", +"631859d0": "calculatePotentialPayout(uint256)", +"6319d32f": "DOJI()", +"631a4231": "createContract(string,string)", +"631a925c": "Weekycoin()", +"631b0520": "getPaimentTime(address,uint256)", +"631b3672": "roundSetUp()", +"631b7e83": "LogResult(bytes32,address,uint256,uint256,uint256,int256,bytes)", +"631bdb63": "playerCurrentlyRegistered(address)", +"631c07f0": "getBonusByDate()", +"631c42ae": "ethExchangeWallet()", +"631c56ef": "depth()", +"631ccb1d": "getInfoMarketItem(bytes16)", +"631d3f3b": "liveDragons()", +"631d551b": "FAMEToken()", +"631d9b1f": "LuxProject()", +"631dc853": "EquitySharingSystem()", +"631dd1a2": "transferFreeze(address,uint256)", +"631de4d6": "replace(address,address)", +"631e0c69": "addMessage(string,string)", +"631f0d66": "upgradeAddress()", +"631f637f": "preSaleMaxCapInWei()", +"631f9852": "isSealed()", +"63200443": "FindLettuce()", +"6320212b": "refreshReputation(bytes32,address[])", +"63204648": "setMultiWallet(address)", +"6321f298": "MeraToken()", +"632261c3": "removeVendor(uint256)", +"63228b57": "KarmaToken(uint256,string,uint8,string)", +"6322961d": "getAddressByUsername(string)", +"6322bb39": "tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"6323b526": "transferFromTokenSell(address,address,uint256)", +"6323dc26": "GCRTokenERC20()", +"632447c9": "updateReward(address)", +"632473da": "CNC()", +"632488ff": "POOH()", +"6324af1f": "advisorsBalance()", +"6324e70b": "offerToLend(uint256,uint256,uint256)", +"63258462": "setHomeMaxPerTx(uint256)", +"63263858": "ethartArtReward()", +"6326cb5b": "_purchaseCompany(uint256)", +"6328af59": "YeedToken(uint256)", +"63299226": "teamOneId()", +"6329cfa5": "settleLend(bytes32[8],bytes,address,uint256,bytes,bytes,bytes,bytes)", +"632a3e52": "vestTokens(address,uint256)", +"632a8144": "midasFounderAddress()", +"632a9a52": "vote()", +"632ca5c9": "getArts()", +"632ccecd": "IkuraAssociation()", +"632ce0f8": "whoIsAdmin()", +"632e082a": "isMainFirstDay()", +"632e1dfe": "OWNER_ADDR()", +"632e2b95": "addWire(address,uint256,uint256)", +"632e44af": "distributeBonusTokensByList(address[])", +"632ebd6b": "changeIsOpenFlag(bool)", +"632f0ba6": "descriptionHashes(bytes)", +"632f83eb": "realWorldPlayerFromIndex(uint128)", +"632fbda4": "replaceController(address)", +"63301198": "AetherCore()", +"63302789": "TOKEN_FOUNDERS()", +"63304bc3": "m_lastFundsAmount()", +"6330ac09": "get_price(string)", +"6331e7d4": "beforeEach()", +"6331eae0": "saveTokenValues()", +"63334c58": "transferETC(address)", +"63340338": "fuint32(uint32)", +"633423be": "paymentAddress()", +"6335010d": "getVestingRevokeDate(address,address)", +"63365651": "InterfaceId_ERC721Enumerable()", +"63367f4d": "tagline()", +"6336ac19": "setTTGCoin(address)", +"63385ad1": "addNewAccount(address,uint256,uint256)", +"63385b64": "BerryToken()", +"633891c4": "getPlayerAff(uint256)", +"6338977e": "setMetadataUser(string)", +"6338f693": "Airdropped(address,address,uint256)", +"63391689": "withdrawForFourStep()", +"63392843": "decrease(bytes32)", +"63396109": "createGen0Token(address)", +"63397825": "changeMerchantAccount(address)", +"633982c5": "viewLatestEthTransactionRequest()", +"6339b5f6": "SUSIToken(uint256,string,string)", +"6339be39": "totalStarSupplyRemaining(uint8)", +"6339fbcb": "finishGame(uint32,bytes32)", +"633a6dde": "deathData_a9()", +"633a7574": "CowToken(address,address,uint256)", +"633ab5e0": "callchecked()", +"633b1954": "finalizeMigration(address)", +"633b4c04": "o_velho_problema(uint256,uint256)", +"633b5b1f": "presaleTotalWei()", +"633c78b5": "create(uint256[],uint256[])", +"633ce1d2": "premiumDomainK()", +"633d17eb": "toAscii()", +"633de6aa": "setTime2Rest(uint256,uint256)", +"633dfc70": "vote(bool,address)", +"633f7a82": "queryType()", +"6341b3fe": "subBrokerNum()", +"6341ca0b": "retrieveTokens(address,address)", +"634363f3": "amountOf()", +"63443679": "rateUpgrade(uint256)", +"6344a898": "setWeiRaiseLimit(uint256)", +"63453ae1": "distribute(address)", +"63456fa9": "getTokenById(uint8)", +"634663a5": "setPriceRatePhase2(uint256)", +"634667b2": "claimAndTransfer(address)", +"634710ae": "BYTC()", +"63472fad": "setVote(address,string,uint256,address,bool)", +"634758e5": "TodaNetwork()", +"6347a377": "nextAuction()", +"6347bb42": "SGACoin()", +"63482cf0": "eachUnlockCounts()", +"63488772": "WanersiLinkToken(uint256,string,string)", +"6348c4cf": "Money(address)", +"6348eae6": "neverPauseAgain()", +"634965da": "sendEther(uint256,address,address)", +"634993c6": "refill(bytes32)", +"6349cafa": "changePrice(uint16,uint256)", +"634b3df9": "minPriceInWeiForPre()", +"634b4a8f": "setOperater(address)", +"634b5043": "collectWinnings()", +"634b8dc3": "Altn()", +"634bc7db": "create(bytes32,bytes32)", +"634c5c51": "authorized_triggerStashedPayoutTransfer(uint256)", +"634c688a": "burnAllowed()", +"634d27c3": "getProviderIsForRent(uint256)", +"634d6e57": "investorFullInfo(address)", +"634df88e": "ENTA()", +"634e66ac": "admin_isWithdrawable(bool)", +"634eaff1": "ETERNAL_APPROVAL_VALUE()", +"634ec9f9": "buyKnowledge()", +"634ef3ce": "Mqthereum(uint256,string,string)", +"634ef8da": "_setSetting(string,uint256)", +"634f752b": "optionLibrary()", +"634fcb8e": "setupCrowdsale(address,bool)", +"634fe2a6": "others_prize()", +"63505ae8": "getBidsCount()", +"63506c16": "transferfromOwner(address,uint256)", +"6350b2c2": "mints(uint256)", +"6350ec6f": "changeYumAddress(address,address)", +"6351546d": "settleTransactionByMediatorFee(uint256,uint256)", +"635179ca": "setHiddenCeilings(bytes32[])", +"6352211e": "ownerOf(uint256)", +"6352585c": "ENCToken(uint256,string,uint8,string)", +"6352c538": "TokensWithdrawn(address,uint256)", +"63534dd8": "seedContract()", +"6353586b": "reward(address)", +"63542c26": "approvedToken(address,uint256,bytes)", +"635439ac": "updateCurrentGameCardId(uint256,uint256)", +"635550a6": "blockchainExchangeFrom(address,uint256,uint256,bytes32)", +"63558f5c": "transferEscrowship(address)", +"6355bf2f": "optionsSet()", +"635639b4": "_unpackPlayerData(uint256)", +"6356443e": "TokenPreSaleTransfer(address,address,uint256)", +"6356739d": "Sent(address,uint256,uint256)", +"63567673": "createBet(address,address,uint256,uint256,bytes32[])", +"63569ca8": "rewardProjectCompletion(uint256)", +"6356cdac": "Bonus(uint256)", +"6357cc12": "startpublicBattle(uint256,uint256)", +"6357ddaa": "getRandomTime(uint256)", +"63581c04": "setFactoryAsset(uint256,uint16)", +"63586d6a": "claimBondReward()", +"635875d9": "changeMinimumCommission(uint256,uint256)", +"6358aac0": "isInterestStatusUpdated()", +"6359036b": "redeemDaoBounty(bytes32,address)", +"63591d09": "poolMaxAmount()", +"635994fd": "create(address,bytes32,address,bytes32,address,bytes32)", +"6359a656": "EUnpause(address,string)", +"6359a974": "TOTAL_TOKENS_TO_DISTRIBUTE()", +"6359b5b1": "totalIssuingCollateral_limitedSum()", +"635a5d7b": "setHeartbeatTimeout(uint256)", +"635b9047": "ExpandCoin()", +"635ba8a1": "ApexTalk()", +"635ca669": "addBoardOnUser(address,address)", +"635cfda2": "Incrementer()", +"635d0239": "toUint(bytes,uint8,uint8)", +"635da243": "autorizar(address)", +"635e2abf": "_btcToken(address)", +"635eecea": "privateEventTokens()", +"635f6a79": "method3(string)", +"6360edc1": "getAllForPubKeyBetween(bytes32,uint256,uint256)", +"6360fc3f": "bought_tokens()", +"63615149": "withdraw(bytes32,bytes32)", +"63617328": "setJackpotCompleted()", +"6361d3e0": "unpauseActivity(uint16)", +"6361d9e9": "testConstructorUsingDeployedContract()", +"6362102d": "rebalanceEtherDelta(address,uint256)", +"63621532": "setGasUpperBound(uint256)", +"6362ffd3": "rebuyInformTime(address)", +"63637c87": "createNewPlayer(string)", +"636544be": "changeVeredictum(address)", +"63655ebb": "DiaryLog(uint256,bytes)", +"63657855": "_removeFromDebtRegister(bytes4,uint256)", +"6365dfd9": "RaisrToken()", +"63665f2e": "addAirdrop(address,uint256)", +"63669424": "EthBird()", +"6366b936": "freeUpTo(uint256)", +"63670e42": "UpdateSellAgentSiteReg(address,address)", +"636760a2": "Cyncrohnis()", +"636822fa": "FearOfMissingOut()", +"63689b4a": "moveTokens(address)", +"6369313d": "isHouse()", +"636a36e3": "ThingsbookChain()", +"636ae15d": "BROYALCOIN()", +"636b2ac3": "createDefaultGen0LinglongCat(uint256,address,uint256,uint256)", +"636b7e56": "pendingFunding()", +"636bb5ae": "CalculateStageValue()", +"636bd9dc": "cooAddress3()", +"636c6524": "Superpack()", +"636ca6c2": "EAAS()", +"636ce4d7": "BTL_SPARTAN()", +"636d37b1": "precrowdsalepricing(address,uint256)", +"636d98b1": "referrerPercent()", +"636f12fe": "b2sother(bytes32,bytes32)", +"636f6159": "tokenExchange()", +"636fa3c6": "preIcoToken()", +"636ff44e": "BAGToken()", +"63704e93": "getDocCount()", +"6370920e": "grant(address,uint256)", +"6370ef19": "updateDomainPrice(bytes32,uint256)", +"63722de4": "AllowSomeoneToViewMyKeys(address,string)", +"63723373": "checkSignature(address,uint8,bytes32,bytes32,bytes32)", +"63727449": "getMfgDetails(string)", +"6372ba1a": "dateEndICO()", +"63732cf0": "RCN()", +"63735598": "getPriceOfCampaign(bytes32)", +"6373786a": "SaturnPresale(address,address,uint256)", +"637431ae": "testCreatePricelevelUsingNewContract()", +"63746113": "resetCrowdSaleAddress(address)", +"63746b03": "createContractRide(string,bytes7)", +"63749225": "getPVPEntranceFee(uint256)", +"63750dfb": "changeLedger(address)", +"63755c16": "withdrawStandardTokens(address)", +"637666ce": "removeFromBlackList(string,address)", +"6376c910": "StageThreeEnable()", +"63772f33": "growthTokensPercent()", +"6377aaa6": "setAdsContractAddress(address)", +"6377ebca": "close_time()", +"6377ff20": "totalInactive()", +"6378378a": "NxahCoin()", +"63784191": "frozenForTeam()", +"63791e3c": "setPriceSetter(address)", +"63798661": "payPlace(uint256)", +"6379a852": "multiOperatorSend(address,address[],uint256[],bytes,bytes)", +"6379ed9d": "distributeFUD(address[],uint256,uint256)", +"637af51c": "updateUpdater(address)", +"637b2541": "_allocateTokens(address,uint256)", +"637b55eb": "exchangeEtherToToken()", +"637b93ed": "getInsuranceBalance(address)", +"637bcd2a": "userIsWhitelisted(address)", +"637c39d8": "systemAddresses(address,address)", +"637cc5c6": "XBlockToken()", +"637d3e00": "ProjectOwner_EnableProject(int256)", +"637dda3f": "getBalanceByIndex(uint256,address)", +"637e12f7": "getBlocksDesc(uint256,uint256)", +"637e86eb": "totBOTs()", +"637ea3e5": "setlogaddr(address)", +"637ec389": "activated_time_()", +"637fcf95": "getBoardMember(address)", +"63808773": "acceptContribution(bytes32)", +"63809953": "secondsPerDay()", +"6381ca26": "refundTransactionByMediator(uint256)", +"63820550": "OwnerEvents(address,uint8)", +"63822fdc": "addConsentTemplate(string,uint256,string,string,string)", +"6382789d": "currentLowestCount()", +"63839777": "getReturns(address,address)", +"63844a57": "mul32(uint32,uint32)", +"638560cf": "registerBool(address,bool)", +"6385cbbe": "minimalGoal()", +"6385f2fb": "DAZ()", +"63860139": "nextPrizePool()", +"63862fd5": "isSenderOriginalOwner()", +"6386c1c7": "getUserInfo(address)", +"63875261": "paladinAddress()", +"6388fafa": "niceguy1()", +"63891019": "testFailStartTooEarly()", +"63892068": "create(string,string,bool)", +"6389654e": "changeDailyWithdrawalLimit(uint256)", +"63897c7e": "changeSettings(string,string,uint256,uint256,address,address,address,address,uint256)", +"6389e019": "graceTransfer(address,uint256)", +"638a9ce9": "setProxy(address,bytes32)", +"638b1b14": "developmentAddress()", +"638b4463": "completeClosed()", +"638b9119": "soldCards()", +"638bcce3": "multilevel(uint256)", +"638c5ddc": "BonusListUpdated(address,address)", +"638d4788": "draw(uint8,uint8)", +"638dd56a": "getNumberOfEligibleMembers()", +"638e1e5d": "payTip()", +"638e3724": "Locker(address,uint256,address[],uint256[])", +"638eea8d": "PLATFORM_MONTHLY()", +"638f6575": "timeStarted()", +"638f8da4": "castleMaxLevelGap()", +"638fade2": "getMerchantPublicKey()", +"63905232": "balanceAll(address[])", +"63907180": "getDebrisNum(bytes32)", +"6390f519": "getNumTeams(uint16,uint8)", +"6391c315": "FundsWithdrawnAndTokenStareted(address)", +"6391d3b2": "getCountSenderLands(address)", +"63921a74": "canReceiveListing(bytes32,uint256,bool,address,uint256,uint256)", +"63929d3e": "getPendingKNCRateRange()", +"6392a51f": "balancesOf(address)", +"63937651": "batchTransferDiff(address[],uint256[])", +"6393b4eb": "expect(address,uint256,bytes,bytes32)", +"6394536d": "cosign(uint256,uint256)", +"639475ca": "TRIANGLE()", +"63958b5f": "sellSpecialTokensForPublicSale(address,uint256)", +"63981b33": "changedeposito(address)", +"63981bbc": "TotalSpenders()", +"63991a36": "getGenomeChildren(uint32,uint32)", +"639937d7": "maxSpinners()", +"639a9a67": "saleOpened()", +"639ab80b": "YTTD()", +"639bbb37": "donated()", +"639bd0bf": "proposeBountyTransfer(address,uint256)", +"639bef41": "setRecommender(address,address)", +"639cba6e": "getDetailsBattles(uint256)", +"639cd59c": "totalFeesAvailable(bytes4)", +"639d3e69": "listSubName(bytes32,bytes32,uint256,uint256,uint256)", +"639d57f2": "testGetBitSuccess()", +"639d71eb": "mixAmt()", +"639e01dd": "Team()", +"639ec4d2": "checkTokDev()", +"63a0557b": "teamAvailable(address)", +"63a0607b": "buyRock(uint256)", +"63a10042": "approveComponents()", +"63a1512e": "setOPM(address)", +"63a167f2": "collectorWeiCap()", +"63a24174": "GxCoinTotals(address)", +"63a2c393": "safeMulPercentage(uint256,uint256)", +"63a2de29": "crearJuegos()", +"63a2fdbf": "claimZeronium(uint64,uint64,uint64,uint64,uint64,uint64)", +"63a37503": "test_rewardPoolShare_noClaimableStake()", +"63a3c452": "getUnsold()", +"63a3cc80": "currentTotalTokenOffering()", +"63a3d383": "edoToken_()", +"63a411c0": "addDriver(address)", +"63a4b67b": "setArray(bytes32,uint256[])", +"63a599a4": "emergencyStop()", +"63a5bc71": "eitherAdminOrAdvisorCanDoThis()", +"63a6568f": "getPropertyLastUpdaterBecomePublic(uint16)", +"63a66d59": "bountyDeposit()", +"63a6cc7d": "getBuyers(uint16,uint8)", +"63a846f8": "admin(address)", +"63a8b945": "removeCounter(address,uint32)", +"63a8dac2": "changeSettings(uint256,uint256,uint256,uint8,uint256,uint256,uint8,uint8)", +"63a97d3f": "decreaseAllowed(address,address,uint256)", +"63a999cc": "uddr()", +"63a9c3d7": "verify(address)", +"63aa109c": "summFounders3()", +"63aa289b": "ownerTreesIds(address,uint256)", +"63aa56b1": "amend(address[],address[])", +"63ab7a25": "clearWaitPairBets()", +"63aba603": "AlphaToken(string,string)", +"63abc381": "alreadyParticipated(address)", +"63abfbaa": "tokensToFunds(uint256)", +"63abfd86": "CCChainToken()", +"63ac0f99": "depositBonus(address,uint256)", +"63ad0bbe": "templateProposals(address,uint256)", +"63ad803f": "EditTile(uint256,uint256,string,string,string,uint256)", +"63ae10fe": "getClientProviderUID(address)", +"63ae2bae": "updateUserCertification(string,string,string,string,uint16)", +"63ae71ca": "affiliateProgramWalletAddress()", +"63ae8d6c": "setBuyPrice(uint256)", +"63aea3e0": "PlayerInfo(uint256)", +"63aec5ce": "getActiveUserLists()", +"63af8570": "tokensToGenerate(uint256)", +"63b03896": "gcd(int256,int256)", +"63b0545f": "transferfrom(address,address,uint256)", +"63b0a5c3": "IdentityRegistry()", +"63b0e66a": "helper()", +"63b1152a": "releaseVault()", +"63b1806f": "NewReferralTransfer(address,address,uint256)", +"63b20117": "totalTokensSold()", +"63b2c2a9": "unlockTeamBBT(uint256,string)", +"63b3c007": "canDefrost()", +"63b3f4e6": "WinnerPayedTicketBought(address,address)", +"63b452fb": "ICO_RATE4()", +"63b45bd9": "socoreCheck()", +"63b4f786": "about(address,uint256)", +"63b56431": "PRCT100_ETH_OP()", +"63b57e34": "remainCap()", +"63b6240d": "computeEndowment(uint256,uint256,uint256,uint256,uint256)", +"63b68040": "lastBlock_v14Hash_uint256()", +"63b6b31f": "transferBalance(address)", +"63b700ff": "getStoryExpiryTime(bytes12)", +"63b75b59": "setAssetValue(uint64)", +"63b7f00a": "calculatePercentsFor(address)", +"63b80379": "AcceptDiscipleOffer(uint256)", +"63b82524": "ethReceivedPresaleTwo()", +"63b851b9": "updateMinimumEpochInterval(uint256)", +"63b87bb8": "openSale(uint256,uint256,uint256,uint256)", +"63b8bd44": "getBalanceofEthAgent()", +"63b8f7f7": "W4T()", +"63ba26fa": "QwasderToken()", +"63ba2c76": "toUintThrow()", +"63ba5e44": "fundem()", +"63ba7319": "BUILDING_PRICE()", +"63bafb96": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256,uint256)", +"63bb51a9": "setHash(address,bytes32,address,bytes32,uint256,uint256)", +"63bbe1b5": "transferAuthorizations()", +"63bce4e7": "softCapUsd()", +"63bd1d4a": "payout()", +"63be8fc8": "createNew(address)", +"63beeab1": "executeConstant()", +"63bf15c2": "_buildTimberCamp(address,uint256,bytes)", +"63bf8194": "mineFor(address,address,uint8,bytes32,bytes32)", +"63bf81cf": "createDiscipleSale(uint256,uint256,uint256,uint256,uint256)", +"63bf8d6a": "removeToken(uint8)", +"63bfe3d8": "SkillBeatsLuck()", +"63bfe52a": "addAddressToCraneList(address[])", +"63c05650": "addAddress(address,uint256)", +"63c06fe9": "mintForwarder(uint256,bytes32,address[],int256)", +"63c194f1": "NTFoundationAddr_()", +"63c1b753": "getAddressIndex(uint256)", +"63c281a1": "hitFoundationBalance()", +"63c3600b": "__stringToUint(string)", +"63c36549": "QueueIsEmpty()", +"63c37984": "thirdExchangeRatePeriod()", +"63c3e2e3": "clearTransferValue(uint256)", +"63c43415": "view60()", +"63c439a6": "secondCrowdSaleDate()", +"63c454ca": "ifFreeze(address)", +"63c4f031": "stop(bytes32)", +"63c6082f": "buyWithCustomerIdWithChecksum(uint128,bytes1)", +"63c65056": "TradeEthShop(uint256)", +"63c69f08": "getUserOrders(address)", +"63c6fe04": "addCities(bytes32[],uint256[],uint256[])", +"63c78e87": "withdrawEtherFromTrade(uint256)", +"63c7d473": "GoldAmountMelted()", +"63c988f9": "isAlive(uint8[176],uint8)", +"63ca7aaf": "FeeUpdated(address,address,uint256,uint256)", +"63cb2afb": "reserve1Address()", +"63cb344e": "setNctEthExchangeRate(uint256)", +"63cbab8c": "SELLER_STEP_1_OPEN()", +"63cc23ae": "Lesson_4(address,uint256)", +"63cc4aa2": "transferRemainingTokens()", +"63ccedfe": "MensariiCoin()", +"63cd1c51": "_createLottery()", +"63cd1da7": "dspcoin()", +"63cd44c9": "GetType(bytes32)", +"63cd99cb": "moo()", +"63cdcc57": "motionConfirming(uint256)", +"63cea450": "closePresale()", +"63ceb60d": "sponsor(uint256,address)", +"63cf1442": "JACK_DIST()", +"63cf2ef3": "limitLessThan(uint256,uint256)", +"63cf6ffa": "sellFish(uint16,uint16,uint8,address,uint256)", +"63d06dd4": "createContractPow(string,uint256,uint256)", +"63d08ae5": "Timebankc(uint256,string,string)", +"63d1055c": "proposeGame(string,string,uint256,bytes)", +"63d177e6": "unpauseICO()", +"63d17806": "operatingFund()", +"63d1e70e": "PHXroll()", +"63d256ce": "revoked()", +"63d29135": "SetEventData(uint256,string,string)", +"63d292d7": "STQCrowdsale(address[],address,address,address)", +"63d2be9d": "ratingOf(uint16)", +"63d36c0b": "calculateFinalPrice(uint8,uint8,uint256,uint256,uint256,uint256)", +"63d494ea": "becomeVoter()", +"63d4d4a9": "bonusRateInPercent0()", +"63d5243a": "getDaysPassedSinceLastTeamFundsBallot()", +"63d5502f": "presaleCap()", +"63d578c5": "ApolloSeptemTokenSpecialPurchase(address,address,uint256)", +"63d60745": "transferCreditsInternally(string,uint256,uint8,string)", +"63d64159": "max(uint8,uint8)", +"63d6519a": "CPCEPrivate()", +"63d6727a": "setStartStage3(uint256)", +"63d74226": "add_bounty()", +"63d7edb9": "VRCOIN_DECIMALS()", +"63d8c5b7": "RefundVaultWithCommission(address,address)", +"63d91851": "PUBLIC_CROWDSALE_CAP()", +"63d93f88": "transferFromWithoutAllowanceTest(address)", +"63d9b4b1": "sendGift(address,uint256)", +"63d9b770": "exploit()", +"63d9df85": "presaleContract()", +"63da5531": "tokenPerUsdNumerator()", +"63da9cf8": "signAttribute(uint256,uint256)", +"63db30e8": "minInvestedAmount()", +"63db3e63": "IPST()", +"63dc5400": "queryCurrentContractFunds()", +"63dcf376": "offChainPurchase(address,uint256,uint256)", +"63dcfa9e": "athleteAlreadyClaimed()", +"63ddbb99": "WBToken()", +"63ddc54d": "mmLib()", +"63de5323": "applicants(uint256)", +"63de6ad6": "purchaseCard(uint64)", +"63de882b": "wlStopBlock()", +"63deb2c5": "changeMemberAddress(address)", +"63def590": "untrustClient(address)", +"63df9769": "setReached(bool)", +"63e0c2f8": "whitelistAccount(address)", +"63e0f8c3": "StanleyNickels()", +"63e0f8c7": "referalBonus()", +"63e12cdc": "addCCUser(bytes32)", +"63e16fff": "nextGen()", +"63e1d57c": "getMaxSize()", +"63e27a63": "unlockTeamTokens(address)", +"63e2c349": "transferTokenAndLock(address,uint256)", +"63e321fe": "setDefaultHashes(uint8,uint8)", +"63e33e96": "totalSupplyUnits()", +"63e38ff3": "id_for_nym(uint256)", +"63e3eab3": "batchDeleteCandidateCache(address[])", +"63e3fbbd": "StopQuiz()", +"63e49fcd": "startPtopDeposit(address,address,bytes32,uint256,uint256)", +"63e4bff4": "giveTo(address)", +"63e4e5cc": "bountyPercentage()", +"63e561b6": "checkOrder(uint32[])", +"63e60df5": "GolemNetworkToken(address,address,uint256,uint256)", +"63e79315": "TokenERC20(uint256,string,string,uint256)", +"63e8dd96": "getCurrentOwners()", +"63e94cee": "getStage0End()", +"63e95a3c": "isNegligable(uint256,uint256)", +"63ea0143": "setTotalDeposit(uint256,address,uint256,address)", +"63ea6e44": "NewKing(address,uint256)", +"63eaa14d": "relock(address,uint256,uint256,int256)", +"63eac2d4": "getMyFalcon()", +"63eb963a": "dat()", +"63ebb3cf": "isValidSubmitter(address,bytes32)", +"63ebd4ff": "getFunctionAuthorized(address,address,string,bytes32)", +"63ebf801": "ChelleToken()", +"63ec3eb5": "WHENToken(string,string,address,address,address)", +"63ec96b7": "LogVictory(uint256,uint8)", +"63ed6d5d": "LogWhitelistRemove(address)", +"63eda29d": "prevSeriesSelloutHours()", +"63ee7c8d": "totalEscrows()", +"63ee8b88": "ico2Sold()", +"63eeb79a": "setMinEsteemAmount(uint256)", +"63eed1d7": "Alice(address)", +"63ef8d9e": "resetLotto()", +"63f019f6": "canBurnSecurity(address,uint256)", +"63f07aa4": "preSaleTokens(uint256,uint256)", +"63f0ae2e": "ProfitDelivered(address,uint256)", +"63f0ca5a": "BOUNTY_TOKENS()", +"63f114f2": "checkWithdrawValueForAddress(address,uint256)", +"63f160e6": "sentReveal(uint256,address)", +"63f1a089": "_mint(uint256,uint256,uint256)", +"63f1a9dc": "LogInvestorMigrated(address,uint256,uint256,uint256)", +"63f1de17": "ICONSORT()", +"63f225a7": "addLOCtoLHT(address,address)", +"63f22c24": "checkDelegation(address)", +"63f2493f": "settleETHBatch(address[],int256[],uint256,uint256)", +"63f32f63": "Price(uint256)", +"63f3dbe5": "VESTING_CLIFF()", +"63f55fc0": "setHolderGroup(address,uint256)", +"63f5679e": "changeDragonsStatsContract(address)", +"63f6100d": "buySome(uint256,uint256,uint256,uint256)", +"63f6271f": "LEGLToken()", +"63f75343": "setF2mAddress(address,address)", +"63f80de3": "issueCoin(address,uint256,uint256)", +"63f8a211": "sellOneStep(uint256,uint256,address)", +"63f9cb0e": "HLWCOIN()", +"63fa32f1": "newWinner(uint256,uint256,address,uint256)", +"63fa5716": "changeSoulReward(uint256,uint256,uint256)", +"63fa9888": "PredatexDua()", +"63fb5a1a": "putBuyOrder(address,uint256,uint256,uint256)", +"63fbc7bc": "expectPayment(bytes8,bytes32)", +"63fc98e3": "judgeEnableForTransfer(address,uint256)", +"63fcabcb": "BilancioMinimoAccount(uint256)", +"63fcf5de": "addtoContributos2(address,address,uint256,uint256)", +"63fd420c": "payoutMining(uint256)", +"63fd7552": "owedAt(uint256)", +"63fd7eb0": "chickenOf(address)", +"63fd91dc": "signUpForTournament(uint256[])", +"63fd9e38": "minInvest()", +"63fdca37": "HitCash()", +"63feeaaf": "smartContractStartDate()", +"63ff195d": "stakeOnBehalf(address,uint256,bytes32,uint256,uint256,uint256)", +"63ff6125": "donateToFeePool(uint256)", +"64004ea5": "getUserTotalPromoBonus(address)", +"640075f3": "isPositionClosed(bytes32)", +"64009184": "threeHotHoursEnd()", +"64017ea7": "submitExit(uint64,address,uint256,address,uint256)", +"640191e2": "channelManagerAddresses()", +"64020842": "isDisavowed()", +"640241b8": "acceptOnwership()", +"64027fbb": "minbet()", +"6402aca9": "getAllCardAddressesPriceOfOwner(address)", +"6402efd3": "tier2Rate()", +"64030441": "addCardsHash(uint256,string)", +"6403a9ed": "getVoteCountForOption(uint8)", +"6404865e": "OneOhana()", +"6406605b": "MetadataUpdated(uint256,address,string)", +"640708d6": "PRIORITY_SALE_START()", +"64070b6f": "p_setNextRoundSeedPercent(uint256,uint256)", +"6407e432": "mintTokens(uint256,address,address)", +"640853bb": "amountSoldPerPeriod()", +"640959bc": "getQuoters()", +"6409a4e3": "giveTokens(address,uint256,string)", +"640a404a": "getgamecardpos(uint256)", +"640a4d0c": "_deposited(address,address,uint256)", +"640bdd70": "setDividendFee(uint256)", +"640c3dbd": "isChipPassword(uint256,string)", +"640d3017": "SetMinSum(uint256)", +"640d84b5": "SetApplicant(uint32[],uint64[],uint32[],uint64[],int256,uint64[])", +"640ec47a": "assertTrue(bool,bytes32)", +"640efb0d": "setTravelPrice(uint256)", +"640f244b": "findSuitableGen()", +"640fe1e9": "availableForWithdraw(address)", +"64100038": "deleteUserClaim(address)", +"64109848": "tokemon20()", +"64109ae0": "MAINT_PRICE()", +"6410c41a": "priviledgedAddressBurnUnsoldCoins()", +"6411273f": "tapFab()", +"6412aeb1": "setBountyTokens(uint256)", +"641446eb": "splitPayment(uint256)", +"641579a6": "setMultiplier(uint256)", +"641620a2": "createMulti(uint256,uint256)", +"6416ec30": "Geet()", +"64179c1b": "ActivatedContract(uint256)", +"6417c08b": "implementsERC721d()", +"6417dec3": "setHSShopSaleFee(uint256)", +"6418345e": "updateMinimumInvestment(uint256)", +"6418b903": "transferRewardPool()", +"6418f643": "ClaimBlessings()", +"641a5f66": "getSendCoin()", +"641a8cb3": "MANHATTANPROXYBRDWY()", +"641ad8a9": "poolState()", +"641b58c2": "checkBet(uint256[],uint256[],uint256[],uint256,uint256)", +"641bbdfe": "claim(uint256,uint8,bytes32,bytes32,uint8)", +"641ca23f": "availableICO()", +"641d55e0": "buyClixToken()", +"641d6075": "getDailyWinners()", +"641e3f15": "notifyTokenIssued(uint256,uint256,uint256)", +"641e6b9d": "TestingEnabled()", +"641e8cca": "updateGameProprietaryData(uint256,string)", +"641e90de": "price5()", +"641f3b46": "isTokenExchange()", +"641f83a1": "calcEnvHash(bytes32)", +"6420e71c": "rateForPhase1()", +"64217bdf": "requestInterest(uint256,uint256)", +"6421fc04": "LockedMANA(uint256)", +"642231a6": "legendsCrowdfund()", +"6422816b": "betBLenght()", +"64228857": "getRevisionCount(bytes32)", +"642289f2": "MarketEnabled(address,address,address)", +"6423690f": "SmartDice()", +"64239cce": "purchaseUpAndSpend(uint256,uint256,bytes32)", +"6423b5f0": "miniMeToken()", +"6423db34": "Reset()", +"6423dbad": "getGreeter()", +"64245502": "STRegistrar()", +"6424bd8c": "Remove()", +"6424d686": "getEngineerCurrentVirus(address)", +"64253d2f": "HashnodeTest()", +"64256611": "collectedFunds()", +"6425fbed": "getJobStatus(bytes16,address,address,uint256,uint256)", +"64265b1a": "share_transfered(string)", +"6428366a": "payToGorgona()", +"6428925d": "toSTAR(uint256)", +"6428a652": "setPornstarsContractAddress(address,address)", +"6428fed4": "pendingJackpotForWinner()", +"6429161b": "createSaiLimitedEdition(uint256,address)", +"642ab4b1": "lastBidTime()", +"642b1759": "getMerkleLeave(uint256)", +"642b4a4d": "mainNetLaunchIncentiveReserveWallet()", +"642bdd15": "calculateNewPrice()", +"642c53e2": "GetData(bytes32,string,bytes32)", +"642c7aa2": "snatchHero(uint256)", +"642d345c": "byMaximum(bytes32,uint256)", +"642d63a3": "buyLottery(uint8)", +"642dfe55": "Bitmos(uint256,string,uint8,string)", +"642e8271": "NigeriavsArgentina()", +"642f1ddc": "nome_candidato_da_indice(uint256)", +"642f2eaf": "transactions(bytes32)", +"642f722c": "createRecord()", +"642f825a": "randomPetAuraBoost(uint64,uint8)", +"642fd0f6": "getPixelColour(uint256)", +"64308a6a": "_getPartSkillColor(bytes,uint256,uint256)", +"643124cf": "INZEI()", +"64319ae6": "updateUserEmail(address,string)", +"64322c9c": "drawingIdToCollectibles(uint256)", +"64325ddb": "currentClaimPrice()", +"6432679f": "getUserCapInWei(address)", +"64326c71": "getTotalGas()", +"64329400": "setHardParticipationCap(uint256)", +"6432dc4e": "sell_ppc()", +"6432e3cd": "CaDataContract()", +"6432e9e0": "calculatePayrollRunway()", +"6433ef42": "adjustWithdrawRate(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"64341c0c": "getIPFSCode(bytes32)", +"643537aa": "getBFEX(address)", +"64362587": "SetRevealBlock(bytes32,uint32)", +"6436434e": "getAddressDnaIds(address)", +"6436b1b9": "getSpawningForCount(address)", +"64370755": "removeDistributionSources(address[])", +"64371977": "set(uint256,string)", +"64377452": "getUserHash(address)", +"64379150": "setNumberClaimToken(uint256)", +"6437ab0b": "checkCommitPeriod(bytes32)", +"64385828": "setDataColla_AB_01(string,string)", +"6438c43e": "getCurrentSchellingRound()", +"6438f449": "noviceDungeonId()", +"64392a80": "balanceOfOwnerInVault(address,address)", +"6439437e": "cloneIt()", +"643a7695": "verifyParticipant(address)", +"643ac0bd": "_unregisterAttack(bytes32)", +"643aff0f": "investorWallet()", +"643b18b6": "teamWallet_1()", +"643c6d1f": "PureChainToken()", +"643ce525": "teamLimit()", +"643d1be5": "setMainSaleStart(uint256)", +"643d6dc0": "getInfos()", +"643d71a2": "KODB(address)", +"643e1aa5": "SetStartTimeTLP2(uint256)", +"643e7365": "initialSaleContract()", +"643e77d8": "calculateProfit(uint8,uint256,uint256)", +"643f7cdd": "DAOpaidOut(address)", +"643f9b72": "SherolexToken()", +"643fcd27": "addieren(uint256,uint256)", +"64422ede": "createPoolsIfNeeded()", +"64422f3c": "multiDeltaBalances(address[],address,address[])", +"64425055": "returnedDataDecoded()", +"644280e2": "tokensForBounty()", +"6442af8d": "_totalRemaining()", +"644443ed": "addContractRole(bytes32,string)", +"64445d9e": "adminEditBallotOption(uint32,uint32,string)", +"6444a288": "setMinTokenForSP(uint256)", +"6446169b": "sellStar(uint256,uint256)", +"64461a55": "Synergy(address)", +"6446a339": "addAddressToPublicBuyerList(address)", +"6446afde": "getMappingElement(uint256)", +"6446ebd8": "deleteResources(address,address[],bytes4[])", +"644843f3": "LogNote(bytes4,address,bytes32,bytes32,uint256,bytes)", +"6448adc6": "tierLevel()", +"6448b46f": "pushCap(uint256)", +"6448b6cb": "closeVaultAccess()", +"644998ae": "maintain(int256,uint256,uint256)", +"644a3d42": "ANKR()", +"644a803d": "BlockTogether(address,uint256,uint256,uint256)", +"644a9db8": "sign(uint256,address,uint256)", +"644b1d1a": "CompetitionCompliance(address)", +"644b7a43": "getTokenByIndex(uint256)", +"644b7dc6": "_isOperatorFor(address,address)", +"644cf307": "preSaleBonus2Percent()", +"644d8164": "getDesc()", +"644d8cce": "burnMas(address[],uint256[],uint256)", +"644e4e4e": "LogVotes(uint8,uint256)", +"644e8b24": "getPrices(uint256,uint256,uint256[],uint256)", +"644fab74": "setTimeLock(address,uint256)", +"64506302": "okamiCurrentPurchase_()", +"6451447d": "buyoutFeePercentage()", +"6451ab58": "activeuser()", +"6452a10f": "emergencybeneficiary()", +"6452f344": "sayGoodbye()", +"6453558e": "founderTokenWithdrawnPhase3()", +"6455058e": "getStakedAudits(address)", +"6455780c": "getImportingParty()", +"6455cb97": "EPTest()", +"64561370": "oraclize_query(uint256,string,bytes[5],uint256)", +"6456d071": "addPatientReply(address,string,string,address)", +"64571245": "withdrawATN(address)", +"6457237b": "indexOf(uint256[],uint256)", +"64584b14": "executeOrders(address[],bool[],uint256[],uint256[],address[],address[],address[8][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[],uint256)", +"64584d16": "CardFootballers()", +"6458de1e": "ensOwnerPx()", +"6459361d": "setDetail(string)", +"6459a8dc": "PerseiToken()", +"645a8570": "teamAndAdvisorsAllocation()", +"645ac00b": "transferSignership(address)", +"645b8b1b": "status(address)", +"645bcd3a": "checkBasketExists(address)", +"645bd436": "clearDelegateAndUnlockTokens()", +"645c4625": "get_orderAddress(address,address,uint256,uint256,uint256)", +"645c6fae": "registerContract(bytes32,address)", +"645c9931": "SHPToken()", +"645c9ac8": "returnMixType()", +"645cd046": "bundleToken(uint256)", +"645d95d4": "LogBidAccepted(uint256,address,uint256,bytes32,uint256,bytes32)", +"645dbfd4": "updateRandom()", +"645dce72": "updateRelease(uint32,uint32,uint32,bytes20,bool)", +"645dfad7": "sellATR(uint256)", +"645e175c": "publicGetNote(uint64,bytes2)", +"645e6ddc": "bookingBalanceOf(address)", +"645f0d11": "toggleFactoryPower()", +"645f754a": "OZTToken()", +"6460c353": "PoWMiB()", +"64610c73": "ADA(uint256,string,string)", +"646156aa": "cancelTournament()", +"6461ed00": "TOTAL_TOKENS_SUPPLY()", +"6461fe39": "transferFromWithReference(address,address,uint256,string)", +"64631be6": "signatureOf(uint256,uint256)", +"6463d6bc": "getMaxBidder(uint256)", +"646439a3": "tradeStream()", +"64648589": "fundICO()", +"6464b107": "TRIUM(uint256,string,string)", +"6465d25a": "Aliencoin()", +"64663ea6": "withdrawAndSend(address,uint256)", +"646668b6": "getMaxBet()", +"64669d1b": "BadBitchCoin()", +"6466cfa1": "changeSellFee(uint256)", +"64679356": "Controller()", +"64679806": "last_number()", +"6468328e": "executeTransfer(address,uint256,bytes)", +"6468c099": "addAnimalType(uint128)", +"6469c348": "maintain()", +"6469c89b": "getNiceBets(uint256)", +"6469e87f": "isKickoffEnabled()", +"646cd69b": "postponeDueDate(uint256,uint256)", +"646cf24d": "assignTokenContract(address)", +"646d4f53": "PlayX100()", +"646d525a": "NetCents()", +"646d978b": "getKudosById(uint256)", +"646e90e7": "getAddBal()", +"646eba48": "releaseTokens(bool)", +"646f22c5": "getTicketsLeft()", +"646f2942": "CryptoJade()", +"646f7834": "lockCountingFromTime()", +"646fe5ee": "OwnershipTransferConfirmed(address,address)", +"646fec02": "ProposalAdded(uint256,address,uint256,string)", +"6470db2f": "removeAllowed(address)", +"647151b5": "sellUnicorn(uint256,uint256)", +"647308ee": "verifyWithdrawSignatures(bytes32,address,address,uint256,bytes,bytes)", +"64738c23": "makeOrder(address,address,address,uint256,uint256)", +"6473b34a": "batchAllocate(address[],uint256[])", +"64744d22": "getPoolDepositQspWei(uint256)", +"6474dd4c": "LuckyWorldCupToken()", +"6475e3d3": "MIN_BET_AMOUNT()", +"6475e47d": "DGT_contract()", +"647734b2": "setValidationAddress(address)", +"64779ad7": "pausedOwnerAdmin()", +"647846a5": "feeToken()", +"64794403": "setAddressOfERC20Tocken(address,address)", +"647aac0c": "race(uint32)", +"647b5ced": "pubsaleCap()", +"647b6065": "tokenIdToOwnerArrayIndex(uint256)", +"647d02d2": "closeFail()", +"647d5f14": "dividendinfo()", +"647dd08c": "callSender(address,address,address,uint256,bytes,bytes)", +"647e61f1": "setLargeInvestorApproval(address,uint256)", +"647f7058": "Commitment()", +"64801da1": "reliefRatio()", +"64802918": "div(uint16,uint16)", +"6480d014": "preicostarted()", +"64812751": "finaliseState()", +"6481f081": "sellVouchers(uint256)", +"64821338": "hasVoted()", +"648236e3": "acceptBidForSketch(uint256,uint256)", +"64826b7a": "publicSaleCap()", +"6482c535": "rateOfParking(address)", +"64832c4c": "heatUp(address,uint256)", +"648345c8": "setMessage(uint256,string)", +"648351b9": "MarbellaCoin(uint256,string,uint8,string)", +"64836227": "notifyWatcher()", +"64838603": "skinColor(string)", +"6483a330": "getPeriodInDispute(uint256)", +"6483ec25": "append(bytes32)", +"64847739": "isProposePhase()", +"6484ae80": "_addCharacters(address,uint8)", +"648583b4": "updateCandidate(address,bytes32,string)", +"6485cc52": "GBP_Omnidollar()", +"6485d678": "setActive(bytes32,bool)", +"6485e2e5": "_removeController(address)", +"64861329": "DiamondProjectToken()", +"648619dc": "serviceUnpause()", +"648621ec": "xnotify(string)", +"64864ca6": "Expand(address)", +"64868f97": "roundTokenLeft(uint256)", +"6486aa51": "isConfirmed(bytes32)", +"64887334": "setCompactData(bytes14[],bytes14[],uint256,uint256[])", +"6488c20e": "TransferableChanged(bool)", +"64893fcb": "totalVestedAmount()", +"648a0c91": "updateExchange(address)", +"648a5903": "isShortPositionExpired()", +"648aa3b1": "getComponentByName(string)", +"648ad97f": "setMain(uint256,uint256,uint256,uint256,uint256)", +"648b3514": "CheckpointToken(string,string,uint256)", +"648b45f6": "unequipMultipleUnits(uint256[])", +"648b7ce8": "Increment()", +"648bf774": "recover(address,address)", +"648c51eb": "isMyPlanet(uint256)", +"648c925e": "backToAll(uint32)", +"648d6367": "DocumentaryContract()", +"648d7219": "setOCG(address)", +"648d9e26": "startPublicIco(address)", +"648e3006": "getPurchasedTokens()", +"648e49e6": "dSET_XBL_ADDRESS(address)", +"648e625a": "confirmTransaction(uint256,address,uint256)", +"648f0bde": "Play(string)", +"648f4f0f": "tokenStoreAddress()", +"648fb06f": "mintMultiple(address[],uint256)", +"648fd473": "EBRK()", +"6490c7a8": "getArea(uint256)", +"64913477": "setMultisigWallet(address)", +"64916fcf": "WhitelistedCounterUpdated(uint256,uint256)", +"6491f0b7": "setLLV_edit_6(string)", +"64921844": "getTimePassed()", +"64928d24": "wasSaleEnded()", +"649371e0": "oracleCurrentInt()", +"649375da": "addEarned(uint256)", +"6493d7fc": "CircuitBreaker(address,address,uint256,uint256)", +"6493e64c": "upgradeTo(string)", +"6494b55b": "ceoAddCoo(address)", +"6494cde1": "endTransfer()", +"6494d477": "saltHash()", +"649564b3": "getOtherContractParticipant(address,uint256,address)", +"649677e1": "entranceFee()", +"64968f58": "set_presale_iconiq_arbits_per_ether(uint256)", +"6497129c": "getRoundNumber(uint256)", +"64976b4d": "setNplay(address)", +"64978c7f": "jembex()", +"6497b400": "_getFashionParam(uint256)", +"6497bd3a": "newPriceTicker(string)", +"6497d32e": "setCCH_edit_18(string)", +"6498156e": "preICOBuy()", +"64994978": "setFounder()", +"64996a43": "_computeCycleSkip()", +"6499e2d9": "ERC777DemoToken(string,string,uint256)", +"649ae9c6": "lockDate()", +"649c07d5": "is_contract(address)", +"649c0b21": "addressOfMSF()", +"649d56db": "getContractProps()", +"649e3c46": "createDoc(string,string,string,string)", +"649eea7f": "_transferCar(address,uint256,bool)", +"649efd6e": "mintForEverybody()", +"649f0153": "fiatBalance()", +"64a04d07": "ReconOwned()", +"64a08260": "adminRemoveRole(uint256,address,uint256)", +"64a20e2d": "getImpactDonor(string,uint256)", +"64a237f4": "VEGANToken()", +"64a31b80": "getRequiredReportsPerReporterForlimitedReporterMarkets()", +"64a41399": "contributeInCreditsToken()", +"64a48499": "getIntegerValue()", +"64a4a5d7": "testBitsEqualSuccess()", +"64a5a632": "getCompanyByName(bytes32)", +"64a640ef": "Bosscoin()", +"64a666f2": "getAuthorizedInsertAgents()", +"64a68943": "dividentSent(uint256,address,uint256)", +"64a7cc4b": "purchase(uint128)", +"64a7d7c7": "bidAuction(uint256)", +"64a80c0c": "openStream(address,uint256)", +"64a83d8b": "_removeTokenFromTranche(address,bytes32,uint256)", +"64a8a11f": "voteJUR(address,address,uint256)", +"64aabe92": "tryExec(address,bytes,uint256)", +"64ab23c9": "finalizeChangeStakingFees()", +"64ab374b": "getUnreadMessagesArrayContent(uint256)", +"64ab4702": "voteWeightUnit(uint256)", +"64aba263": "setInternalInfo(address,uint256,uint256,uint256,uint256)", +"64ac12b1": "multisig(address[],uint256)", +"64ac2c4a": "WavesPresale()", +"64acdb77": "disablePurchasing()", +"64acef7d": "newBP(bool,address,uint256,uint256,string,string)", +"64ad6027": "updateOrderNumber3(uint256)", +"64adc403": "getUserRewardPayouts(address,address)", +"64ae4451": "stateIs(uint8)", +"64aea551": "randnum()", +"64afab72": "remove(address,bytes32)", +"64afcf2e": "minSecondsBetweenPublishing()", +"64b09402": "setMetadataProvider(address)", +"64b13270": "registerDeed(string,string)", +"64b2eb2c": "publicOfferingExchangeRate()", +"64b3302d": "safeMult(uint256,uint256)", +"64b3b844": "getSaleInfo(uint256)", +"64b494d9": "setValInt(uint256)", +"64b4e6eb": "payRef(address,uint256)", +"64b55e8b": "SULTANT()", +"64b7571f": "distributeDividends(address,uint256)", +"64b7f1d3": "Rules()", +"64b837ab": "stopBlockjack()", +"64b9ca08": "noAdvert()", +"64bc6a74": "AllPartnersSet(uint256)", +"64bc82c3": "delegateAddresses(uint256)", +"64bd3066": "dispute(address,bool)", +"64bd7013": "wait()", +"64bd87d6": "scheduleCall(address,bytes,bytes,uint256,uint256)", +"64be8453": "NewUserAdded(address,address)", +"64beb745": "lockOwnership(uint256)", +"64bebead": "_FreeDom()", +"64bfc9a5": "stopBountyMint()", +"64c176eb": "setSmartToken(address)", +"64c2555d": "buyDay(uint16,uint256,string)", +"64c27f2a": "isOwnerOrOps(address,address)", +"64c2b768": "powered_up()", +"64c33c33": "setPrice(uint16,uint16,uint8,address,uint256)", +"64c34364": "hodl(uint256,uint256,uint256)", +"64c37043": "buyRareItem(address,uint256,uint256)", +"64c403d4": "getETHx2(uint256)", +"64c40bbc": "DCoin()", +"64c422d0": "participantToUBObought(address)", +"64c487ef": "isStoppingIcoOnHardCap()", +"64c638d5": "withdrawTokenToClientAccount(bytes32,bytes32,address,uint256)", +"64c66395": "getUIntValue(uint256)", +"64c76117": "endDistribution()", +"64c79bf3": "AddresstoString(address)", +"64c7b3bf": "Journal(uint256)", +"64c7b78c": "addOrg(string,string,string,string,string,string)", +"64c877f1": "depositLiquidateThePool(uint256)", +"64c88d62": "calcDemurrage(uint256)", +"64c8cd8c": "unlockMinedBalances(uint256)", +"64c8e825": "PooCoin()", +"64c96322": "setAllocationOpen(uint256)", +"64c96572": "TokenLMTC(uint256,string,uint8,string)", +"64ca55d0": "checkUserDivsAvailable(address)", +"64ca6478": "createImage(uint256[],uint256,uint256,bytes32[],string,string,string)", +"64cab0e3": "setCurrentPrizePool(bytes4)", +"64caf214": "setPlayerDetectGroup(address,address,uint8,uint32)", +"64cb5338": "FundedAmount(uint256)", +"64cbbd34": "WalletChanged(address,address)", +"64cbbdc7": "addDividendsForAddress(address,address)", +"64cbfdd6": "p_update_planetCryptoUtilsAddress(address)", +"64cc7327": "retrieve(string)", +"64cc7719": "getUserDataOnEther(uint256)", +"64ccd7a0": "getAutomatedReporterDisputeBondToken()", +"64cd1f69": "requestInvestment(uint256,uint256,bool)", +"64cd4a1a": "round4TokensRemaning()", +"64ce1068": "lockExpiration()", +"64ceed99": "foundersTimelock()", +"64cefc90": "fliqToken()", +"64cf6d71": "toBytes1(bytes,bytes,uint256)", +"64cf9167": "Numisma()", +"64d03095": "getSpecificTransaction(address,uint256,uint256)", +"64d03144": "Plaak(uint256)", +"64d05519": "createLastWill(address,string,string,string)", +"64d0bbc4": "increaseGenerationCount(uint256,uint8)", +"64d0d64c": "testControlCreateWithParentNotInUse()", +"64d0e83b": "jackpotWinCount()", +"64d12ec6": "getRevisionIpfsHash(bytes20,uint256)", +"64d17c08": "setServiceTokenAddress(address)", +"64d188eb": "fixAssetsAboveLimits(bytes32,bool)", +"64d34045": "setCCH_edit_20(string)", +"64d3e7c9": "ReserveToken(string,string)", +"64d40354": "limitAmount(uint256,uint256)", +"64d414bf": "getTokens(uint256,uint256,uint256)", +"64d4702f": "getNextKeyPrice(uint256)", +"64d4c819": "TYPE_HASH()", +"64d538d3": "StartIco()", +"64d563f1": "doubleClaimSegmentSlash(uint256,uint256,uint256,uint256)", +"64d57a03": "GainTempStuff(address,uint32,uint256)", +"64d582c0": "incentiveDistributionInterval()", +"64d5922f": "pingBlock()", +"64d5d024": "isValidBox(uint8,uint8,uint16)", +"64d6a95f": "changeGameParameters(uint256,uint256)", +"64d75891": "XXXXXXXX03(uint256)", +"64d79f20": "internalRegisterCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", +"64d85348": "deleteOffer(address,address)", +"64d905c0": "awaitingParticipants()", +"64d98bd3": "ownerTransferJackpotToken(address,uint256)", +"64d98f6e": "isSolved()", +"64d9a9e9": "AirDropToken(string,string,uint8,bytes32,uint256)", +"64da8ad3": "settleSeller(address,uint256)", +"64dab033": "landmarkPriceStepDenominator()", +"64dab283": "getWHGDonationAddress()", +"64dad32f": "isTokenUser(address)", +"64db3a8a": "buyAura()", +"64db5aa8": "ARDBatchTransfer()", +"64dc68b8": "ILove0xBTC(string)", +"64dc807a": "burnUndistributedTokens(uint256)", +"64dd891a": "attack(uint256)", +"64ddc605": "lockupAccounts(address[],uint256[])", +"64dde40f": "isTournament()", +"64ddedc6": "Triangle(uint256)", +"64ddfa29": "getAdminAddresses()", +"64de4c1d": "setTatAddress(address,address)", +"64df049e": "protocolFeeRecipient()", +"64df19da": "removeCustomTimeLock(string)", +"64dfe85e": "Dsteem()", +"64e08644": "stakeRemainingToVote_Eth()", +"64e0bbc5": "checkMyTransactions()", +"64e19bdd": "ownerAirdrop(address,uint256)", +"64e1f38b": "howManyKeysCanBuy(uint256)", +"64e21c9e": "DirectFundingProcessed()", +"64e24f4b": "UpdateClientTokenAccount(address)", +"64e28148": "clear(address,uint256,uint256)", +"64e28636": "getLateFee(address)", +"64e2ec50": "collectOtherTokens(address)", +"64e2fdfa": "ToukenToken()", +"64e31d74": "RaffleLedger(string,uint256)", +"64e36d04": "hardCapInEther()", +"64e39b87": "setFundsWallet(address)", +"64e40eb9": "withdrawTokens(address,address,address,address)", +"64e4596e": "_getPVPContendersCut(uint256)", +"64e48fcd": "testResetBet()", +"64e48fde": "findPossibleDelegatorsOfRaw(bytes32)", +"64e4a8fb": "xaurCoined()", +"64e50fb9": "setIco()", +"64e593c0": "setStartTimeIco(uint256)", +"64e5c8be": "getRoundPrizeShare()", +"64e62afc": "setSegmentOwner(string,uint32,uint32,string,string)", +"64e749ff": "getPosition(bytes12)", +"64e779b1": "unmint(uint256)", +"64e7e4a4": "transferNotification(address,uint256,uint256)", +"64e8687f": "withdrawTalao(uint256)", +"64e8d682": "pre_startdate()", +"64eaa454": "crowdsaleAmountLeft()", +"64eaff54": "getSquirrelmasterReq()", +"64eb7327": "_getContent(bytes32)", +"64ebd70d": "the365address()", +"64ec8bdb": "creatorWithdraw()", +"64ed31fe": "authVotes(address)", +"64eda74b": "setIsFrozen(bool)", +"64eded20": "_getTokenAmountWithBonus(uint256)", +"64edfbf0": "purchase()", +"64ee49fe": "scheduleCall(address,uint256,bytes4,uint256,uint256,uint8)", +"64ef212e": "proxyTransferWithReference(address,uint256,bytes32,string)", +"64ef563c": "reveal_registration(uint256,address,address)", +"64f018d8": "issue(address,uint256,string,string)", +"64f05fd7": "calculateWithdrawableAmount()", +"64f06b39": "setPC(uint256)", +"64f101f0": "closeMint()", +"64f15430": "fundVesting(address,uint256)", +"64f1873b": "ICOstarttime()", +"64f39b47": "return_funds()", +"64f40a3c": "RESERVED_TOKENS_FUTURE_OPERATIONS()", +"64f42a99": "addUser(address,bytes32)", +"64f4b094": "getLowestBid(uint8)", +"64f54a17": "getLatestItemRaffleInfo()", +"64f65cc0": "setFinished()", +"64f67f33": "DIPToken()", +"64f6f7b9": "setup(address,uint256,uint256)", +"64f8ad1f": "get_default_approval_duration()", +"64f951e9": "sessionBlockSize()", +"64fa3070": "getEscrowFee(address)", +"64faf22c": "left18(uint256)", +"64fb7d68": "coinMinter(uint256,uint256)", +"64fc2d9d": "_tryCreateEtherMonster(uint256,uint256)", +"64fe5cde": "MAX_UINT48()", +"64ffb47b": "getTotalMicroKeys()", +"65011760": "DOCToken()", +"650271d2": "makeMove(uint8)", +"65030adb": "RESERVED_TOKENS_ICO()", +"65030e75": "setSecretContract(address,uint256)", +"6503178a": "setMinVeriAmount(uint32)", +"65033845": "XiaoshiToken()", +"65036ca9": "zethrBuyIn()", +"6503a701": "InitiatePayout(address,string,string)", +"6503e5ff": "mFUNDING_BONUS()", +"65045a2b": "bottomName()", +"650462ab": "tokensMasterNodes()", +"650500c1": "whatIsTheMeaningOfLife()", +"65050e27": "checkCandy(address)", +"65054e55": "claimSellerFunds(address,address,address,uint256)", +"65058f4c": "requestPayout()", +"65061957": "EMPTY_RESOURCE_SET_ID()", +"65066810": "WHITELIST_SALE_LIMIT()", +"650669d2": "getCompte_1()", +"6506b0d6": "setData(string,string,string,string,string,string)", +"6506b623": "rotateBitsLeft(bytes,uint256)", +"65084b76": "OpenRegistryRules(address)", +"6508978b": "updateLatestSaleState()", +"65089dd8": "freezeStatsSumHours(uint256)", +"65093661": "newCommunity(address)", +"650944a6": "beneficiaryStash(address)", +"650955d4": "HashToken()", +"65098bb3": "calculateCrossConnectorReturn(uint256,uint32,uint256,uint32,uint256)", +"6509c195": "setPartnerPool(uint256,uint256)", +"6509e776": "CC()", +"650b147d": "paidToPartners()", +"650c2b28": "tokensPerDollar()", +"650c4226": "changeFees(uint256,uint256,uint256,uint256)", +"650ce14c": "registerPublisher(address,bytes32[5])", +"650d0aa3": "ChangeFee(uint16)", +"650d22e8": "countryTimeLock()", +"650d5d6b": "get_status(uint256)", +"650d993b": "getCustomer()", +"650dd4fb": "_createCountry(string,uint256)", +"650e1505": "createLock(address,uint256,uint256)", +"650e85af": "setUserRoles(address,uint256)", +"650ee1ee": "NewSale(uint256,address,uint256)", +"650f1dd3": "isSupplier(bytes16)", +"651006c0": "getCreateMarketDenominationTokenValue()", +"6510076f": "giveTokensOne(address,uint256)", +"65103f6e": "hasFees()", +"651044a2": "BitcoinpalletToken()", +"6510cc17": "INITIAL_mulFactor()", +"6510ef4d": "oraclize_query(uint256,string,string[5])", +"65113528": "getBoosterType(uint256)", +"65114459": "getOpenPackageId()", +"6511a98b": "testRegisterProduct()", +"6511eadb": "marketingProfitAddress()", +"65121205": "calculateDevCut(uint256)", +"65121f68": "add1Y(address,uint256)", +"6512c9b5": "OwnersProductCommissionChanged(uint256)", +"65131f63": "getMembersOfTier(uint256)", +"65132ad3": "Police_3()", +"651398e6": "allocateTokenForAdvisor(address,uint256)", +"6513fafe": "resistWhiteList(address)", +"65141c20": "setRemixCount(uint256,uint256)", +"65147784": "Pasband()", +"65149a76": "calculateWinnings(bytes32,address)", +"6514aaca": "minimumCommission()", +"65153632": "assertEq11(bytes11,bytes11,bytes32)", +"65158b3b": "contributor(uint256)", +"6515c1fa": "defineMecenas(address)", +"6515c6a9": "paused2()", +"6515d28c": "getLockingTypeCount()", +"6516395a": "lockCustomer(address)", +"651680af": "stage5Deadline()", +"65170435": "FASDF(uint256)", +"651738a3": "setMinScaled(int8)", +"6517ef33": "getNumberOfOrders(uint256)", +"65181ad3": "GET_METADATA()", +"6518361e": "SCT(uint256,string,uint8,string)", +"651883c1": "batchSpawnAssetWithCreator(address[],uint256[],uint256[],uint256[],address[])", +"6518ad22": "placeETHBid(uint8)", +"65195bc7": "DPNPlusToken()", +"6519fac2": "userExisted(address)", +"651bb617": "tokenlength()", +"651bc2fb": "reserveNIMFAAddress()", +"651bfd2d": "itemPrice(address,uint256,uint256)", +"651c2ff9": "preTge()", +"651c45d2": "addTicket(address,uint256)", +"651c5c84": "TokenWalletHolder()", +"651c5d2d": "getGiver()", +"651c9e99": "GOGRN()", +"651cd08d": "validateStart(address,address)", +"651dd0de": "values(bytes12)", +"651ed944": "startPreICOStage()", +"651f066a": "playerBalance()", +"6520715a": "approveClaim(bytes32,string)", +"6520768d": "modName(string)", +"652084c0": "storeKey()", +"6520ca0d": "levelUpMining(uint256)", +"6520fde5": "auctionPaused()", +"652106d8": "tokenTribe(uint256)", +"65213840": "prizeMoney()", +"652139e2": "setAngelFinishDate(uint256)", +"65216a41": "airDrop(address[],uint256[])", +"6521c03c": "createContribution(address,uint256)", +"65225665": "getPlayerAddress(uint256)", +"65227c7d": "RenCap()", +"65228934": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6522bff1": "update(uint256,string,string,string)", +"65243f87": "findNextWeekday(uint256,bytes2)", +"6524f107": "BlobStore()", +"6525a233": "ORACLIZE_COMMISSION()", +"6525c29d": "rejectAdvertiserCharges()", +"6526db7a": "remove(uint256,uint256)", +"6526ecee": "KingOfTheEthill()", +"652740a7": "TransparencyRelayer(address)", +"6528ef46": "BBY(uint256,string,string)", +"6528f4cb": "getDivRate(uint256)", +"652918bc": "updateProfit(uint256)", +"6529abba": "setSellComission(uint256)", +"6529d1c9": "pricesOfDate(uint256,uint256,uint256[],uint256)", +"652b51eb": "RefundEnabled(uint256)", +"652b810c": "setInternalStakingAddress(address)", +"652c00c9": "maintainPlayer(address,uint256)", +"652ca8f4": "cofoundersSupplyDistributed()", +"652d38fc": "getTotalIn(address)", +"652da5ff": "b(bool)", +"652dad7b": "batchDecreaseApproval(address[],uint256[])", +"652db9ab": "_distribute(address,uint256)", +"652de5ad": "countPerfManagers()", +"652ebb4c": "tokenPriceInETH()", +"652edd41": "purchaseDatesEdition(uint256)", +"652f1f16": "addSignature(string)", +"652f6494": "treasuryOfficials(uint256)", +"652f78cc": "allocateCommunityToken(address[],uint256[])", +"6530b7f9": "_createDrink(string,address,uint256)", +"6530e008": "STAGE2_TIME_END()", +"6531041b": "updateMIN_CONTRIBUTION(uint256)", +"6531a708": "getHolderEditions(address)", +"6531dbff": "totalFundedEther()", +"65325871": "transferableTokensOf(address)", +"6532b646": "SFI()", +"65343fcb": "TrustEth()", +"6534b4e2": "IsPayoutReady__InfoFunction(bytes32)", +"6534ccd2": "addHouse(address)", +"6534eb76": "recycling(uint256)", +"653704b1": "_changeName(string,uint256)", +"65372147": "result()", +"65375f38": "updateCustomerKYC(address,address,address)", +"6537e401": "setIII_S(uint256)", +"653853c0": "AMLToken()", +"6539335a": "toTipoEnte(uint8)", +"65395242": "MathisTestToken()", +"65397d5e": "refundOIDIndex_()", +"653a8f14": "getNumTilesFromBoard(uint16)", +"653abf37": "setDecision(bytes32,address,address)", +"653ac422": "invest(address,address,uint256)", +"653c3174": "investorsNumber()", +"653c95b8": "getContribution(address,uint256)", +"653c968a": "Bethopia(address,address)", +"653c9eea": "isBS(address)", +"653cfd2f": "testTemp4()", +"653d1ca4": "getPI_edit_21()", +"653e0f7f": "participants(bytes32)", +"653e2e0d": "setLastPositions()", +"653f23f8": "registerJuryMember(string,address)", +"653f7219": "AddVerifiedInfo(bytes32)", +"653fbca1": "payableEtherReceived()", +"653fcf4c": "pewdiepie()", +"65401882": "setDB(address)", +"6540742f": "MIN_BET()", +"6540dc07": "_destroyImpl()", +"6540fcc2": "PRICE_PRESALE_WEEK1()", +"654142c7": "getBoolField2()", +"65419516": "bettingStart()", +"654259dd": "availableAmount(address)", +"654286d1": "changeFrozenBalanceAll(uint8)", +"6542fed7": "evaluateShareholders(address,address)", +"65433e7f": "AntFundRobotToken()", +"654470fc": "getTotalSellingItem()", +"65449436": "CryptoConseilSuisse()", +"65450a90": "ACEBlock()", +"6545bed3": "Dice(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65472731": "lastBlock_a5()", +"6547c080": "Renmin(uint256,string,uint8,string)", +"65483f69": "getBNTBalance(address)", +"65488541": "Harimid(uint256)", +"6548b40d": "depositErc20(address,uint256)", +"6548e9bc": "setRelayer(address)", +"65497caf": "limitDateSale()", +"654a1855": "CentToken(uint256,string,uint8,string)", +"654a95f2": "calculateEggSell(uint256,address)", +"654a9f69": "CappedCrowdsale(uint256,uint256,uint256,uint256,address)", +"654af496": "callDividend(address)", +"654b3110": "allowIssua()", +"654b6105": "DestiNeedToken()", +"654c2111": "Cash311()", +"654c6daf": "totalTeams()", +"654c7381": "listItem(uint256,uint256,address,bytes32)", +"654c8748": "setBitSTD(address,address)", +"654cf88c": "store(bytes32)", +"654d146a": "costAndBuyTokens(uint256,uint256)", +"654e27f9": "callBtoWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"654e51e7": "setRewards(uint256,uint256)", +"654f18b1": "DragonPriceUpdated()", +"654f1ccb": "getGamesLength()", +"654f4575": "getTopN(uint256)", +"654f4b61": "bidHash()", +"654f7d40": "ETHERRED()", +"654f97a3": "setClaimStatus(bool)", +"655012a9": "sumPrice()", +"655042ee": "OSCoinToken()", +"655059db": "create(bytes32,bytes32[])", +"655187b2": "Aragon()", +"6551fb11": "localsStore(address,address)", +"65521111": "isAble(address,uint8)", +"6552a562": "updModule(string)", +"6552d8b4": "removeReceiver(address)", +"655330f4": "NLog(uint256)", +"65536ab3": "BFEXToken()", +"655388be": "walkTowardsBlock()", +"65538c73": "fireEventLog0()", +"65538da0": "preSaleOpened()", +"655391c9": "updateBaseTokenURI(string)", +"6553b03c": "cloneContractor(address,uint256)", +"65540940": "partnerAllocateRestrictedTokenTo(bytes32,bytes32,uint256)", +"6554d179": "attachedSystemActive()", +"65550e70": "getNextAvailableCard()", +"6555394b": "updatePrice(address,bytes32[],uint256[],uint256)", +"655584d6": "ChangeDate(uint32)", +"6556f767": "getBytes(address,bytes32)", +"6557a47c": "Tier_Wildcat()", +"6557b677": "lowTokensToSellGoal()", +"6557dfc8": "AnimeToken()", +"65581793": "S2()", +"6558488a": "scheduleSetBool(address,uint256,bool)", +"6559aeb2": "transferTimelocked(address,uint256)", +"6559c08d": "checkProblemsSolved()", +"655a4ebf": "revokeAttribute(address,address,bytes32,bytes)", +"655b08eb": "getRandom(uint256,uint256)", +"655b3667": "TOKEN_SUPPLY_AIRDROP_LIMIT()", +"655b97db": "ownershipLookup(address,uint256)", +"655bb0e8": "transferSubcontractsOwnership(address)", +"655bb565": "changeGasPrice(uint256)", +"655c737c": "getPositionOwedToken(bytes32)", +"655cc366": "LogGoalReached(address,uint256)", +"655d0862": "createSignedMessageOracle(bytes32,uint8,bytes32,bytes32)", +"655d225f": "myTime()", +"655d65c4": "limitSell(uint256)", +"655dc4c2": "getLawyerCount()", +"655e0d38": "changeBroker(address)", +"655e4224": "addEntryInSecondsPeriods(address,uint256,bool,uint256,uint256)", +"655e51f2": "MIN_GOAL_EBC()", +"655ec3e4": "transferSoul(address,address)", +"655f8294": "PreviousTime()", +"655fc4db": "vault_releaseDeposit()", +"655fcaf5": "feeReceiverWallet()", +"65604a11": "VESTING_WALLET()", +"6560a307": "suggestedGas()", +"656104f5": "_setOrganiser(address)", +"6561e6ba": "feeWithdraw()", +"6561e921": "becomeRenown(bytes32)", +"6561ffb9": "LOTTECHAIN()", +"65620283": "transferTokens(address[],uint256[])", +"65622cfd": "transferFor(address)", +"65630493": "ERC20Impl(address,address,address,address)", +"656362b5": "regFactory()", +"6563b2fc": "tokensLeftInPhase(int8)", +"6564a7af": "DeployENS()", +"6564ad28": "IFNToken(address,address,uint256,string,uint8,string)", +"65651b6e": "addSkillName(address,bytes32,address)", +"65670adc": "teamSupply18Months()", +"65675074": "getAllTokensOfUser(address)", +"65676c9e": "baseExchangeRate()", +"65679536": "month24Unlock()", +"65687008": "fundraiserAddress()", +"65688182": "recomputeLastAverageBalance(address)", +"65688cc9": "newGuard()", +"6568a279": "withdrawAll(address[])", +"656afdee": "register(string,bytes32)", +"656b275c": "expandY()", +"656b9952": "produce()", +"656ca11d": "CONFIG_FEES_MUL()", +"656d2f63": "ManagedAccount(address)", +"656d3091": "createEthSaleAuction(uint256,uint256)", +"656d677e": "releaseTotal()", +"656e8d6f": "getTutorialBabyGen(uint16)", +"656ea1f6": "snikerts()", +"656f416d": "uponTransferFrom(address,address,address,uint256)", +"656f64f5": "pendingGDPOracle()", +"656f6873": "ActualizePriceBeforeStart(uint256,uint256,uint256,uint256)", +"65704506": "currentGame(address)", +"657128a2": "altTokenOf(address,address)", +"657157e5": "canTrade(address,address)", +"657206ef": "getSignedAddresses()", +"6572ab5b": "shareCycleIndex()", +"6572ae13": "calculateWinner(uint256,uint256)", +"6573ee1e": "doFailingApprove()", +"6574bdd2": "newDream(address,string,string)", +"65757eeb": "removeDiscounts(uint256[])", +"65766b64": "stageBegin()", +"6577ab77": "_checkSeal(address,address,address,uint256)", +"65781994": "SESAPACToken()", +"65783c66": "checkTicket(uint32)", +"6578d920": "_canSendGameGift()", +"65791e46": "setTimeTransferAllowance(uint256)", +"65794de3": "secondStageDuration()", +"657a2ffa": "Register(uint8,string)", +"657a37ad": "depositAndSell(address,address,uint256)", +"657ad078": "moveOwner(uint256[3],uint256[4],uint8[176],bytes32,bytes32,uint8)", +"657ad479": "presalePerEth()", +"657ba57b": "show_The_name_of_option_C()", +"657c5dae": "ApproveTitle(uint256)", +"657d38b8": "endICOp3()", +"657db38d": "ten_wallet()", +"657edc11": "removeLootbox(address)", +"657f3ab0": "getPricePoint(uint256)", +"657f4783": "getRealGoldBought()", +"658030b3": "tokenInstance()", +"65826666": "executePullPayment(address,string)", +"658268c1": "StableCurrencyToken(uint256,string,string,uint256)", +"658311ab": "jackpotLevel()", +"658389cb": "isFromCountry(address,address,uint256)", +"6583e239": "STATUS_DEAL_APPROVE()", +"6584a5b5": "removeLock(address[])", +"6584ceb0": "StartNewEpoch()", +"6584fcce": "ATCReserveLocker()", +"658523d9": "StrategicToken()", +"65855010": "rateSale()", +"658577e9": "buyXid()", +"65857a5e": "parkingOn(address,uint256)", +"65859862": "add_arbits(address,address,uint256)", +"6585c27c": "getrandoms()", +"6585dc12": "enableRefundPeriod()", +"658612e9": "gasFee()", +"65862330": "TestableStandardCampaign(string,uint256,uint256,address,address)", +"65863b24": "getTotalCollectedPromoBonus()", +"6586bb25": "MAXIMUM_PARTICIPATION_AMOUNT()", +"6586bd51": "getNodalblockSender(string)", +"65879e72": "JED()", +"6587ab3d": "toggleSafetyMode()", +"6588875e": "ShutterToken()", +"6588c11c": "_startSwap()", +"658a5692": "_totalEthCollected()", +"658b98a9": "pointMultiplier()", +"658bc083": "initDistribution(address,address,uint256)", +"658bf147": "setArea(uint256,bytes32)", +"658c55ed": "saleProceedsFiat(uint256)", +"658cc376": "getCensuringCount(uint16)", +"658d3423": "getGameMinAmountByBet(uint256)", +"658dc76f": "addChunk4ToWhiteList()", +"658df3f7": "approveCompletedMilestone(uint256)", +"658e587f": "getWithdrawConfirmationCount(uint256)", +"658eefd1": "notifyRefundToken(uint256,address)", +"658f2ad6": "CrowdSale_Resume()", +"658fbfbc": "transferOnError(address,uint256)", +"659010e7": "m_spentToday()", +"65909081": "Brothel(address)", +"6590f0ed": "DUKCoin()", +"65921f02": "paladinEquity()", +"65926a20": "changeSaleOn(uint256)", +"6593643c": "CreateIND(address,uint256)", +"65937ab9": "isUpdateAuthorized(address,uint256)", +"659382fb": "payoutETH()", +"6594479f": "LTYP()", +"6594d99b": "isDataNo(bytes)", +"6594ea6c": "EGGS_TO_HATCH_1SQUIRREL()", +"65957bf5": "getShareToken(uint256)", +"6595c94e": "calculateTierBonus()", +"6596217b": "HAYATO_FTL_SPEED()", +"659621b5": "r0()", +"65968727": "innocoinToken()", +"6596cff3": "setCrowdsaleContract(address)", +"65975691": "getDividends(uint256,uint256)", +"6597a076": "getBonuses()", +"6598afb9": "yearlyBlockCount()", +"65995733": "getSalaryTokenValue(address,address,address)", +"65995cc8": "uploadAdvertisement(uint256,string,address,uint256)", +"659a46e8": "coinLockRmoveMultiple(address[])", +"659a7486": "inTradingTime()", +"659a9cbc": "coinsUnit(uint256)", +"659ae215": "saleDateFinish()", +"659b586e": "readQuantityList(address,uint256,uint256)", +"659b9c72": "UsersNumber()", +"659bd174": "TransferredTimelockedTokens(address,address,uint256)", +"659d1185": "angelTimeLock()", +"659d20eb": "getFoundersGames(address)", +"659d6bd1": "readPower()", +"659d7aaa": "sendEtherManually(address,uint256)", +"659de63b": "distributeToken(address[],uint256[])", +"659e0729": "getFirstAmount(bytes32,bytes32)", +"659e27b0": "setWhitelistingAddress(address,address)", +"659e69e9": "setDelegateAdmin(address,address,string,bool)", +"659eeabc": "tokensWithAmount()", +"659eeef1": "increasePaymentsBalance(address,uint256)", +"659f9e3c": "lastEpochBlockHeight()", +"659fb968": "getOracleOutcomes(bytes32[],address[])", +"65a096dc": "changeWithdrawableRound(uint256)", +"65a114f1": "resetTime()", +"65a178c0": "getTlength01()", +"65a20ef9": "hasRole(uint256,address,uint256)", +"65a26185": "updateGranted(address,address)", +"65a31545": "doDeposit(address,uint256)", +"65a3d8f0": "setEtherCentPrice(uint256)", +"65a4c957": "resultsDelay()", +"65a4dfb3": "oraclize_query(uint256,string,string,string,uint256)", +"65a572dc": "EGREngravedToken()", +"65a5e708": "Upgraded(uint256)", +"65a5f1cd": "changeFoundation(address)", +"65a61ab4": "RWSC()", +"65a6bb29": "getAllOracles()", +"65a707bf": "DrugDealer()", +"65a7dcec": "addWinners()", +"65a8a483": "setColdWallet2(address)", +"65a91d4a": "createAmountFromTmedForAddress(uint256,address)", +"65aa96bd": "postJobOffer(uint256,address,uint256,uint256,uint256)", +"65aade1a": "getEmployeeId(address)", +"65ababe9": "createERC20Token(string,uint8,string,uint256)", +"65abb3f2": "_doAddPollOption(uint256,bytes)", +"65ac0d8b": "Withdrawl(address,uint256)", +"65ac2320": "ownerName()", +"65ac4341": "getTotalAmount()", +"65ac8c2a": "getSellOrdersInfo()", +"65ad9f34": "setHardCap(uint256,uint256)", +"65ae247e": "issueLockedTokensCustom(uint256,uint64)", +"65aebe7b": "ind(address,address)", +"65aec658": "_createCitizen(uint16,uint16,uint8,bytes32,bytes32,bytes32)", +"65af2a7d": "investedDDT(address)", +"65afa594": "Member_GetMyTokens()", +"65b040c8": "setPriceWithBonus(uint256)", +"65b051b8": "MEWSToken()", +"65b06136": "makePayouts()", +"65b0bc85": "createNameAndPoint(bytes32,address)", +"65b0d711": "updateApprovalOfToken(address[],bool)", +"65b0e5b3": "setethrate(uint256)", +"65b1b92d": "unLinkNewHouse()", +"65b1c987": "resetBurntTokens()", +"65b1fdf4": "scheduleIssuePOIs()", +"65b27205": "testFailMintWhenStopped()", +"65b2a863": "revoke(string)", +"65b36bbb": "countpat(uint256)", +"65b37d70": "HotManChain(uint256,string,uint8,string)", +"65b3a7ca": "isGameExpired(uint256)", +"65b686b0": "burnRemainTokenOffering()", +"65b6cd66": "setUserTransactions(string)", +"65b6d9e2": "a(uint256,string)", +"65b70e45": "UpMineLVL(uint256)", +"65b7a89d": "DeDeContract(address,address,address,uint256,uint256,address,address,uint256)", +"65b7b357": "getVotersAnswer()", +"65b892a1": "withdrawForOneStep()", +"65b980ab": "performTransaction(address,bytes32)", +"65b9e37d": "hardParticipationCap()", +"65ba12b8": "percentWeiJackpot()", +"65ba331b": "IcoStagePeriod(uint256)", +"65ba36c1": "interfaceHash(string)", +"65baf5db": "tier2Start()", +"65bb193e": "createInsurance(string,address)", +"65bbb26a": "Linamyd()", +"65bc35fa": "Streem(uint256,string,string,uint8)", +"65bcaf4a": "Ubiou(uint256,string,string)", +"65bcfbe7": "payouts(address)", +"65bdadf6": "ninthTime()", +"65bf1ffc": "authorizedStartTrading()", +"65bfdb0b": "_receiveChild(address,uint256,address,uint256)", +"65c04faf": "random(uint32,uint256)", +"65c09830": "changeStatusGame(uint8)", +"65c0eecf": "BitcoinLiza()", +"65c13fdb": "changeGasPriceLimit(uint256)", +"65c19af0": "getStringLength(string)", +"65c24799": "getYayNum(uint256)", +"65c2c60f": "checkName(bytes32)", +"65c2d3a0": "romper()", +"65c2e8a1": "bossAdmin()", +"65c2fab2": "NewIssue(address,uint256,uint256)", +"65c301ab": "getDriver(address)", +"65c40b07": "bonusesDates(uint256)", +"65c4a861": "cordY(uint256)", +"65c4b463": "_tag(bool,string)", +"65c5826f": "ENC()", +"65c5e683": "mine(address,uint8,bytes32,bytes32)", +"65c683cf": "metadataOfToken(uint256)", +"65c724cd": "dividendsCollected()", +"65c72840": "getDay(uint256)", +"65c7b711": "MockToken()", +"65c91b0b": "testFailTransferOnlyTrustedCaller()", +"65c95a6b": "setUFee(uint256)", +"65c9e51e": "setDepositPeriod(uint256,uint256)", +"65cacaa4": "getVaultAddress()", +"65ccb687": "PULSToken()", +"65cd048b": "setDividendFee(uint8)", +"65cd1bea": "PayToken(address,address,uint256)", +"65cd3686": "setIsSendingLocked(address,bool)", +"65ce47fb": "_myDecimal()", +"65ce5222": "specificTransferFrom(address,address,uint256)", +"65ce7395": "setMinVote(uint256)", +"65cf3a48": "bonusPrice()", +"65d0a890": "Daio(uint256)", +"65d0e4a7": "addBot(address,address)", +"65d1926d": "dropAddress()", +"65d1df24": "s2s()", +"65d27248": "setSellPrice(uint16,uint16,uint8,address,uint256)", +"65d300ea": "CreateAds(address,uint256)", +"65d43868": "allowedOracleChangePercent()", +"65d48d0b": "freezeBalancesOf(address)", +"65d4bdab": "targetEth()", +"65d51dd5": "_phase2Supply()", +"65d5b48d": "PRECOMMITMENT_VESTING_SECONDS()", +"65d61ad6": "PwdHasBeenSet(bytes32)", +"65d6759a": "getGenome(uint256)", +"65d68308": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"65d6dbbd": "unPromisedPop()", +"65d6e6a4": "jackpotMaxTime()", +"65d73851": "calculatePrizeCut(uint256)", +"65d7d3d0": "LegacyReputationToken()", +"65d80117": "getResource(string)", +"65d8a20a": "updateTransactionFeePercentage(uint8)", +"65d8e32e": "setProfileHash(string)", +"65d967b0": "ETH_HARD_CAP()", +"65d9d8e2": "depositEtherForUser(address)", +"65d9df9c": "totally_decrease_the_supply(uint256)", +"65d9f31e": "addressFounders3()", +"65d9f55a": "removeValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"65da1cfc": "AdminClaimed(address,address)", +"65da5603": "produce(uint256)", +"65db63d0": "kittensDroppedToTheWorld()", +"65db6c8c": "OPTIONAL_POOL()", +"65dba2b3": "removeTeamMember(address,bytes32)", +"65dbcc0f": "addThenSubUInt(uint256,uint256,uint256)", +"65dc128e": "p_setAirdropPercent(uint256,uint256)", +"65dc4e3a": "addCollateralMarket(address)", +"65ddf33b": "productsShipped()", +"65de1eb3": "getVendor(uint256)", +"65df517e": "CTHToken()", +"65df7933": "totalDevelopers()", +"65dfc20f": "setWalletFees(address,uint256)", +"65e00beb": "createFlowerAuction(uint256,uint256,uint256,uint256)", +"65e0c718": "DisputeResolved(bytes32)", +"65e0e117": "getSendersCalcTokens(address)", +"65e0e9a2": "preIcoState()", +"65e14731": "_kittenOwner()", +"65e16933": "buyPRETDETokensWithoutETH(address,uint256,uint256)", +"65e16a09": "transferadmin(address,address,uint256)", +"65e17c9d": "feeAccount()", +"65e1cc85": "foundersPercent()", +"65e21cb0": "transferNewBunny(address,uint32,uint256,uint256,uint32,uint32)", +"65e23ce3": "minimumEther()", +"65e2406a": "takeEthForExchange(uint256)", +"65e2409b": "getPlayerEnergyByAddress(address)", +"65e4349c": "NewStage(uint256,uint256)", +"65e44d06": "BITOToken()", +"65e47208": "lcBalance()", +"65e49444": "claim_bix_with_maturity()", +"65e4ad9e": "isAuthorized(address,address)", +"65e60ef2": "read(bytes32,bytes32)", +"65e62ee6": "getInvestorKycLimit(bytes32,uint8)", +"65e7096d": "allMaskGu_()", +"65e7ee50": "RCCContractTest()", +"65e807ab": "getTokenLossValue(uint256)", +"65e83ae1": "getCrowdsaleTokens()", +"65e8faf6": "isValidIndex(uint256,uint256)", +"65e93b3f": "getUserVotes()", +"65e9cc4e": "contributionPending()", +"65ea19a8": "set_notary(address)", +"65ea2b77": "ethaddrc()", +"65ea62ff": "initTransfer(address,uint256,uint256)", +"65eb0dec": "changeAllowedTakerBetsPerMakerBet(uint256,uint256)", +"65ec4c2e": "retirarDinero(uint256)", +"65ed16af": "_addBridgeNativeFee(uint256,uint256)", +"65ed4a45": "getVerifiedNumOrganizers()", +"65ed6e23": "getAllocations()", +"65ed8a4a": "proposedTotal()", +"65eec589": "_markWithdraw(address,uint256)", +"65ef1a3f": "setHotWalletAddress(address,address)", +"65ef617d": "AdminWalletUpdated(address)", +"65ef7b95": "getStoreAddressById(uint256)", +"65efd3a3": "addCertAdmin(address,bytes32)", +"65f0a00b": "ONETIDC()", +"65f17913": "monarchsByNumber(uint256)", +"65f27bea": "testSubBalanceFailsBelowZero()", +"65f2bc2e": "unitsOneEthCanBuy()", +"65f3c31a": "Put(uint256)", +"65f41211": "validStoreDest()", +"65f42e7a": "APTV()", +"65f4d9f6": "failInvestPercents()", +"65f520a7": "kittyData()", +"65f5463e": "CLIP()", +"65f594a7": "revealCurve(uint256,uint256,uint256,bool,bytes32)", +"65f63c1b": "queryToken(uint256)", +"65f68c89": "getId(address)", +"65f6a049": "sellGrimReapersAgainstEther(uint256)", +"65f6c15e": "ordersOf(uint256,uint256)", +"65f6d6a2": "FOUNDERS_TOKENS()", +"65f77c63": "getCertAddressByID(string,bytes32)", +"65f7aaff": "endRoundDecision()", +"65f84cbe": "_createWeightedMultiplierLot(address,uint256,uint256)", +"65f88c0d": "getNumUsers()", +"65f926ff": "getIdArrayItemsCount(address,address,string)", +"65f937ed": "sumOfAvailableIcoCoins()", +"65f97082": "startIco2(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"65fa2b97": "calculate_with_fees(uint256)", +"65fa2f7f": "getLastPrice(uint256)", +"65facff0": "_isMember()", +"65fae654": "Mychatcoin()", +"65fb99ba": "findUnConference(string)", +"65fba60d": "crowdsaleAllowance()", +"65fbc99f": "distributedSaleStakes()", +"65fc1253": "setExternalDependencies(address[])", +"65fc535b": "withdrawBenefit(address,uint256)", +"65fc783c": "getNumOfVoters()", +"65fcb49e": "maxContractBalance()", +"65fcf1b5": "releaseFirstUnlock()", +"65fddc81": "reducer()", +"65ff0f5a": "TradeListing(address,address,address,uint256,uint256,uint256,bool,bool)", +"65ff8220": "sampleContract()", +"65ffe43d": "lastFund()", +"66003666": "bountyTokens(address,uint256,string)", +"66005ede": "vc1Wallet4Pct()", +"6600811c": "tokenSaleHalted()", +"6600d282": "releaseAngelFirstVested()", +"6601345c": "changeTierController(address)", +"66013bdd": "withdrawToken(address,address,uint256,address,uint256,uint256,address)", +"6601cd77": "getExchangeDetails()", +"66025047": "isCategory(uint256,uint8)", +"660357f2": "removeWhiteListedContracts(address)", +"66035cc0": "adPriceHalfDay()", +"66040458": "signedApproveAndCall(address,address,uint256,bytes32,uint256,uint256,bytes32,address)", +"66042e7a": "etherToSendFund()", +"6604ca6b": "STO_KEY()", +"66056e8b": "destructSale()", +"6605bfda": "setTreasuryAddress(address)", +"6605ff66": "totalSales()", +"660686de": "cutBAU2Length(bytes32,address,uint256)", +"6606873b": "setMem(uint256)", +"6606b7d4": "democFee()", +"6606fe1e": "CABCrowdsale()", +"66081ec1": "JACKPOT_WALLET()", +"66092ea8": "ignited()", +"66098d4f": "plus(uint256,uint256)", +"66099706": "getChannelCred(address,uint256)", +"660a333e": "assetOwnerAdded(bytes32,address,address)", +"660aab8e": "profileOf(address,bytes32)", +"660b24b4": "emergencyTokenDrain(uint256)", +"660b7ad5": "rentDue(bytes32,string)", +"660ba74e": "_availableBetting(uint256,uint8,uint256)", +"660c325e": "evPayOut(address,uint256,address,uint256)", +"660c6813": "crowdsaleStopDate()", +"660d0d67": "dataStore()", +"660d5887": "registeredUsers()", +"660dee82": "addTask(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"660ef82d": "advisersAllocation()", +"660f77aa": "CVDToken()", +"6610a38a": "mountCitadel(address,address)", +"6610f7a8": "previousBurners(address)", +"6611611c": "MIN_INVESTEMENT()", +"661195bc": "transferFromLowFunds(address)", +"6611f5f2": "ZTR_ETH_extra_price()", +"6612283d": "subdivisionEnabled()", +"66125b25": "boolFunc(bool,bool)", +"661309ac": "allowedTransfers(address)", +"6613221f": "burnLand(uint256)", +"66134794": "exploreCount()", +"6613ee9c": "_isSigned(address,address,bytes32,uint8,bytes32,bytes32)", +"66154885": "getIncomingValueAsEth()", +"6615827b": "LogEscrowEthReq(uint256)", +"6615dd83": "setSeedSourceB(address)", +"6615e357": "setPortfolio(bytes32,bytes32[],uint256[])", +"66161ed4": "setStopContract(bool)", +"66167617": "bet_various()", +"66167663": "subdomainTarget(string,string,string)", +"66168bd7": "depositTokens(address,uint256)", +"6616c886": "canSetBanker()", +"6617e11a": "NiceGuyTax()", +"66180bc7": "testTransferTwoTokensAndReturnFunds()", +"66188463": "decreaseApproval(address,uint256)", +"66188a26": "forwardable(address)", +"6618b008": "cancelSellOrder(address)", +"66194d72": "childToken(address,uint256)", +"661956fb": "depositInvestment()", +"661990bc": "earlyInvestorWallet()", +"661aba0d": "setMntpMigrated(address,bool,string)", +"661ad427": "setOraclizeUrl(string)", +"661b6dae": "eth2qiuRate()", +"661b9065": "getRelationWith(address)", +"661be157": "account_address()", +"661c866c": "requestNewEtherRealID(string,string,string,bool)", +"661d3470": "LUXREUM()", +"661e3605": "ConstructorContract(uint256)", +"661e5ec2": "getPlayerValues(uint8[],uint8[],uint8[])", +"661edfee": "rewardFor(address)", +"6620a935": "sendToOwner()", +"6620cc3c": "GanNFT()", +"6620ffd3": "getNumAnimalsXType(uint8)", +"66210532": "setVestingMasterAddress(address)", +"6621b7be": "fiatValueMultiplier()", +"66234c4a": "ReleaseManagerSet(address)", +"6623fc46": "unfreeze(uint256)", +"662457c6": "nextProposalID()", +"6625123b": "COINBIG()", +"662512f1": "testThrowTranferZeroTokens()", +"6625b349": "RESERVE_ALLOWANCE()", +"6626b26d": "off()", +"66272374": "setWithdrawRate(uint256)", +"662723bb": "bulkTransfer(uint32[],address[],uint256[])", +"66273fc6": "bountyTokenSupply()", +"6627ace5": "getDCommBallotsEnabled(bytes32)", +"662959cc": "southadvisor()", +"662a3b81": "getHouseAddressTwo()", +"662a6137": "developmentTokensWallet()", +"662a719b": "RewardHalvingTimePeriod()", +"662ad59b": "pixels()", +"662bca97": "SetInRate(uint256)", +"662c6230": "LogResultNoWinner(uint256,uint256,bytes)", +"662d2ec8": "freeze(address,uint256[],uint8[])", +"662d5aa9": "EduMetrix()", +"662da459": "newCostToken(uint256)", +"662dbe96": "getNodeHeight(bytes)", +"662de379": "registerAddress(bytes32,address)", +"662e2536": "cordZ(uint256)", +"662e3470": "getSectionIndexFromRaw(uint256,uint256)", +"662e4db0": "c_preICOBonusPercent()", +"662e4ee4": "changeowner(address)", +"662f0763": "sendTokenReward(address,uint256)", +"662f94c0": "approveBlacklistedAddressSpender(address)", +"662fa2fb": "ProofOfRarePepe()", +"662fac39": "mining()", +"662feffc": "addStore(string)", +"663083f6": "moneyTotal()", +"663152d1": "phaseOneEnd()", +"6631ff1d": "grantToken(address,uint256,uint256,uint256,uint256)", +"6632a507": "testSetupPrecondition()", +"66331bba": "isPriceOracle()", +"6633a2bb": "_newPresserFee(uint256)", +"66341c97": "changelp14(address)", +"6634cec6": "findProductAndIndexById(uint256)", +"6634d917": "startEarlyStage2()", +"66357f57": "descriptionUpdate(string)", +"6635da25": "Voting(bool)", +"6635e0ea": "BlocklabTokenV1()", +"6635e511": "availableForInvestment()", +"66365082": "dealRevert(uint256)", +"6636fca8": "retainers(address)", +"6637324a": "Deploy(address,uint256,uint32,uint256)", +"6637b882": "setDao(address)", +"66383d32": "getCurrentRoundIndex()", +"663890b1": "FinalizableCrowdsaleImpl(uint256,uint256,uint256,address)", +"66389f1f": "OwnerProclaimedDead(address,address,uint256)", +"6638c087": "createCloneToken(string,uint8,string,uint256,bool)", +"6638d82f": "freezeTo(address,uint256)", +"6639016b": "releaseETH()", +"663960cd": "NewWinner(address,uint8)", +"6639dc8e": "emissionLimit()", +"663a0ebb": "tokensAmount()", +"663a339d": "IsSetReferrer()", +"663b0534": "disablePayable()", +"663b3f62": "balancesImporter6()", +"663b8c5a": "_newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", +"663bc990": "test_1()", +"663c01af": "getAllProductIds()", +"663c2e30": "claimPrize(bytes4)", +"663c920a": "redenomiValue()", +"663cebfc": "VeiagCrowdsale(uint256,uint256,uint256,uint256,address,address,address,address)", +"663d1e84": "createVotacion(bytes32,bytes32[],uint256[])", +"663d6612": "defaultOperatorsTranche(bytes32)", +"663e0f88": "getSpecifiedDecimal()", +"663e90d9": "setBuyNowListing(bytes32,uint256,bool)", +"663f2670": "AccountLinked(address,address)", +"663f70c3": "calculateBounty(uint256)", +"663f8549": "mintReserved(address,uint256,uint256)", +"663f9c0d": "loginState(address)", +"663fc7e0": "highRoller()", +"663ff5a9": "create(bytes32,address)", +"6640ca84": "AgreementPen(address)", +"6641179e": "artistsEditions(address)", +"66417115": "positionOfJingle(uint256)", +"6641cc27": "eliminarVotacion(bytes32)", +"6641cc64": "kycApproved(address)", +"6641ea08": "ROUND_DURATION()", +"6642c0bc": "executeExploit(address,address)", +"66435abf": "getWeight(bytes32)", +"6643caba": "generousDonation()", +"6645167d": "YourCrowdSale()", +"664519bd": "wwamICOcontractAddress()", +"6645c0dc": "transferVotes(address,uint256)", +"66476fcc": "flipTokenReward()", +"66479c08": "payOraclize(uint256)", +"6648cb52": "setPurchasePeriod(uint256)", +"66494ab6": "THAW_CYCLE_FUNDER()", +"6649dfd5": "preCrowdsaleOn()", +"664a1ad6": "fundWallet()", +"664abc0f": "packedToEndTime(uint256)", +"664b3350": "createTransfer(address,uint256,bytes)", +"664b885e": "AddNewPrestige(uint256,uint256,uint256)", +"664c7bf7": "ethEurFraction()", +"664d8629": "withdrawAuctionDklBalance()", +"664dcb93": "getMHTTotalSupply()", +"664dd24f": "getUserTransactionIndexes(address)", +"664e9704": "RATE()", +"664eb12e": "updateCompanyPrice(uint256,uint256)", +"664f4904": "sealMinter(bytes32)", +"66505d1d": "BitcoinisDumb()", +"665289d2": "adjustPriceAndOwnerOfPlayerDuringPresale(uint256,address,uint256)", +"66533014": "supportMessage(uint256)", +"6653be1a": "getGameCardId(uint256)", +"665502ec": "ContractToken(address,string,string,uint256)", +"66550624": "CityLifePlusToken()", +"66552e15": "addVestingForBeneficiaries(address[],uint256[])", +"6655d7dd": "RedeemTokens(uint256)", +"6655ff3d": "WebsiteHostingToken()", +"66566947": "associateWithTeam(bytes32)", +"66566abd": "multSender(address[],uint256[])", +"66576514": "mintDRSCoin()", +"665788f8": "firstCrowdSaleDate()", +"6657b2c0": "reloadTickets(uint256,uint256)", +"665814d8": "_presaleStartTimestamp()", +"6658238c": "Peculium()", +"6658357e": "setCINTokenAddress(address,address)", +"665851bb": "wangxihaoToken(address,address)", +"66587cf6": "MIRT()", +"665905c6": "manuallyResetGame()", +"665939cc": "setupFundingRate(uint256)", +"6659889d": "setPromoWallet(address)", +"66599a40": "setEtherPriceInPoundPences(uint32)", +"665a11ca": "liquidityPool()", +"665a6ab0": "calcBurntFees()", +"665b0d5b": "_taskError(string)", +"665b1bc0": "_mint(string,uint256)", +"665b51ce": "getusedAPI()", +"665bcc32": "ProcessGames(uint256[],bool)", +"665beae7": "ExecutableBase(bytes)", +"665c0b8e": "purchaseMembership(address)", +"665ca475": "VUToken()", +"665d8a53": "MAIN_SALE_END_TIME()", +"665de19b": "mutiSendCoinWithDifferentValue(address,address[],uint256[])", +"665df460": "sqrt(int256)", +"665e06ac": "OATToken(address,uint256)", +"665eba29": "playerForceGameEnd(uint256)", +"665f09fa": "addCoinAmount(address,uint32)", +"665f5149": "JOZ()", +"665f9719": "investInfo()", +"665fb66a": "YBToken(uint256,string,uint8,string)", +"66605ba4": "rename(string)", +"66605c47": "GetBuildingData(uint256)", +"6660b210": "kMinStake()", +"6660da77": "addDiscountStruct(bytes32,uint256,uint256[2],uint256[],uint256[],uint256[])", +"6660ead1": "RANGEEND_11()", +"66612f66": "MAX_DAILY_COSIGN_SEND()", +"666192b9": "___upgradeToAndCall(address,bytes)", +"66625bbd": "revokeContract()", +"6662e4be": "isWinningBet(uint256)", +"66634a16": "getAnimalCount()", +"666375e5": "set_allow_contributions(bool)", +"6663bbec": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", +"66648dd3": "setRateIco(uint256)", +"6665e0fd": "tradeActive(address)", +"66663d78": "XPAAssets(uint256,address,address,address)", +"6666490c": "getPlayerSpaceshipBattleLossesById(uint256)", +"66666aa9": "rewardPool()", +"6666d22c": "timeBetweenRounds()", +"66671c30": "FBLFounderFund()", +"66671c71": "BaseScheduler(address,address)", +"66675c57": "updateDecimals(uint256)", +"66679ac7": "interfaceTransfer(address,address,uint256)", +"6668df7f": "subCoinAllowance(address,address,uint256)", +"6668ffc6": "isAuditor(address,address)", +"666923ea": "lastBlock_v15Hash_uint256()", +"6669749f": "HamzaCoin()", +"666a3427": "removeOwnership(address)", +"666afadc": "preparePreContribution(uint256,uint256,uint256)", +"666b7d32": "disableICO()", +"666b9132": "PartialCoin()", +"666be68a": "setIcoTokenSupply(uint256)", +"666c11fa": "getuserdayruns(address)", +"666c7ed0": "WIZE()", +"666cd4bd": "calcId(uint128,address,address,address,address,uint256,uint64,bytes)", +"666cdaa0": "getAnime(uint256)", +"666da64f": "claimShare()", +"666de8d5": "setSecretBonusFactor(uint256)", +"666e1b39": "owner(address)", +"666e587d": "fundICO(uint256,uint8)", +"666efa0a": "walletFees()", +"666f0354": "getMonthRefferals(address)", +"666f4cad": "totalWeiWagered()", +"666f6843": "reservedAddress()", +"666fc4d4": "minimunEthereumToInvest()", +"6670bdd8": "getDOwner(bytes32)", +"66731e95": "LogNewWhitelistUser(address,uint256,uint256)", +"667336d8": "available_without_bonus()", +"66734eb0": "MainController(address,address)", +"66735f4e": "_pickWinner()", +"667390c7": "SendmoneyTransfer(uint256)", +"6673ce2b": "Results_of_the_last_round()", +"6673d5c6": "totalSoldTokenCount()", +"6674bfaf": "closeOption(address[3],uint256[3])", +"6676871d": "reserved_funds()", +"6676aaa2": "MplusCrowdsaleB(address,address)", +"66772438": "computeResponse(uint16)", +"6677cef1": "getCrowdsaleManager()", +"6677febe": "get_all_accepted()", +"667815a2": "getCanSellBalance()", +"6678887f": "replacesOldContract()", +"66792ba1": "send(string)", +"667a2f58": "createDepositAddress()", +"667b39b9": "nameOfToken(uint256)", +"667cb72d": "soldIdeaWeiPreIco()", +"667d5d22": "wager()", +"667ec46c": "getCurrentTierStats()", +"667f1656": "preSaleBotReserve()", +"667f9510": "getBundinha()", +"667fc6b9": "IchigoToken()", +"66801384": "STAGE_2()", +"6680285a": "AuthorizedCreateToPrivate(address,uint256)", +"66802a92": "tokenGenerationState()", +"668038e0": "claimDividends()", +"66805de5": "closePool()", +"6680624e": "gasPriceMaximum()", +"66816e2a": "setBaseStrength(uint256)", +"6681b9fd": "fundsRaised()", +"66829b16": "changeToken(address)", +"6682eaf1": "setsecure(uint256)", +"6683381b": "setDiscountToken(address,uint256,uint256)", +"66836acf": "updateBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"6683ee49": "BlockPlanet()", +"6683f9ae": "isSettling(bytes32)", +"6684ffcd": "burnerSet()", +"66855dcc": "removeInt256s(bytes32[])", +"6686e174": "tokensReleasedAmount()", +"66874cc5": "brokers(address)", +"66875554": "resumeTokenSale()", +"66875a31": "FOUNDER_TWO()", +"668767bd": "transferFromForExchange(address,address,uint256,string)", +"6687aa35": "onExecuteAffirmation(address,uint256)", +"6688e305": "EIP20(uint256,string,uint8,string)", +"66894d76": "releaseThreeHotHourTokens(address)", +"6689e28b": "distribution(uint8,address[],uint256[],uint256[])", +"668a0f02": "latestRound()", +"668a2001": "removeParticipant(address)", +"668a2f67": "boom(address)", +"668aa824": "oraclePrice()", +"668abff7": "lastRoundLengthUpdateStartBlock()", +"668ad45f": "MyToken(uint256,string,uint8,string,string)", +"668b1b7e": "AOCTrader()", +"668bd511": "BithelloToken()", +"668c1a46": "refundBNBContributor()", +"668c8573": "DATING()", +"668cc7d8": "registerContest()", +"668cf93d": "LOSER_LOCK_TIME()", +"668d5f48": "addBrick(uint256,string,string,uint32,string,bytes32[],uint256)", +"668e0f6a": "addEntry(string,string,string,string,address)", +"668e157f": "StandardQuickConverter()", +"668eef5b": "test_2_method()", +"668faae8": "CollectibleIndex3()", +"668fde45": "advSend(address,uint256,bytes)", +"66901c5b": "clearTimeMap()", +"66901efb": "getOwnerInfoByIndex(uint256)", +"66905ba0": "overwrite(string,string)", +"66907d13": "setNextOrderId(uint80)", +"6690864e": "setTeamAddress(address)", +"6690f30b": "set_Name(string)", +"66914614": "getJackpotTotalValue()", +"6691461a": "updateTokenAddress(address)", +"6693b694": "unfreezeSupply()", +"669459a7": "removeRegistryFromOwnerIndex(address)", +"66949b56": "endMatch(uint256,int256,int256)", +"6694e845": "numRewardedAxies(address,bool)", +"669529df": "removeFromWhitelistMultiple(address[])", +"669541d6": "setGasCost(uint128)", +"66957377": "batman()", +"669585a4": "_figthExecutor(address)", +"6695b592": "stemPriceInWei()", +"6695f930": "calculateAndSetRate(uint256)", +"6696ca51": "forceBurnFrom(address,uint256)", +"66971c8a": "setCurrentFundingRound(uint256)", +"66973129": "PHEPToken()", +"6697aa84": "getRequiredMinor()", +"6698baaa": "STAGE_TWO_TIME_END()", +"6698f141": "releaseTeamTokensAfter18Months()", +"6699d9cd": "Securities_2()", +"6699e4c7": "isReadyForClose(uint256)", +"669a55ec": "initialPrizeBov()", +"669a828b": "getProgramsValue()", +"669b7e69": "getBlockAddressCount(uint256)", +"669cab39": "cancelBetByOwner(uint256)", +"669d8dff": "AddorModifyRig(uint256,uint256,uint256,uint256)", +"669dafe8": "toWei(uint256)", +"669e48aa": "get(uint256,uint256)", +"669e6684": "_rebalanceTree(bytes32)", +"669eb768": "registerDonation(uint32)", +"669ee827": "RegisterDevice()", +"669ef86d": "getPriceByDayIndex(uint256)", +"669f6d80": "bountyRewardPercent()", +"66a03098": "receivedFrom(address)", +"66a0b81e": "safeMode(bytes4,bytes1,address)", +"66a11615": "revokeMintingManager(address)", +"66a192c6": "CurrentRate()", +"66a200ba": "TokenDemo(uint256,string,uint8,string,address,address,address,address)", +"66a23c01": "ETOKEN2()", +"66a26419": "cancel(address,uint256,address,address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"66a39350": "FAIL_FLAG()", +"66a3de2a": "_safeTransferFrom(address,address,uint256,bytes)", +"66a4b6c0": "usdDecimals()", +"66a51d1d": "UcCoinMinimumSellingChanged(uint256,uint256)", +"66a659b3": "readcolorXteam()", +"66a65c99": "getLegacyCount()", +"66a6cf1a": "mateWithAuto(uint256,uint256,uint8,bytes)", +"66a78b40": "depositAgent(uint256,uint256,string,string,uint256)", +"66a78e6c": "maxReward()", +"66a857f4": "ChangeTokenSymbol(address)", +"66a8c45b": "StarmidFunc()", +"66a908a5": "foundersTokensUnlockTime()", +"66a9234c": "addPhase(uint256,uint256,uint256)", +"66a92cda": "releaseOnce()", +"66a9bc0d": "teamTokenVesting()", +"66aa01ca": "permittedAddresses(address)", +"66aa56c5": "initiate()", +"66aa6f26": "payFee(bytes)", +"66aa9aff": "adminDeposit()", +"66aac9e4": "TPLusToken()", +"66ab4e5f": "Grid(uint256,uint256,uint256)", +"66ab5290": "transferSgaToSgnHolder(address,uint256)", +"66ac1c36": "stageFokenUsdPrice(uint16)", +"66ac777e": "rotate_right(uint32,uint32)", +"66ac8075": "payoutPrizes(address[])", +"66ad3ffc": "building(uint256)", +"66ad484c": "newfirst_player(address)", +"66adeb3a": "SmartToken()", +"66adeb8c": "transferBalance()", +"66adf835": "_setup(address,address,uint256,bool)", +"66adfbbd": "sgc(uint256)", +"66ae924b": "toUint16Throw()", +"66ae935f": "balanceEqual(address,uint256,string)", +"66aecfa7": "bankToCharm(string,uint256)", +"66aee0fc": "investorsProfit()", +"66aef95b": "increaseTimeIfBidBeforeEnd()", +"66af3914": "getTradeIsOpen()", +"66af77ca": "totalMarks()", +"66b005ee": "QueryUnlockTime(address)", +"66b0a536": "MomaCoin()", +"66b10f70": "learnMove(uint256,uint256)", +"66b3e4b9": "stageMarketing()", +"66b3f6bf": "invested(address)", +"66b3fe66": "setTimeScale(uint256)", +"66b42dcb": "register(address,string,uint256,string)", +"66b43da5": "computeSha3(uint256[8])", +"66b46149": "fstring(string)", +"66b464de": "goldBoxPrice()", +"66b4ad74": "KudanilToken()", +"66b52b93": "addMeByRC()", +"66b567da": "getNumMyHatchingUnits()", +"66b5e2d8": "getCountMembers()", +"66b625d4": "bountiesAllocAddress()", +"66b62bde": "isSetTeamWallet()", +"66b668de": "RFUDToken()", +"66b68516": "Finalized(address,uint256)", +"66b728d5": "getVoteOptionId(uint256,string)", +"66b7afbf": "init_level()", +"66b7d5c6": "receivedWais()", +"66b847e5": "assertQuantity(uint256)", +"66ba2670": "setOriginalPriceGen0()", +"66ba707f": "ConsultaRegistro(string)", +"66bab099": "getCurrentSupplyVote()", +"66badf4b": "BITCOINGAM()", +"66bb28be": "_transferMultiple(address,address[],uint256[])", +"66bb83b6": "batchlimits()", +"66bc0d6d": "withdrawFundsAndStartToken()", +"66bcc860": "TransferSiteReg(address,uint256)", +"66bd6ff6": "DecentralizedExchangeHotPotato()", +"66bd78fd": "getBalanceContract()", +"66be24ba": "blockUntil()", +"66bea821": "sendSupplyTokens(address,uint256)", +"66c0276e": "CryptonewsIndonesia(uint256,uint256)", +"66c0e5e0": "revealPhaseMinSecondsWaitForReveals()", +"66c14e0a": "dropCount()", +"66c2355c": "requestNameChange(string,string)", +"66c2aa0e": "getStackholderTransactionCount(bool,bool)", +"66c2ae95": "setHgtRates(uint256,uint256,uint256,uint256,uint256,uint256)", +"66c2d620": "getTot(uint256)", +"66c2d6a0": "BettingToken()", +"66c313c6": "ETHER_THRESHOLD()", +"66c31f12": "emitUserBinded(uint256,address,bool)", +"66c376a1": "setResult(uint32,int8,int8)", +"66c42517": "refundToken(bytes8,address,uint256)", +"66c49da5": "viewThirdBatchOfClauses()", +"66c5c4a0": "unfreezeAll()", +"66c5cdf8": "updateTotal(uint256)", +"66c618d4": "sameWhiteList(address,address)", +"66c630bc": "honourWhitelistEnd()", +"66c71952": "setDiscountPercent(uint256,uint256)", +"66c76592": "_raffleDraw()", +"66c7d1ed": "RozelCoin(uint256,string,string)", +"66c7fb77": "generateDeed(string,bytes)", +"66c82de8": "ContributorPool(address,uint256,int256,uint256,int256)", +"66c89a13": "getAssetEmmiter(uint256)", +"66c91053": "doubleTransfer(address,address,address,uint256,uint256)", +"66c99139": "trans(uint256)", +"66c9bc38": "etherExchangeLikeCoin()", +"66c9d697": "executeVerdict(bool)", +"66ca2bc0": "sendSignal(bytes32)", +"66cab1f3": "isSponsorshipRefunded(address,uint256)", +"66cab95c": "isDeployer()", +"66cc6064": "getPayout(uint256,uint256,uint256)", +"66cd0663": "setCrowdsaleFinished()", +"66ce10b7": "publicKeyVerify(uint256,uint256,uint256)", +"66ce3bd2": "walletBalanceOf(address)", +"66ce5c52": "minWeiToPurchase()", +"66cf058a": "endIcoSaleRound2()", +"66d003ac": "recipient()", +"66d0c603": "addExternalContributor(address)", +"66d10688": "getBoughtTicketCount()", +"66d11c1a": "ContractAddress()", +"66d12fad": "getStakeInOutcome(bytes32)", +"66d16cc3": "profit()", +"66d1cac9": "updatePost(uint256,string,string)", +"66d29324": "defrosting()", +"66d2da12": "setUser(address,address,string,string,bytes32,uint256,uint256,uint256[],string,string)", +"66d38203": "setup(address)", +"66d39035": "getContribution(bytes32,bytes32)", +"66d42b3f": "Betting(uint256,uint256)", +"66d49bab": "updateTotalSupply(uint256)", +"66d598f0": "E18()", +"66d5c8ed": "node_left_child(uint256)", +"66d5eb9b": "openZoneShop(bytes2)", +"66d76bb2": "rateETH_ROK()", +"66d7ffde": "left24(uint256)", +"66d8c463": "reveal(bytes32,string)", +"66d8d040": "dividendsRightsFixUpdate_(address,address,uint256)", +"66dacc48": "afterFirstRefundRoundFundsReleaseDenominator()", +"66db11e7": "nodeExists(bytes32,bytes32)", +"66db2a59": "competitorPAY(uint256)", +"66dc860a": "getBreedingFee(uint40,uint40)", +"66dd3bc0": "terminateAccount()", +"66de5a4f": "createWorkerPool(string,uint256,uint256,uint256)", +"66de6fa4": "isReachedLimit()", +"66de84ec": "withdrawBonus()", +"66df8fe6": "secondStageTotalSupply()", +"66e13d36": "stakeForWithLockup(address,address,uint256,bytes)", +"66e144f9": "Futurescoin()", +"66e159b8": "CreatedNIMFA(address,uint256)", +"66e16aff": "mdbToken()", +"66e1aa99": "assignCertificate(address,string,string,string,string)", +"66e1cebd": "getStakingGains(uint256)", +"66e20b51": "crowdsourcers()", +"66e20e77": "priceNumerator()", +"66e23276": "ADVISERS_SUPPLY()", +"66e264be": "p2Of(uint256)", +"66e305fd": "isEligible(address)", +"66e34dc6": "registerUsername(bytes32)", +"66e3c230": "callLibSet2(uint256)", +"66e3cb68": "upgradedFrom(address)", +"66e3e5e4": "contractTokenBalance(address)", +"66e41cb7": "test2()", +"66e41cd7": "GetTime(uint8)", +"66e4f8c8": "getLastSpinOutput(address)", +"66e5cb50": "stopTransfer(uint256)", +"66e61a31": "outProjectBinding(uint256,address,address)", +"66e65eb1": "checkLocked(address,uint256)", +"66e6c8af": "authorise(address)", +"66e7107e": "SCARABToken()", +"66e722b0": "SecurityToken(string,string,uint256,uint8,address,uint256,uint256,uint8,address,address,address)", +"66e72baa": "transferWithLock(address,uint256,uint256,uint32)", +"66e7ea0f": "incBalance(address,uint256)", +"66e84652": "resetContribution()", +"66e8a4d7": "testGetBonus()", +"66e8cd81": "allBalances(address,address[])", +"66e98c31": "createCoin(string,uint256,uint256,string,string,address)", +"66e99a11": "lxhcoin4()", +"66e9b336": "removeReturnableToken(address)", +"66eb463f": "changeRootAdmin(address)", +"66eb50b2": "startLeaderboard(uint64,uint64,uint64)", +"66eba165": "PlaceBuy(address,address,uint256,uint256,uint256)", +"66ec60c7": "getFineLevelOfUsername(string)", +"66ecc9e2": "require_limited_change(uint256)", +"66eccfbf": "token_batchTransfer(address,address[],uint256[])", +"66ecded4": "setRelativeAddress(address)", +"66eec532": "getSellerFullInfo(address)", +"66f0a3f6": "getTokenRemain()", +"66f1e438": "getMiniPoolEdit_7()", +"66f2d859": "setSellRatio(uint256)", +"66f36b34": "Birth(uint256,string,address,bytes32)", +"66f3882f": "setIcoPhase(uint256,uint256)", +"66f3a2b8": "totalPreBuyers()", +"66f4e1c7": "MAX_GRANTEE_TOKENS_ALLOWED()", +"66f516fe": "changeTimeAndMax(uint256,uint256)", +"66f5f332": "Log1_fnc(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"66f7d730": "WithdrawalEnabled()", +"66f7d9da": "accumulatedHours()", +"66f83e91": "getRandom(address)", +"66f84d30": "setParent(uint256,string)", +"66f8bbe0": "DMarketToken(address,uint256,uint256,uint256,uint256)", +"66f8e86f": "MLQD()", +"66f928d3": "updateShareRuleGroup(uint256,uint256,uint256,uint256,uint256)", +"66f9785a": "EtherShuffle(address[])", +"66f99a11": "setOpenValueGasLimit(uint256)", +"66f9c99e": "setUpgradeAddress(address)", +"66fa2be9": "tickets(bytes4,uint256)", +"66fa6efb": "unverify(address,address)", +"66fb3831": "VALUEBACK()", +"66fbc154": "earlier()", +"66fc0dd7": "walletTeamAdvisors()", +"66fc6937": "lastCharge(address)", +"66fcf285": "distributeMulti(address[],uint256[])", +"66fd3cd8": "commit(bytes)", +"66fd555f": "Comission(address,bytes32,uint256)", +"66fda50b": "removeOracles(uint256,address[])", +"66fe16e9": "emitIssued(address,uint256)", +"66fe25a0": "IcoEndDate()", +"66fe513a": "free_supply()", +"66fe825a": "Gruptecoin()", +"66fea1d4": "setRandomSeed(uint256)", +"66ff8201": "GetChipNum(address,uint32)", +"66ffebb8": "changeHolderPercentage(uint256)", +"67013719": "enableControl(bool)", +"67016c14": "issueTokensToBuyer(uint256)", +"6702416e": "addDoctorTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"67025dcf": "transferAll(address,uint256[])", +"670396e7": "CashToken()", +"6703c429": "ETCReturn(address,uint256)", +"67043001": "isEIP20Token()", +"67043cae": "registerOffChainDonation(address,uint256,uint256,string,bytes32)", +"67061a55": "teamSharePercent()", +"67069544": "issueAssetToAddress(bytes32,uint256,string,string,uint8,bool,address)", +"67069916": "OwnershipTransferCanceled()", +"670733b5": "setBitwordsWithdrawlAddress(address)", +"670744cf": "_createCobeFriend(uint256,uint256,uint256,uint256,address)", +"6707b8aa": "BestEtherSupply()", +"67080f6e": "testThrowsSetEnforceRevisionsNotOwner()", +"67084eb3": "houseBalance()", +"67085633": "getMyGenes()", +"67085dab": "bnCheck()", +"6708cc63": "becomeKing()", +"6708f91d": "Rurchase(address,uint256,uint256)", +"6709b337": "Token(string,string,uint256,bool,bool,string,string,uint256,uint256,uint256,bool)", +"670a1e6f": "getEligibleAmount(address,uint256)", +"670be445": "initialEPXSupply()", +"670c00d0": "getMotPrice(bytes32)", +"670c1500": "CoinCool()", +"670c314e": "TimeFinish()", +"670c3ac2": "priceUpdateTimeline()", +"670c5370": "addCandidateByIndex(uint256,address,string,string)", +"670c884e": "setup(address,uint256,uint256,uint256,address)", +"670ca672": "NTVToken()", +"670d14b2": "keys(address)", +"670da6f8": "getOwnerPetCount(address)", +"670e2e7f": "DatumGenesisToken()", +"670e64c8": "setWhitelistingAgent(address,address,bool)", +"670eedba": "strConcat(string,string,string,string,string,string,string)", +"670f4bd4": "releaseDivTokens()", +"670f8755": "_0xZibitToken()", +"670fe0ff": "TootrTokenSale()", +"6710e801": "_createRabbit(uint256,uint256,uint256,uint256,uint256,address,uint8)", +"6712a67f": "addNodesCache(address[],bytes32[],bytes32[],bytes32[])", +"6712e0be": "tokenGenerationMin()", +"67130e8c": "getWeiOwed(address)", +"6713263d": "crowdsaleTokens()", +"6713640d": "TierStarterDividendAddress(address)", +"6713e230": "isTrusted(address,address)", +"67141690": "getEnabledTokensInformation()", +"67141732": "createContractCity(string)", +"6714cfe2": "GetLuckyGamblers(uint256)", +"6714e027": "deal(uint256[3],uint256,bytes32,bytes32,uint8)", +"671528d4": "isCapped()", +"6716a692": "setDVIP(address)", +"6718484f": "create(uint256,address,string,string)", +"67194bee": "AirdropClaim()", +"67198207": "EARLY_CONTRIBUTION_DURATION()", +"671baae3": "Sepp(uint256,string,uint8,string)", +"671bd594": "setBigPrice(uint256)", +"671bdc3d": "PrimebankCoin(uint256,address)", +"671c7d68": "test02()", +"671d3315": "bookAfternoonVisit(uint256)", +"671d6429": "setTreasurer(address)", +"671dacdc": "CalculateSqrt(uint256)", +"671de554": "mintPreICO(address,address,uint256,uint256,uint256)", +"671e4405": "isFinalize()", +"671ec66c": "setDomainOwner(bytes32,address)", +"671fa0a0": "Inscription(string)", +"67202d40": "fetchAllVotersByIndex(uint256)", +"6720ceb1": "sendPayment()", +"6721ebe2": "airdropThroughput()", +"67220fd7": "adminClaimAirdropMultiple(address[],uint256)", +"67221df0": "isPendingA(address)", +"672324ac": "cashInRate()", +"672350bd": "getFreeExtension(bytes32)", +"6723c20d": "testTrip(uint256[3])", +"6723eab5": "batchCreateETHCardAsset(uint8[],uint256[],uint256[],uint256[],address[])", +"67243482": "airdrop(address[],uint256[])", +"67249254": "mintWithLock(address,uint256,uint256,uint256)", +"672566a0": "Upgradeable()", +"6725bed6": "CCH_RE_2()", +"67268bbc": "removeTransfer(uint256)", +"67272999": "claimETH()", +"672781ed": "priceClaim()", +"6727cc2d": "removeWhiteListAddress(address[])", +"67286a83": "getGoldStatusAuditcount(address)", +"6728b711": "RealAssetToken()", +"672acef0": "participantCapTier2()", +"672c8dca": "ownerTakesAllNotClaimedFunds()", +"672ce152": "HodlBox(uint256)", +"672d2921": "zasxzasxqaq()", +"672e06d0": "withdrawForOneYear()", +"672e20fe": "allocateRemainingTokens(address)", +"672f412c": "setAllowDisbursePaymentWhenPaused(bool)", +"672fcd82": "createBet(uint256,bool)", +"67301dde": "IWWEE()", +"67316b3f": "addWhiteListAddress(address[])", +"67337d1a": "ReporterTokenSale()", +"673441db": "TokenAltPurchase(address,address,uint256,uint256,uint256,string,string)", +"673448dd": "isApproved(address)", +"673478c3": "getAssetIdOwnerIndex(uint256)", +"6735a1cc": "previousStage()", +"67374f3a": "setTargetWallet(address)", +"673756d8": "SOFT_CAP_EUR()", +"6737c877": "setAttributes(bytes)", +"6738426c": "enablesTransfers()", +"67387d6b": "testThrowCreateWithNonceExistingNonce()", +"67389944": "voteB(uint256)", +"67389d17": "SuppliedTo(address,uint256)", +"6739afca": "network()", +"6739f3a4": "getAuctionDuration(uint256)", +"6739fc52": "testOrd()", +"673a2a1f": "getPools()", +"673a456b": "setNumActiveTranscoders(uint256)", +"673a5ae3": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"673a7e28": "updatePrice()", +"673b57e9": "deauthorizeProvider(address)", +"673c0e53": "readAllFrzAcc()", +"673cd98e": "total_amount()", +"673df0e0": "horseMaster()", +"673f3807": "sell(uint256,uint8)", +"673fa8c9": "APaymentToken(uint256)", +"674106d8": "checkDragon(uint256)", +"67412045": "balanceOf(address,uint8)", +"6741629c": "wasEmergencyCancelled()", +"6741953e": "getPOOL_edit_15()", +"674197f8": "getBuyRequestCount()", +"67426ba4": "callgDistributed()", +"67441f52": "LOOMIA1()", +"6744ea49": "GetEscrowTokenSymbol()", +"67457022": "rmul(uint256,uint256)", +"67460c25": "createWikiPage(string,string,string,uint256)", +"67460d58": "setGate(uint256,uint16)", +"67465daf": "StorageExample()", +"6747830d": "calculateRequiredFillingAmount(uint256)", +"6747a33f": "accrualDeposits()", +"6747f09e": "cashOutFallbackAmount()", +"6748a0c6": "releaseFinalizationDate()", +"6748a106": "powLimit()", +"674942eb": "VOTING_PREPARE_TIMESPAN()", +"6749ec48": "issueLicenseNFT(bytes32)", +"674a1574": "claimedIdeas(address)", +"674a62d0": "coinIssuedMkt()", +"674aaa44": "transferToAnotherAddr(address,address,uint256,bytes32)", +"674b3bd5": "originalArtwork(bytes32,address)", +"674c20a1": "test0_firstInterval()", +"674c5eaf": "setReceiver3(address)", +"674c85a7": "mdiv(uint128,uint128)", +"674cc1f5": "getMarketHashes(bytes32[])", +"674d13c8": "totalReservedSupply()", +"674d4691": "_getWeiValueOfTokens(uint256,bool)", +"674e4e0e": "extendUnlockDate(uint256)", +"674ea3cb": "closeAgreement(bytes,uint8[2],bytes32[2],bytes32[2])", +"674ebb3e": "cancelKimAuction(uint256)", +"674ed066": "minQuorumDivisor()", +"674ef6c3": "initializeTier(uint256,address)", +"674f220f": "previousOwner()", +"6751676f": "recentBuyers(uint256)", +"6751ad3d": "_insertAttackLog(uint256,uint256,uint16,uint32,uint8,uint32,bool)", +"67524d62": "setJackpotThreshold(uint256)", +"67532c8e": "sendPurchase()", +"67535a42": "setEthmainAddress(address,address)", +"6753a3c1": "setMajorEvent(string,string,string)", +"6753fc59": "PurchaseAdmin()", +"67541efa": "AlfaCoin()", +"67546967": "EthBtcEscrow()", +"6754ff3a": "addcrontime(address)", +"67550a35": "vox()", +"67551857": "clearAllRequest()", +"675518b8": "mintAndCreatePreIcoBitex(address,address)", +"67558b3a": "AzlanToken()", +"67561d93": "authorizeContract(address)", +"675629fe": "appendOnly()", +"6756b1ae": "GameTable()", +"67571f68": "handlePayouts_(uint256,uint256,uint256,address,address,address)", +"67578f65": "users(bytes20,uint8)", +"67579ad4": "currentwealth()", +"675879d5": "GrantedOrganization(bool)", +"6758aa3f": "requestApproval(string,string)", +"6759fac0": "CatsToken(address)", +"675a1f0f": "batchAddCandidate(address[],bytes32[])", +"675a4633": "dnaMixer()", +"675a54b9": "getHalvingOf(address)", +"675a690c": "setBleachDailyLimit(uint256)", +"675abc96": "corporateSupply()", +"675ac67a": "escrowCount()", +"675b09cd": "Niobium()", +"675c3048": "getTxTimestampPaymentMCW(bytes32)", +"675c9fcd": "setSecretSignerList(address[])", +"675cc788": "getDiplomaOrganizerById(uint256)", +"675cef14": "etherMinimum()", +"675d43cf": "buyPixel(uint16,uint16,uint24)", +"675d9c35": "XRT()", +"675df16f": "updateSubmissionGasPriceLimit(uint256)", +"675ec1cf": "minimalUSD()", +"675f6537": "settleBet(bytes32)", +"675f6d1e": "callBackVariations()", +"675f818e": "disapproveInvestor(address)", +"675f9ad9": "initStages()", +"6760115a": "BuyerFund()", +"67602c59": "burnSequence()", +"67608d38": "ICO_TOKEN_SOFT_CAP()", +"676095b2": "profit2eggs()", +"67630f43": "buyNapkins()", +"6763150e": "setKyberAddress(address)", +"67636574": "consumed()", +"676391d3": "_removeWhitelister(address)", +"6763da56": "dish(string,address)", +"67642794": "_withdraw(address,uint256,bool)", +"676452f4": "t3tokenExchangeRate()", +"6764765d": "burnMyTokens(uint256)", +"67653f3b": "test_threeInvalidEqUint()", +"6765b49b": "getPunishXPA(address)", +"67669e29": "rocketIsLaunched(uint256)", +"6766d1ba": "getTimeUntilStart()", +"6766fafe": "disableTransferWhitelist()", +"676796b6": "releaseFounderCoins()", +"6767e368": "ValueTrader()", +"67682441": "UserUpdate(address,address)", +"6768893c": "AppHub()", +"6769c20b": "setPicture(address,bytes)", +"6769d1f9": "soldToken()", +"6769eb46": "createMasker()", +"676a38d7": "get_current_price()", +"676a675a": "changeJohanNygrensAddress(address)", +"676aa496": "IbnzEtc20TestToken()", +"676b064e": "allForPopulate(uint256)", +"676b57ad": "getNays(uint256)", +"676c0d77": "updateTokenPrice(uint256)", +"676c902f": "drawNumbers()", +"676cb63d": "getMintingFinished()", +"676cdcd6": "BurnExecuted(uint256,address,uint256)", +"676cfec6": "rocks(uint256)", +"676d1d9c": "WEI_TO_COGS()", +"676d20ba": "WorkerToken(uint256,string,uint8,string)", +"676d23a5": "isChangePriceLocked()", +"676d2e62": "migrationMaster()", +"676d7769": "test_curatorDoesNotVeto()", +"676e2eb1": "_addDemoc(bytes32,address,address,bool)", +"676fc32b": "maximumTokensForThird()", +"67701187": "updateFighter(uint256,uint8,uint8,uint8,uint8,uint32,uint64,uint16,uint64,uint16,uint16)", +"6770260e": "ContributionMade(address,uint256)", +"67707337": "CryptocarToken()", +"6770da62": "_stealCardWithSocialIdentity(uint256,uint256)", +"67716abc": "learnFee()", +"677170e1": "_span(address,address)", +"677342ce": "sqrt(uint256)", +"6773b75f": "propertyIndexToApproved(uint256)", +"6774f8e1": "getMonarchyController()", +"67756fe9": "depositPayment(address)", +"6776ddd0": "currentHodler()", +"6776e56a": "validateProposedKingdomName(string)", +"6777d177": "icostarted()", +"6777e4eb": "dollarMultiplier()", +"677885d3": "BITIFEX()", +"677913e9": "setAmount(int32)", +"677978ec": "increaseTokenCap(uint256)", +"6779da43": "setAwardTokens(bool)", +"677a7444": "Votaciones(bytes32)", +"677a7735": "Shares(bytes32,bytes8,uint256,uint256)", +"677a8870": "TeamWallet()", +"677ab197": "processContribution()", +"677ab667": "INITIAL_STARTTIME()", +"677b1f0d": "_buyTokensFromSystem(uint256)", +"677ba3d3": "onTokenTransfer(address,address,uint256)", +"677bcb89": "regularMinPerPerson()", +"677c102d": "getHostOrders(address,address)", +"677cee54": "SafeConditionalHFTransfer()", +"677e2dc4": "setDailyPrice(uint256)", +"677e2ef2": "getReplyFee(uint256)", +"677e6fa4": "betOnColumn(uint256)", +"677ebf2c": "InvestmentAsset(address,address,address,string,string,uint256,uint256,uint256,address)", +"677f768d": "isOnTrading(uint256)", +"677ffb0d": "exerciseLong(address[2],uint256[8],uint8,bytes32[2])", +"6780a311": "transferStop()", +"6780b32e": "moveAccount(bytes32)", +"67814109": "_mintTimelocked(address,uint256,uint256)", +"6781cc04": "addPolicy(uint8,uint256[],uint8[])", +"678212d9": "tokensAuctioned()", +"67821686": "setETHUSDRate(uint256)", +"67823a4a": "limitDateCrowdWeek2()", +"678365ca": "RHEMA()", +"678377d2": "core(address,uint256,address)", +"67845835": "Irapid()", +"67845daf": "claimTokensERC777(address,address,address,uint256,uint256,bytes,uint8,bytes32,bytes32)", +"67848d9c": "PayEther(address,uint256,uint256)", +"6784b075": "removeValidContract(address)", +"6784ccb7": "Deceum()", +"67854643": "getGenerationMemberLength(uint256)", +"6785744d": "phase1Price()", +"6785a8f6": "getCandidateIndexArray()", +"6785b500": "getChannelsAddresses()", +"67863c07": "earlybird()", +"6786ed0e": "setPriceRate(uint256)", +"6787416d": "NRM()", +"6788317a": "UnitySale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"678886b4": "updateTokens2PerEth(uint256)", +"678892c0": "rand_num()", +"67899248": "processKick()", +"678a1013": "monsterNFT()", +"678a6baf": "ROUND_3_PRESALE_BONUS()", +"678a7dca": "setShareFee(uint8)", +"678ae6a1": "updatePools(bytes32,uint256)", +"678bbf24": "getEarningsAmountByGoodsIndex(uint256)", +"678d2204": "shouldFail()", +"678d6eff": "createFuel(uint256)", +"678d9758": "setTile(uint256,string,string,uint256)", +"678dd961": "getProviderClosed(uint256)", +"678ee795": "ComputationService()", +"678f4467": "allocateTokenForTeam(address,uint256)", +"678f7033": "set_percent_reduction(uint256)", +"679019ba": "freezeDeliverMultiStandalone(address[],uint256[],uint256[],uint256,uint256)", +"67907404": "recruitNarco(uint256,string,string)", +"6790d2b5": "getRoomInfo(uint256)", +"6790f3fe": "getAccumulatedDistributionPercentage()", +"67923240": "hatchsubscribers(address)", +"6793c8e1": "currentMilestone(uint256)", +"6793d383": "registryContractAddress()", +"67946ea4": "getIdMax()", +"67955ffa": "maxGIRL()", +"679577a5": "getEmployerFeedbackOn(address,uint256)", +"6795dbcd": "getAddress(bytes32,string)", +"67975213": "AddSWAndClaim(string,string,bytes32,bytes32,bytes32,string,bytes32,bytes32,address,uint32)", +"6797b106": "strikePricePctX10()", +"6799c0e0": "vpe_per_Keos()", +"6799d737": "releaseForEcosystem()", +"679a7a46": "WhoisOwner()", +"679aefce": "getRate()", +"679b4567": "preicoStartDate()", +"679b948b": "switchSplitBonusValue(address,bool)", +"679b9935": "setLeagueRosterContractAddress(address,address)", +"679c0d40": "invariantBroken()", +"679d0ecb": "getMetForEthResult(uint256)", +"679d38e0": "selfdestruct()", +"679dffb4": "getProfit()", +"679e1149": "AcoraidaMonicaWantsToKnowTheNewAnswerHash(bytes32)", +"679e5977": "EventRemoveAdmin(address,address)", +"679ebf1a": "transferTicket(uint256,address)", +"679f4d63": "CEEDCOIN()", +"679f699e": "EOSERC20(uint256,string,string)", +"679fecd6": "refillArray(address[],uint256[])", +"67a09c23": "payment(address,uint256)", +"67a0a550": "_cancelOrderWithMerchant(string,address)", +"67a19b20": "withdrawEthMaker(uint256,address)", +"67a1b7dd": "addTicket(uint256,uint256,uint256)", +"67a1bd55": "withdrawStuck()", +"67a1d653": "YOO_UNIT()", +"67a1f526": "curatorWrite(uint256,bytes32[])", +"67a2072c": "setEtherHolder(address)", +"67a2534b": "test(address[5])", +"67a26cbc": "DuqueBrewingCompany()", +"67a27811": "BonusGranted(address,uint256)", +"67a3eb65": "totalHardCap()", +"67a449b8": "getLastRoundData()", +"67a4e7c4": "isDecentBetToken()", +"67a52fdb": "purchaseGold()", +"67a59d91": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8)", +"67a5cd06": "drip(address)", +"67a6ae62": "TOKEN_RATE_25_PERCENT_BONUS()", +"67a7390d": "fundTransferred()", +"67a7804b": "influenceByToken(uint256)", +"67a884e5": "latestBidder()", +"67a88f78": "createBitcoinAddressPrefixTask(bytes,uint256,int256,uint256,int256,address)", +"67a9c971": "tgrSettingsAmount()", +"67aa23e2": "getTicketsByOwner(address)", +"67aa50ae": "updateBrokerVerifierContract(address)", +"67aa863f": "setXto2()", +"67ab263a": "thisIsTheEnd(address)", +"67ab4381": "UnConf(string,address)", +"67ab5486": "GET_MAX_UINT256()", +"67aba225": "sellableToken()", +"67acd805": "lowerMinWager(uint256)", +"67ae9e8f": "hybridizationList(uint256)", +"67aea7d5": "buffs(uint256,uint8)", +"67af1c81": "getRoundIndex()", +"67af1cff": "ethRec(uint256,uint256)", +"67af26fb": "transferOtherFrom(address,address,address,uint256)", +"67aff484": "setUserRole(address,uint8,bool)", +"67aff919": "autoreleaseInterval()", +"67b07d48": "entangleQuanticCloudIOTData(uint256)", +"67b0e070": "FaceTech()", +"67b14a21": "getProposal(uint16,uint16)", +"67b16407": "buyCup()", +"67b16cd6": "getRealRndMaxTime(uint256)", +"67b172c9": "Bloxxor(address,address,address,uint256,uint256,uint256)", +"67b1f5df": "setExchange(address)", +"67b21506": "claimTokenReserveDevelop()", +"67b220a5": "unblock(address)", +"67b26cab": "getLastMaxInvestments()", +"67b327fa": "proposeMilestones(bytes)", +"67b40639": "Dain()", +"67b50af9": "gasAmount()", +"67b5496a": "loseWager(uint256)", +"67b55bf9": "getClickMetadata(uint256)", +"67b65656": "setStateStartTime(bytes32,uint256)", +"67b78d00": "fromHexChar(bytes1)", +"67b7a4aa": "START_PRICE_IN_CENTS()", +"67b7c034": "on()", +"67b7d525": "getBlockPointer()", +"67b830ad": "fillOrder(uint256)", +"67b886e8": "left97(uint256)", +"67bb474f": "allowBundling()", +"67bb6d63": "maxWiteList()", +"67bc480e": "MYSTERYCLASSICCOIN()", +"67bd15e3": "contractInitializationTime()", +"67bd69a6": "getLastDuel2()", +"67be0854": "partyHash(address,address,address,address)", +"67be5eac": "claimLeftTokens()", +"67be97a5": "BYToken()", +"67bea493": "whitelistedPools(address)", +"67beaccb": "scheduleCall(bytes)", +"67bfc445": "AddNewChallenge(uint256,uint256,uint256,uint256,uint256,bool,string)", +"67c1fb11": "christmasStocking()", +"67c21fe5": "setFiscalVerify(uint256,bytes32)", +"67c25a14": "TeamCreated(uint256,uint256[])", +"67c281a9": "validateContentHash(address,uint256,bytes32)", +"67c2a360": "authorizeUser(address)", +"67c33c80": "getInt8FromByte(bytes14,uint256)", +"67c353b3": "LKCTotalSupply()", +"67c36757": "IranToken()", +"67c3a6d9": "Khatamor()", +"67c3ad8e": "burnStake(uint256,address)", +"67c3e25e": "revokeAccessDeploy(address,address)", +"67c45872": "ZzStandardToken(uint256,string,uint8,string)", +"67c51be7": "viewTokensSold()", +"67c5d6b1": "multihash(bytes32,string)", +"67c623cf": "getTokenMetaData(uint256)", +"67c6389e": "refreshlockedBalances(address,bool)", +"67c6e39c": "convert(address,uint256)", +"67c7f3a8": "setBwValidCaller(address)", +"67c84919": "issueByPartition(bytes32,address,uint256,bytes)", +"67c9b017": "getEthPrice()", +"67c9d266": "freezeUntil(address,bool)", +"67ca1fdf": "market_communityStorageVault()", +"67ca2298": "updateTokenName(uint256,string)", +"67cab29d": "testGetAbiVersion()", +"67cb103a": "PartnerUrl()", +"67cb61b6": "getChoice()", +"67cb9316": "get_header(uint256)", +"67cc4882": "TokenHolder()", +"67cd3f64": "UNLOCKSTART()", +"67cd5323": "PUBLIC_SALES_SPECIAL_USERS_RATE()", +"67cd64dc": "LENDXCOIN()", +"67cdbe8f": "newShip(uint16,uint256,uint256)", +"67cdc1c2": "percentageToTeamEthContract()", +"67ce38fb": "Vertex_Token(uint256,address)", +"67ce940d": "getOverhead()", +"67cf17c2": "transferPrimordialTokenFrom(address,address,uint256)", +"67cf7d9c": "createTeamTokens()", +"67cf91c9": "lastKickoffDate()", +"67cfdfc9": "getBrokerIncoming(address)", +"67d0661d": "doPause()", +"67d13f27": "receiveFromVendor(address,bytes32)", +"67d15775": "PromToken()", +"67d198cc": "getVaultsRoot()", +"67d22967": "set_iconiq_pre_kyc_bonus_numerator(uint256)", +"67d326ef": "finalizeFundAddress(address)", +"67d3d0ec": "changeEthBalance(address,uint256)", +"67d3eff4": "setTeamWallet(address,address)", +"67d41253": "secondCheckpoint()", +"67d42a8b": "release(bytes32)", +"67d49909": "secondWinnerTimestamp()", +"67d4e98c": "RemoveShare(address,uint256,uint256)", +"67d4f541": "window1TotalSupply()", +"67d520bb": "deployWill(uint256)", +"67d5fae1": "getPremiumCount()", +"67d6bcbf": "distributeBonusTokens(address)", +"67d6d142": "getPI_edit_19()", +"67d96c24": "compensatePreSaleInvestors(address[])", +"67da2831": "revealHiddenPosition(uint32,int64,bytes16)", +"67da299b": "mcrAmmountForGas()", +"67da7b7a": "LabCoin(uint256)", +"67dbaf93": "updateValueAndBurn(uint256,uint256)", +"67dbf587": "Bridge(uint256,uint256,address,address)", +"67dcec06": "WealthInternet(uint256)", +"67dd1730": "destPrecision(address)", +"67dd74ca": "buyTicket(uint256)", +"67dd7bb4": "tradingLocked()", +"67de698d": "adjustCap()", +"67de80db": "createMultiple(uint256[],uint256[],uint256[],address[],uint8[])", +"67de81e8": "fundSucceeded()", +"67deced2": "checkIn(uint256,string)", +"67df1187": "buysubscribers()", +"67df5189": "archiveCrowdsale(uint256)", +"67dfe2d3": "addEthForSell()", +"67e04a22": "initInviteAddr(address,uint256)", +"67e06858": "Add()", +"67e0badb": "getNum()", +"67e0d78f": "sendFundHomeAmt(uint256)", +"67e13ee0": "getDeveloper(address)", +"67e1aee9": "setStage1()", +"67e1c253": "getMyInviteCode()", +"67e22888": "bigMoney()", +"67e2a647": "createAwardTokens()", +"67e2d2ad": "wireInvestment(address,uint256,uint256)", +"67e33df5": "SwftCoin(uint256,string,uint8,string)", +"67e404ce": "sender()", +"67e4373f": "CARIToken()", +"67e43e43": "gsf()", +"67e445d9": "FOMO()", +"67e476d7": "getPublicSaleInfo(address)", +"67e4ac2c": "getAssets()", +"67e4d41d": "ProdAToken()", +"67e523bb": "iPeso()", +"67e53196": "getAuthByCode(string)", +"67e54367": "battleContractAddress()", +"67e5f18c": "getCurrentTierRatePercentage()", +"67e6869d": "Withdraw_4()", +"67e6bc2e": "hash(string,uint256,uint256,uint256)", +"67e6bf06": "testPresaleRefund()", +"67e70e99": "setselfrdroplist(address[])", +"67e7646f": "removeDelegate(address)", +"67e817f4": "XOV()", +"67e828bf": "source()", +"67e874c0": "testMeta(uint256)", +"67e8cd0f": "bidOf(bytes32,uint256)", +"67e8d3d2": "bonus2()", +"67e8f6e1": "_multipleTransfer(address,address[],uint256[])", +"67e8f90c": "heightAt(uint256)", +"67e902c7": "right92(uint256)", +"67e902d9": "ListingBought(uint256,uint256,uint256,address)", +"67e933f6": "checkCustomer(address,address)", +"67e94ae0": "listingFeeInWei()", +"67e988e7": "bountyAvailabilityTime()", +"67e9b860": "CreateSwap(uint256,uint256,bool,address)", +"67ea2fa0": "tasksSize()", +"67ea43bd": "producedBronzeCaps()", +"67eae672": "sendCoinFrom(address,uint256,address)", +"67eb5fbe": "_train(uint256,uint256,uint256,uint256)", +"67eb9bab": "createIssuerContract(string,string,string,uint256,uint256)", +"67ec00c0": "depositFrom(string,address,uint256)", +"67ec68c4": "winningNumbersFor(uint256)", +"67ecb82d": "transferAndLock(address,uint256,uint256,uint256,uint256)", +"67eccc12": "founderTokenWithdrawnPhase2()", +"67ed583f": "addPresaleHolder(address)", +"67edad0a": "preSaleSecondEtherCap()", +"67ee5f09": "getTotalDividends()", +"67eeba0c": "dailyLimit()", +"67ef5a37": "debugStuff()", +"67ef5cb9": "setPrice(uint32,uint32)", +"67efbab1": "changeAssignedAdmin(address,uint256,string)", +"67f01c04": "ETH(uint256)", +"67f04688": "LIMIT_TRANSFERS_PERIOD()", +"67f06f78": "_checkPixelAboveRight(uint256)", +"67f12ecf": "validate(address,uint256,uint256[101][])", +"67f17405": "majorEvent(bytes32,bytes,uint256)", +"67f239dd": "entry()", +"67f4224f": "eventPause(bool)", +"67f690b5": "hasRequestedForMigration()", +"67f6a258": "verifyCert(bytes32,bytes32,address)", +"67f718a9": "getTokenIds()", +"67f76863": "EnishiCoin(address[])", +"67f809e9": "DynamicPyramid()", +"67f83481": "isFounderUser()", +"67f8a8b8": "emergencyRefund(address,uint256)", +"67f8ca42": "usingCanvasBoundaries()", +"67f8df84": "playerId(uint256)", +"67fad28d": "RCLTOKEN(uint256,string,string)", +"67fbb7ba": "ownerAddSanSlotBatch(address[],uint256[])", +"67fbd289": "destroyTokens(uint256)", +"67fc1c6a": "validateProposedMonarchName(string)", +"67fd9da3": "multicastTransfer(address[],uint256[],uint256[])", +"67fdc2fe": "CricketToken()", +"67fdd509": "setIdRange(uint256,uint256)", +"67fdff26": "REQUIRED()", +"67fe5a0c": "accepted()", +"67fe6b47": "contractIsCompleted(string)", +"67fe6f0e": "checkOverExceed(address)", +"68014cec": "participantExists(address)", +"68019d75": "COCTokenBase(uint256,string,string,uint8)", +"6801db98": "devoteToCar(string)", +"6802c8a1": "FreeCoin()", +"6802ff77": "seedSupply_()", +"6803641c": "claimAllTokensForInvestor(address)", +"680478b1": "offerAsSacrifice(address)", +"68049361": "teamWallet_4()", +"6805b84b": "getPaused()", +"680660d4": "bulkAddCompany(address[],uint256[])", +"6806fdce": "assignGenesisAddresses(address[])", +"6807b84d": "Timebound(uint256,uint256,bytes32)", +"6807f752": "deleteBuyRequestInternal(uint256)", +"680819eb": "setRate(bytes32,uint256)", +"680a50cb": "shortenDeadline(uint256)", +"680add7b": "preSoldSharesDistributed()", +"680b0c5c": "tresholds(uint256)", +"680b3bdf": "migrateAll(address[])", +"680b5eba": "setHouseAddressTwo(address)", +"680b9d49": "getStakedAddresses()", +"680bd2f4": "RiseCoinToken()", +"680c26bc": "ATP(address,address)", +"680caed2": "Contract(address)", +"680def61": "market2019TokenCreated()", +"680e354a": "setSaleWindow(uint256,uint256)", +"680e6c9b": "receiveTokens()", +"680eba27": "GEN0_CREATION_LIMIT()", +"680f07b4": "getinitializeFeeWindowIdValue()", +"680f0938": "pay_dividend(string)", +"680f0eda": "set_harvest_amount(uint256)", +"680fb685": "OpenClose(bool)", +"6810e139": "shopSack()", +"68111cce": "getProduct(string)", +"6811444a": "getLastComment(address)", +"68116177": "getbalance(address)", +"681185ab": "_extractRawResource(address,uint256,bytes)", +"68118e95": "numberOfBlocksToEndLimitationPeriod()", +"6811c332": "distributeTeamTokens(address,uint256)", +"681232ad": "cosigner()", +"68125a1b": "isFriend(address)", +"681312f5": "setRoundLength(uint256)", +"6813947f": "contributionOf(uint256,address)", +"681478ab": "LegacyRepToken(address,uint256,address)", +"68155ec1": "transferTokens(address,address,address,uint256)", +"6815c19c": "DropdCoin()", +"6815c992": "grantPermissionP(address,address,bytes32,uint256[])", +"681617c7": "changeEscapeCaller(address)", +"68163034": "defaultTimeoutLength()", +"6816521a": "teamAllocation()", +"6816d920": "guaranteedBuyersLimit()", +"6816fcd6": "evMgmtDistributed(address,uint256,uint256,bool)", +"6817031b": "setVault(address)", +"68171516": "assetMethodIsAllowed(address,bytes4)", +"68173bcf": "deactivateToken(address)", +"68177733": "MixinToken()", +"6817c76c": "mintPrice()", +"681833d9": "bindAddr(address,bytes)", +"6818da44": "setPlatformManager(address)", +"68197360": "getVotes(uint256,address)", +"681b23dd": "senderETH()", +"681b3314": "get_pre_kyc_iconiq_bonus_numerator()", +"681b5651": "setEthToUSDRate(uint256)", +"681b742f": "changeFund(address)", +"681c2ad0": "getTknOfferPrice(uint256)", +"681c3251": "addTotalSuply(uint256)", +"681c7808": "setMinTime(uint40)", +"681c7e2b": "VAAToken()", +"681cb449": "VIcoin()", +"681ce98a": "getNextPrice()", +"681d52de": "tokenImporter()", +"681d8345": "getATMTotalSupply()", +"681e237d": "CommonToken()", +"681e3356": "transferBankOwnership(address)", +"681f01f2": "IsICOOver()", +"681f3e6d": "getUsername()", +"681f6486": "SimpleBid(address,uint256,uint256)", +"681f8116": "makeTradeable(uint8)", +"681fd129": "addInvestContract(address)", +"681fe70c": "isEmpty()", +"68203417": "thirdStage()", +"6820f8d2": "setOneContract(uint256)", +"68213256": "crr()", +"68216ca7": "addNewBranchInEpisode(uint256,uint256)", +"6821928b": "AddAuthority(address)", +"6822abae": "getMinimumCallCost(uint256)", +"68234a27": "getTransactionDescription(uint256)", +"68240412": "calculateWeiForStage(int256)", +"68250963": "preICODeadline()", +"682594db": "totalAllowedFreeze()", +"68259880": "ChangeOfRules(uint256,uint256,address)", +"6825c843": "_address(uint256)", +"682677e8": "TunDrMahathirMohammad()", +"6826ebf8": "r(bytes)", +"6827b9db": "getMonsterGender()", +"6827e764": "devFee()", +"682806a0": "ICOContract()", +"68281708": "restrict(address)", +"68283f4d": "claimBets()", +"6828d549": "rejectContribution(bytes32)", +"68296073": "setSnowflakeAddress(address,address)", +"682a5e89": "returnDuration(uint256)", +"682a90d2": "Store(bool,uint256)", +"682a9449": "setCustomerService(address,address,bool)", +"682ab756": "LogItemRegistered(address,uint256,uint256,bytes32,bytes32,bytes32)", +"682b6706": "___Kill()", +"682b7100": "deleteRoom(uint256)", +"682baa3a": "HATCH_COOLDOWN()", +"682bc77e": "setStarterPackOnSale(bool)", +"682bea5c": "setCallTable(uint256,uint256)", +"682d1138": "failExecute()", +"682d3bb0": "pdfCertificateProof(bytes)", +"682e1bb0": "isSTOProposed()", +"682e60a9": "presses()", +"682ed9ea": "sanMaxAmount()", +"682f3d36": "OrderMatch(address,int256,address,int256,uint256,uint256)", +"68302467": "paySeller(uint256)", +"68306e43": "dividends(address)", +"6830cdc4": "getJobCount(address)", +"6831c169": "totalPayedOut()", +"6831e272": "mintTokens(address,uint256,uint256)", +"683328bf": "takePet(uint64)", +"6833716f": "ProofShrimpFarmer(address)", +"6833d54f": "contains(string)", +"6833f60d": "triggerPause()", +"68342b33": "ownerInfoOf(uint256)", +"683431e2": "SelfDesctruction()", +"68347fdf": "ICO_MIN_DEPOSIT()", +"68348dfe": "_newGame(bytes32)", +"6835df3e": "SFT_PER_ETH_BASE_RATE()", +"6835f32c": "build(bytes)", +"68365eb7": "NewProject(address)", +"683674dc": "disconnectOrderUser(address,address,uint256,address)", +"683799e6": "setMaximumPurchaseFraction(uint256)", +"6837ff1e": "newContract(address)", +"68381874": "Trade(address,uint256,address,uint256,address,address,bytes32)", +"68381b96": "getHighestUnitPriceIdxFromSell()", +"68388b80": "banAccounts(address[])", +"6838e7c5": "PrinzeToken()", +"68393a4c": "getBonusByTime(uint256)", +"683a6858": "Recoverable()", +"683ad727": "getDeed(uint256)", +"683b4184": "inflation_complete()", +"683cde49": "upgradeBalanceOf(address)", +"683cecc2": "addressFunc(address)", +"683d4a4b": "minWithdrawalCoolingPeriod()", +"683d69e4": "checkEligibility(bytes32,address,address)", +"683de015": "switchUpgradable(bool)", +"683e0bcd": "ethPriceInUsd()", +"683e2929": "getPSlotLength(address)", +"683e3451": "CioCoinERC20Token(uint256,string,string,uint256)", +"683e70b6": "createWhaleTokens(address,uint256)", +"683f7f27": "removeParticipant(uint256)", +"68402460": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256)", +"68404cd9": "setValueSome(uint256,uint256)", +"6840721d": "searchReport(string)", +"6840c67d": "vestPartnerEquityReserve()", +"6840f8e8": "returnEth(address,uint256)", +"68412058": "getRank06()", +"68412063": "distributeTokens(address,uint256,uint64,uint64,bool,bool)", +"6841f253": "currentRoundLocked()", +"6841fd27": "remining(uint256)", +"68428a1b": "saleActive()", +"68437b58": "bet_purchased(address)", +"6843aef9": "increaseLockReward(uint256)", +"68445ce1": "insertNodeBefore(uint256,uint256,address)", +"68447a55": "fetchFunds()", +"68447c93": "referrer()", +"6844ab43": "testControlCreateSameItemId()", +"68458fcf": "assignInitialAddresses(address[],address)", +"6845950f": "getScriptActionsCount(bytes)", +"6846187f": "farmItems(address[],uint256[])", +"684641b4": "cumulativeInverse(uint256,uint256,uint256)", +"684649a6": "createProxy()", +"6846fe64": "_sellCallToClose(uint256,uint256,uint256,uint256,address)", +"684876a1": "migratePlayerRoundsData(uint256,uint256,uint256,uint256,uint256)", +"6849cb9d": "transferIssuer(address)", +"684b369e": "everisumToken()", +"684b49f5": "PriIcoSale2(address,uint256,uint256,address,address)", +"684bd9d6": "getRemainCount(address)", +"684d63bf": "mintAuditApproval()", +"684d9a04": "quarterSecond()", +"684e2345": "AishaCoin()", +"684ecd59": "getData_9()", +"684edea8": "ponziPriceInWei()", +"684efc40": "TravelNationCoin(uint256,string,uint8,string)", +"684f19c9": "WorldCupFactory(uint256)", +"684fa447": "AppAdded(address,string,address,uint256,bool)", +"684fbfdb": "sinLimited(int256,int216)", +"68503cdf": "getAvailableBalanceByAddress(address,address)", +"68504158": "toggleTransfers(bool)", +"68507757": "faucetBB0()", +"6850fa6d": "onoff()", +"6853367f": "withdrawDevelopersCut()", +"68533a1d": "closeUndercollaterizedPosition()", +"68536341": "ratePerOneEther()", +"6853920e": "removeRole(address,bytes32)", +"6853e3a4": "setToKnown(address)", +"685485fb": "eth_sent()", +"6854df55": "scannedDiamondCaps()", +"6854f668": "buyDragoOnBehalf(address)", +"6855ded3": "WHITELIST_END_DATE()", +"685705ae": "getWeiValue()", +"68573107": "batchMint(address[],uint256[])", +"6857ab40": "seq()", +"6857cb06": "manualTransfer(address,uint256)", +"68581ebd": "getJobs()", +"68583bc0": "FC1Token()", +"68586e57": "setPet(uint8,address,string,uint8,uint16,uint16,uint16)", +"6859274b": "checkMembership(bytes32,uint64,bytes)", +"6859d08f": "addToActiveGroup(address)", +"6859dc10": "rejectRequest(address,uint256)", +"685a73e0": "claimHodlRewardsFor(address[])", +"685adf5e": "ALDEToken(uint256,string,uint8,string)", +"685ae2a9": "itoEndTime()", +"685b2d8f": "transferPermissions(address)", +"685b47c7": "updatePresaleNumbers()", +"685c234a": "checkAuthorization(address,address)", +"685c60de": "transferERC23(address,uint256,bytes)", +"685ca194": "withdrawalAllowed(address)", +"685d1135": "recyclingRemainToken()", +"685e2486": "migration(address)", +"685e78fb": "SecondPriceAuction(address,address,address,address,address,uint256,uint256)", +"685ffd83": "registerNameXname(string,bytes32,bool)", +"6860dc1f": "isRefAvailable()", +"6860fd58": "Fees(uint256)", +"686174ec": "QQQTokenBase()", +"6861d3b8": "firstStageStartsAt()", +"68621711": "assetMeta()", +"68624bd7": "lockedValueOf(address)", +"68639a29": "setActivation(address)", +"6863d3c7": "CreatedIRC(address,uint256)", +"68649c8a": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint8[3][4])", +"68654ef8": "bonusBalanceOf(address)", +"68660b93": "updateDonateTokenAddress(address,uint256)", +"68664430": "supplyDAICO()", +"6866537d": "getCardPrice(uint256)", +"6866566a": "Priced(uint256)", +"6866d144": "_tokenPrice(uint256)", +"6866da59": "_lockOrUnlockAmount(uint24,uint256,uint256,uint256,uint256,uint256,uint8)", +"686790e5": "freezeSignatureChecker()", +"6867edeb": "getBuyOrderPrices()", +"68690dd0": "NeedRefresh(uint256)", +"68699224": "offlineAdjust(uint256,uint256)", +"6869b20e": "saveToken(uint256)", +"6869fb30": "maxWeiTier0()", +"686b2812": "addWhitelistUsers(address[])", +"686b88cd": "calculateWinnerGameType1(uint256,uint256)", +"686caf04": "lastBlock_a1()", +"686d2d5c": "getCurrentBonusPct(uint256)", +"686d5e00": "unRegisterCampaign(uint256)", +"686da8ab": "UpdateRecord(uint256,address,uint256,bool)", +"686e2284": "isCosmosSale()", +"686e8aaa": "GetMoney()", +"686f21ba": "gainKarma(int256)", +"686f2c90": "collectAllFees()", +"686f4564": "redeemedCards()", +"686fa3f7": "getGameId(address,string,string,uint16,uint64)", +"68700891": "RLPReaderTest()", +"6870c65a": "InitialRateChange(uint256,uint256,uint256)", +"6870ef86": "getCurrentTokenFee()", +"68715a75": "GCCHToken()", +"68716e7a": "EutinMokoToken()", +"6871819b": "getUserCollegeEducationDetails(string)", +"6871d26b": "addMeterPoint(int256,address,int256)", +"6872e300": "COPPER_AMOUNT_SKL()", +"68742da6": "withdrawFunds(address)", +"68750bbc": "sendReserveTokens()", +"6875b6eb": "changeRestrictions()", +"6875b746": "updateRelease(uint256)", +"6875c319": "escalateDisputeToMediator(uint256)", +"687711ec": "s25(bytes1)", +"6877dca7": "Token1_Transfer(address,address,uint256)", +"68784493": "votesUser(address,uint256)", +"68788868": "decodedAmount()", +"6878ac7d": "applicableRate()", +"68794b87": "setState(string)", +"687981ac": "getValidatorIndex(uint64,address)", +"687a46c4": "upgradeQualificationByEther(uint256)", +"687a48a1": "getBurnedCarCount()", +"687bf382": "_useName(address,bytes32)", +"687c317c": "setTokensUsedForReinvestment(uint256)", +"687cc2fd": "preSaleTokensAvailable()", +"687cde1a": "tokenSelled()", +"687d493c": "EverOwnedTokens(address)", +"687d5aa9": "setBuyAllowed(bool)", +"687db864": "END_ICO_TIMESTAMP()", +"687e6b5f": "MavenCoin()", +"687e6f44": "withdrawEthers()", +"687f8427": "devCATDestination()", +"68802712": "get_hedge()", +"688057fc": "registerWalletForFeeSharing(address)", +"68808769": "backers(address,uint256)", +"6880ff5b": "secondReserveWallet()", +"6881385b": "payday()", +"6881f6f1": "minTradingStartTime()", +"688225d6": "onemonth()", +"688257e0": "SmartContractWorkshop(string)", +"688263d7": "largestPenisOwner()", +"6882d481": "priceStar4()", +"68832d14": "___proxyTarget()", +"6883477f": "canBePurchasedByEMONT(uint16)", +"688507e1": "SellEgg()", +"688511bb": "timeoutBlock()", +"688521b4": "coinsIssuedTotal()", +"6885c572": "allowByDelegate(bytes8,bytes8)", +"6885edcd": "desiredPrice(uint256)", +"6885f63b": "TrustToken()", +"6886bf1c": "mostSent()", +"6886ce25": "ForkEthereum()", +"68873375": "CBRToken(uint256,string,string)", +"6887398d": "getContestTeamCount(uint32)", +"68879e5f": "RecoverySha3(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"68882b30": "buyCrab(uint256)", +"68888300": "updateAngelCardSeries(uint8)", +"68889db8": "setFreezingPeriod(address,bool,uint256)", +"68894a16": "changeMaxContribution(uint256)", +"68895979": "getUint256()", +"6889cf86": "icoOver5()", +"6889d646": "transferMoneyToOwner()", +"688a54dc": "ATxAsset()", +"688a7044": "CryptoRoulette()", +"688abbf7": "myDividends(bool)", +"688af37f": "QRL_Token()", +"688b410f": "sendTokenUpdate(address,uint256)", +"688b5c2b": "isMiningWarContract()", +"688ba636": "walletTeam()", +"688bf035": "calculateUSDcValue(uint256)", +"688cdba8": "ownerRate()", +"688cf404": "setAyantDroitEconomique_Compte_4(uint256)", +"688d3922": "isHardCapReached()", +"688d54b7": "getLLV_edit_34()", +"688dcfd7": "setProofType(bytes1)", +"688def07": "MMOToken()", +"688e69d8": "ownerPowerUpContract()", +"688f5ed2": "gracePeriodAfterRound1Target()", +"688fad5d": "updateIdentitySocialURL(address,bytes32)", +"68907360": "setRewardsContractHash(address,bytes32)", +"68915c14": "seedInvestors()", +"6891656e": "buyWithCustomerId(address,uint256,uint256,uint128,uint256,bool)", +"68927cd2": "isValidBNBContribution()", +"68931b21": "getTotalBooks()", +"68934e54": "approveBurnDelegate(address)", +"6893cc22": "toUint(bytes32)", +"6893e8d2": "_setLimits(uint256,uint256)", +"6893f63f": "getTokensPerEth()", +"689490a0": "whitelistedAddresses()", +"6895179d": "testToken()", +"68955fb1": "icoPhase()", +"6895adbb": "_addModule(address,bytes,uint256,uint256)", +"68963dee": "ICOMinTresholdReached(uint256)", +"68968564": "SaveYouAndMeToken()", +"6896a342": "ADVISOR_STAKE_ONE()", +"6896b999": "xConvertPrioritized(address[],uint256,uint256,bytes32,bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"6896ef4b": "currentRoundIndex()", +"6896fabf": "getAccountBalance()", +"68970ab4": "Created(address,address,uint256,bool,uint256,string)", +"689786d0": "test_oneValidEqBytes32Message()", +"6897a1a2": "startingCostToPress()", +"6897c1b6": "PrepareToStart(string,uint256,uint256,uint256,address,address)", +"6897e974": "removeWhitelistAdmin(address)", +"689827b0": "modInverse(int256,int256)", +"6898730f": "eip20Transfer(address,address,uint256)", +"6898f148": "beforeSale()", +"6898f82b": "play(uint256)", +"68999d76": "exportTank(address,uint32)", +"6899d8c2": "recoverAll()", +"6899dac5": "finishVotingTeam(uint256)", +"689a4608": "Test20()", +"689a521d": "changeContractState(bool)", +"689b2d24": "AcceptsElyxr(address)", +"689b3e2d": "Moonraker(address,address)", +"689b732c": "FundValue(uint256,uint256,uint256,uint256)", +"689da08e": "dad()", +"689dcb02": "Buyin(address,uint256,uint256)", +"689e87c1": "GIRLBUFFERSIZE()", +"689effad": "BookingTimeUtils(address)", +"689f2456": "partial_refund()", +"689f3f99": "unclaimedPlotPrice()", +"689ffd82": "addressSalesSupply()", +"68a1e07f": "_currencyToToken(bytes,bytes)", +"68a287d8": "getTeamVault(address)", +"68a29a31": "balanceEthPrivate(address)", +"68a52509": "getLastOrderId()", +"68a52851": "setTokensContract(address)", +"68a596c7": "ownerToTokenIds(address,uint256)", +"68a59805": "setPayoutDistributionHash(bytes32)", +"68a67030": "finalizeSale1()", +"68a6b26b": "setWeiRaisedInPresale(uint256)", +"68a6e74b": "preICO()", +"68a72fba": "crowdTarget()", +"68a7d7ea": "setAgriChainData(address)", +"68a7e1c4": "setDelegadoDeEscuela(bytes32)", +"68a7effc": "getOrCreateCurrentFeeWindow()", +"68a7f6d6": "playerFastFlight(uint256,uint16)", +"68a8659d": "SellOrdersOf(address,uint256)", +"68a8c5eb": "WyvernDAOProxy()", +"68a958bc": "payrollSystem()", +"68a9674d": "depositFrom(address,address,uint256)", +"68a9de13": "changeEndtime(uint256)", +"68a9f31c": "secondOwner()", +"68aafcd9": "setUsageReportingAddress(address)", +"68ab3db2": "createDefaultGen0EtherDog(uint256,address,uint256,uint256)", +"68ab56ca": "get_bounty_count(uint256)", +"68abf22b": "BAC(uint256)", +"68acb7b7": "TOTAL_COMMUNITY_ALLOCATION()", +"68acfcbb": "changeLinkedAddress(address,address)", +"68ad1412": "registerUser(address,bytes32,address,bytes32,bytes32)", +"68ad6719": "valueChanged(string,string)", +"68aee9e8": "wed()", +"68af1378": "playerGuess(int8)", +"68af37df": "letter()", +"68af4971": "registerListening()", +"68afc7c4": "test_rewardPoolShare_isTranscoder()", +"68b017ec": "sarahtoken()", +"68b07ebb": "_getMaxAuctionSeconds()", +"68b0d82e": "TransferredGNS(address,address,uint256)", +"68b1a6d0": "GetBestWalletAddress(uint8)", +"68b2cee0": "removeAssetsOwner(address)", +"68b35396": "gemPerMiner()", +"68b43f38": "privateLockTime()", +"68b47d87": "SSOTHEALTH_FUNDS_ADDRESS()", +"68b49b78": "changeKey(address,address)", +"68b51ac7": "checkValidSignature(address,bytes)", +"68b5c351": "tokenTrueUSD()", +"68b670af": "wmulfloor(uint128,uint128)", +"68b6d55d": "potSize()", +"68b85aa5": "maxTimeout()", +"68b8c5a1": "numberOfAuthorizedPayments()", +"68b91201": "createInvestorTokenTimeLock(address,uint256,uint256,address)", +"68ba170c": "isRegisteredTranscoder(address)", +"68ba745c": "releaseTeamVested()", +"68bae934": "getAuctionItem(uint256)", +"68bba4d0": "HARD_CAP_T()", +"68bd6efa": "getContract(address,address)", +"68be7887": "getOrganisationByAddress(address)", +"68be8007": "_updateRegionOwner(address[16],uint256,address)", +"68be948d": "setRegisteringContractAddress(address)", +"68bee793": "LevelWhitelistedIICO(uint256,uint256,uint256,uint256,uint256,address,uint256)", +"68c14a61": "AirdropCentral()", +"68c197dd": "isWorkerPoolRegistered(address)", +"68c31649": "checkWithdrawAmount(address,uint256,uint256)", +"68c35c4b": "setEmail(address,string)", +"68c49cc9": "collectOtherTokens(address,address)", +"68c4cac6": "tokensPerEther1()", +"68c4eb74": "changeInvestorsAddress(address)", +"68c51f8e": "lhkjTNB()", +"68c64670": "RapidProfit(address)", +"68c646f3": "LifeFactor_i()", +"68c6b11a": "subtract(address,uint256)", +"68c6f45e": "issuedByStabilityBoard()", +"68c84260": "addEmployee(address,address[],uint256)", +"68c92b51": "doCall(address,uint256,bytes4,bytes32[])", +"68cbce31": "setWinner(uint256,uint256)", +"68cdafe6": "tokenTransfer(address,uint256)", +"68cdf759": "getReffAdd(string)", +"68ce77d0": "grant(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"68ce90ac": "handlePayment(address,uint256)", +"68cf5cf8": "setAdvisor(address)", +"68cff8a9": "notEmpty()", +"68d06724": "weisSoftCap()", +"68d12938": "setDonatorReward(uint8,uint256[],uint8)", +"68d155a0": "remove_participant()", +"68d317f1": "buildGame(address,string,string,uint256,uint256,uint8,uint8,uint8)", +"68d324e7": "changeCrowdSale(address)", +"68d32aed": "getVerifiedHashID(address,bytes32)", +"68d3d433": "specialDefenses(uint256)", +"68d3fb7b": "initRegister()", +"68d5a014": "reveal(uint256,uint8[5],bytes32)", +"68d5cb1a": "purchaseBuilding(uint256,uint256,uint256)", +"68d64514": "getRemovableIdArrayItems(address,uint256,string,string,string)", +"68d6a790": "timeOfreservations(address)", +"68d77366": "Coinlancer()", +"68d7e4b5": "addDeal(uint256,string,string,uint256,string,bytes32,string)", +"68d7f8d6": "nextPrice(uint256,uint256)", +"68d830ae": "get_unlock_time()", +"68d85d3e": "CloudexchangeCrowdsale(uint256,address)", +"68d88c25": "serviceRedirect(address,address,uint256)", +"68d89792": "setCatAttributeValue(uint256,uint256,string)", +"68d967dd": "changeDoublr(address)", +"68d9e8c4": "DKoin()", +"68da480b": "maxWeightBonus()", +"68da5ee5": "guess(uint256[])", +"68dae6bb": "RoundClose(uint256,uint8,uint256,bytes32)", +"68db96a6": "whitelistBonusRate()", +"68dbc6c1": "fortune_bid(uint256)", +"68dc3926": "unchanged(address)", +"68dc9528": "giveTokens(address,uint256)", +"68dd43f6": "maxNumInterests()", +"68df0d53": "_removeTokenFromOwnerEnumeration(address,uint256)", +"68df4dda": "removeWhitelistedTokenAddr(address)", +"68df5ca4": "testMinReturn0WithoutReturn()", +"68e03bf9": "setEthEurRate(uint256)", +"68e09ab5": "tokenEscape(address,uint256)", +"68e114db": "PFG(uint256,string,string,bool)", +"68e12fa8": "addressCallWithArray(address,address[3])", +"68e1569a": "parking()", +"68e1bba4": "eth_ratio()", +"68e1f526": "WeMediaChainToken()", +"68e2076a": "Hub()", +"68e39aac": "proxyWorking()", +"68e453ed": "totalSaled()", +"68e47f59": "accept(address,bool)", +"68e4bd99": "testSetBitSuccess()", +"68e5a07e": "getExcludes(uint256,uint256)", +"68e5e22f": "buyAnalysis(address)", +"68e67402": "RoomPlayersAdd(uint8,address,uint256,uint8)", +"68e757a0": "create_public_sale_token(address,uint256)", +"68e76403": "getTotalFeesCollectedCount()", +"68e7bdba": "disableApi(address)", +"68e7e309": "_saveVerification(address,address,uint32)", +"68eb59b0": "startGladiatorWithCoin(uint8,uint8,address)", +"68ebd450": "bioLock()", +"68ec0d99": "refundable(address)", +"68ec8446": "RentartoICO()", +"68ec9dba": "emptyPendingUserList()", +"68eca613": "numShareholders()", +"68ecabcf": "ankcwdsleToken()", +"68ee137e": "bonusClaimedTokens()", +"68ef7946": "zazSupply()", +"68ef8661": "isValidParticipant(bytes32)", +"68efa030": "Dao1901()", +"68efb367": "exile(uint8,uint8,uint8,bytes4)", +"68f04bbb": "openAirDrop()", +"68f06b29": "redeemable(bytes32)", +"68f0bcaa": "atomicize(address[],uint256[],uint256[],bytes)", +"68f15aac": "DMChainToken(string,string,uint8,uint256)", +"68f16293": "transferCooldown()", +"68f169e1": "sellCut()", +"68f269b4": "RATE_ETH_TXK()", +"68f2ab8e": "Currency(string,string)", +"68f2c86a": "changeUserPerms(address,bool,bool,bool)", +"68f2d6e2": "GEN0_MINIMAL_PRICE()", +"68f319b1": "placeBet(uint8,bool,uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"68f399f4": "BetSetAnswer(uint256)", +"68f5aa0f": "setShareholderDB(address)", +"68f5ccdf": "devFeePaid()", +"68f5d173": "addAdminister(address)", +"68f65f02": "ChangeShownDenomination(bool,bool,bool,bool)", +"68f67330": "finalizedCrowdfunding()", +"68f6e75f": "percent1()", +"68f7ef1b": "BLKToken(address)", +"68f88a26": "getMatchSummarizeInfo(uint256)", +"68f8957a": "setAyantDroitEconomique_Compte_1(uint256)", +"68f8fc10": "buyToken(address,uint256)", +"68f91814": "mainMultisigEther()", +"68f9dab2": "hash(bytes,bytes,uint256)", +"68fa8134": "removeAdministrator(address)", +"68faaa6f": "getTotalSellCount()", +"68fad504": "burnExtraTokens()", +"68faecdb": "depositedMYB(address)", +"68fb81b7": "iCoTokensSold()", +"68fbbab8": "giveMultipleItemsToMultipleRecipients(address[],uint256[])", +"68fbd0a8": "TPTSchedules()", +"68fcb6ee": "purchaseCard(uint256,uint256)", +"68fd0455": "contractorCancel(bytes16,address,address,uint256,uint256)", +"68fd22d3": "_addToList(address[],address)", +"68fe4405": "getBondHolder()", +"68ff8c4c": "UserList()", +"68fff456": "blackMask()", +"69008fb6": "buyTileAuction(uint8,uint256,address)", +"6900a3ae": "toString(uint256)", +"6901f668": "validate()", +"690252c8": "addSshKey(string)", +"69025b5f": "_addTokenToOwnerEnumeration(address,uint256)", +"6902a416": "AUMXToken()", +"69030397": "addLocker(address,address)", +"69032f15": "cantSetReferrer(address)", +"69043895": "exOwner(address)", +"6904c104": "getCampaignValidity(bytes32)", +"6904c94d": "company()", +"6904efc5": "BeatTokenIcoPhase3Started()", +"6904f583": "econVestingStage()", +"6905877a": "totalOwedForApi(uint256)", +"69061355": "claimOwnership(uint8,bytes32,bytes32)", +"6906679b": "getHistory(uint256,uint256)", +"6906a137": "checkCharger(uint256)", +"69070772": "MyFreeCoins(uint256,string,uint8,string)", +"69071418": "poolCLock()", +"6907baa9": "Campaign(address,address,address)", +"69081199": "WithdrawFunds(address)", +"69086c21": "a(bool,bool,bool)", +"6908d99c": "Extract(address,uint256)", +"6908ea00": "_checkVotes(uint256,bytes32,bytes32)", +"690973b6": "placeSpectatorBetOnGladiatorBattle(uint256,bool,uint256)", +"6909f5bf": "generateTokenWithAttributes(string,string,string)", +"6909fd44": "isWhitelisted(uint256,bytes32)", +"690a946b": "getProjectEndDate(uint256)", +"690b1897": "AragonTokenSale(uint256,uint256,address,address,uint256,uint256,uint8,bytes32)", +"690c11d5": "getcoursesLenght()", +"690c5de8": "phase4Cap()", +"690cf0d1": "preSaleStarted()", +"690d0b1d": "STARCrowdsale()", +"690d23be": "getItemAmountOf(uint256,address)", +"690d3750": "lockBalances()", +"690d8320": "withdrawETH(address)", +"690e1d22": "showLockNum(address,address)", +"690e7c09": "open(uint256)", +"690eb3f8": "getTicketSumToRound(uint256)", +"690f2f8e": "_addTokenAddress(address)", +"690f411b": "VividoTokenTMP()", +"690f4559": "createPersonalDepositAddressFor(address)", +"690fa5df": "getPlayerRefById(uint256)", +"69102190": "checkCount(address)", +"69111865": "LINDOToken()", +"69115768": "hasItBeenReleased(uint256)", +"69129b4f": "StandardToken(uint256,string,string)", +"6912c8ba": "thirtyPercentWithBonus()", +"69132d43": "useBalanceOf(address)", +"69132f72": "SALE2_END()", +"6913a63c": "addGuard(address)", +"6913d82d": "adminSetBlock(uint256,uint256)", +"6914db60": "tokenMetadata(uint256)", +"6914f40f": "getPI_edit_27()", +"69161b9e": "addAddressToGrantAccess(address,uint256)", +"6917fd5e": "BONUS_ICO_PERIOD_ONE()", +"6919d09a": "Y(uint256,uint256)", +"6919ff17": "test_insert_findNoHintAtPosition(int256)", +"691a38ab": "canBeWhitelisted(bytes32)", +"691a3f64": "buyFrom(address)", +"691a5842": "totalEtherRaised()", +"691ae7c9": "setCandyPowerToken(address)", +"691b7ce0": "transferCMO(address)", +"691ba73a": "race()", +"691bf023": "LockTokens(address,uint256,string)", +"691bfc89": "goods(uint16,uint256)", +"691c65d4": "mintItem(address)", +"691c71bd": "endTime2()", +"691c9484": "registerInvestor(address)", +"691cdb51": "CoinoorCrowdsale(address,address,address,address,address,uint256)", +"691d58e7": "_applyRefund(uint256)", +"691d933a": "getDeedByAddress(string,uint256)", +"691de4a4": "add(string,bytes32)", +"691e9961": "we_test_token()", +"691ed382": "THIRD_TIER_SALE_START_TIME()", +"691edfda": "devAccount()", +"691f2216": "User_1()", +"691f3431": "name(bytes32)", +"691fb8ea": "jumpIn()", +"692058c2": "dex()", +"69205dfc": "TUNEZ()", +"6921278a": "rateFee()", +"69215eb3": "ethMined()", +"692193cc": "MarketplaceAccessor(address)", +"6921af97": "payOutBounty(address,address)", +"69229b43": "ChangeOwnerContract(address)", +"6922eb06": "sellPackToAddress(uint16,uint16,address)", +"692345ee": "elapsedPeriods()", +"692397a4": "testIssueTokens()", +"69244c55": "getIcoReward(uint256)", +"69245009": "cage()", +"6925ad77": "multiplex_target(address)", +"6925b015": "contributionBy(address)", +"6925ebb9": "fluxFeed(uint256,bool)", +"6926890b": "createSale3()", +"69269371": "newAmendment(string,uint256,uint256)", +"6926cc7b": "_canSetReferrer(address,address)", +"692740b6": "_areStakeAndWithdrawAllowed()", +"6927bc38": "_isValidSignature(address,bytes)", +"6927cac5": "trustedSender()", +"6927e45a": "TOKEN_SHARE_OF_ADVISORS()", +"6927f800": "Tango1Token()", +"69288540": "setDEV(address)", +"6929dd0b": "confirmOrderCompletionByDoctor(bytes16,bool)", +"692aa97e": "isOpened()", +"692ad3a9": "round(uint256,uint256,uint256,uint256)", +"692b3712": "DMINT()", +"692bf818": "isIntermediary(address)", +"692cd610": "nextRewardPlayNo()", +"692d9ee5": "SALE_TOKENS()", +"692dfe8e": "maxStakeHolders()", +"692f74aa": "getvehreqdetails(uint256,address)", +"69306f24": "numberOfCommittees()", +"69307c80": "rotateBits(bytes,int256)", +"6930a020": "bruler(uint256)", +"6930a7e9": "adminMode(bool)", +"6930c5da": "depositSavings(address,uint32)", +"6930fd2a": "claimAll(uint256)", +"693103a0": "addAffiliates(address[],uint256[])", +"69318a79": "makeComment(string)", +"6931b550": "claimEthers()", +"6931e19f": "productPrices(bytes32)", +"69328dec": "withdraw(address,uint256,address)", +"6932af36": "proxies(bytes32)", +"6932c9c5": "getSaleContractDepositAddress(address)", +"6932cf81": "getName(string)", +"69335938": "vestedDate()", +"693382a9": "addToWhiteList(bytes32,address)", +"693391fe": "createNewUser(address,address,string)", +"69347990": "ownerWithdrawl()", +"69358e2e": "getCompanyList()", +"6935a0d0": "addNewEventToBusiness(uint256,address,string,string,uint256,uint256,uint256,uint256)", +"6935a290": "OriginsTraceChainToken(address)", +"69361de3": "I21Token()", +"69361fe2": "FeeCalculated(uint256,uint256,uint256,uint256,uint256)", +"693649aa": "mintRewardCore(address,uint256,uint256,uint256,uint256,uint256)", +"6936c1cf": "XoloChain()", +"69389cac": "setPlayerForm(uint256,uint8)", +"6938d9b0": "allocatePresaleTokens(address,uint256,uint256)", +"6939864b": "lotteryState()", +"693ac4fb": "getProof(bytes)", +"693b2b3f": "ticketTransferersAmount(address)", +"693bd2d0": "cardContract()", +"693cf8ce": "amountToSeedNextRound(uint256)", +"693d0141": "retireWildEasy(uint64,uint64,uint64,uint64,uint64,uint64)", +"693d0df2": "claimFunds(address)", +"693dde5c": "getAppId()", +"693e2279": "burntFounder()", +"693e26dd": "createVirtualEntity()", +"693ec85e": "get(string)", +"6940030f": "disableTrade()", +"69401027": "acceptClockmaker()", +"694094fd": "M5Token()", +"69414e7b": "SaveCryptoNetwork()", +"6941a061": "IdxCoin()", +"69422924": "hasVotedOnDocumentPoll(uint8,bytes32)", +"69423429": "getMyDividendAmount()", +"694244f8": "PreSaleStart()", +"694278da": "publicKeyYForX(uint256)", +"69428d97": "OwnableSimple()", +"6942dc03": "EnvironToken()", +"6942eac7": "Currency()", +"6942eff7": "_unverifyAddress(address)", +"69431ab6": "TokenCreation(uint256,uint256,address,string,string,uint8)", +"69433e12": "setExchange(uint256)", +"6943935e": "DPOS()", +"69443bf4": "CTAuction(address,address)", +"694463a2": "totalEntrants()", +"69454b86": "pairs(address,address)", +"6945c5ea": "setPlatform(address)", +"6946e33b": "GXVCNoToken(uint256,address)", +"694702ec": "CommonTokensale(address,address,address,address,uint256,uint256)", +"694719d8": "MIN_REFUND_RATE_DELIMITER()", +"69488271": "AllocatePresale(address,uint256)", +"6949a058": "sendOwnerEther()", +"6949e1d4": "AngleToken()", +"6949ed67": "omec(uint256,string,string)", +"694a813f": "bet1deltaOf(uint256)", +"694b1727": "addServer(string,uint8,uint256,uint256)", +"694c00d1": "reclaimBySender(address,address,bytes32)", +"694c11eb": "buyCore(address,address)", +"694d3757": "isAuthDisabled(uint256)", +"694dcecc": "preCrowdsaleStartTime()", +"694df50a": "freezeAddress(address,bool)", +"694e0d5b": "StringPasser(uint8[])", +"694e4277": "payment(uint256,address,uint256,bool)", +"694e80c3": "changeThreshold(uint256)", +"694ebe05": "createEscrow(address,uint256,address,uint256)", +"694f5a08": "_clearTotalNormalTokensByAddress(address)", +"694f6276": "_approvedFor(address,uint40)", +"6951b995": "grantCompanyCoins(address,uint256)", +"695338b9": "ChillIssued()", +"6953ace4": "finalTokenExchangeRate()", +"6953ba9a": "nextStarIndexToAssign()", +"69541be8": "DefaultReverseResolver()", +"6954abee": "owner_supplied_eth()", +"69557669": "changeContracts(address,address,address,address,address)", +"6955c8fc": "getBuyPriceAndPreviousRecord(bytes32)", +"69569a51": "setFrontend(address)", +"6956f3d5": "_totalTokens()", +"69573648": "remove(bytes,bytes)", +"695741f8": "waitTimeBlocks()", +"69580f63": "setVendorName(address,bytes32)", +"6958420b": "arbYes(uint256,address,uint256,string,uint256)", +"69594cfa": "transactionLog(uint256)", +"69598efe": "totalPartitions()", +"69599168": "onEmergencyChanged(bool)", +"6959d5c7": "getCitationRecord(string,uint256)", +"695a4cad": "finishTransferFeePayment()", +"695a7e9d": "CheckAmbientLightException(bytes32,uint32)", +"695addc9": "newProposal(bytes32,address,uint256,bytes)", +"695b4700": "transfer_token_from(address,address,uint256)", +"695c5a26": "getCurrentPhaseCloseTime()", +"695ca8c8": "Rhodium()", +"695d027b": "EMoney(uint256,string,string)", +"695d7297": "updateRewardForDrawing(uint256)", +"695d7797": "makeWallet(uint256)", +"695dcfa4": "createContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", +"695e1341": "UNGT()", +"695e2a30": "METAXCrowdSale()", +"695e54c3": "setCountWinnerPlace(uint256)", +"695ec793": "secondRelease()", +"695f9db3": "createRocSaleMarkets(uint256,uint256)", +"69606c61": "CompalTestCoin1(string,string,uint256,uint256)", +"6960947d": "stockSize()", +"6960a0ed": "getArtWorkChangeFee(uint256)", +"69615c0c": "TransferSalPay(address,address,uint256)", +"69623ae2": "addPlugin(address,address)", +"6962b010": "freezeEndsAt()", +"69632f56": "unitAttack(uint256)", +"69639749": "getMemberRole(address)", +"696495f9": "GetLettuce(address)", +"6965193f": "_processTransactionFee(address,uint256)", +"69652fcf": "resign()", +"69658cf3": "checkMyTokens()", +"69666811": "collectAllReturnBalance(address)", +"69671622": "depositToken(address,uint8,uint256,uint256)", +"69683080": "totalRestrictedAssignments()", +"6968ce29": "refundNonKYCInvestor()", +"6969d216": "topLevelDomainOwner(string)", +"6969d5d8": "appointAdministrator(address)", +"696a7253": "setConstraint(bytes32,bool,bool)", +"696b1030": "enableLimit()", +"696b5fb7": "getAssetID()", +"696bda86": "submitProposal(uint256,bytes)", +"696c58c4": "getRefund(address)", +"696c9c0a": "create(address,uint256,bytes)", +"696cd82c": "_register()", +"696d25fb": "calcVestableToken(address)", +"696d7ee9": "airdropPrize(address)", +"696d816a": "endSell()", +"696df08e": "FULL_TOKEN_WALLET()", +"696e6a6a": "Octiron()", +"696e7a85": "listPrycto3()", +"696ecc55": "trade(uint256,uint16[],uint8,bytes32,bytes32)", +"696f541c": "getOrg(string)", +"696f8a95": "CrowdCoinICO(address,address,address)", +"696fcc7c": "abortTime()", +"696fd28a": "SBSToken()", +"696fd68c": "makeTransferable()", +"697025b6": "transferEnablingDate()", +"6970402c": "areAllTokensRegistered(address[],address)", +"69706d9d": "unlockAmounts(uint256)", +"69708616": "push(address,uint16,uint256[4],uint256[2],uint8[11])", +"6970f46b": "BitFwdToken()", +"69712ffa": "removeTokenLock()", +"69719706": "Huangdashi(uint256,string,uint8,string)", +"6971d64c": "func_0AB9()", +"69732d4b": "ProjectX()", +"6973a4f8": "backTransfer(address,uint256)", +"6973cf58": "createEthSiringAuction(uint256,uint256)", +"6973e6db": "extraDataToNbJurors(bytes)", +"6974c632": "getItemPriceById(string,uint256)", +"6975846a": "getCurrentBidAmount(uint256)", +"6975aa9f": "minGoalReached()", +"69766079": "buyin()", +"6977083e": "updateStrategyAddress(bytes15,address)", +"69774c2d": "topup()", +"69776b1b": "tranchePeriodInDays()", +"6977aa62": "mintUnreleasedCard(uint8,address)", +"6977d9de": "addEmployerTotalInvoiced(address,address,uint256)", +"6977edc6": "dataControlAddOwner(address,address)", +"69793570": "_deleteOperation(bytes32,bool)", +"69794795": "getRiskParams()", +"697952af": "updateHolder(uint256,bytes32,bytes32,bytes32,bytes32)", +"697a2902": "HDhundun()", +"697a3083": "destroyforsecurities(uint256)", +"697a60b3": "updateContract(string,address)", +"697aefe2": "certificato(string)", +"697b139e": "changeGift(uint256)", +"697c37c5": "cd1(address)", +"697ca8bf": "getContributorInfo(address,string)", +"697cca66": "safeRelease()", +"697d1eaf": "getGroupTeamInvest(uint256,uint256)", +"697d2e19": "getDisputeTimeoutState(uint256)", +"697ee181": "DemeterCrowdsaleInstance()", +"697fa3e6": "forCommand()", +"697fa43d": "isBatchCeateDrawings()", +"697fb220": "addLockAddressInternal(address,uint256)", +"697fc672": "creatorClaimFundTransfer(uint256)", +"697fd39e": "randomNumberIncome()", +"6980f4fb": "heroTypeIds(uint16,uint256)", +"69810d0c": "TOTAL_SHIP()", +"69815435": "isAbove(uint256,uint256,string)", +"69817410": "investHappened(address,uint256)", +"69817dd4": "ProspectorsDevAllocation(address)", +"6981b5f4": "getLength(string)", +"6981c879": "updateDate(address)", +"69820a80": "birthBlock_()", +"698232fe": "balances1(uint256)", +"6982c6f4": "tickets100price()", +"6982f45a": "AutomobileCyberchainToken()", +"69833668": "allocateEndBlock()", +"69837721": "accForBounty()", +"6983f908": "isAllowedToBuyByAddress(address)", +"69843940": "getValue(bytes32)", +"6984d4a8": "getBigPromoPercent()", +"6985a022": "Pause()", +"6985a1b0": "endInstance(address,address)", +"6985c57e": "createRare(string,uint256)", +"6985e46e": "getConflictResolver()", +"69863520": "getOrganizerName(uint256)", +"6986ab82": "getNeedLockFundsFromPeriod(uint256,uint256)", +"6986d405": "elapsedDays()", +"6988e9cc": "tokenTotalSupply(address)", +"69898d64": "removeGift(uint256)", +"698a92fe": "CNKTToken(uint256,string,string)", +"698afd98": "withdrawFrom(string,address,uint256)", +"698bdd6f": "ViewtMyBets()", +"698c1d17": "CoinBX(address)", +"698d67aa": "registerBarcode(bytes9,bytes3,string,string,bytes19)", +"698d8a1e": "completeProvision(address,uint32,uint256,uint256)", +"698edc76": "getLawyer(address)", +"698f16aa": "pauseTrueUSD()", +"698f2e84": "setVirtualExchange(address)", +"698fbe92": "setWhitelisted(address,uint8)", +"69902ffb": "buyPerUnit(address,uint256)", +"699084f4": "CNBCoin(uint256,string,uint8,string)", +"69919447": "sclToken()", +"6991bad0": "number_of_token()", +"6991cb13": "EthlanceSponsorWallet()", +"69921c26": "checkAccount(address)", +"6993176a": "setMtdAmount(uint256)", +"69934ee7": "becomeRichest()", +"6993b507": "getDoublePeriod()", +"69940d79": "getRewardToken()", +"6994436e": "Shefo()", +"699450e8": "student()", +"699487c2": "getRecordNameToken(bytes32)", +"69949c77": "getRestricted()", +"6994a62b": "getRedemptionStatus(bytes32)", +"6994a7a0": "getPlayerAmount(uint256,uint256,address)", +"69950bd6": "addNewVendor(address)", +"69953501": "setUtils(address)", +"69958ab9": "cancelGame(uint256)", +"69972e07": "unvouch(bytes32,uint256)", +"6997545f": "SetParticipantStatus(address)", +"6997bcab": "totalSpending()", +"6997d166": "USER_VOTE(uint256,uint256)", +"6997f429": "MacroProxyContract()", +"69986073": "mainSaleSuccessfull()", +"6998a85b": "setTimeToBorn(uint256)", +"69995128": "updateAccount()", +"6999579f": "consolationRewardsClaimPercent()", +"69997696": "updateLoveStoryWithData(bytes16,bytes32,bytes32,string)", +"69997987": "distributeIQTToken()", +"6999d38f": "cancelBetByB(uint256)", +"699a195d": "addEA(string,string,string,uint32,address,address,string)", +"699a3a7f": "etherSince100()", +"699abb3c": "setTaxPercentage(uint256)", +"699ac46f": "mintTransfer(bytes32,uint256,bytes32,address)", +"699b328a": "randomize()", +"699be1bb": "lastBlock_v9Hash_uint256()", +"699c1687": "getProductBuyer(uint256)", +"699c181e": "currentTokenPerETH()", +"699c267a": "Jii()", +"699dc8ff": "proxyMintTokens(address,uint256,bytes32)", +"699dde66": "SiniCoin(string,uint256,uint8,string)", +"699e2bc6": "getTradeInfo(uint256,address,address)", +"699ef40c": "updateProfileAboutMe(string)", +"699f0c72": "getOfferPriceEth(uint256)", +"699f1fa9": "thisIsFork()", +"699f200f": "addresses(bytes32)", +"699ffd88": "get_database_id()", +"69a0188a": "setHashToFalse(bytes32)", +"69a046f2": "wadd(uint128,uint128)", +"69a0b5c0": "isSolved(uint8[9][6])", +"69a1aa95": "bulkPurchageLand()", +"69a1b0e2": "claimB1()", +"69a1bca9": "refundSale()", +"69a26fb8": "BuyStatus(uint256)", +"69a300f6": "getRangeID(uint256)", +"69a3a65a": "HBXToken(address)", +"69a44176": "aTransfer(address,address[],uint256[])", +"69a479e2": "IPETToken()", +"69a4c408": "AdminSupply()", +"69a4eda5": "calculatePositionProfit(uint256)", +"69a56df4": "testNewCounterValueAfterAIncrease()", +"69a5e902": "multiAccessCall(address,uint256,bytes)", +"69a683f1": "pollCompleted()", +"69a68f5f": "setPhase1AccountTokensMax(uint256)", +"69a69658": "createCoreRequestInternal(address,address[],int256[],string)", +"69a75868": "firstYearGameMiningTokenCap()", +"69a8c3bf": "CurrentGameId()", +"69a9e6b8": "togglePayment(uint256,string)", +"69aa2c9f": "burnMultNom()", +"69aaa388": "changeMultiSignatureWallet(address)", +"69aab7e3": "withdrawNAC(uint256)", +"69aad305": "getFromBalance(uint256)", +"69ab0005": "setThreshold(uint256,uint256,uint256)", +"69ab3404": "withdrawPartialDevelopersCut(uint256)", +"69ab7895": "get_payment_by_id(uint256,uint256)", +"69ab8c76": "ADVISORS_MONTHLY()", +"69ab8e52": "IsICONotStarted()", +"69ab98dd": "worldCupResultPart4()", +"69abed8f": "updateReferralBonus(uint256)", +"69ac5721": "unlockDate()", +"69ad56de": "_nextFifoStorageKey(uint256)", +"69add113": "tradeBancor(address[],uint256,uint256,address)", +"69addb6e": "IssueToken(uint256,address,uint256,uint256)", +"69ae7757": "registerAntique(bytes32)", +"69af0634": "cancelAllBuyOrders(address,uint256,uint256)", +"69afa869": "setRoundTwo(bool)", +"69b041bb": "swarmFundAddress()", +"69b0abea": "remainingPurchaseAmount()", +"69b144eb": "testThrowsCreateNewRevisionNotOwner()", +"69b29b51": "saleLimitReachedForCurrentStage()", +"69b31548": "ForwarderDeposited(address,uint256,bytes)", +"69b41170": "DELAY()", +"69b492f9": "weisMinInvestment()", +"69b4a1ef": "NUM_STAGES()", +"69b59e75": "collectFee(address)", +"69b5fb58": "setAuthorName(string)", +"69b6438e": "FUNDS_WALLET()", +"69b71e06": "unblockFunds(uint256)", +"69b7215d": "doesProofExist(bytes32)", +"69b7ca85": "getCaptainInfo(uint256)", +"69b8f38d": "ICO_PERCENTAGE_2()", +"69b94cf0": "_transferWithData(bytes32,address,address,address,uint256,bytes,bytes,bool)", +"69b9b787": "deposit2(address,address)", +"69b9e96b": "setBuyoutDividendPercentage(uint256)", +"69ba0fe9": "getStringValues(bytes32)", +"69ba3c06": "rejectErx20TransactionRequest()", +"69ba820e": "retrieveWalletForVanity(string)", +"69baa4ba": "TransferredToken(address,uint256)", +"69bb4dc2": "availableTokens()", +"69bba72f": "getAirdropStats(address)", +"69bbe5c7": "checkRound()", +"69bc1a55": "testFail_doubleVoting()", +"69bc513a": "setGGEAddress(address)", +"69bcdb7d": "getCommitment(uint256)", +"69bd01c4": "getvalue()", +"69bd28f0": "_buyToken(address)", +"69bd3436": "debatingPeriodInMinutes()", +"69bd4ec5": "processSellRequest(string,address,uint256,uint256)", +"69bdd5dd": "appSet()", +"69bdfd3a": "toContractDie(bytes,bytes,uint256)", +"69be51bb": "TOKENS_EARLY_BACKERS()", +"69bee8a1": "getWorkerPoolsCount(address)", +"69bef517": "balanceOfOnForHolderUpdate(address,uint256)", +"69c0ad93": "setInternalDependencies(address[])", +"69c19d4c": "getOutcomeTokenDistribution(address)", +"69c1a712": "lastHeartbeat()", +"69c1da7c": "GetManifestoByCategory(string)", +"69c212f6": "getUserByAddress(address)", +"69c254b9": "getSSPRegistry()", +"69c261ed": "setFreelancerCategories(address,address,uint256[])", +"69c338ff": "SomeContract()", +"69c4113d": "setNewBudget(uint256,uint256,uint256,uint256)", +"69c46821": "checkReferrer(address)", +"69c5c229": "testControlUpdateLatestRevisionNotUpdatable()", +"69c5f36e": "getTokensForContribution(uint256)", +"69c63434": "RaffleInternetBook(string,uint256)", +"69c6a5d2": "derive_sha256(string,uint256)", +"69c6f18d": "_transferItem(address,address,uint256)", +"69c74033": "withdrawSnowflakeBalanceFrom(string,address,uint256)", +"69c7c180": "m_orderCount()", +"69c7e386": "decreaseICOStartTime(uint256)", +"69c87817": "minimumWithdraw()", +"69c89774": "removeWhitelistedTransfer(address[])", +"69c8b344": "ownedToken(address)", +"69c8c7ef": "subtrReferralDeposit(address,uint256)", +"69c92c5a": "removeAddressFromBackend(address)", +"69ca02dd": "Transfer(address,uint256)", +"69ca16fa": "eventLogHand()", +"69cb418a": "RTeamCoin()", +"69cbb042": "getEncPubkey()", +"69cbd0fe": "MintableBaseCrowdsale(address)", +"69ccacd4": "setPercent4(address,uint256)", +"69cd5df1": "icoTokens(uint256,uint256,uint256)", +"69cd61be": "lockOwner()", +"69cdba9a": "approveChangeOwner(uint256)", +"69cef46c": "uploadData(bytes)", +"69cf7ac3": "miningToken()", +"69d01268": "concatUInt(uint256)", +"69d0292d": "addPresale(address,uint256,uint256)", +"69d03738": "setNFTAddress(address)", +"69d0b5e2": "buyInMarket(uint256,uint256)", +"69d0e33c": "getPlayerPlayedTimes(uint256)", +"69d0ef84": "callAndFailWithDivisionByZero()", +"69d196e1": "canAcceptPayment(uint256)", +"69d19c19": "BDSM()", +"69d1d1ca": "postGoods(string,uint32,string,uint256)", +"69d20762": "MassivelymultiplayeronlineVideoGames()", +"69d24f63": "lifetime()", +"69d25ff2": "updateCustomFee(uint256,address,address,address,address)", +"69d29832": "startBonuses()", +"69d2ce29": "countGames()", +"69d38ed2": "FINAL_AML_DATE()", +"69d3b252": "newVox()", +"69d3e20e": "mint(uint128)", +"69d4e250": "_safeSubtract(uint256,uint256)", +"69d4f28e": "officialSold()", +"69d516b3": "acceptExecutorOwnership()", +"69d565a9": "closeWithoutCounterparty(bytes32,uint256,address)", +"69d58d41": "minimumContributionPhase5()", +"69d5f38a": "setMembershipPrice(uint256)", +"69d62bf4": "revertTransfer(uint256,uint256,uint256,uint256,uint256,uint256)", +"69d6b880": "mintAmount1()", +"69d714c3": "getLargeInvestorApproval(address)", +"69d77740": "left92(uint256)", +"69d79ad5": "moneySumAtSettlement(address,uint256,uint256,int256,uint256,uint256)", +"69d87ab1": "setETHUSDPrice(uint256)", +"69d89575": "releaseFunds()", +"69da1b43": "NonceTick(uint256)", +"69da66ea": "referralPromille()", +"69dae8b0": "callAndReward_3(string,string,uint256)", +"69db054c": "userComment(uint256)", +"69dbe3e1": "StepFunction(uint256,uint256,uint256)", +"69dcafe9": "createGovernance()", +"69dceb6a": "getCoinAge(address,address,uint256)", +"69dd312f": "mintForContributorPool(uint256)", +"69dd3b2e": "transfer(address,bytes32,bytes32)", +"69dd4524": "crowdsaleTransfer(address,uint256)", +"69ddaad1": "resetQuote()", +"69dded0e": "validateSet(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"69de374d": "getProposalUint(uint256)", +"69de4e84": "NimCoin()", +"69ded293": "reserveBountyRecipient()", +"69df3671": "friendsWith(address)", +"69dfae6e": "productTokens(string)", +"69dfc66e": "TestableStandardSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"69e01731": "setDesignatedReportDisputeDueTimestamp(uint256)", +"69e01e8d": "dividendsOwing()", +"69e0e346": "inWhiteList(address)", +"69e111ba": "needRelease()", +"69e15404": "feeAmount()", +"69e1b5ce": "NewStage()", +"69e22b20": "addRequest(address,string,string,address)", +"69e24b48": "getCrabStats(uint256)", +"69e255c9": "removeHorseOWN(uint256)", +"69e2c927": "canRecvEthDirect()", +"69e6bcdf": "smartUnBlockAddress(address)", +"69e6e6c9": "amountOfPopDeveloperShouldMine(uint256)", +"69e78499": "removeKey(address)", +"69e795be": "teamTokensCap()", +"69e7ae85": "ipfsAttributeLookup()", +"69e82500": "SoundbitToken()", +"69e8d80f": "ednation()", +"69e91994": "getReturnValue(uint256)", +"69e936f0": "isMultiply()", +"69e9ca8a": "calculatePayoutForAddress(address)", +"69e9f8a8": "activateCurrentRound()", +"69ea1771": "updateRate(uint256)", +"69ea80d5": "HEIGHT()", +"69eac83a": "_emitOracleAdded(bytes4,address)", +"69eadd76": "canAcceptTokens_()", +"69eb6d32": "Annihilated(address,uint256,uint256)", +"69ebb7e9": "getCurrentRound(uint128)", +"69ecc3cf": "invalidate(bytes32)", +"69ed1b83": "callSomeFunctionViaInner2()", +"69ed87b0": "FeesCalculated(uint256,uint256)", +"69ed8a42": "LRKToken(uint256,uint256)", +"69edd4fe": "callElection(uint256)", +"69efe2bf": "stageAdmin()", +"69efe471": "transferLimits(address)", +"69f08449": "m_sale()", +"69f0a549": "mintOther(address,uint256)", +"69f10ce1": "issueRIU(address,uint256)", +"69f1256f": "createTokensFromEther()", +"69f173dc": "waveCap4()", +"69f18967": "testSetBitFailIndexOOB()", +"69f18b8c": "ROB()", +"69f30401": "bid(address,uint256[],uint256[])", +"69f3331d": "nextOwner()", +"69f35883": "updateBloomFilter(bytes,address,bytes32[])", +"69f3c66e": "Movieum()", +"69f40ebc": "forwardInvestorTransaction(address,bytes)", +"69f467c1": "unicorns(uint256)", +"69f4aefc": "LATPTransaction(uint256,uint256,uint256)", +"69f66950": "holderBountyTokens()", +"69f6b766": "getSumInByLottery(uint32)", +"69f80b4a": "addAddress(address,address,uint256,address)", +"69f80c7a": "additionPrice()", +"69f8408a": "MigratableToken()", +"69f8ef0c": "flushETH()", +"69f94209": "NewDrawReadyToPlay(uint256,bytes32,uint256,uint256)", +"69f95967": "vminEtherPerPurchase()", +"69f99001": "hashDataBlock(string)", +"69f9ad2f": "char(bytes1)", +"69fa2cae": "createMintableSale(uint256,uint256,uint256)", +"69fbad65": "_depositOldTokens(address,uint256,address)", +"69fbae6c": "_sendToTeam(uint256)", +"69fbfcc4": "upgradeStructure(uint256)", +"69fc3481": "fundsRaisedFinalized()", +"69fc551a": "create(address,uint256,string)", +"69fcbf70": "setPreSaleAmounts()", +"69fd75b1": "GUPToken(address,uint256)", +"69fe0e2d": "setFee(uint256)", +"69ff2d11": "TOT()", +"69ff5277": "set_activity_details(uint256,string,address)", +"69ffa08a": "claimTokens(address,address)", +"69ffadc9": "TDz(uint256,string,uint8,string)", +"6a00da87": "sellBuyerTokens(uint256)", +"6a011ae5": "minRandomPrivilegeValue()", +"6a018302": "mul2Revert(uint256)", +"6a01b6e6": "createToken(uint256,uint256,uint256,uint256,uint8,uint256,address)", +"6a01f09c": "swapLimit()", +"6a02209c": "getMaxParticipants()", +"6a028692": "totalAvailableEdition(uint256)", +"6a0323b2": "MusiconomiToken()", +"6a0324b0": "_getBool(address,bytes32)", +"6a032a3b": "isTimelocked(address,address)", +"6a032a73": "generateTokensManually(uint256,address)", +"6a03eaf9": "finalizeTime()", +"6a048ddb": "createContractChar(string,uint256)", +"6a049b62": "_buyMulti(address,bytes32)", +"6a054250": "update(uint256,uint256,uint256)", +"6a0665a4": "calculateGoldSell(uint256)", +"6a06bf92": "enjinTeamAllocation()", +"6a07089f": "Contents()", +"6a08b403": "setFine(uint16)", +"6a092e79": "transferTokens(address,address)", +"6a0a1f8e": "claimGrant(uint256)", +"6a0ac115": "libpow2(address,uint256)", +"6a0b50e4": "pickFood(uint256,string,string,uint256)", +"6a0b96b7": "IkuraTransferFee(address,address,address,uint256)", +"6a0c3809": "likeArtist(address)", +"6a0c5068": "getParticipantesA()", +"6a0c5723": "getHasVoted(uint256,address)", +"6a0c8730": "getTransactionPrice()", +"6a0cd52e": "admin_commission_activated()", +"6a0d017c": "inviteReferee(address,address)", +"6a0d3450": "sentTokensToFounders()", +"6a0d783c": "Crowdsale(string,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"6a0e605f": "MyToken(uint256,string,uint8,string,address)", +"6a0e7c24": "teamVesting(address[],uint256[])", +"6a0f7b7c": "getProductContractClients(address)", +"6a0fd45c": "getMeter(string)", +"6a100f37": "startAuctionFee()", +"6a10ad64": "tokenAllocToCrowdsale()", +"6a10c71c": "secondsLeft(address)", +"6a10d4d6": "createToken(address,uint256)", +"6a11138c": "doRandom(uint64)", +"6a12209c": "setRequestLimit(uint256)", +"6a12b86c": "continueGeneration()", +"6a1353c9": "setMintPayoutThreshold(uint256)", +"6a13af72": "giveRiskToken(address,uint256)", +"6a140b27": "_transferToContract(address,address,uint256,bytes)", +"6a142015": "assignGenesisCallerAddress(address)", +"6a146024": "WAD()", +"6a14d131": "creatorsCreatedCount()", +"6a15a080": "distribute_NRT(uint256)", +"6a16ae40": "wct2()", +"6a172536": "firstPreSaleDate1()", +"6a1729aa": "paymentAffiliate(address)", +"6a19b647": "addSuperPlayer(address,bytes32,uint8)", +"6a1af8b8": "setHeroData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", +"6a1b52e1": "expirationCheck()", +"6a1be7c6": "approveCollateral(address,uint256)", +"6a1bf209": "setCCH_edit_8(string)", +"6a1c3a4c": "getLastAPPeriod()", +"6a1c6fc0": "costs(string,uint256)", +"6a1cd82c": "crowdsaleRaised()", +"6a1cdefb": "incBlockCount(uint256,uint256,bytes32,uint256)", +"6a1cf721": "voteYes(uint256)", +"6a1d8713": "setMaxReferrals(uint256)", +"6a1db1bf": "changeFee(uint256)", +"6a1dbf03": "getTokenMinted()", +"6a1eb83f": "MeDao(address,address,address,address,address,uint256)", +"6a1ecbbf": "maxHopefulsNumber()", +"6a1f9e19": "breakIt()", +"6a206137": "cancelOrder(address,uint256)", +"6a2129d6": "delegateRecordExists()", +"6a21857f": "manualSend(address,bytes5)", +"6a221688": "TokenSaleQueue(address,address,address,address,uint256,uint256,uint256)", +"6a226077": "bidOnBreedingAuction(uint256,uint256)", +"6a226a49": "addMessage(string)", +"6a22b09a": "lastAssigned()", +"6a23b9df": "sumICOStage2()", +"6a23e308": "getIncubatorHashing(address,uint8,uint256)", +"6a23e7cf": "setFeeDistributionAndStatusThreshold(uint8,uint8[5],uint256)", +"6a24d595": "ModifyVigencia(uint256)", +"6a25000c": "token_per_wei()", +"6a254198": "ClaimTokensEvent(address,uint256,uint256,uint256,uint256)", +"6a256b29": "settle(address)", +"6a261353": "Lesson_5(address,uint256)", +"6a263f02": "_sqrt(uint256)", +"6a26b7fe": "setClaimableToken(address)", +"6a272462": "sell(address,uint256,uint256)", +"6a27c41d": "revealVote(address,bytes32,bytes32,address,uint256,uint256)", +"6a280317": "isAuctionManager(address)", +"6a2875c1": "incrementDIDFromContributions(address,uint256)", +"6a28db13": "getQrLength()", +"6a28f000": "unfreeze()", +"6a28f828": "issueIndex()", +"6a29150e": "totalFundsWithdrawn()", +"6a293d04": "setAlias(string)", +"6a294a80": "maxActivatedSalesTotalCount()", +"6a29605f": "BOHUpgradeableToken(address)", +"6a2a4c06": "get_released_by_manager()", +"6a2a6657": "validateToken(address,uint256,uint256,uint256)", +"6a2aac2b": "flowerBalances(address)", +"6a2ab790": "PRIVATE_STAGE_MAX_CAP()", +"6a2b171a": "applyDiscount(address,uint256)", +"6a2b5656": "changeTransactionFeeRecipient(address)", +"6a2b9e9d": "ERC20WithMetadata(string)", +"6a2c1ace": "getStateHash(bytes,uint256)", +"6a2d1cb8": "MIN_INVEST_ETHER()", +"6a2d5028": "getRaisedAmountOnToken(address)", +"6a2dda87": "SettingAutoGame_BettingRankRange(uint256,uint256,uint256)", +"6a2ddfce": "dragonsStatsContract()", +"6a2e882b": "getBlockLimit()", +"6a2f78a6": "submitStakeholderTransaction(address,bool)", +"6a2f9536": "calculateFraction(uint256,uint256,uint256)", +"6a30eb24": "hogsmashToken()", +"6a310bac": "bizp()", +"6a31c6df": "getAdjustedAccountValues()", +"6a327b7d": "getSupportManager()", +"6a333e51": "removeAvailablePack(uint256,bytes4)", +"6a33440a": "MANHATTANPROXY12THAVE()", +"6a3350c8": "invalidAirDrop(address)", +"6a33803b": "mintSaleTokens(uint256)", +"6a343df3": "allowPrice()", +"6a34480b": "MAX_INVESTORS()", +"6a357465": "payHours(address,uint256)", +"6a368486": "Ethraffle()", +"6a369137": "AfterSaleTransferableTime()", +"6a3845fe": "artTokenoken()", +"6a385043": "approveTokenTo(uint256,address)", +"6a385ae9": "getBalances(address,address[])", +"6a38c0fa": "DragonLock()", +"6a3a2119": "injectEther()", +"6a3b5aea": "setC4FContractProviderLock(address,bool)", +"6a3baaea": "newForge(bytes32,bytes32,address)", +"6a3bb8cc": "setFiscal(uint256,bytes32)", +"6a3c1198": "_projectCancelNew()", +"6a3c167b": "setInitialize(bool)", +"6a3c62a7": "beginReclaim()", +"6a3c7945": "RequestUpdated(uint256)", +"6a3d2a15": "AdvisorsAmount()", +"6a3d42ef": "ANT(address)", +"6a3d5a07": "AuctionCancelled(uint256,address,uint256)", +"6a3f3b97": "HolderBase(uint256)", +"6a3f5146": "auctionExpired()", +"6a3f79f4": "RaffleIssued(uint256,uint256,uint256)", +"6a3f89f4": "setProofImpl(address)", +"6a40515a": "enhancer()", +"6a40dbd6": "mintInvestor(address,uint256)", +"6a4113c7": "releaseLockFounders2()", +"6a41ade3": "walletCoreTeam()", +"6a420614": "setFreeCount(uint256)", +"6a420bbc": "setHaltPurchase(bool)", +"6a42b8f8": "delay()", +"6a4349a9": "getMicroModulesIds()", +"6a43aae7": "removeName(string)", +"6a43dc9a": "totalSupplyByLegacy()", +"6a4509f0": "paymentMax()", +"6a457ee9": "allocatedBonus()", +"6a470988": "getkEthPhiRate()", +"6a474002": "withdrawDividend()", +"6a47aa06": "halvingInterval()", +"6a48c04d": "GenExtWeightList(uint256,uint256,uint256)", +"6a4967d6": "addToWhitelist(address,uint256,uint8,uint8)", +"6a4987dc": "MARKETING_POOL_ADDR()", +"6a4a39e9": "presaleEndsAt()", +"6a4a6b6e": "_myAddressHelper()", +"6a4ad948": "setConvertionFee(uint256)", +"6a4aef9d": "fromReal(int256)", +"6a4b1b10": "setPresidenteDeMesaVerify(bytes32)", +"6a4b22da": "changeFallbackAccount(address)", +"6a4b27f4": "getRenter(address)", +"6a4b3eca": "checkBankBalance()", +"6a4b6aa5": "untrustedChildWithdraw()", +"6a4b8a3d": "BoxxToken()", +"6a4b96d5": "PledgePayed(uint256)", +"6a4c62ef": "getSecondUnionIds(bytes32)", +"6a4d4bb8": "getInvestorPosition(uint256)", +"6a4f5495": "test_0_ensureServiceRegistryFunctions()", +"6a4f8f39": "RNGenerator()", +"6a4fcddb": "Remyt()", +"6a502578": "totalSoldOnPresale()", +"6a50e3df": "PayWinners(address,address,address)", +"6a514db7": "REOToken()", +"6a51b918": "cities(uint256)", +"6a523c5e": "depositForUser(address)", +"6a5371b8": "nextTier()", +"6a537e40": "getCollectiblePrice(uint256,uint256)", +"6a5392d7": "generatedGze()", +"6a53ab64": "undestroyable()", +"6a53f98a": "pendingTxs(uint256)", +"6a54293a": "internalOwnerOf(uint256)", +"6a54932c": "processTransaction(address,uint256)", +"6a561c11": "ownerResumeGame()", +"6a561cb8": "testSender()", +"6a5690f6": "ICO_GOAL()", +"6a56947e": "transferVerify(address,address,address,uint256)", +"6a56a48b": "_getRandomMineralId()", +"6a570b98": "InGRedientToken()", +"6a585fa3": "tokensPerWei20()", +"6a596455": "getBatlordReq()", +"6a59d0a4": "transferAndLockForever(address,uint256)", +"6a59dc8c": "_unpackAgilityValue(uint256)", +"6a5a3625": "getTotalReqAmt(uint256[],uint256[])", +"6a5b0151": "setGasForKWH(uint256)", +"6a5b459c": "receivedWeiMin()", +"6a5bbc1d": "withdrawToOwner(uint256)", +"6a5c2cf2": "getTotalDividendsByAddress(address)", +"6a5c44a9": "STTadmin1()", +"6a5cf2d0": "WifiBonusCoin()", +"6a5d7206": "doSafeSendWData(address,bytes,uint256)", +"6a5da6e5": "followCampaign(uint256)", +"6a5e2650": "unlocked()", +"6a5e4628": "externalFundDAO()", +"6a5fd362": "shitFund()", +"6a61e5fc": "setTokenPrice(uint256)", +"6a625bc8": "issueToMany(address[],uint256[])", +"6a627842": "mint(address)", +"6a62936b": "PLUTUSTOKEN()", +"6a630559": "tokenLocked()", +"6a630ee7": "__transferWithReference(address,uint256,string,address)", +"6a63606c": "set_tokens_total(uint256)", +"6a63d2f9": "getLastestRequestFundID()", +"6a643ce6": "setBB(bytes32,bytes)", +"6a64790c": "toWholeShareUnit(uint256)", +"6a666c86": "addressToPunkIndex()", +"6a66a693": "beneficiaryContract()", +"6a67acc5": "getAuctionData()", +"6a67ec63": "minimum_buy_value()", +"6a68d2d5": "nextGamePotSplit()", +"6a69424b": "PaymentTimer()", +"6a6ae271": "assertPause()", +"6a6b8077": "StartICO()", +"6a6ba5d7": "addressIsCrowdsale(address,address)", +"6a6c526e": "AcceptsLYNIA(address)", +"6a6d31db": "externalEnter()", +"6a6e79bb": "WithdrawPaymentForTest(address,uint256)", +"6a6e88ba": "getBuyerInfoAt(uint256)", +"6a6f03a0": "returntrueifcurrentplayerwinsround()", +"6a704d7b": "AddedToGeneration(address,uint256)", +"6a7149f6": "changeAgency(address)", +"6a71a584": "getFreeAllowance()", +"6a71df43": "amountOfTokensPoolB()", +"6a7245ef": "changeBurnBoundsOperation()", +"6a7254a3": "specUWallet()", +"6a7283ac": "buyTokenFromGame(address,address,address)", +"6a7301b8": "setDestroyer(address)", +"6a7360d8": "updateNav(uint256)", +"6a7381bd": "TokensBought(address,uint256,uint256,uint256,uint256,uint256)", +"6a739a9b": "getTokensUnlockedPercentage()", +"6a739c44": "checkRegistrationStatus(address)", +"6a73de2c": "ZZZToken(uint256,string,uint8,string)", +"6a745ce9": "PRESALE_ETH_RAISE()", +"6a748ecf": "upLimit()", +"6a749986": "issuePreferedTokens(uint256,uint256)", +"6a749f6d": "indexshow2(address)", +"6a751710": "transferTraderBalance(address,address)", +"6a75f03d": "partnersAddress()", +"6a75fac0": "pullBack(address)", +"6a7625ca": "setRegionForSale(uint256,uint256,uint256)", +"6a76c522": "totalContractMiniGame()", +"6a7798ee": "EndAuction()", +"6a77e17a": "initialSeedFarmingAdress()", +"6a785191": "referralTokens(address,uint256)", +"6a7882f2": "requiredGoldIncreaseFactor()", +"6a7a88aa": "isValidSignature(address,address,bytes)", +"6a7b28a2": "show_the_minimum__reward_period()", +"6a7b988c": "votePopularity(bytes32)", +"6a7bf76a": "create_game(bytes32,uint32,uint32,uint8,uint16,uint8,address,uint256,bool)", +"6a7c09a0": "rewardPrivate()", +"6a7c0bae": "OWN_burnAddress(address,uint256)", +"6a7c0e81": "setBatchLimit(uint32)", +"6a7c4cdf": "H2G2()", +"6a7c594e": "CTVToken(uint256,string,uint8,string)", +"6a7d1a7e": "getPlayersUnitTickets(address)", +"6a7d3c1c": "FishbankChests(address)", +"6a7d6b52": "updateOldOwnerProfit(uint256)", +"6a7dabb9": "DEVCLASS_MAX_CARGO()", +"6a7eaf8f": "vestingRules()", +"6a7f0c69": "toTimestamp(uint256,uint256,uint256,uint256)", +"6a7f42e4": "closeBetByCanceling(uint256)", +"6a7fc8b7": "setDailyWithdrawLimit(uint128)", +"6a8141a1": "ParrotCoin()", +"6a816548": "cancelOrder()", +"6a81af17": "setConfigClass(uint32,uint8,uint8,uint8,uint32)", +"6a822760": "betB()", +"6a8269b4": "frozenList(address)", +"6a8296d7": "_setPrizePoolAddress(address)", +"6a833a6c": "addDelegateSigned(address,uint8,bytes32,bytes32,string,address,uint256)", +"6a83662e": "getYESVotesByEntity(uint256)", +"6a83b924": "btycownerof()", +"6a84e143": "destroyUnsoldTokens()", +"6a85ac88": "answerCompare(uint256,bytes32)", +"6a85d12e": "changeOuts(address)", +"6a85e252": "ElementTransferred(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"6a868363": "CreatedVUP(address,uint256)", +"6a86a0f0": "DCCAdvancedToken(uint256,string,string)", +"6a871e27": "airDropHeight()", +"6a87f66d": "specialManagerOff(address)", +"6a8896b6": "getPots()", +"6a893a8c": "stopWorkInternal()", +"6a897999": "drainStack(bytes32,bytes32)", +"6a89a51e": "_delete_()", +"6a8aa343": "m_maxTotalSupply()", +"6a8ae136": "getContractBalance(address,address)", +"6a8b9f7b": "BecomeSpiderQueen()", +"6a8ba0fa": "createPromoPet(uint256,address,uint256,uint256,uint256,uint256)", +"6a8be019": "cancelEscrow(uint256,uint256,address,uint256)", +"6a8c2437": "totalRescues()", +"6a8c55b8": "_getSaleRound()", +"6a8c9cce": "BITMUZE()", +"6a8cdb52": "setBondAddress(address)", +"6a8d0bf4": "ReceiverChanged(uint256,address,address)", +"6a8d3575": "UniversalToken(uint256,uint256,uint256)", +"6a8d7eb3": "isLSNFT()", +"6a8d86db": "rawTransfer(address,address,uint256)", +"6a8e8711": "max_bet()", +"6a8ef2d3": "getMyShitClone()", +"6a8f91ff": "createAccount(bytes32,bytes32,address,address)", +"6a907a78": "UserAddTicket(bytes5[])", +"6a90ac63": "unlockWithdrawals(uint256)", +"6a91205a": "rentLand(uint256,bool,uint256)", +"6a91431e": "RefundableCrowdsale(uint256,uint256)", +"6a914911": "getPlayerByBoard(bytes32,uint8)", +"6a92a8b8": "UserAddressLoaded(bytes32,string)", +"6a92fcf6": "paymentEnable()", +"6a931aa8": "tokenVendor2()", +"6a93316c": "getInvestorStatus(address)", +"6a938567": "isValid(bytes32)", +"6a9412bd": "refundAvailable(address)", +"6a95dff4": "NOBSToken()", +"6a96c63e": "getCreateUnicornFullPrice()", +"6a98085a": "totalAmountToWhale()", +"6a9812f9": "getPolicyByTaxCode(string,uint256)", +"6a993130": "Ownables()", +"6a9b4daf": "Etros()", +"6a9b515d": "TokenAuctionCreated(uint256,address,uint256)", +"6a9ba3ce": "maxCapNotReached()", +"6a9c97d6": "refundSender(address,uint256)", +"6a9cd450": "upgradeKernel(address)", +"6a9d02e9": "tokenFrozenSinceNotice()", +"6a9d2afd": "playToWinTest(uint256)", +"6a9d69a7": "rentalTotalTime()", +"6a9d7629": "getOpenInterestInAttoEth()", +"6a9db57a": "playerAmountOfBets(address)", +"6a9dc9a8": "enrollUser(address)", +"6a9e8480": "FinalLottery(address)", +"6a9e8f27": "stockTransfer(address,uint256,uint256)", +"6a9ecd21": "BidFailedEvent(address,uint256,string)", +"6a9f9ff9": "isVisible(uint256)", +"6aa084d7": "getBoardStatus(uint256)", +"6aa0fd32": "performRebalance(bool,address,uint256,bool,uint256,uint256,address,bytes)", +"6aa179d9": "_secondRoundLosersFight()", +"6aa3141f": "removeCustody(address,uint256)", +"6aa31b1f": "starSell()", +"6aa3bf8b": "finishBetFrom(address)", +"6aa3e64d": "emptyTo(address)", +"6aa4b3cc": "calculateId(address,bytes32)", +"6aa52288": "FisrtSupply(address,uint256)", +"6aa5b37f": "maxBuyLimit()", +"6aa5cdfa": "setLatestEdition(uint8)", +"6aa633b6": "isEnabled()", +"6aa66cd4": "targetDiscountValue10()", +"6aa68a15": "phase2EndBlock()", +"6aa737e0": "enableSellToken()", +"6aa8e220": "WeaponRegistry()", +"6aa96d7c": "Storychain()", +"6aa9c59b": "_addMinions(uint32,uint8,uint64)", +"6aa9c82b": "withdrawControl()", +"6aaaae68": "tokensForFoundersAndTeam()", +"6aaab6f2": "updateTreasury(address,uint256)", +"6aaacb3f": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", +"6aab223d": "bonusMatchPayoutInPercent()", +"6aaba012": "ErrorGenerator()", +"6aabd369": "verifyGame(uint256,bool)", +"6aabe577": "getPuntos(uint256)", +"6aad1a6b": "adminSetGasLimit(uint256)", +"6aad70b6": "getAddTokenSignatures()", +"6aaee3f7": "biAdvance(uint32,uint64[2],uint64[2],int64[2],uint64)", +"6aaf0a0d": "endRegisterTime()", +"6aafb887": "getNewMaxProfit(uint256,uint256)", +"6aafd194": "Fosha(uint256,uint256,uint256,uint256,uint256)", +"6ab03a7f": "OGPToken()", +"6ab09a5e": "listUsersBets()", +"6ab15436": "price(bool)", +"6ab22536": "SMEToken(uint256,uint256,uint256,uint256)", +"6ab28bc8": "lockedAmount()", +"6ab368f8": "Burned(address,address,uint256)", +"6ab3846b": "updateEndTime(uint256)", +"6ab3c5bd": "KING_WIN_MULTIPLE_PER()", +"6ab4936d": "presaleFail()", +"6ab5bcd0": "withdrawedTokens()", +"6ab71276": "getOwners(address,uint256)", +"6ab76510": "bulkTransferFrom(uint32[],address,address[],uint256[])", +"6ab872f0": "setMaxBetThresholdPct(uint256)", +"6ab8bd2b": "POOH_TO_CALL_1PLUMBER()", +"6ab92ba7": "PEPL()", +"6ab9aa21": "MAX_REVENUE()", +"6ab9eb45": "getItemAllowancePrice(uint256,address,address)", +"6aba2a0d": "donatorBonus(uint256)", +"6aba899b": "refundStartTime()", +"6abac115": "getActiveState()", +"6abacfa4": "etherMasterWallet()", +"6abb4a50": "getPartner()", +"6abb51a5": "_completeTask(uint256,uint256)", +"6abc3fe4": "directMintAgent()", +"6abd3b88": "getWins(uint256,uint256,uint256)", +"6abf31eb": "confirmTransaction(address,uint256,uint256)", +"6abfbf6f": "allowTokenContract(address)", +"6ac084fe": "OrderFilled(address,uint256)", +"6ac0bf9c": "transferableSynthetix(address)", +"6ac0fe25": "BUYER_STEP_5_CANCEL(bytes32)", +"6ac26d3d": "executeAddMemberProposal(uint256)", +"6ac290e7": "getFirstReferrer()", +"6ac29bcc": "FBR()", +"6ac36029": "get_invester_length()", +"6ac3a100": "HLCN()", +"6ac47db5": "CloudbricSale(address,address)", +"6ac4d582": "registrants(uint256)", +"6ac4d97c": "createInitialCards(uint32,uint16,uint16)", +"6ac4e08b": "dynArrayFunc(int256[])", +"6ac4f8e4": "StocksAddress()", +"6ac50065": "getBidsByAdunit(uint256,uint256)", +"6ac50f2f": "sizeOfUserAddresses()", +"6ac54d62": "stopPreIcoAndBurn()", +"6ac54eb0": "posMint()", +"6ac59dd5": "setIcoParametersSet(bool)", +"6ac5db19": "max()", +"6ac6016f": "pepFarm(address,address,address,address,uint256)", +"6ac6205c": "addDataPoint(int256,uint256,bool,string)", +"6ac68f7f": "getBestBidder(uint256)", +"6ac777d3": "EEFucksToken()", +"6ac878f3": "multiTransferDecimals(address[],uint256[])", +"6ac96df8": "removeAddressesFromRole(address[],string)", +"6ac98840": "SGCC()", +"6acd58d4": "arrayIndexOf(address[],address,address)", +"6acd89f6": "Testerr()", +"6acd8e4a": "getAddedTime(uint256,uint256)", +"6acdf42b": "arrayOfNonTrivialAccounts(uint256)", +"6ace6dc8": "setApprovedBuyer(address,address,bool)", +"6ace7d87": "getLastCandidates()", +"6acf5cb3": "isUserKYCVerified(address)", +"6acfb852": "ZiggleToken()", +"6ad001a5": "metalworksCities(uint256)", +"6ad03feb": "GBTAddress()", +"6ad0d6ce": "_startNewRound(address)", +"6ad1246e": "content(string,uint256,uint256,address,uint256,uint256)", +"6ad1a6d5": "PauseTradable()", +"6ad1fe02": "sale()", +"6ad26611": "removeFee(address)", +"6ad2a0b3": "buildContract(address)", +"6ad34a7a": "BAILSToken(uint256)", +"6ad34dab": "getstartBlockNumber()", +"6ad35d1a": "CMO()", +"6ad38e61": "transmit(address,address,uint256)", +"6ad3f723": "getContentAddress()", +"6ad43a54": "setRateICO(uint256)", +"6ad44174": "getVolumebasedBonusRate(uint256)", +"6ad49245": "FundingManagerEntity()", +"6ad50ed4": "investmentEntryInfos()", +"6ad5b3ea": "walletAddress()", +"6ad60e3d": "BubbleToneToken(address)", +"6ad6d45b": "setLister(address)", +"6ad7541c": "Kokos()", +"6ad7aeb5": "BitsumCash()", +"6ad80326": "walletFounder3()", +"6ad95317": "batchInvests(address[],uint256[])", +"6ad95843": "icoUnitPrice()", +"6ada94e0": "setDataInt(string,string)", +"6adacb48": "priceStep4()", +"6adc674e": "WaltixToken()", +"6adcef6b": "payDividends(uint256)", +"6addb663": "tokenInfo()", +"6addc649": "weekBonuses(uint8)", +"6addf029": "setReferralRequirement(uint256)", +"6ade6cea": "currentstageplayer2()", +"6ade8aa2": "emptyWallet(address)", +"6ade9bd1": "tokensFortorch()", +"6adf3279": "leekStealOn_()", +"6ae00c4f": "ShareRoomDATA(address,string)", +"6ae0646a": "_computeRollFee(uint256)", +"6ae17283": "MinterAdded(address)", +"6ae1a976": "numAffirmationsSigned(bytes32)", +"6ae22740": "reward7()", +"6ae38577": "accPreICO()", +"6ae413ab": "updateWebappAddress(address,address)", +"6ae459bd": "bulkMint(address[],uint256[])", +"6ae4feed": "subtract(address,address,uint256)", +"6ae6151e": "acceptOffer(bytes32,address,uint256)", +"6ae6921f": "_addPayee(address,uint256)", +"6ae6b459": "setLockup(uint256)", +"6ae76777": "addressBounty()", +"6ae81ae1": "icoPhase3TimeBonusInPercentage()", +"6ae85216": "countAssets(uint256)", +"6ae85e0d": "isAddressNotVoted(address,address)", +"6ae8f49a": "WebCoin()", +"6ae8fefa": "NetareumToken()", +"6ae9eea8": "s39(bytes1)", +"6aea5f1b": "current_supply()", +"6aea6cce": "breakCompleteness(uint256,uint256,address)", +"6aeaef97": "inheritedView()", +"6aeb1ce7": "m_paymentChannels(uint256)", +"6aebbbd9": "subUIntValue(bytes32,uint256)", +"6aebc603": "Villj()", +"6aebff5d": "lccxTeamAddress()", +"6aec47b4": "getBalancesAgent(uint256)", +"6aec82b3": "setSalesPipe(address)", +"6aec95cc": "registerBalanceForReference(address)", +"6aedc282": "MarriageContract(address,address,uint256,string)", +"6aede5cd": "globalTimeVault()", +"6aedf1d1": "SupportAdded(address)", +"6aeeec7f": "_setStakingEpochDuration(uint256)", +"6aefef17": "test01CrowdsaleInit()", +"6af04a57": "newContractAddress()", +"6af1898a": "refundErc20(address,address)", +"6af1fdf7": "delegateTokens(address,uint96)", +"6af2da2f": "testKeyedHash()", +"6af41534": "withholdToken()", +"6af422fc": "RSPLT_H()", +"6af53f2f": "MaPToken2()", +"6af58d83": "getMin(uint256)", +"6af630d1": "DARKNODE_FEES_DENOMINATOR()", +"6af6b06f": "setNextLotteryTTMTokenId9(uint64)", +"6af6e64a": "VendorRegistry(address)", +"6af78ab1": "startWeekFour()", +"6af79112": "priceInWei(uint256)", +"6af7dbbe": "sendPriceRequestToOracle(bytes16,uint256)", +"6af81d6f": "_mintCategory(string)", +"6af91799": "totalTokenSaled()", +"6afa0381": "minInvestmentLimit()", +"6afa7b80": "toETH()", +"6afb434f": "getPreIcoInvestment(address)", +"6afb92a1": "MeepCoin()", +"6afbd04f": "Mintable()", +"6afc3474": "saleRoundsSet()", +"6afd767f": "addParticipant(address,bool)", +"6afe74c9": "test_oneValidEmptyAddress()", +"6afeada3": "finishBountyAt()", +"6afef23f": "submitPoliceReport(address,address,uint256,bytes,bool)", +"6aff1a64": "TIER2_PRICE()", +"6affdc39": "saleEndDate()", +"6affe07b": "CirclesTokenOffering(address,uint256,uint256,uint256,uint256,uint256,address)", +"6b0028b9": "initialSupplyInFrac()", +"6b007e4f": "logMarketFinalizedCalled()", +"6b015897": "minimumRewardWithdrawalLimit()", +"6b01acf5": "counterToTokens(uint256)", +"6b0235a0": "tla()", +"6b038742": "Archetypal()", +"6b03ed5f": "clearClaim()", +"6b041da2": "SEVENTNET()", +"6b04f110": "mint_for(address,uint256)", +"6b061d7a": "changeRestarTime(uint32)", +"6b06548c": "EarlyInvestorsTokensHolder(address,address,address)", +"6b068e01": "collectWorks(bytes32,bytes32)", +"6b069710": "scheduleCall(address,bytes,uint256,uint256,uint8)", +"6b06afe7": "getEcoSystemWallet()", +"6b06c3d4": "ActivateEscrow(uint256,uint256,uint256,uint256,address)", +"6b06ea88": "ElementToken(uint256,string,string)", +"6b06f908": "buyToken(string,address,uint256)", +"6b074a07": "isProvider(address)", +"6b08a833": "EDUTURN()", +"6b08f2ef": "convertForPrioritized2(address[],uint256,uint256,address,uint256,uint8,bytes32,bytes32)", +"6b091695": "getReward(address,address)", +"6b095ca1": "apply(uint256,uint256,bytes32,bytes)", +"6b097cd0": "KKOGToken()", +"6b0bfc80": "feedAndMultiply(uint256,uint256,string)", +"6b0c537b": "generateRequestId()", +"6b0c932d": "lastDay()", +"6b0c9d6a": "distributeA()", +"6b0cba9c": "getUniqHash()", +"6b0cc513": "_DifficultyCalulate(uint16,uint16)", +"6b0d0329": "getTicketInfo(uint256,uint256)", +"6b0dd90f": "getVote(address,uint256)", +"6b0dfb76": "getLandDefender(uint8,uint32)", +"6b0ead6a": "iudexIdToString(bytes32)", +"6b0f02e6": "firstExchangeRate()", +"6b0f182e": "changeCofounderA(address)", +"6b0f65d7": "indSeedDeposit()", +"6b1092f2": "ADV_BTY_SUPPLY()", +"6b11c87a": "RealEstateCryptoFundBounty(address)", +"6b11dabd": "MTYToken()", +"6b128b2f": "upgradeFinance(address)", +"6b12a7bf": "buyRealm(uint256,uint256,uint256)", +"6b13fabf": "SampleToken()", +"6b140854": "totalWinValue()", +"6b1426a4": "getWinners(uint256)", +"6b149aac": "Cryptassist()", +"6b14dfe1": "SPEED_STAT_MAX()", +"6b14ea36": "ASK_STAKE_RATIO()", +"6b153322": "activateCampaign(string,uint256)", +"6b15c47c": "tokenCalculate(uint256,uint256)", +"6b1781b6": "Emergency()", +"6b17864f": "CommunityPool(address,address)", +"6b1786bb": "cVideoCost()", +"6b178b90": "NBACoin()", +"6b178f47": "poolIssue()", +"6b190ee1": "MemeNetworkToken(address,uint256)", +"6b194a4a": "ALLOCATION_LOCK_END_TIMESTAMP()", +"6b1970ab": "TheCoin()", +"6b199471": "updateMasks(uint256,uint256,uint256)", +"6b19e692": "getPaymentSupply()", +"6b1ac900": "setPXLPropertyContract(address)", +"6b1af75e": "sendReward(address,address,uint256)", +"6b1b3997": "ChronoDragonPowerCoin()", +"6b1b68ad": "URMBToken(uint256,string,string,address)", +"6b1bfd33": "setFundAccount(address)", +"6b1c86fe": "sendBreakup(address)", +"6b1cb549": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", +"6b1d4db7": "ethToTokenSwapOutput(uint256,uint256)", +"6b1da364": "getWinnerInfo(uint256)", +"6b1e0420": "blockPendingTx(uint256)", +"6b1e564a": "challengeWinningOutcome(bytes32,uint16)", +"6b1f513b": "makeDailyInvest(uint256)", +"6b1f78c8": "joinSqr(uint256)", +"6b1fbfdb": "sendWithSignature(address,uint256,uint256,bytes,uint256,bytes)", +"6b1feeeb": "get_my_sig()", +"6b212960": "offer(address,uint256)", +"6b2148c2": "Deluxo()", +"6b21a636": "startDisbursement()", +"6b227a8f": "OrderApprovedPartTwo(bytes32,bytes,address,bytes,address,uint256,uint256,uint256,uint256,uint256,bool)", +"6b2327d2": "previewStageEndTime()", +"6b2351aa": "lockWithAfter(address,uint256,uint256)", +"6b235bdc": "ChangeBeneficiary(address)", +"6b236730": "solveChallenge(bytes32)", +"6b24d827": "WalletHolder()", +"6b252b47": "advisorsWallet()", +"6b256f57": "DAOSecurity(address,address,bytes,uint256,uint256,uint128)", +"6b259690": "feesPool()", +"6b263efa": "multiOwnableCreator()", +"6b270056": "Corporation()", +"6b27909d": "getStopLockTime()", +"6b27be9f": "mayorcoin()", +"6b281b64": "totalBalanceUp()", +"6b28d7a2": "blockTransfer()", +"6b28f834": "getPeggedTokenCount(address,address)", +"6b298df0": "disbursements(address)", +"6b2a2691": "winBrickReturn()", +"6b2a77ed": "End5()", +"6b2a86be": "dropToken(address[])", +"6b2accac": "toDRP(uint256)", +"6b2ae2ab": "Notify_String(string,string)", +"6b2bb92a": "finishTournament()", +"6b2c0f55": "removePauser(address)", +"6b2c116c": "AmateurPlatinumToken()", +"6b2cd752": "getGpgKey()", +"6b2ce4ce": "stakeForDuration(address,uint256,uint256,bytes)", +"6b2ce7f1": "togglePresale(bool)", +"6b2d95d4": "getLockedTokens(address)", +"6b2e36b0": "canUpdateAmountToTakeAsRake()", +"6b2ec90f": "_vestedDown(uint256,uint256,uint256,uint256)", +"6b2ed1c0": "sellFci(address,uint256)", +"6b2f4632": "totalEthereumBalance()", +"6b2f65b0": "isArtist(address)", +"6b2f68f5": "assertEq22(bytes22,bytes22)", +"6b2f73c2": "preICOLedger()", +"6b2fa6cc": "lastBlock_v7Hash_uint256()", +"6b2fafa9": "getHash(uint256)", +"6b2fd0e7": "catGenes(uint256)", +"6b3032c6": "getSingleGuessInfo(uint256)", +"6b308ee7": "subTourFreezingPrice()", +"6b30f243": "VCChainToken()", +"6b318270": "addFile(bytes32)", +"6b319f36": "tokenUnfreezeTime()", +"6b31ee01": "jackpot()", +"6b32bb25": "containsValue(address,uint256,string,uint8[])", +"6b32c591": "userClaimAmt()", +"6b334e49": "senderCheck(address,address)", +"6b335b8c": "buyXname(uint256,string)", +"6b33aeb8": "YSH()", +"6b33e45d": "setWithdrawTo(address)", +"6b3416b5": "transfer(uint256,uint256,uint256,uint256,uint256,uint256)", +"6b342eb8": "_minimumBuy()", +"6b3559e1": "mintAndSetData(address,uint256)", +"6b3578f2": "paymentEnabled()", +"6b35bed2": "addAirdropParticipants(address[])", +"6b35f7c1": "deleted()", +"6b36028e": "setReferenceType(bytes32,string)", +"6b361c80": "TokenPriceUpdated(uint256)", +"6b36a76e": "MIPCoin()", +"6b3868db": "getMemberByIdx(uint256)", +"6b3905c4": "getNextVestingTime(address)", +"6b392680": "setFeeAmount(uint256)", +"6b3a87d2": "WatchWinningPot()", +"6b3a8e90": "tournamentJackpot()", +"6b3ac430": "crowdsaleLive()", +"6b3ad4f8": "setColorWhite()", +"6b3b1d17": "tHasBeenPenalized(uint256,address)", +"6b3b261c": "addSpaceshipMoney(uint256)", +"6b3bc4b6": "ovcPerEther()", +"6b3c9757": "advisorSecondLockTime()", +"6b3ce49b": "getRoomBalance(uint256,uint256)", +"6b3cedd6": "mintTokensForCrowdsaleParticipants(address[],uint256[])", +"6b3d998c": "Apputoken()", +"6b3e2f97": "updateDiamond(string,string,string,string,string,uint256,uint256,string)", +"6b3e8ca0": "setPrePresaleTokens(uint256)", +"6b3ec0ac": "vestingExists(address)", +"6b3f5f84": "OwnerReclaim(address,uint256)", +"6b3f94ab": "GoldMintToken()", +"6b3fb674": "noHash()", +"6b3fdc5a": "oraclize_setNetwork(uint8)", +"6b3fdf16": "EXT_COMPANY_THREE()", +"6b3ffb91": "changevanity(string,address)", +"6b404955": "depositDelta()", +"6b407837": "sellerRequestCancel(bytes16,address,address,uint256,uint16)", +"6b4097b2": "_runAdvanceClock(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6b40bba1": "requiredPeriodSeconds()", +"6b424d47": "h2g2()", +"6b425093": "sortTopPosts()", +"6b433ccf": "_totalLandholderTax(uint256)", +"6b440e9a": "finalAllocation()", +"6b441abc": "VIRTUALTALK()", +"6b453fac": "hardWeiCap()", +"6b454d4c": "next_item_index()", +"6b45adf3": "cellsOf(address)", +"6b45c9f2": "getPiece(uint256)", +"6b462936": "transferQueue(address[],uint256[])", +"6b4660f8": "getStockLength()", +"6b46c8c3": "payoutAmount()", +"6b475df7": "release6m()", +"6b486818": "hashFirst()", +"6b489028": "DEVCLASS()", +"6b4a6ded": "TOKENS_PER_ETHER()", +"6b4a8b78": "token_allowance(address,address)", +"6b4b1f3a": "stringToAddress(string,address)", +"6b4b63fa": "Bank_With_Interest()", +"6b4bfeae": "checkClaimExpiry()", +"6b4c0789": "freezeContract(bool)", +"6b4c5856": "WyeContract()", +"6b4ca2a8": "getMatchData()", +"6b4dd158": "getPrice(bytes)", +"6b4dff1f": "validateGasPrice(uint256)", +"6b4e243d": "callOperator(address,address,address,uint256,bytes,bytes,bool)", +"6b4e8bb0": "lastInflationUpdate()", +"6b4ed21b": "holdersCount()", +"6b4f518a": "preICOTokenReward()", +"6b4f6865": "unlockForWork(address,address,uint256)", +"6b50b6b3": "_multiSigWallet()", +"6b512327": "_deleteIPFSHash(bytes32)", +"6b516ef0": "_handleDeposit(address)", +"6b523b68": "periodCrowdsale()", +"6b52a071": "SALE_FUNDS_ADDR()", +"6b52a86f": "DesTokenSale(address,address)", +"6b5396dc": "batchPresaleVesting(address[],uint256[],uint256[],uint256[],uint256[],uint256[])", +"6b5424b3": "HACHIKO()", +"6b54821f": "setupAuthentication(address,bool)", +"6b550dd3": "setAgriChainDocuments(address)", +"6b55264d": "setRegionName(uint16,string)", +"6b55ddd0": "getJobEmployerName(uint256)", +"6b55e991": "transferEther(address)", +"6b56476b": "removePost(address,address)", +"6b5648f5": "enabledMint()", +"6b565345": "CANAToken()", +"6b57825c": "getCurrentUserTotalPromoBonus()", +"6b57cb34": "lockedStagesNum(address)", +"6b584b10": "testFreeSpace()", +"6b588775": "rateOfSpecificTier(uint256)", +"6b58b2bc": "calculateInternalTokensAmount(uint256,uint256,uint256)", +"6b590248": "getDigit()", +"6b59084d": "test1()", +"6b59f495": "tokenized()", +"6b5a61ac": "changeTeamNIMFAAddress(address)", +"6b5ae41c": "execute0(address,uint256,bytes)", +"6b5aed93": "executeTransfer(string,string,uint256,uint256)", +"6b5b6285": "PBKtoken()", +"6b5bbf5f": "setCommunityMultisig(address)", +"6b5c4b16": "dateRelease12()", +"6b5c5f39": "croupier()", +"6b5c8fba": "confirmParties()", +"6b5ca27d": "finalizeCampaign(uint256)", +"6b5caec4": "setBot(address)", +"6b5cd8d0": "getWeaponDamageFromTokenId(uint256,uint256)", +"6b5d18fd": "getProposedIpfs(bytes32)", +"6b5d3287": "sellTokensForUsd(string,address,uint256,uint256)", +"6b5de05a": "tokensForTournament()", +"6b5e1a18": "payoutThreshold()", +"6b5e3ca4": "StaffWallet()", +"6b5e7b06": "getPenndingBalances()", +"6b60386d": "init(uint256,uint256,address,address,address,uint256,uint256,address,uint256,bool)", +"6b6093c2": "FreezeBalances(address)", +"6b61c3c7": "acceptBet(bytes32,bytes32,bytes32,bool)", +"6b628816": "getYumerium(address)", +"6b6292d9": "securityTokensPercent()", +"6b62cb1b": "createName(bytes32,address)", +"6b62cd65": "bankerAllDeposit()", +"6b634440": "tokensForPartners()", +"6b63d145": "OWNER_TOKENS_PERCENT()", +"6b6438cc": "payoutCursor_Id_()", +"6b64c769": "startAuction()", +"6b655e45": "getJuryMembers(uint256)", +"6b6566f0": "DiceOffline()", +"6b65a834": "ratePlanIsExist(uint256,uint256)", +"6b65be60": "usedPositions()", +"6b668601": "preSaleConversionRate()", +"6b676966": "tokenNeedForBonusLevel1()", +"6b683896": "getImplementation(string)", +"6b6872c7": "OeTestCoin()", +"6b68db6a": "FipsData(bytes20,address,bytes)", +"6b68dd4b": "tokensOfOwnerWithinRange(address,uint256,uint256)", +"6b693027": "collateralizations(address,uint256)", +"6b698377": "DogecoinPrivate()", +"6b69ac58": "upgradeHealth(uint256,uint256)", +"6b6a08dc": "hashRevealedPositions(uint32,int64[])", +"6b6a53fa": "testThrowsRestartNotOwner()", +"6b6b2740": "RetailLoyaltySystemBase(uint256,string,string,uint8)", +"6b6c5a7e": "getBracketData()", +"6b6cc239": "isMaintenanceMode()", +"6b6d294e": "worldCupResultPart3()", +"6b6d5c82": "encryptedBallots(uint256)", +"6b6e71b9": "makeTransaction(address,uint256,uint256)", +"6b6ece26": "ban(uint256)", +"6b6ee875": "tokenSealer(uint256)", +"6b6ef0ed": "transfer0(address,uint256)", +"6b6f4826": "minInvestmentICO()", +"6b6f4a9d": "discount()", +"6b7006d7": "lockMana(address,uint256)", +"6b709a36": "lockWorker(address,address)", +"6b7128ec": "getBetCount(uint256)", +"6b71d93b": "VerifiedProxy(uint256)", +"6b722a32": "christmasTree()", +"6b727312": "easyCommit(uint256,uint256,uint256)", +"6b7285d7": "transferP2P(uint256,address)", +"6b74401a": "BuyTokensDirect(address,uint72,uint88,uint88)", +"6b74c3d8": "getTxn(address,uint256,uint256)", +"6b755aa2": "reCommentRewardPool()", +"6b764632": "KongToken()", +"6b76484e": "swap(address,address)", +"6b76bd94": "CreateUser(string)", +"6b78aa08": "MarketHub(uint256)", +"6b790be4": "getWeightMinusFees()", +"6b792c4b": "emergencyWithdrawETH(uint256)", +"6b7976c8": "calculateObtainedINA(uint256)", +"6b7a247e": "setlvlSign(string)", +"6b7ae8dc": "foundationWallet()", +"6b7ae8e6": "left74(uint256)", +"6b7b0472": "getLastHash(bytes10)", +"6b7c0379": "HOPPToken()", +"6b7cc44f": "detail()", +"6b7d5205": "Diamond()", +"6b7d5dfd": "setTangibleAssetDisbursementAddress(address)", +"6b7d90ff": "unVerifyKyc(address)", +"6b7d9a5c": "createPromoPuppy(uint256,address,uint16,uint16,uint16,uint16)", +"6b7db8fc": "sendDividend(address,uint256)", +"6b7e4175": "EphronIndiaCoinICO(address,address,address)", +"6b7eba7d": "instantTransfer()", +"6b7f3a32": "Jojo(uint256,string,uint8,string)", +"6b7fad1b": "ethToDividendsNeeds()", +"6b7ffb92": "revote()", +"6b802108": "checkValidSignatureAndMethod(address,bytes)", +"6b8184e2": "ImpeachmentAccepted(address)", +"6b8263ed": "resumeOffering()", +"6b8287a6": "getetherpriceinUSD(address,uint256)", +"6b8393dd": "getSold(address,uint256)", +"6b845d7e": "updateWithdrawalMode(uint32[])", +"6b847dc0": "setDayWithdraw(uint256)", +"6b8487be": "GigToken(bool)", +"6b84dfcd": "setTransferRight(address[],address[])", +"6b863578": "noVoteSum()", +"6b872309": "x(address,uint256,address,uint256,bytes32,bytes32)", +"6b87d9f7": "BUBBLEToken()", +"6b881724": "assetWallet()", +"6b886888": "isTemporary(bytes8)", +"6b88719a": "PHOENIX_CORSAIR_FTL_SPEED()", +"6b889cce": "call_test()", +"6b88f4ae": "resetIndex(uint256)", +"6b89be03": "getActiveShareholdersArrayLength()", +"6b89bfc7": "getStatusOf(address)", +"6b8ab97d": "reset(address)", +"6b8b3268": "mintCrown(uint256)", +"6b8c261e": "prizeByNow()", +"6b8c4c48": "setDaxInBtcSatoshi(uint256)", +"6b8c7180": "setupPeriodForPreSale(uint256,uint256)", +"6b8cc89d": "INVESTMENT_USER2()", +"6b8ce30e": "partnerInfo_for_Owner(address,bytes32,uint8,bytes32,bytes32)", +"6b8da9a2": "tgrLive()", +"6b8f155a": "numberWhitelisted()", +"6b8f9c43": "setPayoutWallet(address)", +"6b8fd600": "priceOfElements(uint256[])", +"6b8fe0f0": "NewPlayer(address,uint256)", +"6b8ff574": "getName(uint256)", +"6b90ce93": "simulated_snt()", +"6b915d43": "melonToken()", +"6b9168e6": "clearAngelsFromBoard(uint16)", +"6b919488": "removeOwner(uint256)", +"6b930927": "preTgeTokenSupply()", +"6b931cad": "replaceAdministrator(address,address)", +"6b944bd6": "GoBlock()", +"6b946680": "parentKidsLink(uint256,string,string)", +"6b94692a": "isPresaleBuyer(address)", +"6b95767d": "giftSpaceship(uint16,address)", +"6b962c27": "transaction_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[4])", +"6b963f20": "changeOVISReservedToken(uint256,int256)", +"6b96668f": "setRateContract(address)", +"6b97be1f": "transferPayable(uint256)", +"6b97c6d7": "_transferOwnershipOfItemsStorage(address)", +"6b97e5eb": "UnicronToken()", +"6b9808a1": "buyWine()", +"6b98419a": "_approveFor(address,uint256)", +"6b9896ba": "AddAccountsInfo(address,uint256)", +"6b98c85c": "bltMasterToSale()", +"6b98d78c": "setLandSlogan(uint256,string)", +"6b99a13e": "editNumber(uint256)", +"6b9a1db9": "wanUnit()", +"6b9b1006": "TransactionRecorder()", +"6b9b2679": "setReserveForFoundersFirst(address)", +"6b9c1d22": "managementFeeWallet()", +"6b9c6116": "PULSCrowdsale()", +"6b9c9b9c": "TerraByte()", +"6b9cadc1": "isValidMsgValue(uint256)", +"6b9cf534": "_minimumBuyAmount()", +"6b9da657": "sendNewEntry(string)", +"6b9db4e6": "getLock(address)", +"6b9f96ea": "flush()", +"6ba0b4f2": "isKnownSelector(bytes4)", +"6ba0b8bc": "getBonusPercent(uint256,uint256)", +"6ba0f114": "EtherChain()", +"6ba15807": "evntCreateContract(address,address,address,address,uint256,string)", +"6ba20015": "maxplayers()", +"6ba2482d": "GetUserNickName(address)", +"6ba2aefc": "transferMultisig(address,address,uint256)", +"6ba42aaa": "isKeeper(address)", +"6ba44d3c": "get_address(string)", +"6ba47299": "buyDiscountTTWByETH(uint256,address)", +"6ba4c290": "modifyEscrowPrice(uint256,uint256,uint256)", +"6ba4f143": "_setAuraValue23(uint256)", +"6ba4fadb": "changePhaseToPreICO2()", +"6ba55c6d": "coinIssuedFoundation()", +"6ba5ef0d": "setMin(uint96)", +"6ba6984c": "setHBT(uint256)", +"6ba6e2e0": "TGCToken(address)", +"6ba75608": "claimAssetPack(uint256)", +"6ba7d28a": "checkVestingWithFrozen(address)", +"6ba7e31c": "PriceSet(string,uint64,uint8)", +"6ba7ffd5": "requestCnt()", +"6ba8d421": "transferHackoinTokenOwnership(address)", +"6ba951c4": "EtherModifierTigro()", +"6ba9a40b": "withDrawBalance(uint256)", +"6ba9fd38": "openMinting()", +"6baa0f8e": "createSystemAuction(uint256)", +"6baa2ff7": "preSale(address,uint256)", +"6baae8e5": "_prand(uint256)", +"6bacc0fa": "hasSaleEnded()", +"6bacdc87": "InterestFreeLending(address,address,uint256,uint256)", +"6bacfe43": "getCCH_edit_16()", +"6bad77e1": "getNumProducts()", +"6bad8ed8": "freezingPercentage()", +"6bae05cf": "preRegister(address)", +"6bae116f": "getBonusMultipierInPercents(uint256)", +"6bb0ae10": "print(uint256)", +"6bb15940": "getCurrentSaleRate()", +"6bb1605b": "filehash()", +"6bb164c9": "isCantonEmployee(address)", +"6bb20f9b": "searchWhitelist(address,address)", +"6bb27584": "capRound1()", +"6bb2c12f": "createRequest(address[4],address,uint256[12],uint256,bytes)", +"6bb3130e": "disbursementWei()", +"6bb35840": "PowerGiggs()", +"6bb3c065": "round4Sold()", +"6bb4cf76": "createToken(string,string,uint8,address[],uint256[],uint256[])", +"6bb4d573": "evMinTokensReached(address,uint256,uint256)", +"6bb50f4c": "_openGamePlayNo(uint256)", +"6bb53c90": "ticket(uint256,uint256,uint256,uint256,uint256)", +"6bb56e8b": "crowdsaleEth()", +"6bb60475": "_insertSortMemory(uint32[11])", +"6bb6126e": "exec(address)", +"6bb6ea30": "createInterceptor()", +"6bb72c97": "numTokensInLottery()", +"6bb7b7a4": "rare()", +"6bb7f336": "updateUnsoldTokens()", +"6bb7f98e": "getHighestMilesOwnerAt(uint256)", +"6bb80acc": "_createCovfefe(string,string,uint16,address,uint256)", +"6bb80d51": "dividendPercentage()", +"6bb82e82": "addToWhitelist(address,uint256,bool)", +"6bb9b9ab": "getTodayDividendsByAddress(address)", +"6bba3f2f": "kappa()", +"6bba5c15": "changeParameters(uint256,uint8,uint256,uint256,uint256)", +"6bbadf09": "addPokemonDetails(string,uint256,uint256)", +"6bbae823": "LIMIT_STAR4()", +"6bbbc182": "addVerified(address[])", +"6bbbec85": "updateGameMeta(uint256,string,string)", +"6bbc5748": "FeeChanged(uint256)", +"6bbe0410": "NewTransaction(string,uint64,string,uint64,uint8)", +"6bbe24d4": "dataSourceGetQuarterResult(uint256)", +"6bbe6f7f": "buyCoinsPreview(uint256)", +"6bbea781": "getApproveValueFor(address)", +"6bbeb9de": "loginUser(address)", +"6bbeba8a": "setService(bytes,address)", +"6bbf54a4": "PCF()", +"6bbf592d": "bytesCallWithArray(bytes32[4])", +"6bc02730": "approveBreeding(address,uint256)", +"6bc0b3ba": "jackpotAddress()", +"6bc0f7fb": "isProxyLegit(address,address)", +"6bc138f6": "getNumberOfIds()", +"6bc1f1e4": "updatePriceAndInventories(uint256,uint256,uint256,uint256,uint256,uint16)", +"6bc21808": "CategoryAuction(address)", +"6bc2805d": "cancelAllEnter()", +"6bc31311": "EFFCoin(address)", +"6bc32c7b": "get_train_data_length()", +"6bc344bc": "payforflag(string)", +"6bc388b2": "canFreeze(address)", +"6bc3b437": "newService(string,string)", +"6bc3e0f0": "verifySecondHalf(uint256[4],uint256[4],uint256[4])", +"6bc3e4a8": "claimMultiple(address,uint256)", +"6bc46fb2": "totalHatcheryShrimp()", +"6bc5063c": "VestedTokensReleased(address,uint256)", +"6bc507b1": "getBlackflag(uint256,address)", +"6bc59f13": "transferFromChangeAllowanceTest(address)", +"6bc5b964": "getMemberWhisper(address)", +"6bc5c0cd": "releaseBonus()", +"6bc6147e": "unlockMainSaleToken()", +"6bc64e0f": "preSaleEnd()", +"6bc65778": "getAllProductList()", +"6bc789cd": "getONG_AUDIT(bytes32)", +"6bc85107": "isMemberInDescendant(address,bytes32)", +"6bc8a260": "getUserWinInTournament(uint256)", +"6bc99824": "VoltToken()", +"6bc9b0d7": "getPromiseIds(uint256,uint256,address,bool)", +"6bca81d4": "revealBid(bytes32,address,uint256,address,address,bytes32,uint256,uint256)", +"6bcaaed9": "PetmancoinToken()", +"6bcab76c": "setDApp(address)", +"6bcc035a": "getStatusAndOutcome()", +"6bcc28a9": "kittensRemainingToDrop()", +"6bcc311c": "tokensForBonus()", +"6bcc7241": "getPriceWei(uint256)", +"6bce23be": "setupTokenRate(uint256)", +"6bce6569": "reservedPercentTotal()", +"6bce8a96": "whitelistedAddressCount()", +"6bceead7": "setSquareWins(uint256,uint256,uint256)", +"6bd0021c": "bonusPhase()", +"6bd31a56": "hardCapLowUsd()", +"6bd37274": "Pixiu_Beta()", +"6bd3a1c3": "PresiamDrop()", +"6bd3d406": "totalPresale()", +"6bd46bd2": "setTokenBurnFeeReceiver(address,address,address,address)", +"6bd484c4": "oracleCallbackGasLimit()", +"6bd4dfce": "setStarterClass(uint256,uint32)", +"6bd5084a": "number_of_claims()", +"6bd50cef": "getConfiguration()", +"6bd58db5": "Total_Patient(uint256)", +"6bd5e26a": "lockTo(address,string)", +"6bd61a66": "nonHighestBidderRefund()", +"6bd6775f": "Presale(address,address,address,address,uint256,uint256)", +"6bd68a8f": "referralAmount()", +"6bd70a1f": "MIN_IVESTMENT()", +"6bd7e7dd": "CatBought(uint256,uint256,address,address)", +"6bd7eeeb": "maximumTokensForFirst()", +"6bd87c86": "Try2222()", +"6bd8fd12": "currentMinBid()", +"6bd92f7c": "activateAllowanceRecord(address,address)", +"6bd9b4da": "setMinETHin(uint256)", +"6bda3422": "Token(uint256,string,string)", +"6bdaa520": "forciblyRequest_callback()", +"6bdbc918": "BaseTransactionService(address,address)", +"6bdbf8e6": "concat()", +"6bdc06f5": "cancelRegistration(address)", +"6bdc1d2a": "GoldRex()", +"6bdc62b9": "composeJingle(string,uint256[5])", +"6bdc9546": "setCommunicationUri(bytes32)", +"6bdcdb2d": "getAutomatedReportDueTimestamp()", +"6bdcdeaa": "setMagicStore(address,address)", +"6bdd44aa": "createCard(string,uint256)", +"6bde2e7f": "_setBodyColorValue3(uint256)", +"6bdea7eb": "AddBonus(uint256)", +"6bdebcc9": "destory()", +"6bdee200": "enableTicker()", +"6bdee235": "Zeroexchange()", +"6bdfd723": "getNewEnglandBets(address)", +"6be00229": "exitAddress()", +"6be03bd2": "configTimeInc()", +"6be050d2": "FibokenUsed(uint8,address,uint256)", +"6be0c670": "chipSize()", +"6be13c92": "coldWallet()", +"6be202cf": "addSomeDETsTo(address,uint256)", +"6be24a47": "create(address,address,address,address,address,address,address,string,string,string)", +"6be2f28e": "totalAmountOfWeiCollected()", +"6be32e73": "tokenCallback(address,uint256,bytes)", +"6be343cc": "setFoundAcc(address)", +"6be39bda": "getTerms(bytes32)", +"6be4097c": "currentLotteryId()", +"6be422b2": "determinReferrer(address)", +"6be47418": "latchFciUserController(uint256,address)", +"6be47618": "deleteContract(uint8[],bytes32[],bytes32[])", +"6be4cf1f": "buyTokensFor(address)", +"6be4d9b0": "changeResolverAllowances(address[],uint256[])", +"6be505f5": "selectWinner(bytes32)", +"6be598b4": "SIGTToken()", +"6be5f4a6": "checkVictoryByScore(uint256)", +"6be60f8b": "underwrite(uint256)", +"6be67db3": "contractNameUpdate(string,bool)", +"6be6fa14": "getTransferFromValueValue()", +"6be7eeba": "Vtoken(uint256,string,uint8,string)", +"6be80de7": "investorIDs(address)", +"6be82168": "NeycoinToken()", +"6be86f21": "bonussale_TokesSold()", +"6be9564a": "ListingBought(bytes5,uint256,uint256,address)", +"6be99794": "getTransferToValue()", +"6be9a8df": "GetGuestQueueNumber()", +"6be9f7a0": "emitDeposited(address,uint256,address)", +"6bea0b79": "getAccountData(address,string)", +"6bea8215": "createGenerator(uint256,string,uint256,uint256,uint256)", +"6bea989d": "AUTH_FREEZEACCOUNT()", +"6bea9d81": "BLOCKPIX_Coin()", +"6beace8f": "AllocateFounderTokens(address,uint256)", +"6beadfc7": "approveandcall(address,uint256)", +"6beb509d": "updateCanRefund(bool)", +"6bec32da": "mintToken(address,address,uint256)", +"6bec454a": "buyCity(uint256)", +"6bec51cc": "generate(address,address,uint256)", +"6bece548": "preSaleBonus1Time()", +"6bed09be": "buyTokensUpdateState()", +"6bed6de5": "sendObjectWithApproval(uint256,address)", +"6bedb845": "MultiSig()", +"6bee2cc3": "registerLottery(uint256)", +"6bee5131": "FW(uint256,string,uint8,string)", +"6bee73db": "testAllowance()", +"6bee76ea": "withdrawBond(address,uint256,uint256)", +"6bee9cfa": "offsetFeeRate()", +"6bef2a94": "earlyPurchaseTokenAmount()", +"6bef90f8": "VUP_PER_ETH_BASE_RATE()", +"6befa297": "WCT1(address)", +"6bf006c8": "capReached(uint256)", +"6bf06fde": "transferToNewContract(address,uint8,bytes32,bytes32,bool)", +"6bf0873a": "birth(uint256,uint64[])", +"6bf0a3bf": "LIQUID_ALLOCATION_PPM()", +"6bf0c7fd": "getBracket(address)", +"6bf0f4a1": "roll(uint8)", +"6bf13959": "endAtCheck(uint256)", +"6bf20a77": "unfrozenATAccount(address,address)", +"6bf2606a": "PATCH_VERSION()", +"6bf30259": "checkIncentivisingBalance()", +"6bf32504": "markAsFailed(string)", +"6bf341e7": "_fundowner()", +"6bf4223b": "getRoundEnd(uint256)", +"6bf42646": "holdTokenInvestorsCount()", +"6bf42ea5": "TokensBought(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6bf4398d": "saniwallet()", +"6bf51a18": "stepLockCheck()", +"6bf52ffa": "Vote()", +"6bf5595d": "CrowdSale(uint256,uint256,uint256,address)", +"6bf6dd6f": "associate(bytes32,bytes32[],address[])", +"6bf807fc": "unlockTimes(address)", +"6bf82d74": "ethFundMain()", +"6bf84e51": "BECEXTEAMTOKENS()", +"6bf8b92d": "changeSeed(uint32)", +"6bf8bfab": "DutchAuction(address,uint256,uint256)", +"6bf8f85a": "forceFinish()", +"6bf91c63": "configOf(uint64)", +"6bf99bbf": "ICOResumed(uint256,uint256,uint256,uint256,uint256)", +"6bf9b3e7": "approveWithdraw(address,address,uint256)", +"6bf9b731": "claimFor(address,address,address)", +"6bf9e633": "winnerIsA()", +"6bfa379e": "readyTokens(address)", +"6bfa5edc": "operatingOfficerAddress()", +"6bfaa903": "increaseOwnershipTokenCount(address)", +"6bfae928": "calcReserve(uint256,uint256,uint256)", +"6bfb0d01": "itemCount()", +"6bfbbdf5": "DutchAuctionToCraft(address,address,address)", +"6bfbc9f7": "HongToken(uint256,string,uint8,string)", +"6bfbf5e6": "levelChanger()", +"6bfc8bb5": "setIPFSHash(bytes32,string)", +"6bfc9561": "sellStake()", +"6bfd9716": "SaleTracker(bool)", +"6bfdb7eb": "getBeneficiary(address,address)", +"6bfdd3dd": "_sanMint(uint256,address,string,string)", +"6bfe6bc0": "setEthPricies(uint8)", +"6bfee863": "CipherToken(uint256,string,string)", +"6bff1901": "coreTeamSupply()", +"6bff6575": "DaysToNextDestroy()", +"6c00161a": "distributeWithMilestone(address,uint256,uint8)", +"6c00bb44": "AuctionSuccessful(address,uint256,uint256,address)", +"6c012923": "feeForSplitterCreation()", +"6c021968": "RefundTransfer(uint256,uint256,uint256,address)", +"6c026f59": "ii()", +"6c02a931": "tokenName()", +"6c0360eb": "baseURI()", +"6c03cd49": "getInviteRate()", +"6c04066f": "BlockLockSet(uint256)", +"6c042689": "endStage1()", +"6c043773": "sendPacket(address,bytes)", +"6c047c36": "evaluateProposalMetricStart(uint256)", +"6c049b89": "toggleCrossForking()", +"6c04c1c9": "LuckyEthereumLotteryToken()", +"6c050eae": "look()", +"6c052cd8": "getGroupMembers(bytes32)", +"6c054113": "setPhaseSale(uint256,uint256,uint256)", +"6c054ad0": "createContractor(address,address,bool,address,string,string,bool)", +"6c055ce2": "withdrawToPartner(address,uint256)", +"6c060a7a": "_batchPopularitySetting(uint256[],uint8[])", +"6c062806": "addAdminAddress(address,address)", +"6c062cc7": "Forge()", +"6c064d63": "_setCompositionPrice(uint256,uint256)", +"6c08729e": "TransferToSAToE(address,uint256)", +"6c08faf7": "getCaseCount()", +"6c096192": "fetchCreatedOrdersForPayer(address)", +"6c0a1117": "doCancelAll()", +"6c0a1605": "EthTurnWCG(uint256)", +"6c0b1e8c": "VESTING_START_TIME()", +"6c0b66b9": "PGO_UNLOCKED_LIQUIDITY_CAP()", +"6c0c27e1": "acceptBet(uint256)", +"6c0d2c8b": "getHeroPower(uint256,uint256)", +"6c0daed8": "getRate(string)", +"6c0db60e": "CatexToken()", +"6c0e1ccd": "getAllCitizens()", +"6c0eb56f": "LOG_EmergencyWithdrawalProposed()", +"6c0ebc6c": "perform_withdrawal(address)", +"6c0f7ee7": "multiAddDSource(bytes32[],uint256[])", +"6c10dcdf": "ProvidenceCasinoToken()", +"6c118f46": "TimeWindowUpdated(uint256,uint256)", +"6c11bcd3": "sellTokens(uint256)", +"6c1247e5": "databaseContract()", +"6c131dbe": "multiMint(int256,uint256[])", +"6c1334bf": "SetDescript(string,string)", +"6c13b5f2": "totalReceive()", +"6c1475ad": "tryAdvance()", +"6c14bb42": "buyAutos(uint256)", +"6c14f2d1": "m_ETHPriceLastUpdateRequest()", +"6c150f42": "initLeftICOTokens()", +"6c15e8e6": "GlobalConstraintRegistrar(int256)", +"6c169818": "isFreezeAccount(address)", +"6c16c740": "Start9()", +"6c172095": "gameCenter()", +"6c17729b": "JoygoEOS(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"6c17b018": "airDrop(uint32,uint64)", +"6c182e99": "lastTokenIsTransferableDate(address)", +"6c188593": "setMinBetAmount(uint256)", +"6c189c46": "releaseAmisToken()", +"6c18cc1e": "firstSellHSShop(uint256,uint256,uint256)", +"6c194b59": "lastTransactionRec()", +"6c197ff5": "sell(address,uint256)", +"6c19e783": "setSigner(address)", +"6c1a5b8c": "TOKEN_TARGET()", +"6c1c6d93": "setVipAddress(address,address)", +"6c1c86f7": "PlanEX()", +"6c1d0157": "distributeMoney(address,address,uint256)", +"6c1d4fd9": "advisorsTokensThirdReleaseTime()", +"6c1e039a": "playerRoll(uint8,uint8,address)", +"6c1f05d2": "breakIdMaintenance(int128,address)", +"6c1f27fe": "icoBonus5()", +"6c1f2fb3": "ico3Sold()", +"6c1ff101": "Crowd()", +"6c204fd7": "certifyMany(bytes32[])", +"6c2066bf": "MAX_TOKENS_ADVISORS_PARTNERS()", +"6c20ceb4": "DeltaChainToken()", +"6c20d755": "getItemRafflePlayers(uint256)", +"6c20fcdd": "MerkleTreeRootAdded(uint8,bytes)", +"6c2187e7": "GameEnded(uint256,address,uint256,uint256,uint8,uint8)", +"6c224487": "DEHT()", +"6c226eef": "_processGameEnd()", +"6c231060": "buyCar(uint256)", +"6c237c1c": "admin_token_burn(uint256)", +"6c23c7b0": "canOperatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", +"6c2412ae": "GetChipInfo(uint32)", +"6c241bb1": "getCityData(uint256)", +"6c24a76f": "getAvailableBalance(address)", +"6c24c87d": "latestSenderOf(uint256)", +"6c24d0e6": "toTimestamp(uint256,uint256,uint256,uint256,uint256,uint256)", +"6c24e2db": "maskpot()", +"6c26493c": "MyTestToken1()", +"6c265dc3": "calcFeeE8(uint64,uint256,address)", +"6c26df09": "addFootballMatch(uint256)", +"6c27149f": "testInt(uint256)", +"6c27b211": "registerBalanceForReference(address,uint256)", +"6c286ff1": "removeCrowdsales(address,address)", +"6c28faee": "migration(address,uint256,bool)", +"6c295936": "changeOptional(uint40,uint64)", +"6c295e34": "Add_Doctor(uint256,uint256,string,string,string)", +"6c29d714": "totalMarketplaces()", +"6c2af4e5": "MithrilAxe()", +"6c2b04fd": "isGovernment(address)", +"6c2bcfdd": "MAXSALESCAP()", +"6c2c5a19": "addCarSigned(string,string,string,uint16,string,address,bytes32,bytes32,uint8)", +"6c2d5d26": "symbol(address,bytes32)", +"6c2ec9ef": "guess_tx(bytes32)", +"6c2f64fe": "removeContractAddress(address,address)", +"6c303e1b": "Bitescia()", +"6c3051c9": "setWonTeam(uint256)", +"6c30ba53": "setTitulaire_Compte_4(uint256)", +"6c30d170": "renounceIssuance()", +"6c30f765": "testing(uint256)", +"6c326a46": "prizeFundHWC()", +"6c32c0a6": "gap()", +"6c32e01c": "sendJackpot(address,uint256)", +"6c33e7eb": "setMockAddress(bytes4,address)", +"6c341889": "toUint(bytes,bytes,uint256)", +"6c343afc": "destTokens(address)", +"6c343ffe": "withdrawfunds()", +"6c349e57": "addrunmoney(address,uint256,uint256,uint256)", +"6c34c97a": "setFIRST_STEP_LIMIT(uint256)", +"6c376cc5": "maintenance()", +"6c3772fd": "totalpaidout()", +"6c3824ef": "removeTokens(address[])", +"6c38d4e4": "pauseMint(uint256)", +"6c3919fc": "getProviderCurrentRate(uint256)", +"6c39b7ee": "gamesPlayed()", +"6c3a208d": "VistaToken()", +"6c3a4b80": "canBePurchasedByETH(uint32)", +"6c3aaab7": "snailPot()", +"6c3aacf9": "getTokenToEthOrder(uint32)", +"6c3b6591": "right83(uint256)", +"6c3c221b": "setFunctionTwoPrice(uint256)", +"6c3e6a75": "forceBonds(address)", +"6c3e6e0c": "iconomiTokenSupply()", +"6c3e8e19": "_vestedAmount(address)", +"6c3ea721": "memberHasRight(address,string)", +"6c4019f4": "createContest(string,address,uint32,uint64,uint64,uint128,uint128,uint32,uint32,uint8,uint32[])", +"6c4040c5": "firstSaleSpenderTxDetails(uint256)", +"6c419326": "STC(address,uint256,uint256,uint256)", +"6c43a2ca": "increaseAllowance(address,address,uint256)", +"6c4470fb": "participants()", +"6c456d0f": "getERCContractAddress()", +"6c457528": "createUsername(string)", +"6c463635": "getDistValues(string)", +"6c464c3d": "recieveRelocation(address,uint256)", +"6c46a2c5": "addOwners(address[])", +"6c46ae22": "phasePublicSale3_To()", +"6c4820bb": "callModifiedWithdraw(uint256)", +"6c48a097": "amount_investments()", +"6c494843": "multiAccessChangeOwnerD(address,address,address)", +"6c4b3197": "getSecureFees()", +"6c4be791": "hasAirdrop(address)", +"6c4bf16b": "icoOwner()", +"6c4c174f": "hack(address)", +"6c4ceaff": "getSourceHash(uint256,uint256,uint256)", +"6c4d032e": "SOFTCAP_TIME()", +"6c4d0c00": "wasGoalReached()", +"6c4d4f21": "setVotingProxy(address)", +"6c4d7c59": "getBetProps(bytes32)", +"6c4db7cc": "sendFoundersBalance(address[],uint256[])", +"6c4dfffe": "BIKS(uint256,string,uint8,string)", +"6c4e5c86": "decreaseLockBalance(address,uint256)", +"6c4e838a": "wantNewTokens(uint256[])", +"6c4e86af": "dailyGrowth_ppm()", +"6c4eca27": "tokenTransfer()", +"6c4ef21e": "canUnstakePartial(address,uint256,uint256,bytes8,uint256,uint256,uint256,uint256)", +"6c4f5e51": "testingContracts2(string)", +"6c4f8c65": "DeviceIsActivated(address)", +"6c4fbaa4": "requestCore()", +"6c4fe255": "p_setMaxInvestment(uint256)", +"6c5077b1": "MintPaused(bool)", +"6c5091e3": "getERC721AddrPawn(uint256,address)", +"6c50bc2e": "getGeneralLength()", +"6c510377": "transferOutAllEthers()", +"6c51af67": "setPOOL_edit_17(string)", +"6c525b13": "unregisterSelf(address)", +"6c525d04": "endMigration()", +"6c526503": "AmountRaised()", +"6c52660d": "checkIfNameValid(string)", +"6c530ee3": "weiPerEth()", +"6c5376c9": "addPassword(string,string,string)", +"6c543c08": "_emitSkillCategoriesSet(address,uint256,uint256)", +"6c54d1c1": "KRYPSTRONG()", +"6c54df52": "getCurrentPrice(address,uint256)", +"6c5541b5": "changeSpender(address)", +"6c556859": "createGame(string,string,uint256,uint256,string,string,string,string)", +"6c55e385": "minimalFreeze()", +"6c5649d8": "setCommunityBallotCentsPrice(uint256)", +"6c56a3f1": "startRelease()", +"6c56bf3e": "CreateARCD(address,uint256)", +"6c56bfc0": "InitiateGame()", +"6c572104": "TotalSantaCoinsGivenByNorthPole()", +"6c57c01f": "MAXIMUM_CONTRIBUTION()", +"6c57dbaa": "_max(uint256,uint8,uint256)", +"6c57f5a9": "isDisabled()", +"6c587491": "playGame(address,uint256)", +"6c595451": "addApp(string,address,uint256)", +"6c597e41": "getCreditBitAddress()", +"6c59fb29": "allocateToken()", +"6c5a7d1e": "setDisabled(bool)", +"6c5aad6e": "fetchOrderByIdWithMerchantByAdmin(string,address)", +"6c5aaf50": "getDelegateDetails(address)", +"6c5af719": "getHoldEarnings(address)", +"6c5b685f": "icoPart()", +"6c5bde2a": "CoInsureBlockToken()", +"6c5c671f": "cancelIntl()", +"6c5ca1fa": "exchangeRateRoundOne()", +"6c5ccfe8": "distributeFundsInEscrow(address,address,uint256,address)", +"6c5d2787": "setTymTokensPercent(uint256)", +"6c5d6156": "burn(address[])", +"6c5dc78b": "setPublicSaleFinishDate(uint256)", +"6c5dee17": "getFileAt(uint256)", +"6c5e9ac1": "cmpEq(uint256,uint256,bool)", +"6c5e9e18": "_phase1Supply()", +"6c5f71c7": "numberOfPingsReceived()", +"6c5f8394": "DeneumToken()", +"6c609906": "getTotalTokensAgainstAddress(address)", +"6c6101fd": "ContractManagementUpdate(string,address,address,bool)", +"6c610f53": "getMinUnitPrice(uint8)", +"6c617048": "reinvestFor(address)", +"6c61d60f": "directTransfer(address,uint256)", +"6c626ec6": "removeWinner(address,address,address)", +"6c6288e4": "Thechampcoin()", +"6c6295b8": "setValidRateDurationInBlocks(uint256)", +"6c64a678": "unfreezeToken()", +"6c658a2c": "UpdateICOPhase(address,uint256,uint256)", +"6c65c455": "swapETHMKR(uint256,uint256)", +"6c65fd6a": "isFreezer(address)", +"6c675ae6": "tokens_buy()", +"6c677d82": "SpentTokens(address,address,uint256)", +"6c68b5d5": "TicketOwner(uint256,uint256)", +"6c68c837": "verifyBalanceProof(address,uint32,uint192,bytes)", +"6c690142": "redeemAllowedInternal(address,address,uint256)", +"6c698882": "getActualNum(uint256)", +"6c699905": "revealWinner()", +"6c69ab24": "multitokensCount()", +"6c6b23d2": "updateBalances(address,address)", +"6c6b298a": "getMigrateInBonusIfInForkWindowValue()", +"6c6b9870": "updAirDropTokenEnabled(bool)", +"6c6c21af": "CappedCrowdsale(uint256,uint256,uint256)", +"6c6c39fb": "votersLength()", +"6c6c7e05": "amountLocked()", +"6c6ce21a": "setInvoice(bytes32,uint256,bool,string,string,string,string)", +"6c6d2653": "CrowdsaleChanged(address,address)", +"6c6e5108": "StoriqaCash()", +"6c6eb9d1": "base(uint256)", +"6c6f1d93": "getContractCreationValue()", +"6c6f31f2": "allow(address,uint256)", +"6c6f360e": "userRegister()", +"6c6fbd70": "EnergiToken()", +"6c7018cf": "single_card()", +"6c706093": "logUniverseCreatedCalled()", +"6c70abda": "use(uint8,uint8,uint8,uint8[176])", +"6c70ad0d": "PublicMineCallsCount()", +"6c7113e4": "getFundManager()", +"6c712471": "testControlRetractLatestRevisionEnforceRevisions()", +"6c71b1aa": "setGasReq(uint256)", +"6c71d01d": "ratings(bytes32)", +"6c720446": "isVotingPrepare()", +"6c7272ce": "registerVendor(address,address)", +"6c73d230": "logResult(string)", +"6c741950": "setTTL(uint256)", +"6c749c26": "EXA()", +"6c74e341": "setFoundingTeam(uint256[],address[])", +"6c751622": "MacQueenToken()", +"6c7521cb": "updateReputationScoreInBulk(address[],uint256[])", +"6c767f20": "playerOneReveal(bytes32,bytes32)", +"6c768200": "burnByOwner(address)", +"6c76b8f4": "_changeReward(uint256)", +"6c779d57": "levelSplits(uint256)", +"6c77f989": "joinLottery()", +"6c780868": "getBurnLine()", +"6c784995": "getBeneficiaryMarket()", +"6c786b65": "bonusAccountCount()", +"6c787229": "availableOwnerWithdraw()", +"6c788a0d": "bookingFee()", +"6c789092": "Resource(bytes32,bytes32,bytes32,address)", +"6c78cb81": "ETCToken(address)", +"6c78da22": "getPrefixPrice(string)", +"6c79e379": "setGallerySevenPrice(uint256)", +"6c7afaba": "regSpots(uint16,uint16,bytes32)", +"6c7bc902": "tgrCurrentPartInvestor()", +"6c7c7c73": "bePure(uint256,uint256)", +"6c7c909f": "FreshWaterFlow()", +"6c7ca99f": "RequestBankrollPayment(address,uint256,uint256)", +"6c7cc6d8": "sell(uint256,address,bool)", +"6c7d4c4c": "unwhitelistAddress(address,address)", +"6c7dde15": "validPayBuff()", +"6c7de422": "investmoretokens()", +"6c7e0236": "isNotaryVeredictValid(address,address,address,bool,bool,bytes)", +"6c7e7082": "overflowAmount()", +"6c7f1542": "balanceOf(bytes32)", +"6c7f3f17": "totalBuys()", +"6c811247": "showPlayerSafeByAddress(address,uint256)", +"6c814509": "setAdAccount(address)", +"6c81fd6d": "AddModerator(address)", +"6c82337e": "payJackpot4()", +"6c825035": "withdrawLRC()", +"6c830f4b": "getCompletedTasks()", +"6c83444d": "FLOQI()", +"6c8381f8": "candidate()", +"6c8429fd": "jpMinBet()", +"6c843605": "BrownieCoin()", +"6c84a4bf": "tokenContributionCap()", +"6c84ae04": "setFirstYearAllowancePercentage(uint8)", +"6c85acec": "RNCTokenERC20(uint256,string,string)", +"6c85c727": "removeBankroll(uint256,string)", +"6c85cf67": "canTransfer(address,address)", +"6c86888b": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"6c86ac5a": "getPublicData(uint256)", +"6c8716d8": "etherLowLimit()", +"6c876e5d": "s2(bytes1)", +"6c8830c5": "_maxtotalSupply()", +"6c8a59f2": "addresses6(uint256)", +"6c8ae38c": "r()", +"6c8b052a": "numStakers()", +"6c8b37eb": "MTRCToken(address,string,string,uint256,uint256)", +"6c8b4e60": "communityLock()", +"6c8d0b1e": "getSubscriberStatus()", +"6c8d0bcf": "getUserDAOsId(address,uint256)", +"6c8d65dc": "phepsToken()", +"6c8dea3b": "claim_ENS_name()", +"6c8e44c3": "ProductionUnitToken(address,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"6c8e53e0": "PreSale()", +"6c8f093d": "PayForServiceCHLEvent(address,uint256)", +"6c8f455c": "checkMembership(bytes32,uint256,bytes32,bytes)", +"6c90c3df": "setCanClaim(bool,bool)", +"6c90fe09": "CcoindDigital()", +"6c912080": "minListingSeconds()", +"6c922038": "CMAPToken()", +"6c9230db": "getCurrentTimestamp()", +"6c94d0e4": "INBETToken()", +"6c953719": "CCASH(uint256,string,string)", +"6c958f74": "tokensOfferedOf()", +"6c963fc7": "PoWAdvCoinToken()", +"6c965a81": "claim(address,bytes32,string,bool,uint256,bytes32,uint256,bytes)", +"6c973248": "getVoteCount(uint256,uint256,uint256)", +"6c9740c1": "transferOwnership(address,uint8)", +"6c9784b1": "_getTokenRaised(uint256)", +"6c9789b0": "finalize(bool)", +"6c97a812": "UTExchangeRate()", +"6c97b731": "TimeEndChanged(string,uint256)", +"6c97c237": "firstSellSaddleShop(uint256,uint256,uint256)", +"6c981488": "paymentPeriods()", +"6c996bbd": "disputeOpened(address)", +"6c99b0da": "setFWDaddrETH(address)", +"6c9a1e2a": "setPOOL_edit_12(string)", +"6c9a5c61": "resolveExpiredBets(uint256)", +"6c9c1d41": "checkServiceFee(address)", +"6c9c2faf": "getSupply()", +"6c9c5944": "freeze(address,uint256,uint256,uint256)", +"6c9c97d8": "refundByToken(uint256)", +"6c9cb82f": "freeCash()", +"6c9d99da": "teamTokensWallet()", +"6c9e27d6": "ALLOC_WINGS()", +"6c9e89b6": "addVesting(address[],uint256[],uint256[])", +"6c9eafe7": "stillAllowed()", +"6c9f65c5": "getBidInfo(uint32)", +"6c9fa59e": "shareToken()", +"6c9fca89": "updateAppInstance(bytes32)", +"6ca0101e": "unopened_bid()", +"6ca06072": "getAttributeAdminAddr(address,bytes32)", +"6ca0a099": "getInitialBlockHeight(uint256)", +"6ca0f321": "setValue1(uint256)", +"6ca100fb": "firstWeekMainICOBonusEstimate()", +"6ca13df1": "decreaseOwnershipTokenCount(address,address)", +"6ca1f933": "setTest(uint256)", +"6ca32280": "percentageBuyBackFund()", +"6ca34ea2": "balances_(address)", +"6ca35ae4": "addDoctor(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"6ca3b5f6": "set_maxgasprice(uint256)", +"6ca3daf2": "_vouchersDistributed(uint16)", +"6ca3fc3b": "distributePrizes(uint256)", +"6ca562d6": "switchCompatible223ex(bool)", +"6ca596fa": "isPreICOClosed()", +"6ca5b5b0": "r1()", +"6ca5bdf2": "testIntDynArray(int256[])", +"6ca621bd": "setEmbassy(address)", +"6ca78a1c": "anyRequestAvailable()", +"6ca78a1e": "setBorrowerReturnEthPerFiatRate(uint256)", +"6ca7b99b": "getDirection(uint256,uint256)", +"6ca7c216": "gas()", +"6caa2bda": "OxyToken()", +"6caa736b": "fundDeposit()", +"6caabc6f": "addCompany(string,address,uint256)", +"6caca63a": "WhiteTigerToken()", +"6cad3fb0": "updateFeePercentage(uint256)", +"6cadd040": "EtherAuction()", +"6caddb04": "orders(uint256,address)", +"6cae8f67": "setSellableToken(address)", +"6caed305": "changeBonus(uint256,uint256)", +"6caf25ce": "price1()", +"6caf3673": "getPlayerSpaceshipBattleStakeById(uint256)", +"6cb04993": "forceNeuroChainAddress(address,string)", +"6cb0e9f0": "TXToken(address)", +"6cb136ba": "isActive(uint16)", +"6cb1630f": "withdrowTokens()", +"6cb24199": "withdraw(bytes32,uint256,address,uint256,address)", +"6cb30fee": "nettingContractsByAddress(address)", +"6cb31171": "_currentHalfYear()", +"6cb39448": "getMarketerKey()", +"6cb3c94e": "Filler()", +"6cb3d30a": "triggerTryAuth()", +"6cb3e8ef": "getApprovers()", +"6cb45694": "LogDisbursement(address,uint256)", +"6cb520c6": "_play(string,uint256)", +"6cb5291e": "ICO_PRICE1()", +"6cb5714c": "_sendByTranche(bytes32,address,address,address,uint256,bytes,bytes)", +"6cb5d070": "getCoinsSinceLastHatch(address)", +"6cb69c2c": "setDevTokensWallet(address)", +"6cb69f42": "getSystemInfo()", +"6cb6ea82": "CBITokenCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"6cb7223c": "maxPurchaseOnce()", +"6cb76408": "returned()", +"6cb78983": "purchaseMIT(address)", +"6cb90a2c": "pre_ico()", +"6cb942ab": "GameItemNew()", +"6cba45b8": "setDayFirst()", +"6cbad471": "Rappo()", +"6cbae51b": "firstPreSaleDate2()", +"6cbaecbd": "normalRoomMin()", +"6cbb1afa": "setTokenBag(address)", +"6cbb9d19": "releaseEscrow(bytes20,address)", +"6cbc2ded": "endGame()", +"6cbc9ca0": "ADDR_OWNER()", +"6cbceeec": "theAddress()", +"6cbdb7d0": "takers(uint256)", +"6cbec01c": "Steel()", +"6cbef5a7": "sumVote()", +"6cbf3c8c": "ICO_POOL()", +"6cbf9c5e": "commitVote(uint256,bytes32,uint256,uint256)", +"6cc03315": "getPaymentLogN()", +"6cc09081": "getActualPrice()", +"6cc23437": "setIsContainerForFeeWindow(bool)", +"6cc25db7": "ticket()", +"6cc2c668": "_presaleEndTimestamp()", +"6cc301e3": "permitted(address)", +"6cc341f1": "getIndexOrder1(uint256)", +"6cc37048": "EFFToken(address)", +"6cc48d81": "_emitHeartBeat(bytes32,int256,int256)", +"6cc5ab24": "digithothToken()", +"6cc5f3ad": "getGames(uint256[])", +"6cc5fdaa": "setBytes32(bytes,bytes)", +"6cc61d86": "setSingleWithdrawMin(uint256)", +"6cc67aa5": "resetExplicitState(uint32,int64[2],int256,uint64,int8)", +"6cc6971b": "setNewStartDate(uint256)", +"6cc6cde1": "arbitrator()", +"6cc70ee1": "GovernanceChangeMinApproval(uint8)", +"6cc762d8": "lastWeiPricePerCWC()", +"6cc7d828": "investBalanceGot()", +"6cc919c8": "updateConfig(address)", +"6cc95f8d": "ALAX()", +"6cca5065": "QripplexToken()", +"6cca60ba": "gripWallet()", +"6cca7023": "DoubleSend(address,address,uint256)", +"6cca940a": "RusgasCrowdsale()", +"6ccab1f3": "wwasCoin()", +"6ccb5d02": "getShareholder(uint256)", +"6ccbb0ab": "withdrawBalances()", +"6ccbdbf9": "getHodlAmount(uint256)", +"6ccc3bdd": "whitelistBonusPercentage()", +"6ccce7a8": "getCapOfWei()", +"6ccd563d": "queueAuditRequest(uint256,uint256)", +"6ccd5cbe": "getClassInfo(uint32)", +"6ccd993b": "getDestroySharesFxpValueValue()", +"6ccde640": "getGoodPreset(bytes32)", +"6cce15d8": "ICOFails()", +"6ccf93d3": "HeyueToken(address,uint256)", +"6cd02297": "processOfflinePurchase(address,uint256)", +"6cd05e41": "takeAllTheMoney(address)", +"6cd0f102": "setHouseEdge(uint256)", +"6cd186ce": "setUncleSafeNr(uint256)", +"6cd1b26c": "setQueue(uint256)", +"6cd22eaf": "updateAuthority(address,bool)", +"6cd2ad56": "distributeTo(address)", +"6cd2b458": "splitsTotal(uint256,uint256)", +"6cd2f731": "setTimePerPeriod(uint256[5])", +"6cd38ea0": "NebulasToken(address,uint256)", +"6cd3d326": "getTotalChild(address,address)", +"6cd40993": "setNeironixProfitAddress(address)", +"6cd44d55": "pushOrderOfVendor(address,uint256,bool)", +"6cd49925": "currentLocation()", +"6cd51833": "initiateWithdraw(uint176,uint64)", +"6cd522f2": "getContributionRNTB(address)", +"6cd56641": "EYrickCoin()", +"6cd56878": "setDeveloperWallet(address)", +"6cd5c39b": "deployContract()", +"6cd6043a": "emitAndStore()", +"6cd61739": "getbuyprice()", +"6cd69864": "Total_Companies()", +"6cd7d86e": "setClaimRepository(address)", +"6cd8015d": "setVestingWithDefaultSchedule(address,uint256)", +"6cd8c204": "BuyEgg()", +"6cd8f433": "canExport()", +"6cd8f772": "fights()", +"6cd8fa85": "burnTrusted(address,uint256)", +"6cd902d0": "Casa()", +"6cd9786a": "setCapETH(uint256)", +"6cd98f30": "getResponseQueryType(uint256)", +"6cd9db29": "sub_matricola(string,uint256)", +"6cdacfc4": "startStage(uint256,uint256,uint256)", +"6cdae459": "YuanBaoCoin()", +"6cdb3389": "getEntriesCountForCompetition(uint256)", +"6cdb711e": "ProposalAdded(uint256,address,uint256,uint256,address,uint256,uint256)", +"6cdc644d": "CMTC()", +"6cdcb1ca": "DEVELOPER_supply()", +"6cde3c75": "frozenAccountICO()", +"6cde6380": "setHash(uint256,bytes32)", +"6cde71ee": "enteredTotalAmount()", +"6cde95ee": "getAccountAllowance(address)", +"6cdf4c90": "ownerSetMinBet(uint256)", +"6cdf7cdf": "FRO()", +"6cdfcc6e": "getTokenList(address,uint8,uint256,uint256)", +"6cdffb3c": "fetchJugadas()", +"6ce066af": "Give(bytes32)", +"6ce079fe": "getNumGames()", +"6ce07efa": "AddSale(uint256,string,string,string,uint256)", +"6ce0a6a4": "SafeBoxCoin()", +"6ce12737": "OX_TOKEN()", +"6ce1417e": "Fund()", +"6ce15a54": "genericAction(address,bytes32[])", +"6ce27c7b": "DECIMAL_INDEX()", +"6ce37387": "KindAdsToken()", +"6ce3fc06": "sendPrize()", +"6ce41ab4": "Garuda()", +"6ce4499c": "adjustCoins(address,int32,string)", +"6ce4a9a8": "RAMTOKEN()", +"6ce5b3cf": "releaseHeldCoins()", +"6ce62c61": "changeAllowances(address[],uint256[])", +"6ce6833d": "test_updateKey_increaseNoHint()", +"6ce768dd": "GetMainInvestor()", +"6ce76ae3": "openOldCrates()", +"6ce7e739": "getBonusRate(uint256,uint256)", +"6ce912ab": "LongevityToken()", +"6cea50a1": "crowdSaleStarted()", +"6ceac6e1": "TankDeposit()", +"6ceba55e": "change_fee(uint256)", +"6cebad98": "newUser()", +"6cebd885": "waraCoinTransfer(address,uint256)", +"6cec0ceb": "setDenominator(uint256)", +"6cec7f92": "canManage(uint32,int256,address)", +"6ceccc82": "changeICOAddress(address)", +"6cecdad9": "UpdateAttribute(uint256,address,bytes32,bytes32)", +"6cedc6ea": "tHasSubmitted(uint256,address)", +"6cee0d8b": "checkIfAllIQTDistributed()", +"6cee2d45": "STTR(uint256,string,uint8,string,address,address)", +"6ceec70d": "whitelistAdd()", +"6cef5ff4": "FundingAssetAddress()", +"6cf124c6": "toJackPotfromEveryTicket()", +"6cf1a452": "chgExchangeRate(uint256)", +"6cf1cb29": "setGen0SellerAddress(address)", +"6cf27311": "randomNumbers(address)", +"6cf32dde": "getMyGolds()", +"6cf339f8": "CardiumToken()", +"6cf35782": "m_funds()", +"6cf3b9e9": "checkBalance(uint256[])", +"6cf3c25e": "small()", +"6cf3d099": "dropEnd()", +"6cf43347": "returnString()", +"6cf49694": "tweakDailyDividends(uint256)", +"6cf4c88f": "removeApprover(address)", +"6cf69811": "trade(address,uint256,address,address,uint256,bool)", +"6cf6d675": "unbondingPeriod()", +"6cf70679": "removeFees(uint256)", +"6cf72694": "OAToken()", +"6cf75170": "cancelVote(address,uint256,uint256)", +"6cf761d4": "getMinConfirmationsByAddr(address)", +"6cf7cff6": "icoETHContributionLimit()", +"6cf7da53": "setMinerPrice(uint256)", +"6cf843ac": "LuckyToken()", +"6cf9bbf8": "setJackpotFactor(uint256)", +"6cf9cc58": "registerResource(bytes,uint256,bytes,string)", +"6cf9ea99": "Rhinex()", +"6cfab740": "RequiredBondRules(address)", +"6cfb0a4a": "test_oneValidEqBytes()", +"6cfb2c9c": "payoutToAddress(address[])", +"6cfb7101": "_emitMonthLimitChanged(bytes32,uint256,uint256)", +"6cfb782f": "TestWithdraw()", +"6cfc4512": "authorSignUp(address)", +"6cfc4ac5": "getGameEnd()", +"6cfc82ed": "trancheSize()", +"6cfdc242": "isSalesManager()", +"6cfe5947": "getCurrentICOPhaseBonus()", +"6cfedade": "refundTeamTokens()", +"6cff6f9d": "payoutOrder()", +"6cff8244": "controllerSucceeded()", +"6cffa0cd": "_transter(uint256)", +"6cffd817": "burnByAmount(uint256)", +"6cfff605": "releaseThreeHotHourTokens()", +"6d011a12": "scribes_hisory(uint256)", +"6d013618": "mint(address,uint256,uint256,string,string)", +"6d01d12b": "XeToken()", +"6d022003": "ALLOC_SALE_PRIVATE()", +"6d029f6a": "totalYUPIESAllocated()", +"6d02a595": "_setMintFeeAbs(uint256)", +"6d03d3ec": "HolderAdded(address,uint256,uint256,uint256)", +"6d03fa87": "getReferer(address)", +"6d04f50d": "mtronix()", +"6d0501f6": "mediator()", +"6d052b37": "getRequestByIndex(uint256)", +"6d052f56": "testBitsSetSuccess()", +"6d05c24d": "calcWidthraw(string,uint256)", +"6d05cef4": "getStageSupplyLimit()", +"6d05da7e": "tranchesCount()", +"6d061b69": "deathData_a3()", +"6d064875": "transferEducatedTokenOwnership(address)", +"6d064962": "getOwnerByShipId(uint256)", +"6d069c10": "_updateRaceWinner(uint256,uint256)", +"6d06bf0d": "celebOf(uint256)", +"6d06de2d": "haveAttributes(address,bytes32,address,bytes32)", +"6d076966": "VESTING_1_AMOUNT()", +"6d0797fc": "_isMatingPermitted(uint256,uint256)", +"6d07e3de": "sexToken()", +"6d07f295": "minEatable()", +"6d081d83": "zero_fee_transaction(address,address,uint256)", +"6d082bbb": "startSpreadingBlock()", +"6d0831f0": "BNNToken()", +"6d08bad2": "currencyToHash(string)", +"6d08e8f9": "initiateChallengeWithPastCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"6d09e2ec": "commitCurrency(address,uint256,uint256)", +"6d0a98cc": "blockResolveDispute(uint64,uint64,bytes)", +"6d0b5ee2": "TeamFundsTokens()", +"6d0ca12a": "tokensBack()", +"6d0cc895": "getVersions()", +"6d0def6c": "SimpleDividendToken()", +"6d0e5c03": "stampToken(uint256,uint256,uint256)", +"6d0ecb88": "SohaibCoin()", +"6d0f131a": "DrawEvent(uint256,uint8,uint8,uint8,uint256,uint256,uint256,uint256)", +"6d0f157d": "setAllFreeze(uint256,uint256)", +"6d0f2a84": "changeDefendFee(uint256)", +"6d0f8806": "refundAdveriser(uint256)", +"6d102f71": "acceptOrder(bytes16)", +"6d106885": "unitUserBalanceLimit()", +"6d1150de": "endCurrentPhaseIn(uint256)", +"6d11cf72": "berrycoin()", +"6d11fe82": "_initAwardInfo()", +"6d121b91": "getMaxCap10X()", +"6d12301c": "getBetValue(bytes32,uint8)", +"6d12fb5b": "setSellable(uint32,bool)", +"6d1478e9": "_addToDebtRegister(address,uint256)", +"6d14b2a8": "JackpotAmount()", +"6d156add": "finalizePRETDE()", +"6d15a659": "Distribution(address,address,uint256,uint256)", +"6d15cecd": "getTokenRaised()", +"6d15dc5a": "BetPayout()", +"6d15f208": "reject(string,uint256,uint16,address,uint256)", +"6d160f31": "confirmReservedTokens(address,uint256)", +"6d161bc1": "setdot(address)", +"6d1669e1": "approveAndCall(address,address,uint256,bytes)", +"6d16f79c": "__transferWithReference(address,uint256,string)", +"6d16fa41": "transferControl(address)", +"6d171f0e": "changeRemainingSupply(uint256)", +"6d17af94": "ContributionMinted(address,uint256,uint256)", +"6d181a42": "FTV(address,address,address,address,address)", +"6d1821aa": "OrenCoin()", +"6d1884e0": "getEvent(uint256)", +"6d189422": "EtherFlipRaffleToken()", +"6d18c778": "PSIToken()", +"6d18dc63": "ATTR_TRADABLE()", +"6d1909fc": "transferIDCContractOwnership(address)", +"6d1917b5": "maxPurchaseNonWhiteListed()", +"6d19ce04": "STARTING_Dragon()", +"6d1a0d34": "ShowTime()", +"6d1af018": "getAmountRaised()", +"6d1b229d": "burnTokens(uint256)", +"6d1d71c5": "Note(address,string)", +"6d1da953": "createWithNonce(bytes32,bytes)", +"6d1e1f8d": "updateSale(uint256,uint256,uint256)", +"6d1e2194": "SALES_ALLOCATION_PPM()", +"6d1e8095": "transferGameOwnership(address)", +"6d1e839c": "changeMaxCap(uint256)", +"6d1ea3fa": "approvedTokens(address)", +"6d1eab7d": "getRegistryVersion()", +"6d1f00a6": "ThroneMaker(uint256)", +"6d1f451b": "multiSigWalletAddress()", +"6d201095": "PRICE_PRESALE_START()", +"6d214c66": "MBSibalCoin()", +"6d21f638": "SmartshareStandardToken(uint256,string,uint8,string)", +"6d224b7b": "weiPerABIO()", +"6d236703": "createMemoryArray(uint256)", +"6d2381b3": "addressAndBalance()", +"6d23bf0b": "ingresarFondos()", +"6d23c516": "s8(bytes1)", +"6d23cda3": "sub(uint16,uint16)", +"6d245bda": "lockUnlockGamblingPartyForBetting(uint256,bool)", +"6d2570fe": "Before(uint256,bytes32)", +"6d25924d": "setn(uint256,uint256,uint256)", +"6d25ba1d": "setTechBonus1(uint256,string)", +"6d2666b9": "lockInLastSixteenPrize()", +"6d275e9e": "distributeEbyte(address[],address,uint256,uint256,uint256)", +"6d277279": "getAuctionsCreated(address)", +"6d278b29": "setHoldMax(uint256)", +"6d27a326": "turnOnFurnace(uint16[5],uint128)", +"6d28e805": "getInsurance(bytes32,uint256)", +"6d290d34": "setAllocation(address,uint256,uint256,uint256,uint256)", +"6d295e24": "callDefaultAction()", +"6d2980f6": "TEAM_LOCK_DURATION_PART1()", +"6d2a7c8b": "createAuction(uint256,uint256,uint256,uint256,address,uint64)", +"6d2ab982": "presaleFemaleDiscount()", +"6d2bf99c": "updatePercentBase(uint256,uint256,uint256)", +"6d2c51a7": "countrySupply(uint256)", +"6d2cb794": "airaTransfer(address,address,uint256)", +"6d2d4e52": "lockSupplierAndLockPosition1(address,address)", +"6d2d525d": "FFUELCoinTokenCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", +"6d2dd1a9": "getDividendsForOnePeriod(uint256,uint256,uint256,uint256)", +"6d2ff3d3": "Geniota(uint256,string,uint8,string)", +"6d301f38": "MIDO()", +"6d3036a7": "MAGNITUDE()", +"6d308c40": "changehiddenOwner(address)", +"6d30921c": "proceedDividends(uint256)", +"6d30d07f": "getMiniPoolEdit_6()", +"6d312683": "feeInCirculation()", +"6d32028d": "bigAward(address,uint256,uint256)", +"6d320b17": "minimumEntryThreshold()", +"6d32a4a6": "finishRoundD()", +"6d32dc4b": "startElection(uint256)", +"6d338bd0": "setCCH_edit_22(string)", +"6d339f02": "_oldConfig()", +"6d33b42b": "changeLimit(uint256)", +"6d33f5a6": "updateNoteContent(uint64,bytes)", +"6d34a775": "getDatas()", +"6d35b1dc": "getExtraDays()", +"6d35bf91": "seizeVerify(address,address,address,address,uint256)", +"6d361694": "getModel(uint256)", +"6d36ebf8": "addPlayer(address,bytes32)", +"6d37a9dc": "LCT()", +"6d38156f": "getCountOfIntegerTypes(uint8[])", +"6d399eb7": "MAX_AIRDROP_VOLUME()", +"6d3b5f18": "getUserByID(uint256)", +"6d3c7ec5": "setDefaultPrice(uint256)", +"6d3d0a8f": "disagree()", +"6d3de7ea": "beManagerInsurance()", +"6d3e141e": "functional(address,uint256)", +"6d3e1a74": "PiBetaToken()", +"6d3e4502": "DatToDtrcDenominator()", +"6d3f008a": "FinalizedTier(uint256,uint256)", +"6d3f1277": "flagAndFinalize(uint256)", +"6d4045a8": "EXOSO()", +"6d40ee41": "CloseDonation()", +"6d40f3b0": "PHASE_OPEN()", +"6d417064": "expirationBlock()", +"6d41a3fb": "firstAuctionsExtendedChunkDuration()", +"6d425249": "minerNum()", +"6d435421": "transferOwnership(address,address)", +"6d43b489": "freeTokens(address,address,uint256)", +"6d4419e5": "listTopics()", +"6d44a9cf": "KudosPresaleTokenLockup(address,address)", +"6d4546a2": "changeTsaLink(string)", +"6d46398b": "newChannel(bytes32,address,address,bytes,uint256,bytes,bytes)", +"6d467f04": "ContractTransfer(address,address,uint256,bytes)", +"6d46c6f5": "referrer1Percent()", +"6d4717fe": "noFeesList()", +"6d47ab72": "sellers(address)", +"6d47fb71": "changeICO(address)", +"6d47fc60": "Changepro()", +"6d489314": "terminateLastMilestone(bytes32,address)", +"6d48ae25": "best_submission_accuracy()", +"6d492f54": "sendFyle(address,address,string)", +"6d493bf9": "SOLARCHAINToken(string,string,uint8,uint256)", +"6d498093": "presaleFinalized()", +"6d49817b": "refundPayment(address)", +"6d4a37ef": "cancelEscrow(bytes16,address,address,uint256)", +"6d4b38a2": "infraIndexToOwner(uint256)", +"6d4bae72": "_register2(address,bytes32)", +"6d4be70f": "ethereumSHA3(bytes20,uint24,uint32)", +"6d4c80ea": "removeNamespaceMember(string,address)", +"6d4ce63c": "get()", +"6d4d907c": "maxNumVotesPerAccount()", +"6d4ee68f": "SendBobsCoin()", +"6d4fd0ad": "isNull(address[])", +"6d4fd338": "PPToken()", +"6d4fe435": "counter_in()", +"6d505b49": "randgenNewHand()", +"6d50a2b5": "deleteAllBackgroundImages()", +"6d50ef2a": "timelockedTokensDisbursed()", +"6d510a64": "ourTEAM()", +"6d510f6c": "updatePartners(address)", +"6d5210d9": "showprize(address)", +"6d522b19": "multiAccessChangeRequirementD(uint256,address)", +"6d52f9d5": "mapToNewRange(uint256,uint256)", +"6d53393b": "getInitializeCreatorValue()", +"6d538264": "setMigrateAddress(address)", +"6d53aa4e": "GetProd(address)", +"6d540318": "revokeOracle(address,uint256)", +"6d5433e6": "max(uint256,uint256)", +"6d54340a": "Blockbin()", +"6d544e6e": "setStackSize(uint256)", +"6d54ec91": "registerAndActivateDevice(bytes32,bytes32,bytes32)", +"6d568c43": "weiToCents(uint256)", +"6d56d9f4": "setAuction(uint256,uint256,uint256)", +"6d578781": "changeStageBlcok(uint256)", +"6d57b2b1": "tokenInitialDetails()", +"6d57dee4": "sendTokenAw(address,address,uint256)", +"6d57e2a9": "getAgonIdArray(address)", +"6d580320": "G2UFundDeposit()", +"6d580bcb": "FOUNDERS_CAP()", +"6d584266": "ALLOC_SALE_GENERAL_3()", +"6d5860d4": "revert(string)", +"6d58c88f": "changeDepositAddress(address)", +"6d599136": "personal_withdraw(uint256)", +"6d59c3be": "buyUFT(address)", +"6d5b0f6f": "transferCustodian(address,address)", +"6d5b9427": "onlyWithValidSignature(bytes)", +"6d5c1621": "LogInsert(address,uint256)", +"6d5cae52": "QiongB(uint256,string,uint8,string)", +"6d5d21a9": "setStubFund(address,address)", +"6d5d7612": "MAX_WITHDRAW_PCT_DAILY()", +"6d5da09a": "LockChain()", +"6d5e136d": "_getApproved(uint256)", +"6d5e3587": "needsEther(string)", +"6d5e53f6": "createInt256(bytes32,int256)", +"6d5e78f9": "depositorLimit()", +"6d5f3e15": "settleBet(address)", +"6d5f6639": "objectProposal(bytes32)", +"6d608402": "sendBPESOToken(address,uint256)", +"6d60bf39": "getPreEntranceFrom()", +"6d60e6b4": "trustAddress()", +"6d619daa": "storedValue()", +"6d624e86": "SideJobCoin()", +"6d62a4fe": "canTransfer(address,address,address,uint256)", +"6d63fa32": "getPixelNumber(bytes1,bytes1)", +"6d640637": "testBetId()", +"6d643308": "icoDeadLine()", +"6d64694f": "etherdelta()", +"6d64a472": "claimSalesAgent()", +"6d64abd6": "takeEther(address)", +"6d650b2d": "level_7_percent()", +"6d66264f": "specifyController(address)", +"6d6712d8": "hasPermission(address,address,bytes32)", +"6d6755a6": "gvpe_per_eos()", +"6d6908bd": "mintTokensBatch(uint256,address[])", +"6d69fcaf": "addSupportedToken(address)", +"6d6a01f6": "second_partner_address()", +"6d6a2859": "assetID()", +"6d6a4889": "nextReleaseTime()", +"6d6a6a4d": "decimalFactor()", +"6d6a761e": "setCouponToken(address)", +"6d6bc5f5": "identifierToCoordinate(uint256)", +"6d6c0ec4": "mintProxy(address,uint256)", +"6d6c2074": "totalTokensForSaleDuringICO3()", +"6d6caeb2": "poolCapUSD()", +"6d6d69b6": "allowedToSell()", +"6d6d70d9": "connectModule()", +"6d6dcbe7": "deleteResponse(uint256)", +"6d6e2710": "clearCrowdsaleOpenTimer()", +"6d6e8312": "addProviderAdmin(address)", +"6d6ead75": "reject(uint256,address,uint256,uint256,address)", +"6d6ebb01": "thawSomeTokens(address,uint256)", +"6d6f385c": "isSaleFinished()", +"6d6fa6b1": "FNKOSToken()", +"6d6fb665": "CUSTOM_ERC20_MINT_SERVICE_NAME()", +"6d701f0a": "Eos()", +"6d704159": "wdBefore()", +"6d705ebb": "register(address,uint256)", +"6d70f7ae": "isOperator(address)", +"6d717daf": "Albarit()", +"6d71be4c": "increaseReserve(uint256,uint256)", +"6d7221d5": "doubleClaimSegmentSlashAmount()", +"6d72da47": "addElection(address,uint256)", +"6d72dc38": "getSwapLifetimeLimits()", +"6d730453": "TokensTransferedToOwner(address,uint256)", +"6d736fac": "feeAccount2()", +"6d763a6e": "getLeaderboard()", +"6d771f77": "one_month()", +"6d773cd0": "balance_out()", +"6d77cad6": "isOperatorForPartition(bytes32,address,address)", +"6d77e144": "removeBlacklistItem(address)", +"6d786740": "billingPeriod()", +"6d788933": "_distribution(address[],uint256[])", +"6d78a434": "IntegrativeWalletToken(uint256,uint256,uint256,address)", +"6d78e48a": "candidateTillXPAAssets()", +"6d79207c": "SALE_DURATION()", +"6d796253": "configRoundKey()", +"6d7a0f89": "EmptiedToWallet(address)", +"6d7a2609": "setSpenderAddress(address)", +"6d7a37b6": "OCPresale(address,address,uint256)", +"6d7ab187": "AcceptsGMOON(address)", +"6d7b3706": "setfees(uint256,uint256,uint256,uint256)", +"6d7bc487": "RESERVED_TOKENS_FOR_FOUNDERS_AND_FOUNDATION()", +"6d7bd3fc": "BANCOR_FORMULA()", +"6d7cb00c": "CoinMarks(uint256,address)", +"6d7d083f": "handleFunds()", +"6d7da0b1": "MyContract()", +"6d7fa14e": "CQC(uint256,string,uint8,string)", +"6d7fd1bf": "getIpfs(uint256)", +"6d7fd8a3": "pauseRefund()", +"6d80244d": "createUnitOmni(uint32,address)", +"6d805b2d": "withdrawMana(uint256)", +"6d813e63": "owner_viewOnFlight()", +"6d81779b": "teamCap()", +"6d836cde": "updCouponBonusEnabled(bool)", +"6d8370e9": "upgradeTusdProxyImplTo(address)", +"6d842ad5": "NewBOP(address,address,uint256,uint256,string,string)", +"6d843c2f": "participatedInAirdrop(address)", +"6d84dbb0": "BeijingCoin()", +"6d853ab6": "isSubUser(address)", +"6d863fd7": "airDropSingleAmount(address[],uint256)", +"6d86ac59": "DUMPSACK()", +"6d871c44": "set_a(uint256)", +"6d8758c7": "editCuts(uint256[6])", +"6d877f91": "Bob()", +"6d87b65c": "setPropertySalePrice(uint16,uint256)", +"6d88885e": "schoolOrdering()", +"6d892f7e": "deauthorize(address,address)", +"6d893a5a": "deathData_a8()", +"6d8941cb": "smallBonusPercent()", +"6d8a3650": "dedex(address,address,address,uint256,uint256,uint256)", +"6d8a5f8f": "CAP_ICO()", +"6d8a74cb": "getRoom(uint256)", +"6d8a9f92": "setSavedEthBalance(address,uint256)", +"6d8ab124": "containsPosition(bytes32)", +"6d8b529a": "OwnerBase()", +"6d8c3912": "AicToken()", +"6d8ccf2a": "sellToEther(uint256)", +"6d8d151b": "determineBonus(uint256)", +"6d8d16b9": "StandardToken(string,string,uint8,uint256)", +"6d8f01d1": "CEOSignature()", +"6d8f4221": "masternode()", +"6d8f83cf": "_getBonusAmount(uint256)", +"6d90164e": "GetPrice()", +"6d916598": "stakingUnits(address)", +"6d91acba": "proposalText(uint256)", +"6d9218e5": "Notes(address,address)", +"6d927db0": "withdrawBalanceMaxSteps(uint256)", +"6d94425c": "_maxPeriodSalesLimit()", +"6d94dce1": "createAndBookCanvas(address)", +"6d952117": "maxBuyPrice()", +"6d9634b7": "releaseTokens(address[])", +"6d963a81": "buyp3d(uint256)", +"6d96a2aa": "delegateAddress()", +"6d96b537": "_computeIncentiveReward(uint256,uint256)", +"6d974ee2": "AcceptRealmOffer(uint256)", +"6d97537a": "TestRushCoin()", +"6d97786e": "sell(address,uint256,string)", +"6d97c665": "tokenBonusForSecond()", +"6d9814e1": "BToken()", +"6d98571a": "generalTokens()", +"6d9860d0": "makeFinality(uint256,address,address,bytes32,bytes32,uint256,uint256)", +"6d98c5e7": "AppleToken(uint256,string,string,bool)", +"6d98e9fc": "totalWei()", +"6d98ee4e": "getInitialState()", +"6d991cce": "openGroupNumber()", +"6d99aafd": "Collected_Ether()", +"6d99f652": "resetRaffle()", +"6d9aa034": "setNamePublicKeyAddress(address)", +"6d9af813": "updateprice(uint256,uint256)", +"6d9b06e8": "setProposalDeposit(uint256)", +"6d9b501a": "returnWalletTxCount()", +"6d9c2bda": "ADV_TEAM_LOCK_TIME()", +"6d9c8e86": "getCurrentSaddlePrice(uint256)", +"6d9cb37d": "govtAccount()", +"6d9cdbc6": "WALLET()", +"6d9cebb2": "setDiscount(uint8)", +"6d9d39b6": "isItOpen()", +"6d9d495f": "minMktTokens(address,uint256)", +"6d9dcdb9": "tgrNextPartContributor()", +"6d9f4eeb": "artistTrackCount(address)", +"6d9fed84": "getJackPotInfo()", +"6da05cc7": "sectionAvailable(uint256)", +"6da05f0f": "_requestRandom(uint256)", +"6da1339c": "_deposit(address,uint256)", +"6da1833c": "getInstitutionByName(string)", +"6da1d37a": "sumWei()", +"6da246ac": "approvePartnerAllocation(address)", +"6da28481": "balanceOfLockup(address)", +"6da36c06": "contract_admin()", +"6da3cd1a": "verifiedUsersOnlyMode()", +"6da44d61": "SportX()", +"6da49b83": "nodeCount()", +"6da4edff": "getPriceSpeedPercent()", +"6da4fd5c": "TheBeardToken()", +"6da4fe26": "nextReward()", +"6da50777": "FreddieToken(address)", +"6da61d1e": "payoutOf(address)", +"6da66355": "pause(string)", +"6da705f5": "isOwnerOfJob(address,bytes)", +"6da72e7a": "reclaimByReceiver(uint256,address,bytes32)", +"6da78903": "SwapCreated(address,uint256)", +"6da79a93": "bid(uint256,uint256,uint256,address)", +"6da84ec0": "calcMarketFee(bytes32,uint256)", +"6da9a969": "toBRFWEI(uint256)", +"6daa212f": "applyPayback(address,uint256)", +"6daa2d44": "raiseDispute()", +"6daa9f56": "setExhaustionTime(uint256)", +"6daaf67b": "REFERRAL_PROGRAMS()", +"6dabccc9": "setmsg(address)", +"6dabd069": "emission(address,uint256,bytes32,uint256)", +"6dac8bea": "PREMIUM_CATEGORY()", +"6dacda85": "LOCKPERIOD()", +"6dad2a91": "getWinningAmount()", +"6dae014c": "test_basic_sanity()", +"6dae022f": "verifyTx()", +"6daf0866": "Hungrify()", +"6dafc6b7": "destructOne(bytes32)", +"6db1218d": "getAPSchedule()", +"6db14a1c": "PaulSportsCoin()", +"6db17f8d": "KriptoNeed(uint256,string,uint8,string)", +"6db19eb8": "specialGym()", +"6db31c25": "pay(string,address,uint256,bool,bytes)", +"6db3a788": "createHero(string,uint256,uint256,uint256,uint256)", +"6db4ba51": "requireNotEmptyAddress(address)", +"6db4bbf0": "donotYYYDappToken()", +"6db5c8fd": "maxDuration()", +"6db5d3b7": "modifyCommission(uint256,uint256)", +"6db66268": "remainingTokensPerPeriod()", +"6db736df": "Writers(address)", +"6db75799": "set_amount(uint256,uint256)", +"6db76efd": "decreaseFrozenBalances(address,uint256)", +"6db7f77c": "requestEarlySettlement()", +"6db90900": "returnAllRoomsBalance()", +"6db9ec44": "IWTfund()", +"6db9ee4d": "MixenCoin()", +"6dba46ac": "aprMintAdjustment()", +"6dbb7bcd": "getExecutorRegistry()", +"6dbd6689": "gupSold()", +"6dbe060d": "hashTest(string)", +"6dbe21b8": "setBounty()", +"6dbe2ebc": "calcUserDivsTotal(address)", +"6dbe31eb": "testSubBalance()", +"6dbe4bee": "MoonToken(uint256,string,string)", +"6dbf8108": "withdrawBounty(address)", +"6dc043d7": "draw_number()", +"6dc0a997": "pushAllocation(address,uint256)", +"6dc12f1c": "EvMigration(address,uint256,uint256)", +"6dc1a075": "setMaxOpenAttacks(uint256)", +"6dc1f360": "VersionControl()", +"6dc214af": "bitCrystalEscrow()", +"6dc34462": "Timed(uint256,uint256,uint8)", +"6dc37dee": "changeReviewRules(uint256)", +"6dc3e97e": "addGame(bytes32,address,address,uint256)", +"6dc3edcf": "executeExecutable(uint256,uint256)", +"6dc455a4": "WinnerWithdrew(address,uint256,uint256)", +"6dc4faea": "withdrawnTeam()", +"6dc51f1e": "advisoryBoardFundManager()", +"6dc55f7e": "RANGEEND_7()", +"6dc56397": "career_path()", +"6dc57da6": "getTimestampOfDayStart(uint256)", +"6dc585b6": "toRICH(uint256)", +"6dc7a627": "canClaim()", +"6dc7d164": "addSignature(uint256,uint256,address)", +"6dc88e1f": "addAngelIdMapping(address,uint64)", +"6dc8dbd4": "calculateMaxTokensIssued()", +"6dc92426": "makeSellOrder(address,uint256,uint256)", +"6dc944f6": "withdrawTotalDevEarned()", +"6dc9ab89": "get_orderAddress(address,address,uint256,uint256,uint256,uint256)", +"6dca35da": "newCampaign(uint256,address,uint256)", +"6dcb0cf8": "typeOf(address)", +"6dcb672b": "EBanker()", +"6dcba059": "goToNextStep()", +"6dcd16d7": "computeBids(uint256)", +"6dcd6eb9": "withdrawPendingAmounts()", +"6dcdd00f": "Allowance(address,address)", +"6dce14cd": "LBTokenSale(uint256,uint256,uint256)", +"6dcea85f": "setMarket(address)", +"6dd01116": "getWishContent(uint256)", +"6dd0c3d8": "setENGDevAddress(address)", +"6dd0c51e": "RESERVED_STAFF_GROUP()", +"6dd0d091": "retaliate()", +"6dd13a29": "ICOStarted(uint256,uint256,uint256,uint256)", +"6dd186c4": "YeYingOil()", +"6dd1f71c": "RTokenMain(uint256,string,string,uint8,address)", +"6dd22ccd": "getMixParticipant(bytes32,uint256,uint256)", +"6dd23b5b": "constructor(address,address,address)", +"6dd28241": "deprecatedSince()", +"6dd2bfca": "setDevfee(uint256)", +"6dd35c7b": "topBalance(address,uint256)", +"6dd3a823": "Neptun()", +"6dd40168": "preSaleMinimumWei()", +"6dd40905": "getQuestionVotesAllCount(string)", +"6dd43d1f": "attachSubscriptionModule(address)", +"6dd4927b": "reName(string,string)", +"6dd4c13c": "allowsSignup()", +"6dd5b69d": "getConfig(bytes32)", +"6dd5bb11": "oraclize_query(string)", +"6dd6e673": "buySanSlot(address,uint256)", +"6dd6e87b": "checkOut(int256)", +"6dd749ba": "getSpaceById(uint256)", +"6dd77c5d": "etherToUSDRate()", +"6dd7d8ea": "vote(address)", +"6dd8d3bf": "buy_energy(address,uint32,uint32,uint64,uint32,uint64)", +"6dd9fde9": "transferTokensToNonEthBuyer(address,uint256)", +"6dda1291": "hotPotatoPrize()", +"6dda9b24": "bva(address,uint256,address)", +"6ddc7e65": "gracePeriodAfterRound0Target()", +"6ddcb442": "getPhaseStatus(uint256)", +"6ddd07f8": "getEngineById(uint256)", +"6ddd707f": "TDTToken()", +"6dde33ea": "deathData_a13()", +"6dde8b18": "removeWhitelistedTransfer(address,address)", +"6ddeaae0": "investorReferrals(address,address)", +"6ddf09c4": "ICToken()", +"6ddf12ae": "ecdouble(uint256[3])", +"6de00927": "GetUserRank(uint8,address)", +"6de09e28": "affiliatesAllocAddress()", +"6de0b375": "openBet(uint256)", +"6de12905": "updateMeta(string,string)", +"6de343cd": "SNTPlaceHolder(address,address,address,address)", +"6de3afc9": "EduCoin()", +"6de53001": "clearApproval(address,uint256)", +"6de5897c": "ECOMCASH()", +"6de60a07": "ContinueSuspendedEmployee(address,uint32,uint32)", +"6de6220b": "OwnerO()", +"6de65097": "OwnerRemoved(address,bytes32)", +"6de685f6": "START_TIME_SALE()", +"6de725a3": "callTx(bytes,address,uint256,bytes)", +"6de74bbe": "setratePreSale(uint256)", +"6de758a1": "PWGLToken(address,address)", +"6de79d17": "TIANYECoin()", +"6de7a31d": "getEvotTokenAddress()", +"6de84a4f": "bankMultisig()", +"6de996b4": "getPlayerSpaceshipAuctionPriceById(uint256)", +"6de9ebb1": "setBlogRegistry(address)", +"6de9f32b": "tokensMinted()", +"6dea2088": "MAX_FUNDS_RAISED_DURING_PRESALE()", +"6deaf623": "calculateEthToVibe(uint256,uint256)", +"6deb515d": "disapproveInvestorsInBulk(address[])", +"6dec665e": "motionWaiting(uint256)", +"6dec7a93": "setInfo(string,string,string)", +"6ded82f8": "isPaid(address)", +"6dee2032": "getOpenOrdersOf(address)", +"6dee275a": "c_STQperETH()", +"6deebae3": "subtract()", +"6deefc7a": "sellable()", +"6def1efc": "getPreviousFeeWindow()", +"6defbf80": "ready()", +"6defd595": "getCovfefe(uint256)", +"6defe0b9": "isTimeOver()", +"6defe888": "Criptomedicina()", +"6df006f3": "frozenToken()", +"6df03165": "setTimeOutAuthentication(uint256)", +"6df088bf": "winnerDecided(uint256,address,uint256)", +"6df0a7e7": "setContract(string,string)", +"6df0b557": "getPlayerSpaceshipAuctionById(uint256)", +"6df15719": "STWY()", +"6df1667c": "same(string,string)", +"6df26327": "additionalEmission()", +"6df26d14": "startEarlyStage1()", +"6df3edef": "getSavedBytes()", +"6df55024": "LogBuyTokens(address,uint256,string)", +"6df5ee2b": "withdrawPresale()", +"6df6ca7a": "getDivsBalance(address,address)", +"6df7f38f": "sellForBitcoin(address,uint256)", +"6df83012": "startLockUpSec()", +"6df8359f": "WorkOrderStarted(uint128)", +"6df86816": "ActionAgonPlat(address)", +"6df99d81": "CCH_TEL_AVIV_01()", +"6dfa8d99": "totalEarned()", +"6dfada86": "mintToken(address,uint256,address)", +"6dfc15a4": "changelp6(address)", +"6dfc2fa8": "isInProgress()", +"6dfd3c5a": "interestReceived()", +"6dfe512e": "initPGOMonthlyInternalVault(address[],uint256[])", +"6dfe869b": "Preallocation(address,uint256)", +"6dfe8a34": "setSkillName(address,uint256,bytes32)", +"6dff8216": "cbAddresses()", +"6e008b35": "calculateResult()", +"6e034f4d": "tokensaleBuyTokens()", +"6e038c4f": "firstTotalSupply()", +"6e051dba": "ReserveTokensHolderMock(address,address,address)", +"6e0550e5": "stepOneEndTime()", +"6e0560c3": "doNotAutoRefund(address)", +"6e05d3ca": "Z1CoinGenesis(address)", +"6e064f6a": "HedglyStakingToken()", +"6e06a9ce": "changeTimeOneSession(uint256)", +"6e06ac9d": "UNSPAM(string,string,uint256,uint256,bool)", +"6e0712b1": "setIcoParams(uint256,uint256,uint256,uint256,bool,bool,uint32,uint32,uint256)", +"6e075e30": "reinvestAmount(uint256)", +"6e0763f3": "RPNCoin()", +"6e07979d": "tokenBlogs()", +"6e080d86": "register(string,string,bool,string,address,uint256,uint256)", +"6e083bc7": "credoEthExchangeRate()", +"6e094b67": "TPS()", +"6e09a4ab": "diff(uint256[],uint256[])", +"6e0b0c80": "MIToken()", +"6e0bd282": "destroy(bytes32)", +"6e0c7867": "createDataObject(bytes32,address,bytes32,address,bytes32)", +"6e0cd415": "isPositionCalled(bytes32)", +"6e0d98fe": "setProbabilities(uint32[])", +"6e0da3ee": "WoodToken(uint256,string,string)", +"6e0da971": "tokensSoldIco()", +"6e0dd984": "setCapUsd(uint256)", +"6e0e7e85": "withdrawERC20Compatible(bytes32,uint256,uint256,uint256[])", +"6e0f8d68": "stage_1_price()", +"6e0fb1c5": "FOUNDER2_STAKE()", +"6e101967": "set_iconiq_pre_kyc_bonus_denominator(uint256)", +"6e106628": "getWinningReportingParticipant()", +"6e114511": "decreaseTotalSupply(uint256)", +"6e1180f8": "setOversightAddress(address,bool)", +"6e120023": "TimestampScheduler(address,address,address)", +"6e125009": "contractTokensAvailable()", +"6e1286fc": "getReward(uint256[])", +"6e12b46e": "requiredPoints()", +"6e13cdfe": "claimH2()", +"6e13d418": "stakeAddress(uint256)", +"6e140e6c": "TetherToken(uint256,string,string,uint8)", +"6e1479c0": "testControlCreateNewRevisionNotOwner()", +"6e14b71b": "PetsCoin()", +"6e15266a": "fifty_two_weeks()", +"6e1636bb": "logOrderCanceled(address,address,address,bytes32,uint8,uint256,uint256)", +"6e164e23": "claimTokens(uint256,address)", +"6e16f9ed": "iBird()", +"6e173a7f": "storeBlockHeader(bytes,bytes)", +"6e17e7c2": "nextFieldIndex()", +"6e18980a": "transferByLegacy(address,address,uint256)", +"6e18eba5": "ethUSDPrice()", +"6e18ff05": "getRefInfo(address,address)", +"6e1907cc": "test21(uint256)", +"6e1a1336": "setString(string,string)", +"6e1b6bcc": "checkMyBet(address)", +"6e1bd323": "MAX_TOKEN()", +"6e1cf038": "getNumNiceBets(uint256)", +"6e1d3c0d": "sudoku()", +"6e1d7d5e": "EtherIbe()", +"6e1e063f": "claimableRefund(address)", +"6e1e34c7": "TokensBoughts(uint256)", +"6e1ece25": "totalFeesValue()", +"6e1f777d": "createTokenToTeam()", +"6e2117f7": "forFunction()", +"6e217d30": "setBuyCourse(uint256)", +"6e219667": "p3()", +"6e21fc87": "_airdrop(address)", +"6e223710": "getRockInfo(uint256)", +"6e224034": "totalCrowdCoin()", +"6e22aea0": "AIW(uint256,string,string)", +"6e22d33e": "getBytesValue(string)", +"6e22e32b": "setMonethaAddress(address,address,bool)", +"6e233918": "buyTank(uint32)", +"6e241c5c": "_createExoplanet(string,address,uint256,uint32,string,uint32,uint8,string)", +"6e247f29": "Transfer_of_authority_logic(address)", +"6e2653ca": "AirSwapHandler(address,address,address)", +"6e275bd2": "transferFrom(address,address,address,address,uint256)", +"6e27d889": "lockTokens(uint256)", +"6e2857f2": "setEscrow(address,address)", +"6e287154": "setLocalRevenuPercent(uint256)", +"6e293817": "transferWithReference(address,uint256,bytes32,string)", +"6e2940eb": "NhCoin()", +"6e2a2d0a": "result_amount()", +"6e2adeee": "SweetToken(string,string,address)", +"6e2bf348": "getDiscountByAmount(uint256)", +"6e2c10a1": "unitedNations()", +"6e2c732d": "add(uint64,uint64)", +"6e2cde85": "drawPot(string,string)", +"6e2d53a6": "TreasureCoin()", +"6e2d604a": "thrash()", +"6e2da4b3": "proposeAction(address)", +"6e2db8d7": "addWhiteList(address,uint256)", +"6e2e2e4d": "showMessage(bytes32,uint256,string)", +"6e2e9c3b": "contributedUsd()", +"6e2e9ee1": "setKYCRequiredToReceiveFunds(bool)", +"6e2ede03": "getCollateralMarketsLength()", +"6e2edf30": "ETCSurvey(address)", +"6e2f0bb8": "newSaddleryCon(address)", +"6e2f10bd": "changeMerchantBeneficiaryAddress(uint256,address)", +"6e2f5f12": "sendToFaucet(uint256)", +"6e2fd470": "sharedExpenseWithdrawn()", +"6e30418b": "totalPlayerBalance()", +"6e30d411": "showDevBalance()", +"6e317da7": "changeRedeemer(address)", +"6e31f704": "DARIC()", +"6e321105": "losePercent()", +"6e32295e": "mDestroyTokens(address,uint256)", +"6e329aa9": "getPotato()", +"6e32cf8e": "admin_transfer_tempLockAddress(address,uint256,uint256)", +"6e33bc13": "COINS_TO_HATCH_1STRIPPERS()", +"6e349188": "MAXSOLD_SUPPLY()", +"6e34b4e4": "getPoolOwner(uint256)", +"6e3532fa": "getSubscriptionFee()", +"6e353435": "inputauction(uint256,uint256,string)", +"6e353a1d": "emergencyWithdrawal(address)", +"6e359afa": "changeTrueUSDOperation()", +"6e36893a": "ICOInvestment(address,uint256,uint256,uint8)", +"6e3706c8": "PRE_DURATION()", +"6e377202": "isAuthed(address,address)", +"6e3825d2": "checkMyTicket(uint32)", +"6e39891c": "currentDividendAmount()", +"6e39eb85": "resetNumberOfCandidates()", +"6e3a1e5c": "requestEthereumChange(string,string)", +"6e3ae353": "changeOrigDev(address)", +"6e3aff90": "getOrderString()", +"6e3bbebd": "ZJLTToken()", +"6e3c5759": "claim_partnerPreICOTokens(address)", +"6e3d5a9d": "getTopCompanyBlocksInBetween()", +"6e3de78a": "UNFOMO(string,string,uint256,uint256,bool)", +"6e3e1318": "takeFee(uint32)", +"6e3e82f9": "_computeCut(uint256,uint256)", +"6e3f3f1a": "proposal(address,uint256,address)", +"6e3f7ba0": "TokenFrozen(uint256,string)", +"6e3f8550": "walletReserve()", +"6e403cd7": "sendBread(address,uint256)", +"6e40975d": "ICOToken()", +"6e415d37": "farewellTo(address)", +"6e417c69": "executeRequest(uint256)", +"6e41a78f": "DRC()", +"6e41b1ad": "nameTaken(uint256)", +"6e41efb2": "ThawTransfers(address,bool)", +"6e4264ce": "initiateDeposit()", +"6e4324a3": "Cryptopus()", +"6e439078": "makeLogCancel(address,address,address,address,uint256,uint256,uint256)", +"6e441752": "teamToken2019()", +"6e44fcea": "isHoldTokens()", +"6e459cf1": "CrowdSale(address,uint256)", +"6e4602c8": "TimereumX()", +"6e46408d": "indexOfOwners(address,address)", +"6e4647d6": "vendingCreateCollectible(uint256,address)", +"6e468a8a": "CelticsCoin()", +"6e48670f": "zeroSub(uint256,uint256)", +"6e48a035": "closeVote(uint256)", +"6e49b1e1": "AnythingAppTokenPreSale(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"6e4a6874": "setReceiver4()", +"6e4a7b26": "initializeCoins()", +"6e4a9f4d": "Nguen()", +"6e4ac25f": "TokenData(address,address)", +"6e4b0222": "setactivelevel(uint256)", +"6e4bfb37": "GenaroTokenSale(uint256,uint256,address,uint256,bytes32)", +"6e4c42a0": "getGameSides()", +"6e4c9829": "amountsOf(address)", +"6e4ca716": "totalEthRecieved()", +"6e4dd931": "GetPotInfo()", +"6e4df96e": "produceWine()", +"6e4e5c1d": "revealedCurves()", +"6e4e87e0": "sendQuickPromoBonus()", +"6e4eb9cb": "getSeedsSinceLastEvent(address)", +"6e4ed796": "blocksPerRound()", +"6e4f33b0": "change_delay(uint256)", +"6e4f68b5": "PONO()", +"6e4f749e": "freezeMethod(address,bool)", +"6e500306": "Bst()", +"6e50640c": "WinikToken()", +"6e506ee4": "managementTokenAllocation()", +"6e50c39c": "serializeState(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256)", +"6e50eb3f": "setEndsAt(uint256)", +"6e51be3d": "UmmahDinar()", +"6e52dcd6": "pauseChannels()", +"6e5320d1": "changeTokenInformation(string,string)", +"6e53909a": "setLockAdmin(address,bool)", +"6e5390d2": "woodAddress()", +"6e5406e3": "_0xLitecoinToken()", +"6e54181e": "right75(uint256)", +"6e5452fe": "OUTCOME_RANGE()", +"6e553f65": "deposit(uint256,address)", +"6e555a18": "testCreateContract(bytes32,uint16,bytes32,uint256,uint64,bytes32,uint64,bytes32,uint64,uint64)", +"6e556725": "initialEndPrice()", +"6e56dce5": "collectEtherBack()", +"6e56e5eb": "_emitUserBinded(uint256,address,bool)", +"6e56e895": "test_defaultPermissions()", +"6e575537": "MAX_OWNER_PERS_SITE()", +"6e57e7e0": "payOut(address,uint128,int256)", +"6e581673": "buyPackWithERC20Tokens(uint8,address)", +"6e593210": "getActiveSellOrders(uint256)", +"6e596aef": "moveCeiling(uint256)", +"6e59e570": "sendToOtherBlockchain2(string,string,address)", +"6e59f3f3": "createChannel(address)", +"6e5ac882": "root(address)", +"6e5aef4d": "getInitTime(uint256)", +"6e5b064c": "basicPricePerEth()", +"6e5deca4": "YaoDun()", +"6e5ecdff": "updateDependencies()", +"6e5f375e": "setGameStartedDividendPercentage(uint256)", +"6e5fd38d": "registerMultiple(address[],bool)", +"6e609af2": "FulfillmentUpdated(uint256,uint256)", +"6e60cf61": "freedWinPoolToTeam()", +"6e6260fa": "thresholdNewTokenPair()", +"6e62825a": "SCDCToken1()", +"6e62cdab": "nextRoundWinner()", +"6e62de19": "fundFailed()", +"6e63015c": "getCertifiersCount()", +"6e630649": "changeState(uint256,uint8)", +"6e635673": "deletePullPayment(uint8,bytes32,bytes32,string,address,address)", +"6e638d3b": "claimIFSReward(address)", +"6e640f4c": "candidat()", +"6e658fbe": "myFundsExpireIn(uint256)", +"6e6656d8": "setCallStackSize(uint256)", +"6e66644d": "changeStakingFeesOperation()", +"6e667c35": "contentURI(uint256)", +"6e66cc38": "TraceToToken(address,uint256,uint256,address)", +"6e66f6e9": "tokenReward()", +"6e676b69": "changeVotingRules(uint256,uint256,uint256)", +"6e67b803": "bid3(address,uint256[],uint256[])", +"6e680ee7": "CREATORS_WALLET_ADDRESS()", +"6e68751c": "revokeVestedTokensFor(address)", +"6e68ec59": "getSoilHumdtyException(bytes32)", +"6e69e7d7": "maximumNumberOfLoops(uint256,uint256)", +"6e6a1dc3": "weightedVoteCountsOf(uint256,uint256)", +"6e6a42ec": "retraitStandard_1()", +"6e6b4bed": "getArt(string)", +"6e6b8004": "upgradeGemsSpecial()", +"6e6beb07": "PreSaleBuy()", +"6e6bfca0": "cancelJobByProvider(bytes32)", +"6e6c4c58": "CrowdTmoney2()", +"6e6ca42f": "RefundError(address,uint256)", +"6e6ca6f5": "getLastTransferred(address)", +"6e6d83d2": "cancelLoanRequestAtIndexByLender(uint256)", +"6e6d9a6c": "Token(address[],uint256[])", +"6e6e8a02": "addWhitelist(address,address[])", +"6e6ed399": "priceValidSeconds()", +"6e6f2fe5": "DentacoinToken()", +"6e6fe3d6": "ClaimMTU(bool)", +"6e6ff8a9": "lockDays()", +"6e70096e": "withdrawEarnings(uint256)", +"6e70cb07": "getAssetHolders()", +"6e70de82": "transitionState()", +"6e720693": "RevokeEvent(address,address,uint32)", +"6e722fcb": "getIsBonusClaimed(uint256,address)", +"6e725302": "getRatio(uint256,uint256,uint256)", +"6e730a67": "setSecondStageEndsAt(uint256)", +"6e733f50": "getCap(string)", +"6e743fa9": "punkBids(uint256)", +"6e74774a": "MHCTokenIssue(address)", +"6e752548": "finalizeStartTime()", +"6e754efb": "daysnumber()", +"6e761a73": "claimDevReward(address)", +"6e76a89f": "validateReserves()", +"6e76fb4c": "MemberRemoved(address)", +"6e779481": "ADVISORS_CAP()", +"6e77d4bb": "CryptoMountainsToken()", +"6e787a48": "correctOriginalSupply()", +"6e78e95f": "CryptoLeaders()", +"6e79ae56": "deleteOpenAction(string,string,string,string,string)", +"6e7a824f": "TestCoin(uint256,string,string)", +"6e7b698f": "drops(address[],uint256)", +"6e7bc3e5": "addContractOwner(address)", +"6e7c1700": "getJobName(uint256)", +"6e7c1c2b": "getWithdrawDigest(bytes32,address,uint256,uint64)", +"6e7c77b6": "testClaimTokens()", +"6e7d9dc6": "transferCreatureOwnership(address)", +"6e7e3b2b": "contributors()", +"6e7f26ab": "distributeToken(uint256,address[])", +"6e80a869": "minimalInvestmentInWei()", +"6e823b47": "controlledBurn(address,uint256)", +"6e82e86a": "getHash(uint256[])", +"6e843a74": "AgreementUrlRu()", +"6e8480e0": "TokenMetadata(string,uint8,string,string)", +"6e8595f5": "CheckAddressVerified(address)", +"6e861c0e": "deauthorizeContract(address)", +"6e8755af": "updateRewardsFor(address)", +"6e880e4d": "PreminedAsset()", +"6e88147e": "tradeReport()", +"6e88274b": "GetBetBalance()", +"6e883095": "checkPrizes(address)", +"6e8851a9": "initSale2()", +"6e885bd7": "workerPoolHub()", +"6e88865a": "teamAddressFreezeTime()", +"6e88a7bd": "referrerFee()", +"6e88b4ef": "tgeStageBlockLeft()", +"6e88d5fa": "judgeFakeTokenAndTransfer(uint256,address)", +"6e899550": "setString(bytes32,string)", +"6e89d517": "Deposited(address,uint256,bytes)", +"6e8a3438": "TransferStatusChanged(bool)", +"6e8a3d4b": "SerpentIsRunning()", +"6e8a6d12": "updatePriceAddress(address)", +"6e8ab641": "Arbitragebit()", +"6e8ac0c8": "developersAllocation()", +"6e8add02": "setMainsale(address)", +"6e8b7c23": "numcalls()", +"6e8c2caf": "gameRunning()", +"6e8c57e6": "minBalanceToAllowContractCreation()", +"6e8d3007": "CapitalTechCrowdsale(address,address,address)", +"6e8d82af": "swapToken(address)", +"6e8dad74": "retrieveAccountBalance(bytes,bytes)", +"6e8dba91": "getInitialData()", +"6e8dc135": "WinnerSelected(address,uint256,uint256,uint256)", +"6e8ddc7a": "LuxArbitrageToken()", +"6e8de595": "setBoardMember(uint256,uint256,uint256)", +"6e8e39d1": "QRG(uint256,string,string)", +"6e8f7142": "put(address,string,string)", +"6e8f8d69": "getInvestorsCount(uint256)", +"6e900256": "addData(bytes32,bytes32,bytes32,bytes32[],uint256[],uint256[],uint256[],uint256[])", +"6e9067fb": "getRole(string)", +"6e90a590": "expectedTotalSupply()", +"6e914d97": "requestAdminTokenTransfer(address,address,uint256,string)", +"6e929838": "PAXToken(address,address,address,bool)", +"6e929d4c": "sendIBTCTokenToMultiAddr(address[],uint256[])", +"6e932270": "dewhitelist(address)", +"6e939d05": "moveFromState(bytes32,int8[128],uint256,uint256,bytes)", +"6e93dbdc": "koCommissionAccount()", +"6e940a29": "changeHost(address)", +"6e942390": "howMany(uint256,uint256)", +"6e942f82": "buildingCostWei()", +"6e947298": "getETHBalance()", +"6e94d278": "burnReputation(uint256,address,address)", +"6e95a066": "IouRootsPresaleToken(string,string,uint8)", +"6e96433f": "multiPartyTransferFrom(address,address[],uint256[])", +"6e96463f": "BonusesUpdated(address,bool)", +"6e965a89": "calculateWeeklyTokensSupply()", +"6e968bca": "getSidesArray(uint256)", +"6e96bbeb": "crowdsalePurchasesLoaded()", +"6e96dfd7": "_setPendingOwner(address)", +"6e97041e": "SCPS1Token()", +"6e970dfd": "retireMaster(address)", +"6e974fd6": "approveWalletFeeData(uint256)", +"6e977865": "dadFab()", +"6e978d91": "right90(uint256)", +"6e98a92b": "fundManagementAddress()", +"6e995bd9": "updateChannelState(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"6e9960c3": "getAdmin()", +"6e997972": "modSymbol(string)", +"6e99d52f": "COOLDOWN_PERIOD()", +"6e9a41c3": "DraftCrowdsale(uint256,uint256,uint256)", +"6e9af3f7": "giveForce(address)", +"6e9b134e": "LogCancelDelivery(address,string)", +"6e9b41d4": "releaseForGoolaTeam()", +"6e9c3683": "getIndexByProposalId(bytes32)", +"6e9c4650": "prepaidUnits()", +"6e9c4d0a": "rateTenant(uint256)", +"6e9c931c": "stake(uint256,address,uint256)", +"6e9cfb79": "itemReturn()", +"6e9d3b9d": "AtoOneCoin(uint256,string,uint8,string)", +"6e9e48ef": "tokenIdToOwner(uint256)", +"6e9ffe2b": "updateTransferRestrictionVerifier(address)", +"6ea007b3": "dailyLimitLeft()", +"6ea056a9": "sweep(address,uint256)", +"6ea07a36": "recoverSimple(bytes32,uint8,uint256,uint256)", +"6ea11f65": "togglePublicMatches()", +"6ea141cb": "AddBonusToList(bytes32,uint256,uint256)", +"6ea150e2": "changeWithdrawTimeRange(uint256,uint256)", +"6ea16f3a": "tryRefund()", +"6ea16f81": "houseTraits(uint256,uint256)", +"6ea34ce4": "getPartById(uint256)", +"6ea38199": "getMoreAuctionDetails(uint256)", +"6ea3b6d1": "ICO_Finished()", +"6ea3f1cb": "GetFreebie()", +"6ea405d3": "Tax()", +"6ea412b1": "Exchanged(address,uint256)", +"6ea42555": "pack(uint256)", +"6ea451e4": "setSaleLimit(uint8)", +"6ea51811": "icoStartP4()", +"6ea521d9": "_voteAs(address,uint256,uint256,uint256,string)", +"6ea68360": "newMasterCopy()", +"6ea69c91": "closePositionOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"6ea6b71b": "tokensRaised()", +"6ea6d76d": "initGame(string,bool,uint256)", +"6ea6db3c": "token(uint256,string,uint8,string,address,uint256)", +"6ea6f0c3": "initializeTopUpLimit(uint256)", +"6ea7064b": "contractorProposal(uint256,address,uint256,string,bytes32,address,uint256,uint256,uint256)", +"6ea79583": "team_wallet()", +"6ea798bc": "MyMiniToken(uint256)", +"6ea8efea": "getGameNum()", +"6ea928d9": "getSymbolHash()", +"6ea96bcd": "defaultBuyerLastPaidAt()", +"6eaa0f16": "CCTOKEN()", +"6eabb2f6": "getWineryOperation(string,address,uint256)", +"6eabcd69": "__abortFuse()", +"6eac86d4": "settleTransaction(bytes32)", +"6eaccf4c": "privilegedTransfer(address,address,uint256)", +"6eacd48a": "ownerPauseGame(bool)", +"6eadcc87": "tokenSetup(address,address,address,address,address)", +"6eaddad2": "setDevPercent(uint256)", +"6eadeba0": "resolve_block_hash(uint256)", +"6eae0843": "getTeam(uint16,uint8)", +"6eae555d": "amendDisputeDispersal(uint256[])", +"6eaefc87": "tokenExchangeRateBase()", +"6eafbe88": "ChangeTeamHolder(address,address)", +"6eb060ea": "setMinBuyPublic()", +"6eb09ce2": "ethbalance(address)", +"6eb1546d": "_removeBid(uint256)", +"6eb1e09a": "fechVoteMainInfoByStage(uint256)", +"6eb21929": "softcapReached()", +"6eb227ce": "getCurrentWeek()", +"6eb25ed8": "distributionOne(address)", +"6eb267ab": "CxNtoken(address)", +"6eb2a749": "isMaySale()", +"6eb2f0cc": "payShareholders(uint256)", +"6eb305aa": "getTimestampInSeconds()", +"6eb47ea7": "linkTeamToUser(address,bytes32)", +"6eb5197d": "getFirstAdmin()", +"6eb58224": "castDocumentVote(uint8,bytes32,bool)", +"6eb5ad4f": "lockPriceChange()", +"6eb5bef0": "addressSupporters()", +"6eb5ebae": "FidgETHSpinner()", +"6eb6c8fb": "MoneyToken()", +"6eb6ffa7": "initialQuorumPercent()", +"6eb769d2": "tokenTotalSold()", +"6eb7b4c2": "underdogInfo(uint256)", +"6eb7c67b": "_getEthPrice()", +"6eb85627": "Stalincoin()", +"6eb86537": "getAllPackage()", +"6eb91683": "donateForContractHealth()", +"6eba2b13": "getOrder(address)", +"6eba68f9": "ICOFactoryVersion()", +"6ebb6d80": "attack(address,uint8)", +"6ebbe863": "updatePublishContract(address)", +"6ebbfd5a": "addItemTo(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"6ebc0af1": "tranche()", +"6ebc6200": "CURRENSEE(address,address,address)", +"6ebc8c86": "getContract(uint256)", +"6ebcf607": "_balances(address)", +"6ebd9d7f": "setApiRegistryContractAddress(address)", +"6ebdac12": "removeProductFromCart(uint256)", +"6ebe299f": "adventureDataContract()", +"6ebf10fe": "storeHeader(bytes,address)", +"6ebf5223": "ProofOfSheepM()", +"6ec012e7": "saleIndex()", +"6ec03f7a": "removeCrydrView(string)", +"6ec05f13": "EURWEI()", +"6ec069f8": "teamOneDivsUnclaimed()", +"6ec0ce6e": "_isController(address)", +"6ec232d3": "gasprice()", +"6ec236ed": "calculateTaskDeposit(uint256)", +"6ec23e53": "OPTIToken()", +"6ec25a06": "tokenCreated(address,uint256,string)", +"6ec2e979": "bothHaveAttribute(address,address,bytes32)", +"6ec2f223": "createVestingInternal(address,uint256,uint256,uint256,uint256,bool,address,uint256)", +"6ec32f9c": "getRepayAmount(uint256)", +"6ec386d3": "AutoChainTokenCandy()", +"6ec3af26": "addTrustedIssuer(address,bytes)", +"6ec40f9e": "GAME_POOL_INIT()", +"6ec4c951": "claimWithdraw(address,uint256)", +"6ec4e5b8": "callERC165SupportsInterface(address,bytes4)", +"6ec5239f": "setAvatar(string)", +"6ec62f29": "assertEq28(bytes28,bytes28)", +"6ec6d4a6": "setMinLimit(uint256)", +"6ec7743d": "getSubjectClaimSetEntryAt(address,uint256,uint256,uint256)", +"6ec782d9": "changeWaitTime(uint32)", +"6ec84711": "organizer6()", +"6ec99dd0": "testGetBlobStore()", +"6ec9b125": "EtherSphere()", +"6eca017e": "releaseForYoobaTeam()", +"6eca4a50": "UKTTokenController(bytes32,bytes32)", +"6eca6a9e": "updateRecordName(uint256,string)", +"6ecaa195": "coolness(uint256)", +"6ecb97cd": "getInitializeNumOutcomesValue()", +"6ecbb556": "UAPCrowdsale(uint256,uint256,uint256,address,address)", +"6ecc7bcf": "CeezetTokin()", +"6ecc9ad9": "getInstallments(uint256)", +"6ecd1129": "nextAvailableLevel()", +"6ecd7b70": "CancelSale(uint256)", +"6ece5937": "endGame(uint256,string,address)", +"6ece7d88": "doVote(uint256,uint256)", +"6eced029": "getMsgGasAfter()", +"6ecf9f7b": "hype()", +"6ed0b9d7": "changeStage(uint8,uint256,uint256)", +"6ed28ed0": "store(uint256,uint256)", +"6ed2d8c6": "giantFYou(address,uint256)", +"6ed2fc5c": "PRESALE_WEI()", +"6ed33343": "dsp()", +"6ed33b98": "addSupportedToken(address,address,uint256,uint256,uint256)", +"6ed34394": "totalLockPrincipal()", +"6ed3f468": "sendsignature()", +"6ed40f9d": "isValid(string,string,uint256,uint256)", +"6ed43eb0": "getInvestorList(uint256)", +"6ed4d0c7": "dataCenterGetResult(bytes32)", +"6ed51d94": "isValidBuyOrder(address,address)", +"6ed55eb5": "setUserRating(address,uint8)", +"6ed5777e": "BuyHORSEtokens()", +"6ed5f880": "withdrawGTA(uint256)", +"6ed65dae": "sendCount()", +"6ed6da9e": "getUserById(uint256)", +"6ed6e17a": "updateCurGamePrizeInfoWithDraw(uint256,address,uint256)", +"6ed776b2": "createToken(address,address)", +"6ed7c013": "move_monsters()", +"6ed7e058": "rememberAllRequiredBlockHashes()", +"6ed84231": "TOURNAMENT_BATTLE()", +"6ed89fbc": "_transport(uint256,uint256)", +"6ed963b7": "EthereumTravelCrowdsale(uint256,address,address)", +"6ed9c19f": "calculateMasked(address,uint256)", +"6ed9fd89": "avgGas(address)", +"6edb2e8a": "sellPropertyAndChangeOwnership(address)", +"6edb4cf6": "testThrowRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"6edb9ab0": "batchDepositTo(address,address[],uint256[])", +"6edbba2e": "numFree()", +"6edbd134": "hasHash()", +"6edbeb1c": "verificationHoldersTimestampMap(address)", +"6edc7ba7": "getExchangeFunctionSignatures(address)", +"6ede2106": "EtherIn(address,uint256)", +"6ede696b": "PaymentProcessor(address)", +"6edf1cc4": "getWithdrawalForAddress(address,address,uint256)", +"6ee0400d": "ICOBonusPercent1week()", +"6ee1844e": "KnownOriginDigitalAsset(address)", +"6ee18573": "addWhitelistOperator(address)", +"6ee2627b": "maxFundLimit()", +"6ee2e362": "CleanCurrentRoomAndRound(address)", +"6ee2ed5d": "totalSpinners()", +"6ee31a18": "upgradeToken(address)", +"6ee3d453": "modifyGameItemPrice(uint256,uint256)", +"6ee3e896": "setDefeats(uint256,uint16)", +"6ee4b475": "InitialBlockCount()", +"6ee4d553": "cancelOracleRequest(bytes32,uint256,bytes4,uint256)", +"6ee5d676": "getSumCourse()", +"6ee61483": "changeBuyin(uint256)", +"6ee63f1f": "MineableToken()", +"6ee64345": "endMainSale()", +"6ee678ae": "_burn(address,address,uint256)", +"6ee74b3c": "Test5()", +"6ee7826f": "_getRoundedPrice(uint256)", +"6ee78aea": "isMultiple(uint256)", +"6ee7a063": "createInstance(address,bytes32,address,bytes32,bytes)", +"6ee8067f": "whitelistManagerAddr()", +"6ee84bb7": "SDD_Erc223Token()", +"6ee88301": "getRoomOwner(uint256)", +"6eea4820": "QBT()", +"6eeb553f": "pollBurnCompleted()", +"6eeb7a36": "setCreator(address,bool)", +"6eeba5c6": "short_party()", +"6eebad9e": "Jitech(uint256,string,uint8,string)", +"6eebb73f": "activateZone(int32[],int32[],uint8[],uint8[])", +"6eec21d6": "vault_deposit(address,uint256)", +"6eec2dd2": "Released(bytes32)", +"6eec3db6": "allocateAdvisorTokens()", +"6eecb7c2": "getDomainTypehash()", +"6eecf81a": "SetPrcntRate(uint256)", +"6eedc46d": "tokenWalletChange(address)", +"6eee2dad": "mintRewardTokens(address,uint256)", +"6eeeca03": "finalizeSale2()", +"6eef0326": "placeBetOdd(uint256)", +"6eef2cb7": "functionTwo()", +"6eef7a05": "bytesToString(bytes32)", +"6eef908f": "startReceiveTicket()", +"6ef0a5cf": "singleTransferToken(address,uint256)", +"6ef0c864": "SetDataAddress(address)", +"6ef0f37f": "setHome(address)", +"6ef181a8": "setRarityMultiplier(uint8)", +"6ef1a114": "transfersRemaining()", +"6ef1f3a6": "luckyOne(uint256)", +"6ef27042": "CentraToken()", +"6ef33b8f": "getInfo3(address,address)", +"6ef3732d": "fixDividendBalances(address,bool)", +"6ef3ef7e": "approveData(address,uint256,bytes)", +"6ef4e8db": "getCalcToken()", +"6ef61092": "withdrawn(address)", +"6ef72aaa": "BattleResult(address,address,uint256[],uint256[],bool,uint16,uint256,uint32,uint32)", +"6ef791bb": "WylSistContract()", +"6ef8c661": "addInfoListItem(bool,address,address,uint256,string)", +"6ef8d66d": "renouncePauser()", +"6ef958df": "changeSource(string,string,uint256)", +"6ef98b21": "withdrawOwner(uint256)", +"6ef9bc29": "phase3EndingAt()", +"6ef9e145": "weiBalances(address)", +"6efa0621": "SPPSeriesB(uint256,string,uint8,string)", +"6efa629d": "releaseFees()", +"6efa6a67": "PAYOUT_PCT()", +"6efab8f2": "overloadedMethod(address)", +"6efaf16c": "disableAutoSeller()", +"6efbb60a": "addONG(bytes32,string,string)", +"6efbd610": "coownerPrice()", +"6efd1adf": "RATE_EXPONENT()", +"6efd5974": "signedApproveHash(address,address,address,uint256,uint256,uint256)", +"6efe39a3": "getEncryptedKeyFromRequest(uint256,uint256)", +"6efef04d": "setLevelEndDate(uint256,uint256)", +"6eff2044": "onlyOwnerOrManager()", +"6eff8071": "addFuelFree(uint256,uint256,uint256,uint256)", +"6eff96f2": "rafflepot()", +"6effb219": "changeCreditFundNIMFAAddress(address)", +"6effb579": "stop_sell(uint256)", +"6effdda7": "Trade(address,uint256,address,uint256,address,address)", +"6effe1c7": "startSale2Phase()", +"6effec50": "forwardCall(address,uint256,bytes)", +"6f00a3cf": "DumpDivs()", +"6f00ad8a": "lastmoney()", +"6f00fd97": "createTokenTransaction(address,uint256,uint256,uint256,uint256,address,uint256)", +"6f015889": "Activate(address,uint256,string)", +"6f0166c4": "GeoGems(address)", +"6f01d915": "addHedge(address,uint256,uint256,bytes3,bytes3,uint64,bytes32,bytes32)", +"6f020775": "totalCoinLock()", +"6f022ac4": "cancelMigration(address)", +"6f02483f": "EtherGang()", +"6f024899": "Destructible()", +"6f025aec": "MolikToken()", +"6f025c84": "MithrilDemo()", +"6f03e307": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[])", +"6f03e4f9": "getClientBalances(address)", +"6f0470aa": "candidates()", +"6f04ff33": "increaseSalesBalance(address,uint256)", +"6f0503ad": "setDerivePayoutDistributionHash(bytes32)", +"6f05994e": "addBalanceFor(address,uint256)", +"6f0663f0": "RadioCoin()", +"6f069cfe": "technik()", +"6f06fdb3": "hasAgreement(uint256)", +"6f079f90": "getPricingEndsAt()", +"6f086122": "preSignedHashing(bytes8,address,address,uint256,uint256,uint256,uint8)", +"6f08effa": "manualBonus()", +"6f09240f": "runScript(bytes,bytes,address[])", +"6f0963b0": "isMemberBlocked(address)", +"6f096f75": "investorPayment(address,uint256)", +"6f0a150f": "restartRound(bool,bool)", +"6f0a74d5": "_8_poluchaetLesha()", +"6f0ac394": "getCP(address)", +"6f0b5180": "buyFor(address)", +"6f0cd3a6": "m_active()", +"6f0cfab6": "DNSResolver()", +"6f0d0a38": "CrocsFarmer()", +"6f0f45d2": "OPERATIONS_ADDRESS()", +"6f0fccab": "getTokenName(address)", +"6f0fdce8": "Task(address)", +"6f1003c4": "minEsteemAmount()", +"6f109879": "impl_transferMSM(address,address,uint256)", +"6f10d1a0": "addNewToken(bytes32,address,address)", +"6f10fdbd": "totalPlay()", +"6f117190": "getInitialTerrain(uint256,uint256)", +"6f11a859": "availableAirdrop(address)", +"6f1236e1": "ETHPriceProvider(string)", +"6f1296d2": "wrapEther()", +"6f13b95d": "editTokensForHour(uint256)", +"6f13e01b": "EthVenturePlugin()", +"6f13eb09": "BlockChainZB(uint256,string,string)", +"6f1427b2": "icoInProgress()", +"6f147f5c": "addWhiteListed(address[],uint256[],uint256[])", +"6f14dc62": "storehouse(bytes32)", +"6f152670": "max_fundingGoal()", +"6f15847f": "recordInfo(bytes32,uint256,string)", +"6f159c4f": "founder_token()", +"6f16a595": "PRICE_MIN()", +"6f17a516": "ln_fixed3_lnr(uint256,uint256)", +"6f181303": "ScriptCallable()", +"6f18337d": "IHF(address,uint256)", +"6f18d3f5": "traded_token_is_seeded()", +"6f1a5b72": "updateTokenHolder(address)", +"6f1a78cc": "deleteWebsite(address)", +"6f1aa1f5": "requestTokenIssue(address,uint256,string)", +"6f1ae5de": "_itemRemoveMarkets(uint256)", +"6f1c8a51": "_getHash(address,bytes32)", +"6f1ca0c2": "preicoSupply()", +"6f1cecd8": "unreadMessages(address,uint256)", +"6f1db0b7": "createNewBid(string,uint256)", +"6f1e54c3": "sellMyTokensAmount(uint8,uint256)", +"6f1e6419": "MANHATTANPROXYYORKAVE()", +"6f1e738c": "updateISIN(string)", +"6f1fb766": "sealedBids()", +"6f200ce3": "transferBlock(address,address,uint256)", +"6f204f20": "getChannelInfo(address,address,uint8)", +"6f2130d3": "amountOfCRs(address)", +"6f2223c5": "getRefereeAddress(address)", +"6f227851": "USDValue()", +"6f2293ab": "transferFrom(address,address,uint256,bool)", +"6f22993c": "moveTokens(address,address,uint256)", +"6f22d6a5": "losses()", +"6f24fe30": "notifyPledgeNotPayed(uint256)", +"6f253319": "CurrentGoldPrice()", +"6f259077": "STAGE_ONE_TIME_END()", +"6f2594a0": "moduleMultiOwner(address)", +"6f264776": "buy10tickets()", +"6f264b2e": "requiredTokenAddress()", +"6f26d566": "dailyLottery()", +"6f28a853": "assertNotSpent(uint256,int256,bytes32,bytes32)", +"6f28ee09": "storeHash(string,string)", +"6f290893": "Refund(address,uint256,uint256,int256)", +"6f29c88a": "exchangedNum()", +"6f2b1226": "upgradeBank(address)", +"6f2f098b": "Cite(bytes32)", +"6f2f7a57": "getWinNumber()", +"6f2fc06b": "proxyPayments(address)", +"6f2feb0a": "approveAndSell(uint256,uint256)", +"6f307dc3": "underlying()", +"6f30e1ee": "PunkBidWithdrawn(uint256,uint256,address)", +"6f3165d3": "UpgradeRig(uint8,uint256)", +"6f320970": "vernamCrowdSale()", +"6f322fef": "Atra()", +"6f326ac6": "checkStorageProof(bytes32[],address)", +"6f32a937": "min256(uint256,uint256,uint256)", +"6f32b2ac": "setRSPScienceAddress(address)", +"6f32b4cb": "mainICOSecondWeekEndTime()", +"6f3355af": "isBreakingCap(uint256,uint256)", +"6f335870": "sections()", +"6f3395b2": "_tradeEtherDelta(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"6f33ae68": "HouseFeeUpdate(uint256)", +"6f341804": "activeteICO(uint256)", +"6f34a7ff": "sanctuary()", +"6f35c749": "SECONDS_OF_DAY()", +"6f362c2b": "latestSpender()", +"6f3640f7": "getRealUsdAmount()", +"6f36ce79": "insert_deal(address,address,uint64,uint128,uint32)", +"6f370b20": "Austriachain()", +"6f373cb7": "PullRequestClaimed(uint256,uint256)", +"6f374a12": "setBool()", +"6f37f48b": "firstToken(address)", +"6f38e410": "maxLevels()", +"6f3921ee": "extended()", +"6f3a7561": "SimpleAuction(address)", +"6f3ad341": "ICO_ONE()", +"6f3b2819": "secondChainHNw2()", +"6f3b4759": "lockMultiple(address[])", +"6f3b60d6": "latestOrderId()", +"6f3b6d00": "RESERVED_TEAM_SIDE()", +"6f3b8ce2": "getArrayAddress(bytes32)", +"6f3b97a4": "DeactivatedContract(uint256)", +"6f3bb97f": "unsetVipAddress(address,address)", +"6f3be1da": "lift_ban()", +"6f3be6b7": "ELEXTROCOIN()", +"6f3bf6ea": "GMC()", +"6f3c8566": "redeemWarriors()", +"6f3d8043": "valueAfterReducingFee(uint256)", +"6f3f6870": "CertAdmins(address)", +"6f3fe404": "updateBalances()", +"6f414fbb": "sale1Started()", +"6f4215b1": "setEthRate(uint256)", +"6f42879f": "wantsToFight(uint256,uint256)", +"6f42934d": "getTimePurchase()", +"6f42c901": "teamAddresses(address)", +"6f43233a": "getAnyAddressTokenBalance(address,address)", +"6f44c4d7": "recipientVIP()", +"6f4618d8": "firstReserveAllocation()", +"6f468289": "CONTRIB_PERIOD2_STAKE()", +"6f475e7f": "validateTransfer(address,address)", +"6f476cbc": "opMinted()", +"6f479f57": "changeSellingPrice(uint256,uint128)", +"6f47b075": "test_set_get_Policy()", +"6f47e218": "sharesRaised()", +"6f4812e2": "testFailControllerInsufficientFundsTransfer()", +"6f48455e": "checkMinMaxInvestment(uint256)", +"6f488063": "getPOOL_edit_7()", +"6f494049": "registerPublicKey(uint256,uint256)", +"6f49a3c0": "openChest()", +"6f4a2cd0": "distributeRewards()", +"6f4b31cc": "Bastonet()", +"6f4bda17": "numberOfPlayers()", +"6f4be234": "EMJAC()", +"6f4c6443": "invite(address,address)", +"6f4ca36e": "Tracto()", +"6f4ce56a": "indexOf(bytes32)", +"6f4d469b": "addMembers(address[])", +"6f4d6f5d": "ShitToken(address)", +"6f4d80e5": "m_state()", +"6f4db6a7": "hasRepeat(uint8[4])", +"6f4dd69c": "testSetBalanceUpdatesSupply()", +"6f4dfede": "GetExpireTime()", +"6f4eb87e": "test_removeFromRegistry()", +"6f4ebb70": "calculate_reward(uint256,address,uint256)", +"6f4efd53": "POTJ()", +"6f4f2ec3": "ERC20Template(string,string,uint8,uint256,address)", +"6f500df5": "claimCofounditTokens(address)", +"6f503750": "LogPermit(bytes32,bytes32,bytes32)", +"6f503e67": "vestingOf(address,uint256)", +"6f512e61": "setSgdToEthRate(uint256)", +"6f51d01f": "getUserBlockNumber(bytes32)", +"6f52167d": "payDuel(address,string,address,string)", +"6f53a48a": "Bitprize()", +"6f53da8f": "benefitFunds()", +"6f53df6c": "EtheraffleLOTPromo()", +"6f540fe0": "setCampaign(address)", +"6f54e4df": "candyper()", +"6f54e89e": "getMaximumFunds()", +"6f5736c6": "getFreeFalcon()", +"6f5831cb": "startTokensSale(address,uint256,uint256,uint256,uint256)", +"6f584bd8": "View_TrustlessTransaction_Info(uint256)", +"6f58659b": "totalRewardIssuedOut(address)", +"6f59a5cc": "curBubbleNumber()", +"6f5b286d": "tokenUnsold()", +"6f5cca83": "withdrawForCompany()", +"6f5d616b": "execPermissions(address)", +"6f5d64fa": "FSNASAddress()", +"6f5d712e": "TOTAL_TOKEN_CAP()", +"6f5da839": "Token(uint256,string,string,uint8)", +"6f5da961": "transferEntityOwnerPull(address)", +"6f5e7398": "dasToken()", +"6f5eb4b5": "publicSell(uint16)", +"6f5f20ce": "INITIAL()", +"6f5f7ba2": "CreatedYUPIE(address,uint256)", +"6f5f8f74": "Cryptoloans()", +"6f5f9498": "InitializedManager(address)", +"6f6007bb": "StartdatePresale()", +"6f609714": "FrameworkToken()", +"6f625567": "roleAdd(address,string)", +"6f62cba3": "resetUserRefBalance(address)", +"6f62e755": "changeGatewayAddr(uint32,address,string)", +"6f63d2ec": "left66(uint256)", +"6f64234e": "sendFunds(address,uint256)", +"6f64824b": "setErc677token(address)", +"6f64ccf5": "checkVestingTimestamp(address)", +"6f652e1a": "createOrder(address,uint256,uint256,uint256)", +"6f6541e0": "SetLot(uint256)", +"6f656c2d": "getPhaseEmissionType(uint256)", +"6f6640c1": "AnthillFarmer()", +"6f66d23b": "adminGetWorldData()", +"6f6781d3": "getPosition(uint8)", +"6f68d634": "acceptTrusteeOwnership()", +"6f68fffd": "setEndSaleTime(uint256)", +"6f691500": "getMySecondAmount()", +"6f698fb5": "setMinimumQuorum(uint256)", +"6f6aadfb": "SnovPresale()", +"6f6b32ad": "PVXToken()", +"6f6b6963": "VestingCreated(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"6f6bdbe3": "specialUsers()", +"6f6c0244": "generateShortLink()", +"6f6c0759": "onlyPayForFuel()", +"6f6c7234": "setApoderadoVerify(bytes32,bytes32,bytes32)", +"6f6cd9f5": "isElectionPeriodProposal(uint256)", +"6f6d3694": "removeRound(uint256,uint256)", +"6f6eacee": "availbleToken()", +"6f6f828e": "removeAllTournamentContenders()", +"6f6f9bef": "getLandInfo(uint256)", +"6f6ff3bc": "setVesting(address)", +"6f7030f6": "calculateCuts(uint256)", +"6f704aa6": "TreasureToken(address,address)", +"6f70a22f": "deadlineThree()", +"6f70b9cb": "getWinningChildUniverse()", +"6f7154c8": "getIsStopFunding()", +"6f71f407": "freeze(address,uint8)", +"6f72fd20": "calculateBonus(uint256,uint256)", +"6f74174d": "finalizeIt(address)", +"6f741cff": "getPauserList()", +"6f7429ab": "modifyDescriptionManual(uint256,address,string)", +"6f7495cb": "unproducedCaps()", +"6f74dafe": "getGodAddress()", +"6f752f09": "backendContract()", +"6f75b00c": "removeBuyer(address)", +"6f75cd14": "DappToken()", +"6f766f20": "refundTRA()", +"6f7705c2": "becomeRichest(string)", +"6f77926b": "getUser(address)", +"6f784c5b": "totalAmountOnICO()", +"6f78ee0d": "rap(bytes32)", +"6f7920fd": "tokenCreationCap()", +"6f79301d": "getCreationTime(bytes32)", +"6f796d86": "JACK(string,string,uint8,uint256)", +"6f799cf9": "_amountRaised()", +"6f7b5a56": "getDEditorArbitraryData(bytes32,bytes)", +"6f7d9acf": "setupInitialSupply()", +"6f7f461d": "manager1()", +"6f7fc989": "teamIssue(address,uint256)", +"6f80602b": "NewOrleansCoin()", +"6f80dc23": "obfuscatedHashDataBlock(string,string)", +"6f8177f4": "MentalhealthToken()", +"6f81adf6": "Resilium()", +"6f81bdd8": "setRate(uint256,bool)", +"6f826a7d": "testIsEmpty(bytes)", +"6f82e068": "initialSupplyPerChildAddress()", +"6f838a8e": "TESTCOIN1()", +"6f8489af": "CreateGMT(address,uint256)", +"6f84eb6c": "setPatronReward(uint256)", +"6f853964": "setPriceCoeff(uint256)", +"6f8543a6": "CoWithdraw()", +"6f85c7e4": "WAITING_PERIOD()", +"6f85e62c": "buyTokens(string)", +"6f863c21": "inviteIter_()", +"6f872022": "setSectionForSaleToAddress(uint256,uint256,address)", +"6f874abb": "setgasUsed(uint256)", +"6f87dddd": "getPlayerStageKeys()", +"6f882086": "KNCBalance()", +"6f893e0d": "LeeroyPremiumToken()", +"6f8b44b0": "setMaxSupply(uint256)", +"6f8b7574": "createTransaction(address,address,uint256,string,uint256,uint256)", +"6f8c33a6": "getGoldDepositOfAddress(address)", +"6f8c3c0e": "MIToken(uint256,string,uint8,string)", +"6f8c3e4c": "SaraAndMauroToken()", +"6f8c9575": "yearFor(uint256)", +"6f8d3eb0": "withdrawPAXTR(uint256)", +"6f8d998c": "dist(uint256,uint256)", +"6f8dca87": "GetCost(uint256,uint256,uint256)", +"6f8e0a08": "getreward()", +"6f8e1fb6": "testOverflowResistantFraction()", +"6f8ee91c": "level_6_amount()", +"6f8f1de5": "mock_resetLatestPayday(address,address)", +"6f8fb2c3": "CROWDSALE_WEI_GOAL()", +"6f8fccd7": "BioChainCoin()", +"6f9090db": "setwinPercent(uint32)", +"6f90be06": "playFromBalance()", +"6f910c4b": "checkProviderOwnerSupply(uint256,bool)", +"6f9125a5": "pylonSelled()", +"6f9170f6": "isWhiteListed(address)", +"6f919068": "LogUnPause(bytes32)", +"6f91cec0": "ProvideWorkOrder(address,address,address,uint128)", +"6f92096b": "setGasForward(address)", +"6f923a7c": "LockSAToE()", +"6f925535": "revokeAccess(address,uint8)", +"6f92f186": "multiply(address)", +"6f93638e": "isSolvent(uint256,uint256)", +"6f941290": "SelfDropTokens(address,uint256)", +"6f9477c0": "BanAccount(address,bool)", +"6f947d6d": "_emitPublicCapabilityAdded(address,bytes4)", +"6f94e260": "buybackPriceOf(uint256)", +"6f94e502": "getVoter(uint256,uint256)", +"6f954161": "changePreJackpotBidLimit(uint256)", +"6f95dd0b": "RATE_DAY_21()", +"6f9607e5": "countYears()", +"6f964659": "depositMint(address,uint256,uint256)", +"6f969c2d": "getNonFungibleBaseType(uint256)", +"6f96f269": "Mehrancoin()", +"6f977413": "Property(string,string)", +"6f993a74": "rollFour(address,uint8,uint8,uint8,uint8)", +"6f9a023c": "theultimatepyramid()", +"6f9a5eab": "createTx(uint256,address,uint256)", +"6f9b0b7d": "getCurrentGameState(bytes32)", +"6f9b4c1d": "createCastleSale(uint256,uint256,uint256,uint256,uint256)", +"6f9ba978": "_reward(address)", +"6f9c3c8f": "fundReserve()", +"6f9c6194": "P2E()", +"6f9cd7b2": "mirtestToken()", +"6f9cdccd": "setMarketMaker(address,address)", +"6f9d257d": "CONFLICT_END_FINE()", +"6f9d73db": "BuyRocketForSaleEvent(address,address,uint32)", +"6f9f51c7": "RefundsDisabled()", +"6f9fb98a": "getContractBalance()", +"6f9fbd7c": "generateCrabHeart()", +"6f9fdd66": "trust()", +"6f9ff0fa": "GetDynamicCardNum(uint32,uint256)", +"6fa00f07": "agreementSignedAtBlock(address)", +"6fa01c8e": "init(bool,address,uint128,uint128,address,uint64,address,uint256)", +"6fa07d0d": "oraclize_query(uint256,string,bytes[5])", +"6fa0bf39": "getRankDynamic(uint256)", +"6fa1532e": "UpdateBalance(address,uint256,bool,address)", +"6fa15c21": "setPreIcoEndDate(uint256)", +"6fa1d6da": "totalAwardCalculation()", +"6fa23eac": "ShouWangXingAIGO(uint256,string,uint8,string)", +"6fa23f73": "setSupplyLimit(uint16,uint16)", +"6fa25d9a": "Log2_fnc(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256)", +"6fa28249": "getClaimsIdByType(uint256)", +"6fa4095e": "emitHavvenUpdated(address)", +"6fa42742": "arbitrator_question_fees(address)", +"6fa4c766": "revertFunds(address,address,uint256)", +"6fa4f5f7": "setRefPercent(uint256)", +"6fa58335": "tgeDuration()", +"6fa64cd6": "miningIncentiveTokens()", +"6fa65c4f": "MICRODOLLARS_PER_DOLLAR()", +"6fa668f3": "weiForPayment()", +"6fa6ad21": "getDeprecated(bytes32)", +"6fa6c360": "validateTranscriptHash(address,uint256,bytes32)", +"6fa81a3a": "IcoTimeRangeChanged(address,uint256,uint256)", +"6fa87f66": "Moongang(uint256,uint256,uint256)", +"6fa88aa3": "BrazilvsCostaRica()", +"6fa8de90": "changeMeatParameters(uint256,uint256)", +"6fa9ba07": "ShowMsg(bytes)", +"6fa9e255": "LiftUpVets(string,string,uint8,uint256)", +"6faa22a5": "polyToken()", +"6faa52b3": "getOwnerHistoryAt(bytes32,uint256)", +"6faaeca2": "finishBallot(bytes32)", +"6fab5ddf": "Fal1out()", +"6fab94c1": "BitplusToken()", +"6fac46e5": "numberOfRazzes()", +"6fad0a4d": "KPOP_CELEB_CONTRACT_ADDRESS()", +"6fae3d76": "access(address)", +"6faed0e5": "set_master_exchange_rate(uint256)", +"6faf4803": "BitcoinDiamondTest()", +"6faf9323": "TokensPurchased(address,address,uint256,uint256)", +"6fb1eb0c": "commissionFee()", +"6fb1edcd": "sellAllOutcomes(uint256)", +"6fb2d01e": "calculateBonusForHours(uint256)", +"6fb37c18": "TChainToken()", +"6fb3ba9e": "setWorking(bool)", +"6fb438dc": "getTotal(uint256[])", +"6fb487fc": "getListener(address)", +"6fb4adff": "changeFundWallet(address)", +"6fb642de": "setActionContract(address,bool)", +"6fb65c7f": "grantReserveToken()", +"6fb66278": "ratePreICO()", +"6fb6fde6": "AuthAdmin(address,bool,uint256)", +"6fb7110f": "BuckySalary()", +"6fb7b52e": "addCheck(address,address,uint256,bool)", +"6fb7e588": "encodeTokenId(int256,int256)", +"6fb7f147": "getPendingExplore(address)", +"6fb7fc8b": "deltaBalances(address,address,address[])", +"6fb84e84": "fetchVoteInfoForVoterByIndex(uint256,address)", +"6fb8a70d": "responseCounts(uint256)", +"6fb8b885": "RESERVED_TOKENS_FOR_ROI_ON_CAPITAL()", +"6fb93e15": "BuyARXtokens()", +"6fb99dfb": "EventRemoveManager(address,address)", +"6fb9a2b4": "newCrowdsale()", +"6fba4aa9": "GUOcoin()", +"6fba7544": "setMinStartingPrice(uint256)", +"6fbaaa1e": "currentMultiplier()", +"6fbb222a": "setExtendedPlayerAttributesForPlayer(uint256,uint8[])", +"6fbb439e": "assign(string)", +"6fbc15e9": "upgradeTo(address,bytes)", +"6fbc8456": "setUID(uint256,uint32)", +"6fbcbd4f": "WarriorGenerator(address,uint32[])", +"6fbcd0f6": "AnitiToken(address,uint256,uint256)", +"6fbcd1fb": "_getAltarRecord(uint256)", +"6fbd6f6b": "acceptContactRequest(address)", +"6fbdae47": "getArrayInfoForDepositCount()", +"6fbde40d": "setSaleAuctionAddress(address)", +"6fbe769d": "cards_black_total()", +"6fbf466c": "unscannedCaps()", +"6fc141da": "lastPaydayTS()", +"6fc14837": "setMaxStake(uint256)", +"6fc1cbbd": "RexToken()", +"6fc21429": "setgamecardintro(uint256,string)", +"6fc351c2": "Elsevier(uint256,uint256)", +"6fc3911c": "checkVerificationStatus(address)", +"6fc39a38": "changeAgencyReceiver(address)", +"6fc3b0b6": "getTime4(address)", +"6fc3c817": "confirmer()", +"6fc4f2c2": "isOnPreAuction(uint256)", +"6fc559bb": "tokenGrants(uint256)", +"6fc651f3": "TokenAGC(uint256,string,string)", +"6fc65924": "getDisputeEndTime()", +"6fc6df36": "fYou(address,string,string)", +"6fc8e920": "icoBonus4EndDate()", +"6fc90a2f": "submitSolution(uint256,string,bytes)", +"6fc98ee1": "mintTokens(address,address,uint256)", +"6fc9958a": "initBundle(uint8,uint256)", +"6fc9d5e4": "changeCompareTo(uint256)", +"6fca2023": "getSharedAccountsLength()", +"6fcac869": "BONUS_4_DAYS()", +"6fcaea0c": "set_iconiq_presale_open(bool)", +"6fcb0153": "issuanceLastAverageBalance(address)", +"6fcb1500": "defaultSweeper()", +"6fcb4463": "signUpOn()", +"6fcbb546": "extractOre(string)", +"6fcc52e7": "gujarat()", +"6fcdcb3e": "setOwnerLink(address,uint256[2])", +"6fce2d65": "updateAccount(uint256,uint16,bytes32,uint16,bytes32)", +"6fceaea2": "convertToMiniGGC(uint256)", +"6fcebff8": "ConversionSentToShapeShift(uint256,address,address,uint256)", +"6fceecf8": "withdrawRestriction(address)", +"6fcfbe85": "FAFA(address)", +"6fd075fc": "addPlayer(address,uint256)", +"6fd09735": "createDistrito(uint256,address)", +"6fd1bdea": "setProduct(uint256)", +"6fd2e6d0": "TFFC()", +"6fd37039": "WebPaisa()", +"6fd396d6": "lastRewardTo()", +"6fd3a2bc": "createTokensManually(address,uint256)", +"6fd3db86": "withdraw(uint256,bytes32,uint256)", +"6fd42b32": "safeWithdrawal(address)", +"6fd44086": "adviserSupply()", +"6fd463ed": "addressOfTokenUsedAsReward1()", +"6fd5036d": "userChannelsCount(address)", +"6fd507f2": "Tube()", +"6fd5790d": "getCuota(uint256)", +"6fd59b01": "foundationFundMultisig()", +"6fd5ab58": "getTextBytes96()", +"6fd5ae15": "level()", +"6fd63728": "feeFunds()", +"6fd7c035": "EventRedeemStatic(address,uint128,uint256,uint256)", +"6fd7c34c": "setMemberRegistry(address)", +"6fd8282f": "priceLastUpdateRequest()", +"6fd86d44": "emitAccountUnfrozen(address)", +"6fd902e1": "getCurrentBlockNumber()", +"6fd9101f": "ACAToken(uint256,address)", +"6fd9227e": "TokenSold(address,uint256,uint256,bool)", +"6fd98bee": "updateTimes(uint256,uint256)", +"6fda5534": "rockOwningHistory(address)", +"6fdada81": "proofOfRich(string,string)", +"6fdb4f42": "revokeUsers(address[])", +"6fdbc590": "CreateDil(string)", +"6fdc202f": "ownerTransfership(address)", +"6fdc45a3": "BangdiToken(address)", +"6fdca5e0": "setOpen(bool)", +"6fdcc8a9": "listRecords()", +"6fdd2ab4": "createStage(uint8,uint256,uint256,uint256,uint256)", +"6fdd5f58": "ShopKeeper(address)", +"6fde3dc0": "getRunesValue(uint256)", +"6fde8202": "upgradeabilityOwner()", +"6fde90bc": "setCCH_edit_2(string)", +"6fdf9a3f": "sendToRstForAddress(address)", +"6fdf9f28": "setBDError(uint256,bytes)", +"6fe00356": "investorIDs()", +"6fe02e98": "tier3Rate()", +"6fe0e395": "initialize(string,string,uint256,uint256)", +"6fe11695": "isMajority(uint256)", +"6fe12f07": "proverka6()", +"6fe1dbec": "sendSupportETH(address,uint256)", +"6fe1f6b4": "BAD_ERC20()", +"6fe33720": "YOTOKEN()", +"6fe356ea": "moduleIsExist(string)", +"6fe3a567": "tokenMigrated()", +"6fe3ef7c": "resolveEntityAddress(address)", +"6fe497f0": "lockStatus(address,bool)", +"6fe4c195": "lockAddress(address,address,uint256)", +"6fe5091e": "collectPayout(uint256)", +"6fe5b536": "testFailSetEnforceRevisionsNotOwner()", +"6fe64289": "RepuToken()", +"6fe665e9": "SlotMachine()", +"6fe691dc": "getUserTransactions()", +"6fe69dee": "RealtyCashToken()", +"6fe7567b": "_subPurchasedFrom(address,uint256)", +"6fe7f51c": "saleWasSet()", +"6fe83236": "getAllCardAddressesCountOfOwner(address)", +"6fe8c29e": "JEY()", +"6fe8f9c5": "freeTokens()", +"6fe9e7d7": "freezeUserFunds(address,address,uint256,uint256)", +"6fe9f632": "preICOrates(uint256)", +"6febfd02": "getSiteRewards(uint256)", +"6fee558c": "getHookOperatorContractAddress()", +"6fee8458": "burnExcess()", +"6feef2bf": "cancelTknOffer()", +"6fef4fa9": "setAllowedToSell(bool)", +"6ff026e7": "purchased_snt()", +"6ff03fc2": "_removeMaster(address)", +"6ff08dd6": "calcWhiteBase(uint256)", +"6ff10dd7": "TrioPeriodicTransfer(address)", +"6ff1c9bc": "emergencyWithdraw(address)", +"6ff1ed71": "pickUp(uint256)", +"6ff1f2b8": "refererPercent()", +"6ff26ebb": "longBuy()", +"6ff2817c": "batchDetachAssets(uint256[])", +"6ff28657": "Josephtoken()", +"6ff2c12a": "setMiniPoolEdit_6(string)", +"6ff36340": "eTimesChain()", +"6ff46ba7": "deathData_a10()", +"6ff5a670": "PortalToken()", +"6ff6c4b8": "setCreatorFeePercent(uint256)", +"6ff73201": "setCooldownTime(uint256)", +"6ff79410": "numberOfComponents(address)", +"6ff89159": "revokePermission(address,string)", +"6ff8a27e": "buyTokens(address,uint16,address)", +"6ff8e332": "allowedAirDropTokens()", +"6ff93476": "tokensAllocatedForFs(address,address)", +"6ff968c3": "successor()", +"6ff97f1d": "allTokens()", +"6ff9db5b": "msgHash(bytes)", +"6ffa1257": "etherSoftCap()", +"6ffa1caa": "double(int256)", +"6ffa1d48": "LogCreateICO(address,address,uint256)", +"6ffa1ea7": "getRegulatorProxy(uint256)", +"6ffa714d": "extractDepositCommitmentRecord(address[],uint256[])", +"6ffb341e": "calculateKebabBuy(uint256,uint256)", +"6ffbff9c": "importMET(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", +"6ffc0896": "checkIfSuccess(bytes32)", +"6ffc13ab": "POMPAMCOIN()", +"6ffc22b8": "finalizeReservedAddress(address)", +"6ffcc719": "bet(uint256,uint256)", +"6ffd673d": "getcomp()", +"6ffe67f2": "autoDestruct()", +"6ffea7bd": "preToken()", +"6fff0652": "changePlayerTeam(uint256,uint256)", +"6fff15ee": "percPoints(uint256,uint256)", +"6fffffff": "HDK_Crowdsale()", +"70011870": "credexx(address,address,address,uint256,uint256,uint256)", +"7001a2a2": "elcoin()", +"7001fcc2": "closeImports()", +"700215d0": "SellFinishedAutos()", +"70021705": "watchVideoC(address)", +"7002a4e0": "setPartIndex(uint256,uint256[])", +"7003433a": "setRealityCheck(address)", +"70037a71": "setPresaleWhitelist(address,bool)", +"7003a1a3": "EosBlock()", +"7003ce6f": "UController()", +"70049c1c": "forwardEherToOwner()", +"7004a914": "ArbitraryLocker(address,uint256,uint256,uint256,uint256)", +"7006d538": "verificaCertificato(string,bytes32)", +"7007adc9": "finalBlockNumber()", +"7008a4a3": "firstWavePrice()", +"70090164": "PRIVATE_ADDRESS()", +"70097106": "addContent(string,string,uint256)", +"700a7db1": "setCriterionTime(address,uint256)", +"700b7025": "EthereumHotCoin()", +"700c9474": "addUsers(address[])", +"700d3230": "isPiSale()", +"700dd5eb": "AuthorityNotified(string,string)", +"700df1f6": "setMigrationStabitcoinAddress(string)", +"700e17b5": "setData(uint256,uint256,uint256,uint8[])", +"700e8660": "Marriage(string,address)", +"700ef803": "SafeBox()", +"700f1a77": "clampMax(uint256,uint256)", +"700f3a1d": "addToken(string,int256,bytes)", +"700f4e40": "test_invalidProxyOwnershipTransfer()", +"700f55b2": "addTx(address,address,uint256,uint256)", +"700f9d03": "logEndBal()", +"7010129a": "tokenTransferVIP(address,uint256)", +"70101735": "releaseReservedTokens()", +"70103ea7": "setPaperFee(uint128)", +"70107c43": "_zthToken(address)", +"70119d06": "incBy(uint256)", +"70133e4f": "Xerium()", +"70144f8f": "activate_kill_switch()", +"70150282": "FMWorld(address,address,address)", +"701513c0": "addBooking(uint8,uint256)", +"70152dcf": "getPrivacyCoins()", +"7015913c": "end(bytes32)", +"70165470": "ICOFailed(uint256,uint256)", +"70183a4d": "stakingExpiration(bytes32)", +"70185b7e": "updateSafeBalance(uint256)", +"7018665b": "transferMS(address,uint256)", +"7018dcb9": "getCastleNum()", +"7018e950": "affiliatesAllocation()", +"701969e5": "Penny()", +"701ab8e2": "exitOnHaltFromCustodian(address,address[],uint256[],bytes,bytes,bytes32)", +"701adee0": "setRequireWhitelistedAddress(bool,address)", +"701b4063": "balanceOfAtBlock(address,uint256)", +"701b4631": "hasPayroll(address)", +"701b8826": "forwardTo(address,address,address,uint256,bytes)", +"701c3c28": "setApprovalRequirement(bytes4,uint8)", +"701d9ced": "setTransferOCE(bool,bool)", +"701dfb92": "HTL()", +"701e1dfc": "lastInvestorsProfit()", +"701e5729": "canInvest(address,uint256,uint256)", +"701e5e71": "_purchaseCar(uint256)", +"701fd0f1": "reveal(bytes32)", +"702056de": "REKTtoken()", +"70206b05": "RepoHandler(address)", +"7020940a": "NewHope()", +"7020b511": "chainlinkTokenAddress()", +"702123ae": "unitCoinProduction(uint256)", +"70212761": "saleFinalize()", +"7021fad7": "CheckoutLimDay(address,uint256)", +"70220023": "participantsFor3rdSale(address)", +"70228400": "isDonatedEthTransferred()", +"7022b58e": "confirm()", +"70232f00": "ClaimESC(address,uint256)", +"70239222": "testSHA256()", +"70239f0b": "serverEndGameConflictImpl(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", +"70243248": "PeggleCoin()", +"70245bdc": "adoptCat()", +"7024ce7b": "BONUS_ICO_ROUND1()", +"702510be": "payoutSelf()", +"7025b3ac": "ROLE_KYC_VERIFIED_INVESTOR()", +"70260363": "setSignatures(bytes32,bytes)", +"702617e7": "ERC20(string,string,uint8)", +"70267867": "_addBridgeTokenFee(uint256,uint256)", +"70269774": "changeOwnerOfMonethaUsersClaimStorage(address)", +"7026aa04": "getProveHash(address,bytes32,string,bool,uint256,bytes32,uint256)", +"70279554": "budgetAllocation()", +"7028439e": "bonusPreIco()", +"70284d19": "grant(address)", +"7028875e": "changeStrikePrice(uint256)", +"7028b3b9": "GetConsentDataCount()", +"7029144c": "init(string,string)", +"702921f5": "month()", +"70296790": "clever()", +"702a3eff": "advisorsCliff()", +"702a5f4f": "setLLV_edit_31(string)", +"702b5f0b": "calcHash(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address)", +"702b7bc3": "insertValueBonus(uint8,uint256,uint256)", +"702c25ee": "nextMinimumPodSize()", +"702c728e": "changeCloudsPerEth(uint256)", +"702c789e": "select_bua_position(uint256)", +"702c9535": "distributeBalances(address[],uint256[])", +"702cbbae": "isTokenAvailable(uint256)", +"702d58d8": "JiJieHao(uint256,uint8,string,string)", +"702efdf3": "suspended()", +"702f23a6": "transferAndFreezeMulti(address[],bytes32[],address,address,uint256[],uint256[],uint256[])", +"702f9019": "Start_qui_qz(string,string)", +"702fc7da": "ReviewModel()", +"70316f00": "getUserPayedInCurrentRound(address)", +"70320126": "newWitness(address)", +"70320234": "calcBonusTokens(uint256)", +"70324b77": "darknodeBalances(address,address)", +"70327ea1": "disableSelfDestruction()", +"70328770": "logBalance(uint256)", +"7032d758": "SevillavsBayern()", +"7033e4a6": "supportsHistory()", +"7033f1ac": "TNTCoin()", +"7034c939": "test_2_destroyTokens()", +"7034d190": "MainSaleBuy()", +"70354053": "UCCoinSaleIsOff(uint256)", +"70357e79": "func_08D3()", +"70359b36": "makeSuperVisor(address)", +"7036f9d9": "force_partial_refund(address)", +"7037602a": "setAccountData(address,uint256,uint256)", +"7037ec6f": "payEntryFee()", +"70385f0d": "LogPolicyAccepted(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"70387c59": "hashVerification(bytes32)", +"70393686": "getCOOHashing(address,uint256)", +"703950ff": "viewKarmaVotes(uint256)", +"7039dcdc": "setBEY(address)", +"703a6beb": "getUnitsPerPeriod()", +"703aca29": "competitorExists()", +"703add31": "animatorAddress()", +"703b1411": "requestSellforFX(uint256)", +"703bf4a5": "disableGame(address)", +"703bf91f": "betSingle(uint256)", +"703c8a99": "_openProvider(bool,string,string,uint256,string,uint8,bool,address)", +"703dbd81": "setPI_edit_8(string)", +"703df793": "updateHardCap(uint256)", +"703e905b": "getIndexByHash(string)", +"703eb724": "addShare(address)", +"703ee574": "CoinvillaSupply()", +"703f5e8a": "CaDataAddress()", +"703fa81c": "DOSTToken()", +"7040bcc9": "createPlayer(uint256,uint256,string,string,string,string,string,string,address,uint256)", +"7040f3e5": "Allowance()", +"70416f7e": "getCurrentEthFee()", +"7041d925": "outsize(bytes4,bytes)", +"704248ec": "tokensale()", +"7043ca8e": "getOwnerNickName(address)", +"7044ce75": "setTKC(address)", +"70459be2": "transferLeftover()", +"7045b469": "TotlePrimary(address)", +"704691e1": "LuckToken()", +"70477e2b": "Rozium()", +"70480275": "addAdmin(address)", +"7049a425": "MarketboardListingDestroyed()", +"7049cd98": "LinglongCatCore()", +"704a60f1": "failUserRefund(uint256)", +"704b164d": "setTradeIsOpen(bool)", +"704b6c02": "setAdmin(address)", +"704d4051": "periodSalesLimit()", +"704d4ab1": "getLostAndFoundMaster()", +"704d4db0": "poolTotal()", +"704dcedd": "LSC(uint256,string,string,uint8)", +"704dd019": "changeFeeCut(uint8,uint8)", +"704e3dda": "TokenSalePaused(bool)", +"704e7437": "bountyPart()", +"704f1b94": "registerUser(string)", +"704f236c": "freezeAccount(address,address,bool)", +"70502c5a": "testDeleteItem()", +"70505653": "arbitrationAddress()", +"705099b9": "refundTicket(address,uint256)", +"7050a1ea": "TimetechToken()", +"705145c4": "quickCloseChannel(bytes32,address,uint256,address,uint256)", +"7051a831": "setIsContainerForReportingParticipant(bool)", +"7051b075": "TransferToBuyer(address,address,uint256,address)", +"705211f4": "approveAccess(address)", +"7052dad9": "withdrawRemainingTokens(uint256)", +"7053fe8d": "finalize_contract()", +"70544b74": "emergencyDrain(uint256)", +"70544eb9": "hijackPrice()", +"7055011b": "escrowHistory(address,address,uint256,uint256)", +"7055060f": "bulkStoreHeader(bytes)", +"7055410b": "retrait_5()", +"70557298": "testTransferFrom()", +"7055d368": "vote(uint256,uint256[])", +"7056b50f": "blockstillcontracthackable()", +"7056d1f4": "burnLotIdsByAddress(address)", +"70578bda": "SPMTToken(address,uint256)", +"705791f2": "TOKEN_STARTED()", +"7057c20d": "CFD(address)", +"705882f2": "setPOOL_edit_22(string)", +"7058901e": "mtcDailyLimit()", +"70590ca2": "batch(uint256[],address[])", +"7059194e": "deletePlayer(uint256)", +"70597cb1": "startCompanySell()", +"70598a8e": "subTokenBalance(address,uint256)", +"705a3644": "block3()", +"705a940a": "disableBondingCurve()", +"705b164f": "acquireFreeEgg()", +"705b37f4": "getTotalF1()", +"705b5c27": "transferVestingMonthlyAmount(address)", +"705b7efd": "preSaleContributions()", +"705b8845": "askQuestion(string,string)", +"705bbf6b": "updatePrenup(string)", +"705bbfe6": "eastadscredits()", +"705bd32a": "fundDevelopment(string)", +"705ca5cd": "getMultiRequestIdGivenRequestId(uint256)", +"705d528d": "_addMoney(address,uint256)", +"705dae11": "cancelCraftAuction(uint256,address)", +"705e798e": "getLastRoundInfo()", +"705eeb90": "MultipleConstructorTest(bool)", +"705f4630": "chfCentsPerEth()", +"705f911d": "FareBase(uint16,uint16)", +"705fbf3d": "burnTokensAndRefund(address,address)", +"705fe7c6": "testEqualityBytes()", +"7060054d": "dynasty()", +"70606cda": "supportFreezeQuorum()", +"7060bfe4": "busyWork(address,uint256)", +"706194b9": "elenctraToken()", +"7061e777": "Etats_financiers_10111011()", +"70620168": "createBroker()", +"706247a1": "SetVotingDescripion(string)", +"7062640a": "newDeal(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"706332d1": "right46(uint256)", +"70634626": "getBTCAddr(bytes32,int256,bytes32,int256)", +"70646896": "DOWN_etherWin()", +"70646de9": "canSend(uint32,uint32)", +"7064aa96": "APPROVE_CONTRACT()", +"7064b5aa": "getPendingExploreItem(address)", +"7064d509": "tokenBonus()", +"7064e50c": "tokenIssuedMainSaleIco()", +"7064f0af": "COMPANY_ALLOCATION()", +"7065bedc": "getSettingValuesByTAOName(address,string)", +"7065cb48": "addOwner(address)", +"706605b9": "withdraw_arbitrary_token(address)", +"70660f7c": "stakeExistingContent(bytes32,uint256,uint256,bytes8,uint256)", +"70670a20": "Ethash(address[3])", +"7067e881": "RATE_FACTOR()", +"7067f915": "Constructed(address,uint256)", +"706910ff": "buy(uint256,address,uint256,uint256)", +"7069e746": "stakingEpochStartBlock()", +"706a3604": "sethardcap(uint256)", +"706a99fb": "codeExportEnabled()", +"706aba4a": "RNDInvestor()", +"706b5759": "RegisterDomain(string,string)", +"706bfed4": "accessCheck()", +"706df8d6": "getDonationInfo(uint256)", +"706dfe54": "getIssueState(uint256,bytes32)", +"706e11bc": "StartRebuy()", +"706e5b6e": "getOTCTotalSupply()", +"706eb3ab": "ethUSDOracle()", +"706ed71b": "Bomx()", +"706f6496": "goldRate()", +"706f6937": "airdropTokens(address[],uint256[])", +"706f8856": "jiGouTotalBalance()", +"706ff617": "mint(uint256,uint256,address,uint256)", +"70708a3c": "LocalToken()", +"70712939": "removeAuthorizedAddress(address)", +"70713209": "TJCoin()", +"7071688a": "getValidatorCount()", +"707188c1": "changeTime(uint256,uint256)", +"70720fe4": "_maxTokenSoldICO()", +"7072a977": "gasForOraclize()", +"7072aaa3": "newSubdomain(bytes32,bytes32,bytes32,address,address)", +"7072c6b1": "restricted()", +"70732188": "getUserTaskAtIndex(address,uint256)", +"7073c072": "getRegisteredUsers()", +"70740aab": "purpose()", +"70740ac9": "claimPrize()", +"707424fe": "contributorsIndex()", +"70743768": "voteStake(bytes32,uint256)", +"70747544": "currentCapLevel()", +"7074c091": "preSaleBonus1Percent()", +"7075b1d8": "latestMonarchInternal()", +"7076738b": "_emitWorkPaused(uint256,uint256)", +"70767f6c": "fillBidByAddress(address)", +"7076e27f": "riskcoins(uint256)", +"70775a59": "_generic(bytes,uint256,address)", +"707789c5": "setOpsAddress(address)", +"7077c11f": "SubOnHold(uint256,bool,address)", +"70780a7a": "shareholder2()", +"70788340": "Marcelo()", +"7078f424": "getHint(int256,uint256)", +"707913f0": "Add_totalLotteryValue()", +"707a4e96": "start(uint256,uint256,uint256,uint256)", +"707a7ab3": "acceptOwnerTransfer()", +"707a92b8": "FoodCoinToken(uint256,string,uint8,string)", +"707afb1d": "closest(uint256,uint256,address)", +"707b543d": "createNumber(uint256)", +"707ba39e": "VilzToken()", +"707bd28b": "endAirDrop()", +"707bda7a": "GetLastRoomAndRound(address)", +"707bdf58": "MaxTokens()", +"707c4f05": "sendAllFunds()", +"707c6b4d": "blocksInSecondCapPeriod()", +"707c750e": "sixthTime()", +"707d4349": "createPromoCity(address,string,uint256)", +"707d5fe1": "payoutBonuses()", +"707dd840": "TAGCASH()", +"707e8128": "all_referrals_count_by_address(address)", +"707f4ecd": "crowdTokensTLP2()", +"707fe454": "MODXCOIN()", +"70809757": "dispute(uint256,uint256,bytes32)", +"7081150a": "iconToken()", +"7081d5da": "getPoolAvgHatchPrice()", +"708238a0": "mainSaleFirstBonus()", +"708260b4": "teamToken2018()", +"7082b421": "parseBlockHeader()", +"7082d203": "lend(address,uint256,uint256)", +"70835d98": "CoinAllocation(address,int64,int64)", +"70835f6b": "approveAddTokenData(uint256)", +"70844f7a": "sendBadge(address,uint256)", +"708484db": "blikedUntil(address)", +"708547f3": "testUpdateLawyer()", +"70858679": "YDHTOKEN_M(string,string,uint256)", +"70859da8": "TokenReturn(address,address,uint256)", +"7085b579": "b2s(bytes32)", +"70862562": "distributeTokens(address,address,uint256)", +"7086528e": "DemocracyVote()", +"70876c98": "purchase(uint256,uint256)", +"7087b272": "Coneus()", +"7087ed2c": "getClaimSeed(address)", +"70887eb9": "totalSoldTokensWithBonus()", +"7088abf0": "WhiteListCrowdsale(uint256)", +"7089e4f0": "LogBuyEnabled(bool)", +"708a4947": "getOptionState(address[3],uint256[3])", +"708b2097": "TKCC(uint256,string,string)", +"708b34fe": "submitMessage(string)", +"708b9d01": "lockThreshold()", +"708bf79a": "updateMember(address,address,uint256,uint256,string,uint256)", +"708c2956": "YouGive(uint256,uint256,string,string,address,address)", +"708cfb25": "setTeamTokensHolder(address)", +"708d0c57": "updateResolver()", +"708d9fd3": "group_key_confirmed()", +"708da969": "verifyAddress(address,string)", +"708ddf7b": "submitted()", +"708e03d9": "distributionOfTokens()", +"708eef42": "transferOwnershipWithHowMany(address[],address,uint256)", +"708f29a6": "getTotalPayments()", +"708f8940": "getEXECUTION_GAS_OVERHEAD()", +"70905dce": "emergencyAdmin()", +"7091e0c5": "setNewOwner(address,uint256)", +"70926370": "EGGS_TO_HATCH_1BANKER()", +"70936880": "defaultWaitTime()", +"70936a6e": "freezeOf()", +"7093ab11": "privateSell2LockEndTime()", +"70948956": "PolicyPalNetworkToken(uint256,address)", +"7094d21e": "isSuccessOver()", +"70961774": "getBlockCreatedOn()", +"70964be7": "startSellingPhase()", +"7096b6cb": "receiverContractAddress()", +"7097048a": "claimDerivativeTokens()", +"70983e91": "startBoardProposal(uint256,address)", +"70984e97": "bigBlind()", +"70985eb6": "setCrowdsaleContract(address,address)", +"7098ad13": "PropertyCoin()", +"7098e670": "getFincontractInfo(bytes32)", +"70994b31": "getCollectibleDetails(uint256)", +"709a36e6": "getMiningMeta(uint256)", +"709a5359": "updatepresaleRate(uint256)", +"709bc0ff": "AntitiredToken(uint256,string,uint8,string)", +"709be206": "registerCreatorsPools(address[],uint256,int256)", +"709cc16e": "NewCup(address,uint256)", +"709cf8c0": "saleTokensVault()", +"709d8c4e": "DSPLT_A()", +"709e6ed4": "upgradeIdRange()", +"709eaa93": "minerCreatedCount()", +"709ecb39": "findPublisher(address)", +"709ef231": "sellTokens(uint256,uint256,uint256)", +"709f5ccc": "setDivisor(uint256)", +"709f6f25": "setData_19(string)", +"709f84a4": "PriceStrategy()", +"70a0014e": "projectFundingFail()", +"70a01b3d": "addInvestor(address,bool)", +"70a0246a": "toPony(uint256)", +"70a06777": "getTankAuctionEntity(uint32)", +"70a08231": "balanceOf(address)", +"70a0c458": "getBindAccountAddress(string)", +"70a0f1fe": "numChametzForSale()", +"70a14c21": "LogBump(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"70a2b84a": "toggleAvailability()", +"70a4fc11": "toggleDataViewWindow(uint256)", +"70a6c4bb": "receiverWithdraw()", +"70a7b3e8": "_validEstimate(uint256,uint256,uint256)", +"70a7e2dd": "getBunny(uint32)", +"70a8609e": "test_someOtherTest()", +"70a89986": "addContribution(address,uint256,uint256)", +"70a951ce": "TripCash()", +"70aac052": "getRequestedProductsBy(address)", +"70ab2359": "MAX_CROWDSALE_CAP()", +"70ab2822": "assertEq21(bytes21,bytes21,bytes32)", +"70ab8ba8": "creditUpdate()", +"70ac4bb9": "right32(uint256)", +"70ac62ec": "getTranslationLanguageList()", +"70ac970b": "test_24_assertGasUsage700Boards()", +"70aca69a": "lockUpEnd()", +"70acbe0e": "rate_change(uint256)", +"70aceae8": "upX(uint256)", +"70ad0cc6": "delAddr(uint256)", +"70ad858b": "infoWithdraw13()", +"70ae882f": "finishNextGame()", +"70ae92d2": "nonce(address)", +"70ae992a": "pubKeyToAddress(bytes)", +"70aecf61": "getContractReceiver(address)", +"70b0d4ac": "GetAccountIsNotFrozenForReturnCount()", +"70b1d9d4": "requestCanonicalFormat(bytes)", +"70b257a4": "pushClient(address,bytes32)", +"70b2a30f": "tokenToEth(uint256)", +"70b2ef56": "EntropyTestToken()", +"70b2fb05": "bettingEnd()", +"70b3b0e5": "countriesWallet()", +"70b3c7de": "CrypteloPublicSale(address,address,address,address)", +"70b3d68c": "signHash(uint256)", +"70b3db6f": "getCoinAge(address,uint256)", +"70b45ca0": "_rateFromDay(uint256)", +"70b57415": "product2_pot()", +"70b581ad": "finalize(string)", +"70b60760": "getNodeIdsLength()", +"70b7596b": "getWinnings()", +"70b7f9f3": "setTradingAllowed(address,bool)", +"70b80d77": "WCME()", +"70b8206c": "getRoundRefIncome(address,address,uint256)", +"70b84e50": "joinToGame(uint256,uint8)", +"70b8d29a": "saveMsgByAdmin(string,string)", +"70ba1113": "percent()", +"70ba3339": "cancelTransaction(bytes32)", +"70bab35d": "systemStartingPriceMin()", +"70bad87e": "revokeFarmerCertificate(address)", +"70bb478f": "makeTrade(address,address,uint256,uint256,uint256,uint256)", +"70bc52fb": "protectAddress(address,bool)", +"70bdd155": "oracle_price_decimals_factor()", +"70be4ffa": "testErrorUnauthorizedSetPackage()", +"70be564b": "Trump()", +"70be61d1": "ApplicationInFundingOrDevelopment()", +"70be89c1": "addAddressesToWhitelist(address[],uint256)", +"70be8a86": "ownedCoin(address,uint256)", +"70bf7b96": "_collect_fee(address,address,uint256)", +"70c0b647": "getOwed(address)", +"70c0c516": "directMintLimit()", +"70c0f689": "getApplicationState()", +"70c10578": "takeProfit()", +"70c18199": "getResponse(uint256)", +"70c1854e": "FLOCK()", +"70c31afc": "tokenImprint(uint256)", +"70c33b31": "changeGasRequired(uint256)", +"70c35951": "referralPercentOfTotal()", +"70c40842": "_setTokenOwner(address,uint256)", +"70c4488d": "validNick(string)", +"70c494fc": "ATC()", +"70c4ce24": "newListing(string,uint256,string)", +"70c4f2e1": "MIN_SHARE_OF_POWER()", +"70c55e1f": "getTradingPairCutoffs(address,address,address)", +"70c5f786": "TEAM_CAN_CLAIM_AFTER()", +"70c5fc9d": "clearTickets()", +"70c690f4": "MultiOwnable(address[],uint256)", +"70c6abf5": "resetAllData()", +"70c6b20c": "newEntity(uint256,uint256)", +"70c7e230": "change_status(string)", +"70c80630": "isOwner(uint32,int256,address,address)", +"70c8251d": "AttributesSet(address,uint256)", +"70c83314": "airDropToken(address,uint256)", +"70c8405b": "GiftGenerated(address,address,address,uint256,uint256,string)", +"70c8658a": "getNewRegistry()", +"70c8f8ad": "createFirstRound()", +"70c9edb7": "BTCRelayTools(address)", +"70ca4c26": "getLinkedAddress(address,address)", +"70ca6446": "AnotherMethod(uint256,uint256,uint256)", +"70cbed78": "oracleCallbackGasPrice()", +"70cc5e45": "kgtHolderCategory()", +"70ccd928": "hashesLength()", +"70cd89eb": "CRLperMicroEther()", +"70cd9bfd": "GPRDSQToken()", +"70cda533": "updateCoeff(address,uint8,uint128,uint256)", +"70cddf74": "addApproval(address,address,uint256,uint256)", +"70ce0765": "createPromoListing(uint256,uint256,uint256)", +"70ce90d5": "ConfirmManager()", +"70cef2b8": "getVisaPrice(address,uint256,uint256)", +"70cf7508": "isValidAirDropForIndividual()", +"70cfaa8d": "calledUpdate(address,address)", +"70cfab63": "chargeFeeAndLockEthBalance(address,uint256)", +"70d01861": "adminSetCity(address)", +"70d02691": "getAssetBalances(address)", +"70d07575": "awardTokens()", +"70d084c0": "SingularDTVCrowdfunding()", +"70d0c5d8": "EOUNCE()", +"70d0cc86": "getElementView(uint256)", +"70d12c31": "resetPeerWallet()", +"70d1383d": "createEditionMeta(uint256)", +"70d17adb": "isDrawn(uint256,address,uint256)", +"70d19a43": "itemCancelMarketsWhenPaused(uint256)", +"70d1cde4": "randomCount()", +"70d1e6b4": "minimalWeiTLP2()", +"70d22f14": "addHash(address)", +"70d25a9f": "lockUpAmountStrOf(address)", +"70d271ab": "StartCampaign()", +"70d290b5": "getDoneAddresses()", +"70d37810": "makersCount()", +"70d383dc": "createManyProxies(uint256,address,address)", +"70d4d119": "giftEth(address,uint256,string)", +"70d4d7b4": "promoGen0()", +"70d53be5": "find()", +"70d54287": "VantageToken()", +"70d5ae05": "burnAddress()", +"70d60adf": "acceptBid(string,uint64)", +"70d66693": "drainToken()", +"70d695f7": "VerifyEd25519Packed(bytes)", +"70d70e9b": "getCofounders()", +"70d72d63": "getAllPixels()", +"70d762c2": "basicDayPercent()", +"70d7a0e7": "authorizeKyc(address[])", +"70d81666": "LogS(string)", +"70d8915a": "getApplicationAddress()", +"70d94ed0": "getHoldAmount(address,uint256)", +"70d9f7dc": "awardItemRafflePrize(address,uint256)", +"70db69d6": "maxBuy()", +"70dbb783": "AMBASSADOR_TWO()", +"70dc4de5": "withdrawKRI(uint256)", +"70dc8259": "totalDistributedi()", +"70dc86cd": "EARLY_FOUNDERS_CAP()", +"70dd2e06": "setMinActivatedToken(uint256)", +"70ddeb03": "CRMTToken()", +"70de1e30": "getItemItemId(uint256)", +"70de8c6e": "start(string,uint64,uint8,uint32)", +"70dea79a": "timeout()", +"70df42e1": "changeBurnBounds(uint256,uint256)", +"70e0abb1": "returnInvestmentRecursive(uint256)", +"70e0bd61": "setTrustedMinterAddr(address)", +"70e18692": "cancelIncompleteOrders()", +"70e32ae7": "firstBonusLimitPercent()", +"70e3ccf7": "initMiaoMiaoAddress(address)", +"70e44c6a": "Withdrawal()", +"70e4b809": "_setBuyTime(uint256,uint32)", +"70e5bf4d": "queryVote(uint256)", +"70e6b2b9": "makePayableRegistration(bytes32)", +"70e6d387": "evolveCryptoAvatar(uint256,uint256,uint256,uint256,uint256)", +"70e71ea3": "etherandomSeedWithGasLimit(uint256)", +"70e7732d": "getSpecificSellerTransaction(address,address,uint256)", +"70e87aaf": "move(uint8)", +"70e8c1b3": "test_complexNewProposalAndVoting()", +"70e8dffa": "TokenHold(address,uint256)", +"70e9a612": "BariCoin()", +"70e9ff60": "cancelBuyOrder(address,uint256)", +"70eaa1b4": "Error(uint32)", +"70eae6c0": "travelTotalEarning()", +"70eb6424": "setSmsCertificationRequired(bool)", +"70ebf814": "addUntrustedSelfDelegation(bytes32,bytes32,bytes32[2])", +"70ed00e2": "repayBorrowBehalfInternal(address,uint256)", +"70ed0ada": "getEthBalance()", +"70ed1664": "organizer3()", +"70ed2726": "updateUtilizedFundsByUser(address,address,uint256)", +"70ee555c": "returnTickets(uint256)", +"70ee9edd": "PublicMiningReward()", +"70ef14de": "Drops(uint256)", +"70f0c351": "purge()", +"70f0dfee": "MultisigWalletZeppelin(address[],uint256,uint256)", +"70f18295": "TokenPETER()", +"70f18bcd": "UnlockToken()", +"70f199d2": "indAddress()", +"70f37d27": "fundPool()", +"70f4a7b2": "Th_stage3(uint256)", +"70f4c18c": "oracleQueryType()", +"70f5b71c": "createController(address,address)", +"70f5d3de": "WthdrawToCreator(uint256)", +"70f6489e": "WHOIS(address)", +"70f65977": "_migrateToken(address,address)", +"70f6ac15": "RegistrationDeposits(address,address)", +"70f6c906": "_refundWEICustomer(uint256,uint256)", +"70f705ba": "ChargersCount()", +"70f74228": "TokenATC(uint256,string,uint8,string)", +"70f79b84": "SEO()", +"70f80828": "reactions(uint256)", +"70f85731": "setPhaseEndingCriteria(uint256,uint256,uint256,uint256)", +"70f8de1f": "changeGasFee(uint256)", +"70f9c021": "forcePay(uint256,uint256)", +"70fa66db": "deauthorizeCasino(address,address,uint8,bytes32,bytes32)", +"70fbf6e5": "openGamePlayNos(uint256[])", +"70fd37cf": "totalInvestments()", +"70fde32c": "mul(uint96,uint96)", +"70fe19a3": "blocktubeFarming()", +"70ff6325": "withdrawTuneBalances()", +"70ffe53d": "mood()", +"71007509": "refundTokens()", +"7100a4e6": "addAccessory(uint256,string,uint256,uint256)", +"710164e7": "getVATCompensations(uint256,uint8,uint256,uint8)", +"71026acc": "EXPECTED_START()", +"7102b728": "vested(address)", +"7102c138": "Standard_Token(uint256)", +"7102f74d": "recalcTokenPrice()", +"71037b1e": "flagUSInvestor(address)", +"71039256": "BUCToken()", +"7104a142": "getNumberOfVerifiers()", +"71056a78": "ChangeEtherGasProvider(address)", +"71061398": "getRoles()", +"7106312c": "emergencyAddr()", +"7106bd46": "mintContractByIndex(uint256)", +"7106cdb6": "CloudexchangeCrowdsale(uint256,uint256,uint256,address)", +"7107283f": "create_tablet(bytes32)", +"7107d7a6": "minBuy()", +"710908c9": "levelThreeBonus()", +"71098a35": "startStop()", +"71098e15": "totalSTC(uint256,uint256)", +"710ad128": "getHatchingEggData(address)", +"710b2d8c": "getAddressRatio(address)", +"710bf322": "proposeOwnership(address)", +"710c6705": "updateCapFlex(uint32)", +"710cba8b": "isAllowedOverrideAddress(address)", +"710d6a61": "unPauseTransfers()", +"710dff42": "isdrawadm(address)", +"710e5d2f": "setMaxFee(uint256)", +"710ed77a": "revokeAccessbyDelegate(bytes32,address,address)", +"710edb10": "multisignWallet()", +"710ee68e": "DOGEToken()", +"710f3953": "add_entity(string)", +"710fe6f8": "getWithdrawBalance()", +"710ffc72": "changeTribeOwner()", +"71101891": "DharmCoin()", +"711085b2": "arr(address,address,uint256,uint256,uint256)", +"7110ce25": "MyRefReward()", +"7110eed7": "createRegistryInstance(address,address)", +"7111abf2": "SessionOpen(uint256,uint256)", +"7111ed97": "TopPayCoin()", +"71135f8b": "setStopped()", +"7113d35d": "pickFood(uint256,string,string,uint256,uint256)", +"7113e5e2": "findKey(address,uint256,uint256,uint256)", +"71140942": "MIN_ETH_FUND()", +"71145486": "rebuildManagerList()", +"71147d32": "STRC_ADDR()", +"7114a96e": "transferReferral(address)", +"7114c13a": "sendTaster(address)", +"71156c73": "TheFund()", +"7115c8bd": "xdao(uint256,string,string)", +"7115c988": "Batch(address)", +"711619de": "setPubEnd(uint256)", +"711748a3": "removeModuleAtIndex(uint256)", +"71175249": "INEXToken()", +"7118f854": "icoSuccess()", +"711953ef": "setGameAddress(address)", +"7119a490": "setBtcPriceProvider(address)", +"7119c873": "transferSSPRecord(address,address)", +"711b4871": "getOptionBuyOrders(uint256,uint256)", +"711bf9b2": "setAuthorized(address,bool)", +"711bfa89": "month12companyUnlock()", +"711c2b94": "setTestMarket(bytes32,bool)", +"711caf40": "transferStep3(address)", +"711cbc26": "PartyRegistry()", +"711d11bf": "ev(string,address,uint256)", +"711d4407": "updateBonuses(address,address,bool)", +"711d649b": "getCatNames()", +"711f63bf": "toBytes32(bytes,bytes,uint256)", +"7120d381": "getUpdateTokenAge(address,address,uint256)", +"7120fab4": "discountCollect()", +"71215af6": "DAYS_28()", +"712173de": "CrowdsaleStarted(uint256)", +"71221e38": "RareCoinAuction(uint256)", +"7122e857": "setParticipantWhitelist(address,bool,uint256)", +"7123691e": "removeSERAPHIM(address)", +"71236b92": "Owner(address,uint256)", +"712394b6": "nexumToken()", +"71245f6e": "BTCValue()", +"7124abf3": "getLastPayouts()", +"7124c683": "setUpdateInterval(uint256)", +"7124d613": "changePaymentAddress(address)", +"71254d9b": "setFeesDistributionPercentages(uint256,uint256,uint256)", +"7126a855": "configure(uint256,uint256,uint256,uint256,uint256)", +"7126b6ff": "_grantAdmin(address)", +"71270b46": "initCards(uint256)", +"7128ad73": "PaymentReceived()", +"7128defb": "removeSupervisor(address)", +"712980a2": "banUser()", +"712a10bf": "COIN_SUPPLY_ICO_PHASE_2()", +"712a5094": "balanceOfTheContract()", +"712aa191": "isValidCustomerTxPaymentForKWh(address,bytes32)", +"712ac60e": "onRemoval(string)", +"712b1ed0": "triggerInput()", +"712bb1b8": "getDataColla_AA_01(string)", +"712c0c5a": "withdrawDirectDebit(address[],bool)", +"712c3f7a": "addressPartnershipsAndExchanges()", +"712ca0f8": "getOrder(string)", +"712dd575": "raiseSellOrderCancelled(address,uint256,uint256,uint256,uint256,uint256,int160)", +"712f22a0": "getVolumeBonus(uint256)", +"712f4d70": "_generateShortLink()", +"712f5e72": "SetRoundTime(uint256)", +"712f7790": "publicGetStatus()", +"713081d0": "setPromoter(address)", +"7130d7ce": "get_asset_event_details(bytes32,uint256)", +"71313365": "ICO076()", +"7132d337": "citadelTransfer(address,uint256)", +"7132ebcd": "switchPaused(bool)", +"7133c0c0": "calcAmount(uint256,uint256)", +"713494d7": "setReferralFee(uint256)", +"7136982b": "getHolderCount()", +"7136d509": "playCEELO(bytes32,uint256[6])", +"7137047a": "setDealCancelRate(uint256)", +"7137b024": "Banliang()", +"7137e072": "getAllTemplateProposals(address)", +"7137ed47": "setProxyContract(address)", +"7138364b": "adventureItem()", +"7138bc92": "transfer(address,address,address)", +"7138e0c9": "divForSellBack()", +"7138ef52": "right9(uint256)", +"71393c60": "storeLedgersInIpfs()", +"713942f7": "getUserVerified(address)", +"713955e8": "ico2endTime()", +"71395818": "ItemsMarket()", +"71398637": "batchToApplyMilestone(uint8,address[])", +"7139b1ca": "balanceOfRoutingCode(bytes32)", +"7139b595": "withdrawDthShopAdmin(address,address)", +"713a7eef": "Xingqiub()", +"713b563f": "database()", +"713be000": "checkoutCart()", +"713be126": "changeRateSetter(address)", +"713d30c6": "updateState(int128,uint128,uint8,bytes32,bytes32)", +"713eba52": "OwnershipRequested(address,address,bytes32)", +"713ec905": "recordAddress()", +"713f5e4d": "sendEthToContract()", +"713fd253": "Limit_Amount()", +"713ffc3b": "setNextGameSettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"714064f3": "BreakableBond(address,address,uint256)", +"7140bdf3": "get_all_best_offers()", +"7141856d": "getNumProps()", +"7141aa8b": "getTitulaire_Compte_3()", +"7142087c": "allowTransferGlobal()", +"71427ac1": "SuperLitecoin()", +"7142b17d": "dataForOwner(address)", +"7142b191": "MultiplesaleAirdrop(address[],uint256[])", +"7143059f": "getParticipant(address)", +"714383ad": "HYPEToken()", +"71443c4d": "soldDragons()", +"714490ab": "WithdrawToBankroll()", +"7144e81e": "Cremit()", +"71450e30": "tierIndexByWeiAmount(uint256)", +"7145644c": "calculateBTS()", +"71461be9": "getCurrentMilestoneProcessed()", +"7146bd08": "MAX_PURCHASE()", +"71476f35": "clear(address,address,int256)", +"71478fae": "_getTokenIdFromBytes(bytes)", +"714897df": "MAX_VALIDATORS()", +"71489835": "isRed()", +"7148ba36": "_createCard(string,uint256)", +"71492685": "getTo()", +"714a2f13": "assertEq(int256,int256,string)", +"714b1443": "CancelBuyOrder(bytes32,address,uint256,address)", +"714b4465": "MakerTransferredEther(address,uint256)", +"714c5d9d": "BMT(uint256,string,uint8,uint256,string)", +"714ca446": "adopt(uint32,int256)", +"714ccf7b": "setVault(address,address)", +"714d497a": "maxPerExchangeBP()", +"714d582e": "sdc(address)", +"714d5fae": "cancelRemoveOwnerRequest2()", +"714d9537": "cancelEvent(bytes16)", +"714dc20d": "ownerChanged(address,address,address)", +"714e2ec9": "vanilCoin()", +"714e42a1": "getSaleRate(uint256)", +"715018a6": "renounceOwnership()", +"71506977": "EXCHANGE_RATE_DECIMALS()", +"7150773d": "donateFunds()", +"7150d8ae": "buyer()", +"71513e9d": "reSet()", +"71515a36": "SXSYCoin()", +"7152f800": "gameResult()", +"71535f0d": "tenthTime()", +"71543cfc": "unWhitelistUsers(address[])", +"71543f39": "Eetgccoin(uint256,string,string)", +"715469d0": "logoX()", +"7154ae61": "CheckNumbers(uint8[5])", +"7154b798": "addExploreData(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7154b8b5": "setPercent(uint256)", +"71551178": "testDisputedInvalidSequenceWrongReadAddress()", +"71560f80": "emulatePurchase(address,address,uint256,uint256)", +"71582f54": "IsSetReferrer(address)", +"715851a0": "getCheckingBalance(address)", +"71586383": "totalTokensReceived()", +"71587988": "setNewAddress(address)", +"71589d6b": "newponzi()", +"7158e346": "NatCoinCrowdsale(uint256,uint256,uint256,address)", +"7159271d": "publicsalestartTime()", +"71599987": "increasePendingTokenBalance(address,uint256)", +"7159a618": "operate()", +"7159db81": "lastTier()", +"715b208b": "getAllAddress()", +"715b99f8": "_isSignedPrefixed(address,address,bytes32,uint8,bytes32,bytes32)", +"715d4a64": "sellsubscribers()", +"715d574e": "CarboneumToken()", +"715db6ea": "TheMark()", +"715e0e4e": "repurchase(address,uint256)", +"715ed24b": "setVIPThreshold(uint256)", +"715eddda": "starbaseEpAmendment()", +"715ede94": "auction(bytes32)", +"715ef43d": "newPurchase(address,uint8,uint8)", +"715ef4ff": "resendFailedPayment(uint256)", +"715f8975": "JOINT_PER_ETH()", +"7160138c": "unlockedTeamStorageVault()", +"71608d05": "getBalanceModificationRounds(address,address)", +"71612620": "transferFST(address,uint256)", +"71616b84": "calculateTokenCrowsale(uint256,uint256)", +"7161c5df": "setBracketPrice(uint256,uint256)", +"7161c66d": "RunManager(bool)", +"716210d8": "addHodler(address,uint64)", +"7162f182": "resetRip()", +"716344f0": "preIcoEndTime()", +"716437b5": "testApproveTransfer()", +"71645971": "toList()", +"71658552": "getUint(address,bytes32)", +"71658896": "getTopic(uint256)", +"71674ee5": "maximumIcoRate()", +"7168e5d3": "ownerSetAdmin(address)", +"71697efa": "getSumWithdrawals()", +"7169a63e": "IcoCancelled()", +"7169afa6": "getOldFrozenAccount(address)", +"7169dd5d": "intial_supply()", +"716adc36": "setMyOracle2(address)", +"716af639": "minePoP(address,uint256)", +"716c0a31": "computingCharge(uint256)", +"716d3c6c": "adjustReward(uint256)", +"716e5604": "startItemRaffle(uint256,uint256)", +"716f10bf": "isWhitelistOn()", +"71716992": "ThankYouToken(uint256)", +"71726f69": "HOWEOToken()", +"7172a1f2": "testLedgerCreation()", +"7172d9f0": "OtomatizToken()", +"71740d16": "numDarknodesPreviousEpoch()", +"7174164b": "XPTToken()", +"71748a8b": "WSR(address)", +"7174ac9e": "setEscrowedTaskBalances(uint256,uint256)", +"71752d06": "getOwnerByItemTypeAndId(string,uint256)", +"7175d709": "SPARCAddress()", +"71765e74": "VendMultiSigWallet(address[],uint256)", +"71766ae3": "disableManuallyBurnTokens(bool)", +"71773fc2": "lasttimereduce()", +"7177a7dd": "canTransferTokens()", +"71781a79": "subToken(address,uint256)", +"71784312": "distributeVariable(uint256,address[],uint256[])", +"71793195": "__isFeatureEnabled(uint256)", +"7179d079": "mainFundBalance()", +"7179ed22": "autoPrice()", +"717a195a": "setOutcome(int256)", +"717a945a": "USD_Omnidollar()", +"717b3726": "transferFromBank(address,uint256)", +"717cb858": "ZUE()", +"717cee7d": "updatePeriodDuration(uint256)", +"717d5527": "getMoney(address)", +"717de52e": "creditCommons()", +"717e1418": "VebionX()", +"717e9745": "setNewControllerAddress(address)", +"717f24c6": "emergencyWithdraw(address,uint64)", +"717f6f7f": "MYCCToken(uint256)", +"717fecea": "vesting2Withdrawn()", +"717fedf0": "getFirstActiveDuel1()", +"717ffe91": "buyTokensAsset(address,address,uint256)", +"7180dd8a": "_giveToken(uint256,uint256)", +"718167c4": "AddValues(uint256,uint256)", +"718228fa": "totalTeamContributorIdsAllocated()", +"7182774d": "exchanged()", +"71827791": "nextContributorIndexToBeGivenTokens()", +"718350a9": "_removeMaliciousValidatorAuRa(address)", +"7183616c": "notarize(string)", +"7185354b": "changePerEthToBlocNumber(uint256)", +"7185393c": "updateAppExec(address)", +"7185637b": "DailyDivsSavings()", +"71857000": "setLogic(address)", +"7185acb8": "viewMyComponent(uint256)", +"7185f163": "stopTrading()", +"71863031": "isPublicIcoActive()", +"71868032": "addOffChainAddresses(address[])", +"71873971": "PROOF_TOKEN_WALLET()", +"71882ab0": "distributeContest()", +"7188c8a4": "reFunding()", +"71892e3f": "getMyKnowledge()", +"718aa629": "NEX()", +"718b0a32": "withdrawBuyDemand(uint256)", +"718bd6dd": "setRequestUntil(uint8)", +"718c025a": "ethPreAmount()", +"718c6569": "TimeSecondToken(uint256,string,string)", +"718cc769": "makeBet(uint256)", +"718d763a": "playerCost()", +"718da639": "addNewSecretHash(bytes32)", +"718da7ee": "setReceiver(address)", +"718df9d7": "getPlayerSpaceshipUpgradesById(uint256)", +"718dfb7e": "hasPreICOClosed()", +"718e6302": "play(string)", +"718e6c44": "isManageable(address)", +"718eaa50": "setLayerParent(address)", +"718ec079": "setMarketCreationCost(uint256)", +"718f81c2": "getCCH_edit_11()", +"71906087": "airdropToAdresses(address[],uint256)", +"719102d7": "createItem(uint256,uint256,uint256,uint32)", +"7191474b": "pendingUFT()", +"71929547": "OceanScapeCoinAdv(uint256,string,string)", +"7193ab70": "balanceUnlocked(address,address)", +"7193b1e4": "refundCfd(uint128)", +"7193f2f0": "supported(bytes32)", +"719591c7": "requestComputation(string,string,uint256,uint256)", +"7195d944": "dataOfPart(uint256,uint256,uint256)", +"7195eed2": "EtalonGlobalToken()", +"71974cbe": "lastBidBlock()", +"7197c6d2": "firstTTax()", +"719874da": "profitFromCrash()", +"7198801d": "getWorkTime(uint256,uint256)", +"7198e08c": "createLoveBlock(string,bool)", +"7199139f": "TheAbyssDAICO(address,address,address,address,address,address,address,address,address,address,address,address)", +"7199f6d4": "safedrawal(uint256)", +"719a0f8c": "removeOfficer(address)", +"719b2e07": "setDisputeRoundDurationInSeconds(uint256)", +"719c78ac": "setCodedate(uint256)", +"719c86e3": "team_lock_count()", +"719ce353": "Brokenwood()", +"719ce73e": "prizePool()", +"719f2fb7": "_calTeamAttribute(uint8,uint8,uint8,uint32[11])", +"719f3089": "getLocks(address)", +"719f8d3a": "checkIfWhiteListed(address)", +"71a009ad": "BRLTOKEN()", +"71a03078": "TMCToken(uint256,string,string)", +"71a04009": "newIssuer()", +"71a18bfb": "emergencyDrain(address)", +"71a2e46d": "OWN_transferOwnership(address)", +"71a2f964": "newPaymentAddress(address)", +"71a4dc5e": "getLuckyblockEarn(bytes32)", +"71a5367f": "setAllowPaymentsWhenPaused(bool)", +"71a66e7c": "addOrUpdateHolder(address)", +"71a67aa9": "getFunctionAuthorizationHash(address,address,string,bytes32)", +"71a7462e": "balance_(address,address)", +"71a7c439": "distribute21ST(address[],uint256)", +"71a80ba3": "setBurnFeeReceiver(address,address)", +"71a8270a": "buyObizcoinTokens(address)", +"71a8ba25": "getEtherBoxes(address)", +"71aa60fd": "calculateTokens(uint256)", +"71aad2dd": "preICOamountBonusLimits(uint256)", +"71ab0e3c": "sellDai(uint256,uint256,uint256,uint256)", +"71ac5c60": "WeToken(address,string,string,uint256,uint256)", +"71ad3e73": "isMakePermitted(uint256,uint256,address,address,uint256,uint256)", +"71ada3fb": "getCash(uint256,address)", +"71ae8f02": "fundingMinimumTargetInWei()", +"71ae973e": "createGen0Auction(string,string)", +"71aeae44": "hasBallotEnded(uint32)", +"71aed703": "addCandidateCache(address[],bytes32[])", +"71af5d0e": "setFailedVerificationSlashAmount(uint256)", +"71af8630": "_suicide()", +"71afc713": "marketingTokenAmount()", +"71b1d2d3": "RANGEEND_PRESALE()", +"71b22e61": "EnableRefund()", +"71b2354d": "MINC()", +"71b3659e": "currentTokenPrice()", +"71b397cf": "getCurrentRoundIsFinished()", +"71b3e7f4": "payOffLoan(address)", +"71b45696": "StcToken()", +"71b475d0": "STQPreICO3(address,address)", +"71b4f4ef": "setDEXContractAddress(address)", +"71b505ad": "setLargeCapWhitelistParticipant(address,uint256)", +"71b5ee71": "allowTokenTransfer()", +"71b6663e": "play1(address,uint256)", +"71b6a376": "setNumberOfPlayers(uint256)", +"71b6d36d": "isNotaio(address)", +"71b6d6ea": "getAttributeTimestamp(address,bytes32)", +"71b7d5c4": "priceUpdateWaitingTime()", +"71b804ee": "getBettingPrice()", +"71b80b8f": "upgradeCardConfig(address)", +"71b9b646": "saleEnabled()", +"71ba3612": "Plasma()", +"71bad4d8": "jackpotMinimumAmount()", +"71bb263d": "contractPartThree(uint256)", +"71bb3cc8": "GivethCampaign(uint256,uint256,uint256,address,address)", +"71bbefc7": "payPlatformOutgoingTransactionCommission()", +"71bc9d62": "_generateDetail(uint256)", +"71bd1f47": "MinCapReached(uint256)", +"71bdb914": "softCapLimit()", +"71bdbc9a": "SetCityData(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"71bde852": "_startNextCompetition(string,uint32,uint88,uint8,uint8,uint16,uint64,uint32,bytes32,uint32[])", +"71be0c27": "preSale5()", +"71be1851": "ShopDeployed(address,uint256,uint256,uint32)", +"71be8766": "Contribution(address,address,uint256)", +"71beae97": "currentCoinsCreatedPercentage()", +"71bf35b6": "minMinutesPeriods()", +"71bf439e": "CANVAS_WIDTH()", +"71bf5a95": "setENS(address)", +"71bfa03f": "getRedemptionBlockNumber()", +"71bfabca": "resultOf(uint256)", +"71bfd48b": "content(string,uint256,string,string,uint256)", +"71c02b7b": "BSAFE()", +"71c03d76": "get_rest(uint256)", +"71c10778": "weiToPresalersFromICO()", +"71c147fb": "addAccount(string,uint256,string,string,uint256)", +"71c157d1": "addInsuranceProduct(uint256,string)", +"71c1d196": "numContributors(uint256)", +"71c1dde5": "get_presale_arbits_per_ether()", +"71c24e37": "narrowRoundPrize(uint256)", +"71c2835e": "operater()", +"71c396cc": "migrationAddress()", +"71c4275a": "setWeight(bytes32,uint256)", +"71c4980b": "getBlanace()", +"71c57772": "eucDist2D(uint256,uint256,uint256,uint256)", +"71c58b25": "internalTransfer(uint256,uint256,uint256)", +"71c59097": "MainnetSurvey(uint256,string,bytes32[])", +"71c66459": "LogPaymentReceived(address,uint256)", +"71c6d4dc": "pearlContract()", +"71c6dc50": "ProofOfCraigGrant()", +"71c6e049": "addUsers(address,uint256)", +"71c78ce7": "totalAirDropped()", +"71c79588": "releaseName(bytes32)", +"71c7e923": "dDisableErc20OwnerClaim(bytes32)", +"71c80c67": "COOPET(uint256,string,uint8,string)", +"71c82c14": "setOraclizeGasPrice(uint256)", +"71c847b2": "detailsOfEdition(uint256)", +"71c85da2": "LogN(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"71c8e333": "getSundownGraceTargetBlock()", +"71c93fc7": "processDiceRoll(address,uint8)", +"71c95040": "EFF(address)", +"71c9572b": "maxBidInCentsPerAddress()", +"71c9a754": "topiToken()", +"71c9e177": "SpudToDivs(uint256)", +"71ca2117": "isAuditorRegistered(address)", +"71ca337d": "ratio()", +"71cabfb8": "getYumerium(uint256,address)", +"71cacc9e": "addLotteryPrize(uint256,string,uint256,uint256)", +"71cb9769": "addIdentity(bytes32,bytes32)", +"71cbb22a": "fixed_value()", +"71cbef8a": "sendTokensAfterCrowdsale(uint256,uint256)", +"71cc4f35": "Alecrypto()", +"71cc805a": "refund(string,address)", +"71cce314": "Kolak()", +"71ce52ed": "senderIsAdvocate(address,address)", +"71ce9a4a": "forwardCallGas()", +"71cea5ae": "transferAccessOff(address)", +"71ced69d": "mintNewDNC(address,uint256)", +"71cf586f": "CanISuscribeTrial(uint256)", +"71cf5979": "market_AcceptBid(uint256,uint256)", +"71cf866e": "_redeemIsAllowed(uint256)", +"71d06675": "getInteres(address)", +"71d0cf01": "setCustomerSignature(address,uint256,bytes)", +"71d0ed05": "betsKeys(uint256)", +"71d141f9": "doOraclize(bool)", +"71d1995e": "changeEmployee1(address)", +"71d30a17": "Match(address,address,bytes32,bytes32,uint256,uint256)", +"71d31a13": "withdrawTokens5(uint256)", +"71d3de1b": "setStates(uint256,uint256,uint256,uint256)", +"71d3de2b": "JincorToken()", +"71d49910": "_emitAreaSet(uint256,bytes32)", +"71d4aa3a": "fomo3D4eva()", +"71d4edaf": "setSaleLot4StartTime(uint256)", +"71d50cc8": "payBets(bytes32)", +"71d5af66": "Upfinex()", +"71d5afb5": "extendCrowdsale(uint256)", +"71d5b5dd": "getBonusPoolTotal()", +"71d5d1c2": "updatePrincipal(uint256,uint256,bool)", +"71d5ffbe": "totalETHWagered()", +"71d6dbe1": "isClaimSegmentVerified(uint256,uint256,uint256)", +"71d6e229": "queryRole()", +"71d76096": "ICOcollected()", +"71d7c621": "createDownRequest(address,uint256)", +"71d7e4a9": "transferTokens(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"71d87948": "FixedSupplyToken(string,string,uint256,uint8)", +"71d8d421": "_isValidLicense(uint256)", +"71d8d7af": "setMaxRate(uint256,uint256)", +"71d93cb0": "interuser(address)", +"71d9ffce": "priceChange()", +"71da0e63": "_getValidRandomGenes()", +"71daca00": "grantBackerToken()", +"71dc761e": "enableERC721()", +"71dd46a9": "left19(uint256)", +"71dd8862": "IndexOf()", +"71dd99fe": "BigRisk()", +"71ddd3ad": "multifunctioncoin()", +"71de2ffc": "claimRefund(bytes32)", +"71de6362": "certificateSigners(address)", +"71df8d09": "bigInt(uint256)", +"71dfc116": "Cryptolotto10Minutes(address,address,address,address)", +"71e030d3": "TokensTransferedToHold(address,uint256)", +"71e07813": "issueDevsTokens()", +"71e11354": "updateRegistration(string,string)", +"71e12726": "getBlockStats()", +"71e1fa95": "getHtlcTimeoutBlock(bytes32,bytes32)", +"71e28126": "canFinalize()", +"71e2a657": "addMinters(address[])", +"71e2d919": "lol()", +"71e30719": "ZEC()", +"71e365a0": "AICQ()", +"71e3c76e": "claimGrant(bytes32)", +"71e3c819": "DSToken(string)", +"71e3fdc4": "moveMintTokens(address,address,uint256)", +"71e4cfd7": "ROF()", +"71e5b9ec": "scanAddresses(address)", +"71e5ee5f": "arr(uint256)", +"71e60fe6": "testFailTransferEnableNotTransferable()", +"71e68cad": "claimUsername(bytes32)", +"71e70133": "TotalTokens()", +"71e777ae": "getMemBestInvestor()", +"71e928af": "issue(address)", +"71e9f016": "CompetitionChainContract(uint256,string,string)", +"71ea29df": "blockedContract()", +"71ea3aad": "CollectERC20(address,uint256)", +"71ea6c73": "VIBEXToken()", +"71ea87ee": "getPeriodRange(uint256)", +"71ea980c": "rewardPoolWallet()", +"71eb125e": "oracleAddresses(address)", +"71eb9710": "getDebitDigest(bytes32,uint256,uint64)", +"71ec4cc1": "depositPayout(uint256,uint256)", +"71ec98dd": "issueTokensFromOtherCurrency(address,uint256)", +"71ed4664": "refundTo(address)", +"71edfe35": "hashOfTheDocument()", +"71ee2ce1": "getResponses(uint256)", +"71ee329f": "useCaptainAbility(uint256)", +"71ee872f": "TransactionSettledByMediator(uint256,uint256,uint256,uint256,uint256)", +"71eedb88": "refund(uint256,bytes32)", +"71eee1f4": "IssueStateLoaded(bytes32,string)", +"71ef0d0f": "phxCoin()", +"71ef7862": "seventhTime()", +"71efb7f7": "SimpleSafeToken(uint256,uint8,string,string)", +"71efdc21": "usedTickets(uint256)", +"71efeff1": "transferCommunityBank(uint256,address)", +"71f027fa": "updateOwnerOfWeapon(uint256,address)", +"71f098c8": "LecBatchTransfer()", +"71f0ad64": "TestCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"71f11552": "changeDNNHoldingMultisig(address)", +"71f124c5": "getDropsOf(address)", +"71f16739": "_createContract(address,uint64)", +"71f297cc": "XaurumToken(address)", +"71f4c9ae": "GameClosed(uint256)", +"71f4f65e": "yearlyOwnerTokenWithdrawal()", +"71f52bf3": "connectorTokenCount()", +"71f5584f": "sponsoredLeaderboardDataContract()", +"71f64a68": "executeTopic()", +"71f6ec3c": "get_car_propse(uint256)", +"71f6fb88": "transferWithReservingNet(address,uint256)", +"71f7aaca": "dragonIndexToApproved(uint256)", +"71f7ebf4": "_doTrade(address,address,uint256,uint256)", +"71f805bf": "numFpBits()", +"71f84164": "_sendTo(address,uint256)", +"71f8746f": "registerBuy()", +"71f90109": "hideDonations(address)", +"71f90fe6": "initializeABIHashForMod(uint256,bytes)", +"71f96211": "assetOf(address)", +"71f9b7f3": "addMultipleAddressesToPublicBuyerList(address[])", +"71f9ff89": "preICOcap()", +"71fa632f": "newVoterAllocation()", +"71fa7f37": "createNewProject(uint256,uint256,address)", +"71fcc672": "setCryptaurRewards(address)", +"71fdd6d3": "_canBreedWithViaAuction(uint256,uint256)", +"71feaac5": "greatgreatcoinERC20Token()", +"71ff01b0": "maxSupplyReached()", +"71ffcb16": "changeFeeAccount(address)", +"72004a65": "getPremiumStatus(bytes32)", +"72012ef6": "test_oneInvalidEqString2()", +"72016f75": "getNodeLength()", +"7202997e": "LogAccepted(uint256)", +"72030d03": "addresses2(uint256)", +"72052773": "deleteChallenge(bytes32)", +"72054df4": "compatible223ex()", +"72067d49": "getBountyBalance()", +"72076c57": "ColorBayToken()", +"72078e3b": "CORNERSTONEAMOUNT()", +"7207c19f": "MyToken(uint256)", +"7207d711": "RewardHalved()", +"7207f9ce": "transactionFeeMax()", +"7208b8f7": "setSkills(uint256,uint32,uint32,uint32,uint32,uint32)", +"7209036a": "fundReservCompany()", +"720b43e8": "intercrypto_cancelConversion(uint256)", +"720b7ee4": "getCardId(string)", +"720be6c7": "CrapToken1A()", +"720c142d": "setRNGCallbackGasPrice(uint256)", +"720c4798": "workshop()", +"720c5732": "TextMessage()", +"720de551": "deleteVoterForCandidate(uint256)", +"720e2a06": "GadielToken()", +"720ed642": "getModuleById(uint256)", +"720edd13": "theanswer()", +"720ee37c": "decrementBalance(address,uint256)", +"72104205": "rewardMint(address,uint256)", +"72108714": "updateHash(bytes32,bytes32,uint256)", +"7211138c": "FreedomCoin()", +"72112286": "closeChannel(address,uint256,uint256,bytes32,bytes32,bytes1)", +"72112ebc": "set_Total(uint256)", +"72117821": "GetTokenAddress(address)", +"72121dac": "FooToken()", +"7212b67e": "add_potion(uint16)", +"7212eadd": "trigger_game_end(uint256)", +"7213cff1": "hasLockedUp(address)", +"7213e335": "guthabenAnzeigen(address)", +"72142c67": "MSECStandardToken(uint256,string,uint8,string)", +"7214d6c3": "isUIntPublic()", +"721547eb": "maintainExternalContractTokenBalance(address,uint256)", +"7215513f": "addTokenClaim(uint256,uint256,uint256)", +"72159335": "voteInitiate(uint256,uint256,uint256,uint256,uint256,uint256)", +"7215b96d": "CheckAllowance(address)", +"7216ab38": "getByteFromBytes14(bytes14,uint256,bytes1)", +"7216b95c": "checkLicense(bytes32,uint8,bytes32,bytes32)", +"7216e02d": "getOracleByName(string)", +"7216ee00": "totalTrainer()", +"7217523c": "addDays(uint256,uint256)", +"721868f8": "queryTinyOracle(bytes)", +"72198ead": "setDSTMultiSig(address)", +"7219d7f7": "OrigamiTokenPurchase(address,uint256,uint256,uint256,uint256)", +"7219dd7f": "allocateTokenETHConvert(address,uint256)", +"7219fa11": "EIP20(uint256,string,string)", +"721a1f57": "endorseCredit(address,uint256,uint256)", +"721a37d2": "revokeTokens(address,uint256)", +"721b67ab": "CNYTokenPlus()", +"721bba59": "getTokenBasicData(address)", +"721c555e": "queryEscrow(address,address)", +"721d7d8e": "currentContract()", +"721dd850": "getOwnedAvatars()", +"721e117b": "getPurchaseRequirements(uint8)", +"721e9969": "getPressCount()", +"721ed9ec": "tokensICO()", +"721fa630": "pubs(uint256)", +"721fefac": "startNewDraw(uint256)", +"721ff138": "tokenMintCap()", +"7220426f": "verifyTokens(uint64,uint64)", +"7221a26a": "storeValue(uint256)", +"7221c3c0": "withdrawJackpotBalance(uint256)", +"72229abf": "setBetFee(uint256)", +"7222e9e3": "sampleToken()", +"7222fe1e": "MNY()", +"72237d97": "setTargetDiscountValue10(uint256)", +"72239313": "addAccountMinter(address)", +"7223cd19": "set(address,int256,uint256)", +"7224267c": "addDeposit(address,uint256,uint256,uint256)", +"72258f96": "allergy(string)", +"72259875": "addCourse(string,uint256,uint256,uint256,string,string)", +"72262699": "forwardOnBehalf(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"7226d055": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"722713f7": "balanceOf()", +"7227bff2": "setTransferOwnership(address,address)", +"7227c5dd": "fundMark(uint256)", +"7227c7ce": "hashNext()", +"7228057f": "ibcFunded()", +"7228b9db": "etherCap()", +"7228becb": "crowdsaleDuration()", +"72298b82": "setEndTime(uint32)", +"722bb4a8": "getSuperManagerContractAddress()", +"722bd85a": "bonusForDate(uint256)", +"722c885a": "endSeedStage()", +"722d1267": "forceWithdrawTokensToAnAddress(address)", +"722d1d13": "setProductCompletionDate()", +"722ded24": "exeSequence(uint256,uint256[])", +"722e1677": "getTotalPublicKeysCount(address)", +"722e9c6d": "Luck()", +"722f0835": "startPrivatePreICO()", +"722fe823": "getActionHistoryItem(uint256)", +"72309714": "setPresellOpen(bool)", +"7230bce8": "add(uint256,string)", +"7230eb42": "AllocatedCrowdsaleMixin(address)", +"7230ef7f": "totalGen0()", +"72317e7b": "totalWeiRaisedDuringICO1()", +"7231a876": "itemsOf(address)", +"7231af39": "getTotalGamesStarted()", +"72325c5b": "initSiriusFund()", +"72337396": "unholdFunds()", +"7233d860": "BitcoinRich()", +"7234ba0c": "MIN_CROWDSALE_TIME()", +"7235c8dd": "PeerReview(address,bytes)", +"7235d2b1": "maintenanceMode(bool)", +"7236f851": "exchangeByAdmin(uint256,address)", +"72378554": "sendToken(uint256,address)", +"7237e031": "tokenToEthTransferInput(uint256,uint256,uint256,address)", +"72388610": "paybackAll()", +"72388f7c": "mintSpecificCards(address,uint8,uint256[])", +"7238ccdb": "getLockInfo(address)", +"72397287": "createOfAthleteCard(string,string)", +"723b2b58": "getMemberListCount()", +"723c308f": "ahs()", +"723c37f7": "TokensTransferrable()", +"723e357a": "pushRound(uint256,uint256,uint256,uint256,bool)", +"723e435f": "setTokenRateInGwei(uint256)", +"723eb2cc": "hurmint(address,uint256)", +"723f291d": "cancelOpenBids(bytes32)", +"723fdfe5": "PaoTestToken()", +"724020be": "GSCT()", +"72405ab0": "approve(uint256,string)", +"7240976c": "trades(address,address)", +"7240eccf": "approveLess(address,uint256)", +"7240f67b": "countActiveType(uint256)", +"72411849": "ChangeTankSellMaster(address)", +"724121ae": "contentExists(uint256)", +"72413a3b": "VOLUME_BONUS()", +"72414501": "SMILO_FOUNDERS_AMOUNT()", +"7241450c": "deliver(address,uint256,string)", +"7241eb8c": "_bpto(uint256,uint256,uint256,uint256,address)", +"72422024": "lockMoneyOnCompoundCreation(address,uint256)", +"72432965": "AdvisorsAddress()", +"7243cfbb": "releasableAmount(address,address)", +"72440c31": "finalizeEndTime()", +"72453422": "directSellSupply()", +"7245f6e7": "stageEnd(uint256)", +"72460869": "test_threeFalseAssert()", +"72468368": "setBlockTargetDelay(uint256)", +"724693ce": "TokenSale(uint256,uint256,address,uint256)", +"7246de3d": "sanityCheck()", +"72470a14": "ShopManager(address)", +"7247390b": "vote_beneficiary(string)", +"72479140": "CreateTicket(address,uint8,uint8,uint8)", +"7247959a": "referral(address)", +"7247a50d": "virtualInvest(address,uint256)", +"7247aafd": "Callous()", +"72490c69": "GREENECO()", +"7249733c": "businessPercentage()", +"7249fbb6": "refund(bytes32)", +"724a5144": "MuneebCoin()", +"724a6246": "claimSeasonPrize(address,int8)", +"724a8487": "getTargetBlocks()", +"724ae9d0": "getMinInvestment()", +"724bc3de": "getAirdropAmount(address)", +"724bdbaf": "externalTxs(uint8,bytes32)", +"724c8393": "changeCrown(address)", +"724dbf36": "isNewBattle(string)", +"724df10a": "alreadyWithdrawn()", +"724edf00": "startTokenDistribution()", +"724fcd4c": "buyAndSetDivPercentage(address,uint8,string)", +"7250dc36": "getMemberName(uint256,address)", +"7250e224": "addDistributor(address)", +"72511fb4": "EventAddressChange(address,address,uint256)", +"72519531": "BagholderAddr()", +"7252518c": "setLockend2(uint256)", +"7252bbf2": "ethBalanceOf(address)", +"7253160b": "convertByteToStr(bytes1)", +"725326dc": "setAllowedForTransfer(address,address)", +"7254895a": "readCards()", +"7254e1ba": "afterGeneratorHook()", +"72558b73": "destroyValue(address,uint256)", +"7255d729": "createGame()", +"7255f7ad": "getLastImageId()", +"72561235": "getCreditbitAddress()", +"72565e3f": "offChainMint(address,uint256)", +"7257dac1": "removeSomeUETsFrom(address,uint256)", +"7258b901": "masterCut()", +"72593831": "withdrow(address)", +"72593b4c": "ordersCanMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes)", +"7259ac60": "Rethen()", +"7259bce3": "preSaleTokenPrice()", +"725a731d": "setPendingKNCRateRange(uint256,uint256)", +"725a7eea": "MEGA_HERO_MULTIPLIER()", +"725ad47f": "TransferERCXTokenInitiationEvent(uint256,address,string,address,address,uint256)", +"725c8bdd": "LMITOKEN()", +"725cedd3": "calculateReward()", +"725d8524": "getOption(bool,address,uint128,uint128,address,uint64)", +"725da7b4": "withdrawMicroDivs()", +"725e70a3": "getnumDeposits()", +"725ef390": "mod(uint16,uint16)", +"72601e77": "setOracleFee(uint256,uint256)", +"72601faa": "ROUND_DATA_COUNT()", +"726199b5": "notarizeHash(uint256,string,string,string,bytes32)", +"7261e469": "burn(address,uint128)", +"7261ffad": "spendGameLockedToken(address,uint256)", +"7262561c": "unsubscribe(address)", +"7262eb66": "PRE_ICO_POOL()", +"726300c7": "releaseEscrow(uint256,uint256)", +"72630a6d": "UpdateIndividualContributorCap(address,uint256)", +"7264727d": "STCToken()", +"7265d040": "startAtBlock()", +"72664744": "setDelegadoDeDistritoVerify(bytes32,uint256)", +"726678e7": "level2Bonus(uint256)", +"7266f4a4": "X3()", +"72670119": "payBonus1Address(address)", +"72675562": "extraTokensWallet()", +"7267a25b": "mainSaleMinimumWei()", +"7267f24a": "lrcReceived()", +"726802a4": "addAddressToAccount(address,bytes,bytes,bytes32)", +"7268475b": "ITSMToken()", +"7269a327": "isNonFungibleBaseType(uint256)", +"7269daa5": "requestChangeStaker(address)", +"726a3ad1": "removeReservedTokens(address)", +"726a431a": "TARGET_USER()", +"726ab4ef": "getParentHash(bytes)", +"726aeb20": "costToCreateGame()", +"726b23bf": "changeMinNac(uint256)", +"726b5bad": "endAirdrop()", +"726bd6bf": "oraclizePrice()", +"726c12c8": "FileDataInt()", +"726c6382": "Error()", +"726d0a28": "getRequest(address,uint256)", +"726d50ee": "totalCampaignsBy(address)", +"726d82a0": "SEN()", +"726df9cc": "grantService(address,address)", +"726ea051": "calculateCoinBuySimple(uint256)", +"726ee493": "withdrawStakeTokens(uint256)", +"726ef3da": "getCurrentWinnerMoveCount()", +"726f63f6": "setTokenOffering(address,uint256)", +"727089f1": "extractAllowanceLength()", +"72712bb8": "trophyAddress()", +"72729ff2": "amountRaisedInWei()", +"7272ad49": "decreaseApproval(address,uint256,bytes)", +"7274f35b": "getCoinIndex(bytes32,address)", +"72750dc1": "PANICPERIOD()", +"7275c8cb": "getRecord(bytes32,string)", +"72761e96": "execute_transfer(uint256,uint256)", +"727648a3": "submitWork(address,address,uint256,string)", +"7276509c": "purchaseBuilding()", +"72771d40": "sendList(address)", +"7277236b": "icoInvestment(address,uint256)", +"7278d080": "BTCEarth()", +"7278d623": "CurrentEntityState()", +"7278ef8e": "createExchange(uint256,string,string,uint256,uint256,uint256)", +"727a00a5": "LetsFunds()", +"727a666a": "totalLevelValue()", +"727a899a": "setHashes(uint8,string,string,string,string)", +"727b1cd6": "next_draw(bytes32,uint256,uint256,uint256,uint256,uint256)", +"727b4094": "transferStep()", +"727b4276": "setBitGuildToken(address)", +"727c2ff0": "purchaseWithGze(uint256)", +"727cdf87": "setCut(uint256)", +"727d508a": "isOpenForPublic()", +"727da487": "TTGOracle()", +"727e2422": "StudioToken()", +"727f0067": "nextHash()", +"727fc9fc": "SCAM()", +"72801b53": "isInTimeRange(uint256,uint256)", +"728064cd": "GetTotal()", +"7280850e": "getHandRank(uint32)", +"728171ba": "addressRegister(address,address)", +"7281854d": "GetCategoryValue(uint8)", +"7282c5b1": "WithdrawFeeBalance(uint256,address,uint256)", +"72840e32": "rentPeriod()", +"72841e0c": "isMaxCapReached()", +"728435a0": "ReverseProposed(string,address)", +"7284e416": "description()", +"72850e7a": "priceNeedsUpdate()", +"728516c2": "getProjectedPayout(bool,uint256,uint256)", +"72852fe5": "attackTile(address,uint16,uint256,bool)", +"72855080": "demurringFeeDenum()", +"72879610": "sencHardCap()", +"728880c2": "payOutVoterByAddress(address)", +"7288b0a9": "numberOfPingsAttempted()", +"7288b50c": "engraveNamespace(string,string,bytes32)", +"72892f4f": "newPlay(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"7289f28e": "setLastRound(uint256)", +"7289f9aa": "setDiscountedInvestor(address,bool)", +"728a6755": "buyBookLotto()", +"728addbc": "token_balanceOf(address)", +"728af7ec": "getInterest(uint256,uint256)", +"728b763c": "extendTde(uint256)", +"728c3ea2": "getBorrower(bytes32)", +"728c97ca": "returnEther(address)", +"728cbc44": "userHeldTill(address)", +"728cd741": "SnapshotAndDistributePot()", +"728cf508": "bookingMetadataForKey()", +"728d0e2b": "accrueDividendandCoupons(uint256,uint256)", +"728d3dd2": "newRaceDistCon(address)", +"728d5e94": "baseTokensPerEther()", +"728de91c": "preSale(address,address,uint256)", +"728ec9f1": "YourCustomToken()", +"728f31e7": "setTransferEnablingDate(uint256)", +"728f3a21": "isApprovedWallet(address)", +"72909e28": "calculateIdeaSell(uint256)", +"7290c21d": "auctionCancelled(uint256,address)", +"7290f691": "horseShoePr(uint256)", +"72910be0": "setTitle(string)", +"7291acdf": "SaleWindowUpdated(uint256,uint256)", +"72923378": "RockPaperScissors(address,address,uint256)", +"72927b1e": "deleteEntryByName(bytes32)", +"72929b56": "getKudosPerProject(address)", +"7294789b": "getWhaleCard()", +"7296359a": "fog()", +"729680c3": "epsAddress()", +"7296dae6": "jsonCat(string,string,address)", +"7297be7f": "changeFixedCommissionFee(uint256)", +"72987457": "blocktrade()", +"7298b261": "_calcEditorKey(bytes)", +"7299054c": "random(uint256,uint256,uint256)", +"72998d8e": "LotteryGameLogic(address,address)", +"72998ee1": "addPreSalePurchaseTokens(address,uint256)", +"729ad39e": "airdrop(address[])", +"729aeea6": "isSetupRunning()", +"729b3881": "setNewRound(uint256)", +"729c04fd": "_yearTwoClaimed()", +"729cc83e": "getPlayerKeyCount()", +"729e3ef8": "YOPT(uint256,string,uint8,string)", +"729e6f2b": "getGameChance()", +"729ee75b": "updateUSDXGE(uint256)", +"729ef530": "additionalBonus()", +"729f0e8e": "cmct()", +"729f2439": "addK(uint256)", +"72a02f1d": "finalizeInit()", +"72a06b4d": "returnInt8(int8)", +"72a0c16e": "tulipToApproved(uint256)", +"72a1a8ae": "CanSignIn()", +"72a1b73f": "createSale(uint256,uint256,uint256,uint256,address)", +"72a1e258": "updateUser(address,string,uint256,uint256,uint256)", +"72a20c78": "powers()", +"72a22014": "firstAuctionsHighestBid()", +"72a22d51": "unlockValueOf(address)", +"72a2d90c": "quickWithdraw()", +"72a4a02f": "runPreMint()", +"72a4d94b": "release(bool)", +"72a503be": "transfer(address,address[],uint256[])", +"72a52851": "checkProof(bytes32[],bytes32,bytes32)", +"72a56d2c": "ICO_RATE1()", +"72a66507": "_isNewUser()", +"72a6a480": "_validRating(uint8)", +"72a7019c": "saleHardCapEther()", +"72a74d5b": "confirmOffer(uint256)", +"72a7655e": "timestampMint()", +"72a7b8ba": "multiDecreaseApproval(address[],uint256[])", +"72a7c229": "right41(uint256)", +"72a7d8c9": "lengthEqual(bytes32[],uint256,string)", +"72a7ff87": "isKYCRequiredToSendTokens()", +"72a85604": "min_amount()", +"72a86693": "ambassadorsNumber()", +"72a88673": "nthRoot(int256,int8)", +"72a984b2": "blockMinedAt()", +"72a9e232": "reserveFunds()", +"72aa18d7": "WALLET_ECOSYSTEM()", +"72aa343a": "removeProof(address,bytes32)", +"72aa9349": "maxTickets(uint256)", +"72aab7d7": "setGPSEndTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"72abee88": "PreIco(uint256,uint256,address,uint256)", +"72acad56": "check_reward()", +"72ad21c7": "protection(uint32)", +"72ad3c9f": "OTCChain()", +"72ad5bbe": "_isErcToNativeBridge(address)", +"72adc407": "getGuardianVend(uint256)", +"72adcadd": "TOTAL_CONTRIBUTOR_COUNT()", +"72ae74dd": "getCoinRemains()", +"72ae9e54": "blocksCoordinates(uint256,uint256)", +"72af7b43": "SkyeCryptoPrivate(uint256,string,string)", +"72af805e": "sendPreIcoTokens(address,uint256)", +"72b0d90c": "withdrawTo(address)", +"72b28d27": "getNext(address,uint256,uint256,uint256)", +"72b2ee75": "investorsNum()", +"72b30d39": "setLLV_edit_30(string)", +"72b38ab9": "refundUser(address)", +"72b3936d": "EWBToken()", +"72b3f570": "endBuy()", +"72b44b2c": "getSaleReturn(address,uint256)", +"72b4e98f": "Aecium()", +"72b4f111": "COOPToken()", +"72b50845": "eliminateSDCC(address,address,uint256)", +"72b556c7": "emissionReleaseTime()", +"72b59c68": "createNote(uint16,bytes2,bytes12,bytes)", +"72b5e050": "LOCKED_ALLOCATION_PPM()", +"72b60682": "lockEndDate()", +"72b614af": "itemsPerPage()", +"72b7094a": "tokensPerEthPresale()", +"72b75585": "getOriginalClient()", +"72b7f893": "metaIncreaseApproval(address,uint256,bytes,uint256,uint256)", +"72b81b1c": "resolveLotteryByHand(uint32,uint32)", +"72b8a5cf": "bonusPersent()", +"72b8de14": "isChallengePeriodOver()", +"72b902a7": "setvolumebounus(uint256,uint256,uint256)", +"72b91e61": "seen(address)", +"72ba8259": "testMinting()", +"72baa12e": "withdrawQR(address)", +"72baa779": "setItoEndTime(uint256)", +"72bc56fe": "IsMultiFreeze(address,address[],bool)", +"72bc8fc6": "ether2tokens(uint256)", +"72bc8ff2": "isOMITokenLockContract()", +"72bc9240": "etherPerSale()", +"72be346c": "ZTR_ETH_initial_price()", +"72becdee": "_generic(bytes,address)", +"72bedcee": "operationState()", +"72bf079e": "adjustPrice(uint256)", +"72bff5ad": "freezeMintingFor(uint256)", +"72c03508": "contributorClaim()", +"72c0e7a4": "setThreshold(bytes32,uint256,uint256,address)", +"72c1591c": "testFail_basic_sanity()", +"72c174db": "mintTokensForAdvisors()", +"72c1df4c": "transferDirectorB(address)", +"72c27b62": "setFeeBps(uint256)", +"72c3015c": "mint(int256,address,string)", +"72c4639e": "SummRew()", +"72c4ae6b": "walletForCommunity()", +"72c537e6": "FirstCryptoBank(uint256,string,string)", +"72c5c349": "NinjaCore()", +"72c5cb63": "getAmountTransferred()", +"72c60b1d": "tokenAddressToAssetData(address)", +"72c691b2": "setWarTokenAddr(address)", +"72c70758": "setBountyFundWallet(address,address,uint256)", +"72c7c85a": "minority()", +"72c7e48d": "addAddressesToWhitelist(address[],string)", +"72c87075": "testBlockHeaderFetch()", +"72c87e37": "MahamHasanTestCoin()", +"72c91cdd": "maxTokenForPreSale()", +"72c9a5e3": "approveFST(address,uint256)", +"72c9e9e0": "placeBid(uint64)", +"72ca7fce": "TrueVeganCoin()", +"72cb8942": "everyCoin(address,uint256)", +"72cb8a89": "TokenWithdraw(address,uint256,address)", +"72cc1f5a": "knightAddress()", +"72ccd03a": "delWord(string)", +"72cd5576": "getImpactLinked(string)", +"72cd700b": "totalSupplyExpansionTokens()", +"72cd7b89": "foundationTarget()", +"72cde347": "setMiniPoolEdit_5(string)", +"72cee8ea": "getReferralProfit(address,address)", +"72cef34b": "getRevisionIpfsHash(bytes32,uint256)", +"72cf3b40": "recharge(bytes32,uint256,address)", +"72cfea69": "presaleClosingTime()", +"72d00e9f": "activeContracts(uint256)", +"72d0774a": "presaleFinishTime()", +"72d0979a": "AddBonusToListFromArray(bytes32[],uint256[],uint256[])", +"72d16358": "Oratium()", +"72d209f5": "processRequest(bytes32[],bytes5,address)", +"72d29f64": "setValidatorName(address,string)", +"72d2f8b8": "createHodler(address,bytes16,uint64)", +"72d32586": "STOREDIG()", +"72d32968": "withdrawBonus(uint256)", +"72d376b6": "proofTokensAllocated()", +"72d3880e": "mainICO()", +"72d39ee4": "Credo(address,address,uint256,uint256)", +"72d475db": "getTotalHeartsByDappId(uint256)", +"72d4b93c": "VitManToken()", +"72d5637f": "AxieCore()", +"72d5fe21": "changeProposer(address)", +"72d744e0": "feeFromTotalCost(uint256,uint256)", +"72d8c1c7": "ForestCoin()", +"72d8e442": "hasBeenRevealed(address,uint256)", +"72d9733e": "add_AUTO_MANU()", +"72d99675": "getCollectible(uint256)", +"72d9b86f": "unpauseCrowdsale()", +"72d9f13d": "setMaxEarningsClaimsRounds(uint256)", +"72dad9f9": "SuperCoinViewToken()", +"72db2339": "ERC677Transfer(address,address,uint256,bytes)", +"72dd236a": "setTokenOffering()", +"72dd529b": "totalsupply()", +"72dd52e3": "coinContract()", +"72dee32b": "getEndGameStatus()", +"72df02a7": "setMintThresholds(uint256,uint256,uint256)", +"72dff527": "drawTertiaryBWinners(uint256)", +"72e05569": "_sendRefund()", +"72e09d48": "mokenId(string)", +"72e0e984": "prime(uint256)", +"72e18c12": "placeSellOrder(uint256,uint256,uint256,uint256)", +"72e208eb": "targetAddr()", +"72e2cac8": "BONUS_WINDOW_4_END_TIME()", +"72e2f8f5": "checkFreeze(address)", +"72e38003": "treefs()", +"72e3c5c2": "toggleEmployeeSuspension(address,uint32)", +"72e3f040": "richestRoundId()", +"72e4030d": "_freezeTransfer(address,uint256)", +"72e496f3": "setRestrictedState(bool)", +"72e4dc06": "changeProductAvailability(uint256,uint256)", +"72e4f262": "annotationLength()", +"72e4f5cc": "CreateOffer_internal(uint8,bool)", +"72e5186c": "depositTo(uint256,address,uint256)", +"72e5c84f": "_getTokenBonus(uint256)", +"72e67d06": "setPendingManager(address)", +"72e6aca3": "isWithinICOTimeLimit()", +"72e6e21a": "exchangeableTokens()", +"72e7a69c": "isHardCapAchieved(uint256)", +"72e861ee": "private_setRandomAPIKey(string)", +"72e87c35": "giveProduce(uint256,string)", +"72e8e6a4": "PublicMined(address,uint256)", +"72e91fee": "initialPartnerAccount(uint8)", +"72e98a79": "transferBZxOwnership(address)", +"72ea1eb0": "addressBytesFrom(address,uint256)", +"72ea2e6d": "finishInitialExchangingPeriod(uint256)", +"72ea4b3d": "TestToken(uint256,string,uint8,string)", +"72ea4b8c": "getNumInvestors()", +"72ea61e8": "dist_developer(address,uint256)", +"72ea7243": "generateLand()", +"72ea8bfe": "executeBet(address,address,bool,uint256)", +"72eab193": "COMPLIANCE()", +"72ead941": "getDelegate(address,uint8)", +"72eae629": "multiMintBounty(address[],uint256[])", +"72ebe2aa": "verifyYourBalance(address)", +"72ec1993": "enablerefund(address,address)", +"72ece81c": "_create_island(bytes32,address,uint256,uint256,uint256,uint256)", +"72ed2c7f": "setQualifiedInvestor(address,bool)", +"72eda05f": "tokensAllocatedToCrowdFund()", +"72ee91c2": "configSignOrganizers()", +"72eec3a7": "refundToken(bytes32,string,address,address)", +"72eefb8a": "getRareItemsOwner(uint256)", +"72ef149e": "whiteListRegistrationEndTime()", +"72ef5458": "transferTokenOPSPlatformTokens()", +"72ef6a08": "rgbLimit(uint256)", +"72ef90e4": "Shop(address,string,string,uint256,uint32)", +"72efa4ef": "Showcoin()", +"72f0424f": "getPriceToken()", +"72f12814": "_setIDLE(uint256)", +"72f1301a": "USCCToken()", +"72f159b7": "migratePlayerData2(uint256,address,uint256,uint256,uint256,uint256)", +"72f3b3c4": "ownerAbandonOverride(uint256)", +"72f41f11": "approvedRatio(uint256)", +"72f443be": "ChangeLicense(address,bool)", +"72f4ecab": "Balances()", +"72f4f5f9": "TOKEN_REFERRAL()", +"72f52a3e": "getAttoTokensAmountPerWeiInternal(uint256)", +"72f57f1f": "withdrawUnsoldTokens(address)", +"72f5ae5f": "setCertificationManager()", +"72f5bb30": "UKToken()", +"72f5fccd": "releaseToMgmtTeam(address,uint256)", +"72f65dea": "BitstartiToken(uint256,string,string)", +"72f69a72": "getBurnRequestsLength()", +"72f6c3b5": "coinPercentage()", +"72f702f3": "stakingToken()", +"72f71894": "backTTCOwner()", +"72f74af8": "crowdfundAddress()", +"72f79b56": "btcEthRate()", +"72f83d3a": "poolSub(uint256)", +"72faebdb": "addCustomerFromACC(address)", +"72faf84a": "tokenSTCDRforBurnInControlWallett()", +"72fb54e5": "PHASE_2_PRICE()", +"72fb6f75": "MIN_INVEST_SUPPORT()", +"72fb9703": "challenge(address)", +"72fc493d": "decFeeDeposit(uint256)", +"72fc75d7": "_changeTrancheIfNeeded()", +"72fd1a7c": "changeRateSale(uint256)", +"72fd8772": "toekensForOthers()", +"72fdbf25": "increaseDividendPayments(address,uint256)", +"72fecf84": "upgradeUnitId(uint256)", +"72ff1773": "bonus_percentage()", +"72ff285e": "_calculatePayout(bytes32,uint256)", +"72ff3d87": "signedBySystem(bytes32,bytes)", +"73032446": "censorAndCover(address,uint256,string)", +"730369a7": "tokensBounty()", +"7303a559": "getCreatorMetadata(string)", +"7303ed18": "trustedUniverseBuy(address,uint256)", +"73047e93": "timeslucky()", +"73053410": "newVersion(uint16[3],address,bytes)", +"73053f70": "tokenDeposit(address)", +"7305c695": "_orderTokens(address,uint256,uint256,address)", +"7305dce1": "createPromoCollectiblesWithMining(uint256[],address[],uint256[],uint256[],uint256[],uint256[])", +"73069f94": "_claimTokens(address)", +"730720b8": "testControllerValidTransfers()", +"730736c9": "DelSocialAccount(bytes32,bytes32,bytes32)", +"730740f8": "_resumeWork(uint256)", +"7307b805": "dismissTokenOperator(address)", +"73086e58": "isFreezeTimeout()", +"730a04fd": "ArnoldCoin()", +"730a0d80": "unhold(address)", +"730a1a16": "_medalUnFreeze(uint256)", +"730a3127": "RECORDICO(address,address,uint256,uint256,uint256,uint256)", +"730a9f1c": "UncleToken()", +"730ad454": "vote(bytes32,address,bool)", +"730afd06": "_proposeAmendment(address,uint256[],uint256[],bytes32)", +"730b1952": "test_insert_updateHead()", +"730bdc96": "getHeroDetails(uint256)", +"730c1faa": "LogUnpause()", +"730c635a": "_checkToiletFlush(bool,uint256)", +"730d2221": "CWS(uint256,string,string)", +"730db1f8": "setNum(uint256,int256)", +"730e90b7": "addTipBalance(uint256,address,uint256)", +"730ef269": "getNumberOfItems()", +"730f2a96": "_transfer(address,address)", +"73107c99": "ICDStartTime()", +"7310c2e0": "Daisee()", +"73124ced": "transferLock()", +"73124ee9": "ContractDetector()", +"7312aaae": "singleWithdrawMax()", +"7312c065": "Receiver()", +"7312d625": "paySuperprize()", +"73137bd0": "buildInternalSalt(uint128,address,address,uint256,uint64)", +"73138e4f": "PRESALE_SUPPLY()", +"73139c0d": "getTokensForStage(uint256,uint256)", +"7313b3b1": "Drawing()", +"7313ee5a": "vestingPeriod()", +"7314221e": "_createDeveloper(string,uint256,uint256)", +"7315acc8": "getAllShareholdersOfArtwork(uint256)", +"7315af6f": "LandmarkCoin()", +"7315f446": "votedKickoff()", +"7316453e": "setPrice1(uint256)", +"7317a88d": "transferSingle(address,address,uint256)", +"7317c4f3": "replaceAnimal(uint8,uint16,bool)", +"731859bc": "batchLockArray(address[],uint256[])", +"7318b453": "setVotetUntil(uint8)", +"7319b43e": "playersList(uint256)", +"7319e5aa": "calculateBonus(address)", +"731a00f5": "calculateVestedTokens(uint256)", +"731a3b06": "unstakeFrom(address,uint256)", +"731ac7ed": "choosePerk(uint8)", +"731b185e": "LogSetPreICO(address,string)", +"731b3284": "Lockable()", +"731bed8b": "WithdrawalStarted(address,uint256)", +"731c2f81": "feeRebate()", +"731c7c62": "setServiceRegistryEntry(uint256,address)", +"731e1c94": "setLastPrice(uint256,uint256)", +"731e1ecd": "preMarketingSharesDistributed()", +"731f03fc": "setMinimumBuy(uint256)", +"731f49b7": "lastIdGen0()", +"731f93c5": "updateCertification(uint256,string,string,string,uint16)", +"731fb32e": "PRE_SALE_GMR_TOKEN_CAP()", +"73201667": "tokenUnlock(address,uint256,address,uint256)", +"73206348": "raiseDollarsWithdrew(address,uint160,int160)", +"7320753b": "approveConnection(address,address,uint256)", +"7321a17b": "getTotalBonusTokensByAddress(address)", +"7321ffa6": "distributeFunds(address,uint256,address,address,address)", +"73221a55": "unblock(address,bytes32)", +"732264b4": "getCommitmentsOf(address)", +"73228786": "setTokenAddresses(address[6])", +"7322dccd": "lastBlock_a16()", +"7323febe": "aa(uint256)", +"73247269": "getPoolContractPolicy(uint256)", +"73251628": "doAirdrop(address)", +"732519d5": "getSellable(uint32)", +"73252322": "RandomProofFailed(bytes32,uint256,uint256)", +"73256a8d": "SharesChainTokenCrowdFunding(address,address,uint256,address,address,address)", +"7325b084": "GdprCash()", +"732606fc": "getCooldownIndexCount()", +"732617bb": "switchAdmin(address)", +"7326b901": "getPropertyCount()", +"7326cac8": "ethIn_()", +"732726d1": "increaseLockedAmount(address,uint256)", +"732783ac": "tokensBought()", +"7328c6ec": "submitNewContract(string,address[],string,bytes32)", +"7328f531": "evaluateSkill(address,uint8,uint256,uint256,uint256)", +"7329036a": "getBlocksLeftInCurrentKick()", +"732a37c9": "SnowdenAffact()", +"732b6963": "emitEnd()", +"732bdbbf": "clearApprovalAndTransfer(address[16],address,address,uint256)", +"732c227f": "contributionCaps(uint256)", +"732d2da4": "testHasCinderToken()", +"732d565b": "ONE_YEAR_KEEPING()", +"732e632e": "assemblyTest()", +"732e77d0": "EGGS_TO_HATCH_1SHRIMP()", +"732e78d1": "_sign(address)", +"732ef12c": "fee_registration()", +"732f5d0c": "AdvancePayplus()", +"732fe2ff": "buyerCapLowEther()", +"73305f14": "Quicketh()", +"7330aba2": "getOracleAddresses()", +"7330aca4": "_isTransferAllowed(address,address)", +"7330daac": "isOnList(address)", +"73311631": "addBrand(address,string)", +"733122aa": "fromMemory(uint8[])", +"73321f03": "GateToken()", +"733261bf": "bountyAdress()", +"7332b520": "getRewardsCount(uint256)", +"73333128": "out3Done()", +"73335b46": "GlobfoneToken()", +"73339a13": "setNetworkState(uint256)", +"7333fd00": "lock4Dividend(uint256)", +"73342168": "BFToken(string,string,uint8,uint256)", +"733452bc": "Descript()", +"733480b7": "transferToICAP(bytes32,uint256)", +"7334a63f": "whatWouldPurchaseDo(uint256,uint256)", +"7334b2d7": "isBurnWallet(address)", +"7334d5e2": "editSpecial(uint256,uint256,uint16)", +"73357018": "RATE2()", +"73373879": "RecoveryQuorum(address,address[])", +"733746ba": "Snickers()", +"73379c54": "SecretNoteUpdated(address,bytes32,bool)", +"7337c993": "initiate(uint256,bytes20,address,address,bool,uint256)", +"73383832": "barrierPrice()", +"73384fd5": "addMultipleAddressesToUncappedAddresses(address[])", +"7338c25c": "hasAttribute(address,bytes32)", +"7338ddcc": "acm()", +"7338faba": "setHardCapEther(uint256)", +"73396ff4": "getLoanToDepositRatio()", +"7339affc": "UbiqTalk()", +"733ad6e3": "BHMBLU()", +"733b679e": "PRESALE_LEVEL_2()", +"733bdef0": "getStakerInfo(address)", +"733bf2f2": "setPercentageCut(uint256)", +"733ccaba": "setResolver(string,address)", +"733d8053": "containsToken(address)", +"733dca75": "registerCoin(bytes4,string,string,address)", +"733e193c": "saleHasEnded()", +"733ef936": "drainFunds()", +"733efe16": "numSkinOfAccounts(address)", +"7342048a": "transferOwnershipOfContract(address)", +"7342c484": "airdropDistributedTokensAmount()", +"73440745": "listItem(uint256,uint256,address,bytes32,address)", +"73454fe4": "StuckOnStupidToken()", +"7345a3a2": "payExcess()", +"7345da39": "logPayerStatement(string)", +"73463965": "notifyPlaceSellOrder(uint256,uint256)", +"73463c9c": "ReceivedETH(address,uint8,uint256)", +"7346ec57": "tokensToWei(uint256)", +"73475373": "trySell(uint256,uint256)", +"73479f39": "totalT8EXSold_CORNERSTONE()", +"7347a25d": "BitcoinTrade()", +"7348ac1f": "ecoSupplyAddress()", +"73493f09": "getTokensCost(uint256)", +"734a2c72": "ProjectTestToken()", +"734a56f0": "preSaleEtherPaid()", +"734b4861": "addOpenAction(string,address,string)", +"734b9a87": "mod(uint64,uint64)", +"734bb97e": "checkcoursestudent(address)", +"734ce665": "newProposal(address,uint256,bytes32,bytes32)", +"734d8287": "unclaimedFees()", +"734e21bd": "getToken(address,address,uint256,address)", +"734e3015": "newMegabox(address,uint256,uint256)", +"734f2838": "FinishCompetition(uint32)", +"734f8a4d": "kycValid()", +"735056a3": "SpoolAmount()", +"73520a2b": "getReservedTokenDestinationList()", +"7352e4b8": "setAffiliate(address,address)", +"735307fb": "createTimeLockContract()", +"73535aa7": "PixelUpdate(uint32,uint8)", +"7353a21d": "queuedAmount()", +"7353f62b": "testGetApprovalDb()", +"73545d44": "landmarkOwnershipCount(address)", +"73549604": "getFinalTime(bytes32)", +"7354eb04": "rocCoreAddress()", +"7355303e": "_priceOf(uint256,uint256)", +"7355a424": "getDataCount()", +"735631ad": "revokeTransaction(uint256)", +"7356a8a9": "getTile(bytes)", +"73580358": "ColorBayTestToken(uint256,string,string)", +"73582884": "releaseGrant(address,address,bool)", +"735958f2": "XPAAssetToken(string,string,uint256)", +"73596cfc": "Bitcoincredit()", +"73599205": "ProdDToken()", +"7359f5cf": "FundAddress()", +"735a3326": "getLeftTickets()", +"735a80b1": "test_voteSpammingAgainst()", +"735af2eb": "Rate10()", +"735b232c": "addWhitelistedTransfer(address)", +"735b266d": "icoStage1Deadline()", +"735b38a3": "getCardCanPresaleCount()", +"735b81ab": "circulationAt(uint256)", +"735bae84": "migrateRoundData(uint256,uint256,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"735bb742": "sha256Docs(bytes32)", +"735cfff2": "valueTotalSupply()", +"735d3e81": "updatedBalance(address)", +"735d45e1": "RADIUM()", +"735d8876": "getCurrentExpirationTime()", +"735dcc8b": "devfeetodev()", +"735e9cbb": "disableModule(bool)", +"735f11b4": "updateAndWithdraw(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"735fb8e0": "fundOwner()", +"7360ab6e": "mint(address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"73611c48": "send3MilWeiToPong()", +"73618371": "Molecule(uint256,string,string)", +"7362377b": "withdrawEther()", +"73627826": "getTime(uint256)", +"7362d9c8": "addWhitelistAdmin(address)", +"7363d85b": "TMEXAddress()", +"73646c91": "updateMirroir(address,address)", +"7364a8dc": "MyBalance(uint256)", +"73654b6d": "userTransferFrom(address,address,uint256)", +"7365870b": "bet(uint256)", +"7365babe": "MIN_TOKEN_INVEST()", +"7365e1fd": "setPriceCutoff(uint256)", +"7365e2d7": "totalPresaleTokensSold()", +"736660ac": "determiningWinner()", +"7366794e": "distributeTokens(uint256)", +"73668b06": "XCCCrowdsale(address)", +"7366c68d": "calculateCommission(uint32)", +"7366e3ff": "raisedInPresale()", +"73671268": "vestToAddress(address,uint128)", +"73674ecc": "admin_deposit(uint256)", +"7367df4b": "Syndicate(uint256)", +"7367e302": "ContractCreationTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", +"7367f156": "gameSettings(uint256,uint256)", +"73681818": "EICQ()", +"73688914": "owner1()", +"7368a8ce": "create(bytes32)", +"7368b3cb": "DinsteinCoin(uint256,uint256,uint256,string,string)", +"736a0102": "bonusETH()", +"736a1b9a": "AdjustClientAccountBalance(bytes32,bytes32,bytes32,string,uint256,string,uint256)", +"736b13ae": "setRefillFor(string,uint256,uint256)", +"736c24b5": "AdsharesToken(address,address,address,uint256)", +"736c3e82": "onPayment(address,uint256,bytes)", +"736c983a": "setCurrentRevision(address)", +"736d323a": "setPausable(bool)", +"736d7c52": "isAlreadyDelegate()", +"736d7ee9": "revokeAccess(address,int256,address)", +"736ead2c": "optionsCalculator()", +"736ec05c": "setMigrateTo(address)", +"736eec58": "TransferAnimalToAnotherUser(uint256,address)", +"736fafd3": "setPreIco()", +"736fe565": "withdrawAmount(address,uint256)", +"73705090": "teamOnePrefix()", +"7370a38d": "getNumPackages()", +"7372014e": "midnight()", +"73720de9": "receiveMonthlyNRT()", +"7372196c": "PHASE_4_PRICE()", +"7372c2b5": "pull(address,address,uint256)", +"73732024": "isDeposited(address)", +"737377fe": "getTokenVolumebasedBonusRateForPhase2(uint256)", +"7373af84": "numberOfNarcosByDistrict(uint8)", +"7373f41d": "getEthereumBalance()", +"73741171": "createVCXVault(uint256,address)", +"73743fbe": "prospectors_team()", +"7374b013": "buyTDETokensWithoutETH(address,uint256,uint256)", +"737517f5": "powerUp(address,uint256)", +"73752db4": "getKYCPayload(bytes)", +"7375c0c3": "PonderGoldToken()", +"7375e0fe": "testSimpleObject()", +"7375ed82": "LogLoss(address,uint256,uint256)", +"7376678b": "finalizePreSale()", +"7376fc8d": "right67(uint256)", +"73770c01": "Updater()", +"737732b2": "DEVELOPERS_BONUS()", +"7377a036": "CloudexchangeToken(address)", +"737a7698": "transferAssigner(address)", +"737aa5a0": "remainingTokensWallet()", +"737c2d8c": "checkAvailableTokens(address,address)", +"737c8ea1": "_getRevisionBlockNumber(bytes32,uint256)", +"737ce916": "MT(uint256,string,string)", +"737d5f39": "AccessAdmin()", +"737d8c8e": "ChangeTokenWalletAddress(address,address)", +"737e2835": "_minHouseEdgeClassic()", +"737e7d4f": "getByVersionId(uint256)", +"737f18ff": "_weiToVouchers(uint256)", +"7380fbf3": "removeMemberArrayToken(address,address,uint256)", +"73815ab7": "nfc_simplehq()", +"738198b4": "cast(uint256)", +"738228cd": "testUmlaut()", +"73826a93": "updateTokenDetails(string)", +"7382901e": "serverSeedHash()", +"73835f35": "checkIfEligable(address)", +"7383d709": "buyItem(uint256,address)", +"7383d8ee": "getEachBindAddressAccount()", +"73845cfa": "setLocked(address,uint256)", +"738486bd": "BeerCoin(uint256)", +"7385c4be": "deleteHiddenPosition(uint32,int64[],bytes16)", +"7385e1f3": "level_5_amount()", +"7386c2be": "Exilium()", +"7386f0a7": "reservedTokensDestinations(uint256)", +"7387479e": "reclaim_art_token()", +"73889677": "ownerLives()", +"73889f4a": "getHoldersCount()", +"7388fb2b": "AltTokenDistribution(address)", +"73898796": "Tier_Classic_Registration()", +"738a2679": "left85(uint256)", +"738a2cf8": "nextPaymentTime()", +"738acb3b": "sha(string)", +"738b2fac": "setSignedPublicEncKey(string)", +"738b31b5": "minimumWithdrawal()", +"738c2931": "rewardTwo()", +"738d8d82": "numberWikiPages()", +"738ddabe": "getContentIndexedAccountCred(uint256,address,address)", +"738e6d78": "checkRefund(address)", +"738fa7a4": "userRank()", +"738fdd1a": "reg()", +"7390a673": "MyEtherTellerEntityDB()", +"7390c786": "getRandomResult()", +"739112da": "safeSubtrCPCE(uint256,uint256)", +"73913545": "fundVesting(uint256)", +"73916918": "getinfowinning(address,uint256)", +"73918980": "multiTransferEth(address[],uint256[])", +"73925694": "take(uint256,address[])", +"739294d2": "setAssignedID(address,address,uint256,string)", +"7392ce80": "TokenDeployed()", +"73930ce2": "validAmount()", +"73931bbf": "getGame(bytes32)", +"73932bfd": "withDrawal()", +"7393d262": "goldenTicketUsed(address,string)", +"7393e0b2": "DayTrader()", +"7394cb3f": "addLocationRecord(uint256,uint256,string,string)", +"73962b26": "isReleased(uint256)", +"73963bf0": "setIdArray(address,address,string,string,uint256[])", +"73964787": "batchAddCancelledOrFilled(bytes32[])", +"7397d5f1": "getMintForReportingParticipantAmountValue(int256)", +"73980d69": "dollarRaised()", +"739826c5": "changeAllowTransfer()", +"739838be": "DigitalEnthusiasts()", +"73984188": "delOwner(address)", +"739890f0": "disqualifyTeam(address)", +"7398ab18": "getPosition()", +"7399646a": "theRun()", +"73998758": "smpToken()", +"739ab361": "needApprovesToConfirm()", +"739b47ca": "recordWin(address)", +"739b5014": "Snatch(uint256,address,address)", +"739b6214": "doProveMemoryWrite(uint256,bytes32,bytes32[])", +"739b78ed": "LogSell(address,uint256,uint256)", +"739b8c48": "setForwardedOutcome()", +"739bdcff": "pricePause()", +"739beded": "mintSendTokens(int256)", +"739cb57d": "setEndtDate(uint256)", +"739d3307": "SetWho(address)", +"739d980e": "address(address,uint256)", +"739e40b7": "getMyPunchCards()", +"739e7f48": "TeamChoice(address,uint256)", +"739f2224": "SetActive(bool)", +"739f763e": "getListing(bytes5)", +"739f888c": "setNewEstimate(int256,int256)", +"739f9202": "dev_share()", +"739fab1b": "getAvailableWithdrawInvestmentsForOwner()", +"73a070bc": "addressReserveFund()", +"73a077a4": "sub16(int16,int16)", +"73a17e6d": "setCompte_31(string)", +"73a19dd2": "Deposited(address,uint256,uint256)", +"73a1e7f5": "allReceivedEth()", +"73a1f366": "founderTokenCount()", +"73a22e62": "fetchPaidOrdersForMerchantByAdmin(address)", +"73a26a12": "CryptoDiamondCoin()", +"73a29b5e": "get_presale_arbits_sold()", +"73a2d1ff": "MexicovsSweden()", +"73a3d9e4": "canUpdatePercentToTakeAsSeed()", +"73a40efb": "_computeRarity(uint256,uint256,uint256,uint256,uint256,uint256)", +"73a4c307": "COMMUNITY_SUPPLY()", +"73a55389": "setRarePrice(uint256,uint256)", +"73a5717e": "BaironSupply()", +"73a5f508": "getAuditorRegistry()", +"73a699ad": "isGenesMarket()", +"73a6b2be": "isAccountValid(address)", +"73a72b18": "setFountainFoundationOwner(address)", +"73a75c1f": "addVineyard(string,uint16,uint24,uint32,uint16)", +"73a7b8b2": "storeStages(uint256[])", +"73a7dfda": "we()", +"73a80336": "prizeWon()", +"73a80b74": "_mintSqr(uint256,address,uint256,uint256)", +"73a91544": "showMigrationStabitcoinAddress(address)", +"73a95ddd": "redemptionPaused()", +"73a97787": "sgcToken()", +"73a97f42": "MetaRules(address,address[])", +"73aad472": "guaranteedBuyersBought(address)", +"73ab7503": "FlightPlan(address)", +"73abecbb": "kill1()", +"73ac4739": "getOnSellCardIds()", +"73acbcb2": "switchBleachAllowed(bool)", +"73acee98": "totalBorrowsCurrent()", +"73ad2a15": "AllowedRecipientChanged(address,bool)", +"73ad468a": "maxBalance()", +"73ad6c2d": "setMarketplace(address)", +"73ae277b": "getDepositAddressVerify()", +"73aef263": "FDSToken()", +"73aef2b6": "unFrozenControl(address,uint256)", +"73af6308": "setTierLimit(uint256)", +"73af652c": "setCollectibleExposure(address)", +"73b1184e": "setupVote(uint256)", +"73b14098": "getTotalDevelopmentFundEarned()", +"73b1edce": "_lock(address)", +"73b24ca0": "indInflation()", +"73b2c384": "_computeBorder(uint256)", +"73b2e80e": "hasClaimed(address)", +"73b34271": "ETH420on49()", +"73b38101": "wipe(bytes32,uint256)", +"73b3dcde": "maxDestroyThreshold()", +"73b4086b": "loans(address)", +"73b40a5c": "forwardTo(address,address,uint256,bytes)", +"73b4484f": "registerA(string,string,string,address)", +"73b47908": "_updateCounters(uint256,bytes32)", +"73b4df05": "createToken(string,address,uint256)", +"73b51d38": "startWork(string)", +"73b51f0b": "_tokenDelivery(address,address,uint256,uint256)", +"73b55eaf": "registerData(address,int256,bytes32,address)", +"73b5abaa": "PresaleDiscountPercentageChanged(address,uint8)", +"73b6656f": "relay(address)", +"73b68be8": "preicoAddresses()", +"73b6a48a": "GetDataRequest(uint256,bool,string,uint256)", +"73b793a8": "PrizeFund()", +"73b8a8c1": "MeetOneCommunityBonus()", +"73b913fa": "safeTransferManyFrom(address,address,uint256[])", +"73b972bc": "bonusTokensIssued()", +"73b9aa91": "account(address)", +"73baae7a": "KingKongCoin()", +"73bbda81": "standardTokenDefrosting(address[])", +"73bc1b2f": "customerPool()", +"73bc8b2f": "kvcSub(uint256,uint256)", +"73bc8b77": "SPIDER_BOOST()", +"73bda17e": "restrictedTokens()", +"73be0a99": "getData_7()", +"73be6ddd": "allowEscrow()", +"73bf2ce0": "getMilestoneHashById(uint256)", +"73bfb566": "withdrawFromProject(address,uint256)", +"73c107b3": "checkWins(uint256,uint256,uint256)", +"73c1af76": "deleteFreezeList(address)", +"73c24cb1": "Buy(uint256,address,uint256,uint256,uint256,bytes16,bytes32)", +"73c261f4": "getRegionUpdatedAtPurchasedAt(uint256)", +"73c28692": "disallowFunding()", +"73c2ec65": "sendbal(address,uint256)", +"73c32a71": "get_property_basic_info(uint256)", +"73c4726b": "minHouseStake(uint256)", +"73c4942a": "depositStopTime()", +"73c6a4ec": "acknowledgeCopieExecutoire(bytes32)", +"73c6aa7d": "ExchangeEfx()", +"73c74103": "recoverTokensTo(address,uint256)", +"73c8c4bf": "Leverages()", +"73c8d8a2": "setMaxPaymentInEther(uint256)", +"73c8de54": "issueByTranche(bytes32,address,uint256,bytes)", +"73c90b43": "calcBidAllocationFee(bytes32)", +"73ca1b28": "WHYPHY()", +"73cb0620": "fluffyCatAddress()", +"73cb8ab7": "enableTokensTransfer()", +"73cbd8ce": "getPublicSupply()", +"73cc3ec7": "iceFundDeposit()", +"73cc9153": "MeshPointManager()", +"73cce6f1": "presaleAllocateTokens()", +"73cd0a19": "allowanceBurn(address,address)", +"73cd148e": "VariableConstructor(string)", +"73cdcac4": "getPostsFromPublisher(address,string,uint256,bool,uint256)", +"73ce3c72": "UpStats(uint256,uint256,uint256,uint256)", +"73ce9920": "parseOrder(bytes)", +"73cf013c": "isBlacklist(address,address)", +"73cf8f97": "registryRequestSku()", +"73d00224": "swapTokens()", +"73d01ead": "prepareForMigration()", +"73d08bc5": "prefill(address[],uint256[])", +"73d0d693": "Set(address,uint32[],uint24[])", +"73d0fe48": "totalLockedHavvens()", +"73d28995": "isMidGrade(uint256)", +"73d31240": "removeGame(uint256)", +"73d3172e": "MXY_chain()", +"73d384c8": "hasDeposits(address)", +"73d45ba4": "owner_ActivatePOS(bool)", +"73d4a13a": "data()", +"73d4c0ff": "m_aOwner()", +"73d4d500": "transferPayable(address,address,uint256)", +"73d4d9f9": "checkMAC(bytes32,bytes32[],bytes32)", +"73d55379": "Beneficiary()", +"73d65c00": "GEN0_NO()", +"73d69720": "checkWhitelistAddressValue(address,uint256)", +"73d6c2ec": "init_ico(address)", +"73d901d6": "activityClosed()", +"73d9170d": "GKBToken(uint256,string,string)", +"73d9fd0c": "placeTokenBet(uint256[],bytes32,uint256,uint256,bytes32,bytes32,uint8,uint256,address)", +"73da968d": "buySection(uint256,uint256,string)", +"73dae7d6": "issueTokensForPrivateInvestor(uint256)", +"73db0844": "ETHUSD()", +"73db2350": "commentsLength()", +"73dc7635": "openAttacksCount(address)", +"73dd9073": "secondStage()", +"73de3570": "calcaultePrizes(uint256,uint256)", +"73de3e72": "_refundTokens()", +"73de975c": "alreadyMintedOnce()", +"73def2b7": "subFreezingPrice()", +"73df6b19": "visitLength(uint8)", +"73e1743a": "buildDSBasicAuthority()", +"73e1851b": "migrateMyTokens()", +"73e1c5c9": "getMyFreeCoin(address)", +"73e2212e": "changepresalebonus(uint256)", +"73e2ab69": "_removeWhitelistAdmin(address)", +"73e2d75f": "changeClons(address,uint8,bool)", +"73e2faa8": "destructionContractAddress()", +"73e30e49": "majorEventFunc(uint256,bytes,bytes)", +"73e3ce80": "fact()", +"73e3de70": "CardSwap(address,uint256,uint256)", +"73e3e7a7": "getAdultByAddress(address)", +"73e40ed4": "REWARD_SUPPLY()", +"73e4d829": "createLandmark(uint256,uint256,address,uint256)", +"73e52855": "crownUnFreeze()", +"73e538fc": "availableTokensOnCurrentStage()", +"73e55a57": "DAOstackPreSale(address,uint256,uint256)", +"73e58a75": "balanceTeam()", +"73e61cf2": "changingEnabled()", +"73e67a38": "GameGoldToken()", +"73e6fc1b": "parseUint(string,uint256)", +"73e7c8ce": "setErrorRest(bytes,uint256)", +"73e81d88": "TrustMarketHubToken()", +"73e87d74": "OTM()", +"73e888fd": "contribute(address)", +"73e8b3d4": "exist(bytes32)", +"73e9f3e6": "Crowdsale(address,uint256,uint256,uint256,address,address)", +"73eab74b": "SoulTransfer(address,address)", +"73eaddf0": "OMGBalance()", +"73ec6bb5": "AMOUNT_PER_PHASE()", +"73ec7df0": "joinCommunity(address)", +"73ecac3b": "setGiftTokenAmount(uint256)", +"73ece9c4": "setEmployee(address,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint8)", +"73eda3cc": "finalizePublicSale()", +"73eec3c5": "payoutDividends(address,uint256)", +"73eef753": "coinSendSameValue(address[],uint256)", +"73ef6357": "selectplayer()", +"73efc627": "addAction(bytes32,bytes32,string,uint256,bool,uint256,uint256,uint256,uint256,bytes32)", +"73f00fb3": "emissionlocked()", +"73f01104": "reveiveToken(address,uint256)", +"73f029cd": "setOrUpdateRecord(string,string,string,string,address,uint8,bytes32,bytes32)", +"73f03d53": "crowdSaleFinalized()", +"73f1e6d7": "resolveLotteryByOraclize(uint32,uint32)", +"73f28451": "tokensRate()", +"73f310df": "multiAccessRemoveOwner(address)", +"73f3312d": "setMentorsTokensWallet(address)", +"73f3bd1f": "earlyInvestors()", +"73f42561": "burned()", +"73f440fe": "prevRoundTweetId()", +"73f58acd": "createTeamTokenTimeLock(address,uint256,uint256,address)", +"73f5cfb1": "isPhaseValid(uint256)", +"73f5edce": "UpPlayerResult(string,address,uint256,uint256,uint256)", +"73f5f8ee": "tokensAvailableAtCurrentTier()", +"73f64212": "supplyMultiplier()", +"73f69bc5": "TrustedDocument()", +"73f8edc3": "configureMarketItem(uint256,uint8,uint8,uint8,string)", +"73f8fd4b": "getUserTokenBalance(address,address)", +"73f93a48": "getAccountContentTip(address,uint256)", +"73f9421d": "getUpgradeCardsInfo(uint256,uint256)", +"73f9d5a0": "eostContract()", +"73f9ff23": "RaffleMakersBook(string,uint256)", +"73fa9ce8": "getAmTokenBalance(address)", +"73fac6f0": "confirmReceived()", +"73fb7878": "dividendFor10kDaily()", +"73fba0e8": "airdropReserve()", +"73fc115f": "RubiToken(address)", +"73fc83fa": "updateDireccion(address,bool)", +"73fc8420": "deployedOn()", +"73fc9643": "calculateFLC(address,uint256)", +"73fcfea1": "withdrawPLAT()", +"73fddd16": "refundEndTime()", +"73fe1673": "cpow2(uint256)", +"73fe747c": "TransferCreators(address,uint256)", +"73fee090": "setfee(uint256)", +"73fef35a": "setStartTimeIcoStage2(uint256)", +"73ff4d48": "getPlayerForCard(uint256)", +"73ff81cc": "getOwnersCount()", +"73ffd5b7": "transferEther(uint256)", +"73ffd969": "setMap(uint256,uint256,uint256)", +"73ffecd0": "getPlayerHistories(address,uint256)", +"74002b6c": "getTokenPriceInWeiAndPhaseIdxsForDate(uint256)", +"7400ed3b": "acceptDeposit(address,address,uint256)", +"74019f87": "BATSafe(address)", +"7401aaa3": "getPlayerRoundBought(uint256,uint256)", +"7401f9c0": "flag(uint256,address)", +"740227d1": "receiveFunds(address,uint256)", +"7402a9aa": "isFirstStageFinalized()", +"74030531": "bet(string)", +"7403db08": "getVerifiedHash(address,uint8,address,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"7403e980": "initPGOMonthlyPresaleVault(address[],uint256[])", +"74040424": "startPartnerSale(uint256)", +"74040cd2": "setBidFeePercents(uint256)", +"74041d1f": "liquidPledging()", +"74043a70": "FRPUSD()", +"740528a7": "GrantRevoked(address,uint256)", +"7405322e": "checkBalance(address,string)", +"74056b73": "crowdsaleMinUSD()", +"7405cee9": "CGCToken(uint256,string,string)", +"74063cc1": "tokenOfMakerByIndex(address,uint256)", +"74068480": "setPresaleFail()", +"7406d1a7": "updateRegistratorStatus(bool)", +"7406d943": "BIGTPrivate()", +"740707cf": "cancelSaleOfMintingAddress()", +"74087040": "testBitsNotEqualSuccess()", +"740907ea": "buySale(address)", +"74091685": "setReservesForExchangeTokensPercent(uint256)", +"7409e2eb": "swapTokenToToken(address,uint256,address,uint256)", +"740a2a90": "registerEmployer(string,string,bytes32,uint256,uint256,uint256[],string,string,string)", +"740ab8f4": "partitionsOf(address)", +"740b63f9": "set_hedgeAddress(address)", +"740b91b6": "horseOwnerIndex(uint256)", +"740d0a6f": "getAmbientHumidityException(bytes32)", +"740d73f3": "addToWhiteList(address[])", +"740e2a29": "setFundRepository(address)", +"740ed4e0": "addNewStakeDiceGame(uint256)", +"7411b2b2": "TrendNetworkToken()", +"741273d6": "testThrowRegisterContractAgain()", +"7412c223": "getCurrentTier()", +"74135154": "func1()", +"7413801a": "initializeAdvisorVault(address)", +"7413dcc3": "DelistTitle(uint256)", +"74141266": "arbiterList(uint256)", +"741430ad": "VINCToken()", +"7414edc4": "ERC20Token(string,string,uint8,uint256,address,uint256)", +"74151a2a": "retrieveUnsoldTokens()", +"74158cd8": "updateAdministratorKey(address,address)", +"7415fbdb": "_getGameInfoPart2(uint256)", +"74163ab1": "minsignupeth()", +"741677a5": "makeTrade(address,address,uint256,string)", +"741685e5": "EtherFuture()", +"7417040e": "numberOfParticipants()", +"7417575c": "_releaseEarning(bytes32,bytes32,bytes32,bool,address,uint8)", +"74182009": "CreateWolk(address,uint256)", +"74192209": "getTokenEnhanced(uint256,bool)", +"7419e77a": "setMarketplace(address,bool)", +"7419f190": "stakeStartTime()", +"741a35c4": "getTx(address,uint256)", +"741ad7a3": "transferDividends()", +"741b0508": "isSplitable()", +"741b2239": "unfreeze_period_time()", +"741b3c39": "depositBond()", +"741bcc93": "fillOrKillOrder(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", +"741bd9c8": "ETHDeposir()", +"741be410": "getOpenPackageIdOfOneAgency(address)", +"741bef1a": "priceFeed()", +"741c251d": "changeGamemaster(address)", +"741cb9ce": "setCurve(address,bytes32,int256,int256[])", +"741cdf27": "Library()", +"741e2345": "registerMany(address,uint256,int256,uint256,bytes20,address,bytes)", +"741e3576": "getBonustokens(uint256)", +"741ed475": "AnkitVictoToken()", +"741f0434": "check(bytes20,uint32,int24[4],int24[4],uint32[4],bytes32[])", +"741f7034": "CrowdsaleToken(string,string,uint256,uint8,bool)", +"74214c92": "StandardERC223Token(uint256)", +"74220f3d": "burnApproval(address,address,uint256)", +"74229301": "isTokenized()", +"7422a127": "is_valid_event()", +"7423ab57": "Project_RemoveToken(uint256,uint256)", +"7423d96e": "txnTax()", +"7423e225": "getDataPointForSubject(int256,uint256,uint256,int256)", +"7424bab1": "currentAirdropAmount()", +"7424bebc": "bonusBasePoints()", +"7426172d": "addPurchaseFromOtherSource(address,string,uint256,uint256)", +"74268ff2": "deleteOffer(uint256)", +"74281f95": "FNAToken()", +"74287872": "investedAmountOf()", +"742887ff": "deleteAddress(address)", +"7428c5f4": "Gamble()", +"7428eed3": "IndieGameToken(string,string,uint8,uint256,address)", +"74294070": "_createItem(string,address,uint256,bytes32,address,address)", +"742978da": "getAssets(address)", +"7429c086": "repeat()", +"7429d78b": "SUCC(uint256,string,uint8,string)", +"7429f1eb": "multiAccessSetRecipientD(address,address)", +"7429fd67": "initHolderConfig()", +"742a1a56": "CCTE()", +"742a9fa0": "recursiveFloor(uint256,uint256,uint256)", +"742aa578": "AddressRecovered(address,address)", +"742b8b9d": "_CallRejected(bytes32,bytes15)", +"742ba8de": "declareProjectNotFunded()", +"742bff62": "SoftDude()", +"742c81e4": "approveOwnership()", +"742cd75d": "mintPCD(address,uint256)", +"742d5355": "calcTokenOwnerReward(uint256)", +"742d9f0b": "lastBlock_v7()", +"742d9fa3": "userOfferSubmitElement(uint256,uint256,uint256,uint256,uint256,uint256)", +"742e2ebd": "AllowedSet(address)", +"742e54b2": "_airdropSupply()", +"742f79d5": "preRate()", +"7430faf4": "fechSnapshotBlockByIndex(uint256)", +"74313b4a": "releaseTokens(address,address)", +"7432542d": "_remainReward()", +"74331be7": "sete(address)", +"7434206e": "validateReceipt(string,uint256,bytes32,bytes32,bytes,bytes,bytes32)", +"743438ad": "id_for_address(address)", +"7434d180": "removeSmartContractByAddress(address)", +"7434e60d": "HamsterToken()", +"7435039d": "calculateBountyRewards(uint128)", +"743521c6": "rewardBountyMany(address[],uint256[])", +"7437681e": "maxTx()", +"74388347": "checkBetDozen(uint8,address,bytes32,bytes32)", +"74389991": "breakit()", +"7438b0df": "WIN_CUTOFF()", +"74396ed1": "makeWithdrawal(address,address,uint256,uint256)", +"74398d45": "setGlobalTokenTransferLock(bool)", +"7439a3bd": "verifyClaim(uint64)", +"7439e787": "getUserValues(address)", +"743a3252": "addAddressAsMultiOwner(address,string)", +"743ab538": "validateNameSignature(string,uint256,address,string,uint8,bytes32,bytes32)", +"743b179e": "giveRefund(address)", +"743b8e1a": "ROHH(uint256,string,string)", +"743bd681": "OWNERS_AUCTION_CUT()", +"743bdcef": "MAX_WITHDRAW_PCT_TX()", +"743c006b": "iWantXKeys(uint256,uint256)", +"743c6775": "investorBaseInfo(address)", +"743c7f6b": "setPreSaleDate(uint256)", +"743e0c9b": "receiveTokens(uint256)", +"743e92ee": "getNode()", +"743f78ab": "WalletSet(address)", +"743f978f": "addValueToCovfefe(uint256)", +"74400873": "execute(uint256,address,uint256,uint256)", +"744013c4": "Gnome()", +"74418368": "getAdvertisementStorageAddress()", +"7441b8bb": "lockBalance(address)", +"7442f427": "subUserTokenLocalBalance(address,uint256)", +"74439ca7": "classic()", +"74449ca4": "getContentCount()", +"7444b006": "transferCopyFrom(address)", +"7444b227": "getMidgradeCarsForVariant(uint256)", +"7445690b": "getLotteryClass(uint8[7],uint256)", +"744598cd": "Phase1AccountTokensMaxUpdated(uint256)", +"7445af4b": "pay_by_bond_contract(address,uint256)", +"7445d659": "foreignBridge()", +"74467a1e": "FOR_SALE()", +"7446ce1c": "addJob(bytes32,uint256)", +"74478bb3": "isClaimable()", +"74479db0": "fcontr()", +"7448d386": "getStageData(uint8,uint256)", +"744927fd": "getWinnerWithRank(uint8)", +"744a8f77": "chefPrice()", +"744b4b3f": "createNormalBank()", +"744bb8d2": "crowdsaleHardCap()", +"744bfe61": "withdrawFunds(uint256,address)", +"744c7c7f": "proposeMinting(uint256)", +"744c8c09": "chargeFee()", +"744d0a92": "MINI_GAME_BONUS()", +"744d3411": "getBidCount(uint256)", +"744d8b4f": "recordWin(uint256,uint256)", +"744f4994": "getBrickIdsByOwner(address)", +"744f5f1a": "modifyTaxRate(uint256)", +"744f7c7d": "toUint256Safe(int256)", +"744fa2c8": "submitTokenToEthOrder(uint128,uint128)", +"7451bf71": "admin_transfer(address,address,uint256)", +"745332fe": "getRestarTime()", +"74536403": "getAvar()", +"74539f98": "getEventResolvers()", +"7453a417": "__address4__()", +"7453cfa1": "EtherPaint()", +"7453de96": "approveTransaction(uint256,uint256,string,uint256)", +"745400c9": "requestWithdraw(uint256)", +"74544e2d": "setGrandFactory(address)", +"7454e74c": "setAudit(address,address)", +"74552650": "left95(uint256)", +"74556ee9": "getQST()", +"7456be7d": "rent(uint256)", +"7456f2b9": "getDistributionTime()", +"74573f80": "lastPlayTimestamp()", +"7457412e": "THIRD_PARTY_LOCKUP_ADDR()", +"7457a9e1": "Coupon(uint256)", +"74580e2f": "changeCreator(address)", +"745828ef": "ProofOfLongHodlV2()", +"74583772": "adminSendTokens(address,uint256)", +"74590f64": "setApoderado(bytes32)", +"745911d5": "getHolidayByIndex_(uint256)", +"745944d5": "setCampaignValidById(bytes32,bool)", +"7459a5e1": "KriptoPark()", +"7459f2a3": "registerArbiter(uint256,uint256,uint256,uint256,uint256)", +"745a8be2": "flip32(bytes)", +"745ab73d": "BrainIsToken()", +"745ce3bb": "iaInvestedBy(address)", +"745ced49": "CORE_TEAM_PORTION()", +"745cf221": "ArjunaCoin()", +"745d1d64": "ethCollector()", +"745dcd4d": "stop(string)", +"745e77f9": "_createAnimecard(string,string,string,string,uint256,address)", +"745e9da2": "GameProgress(uint256,uint256,uint256)", +"745ea0c1": "registerNameXnameFromDapp(address,bytes32,bytes32,bool)", +"745f2860": "_buyTokens(address,uint256,uint8)", +"74601c3c": "availableToMint()", +"746022c2": "oneGetMoneyBack()", +"74607d91": "patient(uint256)", +"74609d0c": "createDApp(bytes32,uint32,bytes,bytes32)", +"746178ed": "escrowTokensWallet()", +"7461dbff": "setOwnerAirDropRate(uint32)", +"7462260b": "KEM()", +"7462beec": "renewSubscriptionByDays(uint256,uint256,uint256)", +"7462e4f9": "Etheropoly()", +"74635cfc": "setMembers(address[])", +"74646086": "StreamityTariff(address)", +"7464d5d8": "rewardDistributionStart()", +"74651594": "tgeSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"746584b4": "setMintingContractAddress(address)", +"7465df26": "totalAccessories(uint256)", +"74664b34": "interestNextInPercent()", +"7466b2d0": "transferIsPossible()", +"7466e67d": "mintToOtherCoinBuyer(address,uint256,string)", +"7466ee48": "getAppAddress(uint32)", +"74674256": "temroyToken()", +"746796f0": "_setProfitSharingParameters(uint128,uint128)", +"7467af07": "EladToken()", +"7467bc92": "disbursementHandler()", +"7467bcd9": "minPaymentWei()", +"74689990": "schedulePayoutOraclizeCall(uint256,bytes32,uint256)", +"746a9af2": "printCertificate(string,string,string,uint16,string)", +"746abc79": "distributeRegistrationBonus(address)", +"746ac67e": "PCNCrowdsale()", +"746c9171": "m_required()", +"746d3024": "perPrice()", +"746df633": "getTeamBallers(address)", +"746eff8c": "_cancelRolePermissions(address,address)", +"746f79d9": "TIER2_PERCENT()", +"746fc8d0": "right47(uint256)", +"74703123": "proceedKYC(address)", +"74707e0d": "deleteWallet(address,address)", +"747082b9": "FsTKAuthorityChanged(address)", +"7470a835": "OliToken(uint256,string,uint8,string)", +"7470f760": "createTeamTokenByPercentage()", +"74711285": "restartSale()", +"74715432": "renounceAuctionManager()", +"7471ea81": "IPayX()", +"7471f6f6": "buy_beer(uint256,uint256)", +"747293fb": "addCaller(address)", +"7473f4e0": "grantAccessbyDelegate(bytes32,address,address,string)", +"74748460": "balanceOfAtInternal(address,uint256)", +"7474dfd0": "_getBetAmount(bytes32)", +"74754282": "manufacturer()", +"747586b8": "setInt(int256)", +"74759f43": "numberOfInvestments()", +"7475baa6": "AirDropPayBitsBounty(address[])", +"7476865f": "ToggleMaintenance()", +"74772667": "changeMinContrib(uint256)", +"74775cdd": "buyAtPrice(uint256)", +"74780111": "assertEq16(bytes16,bytes16)", +"747853bc": "test_validBoardFundTransfer()", +"74796cc2": "getPlayersInGame(uint256)", +"7479aa04": "getCurrentRoundStartTime()", +"7479b9ac": "founderToken()", +"747ad1c1": "getPeriodIdx(uint256)", +"747bcd72": "SCORE_UNITARY_SLASH()", +"747c1d87": "getInvestorsAmount()", +"747cb030": "SALE_3WEEK_BONUS()", +"747d6dd0": "_getCrabPartBonuses(uint256)", +"747dff42": "getCurrentRoundInfo()", +"747e0670": "UseWish(string)", +"747f3380": "phoneNumber()", +"747fc0d2": "maxReferrals()", +"7480a676": "Cryptosquirrel()", +"74816d1e": "webGiftUnTransfer(address,address)", +"74817d9b": "startPublicSale(uint256)", +"74818530": "Creedex()", +"7481a8aa": "TokenizedSplitter(string,string,uint248)", +"7482e533": "EventLuckyNumberRevealed(address,uint256,uint256)", +"7483883d": "getOrAddMasterWallet(address)", +"74845024": "scribes_hisory_length()", +"748467b9": "callBtcWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"7486a8e3": "get_publisher(bytes32)", +"748837b2": "getIsBonusUnlockExempt(uint256,address)", +"74888914": "setHatchDurationMultiByGeneration(uint32[])", +"7488aa3c": "getNextBonusIndex()", +"7488ad7c": "minDepositInCents()", +"74891e1b": "getCoinAgeInternal(address,address,uint256)", +"7489308f": "lpTargetPosition()", +"7489472a": "step_pay()", +"748949e8": "setGalleryFourPrice(uint256)", +"7489ec23": "cancelOrder(bytes32)", +"748b659d": "pauseCollectToken()", +"748b95b6": "decimls()", +"748ce291": "addRewardforNewContributor(address,uint256,string)", +"748d071d": "seriesCreated(bytes32)", +"748d1078": "updateDukeHistory(string,bool,string,address,uint256,uint256)", +"748dd2fc": "GAME_TYPE_DICE()", +"748de225": "getFreezeAccount(address)", +"748de5d3": "UpdateAddressPayForService(address)", +"748e4f40": "sendTokensToTeam(address)", +"748ed9a8": "getTargetIncorrectDesignatedReportMarketsDivisor()", +"748efab5": "_copyToBytes(uint256,bytes,uint256)", +"748f0810": "ProposalTallied(uint256,uint256,uint256,uint256,bool)", +"748f7215": "getUnlocktime()", +"748fa599": "someUnsafeAction(address)", +"748ffa5b": "cei(uint256,uint256)", +"74900c92": "MINIMUM_ETHER_SPEND()", +"74912463": "tokenEmission()", +"74914710": "getCrySolObjectsByOwner(address)", +"7491ef60": "PrecommitmentAdded(address,uint256)", +"7492384a": "backTixOwner()", +"7493357b": "reservedOwner()", +"7493539b": "KOALAPROJECT()", +"74935f11": "PLS()", +"74942868": "rate8_end_at()", +"74942c0f": "tokens_received()", +"7494ad81": "judge(uint256,address)", +"749510d4": "BOUNTY_FUND()", +"749555cd": "toggleIsLive()", +"7495a1e4": "buyFor(string,address)", +"7497a061": "getAuthorDrawings(uint256)", +"749843ea": "setPlatinumAddress(address,address)", +"74991569": "setVestingContract(address)", +"74998f33": "Infinix()", +"749a47b7": "minPreviewInterval()", +"749aa2d9": "endRound()", +"749b7820": "canBuy(address,uint256,uint256,uint256,bytes8)", +"749be0c0": "GetTotalPot()", +"749c190b": "getHashsLength()", +"749ca1f3": "setGameOnoff(uint256)", +"749cab54": "setBlocks(uint256,uint256)", +"749db2f6": "Contract(string,string,address)", +"749dd65d": "_currentMonth2ndDayTimestamp(uint256,uint256)", +"749e8b88": "BUYPRICE()", +"749e93fc": "actualPriceDivisor()", +"749ea598": "leaders(address)", +"749f1bc3": "agendaOf(address)", +"749f9889": "changeAllowedRecipients(address,bool)", +"749fe7c4": "getPlayerEnergy(uint32)", +"74a042b5": "ClaimEthersEvent(address,uint256,uint256,uint256,uint256)", +"74a0cd8c": "getCombinedWarriors()", +"74a205d9": "ZIMBOCOIN()", +"74a25d43": "startAuction(uint256,uint256,uint256,uint64)", +"74a32dd7": "TotalAirdropRequests()", +"74a37efc": "setSalary(uint256,uint256)", +"74a3c5d5": "getVestingAmountByNow(address)", +"74a46050": "offer(address,uint256,uint256)", +"74a76649": "payTheWinner(uint256)", +"74a76816": "dividendsOf(address,bool)", +"74a7d6b9": "initNewPlayer(address,bytes)", +"74a7d77c": "sellTokensNow(uint256)", +"74a814fe": "getGeneral(uint32)", +"74a85571": "addAccount(address,uint256,bool)", +"74a8f103": "revoke(address)", +"74a93e6c": "setTokenHolder(address,address)", +"74a9446e": "_removeAllActiveTasksWithHoles(uint256,uint256)", +"74a9ced9": "createPoll(string)", +"74a9e440": "createProposal(uint256,address)", +"74aa9e2c": "PRESALE_RESERVERED_AMOUNT()", +"74aac084": "joinDelta()", +"74aaefcc": "SundaToken()", +"74ab3e4b": "updateCardStatistics(address)", +"74ac5bb4": "erc20KGS(uint8)", +"74ac6112": "HOPE()", +"74acb5d6": "isAirdrop(address)", +"74acf0b1": "communityDevelopmentWallet()", +"74ad74e9": "getMinLockedAmount(address)", +"74ae26f7": "checkReleaseAmount(address)", +"74af10cf": "setNeedToGetFree(uint256)", +"74af3ee1": "getTournamentState()", +"74b00a6c": "convertNums(uint256[])", +"74b04fa7": "setArtistAccount(bytes16,address)", +"74b10ae5": "checkWhale(uint256)", +"74b26fa1": "delegateReferralTokensBulk(address[],uint88[])", +"74b27b9b": "indexextend(address)", +"74b38531": "stopBet()", +"74b39158": "validateAttack(address,address)", +"74b3ee18": "getFlag(string)", +"74b433bd": "TOKEN_SUPPLY_MKT()", +"74b491ff": "airdropCurrentTotal()", +"74b527b0": "getMintedCounts()", +"74b5545a": "delCertAdmin(address,bytes32)", +"74b57486": "DebugContract()", +"74b58489": "setWeiMinContribution(uint256)", +"74b58ae7": "setCCH_edit_10(string)", +"74b5fb06": "_payout()", +"74b67b27": "GameCoin()", +"74b78b26": "payeth1(address,uint256)", +"74b799af": "disableEdition(uint256)", +"74b874a6": "liquidationTimestamp()", +"74b9dc6b": "assertEq9(bytes9,bytes9,bytes32)", +"74b9f229": "buyTokensPreSale()", +"74bb3cb4": "getOrderActualTotalRefundHelper(uint256,uint256)", +"74bd6261": "AdsVenture()", +"74bdb7ee": "createApprovalEvent(bool,address,address,uint256)", +"74bde311": "scheduleNewDerivativeToken(address,uint256)", +"74be3c7f": "TRONV()", +"74bfb965": "addNewProxy(address)", +"74bff257": "getCartItemInfo(address,uint256)", +"74c06f5d": "saleHasFinished()", +"74c1328a": "bytesToUInt(bytes)", +"74c13fda": "defaultToken()", +"74c1438c": "DeepGold()", +"74c166e9": "phase1MaxTokenForSale()", +"74c16b23": "registryAdmin()", +"74c1b1c9": "refundOpen()", +"74c1d7d3": "_best(address,address)", +"74c21059": "totalInvested(uint256)", +"74c272b7": "Begin(string,string)", +"74c40f2e": "dexTestTransferFrom(address,address,address,uint256)", +"74c42e5d": "setuserlevel(address)", +"74c43f26": "setFundariaBonusFundAddress(address)", +"74c57fa1": "LogTeamTokensDelivered(address,uint256)", +"74c65206": "Buy_Offer(uint256,uint256,uint256)", +"74c6bd74": "privateSaleLockEndTime()", +"74c77b52": "SetupToken(string,string,uint256,uint256,uint256,address,address,uint256)", +"74c80467": "createNewElections()", +"74c85591": "fundDepositAddress()", +"74c90d0d": "sellAllCookies()", +"74c950fb": "TOKEN_TOTALSUPPLY()", +"74c97c99": "manaToken()", +"74cad0b7": "ForTester()", +"74cb55fb": "fundsDistributor()", +"74cc991c": "getBetValue(bytes32,uint8,uint8)", +"74ccd7cc": "walletLock(address,uint256,bool,bool)", +"74ccf06f": "addParsel(uint256,uint256,address[])", +"74cd5a31": "HXTtoken()", +"74cd5c0b": "getOneWithdrawRec(uint256)", +"74ce52ce": "Kildoneum()", +"74ce9067": "isCommitPhase()", +"74ce97fe": "year3LockAddress()", +"74cf6f49": "withdrawNoLimit(address,uint256)", +"74cfa35f": "ambassadorAddressOf(address)", +"74d04f83": "addtoPrivateSale(address,address,uint256,uint256)", +"74d050fb": "cardNumbersOf(uint256)", +"74d15357": "virtualc()", +"74d16c37": "getAssetsValue()", +"74d1eb3f": "MANToken(string,string,uint256,uint256)", +"74d21ae0": "unlike(uint256)", +"74d301d6": "sizeBonus()", +"74d33745": "REAPER_INTREPID_FTL_SPEED()", +"74d3475c": "PowerofBubble()", +"74d393f0": "setValue2(uint256)", +"74d3b7cd": "LTR3Token()", +"74d42916": "IINEToken()", +"74d4ab27": "fipsRegister()", +"74d50c1c": "TOPB()", +"74d53cc2": "sendReferral(address,uint256)", +"74d55ceb": "Rhemaxcoin()", +"74d5e1ea": "setteam(address,uint256)", +"74d5f2aa": "BoxTrade()", +"74d618cb": "setTransferActive(bool)", +"74d699b6": "Sale(string,uint256,address)", +"74d6aa1f": "getOrCreateFeeWindowForForkEndTime()", +"74d76bc4": "_getGameInfoPart3(address,uint256)", +"74d88c50": "submitEthToTokenOrder(uint128,uint128)", +"74d89c47": "testUpdateNameDb()", +"74d8b268": "getGunByIdPart1(uint256)", +"74d9c2ef": "tokenTosale()", +"74da564f": "registerMeOnTokenCore(address,address,uint256,string)", +"74dacc7a": "m_attaching_enabled()", +"74daf5cc": "setValidPriceDurationInBlocks(uint256)", +"74db5b27": "totalOf(uint256[])", +"74dbe5e6": "GetSpud(address)", +"74dc1e04": "TokensDestroyed(address,uint256)", +"74dcfd37": "NotakeyVerifierForICOP(address,address)", +"74dd7be9": "setCompte_42(string)", +"74de4ec4": "addReward(uint256)", +"74de8caf": "ERC20transfer(address,uint256,bytes)", +"74de9ebb": "MintEvent(uint256,address)", +"74dfcabc": "changeFreezeTransaction(string)", +"74dff9d8": "stopCycle()", +"74e00730": "DISTRIBUTION_COMMUNITY()", +"74e048d5": "settleBetUncleMerkleProof(uint256,uint40)", +"74e09606": "setSignatureTimeout(uint256)", +"74e104d3": "BITWORKCOIN()", +"74e24367": "ownedTokensIndex(uint256)", +"74e29ee6": "deleteService(uint256)", +"74e4435f": "getUserAddress(uint256,bytes32)", +"74e4f31d": "ZJLToken()", +"74e5530d": "testHasRole()", +"74e57397": "BrandUpdated(address,address,string,bool)", +"74e59296": "MYE()", +"74e5b122": "changeGenerator(address)", +"74e5b186": "_mint(string,address)", +"74e60a48": "cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"74e7493b": "changeRate(uint256)", +"74e74f24": "rulesProposal(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"74e8288c": "SaiContest_Gaia()", +"74e861d6": "getHubAddr()", +"74e95828": "_distributeWinnerAndLandholderJackpot(uint256,uint256)", +"74e99f87": "AIWEBToken()", +"74e9e102": "GetTempStuffList(address)", +"74ea9437": "transferICOToken(address,uint256)", +"74eac2e6": "Beruqtoken()", +"74ead7b7": "unstakePrimordialTokenFrom(address,uint256,uint256)", +"74eb7c90": "withdrawSaleManagerBalances()", +"74eb936b": "ethQuantity()", +"74eb9b68": "isAccountLocked(address)", +"74ebe3ec": "isSet(address)", +"74ec8682": "walletForETH()", +"74ec89cb": "H2CToken()", +"74ecf4b5": "getWinningNumber(uint256)", +"74eead66": "SFT_PER_ETH_SECOND_EARLY_BIRD_RATE()", +"74eedd46": "fundingEndTime()", +"74ef109b": "ChinaLifeCoin(uint256,string,uint8,string)", +"74f0314f": "SECONDS_PER_DAY()", +"74f059ad": "dateDefrost()", +"74f0765a": "mintSeq(address[])", +"74f079b8": "txCounter()", +"74f12933": "devPaid()", +"74f1d6ce": "keccak(address,address,uint256)", +"74f28eaf": "_set11()", +"74f47a7a": "nextDrawTime()", +"74f519db": "setLastTimestamp(uint256,uint256)", +"74f569e7": "EriCoin()", +"74f61642": "rewardsRedeemed()", +"74f760e4": "WithdrawWinnings(uint256)", +"74f78412": "market_DeclareBid(uint256)", +"74f78437": "FD(uint256,string,uint8,string)", +"74f79c8e": "DEFROST_INITIAL_PERCENT()", +"74f8d96e": "getRevisionBlockNumber(bytes20,uint256)", +"74f8f7ac": "increaseUpdateMetadataCounter(uint256)", +"74f91b56": "setXTVNetworkContractAddress(address)", +"74fa01c9": "MilcToken()", +"74fa4874": "getResultStatus(uint256)", +"74fa98f5": "setInviteCodeFree(string)", +"74fb381a": "inject(address,address)", +"74fbbc86": "rate(uint256,uint256,string)", +"74fc27c1": "xfitcoin()", +"74fcd919": "tokenMsg()", +"74fd08cd": "whatSatoshiSays()", +"74fd6176": "removeBulk(address[])", +"74fe6dea": "nameCat(bytes5,bytes32)", +"74fe9247": "AddRevocationBounty(bytes32)", +"74fefa2c": "findEndpointByAddress(int256,address)", +"74ff2324": "requestMinimum()", +"74ff32e9": "_percUp(uint256)", +"74ff90ba": "Disbursement(address,uint256,uint256)", +"74ffdcd0": "WEI_PER_ETH()", +"75012c35": "setBonusTokenInDays(address,uint256,uint256)", +"750142e6": "totalReward()", +"7501f741": "maxMint()", +"750225d0": "completeSale(uint256)", +"750240a2": "setMaxResolvedAgonId()", +"75030996": "getServiceName(address)", +"7503af06": "Test9J()", +"7503cda7": "getLogOwnerAddr()", +"7503cda9": "thinkLength()", +"7503e1b7": "tournaments(uint256)", +"750446a3": "howManyTokensAreReservedFor(address,address)", +"750482ba": "ownersBalance()", +"75048ebd": "claimUnsold(address)", +"7504aaaf": "updateTargetedMoney(uint256)", +"750509ba": "getStateRoot(bytes,bytes32)", +"75052882": "modifyProductPrice(bytes32,uint256)", +"75056811": "accountClaimedReward(address)", +"75067219": "MAX_UCCOIN_SUPPLY()", +"75071c4c": "founderFund()", +"750732ec": "addVineyardByRegulator(string,string,uint16,uint24,uint32,uint16)", +"7507b2e5": "OVOToken()", +"7507ba39": "remit()", +"750852b3": "test_invalidThrowWithAsserts()", +"7508f147": "setOperationalReserveAddress(address)", +"75090ebf": "changeDomain(uint256,uint256,uint256,address)", +"750a687c": "GetRevealBlock(bytes32)", +"750a96ac": "_createPermission(address,address,bytes32,address)", +"750c47a1": "TOKEN_PER_ETHER()", +"750c77cb": "AccountMinterRemoved(address,address)", +"750cae6a": "enableBetting_only_Dev()", +"750cc645": "_sendToken(address,address,uint256)", +"750dd523": "getContractCreationTxOrigin()", +"750e1f59": "transfer(address,uint256,bytes1[])", +"750e443a": "voteAgainst(uint256)", +"750e75d5": "distributeJackpot(uint256)", +"750ee24a": "changeIcoEndBlock(uint256)", +"750f0acc": "withdraw(uint64)", +"750f2d81": "ChangeFreezeTime(uint256,uint256)", +"750f7daf": "hashBiometricTemplates(string,int256,string,string)", +"750fd1d1": "startTimeRefund()", +"7510a98c": "updateConfig(uint32,int256)", +"7510c5a0": "encoding_description()", +"75114bcc": "addPhrase(string)", +"7511828e": "Laxz()", +"7511ef65": "setWithdrawAddr(address)", +"7512071b": "doApprove(address)", +"75121c2c": "FCOIN1448Token(uint256,string,string,uint256)", +"751318f4": "bountyAdded()", +"7513eaa7": "HolyCoin()", +"75143ef2": "mintFinished()", +"75151f6b": "addCountryCode(uint256)", +"751559e8": "transactionfee()", +"7515b583": "exchangeCoin(uint256)", +"7515b84a": "releaseRoto(address,bytes32,uint256)", +"75160a20": "pay_royalties()", +"751634d9": "ChangeRules(uint256,uint256,uint256,uint256)", +"751686f7": "_maint_setBlockLimit(uint256)", +"75172a8b": "reserves()", +"7517b57e": "withdrawTaxEarning()", +"7517ea47": "configureSale(uint256,uint256,address,uint256,address,address,address,address)", +"751823f2": "changePartnerCoinPercentage(uint256)", +"751827ac": "setRareAddress(address,address)", +"7518af71": "VGWToken(address)", +"7518fa98": "tokensContract()", +"7519dd8e": "starsOf(uint256)", +"751a0225": "addElement(address,bytes32)", +"751a2d06": "Token_4()", +"751a9108": "balancesof(address)", +"751accd0": "executeGovernorProposal(address,uint256,bytes)", +"751c4d70": "contributeDelegated(address,uint256)", +"751ce8fb": "sendRewardBlockCDN(address,uint256)", +"751d9e65": "WALLET_FOUNDER()", +"751e1079": "compareAndApprove(address,uint256,uint256)", +"751ecea0": "FUTURE_DEVELOPMENT_POOL()", +"751ef753": "toggle(uint256)", +"751fef65": "sellUnit(uint256,uint256)", +"7520320f": "registerCustomer(address)", +"7520767f": "createNew(string)", +"7520bf60": "gas_price_max()", +"75217477": "Debit(address)", +"75218a54": "getUserReactionCount()", +"75219e4e": "transfer(address,address,uint256,bool)", +"75229e28": "lockcheck(uint256)", +"7522aff5": "rejectContract(bytes32)", +"752329ec": "retainedEarning()", +"7523a46e": "HARITECOIN()", +"75247ccb": "_calculateReward(uint256)", +"75250e85": "limitDateCrowdWeek1()", +"752551c9": "_END_DATE()", +"75257013": "appendToDistributionList(string,address,uint256,uint8)", +"7526f98c": "getMin(uint16[])", +"7527313d": "minedBlock(uint256)", +"75286211": "finalizeChange()", +"75287bab": "fetchAllResultByIndex(uint256)", +"75288d95": "platformSupply()", +"7528a6ab": "icoPhase4Start()", +"75298734": "getShare()", +"7529b1d9": "upgradeHasBegun()", +"752a3df6": "transferIfHardForked(address)", +"752b016d": "DeletePatient()", +"752bacce": "getExecPrice()", +"752bece8": "Minus(uint256,uint256)", +"752bf6f8": "sale_pause()", +"752c5628": "callSend(address,uint256)", +"752c8777": "setArenaPool(address)", +"752d2bfb": "addDividend(uint256)", +"752d349c": "depthCheck(int256,int256)", +"752da85a": "endContribution()", +"752dd0dc": "unfreezeBonuses()", +"752dd635": "ETHButton()", +"752efafc": "TIER5_RATE()", +"752f3c8c": "relinquishOwnershipAddress()", +"752faa51": "setLockedGroup(uint8,bool)", +"752fc70e": "howManyEthersToChangeSymbolName()", +"7530b54d": "PRESALE_LEVEL_3()", +"7530d99d": "addForgivedChar(string)", +"7530fe1d": "getContractMessages(uint256)", +"753117ff": "stealTheLeek()", +"7531e032": "resolveExchangeAddress()", +"75321c35": "TransferAgentSet(address,bool)", +"75321c4a": "getOpen(uint256)", +"75322e47": "change(uint256)", +"7532b4ac": "percent(uint256)", +"7532eaac": "signedTransfer(address,address,uint256,uint256,uint256,bytes,address)", +"7532ef1c": "accRecive()", +"75335702": "GSDToken()", +"753384fa": "TOKEN_BONUS_RATE()", +"7534a714": "checkExpectedTokens(address[],uint256[],uint256)", +"75355e34": "giveExchangeRateAdvice(uint256)", +"7535679a": "faucet(address,address)", +"7535927a": "importAmountForAddress(uint256,address)", +"7535c930": "priorityCap()", +"75367ab5": "addToWinners(address,uint256)", +"75383265": "TON()", +"753868e3": "lockContract()", +"753899e9": "alive()", +"7539189c": "getData_3()", +"75395a58": "finalizeBlock()", +"753af202": "SpermToken()", +"753b0dc1": "createFashion(address,uint16[9])", +"753b8c02": "EthernautsMarket(uint256)", +"753c619c": "emitTransferEvents(address,address[],uint256[])", +"753ca259": "PiXS()", +"753cb4eb": "fetchVoteNumForCandidate(address)", +"753cba93": "isPlatinumLevel(address,string)", +"753d764c": "unlistSubName(bytes32,bytes32)", +"753d93e4": "changePlatform(address)", +"753ded15": "failsOf(address)", +"753e88e5": "upgradeFrom(address,uint256)", +"753ea1be": "_transferCoins(address,address,address,uint256)", +"753ed1bd": "ceiling()", +"753f313f": "setPOOL_edit_26(string)", +"753f416a": "send1(address)", +"75401eac": "_isSaleContract()", +"7540b097": "inflateCount()", +"75421e93": "buyIcoTokens()", +"75424253": "BoughtToken(address,uint256)", +"75426ec8": "tokenFulfillmentDeposit(address[2],uint256,uint256[8],uint8,bytes32[2])", +"75428615": "getCallData(bytes32)", +"7542890d": "editIt(uint128,uint64,bytes32[],string,string,string)", +"75432ec4": "setStorageFee(uint256,address,uint256)", +"75438e49": "fillGas()", +"7543af9c": "amount3()", +"7543e3f0": "setReferral(address,address)", +"7544ac1f": "CSAToken(uint256,string,string)", +"75456b49": "fillIndexedBidByAddress(address,uint256)", +"75457583": "Return(address,address,uint256)", +"7545c449": "confirmOrderCompletionByPatient(bytes16,bool)", +"7545f9a1": "processTicketBuying(string,uint256,address)", +"7546006b": "ContractCall(address,uint256)", +"754628d0": "cancelTopUpLimit(uint256)", +"75479c34": "newPlayer()", +"7547c7a3": "stakeTokens(uint256)", +"7548014d": "recoverOnlyOnChainFunds()", +"7548f65b": "END_AMOUNT()", +"754a347a": "transferViolated(string)", +"754a77f5": "fcc()", +"754ad981": "MoveFish(uint256,uint256)", +"754b9e3d": "hashFromHash(string)", +"754c16e8": "getAmountOfProposals()", +"754c175e": "getTip()", +"754c301d": "sumOfFreezing(address)", +"754c3957": "benecifiary()", +"754c67ad": "setTokedoToken(address)", +"754d71e7": "getCurrentBuyOffer(uint32)", +"754db89b": "gameExists(bytes32)", +"754dea40": "setBackendOwner(address)", +"754e0b74": "solveDispute(bytes32,address,bool)", +"754e1764": "DiceRoll()", +"754e1e8e": "invalidateEarlyPurchase(uint256)", +"754efc98": "throwOnGasRefundFail()", +"754f579d": "ownerSetGameName(string)", +"754f9b37": "BasicAccessControl()", +"754fd352": "addOwnerFromRecovery(address,address,address)", +"75504b6e": "getAwardCost(uint256)", +"75524ffd": "mintBase()", +"75526ed5": "setServiceAccount(address,address,bool)", +"7553044b": "setUserServerPermission(address,string)", +"75543074": "getOrganisation(uint256)", +"75545949": "countMails()", +"75545cb2": "processMyVestingRules()", +"75549490": "isEarlyBird(address)", +"7554fffd": "successFee()", +"75556e32": "totalMaxBuyin()", +"7555bfd7": "exchangeAndWithdrawToken(uint256)", +"7556c9e9": "SilentNotaryToken()", +"7556e07f": "hasRate()", +"75570ea7": "closeBets(uint256)", +"7557b2ae": "Advertisement()", +"7558d81e": "contractProgress()", +"7558d9a6": "wallet_Mini_Address()", +"75593a39": "fixPrice()", +"755a11dc": "winnersPot()", +"755a29f4": "set_minCWCsPerSaleMoreThan(uint256)", +"755a8d31": "getBattleTeamSize()", +"755b5b75": "setNumUnits(uint256,uint256)", +"755b9d63": "_addOrder(address,uint64)", +"755bdcc1": "completeTrade(address)", +"755c020e": "withdrawALTokenss(address)", +"755c30a4": "earlyInvestorsBonus()", +"755cc41e": "mintTimes()", +"755d43d3": "calculateAmountReceived(uint256)", +"755d766c": "s27(bytes1)", +"755d80ab": "MintDarioToken(int256,address,int256,uint256)", +"755d98a3": "getTotalDividendPool()", +"755db762": "addVestingAddress(address,uint256)", +"755dc018": "FANBASEToken()", +"755e3e28": "tokensAllocated()", +"755f047b": "projectDescription()", +"755f12db": "totalTokensSoldInThisSale()", +"755f99c2": "AddNewSmallContract(address)", +"755fa815": "getAllIndexesByAddress(address)", +"755fd25c": "mintEditionCards(address,uint8,uint8)", +"75608264": "get_hash(uint8,bytes32)", +"7560a8d9": "_devTokens()", +"7560cab5": "createListing(bytes5,uint256,uint256)", +"75619ab5": "setDistributor(address)", +"7562b0cf": "process(address,uint256)", +"7563113b": "mintPromoEtherBro(uint16)", +"7563c81f": "WorldBetToken()", +"75640ef3": "calculateTotalMinePay(uint256,uint256)", +"75643e1f": "setReward(uint128)", +"75659508": "hasPayroll(address,address)", +"7565a2b6": "transferTokens(address,address,uint256,uint256,uint256)", +"7565d2eb": "coinfabrikAddress()", +"7565ef66": "getTodayLotteryNumber()", +"75661f4c": "calcPlayerICOPhaseKeys(uint256,uint256)", +"75662b0e": "ChainSign()", +"75669274": "XXXToken()", +"7567281d": "_addrunmoney(address,uint256,uint256)", +"75678491": "AMSBToken()", +"7568353c": "isKilled(uint256,uint8)", +"7568a9af": "claimNametagToken(address,bytes32)", +"7568d562": "AssetToken(uint256,string,string,uint8,address)", +"75698524": "UpdateUSDETHPriceAfter(uint256)", +"7569b369": "updateUnclaimedDividend()", +"7569b3d7": "contributorsCount()", +"756a288e": "getStageTokensSold(uint8)", +"756a515f": "test_insert_findNoHintUpdateTail()", +"756abb98": "timeSlicesCount()", +"756af45f": "withdrawBalance(address)", +"756afcab": "Mari()", +"756b1140": "Readings()", +"756b397a": "GainmersSALE(uint256,uint256)", +"756bae5c": "finish(bytes32,bytes32)", +"756bf6e9": "Popcore(uint256,string,uint8,string)", +"756d5e0d": "EvGroupChanged(address,uint8,uint8)", +"756dc34a": "PHASE_NUMBER()", +"756dd3a4": "getSubmission(bytes32)", +"756e15e5": "test_spamApproveAndFreeze()", +"756e8ed3": "innerGuess(uint32,uint16,uint32,address)", +"756f6049": "CORE_NAMESPACE()", +"756f7ce8": "fundariaStakesFrozen()", +"756fb8c9": "getOptionChain()", +"756feedc": "KingXChainToken()", +"75700437": "query1_withGasLimit(uint256,string,string,uint256)", +"757007f6": "CONFIG_MIN_VALUE()", +"757085e3": "fetchAllVoteResultForCurrent()", +"7570acd4": "indVesting()", +"75718e2c": "_increaseTotalDivis(uint256,uint256)", +"7571ca36": "getTerminated()", +"75724990": "addShareholder(address,uint256)", +"7572ead0": "halfyearteam()", +"7572f341": "subtractWee(uint256,uint256)", +"757387d0": "nextInListToReturn()", +"75749f52": "LOCKED_BOARD_BONUS_TOKENS()", +"757501c5": "districtsCore()", +"7575594b": "buyShip(uint16)", +"7575884d": "InTokenTest11(uint256,string,uint8,string)", +"75759319": "wthdraw(address,uint256)", +"7575db0a": "invalidateCache(bytes32)", +"7575ecf6": "validateAndLower(string)", +"75765249": "saveLottery(uint32,uint256,uint256)", +"75766294": "teamPeriodAmount()", +"757765f8": "setMaxBuyLimit(uint256)", +"75776fa4": "createPromoPony(uint256,address)", +"7577732e": "createController(address,address[],uint256)", +"75780127": "testExecuteSellOrderShouldIncreaseBuyerTokens()", +"75785afc": "createDefaultGen0CobeFriend(uint256,address,uint256,uint256)", +"757861eb": "start_play_and_gain(string,string)", +"75790787": "getFeeCollectedByAsset(address)", +"75792f0d": "_transferToICAPWithReference(bytes32,uint256,string,address)", +"75794a3c": "nextTokenId()", +"75796f76": "setWithdrawalWallet(address)", +"7579f2c9": "ArollaToken()", +"7579fcb3": "mintPackSaleCard(uint8,address)", +"757a449e": "approveWithIndex(address,uint256,uint256)", +"757a5522": "channelPartTimeout(uint64)", +"757a61b9": "buyAssetPack(address,uint256)", +"757bd312": "getCrystalWrapper(address,uint256)", +"757be78e": "PlayersStorage()", +"757ccd3b": "canCreate()", +"757d9b97": "getTradeRate(address,address)", +"757de573": "setOwnerCut(uint256)", +"757dfdcc": "SafeWalletCoin()", +"757e5e73": "_giveShares(address,uint256)", +"757f70fb": "SAMPLEToken()", +"757f7302": "updateStateChangeAgent(address,bool)", +"75806e6e": "setIssuerDelegate(address)", +"75811c15": "ownerChange(uint256,address)", +"75812019": "getBurningReward(uint256)", +"7581a8e6": "enableBurning()", +"7581aa5f": "setActivityState(bool)", +"7581d62f": "genesisProtocol()", +"75821d21": "changeTokenWallet(address)", +"75829def": "transferAdmin(address)", +"75830463": "checkBetLowhigh(uint8,address,bytes32,bytes32)", +"758357b8": "fstPrice()", +"7583902f": "getProviderInfo(address)", +"7583a523": "maxEarlyPresaleEDUSupply()", +"75846a5e": "ZoueToken()", +"75849902": "forwardPurchaseFeesTo()", +"75854fbd": "b(bool,bool)", +"75862df4": "TokenWithEStop(address)", +"75864416": "MeritToken(uint256)", +"7586cd45": "getPokemonCurrentPrice(uint256)", +"7586fcc5": "AutoCoin(string,string,uint8,uint256,uint256)", +"75872a5a": "evolveMonster(uint256,uint16)", +"75874f3e": "Divineum(uint256,string,uint8,string)", +"758822e6": "checkForValidity(string)", +"75885f6a": "approveAndCall(address,uint256,bytes1)", +"758866f0": "TOSToken()", +"7588f82b": "currentVestedAmount()", +"75892cf1": "convert(address,address,uint256,uint256)", +"75894e8c": "getEntity(address)", +"758971e8": "ownerTakeProfit(bool)", +"7589ca40": "BCV()", +"758b31df": "premiumMod()", +"758b5172": "setPlayersPerRound(uint256)", +"758befae": "tokenPresaleCap()", +"758e08d0": "Authorization(address)", +"758ed826": "addDAppContract(address)", +"758f39b8": "verifyProofOfStake(address,bytes32,uint64,uint256,bytes32[],uint256[],uint256,uint256)", +"758fabcd": "MAX_CONTRIBUTION_SLOTS()", +"759014f0": "getChallenge()", +"7591dfa0": "dmlToken()", +"759234ec": "POLE()", +"759242fd": "WorldReserveCurrency()", +"75924b95": "changeWinConfig(uint8[],uint8[])", +"7592550b": "transferHomeViaRelay(address,uint256,uint256)", +"759343d4": "sendTo(address,bytes,uint256)", +"7593473c": "set_brain(address)", +"7593ca71": "setExchangeInterval(uint256)", +"75949c13": "sendHalf(address)", +"7596732f": "MorzeF()", +"759793c1": "buyInternal(uint256,address)", +"7597eede": "isHoliday(uint256)", +"7597fd6b": "escape(uint32,int256,uint32)", +"7599609d": "getEventForHousePlaceBet(uint256)", +"7599f8d9": "private_setRandomAPIURL(string)", +"759a2753": "StakeIncreased(string,address,uint256,uint256)", +"759b2ac4": "removeRole(uint256,address,uint256)", +"759bca86": "TEMWallet()", +"759c01dc": "SonDepTrai()", +"759c676d": "removeAddressToWhitelist(address)", +"759c7a58": "setAdOwner(uint256,address)", +"759e6558": "changelp9(address)", +"759f0914": "createObject(string)", +"759f8712": "nonActivationShortWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"75a0a7a4": "generateNumberWinnerQuery()", +"75a0ff93": "BTKToken()", +"75a2b407": "createPromoFighter(uint256,uint8,uint8,uint8,uint8,address)", +"75a35191": "Travelercoin()", +"75a374ee": "transferMined(address,uint256)", +"75a3eac0": "checkExistsOwnedAngel(uint64)", +"75a4894b": "setReaderId(bytes32,bytes32)", +"75a4e3a0": "unlock(bytes4)", +"75a4ea52": "updateCandidateAddr(address,address)", +"75a52506": "display(bytes32)", +"75a53a8f": "changeTrusteeOwner()", +"75a5425a": "DTesh()", +"75a55a44": "CR7()", +"75a5b1ab": "registerDuration()", +"75a5ba80": "delegateDklSiringAuction(uint256,uint256,bytes,uint256)", +"75a66774": "stampDocument(bytes32,uint256)", +"75a6a332": "testThrowRetractNotRetractable()", +"75a6dbda": "delAdminUsrs(address)", +"75a73ed3": "createMessage(bytes32)", +"75a747dc": "_mint(address,uint256,bytes32)", +"75a75ba9": "TRANSFERS_ALLOWED()", +"75a7db40": "existenceSymbol(address)", +"75a806cd": "transferLoss(uint256,address)", +"75a88bcf": "getPreClaimTimeStamp(address)", +"75a90144": "voterExists(address)", +"75a90e02": "readisnameregistered(string)", +"75a949a3": "transferBlocToUsers()", +"75a94af5": "JadetToken()", +"75aa39bd": "getTeamScore(uint256)", +"75aa8705": "begin(bytes32)", +"75ab9782": "tokensToSend(address,address,address,uint256,bytes,bytes)", +"75ac3b08": "presaleEndBlock()", +"75ace438": "setRdCollectorAddress(address)", +"75ad319a": "makeLiquid(address)", +"75ad31a0": "vesting1Withdrawn()", +"75ad4787": "_processRefund(address,uint256)", +"75ad97bb": "_initSpaceship()", +"75ada3d3": "getLicenseReimbursement()", +"75ae267d": "setCanTransfer(bool)", +"75ae51ce": "minForceOffsetAmount()", +"75aecd8d": "ContributionAdded(uint256,address,uint256)", +"75af370f": "ChainToken()", +"75af65d1": "discounts()", +"75b03941": "retrieveGains()", +"75b0d9cd": "totalSupplyOf(uint256)", +"75b1e894": "ProposalLog(uint256)", +"75b238fc": "ADMIN_ROLE()", +"75b3a83e": "START_ICO_TIMESTAMP()", +"75b3ea8e": "calculateExcessTokens(uint256,uint256,uint256,uint256)", +"75b3f9f5": "currentRateLevel()", +"75b44aea": "getEthRate()", +"75b466d1": "sendOrderedTokens()", +"75b4d78c": "bonus()", +"75b5243d": "editBasePrice(uint256)", +"75b599c0": "changeFashionAttr(uint256,uint16[4],uint16[4],uint16)", +"75b5ec08": "DcatNetwork()", +"75b65abf": "claim(uint16,uint16,uint16,uint16)", +"75b77c4b": "PRICE_MAX()", +"75b82a66": "distributeGameDividend()", +"75b88b82": "Beebit(bytes32)", +"75b8de15": "encodeInt(int256)", +"75b8fa6f": "contractMoneyBalance()", +"75b91305": "_removeDeposits(address,uint256)", +"75b94133": "validatorReward()", +"75b975b7": "askArbitrator(address,bytes32)", +"75b99fb1": "HonestisnetworkICObalances()", +"75b9b357": "updateData(uint256,string,string)", +"75b9c384": "UpdatePay()", +"75b9fd47": "BuyAcorns()", +"75bac6fd": "getLastDeedTimestampByAddress(string)", +"75bae755": "AariTestToken()", +"75bba189": "setModerator(address)", +"75bbc15d": "isNeedDrawGame(uint256)", +"75bbc204": "addJackpotGuaranteed(uint256)", +"75bc369a": "_triggerCoolCountDown(uint256)", +"75bcf09f": "getFibo(uint256)", +"75bd3237": "listingExists(bytes32)", +"75be5846": "unlockForever()", +"75bedf12": "valueOf(uint256,uint256)", +"75bf4777": "Presale(address,uint256,uint256)", +"75bfb140": "teamInstantSent()", +"75c0ae13": "getSalaryTokenAddress(address,address,uint256)", +"75c14f7d": "buyoutAndSetReferrer(uint256,bool,uint256,uint256,address)", +"75c1b643": "setconfig(uint256,uint256,uint256)", +"75c268f3": "rateFeesDenominator()", +"75c26c3f": "closeCrowdfund()", +"75c3039c": "finalizeCapReached()", +"75c304f7": "matchable(address)", +"75c34d94": "BitcoinElena()", +"75c48942": "restrictedVault()", +"75c4a4d6": "isClaimable(int8)", +"75c4aaa6": "addUnderDog(uint256)", +"75c4e9ec": "token_reward()", +"75c589a0": "getMinimumCallCost()", +"75c5efd8": "teamFundsAddress()", +"75c66e2f": "mintTokens(uint256,uint256,address)", +"75c69e39": "SOLUSCRSToken()", +"75c7d4e1": "sellMyTokensDaddy()", +"75c81ad0": "minProfit()", +"75c8a66e": "MANHATTANPROXY7THST()", +"75c8f04b": "addTenant(address)", +"75c9c4a4": "SQUIRREL_BASE_REQ()", +"75c9ee06": "teamFrozenTokens()", +"75c9f351": "maxTokenNum()", +"75ca1fad": "setcommissionPer(uint8)", +"75ca3b2e": "getKittyInfo(uint256)", +"75cb14bc": "panicOff()", +"75cb1bd1": "setWallets(address,address,address)", +"75cb2672": "configure(address)", +"75cbe239": "rulesProposals(uint256)", +"75cc21bd": "LogInvestshare(address,uint256)", +"75cc499f": "LogTokenPurchase(address,uint256,uint256)", +"75cc90b3": "ADMINS_COUNT()", +"75cd109a": "BurnSplit(uint256)", +"75cd51ed": "accountExists(address)", +"75ce2913": "pushOwnedToken(address,uint256)", +"75ce738e": "base_token()", +"75cf567a": "TOKEN_RATE_15_PERCENT_BONUS()", +"75cf77fb": "buyPoohs()", +"75d04628": "updateMatchStartTime(uint8,uint256)", +"75d049bb": "ApplyDividentsMultiplicator()", +"75d0c0dc": "contractName()", +"75d14478": "Chi_available()", +"75d16a1e": "JaxBox()", +"75d1722d": "_cancelOrderWithPayer(string,address)", +"75d2fd7f": "setERC20compatibility(bool)", +"75d32381": "Gave(uint256,address,address,uint256,uint256)", +"75d3bda6": "Product()", +"75d4066d": "getKeccak256(string,string)", +"75d4115e": "orderSubmitter(bytes32)", +"75d427e2": "greaterHash(bytes32,bytes32)", +"75d53a73": "approveMe(address)", +"75d57f44": "Benable()", +"75d5a7c6": "torchContractBalance()", +"75d60ba1": "PayToContract()", +"75d7036b": "getOuvidoriaEnteTipo(address)", +"75d7348a": "makeReferalBonus(uint256)", +"75d74f39": "get_s()", +"75d79399": "LogNotifyOfArbitrationRequest(bytes32,address)", +"75d7e4bd": "hydroTokenAddress()", +"75d7e8ea": "canTransferIfLocked(address,uint256)", +"75d9085a": "buyCardXname(uint256,string)", +"75d91db8": "cancelAuctionByMaster(uint256)", +"75d955f7": "realWorldPlayerMetadataForPlayerTokenId(uint32)", +"75d96718": "RELEASE()", +"75d9aa1a": "migrateFromLegacyReputationToken()", +"75da33bd": "tokpereth()", +"75dbc1aa": "LiquidHome()", +"75dc6471": "getSalesCity(uint256)", +"75dc7d8c": "calcFee(uint256)", +"75dcb701": "getBonusTierCount()", +"75dcb70a": "updateEditionTokenURI(uint256,string)", +"75dd3799": "NetWexCoin()", +"75dd82b8": "setPreMineAddress(address)", +"75ddbc4e": "setBalanceOfPendingToken(address,uint256)", +"75ddfa11": "ChannelBought(string,address,address)", +"75deadfa": "endTimes()", +"75df1fe8": "lockReleaseDate1year()", +"75df9fdb": "backVISTAcoinOwner()", +"75e01780": "startExchange()", +"75e0747e": "referrerBonus1()", +"75e2f405": "product1_luckybuyTracker()", +"75e2ff65": "setMigrationAgent(address)", +"75e3661e": "unblacklist(address)", +"75e372f2": "BlocklancerDataHolder()", +"75e3921c": "ETH_VTA()", +"75e39f26": "getHeroInfo(uint256)", +"75e3e4d4": "_sendTokens(address,address,uint256)", +"75e42744": "balanceOf(address,bytes32,address)", +"75e456c3": "validInvestment()", +"75e5598c": "ACTION_KEY()", +"75e6f675": "redemptionPercentageOfDistribution()", +"75e71d6d": "beneficiaryExists(address)", +"75e87642": "getRoundBetAmount(uint256,uint256)", +"75e88e3a": "getForceOffsetBooks(address)", +"75e8b1a3": "changeWithdrawnTime(uint256)", +"75e8f289": "depositWalletAddress()", +"75e8f757": "ERC20PreICO(address)", +"75e96908": "saveLifeEvent(string,string,string)", +"75e9c91f": "dropNectar(address[],uint256[])", +"75e9e3e2": "Ldt()", +"75ea1b68": "completeDeliverable(bytes32,address,address)", +"75ec899a": "addBodyParts(uint8[])", +"75ed5604": "referralLinkRequirement()", +"75ed8f89": "tOS(address)", +"75ee1908": "whitelistManyUsers(address[])", +"75ee549c": "seteUSD(address)", +"75ee7315": "IcoPaused()", +"75ee85bd": "salsa20_8(uint256,uint256)", +"75eeadc3": "hasWon(uint256)", +"75f0a874": "marketingWallet()", +"75f12b21": "stopped()", +"75f208bf": "testFailCreateWithParentNotInUse()", +"75f289bc": "setDiscountBonus(uint256)", +"75f2e45d": "charityPayed()", +"75f33ed6": "EtherReceival(address,uint256)", +"75f40f40": "underdogPayoutFund()", +"75f41f4a": "initExchangeUser(uint256)", +"75f45878": "scheduleCall(bytes,bytes,uint256)", +"75f46563": "setVLTMultiSig(address)", +"75f6641f": "GoldBackedToken(address)", +"75f7cc4a": "PeriodStarted(uint256,uint256,uint256,uint256,uint256,uint256)", +"75f7d866": "tokenReserved2Deposit()", +"75f7e6f0": "saneIt()", +"75f829a9": "BetAccepted(uint256,uint8,address,uint256,uint256)", +"75f890ab": "setContract(address)", +"75f91ec8": "getTokenAmount()", +"75f96ead": "Guess(uint256)", +"75f9ae86": "setCertificateSigner(address,bool)", +"75f9e6da": "initialIssueMintingDate()", +"75fa1bd3": "_reserveTokens(address,uint256)", +"75fc8e3c": "goodbye()", +"75fcc6f1": "OWN_burnToken(address,uint256)", +"75fd4c23": "test_basicUnitTest()", +"75fd776a": "STRATEGIC_PARTNERS_POOL_ALLOCATION()", +"75fda973": "tokenDistributeInDividend()", +"75fe06dd": "claimXmasGift(address)", +"75fe2cb8": "setDnaExist(uint64,bool)", +"75fe2e33": "getMonsterObjId(address,uint256)", +"75ff0664": "ERC223TokenMock(address,uint256)", +"76005c26": "fulfillData(uint256,bytes32)", +"76014a2d": "senderETH(address)", +"760163af": "getLastGames()", +"76017bbd": "getRewardWei(address)", +"7603ac4b": "registerFileClosing(string,uint256,string,string)", +"7603b02d": "houseCommission()", +"76041376": "devTeamAddress()", +"76045702": "AcceptsDividendFacial(address)", +"7604b6d7": "testGetBlobStoreFromFullBlobId()", +"76052df8": "setPurchasable(bool)", +"760672df": "weiToTokensAtTime(uint256,uint256)", +"7606f781": "getMetrics()", +"7607422a": "CSCS(address)", +"76098303": "futxMiner()", +"7609c5a9": "transferFromToICAP(address,string,uint256)", +"760a221c": "LOCK_RELASE_TIME()", +"760a45cf": "lockStrategy(address)", +"760a812c": "ChangedNeighbourReward(uint256)", +"760a8c2a": "setActive()", +"760ac21b": "testFailBadTransfer()", +"760b8f62": "bonusAll()", +"760bb006": "isUser(bytes32)", +"760c1fa3": "loadX(uint8[],uint256,uint256,int256)", +"760cd8e1": "transferAgent()", +"760cfa57": "GeneratedERC20Contract()", +"760df4fe": "_isCarousal(uint256)", +"760e2cf3": "buyUpgradeCard(address,uint256,uint256)", +"760eab1a": "ZodiacCore()", +"760ee49c": "setCurrentState(bool)", +"760f7382": "shipTokens(address,uint256)", +"76102b3c": "PRICE_PRESALE_WEEK3()", +"76105fe7": "tarifOf(address)", +"7611f50d": "periodStage()", +"7612115d": "setTokenPartner(address)", +"76124dac": "vote(bytes32,uint256,address)", +"76124db7": "Update_TrustlessTransaction(uint256)", +"761390b9": "BCX()", +"76147a0e": "notification(address,uint256)", +"7614e727": "baseMineTokenAmount()", +"761522af": "TradeBits()", +"76164085": "seek(int256,int256,bool)", +"76165adf": "buy(address,address,uint256,uint256,uint256)", +"76167a89": "getMessageSender()", +"7617f814": "sumPreICO3()", +"7617fbbd": "PreOrder(address,address,address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"76190f8f": "isSiringClockAuction()", +"76192200": "finishMinting(address)", +"7619317b": "redemptionWallet()", +"76196c88": "setDnsrr(bytes32,bytes)", +"76197591": "finalizedICO()", +"7619d22e": "LEGAL_EXPENSES_2_TOKENS()", +"761a5b0e": "updateERC20rewardMultiple(uint8)", +"761a832f": "setBaseRewards(uint256,uint256)", +"761aef78": "BuyTicket()", +"761b59ac": "crabPartDataFromGene(uint256)", +"761ba894": "getPremiumMultiplier()", +"761bb70a": "train3(uint256,uint256)", +"761c1cf9": "SetupGWT(string,string,uint256,uint256,uint256,address,address,uint256)", +"761c3688": "remark2()", +"761c4524": "SHARE_TEAM()", +"761c7cfe": "resolveChallenge(uint256)", +"761d9e68": "getUserPolicy(address)", +"761dc416": "Megaton()", +"761e0d2d": "DEFAULT_MINING_BIT()", +"761e64c4": "setPI_edit_31(string)", +"761fe6fe": "totalAmountsBetStage1(uint256)", +"76207a5b": "getOrderInfo(bool,uint256,uint256)", +"7620a65b": "Publisher()", +"7620f4bb": "fipsNotaryLegacy68b4()", +"76227f3b": "burnAdminAmount(uint256)", +"76235b49": "getUUIDS(bytes32)", +"76247776": "getDirectory()", +"762506b6": "lrs(uint256)", +"7625391a": "distribute(uint256,uint256)", +"762549e0": "minThresholdUnits()", +"76266ce9": "logResources()", +"76271346": "_parent(uint8)", +"76278e7b": "limitDatePresale()", +"7627c9ad": "grantTransferRight(address)", +"7627e941": "validateOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes,uint8,bytes32,bytes32)", +"76285b5b": "_is360thDay()", +"76289f71": "setMasterAddress2(address)", +"7628e728": "PRE_ICO_TILL()", +"7629cca0": "ContractDisabled()", +"762a4f35": "updateClosingTime(uint256)", +"762a66a2": "getAuction(address,uint256)", +"762ac19d": "startICOPhaseOne()", +"762c38fd": "askQuestion(uint256,string,address,uint32,uint32,uint256)", +"762c7ab2": "setPercentForHelpCoin(uint256)", +"762ced87": "prcntRate()", +"762d739a": "vigencia()", +"762e3816": "TOURNAMENT_WALLET()", +"762ede1e": "ETHCONEarlyBirdToken()", +"762fdc0c": "getRatePlan(uint256,uint256)", +"762ffc42": "VanityReserved(address,string)", +"76305a89": "CoinCrowdICO(address,uint256,uint256)", +"763091ff": "initCreator(uint256)", +"76309e70": "CTT()", +"7630ad34": "getInfoD(uint256)", +"76319190": "removeSupportedToken(address)", +"76323253": "createRounds(uint256)", +"76324597": "dropStart()", +"763250e1": "GizerToken()", +"763265de": "setMaxCap(uint256)", +"7632b18b": "WICCrowdsale(address,uint256,uint256,uint256,address,address)", +"76338028": "functionCalls(bytes32)", +"763430b8": "mFUNDING_SALE_TIMESTAMP()", +"7634d45d": "titlesSold(address)", +"7634ecc0": "debitEqually(address[],uint256)", +"7634ed39": "saveNewAnchor(bytes32)", +"763542ce": "BucketBuy(bytes32,uint256,address,uint256)", +"7635761b": "getusersCount()", +"7635e1de": "changeTokenManager(address)", +"7635e409": "createZombie(uint8,bytes32,uint16,bool,address)", +"763730bd": "whitelistAddresses(address[],uint256,bool)", +"76375c5c": "splitterContract(address,uint256)", +"763770d2": "getTokensManual(address,address)", +"7637a12e": "GoldmintMigration(address,address)", +"7637da03": "MINER_STARTING_PRICE()", +"76385f2a": "PeriodOfAccount(address,uint256)", +"76389260": "EthlanceSearchFreelancers(address)", +"76390144": "getCorrectedStats(uint256)", +"76399bc6": "getFoundtionAddres()", +"763a6390": "setWeightLostPartLimit(uint8)", +"763a666a": "withdrawLiquidityPoolTokens(address,uint256)", +"763a738c": "allNames()", +"763ac589": "createStake(address,address,uint256,uint256,bytes)", +"763add8f": "KPCS(address)", +"763b144e": "EmpireCrowdsale(uint256,uint256,address,uint256,uint256,uint256)", +"763cbde0": "_addPassportLogic(string,address)", +"763cf9aa": "feed100(uint256)", +"763d2500": "getTotalNbOwners(uint256)", +"763e29ad": "CherishToken()", +"763f337e": "setAllowReferral(bool)", +"763f4011": "mintMarketing(address,uint256)", +"763fd2ab": "TOTAL_PRESALE_TOKENS()", +"763ffcec": "setupDisbursement(address,uint256,uint256)", +"7640304d": "_lastSnapshotId(address)", +"76405122": "buyImplementation(address,bytes32,uint256,uint8,bytes32,bytes32)", +"76418809": "private_withdrawBankFunds(address)", +"7641a8c6": "SetFinalBlock(uint256)", +"7641e6f3": "burn(uint256,string)", +"76421887": "OWNER_LOCK_BLOCKS()", +"7642249c": "mintadd()", +"76429844": "MultiSendToken()", +"7642dc0f": "calcVesting(address)", +"764300bf": "ALLOC_MARKETING()", +"764358e6": "logSweep(address,address,uint256)", +"764423a4": "buyerAddressTransfer(uint256,address,address,address)", +"764499e5": "GamePlayed(bytes32,bytes32)", +"7644d361": "hashMessage(string,string,string,uint16,string)", +"7644ecbf": "BallotO(address[],uint256[])", +"76456887": "startSecondPhase()", +"76466d42": "setAllowedContract(address,address)", +"7648c929": "returnRemainingEther()", +"7648f99b": "ProposalSubmitted(uint256,uint256,address,uint256,uint256,string,address,uint256,uint256)", +"764912ef": "totalTokenCount()", +"76495ce7": "tokensFor1EthP4()", +"76496e34": "earlyCommunitySupply()", +"764ab11b": "WalletV2(address,address)", +"764b08c3": "STATS_SIZE()", +"764c499b": "contract_terminated()", +"764c6dd3": "voteToFreeze(address)", +"764c86bd": "totalDistanceRun()", +"764c8e54": "depositBoth(uint256)", +"764c92f2": "trustedOrderTransfer(address,address,uint256)", +"764c98c1": "getIntArrayDynamic()", +"764c9d32": "sleepContract()", +"764d1e04": "getFreelancerParams()", +"764d9969": "XubiToken()", +"764e50eb": "priceUpdated(uint256,uint256,string)", +"764e5cd9": "getSkills(address,uint256)", +"764e971f": "add(uint256,bytes32)", +"764ea3fe": "walletEhterCrowdsale()", +"764f3aa8": "getTokenBalances(address)", +"764fe7d1": "totalMiners()", +"76520713": "setLock(string,bool)", +"7652ce3b": "getRoot(uint64,bytes)", +"7653740f": "addCbAddress(address,bytes1,bytes)", +"765388ae": "createCrab(uint256,uint256,uint256,uint256,bool)", +"7653d31c": "_clearQueue()", +"7653f795": "CarTaxiIco(address,address)", +"7655e825": "unsafeWriteUint8(uint256,uint8)", +"765718d7": "register(uint256,bytes)", +"76577eae": "distributeEarnings()", +"76586bcb": "doWithdrawal(address,uint256)", +"76587847": "buyDepots(uint256)", +"76587921": "transferFromWithNarrative(address,address,uint256,string)", +"7658c574": "setQuantityFactor(uint256)", +"7658d5ef": "totalICO()", +"76596a1a": "hasTeamMember(address)", +"7659de23": "snapshotBlockHeight()", +"7659fd71": "BitcoinProtocol()", +"765aa39e": "startMulti()", +"765af8bf": "getNumArtworksXType()", +"765b1766": "tryFinishInterface(address)", +"765b59d2": "getStatus(uint256,address,address)", +"765b8dee": "transferStep2(address)", +"765bfac6": "setEscuela(uint256)", +"765c9c7f": "bionic()", +"765dd7a0": "addTeamAddress(address)", +"765e0159": "getNext(address)", +"765f09f2": "GetCurrencyInformation(uint256)", +"7660473a": "EconomyTaxed(string,string,string,string,string)", +"7661129e": "updatePromoEthCommission(uint256)", +"76617156": "burnAmountAllowed(address)", +"7662850d": "init(uint256,uint256,uint256,uint256)", +"7662c9a7": "GetAskSeries(address)", +"7663265c": "_setGameSettings()", +"7663680e": "setTotalBurntCoins(uint256)", +"76636e73": "PREICO_BONUS()", +"76637dcd": "WhoIsTheContractMaster()", +"7663f171": "getCardIndexOfOwner(address,address)", +"7663f228": "testBurnThis()", +"7663f822": "exists(address,address)", +"76640648": "payforRefund()", +"7665f6a7": "setTransferOwnership(bool)", +"7666ee8f": "addCustomerToRegistry(address)", +"76671808": "currentEpoch()", +"766719f0": "optInXferGas()", +"766954b4": "hashString(string)", +"7669c0c4": "showPhaseCount()", +"766a3f2e": "Security_ConnectBankAccountToNewOwnerAddress(uint32,string)", +"766a5f09": "setSalesPool(address)", +"766b0823": "addWhiteBackersByList(address[])", +"766b1818": "PYCToken()", +"766bd930": "Duanwu()", +"766d30aa": "setDefaultRecommAddr(address)", +"766d5235": "isOpening()", +"766d8365": "resetRoundStartTime(uint256)", +"766e33f4": "releaseStart()", +"766e4f2c": "issueTokensToUser(address,uint256)", +"766e866c": "setMaxGasRefund(uint256)", +"766e8b27": "tokensaleTokensPerEtherNow()", +"76703ef1": "AVIU()", +"767180d0": "impl_purchase(address,bool,bool)", +"767392b3": "equal(bool,bool,string)", +"7673faf0": "wallet4()", +"76740de0": "isPlayer()", +"767418b0": "alterBalance(uint256)", +"76745dbb": "increaseTotalStake(uint256)", +"76748f2a": "default_price()", +"7674cee3": "paymentMin()", +"76753b04": "ledgerUserBetContribution(address)", +"76775c10": "addReferrer(address,uint256)", +"76779829": "randomC()", +"767800de": "addr()", +"7678369a": "dayfund(address)", +"7678473d": "BTCDOGE(uint256)", +"7678f8bb": "getBid(int256)", +"76792ad9": "setDaily()", +"76793f47": "kwhFund()", +"7679a816": "handleFund()", +"767a11ca": "verifiedAttributes(address)", +"767a99ee": "legalContract()", +"767b6190": "constructor(uint256)", +"767b79ed": "register(string,uint8)", +"767bc136": "cards_titanium_total()", +"767bcab5": "setRandomizer(address)", +"767c732e": "enterBidForCollectible(uint256,uint256,int256)", +"767c9d18": "getMigrateInAttoTokensValue()", +"767d65ba": "ASEChain()", +"767eb651": "getRemainingAmount(address,address)", +"767eb8ad": "isValidName(bytes16)", +"767f0215": "MAIN_SALE_BONUS_PERCENTAGE_PHASE3()", +"767f61ac": "putTitle(bytes32,string,bytes32,bytes32,bool,string)", +"767f7b01": "User(string,address)", +"767fa723": "getPresaleInfo()", +"767fb1c4": "RecoverableController(address,address,uint256,uint256)", +"76809973": "BeneficiaryChanged(address,address)", +"76809ce3": "decimal()", +"76814692": "BusToken()", +"76823637": "startNewTurn()", +"768255ca": "TokitRegistry(address)", +"7682e6ff": "getTrustSetting(address)", +"768356c1": "TUI_ADDRESS()", +"768433c2": "topFab()", +"76849376": "addNode(bytes32,address)", +"768549aa": "KpopItem()", +"76855764": "enableSudo(bool)", +"76858faf": "ViralToken()", +"7685e1df": "NPTToken(address)", +"7686136a": "updateCourseRate(address,uint256)", +"76865eea": "unHalt()", +"7686cea9": "etap()", +"76884153": "AirTransfer(address[],uint256,address)", +"76888a3e": "TheTokenF()", +"76890c58": "transferOut(address,uint256)", +"76894bd9": "tokensToEthereum(uint256,uint256)", +"76897b90": "setReserved(uint8,uint8)", +"768a3326": "myxTest()", +"768a3a7d": "GetSender()", +"768aa331": "addHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[])", +"768afcec": "buyKeys(uint256,string,string)", +"768b4ce0": "updateWorldScore(uint256,uint256)", +"768bd5cd": "THULYA()", +"768c326d": "validatePhaseDates(uint256,uint256)", +"768c9af4": "Approval(address,address,bytes32,bool)", +"768e7220": "ownerLockedBalance()", +"768f930d": "checkSignersByAddress(bytes32,uint256,uint256,uint256)", +"76907bc7": "setCoinBalance(address,uint256)", +"7690bee4": "NextGenHyip()", +"7690ed70": "_changeLockDate(uint256)", +"7691471c": "PRE_SALE_TOKEN_CAP()", +"76917b68": "updateMC(uint256)", +"76918f5d": "setAdPriceMultiple(uint256)", +"76922f78": "auctusPreSaleAddress()", +"7692ac94": "createEtherMonster(uint256,uint256,uint256)", +"7692ba9a": "claimOwnership(string,string,uint256,uint256)", +"7692c4d8": "testCantFinalizeNotEndedSale()", +"7693488b": "finalizeTokenSale()", +"76937a3f": "airDropCustom(address[],uint256[])", +"7694df16": "scaledRemainder()", +"76959b6a": "hasSDC(address,address,uint256)", +"7695be1d": "DaleOR()", +"7695d79b": "nftTokenCount()", +"769643bc": "reclaimTokenOwnership()", +"76965867": "getStakedBalance()", +"7696c042": "secondsPerMonth()", +"7696cf52": "bonusFirstWeekPeriod()", +"7696f0db": "frozenCellCount(address)", +"769794dd": "TildeCoin()", +"769796fe": "resetAction(uint256)", +"7698da24": "affirmationsSigned(bytes32)", +"76992d7c": "SettingsChanged(uint256,uint256,uint8,uint8,uint8,uint8,bool)", +"769988b3": "p_update_mEmpireScoreMultiplier(uint256)", +"76999896": "KingOfTheEtherThrone()", +"769af180": "EGGS_TO_HATCH_1BAT()", +"769bf742": "unregisterRecord(bytes32)", +"769c9226": "setLockAll(bool)", +"769db61d": "addNewCard(uint256)", +"769dc523": "GetCategoryNumber(bytes4)", +"769e86cd": "getMyAccountBalance()", +"769edf6a": "createHash(uint256,address)", +"769f194f": "FOUNDERS_TOKENS_VESTED_2()", +"769ffb7d": "setDirectMintAgent(address)", +"76a04af5": "CompensateChips(address,uint32[])", +"76a133ca": "KabirTestToken2()", +"76a24f25": "originalPrice()", +"76a25c5c": "calculateReward(uint256,uint256,uint8)", +"76a310a5": "addAuction(uint32,uint256,uint256,uint8,uint32)", +"76a327fc": "hitMobster(uint256,uint256)", +"76a3f9c9": "addToWinningsArray(uint256,address)", +"76a43abc": "_createPony(uint256,uint256,uint256,uint256,address,uint16)", +"76a4a44d": "AssignGGEPoolOwner(address)", +"76a54c60": "sendEth(address)", +"76a5b431": "removeTip(address,bytes32)", +"76a5b5b9": "LogTransfer(address,address,uint256,bytes)", +"76a64cbf": "BasicToken(string,string,uint256,uint256)", +"76a6676a": "IssuerTransferred(uint256,address)", +"76a67a51": "pause(address)", +"76a684de": "denyAllowanceProxyAccess(address)", +"76a6bf52": "isExecuted(uint256)", +"76a766f7": "Dashgold()", +"76a85d54": "setExchangePrice(int256)", +"76a8bc10": "setExpiry(address,uint256)", +"76aa2f74": "increaseJackpot()", +"76aad651": "paymentSupply()", +"76ab5ea6": "changeDifficultyAndPrice(uint256,uint256)", +"76aba714": "refundMany(uint256,uint256)", +"76abc03b": "getShareDistribution(uint256)", +"76ac2323": "WinkSale(uint256,uint256,uint256,address)", +"76acb5e8": "BuyTicket(uint256)", +"76acb968": "TESTTOKEN1()", +"76ad3abf": "unregisterTraderAccount(address)", +"76ae684d": "setSaleOngoing(bool)", +"76aed2e1": "getTokenType(uint256)", +"76aef5e0": "doubleSend(uint256,address)", +"76af7837": "Loss(address,uint8,uint256)", +"76af9a1a": "balancePreSale4()", +"76b07186": "isPass(address)", +"76b088a9": "check_lock(address,address)", +"76b1514f": "getMaxFreeTeams()", +"76b15836": "changeStatusModerator(address,bool)", +"76b18618": "changeUnitsOneEthCanBuy(uint256)", +"76b1f3d3": "grantAccessToAddress(address)", +"76b3131e": "createvillage()", +"76b33367": "refundsIssued()", +"76b34d2f": "changeCrowdsale(bool)", +"76b39cf9": "activateInTestMode()", +"76b3c8a8": "getLotteryInfo(uint256)", +"76b547b8": "AthaYOGAToken(address,address)", +"76b5d926": "unreserve(uint256)", +"76b63576": "mintFounderTokens()", +"76b69d77": "apiRegistryContractAddress()", +"76b707b7": "getRelease()", +"76b95761": "setVestingStartDateTime(uint256)", +"76ba242c": "bonusTokens()", +"76ba6009": "approveRequest(bytes32)", +"76babef7": "Puzzled(address,bytes32,bytes32)", +"76bc21d9": "fireEventLog2Anonym()", +"76bc522c": "getZIndex(uint16)", +"76bd28bf": "ORNETCOIN()", +"76bd4220": "depositBank()", +"76bd4d2d": "submitProblem(uint256)", +"76bd5f3c": "changeMintedCappedIdx(address)", +"76be0b89": "HIROTOKEN()", +"76be166c": "toAsciiString()", +"76be6c24": "mintLVE(address,uint256,uint256)", +"76bef6b4": "getOneByOneRootHash(uint256)", +"76bf2392": "getCurrentDisplacement()", +"76bf8044": "pledge(bytes32)", +"76bf9f57": "wildcardCount()", +"76bfa5f6": "ProvideSale(address,address)", +"76bfba0e": "splitPay(address[],uint256)", +"76bfba56": "depositForDividend(uint256)", +"76c158cf": "minBankerEther()", +"76c2c0aa": "oresLeft()", +"76c2c296": "SYSTEM_CREATION_LIMIT()", +"76c2f9e7": "HitToken(string,string,uint8,uint256,address,address,address,address)", +"76c30794": "mint0(address,uint256)", +"76c390fe": "Display()", +"76c3b445": "calculateTotalTokenPerContribution(uint256)", +"76c44a80": "openIEOStarted()", +"76c46a70": "changeUnitUserBalanceLimit(uint256)", +"76c535ae": "isExpert(address)", +"76c6c685": "assertItDoesntThrow(string)", +"76c6dc8b": "isPosBitOne(uint256,uint256)", +"76c6fc9a": "checkOwnerShare(address)", +"76c70431": "CRCToken()", +"76c75958": "startCrowdsale(uint256,uint256,uint256,address)", +"76c7a3c7": "MIN_FEE()", +"76c7b434": "developersCut()", +"76c7fc55": "removeBorrower(address)", +"76c82e92": "minAcceptedAmountPresale()", +"76c87548": "scoreBracket(address)", +"76ca0225": "initTwo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"76ca0c77": "scheduleCall(address,bytes,uint256,bytes,uint256)", +"76ca9e48": "indexPaidBonus()", +"76cb69e9": "KOIN(uint256,string,uint8,string)", +"76cb6f9b": "removeOffChainAddress(address,address)", +"76cba420": "stcOrginalBuy(uint256)", +"76cc1c5c": "landManagement()", +"76ccb1fe": "getSpinOutput(uint256,address,uint256)", +"76cce072": "setBlance(address,address,uint256)", +"76ccf063": "calSimpleRoom(uint256,uint256,uint256,bytes32)", +"76cd005d": "distillGodOwner()", +"76cd470c": "getCurrentAccountingPeriodId()", +"76cd7cbc": "sign(bytes)", +"76cd940e": "currentBatch()", +"76cdb03b": "bank()", +"76cfc366": "depositOffchain(address,uint256,uint256,bytes)", +"76d06add": "issueTokensWithCustomBonus(address,uint256,uint256,uint256)", +"76d0998f": "Odin2(address)", +"76d173a9": "addressAndBalance(address)", +"76d1d35e": "numberOwners()", +"76d260bb": "setInitialVaribles(address,address)", +"76d2d717": "GetFreeTokens()", +"76d33951": "bid(string,address)", +"76d380cb": "IrisTokenPrivatSale()", +"76d438b0": "sendReward(uint256,uint256)", +"76d47bf5": "unlockAddress(address,address)", +"76d57aad": "amountInLock(address,uint256)", +"76d57ad3": "getMixerInfo(bytes32,uint256)", +"76d60a91": "TokensMinted(address,uint256,uint8)", +"76d66f5d": "_Transfer(address,address,bytes32)", +"76d690bb": "BountyList()", +"76d6c296": "getPresale1()", +"76d6da67": "TokenMintingEnabled(address,bool)", +"76d738d9": "DAZToken()", +"76d75952": "getLabelType()", +"76d76b9d": "marketRegisterCost()", +"76d83cb3": "getTerminalCount()", +"76d865dd": "addAdminOwners(address,string,string)", +"76d8f03e": "getBonusCount()", +"76d92428": "setGatekeeperAddress(address)", +"76da5667": "admin_kill()", +"76dad223": "showNumber()", +"76db2e84": "setMinimumEtherAmount(uint256)", +"76db6c8d": "isRedeemable(address)", +"76db76f1": "clearNextPrizeTime()", +"76db7fd4": "setExchangeFlag(bool)", +"76db9b14": "CXTCContract()", +"76dbd108": "calculateProof(string)", +"76dc4c0a": "isFundRequestToken()", +"76dc6643": "threeHotHoursCapInWei()", +"76dc74cb": "sendHoldComisions()", +"76dc76e7": "getUserNumbersOnToken(address,uint256)", +"76dc97d9": "_saveMessage(uint256,uint256,address,string)", +"76dd1f86": "totalMintLimit()", +"76ddfc39": "MIN_HARD_CAP()", +"76de03d0": "weiTotalRefunded()", +"76de1684": "generateOrderByMerchantWithPayee(address,address,uint256,string,string,string)", +"76dffa4e": "MedCann()", +"76e00ed7": "_fromNanoNIL(uint256)", +"76e0f978": "navAdmin()", +"76e20e53": "getMyBets(uint256)", +"76e277c1": "ChickenFarm()", +"76e29114": "nfsPoolCount()", +"76e2bbc7": "paymentInternal(bytes32,uint256[])", +"76e403ec": "balancesLocked1Y(address)", +"76e40c9c": "lendEther()", +"76e44ed8": "lockAll()", +"76e4660c": "getSumAmountOfDisputedStepsProPatient()", +"76e4ca0d": "voteQuorum(uint256,bool)", +"76e4f921": "parachute()", +"76e51e96": "TokenModuleManager()", +"76e53221": "participationCaps(address)", +"76e55338": "mytest()", +"76e57d4b": "withdrawalAddressFixed()", +"76e5c0ca": "WineryOperations()", +"76e608c7": "buyExistFactory(uint256)", +"76e6d2b4": "unLock(address)", +"76e6dbc7": "tokenBaseRate()", +"76e702ee": "tokenDeliveryDue()", +"76e71dd8": "delegateTotalSupply()", +"76e7430e": "finally(address)", +"76e75e05": "getPurchaseRecord(address)", +"76e7b151": "GOFCoin(uint256)", +"76e83bcb": "listModule(uint256,bytes32,bytes32,string,bytes4)", +"76e92559": "totalMembers()", +"76e93db5": "totalMaxBuy()", +"76e9d4fb": "Hybrid(uint256,string,uint8,string)", +"76ea1c6a": "BuyOnSecondaryMarket(uint32)", +"76ea430a": "STAGE1_TIME_END()", +"76ea909d": "indSale()", +"76eaef99": "CatOffered(uint256,uint256,address)", +"76eb5ce0": "END_PREICO_TIMESTAMP()", +"76ec477d": "cancelGame(uint256,string,uint256)", +"76edb1b5": "ReleaseUpdate(uint256,uint256,uint256,string)", +"76edc29d": "TelegramOpenNetwork()", +"76ee2d68": "lokedMint(address,uint256,uint256)", +"76ee3a87": "mainICOStartTime()", +"76ef5d14": "divX(uint256)", +"76f10ad0": "getSnapshot(uint256)", +"76f14c98": "personalizeSquare(uint256,bytes,string,string)", +"76f187ab": "tokensTransferredToHold()", +"76f1dbd4": "Authenticate(address)", +"76f28a4f": "setMarket1(address)", +"76f2a59a": "instantMint(address,uint256)", +"76f2a94b": "acceptWithdrawals(uint256[],uint256[],uint256[])", +"76f30ca1": "toContentID(address,uint256,string,bytes)", +"76f31513": "decreseApproval(address,uint256)", +"76f3264b": "getProviderSupply(uint256,uint256)", +"76f36dec": "ETHC(uint256,string,uint8,string)", +"76f39b28": "SetMaxAllowedBetInTokens(uint256)", +"76f4d8ad": "exchangePlayerTokenCount()", +"76f6218a": "promoBonus()", +"76f660f6": "batchTransferFrom(address,address[],uint256)", +"76f6de69": "RTCCOINERC20(uint256,string,string)", +"76f70900": "oraclesCount()", +"76f75e7f": "orderList(uint256)", +"76f7c522": "hasOneStepWithdraw()", +"76f86e18": "order_buy(address,uint256)", +"76f88781": "pow2Constant()", +"76f9378d": "getWords(uint256)", +"76f95818": "stopFlagOn()", +"76f9b8d9": "getTokenInfoSignatures()", +"76f9e018": "greedIsGood(address,uint256)", +"76f9fd38": "castVote(string,uint16)", +"76fb7c72": "setAllowedAgentsForOtherSource(address,bool)", +"76fc53c0": "extDistributeBondFund()", +"76fd7951": "MacoTestCoin()", +"76fd7b11": "requestWeiPrice(string)", +"76fe192a": "forceResetPeriod()", +"76fe3efa": "itemNameAddress(uint256)", +"76fe47eb": "returnBooleanInverted(bool)", +"76fe8228": "getHorseSex(uint256)", +"76fede7a": "get_term_deposit_end_date(address)", +"76fee774": "getNewPetCard(uint8)", +"76fee8e0": "MineBlocksAddr()", +"76ff1d24": "MailhustleCrowdsale()", +"76ff87cc": "VYRAL_REWARDS()", +"76ffb887": "failure()", +"77002fcf": "getBadge(bytes32)", +"77009c5c": "EYCryptoTradingGOLD()", +"7701c52d": "withdrawMarginPreSignedHashing(address,address,uint256,uint256,uint256,uint256)", +"7701f361": "test_newProposalAndNotEnoughVotes()", +"7702b8e4": "confirmOneSell()", +"770342ee": "ChannelClosed(address,uint256)", +"7704533d": "arbitrationWallet()", +"77049457": "median()", +"770506c1": "withdrawMobileAppCoin(address)", +"7705b6f4": "claimBoard(uint256[81])", +"7706390b": "handover(uint256,address)", +"77073437": "alicoinToken()", +"77076855": "isInOpenMakeOrder(address)", +"77079f55": "YohoToken()", +"7707c69a": "set_sale_owner(address,address,bool)", +"7707e2b2": "withdrawHoldVault(uint256)", +"770850c8": "accountIndexOf(address)", +"770864ad": "addOpenMakeOrder(address,address,uint256)", +"77086d94": "addSpaces(uint256[],uint256[],bytes)", +"7708b441": "founderWithdrawablePhase2()", +"7708e321": "setaddress(address,address)", +"7708e43b": "getNumBets(uint256)", +"7708ea1d": "ROLE_CEO()", +"77097bfa": "testerReentrant()", +"77097fc8": "mint(uint256,string)", +"7709bc78": "contractExists(address)", +"7709c0d3": "setMaxWhitelists(uint256)", +"770a4265": "updatePrizeDist(uint8,uint8,uint8,uint8,uint8)", +"770ae2af": "setMinAllowedBetInEth(uint256)", +"770b210e": "canBuyLimit()", +"770b5414": "getCurrentData()", +"770b80b6": "returnBalanseToTarget()", +"770b8aab": "RecoveryModeActivated()", +"770bb9ae": "_createDrawings(bytes32,bytes32,address,string)", +"770c59b8": "purchaseParrot(uint256)", +"770c6bde": "removeItemLendingList(address,uint256)", +"770c6cbb": "WithDrawPreForkChildDAO()", +"770cde1b": "ContractExample(string)", +"770d64c6": "LogLate(address,uint256,uint256)", +"770d6591": "_setArmorValue8(uint256)", +"770d8e79": "ADDR_TKG_TEAM()", +"770e3106": "getAccountsCount()", +"770e9e85": "takeTheTorch(address)", +"770eaebe": "Send_Data(address,uint16)", +"770eb5bb": "set_label(bytes12,bytes32)", +"770f75b7": "fireCancelProposalEvent(address,uint256)", +"770f9feb": "clyckterium()", +"770fe154": "ApplyVote()", +"77109b05": "depositEther(address[2],uint256[7],uint8,bytes32[2])", +"7710f29f": "setupPeriodForICO(uint256,uint256)", +"77115c9d": "seedRoundEndTime()", +"771282f6": "currentSupply()", +"77129790": "Crowdsale(address,address,uint256,uint256,uint256)", +"7712acd2": "getABname(uint256)", +"7712c870": "slammerTime()", +"7713b431": "getContactsLength()", +"7713ba04": "setPI_edit_11(string)", +"77146255": "_nextTokenId(uint256)", +"771548e2": "moveAccount(bytes32,bytes32)", +"771602f7": "add(uint256,uint256)", +"77169fbd": "gainsOfVault(uint256,address)", +"7717403b": "ALLOC_CROWDSALE()", +"7718238f": "addFee(address,uint256)", +"7718ce93": "player5()", +"7719f57e": "Seedex420(uint256,string,uint8,string)", +"771a2af4": "getCitationRecordsLength(string)", +"771a3a1d": "taxRate()", +"771acf31": "fluffyCatCut()", +"771ad078": "BuyGenesis(address,address)", +"771ad635": "getContentCred(address,uint256)", +"771c04ae": "ARCToken(address,uint256,uint256)", +"771c288b": "next_stone_id()", +"771c3ec7": "setVendingAttachedState(uint256,uint256)", +"771c7ad1": "hotwalletAddress()", +"771cbe3d": "_mintCard(uint8,address)", +"771ce552": "readownerXname(string)", +"771d7b47": "finishedMigration()", +"771d9d05": "ecosystemAllocated()", +"771e4326": "wingsETHRewards()", +"771eee16": "freezeToken(bool)", +"771feb74": "getPrecious(uint256)", +"771ff086": "allocatenonCSTokens(address,uint256)", +"7720295a": "STARTING_CLAIM_PRICE_WEI()", +"7720e74c": "changeSaleEnd(uint256,uint256)", +"77215c8d": "getObserverCount()", +"772199a1": "getJob(address,uint256)", +"77226237": "isCompetitionAllowed(address)", +"77228659": "query2(uint256,string,string,string)", +"7722d01f": "TokenChanger(address,address)", +"77231e6c": "tokens_sold()", +"77233e90": "setTo(address)", +"7723e2f3": "ArtToken()", +"77241a5f": "makerDaoContract()", +"77248e3d": "claimReservedTokens()", +"7724bdbf": "setStatusInternal(address,uint8)", +"772506bb": "jackpotFraction()", +"77253984": "DPToken(uint256,string,string)", +"7725686f": "thawGlobalTransfers()", +"7726a59a": "WINNER_COUNTRY_CODE()", +"7726bed3": "setEnable(bool)", +"7727c9ad": "changeMinStake(bytes32,uint256)", +"77282b70": "polymathRegistry()", +"7728579a": "isIcoFinalized()", +"77287520": "donate(string,address,string,int256)", +"77289b50": "setMedium(uint8)", +"7728c75a": "LoanRepaid(address,address,uint256,string)", +"7728f48b": "destroyRobot(uint256)", +"772a3835": "customerExchangeFiat(uint256,address,string)", +"772b7a73": "getTxOrigMcwTransfer(bytes32)", +"772bcc79": "DexAgeTest()", +"772c1863": "increaseStellarBalance(uint256)", +"772c658b": "getVIPBounusRate(address)", +"772cb26b": "isStringEq(string,string)", +"772ce10b": "setFuelDestination(address)", +"772e1c6f": "getTrustValue(uint256)", +"772e6f03": "votingProposal(string,bytes32,uint256)", +"772fdcb1": "isContributorInLists(address)", +"77300338": "setActiveTimes(uint256[],uint256[])", +"773041ce": "setInvestor(address)", +"77312cdc": "setMultiETH(address[],uint256[])", +"773183e3": "buyEmptyLocation(uint256)", +"7731cd2a": "Acc(address)", +"7732b2a4": "getNextCrystalReward(address)", +"7732b322": "PinMoCrown()", +"773355bf": "script(bytes)", +"77337d37": "tstart()", +"7733f24f": "ratePreSaleStage()", +"77343408": "setURL(string)", +"7734da3c": "NewPassContractor(address,address,address,address)", +"7734e398": "setFirstBonus(uint256)", +"773531f3": "tokenOwnerBurner()", +"77364291": "taskInfo(uint256)", +"773721b3": "receivedCWCreturn(address,uint256)", +"77372213": "setName(bytes32,string)", +"77381082": "Virtonomi()", +"77390f8b": "_envelopes(string,address)", +"773984dd": "closeIt()", +"7739ad70": "markAsScam(address)", +"773a1154": "generateRandomNumber()", +"773a8597": "HashTokenAward(uint256,string,string)", +"773adc70": "getAllowedStepAmount()", +"773b5b5e": "maxUpdates()", +"773b82a3": "addPerson(bytes32,bytes32,uint256)", +"773b90db": "_lotteryCardNoSend(uint256)", +"773c3f50": "DPPToken()", +"773c5049": "solvency()", +"773c84ee": "exec(address,bytes,uint256,uint256)", +"773d33f5": "transferAndCallback(address,uint256,bytes)", +"773da57d": "DGZTokensWithdraw(address,uint256)", +"773dcb98": "startTransfers()", +"773dfb86": "_extendRound()", +"773e04a9": "log2Ceiling(int256)", +"773e1e84": "fight(uint32,uint16)", +"773e236b": "createLockbox(string,address,uint256,uint256,string,string,string,address[],string)", +"773e8b0f": "testDAO()", +"773ee5a3": "execute_transfer()", +"773eef36": "stopRefund()", +"773ef1cf": "saleOn()", +"773ef38e": "PRICE_RATE_SECOND()", +"773f4873": "Ecopay()", +"773f5edc": "guess(uint256,string)", +"773f7665": "processVIPBenefit(address,uint256)", +"773ff502": "LogMake(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"7740f667": "mtStartTime()", +"77410c03": "adminLockdown()", +"774120fa": "merge(address)", +"77413267": "getAuctionByTokenId(uint256)", +"774190dd": "showUserPoolAddresses(address)", +"7741ad4e": "play_game(uint8)", +"7741b4ec": "RandomNumberFromSeed(uint256)", +"7741fc52": "LottoCount()", +"7742ede4": "IMARK()", +"77439e8b": "doYourThing(address,address)", +"77446767": "destinationOf(uint256,uint256)", +"77453df7": "Ex()", +"7745d3b1": "getUsername(address,address)", +"7746167f": "transferBlockValueToBattleValue(uint16,uint256)", +"77463b50": "getEggsToHatchDragon()", +"77467197": "tokensVested()", +"774685c7": "CPO_SHARE()", +"77469275": "getLegacyRepToken()", +"77472b6f": "minEtherCap()", +"7747c993": "competition(uint256)", +"77482b18": "getDeveloperFee()", +"7748b07e": "usersNTD(address)", +"7749d667": "getIncreaseTime(uint256)", +"7749e693": "setCategory(uint256,uint256,bytes32)", +"774a63a5": "CDSToken()", +"774a97cf": "getCurrentTapAmount()", +"774b71d6": "TokenPriceProposalSet(uint256,uint256,uint256)", +"774bafdf": "unlockMe()", +"774dba58": "playHome()", +"774e88dc": "hasUnlockDatePassed()", +"774eb322": "close(string,bytes32,uint8,bytes32,bytes32)", +"774ec644": "setUserPrice(uint256)", +"774f787a": "ShitsToken()", +"77507425": "buyerFunded(bool,address)", +"7750b2b1": "__setDeadline(uint256)", +"775146c3": "request(bytes32,uint256)", +"77517765": "getTotalActiveStake(uint256)", +"7752182b": "AddReserveToNetwork(address,bool)", +"77524af9": "wethTransfer(address,uint256)", +"775274a1": "requestRefund(bytes32)", +"77532fa8": "TotalClosedDeposits()", +"77538407": "Ap()", +"7753ec49": "in_registration_phase()", +"77542194": "setTokenTransferStatus(bool)", +"7754305c": "getURI()", +"7754ec29": "WinCoin()", +"7755a0f5": "ResolutionProposalSubmitted(uint256,uint256,address,string,string)", +"7756c908": "transferLocked(address,uint256)", +"7757fc5d": "withdrawalOpen()", +"7758bf86": "maxBridgeWidth()", +"7758c4f8": "quickBuy(uint256)", +"7758d407": "nextCommonTTWTokenId2()", +"775915ce": "stepTwoEndTime()", +"77598626": "TZCoin()", +"77599026": "calculateYourValue2(uint256)", +"775a25e3": "getTotal()", +"775a8f5e": "toBytes(uint256)", +"775a91ac": "timeLockTokens(uint256)", +"775ad527": "allow(address,address)", +"775af9df": "MiningRigFarmer()", +"775b9c13": "setWhiteList(address[])", +"775c300c": "deploy()", +"775c46cd": "startFunding(uint256,uint256)", +"775dec49": "keccak()", +"775e38f7": "NO_MONSTER()", +"775eb900": "signed(bytes32)", +"775ee3ef": "view56()", +"775f5ec0": "finishRitual(address)", +"775f731c": "addSomeUETsTo(address,uint256)", +"775fc127": "operation()", +"77609a41": "challengeCanBeResolved(bytes32)", +"7760da7f": "reclaimTokens(uint256)", +"77610ba2": "setDollar(uint256)", +"77617a7d": "BuyToyMoney()", +"776184b1": "test_oneValidEqString()", +"77620729": "forward(address,address,uint256,bytes,bytes32,bytes)", +"776247c4": "withdrawEthFromBalance()", +"77627a1d": "Goutex(uint256,string,uint8,string)", +"7762df18": "VVDB(address)", +"7762df25": "potentialOwner()", +"7762f046": "setContractBridgeAddress(address)", +"77640f9c": "setClaim(address,bytes32,bytes)", +"7764d878": "checkstatus()", +"7764f771": "getBackBNB()", +"776532de": "Numa()", +"7765c52c": "getAuctionStatus(uint256)", +"776676d6": "newRC(uint256,uint256)", +"77669b2d": "setCompte_33(string)", +"7767ecc3": "inSdcForAdmin(address,address,uint256,uint256)", +"7768dec0": "isTokenSale()", +"77695d39": "getDb(uint256)", +"77699a06": "reclaimExpiredSwap(bytes32,bytes32)", +"7769d384": "revokeAndPublish(address,bytes32,bytes32,address)", +"7769ea0a": "addPool(uint256)", +"776a038e": "PurchaseToken()", +"776ab634": "unpauseToken(uint256)", +"776b37e2": "editCertificate(string,address)", +"776b6b27": "setRoscaAddress(address)", +"776bf795": "pieceTransfered(uint256,address,address)", +"776c3b70": "setNewSalesManager(address)", +"776d1a01": "setTarget(address)", +"776d62f6": "costs()", +"776d89ba": "delPhase(uint256)", +"776dba67": "VioRewardERC20Token()", +"776df027": "testFailDisownNotOwner()", +"776e7fc1": "checkRedbullQuest(address)", +"776f3b99": "burnByPercentage(uint8,uint8)", +"776f9663": "PeerBet()", +"776fd7ce": "setEscrowTransfer(address,uint256,uint256,bool)", +"77703d29": "getBuyOrder(uint80)", +"7770bd15": "crowdSale()", +"777256c4": "Greeter()", +"77725b88": "SetFFSettings(address,address,uint256,uint256)", +"7772a380": "isInGeneration(address,uint256)", +"7772ba07": "setDelays(uint256,uint256)", +"77738ce7": "fundAccount(address,uint256,uint256)", +"7774c394": "isNecromancer(uint256)", +"7774d64c": "testCreateOrder()", +"7774e950": "createUnit(uint256)", +"7775eec9": "getCompte_29()", +"7776466c": "preSaleToken()", +"777665b8": "transferTOKENtoProviders(address,address,uint256,address,uint256)", +"77773d90": "amountOfTokensPerEther()", +"7777789f": "_mint(address,uint256,uint256[])", +"7777d088": "lotteryTokensPercent()", +"777850f9": "payAfter(address,uint256)", +"77790081": "updateMaritalStatus(string)", +"777955b1": "updateReferralGu(uint256)", +"7779b0e4": "_buyTokens(uint256,uint8,address,address)", +"777a5dc5": "explodePhoenix(uint256)", +"777ab367": "mk_contract_address(address,uint256)", +"777ac349": "totalWins()", +"777ac522": "_createTree(string,string,uint256)", +"777aff7d": "updateHistory(address,uint256)", +"777b4547": "ICO(address,address,address)", +"777c1bb2": "eosLITE(uint256,uint256)", +"777c658f": "getTotalDonations()", +"777cfd5f": "createSubmission(address,string,bytes32,bool,bytes32,string,uint256)", +"777d1a8d": "HealthCoin(uint256,string,string)", +"777dff4a": "transferCTO(address)", +"777e479d": "getRoundBlockNumber(uint256)", +"777e6b1c": "getEntitledFunds()", +"777e82ca": "BookERC20EthV1p1()", +"777e940c": "excessRefund(address,uint256)", +"777ecb74": "LogPaused()", +"777eceb8": "tokensForOneEther()", +"777f942d": "changeMinStake(address,bytes32,uint256)", +"777feff5": "getCertificationDbAtIndex(uint256)", +"7780ae85": "desimls()", +"77810380": "getRegistrationToken()", +"77818808": "Electrium()", +"7781eafa": "considerPerseus(uint256)", +"77826b0c": "setMaxReceiveEther(uint256)", +"778317c4": "setWinLossAmount(uint256,uint256)", +"77838c63": "distributedToOwner(uint256)", +"7783c06b": "newArt(string,string)", +"7785859f": "altCapitalization()", +"7785954b": "produceRandom(uint256)", +"778639cb": "checkValidFighter(address,address)", +"77863b61": "CrossWhitehatWithdraw(uint256,address)", +"7786b22d": "ELRUN()", +"77870bce": "BeatOrgTokenPostSale(address)", +"7787dfaf": "test_9a_transferShouldBeFalse()", +"77886028": "setTokensContractAddress(address,address)", +"7788d126": "REFERRAL_BONUS_LEVEL3()", +"77895ef4": "listedMonForClass(uint64)", +"7789f844": "backTokenOwner()", +"7789fc90": "createBet(bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8)", +"778a56ce": "toggleBurn()", +"778a5978": "guessNumber(uint16)", +"778b5aee": "getWalletsCount()", +"778c2cea": "onlyLocklistedCanDo()", +"778d00f0": "pushPrivateInvestment(uint256,uint256,address)", +"778d491e": "wd(uint256)", +"778e388e": "parseInt_(uint256)", +"7790a5d2": "Token_5()", +"77913fbc": "getModuleId(string)", +"7791dc1f": "AuthEnd()", +"77921952": "contributorCounter()", +"77922220": "getRegionProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"77922e57": "batchCancel(address[],uint256[],uint256)", +"7793868c": "RostToken()", +"779454ff": "boardAddress()", +"77952161": "didDepositCollateral(bytes32,address,uint256)", +"7795820c": "getCommitment(bytes32)", +"7796fb95": "setSink(address)", +"7798e525": "countUBetChecks()", +"779972da": "setLockPeriod(uint256)", +"779997c3": "bump(bytes32)", +"779a3611": "makeBet(uint256,uint256,uint256)", +"779a5a7f": "getContributorByAddress(address)", +"779ad324": "getIEOId()", +"779b2e11": "getCurLevelKeyNum()", +"779b8dc0": "load(bool,address,address,address,address,address)", +"779beca0": "getNumOfSalesWithSameId(bytes)", +"779beedf": "registerWallet(address)", +"779c4a26": "getUserSponsorships(address)", +"779c9b19": "_emitCategorySet(uint256,uint256,bytes32)", +"779ce152": "WIN_PERCENT_PER_DISTANCE()", +"779d2e20": "setLawSupportProfitAddress(address)", +"779d6fc7": "logInitialReportSubmitted(address,address,address,uint256,bool,uint256[],bool)", +"779de55d": "paymentsByBenefactor()", +"779dec5b": "bZRxTokenContract()", +"779e170d": "isSaleOn()", +"779e5ad8": "gvOptionToken20()", +"77a0e875": "destTokensSit()", +"77a1ec4b": "hodlCountdown()", +"77a28225": "delegateFromReferral(uint88)", +"77a28461": "ownerSetupBankrollInterface(address)", +"77a28fec": "DealCancelRate(uint256)", +"77a3a0a2": "removeMarketFrom()", +"77a43129": "publicSellLockEndTime()", +"77a54b38": "checkForNewStellar(address,uint256)", +"77a54eb8": "blacklistAddresses(address[])", +"77a6acfb": "tokenDemo(uint256,string,string,address)", +"77a6cb64": "TokenEscrow()", +"77a714ae": "ERC721Token()", +"77a7354d": "addExperience(string)", +"77a74a20": "expressingTraits(uint256)", +"77a7d968": "walletBalances(address,address[])", +"77a7e6be": "getRefTotal(uint256)", +"77a8bc86": "untrustedExecuteRuling(uint256)", +"77a9037b": "updateLastVotedOnParameter(bytes32,address)", +"77a9e152": "redeemToken(uint256,uint32)", +"77aaafd2": "interfaceFrozenTransfer(address,address,uint256)", +"77aad873": "proposeLaborHourToken(address)", +"77ac3da5": "oraclize_query(uint256,string,string[1],uint256)", +"77acbb22": "manager2()", +"77ad619d": "get_commit_no()", +"77ae6c47": "requestBatchInsatalmentsLoans(uint256,uint128,uint256,uint24,uint40)", +"77afd7e6": "shitRate()", +"77b02a33": "getGameLock(address)", +"77b08df0": "Migrations4()", +"77b0c751": "getNextPayDay()", +"77b0dd70": "depositAndInitiate(uint256,uint256,address,bytes32,address,uint256)", +"77b11de3": "setPlayerHasGetFree(address,address,bool)", +"77b1788e": "postTrade(bytes32,uint256)", +"77b19cd5": "getCallBaseGasPrice(bytes32)", +"77b1b2eb": "MAX_CANVAS_COUNT()", +"77b1bba6": "ChangeCollector(address)", +"77b1da93": "crowdSaleClosed()", +"77b2d590": "_set3()", +"77b38e2a": "MasternodeDeregistered(address,uint256)", +"77b440e9": "WALLET_FOUNDATION()", +"77b4a9c1": "getMakerBalance(address)", +"77b57073": "sponsorList(address)", +"77b68dae": "devDivRate()", +"77b71df0": "stake(int256)", +"77b74692": "setKYCAddress()", +"77b76ec3": "checkBalance(address,address)", +"77b77a4f": "PlatoPresale()", +"77b7b5f3": "returnCreator(uint256)", +"77b92c07": "Approve(uint256)", +"77bad015": "GetMyEgg()", +"77bb09eb": "addSweeper(address,address)", +"77bb5e34": "ChillCoin()", +"77bbc957": "returnReclaimed(uint256,address)", +"77bbf28a": "createDividend(uint256,uint256,address,uint256)", +"77bc222c": "_eraseSingleNode(bytes32)", +"77bc48f8": "view_owner()", +"77bc57e7": "Agencies()", +"77bd1bfe": "ITT(uint256,uint8,string,string)", +"77bd35fc": "claimPremium(address,uint256)", +"77bd775c": "setMinPurchaseAmt(uint256)", +"77bdab19": "OtoniToken()", +"77bdbccc": "registerCertificate(address)", +"77bde142": "setTargetBondingRate(uint256)", +"77bdfcfa": "cards_metal_check(address)", +"77bf8b91": "CelebSold(uint256,uint256,uint256,string,address,address)", +"77bf8e6f": "myShare()", +"77bf96d4": "claimProfitEquivalent()", +"77bf9776": "stopUpdate()", +"77bffc9a": "getRemainingStars(address)", +"77c07c19": "storageControllerAddress()", +"77c0891f": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"77c13323": "closing_requests(bytes32)", +"77c2f72e": "LightenToken()", +"77c2fb9b": "updateMokenName(uint256,string)", +"77c34ee7": "tokensRemainingIco()", +"77c427b7": "TemperatureMeasurementB(address,int8,int8)", +"77c4fd07": "availableEarlyPlayerShares()", +"77c626e3": "getStageAvailableTokens(uint256)", +"77c68aa7": "IGTMYR()", +"77c71396": "charityBeneficiary()", +"77c76449": "AVAILABLE_IN_MAIN()", +"77c78df9": "getCurrentLevel()", +"77c82476": "viewPetition(uint256)", +"77c846af": "changeUsername(string)", +"77c8d5a0": "computeTimeBonus()", +"77c90dd4": "VaporCoin()", +"77c93662": "sponsor()", +"77c9dd4b": "iOwner()", +"77ca4d11": "loadVotesForParticipant(bytes32,bytes32,uint8)", +"77caa61a": "updateExchangeRates()", +"77caa7e6": "endICOp2()", +"77caf711": "transferValue(uint256)", +"77cb6b7f": "AbccCoinToken()", +"77cb8edd": "_robot()", +"77cc437c": "institutionWallet()", +"77cdd2e5": "icoBtc()", +"77ce4fd1": "changeBlocksToExpire(uint256)", +"77ce52f8": "totalInfo()", +"77ce9bdd": "createPersonalDepositAddress(bytes32)", +"77cebd89": "isAllowedToBuy(bytes32)", +"77ceded8": "mintGrey(int256,address,uint256)", +"77cf0369": "totalPreICOavailibleWithBonus()", +"77cfe1c1": "isValid(string,address,uint256)", +"77cff22d": "init(address,address,uint256,uint256)", +"77d1f95d": "AntCoin()", +"77d223b2": "setLowestClaim(uint256,uint256)", +"77d2f203": "neg(uint256)", +"77d317d0": "destroy(uint256,string)", +"77d32e94": "ecrecovery(bytes32,bytes)", +"77d3550b": "commissionPercent()", +"77d447d6": "ContractorManagerSet(address)", +"77d4c48b": "arr(address)", +"77d4e5bc": "secondTimeLine()", +"77d555b7": "RateSetterChanged(address,address)", +"77d55755": "getMiningReward(bytes32)", +"77d56a04": "getReserveBalances()", +"77d58f21": "_safeContract(address,address,address,uint256,bytes)", +"77d630ae": "activationFee()", +"77d6a880": "saleOrNot()", +"77d6cfeb": "setGoalReached()", +"77d70b1f": "jackpots()", +"77d79d10": "getGame(uint8)", +"77d821a2": "testOnlyMultisigCanDeployANT()", +"77d83b81": "confirmGetFreeQuest(address)", +"77d89406": "bankerFeeDataRecord(address,uint256,uint256)", +"77d8ffc0": "getTokensFromBuy(address)", +"77d99ef5": "createBattleboard(uint256,uint8)", +"77d9d1fb": "maxHEXCap()", +"77d9e5fd": "isElectionValid(uint256,uint256)", +"77da0add": "seeAsset(uint256)", +"77dac983": "abandonEscrowService(uint256)", +"77daeb80": "addDeal(address,address,address,uint256,uint256,uint256,uint256,string,uint256,uint256,bool)", +"77db5206": "checkStatus(address,uint256)", +"77dbbd76": "transferFrom(address,uint256,uint256)", +"77dc0413": "small_payout(uint256)", +"77dc657c": "checkPassword(bytes)", +"77dc6ac7": "tokensSelling()", +"77dcb4f9": "doPresaleMinting(address,uint256)", +"77dcba6d": "writeConversion(string,address,uint256,uint256)", +"77dd3323": "setts50(uint256,address)", +"77dd8ea7": "ethFnkRate1()", +"77df3013": "calculatePurchaseAndBonuses(address,uint256)", +"77dfec3c": "exchangeRateTimestamp()", +"77e13c10": "playerMakeBet(uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"77e17039": "startSettlement()", +"77e17191": "COIN_SUPPLY_MARKETING_TOTAL()", +"77e19824": "numSubmissions()", +"77e26762": "getErbutongHao(uint256)", +"77e2965b": "updateTokenAge(address,address)", +"77e2a6ed": "openGiveAway()", +"77e2e5ce": "ICO_setParameters(address,uint256,uint256,uint256,uint256,address,uint256)", +"77e303d2": "_Deposit(bytes32,uint256,uint256)", +"77e49660": "addAddressAliasUnsafe(address,address)", +"77e4fb04": "testFailNotEnoughValue()", +"77e5bf84": "getTxGasprice()", +"77e5d8f8": "advisersUnvested()", +"77e5f6d0": "setGizerItemsContract(address)", +"77e60f42": "marginForMajority()", +"77e6bb15": "getCurrentBonusPercent()", +"77e71ee5": "getForkEndTime()", +"77e75b07": "mintAndAllocateZCO(address,uint256)", +"77e7645b": "CoinSaleActive()", +"77e7ff41": "kickTheCoin()", +"77e8a52e": "SEARCH()", +"77e91f26": "getAyantDroitEconomique_Compte_10()", +"77ea8c72": "RGLSToken()", +"77eaa420": "_clearAuthorization(address,address)", +"77eab3e3": "changeMinimumAmount(uint256)", +"77eb4c50": "hasSponsor(uint32)", +"77eb74a1": "PassportInterfaceID()", +"77ec0feb": "dividendPerToken()", +"77ee311c": "totalMember()", +"77eefa5a": "pullBack(address,address,uint256)", +"77ef2c91": "whitePaperHash()", +"77ef9581": "Registry(address)", +"77f051c3": "AcceptsToken3D(address)", +"77f122bd": "setBlockValueBalance(uint256)", +"77f172b6": "_wager(uint256)", +"77f18090": "Citizen()", +"77f18ed3": "isImmortal()", +"77f25566": "setOne(uint256)", +"77f27251": "paybackDelta()", +"77f2d0b0": "partnerInfo_for_Owner(address)", +"77f325df": "submitAnswer(bytes32,bytes32,uint256)", +"77f3293a": "endPreICO()", +"77f37cd1": "luckyBonus(uint256)", +"77f38024": "BountyPart()", +"77f3c0cd": "InvokeTransfer(address,uint256[],uint256)", +"77f3e3d1": "Bounty_Supply()", +"77f3f782": "UserBalances(address)", +"77f41164": "stageTwoClosed()", +"77f46346": "CheckIfIsAllowed(address)", +"77f48f94": "spin(bytes32)", +"77f50f97": "claimAdmin()", +"77f51246": "tokenIsLocked()", +"77f53095": "createBasicToken(string,string,uint256,string)", +"77f54a82": "setICOParams(uint256,uint32,uint32,uint256,uint256,bool)", +"77f6f7e8": "YoloToken()", +"77f74b6b": "getTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", +"77f83bce": "PruebaCoin()", +"77f8afc3": "FixSale(uint256)", +"77f929fb": "DeveloperCoin()", +"77f98616": "getTotalProduct()", +"77f9bc13": "getVendorApplicationStatusTrack(string,uint256)", +"77f9c101": "testDeployNewTokenWithTheTestContractAsOwner()", +"77f9c862": "GetSellOrderDetails(address)", +"77f9db33": "disableTokenTransfers()", +"77fa3d32": "addAuction(uint32,uint256,uint256,uint8,uint8)", +"77fa4c21": "getRewardPot()", +"77faba66": "setRewardPercentageK(uint256)", +"77faffa0": "nextround()", +"77fb6269": "migrateData(address,uint256,uint8)", +"77fbe611": "forTeamETH()", +"77fc35e5": "_burn(string)", +"77fcb91d": "forward(address,bool)", +"77fcbebe": "TokenLimitReached(uint256,uint256)", +"77fcc493": "TOKEN_MIN_PRICE_THRESHOLD()", +"77fcce68": "setSignatureValidatorApproval(address,bool)", +"77fd347a": "makePredictions(int16,string)", +"77fe2a0d": "unfrozePerDay()", +"77fe38a4": "transferToICAPWithReference(bytes32,uint256,string)", +"77fed1c7": "addOverview(uint256,string,string)", +"77ff24f4": "test0()", +"77ffd2e8": "setCurrencyExchangeRate(uint256,uint256,uint8)", +"780004ac": "systemFreeze(uint256,uint256)", +"7800313f": "getCurrentTokensByType(uint32)", +"7800a9f6": "getP3DInfo()", +"78013292": "optionAddress()", +"78018581": "Allysian()", +"7801fc3e": "totalReceivedEth()", +"780211a2": "refundOrder(address,address,address,bytes32,address,address)", +"78021e7c": "ownersOfToken(uint256)", +"780249cd": "DC()", +"7802857a": "BONUS_TIER_8_LIMIT()", +"7802cbaf": "addTokenOwnerReward(uint256)", +"7802f4e4": "nada(uint256)", +"78030b83": "makeWildCardToken(uint256)", +"78044965": "setACLRole8972381298910001230(address)", +"78044ba5": "transferToBuyer(address,uint256,address)", +"7804a5dc": "canCreate(address)", +"7805862f": "Unpause()", +"7805a548": "_createItem(uint256,uint256,uint256,uint256,address)", +"7805dd1c": "_totalUsersBets()", +"7807e826": "calculateWeiNeeded(address,uint256)", +"78080c9d": "rateStage1()", +"7808dc69": "createSale(uint256,uint256,address,address,address)", +"780900dc": "create(uint256)", +"7809231c": "DistributeAirdrop(address,uint256)", +"7809dd64": "_receiveRefund()", +"780a4d74": "RecipientUpdated(address,address,address)", +"780aa037": "receiveTokenFromContract(uint256)", +"780ae915": "completeMigration(address,uint256)", +"780aee73": "newGame(string,bytes32)", +"780bbe60": "createChamp(address)", +"780bd739": "giveOut(address[])", +"780be5be": "AggiungiNegoziante(address)", +"780bfed0": "addPermission(bytes4,string,string,string)", +"780c4a73": "addCounter(address,uint32)", +"780c5316": "payMinAuctionEther()", +"780c5689": "writes(bytes32,address)", +"780cbf65": "_queryCallback(uint256,bytes)", +"780d2328": "recordVisit(address,string)", +"780e4b96": "setConsolationRewardsClaimPercent(uint256)", +"780f4987": "systemMessage(string)", +"780ff8d1": "viewLatestErc20TransactionRequest()", +"78108368": "atxRate()", +"78121b60": "KeyedCollection()", +"781224f4": "setVendorWallet(address)", +"78122f3a": "fail(string)", +"78127ee7": "GOLDBARToken()", +"781327de": "createStrategy(string,string,string,address[],uint256[],bytes32)", +"78152bbe": "setPresaleStart(uint256)", +"78155bf4": "PaymentCompleted(address,uint256,uint256)", +"78160d6b": "numChipsClaimed()", +"78166097": "isValidCustomer(address)", +"7817364d": "ChillTalk()", +"7817a60f": "acceptMember(address,string)", +"7817abee": "getOwnerRatingTuple()", +"7817eedd": "rawOwnerOf(bytes32)", +"78186f51": "etherPriceInDollarOut()", +"7818e9ef": "opencode(bytes32)", +"7819d30d": "updateNameResolver(string,address)", +"781a2cca": "Pay(uint256)", +"781a4a74": "getTokensIcoSold()", +"781c0db4": "finishFreeGet()", +"781c4dad": "tierNo()", +"781cc3d3": "cancelAction(bytes32)", +"781cd99d": "START_TIMESTAMP()", +"781db835": "_buyTokens(address,uint256)", +"781e48e4": "MYCareCoin()", +"781e9892": "cumulativeRatios()", +"781f5a83": "registerIdentity(address,address)", +"782037dc": "reserveTeamRecipient()", +"78205f67": "testThrowTransferEnableNotTransferable()", +"7820cd94": "flexibleRewardLevel(uint256)", +"7821a514": "addReserves(uint256)", +"7822b902": "setSaleAmountCap(uint256)", +"7822ed49": "bankAddress()", +"78231978": "totalSaleSupply()", +"782378d1": "MIC(uint256,string,uint8,string)", +"78238cf0": "setCmd_control(uint256)", +"7824407f": "tokenSupply()", +"78248880": "decreasePaymentsBalance(address,address,uint256)", +"7825396b": "setPrices(uint16[])", +"78258c41": "ZXToken()", +"78261878": "saleCompleted()", +"78263edf": "changeMaturity(uint256)", +"7826bbc3": "fstPrivateSalePortionDenominator()", +"7826bfa8": "ethereumLottery()", +"7826f28f": "S1()", +"7827b226": "froze_contract()", +"782841cd": "changeMintingState()", +"78296854": "origMktValue()", +"782a0170": "etherPriceInUSD()", +"782a2737": "vestingMap(address)", +"782addbd": "isInvulnerableByArea(uint256)", +"782b2340": "getStartIcoTimestamp()", +"782b3602": "taker()", +"782b9d50": "setCitizenAddress(address,address)", +"782c6ef8": "refundSender(address,uint256,uint256)", +"782c9689": "DeliverToClaimers(address[],uint256[])", +"782ce79c": "burnClosedToken(bytes32)", +"782da1ea": "transferFromInternal(address,address,uint256,bytes)", +"782e1e6c": "tokenTarget()", +"782e34c9": "ownerSafeWithdrawal()", +"782ec023": "transferMultiAddressFrom(address,address[],uint256[])", +"782f08ae": "setUri(uint256,string)", +"782fb5d4": "getVoteCounts(bytes32)", +"7830b7f8": "PowerNetCoin()", +"783110dc": "increaseStep()", +"78312435": "updateIssuer(address)", +"78321efb": "pushElement(uint256)", +"78329d61": "processPurchase(address,address,uint256,uint256)", +"7832bbf7": "temporaryEscapeHatch(address,uint256,bytes)", +"78330101": "ESlotsICOTokenDeployed(address)", +"783370b5": "setEditionLimits(uint256,uint8,uint8,uint8)", +"7834a504": "buyCoin(address)", +"78351502": "hasPastFreezTime()", +"78357e53": "Manager()", +"78367e46": "enterSmall()", +"783680a7": "ico2Min()", +"78375f14": "requireisfine(uint256)", +"78375f61": "BetTest111()", +"7837848c": "expire(bool)", +"7837e170": "lockBalance(address,uint256)", +"7838415b": "MeetOneToken()", +"783870eb": "rubusBlackAddress()", +"78388eb6": "allocationsOverTime(uint256)", +"78393237": "MAT_PARTNERS_SUPPLY_LIMIT()", +"783a2cca": "approveWithdrawal(address,uint256,bytes32,bytes32,uint256)", +"783ac3ee": "offThreshold()", +"783b4569": "rawRegister(bytes32)", +"783b7b1e": "sendJackpot(address)", +"783c2088": "lookupRegName(address)", +"783c8db0": "minimumFundingAmount()", +"783cc9dc": "CNNToken()", +"783ce458": "expmod(uint256,uint256,uint256)", +"783d5dec": "_limitTeamWithdraw(uint256,uint256,uint256,uint256,uint256)", +"783ddace": "mintAdvisersTokens(address,uint256)", +"783e7a06": "removeVerificatorAddress(address)", +"783f28e6": "adminUpdMinSign(uint256,uint256)", +"783f6af5": "people()", +"783f7b98": "setEtherQuota(uint256)", +"78405234": "indexOf(uint8[],uint8,bool)", +"7840c781": "_setTokenOwner(uint256,address)", +"78415956": "after_test_2_method()", +"7841a530": "set_tokens_sold(uint256)", +"7841b780": "isPaymentSettled(uint256)", +"78420d4a": "validateLock()", +"784279d8": "setSupportedTokens(address,bool)", +"7842a3a4": "payReward()", +"7842aded": "getLotteryMoney()", +"7842dca8": "allTime()", +"7843184b": "setMultiBonusTokens(address[],uint256[],uint256)", +"78446bc1": "timeLockPeriod()", +"7844ce81": "hodling()", +"78451d64": "SplitPayment(address[],uint256[])", +"78452d65": "CATContract(address,string)", +"784547a7": "isConfirmed(uint256)", +"7845b86e": "fundingRatePredictionBonusClaimWindow()", +"7845cbef": "GOLDT()", +"7845d5aa": "UpgradeAgentSet(address)", +"7845d76b": "tune(uint256,uint256,uint256,uint256)", +"7846188d": "_getCrabTotalStats(uint256)", +"7846c3c8": "minimumContributionPresalePhase2()", +"784712f2": "pendingPayouts(address)", +"78473485": "getSellDemand(uint256)", +"7847352a": "setBettingCondition(uint256,uint256)", +"7848033e": "distributeCHENDE(address[])", +"784813e0": "lookupBet(uint256,uint256)", +"78483632": "secondsaleOpen()", +"78489ed6": "compareIntValue(bytes32,int256,bytes1)", +"78498818": "getTokensBought()", +"784a3e40": "bountiesIssued()", +"784aa7d2": "setTitulaire_Compte_5(uint256)", +"784ba0f5": "yearteam_trade_date()", +"784d17f9": "DarkrenlandToken()", +"784f47ff": "reduceCredits(string,uint256,uint8,address)", +"784f6654": "activateMe(string)", +"784fcb94": "MARXToken()", +"784fdf26": "totalExternalSales()", +"7850a6b2": "transferDoftManagment(address)", +"7850b72f": "LSDCrowdsale()", +"7850c2ac": "holdersAllocatedAmount()", +"7850f0a4": "setPromotedGame(uint256,bool,string)", +"785105f6": "savedBalance()", +"78517536": "updateBlockNumberOfGladiatorBattle(uint256)", +"7851bcbd": "safePerc(uint256,uint256)", +"78524b2e": "halveMinQuorum()", +"785250da": "kyberNetworkProxyContract()", +"78533046": "getMetaInfo(uint256)", +"78533e90": "setTokenMinter(address)", +"78537808": "union(address[],address[])", +"7853c945": "bitcoinKey()", +"7854216b": "autoAirdropAmount()", +"78547d5f": "processPurchase(address,uint256)", +"7854b798": "addauction(uint256,uint256,uint256,uint256,uint256,string,string)", +"78566845": "allocateTicket(uint256,address,string)", +"78572816": "addAffiliate(address,bytes32)", +"78579d7c": "addEntry(address,uint256,bool,uint256,uint256)", +"7857f6e7": "setReverseRate(address[],int16)", +"7857fcda": "assertEq3(bytes3,bytes3)", +"78581a46": "getBatchCreateDrawingsAddress()", +"785826a7": "sendReferrer(uint256)", +"78583275": "updateMinSale(uint256)", +"7858651e": "getConnection(address,address,bytes32)", +"7858eb7b": "setScore(string)", +"7858f93a": "addressFundTeam()", +"78591e1d": "findAllCliWithPendingTask()", +"7859f9e6": "purchaseCarAdv(uint256,string,string)", +"785b1eb4": "PayEIF()", +"785b804a": "transferEtherInitiation(address,uint256)", +"785bc758": "setBaseStorage(bytes4,uint256,string)", +"785cc997": "mint(uint256,string,bytes)", +"785ce7ca": "walletBlockOf(address)", +"785da817": "unterminateFunding()", +"785e64a1": "whatIsMocount()", +"785e9e86": "erc20()", +"785fa627": "prizeAmount()", +"785fb499": "burnFoundersTokens(uint256,uint256)", +"78607c33": "FundWithdrawed(uint256)", +"7860ed56": "secondItemWrong()", +"78629c0f": "lockAddressToken(address)", +"7862affa": "calculateTimeBonus(uint256)", +"78635049": "MarzCoin()", +"786420d1": "getEstate(uint256)", +"786431c1": "MAX_OPS()", +"78644a4a": "userOfferAcceptElement(uint256,uint256,uint256)", +"7865f463": "mmul(uint128,uint128)", +"7865f611": "LogBet(address,bool,uint256,uint256,bool)", +"7866ed6e": "getBloodline(uint256)", +"78670289": "MAX_END_BLOCK_NUMBER()", +"7867060d": "approveComponent(string)", +"78683654": "convertMainchainGPX(string,string)", +"7868c89d": "getRateByStage(uint256)", +"786926fa": "existenceBalanceOf(address)", +"78698e45": "_updatePrices(uint256,uint256,uint16,uint256[],uint256[])", +"786ab4b6": "addAccountWithBalance(uint16)", +"786b844b": "closeGame()", +"786bfd76": "SimpleConstructorString(string,string)", +"786c5065": "closeDistribution()", +"786caff8": "claimerOfSocialIdentity(uint256,uint256)", +"786cf3ee": "DurioTEST()", +"786d02d0": "getHoldingsCount()", +"786d8a25": "test_falseEqNoLog()", +"786e06f3": "sendETHtoBoard(uint256)", +"786e4799": "removeRatePlan(uint256,uint256)", +"786ecf16": "doRestart()", +"786edae0": "registerEndpoint(string,int256)", +"786ef70a": "earnedEthWei()", +"786fb317": "requestOutput(bytes4)", +"787089bd": "PandoraToken(uint256,string,string)", +"787091e9": "EABToken(string,string)", +"7870f889": "MyWhiteList()", +"78710d37": "seven()", +"78710f72": "canBuyTokens()", +"787112be": "set_saleAgent(address)", +"78719b15": "likeCelebrity(uint256[],uint256[],uint256)", +"78719ee8": "DAppNodePackageDirectory(address,address)", +"7871a9ff": "Crypterium()", +"78720063": "EligmaSupplyContract(address,address)", +"7872e3da": "disbursementDuration()", +"78730d65": "nextLotteryTTMTokenId9()", +"7873447b": "getFrozenAccountList()", +"7873832e": "SingularDTVLaunch(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"787394fc": "setJackpotIncrement(uint256)", +"7873bc61": "contestant(uint256)", +"787414ac": "ABC123ABC()", +"78744754": "getClassName(uint32)", +"7874b66f": "ReferralActivated(address)", +"7874d32c": "unblockTokenTime()", +"78753818": "MAIN_SALE_VALUE_CAP()", +"7875bbe2": "DividendPaid(address,uint256,uint256,uint256)", +"7875d41b": "takeBet(uint256,uint8)", +"78761590": "findTargetCell(uint256,uint256)", +"7877f72d": "getHours(uint256)", +"78782027": "enter(string,address)", +"7878903c": "hasPreSaleEnded()", +"7878b66a": "isPauseSave()", +"7879e19e": "CollectAllFees()", +"787a08a6": "cooldown()", +"787addc3": "FideliumToken(uint256,string,string)", +"787b586f": "setMediumProbability(uint8)", +"787b6725": "removeProduct(address)", +"787bd6f9": "setDistribution(uint256[5])", +"787c17d9": "privateSell1Token()", +"787c23e0": "whitelistWallet(address)", +"787ccb61": "replenishPool(uint256)", +"787d024d": "mintLzToken(address,address)", +"787d64e4": "m_multiOwnedRequired()", +"787dbaf1": "feedTweet(uint256,uint256,string)", +"787dc68f": "createPromoAthlete(address,string,address,uint256,uint256,uint256)", +"787dc9f1": "getFee(bytes8,uint256)", +"787e9137": "collectedTokens()", +"787ed1f8": "sayOwnerHello(string)", +"787ed54f": "payDividendsManually()", +"787eda49": "assertEq20(bytes20,bytes20,bytes32)", +"787f9710": "namespaceTaken(bytes32)", +"787f9cc3": "ManualPriceChange(uint256,uint256)", +"787fd167": "GameJoined(address,address,uint256,uint256,uint8,uint256)", +"788023ff": "changeShareable(address[],uint256)", +"78809c52": "ratePerEthPhase1()", +"788102ff": "reservedFundsParking(address)", +"788222ae": "tokenEmail()", +"78831239": "deleteTopic(bytes15)", +"78831b36": "setDividendsWallet(address)", +"7883985b": "addrExecutor()", +"78843a95": "isTier1(address)", +"7884e787": "getDni()", +"78862e69": "deathData_f9()", +"788649ea": "unfreezeAccount(address)", +"7886b526": "checkRecords(uint256[])", +"78879d74": "betAmountAfterRakeHasBeenWithdrawnAndProcessed(uint256)", +"78880f4a": "population()", +"788873ea": "logFeeWindowTransferred(address,address,address,uint256)", +"7888e957": "storageToUint(int256,string)", +"788a8c8b": "ARBI()", +"788ac4a8": "Petrocoin()", +"788acd7e": "issueBounty(address,uint256,string,uint256,address,bool,address)", +"788b2ba2": "Stock(string,string,uint256,string,uint256)", +"788bb8df": "EUR_Omnidollar()", +"788bc78c": "setVersion(string)", +"788bc8c0": "tokensToUsd(uint256,uint8)", +"788c26b4": "createNewVesting(address,uint256,uint256,uint256,string,uint256,bool)", +"788c4023": "isWalletLocked_Receive(address)", +"788c5999": "mintMode()", +"788ce6f2": "icoAddress()", +"788d135b": "GoForLaunch()", +"788d1fa6": "setInt8(int8,int8)", +"788d3851": "voteOpen()", +"788d5881": "licenseTermsHasMinCost(bytes32,bytes32)", +"788e0760": "shpExchangeRate()", +"788e26e7": "sponsorDeposit()", +"788e2c3c": "getRoundRemaining()", +"788e31bf": "addBoolSetting(string,bool,address,address,string)", +"788e72a5": "purchaseProduct(bytes32,uint256)", +"788e7909": "testTransferFromDoesNotAllowTransferOfMoreThanExistingTokensByDelegate()", +"788efb9e": "get_taker_fee()", +"788fa540": "CANONICAL_PRICEFEED()", +"78912dee": "FINTRUX_RESERVE_FTX()", +"78912eae": "sendTransaction(address,uint256,uint256,string,uint256,bytes)", +"7891663d": "HDXToken()", +"78918e89": "deleteCell(address)", +"7892cabf": "mixGenes(uint256[2],uint256[2],uint256,uint256,uint256)", +"7892d29e": "calcTradeFee(uint256,uint256)", +"7892fd29": "ROUND_TIME()", +"7893d936": "associate(bytes32,bytes32)", +"7893f4c2": "DBToken()", +"7894aafa": "createDivCard(string,uint256,uint256)", +"7894d1d0": "makeConcept(address[],uint256[],uint256,bytes,address)", +"789533e9": "getTeamPrice(uint256)", +"78954b3b": "previousContract()", +"7895dd21": "claimTokensFromSeveralAuctionsAsSeller(address[],address[],uint256[],address)", +"7895f853": "isFundLocked()", +"78960df6": "policyCandyBalance()", +"7896904e": "DaaToken(string,uint8,string,uint256)", +"7896cd95": "exchangeEnableCost()", +"789770f4": "ethToToken()", +"7898278f": "emergencyFreezeAllAccounts(bool)", +"78984793": "setLimit(address[],uint256)", +"7898acef": "usernameOf(address)", +"7898b917": "getKey(address,string)", +"78990684": "closeAllSales()", +"789a12fd": "getRafflePlayers(uint256)", +"789b2e6c": "payDay()", +"789b4690": "diviRate()", +"789c617c": "intStorage(bytes32)", +"789c6740": "testEmptyCart()", +"789cf5e2": "auctionSumPlat()", +"789dfc91": "SafeNetToken(uint256)", +"789e4e53": "createContractCollection(string)", +"789ea7dc": "becomeBatlord()", +"789fdcb6": "DoMusicPayout(uint256)", +"78a17883": "_batch4_icosaleEndTimestamp()", +"78a1b7c2": "pct(uint256,uint256)", +"78a2157a": "erc20ECT(uint8)", +"78a21a20": "_setStake(address,uint96,uint128)", +"78a29c66": "votesAvailable(address)", +"78a2e101": "TOKENS_FOR_PRESALE()", +"78a32742": "Pinged(address,uint256)", +"78a5b1b0": "blockHeaders(bytes32)", +"78a5f0ca": "withdraw_dao_fund(address)", +"78a62e9d": "isAppCode(uint32)", +"78a6c6d2": "createBreedingAuction(uint40,uint128,uint128,uint40)", +"78a70de5": "safeMathDiv(uint256,uint256)", +"78a71d78": "sendMail(address[],uint256,bytes32,uint256,bytes32,uint256)", +"78a72e0d": "encodeTransfer(uint96,address)", +"78a77b84": "closeRaffle()", +"78a7b804": "setKittyCoreAddress(address)", +"78a7e17d": "convert10MTI()", +"78a83232": "violaToken()", +"78a89567": "getTokenCount()", +"78a8b1fb": "ZTKGamers()", +"78a90a59": "presaleStop_13_December()", +"78a9e88a": "parseBitcoinComFeed(string)", +"78a9eeed": "listAll()", +"78aa08ed": "lotteryFee()", +"78aa34bf": "test_6_assertGasUsage2000Boards()", +"78abafaf": "limitAmount()", +"78abf854": "_budgetEndAndOfficalVotingTime(uint256)", +"78abfbeb": "finalization()", +"78ac19f9": "GexPayTest2Token()", +"78ad76e6": "DeBiToken()", +"78adf55e": "PreICOPart()", +"78ae12d8": "PRE_SALE_1000_ETH()", +"78ae88d1": "newDeal(uint256,uint256,uint256,uint256,uint256)", +"78af5058": "picosSold()", +"78af63ac": "btcRaised()", +"78afda07": "firstContractAddress()", +"78b04df0": "Play(address,uint256,uint256,uint256,uint256)", +"78b0cb23": "addGpgKey(string)", +"78b14f0a": "addCharity(address)", +"78b150bd": "contractUpgradable()", +"78b17bd1": "supercustomhash(bytes)", +"78b17ccf": "CANCELLATION_FEE()", +"78b226c4": "updateMemberAddress(address,address)", +"78b27221": "mintFungible(uint256,address[],uint256[])", +"78b290b5": "OPERATION_HOLDER()", +"78b29105": "forceBuy(address,address)", +"78b5a576": "updateDexterity(uint256,uint8)", +"78b6e20c": "untrackTreasuryToken(uint256)", +"78b71079": "hasEnoughGrantAmount(address,uint256)", +"78b83360": "freezingBalanceInfoOf(address,uint256)", +"78b8a6c2": "issueTokensInternal(address,uint256)", +"78b8c58c": "getTokenInfoNumToknes()", +"78b99c24": "pricingStrategy()", +"78ba24f2": "addContractBalance(uint256,uint256)", +"78bb5164": "whitelistLength()", +"78bb9e54": "niceguy4()", +"78bba530": "communityHolder()", +"78bc254b": "setPreIcoParameters(uint256,uint256,uint256,uint256)", +"78bc6460": "getCallGasPrice(bytes32)", +"78bca3e7": "NeuralNetwork()", +"78bcd39a": "accountLockCheck(bytes32)", +"78bd7935": "getAuction(uint256)", +"78be0496": "MTF(uint256,uint256)", +"78beda71": "createPromoMineral(bytes32,address,uint256,uint256)", +"78bee6b4": "transferToAnotherAddr(address,uint256,bytes32)", +"78bf2b53": "setToken(address,uint256)", +"78c01961": "EmitEntityIds(address[])", +"78c24e9b": "adminSetFeeDialNumber(uint256)", +"78c2c849": "burnUnicorns()", +"78c37a45": "amendCount()", +"78c38a79": "setOwnedArea(address,uint256)", +"78c3b3a5": "futureRoundWallet()", +"78c3df77": "addProfitPerShare(uint256,address)", +"78c3e2ec": "createTask(address,string,string,uint256)", +"78c3e7a4": "generateCardsFromClaimForOpponent(address,address)", +"78c3f298": "pvtTokens()", +"78c53533": "getPoolOwner()", +"78c5e86f": "crowdsaleClosedTime()", +"78c62ca4": "changeDestinationAddress(address)", +"78c68573": "getLineUpEnable_miner(address)", +"78c6d437": "founders_addr()", +"78c70a4e": "allowAddressToSendMoney(address,address)", +"78c7524d": "versionIndex(bytes32,bytes32,address)", +"78c83f71": "rebalance_insert(uint256)", +"78c8cda7": "removeWhitelist(address)", +"78c91d29": "getCountCanAdd()", +"78c9f9cf": "computeEarningsAmount(uint256,uint256,uint256,uint256,uint256)", +"78ca923d": "nearestKnownBlock()", +"78caa728": "getLLV_edit_12()", +"78cac18d": "updateInfo(address,address,uint256)", +"78cb2f56": "DENtoken()", +"78cc180b": "bpSaleIssue(address,uint256)", +"78ce14dd": "CryptotalksToken()", +"78ce341a": "enablePayable()", +"78cf19e9": "reserveTokens(address,uint256)", +"78cfccb5": "REDDCCOIN()", +"78cffc09": "set_location(uint256)", +"78d012a6": "roundIn()", +"78d0a415": "getDthTeller(address)", +"78d18198": "getNextSnapshotBalance(address)", +"78d18bef": "withdrawalsInitiated()", +"78d19e42": "MintableToken(uint256,string,uint8,string)", +"78d22ab0": "getStageMinWeiAmount(uint256)", +"78d34986": "updateKittensRemainingForSale()", +"78d3633b": "illiquidBalance(address)", +"78d38d1a": "SenegalvsColombia()", +"78d45eb6": "checkAccess(address,bytes1)", +"78d46c3f": "listSpriteForSale(uint256,uint256)", +"78d4e808": "fetchCancelledOrdersForPayerByAdmin(address)", +"78d55ac1": "MRCCToken(uint256,string,string)", +"78d5e123": "unstakeTokensManually(address)", +"78d63908": "doBuy(address,uint256,bool)", +"78d63c59": "AMFBToken()", +"78d6525f": "test_validEmptyEqEmpty()", +"78d6fd25": "getRecTransactions()", +"78d74f60": "LyCI(address,string,uint8,string,string)", +"78d7ccea": "ComputeEggsSinceLastHatch(address)", +"78d8615f": "addEvent(uint256,string,bytes32,bytes32,string,bytes32)", +"78d8e17b": "totalGenesisTokens()", +"78d8fed8": "setUnlock(bool)", +"78d9472f": "setDefendBoostMultiplier(uint256)", +"78d9b048": "teamPoolInstant()", +"78d9c387": "newContest(uint32,uint256,uint256,uint32,uint256,uint32)", +"78da32f2": "setUintF1F2F3(uint256,uint256,uint256)", +"78da7ba1": "presaleEndTimestamp()", +"78dbce5f": "GetStakingNow()", +"78dbfd91": "createBuyOrder(address,uint256,uint256,uint256)", +"78dc6b7e": "transferring(address,address,uint256)", +"78dc7017": "getYellowCards()", +"78dc70c0": "feePeriodStartTime()", +"78dda193": "getCarState()", +"78df0fe1": "getProfits(address)", +"78dfd3a9": "getNumParticipants(uint256)", +"78e03373": "operationalAddress()", +"78e0a0bd": "flashSale(uint256,uint256,uint256)", +"78e24ab5": "SALE1_RATE()", +"78e2df0e": "soft_cap()", +"78e4ca77": "Connect4eth(address,address,uint256)", +"78e4d750": "PenPalToken()", +"78e5d841": "HaltableToken(address)", +"78e619df": "DOOMCOIN()", +"78e65d2e": "bridgeValidatorsImplementation()", +"78e7058e": "advisorsTokensHolder()", +"78e77477": "releasedAdvisorsTokens()", +"78e7e5ea": "LAND_ADDRESS()", +"78e80b39": "UserGetPrize()", +"78e8356c": "removeBet(string,uint256)", +"78e8488d": "gameGiftSentAmount()", +"78e870cd": "balances_available_for_crowdsale()", +"78e88c3c": "getMyFee(address)", +"78e89085": "Dispute(uint256)", +"78e8b8fc": "dataSourceCallbackGroup(uint256,uint8,uint8)", +"78e8cab5": "gcpm(uint256)", +"78e90190": "mokenBytes32(uint256)", +"78e95645": "noteChainFee()", +"78e97925": "startTime()", +"78e9f1ba": "minimumBetAmount()", +"78e9f81f": "assignRoleWithExpiration(address,bytes32,address,uint256)", +"78ea787b": "getDefaultAllowance(string)", +"78eb890b": "checkErrors()", +"78eba8fc": "icoCheckup()", +"78ec0adf": "scannedSilverCaps()", +"78ec1eb4": "checkIfEligable(address,address)", +"78ec383a": "MRC()", +"78ec6dbd": "Beth()", +"78ec81a0": "sendEarnings(address)", +"78ec96a0": "GREEN()", +"78eca227": "getBuyOrderInfo(address,address)", +"78ecabe6": "changeAvailableSpend(uint256)", +"78ed2178": "linkFileToTask(address,bytes32)", +"78ed43c1": "administrationContractFrozen()", +"78ed8dfd": "allocateUnsoldTokens()", +"78ed9156": "diary(uint64)", +"78ee6035": "cancelPledgePayment(uint256)", +"78eef9d4": "move_excess_for_bucket(uint256,uint256)", +"78efa1db": "COIN_SUPPLY_ICO_TIER_3()", +"78f0161a": "setGreyGreenPrice(uint8)", +"78f08268": "getUsersCount(address)", +"78f08f2e": "getLineStat(uint256)", +"78f13614": "ATTR_LEASABLE()", +"78f1a5ce": "addTeamAndAdvisoryMembers(address[])", +"78f2144b": "_originalBuyPrice()", +"78f22cc0": "getAuditRegistrar(uint256)", +"78f305c6": "getStartDate()", +"78f55622": "calCurrentVirus(address)", +"78f55de4": "sxpNumber()", +"78f5958f": "setblocksPerMonth(uint256)", +"78f5e0ec": "CampingCoin()", +"78f5e59f": "TOTAL_SUPPLY_VALUE()", +"78f74fbe": "tokenIssuedPrivateIco()", +"78f76779": "batchOrderTrade(uint8[2][],bytes32[4][],uint256[8][],address[6][])", +"78f79187": "DailyAndSnapshotable(uint256)", +"78f7aeee": "tokenAllocated()", +"78f7d9c6": "payBill(uint8,uint256)", +"78fad7bc": "champToken()", +"78faff96": "isSet(address,address)", +"78fbc9ea": "weiToCollect()", +"78fc3cb3": "canTransfer(address)", +"78fc52b3": "processDiceRoll(address,uint256)", +"78fca301": "Menu03(uint256)", +"78fd98d1": "freezeAmount(address,uint256)", +"78fddd69": "MedAIChain(uint256,string,uint8,string)", +"78fe2951": "enableService(uint256)", +"78ff54eb": "updateRestrictedVault(address)", +"7900438b": "registerDevice(bytes32,bytes32,bytes32)", +"79008da5": "addRandomTile(uint16,uint8)", +"790105ff": "withdrawEIP20Token(address)", +"79018524": "Token(uint256,address)", +"79028df3": "GetFirstName(uint256)", +"79032fa7": "storeHorsey(address,uint256,address,bytes32,uint8,uint8)", +"790377dc": "getLastAuditId(address)", +"7903d8c8": "canSend()", +"79049227": "lockupSeconds()", +"7904d388": "ethRec(uint256)", +"7904f688": "distributePrizes(uint16)", +"79053739": "damage(uint8[176],uint8,uint8)", +"790587d1": "updateIpfsGateway(string)", +"79061e96": "withdraw_ether()", +"7906305b": "upgradeTier(string)", +"790683d3": "getTopicByOffset(uint256)", +"79081feb": "getCardLeaseLength(uint8)", +"7908f25c": "thirdTeamWithdrawal()", +"79099e15": "MAX_USD_FUND()", +"7909da6f": "createExchange(uint256,uint256,uint256)", +"7909f569": "gasForFLKD()", +"790a091e": "test_rewardPoolShare_notTranscoder()", +"790b1656": "ThreeEtherFree()", +"790be9b5": "SETC(uint256,string,string)", +"790c33b8": "getReportingTokenOrZeroByPayoutDistributionHash(bytes32)", +"790ca413": "launchTime()", +"790cbfa0": "createMeshPoint(int256,string)", +"790d4e11": "getLosersOnePercent(uint256)", +"790dd0f5": "fuint256(uint256)", +"7910085d": "fipsIsRegistered(bytes20)", +"79103c2e": "RejectedApplication(address,uint256,string)", +"7910830a": "setCrowdSaleStatus(bool)", +"7910867b": "isApproved(uint256)", +"7911d80a": "Presale1Sold()", +"7912b0f1": "HOPEToken()", +"79132085": "APSP()", +"79141f80": "getBetInfo(uint256)", +"791455dd": "addPieceAndHash(string,string,string,address)", +"79147cf0": "_result()", +"79147d07": "UnsoldAllocation(uint256,address,uint256)", +"7914d10f": "setminContribution(uint256)", +"7915785e": "accountsToAllocate()", +"791581c6": "addTime(uint256,uint256)", +"7915c069": "register(string,address,address)", +"7915c9e0": "verifyTransfer(address,address,uint256,bool)", +"79162aeb": "pauseEmergence()", +"79164773": "nextForkBlockNumber()", +"7919233f": "emitWorkOrder(address,uint256)", +"7919792b": "doThrowOnDivByZero()", +"791ac4e5": "_getUtilizationRate(uint256)", +"791af2b6": "dkBB(bytes32)", +"791af8e4": "totalExtraTokens()", +"791b1150": "notify_payment_reject(uint256)", +"791b51f1": "Consulting(address,address)", +"791bbe35": "TheDeadShitCoin()", +"791cbc4f": "stopConvertTokens()", +"791dd41c": "ownerOverride(uint256)", +"791f0333": "equalStrings(string,string)", +"792037e3": "shut(address,bytes32,address)", +"79203dc4": "totalAllocation()", +"7920d804": "getKing()", +"7920f72c": "_tag(int256,string)", +"79214878": "regionExists(uint256)", +"792166b8": "createEscrow(uint256,uint256,address,address)", +"79216aec": "ManagedToken(address,address[])", +"79216f5f": "add_monster(uint16,uint16,uint16)", +"79217982": "preIcoMinInvest()", +"79219a24": "getLockRecordCount()", +"7922841c": "registerAssetHeader(int256,string,string,string,string,string)", +"7923715b": "RPEICO_TOKEN_SUPPLY_LIMIT()", +"79250dcf": "getApprovePreSignedHash(address,address,uint256,uint256,uint256)", +"792544af": "get_DB_info(uint256)", +"79254bb8": "right29(uint256)", +"792651b0": "app_storage()", +"7927448a": "getTicketTime(bytes32)", +"7927bc0c": "list_token_bid(address)", +"79287790": "get_milestones_information(uint256)", +"792a152d": "addRegion(uint16,uint256,string)", +"792ad365": "lastBlock_f15Hash_uint256()", +"792b22c6": "returnCoupon(address[3],bytes32)", +"792b476b": "getPositionCount1(address,address)", +"792c02ea": "stagesLength()", +"792c91c2": "setRecordId(uint256,bytes32)", +"792cb544": "_setCertificateSigner(address,bool)", +"792e1ffc": "authorize(uint8,bytes32,bytes32,address)", +"792e79c5": "stealCardWithTwitterId(uint256)", +"79304063": "depositsSigned(bytes32)", +"7930a433": "withdrawDelta(uint256)", +"7930acd6": "getCCH_edit_27()", +"79318d81": "closeRefunds()", +"7931a765": "Issued(uint32,address)", +"793267f0": "vaildBalanceForTokenCreation(address)", +"79326c01": "isSaleOwner()", +"7932f07f": "getRegionBlockUpdatedAt(uint256)", +"793318eb": "MMMPCoin()", +"79332159": "Bet(address,address,uint256,uint256,uint256)", +"79341ca1": "getRoundAmtPot(uint256)", +"7934b50f": "_lockToken(uint256)", +"7934f4ed": "processPayment(uint256,bytes)", +"7935326b": "preICOTokensAllocated()", +"79362167": "getBillboard(address)", +"79372f9a": "ClaimReward()", +"7937f46d": "setBBO(address)", +"79381c80": "performRefund(bytes32,uint8,uint256,uint256)", +"7938cc42": "allocateProofTokens(uint256)", +"7939a10b": "getSellValue(uint256)", +"793a2cd1": "isPausedICO()", +"793a8c95": "owner_updatePayout(uint256)", +"793c0fd4": "authorizeSpender(address,bool)", +"793ca3fe": "getFirstCycleBlock()", +"793cd71e": "cashOut()", +"793cf430": "option30name()", +"793d424e": "getBLAddress()", +"793d7165": "fSqrt(uint256)", +"793dae12": "acceptSettlement()", +"793e9b0b": "OPTION_POOL_ALLOC()", +"793ec6c2": "turnOffCanUpdateBackWindowAdjustmentRatio()", +"79409b19": "EthToUsd()", +"79412da6": "withdrawalTokens(address,address,uint256)", +"7941a062": "getBlocksRemaining()", +"7941d7bd": "changeTokenOwnerByAdmin(uint256,address)", +"79420fb1": "tierTotal()", +"79428570": "getTeamId(uint256)", +"7943f2ec": "withdrawCoinToOwner(uint256)", +"79444ad3": "handleForTokenId(uint256)", +"7944875b": "StopSale()", +"7944b4b9": "mileStone(address,uint64,uint8)", +"79456cb6": "test_1_method()", +"79459ac3": "buy10(address[],address[],uint256[],bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"794752c7": "askForgiveness(string)", +"79480a4c": "getOrderValuesFromData(bytes)", +"79480fe3": "nextMintFeeAbs(uint256)", +"79485d41": "DeauthorizeServiceProvider(address,address)", +"7948a9c5": "TokensWithdraw(address,uint256)", +"7948f523": "setAmbiAddress(address,bytes32)", +"79491370": "closeSale(address)", +"79492f30": "allocationFor(uint256)", +"7949859e": "UpdateToeknLimitICO(address,uint256,uint256)", +"794ab0a8": "etherPriceInDollarIn()", +"794b0c62": "DAICO()", +"794b0e6b": "addExperience(address,uint256[],int32[])", +"794c0c68": "stakingEpoch()", +"794cea42": "search(address,address[])", +"794d0d8d": "WithdrawVault(address)", +"794df640": "updateUsdEthRate(uint256)", +"794e9434": "awardWeeklyLottery(address,uint256)", +"794ee205": "createMarriage(bytes32,bytes32,uint256,bytes32,bytes)", +"79501a83": "isBiometricLocked(address)", +"79502c55": "config()", +"7950c5f8": "verifyingKey()", +"7951357e": "Suspended()", +"79515566": "calcAllowedWeisToInvest(uint256)", +"7952a0ed": "MetaProject()", +"79530087": "BirCoin()", +"79538e47": "addVpf(bytes32,uint256,uint256,uint256,uint256,int256[])", +"7953ae77": "MainSaleDeadline()", +"7953e0ab": "dateEcoRelease3()", +"79544754": "getBonus(address,uint256,uint256)", +"79557e4f": "traded_token_balance()", +"7955a65f": "adminWithdraw(address[3],uint256[3],uint8,bytes32,bytes32)", +"7955dd45": "player_withdrawPendingTransactions()", +"795612d6": "buyItem()", +"79564072": "directorLockUntil()", +"7956f46a": "AggiungiProfessore(address)", +"7957170b": "getApproveRecord(uint256)", +"795741c8": "withdrawEscrowFees()", +"79583e22": "buyOrder(address,uint256,uint256)", +"7958533a": "meta(uint256,bytes32)", +"795a16e3": "setRecipient(string)", +"795b0e16": "TransferAllowed()", +"795b5b83": "createSaleCardToPlayer(uint256[],address,address)", +"795b9a6f": "scheduleCall(address,bytes4,uint256,bytes)", +"795bfd7b": "togglePreventDoublePurchases()", +"795c1713": "FCoinToken()", +"795c6437": "isWorkflowState()", +"795da78f": "coinsIssuedCmp()", +"795dbede": "idx()", +"795e09ef": "privilegedAccountsCount()", +"795e4547": "changeContractUpgradability(bool)", +"795ebb68": "setTokensDecimals(uint256)", +"795fcd6e": "RelentlessConscience1Token()", +"795ff8aa": "safeTokenWithdrawal(uint256)", +"7960d19b": "MediatedTransactions_Log(uint256)", +"79618233": "createDividendWithCheckpoint(uint256,uint256,address,uint256,uint256,int256,bytes32)", +"79624add": "MAX_DAILY_SOLO_SPEND()", +"7962525c": "getRoundNumberOfBets(uint256)", +"79630bd8": "rate10()", +"7963b478": "assertEq28(bytes28,bytes28,bytes32)", +"79644576": "newProposal(uint256,address,uint256,string)", +"796485f9": "back_giving(uint256)", +"7964dd2b": "excludeAddressFromStaking(address,bool)", +"7964ea87": "claim(bytes32,uint256,bytes)", +"79655bd0": "getStages()", +"7965bb86": "STQPreICO2(address,address[])", +"79662bd5": "withdraw(string,address,uint256,string)", +"796676be": "urls(uint256)", +"796686a9": "book(uint256[],uint256)", +"7966c431": "subString(string,uint256,uint256)", +"796736f0": "tradeBalances(address,address,uint256,uint256,address,uint256,bytes32)", +"7967a50a": "preSaleEndDate()", +"7968196c": "amountRaisedInUsdCents()", +"79681c94": "buyRoundDataRecord(uint256,uint256)", +"79683e63": "inviteInit(address,address)", +"79687166": "uintToBytesForAddress(uint256)", +"79694f08": "topUpDelegate(address,address,uint32,uint192)", +"796a6ec9": "Credited(address,uint256,uint256)", +"796a8076": "updateAuctioneer(address)", +"796b89b9": "getBlockTimestamp()", +"796c0c78": "allocatedTokens(address,uint256)", +"796c5b08": "getPenaltyFactor(uint256)", +"796c5e5b": "saveHash(bytes8,string)", +"796c8902": "getInvestor()", +"796d67da": "numberOfProposals(bytes32)", +"796d8950": "StromkontoProxy()", +"796dc916": "pauseResumeContract(bool,bytes32)", +"796f6281": "tokenFront()", +"7970785d": "withdraw(address[],uint256[],address[])", +"79710f07": "drainERC20(address)", +"79716e43": "confirmTransaction(bytes32)", +"7972d079": "setMfgValues(string,string,string,string,string,string)", +"79735d54": "hasEnoughStake(address)", +"7973830a": "getMapValue(uint256)", +"7973b370": "ProudOfYourCoin()", +"7973c57f": "fechVoteNumForCandidateBySnapshotBlock(address,uint256)", +"7974a9e6": "publishOption(uint256,uint256,uint256)", +"7974f8fe": "changeTime(uint256)", +"7974fdbd": "secondStageRefund()", +"79753e82": "initAirdrop()", +"7975752c": "ScabbageToken()", +"79758d46": "reading_card_at(uint8)", +"7975c56e": "oraclize_query(uint256,string,string)", +"7975c609": "accountLevels()", +"7975ce28": "buyTokens(uint256,uint256)", +"7976eaa2": "getBonusTokens(uint256)", +"79770d5f": "minBidDifferenceInSzabo()", +"7977f708": "addRoleCapability(uint8,address,bytes4)", +"79787196": "killTotalSupply()", +"7978c7ed": "exotownToken()", +"7978f1b2": "licenseCostNumerator()", +"79798ccb": "startTokenSale()", +"79799193": "FreezedCash()", +"797a49b6": "createPoll(string,uint8)", +"797af627": "confirm(bytes32)", +"797b5877": "NCU(uint256,string,string)", +"797bfaf3": "ico1endTime()", +"797c6f3a": "advertisingUse(uint256,uint256)", +"797d660f": "getCandidateNumberList()", +"797d8b85": "calculateDividend()", +"797d9437": "loadedRefund()", +"797df209": "configureVesting(uint256,uint256)", +"797e2aec": "addCharacters(uint8)", +"797f6bb1": "raiseTraderUnregistered(address)", +"797f73ff": "alreadyClaimed()", +"797f87ba": "chests()", +"79808552": "cancel_lottery()", +"7980a1ab": "increasePaymentsBalance(address,address,uint256)", +"7981e7f1": "generateTokensByList(address[],uint256[])", +"7981fd67": "loikikd()", +"7982abf0": "testTransferGas()", +"7983eb31": "distributeEvenly(uint256)", +"798405fc": "Hold(address,address,uint256,uint256)", +"79843715": "crowdSaleMax()", +"79848daa": "setReleaseManager(address)", +"7984932e": "releaseNow(uint256,uint256,uint8[],uint256,uint256,uint256,string,string)", +"79853c7e": "payFromCampaign(bytes32,address,address)", +"79859a78": "setMaxAgonCount(uint256)", +"7985b860": "AboutBill(uint256)", +"7985ee8f": "deleteRewards()", +"7986c724": "BOUNTY_TOKENS_LIMIT()", +"7986cbfc": "getGroupbyIndex(uint256)", +"798764ec": "ShowCoinToken()", +"79878757": "passTokensToTheTeam()", +"79881b5a": "setPresaleStartsAt(uint256)", +"79885b91": "LIB()", +"79891359": "getOnePlayCoin()", +"798929da": "distributeCoins(address,uint256,uint256,uint256)", +"798974dd": "getNumProposals()", +"798a970b": "setUnitCoinProductionIncreases(address,address,uint256,uint256,bool)", +"798b18fd": "currentRateM()", +"798b3ecf": "processCooldown(uint16,uint256)", +"798b7a71": "callOnce()", +"798bede1": "advisorSupply()", +"798c1f2a": "do_bet(uint256)", +"798c6e0f": "clearStages()", +"798ce54f": "payoutPartial(uint256)", +"798d05fa": "getCountTeams()", +"798ec637": "transferEtherToSender(uint256)", +"798f3e85": "PublicTokenReleased(uint256)", +"798f9790": "getResoDetails()", +"798fd178": "getFrom()", +"79902299": "recalculateTotalFees()", +"79905753": "reclaimFundMultiple(address[])", +"7991c63a": "MetaChanged(uint256,bytes32,bytes32)", +"7992e39f": "TierAmount()", +"7993e5c2": "Devcon2TokenForTesting()", +"7994f55b": "setEndpointParams(bytes32,int256,bytes32[],int256)", +"79953633": "ownersProductAdded(address,uint256,address)", +"79955b4c": "richardAddr()", +"7995b15b": "nowInSeconds()", +"7995ba90": "withdrawExcessToken(address,address)", +"7995ed8c": "ClaimedWei(uint256)", +"79968b77": "sellLicense()", +"79974ce8": "MiningAttemptEvent(address,uint256,uint256,uint256,uint256)", +"79978630": "settleChannel(address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)", +"7997b997": "doMelt(uint256,uint256)", +"79981387": "setWhiteList(address[],address,bool[])", +"79984882": "getProxyExecID(address)", +"79987504": "ECN(uint256,string,string)", +"7998a1c4": "identifier()", +"79991997": "enter(bytes32,bytes8,uint16)", +"799957d2": "TTC()", +"7999c7ca": "myUsername()", +"799a5359": "transferToken()", +"799ae223": "flipCoin()", +"799b3864": "getVersionLength()", +"799b7bb8": "PRE_ICO_ADDR()", +"799c0468": "withdrawMarketingAndCommunityOutreach()", +"799c7b69": "_resetGame()", +"799c8ef2": "callScheduler()", +"799cd333": "sign(bytes32)", +"799d916b": "getObjectValueByKey(string,string)", +"799dcf7e": "staticArrayTests()", +"799efef0": "setLockedWalletAmount(address,uint256,bool)", +"799f0c5d": "locked_funds_for_revealed_spins()", +"799f4079": "unholdSubscriptionOffer(uint256)", +"799f7043": "recordBet(bool,uint256)", +"79a0e5be": "changeMessage(uint16,string)", +"79a18b3a": "isRoundThreeSalePeriod(uint256)", +"79a1c1f6": "proposalStatus(bytes32)", +"79a1ed16": "WithdrawalQuick(address,uint256,uint256)", +"79a2bbec": "_addResources(address[],bytes4[])", +"79a2bfa5": "PRE_SALE_MIN_BUY()", +"79a34619": "startTimeMain()", +"79a3510d": "thisVoterExists()", +"79a37bd0": "tellTime()", +"79a410a7": "bonusesOf(address)", +"79a411ff": "ScareERC20Token()", +"79a4b4bd": "sellPrice(uint8)", +"79a4ee93": "testDeregisterCustomer()", +"79a6877f": "initializeToken(string,uint256,uint256)", +"79a7cfee": "setAddress(bytes32,bytes32,address)", +"79a7de4f": "buildId(address,uint256,bool)", +"79a8416e": "checkPayment()", +"79a84750": "createTokensTo(address,uint256)", +"79a85e6c": "getProductInfo(uint256)", +"79a87b19": "migrationDestination()", +"79a88683": "startCrowdsalePhase3Date()", +"79a8945c": "isDeveloper()", +"79a89b06": "releaseExpiredEscrow(address,address)", +"79a8ba40": "createRequest(uint256,address,uint256,string)", +"79a8f2fa": "processRoulette(address,uint256,bytes32,uint256)", +"79a958c2": "codeUpdateState()", +"79a9986c": "addBadge(string,uint256)", +"79a9e9ea": "IkuraToken()", +"79a9f14d": "getBcouponBalances(address)", +"79a9f23f": "transferAllowedAdd(address)", +"79a9fa1c": "buyback(uint256)", +"79a9fd36": "SUAPPToken()", +"79aa024e": "setAirdropAdmin(address,bool)", +"79aa668d": "setEventsContract(address)", +"79ab295f": "SALE1_CAP()", +"79abb2f5": "play_paper()", +"79aca4e0": "acceptSmartTokenOwnership()", +"79ae0c0a": "updatePrice(bytes32,uint32,uint64,uint32)", +"79ae1c36": "setStopDefrost()", +"79ae77cf": "OEM_Wallet()", +"79ae9c5e": "clearLC()", +"79af55e4": "increaseLockTime(uint256)", +"79af6547": "addLockStep(uint8,uint256)", +"79af8380": "addCrowdsaleContract(address)", +"79b0797c": "AmIPlayer1()", +"79b2614d": "currentMintNonce()", +"79b37a86": "usdRate()", +"79b45b18": "removeEmployeesWithExpiredSignaturesAndReturnFadeout()", +"79b466b0": "TOTAL_TEAMS()", +"79b4a2c7": "transferMultiAddress(address[],uint256[])", +"79b5b1d1": "EvaCurrency(string,string)", +"79b7b30b": "endTrading(bool,bool)", +"79b80455": "onTimeLock()", +"79b9a060": "changePayout(uint256)", +"79ba5097": "acceptOwnership()", +"79ba50b1": "LAME()", +"79ba7b61": "ServiceCoin()", +"79baa8a9": "BasicIncome_CoFund()", +"79bae8a1": "test_failed_payment_throwing_token()", +"79bc2040": "canbuynum()", +"79bc46b3": "SELL_HARD_LIMIT()", +"79bcabf4": "Authority()", +"79bcae2a": "createFuel(uint256,string,uint256,uint256,uint256)", +"79bd04f2": "_bidLaterShip(uint256,uint256,address,address)", +"79bd42cf": "END_DURATION_BETTING_BLOCK()", +"79be02af": "Read(address)", +"79bed048": "turnOffCanUpdateAmountToTakeAsRake()", +"79bf8df3": "mModeratorKeys(uint256)", +"79bfaaeb": "visaLength(address,uint256)", +"79c0909e": "getRandomFromBlockHash(uint256,uint256)", +"79c0b9fb": "sanityCheck(uint256,uint256,int8,int8,int8)", +"79c0d5ae": "tokensInvested()", +"79c0f30e": "advancedThreshold()", +"79c12db5": "EventTicket(uint256,uint256)", +"79c20b41": "changeArtName(string,string)", +"79c30e49": "openCdp(uint256,uint256,uint256,uint256,address)", +"79c310a6": "increasePlayersJadeProduction(address,uint256)", +"79c3199d": "preIcoStartDate()", +"79c36409": "DifToken(uint256,string,uint8,string)", +"79c3dd32": "thirdLevelPrice()", +"79c3ddc1": "isPackageOwner(string,address,address)", +"79c3f694": "_getPVPFeeByLevel(uint256)", +"79c4264a": "earlyBirdMinPerPerson()", +"79c4264b": "matchCount()", +"79c597ff": "ends()", +"79c5ba97": "enterBidForGanToken(uint256)", +"79c5c6b6": "MyWill()", +"79c5cb1c": "createItem(string,uint256,uint256,uint256)", +"79c62711": "createJob(string,uint256,uint256)", +"79c63c40": "dxfOpen()", +"79c65068": "mintToken(address,uint256)", +"79c66892": "EmrCrowdfund(uint256,uint256,string,string)", +"79c69195": "setParamsTotalSupply(uint256)", +"79c6a1b8": "registerAdmin(address,string)", +"79c6b667": "registerPoA(string,bytes32,uint64[],uint64[],address,address,string)", +"79c6c11a": "takeEther(uint256)", +"79c7180d": "Erc20SummaryLogic(address)", +"79c73464": "numAdrs()", +"79c749cd": "generateContentID(string)", +"79c74a38": "Fomo5d()", +"79c7c806": "proofExists(string)", +"79c7f38c": "_freezeAccount(address,bool)", +"79c84100": "getFreezeHourglass(bytes32,bytes32)", +"79c88f20": "datacoin()", +"79c8fe30": "setMaximumGasPrice(uint256)", +"79c9e396": "test_oneInvalidEqBytes2()", +"79ca0792": "beneficiaryMultiSigWithdraw(uint256)", +"79ca9ad4": "tokensToEth(uint256)", +"79caf670": "ethealController()", +"79cb5a2f": "setEtheraffle(address)", +"79cb650f": "testAliceFooKill()", +"79cb657a": "setRateStalePeriod(uint256)", +"79cbfd18": "computeCurrentPriceImpl(uint32,uint64)", +"79cc6790": "burnFrom(address,uint256)", +"79cc90c4": "repossess()", +"79ccd1a1": "BetherBank()", +"79cce1c5": "getReleaseHashes(uint256,uint256)", +"79cd421d": "ERCTestToken()", +"79ce0515": "removeCP(address,address)", +"79ce37e1": "deadline_modify(uint256,uint256)", +"79ce9fac": "transfer(bytes32,address)", +"79cef607": "_purchaseTokens(string,address,uint256)", +"79cf3a7a": "zeroOut()", +"79d007f7": "forceOffsetExtraFeeRate()", +"79d00c5d": "EasyCrowdsale()", +"79d10a76": "SedPosToken()", +"79d116ed": "setWhiteListingAdmin(address)", +"79d1d4fa": "verify(bytes,bytes,bytes,bytes32)", +"79d220ae": "setCrowdsaleOpenTimerFor(uint256)", +"79d28ac9": "balanceOfCreator(address)", +"79d2e48d": "upgradeFinalize()", +"79d303ae": "doStart()", +"79d3d547": "grantToken(address)", +"79d42bfe": "CLNRaised(address,address,uint256)", +"79d4fe00": "totalTokensICO3()", +"79d60cdf": "LongChain()", +"79d6348d": "sign(string)", +"79d68f79": "COIN_PER_ETHER_BOARD()", +"79d88d87": "forbid(bytes32,bytes32,bytes32)", +"79d8cc7b": "setFlights(uint16[],uint16[],uint256[],uint256[])", +"79d95c5a": "setMaxCap10X(uint256,string)", +"79d9e979": "minimumDealAmount()", +"79da06a2": "BlockSwapWrapperGolemNetworkToken()", +"79da9747": "switchCrowdsale()", +"79db228a": "RegisterList(address[],bool)", +"79db5f67": "removeRole(address,uint256)", +"79db671d": "upadateContributorsCount(uint256)", +"79db77a3": "removeStaffWhitelist(address[])", +"79dbdbb9": "CKYAdv(uint256,string,string)", +"79dc04c0": "BCTVToken(uint256,string,string)", +"79dc10a6": "takeOwnershipFeePercents()", +"79dd02cb": "PerfectCoinControl()", +"79dd822a": "setSignatureRest(bytes,uint256)", +"79ded380": "setRabbitMother(uint32,uint32)", +"79df2a4c": "ReferredInvestorAddition(address,address)", +"79df4fa2": "startDeposit()", +"79df896d": "ScandinavianEKrona()", +"79e05a36": "getUintField2()", +"79e097f0": "addVotePair(address,address)", +"79e0ef1b": "withdrawBalanceAmount(uint256)", +"79e0f59a": "setEarlyParicipantsWhitelist(address[],bool[],uint256[],uint256[])", +"79e1250d": "setTotalToken(uint256)", +"79e12f7e": "getBoardByHash(bytes32)", +"79e1c9dc": "changeAmountPerEther(uint256)", +"79e1fa2e": "convertToEur(uint256)", +"79e23483": "addLockValue(address,uint256)", +"79e2bbea": "getLifeVal()", +"79e35d0b": "poolcoin(uint256,string,string)", +"79e468ef": "createLand(address)", +"79e54e6e": "AleKoin()", +"79e58973": "coinBalanceOf()", +"79e58cfd": "transferIcoship(address)", +"79e79023": "KuaiMintableToken(address,uint256)", +"79e8b8eb": "lastSubTokenCreatorOf(uint256)", +"79eaaf61": "totalTiers()", +"79eac7c3": "confirmOccupancy()", +"79eb16d4": "calculateShareETH(address,uint256)", +"79eb26cc": "RANGE_SCALE()", +"79eba0b6": "showPrivateVars()", +"79ec3864": "getMemberAtAddress(address)", +"79ec4f19": "setStartAndEndTime(uint256,uint256)", +"79ed13a7": "availableOptions()", +"79ed3d69": "setNextCommonTTMTokenId2(uint64)", +"79edfa7d": "setMetadataUrl(string,string)", +"79ee54f7": "getRewards(address)", +"79eee392": "DEVELOPERS()", +"79ef6858": "addItemToMenu(bytes32,uint256)", +"79ef704e": "addLogic(address)", +"79efb507": "oldData()", +"79f00703": "setEthartArtReward(uint256)", +"79f015b2": "getCarProductName(uint32)", +"79f0b427": "log_demurrage_fees(address,address,uint256)", +"79f0c524": "ParseHeaderData(bytes)", +"79f0cd62": "revertTokensByKYC(address,address)", +"79f0f7b3": "safeMulWithPresent(uint256,uint256)", +"79f119cd": "PXP()", +"79f1433c": "post_energy_balance(int256)", +"79f16ba1": "ShanDianLian()", +"79f1987d": "thirdExtendedBonusSalesEnds()", +"79f1a6ef": "_noMatchingPairs()", +"79f3b481": "putTreeOnSale(uint256,uint256)", +"79f57e68": "getAsAddress(bytes32)", +"79f59f09": "ParsecTokenERC20()", +"79f645ea": "RANDOMIZER_RETRY_COUNT()", +"79f64720": "cancelAndReissue(address,address)", +"79f68f85": "forwardFunds(bool)", +"79f74fd5": "ControllerSet(address)", +"79f7a873": "isAtLeast(uint256,uint256,string)", +"79f7e600": "setApproveOwner(uint8,bool)", +"79f90d6c": "ownerPauseContract()", +"79f9578c": "queryBalanceMinter()", +"79f96600": "getCurrentFeeWindow()", +"79f9b10b": "registerAsExportingAuthority(address)", +"79f9cc72": "setGasLimits(uint256,uint256)", +"79fb18ac": "transferSmartTokenOwnership(address)", +"79fc3682": "addressBalances(address)", +"79fc4687": "receiveDividends()", +"79fd86cc": "airDrop_(address,address,address[],uint256)", +"79fd8c24": "PriceUpdate()", +"79fdc915": "_decideMarket(uint256)", +"79fdf548": "updateTokenInvestorBalance(address,uint256)", +"79fe3b06": "setPercentTokensToSale(uint256)", +"79fed7cb": "checkMinContribution()", +"79ff69d9": "paymentSettle(uint256)", +"79fff7a9": "logReputationTokenMinted(address,address,uint256)", +"7a00698f": "_doProposal()", +"7a0092b5": "Aunder()", +"7a009c22": "increaseBank()", +"7a00cf46": "isCloseable()", +"7a00e2e3": "removeReferrer(address)", +"7a013105": "ico_start()", +"7a02a973": "resetStaking()", +"7a02dc06": "getInfo(bytes32)", +"7a02eb1d": "Maesawa()", +"7a039beb": "GXX()", +"7a041e7e": "fundsFromPreSale()", +"7a044323": "accumulated()", +"7a04581c": "getBetclose()", +"7a04855a": "EplusCoinToken()", +"7a04f9ea": "getPhaseExpiry()", +"7a060b53": "GOLD_AMOUNT_TPT()", +"7a07424e": "promotionRatio()", +"7a08339d": "setFakeTime(uint256)", +"7a091f95": "batchPunchIn(address[],uint64[])", +"7a09588b": "cashoutEOSBetStakeTokens_ALL()", +"7a096f53": "getTransfer(address,address)", +"7a09defe": "totalMonster()", +"7a0a2e00": "auctionEndHashing(uint256,uint256)", +"7a0b0a3f": "MAX_STAGE_1_LIMIT()", +"7a0b294c": "buyPresaleTokens()", +"7a0c396d": "giveMeNILs()", +"7a0ca1e2": "attach(address)", +"7a0d819e": "casinoDeposit()", +"7a0e03ec": "getUInt8Value(bytes32)", +"7a0e09aa": "getConsent(uint256)", +"7a0e2d1a": "updateUser(bytes32,bytes,bytes32,bytes32)", +"7a0ecfc2": "LogUpdatedInitialTimestamp(uint256)", +"7a0fee37": "MinerRandomNumber(uint256)", +"7a10f17b": "PIN_PRICE()", +"7a1126f0": "houseWithdraw(uint256)", +"7a118fdc": "SHNZ()", +"7a11dfb4": "redeemBounty(uint256,uint256,uint8,bytes32,bytes32)", +"7a12cabf": "owner_updateRelay(address,bool)", +"7a12cdb8": "cybToken()", +"7a1395aa": "setDecimals(uint8)", +"7a13d14c": "disputeAutomatedReport()", +"7a1439d7": "payOffClaim(bytes32,uint256)", +"7a14f465": "crosairSoldCount()", +"7a152c11": "unpause(uint256,uint256)", +"7a153043": "disbursements(address,uint256)", +"7a1593d6": "freeze(address,string,uint256,uint256,uint256)", +"7a15eb8d": "lottoIndex()", +"7a16c6dd": "setsetperiod(uint256)", +"7a16cbe3": "setData_4(uint256)", +"7a178741": "getMemberAddr(uint256)", +"7a17feff": "setTransferLimit(uint256)", +"7a186ebf": "WHITELISTED_PREMIUM_TIME()", +"7a1903f2": "checkBonus(uint256)", +"7a1a0604": "AuctusTokenSale(uint256,uint256)", +"7a1a7e7f": "itemCancelMarkets(uint256)", +"7a1ab407": "bountyOwnersTokens()", +"7a1ac566": "registerSale(address,address)", +"7a1aeb3c": "getTokenCount(bool)", +"7a1b26a8": "TransactionAccepted(uint256)", +"7a1b63bc": "buyCMTAgainstEther()", +"7a1bba3a": "TestFoo()", +"7a1bbb40": "getNegativeArray()", +"7a1bcae9": "playerDecision()", +"7a1bf7f6": "PreIcoClosedManually()", +"7a1c0063": "emitExecuted()", +"7a1c39cb": "setIII_R2(uint256)", +"7a1c44f8": "DappleAirdrops()", +"7a1cf806": "configureTokenDividend(address,bool,address,bytes)", +"7a1d66dd": "determinePosition(address,address)", +"7a1d8570": "getSendVal()", +"7a1e16bc": "signEscrow(uint256)", +"7a208990": "Arcus()", +"7a20ff15": "getWeiAllowedFromAddress(address)", +"7a223758": "detOwner()", +"7a22393b": "setTokenSeller(address)", +"7a233fb3": "redeemPrice()", +"7a26924f": "timeToFinishTokensSale()", +"7a2756f2": "getWager(uint256)", +"7a276bb6": "getDeveloper(uint256)", +"7a28399b": "approveProvider(address)", +"7a28e60f": "EXTRADECOIN(string,string,address)", +"7a28f8bc": "accountData()", +"7a290fe5": "burnRemainToken()", +"7a29332d": "buyAllOutcomes(uint256,uint256)", +"7a294055": "VoteReceived(string,address,uint256)", +"7a2a0456": "swapEtherToToken(address,uint256)", +"7a2a3931": "galleassetTransferFrom(address,address,uint256)", +"7a2a530d": "getAllDevices()", +"7a2b0587": "isReserve(address)", +"7a2b2dd7": "Metaexchange(address,address,address,uint256,uint256,uint256)", +"7a2b78e5": "findIndex(uint256,uint256)", +"7a2b9116": "checkValidTk(address)", +"7a2c1b71": "CheckProfit(address)", +"7a2c8506": "getUserReward(address,bool)", +"7a2cc6d8": "_createPermission(bytes32,address[],bytes4[])", +"7a2e1c61": "getSoldCountOfPackage(uint256)", +"7a2e41d1": "InitiateCryptoGamers()", +"7a2ecfdb": "setMostSent(uint256)", +"7a309005": "devSENSDestination()", +"7a30ebed": "holyFoundersFundDeposit()", +"7a3130e3": "migrateFrom(address,uint256)", +"7a314ce2": "FUND_GATHERING_TIME()", +"7a319590": "changeFees(uint256,uint256,uint256)", +"7a31ee21": "MinimumFundingGoalChanged(uint256)", +"7a32c84c": "getDonatee()", +"7a341bc7": "setFounder(address)", +"7a34cedb": "purchaseWithBTC(address,uint256,uint256)", +"7a350141": "BalanceChanged(address,address,uint256)", +"7a360ec3": "forwardWei()", +"7a3629dc": "setMinimumStakingRequirement(uint256)", +"7a362fe1": "ICO_START1()", +"7a366d14": "softCap(uint256)", +"7a37f56e": "PandorasWallet()", +"7a38012e": "handleEarlySaleBuyers(address[],uint256[])", +"7a38417b": "delayOpeningTime(uint256)", +"7a386e88": "setupAmbi2(address)", +"7a387bc2": "returnNote(uint256)", +"7a38f9eb": "isZero(uint256)", +"7a396264": "winAmount2()", +"7a3979da": "pay_money()", +"7a39bb28": "FirstPeriodCapUpdated(uint256,uint256)", +"7a3a0e84": "fundingGoal()", +"7a3aa8ea": "CoXxMoXx()", +"7a3abce9": "withdrawComB()", +"7a3b0b5d": "positive_terms_of_Service()", +"7a3c4c17": "currentPrice(uint256)", +"7a3cbbe4": "TIMER_STEP()", +"7a3d2e5c": "changeArtUrl(string)", +"7a3d4b1a": "createSwap(uint256,address)", +"7a3dae68": "_createKT(string)", +"7a3dbc16": "getInitialPrize(uint256)", +"7a3e0013": "setArbitrator0(address)", +"7a3e286b": "currentCollectRound()", +"7a3eeb57": "setdteamVaultAddr2(address)", +"7a3f5781": "setAllowRefunds(bool,uint256)", +"7a3fa650": "IONIA()", +"7a4058dd": "confirmDealCompletionByPatient(bytes16,bool)", +"7a40618d": "emitContractRemoved(address,address)", +"7a408454": "burn(bytes32,uint256)", +"7a4093b8": "SETUP_DONE()", +"7a427d98": "forceReturn()", +"7a42a9cd": "checkOwner(bytes32)", +"7a43cb62": "positionWeightOf(uint256,uint256)", +"7a442a9b": "isClaimable(string)", +"7a444072": "getDeveloper()", +"7a44d730": "PGM_Coin()", +"7a457855": "getNumeroMensajes()", +"7a468170": "ethCap()", +"7a4690fb": "TOKEN_SALE1_NORMAL()", +"7a476a42": "queryPublishedContractTemplate(uint256)", +"7a479160": "getRequestArgs(uint256)", +"7a4822d7": "addTransaction(address,uint256,string,bytes)", +"7a4843ca": "product3_luckybuyTracker()", +"7a48b408": "MCIM()", +"7a48f5c7": "start_pg_quiz(string,string)", +"7a4aa92f": "provideTeamHolderToken()", +"7a4b7075": "getMake(uint256)", +"7a4b762b": "synechronToken()", +"7a4bfebb": "FixedGameToken(bytes32,uint256,address)", +"7a4c2e9a": "access_hidden_layer(int256[],uint256[],uint256)", +"7a4c96ad": "vote(string,string,uint256)", +"7a4cac15": "removeUserAsset(address,uint256)", +"7a4e320c": "MINIMAL_PRE_ICO_INVESTMENT()", +"7a4e365d": "destroyFreezeFunds(address)", +"7a4f2fde": "decreaseSalesBalance(address,address,uint256)", +"7a4f7b92": "getInitializedFeeWindow()", +"7a4fb678": "Operation(uint8,bytes32[8])", +"7a504ceb": "endCrowdsale(uint256)", +"7a50aeb5": "ProofToken(address,address,uint256,string,string)", +"7a518d9f": "epoch_release_count()", +"7a51a611": "getOptionIdForPoll(uint256,uint256)", +"7a52ad76": "ChangeMainSaleDates(uint256,uint256)", +"7a530f03": "createPromoFlower(uint256,address)", +"7a5310b9": "confirm2stage()", +"7a53bcfc": "batchSend(address[],uint256[])", +"7a5402e9": "getPolicyData(uint256)", +"7a543a94": "isIcoFinished()", +"7a545b0c": "preIcoSold()", +"7a554786": "saveUserWallet(address,address)", +"7a55cece": "PlusPay()", +"7a55d4bd": "getCurrentBragKing()", +"7a5615c0": "changeTokensPerUSD(uint256)", +"7a58b058": "read_max_dgx_available_daily()", +"7a58ce90": "CryptoLinkNet()", +"7a5977be": "MAX_TOKENS_ADVISORS()", +"7a5984c4": "burn(uint32)", +"7a5a35ad": "setUSDEth(uint256)", +"7a5a59ec": "angelAllocation()", +"7a5b4f59": "getMetadata()", +"7a5bed43": "deleteSharedAccount(bytes32,bytes32,bytes32)", +"7a5c8432": "paymentqueue()", +"7a5c9028": "getLengthClassPlayers(uint256,uint256)", +"7a5ced61": "batchcollecttaxes(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7a5d5345": "signControllerChange(address)", +"7a5db3f3": "renounceInvestor()", +"7a5dbc21": "ipow(int256,int216)", +"7a5df22b": "getStakedAddress(address)", +"7a5e842a": "nizk_verifyproof(string,string,string,string,string,string,string)", +"7a5f5021": "closeBets(bytes32,bytes32,uint256,uint256)", +"7a5f715c": "SetCityName(bytes32)", +"7a5f973b": "INITIAL_SUBSIDY()", +"7a62b77c": "ShowChargeTime(address,uint256)", +"7a631201": "resetEvents()", +"7a63626c": "ownerIndexToERC20Balance(address,address)", +"7a63c290": "mintCapInTokens()", +"7a645975": "InexProject()", +"7a6506f6": "dividendsPayedIndex()", +"7a6543e2": "getRegistered()", +"7a654915": "BitcoinTRONIX()", +"7a657c53": "checkVotingForSendWeiFromPayment()", +"7a6615d4": "NewPAIReceipt(address)", +"7a66e5cf": "paySolutionReward(uint256,uint256)", +"7a67011f": "setMoneyline(int256,int256)", +"7a6838ec": "ownerBank()", +"7a690951": "_endBetListing(uint256)", +"7a6994dc": "getSpaceByIndex(uint256)", +"7a69e225": "settleMissedJackpot(bytes32)", +"7a6a00bb": "balanceEthOf(address)", +"7a6a18cf": "CrowdsaleMintFinished()", +"7a6ad926": "getUint(bytes32,bytes32)", +"7a6adab6": "getAdsLength()", +"7a6b1c7c": "authAccess()", +"7a6b2a2c": "lookupAmountUserDonatedToCampaign(address,uint256)", +"7a6b456f": "countShips(uint16,uint16,uint8,bytes32)", +"7a6b8361": "zeroBytes()", +"7a6ba98c": "getHashKey(address,uint256)", +"7a6c7783": "_consume(address,uint256)", +"7a6cb1aa": "getReceiverVesting(address,address)", +"7a6ce2e1": "getMsgSender()", +"7a6d6f3d": "gettormow()", +"7a6d8030": "BLOCKMALL()", +"7a6e1384": "priceForBuyingCostume()", +"7a6e2b49": "payService(bytes32,address,address,uint256)", +"7a6e5949": "getwithdrawEthertoAmountValue()", +"7a6e9df7": "getTimestamp(bytes)", +"7a6e9e41": "withdrawSellDemand(uint256)", +"7a6ee304": "IAMRefundedForWei(address,uint256)", +"7a706ac7": "setBuyRatio(uint256)", +"7a70abda": "updateAvatar(uint256,uint256)", +"7a71055d": "setAvgMinedPerDay(uint256)", +"7a713023": "finalizeSettingDeprecation(uint256)", +"7a71dee0": "onePotWei()", +"7a72416f": "security_address()", +"7a72c30d": "checkMilestoneStateInvestorVotedNoVotingEndedNo()", +"7a72c32f": "Paraboloid()", +"7a740a68": "communityReservation()", +"7a74b672": "clearEndpoint(bytes32,int256)", +"7a766210": "XYZA()", +"7a766460": "getStake(address)", +"7a773293": "setMarketingRates(uint8,uint8,uint8)", +"7a783d91": "Leeroy(address)", +"7a78cccc": "DAMIToken(address)", +"7a78ee2c": "lastBlock_a12Hash_uint256()", +"7a791524": "setNextFeePercentage(uint8)", +"7a792fa0": "get_reward(uint256)", +"7a79940d": "getSharedAccountPw(bytes32,bytes32)", +"7a7cdfa9": "createT(string,string,string,string,string,string,uint256,uint256)", +"7a7d4937": "secondsPerBlock()", +"7a7ebd7b": "channels(bytes32)", +"7a805504": "getAuditReportBlockNumber(uint256)", +"7a80760e": "ERC20Token()", +"7a81f972": "releaseCelebrity(uint256)", +"7a824b1d": "cooperativeSettle(uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"7a827634": "_emitContractAdded(address,address)", +"7a828b28": "terminate(uint256)", +"7a837213": "setAllowedAccount(address)", +"7a83e89e": "_endBetBlock()", +"7a840a52": "PKBCoin()", +"7a84d13e": "getNumberOfCandidates()", +"7a852c7e": "transferTokensWei(address,uint256)", +"7a8566ae": "richToken()", +"7a85c02a": "tokensOfEdition(uint256)", +"7a85e031": "finalizeInternal()", +"7a86d3d6": "addWithdrawTransaction(address,uint256,bytes)", +"7a872547": "defaultInput()", +"7a875ade": "fishPromoHelpers(address)", +"7a87f51a": "emergency_eth_withdraw()", +"7a888ca9": "startOptionsSelling()", +"7a88aabb": "getAddressOfTokenUsedAsReward()", +"7a899cdc": "_setPermission(address,address,bytes32,bytes32)", +"7a89d33e": "testdynamic_income(uint256,uint256)", +"7a8a5cf3": "totalMigratedIn()", +"7a8a8720": "firstUnitStartTime()", +"7a8b0114": "setA_ASM(uint256)", +"7a8b089b": "developerFundDeposit()", +"7a8bd25a": "get_bet_nfo(uint256)", +"7a8bd93e": "flipRewardAmount()", +"7a8df1b9": "getAffiliateInfo(address)", +"7a8e3d8d": "withdrawEth2Wallet(uint256)", +"7a8e832f": "MyBalance()", +"7a8f7be6": "HAYATO_EXTRACTION_BASE()", +"7a8fa666": "addPoweruser(address)", +"7a8fe3b1": "getProductBuyersWithUnconfirmedRequests(uint256)", +"7a9036cd": "registerFixedToken(bytes32,uint256,address)", +"7a906be0": "createAuction(uint256,uint128)", +"7a90a7a3": "feeBurnerWrapperContract()", +"7a9110d5": "klik()", +"7a91d5f9": "dilutePower(uint256,uint256)", +"7a91e53d": "isNotSelf(address,address)", +"7a926165": "manageAdmins(address,bool)", +"7a927429": "TokenValue(uint256,string,uint256)", +"7a935644": "I30Token()", +"7a93b917": "Lirux(string,string,uint256,string)", +"7a943538": "Victory()", +"7a954d5d": "investedInPreICO()", +"7a95e305": "escrowedForAsset(bytes32)", +"7a95f174": "CGT()", +"7a960154": "numOfPurchasedTokensOnCsBy(address)", +"7a9839c2": "fun(uint256)", +"7a99b018": "withdrawClient()", +"7a99ba4f": "investETH(address)", +"7a99bb0a": "_getTokenAmount(uint256)", +"7a9a032d": "addProposal(string,uint256,uint256,string,string)", +"7a9b0412": "setChainlinkOracle(address)", +"7a9b486d": "deposit(string,string)", +"7a9c960b": "DayDayToken(address)", +"7a9d366a": "debug_bool(bool)", +"7a9db28a": "_setPriceFactor(uint256)", +"7a9df8c0": "sellChickenParkCoin(uint256)", +"7a9e19de": "nextOffsetIndex()", +"7a9e5e4b": "setAuthority(address)", +"7a9ee2dc": "SogetiCoin()", +"7aa064ef": "intersubuser(address,uint256)", +"7aa0eb97": "LogSendTokens(address,uint256,string)", +"7aa11238": "Flow(uint256,string,string)", +"7aa1688e": "setUser(address,string,string,bool,bool,bool)", +"7aa1a77d": "rawWipeAttributes(bytes32,bytes32[])", +"7aa2096a": "setPI_edit_15(string)", +"7aa2bcd6": "bonusCompaignOpen()", +"7aa306a2": "numOwnerAddress()", +"7aa3295b": "trusted(address,address)", +"7aa356af": "phaseTwoRate()", +"7aa359f8": "changemem(uint256,bytes32)", +"7aa3803c": "takeRent(address)", +"7aa3976f": "DragonStone()", +"7aa3b39b": "_vest(address,uint256)", +"7aa3f6cb": "setKyberProxyAddress(address)", +"7aa3ff67": "AlterMediatorSettings(address,uint128)", +"7aa41ed5": "getNumPieces()", +"7aa50c56": "performDifferent(address,address[],uint256[])", +"7aa5a1a8": "set_eth_as_seeded()", +"7aa63a86": "getTotalElements()", +"7aa86e2f": "fetchProfit()", +"7aa98fb3": "timeLock(address,uint256,uint256)", +"7aa9a7f9": "getNumberThree()", +"7aaa3470": "getInterest(address)", +"7aaae78c": "preSaleBonus1Amount()", +"7aacd17d": "MyToken(string,string)", +"7aacf03c": "auctionIndex()", +"7aada63b": "maxEarlyStage()", +"7aae42c9": "endIcoPreICO()", +"7aaeb37c": "SimpleTGEContract()", +"7aaf334d": "offFreeze_Bounty(address)", +"7aaf58d7": "creatUserPurchase(address,address)", +"7aaf87d2": "getallresutl()", +"7ab0089e": "YiLiaoLian(uint256,string,string)", +"7ab03c25": "reserveTokensProjectAndFounders()", +"7ab0b998": "signRecoveryChange(address)", +"7ab13461": "decreasePrice(uint256)", +"7ab13ba9": "isProgress()", +"7ab14aae": "createBattle(address,uint256[],bytes32,uint256)", +"7ab21613": "getStopReceive()", +"7ab2af2b": "isRegistrationOpen()", +"7ab38e88": "issueTokensPresale(address,uint256)", +"7ab42bbd": "grantXPTokens(address,uint256)", +"7ab4e968": "oneEDG()", +"7ab528c9": "revokeDelegate(address,string,address)", +"7ab5e1e1": "reservedTokensFunctionality()", +"7ab61372": "totalRunePurchased()", +"7ab672c4": "GrabRedHarvest()", +"7ab7a9fa": "aurasCompatible(uint64,uint8)", +"7ab7ab2e": "AcceptsHalo3D(address)", +"7ab7d55b": "calculateHash(uint256,uint256,uint256,bool,bytes32)", +"7ab7e492": "RANGESTART_2()", +"7ab7fa9f": "UBEX()", +"7ab91b3a": "hash(uint64[8])", +"7ab96fda": "testBalanceCanbeWithdrawn()", +"7aba2249": "StoppableMock()", +"7aba4d23": "delToken()", +"7aba6f37": "setLock()", +"7aba86d2": "bonusMax()", +"7abaf552": "nexium()", +"7abb03bc": "noticeWinner(uint8)", +"7abbe9c0": "DEFAULT_GAME_COST()", +"7abc06aa": "tokensPerCents_gte50kUsd()", +"7abcc5bc": "bidInfo(string)", +"7abccac9": "getTokenMetaData(address)", +"7abdf949": "getUpgradePrice(uint256)", +"7abe24d4": "Firechain(uint256,string,string)", +"7abeb6a0": "createMarket(address,address,uint24)", +"7abec356": "Deposit(address,uint256,int256)", +"7abf75fd": "CFNDCrowdsale()", +"7ac02331": "ethMultisigWallet()", +"7ac07dcc": "isCaller(address)", +"7ac1cb30": "setbili(uint256,uint256)", +"7ac26aeb": "getTag(string,uint256)", +"7ac37d58": "ownerTransferEther(address,uint256)", +"7ac3c02f": "getSigner()", +"7ac40b10": "thedate()", +"7ac4b05e": "returnMyMoney(uint256)", +"7ac4ed64": "getAddress(address,bytes32)", +"7ac59d43": "getSellerSignature(string)", +"7ac5bb54": "getFlight(uint16,uint16)", +"7ac5d8a9": "RoundNumber()", +"7ac6e6a8": "objectHelmet()", +"7ac7ef85": "Msg()", +"7ac81da5": "useProps(uint256[],uint16[],uint16[])", +"7ac8dc26": "subFundPrecent()", +"7ac91cc2": "testFailOwnedAuth()", +"7ac94409": "sixthExtendedBonusSalesEnds()", +"7ac9f013": "removeVal(address,bytes32,address)", +"7aca84a1": "createVaultAccess(uint256)", +"7aca97b5": "changeDeadline(uint256)", +"7acb3e67": "EthTraderDAO(address,bytes32,address,address,address)", +"7acb4b0f": "isGroupInPolicy(bytes32,bytes32)", +"7acb7757": "stake(uint256,address)", +"7acbfb65": "setOwner(uint256,uint256)", +"7acc0b20": "products(uint256)", +"7acc6f74": "addSingleAddressToWhitelist(address)", +"7acc8678": "transferAdminQuickly(address)", +"7acd0412": "newInvest(address,uint256,uint256)", +"7ace341b": "getCurrentOwner(uint256)", +"7ace41f2": "CoinvestToken(uint256)", +"7ace58d8": "changeBranch(uint256,uint8)", +"7acee816": "claimIFactor2(bytes32,bytes32)", +"7acf16c3": "findLowestBenefactor()", +"7acf4892": "isNotPaused()", +"7ad00589": "getAffiliateSenderPosCode(uint256)", +"7ad06be3": "recycleAppearance(uint128[5],uint256)", +"7ad0bf86": "exchangeRegulatorWallet()", +"7ad1428d": "m_record(string)", +"7ad157b9": "buy(uint256,address,bool)", +"7ad226dc": "refund(uint256,address)", +"7ad2856f": "info(string,uint8)", +"7ad28c51": "changeTimeLock(uint256)", +"7ad2a0ce": "doAirDrop(address[],address,uint256,uint256)", +"7ad3c119": "ContractInfo()", +"7ad3def2": "updateToken(address)", +"7ad4b0a4": "setAttribute(address,bytes32,bytes,uint256)", +"7ad53eae": "sani()", +"7ad59e20": "end_Dec_21_2017()", +"7ad5a045": "_ReparameterizationProposal(address,string,uint256,bytes32)", +"7ad77fd9": "firstWeek()", +"7ad7e846": "robocoinToken()", +"7ad8800f": "ShowPrice(string)", +"7ad9642f": "changeMiniumBet(uint256)", +"7ad979a3": "setupFund(string,address,uint256,uint256,address,address,address,address[],address[],uint8,bytes32,bytes32)", +"7adaa3f8": "right39(uint256)", +"7adac0e6": "stopTransfers()", +"7adb7ced": "ekkoBlock(uint256,string,uint8,string)", +"7adbf973": "setOracle(address)", +"7adc22d8": "bujankkoin()", +"7add0106": "initBronze()", +"7addc766": "ADDR_MAYA_MARKETING()", +"7ade8d6a": "Totti(string,string,uint256,uint256)", +"7adec1c9": "DepositAcceptedEvent(address,uint256)", +"7adee0e3": "setJoinDelta(uint256)", +"7adfec71": "allTasksCount()", +"7adff2cb": "auth(uint8,bytes32,bytes32)", +"7ae046d5": "joinGame(uint256,address,string)", +"7ae0c915": "SmartBondsSale()", +"7ae11443": "getCurrentStakingPeriod()", +"7ae145cb": "Badge(uint256,string,uint8,string)", +"7ae15a19": "createKingdom(string,uint256,uint256,uint256,uint256)", +"7ae1cfca": "getBool(bytes32)", +"7ae26546": "setApprovedContractAddress(address,bool)", +"7ae26773": "revokeAllowance(address,address)", +"7ae2a331": "goldenTicketFound(address)", +"7ae2aa34": "teamVestingStage()", +"7ae2b5c7": "min(uint256,uint256)", +"7ae316d0": "getTotalFee()", +"7ae38a95": "isDestructionStarted()", +"7ae488c3": "priceOfPlayer(uint256)", +"7ae4bff8": "changeStage(uint256)", +"7ae506ac": "minimumPurchaseValue()", +"7ae5dfe5": "TTC(uint256,string,uint8,string)", +"7ae68ada": "getReferralCode()", +"7ae6b763": "updatePartner1_will(string)", +"7ae7024c": "_realBalanceOnToken(address)", +"7ae74432": "PhilToken()", +"7ae77ecf": "onlyBouncerCreateContract(bytes)", +"7ae79345": "ZeroChain()", +"7ae79e86": "crowdfundEndsAt()", +"7ae81801": "userUpgradeElement(uint256,uint256,uint256)", +"7ae8b321": "withdrawGNT(uint256)", +"7ae8c854": "getMaturity(bytes32)", +"7ae9c430": "getMinFunds()", +"7ae9c856": "getassignTokensperType(uint8)", +"7aeaa864": "storePhoto(string)", +"7aeabb39": "lastPaymentDate()", +"7aeb0763": "habichnet()", +"7aeb9500": "getAutoInvestStatus(address)", +"7aec05b6": "TemroyToken()", +"7aec2277": "ValueCyberToken()", +"7aece878": "receiveObject(uint256,address)", +"7aef1cdc": "airDropDestinations(address)", +"7aef1d4d": "setMinEther(uint256)", +"7aef2226": "MIKETANGOBRAVO18Crowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7aef951c": "bid(string)", +"7aefec13": "followTraderPreSignedHashing(address,address,bytes32,uint256,address,uint256)", +"7af05516": "claimRewardTillRound(uint64)", +"7af0ed7e": "NewStatic()", +"7af1337b": "updateCrystal(address)", +"7af20a0a": "LITECORE()", +"7af2a28e": "createContractElement(string,uint256)", +"7af30442": "testToggleBitFailIndexOOB()", +"7af327a0": "deposito()", +"7af3670c": "NewToken()", +"7af52ade": "collectEntryFee()", +"7af5878e": "safeSend(address,address)", +"7af5dc37": "safeSub(int256,int256)", +"7af85411": "DisableReturnFunds()", +"7af8b87d": "verificationRate()", +"7af8c4f2": "changeTokenSaleAddress(address)", +"7af91032": "getPoolDoneCount()", +"7af915af": "setResourcesBanker(address)", +"7afa0c66": "lockedMonsterStatsCount()", +"7afa1eed": "generator()", +"7afa8388": "transferFromWithReferenceCallGas()", +"7afbe4f1": "Add(uint256,uint256)", +"7afc84df": "NKHOIToken()", +"7afcb524": "foundersBalance()", +"7afd4762": "auctionPriceLimit()", +"7afde96b": "isInPreSale()", +"7afea44f": "kycManager()", +"7aff5061": "penalizeNode()", +"7afff425": "reclaimAllocated()", +"7b01127c": "getValue(bytes32,bytes32)", +"7b012ff6": "IcoCap()", +"7b015ff7": "crowd_start_date()", +"7b019f89": "squareRoot(uint256)", +"7b02347d": "distributeRef(uint256,uint256)", +"7b02b2c9": "sendMsg(address,string)", +"7b02b6de": "initialChargeFee(uint256)", +"7b02f6e1": "_vote(address,address,uint256)", +"7b0383b2": "initializeDispute(uint256)", +"7b039576": "setCreditStatus(bool)", +"7b039bb6": "createVariation(uint256,uint256)", +"7b03e5f0": "_getUint(address,bytes32)", +"7b0472f0": "stake(uint256,uint256)", +"7b04a2d0": "onApprovalReceived(address,uint256,bytes)", +"7b04b1f8": "prePaidFee()", +"7b053195": "testItems(bytes)", +"7b05d785": "redeemTokens(string)", +"7b069edb": "createNewGame(string,uint8,uint256[],uint256[])", +"7b06e907": "teamAddressOne()", +"7b07788e": "removePrecondition(uint256)", +"7b0862e1": "getLatestSettingId(uint256)", +"7b0863de": "beginClosingPeriod()", +"7b087636": "testToUint96()", +"7b088543": "setDollarForOneEtherRate(uint256)", +"7b0934ab": "KRTR()", +"7b0a2340": "issueBook(uint8)", +"7b0a3a8d": "maxRecords()", +"7b0a47ee": "rewardRate()", +"7b0a7bf8": "disableContactMint(address)", +"7b0b5b93": "MannaCoin(address,address)", +"7b0c15ff": "ApolloSeptemStarted()", +"7b0de015": "teamTokensAddress()", +"7b0f6f18": "executeArbitrage(address,uint256,address,bytes)", +"7b0f94ed": "advisoryEthWallet()", +"7b103999": "registry()", +"7b10a1d9": "changeInviteReward(uint256)", +"7b10b293": "requestMembership()", +"7b10e717": "received_wei()", +"7b1278e9": "setStageLength(uint256)", +"7b129c48": "TrueTHB()", +"7b12df39": "userProfits()", +"7b12e074": "getSiringWithId(uint256)", +"7b144a84": "testFunded(uint256)", +"7b146f6f": "contributorPoolAddr()", +"7b15013c": "JPPreICO()", +"7b151be0": "market_WithdrawWei()", +"7b169f8c": "refBonusOf(address)", +"7b16c028": "HumaniqICO(address,address,address)", +"7b16f7a0": "transferAll(uint256,address,address)", +"7b1707ee": "sendAliceBlue(address,uint16,uint256,bytes)", +"7b1760da": "computeCertHash(address,bytes32)", +"7b17e543": "user(uint32,uint32)", +"7b1837de": "fund(address,uint256)", +"7b19bbde": "fundValues(uint256)", +"7b1a4909": "transferETH(address,uint256)", +"7b1a547c": "registerAs(address,string,uint256,string,address)", +"7b1aa45f": "ownerDeposit()", +"7b1ae67a": "OrganicumOrders()", +"7b1b0c8a": "isWeekdayInsideTimestamps(uint256,uint256,uint256)", +"7b1b1de6": "pricePerToken()", +"7b1bc329": "bountySend(address,uint256)", +"7b1bd162": "NatureSeedToken()", +"7b1c5368": "fetchVoteMainInfoForVoter(address)", +"7b1c6c83": "MangGuoToken(string,string,uint8,uint256)", +"7b1c88be": "transferIncome(address,uint256)", +"7b1cbb13": "getChannelValue(bytes)", +"7b1cdd4f": "withdrawWallet3()", +"7b1e855a": "setBountyCoin(address)", +"7b1e8871": "_transferBilrew(address,address,uint256)", +"7b1f1f83": "SgdToWeiRateSet(uint256)", +"7b1f337d": "endingBlock()", +"7b23f37d": "ownerRandomNumber()", +"7b24343e": "salvageOtherTokensFromContract(address,address,uint256)", +"7b2454c2": "InvestmentAnalytics()", +"7b24d867": "TokensImport(address,uint256,uint256)", +"7b253fe6": "getWithdrawableAmountAS(address)", +"7b2581c2": "totalPurchase()", +"7b25aeca": "totalLimitUSD()", +"7b25de45": "isNewToken()", +"7b25ec58": "getTierTokens(uint8)", +"7b2643f2": "receiveNVT(uint256,uint256)", +"7b266b21": "durationh()", +"7b26de4b": "newPlayer(address,uint256,address)", +"7b26ff88": "JuryMemberAdded(string,address)", +"7b274afc": "stopIco()", +"7b27739c": "LSCKcoin()", +"7b283b71": "RATE_TIER1()", +"7b28aa4c": "orderCancel(address,uint256,address,uint256,uint256)", +"7b292909": "square(uint256)", +"7b294495": "lastActiveTs()", +"7b2abb34": "doProveMemoryRead(uint256,bytes32,bytes32[])", +"7b2b24e9": "isCurrentOrPastUser(address)", +"7b2bff9d": "getRobotsForUser(address)", +"7b2c5148": "catReleaseToPrice(uint32)", +"7b2c8905": "FailedToClaim(address,uint256)", +"7b2ca96c": "ProdPresale()", +"7b2d1b30": "getDragonPriceNo()", +"7b2d3b27": "getStageDiscount(uint8)", +"7b2e0046": "createAddress(bytes32,address)", +"7b2e5086": "withdrawFounderFunds()", +"7b2feaaa": "blockStart()", +"7b30074d": "trustedCancelOrderTransfer(address,address,uint256)", +"7b303965": "getStats(uint256)", +"7b304179": "createMainNetContract(uint256,uint256)", +"7b3051db": "get_minimum_trade()", +"7b30de25": "setConfig(string,string)", +"7b316db2": "enterBidForCollectible(uint256,uint256)", +"7b3179bc": "setEconomyParameters(uint128,uint128,uint128,uint128,uint128,uint128,uint128)", +"7b317ef6": "payoutPendingWithdrawl(uint256)", +"7b31db17": "intMax()", +"7b327104": "addBidToStack(bool)", +"7b32daf8": "contractTimeout()", +"7b3303b1": "startcrowdsale()", +"7b33e01a": "increaseApproval(address,uint256,bytes,string)", +"7b33fa25": "confirmReturn()", +"7b34203d": "getNumberOfDisputedStepsProPatient()", +"7b352962": "isFinished()", +"7b35819f": "setPresaleEndDate(uint32)", +"7b362143": "inactive_withdrawable()", +"7b36277e": "tier2Total()", +"7b367343": "IPv7Token()", +"7b370a01": "crowdsaleDistributedUnits()", +"7b37b6a3": "RAXToken()", +"7b38f391": "p1_white_duration()", +"7b3941d7": "Redeem(uint32)", +"7b395487": "voteForUltimateOutcome(bytes32,uint16)", +"7b3aa441": "contributeWithAddress(address)", +"7b3ae1f1": "addClaim(string)", +"7b3bfc35": "setRound(uint256,uint256,uint256,uint256,uint256,bool)", +"7b3c24ac": "compensate(uint256,address)", +"7b3ca1c6": "registerNameXname(string,bool)", +"7b3cf41a": "setExplosivePower(uint256,uint256)", +"7b3d398f": "getTicketHolderCount()", +"7b3d9338": "market_is_open()", +"7b3e2ce0": "BuyTicketUseVaultSeed(uint256)", +"7b3e5e7b": "amountRaised()", +"7b3ed808": "withdrawlOwner()", +"7b3f0fb7": "updateRevertSuspendedPayment(bool)", +"7b3fdcd8": "removeVerifier(address,address)", +"7b40b291": "RetractRoutingNS(bytes32,bytes32,uint256,bytes)", +"7b4126f4": "buyContent(bytes32,uint256,uint256,bytes8,string,address)", +"7b413985": "tokenValueInEther(uint256)", +"7b422184": "giveBirth(uint256,uint256)", +"7b424c0d": "changeRelease12m(address)", +"7b42f6f7": "intervalAt(uint256,uint256,int256,uint256)", +"7b436460": "Kubic()", +"7b436fa4": "garanteSystemDepositInOneFund()", +"7b43a8e6": "commits(address)", +"7b43adfb": "checkBalanceContract()", +"7b449206": "changeClearance(uint256,uint256,uint256,uint256,bool)", +"7b44eb51": "UPO(uint256,string,uint8,string)", +"7b464e93": "prescriptions(bytes32)", +"7b46b80b": "unfreeze(address,uint256)", +"7b473783": "EcoValueCoin()", +"7b47457f": "MintTokens(address,uint256)", +"7b47cb68": "lifeFactor_ii()", +"7b47ec1a": "burnToken(uint256)", +"7b48ba20": "testThrowDisownNotOwner()", +"7b48de6b": "returnTransactionPrices(uint256)", +"7b4938c3": "LinkNaturePower()", +"7b49e4c0": "DelphyToken(address[],uint256[])", +"7b4b5e4e": "changeYUMAddress(address,address)", +"7b4fcdcf": "GetAccess(address)", +"7b4fd96e": "token_price()", +"7b5005e8": "ZRXToken()", +"7b50a573": "functionOne(uint256,uint256,uint256,uint256)", +"7b510fe8": "getAccountInfo(address)", +"7b51c463": "hasDebris(bytes32,uint8)", +"7b523c35": "request(address,address,bytes,bytes,uint256,uint256)", +"7b5330a7": "getEntitlement()", +"7b540dd2": "ChangeHold(address,address,uint256,uint8)", +"7b54a994": "safeAdd(uint256,uint256,uint256,uint256)", +"7b550233": "deathData_v18()", +"7b55c8b5": "scheduleCall(address,bytes4,bytes,uint8,uint256[4])", +"7b55f66e": "manualCloseBet(uint16,uint16)", +"7b563e3a": "hourPotLeader()", +"7b564b7f": "test_insert_updateTail()", +"7b568081": "trade(address[],uint256,uint256)", +"7b575b33": "operate(bytes)", +"7b58120f": "preSaleSecondStartDate()", +"7b5825d5": "get_amount_buy(uint256)", +"7b58d46e": "changeWikiID_Name(uint256,string)", +"7b58d7ee": "Jawn()", +"7b599b5b": "COOLBTCEXCHANGE()", +"7b59af16": "registerName(string,address)", +"7b5a08c5": "TradeList(uint256)", +"7b5bc2e4": "isVoted()", +"7b5bd741": "getIdentityWallet(address)", +"7b5bee1d": "_getItem(uint256)", +"7b5c7b7b": "privilegedTransfer(address,uint256)", +"7b5cc75d": "lastDividendTime()", +"7b5d2534": "semaphore()", +"7b5d5d1a": "halvingStartBlock(uint256)", +"7b5e400d": "recipientsMap(bytes32)", +"7b5eb564": "approveWithData(address,uint256,bytes)", +"7b5ecb32": "test_twoValidEqUint2()", +"7b5f4fc9": "get_all_attender()", +"7b5f7267": "getTokenPriceUSDWEI()", +"7b61b201": "getHouseCard(uint8)", +"7b61c320": "tokenSymbol()", +"7b627879": "Conference()", +"7b632c41": "TimestampScheduler(address,address)", +"7b641fbc": "getMembers(bytes32)", +"7b647652": "LittleEthereumDoubler()", +"7b647d72": "BITIC()", +"7b65d0ec": "initialBuyCard(uint8,string,string,string)", +"7b663d30": "ChangeClaimAmount(uint256)", +"7b66c032": "HashBuxICO()", +"7b66da95": "calLast5RoundProfit(uint256)", +"7b66e17f": "getDonator(uint256)", +"7b6750bf": "getTokenDelegate(uint256)", +"7b680deb": "SpiceUpPrizePool(address,uint256,string,uint256)", +"7b68533f": "earlybird_percentage()", +"7b68a8f0": "getPixelColor(uint256)", +"7b698602": "NEXMESH()", +"7b69db5c": "increment(int256,int256)", +"7b6a3e27": "out2Done()", +"7b6a6f4a": "roundUp(uint256)", +"7b6a912c": "etherCost()", +"7b6ae58f": "AMICoin()", +"7b6b3f46": "preMining()", +"7b6c0492": "allowanceSubId(address,uint256,uint256)", +"7b6c4b27": "BidRevealed(bytes32,address,uint256,uint8)", +"7b6c4dc7": "AgriChainProductionContract()", +"7b6c7a14": "transferAuthorship(address,bytes32)", +"7b6ccf85": "LogRefund(bytes32,address,uint256)", +"7b6d79f1": "cancelBet()", +"7b6d7a4a": "VoteIntentionSet(uint256,bool,bool)", +"7b6e49a8": "fetchVoteNumForVoterByIndex(uint256,address)", +"7b6e7603": "levelClearTime()", +"7b6e8740": "changeCATDestinationAddress(address)", +"7b6f5a4c": "getCurrentRoundMinimumTime()", +"7b6ff689": "setImmediateAllowancePercentage(uint8)", +"7b70209f": "isBeneficiary()", +"7b7054c8": "__approve(address,uint256,address)", +"7b707e9c": "getNumberOfCreatedTokens()", +"7b70cdcd": "dayFor(uint256,uint256)", +"7b70ed51": "setAngelDate(uint256)", +"7b71aec8": "ethPropagate()", +"7b7330cc": "return_eth()", +"7b73aef8": "setNote(bytes32,bytes32)", +"7b73c2ef": "defaultDeadline()", +"7b74644d": "WKToken()", +"7b74e5c3": "buyByAddress(uint256,uint256)", +"7b755373": "amountPercentage(uint256,uint256)", +"7b75a302": "MatContract()", +"7b75ea7b": "rewardPayableDays()", +"7b760537": "updateLatestRevision(bytes20,bytes32)", +"7b7670f6": "gasForXaurDataUpdateAtBlock()", +"7b76ac91": "day()", +"7b775ec3": "wallet89()", +"7b777517": "teamVestingStages()", +"7b777ecc": "getMaxReportsPerLimitedReporterMarket()", +"7b77bbc8": "dyn_call(address,bytes)", +"7b789b3d": "agreement(bytes,bytes,bytes)", +"7b7a43eb": "setMINfinney(uint256)", +"7b7a720a": "chrissycoinToken()", +"7b7b81c5": "loikikdi()", +"7b7c343d": "setRequiredConfirmations(uint256)", +"7b7ccc66": "burnSaleTokens()", +"7b7d4655": "releaseTokenCornerstone()", +"7b7d6c68": "setController(address,address)", +"7b7d7225": "_approve(address,uint256)", +"7b7d8888": "permanentlyOwnMyCompany(bytes32)", +"7b7e97f1": "isIncluded(uint256,uint256)", +"7b807a51": "devTimeLock()", +"7b80889b": "lockedBalance()", +"7b80a0ca": "endEarlyStage2()", +"7b8108c6": "isIn(address,address[])", +"7b813089": "team4Token()", +"7b816719": "testToInt(bytes)", +"7b81c3cd": "claimIcoContribution(address)", +"7b8208b7": "destroyUselessContract()", +"7b821410": "createPlotVineyard(address)", +"7b8239fa": "fun3()", +"7b82d9ee": "canDouble(address)", +"7b830854": "unlockTokenTransfers()", +"7b831c30": "isRoundEnded(uint256)", +"7b834bcc": "marketTime()", +"7b841eff": "turnOffCanUpdatePercentToTakeAsSeed()", +"7b84de4e": "StarFishCoin()", +"7b851f65": "hasIcoEnded()", +"7b86120a": "foundersReserve()", +"7b865061": "CAPToken(address)", +"7b87312a": "timeToOpenPresents()", +"7b875aab": "addrSale()", +"7b891cf7": "YBCLiveToken()", +"7b898c71": "_checkLoanBalance()", +"7b89a582": "Management()", +"7b89eef2": "getMyAverageDividendRate()", +"7b8a1898": "setStore(string)", +"7b8ac66b": "deliver(uint256,uint256)", +"7b8b7364": "isAddressVerified(address,address)", +"7b8b82a8": "createManyProxies(uint256,address,bytes)", +"7b8bf4fd": "set_fee(uint256,uint256,uint256)", +"7b8c0e0f": "offlineExchange(address,uint256)", +"7b8cfbe1": "howManyEtherInWeiToKillContract()", +"7b8d56e3": "setValue(uint256,uint256)", +"7b8d771e": "_buyTicket(uint256,address)", +"7b8d9930": "AxieDependency()", +"7b8de6d0": "executeTokenFallback(address,uint256,bytes)", +"7b8e3514": "allowedValidators(address,address)", +"7b8e7964": "JPGToken()", +"7b8e8bdd": "modifyCloseTime(uint256)", +"7b8eeb96": "StarMarket()", +"7b8f186e": "updateIdx()", +"7b8f2e07": "addCreature(uint16,uint8,uint8)", +"7b8fa867": "setAllowedAdd(address)", +"7b8fac4f": "AC(uint256,string,string)", +"7b907094": "solidityCompileVersion()", +"7b926c2a": "IFSBalances(address)", +"7b929c27": "development()", +"7b92a2de": "Reservation(address)", +"7b93253c": "validateClaim(address,bytes32)", +"7b9358a0": "changeRegistrationStatuses(address[],bool)", +"7b936934": "artistFees()", +"7b936ac2": "getCFO()", +"7b9417c8": "addAddressToWhitelist(address)", +"7b94ffb5": "grantBounty(address,uint16,string)", +"7b9504d5": "_isOwner(address,uint40)", +"7b965785": "EVER()", +"7b969dcd": "_checkPixelAboveLeft(uint256)", +"7b97008d": "purchaseTokens(uint256)", +"7b979b41": "leakEther()", +"7b97c621": "Transferred(bytes32,address,address)", +"7b9884b9": "addallrunmoney(address[],uint256[])", +"7b991c1a": "findEmptySlot(uint32)", +"7b9940b6": "initambassadors_()", +"7b9a3f4c": "TotalFunds()", +"7b9a9926": "RESToken()", +"7b9b9c89": "augmintToken()", +"7b9c34e0": "requestRN(uint256)", +"7b9c4756": "SanchitToken()", +"7b9c5794": "test_YayIsOverSixtyPercent()", +"7b9c7437": "LUCToken(uint256)", +"7b9daba8": "wa()", +"7b9dbf95": "FulfillmentAccepted(uint256,address,uint256)", +"7b9dc066": "tokenTransfersFrozen()", +"7b9e5bec": "getAsBytes(uint256,uint256)", +"7b9e9073": "buyLimitSupplyMin()", +"7b9f87d3": "Setup(address,address)", +"7b9fa595": "_getCrowdsaleTokenAmount(uint256)", +"7ba016d0": "icoDiscountLevel2()", +"7ba04809": "assertFalse(bool,string)", +"7ba0e2e7": "mint(bytes)", +"7ba121ff": "EventBonusPercentChanged(uint256,uint256)", +"7ba1e407": "tokenBack(address[],uint256[])", +"7ba201c5": "refundSingleUser(address)", +"7ba22e1e": "changeWorkerBalance(address,uint256)", +"7ba36880": "_secondLevelEth()", +"7ba38916": "changeAdminFromBoard(address)", +"7ba3c804": "AiEXToken()", +"7ba3f08d": "grantPermissionTo(address)", +"7ba46004": "totalRuneWithdrawn()", +"7ba49b81": "lastMintedTimestamp(address)", +"7ba4a58a": "addressToken()", +"7ba5f145": "mod256(uint256,uint256)", +"7ba64e40": "removeBeneficiary(address,uint256)", +"7ba70bf2": "gettoken(address)", +"7ba79848": "processReferral(address,uint256,uint256)", +"7ba7acc9": "initTokenSale(address,address,uint256,uint256,uint256,uint256,uint256)", +"7ba7dcea": "setRefundable()", +"7ba8c064": "VotedEvent(uint256,address,bool,uint256,string)", +"7ba8c12d": "addWhitelistUser(address,uint256)", +"7ba992fc": "PeriodicTokenVesting(address,uint256,uint256,uint256,uint256,bool,address)", +"7baa4524": "emptyRemainingsToOwners()", +"7baa73c6": "_updateCreditedPoints(address)", +"7bab59f4": "feedTransfer(address,address,uint256)", +"7babf021": "RLCOIN(uint256,string,string,bool)", +"7babfffc": "transferDelegation(address)", +"7bacd526": "withdraw_admin(uint256)", +"7bacfb0c": "PresaleEndTimeChanged(uint256)", +"7badc7af": "gaveVote(address)", +"7bae0585": "approveMany(address[],uint256[])", +"7bae3f27": "changeTransferFeeOwner(address)", +"7bae50e0": "mintGen0Spinners()", +"7baf5b84": "startUnlock()", +"7baf71f9": "claimPrizePool(address,uint256)", +"7bb050cf": "migratePlayerPhrasesData(uint256,uint256,uint256)", +"7bb0688d": "claimedUsers()", +"7bb0aefe": "hasAuthoritySignedMainToSide(address,address,uint256,bytes32)", +"7bb0b3c6": "checkifCapHasReached()", +"7bb1a312": "transferToTeam(address,uint256)", +"7bb1efa1": "manualInitializeTreasure(uint256)", +"7bb20df6": "isExistingBattle(string)", +"7bb25d60": "withdrawInProgress()", +"7bb26a1b": "ethFoundDeposit()", +"7bb305ef": "set_foundtion_addr(address)", +"7bb31dbb": "calcBetResult(uint256,bytes32)", +"7bb333d6": "EBankerICO(address)", +"7bb34a23": "bva(address,uint256,uint256,address)", +"7bb3546b": "hgs()", +"7bb3ca86": "addReferralHashrate(address,uint256)", +"7bb43e6e": "returnUnsoldSafeXLarge()", +"7bb4493c": "FBI()", +"7bb476f5": "getAvailableAmount()", +"7bb4c4da": "nAuditorsAlarm()", +"7bb55287": "assignRaffleWinner(address)", +"7bb5e1d1": "Cowboy()", +"7bb6a4c6": "uno(uint256)", +"7bb6fc6b": "LoveToken(uint256,string,uint8,string)", +"7bb7adb6": "hugeContributionBound()", +"7bb866c1": "GetBoosterCount()", +"7bb8c4e5": "setCut(uint16)", +"7bb96acb": "getBlockHeight()", +"7bb98a68": "balances()", +"7bb9c776": "ticket(bool)", +"7bb9dc13": "setPublicSaleWallet(address)", +"7bba0613": "attackCountry(uint8)", +"7bbb3a60": "inactivityTimeout()", +"7bbba97e": "CreateEstate(address)", +"7bbbd75b": "_getNow0()", +"7bbbe9fd": "claimGameReward(address,uint256,uint256)", +"7bbc101b": "distributionStart()", +"7bbc33f0": "vet(address,bool)", +"7bbc5c01": "calcRefund(address)", +"7bbc816e": "UTCToken(uint256,string,string,uint256)", +"7bbd3f19": "removeLastRace()", +"7bbf2300": "claimAccountOwnership(string,string,uint256,uint256)", +"7bbf4a3f": "callers(address)", +"7bbfb0bd": "startTokenPriceWei()", +"7bbfbaee": "MAX_SUPPLY_USPN()", +"7bc046ef": "ClaimRemoved(address,address,bytes32,uint256)", +"7bc0e005": "setDirectDebit(bool)", +"7bc0ff20": "setupExportFee(address,uint256)", +"7bc120c2": "isView()", +"7bc14a67": "Initial_Supply()", +"7bc21b6b": "bbAdvisorWallet()", +"7bc25372": "UserCheckBalance(address)", +"7bc25da8": "Alaves()", +"7bc363f9": "serviceTransferOwnership(address)", +"7bc36e04": "setPrivateSalePrice(uint256)", +"7bc49a95": "play(uint256,uint256)", +"7bc4be40": "isGlobalLock()", +"7bc4d6a6": "testInitial1of3()", +"7bc58805": "balanceFinney()", +"7bc5af10": "getAwarding(address,bytes32)", +"7bc62dc3": "ALD()", +"7bc69bbc": "getBonusByRaised()", +"7bc6a02e": "isAutoridadElectoral()", +"7bc6aa07": "omniTeamAddress()", +"7bc74225": "getTotalStake()", +"7bc76388": "test_set_owner()", +"7bc775db": "GxOwned(address)", +"7bc835da": "UpdateConfirmed(address,address,uint256)", +"7bc8649f": "NewTKLNToken(address)", +"7bc89ae7": "registerNameXNAME(string,address)", +"7bc9165b": "offchainPayment(address)", +"7bc94872": "FinishReceivingContributions()", +"7bc9d4ba": "TielseEendrachtCombinatie()", +"7bc9eb8c": "p_setSoft_deadline_duration(uint256)", +"7bca38be": "heartbeatTimeout()", +"7bcaf585": "checkSignature(string,uint32,string,string,bytes32,bytes32,uint8)", +"7bcc1ff6": "allowanceInternal(address,address)", +"7bcc9c6f": "sendBackTokens()", +"7bcd7fad": "getRecordAtIndex(uint256)", +"7bcdc2f0": "_forwardApprove(address,uint256,address)", +"7bcdfd4f": "setEpochData(uint64,uint64,uint256)", +"7bce366f": "minBlockPurchase()", +"7bce89cc": "currentMarketRate()", +"7bd13f08": "recoverAddressFromBalanceProof(uint256,bytes32,uint256,bytes32,bytes)", +"7bd1a731": "deleteIdentity(string,string)", +"7bd216c6": "teamAddressThree()", +"7bd2593d": "XfiniteUtility()", +"7bd26969": "ChannelNew(address,address,address,uint256)", +"7bd2bea7": "gem()", +"7bd352b7": "relay(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32,uint8,uint128)", +"7bd379b3": "PaymentProcessed(address,uint256,uint256)", +"7bd3acbb": "pointArrayOf(uint256)", +"7bd53618": "TaiyuanCoin()", +"7bd63411": "defaultPercent()", +"7bd6c0e4": "setMigrationHost(address)", +"7bd703e8": "getBalanceInEth(address)", +"7bd7c0ac": "armyDronesCount(uint256)", +"7bd7c891": "becomeFalconmaster()", +"7bd85cb3": "LZLTokenDeposit()", +"7bd95a85": "rewardPoints(address)", +"7bd97ca7": "editMemeTemplate(uint256,string)", +"7bd9e8fd": "CTO_SHARE()", +"7bd9f47a": "Best_Bank_with_Interest()", +"7bdb7a90": "setCdRate(uint256)", +"7bdbab0c": "tokenMintInit()", +"7bdc011e": "Pray4Prey()", +"7bdc297c": "TimeLockedWallet(address,address,uint256)", +"7bdc60d9": "getTokenById(uint256)", +"7bde5628": "addNuja(address)", +"7bde7fcf": "maxApenSell()", +"7bde82f2": "redeem(uint256,address)", +"7bdef3f8": "gameMiningTokenCap()", +"7bdf9d56": "MANHATTANPROXY5THST()", +"7be00510": "lastInvest(address)", +"7be122a3": "isSchoolAllowed(uint256)", +"7be1e747": "initAddress()", +"7be266da": "isRegisteredInPreviousEpoch(address)", +"7be296d8": "filmamount()", +"7be2d5a2": "setDropNumber(uint8)", +"7be33b36": "getSoundcoinsAddress()", +"7be34109": "diffMonths(uint256,uint256)", +"7be4ce4b": "updateRngAddress(address)", +"7be4ed55": "fixPayAmt()", +"7be5b5ae": "setBuyDirectMode(bool,address)", +"7be68454": "optionsRegistryAddress()", +"7be6d2de": "transferToContract(address,uint256,bytes,bool)", +"7be80b39": "forceWithdraw()", +"7be8352e": "getPixelCount()", +"7be8630f": "lastHotPotatoHolder()", +"7be8f86b": "done(address)", +"7be96b1a": "AAA(address,uint256)", +"7bea7112": "TheOneToken()", +"7beb2e1e": "minNumbPerSubscr()", +"7beccd70": "revokeTransferManager(address)", +"7becd54a": "destErc20()", +"7bedcb7f": "DemirPara()", +"7bee30ce": "createSspAndChannels(address,uint256,string,address[],address[],uint256[],address,string,bytes,uint32[])", +"7bee86d6": "lastImageId()", +"7beeb945": "isRole(address)", +"7bef29f7": "BittechToken()", +"7bf08621": "payTo(address,uint256)", +"7bf0a8f3": "operationsTokens()", +"7bf0cd0d": "getTargetBlock(uint256)", +"7bf0e054": "getLotteryDetailsB(int256)", +"7bf1648a": "setContract(uint256,address,address)", +"7bf1a627": "ethToken()", +"7bf1ca1f": "TransferToken(address[],uint256,uint256)", +"7bf212f8": "getCondition(uint256)", +"7bf21aa4": "generatePresaleHouses()", +"7bf21ab8": "sellPBTTAgainstEther(uint256)", +"7bf26182": "calculateVestedTokens(bool,uint256,uint256,uint256,uint256,uint256,uint256)", +"7bf2bb10": "arbiters(address)", +"7bf3f900": "gameManagerPrimary()", +"7bf437e6": "transferCoinUserToUser(address,address,uint256)", +"7bf47cda": "cancelSellOrder(address,uint256,uint256,uint256,uint256)", +"7bf4b18f": "tokenSetMintFeeAbs(address,address,uint256)", +"7bf57ca8": "_taxesDue(address)", +"7bf5b04b": "processDividends()", +"7bf5b5d6": "distributeWalletTokens()", +"7bf6f26e": "setMaintenanceMode(bool)", +"7bf796dc": "SmartAgreement(bytes,address[])", +"7bf92690": "changeArrangerFee(uint256)", +"7bf992ac": "GoodKarma(uint256,string,uint8,string)", +"7bf9d052": "firstRankForFree()", +"7bfa6e1a": "gameShouldRestart()", +"7bfaad96": "addNode(bytes,address)", +"7bfb0934": "value(bytes32)", +"7bfbe091": "creatorRejectRequestFundTransfer(uint256)", +"7bfbfecb": "BurnCoin()", +"7bfe950c": "withdraw(address,address,uint256,uint256)", +"7bfe97ce": "IBMISOFT()", +"7bff0a01": "createRandomZombie(string)", +"7bff9797": "canTeamKeepingWithdraw(uint256)", +"7c0012d4": "ZiipToken()", +"7c0081f5": "petCardSeriesCollection(uint8)", +"7c0176df": "starUp(uint256,uint256,uint256,uint256)", +"7c0207cb": "isActiveTranscoder(address,uint256)", +"7c024fe2": "getNowTimestamp()", +"7c027ed9": "bonus01Start()", +"7c02e1ea": "addressChangeBlock()", +"7c03d6f9": "ApprovalFlower(address,address,uint256)", +"7c051d47": "seedSaleFinished()", +"7c052478": "setSports3DContract(address)", +"7c05ba7a": "accreditInvestor(address,address)", +"7c05caf3": "testCreateCostAuth()", +"7c0656ac": "LogEtherBounty(address,uint256,string)", +"7c06db04": "doManualTrade(address,address,uint256)", +"7c06eb7c": "IGTRMB()", +"7c0712ae": "setAdd(bytes32,address)", +"7c07329f": "returnUserBalance(address,address[2],uint256[8],uint8,bytes32[2])", +"7c078723": "saleExchangeRate4()", +"7c08ab5b": "BITToken()", +"7c098bc3": "getBonusPercent(uint256)", +"7c0a893d": "blockAccount(address)", +"7c0ab7be": "setBidding(uint40,uint256)", +"7c0b2484": "enableInviteOfSU(string)", +"7c0b582f": "WORLD1Coin()", +"7c0b8de2": "NFT()", +"7c0c19b3": "zrcoin(uint256,string,uint8,string)", +"7c0cc0be": "setActivator(address)", +"7c0d021e": "CreateIssue(uint256,uint256,uint256,address)", +"7c0e2a5a": "SetLockDate(uint256)", +"7c0efb8b": "revokeManagerPermission(address,string)", +"7c0f6b35": "getAllMembers()", +"7c0f884b": "SlidebitsTestToken(string,string)", +"7c0fbc31": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes,address)", +"7c0ff00c": "WithdrawTokensToBankroll(uint256)", +"7c1008d5": "getLastTipTime(address,bytes32)", +"7c108f84": "UBToken()", +"7c10e00e": "setMinBetForOraclize(uint256)", +"7c116ec9": "respectRequiredToRecruit()", +"7c11ef87": "calcUSE(uint256,uint256,uint256)", +"7c1288b5": "distAgent()", +"7c129c1c": "voteXId(uint256,bool)", +"7c12b6f2": "_handleWin(uint256,uint256)", +"7c12f1a4": "addgamecard(string,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"7c132f2c": "crossForkBlockNumber()", +"7c134a38": "DetailedERC20()", +"7c13b331": "OysterShell()", +"7c13ed68": "setIPGInfo(address,address)", +"7c153534": "tokenFrom()", +"7c157d12": "_synthesizeWith(uint256,uint256)", +"7c1595f2": "setLockupContract(address)", +"7c161409": "BetexToken(uint256,uint256)", +"7c163fb8": "myLoveBlocks()", +"7c170237": "ElectroneumGold()", +"7c1716af": "payToken(bytes32,uint256,address,bytes)", +"7c17357d": "totalVesting()", +"7c17dc02": "AddFish()", +"7c183b4b": "LogRef(address,address)", +"7c18a32f": "deductionToken(address,uint256)", +"7c194295": "BurnableTokenMock(address,uint256)", +"7c197c09": "fullSupplyUnlocked()", +"7c19e1f0": "replaceInFrontRequest(address,uint256)", +"7c1a35d7": "RECYCLE_TIME()", +"7c1a4ee8": "SITExchanger(address,address,address)", +"7c1b6afe": "getGrantCount()", +"7c1b814f": "openCrowdFunding(bool,uint256,uint256)", +"7c1c05dd": "gapInPrimaryCrowdsaleAndSecondaryCrowdsale()", +"7c1c7860": "TMEDsalesToken()", +"7c1e5ced": "transferTemp(address,uint256)", +"7c1f9d5e": "tokenFeeMin()", +"7c204c27": "MinerX()", +"7c21ae12": "activeShareholdersArrayLength()", +"7c21c7e2": "getToggleOwner(uint256)", +"7c22232a": "playersPoints(address)", +"7c236c3b": "confirmStackholderTransaction(uint256)", +"7c23d1cb": "removeLevel(uint256)", +"7c2464f3": "startICOTime()", +"7c24b295": "votedYes()", +"7c24dfb0": "FundTransfer(address,string,uint256)", +"7c25d997": "getRarityValue(uint256)", +"7c25f260": "Government()", +"7c261929": "query(string)", +"7c262269": "isWorkFailState()", +"7c265200": "NameGame(uint256,uint256,uint256)", +"7c267b07": "Cryptrust()", +"7c280f44": "generate_random(uint256,string)", +"7c28ddc1": "fiatPerAssetUnit()", +"7c2926a8": "getHTLCHash(uint256,uint256,uint256,bytes32,int256)", +"7c29c514": "AgroeconomyToken()", +"7c29e89a": "mintUnlockTimeBatch(address[],uint256[],uint256)", +"7c2b00fc": "SGCL()", +"7c2b07e3": "EtherX()", +"7c2b11cd": "arraySum(uint256[])", +"7c2b606a": "isAddressManager(address)", +"7c2b8d0a": "votedFreeze(address)", +"7c2cf543": "ROLCToken()", +"7c2d2326": "PostIL()", +"7c2d86f7": "usePluginWhitelist()", +"7c2da7aa": "setValue(string,uint256)", +"7c2db5ff": "payoutX(address,uint256)", +"7c2e08a3": "isMinimumGoalReached()", +"7c2eb1c8": "distributeEther(uint256,uint256)", +"7c2efcba": "v()", +"7c2ffbb3": "returnRate()", +"7c3064f1": "refundStake()", +"7c313baa": "buyPriceAtIndex(uint256)", +"7c31975f": "SolClub()", +"7c320853": "initialSale()", +"7c331b52": "FlightDelayAddressResolver()", +"7c337086": "CryptoDegree()", +"7c33774d": "CluckCoin()", +"7c3382ae": "setIcoTokenExchangeRate(uint256)", +"7c33ebfd": "transferToMany(address[],uint256[])", +"7c34689b": "ACchainToken()", +"7c34752f": "stringToSig(string)", +"7c34e853": "getCombinedTotalHP(uint256,int256)", +"7c35384f": "addTradeRecord(uint256,uint256,uint256,uint256,address,address)", +"7c359dc3": "manualTokenTransfer(address,uint256)", +"7c35b6ed": "setPriceBeforeGoalReached(uint256)", +"7c35be7a": "isOpen(bytes32)", +"7c360d1e": "calculate(uint16,uint8)", +"7c3625e3": "SatoExchange()", +"7c366cb5": "LADToken()", +"7c372277": "ReserveTokensHolder(address,address,address)", +"7c37559e": "CreateGLX(address,uint256)", +"7c37605c": "startSellingGenes(uint256,uint256,address)", +"7c377d74": "getForkReputationGoal()", +"7c38ce18": "tokensIssuedLocked()", +"7c38ee53": "addContactRecord(string,string,string,address,string,string,int256,string,int256,address,string,int256)", +"7c396b83": "f6()", +"7c39759b": "kscBurnWhenMoveToMainnet(address,uint256,string)", +"7c399142": "ITSToken()", +"7c3a00fd": "interestRate()", +"7c3a1d32": "setWithdrawCreator(address)", +"7c3aef0e": "cardDescription(uint8)", +"7c3b1e06": "setcompany(string,uint256,string)", +"7c3ba89e": "early_bird_minimal()", +"7c3be5fb": "setVernamOriginalToken(address)", +"7c3bf42d": "applications(address)", +"7c3c0f89": "eastadsCredits()", +"7c3c2611": "Retained(address)", +"7c3c4c83": "ARBITRAGECrowdsale(address,address)", +"7c3d30fd": "_bid(uint256,uint256)", +"7c3e50ff": "balanceLocked(address,address)", +"7c3eef61": "AbyssToken(address,address[],address)", +"7c3fe278": "endSto()", +"7c3ffdee": "awardCup(uint8)", +"7c405325": "unlockTokens(uint256)", +"7c4057ae": "removeMasterNodes(address,uint256)", +"7c41de34": "_AwardedMissedBlockBonus(address,address,uint256,bytes32,uint256,uint256)", +"7c423f54": "getAlerters()", +"7c4338af": "getEarlyIncomeBalance(address)", +"7c434fbb": "AT(uint256,string,uint8,string)", +"7c435e6f": "updateEursPerEth(uint256)", +"7c436a6d": "ownerEnableRefunds()", +"7c437918": "addPreSaleBuyer(address,uint256)", +"7c44066c": "summCashwolf()", +"7c44546e": "SiliconValleyToken()", +"7c44f160": "Tier_Starter_Registration()", +"7c45c98a": "removeSpectatorBetFromGladiatorBattle(uint256)", +"7c45ef6c": "stringToSig(string,string)", +"7c46a5e7": "Unhalted()", +"7c4734f4": "getParticipantsHash(address,address)", +"7c475ade": "IOV()", +"7c479343": "investSum()", +"7c47965e": "isInCurrentGeneration()", +"7c47ac44": "getProjectVerification(uint256)", +"7c47df2f": "removeEligibleBurner(address)", +"7c48bbda": "tokensIssued()", +"7c48f8e7": "penaltyFraction()", +"7c4a0552": "freezeBlocks()", +"7c4a7831": "concludeSeason(int8,uint256,uint256)", +"7c4aa44c": "saleStartEpoch()", +"7c4b414d": "depositTokens()", +"7c4c27c8": "isThisPuritanicalVersion()", +"7c4cafd9": "startSecondaryCrowdsale(uint256)", +"7c4d18bd": "setMockBool(bytes4,bool)", +"7c4d972b": "setRoundEnd(uint256,uint256)", +"7c4db77d": "saleWallet()", +"7c4deecb": "checkGameContinues()", +"7c4e7fbb": "QKL()", +"7c4ecead": "startPresale(uint256,uint256)", +"7c4edde7": "withdrawFrom(address,address,address[])", +"7c4f8958": "SPECIALIST_STAKE_ONE()", +"7c513a21": "arrIdx2lost(uint256)", +"7c519ffb": "setTrading()", +"7c524b2e": "set_sell(bool)", +"7c52b934": "getTokenOrder(uint256)", +"7c535f1f": "bonusAmount(uint256,address)", +"7c54aa1a": "deployCommunityBallot(bytes32,bytes32,uint128)", +"7c559d5f": "bonusPattern(uint256)", +"7c567bfe": "isSale(address)", +"7c56b798": "addProject(address)", +"7c56d40b": "LogFunderInitialized(address,address,string,uint256)", +"7c57ad45": "newAsset(string,uint256,string,string)", +"7c57d947": "tokenMinter(uint256)", +"7c5817e1": "indexOfProvider(address)", +"7c582304": "updateInvestmentTotal(address,uint256)", +"7c58a4ed": "canPlatformFundingWithdraw(uint256)", +"7c59cb3d": "setCSInterface(address)", +"7c59f828": "getWizzType(uint256[2])", +"7c5b4a37": "adminWithdraw(uint256)", +"7c5b5b06": "lastProcessedVaultId()", +"7c5bfe81": "INITIAL_EXCHANGEABLE_TOKENS_VOLUME()", +"7c5c2cef": "nPolls()", +"7c5ca5a6": "ICOFY()", +"7c5d4949": "calcInvesting(address)", +"7c5d7980": "addRC(address)", +"7c5df29b": "auctionDeklaEnd(address,uint256,uint256,bytes)", +"7c5e16fd": "MAX_ALLOWED_BY_STAGE_2()", +"7c5e2795": "INITIAL_PRICE()", +"7c5e6949": "setlvlUpdate(string)", +"7c5e83cc": "Bullex()", +"7c609885": "allowWorkersToContribute(address,address[],address)", +"7c60fa60": "minReq()", +"7c612409": "setClient(address,address,string,string,string)", +"7c61b482": "coinAgeRecordForAddress(address,address,uint256)", +"7c61d567": "transferRegion(uint256,uint256,address)", +"7c622a65": "TEBT()", +"7c623ce2": "boughtWithWhitelist()", +"7c62965e": "excess_withdraw()", +"7c62e2a4": "getDog(uint256)", +"7c63144e": "TokenUsed(uint8,uint8)", +"7c645c21": "getPlayerLength()", +"7c64a45c": "TOTAL_VOTE_PERIOD()", +"7c64ac43": "vestingEnds()", +"7c652e26": "CENT_DECIMALS()", +"7c654303": "isFunded()", +"7c65452c": "newValue()", +"7c65f503": "initVault()", +"7c66ae22": "play(uint256,uint256,address)", +"7c674695": "MarkedAsScam(address,address,uint256)", +"7c67fb9f": "MIN_STARTING_PRICE()", +"7c67fdf5": "bltOwnedAcc()", +"7c67ffe7": "ownerSetBankroll(address)", +"7c686c15": "setBonusPrice()", +"7c68bebe": "getUserDepositsAmount(address)", +"7c68e078": "_createMonster(uint256,uint256,uint256,uint256,uint256,bytes,address)", +"7c68ec4c": "_compareStrings(string,string)", +"7c695384": "bet(uint8,uint256)", +"7c699401": "getAllRevisionIpfsHashes(bytes32)", +"7c69b5d1": "NewDeposit(uint256)", +"7c69ef8d": "market2020TokenCreated()", +"7c6aafd1": "getRegularCarsForVariant(uint256)", +"7c6ac2af": "withdrawal_Lem(uint256)", +"7c6b2d6a": "setV_R1(uint256)", +"7c6b5b10": "amountFirst()", +"7c6bd3e8": "preGrant(address,uint256)", +"7c6bd96d": "extendStart(uint256)", +"7c6db9b5": "changeMinimumWei(uint256)", +"7c6e19a8": "UpdateTokenDailyExchangeAmount(address,address,uint256)", +"7c6e481c": "bancorChanger()", +"7c6e5809": "AEZtoken()", +"7c6e607d": "SuicideContract()", +"7c6e94e3": "migrationStarted()", +"7c6eb7bb": "generateNewRandom()", +"7c6fa5c2": "attackPrizeRatio(address)", +"7c6fb02a": "getCrydrViewStandardName()", +"7c6fb59d": "updateCreditBalance(address,uint256,uint256)", +"7c6fdec5": "getStrategyTokenPrice(uint256,uint256)", +"7c6fe7a9": "getAddressIdArray(address,uint256,string,string)", +"7c709fbe": "mxrjjToken()", +"7c70b205": "windowLength()", +"7c70c444": "DOXToken()", +"7c70e791": "removeInspector(address)", +"7c70e7fe": "currentRewardReleasePercentageRatePerYear()", +"7c71c0eb": "getIsProjectBonus()", +"7c7202e5": "setReceiver2()", +"7c72d868": "sendDividendsEthers()", +"7c72e273": "auctionFinalize(bytes32)", +"7c73f846": "getMinimumEndowment(uint256,uint256,uint256)", +"7c74d4d4": "JCCoin()", +"7c759d0d": "lock(address,uint256,uint256,uint256,uint256)", +"7c75c1b4": "distributeWithPolicy(address,uint256,uint8)", +"7c774111": "OF()", +"7c77b7c4": "getNumberOfDisputedDealsProDoctor()", +"7c77fad6": "AddMatch(string,string,uint256)", +"7c78cb13": "decrementQuantity(uint256)", +"7c7959e0": "CryptoNumismat()", +"7c796a83": "setGasUsage(uint256)", +"7c799e90": "str2bytes(string)", +"7c79c167": "stageHardcap(uint8)", +"7c79ebce": "expired(uint64)", +"7c7a52bf": "newChallenge(uint256,address)", +"7c7b0ff4": "getRide(uint256)", +"7c7b13b0": "PlayX50()", +"7c7c7695": "getAccountID(address)", +"7c7c7c3c": "SUPER_ADMIN()", +"7c7ce7df": "mintToPool(uint128,uint256,uint128)", +"7c7d14cf": "getPawnId(uint256)", +"7c7d809b": "saleEndUnixTime()", +"7c7dc098": "early_supporters_distribution(address[],address,address,uint256)", +"7c7dd391": "TokensWithdraw(address,address,uint256)", +"7c7ead51": "Wscchain(uint256,string,string)", +"7c7edd68": "PRHXToken()", +"7c7eeaa1": "hirerLastResortRefund(bytes16,address,address,uint256,uint256)", +"7c80bb4f": "getNameByAddress(address)", +"7c80feff": "getTokenIndicies(address,address[])", +"7c812015": "HedgeCoinCapitalToken()", +"7c81ff56": "TGE_SUPPLY()", +"7c8255db": "sendGifts(address[])", +"7c82a1d4": "reserveKY()", +"7c82eff7": "getZero(uint256)", +"7c831bd9": "rateCoefficient()", +"7c83b25c": "gettimelineandgoal()", +"7c83fdf7": "createFiatInvestorRequest(uint256)", +"7c842e5e": "updatePriceFromRealUnicornPrice()", +"7c84b40c": "makePrivate()", +"7c84c69b": "assertEq(bytes32,bytes32)", +"7c853cc1": "WithdrawFromKickTheCoin()", +"7c857566": "destructGame(address)", +"7c858e02": "smallestUnit()", +"7c85a757": "updateGooConfig(address)", +"7c85ab3a": "boardMemberCancel()", +"7c85df24": "setWHaddress(address)", +"7c871d31": "setIcoDates(uint256,uint256)", +"7c88e3d9": "mintBatch(address[],uint256[])", +"7c89e504": "removeSomeEthers(uint256,address)", +"7c8af704": "resolveRound()", +"7c8b1fa2": "ShNShToken()", +"7c8c2234": "pushMilestone(uint16,string,string,uint64,bool)", +"7c8c6643": "unhint(bytes32)", +"7c8d56b8": "numeraiTransfer(address,uint256)", +"7c8db773": "CSE()", +"7c8dc575": "rejectConsent()", +"7c8de59a": "DCM(uint256,string,uint8,string)", +"7c8e040f": "confirmAtkBossQuest(address)", +"7c8e17e5": "teamOneTotalPlayers()", +"7c8e4e25": "credosReserveAccount()", +"7c8e8e69": "MarkLesterMiranda()", +"7c8f76a1": "issueTokens(address[],uint256[])", +"7c8f8278": "setTotalTokenSupply(uint256)", +"7c8ff8ac": "tokenProof(uint256)", +"7c905c9f": "preICOprice()", +"7c9143c9": "_hash(uint256,bytes32)", +"7c91e4eb": "DISTRIBUTION()", +"7c92a217": "c_MinFunds()", +"7c930a10": "ETHERECASHTOKEN(uint256,string,string)", +"7c935183": "test_deposit()", +"7c937700": "revokeAllVulnerable()", +"7c9473f6": "sellNoDecimals(address,uint256)", +"7c94830b": "kairosOwner()", +"7c9542bd": "LogWalletUpdated(address)", +"7c955583": "pendingWhitelistHash(address[])", +"7c95ef3f": "privatePlacementSupply()", +"7c9677be": "allocateTeamToken()", +"7c968f5d": "get_token_data_buyable(uint256)", +"7c96f680": "MyAdvancedToken(uint256)", +"7c97479b": "cardSupply()", +"7c976dbd": "tokenCreationCapOverall()", +"7c97ffe2": "DeusToken()", +"7c987ba4": "getMemberPayed(address)", +"7c989b45": "setBonus(uint256,uint256,uint256,uint256,uint256,uint256)", +"7c996d9e": "IndiaStocksCoin()", +"7c99922d": "founderTokensVested()", +"7c9b0892": "lnUpperBound(uint256,uint256)", +"7c9b387b": "maximumClaimPriceWei()", +"7c9c3d89": "mintCoinsForOldCollectibles(address,uint256,address)", +"7c9cbd38": "changeTeamTokens(address)", +"7c9cd7df": "changeDeveloper_only_Dev(address)", +"7c9d564f": "_pRand(uint256)", +"7c9d8bdb": "getBetsByCategory(bytes32)", +"7c9f4941": "SplitSend(address,address)", +"7c9fe2a7": "train2(uint256)", +"7ca005b3": "generateProof(string,address,address,uint8)", +"7ca013e6": "getRateToPxlAmount(uint256,uint256)", +"7ca01b2a": "getTestFour()", +"7ca1a66c": "resumeLotto()", +"7ca1cb48": "approveCurrencyTokenAddress(address,bool)", +"7ca21b37": "setMinPersonalCap(uint256)", +"7ca24d95": "changeEndTime(uint64)", +"7ca2795f": "AdvanceQueue()", +"7ca31724": "tokenId(address)", +"7ca54248": "lastSaleInHGT()", +"7ca55e00": "etherandomVerify(bytes32,bytes32,bytes32,uint256,uint256)", +"7ca5d8fa": "read_u8()", +"7ca60997": "rewardComment(address)", +"7ca63061": "LibraCreditNetwork(uint256,string,uint8,string)", +"7ca64683": "hasFiveStepWithdraw()", +"7ca823d5": "getAverageChainWork()", +"7ca828d0": "_canBreedWith(uint256,uint256)", +"7ca9429a": "getOfferCount(address,address)", +"7caae38c": "calluseraddress(address,address)", +"7cab5e8c": "removeApproval(address)", +"7cab9ba2": "setReceiver()", +"7cac4c7d": "JOY()", +"7cac9736": "computeResult()", +"7cad997f": "purchaseByEMONTImpl(uint16,uint256,uint64,address)", +"7cae6cb5": "determineEdition(uint256)", +"7cae8509": "delete_blockedAddress(address,address)", +"7caf3115": "MovieWorld()", +"7caf59d9": "addPullRequest(bytes32,bytes32,uint128)", +"7cb04b87": "running_id()", +"7cb070c7": "OPL()", +"7cb1442c": "f1(uint256,uint256)", +"7cb1bb0b": "setOraclizeGasExtraArtwork(uint32)", +"7cb25bc7": "dividendCount()", +"7cb2b79c": "setTokenManager(address)", +"7cb2c15b": "getTXdatabyCode(bytes32)", +"7cb34d2d": "register(bytes32,bytes32,bytes32,string)", +"7cb46307": "NewContent(bytes32)", +"7cb4e22a": "IEIP165()", +"7cb4ef0e": "getHashRateOf(address,uint256)", +"7cb51761": "setMaxPayments(uint256)", +"7cb56698": "rescueLostFighter(uint256,address)", +"7cb5d0ef": "Airchain(uint256,string,uint8,string)", +"7cb6a6b2": "generateContract(uint256,uint256)", +"7cb6b35d": "adjustLimitBetweenIssueAndNormal(uint256,bool)", +"7cb6cf3e": "ETH_SIGN_PREFIX()", +"7cb8adc7": "s9(bytes1)", +"7cb916b9": "withdrawAlltokenFunds(address)", +"7cb91d84": "slots_left()", +"7cb97b2b": "set_owner(address)", +"7cb9cf54": "removeSeller(address)", +"7cb9da88": "setIncludes(uint256,uint256)", +"7cba3f04": "PriceWeekThree()", +"7cbab0cb": "updatewallet(address)", +"7cbae071": "setPresalePerEth(uint256)", +"7cbb6934": "generateRandomNum()", +"7cbba335": "get_order_book_length(string)", +"7cbbf1da": "proofType_Native()", +"7cbc2373": "redeem(uint256,uint256)", +"7cbc4eb6": "lost(uint256)", +"7cbc6903": "totalBidCount()", +"7cbcc254": "__reset__()", +"7cbd3508": "_unpackExpValue(uint256)", +"7cbd5444": "isPriv()", +"7cbd9e8d": "existCaller(address)", +"7cbe0f32": "addOpenAction(string,string,string,string,string)", +"7cbe9e41": "DANKSIGNALS()", +"7cbf2bdc": "CapFlexed(uint32)", +"7cbfb8a5": "TransferTokens(address,uint256)", +"7cc07974": "HFTCrowdsale(address)", +"7cc08d53": "partProvider()", +"7cc0c3a7": "controllers()", +"7cc0e670": "freezeAccountForContract(address,bool)", +"7cc1303a": "trade(uint8[2],bytes32[4],uint256[7],address[6])", +"7cc1c640": "getActualPriceOfCardOnBuyAuction(uint256)", +"7cc1e28d": "setValidatorRewardPool(bytes32,uint256)", +"7cc1f867": "getContractInfo()", +"7cc2fe49": "setResourcesPrimaryManager(address)", +"7cc35d99": "historyIt()", +"7cc3ae8c": "endAt()", +"7cc3b48e": "withdrawKrowns(address,uint256)", +"7cc3beb2": "acceptArbiter()", +"7cc48875": "Slots()", +"7cc49427": "RemoveLock(address,uint256)", +"7cc4e55f": "lowestAskPrice()", +"7cc4ef14": "purchaseLand(uint256,uint256,uint256)", +"7cc589f9": "BlocklancerEmploymentContract(string,address)", +"7cc666da": "MoratoriumTransfers(uint256,address[],address[])", +"7cc9e4f0": "registerParticipant(address)", +"7ccaa9fa": "calcMerkle(bytes32[],uint256,uint256)", +"7ccc5aea": "DSPParametersChanged(address)", +"7ccc7e94": "inv_contract()", +"7ccce851": "isBlacklistedUser(address)", +"7ccd099d": "test_32_assertGasUsage100Boards()", +"7ccd3f79": "setAA(uint256)", +"7ccec110": "TestWorldSnapshot(uint256)", +"7ccefc52": "minimumMakerProtocolFee()", +"7ccf0d44": "_setAuctionObj(address,uint256,uint256)", +"7ccfd45a": "removeSubUser(address)", +"7cd022d4": "gen0PresaleLimit()", +"7cd07e47": "migrator()", +"7cd208b6": "requestRefunding()", +"7cd30fe3": "MarketingDevelopmentAddress()", +"7cd3229a": "board()", +"7cd3969d": "getUnsoldReceived(uint256,address,address)", +"7cd44272": "getConversionRate(address,address,uint256,uint256)", +"7cd4559c": "_rewardApprovers(address)", +"7cd49414": "participate(address,string,bytes32[],bytes32[])", +"7cd49fde": "_counter()", +"7cd50577": "setTradable(bool)", +"7cd64c79": "AdvancedERC20(uint256,string,string)", +"7cd6a7fd": "setSettings(uint256)", +"7cd73941": "withdrawBAT(uint256)", +"7cd7c2bd": "setAnimalMeta(uint256,string)", +"7cd87ee9": "Libertax()", +"7cd9b0f8": "userHasHunterLicence(address)", +"7cda71a6": "preSaleTotalSupply()", +"7cdacb98": "setContractPartner(address)", +"7cdbae63": "addRegistryIntoTagsIndex(address)", +"7cdcc514": "replyThread(uint256,string,string)", +"7cdcdf23": "RenderTokenCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"7cdd053a": "addRace(uint8,uint8,uint8)", +"7cdd8419": "getEtherPriceforDapp()", +"7cddc1de": "checkBonusTokenHoldingPeriodRemained(address)", +"7cde2a7e": "setCount(uint256,uint256)", +"7cdee6fb": "buySpaceship(uint16)", +"7cdef83c": "debtEngine()", +"7cdf6d0b": "TranslateME()", +"7cdf8ace": "adminCommand(uint8,address,uint256)", +"7ce01daf": "rollSystem(uint256,address)", +"7ce1b194": "ModernTokenPlus()", +"7ce1db53": "ShowNextCliff(address,uint256)", +"7ce1e2eb": "releasedBountyTokens()", +"7ce2432b": "lbrsToken()", +"7ce26195": "approveGame(address)", +"7ce2d863": "_calcCheckoutTime(uint256)", +"7ce335ac": "amountwon()", +"7ce3489b": "setFeePercent(uint256)", +"7ce50441": "updateTimer(uint256,uint256,uint256)", +"7ce52eb6": "distributePrizes()", +"7ce56303": "deployVestingContract(address,address,uint256,uint256,uint256,bool)", +"7ce5b85e": "transferBuy(address,uint256)", +"7ce5f9da": "DIYToken()", +"7ce645a6": "fundsAreAvailable()", +"7ce65725": "TEC()", +"7ce67d60": "initLoan()", +"7ce6e4ca": "getData_1()", +"7ce7c990": "transfer2(address,uint256)", +"7ce7d660": "CAF1(address)", +"7ce84784": "createtoken(string,string,uint256,address,address)", +"7ce85957": "setEthCollector(address)", +"7ce8e196": "test_claim()", +"7ce901e7": "TestContract(address)", +"7ceac0b8": "TokenSale(address,uint256,uint256)", +"7cead212": "dissolvedIndexToApproved(uint256)", +"7cec3a3a": "getBUS(bytes32,uint256)", +"7ced3d4c": "validArb2(address)", +"7ced55c2": "pvpPaused()", +"7cee8e70": "subTotalSponsored(address,address,uint256)", +"7cee919c": "getCurrentHash()", +"7cee9ee8": "placeBet(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"7cef6047": "getNavHistory(uint256)", +"7cef6966": "addLaureato(string,string,string,bytes32)", +"7cefcc52": "burnedCount()", +"7cefd9f8": "initCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"7cf0ffcb": "forceDivestAll()", +"7cf12b90": "unFreeze()", +"7cf12ff8": "registryRequestSerialNumber()", +"7cf141fd": "removeGlobalAdmin(address,address)", +"7cf2b9e4": "updateVotingContractAddress(address)", +"7cf2f670": "Pinakion(address,address,uint256,string,uint8,string,bool)", +"7cf37493": "finalizeNOK()", +"7cf4c543": "createTransaction(uint256,address)", +"7cf52f3c": "getPrevRoundWinner(uint256)", +"7cf5d66f": "notifyTokensReceived(address,uint256)", +"7cf5dab0": "increment(uint256)", +"7cf62838": "EIP20ByteCode()", +"7cf6babf": "BasicSprout()", +"7cf6be2c": "createBid(bytes32,address,address,address,uint256,uint256,uint256)", +"7cf7b9f4": "determineDate()", +"7cf7e0e2": "VLCCoin()", +"7cf7f740": "getBuildingInfo(uint256)", +"7cf846c9": "registerManoContract(address,bool)", +"7cf90fcc": "addItem(address)", +"7cf99c33": "getIsMigratingFromLegacy()", +"7cfa1133": "Baxgold()", +"7cfb1e66": "TeamSum()", +"7cfb6052": "setPremium(int256)", +"7cfbc7a5": "setMaxBetAmount(uint256)", +"7cfe18c0": "internalCalculateEthersWithBonus(uint256)", +"7cfe19af": "A_Free_Ether_A_Day()", +"7cfe7a25": "BankhadCoin()", +"7cff33c7": "setMainSaleParameters(uint256,uint256,uint256)", +"7d007ac1": "setProposalDuration(uint256)", +"7d00818c": "allowedAddressesOf(address)", +"7d00848a": "getSinistre()", +"7d019f87": "isPreSaleClosed()", +"7d02bc1c": "getOldest()", +"7d02db72": "CryptoRUB()", +"7d036b0d": "finishProofPhase(uint256)", +"7d0381a7": "notify(address,uint256,uint8,uint8,uint8,uint256,uint256,bool)", +"7d0385c2": "createPromotionalRenewal(uint256,uint256)", +"7d03c394": "Logs2(uint256,uint256,uint256,uint256,uint256,uint256)", +"7d03e603": "GetUserExtraData2(address)", +"7d03f5f3": "newGame()", +"7d049675": "fechAllCandidatesByStage(uint256)", +"7d04d239": "setTokenMintApproveReset(address,address,address,address)", +"7d051cf3": "getTokensAcquired(address)", +"7d052a2e": "processReservationContribution(address,uint256)", +"7d06053b": "perturb(bytes32)", +"7d065c93": "getPayout()", +"7d075efb": "withdraw(address,address,address,bytes)", +"7d087715": "getwithdrawableAmount(address)", +"7d087f47": "gamblerevent(address,uint256)", +"7d091a7e": "pct(uint256,uint256,uint256)", +"7d094533": "announceVictory(string)", +"7d0981dd": "ModifyMine(address,bool,string,uint256)", +"7d09f560": "Equio(string,address,address,bytes32,uint256,uint256)", +"7d0a5e3b": "fightWIthMob(uint256,uint256)", +"7d0b4c8b": "withdrawEquity(uint256,bool)", +"7d0b4d60": "migrationEnded()", +"7d0bc9c6": "tier_action(uint8,uint256,uint256,uint8,uint256,uint256)", +"7d0bd79a": "publicSaleTokensPurchased()", +"7d0c269f": "isWhitelister(address)", +"7d0cf8b5": "Seele()", +"7d0e6aa9": "BitrootCoin()", +"7d0e6b6f": "setNextDiscountTTMTokenId1(uint64)", +"7d0e750d": "getMyTime()", +"7d0eb9b9": "RemoveVerifiedInfo(bytes32)", +"7d0f023d": "_deleteBytes(bytes32)", +"7d0f7528": "getFromList_(uint8,uint256)", +"7d103f14": "getBallotBook(uint256,uint256,uint256)", +"7d1108f5": "getAssetData(uint256)", +"7d112d64": "authenticateVoter(string)", +"7d1157c8": "rawSendEther(bytes32)", +"7d1173b0": "DGAMEToken()", +"7d11f020": "oracleName()", +"7d124a02": "setRewardAddresses(address,address,address)", +"7d1286f6": "InterfaceId_ERC721Exists()", +"7d128d2e": "checkAgentSign(address,address,bytes32)", +"7d12b689": "checkPoolsDone()", +"7d136133": "SimpleATM()", +"7d13a256": "highFundingGoalReached()", +"7d14500a": "Sukiyaki()", +"7d14c8df": "setStaleTime(uint256)", +"7d150529": "countdownTimeLeft()", +"7d1541ad": "listDapp(string,string,string)", +"7d1710e4": "saleBalanceOf(address)", +"7d1842ec": "getPayeeBalance(bytes32,uint8)", +"7d18a197": "IndoAset()", +"7d19514d": "addFunds(uint256,uint256,bytes32,uint256)", +"7d19c777": "Emission(address,uint256,uint256,uint256,uint256,uint256)", +"7d19e292": "transferTokensToContractOwner(uint256)", +"7d19e596": "getEscrow(uint256)", +"7d19ec9d": "getUserAccount(bytes32)", +"7d1a6e3f": "compareTo(string,string)", +"7d1b2666": "fibokenCreatedCount()", +"7d1bd3ea": "setClientSupply(address,uint256,uint256)", +"7d1ca9fd": "setBeneficiary2(address)", +"7d1d0553": "convertToMiniUI(uint256)", +"7d1d7fb8": "settlementFee()", +"7d1e97a1": "cardTokenAddress()", +"7d1ea6d4": "m_token()", +"7d1f067c": "EthBankRoll(uint16)", +"7d1f561b": "set_pre_kyc_iconiq_bonus_denominator(uint256)", +"7d2026cd": "distributeWinnings()", +"7d2044cc": "AuctusStepVesting(address,uint256,uint256,uint256)", +"7d211c75": "peth()", +"7d21ce4d": "_Mint(address,uint256)", +"7d2211d6": "setStatus(string)", +"7d22e9df": "clearAllocatedAndSalaryTokens(address,address)", +"7d22f431": "delegatePercent(uint256,uint256,uint256)", +"7d230dfd": "wedding()", +"7d236928": "getGenesMarketAddress()", +"7d2402d6": "inPresale()", +"7d240b9c": "setLockToken(bool)", +"7d2429a8": "long_party()", +"7d242ae5": "setBasePrice(uint256,bytes)", +"7d24a8a1": "returnToken(address,uint256)", +"7d24cd18": "onExecuteMessage(address,uint256)", +"7d25d7cd": "tokensToTransfer(bytes32,address,address,address,uint256,bytes,bytes)", +"7d263245": "COOLDOWN_TIME()", +"7d264bad": "adexTeamAddress()", +"7d268ac1": "ArtworkCore()", +"7d27ecf9": "phase1TokenSold()", +"7d287697": "testTryGetUnset()", +"7d298ee3": "beforeExecute(address,uint256)", +"7d29beff": "placeVoxel(uint8,uint8,uint8,uint8)", +"7d29f868": "ChangeUSDto1ETH(uint256)", +"7d2a0f7a": "isWhiteListedValueValid(address,uint256)", +"7d2a47b9": "findShareholder(address)", +"7d2aeb8a": "releaseVestedTokens(uint256)", +"7d2b48bb": "getMaxAssignedRequests()", +"7d2b9cc0": "setRequiredSignatures(uint256)", +"7d2c93d7": "validateTypeReference(uint256,bool)", +"7d2d661f": "genLimit(uint256)", +"7d2d92ac": "withdrawTheUnsoldTokens()", +"7d2dfc30": "FourCrowdsale(uint256,uint256,uint256,uint256,address,address)", +"7d2f42c3": "updateRating(address,bool)", +"7d309331": "Bitceun()", +"7d3157bf": "confirmBeneficiary(uint256)", +"7d320ef8": "proofStorage_IPFS()", +"7d326635": "getLendingObjId(address,uint256)", +"7d32e7bd": "transfer(address,bytes32)", +"7d34c2e3": "setMarketingAndRNR(address)", +"7d34f5ac": "dailyTotals(uint256)", +"7d3533da": "ownerSetAllowPublicWithdraw(bool)", +"7d35f656": "count_customer_deposits()", +"7d363718": "BitcoinXChainToken()", +"7d363720": "getCurrentBonusFactor()", +"7d368f88": "afterEnded()", +"7d36e478": "ClaimBalance(address,uint256)", +"7d37fcba": "setManagementContractAddress(bool,address)", +"7d380265": "addOptionChain(uint256,string,uint256,uint256,bytes32,address,int256[])", +"7d38a772": "updateDeveloperMiningPower(uint256)", +"7d394f90": "addMasternode(address)", +"7d398a86": "SourceChanged(string,string,uint256)", +"7d3b2d81": "PayXToList(address[],uint256)", +"7d3bfaee": "withdrawSurprisePotUser(uint256,uint256,uint8,bytes32,bytes32)", +"7d3c42d2": "EtherBrosMaker()", +"7d3c5961": "middleTimestamp()", +"7d3c6da5": "CreateLudumTokens(address,uint256)", +"7d3d220d": "CitizenOne(uint256,address,uint256)", +"7d3d6522": "goalReached()", +"7d3dcbc3": "setTRM1BonusActive(bool)", +"7d3ee409": "setPatient(string,uint256,address,string,string,uint256,uint256)", +"7d3fa29e": "addressToGoldDeposit(address)", +"7d3fcaff": "getMatchReport(uint256)", +"7d40189a": "timeAdjustPlus()", +"7d40583d": "setRoleCapability(uint8,address,bytes4,bool)", +"7d408b44": "getMemberTokenRemain(address)", +"7d40e9e0": "purchasedAmountOf(address)", +"7d40eb25": "TITANCORE()", +"7d4120a9": "insChainToken()", +"7d41cc60": "modifyAuthorizedCaller(address,address)", +"7d426826": "INTREPID_VOUCHER_PRICE()", +"7d42af97": "PrivateSaleEndTime()", +"7d436d76": "consume(bytes32,bytes32[])", +"7d443e57": "getInitInfo()", +"7d445654": "lastLargestHODLERBalance()", +"7d4504e0": "totalETHraised()", +"7d451aa7": "zgetOwner()", +"7d457ac3": "CompensationSentEvent(address,uint256)", +"7d459c71": "Multiexshares()", +"7d46702b": "icoCollected()", +"7d472f1c": "xnotifications(uint256)", +"7d475c32": "LogAccessPolicyChanged(address,address,address)", +"7d478407": "gameEncryptedText()", +"7d47b4e7": "setAIRDROPPrice(uint256)", +"7d48441f": "_isContract(address)", +"7d487532": "setMember(bytes32,address,bool)", +"7d48dcd7": "onPurchase(address,address,uint256,uint256,uint256)", +"7d49300d": "initGame(address,uint256,uint256,uint256)", +"7d49e51d": "getSpaceshipUpgradePriceByModel(uint16,uint8)", +"7d4a899e": "SafeSender()", +"7d4af159": "marketMakerFee()", +"7d4c1403": "get(address,address,string)", +"7d4c258a": "Set(bytes32)", +"7d4c4a04": "saleStartSecondDayEnd()", +"7d4c7806": "disputeCrowdsourcerCreated(address,address,address,uint256[],uint256,bool)", +"7d4cb964": "MAX_ENTRIES()", +"7d4ce874": "maxInvEth()", +"7d4cf602": "buildDSBalanceDB()", +"7d4d3128": "startTransferToken()", +"7d4d42c5": "_addGraffiti(uint256,string,string)", +"7d4da754": "CoiinToken(address)", +"7d4deda1": "setAirLimitCount(uint32)", +"7d4e1353": "erc20TRFT(uint8)", +"7d4e1eb0": "stop_game()", +"7d4f0406": "PPY(uint256,string,string)", +"7d4f128b": "createLockTokenHistory(address,uint256,uint256)", +"7d4f1883": "closeMonthlyInvest()", +"7d50bef3": "account(address,address,uint256)", +"7d5224d3": "registerNewUser(address)", +"7d53223a": "setVestingReleasedAmount(address,address,uint256)", +"7d53409a": "setMaxbonds(uint256)", +"7d534aa0": "disableCharity()", +"7d549e99": "totalTokensMinted()", +"7d54a3ba": "CROWD_WAVE1_PERIOD()", +"7d55094d": "toggleMinting()", +"7d55758f": "underMint(address,uint256)", +"7d55923d": "click()", +"7d55f64d": "fixedFeeInWei()", +"7d564056": "getUserProperty()", +"7d564f11": "setsystemprice(uint256)", +"7d574678": "setICOIsFinished()", +"7d57a85c": "preIcoFinish()", +"7d57edf3": "HOPE(uint256,string,string)", +"7d580939": "_HOLDersPayRoll()", +"7d58eb76": "hasResolver(string,address)", +"7d59a938": "month6companyUnlock()", +"7d5a9b41": "init(uint256,uint256,address,uint256,uint256,uint256,address,uint256)", +"7d5bc9fe": "Account_balances(address)", +"7d5c1914": "getWalletInfo(address)", +"7d5db5e0": "Dagelas()", +"7d5dc538": "getToJackpot(uint256,uint256)", +"7d5dec2a": "multiplex_remove(address)", +"7d5f66f2": "mintBounties()", +"7d5fbcab": "setMystr(string)", +"7d5fec5a": "setOwner(uint8,uint8,address)", +"7d606100": "BetOverlap()", +"7d60b6ce": "setCommissionWallet(address)", +"7d60e291": "FIFTY_THOUSANDS_LIMIT()", +"7d60e343": "getFileListSize()", +"7d619d9b": "holdCoin(address,address)", +"7d61b9fe": "intervalsCount(bytes32)", +"7d61de37": "foundersRewardTime()", +"7d620130": "getCardCount()", +"7d635502": "buyEgg()", +"7d636d9b": "refferal(address)", +"7d63a93a": "REKT(uint256,address)", +"7d64bcb4": "finishMinting()", +"7d652335": "changeAssetsState(bool)", +"7d656a72": "NewPost(bytes32,uint256)", +"7d65b2f7": "hasCompleted()", +"7d65e3fe": "totalInterestCycles()", +"7d661e3c": "giveToken(address,uint256,string)", +"7d6651b9": "claimEthIfFailed()", +"7d683b95": "unsoldUnlockedAt()", +"7d684a9d": "RENEEKROM(address,address,address,uint256,uint256,uint256)", +"7d68582a": "manuallyExchangeContractPreDGZtoDGZ(address,uint256)", +"7d68bee7": "LogPollDeleted(bytes32)", +"7d692faf": "readMailByAdmin(uint256,bytes16)", +"7d6979e7": "canBeChanged(uint256)", +"7d69880b": "addBalance(uint256,uint256,uint256)", +"7d69f335": "changeColorRed()", +"7d6a59ed": "getInvoiceCount()", +"7d6a5f7b": "requireNotPaused()", +"7d6ad4cd": "triggerAutorelease()", +"7d6b4278": "outcomeState(address,uint256,uint256)", +"7d6bc260": "maxTiers()", +"7d6c1ff1": "addMake(address,uint256,uint256)", +"7d6c8388": "INVECH(uint256,string,string)", +"7d6c864e": "withDrawable()", +"7d6cf2df": "get_deploy_fee()", +"7d6d28ef": "setComisionInTokens()", +"7d6dc737": "getBylawsMinTimeInTheFutureForMeetingCreation()", +"7d6e061c": "getFinishDates()", +"7d6e3751": "_addVouchers(address,uint256)", +"7d6ebe94": "setDoubleClaimSegmentSlashAmount(uint256)", +"7d6f0d5f": "changeFundsWallet(address)", +"7d6f174e": "invalidateSignature(uint8,bytes32,bytes32)", +"7d6f3781": "userChallenge()", +"7d6fb089": "setBGXTokenInterface(address)", +"7d7106ad": "_updateStats(uint256,uint256)", +"7d71a19b": "setAccountInfo(address,address)", +"7d720296": "airSender()", +"7d722a30": "Funding_Setting_cashback_before_start_wait_duration()", +"7d72aa65": "addRole(address,string)", +"7d736d0d": "weekPotExpiration()", +"7d74039d": "getAmountOfShareholders()", +"7d7452aa": "DSVCoin()", +"7d7714fb": "coinAllowance(address,address)", +"7d7786a3": "GetGuestName()", +"7d77c8f9": "allowTransferBetweenUsers()", +"7d780e2a": "blocked_amounts(address)", +"7d78b94d": "claimNihilum()", +"7d78ef4a": "BKKToken()", +"7d790630": "setContractFrozen(bool)", +"7d79265b": "REDEEM_METHOD()", +"7d79c192": "awayTeam()", +"7d7a1a80": "UCToken(uint256,string,string)", +"7d7a31b6": "max(uint64,uint64)", +"7d7a3a1a": "bittravelxToken()", +"7d7a9ca4": "MachineToken()", +"7d7b0099": "API()", +"7d7b2051": "finalizeExits(address)", +"7d7be90f": "Splitter(address[])", +"7d7c2a1c": "rebalance()", +"7d7c7258": "adminSendMoneyToUser(address,uint256)", +"7d7ca00c": "JSONpath_int(int256,string,string,uint256)", +"7d7d4a68": "start_service(address)", +"7d7e5e3d": "setFlagPair(uint256,bool,bool)", +"7d7eee42": "setPreSalePrice(uint256)", +"7d7f0050": "TradeEnabled(bool)", +"7d7f1699": "freeBet(address)", +"7d7fa215": "getSaleData()", +"7d7fef7e": "receivedEtherFrom(address)", +"7d802655": "delLimitedWalletAddress(address)", +"7d80def3": "setENDPhase()", +"7d81d62f": "doGroupRefundPayoutsSuccess(address[])", +"7d820414": "GeXCHANGE()", +"7d82bf73": "getBonusTokens(uint8)", +"7d836281": "getBetState(address)", +"7d83e527": "PensionCoin()", +"7d851a13": "signerIsWhitelisted(bytes32,bytes)", +"7d851c70": "getTokensBack()", +"7d85445d": "EducationToken()", +"7d85facd": "transferred()", +"7d862a7e": "changeDutchIdxAddr(address)", +"7d87bb7b": "HATCHING_COST()", +"7d87e97d": "makeMemberOfGroup(address,uint256)", +"7d882097": "totalDeposits()", +"7d882e9b": "resetWinner()", +"7d886976": "testMintGuyAuth(int256)", +"7d8966e4": "toggleSale()", +"7d8978db": "addCasino(uint16,uint256,string,string)", +"7d897ccd": "KPCSAdministrator()", +"7d89ae63": "__findRef(string)", +"7d89f040": "AddAmount(uint256)", +"7d8be627": "activateLineItem()", +"7d8c0c7c": "adminSetRegisterCost(uint256)", +"7d8ccd59": "debug_uint(uint256)", +"7d8cfd1a": "flag_hash()", +"7d8d4878": "updateETHEUR(uint256)", +"7d8f442e": "getPrice(uint40)", +"7d8f94a0": "slackUsersCap()", +"7d8fcfb4": "transferSuperAdminOwnership(address)", +"7d8fe090": "REFERRAL_BONUS_LEVEL5()", +"7d902311": "gameGiftLineTime()", +"7d917fcb": "Registered(bytes32,address)", +"7d919a43": "tohash(bytes32,address,address,uint256,uint8,bytes32,bytes32)", +"7d91da87": "buyPixelTokenFor(uint24,uint256,uint24,address)", +"7d9201cc": "rspToken()", +"7d921af0": "disableTimelock()", +"7d92561d": "NewBuyer(address,uint256,uint256)", +"7d92654c": "endRoundAndStartNextRound()", +"7d92bb6e": "getClaimKeys()", +"7d92f6be": "goldRegistry()", +"7d9375b8": "authorizeContract(address,string)", +"7d9383c3": "valid_creature(address)", +"7d93ccdf": "Halo3DDoublr(uint256,address)", +"7d940912": "addArea(uint256,uint8,uint8[],uint256,string,uint256,bool,uint32)", +"7d94792a": "seed()", +"7d94d4aa": "SergeToken()", +"7d95dcd7": "createPromoArtwork(string,string,uint32,address)", +"7d961218": "REGTMProc()", +"7d962e44": "addHash(bytes16)", +"7d96f693": "getDepositAmount()", +"7d97597d": "DEFAULT_AUCTION_LENGTH()", +"7d97b1f6": "VestingScheme()", +"7d98ebac": "exchange(address,address,address,address,uint256,bytes)", +"7d99ae17": "issue(address,bytes32,bytes32)", +"7d9a4e2c": "safeToMultiply(uint256,uint256)", +"7d9a9046": "resolveDisputeBuyer(string)", +"7d9a9096": "icoFinishedAt()", +"7d9c68f7": "getUserBattleValue(address)", +"7d9d4bed": "secondStageEnd()", +"7d9d972d": "guardian3Vote()", +"7d9e5243": "BonusAmountUpdated(uint256)", +"7d9f298e": "setLockedState(bool)", +"7d9f6db5": "auction()", +"7d9f8cf2": "startFirstStage()", +"7d9fb742": "fourthRoundPercent()", +"7d9fc342": "PreICODays()", +"7da028d6": "SaleCompleted(address,uint256,uint256)", +"7da0389d": "referralProgram(address[],uint256[],uint256)", +"7da0399a": "CloseAuction(bytes32)", +"7da0e079": "_closeMotion(uint256)", +"7da16762": "executeParentDaoSplit()", +"7da208aa": "deleteArrayAddress(bytes32,uint256)", +"7da21a1a": "WaltonToken()", +"7da25928": "announcedTimeStamp()", +"7da3400b": "_contractExists(bytes32)", +"7da39157": "poWtfContract()", +"7da3c3ab": "revert()", +"7da3e219": "testInitialTokenBalance()", +"7da3f613": "lockAddress()", +"7da40b65": "isPlatformOrSupportManager(address)", +"7da4d24b": "activationOpen()", +"7da5efc8": "drop(address,address[],uint256[])", +"7da63c59": "changeValuePerToken(uint256)", +"7da7a437": "Clinicoin()", +"7da7d5ab": "nextGameRakePercent()", +"7da81364": "getProposalAction(uint256)", +"7daa10ce": "getMyInfo()", +"7daa9fcd": "buyGems()", +"7dab61b6": "setBlack(bool)", +"7dab84d8": "ShowTestU(string,uint256)", +"7dabb4d6": "addKycVerifiedInvestor(address)", +"7dac0547": "VIRGOToken()", +"7dac9048": "addArgumentToRequestUint(uint256,bytes32,uint256)", +"7dae6e95": "noOfTokenAlocatedPerICOPhase()", +"7daeef25": "objectTome()", +"7daf06fd": "withdrawPart(uint256)", +"7db0799f": "EnduranceToken()", +"7db12abc": "contractorWithdraw()", +"7db1c36f": "setFeedBackFee(string,uint256)", +"7db2cff8": "old_address()", +"7db33f99": "setLeaseCard(uint8,uint256,uint256)", +"7db4149d": "RegisterTokenTransaction(address,uint256,address)", +"7db42b6c": "AutoBusinessFinance()", +"7db45975": "register(uint256,uint256,bytes32,string,bytes32)", +"7db48416": "_getMinions(uint256)", +"7db6a91d": "checkDeck(uint8[],bytes32,bytes32)", +"7db6cbfc": "_addDefaultOperator(address)", +"7db724b6": "MAIN_QUESTION()", +"7db7c239": "tranchesPayedOut()", +"7db8782a": "uint256At(uint256,bytes,uint256)", +"7db91595": "setOwnedBonus()", +"7db9743b": "Registry()", +"7dbb82a8": "setLicenseTermsRegistry(address)", +"7dbbc0cd": "EliteShipperToken()", +"7dbbf2e6": "RecallTokensFromContract()", +"7dbc1d6f": "modifyPrivateList(address[],bool)", +"7dbc827b": "vestingWithdraw(address,uint256,uint256)", +"7dbc9fba": "amendClaim(uint8,uint8,uint8,uint8)", +"7dbd0139": "softCapOk()", +"7dbd33c1": "_percDown(uint256)", +"7dbdab18": "CreatedAngel(uint64)", +"7dbdc2eb": "getQueryPrice()", +"7dbdf168": "EtherBetIO(address,address)", +"7dbecc54": "EDColiseum()", +"7dbece3c": "usdCurrencyFunding()", +"7dbedad5": "createReward(uint256,uint256)", +"7dbf1fe6": "Towers(uint256)", +"7dbf67a7": "setDebt(uint256)", +"7dbff420": "donationUnlockTs()", +"7dc0015d": "centToken()", +"7dc09e4a": "getRequestedProducts()", +"7dc0d1d0": "oracle()", +"7dc0d451": "CHINESE_EXCHANGE_2()", +"7dc10df5": "Jackpot(address,uint256,uint256,uint256)", +"7dc2268c": "minting()", +"7dc28eb2": "LOCKAMOUNT4()", +"7dc379fa": "getTicket(uint256)", +"7dc45e27": "setCryptoMatchValue(uint256,string)", +"7dc4da2e": "initiate(uint256,bytes32,address,uint256)", +"7dc4feb7": "setConstraint(bytes32,address,address,uint256)", +"7dc5cc64": "getTotalDivis(uint256)", +"7dc5cd32": "_patternToNumber(bytes)", +"7dc673bc": "closeRegistration()", +"7dc6c3d9": "deactivateAdSlot()", +"7dc7363b": "LogNewTemplateProposal(address,address,address,uint256)", +"7dc74473": "tokenPrivateMax()", +"7dc79375": "delOracle(address)", +"7dc7c5a5": "debug1()", +"7dc7f7c4": "Pitcheum()", +"7dc8c73e": "canTokenUnlocked(uint256)", +"7dc8e069": "shorten_end_block(uint256)", +"7dc8f086": "getOutcomeCount()", +"7dcab440": "SubinGuhan()", +"7dcaf720": "getReadme()", +"7dcb422e": "setPresaleStartDate(uint32)", +"7dcb6b92": "testegy()", +"7dcbd078": "thirdPay()", +"7dcc3f0c": "LukapToken()", +"7dccd4d6": "setIndividualCertificate(string,bytes32,bytes32,bytes32)", +"7dcd17d9": "sumHardCapICO1()", +"7dcd277b": "SimpleTingToken()", +"7dcda7df": "initiateProviderCurve(bytes32,int256,int256[],address)", +"7dcdace2": "Deposit(address,uint256,uint256,bool,string)", +"7dcdec34": "sendTokenFundsToManager(uint256)", +"7dce4595": "sendToken(address,uint256,string)", +"7dce6bdb": "freeCrawDeadline()", +"7dce8461": "GSENetwork()", +"7dce8dd4": "GenesisSalesCount()", +"7dcfb801": "veryAngry()", +"7dcfd3d5": "blockTransfers()", +"7dd003f1": "test_chain2_4()", +"7dd02c8e": "transferETHFromContract(address,uint256)", +"7dd07097": "tgeSettingsPartProject()", +"7dd0d61c": "check_hash(address,bytes32,bytes32)", +"7dd10e4f": "newUsers()", +"7dd15d40": "getData_13()", +"7dd1f126": "optionTaker(bytes32)", +"7dd256ff": "PATToken(address)", +"7dd26660": "getMegaboxIndex()", +"7dd2899f": "changeDividentContract(address)", +"7dd2e993": "removeTenant(uint256)", +"7dd3cf54": "ChangeCostByManager(uint256)", +"7dd45999": "lockDomainOwnershipTransfers()", +"7dd563c3": "setMainSaleParams(uint256,uint256,uint256,uint256)", +"7dd56411": "ownerOf(bytes32)", +"7dd91734": "compositeReputation(string)", +"7dd9d27f": "exiteEntidad(address)", +"7dd9f846": "buyCard(address,uint256)", +"7dd9fcf7": "latestprice()", +"7dda48a5": "WhatTimeIsNow()", +"7ddaa56a": "tokenContributionMin()", +"7ddb3c00": "total_pay_claimed()", +"7ddb5e65": "votingReward()", +"7ddbf0ed": "setLockedTokenAddress(address)", +"7ddbf1a7": "passFundsToTheTeam()", +"7ddc02d4": "isOwner(address,address)", +"7ddcbfd9": "TegTokensSale(uint256,string,string)", +"7ddd0ce1": "getBetDivisor(uint256)", +"7ddd130f": "PRBCoin()", +"7ddd20ba": "getRequiredStateNumbers(uint256)", +"7dddb66f": "collectOwnRew()", +"7dde0138": "modifySupplyLimit(uint256)", +"7ddfffbf": "mint(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7de06cfc": "startTge()", +"7de09476": "getSpecificBuyerTransaction(address,address,uint256)", +"7de0cc65": "preMcFlyWallet()", +"7de11a8f": "getBlockVerifierAddressesCount(uint256)", +"7de14129": "approveInvestor(address)", +"7de1a631": "confirmETH(bytes32)", +"7de295d2": "withdrawalsCTR()", +"7de2d523": "setbonus(uint256,uint256)", +"7de2e95c": "TransferCow(address,uint256)", +"7de2fe4d": "linkToMasterWalletInternal(address,address)", +"7de32b17": "CuratedTransfers(address,address[],address[])", +"7de36138": "setPreICO(address)", +"7de47b3f": "fundingGoalUSD()", +"7de4800f": "withdrawEscrow(bytes32)", +"7de480c6": "aiurExchangeOracle()", +"7de4ceb2": "DebugValue(string,uint256)", +"7de50c44": "TIME_LOCK_END()", +"7de548d8": "releaseStake(uint256,address,address)", +"7de576cd": "vote(uint16,uint256)", +"7de5ad89": "setJntController(address)", +"7de6c905": "LetItPlayToken(address,address,address,address,address,address,address,address)", +"7de77700": "bytes32ToBytes(bytes32,bytes32[],bytes32)", +"7de7a18d": "setShare(address)", +"7de7ea78": "TokenHNC(uint256,string,string)", +"7de7edef": "changeMasterCopy(address)", +"7de8bb63": "Commons()", +"7de976dc": "amountFundHolder()", +"7de9f212": "colorfilter(uint256)", +"7dea9118": "setIdentityName(bytes32)", +"7deb6025": "buy(uint256,address)", +"7debb959": "calculateAllocation(address)", +"7dec2299": "getStagesInfo()", +"7dec3d35": "FOUNDERS_WALLET()", +"7dec4ce8": "SettleBond(uint256)", +"7ded0c15": "getStakeTokenBalanceFor(uint256,uint256)", +"7ded2210": "setPreIcoCap(uint256)", +"7dee2cad": "CancelMyInvestment()", +"7def2fdf": "changeStakeRate(address,bytes32,uint256)", +"7def7351": "teamTokensFirstShare()", +"7df02c0e": "getLinglongCat(uint256)", +"7df042a2": "totalRegularTokensSold()", +"7df19a78": "BetPlaced(address,uint256,uint8)", +"7df1f1b9": "borrower()", +"7df23b6a": "ReleaseOracle(address[])", +"7df2e3e3": "getRcdExchange(uint256)", +"7df38c5b": "wad()", +"7df3a229": "PissToken()", +"7df432c9": "minSelfBuyPrice()", +"7df4732e": "seeZombieStar(uint256)", +"7df47407": "SigProof()", +"7df4c235": "kolidat()", +"7df52ba8": "Arbitrate(uint32,uint32,bool)", +"7df545c7": "MaximumSellableTokensChanged(uint256)", +"7df54c73": "setMiniPoolEdit_4(string)", +"7df5f4ae": "_upper(bytes1)", +"7df65a1d": "getMinersByAddress(address,address)", +"7df68a8b": "addPeriod(uint256)", +"7df73e27": "isSigner(address)", +"7df7ec18": "test_invalidEmptyEqVal()", +"7df82cc9": "veztUsers(uint256)", +"7df83cd0": "getDepositWithdrawList(address,uint256[])", +"7df841cd": "setPlayerVirusDef(address,uint256)", +"7df855f2": "getAuditAddress(address,address)", +"7df8833a": "createEvent(string,uint256,uint32)", +"7df9bb31": "heredar()", +"7dfa0b3f": "canSell(address,uint8,uint8)", +"7dfa7d79": "claimUnsoldTokens()", +"7dfac5a2": "accMinterOne()", +"7dfb0ba5": "getRecordOffers(address)", +"7dfb6626": "withdrawRewards(bytes32)", +"7dfbc19c": "HaltTime()", +"7dfbdf6d": "returnFundsFor(address)", +"7dfc64ca": "getTotalBudget()", +"7dfce5e9": "withdrawExcessReserves()", +"7dfce6d7": "MAX_INTEREST_AMOUNT()", +"7dfda44c": "AssignAddress(uint256)", +"7dfe1674": "CTB(uint256,string,string)", +"7dfe4302": "privateSaleTokens(uint256,uint256)", +"7dfe58d0": "clearEscapeRequests(uint256[],uint256[])", +"7dfe7741": "InviteAccepted(address,address)", +"7dfebff3": "addEth(uint256,uint256)", +"7e007c1e": "minimumWEI()", +"7e00d6d6": "enablePurchase()", +"7e00d77a": "mintExtendedTokens()", +"7e01c088": "removeWhitelistedAddr(address)", +"7e029bde": "setEthUsd(uint256)", +"7e02bb0f": "finish(address,address,address)", +"7e03ad1a": "numImports()", +"7e057b8e": "IYMAYA()", +"7e06ec93": "MDOSToken(address,address)", +"7e070df6": "rootOwnerOf_(uint256)", +"7e07877a": "hasFailed(address,uint256)", +"7e080911": "TRUEToken(address)", +"7e08a846": "tokenCollectedOf(uint256,address)", +"7e09d09b": "theFloatMultiplier(uint256)", +"7e09f0aa": "predictMarket()", +"7e0a16b1": "forwardAllRaisedFunds()", +"7e0be7e3": "upgradeGooCost(uint256)", +"7e0c1792": "oracle_address()", +"7e0c240d": "LianJieToken()", +"7e0cfc3d": "truncate(uint8[],uint8)", +"7e0d149e": "getGameAddresses(uint256)", +"7e0d8b27": "leekStealToday_()", +"7e0e20ba": "HighGasAmount()", +"7e0e471d": "Licensium(uint256,string,uint8,string)", +"7e0f7a87": "getUnixTimeStamp()", +"7e1028b2": "_doTradeWithEth(address,uint256,address,uint256)", +"7e1055b6": "icoEndTime()", +"7e111f59": "sell_toContract(uint256)", +"7e11f453": "ETH_Rate()", +"7e12180e": "setSaleDuration(uint256)", +"7e133564": "donateDna(address,uint256,uint8)", +"7e13b0be": "changeTokenDecimals(uint256)", +"7e150d66": "maxTxSize()", +"7e1629ab": "token_transfer(address,address,uint256,bytes,string)", +"7e167198": "_preValidatePurchase(address,uint8,uint256)", +"7e168086": "preallocate(address,address,address,address)", +"7e169860": "createNewEvent(bytes32,string,string,uint256,uint256,string,string)", +"7e16cfde": "getGameBlockNumber(uint256)", +"7e16eca0": "getContractTimestamps(bytes32)", +"7e1721ee": "LMAOtoken()", +"7e179816": "setRefShare(uint256)", +"7e18dd21": "motodoughToken()", +"7e1934f9": "swpFund()", +"7e199b70": "startCrowd(uint256,uint256,uint256)", +"7e1a6753": "Destruct()", +"7e1ab812": "utrToken()", +"7e1b52f6": "doftManager()", +"7e1c06b6": "newOwner(uint256)", +"7e1c0c09": "totalTokens()", +"7e1c4205": "query2(uint256,string,string,string,uint256)", +"7e1cae40": "changeRefundToken()", +"7e1cb559": "members(bytes32,address)", +"7e1cd42f": "convertIcoBalance100to70()", +"7e1cd79c": "Voting(bytes32[])", +"7e1db495": "addPendingWithdrawl(uint256,address,bool,bool)", +"7e1db516": "init3_block_height()", +"7e1e06ea": "EventTransferWasReset()", +"7e1e1ff6": "Giorgi()", +"7e1e447e": "total_wins_count()", +"7e1f2bb8": "createTokens(uint256)", +"7e1f89c8": "PRE_SALE_START()", +"7e20e7c0": "getRegistryDataMinter()", +"7e2224bd": "compress(bytes)", +"7e23f7cd": "teamKeepingLockEndBlock()", +"7e241c64": "getServiceNameByAddress(bytes32,address,address)", +"7e241dbf": "unlockMiner()", +"7e245fac": "PHXTKN()", +"7e24cb8f": "reservedFundLeft()", +"7e25ac5b": "destroyRewards()", +"7e25b7d6": "implements(address,bytes4)", +"7e266385": "setPrefix(uint8)", +"7e26639f": "saleLimit()", +"7e27133f": "tradingMonDataContract()", +"7e274f7e": "Reederem(string)", +"7e288822": "pendingWithdrawal()", +"7e298249": "setPriceInWei(uint256,uint256)", +"7e29d2a3": "TokenCoin4()", +"7e29dad0": "testBuyExceedHardLimit()", +"7e29f242": "changeDiscount(uint256,uint256,uint256,uint256)", +"7e2a0141": "removeToken(address[16],address,uint256)", +"7e2a6db8": "trusted()", +"7e2ac454": "disagree(bytes32,bytes32,bytes32[])", +"7e2bc821": "SaturnPresale(address,address,uint256,uint256,uint256)", +"7e2bef39": "calldata(uint256)", +"7e2bf3c6": "freezeCreditScore(address,uint256,string)", +"7e2c0459": "_transfer(bytes32,bytes32,uint256)", +"7e2c83fc": "seriesByAddress()", +"7e2ce380": "_calculateOwnerCut(uint256)", +"7e2e3958": "setBUS(bytes32,uint256,string)", +"7e2e756e": "testToUint32()", +"7e2f014f": "addResolversDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", +"7e2f0843": "updateMaxTokensCollected(uint256,uint256)", +"7e2f6e3b": "getReserveSupply()", +"7e2fc2b6": "_Crowdsale(address,uint256,uint256,address)", +"7e2fdb0c": "dataForBuy(address)", +"7e2ff5f9": "setPreSale()", +"7e300fc6": "crowsaleShare()", +"7e319e4a": "getNextAssignedPolice(uint256,address)", +"7e31c53a": "HodlWithdrawn(uint256,address,uint256)", +"7e32456d": "STRC_SUPPLY()", +"7e327168": "allocatePresaleTokens(address,string,uint256,string)", +"7e32a592": "repairTheCastle()", +"7e32baea": "TRIPToken()", +"7e32fc47": "registerAsset(string,bytes32)", +"7e331a99": "setUserMessage(string)", +"7e33e361": "setRowQuiter(bool)", +"7e340b01": "getLatestPayday(address,address)", +"7e342507": "gameIndexToBuy()", +"7e3475a8": "lockQtyToAllowTrading()", +"7e347b82": "REALCrowdsaleMock()", +"7e34dbe0": "deposit(uint256,uint256,uint8,bytes32,bytes32)", +"7e363ffa": "setupCost()", +"7e36edce": "RATE_DAY_28()", +"7e373bc0": "bulletAmount()", +"7e380099": "addOrgCertificate(string)", +"7e38b424": "reverseFiatPurchase(uint256)", +"7e38d065": "ADVISORS_AND_CONTRIBUTORS_TOKENS()", +"7e39082f": "escrowedMYB(address)", +"7e3bfa1d": "removeRecoveryAddress(address)", +"7e3d15ae": "nextHolder(address)", +"7e3d45ef": "gameMiningToken(uint16)", +"7e3d8813": "setup(address,uint256,uint256,uint8)", +"7e3da027": "approveAndCustomCall(address,uint256,bytes,bytes4)", +"7e3dbf96": "addr(bytes,bytes)", +"7e3df726": "EZEtherMarketplace()", +"7e3e40ec": "getRequiresKing(bytes)", +"7e3e7bdf": "checkReward(address,uint256,uint256)", +"7e3ef7cd": "getMyBalance(address)", +"7e3ef935": "setReleaseMake(uint256,bool)", +"7e3f2b2d": "getDocumentSignsCount(uint256)", +"7e3f5b70": "JFBToken()", +"7e3faec1": "GoldTxFeePool(address,address,bytes)", +"7e402eb0": "setSecondAdmin(address)", +"7e410427": "aDay()", +"7e4115ba": "toAddress(string)", +"7e4241b4": "ownerTake(uint256,address)", +"7e429f02": "burnMultDen()", +"7e42be1a": "quarantineAddress(address)", +"7e42f8b4": "setRefund(bool)", +"7e42f94d": "horsePr(uint256)", +"7e43185a": "showCollectorsAddresses()", +"7e4358c3": "used_in_contract_fees()", +"7e43828e": "bountyTokenWithdrawal()", +"7e441048": "hasCategory(address,uint256,uint256)", +"7e445d44": "setEndICO(uint256)", +"7e456808": "reclaimUnusedEtherBalance()", +"7e457b85": "startEarlyStage3()", +"7e458492": "addInspector(address)", +"7e45d15c": "___coinAddress()", +"7e466bb4": "forTeamCOT()", +"7e470882": "setStrF1(string)", +"7e482379": "totalEthInWeiForSecondIco()", +"7e4929c4": "priceBox2()", +"7e4930ae": "modifyCap(uint256)", +"7e495dae": "changeMinters(address,address,address)", +"7e4985c5": "LookUpAvailableDivLarge(address)", +"7e49aa05": "testSelfdestructIsRevertedWithMinReturn()", +"7e49d530": "fechVoteMainInfoBySnapshotBlock(uint256)", +"7e4a1731": "returnWallet()", +"7e4a82b1": "foreignBuyTest(uint256,uint256)", +"7e4b5eb5": "getPhControlLimits(bytes32)", +"7e4c3b2e": "requestRate(string,string,bool,uint256,uint256)", +"7e4d25c5": "Refundably_if_gasprice_more50gwei_Send_Votes_From_Your_Balance(address,uint256)", +"7e4d4495": "getEthCapPerAddress()", +"7e4d4653": "echoTest(uint256)", +"7e4d5ea1": "STARTDATE()", +"7e4e46e7": "withdraw_profit(address,address)", +"7e4e95d7": "airDropPercent_()", +"7e4eb35b": "left43(uint256)", +"7e4f1a9f": "AKMJCHAIN()", +"7e4f6b95": "MyAdvancedToken(uint256,string,string)", +"7e4f9397": "gSetAlive(bool)", +"7e4fdd0b": "SetherStarted()", +"7e545305": "firstBalance(address)", +"7e5465ba": "approve(address,address)", +"7e549814": "setEscrowedProjectPayees(uint256,address)", +"7e54b8e2": "AddCandidate(string)", +"7e551b75": "hashOf(uint256)", +"7e55a212": "JustTheTipCrowdsale(uint256,uint256,uint256,address)", +"7e55a311": "getPurchaseSeconds()", +"7e55b83c": "readValidDate(uint8)", +"7e55ec25": "CryptoPokemon()", +"7e569e66": "TDEContributorCount()", +"7e56d25f": "ReplyShare(uint256,string,bool,string)", +"7e56fde5": "calculateEggBuySimple(uint256)", +"7e5713d9": "setGenesisAddressArray(address[])", +"7e574098": "confirmEthTransactionRequest()", +"7e575524": "poolMintAmount()", +"7e577274": "onAuctionEnd(bytes32)", +"7e580d30": "ZCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"7e58f815": "pauseRoundA()", +"7e59092e": "getVersionById(uint256)", +"7e5912d7": "reputationHashSubmissions(address)", +"7e59d513": "deathData_f1()", +"7e5a4dde": "getMarriage(uint256)", +"7e5a66df": "uniqueSpinnerOwners(uint256)", +"7e5a9ed9": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[])", +"7e5af26c": "BugisContract()", +"7e5b1cdd": "GOToken()", +"7e5c344a": "Upgrade(address,address,uint256)", +"7e5c86a2": "moveFundToOwner(uint256)", +"7e5cd5c1": "disableMinting()", +"7e5e190c": "getBaseTypeStats(uint256)", +"7e5fc6f4": "calculateIcoBonus(uint256,uint256,uint256)", +"7e600c87": "doSend(address,address,address,uint256,bytes,bytes,bool)", +"7e602078": "assertInvalidState(address)", +"7e60a4bf": "removeLockFunds(address[])", +"7e61c768": "isClient(address,address)", +"7e61e6ef": "GasWar()", +"7e621667": "sendFromOwn(address,uint256)", +"7e626e58": "getUnPurchasedProducts()", +"7e62eab8": "withdraw(int256)", +"7e638974": "CalculateFinalDistance(bytes32,bytes32,bytes32,bytes32)", +"7e63dd86": "seed_additional_token(uint256)", +"7e64721f": "viewNumberOfMessages()", +"7e6503bb": "getActiveOrderCounts()", +"7e655ddd": "tokensSoldInThisRound()", +"7e6667c9": "Invoked(address,bool,uint256)", +"7e6688a2": "lastJackpotPayout()", +"7e668cd2": "fSqr(uint256)", +"7e66f15f": "nowSupply()", +"7e67429f": "switchToCrowdsale(string)", +"7e687a8b": "getTotalInvoicesCount(address,uint256[])", +"7e69671a": "distributeFees(uint256,uint256)", +"7e69ba22": "ethForTokens(uint256)", +"7e69e0fc": "ETH420on420()", +"7e6a0720": "removeClaim(uint32,int256,string,string)", +"7e6b867f": "insertProductIntoCart(uint256)", +"7e6bdb95": "getTransactionHashes(uint256,uint256,bool,bool)", +"7e6beae1": "team2018TokenCreated()", +"7e6c945c": "FileHashInt()", +"7e6d0fa0": "isWithdrawAllowed()", +"7e6d6928": "SmartBusinessToken()", +"7e6d86ff": "BOUNTIES_SHARE()", +"7e6dce9c": "throwIn()", +"7e6e65f3": "acceptSellOffer(uint32)", +"7e6eee20": "olympusTest()", +"7e6f6947": "setTokenBurnFeeAbs(address,address,uint256)", +"7e71496b": "TRCToken(uint256,string,string)", +"7e71572b": "_checkCap(uint256,uint256)", +"7e71ccd8": "HShoe_Limit()", +"7e71fb09": "transferOwnershipImmediately(address)", +"7e72fb52": "buyToken(address)", +"7e7307c5": "Contribute(bool,uint8)", +"7e737551": "setMaxWhitelistLength(uint256)", +"7e7388b1": "NewRiskAdr(address)", +"7e742432": "addNewDegree(string,bytes32)", +"7e74325f": "turn(address)", +"7e74a1ed": "depositRate()", +"7e754146": "getCurrentImpeachmentUrlDetails()", +"7e761240": "setMyName(bytes32,bytes32)", +"7e766e1f": "IonixxToken(uint256,string,string)", +"7e76b836": "minter1()", +"7e7712f2": "standardReleaseAmount()", +"7e773d9d": "testTimestamp()", +"7e77509e": "isRoundingErrorFloor(uint256,uint256,uint256)", +"7e779985": "isTransactionSuccessful(uint32)", +"7e77c503": "initialize(string,string,uint256,address,address)", +"7e780157": "PERCENT_100()", +"7e7894e4": "PendingETHs()", +"7e79a562": "TripPay(uint256,string,string)", +"7e79e8ba": "getEmail()", +"7e7a2fbf": "contribute_toTheGame()", +"7e7af34f": "setPostICOSale(bool)", +"7e7be158": "validatePurchaseAndDistributeFunds(uint24[],uint24[],uint256[])", +"7e7c16de": "secsPerBlock()", +"7e7c4243": "getTheBet(address)", +"7e7c8c6e": "catToken()", +"7e7d5689": "requireTrade(address)", +"7e7d76ad": "SPORT(uint256,string,uint8,string)", +"7e7db227": "lastAccountNum()", +"7e7dd581": "oldDBAddress()", +"7e7e4b47": "getOutcome()", +"7e7e5a75": "changeIdentityNarcoRespect()", +"7e7f1bfd": "total_refunded()", +"7e7f8e1e": "AddItem(uint256)", +"7e809973": "hash(address)", +"7e815fb4": "ScooterCoin()", +"7e81701a": "sitExchanger()", +"7e81b6aa": "KingdomFactory()", +"7e823bd1": "OMGToken()", +"7e82d0e6": "dbkWithdraw()", +"7e83027f": "setRegionForSaleToAddress(uint256,uint256,uint256,address)", +"7e8306ae": "profitrate()", +"7e83185b": "updateImageAddress(string)", +"7e835e86": "minechaincointest(uint256,string,uint8,string)", +"7e837ccc": "dispute_confirmed()", +"7e84adda": "setGameState(bytes32,int8[128],address)", +"7e85477f": "myInner1()", +"7e86e0f2": "BKFToken()", +"7e86f8e5": "blockedDeadLine(address)", +"7e873c2c": "uniq(uint256[])", +"7e87cf30": "tokenOpen()", +"7e888767": "getNumUsersToPayout(bytes32)", +"7e88f603": "returnDeposit()", +"7e893159": "changeIssuer(address)", +"7e8a9db9": "BasketEscrow(address,address,uint256)", +"7e8ab941": "_play(uint256,uint256)", +"7e8bca6f": "Tenteniy()", +"7e8bf1cd": "calculateCurrentMarketPixelPrice()", +"7e8c3ab6": "distributePartnerTokens()", +"7e8ca5f6": "unlockAdvisorTokens()", +"7e8d1a39": "finishIssuing()", +"7e8d2c19": "reserveForJackpot()", +"7e8e13e4": "Lesson_7(address,uint256)", +"7e8e353c": "setValidatorForND(uint256,uint256,uint256,uint256)", +"7e8e6d45": "setScaleContractAddress(address)", +"7e8ecf4f": "balanceOfInvestor(address)", +"7e8ff036": "submit(bytes32[])", +"7e904a48": "getNumContents(uint256)", +"7e904f7b": "stakePrimordialTokenFrom(address,uint256,uint256)", +"7e90819a": "unofficialApplicationSignUp(string)", +"7e9266bb": "ChallengeToken()", +"7e926b4b": "renounceOwnership(bool)", +"7e92a7e8": "getPublicBattlePokemon1()", +"7e93150b": "_transferHelper(uint256)", +"7e93163b": "tip(bytes32,bytes32)", +"7e932d32": "setFrozen(bool)", +"7e93810b": "playe1Bid()", +"7e93e4db": "KhabibvsMcGregor()", +"7e944756": "getPlayersCollection(address)", +"7e945935": "oneTokenInCents()", +"7e947347": "changeWeiCostOfToken(uint256)", +"7e94cf0c": "getValidityBondAttoeth()", +"7e951bc6": "update_coeff()", +"7e95385c": "setJackpot(address)", +"7e95cd27": "forbid(address)", +"7e95d2f6": "doSend(address,address,uint256,bytes,address,bytes,bool)", +"7e968195": "batchTransferETH(address[])", +"7e969692": "EthRateChange(uint256)", +"7e97ca29": "registeredInDay(address)", +"7e98bc8f": "Accumulate(address,uint256)", +"7e990ad8": "isRentals()", +"7e999cd9": "revokeMintDelegate(address,int256)", +"7e9a8685": "getWager(address)", +"7e9abb50": "getUnavailableTakerTokenAmount(bytes32)", +"7e9ad046": "upper(string)", +"7e9aef53": "elementsAreSet()", +"7e9b98ae": "transferFromWhiteList(address)", +"7e9ba301": "getResponseAddress()", +"7e9cd30c": "rescueLostHero(uint256,address)", +"7e9d2ac1": "burnAll(address)", +"7e9d7f68": "namiCrowdSaleAddr()", +"7e9de0bc": "buyTile(uint8,uint256,address)", +"7e9e1561": "getStakerFromDelegateKey(address)", +"7e9e1637": "getStockTotal(address)", +"7e9e1cb6": "Execution(bytes32)", +"7e9e3b3b": "RESERVED_TOKENS_BOUNTY()", +"7e9e3d51": "TokenERC20(string,string,uint8,address,uint256)", +"7e9e4b5d": "firstStageTokensSold()", +"7e9e511d": "issueAndActivateBounty(address,uint256,string,uint256,address,bool,address,uint256)", +"7e9e940a": "ClaimDisbursement(address,uint256)", +"7e9eaf41": "getMinBorrowedValue()", +"7ea01c0d": "currentLowest()", +"7ea074b3": "GetJackpots()", +"7ea11880": "VestedPayment(uint256,uint256,uint256,uint256,uint256,address)", +"7ea15da1": "priceUpdateAt()", +"7ea17a1d": "ORACLIZEQUERYMAXTIME()", +"7ea1a871": "announce(uint256,uint256,uint256)", +"7ea1b7ba": "_closeSale()", +"7ea1e2d9": "ethpause()", +"7ea23fa6": "unlockEthBalance(address,uint256)", +"7ea2bbac": "getOwnerGennezise(address)", +"7ea2be2b": "log32(uint32)", +"7ea2ddeb": "randomNumber(address,uint256,uint256)", +"7ea2e31c": "EligmaMintingContract()", +"7ea2fc89": "cancelBetByPlayer(uint256)", +"7ea30d5d": "BuyCreditsByEth(uint256)", +"7ea310d4": "getCurrentPrice(uint40)", +"7ea31352": "getReadableStats()", +"7ea31ded": "isBuyBackOne()", +"7ea46993": "revokeMultiplePermissions(address,bytes32[])", +"7ea531e7": "_generateNewHorseShoe(uint256,uint256,address)", +"7ea5d50e": "tokenWinRatio()", +"7ea5e7d3": "reserveDeployment(address,bytes32,address,uint256,uint8,bytes32,bytes32)", +"7ea60eb8": "roleEditorAddress()", +"7ea61ed7": "withdrawInternal(address)", +"7ea6c6ba": "MemoLandCoin()", +"7ea80eb2": "_receiveBuyLandForCandy(address,uint256)", +"7ea83869": "increasePreSaleSupply(uint256)", +"7ea84748": "addPlayerOrder(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"7ea868e1": "makeInvest(uint256,bytes5)", +"7ea8f250": "isRunningPreIco(uint256)", +"7ea94985": "calcHashes(uint32,uint32)", +"7ea95733": "emissionReleaseThreshold()", +"7ea9b2bc": "REQUEST_URL()", +"7eaa0c29": "LogTransactionFailed(bytes32,address)", +"7eaa4389": "finish(uint8,uint8,uint8)", +"7eab4e48": "openGiftFromSanta(address)", +"7eac7382": "getCAOAddres()", +"7eae1626": "getBack()", +"7eae6759": "_setBalance(address,uint256,uint256)", +"7eae75a8": "EtherMango()", +"7eaef50c": "over()", +"7eaf45f8": "SaveAccountBuyingGodz(address,uint256)", +"7eafcdb1": "updateGroupName(address,address,bytes32)", +"7eb13d8a": "_SetEducationQualificationOf(uint256)", +"7eb14990": "isBuyer(address,uint256)", +"7eb1bfb9": "feeWithdrawEthAll()", +"7eb2b856": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32)", +"7eb30cd0": "checkTreeStructure(address,address)", +"7eb312b1": "SUCCESS_BONUS()", +"7eb41ce5": "modifyCfo(address)", +"7eb4b376": "UpgradeSpaceETH(uint8,uint256)", +"7eb52145": "_preValidateFinalization()", +"7eb5df39": "equal(uint256[],uint256[],string)", +"7eb60591": "NVISIONCASHTOKEN()", +"7eb6634c": "phasePresale_From()", +"7eb69ba1": "hint(int256,bytes32,string,bytes20)", +"7eb82601": "getHighestBlockNumber(uint256)", +"7eb96aa3": "setCurrentWeekPool(uint256)", +"7eb9f04a": "updatePriceInWei(uint256,uint256)", +"7eba7ba6": "getSlot(uint256)", +"7ebaaa60": "MemberBoughtToken(address,uint256,uint256,uint256,uint256,uint256)", +"7ebadcd8": "acceptPayments(bool)", +"7ebd02f8": "typeA()", +"7ebd89ee": "TokenSale(address)", +"7ebdab54": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[],uint256[])", +"7ebdc478": "settleTimeout()", +"7ebdf4ac": "setMaxAllowedBetInEth(uint256)", +"7ebdf57d": "icoTimeBonusPhase1End()", +"7ebe7626": "FreezeTokensReleaseTime()", +"7ebedc34": "hasEndedIco()", +"7ebf65fd": "changeGasLimitOfSafeSend(uint32)", +"7ec0c39c": "whitelistPrincipleLockPercentage()", +"7ec0f30d": "ack(string)", +"7ec13996": "getBytes32Value(string)", +"7ec1c1aa": "acceptPAIReceiptOwnership()", +"7ec20127": "createPoolIfNeeded()", +"7ec2402f": "freezeSupply()", +"7ec27000": "AiTokenToken()", +"7ec2ae46": "setSparkDividends(address)", +"7ec2e264": "_generateCode(address,uint256)", +"7ec2fd36": "capReleaseTimestamp()", +"7ec2fd95": "DrawCom()", +"7ec36494": "osmCoin()", +"7ec3e63e": "getsubscribersSinceLastHatch(address)", +"7ec4a5a6": "requestReturn(address)", +"7ec4edbe": "offset(address,address)", +"7ec509c4": "external_call(address,uint256,uint256,bytes)", +"7ec54bdc": "eosShareDrop()", +"7ec62cf7": "MthereumToken()", +"7ec650db": "__mul(bytes,bytes)", +"7ec69c50": "changeWhitelistingStatus()", +"7ec72d3c": "setSwap(address,uint256)", +"7ec80c27": "priceStep6()", +"7ec82929": "setFunctionIdVoteRules(bytes4,bool,uint256[5])", +"7ec8ff4f": "crosairVoucherSoldCount()", +"7ec9084d": "RRCoin()", +"7ec9290b": "setCouldTrade(uint256)", +"7ec9c3b8": "per()", +"7ecab507": "registerPresale(address,uint256,uint256,bool)", +"7ecacb95": "Example7()", +"7ecaf696": "createMultiple(uint256[],uint256[],uint256[],address[])", +"7ecb6475": "aggiungiFrase(string)", +"7ecc2b56": "availableSupply()", +"7ecc866f": "changeAllowAllWhitelistIssuances(bool)", +"7eccc40a": "contains(uint256,address)", +"7ecdb299": "SetEthBalance(address,uint256)", +"7ecdbf61": "SPPSeriesA(uint256,string,uint8,string)", +"7ece75dd": "lockPeriodStart()", +"7ecedac9": "allInitialOwnersAssigned()", +"7ecef543": "_getAppliedPolicyIndex(address,uint8)", +"7ecf9142": "depositToken(address[2],uint256[7],uint8,bytes32[2])", +"7ecfa8a8": "ico(address,address,uint256,uint256,address[],uint256[])", +"7ecfae65": "invokeFor(address)", +"7ecfb675": "stdBalance()", +"7ed02af9": "acceptNegotiationTenant()", +"7ed02cbe": "fireLottery(uint8)", +"7ed040f2": "prod(bytes32,uint128)", +"7ed04cf2": "getTokenNames(address,uint256[])", +"7ed05315": "newGubberment()", +"7ed06cf3": "nativeProof_verify(string,bytes,bytes)", +"7ed0c3b2": "write(bytes)", +"7ed0f1c1": "redeemed(uint256)", +"7ed18aa5": "WhitelistUpdated(address,uint8)", +"7ed19af9": "multiAccessRevoke(bytes32)", +"7ed1ca6a": "BetExecuted(uint256,address,uint256)", +"7ed273e9": "_mintToken(uint256,string,address)", +"7ed2d5ae": "getBlockBalance(uint256,uint256)", +"7ed32df6": "buyRtc()", +"7ed37b8d": "setPotato(string)", +"7ed40602": "IsICOstarted()", +"7ed4e321": "CakeToken()", +"7ed51b47": "getResult(uint256,uint256,uint256,uint256,uint256)", +"7ed57fa0": "pregnantHorses()", +"7ed5a6d4": "TYPE_EXPLORER_FREIGHTER()", +"7ed5d621": "Crowdsale(address,address,address,uint256,uint256,uint256)", +"7ed65c87": "closeProvider()", +"7ed67185": "getPoolTimeoutInBlocks(uint256)", +"7ed7101d": "mainIcoStartBlock()", +"7ed77c9c": "setContract(bytes32,address)", +"7ed788c8": "push(address,uint256,uint256)", +"7ed83d50": "INCO()", +"7ed8a719": "addItem(string,string)", +"7ed8b225": "createMesaVerify(bytes32[])", +"7ed9c734": "burnRemainingToken(uint256)", +"7ed9d3a3": "_error(uint256,bytes32)", +"7eda09e8": "test_me(int256,int256,int256)", +"7edaabd8": "sendApprovedTokensToInvestor(address,uint256,string,string)", +"7edaca89": "DAToken(uint256,string,uint8,string)", +"7edba6c8": "sam()", +"7edd9060": "_nominCap()", +"7eddea21": "STAKEHOLDERS_POOL()", +"7ede036d": "minimumSupply()", +"7edea039": "private_addPermittedRoll(uint256)", +"7edebaf1": "buyXname(string)", +"7edee605": "receivePayment(uint256,uint256,bytes)", +"7ee0cda4": "validate(string,uint256)", +"7ee0d91c": "isKycRequired(address)", +"7ee212bb": "planetIndexToApproved(uint256)", +"7ee23d59": "removeNodeFromStakedList(address)", +"7ee26b2e": "callKoikeToken(address,address,uint256)", +"7ee26e63": "_alreadyInList(address)", +"7ee2ea76": "isSafeHavenToken()", +"7ee42e6d": "_createToken(string,bytes5,address,uint256)", +"7ee54b82": "TYU(uint256,string,uint8,string)", +"7ee54eec": "onTicketPurchase(uint32,address,uint16[])", +"7ee55c97": "isICO()", +"7ee5c97a": "returnReferral(address)", +"7ee5eef2": "changeToPublicSale()", +"7ee62440": "highEtherBonusLimit()", +"7ee65635": "LookAtDepositsToPlay()", +"7ee6b2d0": "fundingMinCapInWei()", +"7ee7f42a": "MIN_RELEASE_DATE()", +"7ee80d17": "isScheduled()", +"7ee81902": "DatoDEX(address,address,address,uint256,uint256,uint256)", +"7ee8703a": "getProgressOfAddressAndId(address,address,uint32)", +"7ee96f6d": "getEnd(uint256)", +"7eeb5906": "createCountry(string,string,uint256)", +"7eec20a8": "cancelTask(uint256)", +"7eed2814": "transferAD()", +"7eee1ab6": "HahaCoin()", +"7eee288d": "unlock(address,uint256)", +"7eee56f9": "issueIcoCoins(address,uint256)", +"7eee6d1f": "getUserQuickPromoBonus(address,address)", +"7eeec2cf": "GigaWattToken()", +"7eefe47e": "editCode(uint256,string)", +"7ef01fb9": "totalLockedBonus()", +"7ef0356a": "littafiTimeCapsule(bytes32,string,string,string,string,uint256)", +"7ef039f8": "candySentAmount()", +"7ef09476": "transfer(uint64,address)", +"7ef1925b": "getShareRange(uint256,uint8)", +"7ef1a396": "YOU9COINToken(string,string,uint8,uint256)", +"7ef1ab2c": "payoutRange()", +"7ef224ee": "getContractOrNormal(address)", +"7ef26d42": "HardCapEthereum()", +"7ef2bd52": "currNumOfUpgrades()", +"7ef3bb63": "createKitties()", +"7ef3e741": "totalEtherReceived()", +"7ef4cabb": "nextSupplyAfterBlock()", +"7ef50298": "registry(bytes32)", +"7ef581cc": "whitelistAdmins()", +"7ef58e73": "totalGooProduction()", +"7ef59d01": "setTrader(address,bool)", +"7ef5b6ea": "refillTokens(uint256)", +"7ef5e6a2": "rescale(int128)", +"7ef61e28": "dayEthInLimit_()", +"7ef72eb5": "AlphaMarketCoin(address)", +"7ef7ce92": "revokeMint(uint256)", +"7ef81a34": "TestableTwoStageSale(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"7ef9016e": "MultiTransferValue(address[],uint256)", +"7ef92867": "Faucet(address)", +"7ef95c6f": "extractAccountAllowanceRecordLength(address)", +"7efa1433": "EVNTToken(address)", +"7efc05ae": "TUBECOIN()", +"7efc2315": "minPaymentForAnswer()", +"7efcbb33": "getTradeRecord(uint256)", +"7efce4ff": "TransactionRefunded(uint256,uint256)", +"7efce591": "TokenRDN(uint256)", +"7efd3441": "DynamicSKx2(uint256)", +"7efd9112": "decodeTokenId(uint256)", +"7efe0e76": "PhoenixFundDeposit()", +"7efe294c": "removeFromFreezedList(address)", +"7efe3d86": "dataControlChangeMinApproval(uint8)", +"7efe64ba": "InfinityHourglass()", +"7eff1465": "setAccountAllowance(address,address,uint256)", +"7eff275e": "changeProxyAdmin(address,address)", +"7effb427": "TTTToken()", +"7efff887": "topUpBalance()", +"7f002ffe": "setTradeable(bool)", +"7f004afa": "participantRoundChange(address,address,uint256)", +"7f005c7c": "showHiddenValue()", +"7f006ce1": "reading_card_upright_at(uint8)", +"7f008a0a": "cancelSell()", +"7f01bb38": "getVestingRevocable(address,address)", +"7f052e03": "commitPlasmaBlockRoot(bytes32)", +"7f053808": "approveAndAuction(uint256,uint256,uint256,uint256)", +"7f0554ca": "mntToken()", +"7f056637": "testExecuteSellOrder()", +"7f05c3a6": "supportAccounts(address)", +"7f067ff7": "Bitcoinsummit()", +"7f069942": "transferToBeneficiary()", +"7f070a9b": "withinRefundPeriod()", +"7f0899f2": "AddTicket(bytes5[])", +"7f08a250": "testPoint(uint256[3])", +"7f08ea8b": "getBetPool(uint256,uint256)", +"7f08ea8f": "getTotalTokensPerArray(uint256[])", +"7f09171b": "addAd(address,uint256,uint256,uint256,string,string)", +"7f095bfb": "multiSendB(uint256,uint256)", +"7f09ad64": "drainMe(uint256)", +"7f09bd1d": "setEthPreAmount(uint256)", +"7f09beca": "moveToWaves(string,uint256)", +"7f0a1bed": "bidderPlaceBid()", +"7f0b61f7": "ManagerEnabledEvent(address)", +"7f0bd881": "wanport()", +"7f0c949c": "setJurisdication(string)", +"7f0cd33c": "ApproveAndtransfer(address,uint256)", +"7f0d35e2": "totalPublicSaleWei()", +"7f0da94e": "cooloffIncrement()", +"7f0ed037": "setKickOff(uint8,uint256)", +"7f0f04a8": "unregister(bytes32,address,uint256,uint256,uint256)", +"7f0f09af": "EtherdeCoin()", +"7f102c16": "currentGameStatus()", +"7f10a3c0": "presaleBonusAddress()", +"7f1165c1": "getSencBalance()", +"7f1482b1": "round3Bonus()", +"7f15a21c": "modify(address,address,uint256)", +"7f15a6a3": "setCCH_edit_31(string)", +"7f16ab50": "replaceAuthorised(address,address)", +"7f16d7b3": "TRL2()", +"7f1731b6": "unsetRegistrar(uint256,address)", +"7f17b05d": "OwnerAddress()", +"7f17b79d": "setGameCost(uint256)", +"7f17ce9b": "DIGIPLACED()", +"7f180db7": "kudos(uint256)", +"7f187d2d": "score(bytes32,string)", +"7f18b569": "setKncPerEthBaseRate()", +"7f18f10c": "setGeneContractAddress(address,address)", +"7f191255": "punchOut(address,uint64)", +"7f1926c7": "GagarinToken()", +"7f1a2a73": "getEmployerAvgRating(address,address)", +"7f1a4c1f": "withdrawContributorsTokens(address,uint256)", +"7f1a8749": "purchaseMakeAdv(uint256,string,string)", +"7f1b1e51": "testTooFewTokens()", +"7f1b8cc3": "getUsersByBalance()", +"7f1bb473": "daysFrom(uint256)", +"7f1bffc1": "_removeToken(uint256)", +"7f1c25d0": "HolaMundo()", +"7f1ce417": "isITOFinished()", +"7f1ebc4d": "reentrantGuard()", +"7f1ecfe0": "getCurrentBid()", +"7f1f0507": "publicRate()", +"7f205a74": "SALE_PRICE()", +"7f205c8c": "getOraclizeCallback(bytes32)", +"7f205f02": "changeBoolean()", +"7f21d498": "getMinBid(uint256)", +"7f23fb92": "setGenres(string)", +"7f2438cb": "sellFor(address,uint256)", +"7f25c1e4": "etherRaisedByState(uint256)", +"7f2609eb": "LogFinalizeMatch(uint256,uint8)", +"7f26fc7d": "removeCreator()", +"7f279a73": "Cashing(address,uint256)", +"7f2857b6": "viewFunc()", +"7f28c44f": "isIcoSuccessful()", +"7f290d2d": "ExpiringMarket(uint64)", +"7f293e02": "ChangeCoinCrowdsale()", +"7f294b10": "setPI_edit_26(string)", +"7f298f93": "crowdsaleEndBlock()", +"7f2a4784": "KYC_VERIFICATION_END_TIME()", +"7f2aeea4": "getType(bytes32)", +"7f2b06ed": "bonusLimit3()", +"7f2b88ea": "getThirdPhaseCap()", +"7f2c1633": "prenesiKovance(address,uint256)", +"7f2c4ca8": "getLastBlock()", +"7f2e01fb": "ListValidated()", +"7f2e0ec2": "remainRewards()", +"7f2e98ad": "PoissonData()", +"7f2f506b": "CLAIM_INTERVAL_DAYS()", +"7f300576": "startThrowing()", +"7f301b83": "setMetadataHash(string)", +"7f31b480": "changeMasterAddress(address,address)", +"7f31cbfa": "batchShareAmount(address[],uint256[],uint256,uint256,uint256)", +"7f32f6de": "isSoftCapCompleted()", +"7f33375b": "getReturnedData()", +"7f334bd1": "_generateRandomId(string)", +"7f33c1e1": "Ethurem()", +"7f3436ef": "addOrganisation(address,string,string,string)", +"7f349329": "currentRoundSupply()", +"7f35571f": "Sell(uint256,address)", +"7f3681f6": "setKNCRate()", +"7f3745ad": "execute_transfer_all(uint256)", +"7f3745db": "getTracksByArtist(address,uint256,uint256)", +"7f37b905": "salesCounter()", +"7f37fab6": "addActionToRole(string,string,string)", +"7f3800ba": "setMultihash(bytes32,string,bytes)", +"7f386b6c": "minimumPrice()", +"7f38a4a7": "updateUSDETH(uint256)", +"7f38b980": "setTokenDistributionPool(address)", +"7f38e526": "pendingPayments(address)", +"7f390088": "QYCC()", +"7f3a2472": "reserveIssue(address,uint256)", +"7f3a98b7": "burnMyBalance()", +"7f3ad651": "KayoToken(address,address,uint256,string,uint8,string,bool)", +"7f3bd56e": "disburse(address,uint256)", +"7f3c26b1": "rejectHours()", +"7f3c2c28": "registerContract(string,address)", +"7f3cb47b": "minimumAmountWei()", +"7f3cd28e": "tokenSalesByOwner(address,uint256)", +"7f3d5c4c": "ICOPaused()", +"7f3ded93": "voxFab()", +"7f3df4bb": "addBonus(uint32[],uint64[])", +"7f3e1841": "endSecondPeriodTimestamp()", +"7f3e4d1b": "setAtkNowForPlayer(address)", +"7f3f3398": "transferAndCallExpanded(address,uint256,bytes,address,address)", +"7f3f81c0": "confirmProposal(bytes32,address,uint256)", +"7f404b7f": "updateInt256(bytes32,int256)", +"7f40d9d8": "delayDonPhase(uint256,uint256)", +"7f4316ec": "getDefendPlayerList()", +"7f4384a8": "RichNiggas()", +"7f440d57": "getProjectReport(uint256)", +"7f445c24": "subRegistrar(string)", +"7f44fcfa": "_getPoints(uint256)", +"7f453951": "CBMDToken()", +"7f45b835": "getPrimaryRecord(string)", +"7f45ec91": "emitIssuance(uint256)", +"7f460693": "ownerPutCapital()", +"7f46550f": "CrowleyToken()", +"7f476471": "setRCContractAddress(address)", +"7f480f9d": "processDividends(address)", +"7f486ca6": "cancelChibiForFusion(uint256)", +"7f493ce6": "disableTokenTransferability()", +"7f497550": "scheduleTransfer(address,uint256,uint256)", +"7f498ffc": "setEnd(uint256)", +"7f4a1c52": "setExceed(uint256)", +"7f4a9691": "depositTokenToVault(address,uint256,uint256)", +"7f4ab1dd": "messageForTransferRestriction(uint8)", +"7f4ae68d": "restrictedAddress()", +"7f4af951": "pixelPrice(uint256,uint256)", +"7f4bf7d1": "Inerex(bytes32)", +"7f4c7064": "ESCROW_TOKENS_PERCENT()", +"7f4d5150": "CheckItemExists(uint256)", +"7f4d6aa4": "LogResumed()", +"7f4da132": "goldFee()", +"7f4db7fb": "testPrivate(uint256)", +"7f4e4669": "raiseInitialSupply(uint256)", +"7f4e4849": "getContractState()", +"7f4ec5a7": "toAddressThrow()", +"7f4ed2c7": "addToWhitelistMulti(address[])", +"7f4ed5ac": "sumHardCapICOStage2()", +"7f4edd72": "getAllAdIdsByUser(address)", +"7f4ef9d4": "getText(uint256)", +"7f4fd78e": "BTCCollected()", +"7f50c74b": "FIXED()", +"7f51bb1f": "updateTreasury(address)", +"7f52fcae": "tokenAmountPerUser()", +"7f5341da": "startTimeSale3()", +"7f5369f1": "DEFAULT_REVOCABLE()", +"7f5375c1": "getLastWin()", +"7f53b15d": "_ICOSale(address,uint256)", +"7f555b03": "erc20Proxy()", +"7f55b2d9": "cleanBalance()", +"7f55b87f": "createCountry(string)", +"7f564472": "resetAmountBonuses()", +"7f5651d7": "setNamehash(string,bytes32)", +"7f56c072": "SIEChain()", +"7f56c0b4": "setTeamFundWallet(address,address,uint256)", +"7f56ca73": "Volkstest2()", +"7f573a4f": "UNSOLD_SOLD_RATIO()", +"7f582b47": "howMuchWithdrawed()", +"7f58b9ee": "allQueryIds()", +"7f592be4": "TRANCHE2_ACCOUNT()", +"7f592cfe": "setLLV_edit_12(string)", +"7f59cbcc": "withdrawFromRelay()", +"7f5a259f": "FIXED_RATE()", +"7f5a285a": "notInWhitelistAllow()", +"7f5a448c": "switchToWhaleMode(bool)", +"7f5ae339": "isAdminister(address)", +"7f5b47cd": "eventApproval(address,address,uint256)", +"7f5b503c": "toB32(bytes,uint256,address)", +"7f5ba3cc": "REGULAR_TYPE2()", +"7f5ba79f": "registerNewProduct(uint256,string,string,string)", +"7f5bfe30": "PaymentExecuted(uint256,address,uint256)", +"7f5d3dc8": "getStats(uint256,uint256[7])", +"7f5d85f8": "testBurnGuyWithTrust()", +"7f5dfd16": "approveProxy(address,address,uint256,uint8,bytes32,bytes32)", +"7f5e495d": "defaultLimits()", +"7f5f0d6a": "resumeIco()", +"7f5f17b1": "getCompte_8()", +"7f5f9128": "alreadyReservedForTeam()", +"7f601a50": "getHouseCardsNumber()", +"7f602231": "tip(bytes32,address,uint256)", +"7f60b20a": "getSlice(uint256,uint256,string)", +"7f60bb7c": "applyBonusAmount(address,uint256,bytes32)", +"7f6150cb": "getRoundCurKeyNo(uint256)", +"7f626f1a": "setStore(uint256)", +"7f630259": "getSuperReferrerRate(address)", +"7f63040b": "CompcoinCash()", +"7f630b4c": "share(string)", +"7f63af42": "deployConsortium(address)", +"7f64727b": "getTreesOnSale()", +"7f649783": "addToWhitelist(address[])", +"7f64c34e": "deadline365()", +"7f64d2d3": "NCAAChampionship()", +"7f654b1c": "setLatestPayday(address,address,uint256)", +"7f6578d3": "REFUND_PERIOD()", +"7f6597e0": "AcuteEthereumCloudMiningunion()", +"7f660b01": "FEE_COLLECTOR()", +"7f66af09": "card_titanium_first()", +"7f66ccbe": "EthereumVerge()", +"7f66d1f8": "mOnApprove(address,address,uint256)", +"7f671c1b": "insert(int128)", +"7f686259": "migrateBalancesFromLegacyRep(address[])", +"7f695f28": "isFlying()", +"7f6a731c": "donationAmountInWei()", +"7f6ae0c0": "canUpdateDeveloperMiningPower()", +"7f6d8955": "RegisterOne(uint32,address,address)", +"7f6ec891": "withdrawNonTopForTeam(address,uint256)", +"7f704657": "RESERVED_FOR_TEAM()", +"7f71f1f9": "controllerApproval(address,address,uint256)", +"7f725862": "_setNewEstimate(uint256,uint16)", +"7f7376e8": "launchSale()", +"7f74ac15": "ownerContract()", +"7f7575c9": "FixedSupplyCrowdsale(uint256,address,address,uint256)", +"7f760335": "PurchaseTokens(uint256,address)", +"7f761472": "canRedeemUTXOHash(bytes32,bytes32[])", +"7f7624d0": "MjolnirAddress()", +"7f7634ba": "winnerConfirmed()", +"7f76bd3a": "lastBlock_v18()", +"7f76d76d": "minCapIco()", +"7f784da7": "addNews(string)", +"7f78636a": "BASE_URL()", +"7f790b7b": "getCreateUniverseParentPayoutDistributionHashValue()", +"7f791790": "roll(uint16[],uint16)", +"7f791833": "toTimestamp(uint16,uint8,uint8,uint8)", +"7f792910": "setExchangeable(bool)", +"7f7977d1": "isFundraiser(address)", +"7f7985cf": "setEthUSD(address)", +"7f79cbfe": "MANHATTANPROXYLEXINGTONAVE()", +"7f7b1393": "getLocation(uint256)", +"7f7b17a0": "SetupPreSale(bool)", +"7f7c1491": "remove(address,address)", +"7f7d31dd": "sub32(uint32,uint32)", +"7f7d711e": "setRequireCustomerId(bool)", +"7f7dcdbf": "isContractOwner()", +"7f7de185": "handleProductionDecrease(address,uint256)", +"7f7fde8e": "sellAssets(address[],uint256[])", +"7f81f0b9": "setTransferLock(uint256)", +"7f83a4a6": "canRefund()", +"7f83bf7d": "setMinimumPayment(uint256)", +"7f84017f": "SELL_SOFT_LIMIT()", +"7f848ccb": "_packMakeData(address,uint256,uint256)", +"7f85066e": "Reflex()", +"7f853e7e": "MLCToken()", +"7f85c599": "addOrder(bytes32,address,uint256,uint256)", +"7f860330": "batchReturnEthIfFailed(uint256)", +"7f863cab": "Bid(address,uint256,address,uint256)", +"7f8661a1": "exit(uint256)", +"7f869d98": "stepFour(int256)", +"7f86cd3f": "parseLoanOfferRates(uint256[10],uint32[4])", +"7f86d985": "drunkness()", +"7f86f7f4": "walletPlatform()", +"7f877710": "recoverUnawardedMILs()", +"7f879229": "setSalesUser(address)", +"7f88616f": "onlyAdminAndNotInit()", +"7f89ce48": "initTiers(uint256[],uint256[])", +"7f8b8f48": "Ledger(address)", +"7f8b9478": "getImpliedRoot(bytes,bytes,uint256,bytes32[])", +"7f8c263f": "dragonBalance(address)", +"7f8d429e": "isFinalized(bytes32)", +"7f8d53c6": "put(address,uint256)", +"7f8dafef": "unsoldAllocationCount()", +"7f8fdcfb": "suspendDeposit()", +"7f9144ce": "token_member_order_pop(address,address,uint32)", +"7f91fb7d": "isSignedBy(address)", +"7f9245d0": "_clearTokenApproval(uint256)", +"7f924c4e": "testDeposit()", +"7f925c93": "withdrawSeller(address[2],uint256[7],uint8,bytes32[2])", +"7f93354b": "multiVoteNoLock(address[],uint256[])", +"7f9343ad": "playNumberSuit(uint256[])", +"7f93de95": "deposit100Percent()", +"7f947168": "TimeTransferAllowed()", +"7f949386": "updateMessage(uint256,string)", +"7f949ac0": "ethashContract()", +"7f94a8fa": "getWriteTimestamps(bytes32[])", +"7f95d6f6": "accountBalances(uint256)", +"7f95d919": "DistrFinished()", +"7f967a8c": "IsExchanged(address,string)", +"7f9785b0": "_resetList()", +"7f97e836": "didCommit(address,uint256)", +"7f98444f": "randomEnd()", +"7f99e11a": "isMiningOpen()", +"7f99f3c4": "MaybePerformOpen()", +"7f9ac04f": "balancesStaticoin()", +"7f9b48bc": "setCompte_9(string)", +"7f9bf9e4": "startMinting(string)", +"7f9c23e0": "_determineHitPoints(uint256)", +"7f9c8974": "getAssetCollectedOreBallancesArray(uint256)", +"7f9c9d91": "_getBorrowAmount(uint256,uint256,uint256,uint256,bool)", +"7f9cbfc1": "checkPayments()", +"7f9d139a": "positionScount(address)", +"7f9d2044": "UniBowToken()", +"7f9d314e": "autoBirth(uint256)", +"7f9df012": "VoteRevealed(address,uint256,uint256,uint256)", +"7f9f5495": "levelTokens()", +"7fa0c10f": "DeleteUserByAddr(address)", +"7fa0c908": "newChow(address)", +"7fa22001": "assertEq0(bytes,bytes,bytes)", +"7fa24846": "SetSAToEContract(address)", +"7fa28d75": "transferRightIfApproved(address,bytes32)", +"7fa34e92": "preIcoAddr()", +"7fa39958": "RateAdd(address)", +"7fa3f3d0": "addLock(uint256)", +"7fa400e4": "totalTokensAvailableForSale()", +"7fa40a42": "sumICOStage8()", +"7fa44926": "setMinMaxInvestValue(uint256,uint256)", +"7fa4cacb": "setDestinationAddress(address)", +"7fa5aa9d": "registerPreSignedHashing(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"7fa6c365": "phase3MaxTokenForSale()", +"7fa6c745": "_setNewStartTime()", +"7fa767bc": "createBox()", +"7fa7a7c8": "buyInWithAllBalance()", +"7fa7acf8": "createCertification(uint256,uint256)", +"7fa87949": "unblockAccountFunds(address,uint256)", +"7fa8c158": "startICO()", +"7fa9aa76": "owner_updateBaseFee(uint256)", +"7faa0044": "renderString(string)", +"7fab541c": "exec(bytes32,bytes)", +"7fab624b": "purchaseGenes(uint256,uint256,bool)", +"7fabbd7b": "unilateralRefund(bytes32)", +"7fabe1a5": "allPendingRefs()", +"7fad54e4": "distributeGame(uint8,uint256)", +"7fad9b53": "BASE_TEAM()", +"7faddcfb": "currentDistributionAmount()", +"7faff876": "updateUser(bytes32)", +"7fb00168": "CryptekZ()", +"7fb0a445": "systemSaleAddress()", +"7fb0fe14": "voteCandidateTwo()", +"7fb158c5": "ChannelSettled(address,address,uint32,uint192)", +"7fb181c1": "swapTime()", +"7fb191a5": "TokenVestingContract(address,address,bool,bool,bool,address)", +"7fb1a5ed": "AirdropController()", +"7fb33170": "transferAdmin(address,uint256)", +"7fb33dc6": "burnTokensWhenFinished(address)", +"7fb3d459": "GetChipsInfo(address)", +"7fb419b6": "WalletBoss()", +"7fb5d847": "delTransferWhiteList(address)", +"7fb5ff3e": "MNTP()", +"7fb7b5ed": "enableTeamWithdraw()", +"7fb9e405": "getTitulaire_Compte_10()", +"7fbb1b56": "claimEgg(uint8)", +"7fbb345e": "getInvestorsTokens(address,address)", +"7fbc0c48": "_mint(uint256,address,string,string)", +"7fbc9c55": "calculateMultiplierAfterConversion(uint256,uint256,uint256)", +"7fbcef65": "BTH(address[],uint256,address,uint256,uint256,uint256)", +"7fbd778a": "getTotalScientists()", +"7fbe0680": "MIN_PURCHASE_OTHERSALES()", +"7fbea955": "getCanvasByState(uint8)", +"7fbf28f7": "_withdrawDivis(address)", +"7fc29fc9": "authorisedMinter()", +"7fc32915": "ThrowbackThursdayToken()", +"7fc38e04": "SponsorshipReceived(string,string,string,uint256)", +"7fc3bb26": "endPostICO()", +"7fc3f49e": "getReinvestableTokenAmount(address)", +"7fc446f2": "changeCustomDefrostingRate(address,uint8)", +"7fc4d6c3": "isPhaseExist(address)", +"7fc53fb5": "returnInvestmentsToInternal(address)", +"7fc543ec": "_donations(uint256)", +"7fc55eb4": "ContributionWallet(address,address)", +"7fc56856": "IOXDistribution(address)", +"7fc5af95": "getWinnerList()", +"7fc5f05c": "changeVoters(bytes32,address,string)", +"7fc611f0": "multiCall()", +"7fc729c2": "_buy(address,uint256,bytes)", +"7fc7e643": "SetUp(uint256,uint256,uint256,address)", +"7fc88fe2": "timelockContractAddress()", +"7fc8b612": "interadduser(address,uint256)", +"7fc8fd9e": "Update_MediatedTransaction(uint256)", +"7fc90182": "Pool(uint256)", +"7fc90a5c": "batchAssignTokens(address[],uint256[],uint256[])", +"7fc96619": "getPartner(uint256)", +"7fca432e": "FHFTokenCrowdsale(address)", +"7fcac0fb": "USDBCoin()", +"7fcae430": "PendingApplication(address,uint256,string)", +"7fcaf666": "setString(string)", +"7fcb024a": "secondLockTime()", +"7fcb2386": "MorrowToken()", +"7fccb4ba": "transferAppOwner(bytes8,address)", +"7fcd3ce2": "maxBetPrice()", +"7fcdd1f0": "setConfirm(uint256)", +"7fcf3a2f": "throwFooBar()", +"7fcf440a": "getOwnerBalance(address)", +"7fcf532c": "Withdrawal(address,uint256)", +"7fcf64b2": "updateEarnedBy(uint256,uint256)", +"7fcfb422": "increaseApprovalWithData(address,uint256,bytes)", +"7fcfc4a0": "ApisToken()", +"7fd004fa": "submitWhitelistAddition(address[])", +"7fd13532": "whitelistMany(address[],uint256,uint256,uint32)", +"7fd169d6": "createGroup(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"7fd19692": "setLockAddress(address,bool)", +"7fd2304f": "_maximumBuy()", +"7fd238ba": "doCoinage(address[],uint256[],uint256,uint256,uint256)", +"7fd26dd1": "tokenUsers(uint256)", +"7fd2ffa7": "InvestorWhiteListAddition(address)", +"7fd30df0": "mintBulk(address[],uint256[])", +"7fd39247": "setOwner(uint256,address)", +"7fd42617": "safeWithdraw()", +"7fd5bb31": "propose(address,bytes32,address[],bytes32[])", +"7fd5dd04": "APPROVE_OWNER()", +"7fd6f15c": "feePercent()", +"7fd751a8": "PRICE_ICO2()", +"7fd84609": "setOwnerThree(address)", +"7fd8601e": "deathData_v5()", +"7fd8d339": "changeicoBackend(address)", +"7fd8d51d": "stakeGLXForContributors()", +"7fd8ee68": "computeNameHashExt(bytes)", +"7fda8d52": "internalEnableRefunds()", +"7fdac6f1": "getCurrentCreditsExchanged()", +"7fdafafa": "totalTreePower()", +"7fdb0d6b": "Latcoin()", +"7fdb5031": "transferableTokens(address,uint256)", +"7fdb5efb": "GDCAcc01()", +"7fdb6720": "teamFundAddress()", +"7fdbd0f2": "ERC721DutchAuction(address,uint256)", +"7fdc5bd6": "LANA()", +"7fdc8290": "isUnderscore(bytes1)", +"7fdd458d": "createWithParents(bytes32,bytes32,bytes32[])", +"7fdd5403": "clearApproval(uint256)", +"7fdd69f6": "setMaxAllowedReservingPercentage(uint256)", +"7fddc0de": "getBiddingInfo(uint16,address)", +"7fde1c8a": "addRole(address,uint256)", +"7fde24c7": "addToPrivateWhitelist(address)", +"7fdea25b": "newVoting(uint8)", +"7fdf6911": "checkRoundAndDraw(address)", +"7fdfbe1b": "getBytes(string,uint256,uint256)", +"7fe02f94": "fireFightResultsEvents(uint8[4])", +"7fe0518a": "asyncSend(address,uint256)", +"7fe09003": "NewBlock(uint256)", +"7fe0c38b": "JOCKEY_LIMIT()", +"7fe0ff52": "StorageFee(address,uint256)", +"7fe11990": "authoriseManyAccounts(address[])", +"7fe11adc": "resetStage(uint8)", +"7fe18cf7": "_getInStageIndex()", +"7fe1a801": "setBountyCampaign(address)", +"7fe1dc7e": "getToken(bytes)", +"7fe1feb0": "initEmployee1()", +"7fe23f62": "winPool()", +"7fe275d4": "culmulative_demurrage_collected()", +"7fe320ab": "mvpExists()", +"7fe38fc3": "etherwow()", +"7fe3dc2e": "getGasCost()", +"7fe551fd": "clearingPrice(bytes32)", +"7fe5850b": "_redeemByDefaultPartitions(address,address,uint256,bytes,bytes)", +"7fe60640": "updateBtsPoint(int256,uint16,int256,uint16)", +"7fe650b1": "finalizeICOOwner()", +"7fe6eee0": "fundingLimit()", +"7fe846ba": "isSubjectDestruction(uint256)", +"7fe864b8": "MAX_TOKEN_CAP()", +"7fe88885": "storeHash(bytes32)", +"7fe8ca66": "sendInput(int256,int256)", +"7fe97bc5": "getSqrY(uint256)", +"7fe98ae0": "updateEthICOThresholds(uint256,uint256,uint256,uint256)", +"7fe9d39c": "changebeginnerprotection(uint256)", +"7fea061a": "TimeTransferAllowanceChanged(string,uint256)", +"7fea0d4b": "beforeAll()", +"7feb4685": "Chende()", +"7febd721": "presaleAmountRemaining()", +"7fec1b7a": "WBT()", +"7fec5d33": "Eightk()", +"7fec8d38": "trigger()", +"7fecd538": "isWaiting()", +"7feda59a": "revokeAttribute(address,string,bytes)", +"7fee4ecb": "GAS_PER_DEPTH()", +"7feec9be": "sams(uint256,string,string)", +"7feed5b6": "price_exponent1()", +"7fef036e": "totalEntries()", +"7fef21d4": "getBoundingBox(uint256)", +"7fef2d38": "updateMatchInfo(uint256,string,uint64,uint64)", +"7fefde53": "WillRegistry()", +"7ff02139": "updateCrytal(address)", +"7ff0346b": "getContents(bytes32[])", +"7ff276bd": "totalEthFundCollected()", +"7ff2acb7": "getData_2()", +"7ff2c70a": "ipo_price()", +"7ff2cf93": "getcertifieddatacount()", +"7ff31d2b": "setData_28(string)", +"7ff3366f": "TeamAddress()", +"7ff44544": "GetCurrentSalePrice(uint256)", +"7ff44a91": "getAllKeyNum()", +"7ff4b630": "action(bytes32[])", +"7ff6ea1c": "WolkCreated(address,uint256)", +"7ff6f83a": "_distributeTax(uint256,address)", +"7ff701dd": "TrackerToken()", +"7ff70a89": "getOwnedTokenList(address)", +"7ff729fc": "fillUpProject(uint256,uint256)", +"7ff860f6": "batchCreateAssetSale(uint256[],uint256[],uint256[],uint256[])", +"7ff86a35": "HappyBirthday(address,uint256)", +"7ff91228": "Stake(address[],address,address,uint256,address)", +"7ff92d6e": "set_address__Arina(address,address)", +"7ff931bd": "lastWinningNumber()", +"7ff988c5": "setKtcAddress(address)", +"7ff9b596": "tokenPrice()", +"7ffaae3e": "balanceEth(address,address)", +"7ffb8577": "totalGains()", +"7ffc0712": "getLifeRate(uint256)", +"7ffc80cf": "queryRandomTryTime_()", +"7ffcb093": "addVoter(address,bytes32[])", +"7ffce58e": "getTokenForInvester(address,uint256)", +"7ffdf53e": "conversionRate()", +"7ffe8be1": "setKycAddress(address)", +"7fff9f1a": "getProposalVoteCount(uint256,uint256)", +"7fffb7bd": "HelloWorld()", +"80007e83": "isVerified()", +"80008794": "round1Target()", +"80009630": "setCore(address)", +"8001553a": "OwnerRemoval(address)", +"80017cbc": "cancelLine(uint256,string)", +"80033408": "CANSale()", +"8003524e": "calcDoHash(string,bytes32)", +"800362ae": "loveStoriesCount()", +"80054c5d": "FreedomToken()", +"80056b5b": "changeAdminPrivilege(address,bool)", +"80057b9a": "getColor(uint256)", +"80059593": "numberAccounts()", +"8005993e": "getProfileHash(address,address)", +"800626a6": "AIR_1_SUPPLY()", +"8006692f": "stage3Deadline()", +"8006745b": "getPayout(address)", +"8006a5d3": "delegateAddresses()", +"8006f807": "COBAIN()", +"8007604b": "Stage1Deadline()", +"80078a0f": "ForFood()", +"8007acbf": "getActiveShareholdersArray()", +"80087745": "closeInvest(bytes5)", +"8008d5bc": "inSale()", +"8009484b": "getMaxBetAmount(uint8)", +"80097484": "transfer(address,uint32)", +"80097a8e": "adjustedPotBalance()", +"800a320a": "TokenGameTransfer(address,uint256)", +"800ab784": "verifyMerkleProof(uint256,uint256)", +"800bbd1f": "getCountTokens(address,uint256)", +"800c5086": "giveERC20AllowanceToKyber(address[])", +"800c7e38": "getCurrentPageCount()", +"800d0f6a": "LCToken(uint256,string,uint8,string)", +"800d41a3": "newExitWallet(address)", +"800deda5": "yoyoTransfer(uint256,string,string)", +"800ed545": "MWSToken()", +"800edb9d": "changeCap(uint256)", +"800f8e52": "placeBetWithInviter(uint256,address)", +"80105295": "maxUserPower()", +"801137e7": "setDepositPercents(uint256)", +"80113832": "ORDER_MODIFY(address,address,uint256,uint256,uint256)", +"801145bd": "sig_to_add(bytes16)", +"801161b0": "setMain(address)", +"80117026": "FRAC_BOT()", +"801298fa": "changePaymentFlagger(address)", +"80130383": "LGCY()", +"801336cb": "STARTING_RickAndMorty()", +"8013f267": "calcUnMaskedGuEarnings(uint256)", +"8013f3a7": "dev2()", +"8014f238": "editCard(uint8,string,string,string)", +"801512af": "SvinChainToken()", +"8015a96d": "For_admin()", +"8015e6f3": "getDungeonPower(uint256)", +"8016b6ed": "getKeyValue(address,string)", +"80173a19": "geneManager()", +"8017732d": "LDT()", +"801a115d": "transfertCopieExecutoire(bytes32)", +"801a1467": "swapFor(address)", +"801aaffb": "potWithdrawTo(uint256,address)", +"801aba56": "etherProceeds()", +"801b4189": "claimRental()", +"801c334e": "auctionIncreaseBid(bytes32)", +"801db9cc": "MIN_CAP()", +"801e2593": "maxAllowedAmount(address)", +"801f568e": "SpenderAuthorization(address,bool)", +"80200e12": "subFreelancerTotalInvoiced(address,address,uint256)", +"802028c9": "createDerivative(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", +"802049ac": "setUpgradeableTarget(address)", +"8020f54e": "addAssetToNetwork(address)", +"8020fb77": "getCurPayTable()", +"8020fc1f": "isDeregistered(address)", +"802114a8": "_removeRole(address,string)", +"80218eeb": "tokensIssuedTillNow()", +"802293c2": "getResultblockHash(bytes32)", +"8022fb7a": "setFrozenCoin(bool)", +"8023769f": "getPCAddress()", +"8023ffbd": "getOverallSize()", +"80249468": "getUserHSCeducationDetails(string)", +"8024c400": "limitPerDay(uint256)", +"8025e303": "VERSION_NUMBER()", +"802608a2": "setExpirationDate(address)", +"802644a4": "fundingEndUnixTimestamp()", +"8026efaa": "token18KstepCAP()", +"8026fe24": "FundTransfer(address,uint256,uint256,bool)", +"8026ffd9": "_move(address,address,uint256)", +"80270b33": "CSCResource(string,string,uint256)", +"80274db7": "preRelayedCall(bytes)", +"8027dece": "updateShare(address[],uint256[])", +"8028bdc4": "returnedCWC(address,uint256)", +"8028ce6b": "claimRefundsFor(address[])", +"80296dec": "admin_check(address)", +"802a350f": "addCustomerService(address)", +"802b1d93": "officiant()", +"802b45e2": "ISBCoin()", +"802b8453": "setPerventValue(uint256)", +"802bbab2": "ChainStarBase(uint256,string,string,uint8)", +"802c8cda": "_cancelEscrow(address,uint256)", +"802cd15f": "changeDistributor(address)", +"802d1848": "setLimitations(uint256,uint256,uint256)", +"802daa62": "latinotoken(uint256,string,uint8,string)", +"802de8fc": "setPremiumFactors(bytes32,uint256,uint256)", +"802deb22": "TokenTrader(address,uint256,uint256,bool)", +"802ea720": "getTotal(bytes)", +"802eb89c": "_getWeight(uint256)", +"802f2ffa": "_addPayment(address,uint256,uint256,uint8)", +"802f5bae": "ADDITIONAL_PORTION()", +"802fcc0d": "internalSafeTransferFrom(address,address,uint256,uint256,bytes)", +"80311bf9": "buyCore(uint256,uint256,uint256,uint256)", +"8031233c": "inflationCompBPS()", +"80318be8": "transferOverride(address,address,uint256)", +"8031e85c": "calculatePremium(uint256,uint256,uint256,uint256,string,string,string)", +"80322cbd": "isNowApproved()", +"80325b2d": "queryN(uint256,string,bytes,uint256)", +"8032751b": "returnInvestments(uint256)", +"803287de": "_frozenTokens()", +"80330982": "sendEther(address,address)", +"80334b8f": "TomBit(uint256,string,uint8,string)", +"8033c643": "ROSCAv1(uint16,uint128,uint256,address[],uint16)", +"8033cc70": "StealthToken()", +"8033fe49": "releaseEnd()", +"80341744": "contactsAddresses(uint256)", +"803435d7": "startDefinedGameManually(uint256)", +"80355798": "isAlreadyUsed(uint256)", +"803587ae": "invalidateCertificate(bytes32)", +"8036b5db": "setPresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"8036d757": "getRateUpdateBlock(address)", +"80373436": "setSecondaryGameManager(address)", +"80378b78": "setShopRunning(address,bool)", +"8037bfe0": "unRedeemedMTU()", +"803965c4": "amountFixed()", +"803a62ea": "Register(uint256,address,address)", +"803b4c11": "OwnerUpdate(address)", +"803c64c3": "GetCardList(address)", +"803c6fa9": "getWeiTokensOwed(address)", +"803c8383": "getKey(address,address,uint32)", +"803cc0d0": "kscTransfer(address,uint256,string)", +"803d65ff": "_sendtoken(address,address,uint256)", +"803e8fbb": "lengthOf_dataPattern_to_voteRulesHash()", +"803ea2ee": "MoneyTransfered(address,uint256)", +"803fbe5b": "paymentRegularTokens(uint256,uint256)", +"803fcd43": "check(address,address,address,address,uint256)", +"80402564": "addrList(uint256)", +"8040cac4": "testOverflow()", +"80412042": "decrementOwnedTokensLength(address)", +"8041fcc4": "AVMToken()", +"8042b215": "developerPctX10K()", +"8042fba5": "newEscrow(address,address,address,uint256,bytes32,bool)", +"8043154d": "post(address,bytes32,bytes32)", +"804327bb": "buyPreIcoTokens(uint256)", +"8043c9c0": "eventName()", +"8043cf2d": "mintB()", +"8044c67e": "updatePrizes(uint256[])", +"804518a8": "nic()", +"8047ba70": "getTokensAmountUnderCap(uint256)", +"8047cb93": "createGame(bytes32,uint256,address)", +"8047cf41": "init(uint256,string,uint8,string,address)", +"80496fd6": "CaData()", +"804afd9e": "vigAddress()", +"804afffb": "tokenIndexToPrice(uint256)", +"804b55d5": "finaliseAs(address)", +"804ba97a": "tryGet(bytes)", +"804c68aa": "allocateTCLRinTeamTokens()", +"804c7fa0": "_migrateExoplanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", +"804d564c": "whitelist10Addresses(address[10])", +"804d77c8": "approveLoanIdentifier(bytes32)", +"804e11dc": "testThrowsDisownNotTransferable()", +"804e1c53": "_updateProfit(uint256,bool)", +"804e8063": "setAffiliateEdge(uint256)", +"804ee2b5": "addProduct(uint256,uint256,string)", +"804f82d3": "showLastBidValue()", +"804fe7ac": "acceptBid(address,bytes32,uint256,uint256,uint256,uint256,bytes32,uint8,bytes32,bytes32,uint8)", +"805013c2": "setPresalePhaseUInt(uint256)", +"80504271": "fundingExchangeRate()", +"80519ac7": "getItem(bytes,uint256)", +"8051d02d": "getBlockNumber(bytes20,uint8)", +"805210b7": "AmIPlayer2()", +"8052191e": "dip(address)", +"8052474d": "Name()", +"80528865": "changeWithdrawState(uint8)", +"80529172": "setUsdPerEthRate(uint256)", +"805484b7": "getUpperMaximum(uint256)", +"8054b2f2": "NKN()", +"805553e8": "randMod(uint256)", +"80559357": "setTokenAvailable(bool)", +"805593db": "storeProductReference(address)", +"8055d33a": "exchangeSgnForSga(address,uint256)", +"8055dbb5": "GetExchangePoint(uint8)", +"8055f9d7": "Moderated()", +"80560a0a": "setIsProjectBonus(bool)", +"8056696e": "loadController(address,address)", +"80570d69": "JoshuaCoin()", +"80571e93": "UranBank()", +"80576150": "BoughtViaJohan(address,uint256)", +"8057b96d": "buyTokensForSelf()", +"8057e0b0": "DutchAuction(address,uint256,uint256,uint256)", +"8059382a": "setGasInTokens(uint256)", +"805996f2": "AccountCreated(address)", +"80599e4b": "remove(string)", +"8059e804": "ethealMultisigWallet()", +"805abe6a": "destoy()", +"805b8455": "bumpRound(uint256)", +"805b90d6": "unlockTokensAmount(address)", +"805bc096": "Roll100()", +"805c2b6c": "broadcastOpinion(string)", +"805c3abd": "getPreviousHashUint()", +"805c3d89": "SimpleLSTDistribution(address,address,uint256,uint256,uint256,address)", +"805c733b": "lottoBalance()", +"805d2679": "rndIssue(address,uint256)", +"805e99e0": "isFirstRound()", +"805f4cfc": "TosTeamLockContract()", +"80603faa": "isTakePermitted(uint256,uint256,address,address,uint256,uint256)", +"80615ffa": "receiveApproval(address,bytes)", +"806186f3": "LogRewardAllocated(address,uint256,uint256)", +"8061a159": "TokenSoftCapReached(uint256)", +"8061d365": "FINANCE_CAP_PER_ROUND()", +"8062d3e6": "insertAndCheckDo(bytes32)", +"8063ab78": "setWalletsDelegate(address)", +"8064696b": "getOraclizePrice(string)", +"80650f76": "sigCheck(bytes32,bytes32,bytes32)", +"80657151": "patronRewardMultiplier()", +"8065eaa6": "CreatorWithdrawAll()", +"80661555": "commandMintBonus(address)", +"80664ba0": "ProofTeamVote()", +"80667509": "MYGREATTOKEN()", +"80667aa8": "CBN(address)", +"8066f3c8": "totalSTACoin()", +"8067f7ba": "read_i16()", +"80690e01": "IsAirdrop()", +"80691858": "GoalReached(address,uint256,bool)", +"8069dc2d": "ThundervsJazz()", +"806a2a3c": "investors_needed_until_jackpot()", +"806ad169": "getWithdrawal()", +"806ad57e": "addWorker(address)", +"806b0365": "changeBountyWallet(address)", +"806b39ab": "crownTotalSupply()", +"806b6c28": "GetCurrentTypeSalePrice(uint256)", +"806b984f": "lastBlock()", +"806ba6d6": "founder2()", +"806bd2b6": "challengeCooldownTime()", +"806c6188": "adjustMinimumPledgeAmount(uint256)", +"806cdc0b": "getBonusBalance(uint256,uint256)", +"806e085e": "transferBatch(address[],uint256)", +"806ee278": "collectionFunds()", +"806f208a": "invalidPayments(address[],uint256[])", +"806f3319": "multipleTokenDistribute(address,address[],uint256[])", +"80710f39": "withdrawAllToOwner()", +"8071a7ba": "PCTToken(address)", +"8071aa05": "multisend3(address[],uint256[],uint256[],address[],uint256[])", +"807283df": "Patronage(string,address,address)", +"80738c4d": "USTM01()", +"80744a9c": "LoyelaTestCoin()", +"8074dc59": "gift(address,uint256,uint256,string,string)", +"8074e31d": "Victory(uint256,string,uint8,string)", +"8074f332": "droneIndexToOwner(uint256)", +"8074fe33": "minerCurrentChallenge()", +"80759f1f": "getRootHash()", +"8075acd0": "couponBonusEnabled()", +"80766b68": "Bitcoin1()", +"807693b6": "grantPermissionToChange(address,uint256,bool)", +"8076bd41": "set_sale_closed()", +"8076f005": "cancelledOrFinalized(bytes32)", +"8077ccf7": "etherTokens(address)", +"80780801": "LimitedSetup(uint256)", +"80787f2c": "terminateSale()", +"80788cba": "CancelSubscription(address,address)", +"807896d5": "voteProposal(uint256)", +"8078cc57": "_changeLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"807a599c": "mintFinish()", +"807a87ed": "YouAreHere(uint256)", +"807b08c7": "runScript(bytes)", +"807d2da3": "start_ICO()", +"807d782e": "crcWithdrawAccount()", +"807d94a7": "maxIssuableSynths(address,bytes4)", +"807e5cee": "WhitelistUnset(address)", +"807eb7cd": "sumICOStage1()", +"807f08ea": "totalDepositedEthers()", +"807f0ac5": "slice(bytes,uint256)", +"807f3bce": "adminGetLastSignedTime(address)", +"807fb834": "resetRaz(uint256)", +"80806362": "IssueTokenFactory()", +"808134c8": "setBoardMember(uint256,uint256)", +"8081a1e7": "ecmul(uint256,uint256,uint256)", +"8082a929": "holderAt(int256)", +"8082ee0d": "Exchange(address,string)", +"80833d78": "unauthorise(address)", +"80836cab": "enableUpdates()", +"8084ee58": "setMaxLimit(string,uint256,uint256,uint256)", +"8085de8b": "MOBToken()", +"808615ac": "stake(address,address)", +"8086b8ba": "accountOf(address)", +"80870bc1": "trackBuy(address,uint256,uint256)", +"808757ac": "getFreeBat()", +"8087da3a": "order_number()", +"8088e0b6": "turnOffCanUpdateNextGamePotSplit()", +"80892b8a": "calculateTokensReceived(uint256,uint256)", +"8089d001": "getHashOfBlock(uint256)", +"808a69e2": "tokenAddressesSet()", +"808ab1d6": "getCertificationDbCount()", +"808ac94d": "getWeaponIds()", +"808ae9f8": "MoveLearned(uint256,uint256)", +"808c1499": "setIcoPhase2(uint256,uint256)", +"808cf58e": "initial_reward()", +"808e0ae2": "platformLogin()", +"808f30f3": "BitEyeToken()", +"808f3652": "calcHash(string)", +"808f4d21": "incentivisingEffortsAddress()", +"808f8292": "Menu03()", +"808fc72c": "wasSaleStarted()", +"8090114f": "percentRate()", +"809051db": "ipfs_hash()", +"80906b13": "controllerClaim(address,uint256)", +"80908b11": "Advertisement(address,address,address)", +"8090b131": "fetchNumber()", +"8090d83c": "jackpotProportion()", +"8090e4d5": "core(uint256,uint256,uint256,uint256,uint256)", +"8090f92e": "revealVotes(uint256[],uint256[],uint256[])", +"8091bfc9": "STEM()", +"8091d7a5": "addCustomField(uint256,bytes32,bytes32)", +"8091f3bf": "launched()", +"8091fbe1": "gen0PresaleCount()", +"8091fc76": "isValidICOInvestment(address,uint256)", +"80921070": "AvocadoToken()", +"8092285e": "setODEMClaim(address,bytes32,bytes,bytes32)", +"809282b2": "EtherTower()", +"80929e5b": "setBurnable(bool)", +"80943252": "numGamesTimedOut()", +"80947d17": "Verification()", +"80948ddd": "calculateTokenToEth(uint256,uint256)", +"8094ebe3": "joinGame(address,uint256,address,address)", +"80956021": "Concept(address[],uint256[],uint256,bytes,address)", +"80956e8b": "setMintFeeProp(uint256)", +"80959721": "poster()", +"80959cb6": "getCloseAmounts(uint256,uint256,uint256)", +"8095ab76": "songWriterSign()", +"8095cc36": "createForecast(uint256,uint256,uint8,uint8,bool,uint8,uint8)", +"8096bac6": "setNewMaxDeposite(uint256)", +"80972a7d": "ok(uint256)", +"809837c1": "ITECToken(uint256,string,string)", +"809841aa": "getCompte_25()", +"8098e45e": "getRamdon()", +"8098f67c": "ApexIssued()", +"80994e15": "STUDToEth()", +"80999b71": "removeBaseWhitelist(address[])", +"80999cc0": "MarketplaceInformation(address)", +"8099f357": "milliTokensPaid()", +"809a12de": "addRelatedAddress(uint256,address)", +"809a6173": "testCompare()", +"809a812c": "immlaToken()", +"809a9e55": "getExpectedRate(address,address,uint256)", +"809ae91e": "setBattleStart(bool)", +"809b296d": "consumeOperation(bytes32,uint256)", +"809c5b9e": "votingDescription()", +"809d7902": "rejectBid(address,uint256)", +"809d8988": "getTribe(string)", +"809d9a94": "transferMonster(address,address,uint64)", +"809dab6a": "getAvailableBalance()", +"809e243d": "LanxangCash()", +"809e4a2d": "claimUnrented()", +"809e52b2": "updateExperience(uint256,uint32)", +"809ef92f": "crowdsaleStarted()", +"809f8cc9": "VersumToken(uint256,string,string)", +"809fc4f8": "MKRUSD()", +"809ffb20": "setShopModerator(address)", +"80a0155c": "RBACMock(address[])", +"80a0c461": "updateMinimumPodSize(uint256)", +"80a15ad9": "setRocketValues(uint256[],uint256,uint256[],uint256[],uint256[])", +"80a1a86b": "countPayment(address)", +"80a1ba6a": "getTimeLeftToNextCollect(address,uint256)", +"80a1ec2e": "initUser(uint256)", +"80a23ddf": "mintBadge(int256,address,uint256)", +"80a2ddad": "founder4()", +"80a37e23": "recordHighScore(uint256,address)", +"80a3a783": "presaleStartDate()", +"80a3f8b4": "getWorkflowName(uint256)", +"80a3f9b3": "bonusCapUSD()", +"80a429ee": "VitaminToken()", +"80a507c6": "is_started_bonuses()", +"80a51c5e": "ownerDeclareRefundStart()", +"80a54001": "parentToken()", +"80a5cca3": "approveViaProxy(address,address,uint256)", +"80a6ee7d": "totalTokenBetValue()", +"80a738bf": "withdrawHighscorePot(address)", +"80a92b67": "payReward(uint256,address,uint256)", +"80a973e6": "sendTeamBalance(address,uint256)", +"80a979e1": "crowdsaleTransfer(address,address,uint256)", +"80aa5757": "getEtherForTokensOld(uint256)", +"80aab099": "nextAllowancePeriod(bool)", +"80ab611e": "cancelRecurringPayment(bytes32)", +"80abb85b": "refereds(address)", +"80ac5448": "operatingAddress()", +"80ac613f": "BatchCreateSales(uint256[],uint256,uint256,uint64,address)", +"80ac80b0": "iterStart()", +"80acaafb": "profitDistribution()", +"80ad17b2": "removeSiteSet(uint256,uint256)", +"80ad2cf3": "setCap(address,uint256)", +"80ad639d": "deleteAddressDataPatternVoteRules(address,address,uint256)", +"80adede0": "currentLoanAmount()", +"80ae4ebc": "_initialize()", +"80aed05f": "LooneyDice()", +"80af6002": "minimumICOCap()", +"80af6d79": "addEmissionProvider(address,uint256)", +"80afd844": "getPrivateFundAddres()", +"80afdea8": "appId()", +"80b022e8": "changeBurner(address)", +"80b20208": "thePot()", +"80b29f7c": "revokeDelegate(address,bytes32,address)", +"80b30c13": "tokensToSold()", +"80b38c2d": "ProcessTxFee()", +"80b3c3d8": "buyTokensWithIcon(address,uint256)", +"80b44c1b": "extraStatsForGen(uint256)", +"80b51fe3": "getPoolTimeOfStateInBlocks(uint256)", +"80b52136": "MoneyCoinCoin()", +"80b525ce": "BurnableTokenWrapper(address)", +"80b57824": "discount(uint32,uint256)", +"80b63e7e": "wakeUp(uint256)", +"80b6518a": "createEmptyTrack()", +"80b69199": "releaseBonusTokens(address,uint256,address,bytes1)", +"80b7ca90": "OrderList(address)", +"80b855d6": "ZiggyToken()", +"80b8e6d1": "changeWhitelistStatus(address,address,bool)", +"80ba4b75": "getActionsCount()", +"80bb3360": "exchangeToIco(address)", +"80bc150d": "Bounty(uint256)", +"80bc99cb": "teamLocker()", +"80bd0936": "Multivest()", +"80bd2723": "SecurityChainToken()", +"80be3cc4": "BurnTokensNew(uint256)", +"80bf099e": "orphantoken(address)", +"80bf549a": "maxICOSecondSupply()", +"80bf98f8": "makeSwapInternal()", +"80bfbe68": "setWhitelist(address,address,uint256)", +"80bfc599": "sellVouchers()", +"80bfe883": "wins(uint256)", +"80c05bc6": "random_callback(bytes32)", +"80c0a250": "fetchVoteResultForCandidate(address)", +"80c18d45": "addAddressToFounders(address)", +"80c190cf": "getReservedTokensListValInPercentage(address)", +"80c2fb7d": "currentTreasure()", +"80c30f3d": "buyContract(address,uint256)", +"80c324cf": "isBallotInProgress(uint32)", +"80c3780f": "schedules(address)", +"80c399f4": "refundInvestors()", +"80c3f96d": "addFarmer(address)", +"80c4237f": "tryToWin()", +"80c4e5c5": "changeSynthesizeAllowed(bool)", +"80c5bef8": "UGToken()", +"80c6ff73": "keepaliveBlock()", +"80c7507a": "getMigration(uint256)", +"80c80611": "Withdraw_3()", +"80c810d5": "MucToken()", +"80c81c16": "getStateInfo()", +"80c86c30": "CommonError(bytes)", +"80c8a270": "tokenReserved4Deposit()", +"80c8fde7": "perTokenAmount()", +"80c951bf": "currentClaimPriceInFinney()", +"80c96527": "getAssociatedTAOSetting(bytes32)", +"80c99dd2": "getPeriodicalBudget()", +"80ca7aec": "forceReseed()", +"80caac1d": "setTitleImage(string)", +"80cae007": "cleanOcean(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"80cd0015": "migrateUsername(bytes32,uint256,uint256,address)", +"80cd2464": "offer(uint256,uint256,uint256)", +"80cd5ac3": "newAppInstance(bytes32,address)", +"80cda248": "EGGS_TO_HATCH_1TOAD()", +"80cdc9c9": "RESTRICTED_PERIOD_DURATION()", +"80ce60d1": "setResult(uint8)", +"80ce98e7": "distributeDividends(uint256,address)", +"80cecea9": "transferToContract(address,uint256)", +"80cf264d": "getFirstPhaseCap()", +"80d07ce8": "Gifto()", +"80d10934": "freeXLMG()", +"80d1bd47": "jackpotHit()", +"80d1cb35": "getDeploymentBlock()", +"80d24e9d": "SISKTechnologyGroupToken()", +"80d2c1a6": "CatRescued(address,bytes5)", +"80d32dbb": "ChaoExToken()", +"80d32f85": "isSoftCapReached()", +"80d52ed9": "switchToNextRound()", +"80d5398e": "logOrderFilled(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes32)", +"80d563d7": "LogCancelContractProposal(address,address,uint256)", +"80d61012": "canReceive(bytes32,address,address,uint256,bytes,bytes)", +"80d7bcba": "incomingTokensTransactions()", +"80d7d81a": "giveMeBackMyMoney()", +"80d7f7ac": "TaxicToken()", +"80d7f92a": "_address(address,uint256)", +"80d85911": "initialize(uint256,uint256,uint256)", +"80d8b380": "setQtyStepFunction(address,int256[],int256[],int256[],int256[])", +"80d8ce23": "publishBytes(string,bytes)", +"80d95b42": "supplySeed()", +"80d9eaa6": "refCount()", +"80daa1c6": "setDiscountForPlayer(address,uint256,uint256)", +"80db79d9": "StructAndFor()", +"80dbb7d2": "RacingClubPresale()", +"80dbde63": "PI_EDIT_4()", +"80dcaf27": "getRefNumber()", +"80dcbff1": "getAdminArray()", +"80dce0b4": "getAwardTime()", +"80dceec4": "setHuntingPrice(uint256)", +"80ddcc62": "SUPPLY_HARD_CAP()", +"80ded586": "removeFromTokenHolders(address)", +"80dee9d1": "miningStorage()", +"80df2cee": "TeddyChain()", +"80df4123": "NucleusVisionTimeVestingTokensMinted(address,uint256,uint256,uint256,uint256)", +"80dfa34a": "saveBatch(string)", +"80dfb104": "setCoOwner1(address)", +"80dfee5c": "NewSale()", +"80e039f9": "rocketGetResourceValues(uint256)", +"80e0c053": "MassERC20Sender()", +"80e13b10": "CompanyTokenIssued(address,address,uint256,uint256)", +"80e15b56": "cancelCredit(address)", +"80e15f76": "setBuildPrice(uint256)", +"80e183a3": "CLASS_PLANT()", +"80e1b9c4": "finishBattle(uint256,address,address)", +"80e2517c": "TokensPerEther()", +"80e2653e": "setDougAddress(address)", +"80e2d53b": "rateWaitingEnd()", +"80e339fc": "balancewof()", +"80e37b5f": "maxIssuableNomins(address)", +"80e3f1ad": "toggleWhitelist(bool)", +"80e47e71": "maximumValueWithoutProofOfAddress()", +"80e52f31": "EtherCash1()", +"80e5d7b0": "Voted(uint256,uint256,uint256,bool,address)", +"80e5e069": "ITO_TOKENS()", +"80e64e8b": "buyBottle()", +"80e6bffb": "CalculateBankCredit()", +"80e74b04": "testControlUpdateLatestRevisionEnforceRevisions()", +"80e8b12a": "_createDungeon(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"80e9071b": "reclaim()", +"80e9a1da": "STATUS_LENT()", +"80e9e9e1": "getClaimIdsByTopic(uint256)", +"80e9f98c": "getRacer(uint32,uint256)", +"80ea8273": "SetBonus(uint256)", +"80eb1cbc": "monsterIdToIVs(uint256,uint256)", +"80eb6b7f": "LogRemTokenPairWhitelist(address,address)", +"80ebb08e": "updateResult()", +"80ebed20": "createBook(address,address,address,uint256,int8)", +"80ec35ff": "awardByRndNo(uint256)", +"80ec4a96": "CrowdsaleFinished(uint256)", +"80ede329": "getDocumentDetails(uint256)", +"80edef8e": "owner_address()", +"80ee9792": "_ethDeposit()", +"80ef353d": "tryClose(bytes32)", +"80efa4af": "extBuyTokens(address,uint256,uint256)", +"80f034b1": "getContractBytecode(string)", +"80f03fa6": "getTotalPets()", +"80f183ce": "visitCost()", +"80f20363": "lockToken(uint256)", +"80f29894": "getWeiForCent(uint256)", +"80f2fa03": "getSellPrice(address)", +"80f34c14": "ContortedCoin()", +"80f393c8": "ProofOfIdiot()", +"80f3f094": "setGGCAddress(address)", +"80f41e76": "calcMintFee(uint256)", +"80f4432a": "inception()", +"80f4531f": "closeTimerElapsed()", +"80f4ab5f": "seeMyNumbers()", +"80f4bcb8": "tokenTeamAllocated()", +"80f55605": "market()", +"80f5a37c": "Crowdsale(address,address,address,uint256,uint256)", +"80f5e0a1": "shouldBoost(bytes32)", +"80f6c383": "setshares(uint256,address)", +"80f6d782": "swapAddress()", +"80f7d0ab": "storeReading(uint256)", +"80f7e238": "ANIMETOKEN()", +"80f86009": "Initialize()", +"80f89a31": "ballotNames(uint32)", +"80f89bce": "distributeDRMK(address[],uint256,uint256)", +"80f8d688": "redTeamAddress()", +"80f8ea60": "Put_BRTH_GFT(address)", +"80fa272f": "TokenWithMint(string,string,uint8,uint256)", +"80fa4517": "completedTasksCount()", +"80fa7902": "getPlayersBattleStats(address)", +"80fa7942": "tokensForReserve()", +"80fa860f": "executeElectionMandate(uint256)", +"80fc16c8": "setAffiliateFee(uint256)", +"80fe4958": "createBetWithPayable(bytes32,bytes32,bytes16,bytes32,uint256)", +"80febdbd": "updateMe(string)", +"81001f3c": "collectFee(address[])", +"810164f7": "getTotalBPOfAddress(address,address)", +"81016509": "getBtcRequestHash(bytes,bytes,uint256)", +"8102387d": "burnRedRibbonCoin(uint256)", +"81030e35": "ALAP()", +"810405d6": "numOfPurchases()", +"81042183": "ExpeditingToken()", +"81045ead": "getIndex()", +"8105a6d7": "calculate_bond_token_to_bix_rate(uint256)", +"8105aa55": "grantAdvisorTokens(address)", +"81064e2d": "getCreditorAmounts()", +"8106d57a": "getCityPendingBuildings(uint256,uint256)", +"8107b269": "Novatore()", +"81081184": "bursarPayOutNetContractBalance(address)", +"8108592c": "calcKncStake(uint256)", +"81086763": "placeNewBid(uint256)", +"81086918": "delAcceptedToken(address)", +"8108e54c": "marketAllocation()", +"810a192b": "transferCollateral(uint256)", +"810a217f": "pValidationState()", +"810a3919": "hard_limit()", +"810a882f": "setConfigBytes(bytes32,bytes32)", +"810ac3ce": "IssueOffer(address)", +"810ba058": "Public_Sale_SUPPLY()", +"810bbec3": "claimHelper()", +"810be182": "_updateCountries(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"810c0af8": "depositTokenByAdmin(address,address,uint256)", +"810c547a": "_rebase(uint256)", +"810cbbd0": "bat_match(uint256[39])", +"810cf6cb": "MRazaAnisTestCoin()", +"810d54a0": "lockBalanceChanges()", +"810e4ff0": "cashOut(address,address,uint256)", +"810e78ab": "declareIcoFinished()", +"810e9720": "GlobalCoin()", +"81104666": "advisoryWithdraw()", +"8111e0ad": "updateMaxTxGasPrice(uint256)", +"8111ecef": "FinalizeStage()", +"8111f24e": "isFreezed(address)", +"81120dd7": "myLastRef()", +"8112821f": "EthVentures()", +"8113e285": "withdrawTokenPayment()", +"8115a2ac": "getOnMintTargetValue()", +"8115f52d": "Evacuated(address)", +"8116c063": "claimOwnersEarnings()", +"811743e7": "fighterIndexToOwner(uint256)", +"81183633": "setStandard(bytes32)", +"8118e0ae": "dtValidateWorldSnapshot(uint256)", +"81193a30": "returnRequestCancel(uint256)", +"81195993": "allocateEcoFundToken(address[],uint256[])", +"8119c065": "swap()", +"8119f4ae": "getRoc(uint256)", +"811a0a85": "saleComplete()", +"811aecf4": "finishPhase()", +"811b1268": "noteSale(address,uint256,uint256)", +"811bab32": "GenesisCallerAddress()", +"811c626d": "changeIcoRoundEnding(uint256)", +"811c66ac": "nameSuccessor(address)", +"811de206": "isConfirmedByOwners(uint256)", +"811e1468": "computeAccount(uint256)", +"811e4f71": "DisburseEarnings()", +"811e539c": "campaign()", +"811ea6de": "transferToken(address,address,uint256,bool)", +"811f273d": "hasThreeYearWithdraw()", +"811fe466": "beginTime_()", +"81207183": "deployGLX()", +"8121b0d4": "verifyStoredData(bytes32)", +"8121dbc1": "MyPizzaPieTokenPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"8121ddd7": "RATE_DAY_7()", +"81236e47": "setUserYan(address,uint32)", +"812403f6": "bonusPhaseThreeDeadline()", +"81240b9c": "subWithdrawFor(address,address)", +"8124bb0f": "continueExecution()", +"81252548": "getContractServerBlackWhiteListType(string)", +"81252680": "getBaseQuick(bytes32)", +"8125c102": "BountySent(bytes32)", +"8125c6fd": "_getDividendsBalance(address)", +"8125ceb2": "showMessage()", +"8125fc44": "thirdPreSaleEndDate()", +"81263fed": "getStrandCount()", +"81267bd0": "_transferMeme(address,address,uint256)", +"812699a9": "Quiricos()", +"81269a18": "voteBalance(address)", +"81269a56": "checkMintSolution(uint256,bytes32,bytes32,uint256)", +"8126c38a": "allPunksAssigned()", +"8126cb1e": "rejectRewards(uint256,string)", +"8126e4e3": "philanthropise(string)", +"81281be8": "placeBid(address,uint256,uint256,uint256)", +"81290a80": "AviciiCoin()", +"8129212e": "getCommonInitBlockNum()", +"8129519d": "setLoading(uint256)", +"8129aa75": "TransferFeeRateProposalAdded(uint256,address,uint256)", +"8129fc1c": "initialize()", +"812a4f47": "BeatTokenIcoPhase2Started()", +"812af8ec": "getAccountData()", +"812ba50c": "preEndBlock()", +"812c3251": "Escrow(address,address,uint256)", +"812c86e0": "updateTokenContract(address,string)", +"812cbf38": "sellFci(uint256)", +"812cddf2": "getSavedString()", +"812cf740": "ArrayPractice()", +"812d504d": "transferToOwner(address)", +"812d6c40": "changePercent(uint256)", +"812e1d1d": "APT(address)", +"812e6741": "Mountain(bytes32,uint256,uint256,uint256,address)", +"812ed5cc": "report(address,address,bytes)", +"812f55c3": "get10Ads(uint256)", +"812fd5d7": "payToProvider(uint256,address)", +"813051bc": "createGOP(address,string,uint256)", +"8130c9b2": "untrustedTokenNumerator(uint256)", +"8132581c": "amountRaisedInEth()", +"8132e223": "internalSafeTransferFrom(address,address,uint256,bytes)", +"81333d57": "LKB(uint256,string,string)", +"8134064b": "setMotherCount(uint32)", +"81350bd4": "releaseTimeTeamAdvisorsPartners()", +"8135e137": "getPresciption(int256)", +"8136c1b9": "registerUserOnToken(string)", +"8136f02d": "setAddressOfERC20OldToken(address,address)", +"8136fd26": "createJob(string,uint256,uint256,address)", +"81395866": "numberOfAdmins()", +"8139bc2f": "ecothereum()", +"813a573a": "CheckPurchaseCount(address,uint32)", +"813b024f": "addProductInUsd(uint256,uint256,bytes32)", +"813b65aa": "setNewCajutel(address)", +"813d13cb": "getBB(bytes32)", +"813d599f": "getValidatorAddress(int256)", +"813d6c9a": "bonusPercentage()", +"813d89e1": "artExplain()", +"813df488": "preMinedFund()", +"813e7847": "withdrawalNormal()", +"813e9aca": "init(address,uint256[],uint256,uint256,uint256,uint8)", +"813f4db4": "isStakingPeriod()", +"813f563a": "devsHolder()", +"813f5717": "LinkRevenue()", +"813faa53": "getVoteRulesOfProposalTransaction(uint256,uint256)", +"813fdec8": "getContestStatusForDate(uint32)", +"8140ce63": "kvtOwner()", +"8140d0dc": "setContact(string)", +"8141fd37": "tickRequiredLog()", +"8142453f": "_saveRequest(address,address,uint32)", +"8142a25a": "testAliceFooSend()", +"8142b8d7": "editGardener(uint256,uint256,uint256)", +"8143e3da": "allBonus(address,uint256)", +"8143eb2d": "gameOpened()", +"8143f8a8": "totalGas(bytes)", +"8144650a": "transferTokenTo(address,uint256)", +"814487c4": "addSuperReferrer(address,uint8)", +"8144ee2f": "adventureSettingContract()", +"8146f323": "isFinalised()", +"8147bcf7": "deletePlatform(bytes32)", +"8148d2fe": "getNodeId(bytes32,bytes32)", +"8149657b": "closeEthPool(uint256)", +"814971de": "issueReward(uint256,uint256,uint256[],uint256)", +"8149ea9b": "randomSkill()", +"814a78f4": "KM(uint256,string,string)", +"814ab9f1": "salesSupply()", +"814ae0ba": "gcf()", +"814b3fe0": "dividends(uint256)", +"814b53b0": "killCoin()", +"814c25fc": "setTokenInformation(bytes32,bytes32)", +"814c2aa1": "changeTotalExchange(uint256)", +"814e23c8": "calculatePayout(uint256,uint16)", +"814e3bd3": "ContribToken(uint256,string,string)", +"814e5c9b": "totalSaleAmount()", +"814e6d44": "_unpackIdValue(uint256)", +"814eba9e": "simPunitiveInterestRate(bytes)", +"814f737d": "phaseThreeEnd()", +"814f9201": "payUserIncomingTransactionCommission(address)", +"814fbd8f": "RefundBTC(string,uint256)", +"81508615": "getBeneficiaryDevelop()", +"81516c7b": "initialTIPsupply()", +"8152c7ed": "adminSetRandomInput(string)", +"81531c64": "Strike()", +"81547f25": "CONI()", +"8154b57c": "secondsAfter()", +"8154d4de": "setMarket(bytes32,bytes32)", +"81550287": "PRESALE_CLOSING_TIME()", +"81553709": "releaseEndTimeOfStage(address,uint256)", +"815639ea": "read_u64()", +"8156afdf": "Aletheia(address,address,address)", +"8157d4b5": "bindContract(address)", +"81580761": "getUniqueLineCount()", +"815847df": "_addBonusOfReferrer(address,uint256)", +"81584ff3": "CutieBitToken()", +"81587463": "sendTradeEvent(uint256[],address[])", +"81592aab": "instantUpdate()", +"81597d0c": "mintIcedToken(address,uint256)", +"815a4876": "setEthereumWallet(address)", +"815bc7a0": "vote_reward_pool_amount()", +"815c326d": "ProducerOperations()", +"815d1fe5": "RewardChannel(address,address,address)", +"815dcd36": "dailyAccounting()", +"815def1a": "changeAllocation(address,int256)", +"815eb7c1": "satoeContract()", +"815ec64a": "zReceiveFunds()", +"815f73f0": "m_walletAddress()", +"816036ae": "removeSmartContract(address)", +"8160b246": "BONUS_TIER3()", +"8160f0b5": "minimumQuorum()", +"81613a62": "LogPause(bytes32)", +"816163b1": "checkGameResult(bool)", +"81617f8f": "reLoadXaddr(uint256,address)", +"816194f8": "refreshVoteForAll()", +"81619954": "DAOFactory(address,address,address)", +"8161c5e5": "main_balance()", +"8161dfa6": "EmailSent(address,uint256,string,string)", +"8161f0e1": "execID()", +"816273f6": "computeAmountBonus(uint256)", +"8162de9c": "getCryptoAvatar(uint256)", +"8162f631": "LogFunderInitialized(address,address,string,uint256,uint256)", +"8163681e": "isValidSignature(address,bytes32,uint8,bytes32,bytes32)", +"816413f8": "transferPreSignedHashing(address,address,address,uint256,uint256,uint256,bytes)", +"81641ff7": "casinoBank(address)", +"81646be8": "setCloseTime(uint256,uint256)", +"8165354e": "setOracleRegistry(address)", +"8165913d": "withdrawEthBalance(address,bytes)", +"81671042": "setOptionLibrary(address)", +"81676ecd": "FGorToken()", +"8167d996": "deAuthorize(address)", +"8168b41e": "TokenTWL(uint256,string,string)", +"816a873f": "createMorePaymentChannelsInternal(uint256)", +"816b6574": "LogCrowdsaleFinalized(bool)", +"816bf490": "transferTokens(uint256,address[],address,address)", +"816bff5f": "CIFCoin()", +"816c4ad1": "baseIntCalc()", +"816c66c9": "updateRank(bytes32,bytes32,uint256,bytes32,uint256)", +"816c76e3": "GoozeToken(uint256,string,uint8,string)", +"816c7da4": "approveAllAndCall(address,bytes)", +"816ca77c": "CollateralSeized(address,uint256)", +"816d199c": "SIGMA_FTL_SPEED()", +"816d3da9": "purchaseAdmin()", +"816d3dc1": "get_info(address)", +"816dbae4": "monethaVault()", +"816dcd91": "updateBitComparisonMask(bytes32)", +"816e117c": "setMaxSize(uint256)", +"816e24b0": "setupDeposits()", +"816ed336": "emitFeeSet(uint256,address)", +"816f3438": "maxFoundationCapUSD()", +"816f3f4d": "madKing()", +"816fceb7": "MultiTransaction(address,address[],uint256[])", +"816ffbab": "Uint256Oracle(int256,uint256)", +"81702c34": "refund_me()", +"8170733d": "MyBitFoundation()", +"81710c78": "getMyPolicies()", +"8171362a": "votingByXid(uint256,bool)", +"81715d8c": "pIdIter_()", +"817189df": "setEarlyLimits(uint256,uint256,uint256)", +"817246cf": "setsalesdeadline(uint256)", +"817287d0": "isOwnner(address)", +"8173832a": "LogUnsortedOffer(uint256)", +"8173b813": "setNumCities(uint256,uint256)", +"8173e363": "hard_cap_wei()", +"817472c0": "TOKEN_INIT(bytes32,bytes32,bytes32)", +"8174b6d7": "ownerCutPercentage()", +"81751312": "getAllCardsModifierPrimaryVal()", +"81758fb4": "bohwa()", +"8176419f": "SCCC(uint256,string,string)", +"81767aed": "getIdentifiers(address)", +"817725aa": "disableChangesMultitoken(uint256)", +"81776ba4": "backup_refund(uint256,uint256)", +"81777b78": "Take(bytes)", +"8177ffae": "PresaleContract(address)", +"81788e2b": "addAllowedAddress(address)", +"8178a943": "add_scribe(address)", +"8178ab99": "_transferFromSenderPaysFee_byProxy(address,address,address,uint256)", +"8179c2b3": "Result(uint256,address,uint256)", +"817ad683": "XHO()", +"817afff8": "_updateWithdrawCountry(uint256,uint256,uint256,uint256)", +"817b106e": "setChangeIdentityNarcoRespect(uint256)", +"817b1cd2": "totalStaked()", +"817b90fe": "getCategoryId()", +"817c1e52": "startICO(uint256,uint256,uint256,uint8)", +"817c7483": "settleLeague()", +"817c8966": "getLevel(address)", +"817d62a4": "shouldGetHighFive()", +"817e8332": "STAKE_BONUS_RATIO()", +"817e9d31": "setFactor(uint256)", +"817eca0c": "ConstructByEth(uint256,uint256)", +"817edbd2": "set(uint32,uint8)", +"817f0023": "recievePayment(address)", +"817f688f": "BLAAICOIN()", +"81807a07": "calculateBonusAmount(uint256)", +"818097c5": "getVotesForCandidate(address)", +"8180f2fc": "approve(address,uint256,bytes32)", +"81813963": "claimEDEX(address)", +"8181b029": "confirmImplChange(bytes32)", +"818211f8": "getProposalsNum(address,uint256)", +"8182173c": "PricesUpdated(address,uint256,uint256)", +"81824d53": "setData_1(uint256)", +"8182c6a7": "IssueToken(string,string)", +"81830593": "adminAddr()", +"818438ca": "getWizzPandaQuotaOf(uint256)", +"8185402b": "buyAllAmount(address,uint256,address,uint256)", +"8185b8e9": "getWeiPerCent()", +"81862f25": "newThreadComment(bytes32,bytes32,string)", +"81884756": "citationCount()", +"8188f71c": "holders()", +"81895b73": "registry(bytes32,address,address)", +"818a19b5": "FeeAddr1()", +"818a4b48": "preSaleMinAmount()", +"818ad300": "TeamVesting(address,uint256,uint256)", +"818b4564": "DefineType(address,uint32,string)", +"818c2858": "HPCToken(uint256,string,string)", +"818c606f": "NewAuction(address,uint256,uint256,uint256,uint64,uint256)", +"818d4b5d": "owns(address,uint256)", +"818e8cfa": "setLogoURL(string)", +"818f7d01": "checkTransferFunctionPrivateSale(address,address,uint256)", +"818f92c7": "createPurchaseOrder(address,uint256,uint256,bytes32)", +"818fd7a1": "beforeBuy()", +"81904676": "lastDistributedAmount()", +"8190cf07": "setRate_ETHUSD(uint256)", +"81915a67": "EventSetContract(address,string,address)", +"8191745f": "Description()", +"8191ab45": "setUsdConversionRate(uint256)", +"8191b9a2": "__tokenAndWalletBalancesMatch__(address,address,address)", +"8191d30f": "crossForking()", +"81923240": "mine(address)", +"8192433f": "receiveTokenDeposit(address,address,uint256)", +"8193327b": "test1Bob()", +"8193844b": "linkIssuerName(bytes32)", +"819384a2": "payoutToReferrer()", +"8194aff3": "Matchpool()", +"8195031f": "Bitsta()", +"819512cd": "buyTokens(address,uint256,address)", +"81961946": "NETR()", +"8196410b": "GustavoCoinCrowdsale(uint256,uint256,uint256,address)", +"8196b8c7": "getValueOrZero(bytes32)", +"81980c27": "SOLOBOT()", +"81981f7c": "getMyFranklin()", +"819891ac": "_newGroup(address,uint256)", +"8198c2bd": "ICCCOIN()", +"8198edbf": "getFeeRate(address)", +"819912a2": "setGame(address)", +"819927e7": "transferUserTokensTo(address,address,uint256)", +"819abe80": "giveFreeUnit(address,uint16)", +"819ad6d6": "EstimatedICOBonusAmount()", +"819b0293": "validPosition(uint256,uint256,address,uint256)", +"819b25ba": "reserve(uint256)", +"819b9773": "PaymentAvailable(address,uint256)", +"819c5773": "withdrawForMany(address[])", +"819cfdf1": "YFTToken(uint256,string,string)", +"819e3903": "LogTrade(uint256,address,uint256,address)", +"819ee03a": "InterfaceId_ERC721()", +"819f2494": "createOffer(uint64,uint256)", +"819f255a": "is_passcode_correct(uint256,bytes32)", +"819f5e24": "burnAndFinish()", +"819f8927": "setMilestonesList(uint256[],uint256[],uint256[])", +"81a00361": "YONDcoin()", +"81a03133": "authorizePayment(uint256)", +"81a084fd": "remainingGasRefundPool()", +"81a09bf0": "mergeMedal(uint256,uint256)", +"81a1384b": "LockedVotingTokens()", +"81a1fa02": "itemsCounts()", +"81a22b41": "PaymentsProcessed(address,uint256,uint256)", +"81a22bee": "reservePart()", +"81a238b5": "thirdWavePrice()", +"81a2568d": "setXToken(address)", +"81a2824f": "getUserBet()", +"81a28c28": "isSecured()", +"81a33a6f": "bytesToUInt(bytes32)", +"81a3b17f": "removeFace()", +"81a46662": "rolloverPercent()", +"81a4af15": "rewardTokens(address,uint256)", +"81a5ad6d": "YamatoCoinCrowdSale()", +"81a5e88b": "ICOCompleted(uint256)", +"81a60c0d": "getResults(uint256)", +"81a73ad5": "getTokenSymbol(address)", +"81a752ef": "removeSdaContract()", +"81a7a503": "ActiveProposalNum()", +"81a7ac54": "MAX_PERCENT_OF_SALE()", +"81a8e78a": "getGalaxies()", +"81a955b0": "editInfo(uint256,bytes)", +"81aa5067": "addLockedAccount(address,uint256,uint256)", +"81aa8a4b": "pre_PRICE()", +"81abb800": "lengthOfKeys(uint256,uint256)", +"81ac9b93": "AuctionCancelled(address,uint256,address)", +"81accd0b": "create(bytes1,bytes32,bytes32)", +"81add559": "partners()", +"81ade307": "query(string,string)", +"81ae20b2": "setInvestorsBatchSize(uint256)", +"81aea668": "atNow()", +"81aee4f4": "getNoteDesignatedReport()", +"81af0750": "Simt()", +"81af8949": "getPackBuy(address,address,uint256)", +"81af95fc": "startAuction(uint256,uint256,uint256,uint256,address)", +"81afc50d": "delegateCustodian(address,address)", +"81aff6ec": "get_presale_arbits_sold(address)", +"81b074ab": "user_on_freeze()", +"81b1c6bb": "getWinLoseAmountByBettingIdInGamblingParty(uint256,uint256)", +"81b23042": "burnMonster(uint64)", +"81b2d07b": "showBalance()", +"81b2dad9": "setByeSayer(address,bool)", +"81b3171c": "extGoalReached()", +"81b31cec": "setNextCommonTTWTokenId2(uint64)", +"81b3ea13": "getResponseError(uint256)", +"81b54498": "seedStartTime()", +"81b69494": "fee_ratio()", +"81b72d88": "startRequest_callback()", +"81b736e9": "createChild(uint256,address)", +"81b7c6e7": "stop_it()", +"81b7f157": "_updateSpendAvailable()", +"81b890fc": "setName(uint256,bytes16)", +"81b93757": "ADEVA()", +"81baf3ab": "sendTokens(address[],uint256[],address)", +"81baf55e": "processBuyRequest(string,address,uint256,uint256)", +"81baf820": "BlockScheduler(address)", +"81bb1277": "_calculatePointsAndRewards()", +"81bb2b20": "payFee(bytes32,uint256)", +"81bb59bf": "goodsNotOK(uint256)", +"81bb73af": "signArchive(bytes32,string)", +"81bb9470": "DNCEQUITY()", +"81bc3657": "migrateSinglePlanet(uint256,string,uint256,uint32,string,uint32,uint8,string,address)", +"81bc50ef": "getBUA(bytes32,uint256)", +"81bc8742": "BCToken(uint256,string,string)", +"81bd24d1": "revertTest()", +"81bd66fe": "upgradeMeAdmin(address)", +"81bdc78d": "getProposalAmount(uint16,uint16)", +"81bf1cff": "ThailandVsMyanmar()", +"81c0ddc3": "villageinfo(uint256)", +"81c1346d": "setFundsCreditDaoAddress(address)", +"81c2d4b6": "freeToken()", +"81c2d875": "getConsensusRules()", +"81c385b5": "safeWithdrawEther()", +"81c405c6": "registerCustomer(address,address,bytes32,uint256)", +"81c485e7": "getDiscipleSale(uint256)", +"81c4e1c8": "User(address,address,address)", +"81c56dfb": "d27d7bad()", +"81c59c8d": "getStrategyTokenCount(uint256)", +"81c5b206": "addMeToGame(uint256)", +"81c648e2": "betYours()", +"81c64ea2": "SixPlayerRoulette()", +"81c70870": "ClientUpdated(address,address)", +"81c79fd5": "transferMerchantProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"81c7ae3b": "miningEveryDay()", +"81c8149d": "timeOfLastProof()", +"81c81cdc": "setContractStatus(address,bool)", +"81c8b563": "coinLockRemove(address)", +"81c92486": "ProcessRooms()", +"81c9786c": "administratorsLength()", +"81ca3ea1": "hasEitherAttribute(address,bytes32,bytes32)", +"81cb79ca": "createEmptyTrack(uint256)", +"81cbeaf0": "getValidated(address,address,uint256)", +"81cc49dd": "secondLoos()", +"81ccb678": "Confiscate(address,uint256)", +"81cd2ffb": "ConversionFeeUpdate(uint32,uint32)", +"81cd30a8": "round_c_begin_date()", +"81cd4570": "Moneytoken()", +"81cd5eec": "bonusPot()", +"81cd8194": "transferPrice()", +"81cd872a": "deals(bytes32)", +"81cda317": "MINTING_HARDCAP()", +"81cde1a9": "GOOD_ERC20()", +"81ce7184": "TestText()", +"81cebf7e": "vestingPaid()", +"81cedafc": "Nodalblock()", +"81cf7fef": "registerSmartID(string,string,string,bool,bool)", +"81d01ed3": "p2()", +"81d12c58": "requests(uint256)", +"81d136cb": "presaleAllocation()", +"81d16e0d": "_isDiamondVerified(string)", +"81d2c871": "SetMinFee(uint256)", +"81d2fd9c": "setFaucetAmount(uint256)", +"81d36f4e": "KEVINTOKEN()", +"81d38ada": "Remove_member(address,address)", +"81d38f2d": "SheetMusic(address)", +"81d3c435": "setAddresses(address)", +"81d434e9": "transferToICAP(string,uint256)", +"81d44053": "reading_length()", +"81d45a5c": "isPreICOPublicClosed()", +"81d5e753": "CuratedWithWarnings(address[],address,address[],address[])", +"81d693be": "claimDay(uint16)", +"81d6c866": "harvestabledivs()", +"81d77862": "newMostInviter_()", +"81d92ed4": "shp()", +"81d96005": "sigDestinationTransfer()", +"81d961e4": "eligible(uint256,uint256)", +"81d97051": "setOwnerOne(address)", +"81d9c5e4": "handleIncomingPayment(address)", +"81dafe0e": "calculateDuration(uint256)", +"81db6c28": "redeemVoucher(uint256,address,address[],uint256)", +"81dc66f4": "checkTankAuction(uint256)", +"81dca05c": "setAuthorization(address,address,bool)", +"81dd70db": "kickoffQuorumPercent()", +"81de10e2": "getContentAt(uint256)", +"81ded5b8": "numOfConfirmationNeeded()", +"81df464f": "totalRaisedIco()", +"81df893c": "withdrawMon(uint64)", +"81e1ccba": "stakingPercentage()", +"81e2ef3a": "ReceivedETH(address,uint256,uint256)", +"81e529cd": "setOwnerFreeDay(uint256)", +"81e559ae": "clientKeys(uint256,uint256)", +"81e69eff": "publishMetaData(bytes32)", +"81e6c686": "returnMaxGoal(uint256)", +"81e6e083": "getLifetime()", +"81e75dd0": "testPublicBuy()", +"81e7645f": "findFigures(uint256,uint256)", +"81e77878": "getChooses()", +"81e7a97e": "killMonster(uint16,uint8)", +"81e7e20e": "user(address)", +"81e7e329": "test_6_accessRestriction_removeMember_shouldThrow()", +"81e83991": "howMuchInEscrow()", +"81e8927b": "getValidationsCount()", +"81e8a1f7": "newRandomByte(bytes)", +"81e9abef": "_updateEarnedBy(uint256,uint256)", +"81ea4408": "getCodeHash(address)", +"81ea6834": "getEvilMortyAddress()", +"81eac2ee": "checkClientFunds(address)", +"81eaf99b": "lockSupply()", +"81eb3e01": "setValueStep1(uint256)", +"81ebd8de": "setDeveloperStatus(address,address,bool)", +"81ebdeea": "testThrowCreateWithNonceRetracted()", +"81ec792d": "getPackSummary(uint256)", +"81ed8680": "pingTimestamp()", +"81edaae4": "serviceFee(address,uint256)", +"81edc308": "insertAndApprove(uint256,address[],uint256[])", +"81ef1b18": "startFundraising()", +"81ef93ae": "lastFueledFundingID()", +"81efc01d": "withdrawHouseStake(uint256)", +"81f0c440": "MikeChanCoin()", +"81f1a41b": "CROWD_SUPPLY()", +"81f1aad7": "setCancelApproveFee(uint256)", +"81f1d75c": "updateUserEmail(address,bytes32)", +"81f1f92a": "withdrawSoftwareProductDevelopment()", +"81f1fa93": "RKCAcquired(address,uint256,uint256)", +"81f2a3f1": "GetDownTickPrice(uint256)", +"81f2d44c": "getStarIdAtPosition(uint8,uint8,uint16)", +"81f2d4ee": "updatePartner2_will(string)", +"81f3e897": "getSettingData(uint256)", +"81f4f9bf": "ticketHolder()", +"81f59f51": "shareService(bytes32,address)", +"81f5f75c": "getApprovedProxies()", +"81f65883": "CompetitionStore()", +"81f6bf7d": "deleteCertificate(string)", +"81f6c7e5": "_release(uint256)", +"81f799e2": "reveal_end_time()", +"81f86241": "ExGirlfriendCoin()", +"81f8658a": "DATE_OPEN_ON_FLOOR()", +"81f87d6d": "deleteCandidateCache(address)", +"81f8a6f7": "checkTokenSupported(address)", +"81f8b722": "LogIncomeAllocation(address,uint256)", +"81f91c4a": "transfer(address,bytes32[8])", +"81fab567": "maxPayments()", +"81fb1fb4": "participants(uint256,uint256)", +"81fb2585": "isOfficial(uint16)", +"81fb3803": "einzahlen()", +"81fbc084": "mul27(uint256,uint256)", +"81fbf0a5": "totSupply()", +"81fbffe1": "getGiftoAddress()", +"81fc4d90": "increaseLockAmount(bytes32,uint256)", +"81fc7f2b": "accountFrozenStatus(address)", +"81fcef3c": "bitcoinContract()", +"81fcfbcc": "allocateBountyTokens()", +"81fd552f": "storageOwner()", +"81fd63c2": "kanaabbcwalletcoin()", +"81fdbeff": "TransferCoinsFrom(address,address,uint256)", +"81fe5786": "max(int256,int256)", +"81fedc73": "Casinowo(uint256,string,uint8,string)", +"81feed27": "awardName(uint8)", +"81ff01f7": "REPOPCore()", +"81ff4d0b": "TEAM_TOKENS()", +"81ffdfab": "getTokenAmountForCampaign(bytes32)", +"82004053": "ownerSetZlotsAddress(address)", +"8200a57f": "changeOwner(address,address,bool,bytes)", +"8201ff14": "setNewTerrain(uint256,uint256,bytes32)", +"820203a3": "ztx()", +"82023707": "updateSecondUnionIds(bytes32,bytes32)", +"82024a14": "PromissoryToken(address,uint256)", +"820267ff": "diminishPool(uint256)", +"82027b6d": "isAllowed(bytes32,address)", +"820333a2": "seeAddress()", +"8203e7f3": "justSendDonations()", +"8203f5fe": "initContract()", +"82043443": "transfer_(uint256,address,address,uint256)", +"820447fc": "TrimpoToken(uint256,string,string,address,address,address)", +"8204ecdd": "getFee(bytes)", +"820537b7": "getDaoists()", +"8205e8e7": "setPayment(uint256,uint256,bool,address)", +"82067cc0": "pauseRoundB()", +"8206ba89": "MAX_STAGE_2_LIMIT()", +"82076979": "TeamTokenHolder(address,address,address)", +"820776de": "DivsToRefundpot()", +"8207b07d": "lastPurchasePrice()", +"8208921d": "getWalletFor(address)", +"8208df23": "stack(address,uint256,uint256)", +"820935dd": "HDILToken()", +"82094fa4": "setAddressAdmin(address)", +"8209b38a": "Freecoins24()", +"8209d121": "a_viewSellOffersAtExchangeMacroansy(address,bool)", +"820a5f50": "fundedAmount()", +"820b9f1e": "kncPerETHRate()", +"820bec9d": "receivedETH()", +"820c05db": "FPINCOIN(uint256,string,string)", +"820c1dd0": "pollBurnQtyMax()", +"820c59bb": "GetIsPauded()", +"820c7468": "isVendorOf(address,address)", +"820c815e": "EGGS_TO_HATCH_1DINO()", +"820cfa06": "LogUserRemoved(address)", +"820dc540": "lockBalanceIndividual(address,uint256)", +"820e0d1f": "getChallenger(bytes32)", +"820e5e0b": "DividendRecycled(address,uint256,uint256,uint256,uint256)", +"820e79ed": "cstBalanceLimit()", +"820e93f5": "email()", +"820ecdaf": "iou_purchased(address)", +"820f52bc": "validPeriods()", +"820f9b85": "changeBetRange(uint256)", +"82100be6": "getWinningPayoutDistributionHash()", +"82100e3f": "deploymentBlock()", +"82104786": "Profit1000()", +"8210f13b": "BatchCancelSales(uint256[])", +"82123075": "safeExit()", +"82123cd2": "prizeReferee()", +"8213dafc": "setupAirDrop(bool,uint256,uint256)", +"82142370": "preICO(address)", +"82147bb4": "getGuardianNum()", +"8214fe03": "setMetadataChannels(string,string)", +"82154075": "Rentable()", +"8215c35d": "bincentiveErrand()", +"821648f4": "accessHolder(address)", +"8216ed6c": "getCompte_22()", +"82173d11": "KentKoinToken()", +"82189551": "buy(uint256,bytes)", +"8218e540": "insertHash(uint16,uint8,uint8,string)", +"821919fd": "getPetCanPresellCount()", +"821b771f": "targetBondingRate()", +"821b98f3": "closeTheoreticalClosedAuction(address,address,uint256)", +"821bee73": "vestings(uint256)", +"821c9a57": "test_testableStandardCampaignRefund()", +"821d7356": "setMainnetLocked(bool)", +"821e2491": "MyBetting()", +"821e3759": "payDivsValue(uint256)", +"821e4496": "isVerifiedCode(address,bytes32)", +"821e9169": "testFailControllerChargeMoreThanApproved()", +"821f830f": "addPack(address)", +"82202a15": "fetchCurrentSnapshotBlockIndex()", +"8220e945": "FactoryChangedEvent(address)", +"8221ac6f": "_createHolderId(address)", +"822221a6": "setContractToken(address,address)", +"82222674": "changeEndBlock(uint256)", +"822296d4": "isList()", +"8222a5ce": "insurance_Token()", +"8222aa1e": "settle(address,uint64,uint64,bytes)", +"8222b7e9": "getBonusPercentage()", +"8223188c": "Rose43()", +"82233b7a": "returnHostCut(uint256)", +"8224b76b": "StartOK()", +"8224ca2b": "SaleEDUSupply()", +"82251512": "divCeil(uint256,uint256)", +"8225172f": "getVowInfo(bytes32)", +"82251b99": "DRONECOIN()", +"8225757b": "getAddressByUserId(uint256)", +"822785e4": "_setTokenDescription(address,uint256,string)", +"82281104": "incise(uint256)", +"82286755": "MyRefundableCrowdsale(uint256)", +"82288e89": "setAccountIsNotFrozen(address,bool)", +"8229268b": "StageThreeDisable()", +"822942aa": "placeDeal(bytes16,address,address,uint256)", +"822a46ae": "setTiimPrivateSaleAddress(address)", +"822b08d0": "grantManagerPermission(address,string)", +"822b0be3": "teamTimeLock1()", +"822b1747": "_getEpicPlusRarity(uint32)", +"822bd0dd": "BOT_ELEMENT_3()", +"822c7671": "testControllerShouldBeSet()", +"822cba69": "setUint64(uint64)", +"822d487d": "getBrands()", +"822d9b4e": "onlyOwnerGetBountyWallet()", +"822daf60": "timeFactor()", +"822e1506": "_bonusRatio2()", +"822e57f1": "depositHelper(uint256)", +"822ee26c": "canMovetoken()", +"822f31e2": "AlexCoin()", +"822f7eb4": "setFeeReceAccount(address)", +"823113c7": "thresholdsByState(uint256)", +"82311e25": "checkStage1Over()", +"823126d5": "_createToken(address,uint256)", +"8231ee98": "lastTimeGen0()", +"823213ef": "removeExclusiveRate(address)", +"823287b7": "chargeQuarterlyRate(bytes32,address)", +"8232e09e": "DeleteUser(address,address)", +"82330505": "setCommissionPoints(uint256,int256)", +"823374e3": "changeDedicatedProxy(address)", +"8233fbcb": "getTotalProfit(address)", +"82348bab": "setMinSlippageFactor(uint256)", +"823506af": "getData_29()", +"82351b43": "getLinearRelease()", +"82357105": "bl()", +"8236342c": "hashToPoint(bytes32)", +"82367b2d": "updatePrice(uint256,uint256)", +"8237ab8d": "IsSeedMember(address)", +"8237bbf0": "min_shares_to_sell()", +"82381c96": "WatchCurrentMultiplier()", +"8238520f": "getParentBranch()", +"8238b968": "BeatOrgTokenMainSale(address)", +"8238cc8f": "getFIRST_STEP_MULTIPLIER()", +"823914d9": "multisigETH()", +"82396bc6": "lnLimited(int128,int256)", +"82396f60": "getTokensInAction()", +"8239773a": "NePay()", +"8239b1e7": "getSequenceId(uint256)", +"8239b29d": "periodITO_hardCapInUSD()", +"823ab43b": "returnedTo(address)", +"823ac373": "verify(bytes32,bytes,address)", +"823b5e9f": "getAuditTimeoutInBlocks()", +"823b7475": "UpgradeAgentSet(address,address)", +"823ba0b8": "burnFormula()", +"823ba381": "InvestClose(uint256,uint256,uint256)", +"823bce43": "zasxzasx()", +"823c73ec": "MarginToken()", +"823c82ca": "FREEZE_PERIOD()", +"823cfd70": "changeMinStakingTime(uint256)", +"823e1832": "ChangeClientCategory(address,uint256)", +"823e569e": "controlWallet()", +"823e6e79": "validateBalance(address)", +"823edd48": "getComponentId(uint256,uint256)", +"823f57ca": "withdrawFromAmt()", +"82401f06": "transactionSwitch(bool)", +"82402743": "createPromoNarco(string,string,address)", +"8240ae4b": "challengeReparameterization(bytes32)", +"82419e92": "numberToString(uint256,uint256)", +"8242216d": "jackpotOfHouseEdge()", +"82425d7c": "hasNoBids()", +"82428323": "updatePeriodically(uint256)", +"82430c07": "_sendOwnership(address,address,uint256)", +"824338bd": "founderAllocation()", +"8243a036": "presaleFemaleTokensLimit()", +"8243fd61": "addMilestone(uint256,uint256,uint256,uint256,string)", +"8244208c": "FrescoToken()", +"8244b8c8": "findEndpointByAddress(int256,address,address)", +"8244ee58": "Amberella()", +"824563f6": "mintingContractAddress()", +"82457d53": "periodTable(uint256)", +"82474b1b": "teamName()", +"8248159e": "registerApprove(bytes32,uint8,bytes32,bytes32)", +"82484a36": "vestingToken(address)", +"82484c0b": "BetstreakICO()", +"824891f8": "changeMinimumCap(uint256)", +"82489311": "_buyNationInternal(uint8,uint256)", +"8248e722": "updateConfig(uint256,uint256)", +"824916b6": "playersAmounts()", +"82495626": "getVoteAccount(uint256,uint256,uint256)", +"824989c3": "changeLifetime(uint256)", +"824a5166": "ChannelCloseRequested(address,uint256)", +"824be3c7": "TheRichestWins()", +"824d1b4b": "preICOStartDate()", +"824d5603": "getIndex(uint16,uint16)", +"824d84d5": "createVestingContractWithFloatingPercent(address,uint256,uint256,address,uint256[])", +"824dbc9a": "changeMembership(address,uint256,bool,string)", +"824e5ebf": "distributeETHOS(address[],uint256)", +"824eddd9": "removeSupportedToken(address,address)", +"824eec3b": "editionOfTokenId(uint256)", +"824f0f7e": "tittyContractAddress()", +"824f2f1f": "globalConstraintsCount(address)", +"82507c5a": "Radix()", +"8250ea7d": "getReferralPool()", +"8250f7e5": "isInvestmentPermitted(address,uint256,uint256)", +"82518c2a": "exercisePut(uint256,uint256,uint256)", +"82520e07": "receiveFrom(address)", +"82528791": "setWallets(address,address,address,address,address)", +"8252ad9c": "totalAuction()", +"8252b2cf": "acceptCreatureOwnership()", +"8252e391": "transferInternal(address,address,uint256,bytes,bool,string)", +"825374ba": "buyATCToken()", +"8253adf1": "createBet(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", +"82544c1f": "GoWalletToken()", +"8256687c": "addClaim(bytes12,bytes12)", +"82568a24": "p_update_planetCryptoCoinAddress(address)", +"82576dd6": "Laundromat(uint256,uint256)", +"8257f610": "canPurchase(uint256)", +"8258cbbd": "getContractETH()", +"825918ee": "delgodaddress(address,address)", +"82594f09": "iMaliToken(address)", +"825993ab": "totalCouponsUSD()", +"8259c78c": "depositPpm()", +"825a229e": "setEditor(address)", +"825af86b": "processJackpots(bytes32)", +"825b8b42": "buy(uint16[])", +"825bdb74": "setSecondaryManager(address)", +"825c3e36": "closeGame(bytes32,uint8)", +"825d7034": "RiptoBuxToken()", +"825e04d3": "dfs()", +"825edfd3": "getClassMechValue(uint256)", +"825f5a93": "RoundDSold()", +"825f6552": "SVET()", +"82609d51": "failedDonations()", +"82611dfe": "setOption(string,uint256)", +"8261b6bf": "receiveTokenLoot(uint256[9],uint256,uint8,bytes32,bytes32)", +"8261c4c7": "MINERS_HOLDER()", +"8261cfe4": "travelTo(uint256,uint256)", +"8261eb1b": "frtToken()", +"82629384": "shareStoredTokens(address,uint256)", +"8262963b": "setInfo(string,uint256)", +"8262fc7d": "addrBalance(address)", +"8263a938": "getProposalLength()", +"8263e953": "_claimSocialNetworkIdentity(uint256,uint256,address,uint8,bytes32,bytes32)", +"826446fa": "parse2wei(uint256)", +"82645725": "Planetagro(address)", +"82648222": "retrieveWCT2()", +"8264fe98": "buyPunk(uint256)", +"8265d137": "checkRegistrationStatus(bytes32,address)", +"8265d577": "TestreplayAnser(uint256)", +"8265dbc1": "bonusAndBountyTokens()", +"8265fb13": "optionPoolMembersAmount()", +"82661dc4": "splitDAO(uint256,address)", +"826679a1": "getFundSPBalance()", +"82672304": "GeneratePublicKey(string,string)", +"82672482": "vestingRegistered()", +"826776fa": "claimTeamTokens(address,uint256)", +"8267a9ee": "deleteIntValue(bytes32)", +"82688f14": "bn128_multiply(uint256[3])", +"8268efcd": "RunningAuctionsEvent(address,uint256,uint256,uint256)", +"82692679": "doSomething()", +"82699367": "CicadaToken()", +"8269cf4d": "seo(uint256)", +"8269d3c0": "buyTokensT4T(address)", +"8269df9b": "getLastCategory()", +"8269ee3d": "Issued(address,uint256,uint256)", +"826a483f": "_emitHashSet(address,bytes32,bytes32)", +"826a49c9": "removeGameInfoFromArray(uint256)", +"826c10d9": "exhaustBattle(uint256)", +"826c2447": "PGDToken()", +"826c69b8": "participantBalance(address)", +"826c6f73": "addServer(string,uint256)", +"826cc57a": "referral_address()", +"826d3379": "tierPrice(uint256)", +"826db6c8": "SLFYCoin()", +"826e9def": "initPresaleTokenVault(address[],uint256[])", +"826efb6d": "payBonus(address[])", +"826f57a1": "endBetting()", +"826f8a00": "createOrder(string,string,string,string,string,string)", +"827037d6": "modCEOAddress(address)", +"827037db": "icoStart()", +"8270c41e": "setPriceToken(uint256)", +"82712aeb": "purchaseWolkEstimate(uint256,address)", +"827147ce": "returnString(string)", +"8271bd99": "payoutAmount(address)", +"8271bedc": "getUserBetsLength(uint256)", +"8272d083": "isSupported(address,bool)", +"82731247": "isB(address)", +"8273a411": "allBalancesOf(address)", +"82744368": "minimumEtherAmount()", +"82757f99": "withdrawTeamPot()", +"82760c88": "GoGlobals()", +"82766b1b": "setAmount(address[],uint256[])", +"82768708": "weiMinimumGoal()", +"8276bd19": "PROPOSED_STATUS()", +"8276ccf2": "setHeroName(uint256,string)", +"82771c8e": "isSane()", +"82771ff4": "endPlaceOrder(uint256)", +"82776521": "strConcats(string,string)", +"8278337a": "writeAttributeFor(bytes32)", +"8278fcea": "AirdropReward()", +"82790c19": "SideBridge(uint256,address[],uint256)", +"82792ce8": "getInsideCallSender()", +"82797bea": "Preesh()", +"8279c7db": "setReceiverAddress(address)", +"8279ea54": "change_bounty_manager(address)", +"827aeb16": "_changeTittyPrice(uint256,uint256)", +"827bc64b": "setLeftoverTokensBuffer(uint256)", +"827bfbdf": "setLocation(string)", +"827c049e": "emission()", +"827c1e41": "getTittyByWpId(address,uint256)", +"827cc452": "withDrawMoney(uint256)", +"827d084a": "getActiveBusinessesPerCity(uint256)", +"827d7ba9": "Fosha(address)", +"827e4cf1": "manuallySetNumRewardsAvailableForChildAddress(address,address,uint256)", +"827ef325": "_parseMsgData(bytes)", +"827ef4c7": "m_fundsAddress()", +"827f143e": "setPresentMoney(uint256)", +"827f32c0": "generateTokens(address,uint256)", +"827fc57c": "ChickenFarmer()", +"827ffcea": "horas()", +"8280114b": "addressOfERC20Token()", +"828033da": "getFlag(uint256,string,string)", +"82803c22": "sell_tokens(uint256)", +"8280b498": "setFrozen(address,bool,uint256)", +"82812aed": "BuyPriceSet(uint256)", +"828183bc": "getSwapInfo(uint256,address,address,address)", +"8281da38": "refundBet(address,bytes32)", +"8281feaa": "QuestionIs(string,string)", +"828282e9": "bonusRates(uint256)", +"8282e1e4": "SEPA()", +"828363b4": "transferAdviser(address[],uint256[])", +"828375e8": "computeTokensWithBonus(uint256)", +"82838c76": "subTotalSupply(uint256)", +"8284f2a7": "proposeGame(address)", +"82857a03": "approveAndCallWithSender(address,uint256,bytes4,bytes)", +"8285d272": "GOAL_REACHED_CRITERION()", +"82862275": "getDeadline(uint256)", +"82872491": "setCaps(uint256,uint256,uint256,uint256)", +"8287ccb4": "onDeposit(uint256)", +"8287d6ce": "_createDeposit(address,uint256,bool)", +"828806cd": "submitTransactionWithSignatures(address,uint256,uint8[],bytes32[],bytes32[])", +"8288196d": "THANKSTEST1()", +"8288edd0": "nonTransferrableBalances(address,address)", +"828909bd": "getIntValue()", +"82892dd9": "blockMember(address)", +"828a33b9": "FreeDiceCoin()", +"828ae96d": "cdc()", +"828c06cd": "expLimited(int256,int256)", +"828ca03c": "getTaskListSize()", +"828d671c": "dyn_sig()", +"828dfbca": "user_acq_address()", +"828eab0e": "defaultResolver()", +"828f1b42": "buyObject(address)", +"828f4057": "numberofGamePlay()", +"828f5fba": "air2(uint256,uint256,uint256)", +"828f717c": "fixPlayerID(uint256,uint256)", +"828f8581": "tokenTransferFunctionIdentifierMap(bytes32)", +"8290d1e0": "StandardTokenDeployable(string,string,uint256,uint256,address)", +"8290fe25": "finalizeExits(uint16)", +"8291286c": "contractId()", +"82914e5d": "getObjectData(bytes32[],uint8[])", +"82916381": "execute(address,uint256,uint256,bytes)", +"82917320": "increaseLockedBalance(address,address,uint256)", +"8293779c": "isOps(address,address)", +"82939b27": "getPreSaleData()", +"8293a114": "unbanAddress(address)", +"8294a796": "WelfareHandout(address,uint256,uint256,uint256,uint256)", +"829534d7": "m_pendingIndex()", +"8295a9ba": "checkDupe(string)", +"829644a6": "freelanceReinvest(address)", +"82964696": "ZSYCoin(uint256,string,string)", +"8297b90c": "PRESALE_LENGTH()", +"8297d46d": "BTL_ATHENIAN()", +"8298c3b5": "itemVoteDn(address,uint256)", +"8298c5dc": "last_winner()", +"829923bf": "admin_setAdmin(address,bool)", +"829965cc": "epochCount()", +"82996d9f": "rent()", +"829981fb": "FinalToken(uint256,string,string)", +"829a34c6": "getUserInfo(bytes20)", +"829a92f4": "hardcapChanged(uint256[])", +"829b38f4": "getMaxEscrowAmount(uint256)", +"829bd99c": "balanceOfByLegacy(address)", +"829c3428": "startTransfer()", +"829c38e1": "claimSolve(uint256[],uint256,uint256,bool)", +"829c3dee": "createDebt(bytes32[8],bytes,uint256)", +"829e9ece": "deathData_v16()", +"829ebdcd": "upgradeFor(address,uint256)", +"829ed3a5": "ownerTokenTransfer(address,address,uint256)", +"829efd71": "TonhaoCoin()", +"829f0667": "verify_sk_knowledge(uint256[2],uint256[2])", +"82a0888b": "totalSaleWei()", +"82a09cc5": "TokenCreated(uint256,address,string)", +"82a123ea": "WhitelistUpdated(uint256,string,uint256)", +"82a147cd": "addYouCollectContract(address,bool)", +"82a18331": "MOONCOINCONTRACT()", +"82a1ce1b": "setSourceToken(address)", +"82a352e4": "firstStagePriceOfTokenInWei()", +"82a35706": "tokenSoldPreICO()", +"82a3e5df": "STATE_CLAIM_ENABLED()", +"82a3f98d": "VOTING_PERIOD_DURATION()", +"82a5285d": "getMinBetAmount()", +"82a60a59": "CollectibleIndex2()", +"82a62137": "activateAccount(address)", +"82a66d93": "earlySponsor()", +"82a7cf1e": "ownerOf(uint16)", +"82a86cda": "getRarePLATInfo(uint256)", +"82a90545": "funComputeRoundTime(uint256)", +"82ab890a": "update(uint256)", +"82ab8a82": "startDeal(bytes32,uint256)", +"82ac1d99": "getNodeValue(bytes32)", +"82acaa39": "getChildrenAgainstAnimalId(uint256)", +"82ad5ecf": "yeedToken()", +"82ad6f35": "refund(address,address,uint256)", +"82ade405": "forceChooseRandomWinner()", +"82ade466": "getWithdraw(address,address,uint32,bytes32[],uint256)", +"82ae2227": "createUser(uint32,uint64)", +"82af3526": "addGift(address,uint16)", +"82afd23b": "isActive(uint256)", +"82b00403": "finalFundGoalReached()", +"82b022e0": "set_species(uint256)", +"82b0444e": "CityMayor()", +"82b0627c": "changeFundingTime(uint256)", +"82b0862f": "addBps(uint256,int256)", +"82b1ad50": "totalPrize()", +"82b1b4f3": "WithdrawToAdmin(uint256)", +"82b1b617": "ViewSellOrder(address)", +"82b1fb0d": "setGlobalMultisigWallet(address)", +"82b2a559": "buy(uint256,uint256,address,address)", +"82b2e257": "getTokenBalance()", +"82b2f95f": "DEVELOPER1()", +"82b49248": "BlockOne()", +"82b57b96": "MONUMENT_UN_FEE()", +"82b58599": "WeiHash(address)", +"82b61a3e": "Rectangle(address)", +"82b68f4f": "actionVotedRate()", +"82b74b89": "lockTransfers()", +"82b7b500": "find(string)", +"82b7fa4e": "cancelGladiatorBattle(uint256,bytes32)", +"82ba614f": "setRound(uint256,uint256)", +"82bb326b": "isGoldMigrated(address)", +"82bbcc2c": "removeIdArrayItem(address,uint256[],string,uint256)", +"82bbd1fe": "setlastprize()", +"82bbdbec": "nameAvailable(string)", +"82bbe9cc": "getGameFee(uint256)", +"82bc07e6": "lastRound()", +"82bcd463": "DAKUToken()", +"82bcef79": "increaseAllowanceProxy(address,address,uint256)", +"82bd5a71": "warriorToApproved(uint256)", +"82be0ccd": "distributeTokensToApprovedUsers()", +"82be415d": "BonusDealer()", +"82bf6464": "DAOrewardAccount()", +"82bf9a75": "setPip(address)", +"82bfa9f2": "upgradeStorage(address)", +"82bfc739": "reLoadXaddr(address,uint256,uint256)", +"82bfefc8": "TOKEN()", +"82c00a50": "getCourseLength()", +"82c0287e": "deleteEtherBox(address)", +"82c058d9": "showTrnsactionLog(uint256)", +"82c0652a": "calcMultiplier()", +"82c174d0": "preSigned(bytes32,address)", +"82c198ef": "fxpDiv(int256,int256,int256)", +"82c20f84": "preSaleBonus3Percent()", +"82c26c6a": "GOCToken()", +"82c30220": "Earthcrypt()", +"82c4175d": "privateRate()", +"82c48f9e": "_batchTransfer(address,address[],uint256[])", +"82c51376": "LENRCoin(uint256,string,uint8,string)", +"82c59c81": "getGameBlocks(uint256)", +"82c6b2b6": "OfficalHold()", +"82c7340e": "GetPlayerRound(address)", +"82c7bac7": "callOnExchange(uint256,bytes4,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"82c7bf2f": "Zigger()", +"82c7f4d6": "setMessagefromdovie(string)", +"82c8ac27": "DatCrowdPreSale(address)", +"82c8c76f": "blocktube(uint256,string,uint8,string)", +"82c9004a": "computeArtistGenesisSaleFee(bytes32,uint256)", +"82c97b8d": "collectReward(address)", +"82ca116d": "changeBankAddress(address)", +"82ca49a8": "sendOwnerFee(uint256)", +"82cac6df": "lastRate()", +"82cb08aa": "MoveToBase(uint256)", +"82cb9df9": "addrFinance()", +"82cbb2e4": "Dagelane()", +"82cbdc0f": "create(string,string,string,address)", +"82ccef76": "GameEnded(address,address,uint256,uint256,uint8,uint8)", +"82cdc0fb": "setRunTimeAfterSoftCapReached(uint256)", +"82cdc93e": "getPlayerInstWinning(uint256,uint256,uint256)", +"82ce6523": "IWasFirstShareToken()", +"82cee91c": "BonusPeriodFor(uint256)", +"82cf114c": "setProfitAddress(address)", +"82cf2116": "transferAndAuction(uint256,address,uint256,uint256,uint64)", +"82cfd1e0": "turn_flag_OFF()", +"82cfee4d": "BitcoinSapphire()", +"82d04bd4": "_complianttransfer(address,uint256)", +"82d1407c": "calcTicketEarnings(uint256,uint256)", +"82d18650": "minPay()", +"82d1bc89": "Darks(address,address)", +"82d22377": "infraIndexToApproved(uint256)", +"82d288c2": "setMintingCurator(address)", +"82d29195": "FundingStageNum()", +"82d2dcfb": "UETH()", +"82d33374": "updateLastTransactionTime(uint256)", +"82d40041": "getAbilitiesForCollectibleId(uint256)", +"82d419f5": "fullUnlockAngelsAccounts(address[])", +"82d4685c": "setAllocations(uint256,uint256,uint256,uint256,uint256,uint256)", +"82d559de": "catchMonster(address,uint256,uint32,string)", +"82d5eb98": "playerIdToExtendedAttributes(uint256,uint256)", +"82d708c4": "dividendRecentBuyersPercentage()", +"82d74005": "YUPTimelock(uint256,uint256,address,uint256)", +"82d82983": "RuralBank(uint256,address[])", +"82d8dff6": "getMaxPrice()", +"82d95df5": "setStartDate(uint256)", +"82d9ac39": "percentForBounty()", +"82d9b9bb": "turnOffCanUpdateNextGameMinAndMaxBlockUntilGameEnd()", +"82db9bd4": "setCaissa()", +"82dc107d": "SECOND_TIER_SALE_START_TIME()", +"82dc1ec4": "addPauser(address)", +"82dc5c9d": "UnionChain()", +"82dc7836": "openGate()", +"82dc87b6": "RefundPeriodStart()", +"82dced63": "testHitPresaleCapPresale()", +"82dd6012": "_aremoveByIndex(uint256)", +"82dd87dc": "deleteUser(uint256,uint256)", +"82ddad13": "Auction(address,uint256,uint256,uint256,string)", +"82de6df7": "getGameBegin()", +"82deb6cd": "m_publiclyDistributedTokens()", +"82decb49": "_maint_setCustomSeed(uint256)", +"82dfc5f7": "WETH_ADDR()", +"82dfe1fb": "changeTreeAttributes(uint256,string,string)", +"82e1250f": "DaysToMyDestroy()", +"82e2f767": "finalizedNextUpgrade()", +"82e3036c": "StandardToken(string,string,uint8,uint256,address)", +"82e37b2c": "getPlayerName(uint256)", +"82e380ef": "auctionInformation(uint256)", +"82e41258": "unregisterPrefix(string)", +"82e43a3b": "TheFrozenSolidShitCoin()", +"82e46b75": "setCoin(address)", +"82e5d073": "getRewardTokenCount()", +"82e615fc": "bidRegistry()", +"82e61d79": "PayoutDividends(uint256,uint256)", +"82e6bbd2": "onlyBouncerExecuteDelegatecall(address,uint256,bytes)", +"82e6d3d6": "foundationSupply()", +"82e77165": "_setAllKeys(uint256,uint256)", +"82e93309": "importGenesisPairs(address[],address[])", +"82e94ac5": "eject()", +"82e96916": "setCoinPercent(uint256)", +"82e97740": "initAffiliate()", +"82ea3985": "clearNextArenaTime()", +"82ea84a3": "getIssuedScoreAmount()", +"82ea872c": "refHandlerAddress()", +"82ea97b3": "tokensForIco()", +"82ebaec4": "distributeTEST(address[])", +"82ebe9ba": "photoData()", +"82ec5ddc": "BioToken(address,address,address,address,address)", +"82ec623c": "_noThrowImplements(address,bytes4)", +"82edaf94": "tokenContractAddress()", +"82ee27cc": "setCoinBalance(address,uint32)", +"82ee282b": "thirdBonusSalesEnds()", +"82eed60c": "pauseCrowdsale(address)", +"82ef351a": "getTotalMonster()", +"82ef6483": "RabbitCore(string,string)", +"82ef8fa8": "adminClaim()", +"82f0151c": "MetaHash()", +"82f0622a": "teamReward()", +"82f0b31c": "getLife(bytes32)", +"82f0d875": "makeHash()", +"82f128f7": "MJOYToken()", +"82f16872": "raffle_balance()", +"82f19e3a": "deltaTFunc(uint256,uint256,uint256,uint256,uint256)", +"82f1ec1f": "getActivityAccountInfo(address)", +"82f2045c": "getEntitiesCount()", +"82f2a164": "addCET6(uint32,uint32,uint32)", +"82f2d8d7": "moveMarketData(uint256[],uint64[],uint64[],uint128[],address[])", +"82f39e2f": "mktTokenCap()", +"82f43303": "roundMax()", +"82f4b3a8": "badgeIfFreeze(address)", +"82f4ef73": "getStageName()", +"82f56556": "udgradeAttack(uint256,uint256)", +"82f5a3e1": "withdrawTotalBalanceDonateWei(address)", +"82f5e31b": "convertFromWei(bytes32,uint256)", +"82f66ff0": "RabbitCoin(uint256,string,string)", +"82f68dc4": "rankOf(uint256)", +"82f7325e": "CRYPTOVENO()", +"82f768d4": "tokenbeneficiary()", +"82f78260": "acupuncturecoin(uint256,string,string)", +"82f7d5c3": "divideNumberBy()", +"82f8152c": "account2()", +"82f858e8": "addresses4(uint256)", +"82f867a4": "BpsToken()", +"82f8767d": "SuperPAC()", +"82f87fdb": "checkFundingStateFailed()", +"82f8b6e9": "roundInterval()", +"82fa3421": "push(uint256,bytes32)", +"82fa7f8b": "weiPerWholeToken()", +"82fa9c0d": "isPersonalBonuses()", +"82fac352": "getPricesOfLatestTradeRecords(uint256)", +"82fb3b7c": "voteNoLockByAdmin()", +"82fb63c7": "getImageCurrentRegionId(uint256)", +"82fbbe47": "Ticked(uint256,uint256,uint256)", +"82fbdc9c": "register(bytes)", +"82fc49b8": "setCosignerAddress(address)", +"82fd5bac": "getDeal(uint256)", +"82fe1e46": "JaneToken()", +"82fef47d": "addToLists(address,bool,bool)", +"82ffee45": "approveRemoveOwnerRequest2()", +"82fffde0": "get_articolo(bytes,bytes10)", +"830010f3": "setReferrerRewards(uint256[])", +"8300399d": "aqwsaqws()", +"8301cfec": "backVenusCoinOwner()", +"8301fb2e": "cashOutTank(uint32)", +"8301fb61": "userHasSmartSpeed(address)", +"830245e3": "sumICOStage7()", +"830321be": "PGUC()", +"83037b81": "checkInterest(address)", +"830402c1": "startGameGas()", +"83054b6a": "GetConsentDirectiveCount()", +"8305d1c3": "GGGToken()", +"830639ac": "isWhitelisted(address,uint256)", +"83076a73": "updateCfo(address)", +"83084b3f": "setNotInWhitelistAllow(uint256)", +"8308c786": "minBlockGap()", +"8308d7e9": "set(address,uint256,uint256)", +"830953ab": "claimAmount()", +"830adf56": "get_previous_user_recast_from_item(bytes32,bytes32)", +"830b3a1e": "setIsFixed()", +"830b6868": "getPriceCredentialItemId(bytes32)", +"830b6b87": "MyOffer(uint256,string,uint8,string)", +"830cbbbd": "redeemToken(address,uint256)", +"830ced52": "TIER_1_CAP()", +"830d0627": "giveCdpToProxy(address,bytes32)", +"830d77d4": "ETHERONEUM()", +"830e8e64": "callAmendment(uint256)", +"830ebd7f": "transferFromNotFullAllowanceTest(address)", +"830ef41b": "transferERC20(uint256,address,address,uint256)", +"830f2935": "icoAgent()", +"830f3d8a": "Diploma()", +"83100580": "PriceWeekTwo()", +"8310d61c": "getLastGame()", +"83111397": "blacklistAddr(address[])", +"831121dc": "getLockedStateAddress()", +"83123f30": "setRole(address,bytes32,bytes32,uint256)", +"83123fa6": "coinsIssuedIco()", +"8312a886": "tokenValueCount()", +"8314b490": "earlyContribList(uint256)", +"8314dcb4": "unAuthorizeContract(address)", +"83150a93": "opetTokenBalance()", +"83160d71": "setPrices(uint256,bool)", +"8316394e": "allow(bytes32,string,address,bool)", +"83186be0": "startICO_w1()", +"83187cf4": "cryptaurRecovery()", +"8318e40b": "transferBcoupons(address,uint256)", +"83197ef0": "destroy()", +"8319da07": "setOwnerCut(uint16)", +"831a1754": "TOKENS_HARD_CAP()", +"831a1a3c": "ECPoints()", +"831a987a": "getSoulByEth(uint256)", +"831aab01": "setData_15(string)", +"831aba43": "referralsOf(address)", +"831b19c2": "KOToken()", +"831b3f67": "convertDustToEther(uint256)", +"831b55d6": "get_balance(address,uint32)", +"831bb4f2": "setAcceptedLegacyAugmintToken(address,int256,bool)", +"831c2b82": "getChannel(bytes32)", +"831d3e09": "offFreezing()", +"831dc22c": "CATCrowdsale(uint256,uint256,uint256,address,address,address)", +"831e0485": "twitterIdOfClaimerAddress(address)", +"831e1deb": "changeExchange(uint256)", +"831e6270": "isSaleFinalized()", +"831e80f2": "create(string,string,uint8,uint256)", +"831ed348": "clearJoinedCrowdsales()", +"831f5ad2": "remainBalanced()", +"831f750e": "claim(address,string,string)", +"832018aa": "BitSelectProtegido()", +"832048d4": "TokenLoot(address,address,address,address,address,address)", +"83206e78": "marriedAt()", +"83212e74": "updatePreSaleCloseTime(uint256)", +"83219a8a": "editMetadata(uint256,string)", +"8322cb91": "addTicket2(address,uint256)", +"8322fff2": "ETH()", +"83234aa6": "FileInfoManager()", +"8323550b": "TUSD()", +"8323bebb": "TokenSold(address,uint256,uint256,uint256)", +"8324a852": "partner(address,address,uint256)", +"8325229a": "playerWithdraw(address)", +"83253cfa": "cancelMarginCallOnBehalfOf(address,bytes32)", +"83255d6e": "getOwnProducts()", +"8325a1c0": "borrowInterestRate()", +"8327a313": "test_initialize()", +"832880e7": "getUser()", +"83289567": "meetingDate()", +"8328b610": "setStakingRequirement(uint256)", +"8328dbcd": "migrationAgent()", +"8328e032": "setStandardPackPrice(uint256)", +"8329ac52": "voteForCandidate(string,string)", +"8329df0a": "allowReferrals()", +"832a66a2": "purchaseCardinal()", +"832b0dc3": "testThrowOnTransferToNullAddress()", +"832b2c60": "specialManagerAddressNumberMap(address)", +"832b9eb2": "MANHATTANPROXY6THAVE()", +"832bc28d": "getPoolHistoryCount()", +"832bff3a": "setForkEndTime(uint256)", +"832df980": "lockEmission()", +"832e02ef": "getUpgradeValue(address,uint256,uint256,uint256)", +"832f6412": "getCenturion(uint256)", +"832f6924": "shuliang()", +"83315b6e": "CONTRACT_FEATURES()", +"83318574": "maxPreSaleStage()", +"83324e8c": "numGroups()", +"833270d8": "preIcoEnd()", +"833331e8": "totalJadeProduction()", +"8334278d": "reserves(uint256)", +"83343d80": "deleteItem(bytes32)", +"833472ba": "TCOCOIN()", +"83347622": "newTeam(string,string)", +"83349122": "crowdsaleIsOpen()", +"8334d195": "viewToken(uint256)", +"8334e170": "SellableToken(address,address,address,uint256,uint256)", +"83366ab0": "addBytes(bytes32,bytes)", +"8337077b": "returnToken(string,address,uint256)", +"83370c25": "FFFToken()", +"833747f8": "getLovers(bytes32)", +"8337680a": "getMyCommitmentCount()", +"833888f0": "LAF()", +"83393882": "contracteeWithdraw(uint256)", +"8339e153": "SETPointerToken()", +"833abf3a": "registerAssetProxy(bytes4,address,address)", +"833b1fce": "getOracle()", +"833b4596": "testApproveSetsAllowance()", +"833be5d5": "getTotalLoans()", +"833c202e": "UNITTransferWhiteList()", +"833cde52": "SaleToken()", +"833cf6fc": "TransCompleteds(address[])", +"833d56c7": "doSwarm(address,uint256)", +"833ea306": "soldForThird()", +"833eaa8b": "incise(address,uint256)", +"833eccc5": "batch_transfer(address[],uint256[])", +"833f43c2": "refill(address)", +"833ffb63": "removeOverride()", +"83405ddb": "unstakeCommunityTokens()", +"83408d73": "burnRemainingTokens()", +"8340f549": "deposit(address,address,uint256)", +"8341f26c": "icoTokenLimit()", +"834292a3": "CanYaCoin(address)", +"8342a9d9": "crowdfund()", +"8343816d": "AcceptCastleOffer(uint256)", +"8343e416": "asideTokensHaveBeenMinted()", +"83442b1e": "opt(address)", +"834472a5": "buildICOStageOne()", +"8344d26d": "TryUnLockCreatorBalance()", +"834614dd": "freeSub(address,uint8,bytes32)", +"8346378b": "transferBenship(address)", +"8346aa47": "spentParsecCredits()", +"8346d3c6": "MultiVesting(address)", +"8347a0d1": "issueTokenAndTransfer(uint256,address)", +"8348bfb9": "setICOAddress(address)", +"8348cf1e": "authorizeAmount(address,uint32)", +"8348d71f": "strConcats(string,string,string)", +"8348fe61": "createCenturion()", +"83492ff1": "deletePrice(string,string,string)", +"83499fdf": "BitcoinRed()", +"834b1aa1": "m_owner20()", +"834be978": "getRewardedSumByRound(uint256)", +"834c3351": "getGoldDataWeight()", +"834c6c84": "setCCH_edit_19(string)", +"834cc6fc": "createEscrow(address,address)", +"834d42c6": "serverForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"834e0565": "GiveRNG(uint256)", +"834e476f": "newAuctionID()", +"834e6261": "CreateICO(address,uint256)", +"834ee417": "start_time()", +"834eebe8": "calculatePremium(uint256,uint256,uint256,string,string,string)", +"834f199d": "_calculateRequiredManaAmount(uint256)", +"834f54d0": "CarPark()", +"8350dfaf": "fetchdivstopot()", +"8350eb5e": "getHashInDataObject(bytes32[])", +"835164a0": "INBCToken(uint256,string,string)", +"8351a0d4": "getCumulativeProfit()", +"83525394": "NONE()", +"83533d63": "setNumAffirmationsSigned(bytes32,uint256)", +"83537b5f": "test_threeValidEqInt()", +"8353bb51": "ROLE_STATE_PROVIDER()", +"8353c9c8": "SetFreezingEvent(address,uint256,uint256,uint8)", +"8353ffca": "Withdraw(uint256,address)", +"835409f0": "InfimonkCoin()", +"835436b4": "evictWorker(address)", +"835592f8": "passed(address)", +"8355c263": "frozenMinDeposit()", +"8355e15c": "withdrawTokens2(uint256)", +"8356027e": "unfrozenTokens()", +"83563dc6": "_getYear(uint256)", +"83565503": "setMember(address,bytes32,address,bool)", +"83565cc7": "additionalAction(bytes32,uint256[])", +"8356a5b5": "weekOneStart()", +"8357417d": "WithdrawDevFunds()", +"8357c2f0": "setAmountToReceive(uint256)", +"835850f9": "_bytesToAddress(bytes)", +"83586713": "computeResult(uint32,uint32)", +"835939d5": "vote(address,bool,string)", +"8359f045": "range(int256,int256,int256)", +"835a749d": "partialRedeem(uint256,address[])", +"835ac5ce": "softcapUSD()", +"835b3720": "setGeneKind(uint8)", +"835b42fc": "testThrowUpdateLatestRevisionNotUpdatable()", +"835b862f": "OneGameToken(address)", +"835bbd55": "reserveTokens(address)", +"835c1154": "checkInvestments(address)", +"835c19f3": "receivePayment()", +"835c6386": "isPurchasePossible()", +"835c853b": "notaryFee()", +"835cb53b": "MAXIMUM_NON_WHITELIST_AMOUNT()", +"835d2d2e": "executeTransfer()", +"835e119c": "availableSynths(uint256)", +"835e33e7": "DianJingToken()", +"835e98d7": "bonusShare()", +"835eb9f8": "ShieldNetwork()", +"835ec6ef": "CreateDDFT(address,uint256)", +"835f6775": "setBonusesForAmounts(uint32[],uint32[])", +"835fa3ac": "icoSuccessful()", +"835fc6ca": "withdrawal(uint256)", +"835fcab3": "NAME_HAWKING()", +"836028a2": "disputeOpen()", +"83607b02": "calculateDevCut_(uint256)", +"836115fe": "unlockedTokens(address)", +"83617782": "startLive()", +"83624c17": "getPartyA(bytes)", +"83627b8e": "getEmployeeId(address,address)", +"8362f6eb": "balanceSender(address)", +"83634ad7": "fnv(uint256)", +"83636209": "RecoveryKeccak256(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"83638710": "getOwnerOf(uint256)", +"83638c12": "GCOIN()", +"83640881": "getTokenOrdersLength()", +"8364c078": "ownerGetUser(address)", +"8365172c": "num_levels()", +"8366437d": "RegisterUser(bytes32,bytes32[8])", +"83664dd3": "substituteManagerContract(address)", +"8366ee2b": "getPayeeLenght()", +"83672f3e": "setWallets(address,address,address,address)", +"8367e120": "apiUrl()", +"836826a6": "highestBet()", +"83685488": "TECHToken()", +"836880d3": "softcapAchieved()", +"8369ff08": "log2ForSmallNumber(uint256,uint256)", +"836a1040": "mint(uint256,address,uint256)", +"836a107f": "removeFromKYCList(address)", +"836a1e23": "collectExcess()", +"836adfd9": "libbibatchbacktest(uint64,uint32[],uint64[],uint64[],int64[],int64[])", +"836b680f": "createProductionUnit1()", +"836c67d7": "BAC()", +"836cca1d": "privateIcoMax()", +"836d6d66": "WeeklyLotteryB(address,uint256)", +"836d8b2a": "SolusPlatform()", +"836d9665": "removeUsersWhitelistA(address[])", +"836dea0b": "myEther()", +"836e4158": "numOrdersOf(address)", +"836e643f": "endStake(address,address,uint256)", +"836e8180": "round1()", +"836e9431": "updateUsersList()", +"83711c70": "ContributionResolved(bytes32,bool,address,address,uint256,uint256)", +"83714834": "factorial(uint256)", +"83714b27": "_safeMul(uint256,uint256)", +"837150cf": "paused(bool)", +"837197b2": "sendTokens(address)", +"8371e1e9": "rescale(int256)", +"83725a91": "Payment(address,address,uint256,uint256,address,uint8,uint256)", +"837356b1": "doNotAlwaysRequireCosignature()", +"837381fa": "withdrawFromContract(address,uint256)", +"837386ca": "candidateXPAAssets()", +"83739eda": "allocationsInitialised()", +"8373ae71": "cancelTradeOffer()", +"837564dd": "CNotes(string,string,uint8,uint256,uint256)", +"83771e56": "BSCToken(uint256,string,uint8,string)", +"83773de8": "_transfer(uint32,address)", +"83781340": "registerTradeProfile(bytes,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,bytes,uint256)", +"83786f8c": "getBalanceOfToken(address)", +"83788fce": "nextBlock()", +"8378ce42": "readStamped(bytes32)", +"837929b6": "getEventful()", +"83794502": "payForTask(uint256,uint256)", +"8379d75b": "BDC()", +"837a7ba5": "testThrowTransferDisabled()", +"837a8eb3": "CATWithdrawn(uint256)", +"837ada41": "cens()", +"837b68c8": "requestTokenExchange(uint256)", +"837cfb34": "LADYCoin(uint256,string,string)", +"837d52d8": "RAIT()", +"837e4cd9": "getNameAndAge()", +"837e60e6": "removePA(uint32)", +"837e6a94": "setOverride(address)", +"837e7cc6": "rollDice()", +"837f1bf7": "_appendTagged(string,string)", +"838006c0": "OwnableOZ()", +"83804c69": "verifyTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes32,bytes32,bytes,bytes)", +"8380edb7": "isUnlocked()", +"8381ada3": "GOLDEQ()", +"8381f58a": "number()", +"83829bf1": "Involve()", +"8382a574": "Factory(address,bytes32,address)", +"8382b460": "getSlashRewardPart(bytes32)", +"83835c01": "accuracy()", +"8383671b": "mintTokens1(address,uint256,uint256,bytes32)", +"8383bfc8": "EscrowFoundry()", +"83841e0c": "change(string,string)", +"838445e8": "EtherAds(address,address,address)", +"83852cf6": "setEnablePurchase(bool)", +"8385fa0f": "ESCROW_WALLET()", +"838661eb": "unfreeze_periods()", +"8386927a": "ToSponsor()", +"83876bc9": "newProposalInWei(address,uint256,string,bytes)", +"83879c15": "cooRemoveManager(address)", +"8387aa39": "addChainlinkExternalRequest(address,bytes32)", +"83894548": "getTokenBalanceOf(address)", +"838985d7": "gymFee()", +"8389f353": "setNumCities(uint256)", +"838a05e4": "part20Transfer()", +"838a48d6": "disableBlackListForever()", +"838bdce2": "team3Token()", +"838c29b6": "checkInterval()", +"838c63b7": "avgRate()", +"838ca346": "currentFunds()", +"838d6e05": "getChannelInfo(uint256,address,address)", +"838eb17e": "takeSnapshot(uint256,uint256)", +"838f0602": "SOLEToken(address,uint256)", +"838f5165": "refundFor(address[])", +"838f7f94": "getTotalAmountOf(uint256)", +"839006f2": "rescue(address)", +"8390b02a": "rfindPtr(uint256,uint256,uint256,uint256)", +"83914275": "getUserBonusBalanceByType(address,bytes1)", +"83917229": "_createGameItem(string,address,uint256,uint256)", +"8391a1c4": "get_table_size(uint256)", +"8391e45c": "dividendsOwing(address)", +"8391e48d": "WCoin(uint256,string,uint8,string)", +"83924dea": "MyTestToken(uint256,uint256,string,string)", +"83944a4b": "CreateWTE(address,uint256)", +"83947ea0": "acceptRelayedCall(address,address,bytes,uint256,uint256,uint256,uint256,bytes,uint256)", +"839484a7": "Iou_Token()", +"8394f639": "SimpleExchange(address,uint256)", +"83955bb2": "SpecialPurchased(address,uint256,uint256)", +"8395aa94": "PLATINUM_AMOUNT_SKL()", +"83960e3c": "importTokens(address,uint256,address)", +"8396392d": "add(string,string,string,address)", +"839655c8": "BetOnHardFork()", +"83973dc3": "withdrawBAT()", +"83975e7d": "PapaBearToken()", +"83979803": "setNewRateLevel(uint256,uint256)", +"8397a260": "getAction(bytes,uint256)", +"8397cc94": "tokenFallback(address,uint256,bytes32)", +"8397f3bc": "isBonusPayable(address,string,uint256,uint256,uint256,uint256)", +"839849c0": "changeBaseMultiplier(uint256)", +"83985082": "disarm()", +"83988ef5": "accountNoneFrozenAvailable(address)", +"839930ba": "getMinimumBet()", +"839972f9": "lockToken(address,uint256,uint256)", +"83999223": "release_all()", +"8399f93f": "reservedFund()", +"839a01be": "privateLockedAmount()", +"839acf14": "buyMonument(uint256,uint256)", +"839affc3": "batchDepositTokenTo(address[],address[],uint256[],uint256)", +"839b2386": "ReverseRegistrar()", +"839b240e": "setHardCapCrowdSale(uint256)", +"839b913e": "getTargetReportsPerLimitedReporterMarket()", +"839daf1d": "migrate2(address,uint40,uint40,address,address)", +"839dbbb1": "iconicsCount()", +"839df945": "commitments(bytes32)", +"839ea3c4": "startVotingTeam(uint256)", +"839ff719": "FML()", +"83a076be": "gift(uint256,address)", +"83a07765": "drawTicketCount()", +"83a18678": "total_racers()", +"83a1a3aa": "setC4FContractRequesterLock(address,bool)", +"83a1a4f2": "YesNo(string,string,string,string,string,string,bytes32,address,string,address,uint256)", +"83a1f52a": "GetManifestoByCategory(string,uint256,uint256)", +"83a287dd": "closeGame(bytes,address,uint256,uint256[],bytes,bytes)", +"83a37262": "stopQueueing(uint256)", +"83a41f93": "descentX()", +"83a4f2f5": "whitelistOperators(address)", +"83a51213": "takedaily(address)", +"83a51ad0": "oraclize_setConfig(bytes32)", +"83a6595f": "setMinDonation(uint256)", +"83a68993": "gameOp()", +"83a6ad6b": "grantAccessDeploy(address,address)", +"83a6b565": "payCommission(uint256,uint256)", +"83a74acc": "gift(uint256,uint256)", +"83a7b701": "masternodeRegister()", +"83a9094f": "PRICE_RATE_THIRD()", +"83aa4958": "getContributeAmount()", +"83aa9985": "ownerTwo()", +"83ab12e7": "Auctions()", +"83abd7e2": "removeIdentifier(address,bytes32)", +"83ac44e6": "marketingAccount()", +"83ac4ae1": "_sendWinnings()", +"83ac98fe": "transfer_Different_amounts_of_assets_to_many(address[],uint256[])", +"83ae0839": "ETNToken()", +"83ae5266": "addCertificate(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,string,bytes32[],bytes32[])", +"83ae62c4": "_frozeAmount()", +"83aec57c": "getUsersForDate(uint32)", +"83af3c40": "getRemainingTokenAmount()", +"83b01a83": "updateTAOContentState(bytes32,address,bytes32,uint8,bytes32,bytes32)", +"83b14c0a": "toAddr(uint256)", +"83b23b40": "cEthereumlotteryNet()", +"83b2c476": "updateLibrary(address)", +"83b2d77f": "signFact(bytes16)", +"83b3999a": "addToAddresses(address,address)", +"83b3c85f": "pecul()", +"83b40eb7": "creditEqually(address[],uint256)", +"83b47a4d": "whitelist_addys(address[],bool)", +"83b4918b": "reinvest(uint256)", +"83b49485": "BurnablePayment(bool,address,uint256,uint256,string,string)", +"83b572d1": "getPlayerStake(uint256)", +"83b58323": "setTransferFeePercentage(uint256)", +"83b5ff8b": "ownerCut()", +"83b60a33": "transferToken(uint8,address,uint256)", +"83b665b9": "purchase(uint152,uint256)", +"83b7db63": "getExtensions()", +"83b83c1c": "setOpGas(uint256,uint256)", +"83b8b9f0": "ForceCloseContract()", +"83b8c8f6": "bonusLevel100()", +"83b9e9f7": "train3(uint256)", +"83ba3a97": "sendTeamSupplyToken(address)", +"83baa6f4": "presaleopeningTime()", +"83bd5f42": "distributeDevCut(uint256)", +"83bd72ba": "stopGame()", +"83be9d54": "placeBet(bytes32,address)", +"83bebcc2": "changeSellPriceForAthlete(uint256,uint256)", +"83bebced": "_rate()", +"83bf1cbc": "delayDefaultRelease()", +"83bf4609": "createTemplate(string)", +"83c08784": "Incrementer3()", +"83c0dd25": "LogNewAllocation(address,uint256)", +"83c10844": "percentLeftFromTotalRaised()", +"83c17c55": "setFactoryAddress(address)", +"83c1f2e6": "unlb()", +"83c218c2": "oraclizeId2proposalId(bytes32)", +"83c28ddc": "getRefundAmountForFunder(address)", +"83c28ecc": "getTokenWithdrawHold()", +"83c3bd6b": "isEqualLength(address[],uint256[])", +"83c4c2e9": "makeSuccessor(address)", +"83c4cc46": "StartCrowdsale(address,address,uint256)", +"83c51a38": "thesimplegame()", +"83c56fc8": "dailyTotals()", +"83c592cf": "stake(uint256,bytes32)", +"83c5e3c9": "removeBRA(address)", +"83c68f48": "AIChain()", +"83c6aa47": "arrangeUnsoldTokens(address,uint256)", +"83c75ed5": "setGatewayB(address)", +"83c7d7c1": "sumMultiplayer()", +"83c7f14c": "bytesToBytes4(bytes)", +"83c81bec": "Arbiter(address)", +"83c99722": "lockforTransfer()", +"83ca8632": "_getCrabPartData(uint256)", +"83cb2fee": "INITIAL_SEED_FARMING_AMOUNT()", +"83ccc2b5": "_0xBitcoinCash()", +"83ccc8b8": "getEtherContributed()", +"83ccdcc3": "detailsOfWindow()", +"83cd5e13": "debug_multiplehash(uint256,uint256)", +"83cd9cc3": "setDelegator(address)", +"83cdb517": "transfer_to_0(uint256)", +"83ce63b5": "doRouletteBet(bytes,uint256,bytes32,bytes32,bytes32)", +"83ce8a61": "changeMPO(address)", +"83cfab42": "unFreeze(address)", +"83cfbd7f": "revokeOwnership(address)", +"83cfc5f2": "changeNameRestricted(string)", +"83d158f0": "ShadowToken()", +"83d2421b": "setWorkerPort(uint256)", +"83d4f946": "round0EndTime()", +"83d51a38": "concatString(string)", +"83d52f36": "OpenAIChainToken()", +"83d53895": "interfaceSupported(address,bytes4)", +"83d6236c": "amIin()", +"83d66353": "LotteryGames()", +"83d67039": "Register(string,string,string,uint256,uint256)", +"83d67fc1": "_addAddressToGrantAccess(address,uint256)", +"83d7529f": "reservationFromBackend(uint256,bytes32,address,uint256,uint256)", +"83d852d9": "shutdownTransactions()", +"83d880d0": "setParticipationCap(address[],uint256)", +"83d8a90f": "theDonkeyKing()", +"83d8bae3": "listItem(uint256,uint256,uint256,address)", +"83d8e480": "registerCoin(address,string,string)", +"83da4d86": "ApolloCoinToken(uint256,uint256,address,address)", +"83db0680": "TOTALSHARES()", +"83db1548": "addPost(uint256,uint256)", +"83db8e31": "HMCToken()", +"83dbb27b": "invalidOrder(address)", +"83dbc55b": "verifyXOR(bytes32,bytes32,uint8)", +"83dbff4b": "get_first_item_in_state(bytes32)", +"83dc077d": "acceptContribution()", +"83dcecd3": "CompanyTokensIssued(address,uint256,uint256)", +"83dd7aa4": "setBankName(bytes32)", +"83de6ed6": "changeStageTwo()", +"83dea2a8": "renounceExcluded()", +"83df762f": "BDayToken()", +"83df7d21": "updFreezeEnabled(bool)", +"83dfd040": "isPresaleFull()", +"83dfe5fd": "C()", +"83e03c3d": "HumanERC223Token(uint256,string,uint8,string)", +"83e06ead": "setPercentages(uint256,uint256,uint256,uint256,uint256)", +"83e07382": "setMovePermissionStat(bool)", +"83e19248": "afterStart()", +"83e19a95": "MANAGEMENT_LOCKED_PERIOD()", +"83e1bb4f": "dequeueIngot()", +"83e219eb": "removeFromTotalSupply(uint256)", +"83e256dc": "gameIdGame(uint256)", +"83e2a0c4": "joinGame(address,uint256,address)", +"83e3607c": "fourthBonusSalesEnds()", +"83e48d43": "_sptc(uint256,uint256,uint256,uint256,address)", +"83e49c53": "burnWithData(address,uint256,bytes)", +"83e4eed0": "apply(string,string)", +"83e5cb26": "ownerAddCeo(address)", +"83e78b31": "bet(uint8,bool,uint8)", +"83e7f347": "ICOBank()", +"83e811a6": "founderLockup()", +"83e83b54": "payBounty()", +"83e8dbb8": "calculateSaleAmount(uint256,uint256)", +"83e99a93": "balanceOfUnclaimedTT(address)", +"83ea0620": "packageExists(string)", +"83ea5111": "MESH(uint256)", +"83eb7257": "companySupply()", +"83eb72ac": "getStrandDescription(uint256)", +"83ec0648": "BlockStackCoin()", +"83ec0bd2": "showPeopleInQueue()", +"83eca581": "setReferrerReward(uint256)", +"83edf023": "totalWeiRecieved()", +"83eed3d5": "queryN(uint256,string,bytes)", +"83eeecc0": "ethInWei()", +"83ef0c23": "buyEgg(uint256,uint256,bool)", +"83f0b184": "calculateMaxContribution()", +"83f0bb45": "_getPartSkillLevel(bytes,uint256,uint256)", +"83f11daf": "SetCandidatePrincipal(uint8,uint256)", +"83f1211b": "transfersLocked()", +"83f12f91": "grantFounderTokens(address)", +"83f12fec": "batchTransfer(address[],uint256)", +"83f13e7f": "setNewDividendContract(address)", +"83f2a8ca": "dividendsCalculated()", +"83f3c3df": "PaymentGot(bool)", +"83f4a27b": "TATCOIN(uint256,string,string,uint256)", +"83f537cc": "LendingBlockToken(address)", +"83f57fd7": "_addDemoc(bytes32,address)", +"83f5a47e": "tokenOfOwnerAndCreatorByIndex(address,address,uint256)", +"83f5b46f": "refSystem()", +"83f5e360": "_unpackClassValue(uint256)", +"83f66212": "getTop11_20Messages()", +"83f6cc69": "transferAllowedOf(address)", +"83f6d9a4": "validateNameInternal(string)", +"83f7a095": "setCoefficient(bytes2,string,uint256)", +"83f7b8e1": "getNumberOfPhotos()", +"83f7e2d7": "reduce(uint256)", +"83f94db7": "upgradeImplementation(address)", +"83f95f13": "openClaim(string)", +"83f9a788": "BlockTubePrepaid(address)", +"83fa07fd": "fechAllCandidates(uint256)", +"83fa2039": "Dealer(address,address)", +"83fa7e02": "isSiringClockAuctionStorage()", +"83fa87f2": "activateAdSlot()", +"83fae425": "setPresaleAllocation(address,uint256)", +"83fb42ba": "proposeBurning(uint256)", +"83fbbc7a": "OnlineSocialChainToken(uint256,string,uint8,string)", +"83fbc2b4": "weiRised()", +"83fc58b4": "tranferOwnership(address)", +"83fcafbb": "GetPrizeFund()", +"83fcb85e": "revertFunction()", +"83fcf308": "getPropertyRating()", +"83fcf973": "unlockVestedTokens()", +"83fcfafe": "LooqCrowdsale()", +"83fd65d8": "setETHExpectedFee(address,uint256,uint256)", +"83fd8a64": "CBCK(uint256,string,string)", +"83fe05f1": "PutFreeEther()", +"83fe10e4": "isMetered()", +"83fee16d": "finalizeUpdate(uint256,address)", +"83ff0189": "buy_tickey_free()", +"83ff1bb6": "approve(string,uint8)", +"83ff5bf2": "Bittobit()", +"83ff9bec": "petCardDataContract()", +"8400c307": "isRecipientAllowed(address)", +"8401824f": "compactFraction(uint256,uint256,uint256)", +"84019cae": "WOWToken()", +"8401e614": "lengthOfPermissions()", +"8401f8d1": "addMultipleToWhitelist(address[])", +"8402181f": "pull(address,uint128)", +"8402ac99": "firstYearEnd()", +"84035e07": "amendEarlyPurchase(uint256,address,uint256,uint256)", +"8403be91": "isAppRegistered(address)", +"84048497": "listMultipleItems(uint256[],uint256[],address,bytes32[])", +"84054d3d": "cashout()", +"8406ab82": "deleteGame(address)", +"8406c079": "relayer()", +"84073164": "transferFromPie(uint256)", +"84083c89": "addWhitelistUser(address)", +"84086357": "crowdfundFinalized()", +"8408643a": "getBlockTimestamp32()", +"840880f2": "TeamLockingPeriod18Months()", +"8408cb9d": "setPreICOPrice(uint256)", +"840aab14": "_hasName(address)", +"840b7403": "computePayout(uint256,uint256)", +"840bc19c": "NON_PAYABLE_AMOUNT()", +"840c0ca9": "setMaximumClaimPriceWei(uint256)", +"840c401f": "pruneRestrictStock(address,uint256)", +"840cfffd": "burnIndexedByAddress(address,uint256)", +"840d7fb6": "createLottery(address,string,string,uint32,uint32,uint8)", +"840dea74": "COMBINED_WEI_GOAL()", +"840e2673": "startTransferTime()", +"840e78fd": "projects(address)", +"840eb43e": "removeLicenseTerms(bytes32,bytes32)", +"84100d5c": "selectRandomTrait()", +"841016d0": "setAdditionalOwners(address[])", +"8410956a": "initialise(address,uint256,uint256,uint256,uint256,uint256)", +"84109e50": "setTiimKyberGoAddress(address)", +"84120645": "setMasterRewardsPercent(uint256)", +"841237b7": "Wallet9()", +"841244a8": "FeedCreated(uint256,string)", +"84125e0b": "withdrawBalancesToNFC()", +"84126e01": "cancelPayment(string)", +"841302ce": "getHash1(uint8[5],uint8,bytes32)", +"84132cf5": "deposit(address,uint8,bytes32,bytes32)", +"84140c40": "delFromVestMap(address)", +"841410cd": "maxETHContribution()", +"84160ec0": "getAddressesAccounts()", +"84168c01": "tradesUnlock(address)", +"8417fa2f": "goPublic()", +"8418cd99": "contribute(address,uint256)", +"8418dc36": "teFoodsAddress()", +"84191f62": "changeController()", +"8419604e": "SendingBounty(bytes32,uint256,address)", +"8419c986": "foundTime()", +"841a12bd": "setKittyTokenAddress(address,address)", +"841b4cd8": "registerForRaffle3()", +"841baf2c": "m_tokensClaimed(address)", +"841d0ac3": "init_daylimit(uint256)", +"841e6ce9": "betFee()", +"841eb7f8": "paymentRewardTokens(uint256)", +"841efac4": "updateFieldss(uint256,uint8,uint256)", +"841f3729": "howManyTokensAreReservedForMe()", +"84219204": "minVotedTokensPerc()", +"8421ec8a": "MyCash()", +"842249cb": "weiTotalReceived()", +"8422927d": "cancelPayment(uint256)", +"8422b3bf": "RailzToken()", +"8423157b": "getWinAmount(uint256,uint256)", +"84248a51": "changeDrawFee(uint256)", +"84249ed0": "manualBuyPrice(uint256)", +"8424b40d": "setLotteryCore(address)", +"8424f952": "IMEIM()", +"84268051": "payoutToOwnerIsLimited()", +"84269ed9": "transferFrom(address,address,uint32)", +"8426a452": "getSellingItem(uint256)", +"84270db0": "selfdestructTokens()", +"84281dcc": "isBalanceSufficientForContractCreation(address)", +"8428cf83": "recoverAddress(bytes32,uint8,bytes32,bytes32)", +"84297029": "getIdxBatchByUsername(bytes20[])", +"84298882": "setLogo(uint256,string)", +"842a6415": "DTRC()", +"842acf9d": "mintDSBIToken(address,uint256)", +"842b6357": "checked_in()", +"842b8efa": "FailedMarking(bytes32,bytes32,uint256,int256)", +"842bc37b": "GetSmallCotractIndex(address)", +"842bd2db": "getDeduction(uint256,uint8,address)", +"842bfad2": "updateParticipantCapTier2(uint256)", +"842c17be": "firstStageMinted()", +"842c45c5": "ROBIES()", +"842e062f": "p_setCurrentRoundJackpotPercent(uint256,uint256)", +"842f10d1": "dropMultiple(address[])", +"842ff2bd": "numPolls()", +"84300859": "setTokenUnlock()", +"84304ee5": "chronus()", +"84311353": "totalAmountOfPurchasesInCny()", +"84313086": "divCutMaster()", +"84317008": "setprice(uint256,uint256)", +"84317143": "INITIAL_EARLYBIRD_TOKENS()", +"84321b41": "ligerAdminAddress()", +"843296d6": "DealCancelationReason(uint256,address,uint32,uint32,uint256,string)", +"8433acd1": "collectTokens()", +"8433d6f2": "from_Initialisation_to_cycleDeVie()", +"84344415": "chargeMoney()", +"84345b35": "createRandomZombie_ZOB_goldpack()", +"8434c80d": "cleanArray(uint256[])", +"843545be": "getPrinciple(uint256)", +"843584f1": "log_recast_fees(address,address,uint256)", +"8435be4b": "getLastFarm(uint8,uint8)", +"8435da61": "getTile(uint16,uint16,uint8)", +"8435f147": "bytes32Func(bytes32,bytes32)", +"8436bd4e": "MintyMcCringleToken()", +"84370813": "subscribe(uint256,uint256)", +"8437b2a5": "tier(uint256,uint256)", +"84385c6f": "assignOperator(address)", +"84386004": "channelsSold()", +"84394e6f": "addValidation()", +"8439ec4a": "setBlacklistBulk(address[],bool,bool)", +"8439f80d": "accumulatedBalanceOf(uint256)", +"843a7f74": "getCKNPriceNow()", +"843aa0db": "insert(uint256,uint256,uint256,uint256)", +"843ad7b5": "dailyMintable()", +"843b1a09": "spendNonce()", +"843b4386": "addComment(string)", +"843bd641": "itemExists(uint256)", +"843cbae4": "EtherBattleCoin()", +"843cfb9e": "vestingTotalPeriods()", +"843e240e": "getAuditContractUri(uint256)", +"843e8d27": "downVote(bytes12,bytes12)", +"843fcf90": "EOSGold()", +"843ff6f6": "getTitulaire_Compte_7()", +"8440b3b0": "BUY_INCREASE()", +"8440d167": "getCategory(address)", +"84413b65": "airdropAddress()", +"8441f89e": "deleteWitness(address)", +"8442171d": "bonusLimit2()", +"84429480": "TokensBought(address,uint256,uint256)", +"84429579": "getRunningTokenPairs(address[])", +"844323fa": "xtime()", +"8443f07c": "UVIDIFYTOKEN()", +"8444b391": "getUpgradeState()", +"84465fa5": "changeFeeOwner(address)", +"844669b3": "accountC()", +"844706a6": "UsdCapUpdated(uint256,uint256)", +"84477036": "tempTokensBalanceOf()", +"8447c02f": "takeAGuess(uint256)", +"8447c4fa": "LibraToken()", +"84488126": "isForceExecute(address)", +"844891a0": "ABTCETHER()", +"8449129e": "EthereumNova()", +"8449133b": "initQuoteBalance()", +"84491566": "getPrevRoundWinnerCount()", +"8449b0af": "PRICE_MULTIPLIER_ICO5()", +"8449d772": "withdrawM5()", +"844bdea4": "LhsToken(uint256,string,uint8,string)", +"844c3edc": "setThresholdSendToSafeWallet(uint256)", +"844c4264": "cycleEndTime()", +"844c7d95": "updateBalances(address,bytes32,string,address,uint256)", +"844d38ee": "view_get_Gains()", +"844d65c5": "whitelistedMax(address)", +"844dbf67": "RecurringPayment(address,uint256,uint256,address)", +"844e774d": "joinraffle()", +"844e89a9": "Unregistered(bytes32,uint256)", +"844ea6f9": "E25()", +"844ef097": "bridgeValidatorsOwner()", +"845051d3": "testContractsNotNull()", +"8450b12e": "getSupplyLimit(uint16)", +"8451738d": "rentHo(uint256)", +"8451d312": "showAllFunds()", +"845238fe": "lookup(address[],address,address,bool,bool)", +"84533794": "setEthRate(uint16)", +"845381c0": "FailedVote(address,string)", +"84539789": "useNeonMarbles(address)", +"8453a8c8": "Factom()", +"84545ef8": "setRegionPurchasedPixelPrice(uint256,uint256)", +"8454665d": "startingInsuranceBalance()", +"84553e16": "AccessAddress(address)", +"84564676": "tokenSetAdmin(address,address,address,address)", +"8456cb59": "pause()", +"84570d0d": "assertEq5(bytes5,bytes5)", +"84571235": "minimum_bet()", +"84585099": "TransferTo(address,uint256)", +"8458644c": "play(bytes32,address,address)", +"845890c3": "buyATR()", +"8458bd70": "getHp(uint256)", +"8459857f": "mentors()", +"845a51ec": "rewardPoolAddress()", +"845a7468": "getStakersAndAmounts()", +"845ab425": "getProjectDescription(uint256)", +"845b6aca": "buyBasicCards_Migrate(address,uint256,uint256)", +"845c8801": "checkHasPermissionForPack(address,address,uint256)", +"845c9306": "participate(uint256)", +"845d586f": "publicTransfersEnabled()", +"845dcc2b": "_isSoldOut()", +"845e76b3": "getStudentArray(bytes32)", +"845eaedb": "SmartVows(string,address,address,string,address,address,string,string,string,string,string,bytes,bytes)", +"845ec8de": "FOUNDER_EXCHANGE_SHARE()", +"845f5593": "initStages(uint32[],uint32[],uint128[],uint128[],uint128[],bool[])", +"846030a0": "hasClaimableShares()", +"84605d0d": "total_iou_withdrawn()", +"8460a9d9": "suicideSend(address)", +"84610618": "registerRequest(int256,int256)", +"846153b5": "registerAddresses(address[])", +"8462151c": "tokensOfOwner(address)", +"84622425": "onlyPrimaryMock()", +"8462df7f": "diff(uint256[],uint256)", +"8463bcf5": "countClients()", +"84644ec9": "addPromise(uint256)", +"8464878d": "emergency_used()", +"84653605": "DateCoin(uint256)", +"84658e2a": "sendtoken(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"846639dc": "currentAwards()", +"8466c3e6": "aa()", +"846786f1": "openIco()", +"8467d9cf": "refundPayment(uint256,uint32,uint32,uint256,string)", +"8467f7cb": "resetContract(uint256)", +"84680fc2": "autoSelectOpponentForGladiatorBattle(uint256,bytes32)", +"84682fbb": "auxWorstPoints()", +"84691cd8": "grapesToProduceBottle()", +"84696810": "winningCountry()", +"846a09e1": "AddAuthorityAddress(address)", +"846a284e": "_addTicket(address,uint32,uint8)", +"846a5dde": "delayPayment(uint256,uint256)", +"846b055a": "startCrowdfund(uint256,uint256)", +"846b0ef0": "proxiedContribution(address)", +"846b23d4": "getEmployerInvoicesByStatus(address,address,uint8)", +"846b68e3": "MERCULET()", +"846e5851": "LogStudentUncertified(address,uint256,address)", +"846e832d": "getStateAt(uint256)", +"846e980d": "setFreeLobster(uint16)", +"846f1185": "sendEthProportion(address,bytes,uint256,uint256)", +"846f652b": "getSpawned(uint32)", +"8470ffd6": "_transfert(address,address,uint256)", +"84716854": "investInCharger(uint256)", +"84734476": "copyBytes(bytes,uint256,uint256,bytes,uint256)", +"8473e55f": "amountForSale()", +"8475bfed": "div18(uint256,uint256)", +"8475f6f9": "getPublicKeyG()", +"8476f105": "Menu08(uint256)", +"847760ee": "getArtToken(uint256)", +"847778ad": "edit(address,address)", +"84780009": "getFinishStatus()", +"84788f01": "mvnperethBonus()", +"847927ed": "icoEtherMaxCap()", +"847a1ca6": "raiseSellOrderCreated(address,uint32,uint32,uint80,uint256,int160)", +"847a5e99": "getPlayerStats()", +"847af92c": "setMintMode(uint256)", +"847bd61c": "processPurchase(uint256[])", +"847c096d": "removePresaleContributor(address)", +"847d97ab": "add(string,address,string,uint256)", +"847dc0a7": "percentageETHReserve()", +"847dc59e": "MicoinToken(uint256,string,string)", +"847dd67c": "buyEth(uint256)", +"847e09f2": "TOKEN_HARDCAP()", +"847e12c4": "FixyNetwork()", +"847e27d9": "wanToken()", +"847e2ba1": "revokeAccessMint(address)", +"847ec2de": "totalBunny()", +"847eefb6": "ICOHardcap()", +"847f2177": "Electron()", +"847f4a88": "stopSaleType(uint8)", +"847f8a10": "Refund(uint32)", +"8480021c": "crowdfundDeadline()", +"8480544e": "getCAOAmount()", +"848125ea": "issueBlockReward()", +"8481573e": "contractBalanceOf(address)", +"8482167e": "makeCall(address,uint256,bytes)", +"84837981": "BTCT()", +"8483dfcc": "isOverflow(uint256,uint256)", +"84841523": "Buttcoin()", +"8484dc24": "removeEmissionProvider(address,uint256)", +"8484ff59": "setTokenCollectable(bool)", +"8485b90c": "proposalAuthor()", +"84861e93": "auctionState(uint256)", +"84869679": "isDistributionDue(address)", +"8486d444": "_getUsdAmount(uint256)", +"848784e5": "transferPreSigned(bytes,address,uint256,uint256,uint256,uint256)", +"8487b73a": "Milestone_BankLicenseFailed(string)", +"84883795": "ico_rejected()", +"84885ed6": "getData_19()", +"8488e58a": "setReturnableToken(address)", +"848a0327": "dividendForYearly()", +"848a2130": "releaseChecksum(uint8)", +"848b3821": "fundingCapReached()", +"848b86e3": "updateWallet(address)", +"848c0a39": "buildLeft(address,uint256)", +"848dd14e": "CostStuff(address,uint32,uint256)", +"848e3442": "automaticThreshold()", +"848efb3d": "rentOut(uint256)", +"848f002f": "setBoolF1F2(bool,bool)", +"848f1470": "disableRefundPeriod()", +"848f6d8d": "OneBroGlobal()", +"848faed7": "BAI20()", +"84900b04": "whitelistContract()", +"8490d598": "wholeTokensReserved()", +"8491b49c": "rain(address[],uint256[])", +"84922374": "isDistConfig()", +"84924b60": "findAndPayTheWinner()", +"849292bc": "emitStateContractChanged(address)", +"8492aa9c": "getAddressNickname(address)", +"8493407b": "CorporateNews(uint256,string,uint8,string)", +"84934e40": "DappUpgraded(address,address,address)", +"8493a06e": "returnLongTokenAmount(address[3],bytes32,uint256)", +"84941984": "_removeTokenFromPartition(address,bytes32,uint256)", +"8497a8d8": "ESCToken()", +"84987faa": "getNodeRightChild(bytes32)", +"8498f706": "EthPalace()", +"84995370": "TheFoolRareToken()", +"8499bc63": "GeneBlockChainUserIDs(address)", +"8499ee3a": "newToken(string,uint8,string)", +"849a7337": "approveBountyTransfer(address,address)", +"849a7cb7": "convertBytes4ToArray(bytes4)", +"849aaf8e": "minimumValue()", +"849ab974": "HasOwner(address)", +"849ae5ea": "isBlockpassInvestor(address)", +"849bb2db": "withdrawServiceFee()", +"849cf588": "addSynth(address)", +"849d0d24": "TVCrowdsaleContract()", +"849d16d2": "BffDoomToken()", +"849d926b": "parseBlockHeader(bytes)", +"849e3dcd": "SangusToken()", +"849e6b17": "MakeBuyOrder(bytes32,address,uint256,uint256,address)", +"849e961a": "ICO_PRE_SALE()", +"849f94bf": "getMatchIndex(uint8)", +"84a014d8": "oneTimeSold(address)", +"84a0f604": "transferMultipleDifferentValues(uint256[],address[])", +"84a11df9": "ismaster()", +"84a1f5a5": "claimTokensFor(address[])", +"84a2f00b": "order(bytes32,uint256,uint256)", +"84a2f5a4": "MoonDust()", +"84a34caa": "BaseMPHToken()", +"84a37273": "addTransaction(address,uint256)", +"84a429a0": "createDklSiringAuction(uint256,uint256)", +"84a438de": "Course(string,string,uint256)", +"84a4974c": "MintAndTransferEXH(address,uint256,bytes32)", +"84a6469a": "setNewMintRequest(address,uint256)", +"84a64c12": "cancel1(uint256)", +"84a68690": "withdrawRequest(uint256,uint256,uint256,uint256)", +"84a6a68a": "releaseTeams(uint32,uint32[])", +"84a7b223": "Canary(address)", +"84a80c6b": "getB0()", +"84a83662": "changePassword(string,string)", +"84a97ab7": "removeAddressFromAccount(address,address)", +"84a9b91c": "capWEI()", +"84a9d711": "assertThrows(string)", +"84ab2cdb": "byte_to_bits(bytes1,uint256)", +"84ac33ec": "deregister(address)", +"84acdae7": "getAuctionStartBid()", +"84ad6ff3": "ReversibleDemo()", +"84ad8e8f": "discountPrice()", +"84aeb4f0": "getTokenContribution(address)", +"84afaa7c": "getReceiptAmount(uint256)", +"84afb526": "marketor()", +"84afd121": "bytesToUint2(bytes)", +"84b00eb6": "fetchVoteNumForCandidateByIndex(uint256,address)", +"84b06191": "CampaignAccount(address,uint256)", +"84b08d41": "partner2_signed()", +"84b0e001": "setEventResult(string,uint32,uint8)", +"84b1fcb6": "TokenOwnedFund()", +"84b2e59d": "lower(string)", +"84b35fbb": "proposeFoundationTransfer(address)", +"84b366dc": "dest()", +"84b3b232": "depositofferToken()", +"84b4340b": "failWithReason(string)", +"84b46829": "San4Contract()", +"84b4d3f6": "determineGoalScoringCardIds(uint256[],uint256[],uint256)", +"84b60937": "getRollUnder(uint256,uint256)", +"84b735c2": "address1a()", +"84b76824": "cancelWithdraw()", +"84b7964f": "isClient(address)", +"84b79b3d": "eosBASE(uint256,uint256)", +"84b83a96": "finishChampionGame()", +"84b8d6a5": "Airdrop(address)", +"84b98987": "getPrice(address,string,string,string)", +"84b9a4a5": "SALE_STEP()", +"84ba2642": "mint(address,uint256,address,string)", +"84ba745e": "totalClass()", +"84bc8d2e": "read_purchase_at_index(uint256)", +"84bcd93e": "setSealableProperty(uint256,bytes32,bytes32)", +"84bcefd4": "collected()", +"84bd3a28": "TierRainmakerDividendAddress(address)", +"84bdaf85": "centsInPhaseOne()", +"84be4079": "Lendr(string,string,address)", +"84be414d": "KryptopyCrowdsaleMock(address)", +"84be59d1": "giftPool()", +"84beac36": "KRCToken(address)", +"84bf6fac": "mEtherValid()", +"84c019e3": "noBonusTokenRecipients()", +"84c14b25": "sellDentacoinsAgainstEther(uint256)", +"84c2473f": "mainIcoEndBlock()", +"84c344fe": "_register(bytes4,string)", +"84c3edf9": "getHoldAmountAccounts()", +"84c4ee9e": "getHivePot()", +"84c5c34d": "transferFromToICAPWithReference(address,string,uint256,string)", +"84c615e2": "giveKingdom(address,string,string,uint256)", +"84c64a19": "setApp(address,address)", +"84c6774c": "safeMathMul(uint256,uint256)", +"84c6a9fe": "setFABAcompanyTokensPercent(uint256)", +"84c6f650": "PAYOUT_TIME()", +"84c7bf4c": "setBlocking(address,address,bool)", +"84c830d3": "getDepositByIndex(address,uint256)", +"84c8d5fa": "xenograft(uint256,uint256,uint256)", +"84c8df88": "testMemoryIntegrityCheck31Bytes()", +"84c99b6d": "tokenIssuedAirDrop()", +"84ca65e0": "addOperationType(string,string)", +"84cb4fec": "_getBlocksPerYear(uint256)", +"84cba6da": "registerUsers(address[],uint256[])", +"84cbc92f": "buyPotato(uint256)", +"84cc315b": "getCurrentPrice(address)", +"84cdbb4b": "relaseLock()", +"84ce8f1e": "getTotalF3()", +"84cfa08c": "startKilling()", +"84cfc5aa": "WABnetwork(uint256,string,string)", +"84cfca00": "setMaxPlayers(uint8)", +"84d062b4": "updateEthToTokenOrder(uint32,uint128,uint128)", +"84d0aad8": "loadOldData()", +"84d24226": "claimableTokens(address)", +"84d2688c": "getDarknodePublicKey(address)", +"84d2731c": "namesOf(address)", +"84d43f66": "setAffiliateSetter(address)", +"84d452ff": "resetRound()", +"84d46860": "getMyStageBet(uint256,uint256,uint256)", +"84d47dee": "DayDayCrowdsale(uint256,address,address)", +"84d4c178": "_escrowInflationBonus(bytes32,uint256,uint256,address,address,bool)", +"84d5d944": "transferAndLock(address,uint256,uint256)", +"84d60043": "CioCoinERC20180629Token(uint256,string,string,uint256)", +"84d61a32": "showFPInterest()", +"84d62f47": "bindSmartIdentityByRegulator(string,string,string)", +"84d6bd43": "requiredEvidence()", +"84d7c99d": "deleteUInt8Value(bytes32)", +"84d7ea12": "setMilestonesContractAddress(address)", +"84d80057": "hasDeadlinePassed(bytes32)", +"84d83f07": "GetLoanIdFromPortfolio(uint256,uint256)", +"84d8529f": "refundInternal(bytes32,address,address,uint256)", +"84d9390a": "TEAM_PERCENTAGE()", +"84d9bee2": "bidCC(uint256,bytes32)", +"84da7e38": "setColorRed()", +"84da92a7": "updateName(string)", +"84dac46e": "Fucksign()", +"84db71a3": "getRefereeRewards()", +"84db8d1e": "_nextPotTax(uint256)", +"84dc1028": "getBonustwo(uint256)", +"84dc2b10": "_saveData(address,bytes32,address,bytes32,uint256)", +"84dcde97": "removeSynth(bytes4)", +"84dd4332": "lastCallPUST()", +"84dd9591": "getTotalHoldAmount(address)", +"84df87c3": "SPITEST()", +"84dfb2bd": "setETHAddress(address)", +"84dfbfe2": "setLpFee(uint256)", +"84e0b689": "_yearThreeSupply()", +"84e10a90": "getTotals()", +"84e11251": "setMinInvestmentLimit(uint256)", +"84e192a7": "getArbiterCandidates()", +"84e1bf74": "emissionOn()", +"84e2341d": "internalSetDestinationMultisigWallet(address)", +"84e2d578": "OperationAddress()", +"84e336fc": "ANUNYA()", +"84e37ad9": "prefixedHash(uint256)", +"84e3ac94": "oneTokenInWei()", +"84e45689": "authorize(address[])", +"84e4c52b": "getTimeLockSecondsRemaining(uint256)", +"84e4d3a8": "freezeAccount(address,bool,uint256,uint256)", +"84e4d57f": "ApplyForCertification(string,string,string,uint256)", +"84e527ad": "IMDESale(uint256,uint128,uint256,uint256,uint128,string)", +"84e60e8b": "ico_promo_reward(address,uint256)", +"84e64a1f": "stageStartDate(uint8)", +"84e67523": "getSumAmountOfOpenSteps()", +"84e6ee4b": "setMainnetAccount(string)", +"84e70093": "cloneOrder(address,uint256,uint256,uint256)", +"84e700ee": "totalAllocatedPurchase()", +"84e7686b": "setAdmin(address[],bool)", +"84e77095": "GetEvidence(bytes32)", +"84e77da2": "updateKryptoroToken(address)", +"84e79842": "addAgent(address)", +"84e7e3d3": "MINT_INTERVAL()", +"84e83ee2": "SparksterToken()", +"84e84506": "onContribution(address,uint256,uint256,uint256)", +"84e85974": "YGO()", +"84e8a7df": "_soldOutside()", +"84e8b36e": "GetAskingTokenDecimal()", +"84e8bff9": "burnaftersale(uint256)", +"84e9ec37": "bonusTokenRateLevelFour()", +"84ea2e31": "GetDOTNumRevokableHashes(bytes32)", +"84eb11ce": "DoggyToken()", +"84eba00c": "tokenholder()", +"84ebd065": "NunesTestCoin()", +"84ebde52": "Under_the_Hood()", +"84ec480c": "marketToken2020()", +"84ecdaf6": "advanceState()", +"84ececf2": "userCreateSaleIfApproved(uint256,uint256,uint256,uint256)", +"84ed49a7": "isPoweruser(address)", +"84ef0778": "tokensIssuedTotal()", +"84efe4d6": "backSkinCoinOwner()", +"84eff1d0": "walunlock()", +"84f06570": "createAllTokens()", +"84f08cd9": "TokenContract(address)", +"84f0bb96": "NMRToken()", +"84f10c35": "testTransferCreator()", +"84f19f37": "createVoting(bytes32)", +"84f1b0b8": "__flooredLog10__(uint256)", +"84f1bd4e": "fpart(int128)", +"84f1cdb7": "intFunc(int256,int256)", +"84f32395": "setAssetToExpire(uint256)", +"84f3597b": "availableRefunds()", +"84f54874": "startWeekThree()", +"84f85951": "founderWithdraw()", +"84f88cbf": "TonToken()", +"84f94221": "getRoot(bytes32)", +"84f9c928": "get_signature_block(address,address,bytes32)", +"84fa2c97": "totalCentsCollected()", +"84fae760": "hello(address)", +"84fb24a5": "_addCourse(uint256,string,uint16,uint16,string,string)", +"84fb427c": "_transferHolder(address,bool,uint256)", +"84fc8050": "nugget(uint256)", +"84fd176b": "bonusPhaseTwoDeadline()", +"84fd5477": "isAuthorizedAccount(address)", +"84fd7ef0": "TOKEN_FOUNDATION_CAP()", +"84fdab0d": "pickConsolationPrize(uint256[])", +"84fde1c6": "calculateScorersForTeamIds(uint256,uint256)", +"84fdec83": "ownerCanWithdraw()", +"84fe5029": "weiCap()", +"84feab93": "Emit_OffchainPaymentFlag(address,address,bool,bool)", +"84feed25": "VoxelX()", +"84ff2e45": "coreTeamTokenSupply()", +"84ff435f": "UpdateUserNickName(address,bytes32)", +"84ffc422": "BountiesTokensHolder(address,address,address)", +"84ffcb5d": "setContractsMiniGame(address)", +"85000a86": "TitleUpdated(uint256,uint256,string,string,string,uint256)", +"85002354": "ZillowBlockchain(uint256,uint256)", +"85003d30": "CollateralTransferCanceled(uint256)", +"85007e54": "Zakat()", +"8500d919": "getBorrower(uint256)", +"85011eec": "Movie(string,string,uint256)", +"8502293b": "newCs(address)", +"85025396": "setProviderClientsCount(uint256,uint256)", +"8502935a": "maxInflationRate()", +"850382c8": "prova3(uint256[])", +"8503a6bf": "ERC721TokenMock()", +"8503b6a5": "addProposal(address,uint256,address,string,uint256)", +"850595c1": "contributorID(uint256,address)", +"8505a074": "ClassyCoin()", +"85071d9c": "SCARABToken1()", +"8507bee8": "joinedCrowdsalesLenMax()", +"850895dc": "CheckValidDate(uint8,uint8,uint16)", +"8508a693": "doTeamMinting()", +"8508d88f": "sendICOSupplyToken(address,uint256)", +"85093668": "jackpotBank()", +"8509a001": "rewardDenominator()", +"850a1532": "voteSnapshotBalance(address,uint256)", +"850a2e78": "setResults(address,uint256,uint256[2])", +"850a4621": "emitActiveChanged(bool)", +"850a7eca": "endTimeLockedTokensAdvisor()", +"850c1a0c": "earlyResolveA()", +"850c362a": "initCard1()", +"850d8a14": "CryptolottoToken()", +"850d9afb": "ENDTIME()", +"850db35d": "didPayInterest(bytes32,address,address,address,uint256,bool,uint256)", +"850e141a": "updateYearsSinceRelease()", +"850e2bc4": "setLLV_edit_22(string)", +"850e3760": "getShine(uint16)", +"850e47db": "KudoCoin()", +"850f2e2c": "findTileByAddress(uint16,uint16,address,address)", +"850fb62d": "transferProcess(address,address,uint256)", +"85107367": "stakeAddress()", +"8510b43f": "isSaleRunning()", +"85113156": "etherERC20()", +"8511b843": "addSpaceshipMoney(uint256,uint256,uint256)", +"85138313": "PureAirToken(uint256,string,uint8,string)", +"8513c619": "addManager(address,address)", +"8513db86": "test_threeValidAndInvalidEqAddress()", +"851545de": "transformAgent()", +"8515e413": "payUserOutgoingTransactionCommission()", +"851645e6": "getRandomUint(uint256)", +"85174a31": "transferToSelf(uint256,bytes)", +"85177f28": "EthReceived(address,uint256)", +"8518b0ad": "scheme()", +"851a33e9": "getBylawsMilestoneMinPostponing()", +"851a61d7": "Dist(address,uint256,address)", +"851ad4d6": "getNumDragons()", +"851aea7a": "setUser(string,string,string,bytes32)", +"851b6ef2": "getAllVotes()", +"851bb3c3": "bonusEnds15()", +"851c0cf6": "bltMaster()", +"851c27de": "earlyStageSetting()", +"851c4414": "getEvabotContractAddress()", +"851c5bf6": "addVestTokenAllocation(address,uint256)", +"851c9d11": "DGB()", +"851cad90": "THOUSAND()", +"851cc7f9": "coinMultiplayer()", +"851d1c27": "_transferFrom(address,address,address,uint256)", +"851d46f3": "internalCheck()", +"851e6b3a": "buy100Price()", +"851ee3e2": "ApproveERC20()", +"851f9e20": "chargeOff(address)", +"85203aa2": "lengthNotEqual(uint256[],uint256,string)", +"85209ee0": "contractState()", +"85216449": "checkCustodian()", +"8521b59c": "addDataPoint(int256,uint256,bytes32)", +"852263aa": "LogThresholdChange(address,uint256)", +"8522ac8c": "testTransferOwnership()", +"85233869": "NumberOfMiners()", +"8523930a": "calculateNoOfTokensToSend()", +"85252e82": "setTransferFee(address,uint256)", +"85255ab0": "Nero()", +"8526492f": "getTokensAmount(uint256)", +"85265ee6": "press_address()", +"8526d092": "isValidContributorAddress(address)", +"85271fa1": "_validateUSDAmount(uint256)", +"85276721": "DevReward(address,uint256)", +"8527831b": "getIndex(bytes32)", +"8527c3b0": "changePriceRandomFight2Death(uint256)", +"8528b7b0": "WILDToken()", +"852980a0": "addCourses(string,string,string,string,string,string)", +"852987f3": "getRecoverSigner(uint40,uint256,uint8,bytes32,bytes32)", +"8529d576": "toUint(bytes)", +"852a12e3": "redeemUnderlying(uint256)", +"852a6bd4": "getBalanceOfPlayer(address)", +"852a7d6c": "setExtraDistribution(address,uint256)", +"852ada4b": "nonFungibleOfOwnerByIndex(uint256,address,uint128)", +"852b6121": "setInitialBlockTimestamp(uint256)", +"852c061a": "axiesPrice(uint256,uint256,uint256)", +"852c5662": "adjustFlame(uint256)", +"852ccf2b": "YIYSToken(address,uint256)", +"852da11d": "tokenCreationCapPreICO()", +"852dbfc6": "pickURL()", +"852dc589": "setQuitLock(address)", +"852dce8d": "changeOraclizeGasLimit(uint256)", +"852e9f46": "transferAndFreeze(address,uint256,uint256)", +"852ede8d": "removeToken(string,int256)", +"852f31c6": "teamStageSetting()", +"852f6662": "isProgramFactoryContract()", +"852f8b74": "getBookSigner(bytes16)", +"85307bef": "TronToken(address)", +"85318217": "RegisterMine(string,uint256,uint256)", +"8531bb56": "SaleHasEnded()", +"8532137c": "Lexzoom()", +"853255cc": "sum()", +"853262a2": "tgrSettingsPartContributorIncreasePerStage()", +"85349e01": "totalDeveloperCut_()", +"8534b3a8": "setParticipateFee(uint256)", +"853504f3": "OpenToken()", +"8535490f": "redeemEther(uint256)", +"853552d7": "_slotAddNew(address)", +"8535d2ec": "sendBatch(address[],uint256[])", +"8536a50e": "_setBurnFeeProp(uint256)", +"8536bf8f": "BuyIPG()", +"85370965": "distributeVault(uint256,uint256,uint256,uint256,uint256)", +"853717bb": "calcBurnAmount(uint256)", +"85378346": "getChancePowerWithBonus(address)", +"853828b6": "withdrawAll()", +"853a4ec2": "grantReserveToken(address)", +"853a9d32": "EGGS_TO_HATCH_1HIPSTER()", +"853b59d7": "phase_1_token_price()", +"853d814e": "MyFairToken()", +"853df275": "duel(address)", +"853e88fe": "hashVM()", +"853f636b": "sendAllTokensToFounder(uint256)", +"853f7e98": "BDLToken()", +"85423912": "setDiscipleItem(uint256,uint256)", +"854254e8": "buildLoanOrderStruct(bytes32,address[6],uint256[9])", +"85431ec8": "setRate333()", +"85439f82": "someFunction4()", +"8544023a": "nokuMasterToken()", +"85443a2b": "CampaignContract()", +"85444de3": "getChildChain(uint256)", +"85445829": "numMatches()", +"85448c59": "getBountyAddress()", +"85461f69": "calcReward(uint256,address)", +"854642e1": "mintNewDrawings(uint256)", +"8546d393": "Anatomia(uint256,uint256)", +"85473be1": "maximumCoinsPerAddress()", +"85476d6e": "GetCurrentTypeSaleItem(uint256)", +"854772ea": "getUserTotalReward(address,bool,bool,bool)", +"8547af30": "lastBidder()", +"8547bb3a": "publicSaleMode()", +"85482f89": "setOnePowerAge(uint256,uint256)", +"8548cc21": "allocateOwnerTokens()", +"8549b326": "isSettable(uint256,string)", +"8549d6f4": "MayanProtocolContract(uint256,uint256)", +"854a3d64": "LogStartSale(uint256,uint256)", +"854a9cc4": "ImpeachmentProposed(address,string,uint256,address)", +"854b1cdf": "curPayTableId()", +"854bb344": "NoblesseOblige()", +"854bec87": "payback()", +"854c2e1e": "HitToken(string,string,uint8,uint256,address,address,address)", +"854c4a0d": "DownSuccess(string,address)", +"854c584d": "AdsventureToken()", +"854cb674": "TheIlluminati()", +"854cd978": "ClaireToken()", +"854cff2f": "setWhitelist(address)", +"854e32cc": "revenueShareDistribution(address)", +"854e85c6": "lifeEvents(uint256)", +"854ecd23": "Vaynix()", +"854f1663": "setNonprofitDisbursementAddress(address)", +"854f1a1c": "VIVARefundVault(address)", +"854f3988": "eighth_withdrawal(uint256)", +"854f4817": "buyKissBTCWithCallback(address,uint256)", +"85502264": "deptcheckrespond(address)", +"85506473": "GnosisToken(address,address[],uint256[])", +"855085b8": "interCrypto()", +"8550aaf0": "BONUS_TIER_9_LIMIT()", +"8550cf46": "buyGameCoin(uint256)", +"855114c9": "buyNation(uint8)", +"85511d5f": "setEmergencyCode(uint256,uint256)", +"85512e5b": "EthlanceUser2(address)", +"8551884a": "authorizeListingService(address)", +"8551b896": "pre_tokensSold()", +"8551e3fe": "savePost(bytes32,uint256)", +"85522831": "numIntervals(uint256)", +"85528394": "currentClaimPriceWei()", +"85529636": "getSiteTokenId(uint256,uint256)", +"85530d7c": "setPetLastBreedingTime(uint64)", +"85535cc5": "setVaultAddress(address)", +"8553f6fb": "hardCapDividends()", +"855460d8": "externalBuy(address,uint256,uint256)", +"8554d60a": "addTenParticipants(address,address,address,address,address,address,address,address,address,address)", +"8554d92c": "verify(uint256,uint256,uint256,uint256,uint256)", +"85550c6b": "tradeKey(bytes32,bytes32)", +"8555cde9": "Permissioned(address,address,bool)", +"8555de47": "BlackPyramid()", +"85561120": "TPTToken(uint256)", +"85564b97": "MasterWithdraw()", +"85565585": "crowdsaleOwner()", +"85580c5b": "userinverst(uint256,address)", +"85586e8a": "allocateCommunity(address,uint256)", +"85587375": "restartAssign()", +"855876d5": "countCliDreams(address)", +"8558c0af": "createBag(uint256)", +"8559fd88": "requestRandom(uint8)", +"855b7f5b": "getAdvancedTransfer(bytes32,bytes32)", +"855b842d": "isUserInBlackList(address)", +"855c145b": "specialManagerCountInt()", +"855c45e7": "EIP20Factory()", +"855c8999": "GetSlug(address)", +"855c95f1": "createETHAuction(uint256,address,uint16,uint256)", +"855ce579": "setTwoPowerAges(uint256,uint256,uint256,uint256)", +"855ceb7d": "AirToken()", +"855d0700": "insertList2(uint256,uint256,uint256,uint256,string,uint256,string)", +"855d7c21": "updateTokenBaseRate(uint256)", +"855e0629": "setIconRate(uint256)", +"855eafa7": "get_maker_fee()", +"855f2b3a": "createGen0Auction(uint256[2])", +"855fe4c0": "ifSuccessfulSendFundsTo()", +"855fe6ed": "getConfigEntryInt(bytes32)", +"85602ad5": "getPreviousValidators()", +"85609b1c": "compose(string)", +"8561d136": "currentRunningAddress()", +"8561dc0b": "tokenPostIcoUsdCentPrice()", +"8562e452": "ADVISORS_SHARE()", +"8564b2cd": "listItem(uint256,uint256,address,uint256)", +"8564c284": "setCompte_34(string)", +"85652d1f": "getInvoiceAddress(uint256)", +"85654c9c": "setMembershipRoster(address)", +"85663119": "initialPrize()", +"85666a7c": "TEAM1()", +"85673296": "DepositBalance()", +"85673fb8": "follow(address,uint256,address)", +"8569cc4e": "release_4()", +"856a89fd": "drawRaffle(uint256)", +"856b3108": "UpdateInitiateContractAddress(address)", +"856b7d2c": "SignDividend(uint256)", +"856bb9cc": "addConsent(address)", +"856c0181": "countriesStatus()", +"856c486b": "WoodyToken()", +"856c6bd1": "checkRose(bytes32)", +"856c71dd": "isAvailable()", +"856c8922": "getGameRules(uint256)", +"856cddb0": "DummyOVOToken()", +"856dc78e": "getWarriors(uint256[])", +"856de136": "FAPFundDeposit3()", +"856deacf": "findTag(string)", +"856df931": "LYB(string,string,uint256)", +"856e8488": "erc20TokenContract()", +"856eb2d1": "submitTransactionWithSignaturesToken(address,address,uint256,uint8[],bytes32[],bytes32[])", +"856ed703": "currentCap()", +"856f3080": "WhatWasMyHash(bytes32)", +"8570153e": "publish(string,string,bytes,address[])", +"85716e2f": "changeAdminer(address)", +"8571baff": "SimpleCrowdsale(address,address,address,address)", +"8572e364": "scale(uint256,uint256,uint256,uint256,uint256)", +"8573d4aa": "OwnershipTransferPending(address,address)", +"8574ddf9": "snailmasterReq()", +"8575052a": "set_fees(uint256,uint256)", +"857512b4": "airdropCountLimit2()", +"85760377": "PixelTransfer(uint16,uint16,uint256,address,address)", +"857637c9": "ShopDexToken2()", +"85766cc3": "Calculation(string,string,string,string,address)", +"8577efc5": "DIGI()", +"8577ffc1": "unofficialUserSignUpFee()", +"857835f9": "getPostsFromIds(address[],string[],uint256[])", +"85787c8b": "encode(uint256[],uint256[])", +"85796a2d": "bonusClosingTime0()", +"8579c10e": "payDevelopersFund(address)", +"8579cbde": "getPrice(string,uint256,address)", +"857ac1c9": "TokensBurned(address,address,uint256)", +"857b3224": "setOAR(address)", +"857b575e": "qquizwinnerToken()", +"857b7dfc": "buyLittleDragonGirlLottery()", +"857ba7fb": "MAX_CONTRIB_CHECK_END_TIME()", +"857bcb2c": "adminAddTrustedCurrencyContract(address)", +"857cc1c4": "ExchangeGift(string)", +"857cd569": "FundDeposit(address,address)", +"857cdbb8": "getPublicKey(address)", +"857cfff9": "homeDailyLimit()", +"857d39d7": "CCH_LLV_FIFA_1()", +"857d4c07": "throwScraps(uint256)", +"857e6a99": "decreaseTokens(address,address,uint256)", +"857f4864": "getNextSnapshotTime()", +"857f54e4": "MonethaGateway(address,address)", +"8580563c": "finalize(bytes,bytes,bool)", +"8580b71b": "getLoanIDbyClient(uint256)", +"8580eb2f": "setFeeBalance(uint256)", +"858110a5": "proposeShutdown(uint256)", +"858155e4": "subcontractExecuteCall(address,uint256,bytes)", +"8581dc7c": "SociBit()", +"85820925": "getCompte_17()", +"8582ac21": "getIcoInfo()", +"8582b7dd": "OrxERC20()", +"8582e554": "transferBy(address,uint256)", +"858310d8": "getPreICOAddress(uint8)", +"85839731": "setKittyContractAddress(address,address)", +"8583b1b8": "_setUserInfo(address,uint256,uint256)", +"85861b15": "setUnboundedLimit(address,bool)", +"85867cd5": "BDSMtoken()", +"8586b2f0": "getPermission(address,string)", +"8586e75b": "ChangedResource(bytes32)", +"8587be6e": "ceil(uint256,uint256)", +"8587edbb": "lockEndBlock()", +"8588b2c5": "adopt(uint256)", +"85899cee": "CryptoThreeKingdoms()", +"8589c725": "deleteWork(uint256)", +"858ac4d8": "TransferOwner(address)", +"858c7559": "chainIDSeed()", +"858ced35": "setUser(address)", +"858e41b4": "lemonContract()", +"858e58d6": "RemapImportedNotUsed()", +"858f84e7": "WTFToken()", +"858fa2f5": "setArrayIndexValue(bytes32,uint256,address)", +"85903f67": "setUnofficialUserSignUpFee(uint256)", +"85908ffa": "buyTokensPostHook(address,uint256,uint256)", +"85909ac6": "operate(address)", +"8592b778": "_rand()", +"8594bed0": "cancelMintRequest()", +"85952454": "newOwner(address)", +"8595c9ff": "diff(uint256[])", +"8595f8b1": "getGasPricePctOfBetValue()", +"8596982d": "getNotesCount()", +"8596d9ed": "transferInternal(address,uint256,address)", +"8597705f": "DataEquip(address)", +"8597eb6e": "ericukis(uint256,string,uint8,string)", +"859832e6": "locationsLength()", +"85984e69": "WavesCommunityToken()", +"859971dc": "initialFunding()", +"8599d0d8": "buildIdentifier(address,address,address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"859a711d": "icoBonus2EndDate()", +"859a954b": "peace(string)", +"859b97fe": "cancelAuction(address,uint256)", +"859bbfee": "floatAdd()", +"859bcc71": "allowDisbursePaymentWhenPaused()", +"859ccc72": "setPlayerVirusNumber(address,uint256)", +"859d1bc7": "updateLeftLottery()", +"859da4e3": "transferParityOwnership(address)", +"859e0547": "createBounty(address,string)", +"859e25df": "giveProjectMoreVotes(address,uint256)", +"859e7d32": "getEpochData(uint256)", +"859f5717": "AuctionSuccessful(address,uint256,uint256)", +"859f63dc": "checkRewards(uint256[])", +"85a013e0": "setAnswer(uint256)", +"85a08f41": "buyLimitSupplyMax()", +"85a09f6f": "withdraw123()", +"85a10b30": "burningAdress()", +"85a143f4": "DailyRoi()", +"85a156af": "activityFunds()", +"85a17a1a": "isValidBet(uint8[4])", +"85a1c242": "PSM_PRICE()", +"85a227fd": "APC()", +"85a242d7": "teamTokensAccount()", +"85a2675b": "isConfirmedWithdraw(uint256)", +"85a26d7d": "getAllPeople()", +"85a2dd15": "hasAccess()", +"85a2f6af": "donateToken(address)", +"85a30c33": "changeContractAddress(address)", +"85a33ce9": "exitinverst(address)", +"85a345e2": "disTrust(address)", +"85a34f4a": "getGameSums(uint256)", +"85a38635": "votingEnd()", +"85a4757e": "releasedAmountBlocksIn(uint256,uint256)", +"85a49f2e": "verifyPass(address)", +"85a52584": "SettingsChanged()", +"85a735dd": "partAllocationLength()", +"85a8f42e": "diff(int256[],int256)", +"85aa6103": "auctions()", +"85aa6e09": "granted(address)", +"85aa92a7": "storageAddress()", +"85aaff62": "transcoder(uint256,uint256,uint256)", +"85ab0c19": "tokenProvenance(uint256)", +"85aba275": "assign(address)", +"85ac2f7b": "getListedTime()", +"85add95b": "Spike()", +"85ae067b": "func_040B()", +"85ae2f1c": "sunFinished()", +"85ae6d2d": "OfferingOpens(uint256,uint256)", +"85af4142": "verifyTeam(uint256)", +"85b018e9": "isSubjectRaiseTap(uint256)", +"85b09a01": "DIVC()", +"85b12c7c": "launch(uint256)", +"85b1423e": "returnAll()", +"85b142ed": "getAccountState(bytes32)", +"85b2ff8f": "getWeightedRandomMember(uint256)", +"85b31d7b": "myInfo()", +"85b39fc1": "CONTRACTIUM()", +"85b3c420": "createWeight(uint256)", +"85b3ed4e": "GoalReached(uint256,uint256)", +"85b443b6": "econReserveWallet()", +"85b4bb53": "getSettings()", +"85b51737": "addSafe(uint256,uint256)", +"85b55c07": "withdrawFeesToPoolOwners()", +"85b6824f": "setMinterWallet(address)", +"85b688de": "PRIVATE_STAGE_START()", +"85b73d3c": "testCreateNewRevision()", +"85b75b1e": "toogleStatus()", +"85b86188": "isSaleClockAuction()", +"85b8c64a": "bonusFreeLOT()", +"85b8d86f": "CrowdSaleFinished(string)", +"85b923ca": "getCandidates(bytes32)", +"85b94536": "debug_judge(bytes32[13],uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", +"85b9c729": "OnWithdrawTo(address,address,address,uint256,uint64)", +"85b9f607": "buyTokensWithGuarantee()", +"85ba0052": "stringToUintNormalize(string)", +"85ba9a99": "setMinimumHydroStakes(uint256,uint256)", +"85bac237": "addPayment(address,uint256)", +"85bb7d69": "answer()", +"85bb821b": "WTO()", +"85bb8e29": "continuousSale()", +"85bbb53a": "ancestorBuffPercentage()", +"85bdc4a2": "lastBlock_v16()", +"85bddb97": "addOnOneStage(address,uint256,uint256)", +"85bde3f2": "SaddlePr(uint256)", +"85be2f02": "SampleCrowdsaleToken(string,string,uint8,uint256)", +"85be8fe6": "confirmReceivedAt(uint256)", +"85bf96a0": "JOP(uint256)", +"85bfe55d": "getUserByEmail(bytes32)", +"85bfff9c": "sayNoNo(uint256)", +"85c07546": "TransformCoin()", +"85c09f26": "topTotalSupply()", +"85c1057b": "payAndHandle(uint256,address,uint256)", +"85c15d9a": "exchangeRates(address)", +"85c3649f": "registerSelf(bytes32)", +"85c373c3": "releaseAccount(address)", +"85c3bb6f": "getMsg2()", +"85c4e3d1": "sendSubscriptionBonus(address)", +"85c53cf1": "giveAccess(address,bytes32)", +"85c5e9f8": "mimin(uint64,uint64)", +"85c64029": "set_prices(uint8,uint8,uint8)", +"85c653ba": "Divsforall()", +"85c78fac": "retryOraclizeRequest(uint256)", +"85c7a953": "WithdrawFullBalanceFromBankAccount()", +"85c855f3": "setStake(uint96,uint128)", +"85c8d362": "CTM()", +"85c8f447": "totum()", +"85c95d30": "setResourcesOtherManager(address,uint8)", +"85c9dd72": "GCOXToken(string,string,uint8,uint256)", +"85ca165a": "count_donors()", +"85cb2e6e": "refreshEmissionReleaseTime()", +"85cb469a": "getIcoFund()", +"85cb4ea2": "getPunchCardsInternal(address)", +"85cba6b1": "getFallback()", +"85cba722": "EGLSold()", +"85cbc881": "totalUSDRaised()", +"85cc3114": "doDeposit(address)", +"85cc51c2": "destTokensTeam()", +"85cc63ec": "getCurrentMinigamePrizePot()", +"85cc6fba": "boomrToken()", +"85cc9a2b": "issueKey(bytes32,address)", +"85cd233c": "getResidualEtherAmount(uint256,uint256)", +"85cdafa6": "teamOneVolume()", +"85cf61ef": "payRake(uint256)", +"85cfdec7": "buyKWHAgainstEther()", +"85d02c8a": "changeMaximumInvestmentsAllowed(uint256)", +"85d178f4": "withdrawWallet()", +"85d19a25": "getPositionId(uint256)", +"85d1be13": "preSaleSecondPrice()", +"85d3b5bd": "policyID(uint256)", +"85d45d34": "comments2()", +"85d51d19": "contributorETHBalance(address)", +"85d544be": "transferAndLockUntil(address,uint256,uint256)", +"85d559ee": "TbookToken(uint256,string,string)", +"85d5c971": "logTransfer(address,address,bytes32)", +"85d5e631": "disableTokenTransfers(bool)", +"85d61e2a": "supplyNum()", +"85d63cce": "REMAINING_SUPPLY()", +"85d71df1": "investxPlatform()", +"85d77e5f": "priceExpiration()", +"85d80458": "m_deployer()", +"85da1192": "setMaxFaucet(uint256)", +"85daafe6": "capitalRaisedTarget()", +"85dacd5b": "voteSnapshotBalanceAuto(address,uint256)", +"85db2dda": "PayoutQueueSize()", +"85db2e3a": "PoD()", +"85db66e8": "addGroupMembers(bytes32,address[])", +"85dc3004": "setFundAddress(address)", +"85dc6721": "emptyShipCargo(uint32)", +"85dcbb5a": "returnMember(address)", +"85dcee93": "descriptionHash()", +"85dcfbd4": "VernamWhiteListDeposit()", +"85dd1fbd": "bet_on_team_1()", +"85dd2148": "getSaleDate(bytes16)", +"85ddb747": "transferFromPosttgefund(address,uint256)", +"85ddf726": "dismissOperator(address)", +"85de4841": "uint2str(uint64)", +"85de4f72": "luckybuyTracker_()", +"85dee34c": "query2_withGasLimit(uint256,string,string,string,uint256)", +"85defaf4": "voteEnds()", +"85df508f": "tip_rate()", +"85df51fd": "blockHash(uint256)", +"85e00e4b": "bezpolToken()", +"85e040b1": "Invested(uint256,address,uint256)", +"85e050e4": "get_property_contact(uint256)", +"85e05445": "MartiniumToken()", +"85e0832c": "totalMintSupply()", +"85e1684c": "computeS(uint256,uint256)", +"85e344f7": "SmartInvestmentFundToken(address)", +"85e36cc2": "foundationAmount()", +"85e3f058": "getIdentity(uint256)", +"85e41e7e": "TokenFree(uint256)", +"85e436bf": "setBuyRate(uint256)", +"85e567d4": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[1])", +"85e57f3c": "updateLogoUrl(bytes32,bytes32)", +"85e5908e": "Group_3()", +"85e5bb3a": "Security_AddPasswordSha3HashToBankAccount(bytes32)", +"85e5d7ee": "mintAll(uint256[])", +"85e5f08a": "updateVerifiedSign(address,address,string,uint8,string)", +"85e612e4": "getBirthYear()", +"85e61b4a": "processFundingSuccessfulFinished()", +"85e61e67": "set_arbits_whitelist(address,address,bool)", +"85e68531": "revokeAccess(address)", +"85e7d4cb": "CCC()", +"85e870b3": "default_rate()", +"85e91347": "initializeSaleWalletAddress()", +"85e99be4": "updateHighestPrices_(uint256,address)", +"85e9bd2b": "setAdminAddress(address,address)", +"85eac05f": "changeOwnerAddress(address)", +"85eb6109": "getAddressClaims(address,address,uint8)", +"85ec419a": "setTokenTwdt(address)", +"85ed5cf9": "resetAlias()", +"85eddeea": "setReward(address[],uint256[])", +"85edf68d": "initVestingStages()", +"85ee292c": "airdropTesterFinal(address[],uint256)", +"85ef4ae7": "f_internal()", +"85ef5a8a": "GermanCoin(address,address)", +"85efa3aa": "setHold(address)", +"85efb721": "fillTheBank()", +"85eff0ef": "hardcoreBattleWith(uint256,uint256)", +"85f01859": "setWord()", +"85f07a2b": "CALLER_EXCHANGE_SHARE()", +"85f07b64": "confirmedAmount()", +"85f07bbe": "MIN_PLAYERS()", +"85f0e72c": "uintToStr(uint256,uint256)", +"85f0f098": "allowWithdrawals()", +"85f16544": "EdgarRichardWunsche()", +"85f19bc4": "giveDividend()", +"85f255ea": "getUserFactoryContractAddress()", +"85f2aef2": "team()", +"85f2d854": "createManyDrinks()", +"85f2e4b1": "_strConcat(string,string,string,string)", +"85f3c568": "LogContribution(address,uint256,uint256)", +"85f45250": "addFunds(uint256,uint256)", +"85f517d4": "account3Address()", +"85f52912": "TGRUPToken()", +"85f52984": "addPrecondition(address)", +"85f59db3": "CheckN2Exception(bytes32,uint32)", +"85f63a4a": "preICOBeneficiaryAddress()", +"85f671a6": "requestWithdrawal(bytes32,uint64,bytes32[],uint256[],uint256[2],uint256)", +"85f67ae4": "addEpisode(address)", +"85f8c16d": "claimHours(int256)", +"85fa33eb": "declareDividend(uint256)", +"85fab341": "transferTokensAfterEndTime(address,uint256,uint256,uint256)", +"85fae602": "getInsurance(uint256)", +"85fbd17f": "PonzICO()", +"85fbdd47": "_order(uint256,uint256,uint8)", +"85fbdefc": "masterBalanceOf(bytes32,address)", +"85fc835e": "getSoftcapUsd()", +"85fcb4a8": "findPrevOrderId(uint128,uint128)", +"85fcd363": "votesArr(address)", +"85fceea8": "getCountSubscribers()", +"85fdeba7": "vendorAllocation()", +"85fe0448": "testThrowRestartNotUpdatable()", +"85fe551a": "ownerGrace()", +"85fe6200": "recordEndedGame(uint256)", +"85fed812": "ERC20Lookup()", +"85ff5e13": "SkinCoin()", +"85ff70de": "_payFees()", +"85ff96a7": "getTotalSellingMonsters()", +"86001519": "totalProfit()", +"86005b14": "allocateVestable(address,uint256,uint256,uint256)", +"8600e40b": "notifyWithdraw(address,uint256)", +"8600f2ec": "totalChildTokens(address,uint256)", +"86013322": "withdrawSaleBalances()", +"860241c2": "TAXToken()", +"8602c8b6": "countryofN(address)", +"8602c8d3": "ethSendDifferentValue(address[],uint256[])", +"8603d31a": "auctionDetails(uint256)", +"860427fc": "setGPSRatio(uint256)", +"86047946": "_processHistoryItem(bytes32,bytes32,uint256,address,address,uint256,bytes32,bool)", +"86048c9a": "totalCashout()", +"8605c97e": "setMarginThresholds(uint256,uint256)", +"86060884": "SafeGuard(bytes20,uint256,uint16)", +"86066750": "HelloWorld(string)", +"86068367": "DYITToken(uint256,string,string,uint8)", +"8606f905": "balanceOf(address,bytes)", +"86070cfe": "recoveryVaultAppId()", +"86073441": "signToApproveAddTokenData()", +"860772a9": "establishBorrowerReturnFiatPerEthRate(uint256)", +"860779e7": "setMinBuy(uint256)", +"860838a5": "frozenAccounts(address)", +"8608e58b": "sendOwnerDeposit(address)", +"86096578": "getRetailer(uint256,address)", +"860aefcf": "limits()", +"860bb34a": "SIGMA()", +"860c5ed6": "testVote()", +"860c851a": "votePrice()", +"860caf69": "HashAdded(address,string,uint256)", +"860d7273": "masterKeyActive(address)", +"860e6185": "commitTo(bytes32)", +"860e9960": "BetPriceLimit()", +"860e9b0f": "updateRegistryPrice(uint256)", +"860f5048": "baseSupply()", +"861004ae": "Visus(address)", +"861080ae": "transferMembership(address)", +"8610f045": "withdrawOffer(uint256)", +"86115c1d": "MyPurchaseContract(address)", +"8611643a": "Withdraw(string,string)", +"86116c12": "PerkscoinToken(uint256)", +"86117319": "buy_the_tokens(bytes)", +"8611e330": "FishbankBoosters()", +"86127ecf": "oraclize(bytes32,bytes,bytes,bytes,string,bytes,bytes,uint256,bytes)", +"8612d049": "isLocked(address,address)", +"8612ee13": "addMatch(string,string,string,bool,uint8,uint8,uint256)", +"86145875": "contributeInternal(address,uint256,uint256)", +"861654f7": "updatefundingStartTime(uint256)", +"8616865d": "ReferredInvestorAdded(string,address)", +"8616bc8b": "contributedTotal()", +"8617457a": "start_()", +"86188c97": "fetchOrdersForMerchant()", +"86190d62": "buyable(address)", +"86192c36": "privateOfferingPercentage()", +"861c3385": "blocksquare()", +"861c3a09": "queryByUser(bytes)", +"861c9c79": "transferToComposition(address,uint256)", +"861cab52": "canSendGameGift()", +"861d4e51": "NOETToken()", +"861d7daf": "deleteImage(uint256)", +"861dd0a5": "releaseCats(uint32,uint256,uint256,string)", +"861e2e43": "orderCore(uint256,uint256,uint256)", +"861e5d6a": "CryptoKotik()", +"861ec457": "SILVER_AMOUNT_TPT()", +"861ed3ea": "controllersByPartition(bytes32)", +"861f8a52": "testThrow_2_invalidOwner_accessRestrictionThrow()", +"861fcefb": "Token1Token()", +"86200842": "getSellDailyLimit(uint256,bytes2)", +"8620410b": "buyPrice()", +"86212913": "queryAuction()", +"86216ace": "NotThrowingToken(uint256)", +"8622031f": "setModuleAddress(string,address,bool)", +"862235f5": "EthertoteAdminAddress()", +"8622a689": "expiresAt()", +"86231246": "returnsOneNamed(uint256,uint256)", +"86231b9e": "contentHostPaidByAO(bytes32)", +"86237e7b": "setAngel(uint8,address,uint256,uint16)", +"862440e2": "setURI(uint256,string)", +"86260cfe": "UpdateUserEmail(string)", +"86269a88": "checkBetNumber(uint8)", +"86271d8b": "minPurchaseInEth()", +"8627df46": "buyTickets(uint256,uint256)", +"862882e5": "startAuction(string,uint256)", +"8628892e": "Initialize(address,address,bytes32,address,uint256,bytes32,address,uint256,bytes32,uint256)", +"8628aca9": "setIds(uint256,uint256)", +"862a4bf2": "tokenHolder(uint256)", +"862b092b": "getTokenName()", +"862b525c": "gameMiningTokenStartTime()", +"862b6683": "setValues(uint256,uint256,uint256,uint256)", +"862c5e16": "validatePurchase(address,uint256,int256[],int256[])", +"862cb14e": "DMI()", +"862cdef3": "auctionTank(uint256,uint256,uint256,uint256)", +"862d0d4b": "_weiToFinney(uint256)", +"862eb9c0": "setGoldReward(uint256)", +"862ed594": "XmonetaToken()", +"862f4517": "hasVoting(uint256,uint256)", +"862fd38c": "concat(uint8,bytes32,bytes32)", +"86312b1b": "TripsCoin()", +"86314af9": "BetOnHashV84()", +"8631890e": "PLANET_PRICE()", +"86318bc4": "ethBioxRate2()", +"86321f95": "switchClaimerAndRemoveOldOne()", +"86323e85": "isSellingNow()", +"8633497f": "angelCurrentAmount()", +"863451dd": "donateEther()", +"86346c42": "awards(uint8)", +"86348afa": "ColorReserved(address,uint256)", +"863524b1": "partnersKey()", +"86356ab9": "finalizeRefunding()", +"8635b527": "resetPainting(uint256)", +"8635f45d": "getSpaceshipProductAttributesByModel(uint16)", +"863682f4": "getScore(uint32)", +"86377b63": "registerLoanReplaceDuplicated(address,uint256,uint256)", +"863843bc": "bonusSupply()", +"8638aa65": "DEBUG_MODE()", +"8639ae69": "getAllCrySolObjects()", +"8639b0d7": "getBalanceDiscrepancy()", +"863a0372": "hex2dec(uint256)", +"863a03e0": "salvage(address)", +"863ac22b": "EtherGame()", +"863b3b66": "purchaseThemedSpinner(string,uint256)", +"863c51a9": "setCustomerSignature(address,uint256,bytes32)", +"863c607c": "ReactioonToken()", +"863d62ac": "Goldmint(address,address,address,address,address,address)", +"863da000": "disburseAuthorizedPayments(uint256[])", +"863e24d6": "updateBonusTicketsPercentage(uint8)", +"863e76db": "ONE_DAY()", +"863e7e4b": "getCurrentPhraseInfo()", +"863e8320": "initGPS()", +"863f2a19": "adjustTime(uint256,uint256,uint256,uint256,uint256,uint256)", +"863f40ac": "syp1(address)", +"863f52b4": "makerBetsCount()", +"864059ac": "clearingPriceComponent()", +"86420710": "setReceivers(address[],uint256)", +"8642269e": "buyProduct(uint256)", +"86428900": "SetPeriodITO_startTime(uint256)", +"86432925": "profitDistributionContract()", +"8643d01d": "throwsSaleWalletIncorrectSaleAddress()", +"8644ddd9": "WOB(uint256,string,string)", +"86452295": "getPointOf(uint256)", +"86457702": "authorize(string,address)", +"8645a3da": "ATTR_PRODUCIBLE()", +"8646b5cb": "marketTotalEarning()", +"8646fb43": "Electrominer()", +"864757a8": "minFinneyToKeep()", +"8647a5dc": "getTimeLock(bytes32,bytes32)", +"86481d40": "getLevel(uint256)", +"864824a0": "phase9Price()", +"86485cdf": "setCurrentExchangeRate(uint256)", +"86489ba9": "initialize(address,address,uint256,uint256,uint256,uint256)", +"8648c0ce": "neumarkCap()", +"8648f24c": "changeVariables(uint256)", +"86496e2e": "TcToken(uint256,string,uint8,string)", +"8649c0a4": "SetEndTime(uint256,uint256)", +"864a1057": "Start4()", +"864a9a09": "__mod(bytes,bytes)", +"864aef45": "buyCard(address,uint256,uint256,uint256)", +"864af3f4": "Menu02(address[],uint256)", +"864b525c": "GoldDollar()", +"864c189b": "LBCToken()", +"864c2e94": "service_founder()", +"864ca300": "goldBalanceOf(address)", +"864ce5dc": "getWeekBonus(uint256)", +"864d1d72": "getUserCountByRole(string)", +"864d7e14": "approveAsset(uint256)", +"864da88c": "_clearBlocksProducers(uint256)", +"864dd17d": "Controller(address,address)", +"864e8cc1": "setMaxCharacters(uint256)", +"864f4e54": "PeerWalletsToken()", +"864fda69": "minNum()", +"864fff0a": "DealCompleted(uint256,address,uint32,uint32,bool,uint256)", +"86508380": "_getUncreditedPoints(address)", +"8650b6ef": "endTimePre()", +"86517df4": "concludePresale()", +"8651dc1e": "confirm(uint256,uint256)", +"865232fb": "setarg_3_input(uint256)", +"86544e11": "STARTING_SNAIL_COST()", +"8654b78d": "AttoresDigitalCertificates(address)", +"865508ef": "minSend()", +"86556071": "gracePeriodStart()", +"8655f0da": "copyAllHpbNodesByStageNum(uint256)", +"8656dcb6": "distributeTeam()", +"865733da": "MercuryCrowdsale()", +"86575e40": "changeName(string,string)", +"86578375": "withdrawFund(uint256,bool)", +"865891b0": "PlanToken()", +"8658b8b9": "checkPermission(address,address,bytes32)", +"86590955": "changeHeight(uint256)", +"86591bd6": "testFailMintWhenStopped(int256)", +"86598549": "_withdrawTokensFor(address)", +"8659d573": "getCountPosition(uint256,uint256)", +"865a4253": "prcSum()", +"865ad6c2": "levelUpCar(uint32,uint32,uint32)", +"865b0d30": "SingularityTest15()", +"865c79b2": "setImageDataLength(uint256,uint16,uint16)", +"865cc6a3": "getDErc20OwnerClaimEnabled(bytes32)", +"865dc0d9": "EndChanged(uint256,uint256,address)", +"865e288b": "getAvailableWithdrawProfitValue(address)", +"865eb3d3": "getWorkerProfit()", +"865fd239": "transfer_token_ownership(address)", +"865fe035": "addressIco()", +"86602b6b": "testControlRetractLatestRevisionNotOwner()", +"86602c84": "frozenAmount(address)", +"86609b37": "_createCard(address,uint16,uint16)", +"8660b220": "buyerRate(address)", +"8660b32b": "getSumInByGame(uint32)", +"8660bb8b": "updateAllPixelDetails(uint256,uint8,uint8,uint8,uint256,string)", +"8660cbf5": "battleDecider()", +"8661009b": "checkPayments(uint256)", +"866192a2": "getLastAuditDocumentation(address)", +"866278a8": "level_7_amount()", +"86628eed": "weisDeposited(address)", +"86630b7b": "getSaleData(uint256)", +"86633571": "DestructibleMiniMeToken(address,address,uint256,string,uint8,string,bool,address)", +"8663b4c7": "StudyCoin()", +"866408eb": "getPlayerKeysCount()", +"86647821": "NeuroDAO(address,uint256)", +"86647bac": "getBountyArbiter(uint256)", +"8666107c": "eth_received()", +"86667435": "getPercent5(address)", +"8666fca5": "holdingsOf_BEAR(address)", +"86673464": "assertEq15(bytes15,bytes15,bytes32)", +"8668a416": "assignMultipleParcels(int256[],int256[],address)", +"8669ccf4": "getFreelancers(address,uint256)", +"8669e08c": "migrationFinishedTime()", +"866b5674": "totalBountyinWei()", +"866b9323": "mintForReportingParticipant(int256,uint256)", +"866c03eb": "_unmintedTokens()", +"866d840a": "setCompte_44(string)", +"866df234": "setLink(bytes)", +"866e5162": "oslikToken()", +"866eb7b5": "initialParameter(address,address[],address,uint256,uint256,uint256,uint256,uint256,uint8,uint8,uint8,uint32[])", +"866f4555": "Basic23TokenMock(address,uint256)", +"866f6736": "trustedChildWithdraw()", +"867022d1": "Initialise(address)", +"86703c9c": "getProviderClientsCount(uint256)", +"86707026": "midEtherBonusLimit()", +"8670cc7c": "BlueDragon()", +"8670e183": "createLegendaryAuction(uint256,string)", +"8671090e": "setSavedBalanceToken(uint256)", +"86715acf": "BodyOneToken(address)", +"8671b894": "cancelOrder(uint256[3],bytes32,bytes32,uint8)", +"8671ef4d": "grg(address)", +"86723215": "createMarket(bytes,uint256,uint256,address)", +"8672e853": "LogOwnerAdded(address,address,address)", +"8672f1bc": "isProposalActive()", +"8673094f": "allGuGiven_()", +"867387d4": "BurnableToken(address[50])", +"86749d97": "ZOOToken()", +"8675cf9e": "MaxToken(uint256,string,string)", +"8676993f": "setTransformAgent(address)", +"86773cae": "setPromoEndTime(uint256)", +"8677ebe8": "isSigned(address,bytes32,uint8,bytes32,bytes32)", +"8678446e": "preSaleMinEth()", +"8678c2b9": "HodlEth(uint256)", +"867904b4": "issue(address,uint256)", +"86795e8d": "set_master(address)", +"867a66ac": "ownerCredit(address,uint256)", +"867b36fe": "setFiscalVerify(bytes32)", +"867b3d4b": "updateEtherPrice()", +"867b79a1": "withdrawalRange(uint256,uint256,address)", +"867befba": "SUV_TYPE()", +"867c0547": "newPonziFriend(uint256)", +"867c2857": "transferAgents(address)", +"867c6e23": "CryptoRides()", +"867c7eda": "getProposalByID(uint256)", +"867e248c": "feePercantage()", +"867e958f": "NAEC()", +"867ea029": "WESSToken()", +"867eed11": "privilegedTransferLock()", +"867f990a": "changePriceUSD(uint256)", +"867fbe6d": "AnotherOwnerAssigned(address)", +"86804aad": "queryData(address)", +"8680e52d": "emitJobOfferAccepted(uint256,address)", +"86813c53": "sellerIdOf(address)", +"86814819": "_prePurchaseAmount(uint256)", +"868149da": "TRONCLASSIC()", +"8681a07f": "ownerSetRandomApiKey(string)", +"868203ea": "ZeroChainToken()", +"86820a7d": "createInputData(uint256,uint256)", +"86834610": "registerEscapeRequest(uint32,int256,bool,uint32)", +"8683612b": "exists(bytes32,bytes32)", +"8683e4b4": "WHUToken()", +"86842bc2": "verifyNonces(bytes,uint64[],uint64[])", +"86845f9a": "theCyberGatekeeperTwo()", +"868467e6": "deliverTokens(uint256)", +"86849a6c": "TeamTailsChoice(address)", +"86852dca": "getElectionInfo()", +"86852fd7": "bountySupply()", +"86863ec6": "init(address,address,uint256)", +"86867740": "trueSupply()", +"86869eae": "totalClosedContracts()", +"86886a38": "transferAccessOn(address)", +"8688b5fe": "getMyContractsByType(uint256)", +"86897cb8": "Addresses()", +"8689a500": "putToken()", +"868a8813": "calculateGrapeBuySimple(uint256)", +"868d2b62": "ZeusCoin()", +"868d5383": "transferFromWithData(address,address,uint256,bytes,bytes)", +"868defd0": "getRemovableIdArrayAddressItems(address,uint256,string,string,string)", +"868df7f6": "alterFeaturedLength(uint256)", +"868e3c52": "EosPizzaSliceSafe(address)", +"868eb6bf": "removeOrders(uint256,uint256)", +"868f2564": "Iconss(address,address)", +"868f9c57": "Administrator(string,address)", +"86908b3f": "TransferInternalLedgerAT(address,address,uint256,bytes32)", +"86908f93": "FFG(uint256,string,string)", +"8690d6d5": "CentrallyIssuedToken()", +"8691162a": "TlcCoin()", +"86913884": "ShroomeryFarmer()", +"8692ac86": "transferOwnershipNow(address)", +"86936ed5": "isReceiptClaimable(bytes8,bytes8,address[],bytes,bytes32[],uint256[],uint256[],bytes)", +"86954ecc": "Finished(uint256)", +"86964032": "getHash(address,uint256,uint256,uint256,uint256)", +"8696807d": "addABaddress(address,address,string)", +"8696eec4": "setTokedoTokenFeeDiscount(uint256)", +"86973b0f": "RewardDemoChannel(address,address,address)", +"86985bee": "getTeamSalary()", +"86994b71": "RND()", +"869984c8": "addrOwner()", +"8699a65f": "rewardsCount()", +"869ac8dc": "getReferenceCurrency(address,uint256)", +"869af1ff": "finishTransferGet()", +"869b22fd": "toEthertoteDevelopmentWallet()", +"869b3f6a": "testThrowsRetractNotOwner()", +"869c63c1": "batchOrderTrade(uint8[2][],bytes32[4][],uint256[7][],address[6][])", +"869c8bd4": "buyChannel(string)", +"869d436d": "approvedAddressLUT(uint256)", +"869d785f": "removeModerator(address)", +"869d7d93": "countLeadingZeros(uint256,uint256)", +"869e0e60": "decreaseSupply(uint256,address)", +"869f1c00": "presaleParticipationMinimum()", +"869fe15d": "setFirstWinner(address[])", +"86a046d5": "lastRefrralsVault_()", +"86a17f29": "modifyLevelCap(uint256,uint256)", +"86a1ea7a": "HeliosToken()", +"86a2ef34": "Indemnisation_4()", +"86a2f98a": "getPersonalStakeForAddresses(address,address)", +"86a3171f": "removeAllAttachmentsFromCollectible(uint256)", +"86a33a0b": "RoundBSold()", +"86a3736e": "increaseTokenBalance(address,uint256)", +"86a3c902": "If(address,bytes32,bytes32)", +"86a3e0a7": "allocated1Year()", +"86a40e63": "_removeExcluded(address)", +"86a4f6ee": "MOM()", +"86a50535": "voteFor(uint256)", +"86a57f6f": "byteArrays(bytes1,bytes)", +"86a5ebe1": "getPlayerDetails(address,address)", +"86a5ff97": "changeStatus(string)", +"86a61c81": "medicos()", +"86a66dc3": "getVoteResults()", +"86a7b995": "maxContributionInWei()", +"86a8da37": "getNumWinners(uint256)", +"86a91ab4": "Scale(int256,bytes32)", +"86a9443e": "WellyPai()", +"86aa354a": "PUBLIC_SALES_2_PERIOD_END()", +"86aa552a": "lockAbsoluteDifference()", +"86aa6c09": "P3D_address()", +"86ab3f7b": "RESERVED_TOKENS_FOR_ICO_BONUSES()", +"86abfce9": "Voted(uint256,bool,address)", +"86acb16d": "register_creature(address)", +"86ace9b1": "setICOWeek1Bonus(uint256)", +"86ae5fec": "getParticipantCount(uint256)", +"86aecb9d": "_lotteryToken(uint256,address,address)", +"86af6ba5": "addDeed(address,uint256)", +"86afa110": "lockTrading()", +"86b08228": "getInvestorAddr(uint256)", +"86b0befc": "congress()", +"86b0fc9d": "startsWithDigit(string)", +"86b14583": "EzPoint()", +"86b27391": "startCrowdsale(uint256,uint256,uint256,uint8)", +"86b2be73": "ICO_RATE2()", +"86b35f79": "read_u16()", +"86b3610f": "wei2usd(uint256)", +"86b46073": "getCurrentBidOwner(uint256)", +"86b46694": "currentWave()", +"86b467f2": "tokenSaleContractAddress()", +"86b5e2b9": "dataSourceCallbackRoundOfSixteen(uint256,uint8)", +"86b6b721": "Anaco()", +"86b6ec6c": "showLastChange(address)", +"86b6f462": "updateMaxContribution(uint256)", +"86b714e2": "s()", +"86b715bd": "setAutoNewbond(bool)", +"86b76d6c": "MunishExchange(address)", +"86b7b8f6": "setBalanceHolder(address)", +"86b88af0": "setLLV_edit_10(string)", +"86b8f0a2": "teamAllocations()", +"86b945b0": "getRoundStatus()", +"86b9a1f4": "logShareTokensTransferred(address,address,address,uint256)", +"86ba793e": "setProviderCountry(uint256,uint256)", +"86bb1b24": "pegEtherValues(uint256,uint256,uint256,uint256,uint256,uint256)", +"86bb1e03": "toCollect(uint256)", +"86bb5a48": "buyAsset(address)", +"86bb7121": "getBlocksPerRound()", +"86bb8f37": "claimReward(uint256,uint256)", +"86bc2338": "isConsumable()", +"86bd4ef7": "lockPayment(bytes32,address,uint256,address)", +"86bdea3f": "postTrade(bytes32,uint256,address)", +"86be3981": "dividendsForUser(address)", +"86be53d3": "isPresaleOn()", +"86beaece": "doPurchase(uint256,uint256,uint256,address,address,uint256)", +"86bfbd44": "setDailyPrices(uint256,uint256)", +"86c02e88": "allocateFundToken()", +"86c23d54": "EliteShipperToken(uint256,string,string)", +"86c2b53d": "EximchainToken()", +"86c2e8e3": "accept(uint256,address[],uint256[],uint256)", +"86c3ceae": "setVAtomOwner(string,string)", +"86c455ee": "team2LockEndTime()", +"86c57fcc": "b32ToBytes(bytes)", +"86c59418": "USDToken()", +"86c5bc1c": "totalExchanged(uint8,uint8)", +"86c6f66b": "buySilver(uint256,uint256,uint8,bytes32,bytes32)", +"86c8c491": "setTransferAdmin(address,bool)", +"86c99779": "blocktubeUser()", +"86ca32b5": "claimExist(string)", +"86cb034f": "KIBIS_Token()", +"86cb531b": "mintPartnerWithLock(address,uint256,uint256)", +"86cb5cdb": "feeForFirstArtWorkChangeRequest()", +"86cba22b": "getAllBuyers()", +"86cc5a1d": "testIsOptionPairRegistered(address,uint256,address,uint256,uint256)", +"86cd71be": "getNumberOfMinters()", +"86cdbae9": "append(string)", +"86ce0285": "allocateTokens(address,uint256)", +"86ce8327": "updateStarScore(address,uint256)", +"86ce9835": "transferMoney(address)", +"86cef432": "CONTRIB_PERIOD3_STAKE()", +"86cf1e39": "GetherCoin()", +"86d01727": "setPendingTaxParameters(address,uint256)", +"86d08447": "getTestThree()", +"86d0b46d": "foundersTokensPercent()", +"86d0b48c": "round3Sold()", +"86d12325": "preSaleDistributionContract()", +"86d1a69f": "release()", +"86d23143": "getLastAcceptedProposal(bytes32)", +"86d263fe": "MarketCollateralPool(address)", +"86d2ee85": "HOLDING_START()", +"86d2fe57": "privateSaleStartDate()", +"86d35ed9": "getCrypton(uint256)", +"86d3a2b8": "setContributorCap(uint256)", +"86d3cf0d": "crazyearners(uint256)", +"86d3f4b7": "ethRateURL()", +"86d4c423": "UBTC()", +"86d4ebf7": "test_BasicThrow()", +"86d4fe9c": "viewTokensRemaining()", +"86d4ff1d": "canSell(address)", +"86d518bf": "grantAccessMint(address)", +"86d53469": "sendPreSaleETH()", +"86d54fe1": "EtherFundMeCrowdfunding(string,string,string,uint256,uint256,uint256,address,address)", +"86d59996": "deleteValidationData()", +"86d5c5f9": "getPassportLogicRegistry()", +"86d5e9a6": "setTokenNameSymbol(string,string)", +"86d6c8a0": "getTankProduct(uint32)", +"86d6c9d1": "canHolderTransfer()", +"86d74037": "distributeToken(address)", +"86d8aab4": "cancelMultipleOrders(address[3][],uint256[3][],uint8[],bytes32[],bytes32[])", +"86d922a9": "lastCallTime(address)", +"86d9b0c5": "make(address,uint256,bool)", +"86da69f0": "gamble()", +"86dbfa98": "DINTToken()", +"86dc88ff": "addMadeTX(address,uint256,uint256,uint256,uint256)", +"86dc8ace": "pendingVestingPool()", +"86dcbefc": "test_registerWithoutCertification()", +"86dd03bd": "setRedeemLevel(uint256)", +"86dd5e03": "setBossRoundNumber(uint256)", +"86de99dd": "SetStatus(uint256,uint256)", +"86def3b9": "getDukeDate(string)", +"86df3d5b": "getCreateOrderMinGasNeeded()", +"86e1e589": "NamiAddr()", +"86e261c9": "updateSecondAmount(bytes32,bytes32,uint256)", +"86e2c40c": "removeAffiliate(uint256)", +"86e3060d": "nextFlexibleReward()", +"86e32cb5": "setSpecialFeePercent(address,uint256)", +"86e32ed0": "setAllowedContract(address)", +"86e36ce2": "speechOfOwner(address)", +"86e37ae7": "tokensForFight()", +"86e399c1": "priceDivisor(uint256)", +"86e476dd": "communityAddress()", +"86e49407": "setFeeUnit(uint256)", +"86e4993c": "issue(uint256,uint256,address[],uint256[])", +"86e4a33e": "countBtcAddressLeadingOnes(bytes,uint256)", +"86e4e178": "CheckTickets(address,uint256,uint256)", +"86e58bef": "del_user(bytes32,bytes32)", +"86e58c0c": "getGalleassTokens(address,bytes32,uint256)", +"86e5ceb4": "previousRoundJackpot()", +"86e6361e": "setSellInfo(uint8,uint256,uint256)", +"86e6eee1": "INEX_Token()", +"86e8c57a": "secondroundprice()", +"86e92957": "lastDecimal(uint256)", +"86e97442": "mora(uint8)", +"86e99bdb": "XTOToken()", +"86eb23ca": "getOrganizerSymbol(uint256)", +"86eb3899": "lockPeriodForBuyers()", +"86ec6177": "endEvent()", +"86ec8f62": "validateTokenProperties(uint256)", +"86ecce90": "test_5_assertGasUsage1400Boards()", +"86ed60e9": "getSpawned(uint32,int256)", +"86ee8f01": "masterAddress1()", +"86ef1be2": "getRegistered(uint256,uint256)", +"86efb94e": "addressHistoryOf(uint256)", +"86f10e8b": "divForEthertoteLiquidatorWallet()", +"86f1865d": "_bcto(uint256,uint256,uint256,uint256,address)", +"86f19dde": "phase6Price()", +"86f1f2d4": "mintDigitalArt(string)", +"86f254bf": "minConversionRate()", +"86f28fe3": "token_member_order(address,address,uint256)", +"86f2907a": "doesEventExist(bytes32)", +"86f2e5cf": "_setHairColorValue7(uint256)", +"86f32586": "checkIfFundingCompleteOrExpired()", +"86f328a9": "episodes(uint256)", +"86f35b7c": "FeeCalculation()", +"86f3c026": "UpdateMoney(address)", +"86f3d0cd": "limitedDeposit()", +"86f5114e": "voteName()", +"86f5bf88": "interestPermil()", +"86f6e410": "adminIsAdmin()", +"86f7313d": "ico_enddate()", +"86f7993e": "acceptCooOwnership()", +"86f79edb": "getMessage(uint256)", +"86f822fa": "DunkPayToken()", +"86f876e2": "hyperEnable(address,bool)", +"86f8950a": "getUnclaimedBalance(address)", +"86f8bce9": "tixFundDeposit()", +"86f8e4ef": "mintFinalize(address,uint256)", +"86fa0671": "tokenShareShow(address)", +"86fa18df": "throwsWhenTransferingFundsDuringSale()", +"86fb8715": "ArbitratedBuyDeposit(address,string)", +"86fbb494": "DigixbotConfiguration()", +"86fbeb8c": "investors(uint16)", +"86ffe00f": "preSaleMaxTokens()", +"87000d42": "clearBetMap()", +"8700522a": "setLandProductionMultiplierCCUser(bytes32,address)", +"8700ceb2": "sellCertainOrder(uint256,uint256,uint256)", +"87011092": "refundContributor()", +"8701a2f0": "finishBet()", +"8702735c": "setCapitol(uint256,uint256)", +"8703b7d8": "setPOOL_edit_4(string)", +"8703e506": "stage4Bonus()", +"87040a86": "AddHOLDer(address)", +"87045369": "setCanCall(address,address,bytes4,bool)", +"870488f9": "sendTokensToInvestors(address,uint256)", +"8704c6ac": "MAXIMUM_CONTRIBUTION_LIMITED_PERIOD_USD()", +"87055008": "euroLock()", +"8705ae63": "migrationChain(uint256)", +"8705f218": "RemoveOwnerAddress(address,address)", +"8705fcd4": "setFeeAddress(address)", +"87067595": "MagicToken(uint256,string,string)", +"8706ab57": "setE4RowPartner(address)", +"8706b052": "PGD()", +"8707ee3e": "formatDate(uint256)", +"8708b5b2": "sourcePrice()", +"870911ff": "onExchangeTokenToEther(address,uint256,uint256)", +"87092940": "calculateInterest(address,address)", +"8709bece": "availablePrivateICO()", +"870b399a": "LOCKUP_6M_ICO_TIMESTAMP()", +"870b8b94": "hasFiveYearWithdraw()", +"870baf84": "sendToGiveth()", +"870bb8c2": "CROWD_WEEK1_PERIOD()", +"870bfc75": "lockMultis()", +"870c426d": "getUniverse()", +"870c8079": "getGovernmentAddress()", +"870dbae0": "TOTAL_MAX_CAP()", +"870e5405": "insert(bytes32,bytes32,int256)", +"870f0e27": "developmentLockEndTime()", +"870f892d": "getGTOAddress()", +"8710296f": "totalEarlyPurchaseRaised()", +"871105cc": "setVaultContractAddress(address)", +"871113c3": "oraclize_query(string,string[1],uint256)", +"87113b88": "managerListMap(uint256)", +"87114b8c": "versionInfo(uint256)", +"87115a9d": "setRemainingHealthAndMana(uint256,uint32,uint32)", +"8711e4a9": "lockTimeout()", +"8712523e": "lastTransferBlock(address)", +"87127f85": "ZeonToken()", +"8712c1c5": "freeTotal()", +"87136940": "tokenRateInUsdCents()", +"871388c9": "SetGene(uint256,bool,uint64)", +"8713d931": "BONUS_100_250()", +"8714b028": "offers(uint256,uint256,uint256)", +"8715d65d": "TierWildcatDividendAddress(address)", +"87161e59": "commandGetBonus()", +"871625e2": "retraitStandard_2()", +"871745aa": "presaleAddTree(address,address)", +"87174c3e": "refundManager()", +"87178668": "RATE_DAY_14()", +"8717ef27": "setVotingParams(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"87182d47": "totalSecondICOSupply()", +"87191e41": "isWhalePaying()", +"87195d23": "getInstallments(bytes32)", +"87196863": "_lower(bytes1)", +"8719715e": "walletAvatar()", +"8719e8ac": "setStatus(uint256,bool)", +"871b4e3c": "getCardBuyAuction(uint256)", +"871c7aab": "total_freeze_term()", +"871caa98": "dataOf(uint256)", +"871cc9d4": "decrementNumber()", +"871ced4a": "HeartBoutToken()", +"871cf692": "pullEtherFromContractAfterPreICOPrivate()", +"871d3eab": "addExtraDays(uint256)", +"871da475": "GetSellPrice()", +"871e0155": "pushNodeGroup(uint256,uint16)", +"871e5fac": "contributorsCurrentPeriod()", +"871fe6e1": "_validateHardCap(uint256)", +"872053e6": "releaseThisBonuses()", +"8720bb42": "liantoken()", +"87210f63": "tokenMainSale()", +"87214728": "contractIsCanceled(string)", +"8721db89": "requireKyc(address[])", +"8722860e": "isThereAnOnGoingProposal()", +"8722a57c": "forwarderOf(address)", +"8722d4d9": "enforceAddressMatch()", +"8723202e": "NewSmartSharingContract(string,uint256,uint256,string,string,string)", +"8723c377": "shiftOut(bytes,uint256)", +"8724025e": "AENIGMAZ()", +"8724e751": "Panax()", +"87250a35": "getSkull(uint256)", +"872519cd": "VerifyAccount(address,bool)", +"872539e7": "numberOfLeafs()", +"872588ba": "lock(bytes32,bytes32,bytes32)", +"8725d6be": "createToken(uint256,uint256,uint256,address,uint8)", +"872628e8": "setPriceStep2(uint256)", +"8726baf7": "unapproveArtist(address)", +"87275aba": "preMinting(uint256,uint256,uint256,uint256)", +"8727b7fc": "calculateAmountBonus(uint256)", +"87280324": "callMe(bytes32)", +"87281fab": "VestingReleased(uint256)", +"87283f0f": "ActivationRequest(address,bytes32)", +"87287fd7": "setMinFee(uint8)", +"872887c2": "getPeriodStartTimestamp(uint256)", +"87297093": "previousWithdrawal()", +"8729fff4": "buyCommission()", +"872a4e32": "change_min_price(uint256)", +"872a7810": "revocable()", +"872b31b6": "_removeStakeholder(address)", +"872bac57": "UpdateEmployee(address,uint32,uint32,uint16)", +"872bc83a": "GCCExchangeCore()", +"872d637f": "DivvyUp(bytes32,bytes32,uint8,uint8,uint256,uint256,uint256,address)", +"872dbdab": "advert_machine()", +"872dd49b": "getMigrateOutAttoTokens()", +"872dd84b": "priceBeforeGoalReached()", +"872f2526": "getGuestOrders(address,address)", +"872f5459": "toUINT120(uint256)", +"872fe620": "withdrawByResque()", +"87319e1e": "changeContractRegisterOwner(string,string,string,string,address)", +"8731a8d9": "deposit(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256,string)", +"8731cce5": "PledgePaymentCanceled(uint256)", +"87324ef0": "ecrecover2(bytes32,uint8,bytes32,bytes32)", +"8732d065": "ignoreKYCLockup()", +"87330b85": "getString1()", +"87336473": "unblockTransfer()", +"87338e98": "jackPotBestHash()", +"8733d130": "ownerManualMinter()", +"8733d4e8": "identityOwner(address)", +"8733f360": "initialize(address,address,uint256,uint256,address,address,address,address,address,address,uint256)", +"8734ffc9": "authorizedETH(address)", +"87355084": "transferCrowdsale(address,uint256)", +"8736381a": "contractCount()", +"87369c4b": "BOUNTY_EXCHANGE_SHARE()", +"87369e04": "refundTransactions(uint256)", +"8736fd16": "getRefStatus(uint256)", +"87393bc6": "verifyFirstHalf(uint256[4],uint256[4])", +"8739cacf": "getJobRating(address,uint256)", +"8739f930": "queryGameHistoryLength()", +"873a2878": "acceptWork(uint256)", +"873a5690": "VikkyToken()", +"873ab2ce": "computeFeeRate(address)", +"873b3009": "getKeyRevisionNumber(uint32,int256)", +"873bdee0": "systemWithdraw(address,uint64)", +"873c56d7": "officialLimit()", +"873cb0ab": "redeemedKarmaOf(string)", +"873cdb03": "Litas()", +"873db84c": "queryN_fnc()", +"873dc3b3": "bountyOnlineGW()", +"873dc71d": "getCycleInfo()", +"873ebe6a": "collect(address[],uint256[])", +"873f610c": "Contractors(uint256)", +"873f9a6a": "registerDIN(address)", +"873fd089": "isStaker(uint256,address)", +"87407993": "inQuitLock(address)", +"8740b73d": "EthereumGoldPro()", +"87412a4b": "TeamAndPartnerTokensAllocated(address,address)", +"8741ab49": "setupCompleteFlag()", +"8741f15e": "tileBalance()", +"874252ef": "giveProgectTokens(address,uint256)", +"8742792f": "changeNameByEveryone(string)", +"8742fc3b": "getVoteResult()", +"8744e974": "CallOption(address,uint256,uint256,uint256,uint256,uint256)", +"87451d52": "addQuickPromoBonus()", +"8745ddb3": "jailAmountOf(address)", +"8746656f": "extendDuration(uint256)", +"874752b4": "SpiceMembers()", +"8747a674": "getWrapperBalance()", +"8747f9b1": "resultReject()", +"8748ecda": "Dynamic1_5x(uint256)", +"87491c60": "closeMinting()", +"874a7036": "placeNotes(uint256[],uint256[],uint256)", +"874b4fcc": "setSigningPublicKey(string)", +"874b953a": "changePrimaryApprovedWallet(address)", +"874d6d81": "getWeek()", +"874d73a7": "addLottery(string,uint32,uint32,uint32,uint32,uint32,uint32)", +"874f33a1": "doStuff()", +"874f874c": "reminderCalc(uint256,uint256)", +"874f8ef6": "getAdv(uint256,uint256)", +"874fe370": "finalizeTS()", +"874ff7ed": "YOYOW(address)", +"8750367e": "FundRequestPublicSeed(uint256,uint256,address)", +"8750c2d7": "priceInTokens()", +"8751775b": "cancelRewardsWithdrawal()", +"87521056": "createMineForToken(uint256,uint256,uint256,uint256)", +"87524581": "accounts(address,uint256)", +"87526b0a": "totalPendingPayments()", +"87528d5e": "setInitAttr(address[],uint256,uint256)", +"87529f0f": "getTeam(address)", +"8752cff2": "isUserExisted(address)", +"8753b16e": "requestOwnership(address)", +"87541c9e": "setLLV_edit_3(string)", +"87543ef6": "upgradeController()", +"87548fcf": "getTracks()", +"8754b1d1": "createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"8754b29c": "buyCore(address,address,uint256)", +"87551db0": "getChecksum(string,string,string)", +"8755b065": "initialTransfers(address[],uint256[])", +"875606a1": "freezeTransfer()", +"8756f3e7": "LogErrorMsg(uint256,string)", +"8757a2cd": "test_depth(uint256,uint256)", +"8757d620": "firstBuy(string)", +"87585707": "buyVouchers()", +"87586b32": "getPI_edit_2()", +"8758ba8f": "approveForGeneLab(uint256)", +"875991eb": "dealLog(uint256[2],bytes32,bytes32,uint8)", +"875999e0": "getLastKeyTime()", +"8759afc9": "_initStages()", +"8759c2f1": "getHappinessCitizens(uint256)", +"8759d1c3": "sendReceivedTokens(address,address,uint256)", +"875a8dfc": "post(address,string)", +"875ac8f1": "PAYOUT_DATE()", +"875ad967": "DopeRaiderCore()", +"875c330c": "LogPush(address,uint128,string)", +"875c7143": "setSecondYearAllowancePercentage(uint8)", +"875cb3e5": "closeSuccess()", +"875dc0ee": "changePaymentDestination(address)", +"875de431": "phaseOneBonusPercent()", +"875e7bb4": "FactoringChain(address)", +"875ea5e7": "dividend(uint256)", +"875ed7ae": "unitEquippedItems(address,uint256)", +"875f0671": "crowdsaleStatus()", +"875f71a3": "ETHDistributor()", +"875fde3d": "createErc20Token(string,string,uint256,uint256)", +"876012fc": "composeJingle(string,uint32[5],uint8[20])", +"87609d1a": "__price()", +"8760b171": "getBPhashFromBPTokenId(address,uint256)", +"87612102": "loadRefund()", +"87615cb2": "enableRegulator(address,string)", +"8761fb7c": "escrowAdmin()", +"87627869": "setCopaMarketAddress(address)", +"8762d50b": "_xx()", +"87630a2e": "activateContract(address,address)", +"876339b8": "_sellPutToOpen(uint256,uint256,uint256,uint256,address)", +"8764159e": "findContractByModName(string,string)", +"8764edd0": "VerificationAccountOnJullar()", +"876588b8": "Apply_Store_Id_Fee()", +"876590c3": "setTeamPrice(uint256[],uint256[],uint256)", +"876777d0": "TTCoin()", +"87679684": "checkProof(bytes,uint256,bytes,bytes)", +"876848d3": "valid(uint80)", +"876911ca": "ArrAccountIsFrozen(uint256)", +"8769817a": "CROWD_WEEK1_BONUS()", +"87699aa6": "TOKENMOM()", +"8769bc7e": "currentSpiderOwner()", +"8769beea": "openESOP(uint32,bytes)", +"8769c281": "allowRefunds(bool)", +"8769c28c": "bogotacoin()", +"876b0946": "NucleusVisionToken()", +"876b0a95": "getDiceWinAmount(uint256,uint256,bool,bool)", +"876b1566": "getTokenHolders()", +"876ba3cd": "transferModeratorship(address)", +"876cf0ef": "getCrystals(address)", +"876da006": "TOKECOIN()", +"876e79f6": "targetDiscountValue7()", +"876ee240": "EthWuxia()", +"876f1c27": "replaceAnimal(uint16)", +"876f20b1": "crownSymbol()", +"876f5746": "ShitcoinCash()", +"876f9795": "mineSalary(uint256)", +"877046a2": "CGCCoin()", +"87708311": "OBEFAC(address)", +"87717cb1": "_hackoinToken()", +"8772a23a": "configured()", +"8772ae3c": "setMinimumBet(uint256)", +"87730ed7": "allocateFundsBulk(address[],uint256[])", +"87734d53": "getBet(address,uint256,uint256)", +"8773c0d0": "buySoul(address)", +"8774e5d0": "setPriceInWei(uint256)", +"87757835": "Ducker()", +"8775a557": "DadaCollectible()", +"877653f0": "_storeBalanceRecord(address)", +"8778205d": "TransferDisable(uint256)", +"8778c090": "arrayOfNonTrivialAccounts()", +"87793dc7": "invokeOnceFor(address)", +"877aaf4f": "tosToken()", +"877af5b4": "subFundAccount()", +"877b9a67": "isIssuer(address)", +"877c2184": "getIntValue(string)", +"877c3650": "getproductprices()", +"877c4f6e": "submitPeriod(uint256,bytes32,bytes32)", +"877cedb8": "Lockup12m(address)", +"877d481c": "startStage3()", +"877ddd77": "commission_ratio()", +"877f5618": "isAllowClaimBeforeFinalization()", +"87800ce2": "MD5FromMarketingKeywords(string)", +"87801cc3": "setNextRoundDonation(uint256)", +"87804708": "_validate()", +"8781249f": "getCntByRarity(uint8)", +"8781382e": "WBU()", +"878170d1": "fetchValue()", +"878314c9": "crowdsale_eth_fund()", +"878377e7": "RAM_Token()", +"8783bf1a": "EGGS_TO_HATCH_1DRAGON()", +"8783d407": "feeReplyThread()", +"87848727": "writedb(string,string,string)", +"8784ea96": "getCommit(bytes32)", +"87864af8": "UNFREEZE_TEAM_BOUNTY()", +"87873b6d": "MoneyTreeToken()", +"87874e02": "getNextAvailableLevel()", +"87877e4d": "setSponsor(string)", +"8787c9ff": "approveCertificate(address,address)", +"8787f75d": "Kodobit()", +"878808af": "tokensSoldGoal()", +"87881ede": "getStackholderConfirmations(uint256)", +"8789dfbf": "instContAllocatedTokens()", +"878a18ef": "tokensSentDev()", +"878c1484": "cause()", +"878d4204": "testInitialCrowdsale()", +"878d5ff7": "partnerInfo(address,address)", +"878de0ae": "userEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,bytes32)", +"878e10e4": "SEHR_WALLET_ADDRESS()", +"878e8827": "getActionParameterByIndexes(uint256,uint256)", +"878eb368": "cancelAuctionWhenPaused(uint256)", +"878eb4ca": "serviceDeposit()", +"878edb66": "getVotesByPollingStation(address)", +"878ef7fe": "RealMadrid()", +"878fb316": "btycsell(uint256)", +"87902997": "acceptAndAdditionals(bytes32,uint256[])", +"87903097": "timeoutPlayer(uint256,address,uint256,uint8)", +"879125a4": "setMaximumRate(uint256)", +"87914c6f": "prolongateContract()", +"879206a2": "lastPayerOverflow()", +"87924815": "ownerAddressSize()", +"87925132": "PandaCore()", +"879281c4": "login(bytes32)", +"87932e0f": "setAddress(bytes32,address,address)", +"87934ec8": "skinCreatedLimit()", +"8793ae52": "getCurrentDaoStakeSupply()", +"87943859": "getRefBonus()", +"879499f4": "newUriBase(string)", +"87950f49": "setDistributorAddress(address)", +"879611bb": "removeGlobalConstraintPost(int256,address,int256,address)", +"879647e2": "getindex()", +"8796a7ba": "totalPrivateSaleStage()", +"8796d43d": "activeToken()", +"8796ec86": "getDocumentHash(uint256)", +"879736b2": "swapValidatorKey(address,address)", +"87982928": "launchPeerWallet(address[],address[],uint256[])", +"879844b9": "crowdsaleAddressSet()", +"87986f52": "getOrderSupportCancel()", +"879a2d2a": "getApplication(address)", +"879a6f7a": "recoverWarriors(uint256[],address[])", +"879a83fc": "LogWithdraw(uint256)", +"879abc11": "applyRuntimeUpdate(address,address,uint256,uint256)", +"879b18b6": "getMemberCanVote(address)", +"879bfa27": "Investors()", +"879ce676": "withinExecutionLimit(uint256)", +"879cffdf": "TokenBuy(address,uint256,uint256,string)", +"879d46fd": "DAOTrust(address,address,bytes,uint256,uint256,uint128)", +"879e4b1a": "empty(bytes32)", +"879e84ab": "minChequeValue()", +"879f30ad": "burnSent(uint256)", +"879f4dfe": "_getCampaign(bytes32)", +"879f9c96": "purchased()", +"87a01164": "teamTransferFreeze()", +"87a04b67": "KUYOOToken()", +"87a07692": "setWinner(string,uint8)", +"87a07adb": "getSharedAccounByIndex(uint256)", +"87a09877": "AdvisorGPX(address[],uint256)", +"87a16f12": "addScriptExecutor(address)", +"87a2a9d6": "_MAXIMUM_TARGET()", +"87a2afb3": "releaseBets()", +"87a378fb": "holdSubscription(uint256)", +"87a3903e": "buy(uint16,uint16,uint16,uint16)", +"87a3be75": "init(address,uint256[],address[])", +"87a3e445": "icoBonus4()", +"87a407a1": "setBurner(address,address,bool)", +"87a675ca": "DataContacts(address,address,address)", +"87a767e3": "removeCA(address,address)", +"87a796a1": "_fetchCancelledOrdersForPayer(address)", +"87a846a5": "getBonus(uint256,uint256,uint256)", +"87a88c43": "iDistribution()", +"87a91506": "PlayChainPromo()", +"87a97752": "setInitialEnemyCombination(uint32[4])", +"87a9a8ef": "totalSupplyAtCheckpoint()", +"87a9be0d": "BitSelectArrojado()", +"87a9c6c5": "buyAndTopup(address)", +"87aa14d2": "freezeEventOutcome(uint256,uint256)", +"87aa2bf9": "rmul(uint128,uint128)", +"87ab42b3": "MysteriumTokenDistribution()", +"87ab8403": "transferScoreToAnother(uint256,address,address,uint256)", +"87adab57": "VISTAcoin()", +"87ae00a3": "ZebiMainCrowdsale(uint256,uint256,uint256,address,uint256,uint256,address,address,address,uint256,uint256,uint256,uint256,int256,uint256)", +"87ae0dbe": "yearSeconds()", +"87af74ab": "calculateNumberOfNeighbours(uint256,address,address)", +"87afe179": "getTotalTicketSetsForRound(address,uint256)", +"87b01dc9": "setSale(uint256,bool,uint256)", +"87b0be48": "releaseTokens(address)", +"87b0d60c": "sumICO1()", +"87b15c0b": "periodITO_wei()", +"87b234ec": "createReferralGiveAways(uint256,uint256,address)", +"87b261ad": "coeff()", +"87b2fe7f": "luckynum()", +"87b30845": "exchangeDIDForEther(uint256)", +"87b3be7d": "Ring()", +"87b47e4f": "transSupply()", +"87b4e60a": "newTokens()", +"87b547e5": "balanceOfDirectoryToken(uint256)", +"87b551b5": "tokenPayout()", +"87b55705": "mintingThreshold()", +"87b57fa7": "GetMinerRigsCount(address,uint256)", +"87b5914c": "exchangeRateETHToUSD()", +"87b5c21f": "OCTWasteToEnergyJV()", +"87b5f114": "xpTokenAddress()", +"87b73795": "verifyKYC(address,address)", +"87b751ae": "TokenTrader(address,uint256,uint256,uint256,bool,bool)", +"87b7a068": "updatesAreAllowed()", +"87b8963c": "badgeDecimals()", +"87b9a544": "DataController(address)", +"87b9e310": "nominPool()", +"87ba67be": "nextLevelPercent()", +"87ba67dd": "Arascacoin()", +"87bab806": "getNumOrganizers()", +"87bb25b5": "UndermineComponent(uint256,address,uint256)", +"87bb675c": "indexTracker()", +"87bb6aa6": "_revealBid(bytes32,address,uint256,address,address,bytes32,uint256,uint256)", +"87bb7ae0": "getTicketPrice()", +"87bc0fc6": "TokenAirdrop(address,uint256)", +"87bc6906": "BitGuildTrade()", +"87bd499b": "lastLevelChangeBlock()", +"87be727b": "getSum(uint16)", +"87bea35f": "getCreatePrice(uint16,uint256)", +"87bf26b9": "GetGrade(uint256)", +"87bf740b": "YYToken(uint256,string,uint8,string)", +"87bfce9e": "claimedYesterday()", +"87c00626": "calcTokensToEthers(uint256)", +"87c05510": "setNewlockAccount(address,uint256,uint256)", +"87c19bcb": "votelog(bool,address,uint256)", +"87c1be6e": "globalPause(bool)", +"87c1ed12": "transferToOwner(uint256)", +"87c23143": "totalEthBankrollCollected()", +"87c2ee62": "secondStageEndsAt()", +"87c38114": "Emojicoin()", +"87c4aaea": "totalTokenVested()", +"87c50df5": "erectBarrier(uint16,uint8,uint8)", +"87c55589": "blockTube(uint256,string,uint8,string)", +"87c5d1be": "LEDTEAM_TOKENS()", +"87c60d89": "getAllSubcontracts()", +"87c70d21": "expressReloadNums(uint256,uint256,uint256[])", +"87c79d1d": "getColors()", +"87c84933": "LogParticipation(address,uint256)", +"87c86277": "setPetName(string,uint64)", +"87c8ab7a": "changeAllowance(address,address,uint256)", +"87c95058": "setAdministrator(address,bool)", +"87cb15f7": "move(uint256)", +"87cc1e1c": "setExporterBank()", +"87ccb440": "getReg2()", +"87ccb57b": "testExecuteSellOrderShouldNotChangeBuyerBalance()", +"87ccccb3": "PublicMine()", +"87ccd8b3": "_isComplete(uint256)", +"87cef144": "updateVIPs(address)", +"87ceff09": "getBlockTime()", +"87cf34cf": "getUserContributionReclaimStatus(address)", +"87cf7768": "walletG()", +"87cfc1d8": "disableAgency(address)", +"87d14a36": "MaxPlayers()", +"87d25299": "tessrX()", +"87d2544d": "CMOSignature()", +"87d3525f": "CancelSimpleOffer_internal(uint256,bool)", +"87d36176": "False()", +"87d3764b": "ROLE_LEVEL_PROVIDER()", +"87d3a184": "makeZero(uint256)", +"87d4ca93": "escrowFrom(address,address,uint256)", +"87d517c9": "fetchInitialDetails(string)", +"87d5418f": "aSetEnd(uint256)", +"87d570c0": "OHGRiverResort()", +"87d5c6b8": "rentalElapsedTime()", +"87d67208": "changeIcoStartBlock(uint256)", +"87d741c9": "getPaidETHBack()", +"87d76f09": "calculateEstimateToken(uint256)", +"87d79f8a": "buyIceDrangon()", +"87d7d24d": "ownerconfirm()", +"87d803a3": "setResult(uint8,uint8,int8)", +"87d81789": "payments(uint256)", +"87d87090": "setMinRefEthPurchase(uint256)", +"87d9d224": "TokenDistribution(uint256,uint256,uint256,int256)", +"87da18ee": "getRankPriceEth(uint256)", +"87da3208": "CollateralToken(string,string,uint256,uint8)", +"87da9cad": "ApprovalToken(address,address,uint256)", +"87db03b7": "add(int256)", +"87dba600": "_set6()", +"87dc0c55": "getAuctionEnd()", +"87dcd2b6": "superOwner()", +"87dcfd2d": "numTokensLeft()", +"87dd1908": "_voteAndContinue()", +"87ddc521": "rewardController(address,bytes5)", +"87dde4ad": "get_candidate(uint8)", +"87ddf6cd": "setAddressArrayIndex(bytes32,uint256,address)", +"87def081": "getFeeRecipient(int256)", +"87df4838": "CancelSell(uint256)", +"87dfc909": "queryMap(uint8,int256[],int256[])", +"87e06546": "PLATINUM_AMOUNT_XPER()", +"87e0f794": "TwistoToken()", +"87e1029a": "newStar(uint8,uint8,uint256)", +"87e12235": "_filiate()", +"87e19cc5": "EBETCrowdsale()", +"87e25e0e": "deleteCertificator(address)", +"87e412f4": "SecurityDeposit(address)", +"87e42622": "KONSTANTOR()", +"87e44935": "IDOToken()", +"87e46baf": "transferVoxel(address,uint8,uint8,uint8)", +"87e4e64d": "getBalanceMy()", +"87e6835f": "tokensDrukker(address,uint256)", +"87e70933": "VoteMusic(uint256,address)", +"87e7dc5f": "ICOStarted(uint256,uint256,uint256,uint256,uint256)", +"87e854d3": "addRate(address,uint8)", +"87e89845": "getBabyMommas(uint256)", +"87e8a980": "godChangeGod(address)", +"87e97e82": "AuctionStarted(bytes32,uint256)", +"87ea8581": "setTemp(uint40)", +"87ea8893": "PGGameToken()", +"87ea9d52": "INK()", +"87eba3c7": "GetBuyingTokenAddress()", +"87ebd76c": "initContract(string,string,uint256,uint256)", +"87ecaf0d": "check2(uint256,uint256)", +"87ed1bd0": "grantAccess(address,uint8)", +"87ed5112": "setApoderadoVerify(bytes32)", +"87ed90ba": "securityWallet()", +"87edb2f5": "decode(bytes,uint256,uint256,uint256,uint256,uint256)", +"87ede474": "MicinRasaJamur()", +"87eeddf8": "confirmAndExecuteWithdrawal()", +"87efeeb6": "singularDTVToken()", +"87f06ec0": "getForkDurationSeconds()", +"87f0b8c5": "getStrong(address)", +"87f0bf31": "addResources(address[],bytes4[])", +"87f0fae9": "setKingdomFactory()", +"87f162c8": "initialEBETSupply()", +"87f1e7f3": "c_softCapUsd()", +"87f24484": "hashPass()", +"87f29fdd": "removeDiscountPhase(uint256)", +"87f3e5d6": "contributorsOfCauldron(uint8)", +"87f404cd": "getContractRhemBalance()", +"87f40ba4": "supplyReserveVal()", +"87f503fd": "DEV_TEAM()", +"87f51ac2": "athToken()", +"87f5c846": "ethBalanceOfNoFee(address)", +"87f6be15": "houseCredits(address)", +"87f74e7c": "updCouponBonusConsumed(string,bool)", +"87f7cab9": "removePerson(bytes32)", +"87f7e2a1": "getTeamCost(uint256)", +"87f9534b": "getLinkedIn()", +"87fc00f7": "setTPTContractAddress(address)", +"87fcd708": "StartICO(uint256)", +"87fcdbc1": "updateConversionRate(uint256)", +"87fd0421": "TheEthereumLottery()", +"87fdc401": "make(address,uint256,bytes)", +"87feba8f": "getInstallmentDuration(uint256)", +"87fef15b": "purchase(bytes32,bytes32,bytes32)", +"87ffe5a7": "dataSourceGetRedCards()", +"8800052e": "preSaleTokensLeftForSale()", +"88016da5": "allocateFrom(address,address,uint256)", +"88017e05": "setContribution(uint256)", +"8801b4fc": "paused_()", +"8801c928": "createJob(bytes32,uint256)", +"88026706": "Template()", +"88034bc5": "CreateTIX(address,uint256)", +"88037e1c": "view_get_gameData()", +"88046818": "getFeeSharingWallets()", +"8804863f": "payWithToken(uint256,address,address)", +"8804d119": "sendNextRewardTo(address)", +"88053eef": "RebuyInformEvent(address,uint256)", +"88054039": "NordstromOnlineRetailDigitalCoin()", +"880613ee": "getMadeTXCount()", +"88064637": "registerAssetDetail(int256,string,string,string,string,string,string,int256)", +"88064b07": "setNextLotteryTTMTokenId10(uint64)", +"88065236": "approvedAmount(uint256,address)", +"88072700": "itemIndexToApproved(uint256)", +"8807592c": "_calculateCommission(uint256)", +"88077b51": "setPrivateFundEnd(uint16,uint8,uint8,uint8,uint8,uint8)", +"8807a110": "isCrowdsaleClosed()", +"8807a468": "getOrgByIndex(string,uint256)", +"8807f36e": "lastInitializedRound()", +"88088a54": "getTransformState()", +"8808f3d0": "canPledge(uint256,uint256)", +"8809540d": "globalReinitialization()", +"8809716c": "setDungeonDifficulty(uint256)", +"880a0664": "getRoundFinish(uint32)", +"880ad0af": "transferOwnership()", +"880ade5b": "foundNewGamblingParty(uint256,uint256,uint256,uint256,uint256,uint256)", +"880b36e7": "getLastCaller()", +"880b844f": "getRoundWeight(uint256,uint256)", +"880c0b9d": "lpAskPrice()", +"880c5f3d": "EtherBTC()", +"880c7864": "ResearchGroupAddr()", +"880cab29": "Founder2()", +"880cdc31": "updateOwner(address)", +"880cfc2f": "deposite(address,uint256)", +"880dc4e6": "isWithdrawEnabled()", +"880e73a3": "OTA()", +"880e87ed": "setUnlimitedMode(bool,address)", +"880ead7e": "returnOtherCrypto(address)", +"880fc14c": "inRate()", +"88102583": "safeCastSigned(uint256)", +"881056ba": "GMR_TOKEN_SALE_CAP()", +"8810ac6c": "BuyCarFailed(address,uint256,uint256)", +"8810c990": "sha3(string)", +"88116d13": "checkReferalLink(uint256)", +"8811a0ae": "addressCount(address)", +"8811e191": "setDebugMode(bool)", +"8812e897": "getCurrentBonus(address)", +"8812ec52": "adviserWallet()", +"8813304b": "forwardOnBehalfWithRevert(address,uint256,bytes,uint256,uint8,bytes32,bytes32)", +"881362b4": "changeUserInfo(bytes32)", +"881461be": "burnAddress(address)", +"88149fb9": "beginTime()", +"8814fa3f": "Log0(string)", +"88157942": "icoStartP3()", +"8815ee86": "purchaserList(uint256)", +"8815f3d3": "judgement(bool)", +"8817a198": "priceToBuyInFinney()", +"8817ecde": "_getPeriodFor(uint256)", +"88180ff6": "underwrite(address,uint256)", +"88185aad": "airDropTokens(address[],uint256)", +"8819dd8e": "getCurrentPeriodKey()", +"881abe3e": "addProposalVote(uint256,address)", +"881adeaa": "abioToken()", +"881b2666": "xTokenPercent_()", +"881be8f7": "undo()", +"881c255e": "updateStageBySaled()", +"881cfeb6": "addInternal(address,address)", +"881d3bd0": "LongBought(address[2],uint256[3],uint8,bytes32[3],uint256)", +"881dac8e": "ECHO()", +"881ed6db": "lockStart()", +"881eeaa5": "createEstateWithMetadata(int256[],int256[],address,string)", +"881eff1e": "setMaxBet(uint256)", +"881fae6c": "endSTO()", +"881fcab3": "getShipProductCurrentPriceByModel(uint16)", +"881fcefc": "updateEnabled(string)", +"881fd690": "isSecondStageTokensMinted()", +"881fe0ce": "ZealconToken()", +"881fe258": "_emitRecord(bytes32,uint256,uint256,uint256)", +"88203417": "AthleteTestToken()", +"8820401a": "_tokenPurchase(uint256)", +"8820e2d6": "newVote(address,string,uint256,uint256,uint256,uint256)", +"8820f6bd": "economy()", +"8821bb43": "change_owned(address)", +"8822048e": "isTransferAllowed(address)", +"8823a9c0": "changeFeeTake(uint256)", +"8823da6c": "removeAccess(address)", +"88254efa": "hideSubcategory(uint256)", +"88257016": "getNthBallot(bytes32,uint256)", +"882645fe": "preICObonusMultipiersInPercent(uint256)", +"8826ce84": "uint8ToString(uint256)", +"8826db7a": "getNextPoliceAssignment(address)", +"8826fa2e": "setStakedBalances(uint256,address)", +"88275b68": "mintLockupTokens(address,uint256,uint256)", +"88279320": "prizeValue()", +"8827a985": "durationPhaseIndex()", +"8829a5a7": "transferAndWriteUrl(address,uint256,string)", +"882a1dee": "KrisTest()", +"882a1fa0": "getDivCard(uint256)", +"882b4e68": "User_2()", +"882bc3e1": "RemoveAllConsentDirectives()", +"882d851c": "tokenMinus(address,address,uint256)", +"882dd41e": "updateTokenBalance(uint256)", +"882e2606": "icoEndLine()", +"882e9709": "record(string,string,string,bool,string,string,string)", +"882ee532": "getBylawsMilestoneMaxPostponing()", +"882f327b": "addLock(address)", +"882f3e16": "forceWithdraw(address)", +"882f7e83": "changeRigoblockAddress(address)", +"88301f57": "subDevOne()", +"88308ca1": "hardCapInCents()", +"8830a718": "BTHRTokenSale(uint256,address)", +"8830e09a": "ATTContribution()", +"88318834": "abandon()", +"8831e9cf": "setPlatformWallet(address)", +"8832243a": "profitSharing()", +"8832bc29": "ETH_PRICE()", +"8832ebe8": "lolita()", +"88331b6f": "amountPower()", +"883356d9": "isBurnable()", +"8833ae6f": "aquaman()", +"8834277e": "emitErrorCode(uint256)", +"8834526a": "MARKET_CAP()", +"883462ca": "removeFromKyc(address)", +"8835097d": "assignedAmountToPrivateEquityFund()", +"88352a29": "signedApproveAndCallHash(address,address,address,uint256,bytes,uint256,uint256)", +"8835ba24": "Legolas()", +"88362d4b": "setDailyLimit(uint256,uint256)", +"88369d6b": "getTokenBalance(address,address,bytes32)", +"8836f3ef": "getNumberOfBounties()", +"8838af8a": "rarityMultiplier()", +"8838b68e": "etherLeft()", +"88394fdc": "startRoundA()", +"8839515c": "OWN_ChangeToken(string,string,uint8)", +"88398fbc": "PreSaleHardCap()", +"883a3ea8": "LottoNumberTest()", +"883a584c": "RichiumToken(uint256,string,string)", +"883a6476": "IsAirDropEnabled()", +"883a92e1": "setFreezeEndTime(uint256,uint256)", +"883a98e7": "addTileBonus(uint256,uint256,uint32[8])", +"883ba26b": "getIsSettled()", +"883ba466": "changeHiddenOwnership(address)", +"883cd1a5": "cloudsPerEth()", +"883cdeb9": "newTrack()", +"883cf630": "resetBucket()", +"883d0ac6": "totalnSupply()", +"883dfaba": "getWinBalancesOf(address)", +"883fd348": "hasAvailableRewards(address)", +"883fdd6f": "IWABOO()", +"88400fbe": "ICO_TEAM()", +"884095f6": "getWineryMappingID(string,string)", +"8841520b": "SpinnerCountsByAddress(address)", +"88416792": "usersPause()", +"88417820": "LBSN()", +"884179d8": "ipfsAttributeLookup(address)", +"8841937a": "setTileHp(uint16,uint8,uint32)", +"8841ac11": "buyItem(uint256,uint256,uint256,uint256)", +"8841dd3c": "thirdRewardPeriodPercent()", +"88426aec": "getStageDeadline(uint8)", +"8842bfa0": "Chain4()", +"8843641e": "removeAmountForAddress(uint256,address)", +"8843c1ba": "listAcceptedTokens()", +"8843c222": "MIN_ACCEPTED_AMOUNT_FINNEY()", +"8843ffba": "signup(uint256)", +"88445e29": "sha3(uint256)", +"884543c0": "TokenBought(address,uint256,uint256,uint256)", +"8846594b": "checkKYC(address)", +"8847092d": "upgradeMaterial(uint256)", +"884790de": "agentInvo(address)", +"8847df97": "ChangeEmissionRate(uint256)", +"88482233": "Lizambo()", +"884870c7": "setParameters(uint256,uint256)", +"884879d6": "startSecondStage()", +"88488c33": "finalizeTask(uint256)", +"8848fb0d": "addEmployerJob(address,address,uint256)", +"884a2308": "setCompte_5(string)", +"884a26da": "massBurn(uint8[],address[],uint256[])", +"884a47b4": "setNews(string)", +"884ade03": "ForceSeller(address)", +"884ae10b": "saleWalletAddress()", +"884b5dc2": "fill(uint256[])", +"884b850b": "BurnAssignedFees(address,address)", +"884bf67c": "getPrizePool()", +"884c1480": "LacesToken(uint256,string,string)", +"884c6440": "BuyItem(uint256)", +"884ca7b1": "getButtonPrice()", +"884edad9": "Withdraw(address,uint256)", +"884f3db0": "check_the_rule(address)", +"884fafcd": "totalJackpotEven()", +"88508a18": "getRecentPlayers()", +"885124c0": "Coin5941()", +"88516a89": "ownerFraction()", +"88519ea4": "availablePreICO()", +"8852024f": "max_TotalSupply_limit()", +"88524780": "saleAuctionERC20()", +"885349a2": "payToBank(uint256)", +"88535e90": "changeMinimumContributionForPublicPhase(uint256)", +"8853636b": "revealResult(uint256,bytes32)", +"885363eb": "landOf(address)", +"88537daf": "checkMiningAttempt(uint256,address)", +"88538c36": "candidateInformation(uint256)", +"885463fd": "strategicAllocation()", +"8854baa8": "AddReturnsMapping(uint256)", +"88550b6a": "getTokenBuyPrice()", +"88559aaf": "processAllocation(address,uint256)", +"8856cd84": "medicaxess()", +"8856d517": "GetReferralInfo()", +"8857322d": "DOLLAR_DECIMALS_MULTIPLIER()", +"885819c2": "getVatIdByAddress(string)", +"8858287b": "vendorCount()", +"8858ad6c": "Exploreon()", +"8858adc6": "setColor(uint16,uint24)", +"8858fa3b": "totalEthReceivedInWei()", +"8859c6d6": "operatorCampaignID(address,uint256)", +"885a3b75": "currentTotalSupply2()", +"885a5ec2": "lastBlock_f10()", +"885a5ef2": "getMinEtherInvest(uint256)", +"885b63da": "setAuctionStartBid(uint256)", +"885b6cfb": "addZethrAddress(address)", +"885c69b5": "clearMetadata(address)", +"885e2750": "groupsCount()", +"885e401e": "lifeFactor_i()", +"885ec18e": "left6(uint256)", +"885f5011": "calcRatioNext()", +"8860565f": "GetBeneficiaryInfo()", +"8860805a": "extractMax()", +"8860bf94": "showworker()", +"8860d49f": "_transferInternal(string,address,string,address,string,uint256,uint256)", +"8861026f": "complianceWallet()", +"8862198a": "MasterContract(address)", +"8862d26a": "offeringType()", +"88631e18": "distribute(address,uint256,uint256,address[],address,uint256[])", +"88635b06": "createContractPerson(string,uint256,address)", +"8863c8d5": "concludeCrowdsale()", +"8863dd1a": "transferOwnerShip(address)", +"8863f31d": "Controller(address,address,address)", +"8864a5fd": "processPendingTickets()", +"8864d074": "RADCOIN()", +"8865015d": "g(uint256[20])", +"886588ac": "confirmVerbose(bytes32,address,uint256,bytes)", +"8865cbd6": "cancelAllOrdersByTradingPair(address,address,uint256)", +"88668d21": "getReplyRaw(bytes32,uint256)", +"88671acc": "FundAllocation()", +"88672f82": "setEtherRate(uint256)", +"88684aa5": "nextUnLockTime()", +"88685cd9": "releasePayment(uint256)", +"886b148d": "setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16,bool,uint256,uint256,uint256)", +"886b4954": "secToNextInterestPayout()", +"886bb359": "chown(address)", +"886bbe0c": "submitProof(bytes32,bytes32,uint256[],bytes,uint256)", +"886c0ee6": "Develop()", +"886d3db9": "uintToBytes32(uint256)", +"886d969b": "calc_partnerPercent(uint256)", +"886db803": "_setBigWinner(address,uint256,uint256)", +"886e549b": "PineappleArcadeTrophy(uint256)", +"886ed2d1": "enableRealWorldPlayerMinting(uint128[],bool[])", +"886ef644": "getRate(address,uint256)", +"8870155c": "getNumTknOfferors()", +"88702cc4": "debug_hash256Double(bytes)", +"88705f7d": "NeoCrowdsale(uint256,uint256)", +"8870985b": "getFreeBalance(address)", +"887159a2": "treatRemaintoken()", +"887240d0": "generateFileID(string,string,string,string)", +"887263cf": "EnigmaToken()", +"88727ba9": "_depositEthers(address)", +"8872bb2a": "_createElement(bytes32,uint256)", +"8872c094": "getUnsoldToken()", +"8872c68a": "sampleStorage()", +"8873704c": "addRequest(string,address)", +"8873d247": "THANKSTEST()", +"8874fa28": "CurrentRevision()", +"88753343": "maxResolvedAgonId()", +"88758581": "unregisterEmployee(address,address)", +"8875a40b": "endTimeTLP2()", +"88760a18": "loadStarbaseEarlyPurchases(address)", +"887651cc": "isAlreadyIn()", +"887699f3": "periodContributionOf(uint256)", +"88770cb0": "extendEndTime(uint256)", +"88776a7e": "testThrowTranferFromEmptyBalance()", +"88780b8e": "safeBalance()", +"88782386": "UnicornMilk()", +"8878356d": "testBetAmount()", +"88786272": "startingTimestamp()", +"8878990e": "changeCollateralSeizer(address)", +"8878adac": "refund_claims(string)", +"8878d726": "buySpecialBuilding(uint256,uint256,uint256)", +"8878db7f": "setCRYPTON_CUT(uint16)", +"887a8e33": "AgencyLock1()", +"887b00db": "TESTTESTICO(address,address,address,address)", +"887b1b0b": "recalculateTokensToBuyAfterSale(uint256,uint256[])", +"887bae74": "addReferenceParentWineryOperation(string,uint256,string,address,int256)", +"887bbef5": "setMinInvestment(uint256,uint256)", +"887bdcfc": "accountBalance(address,address)", +"887c3e5d": "updateAddress(bytes32,address,address)", +"887c4646": "approveIndexedByAddress(address,address,uint256)", +"887c4f68": "ludumTokensPerEther()", +"887c7f92": "remainingReserveSupply()", +"887ccc82": "getStake(uint256,uint256,address,bytes32)", +"887cfc3e": "orderToTransfer(address,address,address,uint256,string)", +"887d23a6": "isBeforeEndTime()", +"887d813d": "serviceGroupGet(address)", +"887e0c07": "runPlugin(address,uint40,uint256)", +"887e22b1": "tier5Time()", +"887f6178": "genericTransfer(address,uint256,bytes)", +"887ffc9c": "referalPayByNum(address,uint32)", +"88806b37": "transferZone(uint256,address)", +"8880a933": "transferTokensToNonEthBuyerToMany(address[],uint256[])", +"8881d3a2": "CompensationFailEvent(address,uint256)", +"8882349b": "vppToken()", +"88824bd1": "PonziUnlimited()", +"88827c16": "addPost(bytes32)", +"8882ddc9": "maxCharacters()", +"8883478e": "preicoAndAdvisors()", +"8883c52a": "getNumberOfAssetPacks()", +"88840671": "Milkcoin()", +"888419ed": "setData_8(string)", +"88849e71": "BasketToken(address[],uint256[],uint256)", +"8884b807": "getVoters(uint256,uint256)", +"8884cd7c": "changeBuyFlag(bool)", +"8884fbec": "checkTotalsAndMintTokens(address,uint256,bool)", +"8885f2a3": "setzBool(bool)", +"88865347": "grapesToBuildWinery()", +"88865ee3": "cleanupEven()", +"8886a667": "registerNameXIDFromDapp(address,bytes32,bool)", +"8886ca33": "getHeroBP(uint256)", +"88873eea": "blocktubeClip(string,uint256,uint256,address)", +"888764c8": "addBouncer(address)", +"888808ba": "Bittelux()", +"88888f61": "purchase(uint256,bytes32)", +"8889025a": "increaseJackpotTimeAfterBet()", +"88896a0d": "deliverPrize(address,bytes)", +"88897c37": "request_close()", +"888a3f79": "_approvedFor(bytes32,uint256)", +"888aab22": "addWithdrawal(address,uint256,uint256,uint256)", +"888ade0a": "publicKey(address)", +"888b6557": "minFundingGoalWei()", +"888d5917": "limitDateCrowdWave2()", +"888ea120": "saleDeadline()", +"888f2b13": "SALE_RATE()", +"88908546": "refund_eth_value()", +"889087b1": "meltCrystals(uint256[])", +"8890e13d": "isArenaContract()", +"88922e7a": "raiseAppeal()", +"889231c1": "promoLimit()", +"889258ea": "startICOStage1()", +"88929931": "UnlockDateExtended(uint256)", +"8892bb73": "createChildUniverse(bytes32,uint256[],bool)", +"8892d571": "withdraw_Leim(uint256)", +"8893240d": "setPeonyAddress(address)", +"88933e07": "getSMPTokensLeftForICO()", +"8893eb13": "getActivated()", +"88945187": "updatePurchasingState(address,uint256)", +"8894dd2b": "addEther()", +"88951352": "distributeTokens(address[])", +"889569cd": "getKoikeContract()", +"88968b94": "rateOwner(uint256)", +"88968bc3": "clearKyc(address[])", +"8897b1a7": "PRESALE_HARDCAP()", +"8897c1f4": "randomNumber(uint256,uint256,uint256,uint256,uint256,bytes32)", +"8897df9d": "addEpisode()", +"8899568c": "createDefaultZodiac(uint256,uint256,uint256,address,uint256,uint256)", +"8899fa0d": "onUnVote(address,int256)", +"8899fffd": "myFinneyValue()", +"889b59d9": "getDBallotsN(bytes32)", +"889c10dc": "addDelegate(address,address,bytes32,address,uint256)", +"889cd532": "upsertOne(address,uint256,bool,bool,uint256)", +"889d227d": "newPaymentAddress(address,bytes4)", +"889d9550": "getCryptoCupTokenContractAddress()", +"889e175e": "__slash__(address)", +"889e5073": "getStatus(address,address)", +"889eaa0d": "nextRate(uint256)", +"889f0c99": "withdrawFor_(address)", +"889fa1dc": "getFighter(uint256)", +"889fb53e": "incrementCoin(address,uint256,bool)", +"88a0e990": "BridgeTheChain()", +"88a12f7a": "_getUint(bytes4)", +"88a15f11": "secondMaxAmount()", +"88a17bde": "allocation()", +"88a1e895": "test2Fails()", +"88a2653c": "unwhitelistAddresses(address[])", +"88a2995d": "MyToken(uint256,uint256,string,string,uint256)", +"88a49164": "testErrorUnauthorizedTransfer()", +"88a4e86c": "balanceOfRaw()", +"88a525c4": "withdrawTokenBalance(uint256)", +"88a55c8b": "setBustRange(uint256)", +"88a6c749": "getFirstTranscoderInPool()", +"88a6cc53": "lockPurchasedTokensClaim(uint256)", +"88a6f02b": "deleteRecord(uint64)", +"88a74525": "fraction(int256,int256,int256)", +"88a79003": "addWhitelistInternal(address,address,bool)", +"88a7ca5c": "onTransferReceived(address,address,uint256,bytes)", +"88a89dd0": "add_to_buy_bounty()", +"88a8b341": "setVoteInternal(uint256,uint160,bool,bool)", +"88a8c95c": "changeDev(address)", +"88a8d602": "management()", +"88a95495": "removeFromMap(uint256[])", +"88aa1001": "checkJoinAirdropQuest(address)", +"88aa8bee": "getTokenDetails(address)", +"88aaa229": "AcceptsIDK(address)", +"88abc4a2": "coinIssuedPrivate()", +"88ac76ca": "cthereum(uint256,string,uint8,string)", +"88ad52f0": "DouYinToken()", +"88adbf8f": "addressOfTokenUsedAsReward()", +"88aebe00": "calculateWineBuy(uint256,uint256)", +"88aece7f": "setBuyOrdersContract(address)", +"88aed238": "ixix()", +"88af30c3": "_mainAddress()", +"88af6534": "VRF_EGG_COST()", +"88af883b": "adm_trasfer(address,address,uint256)", +"88af8ed4": "removeInvestor(bytes32)", +"88afdeba": "totalCreatedGame()", +"88afe426": "_removeAgonIdByOwner(address,uint64)", +"88b02acd": "displayTable()", +"88b11ee2": "DZoneCoin(uint256,string,uint8,string)", +"88b2ed1a": "addPlotAndData(uint24[],string,string,uint256)", +"88b322c3": "setAdvisors(address)", +"88b3a538": "projectManagers(uint256)", +"88b44c85": "assertEq(uint256,uint256,string)", +"88b45046": "income()", +"88b4b861": "proposeTo(address)", +"88b51ac0": "gernerateVoting(uint256,uint256)", +"88b55641": "buyTokenIco(address,uint256)", +"88b59734": "vendueClosed()", +"88b5f6f3": "PimpToken()", +"88b75493": "getLastAuditAuditor(address)", +"88b7a17c": "functionName(bytes32)", +"88b7a89d": "test0_create()", +"88b7e6f5": "returnInt128(int128)", +"88b7f5e5": "advisersWallet()", +"88b8c487": "playerWithdraw()", +"88b9022f": "semanticVersion()", +"88b95242": "PricingEnergy(uint256)", +"88b9a469": "initVault(uint256)", +"88b9e10e": "seizeTokens(address,uint256)", +"88bac2b8": "Mediated_Transfer(uint256,address,address,uint256)", +"88bb0c73": "teamsReward()", +"88bb18fc": "mintDSBCToken(address,uint256)", +"88bb6e68": "AkershoekToken()", +"88bb9fb1": "MultivestSet(address)", +"88bc65e3": "getFreelancerAvgRating(address,address)", +"88bec9da": "deleteMember(uint256)", +"88bf60b7": "transferMinimumFee()", +"88bff117": "setDrop(bool,uint256,uint256)", +"88c058a5": "subDefence(uint256,uint256)", +"88c0b8a7": "setChangeFee(uint32)", +"88c0bc8e": "buyTokensWithReferrerAddress(address)", +"88c12be2": "deathData_f0()", +"88c190a4": "NiMingToken(uint256,string,uint8,string)", +"88c2a0bf": "giveBirth(uint256)", +"88c30278": "getMinerOffsetOf(address)", +"88c3ba85": "ParallelGambling()", +"88c3ffb0": "getRoundInfo(uint256)", +"88c463af": "contributorsOfCauldronRound(uint8,uint32)", +"88c4e888": "get_token_state()", +"88c55c47": "initializeVesting(address,uint256)", +"88c600d0": "CryptoCongress(address,uint256,uint256)", +"88c662aa": "getController(address)", +"88c6abf8": "currentIteration()", +"88c7b6e6": "CrowdSaleMacroansyA()", +"88c7e397": "buyable()", +"88c8475c": "batchFreezeAccount(address[],bool)", +"88c8da99": "deactivate_admin_comission()", +"88c912b8": "sendToAddressWithBonus(address,uint256,uint256)", +"88c91d24": "computeCooldownTime(uint128,uint256)", +"88c91fb1": "transferExtender(uint256)", +"88c9a7d5": "setPixels(uint32,uint32[],uint8[])", +"88c9cb3c": "timer()", +"88c9ebbd": "getKeyPrice(uint256)", +"88cac17d": "setNextLotteryTTWTokenId3(uint64)", +"88cb214e": "editWhitelist(address,bool)", +"88cb8a73": "setPixelBlockPrice(uint256,uint256,uint256)", +"88cbc84a": "buyInvestmentPackage(uint256)", +"88cbdf13": "toUint32Throw()", +"88cc58e4": "getFactory()", +"88cc81de": "PaymentExpectationCancelled(bytes8)", +"88cc852a": "notZero(address)", +"88cca295": "addressToPurchasedBlocks(address,uint256)", +"88ccf2b9": "SetTokenInfo(uint256,address,uint256,uint256)", +"88cd2d47": "UserCRUD()", +"88ce3048": "lastweek_winner3()", +"88cee87e": "adminRemoveRole(address,string)", +"88cf2bc6": "buyStarCoin()", +"88cf6648": "liquidationPriceWad()", +"88d0443d": "bounty_address()", +"88d0820e": "selfFreeze(bool,uint256)", +"88d0b42d": "getRecentActivity()", +"88d115af": "PonyCore()", +"88d116b8": "_createPlayer(string,uint256,address,uint256)", +"88d12a4d": "totalWeiReceived()", +"88d18ea4": "featureSprite(uint256)", +"88d21ff3": "pollExists(uint256)", +"88d2faf9": "publishMemberEvent(address,uint256)", +"88d450e4": "setArtistsAddressAndEnabledEdition(uint256,address,address)", +"88d52ef7": "poolContract()", +"88d60e27": "setPercentTokenAllocation(uint256,uint256,uint256)", +"88d695b2": "batchTransfer(address[],uint256[])", +"88d723ac": "TetherToken(uint256,string,string,uint256)", +"88d761f2": "finishMigration()", +"88d7cd97": "externalStorage()", +"88d7e087": "withdrawChi()", +"88d8c702": "Summary(address,uint128[])", +"88d8da5f": "equals(string,string)", +"88d937a3": "createnation(uint16[],string,uint256)", +"88d97c30": "getGroupPageCount(string)", +"88d9fc4d": "updateReserveVault(address)", +"88da9bfd": "getUserNumbersOnEther(uint256)", +"88db84bc": "getRequiredStateChanges()", +"88dbe7a7": "dividendBonus(address,uint256,uint256)", +"88dc0d49": "TRcoin()", +"88df13fa": "multiMint(uint256,uint256[])", +"88df31f0": "minDiscountEther()", +"88dfee60": "setOtherFounder(address,uint256)", +"88e01a98": "closeRound(uint256)", +"88e072b2": "checkTransfer(address,uint256)", +"88e114cc": "log_approve(address,address,uint256)", +"88e16190": "ItemCreatePrice()", +"88e2af0e": "initialBattle(uint256,uint256)", +"88e2ca21": "getClue4()", +"88e2da99": "randDelay()", +"88e2f29b": "updatedPrice()", +"88e3c5d6": "addVerifiedUser(address)", +"88e3cfda": "setResult(string)", +"88e3ffeb": "updateMinimumWeiRequired(uint256)", +"88e47f29": "_ChallengeSucceeded(uint256)", +"88e490eb": "getInfoCellBalance()", +"88e4b6ad": "calculatePotCut(uint256)", +"88e5581e": "twitterDropSingleAmount(address[],uint256)", +"88e62721": "revoke(address,bytes32)", +"88e67d96": "isAccess(address,string)", +"88e694aa": "MANNCOIN()", +"88e765ff": "maxBuyAmount()", +"88e814e6": "getTopPlayers()", +"88e85127": "ModeratorAdded(address,address,bool)", +"88e854e0": "SDR(uint256,string,string)", +"88e8e26a": "ServiceToken()", +"88e90253": "NewRateSet(uint256)", +"88e951dd": "totalContributors(uint256)", +"88e9d45d": "ButtonClickGameContract()", +"88e9fb4f": "keyEmployeesAllocatedFund()", +"88ea41b9": "setMinBet(uint256)", +"88ea70ee": "bountyTokensAddress()", +"88ea8ee5": "bonusCRS()", +"88ea8fd8": "manualUpdatePrice()", +"88eb615c": "LogWhiteListed(address,uint256)", +"88eb7af7": "_isHuman()", +"88eb944b": "addDedication(uint256,string)", +"88ebf975": "setDebt(uint256,address)", +"88ec6f42": "Cef()", +"88ec838f": "configParams()", +"88eccb09": "addLevel(uint256,uint256)", +"88ed8b36": "notRandomWithSeed(uint256,uint256)", +"88ede276": "hasBeenConstructed()", +"88ee4b2d": "_getIdIfValid(bytes32,uint256)", +"88eea4f3": "WhiteBitcoin()", +"88ef59fb": "releaseOldBalanceOf(address)", +"88efc97b": "activateEscapeHatch()", +"88efedf4": "AIRDROPS_PERIOD()", +"88f020bb": "drawWinner(uint8)", +"88f1ccf2": "cancelInvestment(address[])", +"88f2b12e": "SerpentHead()", +"88f34bc2": "depositAndVote(uint256,uint256,uint256)", +"88f53db1": "getDataRequest(uint256)", +"88f5eb36": "exchangeRateForBTC()", +"88f6d5a4": "constructCoinbaseTx(uint256,uint256)", +"88f7c6d6": "setExchangeStatus(bool,bool)", +"88f9ff98": "_random256()", +"88fabb3a": "SetMessage(string)", +"88fad42a": "EthereumRisen()", +"88fb4af0": "ShootRobinHood(uint256,string)", +"88fc0825": "unregisterNode(uint256)", +"88fc176c": "DucToken(uint256,string,uint8,string)", +"88fc65fb": "isTransferable(address,uint256)", +"88fcba88": "fundingDeadline(bytes32)", +"88fd0b6e": "getMembershipPrice(uint8)", +"88fd35e8": "setConfiguration(uint256,uint256,int256)", +"88fdf3d4": "setWinnerPrizes(uint32)", +"88fedd04": "houseProfit()", +"88ff2dcc": "createProject(string,address,address)", +"88ff9416": "initialize(address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256[])", +"88ffc33e": "bltMasterAcc()", +"88ffe867": "pledge()", +"89009ab0": "purchaseAd(uint256,uint256,string,string)", +"8901b9ae": "withdrawBalanceFromAdmin(uint256)", +"89020fe3": "PacifistFarmer()", +"89029d8c": "get_all(uint256,uint256)", +"89034082": "issueToken(address)", +"8905fd4f": "reclaimERC20(address)", +"89064fd2": "approveWithSender(address,address,uint256)", +"89065e9a": "getPlayerSpaceshipOwnerById(uint256)", +"89077ad2": "SharderToken()", +"8907e787": "isAccountWhitelisted(address)", +"89080102": "verifyDSHash(uint8,bytes,bytes)", +"8908017f": "calculatePhoenixPoolCut(uint256)", +"890814f8": "bountyValue(uint256,uint256)", +"890853d9": "HuatUSD()", +"8908e693": "setTokenCurator(address)", +"890a018d": "externalSales(uint8[],bytes32[],address[],uint256[],uint256[])", +"890a7ef7": "publish(bytes,string)", +"890a9917": "privateSaleMinContrAmount()", +"890ac366": "mintReserve()", +"890b2adc": "Reply(bytes32,bytes32,uint256)", +"890c6848": "WallCoin()", +"890d6908": "solve()", +"890e2a6b": "updInvestorPreSaleEnabled(address,bool)", +"890e839f": "isOnSale()", +"890e9d2f": "getAllowanceSpenderValue()", +"890ea91a": "creditsOf(uint256,address)", +"890eba68": "flag()", +"890ed1cb": "dealHouseCards()", +"890ede44": "TokenCoin5()", +"890f2168": "crowd_end_date()", +"8910b070": "NUC()", +"8910cd58": "substractLockedAmount(uint256)", +"89110058": "Investments(address)", +"89113858": "IHCToken(uint256,string,string)", +"8911cd9a": "silverPercentage()", +"8911cf0d": "unsafeResignOwnership()", +"8911e26b": "isUnrestricted()", +"89128b70": "get_submission_queue_length()", +"8912ab5c": "dropVotes(address[])", +"89135ae9": "setAdministrator(bytes32,bool)", +"891363a6": "lastCWCETH()", +"8913b809": "initPlayers(uint32,uint32)", +"891407c0": "purchaseTo(address,uint256)", +"8914f1e1": "getDepositAmountFor(address)", +"89158ff9": "assignDispute(string,address,string,address)", +"89165dcb": "changeEtherDeltaDeposit(address)", +"8916cbc6": "minRedeem(address,uint256,uint256)", +"8918485b": "setEthlanceSponsorContract(address)", +"8918ab1b": "Sumte()", +"89198fed": "fulfilled(bytes32,address)", +"8919e3b6": "VinzCoin(uint256,string,uint8,string)", +"891a2f31": "buyItem(string,uint256)", +"891a3e23": "gettotalEth()", +"891a8b85": "ethPriceInUSD()", +"891aab6a": "addStaffWhitelist(address[])", +"891acff7": "updatedPrice(string)", +"891c738a": "isTransPaused()", +"891d4fe8": "printContent()", +"891de9ed": "fromTLA(string)", +"891df671": "registeredAt(uint256)", +"891e6f43": "thisContract()", +"891e75bf": "preSaleCreated(uint256,uint256,uint256)", +"891f5ce5": "successfulFunding()", +"891fa67d": "PsyMultiSig(address[],uint256)", +"891fe103": "typeBuffPercentage()", +"89206411": "batchAttachAssets(uint256[])", +"8920bcf9": "mediaToken()", +"8921329f": "registerBlog(string)", +"89222698": "SetWriter(address,bool)", +"89224227": "haltDirectTrade()", +"892250a7": "commonBudgetAdress()", +"89225c5a": "bountyManagerAddress()", +"89231bcc": "getDataNum()", +"89233fbd": "getPlayerGuessNumbers()", +"892412f0": "availableInventoryOf(uint256)", +"89244e2a": "dateEnd()", +"8925d7bb": "getTotalBrags()", +"8925f9e9": "getWorseOrderId(bytes32)", +"89266fca": "tokensSoldOnPublicRound()", +"8926f723": "GMBCToken()", +"89273f15": "addStorage(string)", +"89281963": "setServicestationAddress(address,address)", +"8928378e": "getMarketPrice(uint256)", +"89286abd": "freezeAccountTransfers(address)", +"892886e1": "PresaleTokenPurchase(address,address,uint256,uint256)", +"89291b05": "updateSubscription(address,bool,uint256)", +"892a0e42": "releaseToSeller()", +"892ad596": "changeTimes(uint256,uint256,uint256,uint256)", +"892c0214": "NumberOfCurrentBlockMiners()", +"892cd384": "CreditHydraToken()", +"892d31e8": "setEndCloseSale(uint256)", +"892db057": "isTokenEscapable(address)", +"892dfdf6": "transferDisabled()", +"892e0614": "distributeDivs(uint256)", +"892e243a": "directorName()", +"892e3f98": "setContributionInWei(uint256)", +"892e8dd9": "getViewDataByIndex(uint256)", +"892ee1a2": "removeUserFromBlacklist(address)", +"892ef672": "getACLRole8972381298910001230()", +"892f81df": "initializeTreasure(uint256)", +"89301afc": "Registrator()", +"8930c702": "updateWhitelist(address,address,uint8)", +"89311e6f": "startIco()", +"8931c998": "calculateTokenPresale(uint256,uint256)", +"89320239": "WHP()", +"89320771": "FDC(address,string)", +"89325127": "test_require()", +"89327ad5": "transfer_single_token_balances(address)", +"8932da79": "additional_price_money()", +"8932dc3d": "publishResult(string,string)", +"893372ca": "cancelPending(bytes32)", +"89337e84": "createTokens(bytes32[])", +"89341f6e": "TCASH()", +"89349217": "GamersCoin()", +"8934d115": "verifyUrl(string,string)", +"8935556d": "setDividends(uint256)", +"8935860d": "transferAgent(address)", +"8935b613": "setContentsManager(address)", +"8935ced5": "weightOf(uint256,address)", +"8936b8d4": "getCurrentRateInCents()", +"8937a0e8": "Guestbook()", +"8937d3dd": "Champion()", +"8937e223": "distoryAndSend(address)", +"8938656b": "getGeneratorsIds()", +"893880b6": "purchaseShareContract(address)", +"8939f5f6": "recoverCat(uint256)", +"893ae703": "bonusInPhase4()", +"893b3dd5": "setFreeze(string,bool)", +"893b746a": "cooperateRewardSupply()", +"893b8b0a": "getCategoricalMarketNumTicks(uint256)", +"893c1d31": "bountyReserveTokensDistributed()", +"893cebb3": "createSalesOffer(bytes32,address,uint256,bool)", +"893cf478": "chargeVerificationFee(address,address)", +"893d20e8": "getOwner()", +"893d4948": "JTEToken()", +"893fb18e": "buyout(uint256,bool,uint256,uint256)", +"89400fcc": "SkillCoin()", +"89402a72": "__default__()", +"8940aebe": "publicKey(uint256)", +"8940afe7": "testFailBurnGuyNoAuth()", +"8941db65": "addTime()", +"894306d5": "CanChange()", +"89443aac": "bttsVersion()", +"89452488": "NEBC(uint256,string,string)", +"8945a8af": "TOKEN_RESERVE1_CAP()", +"8945b1fc": "takeOwnership(string)", +"8945d643": "m_softCap()", +"8945e00d": "getForkCalled()", +"89462c38": "setContract2(address)", +"89465d2e": "dataForWithdraw(address)", +"8946d33f": "SplitterEthToEtc()", +"89473a0e": "PRCT100_D_TEAM()", +"89476069": "withdrawToken(address)", +"894766dd": "setTotalCoins(uint32)", +"89483926": "checkGainsToReceive()", +"894875cf": "_decimals18()", +"8948fe67": "wlDuration()", +"89495172": "convictFinal(uint256,uint256)", +"8949e109": "curReward()", +"894a62b3": "addContributionList(bytes10,string)", +"894a93e2": "tgeSettingsPartInvestorIncreasePerStage()", +"894b8d2e": "victorieumStatic1Token()", +"894ba833": "disableContract()", +"894ca160": "CanToken()", +"894cd9b6": "placeBuy(address,uint256,uint256)", +"894cdcc1": "ADXToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"894d05b5": "buy_drink(uint256,uint256)", +"894d6ef9": "TripCoinTeamAddress()", +"894d7b08": "claimTokenBonus(address)", +"894e036d": "callAndReward_2(string,string,uint256)", +"894e5e1f": "GEE()", +"894e5f2d": "isUserAuthorized(address)", +"894ee6d9": "_getTimeValue(address,address)", +"894f6531": "SingleTokenLocker(address)", +"894fefeb": "TokenHeld()", +"89506a44": "MAX_TRANCHES()", +"89514f6e": "setSummary(string)", +"89519c50": "refundTokens(address,address,uint256)", +"895224db": "testControlBlobStoreNotRegistered()", +"89523d77": "removeProperty(bytes32)", +"895274bb": "getPlayerSpaceshipBattleLevelById(uint256)", +"8952877b": "storeProof(bytes32)", +"8952f965": "isTransferConfirmed(uint256)", +"8954f5b1": "winChoice()", +"895594f6": "setEarlyParticipantWhitelist(address,bool,uint256,uint256)", +"895595d5": "firstRoundICODiscount()", +"8955ed7e": "claimBalanceOwnership()", +"895678a2": "expireDelay()", +"89568a13": "TSTEST1()", +"895693a9": "getToBalance()", +"8956fceb": "addAlt(address,uint256,uint256)", +"89574144": "GXESwapper()", +"89578145": "checkIfYearHasPassed()", +"8957d6f2": "numOfLegendary()", +"8957f8bf": "getLastMoveTime(uint16)", +"89596409": "getMigrateState()", +"89597595": "HCLCToken(uint256,string,string)", +"8959cbfe": "punksOfferedForSale()", +"895a8cfb": "secondWeekMainICOBonusEstimate()", +"895ab68c": "canCallDefault(address)", +"895abac9": "landPriceCandy()", +"895b327e": "isTokenActive(address)", +"895b4da7": "RunSale()", +"895bf2e1": "tickets10price()", +"895c1596": "getExpectedTotalTokens()", +"895c1bdb": "setStatus(address,address,uint8)", +"895c4c39": "unlockDevSupply()", +"895c666a": "createCommonPlayer()", +"895cf354": "validCertificators(address)", +"895d4e1b": "getMiningDetail(uint256)", +"895e8b23": "_tokenExists(uint256)", +"895ec54c": "getPack(uint256)", +"895ee30d": "Purchase(address,address)", +"895f468b": "markAllRead()", +"895fb022": "purchase_car(uint256)", +"89604ed0": "rebalance_delete(uint256,bool)", +"89611d0a": "checkIfSignedBy(bytes32,address)", +"89612f95": "setPrivateSaleTokensSold(uint256)", +"896131ca": "NewEntry(address)", +"896147e1": "ratePre()", +"8962aead": "setPOOL_edit_23(string)", +"896317b8": "getAssetType()", +"89637214": "presalePiTokensLimit()", +"896372b4": "addLogBlock(uint256,uint256,uint256,string)", +"89638de3": "setItemNotForSale(uint256)", +"8963c04b": "tokenSaleTokenBalance()", +"8963dab4": "getNodeId(bytes,bytes)", +"89658163": "setPath(uint256,uint256,bytes,bytes)", +"8966321e": "canTransfer(address,address,uint256,bool)", +"89666fd6": "adminSetPercentInvite(uint256,uint256)", +"8966768f": "confirmOracle(address,uint256)", +"89668a39": "addOpenRoomCount(address)", +"89675cac": "set(address,address)", +"89676b27": "storePrizeMoney()", +"89685242": "isValidPeriod(uint256)", +"8968c17c": "BlockchainCutiesCore()", +"8968db88": "GazeCoin()", +"896941e1": "ethTransfertoKYC(address,uint256)", +"89698f02": "recordContract()", +"8969fb5f": "USDETHRATE()", +"896a17a4": "releaseRestBalanceAndSend(address)", +"896ca3f4": "put_purchase_for(uint256,address,address,uint256,uint256,uint256,address,bytes)", +"896ce019": "getDailyTransactionVolumeSending()", +"896d505a": "setReport(uint256,bytes)", +"896d807a": "setAttribute(bytes32,string,uint256)", +"896e0349": "TokensClaimed(address,uint256)", +"896ed75a": "refuseAddress(address)", +"896f40dd": "ownerOnly()", +"896f8b4c": "changeEthBackRate(address,uint8)", +"897032e3": "ClipToken()", +"8970430e": "IcoContributed(address,uint256,uint256)", +"8970a0f4": "getFinalPayoutDistributionHash()", +"8970d84c": "_tokens()", +"89712af3": "longTermHolding()", +"8971739b": "getVIPCount()", +"8972feba": "reserveTokensGroup(address[],uint256[])", +"8973123c": "saleStartDate()", +"8973d0cf": "CoinwareToken()", +"8973e316": "resolveSellCityForEther(uint16)", +"8974372d": "payFund()", +"897463aa": "startContribution()", +"89749adb": "BuyTokens(uint256)", +"8975e45f": "currentNumberOfUnits()", +"89760e0a": "stateIndexToOwner(uint256)", +"89765328": "totalInvestmentOf(address)", +"8976762d": "setA_Signature(uint256)", +"8977f909": "UTCStart()", +"89781912": "setAllowedAddresses(address,bool)", +"8978fc79": "batchDistributeFees(uint256,uint256[])", +"89790192": "WithFee(address,uint256)", +"897a7dab": "createTokens(uint256[],address[],bytes32[],uint256[],uint256[],bytes32[])", +"897b0637": "setMinAmount(uint256)", +"897c41dd": "showInvestorVaultFull(address)", +"897c8613": "payContributorByAdress(address)", +"897cb036": "softCapTokens()", +"897cceee": "lockContract(bool)", +"897d2b10": "getPixelArray()", +"897d55cd": "migrationGetBoard(bytes32)", +"897e47f5": "setDateMainEnd(uint256)", +"89800cc2": "mtrContractAddress()", +"89804ddc": "getSagaExchanger()", +"89805f30": "s32(bytes1)", +"89805fc6": "PPCContract()", +"8980f11f": "recoverERC20(address,uint256)", +"89813984": "isWhitelistAddressListed(address)", +"8981a7ca": "actionA(uint256)", +"8981d077": "lockForWork(address,address,uint256)", +"8981d513": "owner(bytes12)", +"89826963": "changeICOStartTime(uint256)", +"8982b185": "buySEKU(uint256,uint256)", +"8982d772": "submitInitialEmptyState(bytes32,uint64,uint256[2],bytes32,bytes32,uint8)", +"898366d7": "ETH888CrowdsaleS2(address,address)", +"8983d2e9": "goldSymbol()", +"8984034f": "emitPriceUpdated(uint256,uint256)", +"898403c3": "getCurrentBlockTime()", +"8984e5dd": "_subBalance(address,uint256,address)", +"89850fae": "nextStep(uint256)", +"89852db2": "PARSEC_CREDITS_MINIMAL_AMOUNT()", +"89853691": "readUint256(bytes32)", +"89859b50": "updateLatestTree(bytes32)", +"8985a309": "setAllowedAddress(address,address)", +"8985abc8": "publicSaleAmount()", +"898644cc": "getFreeMiner(address)", +"89864915": "TyzonSupply()", +"89869163": "claimFailedConsensus(address)", +"8986ff32": "setEndTimeIcoStage3(uint256)", +"898855ed": "changeName(bytes32)", +"89885a59": "tokenOwnerOf(uint256)", +"8988b284": "isMod(address)", +"8988c1ff": "LogWhitelistUpdated(address)", +"8988d59e": "Transfer(address,address,uint256,address,bytes,bytes)", +"89895d53": "orderBlockNumber(bytes32)", +"89897104": "_buyRank(address,uint256)", +"8989851c": "operationList(uint256)", +"898a1813": "expectationsLeft()", +"898aa23b": "setPriceInCents(uint256)", +"898ad5ec": "set_arbits_presale_open(bool)", +"898b7663": "add_profit(address,uint256)", +"898c94b7": "SetDidPayOut(bytes32,bool)", +"898ce10c": "ChangeItemOwnerID(uint256,uint256)", +"898dc9b6": "setData_31(string)", +"898e3950": "addWinner(address,uint256,uint256)", +"898f767b": "precioether()", +"898fb033": "updateDescription(bytes)", +"898fdf94": "claimRate()", +"8991dede": "Falcon()", +"89920edf": "mintLockCashout(int256,address,uint256)", +"899231ef": "PRE_ICO_MINIMUM_CONTRIBUTION()", +"8992ae0e": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_PATH()", +"8993021b": "risks(bytes32)", +"899346c7": "nextPositionId()", +"89935c39": "getAmbientTempControlLimits(bytes32)", +"8994fa53": "TopUpMember()", +"89952097": "releaseRestBalance()", +"8995305e": "AsterionWorldToken()", +"89975389": "newVoting(string)", +"89976229": "setAmout(uint256)", +"8997f8cf": "getTokenUpdatedCounter(uint256)", +"8998470d": "tradeIntentOf(address)", +"8998ef19": "withdrawTokenMaker(address,uint256,address)", +"899942b8": "Devcon2Token()", +"899967b7": "redeemExcluded(address[],uint256[])", +"8999dd63": "ESoulToken()", +"899a0e7e": "OpenAIBlockChainToken()", +"899a1e36": "addBounty(address,uint256)", +"899aa65c": "Judged(uint256,bool,address,bytes32)", +"899ae006": "createBabies(uint256[],uint256[],uint256[],uint256[])", +"899b3414": "updateCoupleImageIPFShash(string)", +"899b53c9": "RICHToken()", +"899b64d9": "tokensPerEther_denominator()", +"899b6713": "VIRTToken()", +"899bf897": "isAllowedToRedeemNow()", +"899c0360": "getVIPRank(address)", +"899c4434": "testValidateTrade(address,address,address)", +"899d1556": "firstRoundICOTokensLimit()", +"899d840f": "PayPoker(string,string)", +"899e0fc9": "balanceOfPot()", +"899e37b9": "mintAndLock(address,uint256,uint256)", +"899e87f3": "AmountSet(address,uint256)", +"899ecf2b": "phase3EndBlock()", +"899f107d": "roomNightsOfOwner(uint256,uint256,bool)", +"899f9d29": "YCBToken()", +"89a0b679": "setContributor(address,address,bool,uint16,uint16,address)", +"89a2662f": "NeonCoin(uint256,string,string)", +"89a27984": "phepToken()", +"89a30271": "USDC()", +"89a3a00d": "addMinutes(uint256,uint256)", +"89a3e807": "Corban(address)", +"89a419e1": "set_stage_Days(uint256)", +"89a451fb": "getPriceChannel(string)", +"89a45223": "testFailCreateWithParentsParentNotInUse1()", +"89a4931d": "maxContributionAmountContract()", +"89a4bd1b": "foundationHashed()", +"89a4c1a0": "DevAddress()", +"89a5f2df": "privateSaleBonus()", +"89a69c0e": "setSubRegistrar(bytes32,address)", +"89a7adcc": "DelSocialAccount(bytes32,bytes32)", +"89a81e83": "validPurchase(uint256,uint256,uint256)", +"89a83701": "level(address,address,uint256)", +"89a8814d": "GetLastName(uint256)", +"89a9453a": "removeAllowedContracts(address[])", +"89a9d38e": "_approve(address,address,bytes32)", +"89a9d6b4": "tokensRemainingStage3()", +"89aaad29": "currencyUpdateAgent()", +"89abeb19": "ProcessGameExt(uint256)", +"89ad0a34": "setLocked(address,bool)", +"89ad0efd": "calculateAmountOfUnits(uint256,uint256)", +"89ad50e3": "CindicatorTalk()", +"89ada759": "availableBountyCount()", +"89ae1c90": "nativeReputation()", +"89aeca76": "registrars(address)", +"89af049d": "removeNacFromNLF(uint256)", +"89af175c": "RiservaETH(uint256)", +"89af2dce": "getBalanceFrom(address)", +"89afaf9d": "AddMod(address,address,bool)", +"89afc0f1": "operatorFee()", +"89afcb44": "burn(address)", +"89b13814": "Killable()", +"89b1714b": "simpletransfer(address,uint256,uint256)", +"89b1802c": "feesRateCongres()", +"89b1fa0a": "ROLE_TRANSFER()", +"89b2050b": "addExtraBalance(address,uint256)", +"89b2b09e": "ABDEL_ADDRESS()", +"89b2df31": "getTurn(uint16)", +"89b337a7": "GetCityData()", +"89b38d2f": "getInvoicingAddressByIndex(string,uint256)", +"89b3f8c7": "Flames()", +"89b49d61": "checkCapNotReached(uint256)", +"89b4a36f": "Depot()", +"89b4c550": "checkAndSendPromoBonus(uint256)", +"89b51f94": "setCommunityAddress(address,address)", +"89b52360": "referralCount()", +"89b52b9b": "sendCoin(address[],uint256[],bytes32)", +"89b540aa": "FuckYou()", +"89b5b514": "maxFinalStage()", +"89b5ea24": "outputMoney(address,uint256)", +"89b61a85": "updateVeifyFee(uint256)", +"89b68f40": "releaseFounderTokens()", +"89b7e746": "getMyOpenedCount(address)", +"89b898b8": "batchConvertIntoHtlc(bytes32[],address[],uint256[],uint256[],uint256[],bytes32[])", +"89b8b492": "read(uint64)", +"89b8db55": "minBounty()", +"89b933cd": "serviceFallback(address,uint256,bytes,uint256)", +"89b9572f": "RBTToken()", +"89b97d07": "totalSite()", +"89b9defb": "buyTokenForAddressWithEuroCent(address,uint64)", +"89ba3b23": "confirmDepositQuest(address)", +"89ba8e61": "getExplicitStrategyState()", +"89bb55c7": "apply(bytes32,uint256,string)", +"89bc0e6e": "UnitedToken()", +"89bc2006": "BagPackToken()", +"89bc455d": "THO()", +"89bca2d5": "addAuctionItem(uint256,uint256,address,uint256)", +"89bcbee2": "DemoToken()", +"89bcf968": "timeExpires()", +"89bdb217": "totalTeamFundMinted()", +"89be87a1": "openChannel()", +"89bfc6be": "PIVOTCHAIN()", +"89c0b25c": "openDispute(address,string)", +"89c1108d": "isTimeVault()", +"89c186d5": "addNewBusinessWallet(address)", +"89c18b48": "EtherusToken(address)", +"89c19ddb": "concat(string,string)", +"89c2443e": "executeSelfdestruct()", +"89c29b61": "calculatePaycheck(uint256)", +"89c44def": "sendMileStone(address,uint256,uint256)", +"89c5077f": "withdrawDevFee(address,uint256)", +"89c55845": "setBonus(uint8[5])", +"89c5ee3b": "executeAfterFinalize(bytes)", +"89c67976": "getAcceptance(bytes32,address)", +"89c698d4": "CrypteriumToken()", +"89c73565": "birthBlockThreshold()", +"89c766fd": "pause_for_maintenance()", +"89c77dfe": "mintValue()", +"89c7abfd": "removeAdministator(address)", +"89c7e70c": "BitliquorStandardToken(uint256,string,uint8,string)", +"89c98c06": "getMaxGasPrice()", +"89c9c44a": "EmontFrenzy(address)", +"89c9c586": "slopeDuration()", +"89c9e80f": "PotOwner()", +"89cb29dd": "nextEscrowId()", +"89cbc416": "tokensRedeemed()", +"89cc5c2b": "createdBlockOnRevealsPhase(uint256,address)", +"89cc5ea8": "bid(string,address,uint256)", +"89cc81c1": "contribute(bytes32)", +"89ccd39a": "set_address_A(address,address)", +"89ccf28c": "checkCapAndRecord(address,uint256)", +"89cd4b5e": "decidingBlock()", +"89cda6a8": "pausePVP()", +"89ce16cc": "maxRange()", +"89ce33bd": "delegateERC820Management(address)", +"89ce555c": "devFeesAddr()", +"89ced196": "setNotUpdatable(bytes32)", +"89cf3204": "insurance()", +"89cf5604": "releaseReserveTokens()", +"89cf9f94": "_reserveRefTokens(address,uint256)", +"89cfa823": "addPendingWithdrawal(address,address,uint256)", +"89cfd71b": "setPrivate(uint256)", +"89d2fca3": "DoctorChainToken()", +"89d3a15b": "addNewBlock(bytes32[],bytes32,bytes32)", +"89d3ed8d": "defineDiscountBorderLines()", +"89d410e9": "setIcoOwner(address,address)", +"89d4a66c": "internalDeposit(address,uint256)", +"89d59ee5": "createPersonalDepositAddress()", +"89d5da3b": "AlphaMarketICO(address[])", +"89d61942": "nextAuctionSupply(uint256)", +"89d61d77": "setOrganizer(address)", +"89d67775": "window1TokenCreationCap()", +"89d6d69d": "stampIndexToApproved(uint256)", +"89d700a5": "TheGTokenTest(uint256,string,uint8,string)", +"89d75221": "revokeSignToCancelAgreement(uint256)", +"89d77f82": "blocksToWaitLong()", +"89d86c5d": "getRetailer(uint256)", +"89d8b472": "_error(string)", +"89d8ca67": "drawPot(bytes32,bytes32)", +"89d8f96f": "getDirectOffersComissionRatio()", +"89d9b059": "refillRatifiedMintPool()", +"89d9ed38": "reserveFunds(address,address)", +"89da85d3": "getNumberOfArticles()", +"89dbeb64": "fundForAirdrop()", +"89dc8719": "getUserMaxPurchase(address)", +"89dcbbf9": "getFreeLobster()", +"89dcd64f": "saiTub()", +"89dd9e22": "changeBrick(uint256,string,string,string,bytes32[])", +"89ddeff3": "neurodao()", +"89de2581": "SetStorageContract(address,address)", +"89df1b01": "setMultiRequestLastRequestId(uint256,uint256)", +"89e198b4": "validContract(uint32,uint32,address)", +"89e2605d": "setReleaseAmountToCreator(uint256)", +"89e28a47": "getGameResults()", +"89e2c014": "allocateVestedTokens(address,uint256,uint256,uint256,uint256)", +"89e2d8bb": "handlePayableSharesDelta(uint256,uint256)", +"89e40af2": "stageSum(uint256)", +"89e42346": "enableRefund()", +"89e478f6": "minGasForDrawing()", +"89e4e22b": "pingDelta(uint256)", +"89e52771": "getTeamAddresses()", +"89e582c4": "FuturXe(uint256,string,string,uint8)", +"89e6359f": "preIcoEthers(address)", +"89e63a60": "conversionHashes(bytes32)", +"89e6579b": "registerExchange(address,address,bool,bytes4[])", +"89e6b5fb": "transferOwnership(address,bytes32)", +"89e7b8f6": "frozenFundsOf(address)", +"89e7f5cb": "OCZAPI()", +"89e85217": "teamBalance()", +"89e877a3": "activateWhitelist()", +"89e8beb3": "_strConcat(string,string)", +"89e94513": "advance(bytes15,uint32,uint64,uint64,int64,uint64)", +"89e96773": "BEY()", +"89ea2cb7": "onRefundPollFinish(bool)", +"89ea642f": "getString()", +"89ea770a": "grantTokensAdvisors(address,uint256)", +"89eaa610": "userAccess(address)", +"89eb313a": "isReadyToMate(uint256)", +"89eb4fee": "MYJ256()", +"89ebe846": "loyaltyWallet()", +"89ecd0e8": "disableAllowBuy()", +"89ed0b30": "setOraclizeGas(uint32)", +"89ed2ebf": "_transferDrone(address,address,uint256)", +"89ede784": "starbaseCrowdsale()", +"89edf114": "referralOwnerPercent()", +"89ee8758": "Daz()", +"89eea0eb": "tetherCount(address)", +"89eedf00": "setPdfHash(bytes,bytes)", +"89ef40e7": "numberOfHealthyGenerations()", +"89ef75b1": "purchaseWithPromoter(address,address)", +"89ef8292": "bulkTransfer(address[],uint256[],address)", +"89efa1b5": "registerEtherBalance(address)", +"89f0151c": "addAttribute(bytes32)", +"89f03ebc": "Incrementer2()", +"89f0ccba": "pre_start()", +"89f12d00": "minBlockNumber()", +"89f12ed9": "novaAddress()", +"89f182aa": "createMilestoneAcceptanceProposal()", +"89f1c26e": "minterTransferFrom(address,address,address,uint256)", +"89f1d38d": "Swap(uint256)", +"89f21090": "singleValueAirDrop(address[],uint256)", +"89f224a8": "EthlanceJob(address)", +"89f27d55": "transferItem(uint256,address,uint256)", +"89f37c45": "test_invalidThrow()", +"89f395de": "tos()", +"89f47b64": "doCrowdsaleMinting(address,uint256)", +"89f4ed7a": "getLastTag(uint256)", +"89f4fd57": "getUserProxy()", +"89f63f50": "teamb()", +"89f650fd": "next(bool)", +"89f6709c": "longRecord(address,uint256)", +"89f6e826": "drainRemainingToken()", +"89f71d53": "lastAction()", +"89f85a4b": "BalanceLocked(address,uint256,uint256,uint256)", +"89f8601e": "Engraved(address,bytes32)", +"89f88d7a": "Chess(bool)", +"89f8ab94": "lastRateUpdateTimesForCurrencies(bytes4[])", +"89f91592": "agreeWithdraw(uint256)", +"89f915f6": "getNumbers()", +"89f9b01e": "countingMeme()", +"89fa413d": "tradeRobot()", +"89facb20": "INTERVAL()", +"89fb75f9": "amountOfStage(address,uint256)", +"89fc01f6": "GetBidSeries(address)", +"89fcd099": "getApproval(address,address)", +"89fd14a1": "raiseTrivialThreshold(uint256)", +"89fdd81d": "PRE_ICO_LIMIT()", +"89fe141a": "maxSupplyPossible()", +"89fe253a": "BountyCampaingWallet()", +"89fe5273": "getTokensToSend(uint256)", +"89fe8507": "setNumbers(uint256)", +"89fee530": "CBSToken(string,string,uint8,uint256,uint256,uint256,bool,bool)", +"89ff7fe0": "getCurrentBlockNum()", +"8a007d86": "preSaleMinPaymentWei()", +"8a007f30": "endGame(uint256,string)", +"8a00a82f": "withdrawRewardFor(address)", +"8a010c22": "changeBankAccount(address)", +"8a0193ac": "getGameExpired(uint256)", +"8a024a3f": "releaseINAToken()", +"8a03ad86": "getUserAddressById(uint256)", +"8a0490db": "PrakashToken()", +"8a0520fb": "isApprovable(address,uint256)", +"8a054ac2": "d()", +"8a059493": "fetchRoundIndexBySnapshotBlock(uint256)", +"8a05ad20": "TokensIssued(address,address,uint256)", +"8a05e478": "instantiate(address,address,bytes32)", +"8a063d91": "rewardThree()", +"8a066045": "unescrowFrom(address,uint256)", +"8a06cb71": "get_config()", +"8a06ce1b": "setTotalSupply(address)", +"8a0807b7": "indexOf(string,string)", +"8a0904da": "mainSale_EndDate()", +"8a098cd7": "bucketManager()", +"8a0a53d5": "BicycleSupply()", +"8a0c47cd": "changeWallet(uint8,address)", +"8a0cbf50": "VCCoin(address)", +"8a0cc3c6": "SMILO_COMMUNITY_AMOUNT()", +"8a0e5a75": "addToPublicSaleWhitelist(address[])", +"8a0e859f": "isDiamondAuction()", +"8a0f1e52": "PlayerBet(uint256,uint256)", +"8a107a31": "generate(string,address,address,bytes32,uint256,uint256)", +"8a1129f1": "unfreeze_start_date()", +"8a120dc9": "testBitEqualFailIndexOOB()", +"8a124744": "SiuToken()", +"8a127931": "profit5eggs()", +"8a13796e": "CERB_Coin()", +"8a13aa4b": "takeEth()", +"8a13aa4f": "WorldToken()", +"8a13eea7": "erc20Token()", +"8a1427d1": "addReferrerDefaultRate(address)", +"8a1489e3": "viewInvestorDividendHistory(uint256)", +"8a14f12c": "totalWagered()", +"8a155171": "availableForWithdrawal(address,address)", +"8a157df3": "createAuction(uint256,uint256,uint256,uint256,uint256)", +"8a157fae": "getEthBase()", +"8a1678a4": "LUMA()", +"8a17041a": "_founder_one()", +"8a17164c": "distributeTokenSaleJackpot(uint256,uint256)", +"8a172f2e": "getPawnEngine(uint256)", +"8a175ac2": "enableContribution(bool)", +"8a186788": "lookupIndex(uint256)", +"8a18a804": "UnsoldTokensBurnt(uint256)", +"8a18c55f": "SMT()", +"8a192c70": "setWLMTfinney(uint256)", +"8a194223": "Cryptolotto6Hours(address,address,address,address)", +"8a196437": "VRJToken()", +"8a19ac6d": "fechAllVoteResultPreRoundByBlock(uint256)", +"8a19b4d2": "addAdmin(address,address)", +"8a19c8bc": "currentRound()", +"8a19e355": "addToBalance(uint256)", +"8a1abbcf": "_getClientSupply(address,uint256,uint256)", +"8a1af4c4": "addOperator(address,address)", +"8a1b991d": "SBCE(uint256,uint256)", +"8a1bb169": "getJsonToTokens(string,uint256)", +"8a1bba96": "InvestorSum()", +"8a1bda63": "LogRedistributeTokens(address,uint8,uint256)", +"8a1be474": "CCNCrowdsale(address)", +"8a1d42f4": "setData_4(string)", +"8a1d8ae6": "x32323(uint32,string,uint8,string,address)", +"8a1dd162": "getPixel(uint256,uint256)", +"8a1e1404": "showFPLowerlim()", +"8a1f7a1b": "getMesa(uint256,uint256)", +"8a1fde4b": "setMaxwin(uint16)", +"8a20d00c": "buyTokensFromContract(uint256)", +"8a20f724": "currentRoundIndexByDate()", +"8a20f73c": "isInstrument(address)", +"8a213adb": "testFailMintGuyNoAuth()", +"8a237f27": "F2D()", +"8a2418ab": "nextSeedHashA()", +"8a24fd78": "convertGeneArray(uint256)", +"8a252194": "betGanjilGenap(bool)", +"8a252831": "asyncSend(address)", +"8a25aefa": "TEST_HOUSE()", +"8a2693e5": "kycVerification(address,address,uint256)", +"8a26d4c4": "GBTToken()", +"8a27a31c": "currentBanker()", +"8a27a51c": "transferGiveaway(address)", +"8a27a88b": "recoverAddressFromBalanceProofUpdateMessage(uint256,bytes32,uint256,bytes32,bytes,bytes)", +"8a294c60": "blacklisting(address)", +"8a29b77d": "receiveApproval(bytes)", +"8a2a0879": "TAUKEAYAM()", +"8a2a60ef": "foreignDailyLimit()", +"8a2ade34": "DonationClaimed(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"8a2ae2ab": "killTile(uint16,uint8)", +"8a2bfdf2": "add2Auction(uint256,uint256,uint256,uint256,uint256)", +"8a2cb24d": "castleExpAdjustment()", +"8a2e196c": "NTRYAvailableForSale()", +"8a2e2bf8": "updateLuckpool(uint256)", +"8a2e467c": "firstRoundTime()", +"8a2f6f94": "getRoleStatus(address)", +"8a30442e": "validTransfer(address,address,uint256,bool)", +"8a306c21": "mainSaleSupply()", +"8a31ffda": "replaceBoardMembers(address[])", +"8a323b38": "Contract(uint256,string,uint8,string)", +"8a329809": "setFeeContractAddress(address)", +"8a331846": "dividendParentsPercentage()", +"8a333b50": "max_supply()", +"8a33f585": "getOrder(address,uint32)", +"8a340eab": "BKToken()", +"8a341c83": "testErrorRootAuthorityChangeUnownedPackage()", +"8a34396a": "personalCapActive()", +"8a344477": "putDeed(bytes32,uint256,bytes32,bytes32,uint256,string)", +"8a349cc4": "subscribtionLittafi(uint256,string,string)", +"8a34bb24": "changeContractFee(uint256)", +"8a355a57": "removeProvider(address)", +"8a359d6e": "getEducationCitizens(uint256)", +"8a35b8c7": "invested(address,uint256)", +"8a35f788": "_getWinner()", +"8a36c3dc": "TeamToken(string,string,address)", +"8a36ebc2": "showSmallProfit()", +"8a36f5a2": "Debug(uint256)", +"8a38ab2c": "createCourse(string)", +"8a3907b9": "buyPerSell(uint16,bytes32)", +"8a394c4c": "eraseUnsoldPreSaleTokens()", +"8a39ebdc": "globalPresaleLimit()", +"8a3a84a8": "Total_Payouts()", +"8a3aa194": "endCrowdSaleTime()", +"8a3b0199": "transferOnBehalf(address,address,uint256)", +"8a3bacd1": "backup_drawdown()", +"8a3bc2bc": "iPropose(bytes,uint256,bool)", +"8a3c36cb": "DollHair()", +"8a3c44a5": "Constructor()", +"8a3d6290": "addBountyTransferredTokens(uint256)", +"8a3d7cdc": "tiles(uint256,uint256)", +"8a3db05f": "_myTokeName()", +"8a3e37c3": "StarbaseMarketingCampaign(address)", +"8a3e44d4": "assetMoveInformation(address,address)", +"8a3e99ff": "HighCastleToken()", +"8a3f6e2a": "transferFromAndDepositTokenFunction(address,uint256,address)", +"8a3f8a23": "queryChibi(uint256)", +"8a4068dd": "transfer()", +"8a40bd00": "allowedToUpgrade()", +"8a40c4c4": "Youdeum()", +"8a426b1b": "handleExternalBuyers(address[],uint256[],uint256[],uint256[])", +"8a42b68c": "approveOrderHash(bytes32)", +"8a42ebe9": "set(string,uint256)", +"8a433274": "executeVoting(uint256,bytes)", +"8a43fc7e": "return_rejected_payment(uint256)", +"8a449c2c": "VividoRaidenToken()", +"8a44ae91": "setAUM(uint256)", +"8a45242d": "newGame(bytes32,uint256,uint256,uint256)", +"8a45557e": "flowerTotalSupply()", +"8a4577ea": "returnTokensFromTeamAddress(uint256)", +"8a462fbc": "calculateNewPrice(uint256)", +"8a46467d": "reloadCore(address,uint256,uint256)", +"8a4660fe": "MINIMUM_INVESTMENT()", +"8a468e15": "TBowner()", +"8a469c16": "addGeneralMilestone(string,string,uint64)", +"8a46bf6d": "testFallback()", +"8a47cadb": "SunPowerToken(address,uint256)", +"8a48941f": "getDistributionFacts()", +"8a48ac03": "getAccounts()", +"8a49a3cc": "updateTrustScore(address,uint256,uint256)", +"8a4a8718": "GoinbitToken()", +"8a4a9aab": "xhstoken()", +"8a4af069": "TotalTokenSupply()", +"8a4b08d9": "getPriceRate()", +"8a4be59e": "incentiveDistributed()", +"8a4c81c2": "SEADToken(uint256,uint256,uint256)", +"8a4cae0e": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256,int256[])", +"8a4d5a67": "content()", +"8a4db4fa": "allowedToBuyBack()", +"8a4e3025": "addStaff(string,uint256)", +"8a4e4639": "pregnantPoniesies()", +"8a4e7a7c": "endCrowdsalePublic()", +"8a4ea479": "addUndergraduate(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"8a4fb16a": "getWithdrawal(uint256)", +"8a4fbead": "setTokenAllowance(address,uint256)", +"8a4fe8ac": "membersNumber()", +"8a505b4c": "setAutoBuyFee(uint256,uint256)", +"8a5144c0": "estProviderFee(address,uint256)", +"8a519fb9": "BlockChainEnterprise()", +"8a51d0fc": "totalEarlyInvSupply()", +"8a51e8ed": "_timeLimit()", +"8a529159": "KinguinKrowns()", +"8a53360f": "GrantUpdated(address,uint256,uint256)", +"8a53862d": "refundPartCollateral()", +"8a53c3b1": "TeamTokensHolderMock(address,address,address)", +"8a53f230": "noError()", +"8a545aec": "getEngineerPrizePool()", +"8a547932": "sendFounderAndTeamTokens()", +"8a54d6a4": "recordVotes(uint256[])", +"8a55b001": "Sleipnirwallet()", +"8a55d36e": "isStart()", +"8a5651e3": "EMISSION_FOR_PRESALE()", +"8a56b230": "setMiningWarInterface(address)", +"8a56ca45": "lastOwner()", +"8a56d115": "lagDefrost()", +"8a56e85e": "_createRandomDna(string)", +"8a56f3ee": "burnFrom(uint256,address)", +"8a56fe46": "orderExpired(address,address)", +"8a570230": "IDK()", +"8a57af6b": "lockAfter(address,uint256,uint256)", +"8a585214": "BogpillToken()", +"8a5910a5": "RewardTimePeriod()", +"8a593cbe": "pre_ico(address,uint256)", +"8a59eb56": "updateStatus(bytes32)", +"8a5a68f4": "richtokenIndexToOwner(uint256)", +"8a5be698": "balanceOfDerivative()", +"8a5c19c0": "getWeekNo()", +"8a5c9098": "_mint(address,uint32,uint32,uint32)", +"8a5cca14": "AccountTransfersFrozen(address,bool)", +"8a5cd1ca": "updateBlockVoter(uint256,address,bytes32,uint256,uint256)", +"8a5cf5ee": "quarter3()", +"8a5d815e": "finishContract()", +"8a5ddd9b": "emergencyAndHiddenCapToggle()", +"8a5ddf9d": "emergencyRedeem(uint256,address[])", +"8a5fb3ca": "currentFeePercentage()", +"8a604017": "pendingParticipants(uint256)", +"8a6083d2": "changeCrowdfundState()", +"8a609155": "totalUniquePlayers()", +"8a6158f7": "startSettlementProcess()", +"8a61a2a6": "NewKoth(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"8a61b26d": "startICOPhaseTwo()", +"8a61bb91": "initiateBoardMemberVote(string,bytes32,address[])", +"8a61dcb7": "MiningReward()", +"8a626ba1": "offerPriceCandy(uint256)", +"8a6281f6": "getOwnerInfos()", +"8a62e9e9": "setIgnoreRequestIds(bytes32[],bool[])", +"8a62fd12": "NVTFallback(address,uint256,uint256)", +"8a6508ce": "removeCooldown(uint256)", +"8a653c93": "extGetLock(uint256)", +"8a654a64": "lockedAccountThresholdEth()", +"8a65d874": "userStats(address)", +"8a662b59": "SOLID()", +"8a6655d6": "vote(uint256,uint256,uint256)", +"8a6700e8": "Dex(address,address,address,uint256,uint256,uint256)", +"8a67456a": "contractPaused()", +"8a67c544": "setSchemaValidity(bytes32,bool)", +"8a67f04b": "_payoutMining(uint256,address,address)", +"8a67f4bf": "getRewardsBalance(address)", +"8a684f97": "EthMsig()", +"8a689784": "blocksDelay()", +"8a68ae3c": "transferPaladinOwnership(address)", +"8a69218c": "getLastRewardTime(uint256)", +"8a699023": "phase8Price()", +"8a69fead": "getTitulaire_Compte_1()", +"8a6a3584": "clearAccount(address)", +"8a6a8b6c": "getMonthlyTransactionVolumeSending()", +"8a6b114b": "getBet(address,uint256)", +"8a6b6877": "withdrawMineral(uint256)", +"8a6b9be4": "allowToWithdrawFromReserve()", +"8a6bc85a": "getInterestor(address)", +"8a6c02ae": "safeWithdrawal3(address)", +"8a6c0b26": "registerCreatorsPools(address[],uint256)", +"8a6d2d7b": "MATOU()", +"8a6d39b9": "Leak()", +"8a6db9c3": "minterAllowance(address)", +"8a6e0a8e": "_increaseApproval(address,address,uint256)", +"8a6ee066": "_releaseWithReward()", +"8a7097ce": "checkWithdrawalsgross(address)", +"8a7180ae": "team_token_percentage_max()", +"8a72ea6a": "offers(uint256)", +"8a738683": "sweep(address,bytes32)", +"8a7398e7": "getAllRoundRefIncome(address,address)", +"8a74b45c": "editApi(uint256,uint256,address,string)", +"8a74ee43": "allowTransferFrom(address)", +"8a74f69d": "transferMod(address)", +"8a758625": "setStrF1IntF2StrF2UintF2(string,int256,string,uint256)", +"8a75f56a": "setArbiterLocked(address,bool)", +"8a769d35": "miningTarget()", +"8a76a63e": "whitelistedInvestorCounter()", +"8a76d99b": "buyTicket(uint32,uint32,uint32,uint32,uint32,uint32)", +"8a775ab6": "RiskPrices(uint128[])", +"8a77ba1a": "companyVault()", +"8a78b7fb": "test_invalidProposalExecution()", +"8a78f5e2": "changeMember(address,bool,bool,uint256)", +"8a7a7e03": "ETH_PER_LARE()", +"8a7a8f46": "HJF()", +"8a7c20d7": "setReferralFund(uint256)", +"8a7c2ad7": "buyService(address,uint256,bytes)", +"8a7c2be2": "payEth(address,uint256,uint256)", +"8a7c2d6d": "hasOpenApplicationFromSource(address,address)", +"8a7c63c5": "privateStartTime()", +"8a7cc2ca": "RemapImported()", +"8a7d124b": "destroyToken(uint256)", +"8a7e30a1": "token_set()", +"8a7e5144": "addWhiteList(uint8,address,uint256)", +"8a7ed05c": "MAX_BID_FRAC_TOP()", +"8a7ef3df": "testFailCreateWithParentsParentSameItemId1()", +"8a7f1146": "RetrieveFunds()", +"8a7f800c": "preCensor(bool)", +"8a808acf": "Yaraq()", +"8a8090b8": "_setUint(bytes32,uint256)", +"8a80d9a3": "isRefundPaused()", +"8a80dfb1": "isFirstBadgeEle(uint256)", +"8a8146d0": "end_ICO_PreICO()", +"8a814cfe": "MyCrowdsale()", +"8a827eb9": "setSecondary(address)", +"8a82a09d": "MISTT1()", +"8a83d4a0": "burnMythexTokens(address,uint256)", +"8a863fbd": "juryOnlineWallet()", +"8a8672dc": "DINRegistry(uint256)", +"8a871c5f": "crosairVouchersMinted()", +"8a874084": "updateInteface(address,address)", +"8a87873a": "create(bytes32,address,bytes32[3],bytes32,bytes32)", +"8a87aeb9": "EthToOwner(address,address,uint256)", +"8a87b5c5": "dailyAdminAllowance()", +"8a87d8ea": "hasLicenseTerms(bytes32)", +"8a881e0e": "isExists(bytes32)", +"8a88c349": "addVestingMember(address,uint256,uint256,uint256)", +"8a88c4fe": "replaceOwnerIndexed(address,address,uint256)", +"8a890695": "logPurchaseViaFiat(address,uint256,bytes32)", +"8a892271": "initiateLocking(uint256)", +"8a89b338": "set_commandPercent(uint256)", +"8a8a0aab": "_b2(string,address)", +"8a8b4d61": "MediaBroadcast()", +"8a8b51b8": "setAddGas(address,uint256)", +"8a8b7deb": "CAT()", +"8a8b7e02": "whitelist_enabled()", +"8a8b98dd": "ETHT()", +"8a8bbd5c": "ThanhnvToken()", +"8a8bf82a": "batchTransferToken(address,address,bytes32[])", +"8a8c523c": "enableTrading()", +"8a8c8c42": "TokenCoin()", +"8a8cd78d": "setTurnoverTo(address,uint256)", +"8a8e2028": "getCurrentTranche(uint256)", +"8a8e3999": "_unsafeEncodeTokenId(int256,int256)", +"8a8e5239": "get_power(address)", +"8a8e5afb": "shaCommit(uint256)", +"8a8ede8a": "hasStatus(address,address,uint8)", +"8a8f1f25": "setAccountSpendingLimit(address,uint256,string)", +"8a8f5b79": "newXPAAssets()", +"8a905482": "createIpo(address,uint256,uint256,string,string)", +"8a926d0f": "maxTokenAmount()", +"8a933eac": "setSmartContractPrice(uint256)", +"8a93d70d": "MakerWithdrewEther(uint256)", +"8a93dbdf": "getInvestorDividend(address)", +"8a946339": "ERC20Token(string,string,uint256)", +"8a955876": "incrementCountSales(uint256,uint256)", +"8a957929": "setFeeAuthority(address)", +"8a957f15": "ccReleaseBlock()", +"8a95a746": "pie()", +"8a95addc": "NewPotentialOwner(address,address)", +"8a95f59f": "setHHRAddress(address)", +"8a96e27e": "CTTCToken()", +"8a973e17": "borrowEther(uint256)", +"8a97d915": "TokenMetadataUpdated(uint256,address,string)", +"8a983fbc": "KulouCoin()", +"8a98a9cc": "gen0SaleCount()", +"8a98cbd0": "SalePaused()", +"8a98deca": "setEtherCostOfEachToken(uint256)", +"8a9920b7": "emergentWithdraw()", +"8a99aa69": "_setStore(address)", +"8a99e917": "activatedPhases(uint256)", +"8a99fc87": "checkWhenContributorCanTransferOrWithdraw(address)", +"8a9b2b36": "_fillCardStruct(uint8,address,string,string,string)", +"8a9b35a7": "totalPresaleWei()", +"8a9b4067": "ren()", +"8a9b809b": "ChargCoinContract()", +"8a9ba931": "setContract(address,address,address,address,address,address,address)", +"8a9bb02a": "getRoundInfo(uint256,uint256)", +"8a9c497b": "totalBunniesCreated()", +"8a9c636c": "setAquiferInstituteCoinAdd(address)", +"8a9cb361": "hundredPercent()", +"8a9cba3c": "set_result_of_game(uint8)", +"8a9cf23a": "isEarlybird()", +"8a9d1fbf": "uniquePet(uint64)", +"8a9d3839": "setBountyWallet(address)", +"8a9d43e2": "getPlayerFee(uint256)", +"8a9d6bb1": "GEZI()", +"8a9d7982": "getActiveBetsRefund(address)", +"8a9e0876": "tokensReleased()", +"8a9e8671": "totalBid()", +"8a9f8a43": "set_block(uint256)", +"8a9fb135": "humaniqToken()", +"8a9fc475": "wipe(address,bytes32,uint256,address)", +"8a9ffb90": "transfer(string,string,bool)", +"8aa001fc": "getSecond(uint256)", +"8aa08617": "mintInitialTokens(address,uint256)", +"8aa0fdad": "mint(string,string)", +"8aa10435": "getContractVersion()", +"8aa14a07": "transferToAddress(address,uint256,bool)", +"8aa1949a": "executionMaxPerTx()", +"8aa19ef7": "setOraclizeQueryGasPrice(uint256)", +"8aa2c280": "newAuction(uint128,uint256,uint256,uint256)", +"8aa31cbf": "ICO_PRICE8()", +"8aa33776": "setMsgPrice(uint256)", +"8aa35083": "PRE_CROWDSALE_DURATION()", +"8aa3cc5a": "setMonsterAssetAddress(address)", +"8aa43284": "getNbProjects(string)", +"8aa4e240": "payoutOCDividend(address,address)", +"8aa4e315": "setExchangePrice(uint256)", +"8aa5440e": "setXCPlugin(address)", +"8aa5b2c3": "changeStartTime(uint256)", +"8aa6e6de": "approveMint(uint256)", +"8aa6f1b1": "setUltimateOutcome(bytes32)", +"8aa7d975": "DOCC()", +"8aa81eac": "ixentest()", +"8aa91406": "createIdea(address,address[],string)", +"8aa94f56": "updateUserCreatedPerformance(uint256)", +"8aa96f38": "collectAllocations()", +"8aa978be": "Pricing(address)", +"8aa986f6": "minimumContributionPhase2()", +"8aa99826": "IsTradeable()", +"8aaa559a": "ProtectedApi(address)", +"8aaaa197": "getCurrentRoundEndTime()", +"8aab811e": "setLOCdata(string,address,int256,address,uint256,string,uint256)", +"8aabb56f": "setMigrateIn(bool)", +"8aabe700": "refundTokensForAddress(address)", +"8aabff06": "getPVECooldown(uint256)", +"8aac0fa4": "transferGasFee(uint256)", +"8aac1708": "_deleteOperation(bytes32)", +"8aac61e9": "assetArray()", +"8aadf70a": "generateUniquePets(uint8)", +"8aae13cb": "getTokensByUSD(uint256)", +"8aae1f50": "withdrawOperationFees(uint32[])", +"8aae45be": "lastBonusMultiplier()", +"8aaf09a1": "getInitialInvestAddres()", +"8aaf699d": "sendCommunitySupplyToken(address,uint256)", +"8aafef65": "ITC(uint256,string,string)", +"8ab058b1": "AllocateToken(address[])", +"8ab11869": "sign(string,string,string,string)", +"8ab1a5d4": "sell(uint256,uint256,bool)", +"8ab1d681": "removeFromWhitelist(address)", +"8ab21fb6": "delegateVote()", +"8ab30e9f": "test_validShouldBe3_increaseBlocksBy100()", +"8ab3580c": "bigbomToken()", +"8ab3e33f": "removeKey(address,address)", +"8ab422a1": "addEmployee(uint256,string,string,string,string)", +"8ab476bf": "setDevelopers(address)", +"8ab49873": "isSubmitterAccepted(uint256,address)", +"8ab4ca8a": "lockRound(uint256)", +"8ab4d1ca": "PapyrusAirdrop(address)", +"8ab5212b": "teamVault()", +"8ab5fcc5": "setTypePrice(uint256,uint256)", +"8ab63380": "setContractAddresses(address,address,address)", +"8ab7f807": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8ab8064f": "continueITO()", +"8ab8342e": "changeInsurerOperation()", +"8ab905d4": "existedOnWhitelist(address)", +"8aba9215": "initialBlockHeights(uint256)", +"8abab8fb": "saleAccepting()", +"8abadb6b": "setAccountLevel(address,uint256)", +"8abb0e1f": "MRDSPrivateSale()", +"8abcb485": "InvestorBonusGet(address[])", +"8abdb005": "addCard(string,uint256,int256,string,uint256,uint256,address)", +"8abdf5aa": "serviceFee()", +"8abe09f2": "now()", +"8abe5593": "hashLength()", +"8abe59ea": "outcomeTokens(uint256)", +"8abe789b": "mulToResult(int256)", +"8abf344d": "callStages()", +"8ac01eaa": "SHARE_CRYSTAL()", +"8ac0ca36": "buyViaJohan()", +"8ac0e150": "fatigueBlock()", +"8ac0eef9": "changeUserKey()", +"8ac1a8d6": "weiRaiseLimit()", +"8ac1f290": "changelp20(address)", +"8ac2571f": "publish(address,bytes32,bytes32)", +"8ac27f5f": "investors()", +"8ac2b5f2": "_claimLoanToken(address)", +"8ac2c680": "minInvestment()", +"8ac341c6": "numModules()", +"8ac3ea2c": "recordEvaluation(uint32,uint32,uint8,uint8,uint8,uint8,uint8)", +"8ac44de2": "TBT_MINER()", +"8ac4e1d8": "TemperatureOracle()", +"8ac6a869": "isObsolete()", +"8ac78c80": "Docsign()", +"8ac81296": "ethTokenRatio()", +"8ac91be7": "unPause(bytes32)", +"8ac97efb": "whitelistDayCount()", +"8ac9fa73": "getTrustState()", +"8acb99ac": "owned(uint256)", +"8ace1732": "burnerOwner()", +"8ace4131": "CryptoTestCoin()", +"8aceaa4a": "GetTotalGamblerNum()", +"8acf94df": "setTierData(uint256,uint256,uint256)", +"8ad141ec": "updatePlayerContinusFund(address,uint256,uint256)", +"8ad14ee6": "setSuccessful()", +"8ad17f00": "setJackpotFeeRate(uint256)", +"8ad1896c": "bonusOptionsPromille()", +"8ad1d846": "getDebtorsDebts(address)", +"8ad20640": "allowedSinceReadable()", +"8ad2739b": "UMCCToken()", +"8ad2eaea": "has_token_sale_started()", +"8ad2f289": "checkPermission(address,address,bytes4)", +"8ad30473": "set_crowdsaleClosed(bool)", +"8ad46ba0": "b32toHexString(bytes32)", +"8ad476d7": "foundationReservation()", +"8ad47c47": "Dragon()", +"8ad5d779": "increaseOffsaleCountByOne()", +"8ad68253": "HostingDNS(uint256)", +"8ad682af": "ROLE_OWNER()", +"8ad8998c": "tokenTotalClaim(address)", +"8ad9a976": "getServiceStat(uint64)", +"8ad9c8c3": "GetUserConAddr(string)", +"8ada066e": "getCounter()", +"8ada1957": "TOKEN_WALLET()", +"8ada80a2": "getWinnersLen()", +"8adb208d": "withdrawDukeOwnersMoney()", +"8adba5a9": "cap4(address)", +"8add359d": "WorkerPoolHub()", +"8adde811": "test2_addingSecond()", +"8addf3ca": "performUpdateMemsize()", +"8ade246a": "makeBet(uint256,address)", +"8ae0368b": "challengeNumber()", +"8ae06cf7": "SAFeth()", +"8ae0a7ec": "uniq(uint32[])", +"8ae18dfd": "setRemainingLockDate(uint256)", +"8ae1d8d4": "StatsTotalSupply()", +"8ae3beb2": "setPending(bool)", +"8ae4200a": "revokePrivilege(string)", +"8ae470a9": "set_time(uint256)", +"8ae475a9": "notorize(string)", +"8ae5e0ec": "allowManyTokens(address[],address,uint256[],bool[])", +"8ae5e372": "getMouthValue(uint256)", +"8ae63d6d": "blockNum()", +"8ae69807": "sendAirdrop(address[],bool)", +"8ae69caa": "getCountryOwnershipList()", +"8ae76b77": "createToken(uint256,address,bool,uint256)", +"8ae79c8c": "LovelockPayment(address,bytes32,uint256)", +"8ae83bf3": "DISPLAY_CLASSIQUE()", +"8ae85b80": "storeN(uint8[],uint256,uint256,uint256)", +"8ae881a6": "initMetadata(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,address)", +"8ae8c1f3": "transferFromCrowdfund(address,uint256)", +"8ae986cf": "registrantApprove(address)", +"8aea12b6": "c_paymentChannelBonusPercent()", +"8aea2f6e": "totalFundingAmount()", +"8aeb8f98": "isNotEmpty(string,string)", +"8aebebd9": "restartCycle()", +"8aece8b0": "MRNToEth()", +"8aed434a": "oracle_values(uint256)", +"8aee0443": "getNumberOfPurchases()", +"8aee3a54": "enableATMExchange()", +"8aef16d0": "appendSupplyChanges(address,bool,uint256)", +"8aef91f5": "TimeLeftBeforeCrowdsale()", +"8af1bac9": "isMoron(address)", +"8af1c825": "SALE_MIN_BUY()", +"8af2c328": "buyTokensFor(address,uint256,uint256)", +"8af2ce26": "districtLimit()", +"8af2d152": "limit6()", +"8af49ab7": "maintain(uint256,uint256)", +"8af51833": "_transfer(address,string,address,string,uint256)", +"8af57597": "getSingleDeveloper(address)", +"8af6c259": "totalDuration()", +"8af784dc": "expectEventsExact(address)", +"8af82a2e": "getFirstUnsortedOffer()", +"8af9f493": "reap(address)", +"8afa08bd": "setDrawDate(uint256)", +"8afa46b1": "refunds()", +"8afa7c6a": "createBasket(string,string,address[],uint256[],address,uint256)", +"8afbcdd0": "setEmissions(uint256[])", +"8afbf669": "withdrawRemainingTokens()", +"8afc3605": "Ownable()", +"8afcf1c9": "_transferSignership(address)", +"8afdc26e": "currentIcoPhaseBonus()", +"8aff794d": "milestoneSystem()", +"8b00299b": "setSellComissionUnits(uint256)", +"8b008f0f": "setBuyBackPrice(uint256)", +"8b00c467": "growthTokensWallet()", +"8b0133d5": "calcBonus(uint256,uint256)", +"8b018bca": "maxDividendDepth()", +"8b01bcc3": "isJobCancel(uint256)", +"8b021df4": "safePayback(address,uint256)", +"8b0254b6": "bilateralCancelOrder(bytes32)", +"8b02c8b2": "addFundTX(uint256,uint256)", +"8b031e1c": "_checkFundingGoalReached()", +"8b034136": "totalBids()", +"8b036ee2": "PRE_SALE_BONUS_PERCENTAGE()", +"8b038f7f": "edrBalance()", +"8b03fcfd": "backersRedeemed(address)", +"8b043e08": "getPublisher(address)", +"8b044a50": "getCofounditTokenAddress()", +"8b0451d9": "CAT_PER_ETH_SECOND_EARLY_BIRD_RATE()", +"8b048091": "getTicketsSoldToday()", +"8b048645": "setCCH_edit_26(string)", +"8b05afd2": "saveBytes(bytes32)", +"8b06a662": "submitTotalSellOrder(bytes32,uint256,uint256)", +"8b072f0e": "migratePlayer(address,address,uint256,uint256,uint256)", +"8b073bb3": "changeStageBlock(uint256)", +"8b077355": "saleDistributorAddress()", +"8b07b006": "_tokensToSell()", +"8b07edba": "getI1()", +"8b08292d": "isValidAirDropForAll()", +"8b087f3f": "signToCancelAgreement(uint256)", +"8b092580": "preIcoHasEnded()", +"8b095904": "getBalancePercentageLimit()", +"8b0980d9": "Phoenixcurrency()", +"8b0b8820": "transactionStructFromBytesSeriality(bytes)", +"8b0b9cac": "setLatestTokenAllocation(address,address,uint256)", +"8b0b9ed4": "getWinningNumber()", +"8b0c7f67": "CROWD_WAVE2_PERIOD()", +"8b0d0258": "amount(uint256)", +"8b0e093c": "INEXTokenNew()", +"8b0e9f3f": "totalStake()", +"8b0ee5a3": "GAS_PRICE()", +"8b0fc015": "submitChoose(address,uint256)", +"8b0fc19a": "TokenSaleAfterSplit(uint256,uint256,uint256,address,address,bool,uint256)", +"8b10297c": "test_0_ensureControllerWorks()", +"8b104534": "tokensPerBatch()", +"8b1097c1": "setGeneMixerAddress(address,address)", +"8b110e0a": "MeshPoint(int256,string,address)", +"8b11fb3e": "secureTokenPay(uint256)", +"8b121c9d": "airdropMinting(address[],uint256[],int256)", +"8b121cf0": "TransactionEscalated(uint256)", +"8b122274": "setPriceIncrease(uint256)", +"8b128249": "MASSTokenPreSale(address,uint256,uint256)", +"8b12befe": "accrueBonusTokens(address,address,uint256)", +"8b12c25f": "updateReferralMasks(uint256,uint256)", +"8b12dc23": "DewToken()", +"8b133c56": "WatahaToken()", +"8b13b64b": "timeFrame()", +"8b13d4e0": "addTeamMember(address,bytes32,address)", +"8b13dd7b": "getAcceptance(address,uint256)", +"8b14251f": "setNarcosCoreAddress(address,address)", +"8b144851": "getCompanyWallet()", +"8b14592a": "EtherNex(uint256,string,string,uint8)", +"8b147245": "update(bytes32)", +"8b148ef6": "usedHashGuard(bytes32)", +"8b156d4c": "EthernautsUpgrade()", +"8b157515": "tokensInfoOfOwner(address)", +"8b15a605": "proposalDeposit()", +"8b169c7a": "coinageContract()", +"8b17ab2f": "calculateOptions(uint256[9],uint32,uint32,bool)", +"8b1928a5": "getAllergies()", +"8b19a476": "oraclize_query(string,string,uint256,uint256)", +"8b1acf9e": "ZcnoxToken()", +"8b1ad6c6": "AuctionFinished(address,uint256)", +"8b1b4036": "newTrade(string,string,uint256,uint256)", +"8b1b925f": "isValid(address)", +"8b1c80e2": "MAIN_SALE_BONUS_PERCENTAGE_PHASE2()", +"8b1c8792": "Blocktix(string,uint256,uint256)", +"8b1cc4f4": "tokenBurner(uint256)", +"8b1cf21c": "unlocked(uint256)", +"8b1cffe0": "newBrehonContract(address,address,uint256,bytes32,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"8b1d37d4": "testUserCanSignUpAndLogin()", +"8b1d67f9": "initial_disbursement()", +"8b1db910": "hasSuicided()", +"8b1f3206": "addlockAccount(address,uint256,uint256)", +"8b20468b": "updatePalette(uint8,uint8,uint8,uint256)", +"8b20d082": "_getPlayerThemeEffect(bytes,uint256)", +"8b20d9fa": "get_probability(bytes32,uint32,uint32)", +"8b214d5d": "imOwner()", +"8b21d307": "createProxyAddress()", +"8b220a31": "addProcessableAllocation(address,uint256)", +"8b223943": "stage3BeginTime()", +"8b22c7b3": "keeppetToken()", +"8b22e1df": "raiseDay1()", +"8b23397a": "_getFashionParam(uint256,uint16,uint16,uint16)", +"8b235f04": "lastSignedBlockHash()", +"8b24793d": "revealCeiling(uint256,uint256,uint256,bool,bytes32)", +"8b24c3e0": "getRequiredMajor()", +"8b257d3d": "isValidSignature(bytes32,uint8,bytes32,bytes32)", +"8b259bdb": "setupIco(uint256,uint256)", +"8b278707": "addFeeFeedBack(address,string)", +"8b278a30": "updateBanThreshold(uint256)", +"8b27c179": "maxPlay()", +"8b281018": "sendFunds(uint256)", +"8b2886ca": "setNorthPoleAddress(address)", +"8b28ab1e": "calculateFee(address,uint256)", +"8b28df17": "NCCUyen()", +"8b2909cf": "tokensFromPreviousTokensale()", +"8b290a72": "employeeShare()", +"8b294960": "balanceInTranche()", +"8b299903": "turn()", +"8b29b4fc": "setArray(string,string)", +"8b29e88b": "icoTokenCap()", +"8b2a6f58": "cancelEpochUpTo(uint256)", +"8b2a81ed": "HashGardToken()", +"8b2a9606": "addDigitalArtSellingItem(uint256,uint128)", +"8b2ad32e": "getSketchesOnOfferWithHolder(address)", +"8b2ae073": "setCouponMulFactor(uint256)", +"8b2b423a": "privateSaleAmount()", +"8b2be40e": "firstCurrentAmount()", +"8b2c434c": "CryptoGiants()", +"8b2d2dca": "setAllowMarketplace(bool)", +"8b2d4ed1": "creatorsPoolAddrs(uint256)", +"8b2de796": "housePercentOfTotal()", +"8b2e2b07": "CAKSale()", +"8b2e31dc": "STARTING_LOBSTER()", +"8b2e41b2": "getPlayerShipBattleWinsById(uint64)", +"8b2e6dcf": "publish(bytes32)", +"8b2e92ce": "rewardAngel()", +"8b2ef965": "securityDepositRegistry()", +"8b2f1652": "transcoderStatus(address)", +"8b2f7af3": "CalculateAllocatedUcash()", +"8b3049e1": "lotteryByETH5(address)", +"8b31aaca": "ZOB()", +"8b31bd50": "appreciationRate()", +"8b322791": "confirmCrowdsaleEnd()", +"8b325902": "totalTokenMintedOpen()", +"8b3272dc": "setUseService(bool)", +"8b3294e5": "addRecipientUpdate(bytes32,bytes32)", +"8b32f62a": "TEAM_AMOUNT()", +"8b33b4b2": "operations()", +"8b3437c5": "setDebugNow(uint256)", +"8b343e8f": "getMemberCredit(address)", +"8b34839f": "claimTokensEnabled()", +"8b34a4b3": "nestedSecondAllToAll(uint256)", +"8b35a244": "partner2()", +"8b360f4d": "teamSupply24Months()", +"8b36ed08": "CmmToken()", +"8b37112b": "doReclaim(address,uint256)", +"8b37691b": "TxOriginContract()", +"8b37e656": "getCallScheduledBy(bytes32)", +"8b384f9f": "getMenu()", +"8b392dff": "mModerators(address)", +"8b39bdba": "tokensDaily()", +"8b3aa967": "getDepositDelta()", +"8b3ac630": "buyShip(uint256,address)", +"8b3c4f6f": "Register(bytes4)", +"8b3ca352": "CFL()", +"8b3caf37": "Operatable()", +"8b3cda96": "IotPC(bytes32,bytes20,uint256,address,uint256,uint256)", +"8b3d10bf": "BMCTToken()", +"8b3dd749": "getInitializationBlock()", +"8b3e23d9": "preIcoSupply()", +"8b3edbdf": "changeManufacturerWallet(address)", +"8b3f0337": "extractNibble(bytes32,uint256)", +"8b3f863f": "getUserType(address)", +"8b40594d": "tokenExchangeRatePreSale()", +"8b409cec": "addRelease(bytes32,string)", +"8b42ad37": "test_twoFalseAssertNoMessage()", +"8b43234b": "endPeriodB()", +"8b449ffd": "woyaoqianqian(uint256)", +"8b44af0e": "transferETHS(address[])", +"8b44c99a": "capture(bytes32)", +"8b44f194": "TBOT()", +"8b45ab24": "SoccerBet(string,uint256,address)", +"8b45ce03": "_cancelVote(address,address,uint256)", +"8b46e1f1": "getVercodesOfCampaign(bytes32)", +"8b473c3d": "getKeysByDeviceId(uint8,uint8)", +"8b477adb": "transferFromByLegacy(address,address,address,uint256)", +"8b47c10b": "ERC721token()", +"8b490893": "CBO()", +"8b49644d": "test_invalidProposalBytecode()", +"8b4a781c": "getVoters(bytes32)", +"8b4b891b": "Duarte()", +"8b4b8a26": "updatePriceTier(uint8,uint256)", +"8b4bf731": "setEtherPriceUSD(uint256)", +"8b4c40b0": "donateETH()", +"8b4c4307": "EstLiquidationCap()", +"8b4ce7ce": "updateRegionPixelPrice(uint256,uint256)", +"8b4d199e": "recordTransaction(address,uint256,uint64,uint64,uint64)", +"8b4d3f20": "Xin(uint256,string,string)", +"8b4d56de": "createAndJoinCDPDai(uint256)", +"8b4e79c2": "delegateFromPool(uint96)", +"8b4e8a6a": "MedED()", +"8b4ef7d4": "ContractAdded(string,address)", +"8b4fac8e": "testsignature()", +"8b4fff3e": "register(address,string,string,string,uint256,string)", +"8b50cd34": "attackTile(address,uint16,uint256,bool,bool)", +"8b51365b": "set82Mode(bool,bool)", +"8b519e09": "mainSaleEnd()", +"8b51ca42": "roleList(bytes32,bytes32,address)", +"8b51d13f": "getConfirmationCount(uint256)", +"8b52463a": "commissionerAuctionCancelled(uint32)", +"8b533562": "giftsOfOwner(address)", +"8b534dd3": "goldenTicketMoved(address)", +"8b53808b": "ForwardToEIF()", +"8b53cbaa": "addNode(string,uint8)", +"8b5406af": "angelLockingPeriod()", +"8b542d74": "test_twoValidEqInt()", +"8b543b80": "maximumCredit(address)", +"8b5462da": "getMy()", +"8b55c1b3": "pushPlayer(address)", +"8b56aff8": "createPromoMonster(uint256,address)", +"8b57192b": "Woleum()", +"8b57ebc6": "claimSegments()", +"8b57f150": "newUserReward()", +"8b587b82": "createPuppySiringAuctiona(uint256,uint256,uint256,uint256)", +"8b58c64c": "getUserCap(address)", +"8b595440": "setBurnAdminApproval(address,address,address)", +"8b5a17df": "frozedCount()", +"8b5a64fb": "registerNameXname(string,bytes32,bool,uint8)", +"8b5b1c9a": "setPools(uint16,uint16,uint16)", +"8b5b4228": "listTiers()", +"8b5b9ccc": "getPlayers()", +"8b5bc550": "WPAYReward()", +"8b5c37c3": "L19_Token()", +"8b5caa66": "backendWithdraw(address,uint256)", +"8b5dc8a5": "IsAllowed(address)", +"8b5de2d9": "FunFairSale()", +"8b5e331c": "HatchEgg()", +"8b5e6679": "setNewIco(uint256,uint256,uint256,uint256,uint256)", +"8b5f42ca": "addDataStream(address,string,bytes32)", +"8b5ff1d9": "batchDeleteHpbNodeCache(address[])", +"8b603300": "updateLocation(int256,int256)", +"8b6084e4": "switchState()", +"8b615813": "fundLockTransfer(address,uint256)", +"8b629cbc": "m_ETHPriceUpdateInterval()", +"8b63c0e8": "returnTokenDepositState(address[2],uint256[7],uint8,bytes32[2])", +"8b63c86f": "setupRace(uint32,uint32)", +"8b64574b": "nextFreeze()", +"8b6497b9": "s41(bytes1)", +"8b649b94": "roundLength()", +"8b64b3af": "advisors_address()", +"8b64d70e": "owner_set_time_limit(uint256)", +"8b66bf68": "takeMyMoney(bytes32)", +"8b66d153": "STSTEST()", +"8b66e3b4": "hasPlayersInRound(uint256)", +"8b6715cd": "getTotalRankTokens()", +"8b673e7a": "setConfig()", +"8b67430e": "voteToCandidateIndex(uint256)", +"8b676ae8": "scheduleCall(address,bytes4,uint256,uint256,uint8,uint256,uint256)", +"8b67d56e": "getContributorsWallet()", +"8b67ef19": "distance(uint8,uint8,uint8,uint8)", +"8b68cd9d": "rndMax_()", +"8b692479": "addProduct(uint256,uint256)", +"8b6932f1": "saleTimeOver()", +"8b69759d": "removeAuthorizer(address)", +"8b699fbb": "KiemTra(uint256)", +"8b6aacc8": "stopSendWebGift()", +"8b6bd650": "ChangeCoinPresale()", +"8b6bf3dd": "intervalueToken(uint256,string,string)", +"8b6c1cfb": "totalHeldSupply()", +"8b6c69e5": "presaleLimitUnits()", +"8b6d6e48": "GoldPurityToken()", +"8b6d6f1d": "checksOn()", +"8b6dde89": "OwnerFreeze(uint256,address)", +"8b6df6bf": "DEMOHASHTOKEN(uint256,string,uint8,string)", +"8b6e10ac": "allBalances(address[],address)", +"8b6f8646": "CHCTokenERC20()", +"8b6f894f": "releaseEscrow(address)", +"8b6fb3ac": "GetOrganNumber()", +"8b6fc452": "tip(address,uint256)", +"8b7001d0": "ReceivedBCH(address,uint256,string)", +"8b7116e4": "reviewActiveMembers(uint256,uint256)", +"8b7261bd": "fetchAllVoteResultForNodes(uint256)", +"8b72a2ec": "transferPunk(address,uint256)", +"8b72ddf7": "setMinimalTokens(uint256)", +"8b7314e3": "BEToken()", +"8b7358a0": "getPoliceReportResult(uint256,address)", +"8b73a46b": "getNumberOfMembers()", +"8b73c10e": "buyChibiWithFcf(string,string,uint8,uint256)", +"8b745ff2": "valueBlocked(address)", +"8b76e976": "setRef(uint256,address)", +"8b77071c": "profitEth()", +"8b78a388": "reduceallrunmoney(address[],uint256[])", +"8b79bb43": "MTelCoin()", +"8b7a01e3": "depositOwnership(address)", +"8b7afe2e": "contractBalance()", +"8b7b45d9": "hashSchema(string,string)", +"8b7bcc86": "numWinners()", +"8b7bf3eb": "getAdminCount()", +"8b7c34d4": "setCompte_12(string)", +"8b7d38a1": "sPerDate()", +"8b7d6b05": "makerUnlockedKnc(address)", +"8b7e7a2e": "TBEToken()", +"8b7f0ddd": "register(address,address,string,string,bytes32[],uint256,string)", +"8b7f4cb7": "_calcDate0(uint256)", +"8b7fe5be": "DonationEvent(address,uint256)", +"8b800e6f": "migrationCounter()", +"8b805e65": "setUsers(address)", +"8b80bd19": "Migrated(address,uint256)", +"8b80fd5a": "extraDataToSubcourtIDAndMinJurors(bytes)", +"8b810c36": "epoch(address)", +"8b81b1af": "getLastOwner()", +"8b8211a1": "closeSale1()", +"8b82f4bc": "PAYCOINLY()", +"8b83209b": "payee(uint256)", +"8b832705": "getAmountOfGrantAccessInvestor(address)", +"8b833318": "getArtworkGroup()", +"8b8373ca": "AMBASSADOR_SIX()", +"8b8414c4": "getPoaConsensus()", +"8b845c1d": "withdrawCommisionToAddressAltCoin(address,uint256)", +"8b8519a2": "frozenTimeOf(address)", +"8b859409": "setRelease(bytes32,bytes32,string)", +"8b863095": "setContractorProposal(uint256,bytes)", +"8b87c544": "getInventory(address)", +"8b87e3b6": "bountyMinted()", +"8b886d04": "setCatchable(uint32,bool)", +"8b88a687": "getCost(address)", +"8b88c9cf": "setSpaceCraftAddress(address,address)", +"8b8c1177": "changeTokenOffer(uint256)", +"8b8c5ed9": "scheduleUnderwriteOraclizeCall(uint256,bytes32)", +"8b8d7c04": "writeConditions(uint8,string)", +"8b8e5fe2": "secondRewardPeriodEndBlock()", +"8b8ecffa": "teamAndFoundersWallet()", +"8b8f8504": "NodeManager(address[],address[])", +"8b906ca5": "enterBidForSketch(uint256)", +"8b90a378": "STATE_DONATION_ROUND_2()", +"8b91124d": "getSubscriptionClosedAt(bytes32)", +"8b91d5f6": "PRICE_CROWDSALE()", +"8b91e9a2": "getSubscriptionNonce(bytes32)", +"8b91f4a3": "ProofOfBitConnect()", +"8b9299dc": "authorizeMany(address[50])", +"8b93509f": "addTeamtoBoard(uint16,address,uint8)", +"8b935fb1": "keys(uint256,uint256)", +"8b93d3fc": "stake(uint256,bytes32,uint256,uint256,uint256)", +"8b959014": "DPC(uint256,string,string)", +"8b9596ed": "Eladporat()", +"8b95ec0c": "testAddBalance()", +"8b96801e": "soldTokensCount()", +"8b969c33": "editTokenProperties(string,string,int256)", +"8b96e41c": "_preMcFly()", +"8b9724d1": "setExclusiveRate(address,uint256,uint16,uint32)", +"8b9726c1": "multiAccessCallD(address,uint256,bytes,address)", +"8b975028": "setCooldown(uint256,uint256,uint256)", +"8b9801b0": "TheHashSpeed()", +"8b9847a5": "AmazonBestsellerLabs(uint256,string,uint8,string)", +"8b986566": "TokenTESTToken()", +"8b9997fd": "getOwnerHoverText(address)", +"8b99b742": "arbitrateCancelCampaign()", +"8b9a167a": "aliceClaimsPayment(bytes32,uint256,address,address,bytes20,bytes)", +"8b9add74": "minCapReached()", +"8b9af5c1": "wmul(uint256,uint256)", +"8b9b1cbd": "withdrawRemainder()", +"8b9b62b1": "toB32(uint256,bytes,address)", +"8b9bde27": "setNameHashByWriter(address,bytes32,address,bytes32)", +"8b9c7a36": "initialStartPrice()", +"8b9ce419": "getBorrowAmount(uint256,uint256,bool)", +"8b9ce6a6": "create(uint256,uint256,address,address,address,uint256,uint256,address,uint256,uint256,bool,bool)", +"8b9d6899": "lockedAmountOf(address)", +"8b9e2832": "mintRep(address,uint256)", +"8b9e4768": "_level()", +"8b9e5385": "MeterSlock(uint256,uint256,address)", +"8b9efe2d": "lastCountAddress()", +"8b9fae3f": "getETHback()", +"8b9ff6b6": "left91(uint256)", +"8ba19d4f": "EGGS_TO_HATCH_1CRAB()", +"8ba1c353": "_scaleExp(uint32,int32)", +"8ba1ebce": "updateGenVault(address)", +"8ba209b6": "isAccountVerified(address)", +"8ba28961": "spawn(uint32,int256,address)", +"8ba39ea8": "getChecksum()", +"8ba3ee95": "setConverterRamp(address)", +"8ba45307": "basePunish()", +"8ba47bdd": "ticker()", +"8ba4cc3c": "airdrop(address,uint256)", +"8ba5306b": "getDefaultRecommAddr()", +"8ba5758b": "HumanStandardToken(uint256,string,uint8,string,uint256)", +"8ba5807c": "raceCount()", +"8ba5882a": "manualOverrideEditionHighestBidAndBidder(uint256,address,uint256)", +"8ba64328": "getParentOperation(bytes32,uint8,uint8)", +"8ba677fa": "sendPremiumPack(uint256)", +"8ba7bdc4": "adminClaimTokenForUser(address)", +"8ba7e570": "executeCall(address,uint256,uint256,bytes)", +"8ba7e7f2": "createHash(address,bytes32,bytes32)", +"8ba7fe81": "updateActiveStatus(bool)", +"8ba88c9c": "internalRemoveManager(address)", +"8ba8da61": "payback(uint64)", +"8ba8ffc6": "buyGrapes()", +"8ba92763": "ABsCoin(address,uint256)", +"8ba93fcb": "magicStore()", +"8ba9a7bb": "FACTOR_4()", +"8ba9d9b0": "EmailSent(address,string,string)", +"8ba9f354": "testClearBitSuccess()", +"8baa28f7": "allocate(address,uint256,uint256,string,uint256)", +"8baa8b1f": "staker(bytes32,address)", +"8bab6718": "investorsInfo(address)", +"8bab8791": "testPkgUpdate()", +"8baba52a": "allStates()", +"8bace235": "kycAddresses(address)", +"8bace717": "getPresaleAllocation(address,address)", +"8baced64": "isInPool(address)", +"8bad5de9": "checkMinBalance(address)", +"8bad8d8e": "reserveManyTokens(uint256[],uint256)", +"8badbb8b": "ETPToken()", +"8bae2a03": "getStoredFib()", +"8baecc21": "revive(uint256)", +"8baeefce": "stopTrade()", +"8baf612f": "Ownable2()", +"8baf7a0c": "CryptoPrueba()", +"8bb04875": "executeRuling(uint256)", +"8bb0faee": "setRef(string,string)", +"8bb19439": "isPending(uint256,uint256)", +"8bb1a5ef": "executeDeal(uint256,string)", +"8bb204d4": "setCaptainIndexToCount(uint32,uint256)", +"8bb28de2": "minShare()", +"8bb307a2": "getMyTokenBalances()", +"8bb36848": "pollDataMultihash()", +"8bb55cae": "beforeExecuteForFutureBlockCall(address,uint256)", +"8bb5d9c3": "setCounter(uint256)", +"8bb64abe": "releasableBonus(address)", +"8bb75533": "split(string,string)", +"8bb7819f": "curMaxBet()", +"8bb87f5b": "isTank(address)", +"8bb88db6": "EtherSmart()", +"8bb8b2db": "getTokenPerEth()", +"8bb93173": "getNextTimeAtkPlayer(address)", +"8bb9fe58": "addStruct(uint256,string)", +"8bba143c": "getNumberOfContributors()", +"8bbade4e": "usdEth()", +"8bbb594a": "createActiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", +"8bbb5af7": "test1Fails()", +"8bbb668b": "ItemSelling()", +"8bbb9fca": "buyPresale(address)", +"8bbbc7a2": "BitnanRewardToken(address)", +"8bbd309c": "BLTCoin(address)", +"8bbd7f87": "removeMemberById(uint256,address,address)", +"8bbda7e3": "setContent(string,bytes)", +"8bbdcf67": "_createProduct(uint256,uint256,uint256,uint256,uint256)", +"8bbdfaa6": "approveChange(address,uint256,bool)", +"8bbe005d": "setGateGas(uint256)", +"8bbe4719": "donateToPool()", +"8bbec9e4": "WALLET_T8EX_ADMIN()", +"8bbf037c": "addService(string,string,int256,uint256,uint256,uint256)", +"8bbf51b7": "DOW_WED()", +"8bbf7330": "FlyCareToken()", +"8bc008e6": "xra()", +"8bc04eb7": "DECIMALSFACTOR()", +"8bc05609": "setNotaryAddress(address)", +"8bc05808": "addLockTokenAllocation(address,uint256)", +"8bc05833": "setTotalSupply()", +"8bc0b887": "initializeAfterTransfer()", +"8bc12fd1": "cancelOrder(address[4],uint256[7],bool,uint8,uint8,bytes32,bytes32)", +"8bc19bda": "setupRaffle(string)", +"8bc19c04": "getPlacedNotes()", +"8bc30096": "numDrops()", +"8bc4a65f": "unPackDecision(uint256)", +"8bc5816a": "startStage1()", +"8bc5aab0": "FundsRecovered()", +"8bc5b3c5": "getExchangeInfo()", +"8bc5f845": "sendToken(address[],uint256)", +"8bc6a72b": "adjustCut(uint256,uint256)", +"8bc70769": "BTToken(uint256,string,uint8,string)", +"8bc7fa9c": "getCrop(uint256)", +"8bc82c9b": "registeredInMeeting(address,uint256,uint256,uint256)", +"8bc85b03": "bonusEnd()", +"8bc88d7c": "nameMiner(uint256,string)", +"8bc97754": "popcnt64(uint64)", +"8bc9b67f": "endOfGame(address)", +"8bca15d6": "balancesCanSell(address)", +"8bcad96a": "AdminstratorAdded(address)", +"8bcb4250": "_bytesToUint(bytes)", +"8bcb6f01": "getLoserAddressList()", +"8bcba0b2": "_transferToContract(address,uint256,bytes)", +"8bcba45a": "secondPartOfTeamTokensClaimed()", +"8bcbb60b": "betsArePayed(address,uint256)", +"8bccae3f": "tokensForCrowdsale()", +"8bccb1b4": "EosPizzaSlice(uint256)", +"8bccbf62": "setShares(address,uint256)", +"8bcd0680": "CrowdsaleiPRONTOLiveICO()", +"8bcddd5d": "getLogsNum(address,uint256)", +"8bcdecd7": "getIssuerStatus(address,address)", +"8bce09fa": "resolutionProposal(string,string,address,uint256)", +"8bcea54f": "viewComponent(address,uint256)", +"8bcf0eea": "GCAP()", +"8bcf649d": "GetRank(uint16)", +"8bcff416": "asyncSend(address,address,uint256)", +"8bd031fe": "submitIssue(uint256)", +"8bd0ba67": "addChild(address,address)", +"8bd0f12b": "_deleteBool(bytes32)", +"8bd1b610": "deleteTeller()", +"8bd25857": "joinManual(address,uint48)", +"8bd30ba1": "KekToken()", +"8bd317eb": "reclaim(address,uint256)", +"8bd379b5": "itDevAddr()", +"8bd50488": "Policy(string,address,address,string)", +"8bd50c1f": "privateSaleCloseTime()", +"8bd53bea": "oraclizeFees()", +"8bd56066": "WXC()", +"8bd5d30f": "scoreGroups(bytes32,bytes32,bytes32,bytes32)", +"8bd61f26": "tokensRemainder()", +"8bd66bb3": "ModifyMine(uint256,bool,string,uint256,string)", +"8bd6da16": "distributeXAIN(address[],uint256,uint256)", +"8bd76535": "currentExchangePrice()", +"8bd7920d": "BitcoinCashPrivate()", +"8bd7df6e": "sharePot()", +"8bd82b20": "getInCar()", +"8bd8669e": "transferAllTokensToOwner()", +"8bd87a69": "TimeMachineToken()", +"8bda1540": "getOldBalance(uint256,address)", +"8bdac196": "KLSToken(uint256,string,uint8,string)", +"8bdbbca9": "GameChannel(address,uint256,uint256,address,address,uint256)", +"8bdbee39": "str_length(string)", +"8bdc16fe": "changeHouseOracle(address,uint256)", +"8bdc558d": "hash_ack()", +"8bdc5a5f": "withdraw(address,address,uint8,bytes32,bytes32)", +"8bde7fc3": "ClickButton()", +"8bdff161": "getBonus()", +"8be1049d": "getTypeFromIndex(uint256,uint256)", +"8be13d71": "countOpenPackage()", +"8be18df9": "getOutcomeOfFirstPeriodByEntity(uint256)", +"8be3a897": "_v3()", +"8be3df0a": "vipPlacementNotDistributed()", +"8be4339b": "packsPerClaim()", +"8be4886c": "PUBLIC_RESERVED()", +"8be52783": "decreaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", +"8be7a96a": "registerLockedTokens(address,uint256,uint256)", +"8be7f4f5": "FOUNDER_FUND_1()", +"8be7fe95": "CreateDigitalAssetToken(uint256,uint256,string,string,string,string)", +"8be8f944": "lastBlock_f6()", +"8be909a3": "mainSaleWeiCap()", +"8be90b52": "averageGasPrice()", +"8be94a45": "Gallery_MuYi_No1()", +"8be97285": "MIN_TOKENS_TO_EXCHANGE()", +"8be9ca21": "GerritCoin()", +"8bea6a39": "safeSubtr3DL(uint256,uint256)", +"8beac22d": "STAEtoken()", +"8beb1af1": "PresalePool(address,address,address,uint256,uint256)", +"8beb60b6": "setAdminFee(uint256)", +"8beb9f12": "moveBlockValue(uint8,uint8,uint8,uint8,uint256)", +"8bec5b31": "reserveOwnership(address)", +"8bec683f": "getID_control()", +"8bee241b": "delegateOperation()", +"8bee78e6": "buySharesFromListing(uint256)", +"8bef5222": "CONFIG_MAX_TICKETS()", +"8bef7ba5": "updateBalances(address)", +"8bf0af3e": "purchaseTokens(uint256,uint256)", +"8bf13a30": "UTCStop()", +"8bf34237": "addPartner(address)", +"8bf35316": "givePermission(address,address,uint256)", +"8bf4515c": "read(bytes)", +"8bf57f4e": "getTimestamp(address)", +"8bf60537": "setDividendManager(address)", +"8bf62f14": "EtheropolyShrimpFarmer(address)", +"8bf68690": "mintToken(uint256,address,uint256,bytes32,uint8)", +"8bf74527": "EMISSION_FOR_SALESTAGE7()", +"8bf85ef0": "SigmaIOToken()", +"8bf87123": "_transfer(address,address,uint40)", +"8bf8a338": "getAttribute(bytes32,string)", +"8bfa4b4e": "tokenAdvisor()", +"8bfac3bb": "updateBalances(address,bytes32,string,uint256)", +"8bfb07c9": "release(address,address,uint256)", +"8bfb85c3": "agreeAmendment()", +"8bfbc753": "setEthBonus(uint256)", +"8bfc2f33": "delegateDAOTokens(uint256)", +"8bfe0aec": "getNextExit(address)", +"8bfe4e0b": "GaillardToken()", +"8bfe88c5": "ArteufToken(address,address)", +"8bffc74d": "mainstreetToken()", +"8bfff5a0": "setPurchaseableMode(uint256,bool,uint256)", +"8c003134": "Raffle_ID()", +"8c00ce76": "unhalt_30day()", +"8c0124fb": "transferAndFreezeMulti(address[],uint256[],uint256[],uint256[])", +"8c02d13f": "MAX_NUMBER_OF_PREMIUM_SALES()", +"8c02e029": "save2(address,bytes,string)", +"8c0320de": "payforflag(string,string)", +"8c041d7c": "editProfile(string,bool,string,bool,uint256,bool,bool,bool,string,bool)", +"8c042317": "startQuater()", +"8c04b985": "readSellTokenAmount()", +"8c063686": "getRelayAuthority()", +"8c06fa18": "PRICE_PREICO()", +"8c088d98": "winMultiplePer()", +"8c08ae0d": "withdrawEtherRemaining()", +"8c09138f": "fourth()", +"8c0989ab": "MultiServiceFactory(address)", +"8c09bfdc": "shake(uint256)", +"8c0a41f2": "gibtesnet()", +"8c0b1588": "createNFT(uint256,address,bytes32,bytes32,bytes4)", +"8c0b372d": "e6c65e93()", +"8c0b4ae5": "setGenesMarketAddress(address,address)", +"8c0bae5b": "releaseRedTeamTokens()", +"8c0c0368": "_confirmOneSell()", +"8c0c9c07": "updateCampaignAbi(string)", +"8c0cf897": "develop()", +"8c0d0c29": "mark()", +"8c0d4199": "lock(address,address,uint256,uint256,bool)", +"8c0d6593": "CustomDealICO(uint256,uint256,uint256,address,uint256,uint256)", +"8c0dacf2": "deleteRecord(bytes32)", +"8c0dee9c": "operatorTransferByPartition(bytes32,address,address,uint256,bytes,bytes)", +"8c0e156d": "scheduleCall(bytes4,uint256,uint256)", +"8c0e299a": "proposeCompanyAllocation(address,uint256)", +"8c0e2a31": "regProxy(address)", +"8c0e45f6": "test_openRegistryRules()", +"8c0ead61": "_updateMLBPlayerId(uint256,uint256)", +"8c0ec0d1": "changeClient(address)", +"8c0f082c": "setFLKDForGas(uint256)", +"8c0f8e11": "getWorkerScore(address)", +"8c0ff5b7": "maxWithdrawal()", +"8c10671c": "addManyToWhitelist(address[])", +"8c115322": "isP2PKH(bytes,uint256,uint256)", +"8c118cf1": "verify(uint256,uint256,uint256,string,string,bytes32[2])", +"8c12324a": "Mire()", +"8c1256b8": "Recovered(address,uint256)", +"8c12c35c": "BTWO_CLAIM_PERCENT()", +"8c12d8f0": "arithmetics(uint256,uint256)", +"8c133a77": "previligedBalances(address)", +"8c133c25": "changeBetPrice(uint256)", +"8c13aabe": "lockStages(uint256)", +"8c14db73": "testThrowsSaleWalletIncorrectBlock()", +"8c155b5b": "tradeForTokens(address[2],address,bytes,bytes)", +"8c156213": "generateHash(address,string)", +"8c160095": "deleteInt(bytes32)", +"8c165146": "initSale1()", +"8c165932": "sendShip(uint32,uint32,address)", +"8c167076": "setHoldersList(address)", +"8c172fa2": "getEvent(bytes32)", +"8c17c5ab": "setNowTime(uint256)", +"8c17fc91": "getWeaponsArmy2(uint256)", +"8c19773f": "addBlock(address)", +"8c19c175": "getStageState(uint256)", +"8c19d2ca": "setCombatWonTeam(uint256,uint128)", +"8c1ab426": "WithdrawalofFunds(uint256)", +"8c1c7acc": "icoThreshold2()", +"8c1d01c8": "defaultPayment()", +"8c1d4a0a": "GreenEcoMinerToken()", +"8c1d8941": "transferLockedBalances(address,address,uint256)", +"8c1d92af": "distributePresaleTokens(address[],uint256[])", +"8c1d9f30": "isValidCandidate(bytes32)", +"8c1e04a6": "updateGenerationDict(uint256,uint64)", +"8c1e21da": "tokenPreSale()", +"8c1f85e5": "FeeSetup(address,address,uint256)", +"8c206979": "_freeze(uint256)", +"8c2081b5": "RewardsCoin()", +"8c217d06": "zsjz(uint256,string,string)", +"8c21f6bb": "getLockedGroup(uint8)", +"8c21ffba": "supplyLockedB()", +"8c22ac8b": "Account_frozen(address)", +"8c2305fd": "stakeBela(uint256)", +"8c25466a": "mintPreSale(address,uint256)", +"8c254c0b": "walletDev()", +"8c259654": "getRegistryDataRegistry()", +"8c25f54e": "linkContracts(address)", +"8c261e2c": "getHashRightPad()", +"8c26691e": "RanToken(address,address)", +"8c267b97": "cmoAddress()", +"8c26a340": "generateOrderByAdminWithPayee(address,address,address,uint256,string,string,string)", +"8c26c937": "STQPreICO3TestHelper(address,address)", +"8c26ebf7": "EgretiaToken()", +"8c272dba": "_buyin(address,uint256)", +"8c273a98": "getRefBonus(address)", +"8c2779f5": "gold_token_storage()", +"8c28c16e": "STAGE_TWO_ETHRaised()", +"8c28fd6e": "mintHelper()", +"8c2962b9": "setBuyAgent(address)", +"8c299d0c": "AdoptionOfferCancelled(bytes5)", +"8c29bce5": "setJoule(address)", +"8c2a5938": "setAllowedToBuyBack(bool)", +"8c2b8283": "WeiLaiExToken()", +"8c2d1549": "getTotalMined()", +"8c2d396f": "TelegramOpenNetworkContract()", +"8c2e6b3f": "ChangeSellRate(uint256)", +"8c2ec28d": "TestCTR()", +"8c2f04d9": "distributeUsingVaults(uint256,uint256,uint256,address)", +"8c2f6458": "calculatePreviousPrice(uint256)", +"8c30079a": "generateTeamTokens()", +"8c30779b": "getAvailableVestingAmount(address)", +"8c3088c6": "HeritableWallet(address,address,uint256)", +"8c308a71": "Anemoi(uint256,string,string)", +"8c3135f2": "poolTokenBalance()", +"8c31d67e": "getNoOfSoldToken()", +"8c324604": "MAX_TOKENS_EARLY_INVESTORS()", +"8c32c568": "Airdrop(address,uint256)", +"8c32e774": "isMaxTokensReached()", +"8c33417c": "WankCoin()", +"8c335b4b": "oceanBonus()", +"8c339a58": "QSHUCOIN()", +"8c33a5c4": "RESEARCH_AND_DEVELOPMENT_TOKENS_PERCENT()", +"8c343aee": "TestIssued()", +"8c346690": "toggleHalt(bool)", +"8c34dbec": "bitcoing()", +"8c363fda": "AbstractToken()", +"8c366dd3": "newinitialSupply(uint256)", +"8c3692c3": "popToken(address)", +"8c36ae89": "clearReward(address)", +"8c374d8d": "releaseApproval(address)", +"8c3753d7": "WEI_PER_FINNEY()", +"8c377ca6": "UnsetUsername(string,address)", +"8c379133": "Water(string,string)", +"8c37ce04": "MeetTokenBase()", +"8c37e152": "bountyTokensReserve()", +"8c37e31e": "setSpawningManager(address)", +"8c37edc4": "USN(address,address,bytes32,uint256,uint256,uint128)", +"8c382e22": "checkIsAssetPartOwner(bytes32,address)", +"8c3846e8": "ConsumerAddition(address)", +"8c38eddd": "_clearAddressFromCrowdsale(address)", +"8c397363": "setFinancialAddress(address,address)", +"8c39bf96": "DredgrSwapSolo(bytes5,bytes5,bytes32,bytes32,uint256,bytes32,bytes32,uint256)", +"8c39cb93": "makeClaim(bytes32,string,uint256,bytes32,uint256,uint256,uint8,uint256)", +"8c3b4fea": "_addVesterManager(address)", +"8c3b6f0e": "getCrystalGeneKindWeight(uint256)", +"8c3c00aa": "overdraftPeriodAmount()", +"8c3c4b34": "getSaleStatus()", +"8c3d5897": "MANHATTANPROXY2NDAVE()", +"8c3e1ff1": "modexp(bytes,uint256,bytes)", +"8c3e9e1a": "verifyYourself(string,uint256)", +"8c3f71b2": "_getCurrentTradableToken()", +"8c3f914a": "spread(bool)", +"8c3fae8c": "BeeUnity(uint256,string,string)", +"8c404cf1": "stablesCities(uint256)", +"8c41399c": "view30()", +"8c41d101": "LogAgreementAccepted(address)", +"8c421815": "RefundedTokens(address,uint256)", +"8c43a6f0": "updateBlockVoterProposal(uint256,address,bytes32)", +"8c4406c1": "setInputName(uint256,uint256,uint256)", +"8c4430b4": "setFinalLotteryAddress(address)", +"8c44cb27": "creationQuantity()", +"8c44dfb5": "bids_computed_cursor()", +"8c45cf24": "addJobContractMessage(uint256,string)", +"8c461e97": "setValueAirDrop(uint256)", +"8c46c7cd": "betAmount_()", +"8c47ddcc": "refundOwner()", +"8c4899ab": "ownerOfPlanet(uint256,uint256,uint256)", +"8c497285": "ChangeAddressTrust(address,address,bool)", +"8c4a6f62": "delMinter(address,address)", +"8c4af723": "changeNewRoundDelay(uint256)", +"8c4b0c58": "FrozenProfit(address,bool)", +"8c4b0e7e": "setOrganiser(address)", +"8c4b7300": "ViewBet()", +"8c4b87d2": "chris()", +"8c4c26a3": "BunToken(address)", +"8c4c564d": "deletePoll(bytes32)", +"8c4d3193": "getOrderDealTimeInterval()", +"8c4d59d0": "ticketCounter()", +"8c4dd5cd": "Democracy()", +"8c4e3f32": "_setApprovalForAll(address,address,bool)", +"8c4e8c21": "nextMintTime()", +"8c4e9c50": "prepareSell(address,uint256)", +"8c4ef31a": "getremainTokensperType(uint8)", +"8c4f7dae": "getMatchCount()", +"8c500418": "getICODate()", +"8c50d756": "bidSuccess(uint256,address,uint256)", +"8c518026": "_preSale(address,uint256)", +"8c523e27": "setFechHpbBallotAddrAddresss(address)", +"8c529628": "getVoteFromProposal(uint256,uint256)", +"8c52dc41": "enableRefunds()", +"8c5344fa": "countThisRecursive(uint256)", +"8c534d54": "getTokenTxnNum()", +"8c53f61d": "receiveETH(address)", +"8c546f81": "GNT()", +"8c549ef7": "COLOR_BROWN()", +"8c55041c": "Announcement(address[],uint256,uint256)", +"8c551742": "createItem(string,uint256)", +"8c55284a": "confirm(uint256,bool)", +"8c5597fd": "finalizeContributionEvent()", +"8c561592": "canUpdateInvoicingAddress(string,address)", +"8c564ebf": "freezeBypassing(address)", +"8c5871bf": "getLocksUnlockDate(address,uint256)", +"8c590917": "contribute(uint256,uint256)", +"8c590b5d": "getAllMatingAnimals()", +"8c59f7ca": "cancelOrder(address[5],uint256[6],bool,uint8,uint8,bytes32,bytes32)", +"8c59fba0": "DATP()", +"8c5a03bb": "SimpleDistributor()", +"8c5aae96": "LocalsMembership()", +"8c5ae183": "RemoveMod(address,address,bool)", +"8c5b830e": "getInviteeInfo(uint256)", +"8c5cc61c": "approvedreg(string,string,string,string)", +"8c5ce82a": "powerTest(uint256,uint256,uint32,uint32)", +"8c5d5e87": "ownerSetMod(bool)", +"8c5e06b1": "Channel(address,address)", +"8c5e2b0e": "MainSaleStart()", +"8c5f2d5d": "get_all_payment(uint256,address)", +"8c5f6d5a": "SetDebugExtra(uint32,uint8)", +"8c5f997e": "NewEntry(address,uint256,uint256,uint256)", +"8c5fb7fb": "modifyMember(string,string,string,string)", +"8c60e806": "closeContributions()", +"8c614502": "addCountry(address,uint256)", +"8c618066": "addressOfName(string)", +"8c6310ac": "NextOpen()", +"8c638152": "setApoderado(bytes32,bytes32,bytes32)", +"8c64400d": "updateTierDuration(uint256,uint256)", +"8c648117": "actualPrice()", +"8c6486c4": "sendRegistration()", +"8c64eb4f": "switchCrowdState()", +"8c655550": "advisorsAllocatedAmount()", +"8c6589b2": "getLastSTCPrice()", +"8c65f15d": "clearBonuses()", +"8c662ffa": "LogCollect(address,uint256,uint256)", +"8c663229": "lastSellPrice()", +"8c663ffc": "getBounsWithRoundID(uint256)", +"8c66c9fc": "findBest()", +"8c66d04f": "setFeeCalculator(address)", +"8c66f294": "distributeFeeRewards(address[],uint256)", +"8c676aaa": "CUZ()", +"8c67f63a": "calculatePayment(uint256)", +"8c682bde": "setWinnerAndWithdrawAllFunds(address)", +"8c6838ba": "getPost()", +"8c68bc3e": "SetContractorManager(address)", +"8c69554d": "OwnerRefunded(address,address,address,uint256)", +"8c69930d": "getNewFallbackDepositEffectuation()", +"8c69c559": "Crypbest()", +"8c6aefcf": "chip(uint256)", +"8c6b6085": "supportNewVoter(address,address)", +"8c6ba233": "isLateBy(address)", +"8c6c8323": "buyTokens(address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"8c6f2ec1": "setCompte_17(string)", +"8c6fc437": "standardICO(string,string,uint8,address,uint256[],uint256[],address[2],address[])", +"8c6fd8ec": "removeByIndex(uint256)", +"8c701ba8": "releaseRoots()", +"8c717138": "lastBlock_a1Hash_uint256()", +"8c71bed2": "unlockTeamTime()", +"8c71eaf1": "TokenBEN(uint256,string,uint8,string)", +"8c71ec16": "create(address,uint256,uint256,uint256)", +"8c7229cb": "pantura()", +"8c727fa3": "oldCirculatingSupply()", +"8c72c54e": "publisher()", +"8c72d4a4": "getStageTokenAmount(uint256,uint8)", +"8c733fdf": "weiToUsd(uint256)", +"8c73596c": "init(address,uint8,uint256,uint256,uint256,uint32,uint256)", +"8c748334": "cancelBuyOrder(uint256,uint256)", +"8c74c5c0": "bonusOff()", +"8c74d62c": "LockedInToken()", +"8c7565dc": "ADChainGrants(bytes32,bytes8,bytes32,bytes)", +"8c756b1d": "balanceByAd(address)", +"8c7698df": "lowerCase(bytes32)", +"8c76b4b7": "addTrustedContracts(address[])", +"8c771a8e": "newEscrow(address,uint256)", +"8c787768": "abbcwalletcoin()", +"8c789fb2": "setTokenBudget(address,uint256)", +"8c794114": "prizeWithdrawal()", +"8c79a24d": "refName(uint256)", +"8c79ca5d": "AddMember(address,uint256)", +"8c7a63ae": "getTokenInfo(uint256)", +"8c7a8140": "extractVestedOptionsComponents(uint256,uint256,uint256)", +"8c7c35b9": "internal_tester()", +"8c7c4016": "GameLogicContract()", +"8c7c9e0c": "eth()", +"8c7d1e8a": "MyKillerContract()", +"8c7d3241": "total_iou_available()", +"8c7d58aa": "isTimeExpired()", +"8c7dd9ec": "_canReveal(address,address)", +"8c7e1227": "setupStakingPriceFeed()", +"8c7e5008": "maxDonationInWei()", +"8c7e763b": "HSCC()", +"8c7f7806": "AfeliCoinPresale(address)", +"8c7fcd46": "BLVToken(uint256,string,string)", +"8c80fd90": "setMinStake(uint256)", +"8c812c51": "PhoenixExchangeFund()", +"8c817b6e": "registered(uint256,address)", +"8c82790b": "getReg3()", +"8c82dccb": "updateStatuses(bytes32[])", +"8c832ef4": "GalaxyCoin(uint256,string,string)", +"8c849f3f": "getMemes()", +"8c85ec66": "getCurrentDayRestDepositLimit()", +"8c864dfe": "_updateChecksum()", +"8c86ec20": "NMC(uint256,string,string)", +"8c877527": "allowTransfert()", +"8c87b2fc": "Identity(bytes32,bytes32)", +"8c882958": "LEToken()", +"8c88512f": "initializeCrowdsale(address)", +"8c88752a": "ContributorList(uint256)", +"8c8885c8": "setDecimals(uint256)", +"8c88b85f": "_finalizeRound()", +"8c88d716": "transferIfRequirementsMet(address,address,uint256,bool)", +"8c89b1c7": "setINCENTIVE_POOL_ADDR(address)", +"8c8a03ac": "setBucketManager(address)", +"8c8a261a": "devMiningRewardChanges(uint256)", +"8c8a40bd": "hashNotFound(address)", +"8c8b31ab": "dhanaToken()", +"8c8b6fc5": "challengeSubmitted(bytes32,bytes32)", +"8c8b802e": "getLimitPeriod()", +"8c8b9d54": "setEmployeeStorage(address)", +"8c8bc5ce": "ChangeICOStart(uint256)", +"8c8d067f": "chosenProposal()", +"8c8d2ede": "team1()", +"8c8d36c2": "THANKSTEST3()", +"8c8d98a0": "toTimestamp(uint16,uint8,uint8)", +"8c8df7cd": "GOTokenCrowdsale()", +"8c8e2478": "convertTokens()", +"8c8e5f1f": "BlockTubePrepaid()", +"8c8e8fee": "token_address()", +"8c8ee490": "checkReleaseAt(address)", +"8c8f94f5": "DeletePrice(uint256)", +"8c8f95fb": "lockFunds(uint256)", +"8c8f9c0e": "issueTokenToAddress(address,uint256,uint256)", +"8c8fc30b": "addAd(uint32,uint32,string,string,string,uint256)", +"8c907c0d": "LanderToken(uint256,string,uint8,string)", +"8c90b2ea": "pay055(address)", +"8c9151ae": "voteProposal(uint256,bytes32)", +"8c91bd3e": "addMoves(uint256,uint256[2])", +"8c91daac": "startRoundSeed()", +"8c920a38": "testSanityCheck()", +"8c924e9c": "incrementRead()", +"8c93256e": "transferReward(address)", +"8c934d71": "forceRefundCfd(uint128)", +"8c937da3": "WALLET_LB_TEAM()", +"8c9425e4": "privateLockAddress()", +"8c943b6c": "setDistrictCode(bytes32)", +"8c944339": "setActiveSkin(uint256)", +"8c944bb2": "_createPrimordialLot(address,uint256,uint256,uint256)", +"8c945d38": "takeOffItem(uint256,uint8,address)", +"8c94db38": "MMCoin(uint256,string,string)", +"8c9512bc": "companyTokens()", +"8c9515ea": "doPayouts(uint256[49],address[49],uint256)", +"8c9540d3": "isCommittee(address)", +"8c95acee": "getTreshold(uint256)", +"8c96a2c9": "getAssetPackPrice(uint256)", +"8c96a538": "COO_SHARE()", +"8c96e34b": "betIsSettled()", +"8c98117c": "getBill(uint256,uint256)", +"8c988a46": "isLinkedWallet(address)", +"8c9924d5": "AddrMarketing()", +"8c99d363": "updateTokensToInvestor(address,uint256)", +"8c9a4f13": "FundsTransferred(address,uint256)", +"8c9ae56f": "QueryPlayerBonus(address,uint256)", +"8c9b2cd1": "ModultradeProposal(address,address,address)", +"8c9c2977": "newMember(uint8,bytes32,address)", +"8c9ce20c": "_addressNotNull(address,address)", +"8c9cf205": "SignVersion(string,string)", +"8c9d8300": "withdrawForAdmin(address,uint256)", +"8c9dd650": "Etherlott()", +"8c9e81e5": "triggerICOState(bool)", +"8c9ecd00": "toDec()", +"8c9f7074": "setInterestFeePercent(uint256)", +"8c9f7b39": "endSale(address)", +"8c9f8935": "ClaimSet(address,address,bytes32,bytes32,uint256)", +"8c9fcfe2": "payForUpgrade(address,uint256)", +"8ca0dd20": "tgeCap()", +"8ca10f9b": "sendRemainingTokens(address)", +"8ca17755": "etheraffle()", +"8ca17995": "divest(uint256)", +"8ca3b448": "addUser(address,address)", +"8ca3c553": "setData(string,string)", +"8ca47688": "WhiteListUpdated(address,bool,address)", +"8ca4eef6": "getBuild(bytes32)", +"8ca517dd": "getActiveBuyDetails(bytes32)", +"8ca51f82": "setMinimumClaimValue(uint256)", +"8ca5d525": "removeAllowedHICAddress(address)", +"8ca5da35": "mintManual(address,uint256)", +"8ca6c287": "InsurContract()", +"8ca6f747": "potatoBalanceOf(address)", +"8ca74163": "BZCToken(address,uint256)", +"8ca79351": "ethPriceIn()", +"8ca84d40": "preparationPeriodTrainingFeeMultiplier()", +"8ca9ac01": "LogBeerClaimed(address,uint256)", +"8ca9e721": "finalizeCrowdSale()", +"8caa0083": "teamCount()", +"8caa5c91": "DataBase()", +"8caaaae6": "totalWeiPrice()", +"8caaab4d": "verifyProofOfStakeInternal(uint256,bytes32,bytes32,uint256,bytes32[],uint256[],uint256,uint256)", +"8caad7b5": "changeMinDepositAmount(uint256)", +"8caba7b7": "startCharging()", +"8cac1939": "TOKEN_TEAM()", +"8cac3b42": "addDividend()", +"8cac5f55": "feeForTheStakingInterval()", +"8cad5826": "FundTransfer(uint256,bytes32,address,address)", +"8cadaa5d": "TokenFreeze()", +"8cadd6a2": "getVestedBalance(uint256,uint256,uint256,uint256)", +"8cae013e": "signatureFunc(bytes)", +"8cae1374": "editBlock(uint8,uint8,uint256,int8[5])", +"8cae59dd": "heapSort(uint32[])", +"8cae711f": "mintLiquidToken(address,uint256)", +"8cb09d4d": "GCTToken()", +"8cb0a511": "approve(uint256,address,uint256)", +"8cb18ef6": "needFightToAdult()", +"8cb1b614": "setWhitelisted(address,address,uint256)", +"8cb1e9c1": "unlockedAt()", +"8cb240b0": "saasPayment(address,uint256)", +"8cb36aef": "requestCoinToUSD(string,bool,uint256,uint256)", +"8cb3728c": "getAllRevisionTimestamps(bytes32)", +"8cb39385": "getMinBid()", +"8cb3c89f": "loadEthBalances()", +"8cb47a2f": "CrowdForceSampleToken()", +"8cb5497c": "setOperator(bytes32,bool)", +"8cb56999": "GetExpireTime(uint256,uint256)", +"8cb5a0c0": "removeCoordinator(address)", +"8cb858cb": "PRCVToken(uint256,string,uint8,string)", +"8cb996df": "LogMigrationEnabled(address)", +"8cbb02ad": "Marijuana()", +"8cbb13e7": "TokenRHT()", +"8cbb6593": "SHNZ2()", +"8cbba6cf": "isPreWhiteListed(bytes32)", +"8cbbe25f": "NIMFA_PER_ETH_PRE_SALE()", +"8cbc8c0b": "lockholderNumber()", +"8cbcbca2": "_payChicken(address,uint256)", +"8cbcca07": "fillBuyOrder(uint256)", +"8cbdf1d1": "mintARC(address,uint256)", +"8cbe775a": "Bitdepositary()", +"8cbe898d": "CommitteeLimits(uint256,uint256)", +"8cbeb340": "ControlContract(address)", +"8cbf4145": "confirmPrintProxy(bytes32)", +"8cbfa1ec": "quoteAsk()", +"8cc02403": "cobrarImpuesto(uint256)", +"8cc04ebb": "_appendUintToString(string,uint256)", +"8cc17117": "forceRecoverCollateralInternal(address)", +"8cc2f547": "DiceGameCrowdsale(address)", +"8cc30c6f": "buyStageDataRecord(uint256,uint256,uint256,uint256)", +"8cc34ed7": "zilla_remaining()", +"8cc40d71": "dividend_amount()", +"8cc4ab11": "getPurchaseTimestampEnds()", +"8cc50ecd": "addBlock(string,uint256,string)", +"8cc519bf": "companyTimelock()", +"8cc51eda": "kitties(uint256)", +"8cc5510f": "setTeamAddress(address,bool)", +"8cc55473": "bulkTokenMint(address[],uint256[])", +"8cc57368": "getUserTokens(address,uint32)", +"8cc5cde2": "isLunyrToken()", +"8cc5e56e": "revokeLockByIndex(address,uint256)", +"8cc60a61": "isStoreActive(uint256)", +"8cc60eca": "SS()", +"8cc63bfb": "marketingFunds()", +"8cc6acce": "updateConfig(bytes)", +"8cc78a40": "option20symbol()", +"8cc7ea0e": "Xian()", +"8cc89e1b": "TCCoin()", +"8cc8baaf": "getBuyPriceTimes()", +"8cc8c236": "_transfer(address,uint256,bytes)", +"8cc9638c": "fundBurn(address,uint256)", +"8cc98bc3": "approveEliminate(address,uint256)", +"8cc99aa3": "getAmountForCurrentStage(uint256)", +"8cca5a3f": "withdrawWallet(address)", +"8cca8f64": "canClaimRefund(address)", +"8ccb381b": "tenthTotal()", +"8ccb4daf": "getPositionMaxDuration(bytes32)", +"8ccb59e8": "revealWinner(uint256)", +"8ccb9f2d": "del_admin(address)", +"8ccbd6da": "freezeToken()", +"8ccc04ea": "proofOfConceptCap()", +"8ccc4781": "Math(int256)", +"8cccc341": "initiateChallenge(address)", +"8cccf2df": "viewServiceReward()", +"8ccd227c": "gameRequestTokens(address,uint256)", +"8ccdcf80": "tokenSalePausedTime()", +"8cce10c8": "rank(address,address,uint256)", +"8cce49c9": "mokenData(uint256)", +"8cce7e92": "removeMarketFromWasCalled()", +"8cceb1e8": "notifyBurn(address[])", +"8cd0a573": "transferWithCustomReserving(address,uint256,uint256)", +"8cd0fc3d": "TRONClassic(uint256,string,string)", +"8cd221c9": "roundId()", +"8cd25904": "calculateAndCreateTokens(uint256)", +"8cd3751b": "newProposal(address,uint256,uint256,bool,bool,address,uint256,uint256,uint256,uint256)", +"8cd3f064": "acceptToken(address)", +"8cd41fae": "StartCompetition(uint8,uint8,uint8,uint8,uint80,uint32)", +"8cd41fd8": "referrerBonus2()", +"8cd42991": "getTimeRemaining(uint256)", +"8cd47415": "zkWithdrawTrusted(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[],uint256)", +"8cd4d21a": "x(uint256,address)", +"8cd4fdf1": "maxGamble()", +"8cd53767": "withdraw(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"8cd5dce3": "setNextRoundRequiredBetAmount(uint256)", +"8cd6c7fa": "seedSingleSaleCount()", +"8cd70e72": "isInitalized()", +"8cd85846": "totalTranches()", +"8cd85dc2": "getWinNumbers(uint256)", +"8cd8bd05": "IanCoin()", +"8cd8db8a": "init(uint256,uint256,uint256)", +"8cd90e31": "EAToken(uint256,string,uint8,string)", +"8cda2a15": "SafePromo(string,string)", +"8cda4430": "lookupRoyalty(address)", +"8cdb1719": "approveCertification(uint256)", +"8cdbd8fb": "remainToken()", +"8cdc86a6": "sort()", +"8cdcbdef": "closeBlock()", +"8cdcdae1": "testControlUpdateLatestRevisionNotOwner()", +"8cde43dc": "getCrowdsaleMaxRaise(address,bytes32)", +"8cde4667": "BANKNET()", +"8cdf31fa": "Cryptoya()", +"8cdfb1e6": "transferIfHF(address)", +"8ce0080f": "updateGuMasks(uint256,uint256)", +"8ce05b54": "bornFamedStar(address,uint256)", +"8ce060fb": "FounderSwitchRequestEvent(address)", +"8ce0bae8": "Canceled(address,uint256,address,address,uint256,address,uint256,uint256)", +"8ce0bd46": "Deposit(address)", +"8ce113dc": "right60(uint256)", +"8ce187fd": "raisedUSD(uint256)", +"8ce25a93": "numAccounts()", +"8ce2ae2d": "creator_new()", +"8ce2e0ea": "addLastTwoAmbassadors(address,address)", +"8ce2f386": "AcceptsOmniDex(address)", +"8ce3ee62": "transferEmpire(address)", +"8ce450de": "assetThaw()", +"8ce4f1b2": "setGasRewardPercent(uint256)", +"8ce53e5b": "getMaximumInvestmentPerDay()", +"8ce5877c": "removeSpender(address)", +"8ce69b72": "USD_IN_ETH()", +"8ce74426": "protocol()", +"8ce795f5": "SerbiavsBrazil()", +"8ce7be01": "getUniqueSpinnerPrice()", +"8ce7ff4a": "getVote(uint256,uint256,uint256)", +"8cea577a": "allowFunction(bytes32,bytes4)", +"8ceaa23f": "setAvailablePositions(uint256)", +"8cead4bf": "currentProfit()", +"8cec9176": "SimpleMultisigWallet(address[],uint256)", +"8cec9f4c": "playlotto(uint256)", +"8cecd03e": "INVESTOR_TOKENS()", +"8cece594": "countClaimBackers()", +"8cecf66e": "_inverse(uint256)", +"8ceda04d": "getCounting(bytes32)", +"8cee3b4d": "getPolicyByCostumerCode(string,uint256)", +"8cee8778": "crear(uint256)", +"8ceeaaa8": "getTodayOwnerAddress()", +"8ceedb47": "cage(uint256,uint256)", +"8cef1ed9": "xpectoTTF1Token()", +"8cef2b93": "CECNaypyidaw(address,uint256)", +"8cefad63": "setAirEndtime(uint256)", +"8cefaf1a": "setSalesEndTime(uint256)", +"8cf0c191": "rum()", +"8cf19975": "createLottery(string,uint256,uint256,uint256,uint256,uint256,uint256)", +"8cf1c5c4": "LogFeeEvacuation(uint256)", +"8cf20038": "engDevAddress()", +"8cf228cd": "DNNTDE()", +"8cf3313f": "calculateWeightedMultiplier(uint256,uint256,uint256,uint256)", +"8cf3562b": "DEC15Recursive()", +"8cf37ece": "InformRebuy(uint256)", +"8cf39a9c": "TicTacToe(address,address,uint256)", +"8cf3a181": "addRRA(address)", +"8cf3e683": "isAddressExcept(address,address)", +"8cf49cad": "ReleaseDate()", +"8cf4dbfb": "collectBalance()", +"8cf57cb9": "rewardAddress()", +"8cf5dbc6": "recruitHero()", +"8cf7b7a4": "slashAddressLikeUsername(string,uint256)", +"8cf7d906": "playAndFinishJackpot(uint256,uint256,uint256,uint256)", +"8cf80438": "winningBid()", +"8cf8151f": "appWasMade(bytes32)", +"8cf907fb": "EndRefund()", +"8cf92ade": "distributeBountyTokens(address[],uint256[])", +"8cf9f5e7": "getPreSelledInPool()", +"8cfa8eea": "getWeiToUsdExchangeRate()", +"8cfaabcc": "managementTransfer(address,uint256)", +"8cfae7e4": "TransferUnsoldTokensBackToTokenContract(address)", +"8cfb3088": "defaultExpiry()", +"8cfb7c02": "updatePopularity(bytes32,uint256)", +"8cfb8f21": "isKnownUniverse(address)", +"8cfd6d4c": "CCH_LLV_FIFA_2()", +"8cfd8901": "_incBlock()", +"8cfdacb0": "STARTING_PACIFIST()", +"8cfe6a09": "tokensToEthereum_2(uint256)", +"8cfe7c32": "bTransfer(address,address,address,address[],uint256[])", +"8cff1990": "isSignedByAndrey()", +"8cffa21c": "getOwnedItems()", +"8d000903": "createTokenToMarket2018()", +"8d003a0f": "addCurrentTime(uint8)", +"8d008989": "Multisig(address,address,address,address)", +"8d00abb6": "setAElfCommunityMultisig(address)", +"8d012295": "presaleVesting(address,uint256,uint256,uint256,uint256,uint256)", +"8d0128cb": "transferMintKey(address,int256)", +"8d01308c": "PRESALE_START_WEEK3()", +"8d03b102": "testing()", +"8d044c06": "unpauseRedemption()", +"8d049190": "mapWidth()", +"8d0515dc": "HenryMiniToken(uint256,string,uint8,string)", +"8d0522c5": "set_contrib_arbits_max(uint256)", +"8d0528ec": "Withdraw_referral()", +"8d05ad4e": "NLL()", +"8d062046": "testTokensAreTransferrableAfterSale()", +"8d068043": "requiredSignatures()", +"8d0716c4": "approveScoupons(address,uint256)", +"8d07ae9f": "getBidDetails(address)", +"8d086da4": "withdrawShares()", +"8d089930": "limitEndDate()", +"8d08eefa": "setCORAddress(address)", +"8d09b9cc": "TeCToken()", +"8d09c674": "Donated(address,uint256,uint256,uint256)", +"8d0a3b6d": "bonusByAmount()", +"8d0a5fbb": "getOrderCount()", +"8d0a73e3": "tokenDistributionStartTime()", +"8d0aadca": "playerDelayOnExit(address)", +"8d0ae472": "AsheToken()", +"8d0b3d9b": "_add(uint32,address)", +"8d0b4be5": "setXPContractAddress(address)", +"8d0bba03": "MINIMUM_CONTRIBUTION()", +"8d0caef5": "bonusStage1()", +"8d0cf786": "MatchAdded(uint256,uint8,uint16)", +"8d0d018c": "havedDistDevCoin()", +"8d0d27ba": "queryPlayerType(uint32[11])", +"8d0d3ccf": "getBonusTier()", +"8d0d877f": "LZZ()", +"8d0dd3c0": "setBUU(bytes32,uint256,uint256)", +"8d0e5136": "isPlayerInQueue(address)", +"8d0eda03": "isInvestorLocked()", +"8d0f403a": "adminAddAction(bytes32)", +"8d0f8cef": "drop(address,uint256)", +"8d0fc05a": "votesYes()", +"8d10215e": "grantAccess(uint256,uint256,string)", +"8d106690": "setPropertyFlag(uint16,uint8)", +"8d111ac6": "checkTokSold()", +"8d119d41": "AngelCoinV1()", +"8d121247": "changeProductionFeeRecipient(address)", +"8d12aba7": "IMCOToken()", +"8d134175": "CellTokens()", +"8d1343e0": "issueDate()", +"8d13d972": "getUsdFee(bytes32,uint256)", +"8d13ea34": "changeUserProjectExp(bytes32)", +"8d14670a": "multiUnlock(address[])", +"8d149b3c": "compareInts(int256,int256)", +"8d152d78": "pushBytesArray(bytes32,bytes32)", +"8d1540c1": "CoinBuy(uint256,address)", +"8d159787": "buyDragon(uint256)", +"8d15a218": "LogRedeem(address,uint256)", +"8d15b307": "privateEventActive()", +"8d16fd83": "sellDai(uint256,uint256,uint256)", +"8d17664d": "getSecret(uint256)", +"8d182f01": "removeSale(bytes32)", +"8d1a4b28": "getGame(address)", +"8d1a7765": "getPlayerGeneral(uint64)", +"8d1b2afd": "logFeeWindowCreated(address,uint256)", +"8d1bc93d": "buyWuxiaMaster()", +"8d1c3b8b": "sHasDownvoted(uint256,uint256,address)", +"8d1c8048": "transport(uint256)", +"8d1ca4ec": "addGuess(int256)", +"8d1d1572": "transferFeeAddress()", +"8d1d22d8": "renameMonster(uint64,string)", +"8d1d2c21": "categoricalEvents(bytes32)", +"8d1d8639": "getcanuserun(address)", +"8d1dff6b": "mintTokens(uint256,address,bool)", +"8d1e6b56": "issueCompanyTokens()", +"8d1eaf78": "registrarInfo()", +"8d1fdf2f": "freeze(address)", +"8d20194d": "getWhiteUsersFrom(uint256,uint256)", +"8d215adc": "Bettings(uint256,uint256)", +"8d216186": "roll(uint256,bytes32)", +"8d22651e": "MAX_NUM_OF_CHOICES()", +"8d227fc0": "getPeriodInfo()", +"8d22b345": "getAppTokenCode(uint32)", +"8d24abbc": "closeAndTransferTokenOwnership()", +"8d24d147": "rvDeposit()", +"8d24f5bc": "tokensByBtcTx(string)", +"8d256b0a": "ExchangeRate(uint256)", +"8d258104": "setManager()", +"8d25827a": "countOpenPackageOfOneAgency(address)", +"8d259d65": "_sellCallToOpen(uint256,uint256,uint256,uint256,address)", +"8d25af04": "restartGame()", +"8d26d88f": "feeWithdrawTokenAmount(uint256)", +"8d26eb2b": "edgePigmentG()", +"8d272b0a": "TaeCoin()", +"8d2810fe": "GenesisBuyPrice(address)", +"8d288e93": "toRefund()", +"8d28da21": "ECT(uint256,string,uint8,string)", +"8d298851": "initialIssue()", +"8d29a239": "finalizeHoldingAndTeamTokens(uint256)", +"8d2a0910": "getTotalDividendsPaid()", +"8d2af65d": "claimTokenReserveFinan()", +"8d2c8ce8": "RrcToken()", +"8d2c929a": "bridgeNodes(address)", +"8d2d2563": "saleFirstEarlyBirdEndBlock()", +"8d2d3f41": "getKeyRevisionNumber(uint32)", +"8d2dcb2d": "TokenPool(address,address)", +"8d2ea8dc": "withdrawAvailableToken(address,address,uint256)", +"8d2f349f": "TransCompleteds()", +"8d2f7272": "CariToken()", +"8d300458": "updateInvested(address,uint256)", +"8d30241b": "HasGoods(uint32)", +"8d30d418": "ContractRemoved(address)", +"8d30e65d": "claimReservedTokens(address,uint256)", +"8d3121b3": "releasedTokenTotal()", +"8d317de2": "OctusToken()", +"8d323fdc": "LogAddressTokenCapChange(uint256,string)", +"8d331996": "setTimeWindow(uint256)", +"8d334529": "restrictions(address)", +"8d348b7c": "mintToClient(address,uint256)", +"8d357fa3": "getKeys(uint256)", +"8d35b9ce": "ARXpresale()", +"8d361e43": "removeSigners(address[])", +"8d361f6e": "bonusTokensDistributed()", +"8d375da2": "testMakeItFail()", +"8d37f52c": "addAgingTime(uint256)", +"8d38b237": "calculateCountOfInvestmetnsInQueue(uint256,uint256)", +"8d38f5a0": "Burn(address,uint256,bytes)", +"8d3945e4": "setCounter()", +"8d3965be": "buyerApprove(uint256,bytes)", +"8d3972d5": "FABIToken()", +"8d399ce3": "submit(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"8d3a5ded": "initPlatinum()", +"8d3af7eb": "withdrawLemontokens()", +"8d3b6d08": "registerSsp(address,uint8,uint16)", +"8d3bd1f8": "teamTokensGenerated()", +"8d3c7415": "JuzixTokenManager()", +"8d3d523b": "bet2Of(uint256)", +"8d3d6576": "maxContribution()", +"8d3d70df": "takeBet(uint256,address,uint256,uint256)", +"8d3d8587": "GanaPreSale(address,address,address)", +"8d3def46": "oryza()", +"8d3ef87d": "getuserlistlength(address)", +"8d3f0ed5": "allocateTokens(address,uint256,uint256)", +"8d3fd859": "sellFucks()", +"8d442ae0": "toUint8(bytes,bytes,uint256)", +"8d447e39": "getLatestWhitepaper(address)", +"8d44c90b": "BurnMyTokensAndSetAmountForNewBlockchain()", +"8d44f13b": "claimFromPool()", +"8d4572be": "rens()", +"8d45e221": "Partial23Transfer()", +"8d467f22": "getKeysFromEth(uint256,uint256)", +"8d472709": "contribute(address,address,uint256)", +"8d475461": "m_teamId()", +"8d4777c8": "claimGooDepositDividends(address,uint256,uint256)", +"8d47c7d7": "getTokenListed()", +"8d498158": "DaleoneToken()", +"8d49cd7f": "getTeam(uint32)", +"8d49da75": "stopCollection()", +"8d4a2d39": "addSeconds(uint256,uint256)", +"8d4d801c": "addRecipient(bytes32,string,string,address)", +"8d4d8e19": "unregisterAsDelegate()", +"8d4e4083": "isFinalized()", +"8d4e57e6": "ROLE_TOKEN_CREATOR()", +"8d4ea1ba": "addEtherForOraclize()", +"8d505019": "addNote(bytes32,string)", +"8d50b6d0": "doSelectDisputedStateRoot(uint256,bytes32,uint256)", +"8d51faec": "setOwnerTestValue(uint256)", +"8d521149": "bonus_received()", +"8d52a1fc": "setStrikePrice(uint256,uint256)", +"8d539b35": "resetPendingContribution(address)", +"8d53b208": "revokeAccess(bytes32,address)", +"8d551860": "horseNotForSale(uint256)", +"8d553538": "addSecondaryRecord(string,bool,string,bool,string,string,string)", +"8d5555f2": "priceFor(uint256)", +"8d55719e": "_withdrawEther(address)", +"8d55b6ac": "thirdRate()", +"8d565abf": "createTx(address,address,uint256)", +"8d56ac74": "REALEX()", +"8d56bc62": "Bankroi()", +"8d574383": "setDemurrageFrequency(uint256)", +"8d578bee": "totalSaleCap()", +"8d5802e2": "getAssetOwner(uint256)", +"8d59cc02": "register(address,string,string)", +"8d59d1f1": "donate(uint256,string)", +"8d5a225e": "assignReserveSupply(address)", +"8d5c4456": "pIndex()", +"8d5c84cd": "isStart(bytes32)", +"8d5cc102": "traded_token()", +"8d5ceeca": "checkShares(address)", +"8d5d1e97": "priceStar3()", +"8d5d3429": "requestLoan(uint256)", +"8d5d88c9": "LTYG()", +"8d5dee05": "EGGS_TO_HATCH_1TURTLE()", +"8d5e4f9c": "BroFistCoin()", +"8d5f3f96": "nextInvestorsProfitSum()", +"8d5f8d1c": "forwardFundToCompanyWallet(uint256)", +"8d5fa05c": "setAreas(address,uint256)", +"8d6014a8": "FixedCeiling(uint256,uint256)", +"8d60be98": "ICO_TOKENS_PERCENT()", +"8d60e30b": "reward(address,uint256,bool,string)", +"8d60ed85": "setDevCutPercentage(uint256)", +"8d614474": "AdvancedEthVocToken(uint256,string,string)", +"8d622749": "award(address,address,string)", +"8d627e91": "isTryedFinishCrowdsale()", +"8d62b845": "isMakersSignatureValid(address,bytes,string,address)", +"8d63c77b": "WizardReplacedEvent(address,address)", +"8d63cfa7": "getPixelOwner(uint16,uint16)", +"8d647185": "setBaselineRate(uint256)", +"8d647d3a": "allowPrivateParticipant(address,uint256)", +"8d64bcf1": "maxWhitelistPurchaseWei()", +"8d65095e": "PI_EDIT_3()", +"8d656b83": "minWeiInvestment()", +"8d664d6a": "setFeeRates(uint8,uint8,uint8)", +"8d670a2e": "unlockPlayerFunds(address)", +"8d6731b0": "LudumToken()", +"8d67799e": "MAX_SIZE()", +"8d6819be": "mintTokens(uint256,address,uint256)", +"8d688b6e": "EthPyramid()", +"8d68cf59": "sendFunds()", +"8d69121d": "addDocument(bytes32,string,string)", +"8d69ca74": "wdEthereum(uint256,address[])", +"8d69e95e": "serviceProvider()", +"8d6a2ed5": "minimumBuyAmount()", +"8d6a6d4b": "_allocatePromoTokens(address,uint256)", +"8d6a6fbd": "proxyTransfer(address,address,uint256,bytes,string)", +"8d6b5d3e": "getScouponAllocationFactor()", +"8d6c58ab": "isTransferToICAPAllowed(address,bytes32,uint256)", +"8d6cc56d": "updatePrice(uint256)", +"8d6cd879": "FOUNDATION_STAKE()", +"8d6cd8de": "buffPtr()", +"8d6e56e1": "manyInputsNoReturn(uint256,uint256,uint256,uint256)", +"8d6f24d4": "hash_msg()", +"8d702122": "ownerKill()", +"8d70650f": "getSiteId(uint256,uint256)", +"8d70baaa": "BattleOfTitansToken()", +"8d70c0ce": "transferToExchange(address,uint256,uint256)", +"8d7108e5": "isValidLocation(uint8,uint8,int8[5],int8[24])", +"8d711776": "sendCrypto(address,uint256)", +"8d7117d4": "etherRatio()", +"8d715d9d": "Backdoor()", +"8d71f131": "TOKEN_RESERVE2_CAP()", +"8d72920b": "getAllowedAmountToContribute(address)", +"8d72a473": "deductFunds(address,uint256)", +"8d72f856": "deleteVip(uint256)", +"8d734b30": "setupMintableAddress(address)", +"8d73c027": "mintWithApproval(address,uint256,address)", +"8d747928": "isDrivezyPrivateTokenAcceptable()", +"8d748148": "monitor(address,bool)", +"8d74fd52": "GlobalTourToken()", +"8d75533f": "mint(address,string,bytes)", +"8d7570fc": "doBurn(uint256)", +"8d75fe05": "mintedTokens()", +"8d7601c0": "addResolvers(address[],uint256[])", +"8d77090f": "TriggmineToken()", +"8d776457": "sellBNT(uint256)", +"8d78c90b": "EventUpgrade(address,address)", +"8d79283d": "query1_fnc()", +"8d792964": "TD(uint256,string,string,uint8)", +"8d7a55bf": "PubKeyHashTypeAdded(uint8)", +"8d7af473": "numberOfProposals()", +"8d7b5243": "minerTotalReward()", +"8d7cdcf4": "setLLV_edit_8(string)", +"8d7cffb7": "transferWrappedContractAdmin(address)", +"8d7d2e5b": "minerPreSupply()", +"8d7daf95": "isTokenPairWhitelisted(address,address)", +"8d7e5be0": "getClue1()", +"8d7e7958": "userGrowsPoolSupply()", +"8d7e8a57": "approveSpenders()", +"8d7eca6f": "FUNDING_END_TIMESTAMP()", +"8d7f26e9": "setIPAddress(bytes32,bytes32,address)", +"8d7fe693": "Helios()", +"8d8001ad": "updateMintingStatus(uint256)", +"8d809b0e": "project_wallet()", +"8d80c34e": "unblockAccount(uint256)", +"8d80c922": "getAddressById(uint256)", +"8d81a1ce": "setClamTax(uint256)", +"8d81a88f": "BP_ATHENIAN()", +"8d81e2c0": "getTankTotalEarned(uint32)", +"8d81f51e": "safeTransferChild(uint256,address,address,uint256,bytes)", +"8d822615": "setFeeForArtWorkChangeRequest(uint256)", +"8d835674": "euroRaised(uint256)", +"8d837f38": "getEthBalTeller(address)", +"8d83cc95": "getNextSnapshotBalanceOfMul(address[])", +"8d842fad": "stopPreICO()", +"8d84a7fd": "credit(string,uint256)", +"8d854fde": "getDisputeId()", +"8d859f3e": "PRICE()", +"8d85a70f": "Vote(address,uint256,bool)", +"8d860880": "CheckOut()", +"8d86484c": "setPercentUnfrozenAfterAwardedPerPeriod(uint256)", +"8d8660bc": "setQuantity(string,int256)", +"8d86faa6": "getAmountToGive(address,address,address,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32,uint256)", +"8d87b102": "amountOfStakeToBeReturned(address,uint256)", +"8d8833bf": "periodPreITO_wei()", +"8d89873c": "updateAndGetRemaining()", +"8d8a7f07": "VLBRefundVault(address)", +"8d8a88fc": "pay(bytes32,uint256,bytes)", +"8d8acee9": "setupMultisig(address,address)", +"8d8b1b88": "mixGenes(uint256,uint256)", +"8d8bd44f": "TokenSaleFinished(string,address,uint256,uint256,uint256)", +"8d8c36e9": "purchasedBy(address)", +"8d8d22ba": "changeServiceAddress2(address)", +"8d8d50d0": "createUnicorn()", +"8d8d92fa": "theBid()", +"8d8e2ea9": "Tablow()", +"8d8e4561": "theGrid(uint256)", +"8d8e5da7": "emergencyWithdrawal(address,address,uint256)", +"8d8f2adb": "withdrawTokens()", +"8d8f7780": "GEE100()", +"8d8f95d1": "collectDrugs(address)", +"8d909ad9": "getSeedAndState(string,address)", +"8d91801a": "RxEALTestSaleContract()", +"8d91931f": "longLock()", +"8d91e803": "buyWhiteCore(uint256,uint256,uint256,uint256)", +"8d920b02": "rejectPayment(uint256)", +"8d927069": "getTrace(uint256)", +"8d927b34": "maxPendingBalances()", +"8d928af8": "getVault()", +"8d92910c": "isLegalAttack(uint256,uint256)", +"8d92c187": "testFinalize()", +"8d92ce46": "submitBlockHeaders(bytes)", +"8d92fdf3": "withdrawAsset(uint256)", +"8d93758e": "PRESALE_STAKE()", +"8d93eac2": "mintFeeNumerator()", +"8d93ec88": "poolWallet()", +"8d94053f": "verifyAutoridadElectoral(bytes32)", +"8d949635": "endRefundableTime()", +"8d949c8b": "D(uint256)", +"8d956f1e": "tokenTransfer(address)", +"8d95f245": "sellkey(uint256)", +"8d976d76": "investCommission()", +"8d977672": "tasks(uint256)", +"8d977d9e": "checkGameClosed(address)", +"8d98ee43": "_verifyAddress(address)", +"8d98f4e3": "getAllCardsDefence()", +"8d9940b9": "createRetainer()", +"8d995f94": "transferAndFreeze(address,uint256)", +"8d99b2eb": "endPoll()", +"8d9a7b49": "pricePerMessageChanged(uint256,uint256)", +"8d9ad08e": "getAllInvestments()", +"8d9afc0f": "getStageId()", +"8d9b449b": "addRevenueShareCurrency(address,string)", +"8d9d851c": "toggleVaultStateToAcive()", +"8d9e6e47": "setFinalICOPeriod()", +"8d9e8a76": "CMGG12StandardToken(uint256,string,uint8,string)", +"8d9efa3f": "LogPhaseSwitch(uint8)", +"8d9f39d1": "_clear(uint256)", +"8d9f95c4": "PresaleEntry(address,uint256)", +"8da03997": "getNativeReputation(address)", +"8da15531": "SimpleCoinToken()", +"8da16e48": "geraHash(string,string)", +"8da198cd": "simpleAssert(bool)", +"8da1e722": "minGamePlayAmount()", +"8da2a2a1": "reserveDistribute()", +"8da2defb": "WE(uint256,string,uint8,string)", +"8da2fc26": "Burn(address,uint256,uint256,bytes)", +"8da3d736": "addToList(uint256,address[])", +"8da46db4": "DistributeXcel(address)", +"8da4d3c9": "claimCount()", +"8da4d776": "newCommune(address)", +"8da58897": "starttime()", +"8da5cb5b": "owner()", +"8da5fd77": "unlockSecondaryTokens()", +"8da66e67": "LogCollectAmount(uint256)", +"8da76874": "mintFromTrustedContract(address,uint256)", +"8da7d0b5": "totalChildContracts(uint256)", +"8da8023c": "endTimeOfStage(address,uint256)", +"8da8524f": "LogFrozenStatus(bool,uint256)", +"8da87ac6": "addressFundPlatform()", +"8da8a5ae": "nativeBlockhash(uint256)", +"8da8f235": "_addController(address)", +"8da91d04": "unset(uint32[])", +"8da9b772": "getHello()", +"8daaaa2f": "HOUSE_EDGE()", +"8daaf0a2": "addTokens(address,address,uint256)", +"8dab38da": "BONUS1_LIMIT()", +"8dac0e8c": "GetEtherPrice()", +"8dac7191": "initialTokenOwner()", +"8dad52f4": "dive4(address)", +"8dae3d68": "awardLuckyCoin(uint256,uint256)", +"8dae5adc": "FundTransfer(address,address,address,uint256)", +"8dae9364": "_stakeAmountValid(address,uint256,uint256,bytes8,uint256,uint256)", +"8daed4c4": "allocateShareholder(address,uint32)", +"8daf08d9": "requestStempas(bytes32,address)", +"8daf4dcf": "getTournamentRate()", +"8daf5033": "TokenPurchased(address,address,uint256,uint256)", +"8db02d79": "Tiguan5Coin()", +"8db0816a": "claimC2()", +"8db0e83b": "getBytesArray(bytes32)", +"8db1296d": "token_creation_cap()", +"8db1ccac": "PUBLIC_SALES_1_RATE()", +"8db23385": "balanceOfTotalUnclaimedCookie()", +"8db261e0": "hardWithdrawAll()", +"8db49b57": "GrantDeleted(address,uint256)", +"8db4dad2": "contractSignedTime(string)", +"8db517fb": "GMQToken(uint256,string,string)", +"8db518f3": "ContractiumToken()", +"8db54c90": "getTotalSendingAmount(uint256[])", +"8db57994": "fundLoan()", +"8db6c17e": "ISCoin()", +"8db7183a": "dateMarketing()", +"8db783ce": "addHourToProject(uint256,uint256)", +"8db78a37": "setBountyVault(address)", +"8db7cd54": "getTournamentEntranceFee()", +"8db8053b": "mintPresaleTokens(uint256)", +"8db8f8bc": "ELACoin(uint256,string,string)", +"8db9653f": "getTotalIssued()", +"8db974e4": "optionTotalSupply()", +"8db9c13c": "removePolicy(uint8)", +"8dbb908a": "clearAllrequest()", +"8dbbbe10": "getFeeTake(uint256)", +"8dbc2fd1": "setNewEndtime(address,uint256,uint256)", +"8dbd7d54": "addCashier(address,address)", +"8dbdbe6d": "deposit(uint256,uint256,address)", +"8dbdfae7": "referalBonusPercent()", +"8dbe3be5": "isCeilingStrategy()", +"8dbe6c33": "_setUserInfo(address,uint256,uint256,address)", +"8dc01209": "CJC()", +"8dc07e46": "picops_is_enabled()", +"8dc1c44d": "testFailCreateWithParentSameNonce()", +"8dc2a2cd": "GMCCERC20(uint256,string,string)", +"8dc401ae": "withdrawAllDevelopersCut()", +"8dc43256": "AFRTokenERC20(uint256,string,string)", +"8dc45377": "getDuel1(uint256)", +"8dc4c6ab": "recoverable(address)", +"8dc654a2": "withdrawLink()", +"8dc6af54": "UsdToTokenConvert(address,uint256)", +"8dc6e2f1": "onMarketFinalized()", +"8dc71928": "minimumTargetReached()", +"8dc73521": "clearLock(address)", +"8dc850dc": "currentCoinsCreatedInteger()", +"8dc889f6": "requestDisbursement(uint256)", +"8dc949e8": "SapienToken()", +"8dc95182": "AssignWhitelistManager(address)", +"8dc9650f": "claimdram()", +"8dc98851": "Billboard()", +"8dca05c9": "airFropPot_()", +"8dca5511": "usdPerEve()", +"8dca7a01": "unicornManagement()", +"8dcb25e0": "balanceOf2Internal(address,address)", +"8dcb8c21": "coinsFlipped()", +"8dcd555f": "_buyNextRank(address)", +"8dcd64cc": "createAndEndowD(uint256,uint256)", +"8dcd992e": "_setBabzBalanceOf(address,uint256)", +"8dcdfe12": "distributeCrowdsaleTokens(address,uint256,uint256)", +"8dcf7892": "setAllocateTokenDone()", +"8dcfdaad": "removeMany(address[])", +"8dcff4f9": "setupAssetOwningListener(address)", +"8dd05b56": "getImageDataLength(uint256,uint16)", +"8dd14802": "setBridge(address)", +"8dd1e732": "YYBToken()", +"8dd1e96c": "getAngelFundAddres()", +"8dd21b0f": "redTeamLockingPeriod()", +"8dd3c196": "addInvestment(bytes32)", +"8dd42808": "removeHolder(address)", +"8dd47d91": "Wthdraw()", +"8dd4f292": "getRemainingSellingToken()", +"8dd5ac24": "SaveToken()", +"8dd5e298": "canEnterPool(address)", +"8dd66012": "incChildren(uint256)", +"8dd6908e": "ambassadorMode()", +"8dd6ce79": "setRatePrices(uint256)", +"8dd745bb": "adminSendTokens(address,uint256,uint256)", +"8dd747ec": "balanceOfKyCToBeApproved(address)", +"8dd7d6d1": "newPuppet()", +"8dd7e44b": "withdrawalComplete()", +"8dd8596c": "sendDonation()", +"8dd9054b": "MATCoin()", +"8dda811c": "GameChannelBase(address,uint256,uint256,address,address,uint256)", +"8ddab3dc": "_preValidateRefill(address,uint256)", +"8ddab515": "MedicayunLink(uint256,string,string)", +"8ddb428a": "currentGeneration()", +"8ddc9aa7": "UpgradeProposed(address)", +"8ddcf81e": "get_deal_status(uint256)", +"8ddd8b69": "renounceFreezer(address)", +"8dde60fa": "transferCoin(address,uint256)", +"8dde907e": "FooBurnableToken()", +"8ddf52bd": "earlyContribShare()", +"8ddf792b": "setOraclizeGasLimit(uint256)", +"8de022b7": "dropAnchor(uint16,uint16)", +"8de04f87": "authorized_updateCardReserved1(uint256,uint8)", +"8de0ece7": "THEWOLF10XToken(uint256,uint256,uint256,uint256,address,address,address,address,string,uint256)", +"8de12845": "init(string,string,string,string)", +"8de1dcea": "rateAngelsDay()", +"8de21650": "getBooleanValue(string)", +"8de2947c": "chkLockedTokens(address,uint256)", +"8de2a051": "setUint(uint256,uint8,uint16,uint32,uint256)", +"8de3317d": "withdrawDRPU(uint256)", +"8de4f42f": "addNewAirdrop(uint256,string,uint256,address)", +"8de5104b": "startPreICOStage2()", +"8de575e4": "Veen()", +"8de69284": "subscribe(address,uint256)", +"8de69c3c": "AcceptsDailyDivs(address)", +"8de69f66": "allocateAdvisorTokens(address[],uint256[])", +"8de6b343": "deleteFromBlacklist(address)", +"8de74aa1": "setEstateRegistry(address)", +"8de85908": "ProjectCall(address,uint256)", +"8de8d47c": "sendObjectWithoutApproval(uint256,address)", +"8de8de61": "CC5Coin()", +"8de8e295": "setSupplyLimit(uint32,uint32)", +"8de93222": "purchase(address,uint256)", +"8de9ee05": "TakeBuyOrder(bytes32,address,uint256,uint256,uint256,address,address)", +"8dea60cc": "CryptopediaCoin()", +"8dec1720": "invites(address)", +"8dec3daa": "destroy(uint256,address)", +"8dec818a": "LogPaused(bool)", +"8dede3f5": "pendingInvestContractsIndices(address)", +"8dedeca8": "costAndBuyTokens(uint256)", +"8dee53b9": "setBoardMember(uint256,uint256,uint256,uint256)", +"8def14f3": "ether_per_token()", +"8def1d3b": "distinctInvestors()", +"8def32b6": "addOrderBatch(bool[],uint128[],uint128[],uint32[],int256,bool[])", +"8defbc5e": "right31(uint256)", +"8df068ab": "initialTransferToDevTeam()", +"8df0fda1": "isApplicationExits(string,string)", +"8df10469": "refundInvestor(uint256)", +"8df15e19": "tokenLock(address,uint256)", +"8df1a8db": "ENJAllocation(address)", +"8df208b7": "StopQ()", +"8df272d2": "CosmoCoin(address,address)", +"8df301aa": "tradeKyber(address,uint256,uint256,address)", +"8df35abe": "setManagerAndClaimer(address,address)", +"8df388c1": "totalUnvestedAndUnreleasedTokens()", +"8df3a24c": "canAcceptBuyNow(uint256,address)", +"8df41c32": "allocationAddressICO()", +"8df4235f": "setother(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"8df465ea": "Zendad()", +"8df48935": "uncooperativeClose(address,uint32,uint192,bytes)", +"8df4d225": "GLXChain()", +"8df554b3": "Dividend()", +"8df583bd": "exchangeBBDBalance()", +"8df5fc7a": "_RewardClaimed(address,uint256,uint256)", +"8df61294": "totalAmountOfOrders()", +"8df6ad66": "isArrAccountIsNotFrozenForReturn(address)", +"8df6af63": "setCHGUSDPrice(uint256)", +"8df793d6": "leaseCard(uint8,string,string,string)", +"8df8228c": "x888()", +"8df87c66": "_getTokenLockType(uint256)", +"8df8ac87": "recevedTokenFromEvabot(address,uint256)", +"8df8c008": "getFreeTurtles()", +"8df8cc4c": "_removeOperator(address)", +"8dfa6fcb": "endTimeAddBonus()", +"8dfa703f": "BitkerToken()", +"8dfaf7f0": "getTeamsInfo()", +"8dfb015f": "increaseInvestedWei(uint256)", +"8dfb04fe": "getExistCell(address)", +"8dfb9950": "transferTokensManually(address,uint256,uint256)", +"8dfbcf36": "addCapper(address)", +"8dfced82": "amountBonusEnabled()", +"8dfd1242": "updateStarScoreInBulk(address[],uint256[])", +"8dfda5ae": "getIndexByAddress(address,address)", +"8dfde39d": "abi(bytes32)", +"8dfef745": "bonussale_StartDate()", +"8dff1762": "RpsGame()", +"8dff4abd": "activateRevenueShareIdentifier(string)", +"8dffe343": "kvcDiv(uint256,uint256)", +"8dffe5c0": "buyPlace(uint256,string)", +"8dfff9f2": "changePrepaymentFee(uint256)", +"8e005553": "setFee(uint16)", +"8e006db0": "setProductStock(bytes32,uint256)", +"8e007cfa": "giveEthxAddress()", +"8e008b59": "_createTeam(address,uint32[])", +"8e01d34b": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint8,uint8,uint8)", +"8e0273bb": "Existing(address)", +"8e0294a8": "_removeProposal(address)", +"8e035ac1": "BetOnHashV82()", +"8e045031": "isTokenCollected(uint256,address)", +"8e048315": "investorDeposit(address,uint256)", +"8e0488a8": "transferirSalaDePara(address,address,uint256)", +"8e04977d": "currentLotteryValue()", +"8e056fe6": "setBirthBlock(uint256)", +"8e05beb3": "token(bool,address,address,address,address,address[],uint256[])", +"8e05d59d": "signToApproveTokenControlInfo(uint256)", +"8e05d8a5": "_computeNextGen0Price()", +"8e068b11": "virtualReserveBalance()", +"8e07d7da": "confirmKittyActions(uint256,uint256[8])", +"8e082555": "changeOwnship(address)", +"8e08b2ec": "MinesOnTrade(uint256)", +"8e08cf38": "updateBonus(uint256,uint256,uint256,uint256,uint256)", +"8e09c8cd": "addCallSpenderWhitelist(address)", +"8e09ead7": "isTokenBankroll(address,address)", +"8e0a5faa": "invariant(address)", +"8e0adbf5": "getLLV_edit_11()", +"8e0af993": "setPrivateFund(address,uint256,uint256)", +"8e0b017d": "setSellRate(uint256)", +"8e0bba69": "iown()", +"8e0c2882": "drain_alltokens(address,uint256)", +"8e0c36c4": "verifySeed(bytes32,bytes32)", +"8e0c8999": "zkWithdraw(bytes32,uint256,address,uint256[2],uint256[],uint256[],uint256[])", +"8e0cac02": "redeemMarketingAndRNR()", +"8e0d5075": "claimDividendsForBlock(uint256)", +"8e0db0d9": "keyAtIndex(uint256)", +"8e0e8fb2": "approveProvider(address,uint256)", +"8e0ea5cf": "ReturnTokensFor(address,address,uint256)", +"8e0eef8e": "getTicketValue(uint256,uint256)", +"8e0ef033": "defrostTokens()", +"8e0f65eb": "isBelow(int256,int256,string)", +"8e0f9b85": "Smartcarblockchain(address,uint256)", +"8e0fee1f": "withdrawRefBalance()", +"8e101867": "maxTotalAmount()", +"8e1069f3": "getPlayRecord(address,address)", +"8e10be33": "primaryOwner()", +"8e111ef6": "addressOfERC20Tocken()", +"8e120f36": "prepareToPayWinners(uint32)", +"8e1227b2": "KTCWhiteList()", +"8e12823b": "getCompanyHash(address)", +"8e13435b": "MathPractice()", +"8e14cc91": "CreateTokens()", +"8e151947": "newBitsoAddress(address)", +"8e15e94b": "countOfCell()", +"8e15fc87": "clearDeposits()", +"8e165058": "sendTokensToBuyers()", +"8e17de8b": "Controlled(address)", +"8e180733": "_validCrowdsale()", +"8e1876ee": "permaStop()", +"8e19899e": "withdraw(bytes32)", +"8e19ee4c": "Recovery(uint256,address,address)", +"8e1a1c30": "WithdrawLeftToOwner(uint256)", +"8e1a55fc": "build()", +"8e1aa2c4": "bts_address1()", +"8e1b9f42": "CROWDSALE_WALLET_ADDR()", +"8e1bb633": "triggerRecovery(uint256,address,uint8,bytes32,bytes32,uint256)", +"8e1d9545": "setTokenSaleHalt(bool)", +"8e1dfd48": "isMerhantAlreadyRegister(address)", +"8e1e2add": "tradeABIHash()", +"8e1e3e6c": "POMACOIN()", +"8e1e3eb1": "setMinBuyEth(uint256)", +"8e1eeb09": "BarrelAgedFOMO()", +"8e1f0614": "EGYPT()", +"8e1fda84": "WorkcoinCrowdsale(address)", +"8e1ffb19": "testThrowsRetractLatestRevisionEnforceRevisions()", +"8e207fa0": "getApproveValueValue()", +"8e22e8de": "Cryptolotto7Days(address,address,address,address)", +"8e236cea": "setAnnualPrice(uint256)", +"8e242d54": "withdrawSharesTo(address,uint256)", +"8e25071a": "setProxyCurrator(address)", +"8e263e6f": "firstAttack(address,uint256,uint256[],uint256[])", +"8e268934": "LogSendPOSTokens(address,uint256,string)", +"8e26a223": "getPoSReward(address,address)", +"8e26c09d": "waitPeriod()", +"8e26c30c": "carTransferState()", +"8e26e582": "_mintDataStream(address,uint256,bytes32,bytes32,uint256)", +"8e273ef4": "buyLicenseForERC20(address)", +"8e27d719": "deposit(string,uint256)", +"8e280dce": "findNextYear(uint256,bytes)", +"8e2832b7": "ethereumToTokens(uint256)", +"8e298549": "migrateListing(bytes32)", +"8e29d149": "claim_block()", +"8e2a37b2": "privateAllocated()", +"8e2a6470": "allocateShares(address,uint256)", +"8e2a8312": "EmjacToken()", +"8e2ab359": "_transferToAddress(address,address,uint256,bytes)", +"8e2ae564": "mintingDone()", +"8e2c6f4d": "initiateVerification(address,bytes,bytes)", +"8e2d0699": "getCompte_32()", +"8e2e0776": "doInitialDistribution(address,address,address)", +"8e2e2077": "setTokensForSaleCount(uint256,bool)", +"8e2f0f46": "ownerSetMarginPremium(uint256)", +"8e303097": "BestWallet(address)", +"8e3047d9": "getBonuses(address)", +"8e3047e0": "getCrossConnectorReturn(address,address,uint256)", +"8e3058f3": "getPostFromId(address,string,uint256)", +"8e3073a6": "getEth(uint256)", +"8e314783": "addTotalPaid(address,uint256,uint256)", +"8e316327": "calculateEggSell(uint256)", +"8e3177e1": "purchaseIpfsAfterTitle(bytes32)", +"8e32217a": "calculateTokensQtyByEther(uint256)", +"8e327dd3": "setInvestor(address,uint256)", +"8e32e421": "expiredTime()", +"8e3390b4": "contributeMethodABI()", +"8e339b66": "controllerApprove(address,address,uint256)", +"8e343516": "balanceWinPoolToWinSystem()", +"8e351097": "MintedTokenCappedCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", +"8e3571c0": "testNewCounterValueAfterAIncreaseAndADecrease()", +"8e357b6f": "AirTrafficControllerROS(address,int256,address)", +"8e36a9f1": "Neurus()", +"8e370b3d": "UnsoldTokensReturned(address,uint256)", +"8e372dcd": "refineCoke(uint256)", +"8e37adec": "setAddressArr(address[])", +"8e37c1e0": "collectorWeiCollected()", +"8e391cb2": "ProxyERC223()", +"8e3957d9": "RandomNumber()", +"8e3ab913": "transferToMany(address,address[],uint256[],uint256,uint256,address)", +"8e3af93f": "finalizeMint(uint256)", +"8e3b4525": "setExchangeLimit(uint256)", +"8e3bd6fa": "SetTradeable(bool)", +"8e3d4e5e": "Fibonacci(bytes)", +"8e3d5303": "addRegistrar(address,string)", +"8e3d63e3": "multiSendEth(uint256,address[])", +"8e3d7ae7": "drawFortune()", +"8e3dbf53": "getSalesPartnerAmount(address)", +"8e3dcc60": "sell_spice_melange(uint256)", +"8e3e1d86": "fisherYates(uint256)", +"8e3ed7d7": "sendEthers(address,uint256)", +"8e406072": "getKingdomCount()", +"8e414295": "Elixer()", +"8e416b9b": "randomFight2DeathContract()", +"8e417b30": "GTokenContract(uint256,string,string)", +"8e424f16": "onlyOwnerSetCompanyWallet(address)", +"8e434b82": "DADCoin()", +"8e438b70": "ConpayToken()", +"8e43e70e": "ParentKidsLinkToken(uint256,string,string)", +"8e44e74e": "DEFROST_MONTHLY_PERCENT()", +"8e452fc0": "findAvailableGame(address)", +"8e4553a4": "script(address,bytes)", +"8e455a1d": "_createVote(uint256,uint256,uint256)", +"8e468a88": "donationMap(address)", +"8e46afa9": "getDefaultGracePeriod()", +"8e46b68b": "keysRec(uint256,uint256)", +"8e46f716": "CoinX(uint256,string,string)", +"8e46fbb2": "testBitsXorFailIndexOOB()", +"8e4748cf": "MintingERC20(uint256,uint256,string,uint8,string,bool,bool)", +"8e47b87b": "FundsReceived(address,uint256)", +"8e47dd03": "currentProfitPct()", +"8e48474a": "chooseWinner(string,string)", +"8e496832": "DataContract()", +"8e497470": "displayNick(address)", +"8e499bcf": "numTokens()", +"8e49a2c2": "turnmigrate()", +"8e49a41f": "getVestingFromContract(address,address)", +"8e49cf5c": "soldSoulBecause(address)", +"8e49dd3f": "Failed(uint256,address,uint256,address,address,uint256,address,uint256,uint256)", +"8e49ff47": "AntzToken()", +"8e4a23d6": "Unauthorized(address)", +"8e4a943d": "IcoResumed()", +"8e4ab74b": "BANKROLL()", +"8e4adf4e": "tokenUpgrader()", +"8e4afa51": "checkTransferToICAP(bytes32,uint256)", +"8e4b0190": "deleteWorkerAdress(address)", +"8e4bf820": "settleBet()", +"8e4c64c0": "grantsController()", +"8e4cb2a9": "balances_after_buy(address)", +"8e4d0a83": "setLockupList(address,address,uint256)", +"8e4d5053": "getcontractBalance()", +"8e4e0f03": "teamAndExpertsTokens()", +"8e4f9606": "updateReputationScore(address,uint256)", +"8e4fa788": "accountHasCurrentVote(address)", +"8e5051f0": "weiToOwner(address,address,uint256)", +"8e50a65d": "prepareDividends()", +"8e514018": "getRandomPrice()", +"8e5152d6": "addToAngelExperienceLevel(uint64,uint256)", +"8e51b069": "ownerAddMarket(address,address,address)", +"8e51d624": "failsafe_addition(uint256,uint256)", +"8e52019d": "ECASH()", +"8e52cb51": "getRecordKey(bytes,bytes,bytes)", +"8e535ade": "lrcInitialBalance()", +"8e53d5e4": "cumulative(uint256)", +"8e53f4fb": "preicoSale()", +"8e543a12": "getLoanAmount(address,address)", +"8e550bd1": "lastNewInterest()", +"8e57d397": "modifyHorseyFeedingCounter(uint256,uint8)", +"8e588306": "getAutonomousSoftwareOrgInfo()", +"8e5919b6": "setEdoRate(uint256)", +"8e592caf": "KittyKendoCore()", +"8e599d50": "joinFunction()", +"8e59a15b": "checkMinGoal()", +"8e5b2899": "check(bytes20,uint24,uint32,bytes32[],uint16)", +"8e5c2e8a": "LogContractOwnershipChangeCompleted(address)", +"8e5d97a2": "releasePendingTransfer(uint256)", +"8e5e91ac": "executeStakeholderTransaction(uint256)", +"8e5ee9ec": "currencyToToken(bytes32[8],bytes)", +"8e5ef4ea": "DataShieldCoin(uint256,string,string)", +"8e5ef8fe": "ChivesToken()", +"8e5fd5fa": "validateReservation(address,uint8)", +"8e604b1d": "queryItems(bytes32,uint256,bool[6],bool)", +"8e611cee": "deductFromUnminted(uint256)", +"8e62bbd9": "DigitalCoin()", +"8e62c982": "initialARXSupply()", +"8e634029": "communityContract()", +"8e637a33": "authorizePayment(string,address,uint256,uint256)", +"8e63d7e1": "getTopLevel(uint256,uint256)", +"8e63ef75": "icoEtherReceivedPrivateSale()", +"8e641963": "_mintCards(uint32)", +"8e64a720": "PlendsToken()", +"8e65f7e4": "logAllTransactions(address)", +"8e6635a5": "toUint128Throw()", +"8e66ca5f": "setFirstBonusLimitPercent(uint256)", +"8e66da2f": "cancelBet(uint8,uint256)", +"8e66fea2": "TTCTokenERC20(uint256,string,string)", +"8e68f000": "oneTokenInWei(uint256,uint256)", +"8e690315": "AttributaOwners()", +"8e69367e": "RandomizedPriceFeedApi()", +"8e694807": "PHOENIX_CORSAIR_MAX_CARGO()", +"8e6954de": "totalFci()", +"8e69ceec": "dispatchTokens(address,uint256)", +"8e69e204": "getPeriodsWithdrawal(address,bytes32)", +"8e69eeb9": "setDefaultVoteRules(uint256[5])", +"8e6a1b24": "PIXToken(address)", +"8e6a2afa": "MAX_PERIOD_COUNT()", +"8e6b5462": "setOrCacheDesignatedReportNoShowBond(uint256)", +"8e6b551c": "sumHardCapPublicSale()", +"8e6b77a2": "interestArray()", +"8e6b851d": "valueGet(string)", +"8e6bee97": "pay(uint256,bytes32)", +"8e6ce1b1": "getActiveSellDetails(bytes32)", +"8e6d2599": "_activeness2level(uint256)", +"8e6d531d": "setSubPromoter(address)", +"8e6d7db8": "updateInstitutionAsset(string,string,address,address)", +"8e6ddab1": "createMonster(uint256,uint256,uint256,uint256,uint256,bytes)", +"8e6df32f": "exerciseOptions(address,uint256,uint256,uint256,bool)", +"8e6f2353": "ln(int256)", +"8e6f843f": "EarlyExchangeRateChanged(uint256)", +"8e6fdd31": "raisedEth()", +"8e6ff99a": "addVineyard(bytes32,uint16,uint24,uint32,uint16)", +"8e70fdbc": "setIsNotAdmin(address,bool)", +"8e71decb": "findWinner()", +"8e71f4fd": "_hasAllSigs(address,address)", +"8e728fec": "configTimeInit()", +"8e7296b1": "MOACSupply()", +"8e72a926": "bankRollBeneficiary()", +"8e72ca91": "proxyIncreaseWithdrawalChunk()", +"8e735547": "getUserByEmailVerify(bytes32)", +"8e739461": "getBalance(bytes32)", +"8e73d42c": "lunyrMultisig()", +"8e7418cb": "isSecondRound()", +"8e744f54": "tranferMinterOwnership(address,address)", +"8e74a528": "avarageBlockTime()", +"8e752b40": "startTeamTrade()", +"8e7547cb": "setWithdrawWallet(address,address)", +"8e755125": "testIntFixedArray(int256[3])", +"8e7558cd": "closeStage(uint256)", +"8e75dd47": "companyCount()", +"8e75f23c": "get_collateral_bix_amount()", +"8e760afe": "verify(bytes)", +"8e76581e": "getManifestId(address,bytes32,uint256)", +"8e767411": "setWhaleIncreaseLimit(uint256)", +"8e768288": "isSane(address)", +"8e76e3ba": "BillofLaden()", +"8e77304c": "YOUToken()", +"8e77afc5": "BSCore()", +"8e77d147": "transactionfeeAmount()", +"8e77fe2f": "blacklistAddresses(address)", +"8e77ff1f": "setMigrateTokenContract(address)", +"8e78eff6": "get_add(uint256)", +"8e78f0f2": "remOperator(address)", +"8e7952c6": "davToken()", +"8e79dc91": "set_participant_arbits(address,uint256)", +"8e7a1697": "setDepot(uint256,uint256)", +"8e7a9687": "check_vote(string)", +"8e7b36be": "payFor(address)", +"8e7b90e4": "setTgeAddress(address)", +"8e7c9e50": "logFloor(int256,uint8)", +"8e7cb6e1": "getIndex(uint256)", +"8e7cd5a7": "distributeExternal(uint256,uint256,uint256,uint256)", +"8e7d0f44": "publicKeyConsensus()", +"8e7e060f": "buyCards(uint8)", +"8e7e34d7": "fromHex(string)", +"8e7e879f": "migrateAll(uint256[])", +"8e7e99b8": "TotalSupply(uint256,uint256,address)", +"8e7e9a3c": "calculatePrizes()", +"8e7ea5b2": "getWinner()", +"8e7fd292": "trySetSubnodeOwner(bytes32,address)", +"8e7fdc6c": "LogBetProperties(uint256)", +"8e7fffe8": "individualRoundCap()", +"8e80ade9": "hodlTokens(address,uint256,uint256)", +"8e818aa1": "acceptAdminWithdraw()", +"8e81bc9c": "addWhitelistedBurn(address,address)", +"8e81c579": "poolEthSold()", +"8e81c64d": "burnTokens(uint256,uint256)", +"8e821b24": "persians()", +"8e84844e": "changeWeight(address,address,uint256,uint256)", +"8e84d413": "isFree(uint256[],uint256)", +"8e854ed8": "getResult(uint256,uint8)", +"8e8556b4": "privateSaleEtherRaised()", +"8e86077b": "foundingTeamSupply()", +"8e8622f9": "_getTAOIdByName(string)", +"8e869843": "sellfloaksAgainstEther(uint256)", +"8e86d030": "getMessageRequestHash(address,uint256)", +"8e8758d8": "tokenAllowance(address,address,address)", +"8e87f57c": "setCompare(bytes2)", +"8e87fcbf": "transformFrom(address,uint256,uint256)", +"8e885cbb": "LARGE_PURCHASE_BONUS()", +"8e894a6f": "getTileIDByOwner(uint16,address)", +"8e89ad00": "setMaxDailyPerUser(uint256)", +"8e89f6e2": "Crowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"8e8a3983": "paySomeone(address,address)", +"8e8a4a20": "userTenantHashExists(bytes32)", +"8e8afc34": "setSlaveServer(uint32)", +"8e8b34bc": "createNewSecurityDeposit(string,string,uint256)", +"8e8bc816": "TokenBonus(address,address,uint256)", +"8e8cf4a8": "getThisBalance()", +"8e8df687": "processedTokens()", +"8e8e4675": "gur(address,address)", +"8e8e75fb": "addExternalController(address)", +"8e8f1e84": "setPublicSaleParams(uint256,uint256,uint256,uint256)", +"8e8f39d3": "getBlockNumberM1()", +"8e8fe845": "IsDistribRuSTMingFalg_()", +"8e9030f4": "maximumNonWhitelistAmount()", +"8e90b71a": "changeStatus(bytes1,bytes32)", +"8e90ccbe": "Governance(address[],uint256,uint256)", +"8e90e1e9": "_createCutie(uint40,uint40,uint16,uint256,address,uint40)", +"8e9185cb": "NON_TRANSFERABLE_TIME()", +"8e9206a0": "EOM()", +"8e928076": "setMaxGas(uint256)", +"8e92aea3": "_fetch(uint256)", +"8e92ee66": "redeemShardsIntoPending()", +"8e93907b": "FamilyResourceControl(uint256,uint256,uint256,uint256,uint256[])", +"8e93c883": "setMarketingTokensWallet(address)", +"8e940bb7": "test_testableContributionCaseExpectFailure()", +"8e943c8b": "checkParticipants()", +"8e94a5f3": "sellerRefund(uint256)", +"8e955978": "pushProposal(address)", +"8e95b0cd": "getSponsorshipsTotalRefunded(address,uint256)", +"8e95b28b": "delegateUrl()", +"8e964de9": "COPPER_AMOUNT_XPER()", +"8e9674c8": "WEMACOIN()", +"8e96eb3e": "coePerEthOffset()", +"8e979bad": "setwinPercent(uint256)", +"8e984ccd": "joinGameAndBattle(uint256,uint256)", +"8e98c6b9": "getLeaderboardPlayers()", +"8e98cee1": "update_session(uint32,uint64,uint64)", +"8e9a5890": "danGold()", +"8e9a7159": "LZLPrivate()", +"8e9aed2e": "HACHIROKU()", +"8e9b7ab8": "Partners(address)", +"8e9bf09c": "issueTokenToAddress(address,uint256)", +"8e9c3ce2": "assetOfBitmark(uint256)", +"8e9ccd04": "computeIndexId(address,bytes)", +"8e9e5c37": "requiringAuthorization()", +"8e9e697d": "reset(uint256,uint256,uint256,uint256,string)", +"8e9e8b14": "marketingPartnerSupply()", +"8e9f2738": "_transferAllArgs(address,address,uint256)", +"8e9f9072": "signedMessageECRECOVER(bytes32,bytes32,bytes32,uint8)", +"8ea04cb3": "getUpgradability(uint256,address,address,string)", +"8ea06c68": "BLMToken(uint256,uint256)", +"8ea0926a": "addBaseStats(uint256,uint8[8])", +"8ea0b540": "getProjectInformation(uint256)", +"8ea0d898": "DestroyedBy(address)", +"8ea1ee86": "DapCarToken()", +"8ea1ff21": "OwnedExample(address)", +"8ea25644": "XYY()", +"8ea390c1": "getOwedDividends(address)", +"8ea44bab": "setProviderAdmin(uint256,address)", +"8ea51696": "JRT()", +"8ea5220f": "devWallet()", +"8ea55bd7": "_pushContributor(address,bytes32)", +"8ea56e57": "ADV()", +"8ea64376": "opsAddress()", +"8ea67eb0": "ETCharPresale(address)", +"8ea69e37": "TestToken(uint256)", +"8ea6dd82": "BotAdded(address)", +"8ea7296b": "deleteChild(address)", +"8ea73a7c": "setDonationReward(uint256)", +"8ea74d95": "transferDaico(address)", +"8ea77300": "RELEASE_START()", +"8ea822d8": "createThings(bytes32[],uint16[],bytes32[],uint16[],uint88)", +"8ea83031": "swapContract()", +"8ea83681": "mintTreasuryTokens(address,uint256)", +"8ea8dc9d": "APP_MANAGER_ROLE()", +"8ea8e149": "removeService(address,address)", +"8ea8f83c": "activate(uint256,uint256)", +"8ea91bf3": "createVestedToken(address,uint256,uint256,uint256,uint256)", +"8ea95cbc": "lastDepositorAmount()", +"8ea98117": "setCoordinator(address)", +"8ea98db4": "Mmchain(uint256,string,string)", +"8eaa1e29": "getContentByData(address,uint256,string,string)", +"8eaa5d1c": "amount50kUsdInCents()", +"8eaa6ac0": "get(bytes32)", +"8eaa8d4f": "RefundedInvestor(address,uint256,uint256)", +"8eaa9c91": "Client()", +"8eaaeecf": "getUserCapInTokenWei(address,address)", +"8eac494c": "tierWhitelisted(uint256)", +"8eadb561": "IntelliToken()", +"8eaeb531": "setAccountA(address)", +"8eaf1dab": "PRCT100_R2()", +"8eafe0f0": "getCustomerRating(string)", +"8eb04f02": "setRefundManagerContract(address)", +"8eb066ce": "init(address[5],uint256[6],uint8,bytes32,bytes32)", +"8eb0e73e": "bonusPctSteps(uint256)", +"8eb179ad": "maxHardCaphardcap()", +"8eb206d1": "deletePage(bytes32,bytes32)", +"8eb36e3d": "initData()", +"8eb3e0e3": "socERC20(uint256,string,string)", +"8eb45cbf": "frozenProfitDate()", +"8eb4e0ad": "batchRelay(bytes16[],address[],address[],uint256[],uint16[],uint128[],uint8[],bytes32[],bytes32[],uint8[])", +"8eb547d4": "squareOfSums(uint256,uint256)", +"8eb5a7ac": "changePermission(address,bool)", +"8eb5f650": "ETIN(uint256,string,string)", +"8eb6418e": "LoritaBi()", +"8eb64b3d": "multi(address[],uint256)", +"8eb64b61": "MAX_NON_SALE_SUPPLY()", +"8eb689f7": "giveFor(address)", +"8eb6d683": "coinAllowanceOf(address,address)", +"8eb6ffaa": "withdrawBloc(uint256)", +"8eb717fc": "increaseCap()", +"8eb76eed": "emitUserRatingGiven(address,address,uint256)", +"8eb7ffe8": "assignInBatches(address[],uint256[])", +"8eb831fe": "ChangeOperator(address)", +"8eb857f8": "getData_25()", +"8eb88c1b": "EvergreenHealthToken()", +"8eb89a61": "getPointsBalance()", +"8eb976ca": "assertEq17(bytes17,bytes17)", +"8eb98150": "NOT_ENDED_FINE()", +"8eba2966": "RESERVE_PORTION_MULTIPLIER()", +"8ebaae08": "createListing(uint256,uint256,uint256,address)", +"8ebac11b": "getHash(address,uint256,uint256,uint256)", +"8ebb2ce7": "setProfitContainerAddress(address)", +"8ebb5aee": "calculateTokenBuy(uint256,uint256)", +"8ebc266d": "getCurrentUSDCentToWeiRate()", +"8ebe555b": "allocateShares(uint256,uint256)", +"8ebed616": "CRF()", +"8ec3167f": "calculateGoalsFromAttributeTotals(uint256,uint256,uint256[],uint256[],uint256)", +"8ec3272d": "addPicture(string,bytes32,string,address)", +"8ec48bcb": "BitCharity()", +"8ec49939": "switchOFFfreeForAll()", +"8ec4dc95": "getPerson()", +"8ec521a8": "setupStakeholders(address[],uint256[],uint256[],bool[],uint256[],uint256[],uint256[])", +"8ec5a309": "testHash(string)", +"8ec5ff41": "isUid(string)", +"8ec63da9": "checkIsOnlyProxy(bytes32)", +"8ec6677d": "registerUsername(string,address)", +"8ec84812": "updateProfit()", +"8ec86497": "clearname()", +"8ec89e4f": "_isActive()", +"8ec8fcad": "ADV(uint256,string,string)", +"8ec9925e": "jackpotToken()", +"8ec9a5de": "getLeaf(bytes32,uint256)", +"8ecaa140": "_refundHighestBidder(uint256)", +"8ecbc4e9": "setNewBRXPay(address)", +"8ecc0643": "BuyAd(address,uint256,string,string,string,uint256,uint8,address)", +"8ecc0950": "returnToOwner()", +"8ecc107f": "buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"8ecc4353": "adddayruns(address,uint256)", +"8eccf58e": "getTokensCountPerEther()", +"8ecd2fe8": "testMul256By256()", +"8ece19f6": "setTokenLock()", +"8ece39cd": "startOraclize(uint256)", +"8ece85a4": "ETpay(uint256,string,string)", +"8ecebf34": "MorpheusToken()", +"8ecf0d0b": "getCreated()", +"8ecfc412": "workForce()", +"8ed06b62": "getShipPrice(uint256,uint256)", +"8ed08711": "saleMinimumWei()", +"8ed09bc9": "registerVoter(bytes32,address)", +"8ed0ac8b": "closeTrancheAddition()", +"8ed1858e": "distributeELTCSmall(address[])", +"8ed20fa0": "tokenWeiToSale()", +"8ed2395f": "ZCNYToken(address)", +"8ed33545": "sub_presale_arbits_sold(address,uint256)", +"8ed34751": "performHealthCheck(uint8)", +"8ed399ca": "teamWallet_2()", +"8ed3fa7c": "codexCoin()", +"8ed5047c": "updateCokeTotal(uint256,bool,uint16)", +"8ed5f2ca": "newTestableCampaign(string,uint256,uint256,address)", +"8ed67a44": "setPrice(uint16)", +"8ed6910f": "limitSell(uint256,uint256)", +"8ed7c3d3": "sendTokensManager(address,uint256)", +"8ed7ca93": "finishExam()", +"8ed8067e": "FundContract()", +"8ed882c5": "designatedReporterWasCorrect()", +"8ed91318": "nextAssetId()", +"8ed9be36": "temp(uint256,uint256,bytes32,bytes32)", +"8ed9fd75": "ICO_Supply()", +"8edb726d": "modifyEndFundingTime(uint256)", +"8edbf436": "getPriceInfo(address)", +"8edc4f8f": "isValidCap(uint256,uint256)", +"8edc707b": "adoptionOffers(bytes5)", +"8edcf21d": "getCurrentYearGameMiningRemainToken(uint16)", +"8edd6eb6": "getFund()", +"8eddc306": "__exchangerCallback(address,address,uint256)", +"8eddc804": "notifySale(uint256,uint256)", +"8eddf665": "onInvest()", +"8ede1817": "getReturnTime(uint256)", +"8ede3a34": "KeplerToken()", +"8ede74c1": "changeRage(uint256)", +"8ede94b4": "setLineUpEnable_miner(address,uint256)", +"8edeb15d": "donation()", +"8edec689": "wd()", +"8edfaef8": "getSetupParameters()", +"8edff3db": "getTerminal(uint256)", +"8ee030bd": "FaceterToken(address,address)", +"8ee070d9": "MYEMPEROR()", +"8ee0942b": "setSignatureROFR(bytes)", +"8ee0ffe8": "sendStakingContract()", +"8ee1409e": "TitanToken()", +"8ee17e0a": "MarvinCoin()", +"8ee21b8e": "get_default_keys()", +"8ee365fa": "removeAddressesFromAdmins(address[])", +"8ee36f05": "isVoted(address,uint256)", +"8ee3f472": "BoutsCrowdsale(uint256,uint256,uint256,address,address,address)", +"8ee3f72f": "PinCode()", +"8ee4d44b": "addAddressToOperators(address)", +"8ee4fd8a": "claimWithSignature(bytes)", +"8ee553cc": "getCroById(uint256)", +"8ee5a8b3": "UpgradeProposals(uint256)", +"8ee6540c": "seventeen()", +"8ee6f301": "readvalidrollsXteam(uint16)", +"8ee78046": "draw(address,uint8[])", +"8ee833cc": "isValidTenant(string,address,uint256)", +"8ee8a5c4": "Charity(string)", +"8ee93cf3": "post(string)", +"8ee97ff4": "VirtualRewardToken()", +"8eeb203e": "exchangeWeight()", +"8eeb33ff": "crowdSaleAddr()", +"8eeb3b0e": "KJCPerEthereum()", +"8eeb5073": "_bundle(address,uint256,uint256[])", +"8eeb5c97": "cancelDo(bytes32)", +"8eeb7d11": "unlockAllocationAddress(address)", +"8eeb8e5a": "MUC()", +"8eec5d70": "getPoolCount()", +"8eec6f7b": "lockETH(uint256)", +"8eec99c8": "setNewAdmin(address)", +"8eecddcf": "betBlockNumberOf(address)", +"8eecf64d": "createContractWithMeta(address,uint64,bytes,string)", +"8eee1cd6": "buyerExceededApprovedAmount(uint256,address)", +"8eef059e": "_lowerDown(uint256,address)", +"8ef0f09a": "createPromoPow(address,string,uint256,uint256,uint256)", +"8ef1a6b6": "makeProfit(uint256)", +"8ef1e886": "RESERVE_PERCENT_EVE()", +"8ef22afe": "getCostToCancel()", +"8ef25a7a": "KeplerTokenExtraSale(uint256,address,address)", +"8ef26a71": "coinSentToEther()", +"8ef28249": "totalGuesses()", +"8ef2826e": "HODLWallet(address[],uint256[])", +"8ef292fc": "BTM()", +"8ef326ea": "getCubeCount()", +"8ef44301": "tokenRecoveryFromTrade(address,address,address,uint256)", +"8ef47296": "StorageController(address,address,address,address)", +"8ef483eb": "getMyWager()", +"8ef490ea": "fullname()", +"8ef4c807": "lockedBalanceOf(address,uint256)", +"8ef53edf": "InitAssignOK()", +"8ef5ae21": "setupInfo(string,string,string)", +"8ef5ce28": "test1_addingFirst()", +"8ef5eaf0": "drop(address[])", +"8ef6e7fe": "build(string)", +"8ef6ed53": "_getRandom(uint256,uint256)", +"8ef72d15": "backEthRatio()", +"8ef79e91": "setTokenBaseURI(string)", +"8ef7c649": "getTicketPrice(uint8)", +"8ef8125e": "frontRunnerSetTimestamp()", +"8ef82010": "orderExecution(bytes32,uint256)", +"8ef85e04": "secondWeekTokenPrice()", +"8ef87843": "randomSkinAppearance(uint256,uint128)", +"8ef8f241": "getEmployerInfo()", +"8ef9c904": "NewAmbassador(address,address)", +"8efa00e2": "getPRETDETokenExchangeRate(uint256)", +"8efa23d1": "RELEASE_WALLET()", +"8efa3e21": "setIsMinter(address,address,bool)", +"8efbd512": "getAccountNumber(address)", +"8efc777f": "isBeta(bytes)", +"8efd4c75": "QUARTERLY_RELEASE()", +"8efd5f92": "divIntervalDays()", +"8efe6dc4": "changeMonthlyWithdrawLimit(uint256)", +"8efe7801": "showWinnersSort()", +"8efe8c1c": "EPTToken(address,address)", +"8eff3c29": "getRecords()", +"8effda0d": "IndorseSaleContract()", +"8f003a2d": "StarSportsToken()", +"8f00c0af": "has_contract_ended()", +"8f00cbfa": "winnerIndex()", +"8f00f49b": "totalAssetTokens()", +"8f0165e1": "min_pay_wei()", +"8f01932a": "mntpToMigrateTotal()", +"8f01e1e2": "getactiveleveltime(uint256)", +"8f02bb5b": "setTransferFee(uint256)", +"8f03850b": "numContributors()", +"8f038a5a": "initializeEthReceived()", +"8f039a10": "changelp8(address)", +"8f03f5c3": "firstUnlocked()", +"8f0427b1": "sellPosition(uint256)", +"8f049de5": "endBetRed()", +"8f054bf3": "referralList(address)", +"8f0563b9": "substring(string,int256)", +"8f061ef5": "Token(string,string,uint256,uint256)", +"8f06492d": "callOnRemoval()", +"8f0816bc": "PERKToken()", +"8f08288a": "clearBets()", +"8f08a60a": "transfer2(uint256,address[],uint256[],bytes,bytes,bytes,bytes)", +"8f08d44d": "burnAsset(uint256)", +"8f08e369": "withdrawApplication(address)", +"8f094efb": "getMineableSupply()", +"8f0a4c1b": "startPreSales()", +"8f0a6ecb": "returnBountyTokens(address,uint256)", +"8f0bc152": "claim(address,uint256,bytes)", +"8f0c724c": "setOperationsCallGas(uint256)", +"8f0d16da": "emitIssuersUpdated(address,bool)", +"8f0d3b8b": "_buy(uint256,uint256)", +"8f0d67ef": "activationTime(uint256)", +"8f0ec6b3": "ZanCoin()", +"8f10cad0": "StreampayToken()", +"8f10fd45": "getBuyCount()", +"8f112370": "addToAffiliate(address,uint256)", +"8f11e5f9": "checkWithdrawValue(uint256)", +"8f1224ce": "fixInvestment(address,uint256,uint256)", +"8f12355d": "assertEq7(bytes7,bytes7,bytes32)", +"8f1327c0": "getRound(uint256)", +"8f134025": "rewardSent(uint256)", +"8f13fd29": "setPriceValue(bytes32,uint256)", +"8f140568": "isServiceAddress()", +"8f142842": "getByAlias(string)", +"8f142907": "stables()", +"8f14b76b": "sendReferrer()", +"8f14d8a3": "reclaimContractTokens()", +"8f15024f": "ticketsSold()", +"8f152d0e": "vestingConfigured()", +"8f158e76": "remainingPublicSaleCap()", +"8f163497": "AgaCoin()", +"8f16eb1a": "setI_R1(uint256)", +"8f188b40": "migrateInvestor(address,uint256,uint256,uint256)", +"8f19ff45": "_handleTokensReceived(uint256)", +"8f1a422c": "minterWallet()", +"8f1a927a": "numTicksSinceAuctionStart(uint256)", +"8f1af992": "claimTwitterId(uint256,address,uint8,bytes32,bytes32)", +"8f1b0b02": "bulkTokenMint(address[],uint256)", +"8f1c204c": "test_fiveAssertFalse()", +"8f1cc85e": "SAGAcrowdSale(address)", +"8f1cc94e": "HashTypeAdded(uint8)", +"8f1d5f7e": "getLedgerNameHash()", +"8f1d8f41": "ethInvestment(address,uint256,uint256,uint256,uint256)", +"8f1d90b1": "tokenBearer()", +"8f1df4f7": "setPrices(uint256,uint256,uint256,uint8,uint256,uint256,uint256)", +"8f1eda37": "wmul(uint128,uint128)", +"8f1f761a": "Rewards_Supply()", +"8f1fc530": "startSplit()", +"8f1fc6bb": "testRemoveProductFromCart()", +"8f1fdbb9": "offerEth(uint256)", +"8f212eb7": "BITSDTokenInitialized(address)", +"8f217d6b": "lastChar(string)", +"8f22964d": "NegativeWhuffiesSent(address,address,uint256,string)", +"8f22d128": "testdigiToken()", +"8f24f2a3": "takeBuyOrder(address,uint256,uint256,uint256,address)", +"8f25159c": "getDayDepositLimit(uint256)", +"8f259117": "numcallsinternal()", +"8f25eec1": "BetWon(address,uint256,uint256)", +"8f26a5ab": "setSaleAgent2(address)", +"8f272c0b": "minor_partner_address()", +"8f2757d8": "Bitshopandearn()", +"8f282b87": "getSold()", +"8f283970": "changeAdmin(address)", +"8f287be5": "PitEur(address)", +"8f288526": "TokensPurchased(address,uint256)", +"8f288644": "getHighestBid(uint256)", +"8f2900d5": "timeLocks(uint256)", +"8f291158": "listBBO()", +"8f296759": "UTILITY_ROLE()", +"8f29f09a": "fetchPaidOrdersForMerchant(address)", +"8f2a3093": "freeBeerOnMe(string)", +"8f2a6d3e": "YOOBAToken(address,address,address,address,address)", +"8f2abe9a": "Voting(uint8,address,uint256)", +"8f2adbee": "tileBonuses(uint256,uint256,uint256)", +"8f2bab07": "getChainLength()", +"8f2be8e0": "MauiWowieToken()", +"8f2c2ab7": "checkAndCloseDeposit(uint256,bool)", +"8f2c3af8": "lastBlock_v10Hash_uint256()", +"8f2c44a2": "UnicornMilker()", +"8f2e695c": "ICO_state()", +"8f2e8d4a": "createTrack()", +"8f2e9ee7": "theDay(uint256)", +"8f2eabe1": "isValidatorFinalized(address)", +"8f2ec012": "dayToBlockNumber(uint256)", +"8f2ee2df": "mainPot()", +"8f2ef6b7": "CMGF()", +"8f303df9": "priceExpired()", +"8f30435d": "getCompetitionValues(string,uint8)", +"8f32106e": "CreateALLY(address,uint256)", +"8f32cf0c": "team_address()", +"8f32d59b": "isOwner()", +"8f33221e": "addContract(address,uint256,uint256)", +"8f33c285": "getAyantDroitEconomique_Compte_8()", +"8f33df77": "countAllVotes(uint256)", +"8f34296b": "Applied()", +"8f348cfe": "InsertProject(string,string,address,address,string,string,address)", +"8f34ac6e": "setCoOwner(address)", +"8f350624": "contributionOpen()", +"8f356f97": "lottoHighestNumber()", +"8f35a75e": "getInvestor(address)", +"8f36039c": "holdContract()", +"8f367001": "numTokensAbleToPurchase()", +"8f368359": "getTimeUntilInterestIncrease(bytes32)", +"8f3684bf": "returnTotalDividend()", +"8f36d03e": "_finishSpin(address)", +"8f36f8f1": "redeemStake(address,address,uint256,uint8,bytes32,bytes32)", +"8f37a0f9": "getTo(uint256)", +"8f382a00": "ETHEAL_UNIT()", +"8f38a896": "BRONZE_AMOUNT_XPER()", +"8f38bf34": "updatePrices(uint256,uint256[],uint16,uint256[],uint256[])", +"8f38d8cc": "S(string)", +"8f38f309": "buyXid(uint256,uint256)", +"8f3956a4": "ChangeUpgradeMaster(address)", +"8f395eb6": "addIntComparison(bytes32,int32,bytes1)", +"8f398180": "isUnknown(address)", +"8f3984b5": "setRole(address,string,bool)", +"8f3b6b84": "centsPerToken()", +"8f3b8c3a": "setTokennCrowdsale(address,uint256)", +"8f3bab85": "readFromCart(uint256)", +"8f3bed06": "pickUniquePacks(uint256[])", +"8f3de282": "onSealed(address,address,uint256)", +"8f3e568a": "findOutInterestByClientCategory(address,uint256,uint256)", +"8f3e8747": "getGasForMcrData()", +"8f3f50fc": "startICOTimestamp()", +"8f40104c": "init(address,uint256[],uint256,uint256,uint256,uint8,uint256,bool)", +"8f409b85": "Coin(uint256,string,uint8,string)", +"8f41e442": "breakTie(uint256)", +"8f420866": "DEFAULT_SEND_GAS()", +"8f426437": "getTankOwner(uint32)", +"8f42a864": "TitaToken()", +"8f43166b": "getGivenCount()", +"8f44097a": "TokenRDC(address,address,address)", +"8f449a05": "subscribe()", +"8f456125": "setCrowdSaleAddress(address)", +"8f4613d5": "left10(uint256)", +"8f4646b7": "transferPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"8f46b586": "withdraw_team_fund(address,uint256)", +"8f4708bd": "mintingBountyFinish()", +"8f477c55": "updateLink(address,bytes)", +"8f4783f1": "_generateRealmSale(uint256,uint256)", +"8f47dd19": "bulkInit(address[],address[],uint256[])", +"8f484394": "manual_withdraw()", +"8f48c14a": "updateMinCompanyValue(uint256)", +"8f49a264": "provide_eth()", +"8f49ccf4": "reportUsage(uint256,uint256,address)", +"8f49da4b": "distributedToken()", +"8f4a2a51": "defaultWallet(address)", +"8f4b4b98": "messagesSigned(bytes32)", +"8f4ccce8": "startTokenVotes(address[15])", +"8f4ce746": "buyDeferredPresaleTokens(address)", +"8f4d8723": "_CallExecuted(address,bytes32)", +"8f4d874a": "referralTokensAddress()", +"8f4dc0d1": "updateAvailable(uint256,uint256,bool)", +"8f4e4321": "accountOf(uint256)", +"8f4e5158": "increaseFrozenBalances(address,uint256)", +"8f4ed333": "step2()", +"8f4f3c70": "DungeonChallenged(uint256,address,uint256,uint256,uint256,uint256,bool,uint256,uint256,uint256)", +"8f4fb958": "calculateRandomNumberByBlockhash(uint256,address)", +"8f4fde42": "crossForkCount()", +"8f4ffcb1": "receiveApproval(address,uint256,address,bytes)", +"8f50fb06": "getTrapInfo(uint256)", +"8f50fdd6": "walletAddressesSet()", +"8f512c47": "getSponsorships(address,address)", +"8f518475": "NewKoth(uint256,uint256,address,uint256,uint256,uint256)", +"8f52d420": "CryptoStrippers()", +"8f52da60": "technicalWallet()", +"8f535904": "CROWDSALE_REWARD_WALLET()", +"8f541730": "advisor1Sum()", +"8f55a850": "getArtistList()", +"8f56015f": "setRequirement(uint256)", +"8f5665ce": "nthWagerPrizeN()", +"8f571461": "ICOPRICE()", +"8f580996": "enablePurchasing()", +"8f58190e": "setLLV_edit_19(string)", +"8f581a53": "giveRegistration(address)", +"8f5949f9": "isContractActive()", +"8f5a5a39": "verifyPayment(bytes8)", +"8f5ab3ab": "transferdata(address,uint256,bytes)", +"8f5ab947": "getNextDropTime()", +"8f5b0b1c": "timeCheck()", +"8f5bae2e": "anchor(bytes32,uint256)", +"8f5bc587": "TokensForSale()", +"8f5c2eff": "getPurchaseInfo(uint256,uint256,uint256,uint256,uint256,bool)", +"8f5c5d40": "validTranscodingOptions(string)", +"8f5cbe36": "testCreateSale()", +"8f5cf7b9": "vestingStageTime()", +"8f5d23f6": "TOKENS_FOUNDATION()", +"8f5e0b3f": "UserBondByOffset(uint32)", +"8f5e514a": "diff(uint256,uint256)", +"8f5e619b": "publishEtherBox(bytes32,string,uint256)", +"8f5e9ca7": "acceptTOS(address,bool)", +"8f5f20c2": "LMA()", +"8f5f657d": "rateboc()", +"8f5fa4a4": "changeReceiverAddress(address)", +"8f608f4f": "exchangeRateMNY()", +"8f60cf17": "increaseSalesBalance(address,address,uint256)", +"8f6107ef": "MatthewWon(string,address,uint256,uint256)", +"8f612102": "createCarrier()", +"8f617fcd": "icoFinishTimestamp()", +"8f61da35": "getDebtLength()", +"8f620487": "expirationDate()", +"8f62077d": "getPlayerShips(address)", +"8f6218a3": "rollDices()", +"8f6245e1": "parseBool(bytes32)", +"8f627aab": "BlockIntervalCrowdsale(uint256)", +"8f62905f": "mintTokens(int256,uint256,uint256,address)", +"8f62b028": "updateUSeqgret()", +"8f632311": "doMint(address,uint256,bytes)", +"8f632a34": "MeetupToken(uint256,string,uint8,string)", +"8f6348b8": "stopFeeding()", +"8f63534a": "totalAuctionsCount()", +"8f64337d": "getHashedData(uint256,uint256,bytes32,bytes32,uint256)", +"8f652ec7": "_getVerifierInfo(address)", +"8f654175": "auditorAddress()", +"8f6612c9": "distributedAutonomousExchange()", +"8f679b2d": "EtheraffleICO()", +"8f67bd4d": "SBITokenCrowdsale(address,address)", +"8f67f9d7": "ILLIQUID_TOKENS()", +"8f6811a3": "mintTokensFor(address,uint256)", +"8f68b36f": "getMysubscribers()", +"8f68ca70": "setWhiteListContract(address,bool)", +"8f6963df": "initShareRule6()", +"8f699f6c": "calcInvalidKeys(uint256,uint256)", +"8f69fa25": "startLockingPeriod()", +"8f6a3deb": "_activateZoneLand(int32,int32,uint8,uint8)", +"8f6a7286": "refundMultipleUsers(address[])", +"8f6ac8d7": "FinalizableCrowdsale(uint256,uint256,uint256,address)", +"8f6b875a": "OWNER_POOL_COMMISSION()", +"8f6bc659": "ownerWithdrawExcessTokens(uint256,address)", +"8f6caf63": "sendPoint(uint32,uint32,int256,address)", +"8f6ede1f": "mintWithEther(address)", +"8f6f3275": "getLease(uint8,uint256)", +"8f6f6115": "getOraclizePrice()", +"8f6f988c": "setUltimateOutcome(bytes)", +"8f6fa4c2": "ICO_details()", +"8f6fba8c": "FEATURE_TRANSFERS_ON_BEHALF()", +"8f70009d": "id_for_address(address,address)", +"8f701eaa": "addguess()", +"8f702afa": "sellerNumOpenDeals(address)", +"8f70585f": "bid(address,uint256,uint256,uint256)", +"8f70bfa0": "processDeposit()", +"8f70ccf7": "setTrading(bool)", +"8f7140ea": "receivePlayerNameList(uint256,bytes32)", +"8f717e80": "totalCreationCap()", +"8f71b3db": "etherToUSDrate()", +"8f71f3cb": "getBdpPriceStorage(address[16])", +"8f728516": "initNewGame()", +"8f729925": "receivePercent()", +"8f72e065": "StabitCoin(uint256)", +"8f72fc77": "getOrders(uint256,uint256)", +"8f731077": "extractAllowanceRecordLength(address)", +"8f73c5ae": "distributeReward()", +"8f7445e6": "setStageThirdBegin()", +"8f7451ae": "GetStoreInfo()", +"8f750271": "prose()", +"8f75362d": "emergencyWithdrawAdmin()", +"8f75374d": "incrementSupply()", +"8f754a1e": "affectedCount()", +"8f755c7c": "getOptionState(address[3],uint256[3],uint256[2],bool)", +"8f760988": "forceStopCyle()", +"8f76691a": "margin()", +"8f76a1f7": "lastClaimedRound(address)", +"8f76dfc3": "allTokenICO()", +"8f770ad0": "supplyCap()", +"8f77339f": "sendToken(uint256,uint256,uint256,string)", +"8f775839": "settled()", +"8f776ff1": "allowanceBalance()", +"8f778bb9": "setEmployer(string)", +"8f77c2bf": "contractTransferOwnership(address)", +"8f78b34a": "lockAccounts(address[],uint256[])", +"8f790507": "teamEthContract()", +"8f7a1fe0": "static_income(address,uint256)", +"8f7a4738": "censure(uint16,uint32)", +"8f7a844b": "getAdminData()", +"8f7b7bce": "isTeamLockInPeriodOverIfTeamAddress(address)", +"8f7ba0a1": "registerbot()", +"8f7d33cf": "addCashback(string,uint256,address,uint256[],uint256[])", +"8f7d4dad": "getFirstPoints()", +"8f7d79da": "nextRoundMaxDonors()", +"8f7db6ee": "_setProviderSupply(uint256,uint256)", +"8f7dcfa3": "head()", +"8f7fe231": "ValidetherOracle()", +"8f80269d": "getClientSupply(address,uint256)", +"8f807f6b": "enqueue(address)", +"8f80b7bc": "registerTokenInternal(address,string)", +"8f80d339": "roundClaimICOKeys(uint256)", +"8f81ecfc": "removeChild(bytes32,bytes32)", +"8f81fd4a": "changeIcoDiscountPercentages(uint8,uint8,uint8)", +"8f8203c0": "transuser(address,uint256)", +"8f828c9e": "totalSupplyAtInternal(uint256)", +"8f82b8c4": "getWhiteListCount()", +"8f8336b7": "setFeesMaxUptoCoin(uint256)", +"8f835871": "addRealWorldPlayers(uint128[],bool[])", +"8f83719c": "getTreasuryBalance(address,address)", +"8f83743f": "Fricacoin()", +"8f838478": "getInstantiationCount(address)", +"8f842851": "dateManager()", +"8f847076": "removeNFToken(address,uint256)", +"8f84aa09": "ownerAddress()", +"8f850163": "flipsWon()", +"8f855433": "newCreator()", +"8f85f92c": "isPoDEnded()", +"8f860c5f": "createWallet(address,address)", +"8f86f5ea": "finishSale()", +"8f872bb1": "advisorsAndAmbassadorsAddress()", +"8f87932c": "fix_amount(uint256)", +"8f87c84b": "transferOutEth()", +"8f87e387": "updateSspManagerContract(address,string)", +"8f88110d": "updateRecordWalletAddress(string,address)", +"8f88708b": "retrieve(uint256)", +"8f88a00e": "calculateRewardStructures()", +"8f88aed0": "populateFromItemRegistry(uint256[])", +"8f88b792": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"8f8949e6": "setTotalCardCount(uint256)", +"8f8a5832": "reLoadXid(uint256,uint256)", +"8f8b2c9b": "totalEthJackpotRecieved()", +"8f8bbb8c": "ObjectedVote(bytes32,address,uint256)", +"8f8bcae6": "minting(address,address)", +"8f8bd64c": "calculateNetworkTokenBonusPercentage(uint256,uint256,uint256,uint256,uint256)", +"8f8bde82": "MicroDAO()", +"8f8c7c50": "_randomMeme()", +"8f8d322e": "melt(address,uint256)", +"8f8d49ac": "setStore(string,uint256)", +"8f8db737": "buyDirectInMarketplace(uint256)", +"8f8e7419": "sharedStorage()", +"8f8e8f9d": "refundETHToCustomer(address,address,uint256)", +"8f8eabea": "ZNA(uint256)", +"8f8eb474": "burnBid(uint256)", +"8f8f6b52": "freezTwo()", +"8f907195": "rpow(uint256,uint256)", +"8f9087f5": "hashBytes(bytes)", +"8f908cbd": "setCaptainTokenContract(address,address)", +"8f90f2bb": "getNewRabbit(address)", +"8f9139fb": "Pokecoin(uint256,address,address)", +"8f924560": "addEntity(string,uint256,uint256)", +"8f929c4a": "createAccount(bytes16,string)", +"8f92d308": "viewFeaturePetitionFee()", +"8f937574": "OwnerHelper()", +"8f93bffe": "getOrCacheReportingFeeDivisor()", +"8f940f63": "typeId()", +"8f94f6a0": "piTokensForSale()", +"8f9593f4": "winnerFirst(uint256,uint256)", +"8f96a1ea": "addThing(bytes32,bytes32,bytes32,bytes32)", +"8f975a64": "sendERC20(address,address,uint256)", +"8f97ad89": "claimTokensFor(address,address)", +"8f97cff0": "getPersonsCount()", +"8f97d03f": "IbizaERC20Token()", +"8f97e3a0": "requestPayout(uint256)", +"8f984115": "AUEBToken()", +"8f98767e": "fundingMaximumTargetInUsd()", +"8f98ce8f": "transferFeeNumerator()", +"8f98e0e1": "MBToken()", +"8f99d31b": "betLow()", +"8f99ea43": "setDividendDB(address)", +"8f99fdab": "SafeDeduct(uint256,uint256)", +"8f9a42b8": "philadelphiaBets()", +"8f9a57ef": "minSignId()", +"8f9a6da1": "queryOracle(string,string)", +"8f9abae1": "accessControlled()", +"8f9abe52": "isValidSellOrder(address,address)", +"8f9ade5e": "create(address,bytes32,uint256)", +"8f9b7eb7": "updateReleaseAmount()", +"8f9bbf16": "getSecurityTokenData(address)", +"8f9bf95d": "_payCommission(address)", +"8f9d1cba": "zss(address)", +"8f9d390a": "toteLiquidatorTransferComplete()", +"8f9de24b": "uniqueSpinnersActive()", +"8f9df278": "newEntry(int256,bool,uint256,int256,string,bytes32,address,uint256[])", +"8f9e1409": "removeSection(bytes32,bytes32)", +"8f9f5b2f": "getMemoryWrite(uint256,uint256)", +"8f9fa9ec": "chngDL(uint256)", +"8f9fb0e4": "getAssetString(uint256)", +"8fa148f2": "currentRoundStartBlock()", +"8fa17580": "claimEgg(uint256,bytes32,bytes32)", +"8fa1ae05": "batchTransferSingleValue(address[],uint256)", +"8fa32111": "addInvestor(address[])", +"8fa366df": "changePhaseToICOweek3()", +"8fa3a84c": "validateTransaction(address)", +"8fa4c0b1": "tokenPlus(address,address,uint256)", +"8fa54b81": "setUserBattleValue(address,uint256)", +"8fa5614f": "getBylawsProposalVotingDuration()", +"8fa56215": "_createToken(string,string,string,uint256,address,uint256,uint256)", +"8fa566e8": "tokenIdOfUUID(string)", +"8fa5a6e9": "pmtAccount()", +"8fa65488": "startRefundInvestorsBallot()", +"8fa6da99": "Modultrade(address,address,address,address)", +"8fa81bb0": "PrivateSale(address,uint256)", +"8fa8b790": "cancelAuction()", +"8fa906b2": "addFounder(address,uint256)", +"8fa9cc09": "HeritableWalletFactory()", +"8fa9e55c": "signIn(address)", +"8faa6cb7": "partnersLockEnd()", +"8faa77b2": "deployers(uint256)", +"8faab3a7": "BatchAttachAssets(uint256[10])", +"8faad4c4": "createPromoTeam(string,address,uint256)", +"8fab0549": "setInvestorsPercentage(uint256)", +"8fabd326": "mPausedTime()", +"8fac3d3e": "feesGathered()", +"8fad8334": "_timeRemaining()", +"8fad8eec": "EnterRentToken()", +"8fadd08b": "betHigh()", +"8fae065c": "setStartIcoPreICO(uint256)", +"8fae4857": "finaliseChannel()", +"8fae60a5": "agree()", +"8fae8850": "ICOmint(address,uint256)", +"8faef6a5": "getTierForLastMiniting()", +"8faf682d": "payeeWithdrawCapital()", +"8faf850d": "addUser(bytes32)", +"8fafb286": "claimResearchDividends(address,uint256,uint256)", +"8fafebca": "TokensPurchased(address,uint256,uint256)", +"8fb0de08": "getCurrentRoundInfo2()", +"8fb197d1": "getUserDataOnToken(address,uint256)", +"8fb21a4b": "setMinReferrerBonus(uint256)", +"8fb25f82": "sellCells()", +"8fb29d6c": "pastAgreement(uint256)", +"8fb2f8b4": "isCollectTokenStart()", +"8fb2fbe1": "getTokenToEthUpdateOrderHint(uint32,uint128,uint128)", +"8fb48844": "noOfreservations(address)", +"8fb4b573": "start(uint256,uint256)", +"8fb50078": "joinProvider(address)", +"8fb51ccd": "QosinusCoin()", +"8fb5202b": "setFinancialAddress(address)", +"8fb5a482": "getPrices(address[])", +"8fb67f60": "aPurgeMessages()", +"8fb6d997": "updateStorageContract(address)", +"8fb74077": "HoursFromNow(uint256)", +"8fb74ae9": "isBannedUser(address)", +"8fb807c5": "totalAssetSupply()", +"8fb84bb0": "marketBuy(uint256)", +"8fb8f109": "addressToPersonId(address,address)", +"8fb96635": "decreaseBalance(address,uint256,uint256)", +"8fba273c": "m_investmentsByPaymentChannel(address)", +"8fba8d5c": "toHexString(uint256)", +"8fbb3c17": "CROWDSALE_PHASE_2_START()", +"8fbb9b49": "_isProduct(address)", +"8fbc3ecd": "BUFFER()", +"8fbc7eb0": "balanceOfToken(address,address,address)", +"8fbd4fa5": "claimPrizes(uint256,uint256,uint256,uint256)", +"8fbe382c": "totalFoundCoin()", +"8fbea5c9": "totalCommissionOwed()", +"8fbeee23": "sendOutEtherWithGasAmount(uint256)", +"8fc01623": "activatePackage(uint256)", +"8fc1d08b": "transferFromPublicAllocation(address,uint256)", +"8fc202ae": "currentKeyRound()", +"8fc264e0": "allocateTokens(uint256,uint256)", +"8fc3047d": "checkPrice()", +"8fc3c33b": "GenerateFortuneCookie(uint8)", +"8fc469b1": "setPricesDecimals(uint256,uint256)", +"8fc4ea4c": "ownerPetCollection(address,uint256)", +"8fc5668b": "processRequest()", +"8fc5efd4": "c_centsPerTokenFirst()", +"8fc5fd83": "FRPoint()", +"8fc6ad2d": "getParameterValueByTitle(bytes32)", +"8fc6bf7f": "ico3endTime()", +"8fc7a25d": "getEthAmount(uint256)", +"8fc8a134": "DepositBeneficiary(address,uint256)", +"8fc95403": "saleSecondEarlyBirdEndBlock()", +"8fc9bff6": "_claimRewardBlank(address,string)", +"8fca3057": "pastPlayRoundsCount()", +"8fcb4e5b": "transferShares(address,uint256)", +"8fcbeeb7": "getFreeDragon()", +"8fcc9cfb": "setMinDeposit(uint256)", +"8fcd558e": "GetDataRequestLength(uint256)", +"8fce0ee7": "secondLineWrong()", +"8fce6b07": "_addKeeper(address)", +"8fced626": "resolveBet()", +"8fcee83f": "getRoomStatus(uint256)", +"8fcf31e3": "createCardFromName(string)", +"8fd0290f": "YZChain(uint256,string,uint8,string)", +"8fd0b051": "buyTokens(address,uint256,uint256,uint256)", +"8fd0de57": "identityCommitments(uint256)", +"8fd16541": "referrer2Percent()", +"8fd1b1f2": "maxCardUpgradeLevel()", +"8fd21139": "MixMall()", +"8fd23762": "IOSToken()", +"8fd237e1": "setJackpotWinPercent(uint256)", +"8fd28bcf": "testFailAuthorityAuth()", +"8fd3ab80": "migrate()", +"8fd4f899": "setVipRate(uint256)", +"8fd57396": "winAmount5()", +"8fd5a39e": "distributeSMILE(address[],uint256)", +"8fd5d753": "EternalToken(uint256,string,string)", +"8fd5eb06": "_decodeSettle(bytes)", +"8fd611be": "eventManager()", +"8fd65890": "getCurrentAvailableFunds()", +"8fd7124e": "BeginRound()", +"8fd712ae": "PRICE_STAGE_ONE()", +"8fd79669": "setPokemon(uint256,string,address,uint256,uint256)", +"8fd7aab6": "unfreezeAccount(address,uint256)", +"8fd88225": "GetChipList(address)", +"8fd88ed1": "setManagerIncome(address,uint256)", +"8fd8b429": "vanishCoins(uint256)", +"8fd90960": "UpgradeProposalSubmitted(uint256,uint256,address,address,address)", +"8fd9f1b4": "DaoRules()", +"8fda183a": "hasPoolRole(address)", +"8fda356d": "activateContract()", +"8fda5c8e": "creatorsPoolMintQuota()", +"8fdb385b": "Trc(uint256,string,string)", +"8fdb7189": "double()", +"8fdb72f3": "gzeEth()", +"8fdc054f": "purchaseCrates(uint8)", +"8fdc24ba": "left94(uint256)", +"8fdf51d5": "getMyAllAuction(address)", +"8fdf741a": "_batch3_rate()", +"8fdfac6b": "setMAXfinney(uint256)", +"8fe10615": "walletLocked(address)", +"8fe10ae4": "FundsAdded(address,uint256)", +"8fe13b92": "addExchange(bytes32,address)", +"8fe26bf5": "TailsToken(uint256)", +"8fe2b355": "getGameVars()", +"8fe2eb9e": "setSellDividendPercent(uint256,uint256)", +"8fe316fe": "withdrawNotification(uint256)", +"8fe3579f": "addCharacter(string,address,uint256)", +"8fe3ec6d": "setDefendBoostCap(uint256)", +"8fe44adf": "ico4Min()", +"8fe47625": "showMyTokenBalance(address)", +"8fe52aea": "checkList(string,address)", +"8fe58eb9": "Triger()", +"8fe5f77d": "hackTenuous(address)", +"8fe60df1": "calculateCounterReceived(uint256)", +"8fe6677d": "addToWhitelistMultiple(address[])", +"8fe89502": "calculateFNKRate()", +"8fe8a0a6": "abcLottoResolver()", +"8fe8a101": "isKilled()", +"8fe8cb79": "promotionIndexToClaimant(uint256)", +"8fe91976": "activateWithdrawal()", +"8fe92aed": "votedPerCent(address)", +"8fe9a12f": "BKUToken()", +"8fea1e4d": "decreaseAllowance(address,uint256,address)", +"8fea64bd": "Hourglass()", +"8feaa243": "callTest(address,address,uint256,bytes,string)", +"8feadcb7": "setPeriod(uint256,uint256,uint256)", +"8febb1e5": "getPlayerHasAff(uint256)", +"8fedc959": "hedgeAddress()", +"8fedd2f2": "getTestTwo()", +"8fee3dab": "updateStat(uint256,uint256,uint256,uint8,uint8)", +"8fee7687": "allocatePresaleTokens(address,uint256)", +"8fee7b57": "registerQuarterSeason(int8)", +"8ff0c391": "isBuyBackTwo()", +"8ff11282": "parseKey(bytes32)", +"8ff1a583": "ICO_HARDCAP()", +"8ff21e0d": "LogBounty(address,uint256,string)", +"8ff255d6": "getHighestPrice(uint256)", +"8ff49347": "LOG_InvestorCapitalUpdate(address,int256)", +"8ff591b4": "addMinutes(uint256)", +"8ff5cbc3": "ApproveERC20(address[])", +"8ff5f021": "tokenAlreadyUsed(uint256)", +"8ff6650a": "Lending(uint256,uint256,address,uint256,uint256,uint256)", +"8ff67e35": "EthereumPro()", +"8ff6c8dd": "ICOSaleEnd()", +"8ff6e971": "isSecondary(uint256)", +"8ff72293": "getLotteryStatus(uint256)", +"8ff813fd": "transferVester(address)", +"8ff82a97": "TransferLockedToken(address,address,uint256,uint256)", +"8ff8754c": "getShareIndexDebugForTestRPC()", +"8ff936ea": "NoahCoin()", +"8ff95fa8": "catNames(bytes5)", +"8ff9b84e": "newStorage(address)", +"8ffa9690": "getBoolValue(bytes32)", +"8ffb4dc7": "nextStage(bool)", +"8ffb5e67": "getEvents(uint256,string,uint256)", +"8ffbcb81": "endIcoSaleRound3()", +"8ffbd95b": "setFcfContractAddress(address,address)", +"8ffc024f": "login(address,address)", +"8ffc831a": "testMemoryIntegrityCheck32Bytes()", +"8ffcdc15": "ContractDeployed(address)", +"8ffd2a1b": "add(uint256,address,uint8,string,address,address,string)", +"8ffe9b94": "transferTo(address,address,uint256,uint256)", +"8ffeb5c8": "MyBoToken(uint256,string,uint8,string)", +"8ffec6ee": "vinciCap()", +"9000b3d6": "addVerifier(address)", +"9000fcaa": "killAllowanceContract()", +"900104da": "updateAddressInfo(address,address,uint256,bool,uint256,bool,uint256,bool,string,bool)", +"90014f06": "ownerSetJackpotOfHouseEdge(uint256)", +"90018343": "_forwardFundsWei(uint256)", +"9002dba4": "right17(uint256)", +"900334b1": "investorDividendsAtNow(address)", +"9003adfe": "collectedFees()", +"9003ff51": "XET2()", +"90042baf": "createContract(bytes)", +"90044d18": "phaseTwoBonusPercent()", +"90045412": "withdrawloss(address,address)", +"900526b3": "getAuthorizeContract(uint256)", +"90059aed": "_daysToDate(uint256)", +"90061292": "Bazzhtoken()", +"90063fd4": "payContributorByNumber(uint256)", +"90065125": "PropertySet(address)", +"900683d0": "subtraction(uint256,uint256)", +"90070cb3": "Contribution(address,address,address,uint256,uint256)", +"9007127b": "getIntValue(bytes32)", +"900726c2": "sellOpen()", +"9007cdf3": "TOXBToken()", +"9007d53f": "withdrawTokens4(uint256)", +"900863e7": "depositTeamPerfit(uint256)", +"900888a3": "unsetERC777(address)", +"9008d64f": "getHolderInfo(bytes32)", +"90099ece": "preIcoOpen()", +"900a0285": "double(bytes32,uint8,uint256)", +"900a974e": "end(string)", +"900b7b62": "getWorkerAddress(uint256)", +"900cf0cf": "epoch()", +"900cff49": "getEsgoTXFund(uint256)", +"900d33d9": "createContractCar(string)", +"900d3812": "registerTransaction(string,address,uint256)", +"900d6f39": "maxStage1AllocationPerInvestor()", +"900d85fa": "updatePreReleaseTree(bytes32)", +"900dd918": "newTransferManualTokensnewTransfer(address,address,uint256)", +"900ddb58": "WCF()", +"900e1248": "sendlimit()", +"900e1561": "changePersonalMincap(uint256)", +"900eb5a8": "currentValidators(uint256)", +"900f080a": "reveal(uint256[],bool[],bytes32[])", +"9010470d": "markAsComingAndFreeze()", +"90107afe": "setAddresses(address,address)", +"9010c70b": "defaultLockBlocksForPool()", +"9010f726": "getKeysByPurpose(uint256)", +"90126acf": "optionsExercised(bytes32,address,address)", +"9012c4a8": "updateFee(uint256)", +"90135fec": "maxReached()", +"9013ad18": "activateUser(address,address)", +"9013d1ed": "startChallengePeriod(bytes32,bytes,address)", +"9014b075": "clockairdrop()", +"90152ddb": "Liutestcoin(uint256,string,uint8,string)", +"9015e1dc": "getPlayerAddressById(uint256)", +"9016bc21": "client_address(address)", +"9016dd4b": "push(address,uint256[2],uint8)", +"9017006e": "getDevFees()", +"901717d1": "one()", +"90171e57": "setBonusRound1(uint256)", +"9018c431": "serServerStatus(string,uint256)", +"901b2036": "totalSpins()", +"901b4301": "evacuate(address)", +"901b9249": "round(int256,int256,bool)", +"901c4e4f": "deployVault()", +"901c7518": "commRate(uint256)", +"901c947f": "showContractBalance()", +"901cea7b": "allocateEcosystemTokens()", +"901d7775": "voteOutMasterKey(address)", +"901da0df": "ownerTokenTransfer(address,uint256)", +"901fe291": "_deposit(uint256,address,address,uint256)", +"902025bd": "OfficalHolding()", +"9021c03d": "creditDividends(uint256)", +"9021dd30": "MinBetAmountChanged(uint256)", +"90232694": "toMemory(uint256,uint256)", +"90236e76": "Short()", +"9023c993": "YupieToken()", +"90255c6a": "salmanCoin()", +"9025ab6d": "ethTransfertoKYC(uint256)", +"9025e64c": "networkId()", +"902650aa": "initCards()", +"9026ad2e": "AbstractSweeper(address)", +"9026bd65": "RaffleGraphBook(string,uint256)", +"9026dee8": "checkAdmin(address)", +"902753f4": "verificationOff(address)", +"9028353a": "founder2Address()", +"9028f20b": "bodyElementBySubtypeIndex(uint256)", +"9029444a": "getMemberAddress(uint256)", +"9029a32b": "updateRausPoint(uint16,int256,uint16)", +"902a83cd": "addReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"902ab12f": "TestTest()", +"902c0dcc": "BalancesInitialised()", +"902c3ad7": "LOOMIA1_ADDR()", +"902c6811": "ProtectedReclaim(address,address,uint256)", +"902c92b7": "playHand(uint8,uint8,uint8,uint8[5],uint8[],uint8[],uint8[])", +"902d55a5": "TOTAL_SUPPLY()", +"902e64e5": "Oath()", +"902eded3": "eip165Supported(address)", +"902f1492": "registerPayment(address,uint256)", +"90300e38": "calNewTokens(uint256,string)", +"90304341": "safeToSub(int256,int256)", +"9030e40f": "totalFundRaised()", +"903171ae": "foundationTokenWallet()", +"9031bd2f": "_buyTokensFromSeller(uint256)", +"90323075": "TrustlessTransferStatusModified(uint256,bool)", +"9032bfc8": "setDaySecond()", +"9032f1a9": "createBenzTicket(address,uint256)", +"9033de61": "FricaCoin()", +"90347678": "numclaimed()", +"9034b427": "numDonors()", +"9035b4ff": "Biniu(uint256,string,string)", +"9036420a": "Cosmo()", +"9037ada9": "getTokenForEdit(address,string,string,string,uint256,uint256,uint256)", +"903833cc": "setMemorySize(uint256)", +"90393fc8": "maxPerTeam()", +"9039e01d": "newDay()", +"903a3ef6": "finalizeIco()", +"903a8298": "subscriptionCounter()", +"903b1f20": "enact_withdrawal_less(address,uint256,uint256)", +"903cc583": "calculateTokens(uint256,uint256)", +"903d0ac0": "publicAllocationTokens()", +"903d3340": "balanceOfFlower(address)", +"903d772a": "addDelegatorById(uint256,address,address)", +"903d9b2f": "Webrypto()", +"903db106": "x(bool)", +"903e95a9": "DeskToken(address)", +"903f2c48": "isAuthenticating()", +"903ff4fc": "AssetDK3()", +"90414116": "Period()", +"9041bdeb": "BNW()", +"9041f2c8": "WithdrawProposalFund(uint256)", +"9041f960": "manageTransferLock(address,bool)", +"90427b6c": "dev4Wallet2Pct()", +"9042aa27": "paymentForkIndexes(uint256)", +"9042bbf3": "prizeClaimed()", +"9042dcd9": "prizeMoneyQuantity()", +"90430c00": "getVersionImplementations(bytes32,bytes32,bytes32)", +"90431b6e": "withdrawAllFromToken(uint256)", +"90445e9f": "getPlayerNb(uint256)", +"9046fefd": "NewCurator(address)", +"904740cd": "getOscar()", +"9047ad74": "activateProject(address)", +"90483aa1": "PowerLedger(address)", +"9048816f": "resultConfirmed()", +"9048f510": "createContractGame(string,uint256)", +"9049681c": "addBuyOrder(uint256,uint256)", +"904a7d4c": "midasDeposit()", +"904aaf8f": "foreground()", +"904adc3d": "ERC23TokenMock(address,uint256)", +"904b46a1": "NEOToken()", +"904b67c2": "IcoClosedManually()", +"904bd6d0": "setTokensPerEther(uint256)", +"904c6094": "contractHash()", +"904cbd79": "depositCommission()", +"904d2248": "betHashOf(address)", +"904d3f47": "IADAddress()", +"904d5ed6": "Update_Cash_Proof_amount(uint256)", +"904da3d7": "Buyout(address,address,uint256,uint256,uint256,uint256)", +"904dc85d": "providerRewardLib(address)", +"904de64e": "TRSOffset()", +"904e1c88": "sales(bytes16,uint256)", +"90502c2e": "collectTokens(address[])", +"9050b560": "obligations()", +"9051d18a": "tokenEnabled(uint256)", +"90525c05": "devLimit()", +"905295e3": "unlockAccount(address)", +"9052b3d5": "_contains(address[],address)", +"9053ef56": "onReceivePrivate(address,address,uint256,bytes)", +"9053f420": "trade(address[8],uint256[6],uint256,uint8,bytes32,bytes32)", +"905473cf": "updateMaxJump(uint256,uint256)", +"9054bbb6": "INITIAL_TAP()", +"9054bdec": "toTimestamp(uint16,uint8,uint8,uint8,uint8,uint8)", +"9055172d": "UVDToken()", +"905529be": "startCrowdsales(uint256)", +"9055bc12": "QRToken()", +"9055ffb0": "trackTreasuryToken(uint256)", +"9057bc48": "canStopWork()", +"9057f289": "createListing(address,uint256,uint256,uint256,uint256)", +"9058c8a4": "setBuyFeeBps(uint256)", +"9058e228": "buy(address,bytes32)", +"90596dd1": "controllerBurn(address,uint256)", +"905a7649": "RegisterTransaction(address,uint256)", +"905a90fe": "numberImmortals()", +"905ae5f5": "fechCurrentStageIndex()", +"905b7256": "_rewardLotteryWinners(uint256,uint256)", +"905b8000": "CountStudentnRequests()", +"905bd5e4": "superTransfer(address,address,uint256)", +"905bebe9": "solveProblem(uint256)", +"905c949e": "AURIX()", +"905d326c": "_newCampaign()", +"905dca52": "haveEitherAttribute(address,bytes32,address,bytes32)", +"905e6e42": "JSON_Test()", +"9060091c": "setAmountToken(uint256)", +"90603bdb": "getEscrowsByOwner(address)", +"90604005": "cln()", +"9060e35d": "Voronezh()", +"9061a6e9": "increaseSoldSaleSupply(uint256)", +"9061aedd": "fundOnContract()", +"9061da22": "MANHATTANPROXYEASTENDAVE()", +"9062145a": "CreateXPA(address,uint256)", +"906273a3": "asyncTokenSend(address,uint256)", +"9062a445": "setGameAddress(address,address,address)", +"9063e860": "transferOrigin(address,uint256)", +"90645840": "newHash(uint256)", +"90646b4a": "setGateway(address)", +"9066314e": "toggleLastChance(bool)", +"90664cf5": "armyAircraftCarriersCount(uint256)", +"906686a6": "totalIssueTokenGenerated()", +"9066c472": "addRoyaltyReceiver(address,uint256)", +"90676901": "stallionWith(uint256,uint256)", +"9067b677": "getEndTime(uint256)", +"906802cf": "tokensUnlocked()", +"906860d9": "Whitelist(address,address)", +"906a114c": "getAllMoneyOut()", +"906a26e0": "softCap()", +"906ab111": "preIcoTokenSales()", +"906b23be": "TOKEN_FOUNDINGTEAM()", +"906c7c68": "internalGetApproved(uint256)", +"906ca728": "viewReservedTokens()", +"906d5785": "setTeamContract(address)", +"906d895d": "getAvailableSeats()", +"906e1ec0": "canWriteName(address,bytes32)", +"906e9400": "newManager(address)", +"9070222e": "getCardIdByRank(uint256)", +"9070b18d": "_getAllRevisionBlockNumbers(bytes32)", +"9070e8a5": "validContracts(address[])", +"90714770": "finalizeFirstStage()", +"9072d58a": "registerPullPayment(uint8,bytes32,bytes32,string,string,address,address,string,uint256,uint256,uint256,uint256,uint256)", +"907316a9": "_getEarnings(address,address,uint256)", +"90731848": "minPriceForNextRound(uint256)", +"9073280b": "SFTPRECOE()", +"9073576c": "UnfreezeAccountByTime(address)", +"90742e52": "initsegmentation(address,uint256,uint256)", +"90753533": "activateMainIco()", +"90754979": "sendPriceRequestToOracle(bytes16,bytes16)", +"9075726e": "SeeSourToken()", +"9075b10c": "LogWhiteListedMultiple(uint256)", +"9075becf": "multisigWallet()", +"9075f124": "setAccountVerified(address)", +"90762a8b": "ownerBurnToken(uint256)", +"907631fc": "toBool(bytes,uint256)", +"9076a38a": "getBackgroundImageCount(address)", +"9076aff7": "lastBlock_a4()", +"9076c166": "setAllocation(address,uint256)", +"9077309b": "burnSoupTokensForDay(uint256)", +"90778ab9": "issueToken(address,address,uint256,uint256,uint256,uint256)", +"9077dcfd": "submitCoding(string,uint256)", +"90785418": "addPiece(string,string,bytes32,address)", +"9078b596": "changePrice(bool)", +"90795e18": "borrowInternal(uint256)", +"90797634": "ident()", +"907a37c5": "getCandidateDetailOnElection(address,address,uint256,address,address)", +"907af6c0": "unit()", +"907b0305": "createERC20(address,uint256,string,uint8,string)", +"907b270b": "priceEthPerToken()", +"907b503d": "depositedToken(address)", +"907be394": "operationsFundAddress()", +"907c5082": "assignTeamTokens()", +"907dff97": "_emit(bytes,uint256,bytes32,bytes32,bytes32,bytes32)", +"907efd7a": "createToken(string,string,uint8,uint256,uint256,uint256,uint256)", +"907f67ee": "pauseBuyback()", +"907f7aa8": "cancelSellOfferInternal(uint32,bool)", +"9080345d": "Role(bytes32,address[])", +"9080c78c": "tixNumberforSale()", +"90810c77": "multivestBuy(address,address,uint256)", +"9081c3db": "markHours(bytes32,int256)", +"90825c28": "getMarketCap()", +"90828c78": "nextPromiseId()", +"90828cdd": "getCreateMarketUniverseValue()", +"90835848": "getCurrentRoundTotal()", +"90836822": "DXC()", +"90838e09": "totalInvested(address)", +"9083998b": "TechnoBit()", +"908408e3": "Initialized(address)", +"90843cd9": "fetchAllCreatedOrders()", +"90843d04": "numIncrement()", +"9084f1f9": "closeMotion(uint256)", +"90855c31": "ACT(uint256,string,string)", +"9085b77f": "allowed(address,bytes32,address,bytes4)", +"9085e88d": "giveBlockreward()", +"90862d1b": "unfreezeTokens(address)", +"908687a9": "Simoleon()", +"90869e9f": "getMartialNumber()", +"9086de3b": "isWhitelised(address,address)", +"90888aa1": "StakeObjects()", +"908921fc": "ceo()", +"90895e1c": "setAllocatedToken(address,address,address,uint256)", +"9089e0c2": "UnicornCoin()", +"9089f616": "removeClient(address)", +"908ab6a5": "roleHash(address,bytes32)", +"908b8cfc": "withdrawOperationalExpenses()", +"908c3a6a": "tokenUserCounter()", +"908ccc5e": "numberOfRecordEntries()", +"908d16de": "BountyAgentChanged(address,bool)", +"908da4e8": "timeTier1()", +"908dd411": "getFundAlterations()", +"908e049b": "destory(uint256)", +"908e2d2a": "maxCoinCap()", +"908e2f06": "mails_to_deliver()", +"908f68ee": "unrespondedCnt()", +"909006fc": "setDirectOffersComissionRatio(uint256)", +"90900df4": "addDebt(bytes32,uint256)", +"90905360": "setDividendsPercent(uint256)", +"9090ce1f": "CANCELATION_DATE()", +"90912d09": "pausingMechanismLocked()", +"9092b623": "PotOfEther()", +"90935301": "setCryptaurReserveFund(address)", +"90938792": "canVoteAs(uint32,int256,address)", +"9093bc3d": "addCoins(uint8,uint8,uint256)", +"9093f5d1": "ReverseBugBounty()", +"90949f11": "getNumberOne()", +"9094b22f": "setAttribute(address,address,string,bytes,uint256)", +"9094c763": "vote(uint32)", +"9095269d": "mintExtraTokens()", +"909540cb": "ERC165()", +"90954483": "createLandmark(string,address,uint256)", +"90957363": "removeFromFutureExpanstionMap(address)", +"9095b2cd": "IPcoin()", +"9095df68": "library2function()", +"90971fea": "ecrecoverWrapperView(uint8,bytes32,bytes32)", +"90972e89": "LogReceivedEther(address,address,uint256,string)", +"90974795": "getall()", +"90979943": "IRB()", +"909862b7": "updateSalary(address,address,uint256)", +"9098f074": "buyServiceByAdmin(uint64,uint64,address)", +"909c36b5": "newEntry(bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"909c9fca": "reclaimExpiredSwaps(bytes32,bytes32)", +"909d22c7": "many_cryptobanks()", +"909d2cc1": "hasTeam()", +"909d3bc9": "isIdle(address,uint64)", +"909d6877": "preSaleLimit()", +"909e4ab6": "getLog()", +"909e8f92": "unlockFirstPrivate()", +"909ec524": "KyberAirDrop(address)", +"909f2c3a": "ChangeNumber(string)", +"909f617e": "fill(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"90a08e70": "balanceOfUnclaimedGoo(address)", +"90a0a2ab": "GetPriceOfTroops(uint256,uint256,uint256)", +"90a1d580": "TSTEST2()", +"90a2005b": "transfer(bytes32[])", +"90a251da": "createNewTankWeapon()", +"90a25f28": "WeBetCrypto()", +"90a2e1ef": "emergencyReserve()", +"90a3d87e": "addLanguage(string)", +"90a4d287": "bovBatchDistributed()", +"90a53085": "votesCountByOperation(bytes32)", +"90a59ea1": "BasicAccountInfo(uint8)", +"90a5c7af": "Lesson_1(address,uint256)", +"90a6267a": "canRescue(address)", +"90a650e8": "UpgradeAgent(address)", +"90a70139": "pauseTransfer()", +"90a72a3f": "FundingCapSet(uint256)", +"90a744fe": "BossCoin()", +"90a7ba5b": "ticketsPurchased()", +"90a85119": "checkBetResult(uint8)", +"90a897c6": "frozenAddress(address)", +"90a971a8": "setPI_edit_27(string)", +"90a9cc02": "namiPresale()", +"90aa2185": "dailyCount()", +"90aa835c": "IsAuthorityAddress(address)", +"90ab54dc": "configureMigrate(bool,address)", +"90ab7d34": "deployRuntimeContract()", +"90abcb08": "TronyCurrencyContract(uint256,uint256)", +"90ac11a3": "designs(uint256)", +"90ac1866": "setMinGasPrice(uint256)", +"90ac3f4c": "_getTokenAmount(uint256,address)", +"90ac7588": "profitsLockedUntil()", +"90acc740": "transferCompanyTokens(address,uint256)", +"90ad304f": "ContractOwnershipTransferred(address)", +"90addc9a": "calculateMyRewardMax(address)", +"90ae144e": "swap_able()", +"90ae631d": "assignAll()", +"90ae6863": "gyCF()", +"90af1333": "allBoxNumbers()", +"90afca4c": "addPhases(uint256,uint256,bool,uint256,bool)", +"90b0636f": "rapidGrowthProtectionmMaxInvestmentAtNow()", +"90b06593": "landClaim()", +"90b08a52": "getSendAmount()", +"90b0e078": "discountTime()", +"90b17f99": "directPaymentThreshold()", +"90b22d03": "set_parameters(uint256,uint256,uint256)", +"90b25207": "GoogleChainToken(address)", +"90b26043": "NameRegistered(address,uint256,string,uint256)", +"90b2ae49": "verifyDeployment(address,bytes32)", +"90b2ce6f": "mvnpereth()", +"90b30251": "is_finalized()", +"90b3195f": "SHAREPERIOD()", +"90b398ff": "SetFreeGWT(uint256)", +"90b3d963": "trade(uint64,uint64)", +"90b4cc05": "mintAdvisorTokens()", +"90b4cc72": "numTransactions()", +"90b5561d": "insert(uint256)", +"90b5e6d9": "presaleFinished()", +"90b625f9": "stockSellOrder(uint256,uint256,uint256)", +"90b67185": "setPrivilegeState(bool)", +"90b6b209": "bonuses()", +"90b6f7e6": "RashidToken()", +"90b7ddd7": "t02_createContractMac(bytes32,bytes32)", +"90b7df75": "addAuthByPhone(string,string)", +"90b98a11": "sendCoin(address,uint256)", +"90b9be4a": "RetailerManager(address)", +"90b9c31a": "purchaseFinished()", +"90ba0e6c": "getNumOfBettersForMatchAndPrice(uint256,uint256)", +"90ba34cc": "refundClaimAddress()", +"90baaa5c": "checkPoolEnd(uint256)", +"90bb5ad0": "Eth2USD(uint256)", +"90bb6153": "withdrawTokenBalance(address)", +"90bb807e": "getVolumeDiscountsCount()", +"90bc1693": "burn(uint128)", +"90bd301e": "_validCharm(string)", +"90bdb275": "costOfTxShares()", +"90bde517": "getUser(address,address)", +"90be0bd9": "enableAuthentication()", +"90bee6aa": "getTransformRate(address,uint256,uint256)", +"90bf0301": "changemp(address)", +"90bf348f": "crowdSaleMinAmount()", +"90bf495d": "tokensReleasedToEarlyInvestor()", +"90bf693b": "logoFee()", +"90bf87a3": "setRestriction(address,uint256)", +"90c1288e": "setAddressF1(address)", +"90c2365e": "_addWeiAmount(uint256)", +"90c26736": "countRecommendFund(uint256)", +"90c32295": "bountySent()", +"90c3a370": "AuctionMaster()", +"90c3f38f": "setDescription(string)", +"90c40776": "donotIronDappToken()", +"90c459a3": "lnLimited(int256,int256)", +"90c46985": "calculate_difficulty_attempt(uint256,uint256,uint256)", +"90c4ce57": "getReportingWindow(uint256)", +"90c6087b": "_getName(string,uint256)", +"90c6b18a": "CreationTime()", +"90c6d1b9": "SetFreeTokens(uint256)", +"90c79af9": "startAcceptingFundsBlock()", +"90c8a72d": "sendOwnerShares(address)", +"90c8abd3": "CreateCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", +"90c985a1": "buyCertificate(uint256)", +"90c98a7b": "resolveRankBoard()", +"90c9d6f8": "BankerExit(uint8)", +"90ca20e5": "init_wallet(address[],uint256,uint256)", +"90ca27f3": "vote(string,uint8)", +"90ca38d9": "setAdvisorsTokens(uint256)", +"90ca9dbf": "getGradeByQuailty(uint16)", +"90caa2b4": "getFreezeUntilDetails()", +"90cad537": "poolMintRate()", +"90cb04e1": "buy(string,uint256,uint16)", +"90cb4854": "createTokens(address,uint256,uint256)", +"90cbcf92": "getFibonacci(uint256)", +"90cbfa19": "abort(address)", +"90ccdafb": "increaseArrayOfBeneficiariesBalances(address[],uint256[])", +"90cd0d06": "registerApproveRequest(bytes32,bytes)", +"90cd5860": "VehicleRTO(address)", +"90cd6170": "getActiveSkin(address)", +"90cd8020": "licenseTermsMinCostPerSec(bytes32,bytes32)", +"90cddcc5": "getEpisodeDetail(uint256)", +"90ce9e5b": "getPreIcoInvestorsAddressesCount()", +"90cf3fed": "AKAIITO()", +"90cf581c": "voteYes()", +"90cf72de": "_getCommonPlusRarity(uint32)", +"90cf76fa": "bundleOfOwner(address)", +"90cf7ab4": "existsUser(uint256)", +"90cfce5a": "setgetgoods(uint256)", +"90d16b30": "resolveDisputeBuyer(address,string)", +"90d19241": "_removeAddress(address)", +"90d1c593": "Summary(address,address[],address[],address[],uint128[])", +"90d22eeb": "setIcosMinLimit(uint256,uint256)", +"90d240c6": "get_data(uint256,uint256)", +"90d28075": "getBasketArranger(address)", +"90d2cd5c": "getCurrentUserBigPromoBonus()", +"90d2f727": "signedApproveAndCallCheck(address,address,address,uint256,bytes,uint256,uint256,bytes,address)", +"90d370ba": "canReceive(address)", +"90d49b9d": "setFeeWallet(address)", +"90d4bcc0": "inject()", +"90d4bd45": "wetCoin()", +"90d58a70": "tgrCurrentPartContributor()", +"90d61290": "traded(address,uint256)", +"90d63e5d": "addAuthor(bytes)", +"90d68bb6": "getCallTypes(uint256)", +"90d6b45f": "kyc()", +"90d783bb": "BEEFJERKY(address)", +"90d83301": "SPAM()", +"90d8a4be": "badge(bytes)", +"90da7c3c": "isGeneMixer()", +"90daaf67": "getMinimalDeposit()", +"90db2aa9": "SellOrder(uint256,address,uint256,uint256,uint256,uint256)", +"90db623f": "increaseApprovalAndCall(address,uint256,bytes)", +"90db78f9": "crowdsaleInfo()", +"90dbf4fc": "getRequestBaseInfo(uint256)", +"90dc0636": "GetHoldersCount()", +"90dcba22": "addressPeople()", +"90dd027e": "migrateFrom(address,uint256,uint256,uint256,bool)", +"90dd2395": "listPrycto6()", +"90dd9d17": "perSaleWithDrawal()", +"90de4495": "dive5(address)", +"90de8234": "adminMode()", +"90de9ed9": "TOKEN_SALE_CAP()", +"90df44b4": "addDocument(string,string,string,string,uint256,uint256)", +"90dfb092": "privatePresale()", +"90e10134": "burnAdminApproval()", +"90e10250": "setCreated()", +"90e1de68": "allowedForwards()", +"90e2160a": "setMaxUpdates(uint256)", +"90e2b94b": "t0special()", +"90e2d4cc": "refreshLockUpStatus()", +"90e33e9c": "totalDDTforInterest()", +"90e3c278": "getShares(uint256[128])", +"90e47957": "erc165InterfaceSupported(address,bytes4)", +"90e4a130": "getMyDonations()", +"90e50ba7": "registerAltPurchase(address,string,string,uint256)", +"90e517e7": "logoY()", +"90e575f5": "auctionEnds(string)", +"90e57cac": "confirmProposalAndTransferFunds(uint16,uint16)", +"90e5e12a": "existenceTransferTest(address)", +"90e64d13": "hasExpired()", +"90e72127": "closeOrder(address)", +"90e761cd": "recoverAddressFromSignature(uint64,uint256,bytes32,bytes32,bytes)", +"90e7760e": "makeLive()", +"90e7a074": "codexStakeContract()", +"90e8265d": "tierDuration(uint256)", +"90e8317c": "rateWorkerSkills(uint256,address,uint256,uint256,uint256[],uint8[])", +"90e8edd8": "JincorTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"90e8f758": "liveEtherSportCampaign()", +"90e99b09": "finishRestore()", +"90ea0fb8": "isSignedByEugene()", +"90eb9632": "PROMETHEUS_PRICE_INCREMENT()", +"90ebed43": "getNumberOfCourses()", +"90ec028d": "LogPollCreated(bytes32)", +"90ec57f1": "Approve(address,uint256)", +"90ed6bf4": "startWithdraw()", +"90ee2ec2": "FCCPlaceHolder(address,address,address)", +"90ee4331": "getStartClaimDate()", +"90eed0ce": "SetCert(uint32,bytes32)", +"90eede26": "COMM_ADDR()", +"90ef08a1": "getdrawtoken(address)", +"90f08b32": "contract2Address()", +"90f098bb": "setFeeTake(uint256)", +"90f0a5bd": "BecomeTadpolePrince()", +"90f0dbd5": "CRSAllocation()", +"90f0f4f4": "ReserveFundAmount()", +"90f0fef0": "test2ContractVote()", +"90f1d909": "Ixellion()", +"90f25eb3": "getPercentages()", +"90f2c86d": "convertToWei(uint256,string)", +"90f2dc88": "getObjClassId(uint64)", +"90f3b693": "initialIssueMinted()", +"90f3deb1": "getTeamUnlockAmountHelper(uint256)", +"90f4c33a": "transferSaleWallet(address)", +"90f4d2fd": "checkMaxCapReached()", +"90f50cd9": "setPromo(address[],uint8[])", +"90f52ade": "LOTT()", +"90f549ba": "getLockCountForAddress(address)", +"90f551ec": "offerBtcFromApp(address,uint256)", +"90f5c2ca": "canRef(address,address,uint256)", +"90f5f99d": "DHUBTest()", +"90f6b2b3": "getInvestorByValue(address,address)", +"90f81702": "BaseToken()", +"90f8c118": "hyip()", +"90fa17bb": "constructor()", +"90fa337d": "storeBlockWithFeeAndRecipient(bytes,int256,int256)", +"90fa775e": "_calculateInflationBonus(uint256,uint256,uint256)", +"90fa8910": "GetBasePrice(uint256,uint256)", +"90faa3e9": "setPrice(string,uint64,uint8)", +"90fab7ce": "just50Send()", +"90fad1e6": "remove_from_whitelist(address)", +"90faeb62": "DolarToday()", +"90fbf84e": "trustedFeeWindowTransfer(address,address,uint256)", +"90fc2a32": "CaptainGameConfig()", +"90fcf551": "getTRIOs()", +"90fd4300": "releaseState4()", +"90fd53ec": "farmTile(uint8,uint8,int8)", +"90fd5452": "blockState()", +"90fd67fc": "setDepositAddressVerify()", +"90fdf36b": "_vouchersToWei(uint256)", +"90fe5609": "startVoting(uint256,uint256)", +"91006745": "isAdmin(address,address)", +"91014fcc": "_updateWhitelist(address,uint8)", +"91019db2": "getSellerTransaction(address)", +"9102bcc8": "Teacher(address)", +"91030cb6": "lockPercent()", +"9103321d": "TOTAL_TOKENS_AVAILABLE()", +"91039c83": "updateEndTimeManually(uint256,uint256)", +"9103cfb6": "TheophanesToken()", +"9103e368": "winnerTimestamp()", +"9104b6f4": "getPendingWalletFeeData()", +"9104c316": "internalBurn(uint8,address,uint256)", +"9104dbd2": "_createCompany(string,address,uint256)", +"91051e06": "poolWithdraw()", +"910545ff": "TOKEN_PRESALE()", +"91057f53": "ERC20TokenCPN()", +"91060168": "fetchString(address,bytes4,bytes32)", +"9106d7ba": "totalSold()", +"910887bc": "setPublisherCut(address,uint256)", +"91093ba4": "setUintF1F2(uint256,uint256)", +"910cbda6": "buyTokensFor(address,address)", +"910d52ea": "getPaperFee()", +"910eba1d": "buyBonds(address)", +"910f3b52": "bidFromEtherScrolls(uint256,address)", +"910f5b81": "preIcoStartTime()", +"91104f82": "bountyTokenAmount()", +"911058df": "setMockedNow(uint256)", +"91125fb7": "thirdWeekBonus()", +"91127c1f": "_clearApproval(address,uint256)", +"91136d3f": "Settlement(uint8,bool)", +"911402f1": "masterServer()", +"9114557e": "vestedBalance(address)", +"911463d2": "setPOOL_edit_27(string)", +"911475cc": "incNonce()", +"91147dfa": "restoreContract()", +"91149e85": "resetOfferingStatus()", +"91152c5c": "airdropTokens()", +"911550f4": "getBetterOffer(uint256)", +"9115abf4": "getDetails(uint256,address)", +"9115ca43": "getPayerString()", +"9115e9ee": "ExtractEtherLeftOnContract(address)", +"911644fa": "maxIceDragonsCount()", +"9116ee03": "testHasCorrectPriceForStages()", +"91174790": "addEvidence(bytes32,uint256,bytes32)", +"91174cb6": "roundnum()", +"91176f39": "presaleUnlimitedStartBlock()", +"91177db4": "batchTransferFrom(uint256[],address,address)", +"9117c6df": "balanceOfReadable(address)", +"9117e32e": "expireOf(address)", +"91184159": "getOptionHash(address[3],uint256[3],uint256[2],bool)", +"9118575a": "setTokenSale(address,address,uint256)", +"91194aab": "tixFoundersDeposit()", +"9119e5fb": "submitTransactionWithSignatures(address,uint256,bytes,uint256,uint8[],bytes32[])", +"911a40c9": "ARPToken()", +"911a56bc": "totalSupplyWithZeroAddress()", +"911a739e": "winnerLimit()", +"911a9ac0": "preSeasonGame()", +"911adc1a": "pay(address,uint256,bytes)", +"911b5f4e": "sub(uint64,uint64)", +"911cec25": "getMountTokenIds(address,uint256,address)", +"911d0189": "minJackpot()", +"911d3101": "escapeFreeze(uint256)", +"911d731a": "DWBTToken(uint256,uint256,uint256,uint256)", +"911d84cb": "updatePlayerRecommend(address,address)", +"911eb255": "approvePromise(address)", +"911ef2e9": "Voted(uint256,bool,address,uint256)", +"911ef508": "pausedTimestamp()", +"911fa5c9": "totalTokenSellAmount()", +"911ff22b": "EthereumRateUpdated(uint256,uint256)", +"911ffbdb": "lastRewards(address)", +"91214841": "usdraised()", +"912221d5": "tokenCost()", +"9122acd8": "KUYCToken()", +"912308dc": "withdrawToInvestor()", +"91240f44": "getReferee(address)", +"9124f1cf": "getOrderHash()", +"912525f4": "WideEnergy()", +"91256ed0": "freezeMustCalculate(uint256)", +"9125ecf1": "bountyVaultAddr()", +"9127bc2a": "FOUNDERS_TOKENS_LOCK_PERIOD()", +"9127d3d7": "EXPECTED_TOTAL_SUPPLY()", +"9127da7e": "RRcoinToken()", +"912875bc": "ICO_PRICE6()", +"91287962": "artworkRegister(address)", +"9128bbc6": "Tanaka()", +"91294ed1": "minContributionWei()", +"912bcb79": "betGame(uint256,uint8)", +"912c3fbf": "EYToken()", +"912c8b75": "claimGold(uint64,uint64,uint64,uint64)", +"912d6e28": "approveTokens(address,address,uint256)", +"912de8de": "fixBalance()", +"912eb6d9": "amountOfUBOsold()", +"912ee23d": "SaleStarted()", +"912f6ba4": "getAtheniansOnTheBattlefield(address)", +"912f6c71": "IssueIQTToken()", +"912f952f": "Ulti()", +"912ff8f6": "getServerState(uint256)", +"91301852": "CyberClassicToken()", +"91304f1f": "isKYCRequired()", +"913093aa": "initialSupply(address)", +"913158f7": "getIsland(uint256)", +"91318874": "setRates(uint32,uint32)", +"9131d803": "testSetFrontend()", +"91324514": "InfiCoin()", +"91324bea": "EscrowContract(address,address,uint256)", +"91329493": "charityCount()", +"9132b81d": "VotingStarted(address,uint256,uint256)", +"9132c26c": "calcSELLoffer(uint256)", +"9132dfca": "CATA()", +"913579b6": "updateWhiteListImplementation(bool)", +"913594ae": "JETUSA()", +"9135ac08": "addInInitialSupply(uint256)", +"91361f64": "getRankPriceCandy(uint256)", +"913683fc": "IODTOKEN()", +"9136d392": "KothWin(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256)", +"91373711": "stopFlagOff()", +"9137471b": "setGoldBought(uint256)", +"91375e8d": "getGameEndTime()", +"91378400": "POSAddress()", +"91378456": "publicTGEEndBlockTimeStamp()", +"9137b6e6": "addAction(uint256,string,string,uint256,bytes32,uint256)", +"9137c1a7": "setStorage(address)", +"9137d10a": "refreshDirectSellParameter(uint256)", +"9137f9b1": "viewSecondLotOfClauses()", +"9138f38b": "claimTokensERC20(address,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"913918a6": "changeSaleInfo(uint256,uint256,uint256,uint8,uint256)", +"913967d0": "getNextFeePercentage()", +"91398f25": "getTransferringFor(address)", +"913b1ecc": "setGroupWinner(uint256,uint256[])", +"913b2958": "appealRuling(uint256,uint256)", +"913cc77f": "setEthValueAmount(uint256)", +"913cf5ca": "eos()", +"913d23e2": "distributeMnyAfterSwap(address,uint256)", +"913d30b0": "LIDToken()", +"913d6906": "VotingToken(string,string,uint256,string,string,string,address,address,address,address)", +"913dd846": "PRESOLD_ADDRESS()", +"913e0887": "FundingRulesSet(address,uint256,uint256,uint256)", +"913e77ad": "collector()", +"913f424c": "_ecMul(uint256,uint256,uint256,uint256)", +"913f4766": "Refound(address,uint256)", +"913fb60b": "colorLeaderboard()", +"913fbd04": "aidPoolWallet()", +"913fc67a": "bidoohAdminAddress()", +"91404af8": "updateTokenRatio(uint256,uint256)", +"91407479": "Eth2USD_power18(uint256)", +"9140a101": "checkRegistrar()", +"9140a499": "updatePublicCheck()", +"9140f6ee": "releaseRestPreSaleTokens()", +"9140f968": "newInvestment()", +"91410c97": "stake_reward_rate()", +"91410e41": "getMyRecordCount(address)", +"91415ce9": "TRANSFERMANAGER_KEY()", +"9141bfae": "LogReveal(uint256,address,uint256)", +"9141d6f9": "unset(bytes32)", +"91421cf6": "ECRCTOKEN()", +"91423ef2": "getClientLastSupplyID(address)", +"91432155": "setBaseInterest(uint256)", +"91436eee": "issueLeftToken()", +"91441589": "run(bytes,uint8[4],uint8[2][4])", +"91449def": "_owns(address,uint256,bool)", +"9144f267": "ALBtoken()", +"91458ee8": "GameCreated(bytes32,string,string,uint16,uint64)", +"9145a7fd": "CrowdsaleEnded(uint256)", +"9147dd1b": "pricePresale()", +"9148018a": "getChatMessageAtIndex(uint256)", +"914810a3": "claimRepository()", +"91481123": "contestOverTime()", +"9148148b": "migrate_game_balance()", +"9148b237": "takeAllOrRevert(address[3][],uint256[3][],uint256[],uint8[],bytes32[],bytes32[],bytes4)", +"91492956": "getPrices(uint256)", +"914946aa": "getSignerAddresses()", +"914980d4": "setBonus(address,uint256,bool)", +"91499e2d": "disableService(uint256)", +"914a1e76": "getWinRate(address)", +"914a5b24": "popPlayer()", +"914ae352": "getCurrentNumberOfUsedServiceTokenWei()", +"914b7fd2": "calculateSellGoldFee(uint256,uint256)", +"914b857e": "unlockEscrow(bytes32)", +"914bdef8": "_transferWithData(address,address,address,uint256,bytes,bytes,bool)", +"914d581d": "fiatRaisedConvertedToWei()", +"914dde1c": "isProposed(address)", +"914de6d6": "MarketingAllocation(address,uint256)", +"914e1ee1": "resetSearchStartIndex()", +"914f716d": "BalanceHolder(address)", +"914ff398": "batchFill(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"915009a7": "getPaperFromMeta(uint256,uint256)", +"915015c5": "setColorBlack()", +"91508264": "getNextPrice(uint256,uint256)", +"9151c7e4": "GrandFraternityChain(uint256,string,string)", +"9151e092": "RisuToken(address)", +"9152486c": "currentInitPart()", +"9152f0b2": "getLastRequestId(uint256)", +"9152f764": "WorldCup(string,string,uint256,uint256,string,uint256)", +"9153d09a": "stringFloatToUnsigned(string)", +"915489f6": "futureTokens()", +"91548ccf": "ticket_address_added(address)", +"91555559": "getNumWeiAddressMayInvest(address)", +"9155b01a": "setSelfClaim(bytes32,bytes32)", +"9155cc2c": "HitToken(string,string,uint8,uint256,uint8,uint8,address,address)", +"91565aba": "updateUsableBalanceOf(address)", +"9156a003": "totalTokensIssued()", +"9156fb60": "addressERC20Token()", +"9157e556": "isQualitifiedAddress(address)", +"915a405f": "updateTransferMinimumFee(address,uint8)", +"915b5bfc": "NeoWorldCash()", +"915cfeac": "getTransferAgentStatus(address,bytes32,address)", +"915d44f6": "setRFFSessionsAdd(address)", +"915db230": "marketBuyOrdersNoThrow(uint256,bytes[])", +"915e1044": "strFunc(string)", +"915e5d44": "apply_compensation()", +"915ed87e": "LiveStarsTokenPresale(uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"915f3209": "changeMaximumValueDuringGuaranteedPeriod(uint256)", +"9160342e": "Sale(address)", +"91603691": "HDTTokenTest()", +"91607530": "RaisedByPartner(address,uint256,uint256,uint256)", +"9160aabc": "getPendingBetCount()", +"91613e4b": "FTC()", +"9161f789": "getRoundFunds()", +"9162a905": "GDCNumber5()", +"9162ab43": "MiningStolenPayout(address,address,uint256,uint256)", +"9163f897": "block6()", +"91647938": "saveMatchJoinAddr(uint256,address)", +"9165543a": "deleteUser(uint256,address)", +"91656aa9": "changelp11(address)", +"916576c8": "fundForSale()", +"91658639": "ChampionSimple(uint256,uint256)", +"916635c6": "log_mint(address,uint256)", +"91667aef": "getTokensPurchased()", +"9166a449": "totalTokenSaleCap()", +"9166b10a": "IcoAbandoned(string)", +"9166cba4": "sai()", +"9167c5ad": "removeClientToken(uint256)", +"91684f8d": "MMR(address)", +"916891aa": "allocateReserveAndFounderTokens()", +"916a2b29": "_removeHorseFromStud(uint256)", +"916a476e": "save3(address,bytes,string)", +"916a4b57": "addPet(uint256,uint256,uint256,uint256,uint256,uint256)", +"916b5cfa": "TIMEstartICO()", +"916be4fe": "HELP4HUMANITY()", +"916c99fd": "getCampaignEndPointById(bytes32)", +"916dbc17": "getPlayersFromCompetition(string,uint8)", +"916dbc9e": "Coin786token18()", +"916df92a": "Round()", +"916dfea2": "getPersonalBonus(address)", +"916e5901": "teamTokensLock()", +"916e93f8": "ecrecoverFromVRS(bytes32,uint8,bytes32,bytes32)", +"916eb6eb": "SetRoundResult(uint8,uint8,uint8,uint8,uint8)", +"916f5de1": "_emitJobOfferAccepted(uint256,address)", +"916f7c23": "setSelled(uint256,bool)", +"91702ddc": "highCompose(uint256,uint256,uint256)", +"91704e1e": "getBid(bytes32)", +"917105d4": "_takeOwnershipOfToken(uint256)", +"917116f2": "NewSellPrice(uint256)", +"917180c7": "setColdWallet1SplitPercentage(uint256)", +"91735092": "assignToEarlyBirds(address[],uint256)", +"9173a610": "createGame(string,uint256,bytes32[])", +"917418c1": "setMinRoundSize(uint256)", +"917569a8": "weiPresaleMax()", +"917603e5": "getNumberOfMyGamesCompleted(address)", +"917640b5": "getSELabels()", +"91778b9c": "changePrice(uint8,uint256)", +"9178732f": "warriorsOnTheBattlefield(address)", +"917ada14": "testControlCreateShortIdAlreadyExists()", +"917b4f8b": "TQXToken()", +"917d009e": "getAuctionPrice(uint256)", +"917d2be2": "wolkGenesis(uint256,uint256,address)", +"917ec8e2": "removeApp(uint32,string)", +"917f635c": "wct()", +"917fcc5d": "addJobProposal(uint256,string,uint256)", +"917fd839": "buyGEN0Chibi(string,string,uint8,uint256)", +"91814577": "renameStoreTo(bytes32)", +"91816981": "getProfitPercentForData(uint256)", +"91818130": "totalCharityPrize()", +"91828a2e": "extra_bonus_duration()", +"918307fd": "getRemainOfStage(address,uint256)", +"918359c6": "needsBirth()", +"91837535": "getgateway()", +"9183d360": "CreateINDI(address,uint256)", +"9183d8ab": "returnAndRevert(bool)", +"9183fd01": "getSeedPrice()", +"91854684": "pollBallot(uint256,uint256)", +"91858734": "takeControl()", +"9185c694": "_deleteAccount(address)", +"9186485a": "readKYC(address)", +"918657cb": "token_information()", +"91872a91": "isEmpty(string,string)", +"9187300e": "getTokensForSale(bool)", +"91876e57": "withdrawAuctionBalances()", +"91878995": "MYCOIN()", +"9188451b": "transferUserGrowthPoolTokens(address,uint256)", +"91885e1d": "nextWeaponID()", +"918898a5": "frozenRules(address,uint256)", +"9188d312": "getCard(uint256)", +"9189a59e": "sweeper()", +"9189edd2": "Zinoder()", +"9189fec1": "guess(uint256)", +"918a15cf": "toEthSignedMessageHash(bytes32)", +"918a2e0c": "AccessoryCollection(uint256)", +"918b8326": "startSto()", +"918c00c6": "LogCommit(uint256,address,bytes32)", +"918c783a": "hasPurchased()", +"918ca01d": "BurnConfirmed(uint256,address,uint256)", +"918d407d": "acceptOffer(uint256,address)", +"918e2c3d": "GetUserExtraData3(address)", +"918f1bb5": "ProjectKudos()", +"918f49ec": "NDCOIN()", +"918f5f74": "setMinBonusTrigger(uint256)", +"918f644e": "getScriptsCount()", +"918f8674": "DENOMINATOR()", +"91914b30": "setTokenUrl(address,string)", +"91915ef8": "setCapacity(uint256)", +"91916a5e": "Test(uint256,uint256)", +"9191b520": "PlatinumToken(uint256,string,uint8,string)", +"919203a0": "moveTokensFromStockToSale(uint256)", +"91923d7f": "delSuperInvestor(address)", +"9192f48e": "setLocked(address)", +"9193b2e3": "request(address,uint256,uint256,address)", +"9193ba0b": "createForwarder(address)", +"91959fe3": "getCalFactor(uint32)", +"91962739": "setWhiteListOwner(address)", +"9196bdd5": "ggc(address)", +"9196e481": "getAllSteps()", +"91970cba": "saftInvestorAllocation()", +"919747fb": "depositFunds(address)", +"91975e22": "ManagerDisabledEvent(address)", +"91977c56": "setDTR(address)", +"9197b7cd": "earlyWithdrawal()", +"919823df": "getHashExists(string)", +"919840ad": "check()", +"91988783": "IMDEXdepositToken(address,uint256)", +"9198e08c": "Linfinity()", +"919987bc": "rewardPool_()", +"9199a8bb": "dnnHoldingMultisig()", +"919a41dd": "endFight(uint256,uint256)", +"919aa4fa": "ZIGICOIN()", +"919acf1e": "getperiodlasttime(address,address)", +"919b30cf": "FTXToken()", +"919baade": "ProposalsEntity()", +"919be880": "createEscrow(bytes16,address,address,uint256)", +"919beeb1": "calculateRate()", +"919bf699": "EggsPurchased(address,uint256,uint32)", +"919c9d4a": "getAfterIcoPeriod(uint256)", +"919ca82d": "EtherprisesLLC()", +"919d3401": "MAXIMUM_ICO_TOKENS()", +"919d8bb2": "TokenTrader(address,address,address,uint256,uint256,uint256,uint256,bool,bool)", +"919e144c": "predict(uint16,uint8)", +"919e1967": "Ubiq()", +"919e7f42": "supportNewMoon(address)", +"919edc7c": "getChainySender(string)", +"919f31c2": "Ankr()", +"919f8cfc": "makerDepositEther()", +"919f90ca": "sendCommissionToOwner(uint256)", +"91a01414": "getPreviousBlock(uint256,uint256)", +"91a0ac6a": "equity()", +"91a0ba00": "icoRound1()", +"91a1896e": "setReserveForFoundersSecond(address)", +"91a1f16a": "getMaxWin()", +"91a266ac": "totalEthCharityRecieved()", +"91a34006": "getInitializeOutcomeValue()", +"91a3cec0": "receiveEtherFormOwner()", +"91a49300": "purchaseEnable()", +"91a553df": "developer_add_cost_of_transfers(string)", +"91a57544": "affiliatePercentage()", +"91a5b0c7": "bestSum(uint8[])", +"91a67e1e": "tokenFrozenUntilBlock()", +"91a73892": "getOrderStateHelper(uint256,uint256)", +"91a73a27": "cleanSellShareOutput()", +"91a7aa37": "Chain2()", +"91a852f6": "changeTicketFee(uint256)", +"91a89712": "link(address)", +"91a90014": "_updateTokenRates(uint256)", +"91aa94f1": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,bytes32)", +"91aabeb5": "checkArea(uint32[],address)", +"91aac477": "addNacToNetf(uint256)", +"91aadff6": "OPEN_SALE_STAKE()", +"91aaf2e9": "presaleTokenAmount(address)", +"91ab0ca0": "authorisedContract()", +"91ac2c3f": "testCreateElection()", +"91ac46f5": "centRaised()", +"91ac7e65": "indexOf(uint256)", +"91ac96a9": "pendingWinners(uint256)", +"91acd8fb": "DEJToken()", +"91ad1ada": "VernamPrivatePreSale()", +"91ad27b4": "getInterval()", +"91ad48a1": "DataToSetting(uint8,bool,uint8)", +"91af8d14": "recalculateTopScores(uint256,uint256,uint256)", +"91afc432": "setUpdaterAddress(address)", +"91b1a02a": "SwissCryptoExchange(address,address,address,uint256,uint256,uint256)", +"91b22ebf": "getTokenAmountPerHeritor(address,address)", +"91b23419": "developerFund()", +"91b2413f": "HplusToken()", +"91b25b35": "revokeAndSetNewMember(uint8,bytes32,address)", +"91b2b30e": "LogI(uint256)", +"91b43d13": "fundingEndBlock()", +"91b4a0e7": "Difficulty()", +"91b4ded9": "lastPauseTime()", +"91b56822": "gameTick(uint256)", +"91b584f3": "_insertValidator(address,uint256)", +"91b6a086": "WithdrawToInvestor(address,uint256)", +"91b7ad06": "calculateTokens(address)", +"91b7d3e0": "redeemSurplusERC20(address)", +"91b7f5ed": "setPrice(uint256)", +"91b8a49a": "lastDonor()", +"91b97997": "endFirstWeekICO()", +"91b9b640": "getDApp(string)", +"91ba5d6a": "preICOMany(address[],uint256[])", +"91baabba": "CCLToken()", +"91bb2534": "impl_price()", +"91bb4816": "m_Database()", +"91bbb21a": "trialDeadline()", +"91bbb87b": "GetPurchaseInfo()", +"91bbbe4d": "_payoutTaxes(uint256)", +"91bbd6f6": "VeiagToken(address)", +"91bbdcc7": "convert()", +"91bc85a9": "SetTrustee(address)", +"91bc8a45": "bonusAdd()", +"91bdc458": "blockNewSpinnerPurchase(uint256)", +"91bdf9da": "isTen(uint8)", +"91be0b31": "setPriceChanger(uint256)", +"91be2f8d": "changeCCCoinAddress(address)", +"91be90c8": "_dust(address)", +"91bf9c50": "test_CampaignRulesFail()", +"91bfeb98": "CrystiumToken()", +"91c03391": "TraToken()", +"91c05b0b": "distribute(uint256)", +"91c11cae": "disputeTransaction(uint256,uint256)", +"91c1e2c1": "burnedBalanceOf(address)", +"91c20375": "setArtEsc(string,string)", +"91c23928": "divSafe(uint256,uint256)", +"91c259ea": "transferby(address,uint256)", +"91c27b2a": "setTransTimes(uint32)", +"91c3352e": "test_invalidEmptyEqVal1()", +"91c3e5ee": "rb(address)", +"91c3e7f8": "showlvzhou(address)", +"91c4529f": "isBlacklistSpender(address)", +"91c49026": "rebalanceEnclaves(address,uint256)", +"91c4c78f": "fund(address,uint160)", +"91c62a5a": "LogBounty(address,uint128,string)", +"91c71e2b": "disableLock(bool)", +"91c72d88": "holdSubscriptionOffer(uint256)", +"91c79a9a": "CON0217()", +"91c827a0": "AddOwnerAddress(address,address)", +"91c873cb": "getAdminContract(address,uint256)", +"91c8e336": "exchangeSupply()", +"91cadaf6": "evolvePrice()", +"91cb4316": "endOf24H()", +"91cb98af": "getPendingAmount(uint256)", +"91cca3db": "dev()", +"91cd242d": "setMeta(bytes32,bytes32,bytes32)", +"91cd450c": "AlienFarm()", +"91cd7e9a": "ChannelDeleted(address,address,address)", +"91cdecab": "TOTAL_DINOTOKEN_SUPPLY()", +"91ce8ca9": "IQTCrowdsale()", +"91ce8e04": "setTwo(uint256)", +"91cee1fd": "baseStats(uint256,uint256)", +"91cef6a8": "payAffiliate()", +"91cf2164": "transferFunction(address,address,uint256)", +"91cf7aca": "upgradeFrom(address,address)", +"91cfb7b6": "ceilings(uint256)", +"91d0b3fd": "_mine(address,uint256)", +"91d0dd17": "accrueCouponsPerXTokenETH()", +"91d15735": "left11(uint256)", +"91d15a91": "weiRaisedIco()", +"91d1addb": "plutocracylvlAchieved(string,string)", +"91d23a1a": "lastRewards()", +"91d2939d": "per(uint256,uint256)", +"91d4357b": "myBonus()", +"91d43b23": "right76(uint256)", +"91d462d9": "hashUnderlyingPrices(uint32,int256[])", +"91d558b7": "startCrowdsaleY0(address)", +"91d55c41": "RuiXueToken()", +"91d5d7d6": "out1Done()", +"91d6212a": "address5a()", +"91d625e5": "setupCore(string,string,address,uint256)", +"91d6367b": "reserveForTeam(address,uint256,uint256)", +"91d739ea": "updateRegistratorStatus(address,bool)", +"91d76bbb": "getTotalMigrated()", +"91d781ba": "kkTestICO1()", +"91d80948": "_checkAndCallTransfer(address,address,uint256,bytes)", +"91d8b14e": "BuyTickets()", +"91d91df3": "FesBerto()", +"91d96541": "refundedSat(address)", +"91da7aa8": "transferAndCall(address,uint256,uint256[])", +"91da9178": "WALLET_LB_ADMIN()", +"91db7b0d": "updateLockPeriod(uint256)", +"91dbd4c3": "payTournamentWinner(uint256)", +"91dc077b": "submitApplication(string,string,string,string,string,string,string,string)", +"91dc11fe": "setClaimParameters(uint256,uint256)", +"91dc1b1d": "mintCUSD(address,uint256)", +"91dc6d36": "pauseForDividend()", +"91dc956d": "addLog(string)", +"91ddadf4": "clock()", +"91de4f88": "claimCoreTeamsTokens(address)", +"91de5474": "getPurchaserCount()", +"91ded8fa": "getTokenByAddress(address)", +"91df0c08": "addReserve()", +"91df9562": "BSPToken()", +"91dfa960": "report(uint16,uint16)", +"91dfe428": "addFees(uint256,uint256)", +"91e05922": "contractICO()", +"91e078bb": "startAuction(uint256,uint256,uint256)", +"91e0a5a0": "checkHolderStep(address)", +"91e0b6c0": "ProofPublicVote()", +"91e0e39c": "resetDragonBalance(address,uint256)", +"91e1397d": "rcnFund()", +"91e145ef": "f(string)", +"91e192b7": "MintedToken(address,address,uint256)", +"91e1cc5a": "freezeAccount(address,uint256,uint256,uint256,uint256,uint256)", +"91e22c90": "interfacesSupported(address,bytes4[])", +"91e23a4d": "updateInterCryptonode(bytes32)", +"91e2f2c5": "HoQuToken(uint256)", +"91e30ec3": "buyDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"91e3387b": "numBrews()", +"91e50314": "isActivityCore()", +"91e52b91": "buySecond()", +"91e569c3": "recordBook(address)", +"91e59bcf": "testSetName()", +"91e6d028": "getFIRST_STEP_LIMIT()", +"91e6f274": "FirstUserDestroy()", +"91e7137d": "price2ndWeek(uint256)", +"91e732b6": "setInvestRestriction(uint256,uint8,bool)", +"91e79c72": "hodlerTotalValue()", +"91e7f7bc": "claimVotingRight()", +"91e8609f": "getParentId(bytes32,uint256)", +"91e863ca": "setBigPromoInterval(uint128)", +"91e88106": "abiLength(address[])", +"91e8d3dc": "testBitOrFailIndexOOB()", +"91e8fc34": "createPipe(uint256,uint256,bytes32)", +"91e9f106": "historyWinner(uint256)", +"91ea294e": "LogSetWithdrawer(address)", +"91ea4d07": "snatchedOn()", +"91ea59eb": "buyGuaranteed(address)", +"91ea8a05": "add(bytes32,bytes32,uint256)", +"91eb97ea": "pharmatrix(uint256)", +"91ebc861": "noFeeTransfer(address,uint256)", +"91ec1623": "_shutDown()", +"91ec845e": "isAtMost(int256,int256,string)", +"91ec910e": "OwnableImpl()", +"91ecda3c": "Menu10(address)", +"91ed6851": "createPromoCompany(address,string,uint256)", +"91ede45f": "Deposited(address,uint256,uint256,uint256)", +"91ee7bbf": "dispute(bool)", +"91ef14b4": "setApprove(address,address,uint256)", +"91f02379": "hundredKInvestor()", +"91f02f9c": "DelayChanged(uint256)", +"91f09f7c": "redeemPowerTokenBal()", +"91f11a9c": "lastWinNumber()", +"91f1cf05": "crafting()", +"91f1f310": "totalOffers(uint256)", +"91f2700a": "drop(address)", +"91f2ebb8": "heir()", +"91f34dbd": "transfer(uint256,address[],uint256[],uint256[3],bytes,bytes,bytes)", +"91f39f10": "getContactAddressByIndex(uint256)", +"91f3c4a2": "GSY(uint256,string,string)", +"91f4b7ff": "soulBookPage(uint256)", +"91f5637a": "frozenBalanceCount()", +"91f5c3a8": "donateAndCreateGiver(address,uint64)", +"91f5f3c9": "MAX_TOKEN_GRANTEES()", +"91f6c7e6": "getCurrentICOPhase()", +"91f72ebb": "is128Bit(uint256)", +"91f7cfb9": "availableAmount()", +"91f85480": "updateValidOrg(address,address,bool)", +"91f8668e": "setTokenUri(uint256,string,string,string,uint256)", +"91f90157": "highestBidder()", +"91f9bb85": "setAdvisorVault(address)", +"91f9f4a2": "getRateIncludingBonus()", +"91fa0555": "getParentAddress()", +"91fa196d": "getDesignatedReportReceivedTime()", +"91fa2df4": "addPaid(bytes32,uint256)", +"91fb4583": "reachedMajorityForTeam(uint256)", +"91fb9437": "isStoring()", +"91fc437e": "nameTaken(string)", +"91fc5696": "confirmBusinessOwner(address)", +"91fc7c70": "TreeCoin()", +"91fd1c7d": "getSenderByHash(string)", +"91fdbb55": "releaseUrl(uint8)", +"91fdf6b1": "electActiveTranscoder(uint256,bytes32,uint256)", +"91fe5a64": "_totalBurnedTokens()", +"91fe7bab": "mintTokensWithApproval(address,uint256,address)", +"91fea350": "checkFreezeValue(uint256)", +"91fed1c0": "RaffleResult(uint256,uint256,address,address,address,uint256,bytes32)", +"91feea93": "withdrawBoth(address,uint256,uint256)", +"91ff6baf": "requestsFunded()", +"92008bfa": "setResourcesSecondaryManager(address)", +"9200b04c": "myDeposit(address)", +"9201ac94": "getCON()", +"9201de55": "bytes32ToString(bytes32)", +"92031600": "setBonuses(uint256[],uint256[],uint256[])", +"92039b87": "balanceVested(address)", +"9203cb9e": "forwardWin(address,address,bytes,bytes32,bytes)", +"9204764f": "setHookOperator(address)", +"9204b2bd": "maxVeriAmount()", +"9204c013": "QKCCoin()", +"9205ab3c": "sendRefund()", +"9205dce7": "Usdcoins()", +"9205ec4d": "refundSponsorship(address,uint256,uint256)", +"9205fbc2": "testAuthorityAuth()", +"92066346": "setCastleLootDistributionThreshold(uint256)", +"92069ebd": "_getMarketPrices()", +"920775d4": "subVirus(address,uint256)", +"92093dd6": "getLastResult()", +"92093e7d": "addUserRefBalance(address)", +"92099fdb": "refundableEthBalanceOf(address)", +"9209b3c0": "getCrtDetails(bytes)", +"9209eebe": "SentToContractor(uint256,uint256,address,uint256)", +"920b0280": "noIcoPeriod()", +"920b3a7e": "getFundersCount()", +"920bb680": "ledgerWallet()", +"920c94df": "BuyTicketForOther(address,uint8,uint8,uint8)", +"920dce19": "getAngelCardSeries(uint8)", +"920dd47b": "first_partner_address()", +"920dfe52": "EFARMCoin()", +"920e3c96": "setUserStatus(address,uint8)", +"920e4da9": "created(string,string,address,uint256)", +"920ffa26": "ownerOf(string)", +"9211448f": "finalizeClaim(bytes32,string)", +"921193cf": "changelp3(address)", +"921200ed": "setBonusTokenRateLevelFour(uint256)", +"9212051c": "numJobs()", +"921233b9": "addBuyRequest(bytes32,address)", +"92123470": "mintTo()", +"921237a4": "createPlayer(address,address)", +"92127126": "canTransferByPartition(bytes32,address,uint256,bytes)", +"9212d0c1": "closeBetsIfEventNotSuccess(bytes16,bytes16,uint256,uint256)", +"92140775": "prefixedTest(uint8,bytes32,bytes32,address,address)", +"92140bb9": "getTransactionByTransactionAndEntityId(address,uint256)", +"921456e7": "modifierEx()", +"921496a9": "adminWithdrawTokens(uint256)", +"9214b644": "married()", +"9214e527": "Crowdsale(uint32,uint32,uint256,address)", +"9215b58e": "GoldMineChain(uint256,string,uint8,string)", +"9216728a": "cooWallet()", +"9216b7ad": "winTokenReward()", +"9216cf13": "licenseSalesContractAddress()", +"921710e9": "getShareRewardPercent()", +"9217500c": "setFightAuctionAddress(address,address)", +"9217c438": "getOracleAddress(uint256)", +"921828ac": "commitProposal(string)", +"921b004b": "depositFunds(address,uint256)", +"921b15ae": "LaborHourToken(address,int256,string,uint256)", +"921b2d64": "mintTokens(int256,address,uint256)", +"921b45f7": "checkAndCloseDeposit(uint256)", +"921bd6f0": "upgradeTimestamp()", +"921d72ed": "CreatedAccessory(uint64)", +"921dec21": "registerNameXID(string,uint256,bool)", +"921e1537": "dailyHash()", +"921e7ba6": "withdrawCoins(string,address)", +"921f5dec": "getBlockVoter(uint256,address)", +"921f98bb": "resolveFailVote()", +"921fb890": "buyGood(address,string)", +"92202126": "ETU()", +"92207bd8": "getMyCarsIdxCount(uint256)", +"9220d426": "_nowDateTime()", +"9220d5fa": "DiminishToken(address,address)", +"92223e7a": "BlueRedTokenERC20(uint256,string,string)", +"9223de05": "contributionAmounts(address)", +"922427de": "canSort()", +"922497fc": "regularTokenMaxSales()", +"92250c6a": "localBuy(uint256,address,address)", +"922587ff": "addMintable(address)", +"9226084e": "tier_cap_1()", +"92262375": "transferByDate(address,uint256[],uint256[])", +"922775e3": "createNewTrade(address,uint256,uint256)", +"92277933": "abc()", +"9227bed6": "bucketAmount()", +"922856da": "getPicksForUser(address)", +"9228e90d": "developer_BSR()", +"9229c504": "new_mainPlayer(address)", +"9229e3cd": "submitProof(bytes32,bytes32[],uint256)", +"9229f3c1": "KVLToken()", +"922a8425": "paymode()", +"922b01ca": "walkTokenLots(address,address,uint256,uint256,bool,bool,bool)", +"922b041d": "_getStatsSumHours(uint256)", +"922ba128": "calculateCurrDynamicPrice()", +"922bedf7": "mintNFTsNotForSale(uint256[],bytes32[])", +"922c64ef": "batchDistributeTokens(address[],uint256[])", +"922da521": "RocketPoolPresale(address)", +"922dd59a": "icapTransfer(bytes,address,bytes,uint256)", +"922dd7d9": "generateKey()", +"922f17ce": "emptyEther()", +"922f7124": "changeStrategyAddress(address)", +"922fc84b": "taskProcessedNoCosting(uint256)", +"923020d9": "whitelistMainSaleAddress(address,bool)", +"9231e0f9": "setPresidenteDeMesaVerify(bytes32,uint256,bytes32)", +"923211f5": "showLiveDividends()", +"9232494e": "BANCOR_NETWORK()", +"9232fdb5": "addUserExp(address,uint256)", +"9233c030": "_reward(uint256)", +"9233c1d6": "battle(uint256[],uint256)", +"9233d561": "setUnpaidPercentage(bytes32,uint8)", +"92346ed7": "test1(bytes)", +"92348055": "sellSoul(string,uint256)", +"9234c1fd": "MAX_REVEAL_DURATION_IN_SECONDS()", +"92363a42": "createProduct(uint256,uint256,uint256,uint256,uint256)", +"923689e4": "startRecovery()", +"92369bd5": "calculateAndDecreasePhaseSupply(uint256)", +"9237a125": "seedDeposit()", +"9237e074": "manager(uint256,address,string,uint256,bool)", +"9237e61b": "InvestmentSucceeded(uint256)", +"9239520b": "setQuorumPercent(uint8)", +"923a1abb": "SBCE(uint256)", +"923a2e61": "JinGangCoin()", +"923a367f": "PBToken(address,address)", +"923a4227": "CiceroToken()", +"923a69ae": "getCardRevenue(uint8)", +"923b3e75": "publishContractTemplate(uint256,string,address,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"923b9480": "getDatasCount()", +"923b9bae": "EventCreatePet(address,uint256)", +"923ce65f": "draftNewCard()", +"923d566d": "buyKey(uint256,uint256)", +"923db49b": "informOffChainBuy(address[],bytes32[])", +"923de8e2": "checkTransferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,bytes)", +"923e1b84": "sendToEtheroll(uint256,uint256)", +"923e2645": "DonationGuestbook()", +"923f098e": "CLNRefunded(address,address,uint256)", +"923f1788": "convertChest(uint256)", +"923f8455": "BACE_ETH()", +"923f9bae": "testLedgerPayback()", +"923fa0fe": "ChildContract(uint8,address,bytes32)", +"92403b35": "tier2Count()", +"9240551b": "changeCurrentEtherRateInCents(uint256)", +"9240f699": "landmarkSize()", +"92414146": "preIcoWasSuccessful()", +"92414f92": "OpenDate(uint256)", +"92418cf6": "withdrawKncFee(uint256)", +"924320b5": "isMajorityShareholder(address)", +"9243e088": "setEnforceRevisions(bytes20)", +"9244c21e": "preicoUSD()", +"9244f496": "addAddressToWhiteList(address)", +"92450ac9": "setDataColla_AA_01(string,string)", +"9245290d": "changeFeeCollector(address)", +"9246177b": "changeTicketOwner(address)", +"9246ab77": "addWhitelist(address[],address)", +"9246e531": "getSignature(string,int256)", +"924720bd": "pizzaPrice()", +"9247ff59": "getAccountData(uint256)", +"9248019e": "addMonsterIdMapping(address,uint64)", +"924806a0": "returnToken(address)", +"9248d4ec": "getEthNeeded(uint256)", +"92491f21": "subTourFreezingTime()", +"9249993a": "BANCOR_GAS_PRICE_LIMIT()", +"9249bc75": "set_sale_open()", +"9249d865": "getAllLawyers()", +"924b1235": "price1stWeek(uint256)", +"924b39ae": "refundToWallet(address)", +"924b573a": "lastWagerTimeoutTimestamp()", +"924bb1d0": "updateETHPrice(uint256)", +"924c28c1": "ContractInterface(address,address,address)", +"924ca55e": "LindaPresale(uint256,uint256,uint256,uint256,uint256,address,address)", +"924ca61a": "coupon(address,address,uint256)", +"924dd50a": "startSelling(uint8,uint256,uint256,uint128)", +"924dedca": "getEpisodeDataCommand(uint256,uint256,uint256)", +"924e63f6": "setDisputeResolver(address)", +"924f6be0": "CONTEST_INTERVAL()", +"924fdaf6": "drawPorsche()", +"925012f6": "agingTimes(uint256)", +"9250640d": "INIT_TOKENS()", +"925074ca": "getAllPlots()", +"92509c16": "lock_by_manager()", +"9250b080": "picops_user()", +"9250d59f": "setIsSoftCapAchieved()", +"925176d6": "sellRate(uint256,uint256,uint256)", +"92524725": "mintToMany(address[],uint256[])", +"9252e819": "IGCoin()", +"92535862": "custodyCounter()", +"92536070": "RoomManager()", +"925382c0": "setMigrated()", +"92541925": "skynacoin()", +"92549366": "remainingCapInEth()", +"9254c2a8": "changeTotalRemaining(uint256)", +"92550bdd": "applyMigrate(uint256)", +"9256759c": "addressFundAirdrop()", +"9256c71d": "getPriceFeedsByOwner(address)", +"92573a0c": "token_callg()", +"925753d3": "TokenGenerationDisabled()", +"92579f34": "Aracle()", +"92584d80": "finalize(bytes32)", +"92588071": "saveAddress()", +"9258c8f8": "Applicationcoin()", +"9258d5a3": "isIcoRunning()", +"925aa2ad": "purchaseWithEth()", +"925ac216": "isICOOpen()", +"925ad1e7": "collectAllForce(address[],address)", +"925b83a7": "getCobeFriend(uint256)", +"925cbdd1": "createCost(uint256)", +"925cd80d": "contract_start()", +"925d3ec8": "dDowngradeToBasic(bytes32)", +"925f2573": "batchTransferDirectoryToken(uint256,address[],uint256[])", +"925f7239": "veztUserRegistered(address)", +"9260587e": "_removeTokenFrom(address,uint256)", +"92609315": "addAuctionManager(address)", +"9260e726": "giveReward(uint256)", +"9260faf8": "issueForEuro(uint256)", +"9262bba9": "titsTokenAuthor()", +"9262d759": "getAddress(uint256,uint256)", +"9263b559": "ethReceivedMain()", +"9263e371": "mint(bytes32,string,string,string,string,string)", +"9264a169": "tranferFrom(address,address,uint256)", +"9264ee57": "valuePerMicroKey()", +"92656b6d": "calculateHash(address[],uint256[])", +"9265996c": "getEventResult(uint32)", +"92664190": "PriceUpdate(uint256,uint256)", +"92670dc8": "currentBonus(uint256)", +"9267a36d": "founderVestingContract()", +"9267b291": "getGameStarted()", +"9267daba": "depositToGateway(uint256)", +"9268037a": "FortressToken()", +"92682b5f": "PauseOn(uint256)", +"9268e2d6": "setCLOUDForGas(uint256)", +"92698814": "reserved(bytes32)", +"926994e6": "testFailSoftLimit()", +"9269c0a7": "setABalances(address[],uint256[])", +"9269e464": "bountyTokenAllocation()", +"926a2456": "cancelIndexedSale()", +"926a4765": "getRoundStart()", +"926a9af0": "distributeForFoundersAndTeam()", +"926aa0a8": "sendEthTo(address)", +"926b33c6": "playSpecificDoubles(uint256,uint256)", +"926baab2": "proofImpl()", +"926bd180": "isGameVerified(uint256)", +"926c196a": "depositAndTransfer(address,uint256,bytes)", +"926d212e": "createGenerator(uint256)", +"926dfd5e": "becomeYouTubemaster()", +"926f0c7b": "partnersFund()", +"926f949e": "calculateWolkToBurn(uint256)", +"9270040f": "drawHeroLottery(address,bool)", +"92708ce1": "aletoken(string)", +"92710c60": "finalizePublicICO()", +"92716054": "freezer()", +"9271b8df": "totalPaidToFunder(bytes32,address)", +"9271b997": "setHighScore(uint256)", +"92721b86": "dividendRate(address,uint256)", +"9272e3f5": "many_currencies()", +"927319ba": "DCCToken()", +"92731aaa": "changesLocked()", +"927332da": "MaxChildLevel(address)", +"92736527": "freezeGame(uint32,bool)", +"92749978": "minBets()", +"9274c16b": "tokensDistributedToContributors()", +"9275ddd7": "SetFreeQPY(uint256)", +"92760a3e": "loveName()", +"92763585": "uniquePetsCount()", +"927675b8": "run(bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],uint256,uint256,uint256,uint256)", +"92771e0f": "getCertificateMetaData(bytes32,bytes32,bytes32,uint256)", +"927726ea": "_openPrize(uint32,uint32,uint256,uint256)", +"927731c8": "payDepositByCandidate()", +"9278c418": "targetWalletVerified()", +"9279011c": "nextroundlength()", +"927a11b6": "getBranch(uint256)", +"927a4a7b": "transferWithLockAfter(address,uint256,uint256)", +"927a90da": "icoOpen()", +"927aaa7c": "setGeneManager(address)", +"927ac4f5": "approveContractReceiveGameLockedToken(address)", +"927bcac3": "emergencySplitToggle()", +"927c4151": "finalizePresale(address)", +"927c60de": "BIKQuery(address)", +"927d9ab4": "set_building_amount(uint256)", +"927da105": "allowance(address,address,address)", +"927db818": "initPresale(address,uint256,uint256,uint256,uint256)", +"927db81f": "new_entity(address,string)", +"927e434b": "rocketAddFunds(uint256,uint256,uint256)", +"927e69e2": "_getBattleBonus(uint256,uint256,uint256,uint256,uint256)", +"927ed13a": "newClient(uint256,address)", +"927f1086": "MAX_RANDOM_DELAY()", +"927f4be0": "exhaustAfterBattle(uint256,uint256)", +"9280b836": "spreadGold(address,uint256)", +"9280df59": "Swapcoinz()", +"928161ca": "recoverFundsAndDestroy()", +"92817184": "redeemPurchasesForVendor(address)", +"928187a8": "BonumPreICO(address,uint256)", +"9281aa0b": "setWhitelisted(address,bool)", +"9281cd65": "changeApproval(address,uint256,uint256)", +"9281e270": "matchOrders(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes,bytes)", +"92824c24": "changeClaimAddress(address)", +"92829174": "preCrowdsaleTokensWallet()", +"9283032c": "storeWeekUnclaimed()", +"9283da60": "TeamtokenRelease1()", +"9283e6cb": "acquisitionsStatus()", +"92842802": "changeTierAdmin(address)", +"928432c0": "releasedSteps()", +"92844ddd": "_setUserRole(address,uint8,bool)", +"92846ab6": "put_transfer(address,address,address,uint256,bool)", +"92848c9e": "create(uint256,uint256,uint256,uint256)", +"9284cb0c": "getTotalPreSelled()", +"9286904c": "set_doctor(uint256,uint256,string)", +"928693c6": "RusaToken()", +"928771bb": "janPot_()", +"92878bd0": "forwardFunds(address,uint256)", +"9287c877": "getNavLength()", +"92885e86": "CountryPurchased(uint256,address,uint256)", +"9288cebc": "totalRollsByUser(address)", +"92890b09": "SmithToken()", +"92893fb9": "hasAddressVoted()", +"92898900": "allowTokenTransfer(address)", +"928993dd": "setBuyComissionUnits(uint256)", +"928a00d2": "deleteCoin(uint256)", +"928b06b5": "EAsset()", +"928b4cd2": "preICOTokenHardCap()", +"928b685c": "_buyPutToClose(uint256,uint256,uint256,uint256,address)", +"928b792e": "withdrawBonuses(bytes32,uint256,address,uint256,address)", +"928c5fb3": "getArrIntField3()", +"928c82a2": "createAsset(string,string,string,uint256,address)", +"928d09dd": "coreTeamAddr()", +"928d20fc": "_unpackPetValue(uint256)", +"928d4144": "verify(uint256,uint256,string,uint8,bytes32,bytes32)", +"928d81c1": "withdrawERC20Token(address,uint256)", +"928e6592": "sellingPriceInDayOf(address)", +"928e6b16": "getUint(bytes4)", +"928f0cc7": "ChangeStartByManager(uint256)", +"928f16e3": "geCompoundTimestampsFor12Months(uint256)", +"928fca1d": "withDrawlocked()", +"928fd553": "Migrated(address,address,uint256)", +"929066f5": "isParticipant(address)", +"9291b1f3": "tradeDealConfirmed()", +"92925c3b": "supplyTokens()", +"9293cc10": "TOU(uint256,string,uint8,string)", +"9293eb2f": "totalScammedRepaid(address)", +"9293f41e": "sendInviteDividends(uint256,uint256,uint256,uint256[])", +"92940bf9": "transferERC20Token(address,address,uint256)", +"92946284": "_placeSellTokenOrder(address,uint32,uint256)", +"9294e012": "sendOracleData()", +"92956506": "StarxCoin()", +"92958b7d": "markTokensToSell(uint256,uint256)", +"9295d038": "loyaltyPart()", +"92968125": "getUserDetails(address,uint256)", +"92979037": "teamTwoDivsUnclaimed()", +"9297afa2": "Eliminate(address,uint256)", +"9297c24c": "command()", +"9297d758": "DiceManager()", +"929911be": "takeSnapshot(address)", +"9299e552": "cancelListing(bytes32)", +"9299f294": "_buy()", +"929a3c18": "EMGwithdraw(uint256)", +"929a79b1": "getTitle(uint256)", +"929aa851": "maximumTokensForFifth()", +"929ac519": "changeOwnersWallet(address)", +"929ba8bf": "transferFromRwrd()", +"929c4649": "startUpgrading()", +"929c52a7": "changeClosingTime(uint256)", +"929d2033": "takeUpWork()", +"929de7c9": "setData_21(string)", +"929e626e": "getShareDistribution(bytes32)", +"929e902d": "curVotes()", +"929ec537": "getLockedAmount(address)", +"929f11ea": "withdrawOwnerAmount()", +"929f8dd4": "createBet(address,address,uint256,bytes32[])", +"92a04621": "maxPurchaseNum()", +"92a08dd1": "getCustomField(uint256,bytes32)", +"92a0fd64": "reserveTokenWallet()", +"92a11827": "canRevokeVesting(address,address)", +"92a20d0c": "ANONIMX()", +"92a2b44b": "offerTkn(uint256,uint256)", +"92a38e71": "createOpenValentineRequest(string,string,string)", +"92a39634": "VoltOwned(address)", +"92a42704": "verifyOwnership()", +"92a48bea": "setOfferContract(address)", +"92a4cc25": "readFrom(uint256,int256)", +"92a5f340": "BasePrice()", +"92a69395": "setTotalAirDrop(uint256)", +"92a70756": "m_thawTS()", +"92a70c42": "deployerHash()", +"92a73fb8": "testbool(bool)", +"92a781d8": "changeBaseValue(uint256)", +"92a7843c": "lastRefundedIndex()", +"92a79148": "getCryptoVersusReward()", +"92a793d0": "release_3()", +"92a81127": "BasicMilestones(address,address,bool)", +"92a8424d": "setPercentageCW(uint256)", +"92a93d33": "payAltCoin(bytes32,address,address,uint256,uint256,bytes)", +"92aaa019": "Inventor()", +"92abb859": "overrideBlock()", +"92acb4d6": "contributorList(address)", +"92ad728b": "staff_2()", +"92ae0530": "canUpdateFrontWindowAdjustmentRatio()", +"92aea05a": "expLimited(int128,int256)", +"92af0605": "playSystem(uint8,uint8,uint8,address)", +"92af7ce0": "throwsWhenGettingTokensWithEndedSale()", +"92afac6d": "reserveY1()", +"92afc33a": "ROLE_MINTER()", +"92b03120": "CONTRIBUTION_START()", +"92b0c5b2": "pow(int256,int256)", +"92b0d721": "mold(bytes32,uint256)", +"92b0fed8": "ChannelFactory()", +"92b1696d": "CNYToken(uint256,string,uint8,string)", +"92b18819": "getPoolFirstExpertStaker(uint256)", +"92b19872": "changemincap(uint256)", +"92b1b0ce": "RachelToken()", +"92b1b418": "tokenFallbackTest(address,uint256,bytes)", +"92b25a71": "Wallet(bytes32)", +"92b3228c": "getIreg()", +"92b39bf4": "assignPatient(uint256,uint256,uint256,uint256)", +"92b46390": "changeDevAddress(address)", +"92b4b68a": "get_bettor_nfo()", +"92b4bb50": "rps()", +"92b4ddeb": "phase_3_Time()", +"92b6641a": "hardCapHigh()", +"92b6ebfa": "getPreIcoBonus(uint256)", +"92b7bd27": "removeOwner_(address)", +"92b7bfbb": "TransferRate()", +"92b7d5b9": "getCurrentGaslimit()", +"92b863f3": "AbabPreICOToken()", +"92b87751": "_balanceOfUnclaimedMilk(address)", +"92b9308c": "getRespectiveValue(address)", +"92b96432": "setBpTime(uint256)", +"92b9fe8b": "Xenon()", +"92ba4ba6": "GridMember(string,uint256,bool,address,address)", +"92ba77ca": "setVeto(uint256,bool)", +"92bad6f4": "getNumber(uint256,uint256,uint48)", +"92bb3e6a": "setCoverImage(uint256,bytes)", +"92bbf6e8": "E()", +"92bc3251": "getCuts()", +"92bccb80": "pauseRedemption()", +"92bcf0d5": "ICO_PHASE2_LIMIT()", +"92bd38bc": "fundCampaign(uint256)", +"92bd3f16": "mainsaleTotalNumberTokenSold()", +"92bdf9ba": "lockedCollateral(address)", +"92be2ab8": "setRegisterFee(uint256)", +"92be5d13": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint256)", +"92be675f": "Y1_lockedTokenAmount()", +"92bec526": "GameChannelConflict(address,uint256,uint256,address,address,uint256)", +"92bec5c3": "distribute(uint256,uint256,address)", +"92bf2bf1": "changeMinimumContribution(uint256)", +"92c00590": "getAddReserveSignatures()", +"92c00a3f": "transferState()", +"92c00f3c": "investorsTokens()", +"92c19394": "packStore(address)", +"92c2bcb4": "changeRecipient(address)", +"92c31e61": "ZOINToken()", +"92c40344": "getReferralCode(address)", +"92c4a5ed": "MinBetUpdate(uint256)", +"92c537e9": "hatchStartTime()", +"92c54f92": "sit(uint8)", +"92c5769d": "unlockAddressAfterITO(address,address)", +"92c6b697": "claimGanaTokens()", +"92c6bf28": "getWalletsData()", +"92c70af1": "MAX_UN_LOCK_TIMES()", +"92c787ae": "register_recurcively(uint256)", +"92c8412f": "buykey(uint256)", +"92c87280": "joinProvider(uint256)", +"92c88a40": "CollectibleToken()", +"92c8eb96": "DSFalseFallbackTest()", +"92c9a11a": "getPrices2(uint256,uint256,uint256)", +"92c9a926": "stateStartDate()", +"92c9a9e2": "activateDestruction()", +"92ca3a80": "SingleTransact(address,uint256,address,bytes)", +"92cb5f19": "TokenTemplate(uint256,string,uint8,string,address)", +"92cb9030": "getFeeWindowForForkEndTime()", +"92cbda09": "subbtycmoney(address,uint256)", +"92cbeb59": "OracleBitstamp()", +"92cc2c94": "drainRemainingTokens()", +"92cd1ff2": "ETH_DECIMALS()", +"92cd2b99": "asciiToUint(bytes1)", +"92cdaaf3": "fulfillEthereumPrice(bytes32,uint256)", +"92cdb7d5": "deathData_a15()", +"92cf1d49": "setStop()", +"92cf9d45": "scriptAddresses(uint256)", +"92cfd461": "_createMedal(address,uint8)", +"92cfebd6": "LanaCharleenToken(uint256,string,string)", +"92d09ceb": "collateralAmount()", +"92d09f22": "pendingInvestContracts(uint256)", +"92d0d153": "t()", +"92d16464": "gameIsOver(uint256)", +"92d1abb7": "CONVERTER_CONVERSION_WHITELIST()", +"92d25259": "iBlock()", +"92d267c1": "setEthUsdRateInCent(uint256)", +"92d282c1": "Send()", +"92d2f118": "burn(uint8)", +"92d33200": "MAX_CRATES_TO_SELL()", +"92d3be79": "escrowWallet()", +"92d42475": "bbReserveWallet()", +"92d44650": "tokenApproves()", +"92d4d9ac": "verify(bytes32,address,uint8,bytes32,bytes32)", +"92d519de": "ATSXToken(address,address)", +"92d588a0": "INITIAL_COINS_FOR_VIPPLACEMENT()", +"92d59aff": "Take_payout()", +"92d60433": "CirculatingSupply()", +"92d66313": "getYear(uint256)", +"92d68619": "Multiplication(int256)", +"92d69a39": "addNodesToList(string,address)", +"92d7b620": "judge(bytes32[13],uint256,bytes32[],bytes32[],bytes32,bytes32,uint256[4],bytes32[10],uint256[4])", +"92d7f787": "getAccountWhitelist(uint256,uint256)", +"92d8c8cf": "setupImportFee(address,uint256)", +"92d98e95": "content(string,uint256,address,uint256,uint256,uint256)", +"92d996d7": "getPopularityByOffset(uint256)", +"92d997bd": "QuantityInitial()", +"92d9e3b8": "isAcceptingPayments()", +"92da29d2": "validPurchase(uint256,uint256,bytes)", +"92da856d": "currentStepIndexAll()", +"92dac258": "getAuctionItems(uint256[])", +"92daec51": "setLastBuyer(address)", +"92dbf585": "appendEarlyPurchase(address,uint256,uint256)", +"92dcf35d": "fourthExchangeRatePeriod()", +"92dd1246": "updateListReq(uint256,uint256)", +"92dd38ea": "arrayaccess(uint256)", +"92df61e8": "withdrawTokensFor(address)", +"92df6e91": "fortune_limitbreak()", +"92df94ec": "updateDream(address,string,string)", +"92dff48a": "backers()", +"92e0ba2a": "goldBought()", +"92e11e24": "teamAmountLeft()", +"92e16740": "scheduleOraclize()", +"92e18d9f": "setYcmContractAddress(address)", +"92e1ab17": "includesAddressesSet(address)", +"92e33d14": "enableWithdraw(bool)", +"92e405ac": "transferPartner(address)", +"92e41c69": "identityEthAddress()", +"92e4226a": "nextTransferFeeAbs(uint256)", +"92e423b5": "agent(address)", +"92e4b733": "_transferTokens(address)", +"92e4b8a4": "collectAuthorizedPayment(uint256)", +"92e4cd75": "icoTokensUnsold()", +"92e598f3": "test_fourInvalidEqInt()", +"92e5c9c9": "isBusinessOwnerConfirmed(address)", +"92e8202b": "withdrawInvestmentsOwner(address,address)", +"92e8438c": "issueTokensMulti(address[],uint256[])", +"92e8d866": "DailyGrowthUpdate(uint256)", +"92e9fd5e": "ColdWallet(address,address)", +"92eaa642": "transferLoveStory(bytes16,bytes32,bytes32,uint256)", +"92eada50": "lastBlock_a16Hash_uint256()", +"92eb35bc": "preSaleBonuses(uint256)", +"92ebf860": "invalidateTaskListingAtIndex(uint256)", +"92ec6ea8": "updateAsset(uint256,string,uint256)", +"92ecf577": "getCurrentTerm()", +"92ecf690": "grantToSetUnburnableWallet(address,bool)", +"92ed888b": "CcifToken()", +"92ee0334": "currentUser()", +"92eeee63": "createAndBuyAllAmount(address,address,address,uint256,address,uint256)", +"92eefe9b": "setController(address)", +"92efd277": "countOfDeedsByOwner(address)", +"92f00233": "minterContract()", +"92f00d37": "TalkToExpertToken()", +"92f1fc7d": "bytes32_to_bytes(bytes,bytes)", +"92f351f9": "openTimer()", +"92f461ed": "getTeamsOfOwner(address)", +"92f48846": "updateTokenSellAmount(uint256)", +"92f4d225": "spankToken()", +"92f52ddf": "DICE()", +"92f53757": "GLAM()", +"92f5cea7": "bytes32ToString(bytes32,bytes32)", +"92f692ea": "setInvitationValidPeriod(uint256)", +"92f6a74f": "totalTokenCapToCreate()", +"92f7ba17": "MELONPORT_COMPANY_STAKE()", +"92f8de45": "MXToken()", +"92f926e5": "makeMoveBro()", +"92f96115": "setPartialTransfers(address,bool)", +"92fa1453": "BankAccount()", +"92faad99": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256)", +"92fb4acd": "terminatePackage(address)", +"92fb7ef8": "burnPoll(uint256)", +"92fd1c2d": "bat_match(uint256[])", +"92fd1f01": "getPayeeAddress(bytes32,uint8)", +"92fe028b": "PokerWinner()", +"92fe4098": "b32ToBytes(bytes32)", +"92fee51a": "setICORatio(uint256)", +"92ff0d31": "transferable()", +"92ff3751": "getMatchHomePlayers(uint256)", +"92ff4be4": "finalLottery()", +"92ff7859": "newFutureLottery(uint256,uint256)", +"93003033": "tokenSalesAll(uint256)", +"93004e62": "initPayoutTable(uint256,uint256)", +"93012d5f": "Loan(uint8)", +"9301bc88": "mapping(address,uint256)", +"9301eb36": "setItemOption(uint256,string)", +"9303633e": "tier_rate_2()", +"930429ea": "setFOUNDERS_POOL_ADDR(address)", +"93046a13": "withdrawEtherPayment()", +"9304ddc8": "setUnitCreationFee(uint256)", +"93051424": "KIUSToken()", +"9305b0f8": "WorldSafetySecurityToken()", +"9306099f": "GxOrders(address)", +"930622ed": "assignedAmountToMarketExpand()", +"9306635a": "PETRO(uint256,string,uint8,string)", +"93072684": "revokeDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address)", +"9307ca0f": "houseKeep(int256,uint256)", +"93080cd4": "replaceChannelContractAddress(address)", +"9308151b": "crowdSaleTokens()", +"9308353f": "payin()", +"9308a865": "total_raised()", +"930916b2": "setInviteCode(string)", +"930a0daa": "checkMinimumQuota(address,uint256)", +"930a80b4": "testAuthorizedSetPackage()", +"930a9d92": "tradeOrder(address[3],uint256[5],int256,int256,uint8,bytes32,bytes32)", +"930ae8b0": "setSaleFlag(bool)", +"930b7a23": "approveOnce(address,uint256)", +"930bbbed": "changeBeedingCost(uint256)", +"930c0bba": "getWithdrawalEntryForFunder(address)", +"930c1198": "crowdsale(address,uint256)", +"930c2003": "victim()", +"930c57f3": "PublicSale(address,address,uint256,uint256,uint256)", +"930cb83e": "registerUsers(address[],uint256[],uint256[],uint256[],uint256[])", +"930cbf89": "ProposalAdded(uint256,address)", +"930cd62e": "getIcoInvestorsAddressesCount()", +"930d54b4": "revealSeckey(uint256,bytes32)", +"930db1ab": "setHijackPrice(uint256)", +"930ddb8e": "getIdea(address)", +"930e1173": "tokensReadyForRelease(uint256)", +"930e23b9": "_STCnContract()", +"930ed251": "getSavedVar()", +"930f5fbe": "setApplicationChecksum(bytes32)", +"930fed29": "EnkronosToken()", +"931010eb": "tokPrizes(uint256)", +"93107071": "PDAToken()", +"9310ba96": "TIX(uint256,address,uint256[],uint256[])", +"93119312": "returnMoney()", +"9312434e": "cryptocompareUsdOracleUrl(bytes32)", +"931274c8": "createContractScene(string,uint256[])", +"9312766d": "BSTokenData(address)", +"9313053e": "createItems(address)", +"93138faa": "isProviderParamInitialized(address,bytes32)", +"9313919a": "multipleShotTokenRepartition(uint256,uint256)", +"9313dc43": "claimTokensFromErc677(address,address)", +"9314be9d": "lock(bytes32,bytes32)", +"931634fd": "PGTBToken()", +"93167204": "teamTokensPercent()", +"931688cb": "updateBaseURI(string)", +"9316c3e7": "transferBulk(address[],uint256[])", +"931742d3": "commissionAddress()", +"9317cb37": "CUTOFF_PRESALE_ONE()", +"9317d6d3": "totalReceived(bytes32)", +"93183dc9": "paymentManager(address,uint256)", +"93192c65": "ProposalAdded(address,uint256,uint256,string,bytes32)", +"931983ad": "Connection(address,address)", +"9319f44d": "rateTierNormal()", +"931a4c5b": "maxContributionPhase2()", +"931a5256": "addOrder(uint256,uint256,address,address,uint256,address)", +"931b3385": "claimToken(address,string)", +"931c0040": "carrotsMultiplier()", +"931c6246": "VestingWallet(address)", +"931c8ba7": "count_products()", +"931cd0cc": "setBQL(uint256)", +"931dab50": "allocationAmount(uint256)", +"931df75f": "validateProposedThroneName(bytes)", +"931e44e2": "BuyLandsByEth(uint256)", +"931e7daa": "BettingKing()", +"931fbdd8": "Trenggalek()", +"9321cb7d": "SGT()", +"9321dc5f": "initRequest(uint256[])", +"9321e603": "changeMtcDailyLimit(uint256)", +"932354c1": "updateLocation(string)", +"93237833": "CONTRACT_HOLDER_BONUS()", +"9323eaad": "awardUnitRafflePrize(address,uint256)", +"9324dfff": "addWhitelistedTokenAddr(address)", +"93253a9d": "PublickOffering()", +"93257d33": "CheckForFloating(address,uint256)", +"93272baf": "getTokenType(address)", +"93275889": "ChangeTax(uint16)", +"9327891e": "testSetRole()", +"932838a1": "setCell(address,uint256)", +"9328bfc1": "getNumMessages(address,address)", +"9328fa02": "capitalAllocatedTo(address)", +"9329066c": "getJackpot()", +"93299395": "revokeEditAgentAuthorization(address)", +"9329f2fe": "postico_startdate()", +"932a0ee7": "getShowTextBytes96()", +"932a7b2e": "addApp(address,address)", +"932adda2": "newNode(bytes32,bytes32,bytes32,bytes32,bytes32)", +"932ae363": "buyerNumDeals(address)", +"932bead7": "updatePlanetURL(uint256,uint256,uint256,string)", +"932c1081": "closedHour(uint8)", +"932c360d": "SpaceRegistry()", +"932c90f3": "SUPPLY_FOR_TEAM()", +"932cd73e": "tokensReleasedToTeam()", +"932db761": "profitsFromBitnationDebitCard()", +"932def2e": "tgrCurrentStage()", +"932e1c76": "distributeEbyteForETH(address[])", +"932e2e95": "_withdrawEthereum(uint256)", +"932f4588": "RaffleResult(uint256,uint256,uint256,address,address,address,uint256,bytes32)", +"932f9f89": "testThrowInvalidProvider()", +"932fad1f": "totalWageredForOutcome(uint8)", +"932fd99f": "toHighestDenomination(uint256)", +"932fec40": "refundToken(address,address,uint256)", +"9330f97f": "removeDestinationByIndex(uint256)", +"93311632": "getTokenClaim(uint256)", +"93316cdf": "selltoken(uint256)", +"9331a922": "get_layer(uint256)", +"93320f2e": "expRequiredToReachLevel(uint256)", +"93325812": "addFreelancerTotalInvoiced(address,address,uint256)", +"9332b62c": "changeAllowAllWhitelistTransfers(bool)", +"93331892": "batch(address[],uint256)", +"9333a122": "ITECH()", +"9333cf5e": "communityPeriodAmount()", +"9333d6c0": "MILL()", +"933426f5": "GoolaToken(address,address,address)", +"93348f45": "ovedclaimBountyairdropMultiple(address[],uint256)", +"9334ab61": "Infos()", +"9334ad0d": "getVersions(address,bytes32,address,bytes32)", +"9335427c": "fullWithdrawnProfit()", +"93358320": "withdrawOwnerToken(uint256)", +"9335dcb7": "ownerWallet()", +"93361078": "confirmStartWork(uint256)", +"9338cbdd": "monToTrainer(uint64)", +"93395d99": "TalksChain()", +"93399949": "GTDCStandardToken(uint256,string,uint8,string)", +"9339c01a": "validICOPurchase()", +"9339e942": "check_flag(bytes32)", +"933aa667": "isPermission(bytes4)", +"933ba413": "totalEthInWei()", +"933bf760": "extend_life_of_contract(uint256)", +"933c798c": "next_payout()", +"933dc51b": "setUint256(int256,uint256,uint256)", +"93402e17": "setRewardManger(address,address)", +"934076f1": "BetOnMatch(address)", +"9341231c": "sendOrThrow(address,uint256)", +"9341287d": "setMetadataUrlPrefix(string)", +"9341aa4e": "initializeDistribution(address)", +"9341bc00": "drones(uint256)", +"934209ce": "rank()", +"9342160b": "eligibleCheckAndIncrement(uint256,uint256)", +"93423e9c": "getAccountBalance(address)", +"934354e7": "finishSpin()", +"93437b52": "Fibremoney()", +"93439950": "test_chain2_2_increaseBlocksBy5()", +"9344a0b6": "addAddressToRegistry(address)", +"9344b0d6": "playerCompleteGames(address,uint256)", +"9344c50f": "getNameOf(address,address)", +"93465da6": "Error(uint128)", +"934689a9": "getTokenCreator(uint256)", +"93469800": "minPower_()", +"93470fa8": "listMultipleItems(uint256[],uint256,address,uint256)", +"93474a4b": "getParticNum()", +"93478221": "LogSender2(address,address)", +"934865d0": "TransactionBlocked(address,uint256)", +"9348b810": "contractorTransferFrom_Bcoupon(address,address,uint256)", +"9348caf7": "testBuyTenTokens()", +"9348cef7": "reveal(uint256,uint256)", +"9348ff61": "setUSDRaised(uint256)", +"9349ba44": "AirRopToken()", +"934a029d": "getVoteAtTxForUser(bytes32,address)", +"934a0b57": "AXXToken()", +"934aa023": "charity()", +"934bb037": "MainBank()", +"934bc29d": "exampleFunction(uint256)", +"934c563f": "dataOf(uint256,uint256)", +"934d8a2e": "TokToken()", +"934db458": "Big()", +"934e03a4": "toBool(bytes32)", +"934e860d": "addOnHold(uint256)", +"934ea572": "w_Reserv()", +"934f92af": "ZebiCoinTempMgr(address,address,address)", +"93503337": "isAllowed(bytes32,uint256)", +"9351327f": "USD_PER_ETHER()", +"935146d0": "createMatch(string,string,uint256,uint256)", +"93519d66": "requestClearing(bytes32)", +"9351a8d7": "managementWithdraw(uint256)", +"9352fad2": "run(string)", +"93545a79": "isAmountBonus()", +"93559bc6": "lifeCoin()", +"9355d6db": "MadTok()", +"9355eb25": "privilege()", +"935600ce": "subRegistrationPeriod(bytes32)", +"9356b1fe": "BWCHToken(uint256,string,string)", +"9356e87f": "getLastMulti()", +"935814a6": "confirmRewardsWithdrawal()", +"93588a14": "setTop(uint256,address,uint256,bool)", +"9358928b": "circulatingSupply()", +"93595b66": "tokenSetMintFeeReceiver(address,address,address,address)", +"935aae40": "MINIMUM_BET()", +"935b1624": "get_first_global_audit_document()", +"935b2b1f": "buyBox2()", +"935b7dbd": "buyFor(address,uint256,uint256)", +"935bb767": "setPrices(uint256,uint256,bool)", +"935c1fb1": "addressIndex(address)", +"935cac39": "internalTransferFrom(address,address,uint256)", +"935d29d6": "BPToken()", +"935d647f": "getPublicForSecretFor(bytes32)", +"935dfb71": "adjusted()", +"935e1533": "processFinishLottery(address)", +"935e97c2": "settleTransactionByMediator(uint256,uint256,uint256)", +"935eb35f": "addToBlacklist(address[])", +"935ebb78": "MAX_USD_FUNDING()", +"935eeddc": "CarUpdated(uint256)", +"935f43b2": "ipart(int128)", +"935f4c18": "sendPayment(address,uint256)", +"935fb955": "Mytoken(uint256)", +"93602379": "_transferCar(address,uint256)", +"936061cd": "claimWinner(address)", +"93608dfb": "earlySuccessTimestamp()", +"9360b138": "sendTokensTo(address[],uint256)", +"936224b8": "midEtherBonusValue()", +"93623fb8": "changeAcceptDice(bool)", +"936241b7": "hunterLicenceEarning()", +"93627f42": "globalMax()", +"9362917c": "FuckKuanLi()", +"9362e50e": "changeDeveloperSENSDestinationAddress(address)", +"936315d6": "canReveal(address)", +"93632ddd": "totalBNBContributed()", +"93634702": "isValidSignature(bytes32,address,bytes)", +"9363933c": "GizerItems()", +"9363a141": "getDepositCount()", +"9363c812": "floorPrice()", +"9363fb71": "totalFreeTokensDistributed()", +"9364003c": "HDC()", +"93643a5b": "fazzycoin()", +"936597da": "mLoadAndReturn(bool)", +"9366804f": "checkForJoin(uint256,address,uint256)", +"9366fd5c": "getEvaluationByRecorderID(uint32,uint64)", +"936710bf": "getBalanceOfAccount(address)", +"9367a863": "t_Andrey()", +"9367f8de": "SPCToken()", +"93683f3d": "changeReserveBountyRecipient(address)", +"9368f482": "_betterThan(address,address)", +"9368f72c": "burnFromToken(address,uint256)", +"93694f67": "opponent()", +"936b360d": "Tachyon(uint256,string,uint8,string)", +"936b603d": "contributorTokens()", +"936bbf9a": "totalPostIcoContributorIds()", +"936bfa40": "the120address()", +"936bfc63": "OrcERC20()", +"936c9bc9": "ICOdeadline()", +"936cfb0e": "transferInternal(address,address,uint256,bytes)", +"936d2b0f": "addProductAtId(uint256,string,uint8)", +"936e9904": "AUCoin()", +"936ec951": "afterEach()", +"936f67ea": "CryptoStorage()", +"936f8a40": "setMinBuy(uint256,uint256,uint256)", +"936fddcb": "VULCAN_PROMETHEUS_EXTRACTION_BASE()", +"93709788": "forwardManyTransaction(uint256[])", +"9370a07c": "TSVC()", +"9371c369": "applicationRejected(address,address)", +"9371de6e": "unsoldVUPDestination()", +"93720b2f": "giveAways(address,uint256,uint256)", +"93736419": "UpdateUserExpire(address,uint32)", +"9373ad6c": "inviteFinished()", +"9373b8bd": "claimAddresses(address[],uint256)", +"9373e2a1": "CircleCrowdsale(uint256,address)", +"9373f432": "setWithdrawWallet(address)", +"93741a3e": "iterate(string)", +"93742d83": "makeBet(uint8,uint8,uint8,uint8,uint8,uint8,address)", +"9374c487": "overshoot()", +"9374ec98": "whiteListMge()", +"9375206a": "setAllowed(address[],uint8,bool)", +"93762cff": "_resetMine()", +"93766a57": "trade(address,uint256,address,address,uint256,uint256,bool)", +"93768820": "isCommunityToken(address)", +"9377530f": "grandTotalClaimed()", +"93778e2d": "setCompte_6(string)", +"9378a9e2": "setUInt(uint256)", +"9378f08f": "ScamStampToken()", +"9379077f": "bookDayVisit(uint256)", +"93790f44": "getKey(address)", +"93791262": "performInit()", +"93796317": "InternationalTourismPublicChain(uint256,string,uint8,string)", +"93798ff5": "BuurmansToken()", +"9379d936": "calculateBonus(uint8,uint256,uint256)", +"937a7ac5": "moveStageWithdrawn()", +"937a9151": "WBIToken(uint256,string,string)", +"937adbe6": "isInTerm(address)", +"937b19ef": "EtherRoyalToken()", +"937b7cf1": "contractFallback(address,address,uint256,bytes)", +"937c0cdf": "priviledgedAddress()", +"937c0d0a": "aaa()", +"937c9e3c": "CandyLandSale(address)", +"937cde20": "hasPass(address)", +"937dc72f": "AppCoins()", +"937e09b1": "minimumContribution()", +"937e909b": "reservesPerTokenDest(address,uint256)", +"937ebbd2": "sendTokensToBountyOwner()", +"937ef8e3": "getUserReferralsProfit(address)", +"937f2e33": "claimMyTokens()", +"937f6e77": "setInfo(string)", +"937fd355": "initializeBasicFundraiser(uint256,uint256,uint256,address)", +"93801acb": "deleteList()", +"93806144": "getPunitoryInterest(uint256)", +"93808351": "setPriceInternal(address,uint256)", +"9380b8e7": "testFailAddingMembers()", +"93813782": "Tasoha()", +"938199a5": "getDateOfLastPayment()", +"9381da6e": "getEstateData(uint256)", +"9381e53f": "TokensCollected(address,uint256)", +"9381ebfa": "EUAHTOKEN()", +"9382ef65": "prvdWallet()", +"93830c74": "solUpDownVote(bool,uint32,address)", +"9383d4e6": "SingularityTest14()", +"93847d54": "TRLCoinSale(address)", +"9384f31e": "SingularityTest19()", +"93854494": "factHash()", +"93859188": "amount_bonus()", +"93867fb5": "roleAdmin()", +"9388b560": "TOKENS_ALLOCATED_TO_SERVUS()", +"9389c5b5": "setPackPrice(uint256,uint256,uint256)", +"938a465e": "TOKETH_PRESALE_ONE()", +"938ae4cc": "testThrowDisownNotTransferable()", +"938b5f32": "origin()", +"938b643b": "TimeToMeet()", +"938bcd67": "getChannelIdentifier(address,address)", +"938c4307": "scheduleCall(bytes4,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"938d0444": "SmileToken()", +"938d2f46": "escrowDeletion(address,address,uint256)", +"938d9632": "activekey()", +"938da22d": "secondReleaseTime()", +"938db92e": "ICO_Tier()", +"938e6fcc": "MiningStart(uint256,uint256,uint256)", +"938f3cc4": "create(address,address,address,address,address,address,address,string,string)", +"938f407a": "removeFromWhitelistInternal(address,uint256)", +"938f6c5f": "getBountyTokens()", +"938f7064": "createTopic(string,string,uint256)", +"93904aae": "coinToBurn()", +"939090f8": "deposit4(address,address)", +"93911ff8": "addTrades(address[],uint256[])", +"93920e8f": "invest(address[],uint256)", +"93924147": "MoveFromBase(uint256)", +"93928c91": "thirdBonus()", +"9392e5b5": "erase(uint256,uint256)", +"93930020": "getLastConsolationPrize()", +"9393c09c": "addFabric(address,address)", +"93940e0a": "INTLToken()", +"939528b1": "transferProposalCooldown()", +"939624ab": "removeStake(uint256)", +"9396a7f0": "getQuickBuyPathLength()", +"9396df32": "advertisingPercent()", +"939729c1": "installerPercentage()", +"9397afcb": "PlayingCrypto()", +"9397f2a2": "weekOneRate()", +"939802af": "getDataForTokenId(uint256)", +"93986193": "realizedTokenBalance(address)", +"9398e0cd": "data(int256)", +"9398ecb6": "setMaxParcels(uint256)", +"939935cb": "startTimeInMinutes()", +"93997075": "AddCommitteeVoteEvent(address,address)", +"9399869d": "getContractCount()", +"9399dcfb": "PointGameProcess(address,uint256)", +"9399dd7e": "serverEndGameConflict(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,bytes32,bytes32)", +"939a470e": "updateDescriptionHash(string)", +"939a79ac": "demo(string)", +"939a8dc1": "CryptoPepeMarketToken()", +"939b73aa": "getAthlete(uint256)", +"939b7842": "approveMigration(uint256)", +"939bfc79": "TTAC()", +"939c0a66": "AirDrop()", +"939c23b6": "setProtectionForMyUnprotectedCrypton(uint256,uint256)", +"939cda3f": "DgxDemurrageReporter(address,address,address,address)", +"939d3ac4": "sendCommunity()", +"939d8729": "_postValidatePurchase(address,uint256,uint256)", +"939de809": "checkSale()", +"939e014e": "optionTransfer(address,uint256,uint256)", +"939e436c": "weiPerContributor(address)", +"939ea4f8": "bombs(uint8)", +"939fb3bf": "Owanble()", +"93a00d27": "rektCoinCashSafe()", +"93a09352": "setValue(string)", +"93a0c742": "getIdeaParties(uint256)", +"93a0dc08": "disableAffiliate()", +"93a2f88d": "gettopid(address)", +"93a2fa6c": "Emission(uint8,uint256)", +"93a31509": "LEXToken()", +"93a32f62": "assignToken(address)", +"93a378da": "addHodlerStake(address,uint256)", +"93a408d7": "priceUSD()", +"93a422bb": "updUserBlackList(address[],address[])", +"93a45612": "SetPresaleHandler(address)", +"93a52980": "getTotalEtherPool(uint8)", +"93a595f5": "repayLoan(address,uint256)", +"93a5a9da": "resignTrustee()", +"93a69ae0": "eForecastGambleToken()", +"93a8333e": "Count()", +"93a91682": "curPrice()", +"93a91f25": "setInitialAllocation(address[],bytes32[],uint256[])", +"93a95fa8": "superPowerFulDragonOwner()", +"93a962fc": "addUndergraduate(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"93a991af": "withdrawDai(uint256)", +"93aa3014": "BarryUtilityCoin()", +"93aa5ca8": "BITNOT(bytes32)", +"93aababc": "setlockBalance(address,uint256)", +"93aacd7d": "ownerLabel()", +"93abc530": "getSubscriptionOwner(bytes32)", +"93ac3638": "setAuctionAddress(address)", +"93ac3905": "lastGateway()", +"93ac5048": "BitallexToken()", +"93ac7c83": "EVTCToken(address,uint256)", +"93adf28b": "PumpAndDump()", +"93aef871": "checkSolved()", +"93af0292": "complete(address)", +"93af339f": "cardDrawPrice()", +"93af8ed4": "maybeChangePrice()", +"93afbdae": "repriceAuctions(uint256[],uint256[],uint256[],uint256)", +"93affe51": "getBoth()", +"93b14daa": "right14(uint256)", +"93b155af": "win(bytes32)", +"93b16ff5": "IkuraBurn(address,uint256)", +"93b1d4c7": "OfferingRegistry(address)", +"93b212bc": "subWithdraw(address)", +"93b21c8c": "destroyThreshold()", +"93b2467e": "totalSold(uint256)", +"93b30efc": "doSellerRequestCancel(bytes16,address,address,uint256,uint16,uint128)", +"93b3a368": "getCorrespondingIntegerValue(bytes32,uint8,uint256)", +"93b3bb35": "VisualFodderCoin()", +"93b3cc6b": "getRandomSeed()", +"93b4a73c": "KITTOKEN()", +"93b4c69b": "_assignRole(address,bytes32,address,uint256)", +"93b557db": "dSetArbitraryData(bytes32,bytes,bytes)", +"93b69f86": "getPlayerCoin(address,address,uint256)", +"93b71fe5": "Dao1901Votes(address)", +"93b7e7cb": "addCancellation(address)", +"93b8386d": "agencyOf(address)", +"93b8e90d": "isMasterAccount(address)", +"93ba3f15": "propose(address,uint256,bytes)", +"93baa6ef": "InterfaceImplementerSet(address,bytes32,address)", +"93bb3aee": "betAddressArray(uint256)", +"93bbafd1": "earlyBirdInvestments(address)", +"93bc771a": "ceoDevfund()", +"93bc96fa": "withdrawTo(uint256)", +"93bcabb7": "pullRow(uint256)", +"93bd0142": "ETHERDELTA_ADDR()", +"93bd1484": "mintApproveClear(address,address)", +"93bd27de": "IOweYou()", +"93bd4fc4": "depositAgent(uint256,uint256,uint256,string,uint256,string)", +"93bd90c4": "richtokenIndexToApproved(uint256)", +"93be0f83": "MSPT()", +"93bebdec": "corporationContract()", +"93c0771c": "getGamesPlayers(uint256)", +"93c166ec": "computeEndowment(uint256,uint256,uint256,uint256)", +"93c19e18": "rate0()", +"93c2c7f0": "getClosingSettle(bytes32)", +"93c2f482": "maxRound()", +"93c32e06": "changeFounder(address)", +"93c38965": "getData_15()", +"93c434e5": "getOptionInfo(uint256,uint256)", +"93c4ade0": "viewMaxShares()", +"93c5186c": "isNewPrice()", +"93c573c0": "maxChequeValue()", +"93c5ace0": "walletTokenTeam()", +"93c6475c": "processBet(uint8,uint256,uint256,int256,bytes32,bytes32)", +"93c69927": "sizeOfBool()", +"93c7ca84": "countBet()", +"93c7e009": "AddTrustedContractAddress(address,address)", +"93c8b0d4": "addForeignChild(bytes32,bytes32)", +"93c92b73": "exchangeRateArray()", +"93c94acb": "calculateRewards(uint256[3][3])", +"93c958f3": "ManufactorWallet(string)", +"93c98cbc": "ApplicationQualityCoin()", +"93c9b63e": "SGTCoin(uint256)", +"93ca5de7": "CIzTezt(string)", +"93cb1a4e": "originalHash()", +"93cc6d85": "transformDataContract()", +"93cc9162": "taskRejected(uint256,uint256)", +"93cca918": "place()", +"93cd22b8": "addAdministrators(address)", +"93cddbcf": "goldToEur()", +"93ce9791": "emergencyFinalize()", +"93cfd79f": "getVisitorCount()", +"93d07d07": "hoursCount()", +"93d087a2": "setData_33(string)", +"93d0de98": "AirDropContract()", +"93d1217e": "lastBlock_v3Hash_uint256()", +"93d18e92": "processOrder(bytes32)", +"93d22e52": "setEFContract(address,address,uint256)", +"93d25fbc": "getroommoney()", +"93d3173a": "delegateDecreaseApproval(address,uint256,address)", +"93d4673f": "BTCTKN()", +"93d48b11": "zombieToken()", +"93d51daf": "amountofp3d()", +"93d5276b": "investInternal(address)", +"93d5825e": "calculateTokenSell(uint256)", +"93d5908a": "harapan(address,uint256)", +"93d5c520": "DelegateCallToken(uint256)", +"93d60990": "teamWithdraw(uint256)", +"93d68cfa": "preferredSaleStartTime()", +"93d759b8": "allowedAccount()", +"93d76f0e": "DEVELOP_CAP_PER_ROUND()", +"93d79105": "hashRelease(bytes32,bytes32)", +"93d7c6bf": "researchDivPercent()", +"93d81d58": "cancelSubscription(address)", +"93d84bf0": "oraclize_newRandomDSQuery(uint256,uint256,bytes,uint256)", +"93d865e3": "tokensFromPresale()", +"93d88409": "suspendSale()", +"93d90a4e": "HostingIcos()", +"93d91eae": "getFractionalAmount(uint256,uint256)", +"93d96049": "burn_lost()", +"93d9df16": "setCounter(int256)", +"93d9fd74": "getTitulaire_Compte_4()", +"93da1db1": "Profiterole(address,address,address)", +"93da4cfd": "getInvertedPriceInfo(address)", +"93dafba2": "getSubpot(uint256)", +"93db7716": "get_sale_arbits_sold()", +"93dc12e6": "closeProject(uint256)", +"93dd4133": "signedByCLevel(bytes32,bytes)", +"93dd738e": "notifyLegacyClaimed(address)", +"93dd9443": "Community()", +"93dd9866": "summEccles()", +"93de2527": "RegisterStaff(address,string,string,string)", +"93de6c51": "CHGUSDPRICE()", +"93dfbbcb": "setTokenExchangeRate(uint256,uint256,uint256)", +"93dfea8f": "ong()", +"93e02d13": "FallenLeaders()", +"93e1021a": "Participant()", +"93e1595d": "ATTR_CONSUMABLE()", +"93e24b7a": "teamVaultAddr()", +"93e3fca1": "stopGameOnNextRound()", +"93e40f7e": "claimedLength()", +"93e426de": "MIN_WITHDRAW_WEI()", +"93e42dfa": "_withdrawInvestor(address,uint256)", +"93e432d4": "refillGift()", +"93e43bbe": "getPost(bytes32)", +"93e4bf4f": "addPrecommitment(address,uint256,uint256)", +"93e5365f": "maxAddresses()", +"93e580ea": "storageRoot(address,uint256)", +"93e59dc1": "whitelist()", +"93e67bff": "IPFSHash()", +"93e7155b": "swapActivityHandler()", +"93e7d6c6": "createInviteName(bytes32)", +"93e84cd9": "play()", +"93e96174": "getNextDiniRequestId()", +"93e9a084": "lastTime()", +"93ea0e02": "batchTokenTransfer(address[],uint256[])", +"93eade00": "tokenAssignExchange(address,uint256,uint256)", +"93eb049d": "dp()", +"93eb33b3": "notifyDeathConfirmation()", +"93eb3c62": "Send(address,address,uint256)", +"93ed013d": "ecosystemAddr()", +"93ed4426": "extraBonus()", +"93eda78d": "getClaimData3(uint256)", +"93edaf59": "freezers(uint256)", +"93edbe36": "CHELCOIN()", +"93eeb3fb": "checkRate(address,address)", +"93eec1fb": "setName(uint8,uint8,string)", +"93efbdbb": "DPIcoWhitelist()", +"93f0bb51": "order(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"93f1b685": "LuckyPackage()", +"93f27be2": "_assignOverlfowData(uint256)", +"93f2ad91": "ExtremeToken()", +"93f2ba24": "testdiv256_128By256()", +"93f2fa04": "ThingToken()", +"93f32659": "getInitialWithdraw()", +"93f33b88": "notifySale(uint256,uint256,uint256)", +"93f43863": "getEmployerJobs(address,address)", +"93f5ddf2": "ICOStarted(uint256,uint256)", +"93f63e70": "setBenefit(address)", +"93f6fd85": "createCampaign(uint256,bytes32,bytes32,bytes32)", +"93f7cc99": "getPlayerAccount(address)", +"93f826c9": "portfolioSummary(address,address)", +"93f84cfe": "mintTeam(address,uint256)", +"93f85021": "numLeaders()", +"93f8e9f7": "mediumMod()", +"93fa47f1": "lockGoldTransfers(bool)", +"93faf781": "loggedAsStatement(uint256)", +"93fb28bd": "getUnitAttackMultiplier(address,address,uint256)", +"93fc2c8b": "winnerIsDraw()", +"93fc5ebb": "_secondRoundWinnersFight()", +"93fe0237": "updateWhitelist(uint256[],bool)", +"93fe4248": "deleteUIntValue(bytes32)", +"93fea184": "CONTRIBUTIONS_MAX()", +"93fea3fc": "supportValidator(address)", +"93fea8f3": "MahamTestCoin()", +"93feb13b": "ForceSendHelper(address)", +"93ff3e4a": "insertNewUser(uint32,bytes32,address,uint256,uint256,uint256,uint32,bool)", +"93fffddc": "previousContractAddress()", +"94002b57": "goldToken()", +"940064e3": "periodPreITO_hardCapInUSD()", +"94009bbc": "powerUp(address,address,uint256)", +"940147ac": "tribeProducts(address)", +"94014dc0": "weiRaisedPreICO()", +"94018e20": "removeRoles(bytes32[],address,address)", +"9401c82b": "CAECToken()", +"9401d547": "lockExternalTransfer()", +"9401e4e7": "TokensFlushed(address,uint256)", +"94025211": "refundToOtherProcess(address,uint256)", +"9403e8dd": "casino()", +"94044c75": "_invokeTokenRecipient(address,address,uint256,uint256,uint256,uint256)", +"94056c42": "mintTRCToken(address,uint256)", +"9405b406": "ProposalManager()", +"9405c78f": "setQuantity(uint256,uint256)", +"9405de64": "checkAllowance()", +"9405dfdd": "listingId()", +"94062a9d": "minBuyingAmount()", +"94066fb1": "cancelOfferAlice(uint256)", +"9406aea9": "startCall(uint256,uint8,bytes32,bytes32)", +"9406cf59": "setChallengeFeeMultiplier(uint256)", +"9406e273": "NBELToken()", +"94074b03": "getNetworkName()", +"94077c50": "updatePriceAgent(address)", +"9407a688": "allowedForwards(bytes32)", +"9407ea98": "setMarketplaceFee(uint256)", +"94081387": "administrate(uint256)", +"940834be": "MidnightCoin()", +"940900b8": "bookOvernightVisit(uint256)", +"94097168": "burnTokenBurn(uint256)", +"9409962f": "withdrawExtraTokens(address)", +"940a4e45": "distributeReward(uint256)", +"940a6cf5": "getAdministratorCount()", +"940a82a3": "distributeCTS(address[],uint256,uint256)", +"940aa73f": "setMinimumVotingWindow(uint256)", +"940b29b2": "etherReceivers(uint256)", +"940bb344": "burnUnsoldTokens()", +"940beaf5": "getTransactionIds(bool)", +"940c154b": "lockBet(uint256)", +"940c17c0": "CROWD_WEEK4_PERIOD()", +"940d0780": "AdmChange_README(string)", +"940d553f": "FoodTransferEvent(address,address,uint256,address,uint256,uint256)", +"940d5e08": "Alpon()", +"940d72ec": "buyPack(uint8)", +"940dab4c": "prefixedHash()", +"940dbf3e": "invokeOnce()", +"940de97e": "privateSaleStartTime()", +"940df414": "claimAddress(address,uint256)", +"940ebef7": "secondsRemaining()", +"940f02e0": "setDevelopersTokensWallet(address)", +"940f0661": "PrivateLedger()", +"940f851c": "Ballot(uint8)", +"940fae9e": "confirmBoosterQuest(address)", +"9410579d": "_calculatePriceComplement(uint8)", +"94106200": "testFailCreateSameNonce()", +"94107690": "checkPurchaseRecord(address)", +"9411c88b": "TokenContract(uint256)", +"9414d0bf": "initializeUsdReceived()", +"9415931d": "getLastDividendsAmount()", +"941660e5": "getRoundMaxPerUser(uint256)", +"9416893b": "addDemoData()", +"94169f25": "preIcoTotalCollected()", +"9416b423": "toLower(string)", +"94181d27": "lastReparation()", +"94182798": "dna4(uint256)", +"9418b8a6": "closeUsingTrustedRecipient(address,address,uint256)", +"9418d25a": "proveBuy(bytes,int256)", +"94194be4": "openingTimeB()", +"9419768d": "checkBetting(uint256,address)", +"941993f8": "changeCofounderB(address)", +"9419a2da": "setPaymentDetails(uint256,string)", +"9419f17c": "decraseTimeToAction(uint256)", +"9419fd29": "getWidth(uint256)", +"941a4bc7": "getPartnerCash(uint8,address)", +"941a5074": "controllar_account()", +"941a8486": "ownerChangeSellerfee(uint256)", +"941b0161": "addMarket(uint256,uint256,uint256,uint256)", +"941da7b8": "testExpiredBalance()", +"941e98a8": "EMISSION_FOR_SALESTAGE1()", +"941f9580": "rewardKey(address,uint256)", +"94201882": "artistEmail()", +"94224066": "setCityValues(uint256[],uint256,uint256[],uint256[])", +"942273bd": "SAMURAI()", +"942324c3": "getSponsoringCount(uint32)", +"94235f77": "apLockUp(address)", +"9423719b": "tokenBonusForFirst()", +"942385eb": "getPayroll()", +"9423f443": "submitGameResults(uint256)", +"9423fc54": "transferClearingFunction(address)", +"94248eaa": "isStateProjectInProgress()", +"9425753c": "licenseProductId(uint256)", +"9426e226": "validatorSet()", +"94272356": "_setReferrer(address,address)", +"9427aa96": "getBonus(uint256,uint256)", +"9427dfea": "ownerRecoverTokens(address)", +"942802e7": "VULCAN_POD_FTL_SPEED()", +"94282357": "EFASCOIN()", +"9428522a": "getNode(string)", +"9429d441": "reclaimBySender(uint256,address,address,bytes32)", +"942a8ad3": "getAQL(address)", +"942ab177": "MintToggle(bool)", +"942ab286": "buyTicket(uint256[],address,uint256,uint256)", +"942ac303": "goalInEthers()", +"942ae0a7": "renderHelloWorld()", +"942b765a": "getList()", +"942b90d3": "getRewardTable()", +"942bc8d4": "unpauseAngelToken()", +"942d468b": "transferArray(address[],uint256[])", +"942d73b1": "readAddr()", +"942dac28": "amounRefferalWon()", +"942ea466": "getNumber(address)", +"942ff8fc": "inituser(address,uint256)", +"94306ecb": "AutoreleaseDelayed()", +"94313c5b": "getPositionOwedAmount(bytes32)", +"94313f9f": "cleanConsents(bytes32[],address[])", +"943153cf": "StonePaper()", +"9431e412": "getCommunityRates(uint256)", +"9431f5f0": "withdrawFees(bytes)", +"943215ae": "investmentFundWallet()", +"943250c4": "SquirtCoin()", +"9432c92c": "setStartTimeIcoStage1(uint256)", +"9432f0c7": "receiveClosePositionPayout(bytes32,uint256,address,address,address,uint256,uint256,bool)", +"9433a498": "totalFountainSupply()", +"9433a81e": "personIndexToApproved(uint256)", +"9434c981": "createNewMartial(uint256,uint256,uint256)", +"9434d765": "allocated12Months()", +"94353c70": "postMonForClass(uint64,uint32)", +"9435c887": "cancelBid()", +"9437563c": "logPriceBefore()", +"943814f0": "getWhitepaperAt(address,uint256)", +"9438cca8": "cancelEscrow(uint256,uint256)", +"9439060f": "getGameNumber(uint256)", +"943911bc": "getWorseOffer(uint256)", +"943a32bc": "Relay(address)", +"943a5e28": "RENEX_ATOMIC_SETTLEMENT_ID()", +"943b0747": "RewardOffer(address,address,bytes,uint256,uint256,uint128,uint256)", +"943b82f1": "getLimit(uint16)", +"943bd25d": "addNewBetAmount(uint256)", +"943dfef1": "bounty()", +"943e170d": "neededSignatures()", +"943e8216": "vote(uint256,uint8)", +"943eb504": "supplyLocked()", +"943fa364": "MPhoneSeller()", +"943fcc9d": "buyRoseETH(string)", +"943fd51c": "claim2Ply(uint64,uint64,uint64,uint64)", +"9440f01f": "buyCoins(address,uint256)", +"9441268b": "updateGlobalTokenAge()", +"944126f4": "acceptSupport()", +"94412943": "bountyOf(address)", +"9441e646": "addWhiteList(address,address)", +"9442936f": "d(address,address,uint256)", +"94429fa6": "withDrawAnyERC20Token(address,uint256)", +"9442fad9": "deployTokens(uint256[],address[])", +"94431f80": "getAvailableEtherCommissions()", +"94432deb": "fairsale_protection()", +"944358e0": "getContributedAmountInWei(address)", +"9443b9be": "TokenTimeLock(address)", +"9444991d": "getVotingListCount()", +"9445eb3a": "Terminate()", +"94465bf6": "adjustDuration(uint256)", +"94477104": "vestedOf(address)", +"9447fd0a": "until()", +"9448807a": "secondPay()", +"9448bcea": "getPlayerRoundNums(uint256,address)", +"94493c43": "getLockCount()", +"94495468": "totalTokenRice()", +"9449a361": "setStakeRequirements(uint256,uint256)", +"944a1a75": "CELION()", +"944abc22": "_updateCurrentPeriod()", +"944ac0c6": "MAIN_SALE_START_TIME()", +"944af2ae": "TegTokens(uint256,string,string)", +"944b7c3f": "getMaxNumberOfTokens()", +"944c1d97": "resetPeriod()", +"944c8929": "checkBeatingPrice(uint256,bool)", +"944d4505": "IqraChishti()", +"944da654": "editModule(uint256,uint256,address,bytes4)", +"944dc22c": "addRemovableIdArrayItem(address,uint256[],string,string,string,uint256)", +"944ea02d": "checkTokenBalanceState(address)", +"944ea477": "OPERATION_AMOUNT()", +"944f0499": "transferTokensFromTeamAddress2(address,uint256)", +"944f0e64": "tokenInfoParametersReady()", +"9450b1c8": "addCharityFundation(string,string,string)", +"9451bca7": "result_votes()", +"9451f865": "TestConf()", +"94525e12": "lowRate()", +"94532ced": "blockSettle(uint64,uint64,bytes)", +"9453b95d": "addOrUpdateAccounts(address[],uint256[],uint256[])", +"9453f381": "getBeneficiaryCash(address)", +"9453f767": "createOrder(string,address)", +"94543c15": "isDeprecated(address)", +"94544e64": "transferFeePercent()", +"94555d1a": "addSubscriber(address)", +"94558862": "setRewardClaimed(address,uint256)", +"9455924f": "getTotalVolumeToken(address)", +"94566d25": "jobPost()", +"9456e5b5": "stockSet()", +"9456f7e9": "getHashByTokenId(uint256)", +"9456fbcc": "withdrawERC20(address,address)", +"94579680": "changeUserGrowthAddress(address)", +"9457c1dc": "enableMigration(address)", +"9457c68a": "forceEndCall()", +"9458434f": "mainWeiRaised()", +"94594625": "distributeAirdrop(address[],uint256)", +"9459c254": "refund(address,string,uint256,uint256,uint256)", +"945a2555": "queryPermissions(address)", +"945aab47": "tokenSaleCap()", +"945ade92": "initialDate()", +"945c6cf8": "burn_all_unsold()", +"945c7438": "sign(address,int256)", +"945c7c59": "distributeTokenSale(uint256,uint256,uint256,uint256)", +"945d7b7e": "tranchesSent()", +"945ddb52": "mainSaleTotalSupply()", +"945e5f24": "roughSupply()", +"94602869": "receiverWithdrawal(uint256)", +"9461446d": "setProcessingFee(uint256)", +"94615fc1": "setFreezingStatus(uint8)", +"946267ec": "mintComplete(uint256,int256)", +"9462eae5": "ChangeContractor(address)", +"9462f02f": "tactics(uint256)", +"9462f4bc": "bytarr(bytes32[])", +"94636cee": "createPromoMonster(uint32,bytes,address)", +"9463d582": "teamOneWin()", +"94642f96": "investorWhiteList(address)", +"94644764": "lookUpClaimerAddress(uint256,address)", +"94650fb8": "Goal()", +"94655f2b": "printMoney()", +"94658690": "parseUserInivte(uint256,uint256)", +"9465c114": "vanishToken(uint256)", +"946644cd": "fun()", +"94679ce7": "changeEtherPrice(uint256)", +"946941ec": "Contribute(bytes24)", +"946a893d": "shopDoublet()", +"946ad94d": "tokenContractEnableTransfers(bool)", +"946ae8df": "FMGHEALTHCARE()", +"946ba496": "ShishuToken(uint256,string,string)", +"946bcc30": "getFounder()", +"946bf4d7": "winningProject()", +"946c0344": "getChallenges(uint256)", +"946ca295": "userTransfer(address,uint256)", +"946d1480": "ethToUsd(uint256)", +"946d8806": "getMyPacifist()", +"946d9204": "initialize(address,address[])", +"946f8876": "updateTierStatus(uint256,uint256)", +"94704818": "fillOrder(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,uint256,bytes)", +"94705167": "enableArbiter(address)", +"94707a95": "_setRate(uint256)", +"9470b0bd": "withdrawFrom(address,uint256)", +"94727b41": "deleteProduct(bytes32)", +"9472b32c": "sale_period()", +"9472eb76": "setPayerString(string)", +"947355df": "addToList(string,address[])", +"94737987": "referralProgram(bool,uint256)", +"94741017": "failCrowdsale()", +"94756e22": "VikoChain(string,string,address)", +"94759c36": "createQuote(uint256,uint256,bytes32)", +"9476760d": "AthletiCoin(address,address)", +"947721dd": "refundEndDate()", +"947846a4": "RefundableCrowdsale(uint256)", +"9478a7c9": "getReferralOf(address)", +"9478ab8c": "ethUsdPrice()", +"9478ba47": "calcUnclaimedFees(uint256)", +"9478f7cf": "_receiveEth()", +"9479a732": "sell_car(uint256)", +"9479f2c7": "STAKE_DEADLINE()", +"947a3168": "token_name()", +"947a36fb": "interval()", +"947aca55": "addMasterAccount(address)", +"947af462": "setBurnRequestAddressMap(uint256,string,address)", +"947bc72d": "MAX_TRANSFER_TIMSPAN()", +"947bd798": "rawManuallyMintTokens(address,uint256)", +"947cbc1e": "dariatest()", +"947e8a26": "TOKEN_MINTING()", +"947f7d1d": "newRandom()", +"947f8ede": "IcoCapChanged(address,uint256)", +"947f97cc": "getUnsoldTokens(uint256)", +"947f996d": "testGreatherThan()", +"947fd341": "getCoefficientMultiplier(string,string,string)", +"9480cd1a": "getPillarRoundsKitties(uint8,uint256)", +"94828ee8": "DelightToken()", +"94836dab": "sendFounders()", +"9483e91a": "withdraw(address,uint256,bytes,uint256)", +"9483f25c": "updateProfile(string,string,string,string)", +"948623dd": "buy(address,bytes,bytes32)", +"94868f7d": "airDropPayableTag()", +"948759d5": "transfermulti(address[],uint256[])", +"94876995": "isHandleAvailable(bytes32)", +"9489fa84": "calcSharePrice()", +"948a70d7": "SingularityTest16()", +"948b557a": "getDispute()", +"948b6790": "getTokensPrice(uint256,bool)", +"948bc5d6": "XfinityUtility()", +"948cd942": "getDronePot()", +"948cfd0c": "updateBootyBase(address)", +"948d902d": "getTokensByETH(uint256)", +"948e1a1c": "AVAILABLE_TOKENS()", +"948f1daa": "mintLockPeriod(address,uint256,uint256)", +"948f5076": "setCache(address)", +"949076b6": "ensureInterval()", +"94910d60": "createContract(address,address,uint256,string)", +"9491a8eb": "updatemktValue(uint256)", +"949201d7": "LOG_FailedSend(address,uint256)", +"94923fd7": "LogRevokeNotice(bytes32,address,uint256)", +"9492fbf7": "BGS()", +"94930138": "getLoanUnavailableAmount(bytes32)", +"949319b1": "verifyService(address)", +"9493242c": "returnLender(uint256)", +"9493ac07": "setBattleFee(uint256)", +"9493b9b0": "createMiner()", +"9493f012": "batchSafeTransferFrom(uint256[],address,address)", +"949430f0": "BTC_SUISSE_TIER_1()", +"94953294": "downTheDrain()", +"94954967": "setMaxWhitelistLengthInternal(uint256)", +"9495ad6c": "listExists(bytes32)", +"9495f8c6": "upgradableState()", +"9496df3f": "freezeQuorumPercent()", +"94974aea": "unlockedAtBlockNumber()", +"9497b7a1": "yearlyTeamAmount()", +"9498a265": "updateCertifier(address,address)", +"9498bef5": "overloadedMethod(address,uint256)", +"9498fb26": "ELIX()", +"94992b76": "ICOSTART()", +"94993e52": "_breedWith(uint256,uint256,address)", +"94996680": "setStartTimeStamp(uint256)", +"9499e018": "destructContract()", +"949a6868": "RefundTicket(address,uint256)", +"949a9d59": "receiveWithData(bytes)", +"949b56ef": "whitelistPrincipleLockPeriod()", +"949b9e10": "createHumanStandardToken(address[],uint256[],string,uint8,string)", +"949ba7c3": "GNCCrowdsale(address,address,address)", +"949c5099": "isAwaitingPRETDETokens(address)", +"949c89a0": "BitBaBeToken()", +"949cc9ea": "tokenSupplyBackedByGold()", +"949cfc64": "restTime(address)", +"949d225d": "size()", +"949db658": "rateProvider()", +"949dcdab": "forceWithDrawToInviter(address,uint256)", +"949dfa63": "calculatePurchaseReturn(uint256,uint256,uint8,uint256)", +"949e8acd": "myTokens()", +"949eabff": "fundsRaisedInWei()", +"949eb1c6": "bankersLimit()", +"949f80b0": "RandomExample()", +"949f80c5": "getResult(uint256,uint256)", +"94a08c69": "TOTALSUPPLY()", +"94a0b878": "fromTileId(uint16)", +"94a0c1cc": "cancelVoteForCandidateBySnapshotBlock(address,uint256,uint256)", +"94a1710d": "testNonOwnerCantBreach()", +"94a1be9c": "addVotes(uint256)", +"94a1d75c": "withdrawBidForSketch(uint256)", +"94a224c0": "withdrawExpenses()", +"94a2301e": "tokensInEth()", +"94a535fc": "TokenAdd(uint256,address)", +"94a53d41": "minimal()", +"94a5601a": "getMaxCap(address)", +"94a5c2e4": "maxValue()", +"94a5cccb": "deposit_period(uint256)", +"94a66da2": "GamePlayerCoin()", +"94a66df3": "objectGloves()", +"94a74249": "panicked()", +"94a754e0": "resolveChallenge(uint256,bool)", +"94a771d7": "getReportTimestamp()", +"94a7ef15": "addWhitelistAddress(address)", +"94a80dd9": "getPoolValue(uint256)", +"94a82671": "unRegister(address,string,address)", +"94a89233": "isPluginInterface()", +"94aa6775": "newDeposit(address,address,uint256)", +"94aa8174": "AddParticipant(address,address,string,uint8,string,string,bytes32)", +"94ab9608": "XRRtoken()", +"94abbeaf": "PieToken()", +"94ad4f89": "icoDays()", +"94ae2341": "exchangeHelenium(uint256)", +"94ae4899": "onMintCalled(int256)", +"94ae7ac3": "allowanceAdd(address,uint256)", +"94aef022": "getVariables()", +"94af9da8": "createNewCombination(address)", +"94b0780f": "burntokens(uint256)", +"94b2ffc0": "StarterCoin(uint256,address)", +"94b31fbd": "getTokenAllowance(address,address,address)", +"94b367a3": "_takeOwnership(uint256,address)", +"94b44f3e": "addressToBlock(address[],bool)", +"94b4c93d": "MomentalyOwned()", +"94b5255b": "distributePreBuyersRewards(address[],uint256[])", +"94b5c9f3": "getChampReward(uint256)", +"94b5ed6d": "minorOwnerShares()", +"94b66386": "attackIsland(uint256,uint256)", +"94b67b1c": "getWeakenedDefensePower(uint256)", +"94b8896c": "holdAddress2()", +"94b8e58e": "resetWith(address,address)", +"94b8e72a": "Allocate(address,address,uint256,uint256,bool)", +"94b918de": "swap(uint256)", +"94b91deb": "construct()", +"94b91f06": "PARTNERS()", +"94b941db": "investorInfo(uint256)", +"94b9b62f": "getPacifistmasterReq()", +"94b9bdc4": "BlueDiamond()", +"94b9f152": "cancelConversion(uint256)", +"94bab061": "getVersionNo(bytes)", +"94bacfef": "distributeVLD(address[],uint256,uint256)", +"94bb136f": "minFinnRequired()", +"94bb7d64": "itemHistoryOfPlayer(uint256,address)", +"94bbfb56": "changeAffiliatePercentage(uint256)", +"94bc7df4": "BlocksToGo()", +"94bcdb4c": "Example2()", +"94bd5cb6": "newParityOwner()", +"94bdb93b": "MessageAdded(address,string,uint256)", +"94be2423": "setAtomGen(uint256,uint8)", +"94beb9b2": "ConstructBitcoinClue(bytes32,bytes32,bytes32,bytes32)", +"94bf804d": "mint(uint256,address)", +"94bf8862": "numBoards()", +"94c06a58": "descending()", +"94c0ac22": "ExchangeZWCToToken(address,address,uint256)", +"94c0f3e2": "PRESALE_PERCENTAGE_5()", +"94c176e4": "distributeAll(uint256)", +"94c19fb8": "LogSaleClosed(uint256,uint256)", +"94c1d810": "partFromProvider(uint256,address)", +"94c21ff3": "STATEMENT_HASH()", +"94c275ad": "maxConversionFee()", +"94c33163": "getTotalTokensSold()", +"94c33d90": "districtToBuildings(uint256,uint256)", +"94c3fa2e": "getLastBlockHashUsed()", +"94c41bdb": "getPreferedQtySold()", +"94c467d0": "banAuditor(address)", +"94c475ec": "setAltDeposits(uint256)", +"94c4e3c6": "_getVolumeBonus(uint256,uint256)", +"94c6116f": "getNextPeriodTimestamp()", +"94c62fb5": "SPARCPresale()", +"94c64a2e": "updateBtcRate(string,string)", +"94c69715": "bonusInPhase3()", +"94c70cb1": "bonusEnd20()", +"94c77969": "setTokenContract(address,uint8[],bytes32[],bytes32[])", +"94c87a84": "withrawAllEthOnContract()", +"94c89af5": "FeeProvider()", +"94c8cd62": "AreebaCoin()", +"94c90cac": "EliteCoin()", +"94c9b647": "sendTransaction(address,uint256,int256)", +"94ca9f90": "highestBalance()", +"94cace04": "enableMix()", +"94cb0947": "availableTokens(address)", +"94cc0898": "___test()", +"94ccbc1f": "transferPattern(bytes32,address,string,uint8,bytes32,bytes32)", +"94cdbea1": "SetDappinfo(string,address,address,string,string)", +"94cddaf1": "unlockTeamAndReserveTokens()", +"94cec87b": "preSale3Finished()", +"94cf9b1b": "FGCToken()", +"94cfb3d8": "getItemTempHolders(uint256)", +"94d0025e": "getNumberOfOpenSteps()", +"94d008ef": "mint(address,uint256,bytes)", +"94d02fff": "Authored(string,string,uint8,uint256)", +"94d036bf": "validInitialBuyoutPrice(uint256,uint256)", +"94d10c41": "spendUserBalance(uint32,uint64)", +"94d127a8": "calculateSeedBuy(uint256,uint256)", +"94d1330d": "spinnerCounts(uint256)", +"94d1b7e8": "triggerFailFlags()", +"94d26cb5": "getBetterOrderId(bytes32)", +"94d2b21b": "unauthorizedAddress()", +"94d2bdfe": "addSkill(bytes32)", +"94d2ca12": "getByAlias(bytes32)", +"94d2d7a7": "getCreatorAddress()", +"94d3d38d": "registerHello(bool,uint8,int64,int64,string,string)", +"94d3de83": "TeamVesting(address)", +"94d44f12": "createBattle(uint256)", +"94d453db": "MIN_INVESTMENT_PHASE1()", +"94d45856": "placeBet(bytes32,bytes32,bytes32)", +"94d54581": "EICQERC20()", +"94d5539d": "transferLocked(address,uint256,uint256,uint256[])", +"94d63afd": "left3(uint256)", +"94d645a8": "resolveClaim(address)", +"94d702a4": "tgeNextPartInvestor()", +"94d762c3": "Vault(address)", +"94d77363": "getTokenSold()", +"94d95f8f": "MAX_CONTRIBUTION()", +"94d96fa1": "BTC7200on420()", +"94d9c9c7": "setObserver(address)", +"94d9cf8f": "CreateProxyWithControllerAndRecovery(address,address[],uint256,uint256)", +"94da0746": "PRESALE_TOKEN_ALLOCATION()", +"94dafb16": "geteam(address)", +"94db4d05": "changeStakingContract(address)", +"94dba872": "o_automata(uint256)", +"94dbc70e": "lockState(address)", +"94dbe74e": "removeEscrow(address,address,uint256)", +"94dc6f6b": "splitShares(uint256)", +"94dc7cec": "minBuyForPrize_()", +"94dc84ca": "AUTH_INITCONGRESS()", +"94ddc8c0": "submitBallot(bool)", +"94de3825": "_transferToAnotherAddr(address,uint256,bytes32)", +"94df682d": "loginVerify(bytes32)", +"94dfd38a": "test_invalidValue1EqValue2()", +"94e08fc2": "addProduct(bytes32,uint8,uint8)", +"94e09511": "sendTokenToPlatform(uint256)", +"94e0d371": "stage3()", +"94e0e328": "torchRunner()", +"94e0f844": "totalSellOrdersOf(address)", +"94e10784": "_getRate()", +"94e16386": "teammatesworld(address)", +"94e21fa0": "multiPay(address[],uint256[],address)", +"94e25c37": "unlockCustomer(address)", +"94e2662f": "setRequireWhitelistingBeforeDeposit(bool)", +"94e47e61": "create_block()", +"94e4a822": "split(address[])", +"94e4c808": "IPFSStore()", +"94e50e7a": "getSigner(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"94e5b7e6": "getPlace(uint32)", +"94e5e890": "peculOldAdress()", +"94e8075d": "Development()", +"94e8767d": "uintToBytes(uint256)", +"94e93017": "_deployBallot(bytes32,bytes32,bytes32,uint256,bool,bool)", +"94ea9987": "sendEthersToWinnerAddress(address,uint256)", +"94eb463b": "Unset(address,uint32[])", +"94eba0b5": "StarCoin()", +"94ebd374": "purchaseAccessory(uint256,uint256,string,uint256)", +"94ec233f": "boolCallWithArray(bool,bool[4])", +"94ec3756": "resister(uint8,uint256,uint256)", +"94ec3a0d": "playersRequired()", +"94ec7cf2": "setA_Signature(int256)", +"94ed9b77": "append(address,address)", +"94eedaa4": "hirerReleaseFunds(bytes16,address,address,uint256,uint256)", +"94ef987e": "minimumPayment()", +"94efadea": "zoPrice()", +"94efafe9": "publishTemplate()", +"94effa14": "WithdrawETH(uint256)", +"94f0080c": "getBalancePremiumsPaid(address)", +"94f0b43c": "TripusCandyToken()", +"94f13f4a": "getGameItem(uint256)", +"94f183cb": "get_votes()", +"94f188be": "createIssuedToken(address[],uint256[],uint256,uint256,string,uint8,string)", +"94f29cb3": "medalIfFreeze(address)", +"94f2e623": "setLLV_edit_11(string)", +"94f2ed53": "_unlockNinja(uint256,uint16)", +"94f3217c": "MINIMUMINVESTMENTSALE()", +"94f38799": "GoChain()", +"94f3f81d": "removeAuthorization(address)", +"94f47146": "put(bytes)", +"94f5a1af": "LATOPreICO()", +"94f5ffd5": "betMake(uint256,uint8)", +"94f60a63": "getKudosLeft(address)", +"94f61134": "executeOrder(uint256)", +"94f649dd": "getDeposits(address)", +"94f6ba1c": "getMonsterClassBasic(uint32)", +"94f6e8ed": "initBallotProxy(uint8,bytes32,bytes32,bytes32[4])", +"94f75b96": "PerkToken()", +"94f7624f": "NAP()", +"94f8e954": "cancelInvestment()", +"94f92322": "getTotalPrediction(uint256,uint256)", +"94f976c3": "confirmProduct(uint256)", +"94fa3131": "claimBonus(uint16)", +"94fa5bcd": "setNewApproves()", +"94fabfb3": "getDocData(uint256)", +"94fb54d5": "euroThreshold(uint256)", +"94fb86c0": "referral_ledger()", +"94fd1c1c": "SAIToken(address,address,address)", +"94fdb8df": "HolyBible(uint16,uint16,uint16,uint16)", +"94fdbbb2": "createRedeemMessageHash(uint256,bytes4,bytes32,bytes32)", +"94fe344d": "SimpleToken(uint256,string,uint8,string,bool,bool)", +"94fe6ed1": "kTikTakCoin()", +"94ff1426": "_setTransmuterAddress(address)", +"94ff4b2b": "getServerFee(uint256)", +"94ffb819": "addApprover(address,string)", +"94ffe2c7": "PolicyRegistry(address)", +"95005a00": "LIANGToken()", +"95005b8b": "GetPlayerID(bytes32)", +"9500aa12": "MockController(address,address,address,address)", +"950108d7": "WithdrawForeign(address)", +"95029f34": "PendingOwner()", +"9502bb8a": "renounceMaster()", +"9502d761": "ProposalSubmitted(address,uint256)", +"950311ab": "setCurrentAction(uint256,uint8)", +"95032b62": "rand(uint256,uint256)", +"9503c4b4": "SmartRouletteToken()", +"95040933": "mrk_contract()", +"950463fc": "calculateRefundedEthWithDiscount(uint256)", +"9504f28a": "THBCToken()", +"95050862": "optimalExp(uint256)", +"95059465": "textFor(bytes32)", +"9505b2a7": "createPanda(uint256[2],uint256,uint256)", +"9506681f": "updateminContribution(uint256)", +"95066e33": "getTopic()", +"95068886": "change(address,uint256,address,uint256)", +"95069136": "requestLiquidation(uint256)", +"9506a57a": "Marriage(address)", +"9506a75c": "setChild(address,bytes32,bytes32,bool)", +"9507b53a": "SchedulableToken(address,uint256,uint256)", +"9507d39a": "get(uint256)", +"9508614b": "addStage()", +"9509a265": "allocateDividends()", +"9509ba0c": "getJackpotBalance()", +"950b5273": "currentARXtokenSupply()", +"950b550a": "fourth_withdrawal(uint256)", +"950c004d": "PiXD2019()", +"950c3d79": "LizunToken()", +"950c84e4": "presalePart()", +"950cb89e": "_editPriceOf(uint256,uint256,uint256)", +"950d22f2": "setCheckKYC(bool)", +"950da0c8": "calculation()", +"950da0e6": "hasMinRating(address,address,uint8)", +"950dad19": "burnToken(address)", +"950dff20": "cancelCodeUpdate()", +"950ef8c7": "setAuthorityContractAddress(address)", +"950f4170": "gubbermentOverthrown()", +"950f9813": "rejectPartnerAllocation(address)", +"950fabf3": "Lottery(uint256)", +"95101181": "removeAdminAddress(address)", +"9511309a": "setMinimumCollateralInEthAmount(uint256)", +"951166c0": "totalMessages()", +"9512243e": "TokenPurchase(address,address,uint256,uint256,uint256,uint256,uint256)", +"95127634": "upgradeOracle(address)", +"951303f5": "withdrawableAmount()", +"951367ad": "internalExchange(uint256)", +"951382bf": "mainSaleHasEnded()", +"95139780": "checkTokTotal()", +"951481b4": "addEmployee(uint256,uint256,string)", +"951506d3": "withdrawFeeRateE4()", +"9515a524": "BUSINESS_DEVELOPMENT_SUPPLY_LIMIT()", +"9515af55": "AetherClockAuction(address,uint256)", +"95163f39": "_finalizeStage()", +"9516a104": "getAllAddresses()", +"951717e2": "withdrawPrivateCoinByMan(address,uint256)", +"9518589a": "cost1token()", +"95199b24": "claimWin(bytes32,uint8,bytes32,bytes32)", +"9519e398": "aDeposit(uint256)", +"951b01c5": "setCertifierDb(address)", +"951b22fb": "swap(uint256,address,address,uint256,uint256,uint8,bytes32,bytes32)", +"951b26a3": "changeable()", +"951b73b1": "updateEndTimeManually(uint256)", +"951cfa47": "getScope()", +"951d0332": "_price_tokn_ICO1()", +"951d6c9c": "getDevRewardPercent()", +"951d86a4": "setBlockPerHour(uint256)", +"951e17a1": "totalSupplyForDivision()", +"951ea5f1": "setMarketingTokensPercent(uint256)", +"951f4a6e": "_triggerNFTEvent(address,address,uint256)", +"95206396": "numberLoop()", +"9520a06f": "DEFAULT_CREATION_LIMIT()", +"9520bd46": "multiPay(address[],uint256[])", +"9520cc72": "EtherTradex()", +"9520f878": "NaxomartToken()", +"9521000c": "setOnlyShowPurchased(bool)", +"95210e59": "setBattleRemoveContractAddress(address,address)", +"95217ec9": "newAttack(uint32[])", +"9522ca89": "Message_To_Investors()", +"9524bdf8": "_refundTokenCustomer(uint256,uint256)", +"9525c0cc": "cancelVote(bytes32)", +"9525f382": "finalizeSettingCreation(uint256)", +"95260a29": "PEP()", +"95263183": "setACmarge(uint8)", +"95270cd1": "setOraclizeFee(uint256)", +"95275e5e": "minerLockTime()", +"95286077": "UBETCOIN_LEDGER_TO_LEDGER_ENTRY_DOCUMENT_SHA512()", +"952868b5": "onMaintenance()", +"9528724f": "votedFreeze()", +"952882fd": "addtoEarlyInvestors(address,address,uint256,uint256)", +"9528a278": "getAllInvestorPositions()", +"9528d109": "authorSigned(address)", +"9528fcb5": "numSubscribed()", +"952a84ed": "Rocketship()", +"952a9320": "HexanCoin(uint256,string,uint8,string)", +"952ad7cb": "forwardSomeFunds(uint256)", +"952b264c": "FundsReleased(uint256)", +"952c0f9f": "initGold()", +"952d6c22": "tokenSaleEnd()", +"952f2f6f": "setAccountIsFrozenByDate(address,uint256)", +"95306706": "logTraderTradingTx(string[])", +"953078cd": "withdrawDivsWithContract(address)", +"95311142": "dOwnerErc20Claim(bytes32)", +"9531c536": "ReceivedGBP(address,uint256)", +"9531d072": "refundETH(uint256)", +"953203b5": "doMigration(address)", +"9532c476": "setParcelUsd(uint256)", +"953307d8": "revealScissors(string)", +"95331bf7": "commitPhases()", +"95334db2": "toIndex(address)", +"953440f9": "nCeilings()", +"9534e637": "closePoll(uint256)", +"9535ce12": "getBool(string)", +"95360a02": "calCurrentCrystals(address)", +"95364a84": "isPresale()", +"953669be": "tokenHolders()", +"9536c05f": "doCheckSendBounds()", +"9536e0bb": "returnDirectPayments(address,bool,bool)", +"9537796f": "addSubscriptionBonus(address)", +"95377ad9": "testInequalityUint(int256)", +"9537e8d1": "signContract(uint256)", +"9538833c": "changeOwnerAccept()", +"9539c4de": "withheldAmount(address,address)", +"9539ed7e": "changeFlipper(address)", +"953a03ca": "minMillPurchase()", +"953a7fab": "testMoveBalance()", +"953aa435": "GetPrice(uint8)", +"953b42b3": "buyClusterToken()", +"953b7ef8": "withdrawTeamTokens()", +"953b8fb8": "targetAmount()", +"953bad32": "verificationAddressMap(address)", +"953e3450": "DaoRulesProposalAdded(uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"953e474a": "setKoCommissionAccount(address)", +"954056f7": "setRedemptionWallet(address)", +"9540cb80": "End1()", +"9541945a": "registerNode(bytes16,uint16)", +"9541bc41": "getUSDAmount(uint256)", +"954290f4": "guessPassword(address,uint256,bool)", +"95437056": "AUTH_ADDOWNER()", +"95438548": "DONATION_RATE()", +"95441f9f": "ZEEWANTtoken()", +"95449ad5": "changeTimeInvest(uint256)", +"9545c42c": "minForExistingTopic()", +"95470497": "OTHERCRUISER_EXTRACTION_BASE()", +"95475c1f": "makeChild()", +"9547b44d": "Prepurchased(address,uint256,uint256)", +"95480879": "setDefaultMetadataURI(string)", +"9549355e": "oracalizeReading(uint256)", +"954969f6": "godSetInterfaceContract(address)", +"9549c330": "freezeFrom(address,uint256)", +"9549fea9": "MENSA(address)", +"954a5c19": "addPot()", +"954a8f8b": "TransferWithRef(address,address,uint256,uint256)", +"954ab4b2": "say()", +"954b2be9": "SelflleryYouToken()", +"954cbe3f": "mintSpecial(string,string,uint8,uint256,uint256)", +"954d2cfd": "updateUrl(address,bytes32[5])", +"954db474": "newProject(string,string,uint256)", +"954e8c2d": "buyShares(uint256,address,uint256,uint256)", +"954f3b20": "getTransferHash(address,address,uint256,uint256,uint256)", +"954ff2ad": "founderTokenWallet()", +"9550c023": "AllocationRevoked(address,address,uint256)", +"9551dd58": "listener()", +"955214d1": "LogRecordWin(address,uint256)", +"95522e54": "WeaponTokenize()", +"95523f7d": "newMember(string,uint256)", +"95533f17": "isTokenInList(address)", +"95534e00": "getAccountBlocks(address)", +"95535569": "LianBaoCoin()", +"9553652b": "Goldencloudtoken()", +"9553a19b": "BrengsTeamToken()", +"95543693": "ONE_DECIMAL_QUANTUM_ANZ_TOKEN_PRICE()", +"9554a202": "changeSwapperAdd(address)", +"9554c8e5": "getCrydrStorageAddress()", +"9554f920": "fillChannel(uint256)", +"9554fa12": "multiplies(uint256,uint256)", +"9555a942": "withdrawFrom(address,address,uint256)", +"9555c9d9": "capAdjusted()", +"95564837": "seed(uint256)", +"9556a31d": "GVOptionToken(address,string,string,uint256)", +"9556b05d": "OraclePoloniex()", +"95578ebd": "useDELEGATECALL()", +"95579063": "_bidderHasAnActiveBid(address,uint256,address)", +"9558abde": "sycCrowdsale()", +"9558e916": "teamWithdrawalRecipient()", +"9559225c": "debug_hash3Byte(bytes)", +"955b1535": "checkForNewLeader(uint256)", +"955b5e72": "CTCToken()", +"955d14cd": "getLastTime()", +"955d1721": "availableBalanceInLockingPeriodForInvestor(address)", +"955d4412": "addLocation(uint256)", +"955d4d16": "Wixlar()", +"955d50b7": "TestMasterToken(uint256,string,string)", +"955ef429": "closedown()", +"955f0460": "sgpc(uint256)", +"955ff603": "Viviox()", +"95607ced": "retrieveAll()", +"95608083": "_abortCurrentRound()", +"95612ec0": "allowInvestment()", +"95617dc3": "reportGame(string,uint8,bytes32,bytes32)", +"9561a038": "nextContributorIndex()", +"9561f0d8": "setTradingLive()", +"95621ccd": "theBet(uint256,uint256,uint256)", +"95623641": "marketAddress()", +"956248aa": "determinePayout(uint8,uint8,uint8)", +"95635b37": "addMiner(address,uint256,uint256)", +"9563dbcf": "setPeriods(uint256)", +"95645e34": "initialDistribution()", +"956483c1": "lastBlock_f14Hash_uint256()", +"95648f1b": "getFunctions()", +"95652e4f": "revokeAuthority(address,uint256)", +"95655f04": "getWilds(address)", +"9565f2fe": "AllCash()", +"9565feeb": "isBonusPeriod()", +"9566880b": "s16(bytes1)", +"95669952": "debtor(address,uint256)", +"95671958": "getFileListTail()", +"95671ed7": "logEvent(string,bool)", +"9567a161": "newBet()", +"95693aad": "CompositCoinCrowdsale(uint256)", +"956a2d03": "balance(bytes32,string,address)", +"956a2ea7": "setBidRegistry(address)", +"956a538a": "CoinsRemainAfterICO()", +"956a860d": "getMartialInfo(uint256)", +"956ab5d9": "getParetoBalance(address,address)", +"956b76f7": "setVicepresidenteDeMesa(bytes32,uint256,uint256,bytes32)", +"956cc859": "INIT_SUPPLY()", +"956d2172": "setAttackFee(uint256)", +"956e5f00": "LogEtheraffleChange(address,address,uint256)", +"956e958a": "dungeons(uint256)", +"956f4361": "getCampaignsByCountry(string)", +"956fd9df": "balanceOfPlayers(address)", +"956fffd3": "setFinishICO(uint256)", +"95701be3": "rolloverFeePeriodIfElapsed()", +"9570370f": "bondsOf(address)", +"95709441": "mintReputation(int256,uint256,address,address)", +"95722371": "storeX(uint8[],uint256,uint256,uint256,int256)", +"95722e66": "payPool()", +"95725d8a": "emitRoleAdded(address,uint8)", +"957287ce": "market2()", +"9574f4e1": "createMatch(string,string,uint256,string)", +"957563ec": "setProviderLock(bool)", +"95761c77": "SBCS()", +"9576b180": "initGoldData(uint256,bytes32,bytes32,bytes32)", +"9576bfbd": "setWhiteLister(address)", +"9576e5b3": "registerContract(address,bytes32,bool)", +"9577941d": "LogKill(bytes32,bytes32,address,address,address,uint128,uint128,uint64)", +"9578bce2": "setCreditsTokenPrice(uint256)", +"957908d1": "dequeue()", +"95792430": "grant(address,uint256,uint256,uint256,uint256,uint256,bool)", +"957a2772": "lastBlock_f9()", +"957a6254": "bonusScheme()", +"957aa3d1": "goldmintTeamAddress()", +"957aa58c": "live()", +"957ac9ad": "HappyBeeToken()", +"957b2807": "getPlayerPlayInfo(uint256,uint256,uint256)", +"957b2e56": "reinvestDividends()", +"957b52fb": "fidaPerEther()", +"957b781c": "mintBonus(address)", +"957b8d98": "publicsaleTokens()", +"957bb1e0": "bid(bytes32)", +"957c0ff2": "testNoTokensOneCall()", +"957d8250": "allocateBid(address,bytes32)", +"957dcb1e": "mintReservationTokens(address,uint256)", +"957e05d6": "setAllowTransferLocal(bool)", +"957f050b": "merchantAccount()", +"957f120e": "inPublicPreSalePeriod()", +"957f371f": "totalAmountOfEarlyPurchasesWithoutBonus()", +"957f9a0b": "tryFlush()", +"95803d6c": "STARTING_BULLS()", +"95805dad": "start(uint256)", +"9580811c": "setBalanceAdmin(address,uint256)", +"9580c4bc": "migrateFunds()", +"95816a16": "contributionCap()", +"958174a3": "ParentToken(uint256,string,uint8,string)", +"95818603": "fromTweiToFp(uint256)", +"958222aa": "isTokenTransferable()", +"95829738": "institutions(bytes32)", +"9583102a": "verify_send(address,uint256)", +"958343f9": "setOrderDealSpeed(uint256)", +"9583cf17": "claim_period()", +"9584894c": "getElementInfo(uint256)", +"9584fbfc": "TOKEN_SHARE_OF_TEAM()", +"9585a877": "isGameActivated()", +"958689d7": "emitMintEvent(address,uint256)", +"95878da6": "CurrentICOpublicSupply()", +"958799cb": "recordPurchase(address,uint256)", +"95880360": "setExchangeRatePreIco(uint256)", +"9588378e": "reputationOf(address,bytes32)", +"95883871": "TradeListing(address,address,address,uint256,uint256,bool)", +"958993a5": "allocatePrivatePresaleTokens()", +"958a3698": "setITTMultiSig(address)", +"958a41dd": "upgradeToAndCall(string,address,bytes)", +"958a9937": "createProduct(bytes32,uint128)", +"958b12b9": "ICOCap()", +"958b3f20": "final_fundraise()", +"958b6f55": "checkTokenVesting(address,uint256)", +"958c4be7": "makeCollectibleUnavailableToSale(address,uint256,uint256,int256,uint256)", +"958ce2d5": "Spoke(bytes16,string)", +"958d1725": "getChild(bytes32,uint256)", +"958e0028": "SoarCoin()", +"958f3624": "totalTokenWinValue()", +"958fde82": "newPinnedAppInstance(bytes32,address)", +"95907291": "CaptureTheFlag(string)", +"9590d4b9": "testCount()", +"9590ef13": "Option(string,string,uint8,uint256,address)", +"95910d46": "ownerPrimary()", +"95925814": "undo_deadline()", +"95929d22": "_updateNextAmount()", +"9592d424": "totalNodes()", +"95930b1c": "getAssetPacksUserCreated(address,address)", +"95932df3": "addCustody(address)", +"9593aa9a": "JTOKEN()", +"95949823": "setRemark2(string)", +"959499b6": "withdrawProfit()", +"95955d22": "escrowTransfer(address,address,uint256,uint256)", +"9595898a": "updateCard(uint256)", +"95966c3b": "get_eth_balance(address)", +"95969ba4": "enabledAddresses(address)", +"95977749": "IvoryTest()", +"95978868": "strConcat(string,string,string,string,string)", +"95980858": "currentText()", +"95982228": "Multiowned(address[],uint256)", +"95982f44": "GetLottery(uint8)", +"9598790d": "priceTokenSellWei()", +"95988a26": "proposalsRank()", +"95997c51": "withdraw(uint128,address,uint256)", +"9599ab63": "crowdsaleBonus(uint256)", +"959a1f08": "Hive()", +"959ac484": "push(uint256)", +"959b3fa0": "createSkin(uint128,uint256)", +"959b6916": "setCollectTokenTime(uint256)", +"959b8c3f": "authorizeOperator(address)", +"959c265b": "makePlayerID(address)", +"959ca192": "createCoupons(uint256)", +"959cb555": "address_register(address)", +"959d51f6": "W3SchoolToken(uint256,string,string,uint256)", +"959e4748": "totalIssuanceLastModified()", +"959e90ff": "totalTransactionCount(address)", +"959f601e": "getLimitMaxCrowdsale()", +"95a01505": "presaleStorageVault()", +"95a039ba": "getContractAddress(string,string,string,string)", +"95a078e8": "hasAccess(address)", +"95a08221": "tokensTotalSupply()", +"95a0f5eb": "totalMigrated()", +"95a0f9c7": "removeOffer(uint256)", +"95a1297a": "totalRewardsRedeemed()", +"95a13ff3": "polyComplianceAddress()", +"95a1c14d": "addThreeWayLine(uint256,string,uint256)", +"95a2251f": "redeem(address)", +"95a235ae": "set_deposit_address(address)", +"95a23c3a": "adminsPercent()", +"95a2d14b": "IcoCloseTime()", +"95a3bf6e": "getPayoutRequestedState()", +"95a3e2af": "isAddressFrozen(address)", +"95a47652": "getMintingStatus()", +"95a4f76d": "maxSaleNum()", +"95a50a9d": "monarch()", +"95a51233": "totalSupplyCeiling()", +"95a51669": "buyWithETH(address,uint256)", +"95a5418d": "_patternToNumber(bytes4)", +"95a59ac4": "PacificaToken()", +"95a5dfc0": "yes(uint256,string,uint256)", +"95a6f9ab": "makeProposal(string,uint256,uint256,uint256,uint256,address)", +"95a70863": "setOwner(uint16,address)", +"95a8c58d": "hasRole(address,uint8)", +"95aaa5d9": "BatakToken()", +"95ab32a3": "securityPercent()", +"95ad3d98": "ConnectCoin()", +"95addb90": "questions(bytes32)", +"95adfe72": "getPlayerPrice(uint256)", +"95ae0bf9": "extCreateNinja(uint256,uint256,uint256,uint256,address)", +"95ae66a5": "MilestonePricing(address,uint256,uint256[])", +"95af7006": "setFirstBonusPercent(uint256)", +"95afc05c": "withdrawRefunds()", +"95b1157d": "setLockAccount(address,uint256)", +"95b18bbe": "Created(address,uint256,uint256)", +"95b1e4f2": "addClaim(uint256,address,uint256,bytes32,bytes32,string)", +"95b1f93b": "changeStakerOperation()", +"95b2110a": "queryAirCrash(string)", +"95b25a1c": "Biograffi()", +"95b2d128": "TokenFund(address)", +"95b34f71": "_getTokens(uint256)", +"95b3559f": "CertifyDelegate(address)", +"95b3c92f": "TioToken()", +"95b3dc77": "setTransferableTime(uint256)", +"95b4b88d": "allowanceSub(address,uint256)", +"95b505f0": "getMigrateOutReporterValue()", +"95b537d5": "selfOn()", +"95b5d5ac": "token_ask(address,uint256)", +"95b68fe7": "getTokenToEthInputPrice(uint256)", +"95b6a08d": "canDisburseMultipleTimes()", +"95b71187": "getByFromCount(uint256)", +"95b7c348": "ICOCappedRefundableCrowdsale(uint256,uint256,uint256,address,address)", +"95b7ea26": "GetMaximumBet_ether()", +"95b7f0aa": "_removeAuction(address,uint256)", +"95b890d6": "purchaseTokensWithoutDevelopmentFund(uint256,address)", +"95b8cf55": "signalBackupWithdraw(address)", +"95b8fdef": "setCompte_22(string)", +"95b96e11": "PeriodEnd(uint16,uint256,uint64)", +"95b9bb68": "setCompositionAddress(address)", +"95ba64c9": "LogForbid(bytes32,bytes32,bytes32)", +"95bad022": "countTeam()", +"95bb733b": "CurrentCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"95bb8d46": "publicSaleTransfer(address[],uint256[])", +"95bb9fcf": "getHolding(uint256)", +"95bbbe45": "transferFundWalletWallet(address)", +"95bc2673": "remove(bytes32)", +"95bc3bd0": "lockAmount(address)", +"95bc7eec": "payFunction()", +"95bc8515": "setHolder(address,uint256)", +"95bc9538": "changeStatus(uint8)", +"95bda19d": "register(address,uint256,address)", +"95bda742": "_create_user(address,address)", +"95bdca94": "isTyped(address,uint256)", +"95be55a6": "increasePrice_20_February()", +"95be7542": "CoinLLeague()", +"95be9ace": "NewDeal(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool,string)", +"95c02700": "ACN()", +"95c08f92": "investmentOf(address)", +"95c0954c": "ownerOfUUID(string)", +"95c0c3f6": "confirmGameEnded(bytes32)", +"95c0c447": "getLimitTypeOf(address)", +"95c0d65c": "editRank(uint256,uint256,uint256)", +"95c0e6c3": "transferOwnershipAtomic(address)", +"95c21ebf": "blueOs()", +"95c26d93": "thirdTierDiscountUpperLimitEther()", +"95c2d845": "driveCar(string)", +"95c303bc": "pyramid(address,uint256,bytes32)", +"95c30910": "unFreeze(address,address)", +"95c3be0b": "participantIndex(uint256)", +"95c3fc9b": "_setPowerBalanceOf(address,uint256)", +"95c43d84": "PHASE2_SUPPLY()", +"95c47416": "VoteOnMyTeslaColor()", +"95c4e59b": "AXIACOIN(address,address)", +"95c55798": "WZCoinToken()", +"95c5a2cc": "halfPercent(uint256)", +"95c5ed9d": "getVoterStatus(bytes32,address)", +"95c6fa61": "keyOf(bytes32,bytes32)", +"95c7a23f": "AutoBuy()", +"95c7b007": "setFreezeTx()", +"95c8d4ee": "grantAllocation(address,uint256,bool)", +"95c92d98": "viewTotalAffiliateCommissions()", +"95c93f8b": "setTierRates(uint256,uint256,uint256,uint256)", +"95c96554": "cancelVote()", +"95c97432": "nSubmittedHashes()", +"95c9f53f": "scaledDividendPerToken()", +"95cc2e8b": "DATE_ICO_START()", +"95cc74fe": "buyFromPartner(address)", +"95ccea67": "emergencyWithdraw(address,uint256)", +"95ccf8bf": "forward(address,address)", +"95cd73a2": "OpCoin()", +"95cd76fa": "getMaxOwners()", +"95ceb4b3": "winningProtocal()", +"95d12000": "ownerPercent()", +"95d22683": "MyUserName(string)", +"95d2b4b4": "_createMonster(uint256,address,uint256,bool,bool,bool)", +"95d38ea8": "mintableToken()", +"95d395dd": "XDToken()", +"95d47f2f": "lastBlock_f8Hash_uint256()", +"95d4f7dd": "primaryGasLimit()", +"95d5766c": "foundersContract()", +"95d5a1be": "SignatureReg()", +"95d5f6fd": "officialSite()", +"95d643a8": "earnings()", +"95d6718a": "grantOf(address)", +"95d697c4": "ProofOfReadToken(uint256,uint256,string,uint8,string)", +"95d793d9": "deposit(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"95d84b30": "_replaceContract(address)", +"95d84d99": "setColorPurple()", +"95d89b41": "symbol()", +"95d8f60d": "sumHardCapICOStage6()", +"95d9a030": "externalControllerCandidate()", +"95d9cc18": "setStdOwner(address,address)", +"95db03fe": "krypteum()", +"95dba6c9": "getHealthForCost(uint32)", +"95dbee2d": "gift(address,address,uint256)", +"95dcac25": "IGTSGD()", +"95dd489b": "winningsPerRound()", +"95dd9193": "borrowBalanceStored(address)", +"95ddb3a6": "setJewelContract(address)", +"95de00a2": "getReservedDestinationInfo(address,bytes32,address)", +"95dea05b": "cleanActions(bytes32[])", +"95e05110": "sumHardCapICOStage3()", +"95e16e97": "validateraffle()", +"95e19fab": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[])", +"95e1d9f7": "getGamesForAdmin(address)", +"95e2a953": "etherRatioForInvestor()", +"95e2c773": "privatePreICOdepositors(address)", +"95e2db3d": "getDistributionContracts(address)", +"95e396f9": "crowdsaleTokensWallet()", +"95e3c50b": "tokenToEthSwapInput(uint256,uint256,uint256)", +"95e3cd5c": "preAllocation(uint256,uint256)", +"95e4c1bf": "hasConfirmedRecord(bytes32)", +"95e4d456": "DUNGEON_CREATION_LIMIT()", +"95e517be": "Offer(address,string,address)", +"95e52d98": "documentsCount()", +"95e66ea1": "isLeftTokenIssued()", +"95e77a05": "testItemStrict(bytes)", +"95e7b3c5": "angelRate()", +"95e87385": "availableRef()", +"95e8a67e": "toB32(bytes,bytes)", +"95e8d644": "requestRemoveOwner(address,string)", +"95e8f3e7": "get_hash()", +"95e911a8": "feeBase()", +"95eb84c0": "takeLoanOrderOnChainAsTraderByDelegate(address,bytes32,address,uint256,address,bool)", +"95eb8f15": "Attempt(address,uint256)", +"95eced5f": "ZToken(uint256,string,string)", +"95ecef72": "gSetRunning(bool)", +"95ed857c": "mintPredefinedTokens()", +"95ee1221": "isCancelled()", +"95ee4cfd": "set_percentFeeTimes5(uint256)", +"95ee8bae": "getInt(address,bytes32)", +"95eeb240": "disableApproval()", +"95ef9178": "setTokenSaleContractAddress(address)", +"95f0684b": "getPackageNameHash(uint256)", +"95f0f107": "_setBridgeAmount(uint256,address)", +"95f11ce6": "deleteCandidate(address)", +"95f1260b": "balanceToWithdraw()", +"95f16de8": "companyWithdraw()", +"95f17bce": "cancelCost()", +"95f20e88": "RANDCRYPT(uint256,string,string)", +"95f22405": "getImageInfo(uint256)", +"95f28272": "salesTokenHolder()", +"95f382bc": "depositVault(uint256,uint256)", +"95f47e4e": "setRegulatorAccessLevel(address,uint8)", +"95f5784f": "FIBASK()", +"95f59fe1": "vote(string,string,string)", +"95f62fb9": "registerDevices(bytes32[],bytes32[],bytes32[])", +"95f847fd": "transferToContract(address,uint256,uint256)", +"95f9432d": "ThankYouToken()", +"95fa7430": "get_iconiq_tokens(address,address)", +"95fbdcd9": "MeshToken()", +"95fbfa0d": "testBurningUndistributed()", +"95fc6354": "PLAYER_START_PERIODS()", +"95fc799f": "allocateRestrictedTokenToPartner(bytes32,bytes32,uint256)", +"95fcb00d": "addVesting(address,uint256)", +"95fdc999": "getFlag(uint256)", +"95fdd612": "hasRequested(bytes32,address[])", +"95fe0e65": "createD(uint256)", +"95fe27d3": "SmartCripto()", +"95fe4608": "revokeCert(bytes32,bytes,bytes32,bool,uint256)", +"95fe5234": "setSubnodeOwner(bytes22,address)", +"95fe6865": "checkIfCanUseTokens(address,uint256)", +"95fe6f1d": "isAddressReserved(address)", +"95ff24e3": "SellTokens(address,uint256,uint256,uint256)", +"95ff3cc1": "getMyApples()", +"95ffff09": "getMyBananas()", +"960024ff": "rebuyStarted()", +"96002aef": "offerProductOwnership(bytes32,address)", +"9600ead9": "RESELLING_UNLOCK_COUNT()", +"9600ec92": "transfer(address[],address,uint256[])", +"9600f294": "refundTokenPayment(uint256,address,string,uint256,address)", +"9601065d": "reachedMajority(uint256)", +"96013c9c": "testLatestPkgGetter()", +"960173b5": "aliceClaimsDeposit(bytes32,uint256,uint256,address,address,bytes20)", +"9601deb8": "LogTransferOwnership(address,string)", +"96023032": "updateContractAddr(string,string,string,string,address)", +"9602339d": "AlfaTowerShares()", +"96023cbf": "registraToken(bytes32)", +"96026d61": "BucketAndValuationAndCommitted(uint256,uint256,uint256)", +"9602bb20": "AMBTICO()", +"9602e9d5": "withdrawDev()", +"960384a0": "getValue(string)", +"96038f8f": "ICO_Graphene()", +"9604702a": "matchExistingBids(bytes32)", +"960491d7": "setNextRndTime(uint32,uint32,uint32)", +"9604a24b": "getPoolCapSize(uint256)", +"960524e3": "getInvestorCount()", +"96063049": "rollDice(uint8)", +"96066cf9": "MintConfirmed(uint256,address,uint256)", +"96069ee1": "CIPToken(address,uint256)", +"96074e70": "addBeneficiary(address,uint256)", +"9607610a": "withdrawFor(address,uint256,uint8,bytes32,bytes32)", +"960787a2": "sendFoods(address[500],uint256[500])", +"9607a1db": "claimShare(uint256,bool)", +"9608088c": "setAddress(address,address,address,address)", +"960834f4": "dAddBallot(bytes32,uint256,uint256,bool)", +"9608740e": "verifyBid(uint256,bytes32)", +"9608e9df": "DataWasRecorded(address,uint256,bytes32,uint256,string)", +"960954af": "chargeAdvertisers(address[],uint256[],address[],uint256[])", +"960983f4": "addArtifact(string,string,bytes32)", +"9609e488": "TootyrCrowdSale()", +"960a48ae": "createPreIco(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"960a57fc": "SHA256HashRegister(bytes32)", +"960ba088": "createFinancialStrategy()", +"960bfc9b": "_owns(address,uint64)", +"960bfe04": "setThreshold(uint256)", +"960d3f56": "impl_mining(address,uint256,bytes)", +"960d8cd3": "testFailUpdateLatestRevisionNotOwner()", +"960d94bb": "get_presale_goal()", +"960e55a8": "ChannelCloseRequested(address,address,uint32,uint192)", +"960e80b7": "trans()", +"960ecf0c": "addNewStage(uint256,uint256,uint256,uint256,uint256)", +"960fa70f": "synthGenes(uint256,uint256)", +"96102d7d": "ownerSetWallet(address)", +"9610b1bc": "resumeTokenTransferFromAddress(address)", +"9610e068": "GetAskingUnitPrice()", +"9610f0e6": "pveBattleFee()", +"96119f12": "SkribbleToken()", +"9611bfc5": "_getExistingTileAt(int32,int32)", +"96131049": "withdrawal(address)", +"96132521": "released()", +"9613bc90": "isEvolvementAllowed(uint256,uint256)", +"9613e19b": "createAuction(uint256,uint256,uint256,uint32,uint32)", +"96147933": "ContractEnabled()", +"9614c769": "setDesc(string)", +"9615ecb2": "wasSuccess()", +"9616b410": "incFreezeIndex(uint256)", +"96176797": "LogTransition(bytes32,uint256)", +"96178c20": "totalSupply2()", +"9617d90d": "cartaxiToken()", +"96186b6e": "MAX_PERCENT_OF_PRESALE()", +"961891d5": "changeEscapeController(address)", +"9619367d": "minBet()", +"961a16f2": "secondExchangeRate()", +"961a9218": "setLLV_edit_17(string)", +"961a929c": "gasPriceLimit()", +"961b16a1": "addInTeamBalanceMap(address)", +"961b2b96": "assignBountyAddresses(address[])", +"961be391": "cash()", +"961c2470": "refundRoots()", +"961c9ae4": "createAuction(address,uint256,uint256,uint256,uint256)", +"961cc569": "airdropReceiversLimit()", +"961cd8ce": "ticketsForWithExcess(uint256)", +"961d1284": "isRefundingEnabled()", +"961d30cc": "getMasterNodesDates(address)", +"961d3cd3": "setExclude(address,bool)", +"961e99d9": "startBuyBackTwo()", +"961f1d96": "RANGESTART_3()", +"961ffc68": "GatewayInterfaceAddress()", +"9620b995": "transfterForProjectManagement(address,uint256)", +"96214735": "setDeployer(address)", +"962174b6": "LotteryClaveChain(address)", +"9621bcf7": "publishTaskListing(string,address,uint256,uint256,uint256,uint256)", +"9621f497": "SetMaxAirDropXblock(uint256)", +"96221dc9": "mulX(uint256)", +"962318b8": "teamKeepingPercentage()", +"96242f41": "getFrontEndTokenSupply()", +"96246eb8": "Zmbc()", +"9624e534": "setBlockDotNumber(uint256)", +"9625a6c6": "hardLimitICO()", +"9627bf02": "preIcoEndsAtChanged(uint256)", +"96283310": "setHouseAddressShare(uint256)", +"96284fb6": "getNizkStruct()", +"96286cc9": "isTokenOwner(address)", +"96289427": "transferRestTokensToOwner()", +"9629da17": "withdraw(uint64,address,address[],bytes32[],address[],uint256[])", +"962a64cd": "convert(string)", +"962aab81": "blockEnded()", +"962ba36f": "quarantine(address,address[],uint256[])", +"962ba969": "ExceedIOToken(uint256,string,string)", +"962c9898": "SOLUSToken()", +"962c9c8d": "MAX_VOTED_TOKEN_PERC()", +"962ca53e": "Cosby()", +"962d0c72": "overRaisedUnsend()", +"962dae57": "getPriceContract()", +"962ffeae": "totalCurrentFunders()", +"9630961d": "createRole(bytes32,address[])", +"9631c1bd": "FounderFeeInPercent()", +"9633303f": "setSrc(address)", +"96344d05": "creatorRequestFundTransfer()", +"963476e5": "listBackers()", +"9634ef56": "start_of_report_period()", +"9635024c": "TANDER()", +"96354f6d": "BONUS_ICO_STAGE1_PRE_SALE3()", +"9635eaf7": "fundsToAddress(address,uint256)", +"9635fc2c": "yahooOracleUrl(bytes32)", +"963630a3": "ETGOLDToken()", +"963632d3": "Prosperity()", +"96365d44": "poolBalance()", +"96370fa2": "savePic(string)", +"963749b6": "calculateWinnerPrize(uint256,uint256)", +"963812c3": "createItemId()", +"96382f0b": "gameStatus(bool)", +"96383c04": "setPrice(uint256,uint8)", +"96386ab3": "myMethod2(string)", +"96389bd7": "OwnedController(address,address)", +"9638a89c": "DataRecordIndexStructs(uint256)", +"963a9a13": "startInvite()", +"963c0724": "Lucky()", +"963c1121": "set_pre_kyc_iconiq_bonus_numerator(uint256)", +"963c11df": "totalScammed(address)", +"963c3397": "winning_year()", +"963c6017": "postGoldPeriod()", +"963d62fb": "tokenLossRatio()", +"963dd1dd": "Diatom()", +"963de4d2": "GetBet(uint256,uint256,bool)", +"963e2680": "setMinSiteTipPercentage(uint256)", +"963e49c7": "FindCarrot()", +"963e63c7": "minValue()", +"963f2334": "settleCaller(address,address,uint256)", +"96401470": "TutorialToken(uint256,string,uint8,string)", +"96406391": "setTokenDistribution()", +"9640da30": "ethRedeemed()", +"96419497": "PAXToken(bool)", +"9642a19c": "optInGas()", +"9642ccdf": "functionName(bytes20,address)", +"9642ddaf": "testMint()", +"9643aef4": "testControlCreateWithParentSameNonce()", +"9644fcbd": "changeMembership(address,bool,string)", +"96450a6d": "walletWithdraw()", +"9645337a": "removeOrder(uint256)", +"9645bae5": "newAuction(uint256,uint256)", +"964620d2": "TheMostPrivateCoinEver()", +"96463fc6": "createTrade(uint256,uint256)", +"96468249": "getFoundation(address)", +"96469132": "setPonziPriceInWei(uint256)", +"9646b85d": "getMintableAddress()", +"9646df4d": "presaleEnds()", +"9647259c": "dividendDistribution()", +"9647df97": "TES()", +"9648c9f4": "sessionId()", +"9649650c": "removeBank(address)", +"96497258": "withdrawOverdraftTokens(address,uint256)", +"964997a4": "MoacSupply()", +"9649ccaa": "updateSubscriptionOffer(uint256,uint256)", +"9649d98b": "restrict()", +"964a4ac7": "ULTRA_HERO_MULTIPLIER()", +"964ad434": "TIER1_CAP()", +"964afe08": "addSomething(uint256)", +"964b97de": "box2Star5()", +"964c0b40": "ExtensionCalled(bytes32[8])", +"964c7d84": "addressToBlock(address,bool)", +"964c836c": "receiveExecutionNotification()", +"964ecc09": "forceRefunding()", +"964f61f9": "getCosigner(uint256)", +"964f6dcd": "Elephant()", +"964f8fba": "totalDinoSold()", +"964fad94": "fundingGoalOf(uint256)", +"964fb96d": "test_init()", +"965232c0": "getTotalAllowed(address)", +"9652389c": "setPreSaleOn()", +"9652713e": "runSigned(uint40,uint256,address)", +"96532d1c": "mintingAllowed()", +"9653dee5": "tokenSwap()", +"9653f8a1": "etherBalances(address)", +"965447d9": "toPowerOfTwoThirds(uint256)", +"965582d6": "requestNewID(string,string,string)", +"9655943e": "validMCAmount()", +"9655e4b0": "sellIdeas()", +"965693ee": "TicketsPurchased(address,uint256[],uint256[],uint8[])", +"96574919": "removeStakerFromArray(address)", +"96577caa": "getLowWinPercent(uint256)", +"9657f8ad": "TopiToken()", +"96581de1": "registerPayments(address[],uint256[],uint256[])", +"9658522c": "createPlayerOnAuction(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,uint256)", +"96594efb": "WorldBit(address,bytes2,bytes2,uint256,uint256,string,string,string,string)", +"9659867e": "mintCount()", +"965a324e": "OxShelterEye()", +"965a3b7e": "targetDemographics()", +"965a79fb": "getAllJobs()", +"965acc73": "setCampaignBudgetById(bytes32,uint256)", +"965b0cc4": "signedApproveAndCallCheck(address,address,uint256,bytes,uint256,uint256,bytes,address)", +"965b2bae": "setFinancierParticipationAdd(address)", +"965b5aa8": "paySolutionRewardGoodRep(address,uint256)", +"965b71bc": "cfoWithdraw()", +"965bdf33": "SetAuditedAssetSize(uint256)", +"965be457": "registerApp(bytes32,address,bytes4[],address[])", +"965beae8": "bulkTokenSend(address[],uint256)", +"965c643f": "setReference(bytes32,string)", +"965c90e3": "getNodeByIndex(uint256)", +"965edec5": "_publishSecret()", +"96603e88": "hotPotatoHolder()", +"9660ab3a": "setContractUser(address,bool)", +"9660aeeb": "isMatching(int256,int256,int256)", +"96617ba4": "ClientsNotified(string,string)", +"966203e7": "Product(bytes32,bytes32,address[],int256,int256,address,address)", +"9662355e": "generateAttestForDelegationSchemaHash(address,address,uint256,bytes32,bytes32,uint256[],bytes32)", +"96637b10": "getEscuela(uint256)", +"9663871f": "recursiveRound(uint256,uint256,uint256)", +"9663a496": "awardBronze(address,address,address)", +"9663f88f": "getBlockHash()", +"96642cfc": "_isAuctionExist(uint256)", +"9664ca94": "date_string(string,int8,int8,int16)", +"9664d2d9": "resourceIndex(address,bytes4)", +"9665688e": "setGame(uint256,uint256,uint256,uint256,uint256,uint256)", +"966588d4": "cloneWithTwoPops(uint256,uint256)", +"9665b658": "changeExecutor(address)", +"9665ef09": "bitmask_show(address)", +"9665f170": "pregnantEtherDogs()", +"96661b04": "closeDataResponse(address,bool)", +"9666856d": "stopList(uint256)", +"9666cbfa": "getDeployedMatches()", +"9666e1f9": "isCosignerSet(uint256)", +"966704c2": "autoTransferLocked(uint256,uint256)", +"96682704": "TransferToReferral(address,uint256)", +"96686560": "Setup(string,string)", +"96687919": "_preSaleSupply()", +"9668b281": "AKContract()", +"966933ce": "DURATION_PER_VESTING()", +"96696da8": "getHives()", +"966a1961": "get_time()", +"966a360c": "newExchange(address,uint256,address,address,uint256)", +"966a3b29": "setJMETHExchangeRate(uint256)", +"966a7dca": "payOrder(string)", +"966aa252": "addProperty(bytes32,bytes32,bytes32,bytes32,bytes32,uint256,bytes32,bytes32,uint256)", +"966acb38": "testThrowTransferNotTransferable()", +"966aeece": "changeWhitelister(address)", +"966b3514": "contract_address()", +"966b7d91": "AdminChangedFundingWallet(address,address)", +"966dae0e": "factoryAddress()", +"966dcd26": "intertransfer(address,address,uint256)", +"966e6ead": "DefaultReleaseCalled()", +"966edae7": "lastBlock_a3()", +"966f697c": "_getSubscription(bytes32,address)", +"966ff650": "totalBurnt()", +"9670078c": "burnDNC(address,uint256)", +"9670591b": "giveAwayHoldership(address)", +"9670c0bc": "getPrecision()", +"9671ef91": "WEI_TO_INSIGHTS()", +"9673d6a3": "events(string)", +"96744afb": "ADDR_TEAM_TOKENS_ACCOUNT()", +"967506be": "deleteTokenAddress(address)", +"9675bb9c": "totlePrimary()", +"967743a8": "unlock20Done()", +"96778446": "addVestingUser(address,uint256)", +"967826df": "maxAllowedManualDistribution()", +"96784f45": "balanceOf2(address,address)", +"9678a1e8": "ProxyCreated(address,address)", +"9678df74": "MerlinCash(uint256,string,string)", +"9678eb05": "SafeDiv(uint256,uint256)", +"9678fb88": "TACTICALCRUISER_MAX_CARGO()", +"96793725": "registerWallet(address,address)", +"9679dd7d": "tokenLeft()", +"967a08f7": "raiseTransferEvent(address,address,uint256)", +"967b2692": "SaleCount()", +"967b3c21": "unitEpicGrowth()", +"967c33b3": "Deployer()", +"967dd0ae": "orderFor(address)", +"967e6e65": "getAge()", +"967e8611": "placeCube(uint64,uint64,uint64,uint256,uint256)", +"967f1cc6": "ownerPause()", +"967ff23e": "blocks()", +"96800dfd": "updateCap(string,uint256)", +"96817396": "bonus20end()", +"96821fc1": "MAX_MILESTONE()", +"96834e36": "ownerSetStandardFee(uint256)", +"9683d11d": "OHWOWW()", +"9683fe3e": "create(address,bytes32,uint256,address)", +"9684da1a": "createGenesisUniverse()", +"9684fe92": "interestCycleLength()", +"9685e736": "stopAvatarCreation()", +"96862e2d": "PattyCoin(uint256,string,string)", +"968790d0": "reclamaPagamento()", +"96879353": "CreateIco(address,uint256)", +"968803e3": "CYC()", +"96881d20": "CoinParkToken()", +"968858c8": "tokenreward()", +"9688738b": "TokenContract()", +"968908a3": "createMarketMaker(uint256,uint16,uint256)", +"968997fb": "FootballToken(uint256,string,uint8,string)", +"9689ac95": "TYPE_NOT_AVAILABLE()", +"9689e535": "CBCC()", +"968b12aa": "Crowdsale(uint256,uint256,uint256,address,uint256)", +"968bb12c": "setLegalFileLink(string)", +"968bd60d": "LogSendReward(address,address,string)", +"968be45d": "MYPPToken()", +"968c15de": "inscription(uint256)", +"968d1cff": "percentForCommunity()", +"968d73d8": "start_service2(uint256,address,uint32)", +"968d901b": "getCurrentGame()", +"968ed600": "totalFunds()", +"968f0a6a": "getBidBySiteIndex(uint8,uint256)", +"968f9dc3": "EtherReserved(uint256)", +"968fc02a": "DogRace()", +"9690be37": "deleteGame(bytes32)", +"9690caa6": "Umint21()", +"9691a8bf": "changeIndividualCapInWei(uint256)", +"969235a4": "getSaleStart()", +"969283e2": "availableVolumeEnclaves(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"969295ae": "changeReferral(address)", +"96934e88": "isReward()", +"96937617": "Rpct()", +"96938d5b": "watchedAddress()", +"969464f6": "isCauldronExpired(uint8)", +"9694f039": "founderSupply()", +"96957869": "verifySignature(bytes32,uint8,bytes32,bytes32)", +"9695e3c0": "EOMarketToken()", +"9696e59a": "totumPhases()", +"9696ef66": "SLOTS()", +"9696fbf5": "Daschain(uint256,string,string)", +"96974e47": "setMinAllowedBetInTokens(uint256)", +"96984631": "RANGESTART_10()", +"9698d611": "setSaleManageContract(address)", +"9699ca16": "getPublicKey(bytes32,uint8,bytes32,bytes32)", +"969ac477": "PRIZE_POT_PERCENTAGE_MAX()", +"969be87e": "testGetNewItemId()", +"969bece3": "setRegionOnSale(uint16)", +"969bf358": "getCurrentTokenSaleId()", +"969ca0eb": "scavengeEscrow(uint64)", +"969cb4da": "changeSubmissionPrice(uint256)", +"969cb7c3": "getPublisher(uint256)", +"969d5b94": "changeMultiSigWallet(address)", +"969da324": "updatedEtherPrice(string)", +"969ddd71": "getMaxCap(address,uint256)", +"969e3756": "exchange(address,address,uint256)", +"969ea336": "maximumInWei()", +"969eb430": "updateVerifiersPerShard(uint256)", +"969ef40d": "updateFinishFlag()", +"969f1af4": "addMinerQuest(address)", +"969f8a83": "getConfirmations(bytes32)", +"969fa9d2": "EmergencyWithdrawalSucceeded(address,uint256)", +"969fbf12": "contructor()", +"96a04925": "retreiveTokens(address)", +"96a16793": "changeOraclizeAccountingSettings(uint256)", +"96a1e85c": "get_total_quantity()", +"96a34fc7": "exchangeToken(uint256,address,address)", +"96a44d35": "devuelveApproles(bytes32)", +"96a49d60": "getCircle()", +"96a51fde": "OilVisionShare()", +"96a566be": "PartnersNotSet(uint256)", +"96a625a5": "plantcToken()", +"96a68b91": "makeUndestroyable()", +"96a69d04": "totalSquareStakes(uint256,uint256)", +"96a6a748": "POHStopTime()", +"96a70169": "tradeETH(uint256)", +"96a77176": "setPresaleTwo()", +"96a7cf6a": "callDestruct()", +"96a80699": "postAllocateAuctionTimeMints(address,uint256,uint256)", +"96a942c7": "minTokenPurchaseAmount()", +"96a952a5": "setInstallmentsLoanData(uint128,uint256,uint24,uint40,uint32)", +"96a9df88": "_withdrawAirdrop(uint256,bytes)", +"96aa6305": "totalNotCompleted()", +"96aab4f6": "setBountyAddresses()", +"96ab97a5": "hasVested(address)", +"96ac591e": "postICO(address,address,address,address,address,address,uint256)", +"96ad4131": "getRequiredAdmin()", +"96ad6c8a": "deposit_address()", +"96ad704a": "addToken(address[16],address,uint256)", +"96adad2e": "sellStores()", +"96adfe42": "mintWithData(address,uint256,bytes)", +"96ae44f6": "addAcceptedArbiter(address)", +"96afb365": "reclaim(bytes32)", +"96afc450": "emissionRate()", +"96afccb3": "withdrawDonation(uint256)", +"96b01c37": "warriorToOwner(uint256)", +"96b116c6": "statusDoacao()", +"96b1348a": "claimTokenFunds(address)", +"96b1e4d4": "isFreeze(bytes32,bytes32)", +"96b2c923": "changePlatformWithdrawAccount(address)", +"96b47f0d": "soldOnStage()", +"96b55f7d": "tierCount()", +"96b58ac8": "tokensLeftForSale()", +"96b5a755": "cancelAuction(uint256)", +"96b5c5f4": "FeeWallet(address,uint256,uint256)", +"96b5f7b6": "ParallelWorld()", +"96b6af5a": "submitCustodianDoubleSign(address,uint256,bytes32[],uint256[],bytes32[])", +"96b76c23": "stand(uint256)", +"96b828b4": "Lock(uint256,uint16)", +"96b86436": "foundersAllocatedAmount()", +"96b86e1d": "PLCRVoting(address)", +"96b90b05": "Apex()", +"96b9a9d0": "medalBoostAndBurn(uint16,uint64)", +"96bb1fef": "claimStakingRewards(address)", +"96bba9a8": "slashSmallUsername(string,uint256)", +"96bc0f94": "onlyAdminsFriends()", +"96bc1a89": "getLockedAmount_investors(address)", +"96bc2287": "PRE_FUNDING_GOAL()", +"96bc3f3a": "getForecastScore(uint256)", +"96bc4a40": "bsWallet()", +"96bc5ab7": "setOracleURL(string)", +"96bcf236": "am_i_on_the_whitelist()", +"96bd09a1": "edit_safe(address,string,string)", +"96bd8dae": "transferAllowance(address,uint256)", +"96be8878": "team2Balance()", +"96bf15bf": "gamePrice()", +"96bf4ed5": "TOTAL_TOKENS_FOR_CROWDSALE()", +"96bf5022": "MRIDUL()", +"96bfc229": "isInWhiteList(address)", +"96c0fb8b": "setWhiteListInBatch(address[])", +"96c108c9": "assignToBeneficiary(address,uint256)", +"96c12acb": "Fuck()", +"96c14d92": "closeContract(bytes32,bytes32,uint256,uint256,uint64,uint64,bytes32,bytes32,bytes32,uint64)", +"96c16735": "UselessAirdroppedToken()", +"96c237b4": "getDeedInfo(address)", +"96c266ca": "developersKey()", +"96c28881": "fundraise_max()", +"96c2d498": "XTL()", +"96c2d4c9": "totalTipForDeveloper()", +"96c36170": "icoEtherBalances(address)", +"96c38294": "getETHUSD()", +"96c52fc3": "____forward(address,uint256,uint256,bytes)", +"96c5406d": "tokenFree()", +"96c5743a": "test03AliceBuyToken()", +"96c5ea93": "icoBeginDate()", +"96c62b27": "BalanceBook()", +"96c72144": "GrimReaperAddress()", +"96c74715": "NBW()", +"96c7a2a3": "BlockRxToken(uint256)", +"96c81be5": "unicornsOf(address)", +"96c824a8": "createAccountFundContract()", +"96c82e57": "totalWeight()", +"96c85b59": "TestBancorFormula()", +"96c8da45": "oneTokenInEur()", +"96ca7653": "LottixTest()", +"96cb4bc5": "RESERVED_ECOSYSTEM_GROUP()", +"96cc7be7": "updateCeleb(uint256,uint256[6],uint256[6])", +"96ccacb0": "hour_blocks()", +"96cdb027": "InstallerEscrow()", +"96ce0795": "denominator()", +"96cea3f7": "confirmWithdrawTransaction(uint256)", +"96ced078": "getPlayerNumbersInGame(uint256,address)", +"96cf5227": "changeLockTime(uint256)", +"96cfd124": "signedTransferHash(address,address,uint256,uint256,uint256)", +"96cfda06": "getCourseCount()", +"96cff3df": "getMinimumCallCost(uint256,uint256)", +"96d002a0": "subFundBalance()", +"96d02099": "rsplit()", +"96d122ea": "getStoreAddress(string)", +"96d195bd": "getWitnesses()", +"96d1c952": "filterBuyers(bool)", +"96d28e00": "spinDeposit()", +"96d2ede5": "preBalanceOf(address)", +"96d3196b": "getSumActiveToken()", +"96d373e5": "cast()", +"96d37936": "finishTokenMinting()", +"96d43cc6": "getMinimumFundingGoal()", +"96d46500": "ICO_CAP2()", +"96d4cb9b": "FipsRegistration(bytes20,address)", +"96d4d091": "advisorAddress()", +"96d4ebf1": "finneyPerToken()", +"96d4f640": "createOrder(address,uint256,address,uint256,uint256)", +"96d6401d": "TRANSFER_PROXY()", +"96d66cf8": "expertsAccount()", +"96d6c134": "coreVUPDestination()", +"96d7a9ed": "_menu(bytes32)", +"96d7f3f5": "lastTimeMinQuorumMet()", +"96d811b7": "TokenVesting(address)", +"96d8b050": "claimTokensToOwner(address)", +"96d8f4f3": "minimumDonation()", +"96d8fe3b": "_updateHistory(address,address)", +"96d92a72": "changeRNGenerator(address)", +"96d99568": "MMMTokenCoin()", +"96d9a881": "manualDeleteEditionBids(uint256,address)", +"96da1fba": "sendETHToContributionWallet(uint256)", +"96da2848": "gasForCLI()", +"96dbab81": "stub()", +"96dbad1e": "sellCityForEther(uint16,uint256)", +"96dbb486": "updateFinishTime(uint256)", +"96dbbc5f": "Token_Description()", +"96dbe56e": "ImpCore(address)", +"96dc461f": "setBountyTokensCount(uint256)", +"96de0c20": "_makeWithdrawForPeriod(bytes32,uint256)", +"96de56d2": "getPlayerFlips(address,uint256)", +"96de6caa": "qtyValidators()", +"96de9c8c": "cnyBtcRate()", +"96dea936": "proposalData(uint256)", +"96df3540": "TLD_NODE()", +"96dfa78b": "price_per_eth()", +"96dfcbea": "checkState()", +"96dfcc21": "weAreClosed()", +"96e05fdb": "PaymentAccepted(address,bytes8,uint256)", +"96e0ef33": "send(address,address,address[],uint256[])", +"96e1a657": "timeBetweenEditions()", +"96e264ff": "ownerSetPayOutDivisor(uint256)", +"96e332f3": "mainSaleMaxTokens()", +"96e438a1": "reclaimDeposit(uint256)", +"96e4ee3d": "convert(uint256,uint256)", +"96e4f67d": "icoEtherReceivedMainSaleDay()", +"96e50a8c": "saveNonce(uint256)", +"96e583a9": "getLetter(uint256)", +"96e6e65f": "ETCN(uint256,string,string)", +"96e76fa7": "Unregistered(string,uint256)", +"96e83a40": "refund(uint256,address,address)", +"96e8cace": "dripMe()", +"96e8d14c": "newRecord(string,string,string)", +"96e9df8d": "deployNewContract()", +"96e9f6f2": "lastBlock_v12()", +"96ea7487": "Opacity()", +"96ea76b7": "OnWithdrawTo(address,address,uint256,uint64)", +"96ea8b9c": "referralPercentage()", +"96ea9f49": "FundTransfer(address,uint256,uint256,uint256,uint256)", +"96ebabba": "distributeSuccessfulCampaignFunds(uint256)", +"96ebfb89": "generalManager()", +"96ec1ca2": "tipUser(bytes32,bytes32,bool)", +"96ec6fec": "APP()", +"96ec7114": "COMMUNITY_SALE_START()", +"96ecf3c4": "subtractFrozenBalances(address,uint256)", +"96ed10a4": "issuePOIs()", +"96edb898": "callTokenFallback(address,address,uint256)", +"96ee03d6": "__concat(string[6])", +"96eecf95": "saleSuccessfullyFinished()", +"96ef7aa0": "cash_transfered(string)", +"96efbb9b": "getActiveItemAt(uint256)", +"96f099bc": "preSaleTokenRaised()", +"96f0aa8f": "findNextSecond(uint256,bytes)", +"96f1370d": "TotiMed()", +"96f17aa5": "potTarget()", +"96f2710d": "managerOn(address)", +"96f27b29": "getContract(bytes32,uint256)", +"96f36997": "CLIBUXCoin()", +"96f392f4": "elixir()", +"96f42876": "buyerAddressTransfer(address,address,address)", +"96f429ba": "stateIsFinishedReplay(uint256)", +"96f47800": "investInternal(address,uint128)", +"96f494d1": "printCourse0(uint256)", +"96f6706f": "cancelOfferBob(uint256)", +"96f68782": "right62(uint256)", +"96f74e88": "setOrganizationName(string)", +"96f76f11": "contractFinished()", +"96f7807a": "getDuel2(uint256)", +"96f93e65": "Expire(address,address)", +"96f9cffa": "shareBonus()", +"96fb2e62": "Party(string,address,string)", +"96fbab31": "getZombiesFullInfoByOwner(address)", +"96fc00c2": "setPresale(uint256,address,uint256[])", +"96fc2256": "verify(address,uint8,bytes32,bytes32)", +"96fcbf65": "numOfSampleTypes()", +"96fcd214": "slaveServer()", +"96fd1c42": "flush(address,uint256)", +"96fd1df7": "isEndedTrack(uint256)", +"96fd550a": "betWithCredits(uint64)", +"96fe1338": "storageTime()", +"96fe5418": "contestEndTime()", +"96fe6e74": "external_oraclize_randomDS_setCommitment(bytes32,bytes32)", +"96fedaf7": "extraMinted()", +"96fef3f1": "submitTransactionToken(address,address,string,string,uint8[],bytes32[],bytes32[])", +"96ff0306": "retireWildHard(uint64,uint64,uint64,uint64,uint64,uint64)", +"96ff4483": "setTokenAsideAddresses(address,address,address)", +"96ff7631": "SetupYOU(string,string,uint256,uint256,uint256,address,address,uint256)", +"96ff7e97": "requestIdentity()", +"96ffa690": "countLocalRecursive(uint256)", +"96ffac0b": "setupRace(uint256,uint256,address)", +"97004255": "aliceClaimsPayment(bytes32,uint256,uint256,address,address,bytes)", +"9700d0f0": "stage_2_TokensSold()", +"970129be": "getCardInfo(uint256)", +"9702795d": "REFERRAL_SHARE_RATE()", +"97028899": "play(bytes1,bytes1)", +"97034ed0": "get_HoldersProfit(address,uint256)", +"970388b5": "setContractActive(bool)", +"9703ef35": "cancelBid(uint256)", +"9703fa2e": "airdropQty()", +"9704122c": "getFeeAmount(uint256)", +"97046afc": "burnProvider(address)", +"970574ac": "lnUpperBound32(uint256,uint256)", +"9705a592": "getUnprocessedQueryCount()", +"97062e8a": "ico3Bonus()", +"9707f708": "Totalsupply()", +"970875ce": "currentSnapshotId()", +"9708e250": "maxSellCap()", +"9709709a": "MomentumToken()", +"9709cdbc": "getExchangeGroupsKeyAt(uint256)", +"9709d040": "NewPayroll(address)", +"970a5fa8": "exchangeRateIdx(uint256)", +"970afd9b": "MAXIMUM_64_BIT_SIGNED_INTEGER_VALUE()", +"970db3df": "SPECIALIST_STAKE_TWO()", +"970e5904": "safeGetPartialAmountCeil(uint256,uint256,uint256)", +"97100be9": "setLiveTx()", +"97107d6d": "setProxy(address)", +"9710f014": "completeStatus(string)", +"971130b5": "MulaCoin()", +"9711715a": "snapshot()", +"9711e944": "Queue(uint256)", +"9711f20d": "isSanctuary()", +"971217b7": "values()", +"9712a57e": "purchasePotato(uint256)", +"9712a764": "takeBounty()", +"9712da8b": "getCompte_20()", +"97135d19": "santai()", +"971362c9": "partnerWithdraw()", +"9714378c": "extend(uint256)", +"97145273": "setHidden(address)", +"9714a27c": "miningOneFree()", +"9714f05c": "_minimumContribution()", +"9715a81f": "SurvivalRanchTestCoin()", +"9715d80e": "getCanShareProfitAccounts()", +"9715f05d": "OBSERVER(uint256,string,string)", +"97169426": "Owned1()", +"9717137a": "TLN_TOKEN_NAME()", +"97172664": "getIcoAddrCount(uint256)", +"97173a7a": "referalPayCount(address)", +"971751af": "lockAndDeliverTokens(address,uint256,bytes1)", +"9717ae9d": "DTCC_ILOW_5()", +"9717b2ae": "DividendsTransfered(address,uint256)", +"9717d76f": "getCandidatePosition(address,uint256)", +"9717df19": "fillFromQueue()", +"97187ac8": "coinSaleStarted()", +"9718b524": "newTreasury(address)", +"9719f290": "lockTeamTokens(address)", +"971a3593": "updateClosetime(uint256)", +"971a9091": "crystal()", +"971a9a29": "CbxeToken()", +"971b2b2e": "getFreelancerFeedbackOn(address,uint256)", +"971bd1b4": "estimateDistribution()", +"971c803f": "getMinimumStackCheck()", +"971ccc16": "addERC20Token(address)", +"971d2bd8": "getProposalByHash(bytes32)", +"971dbe0e": "getNbrOfPartyFor(address)", +"971e668f": "updateTokenToEthOrder(uint32,uint128,uint128)", +"971e80cb": "setWallet()", +"971ec3ce": "globecoin()", +"971f34a1": "SellPriceChanged(uint256)", +"971fe56b": "poolWeight()", +"971fff63": "setAdsStorageAddress(address)", +"972030bb": "mixGenesRabbits(uint256,uint256,uint256)", +"97203543": "getGuestCount()", +"972041e4": "getTokenTime(uint256)", +"97204d8e": "delegateProxyImplementation()", +"972072a2": "resolveChallenge(string)", +"9720dd5a": "kBit()", +"972161f7": "getFullState()", +"97217085": "maxBetDoubleDice()", +"9721dd4c": "GoldenChain()", +"972205d4": "Untethered(address,string,string,uint256,uint32,uint32,uint256,uint256,uint256)", +"97227325": "simulate_ico()", +"9722cdc6": "EarningsWithdrawal(uint256,address,uint256)", +"97235a1e": "receiveToken(address,uint256)", +"97246156": "HoQuBurner(address)", +"9724fc95": "getTotalProposalsCount()", +"9725b4a5": "BOXIcoin()", +"9725bd80": "preIcoEnded(uint256,string)", +"97267ae9": "startDividendDistribution()", +"972711cc": "KoreaShow(uint256,uint256,address,address)", +"97271615": "contract_newOwner()", +"9727e379": "addMeter(uint32,string,string)", +"97294e58": "register(address,string,address)", +"97296421": "joinTheHunt(string,string)", +"972973e7": "setOfferPrice(uint256)", +"97297467": "checkAndVerify(bytes)", +"972993e6": "b2bcToken()", +"97299d8a": "lendingDays()", +"9729d040": "_slashPower(address,uint256,bytes32)", +"9729ec26": "generateWarrior(uint256,uint256,uint256,uint256)", +"9729f9b9": "getBlockComission(uint256)", +"972ab95a": "bennylamToken()", +"972afc80": "ownerSetEmergencyStatus(bool)", +"972c169e": "datboiSupply()", +"972ca383": "MONTANATOKEN()", +"972d1ae2": "_getNextTokenId()", +"972e6151": "operationalReserveAddress()", +"972fa53f": "createTeam(string)", +"97304ced": "mintTokens(uint256)", +"973069f8": "transferRemaining(address,address,uint256)", +"97306c27": "getData3(uint256,uint256,uint256,uint256)", +"9730b305": "burnTokens(uint256,address)", +"9731a897": "famedStarMassToIds(uint256)", +"9733348a": "ProdToken()", +"9733dc79": "ManagerContract()", +"97346423": "HCOIN()", +"9734855d": "WhitelistAddressenable(address)", +"973516f2": "getH1Amount()", +"973549ea": "_setAddress(bytes32,address)", +"973628f6": "currentEra()", +"97365a0b": "safe(uint256,string,string)", +"97365df2": "sameOdd()", +"9736a590": "DistributedTokens(address,uint256)", +"9736aeb4": "OwnershipTransfered(address)", +"97374d89": "preIcoAllocation(uint256)", +"97379c32": "CBIX(string,string,uint256,uint8)", +"9737bc41": "ShineCoinToken(address,address,uint256,string,uint8,string,bool)", +"9738418c": "getVersions(bytes32)", +"973880e8": "getMinesInfo(uint256[])", +"973882e9": "returnPollStake(address,bytes32)", +"97388497": "getNumberOfRequests()", +"973885c0": "test_setMaxSize_decreaseSize()", +"9738968c": "canUpgrade()", +"9738b602": "getElementInfoView(uint256)", +"9738f92c": "transferLogicAuthority(address)", +"97391e2d": "PurchaseMade(address,bytes8,uint256)", +"9739203b": "view52()", +"9739951c": "tokenEmission(address,uint256)", +"9739db9d": "createOwnershipOffer(address)", +"973ad270": "removeArbitrator(address)", +"973b56e8": "MIN_FREEZE_DURATION()", +"973bc8cf": "getParticipantsChannel(address,address)", +"973cbc75": "testFailAppendTranch()", +"973d641e": "SplitPayment(address,address)", +"973dbfb7": "withdrawalValue()", +"973e315b": "setMigrateFromLegacyReputationToken(bool)", +"973e9b8b": "getAllowance()", +"973e9c5c": "Radiance()", +"973ea9d5": "team2Address()", +"973f6129": "adminArray(uint256)", +"973fcaef": "SIMCOIN()", +"973fe7ef": "secondWeekBonus()", +"97409192": "addRequest(uint256,string,string)", +"9740e4a2": "left87(uint256)", +"9741efe4": "currentBankroll()", +"974207fb": "logfolio(bytes32)", +"974238fd": "CreditMC()", +"97425a54": "ANMFutureVesting()", +"9742ca46": "setMiner(address)", +"9742d64a": "destroyBeneficiary(address)", +"974317dc": "ThreeDL()", +"9743ad98": "totalReservedAndBonusTokenAllocation()", +"9743c6c3": "joinMain()", +"9743dfc1": "jesterAutomaticCollectFee()", +"9743efe5": "kin()", +"974463d6": "ronerToken()", +"9744a1b1": "depositWithToken(bytes,uint256,uint256,uint256,uint256)", +"9745ac4d": "getResponseUint(int256,uint256,bytes32)", +"9745ad9c": "stageIT()", +"974626b4": "LotsaFucksToken()", +"97463b75": "getPOOL_edit_27()", +"974654c6": "finishPresale()", +"974654f4": "requiredGas()", +"9746f42b": "getBalanceTeam(address)", +"9747145b": "claimStorageForProxy(address,address,address)", +"974811fb": "tokensToEthereum_1(uint256,uint256)", +"9748334b": "PskERC20()", +"97487af8": "TOTAL_SUPPLY_ACES()", +"9748a3f2": "getOpenProposals()", +"9748bf5b": "bucketValue(bytes32)", +"9748db00": "DragonKing(address,address,address,address)", +"9748dcdc": "punish(address,address,uint256)", +"97495cce": "rate_toTarget()", +"974a832d": "rejectCertificate(uint256,uint256)", +"974b2525": "removeBurningMan(address,uint256)", +"974bd64b": "PromissoryToken(bytes32,address,uint256)", +"974c86b5": "Buy()", +"974cf025": "lockDonationReceiver()", +"974e7dc9": "_getWeekTotalStake(uint256)", +"974ee3bb": "_updateLockUpAmountOf(address,address)", +"974ef924": "parseBool(string)", +"974fa121": "GiveAnAngelCS(uint256,address)", +"974fd2f3": "setLastBattleResult(uint64,uint16)", +"975057e7": "store()", +"97508f36": "pollNonce()", +"97514d90": "sellOrder(uint256)", +"97518f74": "_OmnesCoinToken()", +"975289fd": "getPriceVolume(uint256)", +"9752bcd3": "guaranteedBuyersLimit(address)", +"9752f163": "deployAgent()", +"975347b8": "removeAddressFromAccessControl(address,uint8)", +"97537bdf": "BotCoin()", +"9753a84e": "PCHAlN()", +"9754a4d9": "grantVestedTokens(address,uint256,uint64,uint64,uint64,bool,bool)", +"9754a7d8": "pauseSell()", +"97557f6a": "QTB(string,string,address)", +"9755a710": "hasWinner()", +"97566aa0": "getMintDigest(uint256,bytes32,bytes32)", +"97567579": "getTokenWithdrawalAllowance(address,address)", +"975739a5": "maxKudosToMember()", +"9757e8a3": "customerCount()", +"97584b3e": "_hasAvailability()", +"9758af1e": "doesEntryExist(bytes32)", +"9758fd0d": "closeChannel(bytes32,uint256,address,uint256,address,uint256)", +"9759512b": "LogRefund(uint256)", +"9759c160": "BuyCore(address,uint256,uint256)", +"975b123e": "get_firstbytes(bytes,address)", +"975bad75": "_createCountryId(uint256)", +"975be231": "emitPricesUpdated(uint256,uint256)", +"975c2308": "getHeir(uint256)", +"975c5cab": "getSanageLink(uint256)", +"975c95da": "ICO_PERCENTAGE_5()", +"975dfff9": "monsterIdToTradeable(uint256)", +"975e001a": "tokenBonusForForth()", +"975e463a": "addInvoice(address,uint256,uint256,uint256)", +"975e76b3": "transferAdvisorsToken(address,uint256)", +"97603560": "rescueTokens(uint256)", +"9760b450": "_Stand()", +"97614302": "playCount()", +"976160fa": "SetDesignatedRouterSRV(bytes32,uint256,bytes,bytes)", +"9761cd63": "reduceHatchCooldown(address,uint256)", +"97623b58": "removeContract(string)", +"97624631": "assertEq(bytes,bytes)", +"9762737a": "remove_branch(uint256,uint256,uint256)", +"9762e9ea": "icoStartedTime()", +"9762f802": "hardCapReached()", +"976371c9": "_isTokenOwner(address,uint256)", +"9764053b": "_price_tokn_ICO2()", +"9765b4d7": "autoSend()", +"9766178c": "tradeDealRequested()", +"97668720": "set_centralAccount(address)", +"97672729": "releaseLockedTokens(uint8)", +"97679646": "whitelistMinTok(address)", +"9767dae8": "userWithdrewWei(address,address)", +"9767fff7": "setImageOwner(address[16],uint256,address)", +"976898c7": "bid(string,string,string,string)", +"976934ac": "dCHF()", +"9769eacf": "setBuyOpen(bool)", +"9769f0b0": "sellToken()", +"976a0b82": "vettingTime()", +"976a77b6": "freeForCarrots(uint256)", +"976a8435": "units()", +"976b01c0": "setNotRetractable(bytes20)", +"976b59b5": "ElyxrShrimpFarmer(address)", +"976bd47d": "LOOMIA2()", +"976bdba4": "makeOrder(address,address,bytes32,uint256,uint256)", +"976c3d04": "calculateTokenPrice(uint256,uint256)", +"976d00f4": "auditSecret(bytes32)", +"976d16d5": "getTotalAccessories()", +"976d36d0": "totalSupply1()", +"976e0da9": "getNextPrice(uint256)", +"976e14d6": "salePriceWei()", +"976f37fd": "lowCompose(uint256,uint256)", +"976f6c92": "lastBlock_a19Hash_uint256()", +"976fcda7": "WithdrawlRemainingPAT()", +"97709cde": "ARK_VOTER_1_00(uint256,uint256,uint256,uint256,uint256,uint256)", +"97709ce7": "setRaffleAddress(address)", +"977174ff": "normalRoomMax()", +"9771ccc8": "removeERC20(uint256,address,uint256)", +"97722acf": "getCapOfToken()", +"9772c982": "scheduleCall(address,bytes4,bytes,uint256,uint256)", +"9773252a": "isInBonusList(address)", +"9773489a": "forceOffsetExecuteMaxFee()", +"97734b85": "BNB(uint256,string,uint8,string)", +"9773b22e": "_HachirokuToken()", +"9774c190": "ShieldCureToken()", +"977564ed": "Zylli()", +"977567a4": "ico(uint256,address,uint256)", +"977615a3": "startDatetime()", +"9776415f": "setConntractEnable(string,uint256)", +"9776aacf": "addToken(bytes32,address)", +"9777487d": "sponsorValue()", +"977785c5": "testInitalBalanceUsingDeployedContract()", +"97779e1b": "isStop()", +"9777a30e": "EYHToken()", +"9777aa49": "owner_endGetting()", +"97788180": "GetCitySnapshot()", +"9778a177": "ManualPurchase(address,address,uint256)", +"977919bf": "adjustFeeAmount(uint256)", +"97792f2f": "PembiCoinICO()", +"97799d47": "Tmc4(uint256,string,uint8,string)", +"9779dcd9": "sendInvestmentsToOwner()", +"9779e135": "CreateUpgradeCards(uint256,uint256,uint256,uint256,uint256,uint256)", +"977a5ec5": "hold(address,uint256)", +"977a8f1b": "logTokenTransfer(address,address,uint256)", +"977ab3c2": "mintarget()", +"977af81c": "changeMessage(bytes32,string,uint8,bytes32,bytes32)", +"977b055b": "maxPurchase()", +"977cdc7e": "completeDefaultOperators()", +"977d0f9b": "escape(uint256[],uint256[],uint256[],uint256[])", +"977d2c45": "totalWallets()", +"977d6276": "getOrderPriceInfo(address,address,uint256,uint256)", +"977d996d": "createEvent(uint256)", +"977e09e6": "addGameRecord(address,uint256,int256,uint256,uint256,address,uint256,uint256)", +"977ed151": "fetchCancelledOrdersForPayer()", +"977eda79": "txLog(uint256)", +"977f1213": "FucksToken()", +"977f3b05": "calculateRegionSalePixelPrice(uint256)", +"977f7c7e": "bet_on_team_2()", +"977f9e24": "offlineDonate(uint256,uint256)", +"977ff98f": "currentSaleAddress()", +"97810850": "setPlaySeed(address)", +"9781a37e": "setCooldown(address,uint256)", +"9781c3ca": "buyTokensSigned(address,bytes)", +"9782c9ef": "unfreezeTrading()", +"9782e1ec": "ProxyMock()", +"9783585d": "setState2WithStop(uint256,uint256)", +"9783bef4": "EighthContinentSocialMarketplaceToken(uint256,string,uint8,string)", +"978414bd": "transferZTXOwnership(address,address)", +"9784696c": "PauseOff(uint256)", +"97848574": "NevadaBlackBook(address)", +"9784af62": "createTokenContract(string,string,uint8,uint256)", +"9784f585": "crowdsaleHardEndTime()", +"97871e56": "EtherPush()", +"9787a6b3": "setUint8(int8,uint8,uint8)", +"97883d1f": "tokenPriceMultiplies(uint256)", +"9788a8e7": "HOU(uint256,string,uint8,string)", +"9788c342": "HardCapReached()", +"9788d5ff": "_updatePrices(address[],uint256[])", +"9789103f": "fallbackProposal(address)", +"9789f9da": "crowdsaleFinishTime()", +"978ab53b": "withdrawFundInsurance()", +"978afdc8": "getBountyAmount(address,address)", +"978bbdb9": "feeRate()", +"978bc247": "_checkSetSkill(uint256,address,uint8,uint256,uint256,uint256)", +"978c5b15": "LOCKED_2Y_DATE()", +"978ca331": "mintSub(address,uint256)", +"978cb570": "firstTimer()", +"978d5c0e": "ASCCoin()", +"978d602a": "withdrawETH(address,address)", +"978d6cff": "ICO_TOKENCAP()", +"978dabbe": "test_fourValidEqBytes32()", +"978f68b5": "cancelListing(bytes5)", +"978f8934": "createPromoKydy(uint256,address)", +"9790268b": "setRewardBlockThreshold(uint256)", +"97905a88": "recoveryKey()", +"97907827": "sharesHeld()", +"97911fd7": "MyGameToken()", +"97912c2f": "startPreICOTime()", +"979141ea": "logFeeTokenBurned(address,address,uint256)", +"979260bd": "reserve2Address()", +"97936258": "GetBaseN(uint256,uint256,uint256,uint256)", +"9793714f": "approveSettingDeprecation(uint256,bool)", +"9793ebf4": "getBooleanMapValue(string,address,address)", +"97950740": "roomForBirth()", +"9795a644": "BITWhaleBalance()", +"9795aabf": "setNewTokenOwner(address)", +"97971c69": "TwentyOneMillionToken(address,uint256)", +"97976d15": "raisedUsing(uint256)", +"9797f51f": "ELTToken(address,string,string,uint256,uint256,uint256,address)", +"9798532f": "_priceToTax(uint256)", +"9798a106": "isNullAddress(address)", +"9798dfc2": "ReinvestAmount()", +"9798e639": "distributeLCWP(address[],uint256)", +"97990635": "SmartInvestmentFundToken(address,address)", +"97992a04": "villainIndexToOwner(uint256)", +"97994b96": "changeOpenNumber(uint256)", +"97997ebb": "stakeWithdrawDisallowPeriod()", +"979a5e1a": "set_presale_arbits_sold(address,uint256)", +"979af14d": "checkAccount(string)", +"979b49de": "checkBonusTokenAmount(address)", +"979b6f6f": "RoundInfo()", +"979bc638": "withdrawBidForPunk(uint256)", +"979bfba7": "PUMPHODL()", +"979c2441": "times7()", +"979c7a38": "MultiWhitelist(address)", +"979ca729": "IcoContract(address,address,uint256,uint256,uint256)", +"979cf824": "tokenSaleEnabled()", +"979d6dc7": "HUT34_WALLET()", +"979e0f22": "AuctionResumed()", +"979e199d": "setProceedsAccount(address)", +"979e8852": "existsEscuela(uint256)", +"979f1976": "tryInsertSequenceId(uint256)", +"97a09338": "freeMoney()", +"97a0a3ec": "SpeedCashTokenContract()", +"97a1c2cd": "preSaleFirstDay()", +"97a1d3f7": "_emitHolderOperationalChanged(bytes32,bool)", +"97a28819": "resetDividends()", +"97a315ff": "CHF_Omnidollar()", +"97a33431": "toContractDie(bytes32,bytes32,uint256)", +"97a42022": "scanOutputs(bytes,uint256,uint256)", +"97a432ff": "addressesToUsernames(address)", +"97a53219": "setSwapToken(address,uint256,uint256,uint256,uint256,bool)", +"97a55722": "get_win_coefs()", +"97a6278e": "removeAgent(address)", +"97a629aa": "shareholdersBalance()", +"97a6ef4a": "AutoCoinToken()", +"97a7293d": "getCCH_edit_5()", +"97a75fe8": "seriesASupply()", +"97a7804e": "FrozenToken()", +"97a7cfb4": "takeTheTorch_(uint256,address,address)", +"97a8c6ec": "emitEvent(string,address,address,uint256,uint256,string,string)", +"97a95086": "getBAU(bytes32,address)", +"97a97005": "transferAllArgsYesAllowance(address,address,uint256,address)", +"97a989c2": "__getbalance()", +"97a993aa": "buyers(address)", +"97aa28b4": "publicUnlock(address,uint256)", +"97aaa73c": "timeBasedBonus(uint256)", +"97aab362": "setReg(address)", +"97aae114": "setDeprecatedManual(uint256,address,bool)", +"97ab4786": "reserved(uint8)", +"97ab5baa": "withdraw_if_failed()", +"97ab9e7a": "contestStartTime()", +"97aba7f9": "recoverSigner(bytes32,bytes)", +"97ac37de": "_purchase(address,uint16,address)", +"97ac3b51": "CHXToken()", +"97ac3cd9": "noMoreNextRoundSetting(bool)", +"97ac4a25": "isRoundActive(uint256)", +"97acb3bb": "addAction(address,bytes4,bytes32[])", +"97acb94d": "withdrawalFrom(address,address,uint256)", +"97ad1cbf": "alterDividendCooldown(uint256)", +"97ae4491": "serviceFeeWithdraw()", +"97aeb405": "IFIN()", +"97aeb7ad": "setTeamByAddress(uint8,address)", +"97aeecd0": "AtraToken()", +"97af34db": "listActiveBets()", +"97af77b8": "getVisaAmountPaid(address,uint256,uint256)", +"97af90ae": "_userRefund(address,address)", +"97afb40c": "request_withdrawal(address,uint256)", +"97b0484e": "TOKEN_ICO2_LIMIT()", +"97b081ef": "setOrderDealTimeInterval(uint256)", +"97b09aa6": "tokenSaleAgreement()", +"97b0ad7d": "Fizzy()", +"97b10976": "removeAmountForAddress(uint256,address,address)", +"97b150ca": "tokenAmountOf(address)", +"97b1b2b7": "getFundStatsMap()", +"97b1ff1d": "getNumberOfBeats()", +"97b27c46": "decision(bytes32,string,address[],uint256[])", +"97b2f556": "numPlayers()", +"97b3116e": "setPrePaidFee(uint256)", +"97b34e1f": "readBools(bytes32[])", +"97b3ab70": "BetComplete(bool,uint256,uint256,uint256,address,uint256,bool)", +"97b3b441": "isAvailable(uint40)", +"97b4ddac": "currentGenesisAddresses()", +"97b51442": "setMinimumWait(uint256)", +"97b61c68": "giveOwnership(uint256,address)", +"97b68b60": "finishFreeGetToken()", +"97b6cf42": "icoParametersSet()", +"97b73c5c": "setMockUint256(int256,bytes4,uint256)", +"97b740e2": "addAuction(uint40,uint40,uint128)", +"97b817c9": "beginGame(address,uint64)", +"97b9d025": "past_present_future()", +"97ba42b3": "getsometoken(address,uint256)", +"97ba89c9": "setBetUnit(uint256)", +"97bb0de0": "mintLockedTokens(uint256)", +"97bb2a63": "newvow(uint256,address)", +"97bd820a": "divRound(uint256,uint256)", +"97bdc7c8": "changeWhitelist(bool)", +"97bdc9cc": "setBytes(address,string)", +"97bec0ec": "unlockCZR(address,uint256)", +"97bfd8cb": "_setClassMechValue19(uint256)", +"97bff97f": "broadcastTransfer(address,address,uint256)", +"97c0262a": "commissionWallet()", +"97c06deb": "debit(address[],uint256[])", +"97c08da6": "assignBurner(address)", +"97c112d5": "ItemInfo(uint256)", +"97c25f95": "coupon(address,uint256)", +"97c2a9b7": "withdrawFoxt(address,uint256)", +"97c3ccd8": "ban(address)", +"97c414df": "registerAccount(address)", +"97c5ed1e": "showMeTheMoney(address,uint256)", +"97c6006e": "SetFreeQDA(uint256)", +"97c6e24d": "ARMOR()", +"97c8f311": "distributeTokens(address[],uint16[])", +"97c9085f": "fromBytes96(bytes32,bytes32,bytes32,uint8)", +"97c911d5": "InitMaster(address)", +"97c93398": "test_insert_atPosition()", +"97cb2c17": "getSpaceshipProductPriceByModel(uint16)", +"97cbdfc9": "transferAbnormalERC20Tokens(address,address,uint256)", +"97cc3070": "setOrderFill(bytes32,uint256)", +"97ccd07b": "medium()", +"97cd1829": "copyEntireGlofile(address)", +"97cda349": "getLargeBonus()", +"97cdcbfd": "trainEquipment(uint256,uint256,uint256)", +"97ce3a4b": "getUnitsInProduction(address,uint256,uint256)", +"97ce8c43": "setFashionSuitCount(uint16,uint256)", +"97ceb310": "setHardCapInEther(uint256)", +"97d02e00": "DaoChallenge(address)", +"97d0b02c": "setUserManager(address)", +"97d11588": "createStandardDerivative()", +"97d159e7": "setMinTransfer(uint256)", +"97d32a12": "afterCrowdsaleAddress()", +"97d33c33": "burnNotDistrTokens(uint256)", +"97d351b3": "_doTradeForEth(address,uint256,address)", +"97d3624c": "TransferableMeetupToken(string,string)", +"97d3c683": "priceStep8()", +"97d425cb": "canBeTransfered(address,uint256)", +"97d47a60": "registerAccountant(bytes,address)", +"97d4cfb9": "initialTokenSupply(address,uint256)", +"97d4f342": "playerOneCommit(bytes32)", +"97d551a1": "TEC_TOKENS_NUMS()", +"97d5c6a1": "setEndTime(uint256,uint64)", +"97d5f823": "sendPOSTokens()", +"97d61c46": "getRedeemValue(uint256)", +"97d63f93": "initSupply()", +"97d68c77": "resolveSupply(address)", +"97d6ce76": "companyTokensInitial()", +"97d6daba": "expropriate(uint256)", +"97d74abd": "dataSourceCallbackTeamId(uint256,uint8)", +"97d7f2ee": "FundToken()", +"97d814c3": "withdrawCeo(address)", +"97d870c8": "tokenWithdraw(address,address,uint256)", +"97d88cd2": "subAllowance(address,address,uint256)", +"97d8a7e9": "getFreelancerHourlyRate(address,address)", +"97daa043": "register(bytes,address,address,uint256,bytes)", +"97db0a7b": "soccerGo()", +"97db7edb": "stopEmergency()", +"97db9a95": "changeAuthority(address,address)", +"97dbfc5a": "ICOEnabled()", +"97dc4a13": "airdrop(uint256)", +"97dc4c6f": "earlyBirdMaxPerPerson()", +"97dc97cb": "authorizedCaller()", +"97dd9892": "getCurrentRoundTeamCos()", +"97ddeb77": "LimitReached(address,uint256)", +"97dedb06": "strToBytes32(string)", +"97df212b": "getPersonaAttributes(address)", +"97df5028": "winProbability(address)", +"97df573e": "storageAddr()", +"97df8a50": "changeSuperContract(address)", +"97e10a79": "transferERC20(address,uint256,address)", +"97e12b0d": "lastRoundEndTimestamp()", +"97e1754c": "previousEntries(uint256)", +"97e18af3": "crowdsaleLock()", +"97e1d68d": "PRESALE_BASE_PRICE_IN_WEI()", +"97e1e9b5": "ILFManagerCandidateKeyHash()", +"97e1f48b": "userReinvest()", +"97e30fc4": "setPendingValue(uint256,address)", +"97e42023": "setRebuyThreshold(uint256)", +"97e484d2": "ElementeumTokenProxy(uint256,address[],address[])", +"97e4c28b": "transferPrefix(string,address)", +"97e4fdea": "pause_2()", +"97e4fea7": "exists(bytes8)", +"97e5d18a": "thirdLoos()", +"97e645f3": "isCallbackDone(address)", +"97e6c7f7": "getWeeklyDividends()", +"97e6dada": "_own(uint8)", +"97e851f6": "updateOptionalCommission(uint256,uint256,address)", +"97e8b490": "edit(uint256,address,uint256,string,string,string,string,uint256,address,uint256,string,string,string,string)", +"97e8e520": "stakeToMany(uint256[],uint256[])", +"97e92794": "digitalSignature()", +"97e950f7": "setMaxInvocations(uint256)", +"97e9a0bf": "contractPrice()", +"97e9beef": "withdrawUser(uint256,address)", +"97ea403d": "getCityResources(uint256)", +"97ea6e15": "bytesToBytes7(bytes1[7])", +"97eb0eab": "addAirdrop(address,uint256,bool)", +"97eb147d": "rlc_bounty()", +"97eb1800": "investorsStockInfo(address)", +"97ebe0d6": "approveTokenCollection(address,address,uint256)", +"97ec23cb": "getCreationTime(uint256)", +"97ec642c": "MAX_WITHDRAWAL()", +"97ec72b8": "STLHToken(string,string,uint8,uint256)", +"97ecd379": "nPlatCurTotalEth()", +"97ecfaab": "delWhitelist(address)", +"97ee041b": "incrementBasketsBurned(uint256,address)", +"97ee0a05": "SendPreReserved3()", +"97eea08b": "Mineral()", +"97eede11": "FACTOR_10()", +"97ef9779": "TransferBase(uint256,string,string)", +"97efff39": "amountToWithdrawOnDate(uint256)", +"97f1943c": "ROG()", +"97f22ea9": "addToPresaleWhitelist(address)", +"97f28419": "getAdminAddressIndex(address)", +"97f2b4b0": "isBetActive(bytes32)", +"97f2f5c3": "maxTokensForSale()", +"97f3016b": "finishLock()", +"97f3bb0c": "removeLocking(bool)", +"97f3c21e": "isUpgradeFinished()", +"97f3de37": "SetDataServerAddress(address)", +"97f46527": "getNextVestingQuantity(address)", +"97f58e91": "isLiquidating()", +"97f59897": "_nextOwner()", +"97f606eb": "ShowUnrelease(address,uint256)", +"97f735d5": "isBanned(address)", +"97f7b4f7": "getBid(address,uint256,uint256)", +"97f8fee1": "CORPAddress()", +"97f9653a": "statisticaldata(uint256,address,address,uint256[5],uint256[5])", +"97f990f2": "KNOWLEDGE_TO_GET_1FRANKLIN()", +"97fa346d": "sellTank(uint32,uint256,uint256,uint256)", +"97fb070b": "registryRequestDocumentation()", +"97fb2a14": "JTU()", +"97fb2cea": "getCustomerAtIndex(uint256)", +"97fbbfd1": "CoinstocksToken(uint256,string,string)", +"97fc93ab": "cashBack(address)", +"97fcb54e": "transfer_eth(address,uint256)", +"97fce1bb": "setGameLogicContract(address)", +"97fcedba": "setTotalInvestedToken(address,uint256)", +"97fdf5f2": "FOUNDERS_TOKENS_VESTED_1()", +"97fe5ea3": "addAdvocatedTAOLogos(address,uint256)", +"97fe728a": "useName(string)", +"97fe9129": "setCCH_edit_27(string)", +"97fea4e3": "showPlayerBetInfo(uint256,address,address)", +"97feb926": "depositERC20(address,uint256)", +"97fed5f2": "TokenXGroup()", +"97ff335b": "AddNewCourse(string,string,string,string)", +"97ff5be4": "getData_12()", +"97ff6d10": "cancelPlatformWithdrawal()", +"98004a2a": "processContributions(address,uint256)", +"980054be": "icoIsFinished()", +"9800fc16": "removeAllowedContract(address)", +"98019a41": "adjustAddressWealthOnSale(uint256,address,address,uint256)", +"9801ca60": "getWeeklyTokensForHoldersAmount()", +"9801cb8e": "ProofOfExistence()", +"98024a8b": "getPartialAmount(uint256,uint256,uint256)", +"98024f18": "testThrowsTransferDisableNotEnabled()", +"9802dd1a": "Dpc()", +"98036e7a": "ADVISORS_PERCENTAGE()", +"98041ea3": "addMember(address,uint256)", +"980481e0": "isABatchOpen()", +"98057510": "addLockedTokeB(address,uint8,uint256)", +"980591f4": "pause(bool,string,address,uint256)", +"9805d7d2": "landsOf(address)", +"98063de4": "LogPollVoted(bytes32,address,uint256)", +"98066221": "FlowchainToken()", +"980934ec": "create(address,string,bytes32,uint256)", +"9809a38b": "supplyPerColor()", +"980b05e0": "_createCollectible(bytes32,uint256,uint256)", +"980b5335": "getAvailableAmountWithdrawal(address,bytes32)", +"980c2f21": "releaseForeignToken(address,uint256)", +"980cf053": "stage4Bounty()", +"980d75ab": "Readcoin()", +"980dc482": "addOrder(address,uint256,uint256,uint256)", +"980e6e08": "timeLeftToCook()", +"980e8c81": "FutureBlockCall(address,uint256,uint8,address,bytes,uint256,uint256,uint256)", +"980ee29f": "MakeDai(address,address,uint256,uint256)", +"980f62b1": "kickoff()", +"980f8e5e": "createPaper(string,bytes32,uint256,uint256[],address,address[])", +"980fb0aa": "abortByBroker()", +"980ff6c6": "executeProposal(bytes32)", +"981012f2": "AddressChecker()", +"9810e089": "return_owner()", +"98110106": "_ownerTransfer(address,address,address,uint256)", +"981101f5": "VERToken()", +"981111ef": "factorial()", +"9811c7c1": "target(uint256)", +"98123528": "numThings()", +"98129013": "left47(uint256)", +"981489b8": "setWidthrawFor(string,uint256,uint256)", +"9814d0ee": "isProposalEnded(bytes32)", +"981566ce": "LotteryCore(address)", +"9816006c": "DeWeiSecurityServiceToken()", +"98163597": "getTotalVolumeEth(address)", +"9816af58": "getUserPools(address)", +"98179c41": "burnBalance(address)", +"98182950": "TARGET_TOKENS_ADDRESS()", +"98191a20": "inPreSale3Period()", +"981a1327": "tokenToExchangeTransferOutput(uint256,uint256,uint256,uint256,address,address)", +"981a60f5": "extractNameFromData(bytes)", +"981ae401": "ACTION_TAX()", +"981b24d0": "totalSupplyAt(uint256)", +"981b405b": "willChangeCost()", +"981b69b7": "soldForFifth()", +"981c6946": "holderAdded(uint256,address)", +"981c80b3": "Maia(address)", +"981c9e07": "PBSU()", +"981cc7ae": "GetRichQuick()", +"981dd797": "process_contribution(address)", +"98203e6b": "setDeprecated()", +"982078b8": "requestTokensFromCrowdsale()", +"98221166": "changeTypeHash(bytes32)", +"982270e7": "setPOOL_edit_6(string)", +"98229465": "_isAuthorizedOrOwner(address)", +"982296a8": "emitEvent(string)", +"9822e501": "exchangeOwner(uint256,uint256)", +"98234a6c": "max_crowd_vitas()", +"982371b4": "cancelOrder(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"9824425a": "takeOrder(uint256,uint256,uint256,uint256)", +"982475a9": "approveKyc(address[])", +"982495c7": "attend(address[])", +"9824cec8": "CryptoTicketsICO(address,address,address,address,address,address,address,address,address,address)", +"9824e7f7": "userWalletTransferEther(address,address,uint256)", +"98251353": "grantedWallets(address,address)", +"98257d84": "changeDefaultTimeLock(uint256)", +"982657f3": "startGame(uint256,uint256,uint256,uint256)", +"98270d24": "atxToken()", +"982713e1": "ComplexExchanger(address,uint256,uint256,address[],uint256,address)", +"98278bc8": "DefaultSweeper(address)", +"9827a996": "terminateProject(bytes32)", +"98290c53": "stakeBelaSplit(uint256,address)", +"98296c54": "assertEq(uint256,uint256)", +"982a2376": "settingExist(uint256)", +"982a83eb": "createCrowdsale(uint256,address,string,string,uint256,uint256,uint256)", +"982a96e3": "bonusRemaining()", +"982b5dd2": "processVestingRules(address,address)", +"982b6689": "transferMultiple(uint256,address[])", +"982bb5d8": "setDepositsSigned(bytes32,bool)", +"982c0455": "getSpecifiedComment(address,uint256)", +"982d1270": "shiftIn(uint256,bytes32,bytes,address)", +"982e5721": "getRateNow()", +"982f4a21": "INFOCORP_DONATION()", +"983032c2": "newShare()", +"983086df": "HMTCrowdsale(address,uint256,uint256,uint256,address,address)", +"9830a8fd": "getCustomerTxRegistry(address)", +"9830aa07": "UBlockChain(address)", +"98313b10": "splitTokensAfterDistribution(uint256)", +"98315249": "getUsersMicroModulesIds()", +"9831ca4d": "joinMiniGame()", +"983234b6": "setAmounts(uint256,uint256)", +"9832ee65": "resultsWeightedByTokens()", +"98337afb": "largeCount()", +"983485e1": "buyEthereumToken()", +"98358f82": "cap_in_wei()", +"9835efaf": "setAmountToDistribute(uint256)", +"98366d1c": "isMint(int256,address)", +"98390730": "takeAllEther(address)", +"98391c94": "muteMe(bool)", +"9839eafd": "getTicketNumbers(uint256)", +"983a7f47": "setDNA(uint256,uint256)", +"983a8c8a": "_setRoles(address,uint8[])", +"983a95b2": "trackClick(address,address,address,address)", +"983b2d56": "addMinter(address)", +"983b94fb": "finalizeAuction(bytes32)", +"983bc49d": "currentBalance(address,address)", +"983c09ee": "steal(address,address,uint256)", +"983c0a01": "closeCrowdsale()", +"983c4647": "TunTokenERC20()", +"983c7630": "setPermissionByAddress(uint8,address,bool)", +"983c8449": "VzanToken(uint256,string,string)", +"983ce499": "_set2()", +"983df7cd": "isOperatorAuthorizedBy(address,address)", +"983e1318": "Hack()", +"983ef725": "getDifficulty(uint256)", +"983f724b": "getCassetteType_()", +"9840a504": "NFCToken()", +"9840a6cd": "getSubscriptionValue(bytes32)", +"9840a8f8": "minAllowedBetInTokens()", +"98413ff1": "extensionByIndex(uint256)", +"98416339": "KRYPTONIUM()", +"98419ec5": "shouldThrowOnAttemptToTransferWhenNotOwner()", +"9841a2d8": "startSale1Phase()", +"9842692b": "_contractFallbackERC223(address,address,uint256)", +"984274af": "preTgeCap()", +"9842a37c": "__callback(uint256,bytes32)", +"9842ec30": "drawItemLottery(address,uint256)", +"9843e648": "setItemsEC(address,address)", +"9843eae3": "airdropActive()", +"984413b8": "_eraseNode(bytes32)", +"9844347b": "createCertificate(bytes,bytes,uint256,bytes)", +"98445e6f": "getCurrencyPayment(address,uint256)", +"9844613e": "ViewCoin()", +"984474fb": "price_token()", +"9844c294": "existenceAllowance(address)", +"9844d5a7": "Martcoin(uint256,string,string)", +"984572d0": "privatePreICOBonusPercent()", +"9845b448": "PHASE5_START_TIME()", +"98475e30": "BTCETH(uint256)", +"9847d267": "GoodLuckCoin()", +"984809bf": "setPublicOfferingLimit(uint256,uint256)", +"984877b0": "GoalHitWithdrawl()", +"9848fef8": "tokensReleasedToEcosystem()", +"984a27be": "m_SMRMinter()", +"984a470a": "forwardedOutcome()", +"984a74f7": "TazitToken()", +"984ac378": "lotteryTitle()", +"984bc8c5": "placeTicket()", +"984c0450": "withdraw(bool,uint256)", +"984c14ac": "setupVolumeMultipliers(uint256[],uint256[],uint256[])", +"984ce0fd": "transfertoacc(string,uint256)", +"984d11fc": "validSupply()", +"984d4a93": "setAdminsAddress(address)", +"984ddfe8": "DevTokensHolderMock(address,address,address)", +"984e1ff4": "mock_setShouldSucceedTransfers(bool)", +"984e2829": "_updateState(address,int128,uint128,uint256)", +"984e5a0b": "FunKoin()", +"984ec03e": "_storeStakes(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"984fba49": "removeInvestorFromWhiteList(address)", +"9850d32b": "maintainer()", +"98512d72": "round1TokensRemaning()", +"9851553b": "EthereumTravelToken(address,uint256,string,string)", +"9851663f": "_computeCurrentPrice(uint256,uint256,uint256,uint32)", +"98519340": "setParameters(uint32,uint32,uint32,uint32,uint32,uint32)", +"9851b2bd": "AIN()", +"9851fd9a": "eventStatus()", +"9852099c": "depositId()", +"9852595c": "released(address)", +"9853b234": "createPhoenix(uint256,uint256,uint256)", +"98544710": "setKeyHash(bytes32)", +"98547a45": "donacionCruzRoja()", +"985540b9": "remove(int8,int8)", +"98575188": "removeUser(address)", +"9857650c": "claimIFactor(bytes32,uint256)", +"9858cf19": "FREE_SUPPLY()", +"9859387b": "createAccount(address)", +"98593b7a": "SenseProtocol()", +"98596560": "get_activity_by_id(uint256,uint256)", +"98596726": "note(uint224)", +"98597629": "max_value()", +"98598905": "subVirusDef(address,uint256)", +"985989d2": "ROLE_UNDER_MINTER()", +"9859adf0": "_payByEth(uint256)", +"985a882c": "MINEX()", +"985b71f1": "calcBindedBlindHash256(string,address)", +"985bcf34": "canExit(bytes32)", +"985bdd43": "isExchangeAlive()", +"985c7564": "getNextTournamentData()", +"985d43f1": "TOTAL_APC_SUPPLY()", +"985d5702": "ExShellStock()", +"985dea23": "getETH(uint256,address)", +"985df3a7": "setHeroAssetAddress(address)", +"985e2cdf": "updateExchange(address,address,bool,bytes4[])", +"985e4634": "CreateLPT(address,uint256)", +"985e4cd0": "sumBalanceOf(address)", +"985f26f6": "AddOwners(address[])", +"985fc7ea": "destructionAddress()", +"98603cca": "disableBurning()", +"98608111": "getStorageNameHash()", +"9860d0a5": "setTransferFee(uint32,uint32)", +"98636f32": "isException(address)", +"98646d68": "setNumDesignatedReportNoShows(uint256)", +"98650275": "renounceMinter()", +"98668b24": "tokensVotedForDisable()", +"98672215": "getTearAward(address,uint256,uint256)", +"98683105": "CCH_EDIT_1()", +"98686304": "Elance()", +"986876e6": "ChannelCreated(address,address,uint192)", +"98688a95": "Ai()", +"9869aca0": "setSchedule(uint256,uint256)", +"9869b736": "ONE_MILLION()", +"9869f1b7": "migrateTokens(address,address)", +"986b3a9a": "getCanvSize()", +"986b5676": "loveID()", +"986bb99a": "setPOOL_edit_30(string)", +"986bf5e8": "addAudit(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"986c1938": "setRegistrarAuth(address)", +"986c7cc7": "BitArbToken()", +"986cc311": "executeProposal(uint256,uint256,uint256)", +"986ccc7f": "setHelper(address)", +"986d08a8": "OSECOIN()", +"986dcd4d": "setCycleLimit(uint256)", +"986e791a": "getString(bytes32)", +"986e7ed3": "AssignGGCOwner(address)", +"986ec464": "tokensLeftDrain(uint256)", +"986ee316": "VoteMemberCandidate(uint256)", +"986f3c9b": "addComment(address,address,bytes32,bytes32,bytes32)", +"986f737b": "onrs(uint256)", +"98702402": "refPercentage(address)", +"9870d7fe": "addOperator(address)", +"987196ae": "HabibaTokenCoin()", +"9871cb8f": "Moneto(address)", +"9871e4f2": "makeSubscriptionId(address,uint256)", +"9871e510": "hashExists(string)", +"9871ee02": "PCT()", +"98729c37": "_changeUpPrice(uint256)", +"9872a20a": "registerUInt(address,uint256)", +"98738f97": "preIcoBonuses(uint256)", +"9874a3d0": "WAIT_BLOCKS()", +"9874cdf4": "performRefund(bytes32,bytes32)", +"9874f5d7": "addString(string)", +"9875958c": "PlaceRocketForSale(uint32,uint80)", +"98764f22": "setPrice(uint32,uint64)", +"9876962a": "setstart()", +"9876ee61": "coinsAddresses(uint256)", +"98772e80": "disrupt()", +"987757dd": "settle(bytes32)", +"98779240": "transfersAllowDate()", +"9877bdff": "Alice()", +"9878cc51": "MELON_ASSET()", +"98791010": "deleteHpbNode(address)", +"987b7967": "BLOCKMALLToken()", +"987b904b": "BOUNTY_LIMIT()", +"987bc844": "HolikopterTokenToken()", +"987c4311": "setPublicChainlinkToken()", +"987c6b9d": "swap(address,string,string,uint256,uint256,uint8,bytes32,bytes32,uint256)", +"987c9efd": "PayIreward()", +"987cb9b0": "updatePublicSale(uint256)", +"987cec61": "converted(uint256)", +"987d9768": "ILF(address)", +"987e565d": "buyKim(uint256)", +"987ea899": "addAssetManager(address)", +"987eae8f": "totalPets()", +"987eeee5": "createMain()", +"987f3bdb": "_playGame(uint256,uint256,uint256,bytes32)", +"987f710a": "TIME_TO_COOK()", +"987faf18": "prevJackpotsLength()", +"9880472f": "multiSigOutputAddress()", +"98804938": "deposit_eth(uint8,uint256)", +"98806bf0": "convertTokens(address)", +"98827d5e": "createCoins()", +"9882e15e": "withdrawOverdue(address,address)", +"9883521e": "presaleProcessed()", +"9883548a": "fint32(int32)", +"9883b9f4": "addAmendment(string)", +"98842c3b": "ipfsGet(uint256)", +"988483d4": "convertMsgValueToBytes20()", +"98864aaf": "getPropertyFlag(uint16)", +"98866c1a": "personUpdateDOD(uint256,int256)", +"98866ead": "_gensGenerate()", +"9886de1f": "multiTransfer(uint256,address[])", +"98876609": "create(bytes32,address,bytes32[])", +"98880043": "addGame(string,string,uint256,uint256)", +"9888103f": "buyTokensInternal(address)", +"988a18f6": "claimTokens(address[],address)", +"988a9fb5": "getTokenIdOfAddressAndIndex(address,uint256)", +"988b1d86": "remoteApprove(address,uint256)", +"988b590f": "withdrawBSAFE(address,uint256)", +"988ba8e8": "finishPreSaleRound()", +"988bfcfa": "_buyToken(address,uint256)", +"988bfd47": "ProxyCreationAndExecute(address)", +"988da80f": "getUserName(uint256)", +"988fc9a8": "fetchOrderByIdWithWithPayerByAdmin(string,address)", +"9890220b": "drain()", +"9890d6bc": "GetDisputesAtTheMoment()", +"9890eabe": "distributeDividendsOnTransferFrom(address,address,uint256)", +"9890f48a": "LocalStarRoster()", +"9891d61c": "getEnabledTokensLength()", +"9892003a": "TexasHoldem(string,uint8,uint8)", +"98924050": "addtoLottery()", +"98924dd6": "_doesUserExist(address)", +"9892977b": "_attributeSale(address,uint256)", +"98934c0a": "payEther(address[],address,uint256[])", +"9893f27e": "allowancePresetTransfer(address)", +"9894221a": "SendCashForHardwareReturn()", +"98943c88": "getAllWeaponData(uint256)", +"9894ba7c": "transferOut(address)", +"9894eb8e": "hashSecretKey(bytes32)", +"98951b56": "approveProposal(uint256)", +"98951bfc": "foundersAmountLeft()", +"9895dd78": "setRegularTransTime(uint32[])", +"98968f15": "purchase(address,uint256,uint256)", +"98969906": "PassportToken()", +"9896b6cb": "testToUint16()", +"98973f2b": "setRestrictedAddress(address)", +"9897e8a5": "scalarEvents(bytes32)", +"9897f916": "manualRelease(address,uint256)", +"98981756": "teamExists(uint256)", +"98983cc5": "isCrowdsalePaused()", +"9898e18c": "tokenSender()", +"9899276b": "getOwnedTokensLength(address)", +"9899722d": "newRateTime()", +"9899a2c5": "aliceClaimsDeposit(bytes32,uint256,bytes32,address,address,bytes20)", +"989a55fa": "_increaseApprovalAllArgs(address,uint256,address)", +"989b595f": "shuffleSeed(uint256)", +"989ceab1": "WhitelistAddressAdded(address,address)", +"989ced26": "updateTokenContract(address)", +"989db511": "Input()", +"989ddfce": "AdminDeleted(address)", +"989e4a8c": "_processPurchase(address,uint256,address)", +"98a05bb1": "deletePermission(address)", +"98a05cfb": "arbitroAprovaPagamento(bool)", +"98a0871d": "buyXaddr(address,uint256)", +"98a0bf6e": "ForeverChain()", +"98a0e1c8": "computeKnockoutPoints(uint8,uint8,uint8,uint8,uint8,uint8,bool)", +"98a10993": "finalizeWhenForked()", +"98a1803c": "ICONotCompleted()", +"98a1b397": "ROLE_OPERATOR()", +"98a1e1ba": "ownerSetLimits(uint256,uint256)", +"98a26497": "payCeo()", +"98a29a58": "testControlDisownNotTransferable()", +"98a2f59f": "ToLend()", +"98a30f76": "totalTokensPreICO()", +"98a322ae": "ownerComission()", +"98a33bfe": "addGlobalConstraint(int256,address,int256,bytes32,address)", +"98a34fef": "withdrawBeneficiary()", +"98a36ebf": "setTradeEventEnabled(bool)", +"98a42ec4": "verificationAddressNumberMap(address)", +"98a595a5": "requiresInitialization()", +"98a6a6c0": "isTokenSaleActive()", +"98a73afa": "getAwards(uint256)", +"98a7cafd": "setData_27(string)", +"98a87f7d": "CPCToken()", +"98a892c9": "getBylawsCashBackVoteRejectedDuration()", +"98a9ae44": "remaindersSet()", +"98a9bfd4": "is_max_goal_reached()", +"98ab1c72": "setBackgroundImage(uint256,bytes)", +"98aca922": "getReceiver()", +"98acd7a6": "getBaseToken()", +"98ad004c": "GetCollectionInfo()", +"98ad2f12": "getid(address)", +"98af629b": "winnerDecidedGas()", +"98b00ee0": "getFinalBytes()", +"98b01fe3": "totalBonusTokensIssued()", +"98b04c16": "SportistToken()", +"98b0787e": "playerTwoCommit(bytes32)", +"98b1e06a": "deposit(bytes)", +"98b23a29": "TimeShareEstate()", +"98b35e73": "saveReading(string,string)", +"98b3dfd6": "NamCoin(address)", +"98b41763": "publicGetAdvertisement(uint256)", +"98b547e0": "transfer_ownership(bytes32,address)", +"98b78849": "preStakingDistribution()", +"98b7db75": "PayForFlag(uint256)", +"98b90fe1": "closeOption(address[3],uint256[3],uint256[2],bool)", +"98b9a2dc": "changeWallet(address)", +"98b9d151": "InsuranceHolder(address,address)", +"98ba2453": "canSynthesizeWith(uint256,uint256)", +"98ba676d": "getEntry(uint256,uint256)", +"98bbc47e": "addPerson(uint256,string,string,string)", +"98bca41a": "removeSeenAddress(address)", +"98bcfbb8": "minimumTokensBeforeSale()", +"98bd359c": "deposit(address,uint128,string,uint32)", +"98bd5663": "confirmTime()", +"98bdf6f5": "tokenIdCounter()", +"98be22f7": "forfeitGame(uint256)", +"98be7c62": "minterFeePercent()", +"98be7df7": "releaseEthers()", +"98bf043d": "clearUnusedDeposit(uint256,uint256)", +"98bffb2a": "manualRecovery(address)", +"98c07938": "votersCount()", +"98c086d8": "_amountReq()", +"98c0bb94": "returnante(address)", +"98c16888": "SToekn()", +"98c20c00": "addToAllocation(uint256)", +"98c23836": "schellingDB()", +"98c31b1d": "addEvent(uint256,uint256,uint8,string,string)", +"98c39cc2": "AnubisToken()", +"98c5166c": "inResources(address,bytes4)", +"98c547b8": "setContentExtraData(bytes32,string)", +"98c562b3": "contributionsBySender()", +"98c66b7f": "_startTokenTransfer(uint256)", +"98c69648": "DEFAULT_NAME()", +"98c6a46f": "setPayoutDistributionId()", +"98c6e760": "migrateTo()", +"98c7458e": "getEventsByIds(uint256[])", +"98c83a16": "PRIVATE_SALE()", +"98c8bde6": "GICTBalance()", +"98c9cdf4": "getMinimumCallGas()", +"98c9faac": "cancelActiveAuction(uint40)", +"98ca667f": "FOUNDERS_SUPPLY()", +"98cb12dc": "isRandomPlayer()", +"98cb2342": "getNumEvenSplits()", +"98cba526": "TeamAndAdvisorsAllocation(address)", +"98cbb277": "Admined()", +"98cbefbe": "init(string,string,uint8,address)", +"98cc223f": "BiboToken()", +"98cc2c53": "VerifiedKYC(address)", +"98cc6754": "dumpBalance(address)", +"98cdf0ca": "updateConfig(uint16)", +"98ce476a": "EPTCrowdfund(address,address,uint256)", +"98cef4bd": "earlyBirds()", +"98cf6dd3": "deleteInvestorTokens(address,uint256)", +"98cf6f22": "queryN(string,bytes)", +"98cfa44e": "setFSTPrice(uint256,uint256)", +"98d0573e": "_getActiveMessageId()", +"98d07356": "getDepositValue()", +"98d0a6c7": "setBcouponAllocationFactor(uint256)", +"98d0b85f": "isNonZeroAccount(address)", +"98d0de03": "addPlayerToServer(uint256,uint256)", +"98d15134": "companiesManager()", +"98d24806": "GetPlayerById(uint256)", +"98d2e3b1": "calcTokenToWei(uint256)", +"98d30c50": "winnerCheck()", +"98d31a13": "AIR_2()", +"98d35f20": "anchors()", +"98d41484": "applySettings(uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"98d48567": "disapproveUserKYC(address)", +"98d4cacb": "_assemblyCall(address,uint256,bytes)", +"98d4e59c": "decreaseOffsaleCountByOne()", +"98d501ca": "OysterPearl()", +"98d5a1b1": "burnFromIco()", +"98d5fdca": "getPrice()", +"98d6ceb3": "BetSetAnswer(address,address,uint256)", +"98d6d8ed": "isPresaleStarted()", +"98d70779": "contRefer50x50()", +"98d714ac": "ethereumFromAltar()", +"98d7352f": "setTokenURI(address,string)", +"98d7456f": "ShowInfo(uint256)", +"98d764be": "Myastheniagravis()", +"98d78fe2": "soldDuringTokensale()", +"98d8adc0": "DividendDistribution(uint256,uint256)", +"98d8d7b4": "Vlicoin()", +"98da2133": "SEC_contract()", +"98da8121": "lock_vote_amount(bool)", +"98daa8c2": "changeJoysoWallet(address)", +"98dacb46": "setLockPostion(address,uint256,uint256,uint256,uint256)", +"98db173f": "calcaultePrizes()", +"98dc6ae2": "divX(uint256,uint256)", +"98dc8b44": "getStageIndex()", +"98dd0293": "changeBonusFrequency(uint32)", +"98dd0baa": "getNumOfLotto()", +"98dd4b7c": "getCountStakesToken()", +"98de4f35": "purchaseTokensfor82(uint256,address,uint256)", +"98de921f": "removeLoanFromPortfolio(uint256,uint256)", +"98dec601": "REGULAR_RATE()", +"98dedf30": "getBySchool(uint256,uint256)", +"98df3d00": "getNote(bytes32)", +"98df67c6": "revealSecret(uint256)", +"98e00e54": "getCallWindowSize()", +"98e02be7": "abandonShip()", +"98e09333": "valueGet(address,string)", +"98e0fb08": "ICO_TOKEN_SUPPLY_LIMIT()", +"98e12d12": "updateAnimal(uint256,string,string)", +"98e15065": "info256(string,uint256)", +"98e1a322": "LivepeerTokenFaucet(address,uint256,uint256)", +"98e1b410": "getMoney()", +"98e1b6cd": "stopPromotion()", +"98e23dcf": "finishPreSale5()", +"98e25733": "currentRoundNum()", +"98e314a2": "distributeDonationTokens()", +"98e364d6": "saasApiProfitAddress()", +"98e3d1d3": "getWineProductionRate()", +"98e4053f": "changeVerify(address)", +"98e47e49": "LoomToken()", +"98e4f581": "getSkin(uint256)", +"98e527d3": "getProposalsCount()", +"98e52f9a": "decreaseSupply(uint256)", +"98e54c55": "setAsTest()", +"98e6176a": "_isProxy(bytes32)", +"98e73df9": "hasOutstandingChallenges()", +"98e76e06": "buyValue()", +"98e7ea43": "reward(uint32[],address[])", +"98e8c54f": "testerCanReentrant()", +"98e8f365": "getYourRewardStock(address)", +"98ea1c51": "ecrecovery(bytes32,uint8,bytes32,bytes32)", +"98ea5fca": "depositEther()", +"98ea6536": "_beginOfICO()", +"98eaca94": "inKissBTC(uint256)", +"98eaf11c": "getBool(bytes32,bytes32)", +"98eb1096": "CalculateCreateFee(uint256)", +"98ec341d": "addThing(bytes32,string,string,bytes32)", +"98ec9095": "total_distribution()", +"98ecd12c": "test_mixValidEqBytes32Message()", +"98edc9ce": "distributeLottery()", +"98ef4b0b": "total_iou_purchased()", +"98ef5bf9": "BuyItem(uint256,string)", +"98f038ff": "migrateRegistry(uint256)", +"98f04128": "getRoundJackpot(uint256)", +"98f1312e": "MINT_CAP()", +"98f1e0e7": "sendTokensWindow(uint8)", +"98f20367": "Curatable()", +"98f22786": "FireToken()", +"98f23a6d": "createToken(string,string,uint32,uint256,uint256)", +"98f25c44": "removeCurator(address)", +"98f28571": "ClientOrderEvent(address,uint8,uint128,uint256)", +"98f2af3a": "createGame(uint32,uint64,uint32,uint32)", +"98f31c82": "price2Of(uint256)", +"98f32d1d": "getCatRequestPrices()", +"98f3b81a": "getShares(address,bytes32[],int256[])", +"98f3c443": "CROWDSALE_WEI_CAP()", +"98f423b2": "bitsmileToken()", +"98f42e3b": "payoutInvestors()", +"98f44c62": "resetTokenOwnerReward()", +"98f4b1b2": "rateOracle()", +"98f4f54f": "KhairulRamadhan()", +"98f52c52": "firstChainHNw1()", +"98f5ee5d": "spawningManager()", +"98f69aeb": "_addChildToParent(bytes32,bytes32)", +"98f6c7e5": "refereeInvitations(address)", +"98f6ff63": "unlock(string,address,address,uint256)", +"98f72f42": "COSS()", +"98f7ba63": "UBCToken()", +"98f8193b": "replaceTokenFix(address[],uint256[])", +"98f87496": "setRateFinalStage2(uint256)", +"98f8fe90": "accessCostMYB(uint256)", +"98f96c3a": "AboutKelvin()", +"98f9724f": "holderAmount()", +"98fa6c8a": "batchTransferETHs(address[],uint256[])", +"98faa9a1": "getStageBonus(uint256)", +"98fabd3a": "DAO()", +"98faf5d1": "TBsell()", +"98fb0ac5": "tokenGenerationEvent()", +"98fb2eca": "voteStopped()", +"98fc2e0a": "GetTickSize(uint256)", +"98fc55d8": "whitelist(address,uint256)", +"98fcc93e": "getNumberOfBets(uint256)", +"98fdb377": "REOC()", +"98fdfd8e": "changeMallcoinTokenAddress(address)", +"98fe2b49": "NotifierChanged(address,address)", +"98ff116d": "deposit3(address,address)", +"98ff1ba1": "tokensGenerated()", +"98ff8075": "claimBounty(address)", +"990030cc": "trusted_contracts(address)", +"9900c978": "ScudoCash()", +"99013562": "Reject(address,string)", +"99016142": "claim(uint256,address,uint256,bytes)", +"9901bc77": "YRX()", +"9902ef5b": "blockLeft()", +"990333be": "salesDeadline()", +"99035895": "approveERC20()", +"9903745f": "SetsecondTTaxAmount(uint256)", +"990386e8": "dailyRelease()", +"9903a2bd": "calcReleaseToken(address)", +"9903c29c": "SALE_MAX_CAP()", +"990460c1": "ownerKill(address)", +"990484a7": "valueToToken(address,uint256)", +"9904a68d": "requiredDays()", +"9904e174": "sellTokens()", +"9904ed8d": "Reputation()", +"990502d0": "GasBuy()", +"9905b744": "logUint(uint256)", +"99061a08": "AltCrowdfunding(address)", +"9906352f": "MANAGE_CAP_PER_ROUND()", +"9906f41c": "setDevelopeo(address)", +"9906f81b": "Entrant(address)", +"99076eca": "IHubToken()", +"990816bb": "BitcoinSilver()", +"9908b25b": "publicTransferToken(address[],uint256[])", +"9908d3cf": "AMEBToken()", +"99091c93": "insertLawyer(address,uint256)", +"990986dd": "getRawPendingAmount(uint256)", +"9909afed": "has(address,string)", +"9909d1a2": "createTestData()", +"990a6a64": "SC_locked()", +"990ae727": "clearZoDailyLimit()", +"990c5485": "proxyMergeMint2(uint256,bytes32,address[])", +"990c75ed": "getWhitelistedAmount(address,address)", +"990c8f79": "returnValue()", +"990ca3ff": "tokensToBeAllocated()", +"990cc5c9": "buyFromCurrentOwner(uint256)", +"990d6fd2": "getNextTranche(uint256)", +"990dc9db": "transferFunds(address,uint256)", +"990dec94": "signToResetAddTokenData()", +"990e178a": "_revealBlock(address)", +"990e1c9b": "withdrawStep()", +"990e2979": "submittedAmount()", +"990e713b": "buyTokens(address,uint256,bytes4,bytes32)", +"990e80a3": "setAddressOf(string,address)", +"990ed905": "setNewBonusScheme(uint256)", +"990eda99": "FreezeAddress()", +"990f3f53": "computeResponseSecondHalf(uint256,uint16)", +"990f412f": "setAssetHolder(address)", +"990fa439": "setLLV_edit_1(string)", +"99110d3c": "PRESALE_END_TIMESTAMP()", +"991162db": "getDank(uint256)", +"99116354": "errorAndRefund(string)", +"99119290": "getCryptodiamondAddress()", +"9911ec1e": "freezeTokensToInvestor(address,uint256,uint256)", +"991257a2": "getSenderLands(address)", +"9913380e": "_getInt(address,bytes32)", +"99133c9f": "matched(address)", +"9913dcbb": "AEFToken()", +"9914038a": "getBankRollGrowthForGameId(uint256)", +"99141a47": "iffun()", +"99142b5f": "send(address,string)", +"99154b49": "ARK()", +"9916233e": "LimitOrder(address,bool,uint256,uint256)", +"99166f7d": "getTotalAddresses()", +"991678bf": "LogRefundETH(address,uint256)", +"9916c350": "numberEthUpdates()", +"9917ccb8": "HongmenToken(uint256,string,uint8,string)", +"9918925d": "setClaim(address,bytes32,bytes32)", +"9919b1cc": "getContentsByRanks(address,uint256,uint256,uint256)", +"9919c9cf": "getGoldBackedByEachToken()", +"991a3b5e": "ARCD_FUND_DEPOSIT()", +"991a9fa9": "etherHasBeenReturnedToInvestors()", +"991b650d": "dataIdentifierCount()", +"991bcae8": "setup(address,address,address,address,address,uint256,uint256,uint256[])", +"991c9ae5": "set(uint32[],uint24[])", +"991cc283": "distributeICOTokens(address)", +"991d79b5": "EtheremonAsset(address,address,address)", +"991dd5b6": "read_user_purchase_at_index(address,uint256)", +"991e0139": "completeJob(bytes32)", +"991e47ff": "CoinWindow(uint256,string,string)", +"991e86bb": "c_maximumTokensSold()", +"991ef443": "publishers(uint64)", +"991f6798": "updateEQUIPrice(uint256)", +"991fa5af": "BinaryOption(address,address,address)", +"991feab5": "MMToken(uint256,string,uint8,string)", +"991ffd4e": "scheduleCall(address,bytes,bytes,uint256,uint256,uint8,uint256)", +"99209e33": "setEndOfCrowdsale(uint256)", +"9920ecb8": "buyPhaseTokens(address)", +"9921cac5": "AlbertCoin()", +"992204e6": "GoldFee()", +"9922ea86": "allocateTokens(uint256,address)", +"99244d1a": "testvalue()", +"99248d3e": "AxieAccessControl()", +"992495e2": "minerRandomNumber()", +"9924ab31": "CIVCoin()", +"9924ad7c": "ovatel()", +"9924ba1a": "updateInfo(address,address,uint256,uint256)", +"9925b9c1": "setMintFeeAbs(uint256)", +"9925d68e": "createPreSaleShip(string,uint256,uint256)", +"99260144": "rewardMintOwner(address,uint256)", +"9927482d": "proxy(address,string,address,uint256)", +"992817b9": "recordGet(address)", +"9928811b": "testBroken()", +"99288dbb": "saleOpen()", +"9929057b": "executeDelayedSetStakes(uint256)", +"992a3e75": "changeBountyPaysTokens(uint256,bool,address)", +"992ae976": "isSafePunctuation(bytes1)", +"992b2f0f": "addSlogan(uint8,string)", +"992bb01e": "eval(bytes32[])", +"992bc0ce": "pay_to_OEM()", +"992c15fc": "MIN_VALUE()", +"992c3ff1": "TrekChain()", +"992c4435": "UETO()", +"992c870d": "transferName(bytes,address)", +"992cb59f": "getOrCreateDisputeCrowdsourcer(bytes32,uint256[],bool)", +"992d4196": "GNR(address)", +"992e0aa0": "purchaseBonus(uint256)", +"992e2a16": "getReportingEndTime()", +"992e74a9": "maxRefererTokens()", +"992e820e": "burnValue(address,uint256)", +"992ebc52": "setCounterLimit(uint256)", +"992ee4b6": "raiseTap(uint256)", +"992ee874": "WithdrawToken(address,uint256)", +"992fa380": "OmnisBit()", +"99304cd4": "AssetWithdraw(address,uint256)", +"993090d0": "adjustPrices(uint256,uint256)", +"9931a916": "TokenRK70Z()", +"99325442": "getCollectedOreBalances(address)", +"9932dc05": "codeToAddress(string)", +"9932fa28": "API2()", +"993301b2": "libbatchbacktest(bytes32,uint64,uint32[],uint64[],int64[])", +"9933a24a": "allowDirectDebit()", +"9933c6b5": "getPokemonLock(uint256)", +"9933d225": "addSpecial(address,uint16)", +"993480cf": "calculateRequiredVerifiers()", +"99348e90": "rewardsFunds(address,uint256)", +"99348f8e": "eggAvailable(uint16)", +"99351742": "distributePrize(uint256)", +"99352c42": "updateBtsPoint(uint16,int256,uint16)", +"99358876": "maxMintCookie()", +"9935935f": "setResolveHandler(bytes,address)", +"9935b968": "jesterBank()", +"9936746a": "DepositReceived(address,uint256)", +"99369801": "presaleTokenBalance()", +"99372321": "test(bytes32)", +"993783fc": "eraFromMokenData(bytes32)", +"99379718": "GimmerToken()", +"99384976": "setFounder(uint256,address)", +"9938579b": "getStatusTransferFrom()", +"9938b0de": "setPublisherCut(uint128)", +"9938be42": "getPOOL_edit_19()", +"9938fdd1": "downTick(address,uint256)", +"99393132": "onBurnCalled()", +"99395b1e": "OffMenuMorsel()", +"993ab58e": "setTournament(address)", +"993ae7e9": "updateUserBalance(address)", +"993af624": "BrehonContract(address,address,uint256,address,uint256,uint256,address,uint256,uint256,address,uint256,uint256)", +"993b4f71": "transferBag(address,uint256)", +"993b8cde": "countPurchasedPixels(address[16])", +"993bcc63": "enableTokenBurn()", +"993c78fa": "getMintApproval(address)", +"993ca7e3": "RTB1()", +"993d1123": "BoltToken()", +"993d13bd": "PRE_ICO_MAX_CAP()", +"993d29fc": "Mindmap_Token(uint256,address)", +"993d3489": "investorShortInfo(address)", +"993eaefa": "TravelWithMeToken()", +"993eda02": "giveArtworks(uint8[],address,uint256)", +"993f3197": "TOSInstitutionsHoldingContract()", +"993fd4de": "setTokensSource(address)", +"99404433": "levelup(address,uint256)", +"99405ad7": "NewTokenSale(address,address)", +"9940fb5d": "convertToMeth()", +"99413b4e": "connectToken(address)", +"994162cd": "BasicTokenStorage()", +"99418a21": "signEthereum(bytes32)", +"9941e3d0": "setCallAddress(address)", +"9942aa4d": "create(address,address,address,address,address,address,address,string,string,string,string)", +"9942ce36": "_initializeLockupStages()", +"9942ec6f": "f2()", +"99433fc3": "GreenWorldFarmToken()", +"99434669": "fabricoin()", +"99439089": "validatorContract()", +"99444e30": "ICOprice()", +"9944b729": "withdrowTokens(address,uint256)", +"9944d5e7": "burntBounty()", +"99456542": "getLargeBonusStopTime()", +"9945e3d3": "redeem(bytes)", +"99464c89": "freezeAll()", +"9946b9a5": "disable(uint256)", +"994828a1": "BabyBearToken()", +"9948e493": "calcMarketFee(bytes,uint256)", +"99497349": "setData_29(string)", +"994977e5": "finalizeRent(uint256,uint256)", +"9949f0c8": "convertEthToWeth()", +"994a69d1": "centsToTokens(uint256)", +"994aca84": "TrenoToken()", +"994b1a0f": "changeDivCardAddress(address)", +"994cc574": "setAyantDroitEconomique_Compte_9(uint256)", +"994d3969": "whitelistStart()", +"994d3be3": "publishFunctionMessage(uint256,string,string,string)", +"994e5267": "SetMaxAttempt(uint8)", +"994ebbe3": "signUpForPVP(uint32)", +"994f2e10": "getUpdateDerivePayoutDistributionHashValue()", +"994fb25f": "FileNameInt()", +"994fe290": "verificationListMap(uint256)", +"994ff619": "setKitty(address)", +"9950ace1": "rollRoom(uint256,address)", +"9951a2c8": "createTeamSaleAuction(uint8,uint256[9],uint256,uint256,uint256)", +"9951fc72": "TokenVesting()", +"99522297": "preCrowd_tokens_scaled()", +"9952b63d": "_receiveDonation(address,uint256)", +"995344da": "_updateVoucherMthEthRate()", +"99538898": "addTeamAddressInternal(address,uint256,uint256)", +"99540fe0": "normikaivo()", +"9954cf22": "JUST()", +"99552af1": "multiInvokeWith2Args(address,string,address[],uint256[])", +"99554e7b": "getNextFetchTime()", +"99554fb7": "distructVault()", +"99556615": "calculateProfitGameType2(uint256,uint256)", +"9956587e": "REGISTERFEE()", +"9956a28c": "mediumBuy()", +"995771b9": "CarnageToken()", +"995783d9": "ERC20(uint8)", +"9957ad05": "withdrawCreator()", +"9957f3e6": "KvantorToken()", +"99583417": "transferMultiple(address,uint256[],uint256[])", +"995893e6": "_createRole(bytes32,address[])", +"9958c661": "getstate(address)", +"9958d553": "max_creation_rate_per_second()", +"9958f045": "drasticMeasure()", +"995a15a8": "TouristToken()", +"995a299e": "setCurrentSeller(address)", +"995a2b52": "DeusETH(address)", +"995a7174": "_toLeconte(uint256)", +"995ab62e": "GAS_LIMIT_IN_WEI()", +"995b129f": "setAirDropManager(address,address)", +"995b2cff": "executeAffirmation(address,uint256,bytes32)", +"995b2e2c": "getUnreadMessage(uint256)", +"995b40f3": "_getNextAuctionPrice()", +"995b4a80": "LogTokenSent(address,bool,string)", +"995b5aae": "feeInfo()", +"995cb4ec": "doWorkAndPayEAT()", +"995cc82b": "powerTotalSupply()", +"995cd653": "createSale(uint256,uint256,address)", +"995d9ab7": "getTags()", +"995e4339": "getResult(uint256)", +"995e599d": "ARCONA()", +"995f80e9": "NewSoftCap(uint256)", +"995fac11": "migration(address,address)", +"99600baa": "SVIP()", +"99603bfe": "CryptoDuelCoin()", +"9960d947": "grantKudos(address,uint256)", +"99613a3f": "metaSet(address,uint256)", +"9961476c": "MatchBetting(string,string,uint256,address,address,uint256)", +"996301e4": "claimTimeoutEnded(bytes32)", +"9963181e": "setAyantDroitEconomique_Compte_10(uint256)", +"9963a8e0": "fund(bytes32,string,address,uint256)", +"99645ba2": "changeStepLockFlag(bool)", +"9964622c": "_setPendingAnchorAdmin(address)", +"9964935e": "makePayout()", +"99649d06": "setInitialDeposit(uint256)", +"996517cf": "mintLimit()", +"99651db8": "addShares(uint256)", +"99653fbe": "submitVote(uint256,uint8)", +"9965b3d6": "claimProxyOwnership()", +"9965ea53": "setPFManager(address)", +"99671dfb": "Sacacoin()", +"99678b43": "setFunctionThreePrice(uint256)", +"9968b87b": "SogetiTestCoin()", +"99693026": "setInitialState(address[],uint256[],address[],uint256[100][],uint256[],uint256,uint256,uint256,uint256)", +"99694cf2": "WIKICOIN(uint256,string,uint8,string)", +"9969b256": "sendOwnersBalance(address,uint256)", +"996a4be3": "uintToBytes(uint256,uint256)", +"996a8046": "__callback(bytes32,string,bool)", +"996b434a": "littID()", +"996b8b76": "updateIndividualCertificate(string,bytes32,bytes32,bytes32)", +"996cba68": "claim(address,address,uint256)", +"996ccf0b": "CockToken()", +"996d21aa": "privateTotalSupply()", +"996d2d65": "addAtkBossQuest(address)", +"996d310d": "resumeTransfer(uint256)", +"996ea781": "getOrganName()", +"996ec1f3": "BigBlockCoin()", +"996ed6e1": "TransactionSucceeded(address,uint256,string,address)", +"996f3247": "closeWall()", +"996f677b": "icoInvestmentsCount()", +"996f7602": "GetTotalMinerCount()", +"99704b65": "isAcceptedImportingAuthority(address)", +"997072f7": "getMemberCount()", +"9970e26b": "ParyToken(string,uint8,string)", +"9971b98d": "getDesign(uint256)", +"9971c6ce": "gupToken()", +"99721229": "amountForBonus()", +"9972b76c": "haltedFX()", +"9973b827": "totalLotteryValue()", +"997402f2": "liquidityAdd()", +"9975038c": "burnAll()", +"9975091a": "pausePreSaleRound()", +"997519f2": "SingularityNetTokenMock(address,uint256)", +"99753de7": "clear_level()", +"99755bab": "ICOCents()", +"9975c06b": "logDebug(string)", +"99761662": "YouWin(address,uint256,uint256)", +"997636ec": "play(string,uint256)", +"997664d7": "totalDividends()", +"997676c3": "checkWhitelistExist(address)", +"99767aa9": "FLC(uint256,string,string)", +"9976d32a": "coinOwner()", +"9976f5c5": "ProofOfDoge()", +"9976f9e1": "setAgriChainCultivation(address)", +"99771006": "GLORY()", +"99777d9d": "isPublicTokenReleased()", +"9977a108": "isCollected(address,bytes32)", +"9977b698": "startTokensSale(uint256,uint256,uint256,uint256)", +"99789670": "Initialized(uint256,uint256)", +"9978be95": "TOKENS_ADVISORS()", +"9978f01b": "setExchangeRate(address)", +"997995ec": "revealResultUncleMerkleProof(uint256,uint40)", +"9979b7aa": "CETACEA(address)", +"9979c009": "buyItem(uint256,uint256)", +"9979ef45": "placeBid(uint256)", +"997a0229": "_newPrice(uint256)", +"997a12fa": "attowethBalance()", +"997a2c1c": "numberOfMyComponents()", +"997aa31f": "sellChannel(string,uint256)", +"997bc6c9": "int2str(int256)", +"997c44e4": "setLockRate(uint256)", +"997c88ba": "calculateCurrentDistanceInRange(address)", +"997ce600": "endauction(uint256)", +"997cf69c": "dataset_sha256checksum()", +"997d2df8": "asserti(bool)", +"997d8473": "reserveBalanceMap(address)", +"997dd1c6": "dealHitCard()", +"997e02d9": "wormholeIsOpen()", +"997f0198": "setImageHeight(uint256,uint16)", +"997f35ac": "RewardOffer(address,address,bytes32,uint256,uint256,uint128)", +"997f50d8": "getCurrentTierHardcap()", +"997f51e6": "GAMToken()", +"997fdb1f": "setLockTime(address,uint256,uint256)", +"997ffd13": "quarterFourth()", +"99801bce": "dagheAcqua(uint256)", +"99808aff": "winningTicket(address)", +"9980dee2": "calculateHash(address,address,uint256,uint256,uint256)", +"9980ec86": "getAmount(uint256)", +"99817b47": "releaseVestedTokensForBeneficiary(address)", +"9981bd61": "requestTokenExchangeMax()", +"99820e96": "finishSunning()", +"9982257b": "hotQuestion(uint256,uint256,uint256)", +"998282e9": "winners(uint32,uint32[],uint64[])", +"9982e7ed": "updateBillionsCoinsRemainingToDrop()", +"998446a8": "acceptRequest(uint256,bytes)", +"99847f77": "addUnsoldTokens()", +"9984f30d": "setMaxValue(uint256)", +"99851eac": "updateCards(uint8,uint256[])", +"99863b5c": "canChangeOwnerParams()", +"9986d936": "setRestrictedPercent(uint256)", +"9987680b": "play(address,bytes32)", +"99878d5b": "play_scissors()", +"99879bb9": "startTimeInSec()", +"9987b2d2": "getProposalIndex(address,uint256,bytes32)", +"99882cdb": "propose(bytes32)", +"9988807d": "centsReceived(address)", +"9989a5ae": "setLimitOfParticipants(uint256)", +"998a1f96": "preICORaised()", +"998ac104": "AIRDROP_TRANSIT_ADDRESS()", +"998b022e": "_mintPrimordialToken(address,uint256)", +"998b723b": "waterTree(uint256)", +"998b894a": "isLegalTime()", +"998bac16": "bulkTransfer(address[],address,uint256[])", +"998be0d7": "sendTokenToSingleAccount(address,uint256)", +"998c4f5a": "setEthExchangeWallet(address)", +"998cab7e": "getTransformTarget_pool(address)", +"998eb4cf": "getRank03()", +"998f9203": "INCash()", +"9990b3a3": "getPreSaleWallet()", +"9990db92": "CryptoSureToken()", +"999122f4": "BHK()", +"999377ec": "acceptBlokTokenOwnership()", +"9993fa94": "balanceOfSender()", +"9994e112": "AddContact(address,bytes32,bytes32,bytes32,bytes32,bytes32)", +"9995bbf7": "ethforp3dbuy()", +"99967819": "lastaction()", +"9996eb64": "batchNewAccount(address[])", +"99999342": "GetBonusInv()", +"9999aae5": "EYTToken()", +"9999bd2e": "RATE_PRESALE()", +"9999d2ae": "getSubmissionCount()", +"999a9965": "setMany(uint256,int256,uint256,bytes,address,bytes)", +"999b078e": "isSoftCapHit()", +"999b5c72": "FASET(uint256,string,uint8,string)", +"999cbaf5": "Deposit(address,uint256,uint8,uint256)", +"999cef04": "PublishWorldCupResults(bytes32,bytes32,bytes32,bytes12)", +"999d350d": "totalBonusGiven()", +"999d3947": "getGenes(uint40)", +"999d46b9": "transferInterviewer(address)", +"999dd03e": "poolAddressCapTier2()", +"999eb6b1": "balanceOfThis()", +"999f18a6": "unsigned()", +"999f4b38": "sellDividendPercent()", +"999f5644": "Stoppable()", +"99a032ce": "isCurrentAccountReader(address,address)", +"99a03c70": "realBalanceOf(address)", +"99a17344": "setHiddenLogic(address)", +"99a1a412": "getModeratorCount()", +"99a2e1ec": "roundLatLngFull(uint8,int256)", +"99a3e03f": "testNegativeIntegerKeyValue()", +"99a3f0e8": "right70(uint256)", +"99a44e68": "BEXP()", +"99a48638": "packSettings(uint256)", +"99a48e17": "FinalizableToken(string,string,uint8,uint256,address,uint256,address[],uint256[])", +"99a5d747": "calculateFee(uint256)", +"99a6993b": "KCCTOKEN()", +"99a6f7d2": "createReserveTokens()", +"99a752d7": "setPriceETH(uint256)", +"99a79790": "startTimeSale2()", +"99a7b857": "FundsWithdrawal(address,uint256)", +"99a7b884": "getBuyerFullInfo(address)", +"99a7e9db": "get_presale_iconiq_arbits_per_ether()", +"99a856e3": "firstBonusRate()", +"99a88ec4": "upgrade(address,address)", +"99a8f2fe": "EncryptedToken()", +"99a9a04c": "BITStationERC20()", +"99a9ccb2": "preMinedSupply()", +"99a9f1b5": "totalStakingUnits()", +"99aa5d97": "Pixel()", +"99aa93c8": "numSales()", +"99aba8e3": "distribute(address,uint256,uint256,uint256)", +"99abaabb": "addMarketToWasCalled()", +"99abd788": "FIRSTSALE_TOKENCAP()", +"99ac4569": "withdraw(uint64,address[],uint256)", +"99acc3fd": "prizeshow()", +"99ad91c7": "AddAdmin(address,address)", +"99ae6a16": "Winner(address,uint32,uint32,uint256)", +"99aeade3": "iterateTable(uint256,uint256)", +"99aef94a": "getMyEntitySimple(uint256)", +"99af4114": "createPet(uint256,uint16,address)", +"99afb9b9": "createValidatedRequest(address[4],address,uint256[12],uint256,bytes)", +"99b0dc4d": "areAllUppercase(bytes16)", +"99b1adbf": "isUserMember(address)", +"99b22701": "delBackend(address)", +"99b29044": "getPropertyEarnUntil(uint16)", +"99b2a233": "offlineGuardianSold(uint256,address,uint256)", +"99b465cb": "currentSegment()", +"99b47af8": "reveal_test_data_groups_block_size()", +"99b4a0c6": "BTRL()", +"99b55343": "termsNumber()", +"99b58f06": "icoPushAddr(uint256,address)", +"99b5b2fa": "horseIndexPrice(uint256)", +"99b632e4": "winnovate()", +"99b6f5a1": "sendAdvisorsTokens()", +"99b721a5": "rewardEthAnd(address[])", +"99b77032": "setMinBuyLimit(uint256)", +"99b83f3d": "setMaxRedemption(uint256)", +"99b8a3f0": "charityBalance()", +"99b8e366": "reloadPlayerInfo(address)", +"99bac5c9": "setMinCustomerBalanceETH(uint256)", +"99bad2cd": "testAddExistingVoter()", +"99bb8134": "approveMany(address,uint256[])", +"99bb875c": "funeralAndBirth(bytes,int256,bytes)", +"99bc0aea": "expiryTime()", +"99bc826e": "intMemoryArray()", +"99bcb1a1": "thirdWeekMainICOBonusEstimate()", +"99bdc9c2": "AdminAddition(address)", +"99bea0bd": "AllForOne()", +"99c0058c": "getAttackPlayerList()", +"99c20c34": "percentToFoundersAfterICO()", +"99c24d85": "SetCurrentRoomAndRound(address,uint8,uint256,bool)", +"99c27d40": "updateGlobalMin(uint256)", +"99c2af56": "setRateEarlyStage2(uint256)", +"99c2b93b": "startCrowdsalePhase1Date()", +"99c2bb40": "listAssetDocumentsFrom(bytes32,bytes32,uint256,bool)", +"99c32025": "TwoPhaseTransfers(address[],address[])", +"99c4644a": "putIdentityProvider(address,string)", +"99c49852": "cancelOrder(address)", +"99c59bdc": "MadeBet(uint256,uint8,address)", +"99c69d40": "getPremiumsAvailable()", +"99c6d2de": "depositToken(address,uint256,uint256)", +"99c6da4a": "UTWD()", +"99c724ef": "skipInLine(uint256,uint256)", +"99c75517": "GetCompetitionInfo(uint32)", +"99c8055d": "Enable()", +"99c8268b": "totalBattle()", +"99c87629": "getFibonziPlayers()", +"99c8d556": "tax()", +"99c8fcba": "agreeBetWinner(uint256,uint8)", +"99cac223": "getBallotIndex(address,bytes32)", +"99caf208": "updatePendingManager(address,uint256)", +"99cb0823": "presaleBonus()", +"99cbc1b9": "Bet(address,bytes32,bytes32,uint256,uint8,uint16,uint16,uint16,uint8,uint256,uint8,address)", +"99cc00d1": "getImageHeight(uint256)", +"99ccbec6": "claimByTeam()", +"99ccf3da": "_increaseToken(address,uint256)", +"99ccfd34": "forkUpgrade(address,address)", +"99cd211d": "bountyTokensWallet()", +"99cd40aa": "_setBytes(bytes32,bytes)", +"99cdee0e": "own()", +"99ce00a9": "VREO_SALE_OPENING_TIME()", +"99ce12c1": "getAssetClaimString(uint256)", +"99ce919c": "goods(bytes32)", +"99ceb6e6": "BTCReceived()", +"99ceed71": "OwnerTokensBurned(uint256,uint256)", +"99cf5582": "burnVotes()", +"99cfe1e1": "issueCofoundersTokensIfPossible()", +"99cfe743": "TotalGenesisAddresses()", +"99cffe4d": "LinearBeam()", +"99d0f06c": "removeNotes(uint256[],uint256[],uint256)", +"99d136f5": "multiSend(address[])", +"99d18937": "getAllDSP()", +"99d1c413": "isEggFactory()", +"99d1d002": "debug_blockHeaderMerkle(bytes)", +"99d1e755": "getTeamWallets()", +"99d22e48": "founderAllocated()", +"99d3acd3": "EtherDeltaDepositToken(address,uint256)", +"99d413f4": "createDividendPercent()", +"99d43acc": "organizerRegistration(string,string)", +"99d4aec9": "getPurchaseRequests()", +"99d50d5d": "getComponents()", +"99d52baf": "test_startBool()", +"99d5af62": "unLockBatchAddr()", +"99d64ab0": "maximumFunding()", +"99d67084": "numberOfInvestorsToWithdraw()", +"99d76e49": "setDragonName(uint256,string)", +"99d786ca": "lastMonth()", +"99d792a2": "releasePrivateSupplyVested()", +"99d7dd25": "isEcoAllocated9()", +"99d80ed9": "addService(bytes32,uint256)", +"99d83b77": "BuyRC(address,bytes,uint256,uint256,uint256)", +"99d897f8": "sellForOtherCoins(address,address,uint256)", +"99d9b306": "trancheMinTx()", +"99d9d1e0": "KNB()", +"99db626c": "LOG_SpinExecuted(bytes32,address,uint256,uint256)", +"99db7eb7": "TapPoll(uint256,address,address,uint256,uint256,uint256)", +"99dbff01": "buyCourse(uint256,uint256)", +"99dc79d1": "getBracketScore(bytes8)", +"99dd1ed9": "estLiquidationCap()", +"99ddb29b": "addressType(address)", +"99de4fc5": "UNK()", +"99def960": "getcredibilityScore(bytes12,bytes12)", +"99df3d7a": "setFunctionAuthorized(address,string,bytes32)", +"99dfa711": "GetCurrentTypeStartTime(uint256)", +"99dfedb4": "getTeamSumSkills(uint256)", +"99e0021f": "mergencyCall()", +"99e07caf": "updateItem(uint256,string,string,string,uint256)", +"99e0dd7c": "setTokenURIPrefix(string)", +"99e133f9": "init(address,address,address,address,address,address)", +"99e1cc47": "calculateAndSendRefund(address,uint256,uint256,uint256)", +"99e1d127": "filterWarriorAuras(uint256,uint256)", +"99e2ab0e": "UpdateMinFee(uint256)", +"99e3a723": "verifyOwner(bytes32,address,uint8,bytes32,bytes32)", +"99e47b2d": "DinoFarm()", +"99e487a9": "F2UPhone()", +"99e71b64": "secondBalance(address)", +"99e74ce8": "tokenIdToHeroInstance(uint256)", +"99e7c00a": "yaaay()", +"99e7cedf": "cobeneficiary()", +"99e8f303": "getM5Reward(address)", +"99e91527": "dequeueAuditRequest(uint256)", +"99e9376c": "buyWithCustomerId(uint128)", +"99ea0fd5": "disputeAllReporters()", +"99eb6603": "initalize(uint256)", +"99eb975c": "TransID()", +"99ec140d": "Tokensale()", +"99eca69f": "withdraw(uint256,address[])", +"99ecba80": "maxMinutesProposalPeriod()", +"99ed7b87": "getStrengthValue(uint256)", +"99ee9076": "defendFee()", +"99ef111c": "stopAddresses(address)", +"99eff1f7": "nextElectionIndex()", +"99f02ab5": "getWinnerContractAddress(uint256)", +"99f02b60": "IHFVesting(address,uint256)", +"99f07bed": "_clearCommittedValidators(uint256)", +"99f16c6e": "validateContribution(uint256)", +"99f1718a": "getSiteItem(uint256,uint256)", +"99f3379f": "getSolverAddress(bytes32,string)", +"99f3487b": "testBoolKeyValue()", +"99f49f0d": "vitPerWei()", +"99f4b251": "mine()", +"99f5c357": "modultradeStorage()", +"99f5c904": "momentValueOf(uint256,uint256)", +"99f6021d": "durationSec(bytes32)", +"99f65122": "getParam(uint256)", +"99f6a693": "setMasterName(uint256,string)", +"99f6d9af": "getTotalNumberOfRegisteredCompanies()", +"99f91c5d": "updateAllRewPaid()", +"99f9be87": "TEX()", +"99fa6ed7": "EthPledge()", +"99fb15d2": "distributionActive()", +"99fbe995": "Wallet(address[],uint256)", +"99fbf3a2": "setRentPrice(uint256,uint256)", +"99fca937": "amountOfEthersOwnerCanWithdraw()", +"99fd12f6": "etc()", +"99fd9489": "endCrowdsale(bool)", +"99fdc17e": "redenominatedValue(uint256)", +"99fe18b9": "fightBoss()", +"99fe6c88": "CashTCoin()", +"99ff0246": "onRefund(address,uint256)", +"9a003b61": "checkRequiredChange(uint256,uint256)", +"9a008d7b": "startPaymentProcess(address)", +"9a01b4d5": "getChannel(address)", +"9a02d3ac": "unapproveWithdrawal(bytes32,bytes32,uint256)", +"9a02edfe": "maxTokensPerAccount()", +"9a033782": "addContractToTokenFallbackWhiteList(address,address)", +"9a037aa0": "setReferralBonus(uint256)", +"9a03d9a3": "setERC721Address(address)", +"9a03fe1d": "Div(uint256,uint256)", +"9a0475e9": "ASHLEY_ADDRESS()", +"9a04a4ed": "setOpenInterestInAttoEth(uint256)", +"9a04ab73": "safeAddI(int256,int256)", +"9a04b89e": "setGiftoAddress(address)", +"9a04e602": "mintBounty(address,string)", +"9a04f704": "guest()", +"9a04fc8b": "getNodeParent(bytes32)", +"9a05cd66": "_setNarcosCoreAddress(address,address)", +"9a065a60": "discountTokenAmount()", +"9a065aae": "LMYY_Token()", +"9a06671e": "CoinsRetrieved(address,uint256)", +"9a06b113": "createPool()", +"9a06c2d3": "getRnMmasterReq()", +"9a073742": "setFeesWithdrawalAddress(address)", +"9a0750d5": "tokenFundDeposit()", +"9a0846f1": "MyKidsEducationFund()", +"9a08623a": "withdrawFromToken()", +"9a0907c2": "contributeAndVest()", +"9a09a8ef": "getCoinByCount(uint64)", +"9a0af2ec": "getStLength()", +"9a0b2db3": "withdrawFeeEntitlement()", +"9a0ca07d": "changeLocked(bool)", +"9a0d4f40": "PRESALE_PERIOD()", +"9a0d6247": "withdraw(uint8,bytes32,bytes32,uint256,uint256)", +"9a0e4ebb": "multiMint(uint256[])", +"9a0e7d66": "getTotalVotes()", +"9a0e7e8e": "secondSaleDelivery(address,uint256)", +"9a0e9e50": "newPoll(uint256,uint256,uint256)", +"9a0f1561": "prizeDeposit()", +"9a10f719": "setFreezeAddress(address,bool)", +"9a10f819": "buyOracle(bytes,address)", +"9a114fb0": "_Challenge(bytes32,uint256,uint256,string)", +"9a116ca1": "implementationCall()", +"9a1295d9": "getPassportLogic(string)", +"9a14228e": "getEntryPrice()", +"9a158883": "BOBOToken()", +"9a15f4f3": "getBlockHeader(int256,int256)", +"9a160ad9": "MeissaToken()", +"9a163c44": "currentVotingAmount()", +"9a165f6c": "currentCapTokens()", +"9a166299": "getMyAddress()", +"9a167613": "forceConsume(uint256)", +"9a16a7e3": "getAccountInputSdcslength()", +"9a18a5ba": "NEXPARA(uint256,string,string)", +"9a19a953": "setInt8(int8)", +"9a1a661e": "entranceFeePool()", +"9a1ac4b2": "OpenAddressLottery()", +"9a1b420b": "OraclizeAddrResolver()", +"9a1ca8d2": "SALE_ETHER_MIN_CONTRIB()", +"9a1e7ea0": "randomSatoShiTime()", +"9a1e9dc3": "Buy(bytes32,address,uint256,uint256,address,address)", +"9a1f6a0f": "setPacksPerClaim(uint16)", +"9a1fd3d5": "armyPlanesCount(uint256)", +"9a1fdc10": "createHorseShoe10(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"9a1ff4f4": "Ruthenium()", +"9a202d47": "removeAdmin()", +"9a206ece": "isSpender(address)", +"9a20821b": "claim_winnings(address)", +"9a21213e": "_getProviderOwner(uint256)", +"9a2160a7": "currentBetNumber()", +"9a221876": "project_contract()", +"9a22dec5": "buyAllAmountPayEth(address,address,uint256,address)", +"9a234885": "storeUserDataHash(uint256,bytes32)", +"9a2392b2": "getFirstBuyNum(bytes32,bytes32)", +"9a23ab61": "XXXXXXXX06(address,address,uint256)", +"9a2457c1": "getMiningAttempt(uint256,address)", +"9a251185": "isValidCertificate(bytes32,bytes32,bytes32)", +"9a267230": "END_TS()", +"9a276186": "getLentTime(uint256)", +"9a27b7ed": "setBounty(address,uint256)", +"9a2828f3": "setTechnicalWallet(address)", +"9a285ffb": "myDividendsYes()", +"9a28910a": "PrivateSaleBuy()", +"9a29ccf7": "_determinePid(address)", +"9a2a1f75": "CrowdsaleLeviusDAO(address,address)", +"9a2a224a": "setWallet(address,address,address,address,address)", +"9a2b4bdf": "ChangeTotalSupply(uint256,uint256)", +"9a2d2692": "withdrawToPoolOwnerFee(uint256)", +"9a2dcadf": "fundoShares(uint256)", +"9a2e27f8": "presaleEndDate()", +"9a2e6b40": "vote(uint80,bool)", +"9a2f9e92": "keeCrytoken()", +"9a2fb8c1": "startTimePrivatePreICO()", +"9a307391": "operator(address)", +"9a314b8e": "Group(string)", +"9a317cca": "getHWCAddressByIndex(uint256)", +"9a31a5f0": "transferManual(address,uint256)", +"9a31ac53": "setLastRegistration(string,int256,uint256)", +"9a31b14e": "set_totalSupply(uint256)", +"9a323ac4": "MAXfinney()", +"9a3241a6": "AddParticipant(address,uint256)", +"9a325e52": "exchangeRateRoundTwo()", +"9a336fed": "removeTotalCoinLock()", +"9a33aff9": "startDocumentPoll(bytes32)", +"9a33c610": "addPA(string,string,string,address,address,uint32,uint32,address,address,uint32,string)", +"9a33e300": "projectName()", +"9a344170": "test_insert_full()", +"9a347dd9": "tokensToFunder()", +"9a35f886": "__dig_then_proxy(uint256)", +"9a36f932": "feeDivisor()", +"9a37d1b7": "distributeEbyteForETH(address[],uint256,uint256,uint256)", +"9a38330d": "setIssuer(address,address)", +"9a388bd2": "CORAddress()", +"9a38ac79": "requireAuthorisation(bool)", +"9a38aeb1": "verifySignature(address,uint256,bytes32)", +"9a38bfae": "voteHash(address)", +"9a3a8c85": "ExiliumToken()", +"9a3aed36": "setMainAdmin(address)", +"9a3c4158": "setEthWallet(address)", +"9a3ce541": "price(bytes12)", +"9a3d1f3f": "twentyThirtyVault()", +"9a3dc23f": "_removeWhitelisted(address)", +"9a3ea7cc": "provas(bytes32)", +"9a3fc225": "getMinAuditStake()", +"9a3fc66d": "iouTokens()", +"9a3fd1fb": "tokenFallBack(address,uint256,bytes)", +"9a3fdfd0": "bountyTokensPercent()", +"9a406338": "VESTING_DATE()", +"9a40a316": "betting(uint256,uint8,uint256)", +"9a40d8f5": "equal(address[],address[],string)", +"9a41c1e6": "walletToVault(address,uint256)", +"9a429d2f": "setDisclaimer(string)", +"9a42adb3": "change_ico_start(uint256)", +"9a42af48": "getLastPrice(bytes32,uint8)", +"9a42c935": "forLottesy()", +"9a42f3aa": "reveal(uint256,uint8,bytes32)", +"9a4363cb": "setlockall(bool)", +"9a436c9b": "burnBasisPoints()", +"9a4373a6": "_internalTransfer(address,address,uint256)", +"9a437da2": "lookupPriorLottery(uint256)", +"9a438c5f": "ChangeInsuranceFeesOperationEvent(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256,uint256)", +"9a43e59a": "VAA()", +"9a4435c6": "BitcoinGame()", +"9a443955": "setNumVotesRequired(uint256)", +"9a44690e": "finalizeSettingUpdate(uint256)", +"9a454b99": "deployedAtBlock()", +"9a459f75": "setShortDescription(string)", +"9a45a263": "decentBetMultisig()", +"9a45e3fe": "getChannelExist(bytes32)", +"9a465b85": "lastBlock_a10()", +"9a46793e": "roundsManager()", +"9a471416": "bountyFunds(address[],uint256[])", +"9a47700f": "checkExpires(bytes32)", +"9a4772cd": "LogClaim(address,uint256,uint256)", +"9a478b49": "join(uint256,bytes32)", +"9a47cee3": "convertGene(uint8[48])", +"9a48007d": "hasHourlyRateWithinRange(address,address,uint256[],uint256[])", +"9a483a8e": "exerciseExpiredEmployeeOptions(address,bool)", +"9a48eb3e": "tokenTransferProxyContract()", +"9a49eab5": "MINER_CREATION_LIMIT()", +"9a4a0fb2": "centralBank()", +"9a4ac102": "tinyIPFShash(string)", +"9a4b19e4": "SiaCashCoin()", +"9a4b1d5c": "verifyTransfer(address,address,uint256)", +"9a4b87f1": "setDrop(bool)", +"9a4b8fc9": "lockInSemiFinalPrize()", +"9a4bca21": "setMintTap(uint256,int256)", +"9a4ca3cb": "itemsOfOwner(address)", +"9a4cbb92": "getDamage(uint256,uint256,uint256)", +"9a4cd266": "test_fourValidEqBool()", +"9a4d19f8": "getAmountAccredited(address)", +"9a4dfa87": "OfferCanceled(uint256,address)", +"9a4e36d9": "antiques(bytes32)", +"9a4e9bff": "FXPay()", +"9a4ed149": "getBlocksquareFee()", +"9a4f1e2c": "ETCrossPotatoPresale(uint256,uint256)", +"9a4f78cc": "decreaseShares(uint256,address)", +"9a4fd88d": "crowdsaleSucceeded()", +"9a4fdf66": "nextBro()", +"9a507d9b": "feeHoldingAddress()", +"9a508c8e": "finalizeUpgrade()", +"9a5199fc": "goodbye(uint256)", +"9a51a31a": "ToToken()", +"9a526b97": "setPreIco(address)", +"9a52b339": "checkInterest()", +"9a54596b": "Token(uint256,string,uint256,string,string,address)", +"9a5483e6": "addRole(uint256,address,uint256)", +"9a556a59": "getCooldown(uint256,uint16,uint8)", +"9a56193b": "getNumberOfDerivatives()", +"9a565169": "ETHERGOLD()", +"9a5666b8": "SVLightBallotBox(bytes32,uint64[2],bool[2])", +"9a571d9f": "isAlphaLower(bytes1)", +"9a573786": "getKeysManager()", +"9a581271": "cursedContract()", +"9a586d26": "MAX_SALE_VOLUME()", +"9a58c33d": "batchAssetTransfer(address,uint256[])", +"9a592415": "LostPayment(address,uint256)", +"9a593b9a": "startCrowdfund()", +"9a599e37": "burnfromAdmin(address,uint256)", +"9a5a2d4e": "lastTimePriceSet()", +"9a5a6483": "milliTokensSent()", +"9a5c0abc": "sellCards(uint256,uint256)", +"9a5dd735": "getRichest()", +"9a5e095c": "_buyTokensInCurrentStage(address,uint256,uint256)", +"9a5eb28f": "BUYER_CAP_LOW_USD()", +"9a5f17ee": "ccEndTime()", +"9a5f54b3": "getTetherInts(address,uint256)", +"9a6203e9": "getClosingObligation(bytes32)", +"9a628121": "random256()", +"9a62b752": "becomeTurtlemaster()", +"9a63157a": "addressBankPartners()", +"9a64a276": "findById(uint256)", +"9a650fd8": "isTerminated(address)", +"9a651f0b": "firstStageRefund()", +"9a6524f1": "TOKEN_CAP()", +"9a65ddec": "getAddressByName(string)", +"9a65ea26": "startMinting()", +"9a661e66": "getGratitudesSizeOf(address)", +"9a670bbc": "secondPreSaleEndDate()", +"9a68323c": "getRoundDetails()", +"9a684658": "_getBlockIndex(uint256,uint256)", +"9a6921e4": "getOpGas()", +"9a6a30a4": "reclaimEther(address)", +"9a6a68e9": "numberWinner()", +"9a6b32e1": "claim_reward(uint256,bytes32)", +"9a6b607f": "distributeTokensToMembers()", +"9a6bd379": "powerUp(uint256)", +"9a6ced6d": "bountyAgents(address)", +"9a6d3aaa": "bet(uint256,bool)", +"9a6d7cb8": "_canMateViaMarketplace(uint40,uint40)", +"9a6d9671": "combineMyGirls(uint256,uint256)", +"9a6dac14": "getLOTBalance(address,address)", +"9a6dfeff": "totalVotesForParty(uint256)", +"9a6e9914": "deleteArrayString(bytes32,uint256)", +"9a6ec511": "_buildId(address,uint256,bool)", +"9a6edad1": "Jupiter()", +"9a6f978d": "DIP()", +"9a6fb6df": "productionUnitTokenContractCount()", +"9a6fcbdd": "popElement()", +"9a6fe50c": "getLatestForContractAddress(address)", +"9a701075": "WITHDRAWAL_END()", +"9a702ad5": "AVAILABLE_JOINTTOKENS()", +"9a70855e": "exchangeFlag()", +"9a70eb1a": "onSaleAmount()", +"9a713233": "pre_end()", +"9a71825e": "sellKnowledge()", +"9a721302": "SUPPLY_FOR_BOOUNTY()", +"9a722769": "autoFinishTime()", +"9a727526": "getManagementInfo()", +"9a729d03": "token_bid(address,uint256)", +"9a72afb6": "setIsDisputeActive(bool)", +"9a730617": "init(address,uint256,uint256,uint256,uint256)", +"9a7394f5": "setData_34(string)", +"9a7443da": "stageUsdCap(uint16)", +"9a74adda": "moveAccountIn(address)", +"9a74c10c": "getDefaultReportingGasPrice()", +"9a751072": "applyChangeWalletAddress(address,address)", +"9a75aa06": "emitPublicCapabilityAdded(address,bytes4)", +"9a7614ee": "acceptEther(uint8)", +"9a7615a2": "burnOwner(uint256)", +"9a772bce": "TokenCappedCrowdsale(uint256,uint256,uint256)", +"9a7754d6": "StagedCrowdsale(uint256)", +"9a777d5d": "buyCoins()", +"9a7853cd": "postTX(address,string,uint256,uint256,uint256)", +"9a78afc6": "reduceDiv_()", +"9a78c066": "checkExistsInArray(address)", +"9a78c562": "setSellingTime(uint256,uint256)", +"9a797128": "withdrawed()", +"9a79f4a8": "testFailHeaderInsufficientFee()", +"9a7a3293": "NoFakeCoin()", +"9a7a7c11": "makeRoll(uint256)", +"9a7b5b7b": "tryClose()", +"9a7baa81": "EcomethToken()", +"9a7be471": "updateMinDeposit(uint256)", +"9a7d5211": "TheDigitalStandard()", +"9a7db5d9": "adminSendWorldBalance()", +"9a7e00ef": "acceptBet(uint64)", +"9a7e9e1f": "executeByAction()", +"9a7ee18c": "AccountIsNotFrozen(address)", +"9a7efb7f": "giftFor(address,address,uint256)", +"9a8061e8": "setLicenceShopPrice(bytes2,uint256)", +"9a80e52f": "updateTknPrice(uint256)", +"9a819e5e": "forceLiquidation()", +"9a82031e": "getRoundWinnigNumbers(uint32)", +"9a824f00": "transferTobucketTwoContract(address)", +"9a828a71": "oracalizeReading(uint256,string)", +"9a82a09a": "cancelled()", +"9a82c93c": "PRESALE_ENDTIMESTAMP()", +"9a82f890": "isOracle()", +"9a8318f4": "total_withdraw()", +"9a8335e0": "sendTo(string)", +"9a841413": "deleteDeployer(uint256)", +"9a84792b": "onReturned(address,uint256,uint256)", +"9a84d0c4": "addToken(address,string,string,string,uint8,bytes32,bytes32)", +"9a862c2d": "stage2StartTime()", +"9a863892": "NewProposal(uint256)", +"9a86acda": "getHeld(uint256)", +"9a86cd04": "shittyRand(uint256)", +"9a87ebb5": "changeAllowances(uint256,uint256)", +"9a880629": "dStartsNow()", +"9a880848": "attackhill(uint256)", +"9a881ab4": "payToFines(uint256)", +"9a882b7a": "createtoken(string,string,string,string,string)", +"9a891058": "keyIndex(bytes32)", +"9a89ad65": "within6Confirms(int256,int256)", +"9a8ae2fa": "changeLastFreeBlock(uint256)", +"9a8b3d8f": "getClientProjects(address)", +"9a8ca12c": "icoEnds()", +"9a8cea55": "testPush()", +"9a8cea82": "calculateDevFee(uint256)", +"9a8d10a3": "addData(uint256,bytes32)", +"9a8d36fa": "_openGameRange(uint256,uint256)", +"9a8d86c5": "CrowdSale_Finalize()", +"9a8e7b02": "ProposalClosed(uint256,uint8,uint256,uint256,bool,uint256,uint256)", +"9a8f09bd": "newKing(address)", +"9a8f139d": "getPercent1(address)", +"9a8f4dbf": "CancelSellOrder(uint32)", +"9a8f71f7": "saveData(bytes32,uint256)", +"9a8f72d1": "pruebacn123()", +"9a900e8c": "changeDepositWalletAddress(address)", +"9a903ca7": "allocateTokens(address,uint256,uint256,uint256)", +"9a9249a8": "_calculateCurrentPrice(uint256,uint256,uint256,uint256)", +"9a92b7e7": "EthVenturesFinal()", +"9a93e940": "testFailCreateNewRevisionNotUpdatable()", +"9a94ab9c": "addDelegate(address,string,address,uint256)", +"9a953408": "CHLORINETOKEN()", +"9a954af9": "getFreeToken()", +"9a956915": "icoInvestors(address)", +"9a95ca48": "presaleCapReached()", +"9a95d0e4": "DEEO()", +"9a960778": "SBK()", +"9a961416": "gameNext()", +"9a967e3b": "nextMember()", +"9a969768": "distributeProfits(uint256)", +"9a96f829": "devs()", +"9a97043b": "depositIdx(address)", +"9a98aa1e": "Scorpio(uint256,string,string)", +"9a98ac88": "GCSToken()", +"9a999359": "priceUpdatedTime()", +"9a99ebf4": "drainGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9a99f7e0": "isModOrCreator()", +"9a9a5cdb": "checkEthBalance(address)", +"9a9b1709": "PGGamePlatform()", +"9a9b5323": "AlforroCoin()", +"9a9bc131": "aidrop(address[])", +"9a9c29f6": "settle(uint256,uint256)", +"9a9c437d": "CryptFillToken()", +"9a9c9c53": "DepositToBankAccount()", +"9a9d0935": "totalBountySupply()", +"9a9d6515": "APPC()", +"9a9e3fd8": "successful()", +"9a9ed624": "ProfitLoaded(address,uint256)", +"9a9f1304": "drawMini()", +"9aa035dd": "dev_multisig()", +"9aa03cc6": "calculateExchangeFee(uint256)", +"9aa07ed7": "DietEthereum()", +"9aa0a50e": "btcDeposits(bytes32)", +"9aa0ff7b": "SALE_END()", +"9aa1001b": "withdrawRewardPool(address,uint256)", +"9aa10ebf": "Story()", +"9aa13f04": "contractStart()", +"9aa1dab7": "removeOversight(address)", +"9aa26f06": "registerBytes32(address,bytes)", +"9aa287d9": "setIco1Tokens(uint256)", +"9aa3a443": "acceptContribution(address)", +"9aa4a64e": "set_patient(uint256,uint256,string,string)", +"9aa57922": "Bhtd()", +"9aa5ee73": "finalizeConfirmationPeriod()", +"9aa5f467": "phase_3_token_price()", +"9aa615ee": "initCrowdsale(uint256,uint256,uint256)", +"9aa72320": "EthereumCare(uint256,string,uint8,string)", +"9aa727f6": "mult(uint256,uint256)", +"9aa72b71": "shareAmount(address,uint256,uint256,uint256)", +"9aa74525": "increaseWithoutCounterparty(bytes32,uint256)", +"9aa84b0b": "blockNode(address)", +"9aa92f0c": "previousRounds(uint256)", +"9aa93224": "sendOre(address,uint256)", +"9aa99dc8": "ownerPauseJackpot(bool)", +"9aa9f27b": "privateSell2Address()", +"9aaa38a6": "ChangeComission(uint256)", +"9aaa3eec": "updateNickname(address,string)", +"9aaa4696": "transferRaw(address,uint256)", +"9aaa5750": "addGoldTransaction(string,int256)", +"9aaa6b4d": "getAttackAddress()", +"9aaac864": "isInitialBlockTimestampSet()", +"9aab0c7a": "BitUPToken()", +"9aac9e91": "EndPreSale()", +"9aacb10a": "setNewCreator(address,uint256)", +"9aacb18c": "getSolution(uint256,uint256)", +"9aae3d0e": "maxWeiTier1()", +"9aaf442c": "applyCensorship(uint256)", +"9aaf5e05": "allocateTokensBeforeOffering(address,uint256)", +"9aaf9f08": "getVersion(bytes32)", +"9aafbff0": "addEntryIn24WeekPeriods(address,uint256,bool,uint256)", +"9ab060de": "milestoneBonus()", +"9ab06fcb": "setPayment(address)", +"9ab102ac": "isAffiliated(address)", +"9ab1416c": "accept_B_coupons(address,uint256)", +"9ab1b484": "distributeTokens()", +"9ab1d468": "privateSaleTransfer(address[],uint256[])", +"9ab253cc": "transferToICAPWithReference(string,uint256,string)", +"9ab2cf0d": "checkLockedBalance(address,uint256)", +"9ab3161d": "AnimalFactory(address,address)", +"9ab361a2": "unlockTimeLine()", +"9ab3a1fd": "setMvpExists(bool)", +"9ab3bfd7": "Tier_Basic_Registration()", +"9ab42287": "getAllAnimalsByAddress(address)", +"9ab422f3": "register(string,uint256,uint256,uint256,uint256,address[])", +"9ab448d9": "updateForkValues()", +"9ab4833e": "viewToken()", +"9ab4b22f": "releasedBalance()", +"9ab4d3a8": "checkInvestorReturns(address)", +"9ab567ba": "batchTransferForSingleValue(address[],uint256)", +"9ab61631": "_removeVesterManager(address)", +"9ab79905": "withDiscount(uint256,uint256)", +"9ab7d0b7": "setTheName(string)", +"9ab7f298": "add_user(bytes32,bytes32,int256)", +"9ab80f14": "BuyPrice()", +"9ab86b78": "getVoteHubDetails()", +"9ab90ba0": "realityID()", +"9ab95202": "babzBalanceOf(address)", +"9ab9ee73": "prPool()", +"9abb08ed": "migrateStateFromHost()", +"9abb2c16": "getAuctionsCountForUser(address)", +"9abb9e78": "powerDayEthPerPerson()", +"9abc03d2": "auctionsStartTime()", +"9abd3572": "claimDividend(uint256)", +"9abd7d50": "SelfDestructTime()", +"9abe275f": "closeChannel(address,bytes32,uint256,bytes32,bytes)", +"9abe3906": "closePreICO()", +"9abec159": "DISCOUNT_STAGE_THREE()", +"9abeddf8": "getLastUnionId(bytes32,uint8)", +"9abfba20": "DeleteBillModerator(address)", +"9ac08dfd": "receiveApproval(address,uint256,address,bytes1)", +"9ac17057": "execute(uint128,uint128)", +"9ac18b19": "REQUIRED_SIGNATURES()", +"9ac1f9a1": "add_commitment(uint256)", +"9ac22e5b": "test_oneTrueAndFalseAssert()", +"9ac233f3": "Monarchy()", +"9ac2ba20": "start_all()", +"9ac3317b": "grantMultiplePermissions(address,bytes32[])", +"9ac3fce6": "getBankReg(address)", +"9ac467f9": "getAllSigners(uint256)", +"9ac4fa49": "isAirdropStopped()", +"9ac50a62": "tenmatest()", +"9ac58d58": "get_len()", +"9ac785ba": "LockDate(uint256,uint256)", +"9ac8cd1b": "calcJackpotFee(uint256)", +"9ac97e84": "getNumDIDHolders()", +"9ac9940f": "assetOwner()", +"9aca6e2e": "calculate_total_shares(uint256,uint256)", +"9acab88c": "forwardFunds(uint256,address,address)", +"9acade7e": "testFailTransferDisableNotEnabled()", +"9acae9fc": "createChannel(bytes32,uint256,uint256)", +"9acb1506": "_createMeme(string,uint256,address)", +"9acb1ad4": "right37(uint256)", +"9acb3824": "getHorsesInStud()", +"9acba2af": "durationSeconds()", +"9acbdcab": "updateNoteButContent(uint64,uint16,bytes12)", +"9acd07b5": "closeChannel(uint8,uint256,bytes32[4])", +"9acd5e0e": "getGuestNotes(address,address)", +"9acdc0e3": "setCommunityTokensHolder(address)", +"9acf603b": "token_wallet_address()", +"9acf6ff4": "distributeRemaining()", +"9acfb1a8": "getCCH_edit_25()", +"9ad0a5ac": "addWhitelisted(address[],uint8[],uint256[])", +"9ad0c86c": "IouRootsToken(uint256,address,string,string,uint8)", +"9ad10d79": "PELOMemberIDMap(uint32)", +"9ad1b348": "getKNCRateRange()", +"9ad1c999": "setdevFeeAddress(address)", +"9ad25a68": "COSMOTokenERC20(uint256,string,string)", +"9ad26744": "removeAuthorizedAddressAtIndex(address,uint256)", +"9ad3a7ba": "renounceWhitelister()", +"9ad4eccf": "sentTokensToFounder()", +"9ad4f658": "CATToken(address,address,address,uint256,uint256)", +"9ad4f98e": "BlocksureInfo()", +"9ad55220": "getPrivate()", +"9ad5be7b": "setPlayValue(uint256)", +"9ad73f20": "runPluginSigned(address,uint40,uint40,uint128,uint256,uint8,bytes32,bytes32)", +"9ad74f81": "setAllowTransferGlobal(bool)", +"9ad7ebc3": "specialPoolsRate()", +"9ad89ac4": "settleCancel(bytes32[8],bytes)", +"9ad8b5b7": "addAttachmentToCollectible(uint256,uint256)", +"9ad900d6": "get_first_asset_document(bytes32)", +"9ada7a4c": "NumberTaken(uint256)", +"9adba14b": "logStr(string)", +"9adc15ef": "ShaBi()", +"9adcb5eb": "acceptBet(uint256,uint8)", +"9add2ad9": "MIN_ETH_TRANS()", +"9ade76f4": "VestingCreated(address,uint256,uint256)", +"9aded5dc": "deathData_a6()", +"9ae000c6": "WeedToken()", +"9ae0140c": "removeRoleCapability(uint8,address,bytes4)", +"9ae06672": "getDailyTimeLeft()", +"9ae066b0": "foundationDeposit()", +"9ae082a4": "PooShitToken()", +"9ae120dd": "closeZoneTeller(bytes2)", +"9ae13375": "groupDates(uint256)", +"9ae1a635": "Q500()", +"9ae1c4f8": "mintToken(uint256,int256)", +"9ae21121": "lastowner()", +"9ae2835c": "balanceOfIssuer(address)", +"9ae38844": "newMembers()", +"9ae466bf": "recipientETH()", +"9ae4e388": "ChangeClientTokenAccount(address,bool)", +"9ae51a1f": "getTeamlistSupportInTournament(uint256)", +"9ae568b1": "CreateSEEDS(address,uint256)", +"9ae5dc91": "setNTToken(address)", +"9ae6303d": "getHatchDurationByTimes()", +"9ae6309a": "currentMintableTokens()", +"9ae65eea": "addProposal(string,string,string,address)", +"9ae6892b": "transferOwnershipToken(address)", +"9ae6b186": "bZxTo0xV2Contract()", +"9ae6cac7": "SemainToken()", +"9ae6ef15": "getCumulativeIncome()", +"9ae7a909": "multiPartyTransfer(address[],uint256)", +"9ae8886a": "p()", +"9ae8ac3c": "TRADING_STARTED()", +"9ae8b6a1": "WMCToken()", +"9ae980a8": "setMinWager(uint256)", +"9ae9d383": "getnotice()", +"9ae9ff6a": "withdrawBeforeVoting(uint256)", +"9aea020b": "sellDeadline2()", +"9aea5485": "revealMove(uint256,uint8,uint8,string)", +"9aeb14a5": "sumHardCapPreICO()", +"9aeb5947": "payToCharm(string,uint256)", +"9aeb69a2": "withrawWin(address,uint256)", +"9aebdf7e": "updateJackpotLeft(uint256)", +"9aece83e": "set_manager(address)", +"9aecea62": "finalizeIPO()", +"9aeceb1d": "transferBallance()", +"9aecfb8a": "Etharea()", +"9aed58c6": "_destroyRobot(uint256)", +"9aed6ac9": "registerPresaleContributor(address,uint256)", +"9aed7c15": "sendBalanceERC20(address,uint256)", +"9aedabca": "valueOfShares()", +"9aedb1f1": "setVotingQuestions(string,string)", +"9aee046b": "callOracle(uint256,uint256)", +"9aeea806": "MARKET_CHANGE(address)", +"9aef0c6c": "privateSaleClosingTime()", +"9aef319f": "closeBlacklistSwitch()", +"9aef8999": "removeWhiteList(bytes32)", +"9aefff29": "totalSupplyPreSale()", +"9af003bd": "ChangeConversionRate(uint256,uint256)", +"9af041aa": "currentSaleStage()", +"9af1d35a": "fees()", +"9af1ef32": "offerHelp(address,address)", +"9af22f9c": "Shiner()", +"9af25d07": "releasedRoundCount()", +"9af26b78": "finishMinting(bool)", +"9af28b65": "NEXT_POT_FRAC_TOP()", +"9af2b100": "Permissions()", +"9af2cad2": "CryptoCoin()", +"9af32035": "addIcoPurchaseInfo(uint256,uint256)", +"9af3352d": "updateGuReferral(uint256,uint256,uint256)", +"9af3b527": "getOwnerOfCardsCheapestWager(address,address)", +"9af4afb3": "BlueOs()", +"9af4b5c8": "isOwedFreeReferralPack(address)", +"9af55773": "minSumICOStage6USD()", +"9af605cb": "__proxy(address,bytes,uint256)", +"9af6489d": "CheckTree(address)", +"9af64d80": "previousstageplayer1()", +"9af6549a": "beneficiaryWithdraw()", +"9af75b29": "tokensMintedForOperations()", +"9af88ebd": "_createOpinionSet()", +"9af8c4ba": "respond(uint256,address,bytes)", +"9af8f5de": "totalEDUSLeft()", +"9af917f4": "addRentable(bytes32,uint256,uint256,uint256,uint256)", +"9af95a4b": "dateBonus(uint256)", +"9af9f012": "wavesAgent()", +"9afa3dc7": "ADVISOR_STAKE_THREE()", +"9afb24ab": "setCLIForGas(uint256)", +"9afb93cb": "buyTicket(uint256,string)", +"9afbe49a": "tokenAmountOfPeriod(uint256,address)", +"9afcfba3": "getBurnRequestStatus(uint256)", +"9afd46a3": "closeTurnByHand(uint32)", +"9afd8b1d": "LiteBoxToken(address,string,string,uint256,uint256)", +"9afd9d78": "rollback()", +"9afe340f": "OasisToken()", +"9afebd18": "contract_finish()", +"9afec0ae": "ESOPLegalWrapperIPFSHash()", +"9aff301f": "FightClockAuction(address,uint256)", +"9affa42d": "increaseApprovalBatch(address[],uint256[])", +"9b012dec": "denyTransfer()", +"9b013aee": "getBidPrice(uint256)", +"9b01c7ac": "getFishIdByAddress(address)", +"9b02e258": "changelp12(address)", +"9b03a211": "transferPresaleTokens(address,uint256)", +"9b04564a": "proposeTeamWithdrawal(address)", +"9b046ed3": "getCharacterTraits(uint256)", +"9b05535f": "checkpointBlock()", +"9b059309": "GoshenCoinCash()", +"9b05934c": "calculateSecretHash(uint256,bool,bytes32)", +"9b0646f6": "wadmin_setContrAddr(address,address)", +"9b06e9f5": "seTJackpotPersent(uint256)", +"9b087b2d": "totalTransferred()", +"9b08a22f": "allowTransfer()", +"9b08ace1": "bonusSecondWeekPeriod()", +"9b08e8fc": "changeParent(address)", +"9b092f73": "safemul(uint256,uint256)", +"9b09768a": "maximumPoolPurchase()", +"9b09dfbd": "addArrayItem(address,string,string,address)", +"9b0a4764": "AkirasToken()", +"9b0a541e": "LogAllowedToAddress(address,bool)", +"9b0a5e67": "buy(string,uint256,uint256)", +"9b0aac15": "maxTokenSupplyPublicSale()", +"9b0ac9b0": "refundTime()", +"9b0b5bb2": "MIN_BANKROLL()", +"9b0b9c07": "acceptBankDraft()", +"9b0c1e51": "BONUS_MAX_DURATION()", +"9b0d1b2c": "getSpawningFor(address)", +"9b0ec5ae": "newSeed()", +"9b0ee7b7": "updateAirdropEndTime(uint256)", +"9b0f2510": "placeLong(address[2],uint256[8],uint8,bytes32[2])", +"9b0facaa": "existIdBeforeVersion(bytes32)", +"9b10394c": "IsOnSale(uint32)", +"9b10e9f7": "rawDetailsOf(bytes32,bytes32)", +"9b110f4b": "GayPersonalAdsToken(uint256,string,uint8,string)", +"9b11503e": "PUBLIC_SALE_START()", +"9b121e7c": "wethWithdraw(uint256)", +"9b12664f": "referralMinimum()", +"9b129181": "LTE()", +"9b12a4a1": "setCanDisburseMultipleTimes(bool)", +"9b132392": "createTrainer(string,uint16)", +"9b139504": "addPlayer(string,address,uint256,uint256)", +"9b13d209": "buyGuardianRune(uint256,uint256,uint256,uint256)", +"9b15ef2e": "END_PRESALE_TIMESTAMP()", +"9b16250a": "finishSign(uint256)", +"9b164ce3": "TestApprove()", +"9b173d57": "withdrawPolicy(uint256,uint256,uint256,address)", +"9b17b2dc": "checkWeather()", +"9b181e39": "_isAccepted(address,address)", +"9b18d79a": "one_ether_usd_price()", +"9b19251a": "whitelist(address)", +"9b19a92b": "year1LockAddress()", +"9b1a78c0": "ClaimGMT(address,uint256)", +"9b1a9b23": "destinationAddress80()", +"9b1ad792": "destroyToken(address,uint256)", +"9b1b0ab3": "buyingEscrowAddress()", +"9b1b615e": "pool(uint256,uint256)", +"9b1b8f62": "_gapOfSquareSum(uint256,uint256)", +"9b1bb323": "initContract(address,address,address)", +"9b1cbccc": "finishDistribution()", +"9b1cdad4": "postBounty(uint128,uint256,string,uint256,uint256,uint256[8])", +"9b1d767f": "fstTotalSupply()", +"9b1d8032": "clz32(uint32)", +"9b1d834c": "genPot_()", +"9b1dd3e5": "pullRipCord()", +"9b1e3825": "approveFundTransferToSupplier(address)", +"9b1f46cd": "allMilk()", +"9b1f70d1": "BET_RELEASE_DATE()", +"9b1f9e74": "_burn(uint256)", +"9b1fe0d4": "isApprovedInvestor(address)", +"9b21003b": "notPauseable()", +"9b2112c7": "ShopDexToken()", +"9b217f90": "getVestingTime(address,uint256)", +"9b21929a": "TOTAL_SUPPLY_BOTTOM_BOUND()", +"9b227a97": "ETH_TLD_LABEL()", +"9b22c05d": "test(int256)", +"9b234a9e": "tokensByWavesTx(string)", +"9b248798": "_InsufficientFunds(address,uint256,uint256)", +"9b24b3b0": "getRoot(uint256)", +"9b250f76": "clientInit()", +"9b252b7e": "t3Token()", +"9b256f46": "changeRoundBlock()", +"9b25e6f1": "ReservedTokensDistributed(address,uint8,uint256)", +"9b263eca": "providerContract()", +"9b267540": "unblockTokens(address,uint256)", +"9b26bae3": "AliciaToken(string,string,uint8,uint256)", +"9b276964": "STARTING_BAT()", +"9b27bf3a": "setWhiteListStatus(bool)", +"9b2843e2": "randomDNA(uint256)", +"9b285582": "ChangeIp(bytes32,bytes32)", +"9b28db50": "getWalletId(address,bytes32)", +"9b28f644": "setupFunctionalAddresses(address,address)", +"9b28f75a": "reclaimBalanceTokens()", +"9b29a295": "Payable(address,uint256)", +"9b29cb23": "getDailyPayment()", +"9b29f133": "userCancelActiveGame(uint256)", +"9b2a9d19": "origDev()", +"9b2aab1d": "frozenAccountOf(address)", +"9b2b0031": "updateDescriptiveInformation(address,string,string,string,string)", +"9b2b89d4": "UCAL(uint256,string,uint8,string)", +"9b2bdc20": "claimAllowanceOwnership()", +"9b2cb5d8": "minAmount()", +"9b2d2cbd": "orePrice()", +"9b2e5d32": "claimItems(uint256,uint256)", +"9b2ea4bd": "setAddress(string,address)", +"9b30a187": "nextWave()", +"9b30c7db": "changePortalAddress(address)", +"9b311b17": "averageMinerSalePrice()", +"9b322b7e": "HuandeToken(uint256,string,uint8,string)", +"9b3235bf": "getAbel()", +"9b33093f": "createNew(address,address,uint256)", +"9b332a91": "payDate()", +"9b33d7b3": "createAuction(uint256,uint256,uint256,uint256,bool)", +"9b33f055": "cancelSubscriptionOffer(uint256)", +"9b343342": "getRandomPrice(uint256)", +"9b343525": "highestContribution()", +"9b343e35": "createChildContract(string,uint256,uint256)", +"9b347f42": "teamVesting2Years()", +"9b34ae03": "winningOutcome()", +"9b350e12": "isEscaping(uint32)", +"9b351087": "cancelTreeSell(uint256)", +"9b3544f6": "postAssertion(uint128,uint256,uint256,uint256)", +"9b35928f": "RXBbitToken()", +"9b35b35a": "lockTs()", +"9b36057c": "registerGame(address)", +"9b3662bf": "currentParticipants()", +"9b367370": "confirmBlackFlag(uint256,bool)", +"9b36c3bc": "setMaxTotalAmount(uint256)", +"9b3725e8": "stageGenomes(uint8)", +"9b39caef": "COIN_PER_ETHER()", +"9b39f377": "getAnimalByIdVisibility(uint256)", +"9b39f9bf": "remainingTokensForSale()", +"9b3a300b": "SNK(uint256,string,string)", +"9b3a36c0": "calculateTokensWithBonus(uint256)", +"9b3b24ba": "VESTING_AMOUNT()", +"9b3ba79f": "maxAllocation()", +"9b3bc6fb": "checkERC20Balance(address)", +"9b3cbdf6": "CrowdSale(address)", +"9b3d17b1": "tokenSPUsdCentPrice()", +"9b3dfce0": "isPoDStarted()", +"9b3e28cc": "TokenReceivingEchoDemo(address)", +"9b3e9a48": "changeFreezeTime(uint256,bool)", +"9b3ee16e": "initialize(address,address,uint256,uint256,address,address,address,address)", +"9b3fd75d": "beginGame(uint256,address,address)", +"9b3fdf4c": "EVMSCRIPT_REGISTRY_APP()", +"9b409510": "creditAdvertiser(address)", +"9b415b2a": "erc20Payment(bytes32,uint256,address,address,bytes20,uint64)", +"9b41a9c5": "SedoPoWToken()", +"9b41b00b": "Sorus()", +"9b426e62": "assignTester(address)", +"9b44cb3c": "lastTrade()", +"9b46301e": "playersPerRound()", +"9b46461e": "getAnimalIdAgainstAddress(address)", +"9b46a71c": "setContractCap(uint256)", +"9b4778e4": "get_arbits_sale_open()", +"9b480435": "setPublicPlacementNum(uint256)", +"9b487f3f": "_forwardTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"9b49413c": "GetItemInfo(uint256)", +"9b4a6bdb": "test_spamVoting()", +"9b4a7fe9": "setCCH_edit_17(string)", +"9b4b2d77": "processOffchainTokenPurchase(address,uint256)", +"9b4b973d": "acceptSettlement(uint256,uint256)", +"9b4bb9f0": "schedulePriceUpdatesFixed(uint256[])", +"9b4c1290": "_getFishPrice(uint16,uint16,uint8,address)", +"9b4c1902": "getGovtApplicationByIndex(string,uint256)", +"9b4c7b70": "redemptionFundTotal()", +"9b4d54fc": "startCrowdsale2(address)", +"9b4d9ecc": "setGrowCost(uint256)", +"9b4e533e": "isLastWithdraw(address)", +"9b4f19c6": "getMonths()", +"9b4f1ecb": "initialCost()", +"9b504387": "controllerTransfer(address,address,uint256)", +"9b51e35a": "getSchemePermissions(address,address)", +"9b52cacc": "ListingCreated(bytes5,uint256,uint256,uint256,address)", +"9b539a17": "setEncryptKey(string)", +"9b53a396": "calcKicks(uint256)", +"9b53d87c": "isManagerEnabled(address)", +"9b550e55": "nextMineId()", +"9b563fa3": "save(uint256,string,string)", +"9b566564": "withdrawAirdrop(uint256,bytes)", +"9b56730d": "compoundInterest(uint256,uint256,uint256,uint256)", +"9b5696b0": "notCollectedAmountAfter24Hours()", +"9b56d6c9": "getCollateral(address)", +"9b5719a6": "setSalesContract(address)", +"9b58316a": "EBANKTOKEN()", +"9b58b463": "retire(address,address)", +"9b58e46b": "createProduct(string,bool,uint256)", +"9b5906e5": "getLifeCoin()", +"9b598caf": "pastProposalTimeRules()", +"9b59ffd7": "verifyGame(bool)", +"9b5a2e13": "setBadgeGiver(address)", +"9b5a66e6": "insertInPlace(uint8[],uint8)", +"9b5adea2": "setMinter()", +"9b5b094f": "ANMOToken()", +"9b5b4019": "EtherWild()", +"9b5b969f": "transferSub(address,uint256)", +"9b5c0b5e": "burnPerweiYearly()", +"9b5cc9f4": "transferOwner1(address)", +"9b5cfcdd": "account1Address()", +"9b5d2e78": "TPI()", +"9b5d7d0b": "addBalanceReplenishment(uint256,uint256,uint16,bytes32,uint256)", +"9b5d8e63": "Multiplexor()", +"9b5e5d8c": "newCustomFutureLottery(uint256,uint256,uint256,address,uint256)", +"9b5f8abb": "getAllSponsors()", +"9b5fde7d": "payOut(uint256,string)", +"9b601c4d": "getQueryPrice(string)", +"9b60a443": "payto1()", +"9b612a1b": "freezeStaking(address)", +"9b619d3b": "_deleteAllPackedRevisionBlockNumbers(bytes32)", +"9b61cf09": "MOBILITYCREDIT()", +"9b624e7b": "setRound(uint256)", +"9b632829": "refundAll(address)", +"9b6349a8": "TokenDCCB(uint256,string,string)", +"9b63d0f4": "core(bool)", +"9b63eb4b": "getTicketsByGameIndex(uint256)", +"9b666d7a": "cos(int256)", +"9b6687ac": "getNumPositionProduct(bytes32,uint8,string)", +"9b671604": "proposeVoter(bytes32)", +"9b678bfc": "calcRates()", +"9b67bfa3": "fiatValue(uint256)", +"9b6806c9": "getCompanyShareholders(uint256)", +"9b68c992": "SubmitSecretBet(bytes32)", +"9b69608f": "read_dgx_inventory_balance_ng()", +"9b69de79": "transferLockAmount(address,uint256)", +"9b6a2b2f": "spriteOwningHistory(address,uint256)", +"9b6a6709": "presaleMint(address,uint256)", +"9b6aa1fa": "TransferData(address,address,uint256,bytes)", +"9b6b838c": "reinvestment_share()", +"9b6c5283": "createPool(string,uint256,uint256)", +"9b6c56ec": "debt(address)", +"9b6d86d6": "adminSetRegistrationDisabled(bool)", +"9b6d96c5": "create(int256,int256,int256)", +"9b6dbc8a": "closeShop()", +"9b6e407d": "setPercentUnfrozenAfterBuyPerPeriod(uint256)", +"9b6ec1cb": "HerbsChainToken()", +"9b7143eb": "creditsClawbacked()", +"9b71a7c9": "addAddressToRole(address,string)", +"9b71dec3": "getVineyardCount(string,address)", +"9b727e80": "CNiteToken()", +"9b73a5d9": "hasTwoYearWithdraw()", +"9b743cbd": "allocated18Months()", +"9b7502c3": "getLastAuditExtradata(address)", +"9b769ce3": "JsCoin()", +"9b76a25c": "transferFee(address,address,address,uint256)", +"9b76c1de": "team3LockEndTime()", +"9b76fbd6": "_recordPlatformFee(uint256)", +"9b771346": "ImportTestB()", +"9b772524": "partner1_signed()", +"9b7750f1": "addBranchInEpisode(uint256,uint256)", +"9b77c21a": "getClaimStatus()", +"9b77d69f": "addTagByModuleType(uint8,bytes32[])", +"9b7812ff": "add_quote(bytes32,bytes32,uint256,uint256)", +"9b781ce4": "updateExcludedAddress(address,address,bool)", +"9b782070": "TSSECOND()", +"9b786d68": "profitSharing(address,string)", +"9b788752": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,bool)", +"9b78cf9c": "medalFreeze(address,uint256,uint256)", +"9b7a67bd": "getAccountPar(uint256)", +"9b7b59db": "setdrawtoken(address)", +"9b7c08b8": "ERCToken(uint256)", +"9b7c288f": "lastDeploy(address)", +"9b7c5517": "committ_payment(uint256,uint256)", +"9b7d83e7": "porcoToken()", +"9b7defe3": "returnTokensFromHoldAdvisorsAddress(uint256)", +"9b7e5531": "ownershipDeadline()", +"9b7edbdb": "buyLimit(uint256)", +"9b7eeb12": "setScrapMinEndPrice(uint256)", +"9b7ef38c": "BatchUtils()", +"9b7efac7": "subUInt(uint256,uint256)", +"9b7f1687": "iUventaCoin()", +"9b7faaf0": "lockOver()", +"9b80c9e8": "payMoneytoOwner()", +"9b815057": "changeMakerDAO(address)", +"9b818ace": "SLChainToken(uint256,string,uint8,string)", +"9b819d38": "getNowTime()", +"9b81c8d3": "updateMeterValue(uint256)", +"9b82171f": "houseTotal()", +"9b828609": "reclaimContributionWithInterest(address)", +"9b82abdb": "LogBought(address,uint256,uint256,uint128)", +"9b831dcb": "RateUpdate(uint256)", +"9b8342d4": "getPlayerDividendByRound(address,uint256,uint256)", +"9b836d1a": "_payout(address,uint256)", +"9b83d121": "transferFokenBonus(uint256)", +"9b8430eb": "distributeRevenue(uint256,uint8,uint8)", +"9b850322": "escrowDecision(uint256,uint256)", +"9b855a85": "releaseEQUITokens(bytes32,uint8,bytes32,bytes32)", +"9b85b9c9": "createDrug(bytes32,uint256)", +"9b85bc85": "CocacolaToken()", +"9b865999": "InitialOwnerAddress()", +"9b86975d": "ANemoiSaleContract()", +"9b880fee": "registerVestingSchedule(address,uint256,uint256,uint256,uint256)", +"9b8831df": "hasArtist(bytes32)", +"9b8906ae": "saleEnded()", +"9b894703": "maxTickets()", +"9b8a74f0": "cancelOffer(address)", +"9b8abe0b": "thousandtimes()", +"9b8b03a2": "strongHands(address)", +"9b8b365d": "deathData_a5()", +"9b8b6037": "findModuleVersionByAddress(address)", +"9b8b7160": "setPreFundingtokens(uint256)", +"9b8d1dd4": "CARDANOCLASSIC()", +"9b8d3064": "setFinance(address)", +"9b8d34d9": "addAgreement(bytes32,uint256,address[])", +"9b8da66c": "getEthFundDeposit()", +"9b8eb288": "setPercentWeiDividend(uint256)", +"9b8eb7b4": "getSocialAccountByIndex(uint256)", +"9b8ebc54": "checkVoter(address)", +"9b8f2493": "updateBurnBal(uint256)", +"9b8f5acf": "CyberChainToken()", +"9b8f5d4a": "setTilePosition(uint16,uint8,uint8)", +"9b8f7113": "dateSoftCapWasReached()", +"9b8fdf1b": "cancelExpectedPayment(bytes8)", +"9b901d00": "_createTeamSale(uint256[9],uint256,uint256,uint256,address)", +"9b9073e4": "allocationPool()", +"9b9111ee": "commonConfigure(address,address)", +"9b914973": "prebuyPortionTotal()", +"9b91f9be": "Gol()", +"9b922d97": "setCoinsaleactive(bool)", +"9b9279ec": "StartRefound(bool)", +"9b92adf3": "EnableTokenMinting(bool)", +"9b93aaf4": "addNewLoggerPermission(address,address)", +"9b945097": "getRandom(address,uint256,uint64)", +"9b9545eb": "Rython()", +"9b9692f6": "TokensDistribution(address,uint256)", +"9b96c4ba": "AdvisorPart()", +"9b96eece": "getBalanceOf(address)", +"9b973803": "transfer10(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9b97cee5": "getWorkCount()", +"9b985b30": "bountyMaxTokens()", +"9b986550": "getAllForPubKey(bytes32)", +"9b98a94b": "getLockTokens(address)", +"9b991d9b": "votingInfoTeam()", +"9b9958af": "getAllCardsClaimed()", +"9b99a8e2": "reserveTokenCount()", +"9b9a09a6": "HackContract()", +"9b9a236b": "SuperToken()", +"9b9a47e3": "getlastDividendPoints(address)", +"9b9b0b87": "mainICOFourthWeekEndTime()", +"9b9ba572": "oraclize_query(string,string[3])", +"9b9be9cb": "mainSale_TokesSold()", +"9b9bedf8": "getContractCreated()", +"9b9cc2ca": "getPrivateSaleAgentAddresses()", +"9b9ce1bc": "sendTokensBulk(address[],uint256[],uint256[])", +"9b9d0364": "_setFeeStructure(uint256,uint256,uint256)", +"9b9d2cc8": "RESERVED_TOKENS_ADVISORS()", +"9b9e07e1": "TeamtokenRelease3()", +"9ba11c0a": "coinunits()", +"9ba1a7d8": "preValidation()", +"9ba30c3b": "Healthcoin()", +"9ba319bf": "detangleQuanticCloudIOTData()", +"9ba33ab3": "refundLeftOverWei(uint256,uint256)", +"9ba3c2e0": "advisersAddr()", +"9ba3d8cf": "updatePromoFishCommission(uint256)", +"9ba4d4ee": "investedETH()", +"9ba4dbc2": "USDBTC(uint256)", +"9ba4eb5f": "SPINFundDeposit()", +"9ba58333": "AspirationCoin()", +"9ba5b4e9": "getEventHashes(bytes32[])", +"9ba65fff": "addNewcard(uint256)", +"9ba73d43": "deregisterCustomer(address,address)", +"9ba89492": "getNumAccounts()", +"9ba896cc": "refundTokensSale(address[])", +"9ba8975f": "changeFundsKeeper(address)", +"9ba8e37d": "withdrawFromToken(address,uint256)", +"9baa504e": "unrestrictedMint(address,uint256,uint128)", +"9bab0da3": "EVACASH()", +"9bab3988": "DongriToken(uint256)", +"9babdad6": "removeShareholder(address)", +"9bac6e8d": "currentMinter()", +"9bac8602": "testFailAddBalanceAboveOverflow()", +"9baca66b": "getElementOfWinnerTicketList(uint256)", +"9bacc97c": "specialAddress(address)", +"9bacf1ed": "createSynthesizingAuction(uint256,uint256)", +"9baddd98": "sendBountySupplyToken(address,uint256)", +"9bae56da": "getEstimatedRound(uint256)", +"9baeac78": "TOKEN_SUPPLY_PRESALE_LIMIT()", +"9baf7ffb": "etherToSendBankroll()", +"9bafd01a": "freeStorage(address)", +"9bafd22b": "DocumentCertoChainContract()", +"9bb00ae3": "ledgerCount()", +"9bb01b5f": "ElcoinDb(address)", +"9bb04895": "nominalValue()", +"9bb0e4df": "getUint(int256,bytes32,string)", +"9bb0f599": "hasToken(address)", +"9bb186d2": "MatchingMarket(uint64)", +"9bb192fd": "getVotes(uint32)", +"9bb1cfd6": "hasAvailableRewards()", +"9bb1dbea": "commonWithdraw(uint256)", +"9bb1fd66": "force_stop()", +"9bb2ea5a": "setMaxValidators(uint256)", +"9bb32be3": "challengeFinality(uint256)", +"9bb3bcaa": "setArrIntField1(int256[])", +"9bb5239a": "CheckPrize(address,uint256)", +"9bb5c96c": "isContributorsRewarded()", +"9bb5ce30": "participationFee()", +"9bb5d450": "getMonsterCount()", +"9bb5f901": "UCToken()", +"9bb603bb": "create(string,string,uint8,string,bool)", +"9bb639a8": "changeTokenCostInEth(uint256)", +"9bb6831f": "millCap()", +"9bb74bbd": "tokensSoldToInvestors()", +"9bb848e7": "isRunningIco(uint256)", +"9bb84cd0": "addSellTokensRequest(address,string,uint256,uint256)", +"9bb8b563": "POKCC()", +"9bb8ec22": "SmartAdvancedCoin(uint256,string,string)", +"9bb8fde4": "startTimeStage1()", +"9bb90467": "initTokenAndBrackets()", +"9bbba3a8": "getTokensOnSale(address)", +"9bbc156b": "AllLock()", +"9bbc574a": "closeUser(address)", +"9bbdb25a": "getPartners(address,uint256)", +"9bbeafc1": "setMarketFees(bytes32,uint16,uint16,uint16,uint16,bool)", +"9bbedbbc": "deliver(address,address,uint256)", +"9bbfa582": "Lambotoken()", +"9bc0fd25": "setBlocklancerContractHolder(address)", +"9bc13360": "standardrate()", +"9bc2bc71": "createEvent(string)", +"9bc30adb": "upgradeBalance(address,uint256)", +"9bc3135b": "buyoutDividendPercentage()", +"9bc33b8a": "MediatedTransactions_TransactionHeight()", +"9bc52a39": "logClassic(string,uint8)", +"9bc53cec": "Moontrail()", +"9bc5689d": "NUM_OF_CHOICES()", +"9bc61d06": "MeetupContract(string,string,uint256,uint256,uint256)", +"9bc64cc8": "saiTap()", +"9bc6b571": "ChangeExtension(uint256,bool)", +"9bc6d815": "BestCountTokens(uint256)", +"9bc6f0ec": "createChildDeposits(uint256)", +"9bc706e8": "publishedCountOf(address)", +"9bc72d5f": "worstCaseRateFactorInBps()", +"9bc742fe": "setStepOneLockEndTime(uint256)", +"9bc85302": "burnUserTokens(address)", +"9bc896f9": "orderCancel(uint256)", +"9bc8e9ee": "setMintingDec(uint256)", +"9bca3596": "Ubecoin()", +"9bca8a1e": "setTableTypesSize(uint256)", +"9bcb8dff": "BallzToken()", +"9bcc2b27": "ctrlZee()", +"9bcc9123": "rejectNegotiation(address)", +"9bccfe49": "actionsCount()", +"9bcdd9e8": "forgetCube(address)", +"9bce51e3": "sendCrowdsaleTokens(address,address,uint256)", +"9bcef169": "getLeaderboard(string)", +"9bcf497b": "setUserPaybackPool(address)", +"9bcf7352": "setEnableInternalLock(bool)", +"9bcf8ca2": "addresses(uint256,uint256,uint256)", +"9bcf9ea2": "PIVOT()", +"9bcfcee8": "minting(address,address,address,address)", +"9bd03774": "TokenContractImpl(uint256,uint8,address,address)", +"9bd0a967": "isEndsWithHpb(string)", +"9bd1ff8b": "tokenFallback(address,address,uint256,bytes,string,uint256)", +"9bd26234": "contrubutedAmount(address)", +"9bd2af03": "trent()", +"9bd2d912": "ZipflaxToken()", +"9bd33457": "totalOnDeposit()", +"9bd3651b": "Authenticate(uint256,address,uint256)", +"9bd41f7c": "createToken(bytes32,string,string,string,string,string)", +"9bd4d455": "addMember(string,address,string,uint256,uint256)", +"9bd4e13e": "bettor_reward(address)", +"9bd4e925": "CROWDSALE_ETH_IN_WEI_FUND_MIN()", +"9bd5679e": "getCurrentICOExpirationTime()", +"9bd6030c": "nbagame()", +"9bd658d9": "whoOwnsYou()", +"9bd69528": "addToKyc(address)", +"9bd695b0": "hasRequiredSignaturesToValidate()", +"9bd6a4de": "initPublicityAddr()", +"9bd702e4": "sellCrab(uint256,uint256)", +"9bd7d688": "checkAncestors(uint32,address,uint64,uint64,uint64)", +"9bd80dcf": "calculateMasked(uint256,uint256)", +"9bd8e081": "gunsFundDeposit()", +"9bd90aae": "maxTokensToCreate()", +"9bd99195": "multiAccessChangeOwner(address,address)", +"9bd9bbc6": "send(address,uint256,bytes)", +"9bda8678": "externalDeposit(address,uint256)", +"9bdbb4c7": "market_WithdrawBid(uint256)", +"9bdc6523": "setUserWhiteListContract(address,bool)", +"9bdce046": "DICE_HIGHER()", +"9bdd070d": "withdrawTokenToDefault(address,address,uint256,uint256,uint256,address)", +"9bdd7cdb": "forceRelease(bytes32)", +"9bde88f0": "getcan(address)", +"9bdf5a7c": "Zenix()", +"9bdf6f62": "soldTokenCount()", +"9bdff8eb": "oracleB()", +"9be07908": "left79(uint256)", +"9be08a4e": "NCPPrivate()", +"9be0f105": "OxChainNetwork()", +"9be0fc75": "toggleDrop()", +"9be1eab7": "setContractStakeToken(address,address)", +"9be1fcee": "BankOwner_DisableConnectBankAccountToNewOwnerAddress()", +"9be2385a": "depositOldTokens(address,uint256,address)", +"9be2faed": "isSchemeRegistered(address,address)", +"9be2ff64": "setAllowPlayer(bool)", +"9be3b286": "endOffering()", +"9be4d15e": "split(bytes32,uint8,uint256)", +"9be50784": "drawBenz()", +"9be56c67": "support(uint256,uint256)", +"9be572f6": "getTotalUsers()", +"9be5ad78": "_saleState()", +"9be5b3b1": "MetadollarOption()", +"9be6178e": "acceptBet(bytes16,bytes16,bytes16,bool)", +"9be6d404": "destructSelf(address)", +"9be7f1dd": "buyerfee()", +"9be88a01": "_rotateLeft(bytes32)", +"9be8a212": "FoundersFund()", +"9be95517": "_createRandomMonster(uint32)", +"9bea62ad": "restore(uint256)", +"9beaa524": "getActivityName(uint256,uint256)", +"9bead36f": "resolveEntityAddressAndOwner(address)", +"9beb6c6b": "_saleFinalized()", +"9bed31e4": "setParameters(uint32,uint256,address)", +"9bedb2c7": "MyReferrals()", +"9bee3365": "sayYes()", +"9bee757b": "requestExecution(bytes,uint256)", +"9beebe20": "setTrustedTransfer(bool)", +"9beef73f": "stageDistributed()", +"9bef0c47": "getUserPictureByWallet(address)", +"9befa8b4": "DisqusBot()", +"9befd45a": "payFee(bytes32)", +"9bf0093c": "LIV()", +"9bf037e5": "BaseCrowdsale(address,address,address,uint256,uint256,uint256,uint256)", +"9bf070b5": "ethRaisedWithoutCompany()", +"9bf08a06": "joinArena()", +"9bf1c389": "stage_1_add()", +"9bf1f148": "requestAudit(address,bytes32,uint256)", +"9bf22189": "Validated(string)", +"9bf2926d": "Proposal(address,uint256,string)", +"9bf2ab46": "preSalesEndDate()", +"9bf30bac": "handleIncomingPayment(address,uint256)", +"9bf34e30": "ecrecover3(bytes32,uint8,bytes32,bytes32)", +"9bf39dce": "contributionTime()", +"9bf4c5c5": "destroyedNinjas()", +"9bf677e4": "phase_1_rate()", +"9bf68006": "testControlSetNotTransferableNotOwner()", +"9bf6b0a8": "withdrawForFiveStep()", +"9bf6deaf": "ChangeEmissionRateCoefficient(uint8)", +"9bf6eb60": "mintTokensExternal(address,uint256)", +"9bf74ae0": "periodICOStage1()", +"9bf7ef63": "verifyMultiSig(address,bytes32,bytes,uint256,uint256)", +"9bf865d0": "numberToAddress(uint256,address)", +"9bf8df7d": "recoverLost(address,address)", +"9bf97bd9": "get_deployed_forwarders()", +"9bf97e74": "BNN()", +"9bf9cd26": "PreSaleSold()", +"9bfa1f33": "ORDER_FILL(address,address,address,bool,uint256,uint256,uint256)", +"9bfa835b": "privateMin()", +"9bfa882e": "updateAddress(address,address)", +"9bfaa24b": "startTradable(bool)", +"9bfafdc2": "ERC223Transfer(address,address,uint256,bytes)", +"9bfb9717": "additional_incentive()", +"9bfb9752": "setTime1(address,uint256)", +"9bfba3c6": "ico2cap()", +"9bfc80fc": "TopSciFiVoter()", +"9bfd8d61": "totalStaked(address)", +"9bfdbf8a": "getOrganizerRegistrationStatus(uint256)", +"9bfdce3e": "deal(address,uint8)", +"9bfdd1bb": "setSchema(string,bytes32,string,uint256,uint256,uint256,uint256)", +"9bfdf68d": "requestLoans(uint256[],bytes32[])", +"9bfe171a": "STASToken()", +"9bfe7bd5": "getNumOrdersByOwner()", +"9bfeda53": "_getRewardTokenAmount()", +"9bff209d": "softSub(uint256,uint256)", +"9bff662c": "notify_payment_acceptance_request(uint256)", +"9c001bcc": "TOKEN_SHARE_OF_BOUNTY()", +"9c0051db": "setProfitTransferTimeSpan(uint256)", +"9c007973": "resolveDispute(bytes16,address,address,uint256,uint256,uint8)", +"9c01e1f5": "addNFToken(address,uint256)", +"9c01fdaa": "PimmelToken()", +"9c03b04f": "testItStoresAValue()", +"9c03f17f": "sencToken()", +"9c03facb": "sold(uint256)", +"9c041ebd": "create(address,address,address)", +"9c043783": "eachUnfreezeValue()", +"9c049dd0": "hydroStakingMinimum()", +"9c04e4e7": "pre_sale_end()", +"9c04ece9": "lastBlock_f7()", +"9c05093b": "setTeamTokensWallet(address)", +"9c05ba60": "getIndexName(bytes32)", +"9c066eab": "seeRaised()", +"9c0770fe": "ZIL()", +"9c07b2cd": "resetTotalSales()", +"9c080f5d": "showBalance(address)", +"9c08606c": "lockedDays()", +"9c08d549": "startICO(uint256,uint256)", +"9c0953cf": "setProducer(address,address,bool)", +"9c09a64c": "claimSMR()", +"9c09b32c": "ProcessTransaction(uint256)", +"9c09bb4e": "getBestMatch()", +"9c09c3bb": "attestForIdentity(address)", +"9c09c7c6": "addGuessWithRefund(int256)", +"9c09c835": "enableWhitelist(address[])", +"9c09f869": "PixelSelling()", +"9c0a4bbc": "AlwaysFail()", +"9c0b7c08": "terminateFunding()", +"9c0baa2d": "_getRate(uint256)", +"9c0bd57c": "withdrawDragons()", +"9c0c2238": "withDrawEther()", +"9c0cc30c": "getAllArtworks()", +"9c0d010e": "_checkOpenGame()", +"9c0df4f2": "blessings()", +"9c0e3f7a": "write(uint256,uint256)", +"9c0e7d66": "leftoverTokensBuffer()", +"9c0ee65b": "Hold(address,uint256,address,address,address)", +"9c0f16ed": "tokensOfTeamAndAdvisors()", +"9c0fc1e4": "AIC()", +"9c117f0f": "get1(uint256)", +"9c118238": "withdrawBalanceFromServer(address,uint256,bytes)", +"9c1193ea": "GreeterA(bytes)", +"9c121aff": "LogClaim(bytes32,address,uint256)", +"9c121b6d": "meltHorseShoe(uint256,address)", +"9c1230c1": "amount_stages()", +"9c128493": "Lol1CoinCoin()", +"9c12ca21": "setGroupBounty(address[],uint256)", +"9c12deab": "isVendor(address,address)", +"9c135572": "documentsIds()", +"9c147688": "bulkMint(uint32[],address[],uint256[])", +"9c14c77b": "getBuyTime(uint256)", +"9c14e25b": "DonQuixoteToken(address)", +"9c1500f0": "registerMany(address,uint256,int256,uint256,bytes,address,bytes)", +"9c15b047": "getInitialOwners()", +"9c15b04b": "showDividendsAvailable()", +"9c15be0b": "left65(uint256)", +"9c161d1a": "setNextImagePart(address[16],uint256,uint16,uint16,uint16,uint256[])", +"9c16667c": "getAnswer()", +"9c166d31": "LukaToken()", +"9c172f87": "EthVentures4()", +"9c1747e5": "addRewardPercentage(uint256)", +"9c1817e4": "Saddle_Limit()", +"9c19aa9f": "setOrderSupportCancel(uint256)", +"9c19f170": "TotalRaised(uint256)", +"9c1a056f": "visitLength()", +"9c1a32fe": "setTake(uint256)", +"9c1b9408": "preMultisigEther()", +"9c1b987c": "setComment(uint256,bytes3,string)", +"9c1b9c1b": "assignTokens(address,uint256,uint256,uint256,uint256)", +"9c1cb7cf": "PaymentStatusBlockNum(address)", +"9c1d8fa2": "GPN(uint256,string,string,address)", +"9c1d9790": "sendBatchCS(address[],uint256[])", +"9c1e03a0": "crowdsale()", +"9c1f020a": "sendCrowdsaleTokens(address,uint256)", +"9c1f332f": "returnLastBuyerIndex()", +"9c1f6133": "registerVIP()", +"9c1fcc4c": "logicAddress()", +"9c2062ad": "RISK()", +"9c2108eb": "transferGoldFromHotWallet(address,uint256,string)", +"9c211755": "RequstOwnership()", +"9c225b33": "teamAndAdvisorsAllocations(address)", +"9c2412a2": "monarchyStartReward()", +"9c24654c": "presalestartTime()", +"9c24ea40": "setLinkToken(address)", +"9c24eedb": "upvote(uint256,int256)", +"9c24fc55": "presaleBalances(address)", +"9c250dd8": "etherTransfer(address,uint256)", +"9c253011": "print(int256,address)", +"9c255312": "addressETHDeposit()", +"9c25d975": "packLocation(uint64,uint64,uint64)", +"9c2622e2": "addOne(address)", +"9c2625fd": "TEAM_TOKENS0()", +"9c269c34": "TBL4Token()", +"9c27a6f4": "buyTicket(uint8,uint16[],address)", +"9c27ea08": "setNextLotteryTTMTokenId5(uint64)", +"9c27ff9b": "calculateFEE2Distribute()", +"9c286837": "devCut()", +"9c293792": "release_all(address)", +"9c2a7b89": "setTokenInfoHeritor(address,address,uint256)", +"9c2b1a95": "getManagementFee()", +"9c2c1b2b": "addDelegateSigned(address,uint8,bytes32,bytes32,bytes32,address,uint256)", +"9c2cdd5a": "MULTISIG_TKN()", +"9c2e29c6": "LocalLambosEscrows()", +"9c2ea2ec": "setEthExRate(uint256)", +"9c2f0067": "EPIToken(address,uint256)", +"9c2f4092": "DEVP()", +"9c2f5f8f": "closeCurrentGame(uint256)", +"9c2f7a43": "getCrystal(uint256)", +"9c2f88fa": "CoinBundleToken()", +"9c2fa55d": "buyFirst()", +"9c30936f": "removeCertificationDocumentFromSelf(bytes32)", +"9c30ad7e": "isPending()", +"9c31200b": "oraclize_query(uint256,string,bytes[1],uint256)", +"9c315684": "periodPreICOStage()", +"9c31c5ec": "setItemsContract(address)", +"9c323436": "getFixedEndTime(uint256)", +"9c33b66e": "checkAvailableTokens(address,uint256)", +"9c34a15f": "c(uint256,uint256)", +"9c34ae54": "setICODates(uint256,uint256,uint256,uint256,uint256,uint256)", +"9c351fec": "SNDToken(address,string,string,uint256,uint256)", +"9c36e141": "defaultTimeLock()", +"9c3723df": "windowBonusStep2()", +"9c38019b": "verifyProofOfMembershipInternal(uint256,bytes32[],bytes32,bytes32)", +"9c3807e6": "STARTING_STRIPPERS()", +"9c388d30": "LogAccountAmount(address,uint256)", +"9c392e5c": "VirginMToken()", +"9c39857b": "setTeamAdd(address)", +"9c3a39a2": "getPaymentData(uint256)", +"9c3b936f": "killBalance(uint256)", +"9c3b9aa3": "MundoGamerToken(uint256,string,uint8,string)", +"9c3bcd65": "deliverPresaleFuelBalance(address,uint256)", +"9c3c7b2c": "transferredPresale()", +"9c3c97a1": "prohibitFreeze()", +"9c3db309": "getCurrentMiningDifficulty()", +"9c3e0f3f": "icoStarts()", +"9c3ed1ae": "unitsUserCanBuyLimit()", +"9c3f1e90": "orders(bytes32)", +"9c3f7ca2": "acceptOffer(uint256,uint256,bytes32)", +"9c3fe721": "finishedIssuerMinting()", +"9c402944": "sendAVR(address,uint256)", +"9c40478c": "canClaimAuditReward(address,uint256)", +"9c4063ce": "WALLET_T8EX_TEAM()", +"9c409e4d": "VoteOnTransfer(address)", +"9c40ea5c": "setGRForGas(uint256)", +"9c41adfd": "withdrawDepositById(uint256)", +"9c41e591": "XGoldToken()", +"9c421665": "transferToMe(address,uint256)", +"9c4261b9": "VOLUME_EXTRA_BONUS_CONDITION()", +"9c43d950": "registration(uint256,uint256,uint256)", +"9c43eb54": "snapshotTimestamp()", +"9c44f090": "AlquilarBici()", +"9c45510d": "FootBallCoin()", +"9c472c70": "rateSecondWeek()", +"9c473bb2": "setTokenName(address,bytes32)", +"9c4780d8": "currentRoundNumber()", +"9c481c9e": "crowdsaleContractAddress()", +"9c489edb": "setNewExchangeAddress(address)", +"9c492b9e": "raisedFromFiat()", +"9c499b53": "getFeesAvailableForWithdraw()", +"9c4abe06": "getEthOfferPrice(uint256)", +"9c4ae2d0": "deploy(bytes,uint256)", +"9c4b653d": "sendFundsToMsgSender(uint256)", +"9c4b9c8a": "getFreezeTimestamp(address)", +"9c4baf27": "Skywalker(address,address)", +"9c4bcaa5": "setMinBuyPrivate()", +"9c4c557c": "startSale(bool)", +"9c4ca8cb": "IChain(address,uint256,uint256)", +"9c4de81f": "havven()", +"9c4e0f52": "setMaxTokenSellAmount(uint256)", +"9c4e3788": "earlyInitProjectSupply()", +"9c4eda5c": "balanceA()", +"9c4fc41a": "getWineCount()", +"9c4fc563": "_findParticipant(uint256)", +"9c50450f": "amountToCreate()", +"9c50e7ca": "tgeDateStart()", +"9c513bdd": "BwinCoin()", +"9c526380": "getUserTotalCredit(address,address)", +"9c52a7f1": "deny(address)", +"9c536640": "confSetupMixer(bytes32,uint256,uint256,uint256,uint256)", +"9c544e72": "removePending(address,uint256)", +"9c54b91f": "setApprovalCount(uint256)", +"9c54df64": "addAdmins(address[])", +"9c55519b": "optionsConversionDeadline()", +"9c561a42": "Wallet4()", +"9c566cad": "cards_start(uint256)", +"9c5686db": "isERC821()", +"9c579839": "QUOTE()", +"9c57d584": "verifyFingerprint(uint256,bytes,int256)", +"9c58b753": "getWriterId(bytes32)", +"9c58be11": "claimMyToken()", +"9c58c509": "buyIcoToken2(uint256)", +"9c591412": "lifeReserveWallet()", +"9c5945d9": "revealHiddenPosition(uint32,int64[],bytes32,uint64,bytes16)", +"9c5b33ae": "wb()", +"9c5bbc89": "setApprovedAddress(address)", +"9c5c53b3": "lockBonusTokensClaim(uint256)", +"9c5d5e98": "JACKPOT_WINNER()", +"9c5d7030": "reimburseGas(uint256,address,uint256,uint256)", +"9c5d7291": "PhoneCoin()", +"9c5de58b": "startRC()", +"9c5e078f": "createBBODocument(bytes32)", +"9c5e108c": "_getFreezeTime(uint8)", +"9c5e9023": "confirmBeneficiary()", +"9c5fafa4": "balanceOfComisionHold(address)", +"9c6034a7": "sendIfNotForked()", +"9c60839e": "mintBonusTokensForGames(int256,uint256)", +"9c623683": "setWinner(uint256,address)", +"9c62622d": "IHate0xBTC(string)", +"9c632c77": "getServiceTokenAddress()", +"9c6393f2": "TokensWithdrawn(uint256)", +"9c639db4": "UltiCoin()", +"9c63dae5": "depositorCurrency(address)", +"9c644221": "PRICE_STAGE_ONE_BONUS()", +"9c66452e": "checkTime(bytes32,bytes32,uint256)", +"9c665819": "Talent()", +"9c66fe00": "priceOfLandmark(uint256)", +"9c6735c7": "ProfitRate()", +"9c675eaa": "ownerAddr()", +"9c67f06f": "registryStarted()", +"9c67f2fb": "returnEth4Sender(uint256)", +"9c681f86": "totalTokenTransfers()", +"9c6891c5": "set_bountyPercent(uint256)", +"9c68bd60": "payPledge(uint256)", +"9c695a7b": "_isInStage(uint256)", +"9c69763b": "setICOManager(address)", +"9c697750": "getRemainingLimit(address)", +"9c6a5bca": "RiptideCoin()", +"9c6a97ee": "deleteMyCat()", +"9c6c3439": "burnReputation(uint256)", +"9c6e199a": "sendTokensManually(address,address,uint256)", +"9c6e1d46": "emitJobCanceled(uint256)", +"9c6f87e9": "getPseudoRandomNumber()", +"9c700b70": "withdrawOwnerEth(uint256)", +"9c707dcf": "_mthToVouchers(uint256)", +"9c7081df": "prestige()", +"9c709343": "split(bool,address)", +"9c70b899": "KYC_ETH_LMT()", +"9c715535": "confirmPendingChange(address)", +"9c71d169": "OfferCancel(uint8)", +"9c71efef": "STARTING_CraigGrant()", +"9c71fda4": "WALLET_LB_RESERVED()", +"9c7264d7": "fillOrder(address,uint256)", +"9c73048b": "distributeCastleLoot()", +"9c732203": "DoDev(uint256)", +"9c7336fe": "getValueOfRemainingTokens()", +"9c737e8f": "fundPot()", +"9c7387c7": "finishContribution()", +"9c73ff7d": "DANK()", +"9c7409b0": "_getProtectionParams(uint256,uint256,uint256)", +"9c75089f": "Tresdk()", +"9c755f2f": "stuff()", +"9c756200": "ContractOwnerWithdraw(uint256)", +"9c756ec9": "PREICO_PERIOD()", +"9c76a6ac": "buybackPrice()", +"9c775e1f": "delegateApprove(address,uint256)", +"9c787ab2": "YUNXINToken(uint256,string,uint8,string)", +"9c7912ff": "setXzlkcjqowhoqhwoihsiaoquweizxoiuo(uint256)", +"9c792938": "estimate(uint256)", +"9c79af26": "issueExchangeRate(address,address,address,uint256,uint256,uint256)", +"9c7a39e6": "doCustomAirdrop2(address,address[],uint256[])", +"9c7ab767": "numSubscribers()", +"9c7b3c45": "TextToken()", +"9c7b3d79": "ARTISTCOIN()", +"9c7b7a2d": "SingleSourceIdentity()", +"9c7beb8a": "mintingAgents(address)", +"9c7c2498": "OnChainOrderBookV013b()", +"9c7c722b": "rename(string,string)", +"9c7dcdeb": "hostAccount()", +"9c7e6e6e": "checkRokBalance(address)", +"9c7e8a03": "addParticipant(address,address,uint256)", +"9c7eaac5": "makeTrade(address,address,uint256)", +"9c7ebb30": "SellTokens(uint256)", +"9c7ed6cb": "AgiCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256)", +"9c81806d": "WithdrawSpecialEth(uint256)", +"9c81a5f6": "getVestingsCount(address)", +"9c821ac4": "testFailsIfReturnLessThanMin()", +"9c82f2a4": "setSwapper(address)", +"9c830beb": "setStateHolding()", +"9c839bdd": "nextWithdrawDayCommunity()", +"9c83a1e3": "deleteDeposit(address)", +"9c83b0a1": "ValeoTestToken()", +"9c841c16": "checkCorrectRate(bool,uint8)", +"9c84d1f7": "News()", +"9c84eebe": "ERC20Token(uint256,address)", +"9c851ebc": "new_entry()", +"9c85a28a": "infoMessage()", +"9c8615ac": "is_entity(address)", +"9c865645": "calculateFactorFlushDifficulty(uint256)", +"9c86b241": "createPromoArt()", +"9c88b7bf": "enableNewPurchasing(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9c88cbb6": "getCurrentBracket()", +"9c893d73": "LinkCoinToken()", +"9c89a0e2": "getReputation(address)", +"9c89a10a": "presaleOwner()", +"9c89ddb5": "addCourse(string,address)", +"9c89e828": "BidSubmission(address,uint256)", +"9c8a5a56": "bribedCitizen()", +"9c8aeedd": "breakIdMaintenance2(uint256,address)", +"9c8b8585": "txAboveLimits(bytes32)", +"9c8bb5d0": "confirmBoardScore(bytes32,bytes32)", +"9c8bcd6d": "WbtToken()", +"9c8e1d50": "getChipValue()", +"9c8f8569": "Scc()", +"9c8f94bd": "widthrawBondFunds(address)", +"9c8f9f23": "removeLiquidity(uint256)", +"9c90224b": "assertEq1(bytes1,bytes1,bytes32)", +"9c908f61": "acceptTokens(address,uint256,uint256,uint256,uint256)", +"9c91ae20": "getGeneration(uint40)", +"9c91dd56": "paymentContract()", +"9c9205b6": "Token(address,address,uint256)", +"9c926061": "HashProject(address)", +"9c92bfda": "testReceiveSubmittal()", +"9c93a52f": "SALE_TOKENS_SUPPLY()", +"9c9421c3": "Testtoken()", +"9c94e6c6": "notice()", +"9c960cbb": "setAyantDroitEconomique_Compte_6(uint256)", +"9c97114b": "s(bytes)", +"9c977e43": "requestOraclizeBalance()", +"9c978442": "TransferToAllAccounts()", +"9c981fcb": "getString(string)", +"9c9a1061": "buy(bytes32)", +"9c9a2365": "getFungibleTokenAddress()", +"9c9a4b72": "TokenVesting(address,address)", +"9c9b1170": "setoraclelimitgas(uint256)", +"9c9b2e21": "addReward(address)", +"9c9b8fcc": "ALC_FOUNDATION_ADDRESS()", +"9c9c344c": "getTotalUpdates()", +"9c9cc12a": "getCatRelease(uint256)", +"9c9d07c1": "STARTING_DINO()", +"9c9de4dc": "INT(address)", +"9c9e2752": "SBGCrowdsale()", +"9c9ecedb": "InitialArray()", +"9c9ef44a": "setDiscountValueOn()", +"9c9ef978": "addDataToList(bytes32,bytes32,bytes32,bytes32)", +"9c9fb68b": "GetGamblerChoices(address)", +"9c9fe2a4": "FundsClaimed(address,uint256,string)", +"9c9fe83a": "setBA(bytes32,address)", +"9c9ff934": "ETH_HEROCOIN()", +"9ca0e5e1": "setGoldBonus(uint256)", +"9ca0f19d": "GemsPlay()", +"9ca15d59": "oldInviteAddr()", +"9ca2b9e4": "AdvancedDeposit(bytes32,bytes32)", +"9ca3669d": "cancelCommissionerAuction(uint32)", +"9ca3c29c": "getCost(string)", +"9ca423b3": "referrals(address)", +"9ca44515": "ketqua()", +"9ca5454e": "distributes(uint256)", +"9ca5f4a7": "SafeERC20Helper()", +"9ca67a6e": "notapproved()", +"9ca6e670": "apply(uint256,uint256,string)", +"9ca74595": "BobMarleyCoin()", +"9ca75320": "searchNode(address)", +"9ca77f3c": "kingdomsByNumber(uint256)", +"9ca7c912": "ownerTime()", +"9ca9dcab": "getMemeCount()", +"9caaa154": "setLuckPrice(uint256)", +"9caaa7f4": "get_this_balance()", +"9caab55a": "ParticipantAgent()", +"9caabfac": "dateEcoRelease9()", +"9cad74b0": "randomNumber(uint8,uint8)", +"9cadb159": "settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)", +"9cae6100": "addAward(string)", +"9cae9e03": "getPropertyInfo(uint8)", +"9caeab45": "periodICOStage5()", +"9caf34c4": "getBalanceEth()", +"9caf9695": "paleyer2show(uint8,uint8,uint8,uint8,uint8)", +"9cb02e8c": "delayPhaseEndBy(uint256,uint256)", +"9cb04d18": "newPresale()", +"9cb08312": "DMTToken()", +"9cb157d9": "VNT()", +"9cb15a94": "FreeCoin(uint256,string,string)", +"9cb1e9fe": "cubicContract()", +"9cb21f6d": "ImperialCredits()", +"9cb230ec": "Lockup(address)", +"9cb29034": "CCECOIN()", +"9cb2b69b": "getCreated(uint256)", +"9cb31079": "setLowLimit(uint256)", +"9cb33309": "BasicTokenMock(address,uint256)", +"9cb35327": "ceilDiv(uint256,uint256)", +"9cb42db4": "PDS()", +"9cb481ea": "getBountyAmount(uint256)", +"9cb4b31c": "tokenTimelockAddress()", +"9cb61295": "getVoterFromProposal(uint256,uint256)", +"9cb64a2d": "debtor()", +"9cb6a504": "addColor(string,string)", +"9cb6ed7e": "escape(address)", +"9cb6fc77": "confirmUpgrade()", +"9cb74ab6": "mgmtInvestProject(address,uint256)", +"9cb7595a": "getBridgeInterfacesVersion()", +"9cb75b2f": "sendBonusEgg(address,uint256)", +"9cb78df8": "minSuccess()", +"9cb7de4b": "setHandler(address,bool)", +"9cb8a26a": "selfDestruct()", +"9cb931f9": "setReferralPromille(uint8)", +"9cb998dc": "increase(bytes32)", +"9cb9b8f5": "withdrawBomb(uint256)", +"9cb9c14f": "Issuance(address,uint256)", +"9cba3559": "globalAmounts(uint256)", +"9cba60a7": "bitmask_check(address,uint256)", +"9cba713e": "reserveTreasury(uint256)", +"9cbad951": "withdrawAllTokensFromBalance()", +"9cbafcb6": "Pharamore()", +"9cbb165e": "isOnBorrow(uint256)", +"9cbb9460": "fetchOrdersForMerchantByAdmin(address)", +"9cbc2d62": "get_member_info(address)", +"9cbc87a3": "bytes32ArrayToString(bytes32[])", +"9cbcfcc7": "calculateGotTokens(uint256)", +"9cbd695f": "show(uint256,uint256)", +"9cbd7da5": "resumeICO()", +"9cbdffc6": "unblock()", +"9cbe5efd": "currentRoundId()", +"9cbf1b85": "exchangeRateAt()", +"9cbf73a9": "purchaserAddresses(uint256)", +"9cbf9e36": "createToken()", +"9cc04ea0": "newRecord(uint256)", +"9cc0c5e3": "experty_io()", +"9cc1c97b": "test_threeValidEqAddress()", +"9cc24569": "ExKnox(address,address)", +"9cc28aa0": "BdpOwnershipStorage(bytes8)", +"9cc2bcc6": "AhieldCureToken()", +"9cc33024": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256,bytes32)", +"9cc3b949": "Bookmark()", +"9cc429dc": "getBattlesCount()", +"9cc477b2": "createFashion(address,uint16[9],uint16)", +"9cc4a319": "CarToken()", +"9cc4d3dd": "convertNumSec(uint256[],uint256[])", +"9cc4da3b": "WHAuthorizeAddress()", +"9cc579af": "MarketJob(address[],uint256[],uint256[],address,address,bytes)", +"9cc5dd95": "_removeOwnersAproves(address)", +"9cc73a6f": "raiseDay3()", +"9cc74299": "withdrawFromManager(uint256,address)", +"9cc7d917": "earlyBirdsAddress()", +"9cc7f708": "balanceOf(uint256)", +"9cc8295a": "EnoughClaims(uint256)", +"9cc84564": "envelopeCounts(address)", +"9cc9299e": "killSwap()", +"9cc946ee": "OlivToken()", +"9cc9b86d": "disableService(address)", +"9cca1c64": "getNonFungibleIndex(uint256)", +"9cca7ac3": "QueueDemandesEnCours()", +"9ccaec98": "getAuctionInfo(uint40)", +"9ccb6e8d": "SentToContractor(uint256,address,uint256)", +"9ccbbc6a": "minimumPowerUpSizeBabz()", +"9cccaea9": "StreamityContract()", +"9cccb272": "BatchPaint(uint8,uint256[],bytes3[],uint256[])", +"9cccd2a4": "getSumAmountOfSuccessfulSteps()", +"9ccd0b51": "getCountCourse()", +"9ccd7d86": "setWinery(address,address,bool)", +"9ccdd994": "Pume(uint256,string,string)", +"9ccf1a68": "prepareURL()", +"9ccfceed": "MANHATTANPROXY10THAMSTAVE()", +"9cd0126a": "gemHpConversion()", +"9cd01605": "exchangeAddress()", +"9cd04996": "DiscountedPreICO(uint256,uint256)", +"9cd08464": "transfer_eth_from_contract(address,uint256)", +"9cd08bae": "CevacToken(uint256,uint256)", +"9cd0c511": "depositMintAndPay(address,uint256,uint256)", +"9cd0f778": "setLuckPool(address)", +"9cd106a8": "cancelRecurringBilling(uint256)", +"9cd19074": "createKey(bytes32)", +"9cd1a121": "delegateTransfer(address,uint256,address)", +"9cd2021c": "mintRefs()", +"9cd22211": "getPlayerGameInfo(uint256,address)", +"9cd23707": "setTransferable(bool)", +"9cd3cb5d": "withdraw_token(address)", +"9cd417d7": "rejectCurrentValidation()", +"9cd43690": "GENTATOKEN()", +"9cd4fb47": "Tier_Classic()", +"9cd5c9a8": "setAssetWallet()", +"9cd70235": "setAmountToClaim(address,uint256)", +"9cd758d0": "setPOOL_edit_2(string)", +"9cd77457": "createInactivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"9cd84ead": "APPToken612()", +"9cd994b4": "updateAuctionTime(uint256,uint256,uint256)", +"9cda1ec5": "setDistributor(address,bool,uint256)", +"9cda5a12": "calcPoseBits(uint256,uint256,uint256)", +"9cdacdb3": "Setup(address)", +"9cdaef4d": "_set4()", +"9cdaf438": "ARCCToken(address,uint256)", +"9cdb4fe8": "addEvidence(bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"9cdbaa21": "tokenTransferLocker()", +"9cdbc070": "addVoting(uint256)", +"9cdd2e76": "getHeroLocation(uint256)", +"9cdec2bb": "getCompte_18()", +"9cdee922": "RushCoin()", +"9cdf1872": "getOut()", +"9cdf4dd3": "Token(address,string,string)", +"9cdf8a1f": "WTBNToken()", +"9cdfa3df": "getAddrForPrivilege(address)", +"9ce04e35": "enableInvestorTransfer(address)", +"9ce21f3c": "fundingWalletAddress()", +"9ce2c7f2": "AumentaQuantitaVoti(uint256,address)", +"9ce318f6": "withdraw(uint8[],bytes32[],bytes32[],bytes)", +"9ce31fe1": "StudToken(uint256)", +"9ce3961f": "nextVersionAddress()", +"9ce3f461": "UP_winBets()", +"9ce51c7c": "sendNewTalentsAndPartnerships()", +"9ce682bd": "BetFromTransaction(address,uint256)", +"9ce80efc": "test_twoInvalidAssertFalse()", +"9ce840d4": "withdrawNotATokens(address)", +"9ce8fc4e": "LogForkSigned(uint256,bytes32)", +"9ce962ca": "payWallet()", +"9ce9e380": "_burnAllArgs(address,uint256)", +"9cea127f": "CMTTT()", +"9ceb5c6d": "icoBonus1EndDate()", +"9ceba90b": "startWeekFive()", +"9cec2789": "gettags(address)", +"9cecba34": "addPoliceNode(address)", +"9cecc80a": "setReserve(address)", +"9ced0e9b": "initialTime()", +"9ced5c29": "enableNode()", +"9cede14c": "checkAndGetSendersID()", +"9cee1773": "Mednus()", +"9cee9492": "setMaxRewardPercent(uint256)", +"9cef2a6a": "addLand(address,uint256)", +"9cef8873": "reclaimLand(int256,int256)", +"9cef9cfe": "isNumBlack(uint8)", +"9cefa50b": "winner(uint256,bytes32)", +"9cf17d5f": "ScamCoin()", +"9cf21342": "AnimeCoin()", +"9cf21d90": "ETCH3dV()", +"9cf2c727": "sumHardCapICOStage7()", +"9cf3123b": "sellWolkEstimate(uint256,address)", +"9cf3566d": "promotionAllocate(address,uint256)", +"9cf4124f": "enableContinuousDelivery()", +"9cf48365": "getInvestedToken(address)", +"9cf488ad": "sendPlayerBack(uint256[])", +"9cf4910c": "preDistriToAcquiantancesEndTime()", +"9cf4cb1e": "_getVotes(uint256,uint256,uint256,address)", +"9cf5453d": "bid(address)", +"9cf55cfb": "sampleBoolRetTrue()", +"9cf5c613": "setVerified(address,bool)", +"9cf60b86": "addRefBalance(address,uint256)", +"9cf66013": "whitelistRegistrantsFlag(address)", +"9cf66997": "clearLand(int256[],int256[])", +"9cf6f1eb": "CBVO()", +"9cf78527": "UAPToken(address)", +"9cf8ccfd": "currentPlayers()", +"9cf9342e": "createContract(bool,string,bool)", +"9cf94943": "whitelistAdd(address[])", +"9cf9d4c0": "setPOOL_edit_9(string)", +"9cf9e3ab": "TokenReleased(address,uint256)", +"9cfa0f7c": "maxTokensToBuy()", +"9cfa750f": "isParticipant(uint64,address)", +"9cfad128": "calculateFee(address,bool,bool,uint256,uint256)", +"9cfcab47": "NovoToken()", +"9cfd5dc4": "validPurchase(uint256,address)", +"9cfda697": "setColorsX4(uint16[4],uint256[20],uint256)", +"9cfdd04d": "BCN()", +"9cfdfe42": "AXIS()", +"9cfe42da": "addBlacklist(address)", +"9cfe6c86": "count_tokens()", +"9cff53e0": "nDeposits()", +"9cff621a": "withdrawDispersal()", +"9cff799c": "GetCuentaSocio(uint16)", +"9d000e78": "VUP_PER_ETH_PRE_SALE_RATE()", +"9d00ffa5": "isMessageValid(bytes)", +"9d01e730": "EarlyEndTimeChanged(uint256)", +"9d038cd3": "TEST1()", +"9d042f87": "dTimeoutCurrentStage()", +"9d0506ae": "checkData(bytes)", +"9d05414f": "Referral(address,address)", +"9d0617f9": "_send(address,uint256)", +"9d063ed8": "FIFSRegistrar(address,bytes32)", +"9d069353": "getAngel(uint64)", +"9d06a1d5": "removeFromWhiteList(string,address)", +"9d0714b2": "tgeSetLive()", +"9d079b18": "acceptProposal(bytes32)", +"9d07b653": "_createUnit(uint256,uint256,uint256,uint256,address)", +"9d07ff80": "ln_fixed3_lnr_18(uint256,uint256)", +"9d083222": "becomeMember()", +"9d0880a3": "transferUnsoldTokens(address)", +"9d09390b": "isValidAuthority(address,uint256)", +"9d097471": "getUserBounty(address)", +"9d09798f": "DemurringFee(address,uint256)", +"9d09f8e5": "changeRebackRate(uint256)", +"9d0b2c7a": "pendingStake(address,uint256)", +"9d0c0c35": "generateCrabGene(bool,bool)", +"9d0c1e6f": "walletETH()", +"9d0cfc2c": "closeDepositSubRound()", +"9d0d0a5a": "getTotalToggleGameDivsProduced()", +"9d0d9f1c": "azatipsToken()", +"9d0df9b5": "getPOOL_edit_11()", +"9d0e0cd3": "getTotalTAOsCount()", +"9d0e5871": "shipping(address)", +"9d0effdb": "revokePermission(address,address,bytes32)", +"9d0f17c8": "unsoldTokenIssued()", +"9d0f8763": "cancelOrderByAdmin(uint80,bool)", +"9d0fb699": "tokensToBeClaimed()", +"9d106954": "_getUserMinersAt(address,uint32,uint32)", +"9d1080c5": "UnilotToken()", +"9d10fda8": "escrow_fee_denominator()", +"9d118770": "destroy(uint256)", +"9d119a4e": "EmergencyUnPause()", +"9d119a7b": "getDepositTxMap(string)", +"9d11aaaa": "transferFeePercentage()", +"9d11f09f": "getTxAmountKWh(bytes32)", +"9d129afd": "prevBlock()", +"9d12e775": "zec()", +"9d13156c": "claimRefundOwed(uint256)", +"9d134185": "setauctionsystem(uint256,uint256)", +"9d1362a9": "getAllInvestmentsWithdrawnByBeneficiary()", +"9d139ff2": "LajokiCoin()", +"9d140fa2": "inPreSale2Period()", +"9d144f8a": "_preventedByNationalityBlacklist(address,uint256)", +"9d145866": "loadRate(uint256)", +"9d14f134": "getRepo(bytes32,string)", +"9d153495": "withdrawRefund(uint256)", +"9d1672c4": "getAffiliateRate()", +"9d16aca6": "changeExchangeContract(address)", +"9d170c5d": "getRef(string)", +"9d176556": "setDistConfig(address[],uint256[])", +"9d189473": "calculateAndMintTokens(address,uint256)", +"9d18e405": "approveAndBuyAffiliated(uint256,address,uint256,bool,address)", +"9d1a9ff9": "rebatePeriod_()", +"9d1acead": "periodPresale()", +"9d1b0fd1": "createProduct(bytes32,string,bytes32,bytes32)", +"9d1b464a": "currentPrice()", +"9d1b8945": "requestedRedeem(address,uint256)", +"9d1bbd7e": "CancelRoundAndRefundAll(uint256)", +"9d1be930": "autopayfee()", +"9d1c3f03": "isMaximumPreFundingGoalReached()", +"9d1c4d42": "buyAnalysis(uint256,uint256,address)", +"9d1d14e0": "setEtherExchangeLikeCoin(uint32)", +"9d1ddca5": "fiveYearGrace()", +"9d1e0d48": "buy(address,string,uint256,uint256,uint256,uint256)", +"9d1e351c": "totalBonusToken()", +"9d1e641b": "CROWD_WEEK3_BONUS()", +"9d1eb451": "MAT_CROWDSALE_SUPPLY_LIMIT()", +"9d1ebfd6": "nextReleaseAmount()", +"9d1eeb97": "redemptionBurn(address,uint256)", +"9d1f2800": "doPush(address,uint256)", +"9d1fd89c": "getFirstBorrowAgreementTool(address,address)", +"9d1ffed9": "_certify(bytes32)", +"9d2044e1": "setContrAddrAndCrwSale(bool,address,address,address,bool,bool)", +"9d20467a": "changeTiming(uint256,uint256)", +"9d209048": "getNode(address)", +"9d20b314": "TotalpresaleSupply()", +"9d210369": "resetMaxBonusThreshold()", +"9d210bdd": "getStoriesLength()", +"9d21328f": "sharedExpense()", +"9d21dd78": "getGameTime()", +"9d2235e7": "_leapYearsBefore(uint256)", +"9d22c693": "before_test_method_increaseTimeBy30000()", +"9d23c4c7": "tokenRegistry()", +"9d240cf2": "Workshop()", +"9d245238": "getWinNumbers(string)", +"9d248477": "BeaverCoin()", +"9d248e08": "burn3(uint256,uint256,uint256)", +"9d24c49f": "_payloadOffset(uint256)", +"9d24e482": "theWinner()", +"9d255663": "EthMonoPoly(address)", +"9d2620bf": "RealEstateCouponToken()", +"9d2668d4": "setPurchased(address,address,uint256)", +"9d273b20": "refundStatus()", +"9d2754a9": "createTokenToTax()", +"9d2777f4": "IntermediateWallet()", +"9d277a49": "unregisterPublisher(address)", +"9d2870c3": "LPAIToken()", +"9d29255b": "setCSCERC721(address)", +"9d29cac4": "getMonsterClass(uint32)", +"9d2a1eab": "GrantAdded(address,uint256)", +"9d2a8cf0": "unwhitelistAddress(address)", +"9d2ab46d": "BUZZToken()", +"9d2ae623": "depositJackPot()", +"9d2affd5": "transferFrom(address,address,address,address[],uint256)", +"9d2be721": "insertTopic(bytes15,address,bytes32,bytes15)", +"9d2cc436": "RESERVE()", +"9d2cd67c": "collect_main_fee()", +"9d2d912e": "futureDevLock()", +"9d2e4777": "vestingTransfer(address,uint256,uint32)", +"9d2ec188": "setFeeParams(uint256,uint256)", +"9d2f1cbb": "changeStakingFees(uint80,uint80,uint80,int256,uint80,int256,uint256,int256,uint80,uint80,uint256)", +"9d2fc3c8": "adjudicate(uint256,uint256)", +"9d2fcb8c": "setInvestmentAddress(address)", +"9d2ff29c": "ICDSupply()", +"9d30584c": "setHard_Cap(uint256)", +"9d323193": "RTCToken()", +"9d327229": "fechVoteResultForCandidateByStage(address,uint256)", +"9d340b71": "buyTokensfor82()", +"9d3565ce": "transferOr(address)", +"9d35dcac": "NewUser(uint256,address,address,uint32)", +"9d36c500": "freeAnimalsLimit()", +"9d38cdbf": "OwnedUpgradeabilityProxy(address)", +"9d38cea3": "stopPreIco()", +"9d390d83": "setIsWeiAccepted(bool)", +"9d3995c2": "setHeroPost(address,uint256)", +"9d3ac6d5": "getBuyerContribution(address)", +"9d3acf23": "isResolvedForDefendant(uint256)", +"9d3aee8d": "st4ckHeight(uint256)", +"9d3c015e": "PChannel(address)", +"9d3c3b5d": "getArrayHashMarketItem(bytes16)", +"9d3c663f": "isBreakingCap(uint256,uint256,uint256,uint256)", +"9d3cc187": "changeSetRateAddress(address)", +"9d3d1d82": "userSponsorshipsPred(address,uint256[],uint256)", +"9d3d741c": "testAboveLength()", +"9d3d9b4d": "FETCOIN()", +"9d3de343": "addVictim(string,string)", +"9d3de95a": "getPortfolioInfo(address,uint256)", +"9d3e069c": "StartDraw()", +"9d3e1ab8": "walletRemaining()", +"9d3ec1a7": "getMarriageDetails()", +"9d3f2e5f": "stakeEthForGas(uint256,address)", +"9d3fae04": "applyAuditorsCheckUpdate(address,address,uint256)", +"9d3fe4c2": "AGAVETHER(string,string)", +"9d4022c8": "OrderStatisticTree()", +"9d406a13": "getLocksLockedFor(address,uint256)", +"9d408b93": "gasBefore_()", +"9d4095cc": "getAmbientTempException(bytes32)", +"9d41198e": "startnewround()", +"9d41a9af": "getOccupation(address)", +"9d41d6fc": "testInitialBalanceWithNewRGXToken()", +"9d421ea7": "claimTeamToken()", +"9d42829a": "getGoldInfoDocumentation(address)", +"9d42d1a9": "sendEvent(uint256,bytes32)", +"9d4323be": "drainToken(address,uint256)", +"9d4327a0": "stockBuyCertainOrder(uint256,uint256,uint256,uint256)", +"9d433c71": "sharesOfSPS()", +"9d442102": "BuyRocketForSale(uint32)", +"9d44ac4f": "permissionExists(uint8,address)", +"9d44d93b": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,address,uint8,bytes32,bytes32)", +"9d44fca2": "computeEthConstant(uint256)", +"9d451c4d": "right77(uint256)", +"9d45b9d2": "soldTokensPreIco()", +"9d45d077": "raiseSellOrderMatched(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,int160)", +"9d463520": "lastMintTime()", +"9d463b99": "addPool(uint256,uint256,uint256)", +"9d471837": "updateTextForHolder(bytes32,bytes)", +"9d478656": "sendp(address,uint256)", +"9d481848": "propose(address,bytes)", +"9d484693": "payouts(address,uint256)", +"9d4936f9": "MINING_OUTPUT()", +"9d4971b7": "getOrderLength()", +"9d499363": "faucetTokenAddress()", +"9d4ab2a3": "setInvestAgent(address)", +"9d4aba7c": "getTimestamp_()", +"9d4ace0b": "reg_bountyHunter(address,address)", +"9d4b1239": "tokensDistributedCrowdsale()", +"9d4c162d": "executeProposal(bytes32,int256)", +"9d4c5451": "minTokens()", +"9d4c662c": "sell_id()", +"9d4c7737": "creditStatus()", +"9d4c8eed": "getChildCount(address)", +"9d4cc8ad": "Poppins()", +"9d4cf268": "isERC165Interface(bytes32)", +"9d4d8db3": "Happy()", +"9d4e85ce": "getUserDeposits(address,address)", +"9d4e9a60": "addContractERC20(address)", +"9d4ea0f3": "canMove(uint16,uint8,uint8)", +"9d4ff8ad": "enter(string)", +"9d5176fd": "getPremiumFactors(bytes32)", +"9d51d9b7": "setMaxBalance(uint256)", +"9d523f4c": "_getNextOwed()", +"9d52f74b": "getFreezeGap(bytes32)", +"9d532041": "createCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,bool,uint8)", +"9d535056": "punterWaiting()", +"9d5367c5": "KIDToken()", +"9d53827f": "MAX_TRANSFER()", +"9d53f19e": "getInvestorInforMin(uint16)", +"9d54c79d": "notary()", +"9d54f419": "setUpdater(address)", +"9d55fba7": "updateCommission(uint256)", +"9d564d9a": "unlockTokens(address,uint256)", +"9d56998d": "my_message()", +"9d5708ff": "myTulipsBatched(uint256,uint16)", +"9d575582": "depositToken(address,uint256,address)", +"9d5779ce": "Site(string)", +"9d5839e3": "getFirstMilestone()", +"9d585f7f": "loanAmount()", +"9d58a5b6": "unitExists(uint256,uint256)", +"9d58aa41": "changeRestrictedtStatus(address,address,bool)", +"9d58b15d": "addMember(address,address)", +"9d59011e": "setAmount(uint128)", +"9d599cbf": "hashClaimable(bytes32)", +"9d59beb1": "listTokenFee()", +"9d5c6061": "getMsgGas()", +"9d5c6e20": "setPrivateSaleEndDate(uint256)", +"9d5c7be8": "collectionCountsOf(address)", +"9d5de12e": "STQPreSale(address,address)", +"9d5eab46": "setItemOption(address,uint256,uint256)", +"9d5eb078": "buyTemplate(uint256)", +"9d5efb6b": "tokenContractSupply()", +"9d5f2422": "createDifficultyOracle(uint256)", +"9d5f5cd3": "mktValue()", +"9d5f658e": "viewFirstBatchOfContractState()", +"9d61193a": "passoverStartTime()", +"9d617fae": "pendingFills(address)", +"9d619dad": "currentTournamentBank()", +"9d61e624": "hardcapInEth()", +"9d625241": "powermayorCutPercentage()", +"9d62f07b": "BlockGrainCoin()", +"9d636359": "initialMarketSales()", +"9d63848a": "tokens()", +"9d64a5e5": "newFoundationCandidate()", +"9d64d474": "cancelExplorationByIndex(uint256)", +"9d652118": "presaleclosingTime()", +"9d66a9cd": "getDetail(uint256)", +"9d66e913": "callStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"9d67b404": "addChunk6ToWhiteList()", +"9d68521a": "revokeOperatorTranche(bytes32,address)", +"9d69d5c6": "CERTIToken()", +"9d69fdff": "Ecometh()", +"9d6a4d77": "allotToken(uint256)", +"9d6abbcd": "unlockedEscrow(bytes32)", +"9d6abe4f": "getLink(address)", +"9d6ad799": "computeTokenWithBonus(uint256,address)", +"9d6adeaf": "HitToken(string,string,uint8,uint256)", +"9d6b74f8": "DISPLAY_CLASSIQUE_ET_VIDEO()", +"9d6bf036": "setIsLimited(bool,string)", +"9d6d22b5": "ProgrammerdaddysToken()", +"9d6d2321": "dividendsFull(address)", +"9d6d78e4": "chunk3IsAdded()", +"9d6d8598": "depositTokens(bool,uint256,address)", +"9d6dcf53": "Smilebitbuy(uint256,string,uint8,string)", +"9d6e0c22": "setBroker(address,address,uint256)", +"9d6e4eaa": "ReleasableToken(string,uint256,string,uint256)", +"9d6eaad5": "returnTokensToOwner(string)", +"9d6f78c1": "LineToken2()", +"9d6fa618": "requestTransferOwnership(address)", +"9d6fac6f": "cooldowns(uint256)", +"9d6fb020": "isRefunding()", +"9d70085e": "cap3(address)", +"9d707d03": "resetAuctionStart(address,address)", +"9d7150fe": "isAffiliateValid(address)", +"9d7233d4": "MIN_CONTRIBUTION_WEIS()", +"9d72d8d3": "luckyBuy(uint8)", +"9d733f0c": "submissionPrice()", +"9d735286": "forwardFunds()", +"9d7354c0": "BuyHandler(uint256)", +"9d735fc5": "RewardPoint()", +"9d73cecc": "validatePeer(address)", +"9d7437b8": "WALLET_ADVISOR()", +"9d74b37d": "getBool(address,bytes32)", +"9d74b959": "test_basicWithAssertBeforeThrow()", +"9d74fb7c": "ContributionMock()", +"9d755367": "getOwnerOfTicket(uint256)", +"9d75c113": "_joinCDP(bytes32,uint256)", +"9d7616a5": "preEtherCap()", +"9d76ea58": "tokenAddress()", +"9d770e49": "abstractResolver()", +"9d773a1b": "catsForSale(uint256)", +"9d77bd68": "luCat()", +"9d77e4f8": "getChainFees(uint256)", +"9d77f85a": "buyCollectible(uint256,uint256,int256)", +"9d79468a": "claimRewardTo(address,uint256,string)", +"9d7a63e9": "changeDripAmounts(uint256,uint256)", +"9d7acf74": "BluechipToken()", +"9d7b5621": "numberOfTokenId()", +"9d7b7636": "Neymar()", +"9d7b8887": "addAddressMappingProposal(address)", +"9d7bf73c": "PLUS()", +"9d7d6667": "multipliers()", +"9d7da479": "mintTokens1(int256,address,uint256,uint256,bytes32)", +"9d7e2730": "issueCoins(uint256,address)", +"9d7e6ca8": "setResponseAddress(address)", +"9d7eb375": "updateUserDetails(string)", +"9d80ac4d": "WithdrawedEthToWallet(uint256)", +"9d80c818": "addressCount()", +"9d815818": "validReleasedToken(uint256)", +"9d8168f0": "removeManyWhitelist(address[])", +"9d821c1a": "setManualSaleFlag(bool)", +"9d827eb9": "CreationFeeChangedEvent(uint256)", +"9d8374b4": "removeFromBlacklist(address,address)", +"9d837ccd": "ETH_CAP()", +"9d83ee1b": "getAllCardDatas()", +"9d84934d": "mintStartYear()", +"9d84ae69": "readAddress(bytes32)", +"9d856bdc": "queen()", +"9d858a80": "Pheonix(uint256,uint256)", +"9d85fca3": "findIndexFromRandomNumber(uint32)", +"9d866527": "Strange()", +"9d86ad52": "CloseIfBug()", +"9d86fd0c": "test_threeTrueAssert()", +"9d87a373": "transferFromMany(address[],address,uint256[],address)", +"9d87e7f0": "getWeiAvailableToReturn(address)", +"9d882b5d": "Sotoin()", +"9d88584e": "removeFamily(address)", +"9d888e86": "currentVersion()", +"9d88f3a1": "setLotteryAddress(address,address)", +"9d89add1": "createMechETH(uint256,address)", +"9d89e7d4": "challengeAmount()", +"9d8a0212": "costOfOneToken()", +"9d8a18ea": "VT(uint256,string,string)", +"9d8a8c43": "totalTokenMintedPreSale()", +"9d8abff3": "miningAttempts(uint256,address)", +"9d8b0834": "verifyLoanOfferingRecurse(address,address[9],uint256[7],uint32[4],bytes32,bytes)", +"9d8b157b": "teamCup()", +"9d8c3994": "giveAllToCharity()", +"9d8c428e": "addRoundMode(uint256,uint256,uint256)", +"9d8c7243": "CreateKRM(address,uint256)", +"9d8c997b": "getInfoByUnionId(bytes32)", +"9d8ca531": "closeLottery(uint256)", +"9d8cb45c": "foundationSupplyRemaining()", +"9d8d22f4": "grantReserveTokens(address)", +"9d8d911e": "_createCryptsy(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,address)", +"9d8dbd20": "remove_kycer(address)", +"9d8df6dd": "cancelAdoptionRequest(bytes5)", +"9d8e2177": "UNIT()", +"9d8ee943": "right71(uint256)", +"9d8f2b17": "LCAP()", +"9d8f4c27": "priceUpdateAddress()", +"9d902fc0": "precisionFactor()", +"9d913c64": "addTokenLock(uint256,uint256)", +"9d9231b1": "_unpackLevelValue(uint256)", +"9d925fc8": "REFUND_RATE()", +"9d930f02": "newTeamOnEnd(uint64,uint64,uint64)", +"9d932a93": "validateSignature(bytes,bytes32)", +"9d94743a": "CND(address)", +"9d94a8fa": "_thresholdTwo()", +"9d94c343": "POSV()", +"9d94dac8": "fightEtherMonster()", +"9d95f1cc": "addNode(address)", +"9d963289": "NewLeader(address,uint8[])", +"9d96be58": "maxMintBlock()", +"9d96f200": "Factory(string)", +"9d97bcd7": "allocatePreICOTokens()", +"9d988d03": "X(address)", +"9d989b20": "chargeDailyRate(bytes32,address)", +"9d98cd78": "drawETH(uint256)", +"9d9a5e1c": "startPrivateICO()", +"9d9a7fe9": "completed()", +"9d9ab2d8": "setEtherUsdRate(uint16)", +"9d9ae444": "StatsReserved()", +"9d9aeb7f": "setInterestAllocationPercentage(uint256,uint256)", +"9d9afce9": "claimTokenReserve()", +"9d9b2e82": "RevenueSharingContract()", +"9d9b4d20": "DST_R_N_B_PROGRAM()", +"9d9b5342": "editInfo(string)", +"9d9bfb02": "throwsWhenNonMultisigDeploysANT()", +"9d9c9439": "tokenInitialised()", +"9d9c9a0d": "testControlCreateWithParentParentSameItemId()", +"9d9ca28d": "isWinner(address)", +"9d9cc8e9": "TestCrowdsale_Noname()", +"9d9d432f": "updateGenVault(address,uint256)", +"9d9db392": "makePayment(address,uint256,string)", +"9d9dcf81": "getXPL()", +"9d9fcc72": "checkWithdrawals(address)", +"9da065cb": "ReddyToken()", +"9da0c7b1": "nowCanProvideHash()", +"9da0d7d4": "dutchAuction()", +"9da0dc0a": "preICOWeiRaised()", +"9da1814c": "FremenTradeToken()", +"9da19acc": "isRedemptionReady()", +"9da1b02a": "createSale(uint256)", +"9da1bc7b": "updateBearCount(address)", +"9da26320": "registrations_confirmed()", +"9da2b791": "assignDNI(uint256)", +"9da30467": "payForOrderInTokens(uint256,address,uint256,address,uint256)", +"9da32c14": "Defapacoin()", +"9da43ef4": "getExtraPoints(uint32)", +"9da46ee3": "getPool(uint32)", +"9da59934": "getInbox(address,uint256)", +"9da5e0eb": "initDaylimit(uint256)", +"9da67e71": "OpenMoneyPresale()", +"9da680f3": "adjustRegistrationFee(uint256)", +"9da69180": "commitVote(uint256,bytes32)", +"9da78649": "getNewRecordInHistoryRecord(uint256)", +"9da8be21": "initWallet(address)", +"9da8e7e2": "createProxy(string)", +"9da9650e": "Cothereum(uint256,string,string)", +"9da9df3e": "withdrawContract()", +"9daa7b46": "STTCToken()", +"9daa9ecd": "percentAllocationFeeDenominator()", +"9daaae94": "setClient(bytes32,address)", +"9dab2054": "priceAt(uint256)", +"9dab3cd4": "userRight(address,bytes1,uint256)", +"9dab4607": "ACCEPT_DICE()", +"9dabff25": "sendReward(address)", +"9dac83e4": "allowWorker(address)", +"9dace789": "EOSGold(uint256,uint256)", +"9dad9382": "closeStream()", +"9dae2e80": "payoutDonations()", +"9dae6081": "createTournament()", +"9daf57cf": "getBdpDataStorage(address[16])", +"9daf77a5": "GetContractStateTerminatedMisrep()", +"9daf9b6b": "insertNodeAfter(uint256,uint256,address)", +"9daf9ce3": "computeTotalEthAmount()", +"9dafb4df": "prizeOwner()", +"9dafbc13": "initBlock(uint256)", +"9db02721": "refuseWork()", +"9db028ab": "getMetadataHistoryLength(string)", +"9db069d8": "bountyOwner()", +"9db09a08": "createContractMovie(string)", +"9db11039": "existenceTransferFromTest(address)", +"9db1b8af": "msc()", +"9db1cafa": "SuccessLife()", +"9db28672": "isOfferingStarted()", +"9db340de": "eraseNodeHierarchy(uint256,bytes32[],bytes32)", +"9db3956e": "setDatabase(string,uint256)", +"9db40718": "SearchIPR(string,string)", +"9db4372c": "num_tickets_current_round()", +"9db4577f": "addListToWhiteList(address[])", +"9db5d993": "putString(bytes32,string)", +"9db5dbe4": "transferERC20(address,address,uint256)", +"9db67cd0": "funcFromC3()", +"9db70e19": "tokenIdToRank(uint256)", +"9db7ff9e": "changeGameRuningblock(uint256)", +"9db834fe": "setColorPink()", +"9db8d393": "setCostToCancel(uint256)", +"9db91e78": "insecureMode()", +"9dbbcca3": "ChangePreICOStart(uint256)", +"9dbc041c": "requiredBid(uint256)", +"9dbc4f9b": "participantDetails(uint256)", +"9dbd1b96": "getRecipient(bytes)", +"9dbda902": "getHighestMortgageRate()", +"9dbdfe0d": "LocusOne()", +"9dbe3501": "LongPlace(address[2],uint256[8],uint256)", +"9dbf0087": "TokenERC20(uint256,string,string)", +"9dbf0543": "price_constant()", +"9dbf5eca": "updateRelayer(address,bool)", +"9dbf7014": "depositMineral()", +"9dbfe1b8": "setSaleRate(uint256,uint256)", +"9dc04184": "allowDraw()", +"9dc080d3": "angelToken()", +"9dc10d15": "preAllocatedTokensVestingTime()", +"9dc11280": "numDataOf(uint256)", +"9dc1d961": "message(bytes32,bytes32,string,string)", +"9dc27fe3": "setICOStatus(bool)", +"9dc29fac": "burn(address,uint256)", +"9dc2c8f5": "fireEventLog4Anonym()", +"9dc35799": "updateReading(uint256)", +"9dc371bd": "ULTRIXCOIN()", +"9dc42f16": "_removeOwner(address)", +"9dc43f2d": "newEmployeePoolPromille()", +"9dc4b9c9": "currentLevel()", +"9dc4ca42": "getWalletDigest(bytes32,address)", +"9dc4ef99": "_registerArtist(address)", +"9dc5b35e": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address)", +"9dc64f8e": "getWidthrawPercFor(string)", +"9dc6c12b": "TaiwanRepublic(uint256,string,string)", +"9dc6f173": "LogBidAccepted(address,uint256,uint256)", +"9dc7a49a": "RegisterUsername(string)", +"9dc7f01c": "pay_dividended()", +"9dc8832c": "JiucaiToken(uint256,uint8,string,string)", +"9dc905bb": "insertMilestone(uint8,uint256,uint256)", +"9dc90bd8": "GreeningDesertChainToken()", +"9dc9281b": "LjwToken3()", +"9dca362f": "createAccount()", +"9dca4e0a": "matchWinnerOk(uint8,uint8,uint8,uint8)", +"9dcb0f55": "fundingStartAt()", +"9dcb5c65": "resultsWeightedByEther()", +"9dcbed8b": "totalUnrestrictedTokens()", +"9dcbf7ea": "Rename(string,string)", +"9dccc5bf": "getRegistration(bytes32)", +"9dcd4beb": "optionExerciseSpan()", +"9dcee160": "voteC()", +"9dcf56b4": "proofType_TLSNotary()", +"9dd05af9": "setEarlyExchangeRate(uint256)", +"9dd0a30f": "iwithdrawal(uint256,uint256)", +"9dd0ff01": "max_bet_this_spin()", +"9dd1687e": "withdrawBasicTokens(address)", +"9dd21928": "whiteListAddress(address,bool)", +"9dd28e34": "registerVendor(uint256,bool,bytes,bytes)", +"9dd3045b": "TransferToken(address,uint256)", +"9dd373b9": "setStakingContract(address)", +"9dd409d3": "setPlayPrice(uint256,string)", +"9dd4fdd3": "MarketPrice()", +"9dd52927": "AuthorityController(address,address[],uint256,uint256,address)", +"9dd5b9a3": "_lockAllAmount()", +"9dd63c3a": "setOwnerPrice(uint256)", +"9dd74964": "dividendsSum()", +"9dd7b3c3": "getSellBallers()", +"9dd7e749": "getOffsaleCount()", +"9dd819cc": "test_fourValidEqInt()", +"9dd9c24b": "canPerform(address,bytes4)", +"9dda456a": "_firstLevelEth()", +"9ddae7f5": "determineOutcome(uint256,uint8[],uint8)", +"9ddaf5aa": "proofs(uint256)", +"9ddc4a47": "setTransformTarget_default(uint256)", +"9ddccc99": "TelonToken()", +"9ddd503e": "PlayChainToken()", +"9dde6eb6": "placeBidFromEtherScrolls(uint256)", +"9ddee5f9": "SlopeIncreased(uint256)", +"9ddf65e1": "AUTSCoin()", +"9ddf840d": "withdrawDivs()", +"9de0111f": "tokenWithdraw(uint256,address,uint256)", +"9de0eb04": "dappId()", +"9de12300": "updateICOmask(uint256,uint256)", +"9de18f9c": "controla(address,bytes32,bytes32)", +"9de2bd2f": "RYZToken()", +"9de2f796": "getMintAmount(uint256)", +"9de315f1": "getTargetContactPubKey(address)", +"9de39cb3": "testStartsWith()", +"9de4f41c": "seMurio()", +"9de518ba": "divertDividendsToBankroll()", +"9de66604": "erc20old()", +"9de6ba52": "ArtCore()", +"9de6c162": "acquireGauntlet(uint256,uint8,uint256)", +"9de6c45b": "addBox(uint256,string,string,string,uint256,uint8)", +"9de6d9aa": "changeGasLimitAndPrice(uint256,uint256)", +"9de7d032": "createPerson(uint32,string,uint256)", +"9de8302f": "createGen0Auction(uint256,uint128,uint128,uint40)", +"9de8535e": "readiscolorregistered(uint256)", +"9de91ccd": "getCCH_edit_12()", +"9de9205a": "getNujaNumber()", +"9de92f7e": "submitInput()", +"9de9d57e": "multiDistributeAdviserBounty(uint256[],bool)", +"9de9f1b8": "payJackpot3()", +"9dea34ad": "currBetID()", +"9deab49e": "_processERC20TokenPackPurchase(uint8,address,address)", +"9deb0b41": "createConsentFile(address)", +"9dec2189": "metaApproveHash(address,uint256,uint256,uint256)", +"9dec365e": "setCrowdsaleTotal(uint256)", +"9deca9ee": "disputeRounds(uint256,uint256)", +"9decaecc": "addEntryInMonths(address,uint256,uint256)", +"9decde19": "repriceAuctions(uint256[],uint256[],uint256[],uint256,address)", +"9ded1817": "sendCryptoVersusReward()", +"9ded35c8": "unpauseChannels()", +"9df06411": "addDepotEth(address,uint256)", +"9df08a9f": "getStatusEventCloseSuccess(bytes16)", +"9df0a5df": "ADDR_MAYA_TEAM()", +"9df0c176": "createCategoricalEvent(address,address,uint8)", +"9df184ae": "stageTwoEnd()", +"9df196ec": "getWhitelistDetailsFor(address)", +"9df1e2b0": "transferOtherToken(address,address,uint256)", +"9df1f9a1": "getYesCount(uint256)", +"9df21154": "AddToDB(address)", +"9df21bfd": "updateShareAddress(address,address)", +"9df39b4a": "removeCitation(address)", +"9df4867c": "transferSectors(uint16[],address)", +"9df4d0fe": "isChallenged()", +"9df51b89": "claimProfits()", +"9df537c6": "increaseBeneficiaryBalance(address,uint256)", +"9df5a643": "setAllowClaimUser(address,address)", +"9df5cbda": "isSucceed(uint8)", +"9df806d6": "setBurnerAddress(address)", +"9df8f631": "Ur()", +"9df93754": "Log2(bool,string)", +"9df94560": "leekStealTracker_()", +"9df971c1": "subFees(uint256)", +"9df9a1db": "disableKYC()", +"9dfaa207": "OWNERS_AND_PARTNERS_ADDRESS()", +"9dfad52d": "Expand()", +"9dfb071c": "WHITELISTING_MAX_CONTRIBUTION()", +"9dfb64fd": "toggleRefunds()", +"9dfb9de8": "getPawnLoanId(uint256)", +"9dfbb584": "refundNonWhitelistedPerson(address)", +"9dfcc05c": "isExpiredDeadline()", +"9dfcf372": "Lescovex_CYC(uint256,string,string,address)", +"9dfd1de3": "Token20(uint256,string,string)", +"9dfd4e2f": "MAX_ETH()", +"9dfd8b02": "getBuilding(uint256)", +"9dfde201": "Price()", +"9dfe29b5": "nextTokenType()", +"9dfecdcc": "openLottery()", +"9dff78de": "buyAnts()", +"9dfffa36": "countUp(address)", +"9e0112b8": "RESERVED_RESERVE_GROUP()", +"9e014cf1": "PrepareRollEvent(address,uint256,uint256)", +"9e01f9b9": "getUser2()", +"9e0234a1": "PHILCOIN()", +"9e036add": "NBCL(uint256,string,uint8,string)", +"9e03a5d0": "AndxorLogger()", +"9e03c589": "Delinetod()", +"9e03c971": "BuyKeys(uint256)", +"9e05c118": "availableCount()", +"9e05de62": "setFeeSharingValue(uint256)", +"9e060fb6": "updAcceptAdminWithdraw(bool)", +"9e07d205": "attorneySign()", +"9e098d9f": "LjwToken5(address,address)", +"9e0a2280": "TOKEN_SALE_ALLOWANCE()", +"9e0b7a1c": "approveCertificate(uint256,uint256)", +"9e0bb35e": "gamingDividendsReception()", +"9e0c0152": "lola()", +"9e0cb27b": "fetchOrderByOrderIndex(uint256)", +"9e0cbb64": "usersSpriteOwningHistory(address)", +"9e0cea05": "buyerCount()", +"9e0d8126": "PreICOEndTime()", +"9e0f35a2": "transfersSuspended()", +"9e0fd998": "updateEditionPrice(uint256,uint256)", +"9e0fdb26": "cancelSwap()", +"9e11b66c": "getLowerMaximum(uint256)", +"9e1224ce": "lotteryCloseInsurance(uint16)", +"9e126449": "registerForRaffle()", +"9e12c9b9": "sellCoin(address,uint256)", +"9e12d725": "NewTokenGrant(address,address,uint256,uint64,uint64,uint64)", +"9e12f15b": "units50percentExtra()", +"9e136878": "Transferred(uint256)", +"9e13baa4": "BNCConverterFactory()", +"9e13d3e1": "VietnamGemstoneChain()", +"9e140cc8": "ENCRYPTION_KEY()", +"9e1533a9": "getFounderMembersInvest(address)", +"9e159db0": "Lambo()", +"9e15bc25": "totalInput()", +"9e163aca": "getDocumentsCount(bytes16)", +"9e179b91": "addFreeMineral(address,uint32)", +"9e1832b5": "ListingCreated(bytes32,address,uint256,uint256,uint256,uint256,address)", +"9e196881": "sellBlock(uint256,uint256,uint256)", +"9e1a00aa": "sendTo(address,uint256)", +"9e1a4d19": "tokenBalance()", +"9e1ad320": "XERA()", +"9e1b9078": "addLandRevenue(uint256,uint256,uint256)", +"9e1be663": "SeedMarket(uint256,uint256)", +"9e1bf732": "addNewTokenTo(address,uint256)", +"9e1c6d6b": "transferFromFund(address,uint256)", +"9e1d14f1": "getThresholdsLength()", +"9e1e1ca9": "monstersForSale(uint8)", +"9e1e60c7": "depositOffchain(address,uint256,uint256)", +"9e1e6528": "uncertify(address)", +"9e1e9338": "getBuyerTransaction(address,uint256,uint256)", +"9e1eae34": "addReferrer(address,uint8)", +"9e1f5599": "executeTokenTxn(uint256)", +"9e20437c": "digits()", +"9e206ed5": "blockSkills(uint256[])", +"9e208922": "scheduledTopUp()", +"9e20a9a0": "registerToken(uint32,address,uint8)", +"9e20afdf": "weekly_disbursement()", +"9e20b768": "distributedBonusStakes()", +"9e20f6c9": "walletEmail()", +"9e211ee8": "dayFinished(uint16)", +"9e213fb7": "callReplaceCallback(string,address)", +"9e2262f5": "testCreateCostData()", +"9e229c55": "StatEventI(string,uint256)", +"9e22bd72": "lengthArrayApproval()", +"9e231e2d": "abortGame(uint256)", +"9e23602e": "hasAllAttrs(uint256,bytes2)", +"9e238366": "getCraftingAuction(uint256)", +"9e239ace": "itemOwner(bytes32,uint256)", +"9e23c209": "removeDeveloper(address)", +"9e243259": "frozenRate()", +"9e24edca": "TOKEN_FOR_INVESTER()", +"9e251c6f": "DonationReceipt(address,string,uint256,uint256,uint256,bytes32)", +"9e254262": "contractDurationInDays()", +"9e254d13": "Child()", +"9e25ec01": "KAL5Token()", +"9e25fd58": "SotkoCoin()", +"9e27a305": "sachin()", +"9e281a98": "withdrawToken(address,uint256)", +"9e282328": "getEditionReleaseTime(uint256)", +"9e28739d": "LogAddressTokenCapCalculated(uint256,uint256,uint256,string)", +"9e288374": "getContributor(address,address)", +"9e28abaf": "ShareActive()", +"9e29559c": "teamKeepingQuota()", +"9e29739e": "setContributionLevel(address,uint8)", +"9e29eb0f": "getUsersAwaitingForTokens()", +"9e2abcb5": "getddd(uint256)", +"9e2b8488": "getAuthor(uint256)", +"9e2d0478": "addNotaryToOrder(address,address,uint256,uint256,string,bytes)", +"9e2ed686": "cancel(address,bytes32)", +"9e2f04bf": "chooseWinner(uint256)", +"9e306d32": "MintableToken(uint256)", +"9e307955": "etherPrice()", +"9e30dd5f": "buyRareItem(uint256)", +"9e315d46": "payoutAmount(uint256)", +"9e31f9b6": "numGamesCheated()", +"9e321f42": "changeWhitelistOnly(bool)", +"9e3249ab": "setMinShards(uint8)", +"9e325b80": "SocialRemitToken(uint256,string,uint8,string)", +"9e326858": "private_AddGameBar(uint256,string,string,string)", +"9e331188": "startIco3(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9e33f72c": "reclaimStarted()", +"9e34070f": "isClaimed(uint256)", +"9e340ffb": "endFreeGet()", +"9e34ba2f": "VUP_PER_ETH_ICO_TIER3_RATE()", +"9e34d78e": "getDrawCount(uint256)", +"9e352721": "PreBuy(uint256)", +"9e3572b5": "getCurrencyContract(bytes32)", +"9e35ff3e": "storeCarrotsCredit(address,uint32)", +"9e36fde7": "regName(string,address)", +"9e37273b": "getMintDigest(uint256,bytes32)", +"9e37c923": "subscriptionOf(address,address)", +"9e3809a9": "setFiscalVerify(bytes32,bytes32,bytes32,uint256,uint256,uint256)", +"9e385fa4": "raiseEmergency(bool)", +"9e38ac15": "ownerShip(address)", +"9e38c76e": "lockRedemption(bool)", +"9e39db38": "initChestsStore()", +"9e3a33b2": "_fetchPaidOrdersForMerchant(address)", +"9e3b34bf": "times()", +"9e3b77af": "lendingManager()", +"9e3b94f1": "CONFIRM_LIMIT()", +"9e3b9dc1": "secondTarget()", +"9e3c671c": "citizensAddresses()", +"9e3cd3f5": "_calculateRepayment(address,address)", +"9e3d0636": "numOfDeliveredCrowdsalePurchases()", +"9e3d154e": "vote(bool,bool,bool)", +"9e3d1b99": "Bakt(address,bytes32,address)", +"9e3d2d06": "totalEtherBetValue()", +"9e3d49db": "walletBounties()", +"9e3d7809": "setParamsTransfer(bool)", +"9e3df458": "twentyThirtyAllocation()", +"9e3e230b": "setSubmissionClosed(uint256)", +"9e3e6878": "allCatsAssigned()", +"9e3edce9": "setImageHash(uint256,string)", +"9e3f1f71": "isPartOfOrg(string)", +"9e416812": "creditGameAddress()", +"9e4195f1": "releaseOrderStakes(address,uint256,uint256)", +"9e41a9cd": "viewCertificateByCourse(address,string)", +"9e41b73f": "getWeapon(uint256)", +"9e422447": "clamp(uint256,uint256,uint256)", +"9e4307cf": "_95_ebetSmartContracti()", +"9e43692c": "FOUNDATION_POOL_TOKENS()", +"9e439ff8": "thirdPeriod()", +"9e455939": "getContractAddr()", +"9e459174": "_addDroneInternal(address)", +"9e45de73": "PieceTransferred(uint256,address,address)", +"9e45e0d0": "darknodeRegistry()", +"9e47214a": "isHarvestEnabled()", +"9e4734ba": "nextTimeout()", +"9e484dd4": "getMembersOfTierCount(uint256)", +"9e48d2fd": "setPayouts(uint256,string)", +"9e4902c9": "ZZCoin(address)", +"9e492aa6": "updateBLAddress(address)", +"9e497967": "CosmicPowerToken()", +"9e49e976": "importIssuerData(address[],uint256[])", +"9e4a5ade": "tokenICO()", +"9e4a613f": "setCertificate(string,string,string,uint256,uint256,string,string)", +"9e4a993b": "getGameStake(uint256,address)", +"9e4a9f2f": "SCComplianceService()", +"9e4ba1be": "testBuyTwoTokens()", +"9e4ba75b": "donateDividends()", +"9e4be339": "getPartners(address)", +"9e4bec3f": "senderIsProvider()", +"9e4c1357": "purposeWeiRate()", +"9e4d4d0c": "updateIcoEnding(uint256)", +"9e4ea320": "getterForTest(uint256)", +"9e4ece80": "getInvestorUnPaidAmount(address)", +"9e509af3": "NggaToken()", +"9e51051f": "initialRate()", +"9e524caa": "subMinutes(uint256,uint256)", +"9e5288a0": "getStep()", +"9e536132": "GetUserPools(address)", +"9e5406bf": "paymentWithCurrency(address,string,uint64,string)", +"9e544fff": "unclaimedReward(address)", +"9e551567": "PonziToken()", +"9e570d6f": "updateFighterStats(uint256,uint8,uint8,uint8,uint8,uint32)", +"9e58280c": "profit2()", +"9e584658": "newStandardCampaign(string,uint256,uint256,address)", +"9e58963f": "_clear(address)", +"9e58ad97": "getNormalCardList(address)", +"9e58cfd1": "decreaseBeneficiaryBalance(address,uint256)", +"9e58e1a7": "_addPartExperience(uint256,int32)", +"9e58f77f": "AddCandidateResult(uint256,address,uint256,uint256,uint256,uint256)", +"9e5914da": "setReferral(address)", +"9e59eb14": "getAllocated(address)", +"9e5ad3ea": "test_insert_findNoHintUpdateHead(int256)", +"9e5b241a": "getBorrowInfoByIndex(uint256)", +"9e5b53bb": "Crowdsale(uint256,uint256,string,string)", +"9e5cdaf0": "initialBankrollGrowthAmount()", +"9e5d0258": "regularDonations(uint256)", +"9e5d4c49": "executeCall(address,uint256,bytes)", +"9e5e86fa": "setEnforceKyc(bool)", +"9e5ece98": "updateLockDate(uint256)", +"9e5ee522": "tokensSoftcap()", +"9e5f1889": "partner2_address()", +"9e5faafc": "attack()", +"9e6031c6": "ZigZagToken()", +"9e60f8d6": "getPlayerSpaceshipBattleWinsById(uint256)", +"9e6371ba": "retire(address)", +"9e639858": "winPercent()", +"9e647aac": "getParameter(string)", +"9e6480fa": "A(uint256,string,string)", +"9e654dfa": "redeemForkedTokens()", +"9e65741e": "exchangePrice()", +"9e65a03a": "cancelSellCityForEther(uint16)", +"9e65c7e5": "updateLatestRevision(bytes20,bytes)", +"9e65fab0": "priceIsFrozen()", +"9e66cd38": "free(uint64)", +"9e67fa6a": "createArtwork(string,address,uint256)", +"9e686c0d": "getStaffLength()", +"9e687b6c": "retrieve(bytes32,address)", +"9e68ca82": "preValidatePurchase(address,uint256)", +"9e69383d": "TokenBatchTransfer()", +"9e697cd3": "startDateOfRestoreUnsoldTokens()", +"9e6985e2": "setbuyPrice(uint256)", +"9e6992b5": "BcengCoffeeToken()", +"9e69940d": "eachAirDropAmount()", +"9e69a6d2": "bountyTokensNotDistributed()", +"9e69c732": "take(string,string)", +"9e69f2bb": "premine()", +"9e6a5767": "previousTokenVesting()", +"9e6af2e3": "exchangeEthStb(uint256,uint256)", +"9e6afbda": "decreaseSpeed(uint256)", +"9e6b0faf": "addTimeForOpponentSelectForGladiatorBattle(uint256)", +"9e6bcba5": "getBoostFromTile(address,address,address,uint256)", +"9e6bdea0": "RegisterChallengeCreators(address,string)", +"9e6c0877": "__hasRole(uint256,uint256)", +"9e6cb42b": "voteEndTime()", +"9e6d4cd0": "joinRaceAndFinish(uint256,uint256)", +"9e6d6925": "setper(uint256,uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"9e6d95c7": "checkHGame(uint256)", +"9e6eda18": "fee(address,uint256)", +"9e6f2ea2": "Kin()", +"9e6f505b": "BiigoToken(address,uint256)", +"9e6fb394": "companionsListCount()", +"9e7010a8": "Dashidai()", +"9e72942c": "getBoosters()", +"9e72a9d8": "sendToMarket(uint16)", +"9e750316": "pushBlock(uint256,uint256,bytes32,bytes32,string)", +"9e757e7f": "bookOVISSale(uint256,uint256,int256)", +"9e75a7c8": "bitplusAddress()", +"9e75c483": "busted(uint256,uint256,uint256,uint256)", +"9e761bbb": "beneficiaryList(uint256)", +"9e76a007": "removeConverter(address)", +"9e76e30d": "tokenRateUsd()", +"9e776ff5": "getTotalBattleboards()", +"9e79800d": "getOwner(uint16,uint8,uint8)", +"9e7a13ad": "people(uint256)", +"9e7b8d61": "giveRightToVote(address)", +"9e7cf86b": "changeSettings(uint256,uint256,uint256,uint256)", +"9e7d101e": "setMaxLeaders(uint256)", +"9e7d24df": "move(bytes32,uint256,uint256)", +"9e7e514b": "DiceGame()", +"9e7fec98": "owner_time_limit()", +"9e80138c": "LendConnect(address)", +"9e80b731": "test_threeValidAssertFalse()", +"9e80cab0": "ownerSetRecommendProportion(uint16)", +"9e8110e6": "setQuery(string)", +"9e813938": "expiresAfter(address,uint256)", +"9e817c03": "ROUND_LENGTH()", +"9e81c4b3": "sendFunds(address,uint256,uint256,uint256)", +"9e81e254": "_getMaximum(bytes32)", +"9e8385d6": "regadr(address)", +"9e83abe3": "newExit(address,uint256,uint32[])", +"9e84158e": "setPLATAddress(address,address)", +"9e845173": "getCCH_edit_34()", +"9e84d44d": "challengerConvicted(uint256)", +"9e8558a0": "setSellExchangeRate(uint256)", +"9e85742e": "approveEscrow(uint256,uint256)", +"9e86d7a8": "setVnt(address)", +"9e86f8c5": "RequestFactory(address,address,address)", +"9e86fb86": "investOffer(uint256,uint8[])", +"9e87a5cd": "getPriceFeed()", +"9e87c1c6": "getLastSingle()", +"9e87fac8": "Paused()", +"9e8836e2": "THORToken()", +"9e890cb3": "netAmountBought()", +"9e893d64": "TheUltimateWorldDigitalCurrency()", +"9e8a0f57": "getWinRate(uint256)", +"9e8a41f4": "getOutCar(uint256)", +"9e8ab40c": "ICOReserveWithdrawn()", +"9e8af7e9": "migrateInvestorFromHost(address)", +"9e8bf603": "curReleaseAmount()", +"9e8c3543": "setAuditAuditor(uint256,address)", +"9e8c39ed": "updateHolidayState(uint8,string)", +"9e8cfe20": "insert(int8,int8)", +"9e8e23b7": "lastBlock_v5()", +"9e8e3ef4": "nftExits(uint16,uint256)", +"9e8e4add": "changeTurnLast(uint256)", +"9e8ee59a": "addNewTicket(address,uint256,uint256,bool)", +"9e8f152c": "showLock(address)", +"9e8f2750": "withdrawInviteReward()", +"9e8fcbe9": "previousRoundId()", +"9e906157": "FundingRules()", +"9e90ce6c": "tokensIssuedForBonusRangeOne()", +"9e90f9aa": "blackHole()", +"9e916157": "STAGE_2_START()", +"9e9188ea": "setDividends(address)", +"9e918c0a": "setMaxArtworks(uint16)", +"9e9198c2": "layers(uint256)", +"9e920587": "testOwnedAuth()", +"9e92448e": "setRepAvailableForExtraBondPayouts(uint256)", +"9e925746": "_checkAndCallSafeTransfer(address,address,uint256,bytes)", +"9e92c991": "getTotalRollMade()", +"9e92dfd8": "getFiatTransactionsCount(string)", +"9e931e6b": "getRequesters(bytes32,uint256)", +"9e93d0e4": "reinvestReturns(uint256)", +"9e945ff2": "amendPurchase(uint256,address,uint256,uint256,uint256,string,uint256)", +"9e9548cb": "LabelSold(address)", +"9e95670d": "erc20Received(address,uint256,address,uint256)", +"9e9593ce": "RewardPoolAddress()", +"9e95f280": "setRatePreIco(uint256)", +"9e962b39": "minimumContributionPhase1()", +"9e964025": "bonusTokenThreshold()", +"9e965f7e": "revertSuspendedPayment()", +"9e96a23a": "give()", +"9e975ca6": "NSPToken()", +"9e976d38": "toMonth(string)", +"9e9785ad": "payoutCursor_Id()", +"9e985ea6": "changeControllerContract(address,address)", +"9e987b20": "treePot()", +"9e997121": "getConfigAddress(bytes)", +"9e9a783a": "canCallWithAssociation(address,address)", +"9e9a87e5": "agree(address)", +"9e9aed62": "contractTokenBalance()", +"9e9b6d06": "createOption(bool,address,uint128,uint128,address,uint64)", +"9e9bdb9b": "setMaxTransactions(uint16)", +"9e9ce791": "BrainLegitCoin()", +"9e9d0718": "Invested(address,uint256,uint256)", +"9e9d3aa4": "FirstBloodToken(address,address,uint256,uint256)", +"9e9e5b85": "ARIToken(address,address)", +"9e9ea24b": "PRE_ICO_TOKENS()", +"9e9eb444": "winFreeGo(uint256,uint256)", +"9e9ec9e3": "getHashAddresses()", +"9ea03ccb": "fundingUnlockPeriod()", +"9ea064b2": "getLevelConfig(uint32,uint32)", +"9ea0b8f0": "addTeamGrant(address,uint256,uint256,uint256)", +"9ea0c08c": "announcementName()", +"9ea134bf": "getRedeemableReputationStaker(bytes32,address)", +"9ea1b79d": "getContentChannel(uint256)", +"9ea2104d": "firstReleaseAmount()", +"9ea23080": "STQPreICO3TestHelper(address,address[])", +"9ea27016": "setTokenIdsIndex(uint256,uint256)", +"9ea28b5c": "VestingMemberAdded(address,uint256,uint256,uint256)", +"9ea30fae": "getPokemonOwner(uint256)", +"9ea407be": "updateTokensPerEth(uint256)", +"9ea480ec": "allowanceFlower(address,address)", +"9ea55bb0": "updateFeeAmount(uint256)", +"9ea57930": "stampIn(address,uint256,uint256)", +"9ea58112": "setLethalBonusAtHits(uint256)", +"9ea67876": "returnNumber(uint256)", +"9ea69541": "updateTileBlockValue(uint16,uint256)", +"9ea71c37": "getDesignatedReportingDurationSeconds()", +"9ea73895": "hitCharacter(uint16,uint16)", +"9ea76475": "subFreezingTime()", +"9ea776cd": "currentFundingRound()", +"9ea82706": "removeRealWorldPlayer(uint128)", +"9ea8a418": "updateFunds(uint256,uint256,uint256,bytes,bytes,bool,bytes32,bytes32)", +"9ea94877": "getLandIdByKey(bytes8)", +"9ea98d55": "intersect(address[],address[])", +"9eaa4812": "isLastMilestoneAccepted(bytes32)", +"9eab0e29": "FinalisedCrowdsale(uint256,uint256)", +"9eab503a": "dividendAddr()", +"9eab5253": "getMembers()", +"9eabebe7": "setTransferTime(uint256)", +"9eacc166": "transferAnyERC20Token(address,address,address,uint256)", +"9ead1478": "setMaxAnimals(uint16)", +"9ead1b00": "loanBalanceOf(address)", +"9ead7222": "tokenList(uint256)", +"9eadd77c": "roundMoneyDownNicelyET(uint256)", +"9eae2453": "setSchedule(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,uint256)", +"9eae6555": "earlyContribList()", +"9eaeca9f": "getTokenReturnRate()", +"9eaeccf1": "TestToken(string,string,uint8,uint256)", +"9eaf17a1": "getCarveUpTokens()", +"9eb05f3a": "EarlySuccess()", +"9eb0ad03": "Exchange(address,address,address,uint256,uint256,uint256,uint256)", +"9eb180a7": "identifierToPrice(uint256)", +"9eb20aa7": "setPetLastTrainingTime(uint64)", +"9eb32fdb": "initializeContract()", +"9eb360cc": "updateRausPoint(int256,uint16,int256,uint16)", +"9eb44784": "getTokensForPresale()", +"9eb45706": "get_previous_asset_document_from_document(bytes32,bytes32)", +"9eb4da1c": "okamiTotalPurchase_()", +"9eb51bf1": "Goodluckcoin()", +"9eb59e00": "updateCursETHtoUSD(uint256)", +"9eb6c932": "ResetAllAmount()", +"9eb7294d": "transferRemainingTokens(address,uint256)", +"9eb7d170": "withdrawPendingBalance(address)", +"9eb81bd0": "unFreezeTransfers()", +"9eb866cc": "isBonusTime()", +"9eb8cbf3": "set_activity_details(uint256,string)", +"9eb9c68f": "stepBonusList(uint256)", +"9eb9dd3b": "getBetsProcessed()", +"9eba0196": "DYCOIN()", +"9ebafad6": "getLastAttackCount(uint256)", +"9ebb1250": "withdrawFinal()", +"9ebb5d3c": "getFreeCraigGrant()", +"9ebbf231": "setMinOrderSizeEth()", +"9ebc8c95": "isNeedLoan()", +"9ebca4ad": "setMasterRecruitmentAddress(address,address)", +"9ebe13a2": "END_ADDRESS()", +"9ebe4d98": "percentageQuarter2()", +"9ebee96c": "buyVirtTokens(address,uint256)", +"9ebf6d92": "Whitelist()", +"9ec0505a": "BING(uint256,string,string)", +"9ec12cfa": "sellsIngrWithoutDepletion(address,uint256,string)", +"9ec272b4": "getPremiumPack(uint256)", +"9ec32d45": "challengeWinningOutcome(bytes,uint16)", +"9ec35352": "returnRandom()", +"9ec3a90c": "verifyTimelock(bytes32,address,address,uint256,uint256,bytes32,bytes,bytes)", +"9ec40d1c": "checkCode(string)", +"9ec5a894": "rewards()", +"9ec68f0f": "multiSend(address,address[],uint256[])", +"9ec7486a": "GiveERC20()", +"9ec760df": "_sendMoney(address,uint256)", +"9ec7888f": "Available()", +"9ec79e99": "requestConsent()", +"9ec7e1c6": "nOS()", +"9ec8b026": "sort(uint256[])", +"9ec8eec9": "TokenImpl()", +"9ec92d42": "getSecondPhaseCap()", +"9eca085c": "isSupervisor()", +"9eca672c": "withdrawFor(address)", +"9ecbf341": "adminRescueFunds()", +"9eccf691": "setICOEnd(uint256)", +"9ece1d9c": "WeiToEther(uint256)", +"9ecf12cb": "HEART(uint256,string,string)", +"9ecf9037": "getNumberDonators()", +"9ed153c0": "master(address)", +"9ed1e4c6": "singleDigitBlock()", +"9ed26fe8": "setEtherInUSD(string)", +"9ed3b61b": "getTrustContract()", +"9ed3edf0": "transactionFee()", +"9ed44c91": "CharitySplit(uint256)", +"9ed474b3": "author2()", +"9ed49005": "completeIcoPart1()", +"9ed4ad43": "getMax(uint8[])", +"9ed53f88": "starExists(uint256)", +"9ed57360": "getPaintingSpeed(uint256)", +"9ed58c7a": "provideData(address,address,uint256,bytes)", +"9ed5c84c": "salePeriod()", +"9ed74a23": "createCloneToken(uint256,string,string)", +"9ed7772c": "OwnerSetPrizePool(address)", +"9ed78285": "GENEOS()", +"9ed78489": "Worldtvcoin()", +"9ed78df0": "PRESALE_TOKEN_SOFT_CAP()", +"9ed798be": "CrestToken()", +"9ed81bc9": "deregisterProducer(address)", +"9ed93318": "create(address)", +"9ed99951": "changeBntyController(address)", +"9eda7d23": "isContributor(uint256,address)", +"9edc7b44": "revokeStack(bytes32,uint256,uint256,uint256,uint256,uint256)", +"9edcebbb": "updateTabRap(bytes32)", +"9edd1bd2": "TestEvmStack()", +"9eddc441": "lockedAccountThresholdUsd()", +"9eddfb1b": "delay_pool_change_block(uint256)", +"9ede7a37": "voteCount(uint8,uint8,uint8)", +"9eded57a": "paybackLast()", +"9ededf77": "width()", +"9edf256d": "getShipPrice(uint256)", +"9edf42ff": "pendingNumbers(address)", +"9edfb647": "senderAllowedFor(address)", +"9edfb9ee": "acceptOwnershipOfVesting(address)", +"9ee035c9": "lookupCanonicalFormat(bytes)", +"9ee04661": "withdrawTeamFunds()", +"9ee06759": "setSquarePrice(uint8,uint256,address)", +"9ee0933f": "joinBounty(address)", +"9ee1bd0f": "whoIsOwner()", +"9ee22f9a": "setCompte_32(string)", +"9ee29ef2": "updateTargetToken(address,uint16,uint16)", +"9ee3518e": "setTeamMember(address,uint256)", +"9ee398ce": "getTierStartAndEndDates(uint256)", +"9ee484ce": "withdrawCerneuTokens(address)", +"9ee5451d": "PriceOneDisable()", +"9ee5555f": "setGovTax(uint8)", +"9ee60142": "_processBonus(address,uint256)", +"9ee61c9d": "testExistingVoteWeight()", +"9ee679e8": "requestWithdrawal(uint256)", +"9ee6a7c3": "onlineTime()", +"9ee6c0e1": "test_2_someTest()", +"9ee6ff70": "testSafeMul(uint256,uint256)", +"9ee71fae": "LogPolicyDeclined(uint256,bytes32)", +"9ee7fbd9": "extraRate(uint256,uint256)", +"9ee837f5": "total_empire_score()", +"9ee85a23": "Bitstoken()", +"9ee85a9f": "isPreSaleTokenRaised(uint256)", +"9ee8e2ff": "_addAmountBlocks(uint256)", +"9ee8fa93": "yearLength()", +"9ee94556": "TestTokensMigration(address)", +"9ee9c8b5": "chetan(uint256,string,uint8,string)", +"9ee9dd5c": "vault_state()", +"9eea480f": "TotalRequestsAmount()", +"9eea4a3a": "address2()", +"9eea67e8": "_addPerk(uint8)", +"9eeaa7f4": "exitDuration()", +"9eeb30e6": "turnoff()", +"9eeb4920": "setLockup_simus(address,uint256,uint256)", +"9eeb5a6a": "Manageable()", +"9eeb6c11": "setBatchCeateDrawingsAddress(address,address)", +"9eeb79b2": "buildUrl(address,uint256,uint256)", +"9eec22e7": "reclaimEtherDeadline()", +"9eec4bac": "payoutFromContract()", +"9eec6e89": "TokenLogic(address,address,address)", +"9eed8369": "neWon()", +"9eee5787": "Standard_1()", +"9eee8041": "getPointSize(uint32,int256)", +"9eee85fe": "bookEarnings(address,uint256)", +"9eeea0d0": "PAOCoin()", +"9eeef510": "bidCustomAuction(uint256,uint256,address)", +"9eef6f65": "addRequest(address,address,bytes32)", +"9eefdd87": "enableAddress(address)", +"9eefde81": "BasicKNOW()", +"9ef0653c": "setICO4Phase()", +"9ef065bb": "fDiv(uint256,uint256)", +"9ef1204c": "vote(bytes32,uint256)", +"9ef13593": "decayedBalanceOf(address)", +"9ef1fbc4": "MudshotsToken()", +"9ef279d1": "burn(address[16],uint256)", +"9ef27b00": "closedAt()", +"9ef35c01": "setJackpotFeePercent(uint256)", +"9ef36bd1": "queueCount()", +"9ef40238": "getcoinsvotes(string)", +"9ef45a31": "someFunction2()", +"9ef46973": "guessFlip()", +"9ef48a31": "setBonusTokenRateLevelThree(uint256)", +"9ef5233f": "setByteSize(bytes32,uint256)", +"9ef53400": "getStaticArraySize()", +"9ef63e97": "paybackToOwner(address)", +"9ef6bf79": "store_ETH_to_contract()", +"9ef6ca0f": "left33(uint256)", +"9ef7a463": "exchangeRateForETH()", +"9ef7e723": "withdrawContractToken(uint256)", +"9ef887ec": "makeItRain(address[],uint256[])", +"9ef916ab": "setOriginalSupply()", +"9ef95545": "CheersWangToken()", +"9ef965d1": "RealEstateToken()", +"9ef974bb": "checkGlobalBalance()", +"9ef9df94": "transcoderTotalStake(address)", +"9efa776d": "tokenFallback(address,uint256,uint256[])", +"9efbae81": "FundTransfer(address,address,uint256)", +"9efbc411": "PICOPSCertifierUpdated(address,address)", +"9efc0190": "YORITEX()", +"9efc81fe": "minimal_token_sell()", +"9efc94a6": "kycLevel()", +"9efd1f0c": "startNextEra_(bytes32)", +"9efe6454": "Rena()", +"9efedc91": "getMyAccuAmount()", +"9efeefa5": "betAgainstUser(uint256,uint256)", +"9effb6a6": "CrowdFunding(string,string,string,uint256,address)", +"9f00237b": "minContribution(uint256)", +"9f005920": "accept(address)", +"9f00c0de": "btycsubmoney(address,uint256)", +"9f020d3a": "equalsNoCase(string,string)", +"9f022f05": "IMDEXsetAdmin(address,bool)", +"9f03711a": "withdrwleftovereth(uint256,address)", +"9f03c3b8": "hicsTokenPrice()", +"9f03d82f": "CGTToken()", +"9f047f3c": "fundProject(string)", +"9f04873d": "VILLAGE_INCREASE_RATE()", +"9f04996d": "bid(uint256,address)", +"9f052fea": "setMintRequestAddressMap(uint256,int256,string,address)", +"9f054b15": "SushiCoin()", +"9f05a36d": "getEnd()", +"9f0650d9": "etherPriceUSD()", +"9f06a579": "ViewBet(address,uint256)", +"9f06aa08": "collateralize(uint256)", +"9f0812cb": "_registerIfNeeded(uint256)", +"9f084b3a": "CAMS()", +"9f08a68c": "working()", +"9f08fc38": "subGlobalBlockValueBalance(uint256)", +"9f095e88": "asdf()", +"9f0a11ee": "buyPrice_wie()", +"9f0b17e3": "forward_transaction(address,uint256,bytes)", +"9f0b7f16": "Foo(string)", +"9f0be144": "getGreeksBattlePointsBy(address)", +"9f0d5f27": "depositAll(address)", +"9f0d6d0f": "ship(uint256,address)", +"9f0de490": "challengeOutcome(int256)", +"9f0e1986": "createGen0Auction(uint256,uint64)", +"9f0e3107": "get_timestamp(bytes32)", +"9f0e591b": "ABCDToken()", +"9f0e7d44": "companyReserves()", +"9f0eed0f": "GetCurrentICOCycle()", +"9f0f78ca": "profitsTotal()", +"9f10a990": "userEntries(address)", +"9f117317": "releaseManyStakes(uint256[],address[],address[])", +"9f118536": "initiated()", +"9f11e9cd": "setRegistrant(uint256,address)", +"9f126281": "updateFirstBuyer(bytes32,uint8,bytes32,address)", +"9f12fde0": "modifyBet(uint256,uint256)", +"9f1306cb": "P3DReceive()", +"9f132677": "MAX_CONTRIBUTION_WEIS()", +"9f13c4c7": "sealableProperties(uint256,bytes32)", +"9f147c41": "tokenPriceInCent()", +"9f15e729": "setgamecardname(uint256,string)", +"9f161d39": "BaseCrowdsale(uint256)", +"9f165304": "STAGE_PRESALE_ETHRaised()", +"9f166cf1": "multiBalanceOf(address,address[])", +"9f16b7d0": "setStarAuction(uint8,address,address)", +"9f16d65f": "fifthMonthEnd()", +"9f16f0e2": "_deposit(uint256,uint256,address,uint256)", +"9f174c6f": "AIRDROP_SHARE()", +"9f180cf1": "calculateAccountValues(address)", +"9f181b5e": "tokenCount()", +"9f184dd5": "aggregateValues(address,address)", +"9f186edb": "setSpawner(address,bool)", +"9f19296b": "getGroupStatistic(uint256)", +"9f1aa404": "refundAllInvestorTokensPurchases(address)", +"9f1ae1c1": "FSATToken()", +"9f1ae6ac": "MAX_CARS_TO_GIFT()", +"9f1b3bad": "Receive()", +"9f1cda42": "ValidateEventStorage(bytes,bytes)", +"9f1eaa4c": "getUnsoldTokensWithDecimals(uint256,uint256)", +"9f1f07fe": "iWAMToken()", +"9f1f238e": "isChecksumValid(bytes32)", +"9f1f2d77": "_updateReferrerFor(address,address)", +"9f203255": "setAuditor(address)", +"9f204a47": "sendIncentivisation(address,uint256)", +"9f21edf6": "setLevelPAO(uint256,uint256,uint256,uint256)", +"9f223167": "ownerEth()", +"9f22af8e": "add2Y(address,uint256)", +"9f233c76": "Seiyuu()", +"9f237b43": "deathData_v9()", +"9f242bf5": "NUTScoin()", +"9f245957": "totalDiscountedItemsForSale()", +"9f275dec": "investBalanceOf(address)", +"9f2763d2": "newPurchase(string)", +"9f28f7c4": "toSCL(uint256)", +"9f28f8c2": "changeWhitelistedAddressCapAmount(address,uint256)", +"9f296b62": "getPaymentTotal(address)", +"9f29e1a1": "thisContractTokenBalance()", +"9f2a1471": "erc820Registry()", +"9f2a6374": "platformWalletAddress()", +"9f2b03b6": "LAB()", +"9f2b22c7": "CanYaCoin()", +"9f2bbcfd": "LoggerAuthorized(address)", +"9f2bc32b": "preITO()", +"9f2c1fd8": "ERC20(uint256,string,uint8,string)", +"9f2c9503": "mintAndLock(address,uint256)", +"9f2ccbcc": "buyAnimalsFromAnimalFactory(string,string)", +"9f2ce678": "vote(bytes32,bool)", +"9f2e0f9c": "managePlayer(address,uint256)", +"9f2e7ce3": "prevXRPCToken()", +"9f2eaf4e": "verifyCanWithdraw(address,address,uint256)", +"9f2ee8b8": "getBlocksByOwner(uint256,uint256,address)", +"9f2f077c": "totalTransformedTokens()", +"9f2f58ec": "void_race()", +"9f2ff221": "teama()", +"9f2ffaff": "_0xGoldToken()", +"9f30ca9a": "getOpenBidsByBidder(bytes32,address)", +"9f318ae8": "HKHCToken(address,uint256)", +"9f31de2e": "updateTokensForCloudexchangeTeam(uint256)", +"9f327124": "ReflexCoin()", +"9f329b15": "SpareCurrencyToken()", +"9f334696": "isNumRed(uint8)", +"9f337cce": "_createTeam(string,address,uint256)", +"9f33d9cb": "joinAsBuyer()", +"9f34ab0c": "PXGToken()", +"9f34ce14": "activateConflictResolution()", +"9f351fc0": "totalRedeemedCheque()", +"9f35910c": "getTeamOwner(uint32)", +"9f35caee": "getAllChainIDsOfUser(address)", +"9f35d3b2": "start(string,string,uint256,uint256,uint256,uint256)", +"9f37092a": "buyItem(address,uint256)", +"9f373a7a": "updateCandidate(address,string,string,uint256)", +"9f37b53f": "verificationSlashingPeriod()", +"9f396cff": "voteAgainst()", +"9f3c4416": "claimInheritance()", +"9f3ce55a": "sendMessage(address,uint256,bytes)", +"9f3d7b0b": "addProposal(address,uint256)", +"9f3e1846": "EscobarcoinToken()", +"9f3edbe1": "emissionStatusUpdate(bool)", +"9f3ef430": "payTokenHolderBasedOnTokenCount(address,uint256)", +"9f3f736a": "LIMITED_ADMIN()", +"9f3fab58": "a(bytes32)", +"9f3ff73a": "setExternalCurrencyProcessor(address)", +"9f403a3d": "addProfit(address,address,uint256)", +"9f406c8b": "isPreICOFinished()", +"9f408251": "TaTaTu()", +"9f4085fd": "setAddressKYC(address,address)", +"9f4216e8": "userList(uint256)", +"9f4283fa": "jdaleveridgesyscoin()", +"9f43daf7": "sendEthTweet(string)", +"9f43ddd2": "expirationTimestamp()", +"9f4478a2": "modifyRate(uint256)", +"9f44b34c": "EXT_COMPANY_TWO()", +"9f44fa19": "FeedbackUpdated(uint256,uint8,bytes32)", +"9f454f2b": "LEU(address,uint256)", +"9f45b45c": "getModuleByName(uint8,bytes32)", +"9f45c8ec": "nodeCheck(bytes32)", +"9f45f982": "PATH(uint256)", +"9f489e4e": "getDeposit(uint256,address)", +"9f494565": "LogMint(address,uint256)", +"9f49cefb": "addStage(uint256,uint256)", +"9f4aaaef": "asmName(address)", +"9f4ba0ee": "setInitialPrice(uint256)", +"9f4cd0ef": "current_item_index()", +"9f4e8405": "updatePaymentManager(address)", +"9f4f4808": "setCrowdfundAddress(address)", +"9f4f903e": "TicketToken()", +"9f4f9886": "getRateAt(uint256,uint256)", +"9f4fae14": "getAmountWeeklybyNum(uint32,uint8[4])", +"9f509ab1": "FUNDING_PRESALE_MAX()", +"9f5185b6": "EventCashOut(address,uint256)", +"9f51cf67": "balance_available_for_custom_voting()", +"9f5215dd": "availSupply()", +"9f5227c2": "confirmWithdrawal(address,string,uint256,string,address)", +"9f52b74e": "apt()", +"9f52f381": "startAllocation()", +"9f530cc9": "JACKPOT_CHANCE()", +"9f535821": "mint(uint256,uint256,string,uint8,bytes32,bytes32)", +"9f536edd": "setScore(address)", +"9f53e07b": "channelMaxSize()", +"9f544434": "sendFood(address,uint256)", +"9f548613": "MyUserToken(uint256,string,string)", +"9f549015": "Max_Mintable()", +"9f54c01c": "addProducer(bytes32,uint256,bytes1)", +"9f54c24f": "LogGive(address,uint256,string)", +"9f550293": "getTotalRaised()", +"9f55857d": "testBazMethod(uint32,bool)", +"9f55ecab": "currentVotingDate()", +"9f569ab4": "requestOfTime(address,uint256)", +"9f569e66": "sendTokensTo(address[],uint256[])", +"9f572048": "getCanvasByOwner(address)", +"9f5755ae": "announcement()", +"9f577c15": "setContractProvider(address)", +"9f57d16e": "getCurrentJackpot()", +"9f5892a7": "hash(string,uint256,uint256,address)", +"9f58d881": "executeOr(bytes32,bool)", +"9f591fa5": "deathData_v15()", +"9f59fc5a": "GetConsentDirectives()", +"9f5a5ff8": "Police_4()", +"9f5a851f": "configure(uint256,uint256,uint256,uint256,uint8,address)", +"9f5a9b7c": "getTotalBurnt()", +"9f5ac8f7": "creator(bytes32)", +"9f5b1d2c": "GITHUB_LINK()", +"9f5bd866": "setNodalblockURL(string)", +"9f5c11c4": "two_card()", +"9f5c671e": "MultipleErrorsContract()", +"9f5ce849": "CNT_Token()", +"9f5cfe03": "roundsCount()", +"9f5f0520": "myVault()", +"9f5f0826": "_bonusToPartners(uint256)", +"9f5f7c7f": "tokenSplit(address,address,address,uint256)", +"9f5ff50a": "calcTokens(uint256,uint256,uint256)", +"9f614b61": "addTitleTransfer(string,string,string)", +"9f6163ee": "lastBlock_v4()", +"9f621075": "ICO_AllowPayment()", +"9f624701": "DZONetwork()", +"9f6264d3": "setArray(bytes32,bytes32[])", +"9f62e202": "CrowdSale_AssignOwnership(address)", +"9f637851": "endICODate()", +"9f63f5c3": "approveLoan(address,uint256)", +"9f64b6fb": "sendAffiliateValue(uint256,address)", +"9f654dd2": "sellTokensIco()", +"9f659296": "createCardForAcquiredPlayers(uint256[],address)", +"9f65f242": "Itube()", +"9f665e1a": "offerAccepted(address,uint256)", +"9f668bba": "getGameIds()", +"9f674147": "accruedBonus(uint256,uint256)", +"9f674eb3": "myAccessLevel()", +"9f678cca": "drip()", +"9f6822b4": "startEscrow(bytes20,address,uint256)", +"9f684a0d": "disableATMExchange()", +"9f69b5a0": "updateEscrow(uint64,uint256,uint256)", +"9f6a4fbe": "CyteCoinERC20Token()", +"9f6b4cce": "BetPlaced(address,uint8,uint256)", +"9f6bd2a9": "isArbitrator(address)", +"9f6c20f6": "MRC(uint256,string,string)", +"9f6c3dbd": "join(address,address,uint256)", +"9f6dcd9d": "ETHtoZCOrate()", +"9f6e3456": "SOPHIYA()", +"9f6e4bb5": "weiAllowedToReceive(uint256,address)", +"9f6f99ee": "updateAPIPublicKey(bytes)", +"9f6fb2ba": "createRichContract(string)", +"9f6ff2e1": "EInvoicingRegistry()", +"9f70c3dc": "doWithdraw(address,address,uint256)", +"9f70db12": "removeEmployee(address,address)", +"9f727c27": "reclaimEther()", +"9f73bef1": "getSubjectsCount()", +"9f73dbc0": "getCurrTeamSizes()", +"9f7496ec": "_firstUnlockAmmount()", +"9f753df6": "MELON_BASE_UNIT()", +"9f75ccc8": "onSuccess()", +"9f75e990": "ReceivedCall()", +"9f7623b8": "sign(address,address)", +"9f769807": "setTokenState(address)", +"9f77920c": "Revoke(address)", +"9f789a0c": "setSchellingRoundDetails(uint256,uint256,uint256)", +"9f7904af": "available_with_bonus()", +"9f7a2ef5": "TEAMmint()", +"9f7a53a1": "sendBountyBalance(address,uint256)", +"9f7b0fc8": "getParent(address,uint256)", +"9f7b4579": "create(uint256,uint256)", +"9f7b967e": "SampleERC677Token(address,uint256)", +"9f7ba828": "getTokenToEthMakerOrderIds(address)", +"9f7c8851": "otherSupply()", +"9f7c94aa": "payoutWinners()", +"9f7d9f62": "deprecateDefenceSubtype(uint8)", +"9f7d9f92": "AggiungiMiner(address,bool)", +"9f7e03cc": "deposit70Percent()", +"9f7e1fed": "Lock(bytes)", +"9f7ed5b8": "startTimeTLP1()", +"9f7f0784": "appVersionListAt(bytes32,uint256)", +"9f7f2bd1": "createDog(uint256,address)", +"9f7f760c": "SimpleDice()", +"9f7ff381": "COMPLETION_STATUS()", +"9f8049ea": "distributeELTCLarge(address[])", +"9f807962": "buyMorties()", +"9f80d1b2": "presaleGoing()", +"9f810510": "ZONTEX()", +"9f8106cf": "transferAllUnsoldTokens(address)", +"9f819b13": "updateFunders(address,bytes32,string)", +"9f81c4d6": "bitcoingo()", +"9f83008a": "teamReserveWallet()", +"9f839d22": "getOptionPair(address,uint256,address,uint256,uint256)", +"9f853717": "duplicates(uint256)", +"9f855bd5": "shipLocation(uint16,uint16,address)", +"9f856de5": "doPurchase()", +"9f871242": "computeTokenAmount(uint256)", +"9f8743f7": "getRound()", +"9f87acd0": "exec(bytes32,bytes32,uint256)", +"9f87f419": "closeTierAddition()", +"9f881e0b": "MobSquads()", +"9f881f46": "checkPassed(address)", +"9f8970dd": "bountyTokensAccount()", +"9f8a13d7": "isActive(address)", +"9f8abede": "fixPermission(address,address,uint8,bool)", +"9f8adeb8": "givecandyto()", +"9f8ae5d3": "roundFourTime()", +"9f8aef2b": "ERC721Token(string,string)", +"9f8c45cf": "getQuestionDetails(uint256)", +"9f8c7c4c": "insertSums(uint256)", +"9f8e8209": "Cillionaire()", +"9f8f0dc3": "test_twoValidEqBool()", +"9f8f4c45": "developerPctX10()", +"9f8f4fb5": "withdrawAcquisitionsToken()", +"9f8f9b8e": "SetEvaluate(uint256[],uint8,uint64[])", +"9f8ff91d": "getSponsorFee()", +"9f90279e": "f_priv()", +"9f903ff6": "setEmitter(address)", +"9f90688a": "SmartCityToken(address,uint256)", +"9f912d25": "abort(uint16)", +"9f915aca": "Tier_Starter()", +"9f91d145": "draftNewCardWithReferrer(address)", +"9f923388": "secondStageTokensSold()", +"9f9248c7": "DepositInterest(uint256,address,uint256,uint256)", +"9f927be7": "getNextCall(uint256)", +"9f941f69": "getDesignatedReportingEndTime()", +"9f943039": "Ethershares()", +"9f94d684": "irreducibleOf(address)", +"9f94fb7a": "endAtkBoss()", +"9f95de64": "transferToGrant(uint256,uint256)", +"9f961c5a": "salesPipe()", +"9f963c4e": "periodPercent()", +"9f96de0f": "getResourceCount()", +"9f9727ce": "QuotaManager(address)", +"9f977b21": "getBob(uint256)", +"9f97a024": "testEscapedQuoteInString()", +"9f97d937": "start_declaration()", +"9f97fdbb": "setDonationReceiver(address)", +"9f9827fa": "adviserPart()", +"9f98985d": "endGame(uint256,uint256)", +"9f98a45a": "fillOptionOrder(address[3],uint256[3],uint256[2],address,bool,uint96,uint8,bytes32[2])", +"9f98df30": "give(address[],uint256)", +"9f98e0f3": "addMerchant(address,string,string)", +"9f9936e7": "BullToken()", +"9f9938fa": "SILALAHI()", +"9f9a9b63": "getCategoryLength(bytes4)", +"9f9a9b7d": "NDUXBase()", +"9f9ae633": "LademiA()", +"9f9b1048": "holderExists(address)", +"9f9b3d98": "softcap2Reached()", +"9f9b4c9d": "Unhalted(uint256)", +"9f9ea29d": "decodeLock(bytes)", +"9f9eac67": "ChangeName(string)", +"9f9f1fbe": "getRegionTax(uint16)", +"9f9f83dd": "remainingIssuableSynths(address,bytes4)", +"9f9fb968": "getDeposit(uint256)", +"9f9fe6bb": "acceptProvider(address)", +"9fa0f763": "buyDrugs()", +"9fa0fc4c": "pgoVault()", +"9fa2526f": "offline()", +"9fa45fa6": "sellMyStake()", +"9fa46754": "releaseBonus(address,uint256)", +"9fa4b6cb": "BetDex()", +"9fa50ab2": "voteDescription()", +"9fa5adca": "buyP3D(uint256)", +"9fa5df9c": "decreaseAllowed(address,uint256)", +"9fa5e5d5": "setARKowner(address)", +"9fa6a6e3": "current()", +"9fa6f886": "NewParticipant(address,uint256,uint256,uint256)", +"9fa778d8": "UECToken()", +"9fa77b20": "reserveOf(address)", +"9fa80c6e": "rewardDistributionEnd()", +"9fa8e5a0": "SetEvaluate(uint32,uint8,uint64)", +"9fa92f9d": "home()", +"9fa9440c": "BDAYSALE()", +"9fa9559c": "getLastYearOfInflation()", +"9fa95bfe": "_emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", +"9fa987d5": "curPosition()", +"9fa9b04c": "ADVISOR_ONE()", +"9faa3c91": "beta()", +"9fab63c7": "ICOBIDToken()", +"9fabf4da": "remainigTokens()", +"9fac68cb": "burn(uint256,bool)", +"9fac6ddc": "withdrawLeftoverWei()", +"9fac9abf": "icoHasEnded()", +"9faceee4": "MemeToken()", +"9fad2dcb": "setTaxInBps(uint256)", +"9fae8fd8": "GayBananaToken()", +"9faea9c6": "setUnavailableFlat()", +"9faec3c9": "adminWithdraw(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32,uint256)", +"9faec927": "withdrawChunk()", +"9faefe0c": "sendNow(uint256)", +"9faf52ee": "teamTwoVolume()", +"9faf6fb6": "removeAddress(bytes32)", +"9faf7000": "manualSend(address,uint256)", +"9fafcf72": "PersonaRegistry(address)", +"9fb03244": "softcapMainSale()", +"9fb03c7f": "countLayersGasLimit(uint256)", +"9fb14d9b": "getRemainingBytesTrailingZs(uint256,bytes)", +"9fb1b5fb": "setJackpotGuaranteed(uint256)", +"9fb25d9e": "LeaderMessage()", +"9fb31475": "refundable(bytes32)", +"9fb3b7dc": "_setWeights(uint256[])", +"9fb3d489": "cancelProposalByCreator(uint256)", +"9fb42b1f": "numRequests()", +"9fb4c63d": "assertEq21(bytes21,bytes21)", +"9fb4d1b0": "_getDepth(uint256)", +"9fb52b6e": "dividendsGetPaid(uint256)", +"9fb5bdb9": "registerAsSeller(address,string,string,string,string)", +"9fb632c1": "private_withdrawBankFunds(address,uint256)", +"9fb65754": "FishProxy(address,address)", +"9fb65968": "presaleTokensDistributed()", +"9fb69839": "getTransactionInformation(uint256)", +"9fb6c796": "mint(bytes32,uint256,string)", +"9fb755d7": "setHotWallet(address)", +"9fb8657b": "getNodes(string)", +"9fb876c0": "getAllOwnersClaimPriceOfCard(address)", +"9fb8dd1a": "getBaseLockPercent()", +"9fb95205": "getWithdrawSum()", +"9fba2578": "summaryData(address)", +"9fbc6a1a": "EtherHellHydrant()", +"9fbdcef0": "setauctionotherfree(uint256)", +"9fbf538f": "addApprovedBattle(address)", +"9fc04ce2": "setMaxReferrerTokens(uint256)", +"9fc18031": "getNodesBatch(bytes32,bytes32)", +"9fc18d4b": "migrateDisabled()", +"9fc1d0e7": "forcedTransfer(address,address,uint256)", +"9fc1ff30": "InooviToken()", +"9fc20f60": "priceForSaleAdvertisement()", +"9fc21eeb": "wdrawBfr()", +"9fc23a74": "totalContractsAvailable()", +"9fc3587a": "releaseSupply(uint256)", +"9fc39549": "removeInvestorList(address[])", +"9fc3b4e7": "checkQuorum(uint256)", +"9fc3e53a": "controlstampdissolution(bool,uint256)", +"9fc53f30": "getIdByHash(bytes32)", +"9fc5852e": "BytePeachCoin()", +"9fc5ce2a": "initialMint()", +"9fc6ceac": "SponsorsQty()", +"9fc6d585": "percentageRecipient2()", +"9fc71314": "KontolToken()", +"9fc71b31": "transferToken(uint256)", +"9fc75354": "isMasternodeOwner(address)", +"9fc7a200": "startNumber()", +"9fc880f4": "weiRaisedAfterDiscounts()", +"9fc89294": "productTypes(uint8)", +"9fc8ed76": "serviceAtIndex(uint256)", +"9fc9141d": "calculateHash(bytes8,uint256,uint32)", +"9fc91980": "JoailyToken(uint256,string,string)", +"9fc9278e": "returnAnyERC20Token(address,address,uint256)", +"9fc9ceb8": "HRWtoken(uint256,string,uint8,string,address)", +"9fc9d6c0": "FrannickToken()", +"9fcaa5ef": "extendMembership(uint256)", +"9fcb114c": "addSomeTokens(uint256)", +"9fcb29fc": "_assign(address,address,uint256)", +"9fcb7100": "approveAndCall(address,int256,bytes)", +"9fcbc6f1": "bitvimToken()", +"9fcbc738": "setIntermediate(address)", +"9fcc4767": "set_referral_fee(uint8)", +"9fcdec61": "buyPresale()", +"9fce2d80": "didCommit(bytes32,address)", +"9fce5c8e": "indexOf(address[],address)", +"9fce89a4": "intercrypto_recoverable()", +"9fcf11bb": "determineCurrentStage()", +"9fcf4115": "updateRoundEndTime(uint256)", +"9fcf89ee": "lastBlock_a13Hash_uint256()", +"9fd033ed": "isHolder(address,address)", +"9fd03ed8": "XENIA()", +"9fd0506d": "pauser()", +"9fd1bd1f": "changeSelfAddress(address)", +"9fd1e7f6": "purchaseTokensERC20(uint256)", +"9fd3ad34": "setFunds(address,uint256)", +"9fd4da40": "totalInitialSupply()", +"9fd4f7d1": "replaceWizard(address)", +"9fd52984": "burnAfterSoldAmount()", +"9fd547fb": "PayeeWithdrawCapital(address,uint256)", +"9fd55832": "BrancheProportionalCrowdsale(uint256,uint256)", +"9fd58182": "withdrawManagerIncome(bytes32)", +"9fd64fea": "findAuditor(address)", +"9fd6adb3": "unVote(uint256)", +"9fd6d285": "AirdropMined(address,uint256)", +"9fd6db12": "mintingEnabled()", +"9fd7ca8a": "getCurrentTrancheIdx(uint256)", +"9fd859ee": "disablePreminer(address,address,address)", +"9fd8914d": "GameAAAToken()", +"9fd8b4f1": "redirectToPurchase()", +"9fd8bfb3": "voteCandidateOne()", +"9fd8c361": "CHECKgamberOne()", +"9fda3675": "MYYG()", +"9fda5ad2": "confirmedTimesByOwners()", +"9fda6271": "setElectionInfo(uint256,uint256,uint256)", +"9fdb35e7": "retriggerDrawOnOraclizeError()", +"9fdc0ea6": "getDirectoryLength()", +"9fdc3255": "_permittedPartnerTranferValue(address,uint256)", +"9fdc4d13": "isBuyable(string)", +"9fdc53b1": "registerLoanReplace(address,uint256)", +"9fdd32cd": "_drawFailure(uint32,uint8,string)", +"9fdd983f": "setAmount(uint256,uint256,uint256,uint256)", +"9fddd5a7": "SeedTestToken()", +"9fde4ef8": "winningOption()", +"9fdeeb5e": "teamVestingContractAddress()", +"9fdf057f": "setMiningToken(address)", +"9fdf9625": "seizeForWork(address,address,uint256,bool)", +"9fe005e8": "horseShoeNotForSale(uint256)", +"9fe03c59": "PayForPrivKey(address)", +"9fe14580": "BONUS_TIER_1_LIMIT()", +"9fe17cc2": "icoContractAddress()", +"9fe21fc4": "depositAndInitiate(uint256,bytes32,address,uint256)", +"9fe304a0": "catch_the_thief(address)", +"9fe34d9f": "isAllowedUser(address)", +"9fe39d85": "CHINESE_EXCHANGE_1()", +"9fe4712d": "schedule(address,bytes,uint256[8],uint256)", +"9fe4b663": "buyTokensInternal(address,uint256,string)", +"9fe5e868": "NewWallets(address,address)", +"9fe634b9": "getReleaseAuctionEndTime(uint256)", +"9fe6999a": "tokensFor1EthP5()", +"9fe72acd": "airDropsClaimed()", +"9fe7ac12": "removeBool(bytes32)", +"9fe7ba47": "updateFirstUnionIds(bytes32,bytes32)", +"9fe802f1": "transferEx(address,uint256)", +"9fe81f52": "changeTimeLimitMinutes(uint256)", +"9fe93231": "ICOEndedSuccessfuly(uint256,uint256)", +"9fe9bde0": "tripleRoomMin()", +"9fe9f623": "setTransferEnabled(bool)", +"9fe9fc1a": "SoldBlock(uint256,uint256,uint256,uint256,uint256,address)", +"9feb8d23": "amendClaim(uint8,uint8,uint8)", +"9fec4ac4": "SputnikPresale(address)", +"9fec8e3b": "addToWhiteListMultiple(address[])", +"9fec8e96": "claimedAmounts(address,address,uint256,address)", +"9fecb69f": "finishGame()", +"9fecf214": "XChain(uint256,string,string)", +"9fed35a6": "createBulkContributions(address[],uint256[])", +"9fed39c5": "numWhitelistedInvestors()", +"9feda172": "totalRice()", +"9fedb749": "setTeam(uint256,string)", +"9fee14ae": "getAllot(bytes32,uint8,uint8)", +"9fee597b": "extractEther()", +"9fef0ae1": "BetherFund()", +"9fef26ce": "buyTokens(address,uint256,string)", +"9fef93f8": "buyKey(uint256)", +"9ff00adc": "betOnOddEven(bool)", +"9ff031ce": "createEscrow(uint256,uint256,uint256,address,address)", +"9ff12bba": "removeContractMiniGame(address)", +"9ff1b56f": "lockInTime2()", +"9ff25fa4": "InitialDateChange(uint256,uint256)", +"9ff32b18": "grantAllowanceProxyAccess(address)", +"9ff33fd1": "getByInternalId(uint256)", +"9ff34878": "IPTVcontract()", +"9ff3487f": "ConsumerRemoval(address)", +"9ff36b54": "isClientPayed(uint256,address)", +"9ff390c1": "currentTotalBuyin()", +"9ff394a8": "goShort()", +"9ff4125a": "ICOendTime()", +"9ff47485": "isBetPossible()", +"9ff512fa": "getTransactionDetail(uint256)", +"9ff61487": "myBackerToken()", +"9ff652cb": "setToContractAddr(address)", +"9ff71ccb": "modifyCategory(uint256,string,string)", +"9ff7422d": "SurgeTestToken()", +"9ff7971b": "setWeiPerToken(uint256)", +"9ff8c63f": "issueMaxSynths(bytes4)", +"9ff9007d": "lastweek_winner1()", +"9ff93088": "settleGame(uint256,uint256)", +"9ffa0711": "CashOut(uint256)", +"9ffa43ce": "buyFST(address)", +"9ffaf32e": "resourceDelete(address,bytes4)", +"9ffb2ed5": "showRewards(address)", +"9ffbb57f": "SongTokenAdded(address,bool)", +"9ffc981f": "getDepositOwner(address)", +"9ffcc4c3": "getPayoutCumulativeInterval()", +"9ffd1c10": "TrueFlipICO(address,address,address,address,address,uint256)", +"9ffdb65a": "validateName(string)", +"9ffea547": "_purchaseOneUnitInStock(uint256)", +"9fff19ef": "_setValidatorWrotePart(uint256,address)", +"9fff37e0": "JACKPOT_SIZE()", +"a000812c": "Y1_lockedTokenReleaseTime()", +"a000aeb7": "weiReceived()", +"a0013419": "ShanxiCoin()", +"a001ecdd": "feePercentage()", +"a001ef87": "TestOneToken(string,uint8,string)", +"a00223ec": "_recordFirstClaimTimestamp(uint256)", +"a002b179": "getCandidateForApoderado(bytes32)", +"a003371e": "PreICOEarlyDays()", +"a003651d": "getNumberOfChoices(bytes32)", +"a0041286": "changeURL(string)", +"a00413bd": "resetReportTimestamp()", +"a004737a": "startPrePreIco(uint256)", +"a004ee5a": "isCustodianOf(address,address)", +"a00545b2": "claimPrize(address,uint16)", +"a00553a5": "WinnerIndex(uint256)", +"a005b87b": "NullMapTest()", +"a006b0e2": "_regName(bytes32)", +"a006e0e5": "phaseTwoLimit()", +"a0071552": "sellItem(uint256,uint256,uint256,uint256)", +"a007bc45": "getRateStages(uint256)", +"a008d288": "Pethreon(uint256)", +"a008d893": "isReferee(address)", +"a008f5eb": "_isNativeToErcBridge(address)", +"a0099b60": "deltaEFunc(uint256,uint256,uint256,uint256,uint256,uint256)", +"a00a3440": "mainSale1Limit()", +"a00a7a6d": "determineNewRoundMostInviter(uint256,uint256)", +"a00aede9": "scheduleCall(uint256,address)", +"a00afaa0": "ADMIN_GET_FEE()", +"a00b043e": "bonusTokenVault()", +"a00b603c": "getDNI()", +"a00c0a28": "Log2(string,uint256,uint256)", +"a00c3e72": "ExtendLife()", +"a00c9374": "afterSaleMinting(uint256)", +"a00ce377": "getIsContractValid()", +"a00ce6a5": "mintForReportingParticipant(address,uint256)", +"a00d7740": "setCUSDAddress(address)", +"a00d7b27": "myFirstHelloWorld()", +"a00dc9dd": "changesp1(address)", +"a00ddad1": "verifyBalance(address)", +"a00ec993": "setStarRate(uint256)", +"a00ee946": "existAccount(uint256)", +"a00f198a": "confirmOrder()", +"a00f64d6": "_soldOutsidePMZ()", +"a00f77e1": "getMemInvestor(address)", +"a00fd3c8": "register(uint256,string)", +"a00fd7c8": "getPayOut()", +"a00fe86b": "SaleAborted(uint256)", +"a00fff6f": "pendingManager()", +"a0109c9f": "incrementFee()", +"a0111086": "ParentFee()", +"a0113f18": "isCrowdsaleFull(address,bytes32)", +"a0129b00": "redeemSurplusETH()", +"a01317cb": "BlockHipo()", +"a0132df2": "validationTime(address)", +"a0135b2b": "updatefee(uint256)", +"a0135d04": "seSigner(address)", +"a013ab77": "isBuilt(uint256)", +"a013ad54": "BONUS_DURATION()", +"a013e4d0": "GouShiTokenFunc()", +"a014b9bd": "addReferralOf(address,address)", +"a015cb10": "claimOwnerEth(uint256)", +"a01701dc": "capPerAddress()", +"a01729a4": "communityCliff()", +"a0175360": "Approval(address,address,address,uint256)", +"a0175b96": "changeAllCosigners(uint256,address[],uint256[3],bytes,bytes,bytes)", +"a0179949": "feeAccount1()", +"a017ed35": "G12Coin(uint256,string,uint8,string)", +"a0187f91": "DataExternalValidation(address)", +"a0189345": "outOfLimitAmount()", +"a018f2b2": "delegateProxyAssert(address,bytes)", +"a0193ff9": "allowed_contract()", +"a01a3a07": "LogTicket(uint256,address,uint256)", +"a01a478c": "getEnemyCombinationOfAddress(address,address)", +"a01a4cfa": "getMyInstancesOfAPackage(uint256)", +"a01b0c27": "getRegisteredContract(uint256,uint256)", +"a01bc729": "monster_attack(uint256)", +"a01bc8f6": "setdaily(uint256,uint256)", +"a01bfa79": "adminWithdrawBCEOPreSale()", +"a01c144e": "addPriceChange(uint256,uint256)", +"a01c489d": "setMaxFeeTrade(uint256)", +"a01c62f7": "isTransferLocked()", +"a01cb43d": "WithdrawFee(uint256)", +"a01de7ae": "BFToken()", +"a01e1a21": "setPendingReserveData(address,uint256,address)", +"a01e5490": "isUnconfirmedGblock(bytes32)", +"a01eacc2": "Aerosyn()", +"a01fdbef": "approvePullRequest(bytes32)", +"a0214c1c": "mintClose()", +"a02172d3": "getAssData(uint256)", +"a0218b66": "getAccountAmount(uint256)", +"a021d76d": "deleteIssuer(uint256)", +"a022ac81": "test3Args()", +"a022c15e": "getTaskReward(bytes32)", +"a022da29": "increaseLoanOnBehalfOfRecurse(address,address,bytes32,uint256,uint256)", +"a022e283": "APOLLOCOIN_COMPANY_AMOUNT()", +"a0234a91": "supplyLockedA()", +"a023d4a7": "Redicon()", +"a023e7d3": "updateTrustRankAfterStoryExpiry(bytes12)", +"a023ea47": "burnAdminTokens()", +"a024284d": "participantsForCustomSale(uint256,address)", +"a024ea16": "MAX_BOUNTY_ALLOCATED_TOKENS()", +"a025bcc3": "calculateFee(bool,bool,uint256,uint256)", +"a026348c": "pitboss()", +"a0263a5a": "addgodaddress(address,address)", +"a0268aea": "fcomToken()", +"a026946d": "ieth()", +"a026d7c4": "SunflowerToken()", +"a026da8c": "teamClaim(uint256)", +"a0270dbc": "resolve(uint8)", +"a02745af": "setarg_2_input(uint256)", +"a0275c05": "appendStock(uint256)", +"a02853ef": "BitcoinExchange()", +"a028554e": "setInitialMintingPowerOf(uint256)", +"a0285c01": "initiateChange(bytes32,address[])", +"a028aa1b": "distributeVariable(address[],uint256[])", +"a028d749": "caculateFee(address,uint256,uint8)", +"a028e63c": "setName(uint256,bytes32,bytes32)", +"a02a338a": "tokensPerOneETH()", +"a02a34cd": "skinOfAccountById(address,uint256)", +"a02b114c": "setArray(bytes32,address[])", +"a02b161e": "unregister(uint256)", +"a02b1a51": "getPaid(bytes32)", +"a02b7fbe": "MANAGEMENT_TEAM_SUPPLY_LIMIT()", +"a02b9aac": "getPaymentDataByAddress(address)", +"a02c40e1": "qbxSourceToken()", +"a02c4b97": "holdAddress5()", +"a02c5279": "testIntegerKeyValue()", +"a02cf937": "feePct()", +"a02d2376": "SubContract()", +"a02e98df": "getAdd(bytes32)", +"a0305398": "getOtherMapValue(uint256)", +"a030b8e6": "restartsys()", +"a03189b3": "devPayed()", +"a03243cf": "getMinimumTribute()", +"a0326040": "weekPot()", +"a0326fae": "_removeFromList(address,uint256)", +"a033fcd4": "collectFees(address,uint256)", +"a0340625": "unfrozen()", +"a03435d1": "authorizerAddress()", +"a0345fca": "finalize(bytes)", +"a034b6cb": "vote(uint256,uint256,uint256,string)", +"a0354921": "setSTMPPrice(uint256)", +"a0355eca": "setTime(uint256,uint256)", +"a0355f4e": "decline(uint256)", +"a035b1fe": "price()", +"a036f0f8": "getUsableXPA(address)", +"a0376dfe": "getAskByUserID(uint32)", +"a0378730": "addReceivers(address[],uint256[])", +"a0385e1c": "superTransferFrom(address,address,uint256)", +"a038af35": "GetChallengeBetsInformation(uint256)", +"a0392897": "_decreaseApproval(address,address,uint256)", +"a039e3c7": "testSetNotTransferable()", +"a03b1ea9": "_getFee(uint256,uint256)", +"a03b66e5": "ZilleriumPresale()", +"a03c5832": "getPermissionParam(address,address,bytes32,uint256)", +"a03cc0b2": "setExchangeToken(address)", +"a03d0f06": "lockAccount(address,bool)", +"a03df051": "rentedLand()", +"a03eb806": "recoverAddressFromSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes)", +"a03f254f": "getWebsocketUri()", +"a03f633a": "resetListing(bytes32)", +"a03fa7e3": "transferTo(address)", +"a03fb4c0": "makeTradeable()", +"a0417c9a": "updateAsset(uint256,string,uint256,uint256)", +"a0422d02": "COLOR_NOT_AVAILABLE()", +"a0422d31": "getApiById(uint256)", +"a0426fb2": "preSaleEnded()", +"a0428bbc": "balancesStaticoin(address)", +"a042b9c1": "newComment(bytes32,bytes32,string)", +"a04369f8": "addBoosterQuest(address)", +"a0437f63": "rewardBounty(address,uint256)", +"a043bb16": "tokensBoughtInBonusProgram()", +"a0440426": "purchaseProduct(uint256,uint256)", +"a044b070": "a(address,uint256)", +"a0452bfb": "dividendFee_()", +"a045fdff": "scheduleCall(address,bytes)", +"a0469b02": "inputToDigit(uint256)", +"a046c5f6": "NewStaticAdr(address)", +"a0472d6c": "blocksInADay()", +"a0489ac2": "draining()", +"a0493834": "unconfirmedSum()", +"a04a0908": "execute(address,bytes,uint256)", +"a04a59cc": "randMod()", +"a04a6ac8": "auctionEndPrice()", +"a04a7b1f": "getPoolMinStakeQspWei(uint256)", +"a04a85c0": "checkFrozen(address)", +"a04b3c2d": "mine_jade_ex(uint256)", +"a04bd02f": "getIsStartable(uint256)", +"a04cc350": "_addDefaultOperatorByTranche(bytes32,address)", +"a04ce2c5": "setArrayIndexValue(bytes32,uint256,uint256)", +"a04d4c60": "getDataColla_001_001(string)", +"a04da725": "SEXNToken()", +"a04e34bc": "weiAllowedToReceive(uint256,uint256,uint256,uint256)", +"a04f7bd1": "MMONToken()", +"a04fce5b": "MINDBODYToken()", +"a050975b": "requestReclaimContract(address)", +"a050d07d": "getNumWizards()", +"a05190f4": "BOT_ELEMENT_2()", +"a051b6b1": "phase_5_rate()", +"a052c595": "addTrustedPartner(address,string,string)", +"a052eae4": "writeStuff(uint256,int256,uint256)", +"a052f024": "addDonator(address)", +"a053ce1f": "referralRate()", +"a053eb9d": "OPERATION_STAKE()", +"a0548d2f": "redistributeLosingReputation()", +"a054cbea": "isPlatform()", +"a054d3ef": "checkWithdrawal(address,uint256,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"a0557818": "getSireId(uint256)", +"a055d455": "run(uint40,uint256,address)", +"a055fe64": "_projectCommitNew(address)", +"a056469a": "extractFeeLength()", +"a0566330": "LJCJ()", +"a05693c6": "clearSmet()", +"a0572fda": "titleIds(uint256)", +"a0577762": "changeTechAccountAddress(address,address)", +"a0579801": "icoStoppedManually()", +"a057dade": "blackListUser(address,address)", +"a05801b7": "metadataOfTokenByIndex(uint256)", +"a05809ff": "calculateTotalPayoutAmount()", +"a058ce51": "DigiCash1()", +"a059ffa6": "createNewTourament(uint256[])", +"a05a1218": "triggerStealManually2(string)", +"a05a70a7": "QTLToken(address)", +"a05b8ed8": "_execute(bytes32)", +"a05bba46": "getAllDepositorsCount()", +"a05c47ca": "ico2Max()", +"a05c7bda": "AuthorizeToTransfer(address)", +"a05d03fd": "currentSale()", +"a05d068d": "foundationTokensVested()", +"a05e1db7": "getBuyerfee()", +"a05e3bb0": "setBasicBallotsPer30Days(uint256)", +"a05e822a": "howManyOwners()", +"a05fc749": "CoinLotto(address)", +"a05fccef": "transferMultiple(address[],uint256[])", +"a0605a79": "ZTTBToken(uint256,string,string,uint8)", +"a060d498": "KillSwitchEngaged(address)", +"a060ecce": "checkPosition1(address,address,uint256)", +"a0617ad0": "totalMaxSupply()", +"a061eba0": "proposeVersion(address)", +"a0626939": "setFoundersTokensReserve(uint256)", +"a06285ed": "CharityInProgressSupply()", +"a062d5fe": "TOTAL_SATOSHI()", +"a063dae8": "equal(int256[],int256[],string)", +"a0641288": "redeemableBalance(address)", +"a064481e": "BokkyPooBahWuzHere()", +"a065a2bf": "distributeFAITH(address[],uint256,uint256)", +"a0660943": "computeSlaves(address,address)", +"a067412b": "assignInitialAddresses(address[])", +"a0684251": "remainder()", +"a068e8d3": "convict(uint256,uint256,uint256,uint256)", +"a068edb5": "determineOutcome()", +"a0695f24": "assertBalances()", +"a0695fc2": "startIcoOne()", +"a06ac637": "listUserRecasts(address,uint256,bool)", +"a06aceb2": "ATCController()", +"a06b7eb0": "decreaseLockedAmount(address,uint256)", +"a06c5a24": "monthlyPrice()", +"a06caae8": "TransactionSettled(uint256,uint256,uint256)", +"a06cab79": "Registrar(address,bytes32)", +"a06ced75": "RESERVE_LOCK_TIME()", +"a06d083c": "credit()", +"a06db7dc": "gracePeriod()", +"a06dd6dc": "emergencyFlush()", +"a06de4d9": "rand8(uint256,uint8,uint8)", +"a06e09f1": "PrivateSale(address)", +"a06e58ac": "isResolvedForComplainant(uint256)", +"a06ef4f2": "icoAmountBonus3()", +"a0712c3d": "feesRateTeam()", +"a0712d68": "mint(uint256)", +"a07245fd": "getHtlcPaymentBlock(bytes32,bytes32)", +"a0726b72": "getPresaleRaisedAmount()", +"a072f02b": "idvRegistry()", +"a0742666": "isParticipant(address,address)", +"a074d5ee": "unClaimedEther()", +"a0759e14": "setEmontRewards(uint256,uint256)", +"a075e164": "setup(uint256,uint256,uint256,bool)", +"a076da7a": "notifyExecuteSellOrder(uint256,uint256)", +"a076e223": "Declaration()", +"a077321c": "restrictUntil()", +"a0775baf": "AUTBToken()", +"a0776a59": "getTokenSupply(string)", +"a07778ec": "icoBonus3EndDate()", +"a077b298": "restrictions()", +"a077c657": "giveRightVote(address)", +"a078f737": "hasUserRole(address,uint8)", +"a0790cb7": "setFreezed(address,bool)", +"a0796236": "rejectWithdrawal(address)", +"a07b206f": "totalWhiteListed()", +"a07b2461": "proveIt(address,string)", +"a07c132b": "setPrevOwner(address)", +"a07c4fcf": "getTapRemaining()", +"a07c765f": "END_TIMESTAMP()", +"a07c7ce4": "burnable()", +"a07c8ed9": "changeName(bytes,bytes)", +"a07c9156": "UpdateWhiteListImplementation(bool)", +"a07da887": "deploy(address,uint256,uint8,address,uint256[])", +"a07daa65": "newRequest(uint256)", +"a07ead73": "setColdWallet1(address)", +"a07f0a98": "DEFROST_AFTER_MONTHS()", +"a07f3a56": "isAttended(address)", +"a07f3bb0": "UpgradeableStandard23TokenMock(address,uint256,bytes32,bytes32,uint256)", +"a07f5f84": "beneficiary3()", +"a07f8f19": "isCrowdSaleFinished()", +"a07fc020": "moveToRST()", +"a080249b": "BonusPoolSupply()", +"a08038be": "setPreferredCurrency(bytes4)", +"a0807404": "setBZxOracle(address)", +"a080c8ba": "getLamboModel(uint256)", +"a081fc19": "deathData_f6()", +"a082022e": "Sell(address,address,uint256,uint256)", +"a0821be3": "availableBalance(address)", +"a0823111": "removeAffiliate(address,bytes32)", +"a08299f1": "divisionby0(uint256)", +"a082c86e": "DEADLINE()", +"a0831fdb": "BNBB(uint256,string,uint8,string)", +"a0836e28": "getaddressret(address,address)", +"a083cb48": "TokenBase(uint256,string,string)", +"a0844bb5": "_computeRarityBonus(uint256,uint256)", +"a0847a95": "updateRoundBalance(uint256)", +"a084af95": "Trust(address[],uint256,address,bytes)", +"a084ee76": "removeReturnAgent(address)", +"a0851928": "convert_valuation_to_art(uint256,uint256)", +"a0852bbd": "SynTokenAddress()", +"a0859845": "emitPreferredCurrencyChanged(address,bytes4)", +"a0876445": "artworkCount()", +"a0877304": "minSale()", +"a08783bf": "Moviecoin()", +"a087ac0c": "perDeadLine()", +"a087ae89": "calculatePeriodsCountAndNewTime(uint256,uint256)", +"a0893ef2": "releaseSupply()", +"a0895ec1": "LogUnfrozenTokens(string,address,uint256)", +"a089feea": "kill_switch()", +"a08aa298": "NewSupplyAdjuster(address)", +"a08b1447": "presaleAmountETH()", +"a08b3367": "EC()", +"a08c0908": "getFiatTransaction(string,uint256)", +"a08d3f83": "Etheropt(uint256,string,uint256,uint256,bytes32,address,int256[])", +"a08df770": "changeRecoveryFromRecovery(address)", +"a08e3f0e": "restTokensMoved()", +"a08e8b36": "totalFunctions()", +"a08ed1cb": "initUnstake()", +"a08f1b09": "getArrUintField2()", +"a08f8428": "BasicTokenWrapper(address)", +"a08fcabb": "setUint(bytes4,uint256)", +"a09037a9": "totalContracts()", +"a09107e1": "only6()", +"a0922e15": "calcTransferFee(uint256)", +"a0927a6a": "authorizedPayments(uint256)", +"a0929cda": "salvageTokensFromContract(address,address,uint256)", +"a092ae25": "getMyAllowance()", +"a094a031": "isReady()", +"a0954a49": "changeEarnings(uint256)", +"a09635b0": "_transferToICAP(uint256,bytes32,uint256,string,uint256)", +"a09686c4": "getRoundsCount()", +"a096ea1b": "bltRetainedAcc()", +"a0979332": "Bitcoineum()", +"a098a04b": "getRandomAnimalId()", +"a0996799": "getMyBulls()", +"a0997b66": "ROLE_RBAC_ADMIN()", +"a0999436": "ESOPAddress()", +"a099ad85": "workingState()", +"a099d079": "getEarlyIncomeByAddress(address)", +"a099e6be": "updateTokenExchangeRatio(uint256)", +"a09a05e0": "AllocateUnsoldTokens(address,address,uint256)", +"a09a1e22": "dealSellContract(uint256,string,uint256,uint256,string)", +"a09ae0aa": "absDiff(uint256,uint256)", +"a09b39ae": "WorldCup(string,string,uint256,uint256,string)", +"a09b7e2b": "totalPresaleBase()", +"a09cca93": "ownerTransferOwnership(address)", +"a09cec67": "_setData(uint256,uint256,uint256)", +"a09d4240": "UacCrowdsale(address,address,address,address,address,address,address,address[])", +"a09d4ae4": "returnTempTokens(address)", +"a09d9c09": "setTransferRate(address,int16)", +"a09ddd4f": "setSaleAgent(address,bool)", +"a09ddf4e": "getCurrentRgb(address)", +"a09de28d": "approveAndCall(address,uint256,bytes,address[],uint256[])", +"a09e3d0a": "getChildCount(bytes32)", +"a09e9c1d": "startBidding(uint256)", +"a09f6691": "LogGetMoneyBack(address,uint256,string)", +"a09f8659": "newConflictRes()", +"a09fb22e": "updateReputation(string,uint256,uint256,string,string,address)", +"a0a0d331": "COMPANY_WALLET()", +"a0a1082a": "createCustomVUP(address,uint256)", +"a0a2b573": "setTimestamp(uint256)", +"a0a2c11d": "ListValSince(uint256)", +"a0a2f629": "setReferralId(uint256,address)", +"a0a337e2": "getSetupFunctions()", +"a0a3ec6d": "getDividentsFromShare(uint256)", +"a0a4cb6c": "reveralSupply()", +"a0a4d9df": "batchTransferORSB(address[],uint256)", +"a0a4f93b": "setGasused(uint256)", +"a0a5cd92": "OkapiToken()", +"a0a695fe": "registerTier1Users(address[])", +"a0a6e940": "finalizePresale()", +"a0a7131c": "test_twoValidAssertFalse()", +"a0a7299b": "feeInBps()", +"a0a76eb0": "charactersOf(address)", +"a0a7dc2e": "withdraw_1Completed()", +"a0a7e0f8": "GameCellCoin(uint256,string,uint8,string)", +"a0a8045e": "getEthUsdPrice()", +"a0a86de3": "PreSaleTokenSoldout()", +"a0a8e460": "contractVersion()", +"a0a95502": "reading_card_count()", +"a0a986f1": "price0()", +"a0aaa87f": "secondStageMinted()", +"a0ab2847": "tfg()", +"a0ab308c": "BidAskX()", +"a0ab7091": "_isCooldownReady(uint256,uint256)", +"a0ab9653": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes,address,uint256)", +"a0abdba0": "allocatorAddress()", +"a0ac47fe": "_ethereumToTokens(uint256)", +"a0ac5776": "claimBooty(uint256)", +"a0acb9dd": "getA(string)", +"a0ad04c0": "changePhaseToICO()", +"a0ad51a6": "KNOW()", +"a0aead4d": "getAssetCount()", +"a0af0127": "world(uint256,uint256,uint256)", +"a0af3252": "thirdCurrentAmount()", +"a0afd731": "dividendBalance(address)", +"a0afebbc": "emitContractAdded(address,address)", +"a0affbfd": "upgradeHGT(address)", +"a0b06190": "addOneUserIntoWhiteList(address)", +"a0b091e4": "sellMFCoins(uint256)", +"a0b1b385": "playerSetInput(address,uint256)", +"a0b1f668": "GetRandom_In52(uint256)", +"a0b28861": "createAndBuyAllAmountBuyEth(address,address,address,uint256,address,uint256)", +"a0b2995a": "GetParticipantRole(address,address)", +"a0b2becb": "getLastAcceptedProposals()", +"a0b31d58": "addPacksToNextPremiumSale(uint32[])", +"a0b3bef0": "NVBToken(uint256)", +"a0b4388a": "activateShip(uint32)", +"a0b43a4e": "getWinnerPot()", +"a0b45df2": "transferOwnershipAndToken(address)", +"a0b498a4": "issuedTokens(address)", +"a0b55095": "allGames(uint256)", +"a0b5cf5f": "changeResolverAllowancesDelegated(string,address[],uint256[],uint8,bytes32,bytes32,uint256)", +"a0b65332": "getProposalIdByIndex(uint256)", +"a0b70e87": "capTokens()", +"a0b76d49": "JToken()", +"a0b7967b": "getNextSequenceId()", +"a0b7dcb4": "_transferInternal(address,address,uint256,bytes,string)", +"a0b7ebbd": "isExistingPlayerInBattle(string,address)", +"a0b7f0f8": "updateContributorAddress(address,address)", +"a0b873f2": "updatePlatformFeePercentage(uint8)", +"a0b87d1e": "MuseumsChain()", +"a0b946f0": "calculateMatchWitnessHash(address[],uint256[])", +"a0b9e8d5": "getRaisedAmountOnEther()", +"a0b9f0e1": "checkPause()", +"a0bb233c": "changeFeeAndCheatWarrant(uint256,uint256)", +"a0bb7508": "_addSig(bytes32,address)", +"a0bc572b": "benefactor(uint256)", +"a0bcfc7f": "setBaseUri(string)", +"a0bd1ec1": "hodlerTransfer(address,uint256)", +"a0bd3c0f": "scheduleCall(address,bytes,bytes,uint256)", +"a0bdb04e": "tier1Start()", +"a0bdcd3a": "BCNewToken()", +"a0bde7e8": "getShareDistributionWithTimestamp(bytes32)", +"a0bde945": "buyCity(uint16)", +"a0be06f9": "adminFee()", +"a0be2d9d": "Inco(address)", +"a0bee465": "BrylliteToken(address,uint256)", +"a0befa94": "getStake(uint256,uint256)", +"a0bf0539": "_checkThreshold()", +"a0bf775f": "canTransferBefore(address)", +"a0c01e58": "divForPrice()", +"a0c07002": "ArcBlockToken()", +"a0c16fb6": "HuobiPoolToken()", +"a0c1ca34": "migrateIn(address,uint256)", +"a0c1e119": "unhaltFundraising()", +"a0c32df7": "TRMToken(address,string,string,uint256,uint256)", +"a0c354ea": "getSumAmountOfOpenDeals()", +"a0c3bc68": "setOverflowBounds(uint256,uint256)", +"a0c42ed1": "getPOOL_edit_12()", +"a0c567a2": "blackListActive()", +"a0c57eb4": "checkCrowdsaleState()", +"a0c642bd": "multisendFrom(address,address,address[],uint256[])", +"a0c66283": "ZEROCoin()", +"a0c66b43": "maxActiveCastle()", +"a0c6e65e": "getResourceBalance(uint16,address)", +"a0c73e7c": "HDAToken(uint256,string,string)", +"a0c86718": "assetOwnersIndexes()", +"a0c8ad10": "removeAuthorizedExternal(address,address)", +"a0c8c156": "emptyCart()", +"a0c8e0ff": "testCanSendEthToContractWhenCrowdsaleInProgress()", +"a0c95e24": "disableBuyingTime()", +"a0c96e43": "getCommissionTarget()", +"a0c97bce": "paySeller()", +"a0c99c51": "paymentInfo(address,string)", +"a0ca0a57": "backlogLength()", +"a0cce3d2": "getAssetIdCreator(uint256)", +"a0cde1f0": "finishCrowdCoin()", +"a0ce4ff8": "priya()", +"a0ce8a0e": "SingleSourceAuthority()", +"a0cecb3b": "findOutInterestByBank(uint256,uint256,uint256)", +"a0cf01d4": "MoneroGold()", +"a0cf17da": "amountFunded(bytes32,string,address)", +"a0cf8857": "setTransferFeeAbs(uint256)", +"a0cfbc1b": "getDeploytimeBlocktimeBlocknumber()", +"a0cfc196": "getNumWineryOperation(bytes32)", +"a0d045bc": "AppleToken()", +"a0d0b13d": "addBook(string,string,string,string)", +"a0d0be4f": "calculateValue(uint256,uint8)", +"a0d0ee3b": "buildTokenContract()", +"a0d121a9": "addPolicy(uint256,uint256)", +"a0d1de29": "sendSeedAndHash(bytes32,bytes32)", +"a0d1f9e9": "serviceIncreaseBalance(address,uint256)", +"a0d3253f": "spawn(uint32,address)", +"a0d39949": "_rewardUnnapprovers(address)", +"a0d46c87": "validateRequestParams(address[3],address,uint256[12],uint256,uint256)", +"a0d578f4": "isServerEnable(string)", +"a0d605c6": "addCertificationDocumentInternal(address,bytes32)", +"a0d63f7e": "setDistributionMinimum(uint16)", +"a0d7bb1b": "addReserve(address,bool)", +"a0d80e65": "internalNoter(uint256,uint256)", +"a0d81b21": "ConsentFile(address)", +"a0d87fc2": "burnFromOwner(address,uint256)", +"a0d8848c": "getTicketStartPrice()", +"a0d8ad85": "_updatePayment(uint256,address,uint256)", +"a0d8b4bd": "changePresaleDiscountPercentage(uint8)", +"a0d8b4e9": "ownerMintRate()", +"a0d8e231": "SmartpoolVersion()", +"a0d9669c": "test_invalidAddressNotZero()", +"a0da3236": "ActionMining(address,uint16)", +"a0da7d2e": "addressLocked(address)", +"a0db0a22": "right4(uint256)", +"a0db844f": "F2UPAY()", +"a0dbd8d6": "startBlockNumber_()", +"a0dbde9d": "logBase2(uint256,uint256,uint256)", +"a0dc6b74": "emergencyPay()", +"a0dce445": "nothingLib()", +"a0dd678b": "VCFToken()", +"a0ddb418": "currentKey()", +"a0dde02a": "AftabCoin()", +"a0df9538": "walletOwnerAddress()", +"a0dfc61f": "DICE_LOWER()", +"a0e06c8a": "weekPotHighscore()", +"a0e0c317": "getTradeOfferRecipient(uint256)", +"a0e1001e": "IiinoCoin(string,string,uint8,uint256,int256,uint256)", +"a0e16fed": "getFinalizationTime()", +"a0e1f42c": "addPurchaser(address)", +"a0e23ebd": "openAt()", +"a0e2abf7": "getFirstActiveGamble()", +"a0e4d7d4": "getManifestIdsByName(address,bytes32)", +"a0e5588a": "paymentAction(uint256,address,uint256)", +"a0e5bb69": "setPI_edit_17(string)", +"a0e5e821": "recordDealCancelReason(uint256,address,uint32,uint32,uint256,string)", +"a0e67e2b": "getOwners()", +"a0e6a44b": "getCustomerTxPaymentMCW(address,bytes32)", +"a0e7192e": "requestEthereumLastMarket(string,string)", +"a0e724d3": "ReserveKnown(bool,address,uint256,uint256)", +"a0e7b4dc": "lastAmountSent()", +"a0e8b6b0": "the_address_for_option_A()", +"a0e8d21f": "join(address,string,string,uint256)", +"a0e8ef3d": "SetUSDPerETH_byContract(uint256)", +"a0ea0ef9": "constructionStart()", +"a0ea83dd": "SetSummRew(uint256)", +"a0eaa5dd": "lastTokenIsTransferableNumber(address)", +"a0eb5dd1": "AIRDROP_TOKENS()", +"a0ec4e09": "getUltimateOutcomes(bytes32[])", +"a0ec7f89": "transferPresaleTokens()", +"a0ed4cff": "MiniMeToken(address,address,uint256,string,uint8,string,bool)", +"a0ed6707": "EtopayNetwork()", +"a0eda9f2": "_transferFee(address,uint256,string)", +"a0edc204": "noOfPhases()", +"a0edc671": "USDtoHAV(uint256)", +"a0edcd7a": "burnPercentage100m()", +"a0ee153e": "isOwnerOrApproved(uint256,address)", +"a0ef8647": "BlueToken()", +"a0ef91df": "withdrawEth()", +"a0efe255": "m_categoriesCount()", +"a0f029fc": "ContractorInterface(address,address,address)", +"a0f04c38": "getKittyPower(uint256)", +"a0f0e95f": "DDJBTC()", +"a0f15b87": "registryICAP()", +"a0f1665b": "PriceSet(uint256,uint256)", +"a0f1ba62": "isOpenDistributionSetup()", +"a0f24ea7": "getTotalTokens(uint256,uint256)", +"a0f4a9a9": "Challenge()", +"a0f4d3df": "getRandomForContract(uint256,uint256)", +"a0f52da0": "startMigration(address)", +"a0f561ca": "ExtractDepositTime(address)", +"a0f61310": "FakeRelay(bytes)", +"a0f72985": "PassToken()", +"a0f78572": "Leaderboard()", +"a0f7bbcd": "sendTokensToAdvisors(address)", +"a0f82817": "Max()", +"a0f8be8c": "startOf(uint8)", +"a0fa0fb4": "ConstructorTest(uint256,uint256)", +"a0fa930a": "Ethercoin()", +"a0faf6a1": "getPortion(uint256,uint256,address)", +"a0fb1497": "deleteDocument(uint256)", +"a0fb7f57": "GMET()", +"a0fc4994": "setX(int256)", +"a0fcd161": "depositToken(uint256,bytes32,uint256)", +"a0fe6202": "SHA256(string)", +"a0ff1705": "depositTokenFunction(address,uint256,address)", +"a0ffe7bb": "registerInNewMarketplace()", +"a0fffd5f": "rand(uint32,uint256)", +"a1007e68": "TokenAmountToPay()", +"a10132ad": "callbackGas()", +"a1013abb": "TOKENS_DISTRIBUTED()", +"a1017649": "updateWalletLock()", +"a101c2d3": "time_out()", +"a101f7cd": "bountyFee()", +"a1022294": "Guess(string)", +"a1029aff": "findTile(uint16,uint16,uint16)", +"a102e8a5": "addMeterpoint(int256,address,int256)", +"a103983c": "BitShopperToken()", +"a1049c06": "Zolox()", +"a104dcd4": "changeUpgradeAgent(address)", +"a104e5e1": "recordNewOwner(uint256,address)", +"a1057852": "addToken(address,uint256,string,string,string,string)", +"a106320a": "icoFinalized()", +"a1063d20": "addIntermediateAddress(address)", +"a106832b": "disableInitialAmbassadorStage()", +"a106dbc8": "participantsFor1stSale(address)", +"a106f0bf": "bonusAmtThreshold()", +"a107994e": "test_validProxyOwnershipTransfer()", +"a107ceb6": "affiliateUtility()", +"a10874d9": "SquirrelGims()", +"a1088571": "CEO()", +"a10889fa": "setVersion(uint32,uint32,uint32,string,string)", +"a10954fe": "reserveBalance()", +"a109a089": "addWalletAddress(address)", +"a109b8bd": "feesCal(address,uint256)", +"a10a7782": "defaultReputationReward()", +"a10b10f5": "setFriendsFingersWalletForCrowdsale(address,address)", +"a10b3ffd": "ALLOC_PARTNER()", +"a10bee85": "_transferFromWithReference(address,address,uint256,string)", +"a10c0fd5": "ROLE_MULTIOWNER()", +"a10c44fb": "s18(bytes1)", +"a10cda99": "isWhiteListed(address,address)", +"a10d4f56": "updateCaps(uint256[])", +"a10d6a51": "officialTelegram()", +"a10d80de": "quitBattle(uint256)", +"a10daf4b": "GroupMultiplier(uint256,uint256)", +"a10e057c": "preIcoMinimumWei()", +"a10e6d28": "arbitrationFeePerJuror()", +"a10ec6e5": "initialize(address[4],address,uint256[12],uint256,bytes)", +"a10edc55": "GeneralPurposeProfitSplitter()", +"a10ef122": "WWWToken()", +"a10f0f5a": "addField(string,uint256)", +"a10f42c4": "isICOEnded()", +"a10f43a3": "bountyReward()", +"a10f5610": "authoriseAddress(address)", +"a10fc32f": "setInstantTransfer(bool)", +"a110063a": "createGOP(address,string)", +"a1103f37": "attrUUID(address,uint256)", +"a110d350": "finalPot()", +"a1119bf2": "bountyFeeCount()", +"a111b0da": "InternationalTourismCoin(uint256,string,uint8,string)", +"a111bab9": "totalLockAmount()", +"a11223da": "airdropTokens(address[],uint256)", +"a1130d04": "createTemplateAndAskQuestion(string,string,address,uint32,uint32,uint256)", +"a1131e14": "withdrawSale3()", +"a113bf2c": "ZITOKEN()", +"a114b5ae": "_createZodiac(uint256,uint256,uint256,uint256,address,uint256)", +"a1155286": "deleteOrg(string)", +"a1155f5c": "buyBlockCDN()", +"a1158c43": "commissionCheck(uint256[],uint256[],uint256[],uint256)", +"a1159838": "removeFreeze(address)", +"a115e38f": "VirtueToken()", +"a11674b0": "divsOf(address)", +"a1169d72": "_payChain(uint256,address,uint256)", +"a11748fd": "ReceiveGBP(address,uint256)", +"a1183d50": "FixedSupplyToken()", +"a1188e56": "getCurrentDifficulty()", +"a118babd": "withdrawPayment()", +"a118ca27": "validateStep(uint256[],uint256[])", +"a118f249": "addAccess(address)", +"a1190a36": "withdrawOtherTokens(address)", +"a11976f6": "confirmTransactionAfterDisputeFee(uint256)", +"a119a65a": "gettodayget()", +"a11aab78": "createGame(uint256[],uint256[],uint256,uint256)", +"a11ab71a": "fundsToCommunity(uint256)", +"a11bab06": "GChain(uint256,string,uint8,string)", +"a11df9c7": "PlanetZeroToken()", +"a11e1645": "registrationRights(address)", +"a11e22d9": "toDate(uint256)", +"a11e7f5e": "get_iconiq_presale_open()", +"a11ed157": "setBirthFee(uint256)", +"a11f8de4": "FomoToken()", +"a1206d4e": "setUserContract(address)", +"a1207708": "confirmDividends()", +"a120fdbd": "dayTokenAddress()", +"a1210a69": "endIcoDate()", +"a1211bc0": "finalizeCampaign()", +"a121d8df": "testFailCreateWithParentSameItemId()", +"a122e060": "rateForPhase3()", +"a12301f5": "promethCount()", +"a1232723": "playerPrizes()", +"a123422e": "_setContributor(address,uint256)", +"a12396aa": "setName(uint256,bytes32)", +"a123c33e": "owner(uint256)", +"a12412f0": "CAT_PER_ETH_BASE_RATE()", +"a12433fa": "getLastAttack(uint256)", +"a1243ad3": "mintPartners(uint256)", +"a12498dd": "ownerEnablePayee(address)", +"a125c824": "setDefaultTokenURI(string)", +"a1264994": "setfounderAddress(address)", +"a126c5df": "GAS_TO_AUTHORIZE_EXECUTION()", +"a126d601": "closePosition(uint256)", +"a127cfb6": "LogRequestAccepted(address)", +"a12842cc": "sellMyTokens(uint8)", +"a1291f7f": "ownerTransfer(address,address,uint256)", +"a1298368": "stringEqual(string,string)", +"a129cb94": "summPremineBounty()", +"a129ecda": "SetdivForSellBack(uint256)", +"a12a52dc": "allOwners()", +"a12a6bb0": "KYC()", +"a12c2564": "preEndTime()", +"a12c7dd8": "presaleContribute(address,uint256)", +"a12cad70": "getPayer(bytes32)", +"a12d2de3": "withDrawToPoolOwnerFee(uint256)", +"a12d7e2c": "WubCoin()", +"a12da89f": "Deviser()", +"a12e429c": "getDiscipleNum()", +"a12e55d9": "rollIt()", +"a12e9670": "setMaxETHContribution(uint256)", +"a12ee7ba": "changeMaintainer(address)", +"a12f69e0": "divides(uint256,uint256)", +"a1315b7e": "createPricing()", +"a132a785": "removeOwner(address,bool,bytes)", +"a132aad1": "startPresale(uint256)", +"a132ab82": "startAirdropTime()", +"a132e336": "changeDeedPrice(uint256,uint256)", +"a1338118": "increaseAllowance(address,uint64)", +"a1344589": "vestedTo(address,address)", +"a1347622": "t_Michail2()", +"a1350c00": "migratePropertyOwnership(uint16[10])", +"a13615a5": "desposeBear(address)", +"a1365fda": "dev_streamsLength()", +"a136aadc": "getMinerHashRate(uint256)", +"a136c448": "updateTokenSellingPrice(uint256,uint256)", +"a1391297": "ETH_CLEAR()", +"a139dee2": "_deleteHybridization(uint256)", +"a13a7cee": "createChildren(uint32,uint32)", +"a13ae1ee": "updateTokens(address,int256)", +"a13c24c7": "BithubCommunityToken()", +"a13c58f7": "logCoinAgeRecord(address,address,uint256)", +"a13d2733": "updatePatientHealthData(string,string,uint256)", +"a13d3832": "deactivateTokenSwitch()", +"a13d8ec4": "generateFinished()", +"a13e3351": "transferRefPercents(uint256,address)", +"a13f9e58": "RESERVATION_CAP()", +"a1405522": "MilkCow(address)", +"a140a687": "localsService()", +"a140e4ee": "getDropNotices()", +"a140e79c": "setMinimumDebatePeriod(uint256)", +"a1410994": "intelligentmasschainToken()", +"a141ce6a": "packageOfferInfo(address,uint256)", +"a142040b": "Dil()", +"a142d608": "escapeHatch(address)", +"a1446287": "LKYToken(uint256,string,string)", +"a1448fa7": "secondRewardPeriodPercent()", +"a144a3e0": "whitelistTransferFrom(address,address,uint256)", +"a1450c8a": "XDRAC()", +"a1454830": "getExpirationTime(bytes32)", +"a145492a": "transferToPartnerAccount(address,uint256)", +"a145636b": "artworkIndex(uint256)", +"a14598e6": "changeBonusPercentage(uint256)", +"a14779c9": "airdropWallet()", +"a1490581": "Deal(address,uint256)", +"a1490d50": "getTradeHash(address,uint256,address,uint256,uint256)", +"a14977d5": "getCustomerTxCount(address)", +"a1498f50": "check_result()", +"a14a5648": "bonus02Start()", +"a14b877b": "refundEverybody()", +"a14c1c4f": "setSTO(address,uint256,uint256,uint8)", +"a14c36ce": "dGetPool(uint8,uint8)", +"a14c9bed": "resetCurrentIdTo(uint256)", +"a14cf394": "generateInitialCard(uint16)", +"a14d191c": "PausePublic(bool)", +"a14d427a": "transferBonusToken(address,uint256)", +"a14d6517": "tweetIt(string)", +"a14e0e4e": "runInit()", +"a14e88fe": "firstTokenCap()", +"a14ea9c0": "selfRegisterDIN()", +"a14eaada": "tipCreator()", +"a14fc1e7": "aDropedThisWeek()", +"a14ff857": "setBytes32(bytes32,bytes32,bytes32)", +"a150be7a": "distributionPreIcoCount()", +"a152479c": "_computeNextCommissionerPrice(uint128)", +"a152b23e": "UKW()", +"a15348fa": "TitleRegistry()", +"a1536211": "AtacToken()", +"a153b399": "ZeePinToken(address,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a15404b7": "createUnicornPrice()", +"a15454ba": "payTransactionFee(uint256)", +"a154aa36": "getTotalGoals()", +"a154ce82": "disableContract(address)", +"a155beb8": "buyerDatabase(address,uint256)", +"a156ce7b": "totalReimbursedWei()", +"a157696b": "setWhitelistedOnly(bool)", +"a1578d53": "EventBuyTank(address,uint32,uint32)", +"a157979c": "netOutcomeTokensSold(uint256)", +"a1580f1a": "damage()", +"a1581821": "transferWholeTokens(address,uint256)", +"a158e377": "statusICO()", +"a158e632": "lastLapId()", +"a1594d21": "DividendClaimed(uint256,address,uint256)", +"a159c548": "amountOfTokensPoolC()", +"a159c937": "getReferencePriceInfo(address,address)", +"a15a2289": "GameNumber()", +"a15a8613": "VoteCountPerProcess()", +"a15a9a15": "Presenca()", +"a15afb48": "Replicator()", +"a15b4d2d": "getAllCardByAddress(address,address)", +"a15b53ad": "pre_minContribution()", +"a15b9769": "addRandomClass(uint32)", +"a15bb363": "createBoardHash(bytes32,address)", +"a15c1788": "checkForLog(string)", +"a15cdbf7": "moveERC20Tokens(address,address,uint256)", +"a15d59ce": "totalVestedBalance()", +"a15db1c5": "_validateTokensAmount(uint256)", +"a15e3919": "getCrowdsaleUniqueBuyers(address,bytes32)", +"a16085ce": "the_address_for_option_D()", +"a16094d1": "burnMarketMakerApproval()", +"a160bdf5": "expiration(bytes12)", +"a1616429": "testBitOrSuccess()", +"a1616c92": "hasFreelancerMinRatingsCount(address,address,uint256)", +"a16249e2": "__min__(uint256,uint256)", +"a162a71f": "addToOwnerlist(address)", +"a162c04c": "buyTicketsFor(address)", +"a1636db0": "stepThree(int256)", +"a16383e2": "getTrustedTransferAttotokensValue()", +"a1639c6b": "customerConsents(address)", +"a163a624": "Test()", +"a163c090": "maxArtworks()", +"a164845a": "TheImmortalsPhoto(string,string,address,address)", +"a1654379": "isAllowed(address,address)", +"a1658fad": "canPerform(address,bytes32,uint256[])", +"a1659822": "UncursedToken()", +"a16618ae": "updateClientVersion()", +"a1663c48": "MIN_PRE_FUNDING_GOAL()", +"a1664ae2": "icoStartTimestampStage1()", +"a166b4b1": "addParticipant(address[])", +"a1672717": "getMinContributionInWei()", +"a1687d31": "isPlayer1sTurn()", +"a168d873": "gameAddress()", +"a1696076": "CCH_EDIT_3()", +"a1698315": "setExtraTokensWallet(address)", +"a169ce09": "boom()", +"a16a3179": "multiTransfer(address[],uint256)", +"a16bed3a": "changeTradeFee(uint256)", +"a16c6a73": "setClaim(uint256,uint256)", +"a16c86f7": "withdrawRefund(address)", +"a16cdbb1": "maxLockDuration()", +"a16d5960": "setPartner(address)", +"a16e5326": "CryptoSagaCorrectedHeroStats(address)", +"a16f3774": "getReservedTokens()", +"a16fa142": "generate_token_for(address,uint256)", +"a1702265": "keyEmployeesAllocation()", +"a17042cc": "getMsgValue()", +"a17177a1": "marketingTokensDistributed()", +"a171b694": "RefundIssued(address,uint256)", +"a172045d": "PUSH1()", +"a172db06": "portalAddress()", +"a1731366": "withdraw_to_reward_contract()", +"a173ba2f": "deathData_v2()", +"a1741d0f": "checkLiquidationValue(uint256)", +"a1743410": "_refundExceededValue(uint256,uint256)", +"a1744812": "setMaxCoordinate(uint16)", +"a174a8e9": "addNewColor(string)", +"a174c4c6": "mintAmount5()", +"a176d7c9": "createAndTransfer(address,uint256)", +"a176f6bc": "freezeTimeOf(address)", +"a1775db5": "isContract(address,address)", +"a1779a3d": "getFieldData(uint256)", +"a1784139": "updateChildMinLogos(address,uint256)", +"a1786803": "getCreationCost()", +"a1786d1b": "changeMessage(uint256,string)", +"a1787880": "createCustomToken(string,string,uint8)", +"a17a2685": "canUpdate()", +"a17a9e66": "A(uint256)", +"a17b229d": "total_fund()", +"a17ca853": "round(uint256,uint256)", +"a17cc7eb": "storedData(address)", +"a17d4228": "SingleApproval()", +"a17d5f44": "initializeWhitelist(address)", +"a17d713a": "stringToUint32(string)", +"a17dd26c": "buyWithReferral(address)", +"a17de881": "DigitalIntelligentToken()", +"a17e463c": "NbtToken()", +"a17ea25b": "getAppChainCode(uint32)", +"a17eb09f": "ExtraHolderContract(address,address[],uint256[])", +"a17ecf9e": "kill(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", +"a17eee56": "setGasRefundForClaimLoot(uint256)", +"a17f0bbd": "ICO_BONUS_TIME_3()", +"a17fa5f2": "fillRandomCars(uint256[],uint256)", +"a17feadb": "airdropAmounts(address[],uint256[])", +"a1804e67": "buyWithBalance(uint256,uint256,uint256)", +"a181b040": "SlammerTime(address)", +"a18232e8": "estimateTokenNumber(uint256)", +"a1826a9a": "CMK()", +"a182da60": "crowdSupply()", +"a1837d21": "ChangeBonus(uint256)", +"a183e9a5": "ErrorMessage(string)", +"a18473c2": "RequestCurrencyContractInterface(address,address,address)", +"a1848b61": "someMethod(uint256)", +"a1857f4a": "OTHERCRUISER_MAX_CARGO()", +"a1865376": "changePrice(uint256[],uint256)", +"a186e120": "setTokenTransferState(bool)", +"a18717a9": "addressToPass(address,bool)", +"a1883d26": "setTaxAddress(address)", +"a1885d9b": "whitelistWeiRaised()", +"a18861a3": "getHistoryCount()", +"a1888c34": "setGamblingFee(uint256,uint256)", +"a188b8fd": "accountAddressForSponseeAddress()", +"a188fcb8": "orderDepth(bytes32)", +"a189a487": "status(uint8)", +"a18a186b": "getCurrentOwner()", +"a18a2092": "changeTokenHolder(address)", +"a18a7bfc": "setReferrer(address)", +"a18bf6e9": "addFundAccount(address)", +"a18c1ab0": "burnToAddr()", +"a18c751e": "set(bytes,bytes)", +"a18ccc8a": "transferToWallet(uint256)", +"a18cd06c": "distribute(address,address)", +"a18dda19": "releasePayment(bytes32,address,uint256,address,uint256,uint256,address)", +"a18e0ce4": "addBorrowingItem(address,uint256,uint256,address,bool,uint256,uint256)", +"a18e133e": "registered_racers()", +"a18e2eb9": "left69(uint256)", +"a18ef171": "ALLN()", +"a18f43ef": "hasForfeitedBatch(address,uint8)", +"a18f7567": "Thecap()", +"a18f9b11": "drawWinners(uint256,uint256,uint256)", +"a1900c22": "takeTokenProfits(address)", +"a1903737": "addressOfTokenUsedAsReward5()", +"a1903eab": "submit(address)", +"a190500a": "tokenSecondPeriodPrice()", +"a1907386": "debugLatestPurchaseCentsValue()", +"a1920586": "offer(uint256,uint256)", +"a1920f36": "reservingStep()", +"a192274d": "initializeBread(uint256,string)", +"a192a425": "Founder1()", +"a192fdba": "bonusEnds10()", +"a1931ff9": "tryAnotherOne()", +"a1943113": "devWithdrawn()", +"a1945458": "getIdentityInfo()", +"a1960d80": "deferredKyc()", +"a19638e6": "betsCountToUseFreeBet()", +"a196593c": "findTenAmUtc(uint256)", +"a1965dca": "move(uint8,bytes,uint8,bytes32,bytes32)", +"a196981b": "withdrawCrowdsaleDragons()", +"a196bea0": "isDirectDebitEnable()", +"a1972fc4": "updateDividends(address)", +"a1975c38": "Token77G(address,address,address,uint256)", +"a197c042": "checkCustomer(address)", +"a197ec5d": "excessTokensBurnt()", +"a1988458": "readGlobalPurchasedToday()", +"a198a418": "LKLZ()", +"a1992419": "createCandidateOnElection(uint256,address,address,string)", +"a19b5493": "successed()", +"a19b8766": "transferTEST(address,uint256)", +"a19beba9": "addCompanion(address)", +"a19c1f01": "burnRemainder(uint256)", +"a19c406a": "newIdTankWeapon()", +"a19c9cd1": "getEthfromUSD()", +"a19cb5ee": "addHash()", +"a19db682": "defaultFoundersRewardTime()", +"a19e1d00": "bonusInPreSalePhase1()", +"a19e29a9": "claimUnsold(uint256)", +"a19ed39d": "finalizeFunding()", +"a19ee7a3": "changeMinMakerBetFund(uint256)", +"a19fab4c": "setWhitelisted(address,uint256)", +"a1a04486": "monthLength()", +"a1a0ee90": "LogPolicyApplied(uint256,address,bytes32,uint256)", +"a1a17ec3": "rentSign(uint256)", +"a1a1efe7": "addBallot(bytes32,bytes32,address)", +"a1a200c5": "getRankList()", +"a1a3e4c7": "UserIDChanged(address,bytes32)", +"a1a49a09": "unlockTimes(address,uint256)", +"a1a59f52": "_renew()", +"a1a5d118": "deployNetwork(address)", +"a1a66e56": "deductFunds(uint256)", +"a1a6d5fc": "transfer_(address,address,uint256)", +"a1a71a20": "buyCommon(address,uint256,uint256)", +"a1a71a83": "checkUsernameVerified(bytes32)", +"a1a7405a": "destTokensSgt()", +"a1a74aae": "removeMember(uint256)", +"a1a79f64": "_winAmount(uint128,uint16,uint16,bool)", +"a1a7e68b": "mintTreasuryTokens()", +"a1a85253": "ReturnBack()", +"a1a887b8": "isUserExists(address,address)", +"a1aab33f": "weight()", +"a1aad09d": "setBondPrice(uint256,uint256)", +"a1ab46d0": "DepositReceived(uint256)", +"a1ac727f": "airdrop(address,address[],uint256)", +"a1ac8c56": "balanceOfOwnerAndCreator(address,address)", +"a1acd4b2": "AWD_SHARE()", +"a1acf069": "ArtChainToken()", +"a1ad2b99": "removeExchangeAccounts(address,address)", +"a1ad54e6": "holdingToken()", +"a1ad7cef": "tokenBurned()", +"a1adbb25": "addCandidate(bytes32,bytes32)", +"a1add510": "hasRelation(bytes32,bytes32,address)", +"a1aeb1c2": "paybackToOwner(address,uint256)", +"a1aec173": "COLOR_SILVER()", +"a1af90ad": "funcalls()", +"a1afaa19": "previligedUnLock(address,uint256)", +"a1b0f3a0": "userChallenge(uint256)", +"a1b140b6": "getDistributionStatus()", +"a1b162a8": "set_timeframes(uint256,uint256)", +"a1b16e5c": "returnAgents(address)", +"a1b1cb43": "hasAccess(address,uint8)", +"a1b1e507": "addMintingFactory(address)", +"a1b22154": "preemption()", +"a1b22c19": "delExcluded(address)", +"a1b235af": "popLanguage()", +"a1b258c1": "firstWeekBonus()", +"a1b289dd": "TulipToken()", +"a1b2acc1": "cancelApproval()", +"a1b35c79": "getSection(bytes32)", +"a1b39c38": "_removeMarkets(uint256)", +"a1b3ef4b": "flightDone()", +"a1b40946": "getWordIndex(string)", +"a1b4dd2d": "DXBCToken(address)", +"a1b4f57c": "joinBattle(string)", +"a1b5b581": "ymtest(uint256)", +"a1b608c9": "setMainPoolCutPercentage(uint256)", +"a1b64c86": "TokenMock(string,address)", +"a1b6b1b5": "updateUnlockData(address,address,uint256,bytes32)", +"a1b6d4ae": "REPLACES()", +"a1b77835": "getRefPercentsByIndex(uint256)", +"a1b7887f": "logShareTokenBurned(address,address,uint256)", +"a1b7ae62": "setdirectorName(string)", +"a1b7ffb2": "_checkRequireERC20(address,uint256,bool,uint256)", +"a1b86605": "getHourglassBalance()", +"a1b8c40f": "lastDepositIndex()", +"a1b94c0b": "timeOfWin()", +"a1b9af31": "unlockBets()", +"a1b9cb8f": "getTitulaire_Compte_6()", +"a1b9e03f": "Unagold(address)", +"a1ba0331": "CoinTroops()", +"a1ba444d": "createOrder(uint256,uint256,uint256)", +"a1ba7554": "fibokenUsedCount()", +"a1bb6220": "halting()", +"a1bb7828": "make_transfer(address,uint256,uint256,bytes32)", +"a1bba310": "DonationDoubled(address,uint256)", +"a1bc13ad": "forgeItems(uint256,uint256,address)", +"a1bc76d1": "extendPRETDE(uint256)", +"a1bc7a8f": "sha3_512()", +"a1bd55c2": "TimeDecayingToken(address,uint256,string,uint8,string)", +"a1bda122": "returnInt16(int16)", +"a1bdd146": "setEndorsement(address,uint256,uint256)", +"a1be79a0": "equipUp(uint256[6])", +"a1bed0be": "GOAL()", +"a1bf8a9d": "endICO_w1()", +"a1bffefa": "emitCancelled()", +"a1c0539d": "scheduleCall(address,bytes4,bytes)", +"a1c14350": "getUpdateMarketPhaseCalled()", +"a1c1519a": "calcNewSkinAppearance(uint128,uint128)", +"a1c15f56": "CipherPlay(address,address)", +"a1c29db6": "MAX_FUNDING_AMOUNT()", +"a1c2f644": "address4()", +"a1c308d0": "ProspectorsGoldToken()", +"a1c448f1": "kingdomCreationFeeWei()", +"a1c4774b": "getCostToKick()", +"a1c4db02": "eth_meth()", +"a1c51915": "getB()", +"a1c68880": "final_share_price()", +"a1c6d088": "airDropTokenDestroy()", +"a1c80cea": "getUriCount(address)", +"a1c8ca7e": "removeClaim(address,bytes32)", +"a1c90a11": "updatePlayersCoinByPurchase(address,uint256)", +"a1c91040": "requestEvidence()", +"a1c93169": "DividendClaimed(address,uint256,uint256)", +"a1c934b6": "TestNetworkToken()", +"a1c95ac2": "GSIToken(uint256,string,uint8,string,address)", +"a1c9d235": "minimumElectionQuorum()", +"a1ca00c0": "ELIXAddressSetter()", +"a1ca70f4": "totalDiv()", +"a1ca8f8d": "LTRToken()", +"a1cb31b7": "_state()", +"a1cbae6c": "communityTokens2()", +"a1ccc49c": "addDataPatternVoteRules(uint256,uint256,bytes,bytes,uint256[5])", +"a1cd150d": "_calculateFee(uint256)", +"a1ce5ba7": "getIncentiveNum()", +"a1ce7e03": "openOrder(uint64,bytes,bytes32)", +"a1cea675": "cryptaurRewards()", +"a1ceb253": "mintAdvisorsTokens(uint256)", +"a1ceb359": "CryptoStrategiesIntelligence()", +"a1d0846c": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a1d0a48f": "addCurrency(string)", +"a1d0ab04": "allocateContributorsToken()", +"a1d10d11": "StoneLog(uint256,uint256)", +"a1d20653": "setVersion(bytes32,string)", +"a1d25205": "lowEth()", +"a1d27925": "personalContract()", +"a1d280d3": "releaseValue1()", +"a1d3612c": "DKS()", +"a1d36cb0": "checkClaimEntitlementofWallet(address,address)", +"a1d48aa8": "PaymentChannel(address,address,uint256)", +"a1d4c7ce": "_emitSkillRatingGiven(address,address,uint8,uint256,uint256,uint256,uint256)", +"a1d4c820": "Signum()", +"a1d53160": "Capital()", +"a1d5b36e": "calculateTxHash()", +"a1d61b07": "dateTier4()", +"a1d707a3": "setReleaseCar(uint256,bool)", +"a1d7d1dd": "setup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],uint256[],uint256[])", +"a1d7ecbb": "updateShareETH(address)", +"a1d82cfd": "EBANK()", +"a1d86608": "_claimedSurroundingTiles(uint256)", +"a1d915b8": "ClaimTokens()", +"a1d91ee0": "technologyContract()", +"a1da2fb9": "retrieveDAOReward(bool)", +"a1da32be": "Shopiblock()", +"a1dab23e": "sellFloor()", +"a1dabfb2": "OAIToken(address,address)", +"a1db9782": "withdrawERC20(address,uint256)", +"a1dc139d": "setSigner(address,address,bool)", +"a1ddcd2d": "USDCX()", +"a1dddf70": "registerEthHandle(bytes32,address)", +"a1dea137": "checkBlacklist(address,address)", +"a1df7eb3": "YBKToken(string,string,uint256,uint256,string)", +"a1dfe545": "logShareTokenMinted(address,address,uint256)", +"a1e03f57": "ratePerWeiInSelfDrop()", +"a1e04406": "preSale4Finished()", +"a1e0c2c9": "winnerCounter()", +"a1e15c33": "canuseOf(address)", +"a1e3b16d": "Crypseum()", +"a1e3c008": "mainSendTTC()", +"a1e4cb30": "investorsTotalSupply()", +"a1e4d3c2": "MembershipRoster()", +"a1e4eaf1": "updateUserBalance(uint256,bool,uint256,uint256,uint256,address,address)", +"a1e4f73d": "construct(bytes32,string,bytes32,address,uint128,uint256)", +"a1e51a79": "emitDestruction(uint256)", +"a1e564b1": "CashOut()", +"a1e59471": "HashBux()", +"a1e66038": "getTrusteeTable()", +"a1e6a255": "nextUserId()", +"a1e7e21c": "crowdsaleBurnAmount()", +"a1e89aec": "saleCount()", +"a1e8a780": "getAdPriceMultiple()", +"a1e93b63": "withdrawTipBalance(uint256,address,uint256)", +"a1e95792": "eatUnicornsAlive(uint256)", +"a1ea00bc": "isUserTakerFeeEnabled(address,uint256)", +"a1eb0bae": "eliminarjugador(uint256)", +"a1eb84b0": "transferOwnedOwnership(address,address)", +"a1ecb43c": "incrementLimitTeam()", +"a1ee7855": "ATT()", +"a1ee8c78": "issueToken()", +"a1ef9b8f": "reallocate(address,address,address,uint256)", +"a1f1aa66": "cancelVoteInternal(bytes32,address)", +"a1f1de65": "getPrizeAmount(uint256)", +"a1f24b3d": "getAssetDetails(uint256)", +"a1f36a78": "EROSCOIN()", +"a1f43f40": "UNICToken()", +"a1f4b9c8": "updatePlayerGen(address,uint256)", +"a1f54adf": "nextPremiumSale()", +"a1f56b0a": "getRollOutput(uint256,uint8,uint8,uint256,address)", +"a1f7f269": "_breedWith(uint256,uint256)", +"a1f841d7": "unlockFund()", +"a1f8adac": "investorList()", +"a1f8ea3b": "numOfDeliveredEarlyPurchases()", +"a1f902a7": "ComputeVestSpend(address)", +"a1f91057": "updateLock(bool)", +"a1fa39c4": "getRaisedPercents(address)", +"a1fa540d": "changeVotingBlocks(uint256,uint256,uint256,uint256,uint256)", +"a1fa566e": "getChannelPartners(bytes32)", +"a1fac24c": "Follow(bytes32,bytes32,bool)", +"a1fafe0c": "sendResidualAmount(uint256)", +"a1fb03f2": "GooCrowdsale(uint256,uint256,uint256,uint256,address)", +"a1fb1de9": "Message()", +"a1fb34c1": "setCustomExtraData(bytes32,uint256,bytes32,bytes32)", +"a1fc21f4": "setStaffDisbursementAddress(address)", +"a1fcc3bc": "stage2()", +"a1fd49b7": "getMFBalance(address)", +"a1fd92f5": "destinationMultisigWallet()", +"a1feba42": "tokensLocked()", +"a1ffba04": "PPGT()", +"a2008eb9": "acceptBidForStar(uint256,uint256)", +"a200dc73": "getNextShareholder(address)", +"a201222d": "recalculate(address)", +"a201bf26": "settleETH(bytes32)", +"a201d102": "VOTING_END_TIME()", +"a201ed8b": "transferMultiple(address[],uint256[],uint256)", +"a2023ff8": "setStartEndTimeTLP(uint256)", +"a202e476": "last_hash()", +"a20348c4": "ToPeriod()", +"a2035fef": "changeCustomTimeLock(string,uint256)", +"a20495d3": "Managed()", +"a20741dd": "getOperation(uint32)", +"a207b7fa": "SALE_FUND()", +"a208b3b7": "findFigures(uint256)", +"a2093e1b": "migrateCatOwnersFromPreviousContract(uint256,uint256)", +"a209a29c": "getStringValue(bytes32)", +"a20aede0": "phaseThreeRate()", +"a20b77ad": "getDocHash(uint256)", +"a20b8ab3": "ttlInvestAmount()", +"a20bbb8b": "addBadge(uint24,int16,int16,uint24,uint256,string,string,string,uint256)", +"a20bc7fe": "allownce(address,address)", +"a20c15cf": "_generateCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256)", +"a20c404f": "ModifySettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a20cc495": "bytesFunc(bytes,bytes)", +"a20cd047": "moveTokenToAccount(address,uint256)", +"a20cf0e7": "setTokenNAVMicroUSD(uint256)", +"a20ddfb6": "getPartnerAddresses()", +"a20def62": "checkExistsOwnedAccessory(uint64)", +"a20e2525": "UnlockWei(uint256)", +"a20efba3": "mintGrey(address,uint256)", +"a20f46c6": "searchAddress(address)", +"a20f4ee6": "pixelCost()", +"a210a676": "buyBunny(uint32)", +"a210bf55": "updateJackpotFeePercentage(uint8)", +"a210c6a9": "creatorPaid()", +"a210f934": "rateEarlyStage2()", +"a21174bb": "DefaultReverseResolver(address)", +"a2119377": "createToken(string,address)", +"a2119a3a": "allocateForRefund()", +"a2125232": "addItem(uint256,uint256)", +"a213051c": "individualMinPurchaseWei()", +"a21383cb": "permissibleTokenWithdrawal(uint256)", +"a213972c": "ViewBet2(address,uint256)", +"a213c280": "DayByDayToken()", +"a21515e3": "computed_shares_sold()", +"a2152e32": "testOracle()", +"a215457a": "transferBurnRole(address)", +"a215cd92": "setMinConversionRate(uint256)", +"a2167ac4": "_donations()", +"a216e0aa": "transferRobot(address,uint256)", +"a2177ff0": "getKeyLength()", +"a2187de0": "available_tokens()", +"a218d8ca": "clearAndDestoryAfterTwoWeeks()", +"a2190b46": "calculateTakerFee(address,uint256)", +"a21931ea": "CreateProposal(string,string,string,uint32,string,string,string,uint32,uint32)", +"a21a32cb": "Securities_1()", +"a21a65ae": "getIntArrayLength(bytes32)", +"a21d5b9f": "utilityLockedDate()", +"a21d942f": "checkResult()", +"a21df9f0": "THIRTY_DAYS()", +"a21e14fe": "reportInvalidDeposit(bytes32[])", +"a21ea6b7": "CrabCoin()", +"a21eea2a": "assertValidChallenger(address)", +"a21eef95": "getBarrierNum(uint16)", +"a21f0368": "History(uint256)", +"a21f74b8": "fundGooResearch(uint256)", +"a21f836e": "pubCount()", +"a21fbc92": "isAllowed()", +"a2200278": "checkStatus(bytes32)", +"a2200fbe": "AgreementUrlEn()", +"a220a90e": "transferLoveStoryWithData(bytes16,bytes32,bytes32,uint256,string)", +"a220d6c4": "tCampaignStart()", +"a2210352": "doRebuyTo(address)", +"a22107b4": "createRandomZombie(int256)", +"a222a52f": "firstPostIcoContributorId()", +"a222c98d": "declareWinnerForRaz(uint256,uint256)", +"a22304cd": "_specialDistribution(address,uint256)", +"a2233631": "withDrawal(address,address,uint256,bytes)", +"a2233c4d": "BancorConverterFactory()", +"a22352e2": "getDisputeFee(bytes32)", +"a2240eb0": "Scope()", +"a2248be0": "set_pre_kyc_bonus_numerator(uint256)", +"a224a5b3": "push_key(uint256,uint256,uint256)", +"a224c745": "setWhitelistAddress(address)", +"a224dcb7": "withdrawClaim(uint256)", +"a224f4ce": "earningsFromScore(address,address)", +"a2252aaa": "referralProgramOwner()", +"a225d0be": "setTokensByWaveIndex(uint256,uint256,uint256)", +"a2261508": "tokenSpender()", +"a2267a3a": "newProposal(uint256,uint256,string)", +"a2271b15": "m_presaleFinished()", +"a22838b9": "ExecuteTrade(uint256,address,address,uint256,uint256)", +"a229090a": "dropTo(string)", +"a22913b5": "addTeamAddress(address,uint256,uint256)", +"a229b901": "transferApprover(address)", +"a22a12de": "submitWithMetaHash(bytes32,bytes32)", +"a22a31dd": "Forged(uint256)", +"a22b35ce": "_burnFrom(address,uint256)", +"a22b5a1c": "getFiles(bytes32)", +"a22b97f5": "withdrawOnBehalf(address)", +"a22ba787": "allocateETH(bool)", +"a22bb384": "GBAChain(uint256,address)", +"a22c81ec": "MIDGRADE_TYPE2()", +"a22cb465": "setApprovalForAll(address,bool)", +"a22cd657": "getImpactValue(string,address)", +"a22ce93d": "getActiveConsentTemplates()", +"a22d5a51": "deleteActivity(uint16)", +"a22dff2c": "getMainBalance()", +"a22e9009": "epm()", +"a22ec476": "setSireStop(uint32)", +"a22ed371": "mentalBalanceOf(address)", +"a22f2b2e": "set_lock_list(address,address,uint256)", +"a22fb98b": "updateBounty(string,uint256[])", +"a2302af9": "queryWinningTeam(uint256)", +"a2309ff8": "totalMinted()", +"a230c524": "isMember(address)", +"a231a84f": "ssp()", +"a232155d": "getbetresultfirst(address)", +"a2325259": "buyTokensWithUpdateRate(address,uint256)", +"a23281e6": "numPositionsExpired()", +"a2328e2e": "_FIVEHUNDRED()", +"a23291b6": "QUIOToken()", +"a232e64b": "createForum(string)", +"a235ae52": "setWithoutFee(address,bool)", +"a2362aca": "HyunJaeToken()", +"a2368e11": "setAirDrop(bool)", +"a236a3d7": "configRoundKeyAdd()", +"a236e665": "buyNac(address,uint256)", +"a236eb85": "subdivide(uint256,bool,bool,uint256,uint256,string,string)", +"a236f388": "getGameWin(address,uint256)", +"a23744f0": "tryCreateCheckRecord(bytes)", +"a2375d1e": "getC()", +"a237f4d8": "developerFundAddress()", +"a2393922": "getTokenDealRange()", +"a23951c8": "WidthdrawEarnings(uint256)", +"a239756d": "setRandom(uint256,uint256)", +"a239d260": "KinTokenSaleMock(address,uint256)", +"a23a373f": "DrawWinning(uint256,uint256)", +"a23a49c1": "setEscrowTokensWallet(address)", +"a23a5315": "SkyToken()", +"a23b5bd1": "getRandomUint256(uint256)", +"a23b791a": "Bitcoin()", +"a23bbb11": "GroupClosed(uint32,uint256)", +"a23bc6fe": "setTokenHolderAddress(address)", +"a23bec7b": "constrcutor()", +"a23bfd84": "weiPerCHF()", +"a23c3397": "getTokensPaidToGame(address)", +"a23c86c0": "allocateBulkTokens(address[],uint256[])", +"a23d20f4": "blockedDivisionJurisdictions(bytes32)", +"a23d3c35": "founderWallet()", +"a23d64c4": "isReturnRequested(address)", +"a23da130": "FundsRegistry(address[],uint256,address,address)", +"a23e21f7": "change(uint8,bytes32,bytes32,bytes20)", +"a23e3e89": "removeToken(address,uint256,uint256)", +"a23f41e2": "curs()", +"a2407c7b": "verifyUpdate(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"a240d8ad": "changeWeeklyRate(bytes32,uint256)", +"a241c089": "updateContract()", +"a2420f73": "EthermiumTokenList(address,address,uint256,uint256)", +"a24247f1": "getStartLockTime()", +"a242519b": "Technology3G(address)", +"a242f049": "ICOEndTime()", +"a243b6c1": "setPrice(uint256,uint256[],uint256[])", +"a243f512": "removeTrack(bytes32)", +"a243f874": "takePayment()", +"a244e03d": "definirMessage(string)", +"a244f365": "SbuyToken()", +"a245b774": "lockedFundsForthefuture()", +"a24636c1": "InvalidState(bytes)", +"a246d83b": "relaySellerCannotCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"a2471fa5": "RecoverableWallet(address)", +"a2473cc1": "stakeOf(address,uint96)", +"a2478c8d": "CT(uint256,string,string)", +"a247bc32": "payouts()", +"a24835d1": "destroy(address,uint256)", +"a248da12": "Exam()", +"a248de8f": "own(bytes32)", +"a248df4f": "XFC()", +"a249225e": "setAuthorizedUser(address,bool)", +"a2495ace": "transferCongress(address)", +"a2497b5c": "ETQuality()", +"a24a21fa": "TheBillionCoin()", +"a24bcf46": "calculateTokenAmount(uint256)", +"a24beff7": "closeBet(uint256)", +"a24c9737": "BUYER_CAP_HIGH_USD()", +"a24d23eb": "ProcessGame(uint256,uint256)", +"a24d9658": "revokeConsent(string)", +"a24dbe76": "StatusContribution()", +"a24e20de": "withdraw_dao_fund(address,uint256)", +"a24ea666": "withdrawedFundrasingPart()", +"a24ea868": "PROOF_MULTISIG()", +"a24ed4e5": "isLimitedWalletAddress(address)", +"a24ed8aa": "newLeader()", +"a24f1e82": "publiclyDistributedParts()", +"a25047a2": "hasEntry(address)", +"a25057de": "_transferToICAP(bytes32,uint256)", +"a250f43b": "verifiedWinnersLastCount()", +"a25236fe": "requestVotingRights(uint256)", +"a25277f3": "totalTokensCrowdSale()", +"a25287c5": "allowChangePrice()", +"a25367ff": "method2(bool)", +"a253c06e": "_circulatingSupply()", +"a25401ea": "PapyrusToken(address[],uint256[])", +"a254e662": "managementTokensDelivered()", +"a2550108": "alt_buyCollectible(uint256,uint256)", +"a2554c36": "walletForPresale()", +"a2558ee2": "holderReward()", +"a255d68d": "ticketTransferees(address,uint256)", +"a2564afc": "activatePermissionsBot(bytes32,bytes32)", +"a2564f7c": "randomNumberGen(uint256,uint256)", +"a2578f1c": "armyCountBattlesWon(uint256)", +"a258dafc": "getTopInfo(uint256)", +"a2594b83": "greylistMany(address[])", +"a2596576": "submitMint(int256,address,uint256)", +"a2596ebe": "returnTokensFromHoldProgectAddress(uint256)", +"a2597659": "changeMinAccEthers(uint256)", +"a25983e5": "lockTokens(address,uint256,uint256)", +"a25a34b1": "findPositionInMaxExpArrayTest(uint256)", +"a25b859d": "soldIdeaWeiIco()", +"a25b9384": "isUserAllowedToTransfer(address)", +"a25bc80c": "setPresaleState(uint8)", +"a25be434": "notifyTranferToken(uint256,address,address)", +"a25c1f3a": "presalePurchasesLoaded()", +"a25d8973": "createSale2()", +"a25e6898": "withdrawForeignTokens(address,address,uint256)", +"a25eb5d9": "exchangeToken()", +"a25f2d7e": "ReinvestmentWithdrawal(address,uint256)", +"a25f55d4": "getBatchSize()", +"a25f5e98": "doAdditionalMinting(address,uint256,int256)", +"a25fc8dc": "adminAddCity(string,uint256,uint16)", +"a25fdcec": "editPlanet(uint256,uint256,string,string)", +"a25ff42d": "HumanStandardToken2(uint256,string,uint8,string)", +"a2605dc1": "EventLuckyNumberRequested(address,uint256,uint256,uint8)", +"a2609759": "transferPreSignedMany(address,address[],uint256[],uint256,uint256,uint8,bytes32,bytes32)", +"a260c045": "PROMETHEUS_SHIP_LIMIT()", +"a260d8da": "makePresaleReady()", +"a26176b1": "testInequalityUint()", +"a2624afe": "raiseJackpot()", +"a262c092": "CollectChipBag()", +"a26329f0": "finalizeRefunds()", +"a2635401": "getCurrentGameId()", +"a263601c": "find_contribution(address)", +"a26388bb": "testRevert()", +"a263c7ba": "changeBuyPrice(uint256)", +"a263e793": "EdittedEntry(address,uint256)", +"a2644eb0": "withdrawFullTokenBalance(address)", +"a264f18e": "CROWDSALE_ETH_IN_WEI_ACCEPTED_MIN()", +"a2651d30": "purchaseAreaWithData(uint24[],uint24[],uint256[],string,string,uint256)", +"a2657960": "DolyToken3()", +"a26636f3": "StpacToken()", +"a266b0f2": "CoinStacks()", +"a266c820": "changeARIWallet(address)", +"a266f4da": "liquidateFund()", +"a26730e1": "minRelease()", +"a26759cb": "addFunds()", +"a267b5cf": "TokensTransfered(address,uint256)", +"a268b332": "testBitXorFailIndexOOB()", +"a269202f": "setHash(address,bytes32,address,bytes32,uint256)", +"a269e31f": "setPrices(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a26a1bc9": "clearLockUser(address,uint256)", +"a26ac680": "BoBoToKen()", +"a26b0e34": "dbVal(address,uint256)", +"a26b2d76": "StepCoin()", +"a26b8822": "tokensSoldExternal()", +"a26bddb4": "LockedTokens(address)", +"a26c7810": "mintToTeamAccounts()", +"a26d494d": "getEscrow(address)", +"a26d6de6": "LogWithdrawal(uint256)", +"a26d7b94": "isCrowdSaleClosed()", +"a26dbf26": "totalParticipants()", +"a26e1186": "deposit(string)", +"a26e7a6c": "_initOpinion(uint256,string)", +"a26efcf8": "startGame(bytes,address,uint256,uint256[],bytes)", +"a26f644c": "Transfer_of_authority_data(address)", +"a270907c": "Btcandres()", +"a270a737": "venue()", +"a270cdf3": "getMarketInfo(bytes32)", +"a2720018": "freelanceFillBonds(address)", +"a2729a01": "updateDelegatorWithEarnings(address,uint256)", +"a273079a": "addLog(string,string)", +"a2730c23": "EthToAFW(uint256)", +"a273738c": "preICOEndTime()", +"a27411d8": "Earthpayment()", +"a2741bdb": "MAX_CITIES()", +"a2744a22": "addProduct(uint256,uint256,string,uint256)", +"a2752df9": "tokenSetTransferFeeProp(address,address,uint256)", +"a275ee1b": "getDeployTime()", +"a27678c9": "preDGZToken()", +"a277051f": "userAddr()", +"a277b787": "CARXTOKEN()", +"a277d5b1": "totalTokensPurchased()", +"a277fa88": "setWhitelistOn()", +"a2788b58": "ConflictResolutionManager(address)", +"a278ce66": "backWindowAdjustmentRatio()", +"a278fdfb": "bidOnAuctionToBuy(uint256)", +"a27966dd": "finishselfdrop()", +"a2798f0a": "GetQueueNumber()", +"a279c488": "addPending(address,uint256)", +"a27a9e7f": "publicAmount()", +"a27aebbc": "extendTime(uint256)", +"a27b9bf4": "matchcoin(uint256,string,string)", +"a27c1756": "ECONOMY_BOOST()", +"a27c3a2d": "HngCoin(uint256,string,string)", +"a27c672a": "owner_reveal_and_commit(uint8,bytes32,bytes32)", +"a27c794b": "insertDetails(string,uint256,uint256)", +"a27c9af0": "gameDestroy()", +"a27d8298": "leader_3()", +"a27e0e67": "QLFY()", +"a27ee939": "payto3()", +"a280b3db": "preSaleBonus3Time()", +"a280ce8f": "distributeWinnerPot()", +"a280e67a": "leftnum()", +"a28103f2": "batchTransfer2(address[],uint256[])", +"a283063c": "ChargeFee()", +"a2832c97": "CappedDividendToken(uint256)", +"a283c9c5": "getLastBidAmount()", +"a283f907": "addOrderContract(address)", +"a283fd00": "getPendingPaymentAmount(address)", +"a284b6d3": "maxTicketAmount()", +"a28504b4": "isSwapDone()", +"a28555d5": "setTAOFamilyAddress(address)", +"a28576aa": "LogUserRegistered(address)", +"a285f19f": "signedTransfer(address,address,address,uint256,uint256,uint256,bytes,address)", +"a2860050": "estimateReturns(address,uint256)", +"a28641cc": "_buyTile(address,uint256,bytes)", +"a2866a78": "HouseICO()", +"a28812c2": "existingIds()", +"a288237c": "MeSum()", +"a288b609": "releaseOf(address)", +"a288fb1f": "setConfigUint(int256,bytes,uint256)", +"a2890972": "synthesize(uint16[5])", +"a289409b": "addAddressesToAdmins(address[])", +"a289673b": "fipsChangeOwner(bytes20,address,address)", +"a289d187": "depositDividend()", +"a28a1564": "GBToken()", +"a28b1ffd": "isLive(uint32,int256)", +"a28bc99a": "TipSmartToken()", +"a28c644d": "setACLRole5999294130779334338(address)", +"a28c76cc": "initialize(address,address,address,bytes32,uint256,uint256,uint256)", +"a28d0185": "removeComponent(uint256,uint256)", +"a28d57d8": "btc()", +"a28e68d3": "setOnceMintAmount(uint256)", +"a28ecf0b": "sendCryptedHand(bytes)", +"a28f19f8": "AddDroneItem(address,uint256,uint256)", +"a29063c1": "LuckyNumberImp()", +"a290f4f2": "logoPrice()", +"a2919502": "getWalletLibrary()", +"a29256bd": "Ethereum()", +"a292f7d3": "paymentEscrow()", +"a29337bd": "tokensToCompany()", +"a293688b": "triggerFindWinner()", +"a293cba1": "LETSCOIN_Token()", +"a293d1e8": "safeSub(uint256,uint256)", +"a29445a9": "EnclavesDEXProxy(address,address,address,address,uint256,uint256,address,bytes32,bytes32)", +"a294542f": "setPreSaleTLYperETH(uint256)", +"a2948cdf": "futureDevelopment()", +"a294ed7a": "voterAddressOf(uint256,uint256)", +"a2950fd8": "Birth(address,uint256,uint256,uint256,uint256,uint256)", +"a2958b76": "_transferOwnershipOfStorage(address)", +"a29626c2": "createSingleSeedAuction(uint8,uint8,uint256,uint256,uint256,uint256,uint256,uint256)", +"a296b323": "setTransfer(bool)", +"a296fed8": "HitToken(uint256,string,string)", +"a297d43c": "openDistributionContract()", +"a2987245": "getIntArrayIndex(bytes32,uint256)", +"a298ba7c": "AntiqueCoin(address,uint256)", +"a299b155": "setInitialTokensBalance()", +"a29aaad6": "MatreXaCrowdsale(uint256,uint256[],uint256[],uint256,uint256,uint256,uint256)", +"a29b7fa0": "TklnAirdropToken()", +"a29c3574": "OrgonToken()", +"a29cc6c8": "allocateVestedTokens(address,uint256,uint256)", +"a29cd847": "changeEndPreSale(uint256)", +"a29d4859": "drpuToken()", +"a29d578a": "changeABaddress(string,address)", +"a29dbf46": "isAllowedToSend(address,address)", +"a29f9fb9": "onChainAddresses(bytes32)", +"a29fe9b1": "UBOToken()", +"a29ff28d": "receivedStaAmount()", +"a2a02202": "smg(uint256)", +"a2a0d0fc": "pre_endTime()", +"a2a140f9": "MinInvestment()", +"a2a1521a": "SignalPylon(address)", +"a2a17629": "addrBroker()", +"a2a206c0": "ImperoITCoin()", +"a2a23fb2": "getVersionsLength()", +"a2a256b9": "AirDroppedTokens(uint256)", +"a2a3d051": "B3(uint256,string,uint8,string)", +"a2a483ee": "setCS(address)", +"a2a51ccd": "transferToCrowdsale(address,uint256)", +"a2a5243c": "_calculateExcessBonus(uint256,uint256)", +"a2a53c7c": "Exercise(uint256)", +"a2a6aa11": "TileClaimed(uint256,uint256,uint256,address)", +"a2a6ca27": "setMinPerTx(uint256)", +"a2a746e1": "moveToInitiator(address,address,uint256)", +"a2a8336f": "claimEtherSigner(uint256)", +"a2a84a5d": "zonesSwarmAddress()", +"a2a8e279": "getTokensForEther2(uint256,uint256)", +"a2a957bb": "setFee(uint256,uint256,uint256,uint256)", +"a2a96799": "totalSuply()", +"a2a9a6c1": "satellite()", +"a2a9d1ef": "initReverseENS(address)", +"a2aa0724": "enterLottey()", +"a2aaa10e": "DigiCrowdSale()", +"a2ab2686": "participatePresale()", +"a2ac0a1a": "getUserAssetBalance(address)", +"a2ac5360": "calculateFounderCut(uint256)", +"a2aca613": "buyLicense(address,address,string)", +"a2ad16ed": "WinEToken()", +"a2ad360f": "SUV()", +"a2adaf15": "isOpened(uint256,uint256)", +"a2ae72ec": "open_commitment(uint256)", +"a2ae86ac": "setUntsqm(uint256)", +"a2af0e37": "assignPlayer(string,address)", +"a2af5fe9": "content(string,string,string,uint256)", +"a2b038b3": "addOffChainRaisedContribution(address,uint256,uint256)", +"a2b0867d": "Admined(address)", +"a2b0f9f6": "setMaxWeiForVerificationLevels(uint256,uint256,uint256)", +"a2b144f0": "getGasForMcr()", +"a2b1da51": "inflat(uint256)", +"a2b21d7d": "trainSpecial(uint256,uint256,uint256[2],uint256[2])", +"a2b40d19": "changePrice(uint256)", +"a2b424b1": "firstPresaleEnd()", +"a2b475f3": "levelOneBonus(uint256)", +"a2b5591c": "oraclize_query(uint256,string,string[],uint256)", +"a2b60f43": "EmployeeMigrated(address,address,uint256,uint256)", +"a2b6cbe1": "deleteTxDataBlockNumber(bytes32)", +"a2b6f0ec": "addRewardToPendingWithdrawals(uint32)", +"a2b7976d": "bbye()", +"a2b7a18b": "BCE()", +"a2b7e23d": "queueMode()", +"a2b8891e": "getFreeKebaber()", +"a2b8bc77": "domain_reward(address,uint16)", +"a2b946aa": "getNewGame()", +"a2bad039": "getCompte_27()", +"a2bb5d48": "get_username(address)", +"a2bb635a": "WhitelistedAddress(uint256)", +"a2bbeac2": "Shares(string,string,uint256,uint256)", +"a2bc0e31": "testCheckRokTeam()", +"a2bc183f": "secondPlacePot()", +"a2bc1cd4": "getNumEthOfferors()", +"a2bc2eef": "CipherPlayToken(address,address)", +"a2bcb304": "setfanbei(uint256)", +"a2bccae9": "plyrRnds_(uint256,uint256)", +"a2bcee8b": "build_creature()", +"a2bd018c": "targetDiscountValue3()", +"a2be1761": "addDiscounts(address[],uint256)", +"a2be19fb": "assignPoliceToReport(uint256)", +"a2be23cd": "BASIC_RATE()", +"a2be427d": "updatePlayer(uint256)", +"a2bf1d06": "DURATION_NONUSETEAM()", +"a2bf68b9": "membership()", +"a2bf6939": "setTokenValue(uint256)", +"a2bf6f7e": "ClaimedStatus(address)", +"a2bfae64": "mmin(uint128,uint128)", +"a2c030a5": "changeRootAuthority(address)", +"a2c17459": "getCreateUnicornFullPriceInCandy()", +"a2c25131": "LogItemUpdate(uint256)", +"a2c2ed9b": "killContract(uint256)", +"a2c3a542": "getFallbackDepositPeriod()", +"a2c3b256": "receiveCheck(address)", +"a2c3bd83": "TokenInvestment(address,address,uint256)", +"a2c41366": "getIcoBonus()", +"a2c44503": "doesUserHaveBalance(address)", +"a2c4895a": "encodeOperator(uint256,uint256)", +"a2c4a06f": "startTimeOne()", +"a2c4c336": "getPurchaseReturn(address,uint256)", +"a2c4d268": "addToRef(uint256)", +"a2c52c4d": "CoreMediator()", +"a2c6fa83": "transferFromStudio(address,address,uint256)", +"a2c77e68": "isLeftTokens(uint256)", +"a2c8b76b": "getPriceFor(uint256,uint256,uint256,uint256)", +"a2c93406": "blinc()", +"a2c99d47": "rateAfterValidation(uint256,bool)", +"a2c9d630": "manualPrice()", +"a2cc1f62": "disagree(address)", +"a2cdd471": "cc()", +"a2cdd82f": "setAuctionObj(address,uint256,uint256)", +"a2ce0f87": "min_contribution()", +"a2ce4215": "TOKEN_PREICO_CAP()", +"a2ce588d": "roundExpired()", +"a2cff990": "getHeroCurrentLevel(uint256)", +"a2d0b147": "RedTicket(uint256,address)", +"a2d0f942": "canRedeemUTXOHash(bytes32,bytes)", +"a2d10ba5": "kyber()", +"a2d1c624": "checkKingFounder(address)", +"a2d1cf11": "propheciseExecute(address)", +"a2d24c5e": "getFirstTranche()", +"a2d39bdb": "addKey(address,uint256)", +"a2d3e2be": "ReleaseTimeChanged(address,uint256,uint256)", +"a2d435d4": "icoTotalCollected()", +"a2d46832": "speech(uint16)", +"a2d4db9c": "newUpload(bytes32,string,uint16,bytes32)", +"a2d57853": "receiveApproval(address,uint256,bytes)", +"a2d5b8bf": "withdrawBoardMeetingFees()", +"a2d6a926": "CapCoinInternational()", +"a2d6d382": "videos(bytes32)", +"a2d6f8de": "startEarlyStage4()", +"a2d74227": "spendToken(uint256)", +"a2d74b29": "setJobHiringDone(uint256)", +"a2d819b4": "getSenderSig()", +"a2d83b5e": "update(address,uint256)", +"a2d89edf": "bountyInit()", +"a2d97fa7": "TimeLockr()", +"a2da2b47": "ausGroupReleaseDate()", +"a2da84f8": "setCAOAmount(uint256[])", +"a2db644e": "vestingTransfer(address,address,uint256)", +"a2dc7dcf": "initialize(address,address,address,address,address,address,address,address,address,uint256,uint256,uint256,uint256[])", +"a2dc9d9c": "ChangeMessage(string,string)", +"a2dcb5d4": "bindUserWithBoard(uint256,address)", +"a2dd2e96": "InitCancel(address)", +"a2dd3283": "setICOContract(address,address)", +"a2dd9dd3": "canMateWith(uint256,uint256)", +"a2de29d4": "setReleaseAmount(address,uint256)", +"a2de45b7": "Listed_Validated(uint256,string)", +"a2de5b50": "buyWithPromo(address)", +"a2dea26f": "sendAllocation(address)", +"a2deadbd": "getTransactionHash(bytes)", +"a2dee527": "setSaleBonus(address,address,uint256)", +"a2df26f5": "printMarket(int256)", +"a2df6c42": "splitFirst(string,string)", +"a2df7465": "DeepToken(address,address,address,address,address)", +"a2dfa2f0": "buySampleTokens(address)", +"a2e0ee3e": "theWinningReferral()", +"a2e1a8d8": "isOwnerAddress(address)", +"a2e23a51": "TAIL_EMISSION()", +"a2e2842e": "ChannelSecretRevealed(bytes32,address)", +"a2e2998c": "setPricePerMessage(uint256)", +"a2e3750c": "preSaleCSSC()", +"a2e38b54": "getTransactionIds()", +"a2e40e50": "endorse(bytes32)", +"a2e55e88": "IQB()", +"a2e5f168": "DaoAccount(address,address)", +"a2e62045": "update()", +"a2e65477": "changePeriod(uint256,uint256,uint256)", +"a2e7223e": "isNewPlayer(address)", +"a2e7241c": "citizensAddresses(uint256)", +"a2e800ad": "rounds()", +"a2e841ba": "getUnprocessedQueryBytes32(uint256)", +"a2e855a5": "batchFillOrKill(address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"a2e91477": "publicSaleStarted()", +"a2ea2aaf": "CreateToken()", +"a2ea771f": "receivedTokenOf(address)", +"a2ea7c6e": "getSchema(bytes32)", +"a2ea80f9": "setPayableEnabled(bool)", +"a2ea9883": "OwnerChanged(address)", +"a2eaa896": "winningBidder(string)", +"a2eb0d01": "gift_CreateTINAmotleyLine(string)", +"a2eb164d": "lockUpdateTokenAccount(address,bool)", +"a2ebaa1d": "TEAM_PERCENT_EVE()", +"a2ebb20b": "icoHolder()", +"a2ec191a": "addDSource(string,uint256)", +"a2ec258f": "future()", +"a2ec2957": "updateInvestorDates(uint256,uint256)", +"a2ec5414": "getAllowanceExpiration()", +"a2ee1a27": "sellPrice_wie()", +"a2ee4000": "cancelSalesOffer(bytes32)", +"a2ee8669": "PussyToken(uint256,string,string)", +"a2eeb5d4": "pyramid(uint256)", +"a2f09dfa": "addFund()", +"a2f1607c": "_calcLockRewardPercentage()", +"a2f16d80": "dexWithdrawCollectedFees()", +"a2f182d4": "setLimits(uint256,uint256,uint256,uint256,uint256)", +"a2f23659": "VPCx()", +"a2f26fb2": "FTTIssued(address,address,uint256,uint256)", +"a2f3139c": "stagedVestedLockUpAmounts()", +"a2f35f44": "addNewAddress(address)", +"a2f37360": "addSponsorshipAmount(address,uint256,uint256)", +"a2f39dc6": "OLDSPTI()", +"a2f3ba5b": "setSynthetixState(address)", +"a2f3ede2": "computeNameHash(bytes)", +"a2f44e72": "p_update_action(uint256,address,address)", +"a2f45660": "Purchase(address,address,address)", +"a2f4f550": "getDataPointForSubject(uint256,uint256,int256)", +"a2f56b2c": "refundEth(bytes32,address,uint256)", +"a2f5ee48": "CarbonExchangeCoinToken()", +"a2f6e5fb": "ViewMyDivs(address)", +"a2f77bcc": "getGame(uint256)", +"a2f78d7a": "startICO(address,address)", +"a2f792d5": "AdministratorAdded(address,address)", +"a2f7a2e0": "changeIcoPhaseAmounts(uint256[])", +"a2f7b3a5": "instances(uint256)", +"a2f7b7fd": "callTokenFallbackIfNeeded(address,address,uint256,bytes)", +"a2f7f58f": "getBetAmountOf(uint256,uint256)", +"a2f91af2": "cage(uint256)", +"a2f95b44": "committeesArray(uint256)", +"a2f9eac6": "persons(uint256)", +"a2fa0157": "isAssetActive(address)", +"a2fb1175": "winners(uint256)", +"a2fb342d": "lend(address,uint256)", +"a2fb98fa": "starting_clones()", +"a2fba23c": "holderGroup(address)", +"a2fbe98c": "haveIWon()", +"a2fc0bd5": "BuyEvent(address,uint256,uint256,uint256)", +"a2fc2254": "LAFINAL3()", +"a2fcd1af": "amountRaisedInUsd()", +"a2fd0179": "unlockBatchOfAddressesAfterITO(address[])", +"a2fdea11": "getBonusCoefficient()", +"a2fe802b": "isExit()", +"a3000128": "getContributionHash(address,uint256)", +"a3006abf": "buyBoosterPack()", +"a3006f5f": "CETFToken()", +"a300aa66": "RIKCoin(address,address)", +"a300c6ae": "confirmCollRecv(uint256)", +"a300eadf": "_getAllParents(bytes32)", +"a3011a02": "WatcharaHashCoin1()", +"a301b493": "Milestone_IcoFailed(string)", +"a3022667": "modifyAllLevelCaps(uint256[])", +"a302fdf1": "WHITELIST_BONUS_RATE()", +"a3030b10": "getTournamentBattleResult(int256,int256,uint256,uint256,uint256)", +"a3031b77": "getTradeCount()", +"a3032f25": "claimTreshold()", +"a3035454": "WeiControllerFactory(address)", +"a30376b7": "getReferralCount(uint256)", +"a3045113": "payUp()", +"a304f625": "updateInheritedEarlyParticipantWhitelist(address,uint256)", +"a3053236": "SafeInvestments()", +"a305ac76": "futureHolder()", +"a306e754": "batchIssueTokens(uint256)", +"a3078815": "darknodeOwner(address)", +"a307b727": "refund(bytes32,string,address)", +"a3082be9": "GoodLuck(uint256,uint256)", +"a30872db": "tierContract()", +"a308c2a7": "validReferralCode(string)", +"a30955af": "balanceToken()", +"a309800c": "_withdrawWei(uint256)", +"a309f2ee": "setBalanace(bytes32,address,uint256)", +"a309f589": "crowdsaleRatio()", +"a30a86fe": "setMainSaleParameters(uint256,uint256,uint256,uint256)", +"a30b5c69": "AttributeModel()", +"a30bdea4": "isOffchainWhitelisted(address,bytes)", +"a30c5f17": "get_root()", +"a30cc5f6": "multiFixed(uint256[2][6])", +"a30d5627": "ItemToken()", +"a30d59c9": "getEggsCount()", +"a30eb0ef": "freeTokenTime()", +"a30eddcc": "bitSlice(uint256,uint256,uint256)", +"a30ef9e7": "toBase32(bytes)", +"a30f786f": "allowedRewardTokens()", +"a30fb52d": "sendGameGift(address)", +"a30fbae1": "endBuyBackDate()", +"a310293e": "weiDonated()", +"a31052e8": "clearReleaseTime(address)", +"a3106b95": "setMinterAddress(address)", +"a310f36a": "test2(bytes,uint256)", +"a3111d7c": "withdrawListing(uint256,address,bytes32)", +"a311a08e": "setPartners(bool,uint256,uint256)", +"a311c7c2": "collateralisationRatio(address)", +"a311d157": "addContributor(address,uint256,uint256)", +"a311d970": "TokenTycoonIGO()", +"a311dd70": "setArray(uint8[10])", +"a31271f5": "updCrowdSaleEnabled(bool)", +"a313c371": "memberInfo(address)", +"a31477b4": "getSncTokenIssuance(uint256,uint256)", +"a314acfe": "attemptToClaimCard(address,address[3])", +"a314dc2d": "feePayed()", +"a3155013": "month60Allocated()", +"a315acf5": "minter_address()", +"a315cda0": "priceOfSmartContract()", +"a316aa93": "setActivityDetails(uint256,string)", +"a3179fe0": "getAccountsNumber()", +"a317abc7": "defaultMax()", +"a318d521": "disableBeforeActivation()", +"a3194d50": "setFinished(uint8,bool)", +"a319b232": "VTCoin(uint256,string,uint8,string)", +"a31a9752": "Payout(uint256,bool)", +"a31b858d": "_buyDiscountTTM(uint256,uint256,address,address)", +"a31c5436": "TOKEN_AMOUNT_PRE_ICO()", +"a31caec8": "AkilosToken()", +"a31cc317": "evaluateContract()", +"a31cd710": "_getExpMultiple(int256)", +"a31d291a": "HOHO(uint256,string,string)", +"a31d30a5": "WhitelistUpdated(uint256,string,address,uint256)", +"a31d5580": "Registrar(address,bytes32,address)", +"a31e3678": "addExceptAddress(address,address)", +"a31e5e97": "setHouseAddressOne(address)", +"a31e88c2": "numIntervals()", +"a31f2c52": "partner2_voted_update_prenup()", +"a31f61fc": "setGroupCap(address[],uint256)", +"a31f79fb": "slopeReleasePercentage()", +"a31ffa30": "setCtuContract(address)", +"a3201daa": "setPrices(uint256)", +"a3208c1e": "addUserIntoBlacklist(address)", +"a3210e87": "sendeth(address,uint256)", +"a3221c8e": "step8()", +"a3223d50": "ETHER_MIN_CONTRIB_USA()", +"a322accf": "tokenFallbackExpanded(address,uint256,bytes,address,address)", +"a322c40e": "toString(int256)", +"a322d49e": "FirstTradingEcosystemCoin()", +"a323a748": "SBT()", +"a323af85": "hasTwoStepWithdraw()", +"a323bdb4": "currentPublicSale()", +"a3240455": "offerStarForSale(uint256,uint256)", +"a3246549": "stageOneClosed()", +"a324ad24": "getMonth(uint256)", +"a324cca0": "optimalLog(uint256)", +"a324ed9f": "BurnUnsoldToken(uint256)", +"a324f8bf": "tanksBeforeTheNewTankType()", +"a32508a1": "Carpati()", +"a3262e57": "burnCoin(uint256)", +"a32710eb": "setRole(address,address)", +"a3273535": "tdeDuration()", +"a327a958": "numCourse()", +"a327c45d": "dev1()", +"a328f90b": "_nextBudgetStartAndEndAndOfficalVotingTime()", +"a3293c0e": "handToCards(uint32)", +"a32a6737": "setTotalDeposit(address,uint256,address)", +"a32ac9e1": "Bitcoin_IDToken(uint256,string,uint8,string)", +"a32af535": "depositAndFreeze(address,address)", +"a32affeb": "loadEarlyParticipantsWhitelist(address[],uint256[])", +"a32bf597": "getCurrentRound()", +"a32c3bd6": "GetBounty(address,uint256)", +"a32cb608": "getReverseRate(address)", +"a32ce11e": "approvals(address,address)", +"a32e935a": "allocateTokenForTeam()", +"a32f0f41": "testFailControllerUnapprovedTransferFrom()", +"a330814c": "unregisterAuditor(address,address)", +"a3316ccc": "RATE_SALESTAGE7()", +"a3318359": "sendPrizes()", +"a331939d": "freezeAdmin()", +"a331cd38": "toKeyValue(uint256,string)", +"a3322a12": "getFilesCount()", +"a332853a": "futureDevelopmentFundAddress()", +"a3330574": "checkAndMint(uint256)", +"a333658f": "addTreasuryManager(address)", +"a333f96d": "LogRefundProcessed(address,uint256)", +"a33467cf": "getClue2()", +"a334edf6": "consumeWine(uint256)", +"a3358ae4": "REAPER_INTREPID_EXTRACTION_BASE()", +"a335b828": "FUS()", +"a337840c": "setGuardianRune(uint256,uint256)", +"a338bd2c": "showTopBonusBalance()", +"a338eba5": "sendTokens(address[],uint256)", +"a3393a35": "getDrawEthAmount(uint256,address,uint256)", +"a3395a52": "searchTicketsXaddr(address)", +"a339aaf7": "addOracles(bytes4[],address[])", +"a339abd5": "crowdsaleOpeningTime()", +"a339c18f": "ACNNIco(uint256,uint256,uint256,address,address)", +"a339c21a": "addContractTestToBounty(address,address)", +"a33a5225": "allRefererTokens()", +"a33b7510": "shareAddEtherValue()", +"a33bea16": "GENEOSSale(uint256)", +"a33c0972": "tokenAllocToCompany()", +"a33cbc55": "TCI_admin()", +"a33d4968": "Tripler()", +"a33d5d9d": "EthDev()", +"a33d652e": "setFunding(uint256)", +"a33dd801": "setTreasuryBalance(uint256)", +"a33e1d16": "drapcoin()", +"a33e6b07": "AccountFrozen(address,bool)", +"a33e8d62": "RxEALTokenContract()", +"a33eaa0b": "_setTokenUri(uint256,string,string,string,uint256)", +"a33ed39d": "numRef()", +"a33eff5a": "createResource(bytes32,bytes32,bytes32)", +"a33f3939": "setNetwork()", +"a340295a": "setPhoenixOwners(address[19])", +"a340ceac": "transfekbolOwnership(address)", +"a340cf79": "paid(address)", +"a340d587": "offlinePurchase(address,uint256)", +"a3414653": "COIN_COST_ICO_TIER_1()", +"a3429689": "TaiCoin()", +"a3435da5": "BONUS_LEVEL_3()", +"a3451568": "airdropBatchTransfer(address[],uint256)", +"a3454712": "AssetCreated(address)", +"a34560be": "updateEtherCap(uint256)", +"a34574f0": "gamers()", +"a346b62d": "CaptainKitties()", +"a346e536": "week_winner()", +"a3472270": "mock_getAddress(uint256)", +"a347ef84": "calcpustprice(uint256,uint256)", +"a348ea79": "contests(address)", +"a34945db": "maxAllowedBetInEth()", +"a3494fdc": "expectRefund(uint256)", +"a349bfa2": "addOwner(address,uint256,uint256)", +"a349d683": "FRP()", +"a34ad6b6": "clockmint()", +"a34bbf51": "getGeneralInfo()", +"a34c6716": "testHashing(address,uint256,address,uint256,uint256,uint8,bytes32,bytes32,bytes32)", +"a34cc845": "win(address)", +"a34d2ff7": "votingBymy(bool)", +"a34d42b8": "setContractOwner(address)", +"a34d5312": "registryRequestVendor()", +"a34d5f82": "GiveBlockReward()", +"a34d7c11": "flipCoinWithEther(uint8,uint8)", +"a34d9270": "setMinInvestedLimit(uint256)", +"a34d942b": "FUXEToken()", +"a34dffba": "SILVER_AMOUNT_NDC()", +"a34e5990": "setTier(uint256,uint256)", +"a34e9e66": "approveBcoupons(address,uint256)", +"a34edc03": "assertTrue(bool,string)", +"a34f42a9": "LogRandom(uint256,uint256)", +"a34f82f4": "summFounders()", +"a34fc5ac": "_lockTokens(address,uint256)", +"a350539e": "makeBid(uint32)", +"a3508b17": "getOpenedStageIndex()", +"a35132ac": "SMSReward(address)", +"a3515b98": "initializeWeekData(uint256)", +"a352f1a8": "calcSHA3(bytes)", +"a3536b0c": "calculateHolderPiece(address)", +"a353c600": "Ponged(uint256,string)", +"a35523da": "currentLoanDayTime()", +"a356fdf3": "getPreICOPercentage(uint8)", +"a3577e93": "depositFunds(bytes,uint8[2],bytes32[2],bytes32[2])", +"a357880d": "whitelistedAddrs(address)", +"a3580695": "inSpecialSalePeriod()", +"a358aa18": "_transferFromInvestor(address,address,uint256)", +"a35a319b": "delFromBlackList(address)", +"a35aae9c": "roundID_()", +"a35ae3ab": "Bam()", +"a35bc497": "remainTime(uint256)", +"a35bd437": "toUSD()", +"a35bd591": "newRound(uint256)", +"a35bfcac": "ownerRemoveRole(address,string)", +"a35cad77": "maxLeaders()", +"a35cfa22": "make_move(uint256,uint8,uint8,uint8,uint8)", +"a35d631a": "PausableMock()", +"a35d6dd6": "rDEX()", +"a35d78a6": "_approvedGen1(address,uint256)", +"a35da419": "setlock(bool)", +"a35e617f": "setMaxCount(uint256)", +"a35e83ea": "getReplay(uint256,uint256)", +"a35f9514": "calcDstQty(uint256,uint256,uint256,uint256)", +"a360098f": "Immigration(address,address)", +"a360b26f": "Migrations()", +"a361b184": "move(bytes32,bytes32)", +"a3624b72": "finalizeTransferAddressType()", +"a362858a": "EthereumCashPro()", +"a36298c7": "totalLimit()", +"a362cf0c": "TrueWorld(uint256,string,string)", +"a363f269": "watchMovie()", +"a3641c84": "card_metal_first()", +"a364b5c1": "setProposalNames(bytes32[])", +"a365bd9f": "BaseToken(string,string,uint256)", +"a365f3cc": "Util()", +"a3666d23": "weekTwoPriceRiseBegin()", +"a367b891": "SplitPhaseDistribution(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"a367d99a": "investStart()", +"a367e565": "setIBalances(uint256[],uint256[])", +"a368107b": "SetRecordType(uint32)", +"a369658c": "TARGET_EVE()", +"a369b0ac": "depositsClosed()", +"a369bb28": "SaleWallet(address,uint256,address)", +"a36a0551": "createCarrierFromVault()", +"a36a48a5": "ETH500on719()", +"a36a7526": "setOp(address)", +"a36b15d0": "enableBundlingMultitoken(uint256)", +"a36b8af1": "LogItemModified(address,uint256,uint256,bytes32,bytes32,bytes32)", +"a36badd7": "hasJobRecommendations(address,address,uint256)", +"a36be43a": "SetFreeYOU(uint256)", +"a36be9a1": "paybackDeadline()", +"a36c2cbe": "informarOng(address)", +"a36c8ec2": "UpdateContractorAddress(address)", +"a36db282": "SendLCRTokens(address,address,uint256)", +"a36ddfae": "_0xForkTokenToken()", +"a36f127e": "removePresetTransfer(address)", +"a36f259d": "campaignOf(address)", +"a36ff98b": "team1Points()", +"a36ffd4d": "ADEToken()", +"a37173e9": "transfer_left_funds_to_project()", +"a37218ed": "MAMECOIN()", +"a3721adc": "contractCreationBlockNumber()", +"a37330ea": "getDestroyedWhenRoundOver()", +"a3743afc": "getProjectHour(uint256)", +"a374480a": "placeValue(address)", +"a3744828": "GetPriceByN(uint256)", +"a3747fef": "register(bytes,bytes)", +"a375de4f": "addTokensToBank(address,uint256)", +"a37641ff": "MAX_RING_SIZE()", +"a3766f88": "tokenVendor()", +"a376c19d": "setEventResult(string)", +"a377104c": "init(string,uint256,uint256,uint256)", +"a377b34e": "YoloToken(uint256)", +"a377ff17": "setHorseDataAddr(address,address)", +"a3787858": "resumeBlockNumber()", +"a37889a9": "createPromoGirl(uint256)", +"a378bba5": "gameEnds()", +"a3792985": "getBonusDropsOf(address)", +"a37936f9": "SuspendEmployee(address,uint32)", +"a379e626": "ownerPerThousandShareForBuying()", +"a37a3859": "configPerFund()", +"a37a778f": "SetIPR(string,string,address,string,string,uint256,string)", +"a37ba32a": "duration(bytes32)", +"a37be00f": "transferBackTo(uint256,address)", +"a37be75f": "ethBase()", +"a37c314d": "set_iconiq_tokens(address,address,uint256)", +"a37ccabc": "PositionBought(uint256,uint256,uint256,address,uint256,uint256)", +"a37d1556": "refAmount(address)", +"a37da615": "showInvestedNum(address)", +"a37dec33": "calculateWineSell(uint256,uint256)", +"a37e66f5": "ethPendingManagement()", +"a37e6f69": "failedByDeveloper()", +"a37f00f7": "getItemByTokenID(uint256)", +"a37fd390": "setHomeAdv(uint256,string)", +"a380dcb9": "wpp()", +"a381de54": "bonusAddress()", +"a382aee2": "fourthExchangeRate()", +"a382edfd": "SeeleGold()", +"a38320e6": "TITANToken()", +"a3833a13": "balanceOfColdWallet()", +"a3848b1a": "getMonsterIVs()", +"a384af00": "market_BuyForSale(uint256)", +"a384d6ff": "lowerBound()", +"a38591fc": "test_percOf1()", +"a3863d81": "buyTokensLowLevel(address,uint256)", +"a38717f4": "exFeeTotal()", +"a3875883": "etherPriceUSDWEI()", +"a387cf34": "closeTokenSale()", +"a3885413": "withdrawOwner(address,uint256)", +"a388a836": "DDAContract(address)", +"a3893a33": "changeExchanger(address)", +"a3895fff": "changeSymbol(string)", +"a389783e": "isApproved(address,address)", +"a389ef53": "receiveDeposit(uint256,uint256)", +"a38b68cb": "nonzeroAddressesLengthForApi(uint256)", +"a38b8469": "TokenADSVENTURE()", +"a38b9a19": "printQuotation()", +"a38c48b6": "createProductionUnit2Beta()", +"a38ce2b4": "revokeAddress()", +"a38deeab": "Grid(uint16,uint256,uint256,uint256)", +"a38eb622": "pauseBuy()", +"a38f18a0": "RedBlueToken3()", +"a3907d71": "enable()", +"a3908e1b": "convert(uint256)", +"a3912ec8": "receiveEther()", +"a3916164": "withdrawInvestments()", +"a391c15b": "div(uint256,uint256)", +"a3922eac": "setCategories(address,uint256,uint256)", +"a3926f14": "PixelsMain()", +"a392f54a": "giveMeCoins(uint256)", +"a3934de4": "Upgrade(uint256,address,address,address)", +"a39385de": "transferWithReferenceCallGas()", +"a393dc44": "_totalsupply()", +"a393fb0f": "reducemoney(address,uint256)", +"a39417f9": "LOG_NewBet(address,uint256)", +"a39495f0": "isPreallocated()", +"a394bbc8": "isRegisteredParticipant(bytes32)", +"a395e2cc": "TPLAYToken(uint256,string,string,uint8)", +"a3961207": "amountOfRedemptionPayouts()", +"a3964cb9": "toB32(bytes,address,bytes)", +"a396541e": "getPongvalTxRetrievalAttempted()", +"a397d8e0": "getUnusedBalance(address)", +"a398063a": "setEmergentHalt(bool)", +"a3980dd7": "Readycoin()", +"a3988500": "CloudexchangeCrowdsale(uint256,uint256,address)", +"a398b89b": "receivedEther(address,uint256)", +"a39953b2": "startCrowdsale()", +"a399eb76": "ZoharTC()", +"a39a2b76": "dropUnitPrice()", +"a39a45b7": "replaceOwner(address)", +"a39a70a9": "developReserveTimeLock()", +"a39aaec6": "getCompte_37()", +"a39ab3a3": "bla(address)", +"a39ad747": "minVote()", +"a39b10d2": "lastBlock_a17()", +"a39d716d": "WithdrawBalance()", +"a39db022": "changeBonus(uint256,uint256,uint256)", +"a39dc9be": "HOUR()", +"a39e1149": "getSECOND_STEP_MULTIPLIER()", +"a39eede8": "settleAssets()", +"a39f7449": "startTimer()", +"a39f9712": "sendTokensAfterBuy(address,uint256)", +"a39fa2f6": "VPE_address()", +"a39fac12": "getAddresses()", +"a3a06c54": "endICOPhase()", +"a3a0b937": "transferFokenWhitelisted(uint256)", +"a3a0ee24": "evFreeze(address,uint256)", +"a3a183c1": "overflow(address)", +"a3a187cf": "TokenBought(address,uint256)", +"a3a1cd6d": "getNumberOfKnownPropertyAddresses()", +"a3a1d015": "failUserRefund(uint256[])", +"a3a27105": "stakeholderPayment(address)", +"a3a402a7": "deletefromblacklist(address)", +"a3a40323": "ArtificialNeuralNetwork()", +"a3a40ea5": "getCurrentPhase()", +"a3a4851a": "deliveryReject(address)", +"a3a48785": "unsetClaim(uint256)", +"a3a4a18b": "test_claimShares_emptyFeePool_isTranscoder()", +"a3a4ba31": "createChild()", +"a3a4c74d": "closeAutoFree(address)", +"a3a51983": "updateCurrentStage()", +"a3a5650a": "currentStageMaxSupply()", +"a3a6a43e": "approveUserKYC(address)", +"a3a6c73e": "_isIdExisted(string)", +"a3a7647c": "tier1Count()", +"a3a7b804": "changeMaxGasprice(uint256)", +"a3a7e7f3": "transferAll(address)", +"a3a81d40": "totalBGX()", +"a3a82678": "collectRef(address)", +"a3a9196a": "dexTestNormalTransfer(address,address,uint256)", +"a3a93721": "SYLVIe()", +"a3a9d67b": "AdviserCasperToken()", +"a3aa1913": "balanceDetails(address)", +"a3ab5045": "isNewTile(uint16)", +"a3aba50e": "referrerEnable()", +"a3ad1676": "isPurchasedEpisode(uint256,address)", +"a3adb958": "transferToggleRequester()", +"a3ae2f5c": "award(uint256,address)", +"a3ae88a0": "totalUSD()", +"a3b01f23": "intoverflow_add(uint256)", +"a3b0bff4": "getPersonalStakeActualAmounts(address,address)", +"a3b0c661": "setLineUpEnable_default(uint256)", +"a3b1dc52": "logEscapeHatchChanged(bool)", +"a3b2363d": "parentAddress(address)", +"a3b24dcd": "getSumsHash(address)", +"a3b2938d": "updateStatusInternal()", +"a3b2c41e": "readArticle(bytes32)", +"a3b34190": "unlockSecond()", +"a3b3fff1": "getVotingToChangeMinThreshold()", +"a3b42cba": "register(bytes8,bytes8,uint256)", +"a3b4ab48": "BBPToken(address,uint256)", +"a3b4b07f": "ACL_APP()", +"a3b6120c": "dateStart()", +"a3b61cf0": "getuserprize(address)", +"a3b62bc3": "AdminRemoved(address)", +"a3b65d29": "getarg_3()", +"a3b80993": "WorkValley()", +"a3b8cd3b": "_equipDownOne(address,uint16)", +"a3b908ff": "unusedOf(address)", +"a3b922ca": "buyPandaERC20(address,address,uint256,uint256)", +"a3b959da": "change_dev(address)", +"a3b9b8d1": "receivePaymentForOraclize()", +"a3bbc294": "galleassTransferFrom(address,address,uint256)", +"a3bbf81b": "USACOIN()", +"a3bc3fce": "getFillOrderMinGasNeeded()", +"a3bc6163": "getMessageGas()", +"a3bdc655": "getRemainingTimeTillExpiration()", +"a3be094d": "countTokens(uint256)", +"a3bef4d7": "numVotes()", +"a3bf5b9a": "revokePermission(address)", +"a3bfdf47": "closeSession(uint256)", +"a3bfe069": "_sumActivePerks(uint8[32])", +"a3c07c6a": "removeHatchingTime()", +"a3c0a477": "crowdsaleIsActive()", +"a3c1954e": "supporter()", +"a3c1d83d": "forgiveMeOnBehalfOf(address)", +"a3c28dfc": "eventExists(uint256)", +"a3c2c462": "totalReceived()", +"a3c441e7": "setAdvisoryWallet(address)", +"a3c49da0": "DollarCoin()", +"a3c50b32": "orderDetails(bytes32)", +"a3c66c1d": "notEqual(bytes32[],bytes32[],string)", +"a3c68e3d": "CancelGameAfterResultsPublished()", +"a3c86bef": "AcademyToken(address)", +"a3c88b31": "addInternalBalance(uint256)", +"a3c8ef7a": "signedByWhiteHat()", +"a3c9df3f": "plutocrat()", +"a3c9fc7d": "_withdrawTo(uint256,uint256,uint256,uint256)", +"a3ca17b2": "getUSDETHPrice()", +"a3cb3e97": "removeHatchingTimeWithToken(address)", +"a3cb679d": "getTotalBets()", +"a3cbf67d": "NewBOP(address,address,address,uint256,bool,uint256,string)", +"a3cc8b9c": "changeRateUSD(uint256)", +"a3cd2d78": "nextReward(uint256)", +"a3cd4065": "ReceiveBTC(address,uint256)", +"a3cf3ec0": "lowestAddressReserving()", +"a3d07452": "fightAuction()", +"a3d2078b": "TokenSaleOpened()", +"a3d23e52": "round2Cap()", +"a3d3a265": "setCreditBond(address)", +"a3d4e4b5": "buyItem(uint8,uint8,uint256,uint256)", +"a3d53934": "MegaToken()", +"a3d5e8e0": "_update(uint256,string)", +"a3d5ec39": "PlynToken()", +"a3d646fe": "ETHEUR()", +"a3d658dc": "extendLiquidationPeriod(uint256)", +"a3d6f9a9": "publicKeys(address)", +"a3d7bd43": "doSend(address,uint256)", +"a3d823ad": "changeORACLIZE_GAS_LIMIT(uint256)", +"a3d87805": "TerraToken(uint256)", +"a3d88453": "isAvailableAccount(address)", +"a3d8fdd5": "totalAccessorySeries()", +"a3d94402": "safeMathAdd(uint256,uint256)", +"a3d9c3d1": "ApprovalHash(bytes32,bytes32,uint256)", +"a3dab216": "setOpeningClosingTime(uint256,uint256)", +"a3dc65a7": "wipe(address,bytes32,uint256)", +"a3dc8a7a": "exrate()", +"a3dcb4d2": "receiverAddr()", +"a3dceacb": "MessageSent(uint256,uint256,string,string)", +"a3dd2619": "getCurrentStatus()", +"a3dd2b3e": "projectInfo(address)", +"a3dd3aa7": "setGBT(address)", +"a3ddc24a": "purchaseDeposit(address,uint256)", +"a3de9354": "createDividendWithCheckpoint(uint256,uint256,uint256,int256)", +"a3def923": "create(address,bytes32)", +"a3df30b4": "GIDe()", +"a3df870a": "hentaisolo()", +"a3dfc364": "StartGame()", +"a3dfcb0d": "_setUniqueValue0(uint256)", +"a3dfdf30": "read_i64_array()", +"a3e135fa": "reclaimTokien(address,address,uint256)", +"a3e14d74": "getLowerBoundBlocksTillGameEnd()", +"a3e1f666": "getCreatorMetadataOfHistoricalMetadata(string,uint256)", +"a3e20625": "giveReputation(address,bool,string)", +"a3e20d71": "transferUnPaidFundAccount(address,uint256)", +"a3e29360": "ownedTicketIdList(address)", +"a3e298d1": "VIBETPerEther()", +"a3e2b1de": "getProjectArbiter(bytes32)", +"a3e2ce24": "getTokensAndAmounts()", +"a3e31246": "setLucky()", +"a3e3a8e0": "withdrawEthPool(uint256,uint256)", +"a3e486d1": "ptc_balance(address)", +"a3e4c0c4": "setRandomizer(uint256)", +"a3e667b3": "releaseMany(uint256,uint256)", +"a3e67610": "tokenOwner()", +"a3e7061d": "getPaintingIdAtIndex(uint256)", +"a3e76c0f": "receive()", +"a3e787b5": "FITToken()", +"a3e831b4": "NewTokenFromFactory(address,address,uint256)", +"a3e860fe": "DEFAULT_RATE()", +"a3e8b6db": "MetrumcoinShares()", +"a3ea1376": "removeListingInternal(uint64)", +"a3ea478f": "setTier1Participants(address[])", +"a3eb6436": "TOKETH_PRESALE_TWO()", +"a3ebb0b3": "getConsideration(uint256)", +"a3ebeab7": "testConcatMemory4Bytes()", +"a3ec138d": "voters(address)", +"a3ec5616": "next(bytes,bytes,bytes,bytes,bytes,bytes,bytes,uint256)", +"a3ecbc33": "DSPUnregistered(address)", +"a3efc756": "transferPreICOFunds()", +"a3f144ae": "OFFSET19700101()", +"a3f1bd35": "getDouble()", +"a3f1ee91": "RequirementChange(uint256)", +"a3f22739": "payout(uint256,uint256,bytes32,bytes32)", +"a3f2a813": "StartsAtChanged(uint256)", +"a3f2d2b5": "SZA(uint256,string,string,uint8)", +"a3f31b80": "teamPayment(address)", +"a3f36da3": "ProRataDistribution()", +"a3f3dd32": "Verifier(uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"a3f424c2": "verifyProof(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[10])", +"a3f4df7e": "NAME()", +"a3f5a178": "approveTakeover(uint256,address)", +"a3f5c03d": "launchInvestment()", +"a3f5c1d2": "nexus()", +"a3f66b46": "newQuestion(string)", +"a3f67d6d": "playersCount()", +"a3f70ed3": "party_a()", +"a3f7c989": "enableStorage(bool)", +"a3f7e26d": "finishMintingIssuer()", +"a3f8eace": "releasable(address)", +"a3f991a5": "totalPot_()", +"a3face0b": "setInteractionPrice(uint256)", +"a3faef60": "MicroBitCoin()", +"a3fb5917": "getFirstOrder()", +"a3fb8f15": "getRaisedPOLY()", +"a3fbbaae": "changeManager(address)", +"a3fc136a": "signedApproveSig()", +"a3fc32c8": "getWLInfo()", +"a3fc81cb": "buyTokensViaBackend(address,uint256)", +"a3fca677": "LogBuy(address,address,uint256,uint256)", +"a3fcafb9": "soldCoins()", +"a3fcf9bc": "operationsPercentOfTotal()", +"a3fd6d0e": "feePaid(bytes4,uint256)", +"a3fdfee3": "deny()", +"a3fe0dc7": "userCrateCount(address)", +"a3fe70cb": "exchangeEnd()", +"a3ff0ea2": "issueAsset(bytes32,uint256,string,string,uint8,bool,address)", +"a3ff31b5": "getTokenStatus(address)", +"a3ff428e": "angelCardSeriesCollection(uint8)", +"a3ffac0d": "td()", +"a400594d": "lockAddress(address,address)", +"a4009e23": "TEST_MODE()", +"a400be54": "coinSendSameValue(address,address[],uint256)", +"a401d24d": "assignToken(address,uint256)", +"a401e585": "withdraw_privatefund(bool)", +"a4036b1c": "getAdPriceHour()", +"a4039098": "StartCompetitionEvent(uint32)", +"a4039a2a": "createNonRepeatableVpfFactory(string,bytes32,uint256,uint256,int256[])", +"a404f291": "microRate()", +"a40544c3": "notifyCancelSellOrder()", +"a4055f62": "freezeAccounts(address[],bool,bool)", +"a40668f5": "testDeregisterProduct()", +"a407db23": "GHK()", +"a407ee79": "bytes32ToAlphabetString(bytes32)", +"a4083849": "right44(uint256)", +"a4086854": "approveTransfer(uint256,address)", +"a4093718": "issueToken(uint256,uint256)", +"a4094a0d": "calculateFeeForAccount(uint256,uint256,address)", +"a409eb7b": "hasRequested(address)", +"a40a485f": "deathData_v3()", +"a40a99ac": "getInsertPointForNumTokens(int256,address,uint256)", +"a40ae4b7": "_uintToBytes(uint256)", +"a40bc352": "crowdSalePause()", +"a40c0a54": "USDGamblingToken()", +"a40c5221": "updateTokenAmount(address,uint256,uint256)", +"a40c8ad0": "addGenesisCatGroup()", +"a40cd3f3": "minContributionInWei()", +"a40cee9c": "updateIdentityImageURL(address,bytes32)", +"a40d32fe": "minPaymentAmount()", +"a40e0b91": "testGoalReached()", +"a40edb07": "processVerification(bytes32,string)", +"a40f1796": "prefixedHash(address)", +"a40fbd2b": "makeKebabs(address)", +"a410424e": "isMoneySent()", +"a4109017": "VanityTransfered(address,address,string)", +"a410a7f2": "getParticipantTickets(address)", +"a410f4b1": "changeFeePercentage(uint8)", +"a4112088": "Add_Company(uint256,string,string)", +"a412c6fc": "getRules(string)", +"a412f87c": "verifyInvestment(address,uint256)", +"a412fcc7": "defineType(string,uint8,uint8,uint32,uint8,uint32,uint8,uint32[5],uint32[5],uint32[5])", +"a413245a": "deductFromBond(address,uint256)", +"a41347e3": "usersCanTransfer()", +"a4136272": "MAX_TOKEN_SALES()", +"a4136862": "setGreeting(string)", +"a4144681": "RK40Z()", +"a414b00d": "SUNToken()", +"a414b379": "addContact(address)", +"a414e089": "Dimacoin()", +"a415833b": "numPurchasesOf(address)", +"a415965c": "refillMultiSigMintPool()", +"a415a93e": "initWithShips()", +"a415b8eb": "getCCH_edit_31()", +"a416b263": "charAt(bytes32,uint256)", +"a416b48c": "getActionCount(uint256)", +"a417357c": "unpauseTokens()", +"a419165e": "TokenCappedCrowdsale()", +"a41942a4": "transferCuratorship(address)", +"a419b0e7": "set_milestone_details(uint256,string,string,string,string,string)", +"a419f1e7": "NewPlayerAdded(uint256,uint256)", +"a41a9445": "getStopTransfer(address)", +"a41b3887": "setPrefixPrice(uint256,uint256)", +"a41b9c31": "unconfirmAddress(address)", +"a41d0584": "fixAddress(address,uint256)", +"a41da348": "fomo3d()", +"a41dedcc": "testAbs()", +"a41e61a4": "minSaleBalance()", +"a41e7d51": "updateERC165Cache(address,bytes4)", +"a41f0069": "GershToken()", +"a41fd917": "getUnprocessedQueryList()", +"a41ff1e5": "maxMintingDays()", +"a4201125": "sanToLower(string)", +"a4202504": "getPhaseSold(uint256)", +"a4202615": "makeAdoptionOfferToAddress(bytes5,uint256,address)", +"a4204e39": "getQuotes()", +"a42214b2": "cancelAuctionEmergency(uint256)", +"a422b761": "tokensIssued(address)", +"a422c0ca": "updateBonusParameters(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4230bd5": "addAdmin(address,bool)", +"a4238d31": "receiveBalanceUpdate(address)", +"a4245527": "getPaintingOriginal(uint256)", +"a424fa49": "NPXSToken()", +"a42533c8": "tubParamUpdate()", +"a4254fb4": "couponTokenBountyAddr()", +"a425b752": "destroyStake(address,bytes32,uint256,uint256)", +"a4262254": "calcFib(uint256)", +"a4268de6": "oracleItQuery(uint256,string,string,uint256,uint256)", +"a426cd19": "validPLAContract(uint32,uint32)", +"a4275535": "XTYF()", +"a4276533": "getProposalNum()", +"a427c5d9": "bonus(uint256,address[],address,uint256[])", +"a427ee36": "FruoCoinBETA()", +"a428033f": "minechaincoin(uint256,string,uint8,string)", +"a428517b": "Converted(address,uint256)", +"a4288d17": "tokensForReservedFund()", +"a429845e": "newCrowdsale(bytes32,uint256,uint256,uint256,uint256)", +"a42aa488": "checkRevert(uint256)", +"a42ac803": "getBonusAffiliate(uint256)", +"a42ad8b3": "NomuraDynamicsCoin()", +"a42b0d88": "advisorsPool()", +"a42b6bf1": "setStorageContract(address,bool)", +"a42cb160": "updatePlayerFund(uint256,address,uint256,uint256,uint256,uint256)", +"a42d630c": "SetupMultipliers(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a42dc008": "newKudosToken(string,string,string,uint8,address)", +"a42dce80": "setFeeCollector(address)", +"a42e16fd": "MultiSig(address[],uint256)", +"a42e36c6": "scheduleTransaction(address,bytes,uint8,uint256[5],uint256)", +"a42ea491": "MrFibreToken()", +"a42ec1bc": "reserveWallet(uint256)", +"a42ecd5c": "setRealRef(address,uint256)", +"a42ef788": "potSwap(uint256)", +"a42f126c": "charityClaim()", +"a42f1edb": "market1()", +"a42f3f9d": "getTAOCurrencyBalances(address,address,address,address)", +"a4316c46": "MarketingToken()", +"a4325485": "getCreatorBalance()", +"a43293b4": "getTransaction(address,uint256)", +"a432cdb0": "Tier_Rainmaker()", +"a432e6d6": "switchToNextPeriod()", +"a4331929": "createNew()", +"a433a0b9": "addRecordByProvider(bytes32,address,string,string)", +"a433d5c6": "IsActiveUser(address,address)", +"a433f390": "approveAndTransferFundToCreator()", +"a4341ab0": "setCount(address,uint256)", +"a4343ae9": "onContribution(uint256,address,uint256,uint256)", +"a43569b3": "getValidatorDescription(address)", +"a43655c4": "rejectRequestPause()", +"a4366a8a": "processPayment(address,uint256,uint256,uint256,bool)", +"a4368de7": "addBonus(string,uint256,uint256,uint256,uint256,string,uint256,string,uint256)", +"a437164b": "assignUserWallet(string,address)", +"a43772bd": "thirdXRChangeBlock()", +"a43796ce": "getSecretSigner()", +"a437ab52": "setDevelopersFee(uint8)", +"a437e07a": "signAuthorship()", +"a437f91f": "doDistroAmount(address[],uint256[])", +"a4381dd4": "StanleyToken()", +"a438d208": "VOTING_DURATION()", +"a43914da": "getRootEdge()", +"a4399263": "finalise()", +"a439d3fa": "ChangeOfRules(uint256,uint256,int256)", +"a43b2ed0": "Test6()", +"a43b5e46": "buyWeapon(uint256)", +"a43b7cd5": "carTaxiToken()", +"a43b92a2": "tournamentIncentiveCut()", +"a43b9423": "triggerPreJackpotLimit()", +"a43be57b": "endPresale()", +"a43c49fc": "mul16(int16,int16)", +"a43c5415": "lastBlock_a3Hash_uint256()", +"a43c6002": "getTokensByGame(uint32)", +"a43cbe1c": "setThirdPartyDepositorDisabled(bool)", +"a43d12a7": "getParticipantesB()", +"a43d76e9": "isValidPrice(uint256,uint256)", +"a43d8654": "getSeason(uint256)", +"a43dc510": "yesBuyer(uint256,uint256)", +"a43e04d8": "removeContract(bytes32)", +"a43e0c2b": "calclulateBonus(uint256)", +"a43ea59b": "PublicSale(address,address,address)", +"a43fecbc": "setUsername(bytes16)", +"a4406bcd": "placeSellOrder(uint256,uint256)", +"a44081d1": "startPhase1()", +"a440a190": "getKeyPrice()", +"a440b21a": "setPortfolioManager(address)", +"a440dd87": "sigExists(bytes32,address)", +"a441698b": "getStockOrderInfo(bool,uint256,uint256,uint256)", +"a441c302": "operationAddress()", +"a442414f": "sumInvested()", +"a4425c55": "lastInvestorsProfitSum()", +"a442b824": "respawnGame()", +"a442d820": "verifyExtraData(bytes32,bytes32,uint256)", +"a4430321": "eachPUSTprice()", +"a4438334": "updateSettings(uint256,uint256,bytes32)", +"a4439890": "sweepUnallocatedDividends()", +"a4439dc5": "commitPeriodActive(uint256)", +"a444502b": "whitelistAccount(address,uint256)", +"a4447515": "getMakerBetBasicInfo(uint256,address)", +"a444ae41": "sourceContract()", +"a444f5e9": "run(uint256)", +"a4453336": "depositGTA(uint256)", +"a4453a96": "totalBuyersMapping()", +"a4453ecf": "splitEth()", +"a445dc5a": "tokensBoughtWithBTC(address,uint256)", +"a445f30d": "setFeeDistributionAndStatusThreshold(uint8,uint16[5],uint256)", +"a4464252": "priceUnitFix(uint256)", +"a447089e": "eniggerToken()", +"a447405e": "_getTravelPrice(address,uint256)", +"a447ff4f": "DXContracts()", +"a4482f41": "setUniquenessIndex(uint32)", +"a448afda": "BalanceChanged(address,uint256)", +"a448f8e0": "OuterContract()", +"a449a62e": "setDSTWalletLMNO(address)", +"a44a00c3": "areTokensSold()", +"a44b1756": "getMyDrugs()", +"a44b47f7": "TotalSupply()", +"a44b6b74": "setColor(uint256,string)", +"a44cff28": "CypressOrganization(bytes,uint256)", +"a44d0eb3": "MAKJLEB()", +"a44da065": "NigerTokenICO()", +"a44dd0f1": "ico2Cap()", +"a44de4e7": "decreaseStepPct()", +"a44e09db": "wadmin_burn(uint256,bool)", +"a44ead73": "ApplyforCertification(string,string,string,string,string,string)", +"a44eda3c": "checkWithdraw(address,uint256,address)", +"a44f40e3": "optionPoolMembersUnlockTime()", +"a4502cb8": "setExportFee(address,uint256)", +"a45066e5": "SingularityTes25()", +"a4516bb1": "SnapshotTaken()", +"a4516fad": "currentGameNumber()", +"a4520aee": "collect(address[])", +"a45230ec": "get_amount_sell(uint256)", +"a4530b4b": "testUpdateProgress()", +"a4534ef7": "remainingSupply_()", +"a453b639": "wuguAddr()", +"a4546876": "roots(address)", +"a454b07b": "checkString(string)", +"a454c5dc": "unlockStep()", +"a45563ed": "UpdateSellAgentBounty(address,address)", +"a4563e03": "totalPendingWithdrawals()", +"a4575296": "pepFarm()", +"a457c2ae": "clientSeed()", +"a457c2d7": "decreaseAllowance(address,uint256)", +"a457e1c0": "purchaseAsset(uint256)", +"a457f27f": "card_titanium_minamount()", +"a45858b6": "setzUint256Array(uint256[2],int256)", +"a458e34f": "setNewContractManager(address)", +"a459ae28": "collectSellFee(address)", +"a45a7371": "executeUpdateTransferFeeRateProposal(uint256)", +"a45b1795": "getAllCardsModifierSecondaryVal()", +"a45c793f": "restore(uint8[176],uint8,uint8)", +"a45cbbf4": "sendAdvisorsTokens(address,uint256)", +"a45cd953": "canPurchase(address,address,uint256)", +"a45d82bd": "signArchive(bytes32,string,string)", +"a45e11ab": "orderMatchBuy(uint256,uint256,uint256,uint256,uint256)", +"a45e1a6e": "getTokenCounters(uint256)", +"a45e7cb5": "addEntry(string,string,string,string,string,address)", +"a45ee32c": "nameOfIdentity()", +"a45f2057": "caltoken()", +"a45f4bfc": "kittyIndexToOwner(uint256)", +"a45f5685": "setOwnerEarnings()", +"a45f71ff": "increaseApprovalPreSignedHashing(address,address,uint256,uint256,uint256)", +"a4604a33": "changeBuyFeePercent(uint256)", +"a460b817": "updateTicketStatus(uint256,uint8)", +"a460bd6c": "presaleRemaining()", +"a4618691": "squak()", +"a4619682": "registerWithDAI(uint256,address)", +"a461cadf": "WHOLE_ETHER()", +"a461fc82": "SELFDESTRUCT_DELAY()", +"a4620d67": "shareholder3()", +"a4623cc4": "addHero(string,address,uint256)", +"a462f87f": "AICoinToken()", +"a462fb7b": "getFinalAnswer(bytes32)", +"a4633704": "NotifyMe(address,address,uint256)", +"a463685f": "AllocatedCrowdsale(address,address,uint256,uint256,uint256,address)", +"a463a500": "setUpgradeHasBegun()", +"a464d265": "editor()", +"a4659ba2": "stakeConfirmed_Eth()", +"a465e6ba": "committeeKickVoters(address,address)", +"a46841e1": "cnyEthRate()", +"a4689d48": "getroundendtime()", +"a4699cad": "resetWithdrawls()", +"a469b809": "getBetAmount(bytes32)", +"a469e5aa": "getOwnerItemIds(address)", +"a46a1219": "AcceptRouting(bytes32,bytes32,uint256,bytes)", +"a46a891e": "fromBase(uint256,bytes8)", +"a46a96d9": "calculateRegionSalePixelPrice(address[16],uint256)", +"a46afef1": "getSponsoring(uint32)", +"a46b3e9b": "treasuryDemurrageAmount(uint256)", +"a46b6593": "sendCandy(address)", +"a46b8171": "excToken()", +"a46c3637": "getWinnerCount()", +"a46c792c": "assignAgent(address)", +"a46c8fee": "ItdFund()", +"a46d11dc": "gType()", +"a46dfb45": "ResolveChips(uint32[])", +"a46efdb5": "getTokensForPreSale(uint256,uint256)", +"a46f3c7a": "getLiveMaxBet()", +"a46fbe1a": "fulfillEthereumChange(bytes32,int256)", +"a46fe83b": "numAssets()", +"a47001a8": "receiveEthPrice(uint256)", +"a470afa7": "Evernal(address)", +"a47255d7": "TimeWeekThree()", +"a472969c": "WithdrawFee()", +"a472c868": "_storeReward(address,int32)", +"a4754fac": "getValidated(uint256)", +"a475b5dd": "reveal()", +"a476f3d3": "demurringFeeNum()", +"a4776955": "setselfdroptoken(address)", +"a4785dfd": "ecverify(bytes32,uint8,bytes32,bytes32,address)", +"a47905cd": "getBondMultiplier(uint256,uint256)", +"a47abd0f": "testIsSuccessful()", +"a47ae542": "getCurrTotalInvest()", +"a47ae71f": "getCurrTypePrice(uint256)", +"a47b1a6c": "getContractsAddrs(address,address)", +"a47c4d64": "isAllocated3()", +"a47c6b84": "cofounderSwitchAddress(address)", +"a47c84bd": "getShiftedTokens(address,uint256)", +"a47ce954": "bonussale_TokenCap()", +"a47e7110": "AnnoMedal()", +"a47e713c": "ACCToken()", +"a47f519b": "CPCE()", +"a47fcc7c": "proposePartnerAllocation(address,uint256)", +"a4800172": "buyDiscountTTMByETH(uint256,address)", +"a48028aa": "valueOf(address)", +"a480ca79": "collectFees(address)", +"a481247c": "isKeyExist(address,address)", +"a48205cb": "emaValue()", +"a4821719": "buyToken()", +"a48255b7": "nextPVPBatleBlock()", +"a4828bca": "TrineChain()", +"a48296d9": "purchasePhoenix(uint256)", +"a484f413": "payJosh()", +"a48515fc": "castConstitutionVote(uint8,address,bool)", +"a48566ba": "serverSeed(address,bytes)", +"a487bcd8": "winners()", +"a487fd07": "ethFundsWallet()", +"a4893536": "_bonusToBettor(uint32,uint8,uint256)", +"a4898fd5": "deployContract(address)", +"a489a2c7": "sanityBounds()", +"a48a663c": "transferFromToICAPWithReference(address,bytes32,uint256,string)", +"a48bdb7c": "results()", +"a48be00b": "activateTokensForJury(uint256)", +"a48c98dd": "deployerAmount()", +"a48cef4a": "oracleInterfaceCountdown()", +"a48d9e70": "getIcoSupply()", +"a48de68b": "createPromoHero(uint256,address)", +"a48e1ff7": "BonusWithdrawn(address,uint256)", +"a48fb972": "_sendReward(address,address,uint256)", +"a49062d4": "MAX_LEVEL()", +"a490a697": "totalBadges()", +"a4923b8f": "placeIndexToOwner(uint256)", +"a492ef60": "Participant(string,address)", +"a4935f1f": "_tokenMetadata(uint256,string)", +"a4938313": "getAdvancedTransfer(bytes32,uint256)", +"a493b39f": "getAdPriceWeek()", +"a494411c": "allocateTokenForAdvisor(address)", +"a4945a07": "ftestnetico()", +"a494817b": "setIdle()", +"a4951771": "MeshPoint(string,address)", +"a4952f19": "LogPolicyPaidOut(uint256,uint256)", +"a4952f80": "getBytesName(string)", +"a49545ec": "useTokens(address,address,uint256,uint256)", +"a495c942": "set_topl_address(address,address,uint256)", +"a4963c0b": "SAPOVAM(address,string,string,uint256,uint256)", +"a49687d1": "stage4Deadline()", +"a4975aff": "raiseNumberOfCheckmarks(uint256)", +"a4978a15": "applyLOT(uint256)", +"a497d8c6": "privateTokenCap()", +"a497e674": "setAuctionDuration(uint256)", +"a4983079": "transferBalanceForPreSale(address,uint256)", +"a49886ce": "testToBytes32(bytes)", +"a4997fac": "propertyAddressOf(uint256)", +"a499bc4a": "DECEX()", +"a49a1e7d": "setMetadata(string)", +"a49a42e1": "CrytoWorldCup()", +"a49bb55c": "currentRoundMultiplier()", +"a49c2bbb": "getBeneficiaryCash(bool)", +"a49cc76c": "createCurrency(string,string,uint8,uint256,string)", +"a49d03bc": "privateSell1Address()", +"a49d53a1": "SmartRevshare()", +"a49d6be2": "shekel()", +"a49e0ab1": "complex()", +"a49e4540": "mintCapInETH()", +"a49ea0ab": "rankOf(bytes)", +"a4a01e33": "payoutRewardsFor(address)", +"a4a0d801": "valueOfContract()", +"a4a1485b": "createEthInvestorRequest(uint256)", +"a4a1a78d": "CertAdminAdded(address)", +"a4a1a9bc": "fightTeams(uint16,uint8,uint8)", +"a4a1e263": "getUsersCount()", +"a4a249d6": "quicksort(uint256[])", +"a4a2a9f6": "init(address,uint256,uint256)", +"a4a33638": "NAST()", +"a4a339ee": "doMint(uint256)", +"a4a3513c": "Accelerate(uint256)", +"a4a46f45": "LOG_InvestorEntrance(address,uint256)", +"a4a47582": "Pyrgressive()", +"a4a4c224": "setAngelLastBattleTime(uint64)", +"a4a5a46e": "EUNO()", +"a4a5e241": "setPrizeEndTime()", +"a4a5f550": "price_exponent2()", +"a4a6795a": "ReserveSupply()", +"a4a68e44": "userlogin(address)", +"a4a691ce": "parseResultCompatible(bytes)", +"a4a75c6e": "tokensSoldAmount()", +"a4a75edc": "registerDeal(address,address)", +"a4a7cf5c": "redeemWinnings(bytes32)", +"a4a83317": "emitChange(bytes32)", +"a4a85b22": "fund(address,address)", +"a4a8f8ea": "migrationHost()", +"a4a92dd0": "_createToken(string,address)", +"a4a94567": "setTokenContract(address,address)", +"a4aac6ec": "diff(int256[])", +"a4ab3e45": "buyerAddressTransfer(bytes32,address,address)", +"a4ab69cd": "cancelBuyOffer(uint32)", +"a4ac3e7d": "FrozenFu(address,bool)", +"a4acbcd6": "pregnantpuppies()", +"a4ad1a5f": "verEntidades()", +"a4adb24b": "createCourse(string,string,uint256)", +"a4adc2f7": "freezeTokens(uint256)", +"a4adc431": "fechVoteResultForCandidate()", +"a4adcde3": "getSingleGuessInfo(uint32)", +"a4ae32fd": "sampleBool(bool)", +"a4af1d1a": "totalPublicSaleStage()", +"a4afaeb0": "AutoKen()", +"a4b03f52": "internalLockAccount(address)", +"a4b06df2": "heapSort(uint8[])", +"a4b0a36f": "exchangeRateUSDToToken()", +"a4b159c0": "benefitMicros()", +"a4b16449": "transferTokensFromRetailersAddress(address,uint256)", +"a4b195ff": "numVoters(uint256)", +"a4b1b020": "transferLockedTokensBackToUser(uint256)", +"a4b1ce55": "scheduleCall(address,address,bytes4,bytes,uint8,uint16,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4b31eb1": "bitWatt(uint256)", +"a4b32bd7": "modifyRent(uint256)", +"a4b3b042": "RDXToken()", +"a4b48828": "getOffer(address,address)", +"a4b52ef2": "hgt()", +"a4b5fa56": "blacklist()", +"a4b7459a": "transferFromToICAPWithReferenceCallGas()", +"a4b7f5ce": "resolutions(uint256)", +"a4b8a543": "sacarETH()", +"a4b8c2e7": "restart(bytes20,bytes32)", +"a4b910fb": "WithdrawToken(uint256)", +"a4b916e2": "mintB2BC(address,uint256)", +"a4ba2971": "addMemoryImageSlice(uint256,bytes)", +"a4ba5bdb": "Leonidas()", +"a4bad0ae": "vestingsBalance(address)", +"a4bb1324": "initGame(address,uint256,bytes32,bytes32,bytes32)", +"a4bb252e": "LogGameCreated(uint256)", +"a4bb43d2": "Beonbox()", +"a4bbded4": "MAX_ICO_SUPPLY()", +"a4bbf1a7": "LAUCHCONTRACT()", +"a4bc51d4": "PrivateSocialPlatform()", +"a4bce83c": "CSCToken()", +"a4bd7a20": "currentBoundary()", +"a4bd7b8d": "countApproval()", +"a4be2ea2": "HardClear()", +"a4be64a4": "warriorBlock()", +"a4beda63": "lockTime(address)", +"a4bef732": "userCancelOrder(address,address,uint256,uint256,address)", +"a4beffa7": "increaseInvestment()", +"a4bf594b": "CORENETCOIN(uint256,string,uint8,string)", +"a4c089be": "debug_finalizeBundleIPFS(bytes32,string,bytes32)", +"a4c0ed36": "onTokenTransfer(address,uint256,bytes)", +"a4c0fd51": "onlinenewsbalita()", +"a4c1e9c0": "depositToUser(address)", +"a4c3dfa4": "buff()", +"a4c3e789": "RUB_Omnidollar()", +"a4c44074": "setCashbackManager(address)", +"a4c4dfea": "WGNToken()", +"a4c4f172": "_arrayContains(uint8[],uint8)", +"a4c5bf66": "removeSkipPrice(uint256)", +"a4c64d78": "getContractDividends()", +"a4c6569b": "isWhiteListed(bytes32)", +"a4c673c5": "pauseInvest()", +"a4c6fcde": "allowEscrow(bool)", +"a4c756c7": "tokenAllocToTeam()", +"a4c7c7b3": "partner1()", +"a4c89322": "ethToTokens(uint256)", +"a4c8b35d": "moneyManager()", +"a4c93cab": "setDistributionSize(uint256)", +"a4c97967": "proof_of_public_key()", +"a4c9b0ca": "deleteTx(bytes32)", +"a4c9bb28": "VLOGCoin(uint256,string,string)", +"a4ca80be": "lockFile()", +"a4cae72b": "_createEtherDog(uint256,uint256,uint256,uint256,address)", +"a4caeb42": "periods()", +"a4ccd1ba": "breakevenLevel()", +"a4cdbd14": "changeSwapLifetimeLimits(uint256,uint256)", +"a4ce48c0": "addProposal(bytes32,uint256,bytes32)", +"a4ce8683": "create(string,string,uint8,address,string,address)", +"a4d1f29f": "BifrostToken()", +"a4d22c13": "enableDonation()", +"a4d28b62": "getMedalsBurned(uint16)", +"a4d33646": "setELIXAddress(address)", +"a4d4f070": "get_token()", +"a4d55686": "totalEthFundRecieved()", +"a4d575ce": "_forward(address,bytes)", +"a4d5a3a5": "airdropAmount(uint256)", +"a4d5a519": "TXwithCode(bytes32,uint256)", +"a4d5e30e": "removeHatchingTimeFee()", +"a4d66daf": "limit()", +"a4d66f1e": "calcReleaseToken(uint256)", +"a4d67d63": "finishGenerating()", +"a4d69fd3": "payoutMethodABI()", +"a4d6bb2b": "latestPayout()", +"a4d714c7": "addressToBytes2(address)", +"a4d72886": "PRE_ICO_RISK_PERCENTAGE()", +"a4d755ff": "setFactoryName(uint256,string)", +"a4d82f95": "Wallet6()", +"a4d840a8": "getInvestorInforMax(uint16)", +"a4d8b40a": "order2Shares(uint256)", +"a4d904ba": "foundersStake()", +"a4d91b02": "createtoken(string,string,string,string,string,string)", +"a4d924b6": "extractableFraction()", +"a4d95c76": "setRobotCoinContract(address)", +"a4d97569": "ACLYDCoinContract()", +"a4d99522": "setCryptaurRecovery(address)", +"a4da79a7": "_tokensOfOwner(address)", +"a4db2e9a": "initDao(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a4db8c73": "BieberToken()", +"a4dbafbb": "batchReturnTokens(uint256)", +"a4dbbbf1": "joinWithCandy(address,uint256,uint256)", +"a4dd73cd": "isMinimumValue()", +"a4ddf312": "numberOfPunksToReserve()", +"a4de3c19": "setFeeAccount(address,bool)", +"a4de64c4": "isFundedMini()", +"a4df0758": "isClaimed(address,address)", +"a4df320d": "end_LOCKUP()", +"a4df6c6a": "freezeTokens(address,uint256)", +"a4df8ca1": "See_TokenPurchaser_Number()", +"a4dff0a2": "zzz()", +"a4e01230": "RamenContract()", +"a4e02fcc": "transferProfit(address,uint256)", +"a4e24173": "getUsersArtefactsIds()", +"a4e2d634": "isLocked()", +"a4e3374b": "transferDelegated(address,address,uint256)", +"a4e339c1": "validate(address,uint256,bytes32,bytes,bytes32)", +"a4e360c8": "getApprovals(uint256)", +"a4e4a7bb": "avatar(address,bytes)", +"a4e6dd3a": "coinDrain()", +"a4e85358": "getTEth(uint256,uint256,uint256)", +"a4e8e360": "enterFreeRaffle(uint256[],uint256)", +"a4e9bcb8": "vxtestPrivateSale(address,address)", +"a4ea471f": "getBoardRowDetails(uint256,uint8)", +"a4eacb34": "removeFromBountyProgramMap(address)", +"a4eaec5f": "targer()", +"a4eb5710": "needReleaseFor(address)", +"a4eba44d": "setPriceCoolingPeriod()", +"a4ebf74d": "CorsariumAccessControl()", +"a4ec0620": "getAllCoins()", +"a4ec11b1": "getStepFunction(uint256)", +"a4ece52c": "pop()", +"a4ed22b6": "testInsertLawyer()", +"a4edff47": "addNote(string)", +"a4ee7c18": "_computeCommission(uint256)", +"a4eed4dd": "setupWhitelist(address,bool)", +"a4ef2cbb": "setWhiteListAgent(address)", +"a4efc580": "lastPriceCheck()", +"a4f0d9b1": "setCut(uint256,uint256)", +"a4f15498": "projectedPrizeForPlayer(address,uint256)", +"a4f2613d": "bid(string,string)", +"a4f28bdd": "fundingMinInEth()", +"a4f29aad": "setTokenName(string)", +"a4f35b65": "minTransfer()", +"a4f3fa10": "getToday()", +"a4f4662f": "getOwnersTokenIndex(address,uint256)", +"a4f5b8c1": "bonusCreationRate()", +"a4f63ec8": "setBytesArrayIndex(bytes32,uint256,bytes32)", +"a4f6d5ce": "BeeGims()", +"a4f7c2b7": "getLeftChildI(uint256)", +"a4f82f27": "allocationOf(address)", +"a4f89235": "SALE0_CAP()", +"a4f91a2e": "remainingOwner()", +"a4f927d5": "certifyAccount(address,bool)", +"a4f939a1": "_touched(address,address)", +"a4fa75cf": "StartIcoStage()", +"a4fa8d57": "reward(uint256,uint256)", +"a4fac56e": "rateForOnePTM(uint256)", +"a4faf89e": "incentivesOut(address[],uint256[])", +"a4fd3cea": "getToken(uint256,uint256)", +"a4fd6f56": "isEnded()", +"a4fda741": "usedResidualAmount()", +"a4fde8bc": "player_declare_taking_too_long()", +"a4fefad6": "_currentSupply()", +"a4ff83f5": "warriorsByPlayer(address,address)", +"a4ffd7fa": "noOfICOPhases()", +"a5007da7": "openEgg(uint256,uint256)", +"a50097f2": "getUserEthVolumeSaldo(address)", +"a501123d": "doRollBet(uint256,uint256,bytes32,bytes32,bytes32)", +"a501553e": "getAssetLength()", +"a501ab39": "sendToMe()", +"a501e88d": "Content()", +"a5021a17": "getNodePrice()", +"a5025222": "addressExists(address)", +"a502aae8": "getNextGenerationId()", +"a502bfbd": "invest(address,uint256,bytes)", +"a503473a": "mul2Assert(uint256)", +"a50395cf": "totalPetCardSeries()", +"a504bd0d": "nextTradeEvent()", +"a50569b7": "addUNISSUEDBALLOTPAPERS(uint256,uint256,uint256,uint256,uint256)", +"a50643b7": "getPrizePoolSize()", +"a506e5dc": "transferLand(uint256,uint256,address)", +"a5075567": "RegistrationAntique(bytes32)", +"a50776dd": "managementLocked()", +"a507afd5": "burniEther(uint256)", +"a508ae0f": "P2TCToken()", +"a508dd1d": "OldCanYaCoin()", +"a509b030": "recentActivityIdx()", +"a50a1fe6": "remainingAmount()", +"a50b21c8": "getInputData(uint256,uint256)", +"a50c386a": "exFeeRate()", +"a50cd8e7": "votesFor(address)", +"a50cf84e": "ICO_PHASE2_PERIOD()", +"a50d81c7": "mintForOwner(address)", +"a50e20c1": "checkProfit(address)", +"a50ec326": "deposite()", +"a50ed19b": "setCooldown(uint256,uint256)", +"a50edca0": "fiat()", +"a50f2a25": "AirdropSingle(address,uint256)", +"a510921e": "SaleStop()", +"a510f776": "setCompany()", +"a510fd2b": "returnBetFromGladiatorBattle(uint256)", +"a512fb25": "Purchased(address,uint256)", +"a5135634": "avalibleSTCTokens()", +"a51548a1": "CryptoPainting()", +"a515aaeb": "cdFee()", +"a5171828": "MillionDollarToken()", +"a5177400": "minimumContributionPhase3()", +"a5181756": "AdameToken()", +"a519419e": "depositoryDelegate()", +"a51a38cf": "MasharibCoin()", +"a51a6054": "roundLeader()", +"a51a8682": "saleTransfer(address,uint256)", +"a51ad03f": "isFirstYear()", +"a51aea2d": "changeMaxMultiplier(uint256)", +"a51af4c5": "distributorAddress()", +"a51b79e3": "changeYumAddressTo(address,address)", +"a51ba542": "deleteMonsterIndexToApproved(uint256)", +"a51bb77a": "getInvoiceHashAddresses()", +"a51d5924": "transferMain(address,address,uint256)", +"a51d5f02": "RemoveOwners(address[])", +"a51db46b": "changeDX(address)", +"a51e62a1": "developmentAuditPromotionWallet()", +"a51e81bb": "TRexCoin()", +"a51f3782": "investor_getMediumInfo(address)", +"a51f41a0": "setConfig(uint256,uint256,string,string,uint256)", +"a51fbb3f": "approveTokensWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"a51fe113": "start(uint256,uint256,address)", +"a52079ea": "balanceBlocksIn(address,uint256,uint256)", +"a521036c": "feePaymentEnabled()", +"a5214f77": "setContext(bytes32,address)", +"a521ebfa": "refundPresale(address,uint256)", +"a521f09f": "Greenbow()", +"a522ad25": "withdrawTokens(address,address)", +"a523b88a": "like()", +"a524ce4f": "deliverPresaleTokenToClient(address,uint256)", +"a525663a": "updateOwnerProprietaryData(uint256,string)", +"a525f42c": "transferFromToICAP(address,bytes32,uint256)", +"a526c826": "ICOBuyer(address,address,uint256,uint256)", +"a526f74f": "PRICE_AFTER_SOFTCAP()", +"a527096e": "preallocate(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"a5289158": "end(address,address)", +"a528cb4f": "currentNumberOfRares()", +"a528fec4": "setSecureFees(bool)", +"a5290f74": "phase_2_rate()", +"a5294f93": "CryptoTradeToken()", +"a5295ae4": "AaaToken(uint256,string,uint8,string)", +"a5298955": "setAllHatchConfigs(uint32[],uint256,uint32[])", +"a52a0f8e": "getIntervalCoefficientMultiplier(uint256,uint256,uint256)", +"a52b121e": "faucetThresholdSecs()", +"a52b2b88": "hasWon(address)", +"a52b904b": "ScoreToken(string,uint8,string,string)", +"a52bc175": "Essential()", +"a52c0512": "getNumIncorrectDesignatedReportMarkets()", +"a52c101e": "send(uint256)", +"a52c11a6": "setBalance(uint8,address,uint256)", +"a52c34c3": "shopSettings()", +"a52c9efd": "updateIncrease(uint256)", +"a52cf5a4": "HanlinTestToken(string,string)", +"a52dc2e7": "blockN()", +"a52e6180": "setDiamondAuctionAddress(address)", +"a52ef9b0": "look_for_node(address)", +"a52f365a": "dissmisPurse(uint256)", +"a52f89fa": "nujaBattleTransfer(address,uint256)", +"a5304fc3": "ownerSetJpMinBet(uint256)", +"a5313069": "StairStepDecayingTokenFunction()", +"a53260c1": "migrateEthers()", +"a53290ab": "getClassTransformInfo(uint32)", +"a53324b5": "mint(uint256,string,uint8,string)", +"a53367dc": "ICOBuy()", +"a533daf7": "investmentPositions()", +"a533fb8d": "_mintToPool(uint128,uint256,uint128)", +"a534150c": "feePpm()", +"a536ae38": "payBidAllocationFee(bytes32,uint256)", +"a536cffd": "assertEq6(bytes6,bytes6,bytes32)", +"a536dbe8": "getCurrentPrice(uint256,uint256,uint8)", +"a5374005": "paymentsProcessor()", +"a537b716": "applyWithdraw(address,uint256)", +"a53818ca": "setNodeAllocation(address)", +"a53830e3": "numVotes(address)", +"a538d287": "getMinMax()", +"a53a1adf": "approve(bytes32)", +"a53a4747": "setOperatingCost(uint32[5])", +"a53aeb4e": "accumulate()", +"a53b1c1e": "setInt256(int256)", +"a53bfcf5": "varTokenAllocation(uint256)", +"a53c6dd4": "splitComissions(uint256)", +"a53c7b45": "setGameStatus(bool,string)", +"a53cb8ca": "setWhitelistTokens(address,bool,uint256)", +"a53d5205": "stepTwoLockEndTime()", +"a53d66e4": "changeAuxPartner(address)", +"a53ec007": "changeAirLimitCount(uint256)", +"a53f0e14": "addGrant(address,uint256,bool)", +"a53f138a": "updateTeamsTableAttributes(uint256,uint256,uint256,uint256)", +"a54016a0": "set_price_in_micro_ether(uint256)", +"a5403b3b": "secondaryLedgerCount(string,address)", +"a540db73": "triggerCooldown(uint256)", +"a5410a66": "kycVerified(address)", +"a5417f64": "decreaseICOEndTime(uint256)", +"a541a2a2": "projectCreator()", +"a5422d8a": "mineSoul()", +"a542a02f": "lookupAllSprites(uint256)", +"a542c3d7": "stageDevelop()", +"a54315fd": "SetBuyoutPrice(uint256,uint256)", +"a543a7e5": "addLockUpData(address,uint256[],uint256[])", +"a543bae7": "createSwap(bytes20,address)", +"a5440fa0": "GetAll()", +"a54447aa": "purchaseCard(uint256)", +"a544594e": "donateDAI(uint256)", +"a544805c": "CentralityGiftShop()", +"a544f062": "finanReserveWallet()", +"a54527d5": "AllSpringChainToken()", +"a54580f2": "drive()", +"a545ff0c": "withdrawRemainingEthAfterAll()", +"a5460352": "_validatePurchase(address,uint256,uint256)", +"a54677e3": "getOptionTitleForPoll(uint256,uint256)", +"a5468081": "Pyramid(address)", +"a546cbf7": "core(uint256)", +"a546f2e7": "changeNewHDX20Contract(address)", +"a5473276": "slice(uint32[],uint8,uint8)", +"a5473f78": "withdrawOrderRefundToOrder(uint256)", +"a54799bd": "Person(string,address)", +"a547adce": "lastBlock_f16()", +"a547ec4c": "setTime(uint256,uint256,uint8)", +"a548617c": "SampleCrowdsale(uint256,uint256,uint256,address,uint256,string,string,uint8,uint256)", +"a5488a37": "allowTransactions()", +"a54940b1": "Devable()", +"a5496781": "NamiMultiSigWallet(address[],uint256)", +"a5496e60": "newProposal(uint256,string,string,uint256,uint256)", +"a549ac10": "mintNFTForSale(uint256,string,uint256)", +"a54a2b8b": "testBlockHashFetch()", +"a54b2a73": "burnPool()", +"a54baeda": "removeAllowedLock(uint256)", +"a54c03e2": "distributeStakingShare(bytes32,uint256)", +"a54c2a9a": "removeListing(uint64)", +"a54cd4f7": "minParticipants()", +"a54d396e": "internalAction()", +"a54e1ec4": "SubpreferToken()", +"a54efb1e": "BKB()", +"a54ff9ac": "downvotePost(bytes32)", +"a5500c30": "setAirdropAmount(uint256)", +"a5502b01": "Total_Players()", +"a550f86d": "named(bytes32)", +"a5512db0": "setTSTC(address)", +"a5513af5": "checkPrevOwner(bytes32)", +"a55168ea": "SendEtherToAsset(uint256)", +"a551878e": "fix()", +"a551de87": "MonethaAddressSet(address,bool)", +"a55231f4": "declareEmergency(string)", +"a552c8a0": "LogSendFail(uint256,bytes32)", +"a553506e": "checkData(bytes32)", +"a5536fe7": "mutable()", +"a553748e": "listingActive(uint256)", +"a5537586": "conversionOfferedAt()", +"a553a597": "configure(uint256,uint256,uint8,address)", +"a553c4d2": "tier2LOT()", +"a553e1da": "getUserTokensCount(address)", +"a5541ca2": "AICT()", +"a554a72e": "POINTS_TO_SPEND()", +"a55526db": "touch()", +"a55545a9": "EthVocToken(uint256,string,string)", +"a556a057": "ZAPAX()", +"a557f834": "month24companyUnlock()", +"a558410a": "test_twoValidEqUint(int256)", +"a5584456": "addDiscount(address,uint256,uint256)", +"a559217c": "raisedEther()", +"a5595683": "lockBalance(address,uint256,uint256)", +"a559ec20": "upgradePendingExchange(address,uint256)", +"a55a2577": "addHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"a55b13c8": "validOtherSource(string)", +"a55bbff9": "setDatePayout(address,uint256)", +"a55bfdc4": "getPhasesCount()", +"a55c51d8": "havven_escrow()", +"a55c974f": "tokenXstepCAP()", +"a55cab95": "getName(uint8,uint8)", +"a55cc1cc": "newTokenWeiPrice()", +"a55cd51c": "updateMaxBet(uint256)", +"a55d260d": "depositNoRef()", +"a55deccb": "locked(address[],uint256[])", +"a55e9370": "getDateCount()", +"a55ec39d": "BulkTransfer(address[],uint256[])", +"a55ee823": "BYN()", +"a56024d8": "deleteUserForUser(string,uint8,bytes32,bytes32)", +"a5603f02": "getCurEarlyIncomeByAddress(address)", +"a5609ab5": "enableDepositTo(bool)", +"a560a956": "duelAnotherCovfefe(uint256,uint256)", +"a5613724": "Start1()", +"a561b1c2": "executeBatchTransfer(address[],uint256[])", +"a56226ef": "officialApplicationSignUp(string)", +"a5622c94": "xEURCoin()", +"a5627d32": "callDeposit(uint256)", +"a564871f": "ctWallet()", +"a56539a4": "_addLock(uint256,uint96,address,uint256)", +"a565efff": "countWinners()", +"a566d383": "softCapCHF()", +"a5670c80": "get_sale_arbits_per_ether()", +"a56793ae": "addCoin(uint256)", +"a567d371": "prepareForRefund(address,address)", +"a568907a": "SUCToken(address)", +"a568a09d": "BuyShareWithDividends(uint32,uint256,uint32,address,address)", +"a56a1de0": "Mortal_HelloWorld()", +"a56b3d11": "setNewCdFee(uint128)", +"a56b60ee": "_removeFromBlacklist(address)", +"a56be205": "developer_new_price(string)", +"a56befd1": "required_number_players()", +"a56c2ac0": "totalWeiRefunded()", +"a56c5be1": "WithdrawConfirm(uint256,uint256)", +"a56d1de3": "valueOfVault(uint256,address)", +"a56d7601": "getPlayerTickets(address,uint256,uint256)", +"a56d96bb": "unmint(uint256,string)", +"a56d9dda": "getCosigner(bytes32)", +"a56dfe4a": "y()", +"a56e7213": "unpausePending()", +"a56e7bae": "getTitleAddress(uint256)", +"a56f2d5f": "AutoMOBILEtoken()", +"a56f5b53": "withdrawDonations(address)", +"a56f9bea": "KarTokenERC20Advanced(uint256,string,string)", +"a5705d17": "performUpdateStackPtr()", +"a57229bd": "linkToNewHouse(address)", +"a572ba41": "CEL(uint256,string,uint8,string)", +"a5731c1c": "getTXSAddress(uint256)", +"a57366e7": "changeSubcourtJurorsForJump(uint96,uint256)", +"a573a9f4": "Bilateral()", +"a57429e2": "getWinConditionInLibra(bytes32)", +"a5749710": "getCurrentBalance()", +"a574cea4": "getMetadata(uint256)", +"a5752034": "changeRound(uint256,uint256,uint256,uint256)", +"a57544da": "right36(uint256)", +"a5758552": "redeemTokens(address)", +"a5766aa6": "setFeePercentage(uint8)", +"a577efd4": "closePot(string)", +"a578ae32": "getApprobation(uint256,address)", +"a578e38a": "RadiumSupply()", +"a5790bde": "toBytes1(bytes)", +"a57918dc": "ptc_addr()", +"a579349a": "currentStageRemainingJM()", +"a579e461": "SetAdminContract(address,address)", +"a57a84a6": "sendPending()", +"a57b54b7": "excTx(uint256)", +"a57c0919": "update(uint256,uint8,address,address,string,string)", +"a57c6e86": "sellTokens(address,uint256,uint256,address,bytes)", +"a57ce52f": "_removeKeeper(address)", +"a57d1560": "lottery(uint256)", +"a57d814b": "MONACOESTAT()", +"a57e768c": "SetLockAddress(address,bool)", +"a57f57f8": "TBToken()", +"a57f59c0": "getMatchInfoList02()", +"a57f6500": "readCTDdata(uint256)", +"a5804521": "StateChanged(bool,string)", +"a58079fc": "FIXED_PRESALE_USD_ETHER_PRICE()", +"a58091cd": "privateSaleSencPerMEth()", +"a58092b7": "getSanityRate(address,address)", +"a580a5b0": "setRepayment()", +"a58180b4": "_batchBuild(uint256[],int256[],int256[],uint8[])", +"a581a27a": "owner_balance()", +"a581c333": "getSHA256(bytes)", +"a581ff0e": "CopyrightExchangeToken(uint256,string,string)", +"a5820daa": "issueTokens(uint256)", +"a5828b7d": "payBonus(address)", +"a583535d": "addCutie(uint32,uint256,uint256)", +"a5841194": "sync(address)", +"a5842415": "Cubes(uint256)", +"a5843f08": "init(uint256,uint256)", +"a5847862": "sizeOfString(string)", +"a584d8cc": "startProduct(string,string,string,int256)", +"a58561ec": "DISCOUNT_STAGE_TWO()", +"a5857318": "getIdArrayItemsCount(address,uint256,string)", +"a586fd0f": "_substring(string,int256,int256)", +"a587686d": "addCardToEdition(uint8,string,uint8,uint8,uint256,uint256,uint256)", +"a5878c65": "addPrivatePresaleTokens(address,uint256,uint256)", +"a587c9f7": "bountyTokenAddress()", +"a587cd36": "DisableSetTransferable(address,bool)", +"a587da29": "setPackage(bytes,uint8,uint8,uint8,bytes)", +"a588a968": "rushitesticoToken()", +"a5891bb0": "modifyWhitelistMulti(address[],bool[])", +"a5898832": "getReferrerRewards()", +"a58ac1a1": "buyTokensInternal(uint256)", +"a58b2e43": "LendingLiquid()", +"a58b55a9": "StreamityEscrow(address)", +"a58b7eed": "setFlags(address,address,uint256)", +"a58ba458": "multiTransferTightlyPacked(bytes32[],address)", +"a58c07ee": "fetchOrderByIdWithPayerByAdmin(string,address)", +"a58c30c5": "block2()", +"a58d3ad1": "dumpCube(bytes,bytes32)", +"a58daf76": "setAuthorizedToDraw(address)", +"a58fd85b": "setReflectSwitch(bool)", +"a58ff4fc": "deletThisContract()", +"a590529e": "updateWithPositionHint(uint32,uint128,uint128,uint32)", +"a590799a": "refundInvestment(address,uint256)", +"a59162eb": "OWEToken()", +"a5917019": "SecurityDepositCreated(uint256,address,string,string,uint256)", +"a5917baf": "vestingVault()", +"a5917dea": "processInternalRequest(string,bool,uint256,uint256)", +"a591a59b": "tuple(uint256)", +"a591d4a6": "getMsgValueAfter()", +"a5925b5b": "clearAuthorization(address)", +"a59307e8": "Play(address,bytes1,uint256)", +"a593845f": "_rollCriticalDice()", +"a594056f": "getPriceInExoTokens(uint256)", +"a59455dc": "getPacket(uint256)", +"a594a117": "giveGen(uint256)", +"a594a236": "_updateClaims(string,string,string)", +"a594b29b": "PRE_SALE_START_4()", +"a595a94d": "_sendGameGift(address,uint256)", +"a595b655": "Gimli()", +"a595f2eb": "quantidadeDeAutorizacoesNecessariasParaUmaNovaOuvidoriaPoderSeCadastrar()", +"a5967039": "cancelMigration(address,address)", +"a5968cc6": "PresaleTokenVesting(address,uint256)", +"a5976f97": "allocateReservedFunds()", +"a59799e6": "updateAvatarInfo(uint256,string,uint256)", +"a5982885": "assertFalse(bool)", +"a5982aee": "closeregistrationphaseandchoosefirstselector(address,address)", +"a5985e8c": "getLevel()", +"a5987c9e": "getMyKilo()", +"a5989dbe": "nines(uint256)", +"a599ef65": "enroll(uint256,uint256)", +"a59a3750": "getWeapon(uint8[176],uint8,uint8)", +"a59ac6dd": "buy(address,uint256,uint256)", +"a59aef4e": "nickOf(address)", +"a59af340": "isInvestorApproved(address)", +"a59b193a": "setRecord(bytes32,string,string)", +"a59b7de5": "consumeCoinForNova(address,uint256)", +"a59cacb2": "setMinWeiAllowed(uint256)", +"a59d6986": "recoverLostFunds()", +"a59d8898": "transferByDateSingle(address,address,uint256,uint256)", +"a59d930b": "ownerSetEtherwowAddress(address)", +"a59dbfb7": "gift_Transfer(address,uint256)", +"a59def62": "ABYSS()", +"a59eca54": "getPlayerIdByAddress(address)", +"a59f3e0c": "enter(uint256)", +"a59f8a2b": "GFCB()", +"a59f9d56": "ChangetokenManagerAddress(address)", +"a5a01bc7": "addCarInit(address,uint32,uint32,uint32,uint64)", +"a5a0545f": "FCChainTokenTest(uint256,string,string)", +"a5a2286b": "ReserveAddress()", +"a5a2aa33": "purseExchange()", +"a5a2cb19": "buyUpgrade(uint256)", +"a5a2fc4a": "claimableFeesOf(address,uint256)", +"a5a32c3a": "GEMCHAIN()", +"a5a3ad0b": "ValidatorBond(address,address)", +"a5a45785": "setRescue(address,bool)", +"a5a54ea5": "SM()", +"a5a584a2": "QuestionToken()", +"a5a5f468": "WorldCupAuction(uint256,uint256,bool,address,address)", +"a5a65bba": "checkvehrespond(uint256,address)", +"a5a6a7b2": "after20Seconds()", +"a5a6d7b3": "sellMyBanana(uint256)", +"a5a7d086": "ethereumFoundationTickets()", +"a5a7dadf": "preCrowdsaleEndTime()", +"a5a83e4d": "right91(uint256)", +"a5a89837": "createPrimera()", +"a5a899ec": "halts()", +"a5a8c53d": "setmessiCommunityAddress(address)", +"a5a98d78": "inflate()", +"a5a9ba8d": "getSellReturn(uint256)", +"a5a9cf0d": "sixthTeamWithdrawal()", +"a5aa0545": "createHumanStandardToken(address,uint256,string,uint8,string)", +"a5aa4348": "setTitulaire_Compte_9(uint256)", +"a5aa542e": "remainingFunds()", +"a5ab3436": "Payouts(uint256,bool,address,uint256,uint256)", +"a5ab5479": "generateNum2Win()", +"a5ab89ff": "setHost(string)", +"a5abe7f6": "isConstant()", +"a5acb022": "LOG_BetWon(address,uint256,uint256)", +"a5acc46e": "PauseInfrastructure(bool)", +"a5acd206": "updateStateFromOracleFoo(address)", +"a5ad0588": "transferFrozenTokens(address,uint256)", +"a5ad1348": "checkPosition(address,address,uint256)", +"a5adb226": "setABackend(bytes32,address)", +"a5ade117": "candyPrice()", +"a5ae65ba": "getGen()", +"a5aeb9b7": "totalWeiContributed()", +"a5af66c5": "HowLongIsDisputeRevealStillRunning(uint256)", +"a5b067b3": "INKCToken()", +"a5b0930d": "getAddressArray()", +"a5b19937": "endVesting(address,address)", +"a5b1e13d": "settle(address,address,uint256,uint256)", +"a5b209df": "doEthDistro(address[],uint256)", +"a5b222c9": "setData_20(string)", +"a5b2235d": "register(address,address[])", +"a5b36a36": "stalePeriod()", +"a5b3720b": "BulkTransfer()", +"a5b3d1a9": "tenmarionCoin()", +"a5b4069e": "DataCoin(address)", +"a5b41c0e": "AK48Coin(uint256,string,string)", +"a5b482c2": "getAmountOfSubcontracts()", +"a5b4aaab": "editMilestone(uint256,uint256,uint256,uint256,uint256,string,string)", +"a5b4f7d3": "setAgentVerificationByAgent(bytes32,address)", +"a5b538f9": "nextBonusPayout()", +"a5b589ce": "mHostFee()", +"a5b6420e": "_setBool(bytes32,bool)", +"a5b6ea8f": "spin(uint256)", +"a5b70519": "multiValueAirdrop(address,address,address[],uint256[])", +"a5b75814": "bonusPhase3()", +"a5b781e1": "lockPostion1Add(uint8,address,uint256,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8)", +"a5b78bfa": "NebulaToken()", +"a5b87ef7": "StgFourbonusEnds()", +"a5b9b45d": "tokenConsumed()", +"a5b9e922": "getContentTimetamp(uint256)", +"a5ba3b1e": "tokenClaims(uint256,address)", +"a5bb9162": "tokenadd(address,uint256)", +"a5bbc311": "getNCSTotalSupply()", +"a5bbc423": "withdrawByEmergency(string)", +"a5bbd67a": "lockedAddresses(address)", +"a5bbe7bf": "takeOrder(address,uint256,uint256)", +"a5bc770c": "tokensPerKEther()", +"a5bd1566": "getDiscipleVend(uint256)", +"a5bdbb28": "buyBlock(string,uint256,uint256,uint256,uint256)", +"a5be0c5e": "ERC20Proxy(string,string,uint8,address)", +"a5be1a4d": "multipleTransfer(address[],uint256)", +"a5beb4e5": "claimRefundFor(address)", +"a5bebf48": "founderTokenUnlockPhase1()", +"a5bf7aae": "CPSTestToken1()", +"a5bfa9a9": "claimToken(bytes32)", +"a5bfd16a": "getAllLoans()", +"a5c02493": "setChain(string,address,address,address)", +"a5c04bfe": "allocateTeamBonus(address,uint64,uint64,uint64)", +"a5c102a2": "setMinterFeePercent(uint256)", +"a5c12df9": "OpenANXToken(address)", +"a5c154b3": "setMiniPoolEdit_2(string)", +"a5c1db32": "CrosspaysToken()", +"a5c28b1e": "getGovtApplication(string,string)", +"a5c3eb03": "UbbCoin(uint256,string,string)", +"a5c464b3": "isOnSaleAny2(uint256,uint256)", +"a5c5436f": "preCaution()", +"a5c5463f": "getCurrentlyRunningTier()", +"a5c5762b": "PVT_INV_TOKENS()", +"a5c57b18": "BITDINERO()", +"a5c58944": "dSetEditorArbitraryData(bytes32,bytes,bytes)", +"a5c5edee": "updateGameMetadata(uint256,string,uint256,bytes32[])", +"a5c6ac0d": "percentagePerMonth()", +"a5c7ac13": "test_updateKey_decreaseNoHint()", +"a5c81622": "signedApprove(address,address,uint256,uint256,uint256,bytes32,address)", +"a5c860ba": "eth_minimum()", +"a5c8a201": "geth(uint256)", +"a5c8b7a1": "transferPublisher(address)", +"a5c978c0": "TIA()", +"a5c9cd82": "TOKEN_UNIT()", +"a5ca2afa": "VESTING_INTERVAL()", +"a5ca35f5": "Trade(uint256,address,uint256,address)", +"a5cae60c": "getAppInfo(uint32)", +"a5cb66c0": "ChronosCore(uint256,uint256,uint256,uint256)", +"a5cbe71c": "getCooldownEndBlock(uint256)", +"a5ccd855": "setConstractDeployTime(uint32)", +"a5ccfb06": "sellCard(uint256,uint256)", +"a5cd184e": "free(bytes32,uint256)", +"a5cd3fd0": "steemh()", +"a5cd761f": "getTokenOwner(uint256)", +"a5cd806b": "BONUS_PCT_IN_VREO_SALE_PHASE_1()", +"a5cda792": "distribution(address[],address,uint256[],uint256[])", +"a5ce0693": "endBlockBonus1()", +"a5ce3eb0": "totalPaidAmount()", +"a5ce413b": "unstakeTokens()", +"a5ceefa2": "computeTokenAndETHRewards(uint256,uint256)", +"a5cf3898": "verifyExtraData(bytes32,uint256)", +"a5cf38da": "createCrowdsaleTiers(bytes32[],uint256[],uint256[],uint256[],bool[],bool[])", +"a5cf56f2": "ethReceivedPresale()", +"a5cf599c": "ENDING_TIME()", +"a5cfefde": "updateChainlinkAddresses()", +"a5d048d3": "create(address,uint256,uint256,address)", +"a5d0bab1": "buyPartial(uint256,uint256)", +"a5d18cb6": "checkGameAmount(uint256)", +"a5d1c0c0": "gameTime()", +"a5d33c2b": "MessageSentToChannel(address,string,string,uint256)", +"a5d3845b": "tokenEventAddress()", +"a5d572c4": "fixedTotalSupply()", +"a5d57bb7": "ApproveAndDo(address,uint256,bytes32,string)", +"a5d5ca54": "PolyCustomers()", +"a5d5db0c": "depositCollateral(address,uint256)", +"a5d638f1": "transferOwnershipRequest(address)", +"a5d677ab": "getFileByIndex(bytes32)", +"a5d68bfd": "RATE_WHOLESALE()", +"a5d6d4c3": "mintAuthorizedBatch(address[],uint256[])", +"a5d7a14f": "ContractorProposalAdded(uint256,uint256,address,uint256,uint256)", +"a5d8628a": "AgriChainDescription()", +"a5d871c0": "AddressChanged(uint256,address)", +"a5d8746e": "canMakeBet()", +"a5d8b72b": "midasAdvisorOperateMarketingAddress()", +"a5d8cdf2": "deploy_time()", +"a5da0bf5": "addAfterId(address,uint32,uint128,uint128,uint32)", +"a5db83e4": "marketRegisterToken(address)", +"a5dcf458": "uintToBetsArray(uint256)", +"a5ddfef1": "getTotalAmountOfTokens(uint256)", +"a5de12ab": "ITBITSToken()", +"a5de3619": "admins()", +"a5de811f": "checkMyWithdraw(address,address)", +"a5def8cb": "numbOfFrozenAmCount(address)", +"a5dfd89a": "getPrize(address,uint256,bytes3,uint16)", +"a5dfee67": "testThrowsCreateNewRevisionNotUpdatable()", +"a5e00e53": "QNTU(address[],uint256[])", +"a5e09282": "_burn(address,address,uint256,bytes)", +"a5e108af": "addEmployerContract(address,address,uint256)", +"a5e11729": "maxPower()", +"a5e1c5b5": "setVal(bytes32,uint256)", +"a5e20eaa": "getProjectStartDate(bytes32)", +"a5e220c2": "Owner(address)", +"a5e2dbfb": "_scto(uint256,uint256,uint256,uint256,address)", +"a5e33048": "generateTokens()", +"a5e45bec": "range(uint256)", +"a5e4e9a0": "maxCWCsPerReturnLessThan()", +"a5e4fedc": "LogTransferFromOwner(address,address,uint256,uint256,uint256)", +"a5e52c08": "ImmediateProfit(address,uint256)", +"a5e53bfe": "checkRandomFromRandao(uint256)", +"a5e558a3": "MIN_FUND_AMOUNT()", +"a5e57fcf": "GetUserBitFlag(address)", +"a5e5e034": "swapTop(uint256)", +"a5e62f02": "fallbackRP()", +"a5e7131e": "transferFundsAdminOnly(address,uint256)", +"a5e767cd": "frozenAccount(address,address)", +"a5e7a31c": "summReserveFund()", +"a5e82807": "deletedTeamIds(uint256)", +"a5e8c5d6": "setVoteRight(address,uint256)", +"a5e90eee": "setManager(address,bool)", +"a5e9585f": "xxx(uint256)", +"a5e99c4e": "createSubmission(uint256,string)", +"a5e9fffa": "calculateAmount(address,uint256,uint256)", +"a5ea11da": "getParameters()", +"a5eb1c6d": "Ovation(uint256,string,string)", +"a5eb7a4e": "operated()", +"a5ebb9ef": "backERRLCoinOwner()", +"a5ebc10b": "blocktubeClip(string,uint256,uint256)", +"a5ebf389": "getMoneyTotals()", +"a5ec4fae": "changeBaseVerifierFee(uint256)", +"a5ecacae": "getContributionTime(uint256)", +"a5ece941": "marketingAddress()", +"a5eceaf1": "bet1000_1eth()", +"a5edcd9e": "ethtotalSupply()", +"a5ee79d3": "extendRequestTimeLock(bytes32)", +"a5ef0dd6": "setGen0Profit(uint256)", +"a5ef69ea": "icoEndAt()", +"a5ef9915": "jotAllowance()", +"a5f02b00": "markCombatEnded(uint256)", +"a5f0dea2": "saleFinalized()", +"a5f11474": "Tronix()", +"a5f128fb": "stopSelling(uint256)", +"a5f18c01": "getStartBlock()", +"a5f1e282": "lockedOf(address)", +"a5f257e7": "transferDividendToShares()", +"a5f26760": "updateTimeMintBalance(uint256)", +"a5f2a152": "transferTo(address,address,uint256)", +"a5f2e079": "borrowerReturnAmount()", +"a5f357de": "MAXROUNDS()", +"a5f3c23b": "add(int256,int256)", +"a5f4648c": "getNextTurnColor(uint256)", +"a5f4864d": "ELBT()", +"a5f4af33": "playerWithdrawPendingTransactions()", +"a5f4c6ff": "publicStart()", +"a5f732e5": "distributeLTCW(address[],uint256)", +"a5f75a5e": "dollars_per_kilo_ether()", +"a5f7823e": "onlyAdmin()", +"a5f7c148": "transfer(address,int256)", +"a5f8b874": "wasProxyStorageSet()", +"a5f8cdbb": "buyTicket(address)", +"a5f9b5c2": "gameRound()", +"a5f9fd99": "splitShare()", +"a5fa2490": "smxSold()", +"a5fa5e52": "showTime(address,address)", +"a5faa125": "getAuthor()", +"a5fadf93": "modify_Presale3StartDate(uint256)", +"a5fb929a": "userRewarderCount(address)", +"a5fba4e1": "isDistributionDue()", +"a5fbd808": "globalBurnAmount()", +"a5fbdd41": "updatePremiums(address)", +"a5fbf287": "isSupported(address,uint256)", +"a5fc2994": "sendStore(address,uint256)", +"a5fd0a18": "chargeChannel(uint256)", +"a5fd1838": "getBonus2(uint256)", +"a5fdc5de": "collateral(address)", +"a5fefcfd": "thirdMonthEnd()", +"a5ff2551": "LOCIcoin(uint256,string)", +"a60014e3": "buyCore(uint256)", +"a60110ee": "ProposalTalliedEvent(uint256,bool,bool)", +"a6021ace": "ERC20Address()", +"a6024524": "PRE_ICO_FINISH()", +"a6027d53": "IconomiTokenTest(uint256,string,uint8,string,uint256)", +"a6044f28": "virtualEntitiesCreated()", +"a604c1ad": "Blocker_send(address)", +"a6060fcb": "Bitdore(uint256,string,string)", +"a6065c96": "brokerVerifierContract(uint64)", +"a6066523": "payment_amount()", +"a6069146": "setItemRangeURI(uint256,string)", +"a606b94a": "transferBalance(address,address,uint256)", +"a6070967": "minSumICOStage8USD()", +"a60745aa": "getBountyData(uint256)", +"a608067b": "getDrugPrice(uint256)", +"a608a65b": "CryptoAdsToken(uint256)", +"a6091b32": "removeControllerByPartition(bytes32,address)", +"a60956a6": "newItem(uint8,uint8,uint256,uint256,uint256,uint256,uint256,bool,bool,address)", +"a6099372": "payDiff(address,uint256)", +"a609e209": "BIRTHDAY()", +"a609f034": "getByteFromBytes14(bytes14,uint256)", +"a60b693d": "getTotalCap()", +"a60b8aa9": "minusTourFreezingTime(uint256,uint64)", +"a60bbcd3": "ModelCoordinator()", +"a60c8043": "totalDistributionAmountInWei()", +"a60c9cdb": "TheBolthDAICO(address,address,address,address,address,address,address,address)", +"a60dc38a": "convertToWei(uint256)", +"a60e043e": "CappedRefundableCrowdsale(uint256,uint256)", +"a60e8bd6": "setVotingProxy(uint8,address)", +"a60eb299": "setRewardGenerationComplete(bool)", +"a60f3588": "payoutIdx()", +"a610fe9b": "chargeHoldingTax()", +"a6113c0d": "getSynthesizationResult(address)", +"a6117f39": "validPrePurchase()", +"a611e0e6": "forceRentalEnd()", +"a612c638": "emergencyRestart()", +"a6138ed9": "pricer()", +"a613c42d": "NWT()", +"a6145ba2": "isAllowContribution()", +"a614d54e": "GlobalAdmin()", +"a6151a84": "isDestroyed()", +"a615237e": "rebrand(string,string)", +"a615d7ee": "withdrawTokenToInvestorOwner(address)", +"a6178731": "usingInterCrypto()", +"a617aff1": "brideAddr()", +"a61855a4": "changeCommonRebate(uint256)", +"a618993c": "setGBA(uint32)", +"a618f50c": "distributeSSENTE(address[])", +"a619486e": "masterCopy()", +"a61bd76d": "purgeInformation(uint256)", +"a61c48f0": "getPollResultsSize()", +"a61c5b82": "numStudentRequest()", +"a61d0aed": "maxBets()", +"a61d6829": "getPosterInfo(uint256,uint256)", +"a61e1fc1": "_shuffle(uint8[])", +"a61e67aa": "testFailMintGuyWhenStopped()", +"a61e9f4d": "momentBlockOf(uint256,uint256)", +"a61ef635": "translateToStartingTile(uint16)", +"a61fe970": "candyBalance()", +"a6208622": "refusePayment(uint256,uint8)", +"a621344a": "setTokenWallet(address)", +"a621d679": "XPZ()", +"a6223a58": "testAccess(address)", +"a622510b": "TranslationService()", +"a623e9bf": "PresaleDistribution(address,address,uint256)", +"a62438e2": "getPeriodKey(uint256)", +"a6245974": "getUpgradeProposalCount()", +"a6248874": "totalFirstICOSupply()", +"a62533e6": "diffString(string,string)", +"a62552b3": "modificaPuntos(uint256,int256)", +"a6256644": "setDonationsReceiver(address)", +"a625d78d": "MasterDeposit(address,address,uint256)", +"a626c089": "changeSettings(uint256,uint256,uint256)", +"a626c3fe": "assignBountyTokens(address,uint256)", +"a626f445": "GlobalPersonalInsuranceChain()", +"a62784e2": "setCCH_edit_3(string)", +"a6279dbd": "getPartialAmountCeil(uint256,uint256,uint256)", +"a62819ed": "AddExec(string)", +"a62875d9": "getMyPastWins(address)", +"a62a07dd": "release_dates(address)", +"a62a86a0": "associateWithTaskAddress(address)", +"a62adfec": "buyTokens(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"a62ce8ce": "capitalization()", +"a62d4df3": "_absSubtraction(uint256,uint256)", +"a62d7801": "resumePhase()", +"a62d9ba3": "withdrawToPlatformFunding(uint256)", +"a62e4246": "CampaignBeneficiary()", +"a62e5a7d": "sellComission()", +"a62ea098": "buyLCRTokens()", +"a62f3503": "updateBankAmount()", +"a630a92e": "ownerTransferWeiFirstWallet(uint256)", +"a6314342": "deleteManager()", +"a63234e0": "issuerAddress()", +"a6327ffc": "convert2PlatinumToken(uint256)", +"a632a2e5": "setnumber(uint256)", +"a632d5e1": "MANHATTANPROXLENAV()", +"a633d8d4": "getDougAge(uint256)", +"a633f61f": "getPositionOwedAmountAtTime(bytes32,uint256,uint32)", +"a6345859": "setEscapeRequest(uint32,uint32)", +"a635d31e": "Vote(address,bool)", +"a635e7c5": "BuyEBETtokens()", +"a636f4a1": "VoterAdded(address)", +"a6372087": "starNoLongerForSale(uint256)", +"a63744e0": "addPoll(uint256,bytes,uint8)", +"a63832a0": "dateFunc(int256)", +"a6391823": "awardsOf(address,uint8)", +"a6393784": "BiddableEscrow(address)", +"a63a9fa6": "setNextSnapshotBlock(uint256)", +"a63aeed9": "tokenSaleResumedTime()", +"a63b91f4": "autoBurn()", +"a63c500f": "is_locked()", +"a63c7ba2": "payoutToBeneficiary()", +"a63d0be6": "findAndTrade(address,address,uint256,uint256)", +"a63d6f05": "setRewardLevel(uint256,uint256,uint256,uint256[],uint256[])", +"a63d914f": "confirmAction(uint256)", +"a63dcbd7": "updateRtbSettlementAbi(string)", +"a63e10fa": "getUnreadMessageCount(address)", +"a63f1350": "getParentUniverse()", +"a63f5e2a": "candyToken()", +"a63f8020": "scWithdrawCall(address)", +"a6403636": "resolve(uint8,bytes32,bytes32,bytes32)", +"a64085cc": "getAllClients(address)", +"a641d28e": "revokeDelegateSigned(address,uint8,bytes32,bytes32,string,address)", +"a641edc7": "BOC(uint256,string,string)", +"a6424d22": "setVigAddress(address)", +"a64278ce": "lost_and_found_master()", +"a642c032": "getEdition(uint256)", +"a643c1a0": "updateAddresses(address)", +"a6441979": "StexIssued()", +"a6459042": "agencyReceiver()", +"a645a33a": "VotingFinished(bool)", +"a645e840": "getCurrentGameInfo()", +"a645ff5f": "send(address[],uint256[])", +"a646f9ad": "userWithdraw()", +"a6472906": "getAxie(uint256)", +"a6474a58": "setnotice(string,string,string)", +"a647e8ec": "mint(address,uint256,uint256,uint256)", +"a6482858": "boxPrice()", +"a648567b": "placeBet(uint8,uint8)", +"a648fec2": "updateAllTurnover(uint256)", +"a6491545": "_giveToken(address,uint256)", +"a64968ac": "joyToken()", +"a64a1c0b": "totalSoldTokensWithoutBonus()", +"a64ad595": "getDelegator(address)", +"a64b0b62": "addDevReward()", +"a64b63a8": "ParcelXGPX(address[],uint256)", +"a64b6e5f": "transferTokens(address,address,uint256)", +"a64bb045": "Test7J()", +"a64c7e2a": "Crowdsale(address,address,address)", +"a64d1c09": "hashOrder(uint8,address,uint256,uint256,uint256,uint256)", +"a64ded31": "tttTokenAddress()", +"a64e7969": "balancesCannotSell(address)", +"a64e920d": "vrcCount()", +"a64ed8ba": "tokensCount()", +"a64f0ca4": "getEtherInEuroCents()", +"a64f197e": "allocateBid4b(bytes32)", +"a64f829a": "addDungeonRewards(uint256,uint256)", +"a64fa869": "PrezzoCMT(uint256,uint256)", +"a650ebbc": "transferFromInternalStakingfund(address,uint256)", +"a6515a98": "admined()", +"a652477b": "STSTEST3()", +"a6534b63": "EtherBet(address,uint256,uint256)", +"a65465ff": "pank15()", +"a65491d5": "yeezy()", +"a654cfab": "pots()", +"a655fb4e": "level_9_amount()", +"a6567a9a": "calculateNewTime(uint256,uint256)", +"a656e51f": "lastInvestorsProfitDay()", +"a657242b": "Hardcap()", +"a6572c87": "getemployee(address)", +"a657cb9c": "submitRedeem(uint256)", +"a6593562": "getamountvotes()", +"a65a0068": "getAccountBalances()", +"a65a26e8": "returnAddressList()", +"a65a7753": "Zentum()", +"a65ac961": "batchTransferValues(address[],uint256[])", +"a65ae513": "ownerDeclareFailure()", +"a65b37a1": "buyXname(bytes32,uint256)", +"a65b62c9": "priceRound(uint8)", +"a65c3097": "_distributeRest()", +"a65e53e2": "prizeWithdrawTo(uint256,address,uint256)", +"a65e91b8": "baseTokensSold()", +"a65eacdc": "delManager(address)", +"a65ecbeb": "getMaxTokenAvaliable()", +"a65f0f79": "Ethereal_Smart_ID(address,address,string,string,bool)", +"a65f1193": "weiToUsdCents(uint256)", +"a65f51c8": "gapTime_()", +"a6605a77": "_updateTradingVolume(uint256,address,address,uint256)", +"a660698e": "TheInternetDigitalCurrency()", +"a660a326": "balancesHold(address)", +"a660f827": "bonusEnds5()", +"a6624bf4": "ISBToken()", +"a6632904": "tier_cap_4()", +"a663b5de": "viewCoinsKarma(uint256)", +"a664225c": "exchangeFinished()", +"a6656096": "invalidateGame(uint256)", +"a6658dea": "BitSelectConservador()", +"a6661901": "totalNormalContributorIds()", +"a6662a3c": "initMetadataDisabled()", +"a6666f0f": "TTGCoin()", +"a6667e18": "RemoveWhitelist(address)", +"a666ff3c": "lockedTokenAddress()", +"a66712ae": "usersOfAccount(uint256,uint256)", +"a6674aa3": "Resigned(address)", +"a6678b60": "setJadeCoin(address,uint256,bool)", +"a668d7c9": "NiceGuyPonzi()", +"a66939ad": "hostileTakeover(address,uint256)", +"a669b56b": "pay_day()", +"a669c9f9": "registeredServices(address)", +"a669d972": "c_centsPerToken()", +"a66ac7bc": "payout(bytes32,bytes32)", +"a66b62e6": "gameOverByUser()", +"a66b7748": "follow(bytes32)", +"a66c0b1c": "setGoldmintTeamAddress(address)", +"a66c53b2": "buyCore(uint256,uint256,uint256,string)", +"a66cb0ee": "GetBonus()", +"a66d5ef7": "createNamespace(string)", +"a66db704": "getPOOL_edit_23()", +"a66ddf43": "mainSaleRateP3()", +"a66df701": "chargeFee(address)", +"a66e6e5c": "etoken2Symbol()", +"a66ee056": "internalTransfer(int256,address,address)", +"a66f32e5": "stage3Bounty()", +"a66f42c0": "boost()", +"a66f7ad6": "signRelease(uint256)", +"a66fd42b": "mintToggle(bool)", +"a670b9e7": "nestedSecondSome(uint256,uint256)", +"a670c133": "numTeamDeposits()", +"a6712778": "investBct(address)", +"a672990c": "whitelistContract(address,bool)", +"a6735023": "getProfilePicture(address,address)", +"a673b130": "Reserved(address,uint256[])", +"a6741cfd": "injectEtherToDividend()", +"a6747670": "senderToProxy()", +"a675807e": "totalLevs()", +"a675887e": "EtherReceivedFromRelay(address,uint256,address)", +"a676b174": "frozenAccountProfit()", +"a677fbd9": "example2Func()", +"a6780857": "fireEventLog0Anonym()", +"a6784488": "cleanOut()", +"a67909bd": "LOCKTC()", +"a6791568": "burnAllTokens(address)", +"a67a6eab": "bearToken()", +"a67ad1b2": "sellICloudSecsAgainstEther(uint256)", +"a67aee1f": "tokenConverter()", +"a67afd30": "vest2all(address,address)", +"a67ba5d2": "changeAdminCharges(uint256,uint256,uint256)", +"a67bb583": "tokenCapForSecondMainStage()", +"a67c2730": "getBonusPerShare()", +"a67c2dcb": "accept_ownership()", +"a67c8bc4": "mintFundsTokens()", +"a67cace9": "AIT_TokenERC20(uint256,string,string)", +"a67d2602": "getSafeAddr()", +"a67de805": "DWalletToken()", +"a67e91a8": "TOKENS_MAX()", +"a67eb8d7": "STRIMToken(address,address,uint256,uint256)", +"a67ebf73": "Voting(uint8,address,uint256,uint256)", +"a67f122f": "_1_vozrast()", +"a67f9997": "LIQUIDATION_RESERVE_RATIO()", +"a67fc3fa": "getRewardAmount(bytes32,bytes32)", +"a6801cbd": "reset(uint256,uint256,uint256)", +"a6808c3c": "_setAgilityValue17(uint256)", +"a6809af0": "setOdds(uint256)", +"a680baaf": "backendWallet()", +"a681bf23": "LegalBot()", +"a681f950": "setMinMax(uint256,uint256)", +"a6823189": "parseAddr(string)", +"a682d5ad": "clampMin(uint256,uint256)", +"a682dd4f": "SWAP(address,address,address)", +"a6832d53": "allowedTransfer(uint256)", +"a68393a2": "debug_getCoinbaseTxOutputLen(uint256)", +"a6843f34": "right48(uint256)", +"a6846026": "TokenMintingDisabled(address,bool)", +"a684bc9f": "tokenReserved3()", +"a684ff03": "bet(uint16,bytes32)", +"a68567ac": "IDToken()", +"a6856e9d": "JTEBIT(address,uint256)", +"a685a41e": "parseLoanOffering(address[9],uint256[7],uint32[4])", +"a685ae66": "minerTimeOfLastProof()", +"a685ea57": "getROFRStatus()", +"a68602fb": "SignalingDisabled(address,uint256)", +"a687be48": "RocketsAndResources()", +"a6885e88": "getStageData()", +"a6895b5a": "getDailyLimit()", +"a6896bdf": "isRightPosition(uint128,uint128,uint32,uint32)", +"a68a2884": "TournamentCore(address,address,address,address)", +"a68a76cc": "createForwarder()", +"a68b51ed": "addProposal(address,uint256,uint256,string,uint256,bytes)", +"a68b91ab": "getContractData()", +"a68c5ca1": "SDTToken(uint256,string,string)", +"a68c68b4": "get_asset(uint32)", +"a68c9bbb": "getBid(address,address)", +"a68cfb25": "getSecondAmount(bytes32,bytes32)", +"a68d9a62": "_setDownRequest(address,uint256,uint256,uint256)", +"a68dfb2d": "TTToken()", +"a68e27b7": "getLuckProps(address)", +"a68e4578": "totalLBSold_CORNERSTONE()", +"a68e5ad0": "depositTokensForTrading(uint256)", +"a68eb555": "payVATToBusinessOwner(uint256,uint8,address)", +"a68f0bc1": "TOTAL_LARE_FOR_SALE()", +"a68fff3f": "GenRandom(uint256,uint256)", +"a6903278": "beginBlock()", +"a69032ee": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"a69177b1": "addTotalSupplyAmount(uint256)", +"a6921956": "tokenStatus()", +"a692c2f9": "_toTileId(int32,int32)", +"a692d5ae": "migratePriceLeader(uint8,address,uint256)", +"a6934950": "_confirmOneBuy()", +"a69358aa": "voteForTap(bool)", +"a693600b": "poolAmount()", +"a69364fc": "ProofOfTheRich()", +"a6940238": "growth()", +"a69416f6": "getNodeType(address)", +"a6948cd9": "calculateArea(address[16],uint256)", +"a694dabd": "STARTING_SNAIL()", +"a694fc3a": "stake(uint256)", +"a69520aa": "alchemy(uint256)", +"a695cacf": "getGameIdsByCategory(bytes32)", +"a69709ae": "toHexString64(uint256)", +"a69722de": "validateDescription(string)", +"a6973fa1": "computeS(uint256)", +"a697ca14": "finishSingleLock(address,address)", +"a6980a17": "addPromo(bytes32,uint256,address,uint256,uint256)", +"a6983932": "SeckeyRevealed(bytes32)", +"a6988576": "walletTokenBounty()", +"a699cd20": "getGrowingControlStartAt()", +"a699d9b0": "saosao6()", +"a699fb18": "payoutWorth(address)", +"a69a2ad1": "totalBalances()", +"a69a5588": "set(bytes12,bytes32)", +"a69ade72": "LED_MULTISIG()", +"a69bd4a8": "regStartTime()", +"a69beaba": "vote(bytes32)", +"a69c22be": "getYays(uint256)", +"a69c5bbf": "bucketClosureTime(bytes32)", +"a69c6597": "getPlayerName()", +"a69cbb50": "_getEarlyBonus()", +"a69dde14": "checkPassiveAndNull(address)", +"a69df4b5": "unlock()", +"a69e894e": "createTokens(address,uint256)", +"a69eae7c": "changeAllowanceToMint(address)", +"a69f7d1f": "FOUNDATION_PERCENT()", +"a69f886a": "withdrawRaised(uint256)", +"a6a1858f": "whale()", +"a6a20ff6": "DSEasyMultisig(uint256,uint256,uint256,uint256)", +"a6a34dd3": "_setMinCardPrice(uint128)", +"a6a3a439": "getNumTransactions(address,uint256)", +"a6a3ba2b": "pausestatus()", +"a6a5bfe3": "getStage2Start()", +"a6a62d58": "lastBlock_f2()", +"a6a633af": "ROA()", +"a6a68606": "findOnePercent(uint256)", +"a6a6a0d8": "becomeFrom()", +"a6a6f1c7": "registerLicense(string,string)", +"a6a86130": "usdToWei(uint256)", +"a6a9a099": "privateIcoMin()", +"a6aa7f7a": "onlyFounders()", +"a6ab1216": "getWeaponsArmy1(uint256)", +"a6ab36f2": "initialize(uint256,uint256,address)", +"a6aba1b5": "BitCoix()", +"a6abbad6": "assertEq16(bytes16,bytes16,bytes32)", +"a6ac9225": "getJackpotResults(uint256)", +"a6ad57e6": "difficultyScaleMultiplierLimit()", +"a6ae0aac": "coinbase()", +"a6afd5fd": "getBets()", +"a6afed95": "accrueInterest()", +"a6b01e50": "isMultiOwner(address)", +"a6b05af6": "INITIAL_BONUSLIST_TOKENS()", +"a6b08498": "isOps()", +"a6b10dd1": "showToken_For_Circulation()", +"a6b11fb3": "factorial_ICO()", +"a6b165ee": "total_investors()", +"a6b197aa": "Order(address,uint256)", +"a6b1caa3": "gasScalar(uint256)", +"a6b206bf": "doSomething(uint256)", +"a6b26697": "EthRefundReceived(address,uint256)", +"a6b2c437": "confirmRequest(uint256)", +"a6b2df9b": "requestDocument(uint256,string)", +"a6b3abba": "getMyTokenBalance()", +"a6b402ec": "MGU()", +"a6b4492f": "servusToken()", +"a6b4b0f4": "testCreateGames(uint256)", +"a6b513ee": "finalPrice()", +"a6b55eec": "unlock(bytes16,uint32)", +"a6b57b5d": "sharesOwned(address,uint256)", +"a6b7fa36": "withdraw(uint32,uint192,bytes)", +"a6b87b52": "erc()", +"a6b909e1": "trades()", +"a6ba250c": "fechVoteInfoForVoterBySnapshotBlock(address,uint256)", +"a6bb012b": "penalizeInactiveArbitrators(address[],uint256[])", +"a6bb1667": "updateMatch(uint8,uint8,uint8)", +"a6bc18f9": "setTrader(address)", +"a6bd5427": "getOptionCount()", +"a6bd853b": "mtdPreAmount()", +"a6bdcc17": "isAtLeast(uint256,uint256)", +"a6bf3df0": "oraclize_query(string,string[2],uint256)", +"a6bf45a9": "getNumberOfDeedsByAddress(string)", +"a6c01cfd": "isInGeneration(uint256)", +"a6c09381": "_setPackedTimestamp(bytes32,uint256)", +"a6c0d5a8": "YukiChainToken()", +"a6c1d611": "getAngelLockStatus(uint64)", +"a6c1f87f": "partial_refund(address)", +"a6c216c2": "UpgradeEvent(address,address)", +"a6c226f0": "lock(address,address,uint256[],uint256[])", +"a6c23bc4": "setTokensPerUsdRate(uint256)", +"a6c24b38": "getRequiredPrice()", +"a6c2591e": "get_header(uint256,uint256)", +"a6c2f3b2": "getAllAgreements(uint256)", +"a6c30b29": "startGasCalculation()", +"a6c3e6b9": "author()", +"a6c4cce9": "registeredApps(address)", +"a6c4d58c": "MetronomeToken()", +"a6c4ec0e": "hasUser(address)", +"a6c5612e": "areTokensFree()", +"a6c58b63": "getJobStatus(uint256)", +"a6c62c90": "snake(uint256)", +"a6c662ea": "Cmc()", +"a6c66575": "processInviterBenefit(address,uint256)", +"a6c6aee1": "ODEEPToken()", +"a6c7bf8a": "setMasterWallet(address)", +"a6c7f715": "MoimToken(uint256,string,string)", +"a6c8210e": "getVotingParams()", +"a6c93349": "createContract(uint256,uint256,int256,int256,int256,int256)", +"a6c94d2e": "durationVoting()", +"a6c95de1": "transferBountyTokens(address,uint256)", +"a6c98142": "SquirrelFarmer()", +"a6ca0a98": "PARAMOUNT()", +"a6ca322b": "refundCompleted()", +"a6ca54bd": "lawEnforcementRole()", +"a6cb4654": "catchYou(address,uint256,uint256)", +"a6cb9e64": "scheduleCall(address,bytes,bytes)", +"a6cbcdd5": "numSignatures(bytes4)", +"a6cc0428": "withdrawCryptoCurrencyNetworkTokens(address)", +"a6cd5ba3": "MaxMasternodesAllowedChanged(uint8)", +"a6cd8c68": "Match_Maker()", +"a6ce25b2": "In(uint256)", +"a6ce69a2": "changeSupply()", +"a6ce8c29": "HandsOnToken(uint256,string,uint8,string)", +"a6cea881": "KayiToken()", +"a6ceaeb8": "getSoldTokens()", +"a6ceb1f3": "sendAirdrop(address[],uint256[])", +"a6cfaf2e": "MMC(uint256,string,string)", +"a6cfb7a3": "getBack(uint256)", +"a6cfbb7f": "revenueBalance()", +"a6d00693": "getMeshPointByCreator(int256)", +"a6d150e0": "updateWhitelists(address[],bool[])", +"a6d15124": "coinsLeftInTier()", +"a6d15963": "createChannel(address,uint192)", +"a6d23e10": "payments()", +"a6d2bff6": "getTeamTokens()", +"a6d34fa8": "JackpotPayoff(uint256,uint256,address)", +"a6d40d39": "unlockFounder(uint256)", +"a6d49dca": "emitTransferEvent(address,address,uint256)", +"a6d4b5c2": "getGroupResult(uint256)", +"a6d4e9da": "tokensByTx(uint8,string)", +"a6d544e9": "sumHardCapPreICO1()", +"a6d6d046": "LetsfairToken()", +"a6d6ec85": "Add_Product(uint256,uint256,string,string)", +"a6d72407": "interface()", +"a6d7d72e": "addTwinAddress(address)", +"a6d87f7d": "myReferralDividends()", +"a6d8adf9": "compensateAll(address)", +"a6d930bb": "FundCrowdsale()", +"a6d93a9a": "_sell(uint8,bytes6,uint32,uint32)", +"a6d958c6": "getLastInput()", +"a6d96af6": "_createCompany(bytes32,bytes32)", +"a6da1e7d": "depositAndLock(address,uint256,uint256)", +"a6da3761": "StoneumToken()", +"a6da467c": "buyCozyAffiliated(uint256,uint256,bool,address,address)", +"a6da54a3": "validCoordinate(uint256,uint256)", +"a6dacdd7": "right59(uint256)", +"a6dc0173": "BRFCrowdsale(uint256[3],uint256[3],uint256[3],uint256[3],address,uint256,uint256,address,uint256,address)", +"a6dc15bd": "PriceChanged(uint256)", +"a6dc1ada": "setMaxStage3AllocationPerInvestor(uint256)", +"a6dc6771": "third()", +"a6dc84f0": "balanceOfFrozen(address)", +"a6dcb12d": "candyTotalSupply()", +"a6dcc834": "getUserInventory(address,address)", +"a6dd06e1": "getPOOL_edit_34()", +"a6ddcc96": "FillBuyOrder(address,address,uint256,uint256,uint256,uint256,uint256)", +"a6ddce13": "setDisable(address,bool)", +"a6de42c8": "AuthorizedAddresses()", +"a6dea55e": "sendEthToAddress(address,address,uint256)", +"a6ded200": "redeem_funds(address,uint256,uint256,bytes32)", +"a6defd45": "ZeroHooStandardToken(uint256,string,uint8,string)", +"a6df0344": "REF_CREDITS_PER_AXIE()", +"a6df33a2": "creationInvestmentSupply()", +"a6df6c30": "minCWCsPerReturnMoreThan()", +"a6e0264a": "_checkMyVesting(address)", +"a6e158f8": "redeemTokens(uint256)", +"a6e16ba2": "testThrowsRetractLatestRevisionNotOwner()", +"a6e1bc7c": "IndoCrypt()", +"a6e26e96": "batlordAddress()", +"a6e2eab1": "recycleAfterEnd()", +"a6e315ff": "addExemptionAddress(address)", +"a6e3289d": "addNextMemberPayment(address,uint256,uint256)", +"a6e3a8a7": "findMinAuditPricesStats()", +"a6e3f533": "redeemKmPardsBal()", +"a6e3fcf6": "setBaseTokensSold(uint256)", +"a6e4002e": "DividendManager(address)", +"a6e497b6": "getUserContractAddress(address)", +"a6e4ae01": "gcp(uint256)", +"a6e5291f": "UniversalGiftToken()", +"a6e5303a": "SLKToken()", +"a6e53b99": "PHASE1_ACCOUNT_TOKENS_MAX()", +"a6e5f2f5": "Show_Address_for_option_C()", +"a6e7469c": "getSendersHash(address)", +"a6e77af1": "setEntryPrice(uint256)", +"a6e7f409": "STATE_OWNED()", +"a6e81e7c": "refundWei(address,uint256)", +"a6e826e8": "startsecurities()", +"a6e8a859": "target2()", +"a6e915b6": "confirmOpening(uint256,uint256)", +"a6e9e95f": "setCoinAllowance(address,address,uint256)", +"a6ea7ad2": "dexTestTransfer(address,address,uint256)", +"a6eaab99": "DGCASH()", +"a6ebbe5a": "NewDeposit(uint256,uint256,address)", +"a6ec01f7": "clearPendingWithdrawal(address)", +"a6ec0708": "setCompte_28(string)", +"a6ec3022": "getCurrentYearRemainToken(uint16)", +"a6ecfff8": "is_btc()", +"a6ed563e": "getBytes32(bytes32)", +"a6ee5eed": "changeFinishPreSale(uint256)", +"a6ee6fd9": "max_schrems_addr()", +"a6eea7f3": "liquidationPeriod()", +"a6effaed": "DetailedERC20(string,string,uint8)", +"a6f07a5c": "bigbomMultiSigWallet()", +"a6f0cba6": "DarioAdministrator()", +"a6f0e577": "isLeapYear(uint16)", +"a6f1c939": "getPick(uint256)", +"a6f1fd51": "addDeposit(uint256)", +"a6f20445": "LogCancelReservation(address,uint256)", +"a6f257cc": "AgroTechFarmToken()", +"a6f2ae3a": "buy()", +"a6f2e80d": "lockFunds(address)", +"a6f2fd5c": "disable(bool)", +"a6f48c90": "freeCount()", +"a6f4ab2e": "setStalePeriod(uint256)", +"a6f55282": "addNacToNLF(uint256)", +"a6f57199": "CrowdsaleExtended(uint256)", +"a6f5a22b": "openShop()", +"a6f6a8a6": "_setPrices(uint256)", +"a6f6d8bb": "getObligation(bytes32,uint64)", +"a6f70594": "SpoutCrowdsale(address,uint256,uint256,address)", +"a6f7257a": "getSigns(uint256)", +"a6f7541c": "maroonToken()", +"a6f81668": "gameInfo(uint256)", +"a6f87bc6": "WumingToken(address,address)", +"a6f935f6": "exporterAcceptedIBankDraft()", +"a6f9885c": "MAX_LENGTH()", +"a6f99922": "EcologicalShield()", +"a6f9dae1": "changeOwner(address)", +"a6fb08ae": "contractWithdraw(uint256)", +"a6fb475f": "transferFrom(address,address,uint16[])", +"a6fbf3d2": "getInt(bytes32,bytes32)", +"a6fc2823": "continueIco()", +"a6fc5c03": "getCode(uint256)", +"a6fd0085": "sub(uint128,uint128)", +"a6fd2487": "recordName()", +"a6fd96b0": "MultiService(address,address[])", +"a6fda231": "ICO_RATE3()", +"a6fdedef": "aimeIncreasePerTrip()", +"a6fe178c": "getRegisteredExchanges()", +"a6fe7a28": "removeService(address,uint32)", +"a6fea6f4": "registerVendor(address)", +"a6ff20a3": "addVehicle(uint256,uint256,bytes32,bytes32,uint256,uint256)", +"a6ff85e2": "ReceiveDonate(address,uint256)", +"a6ffefae": "balancesListNumberMap(address)", +"a701229f": "ChangedOwner(address)", +"a7016023": "setOwnership(address)", +"a7021bc5": "executorAlive()", +"a70284be": "soldBeercoins()", +"a702be14": "feedSecondaryPot(uint256)", +"a703078c": "sortAuction(uint256[])", +"a7030a53": "extractAndStoreBitcoinAddresses(bytes32,uint256,bytes,bytes)", +"a703c751": "batchWhiteListInvestors(address[])", +"a705245e": "setReserveVault(address)", +"a70616de": "platformWithdrawalRecipient()", +"a7068d66": "addDelegate(address,bytes32,address,uint256)", +"a706a2e2": "requestUnlock(bytes32,address,bytes4,address)", +"a706d26e": "DragonTreasureToken(address,address,address)", +"a7070373": "setAllowance(address,address,address,uint256)", +"a707300f": "addAcceptedContribution(address,uint256,uint256)", +"a7074a82": "getCrowdsaleStatus(address,bytes32)", +"a707ce55": "changePass(bytes32)", +"a707fc81": "payback(uint64,address[])", +"a708142b": "addressSCComplianceService()", +"a7084516": "VictoryX(uint256,string,uint8,string)", +"a7086536": "withdrawOfferForCollectible(uint256,uint256)", +"a7096ac8": "addLogicVersion(uint256,address)", +"a70a92f7": "setLiquid0(bool)", +"a70a9ad7": "switchDeity(address)", +"a70b015d": "stageICO()", +"a70b21a3": "ReceiverPays()", +"a70beb13": "processSellOrder(uint256,uint256)", +"a70c41b4": "getTransferFromPreSignedHash(address,address,address,uint256,uint256,uint256)", +"a70ce015": "safeGetPercent(uint256,uint256)", +"a70d7006": "StinkyLinky()", +"a70e82d4": "changeFreeUntilDate(uint256)", +"a70f101c": "useEmergencyCode(uint256)", +"a70f84c3": "registerName(address,bytes32,uint256)", +"a70fc3ba": "setCap(uint256,string)", +"a70fc680": "fundraising()", +"a71168e3": "setTrainingScienceContract(address)", +"a7120433": "setItemContract(address)", +"a7134993": "lifeD(uint256)", +"a7134f73": "acquire()", +"a713a3f7": "loggedTotalSupply(uint256)", +"a7154d22": "cancel(address,uint32)", +"a7157c72": "withdrawToTeamStep2(uint256)", +"a715bf33": "ICO_PRICE()", +"a715df58": "setUnownedName(uint256,string)", +"a715ff59": "EtherandomProxy()", +"a716144a": "getStack(bytes32)", +"a7177ebf": "getSpellAbilityCost(uint8)", +"a718309f": "CryptoCurrencyExchange()", +"a7188b4e": "setEditModeBool(bool)", +"a718d11b": "addWhiteList(address,bool)", +"a718e288": "Robet(uint256,string,string)", +"a718e774": "closeWeeklyInvest()", +"a718f4b3": "searchJobs(address,uint256,uint256[],uint256[],uint8[][4],uint8,uint256[],uint256[],uint256)", +"a7194e2a": "returnTokensListOfAddresses()", +"a71962c2": "GAME_STARTED()", +"a719804d": "Spank(string,string,uint8,uint256,uint256)", +"a71a3dde": "DEFAULT_LOCK_COST_PER_HOUR()", +"a71acabc": "newSection(bytes32,bytes32,bytes32,uint256)", +"a71aec73": "isTradable(uint16)", +"a71b4c26": "auctionSumGwei()", +"a71bd1cd": "getCurrentDay(uint256,uint256)", +"a71be2c0": "Clip()", +"a71d6f9f": "setTRCExchangeRate(uint256)", +"a71d8181": "createCeleb(string,uint256)", +"a71e12e5": "JoinGameAsPlayer(uint8,uint256,uint8)", +"a71e46d3": "maxRecordID()", +"a71ee0c6": "changetradestatus(bool)", +"a71ef84d": "getVotingWinner(address)", +"a71f94c8": "scheduleSetUInt(address,uint256,uint256)", +"a71fa796": "addResearch(address,uint256)", +"a7205062": "constructor(address,uint256,uint256)", +"a720cbb8": "create(address,address,address,string,string,address,uint256,uint256)", +"a720e0a8": "ebyteToken()", +"a720faa9": "maxPreICOSupply()", +"a721c06c": "LENTToken()", +"a721d9d9": "EmiratesCoin()", +"a721ebe8": "numberSyndicateMembers()", +"a72299dd": "MetadollarShare()", +"a7232aae": "setGPSMinEth(uint256)", +"a723761a": "investEtherForDID()", +"a723cda8": "AQUAOIN()", +"a7240d45": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes32,bytes32,bytes,bytes)", +"a72460d1": "getProviderEndpoints(address)", +"a724e54c": "newCollectible(uint256,string,uint256,uint256,uint256,string,uint256,string)", +"a724f68a": "CratesOpened(address,uint8)", +"a7256621": "addInt(uint256,int256)", +"a725c4a4": "StrategicPartners(address,uint256)", +"a725fa1f": "CpublicgoldToken(address)", +"a7261f79": "isPayableEnabledForAll()", +"a72670b8": "getReportingWindowByTimestamp(uint256)", +"a726be9a": "get_token_data(uint256)", +"a727390d": "GetDomainInfo(string)", +"a727632f": "Date_Finished()", +"a7281bbf": "CollectTaxes(uint256)", +"a728fa93": "getMyCraigGrant()", +"a7292c74": "amountEthRaised()", +"a72a05f7": "getReceiversCount()", +"a72aa163": "setPropertyMode(uint16,bool,uint32)", +"a72b1444": "minimumSupport()", +"a72cb9aa": "editAddress(int256,address,string,address)", +"a72cc1e8": "updateTask(address,string)", +"a72dc52e": "fixedExpUnsafe(uint256)", +"a72dc950": "StageOneEnable()", +"a72ec7a0": "TokenLiquidityPlatform()", +"a72f3dea": "removePVPContender(uint256)", +"a72f5aaa": "preDistribute(address,uint256)", +"a72ff7de": "buySmartContract()", +"a7304287": "godUnpause()", +"a731c4ec": "addUserTokenLocalBalance(address,uint256)", +"a731f31a": "getBoxes(address)", +"a7321096": "mainSaleBonus()", +"a7322d9d": "DURATION_SALESTAGELAST()", +"a7324134": "parseLoanOffering(address[11],uint256[10],uint32[4],bytes)", +"a732d6c4": "calculateAffiliate(uint256,uint256,uint256)", +"a732f9ac": "increasePlayersGooProduction(address,uint256)", +"a7334c93": "addSales(uint32,uint256,uint16,uint16,uint64,uint64,uint32,uint8)", +"a733800d": "Shipia()", +"a73381d5": "EYInnovationCoin()", +"a733e21d": "twice(address,uint256)", +"a733f702": "isValidSize(uint256)", +"a73467bd": "TestCitySnapshotInternal(address,uint256)", +"a73598fd": "tryFinalizeStage()", +"a73638a7": "selectGod(uint16)", +"a7365ea9": "Gealena()", +"a7368afb": "allocateTokens(address[],uint256[])", +"a7374b21": "sendFundsInternal(uint256,address,bytes)", +"a737ec3d": "GxAdmins(address)", +"a737ecc9": "getProfitToAddress(uint256,address)", +"a7384c1e": "eth2erc20()", +"a739013f": "buy(address,address,uint256,bool)", +"a7397d27": "xaurForGasLimit()", +"a73b60f4": "buttonClicks()", +"a73b9bcb": "FTFExchangeToken()", +"a73c0ba2": "play(uint256,uint16,uint8)", +"a73c52e7": "getLastPerUser(address)", +"a73c7140": "amountTotal()", +"a73d633c": "addWhitelist(address,address)", +"a73d907e": "inboxIsEmpty(address)", +"a73e01cb": "WPTokensBaskets(address,address,address,address,address)", +"a73e38ce": "generateICOcrowdsale(uint256)", +"a73e9837": "newEnterWallet(address)", +"a73ee331": "MAIN_HOLDER_ADDR()", +"a73f7f8a": "addRole(address,bytes32)", +"a73fc4cd": "get_pre_kyc_iconiq_bonus_denominator(address)", +"a7403160": "vestingsReleasedRemain(address)", +"a74035b5": "setEvabotContractAddress(address)", +"a740a194": "getGasToReport()", +"a740a6fa": "clearRAM()", +"a740cf90": "TGIF(address)", +"a740de43": "nameLocked()", +"a7419b51": "setAirLiftPrice(uint256)", +"a742a942": "create(address,bytes32,address,address[],address,bytes32)", +"a7432434": "refferalPreICOBonus(address)", +"a743a61f": "checkStudentsApply()", +"a743fa50": "beneficiaryFunded(address)", +"a744a633": "getWeeklyTransactionVolumeReceiving()", +"a745863b": "startRebuyTime()", +"a745953e": "buyStarInitial(uint256,string)", +"a745ec70": "bountyDistributorAddress()", +"a7467039": "sharesToManager(uint256)", +"a747007f": "AffiliateProgram(address)", +"a7483f74": "CATFreezer(address,address)", +"a74905db": "reportProfit(int256,address)", +"a74915cf": "getadd()", +"a7491b48": "votesByAddress(address)", +"a7497fa5": "tge()", +"a749870d": "etherValueAllowStale(uint256)", +"a749e97b": "_setPaymentSchedual(uint256,uint256,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"a74a1831": "post(bytes32)", +"a74baaa4": "amountOfHolders()", +"a74e01cf": "unFreezeAllTransactions()", +"a74e493f": "pregenTokens(address,uint256,uint256)", +"a74ecb12": "setMasterAddress1(address)", +"a74f277a": "MaintenanceUpdate(bool)", +"a7502a3f": "totalTeamWithdrawSupply()", +"a7507df2": "loveUrl()", +"a75252ea": "sellToAddress(uint256,address)", +"a75261f2": "certbot()", +"a75274e9": "setMarkup(uint256,uint256)", +"a752c2c5": "UniversalSchemeMock()", +"a75343bf": "claimOwnership2()", +"a753d6f2": "CreateProposal(string,string,string,string,string,string,uint32,uint32)", +"a753fd08": "setWinNetworkFee(uint256)", +"a7542448": "addRef(bytes32,bytes32)", +"a75439d1": "minValuePre()", +"a755a47e": "triggerAllRefunds()", +"a7560bec": "EBITOKEN()", +"a7565888": "m_Paused()", +"a75688b2": "oldMillionEther()", +"a756f362": "Th_stage1(uint256)", +"a75761f1": "returnUint16(uint16)", +"a7577542": "addCrowdSaleTokens(address,uint256)", +"a757ac4b": "privatesaleAddress()", +"a757fc42": "buyTwo(uint256,uint256,uint256,uint256)", +"a758ac6a": "MaecenasCrowdsale()", +"a759822b": "performCalculations()", +"a75a1d6c": "claimRefundTokens(address,address)", +"a75a4e4a": "updateScoreAndBalance(uint256,uint256,address,address)", +"a75a9049": "setInitialOwner(address,uint256)", +"a75aef40": "SYCEarlyPurchase()", +"a75c6f65": "updatedCirculation(string)", +"a75c8546": "determineDiscountRate()", +"a75c981d": "totaltokensold()", +"a75d0042": "signedTransferCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"a75dd0d4": "AddPrivateKey(string,string)", +"a75df814": "knownAddress(address)", +"a75e2853": "transferForICO(address,uint256)", +"a75eb727": "updateExistingRaz(uint256,uint256,uint256,uint256,uint256)", +"a75fe8e1": "removeWallet(address)", +"a7603a86": "getDefaultValidityBond()", +"a76044a4": "binary()", +"a760d1d0": "setRateAgain()", +"a760e442": "setLosers(uint256)", +"a76188b9": "setRewardPercentages(uint256,uint256,uint256,uint256,uint256)", +"a7633064": "getRandomType(uint16)", +"a7638346": "setFinaliseTime()", +"a7638c4d": "disableStakingPeriod()", +"a764eb45": "setCurrentIssuanceData(address,uint256)", +"a7651147": "loyaltySupply()", +"a76594bf": "getPlayersCount()", +"a7668eba": "calcTokenCost()", +"a766f3d1": "storeStub(address,bytes32,bytes32)", +"a76769a5": "fillOrderWithEth()", +"a76774f5": "jackpotCompleted()", +"a7677ee3": "AslanToken()", +"a767d8be": "preIcoMaxCap()", +"a76a155e": "getBetsFromAddress(address)", +"a76bb04e": "setRewardPoolWallet(address)", +"a76d368a": "candyPowerToken()", +"a76d50ad": "multipleTransfer(address[],uint256,uint256)", +"a76dd676": "TIER3_PERCENT()", +"a76decce": "_createNFT(uint256[5],address,uint256)", +"a76ee2d8": "fillBuyOrder(address,address,uint256,uint256,uint256,uint256)", +"a76eeab2": "updateVitality(uint256,uint8)", +"a76f3543": "getUpgradePointer()", +"a76f43a0": "bancorDaiSmartTokenRelay()", +"a77078e7": "withdrawForOp(address)", +"a7721e0f": "multiplyTokensSend(address[],uint256[])", +"a7724b16": "bingo()", +"a7728589": "setMintAgent(address,address)", +"a7731150": "StoreFile(bytes32,string,string,string,string,string,uint256,bytes)", +"a7737b93": "NumberOfPart()", +"a77384c1": "setTotalShares(uint256)", +"a773d98a": "getAssetIDHash()", +"a7741827": "deleteAllUris()", +"a7743462": "setFounderTokenWallet(address)", +"a774f163": "adjustDefaultSpritePrice(uint256,uint256)", +"a775511a": "isMainsalePeriod()", +"a775b1c4": "NAORIS_TEAM_TOKENS()", +"a7760d79": "preICOendTime()", +"a77674a7": "buy_energy(address,uint32,uint32,uint64)", +"a7771ee3": "isVoter(address)", +"a7775bd7": "YDToken()", +"a777aa5d": "changeMaxTokenSell(uint256)", +"a777d0dc": "hello(string)", +"a777deca": "thirdRelease()", +"a777eca9": "MinerRewardChanged(uint256)", +"a77a8230": "allowence(address,address)", +"a77aa49e": "setIntValue(bytes32,int256)", +"a77adc23": "WaxToken()", +"a77ae839": "approveRewards(uint256)", +"a77b2e37": "Coin()", +"a77b4d8b": "setBaseCurrency(address,bool)", +"a77b6efb": "mintCoins(uint256)", +"a77beea1": "transfer(address,address,address,address[],uint256)", +"a77c1b08": "checkTransfer(address)", +"a77c61f2": "cobinhoodUserIDs(address)", +"a77ee38c": "promoTypeNum()", +"a77f7c8c": "whitelistMany(address[])", +"a78036b7": "clearDeposits(address,uint256)", +"a7807b84": "transferByRelatedToken(address,address,uint256)", +"a78082aa": "TokenSafe(address)", +"a78085ef": "lockMainSaleToken()", +"a780b2f3": "parseRate(string)", +"a7811732": "totalERC20Contracts(uint256)", +"a78118a4": "onlyDevs()", +"a781384e": "TrivialToken(string,string,uint256,uint256,address,address,uint256,uint256,uint256,bytes32)", +"a7819ad7": "_challengePart2(uint256,uint256,uint256)", +"a783a4f1": "get_hash(uint16)", +"a78488af": "startTokenRaffle(uint256,address,uint256,bool)", +"a78488e1": "WSTO()", +"a784d969": "setAssetsCertified(uint256)", +"a784ef22": "_calculateScore(uint256,uint256,uint256,uint256)", +"a7859131": "m_initialSettingsSet()", +"a785b96a": "TDEStartDate()", +"a786c1d2": "BONUS_DAY1_DURATION()", +"a7878831": "splitTokens()", +"a78810f8": "subscribeMe(uint8,bytes32)", +"a788aa07": "test_threeValidEqUint(int256)", +"a789e29c": "getContributorData(address)", +"a78a43c1": "getAllTeamScores()", +"a78a651a": "processContribution(address)", +"a78adf57": "UserAddressRegistry()", +"a78adfec": "setButtonParams(uint256,uint256,uint32,uint32)", +"a78b3d96": "addSubOwner(address,address)", +"a78bcf6e": "changeBankroll(address)", +"a78c5476": "SaleStarted(uint256)", +"a78c81ea": "changInviteAmountLimit(uint256)", +"a78cb567": "getCosignerFee(uint256)", +"a78cdfed": "gana()", +"a78d4316": "_near(uint256)", +"a78db39c": "blockedUntil()", +"a78deefa": "isGameEnd()", +"a78e635c": "XToken()", +"a78e887c": "calculatePurchaseReturn(uint256,uint256,uint16,uint256)", +"a78f0489": "secondTierDiscountUpperLimitEther()", +"a78f16ba": "setWhitelistedStatusInternal(address,address,uint256)", +"a79094b7": "changePolyRegisterationFee(uint256)", +"a7909e47": "DAppReady()", +"a791c665": "WojakCoin()", +"a791da46": "buyXwithdrawForContract(address,uint256,uint256)", +"a7932d20": "marketToken2019()", +"a7944579": "sit()", +"a79726b7": "tokenSpin(uint256)", +"a7972a80": "MoviePass(string,string,uint8,uint256)", +"a7977ffc": "isWhiteListedAndAffiliate(address)", +"a7985ae4": "SNAILMASTER_INCREASE()", +"a7987b58": "LendroidSupportToken()", +"a799464c": "isMyInfra(uint256)", +"a7996adc": "_safePaymentActionAtIco(uint256,address,uint256)", +"a799de7e": "anotherTransferTo(address,uint256)", +"a79a3c30": "teamAlloacting()", +"a79a3cee": "isConfirmed()", +"a79a416d": "SetCommissionRate(uint256)", +"a79ac3be": "ReleaseTokenForReserveFund()", +"a79b2752": "validate(address[4],address,uint256[12],uint256,bytes,uint256)", +"a79c7faf": "test_threeInvalidEqBytes()", +"a79ca634": "_setSubnodeOwner(bytes32,address)", +"a79dad23": "GetBetNums(uint256)", +"a79deb4f": "acceptTradeDeal()", +"a79ec95a": "oneEtherIsHowMuchFST()", +"a79f26dc": "force()", +"a79f4773": "buy_ETH(uint256,bytes8)", +"a79f7412": "withdrawCoinExt(uint256)", +"a79fdbb4": "presalePaused()", +"a7a066b7": "AxtrustICO(uint256)", +"a7a0d537": "something()", +"a7a1019d": "tixPresale()", +"a7a1e0a7": "auditNTVUText(uint8,uint8,string)", +"a7a1ed72": "pass()", +"a7a260cf": "TokenDeployed(uint256)", +"a7a2720e": "processFunding(address,uint256)", +"a7a38f0b": "history(uint256)", +"a7a39daa": "getBrickIdsByBuilder(address)", +"a7a3ba54": "SponsorMusic(uint256,uint256,address)", +"a7a44eba": "getFirstUnionIds(bytes32)", +"a7a5e00b": "updateCustomer(address)", +"a7a604b2": "mintUptoCap()", +"a7a60580": "MeteorToken()", +"a7a62aee": "init(address,uint256,address,string,string)", +"a7a7be1a": "newWriteAddr()", +"a7a8add2": "setSaleAgentContract(address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"a7a957ff": "getSaleDayNow()", +"a7aac32d": "withdrawAdvisorTokens()", +"a7aad3db": "voterReward(address,uint256,uint256)", +"a7aaf58c": "getPollID(uint256,uint256)", +"a7ab6961": "withdrawalDelay()", +"a7abb8cc": "BM_MasterClass_Reserved()", +"a7abc124": "activate(bool,bool)", +"a7ace55d": "incrementDivisor()", +"a7ae9756": "startNewStakingInterval(uint256,uint256)", +"a7af0b99": "Nerdearla()", +"a7afc1ca": "deactivateCurrentRound()", +"a7b0793b": "setAdvisorFundWallet(address,address,uint256)", +"a7b07acc": "AssetSplit(address,address,address,address)", +"a7b2042f": "phasePublicSale3_From()", +"a7b2bfc7": "multyTransfer(address[],uint256[])", +"a7b2d313": "LogAnswerReveal(bytes32,address,bytes32,bytes32,uint256,uint256)", +"a7b2d4cb": "remove(int256,address)", +"a7b2fc00": "updateTokenNameSymbolAddress(string,string,address)", +"a7b314ac": "stepProfit()", +"a7b3a6fc": "Mine(address,uint256,uint40)", +"a7b4b60f": "erc223Fallback(address,uint256,bytes)", +"a7b69ed9": "PostLicense()", +"a7b71dca": "getJobValue(bytes16,address,address,uint256,uint256)", +"a7b7eefb": "JustmakeToken()", +"a7b7f1d4": "getLatestUnitRaffleInfo()", +"a7b83225": "AgriChainSeal()", +"a7b86824": "lockup(address,uint256)", +"a7b88506": "canRead(address,bytes32)", +"a7b8c868": "startCrowdsaleTime()", +"a7b91780": "getTokensSale()", +"a7b94972": "newBen(address)", +"a7ba0cb5": "createChatRoom(bytes32)", +"a7ba44c3": "isFinalizerSane()", +"a7ba9fb1": "epsilon()", +"a7bb1cf4": "_setRarityBonusValue20(uint256)", +"a7bb5803": "splitSignature(bytes)", +"a7bb959a": "Apen()", +"a7bc2efd": "transferGroupIntertrade(uint256,address)", +"a7bc3cb9": "SafeLocked(uint256)", +"a7bc8c46": "howManyVoters(bytes32)", +"a7bd4791": "MakeItWeinSec()", +"a7bda7e3": "extractNameFromDataET(bytes)", +"a7bdf16e": "isValidBump(uint16[3],uint16[3])", +"a7be2648": "unTrackToken(address,uint16)", +"a7be85c6": "AUTHOR()", +"a7bf1b6c": "purchase(uint256,uint256,address,address)", +"a7bf1cbf": "unfreezeTransfersSince(string)", +"a7bf8921": "freezeContract(bool,uint8[],bytes32[],bytes32[])", +"a7c19841": "preSaleInit()", +"a7c1a708": "LogGameStarted(uint256)", +"a7c1a75b": "maxAuditDuration()", +"a7c1abf1": "decodeMessage(string)", +"a7c1e629": "cancelTransfer(address)", +"a7c25c5a": "setMileagePointPrice(uint256)", +"a7c368c0": "pushBuyerList(address)", +"a7c3ce60": "distributeRegisterFee(uint256,uint256,bytes32,uint8)", +"a7c3d71b": "icoStartTime()", +"a7c41e28": "zennitToken()", +"a7c4abdb": "calculateTokenAmount(uint256,uint256,uint256)", +"a7c5052e": "buildDSTokenRegistry()", +"a7c591c4": "setBest(uint8)", +"a7c5c2a2": "BirthFee()", +"a7c6c83a": "getMystr()", +"a7c6f483": "exchangeRateAuth()", +"a7c742c9": "CommissionEarnedEvent(address,uint256)", +"a7c7d2a0": "airdropValue()", +"a7c7e2a0": "assignOwner(address,address)", +"a7c7fdeb": "transferTokensToOwner()", +"a7c83514": "inflationChange()", +"a7c8e68a": "sealManualMigration(bool)", +"a7c961d5": "bonussale_Cap()", +"a7c9771b": "getVATDeductions(uint256,uint8,uint256,uint8)", +"a7c98748": "test3_searchNext()", +"a7c99f2c": "changeCompetitionAddress(address)", +"a7c9d92f": "HammBones()", +"a7ca3010": "getWithdrawTransactionCount(bool,bool)", +"a7cac846": "weights(address)", +"a7cadc50": "Dagelan()", +"a7cb6edc": "tokenRestriction(address,bool)", +"a7cbe06f": "MaxFunds(address,uint256,uint256)", +"a7cc440e": "getCityResourceRichness(uint256)", +"a7cc90e9": "calculateCounters(uint256,uint256,uint256,uint256)", +"a7cd21ea": "transferPrivilege(string,address)", +"a7cd674e": "whitelist_enable()", +"a7cdc2ad": "getAddressExist(address)", +"a7cebd4d": "createActivity(uint16,uint16,uint128,uint64,uint64)", +"a7cec1d2": "DataStorage()", +"a7cf7edd": "mimul(uint64,uint64)", +"a7cfe365": "addAuction(uint40,uint256)", +"a7d0b6ce": "payoutForResult(uint256)", +"a7d0c490": "keybuy(uint256)", +"a7d0f8af": "callStoWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"a7d27056": "readMessage(uint256)", +"a7d2b73f": "SharkProxy()", +"a7d2d2ab": "AngelCoin()", +"a7d30400": "window1TokenExchangeRate()", +"a7d4549c": "test(uint8,bytes32,bytes32,address,address)", +"a7d4bbe6": "modexp(uint256,uint256,uint256)", +"a7d4e89d": "migrationOperator()", +"a7d512d6": "getCertificateInfoByNo(address,uint8)", +"a7d55b76": "tryDismissRoom(uint256)", +"a7d5d4fa": "approveAddToken()", +"a7d68896": "updateCap(uint256)", +"a7d77305": "chargeMonthlyRate(bytes32,address)", +"a7d8287d": "MyFreezeContract(address)", +"a7d82b00": "setGoldCertVerifier(string)", +"a7d89168": "getLockedAmount(address,address)", +"a7da611f": "commission_mom()", +"a7da74f8": "addQuoter(address)", +"a7daf6dd": "eligibleForDividence(address)", +"a7dbb402": "changeAddress(string,address)", +"a7dbfcaa": "setCostOfToken(uint256)", +"a7dc0aee": "test_threeValidEqString()", +"a7dd7a59": "unchainedMultisigVersionMinor()", +"a7dd7e37": "distrust()", +"a7de83e6": "generate(address,address)", +"a7de9c63": "quantityFactor()", +"a7dea7e4": "getMyPastLosses(address)", +"a7dee615": "_NewListingWhitelisted(bytes32)", +"a7dfc420": "investorAmountTokensToBuy(address)", +"a7dfc874": "unregister(bytes,address,uint256,bytes)", +"a7e03dcb": "mintPerBlock()", +"a7e1a8ee": "setAttributeType(uint256,string)", +"a7e1b516": "unban_user(address)", +"a7e1c4ac": "YunbeiToken(uint256,string,string)", +"a7e1f6a2": "doubleDown()", +"a7e21e80": "hold(address)", +"a7e25683": "testShortOutput()", +"a7e2cca9": "setFinished(bool)", +"a7e328d4": "setSomeValues()", +"a7e33a0c": "sendChatMessage(string)", +"a7e350f7": "payOutGovernors()", +"a7e45699": "buyWildcardToken()", +"a7e47920": "createItems(uint256[],address[])", +"a7e48375": "MikadoToken()", +"a7e53987": "EthCapInWei()", +"a7e5a338": "HIDERA(uint256,string,string,uint256)", +"a7e5cb3e": "getWhoBet(address,uint256,uint256)", +"a7e5f1bc": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256,uint256)", +"a7e5f3c5": "likeBlock(uint256)", +"a7e74377": "_preValidateTransaction(address,uint256)", +"a7e74ab7": "setMx(bytes32,address)", +"a7e7d2f4": "BBXCoin()", +"a7e81d22": "lastBlock_f5Hash_uint256()", +"a7e86daa": "executeBidFor(address,uint256,uint256,uint256)", +"a7e92fb5": "unagree()", +"a7e93e87": "retractLatestRevision(bytes20)", +"a7e94542": "approve(address,uint32)", +"a7ea48cf": "CoinBroToken()", +"a7ead565": "FiO()", +"a7eb3848": "transferRewardWithoutFee(address,uint256)", +"a7eb685b": "mintFeeTokens(uint256)", +"a7eb891f": "isClientPaidUp(address)", +"a7ebc5bd": "privilegedAccountStatus(address)", +"a7ec619f": "getCurrentStageDiscount()", +"a7ecce5f": "removeQuitAccount(address)", +"a7ecd0ad": "getSpecialAddresses()", +"a7ee323e": "VULCAN_PROMETHEUS_FTL_SPEED()", +"a7eea700": "sale2Started()", +"a7eeea37": "NewContributor(uint256)", +"a7ef4329": "getHelloWorld()", +"a7f01e4d": "getLockedFunds(address)", +"a7f07011": "tradeExecutor()", +"a7f0b3de": "genesis()", +"a7f17bd5": "Bodcoin()", +"a7f18b5a": "setPOOL_edit_14(string)", +"a7f1b77a": "addReferralDeposit(address,uint256)", +"a7f2cc54": "feeCalculated()", +"a7f2f4e2": "getMembershipStatus(address)", +"a7f31e0a": "getCelda(uint256)", +"a7f32edd": "OfflineCastleSold(uint256,address,uint256)", +"a7f365ae": "setLockoutPeriod(uint256)", +"a7f36c2e": "setProviderPriv(uint256,bool)", +"a7f39d8a": "tokenSaleWeiGoal()", +"a7f3e70f": "setSaleTimes(uint256,uint256)", +"a7f43779": "remove()", +"a7f43acd": "reserveContract()", +"a7f49e1d": "maximumBuyBackAmountInCents()", +"a7f58c24": "computeInitialPrice(uint8)", +"a7f5eccc": "previousReturnValue()", +"a7f738df": "getRoundAheadAmount(uint256)", +"a7f7417d": "preICOFreeBonusPercent()", +"a7f81863": "thirty_wallet()", +"a7f86c63": "_removeRoomNight(address,uint256)", +"a7f879ea": "teleportToken()", +"a7f8a53c": "ownerSetControllerAddress(address)", +"a7f8fbd4": "cancel_contract()", +"a7f95a92": "HardcodedCrowdsale(address)", +"a7f9801b": "TakedFunds()", +"a7f987ee": "getDebugNow()", +"a7f9df38": "investWithBitcoin(address,uint256)", +"a7f9fe72": "getAllRecords()", +"a7fab81a": "impl_redeem(address,uint256)", +"a7fb95f6": "changeTeamName(uint256,string)", +"a7fbe7ad": "safeLastDate()", +"a7fbed9e": "getCurrentPhaseIndex()", +"a7fc7a07": "addController(address)", +"a7fca953": "getSrcQty(address,address,uint256,uint256)", +"a7fdb4f5": "finishedSale()", +"a7ff0a4e": "TransferTokens()", +"a7ff2373": "multiSendFrom(address,address[],uint256[])", +"a7ff7a40": "MANACrowdsale()", +"a7ffb2db": "getMaximumRound(uint256)", +"a7ffe560": "batchSpawnAsset(address,uint256[],uint256[],uint256)", +"a8006dfe": "exec_admin()", +"a801ea25": "launchLotto()", +"a801fd63": "setNewValue()", +"a802257d": "addr_Saddlery()", +"a8026912": "setSource(address)", +"a802afa1": "minOfArray(uint256[])", +"a80325bd": "toB32(bytes)", +"a804903a": "FOUNDER2()", +"a80498f1": "AdvancedDeposit(bytes32,uint256)", +"a804cc7d": "setUser(address,address,string,string,bool,bool,bool)", +"a804da18": "cliffReleasePercentage()", +"a804fcb4": "COMMUNITY_PERCENT()", +"a805bfef": "addInvestors(address[],uint256[],uint256[],address[])", +"a8074b55": "bundlingDenied()", +"a807598e": "incluirUsuario(address)", +"a8077951": "updateLastBuyKeysPIDs(uint256,uint256)", +"a807ea0f": "newMostInviteTimes_()", +"a8083b74": "setContributionSettings(uint256,uint256,uint256)", +"a8084938": "CryptoCupToken()", +"a80955b1": "setFoundersTokenAllocation(uint256)", +"a80a60fb": "saleFirstPresaleEndBlock()", +"a80a9e40": "setActive(address,address,uint256)", +"a80acfd3": "DisableSelling()", +"a80aee59": "isActiveDelegate()", +"a80bf3e6": "tokenLocker()", +"a80bffb6": "tokensOfSell()", +"a80c609e": "tokenImbalanceData(address,uint256)", +"a80c89d2": "RollbackedContract(uint256,address,address)", +"a80d2fb4": "getPeerMessageCount(address,address)", +"a80d4e9a": "EtherAuction(uint256)", +"a80da0f1": "SpursvsWarriors419()", +"a80da34a": "propertyAreaSqFtOf(uint256)", +"a80db9fb": "nextStealTimestamp()", +"a80dca57": "recharge(string)", +"a80de5ea": "lottery(uint8)", +"a80e3659": "testDisputedReadValid()", +"a80e6c01": "getClassPlayers(uint256,uint256,uint256)", +"a80f54ca": "transferToExchange(address,uint256)", +"a80f9e2d": "RankingBallGoldCustomToken(address)", +"a80fe377": "Goahead()", +"a8103621": "dividendsPayed()", +"a810385e": "setBla(string)", +"a8103c80": "SSHToken(uint256,string,uint8,string)", +"a81077a7": "usersRegistered()", +"a810a54c": "withdraw(bool)", +"a810bc13": "ETCharPresale_v2(address)", +"a8132a46": "hardCapInToken()", +"a8140c95": "OceanScapeCoin(uint256,string,string)", +"a8150e72": "removeOrderOfVendor(address,uint256)", +"a8154e17": "teamUnfreezeDate()", +"a815a85d": "getItemCounts()", +"a815ff15": "set(string,address)", +"a8164a84": "ThxMsg(address,string)", +"a816899e": "icoBalances(address)", +"a817163b": "BusTokenLock(address,address)", +"a817ccac": "threeParams()", +"a817d2de": "extract20(bytes32)", +"a817f668": "findPlayer(address)", +"a8181851": "dapCarToken()", +"a8182cd3": "serverCancelActiveGame(address,uint256)", +"a818a222": "TokenAdded(address,uint256,uint256)", +"a819515d": "updateParentTotalTheoreticalSupply()", +"a819819b": "sweepDeityCommission(uint256)", +"a819c36c": "ClapToken()", +"a81a3e4d": "hasOpenApplication(address)", +"a81afa57": "sellSpecialTokens(address,uint256)", +"a81c3bdf": "ethFundDeposit()", +"a81c804e": "addToWhitelistBulk(address[])", +"a81d18d7": "setTokenMeta(uint256[],uint256[],uint256[])", +"a81d3424": "getFrozenToken(address)", +"a81daf29": "ETHernitymining(address)", +"a81dfde0": "CBT()", +"a8201894": "getCurrAuctionPriceAuctionID(uint256)", +"a820b44d": "iterateStart()", +"a820d02e": "MarketingDevelopmentAmount()", +"a8222adf": "sellerNumOpenDeals()", +"a82375d1": "ToGoConcert(uint256,string,string)", +"a8239d0b": "getPrice(string,address)", +"a8243ff4": "getactlen()", +"a824bd9a": "autoSell(address,uint256)", +"a824e636": "walletSend(address,uint256,address)", +"a82524b2": "presaleStartTime()", +"a8267482": "msp()", +"a826b422": "addCbAddress(address,bytes1,address,bytes)", +"a826ee78": "submitResult(uint256,uint256[])", +"a8276d97": "SetcashOutTime(uint256)", +"a827ef0a": "EvLoveItemAdded(bytes32,address,uint256,uint256,string,string)", +"a828251e": "voteProposal(bytes32,address,address,uint256,bytes32,string,bytes)", +"a8287f79": "addProduct(address,uint256,string,string,string)", +"a828eec5": "pureFn(uint256)", +"a828f441": "redeemFromEscrow(uint64)", +"a82970d7": "SetWorldData(uint256,uint256,uint256,uint256,uint256)", +"a829c3d1": "requestArbitration(bytes32,uint256)", +"a829d8ec": "VUP_TOKEN_SUPPLY_TIER4()", +"a82aa270": "updatePick(uint256,uint256)", +"a82b3640": "getDrawP()", +"a82ba2d5": "renounceKeeper()", +"a82cb091": "BuyDoubler()", +"a82d1d1a": "TwinkleToken()", +"a82d4ac1": "Crowdfunding(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"a82e0dcc": "theCyberMessage(string)", +"a82e1374": "changePublicallocation(uint256)", +"a82e3179": "jingleContract()", +"a82fc94f": "issueTokensPresale(address[])", +"a8308665": "add5NewTraits(string,string,string,string,string,bool)", +"a8311aa8": "getParties()", +"a831751d": "addPartOwner(address)", +"a8319481": "cancelRole(address,address)", +"a831f0bb": "compareStringValue(bytes32,bytes32,bytes1)", +"a8321459": "topUpAvailable()", +"a8324a3f": "batchRestoreWebGift(address[])", +"a832d7df": "newSell(uint32,address,uint256)", +"a83332d5": "TokeniVOX(uint256,string,string)", +"a833386b": "toBytes32()", +"a833c7ab": "incentivisationAllocation()", +"a83467a1": "dividendcommission()", +"a8347f6a": "maxCrowdsaleCap()", +"a834c43d": "buyAccess(string)", +"a83500e0": "check_redeemed(string)", +"a8351c03": "pauseCrowdsale()", +"a83627de": "updatePeriod()", +"a8366fef": "TOKEN_STANDARD_ERC20()", +"a8370492": "setTrFee(uint256)", +"a83723f3": "runRotateTime(uint256[],bytes32,bytes32)", +"a8372511": "STCoin(uint256,string,string)", +"a837aeb2": "AdminStartDraw(string,bytes32)", +"a837c35e": "createAmountFromEXORForAddress(uint256,address,address)", +"a8385231": "sendTokensToAddress(uint256,address)", +"a839fc56": "setGoalAchieved(bool)", +"a83b1e21": "reply(string,bytes32)", +"a83cf7fe": "RefundVault(address)", +"a83e1d10": "getUserQuoteIds(address)", +"a83f9429": "extend1Week()", +"a840617f": "LogKycRefused(address,uint256)", +"a840d2a8": "GTO()", +"a8418d01": "BECToken(uint256,string,string)", +"a841da4b": "lockJackpots()", +"a841f1eb": "handleFunds(address,address,uint256)", +"a842375e": "refundToken(address)", +"a842f0f2": "upgradableContractAddress()", +"a843c51f": "transferContractOwnership(address)", +"a843c97f": "attack(uint256,uint256,uint256[])", +"a844545d": "completeMinting()", +"a84524a4": "getDetailedPollResults(uint256,uint256)", +"a84694c8": "permissionIndexOf(uint8,address)", +"a8469ce9": "MINING_REWARD()", +"a846c2fd": "payback(uint256)", +"a846fa37": "waitQuery()", +"a8474a30": "_computeRunes(uint256)", +"a847a1b3": "StarbasePresaleWallet(address[],uint256,uint256)", +"a847a71c": "isOnTrading(uint64)", +"a8484938": "doApprove(address,uint256)", +"a848e2ec": "tokenSupportSoftLimit()", +"a8492f46": "pickTicket(bytes4)", +"a84950df": "calculateTimeBonuses(uint256)", +"a8496426": "getOrderId()", +"a849cef8": "minDeposits(uint256)", +"a84a70aa": "lockedTime(uint256)", +"a84b9de0": "dequeueDouble()", +"a84c5330": "createNewRevision(bytes20,bytes)", +"a84c6362": "ICO_CAP4()", +"a84d073a": "interfaceMintTokens(address,uint256)", +"a84dd3a6": "teamWallet_3()", +"a84e5f40": "CRYPTONEREUM()", +"a84eb999": "removeAddresses(address[])", +"a84ebb58": "setVM(bytes32[10],uint256[4])", +"a84f3e5a": "overdraftUnvested()", +"a84f763b": "TokenTransferred(uint256,address,address)", +"a84fa137": "transferToRound(uint256)", +"a8514113": "_emitCategoryEvaluated(address,address,uint8,uint256,uint256)", +"a85165e0": "checkSubPrice(bytes32)", +"a8516d21": "_withdrawTokens(address,uint256)", +"a851e2f6": "LogCreateNET(address,uint256)", +"a852995d": "bonus1StartETH()", +"a852d5ba": "emergency_withdraw(address)", +"a853d2cd": "getUserByUsername(bytes20)", +"a8540daa": "getSellPriceDecimals()", +"a8542f66": "ANY()", +"a8545830": "transact_token1(address,address,uint256)", +"a855d4ce": "uintStorage(bytes32)", +"a8565523": "AquaPay(string,uint256,uint8,string)", +"a8567a1c": "bidderUpdateBid()", +"a85688d2": "_rewardPoS()", +"a856b9c2": "lastRandom()", +"a85717d3": "open(bool)", +"a8575102": "getDnasCount()", +"a8590135": "issuanceEnabled()", +"a85923aa": "ZibPay()", +"a859a092": "minToken()", +"a859eb81": "BONUS_TIER_4_LIMIT()", +"a859fffe": "SweDexDividends()", +"a85a726d": "NewUser()", +"a85aba19": "setPreURI(string)", +"a85ade82": "FOUNDERS_VESTING_DURATION()", +"a85adeab": "endTimestamp()", +"a85b13b9": "claimBitNauticTokens()", +"a85c06b7": "_packRaceData(uint256,uint256,uint256,uint256)", +"a85d11b3": "verifyCode(bytes32,uint256)", +"a85d3179": "getMiningRate(address)", +"a85e07e2": "getMesa(uint256,uint256,uint256)", +"a85e59e4": "transferFrom(bytes,address,address,uint256)", +"a85ef579": "appendDarknode(address,address,uint256,bytes,uint256,uint256)", +"a85f3761": "repayments(uint256)", +"a85f5c2e": "tradingData()", +"a85ffd1a": "setAutoDistributionViaETHContributions(bool,bool)", +"a85ffe4f": "manualSell(address,uint256)", +"a860bfa2": "BRCToken()", +"a860d119": "communityTokenHolder()", +"a861baea": "presale_address()", +"a861e16f": "setEmployeeSalary(address,uint256,uint256)", +"a861f99a": "getClientPaidUpTo(address)", +"a8627c15": "LINICOIN()", +"a863f595": "Btczocker(uint256,string,uint8,string)", +"a86416e2": "CROWDSALE_PRICE()", +"a8644cd5": "contract_eth_value_bonus()", +"a86477ad": "offeringEnabled()", +"a8648aad": "TokenFunctions()", +"a8659216": "setInitialLockinDays(uint256)", +"a8660a78": "vestingStartTime()", +"a866665a": "ConsoToken()", +"a8670711": "isCloseSale()", +"a8681169": "withdrawWhiteList(uint256)", +"a868378b": "returnOfIncome(address,uint256)", +"a8683df7": "TokenMyUnicoin(uint256,string,string)", +"a868cd6f": "LogPolicyManualPayout(uint256,bytes32)", +"a868ec85": "setName(uint256,uint256)", +"a86abb3d": "allFilmsInfo(uint256)", +"a86b73f0": "toByte(uint8)", +"a86bc181": "EXPECTED_END()", +"a86c938b": "balanceOf(bytes8,address)", +"a86e3576": "symbol(address)", +"a86ed5e4": "thirdMaxAmount()", +"a86ee746": "restoreCutieToAddress(uint40,address)", +"a86f7212": "_allocatePlayerTokensTo(address,uint256)", +"a870a0a5": "getChannelClosingSettler(bytes32)", +"a870be8a": "setVendingStepValues(uint256,uint256,uint256)", +"a870ddc2": "moveTokensFromSaleToCirculating(address,uint256)", +"a871da91": "SHORT()", +"a871ffdc": "Getsafe(uint256)", +"a87253c7": "getlastuser()", +"a873b155": "GetMinimumBet()", +"a8740a71": "getCreditLedger(uint256)", +"a8754caa": "purchaserMapping(address)", +"a8756337": "getCurrentValidatorsLengthWithoutMoC()", +"a87595ce": "buynowPrice()", +"a875b2ed": "setIsBatch(bool)", +"a87607af": "Show_address_for_option_B()", +"a8762854": "numberInRaffle()", +"a8766017": "ARXToken()", +"a876a8a0": "_round()", +"a877b557": "TransferMinimumFeeExecuted(uint256,address,uint8)", +"a877db9f": "none()", +"a878ad27": "createTokenToOperation()", +"a878aee6": "withdrawAllTokens(address)", +"a8790533": "distribution(address[],address,uint256,uint256,uint256,uint256,uint256)", +"a879af45": "oldTokenBalance(address)", +"a879fcbb": "assetInfo(uint256)", +"a87af57b": "setTokenForSale(uint256,uint256,address,bool)", +"a87b1cd2": "whitelistedBeforeActivation(address)", +"a87b73c7": "StageOpened(uint256)", +"a87ced35": "startDispute(bytes32,address,int256)", +"a87d2321": "Gummy()", +"a87d8b6b": "walkClientOrders(address,uint128,uint128)", +"a87d942c": "getCount()", +"a87de9cc": "ADD(uint256,uint256)", +"a87e0c33": "newAgon(uint64,uint64)", +"a87e5d3f": "setPriceUpdateFrequency(uint256)", +"a87e7552": "isValid(bytes,bytes)", +"a87e8aad": "getMyCat()", +"a87ebcb5": "setJackpotMinimumAmount(uint256)", +"a87f32a2": "ownFiles(string,string,string)", +"a87f84fc": "updatePersonLocation(uint256,string)", +"a87ffd1d": "GenesisInitialSupply(address,address)", +"a880319d": "addToken(address,string,string,uint8,bytes,bytes)", +"a880531f": "getOraclizeCbAddress()", +"a8817403": "addFamedStar(string,uint256,uint256)", +"a881f85e": "clearTokenSale(uint256)", +"a8825650": "slice(bytes32[],uint256,uint256)", +"a8826602": "getAllCellIds()", +"a882d49f": "replaceMultisig(address)", +"a8834aac": "getPointer(uint8)", +"a8836844": "returnPayees()", +"a883aab3": "GlobalAmountCapHard()", +"a883b0c4": "changeRate(uint256,uint256)", +"a883fb90": "getPendingVersion()", +"a884a248": "getFill(bytes32)", +"a885508a": "removePermissionManager(address,bytes32)", +"a885dab6": "getTokensPerDay(uint256)", +"a8862fcc": "isEscaping(uint32,int256)", +"a8865bda": "masternodeIsValid(address)", +"a886d66f": "crowdsaleList(uint256)", +"a8870d6f": "mintingDataUpdatedAtBlock()", +"a88775e0": "rememberOldestBlock()", +"a887d816": "checkTransferRequirements(address,uint256)", +"a888e4c9": "releaseSingleAm()", +"a8893a6e": "getNumOfSalesWithSameId(bytes16)", +"a88b2562": "AZLTEST()", +"a88b61aa": "isIncreasedEnough(address)", +"a88be96b": "RESERVE_EXCHANGE_RATE()", +"a88c0a9f": "LAMP()", +"a88c5ef7": "NextPayout()", +"a88c906c": "_buyUninitializedPixelBlock(uint256,uint256,uint256,bytes32)", +"a88d1902": "get_asset_count()", +"a88e34cb": "setERC20address(address)", +"a88ec6fa": "showUnpaidDepositPercent(address)", +"a88ef2d3": "CarlosToken()", +"a88fa4b4": "updateStartTimeManually(uint256)", +"a88fe42d": "setPrices(uint256,uint256,uint256)", +"a88fe73a": "discountValue10()", +"a89004c5": "modifyQuanticCloudIOTData(uint256,uint256)", +"a89026a3": "teamProfitAddress()", +"a890b7d9": "finalize(address,bool)", +"a890d257": "IsThisPrivate()", +"a8915c7e": "periodPreITO_weiPerToken()", +"a89171e3": "checkHasilBet(address)", +"a89196a6": "eraExists(bytes32)", +"a891af67": "megaCandy()", +"a891fdc3": "earlybirdEnded()", +"a8928b45": "withdraw_internal(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[4])", +"a8929183": "LinkyexToken(address,address)", +"a894878d": "createPromoMeme(address,uint256,string,uint256)", +"a8967557": "isPresaleClosed()", +"a896d92d": "isRegularAddress(address)", +"a8977041": "Plenum(uint8,uint256)", +"a8978434": "softResolveAnswer(uint256)", +"a8986327": "minTokenForSP()", +"a899e615": "raiseRatio()", +"a899ef57": "parentSnapshotId()", +"a89a4f09": "creatorBalanceChecker()", +"a89acca4": "setCrowdsaleDates(uint256,uint256)", +"a89ae4ba": "oracleAddress()", +"a89c5be0": "MAX_TOTAL_TOKEN_AMOUNT()", +"a89c8c5e": "setTokenAddresses(address,address)", +"a89cdad9": "nextSnapshotTime()", +"a89d1eb9": "foobarToken()", +"a89f173c": "setUint(int256,uint256,uint8,uint16,uint32,uint256)", +"a89f5f85": "cmp(uint256,uint256,bool)", +"a89fb977": "investorDeposited(address,address)", +"a8a01c3e": "cvcOwner()", +"a8a1d27b": "firstRoundWMTokensLimit()", +"a8a403df": "MaptPresaleToken(address,address)", +"a8a4bf11": "startNewAuction(uint64,uint64,uint64,uint64)", +"a8a52747": "getRelayedSender(bytes16,uint8,uint128,uint8,bytes32,bytes32)", +"a8a54008": "registerAddress(address)", +"a8a5c22c": "refineCost()", +"a8a618e9": "draw_random_card(uint8)", +"a8a6e9df": "deliveryToken(uint256,uint256)", +"a8a77984": "StoreBytes(bytes)", +"a8a9aaa9": "TokenLayer(address,address)", +"a8aa1b31": "pair()", +"a8aa7e19": "buyTeamHandle(string)", +"a8aaa2a6": "StringMapper()", +"a8aae025": "delFromList(string,address[])", +"a8abe1fb": "getCET4ScoreById(uint32)", +"a8abe69a": "getTransactionIds(uint256,uint256,bool,bool)", +"a8ac262b": "phaseCrowdsale()", +"a8ae3745": "evaluateTokens(uint256,address)", +"a8ae3e4b": "getAllocatedTokenValue(address,address,address)", +"a8ae5eb8": "howManyTanks()", +"a8ae9046": "RFToken()", +"a8aeecd9": "getCostForBattleCards(uint256,uint256,uint256)", +"a8af232b": "withdrawTopUp()", +"a8af4ff5": "getRegistrationStatus(address)", +"a8af6e05": "emitHashSet(address,bytes32,bytes32)", +"a8af74f1": "calcTrackerCount(uint256)", +"a8afc538": "priceAtInitialAuction(uint256,uint256)", +"a8b0312c": "GameStatus(uint8,uint8,uint8,uint8)", +"a8b05162": "_changeTilePrice(uint8,uint256)", +"a8b151fd": "santaFundWallet()", +"a8b1895d": "leftLottery()", +"a8b25075": "allowTransfers(bool)", +"a8b26420": "isUInt64ValidIn64(uint64)", +"a8b31f04": "HHH3(string,string)", +"a8b322b6": "verifiedWinnersCount()", +"a8b3f80f": "getListTokens(address,uint256,uint256)", +"a8b415d2": "BanliangCoin()", +"a8b42f1f": "registerAsAnOpponent()", +"a8b50ee0": "getWinnningsLength()", +"a8b57f15": "VIPPurchase(address,address,uint256,uint256)", +"a8b60b93": "ackMsg(uint256,string)", +"a8b65043": "useChainlinkWithENS(address,bytes32)", +"a8b82c5b": "BaseAgriChainContract()", +"a8b86c4c": "ZchargeToken(uint256,string,string)", +"a8b8799f": "getRecordId(uint256)", +"a8b88268": "checkEarlybird(uint256)", +"a8b973a1": "bonusMultiplier()", +"a8b981d3": "FOURTH_RATE()", +"a8baa97d": "getPlayerDetectGroup(address)", +"a8bb76d4": "checkSettlement()", +"a8bbe5a4": "ERC20Voting(address)", +"a8bc362e": "KleynCoin()", +"a8bc3a6c": "whitelistedPlannedContributions()", +"a8bcbf3c": "payManagementBodyAmount(uint256)", +"a8bd9c32": "tokenIndexToApproved(uint256)", +"a8bda3e9": "getTRed(uint256,uint256,uint256)", +"a8beb2cf": "Lockup6m_20180801(address)", +"a8bfd57f": "getMinerOffset()", +"a8c0f15e": "addProperty(bytes32)", +"a8c10d78": "BetSubmission(uint256)", +"a8c12d7c": "PayMain(address)", +"a8c17ec2": "incremental(uint256)", +"a8c1a0b7": "BuyTokensExternal(address,string,uint72,uint88,uint88)", +"a8c23cb9": "isValid(bytes32,string,address,uint256,address)", +"a8c278a2": "verificationFee()", +"a8c2c4a7": "mainICOEndTime()", +"a8c310d5": "distributeAmounts(address[],uint256[])", +"a8c3d246": "LamaToken()", +"a8c3ec48": "oraclize_query(uint256,string,string[2])", +"a8c499a0": "lrcDeposited()", +"a8c4c8bc": "right64(uint256)", +"a8c65126": "determineNextRoundLength()", +"a8c69264": "setreleaseFinalizationDate(uint256)", +"a8c6e684": "addint16(int16,int16)", +"a8c89c5b": "payableEnabled()", +"a8c923e2": "BlockchainDevCoin()", +"a8c9f8ae": "unSoldTokens()", +"a8ca698b": "absSub(uint256,uint256)", +"a8cab3d1": "Frozen()", +"a8cb7b4f": "ownerRequired()", +"a8cbabb7": "blockCrowdsale()", +"a8cbb5de": "addMake(uint256)", +"a8ccef6c": "setClue2(string)", +"a8cd0a80": "getTest()", +"a8cdcebd": "exchangeIdsToOpenMakeOrderIds(uint256,address)", +"a8ce0e60": "QuestTestToken()", +"a8ce6b73": "calculateWithdraw(uint256,uint256,uint256,uint256)", +"a8d00e73": "dayLength()", +"a8d088bb": "getManagers()", +"a8d10fb8": "getOrgCount(string)", +"a8d18472": "estWolkToBurn(address,uint256)", +"a8d18bc0": "HireGoCrowdsale(uint256,address)", +"a8d1fcff": "cancelNewBallot()", +"a8d201ab": "removeNodeFromWhitelist(address)", +"a8d34ea5": "getCompte_10()", +"a8d3a63d": "pullEtherFromContractAfterICO()", +"a8d48709": "EARLYBIRD_PRICE_MULTIPLIER()", +"a8d49e64": "setWhitelistAdmin(address)", +"a8d4a03b": "heroes(uint256)", +"a8d4ee0f": "setOwnerExt()", +"a8d51f7e": "GiftToken(address)", +"a8d5308c": "bountymanager()", +"a8d5652e": "tokensPerTier()", +"a8d5efa3": "CATPayment(address,address,uint256)", +"a8d5fd65": "share()", +"a8d84b7c": "purchaseWithIndex(uint256,uint256)", +"a8d84fc3": "activeEnd()", +"a8d88127": "exists(int256,int256)", +"a8d8c7c8": "adddayeths(address,uint256)", +"a8d8e055": "checkAddressBatch(address[])", +"a8d95496": "getHighestPriceOwnerAt(uint256)", +"a8d95fb2": "claim(address,string)", +"a8d99045": "totalSellCardNumber()", +"a8d9a89a": "initialICOCap()", +"a8d9e8a3": "sendFeeIfAvailable()", +"a8da6873": "_fetchCreatedOrdersForPayer(address)", +"a8dab783": "isPASigned(uint32)", +"a8db1837": "test_updateAndGetPrice()", +"a8db2445": "setCompany(address)", +"a8dc824c": "unlockSupply()", +"a8dd07dc": "totalBonus()", +"a8ddefab": "withdrawNacNetfRe(uint256)", +"a8df3e69": "post(address,address,uint256,string)", +"a8df7894": "investDirect(address,uint256)", +"a8df80ad": "Hellob()", +"a8df99a9": "_emitSkillsSet(address,uint256,uint256,uint256)", +"a8e02ccb": "activeCall(address)", +"a8e04f34": "disableInitialStage()", +"a8e1903c": "RevokeTokens(address)", +"a8e1b53f": "AICoin(address,uint256)", +"a8e3371a": "eduCash(uint256,string,string)", +"a8e3a6b6": "communityTokensCap()", +"a8e48a7e": "PausableCrowdsaleImplUnpaused(uint256,uint256,uint256,address)", +"a8e496b9": "toDay(uint256)", +"a8e4fb90": "proposer()", +"a8e553f5": "decrypt(uint32[26],uint32[4])", +"a8e5740c": "setOgToken(address)", +"a8e5e219": "jobStatus(uint256)", +"a8e5e4aa": "approveERC20(address,address,uint256)", +"a8e6e77b": "addManyAdmins(address[])", +"a8e6ee52": "goldCertVerifier()", +"a8e6f9dc": "set_property_address(uint256,string,address,string,string,string)", +"a8e70dd3": "unblockMessagesFrom(address)", +"a8e81844": "GeneBTC()", +"a8e8f677": "maxDice()", +"a8e91396": "setICOPriceatDollar(uint256)", +"a8e9b249": "versionSelectors(bytes32,bytes32)", +"a8ea8554": "changeAmount()", +"a8eaefd7": "TotalFee(address[])", +"a8ec9ffb": "CrowdsaleStageStarted(uint256,uint256,uint256,uint256,uint256)", +"a8ecc7f1": "rbac()", +"a8ed1be5": "bts_address2()", +"a8eee036": "Locality(string)", +"a8ef4b66": "PERMISSIONMANAGER_KEY()", +"a8ef6edd": "testTrusting()", +"a8f02555": "DXF_Tokens()", +"a8f03616": "ownerTokenSharePct()", +"a8f06876": "CETToken(uint256,string,string)", +"a8f07dcc": "minimum_investment()", +"a8f0d3a7": "getArrayBytes32(bytes32)", +"a8f0e6e2": "sellPriceOf(uint256)", +"a8f0ebeb": "decreaseClaimsBalance(address,uint256)", +"a8f0fbbd": "helloToken()", +"a8f11eb9": "autoDistribute()", +"a8f2ba4c": "bet_win()", +"a8f2d63b": "isPublicTokenSaleRunning()", +"a8f436df": "startEvaluating()", +"a8f56600": "model_accuracy_criteria()", +"a8f5bbd9": "initiateUser()", +"a8f5c673": "savePepe(uint256)", +"a8f653fa": "finalizeStage()", +"a8f6c913": "erc20Contract()", +"a8f6d313": "minimumFundingUSD()", +"a8f6d84d": "returnPercentage()", +"a8f6f1f0": "randomGenerateMethod()", +"a8f7e238": "getAdminsForGame(uint256)", +"a8f7f82d": "ICO_start_future(uint256)", +"a8f8884d": "botIndexToApproved(uint256)", +"a8f899a0": "LogBuyForInvestor(address,uint256,string)", +"a8f8c6de": "getCollaborated(uint256)", +"a8f8e2ae": "testFailIfReverts()", +"a8f927e9": "getLanguage()", +"a8f92b52": "MindCoin(uint256,string,string)", +"a8f9868e": "getTotalBalanceFor(address)", +"a8fa14b0": "disableContractUpgradability()", +"a8fa2fc6": "getCurrentDevReward()", +"a8fa5682": "dnsRecord(bytes32,bytes32,uint16)", +"a8fa6e14": "setLastRewardTime(uint256,uint256)", +"a8fa8e52": "valuePerToken()", +"a8fac082": "claimMonthlyDemurrage(uint256)", +"a8faf6f0": "SmartAirdrop()", +"a8fc1a2a": "realDevReward()", +"a8fc32de": "sendDividends()", +"a8fca0fc": "toRtc(uint256)", +"a8fd1026": "gemPerEther()", +"a8fdb290": "EtherToken(uint256,string,string)", +"a8fdf903": "_underMintNextTokenId(uint256)", +"a8fe43ce": "getVotingProxy(uint32,int256)", +"a8fe5465": "PRE_SALE_15_BONUS_MIN()", +"a8feda51": "processRefunds()", +"a8ffa37f": "gameTokenResolution(uint256,address,uint256,address,uint256)", +"a8ffa9d9": "addCandidato(string)", +"a9011990": "getOneDepositRec(uint256)", +"a90135df": "pgoInternalReserveWallet()", +"a9014b0f": "isListed(uint64)", +"a9018896": "refreshScore(uint8,bytes32)", +"a901aaa0": "AirRewardmaxTotalSupply()", +"a901ce92": "founderTokenWithdrawnPhase4()", +"a9030162": "refundFish(address,uint256)", +"a903073e": "getOwnerTeam(address)", +"a9036b43": "Minter(address,uint256,uint256,uint256)", +"a903741a": "TEAM_BONUS()", +"a904cc53": "withdrawEtherBalance(uint256)", +"a904d13d": "setShifter(address,address)", +"a904e5c8": "TRM1BonusActive()", +"a9055b81": "makerRequiredKncStake(address)", +"a9059cbb": "transfer(address,uint256)", +"a905f4c0": "DUOLINGO(uint256,string,string,uint256)", +"a9061415": "getsellmoney(uint256)", +"a9064e29": "indexshow()", +"a906f837": "relocationSwitch(bool,address)", +"a9076f9e": "setBidding(bool)", +"a908f2e3": "Faucet(string,address)", +"a9092c11": "numChoices()", +"a909d7d3": "removeTokenEmission(uint256)", +"a909fc56": "mint(int256,address)", +"a90a4ac2": "addStruct1(string)", +"a90a6427": "setPaydayFrequencyInDays(uint8)", +"a90a6952": "EmissiveErc223Token(address,string,uint8,string,string)", +"a90a8eea": "getDaysInYear(uint16)", +"a90ae887": "claimPayment(uint256,uint256,bytes)", +"a90b5e62": "setTokensContractAddress(address)", +"a90d3cda": "totalContributionsBy(uint256,address)", +"a90e0608": "icoFinalized(uint256)", +"a90e09e2": "addWhitelisted()", +"a90e65a3": "MinorPrizePayout(address,uint256,uint8)", +"a90eb2b9": "sendFundsToNextCycle(uint256,uint256)", +"a90f8e9a": "referredBy(address)", +"a90fcfa0": "_generateName(string,string)", +"a90fd971": "minerRelaseTime()", +"a90fdf20": "test_bytes(bytes)", +"a910a531": "_approveTokenTransfer(address,address,uint256)", +"a9112140": "change(address,uint256,uint256)", +"a91202d3": "createUser(bytes32,bytes32)", +"a9120f6d": "release_by_manager()", +"a913c43f": "getLockedAmount_jiedians(address)", +"a913eb24": "_price_token_ICO2()", +"a9142808": "logFollowerTradingTx(bytes32)", +"a9147e22": "setIsCheckStage(bool)", +"a9157518": "add5NewStreetNames(string,string,string,string,string)", +"a9171d56": "purchaseCallbackOnAcceptAndDistribute(uint256,address[],uint256[])", +"a9188878": "setPrimordialPrices(uint256,uint256)", +"a918c09c": "supplyFuel(uint256)", +"a91a1080": "getCase(uint256)", +"a91a39ad": "havedCrowdCoin()", +"a91aae63": "NihilCoin(uint256,string,uint8,string)", +"a91abdcb": "referralCut()", +"a91b2e9f": "getProfit(uint256)", +"a91bc3cd": "nextMinimumTimeout()", +"a91be87f": "addEarlylist(address[],address)", +"a91c39a9": "setEnergyCost(uint256)", +"a91ce985": "createOrder(address[3],uint256[4])", +"a91cec21": "ineRexToken()", +"a91cfecf": "Foosball()", +"a91d6c65": "initLockedBalanceOf(address)", +"a91d99db": "whitelistAddressesPresale(address[])", +"a91ed8c6": "mintReserve(address)", +"a91ee0dc": "setRegistry(address)", +"a91f559d": "NeLunaCoin()", +"a91faadf": "JoshContract()", +"a91fbb99": "MonetoSale(address,address)", +"a91fc821": "Registry(address,address,address)", +"a9203f3c": "getFlower(uint256)", +"a92100cb": "loop()", +"a921ba7d": "totalBattleboards()", +"a9221706": "_transferAndCall(address,address,uint256,bytes)", +"a9225743": "_commitBallot(bytes32,uint256,uint256,bool)", +"a92259fc": "AVAILABLE_TOTAL_SUPPLY()", +"a923ebac": "unbindEthereumAddress(address,bytes32)", +"a923fc40": "setInfo(string,string)", +"a9240e32": "setEtherRatioForOwner(uint256)", +"a924d3ca": "getMangers()", +"a924ee60": "disableTokenMinting()", +"a9250212": "publicationCount(address)", +"a925252a": "acceptAuctionResult(address,uint256,string)", +"a925d85e": "Exchange(address,address)", +"a926819f": "disableWallet(address)", +"a927f46b": "Etherwow()", +"a9287619": "buyXaddr(uint256,address)", +"a9293efe": "calculateSeasonScore(address,int8)", +"a92950f6": "chainWith(uint256,uint256)", +"a9298848": "askForALoan(address,uint256,uint256)", +"a92aafb0": "paused_1()", +"a92ab316": "EIN()", +"a92c300a": "getBidData(uint256)", +"a92c3231": "stageNumber()", +"a92ca27d": "editionInfo(uint256)", +"a92d5367": "changeTournamentTaxAmt(uint8)", +"a92d6a48": "disableAuthentication()", +"a92ec661": "isAfterStartTime()", +"a92f0c80": "TokenVesting(uint256,uint256,uint256)", +"a92f0cb9": "withdrawFailedOldOwnerTransferAmount()", +"a92fcf9c": "addRecord(string,string,string,bytes32,int64)", +"a9321573": "addExcluded(address)", +"a9324192": "walletOut1()", +"a9328435": "getMinimeCheckpointsLengthSlot(address,uint256)", +"a932ed0d": "whitelistRemove(address)", +"a934dd0c": "getFeeAmount(uint256,uint256)", +"a936444a": "POWH33()", +"a936c203": "reLoadXid()", +"a937c28b": "authorisedInvestors()", +"a937f12b": "TidealToken(address)", +"a9390454": "DevvotePrefund(address,address)", +"a9393452": "getAuctions(uint32,uint32)", +"a9396a1b": "getStageInfo()", +"a93a77c1": "available_percentage()", +"a93b1a65": "_referrerTax(uint256,bool)", +"a93b5331": "totalFundingSupply()", +"a93c1286": "Y2CASH()", +"a93d7c72": "quickChange(address[],uint256,uint256)", +"a93deda4": "Philanthropy(address,string,uint256,uint256,uint256,uint256,uint256)", +"a93e0386": "preSaleBonus4Amount()", +"a93e2b49": "YBQ()", +"a93e4044": "getCountTokensByLottery(uint32)", +"a93e8701": "BetCanceled(address,uint256)", +"a93fd5f1": "organizer5()", +"a940565e": "haveIBeenNaughty(address)", +"a9405923": "getParent(address)", +"a9405f4f": "HashToFileName(string)", +"a940d013": "ether_profit()", +"a9414cc3": "getPositionsAndTokensCnt(uint256)", +"a941be3c": "internalBuy(address,uint256,bool)", +"a941c8d6": "calculateWinningEntries()", +"a941ff21": "getCampaignEndDateById(bytes32)", +"a942bf05": "dDeployCommunityBallot(bytes32,bytes32,bytes32,uint128)", +"a942de01": "createSetup(uint256,uint256,address[])", +"a9430dcb": "Shabu()", +"a94385a0": "donateFromWallet(uint256)", +"a94387a6": "raiseBuyOrderCreated(address,uint32,uint32,uint80,uint256,int160)", +"a943c21f": "getVotingResult(address)", +"a9445499": "ZperMainSale(address,uint256,uint256,uint256)", +"a944f15b": "createAuction(address,uint16,uint16,uint256,uint64,uint16,uint16,uint64,uint256)", +"a94510ca": "withdraw_badge()", +"a9457d9c": "whatIsCurrentCap()", +"a945c5c3": "totalInvestments(uint256)", +"a945f90f": "partnersWallet()", +"a9466a88": "getAllScripts(uint256)", +"a946d7bb": "setMedalsClaimed(uint16)", +"a9472396": "getClientReward(uint256)", +"a94834a1": "openGameRange(uint256,uint256)", +"a948d72d": "ZethrBankroll()", +"a9496e73": "timeBeforeJackpotReset()", +"a949c637": "addOwner(address,address,address)", +"a949f3af": "getMyLastCollectHour(uint32)", +"a94a06e8": "findRegularTime()", +"a94ab274": "corePay(uint256,uint256,uint256,string,uint256)", +"a94c33a6": "Auxilium()", +"a94c468d": "RemoveRank(uint256,uint256)", +"a94c7c65": "limitedPrint(address,uint256)", +"a94e7ed4": "isSpecificallyApprovedFor(address,uint256)", +"a94feacc": "claimTokenWindowOpen()", +"a95022a6": "GoodTimeCoin(uint256,string,string)", +"a95055a8": "getPlayerBoardsIDs(bool)", +"a9505eb4": "maxOfArray(uint256[])", +"a950fb0e": "b64decode(bytes)", +"a9510f89": "totalAmountOfTokens()", +"a951c534": "_CallScheduled(bytes32)", +"a951c994": "setSetupComplete()", +"a951f28e": "dayaToken()", +"a951fad2": "CryptoX(uint256,uint256)", +"a9522f4e": "IsDividendAvailabe()", +"a95236ed": "DeDeTokenContract(address)", +"a95240c4": "memberShareCount()", +"a9524310": "getTokenAsset(address,uint256)", +"a95281f0": "registerPoA(string,bytes32,uint256[],uint256[],address,address)", +"a952f268": "MAYExchangeRate()", +"a9535320": "TwoXJackpot()", +"a9538157": "increaseApprovalByLegacy(address,address,uint256)", +"a953d08d": "mintBounty(address,uint256)", +"a954736d": "cancelSellPop(uint256)", +"a9549f81": "getDAOId(uint256)", +"a954c209": "great(uint256)", +"a9550ecb": "getMonsterDefenseFromDna(uint256,uint256)", +"a9553d74": "phaseThreeBonusPercent()", +"a9559dd7": "updateBalance()", +"a95609ca": "editContribution(address,uint256,uint256,uint256,uint256)", +"a9572ac7": "setMulFactor(uint256)", +"a9580edd": "distribute(uint256,uint256,address,uint256)", +"a95824b4": "votingOpen()", +"a95836d1": "finalizeICO(address)", +"a958ffc4": "fundingDurationInHours()", +"a9593b98": "changeVote(uint256,uint256)", +"a9595472": "SOC()", +"a95a3887": "rolloutDividends(address)", +"a95bc9a7": "changeChannel(address,uint256,uint256,uint256)", +"a95bfd36": "adminAddBallotOption(uint32,string)", +"a95c372d": "fetch()", +"a95c4d62": "purchaseToken()", +"a95c5339": "checkGameRegiester(address)", +"a95d017d": "getRevisionBlockNumber(bytes32,uint256)", +"a95d580c": "withdrawEarnings(uint256,bool)", +"a95d85d8": "withdrawTo(uint256,address,bytes)", +"a95d9c14": "Uncloak()", +"a95ff7d5": "isDecentBetCrowdsale()", +"a9604239": "maxAmountRoundSeed()", +"a9607011": "HappyEthericHome()", +"a96088a5": "vernamToken()", +"a9612f72": "emitOwnershipChange(address,address,bytes32)", +"a9615f59": "platAuction()", +"a961e9e8": "startSaleTime()", +"a9625fa8": "MANHATTANPROXY3RDST()", +"a962a7d6": "set_burned(uint256)", +"a9636b9f": "Bytes32Oracle(bytes32)", +"a964bb9a": "configureLimit(uint16,uint16)", +"a964bea7": "CheckRevoke(address)", +"a96594d3": "nextLotteryTTMTokenId10()", +"a965a941": "getNote(uint256)", +"a965e5c1": "setBonusAddress(address,bool)", +"a96654ee": "transferredOwner(address)", +"a9671d8f": "getProductionOf(address)", +"a9671dd9": "enableProxy(address)", +"a967f3e7": "emitProjectCreated(uint256,uint256,address)", +"a968309d": "plutochain()", +"a968991b": "confirmed()", +"a9689d0f": "transactionFeeRate()", +"a968ad0e": "resetBonuses(address)", +"a968b97c": "verifyCodeLength(string)", +"a96948c6": "chefBalanceOf(address)", +"a969574d": "ratePreICOEnd()", +"a969f080": "QUIKKO()", +"a969ff0a": "collectFee(uint256)", +"a96a4998": "DEFROST_FACTOR()", +"a96a5a5b": "pwin()", +"a96af0f4": "saleSupply()", +"a96b1828": "GLOBALETHER()", +"a96b2dc0": "getCallCount()", +"a96b3ab8": "getDthShop(address)", +"a96c3e6e": "getPlayerAddr(string)", +"a96c4eb7": "Sold(uint32,address,address,uint256)", +"a96c6bfe": "setDeveloper(address,bool)", +"a96ce7aa": "unlock(string)", +"a96f45c7": "ETHTransfer(address,address,uint256)", +"a96f8668": "releaseTokens()", +"a96fb9b4": "testTokenA()", +"a970a23a": "internalUpdateRates(bytes4[],uint256[],uint256)", +"a970ef6e": "tokenContractDefined()", +"a9718d51": "getTransferValuebyArrd(address)", +"a971c23d": "minimumFeePercentage()", +"a9725a68": "LIMIT_STAR5()", +"a9726c1e": "withdraw_bounty()", +"a972a451": "sqrt(uint32)", +"a973e27c": "testFind()", +"a9740fdf": "SwapCreation(address,address,uint256,uint256,address)", +"a9743c68": "getCallPayout(bytes32)", +"a9746acf": "UserBought(address,uint256,uint256,uint256,uint256)", +"a974e21f": "HKIN(uint256,string,string)", +"a97501a3": "ManUvsTottenham()", +"a97583de": "_transferByPartition(bytes32,address,address,address,uint256,bytes,bytes)", +"a9758fcc": "CurationRightsTransferred(address,address)", +"a9764152": "createFunction(string,string)", +"a9767e14": "masternodeMineTokens()", +"a977449e": "unbanReferrer(address)", +"a977c71e": "changeQuota(uint256)", +"a977f628": "viewNumberOfApprovedUsers()", +"a9782954": "hunterOf(address)", +"a979169f": "updatePackage(uint256,string)", +"a9791aec": "tgeSetFinished()", +"a9797521": "bn128_is_on_curve(uint256[2],int256)", +"a97a6d63": "setWhitelisted(address,address,bool)", +"a97b8b48": "LOG_CurrentPercent(uint256)", +"a97b8b4d": "closeBallot()", +"a97c8eb4": "RTEToken()", +"a97cb561": "isTransferAgent(address,address)", +"a97cc114": "getTile(uint256)", +"a97d48fd": "sendContractFundsToAddress(uint256,address)", +"a97e5c93": "isOracle(address)", +"a97fc381": "toSlice(bytes)", +"a97fe7b6": "airDropTotalSupply()", +"a97ffd5e": "safeToSell(uint256)", +"a9804acb": "HealthyCoins(string,string,uint256)", +"a980bb9e": "isDisclosureSigned(uint256)", +"a9814d14": "Outcome()", +"a981daca": "testIntParserNegative()", +"a9820ead": "Ballot(bytes32[],bytes32[])", +"a9824288": "CTMC()", +"a9825b7c": "bonusUnsold()", +"a9831437": "setCreationPrice(uint256)", +"a9831edf": "unlockFundsAndPassEther()", +"a98325b6": "collectDividend()", +"a983637e": "BACHELORCHAIN()", +"a9839dd7": "exchg(address)", +"a983c932": "isValidContract(bytes32)", +"a983d414": "safeassert(bool)", +"a983dcc0": "setDefault(bytes32)", +"a983e1bb": "random(uint256,uint16)", +"a984cec2": "additionalPresaleInvestors()", +"a9850e26": "SellToyMoney(uint256)", +"a9854087": "closeAt()", +"a9856d6d": "initSale(address,address,uint256,string)", +"a985e6c6": "withdrawAirDrop(address[],uint256)", +"a986c969": "stand(address,uint8[],bytes32,uint8[],uint8[],bool[],uint256,bytes32,bytes32)", +"a986ef4a": "nextRoundCoolingTime()", +"a9872393": "racesInfo(uint256,uint8,address)", +"a9875d70": "stage4Start()", +"a987d4c6": "_mint(address,uint256,string)", +"a987d654": "restoreItem(uint256)", +"a987f9da": "Creation(uint256,string,address)", +"a9888148": "testFailRetractNotRetractable()", +"a988845a": "setNewMessageNumber2(string,uint256)", +"a988df4b": "bgb_per_eos()", +"a988e371": "taxPaid(address)", +"a988ea3a": "NETHtoken(uint256,string,string)", +"a98902e9": "LUNVault(address)", +"a98a6d19": "ICOWeiRaised()", +"a98a89c2": "buy1(address[],address[],uint256[],bytes)", +"a98ad199": "removePermittedContract(address)", +"a98af238": "setCCH_edit_16(string)", +"a98c439f": "buyTokensAltercoins(address,uint256)", +"a98ca17d": "exercise(uint256,uint256[3],address)", +"a98cb619": "transferGenesis(address)", +"a98d5961": "pickRandomAssetPosition(uint256,uint256,uint256)", +"a98e4e77": "getAccountCount()", +"a98ee0b7": "_getInitAuctionSeconds()", +"a98f81fd": "BEXAM()", +"a98f99d8": "removeDefaultOperatorByTranche(bytes32,address)", +"a9901c6b": "getIsCoinReg(bytes4)", +"a990dd52": "unitsOneEthCanBuybefore()", +"a9918dfc": "getCompte_36()", +"a991a24d": "getTenancy(uint256,uint256)", +"a991cb0e": "respond(uint256)", +"a991faf9": "getTotalDividendsAmount()", +"a99306e7": "addPVPContender(address,uint256)", +"a993772f": "isPreIcoFinish()", +"a993e180": "getFechaTax()", +"a9948f7e": "GetNbyPrice(uint256)", +"a996d6ce": "setBurner(address)", +"a996d72e": "OracleChainToken(uint256,string,uint8,string)", +"a9974338": "setB0xToken(address)", +"a997f82f": "setCrowdsaleStage(uint256)", +"a998146b": "allToken()", +"a9985260": "test_setMaxSize()", +"a9989b93": "tokenAddresses()", +"a998fdbe": "getWithdrawAmount(address,address)", +"a9995010": "CappedCrowdsale()", +"a99a353b": "SWAP(address,address)", +"a99a3f03": "PLAYER_TIMEOUT()", +"a99a3f98": "initSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"a99a985b": "betOn(uint32,uint32,uint256,address)", +"a99aa366": "presaleDiscount()", +"a99b9e39": "ICO_START_DATE()", +"a99be610": "PreIcoMessage()", +"a99bf4fa": "Potential_Investors(address)", +"a99ce372": "VINE_CAPACITY_PER_LAND()", +"a99d8d48": "changeTransferable()", +"a99da6af": "finishDeal(uint256)", +"a99dca3f": "hi()", +"a99df9c3": "oneCentInWei()", +"a99e0a81": "maxICOFirstSupply()", +"a99e6465": "addTier2Member(address)", +"a99e7e29": "register(bytes,address)", +"a99f0d9f": "_addBallot(bytes32,uint256,uint256,bool)", +"a99fa3e2": "addGroupMember(bytes32,address)", +"a99fba7d": "calculatePlatformCommission(uint256)", +"a99fc5aa": "tempCharity()", +"a99ffb7b": "timestamp(bytes12)", +"a9a07af9": "incFightToDeathWin(uint256)", +"a9a0844b": "getSaleVolume()", +"a9a0b495": "getPreSignedHash(bytes4,address,uint256,bytes,uint256,uint256)", +"a9a11111": "QuadraticVoting()", +"a9a18dda": "totalEthReceived()", +"a9a1fb96": "releaseTokensForce(bytes32)", +"a9a26902": "changeBubbleWallet(address)", +"a9a29afa": "getRefundTxFee()", +"a9a343b3": "Puzzled(address,bytes32)", +"a9a3a9c5": "vxtest()", +"a9a3cef4": "LISKClassic()", +"a9a3da4a": "getRemainUtcoin()", +"a9a40c71": "getNumberOfOpenDeals()", +"a9a51f89": "changeTokens()", +"a9a5e3af": "removeOwners(address[])", +"a9a615e9": "setWhitelistedStatus(address,uint256)", +"a9a6e9b4": "distributeLCD(address[],uint256)", +"a9a8679b": "authorizeAccount(address)", +"a9a8fc84": "ItemCreated(address,uint256)", +"a9a9d7af": "sellerList(address)", +"a9a9e4f7": "_payloadOffset()", +"a9aac3e4": "registerWineOwner(address,string,string)", +"a9aad58c": "PAUSED()", +"a9aae07a": "setMinGas4Accts(uint256)", +"a9aaf116": "BillahChain()", +"a9ab9b46": "getAccountItems(address,uint256)", +"a9abe7be": "setIcoSecondWeekRate(uint256)", +"a9ac225c": "ProposalTallied(uint256,uint256,bool)", +"a9ac4c5f": "checkMonthlyLimit()", +"a9acc475": "getBlockValue()", +"a9adaecd": "calcStopPriceFactor()", +"a9add7dc": "setEvolvePrice(uint128)", +"a9ae8323": "presaleDateFinish()", +"a9aeb059": "updateCeiling()", +"a9b07600": "setIdArray(address,uint256,string,string,uint256[])", +"a9b0c5a4": "preIcoFinished()", +"a9b0e8d5": "Cscchain(uint256,string,string)", +"a9b11426": "getImageOwner(uint256)", +"a9b12c4c": "blocktime()", +"a9b1d507": "makeWallet()", +"a9b1ffd9": "totalChequeValue()", +"a9b2c135": "lockedYears()", +"a9b2ca9c": "changeDragonGen(uint256,uint256,uint8)", +"a9b2cc09": "getMaxContributionAmount()", +"a9b35240": "packageExists(bytes32)", +"a9b46030": "BurnableOpenPayment(address,uint256)", +"a9b48ba7": "WIN()", +"a9b4b780": "getWeight()", +"a9b542bd": "getDna1(uint256)", +"a9b551d2": "getAdministratorMoney(address)", +"a9b5ae83": "messageForPeace(string)", +"a9b69e7c": "deployersCount()", +"a9b6c8bc": "getAddress(bytes16)", +"a9b76504": "getContestTeam(uint32,uint32)", +"a9b7c3bf": "cooAddress1()", +"a9b86292": "totalSharePool()", +"a9b86924": "buyStoreByName(bytes32)", +"a9b8dad6": "level_3_percent()", +"a9b8f7b8": "ProtectTheCastle()", +"a9ba2b09": "releaseFine()", +"a9bb03a4": "deptrespond(address,address,string,bool)", +"a9bb3274": "UCCOIN_PER_ETHER()", +"a9bc5db1": "createHeld(address,uint256)", +"a9bf1c9f": "ENS_ROOT()", +"a9bfe5c7": "TokenBalance()", +"a9c0838d": "getPI_edit_3()", +"a9c1873c": "setTokenPerEth(uint256)", +"a9c1f2f1": "decayRate()", +"a9c2ac3a": "getBetIds(uint256)", +"a9c2e36c": "getFactoryAddress()", +"a9c32c35": "NewExchangeRate(uint256)", +"a9c38476": "latestEditionReleased()", +"a9c4429a": "getInvestmentPackageInformation(uint256)", +"a9c45fcb": "upgradeToAndCall(uint256,address,bytes)", +"a9c4d62e": "S25ICO()", +"a9c5c9df": "aval(uint256,address)", +"a9c6a624": "updateNumber(int256)", +"a9c6c714": "unsoldAllocationOraclizeGasLimit()", +"a9c70eaa": "getUint(uint256)", +"a9c73e80": "setText(string,string)", +"a9c7648f": "distributeToken(address[],uint256)", +"a9c76999": "totalProfit(address)", +"a9c8733c": "correct()", +"a9c8dfcd": "AuctionCreated(uint256,uint256,uint256,uint256)", +"a9c95328": "renameList(address,string)", +"a9ca2072": "getAccountValue(uint16,uint8,uint8)", +"a9ca6057": "baseball()", +"a9cb2227": "getPlayerRoundTeamBought(uint256,uint256,uint256)", +"a9cbd0a5": "percentageToEthertoteDevelopmentWallet()", +"a9cc077a": "TOKEN_PRICE_DENOM()", +"a9cc4718": "fail()", +"a9ccc3af": "isEtherSpaceUpgrade()", +"a9cd2be6": "createSlot(uint256,uint256)", +"a9cd9e06": "secureWithdraw(uint256,address)", +"a9cdf643": "TEAM_MEMBER_VAL()", +"a9cf037a": "EEYcoin(address)", +"a9d04bd8": "getStakingRequirementTime(address,uint256)", +"a9d05989": "ETFW()", +"a9d07519": "TokensCappedCrowdsale(uint256)", +"a9d0b164": "priceOfEthOnUSD()", +"a9d0ddc7": "addContractWithInfo(string,string)", +"a9d0fd87": "_updatePurchasingState(uint256,uint256,uint256,bool,address)", +"a9d2293d": "lastClaimBlock()", +"a9d23ace": "getBundleExpiredTimeOfEmail(string,uint8)", +"a9d2d87c": "Manual_Mint(address,uint256)", +"a9d3da74": "SimpleAuction()", +"a9d40b77": "buyOffspring(address,string,uint256,uint256,uint256)", +"a9d424e2": "buy(address,address,uint256,uint256)", +"a9d48032": "maxSpendToken()", +"a9d49f62": "searchInsertionPoint(uint256,uint256)", +"a9d4d6bc": "lastBlock_f1()", +"a9d5e255": "GACToken(uint256,uint256)", +"a9d66127": "cancelPawn(uint256,address,bool)", +"a9d66352": "minimum_deposit_amount()", +"a9d72f82": "alterFeaturePetitionFee(uint256)", +"a9d74013": "claimedToday()", +"a9d82f18": "realDEXToken()", +"a9d85266": "setValue(bytes32,bytes32,uint256)", +"a9d9f572": "Println(address,uint32,uint256,uint256,uint256,bool,uint32)", +"a9d9f644": "viewLockUpStatus(address)", +"a9da0fad": "setOutcome(uint8,uint8)", +"a9da1417": "DEXHIGH(address,address,address,uint256,uint256,uint256)", +"a9dab167": "extendLock(bytes32,uint256)", +"a9db06e5": "perAmountRaised()", +"a9db9ce6": "getOraclizeGasPrice()", +"a9dbaf25": "length(bytes32)", +"a9dbe76f": "confirmSeller(uint256,uint256)", +"a9dc1d54": "singularDTVCrowdfunding()", +"a9dc491d": "getResolver()", +"a9dd1225": "random(uint256,uint256)", +"a9dd6895": "acceptTransaction(uint256)", +"a9dda4df": "setAuctionAddress(address,address)", +"a9de5045": "acceptAction(bytes32)", +"a9de581b": "auctionWinnerMessageHash()", +"a9df1aa2": "WithdrawalNormal(address,uint256)", +"a9e044ae": "SetProjectTag(string)", +"a9e0f3ed": "checkCounterLimit()", +"a9e10bf2": "recieve()", +"a9e2bcfe": "oneRoll()", +"a9e2e084": "_createPoo(string,address,uint256)", +"a9e30f96": "TokenPK(uint256,string,uint8,string)", +"a9e3fd27": "contentHostPrice(bytes32)", +"a9e406d5": "_setProviderSupply(uint256,uint256,uint256)", +"a9e4d6ce": "UpdateTokenRate(address,address,uint256)", +"a9e5714b": "AgriChain()", +"a9e732bb": "cashout(uint256)", +"a9e79359": "payoutForTimeline(uint256,uint256)", +"a9e7c2e5": "claimToken(uint256)", +"a9e7cb10": "Mediation(address)", +"a9e7f730": "FreyrCoin()", +"a9e899ef": "challengeFeeMultiplier()", +"a9e8a6bb": "prolongBonusPreIco(uint256)", +"a9e8f2f0": "get_refund_vocean_addr_amount(uint256)", +"a9e931ab": "addRec4L8R(address,uint256)", +"a9e94aa2": "Sponsor()", +"a9e966b7": "setState(uint256)", +"a9ea1896": "priceT1()", +"a9ea4aaa": "EntryToken()", +"a9ea6454": "basicThreshold()", +"a9ea96f0": "setDevelopersTokensPercent(uint256)", +"a9ea9d17": "PURCHASES_BONUS()", +"a9ead91c": "addressToAsciiString(address)", +"a9ebeb25": "nextReferrerId_()", +"a9ec77d3": "PublicSale(address,address,address,address,uint256,uint256,uint256)", +"a9ed003d": "sister()", +"a9ed9cb8": "disallow(address)", +"a9eeaeee": "getSanSlots(address)", +"a9eed530": "reduceOrderQty(uint256,uint256)", +"a9f00221": "resetTokenOfAddress(address)", +"a9f036dc": "accCompany()", +"a9f09079": "exchangeRateStoredInternal()", +"a9f0a590": "transferAdministratorship(address)", +"a9f12d8a": "RaliusToken()", +"a9f16529": "thisVotersChoice()", +"a9f2db37": "unlockTokens(address,address)", +"a9f5de42": "crowdsalePhase()", +"a9f69edb": "checkRole(uint256,address,uint256)", +"a9f6def0": "HonestDice()", +"a9f73dd2": "_getRarity(string,uint8,uint8)", +"a9f79f7d": "FXT(address)", +"a9f7c131": "updateDateOfPurchase(address,uint256)", +"a9f7d03b": "admin_typeOf(address)", +"a9f7e664": "transferTokens(address,uint256,uint256)", +"a9f7f7e5": "o_algoritmo(uint256)", +"a9f844a8": "PlayerBalance(address,uint256,uint256)", +"a9f8792e": "votingProxyContract()", +"a9f8ec6c": "AlarmClockTipFaucet()", +"a9f940c3": "addChain(string,string)", +"a9f951dc": "getNation(uint8)", +"a9f987b5": "UFOcoin()", +"a9f992b1": "BTC8000on420()", +"a9fab274": "burnAuditApproval()", +"a9fae422": "getParents(address)", +"a9fb11b3": "potAddup()", +"a9fb4385": "ContributeWithSender(bool,uint8,address)", +"a9fb8fe6": "getFeesByAsset(address)", +"a9fbc614": "lookupTicketHolder(uint256)", +"a9fc771c": "PinkToken()", +"a9fc9501": "indexTheWorkcrew()", +"a9fcf76b": "setIntArray(bytes32,int256[])", +"a9fd1bd3": "TradeAffected(uint256,uint256)", +"a9fd3f42": "transferApprovedFunds()", +"a9fde745": "transferTrade(address,address,uint256)", +"a9feca22": "_emitOracleAdded(address)", +"a9ff2a5e": "transferTokensFromWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"aa01ac22": "gmAddress()", +"aa01ef7d": "finishVotingPublic(address,uint256)", +"aa02a90f": "majorityMargin()", +"aa03214c": "calcBonusPercent()", +"aa0372e7": "getItem(bytes32)", +"aa03dfaa": "createChannel(bytes32,address,uint256)", +"aa0465b8": "setPriceData(uint256,uint16,uint256,uint8)", +"aa049691": "changeAccount(address)", +"aa04e566": "getWhoPiad(address,address,address,address,address,address,address,uint256)", +"aa052bd1": "startPreSaleStage()", +"aa056d2a": "cloneWithPopAndBottle(uint256,uint256)", +"aa058a73": "right6(uint256)", +"aa05b852": "s34(bytes1)", +"aa065074": "StageVestingToken()", +"aa071061": "LogAccountModified(address,address,bytes32,bytes32,bytes32,bytes32)", +"aa077992": "getProductEarning(uint32)", +"aa08523d": "lockedCustomer(address)", +"aa08c9e6": "getCoverImageCount(address)", +"aa08dfd3": "setFeeParams(uint256,uint256,uint256,uint256,bytes)", +"aa09bab8": "usedTotalSupply()", +"aa0bf9ba": "calculateRawPoolAmount(uint256)", +"aa0cd6eb": "_distributePoolReward(uint256,address,uint256)", +"aa0cfcbf": "buynums(uint256)", +"aa0d30f3": "deduct_fees()", +"aa0d9fb5": "_aremoveByValue(address)", +"aa0e38b4": "Mobilink()", +"aa0f0d4a": "Team(bytes32,bytes32,address,bytes32)", +"aa10ce22": "addExchange(address)", +"aa10e8c2": "CreateAPool(string,string)", +"aa11772b": "setOperators()", +"aa1199ea": "setApprove(bool)", +"aa121bbe": "ABIChanged(bytes32,uint256)", +"aa125d08": "timeWaitUnlock(address)", +"aa127ae3": "test_9_checkDestructionOverflow_shouldThrow()", +"aa13ca76": "getTokenPrices()", +"aa13e8c2": "waitingTime()", +"aa141ee2": "spartans()", +"aa14c39a": "submissionDeposit()", +"aa14fa5a": "ICObonus()", +"aa156645": "isWorker(address)", +"aa1589a9": "approveLeave(address,uint256,string,uint256,bytes32)", +"aa1614eb": "ethRetrieve()", +"aa17973c": "createRandomAtom()", +"aa17e768": "getParentI(uint256)", +"aa183877": "getMonkey()", +"aa188b29": "SandBoxERC20()", +"aa18c05c": "TRANSFER(address,address)", +"aa18f76a": "getAllowedAmount(address)", +"aa1953cc": "canAccess()", +"aa19ed77": "freezeTransfersUntil(uint256,string)", +"aa1b510e": "cheat()", +"aa1ba6a9": "totalWin()", +"aa1c31a3": "BatCave()", +"aa1cdce8": "allot(uint256)", +"aa1cf1cd": "dumpFreeTokens(address)", +"aa1cf23e": "_isIdle(address,uint256)", +"aa1d807f": "ESCBDevMultisig()", +"aa1d98af": "personIndexToOwner(uint256)", +"aa1e47ae": "MyCoin()", +"aa1e84de": "hash(bytes)", +"aa1f609f": "ETHER_MIN_CONTRIB_PRIVATE()", +"aa202aca": "testBytes32Len()", +"aa20e1e4": "updateMasterMinter(address)", +"aa216998": "INITIAL_SAPLLY()", +"aa2262a8": "prevCourse()", +"aa226780": "trade(address[11],uint256[11],uint8[2],bytes32[2],bytes32[2])", +"aa228cda": "reduceMul_()", +"aa22b56b": "getDAOById(bytes32)", +"aa235449": "SpencerToken()", +"aa237e21": "set(bool,uint256)", +"aa238110": "getCurrentPrice(uint16)", +"aa23cb19": "transferFromIndexed(address,address,uint256)", +"aa23e03d": "getIdentifier()", +"aa24da73": "MultiToken()", +"aa24e8aa": "numberOfAlternatives()", +"aa2529a2": "RefundChequeById(string)", +"aa2580c1": "startPreSaleRound()", +"aa258b2e": "TitlePurchased(address,uint256)", +"aa25c744": "getDenominationByName(bytes8)", +"aa25f57e": "setPartnerETHRewardsPercent(uint256)", +"aa271e1a": "isMinter(address)", +"aa272d4b": "getNodeIndexId(bytes)", +"aa2796fd": "payoutForMining(address,uint256)", +"aa27cdf2": "deleteSharedAccount(bytes32,bytes32,uint256)", +"aa283e76": "setMintPrice(uint256,int256)", +"aa284a4a": "ProofPublicVote(address)", +"aa289b15": "deleteOutStreamOf(address)", +"aa28b89f": "preICOStage()", +"aa29787e": "bonus15end()", +"aa2a006d": "OrderCancelled(uint256,uint256)", +"aa2a1c47": "getTotalCollectedFrom(uint64,address,address)", +"aa2b5d7d": "getMiningWarPlayerData(address)", +"aa2bebb7": "getFeeWindowByTimestamp(uint256)", +"aa2d5c05": "FillOrder(uint256,address,uint256)", +"aa2de6c3": "minimumPurchase()", +"aa2df88b": "_isTransferAllowed(address,address,uint256)", +"aa2e7ea0": "createSwap(bytes20,address,uint256,address)", +"aa2efbad": "nominsReceivedForEther(uint256)", +"aa2f04da": "alterPause(bool)", +"aa2f7494": "createMobster(string,uint256,uint256)", +"aa2f892d": "requestRedeem(uint256)", +"aa2fc145": "numStageRecalc(uint256)", +"aa2fddc7": "transfer(string,address,uint256)", +"aa3022d0": "settotal(uint256)", +"aa306d79": "voteForCandidate_(uint256,address)", +"aa30abf1": "crowdsaleBurnAddress()", +"aa30b7e3": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[],address[],uint256)", +"aa31aee8": "getLockTime(address)", +"aa31e4a0": "setSelfHybridizationPrice(uint256)", +"aa33171f": "newPromotion(string,string,string,uint256,uint256,uint256,uint256)", +"aa332032": "NewRound(string,bytes32)", +"aa33ab1b": "getVoted(uint256)", +"aa3435c0": "setTokenInformation(string,string,uint8)", +"aa351cf5": "triggerShutdown(uint256)", +"aa352ca4": "withdrawOffer()", +"aa3633f3": "CreationFailedEvent(address,uint256,string)", +"aa366290": "forfeit(uint8)", +"aa367664": "fundingMaximumTargetInWei()", +"aa368c19": "createScore(string,string,uint256,uint256,uint256,uint256,string,string,string,string,string)", +"aa36aae8": "prolongCrowdsale()", +"aa36b52e": "_updateNeeded(uint256,uint256,uint256)", +"aa36cdfc": "getPlayerHistory(uint256)", +"aa3744bd": "recipient1()", +"aa3801d8": "getTokenAddress(bytes)", +"aa391317": "returnUnsoldSafeMedium()", +"aa3ad4e4": "validate(address,address,uint256)", +"aa3aef50": "purchaseTicket(uint16,uint16[])", +"aa3ba179": "widthraw()", +"aa3dacac": "sideBetPercent_MAX()", +"aa3eb769": "sendPTokenFrom(address,uint256,address)", +"aa3ec0a9": "cid()", +"aa3ef248": "postFact(bytes16,address,string)", +"aa3f5087": "AuctusPreSaleDistribution()", +"aa404876": "RedBlueToken2()", +"aa41d605": "_estimateWeight(uint256,uint256,uint256,uint256,uint256)", +"aa421944": "setMaxVeriAmount(uint32)", +"aa430e64": "setTotalPhases(uint256)", +"aa4537b2": "referredBonusRate()", +"aa454e9c": "setBuyer(uint256)", +"aa45b11e": "setReferralAddressShare(uint256)", +"aa462a5a": "whenGameDies()", +"aa4859fd": "newBookingfc(uint256,address,uint256,uint256,uint256)", +"aa487f49": "PRESALE_PERCENTAGE_1()", +"aa4925d7": "subscribe(uint256,uint256,address)", +"aa497b9d": "scheduleCall(address,uint256,bytes,uint256,uint256,uint8)", +"aa4abe7f": "setMaxRate(uint256)", +"aa4ac835": "exportTankResetEarning(uint32)", +"aa4b4d0b": "test_v0()", +"aa4b62f3": "initData(address,uint256)", +"aa4b980e": "phase_1_bonus()", +"aa4bdd3b": "realEtherCapHash()", +"aa4cb547": "setMultihash(bytes32,bytes)", +"aa4cc01f": "checkIfCancelled(bytes32)", +"aa4cd810": "addMeterPoint(address,int256)", +"aa4ce2c6": "blockDotBlockHash(uint256)", +"aa4d4213": "getOldAllowance(address,address)", +"aa4d490b": "registerNameXaddrFromDapp(address,bytes32,address,bool)", +"aa4eaa72": "addToPreSaleWhitelist(address,address)", +"aa4ee730": "LastRiskPrice()", +"aa4f6012": "addSupply(address,uint256)", +"aa4f861f": "getInvestorInforMax(address)", +"aa4fc0a1": "Talius()", +"aa510c8c": "getLinkToPostId(string)", +"aa513c71": "updateInfluencer(string,address,uint256,address)", +"aa51793c": "isLosingBet(uint256)", +"aa525c55": "removeMilestone(uint8)", +"aa52a251": "transferSnowflakeBalanceFrom(string,string,uint256)", +"aa52fbd4": "period2Denominator()", +"aa534161": "releasedTeamTokens()", +"aa53d504": "Bounty()", +"aa53d7d4": "gettotalReceivedTicket()", +"aa541c9f": "unfroze_contract()", +"aa54abb1": "setLSEscrowContractAddress(address)", +"aa54ad35": "tokenSaleAddr()", +"aa54e040": "change_rate(uint256)", +"aa5581ef": "weiMaximumLimit()", +"aa5583d7": "Connections()", +"aa55a1a2": "giveAdditionalTokens(address,uint256)", +"aa55b55f": "getCardTypeInfo(uint256)", +"aa56c8e7": "isCrowdsaleFinished()", +"aa585d56": "setPrice(uint256,uint256,uint256)", +"aa58d4df": "calculateWinnerGameType2(uint256,uint256)", +"aa590140": "length(int8)", +"aa59770f": "sendCreatorByOwner(address,uint256)", +"aa59b024": "CROSAIR_SHIP_LIMIT()", +"aa59fb7d": "ChemistryCore()", +"aa5a11c5": "removeTellerModerator(address)", +"aa5a20e5": "setUpgradeAgent(address,uint32)", +"aa5b7df8": "marketingTokensWallet()", +"aa5b95d1": "deathFactor_i()", +"aa5c02a3": "LETX()", +"aa5c3ab4": "rewardBalance()", +"aa5c88ca": "setFreezePercent(uint8)", +"aa5d4719": "getTransferable(bytes20)", +"aa5d6d5f": "dropWallet()", +"aa5dcecc": "allocator()", +"aa5dd215": "doAirDrop(address[],address,uint256[])", +"aa5df9e2": "ownersArr(uint256)", +"aa5e2500": "clearProposalNames()", +"aa5ebd7f": "removeAddressFromWhitelist(address,address)", +"aa60145b": "cancelPledge(address)", +"aa601a71": "setAllowChangePrice(bool)", +"aa601e86": "SimpleMultiSigWallet(address[],uint256)", +"aa613b29": "authenticate(string)", +"aa613faf": "U42Token()", +"aa616da1": "addSkillNames(address,bytes32[],address)", +"aa617f25": "getAdUrl(uint256)", +"aa61924a": "CREATE_VERSION_ROLE()", +"aa61fc58": "getAirdropList(address)", +"aa620192": "today(uint256)", +"aa6217eb": "getMaximumContributionPossible()", +"aa628c31": "timelock(address,uint256)", +"aa63dea4": "dateMainStart()", +"aa646ebb": "_mint(address,uint256,uint128)", +"aa647673": "getKingPoints()", +"aa64c43b": "transferPool(address,address,uint256)", +"aa64f3c6": "addWhiteListed(address[])", +"aa656a3a": "updateGameMoney(uint256,uint256,uint256,uint256)", +"aa657658": "setMigrationGate(address)", +"aa657815": "takeoffer(uint256,uint256)", +"aa65a6c0": "getTokenWithId(uint256)", +"aa65c1f1": "WinningOutcomeDeclared(uint8)", +"aa66797b": "RESERVE_SUPPLY()", +"aa677354": "register(address,address)", +"aa67bc04": "eraByName(bytes32)", +"aa67c919": "depositFor(address)", +"aa682682": "startBuyTime()", +"aa68894b": "ownerWithdrawAccount(address)", +"aa692151": "fbytes32(bytes32)", +"aa6aca58": "setDelegadoDeEscuelaVerify(bytes32,bytes32,uint8,uint8)", +"aa6b5d9f": "ElyToken(address,bool)", +"aa6b631a": "getSetting(string)", +"aa6be303": "debtors(address)", +"aa6bf687": "calculateBonus(bytes32,uint256)", +"aa6ca808": "getTokens()", +"aa6d5dce": "_withdrawAllFunds()", +"aa6d7de4": "Hash()", +"aa6e4858": "VoteAdvertisement(uint256,address)", +"aa6e6539": "chkUserDetails(address,address)", +"aa6ebdcb": "numberOfDAppNodePackages()", +"aa6f5bb6": "setCreateDigitalArtFee(uint128)", +"aa727e46": "MAX_PUBLIC_FUNDING_SUPPLY()", +"aa72f217": "bountyMktWallet()", +"aa72f725": "listAssetDocuments(bytes32,uint256,bool)", +"aa735dd6": "ZBAStandardToken(uint256,string,uint8,string)", +"aa736f57": "transferLocker(address)", +"aa738940": "Show_Company(uint256)", +"aa743c85": "sixMatchPayoutInPercent()", +"aa74c9fc": "addressToURI(address)", +"aa74fad8": "buyNewInfra(uint256)", +"aa7517e1": "minimumBond()", +"aa7618d5": "increaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"aa7622c7": "finalizeSecondStage()", +"aa7629ab": "withdrawDRPS(uint256)", +"aa76994d": "numOverthrows()", +"aa772fa0": "WinningEvent(address[],address,uint256)", +"aa775278": "deallocateBalance(address)", +"aa77f26c": "vestedAmount(address,address)", +"aa78a883": "BDP()", +"aa79376e": "updatePlayersCookie(address)", +"aa799fdc": "ZeroxDinar()", +"aa79bc02": "maxTrophies()", +"aa7a7744": "isRegisteredPair(address,address)", +"aa7abc8d": "sellWonder(uint256,uint256)", +"aa7b6c59": "wirteData(string)", +"aa7bc1c0": "createTokenFunctions()", +"aa7be9a7": "watchVideoA(address)", +"aa7ca464": "didReveal(address,uint256)", +"aa7dcd84": "testUpdateAuthorityEvent()", +"aa7ebf43": "level_1_percent()", +"aa7f6a3f": "AirdropList(address[],uint256[])", +"aa7f6a61": "newPurchase(address,uint8,uint8,uint32)", +"aa804a80": "jdouble(uint256,uint256,uint256)", +"aa80eec8": "testCheckRokBounty()", +"aa8116be": "fundedPrincipal()", +"aa81f862": "numDepositsSigned(bytes32)", +"aa82635d": "allocateManualMintingTokens(address[],uint256[])", +"aa833a25": "TheTokenC()", +"aa848ee2": "setPrivateList(address)", +"aa84d4b1": "whitelistOff()", +"aa84edb8": "MYDLToken()", +"aa85048a": "TotalCrowdsaleSupply()", +"aa8596ea": "setGalleryFivePrice(uint256)", +"aa863759": "addtoTechOperation(address,address,uint256,uint256)", +"aa864e49": "remainingPoolOptions()", +"aa8675d1": "singleIDXMQty()", +"aa8676b2": "gameDividendOf(address)", +"aa86fbc5": "HETCCStandardToken(uint256,string,uint8,string)", +"aa8713dd": "secondWeek()", +"aa877470": "isInsurance(address)", +"aa879119": "allowApprovee(address,bool)", +"aa87af1e": "voirMessage()", +"aa88bb5b": "resolveDispute(uint16,address,address,uint8)", +"aa89376a": "Example2(string)", +"aa8a0002": "raiseLimit()", +"aa8b20f6": "getAvatar()", +"aa8b76ea": "reclaimDividend(uint256)", +"aa8b99d2": "length(uint256)", +"aa8c217c": "amount()", +"aa8c5324": "prolongate()", +"aa8d11e3": "ThirdPartyVoter()", +"aa8d715d": "itemBalance(address)", +"aa8dc41e": "vriesorexContract()", +"aa8dd5a1": "GRForGas()", +"aa8dde58": "Repost(bytes32,bytes32,uint256)", +"aa8dea8c": "fipsAddToLedger(bytes20,address,bytes)", +"aa8e8fb0": "LTKN()", +"aa8f0269": "ScicoinsICO()", +"aa8f027b": "isEmoji()", +"aa8f365c": "test_invalidProposalValue()", +"aa8f44ec": "isSaleAddr(address)", +"aa908e3f": "closeContract(bytes32,bytes8,uint256,uint32,uint32,uint64,uint64,bytes32)", +"aa91cc61": "rodToken()", +"aa91d5c5": "HappyEnding()", +"aa9224cd": "withdraw(uint32)", +"aa9246ef": "_parseIntScientific(string,uint256)", +"aa93038b": "reward_total()", +"aa931697": "minNac()", +"aa93334d": "currentPeriodStartBlock()", +"aa9449f2": "Test(address)", +"aa9454b5": "transferAndBuy(address,uint256,uint256,uint256)", +"aa954845": "isConfirmed(bytes)", +"aa9669c1": "roll(uint256,bytes)", +"aa974eff": "multitokens(uint256)", +"aa985a63": "distributeWei(uint256,uint256)", +"aa98a41a": "setGenesisAddressArray(address[],address)", +"aa98d57b": "calcCollectedFee(uint256)", +"aa99474f": "authorized_changeOwnership(address,address,uint256)", +"aa994ab8": "transferGIM(address,address,uint256)", +"aa999b4c": "mixDna(uint256,uint256,uint256)", +"aa99ebb6": "CheckTimestampsDuringOneDay(address)", +"aa99f4d0": "teamTwoId()", +"aa9a0912": "mulDiv(uint256,uint256,uint256)", +"aa9a2cf0": "host_percentage()", +"aa9a79f2": "SubBankerPrincipal(uint8,uint256)", +"aa9ad331": "NEON()", +"aa9b5ba8": "getPaidDIVDSchedule()", +"aa9cdaf4": "coinAge(address)", +"aa9e40e0": "confirmDebt(uint256)", +"aa9f3666": "ClassicToken(string,string,uint8,uint256)", +"aa9f37f0": "purchaseContract()", +"aa9f5477": "Nursicoin()", +"aa9fa274": "addExtraReceiver(uint256,address)", +"aaa006b2": "countPlayer()", +"aaa04812": "presaleEthAmountsProcessed()", +"aaa05e20": "cityTransferResources(uint256,uint256,uint256,uint256)", +"aaa08e9b": "testBonus()", +"aaa0f5cc": "userAlreadyBoughtEth(address)", +"aaa24d31": "deathData_f7()", +"aaa2b78f": "allowedWithdraw()", +"aaa2b8c8": "rootAddress()", +"aaa2fe13": "getMin(uint8[])", +"aaa3de26": "getUsersInfo()", +"aaa40bc7": "TUXToken()", +"aaa44e5c": "getAllIds()", +"aaa51ec6": "setStoreAddress(address,address)", +"aaa5a02a": "claimTimeout(bytes32)", +"aaa5ad61": "getTokensAvailable()", +"aaa5c431": "editMemes(uint256,string,string,string,string,uint256)", +"aaa668aa": "getUserTenantId(address)", +"aaa6bc40": "removeWhitelistedUserAddr(address)", +"aaa7062b": "posShare()", +"aaa71e45": "mininglock()", +"aaa7744b": "_subjectToFees(address,uint256)", +"aaa77f55": "wuxiaMaster()", +"aaa99809": "FlatPricingExt(uint256,bool)", +"aaaa3218": "EmpireCrowdsale(uint256,uint256,address,address,uint256,uint256,uint256)", +"aaab3025": "replaceAbility(uint256,string,bool,uint8,uint8,uint8,uint256,uint256)", +"aaab51c9": "close(uint256,bytes,uint256,uint8[],bytes32[],bytes32[])", +"aaabdf16": "reputationIRNNodeShare()", +"aaac205b": "ZeenCoin()", +"aaac50bd": "transferDisable(bytes32)", +"aaac6539": "withdrawRepaidLoan(address,address)", +"aaac8040": "referralAmount(uint256,bool)", +"aaac9718": "package()", +"aaad0c84": "isExisted(address)", +"aaadc832": "isRedeeming()", +"aaae05b2": "approvePreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"aaae7799": "insertUser(uint256,bytes32)", +"aaaea138": "testFailBurnWhenStopped()", +"aaaf8a52": "approvePrimordialToken(address,uint256)", +"aaaf9595": "_generateTokens(address,uint256)", +"aab0395b": "LandToken()", +"aab065e8": "LifChannels(address,uint256)", +"aab14d04": "orderState(bytes32)", +"aab27ad1": "depositaCaucao()", +"aab324ae": "transferAnyERC20Token(address,uint256,address)", +"aab32cfa": "VerifierRegistry(address,uint256)", +"aab402e5": "toggleSale(bool)", +"aab40661": "_fishAquarium(uint256)", +"aab52c33": "initGameTeam(uint8)", +"aab60ebc": "totalLockedRewardsOf(address)", +"aab633dc": "private_setmaxRoll(uint256)", +"aab6606e": "BalanceEth()", +"aab725b3": "icoTokensSold()", +"aab75253": "StaffPicks()", +"aab78bf5": "compensateLatestMonarch(uint256,uint256)", +"aab8c476": "ABCXYZBBTT()", +"aab8f6e0": "airdropBy0Eth()", +"aab99609": "ApaAjaToken()", +"aab9f165": "processPayment(uint256,uint32,uint32,uint256)", +"aaba2fb8": "UnicornRanch()", +"aaba3e3b": "getSymbol(string)", +"aabb3d61": "MainBridge(uint256,address[],uint256,uint256,uint256)", +"aabbb8ca": "getInterfaceImplementer(address,bytes32)", +"aabbd0ce": "approveNewShorter(address)", +"aabd3904": "isCreating(uint256)", +"aabd46e3": "getMintRequestStringMap(uint256,int256,string)", +"aabd5b88": "_sold()", +"aabd971e": "presaleTransfersPaused()", +"aabda436": "fund_()", +"aabdf682": "FINTRUX_RESERVE()", +"aabe00c4": "verifyPreSupport(uint256)", +"aabe2fe3": "currentWinner()", +"aabe7dc4": "unlockRewardToken(address)", +"aabecb89": "setRate10(uint256)", +"aabf05cf": "set_presale_iconiq_arbits_per_ether(address,uint256)", +"aabf382b": "upgradeLevel(uint8)", +"aabf901a": "Distributor(uint256,address)", +"aac0d9c2": "CompanyReserve(address,uint256)", +"aac0e4c5": "getPendingSignatureStatus(address)", +"aac1335c": "tgeSettingsMaxStages()", +"aac1b0b7": "safeExchange(address,address,uint256)", +"aac1c80b": "getCompte_12()", +"aac24374": "setBoxPrice(uint256,uint256,uint256)", +"aac2c717": "buyXaddrWithInviteCode(address,uint256)", +"aac3e314": "setPrevOracle(address)", +"aac4e3a8": "whiteListingAdmin()", +"aac57b3a": "newAPM(bytes32,bytes32,address)", +"aac5ab61": "Crowdsale(address)", +"aac5ce9a": "Stakeholder()", +"aac67b05": "changeFactoryUsageFee(uint256)", +"aac6ba41": "setModel(address[],uint256[])", +"aac746ee": "getNameFromAddress(address)", +"aac74c92": "getPI_edit_30()", +"aac756b8": "setxiudao(address,uint256,bool)", +"aac80472": "getManagerAddress(uint256)", +"aac81654": "isNoEmptyTranches()", +"aac8788a": "setIncrementOpenInterest(bool)", +"aac878eb": "approveTransaction(uint256,bytes)", +"aacaa602": "getCurrentAmountBonusRate(uint256)", +"aacb15e6": "_validate(uint256,uint256,uint256,uint256)", +"aacb4442": "repaintVoxel(uint8,uint8,uint8,uint8)", +"aacbe4b3": "set_maxUETsPerReturnLessThan(uint256)", +"aacc3a16": "printAddress(address[3],address)", +"aacc5a17": "getRandom()", +"aacd572f": "private_setMinRollUnder(uint256)", +"aacd5a85": "orderTrade(uint256,uint256,uint256)", +"aacd9794": "setUniqueSpinnerPrice(uint256)", +"aacdb27b": "setPixel(uint32,uint32,uint8)", +"aacec70b": "createCrySolObject(string,uint256,uint16,uint16,uint8,uint8)", +"aacf3f2e": "contributionInCauldronRound(uint8,address,uint32)", +"aacf5328": "setVideoID(string,uint256)", +"aacfd352": "blockBeforeEncounter(uint256)", +"aacffccf": "getAccountOwner(bytes32)", +"aad00089": "tokenIssue(uint256)", +"aad0bb90": "TEMath(uint256,uint256,bool)", +"aad12029": "freezeAccounts(address[])", +"aad13b15": "fight(address,string)", +"aad2b723": "changeSigner(address)", +"aad3ec96": "claim(address,uint256)", +"aad41a41": "multisend(address[],uint256[])", +"aad429f1": "_buyCommonTTW(uint256,uint256,address,address)", +"aad52373": "ValidateAndStore(bytes,bytes)", +"aad55726": "getContract(address,uint256)", +"aad5632a": "generateNext()", +"aad62da2": "left89(uint256)", +"aad71040": "changeUnlockTime(uint256,uint256)", +"aad7152b": "updateTokenTransferAddress(address)", +"aad83ab3": "SpinTestToken()", +"aad85f7c": "setAchievedDate(uint256,uint64,uint64)", +"aad935af": "updateSellPossible(bool)", +"aad99ef1": "setPriceIncreaseScale(uint256)", +"aad9afee": "kingsMessage()", +"aada1cb3": "activateUniqueSpinners()", +"aada4b06": "saleIssue(address,uint256)", +"aadad773": "removeServer(uint256)", +"aadba3dc": "finishWhen()", +"aadbc52d": "addContractMember(address,bytes32,address)", +"aadbc5a0": "getMatches(uint256,address,uint256)", +"aadc0a9d": "sneakUpOn()", +"aadc1ac1": "approveLoan(uint256)", +"aadc3b72": "hasVoted(bytes32,address)", +"aadc8f23": "RogueProtocol(address)", +"aadd1b03": "donateEth()", +"aade1323": "_processUpdateFee(address[16],uint256)", +"aade53fe": "_removeCardSetAtIndex(uint256,uint256)", +"aade84ae": "TopIvy()", +"aade8dcc": "discountTokenPercent()", +"aade9bb4": "icoReturnBonus(uint256)", +"aadf017e": "_processReserve(address,uint256,address)", +"aadf1e73": "selectWinner30()", +"aadf6838": "getOldSchoolCoins()", +"aae07890": "setUnit(uint256)", +"aae07cd0": "getTokenLayers(uint256)", +"aae0ff1e": "incLuckyCoin(address,uint256)", +"aae1f5c3": "processDonate(address)", +"aae233b4": "cleanUpPreviousRound()", +"aae3d025": "transferClose()", +"aae3d031": "enableKYC()", +"aae40ddc": "getCurrentClaimerForTile(uint16)", +"aae4cbe4": "EcoToken()", +"aae62507": "getUnavailableValueT(bytes32)", +"aae755af": "m_currentUsdAccepted()", +"aae764c1": "assertFalse(bool,bytes32)", +"aae8312e": "getStakeholderTransactionCount(bool,bool)", +"aae8e1b3": "withdrawFlag(address,uint256,uint256)", +"aae99c66": "whitelistAddress(address[],bool)", +"aae9a4c7": "singleInvestorCap()", +"aae9d7ed": "__callback(bytes32,uint256)", +"aaea144d": "setPackage(bytes1[42])", +"aaea396c": "verifiedlist(address)", +"aaea4472": "LifeFactor_ii()", +"aaea44c4": "strConcat(bytes,string,bytes)", +"aaea53f3": "Channel(address,uint256)", +"aaeaa36c": "isBatchSupported()", +"aaead0f0": "initializeIndividualCapsFundraiser(uint256,uint256)", +"aaeb3255": "getInsuranceIDsByClient(address)", +"aaec0c03": "FireflyRegistrar(address,bytes32,address)", +"aaec2fa5": "getGirlsAuctionPrice(uint256)", +"aaecc9cf": "checkGameOver()", +"aaed2c3d": "getRewardRate(address,address)", +"aaed31c7": "createCoins(address)", +"aaed3c7d": "tokenBuyersAmount()", +"aaee686e": "confirmTransactionFee(uint256)", +"aaeea585": "DMToken()", +"aaef36b5": "CorvinusCoin()", +"aaf04471": "transferAndCallDelegated(address,address,uint256,bytes,uint256,uint256,uint256,bytes)", +"aaf05f3d": "f3()", +"aaf10f42": "getImplementation()", +"aaf13d10": "Wallet3()", +"aaf20486": "ProofOfLongHodl()", +"aaf3e4f4": "left88(uint256)", +"aaf47835": "acceptBuyOffer(uint32,uint256)", +"aaf49910": "sanMinLength()", +"aaf4f1ed": "setMinDailyPerUser(uint256)", +"aaf517f5": "GetRoundIndex(uint8)", +"aaf592bf": "receiveApproval(uint256[])", +"aaf5eb68": "PRECISION()", +"aaf60eec": "setRoundOneRaito(uint256)", +"aaf73ef7": "registeredDeals()", +"aaf7e700": "setResetvalue(uint256)", +"aaf809f8": "_isUnique(uint256[],uint256)", +"aaf885f8": "getRazInstanceInformation(uint256,uint256)", +"aaf9419d": "latestNewRockForSale()", +"aaf9d13e": "buyTopDog(uint256,uint256)", +"aafa4827": "KOIOSTokenSale(address,uint256,uint256,uint256,uint256,address)", +"aafa944e": "createJob(string)", +"aafab1e8": "paymentsCount()", +"aafafbf3": "multiSendEth(address[])", +"aafb088e": "stageDuration()", +"aafba184": "removeShareholderListing(uint256)", +"aafbb120": "getSaleInfo(address)", +"aafbd3da": "create(bytes32,address,bytes32,bytes32,address,bytes32)", +"aafbe1c0": "NectarController(address,address)", +"aafd775e": "getLockedBalanceForUser(address,address)", +"aaff096d": "updateDarknodeRegistry(address)", +"aaff2a83": "totalRemainingTokensForSales()", +"aaffadf3": "minContribution()", +"aaffc4b6": "currentRoundCount()", +"ab004a97": "traded_token_seed_amount()", +"ab021884": "setMinimumPriceFusion(uint256)", +"ab022b28": "resetAirdropAmount()", +"ab02f27c": "Europium()", +"ab03cf46": "sendFunds(uint256,address,bytes)", +"ab03d0e8": "changeUnitsUserCanBuyLimitEth(uint256)", +"ab040107": "decline()", +"ab044622": "syndicateTokensWithdrawn()", +"ab045871": "Indemnisation_2()", +"ab051767": "userlogout(address)", +"ab05a69a": "InbotProxy(address,address,address,address)", +"ab05bfff": "setReleaseTime(uint256)", +"ab062643": "getNumTokensPurchased()", +"ab065d6c": "getProjectClient(bytes32)", +"ab067a5b": "periodSales()", +"ab06bea3": "reportContribution(address,uint256)", +"ab06da29": "setUTExchangeRate(uint256)", +"ab074225": "BLOOToken()", +"ab0783da": "mat()", +"ab07f054": "getLandPrice(int32,int32)", +"ab080aab": "SecondBiathlonToken(address,address,string,string,uint256,address)", +"ab08d048": "SPAYToken()", +"ab08f75b": "getMoneyline()", +"ab09ee80": "respond(uint256,uint256,uint256,uint256)", +"ab0a9865": "createGen0Dog(uint256)", +"ab0b29a5": "applySetMaxFeeTrade()", +"ab0ba5d4": "challenge(uint256,bytes32,bytes)", +"ab0bcc41": "saleStart()", +"ab0cba56": "ICO(uint256,uint256,uint256,uint256,address)", +"ab0cd5bc": "createMineForToken(uint256)", +"ab0ced0e": "checkContribution(address)", +"ab0cf8b7": "Wolf()", +"ab0d92dd": "totalPrice()", +"ab0da5a9": "reject(address)", +"ab0db220": "createBattle(uint256,uint256[],bytes32,uint256)", +"ab0e6765": "setEmployer(address,address,string)", +"ab0eda9e": "setAirdropAddress(address)", +"ab0facc0": "raiseLimit(uint256)", +"ab0fd373": "matchTimestamp(bytes32,bytes32)", +"ab0fe874": "purchaseCap()", +"ab108915": "createUser(address,bytes20,uint64)", +"ab1193fa": "PREMINE_ALLOCATION_ADDED(address,uint256)", +"ab11ebdd": "returnIcoTokens(address,uint256)", +"ab127a0c": "searchBestRate(address,address,uint256)", +"ab1377c0": "startSeedStage()", +"ab14a41f": "reentrancyHelper(address,bytes,uint256)", +"ab150226": "checkAdmin()", +"ab1547d2": "nextOpenRewardTime_()", +"ab15d70c": "updateFifthExhangeRate(uint256)", +"ab15f723": "pauseMints()", +"ab165623": "TalentEducationToken()", +"ab165831": "checkContractAddress(address)", +"ab166a48": "addHistory(address,uint256[4])", +"ab16cef1": "addBigPromoBonus(uint256)", +"ab17176c": "VCCToken(uint256,string,string)", +"ab172cf5": "getCandidateByIndex(uint256)", +"ab179e9f": "currentReleaseCeiling()", +"ab17bad0": "setGasConsume(uint256)", +"ab18af27": "setDepositAddress(address)", +"ab18f6ac": "parseTimestampToYM(uint256)", +"ab19d396": "couponTokenCampaignAddr()", +"ab19fff9": "TokenFrank()", +"ab1a84da": "isCrowdfundCompleted()", +"ab1ac9f6": "BITSDToken()", +"ab1b1cb5": "getSubscriptionLastPaid()", +"ab1b3830": "EIForceCoin()", +"ab1b75f2": "burnUnpaidTokens()", +"ab1bef4e": "getDailyTickets(address)", +"ab1d3add": "assignDispute(string,address,string)", +"ab1d581b": "checkPet(uint64)", +"ab1e96e9": "migrationPeriod()", +"ab1ebb4d": "OneMillionToken()", +"ab1f7929": "setMigrationInfo(string)", +"ab207628": "getAffiliateAmount(uint256)", +"ab209e23": "Manifesto(uint256,uint256)", +"ab2191a2": "Satanshi()", +"ab21b055": "getTickets(string)", +"ab21d58a": "enableCharity()", +"ab225edc": "DepositFund()", +"ab22a640": "getVideoGameOwner(uint256)", +"ab22c561": "getVestingCliff(address,address)", +"ab231511": "lastWithdrawTime()", +"ab23c50d": "AirDropAFTK3SeptSandBox()", +"ab250cb5": "addSubcontract(address)", +"ab253ca6": "buyMinions(uint8)", +"ab2643a1": "commitCollateralToPool(address,uint256)", +"ab273016": "signProposal(uint256)", +"ab27be20": "mine(address,uint256)", +"ab27d755": "confirmOrder(bytes16)", +"ab282655": "removeHouse(address)", +"ab2874cb": "buySlot(uint256)", +"ab28c704": "initialSupportAmount()", +"ab28e8af": "serviceTokensBurn(address,address)", +"ab2a4f8a": "transferRevenue(address,address,uint256)", +"ab2a5772": "setIcoHardCap(uint256)", +"ab2a6dc1": "dealsGetter(address,uint256)", +"ab2af349": "CallCancelled(bytes32)", +"ab2c8b16": "fundingLowcapReached()", +"ab2e5a1f": "play(uint256,uint256,uint256)", +"ab2ebcf1": "priceExpirationInterval()", +"ab2f0e51": "availableBalance()", +"ab30c26d": "getInvestorInforMin(address)", +"ab32775c": "alreadyContains(uint256[],uint256,uint256)", +"ab331a34": "getProperty(string)", +"ab33cbcf": "inxCrowdsale()", +"ab34dc48": "monechainToken()", +"ab351270": "lottery(address,uint256)", +"ab3545e5": "getMember(uint256)", +"ab35678c": "trackCount()", +"ab3640c8": "processPayment(address,uint256,bytes32)", +"ab36e4a6": "milestonesCount()", +"ab37594b": "cancelOrderByMerchant(string)", +"ab383a6b": "getPropertyPrivateModeBecomePublic(uint16)", +"ab3860d0": "test_twoValidEqUint()", +"ab3a32c4": "refundAllExternalPurchase(address)", +"ab3a39c2": "scamSealTokenAddress()", +"ab3b87fe": "setOwner(address,uint256)", +"ab3bd81f": "changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", +"ab3bfac4": "freezeBalance(address,uint256)", +"ab3c04d3": "BAKEToken()", +"ab3cdaf0": "PRE_ICO_BONUS_TIME_2()", +"ab3d2e74": "_clearApproval(uint256)", +"ab3d4e8b": "MembershipPurchase(address,uint256,uint256)", +"ab3dd698": "airdropDiff(uint256[],address[])", +"ab3e9c56": "ChangedInitialPrice(uint256)", +"ab3ed9f0": "DecisionToken()", +"ab3efa83": "tokenSafeLock(uint256,uint256,uint256,uint256)", +"ab3f22d5": "allocate(address,uint256,uint256)", +"ab3f699c": "getOrCreateNextFeeWindowWasCalled()", +"ab400d86": "updatePlayerEth(address,uint256,address)", +"ab40340a": "recordWithdraw(uint256,address,uint256)", +"ab40b01f": "getAddressAnswerKeccak256(uint256,address,address)", +"ab40b65a": "receiveapproval(address,uint256,address)", +"ab413a7e": "getScoreAndCount(address)", +"ab4215cc": "getDataOfGame()", +"ab430d49": "transferToken_toInvestBalance(address,uint256)", +"ab442c59": "getICOToken()", +"ab4459bc": "releaseBountyTokens()", +"ab447007": "setClaimDate(uint256)", +"ab45e2a0": "processPurchase(address)", +"ab464a4c": "launch_date()", +"ab464fa6": "transferMultiDiff(address[],uint256[])", +"ab46cc46": "add_attender(string[])", +"ab470f05": "getCaller()", +"ab473f48": "closeFunding(uint256)", +"ab47f1bf": "getFilledAmount(uint256)", +"ab4865ec": "boardTokensAddress()", +"ab486607": "getLeaderboardLength()", +"ab489f08": "toBytes(address[])", +"ab48f2f8": "PlayNow()", +"ab4955c2": "ReserveWalletUpdated(address,address)", +"ab4a2eb3": "getUnlockableTokens(address)", +"ab4b3929": "updateMinMaxInvestment(uint256,uint256)", +"ab4b4def": "WITHDRAWAL_SCALE()", +"ab4bc414": "bitbgcToken()", +"ab4bf05e": "addSignature(string,int256,string)", +"ab4c4487": "getSystemSalePrices()", +"ab4d0ca9": "multiAdd(address[])", +"ab4e21c4": "OneBlocToken()", +"ab4e8ef1": "getAirdropTokens()", +"ab4ef895": "MB()", +"ab4f643c": "PublisherParametersChanged(address)", +"ab4fa078": "ListAllSince(uint256)", +"ab503e30": "SetminTokens(uint256)", +"ab50bc86": "PubRegistered(address)", +"ab50e7f2": "third_release(uint256)", +"ab5170b2": "getstr()", +"ab519020": "calcShare(uint256,uint256)", +"ab51937b": "startproduction()", +"ab519b0c": "prepare(uint256,address,address,uint256,bytes)", +"ab51b06f": "preSaleBonus()", +"ab51cff2": "getQuarterVATBalance(uint256,uint8,address)", +"ab531efd": "_encodeTokenId(uint256,uint256)", +"ab5366dd": "pendingOwner2()", +"ab53d3b3": "jpotInfo()", +"ab54775d": "lookupSigName(address,address)", +"ab55979d": "changeStaker(address)", +"ab55d1cc": "getDAIBalance()", +"ab5690c4": "enableWithdrawals(address,address)", +"ab56c09e": "Placed(uint256,uint8,address)", +"ab5706ee": "setBaseSummonPrice(uint256)", +"ab5783c4": "StopGame(uint8)", +"ab582eb3": "kickOwner(address)", +"ab5841f2": "updateReserve(address,uint32,bool,uint256)", +"ab590032": "cleanAssetHolders()", +"ab5a7076": "RadiumToken(address)", +"ab5aa302": "_START_DATE()", +"ab5aea81": "Menu07(address)", +"ab5b4456": "use(uint256)", +"ab5db036": "refundICO(address)", +"ab5e28c5": "transfers()", +"ab5e5158": "setNewManager(address,address)", +"ab5ed150": "getOne()", +"ab5efded": "OmegaToken(address,address)", +"ab5f3380": "getVineyard(string,address,uint256)", +"ab5f6b91": "multiCreate(uint256,uint256,uint256)", +"ab5fa2c6": "setITO(address)", +"ab60443b": "changeInviteRate(uint256)", +"ab605eea": "fighterIndexToApproved(uint256)", +"ab60e4e5": "setWebGiftOnceMaxAmount(uint256)", +"ab60ffda": "exp()", +"ab61787a": "proofFailed(address,uint256,uint256)", +"ab619e5a": "StandardToken(string,string)", +"ab6231f1": "RefundedETH(address,uint256)", +"ab62438f": "submitImpeachmentProposal(string,address)", +"ab624cf1": "setPartyA(address)", +"ab630fc4": "kimsOnAuction()", +"ab635b48": "createTokenVestingContract(address)", +"ab63d7f2": "getUniqueId()", +"ab643c07": "getAllBounties()", +"ab643c10": "requestEthereumPrice(address,string)", +"ab64611b": "BitmarkPaymentGateway(address)", +"ab651065": "setESCBCoin(address,address,address,uint256,uint256)", +"ab65c534": "SqueezeTheJuice()", +"ab65cda6": "getDial2Type(uint8)", +"ab65f20a": "mintCards(uint256[],address)", +"ab6680f3": "initAuction(uint256,uint256,uint256,uint256,uint256,address,bool)", +"ab67aa58": "transferFrom(address,address,uint256,bytes)", +"ab686d0a": "setFrontWindow(address)", +"ab6a5d95": "changeBoardAddress(address)", +"ab6a9f0e": "knockoutTeam(uint256,uint256)", +"ab6ad452": "unlockedBalance()", +"ab6ae424": "affWallet()", +"ab6b551e": "isSideBridgeContract()", +"ab6b7e22": "grantBounty(address,uint256)", +"ab6bfe78": "Hongshanchain(uint256,string,string)", +"ab6c291b": "getWiningType(uint256)", +"ab6c5f58": "removePlayer(uint256,uint8)", +"ab6cab71": "PoWH4DSupply()", +"ab6cb831": "UNIToken(uint256)", +"ab6cf42f": "isReservationFull()", +"ab6d8a9a": "gemFab()", +"ab6da028": "TOKEN_FOR_COMUNITY()", +"ab6db199": "dias()", +"ab6ddfa8": "holderBalance(address)", +"ab6def1c": "isShareToken()", +"ab6e1be4": "getTs()", +"ab6e4959": "depositsOfMember(address)", +"ab6e79ed": "getBaseToQuoteReturn(uint256)", +"ab6e9072": "admin_wallet()", +"ab6e988c": "playerVault(address)", +"ab6ef0b1": "purchaseLandWithCC(uint8,bytes32,uint256)", +"ab6f78f0": "SetRecord(address)", +"ab6f9e4a": "votesPerChoice(uint8)", +"ab700624": "toWidthString(string,uint256)", +"ab701ca3": "_upgradeabilityOwner()", +"ab702d48": "train2(uint256,uint256)", +"ab70bba7": "OtxToken()", +"ab70d0c5": "_getEndWeek(uint256,uint256)", +"ab70ee5c": "PoloneumToken()", +"ab71b8ac": "maxBountyTokens()", +"ab727094": "reinvestDivies()", +"ab731fd6": "ownerSetOverride(address,address,bool)", +"ab736b5d": "checkUniqueLockedTokenReceivers()", +"ab73e316": "next(address)", +"ab73f08e": "findOptionId(address)", +"ab74731d": "dividendPayment()", +"ab75a4a2": "angelWheelFinancing()", +"ab75e6c8": "DTXTestToken()", +"ab7748da": "Blocker_resume(bool)", +"ab779505": "NettingChannelContract(address,address,address,address,uint256)", +"ab77b178": "issueCoin(address,uint256)", +"ab7891f5": "deleteSiringWithId(uint256)", +"ab79fd26": "setBeginTimeTS(uint256)", +"ab7a162f": "getInterCryptoPrice()", +"ab7a9691": "isReleaseAgent(address)", +"ab7aa65d": "icoThresholdBonus2()", +"ab7af62f": "setAttackBoostMultipler(uint256)", +"ab7b347c": "BitcoinDominatorERC20Token()", +"ab7b47aa": "_generateInitialPattern()", +"ab7cb211": "allowBuy()", +"ab7ccc1c": "credit(uint256,uint256)", +"ab7df819": "Simscoin()", +"ab7e50ba": "GAX()", +"ab7e9dca": "getPrivilegedBalance(address)", +"ab7ebbce": "startPresale(address)", +"ab7ec692": "primoContratto()", +"ab7f8f12": "masicotestToken()", +"ab802509": "setMintAgent(address)", +"ab80c807": "RareCoin(address)", +"ab81e773": "left61(uint256)", +"ab82d9a0": "challenge(uint256)", +"ab831144": "parseUint(bytes32)", +"ab834bab": "atomicMatch_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])", +"ab840808": "migrateBasicData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ab8425d8": "set_amount(uint256)", +"ab84db68": "releaseArr()", +"ab850a85": "mintGold(uint256)", +"ab8530f8": "Mint(address,address,uint256)", +"ab8620dd": "getStageSoldTokens()", +"ab86ba3a": "bonus3()", +"ab86e0a6": "_setBalance(address,uint256)", +"ab87d816": "getPerson(uint32)", +"ab883d28": "multisendEther(address[],uint256[])", +"ab888539": "setIdentifier(address,bytes32)", +"ab889df9": "DoradoToken()", +"ab89641b": "getTlength50()", +"ab89d8c6": "WGWToken()", +"ab89f2c7": "getCurrentStageId()", +"ab89f870": "setMultiple(uint256)", +"ab8a0360": "Auth()", +"ab8a1595": "test_25_assertGasUsage1400Boards()", +"ab8a288b": "checkStoredFile(string)", +"ab8be231": "setMockedTime(uint256)", +"ab8ca6e9": "getBonusTier(uint8)", +"ab8d01b8": "transferFromToUpdateToken(address,address,uint256)", +"ab8d1daf": "payTokenOwner(address,uint256)", +"ab8d3dc1": "TokenPing(uint256)", +"ab8e0f6e": "Mmcchain(uint256,string,string)", +"ab8e5b01": "testGetLastTime()", +"ab8efb87": "UInt256(int256)", +"ab8f1957": "investedPeriods(uint256)", +"ab8f3c98": "validateBroadcasterSig(string,uint256,bytes32,bytes,address)", +"ab8feb02": "TKN()", +"ab90602c": "registerTicketsToUser(string,address,uint256)", +"ab90a8ac": "createSaleTokens()", +"ab90f855": "maxPromoToons()", +"ab911060": "assertOnlyFrom(uint256)", +"ab91154e": "ownerAddSanSlot(address,uint256)", +"ab91c7b0": "queueLength()", +"ab9213f3": "addAddressReferrals(address[],address[])", +"ab92670e": "Franc()", +"ab929fcd": "submitArticle(string,string,bool)", +"ab92f290": "addNewDividends(uint256)", +"ab948370": "KingToken()", +"ab948374": "gen0EndingPrice()", +"ab95b586": "getEventTimes()", +"ab9611f4": "setCancelableAt(uint256)", +"ab96cc4c": "receivedFunds()", +"ab96d498": "addPublicFundingWhiteList(address[])", +"ab96dd18": "earlyStageLasts()", +"ab97af6c": "initialCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"ab97d59d": "getTokenManager()", +"ab97e196": "revokeAmountVote(uint8)", +"ab98458e": "getUint80val()", +"ab989586": "WMCToken(uint256,string,string)", +"ab998660": "LockMechanismByOwner(address,uint256)", +"ab998939": "RequireDispose(address)", +"ab99deb8": "Expread()", +"ab99e48f": "requestMerge(uint256[])", +"ab9a5caa": "AEStoken()", +"ab9a78df": "priceOf(string)", +"ab9a81c3": "numOfBlocksInMinute()", +"ab9a913a": "generatedEve()", +"ab9ae1be": "isCrowdSaleStatePreSale()", +"ab9af166": "reduceCDFee(uint256)", +"ab9b8637": "medibitICO(address)", +"ab9c1758": "cancelMarginCallOnBehalfOfRecurse(address,address,bytes32)", +"ab9c20d0": "finalizationSuccessHook()", +"ab9cd37e": "withdraw(uint80)", +"ab9d8b8b": "circulatingTokens()", +"ab9d8e4b": "Thankfulness()", +"ab9dbd07": "getID()", +"ab9def41": "hardCapTokensAmount()", +"ab9fe3a1": "importBalances(address,address[])", +"aba00859": "decBalance(address,uint256)", +"aba01e5c": "impl_amountOfWorkpointQueue()", +"aba0e189": "checkGameStatus()", +"aba1017b": "despawnGladiatorAndAwardCoins(address)", +"aba133ea": "GVPE_Token()", +"aba13a2f": "_resetTiles()", +"aba16a02": "offerToChannels(uint256)", +"aba222ed": "nodeRegistrationEnabled()", +"aba23628": "mintPlayers(uint128[],uint256,uint256,uint256)", +"aba3d017": "windowAt(uint256)", +"aba46a93": "etapAddressesLimit()", +"aba47d1a": "getGrapesToBuildWinery()", +"aba61514": "priceT4()", +"aba683fa": "Etbccoin()", +"aba70319": "FreyrTokenLocker()", +"aba7ad0d": "lotteryFeeVal()", +"aba88037": "DARKNODE_FEES_NUMERATOR()", +"aba88766": "claimableHalvingsOf(address)", +"aba89198": "getCurrentCapacity()", +"aba8dfbd": "SecondBonus()", +"aba9650e": "createDepositContract(address)", +"abaa5f3e": "randomDS_getSessionPubKeyHash()", +"abaa9916": "allocate()", +"ababa4a7": "authorize()", +"ababb2dd": "_tryUnlockBalance(address)", +"ababe93d": "distributeBondFund()", +"ababf71b": "GetSummReward(uint256)", +"abacf5d7": "getBoardUpdateTime(uint256)", +"abad3466": "createtoken(string,string,uint256)", +"abadaf9a": "bonusAmount()", +"abadeb06": "teamPeriodsNumber()", +"abaed924": "executeOrders(address[],bool[],uint256[],uint256[],address[],address[],address[8][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"abaf1de9": "setPublicPrice(uint256,uint256)", +"abaf5880": "Crowdsale(uint256,uint256,uint256,address)", +"abaf9457": "localRevenuePercent()", +"abafaa16": "emitIssue(bytes32,uint256,address)", +"abb00601": "addUnpausedWallet(address)", +"abb151c8": "CCICoin()", +"abb1a33a": "SetHotLists(string)", +"abb21618": "changeAirdropValue(uint256)", +"abb254de": "developer_withdraw_ETH()", +"abb2874f": "DezToken()", +"abb29f70": "TinyOracleDispatch()", +"abb2d04b": "editName(string)", +"abb4108e": "addRoles(uint8[])", +"abb41fab": "_reward_masternode()", +"abb43397": "getCanvasBitmap(uint32)", +"abb46619": "DSCToken(uint256,address)", +"abb4fe2d": "MiningRigRentalsToken()", +"abb524a4": "PapyrusSalePhase1(address,address)", +"abb58d20": "Registry(address,address,address,string)", +"abb58fd3": "createLink(bytes32)", +"abb5bf16": "reinverst(address)", +"abb689e1": "payRedemption(uint256)", +"abb69a1a": "getInvoicesByStatus(address,uint256,uint8)", +"abb70034": "getChosenNumbers(address,uint256,uint256)", +"abb721ce": "_deposit()", +"abb743c8": "setUint(int256,uint256)", +"abb8c965": "_setOwner(address,bool)", +"abb9e0bf": "coinIssuedAdvisor()", +"abb9eef4": "YUNXIN2Token(uint256,string,uint8,string)", +"abba87c1": "_prestige()", +"abbadf55": "oobiqoo(address)", +"abbb4695": "setNotifier(address)", +"abbbf451": "getRound0MinDuration()", +"abbc54b0": "changePriceUpdateWaitingTime(uint256)", +"abbc5d2a": "levToll()", +"abbc8afa": "teamPoolForFrozenTokens()", +"abbcb24b": "LEGAL_EXPENSES_ADDR_2()", +"abbdc272": "checkGameStart()", +"abbe3056": "stage2Deadline()", +"abbef24e": "buyDaiWithEth(uint256)", +"abbf7228": "changeBlocks(uint256,uint256)", +"abbf94f8": "PlatoniusToken()", +"abbff658": "Ownable3()", +"abc1c9fe": "requestForRefund(uint256)", +"abc21702": "getPI_edit_25()", +"abc2a40a": "minInvestBTC()", +"abc2ab75": "FinalizeDispute(address)", +"abc32931": "safeTransferFromDataContract(address,uint256)", +"abc33778": "Result(bytes32,address,uint256,bool)", +"abc38cf2": "submitNewClip()", +"abc3bc92": "getReferrerBalance(address)", +"abc40f41": "batchWrite(uint256,uint256,string)", +"abc4558e": "_requireRenewableProduct(uint256)", +"abc45ddc": "BANKOIN()", +"abc48a0d": "minerTotalSupply()", +"abc4cbd3": "transferForTeam(address,uint256)", +"abc6124f": "Bought(uint256,string,address,uint256,string,string)", +"abc63d00": "STARTING_TIME()", +"abc66e82": "dev_fee(uint256)", +"abc6affb": "publicGetUserHistory(address,uint256)", +"abc6fd0b": "disburse()", +"abc897f4": "removeMinterByValue(address)", +"abc8bc4c": "addBomb(uint8,uint256,uint8,uint8)", +"abc8c7af": "marketplace()", +"abc93aee": "left64(uint256)", +"abc9e8c0": "fetchOrdersForPayer(address)", +"abca7290": "feeDeposit()", +"abcafdf8": "prizeProjection(uint256,uint256)", +"abcb7fce": "getTokenAddressHashing(address,uint256)", +"abcb9934": "unlistToken(address)", +"abcc11d8": "lastResult()", +"abcc8a46": "LogEuroTokenOwnerMigrated(address,uint256)", +"abccb043": "modifyMaxContractBalance(uint256)", +"abcccdb1": "agentAddr_()", +"abcd0d9d": "getNewEndTime(uint256,uint256,uint256)", +"abcd7960": "equal(uint256,uint256,string)", +"abcdabcd": "aiGFJ()", +"abcdff1d": "ComputeMyShare()", +"abce03d0": "KoreaRepublicvsGermany()", +"abcf033c": "safeWithdrawalFromCrowdsale(address)", +"abcf1328": "InterestBank()", +"abd05acd": "createDklSaleAuction(uint256,uint256)", +"abd06c3b": "remove(bytes1,bytes1)", +"abd10e07": "failSafeAddWhenGreaterThanIntMax()", +"abd117fe": "GXCSentToETH()", +"abd15c4f": "transferProd(address)", +"abd188a8": "setKyberNetworkContract(address)", +"abd1a89c": "allocTokenHolder()", +"abd225e1": "isStarted(uint256)", +"abd23d95": "getNameByAddress(address,address)", +"abd2adbb": "columns()", +"abd2cc5f": "presaleClosed()", +"abd2ecb7": "isOnExchangeById(uint256)", +"abd437da": "balanceOfCall(address)", +"abd44556": "setBatchDetachCollectibles(uint256[])", +"abd49646": "makerDAO()", +"abd5100d": "referralAmountInvest(address)", +"abd5f3c7": "poolPrice()", +"abd6b000": "CryptoSagaCardSwapMerculet(address,address,address,address)", +"abd6cb3c": "firstStageRaised()", +"abd6ff8e": "setIntValue(string,int256)", +"abd70aa2": "getPoolBalance()", +"abd74e52": "getLastPriceFeedValues()", +"abd796bf": "addAllowedAddress(address,address)", +"abd7f8de": "doEmit(uint256,uint256)", +"abd8537f": "makeSmokeymon(string,uint8)", +"abd89e1e": "preICOmint(uint128)", +"abd8d939": "buyThroughProxy(address)", +"abd936ab": "delegateDklSaleAuction(uint256,uint256,bytes,uint256)", +"abd958eb": "getCurrentBlockValueAndSellPriceForTile(uint16)", +"abda35de": "inMaintainance()", +"abda78ed": "getAltOracles()", +"abdb5ea8": "repayBorrow(address,uint256)", +"abdbe6ca": "CrowdDreaming()", +"abdbf4a3": "UpdateAsk(address,uint256,uint256)", +"abdc5dee": "HumaniqToken(address)", +"abdd0c44": "marginCallOnBehalfOf(address,bytes32,uint256)", +"abdd11a8": "setOpeningTime(uint256)", +"abdd19d9": "setCityContract(address)", +"abdd2430": "AuctionCreated(address,uint256,uint256,uint256,uint256,uint256)", +"abdde3d1": "getEthToTokenOrder(uint32)", +"abde33f7": "right26(uint256)", +"abded6fd": "setANT(address,address,address)", +"abdf9566": "setData_16(string)", +"abdf9bda": "bountyProgam()", +"abe088a7": "financialOfficerAddress()", +"abe1d5a2": "ViewRawDeposit(uint256)", +"abe24a3d": "mulByFraction(uint256,uint256,uint256)", +"abe2a16e": "FeeRate()", +"abe2a18d": "stateChangeAgents(address)", +"abe3219c": "safeMode()", +"abe35312": "getAvailableTokensToSellCurrentPhaseIdx(uint256)", +"abe3d0e3": "logPurchase(address,uint256,uint256)", +"abe3dfd1": "setInitialRate(uint256)", +"abe4136f": "getNickname()", +"abe4932c": "createPostboyAccountForSomeone(uint256,uint256,bytes16)", +"abe5b120": "Registered(address,uint256,uint256,uint256)", +"abe65ec9": "_createDiamond(string,address,string,string,string,string,string)", +"abe6c54d": "deleteCandidates(address)", +"abe6e82f": "setAmountBonuses(uint256,uint256,uint256)", +"abe7008e": "getPlayerValue(uint8[],uint8)", +"abe756da": "dateRelease9()", +"abe75844": "preSaleFirstEndDate()", +"abe7b54e": "readWelfareDetails(address)", +"abe7c08e": "finishVoting(uint256)", +"abe7cc7b": "LOCK_END()", +"abe7f1ab": "remove(address,uint256)", +"abe7f6fe": "ensureAllowance(address,address,uint256)", +"abe8014a": "totalWeiRaisedDuringPreICO()", +"abe9717a": "A2ACrowdsale()", +"abe9f569": "oraclize_getPrice(string,uint256)", +"abea0804": "nAddresses()", +"abea8d79": "setMiningLeader(address)", +"abeb5f9f": "hasQuickBuyEtherToken()", +"abebb746": "_fillOrder(address,address,uint256,address,uint256,uint256,uint256)", +"abebb7f3": "MarketsContract()", +"abec0a00": "BLVK()", +"abed982b": "LockedUpTokensWithdrawn()", +"abedeab4": "init_claim(uint256)", +"abee967c": "initialReward()", +"abefe7ac": "canCreateUnit(uint256)", +"abf03e19": "end_ICO(uint256)", +"abf0661f": "_burnForDeposit(address,uint256)", +"abf0c538": "vestTokens()", +"abf17198": "getShipProductEarningByModel(uint16)", +"abf19801": "createVesting(address,uint256,uint256,uint256,uint256,bool,address)", +"abf26786": "item(uint256,bool,bytes)", +"abf2b5b9": "cancelMtr(uint256)", +"abf2e01c": "isElectionPeriod()", +"abf3260f": "highestEditionNumber()", +"abf45359": "preSaleTokenCap()", +"abf52f53": "independentSellerJoined(address,uint256,address)", +"abf567e1": "setStartTime(uint256,uint64)", +"abf64392": "withdrawInvalidated(uint256)", +"abf74a93": "pitFee()", +"abf74cda": "_issueTokens(address,uint256)", +"abf74d5f": "bury(uint256)", +"abf7b063": "totalSuperAdminsMapping()", +"abf7bfd8": "createUser(bytes32)", +"abf7f83e": "setBonuses(bool)", +"abf8de6b": "TrocarAdmin(address)", +"abf8fbb8": "BCB(uint256,string,string)", +"abf98fe1": "getDepositBalance(uint256,uint256,uint256)", +"abfb589b": "revealBet(uint256,uint256)", +"abfb84a9": "TransferredPrefix(string,address,address)", +"abfc3db2": "MIN_UPDATE(bytes32)", +"abfc99a8": "setPeriodStart(uint256)", +"abfcb627": "subscribe(address,bytes32)", +"abfcb6f8": "checkInfo(uint256,address)", +"abfcc7d8": "endRound(uint256,uint256,address[],address[],bool)", +"abfccf3c": "REKTTokenSale(address,address,uint256)", +"abfceffc": "getAssetsIn(address)", +"abfd5c94": "addEntryInDays(address,uint256,uint256)", +"abfdcced": "setBool(bytes32,bool)", +"abfdd068": "getUserAuctionIds(address)", +"abfdfbe6": "setRentalPricePerDay(uint256)", +"abfe0472": "setMainLocation(uint16,uint16)", +"abfe35ad": "getStakingReward(uint256)", +"abfe40a8": "privateMint(uint256)", +"abfea3c5": "IraPid()", +"abfebfd9": "fifthWeekTokenPrice()", +"abff0110": "broker()", +"abff3fc1": "eventSaleEnd()", +"abffc9ac": "delistToken(address)", +"abffeffc": "create(address,address,address,address)", +"abfffa28": "foundersTokensDisbursed()", +"ac001725": "Goldic()", +"ac00c3e6": "teamEndTimestamp()", +"ac01367f": "CryptovoxelsProperty(string,string)", +"ac016a31": "label(bytes12)", +"ac01b83d": "getAllPlayers(uint256)", +"ac0250f7": "memberAt(uint256)", +"ac0287e2": "arrr(uint256[])", +"ac02c601": "TranferETH(address,uint256)", +"ac03f324": "transfer_status()", +"ac045aca": "soldSoulFor(address)", +"ac0496e1": "setItemToken(address)", +"ac04f5a7": "append(address)", +"ac05e0f7": "getBurnRequestUintMap(uint256,string)", +"ac05e15f": "manuallyMintTokens(address,uint256,uint256)", +"ac066073": "startTimePresale()", +"ac06e302": "SetupCrowdsale(uint256,uint256)", +"ac06eb81": "MDIVToken()", +"ac080f48": "getDebrisStatus(bytes32,uint8)", +"ac0840db": "resultsPublishedTime()", +"ac098ce9": "addAnn(string)", +"ac0a04b2": "signToApproveAddTokenData(uint256)", +"ac0a7223": "buyCost()", +"ac0ab476": "transferToContract(address,uint256,bool,bytes)", +"ac0b1786": "MeibangAccumulationAppreciationAllocation(uint256,string,uint8,string)", +"ac0ba9b1": "payUSDCToProvider(address,address,uint256)", +"ac0c103a": "a_palavra(bytes5)", +"ac0c518d": "preSaleTokenSold()", +"ac0ca722": "AutoreleaseTriggered()", +"ac0db69d": "Log(uint8)", +"ac0eeeb3": "showGuessIds(uint256)", +"ac0f3865": "LogTokensWithdrawn(address,uint256)", +"ac0f90e3": "checkCrowdsaleState(uint256)", +"ac0fdae5": "Record(address,string)", +"ac110d8e": "Take()", +"ac12319d": "adminPayout(uint256)", +"ac128f4f": "roundResults(uint256)", +"ac12bf92": "setAdminStatus(address,uint256)", +"ac12f3e9": "partner1_voted_update_prenup()", +"ac132dc3": "ProtectedUnlock(address,address,uint256)", +"ac133709": "getChannelParticipantInfo(address,address)", +"ac133d3b": "deploymentCost()", +"ac134c08": "rewards_amount(uint256)", +"ac13d9a6": "setPartnerContracts(address)", +"ac1424fd": "generateNewTicket(address)", +"ac145d80": "setOperationsCallGas(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ac14c61e": "PresalePool(address,uint256,uint256,uint256)", +"ac151959": "setmaxprice(uint256)", +"ac1559d2": "totalTokensSent()", +"ac155a6c": "MatryxToken()", +"ac171101": "GAGARIN()", +"ac17cba4": "lemonsRemainingToDrop()", +"ac17d506": "getMemberData(address,address)", +"ac185644": "ownerTimeLastMinted()", +"ac1864b8": "treasuryManagers(uint256)", +"ac187542": "forceEndGame()", +"ac18de43": "removeManager(address)", +"ac194b07": "preIcoStartBlock()", +"ac19c726": "setKeepEth(bool)", +"ac1a13fb": "cancelOrder(uint256,uint32,uint32,uint256,string)", +"ac1a182c": "_calcProportion()", +"ac1a386a": "setWalletAddress(address)", +"ac1a7175": "lockUserInfo(address)", +"ac1aaa1a": "calticket(uint256)", +"ac1ad7d1": "tickerQuery()", +"ac1b14ff": "proxyCall(uint256)", +"ac1bc7e8": "updateDetails(string,string)", +"ac1c1443": "listProducts(address)", +"ac1c3d04": "generateToken()", +"ac1cb329": "withdrawBuyAgent()", +"ac1cd994": "seed_coins_vault2()", +"ac1d0609": "updateWhiteList(address,bool)", +"ac1d6fe2": "changeAllocation(int256)", +"ac1deea0": "RateUpdated(uint256,bytes32,uint256)", +"ac1e17df": "addHolder(address)", +"ac1e4734": "ORCA()", +"ac1e765b": "checkValidity(string,address,string)", +"ac1f7ca1": "totalFundsAvailable()", +"ac20902e": "NormalizeMoney()", +"ac20e2a0": "TOTAL_TOKENCAP()", +"ac210cc7": "wrapper()", +"ac216ae9": "setCheckBonus(bool)", +"ac218c6d": "addressICOManager()", +"ac21bacd": "TokenPriceChanged(uint256)", +"ac22b970": "_medalFreeze(uint256)", +"ac22cec8": "withdrawGasCost()", +"ac230e52": "getHeroName(uint256)", +"ac232383": "getAyantDroitEconomique_Compte_6()", +"ac246c3e": "TIME_TO_STALEMATE()", +"ac256e1d": "RiekCoin()", +"ac25f266": "add_to_whitelist(address)", +"ac26109e": "lockForOrder(address,uint256)", +"ac267435": "volumeType7()", +"ac270c37": "contractUp()", +"ac280cb9": "MAX_STANDARD_SALE_PACKS()", +"ac281ca6": "recordPayment(uint256,uint256,uint256)", +"ac28240d": "transferBackMANA(address,uint256)", +"ac283f5b": "Error(string,string)", +"ac28838b": "getPerson(bytes32)", +"ac28ff48": "collectableTokenBalance()", +"ac297d21": "vendDisciple(uint256)", +"ac2ac86c": "setSmallCapWhitelistParticipants(address[],uint256[])", +"ac2aefd2": "addPigment(uint256,uint256,uint256,uint256)", +"ac2c8bb5": "getTile(uint16)", +"ac2d456d": "setOracleCallbackGasPrice(uint256)", +"ac2d7ce5": "setNextLotteryTTWTokenId4(uint64)", +"ac2e043d": "whitelistMulti(address[],uint256[],uint256[])", +"ac2e064b": "set_maxCWCsPerSaleLessThan(uint256)", +"ac2e2c65": "JULIAN_ADDRESS()", +"ac2f0074": "polls(uint256)", +"ac307773": "claimFunds()", +"ac30da84": "BountyHunter()", +"ac3120a0": "LogContribution(address,uint256,uint256,uint256,uint256)", +"ac31818d": "Better_Bank_With_Interest()", +"ac328187": "initializeTeamVault(address)", +"ac3314a6": "issueLockedTokens(uint256)", +"ac336f7b": "getCurrentConsensus(string)", +"ac355ed3": "_salesprice()", +"ac35bdb4": "sub_session(string,uint256)", +"ac35caee": "transferWithReference(address,uint256,string)", +"ac360d3c": "TokenWrapper()", +"ac375770": "didWithdraw(address,uint256)", +"ac377553": "fillFromCollateral(uint256)", +"ac38eb07": "tokenIdForHandle(bytes32)", +"ac3910a2": "ballot()", +"ac3c27cf": "resolveDisputeSeller(address,string)", +"ac3c49e0": "getMarketMakerAddressFromToken(address)", +"ac3c9952": "batchTransfer(address,uint256[])", +"ac3cb72c": "addApproval(address,uint256)", +"ac3cdf78": "RANGEEND_10()", +"ac3d057d": "releaseBudget(address,uint256)", +"ac3d5084": "initialFrozenTime()", +"ac3d8558": "setExitStake(uint256)", +"ac3dc451": "TorontoRules(address,address[])", +"ac3dc9aa": "startBlockTimestamp()", +"ac3e6b2f": "testSetNotRetractable()", +"ac3e7d24": "addChainyData(string)", +"ac3fc432": "stampCreatedCount()", +"ac403817": "addresIndex()", +"ac41865a": "getPrice(address,address)", +"ac41b4a5": "SignalingEnabled(address,uint256)", +"ac42c3ec": "maxTokenBetValue()", +"ac42ea7d": "rejectBurnRequest(uint256,string)", +"ac42f301": "getNextForwardUserId()", +"ac42f446": "botPhase()", +"ac440d13": "CardsAccess()", +"ac4501d9": "splitTrade(uint256)", +"ac451185": "getGames(uint256,uint256)", +"ac45185d": "adminStewardship(address[2],uint256[7],uint8,bytes32[2])", +"ac457a9d": "ExposureOpened(bytes32,address,uint256,uint256,uint64,uint64)", +"ac460d66": "setTokensContract(address,address)", +"ac46a451": "OpsAddressChanged(address)", +"ac46fa22": "burnEscrow(uint256,uint256)", +"ac4746ab": "EPOCH_LENGTH()", +"ac4758cc": "Takafuly()", +"ac475e5c": "CheckTimeout()", +"ac476a05": "MarketMaker(address,address,uint256,uint256)", +"ac47981c": "issueCertificate(string,string,string,address,address,string)", +"ac480af9": "updateFirstDeposits(uint256)", +"ac482bff": "resume_PRIVATESALE()", +"ac48bd5a": "ethUSD()", +"ac48fcbc": "testTheMultipliers()", +"ac490b08": "parsha()", +"ac49dd5c": "removeTimelock(address)", +"ac4a743d": "ecoFundSupply()", +"ac4ab3fb": "hasRole(address,bytes32)", +"ac4abae1": "lockReleaseDate()", +"ac4b2bae": "newParameters(int256,uint256,int256,uint256)", +"ac4ba3ea": "initManager(uint256,uint256)", +"ac4bd53a": "currentLeader()", +"ac4bed68": "modifyHorsey(uint256,address,bytes32,uint8,uint8)", +"ac4c25b2": "void()", +"ac4c8bf3": "argCurMax()", +"ac4ce2c6": "setAddress(uint256,address)", +"ac4cfa4c": "calcAmount(address)", +"ac4d2e95": "ownerTokensFreeDay()", +"ac4d8a26": "setRepPriceInAttoEth(uint256)", +"ac4d965c": "notZeroAndNotSender(address)", +"ac4ddd9f": "retrieveTokens(address)", +"ac4df041": "donationClosed()", +"ac4e677c": "registerTrack(bytes32,uint256,bytes32,bytes32,bytes32,bool)", +"ac4e73f9": "proposeReverse(string,address)", +"ac4eefc5": "getGoldDataMinted()", +"ac4fb219": "enableLockFlag(bool)", +"ac50713a": "foundingTeamWallets(uint256)", +"ac509050": "getPlayerRoundsKitties(uint256,uint256)", +"ac50a466": "betfortoken()", +"ac50af76": "transferExcessTokensToReserve()", +"ac50b2e5": "getPlayerRoundNumbers(uint256,address)", +"ac51009e": "createBountyTokens()", +"ac51215b": "TokenRegistry(address,int256)", +"ac516951": "setAddressVoteRules(address,address,bool,uint256[5])", +"ac51a36a": "_unpackPetData(uint256)", +"ac51af8e": "transferWithBonus(address,uint256)", +"ac51d3a5": "smileyToken()", +"ac5277a4": "teamSupply6Months()", +"ac552cf2": "getCurrentDukePaid(string)", +"ac5553ce": "phaseDuration()", +"ac5555aa": "initialized(bytes32)", +"ac562666": "freezeCoin()", +"ac566953": "getInfra(uint256)", +"ac56c52b": "makeDealForTwo(string,uint256)", +"ac56f980": "setRealseTime(uint256)", +"ac570411": "getRecipientBalance()", +"ac588536": "delayPayout()", +"ac5895f6": "getSoilHumidityControlLimits(bytes32)", +"ac591e40": "SelectOne(uint256,uint256,uint256,uint256,uint256,string,address)", +"ac592944": "SendPreReserved2()", +"ac59eeeb": "recoverAddressFromWithdrawMessage(uint256,address,uint256,bytes)", +"ac59f0d9": "addToken(address,address,string)", +"ac5aaa5b": "toToteLiquidatorWallet()", +"ac5b3998": "assignLockedBalance(address,uint256)", +"ac5b3dbb": "Michael1011Token()", +"ac5c8535": "storeData(bytes)", +"ac5c867c": "sendCrowdsaleBalance(address,address,uint256)", +"ac5c915f": "burnBonuses()", +"ac5ce03b": "marriageProofDoc()", +"ac5cf934": "usdSeasonAccountRef(uint16,address)", +"ac5cfc3d": "getMsgWaiting(uint256)", +"ac5d2dbf": "typeToken()", +"ac5d51cb": "setAdministrator(address,address,bool)", +"ac5d67e9": "lockAdvisorsTokens()", +"ac5d8745": "voteWithSpecifiedAmounts(bytes32,uint256,uint256,uint256)", +"ac5ddf80": "modify_bool(bool)", +"ac5e7977": "receiverThree()", +"ac5e81a9": "historyPayout(address)", +"ac5ec9ef": "setAcceptPayment(bool)", +"ac5f91a0": "previousMinters()", +"ac6068b5": "isNotExpired()", +"ac60a6cd": "payInvoice(uint256)", +"ac60bbca": "userTokenStats(address,address)", +"ac60c969": "canFirstMint()", +"ac60da79": "TOKEN_SALE3()", +"ac61e92b": "createBet(uint256,uint256,uint256,uint256,bool)", +"ac624f52": "crowdSaleToken()", +"ac62ddb2": "validateMigrationIsPending(string,string)", +"ac62e250": "CertificationSet(string,address,uint256)", +"ac63208d": "SPRToken()", +"ac637c7a": "delegateTo(address)", +"ac64198b": "RSPLT_G()", +"ac6456df": "_betFailure(string,uint256,bool)", +"ac646629": "viewTokenBalance(address,address)", +"ac646756": "pause2()", +"ac656636": "getDepositReceipts(address,int256,uint8)", +"ac65b258": "PresalePool(uint256,address,uint256,uint256)", +"ac66777f": "multiCallTightlyPacked(bytes32[])", +"ac67857e": "ArtsCoin()", +"ac697fb5": "SkySwapToken()", +"ac69c09c": "changeVotingRules(address,uint256)", +"ac6a2b5d": "_withdraw(uint256)", +"ac6a4d6a": "fooInt()", +"ac6a602f": "getCompte_34()", +"ac6af280": "setRates(uint256,uint256)", +"ac6b02c4": "IFCC()", +"ac6b8e00": "transferLock(address,uint256,bool)", +"ac6bc853": "startSpin()", +"ac6c5251": "getWeight(address)", +"ac6d0316": "performUpdateCallPtr()", +"ac6d0fed": "nestedFirst(uint256)", +"ac6d8150": "getPayment(uint256,string)", +"ac6da90d": "qwercoin()", +"ac6e1237": "CrowdsaleEndedSuccessfuly(uint256,uint256)", +"ac6e2db6": "tokenCreationCapOne()", +"ac6ebb28": "CioCoinERC26Token(uint256,string,string,uint256)", +"ac6ee852": "newGanToken(uint256)", +"ac6eead3": "team_token_percentage_total()", +"ac6fe0ed": "Batchdrop(address)", +"ac700665": "getOrdersForBuyer(address)", +"ac700e63": "pauseMigration()", +"ac708f0c": "getProjectedBlockHash(uint256)", +"ac70a1ef": "getTreasures()", +"ac70e6c4": "level_9_percent()", +"ac71045e": "getOffer(address,uint256)", +"ac711cbb": "withdrawEtherAll()", +"ac71abde": "addAccounts(address[])", +"ac72200d": "getMinted()", +"ac72c120": "hasReverse(bytes32)", +"ac72cd7e": "BrokerInt(address)", +"ac73e97e": "lastMiningTime()", +"ac74bcde": "defaultNumberJuror()", +"ac74f2a8": "Bothereum(uint256,string,string)", +"ac767539": "testFailItemStoreNotRegistered()", +"ac76a499": "clientsAverageRating(address)", +"ac76fbf1": "GeoGame()", +"ac7709bc": "setTimedTransfer(uint256,uint256)", +"ac778b8f": "createCertificate(string,string,string)", +"ac77eb8e": "ZingToken()", +"ac781fbe": "TrustTokenERC20(uint256,string,string)", +"ac789e5f": "BlindAuction(uint256,uint256,address)", +"ac78dc16": "payTeam()", +"ac793a60": "createBet(uint256)", +"ac798bd3": "calculateArtCoinSupply()", +"ac798def": "set_sale_arbits_sold(uint256)", +"ac79a4b1": "getCreateMarketCreatorValue()", +"ac7a1b5b": "maxWithdraw()", +"ac7a722e": "updateETHPriceInCents()", +"ac7a95d5": "getNewShroom(uint256)", +"ac7b663a": "_settleInterest()", +"ac7b986f": "lotusWallet75Pct()", +"ac7bb2b4": "removeFromWhiteList(uint8,address)", +"ac7cda53": "changeRegisterBot(address)", +"ac7dce1d": "BsPresale_SNOV(address,address,uint256)", +"ac7e1e0a": "setEtherProceedsAccount(address)", +"ac7f0c48": "calculateWin()", +"ac7f9329": "AUTH_SETMINTAMOUNT()", +"ac7fc263": "multipliers(uint256)", +"ac7ffae3": "updt(uint256,string,uint256,uint256,string,string,address)", +"ac800b32": "transferCanaryOwnership(address)", +"ac82239f": "enableInvite(string,bytes32)", +"ac824fd9": "SHEX(uint256,string,uint8,string)", +"ac8261c9": "optionProgram()", +"ac828200": "_dlgtRet(uint64)", +"ac833fd9": "test_insert_findWithHintNextUpdateHead()", +"ac838774": "addauction(address,uint256,uint256,uint256,uint256,uint256,string,string)", +"ac8388a5": "callthis()", +"ac83ae55": "GAMEToken()", +"ac83e891": "BokkyPooBahsAutonomousRefundathonFund()", +"ac84ed4f": "TronClone()", +"ac856216": "setNumRewardsForTMEUser()", +"ac860a59": "_signPropertyByAgent(address,address,bytes32)", +"ac8641ee": "updateRefundWalletAddress(address)", +"ac8648a2": "mintFeeTokens(int256,uint256)", +"ac869cd8": "setFrozen(address,bool)", +"ac884902": "setResults(bytes32[])", +"ac8860b9": "ProposalExecutedEvent(uint256)", +"ac88c8d8": "verifyAndLiquidate(address,address,address,uint256,uint256,uint256,uint256)", +"ac88ffb2": "feeWithdrawEthAmount(uint256)", +"ac890c4c": "unsetAllowedMultivest(address,address)", +"ac8a2af0": "updateShareholders(address)", +"ac8a584a": "removeOperator(address)", +"ac8aa236": "batchTransferVIP(address[],uint256[])", +"ac8aea24": "transferUnsoldToken()", +"ac8c5e8e": "buyLong(address[2],uint256[3],uint8,bytes32[3])", +"ac8d6030": "removeRequest(address)", +"ac8d6632": "addMasterNodes(address,uint256,uint256)", +"ac8dc6ea": "_decodeData(bytes)", +"ac8e88c2": "_updateSolvency(uint256)", +"ac8f539b": "emergencyDrain(address,uint256)", +"ac8fa644": "transfer_Same_Amounts_of_assets_to_many_addresses(address[],uint256)", +"ac8fbd09": "UpdatePoolTarget(uint256)", +"ac900c2d": "unregisterSeller(address)", +"ac92f4ae": "calldatacpy(uint256,uint256,uint256)", +"ac92fdb5": "getSaleDate(bytes16,uint256)", +"ac940823": "betOnLowHigh(bool)", +"ac957954": "transferDonations(bytes32,address)", +"ac95a2aa": "_createOriginalPainting(uint256,uint256,uint256)", +"ac95be9b": "testico()", +"ac9630fa": "publishGraduatingClass(string)", +"ac964f21": "numProducts()", +"ac9650d8": "multicall(bytes[])", +"ac9663a6": "approveByC(uint256,string)", +"ac96a0b3": "GYG()", +"ac96c65e": "doCancel(bytes32)", +"ac96f981": "authorizeAccess(address,int256,address)", +"ac978cea": "TeamHOMO()", +"ac979688": "transferAnyERC20TokenToBeneficiary(address,address,uint256)", +"ac97ad89": "getTokensFromAddressReturns(address,address)", +"ac985f0a": "townsSold()", +"ac9873c7": "CanaryV7()", +"ac988bdc": "_getStageIndex()", +"ac991b65": "double_blind_sha256(string,address,address)", +"ac996e7e": "resolvePledging()", +"ac99aa69": "recoverEthers()", +"ac99e0aa": "BitImageToken()", +"ac99f7b7": "_setStages(uint256,int256)", +"ac9a252a": "ownershipTransferred(address)", +"ac9a6515": "testTokenOwnershipAfterFinalize()", +"ac9b5671": "setVerifier(address,bool)", +"ac9b5c30": "getCreateMarketfeePerEthInWeiValue()", +"ac9c3b7a": "TokenTotal()", +"ac9c80af": "seed_additional_eth()", +"ac9cd354": "getTransferInfoCount(address)", +"ac9d7e0a": "raisevote()", +"ac9ef8a1": "changeMultisigs(address,address)", +"ac9f0222": "setState(bool)", +"ac9f2b7b": "callDeposit(address,address,uint256)", +"ac9f9d12": "FACHAINStandardToken(uint256,string,uint8,string)", +"ac9fd2b8": "nextLoanInterestRate(uint256)", +"aca00932": "calculateBaseTimeout()", +"aca15663": "transferToExchangeAddress(address,uint256)", +"aca19256": "_logRoundExtensionVolume(uint256)", +"aca233fd": "one_two(uint8)", +"aca31e61": "setEthPerToken(uint256)", +"aca34c11": "getPoolDetails()", +"aca62a5f": "convertAllOldTokens(uint256,uint256)", +"aca66aec": "DVIP()", +"aca67a8f": "getIsNFTAttached(uint256)", +"aca6bef7": "checkPolicy(uint256)", +"aca6fdf2": "getJobWorkerName(uint256)", +"aca7207a": "changeCoolDownTime(uint256)", +"aca7dcfe": "token_swap_supply()", +"aca7fdd4": "initialFunding(address,address,uint256)", +"aca867b3": "secure(address,uint256)", +"aca8dd6b": "test_threeInvalidEqString()", +"aca8e9dd": "setBillboard(string)", +"acaa78cd": "addTransferrer(address)", +"acaab181": "addSomeGas()", +"acab021c": "getTOS(address)", +"acab3e5d": "PricingStrategy()", +"acabbbc0": "getSlogan(uint64)", +"acabd1b9": "setFee3(uint256)", +"acac0b9f": "setMaxPerExchange(uint256)", +"acac9a9f": "undropped()", +"acad94ae": "humanStandardByteCode()", +"acada0d8": "SUNQToken()", +"acaf0278": "contractuallyOf(address,address)", +"acb02504": "getJobDescription(uint256)", +"acb02f7c": "VotePumpCoin0x()", +"acb09dde": "fechVoteNumForCandidate()", +"acb0bdc3": "isPolicyExist(bytes32)", +"acb10351": "setupDutchExchange(address,address,address,address,address,uint256,uint256)", +"acb1516f": "accreditationMember(address,address)", +"acb1e61f": "transferable(address)", +"acb2ad6f": "transferFee()", +"acb2d607": "TokenBet(address)", +"acb2fe3e": "checkBlackListAddress(address)", +"acb39d30": "tokenCreated()", +"acb3c073": "setSwap(address)", +"acb461df": "tavern(uint256)", +"acb5e570": "DepositClaimed(uint256,address,uint256)", +"acb62d7c": "clearConfig()", +"acb6a6aa": "_generateRandomNumber(bytes32,uint256)", +"acb6c69b": "setTrustedClient(address)", +"acb6ca94": "Nomid()", +"acb6e626": "ImageCoin(uint256,string,string)", +"acb6e9b1": "testControlItemStoreNotRegistered()", +"acb6f75c": "PreIco(uint256,address,uint256)", +"acb748e9": "RuletkaTestIo()", +"acb74e73": "canSaleInfo()", +"acb8726a": "distributeTax(uint256,uint256,uint256,uint256)", +"acb88986": "freeze(address,uint64)", +"acb894d2": "fint256(int256)", +"acb902f6": "secondHighestBid()", +"acb93f36": "ratePerHourInWei()", +"acb9656c": "setLockedTokens(address)", +"acb9d6f6": "getStageandPrice()", +"acbaed04": "TootyrTokenSale()", +"acbb471f": "EthermiumAffiliates(address)", +"acbb5759": "SetAction(address,uint256)", +"acbc272b": "newToken(string,string,uint256)", +"acbc3ff4": "keyFoundation()", +"acbc62ae": "TokitDeployer(address,address)", +"acbcabc0": "pantryT()", +"acbd9563": "buyPatent(uint16)", +"acbdb084": "RequirementChanged(uint256)", +"acbdb72c": "getSecondAdmin()", +"acbdea6c": "canUpdateBackWindowAdjustmentRatio()", +"acbe274d": "this_tablet_name()", +"acbf98a7": "endsWith()", +"acbfbaac": "getPOOL_edit_30()", +"acbfbd9e": "Unlock_Tokens(address)", +"acc02119": "DirectDemocracy()", +"acc05ccc": "AddressProxy()", +"acc0a246": "uint256At(bytes,uint256)", +"acc10f11": "collect(address,uint256,uint256)", +"acc12168": "on_block()", +"acc2508b": "payoutNow()", +"acc32da3": "validateIpfsDoc(address,uint256,bytes)", +"acc3b363": "ContractBHVC()", +"acc3c020": "investorsToWithdrawIter(uint256)", +"acc3e283": "test_insert_empty()", +"acc3e5d9": "deathFactor_ii()", +"acc58d24": "_removeStackholder(address)", +"acc5a0dc": "GetPrize()", +"acc68b2c": "usersRef(address)", +"acc69261": "addCompany(address,uint256)", +"acc79f74": "openMail(uint256)", +"acc7f8a8": "getCurrentDatetime()", +"acc823f8": "getSurname()", +"acc88c0d": "decayedBalanceOf(address,address)", +"acc8cb18": "pushTerm(string)", +"acc907a9": "getWinner(address,uint256)", +"acc9138e": "revealBid(bytes32)", +"acc9383a": "dist_privateSale(address,uint256)", +"acc93c9e": "setBonusThresholds(uint256[],uint256[])", +"acc99bb7": "allUnKycedEth()", +"acca2c24": "getFirmFromAuthority(address)", +"acca92e0": "finalize(uint32,bytes32)", +"accb2677": "createCarsTokens()", +"accb4219": "RISHABHToken(address,address)", +"accbdfd0": "IsDistribRunningFalg_()", +"accc4a61": "setPresaleOpeningClosingTime(uint256,uint256)", +"accd932b": "icoClosedManually()", +"accd962b": "tokensaleContributors(uint256)", +"acce4b10": "crowdsaleTargetReached()", +"accf80a4": "RelaunchedCrowdsale(address,address,uint256,uint256,uint256,uint256)", +"accf878a": "ActionPresell(address)", +"accfa48b": "changeRelease18m(address)", +"accfaeba": "LEGAL_EXPENSES_1_TOKENS()", +"acd00a5c": "fillAmount()", +"acd00dc1": "_emitCountryCodeChanged(uint256,uint256,uint256)", +"acd02c30": "disburseToken(address,address[],uint256[])", +"acd04c4c": "_setVersion(uint256)", +"acd105d1": "doomsday()", +"acd19170": "getarg_2()", +"acd1bdb4": "updateMinimumContribution(uint256)", +"acd256db": "setOraclizeBytes(uint256)", +"acd2988c": "setValidBwMarketCaller(address)", +"acd2e875": "refferedBy(address)", +"acd3057a": "jishituihuan(address,uint256)", +"acd3c39f": "frozenAccount(address,bool)", +"acd47b3a": "addAuditOrEvidence(bool,bytes32,uint256,bytes32,uint8,bytes32,bytes32)", +"acd47bc3": "COMMUNITY_BOUNTY_STAKE()", +"acd47e97": "TokenPurchase(address,address,uint256,uint256,bool)", +"acd485fe": "Balicoin()", +"acd4bca6": "vanbexTeamSupply()", +"acd4e110": "Amorcoin()", +"acd4e4aa": "SilverFiftyToken()", +"acd590d3": "preSale2Finished()", +"acd5b7b9": "stopAt()", +"acd5fb23": "isZero(int256,string)", +"acd6a40a": "testUntil()", +"acd6f096": "testThrowsIfSaleIsNotTokenController()", +"acd782b1": "setProtectionPrice(uint256)", +"acd78e3a": "getPayIdAndHeld(uint256)", +"acd84e24": "PLN()", +"acd9277f": "market_DeclareForSale(uint256,uint256)", +"acd94ccb": "frozenDaysForICO()", +"acd9930b": "setHoverText(uint256[2])", +"acd9fd65": "fun1(uint256)", +"acda01f6": "setPendingWalletFee(address,uint256)", +"acda28a1": "bacFund()", +"acda3e10": "UpdateEtherPriceNow()", +"acda6737": "TADPOLE_BOOST()", +"acdaa0d2": "payout(uint256[],address[],uint256[])", +"acdba7c2": "contract_num()", +"acdba91f": "setTokenExpectedFee(address,uint256,address)", +"acdc42f3": "failICO()", +"acdd1454": "mint(uint256,string,string,string)", +"acdd9c5c": "SetRegistrationContract(address)", +"acddb63c": "requestMortgage(uint256[6],string,uint256,uint8,bytes32,bytes32)", +"acddbe1c": "someFunction3()", +"acde39d9": "c4cfee()", +"acdeb5b9": "tokenApprovals(uint256)", +"acdec908": "getBetIdAtRound(uint256,uint256)", +"acdf4f18": "buyBack()", +"acdf67b3": "blockWithdrawBegin()", +"acdf7362": "setLock(address,address,uint256,uint256)", +"acdfa0ac": "acceptNameTranfer()", +"acdfb350": "hariKari()", +"ace1ed07": "get_creator()", +"ace1fab1": "withdrawReserve()", +"ace237f5": "pep()", +"ace30883": "absMinFee()", +"ace36da2": "setChain(address,address,address)", +"ace4283b": "getSecondsToExpiration()", +"ace45552": "endICOStage6()", +"ace51abc": "helperVerifyHash__(uint256,int256,int256[],int256,uint256,int256,int256[],int256)", +"ace523c4": "createReferendum(string,string,uint256,uint256)", +"ace80e0d": "bytesMemoryArray()", +"aceaa365": "_creditTo(address,uint256)", +"aceb87e1": "getUserBio(string)", +"acec0e1d": "setconf(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"acec338a": "setActive(bool)", +"acec460f": "tokenDataValue(uint256,uint256)", +"acec488d": "setAnnouncement(string)", +"aced1661": "keeper()", +"aced5935": "getConfig(address,string)", +"acedc33e": "setDecrementOpenInterest(bool)", +"acee57e1": "airDropPayableMoney()", +"aceecbc8": "disableSelling()", +"acef193e": "FundingCompleted(uint256,uint256)", +"acef6037": "transferToAddress(address,uint256)", +"acefb7bd": "JudgmentCoin()", +"acefd330": "createRandomNumber(uint256)", +"acf0dd57": "getRegionUrl(uint256)", +"acf197b1": "IcoRunnedManually()", +"acf1b06a": "systemCreatedCount()", +"acf1e9fa": "buyNinja(address)", +"acf2f478": "changeTradableFciInSession(bool)", +"acf3508e": "_isLatitude(int256)", +"acf36037": "getCountryData(uint256)", +"acf36e53": "addParent(address)", +"acf372ef": "SetMasterWallet(address)", +"acf400b2": "getSellOrdersBlackMarketComplete()", +"acf4280c": "buildDSApprovalDB()", +"acf50f55": "setItemForSale(uint256,uint256)", +"acf555b8": "regReferrers(address[])", +"acf5c689": "setRequiredBlockConfirmations(uint256)", +"acf5cfbf": "Spend(uint64,address,string)", +"acf67746": "getPlayerTeam(address)", +"acf6d918": "ChangeReturn(address,uint256)", +"acf7aea7": "getCountryLimit(uint256)", +"acf7c1d2": "updateJackpotBalance()", +"acf8bf2a": "channelCount()", +"acf94ed5": "fallbackTriggered()", +"acf975d6": "addCycleAddress(address)", +"acf97a65": "redistribute(address[])", +"acfabbe4": "updateCurrentPeriod()", +"acfb153d": "RoundTime()", +"acfb208b": "transferFee(uint16,uint64,address)", +"acfb2d95": "iHaveABiggerDick(string,string)", +"acfb4b26": "DIVIUMx2()", +"acfd18c6": "FOUNDATION_ADDRESS()", +"acfd35a0": "distributeSuccessfulCampaignEth(uint256)", +"acfd82f2": "grantOwnership(address)", +"acfdfd1c": "deploy(uint256,string,string,address)", +"acfe27d7": "Slashing(address,uint256,bytes32)", +"acfe711a": "Scientific()", +"acff2fce": "forceNSFW(uint256,bool)", +"acfff377": "rollDice(uint256)", +"ad00129e": "bonusOver100ETH()", +"ad00297a": "payDeposit(address,uint256,bytes)", +"ad003aeb": "setUserNotifications(address,address,bool[],bool,uint8[],uint8)", +"ad009062": "newVitaReward(address)", +"ad0096af": "transferFromWithCustomReserving(address,address,uint256,uint256)", +"ad01ed4c": "s3(bytes1)", +"ad0212df": "capitalNeeded()", +"ad0254a6": "BitGuildWhitelist()", +"ad03261e": "supportRebalance()", +"ad03abc5": "enableRealCap(uint256,uint256)", +"ad044f49": "totalFunded()", +"ad04592e": "owner_deposit()", +"ad04d74d": "buyCoreWithBalance(address,address,uint256)", +"ad0570c7": "setUsernameForAddress(bytes32,address)", +"ad07008f": "icoDiscountPercentageLevel2()", +"ad07220f": "forceTransferBalance(address,address,uint256)", +"ad075684": "TotalPayment()", +"ad0767bd": "RECORDPart()", +"ad076994": "verify(address,address,uint256)", +"ad076bfc": "debug_hash256Double_concat(bytes,bytes,bytes)", +"ad09019d": "oraclize_getNetworkName()", +"ad09202a": "confirmDealCompletionByDoctor(bytes16,bool)", +"ad093409": "getTicketOwner(uint256)", +"ad0a58c8": "checkAndDeclareWinner(uint32)", +"ad0a6cc3": "attackTileForExistingUser(uint16,uint256,bool)", +"ad0af8c8": "MariamTestCoin()", +"ad0b2bec": "redeemWinnings()", +"ad0b38a2": "getAppId(string)", +"ad0b6013": "DEFAULTED_STATUS()", +"ad0bc739": "testConcatMemoryZeroLength()", +"ad0be174": "zHQNumber()", +"ad0c3dff": "icoStartedAt()", +"ad0d3713": "getTittyOwner(uint256)", +"ad0d4c3d": "HaiWang(uint256,string,string)", +"ad0dd79f": "usersWithdrew()", +"ad0e053b": "getPointerOwner(uint8)", +"ad0e13bb": "toB32(bytes,bytes,address)", +"ad0e8bc7": "givepoints(address,uint256)", +"ad0e9053": "set_pauseReturn(bool)", +"ad0f2916": "coinPrice()", +"ad108280": "BECTStandardToken(uint256,string,uint8,string)", +"ad1088e4": "didProve()", +"ad111feb": "DFSToken()", +"ad11cc1d": "claimC1()", +"ad11fe44": "revokeAllowance(address)", +"ad121e33": "fundFounder()", +"ad1288c8": "forkTransferFrom(address,address,address,address,uint256)", +"ad12cc0b": "removeLibrarian(address,address)", +"ad13eb02": "createScanner(uint256)", +"ad150aec": "calculateHeldTokenDistribution()", +"ad156d34": "AllocateBountyAndEcosystemTokens(address)", +"ad166aae": "MyTest(uint256,string,uint8,string)", +"ad180328": "_check(address,address,uint256)", +"ad188be0": "userBetContribution(address)", +"ad1892b2": "sendEthersToRefundAddress(address)", +"ad1896db": "resetElectionPeriod()", +"ad18ad0c": "quote(address,uint256,address)", +"ad1922b0": "setIcoCloseTime(uint256)", +"ad19bd26": "getVoteCommit(uint256,address)", +"ad19e993": "_callSender(bytes32,address,address,address,uint256,bytes,bytes)", +"ad1a17b4": "getPaymentCount(uint256)", +"ad1a38be": "_createNarco(string,string,address)", +"ad1a7d0c": "getBook(bytes32)", +"ad1aa252": "withdrawUnsentTokensForOwner()", +"ad1b1f8b": "settleJackpot()", +"ad1b3909": "coinage()", +"ad1be7c1": "softCapClose()", +"ad1c582a": "divUIntValue(bytes32,uint256)", +"ad1c5d6c": "updateShareCrystal()", +"ad1c61fd": "test(uint256,string)", +"ad1d0dcf": "exodus()", +"ad1def42": "registeredAddress(address)", +"ad1ef61e": "donkeyInvested(address)", +"ad203bd4": "subMonths(uint256,uint256)", +"ad207feb": "ethTeamWallet()", +"ad217ae5": "stats(uint256)", +"ad220cf1": "currentPrivateSale()", +"ad221195": "transferTokenFrom(address,address,uint256)", +"ad221321": "withdrawTimes(address)", +"ad22453c": "BRANDS()", +"ad226122": "presaleFallBack(uint256)", +"ad22980a": "TopChainCoinMintFinished()", +"ad22ccc0": "committeeJoinVoters(address,address)", +"ad22d4a2": "get_last_item_in_state(bytes32)", +"ad2334a0": "spinnerModulus()", +"ad2377c1": "pausePriceRaise()", +"ad23ad92": "AfriHealthCoin()", +"ad23de63": "isAddressWhiteListed(address)", +"ad23e038": "HelloToken(uint256,string,uint8,string)", +"ad23fdc3": "deCompose(string)", +"ad23fde0": "breed(uint256[2],uint256[2],uint256)", +"ad247dd9": "permissonedAccounts(address)", +"ad24d512": "TECHNOBITToken()", +"ad25ce57": "bidOnSaleAuction(uint256)", +"ad266df8": "ARA(uint256,string,uint8,string)", +"ad26f6e1": "SetParticipantName(address,address,string)", +"ad27b14d": "cancelBet(bytes16)", +"ad28ff88": "blacklist(address,address)", +"ad295b26": "getDepositInstanceCount()", +"ad29ca6d": "eosCrowdsaleAddress()", +"ad29ddaa": "removeRound(uint256)", +"ad2a0a7b": "_changeEternalStorageContractAddress(address)", +"ad2a39d6": "secondStartTime()", +"ad2a9c5f": "MIN_CARD_PRICE()", +"ad2af501": "Games(uint256,string,uint8,string)", +"ad2b14d1": "changeCrowdsale(address)", +"ad2b1e03": "privilegedBurn(uint256)", +"ad2b260a": "decimalNum()", +"ad2b3037": "getLeaves()", +"ad2ba325": "splitStr2Int(string,string)", +"ad2bb1b3": "blockAddress(address)", +"ad2bbf9c": "_redeemByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ad2c1632": "ArenaplayToken()", +"ad2d10b2": "initializeReservedVault(address)", +"ad2da239": "calculateVote(uint256,uint256,uint256)", +"ad2daa48": "roundTimeRemaining()", +"ad2de16d": "acceptTxTask(uint256)", +"ad2e1d49": "getHeirachy(bytes32)", +"ad2e6aff": "WithdrawEarnings()", +"ad2e8c9b": "getDuration()", +"ad2ec740": "PRICE_9()", +"ad2fad33": "setSpawnProxy(uint32,int256,address)", +"ad2fea7c": "removeMinter(int256,address)", +"ad317c23": "mileagePointPrice()", +"ad319bab": "TokenERC20AC(uint256,string,string)", +"ad31e845": "_tag(uint256,string)", +"ad3286fc": "AddToken(address,uint8)", +"ad32a40f": "Fund(address,address,address,address,address)", +"ad32f925": "makeAvailable()", +"ad3335b5": "setINNBCTokenAddress(address)", +"ad33513f": "refundAmount()", +"ad33e21d": "getReferralBonus(uint256)", +"ad3429be": "developmentTokens()", +"ad344465": "AccessorySeriesCollection(uint8)", +"ad344bbe": "sgtExchanger()", +"ad35bdb0": "extraSupply()", +"ad35dcd3": "AGAVE(string,string)", +"ad36c593": "getOwnerOfCampaign(bytes32)", +"ad3704c5": "getApplicantsLength()", +"ad374f5b": "enableClaimTokens(bool)", +"ad376113": "addDevReward(uint256)", +"ad379089": "canSettle(bytes32)", +"ad37c41b": "blackListEnabled()", +"ad381cb7": "getCurrentRoundIsActive()", +"ad38867e": "checkWinner()", +"ad388896": "setWinnerAndEndEvent(bytes32,bool,string)", +"ad389d5d": "isValidAdversary(uint8,uint8)", +"ad38bf22": "updateBlacklister(address)", +"ad38d6f1": "whitelistWallet()", +"ad38fba5": "transferEthTo(address,uint256)", +"ad395939": "withdrawContributorPot()", +"ad395ad3": "removeFromContractIDArray(address)", +"ad3a05ca": "BlackToken()", +"ad3b1b47": "withdrawFees(address,uint256)", +"ad3bf1f1": "refundPeriodOver()", +"ad3c0b9d": "CROWDSALE_DURATION()", +"ad3c8b22": "addSkipPrice(uint256)", +"ad3c901c": "getPendingById(uint256)", +"ad3cd883": "changeContractName(string)", +"ad3cf852": "redeemLuckPool()", +"ad3de14c": "getMap()", +"ad3e0ed2": "getAffiliateSenderPosAmount(uint256)", +"ad3eb71f": "plcrFactory()", +"ad3ef46d": "RealstateOceanProject1(address)", +"ad3f972e": "deleteChild(address,address)", +"ad3ff3c1": "houseAlwaysWins()", +"ad401842": "setDateMainStart(uint256)", +"ad40256f": "reclaimableOwner()", +"ad418e66": "strategicReserveSupply()", +"ad41b628": "MHCToken()", +"ad447a19": "getBalanceDB()", +"ad449198": "returnBorrower(uint256)", +"ad4493fe": "checkPoint(uint8,int256,uint16)", +"ad44c205": "Nudge()", +"ad44e73b": "unwhitelist(address[])", +"ad450b72": "SupplyLimitChanged(uint256,uint256)", +"ad452254": "BsToken_SNOV()", +"ad459a1c": "CurrentAirdropped()", +"ad468489": "register(bytes32,address,bytes32,bytes32,bytes32)", +"ad470886": "token_approve(address,address,uint256)", +"ad4749f4": "setupPeriodForFirstStep(uint256,uint256)", +"ad474b9a": "Engraved(address,string,string,bytes32)", +"ad475113": "PRESALE_BONUS_VOTING()", +"ad478dda": "investmentUpperBounds()", +"ad483188": "setCCH_edit_12(string)", +"ad48636a": "secondBonusSalesEnds()", +"ad487790": "reveal(bytes32,address)", +"ad487f3c": "LogFreeze()", +"ad48d611": "marketToken()", +"ad4946ee": "removeAddressFromNonzeroBalancesArray(uint256,address)", +"ad498ce1": "RATE_NO_DISCOUNT()", +"ad49f595": "checkAddress(address,address)", +"ad4a7bd9": "lockTokensForAs(address,address,address,address,address,address,address,address,address)", +"ad4ac3de": "LoveCoin()", +"ad4b243b": "buyOneMinuteLottery(uint256,uint8[],address,bool)", +"ad4b2ca4": "batchdrop(address[],uint256[])", +"ad4b558c": "monsterIndexToOwner(uint256)", +"ad4c05f1": "setResourceForStar(uint8[5],uint16[5],uint32[5])", +"ad4cd0d6": "stdlib()", +"ad4dde0f": "transferOwnershipOfItemsStorage(address)", +"ad4e2f77": "addDragon(address,uint256,uint256)", +"ad4e39f3": "getLendingItemInfo(address,uint256)", +"ad4f0e3a": "DevsmartCoinFive()", +"ad50039f": "setTechBonus2(uint256,string)", +"ad5022a5": "Votes()", +"ad506098": "WowMusicDiamondToken(address)", +"ad509c1d": "sendToken(address[],address[],uint256[])", +"ad50dd1f": "endPrivateSaleStage()", +"ad53322b": "donationAmountInWei(address)", +"ad534d9c": "logCoinAgeRecord(address,address,uint256,bool)", +"ad53be1d": "priceLeRT()", +"ad544dcb": "testSetNotUpdatable()", +"ad549e53": "set_participant_arbits_kyc_whitelist(address,bool)", +"ad5511a5": "_setTokenSeed(uint256,string)", +"ad559fd6": "setHigherPricePercentage(uint256)", +"ad562965": "getReceiptRoot(bytes32)", +"ad5632e6": "storeAuthenticity(string)", +"ad5688d8": "setCountryPicture(uint256,string)", +"ad5780af": "clearDNSZone(bytes32)", +"ad57a2df": "unrestrict()", +"ad57ceb4": "ethForMilestone()", +"ad58a7d2": "getSettingState(uint256)", +"ad59ffd1": "maxAmountBonus()", +"ad5a157d": "promoMoney()", +"ad5a8f29": "canEnterPool(address,uint256)", +"ad5b7189": "hasBooster(address)", +"ad5b896e": "refundMany(address[],uint256[])", +"ad5bfcb5": "getServiceStatByAddr(uint64,address)", +"ad5c1687": "offchainUpload(address[],uint256[])", +"ad5c4648": "WETH()", +"ad5c613d": "purchase(bytes)", +"ad5cd9e7": "startSTO()", +"ad5d2862": "getWinnings(uint256)", +"ad5d638d": "minFundedValue()", +"ad5dabb0": "assertYoungerBalance(uint256,uint256)", +"ad5dabca": "QatarCoin()", +"ad5e2cd0": "addPresale(address,uint256)", +"ad5e46cb": "hasError()", +"ad5f3433": "sumHardCapICOStage4()", +"ad5fb2b1": "seedVerification(string)", +"ad60540b": "MoccaCoin()", +"ad605729": "getParticipantCount()", +"ad606c72": "devWithdraw()", +"ad60fb73": "mint(string,uint8,string)", +"ad615f40": "getCrosCounter()", +"ad621b14": "BaoMaToken()", +"ad622d0e": "addDoctors(uint256,uint256,string)", +"ad62bda5": "setRoundLength(uint32)", +"ad62f1ca": "mintFor(uint256,address)", +"ad631abe": "BLO_PER_WEI()", +"ad63a469": "totalUsedTokens()", +"ad64ae4b": "registerModule(address)", +"ad64fa5c": "MINBET_forORACLIZE()", +"ad652cdd": "InternetMarket()", +"ad655998": "addAuthorizedInsertAgent(address)", +"ad65d76d": "ethToTokenTransferInput(uint256,uint256,address)", +"ad66de24": "impl_lock4Dividend(address,uint256)", +"ad66e52a": "etherBalance()", +"ad677d0b": "join(bytes32)", +"ad686011": "returnPurchase(address)", +"ad68ebf7": "migrate(address,uint256)", +"ad69644b": "setBestAngel(uint32)", +"ad69caa5": "expMod(uint256,uint256,uint256)", +"ad6a0546": "creatorsLocked()", +"ad6ad449": "HodlerMining()", +"ad6aefbb": "BeatTokenPreIcoStarted()", +"ad6b2c90": "getListTokens(address,uint256,uint256,uint256)", +"ad6b5d04": "amountClaimed()", +"ad6b9499": "getContactRecord(string)", +"ad6c8762": "paymentChannelsCount()", +"ad6cd14e": "EthLongExercised(address[2],uint256[8],uint256,uint256)", +"ad6d9b89": "bytetherOVAddress()", +"ad6dfe5c": "getPRewardId(address,uint256)", +"ad6e155e": "setContractPreICO(address)", +"ad6eba9f": "getSingleSubjectByAddress(address,uint256)", +"ad6eff22": "getUserType(address,address)", +"ad6f80ff": "getSignatures()", +"ad70810a": "getChainDrawings(uint256)", +"ad70924a": "stablize()", +"ad70fbc8": "QuickChain()", +"ad714012": "calculateMatchOutcomesForRoundId(int256)", +"ad71766e": "getWeiSoldToday(address)", +"ad717e8c": "_oraclizeQueueRound()", +"ad71a1fd": "MAX_SUPPLY_OF_TOKEN()", +"ad71c687": "registerSystem(string,string,string,string)", +"ad71ec8a": "YiWenTest(uint256,string,string)", +"ad7222c1": "tokensAmountFrom(uint256)", +"ad723faa": "MChip()", +"ad72dce9": "buildFactory(uint8,uint256)", +"ad731de7": "createPromoCollectible(uint256,address,uint256)", +"ad732eea": "send(bytes20[])", +"ad738845": "payVATToGovernment(uint256,uint8)", +"ad7411e1": "CreateNertia(address,uint256)", +"ad7430cc": "RECEIVER()", +"ad74f9bc": "calculateCurrentPrice(uint256)", +"ad7554d9": "setDoubleRewardEndTime(uint64)", +"ad76325f": "finishProposalVoting(uint256)", +"ad7639fe": "TokenPurchase(address,address,uint256,uint256,string)", +"ad76423e": "DelphiToken()", +"ad764780": "OpenController(address)", +"ad7738b6": "MAX_TOTAL_ADOPTED_AXIES()", +"ad78dc8e": "totalWannaBuyAmount()", +"ad78f31a": "ticketStringFromAddressBytes(bytes32,address)", +"ad796b5d": "TOKEN_SUPPLY_AIR()", +"ad79c927": "TokenSwap(address,address,address)", +"ad7a14e1": "tokenRemainPublicSale()", +"ad7a5ff9": "autoDistributionViaETHContributions()", +"ad7a672f": "totalBalance()", +"ad7b09c5": "InitIcoController(address)", +"ad7b6884": "editContributors(address[],uint256[],uint256[])", +"ad7b6cb5": "bountySEEDSinWei(address[],uint256)", +"ad7bafc7": "mint(int256,address,uint256,uint256)", +"ad7bfd2d": "Cashchain()", +"ad7c66d0": "sellAllMilk()", +"ad7d59fc": "checkPlace()", +"ad7df080": "consul()", +"ad7e01c8": "wolkGenesis(uint256,uint256,uint256,address,address)", +"ad7e262c": "hasEmployerMinRatingsCount(address,address,uint256)", +"ad7e74f9": "addJobSkill(uint32,bytes32)", +"ad7e7cfc": "UpdateMaintenance(bool)", +"ad7ead58": "walletLock()", +"ad7eb560": "block5()", +"ad7ed3c2": "executeLottery(address)", +"ad7ed923": "ElepigToken()", +"ad7eee9f": "updateInt256s(bytes32[],int256[])", +"ad7f02b5": "balanceOf(address[16],address)", +"ad7f401b": "creatorInited()", +"ad7f9d76": "getInvestorBuyers()", +"ad7fa43c": "settleFeeSecondPart(address,uint256)", +"ad7fadc5": "buy(address,address)", +"ad7fff7c": "hasWorks(bytes32)", +"ad8088a5": "XdacToken()", +"ad80a7b4": "totalUndistributedDividends()", +"ad80ef94": "tokenExchanges(uint256)", +"ad810fe5": "holderIndex(uint256)", +"ad818071": "showStats()", +"ad81cd90": "villagesSold()", +"ad81d6f3": "createDefaultLinglongCat(uint256,uint256,uint256,address,uint256,uint256)", +"ad81f3be": "Barneys4HackerSpaceToken()", +"ad82ae61": "internalDoubleTransfer(address,address,uint256,address,uint256)", +"ad82dcac": "testBlockhashCorrectFee()", +"ad838107": "_checkDestination(address,address,uint256,bytes)", +"ad83bfce": "GetOwner(string)", +"ad845d2d": "toBytes()", +"ad84e1be": "createTokenContract(address)", +"ad84e2a6": "getCrab(uint256)", +"ad84eaab": "minimumPurchaseAmount()", +"ad869e1a": "_batch3_icosaleEndTimestamp()", +"ad86c10d": "GamingCoin(string,string,uint8)", +"ad86ee0b": "passOnContract()", +"ad8718c2": "Create(uint256,uint256,uint32)", +"ad8733ca": "multisend(address,address[],uint256[])", +"ad879a46": "cancelBetByA(uint256)", +"ad886326": "_isSignedOwner(bytes32)", +"ad889f03": "USER_TIMEOUT()", +"ad88d8a5": "try_pay(address,bytes12)", +"ad88f53e": "setFirstStageEndsAt(uint256)", +"ad89e64b": "_updateLandData(int256,int256,string)", +"ad8a9c8e": "ownerSetOwner(address)", +"ad8ae3ae": "poke(address,bytes32)", +"ad8b4698": "COMETUBU()", +"ad8b6657": "_createDrone(address,uint256,bool,bool)", +"ad8c3cd2": "setTank(address)", +"ad8ce06b": "gasPerTx(bytes4)", +"ad8d36cb": "CCH_EDIT_2()", +"ad8d5f48": "exec(address,bytes,uint256)", +"ad8ead69": "createTeam(string,uint256)", +"ad8ed335": "__proxy(address)", +"ad8f5008": "strike()", +"ad8f905d": "PoolPrize(uint8,uint8,uint256,uint256)", +"ad8fccf3": "freezeMulti(address[],bytes32[],uint256[],uint256[],uint256[])", +"ad906661": "add_to_ico()", +"ad913633": "getOriginalOwner()", +"ad9171df": "getRemainingLimit(address,address)", +"ad92e46c": "getNumBettings()", +"ad93640f": "TRANSFER_PROXY_V2()", +"ad94d901": "ownsAll(address,uint256[])", +"ad9657f4": "createCoin(uint16,string)", +"ad966a03": "_bytes32ToString(bytes32)", +"ad973d74": "addCustomer(address)", +"ad976c3e": "setData_24(string)", +"ad979417": "setPoolName(string,uint256)", +"ad98ebaf": "ProjectManager()", +"ad994621": "answerDeliveryChallenge(address[2],uint64,bytes32[],uint256[],uint256[2],uint256[2],uint256,bytes32[3],uint8,bytes32[])", +"ad9a9f17": "SINGLE_BLOCK_LEN()", +"ad9abf32": "payDividends(uint256,uint256,uint256)", +"ad9ac1bc": "addToAllocationList(address,uint256)", +"ad9b4fc5": "Win(address,uint8,uint256,bytes32,bytes32,uint256,uint256)", +"ad9b8024": "price(address,uint256)", +"ad9bdebb": "isReleasable()", +"ad9c280f": "setLoveUrl(string)", +"ad9d4ba3": "depositEth(address)", +"ad9df055": "adminClaimAirdrop(address)", +"ad9e3e85": "My2Token()", +"ad9ec17e": "setGreyToken()", +"ad9f20a6": "MIN_PRICE()", +"ad9f9a68": "withdraw_unclaimed_balance(uint256)", +"ad9fb75e": "teamDate()", +"ada0114c": "Firstsale()", +"ada018e1": "setBurnFeeAbs(uint256)", +"ada0618a": "CATSPACE()", +"ada06dac": "tokenSaleCosts()", +"ada14698": "killSwitch()", +"ada199dd": "setFoundersTokensPercent(uint256)", +"ada1a34b": "resetVoteKindnessEvery()", +"ada1a8f7": "VUP_PER_ETH_ICO_TIER2_RATE()", +"ada1b74e": "finalTokensIssueTime()", +"ada1f3ad": "ReferralContract(address,address,address)", +"ada24dfc": "KeberuntunganAcak()", +"ada2cced": "getNumberSuppliers()", +"ada44092": "addClient(bytes32)", +"ada4c022": "getAvailableWinnings(address,address)", +"ada5ba01": "getNodeIndexId(bytes32)", +"ada5cf63": "initializedBlock()", +"ada636ce": "compareStages(string,string)", +"ada65728": "Funding_Setting_funding_time_end()", +"ada69935": "PonicsToken(string,string,uint8,uint256)", +"ada6b1d9": "collectedCent()", +"ada6e537": "AuctusBountyDistribution()", +"ada7061b": "add_hard_limit(uint256)", +"ada791f9": "Airdrop(address,uint256,uint256,address)", +"ada8938f": "moedaToken()", +"ada8a7d5": "presaleTotalNumberTokenSold()", +"ada8cfcd": "removeUint256s(bytes32[])", +"ada8e5ef": "IsCanAllotAward()", +"ada993ad": "Airdrop(address,uint256,uint256)", +"adaa19cc": "TGMtoken()", +"adaa3c73": "enableBets()", +"adaa730e": "RollDice(address,uint256,uint256,uint256)", +"adaaa1e1": "addThing(bytes32,string,bytes32,string)", +"adaabaaa": "bonusEndDate()", +"adabc7f8": "changeTransferStep(uint8)", +"adacb0fa": "CloseChannel(bytes32,uint8,bytes32,bytes32,uint256)", +"adaccd74": "getNickname(address)", +"adad1cb1": "VisperNetwork()", +"adad4873": "distributePresale(address[],uint256[])", +"adad6d50": "KujiraFund()", +"adad9c4e": "increaseMaxCap(uint256)", +"adadb11f": "setJotter(address)", +"adadc77f": "unown()", +"adae08dd": "createItem(uint256,uint256)", +"adaea0b9": "fund(address,address,bool)", +"adaf28d1": "whichPeriod(address,uint256)", +"adaf7c84": "PreICOStartTime()", +"adaf8c79": "chargeOn(address,uint256)", +"adb187bb": "validRequest(bytes32[],bytes5,address)", +"adb1ad42": "HelloGoldToken(address)", +"adb1cd73": "getUnpaid()", +"adb1f640": "getScore(uint256,bytes32)", +"adb27ded": "tokenBonusTimes(uint256)", +"adb2e02f": "internalRegisterCert(bytes32,bytes,uint256)", +"adb37277": "setWebsiteUrl(string)", +"adb3a3a6": "deadlineToFreedTeamPool()", +"adb42139": "totalCrowdsale()", +"adb44a32": "updateUint256(bytes32,uint256)", +"adb4af3e": "getLatestUpdate()", +"adb4d990": "assigned()", +"adb506a6": "FACTOR_5()", +"adb5735c": "withdrawFor(address,address)", +"adb5777c": "getDrawBlockNumberByWinner(address)", +"adb5a4f1": "ListReservePairs(address,address,address,bool)", +"adb5a54d": "eccVerify(bytes32,uint8,bytes32,bytes32)", +"adb5da34": "_getClientPaidUpTo(address)", +"adb610a3": "currentNonce()", +"adb67c41": "XiongDiLianToken(address,address)", +"adb6859d": "directorTransferShareRequired()", +"adb69560": "createController()", +"adb6e8f5": "GetDislikeCount()", +"adb6f63f": "commitments(address,address)", +"adb746dc": "bltOwned()", +"adb77576": "etherLeaked(uint256)", +"adb8249e": "increaseApprovalPreSigned(bytes,address,uint256,uint256,uint256)", +"adb848df": "NZD_Omnidollar()", +"adb88cb9": "totalSupplyIco()", +"adb9066e": "COLDITION()", +"adba54e0": "commandPercent()", +"adbc9bed": "getRestWhite(uint256,uint256)", +"adbd9753": "issuingTokenOwner()", +"adbda5a8": "voteToKickoffNewFiscalYear()", +"adbde797": "updateTrustRankAfterStoryExpiry(bytes12,bytes12[])", +"adbe2f6f": "abortive(uint256)", +"adbefffe": "getAddressBetsForEvent(bytes32,address)", +"adbf29fd": "getPlayerDataForGame(uint256,address)", +"adbf54b7": "initialBalanceForMarketingCampaign()", +"adc02a64": "addAsset(string,address)", +"adc042bf": "mint(int256,uint128)", +"adc06ccd": "batchDoubleBalances(address[])", +"adc128eb": "Today()", +"adc1463a": "ZLCC()", +"adc1b956": "lastClaimed()", +"adc1db89": "SpaceKIMToken()", +"adc1f702": "LanaCharleen8()", +"adc20b1c": "lastMint(address)", +"adc23f03": "canClientTerminate(bytes32)", +"adc29028": "calcAndSetPlayerTotalCanAccept(address,uint256)", +"adc2c98a": "edge()", +"adc38b2f": "iterateTurn(uint16)", +"adc4739a": "setWLAddress(address)", +"adc4f654": "ChargeEnergy(uint256)", +"adc54d30": "transferFromPresale(address,uint256)", +"adc6d49d": "_executeTransaction(uint256,address)", +"adc73d46": "getPlayersOfOwner(address)", +"adc7d448": "_clearAttackLog(uint256)", +"adc84a42": "SVEToken()", +"adc87956": "teamVestTokenAllocation()", +"adc8b4cf": "empowerAdmin(address)", +"adc8f941": "addExclusionFromTokenUnlocks(address[])", +"adc9772e": "stake(address,uint256)", +"adca32e7": "setFiscal(uint256,uint256,uint256,bytes32)", +"adca8ac6": "addToTransferWhiteList(address,address)", +"adcaea0a": "simulated_snt(address)", +"adcb0993": "LILE()", +"adcccb6f": "Obirum()", +"adcd2632": "saleTeamAddress()", +"adcd4aaf": "sendNegativeWhuffies(address,string)", +"adcd905b": "setListener(address)", +"adcde05f": "averageKimSalePrice()", +"adce1c5f": "ensResolver()", +"adce80d5": "mStopped()", +"adcf4831": "registerAuditOutcome(address,bytes32,bool)", +"adcf59ee": "isOwnerOrOps(address)", +"adcf780a": "disallowTransferBetweenUsers()", +"add052b4": "getStateFunding()", +"add08f87": "coinbaseAmount()", +"add1cbc5": "TOKEN_TRANSFER_PROXY_CONTRACT()", +"add2af69": "releaseLockedTokensByIndex(address,uint256)", +"add37100": "getOrderHash(address,uint256,address,uint256,address,uint256,uint256,address)", +"add3bf39": "manualTransferTokensToInternal(address,uint256,uint256,uint256)", +"add3fa39": "sharing_confirmed()", +"add40ced": "getKeyID(bytes20,uint8)", +"add43c59": "EtherTopDog()", +"add466a4": "chfCentsPerTokenWhileBonus()", +"add4bfb0": "createDragon(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint16,uint16)", +"add4c784": "getResult(bytes32)", +"add54303": "setBlock(uint256,uint256,string)", +"add5eb02": "setAdminVariables(uint256,uint256,uint256,uint256)", +"add68daf": "amountOfBidders(uint256)", +"add7690b": "period0End()", +"add769a3": "POOToken()", +"add82871": "strEqual(string,string)", +"add84df3": "changeGoal(uint256)", +"add94f25": "IDAP(address,address,address)", +"add98c70": "dispute(bytes32)", +"adda1d4d": "receiveListing(bytes32,uint256,bool,address,uint256,uint256)", +"adda8cf4": "Propvesta()", +"addace62": "getYesVotes()", +"addad094": "VLOGS()", +"addb246b": "MIN_SITE_ID()", +"addb51ff": "monsterCreator()", +"addd5099": "oracles(address)", +"addd7020": "minWei()", +"adddbacb": "tokenSellCap()", +"adde36bb": "betEven()", +"adde61ef": "_isUpdateAuthorized(address,uint256)", +"added436": "sendFromFund(uint256,address)", +"addf0813": "withdrawERC20Balance(uint256)", +"ade05b35": "commissionType()", +"ade077e3": "Ecoin()", +"ade0e93e": "withdrawals()", +"ade2f939": "lookupAllSince(uint256)", +"ade342ab": "takeShitcoin(address)", +"ade4637a": "transferFrozen()", +"ade53c4e": "GenChipsLevel(uint256,bool)", +"ade5a328": "YYXToken()", +"ade5e07d": "test_1_validOwner_accessRestriction()", +"ade60e9a": "modifyOwner()", +"ade62d6f": "withdrawCommunityFunds()", +"ade645fa": "bonusPhase2()", +"ade6e2aa": "expiryTimestamp()", +"ade716e5": "activatedArbitrationTokens(address)", +"ade7a3ad": "totalParticipationAmount()", +"ade7dd7b": "storeInvestment(address,uint256)", +"adeaa851": "getTotalPrize()", +"adeb8dec": "setLocks(address[],uint256[])", +"adeba3a5": "payWithdraw(address)", +"adebf6f2": "isFungible(uint256)", +"adec07c7": "setPriceUpdateInterval(uint256)", +"adec3a92": "totalPonziInGame()", +"adeca283": "payeeArray()", +"adedc071": "internalApprove(address,uint256,uint256)", +"adee3f4b": "getCodeType(uint256)", +"adef40db": "disputeJUR(address,uint256,uint256[])", +"adefc37b": "sub(int256,int256)", +"adefd501": "ledMultiSig()", +"adf069ea": "startsWith(string,string)", +"adf07791": "tenant()", +"adf0c351": "add_participant()", +"adf13281": "mineFor(address,bytes32)", +"adf24dec": "setDemurringFee(uint32,uint32)", +"adf272ab": "vest(address,uint256,uint256,bool)", +"adf2cead": "mint(bytes32)", +"adf2d029": "calculateAdminTxHash()", +"adf2ef99": "ReichaCOIN()", +"adf2f978": "getCurrentDragonGirlLotteryNumber()", +"adf403ad": "capitalReserveWallet()", +"adf4285d": "GovernanceAddOwner(address,address)", +"adf46a39": "createContractDank(string)", +"adf4a144": "startRefund()", +"adf4fa09": "addPurchased(address,address,uint256,uint256)", +"adf54e0c": "betOnLowHigh(bool,bool)", +"adf59f99": "query(uint256,string,string)", +"adf5d1cb": "YumeriumToken()", +"adf5e565": "verify(bytes,address,uint256,uint8,bytes,bytes)", +"adf60404": "THreeDBToken()", +"adf684ac": "ULChain(address,uint256)", +"adf6e486": "unPauseToken()", +"adf70883": "completeUnlockTime()", +"adf74fc9": "distributeELTCMedium(address[])", +"adf8a01b": "emitSkillEvaluated(address,address,uint8,uint256,uint256,uint256)", +"adf8f79d": "LOG_ContractResumed()", +"adf96752": "trade(address[13],uint256[15],uint8[2],bytes32[2],bytes32[2])", +"adf9a754": "forwardFundsToOwner()", +"adf9cd49": "totalWeiCap()", +"adf9ffea": "lockupOf(address)", +"adfa1f0c": "Pinged(string)", +"adfa820a": "deleteBlockState(bytes32)", +"adfa845a": "test_remove_notInList()", +"adfaae32": "lastMinedOn()", +"adfc36a3": "getAssembly(uint256)", +"adfceb9a": "proxyBuy(bytes32,address)", +"adfd5380": "preTgeBonus()", +"adfd7935": "setBridgeNode(address,bool)", +"adfdb75e": "setRedeemRequestLimitInterval(uint256)", +"adfdc12f": "createNewGame(string,string,string,uint256)", +"adfe1190": "components(uint16)", +"adfe6b80": "InvestAdd()", +"adfec5f5": "buy(bytes8)", +"adff2450": "getOuverture_effective()", +"adff5f36": "PanamavsTunisia()", +"adffe4db": "setFundingRules(address,bool,uint256,uint256,uint256,uint256,uint256)", +"adfff41d": "m_Data(address,uint256,uint256)", +"ae0041aa": "signalCount()", +"ae005a87": "ERC777DemoToken(string,string,uint256,uint256,uint8)", +"ae012367": "withdrawTopForTeam(address,uint256)", +"ae014f1d": "getUserNameByWallet(address)", +"ae01a8fb": "toCloseVote()", +"ae01ab47": "setFracoinAuction()", +"ae01c14f": "SendBid()", +"ae01dd06": "noteDesignatedReport()", +"ae01ed8a": "manualWithdrawalFallback(address,uint256)", +"ae024c40": "isTopic(bytes15)", +"ae0250c1": "showPoolNumber(address,address)", +"ae025faa": "newGroup()", +"ae0269aa": "VirtuePokerSale()", +"ae02ee5b": "pack(bytes,address,address,uint8,uint256)", +"ae035846": "END_TIME_SALE()", +"ae0395ad": "setFriendsFingersWallet(address)", +"ae03d6c2": "getIrisProvidersReport(bytes32,address)", +"ae03f754": "GongPanToken()", +"ae040b1d": "get_orderAddress(address,uint256,uint256,uint256)", +"ae041b90": "WRLCrowdsale()", +"ae043336": "dolRate()", +"ae04d45d": "setLockTime(uint256)", +"ae056477": "addInvestorBalance(address,uint256)", +"ae06494e": "createHNtokens(address)", +"ae065737": "tradePreToken(uint256,address,address,uint256,address)", +"ae06c1b7": "setFeePercentage(uint256)", +"ae06dbc0": "dataControlSetFeeAbsMaxGlobal(uint256)", +"ae0755d3": "popTransaction()", +"ae078036": "preICO_tokens()", +"ae08b8b3": "BUXCOINMONEYCONTRACT()", +"ae093eb7": "sendICOTokensBack(uint128)", +"ae0996fc": "getMyEOSKey()", +"ae0a6b28": "signature(string,bytes32)", +"ae0a90b2": "domain_buy_useArina()", +"ae0aba8c": "acceptPayment()", +"ae0b4edd": "cancelSellOrder(address[])", +"ae0b7bdb": "twoWeeks()", +"ae0bbe4d": "approveRecipient(address,bool)", +"ae0be41c": "periodPreITO_hardCapInWei()", +"ae0db13c": "totalBidEth()", +"ae0e5387": "networkReserveFund()", +"ae0e8725": "Checkable()", +"ae0e8f3f": "strategicLockup()", +"ae0eadbf": "isFirstStageTokensMinted()", +"ae0f6166": "subtract(int256)", +"ae101f31": "addStage(uint256,uint256,uint256,uint256)", +"ae104265": "calculatePrice(uint256)", +"ae117f3e": "getFSTBalance()", +"ae11cf73": "isVerfied()", +"ae11ea9b": "transferChild(address,address)", +"ae125f00": "mint(uint256,address,bytes32,bytes32,bytes4)", +"ae1345c4": "CharterCapital()", +"ae136d62": "firstBonusEnds()", +"ae13efe0": "batchFreeze(address[],bool)", +"ae152cf4": "oraclize_query(string,string,uint256)", +"ae154aab": "passOff()", +"ae15eb8e": "getCertificate()", +"ae1616b0": "airdropReserveWallet()", +"ae169a50": "claimReward(uint256)", +"ae180337": "withdrawBaseERC20(address)", +"ae181958": "_setNonlistedUser(address)", +"ae181f84": "passThroughTap(uint256)", +"ae188884": "sendOneEtherToMiner()", +"ae18f5ad": "issueContractAddress()", +"ae190819": "getBS(bytes32)", +"ae1a0b0c": "launchLength()", +"ae1a15e3": "PresaleFundCollector(address,uint256,uint256)", +"ae1a5611": "ratePerEthPhase2()", +"ae1a9a3e": "castToUint(int256)", +"ae1aafb9": "buyPredictForContract(address,uint8)", +"ae1adba2": "calculateStakeGains(uint256)", +"ae1b4beb": "buyFactorPromotion()", +"ae1b6405": "endICOTime()", +"ae1be1e4": "releaseLockedToken()", +"ae1c4062": "stopStage()", +"ae1c9437": "_stringsEqual(string,string)", +"ae1cad3a": "tip(address,string,uint256,string)", +"ae1d12a6": "WhyWhyToken(address)", +"ae1d3043": "teamTimeLock2()", +"ae1d4b4b": "GambleEther()", +"ae1dd78c": "sendEtherManually()", +"ae1e2096": "MAGICCOINERC20(uint256,string,string)", +"ae1e964e": "newOwnershipFeeProposal(uint256,string)", +"ae1f14ca": "mainSale_WeiRaised()", +"ae1f91b7": "updateMinMaxBetCount(uint256,uint256)", +"ae1fb61a": "TokenTransferProxy()", +"ae200c73": "joinGameTeam(bytes32,uint8)", +"ae2022c0": "getUint256Max(int256)", +"ae203146": "getAccountType(address)", +"ae2074c8": "addWhiteListAddress(address,address,uint256)", +"ae20bf15": "claimFreeEggs()", +"ae224633": "videos()", +"ae22c1be": "ShowRelease(address,uint256)", +"ae22e331": "_getCurrentSchellingRound()", +"ae248ced": "deliverETH()", +"ae249f2b": "destroyWhenRoundOver()", +"ae24e328": "tickerQueryData()", +"ae25532e": "getProxyId()", +"ae25753b": "wildcardsHeld(address,uint16)", +"ae25f630": "DownPlayerResult(string,address,uint256,uint256,uint256)", +"ae262114": "crowdSaleDragonPrice()", +"ae263730": "isOperationAllowed()", +"ae26588c": "removeTrustedContractAddress(address)", +"ae277584": "amountToSend()", +"ae27e3c6": "relu_activation(int256)", +"ae28b68c": "safeTransfer(address,uint256,uint256,bytes)", +"ae28e912": "teamTokenAmount()", +"ae2a0ce3": "JustinsToken()", +"ae2b4e16": "getBalanceInRemix(address)", +"ae2b5d3b": "_emitCountryCodeAdded(uint256,uint256,uint256)", +"ae2bd2bd": "clearAuction(address,address,uint256,uint256)", +"ae2c1506": "getRoundNumberOfBets(uint256,uint256)", +"ae2c923c": "OlympusLabsCore(address)", +"ae2cbc91": "Tradable()", +"ae2da5c5": "getLLV_edit_20()", +"ae2df7b3": "setImporterBank()", +"ae2e054c": "closeOrder(uint256,address)", +"ae2e933b": "feePool()", +"ae2f1f6f": "calculatePayerDeposit(uint256)", +"ae307098": "c_MinInvestmentInCents()", +"ae30d35d": "ARK_TROGLOg_1_00()", +"ae3125d9": "showTokenSaleClosingTime()", +"ae319f60": "_updatePurchasingState(uint256)", +"ae31deb9": "burnCrowdsale()", +"ae326221": "setSpawnProxy(uint16,address)", +"ae327322": "cantSetReferrer()", +"ae32ac7e": "TEAM_LOCK_DURATION_PART2()", +"ae32c399": "lastBlock_f1Hash_uint256()", +"ae353131": "BiquToken(uint256,string,string)", +"ae35707d": "sectionForSale(uint256)", +"ae35d21a": "CollectibleBidWithdrawn(uint256,uint256,uint256,address)", +"ae366735": "EQUIPMENT_REWARD_WALLET()", +"ae36c602": "createPromoItem(address,string,uint256)", +"ae36f6f9": "_batch4_rate()", +"ae3783d6": "relayedSet()", +"ae382baa": "GainCard(address,uint32)", +"ae39279f": "sendFee()", +"ae3b2137": "getRoomSetCount(uint256)", +"ae3b748d": "setMinCap(uint256)", +"ae3b94b2": "_minimumTokens()", +"ae3baf4d": "mintableAmount()", +"ae3c697c": "getMyAvailableWine()", +"ae3d27ed": "Token_For_Circulation()", +"ae3d5047": "_changeSymbol(string)", +"ae3d7160": "compareByte(string,string)", +"ae3d81b8": "allowedJurisdictions(bytes32)", +"ae3f4a6c": "test_3_method()", +"ae3f84f3": "proofMultiSig()", +"ae3fc899": "CheckExchange(string)", +"ae404996": "oraclize_query(string,string[3],uint256)", +"ae40f72f": "testAdd()", +"ae41480b": "importEthers(address)", +"ae422c09": "sys()", +"ae42ce85": "update_oracalize()", +"ae436b5e": "getLimitedReporterMarketsCount()", +"ae44dea2": "bytesToUInt(bytes,bytes32)", +"ae44e840": "priceConfirmedOver500()", +"ae4538ce": "walletCompanyReserve()", +"ae457835": "buyTokensFor(address,uint64,uint256,uint8,bytes32,bytes32)", +"ae457dab": "bonusEnds20()", +"ae45850b": "schedulerAddress()", +"ae458ab6": "approve(uint64,address)", +"ae466db7": "withdrawPenaltyTokens()", +"ae46e284": "setPortfolio(uint256,bytes32[],uint8[])", +"ae479a63": "badgeSymbol()", +"ae47a290": "changeMaxBet(uint256)", +"ae487dad": "reset(uint256,uint256,uint256,uint256,uint256,uint256)", +"ae49165a": "getAncestor()", +"ae49a717": "EVNT()", +"ae4a7512": "mintICOTokensFromExternal(address,uint256)", +"ae4a8c88": "claimLoot(uint256,address)", +"ae4aadbb": "showTransferConfigs()", +"ae4ab7ce": "Put_DEDI_gift(address)", +"ae4ac63e": "STANDARD_BUYIN()", +"ae4b1b5b": "proxyStorage()", +"ae4b5cb8": "collectDonations(uint256,address)", +"ae4b76fe": "_createPiranha(string,address,uint256,uint8,uint256,uint8,uint8)", +"ae4c20af": "increaseICOcap(uint256)", +"ae4c5e45": "setStarNewOwner(uint256,address)", +"ae4cc757": "closeEarlyPurchase()", +"ae4d0ff7": "gen0StartingPrice()", +"ae4d1af6": "setup(bytes32,address,address)", +"ae4d42b8": "ptxTail()", +"ae4d503b": "withdrawOtherERC20Balance(uint256,address,address)", +"ae4e7fdf": "isMature()", +"ae4eba1f": "setOldE4(address,address)", +"ae4f1198": "publicationFeeInWei()", +"ae4f1476": "searchSeed()", +"ae4fbdeb": "LastValidated()", +"ae501c75": "LogLotteryResult(uint32,uint8,bytes32,bytes)", +"ae50d660": "setFilletPrice(uint16,uint16,uint8,uint256)", +"ae5103e8": "preSaleFourthPrice()", +"ae516449": "uintCeil(uint256,uint256,uint256)", +"ae51c484": "a(bool)", +"ae51db0d": "VesaStage2PreICO()", +"ae52026f": "icoSoftCap()", +"ae529499": "CurrentARXSupplyInWei()", +"ae530504": "setSetting(string,uint256)", +"ae53d79e": "ICO_PRICE7()", +"ae5409fb": "seedInvestorsReserve()", +"ae55c888": "getData(string)", +"ae55f1af": "artWorkChangeApprove(uint256,uint256,bool)", +"ae56463e": "getPoliceReport(uint256,address)", +"ae56e668": "setUnlockAddress(address,bool)", +"ae5942cd": "deletePermissions(address[])", +"ae59bd5a": "mintManually(address,uint256)", +"ae5a1460": "NewDigitalAsset(address,address)", +"ae5a17a7": "updateCharityAddress(address)", +"ae5a4a7f": "maxBatchAssignment()", +"ae5a9bb4": "operatorTransfer(address,uint256,bytes,bytes)", +"ae5a9d17": "getCompletedTransactions()", +"ae5adac7": "mintInCurrPeriodCount()", +"ae5b2540": "setApp(bytes32,bytes32,address)", +"ae5b6d89": "submitSteak(address,bytes32)", +"ae5c1816": "CreateKittyToken(address,uint256,uint32)", +"ae5c24bd": "getFirstElement()", +"ae5c37fd": "contributionsByIntel(uint256)", +"ae5c3f14": "getVipBrokerNum()", +"ae5c75aa": "getBadgeByKtUserId(uint256)", +"ae5c888d": "month60Unlock()", +"ae5d2cbe": "_getOwnerTokenByIndex(address,uint256)", +"ae5da7a0": "_generateGame(bytes32,bytes32,address,uint256[10])", +"ae5dbd43": "view_get_ResultData()", +"ae5e6cf4": "cancelReservation(uint256)", +"ae5ec2e9": "matching()", +"ae5f502e": "RoundSubmission(uint256)", +"ae601e4d": "IADForGas()", +"ae602223": "standFeeAfter500()", +"ae610b48": "sign(int256)", +"ae61fcda": "isEthernautsStorage()", +"ae6215d8": "getBlockHeight(bytes)", +"ae622c4b": "addToInxWhitelist(address)", +"ae62fd7c": "setCrowdSale(bool)", +"ae639329": "sendTo(address,address,uint256)", +"ae63b517": "ADVISORY_BOARD_TOKENS()", +"ae640923": "playerEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes)", +"ae6439c4": "icoSaleSoftCap()", +"ae6506f9": "getCurrentTierIndex()", +"ae665d5d": "MooguToken()", +"ae66d948": "getWithdrawn(address)", +"ae6751e2": "EmilTestCoin()", +"ae67701f": "ZperPreSale(address,uint256,uint256,uint256)", +"ae67b4c3": "evolveAxie(uint256,uint256)", +"ae68c80a": "AddRocket(uint32,uint64,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint64,uint32)", +"ae68fb83": "creditShareProvision(uint256,uint256)", +"ae69a893": "getHeirCount()", +"ae69ccdc": "GMSToken(uint256,string,uint8,string)", +"ae6a19af": "tokensSoldLimit()", +"ae6a1c30": "setApprovedWallet(address)", +"ae6a2435": "HOST_CUT()", +"ae6a70ee": "_tokenMetadata(uint256)", +"ae6b0792": "paymentManager(string,address,string,uint256,uint256)", +"ae6c0b03": "canWithdrawBond(uint256)", +"ae6caafd": "buyByBot(uint256,uint256,address)", +"ae6d8a52": "viewFourthLotOfClauses()", +"ae6dca72": "_allocate(address,uint256,uint256)", +"ae6e11dc": "terminateTokenLock()", +"ae6e22f1": "totalEther()", +"ae6f1db6": "payableFinneyReceived()", +"ae6f5bd2": "_calResultReturnIsWin(uint256,uint256)", +"ae702ba4": "isSubscriptionActive(bytes32,uint256)", +"ae70609e": "LogResult(uint256,address,uint256,uint256,uint256,int256,uint256,uint256)", +"ae708e7c": "totalConsideredFundedEther()", +"ae71d5da": "initProceeds(address,address)", +"ae721e45": "fetchOrdersForPayerByAdmin(address)", +"ae748575": "CGCM()", +"ae748837": "addTestimony(address)", +"ae75c4f7": "rewardsTokensVault()", +"ae75f9e6": "mock_resetLatestTokenAllocation(address,address)", +"ae76145d": "SEXcoin()", +"ae7635f2": "icoEndUnfrozeTokens()", +"ae764df3": "ICOWallet()", +"ae775b27": "betOnDozen(uint8)", +"ae77a6f4": "goldBalance()", +"ae77c237": "purchase(uint256,address)", +"ae77d51f": "m_chiefOwnerIndexBit()", +"ae788913": "AIHToken()", +"ae788b34": "ILFManagerCandidate()", +"ae799f4a": "TokenERC20(string,string,uint8,uint256)", +"ae7a45ba": "addZethrAddresses(address,address)", +"ae7a833d": "hydroContract()", +"ae7ad3fd": "setUpgradeabilityOwner(address)", +"ae7b0333": "executeOrder(address,uint256,uint256)", +"ae7b1620": "rushTimeChallengeRewardsPercent()", +"ae7b3825": "exchangeForETH(uint256)", +"ae7b6bd9": "getLatitude()", +"ae7b6daa": "numberOfCellsOwnedBy(address,address)", +"ae7c046b": "applyAllPermission(address,address)", +"ae7d00f3": "validationPrice()", +"ae7d0cac": "addShare(address,uint256,uint256)", +"ae7e23cc": "otherCoinsPurchase(bytes32,uint256)", +"ae7ed04c": "getLastBidForCanvas(uint32)", +"ae7f5da4": "lockPeriod2()", +"ae7fa597": "removePrize(uint16,address,uint256)", +"ae7fc1da": "_randMod(uint256,uint256)", +"ae7ffadc": "Bitway()", +"ae813029": "makeBid(uint16,uint256)", +"ae813ebb": "TokenFactoryAirdropCoin()", +"ae815843": "query(uint256,string,string,uint256)", +"ae817dd1": "doSendBounds(bytes32)", +"ae818340": "getProfiles(address[],string[])", +"ae81a54b": "factTeamOf(uint256)", +"ae81f51b": "mintTokens2(address,uint256,uint256)", +"ae8205e3": "insert(bytes32,int256)", +"ae82fcf4": "teamLocked()", +"ae83ed91": "HashBlock()", +"ae8421e1": "done()", +"ae850da9": "getNumberSources(uint256,uint256)", +"ae873405": "AVG_BLOCKS_24H()", +"ae873fa5": "PRESALE_MAX_RAISE()", +"ae87fc4b": "claimStatus()", +"ae87fd06": "gasPriceLimit_()", +"ae882412": "getTotalDivsProduced()", +"ae882cf1": "allowSpecies(uint16,uint16,address)", +"ae896b2e": "TPN()", +"ae89a29e": "maxHolderCount()", +"ae89aeb9": "getEscrowData(uint256)", +"ae8a473d": "_setReserveFactorFresh(uint256)", +"ae8a6833": "InitialSettings()", +"ae8a7180": "setStartOfCrowdsale(uint256)", +"ae8a8690": "createActivePreMintedEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,uint256)", +"ae8b9d7b": "autoSolveGame(uint256,uint256,uint256)", +"ae8bce2c": "product1_pot()", +"ae8cdd59": "IBTC(uint256,string,string)", +"ae8dab48": "setUp(address,address,address,address,address,address,address)", +"ae8e2217": "SmartexController()", +"ae8e3b70": "Fin()", +"ae8efe46": "CheckEntity(bytes32)", +"ae8f1d29": "createPermission(bytes32,address[],bytes4[])", +"ae8f2328": "finishcrowdsale()", +"ae8f6489": "createAndBuyAllAmountPayEth(address,address,address,uint256,address)", +"ae9074ff": "internalSuccessOver()", +"ae90b213": "payee()", +"ae90e9f8": "returnToBuyersContinue()", +"ae91b691": "changeRefPercentage(uint256)", +"ae92b204": "getCurrFeeRate()", +"ae93e513": "cancelOfferForCity(uint256)", +"ae94bbf1": "getCarDetails(uint32)", +"ae94e448": "imax(int256,int256)", +"ae94ec05": "placeBuyTokenOrder(uint32)", +"ae954790": "Authorizable()", +"ae9569d0": "PLATPriceOracle()", +"ae95a7a4": "TacoToken(address,string,string,uint256,uint256)", +"ae95c24e": "issueMap(address)", +"ae96b094": "VergeDark()", +"ae96bf2c": "TakePot()", +"ae9759ff": "PRICE_MULTIPLIER_ICO2()", +"ae978f08": "getLatestTweet()", +"ae97dde8": "MAX_COMMISSION()", +"ae989d36": "homeTeam()", +"ae99847b": "daylimit(uint256)", +"ae999ece": "reserve(string)", +"ae99aa3c": "getMemberInfo(uint256)", +"ae99f03c": "SetAddresses(address[],address[],address[],address[])", +"ae9a0785": "getChannelPostCount(address)", +"ae9a9295": "YKC(uint256,string,uint8,string)", +"ae9aea6d": "maxMintQuantity()", +"ae9b051c": "withdrawSome(uint256)", +"ae9b233f": "PasesLibresSocio(uint16,uint16)", +"ae9c1962": "withdrawCommunityPot()", +"ae9d70b0": "supplyRatePerBlock()", +"ae9dc04c": "offerSketchForSaleToAddress(uint256,uint256,address)", +"ae9f96c7": "weightsApportion(uint256,uint256)", +"aea01c49": "stringToBytes(string,string)", +"aea09e6e": "crowdfundStartTime()", +"aea0e35f": "createMarket()", +"aea13844": "safeGiveByContract(uint256,address)", +"aea1935b": "confirmEndWork(uint256)", +"aea197fe": "CreateRecipt(string,uint256,string,string,string,string,string,uint256)", +"aea31fc7": "setProof(string,string)", +"aea398da": "paymentWalletAddress()", +"aea3ad8c": "supportKickoffQuorum(uint256)", +"aea40787": "SetOwned()", +"aea43a29": "addMassAddressToWhitelist(address[])", +"aea452ba": "isBinding(uint16)", +"aea48690": "incentivisingEffortsSupply()", +"aea57be4": "resumeIEO()", +"aea5b69f": "solutionInfo(uint256)", +"aea6022c": "change_metadata(uint256,string)", +"aea64763": "stopsale()", +"aea65bf6": "VerifyProof(uint256[],uint256[],uint256[])", +"aea68d6b": "Shakedown0x()", +"aea6e1a4": "buyAnotherDrangon()", +"aea787a2": "showleveldetail(address)", +"aea8126f": "transferMSM(address,uint256)", +"aea8d47c": "getLatestContract(bytes32)", +"aea8dcca": "setTokenInfoMaxTotalImbalanceList(uint256[])", +"aea92852": "getDevIndex(address)", +"aea96513": "returnSecretVoteHash(uint256)", +"aea9b438": "getBuyerInstanceAddress(address)", +"aeaa3091": "getDealerValue(uint8[],uint8)", +"aeaaaa08": "proxyClaimTokens(address)", +"aeaabffe": "UnlockAll()", +"aeab24df": "reinvestDivsWithContract(address)", +"aeac3354": "Deal(address,address,address)", +"aeac529a": "TradingLife()", +"aeac538a": "ClimateCron()", +"aeaca25e": "getTotalJadeProduction()", +"aeacd658": "signProduct(string)", +"aead9e47": "claimAndWithdraw()", +"aeadbe24": "getTotalTokens(address)", +"aeae264b": "BeteventCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"aeaf5a37": "total_land_sold()", +"aeaf7fc1": "updateCandidate(address,bytes32,bytes32)", +"aeb00fda": "_getRacerCar(uint256)", +"aeb1355f": "getH2Amount()", +"aeb26733": "previligedApprove(address,address,uint256)", +"aeb27602": "addHash(string)", +"aeb2ffc1": "getQuery(uint256)", +"aeb37075": "DividendPaid(uint256)", +"aeb3ebd0": "LogContributorsPayout(address,uint256)", +"aeb447ff": "getLevelUpCost(address,address)", +"aeb47e2a": "COMMUNITY_POOL()", +"aeb4f0d3": "RegisterTwo(address,address)", +"aeb58dc5": "setPOOL_edit_15(string)", +"aeb669eb": "getHatchingEggId(address)", +"aeb754e5": "Auction(address,uint256)", +"aeb7614c": "bid(bytes32,bool,int32)", +"aeb7dd80": "_computeCurrentPrice(uint128,uint128,uint40,uint40)", +"aeb817ab": "etcSupply()", +"aeb89f14": "totle()", +"aeb8f966": "mintToken(address,uint256,int256)", +"aeb94f48": "getFreePacifist()", +"aeb9c40e": "isReadyToStart(uint256)", +"aebacd53": "PRE_BONUS()", +"aebad3a4": "getCaptainCount(uint32)", +"aebb2540": "setNewMultisig(address)", +"aebc0310": "updateOdds(uint256,uint256)", +"aebcd2d9": "AddSocialAccount(bytes32,bytes32,bytes32,bytes32)", +"aebd3f96": "receiveToken(address,uint256,address)", +"aebd4fcd": "shopStoreRegister()", +"aebe0224": "CollectibleTransfer(address,address,uint256,uint256)", +"aebe5523": "addTokenWalletInWhitelist(address)", +"aebf1e3d": "computeTokens(uint256)", +"aec02eb5": "ServiceContractResolver(address)", +"aec1914d": "surrender(bytes32)", +"aec1dd81": "updateNonClosingBalanceProof(address,address,bytes32,uint256,bytes32,bytes,bytes)", +"aec1ee7b": "STAT_MAX_VALUE()", +"aec205a5": "contractLaunched()", +"aec26c0e": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,string)", +"aec2f2d9": "first_bonus_duration()", +"aec30dc1": "minWeightPunish()", +"aec318f1": "enableMasterTransfers(bool)", +"aec3ab53": "_futureSupply()", +"aec4e0bb": "numberOfPunksReserved()", +"aec5ab08": "getAllDapps()", +"aec651fb": "getUserTokensByMatch(address,uint32)", +"aec72d8d": "STAGE_3()", +"aec77b63": "returnTokensInPool(address[],uint256[])", +"aec7f5b2": "JoustNum()", +"aec7f6f3": "compoundInterest(address)", +"aec8fae8": "getMemberAtKey(uint256)", +"aec9a987": "claimShare(address,address)", +"aec9c480": "includesSet(bytes32)", +"aecadd53": "grantTeamToken()", +"aecaf4ba": "addMoneyInternal(address,uint256)", +"aecbaaa1": "LogPayout(address,uint256,uint256)", +"aecbb5f1": "winAmount1()", +"aecbf70c": "Kisaan()", +"aeccee75": "_register(address,uint256,address)", +"aecd15e3": "getWithdrawalWallet()", +"aecd1fed": "setupToken(address,address)", +"aecd27fa": "linkCoin(address)", +"aecd46db": "testDepositCanbeWithdrawn()", +"aecdceef": "intToBytes(uint256,uint256)", +"aecef00e": "record(uint256,string)", +"aecf2149": "sendScoreToCustomer(address,uint256)", +"aecfd412": "Group_2()", +"aed214fb": "setBooleanMapValue(string,address,address,bool)", +"aed29d07": "totalRewarded()", +"aed2e7d4": "addGen(uint256)", +"aed339ef": "storeHarvestOperation(bytes32,address,string,string,uint32,uint24,uint16,string)", +"aed362c1": "hasModerator()", +"aed396c6": "setStageBonus(uint256,uint256)", +"aed3ebe4": "TokenBCCO(uint256,string,string)", +"aed4839a": "transferFrom(uint256,address)", +"aed4aab6": "receiveERC20(address,uint256)", +"aed5c011": "payWithMerculet(uint256)", +"aed6512e": "callerAdd(address)", +"aed6d8d4": "GetStuffNum(address,uint32)", +"aed76aa4": "getInvestorDepositAmount(address)", +"aed82a99": "sin_table_lookup(uint256)", +"aed83846": "removeFromPrivateSaleWhitelist(address[])", +"aed89fed": "projectContract()", +"aed8e967": "getEndpoint()", +"aed8f3da": "partsPerBillion(uint256,uint256)", +"aeda10be": "ethselfToken()", +"aeda352b": "hasName(address)", +"aeda852f": "houses(uint256)", +"aedb1c8f": "executeContract()", +"aedb8621": "TMONEY()", +"aedb9eef": "LDXCToken(uint256)", +"aedbbf36": "deleteNote(uint64)", +"aedd18dc": "timeout(address)", +"aedd3acc": "currentSTCPrice()", +"aeddaa02": "DelVer(address,address)", +"aeddab95": "batchUnmount(address,uint256[],uint256)", +"aeddf677": "lockLimit()", +"aede4680": "firstReserveWallet()", +"aede879d": "whatIsMissing()", +"aedf5360": "icoCrowdsaleContract()", +"aee06324": "trickleUp()", +"aee0abaa": "authorizeMany(address[],uint256)", +"aee14460": "getSummary(uint256)", +"aee145f7": "addressReserve()", +"aee1b8a1": "XBStandardToken(uint256,string,uint8,string)", +"aee1d4d3": "blockCreationRate()", +"aee25613": "sendErc20(address,address[],uint256[])", +"aee273f8": "createTokens(address,uint256,address,bool)", +"aee2988d": "addressOps()", +"aee2dbbf": "getSaleOrdersBySeller(address)", +"aee338ef": "referalAddrByNum(address,uint32)", +"aee36731": "OrderApprovedPartOne(bytes32,address,address,address,uint256,uint256,address,uint8,uint8,address,uint8,bytes)", +"aee40270": "AddAddressToWhitelist(address)", +"aee4c502": "test_remove()", +"aee7052e": "startPhaseLength()", +"aee776ae": "stnExchange(address,uint256)", +"aee7e176": "finalBonus()", +"aee83b61": "TASOHATOKEN(uint256,string,string)", +"aee84f6b": "setTime(address,uint256)", +"aee8a3bd": "add2Auction(address,uint256,uint256,uint256,uint256,uint256)", +"aee9293f": "chargeAndChange(uint8)", +"aee92d33": "approveByLegacy(address,address,uint256)", +"aee98408": "versionIndex(bytes32,bytes32)", +"aee99e52": "getPresale()", +"aeeaf3da": "addPackCategory(uint256,bytes4)", +"aeeb96af": "Highlander()", +"aeec9ba0": "UpdateManifesto(uint256,bool,bool)", +"aeedc9e9": "GroupBuy()", +"aeeed0db": "buyXaddr(address)", +"aeefb9d1": "distributeEDNR(address[])", +"aeefb9eb": "PixelToken()", +"aef0004a": "outputAddress()", +"aef08617": "limitTier3()", +"aef093ce": "Doge2Token()", +"aef0ef2e": "test_validShouldBe3_2()", +"aef1b9b5": "test_threeInvalidFalseEqLog()", +"aef251a7": "tokenCtr()", +"aef3575e": "HandWinsView(address)", +"aef35e6a": "stage2Sale()", +"aef37284": "getReservedTokensListValInPercentageUnit(address)", +"aef3bc17": "getMemberInformation(uint8)", +"aef3fa6c": "AFROIN()", +"aef41e3a": "getItemIdsPagable(uint256,uint256)", +"aef5cbee": "VICToken()", +"aef5ddec": "Paper(string,address,uint256,uint256,address[],address)", +"aef721b8": "createSwap(uint256,uint256,address,address,address)", +"aef76dda": "createPresale(address,uint256,uint256)", +"aef7ad9c": "getSchellingRoundDetails(uint256)", +"aef88aba": "DDJATCoin()", +"aef8a536": "SCNToken(uint256,string,string)", +"aef95098": "setUrl(uint256,string)", +"aef983d0": "getDigitFromByte32(bytes32,uint8)", +"aef99eef": "Game()", +"aefa573d": "genCode()", +"aefa68f0": "ifInAllowedLocks(uint256)", +"aefa7550": "read_u32()", +"aefa7d98": "getContractAddress(uint256)", +"aefaacda": "finalTimeout()", +"aefb1643": "ownerSetPaused(bool)", +"aefb2dad": "ticketsFor(uint256,address)", +"aefb658e": "playerDayEthInLimit_()", +"aefbbf2a": "BANKROLLER()", +"aefc4ccb": "associatedContract()", +"aefc8c72": "unsealBid(bytes32,address,uint256,bytes32)", +"aefd0299": "makeWager()", +"aefe5ee0": "cashOutTank(uint256)", +"aefe696b": "changeColorPink()", +"aefe9ca0": "s40(bytes1)", +"aefea053": "timelockVault()", +"af0062e4": "sellable_tokens()", +"af00be12": "_sendToken(address,uint256,bytes)", +"af017526": "whitelistAddress(address,bool,uint256)", +"af01841e": "getownership(uint16)", +"af01866d": "insertSchedules(uint256,uint32[],uint256[])", +"af023335": "burnSynths(bytes4,uint256)", +"af02d47b": "currentBonusPercent()", +"af030d2c": "setResult(uint256,uint256,bytes32)", +"af03105b": "depositMintSince(address,uint256,uint256,uint256)", +"af0396ae": "PLDT()", +"af03e856": "MockUpgradeableToken()", +"af047106": "sumPreICO2()", +"af049ea9": "testFail_interface_call()", +"af04d0c0": "Deal(address,uint256,uint256)", +"af053b71": "CostToken()", +"af05fa10": "upgradedVersion()", +"af05fc63": "mulpow2(uint256)", +"af0638f6": "currentMaxPurchase()", +"af079dec": "setHardwareWallet(address)", +"af07c768": "Arte()", +"af080014": "nameChange(string,string)", +"af086d6f": "setTestVar(uint256)", +"af08e1ad": "get_arbits_presale_open(address)", +"af093f9c": "specificBatchCheck(uint256)", +"af09420b": "_addStackholder(address)", +"af0a078e": "tHasUpvoted(uint256,address)", +"af0aba4e": "setExpirationRequest(uint256)", +"af0ac4b7": "submitNextStage()", +"af0b4cc0": "minerTotalTime()", +"af0b7029": "KYCApprove(address[])", +"af0bbfb8": "registerEndpoint(int256,string)", +"af0bdb38": "to(address,bytes)", +"af0c09db": "getChosenNumber()", +"af0c9259": "Total_SoldToken()", +"af0cfe1f": "addArticolo(bytes,bytes10,bytes10,bytes)", +"af0def14": "startWonderAuction(string,address)", +"af0dfd3e": "blockPeriod()", +"af0e7ba3": "LeanFund()", +"af0eec40": "assignWarriorsToBattle(address,address,uint256,uint256)", +"af1034ab": "addUpdateGrantee(address,uint256)", +"af106b10": "oracCost()", +"af107749": "m_emissions(uint256)", +"af10b8cf": "totalBooty()", +"af10c810": "turnOff()", +"af123fe7": "makeDeposit(address,address,uint256)", +"af129dc2": "numTokensTotal()", +"af135ff5": "getMemberInfoLength()", +"af136dea": "setCheckInPeriod(uint256)", +"af1380ad": "_getTournamentBattles(uint256)", +"af13aacc": "blocksPerPhase()", +"af13f1ad": "forSaleSupply()", +"af1484d0": "setForkReputationGoal(uint256)", +"af157c19": "getContributors()", +"af164016": "PersonalTime(address,uint256)", +"af16972c": "mining(uint256,bytes)", +"af1747aa": "checkDeck(bytes32,uint8[],bytes32)", +"af17dea6": "symbol_()", +"af18a548": "lockBuying()", +"af191aa5": "isCertificateRegisteredAndValid(address)", +"af19f0d1": "CoinPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"af1af4df": "feeBurnerWrapperProxyContract()", +"af1b5feb": "addWeiRaised(uint256)", +"af1b7d90": "take(uint256,uint256[4])", +"af1c084d": "adminName(address)", +"af1c7940": "fiatInvestorShare(address)", +"af1cd6d3": "test2(uint256,uint32)", +"af1cd9f6": "getGGCTokenBalance(address)", +"af1d06e8": "validateSignature(bytes32,uint8,bytes32,bytes32,address)", +"af1e19d9": "getPlayers(bytes32)", +"af1ee630": "getBdpOwnershipStorage(address[16])", +"af1ff972": "rateForCurrency(bytes4)", +"af2096ef": "MAX_PUBLIC_SOLD()", +"af209cf8": "addFactory(address,uint8,uint256)", +"af20b964": "maximumFundingGoalInETH()", +"af21037f": "clearStartTime()", +"af224bdc": "parseAndStore(bytes)", +"af225fd6": "get_last_user_recast(bytes32)", +"af22fd8e": "NtsToken()", +"af23e1f1": "returnForMint(uint256,uint256,uint256)", +"af24cba2": "setLastAction(uint256,uint256,uint8)", +"af24d25c": "openTransfer()", +"af250a5e": "calculateAndTransferTokens(address,uint256)", +"af259886": "userToNumVillages(bytes32)", +"af261875": "t_ImmlaBountyTokenDepository()", +"af263ec9": "HomeToken(string,string,uint8,uint256)", +"af269745": "upgrader()", +"af26ed68": "setReportProcessingFeePercentage(uint256)", +"af2759f7": "timeUntilClaimAvaliable(address)", +"af2768ec": "commitMove(bytes32,bytes32)", +"af2780ee": "PERIOD_BLOCKS()", +"af27c7b3": "Security_HasPasswordSha3HashBeenAddedToBankAccount()", +"af28059d": "ChangeItemPrice(uint256)", +"af2885b2": "minimumEtherCommission()", +"af28a537": "totalRoundSeedAmount()", +"af299510": "HasBooster(address)", +"af29e720": "remainingGasFund(uint256)", +"af2a7fb2": "Brewers()", +"af2b114a": "Erc20SupplyToken(uint256,string,uint8,string)", +"af2b1925": "MarmotToken(uint256,string,uint8,string)", +"af2b2e5c": "ReVo()", +"af2b76ab": "airDropHero(uint16)", +"af2bf027": "minMaintenanceMarginAmount()", +"af2cff59": "removePVPContender(uint32)", +"af2e285c": "setBidState(bytes32,uint8)", +"af2e2da9": "getValidatorName(address)", +"af2f0c46": "SupportComponent(uint256,address,uint256)", +"af2f9105": "_performWithdraw(address,address)", +"af2fa91c": "otherCurrenciesChecker()", +"af2fcc17": "globalMinPurchaseAmt()", +"af303a11": "salvageTokens(address,uint256)", +"af304bab": "getPriceByCredentialItemId(address,bytes32)", +"af30e4d6": "Log2(address,bytes32,uint256,string,string,string,uint256,bytes1,uint256)", +"af30e9f7": "transferICOTokens(address,uint256)", +"af30ee3f": "GOD()", +"af310f02": "NotCoin(string,string,uint8)", +"af314579": "isDayFirst()", +"af31f49b": "startNextAccountingPeriod()", +"af3309d8": "heartbeatCount()", +"af333595": "proxyMergeMint_old(uint256,bytes32,address[])", +"af339ee4": "convertLotById(bytes32)", +"af33f8a5": "Order_execute(address,address,uint256,uint256)", +"af35314a": "INITIAL_TOKEN_FROM_COMPAIN()", +"af356eee": "preicoContractAddress()", +"af35ae27": "getRemainingTokens()", +"af35ae3e": "setSaddleShopSaleFee(uint256)", +"af35b3f1": "why()", +"af35c6c7": "enableTransfers()", +"af35dac2": "convertToCents(uint256,uint256,uint256)", +"af36778b": "aggregate()", +"af36e7a7": "removeUserWhitelist(address[])", +"af371115": "findCertificate(bytes)", +"af375838": "addBurnupGame(address)", +"af378ce5": "bust(uint256)", +"af38d757": "claimable()", +"af3996c3": "fourthStageMinted()", +"af3a4feb": "LOOMIA_LOOMIA_REMAINDER_ADDR()", +"af3cc6be": "MoxianCoin()", +"af3d8e43": "preICOTokenDelivery(address,uint256)", +"af3dc180": "ecosystemBuildingWallet()", +"af3e8a40": "orderMatch(bytes32)", +"af3f0ebe": "c_startTime()", +"af3f12bc": "profitSharingContract()", +"af3f1db4": "BMEtestToken1()", +"af408d89": "setStatus(bytes)", +"af40ce20": "revokeUnicorn(uint256)", +"af40dd2f": "AccessToken()", +"af418e4c": "setReclaimPeriod(uint256)", +"af422cce": "marketSellOrders(uint256,bytes[])", +"af42d106": "setKey(string)", +"af431f03": "setUser(address,string,uint256)", +"af43f597": "get_amount_minus_commission(uint256)", +"af448721": "refundMe(address,uint256)", +"af44e487": "overdraftPeriodsNumber()", +"af45118e": "createProposal(address,bool)", +"af45de05": "disableDonation()", +"af463d2a": "CentaToken()", +"af468682": "startsAt()", +"af46aa08": "stakeBalanceOf(address)", +"af475a9b": "setUSDPerETH(uint256)", +"af477528": "addMetadataObject(string)", +"af47c1af": "getActionByIndex(uint256)", +"af481be8": "mint(string,uint256,uint256,uint8,string)", +"af488ca3": "setLiquid(bool,uint256,bytes)", +"af489d5a": "_moveBalance(address)", +"af49a228": "DeshiCoin()", +"af49e321": "getHolderLimit(address)", +"af4a2984": "createPrizePool(uint256[])", +"af4a822d": "getCurrentTrancheIndex(uint256)", +"af4b382d": "PaquariumToken(uint256,string,uint8,string)", +"af4b3cab": "delBounty(address,address,uint256)", +"af4bed26": "setExchangeRateByOraclize(address,bytes32,string)", +"af4c14ee": "setAddressWhitelist(address,bool)", +"af4c2288": "getNumAcceptance(address)", +"af4c3d1d": "BPofMakerByIndex(address,uint256)", +"af4c6838": "tokenDeposited(address)", +"af4c9b3b": "withDrawalether(uint256)", +"af4cd457": "getOrCacheValidityBond()", +"af4d723c": "Libidocoin()", +"af4e3d37": "withdrawReservedTokens()", +"af4e4494": "TANKER_TYPE()", +"af4e99de": "getGameData()", +"af4fd9e7": "setValidLockingAmountToPeriod(uint256[3],uint256[3])", +"af500fb7": "readBytes32(bytes,uint256)", +"af50e0d3": "DeDeMasterContract(address)", +"af5177b1": "calcDrawCode()", +"af519bf5": "doesProofExist(uint256,bytes32)", +"af5260bf": "finalTime()", +"af52fbed": "retrieveWineData(bytes32)", +"af53dc6e": "contractbacklist()", +"af54e324": "upgrade_self(address)", +"af55bba0": "removeRegistryFromTagsIndex(address)", +"af5610dd": "isThisPreforkVersion()", +"af567633": "minPresaleWei()", +"af574319": "UpgradeProposal(address)", +"af577c4c": "unlockReserve()", +"af57d236": "STAGE_2_TIME()", +"af580d2c": "getPurchaseById(string)", +"af58574a": "getTierPosition(address)", +"af589421": "callerAdded(address)", +"af589572": "getAssetIdTripStartTime(uint256)", +"af58eda8": "findSeedAuthorized(address)", +"af598bc7": "winnerOf(uint256,uint256)", +"af599a8d": "_depositTokens(address,uint256,address)", +"af59c789": "setVendingAmount(uint256,uint256)", +"af5a3db8": "finaliseVoting(uint256)", +"af5a7625": "getFundInfo(bytes32,string,address)", +"af5b065a": "getMinimumPurchase()", +"af5b0ece": "getAmountContributed(address)", +"af5ba32a": "_fund(uint256,address)", +"af5c1020": "InfinityDataChain()", +"af5c295a": "checkMaxAllowed(address)", +"af5c4540": "getVoteTokens()", +"af5c6f38": "synthesize(uint16[5],uint256)", +"af5cfae8": "remainingInvestment()", +"af5d4013": "toteLiquidatorTranserComplete()", +"af5ee700": "buyTokenPerEther()", +"af604173": "ico_startTime()", +"af608fad": "isTimelockAllowed(address,address)", +"af60b50f": "CGCoinsToken()", +"af60dc4f": "SCMOXToken()", +"af6128c2": "calcTotal(uint256)", +"af62a708": "getCrystalKindWeight(uint256)", +"af62cfd2": "endBetBlue()", +"af63066e": "userRound(address)", +"af6337fd": "pausecontract()", +"af6375cd": "setNewStartTime(uint256)", +"af63da13": "getMemberRegistry()", +"af640d0f": "id()", +"af6499c5": "ActiveDigger()", +"af653861": "applyAndLockSettings()", +"af664f3a": "Bitkat()", +"af6682ab": "query(uint256,uint256)", +"af66c560": "convertData(bytes)", +"af66eb1f": "LogWithdraw(address)", +"af6704ee": "NehalCoins()", +"af67cdc4": "HBToken()", +"af685482": "BonusChanged(uint8,uint8)", +"af68a2c4": "getMyGameDividends()", +"af68dd3f": "getBaseInfo(uint256)", +"af692e00": "getPullRequestById(bytes32)", +"af6972c0": "submitDeliveryCommitment(address[2],uint32,uint64[3],bytes32[],bytes32,uint256[2],uint256,bytes32,bytes32,uint8)", +"af6a2c5c": "JTCCtoken(uint256,string,string)", +"af6afce5": "min(int256[])", +"af6b08a1": "Sale(address,address,uint256,string,uint8,string,uint256,uint256,uint256)", +"af6b3615": "getInitialReportStakeSize()", +"af6b3d43": "roundSwitch()", +"af6bb824": "_cancelSale(uint256,address)", +"af6bd8ce": "durations(address)", +"af6c0f60": "bntToken()", +"af6c3021": "MaxReleasedBac()", +"af6c7f77": "crowdSaleStartTime()", +"af6cd244": "acceptAnswerAndFinalize(uint256,uint256)", +"af6d0437": "AtomicSwapRegistryConstructed()", +"af6ddad8": "shift_left(uint256,uint256)", +"af6df563": "withBonus(uint256,uint256)", +"af6e66e6": "Lockup36m(address)", +"af6f37a2": "getBasicTokenAmount(uint256)", +"af6f964d": "minReached()", +"af6fae22": "roomAvailable(string,uint256[],uint256)", +"af6fce9a": "RoyaltyInformationContractSet(address,address,bool)", +"af6fe8e2": "testGetToken()", +"af713566": "batch()", +"af713dda": "SUPPLY_FOR_PARTNERSHIPS()", +"af722ea7": "connectors(address,address)", +"af7296ec": "remainingBankroll()", +"af737da7": "_setClientLastPaidRate(address,uint8)", +"af738bbf": "setDepositoryDelegate(address)", +"af7520b9": "startingPriceOf(uint256)", +"af75ad2d": "createDispute(address)", +"af7665ce": "ethPriceFeed()", +"af769b54": "transferAcceptable(address)", +"af769eff": "Paper()", +"af76c4d2": "mined_blocks()", +"af76ccd7": "finishedPromotionIDs(uint256)", +"af77040e": "bonusIncreasePercentage()", +"af77649d": "paySmartContract(bytes32,uint256)", +"af77c473": "p_setGamePaused(bool)", +"af77ebee": "transfersOnOff(uint8)", +"af77f8bd": "setVIPBonus(uint256)", +"af7885b5": "listSubName(bytes32,uint256,uint256)", +"af78facf": "valueBonuses(uint256)", +"af7912a1": "bonusTake()", +"af791df2": "recoveryDone()", +"af794a4f": "tulips(uint256)", +"af79b437": "MintingDisabled()", +"af79ffde": "userInitialized()", +"af7a0899": "firstStageWallet()", +"af7a1762": "getBetfundingAddress()", +"af7a6164": "setMaxMessagesGlobal(int32)", +"af7b2eb7": "listAddresses(address[],uint256[])", +"af7bcf5e": "LigoToken(uint256,string,string)", +"af7bfd6c": "setValueAny(uint256)", +"af7c8f96": "changetokenBurnAddres(address)", +"af7d0eff": "setSellPrices(uint256)", +"af7d1890": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"af7d469c": "setGeneratorAddress(address,address)", +"af7d4b21": "RXPSale()", +"af7d5ebe": "change_p4(uint256)", +"af7d697e": "EnableTransfer()", +"af7d6ca3": "spend(address,uint256)", +"af7e8577": "TCCCoin()", +"af7ed9d7": "maxGasPriceInWei()", +"af7fdd76": "setModified()", +"af80562c": "testReceiveHash()", +"af819c67": "TTCSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"af81bd03": "_voteAndCheck(uint256)", +"af81c5b9": "addToken(address,uint256)", +"af8214ef": "LIMIT()", +"af82403c": "getNextNode(bytes32)", +"af8255ab": "updateProgress(uint256,uint256)", +"af825c78": "Hjjm()", +"af83782e": "setMinimumWishTribute(uint256)", +"af837832": "isPromo(address,address)", +"af83f252": "historyRed(uint256)", +"af8472b1": "consecutiveDeaths()", +"af84fb00": "withdrawAmount(uint256,uint16)", +"af8532e3": "roundDeadline()", +"af854db1": "allowedTransferDuringICO(uint256)", +"af857a84": "batchTrade(address[13][],uint256[15][],uint8[2][],bytes32[2][],bytes32[2][])", +"af862b6a": "ETH_withdraw(uint256)", +"af874a76": "isValid(address,address)", +"af87c366": "walletUnlock(address)", +"af87c833": "initiateProvider(uint256,bytes32)", +"af8927c1": "GetRealCost(address,uint32)", +"af8979fd": "confirmDeath()", +"af8996f1": "setPublicationFee(uint256)", +"af899735": "playGame()", +"af8a849c": "AllocationGranted(address,address,uint256,bool)", +"af8af39f": "setRate555()", +"af8b0ec7": "rewardRoto(address,uint256)", +"af8b7525": "CollectAndReduceFees(uint256)", +"af8b912d": "setVotingMachine(address)", +"af8c1946": "refundAllEther()", +"af8d5a48": "icoEndTimestampStage()", +"af8d7611": "setPointIdentifier(string,int256)", +"af8d98c9": "gameEndPlayNo()", +"af8d9f37": "addressContainsContract(address)", +"af8ec44c": "offerGanTokenForSaleToAddress(uint256,address,uint256)", +"af8f35c4": "_fallback()", +"af8f7fdf": "ProductUpdated(address,address,address,string,bool)", +"af8ff2f8": "runPreMint(address,uint256)", +"af906cf3": "setToken(uint256,address)", +"af91b947": "UnsuccessfulAttempt(address)", +"af91c5fd": "getVotersChoice()", +"af91e0bf": "freezeOracle()", +"af92080b": "downTick(address)", +"af92a693": "addRegistrar(address)", +"af933b57": "withdrawEther(address)", +"af93a6d1": "CatNamed(bytes5,bytes32)", +"af93aebb": "adjustPhaseBasedOnTime()", +"af93afdd": "Shipment(bytes,bytes,bytes,bytes,string,bytes,uint256,uint256,bytes,bytes,uint256,uint256,string,bytes,bytes,bytes)", +"af93e308": "HookToken(address,address,uint256)", +"af941129": "testMintGuyAuth()", +"af944fc7": "getQueueLenght()", +"af949df9": "isValidUser()", +"af9658cd": "custodianVerify(address)", +"af988341": "sendLink(string,string,string)", +"af9890aa": "GUS()", +"af98cfd6": "exchangeByBuyer(uint256,uint256)", +"af98f757": "cancelRequest(address)", +"af99a327": "finalizePartnerSale()", +"af9a3f9b": "hashName(string)", +"af9a51c6": "getComponents(uint16,uint8,uint256)", +"af9a91d9": "setDrawerFee(uint256)", +"af9a99fa": "updateDates(uint8,uint256,uint256)", +"af9afe73": "unmintTokens(address,uint256)", +"af9b192e": "RESERVE_AMOUNT()", +"af9b1cef": "transfer_funds_to_project()", +"af9b6bd2": "bidEMONTMin()", +"af9bbcc4": "unbanAccounts(address[])", +"af9c5e7a": "getWhitePlayer(bytes32)", +"af9cb8c0": "StartOfPayments(address,uint256)", +"af9cb9f6": "setRequiredStake(uint256)", +"af9dfd1a": "FoodTokenEmissionEvent(address,address,uint256,bool,uint256)", +"af9ee81d": "_unstake(address)", +"af9efd4c": "_api_PlaceBet()", +"af9f3e20": "BTCVERVIER()", +"af9f788c": "TankWithdrawSome(uint256)", +"af9fc8a8": "UHC()", +"afa01c90": "CollectibleIndex4()", +"afa03ac9": "doFailingTransfer()", +"afa0f8c9": "getUintCoinProduction(address,address,uint256)", +"afa12a8a": "roundEnds()", +"afa17725": "WillyCoin()", +"afa1d6c9": "mainSaleTokenRaised()", +"afa202ac": "setRolesContract(address)", +"afa25098": "returnCoins(uint256)", +"afa293d4": "getSource()", +"afa31744": "saleTokensAddress()", +"afa33fb8": "chkLockedB(address,uint256)", +"afa3a5d1": "SetdivForTransfer(uint256)", +"afa3de9b": "revokeUserLicense(address,string)", +"afa40bbd": "UNIT_PRICE()", +"afa4179d": "_getInvestorLockedAmount(address,address)", +"afa437c0": "callBackForRequestRandom(bytes32)", +"afa560b0": "transferToICAPCallGas()", +"afa5e0a9": "getCountry(uint256)", +"afa5e56a": "decExchangeBalanceOf(address,uint256)", +"afa5f45c": "changeDecimals(uint256)", +"afa60035": "doesAssetTokenExist(address)", +"afa60487": "getDocAsBytes64(uint256)", +"afa6c735": "PRICE_PRESALE()", +"afa72b9f": "CinderToken()", +"afa7a25f": "updateArtistsAccount(uint256,address)", +"afa902a0": "isAutoFowarding()", +"afa936b8": "deleteCertificate()", +"afa99860": "getTokenPrice(address,address)", +"afa9a86e": "tokensInPlay()", +"afa9f179": "toReal(int64)", +"afaaa654": "setEndIcoPreICO(uint256)", +"afaaf9f9": "DepositBroker()", +"afab2b0f": "inventoriesOfDate(uint256,uint256,uint256[])", +"afab729d": "EntrepreneurShop()", +"afabe8b4": "CALLToken(uint256,string,string)", +"afac8ed3": "rand(uint16,uint16)", +"aface2f1": "mintTokensFor(address,uint256,uint256)", +"afaebf3e": "setDispatcherAddress(address)", +"afaf6b2e": "AuditSafeGuard(bytes20)", +"afaf97e7": "privateSaleToken()", +"afb058ce": "teamTwoPrefix()", +"afb0db5f": "random3()", +"afb18fe7": "paymentTokenAddress()", +"afb2032b": "LuckChain()", +"afb390aa": "getIsSecondPhaseEndedByTime()", +"afb3a8e9": "accept2(uint256)", +"afb3ae7a": "SPECIALIST_ONE()", +"afb47bb3": "approveModeratorship()", +"afb4d2ee": "getM()", +"afb58d18": "setPriceOneToken(uint256,uint256)", +"afb688a2": "mineth()", +"afb6b9a5": "m_hardCap()", +"afb7e495": "eruptionThreshold()", +"afb95eed": "logApproval(address,address,bytes32)", +"afb97c20": "tokenTransferDelegate()", +"afbae469": "mediumSize()", +"afbb9d44": "ico1Bonus()", +"afbc4ebc": "OWNER_CUT()", +"afbcd19b": "CROWD_WAVE3_BONUS()", +"afbcd904": "setDataColla_001_001(string,string)", +"afbd3b7f": "minLot()", +"afbd8092": "CATRefundedForWei(address,uint256)", +"afbdaa05": "isInBlockFilter(address)", +"afbddfa9": "toggleFreezeTokensFlag()", +"afbde5c9": "getNumTopics()", +"afbea641": "SECToken()", +"afbec8df": "TheGrid()", +"afbfdd93": "Notonegoro()", +"afc01cb9": "getFinishTime()", +"afc0b5d3": "Crypto010()", +"afc0bf27": "registerName(string,address,bool)", +"afc0bf43": "setRecoveryInfo(bytes32,uint256)", +"afc0e324": "stringToBytes12(string)", +"afc17f80": "addLockedTokens(address,uint8,uint256,uint256)", +"afc24bfb": "getRules(uint8)", +"afc24e3d": "getChallengeAnswer(uint256)", +"afc2cc46": "SGEICO()", +"afc2f503": "allowEmployeeMigration(address,address)", +"afc361bc": "tokenFrozen()", +"afc3a2ad": "current_tier_sold_tokens()", +"afc3b688": "perc(uint256,uint256)", +"afc3c31f": "initDepositAccount()", +"afc48052": "mintBounty()", +"afc4a982": "PathCost(uint16,uint32)", +"afc6740e": "PricePerCafe()", +"afc6fe2e": "MaybePerformWithdraw()", +"afc75b1d": "SwissTrustToken()", +"afc797a6": "lastStealValue()", +"afc7c400": "ProICOPrice()", +"afc81953": "createGame(bytes32,uint256,uint256,bytes32,bytes)", +"afc83802": "setTotalWeiToBeDistributed(uint256)", +"afc88141": "WhitelistAddressdisable(address)", +"afc8fbc6": "MerkleAirDropToken(string,string,uint8,bytes32,uint256)", +"afca35e5": "QuadToken()", +"afcac546": "getByteSize(bytes32)", +"afcb0d3a": "place(int8)", +"afcc05c0": "buyRedirectFor(address)", +"afcc1286": "dtEnd()", +"afcc8676": "SMPLTSTToken()", +"afcced41": "CROWDSALE_GASPRICE_IN_WEI_MAX()", +"afcd565c": "createTile(uint16,uint8,uint8,uint8,uint32,uint16,uint64,uint64,address,uint8)", +"afcd6561": "getIdentifierFromSectionIndex(uint256)", +"afce2d62": "PoC()", +"afcee461": "DungeonRunAlpha()", +"afcf2fc4": "charityAddress()", +"afcfad6e": "getJobPayments(bytes32)", +"afd07e80": "getMiningWarRoundOfPlayer(address)", +"afd09bab": "quadrupler()", +"afd0a85a": "ListingCancelled(uint256,uint256)", +"afd0fd1d": "getDecimals(string)", +"afd20e33": "LOCKAMOUNT()", +"afd237bd": "getTxn(uint256)", +"afd23d4a": "STAGE_1_FINISH()", +"afd2d5f6": "OpinionToken()", +"afd3f79a": "_isCorrectQuarterBuyin(uint256)", +"afd42fd3": "addCloud(uint16,uint16,uint16,uint8,uint8)", +"afd51a6e": "updateLimit()", +"afd61d2c": "getBonusEgg(uint64)", +"afd6b607": "createRequestAsPayee(address[],address[],int256[],address,address,string)", +"afd7b21e": "companyCapital()", +"afd7b9ed": "angelStartTime()", +"afd7bf92": "noContract()", +"afd7d464": "FaradTokenSwap()", +"afd82067": "getScore()", +"afd8515e": "setTotumPhases(address)", +"afd8c8c4": "GasProxy(address,address)", +"afd8fd5f": "createToken(string,string,address)", +"afd925df": "setPermissionManager(address,address,bytes32)", +"afd9897e": "restTokens()", +"afda2dac": "jackPotC()", +"afda5460": "YDTToken()", +"afdac68d": "query(uint256)", +"afdb0970": "sendToBuyer()", +"afdbd499": "reclaimERC20(address,uint256)", +"afdc3823": "updateTlcTlr(uint256,uint8,uint8)", +"afdcd8ec": "RAZEN()", +"afdd4d23": "airDropValues(address,address,address[],uint256[])", +"afde86c1": "getHash2(address,bytes32)", +"afdebfe7": "setWeiRaised(uint256)", +"afdfaee7": "_preValidatePurchase(address,uint256,address)", +"afdfb804": "getVendors(uint256,uint256,bool)", +"afe007b6": "_transferAction(uint32,address,uint8)", +"afe0e33c": "reputationRewardLeft()", +"afe12e77": "withdrawWrongNode(bytes32,address)", +"afe14c19": "clean(address,address)", +"afe15cfb": "appealPeriod(uint256)", +"afe17129": "tokensStillInLockup()", +"afe18413": "placeOrder(address,uint256,address,uint256)", +"afe1d4cf": "setTechBonus3(uint256,string)", +"afe2ce0e": "setSaleAddr(address,bool)", +"afe38ade": "payoutWinners(uint256,address[],uint256[])", +"afe4720c": "toggleFeatured(uint256,string)", +"afe69bb0": "Create(bytes32,bytes32,address,address,address,uint64)", +"afe70413": "getCommissionForType(string)", +"afe76ab1": "calcProgress(uint256,uint256,uint256)", +"afe80b8d": "newCmas(uint256,string)", +"afe8abbf": "transferPresaleCoins(address,uint256)", +"afe8b652": "countriesCount()", +"afe948ce": "OKEToken()", +"afe98be1": "calculateId(uint256,uint256,uint32,uint256)", +"afe9c776": "XITC()", +"afec91c4": "icoInstalled()", +"afed762b": "toSlice(string)", +"afef07da": "ico2receivedTotal()", +"afef0e28": "MARKETING_supply()", +"afef25d7": "Puremail()", +"aff038e6": "sellForOtherCoins(address,uint256)", +"aff06fbd": "playerCancelActiveGame(uint256)", +"aff16621": "toSig(bytes)", +"aff177ca": "updateWhitelist(address[],bool)", +"aff1e0de": "crowdsaleTotal()", +"aff1f15f": "rate3()", +"aff21b00": "imOut()", +"aff21c65": "getMinimumEndowment(uint256)", +"aff23300": "UserWallet(address)", +"aff36885": "setBlockMaxVotes(uint256,uint256,uint256)", +"aff3a08e": "CreateFAP(address,uint256)", +"aff46572": "getMarketplaceContract()", +"aff4b849": "getMemberName(address)", +"aff4cbea": "SHIP_SLOTS()", +"aff57736": "getNumbersFromString(string,string,uint32)", +"aff5dff2": "getCreditsFor(string)", +"aff5edb1": "deregister()", +"aff6b3e8": "setupRace(uint256,uint256)", +"aff74c6d": "getTotalPeriods()", +"aff7bd49": "trackSell(address,uint256,uint256)", +"aff7fae4": "GodzSwapGodzEther(address,address,address)", +"aff8c7ab": "IkuraAuthority()", +"aff9b3cc": "getCarName(uint256)", +"aff9e954": "topOptions(uint256,uint256)", +"aff9f40d": "SaddleForSale(uint256,uint256)", +"affb62dd": "dAdd(bytes32,address)", +"affb672b": "realimmocoin(address)", +"affbe8ab": "ACNCToken()", +"affbf593": "withdrawExcess(address)", +"affc0670": "openVoting()", +"affca932": "changeFeeRate(uint256)", +"affcba25": "createNewMintableUser(address)", +"affcce10": "_unpackRaceData(uint256)", +"affd0dd4": "Funding_Setting_funding_time_start()", +"affe39c1": "owners()", +"affed0e0": "nonce()", +"affee29b": "submitEthToTokenOrderWHint(uint128,uint128,uint32,int256)", +"afff33f4": "GameEvent(uint256,address,uint8)", +"afff5064": "setBonusesForAmounts(uint256[],uint32[])", +"afff9720": "addrBounty()", +"b0005ff1": "validPresaleTrading()", +"b000c81b": "InitBetContract(address,address,uint256)", +"b000dec2": "total_token_sold()", +"b001134a": "balanceInTier()", +"b0011509": "calcMarketFee(uint256)", +"b00124c4": "epocum()", +"b00140aa": "getHash(bytes)", +"b0018bfc": "changeTokenName(string)", +"b0036d32": "mintByGateway(uint32,uint64,address,string)", +"b003dd86": "encode(uint256[])", +"b004079e": "lol(bytes32)", +"b0043308": "setaddAddressListItemSet(bool)", +"b00606a5": "confirm(bytes32,uint8,bytes32,bytes32)", +"b0062595": "KcashToken()", +"b006b86e": "_addEthereumAddress(uint256,address)", +"b006de0d": "initialBalanceForCrowdsale()", +"b006e2b0": "txhash(string)", +"b0070a30": "changeBeneficiary(uint256,address)", +"b00791fa": "proxy_contribution(address)", +"b0091773": "orderExecutionBlockTime(bytes32)", +"b009c50d": "DevxToken()", +"b00a0dbf": "allowanceTransfer(address,address)", +"b00a81fb": "buy(uint256,uint256,string,string,string,string,string)", +"b00b1239": "approveAndDeposit(address,uint256)", +"b00baa11": "DaicovoStandardToken(string,string,uint8)", +"b00bad50": "identifierToBuyoutPrice(uint256)", +"b00cdd9b": "preICOgoal()", +"b00d4c75": "singleLineWrong()", +"b00d70ca": "sollReserve()", +"b00dba63": "setTokenData(uint256,bytes32)", +"b00e8668": "can_refund()", +"b00eb9fe": "feeCalculator()", +"b00f9702": "setTeamPerfitAddr(address)", +"b0102e20": "equipMultipleTokens(uint256[])", +"b010d80e": "ensureTokensAvailable(uint256)", +"b010d94a": "canExitPool(address)", +"b0112ef2": "changeReserveCATDestinationAddress(address)", +"b0119a22": "genOrder()", +"b011fcf1": "doWithdraw()", +"b0128c08": "getCeiling()", +"b013b369": "_errorBuyingTokens(string)", +"b013f637": "getNicknameByAddress(address)", +"b013fa91": "JadeCoinMining(address,uint256)", +"b01454dd": "vrc()", +"b015b81a": "amountToTakeAsRake(uint256)", +"b015c2ce": "FLOWToken()", +"b0166b04": "testTransferringMkr()", +"b016f9f2": "ThirdAddressBalance()", +"b0171fa4": "getCurrentGenerationId()", +"b0175308": "PriceDecimals()", +"b017c036": "rlc()", +"b017d808": "assertEq32(bytes32,bytes32,bytes32)", +"b01800f8": "createNewUser(bytes32,bytes,bytes32,bytes32,address)", +"b0181b3c": "setMyIdentity(bytes32,string,string)", +"b018d65a": "maxAffiliate()", +"b0192f9a": "auctionManager()", +"b019ffd2": "thirdDiscountCap()", +"b01a71d8": "setProvider1(address)", +"b01ab46d": "validPurchase(address)", +"b01afdab": "changeBaseValue(uint256,uint256,uint256,uint256,uint256,uint256)", +"b01b0304": "ExchangeRateChanged(uint256,uint256)", +"b01b299f": "setTokenPriceProposal(uint256,uint256,uint256)", +"b01b3b6c": "_createSale(uint256,uint256,uint256,uint64,address)", +"b01b8877": "setFundingFueled()", +"b01c60b7": "getPrices(uint256,uint256)", +"b01d3d9e": "ENTToken()", +"b01d54ed": "PolyAi(uint256,string,uint8,string)", +"b01d5b63": "purchaseFor(address,uint16,address)", +"b01d7a11": "sendTokensToFive(address,address,address,address,address,uint256)", +"b01e8308": "JointToken()", +"b01ead43": "returnToOwners()", +"b01eba14": "MIN_TOTAL_AMOUNT_GET_ETH()", +"b01f1571": "unitsPerEth()", +"b01f31c9": "hardcapInTokens()", +"b0203f3f": "totalAmountsBetStage2(uint256)", +"b020b188": "developmentToken()", +"b020d7a3": "_reinvest(bytes32,uint256)", +"b021cace": "RubyCoin()", +"b0228f8c": "icoEtherReceivedMainSale()", +"b02447e0": "bonusChangeTime()", +"b024abad": "GoTokenDutchAuction(address,address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"b024b2e3": "GridyToken()", +"b0251e6d": "setUserLocked(address,bool)", +"b0259633": "SHIPToken()", +"b025abf1": "step0Rate()", +"b025cc45": "deadlines(uint256)", +"b0267126": "advisorySupplyRemaining()", +"b0271023": "verifyFile(string)", +"b0273de1": "addVpf(bytes32,uint256,uint256,uint256,uint256,uint256[])", +"b028c059": "createMatch(uint256,string,string,int32,int256,uint64,uint64)", +"b028d73a": "isCrowdsaleAllowed()", +"b028ee13": "s2b(string)", +"b0293850": "claimBuyerFunds(address,address,address,uint256)", +"b029c2c8": "approve_unwanted_tokens(address,address,uint256)", +"b029d940": "setPlatinumAddress(address)", +"b02a2fd1": "withdrawLemonCoins()", +"b02a73a1": "sendTo(address,uint256,bytes)", +"b02af038": "bonusesSold()", +"b02b69d6": "addBonus(uint256,uint256)", +"b02bf4b9": "earn(address,uint256)", +"b02c43d0": "deposits(uint256)", +"b02c8054": "withdrawICO(uint256)", +"b02da8d8": "diamondBonus(uint256)", +"b02dbd07": "teamAllowance()", +"b02e8496": "processSellRequest(string,address,uint256,uint256,bool)", +"b02ef382": "SALE1_END()", +"b02f1edc": "TokenERC20(string,string)", +"b02f53ae": "testConcatStorage31Bytes()", +"b03031b7": "_askQuestion(bytes32,bytes32,address,uint32,uint32)", +"b0304813": "currentMilestone()", +"b03053b6": "createListing(uint256,uint256,uint256)", +"b0321d45": "ZJMToken(address,address)", +"b03260be": "scheduleTransaction(uint256,address,bytes)", +"b032fff4": "weiMaximumAmount()", +"b0335ffc": "setStage(uint256,uint256,uint256,uint256,uint256)", +"b033777f": "endCurrentGame()", +"b033a02b": "payDivsValue(uint256,string)", +"b033a6c3": "lookup(address,uint256)", +"b033cab9": "voterStakes()", +"b0340123": "votingToken()", +"b0347c56": "estimatePots()", +"b0349184": "clearRecords(bytes32[])", +"b0349650": "_removeControllerByPartition(bytes32,address)", +"b034998b": "ChooseBwea()", +"b034d5aa": "Total_Deposits()", +"b034f3cf": "myLatestBid()", +"b0355b45": "LuHuToken(string,address)", +"b03645b5": "max_users()", +"b036ab65": "LemoSale(uint256,uint256,uint256)", +"b037e4f5": "MCoin()", +"b0388344": "readTaskCreatedOn(string)", +"b03903fd": "usernames()", +"b03941bc": "dropable()", +"b0397857": "secondaryListing()", +"b03b3a0a": "setPOOL_edit_13(string)", +"b03c4b33": "setLock(address,bool)", +"b03c6729": "inmax()", +"b03cf9bd": "MerkleAirdrop(address,bytes32)", +"b03d169c": "mineCount()", +"b03d5ce8": "PVCToken(address)", +"b03e02ad": "bluemoontestToken()", +"b03f75a5": "giveupBid(bytes32)", +"b04010c6": "fuse()", +"b0402d36": "LiveAuctionEvent(address,uint256,uint256,uint256,uint256)", +"b0407315": "purchaseWarehouseSpace(address,uint256,uint256)", +"b0408721": "buyVouchers(uint256)", +"b040d545": "tokenToTokenSwapOutput(uint256,uint256,uint256,uint256,address)", +"b0414a2d": "setMinimumGasLimit(uint256)", +"b0417e98": "checkVote()", +"b0419107": "_getNthNibbleOfBytes(uint256,bytes)", +"b042307d": "_isInterceptableMsg()", +"b0423141": "StringStorage(string)", +"b04247e9": "DentacoinAddress()", +"b04287b3": "sharesOfVault(uint256,address)", +"b0433fe9": "_supportsERC165(address)", +"b0445a77": "PRIME_VESTING_DATE()", +"b04464cd": "ChangeImage(string,uint256)", +"b0448884": "updatePrice(bytes10,uint32,uint64,uint32)", +"b04510d5": "xultoken()", +"b0459d49": "LoanStandard(address,address,uint256,uint256,uint256,uint256,uint256)", +"b0467deb": "getUser(uint256)", +"b0471d43": "primary_wallet()", +"b047dd06": "tokensale(address,uint256,uint256)", +"b047ee56": "getBalance_Token1(address,address)", +"b047f245": "listForSale(uint16,uint256)", +"b047fb50": "cooAddress()", +"b048357d": "lastBlock_a15()", +"b0483c3f": "reload(uint256,uint256)", +"b048546f": "Divide(uint256,uint256)", +"b0485706": "read_u32_array()", +"b048e60d": "FebToken()", +"b049474d": "disableSuicide()", +"b049d176": "cancelSellToBlackMarket(uint256,uint256,bool)", +"b04a1680": "GetConsentDirective(uint256)", +"b04a3f1c": "EndLottery()", +"b04b3f57": "isCustodian(address,address)", +"b04ca7f0": "dateAdmin()", +"b04d6638": "mangeFundAmount()", +"b04e74f2": "Gerritcoin()", +"b04e7668": "createCastleWithToken(address,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"b04eb639": "subCrystal(address,uint256)", +"b04fc4e1": "superContract()", +"b05005a2": "lock(uint128,string,address,bytes16,uint32)", +"b050b49c": "rewardFoundersAndPartners()", +"b050f83a": "proportion(uint256,uint256,uint256)", +"b051d722": "loadRandom(uint256)", +"b052852f": "approveAllocation(address)", +"b0532349": "_destroyContract()", +"b054058a": "nSign(uint256)", +"b0544308": "newLockTimestamp(uint256)", +"b0545532": "numGamesCompleted()", +"b0547d8c": "deleteShopMods(address)", +"b0557bf1": "updateParams(uint256,uint256,uint256,uint256)", +"b055a62a": "INCRYPTHEDGE(uint256,string,string)", +"b055d1bc": "amountProportion()", +"b055fdf2": "isTarget()", +"b05609ce": "pricegreengrey()", +"b0560eba": "GuardaProva(address)", +"b056561a": "DATE_31_DEC_2022()", +"b056bb81": "RedSoxYankees410()", +"b0573de6": "getDefaultPartitions(address)", +"b0575069": "ap(address)", +"b05784b8": "retreive()", +"b0578878": "translate(address)", +"b05940f2": "getOpenAuctions()", +"b059c177": "_0_name(uint256)", +"b05a0071": "DET()", +"b05a47d9": "VocToken()", +"b05d8096": "setStr(string,uint256)", +"b05e390a": "TokenEther(string,string)", +"b05eb08d": "_isLeapYear(uint256)", +"b05f1b88": "getAmountOfTransactionsInProposal(uint256)", +"b05f99f5": "changeInvestment(address)", +"b05fa837": "patronageContractForUsername(string)", +"b05fceba": "mDepositWallet()", +"b05fef55": "Issuer(address,address)", +"b0603326": "auctionStatus(bytes32)", +"b0604a26": "schedule()", +"b0604a9c": "testCantBuyTokensInStoppedSale()", +"b060b785": "getWithdrawableOperationFeeDatesAndAmount()", +"b060de3a": "withdrawAllOptions(address[])", +"b0619e85": "hasPermission(address,bytes32)", +"b0623074": "frozenTime(address)", +"b063152a": "generateHash(string)", +"b064bb56": "_ltoa(bool)", +"b064ca18": "userForceGameEnd(uint256)", +"b06576f3": "contrBonus(uint256[])", +"b0660c3d": "transfersAllowed()", +"b0667cf8": "queryPrice()", +"b066d3b7": "removeReputation(address,uint256)", +"b066dca9": "MERZhToken()", +"b066ef3c": "cooldown(uint32)", +"b0670cc9": "get_size()", +"b0671381": "isValidWalletSignature(bytes32,address,bytes)", +"b0673d57": "getItemStore(bytes32)", +"b0686584": "incNT()", +"b068776b": "SaleFinished(uint256)", +"b068b5b8": "getRank01()", +"b06939a2": "notEqual(address[],address[],string)", +"b0698763": "subdomainOwner(string,string)", +"b069dbf1": "sendFromContract(address,address[],uint256)", +"b06bcb40": "getAddressInfo(address,address)", +"b06c76d0": "totalMinedSupply()", +"b06df18e": "transfer(bytes20,address)", +"b06df2ae": "GetMyOrders()", +"b06e1e02": "changeTeamWallet(address)", +"b06e64ca": "maxTokensWithBonus()", +"b06eb03f": "DSEasyMultisig(uint256,uint256,uint256)", +"b06ee044": "totalBasicIncome(address)", +"b06eedf5": "getReferralBonusAmount(uint256)", +"b06f4d00": "AICoin(uint256)", +"b06f8d34": "redeemWallet()", +"b06fd1e3": "CRAWDSALE_START_DAY()", +"b06fe82e": "changeEtherRatioForOwner(uint256)", +"b07048d9": "remove_user(address)", +"b0705e44": "getMySword()", +"b070bbd4": "doCalculateRoom(uint256,uint256,uint256,bytes32,uint256)", +"b070bdc6": "all_obstacles()", +"b071cbe6": "hardcap()", +"b071fa2a": "SENC_HARD_CAP()", +"b0720613": "fundingMinInWei()", +"b072bd10": "usedSummReserve()", +"b0732278": "finishICO(address,address,address)", +"b073e2b7": "testMath()", +"b073f52b": "updateBalance(bytes32,uint8,int256)", +"b0756562": "addLottery(string,uint32,uint32,uint32)", +"b07576ac": "delMin()", +"b0759c3e": "lockInBatches(address[])", +"b0773d12": "payAndRemoveInvestor(uint16,uint256)", +"b07741fd": "refresherFee()", +"b077c09b": "readSample(bytes)", +"b0780bd8": "getDonationStats()", +"b0786de9": "NeptunSupply()", +"b078ffe8": "BitcoinUnicorn()", +"b0792570": "beneficiaryStake()", +"b0799375": "nameValue()", +"b079cf62": "getRandomDragon(uint256)", +"b07a3107": "isOraclizeQueued()", +"b07a6735": "processPrivateFunding(address)", +"b07bbefd": "updateValueAndMint(uint256,uint256,int256)", +"b07be1fe": "createThemedSpinner(string,uint256,address,uint256)", +"b07be207": "calculateTicketPrice()", +"b07c76e8": "LoggedDividend(uint256,string,uint8,string,bool,bool)", +"b07e4e34": "_unpackCycleValue(uint256)", +"b07ed982": "setMaxTokenSupply(uint256)", +"b07ee0d2": "erc20TokenTransfer(address,address)", +"b07f0a41": "exercise(uint256)", +"b07f1fa2": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,address)", +"b07f3025": "CROWDSALE_ETH_IN_WEI_FUND_MAX()", +"b081b9aa": "propose_beneficiary(address)", +"b081cfc5": "_thresholdOne()", +"b0827f42": "restrictedTokensDate()", +"b082b9c7": "getOrganisationCount()", +"b0837524": "minIcoTokenLimit()", +"b08428c1": "internalCalc(uint256)", +"b08480d4": "finishSettlement()", +"b08496dd": "_newSpaceshipProduct(uint16,bytes2,bytes2,bytes2,bytes2,uint256)", +"b08510a3": "setdissolvedcontract(address)", +"b0859b6f": "oraclize_setGasPrice(uint256)", +"b085a5af": "getMyWine()", +"b085b9a5": "Example()", +"b08639e3": "getRepAvailableForExtraBondPayouts()", +"b0867a5c": "joinGameRandom(uint8)", +"b086d5aa": "getUriSetCount()", +"b087b8bc": "getWorkflowCount()", +"b0882c4b": "newETHUSDPrice(string)", +"b0883120": "balanceOfBuyer()", +"b0885dd6": "distributeWithTransferFrom(address,address,address[],uint256[])", +"b0891f4f": "setTokenAgent()", +"b0894aa6": "getDateOfAcceptance()", +"b0898886": "claim_devidend_for(uint256)", +"b08a3619": "registerDepositAddress()", +"b08af3dd": "get_participant_num_of_uses(address)", +"b08b3410": "getStraightReleasableAmount(address)", +"b08ba6a1": "view22()", +"b08bbff0": "isUserAllowed(address,string)", +"b08c2915": "JP_winningHash()", +"b08c7730": "feeGame()", +"b08c9bd1": "refuseSale()", +"b08cfb84": "addWhitelistedAddress(address,address)", +"b08d2718": "ReleaseableToken(uint256,address)", +"b08db494": "toAddress(bytes,address)", +"b08e0d3e": "applyRefund(uint256,bool)", +"b08e0f4a": "manualWithdrawal(uint256)", +"b08f8e1d": "setContractHoldBalance(uint256)", +"b08f965e": "SSA()", +"b090c768": "LogSelectWinner(uint256,uint256,address,uint256,uint256,uint256)", +"b09173f6": "viewAffBonus(address)", +"b091a044": "transferRecord(address,address,uint256)", +"b092145e": "whitelist(address,address)", +"b0927de7": "newRepo(string,address)", +"b0933f25": "fixAdvance(uint256,uint64)", +"b0934d7d": "removeFromBlackList(address,address)", +"b0949833": "NineStandardToken(uint256,string,uint8,string)", +"b0950b8c": "canCloseVoteCommitPhase(address,bytes32,bytes32)", +"b09609d5": "LogMinting(address,uint256,uint256)", +"b097bdbd": "PRESALE_STARTTIMESTAMP()", +"b097c984": "setIEOAddress(uint256,address)", +"b098b86b": "ownsOrSelling(uint256)", +"b098bdba": "getAppeals(uint256)", +"b09938b8": "VormaToken()", +"b0994d4a": "authorizeOperator(address,bool)", +"b099cceb": "makeBet(bool)", +"b09ac6f2": "isUserProduct(bytes32,bytes32)", +"b09ad8a0": "upperBound()", +"b09afec1": "getTokenData(uint256)", +"b09b1a51": "buyUnicorn(uint256)", +"b09bc3bf": "try_to_get()", +"b09c0f30": "rewardWeekly(uint32,uint32)", +"b09c235e": "MargamCoin()", +"b09db392": "addressDevelopers()", +"b09df36a": "getFunctionSignatures()", +"b09f1266": "_symbol()", +"b09f168e": "tokenOfOwnerByRange(address,uint256,uint256)", +"b09f4af5": "executeLock(bytes16,address)", +"b0a0662a": "FIRSTSALE_BASE_PRICE_IN_WEI()", +"b0a08873": "adjustLoanParams(uint256,uint256,uint256)", +"b0a1bfa9": "updateFeeBalance(uint256)", +"b0a1c666": "newComment(bytes32,string)", +"b0a1e2b4": "disputeID()", +"b0a2365c": "percentTokensToSale()", +"b0a254a7": "addStackholder(address)", +"b0a267da": "userTipped(address,bytes32,uint256)", +"b0a54a76": "TN()", +"b0a5a57a": "createEmergencyFundReleaseProposal()", +"b0a5c979": "CheckAmbientHumdtyException(bytes32,uint32)", +"b0a66a84": "creator(bytes)", +"b0a6a5ab": "IoTonToken(uint256,string,string)", +"b0a6d947": "unfreeze(address[])", +"b0a77ef7": "WithdrawToSponsor(address,uint256)", +"b0a8489e": "btycBalanceOf(address)", +"b0a84974": "payedBalancesOf(address,uint256)", +"b0a8be37": "RegCost()", +"b0a91659": "FixProfit()", +"b0a94ef7": "Divest(uint256)", +"b0a9b0ff": "createTeam(string,string,uint256,uint256,address,uint256)", +"b0a9c7f4": "checkGameResult(address)", +"b0aa09f2": "mainSaleStartTime()", +"b0aab296": "getNextNode(bytes)", +"b0aae3fa": "passGateway()", +"b0abbc7b": "setData_23(string)", +"b0ac0ef2": "currentActiveGameID()", +"b0ac4c8c": "getLastData()", +"b0acc531": "reserveWave()", +"b0acd745": "EventCreateStatic(address,uint128,uint256,uint256)", +"b0acde14": "withdrawInternal(address,uint256,address[],uint256[])", +"b0ad38c4": "buildCity(string,uint256[2],uint256[2])", +"b0ad3a5f": "not(bool)", +"b0ae1d64": "getpurchaserAtIndex(uint256)", +"b0aed621": "addJugada(uint256,string,uint256,uint256)", +"b0af768b": "setTokenBurner(address)", +"b0b02c60": "setUpdateOperator(uint256,address)", +"b0b185c7": "allowedForwards(uint32)", +"b0b189ca": "sendToInvestor(address,uint256)", +"b0b24e2c": "ERC()", +"b0b2b499": "test_token_fall_back()", +"b0b315e7": "calculateMaxContributionUsd()", +"b0b3c9a6": "ETHERAFFLE()", +"b0b503f9": "MonyaToken()", +"b0b53a1f": "WSKYToken()", +"b0b60b06": "ZXGToken()", +"b0b773c4": "ESSgenesis()", +"b0b8579b": "hop()", +"b0b92263": "setTotalTokens(uint256)", +"b0b9603b": "saleTokens()", +"b0b99c7d": "createPotato(uint256,uint256,uint256,uint256,address)", +"b0ba621a": "SoapBox()", +"b0bb3759": "XPAAssets(uint256)", +"b0bc4d67": "preserveHolders(address,address,uint256)", +"b0bcc610": "scheduleTransaction(address)", +"b0bcd8f3": "preCrowdsaleOwner()", +"b0bd5888": "transferredTokens()", +"b0bdacc6": "setCoinAddress(address)", +"b0bebdf5": "endICOp1()", +"b0bed0ba": "selfBalance()", +"b0bed1e9": "SMSCoin()", +"b0bf092a": "getSoftCapInWeis()", +"b0bfe169": "changeAirdropLimit(uint256)", +"b0c0552f": "AuctionCreated(address,uint256,uint256,uint256,uint256)", +"b0c13bfb": "addDestroyer(address)", +"b0c1adac": "setPrice(uint256,bool,uint256)", +"b0c20e4a": "setRateProvider(address)", +"b0c2a163": "currentDifficultyWei()", +"b0c2ebfd": "NathalieToken(uint256,string,uint8,string)", +"b0c2ff43": "tokenAccountAddress()", +"b0c35c05": "autoBirthFee()", +"b0c39bbd": "setFreezeIn(address[],bool)", +"b0c42691": "frozenWallet2y()", +"b0c4b3bb": "dateEco()", +"b0c5134e": "forwardEther()", +"b0c577c1": "phase3TokenPriceInEth()", +"b0c6d7df": "clearMonsterReturnBalance(uint64)", +"b0c73bc6": "getInvitor(address)", +"b0c74430": "saysomething()", +"b0c7f709": "kingAutomaticCollectFee()", +"b0c80972": "setBalance(uint256,bool)", +"b0c8d2dc": "updateMeta(uint256,uint256,string)", +"b0c8f9dc": "add(string)", +"b0c95b1d": "SetAccess(address,uint256)", +"b0c9fec7": "ButtonClicked(address)", +"b0ca2e62": "VEC()", +"b0cae18a": "WDNA()", +"b0cb3299": "checkIfOnUncle(uint256,uint256)", +"b0cbaab2": "exp(int128)", +"b0cbc8b9": "callContractFunctionByAddress(address,string,address,address,uint256,uint256,bool,bool,string,string,bytes32,bytes32)", +"b0cbe292": "_extendBadges(uint256,address,uint256)", +"b0cbea9f": "updatePoll(uint256,bool,uint256,uint256)", +"b0cc0596": "getUserOptOut(address,address)", +"b0cc3951": "manualEntry(bytes32,bytes32,uint256,uint256,address)", +"b0ccbf8c": "rageQuit()", +"b0cccbc3": "setFreezeOracle(bool)", +"b0cccc84": "validResult()", +"b0ce8668": "IJC()", +"b0cee590": "TwiceAWeekCoin(uint256,string,uint8,string)", +"b0cf0dcb": "revokeTokenGrant(address,address,uint256)", +"b0cf35f5": "getNewFallbackDeposit()", +"b0d08d3d": "setTxCount(address,uint256)", +"b0d12477": "listMAS()", +"b0d138e8": "bounty_percent()", +"b0d13a25": "retrieveEther(uint256)", +"b0d1a26c": "advisorTimeLock()", +"b0d26478": "setIdentity(uint256,address,address,string)", +"b0d2b936": "_isTxExistWithArgs(bytes32,uint256)", +"b0d3a396": "ADDITIONAL_BONUS_NUM()", +"b0d3ef3d": "isOpenFor(address)", +"b0d4ff96": "getMadeTX(uint256)", +"b0d54bcf": "setTradingFee(uint256)", +"b0d56da6": "ElephantToken(uint256,string,string)", +"b0d60c2e": "rawTransferFrom(address,address,bytes32)", +"b0d65d29": "partialWithdrawal(uint256)", +"b0d66291": "migratebyowner(address)", +"b0d79497": "allowOrRestrictMigrations()", +"b0d7fd9a": "NewListing(uint256,uint256)", +"b0d81f94": "lockTokensForFs(address,address)", +"b0d8a83c": "Osmium()", +"b0d8b51f": "getOwnedTokenIds()", +"b0d997d9": "bitGuildContract()", +"b0d9fef9": "udfVUPDestination()", +"b0dbce71": "setStreamityContractAddress(address)", +"b0dc1666": "DacToken()", +"b0dc63eb": "startWineryProductByRegulator(string,string,string,string,int256)", +"b0dcbce5": "payWithPLAT(uint256)", +"b0dd15a6": "paint_pixel(uint256,bytes3,uint256)", +"b0dd2858": "TokenBuyPresale(address,uint256,uint256,string)", +"b0dd478a": "setCountdown(uint256[5])", +"b0ddaddd": "shareBalance(address,uint256)", +"b0de0c40": "getBalancesList(uint8)", +"b0de1cb7": "publish(uint64,bytes,uint64)", +"b0ded9ce": "fechAllCandidates()", +"b0df5f81": "_computeWings(uint256,uint256,uint256)", +"b0df9e53": "getCards()", +"b0e0346e": "UNLB()", +"b0e09ac0": "test_validShouldThrow()", +"b0e0ef09": "withdrawTokensFrom(address,address,address,uint256)", +"b0e12715": "makeTrade(address,address,uint256,uint256,uint256)", +"b0e16cce": "removedotchtooffer(uint256,uint256)", +"b0e1aaa5": "getNumPresaleTokensBought(address,address)", +"b0e1f553": "whiteListingContract()", +"b0e24364": "CaerusToken(address,uint256)", +"b0e37f79": "isChecker(address)", +"b0e4925c": "BCIA()", +"b0e547e8": "referrerLevel2Percent()", +"b0e572c8": "getStrategy(bytes15)", +"b0e5aa82": "_rememberBlockHash(uint256)", +"b0e5aa89": "bonusStage2SecondDay()", +"b0e657a7": "firstMintRound0(uint256)", +"b0e667a9": "bidSpaceship(uint256)", +"b0e757c5": "GameXChange()", +"b0e849fe": "auctusWhiteListAddress()", +"b0e8cba8": "toggleContractAccessForEverybody()", +"b0e9a1ef": "setHodlerTime(uint256)", +"b0ea1e2e": "START_TS()", +"b0ea8d8f": "getRedeemableTokensStaker(bytes32,address)", +"b0eb5162": "closeGeneralSale()", +"b0ebb261": "withdrawGift()", +"b0ebefbc": "distributeFoundersRewards(address[],uint256[],uint256[])", +"b0ec2bed": "test_8_accessRestriction_UnderscoreAddMember_shouldThrow()", +"b0ecc878": "calculateEthToAfterschool(uint256)", +"b0ecca8f": "LookAtLastTimePerZone(uint256)", +"b0ed439e": "getMaxHolder()", +"b0ed656c": "claim(bytes32,bytes32,bytes32)", +"b0ed9774": "changeTakeoutWallet(address)", +"b0ee60a3": "_addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"b0eeefea": "YANKEES(address)", +"b0eefabe": "setArbitrator(address)", +"b0f07e44": "registerData()", +"b0f0c96a": "hello(uint256)", +"b0f11234": "getMessageCommunicationHash(address,uint256)", +"b0f239e9": "totalCheque()", +"b0f23d80": "SetCountryCode(uint16,string)", +"b0f2b72a": "set_value(uint256)", +"b0f32e55": "ContractFactory(uint8,uint8)", +"b0f42dc4": "isPure(uint256,uint256)", +"b0f471dd": "_partFromProvider(uint256,address)", +"b0f5ae72": "exchangeEtherOnTokens(address)", +"b0f69523": "rentOut(address,uint256,uint256)", +"b0f72665": "multiSigDev(bytes32)", +"b0f7d744": "getBoughtTime(address)", +"b0f85a10": "airEndtime()", +"b0f94b16": "batchFishAquarium(uint256[],address)", +"b0f9ba74": "destroyEternalStorage()", +"b0f9f315": "accountClaimedReward()", +"b0fa4926": "buyLicenseForETH()", +"b0fa5032": "DDToken()", +"b0fb3095": "transferDividendBalance(address,uint256)", +"b0fc2c77": "peaceOf(uint256)", +"b0fc2d72": "grantPurchasedTokens(address)", +"b0fc9bdf": "lilitoken()", +"b0fd035b": "safeWithdraw(uint256)", +"b0fd935b": "registerCertificationDb(address)", +"b0ff4210": "BAFC()", +"b1000f23": "_airdrop()", +"b100ad20": "incremCounter()", +"b102bfbe": "getOwner(bytes)", +"b102f52b": "enterLottery(uint32)", +"b103bb58": "setMaximalInvestment(uint256)", +"b103c1dd": "claimCofounditTokens()", +"b103ef5b": "buyfp(uint256,uint256)", +"b10477c9": "getAntsSinceLastCollect(address)", +"b104c509": "earlyInvestorSupply()", +"b1050da5": "newProposal(address,uint256,string,bytes)", +"b105126f": "initLottery(uint256,uint256,uint256,int256)", +"b1057e9c": "sell2(address)", +"b105be51": "BoonyToken()", +"b105c904": "intrepidVouchersMinted()", +"b1063c19": "setMiBoodleVault(address)", +"b106ef69": "Tutoreum()", +"b1077666": "hitWin(uint256)", +"b107baa1": "minimunBTCToInvest()", +"b107e815": "bet(uint32,uint8[4])", +"b107ea12": "setDefaultAQL(uint256)", +"b1084ce2": "currentNorsefire()", +"b108501f": "WINNER()", +"b10908ff": "ACO_Token()", +"b1091e1b": "Ez()", +"b1099347": "buysTokens()", +"b109bc6d": "getUpVoteCount(bytes12,bytes12)", +"b109e894": "PRICE_VARIABLE()", +"b10c7544": "getCmd()", +"b10c7dc4": "revokeMembership(uint8)", +"b10cf224": "userUnlockToken(uint256)", +"b10d539b": "MergeStatus()", +"b10d5a52": "setTechnicalPercent(uint256)", +"b10d6060": "StorageToken(address,address,address[],uint256,string,string,uint8)", +"b10d6b41": "getDocument(bytes32)", +"b10e4172": "remove(bytes32,bytes32)", +"b10eabe8": "ADDOCoin()", +"b10ec8da": "LogPrepareContribution(address,uint256,uint256,uint256)", +"b10ed487": "minimumInvest()", +"b10f8583": "update(uint256,uint256,bytes32,bytes32)", +"b1103200": "poolEthCap()", +"b1110c29": "createTokenUri(uint8,uint8,uint8,uint8)", +"b1112507": "bonusDeadlineDefault()", +"b112349e": "get_my_dni()", +"b1135686": "votesIter()", +"b113d9dc": "tokensale(address)", +"b11408b7": "free1Of(uint256)", +"b1144c9a": "presaleAllocations(address)", +"b114b96c": "left99(uint256)", +"b11560c5": "removeFromWhiteList(address[])", +"b115d28c": "transferDaxsToken(address,uint256)", +"b1174177": "LogWhitelistRemove(address,uint256)", +"b117a3e8": "kingBank()", +"b118060e": "stringLength(string)", +"b1186efb": "decode(bytes,uint256,uint256,uint256,uint256)", +"b11873d1": "BOSX()", +"b11888d6": "testThrowOnTransferWhenNotCreator()", +"b11894c9": "addBadToken(address)", +"b1194648": "setSaleWeiLimitWithoutKYC(uint256)", +"b1194bc4": "setGlobalDelegation(address)", +"b1199a87": "resetMeter(address)", +"b11a19e8": "toString(bytes32)", +"b11a1b89": "setCoinContract(address,address)", +"b11a2a97": "setEDUPrice(uint256,uint256,uint256)", +"b11a41fb": "AfrFballCoinToken()", +"b11b40a1": "getDna2(uint256)", +"b11c4fd8": "approveAndCallcode(address,uint256,bytes)", +"b11cc099": "winPrize()", +"b11ce2db": "addContractAddress(address)", +"b11d8bb8": "revealVote(uint256,uint256,uint256)", +"b11dd097": "initEmployee()", +"b11e0acb": "supplyAvailable()", +"b11e3889": "bulkDepositTo(uint256[])", +"b11e3b82": "createEvent(bytes32,bool,int256,int256,uint8,address,address,bytes32[])", +"b11ec3b3": "MENSA1(address)", +"b1202774": "ico4Max()", +"b120c16a": "setReputation(address,uint256)", +"b120e1ef": "setTokenSaleDistribution(uint256)", +"b12155a9": "burnTokens2(uint256)", +"b121a199": "_transfer(address,address,bytes32)", +"b122a0ef": "joinCommunity(uint256)", +"b1233451": "setTerm(uint256,string)", +"b1237eae": "withdrawAmountTo(uint256,address)", +"b123f68b": "LogAddress(address)", +"b12673b2": "token10MstepCAP()", +"b1267579": "totalTokenRaiseWei()", +"b126d0e5": "createAndSellAllAmount(address,address,address,uint256,address,uint256)", +"b126dc4d": "blockIndex(uint64,uint64)", +"b127221d": "ICO_BONUS()", +"b127326e": "masterTransfersEnabled()", +"b1273db1": "batchSetInvite(address[],uint256[],uint256[])", +"b1275f9a": "addPlayer(address)", +"b1276a42": "addCurrencyExchangeRate(uint256,uint8)", +"b1283e77": "markets(uint256)", +"b1288c11": "bytes32ToString(uint16)", +"b128ca5c": "adjustCap(uint256,uint256,uint256,uint256)", +"b12931a6": "removeByValue(address)", +"b129497c": "john()", +"b12a8229": "tokenSaleEndTime()", +"b12b714f": "_add(uint256,address)", +"b12dca5a": "ergebnis(uint256)", +"b12de559": "invalidateOrdersBefore(address,uint256)", +"b12dff65": "relaxFundingCap(uint256,uint256)", +"b12e1449": "reserveEscrow()", +"b12e3e60": "voltTransfer(address,address,uint256)", +"b12e4410": "getTokenAddress(bytes32)", +"b12e5f09": "OpsManaged()", +"b12e9c41": "SYS_Token()", +"b12ed9ef": "FCOIN1122Token(uint256,string,string,uint256)", +"b12f9eab": "finalizeSet()", +"b12fe826": "addMod(uint256,uint256,uint256)", +"b13170d6": "Change_approvePay(address,bool)", +"b1321ed7": "payOutPercentage()", +"b1330ca9": "startVoting(uint256,string)", +"b133f39b": "_shuffleParams(uint256,uint256,uint256,uint256)", +"b13413b0": "allocateTokensToTeamAndProjects(address,uint256)", +"b1343ee9": "paymentsByUserId(uint256)", +"b1344271": "slasher()", +"b1347e9d": "mintsub()", +"b1356488": "getEndDate()", +"b135bbb0": "nextGameId()", +"b1366d5b": "bet(uint256,uint256,address,bytes32)", +"b1369e6a": "toFullUnits(uint256)", +"b13770af": "determinTID(uint256,uint256)", +"b13795af": "GDCNumber3()", +"b138251c": "fetchAllResult()", +"b138d500": "presaleAmount()", +"b138d838": "getContractEarnings()", +"b139275f": "transferto(uint256)", +"b139560b": "getCreateMarketEndTimeValue()", +"b139af17": "startSpaceship()", +"b139f780": "NRB_Common()", +"b13a2e1f": "chargeOwe(bytes32)", +"b13b4f2d": "wipe()", +"b13b6a2a": "_decreaseApproval(address,uint256,address)", +"b13bdfb6": "isAtMost(uint256,uint256,string)", +"b13c7047": "DragonKingTest(address,address,address,address)", +"b13c8fe0": "BILLION_TOKENS()", +"b13d5180": "checkAndCallApprove(address,uint256,bytes)", +"b13ef343": "Vesting()", +"b13fd2b8": "DividendAvailable(uint256)", +"b1401858": "levelOneBonus()", +"b1404198": "LogForwarded(address,uint256,bytes)", +"b1406a33": "buyNac(address)", +"b140bee5": "testFailBuyAfterClose()", +"b1418cf4": "payHouse()", +"b14201d0": "requestForArtistRegistration(bytes32,bytes32,bytes32)", +"b1429863": "test_oneFalseAssertNoMessage()", +"b1432cc3": "CrowdSale_Change_ReceiveWallet(address)", +"b1437e27": "tokenTotal()", +"b143c703": "createBarCodeData(bytes32,bytes32,int256,string)", +"b143c916": "getTeamPayouts(uint256,uint256)", +"b143d6fb": "setRunning()", +"b144a4d8": "DistributionSale()", +"b144adfb": "balance_of(address)", +"b14537b0": "maxContributor()", +"b145a5b8": "isInit()", +"b145c013": "checkPayout()", +"b146ba8e": "changeQuecoinAddress(address)", +"b146bdee": "cancelDigitalContract(string)", +"b14762bc": "setAirDropDestination(address)", +"b14781fb": "BITBalanceOf(address)", +"b14823e1": "logDisputeCrowdsourcerTokensMinted(address,address,uint256)", +"b148313e": "partnerSaleTokensPurchased()", +"b1483eee": "_TARGET_EPOCH_PER_PEDIOD()", +"b14904b4": "BTCET()", +"b14959dc": "setbonusDate(uint256)", +"b1498e29": "insert(string)", +"b149ece0": "joinPool(uint8)", +"b14a44ac": "_unregisterArtist(address)", +"b14cf5e0": "changeManager(address,address)", +"b14d703f": "Bitsonalite()", +"b14debe4": "getEthPhiRate()", +"b14e7bc1": "_isOperatorForPartition(bytes32,address,address)", +"b14ec275": "_createHero(uint256,uint256,uint256,uint256,address)", +"b14ecf18": "BlackSwan()", +"b14edac5": "destructo()", +"b14f2a39": "changeTreasury(address)", +"b14f6439": "finshCrowdsale()", +"b14f8432": "hasValidSubscription(bytes32,address)", +"b15089b1": "unlockBonusTokens(uint256,uint256,uint256)", +"b151c0c8": "ModuleRegistrar(address)", +"b15201b2": "MIN_TIME_EXPLORE()", +"b1523087": "_transfer(address,uint256,address)", +"b1527bd9": "CYFM()", +"b152f19e": "getFirstSchedulableBlock()", +"b152f6cf": "TOKEN_SUPPLY()", +"b152fbd1": "lockingRatio()", +"b1536051": "_contractFallback(address,address,uint256,bytes)", +"b154224e": "TimeLockMultisig(address,address[],uint256)", +"b1542d39": "_createCrab(uint256,uint256,uint256,uint256,bool)", +"b1546194": "TimeBoxToken()", +"b154dea6": "NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_ID()", +"b154f47c": "dev3Wallet2Pct()", +"b1557c2c": "lastContract()", +"b155c7d6": "devTokensIco2()", +"b155d434": "FINTIFLUSHKA()", +"b15651ff": "emissionPrice()", +"b156f79b": "FeeAddr2()", +"b1574b38": "toggleActive(string)", +"b157528b": "getERC20(address,address,address,uint256)", +"b157add3": "bonus_()", +"b157bfab": "VerEstadoSocio(uint16,uint32)", +"b157c5cd": "setJudge(address)", +"b15868eb": "GetVersions()", +"b15897cc": "setfreeze(bool)", +"b158a23f": "betOpen(uint256,string,string,string,string,bool)", +"b158b63f": "getBillOwner()", +"b1597517": "getPoolState(uint256)", +"b1598725": "CultureTravelFoundationAddr()", +"b159bcff": "COMPANY_ACCOUNT()", +"b159beac": "MINIMUM_QUORUM()", +"b159d61b": "addSellerSig(string,string)", +"b15a3647": "trade(uint256,uint256[3],bytes32,bytes32,uint8)", +"b15a72d8": "wagerPool13()", +"b15aa5b7": "getSignHash(bytes32)", +"b15addec": "Test1()", +"b15b2c29": "GetContractStateEarlyTerminatedByTenantSecDep()", +"b15d6f35": "requestChangeInsurer(address)", +"b15dc523": "minFundInEther()", +"b15dcc25": "query(address,bytes2,uint256)", +"b15fbfe6": "getFromAmountBooks(address)", +"b16020a0": "STBIToken()", +"b160a86b": "setKycHash(bytes32)", +"b1610080": "TravelNote()", +"b1610d7e": "VOTING_PERIOD()", +"b16219c6": "feeWithdrawTokenAll()", +"b1622818": "softWithdrawRewardFor(address)", +"b162a382": "updateName(address,bytes32)", +"b163cc38": "addBalance()", +"b1643e96": "changeFeeEVOT(uint256)", +"b1648152": "setBetMinMax(uint256,uint256)", +"b1649a2d": "cancelOrder(address,address,address,address,bytes32)", +"b1652b2f": "playerRollDice(uint256,address)", +"b16562fe": "fipsRegister(address,bytes)", +"b165a332": "getPercentageBonusForIco(uint256)", +"b1662d58": "setModule(address,bool)", +"b16661bf": "joinAgreement(bytes,uint8,bytes32,bytes32)", +"b166b55a": "LogRemainingHalvingSubsidy(uint256,uint256)", +"b166c1ba": "sendProfit(address,uint256)", +"b167c34e": "getTxAtIndex(uint256)", +"b167d512": "allowedSince()", +"b167fe1b": "getExploreItem(uint256)", +"b168da8a": "getCustodianName(address)", +"b1699e2e": "C(bool)", +"b16a4a52": "TokensUnfrozen()", +"b16a867c": "summary()", +"b16ab3a3": "emergency_token_withdraw(address,address)", +"b16afaf6": "OChain()", +"b16b1e28": "getAddressField2()", +"b16b8485": "setExchangeStart(bool)", +"b16bd58f": "maxTokenlossValue()", +"b16c09f0": "clearIssuanceData(address)", +"b16c9e59": "flexibleReward()", +"b16d0839": "RootsToken()", +"b16d0e38": "IBG(string,string,uint8,uint256)", +"b16d1538": "nonEthWeiRaised()", +"b16d22a0": "StopPaymens()", +"b16d2fd1": "winnerTicket()", +"b16d8622": "maxICOSupply()", +"b16dd130": "baseKernel()", +"b16deab2": "CentrallyIssuedToken(address,string,string,uint256,uint256)", +"b16eaafa": "PetsToken(address)", +"b16f4a3a": "GPaid()", +"b1700e61": "trackAddresses(address)", +"b17076b2": "RemoveProofOfOwnership(bytes32)", +"b1718455": "NUM_COIN_PER_AXIE()", +"b171ae40": "ethSold()", +"b171b18f": "triggerInvestment()", +"b171dee6": "_setCategories(address,uint256,uint256)", +"b17216f5": "mintForwarder(uint256,bytes32,address)", +"b17231ac": "sendTokens(uint64,uint256)", +"b1723215": "TestPersandToken()", +"b17346fd": "finalizeSeedSale()", +"b174734c": "pendingOwner1()", +"b175a0d2": "BONUS_TIER_3_LIMIT()", +"b17607e9": "costoken()", +"b1766617": "ganTokenNoLongerForSale(uint256)", +"b176a0b4": "RabbitArena(address)", +"b1782d18": "tgrNumber()", +"b17922f6": "onlyRoles(address,uint16)", +"b179882d": "RESERVED_PRESALE_CAP()", +"b179f4d8": "G5()", +"b17a56f7": "isTrustedLink(address,address)", +"b17a98b6": "withdrawAllToWithdrawalAddress()", +"b17a9e11": "confirmCustomer(uint256)", +"b17aa196": "_generateNewRandom()", +"b17acdcd": "collectFees(uint256)", +"b17b94c1": "testSystem()", +"b17c3f99": "confirmation(uint256)", +"b17c6ab8": "cancelSaleOrder(uint256)", +"b17d5938": "submitPool(address,uint256)", +"b17d8646": "EpisodeManager(address,address)", +"b17df316": "setMigratedBalance(address,uint256)", +"b17e8c4f": "tokensForplutonics()", +"b17eb9dc": "supporthill(uint256)", +"b17f0c1c": "tokenSaleWeiCap()", +"b17f5332": "EnterCode(uint256)", +"b17fc36d": "setSoftCapDeadline(uint256)", +"b18019bd": "_executeVote(uint256)", +"b1816f60": "TEMTicket(address,uint256,uint256)", +"b181954d": "addAttribute(string,bool,bytes32,string,string)", +"b18196f4": "GenexiToken()", +"b181a8fc": "resetContract()", +"b181d3d5": "GMF()", +"b1826ee7": "getLevelUpFeeByLevel(uint256)", +"b1829738": "setContractorsProfitAddress(address)", +"b184be81": "drain(address,uint256)", +"b18588fb": "updateGravatarName(string)", +"b185a8a4": "ChangedTokens(address,uint256)", +"b186eed8": "dealerDay()", +"b1871886": "growthReserve()", +"b1874b99": "INVESTMENT_USER1()", +"b187984f": "disableTransfer()", +"b187b6b1": "getBlockValueBalance()", +"b187bd26": "isPaused()", +"b1881225": "KEYS(uint256,string,uint8,string)", +"b188c70d": "feeMode()", +"b1895823": "mintMultiToken(address[],uint256[],uint256)", +"b189ad2a": "testErrorUnauthorizedAfterTransfer()", +"b189fd4c": "hash(uint256)", +"b18a02a4": "getPlayers(uint8)", +"b18a714e": "getReservedBalance(address)", +"b18a78e3": "currentBetAmount()", +"b18af4e3": "addProduct(bytes32,uint256,string,string,string)", +"b18bca4d": "countAbstentions()", +"b18c6847": "manualUpdateBalances()", +"b18d0c80": "getImageWidth(uint256)", +"b18de618": "EndQuestion()", +"b18e0ab8": "FooWallet(address[],uint256)", +"b18e4f5f": "appendKeyValue(string,string)", +"b18ef18c": "GlobalChain()", +"b18efff3": "GenesisCatsAdded(bytes5[16])", +"b18f1943": "ownersLength()", +"b1905727": "getPermissionManager(address,bytes32)", +"b19068c7": "minimumWager()", +"b19129b1": "addCustomertoBL(address,address)", +"b19183f2": "HodlReleased(bool)", +"b191f79d": "isJobStart(uint256)", +"b19208f3": "getPreIcoFunds()", +"b192da2d": "burnt()", +"b1933a0b": "getAllSharedAccounts(bytes32)", +"b1934151": "tokenScaleFactor()", +"b1936c24": "presaleOngoing()", +"b194073a": "getUmkaAddress(address)", +"b194c73a": "EpinToken(address,address)", +"b196aabb": "maximumBaseContribution()", +"b196f378": "weiLiquid()", +"b1972567": "lockAddresses(address)", +"b1976a02": "Get()", +"b197997a": "getCurrentYearMinedTokenCap(uint256)", +"b1987c7d": "NotaryPlatformToken()", +"b1989a2b": "calculateFadeoutToPool(uint32,uint256[9])", +"b198ef45": "checkVotingForAllowTransfer()", +"b1999937": "leapYearsBefore(uint256)", +"b19a4540": "allocatedEth()", +"b19a5f62": "placeOpenPurchaseOrder(address)", +"b19ab052": "withdrawEtherManually()", +"b19ab945": "maxBurnThreshold()", +"b19b1550": "FintechnicsPublic()", +"b19b2162": "refundFailedAuctionAmount()", +"b19bc02e": "Griddeth()", +"b19c0f5e": "registerForCompetition(address,address,address,address,address,uint256,uint8,bytes32,bytes32)", +"b19d134d": "reviseNumAvailable(uint256,uint256)", +"b19d4916": "setCompte_2(string)", +"b19d632b": "publish(bytes32,uint256)", +"b19e288c": "set_pauseCWC(bool)", +"b19f30e2": "changeKYCAddress(address)", +"b19faed8": "doSucceedingApprove()", +"b19fde5a": "getPresaleAllocation(address)", +"b1a00406": "getactendlen()", +"b1a0570d": "mintBIX(address,uint256,uint256,uint256)", +"b1a06ee7": "setPreSaleTokenExchangeRate(uint256)", +"b1a08010": "orderTrader(bytes32)", +"b1a11c92": "trashedTokens()", +"b1a1318a": "HolderAddress(uint256)", +"b1a1b3bc": "get_chronus()", +"b1a2bbd1": "TOTAL_TOKEN_CAP_OF_SALE()", +"b1a329d7": "optionPoolTotal()", +"b1a34e0d": "addClaim(uint256,uint256,address,bytes,bytes,string)", +"b1a3c6b4": "Balances_of(address)", +"b1a56055": "add_OEM()", +"b1a6676e": "isBurnActive()", +"b1a681c8": "receiveEtherAndData(bytes)", +"b1a6afd3": "declaration()", +"b1a7c005": "hashDelegatedTransfer(address,uint256,uint256,uint256)", +"b1a82e8f": "Jaak()", +"b1a8b25a": "returnBalanceToMainAccount()", +"b1a96135": "DMT_TotalSuply()", +"b1a997ac": "poke(address)", +"b1a9bd77": "settlementIsRunning()", +"b1a9f8a4": "_toString(bytes32[4],uint256,string)", +"b1aa6dfa": "finishInitOwners()", +"b1aac629": "addSoundEffect(uint256,uint8[])", +"b1ab0999": "supportKickoffQuorum()", +"b1ac478f": "_generateBattleReward(uint256,int32)", +"b1ad4c48": "getInvestorDividendsAmount(address)", +"b1adc241": "BalanceDB()", +"b1ae9017": "refundsall()", +"b1ae9887": "lastTreeId()", +"b1afe96b": "setMaxInvestorContributionInWei(uint256)", +"b1b2aef3": "testInsertProductIntoCart()", +"b1b30533": "contractTokenWithdrawToFreeTokens(address,uint256)", +"b1b3d3f6": "allow()", +"b1b5537c": "activateCycle(uint256)", +"b1b68cce": "getListIndices(address)", +"b1b68fad": "makeTradable()", +"b1b6a6ed": "addPremineAllocation(address,uint256)", +"b1b6aecb": "SLMToken()", +"b1b79120": "setFightFactor(uint8)", +"b1b7c88f": "getPreSaleBonusRate(uint256)", +"b1b82922": "_getProviderRateHistory(uint256,uint256,uint8)", +"b1b96fdf": "giveTokens(address[],uint256)", +"b1b9e78d": "acceptOffer(address,uint256)", +"b1ba6ad7": "privateSaleAddress()", +"b1bb1a60": "serviceGroupChange(address,address,uint8)", +"b1bb4d35": "proxyMint(uint256,bytes32)", +"b1bb5855": "maxTicket()", +"b1bb5fde": "runningDebt()", +"b1bb7e0f": "verificationPeriod()", +"b1bbc6f5": "onlyBouncerSetGasRefund(bool)", +"b1bbd453": "winnerWithdraw(uint256)", +"b1bcc1b7": "depositOrder()", +"b1bd7683": "maxAvailableForSale()", +"b1bd7b80": "transEther()", +"b1be53e9": "getCancel(bytes32)", +"b1beb3c0": "NonActivationWithdrawal(address[2],uint256[7],uint8,bytes32[2],uint256)", +"b1bf0510": "getJobsBoard(uint256)", +"b1c0e063": "cancel(address[3],uint256[4])", +"b1c0f2df": "maxWithWhitelist()", +"b1c16a2b": "HARD_CAP_TOKENS()", +"b1c19c4d": "LetItPlayTokenPromo()", +"b1c23704": "myMethod3(string)", +"b1c23ce6": "saleContributions()", +"b1c25586": "lockTokens(address,uint256)", +"b1c30210": "setValidationData(uint16,uint16,uint8,uint8,uint8,uint8,uint16)", +"b1c32b2b": "updateAngelLock(uint64,bool)", +"b1c3c97e": "increaseTotalWinningStake(uint256)", +"b1c4b70d": "confirmLawfulness(bool,bytes32)", +"b1c5f992": "setAffiliateRate(uint256)", +"b1c62e8a": "createProductionUnit4()", +"b1c6517a": "LookAtNumberOfPlayers()", +"b1c6f883": "recordCreate(address,uint256,int256,bool)", +"b1c73525": "getKeccak256(uint256)", +"b1c8ac52": "minEthToContribute()", +"b1c90f6f": "ClaimingTimeLimit()", +"b1c9cc6c": "getSBounty()", +"b1c9fe6e": "phase()", +"b1ca3b3a": "_icoTokens()", +"b1cb0db3": "expires()", +"b1cb267b": "getE()", +"b1cb4217": "betContractUP()", +"b1cb43bf": "tokenToExchangeSwapInput(uint256,uint256,uint256,uint256,address)", +"b1cb574b": "setEarlyParticipantWhitelistMultiple(address[],bool[],uint256[],uint256[])", +"b1cb9425": "private_kill()", +"b1cc1d4d": "depositAndBundle(uint256)", +"b1cc38d0": "setShortPositionExpired()", +"b1cc4348": "placeWager()", +"b1cc7c60": "mintInterest(uint256)", +"b1cd221a": "redeem(address,uint256,string)", +"b1cd79de": "setlockaddress(address,uint256)", +"b1cdbe2a": "ELTC()", +"b1ce0a9b": "nextPayoutBlock()", +"b1ceb746": "acceptContribution(address,uint256)", +"b1cedd89": "PayPerkToken()", +"b1cee330": "arrayOfTokensByAddress(address)", +"b1cf404b": "sendTokensToOneAddress(address,uint256)", +"b1d006d6": "extendICO(uint256)", +"b1d0073b": "updateMaxNumMC(uint256)", +"b1d05422": "SendEmail(string,string)", +"b1d06c46": "moduleHandler(address[])", +"b1d0b725": "sellStatus()", +"b1d0fbc5": "uraniumplusToken()", +"b1d11f23": "setVesting(address,uint256,uint256,uint256,uint256,uint256,bool)", +"b1d17c98": "distributeTokens(address)", +"b1d1a159": "curRefNumber()", +"b1d1fed9": "multisigDXF()", +"b1d2372b": "JumboToken(string,string,uint256,uint256)", +"b1d27e3f": "setSmallPrice(uint256)", +"b1d3ea61": "salesContract()", +"b1d45fad": "HoneyBadger(address)", +"b1d4e357": "addTokenToFund(address,uint256)", +"b1d5114c": "Hawk2(uint256,string,string)", +"b1d51d31": "pay(uint64,address)", +"b1d66003": "getRareItemInfo()", +"b1d6a2f0": "saleAgent()", +"b1d7ee21": "discountMultiplier()", +"b1d919ed": "LogCertifierDbChanged(address,address)", +"b1d9647e": "ecoBuilder()", +"b1db1cac": "gameGetTokenBankrollList()", +"b1db9c2e": "WordCoin()", +"b1dbb87a": "DEVELOPER_FEE_PERCENTAGE()", +"b1dbeb37": "PRTC()", +"b1dce014": "buildTeamMapping(uint256)", +"b1ddf52f": "getAuctionByIndex(uint256)", +"b1de4f0f": "setOwnerMaster(address,address)", +"b1de74d6": "LOG_SpinsContainerInfo(bytes32,address,uint256)", +"b1e045f7": "sponsoredJackpotMax()", +"b1e05e8a": "extractBytes32(bytes,uint256)", +"b1e19d45": "whitelistBurnFrom(address,uint256)", +"b1e1c18f": "addToManagementWhitelist(address)", +"b1e1ff3a": "tokenMetadata(string)", +"b1e254c7": "mock_clear()", +"b1e2a116": "playersToTotalBets(address)", +"b1e2cb03": "newLottery()", +"b1e2e1dc": "rollRoom(uint256)", +"b1e2e28c": "YUPIE_PER_ETH_SALE()", +"b1e3301f": "checkFlags(uint16,uint16)", +"b1e35242": "getMeOutOfHere()", +"b1e37921": "setDefaultMintingAddress(address)", +"b1e3dd57": "availableTokensAmount()", +"b1e50702": "setConfigSetupContract(address)", +"b1e5e2b7": "openBox(uint256)", +"b1e776e3": "updateMarketCap(uint256)", +"b1e834b0": "totalPreSaleTokenIssued()", +"b1e8aea8": "turnBackTime(uint256)", +"b1e8cca8": "openWormhole()", +"b1e9292f": "min256(uint256,uint256)", +"b1e9932b": "claimAndConvertFor(address[],uint256,uint256,address)", +"b1e9b21d": "deletePokemon(uint256)", +"b1e9ee64": "addressChangeRequests(address)", +"b1eac37e": "jackpotAmount()", +"b1eb2c10": "getForecast(bytes32,bytes32)", +"b1ebcce1": "setTxcode(uint256,uint256,uint256)", +"b1ecb343": "recentPlayersBack()", +"b1ed795e": "withdraw_all_eth()", +"b1ed8c99": "stageFourEnd()", +"b1eefcc1": "_changeOwnership(address,address,uint256)", +"b1ef2e97": "setXPROMO_MULTIPLIER(uint16)", +"b1efbd6f": "setMinimumEthereumToInvest(uint256)", +"b1efc755": "operationAmount()", +"b1efeece": "assignedSupply()", +"b1f0a72f": "getSubmittedStateRoot(uint256,uint256)", +"b1f0e40b": "finanVestingStage()", +"b1f253f6": "theDividendsOf(bool,address)", +"b1f25ffe": "calcFutureDebt(address,uint256)", +"b1f29590": "totalTulipCount()", +"b1f2e537": "setIsTokenTransferOpen(bool)", +"b1f32231": "awe()", +"b1f35246": "setActualMinerAddress(address)", +"b1f395ea": "addPauser_(address)", +"b1f3b35c": "listeners(uint256)", +"b1f3ec87": "SafeasyToken()", +"b1f42430": "ZitKOINCrowdsale(uint256,uint256,uint256,address,address)", +"b1f4ff90": "filters()", +"b1f525c6": "counter(uint256)", +"b1f56187": "debugBuy()", +"b1f5b6da": "setTokensLimit(uint256)", +"b1f6bd0d": "deleteInvoice(bytes32)", +"b1f7cec8": "sendRemainingETH()", +"b1f8100d": "proposeNewOwner(address)", +"b1f864fb": "diamondIndexToOwner(uint256)", +"b1f9275f": "ENJ_UNIT()", +"b1f99cd5": "blockDotCoinbase()", +"b1fa884d": "FixedChain()", +"b1fc0792": "ICO_LEVEL_5()", +"b1fc756f": "getRefBonusPercent()", +"b1fc8466": "MAX_AVAILABLE_JOINTTOKENS()", +"b1fca956": "endTimeRound1()", +"b1fe1b4a": "weiRaisedICO()", +"b1fe3eef": "buyTokensFor(address,bytes32,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"b1fe5f58": "BIDDED()", +"b1fe933d": "incrementRedemptionAddressCount()", +"b2016bd4": "collateralToken()", +"b2019b8a": "EmtCrowdfund(uint256,uint256,string,string)", +"b202a9f4": "ERC223MintableToken(string,string,uint8,address)", +"b203bb99": "balance(address,address)", +"b204bb5d": "AddTicket()", +"b2057a6f": "inquireDividentAmount()", +"b205feb7": "stringToUint(string,int256,string)", +"b2067bd6": "ETHs(uint256,string,uint8,string)", +"b206eb42": "getImageDescriptor(uint256)", +"b207e32b": "testChangeRole()", +"b2085903": "Winner(address,uint32,uint32,uint32,uint256)", +"b208a600": "Nordic()", +"b20953f2": "isFiscal(bytes32)", +"b20a459d": "ZZZToken()", +"b20a4abb": "LogCustomSale(uint256,uint256,uint256,uint256)", +"b20a8779": "transferPreICOCollected()", +"b20b0ef5": "getAvailableCardCount()", +"b20b8403": "updateClaimFee(uint256)", +"b20baa00": "RegisteredToken(address,uint256,address,address)", +"b20bf95b": "setYearlyUSDSalary(address,address,uint256)", +"b20c0e43": "PHASE1_RATE()", +"b20c9f8b": "sellMaximumPossibleAmountOfTokens()", +"b20cc590": "allowedRoles(uint8)", +"b20cedc3": "getAdmin(address,bytes32)", +"b20d30a9": "setDailyLimit(uint256)", +"b20d3b1c": "vestingReleased(uint256,uint256,uint256,uint256,uint256)", +"b20de8f3": "TECHNOToken()", +"b20debeb": "Duckcoin()", +"b20e5a79": "getdecimals()", +"b20f41ab": "updateBaseComparable(int256)", +"b21089dc": "removeInvestmentPackage(uint256)", +"b210dac9": "confirmTransactionSig(bytes32)", +"b210e434": "functionThree()", +"b210f639": "PlatformAutonomyAddr()", +"b2112ce6": "beerContract()", +"b21287ae": "ToOwner()", +"b212a23e": "ethConvertRate()", +"b2138754": "verifyDocument(bytes32,bytes32[])", +"b213d77d": "editBalanceOf(address,address,uint256)", +"b2141ba4": "assertCompareBalance(uint256,uint256)", +"b21457e3": "getInvestorByIndex(uint256)", +"b214691c": "setAgent(address,address,bool)", +"b2148d38": "getBasicExtraBallotFeeWei()", +"b214ecda": "createGift(uint256,string,string)", +"b214faa5": "deposit(bytes32)", +"b215814b": "emtpyTo(address,address)", +"b215a879": "cg()", +"b215d2c9": "getCertainProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"b215f30c": "changeWhitelist(address,address)", +"b2163482": "lockedAt()", +"b216c15d": "copyPopRequest()", +"b2170394": "getLastPaperFromContract(address,address)", +"b2173afd": "setzAddressesArray(address[2])", +"b21800d0": "TokenTransaction()", +"b2185bb1": "drawWinner()", +"b2186b05": "CrowdsaleSoftCapReached(uint256)", +"b2189168": "updateGame(uint256,string,uint256)", +"b2189d5a": "GetUserPELOBonus(address)", +"b218cf15": "registerToPool(address)", +"b2194fd8": "UinfoToken()", +"b219610a": "getRegionPurchasedAt(uint256)", +"b219c852": "firstStageTotalSupply()", +"b219e87b": "deleteCandidateByIndex(uint256,address)", +"b21a8be0": "isSuccessfulIco()", +"b21bce4c": "vote(bytes,bool)", +"b21c2475": "getWeiForRefund()", +"b21c2a68": "changeBZRxTokenContract(address)", +"b21ce425": "amountToTransfer()", +"b21cee7d": "get1TokenBuyPrice()", +"b21e4ebd": "itemOfOwnerByIndex(address,uint256)", +"b21ed44e": "percentForSale()", +"b2205a38": "xcertKyc()", +"b2210c91": "cashBalanceOf(address)", +"b22175db": "GetLikeCount()", +"b2225351": "verify(uint8)", +"b222cb0b": "selfRegister(bytes32)", +"b2237ba3": "setRatio(uint256)", +"b223d285": "releaseVanityUrl(string)", +"b2240566": "EOJ()", +"b2246f43": "Result(bytes32,address,uint256)", +"b224c40a": "vote(uint8,string)", +"b22528e4": "getUserEventsByIds(address,uint256[])", +"b225c23f": "updateCredit(address,uint256,uint256,uint256)", +"b225e08a": "whiteListTime()", +"b226ec29": "Gov(uint256,string,uint8,string)", +"b2280b48": "chairmanOf(uint256)", +"b2281442": "setMaxAbsKindness(int256)", +"b2288649": "lotteryBalance()", +"b22a7bfa": "migrateBalances(address,address[])", +"b22b2b66": "setKYCFull(address[])", +"b22c14c7": "multiPartyTransfer(address[],uint256[])", +"b22d9f50": "GallerionCoin()", +"b22dd140": "assetStaker(bytes32)", +"b22dd2ca": "R1()", +"b22e6fee": "get_pre_kyc_iconiq_bonus_denominator()", +"b230642d": "createSubscription(uint256,uint256,uint256)", +"b23096e9": "tokensTeamBlockedTimestamp()", +"b230eda1": "stageTwoSupply()", +"b2310cc5": "payRequstedSum(uint256,uint256)", +"b231e5cd": "STAGE_FOUNDATION()", +"b2322c40": "RabtestToken()", +"b2353d69": "updateRightLottery(address)", +"b2355b42": "setHomeDailyLimit(uint256)", +"b2356ad4": "tradingFeePercentage()", +"b2357392": "NewToken(uint256,string,uint8,string)", +"b23605eb": "PALToken99(uint256,address)", +"b2369f12": "getLockAccounts()", +"b236a3c9": "updateminAmount(uint256)", +"b236b068": "totalAlloctedToken()", +"b2378428": "LetsbetToken(address,address,address)", +"b237f7d4": "burnTokens(address)", +"b238724b": "setPendingValue(uint256,uint256)", +"b2389da8": "balanceOfFlurbo(address)", +"b238ad0e": "getDaysInMonth(uint8,uint16)", +"b2394040": "rateThirdWeek()", +"b239e2f1": "adventureHandler()", +"b23a0b90": "Henfruit()", +"b23a31e4": "getBrickIds()", +"b23b369b": "getPokemonLevel(uint256)", +"b23b4dd4": "incrementOwnedArea(address,uint256)", +"b23bc656": "setOverdraft(uint256,uint256)", +"b23c1f19": "mintTokenRewards(address,uint256)", +"b23c298c": "getNumberOfPayoutsForStaker(uint256,uint256,address,uint256)", +"b23d36b0": "isCheckStage()", +"b23d4854": "setTokenContractAddress(address)", +"b23db1be": "subtoken(address,uint256)", +"b23e35bf": "readLoveStory(bytes16)", +"b23f3594": "updateTeam(address)", +"b2401e1e": "nextDisbursement()", +"b2406905": "whoHasTheBiggestDick()", +"b240798e": "withdrawBet()", +"b241a020": "freeGameLockedToken(address,uint256)", +"b241b3b5": "getHarvestOperation(string,address)", +"b241ff03": "passPeriod()", +"b2427755": "minTrade()", +"b242c9c3": "getAmountRegistered()", +"b242e534": "transferOwnership(address,bool)", +"b24374a2": "omg()", +"b2444a70": "getParentA(uint256)", +"b2449d65": "YES()", +"b244b268": "SeeleCrowdSale(address,address,address)", +"b244c3f3": "ddftFundDeposit()", +"b2450b15": "openSoldTokens()", +"b24539a9": "getIcoTime()", +"b245923e": "proveIt(bytes32)", +"b245d6da": "coinIssuedIco()", +"b245fc92": "findNextMonth(uint256,bytes)", +"b2461b15": "upgradePermissionedSC(address,address)", +"b24626e9": "setAODevTeamAddresses(address,address)", +"b2467742": "CryptoPhoenixesCivilWar(address,address)", +"b2471e8e": "Fart(string)", +"b2478cfe": "recoveredIndex(address)", +"b247c525": "amountNeedToBeLock()", +"b247ed92": "getAllShipStats(uint32[])", +"b2481048": "newGlobalChanceNo()", +"b248e436": "IsBoilerExpire(address,uint256)", +"b248e4e1": "orderPriority(bytes32)", +"b2494df3": "getModules()", +"b2498a1f": "setPercent1(address,uint256)", +"b249bf01": "sendtoC(uint256)", +"b24a5425": "_setRoleCapability(uint8,address,bytes4,bool)", +"b24b09fd": "RefundEvent(address,uint256,uint256)", +"b24bf695": "getInvestorsAddresses()", +"b24c0a38": "setPreSaleParameters(uint256,uint256,uint256,uint256)", +"b24c35e4": "getRoundBetOrigin(uint256,uint256,uint256)", +"b24cb812": "removeAllowCnsContract(bytes32,address,bytes32)", +"b24ce5fa": "thirdCheckpoint()", +"b24d0c84": "addDat(string,string)", +"b24d8de2": "failedTemperaturesAt(uint16)", +"b24dced3": "setTransferFeeMin(uint256)", +"b24ec0b0": "LogStudentCertified(address,uint256,address,bytes32)", +"b250ce21": "CMC()", +"b251eb05": "MemberAdded(address)", +"b2523b67": "getReferenceAddressesOfCode(bytes32)", +"b252720b": "healthCheck()", +"b252ff2b": "threeHotHoursTokensCap()", +"b25302f6": "WineSupplyChain(address)", +"b25310b0": "DdosToken()", +"b25461ec": "cancelRequestPause()", +"b2549717": "setCalFactor(uint32,uint32)", +"b2550a53": "maxCyclePlayersConsidered()", +"b2552fc4": "annualInterest()", +"b2561417": "setMinimumGoal(uint256)", +"b2563a1b": "getMinimumLimit()", +"b256b093": "reservedForFounders()", +"b256dd6e": "WhosTheBossNow()", +"b2570b1c": "getBattleCardInfo(uint256,uint256,uint256)", +"b258eacf": "totalSupplyInt()", +"b2594125": "SurgeToken()", +"b2596a67": "levels(uint256)", +"b2596acd": "setForRent(uint256,uint256,uint256)", +"b25a00fd": "nativeToErcBridgesAllowed()", +"b25a7a9d": "calculateOwnership()", +"b25a80f4": "StoppableShareable(address[],uint256)", +"b25af26f": "applyForVisa(uint256,uint256)", +"b25ba6a7": "refundContribution(address,uint256)", +"b25bb3a7": "ownersGeneration()", +"b25c22b2": "approveMotion(uint256)", +"b25c372e": "prolongate(uint256)", +"b25cdccf": "fundingState()", +"b25e6181": "UnanimousConsent(address[])", +"b25e8973": "LBN()", +"b25ebbad": "_issueBitmark(address,bytes32,int256,uint256)", +"b25f539d": "registerUser(address,address,string,uint256)", +"b25f692a": "validateAndGetPurchaseTokens(address,address,uint256)", +"b25f8596": "PUBLIC_SALES_1_PERIOD_END()", +"b25fa92c": "adminAddRole(address,string)", +"b26041a1": "DELL()", +"b260c42a": "activate(uint256)", +"b26140f3": "BoBToken()", +"b261ce9c": "IsThisPublic()", +"b261f82f": "releaseAll(uint256,uint256)", +"b26209f6": "remainingFundsToEndAuction()", +"b2627ec0": "buyPriceAt()", +"b263c00c": "setV_R2(uint256)", +"b263f638": "minimalRewardedBalance()", +"b263f865": "usdPerHundredEth()", +"b263fb3f": "updateBasePriceAndMarketCap(uint256,uint256)", +"b2667cd0": "currentInvestment()", +"b266b828": "_sendTo(address,address,address,uint256,bytes,bytes,bool)", +"b266c661": "startDates(uint256)", +"b267f998": "addressFundBonus()", +"b2683aa6": "numberOfWagersToFinalTimeout()", +"b2684945": "usdSale(address,uint256)", +"b2686774": "sendFunds(uint256,address)", +"b269681d": "destination()", +"b269d584": "insertValue(uint256)", +"b269eaff": "imageGenerationCodeMD5()", +"b26b4b6a": "feesOwedToOperator()", +"b26b4f25": "changePrice(string)", +"b26c9779": "changeApproval(address,bool)", +"b26d9d6e": "IntermediateVault(address,uint256)", +"b26e4aed": "test_set_get_PremiumFactors()", +"b26eafe4": "lockUntil(uint256,string)", +"b26ee15c": "interfaceFreezeTokens(address,uint256)", +"b26ee5fe": "getTotalF4()", +"b26f72a4": "withdrawJOYTokens()", +"b26f78d3": "acceptNextManager()", +"b26f7efc": "startGame(uint256,int256,address[])", +"b270b209": "BlocklanceContractHolder()", +"b27201ca": "investedFrom(address)", +"b272fa2d": "getMyHipster()", +"b273952a": "_isUserInternalLock()", +"b2741997": "BAIRON()", +"b274e48e": "setSaleStatus(bool,bool)", +"b2758411": "setUserDisplayName(string)", +"b275a9d8": "PackageContract()", +"b275ba3a": "registerUser(address,address,string)", +"b2774b17": "createOrSet(string,uint256,string)", +"b2775b02": "genBaseStats(uint256)", +"b2787e0c": "changeTransferAgentCA(address)", +"b2788540": "manuallyConfirmDonation(address,uint256,uint256,string,string)", +"b278b8df": "updateVoteInfo(address)", +"b27913a6": "LedgerUpdated(address,address)", +"b2792811": "getFreelancersJobContracts(address[],uint256)", +"b27a1f63": "horseFS(uint256)", +"b27b0755": "earlyBirdsSupply()", +"b27b7dd1": "removeStage(uint8)", +"b27b8415": "dailyHashExpires()", +"b27bcaea": "startBetBlue()", +"b27c0ccb": "ETASToken()", +"b27c4b92": "buyCore(address,uint256)", +"b27c4cde": "ethereumhorse()", +"b27d31de": "bulkTransferEther(address[],uint256[])", +"b27daded": "processorAddress()", +"b27e7244": "addDestinationChain(bytes8,address)", +"b27ea08d": "tokensRemainingPreIco()", +"b27eb3e5": "airDrop(uint16)", +"b27f829e": "removeNetworkMember(address)", +"b27f88fb": "endFifthWeek()", +"b280055b": "roleSetup(address)", +"b280a7e7": "changeSender(address)", +"b280a96e": "setUseAddr(address)", +"b280f180": "setRates(uint8,uint8,uint8)", +"b2813f19": "withdrawOrderTo(address,uint256)", +"b28175c4": "stor()", +"b281c478": "currentCluster()", +"b28241f9": "getCityPopulation(uint256)", +"b283f2f1": "accessoryDataContract()", +"b28448f4": "NewDeposit(uint256,uint256,uint256,address)", +"b2849055": "resetBalanceOfValues()", +"b284fc29": "investorsTokensPercent()", +"b285041d": "Satoshi()", +"b2852bec": "saveCash(address,uint256)", +"b2855b4f": "setFeeAddr(address)", +"b285643e": "leaderboardDataContract()", +"b2860396": "setstart(uint256)", +"b286a346": "SimpleAIToken(uint256,string,uint8,string)", +"b286ba8c": "heapSort(uint64[])", +"b2879d45": "setDRSCoinAddress(address)", +"b288d748": "reduceLockingTime(uint256)", +"b2893ba5": "next_balance()", +"b28945a5": "setApprovalForAllByContract(address,address,bool)", +"b28b3a6e": "famedStarNameToIds(bytes32)", +"b28bb2a0": "setStorageTime(uint256)", +"b28bf6af": "decreaseClaimsBalance(address,address,uint256)", +"b28c461c": "TOKEN_RATE_BASE_RATE()", +"b28c48bb": "NecashToken()", +"b28c747d": "getSentTransfersCount()", +"b28e5904": "Xflip()", +"b28eed93": "Listed_NotValidated(uint256,string)", +"b28f1433": "BHNNetwork()", +"b28f1ee3": "reserveSeats(uint256[],uint256)", +"b28f4c60": "isEmptyString(string,string)", +"b28f53fe": "setMinimumTokensForPurchase(uint256)", +"b28f6fa3": "isOnAuction(uint64)", +"b28fc973": "getEthBalanceOf(address)", +"b28fd472": "miaomiao()", +"b290ae06": "shrToken()", +"b290b9ce": "resetAllDelegations(bytes32)", +"b290e45b": "BonusIssued(address,uint256)", +"b2910826": "set_payments_processor(address)", +"b29120fe": "getHeartPrice()", +"b291820b": "Etherich()", +"b29212b5": "delAudit(address,address)", +"b2923cff": "TAXRATE()", +"b2931096": "hasClaimed(address,uint256)", +"b29387e5": "payWinnerManually2()", +"b295a00e": "getLimit()", +"b2963db6": "closeDailyInvest()", +"b29775c1": "isDiscountValue()", +"b297a35d": "_redeem(bytes32,address,address,uint256,bytes,bytes)", +"b298247e": "gift(uint256)", +"b2983281": "largeCapLimitOf(address)", +"b2984858": "ico1cap()", +"b2990de1": "getByToCount(uint256)", +"b299708d": "dspRegistry()", +"b29a0308": "logAnonymous(bytes,bytes,bytes,uint256)", +"b29a08f7": "ContractMadePermanent(string)", +"b29a3cfd": "getPI_edit_13()", +"b29a61c1": "investorBalances(address)", +"b29ae23f": "getDateOfSignature()", +"b29b3511": "getSpaceshipUpgradeTotalSoldByModel(uint16,uint8)", +"b29b5366": "setRentable(bool)", +"b29b5be7": "getMintAdminApproval(address,address)", +"b29b686a": "isWarrantyValid(address,string,string)", +"b29c2493": "token(uint256,string,uint8,string)", +"b29c62f4": "myAccount()", +"b29cbcec": "LogChangeMultiSigAddress(address)", +"b29d7914": "getRefResults(uint256)", +"b29e201c": "spread(address,address[],uint256[])", +"b29e9909": "sCVars()", +"b29f0835": "doIt()", +"b29f2e77": "sendWarriors(address,address,uint256)", +"b29f731d": "__tinyOracleCallback(uint256,bytes)", +"b29f7f9e": "removeODEMClaim(address,bytes32)", +"b29f9d3b": "unfreezeAccountWithToken(address,uint256)", +"b2a02ff1": "seize(address,address,uint256)", +"b2a072c6": "passUndistributedEther()", +"b2a082b9": "suicaId()", +"b2a1449b": "out()", +"b2a1a022": "getGasPrice(string)", +"b2a1c540": "setMemberId(address,uint256)", +"b2a1de22": "whitelistedCount()", +"b2a29615": "Criptomedicina1()", +"b2a2a4e2": "complianceContract()", +"b2a3fd05": "WithdrawEth(uint256)", +"b2a4c897": "createTable()", +"b2a4efd4": "MASTERY_THRESHOLD()", +"b2a5a012": "setTokenReturnRate(uint256)", +"b2a5bc70": "_tokenLeft()", +"b2a68466": "OZENToken(uint256)", +"b2a6d21b": "COMPANY_RESERVE()", +"b2a7239d": "sklToken()", +"b2a780e4": "BITCLAVE_AMOUNT()", +"b2a7d1b7": "AssetsExplorer(address)", +"b2a840c0": "enable(string,uint256)", +"b2a87fc3": "targetToAchieve()", +"b2a8a6f3": "sendFLC(address,address,uint256)", +"b2a8ff45": "Tokens_Per_Dollar()", +"b2a91457": "OIA()", +"b2a9ab9c": "getTotalBraggedVolume()", +"b2aa8291": "MAINSALE_CAP()", +"b2aa9f0f": "increaseTotalSupply(address,uint256)", +"b2aac51f": "lookupUser(string)", +"b2aae005": "getBalanceOf(uint256)", +"b2ab526d": "approveUsers(address[])", +"b2ab530e": "testFailRetractLatestRevisionNotUpdatable()", +"b2ab70ba": "getMaxIterationsForRequestDividends()", +"b2ac1bbe": "buyInternal(address)", +"b2ac5407": "GMRTokenManager(address)", +"b2acbc13": "isOwner(bytes8,address)", +"b2ad1993": "BalanceNum()", +"b2ad35c0": "distributor_address()", +"b2ad3d44": "updateComplianceProof(bytes32,bytes32)", +"b2aeb260": "setHiringDone(address,uint256,address)", +"b2af9362": "isValidSignature(uint256,bytes)", +"b2b02109": "partnerSaleTokensAvailable()", +"b2b0aefb": "verifyPendingShares(uint256[],uint256[],uint256,uint256[],uint256[],bytes,bytes,uint256)", +"b2b106d6": "participate_in_arbits_presale_crypto()", +"b2b158e8": "setHolderAmount(uint256)", +"b2b28679": "getDelegationID(address,address)", +"b2b3abb1": "removeOrderFromList(bytes32)", +"b2b45df5": "init(address,string,string)", +"b2b4ae25": "isEntitled(address,address)", +"b2b5d93c": "Stop(bytes32)", +"b2b5f0cf": "IOBT()", +"b2b5f86f": "getLocality()", +"b2b5fbf5": "subDroneItem(address,uint256,uint256)", +"b2b6e37e": "_min256(uint256,uint256)", +"b2b74405": "PizzaParlor(address)", +"b2b7d0ce": "HakataCoin()", +"b2b877c1": "MithrilValkyrie()", +"b2b95adc": "finalizeChangeInsurer()", +"b2b96792": "proposeSettlement(uint256,uint256)", +"b2b98ed2": "Winner()", +"b2b99ec9": "removeNode(address)", +"b2ba0aa5": "feesPer10000()", +"b2ba97de": "team_and_angel_beneficiary()", +"b2bab02a": "startIssue()", +"b2bae511": "initSiteRewards(uint256)", +"b2baede4": "getListingContractAddress()", +"b2bb419f": "ActivateEscrow(uint256)", +"b2bb72bf": "getIndexInfo()", +"b2bbac16": "firstWeekPreICOBonusEstimate()", +"b2bbae69": "payForVote(address,bytes32,uint256)", +"b2bbe75e": "Sunshine()", +"b2bc2f68": "Kitcoins()", +"b2bc6c19": "PRICE_11()", +"b2bcf495": "_releasableAmount(address)", +"b2bd96b2": "AcceptsFUNDS(address)", +"b2bdc6b3": "adminAddMonument(string,uint256,uint16)", +"b2bdfa7b": "_owner()", +"b2be8180": "TombCore()", +"b2be8a0d": "getUserWalletTokenBalance(address,address)", +"b2bea9c1": "releasePurchasedTo(address,uint256)", +"b2bec979": "cashOutCar(uint32)", +"b2bf731d": "SPECTRE_BOUNTY_ADVISORY_DEV_TEAM_ALLOC()", +"b2bfd948": "checkNumbers(uint8[3])", +"b2c09c92": "gameWithdrawFrom(address)", +"b2c15f29": "updateLastTime(bytes32,bytes32)", +"b2c1d7dc": "BGToken()", +"b2c2196f": "MxRecordChanged(bytes32,address)", +"b2c26f94": "updateParameterValue(bytes32,uint256)", +"b2c2921a": "TeamBox()", +"b2c3429d": "VouchCoin()", +"b2c3609b": "Play(uint8)", +"b2c50b92": "retryWinners()", +"b2c5b208": "_returnReturnData(bool)", +"b2c60132": "wingsWallet()", +"b2c60690": "finalizeVoting(address)", +"b2c62d46": "endClaim()", +"b2c652f3": "getMarkets(uint256[128])", +"b2c6b6dd": "preSaleContract()", +"b2c7c90d": "bitcoin_ratio()", +"b2ca38fe": "GAP()", +"b2ca3ec4": "securityGuard()", +"b2cad9b7": "getLevel(uint32)", +"b2cb0a3d": "VESTING_TEAM_DURATION()", +"b2cb1ebd": "Typhoon()", +"b2cb26c1": "addMaster(uint32,string,uint16,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"b2cb3a9b": "getCurrentShare(address)", +"b2cb3e93": "COSSDemo()", +"b2cb9f05": "Total_Deposited()", +"b2cc0eb3": "SpaceCoinToken(address,string,string,uint256,uint256)", +"b2cc36fc": "restoreFromColdWallet()", +"b2cc4165": "getOrderAmount(address,address,uint256,address)", +"b2cca39d": "pausedTime()", +"b2ccc4ab": "getFameBalance(address)", +"b2ccda0e": "setPrimaryOperator(address)", +"b2cd67ef": "Klein()", +"b2cda083": "PassCommitteeRoom(address)", +"b2cefd2f": "LiteToken()", +"b2cf9814": "assetManagerIncome(address)", +"b2cfdfda": "stringToArray(string,string)", +"b2d111f6": "maxGasPriceValue()", +"b2d1289b": "DepositManager(address)", +"b2d138d2": "rspScience()", +"b2d14545": "fbytes2(bytes2)", +"b2d1573f": "getUserRank(address)", +"b2d1f9be": "buyStar(uint256,string,string)", +"b2d23b7d": "fetchVoteResult()", +"b2d27832": "vestingPeriodTime()", +"b2d2c1de": "withdrawProfit(address,address)", +"b2d318f7": "VeteranCoin(uint256,address)", +"b2d37165": "startMinting(bool)", +"b2d37e95": "remove_order(uint32)", +"b2d3e85e": "isPeriodAllTokensSold(uint256)", +"b2d444df": "TIM6(uint256,string,uint8,string)", +"b2d48237": "refferalsRateBonus()", +"b2d4ae5e": "__callback(bytes32,string,string)", +"b2d5362d": "contractTokenBalance(string)", +"b2d5ae44": "getRefund()", +"b2d5e8b1": "VALUE_OF_UTS()", +"b2d6bc83": "fundCapital()", +"b2d6fd0b": "id_for_address(address,address,address)", +"b2d8efe0": "crowdsaleOpen()", +"b2d96b81": "safeAssetData(uint256)", +"b2da302b": "Thrill()", +"b2dad155": "trim(string)", +"b2dad25d": "getNameOfAddress(address)", +"b2dae885": "SpecialArrays()", +"b2db1d23": "regularMaxPerPerson()", +"b2dd5c07": "registered(address)", +"b2dda6b5": "totalEthReleased()", +"b2de1a3f": "CONTRACT_PROVIDER_ADDRESS()", +"b2df8456": "sponge(uint256[9])", +"b2df8bad": "getAvailableCoinsForCurrentStage()", +"b2dfa399": "ZRX_TOKEN_ADDR()", +"b2e02430": "divRate()", +"b2e02fc1": "addRefund(uint256,uint8)", +"b2e0baee": "SunContractIco(uint256,address)", +"b2e235c2": "BitBall()", +"b2e2c1c9": "updateCondition(uint256,uint256,uint256,uint256)", +"b2e2c75f": "totalUsed()", +"b2e30440": "Ducaat()", +"b2e33c8f": "getCountPlayerByTrackId(uint256)", +"b2e357b4": "isLinkClaimed(address)", +"b2e37e18": "extDestroyNinja(uint256)", +"b2e3d212": "IndexCoin()", +"b2e4c183": "preICOBonusPercent()", +"b2e4d35d": "validate(uint256,uint256,uint256,uint256,string,string,string)", +"b2e545ac": "TokenGreeneum(uint256,string,uint8,string)", +"b2e5d3ba": "getBtcRate()", +"b2e6ceeb": "takeOwnership(uint256)", +"b2e752cb": "MINCAP_TOKENS()", +"b2e774ce": "deliver(address,uint256,bytes32)", +"b2e7c288": "recipientString()", +"b2e85b67": "getPlayerStatus(address,uint256)", +"b2e94e78": "stage1_start()", +"b2ea073f": "setGeneScienceAddress(address,address)", +"b2ea088d": "returnUnsold()", +"b2ea0a39": "changeMinDonationLimit(uint256)", +"b2ead7bb": "fundsOut()", +"b2eafd57": "getRewarder(uint256)", +"b2ebe1c5": "_determineCharacterType(uint256)", +"b2ed26f6": "addresses3(uint256)", +"b2ee95f9": "dateRelease6()", +"b2eed299": "getPOOL_edit_28()", +"b2ef089a": "isStateTokensale()", +"b2ef48b9": "buyTokensWithWei(address)", +"b2f05133": "set_trader(address)", +"b2f0575c": "FooMintToken(int256)", +"b2f094de": "BittechPresale(address)", +"b2f106c0": "determineReward(bytes32)", +"b2f1bb5b": "tellMeASecret(string)", +"b2f1fe99": "refundManyTransaction(uint256[])", +"b2f2303a": "BreakbitsERC20Token()", +"b2f24225": "set_minDETsPerReturnMoreThan(uint256)", +"b2f2588b": "sortNumbers(uint8[3])", +"b2f2b06d": "_createCar(string,address,uint256)", +"b2f3319e": "ToggleTestMode(bool)", +"b2f3d299": "loadFunds()", +"b2f3ded4": "allMarketsFinalized()", +"b2f40531": "shutdownTransactions(address)", +"b2f4bdb0": "createdTime()", +"b2f5a54c": "getInvestors()", +"b2f7e989": "sourceTokens()", +"b2f9c5b9": "canTransfer(bytes32,address,uint256,bytes)", +"b2fa1c9e": "isComplete()", +"b2fa9206": "cancelIco()", +"b2fadc78": "_getStorage()", +"b2fb3b90": "cancelActiveAuctionWhenPaused(uint40)", +"b2fcb395": "GoldenBullChainToken()", +"b2fce4ea": "delegateVote(int256,address)", +"b2fd3a7d": "getHardcapUsd()", +"b2fed358": "getsafemode()", +"b2ff7945": "setARR(address)", +"b3002be7": "burnNSPs(address,uint256)", +"b30054b4": "set_address_GIC(address,address)", +"b3007dc6": "rateFirstWeek()", +"b302ea1e": "setRaindropAddress(address)", +"b302ec4b": "LocklistedAddress()", +"b30300d7": "_increaseAllowance(address,uint256)", +"b3034371": "unilateralRuling(uint8,uint256,uint256)", +"b30387a4": "gen0Count()", +"b30390ce": "registerItem(uint256,uint256,bytes32,bytes32,bytes32)", +"b303cec0": "addAccountReader(address)", +"b303dcbd": "Owned()", +"b303f9f7": "releaseHTOSupply(address)", +"b304376c": "begins()", +"b30475b6": "totalWeiClaimed()", +"b304b2e1": "allocated()", +"b305836f": "feeWithdrawTokenAll(address)", +"b3066d49": "setContracts(address,address,address)", +"b3070c12": "ADVISOR_REWARD()", +"b3074b8a": "SUTokenContract()", +"b30779b1": "payCommission()", +"b3082d25": "CreateCards(uint256,uint256,uint256,uint256,uint256,bool)", +"b30841d9": "totalEras()", +"b3097a08": "heldTotal()", +"b30ab349": "getContent(address)", +"b30bca06": "sum(uint8[])", +"b30cf414": "unpauseSALE()", +"b30d1bb8": "isDisableEther()", +"b30d95a0": "changeBonus(uint256,uint256,uint256,uint256,uint256,uint256)", +"b30dbc67": "DeNetToken()", +"b30e4533": "ABBCToken()", +"b3113d3f": "hardCapPrivate()", +"b311db2f": "setAccountType(address,uint256)", +"b311ee0c": "refundClaimDeposit()", +"b312dc91": "currentPayout(address,address,bool)", +"b31394cb": "_checkThenTransfer(address,address,uint256)", +"b3139d38": "updateSlasher(address)", +"b3141c69": "localsReptoken(uint256,string,uint8,uint256,string,string)", +"b314a984": "burnRemain()", +"b3154db0": "check(address,address)", +"b31567d3": "LogRemoveWhiteListed(address)", +"b31597ad": "redeem(bytes32,bytes32)", +"b315e453": "multiWithdrawReward(uint256[])", +"b31610db": "getIndex(address)", +"b317d031": "STATUS_PAID()", +"b319c6b7": "cooldownTime()", +"b319e9fa": "distributeMultiple(address[],uint256[])", +"b31a17f0": "FtC()", +"b31a4047": "_convertBlueprint(string)", +"b31a404a": "withdrawOnNoAvailablePlan()", +"b31a4e0d": "allocatePresaleTokens(address,uint256,uint64,uint64)", +"b31ab1c3": "disconnectOrderUser(address,address,uint256,uint256,address,address)", +"b31ba590": "PlayerCreated(address,uint256)", +"b31c5c64": "kscDecreaseApproval(address,uint256,string)", +"b31c710a": "oldToken()", +"b31cbe9a": "getAlice(uint256)", +"b31cd1be": "secretTaken(bytes32)", +"b31cf984": "getProgram()", +"b31d61b0": "whitelistAddress(address[])", +"b31d7730": "presaleFinalizeAgent()", +"b31d8a6f": "FreeTokenAdded(address,uint256)", +"b31dcaad": "timeToUnlockDDHHMM()", +"b31e1d4d": "delegateVote(address)", +"b31e822b": "isAllowTransfer(address)", +"b31e8889": "setParticipantWhitelist(address[],bool)", +"b31f8f93": "tokensLeft()", +"b32022e8": "calculateKebabBuySimple(uint256)", +"b3204b8b": "setParent(address,address)", +"b3204cc3": "setLineUpEnable_pool(address,uint256)", +"b3205410": "getCustomerInfo(address)", +"b3206453": "destination(bytes4,bytes)", +"b3209136": "WakaWakaCoin()", +"b320f459": "removeBid(uint256)", +"b32142a0": "getProgramPercent(uint256)", +"b3215499": "ICOBonusPercent3week()", +"b3219d17": "calculatePurchaseBonus(uint256,uint256)", +"b322269e": "GameStart(uint256,uint256)", +"b32381ee": "addmoney(address,uint256,uint256,uint256)", +"b324816a": "createPaymentsSplitting(address[],uint256[],uint256)", +"b324c62a": "fastTokenSale(uint256)", +"b324e80d": "depositEscrow(address,uint256)", +"b324fb6b": "startTimePreICO()", +"b3253e0f": "lastScheduledTopUp()", +"b326124b": "tRegSaleStart()", +"b326c189": "hasOpenCommissionerAuction(uint128)", +"b32776e1": "getSigner(address,string,address,uint256,bytes32,bytes32,uint8)", +"b3280830": "addLibrarian(address,address)", +"b3292ff0": "addSuperAdmin(address)", +"b329bf5c": "cancelTransfer(bytes32)", +"b32b2805": "getArmyFullData(uint256)", +"b32b664f": "wantItForFree(uint256)", +"b32b8e2c": "contains(uint256[],uint256)", +"b32c41d7": "crowdsaleTargetUBO()", +"b32c65c8": "contract_version()", +"b32c6a25": "GenesisToken()", +"b32cb292": "setStartICO(uint256)", +"b32cec45": "CROWDSALE_ACCOUNT()", +"b32d01c2": "modify_bytes(bytes)", +"b32dbcd8": "getNumKnights()", +"b32dc51c": "totalPhase1Donations()", +"b32e02e8": "_getRarePlusRarity(uint32)", +"b32e4207": "setzString(string)", +"b32f19f9": "showFreezedTokensAmount(address)", +"b32f4b9a": "Barbie()", +"b32fab4e": "moneyback()", +"b3311309": "SingularityTest5()", +"b3335e6b": "setICOStartDate(uint256)", +"b33381fe": "calcAmountEther(address,uint256,uint256)", +"b333adfc": "coursesLength()", +"b333b0ee": "_stake(bytes32,uint256,uint256,address)", +"b333ce0d": "icoFinish()", +"b3344593": "trackingNo()", +"b334e90b": "tadpoleReq()", +"b334fd07": "createFincontract(bytes32)", +"b3350f03": "forbiddenAction()", +"b33527d2": "CreateBAT(address,uint256)", +"b3369866": "indexOf(uint128[],uint128,bool)", +"b336ad83": "getByName(string)", +"b336f8a3": "GetNumberOfRigs()", +"b33712c5": "unpauseContract()", +"b337a20d": "verifyLockSignature(bytes32,address,address,uint256,uint256,bytes32,bytes)", +"b33926cb": "owner_withdraw(uint256)", +"b33a10de": "cards_titanium(uint256)", +"b33a2ea0": "lastBlock_v18Hash_uint256()", +"b33a8a11": "setTokenReference(address)", +"b33aca37": "Mcoin(uint256,string,uint8,string)", +"b33adbf1": "darPremio()", +"b33c24b2": "createERC20TokenNetwork(address,address,uint256,uint256)", +"b33c4b1f": "end_now()", +"b33cb8f6": "CrowdsalePaused()", +"b33ceb2c": "AddGossip(address,string)", +"b33e8ee5": "exchangeTokensById(uint256,uint8,uint8)", +"b33fcc7a": "multiTransfer(uint256[])", +"b340a972": "getaddr(address,uint8)", +"b340d8cf": "encodePriceFeed(uint256,uint256,uint256,uint256)", +"b340f2b4": "showAssetDetails(bytes32)", +"b3413d9f": "_forwardFunds()", +"b34195a3": "ICOTokensInvested(address,uint256)", +"b3423eec": "requestWithdraw()", +"b34244e8": "setCBaddress(address,address)", +"b34253be": "FundsVault(address)", +"b342d7c0": "genEOS()", +"b34362be": "setParter(address,uint256,uint256)", +"b3446f85": "registerPlayer(string)", +"b3447ac9": "getBytes32Values(bytes32)", +"b344e002": "saleDeposit()", +"b3470e97": "addHashes128()", +"b3472edb": "getMaxProfit(uint256)", +"b3477201": "createPadlock(string)", +"b3480369": "_getWaitingBlocks(uint256)", +"b3481e61": "updateTeam(address,uint32,uint8[],uint32[])", +"b3485dca": "UpdatePrice(uint8,uint32)", +"b3487a71": "getBetWaitEndEther()", +"b348ddde": "ETH750on54()", +"b3490bfc": "allowTransfer(address)", +"b34937c9": "feedMessage(uint256,string,string)", +"b349b973": "_init()", +"b349dbdc": "nfsPoolTransfer(address,uint256)", +"b349f6c7": "attemptSpend(uint256)", +"b34b2c26": "Simpletokenq()", +"b34b4f69": "XingchenToken()", +"b34b5825": "getAvailablePacks(bytes4)", +"b34c28de": "calculateBurnGoldFee(uint256,uint256,bool)", +"b34c3610": "assert1()", +"b34c8afb": "getBaseAmount(address)", +"b34d471d": "bulkCreateLamboSale(uint256,uint256,uint256)", +"b34debac": "canUseResource(address)", +"b34e0c47": "getUserScore(address)", +"b34e7b9d": "getgamecardlength()", +"b34e97e8": "login()", +"b34f094f": "INTToken(uint256,string,uint8,string)", +"b34f0e5e": "CLAIM_STAGE()", +"b34f407d": "setPerformer(address)", +"b34f43c7": "SVDelegationV0101_1(address)", +"b34f594b": "setNodePrice(uint256)", +"b34f7b50": "_generateDiscipleSale(uint256,uint256,uint256,uint256)", +"b350723f": "_guarantedBid(uint256)", +"b3508654": "addController(address,bool)", +"b3508783": "TOKEN_MAX()", +"b35176e2": "show_number_of_days_since_bank_opening()", +"b3521607": "XYCCTEST()", +"b3527cfe": "Follow(uint256,address,uint256)", +"b3528158": "DASHABI(uint256)", +"b352867c": "setFreeExtension(bytes32,bool)", +"b3535fe2": "_setProviderInfoFields(uint256,string,string,uint256,string,address,uint8)", +"b35376b5": "getDiamond(string)", +"b3539c44": "getMintForReportingParticipantTargetValue(int256)", +"b3549265": "coloredTokenCount()", +"b3559460": "getGenerationSize(uint256)", +"b3562e6e": "getCrowdsaleTier(uint256)", +"b356a3a5": "PLATFORM_GROWTH_VESTING_AMOUNT()", +"b3570116": "mintIfNecessary(uint256)", +"b357a028": "SCISSORS()", +"b357a552": "claimAuctionableTokens(uint256)", +"b357b72f": "setMaxMarketOffers(int32)", +"b35861b4": "setERC20Address(address,address,uint256,uint256)", +"b358755e": "testerCanNotReentrant()", +"b35893f3": "setExporter()", +"b358e375": "JobsManager(address)", +"b359cedd": "getTime(string)", +"b35ae7e8": "ViotToken()", +"b35e7d45": "setCriticalBucket(uint256)", +"b35eeb46": "GenHeliosCoin()", +"b3610f37": "destroyCar()", +"b36117b2": "create18FilmsTokens()", +"b36216d3": "allTokensDecimalsBalancesWeights()", +"b3621e1a": "addAddress(address[])", +"b36234c2": "AltruismMode(address,uint256,uint256)", +"b36292eb": "TestingCoin()", +"b3629f79": "get_proposal_by_row(uint256)", +"b3643e3a": "createSale(address,uint256)", +"b36752ee": "addressFoundersShare()", +"b36763c9": "_owoAmount()", +"b367fb11": "platformTokens()", +"b36877c9": "DragonKing(address,address,uint8,uint8,uint8,uint16[])", +"b368cb10": "getProviderInvitedUser(uint256,address)", +"b369940c": "wingsETHRewardsPercent()", +"b3699d0b": "withdrawedTeamCounter()", +"b369af71": "intervalOf(uint256)", +"b36a06b5": "preSaleFirstBonus()", +"b36a0b15": "getSignDetails(uint256,uint8)", +"b36ada82": "mintingOracle()", +"b36af005": "Menu04()", +"b36b9ffd": "bountyManager()", +"b36ba252": "getSellOrderPrices()", +"b36c1284": "MaxSupply()", +"b36c14fe": "getWhitelistUser(address)", +"b36c8022": "UnfreezeAccount(address)", +"b36c973e": "payOutWinner(address)", +"b36d829b": "getwinningaddress01()", +"b36df681": "ExecutableBase()", +"b36eaad8": "createUserMeme(address,uint256,string,uint256)", +"b36f2c30": "maxWeiUnverified()", +"b36f8e8f": "allowManager()", +"b36fef76": "promoFishCommission()", +"b3710a80": "infraEthWallet()", +"b37139e6": "reduceCD(uint256,uint256)", +"b37217a4": "getRandomNumber(uint256)", +"b372bd31": "getCommissionBalanceWEIInfo()", +"b373a48b": "getOneself()", +"b373a61c": "priceRandomFight2Death()", +"b373a6cd": "sendTokens(address[])", +"b373f167": "transfer(address,uint256,bytes,string,bool)", +"b3745afa": "changeAllocator(address)", +"b3746849": "buyTokens(address,bytes)", +"b374db9a": "secondsTimeLockedDefault()", +"b3753107": "gweiBBDPriceInWei()", +"b375603c": "raffleId()", +"b375a72c": "getHashPicture(bytes32)", +"b375b95a": "getMaxRankingSpots()", +"b3760c80": "orderMatch(uint256,uint256,uint256,int256,uint256,uint256,address,uint8,bytes,bytes,int256)", +"b37610ad": "getKey(uint16,uint16)", +"b37681fd": "SetPlayerID(bytes32,uint16)", +"b376feba": "_unsafeTransfer(address,uint256)", +"b378e89b": "CreateToken(address,uint256)", +"b37983e2": "gasRequired()", +"b379d235": "setFlowerAuctionAddress(address)", +"b37a336d": "VESTING_DIV_RATE()", +"b37a5de7": "throughputToday()", +"b37a6a2c": "restartPrivatePlacement()", +"b37bcd94": "discountPeriod()", +"b37c191b": "rank(uint256)", +"b37c7dc0": "sub256(uint256,uint256)", +"b37cc2f0": "getUserEventsLength(address)", +"b37d61f8": "checkMyBalance()", +"b37d97b5": "addMany(address[])", +"b37dcce2": "trainingFeeMultiplier()", +"b37edb66": "FundingEntity()", +"b37edfb6": "checkChangeOwnerArgs(uint256,uint256)", +"b37f17ee": "migratingAmountBooks(address,address)", +"b3803956": "showPlayerFullScores(address)", +"b380b0d4": "setProfitPercentage(bytes32,uint256)", +"b380beac": "setTotalWizzPandaOf(uint256,uint256)", +"b380d365": "resolveDisputeSeller(string)", +"b381cfe5": "iotpowerToken()", +"b3822da8": "getContents(uint256[])", +"b38260fe": "totalAngelCardSeries()", +"b382b0d6": "createContract(uint256,uint8,uint256,uint256,address,address,address,address,address)", +"b38336de": "getCoinAmount(uint256)", +"b3834ed4": "getRefunded()", +"b383616d": "setSupplyAgent(address,uint256)", +"b38400ff": "getEndedGames()", +"b38415f3": "getConfigBytes(bytes)", +"b384abef": "vote(uint256,uint256)", +"b384e9b4": "incentivisationFundAddress()", +"b3850b2a": "total_reward_amount()", +"b385e7b6": "playerPrizes(address,uint256)", +"b387ed6d": "getCompetitionStatusOfHopefuls()", +"b387ef92": "currentOwner()", +"b38854be": "ownable()", +"b38928c5": "Vineyard(address)", +"b38b2261": "addValidation(bytes32)", +"b38bf811": "setMessagesSigned(bytes32,bool)", +"b38c1504": "TOTAL_LBTOKEN_SUPPLY()", +"b38c7e3a": "getStrong()", +"b38ce3e7": "deedIds(uint256)", +"b38d3ab4": "attackeePrizeByToken(bytes32,address,address)", +"b38de8ce": "DelGoods(uint32)", +"b38f974a": "buyFood(uint32)", +"b38fb813": "crowdsaleInit()", +"b38fced1": "availableThemedSpinners()", +"b3908dc1": "IPXToken()", +"b390c0ab": "burn(uint256,uint256)", +"b391983c": "getLimitAndPrice(uint256)", +"b3922c42": "TOKEN_INVESTORS()", +"b3924a58": "GreenMining()", +"b3927eeb": "Expended()", +"b3935caa": "trivenewstestToken()", +"b3936f95": "basis(uint256,uint256)", +"b3938edc": "changeETHUSD(uint256)", +"b393a5b5": "setKingdomCreationFeeWeiRP(uint256)", +"b393a759": "ipfsSet(string)", +"b393fa46": "fundersClaimed()", +"b3942cbd": "setTransferAllowed(bool)", +"b3947c17": "muldiv(uint256,uint256,uint256)", +"b395cb3c": "vest(address,uint256,uint256,uint256,uint256)", +"b395f278": "view_get_blockNumbers()", +"b3965083": "Pothereum(uint256,string,string)", +"b3965cec": "RefundPeriodStarted()", +"b3966dc9": "init(address,uint256,uint256,uint256,address,address,uint256)", +"b396d7ad": "heapSort(uint256[])", +"b3970f27": "updateHpbNodeBatch(address[],bytes32[],bytes32[])", +"b397657d": "endInitialization()", +"b397ffd8": "m_foundersTokensStorage()", +"b39852f9": "createGame(uint256,uint256,uint256,uint256,uint256,uint8)", +"b398924d": "RangeGameProcess(address,uint256)", +"b398e098": "setMaxETHAutoContributions(uint256)", +"b3997703": "Loser(string,string)", +"b399a9f8": "setFungibleTokenAddress(address,address)", +"b399b0bc": "remaining(address)", +"b39a64cd": "getNumCalled()", +"b39a69a3": "withdrawPROV(uint256)", +"b39a7fbe": "setBattleDeciderAddress(address)", +"b39ad6e0": "DonatorInteract(string)", +"b39c2944": "requiredAuthorities()", +"b39c8739": "Strikes()", +"b39ca258": "createOrder(address,bytes32,bytes32,address,uint256,uint256,uint256)", +"b39d49fe": "sellNapkins(uint256)", +"b39d66d0": "LiipCoin()", +"b39d6b7b": "DukatToken()", +"b39dcb1d": "showDepositEther()", +"b39e12cf": "contractManager()", +"b39e1c6c": "withdrawDirectDebit(address)", +"b39e7bc1": "RealEstate(uint256)", +"b39f4171": "payForOther(address)", +"b39f4483": "setPOOL_edit_28(string)", +"b3a06e75": "airdropSingleAmount(address,uint256)", +"b3a0b1ef": "basicInfoGetter()", +"b3a0e188": "firstReserveTimeLock()", +"b3a1362a": "setMessage(int256,string)", +"b3a1584a": "toAddr(bytes)", +"b3a18632": "stakeAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,uint256)", +"b3a196e9": "presaleSupply()", +"b3a1ca52": "addressFundDigitalMarket()", +"b3a26071": "LiquetLottery()", +"b3a27842": "getEntity(uint256)", +"b3a2a6c0": "setOfficialWebsite(string)", +"b3a2a999": "nextWithdrawal(bytes16)", +"b3a3c4f6": "identifierToRentPeriod(uint256)", +"b3a3d671": "addAllowanceToRecieveToken(address[])", +"b3a3dda3": "clearExpiredAssignments(address,uint256)", +"b3a41c65": "power(uint256,uint256,uint256,uint256,uint8)", +"b3a56077": "vestingPeriodLength()", +"b3a61c80": "tryNextTimeRange()", +"b3a6d09d": "tgrSettingsPartContributor()", +"b3a7cbf6": "XRRsale()", +"b3a810f7": "tournamentOwnersCut()", +"b3a844ae": "tokenClose()", +"b3a9afb7": "getQuickBuyEtherToken()", +"b3a9b5f6": "multiply(uint256,uint256,uint256)", +"b3aaa277": "validate(address[4],address,uint256[11],uint256,bytes,uint256)", +"b3aae830": "deployProject(uint256,string)", +"b3ab15fb": "setOperator(address)", +"b3ab715e": "getTileIDbyPosition(uint16,uint8)", +"b3ac149c": "getCurrBalance()", +"b3ac7acd": "ownerSetMaxProfitAsPercentOfHouse(uint8)", +"b3ad4600": "RedCarpetToken()", +"b3adc716": "is_banned(address)", +"b3ade772": "shipProducts(string,string)", +"b3adfa0c": "summLeskiw()", +"b3ae1d2c": "completeTransaction()", +"b3ae65d7": "initialBlockNumber()", +"b3aefb75": "getCap(address)", +"b3af4426": "jackpotTokenLoseRewardRate()", +"b3af88f0": "proposalPresent(string)", +"b3afe437": "SPECIALIST_TWO()", +"b3b0c83f": "withdrawEndTime()", +"b3b0cf86": "Birth(uint256,string,address)", +"b3b0eae5": "getPaidAmount(string)", +"b3b163c4": "getLatestVersion(address,bytes32,address,bytes32)", +"b3b294a6": "bonusOn()", +"b3b2b1b6": "setPaidStatusCustomer(address)", +"b3b32dc0": "hasSeat(uint256)", +"b3b39809": "Filiate_Changed(address)", +"b3b4b21e": "ZZZCoinDistribution()", +"b3b4ec54": "acceptColuLocalNetworkOwnership()", +"b3b4fd0f": "affiliateProgram()", +"b3b51aa3": "recycleSkin(uint256[5],uint256)", +"b3b548eb": "submitPrice(uint256,uint256)", +"b3b55c0f": "ELTWagerLedger(address)", +"b3b5c0ee": "fillSellOrder(uint256,uint256,uint256)", +"b3b5eaa3": "dive2(address)", +"b3b5ec33": "onPollFinish(bool)", +"b3b5fc76": "getImagePartsCount(uint256)", +"b3b71063": "BitPeso()", +"b3b77a51": "lock(bytes32,uint256)", +"b3b789fb": "GetLogMessageInfo()", +"b3b78cc2": "crowdSaleZxcSupply()", +"b3b81d38": "changeMinContribution(uint256)", +"b3b85e7f": "buyAtoken()", +"b3b89158": "reserveUnlockTime()", +"b3b8c620": "icoRatio()", +"b3bb594c": "delivery(address,uint256)", +"b3bb8cd4": "_now()", +"b3bb8d44": "OwnerDefined()", +"b3bb9b58": "LiquidDemocracy(address,string,uint256)", +"b3bc5b10": "editDefinedGame(uint256,string,uint256,uint256,int256,uint256,uint256)", +"b3bd870a": "participated(address)", +"b3bf07a1": "balanceofSTCDR(address)", +"b3c06f50": "transferFrom(address,address,bytes32)", +"b3c0b7be": "createOracle(address,uint256,bytes32)", +"b3c10469": "hijackClones()", +"b3c185a7": "addNVTtoGame(uint256,uint256)", +"b3c199c1": "dividendFor(uint32)", +"b3c1a588": "parseMsgData(bytes)", +"b3c1ee88": "updateDescription(string,bytes32)", +"b3c1fe4f": "donationMultiplier()", +"b3c2083f": "sellVolumesNext(address,address)", +"b3c25835": "addUser(address,string,string,uint256)", +"b3c298ea": "angelInvestors()", +"b3c2e8fa": "ethPause()", +"b3c2eac1": "setStatus(bool,bool)", +"b3c3699f": "createLockedState()", +"b3c3bbbd": "betters()", +"b3c4a36b": "setupToken(address)", +"b3c4b54a": "updateDestination(bytes32,address)", +"b3c4ee17": "userOfferCancelElement(uint256,uint256,uint256)", +"b3c4f83b": "DoftToken()", +"b3c5209f": "limitation()", +"b3c5998d": "onTransfer(address)", +"b3c63629": "PTSDToken(uint256,string,uint8,string)", +"b3c6487b": "setCatPrice(uint256,uint256)", +"b3c7476c": "TOSLittleHodingContract()", +"b3c7618e": "getVoteRuling(uint256,uint256,uint256)", +"b3c7d097": "theDeal(uint256)", +"b3c9983a": "getPara(uint256,uint256)", +"b3ca07d1": "closeRound(bytes32,uint8)", +"b3caba5a": "setReferralAddress(address)", +"b3cb8885": "nextUnderdogPayout()", +"b3cba833": "getData_16()", +"b3cc167a": "bidIncrement()", +"b3cc35f0": "taxPerc()", +"b3cd95d3": "incRandNonce()", +"b3cdabfd": "funForOwner()", +"b3cea217": "ID()", +"b3cea9e2": "createRadar(uint256,string,uint256,uint256,uint256)", +"b3cffc6e": "contributeBTCs()", +"b3d14775": "getPOOL_edit_13()", +"b3d159bf": "SearchMyFiles(string)", +"b3d176c9": "setPOOL_edit_33(string)", +"b3d1958d": "flush(uint256)", +"b3d1b801": "getOwnerCars()", +"b3d1bd95": "_recordFeePayment(uint256)", +"b3d2b441": "grantTokens(address)", +"b3d34e1b": "WithdrawDevFunds(uint256)", +"b3d39e63": "deleteProposal(bytes32)", +"b3d3d37e": "takeSnapshot()", +"b3d4e279": "earlyBackerList()", +"b3d4e3f2": "makeVendorValid(uint256,bool)", +"b3d4e41f": "PURA()", +"b3d62a25": "matchDay()", +"b3d6e119": "lockedPeriod()", +"b3d73743": "box1Star4()", +"b3d76188": "pay(address,address,uint256)", +"b3d7ac6a": "transferCompensationEthers()", +"b3d8056d": "findString(bytes32)", +"b3d84a28": "FreezeProduct(uint256)", +"b3d91e41": "DECIMALFACTOR()", +"b3da4b09": "mintEnergyAttributionToken(address,uint256,string)", +"b3da6eed": "Alluma()", +"b3daa652": "CLIFF_DURATION()", +"b3daab8a": "updateInvestBalance(uint256)", +"b3dac57f": "cancelUpcomingEvent(uint256)", +"b3db410c": "allowTransferTimestamp()", +"b3db428b": "depositFor(address,address,uint256)", +"b3dc0e94": "transferSoldCoins(address,uint256)", +"b3dcc5eb": "mint_and_transfer(int256,address,uint256)", +"b3dd23e8": "BTC_SUISSE_TIER_2()", +"b3dd5b1a": "WavesBitcoinToken()", +"b3de019c": "changePrice(uint256,uint256)", +"b3de5cc0": "_getTimeLeft()", +"b3de648b": "f(uint256)", +"b3dedf5c": "BACToken()", +"b3dee386": "collect(uint16,uint16,uint8)", +"b3df27f4": "checkFundingGoal()", +"b3df5b45": "oxleytoken()", +"b3df8737": "left50(uint256)", +"b3dfcdc3": "Contribution(uint256)", +"b3e18ed9": "finisGame()", +"b3e1f523": "setUnpausedWallet(address,bool)", +"b3e2564a": "amendAmount(uint8,uint8,uint8)", +"b3e25665": "collaborateInMerge(address,int256,int256)", +"b3e33a74": "mintingGoal()", +"b3e366ab": "getLastMilestone()", +"b3e3cc34": "sellToBlackMarket(uint256,uint256)", +"b3e3d8b4": "startOrHoldCrowdSale(bool,bool,bool,uint256,bool)", +"b3e53d8a": "maxPresaleContributionEther()", +"b3e5519b": "getOpenBids(bytes32,uint8)", +"b3e6713e": "LogClaimTokens(address,uint256)", +"b3e6c19f": "OJCToken()", +"b3e7c201": "ethPromoHelpers(address)", +"b3e7c2bd": "getVote(bytes32,address)", +"b3e83761": "KanCoin(address)", +"b3e8fe00": "totalpro()", +"b3e98f82": "viewClaimableInvestorDividendPool()", +"b3e99b77": "systemClaimAirdropMultiple(address[])", +"b3e9da0c": "businessersTotalBalance()", +"b3ea3924": "PointlessCoin(int256,uint256,string,uint8,string,address)", +"b3ea553b": "JoyCoin()", +"b3ea5984": "getIndexOfTarget(address[],address)", +"b3eaaa7e": "calculateCHGAmountToEther(uint256)", +"b3eae9ac": "WashingtonExchange()", +"b3eb3a86": "getClosedContract(bytes32)", +"b3ebc3da": "weiRaisedTotal()", +"b3ed1957": "USDMToken()", +"b3ed2081": "fixedExpTest(uint256,uint8)", +"b3ede13f": "addToPrizePool()", +"b3ee4564": "assertStillValid(uint256)", +"b3ee5307": "CountersUpdated(uint256,uint256)", +"b3ee7248": "getDate(uint32)", +"b3eee638": "icoEnablersTokensMinted()", +"b3ef0045": "decodedRecipient()", +"b3ef774b": "getNumOfTokensBonusOnPurchase(uint256)", +"b3f00674": "feeReceiver()", +"b3f05b97": "finalized()", +"b3f08078": "bookCanvasFor(uint32,address)", +"b3f15866": "CropOracle(address)", +"b3f17c20": "miningOne()", +"b3f19abd": "GetRecordAddress(uint256)", +"b3f1c0c9": "setIssuer(address,uint32)", +"b3f1f31b": "testRecurringClones()", +"b3f22cb4": "setLUCKContractAddress(address)", +"b3f2c866": "startDateOfSaleStageLast()", +"b3f2ecfd": "endDiscountTime()", +"b3f2fa99": "playersShareAllocation()", +"b3f3668c": "getprizeamount()", +"b3f3ab5c": "removeContributor(address)", +"b3f3dcf6": "reinvestSubdivsAmount(uint256)", +"b3f3e673": "switchPeriod()", +"b3f3e737": "SendWalletFees(address,address,address)", +"b3f4d235": "updateCnyEthRate(uint256)", +"b3f50029": "finishedGameWithdraw()", +"b3f523a8": "devuelveTodasApps()", +"b3f57bae": "tokenIncluded(address)", +"b3f5849f": "Battle7oken()", +"b3f5ab78": "noncex()", +"b3f691c2": "approvePendingCostume(uint256)", +"b3f841ba": "minimumNumberOfTokens()", +"b3f865f7": "rebalance(address,address,uint256)", +"b3f8bef1": "tgeSettingsAmountCollect()", +"b3f936f2": "getTypeName(uint32)", +"b3f98adc": "vote(uint8)", +"b3f9b6e1": "showPlayerScores(address)", +"b3fa24ef": "getUnlockSdc()", +"b3faa12d": "blockTokens(address)", +"b3fad72f": "deposited(address,uint256,string)", +"b3fb052a": "NTVUToken(uint8,uint256,uint256,uint256,uint256,uint256,bool,string,address)", +"b3fb14ad": "getGameResult()", +"b3fb59c1": "_setCardId(uint256,uint256,uint256)", +"b3fc0c83": "safeLock(uint256,uint256)", +"b3fc34d4": "specialSanMint(string,string,address,address)", +"b3fcb85b": "Sold_Token()", +"b3fdc99d": "signalTradeIntent(address)", +"b3feda02": "ASSET_MANAGER_WALLET()", +"b3ff0065": "CGC()", +"b3ff1112": "redeemFunds(uint256,uint256,uint256,bytes32)", +"b3ff277d": "totalWon()", +"b3ff8bfb": "BONUS_5_DAYS()", +"b3ffb760": "buy(address,uint256,address,uint256)", +"b4003de4": "removeFromTeamBalanceMap(address)", +"b4007cda": "emergencyFlag()", +"b400d149": "betOnNumber(uint8)", +"b40127f0": "bestmoney()", +"b4015034": "cancelExplorationByShip(uint256)", +"b401faf1": "claimWinnings()", +"b4022950": "collectFeesInEther(uint256)", +"b4024d9f": "testTransferNoMoreThanTokenBalance()", +"b4025b92": "deployProject(uint256,bytes32)", +"b4026ed5": "clearAuth(address)", +"b402973c": "SeeToken(uint256,string,string)", +"b4037767": "CryptoUniversityTuition()", +"b4037bca": "setWins(uint256,uint16)", +"b4038efe": "setVestTokenAllocationAddresses(address,address)", +"b403c290": "getwinningaddress50()", +"b404e001": "COMMISSION_PERCENT()", +"b4051397": "TokenEtcb(uint256,string,uint8,string)", +"b405c549": "waiting()", +"b40615c6": "soldTokensTotal()", +"b4068734": "drawWinner(uint32,int8)", +"b406cf39": "isPeriodTimePassed(uint256)", +"b406d386": "convertForPrioritized3(address[],uint256,uint256,address,uint256,uint256,uint8,bytes32,bytes32)", +"b4071f8f": "setBlacklist(address,address,bool,bool)", +"b4073060": "getLockListLen(address,address)", +"b407d1d2": "allocate7ProjectToken()", +"b408ac01": "totalCandyNo()", +"b4099ff7": "queryImage(address,bytes)", +"b409da05": "logDoubleIndex(bytes,bytes,bytes,uint256)", +"b40a5627": "bidCount()", +"b40a9304": "allocateDelayedTokens(address,uint256)", +"b40b234e": "DigitizeCoin()", +"b40bfd35": "AlexTestCoin()", +"b40d8d58": "hodlerTime9M()", +"b40e415e": "mutagen2FaceContract()", +"b40e4bec": "computeCap(uint256,uint256)", +"b40e76fa": "minePoP(address,uint256,uint256)", +"b40ee3b3": "NewSmartSharingContract(string,uint256,uint256,string,string,string,uint256,string)", +"b40ee8b4": "setCredit(address,uint256)", +"b40f0352": "refund(address,address[])", +"b40f6f4c": "buyOptions(address,uint256)", +"b41044c4": "btc_token(address,uint256)", +"b410a034": "issuanceRatio()", +"b4114165": "foundationFundTokenCountInWei()", +"b411e54f": "removePolicyFrom(address,uint8)", +"b411ee94": "hash(string)", +"b4123abb": "getBatch(address,address,uint256)", +"b412506b": "turnFaucetOff()", +"b41283bc": "parseTradeCompatible(bytes)", +"b412a2d7": "StartDateUpdated(uint256,uint256)", +"b412a4b7": "asideTokensMintDate()", +"b412b1e9": "getForestCount()", +"b412b445": "icoBonus3()", +"b412d4d6": "CafeDelivered()", +"b412d627": "TokenWin(address,uint256,uint256)", +"b4134e6e": "totalRedeemedValue()", +"b413c923": "setReservedTokens(uint256,address[],uint256[])", +"b4144b79": "getTradesByAddress(address)", +"b414d4b6": "frozenAccount(address)", +"b4150f17": "masterAuth()", +"b415c4ca": "total_burned_by_raffle()", +"b416bc93": "TokenAllowance()", +"b4174cb0": "right51(uint256)", +"b41762f9": "capIncreased()", +"b41960d4": "redeemGift(string,address)", +"b419bd17": "getNumCoins()", +"b419dd2d": "hashesUsed()", +"b419f447": "ZipcoinToken()", +"b419f73b": "proveIt(address,bytes32)", +"b41a6ce2": "changeSettings(uint64,uint64,uint8)", +"b41a9f22": "totalRedemptionIdValue(address,uint64)", +"b41b208e": "DLP()", +"b41b3967": "m_holders(uint256)", +"b41bfa6a": "ABLGenesisToken()", +"b41d989d": "angelsDayCooldownEnd()", +"b41e6640": "taxMan()", +"b41e79d4": "firstChangeBlock()", +"b41f511c": "trade(uint256[],uint256,uint8,bytes32,bytes32,bytes)", +"b41fc258": "balanceOfPaillier(address)", +"b4200294": "totalApprovedAmount()", +"b42072e4": "tokenExchanged()", +"b420feb2": "ethDepositAddress()", +"b4210257": "addInitiator(address)", +"b4214c8c": "LogWithdrawal(address,uint256)", +"b42220ad": "enableChangeChannel(bool)", +"b4223757": "modifyMilestoneFrom(address,uint8,uint8)", +"b423c31e": "catchYou(address,uint256)", +"b423d93f": "icoUsd()", +"b424bd83": "getLastOrderId(address)", +"b425282d": "getBonusPool(bool)", +"b4256888": "openTime()", +"b425bd43": "distributeTokenToAddressesAndAmountsWithoutHost(address,address[],uint256[])", +"b42748d3": "PSYT()", +"b4279df3": "initialization(address,address,address)", +"b427c148": "calculatePointsBlock(uint32)", +"b4288aa5": "EventBattle(address,uint64,uint64,uint64)", +"b42963f8": "executeUpdateTransferMinimumFeeProposal(uint256)", +"b429844c": "userBanned(address)", +"b429af5e": "changeBotAddress(address)", +"b429afeb": "isController(address)", +"b429f65a": "totalEtherCookieResearchPool()", +"b42a02b5": "updateDID(string,string)", +"b42a11f9": "refundAllCollateral()", +"b42a275e": "bankAmount()", +"b42a8bf9": "_distributeRevenue(uint256,uint256,uint8,uint8)", +"b42b14c4": "DCNForGas()", +"b42b8559": "createPreSale(uint256,uint256)", +"b42c6b4f": "getPumpRate()", +"b42d6bd2": "SunToken(uint256,string,uint8,string)", +"b42dfa0d": "gen()", +"b42e49ef": "rollFive(address,uint8,uint8,uint8,uint8,uint8)", +"b42e8923": "pushBAU2(bytes32,address,uint256)", +"b4307192": "Bible()", +"b430da3c": "migrateHero(uint256,address)", +"b431da0c": "JavaOwnerExample()", +"b43216bf": "cvsquare(uint256[],uint256)", +"b4328e5b": "TokenSale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"b4330e24": "transferred_total()", +"b43386cd": "testBalanceAfterDeposit()", +"b434486a": "getPriceRiseAndFeePercent(uint256)", +"b4349daf": "TOTAL_HAWKING()", +"b4350e69": "ARBITRAGING(address)", +"b43545bb": "ownerValidate(address)", +"b436db29": "deployNetwork(address,address)", +"b43716a0": "getMajorityThreshold()", +"b43740c0": "casamenteiroToken()", +"b4375dc9": "adminSetEnabled(bool)", +"b4380764": "totalTokenHolders()", +"b438a2d0": "RigIdle()", +"b438d018": "guessNumber(uint256)", +"b439548d": "getStudent()", +"b43959c0": "setMembershipStatus()", +"b4396d42": "SAKECOIN()", +"b439be79": "AHCToken()", +"b43bd069": "getNumPassingTokens(address,uint256,uint256)", +"b43c19a6": "monsterAuction()", +"b43c35a5": "p_update_action(uint256,address,address,uint256,string)", +"b43c39a7": "_setRenewable(uint256,bool)", +"b43d42ec": "revokeRatioVote(uint8)", +"b43d4851": "transferSupply(address)", +"b43d9ede": "setMapMaster(address)", +"b43dbffc": "BulletinBoard(address)", +"b43f8a5c": "registNameXname(string,string)", +"b4402991": "userVoteFor(address,uint256,uint256,uint256)", +"b440b5c7": "EthPyramid00XX()", +"b440bf39": "setMonethaGateway(address)", +"b440f7ff": "setInterestor(address,uint256,uint256)", +"b4421cbd": "isPreTokenSaleActive()", +"b4421e7c": "releaseFoundationJM(address)", +"b442649d": "IlluminaCoin()", +"b4427263": "createTokens()", +"b443a085": "boom(uint256)", +"b443c607": "verifyCestificate(address,uint256)", +"b444b606": "getNowTokenPrice()", +"b444ff41": "setFirstRoundPricing(uint256)", +"b44531d3": "test_payment()", +"b4454253": "timePassed()", +"b446b5aa": "addAuthorized(address,address)", +"b446e7b9": "outterlockStartTime()", +"b4472022": "AECTToken(uint256,string,string)", +"b4478d7d": "updateTurnover(bytes32,uint256)", +"b447968c": "enterWithReferral(uint256,address)", +"b447acfa": "doubleSomeVar()", +"b447cfd4": "InitQuantity(int32,string)", +"b448017b": "periodPREICO()", +"b449188a": "updateCirculation()", +"b4495b7d": "MIN_USD_FUND()", +"b44996c4": "checkProof(bytes32,bytes,uint256[],bytes,bytes)", +"b449c689": "testdata()", +"b44a5e64": "GreenMed()", +"b44b0836": "getEAAttributes(uint32)", +"b44ba774": "_existPublicKey(bytes32,address)", +"b44bd51d": "getConfig(string)", +"b44bd688": "recoverLost(address,uint256)", +"b44cac23": "addJobSponsorship(address,address,uint256,string,string,uint256)", +"b44d7325": "signedTransferFromHash(address,address,address,address,uint256,uint256,uint256)", +"b44df72d": "tokensClaimed()", +"b44e2ab9": "onlySignerMock()", +"b44ec921": "whiteListContract(address)", +"b44eccc9": "periodICO()", +"b44ed831": "isDailyUplimitReach(address,address,uint256)", +"b44ef712": "secondRefundRoundFinishTimestamp()", +"b44f776a": "Test22Coin()", +"b44f794f": "removeUserRole(address,uint8)", +"b44f8cda": "icoSaleDeposit()", +"b45105b2": "post(string,address,string)", +"b4512913": "voteStatus(bytes32,uint256)", +"b45156fc": "startDate2()", +"b451794e": "numberOfOrders()", +"b4538897": "ICO_PHASE3_AMOUNT()", +"b4539817": "Donator2()", +"b453afb8": "getMinDisplayPrice()", +"b453fb01": "feeReceiverContract()", +"b4542a70": "getLLV_edit_19()", +"b454c415": "rNo()", +"b454e62e": "addPool(bytes32,address,uint256,uint256,uint256,address)", +"b456d9e2": "activateCrowdSale()", +"b456ecc5": "GetHash(bytes)", +"b458189f": "setAccountB(address)", +"b4590cbe": "ICOStatus()", +"b4594c36": "numberOfQuestions()", +"b4596ea6": "setPlayerGeneralAttrAdd(uint64,uint8,uint32)", +"b459c3fe": "WithdrawUnclaimed()", +"b45a2712": "mintCapInUSD()", +"b45aff16": "pullBalance()", +"b45b290d": "finalizePretge()", +"b45b7a51": "TokenSold(uint256,uint256,address,address)", +"b45be89b": "toGiveBase()", +"b45c48dc": "Security_AddPasswordSha3HashToBankAccount(bytes)", +"b45cff5f": "houseBankRoll()", +"b45db978": "Centspooladdress()", +"b45dd873": "enableBurning(bool)", +"b45f6df2": "updateDayTokenFees(uint256)", +"b45fb209": "setNewMessageNumber(string,uint256)", +"b460481d": "redeemShares()", +"b46062ad": "setInterestRate()", +"b460af94": "withdraw(uint256,address,address)", +"b4612d78": "CD(uint256,string,uint8,string)", +"b4621d07": "LimitBottom()", +"b4628c8a": "ENSRegistrar()", +"b46300ec": "send()", +"b46310f6": "setBalanceOf(address,uint256)", +"b463a75c": "addTeam(address)", +"b463bcde": "testThrowsSetNotTransferableNotOwner()", +"b46452a1": "convertTokensAmountInWeiAtRate(uint256,uint256)", +"b464631b": "get(address,uint256)", +"b464d582": "checkHowManyOwners(uint256)", +"b464d99e": "startTimeEarlyBird()", +"b465307c": "validPayAmt()", +"b4654d98": "transferMinusFees(address,uint256,uint128,uint16)", +"b465e52f": "secondRefundPollDate()", +"b46631cd": "SetTestModeHands(uint256,uint256)", +"b466b76f": "fresh()", +"b4670002": "updateEntries(address[],bool)", +"b4679b06": "multiplyWithNumber(uint256)", +"b46801c2": "balanceUpdatesCount(address)", +"b4693d23": "changeOpeningClosingTime(uint256,uint256)", +"b469ba24": "updatePokemon(uint256,uint256,uint256)", +"b469d6c8": "setFundingLowcapReached(uint256)", +"b46a8a21": "support_proposal()", +"b46bcdaa": "entries(bytes4)", +"b46e42ec": "setClue4(string)", +"b46eeebb": "TOKEN_FUTURE_CAP()", +"b4706fa1": "tokenSalesCapReached()", +"b470aade": "periodDuration()", +"b471fade": "_withdrawal()", +"b473d3b6": "EjariRulesC()", +"b4745939": "convertEtherToDust()", +"b47481a9": "BajwaToken()", +"b4750ca0": "getMiniumInputEther()", +"b4755160": "mkhash(uint256,uint256,bytes32,string)", +"b4758e82": "tokenAssignExchange(address,uint256)", +"b475a1c8": "ALLOC_TEAM()", +"b4765db7": "transferFromToken(address,address,uint256)", +"b476de2e": "callURL(string,string,string,string)", +"b47779ce": "FivePercent4Ever()", +"b47784d9": "testControlDisownNotOwner()", +"b477e7d5": "getFullTicketDetails(int256,uint256,uint256)", +"b4781f63": "change_coef(uint256)", +"b4787dc5": "linkEID(bytes,bytes)", +"b478886d": "promethCost()", +"b478f416": "setBaseCurrency(address)", +"b47a7a67": "proveIt(string)", +"b47b2cfe": "retraitStandard_4()", +"b47b6116": "removeCapFreeAddress(address)", +"b47be3e4": "addToWhitelist(address,uint256,uint256)", +"b47c11e8": "fidget(address)", +"b47d7409": "disablePurchase()", +"b47d89ad": "Details()", +"b47dbf22": "minPurchaseAmount()", +"b47deb3c": "winner(uint256,uint256)", +"b47df046": "setGrantEnable(bool)", +"b47e4c6c": "getTestOne()", +"b47f817e": "confirmAllBuys()", +"b47f833c": "contains(int8,int8)", +"b47fa7e0": "DepositLimit(uint256)", +"b4800033": "set(bytes32,string)", +"b4801272": "Dust()", +"b480eac0": "setTarget(uint256)", +"b4816be9": "endOfRewardsConfirmed(bool)", +"b4819e76": "getTokenDescription(address,uint256)", +"b481cbc0": "withdrawJajalanTokens(address)", +"b4821203": "investInQueue(address,uint256)", +"b483c054": "setOtherFomo(address)", +"b484d371": "fundReferrel(address,uint256)", +"b484de0d": "GetHashedMove(string,string)", +"b484e532": "getMyMsg()", +"b48585e5": "ATM(uint256,string,uint8,string)", +"b4861ca5": "assertSaneBalance(uint256,uint256,uint256)", +"b48666ee": "silverSaleLimit()", +"b4873ac7": "setCEOAddress(address,address)", +"b487b699": "addData(address[],uint256[])", +"b488abd8": "ANACoin()", +"b488f00e": "runSuperPrivilegeLuckyDraw()", +"b4894b1d": "gaps(uint256)", +"b489b365": "authorizeStore(address)", +"b489c597": "limitPresale()", +"b48ae96f": "finalizeRoom(uint8)", +"b48b4204": "register(bytes32,uint256,address,string,uint256)", +"b48b73aa": "setDivBonus(uint256)", +"b48bc2ee": "transferDepositsToNewDao(address)", +"b48c6807": "EtherLinkToken()", +"b48d323f": "getLiveChallenges(uint256)", +"b48eea44": "isWhitelisted(string)", +"b48f4f5c": "PreICOCents()", +"b48fcdc0": "setConfiguration(uint256,uint256,uint256,uint256,uint256,uint256)", +"b4909307": "getData(address,address)", +"b490e79f": "getChosenFreelancer()", +"b4921774": "getReportsByReporter(address)", +"b4929d4c": "publicSell()", +"b492bd32": "setMulBonus(uint256)", +"b493b0d0": "GESToken()", +"b4942ad1": "transferByCoinOwner(address,address,uint256)", +"b4944333": "getPlayerEarning(address)", +"b494b49d": "variationProbably()", +"b494f1fb": "totalReservedTokenAllocated()", +"b49575a7": "CORENET()", +"b49593fe": "PREMIUM_SALE_PACK_COUNT()", +"b4961379": "private_setOracleFee(uint256)", +"b49651ef": "FAPFund()", +"b4972398": "CTCToken(address)", +"b497d17d": "TileUpdated(uint256)", +"b4980148": "numberOfStarsToReserve()", +"b49845f9": "EventClear()", +"b498e3e4": "NeverConfused()", +"b4999e85": "endBlockNumber()", +"b499a26f": "getHowManyLeftToDistribute(uint256)", +"b499b2ce": "doNotThrowOnValidDiv()", +"b49ce17f": "totalCapsules()", +"b49d3a53": "stopTokenTransfer()", +"b49e3b62": "getPenetration(uint256,uint256,uint256)", +"b49f4afd": "getBasePrice()", +"b49f57ad": "getLastLevel()", +"b4a09ba9": "canAccessExclusive(address)", +"b4a0a6b8": "Sgethereum(uint256,string,string)", +"b4a0e24c": "getQuotaCheck()", +"b4a176d3": "restoreRegistry()", +"b4a2251e": "getOp()", +"b4a3208a": "SUAppToken(uint256,string,string)", +"b4a357a2": "get_participant(address)", +"b4a39dfd": "getChildId(bytes32,uint256)", +"b4a4136d": "BIMI_DAO_31()", +"b4a516a6": "addRTO(uint256,address)", +"b4a523e8": "mintedTotallyByBridge(address)", +"b4a5ef58": "updateDefaultTimeoutPeriod(uint256)", +"b4a61608": "MAX_STAKE_PATHS()", +"b4a66678": "Numtokens()", +"b4a77b0e": "isUserBlocked(address)", +"b4a7a022": "_buyInBatch(uint256,address,uint256,uint256[],uint256)", +"b4a8dd5b": "updateTimestampLimit()", +"b4a8f3e6": "timeOfDeath()", +"b4a93d9b": "transferBasic(address,address,uint256)", +"b4a97fc1": "removeBottomUpChild(address,uint256,uint256)", +"b4a99a4e": "Owner()", +"b4a9d156": "changeWaitTimeUntilWithdrawOrTransfer(uint256)", +"b4aa24db": "uncheckedUpgrade(address)", +"b4ab271c": "giftIdToGift(uint256)", +"b4abda8b": "sendOwnershipAndCall(address,uint256,bytes)", +"b4abea24": "BONDS()", +"b4ac5452": "exerciseCUSE(address,uint256)", +"b4ac8ad9": "getRetailerBalances(address,address)", +"b4ad016d": "Socialife()", +"b4ad6b5b": "transferFromTo(address,address,uint256,bytes)", +"b4ae641c": "arrayLimit()", +"b4b063df": "addNewClaim(string,uint256,uint256,string,string)", +"b4b06a74": "GiftClaimed(address,uint256,uint256)", +"b4b097eb": "addNewState(string,uint256[])", +"b4b0a6e2": "ADULTEUM()", +"b4b14467": "submitTokenTransaction(address,address,uint256)", +"b4b179dc": "getAmountToGive(address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes,bytes)", +"b4b1b6d9": "getRecordStateRequiredChanges()", +"b4b1d9c7": "getDescription(address)", +"b4b22b5e": "ico_allocation()", +"b4b2938a": "Finapse()", +"b4b2d3d8": "phase3Price()", +"b4b3b028": "AddChain(bytes)", +"b4b4ff0a": "setDateStartTransfer(uint256)", +"b4b54328": "getActualPeriod()", +"b4b598ce": "TEAM_FUND()", +"b4b5b48f": "tokenData(uint256)", +"b4b68490": "totalTokenCap()", +"b4b68dab": "createPermissionsBot(address)", +"b4b71450": "PlaceRocketForSaleEvent(address,uint32,uint80)", +"b4b7771d": "setInvadeAddr(address)", +"b4b857d8": "DepositEther(address)", +"b4b9cd62": "UpgradeRig(uint8,uint16)", +"b4b9d1f1": "lookup(uint256,uint256)", +"b4ba2a1b": "percentFrom(uint256,uint8)", +"b4ba2eaa": "moveEther()", +"b4ba349f": "sing()", +"b4ba9e11": "claimFor(address,address)", +"b4baf9ff": "HybridX()", +"b4bb1b0a": "isEscrowActive()", +"b4bb58fb": "mix(uint256,uint256)", +"b4bbfb9e": "StateTransition(uint256,uint256,uint256)", +"b4bc3564": "do_guess(uint256)", +"b4bcc23b": "setInvest(address,address)", +"b4bd5c75": "setupPREICOPeriod(uint256,uint256)", +"b4bd9e27": "isOver()", +"b4be6190": "getFreelancerHourlyRateCurrency(address,address)", +"b4bede85": "transferSenderPaysFee(address,uint256,bytes)", +"b4bee870": "ChangePoolName(string,string)", +"b4beff8a": "GetMinerICOData(address,uint256)", +"b4c045e4": "NHMToken()", +"b4c16970": "BigRedCoin()", +"b4c16ea5": "CREATED_PROMO()", +"b4c28ead": "expertScoreOf(address)", +"b4c2aaee": "tokenPriceMin()", +"b4c2e22c": "_ownerOfLand(int256,int256)", +"b4c48026": "safeBlock()", +"b4c4e005": "testTransferToAcceptAuthority()", +"b4c555a7": "addCollaborateToCampaign(uint256,uint256)", +"b4c5c983": "setMainYouCollectContractAddresses(address,address,address,address[])", +"b4c64ab0": "Goo()", +"b4c65de3": "identify(string)", +"b4c65f7b": "bonusesByDates(uint256)", +"b4c7abaf": "waitTime(address,address)", +"b4c8c5c4": "isApprovedAddress(address)", +"b4c91611": "weiDistributed()", +"b4c93fc0": "setOneGroupJoinersCount(uint256)", +"b4c98496": "CreditAsiaCoin()", +"b4caf8be": "rewardPoolTokens()", +"b4cbdd8b": "setClaimSignerAddress(address)", +"b4cbff23": "disputeStartedFreeze(bytes32)", +"b4cc2181": "setPropertyBecomePublic(uint16,uint256)", +"b4cd3701": "PointGameWithITG(address,uint256)", +"b4cd8865": "getArrBoolField1()", +"b4cdd3b7": "buyCertainOrder(uint256,uint256)", +"b4cdeb78": "LarsGeburtstagsgruss()", +"b4ce8ae0": "updateCrowdsaleEndBlock(uint256)", +"b4cec530": "totalFailedOldOwnerTransferAmounts()", +"b4cf5648": "PRESALE()", +"b4cfd972": "ROUND_4_PRESALE_BONUS()", +"b4cff9f5": "depositBool(address)", +"b4d00d94": "setIcoCap(uint256)", +"b4d01e87": "urandom(bytes32,uint256)", +"b4d07c7d": "GetWorldSnapshot()", +"b4d07e81": "setString(bytes)", +"b4d0ccb6": "getVaultInterestPerDay()", +"b4d0e552": "rareStartPrice()", +"b4d11f35": "getReleased(address)", +"b4d12bfa": "withdrawStudios()", +"b4d14728": "setRateAddress()", +"b4d168f7": "getFundedTokenCount(bytes32,string)", +"b4d1c485": "unlockFunds()", +"b4d1d795": "PERIOD()", +"b4d314f2": "isWithinPeriod(address)", +"b4d3c122": "CXLTotalSupply()", +"b4d3ef5f": "contributedEth()", +"b4d40694": "getPreminer(address)", +"b4d462b3": "unlockDate3()", +"b4d49b62": "RemovedTokenHolder(address)", +"b4d510dd": "countOfSaleTokens()", +"b4d60cfd": "payoutMining(uint256,address,address)", +"b4d657cc": "modifyCurrentHeroPrice(uint256,uint256)", +"b4d6befe": "BuyForHKGTransaction(address,uint256,uint256,uint256,uint256)", +"b4d6d4c7": "getPackageData(bytes32)", +"b4d8166e": "northadvisor()", +"b4d85686": "deductFee()", +"b4d927d0": "moneyFreeze()", +"b4d9cc3a": "profitDisperser()", +"b4da40f3": "getBadBets(uint256)", +"b4da4baf": "OWPayoutArb()", +"b4da662c": "_acceptDividends(uint256)", +"b4dad588": "numPendingRequests()", +"b4daff13": "test(uint256,uint32)", +"b4db1fc1": "deleteCandidatesBatch(address[])", +"b4dbf642": "buyATicketFromContract(uint256)", +"b4dc3dc7": "unbundle(address,uint256)", +"b4de64bd": "Sarf()", +"b4de8673": "balance0f(address)", +"b4def1e7": "completedTransfers()", +"b4e05b89": "getOwnedShips()", +"b4e0aa3e": "testCallBack(uint256)", +"b4e0b764": "minSumICOStage5USD()", +"b4e19f3e": "getBestGuessSecondPlaceTentativeWinningPayoutDistributionHash()", +"b4e1a78e": "correctExchangeRateBTCxETH(uint256)", +"b4e28f79": "test_TorontoRules()", +"b4e327ec": "MajListNotVal()", +"b4e3add2": "_createCollection(string)", +"b4e3c486": "addProposal(uint16,uint256,string)", +"b4e50c9b": "contributed4(address)", +"b4e51b7b": "sane()", +"b4e56e01": "setMerchantRate(address[],int16)", +"b4e6850b": "add(uint80,uint80,address,uint32,uint32,uint32,uint256)", +"b4e68dc1": "ERC721BasicToken()", +"b4e6f92b": "BuyTroop(uint256,uint256)", +"b4e7fe0c": "pendingOraclize()", +"b4e81236": "_verifyOptionPoolIncome(address,uint256)", +"b4e8c036": "ProofOfWeakFOMO()", +"b4e92f20": "getInitializeUniverseValue()", +"b4e9ac13": "getAddressRefundValue(address)", +"b4ecb847": "areTokensDistributedForAddress(address)", +"b4ed3622": "calculateDecayedBalance(uint256,address)", +"b4ed7ec3": "getVoteOption(uint256,uint256)", +"b4ed8bf8": "removePolicyAttribute(uint8,uint256)", +"b4ee4f81": "Sotko()", +"b4eecb54": "s_pwd()", +"b4eff690": "checkFlag(bytes)", +"b4f14b2b": "DragonsBurned()", +"b4f15310": "invalidateHash(uint256,uint256)", +"b4f181c6": "ethToUsdExchangeRate()", +"b4f20aa9": "executionOpen()", +"b4f272e3": "TOPToken(uint256,string,uint8,string)", +"b4f2bb6d": "getPoolIds()", +"b4f2dc7d": "approveDividends(uint256)", +"b4f2e8b8": "setFee(uint256,address)", +"b4f3625e": "fuelContract()", +"b4f3b453": "reserveTimelock()", +"b4f40c61": "k()", +"b4f48e08": "projectFoundersReserved()", +"b4f4e284": "addAdminWhitelist(address[])", +"b4f5a21a": "getCurrentPeriodIndex()", +"b4f5a6a6": "minPurchaseOnce()", +"b4f5b9b9": "affiliatThreshold3()", +"b4f5d282": "getImmed(bytes32)", +"b4f666da": "capToken()", +"b4f6aa56": "getForSalePrices(uint16)", +"b4f7451b": "getTransactionVATTotal(uint256)", +"b4f80eb9": "getPixel(uint256)", +"b4f82c6a": "readCompany(uint8)", +"b4f94b4f": "_transferByDefaultPartitions(address,address,address,uint256,bytes,bytes)", +"b4f9529c": "RemoveMember(address,address)", +"b4f96d60": "_calculateBonus(uint256,uint256)", +"b4f9b6c8": "kill(bytes32)", +"b4fadcad": "relayMetaTx(uint8,bytes32,bytes32,address,bytes)", +"b4fc0344": "getAdsCountByCat(uint256)", +"b4fc3e3b": "createSchedule(address,uint256,uint256,uint256,uint256)", +"b4fcf935": "revealBet(uint256,uint256,bool,bytes32)", +"b4fe3017": "Whitelist(address[],uint256)", +"b4ff4f3d": "setCanMint(address,bool,int256)", +"b4ff87f2": "_approveTransaction(uint256,address)", +"b4ffaece": "setReservedTokensListMultiple(address[],uint256[],uint256[])", +"b4fffa52": "min_value()", +"b5000405": "gifted()", +"b5004d1c": "currentPotSplit()", +"b500cc08": "toBase58(bytes)", +"b501671c": "KillingChainToken(address,address,address)", +"b501df23": "Mintloot()", +"b503a2b9": "categoryId()", +"b503fcf3": "totalToSale()", +"b5040f0a": "getLastSessionVote(uint256,address)", +"b5044e85": "BATO()", +"b5046219": "getDailyPrice()", +"b504adda": "LOG_BetLost(address,uint256,uint256,bytes32)", +"b505a3f2": "LOG_Payout(address,uint256)", +"b505c6ef": "releaseTokens(address,address,uint256)", +"b507f7c4": "_setBlockHash(uint256)", +"b508069b": "implChangeReqs(bytes32)", +"b508adb9": "isStateInit()", +"b5093f7c": "HasNoEther()", +"b50954b6": "cancelWaitingForOpponent()", +"b509bae5": "OpenFundFactory()", +"b509c090": "getCurrEthValue()", +"b50a0899": "seeZombieDna(uint256)", +"b50a89f3": "MyToken(uint256,string,string,uint8)", +"b50bf8cb": "getStakeholderConfirmations(uint256)", +"b50c77f2": "initWallet2of3()", +"b50d2b35": "currentTokensRemaining()", +"b50e44b8": "EXCHANGE()", +"b50e4610": "refoundTokens(uint256)", +"b50eb5d7": "KeyTokenSale(uint256,address)", +"b50f2832": "set_participant_num_of_uses(address,uint8)", +"b50fa90b": "verPlayer()", +"b50ff2b8": "hiddenCapTriggered()", +"b51051d4": "addDataPoint(uint256,bool,string)", +"b510dc2a": "setIcoAddress(address,uint256)", +"b510e42c": "ethOfKey()", +"b510fe45": "newIdShip()", +"b5116a93": "getMyOwed(address,address)", +"b5120c30": "canBeClosed()", +"b5125493": "organizer4()", +"b5128f66": "view38()", +"b512e8a6": "agtAtnReceived()", +"b512f98c": "TSFINAL()", +"b5133189": "anotherOwner2()", +"b51459fe": "canWithdraw()", +"b5147d64": "getAccountCoords(address)", +"b515622f": "_getBonus()", +"b5160d6f": "setFreeMem()", +"b516444a": "mine_success(bytes32)", +"b516ce40": "manageKey(uint256,uint256,uint256)", +"b516cf2e": "MainContract()", +"b5175571": "changeCheckDate(bool,uint256,uint256)", +"b517570a": "ICO_TIER_FIRST()", +"b518a776": "tmp()", +"b519719e": "assertCheck(bool)", +"b51996de": "setWalletWithdraw(address)", +"b519c05b": "updateAdditionalEmission(uint256,uint256)", +"b519cf31": "rateLimiter_()", +"b51a81b4": "setOrganizationLogo(string)", +"b51aae5a": "ResetAirdrop(uint256)", +"b51abfcd": "BCBCOIN(uint256,string,string)", +"b51ac349": "_updateArtistLookupData(address,uint256)", +"b51ad456": "IsPreSaleEnabled()", +"b51b63f7": "sendMessage(address,address,uint256,uint256,bytes)", +"b51bda59": "_depositForRenter(address,uint256)", +"b51be1db": "infytoken()", +"b51c3d2a": "maxImmortals()", +"b51c4f96": "getCodeSize(address)", +"b51d42a2": "customPedro(uint256,uint256,bool)", +"b51d93eb": "confirmNewOwner(address)", +"b51dfa9d": "buySupply()", +"b51f86c0": "getCrcWithdrawAccount()", +"b520b68c": "withdrawForeignTokens(address,bool)", +"b520c7e7": "getWeeklyVolume()", +"b5217c39": "TotalCrowdsaleContributions()", +"b521c106": "bonusDate()", +"b521d3bb": "gcpn(uint256)", +"b522739a": "register_node(string)", +"b52303b2": "TransferToExchange(address,address,uint256,uint256)", +"b5232ba3": "registerUserWallet(address,uint32)", +"b523d13c": "VernamCrowdSaleToken()", +"b5247199": "readPhaseData(uint256)", +"b524abcf": "totalSupply(bytes32)", +"b525256f": "BloxrouteToken()", +"b525ab8d": "min_balance_for_bonus()", +"b5268fa4": "DisableTransfer()", +"b527b0a6": "setSaleAuction(address)", +"b5281b31": "purchaseMysteriousEmblem()", +"b52923a0": "setCompte_11(string)", +"b5299ca6": "giveMeat()", +"b52a3d8d": "initCaps()", +"b52a467c": "buyGold(bytes32,string,string,bytes32,string,string,bool)", +"b52a5851": "burnUnsold()", +"b52a6a38": "atLastUnclaimedFeeAllocation()", +"b52ae3fc": "transferBlackFunds(address)", +"b52b925d": "investorProfit()", +"b52bb6b9": "TokenSale(address,address,address,uint256)", +"b52c0c35": "setPayOutPercentage(uint8)", +"b52c1d5b": "calculateSeed(uint256[],uint256)", +"b52c64c7": "addNewInsurance(bytes32,uint256,uint32,uint32,bytes32)", +"b52db3b9": "updateRecord(address,address,bool)", +"b52e0dc8": "getRateAt(uint256)", +"b52fddbd": "setCrowdsale(uint256,uint256)", +"b53148ad": "currentAmountOfTokensWithNoBonus()", +"b5319335": "promoCreationLimit()", +"b531a872": "icoStop()", +"b532073b": "OwnerChanged(address,address)", +"b5320cd6": "test_22_assertGasUsage100Boards()", +"b532e4cb": "addModerator(address)", +"b5338408": "_numDigits(uint256)", +"b533ff5f": "getLockedStructTimeToLock(address,address,uint256)", +"b534b5b7": "issuedTokens()", +"b5352fa7": "MuMuToken(uint256,string,string)", +"b53564ea": "setInvestors(uint256[],address[],uint256[],uint256)", +"b535b5c3": "hashExists(bytes32)", +"b535c741": "makeOldFucks(uint32)", +"b5364560": "clearApprovalForGeneLab(uint256)", +"b536c686": "burnedTokens(address)", +"b536fa63": "stopGracePeriod()", +"b537488c": "GanaToken()", +"b537752f": "transfer(address,address,uint256,uint256,bool,bool)", +"b537f5b5": "settleBet(bytes32,bytes32)", +"b5389c20": "timeToBeBurned()", +"b538c5ea": "addWorkerPool(address,address)", +"b538cefc": "subtractDarknodeFee(uint256)", +"b538d3bc": "addArbiter(address)", +"b539cd55": "maxProfit()", +"b53aab4c": "changeServicePercentage(uint256)", +"b53b0a75": "Startex()", +"b53b1f12": "findRankByCount(uint256,uint256,uint256,uint256)", +"b53b3f41": "LuckyTree(uint256,uint256,uint256,uint256)", +"b53c71b6": "addLifeEvent(string,string,string)", +"b53c7245": "set_min_contribution(uint256)", +"b53dfdb9": "getTeamFund()", +"b53e07c4": "transferReward(uint256)", +"b53e9dfe": "requiredContribution()", +"b53ea172": "calcBindedBlindHash3(string,address)", +"b53ea1b6": "replaceKey(address,address)", +"b53eb39f": "getSecondsToComplete(bytes16,address,address,uint256,uint256)", +"b53f4d94": "setPOOL_edit_32(string)", +"b53ffba0": "owner_testEnd()", +"b5402ec3": "manager_withdraw()", +"b54030d5": "recordNr()", +"b54050c2": "_updateStateIfExpired()", +"b54144b2": "Receipt(address,uint256,uint256)", +"b5417a52": "TEAM_VESTING_WALLET()", +"b541a778": "SampleOffer(address,bytes32,uint256,uint256,uint256)", +"b5420d68": "getCategoryPack(bytes4,uint256)", +"b5432fcc": "setManagerAgent(address)", +"b5439012": "closeSale(address,uint256)", +"b543d4b4": "getMasterWallet(address)", +"b54430ce": "canSign()", +"b5444ef2": "becomeCoowner()", +"b5446457": "deleteRoomByIndex(uint256)", +"b544bf83": "lockTimestamp()", +"b545252c": "isNewDay()", +"b545ddf5": "calculateReleased()", +"b545f2a6": "cards_blue(uint256)", +"b547a726": "turnOff(address)", +"b547aeda": "spawn()", +"b547b7a1": "committeesMap(address)", +"b54811f1": "EtheremonTransform(address,address,address,address,address,address,address)", +"b5481743": "exchangeRateAgent()", +"b5483f28": "changeAddressJoker(address)", +"b548b892": "getMarketWithInfo(uint256)", +"b548c6f6": "Transaction1()", +"b549793d": "scheduleCall(bytes4,bytes,uint256,uint256,uint8,uint256)", +"b549bdda": "XavierToken()", +"b549c6b3": "_transferInvestor(address,uint256)", +"b54a7987": "LogGetDeposit(address,uint256,string)", +"b54b1187": "setdteamVaultAddr4(address)", +"b54b4fb9": "getPriceOf(uint256)", +"b54beedc": "getCCH_edit_10()", +"b54c71eb": "weightedVoteCountsOf(uint256)", +"b54ca7b4": "setIncreaseK(uint256)", +"b54cd451": "updateFlightStatus(bytes32,uint256)", +"b54d6238": "releaseToken(uint256)", +"b54e7a4a": "sanitize(string)", +"b54eb822": "redistributionTimeout()", +"b54ef544": "buyStakeWithStarCoin(uint256,address)", +"b54f24a9": "getMappingID(string,address,address)", +"b55027a9": "maxMinutesFundingPeriod()", +"b550e634": "getTotalInvestmentsStored()", +"b551c373": "getTotalReputationSupply(bytes32)", +"b5522e89": "addContract(address,uint256)", +"b5531651": "Startable()", +"b553b715": "rewardDistributedUnits()", +"b55459d1": "User_5()", +"b5545a3c": "claimRefund()", +"b554d538": "recoverBounty()", +"b554f8eb": "withdrawAllWei(address)", +"b5554e73": "getPlayerJackpot(address,uint256)", +"b5558562": "tokenWithdraw(address)", +"b556188e": "finaliseTime()", +"b5563dcf": "BillOfSale()", +"b5565aac": "endPromotion(uint256)", +"b556861a": "add_tokens(address,uint256)", +"b556a895": "incFreezeHybridizationsCount(uint256)", +"b556ff26": "NewBid(bytes32,address,uint256)", +"b557478a": "refundClaimed(address)", +"b557a11d": "getReplyCount(bytes32)", +"b557c9a4": "slaveWalletInitialized()", +"b5581663": "airDropMultipleAmount(address[],uint256[])", +"b55845e7": "totalExchange()", +"b55867ea": "_goldUnFreeze(uint256)", +"b558a50c": "LongevityCrowdsale(address,uint256)", +"b558d1ea": "updateRate(address,uint256)", +"b558f334": "isRedemptionPermitted(address,uint256,uint256)", +"b559490d": "payVisa(uint256,uint256)", +"b559b0fe": "withdrawFromRemainingTokens(uint256)", +"b55a7d45": "multiplierPercent()", +"b55ad27e": "getBlipTokenAddress()", +"b55b089b": "bigTokensPerEther()", +"b55cdbf9": "setExtraBalance(address,uint256)", +"b55cff2d": "test_twoValidEqBytes()", +"b55da874": "create_private_room()", +"b55e31f4": "assertOrders(address,bytes32)", +"b55fc3d6": "UnregisterList(address[],bool)", +"b560b6da": "enableDistrict0xNetworkTokenTransfers()", +"b560c4de": "adminPayout()", +"b560d589": "getUserInvestBalance(address)", +"b561d5b3": "OrguraExchange()", +"b5622abc": "EuroGoldTest(uint256)", +"b563b75d": "getAdminRevenue()", +"b564561e": "register(bytes32[])", +"b56494c0": "validateBoard(uint256[81])", +"b56537ef": "isEASigned(uint32)", +"b566d0b4": "getContributorRemainingPresaleAmount(address)", +"b5674c68": "TokenGNO(uint256)", +"b5675ee4": "bookkeeping(uint8,uint8,uint256)", +"b56797fd": "getSaleHourNow()", +"b567a1e7": "ShopClosed(uint32)", +"b568e689": "getCrowdsaleWhitelist(address,bytes32)", +"b5692a67": "removeExemptionAddress(address)", +"b569a35f": "YSSYBToken(uint256,string,string)", +"b56a9f2c": "heartBeat()", +"b56aef62": "sampleTypes(uint32)", +"b56b2627": "add_owner(uint256,address)", +"b56b366b": "maliceReportedForBlock(address,uint256)", +"b56b5918": "TicketRefund(uint256,address,uint256)", +"b56b64d9": "disputing()", +"b56ccd93": "arr(address,address,address)", +"b56d3ccc": "select(bytes32,bytes32,bool)", +"b56d4717": "lockOwner(address)", +"b56e1bca": "setExchangeToken()", +"b56e2d76": "testRewardSS(string)", +"b56ea5cc": "specialApprove(uint256,bytes32,bytes)", +"b56ebf42": "GetNow()", +"b571324d": "ShareErc20(string,string,uint256)", +"b57228fd": "ChangeEmissionGrowthCoefficient(uint256)", +"b5725445": "setOptionalFeeSplit(address,uint256)", +"b5738a78": "SatoMotive()", +"b573a104": "secondStageTokenRate()", +"b5740cc2": "preSaleVault()", +"b5744134": "setLaunchDate(uint256)", +"b5754045": "disown(string,address)", +"b57566d8": "setvalue(string,string)", +"b5776339": "transferGDPOracle(address)", +"b5784f6f": "testMultiplePackages()", +"b57874ce": "addressToPass(address[],bool)", +"b578e764": "ACNN()", +"b579184f": "addContributor(address)", +"b57934e4": "haltCrowdSale()", +"b5794222": "destroyAndSendToStorageOwner()", +"b57980ce": "prepareContribution(uint256,uint256,uint256)", +"b579b6c5": "distributeToken(uint256,uint256,bool)", +"b579d7de": "RewardEnd()", +"b57adee3": "setBanker(address,uint256,uint256)", +"b57c5814": "getDonatorsNumber()", +"b57d5d27": "assertBalance()", +"b57dbdc6": "safeguard()", +"b57e55ec": "seeAllPlayers()", +"b57e6ea1": "tokenGenerationMax()", +"b57ff495": "triggerPauseEvent()", +"b5802ae6": "getCirculationCap(address)", +"b5809c9b": "COPPER_AMOUNT_TPT()", +"b580a7a1": "totalBalanceClaimed()", +"b580d205": "ChangeRate(uint256,uint256,uint256,uint256)", +"b58166f2": "lastRoot()", +"b581b725": "transferToken(bytes8,address,uint256)", +"b582ec5f": "j()", +"b58489ac": "isAuction(string)", +"b5848db4": "validateStartMegabox(address,uint256)", +"b585245b": "_callSender(address,address,address,uint256,bytes,bytes)", +"b58617d9": "CCRCrowdsale()", +"b58637e8": "approveToSell(uint256)", +"b5863ed7": "addContribution(address,uint256,uint256,uint256,uint256)", +"b58696ba": "test_ShouldPassButNoBondSoFail()", +"b587194e": "TokenMigration(address,uint256)", +"b587dc57": "openICO()", +"b587e3c7": "getRank04()", +"b5881422": "unsafeIsEth(uint16)", +"b588bfad": "writeMessage(string)", +"b588fdc1": "takeTokenContractOwnership()", +"b58aa6be": "checkWithdrawalAmount()", +"b58b9d5c": "getSaveData(address,address)", +"b58baa0d": "displayString()", +"b58c2d31": "addAddressManual(address)", +"b58d0651": "checkAllowedAddressFoTransfer(address,address)", +"b58d4885": "addNewTrait(string,bool)", +"b58de1d5": "JSONpath_int(string,string,uint256)", +"b58dff99": "gntContractAddress()", +"b58e5216": "allowBlocking(address,address)", +"b58e60db": "theWord()", +"b58ee9a3": "companyRemainingAllocation()", +"b58f4a24": "LOTTERY_FUND_ADDRESS()", +"b58fa125": "commit_end_time()", +"b58fc3e7": "distributeIncomeEther()", +"b5917478": "TYPE_FREIGHTER()", +"b5919b48": "toBuyBack()", +"b591fc69": "totalEtherContributed()", +"b5922a2b": "INITIAL_AIRDROP()", +"b592500e": "RICEBALLZ()", +"b59284ac": "unlinkAddress(address)", +"b592bb99": "SSDToken()", +"b592de3a": "sell(bytes32,uint256)", +"b5930872": "test_testablestandardcampaignDeploymentAndUse()", +"b5931f7c": "safeDiv(uint256,uint256)", +"b5932ee2": "DistrictsCore()", +"b5936da2": "seedEnded()", +"b594f086": "changeDuration(uint256)", +"b5950529": "CTSCToken()", +"b595181f": "ShapeshiftBot()", +"b595357b": "getLLV_edit_29()", +"b5957288": "getMatchBettingDetails(uint8)", +"b59589d1": "relay()", +"b595b8b5": "betOnColor(uint256)", +"b5962159": "moveMinions(uint8,uint8,uint32)", +"b5967e16": "updatePlayersGoo(address)", +"b59712af": "totalSupplyOfType(uint256)", +"b59724e8": "NewFunding(address,address,uint256,uint256,uint256,address)", +"b597842a": "TimeNow()", +"b597e784": "setTokenPriceInWei(uint256)", +"b5980f7d": "unverifyAddress(address)", +"b598afcb": "oraclize_query(string,bytes[5])", +"b598d3e8": "getMessages(address,uint256)", +"b598f882": "updateTokenRates(uint256)", +"b5999c12": "getPoohsSinceLastHatch(address)", +"b599aaec": "TheBitcoinCenterToken()", +"b599afc8": "totalBetCount()", +"b59a1598": "distributeGLAU(address[],uint256,uint256)", +"b59a1d37": "buy1(uint256)", +"b59a60db": "minContribute()", +"b59b0fc4": "modifyTokenPrice(uint256,uint256)", +"b59b44f5": "usePlayerFiboken()", +"b59b6acb": "GetDynamicCardAmountList(address)", +"b59bb5e3": "testcall(address)", +"b59bc382": "setReportingFeeDivisor(uint256)", +"b59ca0f6": "registerDINsWithResolver(address,address,uint256)", +"b59d689f": "grantStock(address,uint256,uint256)", +"b59d7fe6": "EtherbotsBase()", +"b59dd856": "GetCardInfo(uint8)", +"b59f16d1": "Set(bytes32,address,address)", +"b59ffdd3": "getFreeAnthill()", +"b5a01992": "setDDF(address)", +"b5a02db1": "totalHouseWinnings()", +"b5a030d8": "link(bytes32[],bytes32[],address[],uint8[],bytes32[],bytes32[])", +"b5a04829": "setLargeCapWhitelistParticipants(address[],uint256)", +"b5a0596e": "declareCheaters(address[])", +"b5a127e5": "minQuorum()", +"b5a1a64b": "lockedRewardsOf(address,address)", +"b5a27a21": "leave_square(uint256)", +"b5a29d11": "purchaseCRS(uint256)", +"b5a312c6": "mintlvlToken(address,uint256)", +"b5a46d5e": "whoOwner()", +"b5a4a146": "generateRnd(bytes,uint256,uint256)", +"b5a4e04a": "canFinalizeEarly()", +"b5a54627": "setPrimaryGameManager(address)", +"b5a5b8f5": "setPreSaleContract(address)", +"b5a60045": "setJob(uint256,string,string,uint256[],uint256,uint256,uint8[],uint8,bool,address[])", +"b5a678d7": "YouRyuCoin(uint256,string,string,uint8)", +"b5a6c525": "extractFrozenAccountLength()", +"b5a7900e": "nextroundsoldierreplenishrate()", +"b5a89065": "getUserData(address,string)", +"b5a8fa80": "VRChainToken(string,string,uint8,uint256)", +"b5a90793": "Sender(uint256,address[])", +"b5a9823f": "tier3Time()", +"b5a9de6e": "minEtherParticipate()", +"b5aab008": "WobToken()", +"b5aae6fc": "_setCurrentSecret(uint256)", +"b5aae91a": "handle_dividend(address,address)", +"b5ab05a5": "tokensHardCap()", +"b5ab58dc": "getAnswer(uint256)", +"b5ac7894": "partnerInfo_for_Partner(bytes32,uint8,bytes32,bytes32)", +"b5ac7c27": "payForOrder(uint256,address,uint256)", +"b5add717": "claim(uint256,uint256,uint256,uint256)", +"b5ade81b": "_BLOCKS_PER_READJUSTMENT()", +"b5ae4519": "endorsements()", +"b5ae64b2": "piStartTime()", +"b5ae8225": "auditSwap(bytes32)", +"b5aebc80": "donate(string)", +"b5aece02": "silverBoxAmountForSale()", +"b5af411f": "NXETToken()", +"b5afb120": "updateSkill(uint256,uint256,uint256,uint256)", +"b5afd61b": "maxForceOffsetAmount()", +"b5b12e75": "isApprovedFor(uint256,address)", +"b5b13462": "getUserTotalSales(address)", +"b5b1fc05": "getAdminFromMintedCappedProxy(address)", +"b5b26505": "DURATION_SALESTAGES()", +"b5b33eda": "scheduleCall(address,uint256)", +"b5b3fc07": "GlowToken()", +"b5b4d0d6": "COLLATERAL_HELD()", +"b5b52096": "fixedFeeInCWC()", +"b5b5a057": "changeMinimumDonation(uint256)", +"b5b64d24": "GetExistsChipList()", +"b5b73c63": "getUserSignedDocuments()", +"b5b77d7f": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b5b7916b": "getMembershipType(address)", +"b5b7d767": "vpe_per_eos()", +"b5b86a51": "getReferralBalance(address)", +"b5b879c2": "mAlek()", +"b5b90a26": "addHash(bytes32[])", +"b5ba7074": "isBelow(uint256,uint256,string)", +"b5ba95a0": "ElectronicMusic()", +"b5ba9a7e": "getReferralPackageKind(bytes)", +"b5bab68e": "minLimitPublicSecondSale()", +"b5bb0ade": "agreementExists(bytes32)", +"b5bb5ee4": "withdrawMintTokens(address,uint256)", +"b5bd3eb9": "totalCredits()", +"b5be0ebb": "MStoken()", +"b5bf15e5": "freeze(bool)", +"b5bf4c74": "RandomWinner()", +"b5bf6eb6": "incrementPrice()", +"b5bfdd73": "addDSource(string,bytes1,uint256)", +"b5c05570": "toggleLockIn()", +"b5c07eab": "metaBaseUrl()", +"b5c0c884": "refundLosersBids(uint256)", +"b5c12c09": "cancelRequest(uint32,string)", +"b5c12f4d": "setWhitelistRequired(bool)", +"b5c14adb": "setGamePaused(bool)", +"b5c150d4": "availableAmount(uint256)", +"b5c1662f": "addWei(address,address,uint256)", +"b5c18ea8": "rejectClearingPriceSubmission(address,address,bytes32,uint256)", +"b5c19d59": "betLastTime()", +"b5c1ac14": "toBE()", +"b5c2b889": "XTVBurned()", +"b5c2c600": "Gave(address)", +"b5c3a111": "depositCell(address,uint256)", +"b5c4147f": "getZoneShop(bytes2,bytes16)", +"b5c47f69": "megaRate()", +"b5c56797": "AIMToken()", +"b5c5a635": "incrementProgressOfAddressAndId(address,address,uint32)", +"b5c5f672": "withdraw(address,uint256,uint256)", +"b5c61e90": "TokenMigration(address)", +"b5c645bd": "record(bytes32)", +"b5c6b5a2": "FishFarmer()", +"b5c6e7d6": "getCountsByName(bytes32)", +"b5c73816": "ASSC()", +"b5c7a4e4": "validateReleasedToken(uint256)", +"b5c7b1fe": "claimTokenTokens(address)", +"b5c83592": "offerExists(uint256)", +"b5c8b021": "testMintableToken()", +"b5c8f317": "SimpleERC20Token()", +"b5c90917": "GetAllReferralAddresses()", +"b5c9cbbe": "setBalance(address,address,uint256)", +"b5c9fa0a": "setBountyRewardPercent(uint256)", +"b5ca87c4": "setAccountFactoryV1(address)", +"b5caadf2": "setParams(address,address,address,uint256,uint256)", +"b5cab1ce": "tokenMetadataBaseURI()", +"b5cadc91": "convertForMultiple(address[],uint256[],uint256[],uint256[],address)", +"b5caf461": "removeAllApprove()", +"b5cb0611": "setCrowdsaleState()", +"b5cb15f7": "getUserCount()", +"b5cb6a17": "capDay3()", +"b5cc7e29": "unfreezeTokenTransfer(bool)", +"b5cc84f5": "getVatomOwner(string)", +"b5cc916c": "CITY_PRICE()", +"b5cd1821": "lastBlock_a0Hash_uint256()", +"b5ce3600": "thirdStageDuration()", +"b5cf852d": "triggerHiddenCap()", +"b5d011fd": "updateCalculator(address)", +"b5d02a56": "nextRand(uint256)", +"b5d03751": "YoutubeViews()", +"b5d0c747": "setApiCallsContractAddress(address)", +"b5d0f16e": "getGasScalar(uint256,uint256)", +"b5d11d39": "validatePurchase(uint256)", +"b5d11e99": "testInit()", +"b5d1220a": "hasPreviouslyEnteredCardIds(uint256[])", +"b5d125f1": "isApprenticeChest(uint256)", +"b5d1548c": "CCH_RE_1()", +"b5d1990d": "numRecords()", +"b5d1aedc": "COLOR_YELLOW()", +"b5d29f21": "authorizationPayment()", +"b5d347ed": "CryptoCityToken()", +"b5d34966": "unlockCapital(address,uint256)", +"b5d3a379": "CanaryTestnet()", +"b5d3a9c6": "groomSignedAt()", +"b5d446ab": "mokenEra(uint256)", +"b5d561bb": "migrateManual(address,bool)", +"b5d65f61": "partialRedeem(uint256,bytes32)", +"b5d6cbfe": "FSHN()", +"b5d76067": "Alter_TrustlessTransaction(uint256,bool)", +"b5d7df97": "Sign()", +"b5d7eca5": "token_was_created()", +"b5d8514b": "Arthimetic()", +"b5d86c86": "ownerOfCountryCount(address)", +"b5d89627": "getValidator(uint256)", +"b5d9ac79": "toB32(bytes,uint256)", +"b5d9f80b": "serverEndGameConflict(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,bytes32,bytes32)", +"b5da0114": "isNull()", +"b5da2df4": "markAsImported(address,address)", +"b5dadb17": "whitelistThreshold()", +"b5db26cd": "manualOverrideEditionBid(uint256,address,uint256)", +"b5dba35b": "onlyMinterMock()", +"b5dc40c3": "getConfirmations(uint256)", +"b5dc9399": "fetchPaidOrdersForPayerByAdmin(address)", +"b5dcbb69": "takeRegion(uint16)", +"b5dd20e9": "createIsland(bytes32,uint256,address,uint256,uint256)", +"b5de8d4c": "getModule(address)", +"b5dea68c": "_addNewEscrow(address,address,address,uint8)", +"b5debaf5": "exp(uint256,uint256,uint256)", +"b5debd95": "totalAmountOfEarlyPurchasesInCny()", +"b5deeca7": "BaseRegistry()", +"b5df3ef8": "WillWithdraw(uint256)", +"b5dfad16": "specialSkinOfTokenId(uint256)", +"b5dfd153": "withdraw(uint256,uint256,address,uint256)", +"b5e02e84": "Exorbuxcom()", +"b5e11819": "disableContract(bool)", +"b5e12715": "updateRankList(address)", +"b5e1fe13": "thirdTokenExchangeRate()", +"b5e221c1": "winnerBidder()", +"b5e292d3": "processHandEnd(bool)", +"b5e2bb10": "reserveBalanceOf(address)", +"b5e3504a": "HumanX1()", +"b5e35248": "stage2NotReached()", +"b5e36417": "transfer(uint256[])", +"b5e4d6ce": "addOrder(bool,uint32,uint128,uint128,uint32,int256)", +"b5e4ece1": "LOG_GasLimitChanged(uint256,uint256)", +"b5e54406": "amountOfItem()", +"b5e574e9": "SetGasSell(uint256)", +"b5e59318": "SLPC_ERC20Token()", +"b5e71687": "getTeam4name(string)", +"b5e73249": "mint(address,uint256,bool,uint32)", +"b5e8077c": "_unpackWarriorId(uint256,uint256)", +"b5e82975": "setMintDone()", +"b5e872e0": "TransferFeeRateExecuted(uint256,address,uint256)", +"b5e8cf02": "burnReward(uint256)", +"b5e91891": "changeStock(address)", +"b5e989c7": "ballotOptions(uint32,uint32)", +"b5ea510a": "YOBTC()", +"b5eaac7f": "pushBlockVerifierAddress(uint256,address)", +"b5eacc01": "investor(address,uint256,uint256)", +"b5ec85f0": "getOldBalanceOf(address)", +"b5ed298a": "proposeOwner(address)", +"b5ed886f": "getExchangeRateInCents()", +"b5ee6f3d": "isVotingPhaseOver()", +"b5eeee6e": "cleanSeedUp(address)", +"b5ef06d0": "changeDeveloperETHDestinationAddress(address)", +"b5ef0ab1": "openDispute(bytes32,address)", +"b5ef649d": "GetChipUsedNum(uint32)", +"b5f09a39": "lockupDate()", +"b5f0f41b": "allowedTransferTo(address)", +"b5f12736": "CustomToken(uint256,string,string,uint256)", +"b5f16939": "saleRevenue()", +"b5f16e48": "setShareholder(address,bool)", +"b5f187b9": "changeFundWallet1(address)", +"b5f2054b": "getWinningsBalance(address)", +"b5f228d7": "LiquidityNetworkToken()", +"b5f26055": "restrictedStockSendTimeOf(address)", +"b5f3484d": "PaymentStatusTimeStamp(address)", +"b5f3e71a": "addAddressToAdminlist(address)", +"b5f45edf": "marketPoohs()", +"b5f50ef3": "claim_prize()", +"b5f529cf": "orderNotAccepted()", +"b5f5962a": "CALL_GAS_CEILING(uint256)", +"b5f59a92": "LUV_Crowdsale()", +"b5f5d582": "TPortToken()", +"b5f6b1f6": "setBonusThreshold(uint256)", +"b5f72d88": "beginProjectRound(string,uint256,uint256)", +"b5f78d11": "purchase(bytes8)", +"b5f7f636": "totalTokenSold()", +"b5f918ff": "roundOneAmount()", +"b5f9371a": "writerAccountSupply()", +"b5f9b1c2": "Bonds(uint32)", +"b5f9ca19": "doesPaymentExist(address,address)", +"b5fa2044": "SetPatentProperties(uint256,uint256)", +"b5fa77bd": "SetAddress(string,address)", +"b5fb19ed": "addressEccles()", +"b5fbc49f": "isAreaEnabled(string)", +"b5fcfbcc": "_getProviderAdmin(uint256)", +"b5fd76bb": "AddLocation(string)", +"b5fdeb23": "getMsg()", +"b5fe79db": "getInfoLevels()", +"b5fea522": "putBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"b5fecc30": "stockSupply(uint256)", +"b5ffa082": "StorageUpdated(address)", +"b6010fcd": "getItem(string)", +"b6013cef": "finalize(uint256,uint256)", +"b6015204": "receiver2()", +"b601818b": "newOwner(string)", +"b601e850": "loanMatured(address)", +"b6027026": "AOK()", +"b602a917": "changeTransferStats(bool)", +"b6030d35": "nProposals(uint256)", +"b6033daf": "getMintingPowerByAddress(address)", +"b6034964": "_endContestIfNeeded(address,uint256)", +"b6037759": "setStudentNumber(uint256)", +"b603cd80": "killMe()", +"b604a86e": "ratePublicSaleStage()", +"b604ad72": "create(string,string,uint8,uint256,address)", +"b604ed1b": "withdrawByGid(uint256)", +"b6055167": "receiveExternalProfits()", +"b6057719": "setMinAuditStake(uint256)", +"b6062b5b": "ICO_TOKENS()", +"b6069742": "propertyLatLongOf(uint256)", +"b607068c": "getMyDividendRate()", +"b60710c0": "LogWithdrew(address,uint256)", +"b60761c4": "Internet(string,string)", +"b607ea45": "claimTilesForNewUser(bytes32,bytes,bytes32,bytes32,uint16[],address)", +"b60868be": "getFishAtBase(uint256)", +"b608c938": "releaseNextShares(uint256)", +"b6096ce9": "EloTest()", +"b609d0e6": "lastOracleUpdate()", +"b60a7405": "_addOwner_(address)", +"b60a82e0": "addSponsorship(address,uint256,uint256)", +"b60ad98d": "Board(address,bytes32)", +"b60afaa4": "distributeLCWP(address[],uint256,uint256)", +"b60b3c59": "otcPurchaseAndEscrow(uint256,address)", +"b60b7084": "builtOn()", +"b60b9fcb": "joinGame(uint256,uint256)", +"b60b9ff7": "Shopdex()", +"b60cc68b": "MIN_ICO_SLOGN_COLLECTED()", +"b60cee3c": "countAllSmartSharingContract()", +"b60d4288": "fund()", +"b60e00b9": "disableBets()", +"b60e2333": "joinTeam(uint256,address,uint256,uint256)", +"b60e6bc0": "tokenIdToApprovedRecipient(uint256)", +"b60e72cc": "log(string,uint256)", +"b60eb800": "addressSCEscrow()", +"b60f54f4": "SortingCoins()", +"b60f5b91": "isPreICO()", +"b60ffa9c": "setDistributeAgent(address)", +"b61012a9": "preICOparticipated(address)", +"b610c75e": "incrementTimestamp(uint256)", +"b611d649": "GteChainERC20()", +"b61241ed": "allocateTokens(address,uint256,address)", +"b612ac29": "BONUS_15_DAYS()", +"b61334b1": "setPayoutsWallet(address)", +"b6136dca": "alt()", +"b61386fb": "registerHandle(string)", +"b6139992": "issue(address,address,uint256)", +"b613df16": "_finishBet(bool,address)", +"b614213d": "maxPriceInWeiFromUser()", +"b615243a": "getExtraTokens(address)", +"b6172704": "isConfirmedStakeholder(uint256)", +"b61727ed": "_transferTo(address,address,uint256)", +"b6176a33": "addStakeholderTransaction(address,bool)", +"b617a4fd": "getClientCategory()", +"b617cf42": "removeExchange(address,uint256)", +"b618214a": "enableService(address)", +"b618387a": "registerBuyer(string,string)", +"b618cbba": "EvLoginfo(string,string)", +"b618d9a4": "checkStatus(address,address,uint256)", +"b6195134": "changeAdminToo(address)", +"b61992e7": "setPricePerBlockInWei(uint256)", +"b61a98cb": "updateMarriageLicenceImageIPFShash(string)", +"b61c0503": "fireEventLog1()", +"b61cb058": "setAvatarFee(uint256)", +"b61cbcd3": "nextGenome()", +"b61d27f6": "execute(address,uint256,bytes)", +"b61d4511": "maxPreIcoTokens()", +"b61daaee": "tokenBase()", +"b61e96a5": "requester()", +"b61f16e3": "getEarningsPool()", +"b61f36f7": "calculateWdxFee(uint256,uint256,uint256)", +"b61fa7c0": "doAirdrop2(address,address[],uint256)", +"b6206e67": "unitBattlePLATCost(uint256)", +"b6213490": "initialDrop()", +"b6215091": "Test2Token()", +"b621bd15": "SALES_END()", +"b622ab4a": "buyWithFunction(bytes4)", +"b6230a74": "icoStatusUpdated(address,string)", +"b623f5e5": "checkSetCosignerAddress(address)", +"b62418a1": "decrementOpenInterest(uint256)", +"b624fc54": "rafEnd()", +"b6253539": "needsInitialization()", +"b62596a2": "fundStorageVaultAddr()", +"b625dd87": "getUpdateTAOContentStateSignatureAddress(address,bytes32,address,bytes32,uint8,bytes32,bytes32)", +"b6261d0a": "acceptOffer(address)", +"b6266248": "refunded(uint32)", +"b626913f": "buy_block()", +"b627cf3b": "welcome()", +"b627ff04": "Sheep(string,string)", +"b6282d0d": "angelOnBattleboards(uint64)", +"b628672b": "setPreSaleHalt(bool)", +"b6288553": "decim()", +"b6294bde": "AdminGetFee()", +"b629d741": "transferUnownedPlanet(address,uint256)", +"b62c0b41": "MintByBTC(uint8,address,uint256)", +"b62c208f": "CryptoQuantumTradingFund()", +"b62c3a4f": "FinastraToken()", +"b62d4301": "testingSelfDestruct()", +"b62d4ce1": "canLayEgg(uint64,uint32,uint32)", +"b62eac16": "CrowdsaleProxy(address)", +"b62f0a6b": "YouTubemasterReq()", +"b62fc7c0": "buy2(address[],address[],uint256[],bytes,bytes)", +"b63005ec": "withdrawJuror()", +"b630230a": "MIN_CROWSALE_TIME()", +"b6304c2a": "KOINCONEKT()", +"b6307f0e": "nLuckyVoters()", +"b630aa48": "tokensSentPresale()", +"b630d706": "thisisfine(uint256)", +"b631c8e8": "_generateCastleSale(uint256,uint256,uint256,uint256)", +"b632d2e0": "SingularityTest20()", +"b633620c": "getTimestamp(uint256)", +"b6339418": "storeNumber(uint256)", +"b633b2ab": "getNextRoundTimestamp()", +"b633d272": "emitWorkResumed(uint256,uint256)", +"b633e4cd": "claimBalance(address)", +"b63423a3": "testCheckoutCart()", +"b63426b3": "Oxygen()", +"b634fc77": "FathomToken(address,address,uint256,address)", +"b6356251": "callThisContractBalance()", +"b63569c3": "developer_address_for_C(address)", +"b635a52d": "disconnectOrderPrice(address,address,uint256)", +"b635ba5f": "getEthValueAmount()", +"b6363cf2": "isOperator(address,address)", +"b63688d3": "setValidationOpen(uint256)", +"b637b269": "maximumValueDuringGuaranteedPeriod()", +"b637b7c4": "BZToken(uint256,string,string)", +"b638f72a": "_preICOSale(address,uint256)", +"b6397a42": "lotteryGiveHunt()", +"b639c9ec": "burnWarrior(uint256,address)", +"b63a35bf": "CTX_Cap()", +"b63a61d3": "auther_user()", +"b63adb3a": "preico(uint256,address,uint256,uint256)", +"b63bb5c6": "SNToken(uint256,string,string)", +"b63c2ac4": "setPowerContract(address)", +"b63c57f1": "buyForBitcoin(address,uint256)", +"b63ca981": "setHKGPrice(uint256)", +"b63cf3ca": "BitcoinDiamond()", +"b63deb24": "setSendProfitsReward(uint256)", +"b63df2a0": "approveControllerContractMigration()", +"b63e0cd8": "start(uint32)", +"b63e93dc": "ownerClawback()", +"b63ed405": "getWeiBalance()", +"b63f0d20": "newcheckToken()", +"b642c768": "_distributeTeamToken(uint256)", +"b642d58f": "INIT_DATE()", +"b6435f00": "getUsersAwaitingForTokensTop150(bool)", +"b6438092": "ManifestoCount()", +"b643f2c9": "stopDefrost()", +"b644ee41": "PRESALE_END_DATE()", +"b6469620": "getPersiansBattlePoints()", +"b64698cb": "_resolveAquarium(uint256)", +"b646c194": "addApprover(address)", +"b647990a": "countVotes()", +"b6481a92": "GotingToken()", +"b6496c6a": "addressLUTSize()", +"b64a097e": "info(bytes32)", +"b64afbe5": "participate(address,uint256)", +"b64b09d5": "invokeFallback(address)", +"b64bbd9e": "Finalizable()", +"b64c154a": "Klassicoin()", +"b64c1e7e": "claimForDeposit(address,address)", +"b64c4905": "sellVolumesCurrent(address,address)", +"b64c9326": "projectoperation_beneficiary()", +"b64d44f1": "TeamLockingPeriod12Months()", +"b64dc853": "onCompensated(address,uint256)", +"b64e2fc4": "getIncludes(uint256)", +"b64e8ad8": "addAllocationPartTwo(uint256)", +"b64eecb1": "transactionRequestCore()", +"b64f3cac": "getDSPRegistry()", +"b64ff429": "consent(bytes32[])", +"b64ff868": "getAdvertisers(bytes32,uint256)", +"b650048b": "unpausePlayerContracts(uint256,uint256)", +"b6506f25": "setLLV_edit_20(string)", +"b6508067": "lastTotalSupply()", +"b6509c12": "Ethereum_twelve_bagger()", +"b650bbef": "safetyInvariantCheck(uint256)", +"b65177ee": "ERC827Receiver()", +"b651cbaf": "add_level(address,bytes)", +"b652c822": "transferPosition(bytes32,address)", +"b652dc2f": "SOFT_CAP()", +"b65412b5": "refundPayment()", +"b65418f5": "raisedIcoValue()", +"b6549f75": "revoke()", +"b654bdb0": "HIBA()", +"b655078a": "getPlayerWager(uint256)", +"b655d0c4": "getBaseRate()", +"b655e138": "sliceAddress(bytes,uint256)", +"b655f822": "Ballot()", +"b655fda2": "updateUserFullName(address,bytes32)", +"b656850a": "_getStakingEpoch()", +"b656e9f4": "isInTestMode()", +"b6576bdf": "getValue(bytes)", +"b657ae63": "eSendTokens(address,uint256)", +"b657c996": "control(address)", +"b6581516": "crossForkDistribution()", +"b6588ffd": "del()", +"b65a1350": "rateLastWeek()", +"b65a34f5": "CeffylToken()", +"b65ae769": "WithdrawSpecialToken(address,uint256)", +"b65b3f80": "exchangeAndSpend(address,uint256,address)", +"b65b4c9a": "sponsoredBonusMax()", +"b65b99a3": "_verifyDate(string,uint256)", +"b65bce8b": "ContractDisabledEvent(uint256)", +"b65be60d": "_updateLots(uint256)", +"b65c2611": "setUnfreezeTimestamp(uint256)", +"b65c2b40": "incrementLastTokenId()", +"b65c3a7f": "calcAmountAt(uint256,uint256,uint256)", +"b65cb801": "SnailToken(uint256,string,uint8,string)", +"b65d0807": "Carpio()", +"b65dc843": "crowdsaleMintingCap()", +"b65ddf2b": "addTipForDeveloper(uint256)", +"b65e1ab8": "setGoldmintFeeAccount(string)", +"b65f3bb5": "executeOffset(address,uint256,address,uint256)", +"b65f90e3": "split(uint8,bytes6,uint8)", +"b65ff419": "deleteNick()", +"b6607cc5": "AML_THRESHOLD()", +"b6608467": "updateShares(uint256)", +"b660d77c": "switchMPO(address,address)", +"b6615acc": "_isAllowed(address,uint256)", +"b661f55d": "saleTokensHaveBeenMinted()", +"b6622c0f": "updateDonor(address)", +"b6629d98": "placeBetEth(bytes)", +"b6629e20": "purchaseWithEth(uint256)", +"b662a73c": "freezeUpgrade()", +"b662dc9b": "OWNER_SUPPLY()", +"b662ef9c": "InsuranceMasterContract()", +"b6635be6": "setupComplete()", +"b663dc0a": "ONE_QUINTILLION()", +"b6644080": "ADMIN_GET_USD(uint256)", +"b66578dc": "nextSeedHashB()", +"b6660af4": "schelling(address,address,bool)", +"b667486d": "BetClosedNoWinningTeam(address,uint256)", +"b6674935": "minPot()", +"b66846fc": "offerToSell(uint256,uint256)", +"b668efe7": "PI_EDIT_2()", +"b6693f80": "phase_2_remaining_tokens()", +"b66a0e5d": "startSale()", +"b66a261c": "setSpread(uint256)", +"b66a323c": "claimThrone(string)", +"b66a94ef": "erc20ECHT(uint8)", +"b66aae65": "removeHoldByAddress(address)", +"b66afea3": "getOrCreateFeeWindowByTimestamp(uint256)", +"b66ce7cc": "Ignite()", +"b66d887a": "setSTGContractAddress(address)", +"b66dbdc5": "totalSupplyHistoryLength()", +"b66dd4b2": "lockFromSelf(uint256,string)", +"b66deb80": "removeEntry(address)", +"b66e68f2": "testFirst(bytes)", +"b66e7524": "getReportingStartTime()", +"b66f39ad": "withdrawAvailableReward(bytes32)", +"b66f7a8b": "isEnded(uint256)", +"b6700930": "removeSet(bytes32)", +"b670a4b1": "unsoldTokens()", +"b670a910": "frontWindow()", +"b6712a4f": "gatFoundDeposit()", +"b6721bc4": "setMinPaymentForAnswer(uint256)", +"b6725bcf": "bitswift()", +"b672b4d4": "testTransferToken()", +"b672cf50": "balanceOf(uint128)", +"b6738bfb": "presalePiStart()", +"b673a75c": "crowdsaleAddr()", +"b673ddb7": "hasAirDropHero(uint16,address)", +"b674e749": "mock_contains(address,address)", +"b675271e": "contributeForDcorpMember(address)", +"b6755038": "_setPotValue(uint256,uint256)", +"b6757b50": "RocketPoolToken()", +"b67590aa": "batchTrade(address[11][],uint256[11][],uint8[2][],bytes32[2][],bytes32[2][])", +"b6761717": "pullEtherFromContract()", +"b67719fc": "WithdrawFunds(address,uint256,address)", +"b6791322": "createERC20(uint256,string,uint8,string)", +"b6791ad4": "getChain(uint256)", +"b67a77dd": "ART1(address)", +"b67aa257": "purchasePop(uint256)", +"b67b1a4d": "withdrawEtherOnlyOwner()", +"b67b60c7": "nextPrime(uint256)", +"b67b7163": "approve(string)", +"b67ba1b5": "killWallet()", +"b67c2893": "VitalLogging()", +"b67c838f": "Total_Paid_Out()", +"b67cb359": "feed1(uint256)", +"b67d4111": "getItemUri(uint256)", +"b67d50b5": "referrerBalanceOf(bytes32)", +"b67d77c5": "sub(uint256,uint256)", +"b67d8c69": "order_counter()", +"b67ddf20": "BlockICOdatetime()", +"b67e2064": "injectEtherFromIco()", +"b67e5b3b": "validPurchaseBonus(uint256)", +"b67f4eff": "sendTo(address,uint256,uint256)", +"b67f8b6d": "Master()", +"b67fabdf": "scheduleTransaction(address,uint256,uint256,bytes)", +"b68035a7": "COMMISSION_DIVIDER()", +"b6813b1c": "setcoe(uint256,uint256)", +"b6816590": "previousFounders(uint256)", +"b681f9f6": "resumeContribution()", +"b6823a66": "tournamentRewards()", +"b682c019": "pieceWanted()", +"b682da3e": "feesData()", +"b682ea1b": "_figthEnemy(address)", +"b6834572": "EOS()", +"b684101d": "emitExecuted(address,uint256,uint256,uint256)", +"b684ccad": "getDisputesToSolve()", +"b6854f96": "freezeToken(uint256)", +"b685afd0": "getBlockVerifierAddress(uint256,uint256)", +"b6868a69": "theFunction()", +"b686a635": "PossContract()", +"b686c983": "cancelLoanRequestAtIndexByBorrower(uint256)", +"b686d8b4": "holdingTaxInterval()", +"b686e44c": "SHA256ofArtwork()", +"b688524f": "_isCeo(address)", +"b688578c": "STAGE_3_START()", +"b6889e48": "globalChanceNo()", +"b688a363": "join()", +"b6893f7d": "DataContacts(address,address,address,address,address)", +"b6898845": "RPESALE_TOKEN_SUPPLY_LIMIT()", +"b6898d6c": "addVowInfo(bytes32,string,string,string)", +"b689ca61": "sellsIntermediateGoodWithDepletion(address,uint256,string,uint256)", +"b689d5ac": "has()", +"b689d850": "FederatedOracleBytes8(uint8,uint8)", +"b68a06ba": "transfer_with_extra_gas(address,uint256)", +"b68c6ae3": "mtcLastDay()", +"b68cc035": "bonusLimit(uint256)", +"b68cf49f": "roundResolved()", +"b68d1809": "getDomain()", +"b68d1d4d": "addressInArray(address)", +"b68e15d6": "freezedAccounts(address)", +"b68e21ac": "FinishLottery()", +"b68e7f6e": "testCastVote()", +"b68e8552": "setRegionOwner(uint16,address,uint256)", +"b68e8760": "setBn(bytes32,bytes32,string)", +"b68ed11f": "preSaleSoldTokens()", +"b69065d6": "DevelopeoERC20(uint256,string,uint8,string,bool,bool)", +"b69147f2": "monthlyMinting()", +"b6926b52": "RaffleDraw()", +"b692c89d": "getRaised()", +"b6932ce7": "solicitaPagamento()", +"b694dbb5": "fromBytesToBytes32(bytes)", +"b695ecfd": "HonestHeart()", +"b696a6ad": "issue(uint256,address)", +"b6972146": "mul(int128,int128)", +"b6974d87": "cancelVoteForCashBack()", +"b6975ddb": "becomeSnakemaster()", +"b697fc93": "POT_DRAIN_TIME()", +"b6982c7f": "setup_race(uint256,uint256)", +"b6984002": "EQU(uint256,string,string)", +"b6990ee1": "getPollWinner(uint256)", +"b6992247": "getStakeholders()", +"b69924c3": "GetNextWithFunds(uint256,uint256)", +"b6994dc0": "RomanLanskoj()", +"b69a375d": "callback(uint256,string)", +"b69a8107": "setSkcAdderss(address)", +"b69b5611": "setOwnership(uint256,address,address)", +"b69ba46d": "publishMetaData(bytes32,bytes32,bytes1)", +"b69c0896": "BaseScheduler(address,address,uint256)", +"b69c2115": "approveRequest(bytes32,uint256)", +"b69e7d70": "random(uint256,uint256,address,uint256)", +"b69e9b1d": "getStaticElementAt(uint256)", +"b69ea1e9": "WineSpiritCoin()", +"b69ec629": "setBpToken(address)", +"b69ee531": "GBNC(string,string,uint256,uint8)", +"b69ef8a8": "balance()", +"b69f5ada": "totalUserProfit()", +"b69f917d": "addCosToGame(uint256,uint256,string)", +"b69fae22": "hashTransfer(address,address,bytes,uint256)", +"b6a0a119": "countDestinations()", +"b6a12f63": "setTokenMarketMaker(address,address,address,address)", +"b6a1cb2b": "setMinReward(uint256)", +"b6a2b110": "SOCXSentToETH()", +"b6a324e0": "fundMe()", +"b6a46b3b": "create(string)", +"b6a48c2a": "abcLottoController()", +"b6a499ab": "_computePVPWarriorAura(uint256,uint256)", +"b6a4a0e9": "GogaTokens()", +"b6a5091a": "HuanHuiToken()", +"b6a59176": "getUsedCoreSupply()", +"b6a5d7de": "authorize(address)", +"b6a65665": "getGameData(uint256)", +"b6a79409": "necropolisContract()", +"b6a7b42c": "getMyTomatoes()", +"b6a8933b": "EXCHANGE_COMMISSION()", +"b6a96e45": "BuyCarCompleted(address,uint256)", +"b6a9ed31": "sellAnts()", +"b6abd4e7": "transfer_close()", +"b6ac24df": "updatePatchTree(bytes32)", +"b6ac4984": "tokenTransfersEnabled()", +"b6ac642a": "setWithdrawFee(uint256)", +"b6acabc1": "crowdFunding()", +"b6acc48c": "ICO_TOKEN_CAP()", +"b6acd931": "payDAPP(address,uint256,address)", +"b6ad4784": "resignTranscoder(address)", +"b6ad57d6": "paySmartContract(bytes32,address[],uint256[],bytes32)", +"b6ad8934": "renounceFundkeeper()", +"b6add0f4": "initPrice()", +"b6ade100": "notifylvlClients(string,string)", +"b6ae90fb": "FuturOwner()", +"b6aeb4a2": "erc20VARA(uint8)", +"b6aeec7b": "CHATTER()", +"b6af3643": "setWithdrawalTime(uint256)", +"b6afd2ca": "listMembers()", +"b6b0eaca": "SMILEHEART()", +"b6b0f77b": "idToString(bytes32)", +"b6b12e61": "getRoundDetails(uint256)", +"b6b18eff": "founderWithdrawablePhase1()", +"b6b1e359": "verifyIt(bool)", +"b6b2210c": "lockSell(bool)", +"b6b32c07": "presalePurchase(address[],address)", +"b6b35272": "isWhitelisted(address,address)", +"b6b3d325": "view40()", +"b6b425c7": "doSingleMigration(uint256)", +"b6b55f25": "deposit(uint256)", +"b6b57c9e": "setWhiteListContractAddress(address)", +"b6b57ebd": "finalizeWorkOrder(address,string,string,string)", +"b6b7032e": "rentalAccumulatedPrice()", +"b6b7e7eb": "toRLPItem(bytes)", +"b6b7e84d": "SGTExchangerMock(address,address,address)", +"b6b8c3cd": "m_categoriesCreator()", +"b6b9d57e": "propertyIndexToData(uint256)", +"b6ba1a98": "NIMFA_PER_ETH_SALE()", +"b6ba600a": "lockGNO(uint256)", +"b6baffe3": "getDifficulty()", +"b6bb38dc": "approveCetification(address)", +"b6bb3ade": "multiCall(address[],address,uint256[])", +"b6bba846": "sellTokensForDash(string,address,uint256,uint256)", +"b6bbafa2": "CrowdsaleStoneToken()", +"b6bbcf5b": "benchmarkRandom()", +"b6bcf354": "getCensuring(uint16)", +"b6bd387a": "lastRegionId()", +"b6bdedca": "MagnaChain()", +"b6be128a": "getPhoto(uint256)", +"b6beb400": "NuggetsToken()", +"b6bf1b3a": "mintForDisputeCrowdsourcer(uint256)", +"b6bf3bb3": "setBlackListERC20(address)", +"b6bf7318": "clz64(uint64)", +"b6c05255": "burnOwner(address,uint256)", +"b6c054ce": "restake(int256)", +"b6c0eca8": "LogRefund(address,uint256)", +"b6c1cb03": "transferFromWithComment(address,address,uint256,string)", +"b6c1eaad": "refundStarted()", +"b6c238b5": "starts(address)", +"b6c279ee": "setInputSize(uint256,uint256)", +"b6c32d71": "startStandardSale()", +"b6c37e58": "balancesRiskcoins(address)", +"b6c3987d": "validateHarCap(uint256)", +"b6c3e8cc": "increaseApprovalInternal(address,uint256)", +"b6c44bd1": "ZCash()", +"b6c47da1": "setSuperman(address)", +"b6c4da52": "addVestingRule(address,address,uint256,uint256)", +"b6c58236": "getOwner(uint32,int256)", +"b6c6ecd3": "getDial3Type(uint8)", +"b6c78f26": "HellaBank()", +"b6c88977": "finalizeCrowdfund()", +"b6c9f707": "ContractCreation(address,address)", +"b6ca878c": "addCard(bytes32,address,uint256,uint256,uint256,uint256)", +"b6ca8996": "CentrallyIssuedToken(address,string,string,uint256,uint256,uint256)", +"b6cb3777": "collectAnts(address)", +"b6cb405b": "getContractor()", +"b6cb5d72": "NFToken()", +"b6cb7f41": "fundsVault()", +"b6cba7eb": "recoverERC20Tokens(address,uint256)", +"b6ccc6ba": "signVer(address,bytes32,uint256,uint8,bytes32,bytes32)", +"b6cce5e2": "sponsor(uint256)", +"b6cd05e5": "withdrawAllTokensOnContract(uint256)", +"b6cd0b88": "setPersonalHash(bytes)", +"b6cdc815": "maixiaohetoken(uint256,string,uint8,string)", +"b6ce5581": "oraclize_query(string,string[5],uint256)", +"b6ceb489": "OWN_burn(uint256)", +"b6cf146c": "proposeMint(uint256)", +"b6cf3579": "PROVISIONING_supply()", +"b6d1d3d1": "setAirSender(address)", +"b6d1fbf9": "setXPERContractAddress(address)", +"b6d2a9b9": "SetupToken(string,string,uint256)", +"b6d31d97": "addToPrivateSaleWhitelist(address[])", +"b6d33511": "AKTestEther(address,address,address,uint256,uint256,uint256)", +"b6d34f12": "Emission(uint256,uint256,uint256)", +"b6d3faa3": "billingAmount()", +"b6d42ec3": "setApTime(uint256)", +"b6d5e8cd": "mintUniqueTokenTo(address,uint256)", +"b6d6164a": "reject(address,uint256,bytes,uint256)", +"b6d67a0b": "hasPlayerWon(uint8,uint256,bytes32,bytes32)", +"b6d6806c": "createEscrow(address,uint256,address)", +"b6d703ae": "confirmTotalTokenThreshold()", +"b6d7855a": "TokenName()", +"b6d7dbb2": "SAtomX()", +"b6d827bb": "WhitelisterChange(address,bool)", +"b6d8f59d": "WAN_TOTAL_SUPPLY()", +"b6d9721c": "getMerkleRootAndUnlockedAmount(bytes)", +"b6d9ef60": "setOracleFee(uint256)", +"b6dadbdf": "_createPart(uint8[4],address)", +"b6dadeb4": "getCardInsurance(uint256)", +"b6daea6c": "addAgency(address)", +"b6db75a0": "isAdmin()", +"b6dc1124": "private_setPauseState(bool)", +"b6dc572f": "addSubscription(address,bytes32,uint256)", +"b6dc8e25": "exchangedAmountToReceive(uint256)", +"b6ddcd14": "icoAccount()", +"b6ded5c1": "windowPeriodEnd()", +"b6df4906": "safeOwnerOf(uint256)", +"b6e087d6": "GunChain()", +"b6e119ab": "balanceOfEnvelopes()", +"b6e390ae": "First_pay_bountymanager()", +"b6e3943a": "AK4EtherDelta(address,address,address,uint256,uint256,uint256)", +"b6e3ca3c": "UpdatedExchangeRate(uint256)", +"b6e3cc1a": "authorCount()", +"b6e456bb": "getUInt()", +"b6e49fd9": "LocalEthereumEscrows()", +"b6e54bdf": "majority()", +"b6e76873": "getAction(uint256)", +"b6e7d90b": "delegatePass(bytes32,address)", +"b6e86e13": "createProxyImpl(address,bytes)", +"b6e8bac7": "anailNathrachOrthaBhaisIsBeathaDoChealDeanaimh(address[],uint256[])", +"b6e99235": "drawNumbers(uint256)", +"b6e9c2ac": "getUserBalance(bytes32)", +"b6ea62de": "kycApprove(address)", +"b6eb15c7": "gvOptionToken10()", +"b6eb7dae": "freedWosPoolToWosSystem()", +"b6ecd81c": "Vets()", +"b6ed0632": "cancelOrder(uint256,uint256)", +"b6ed3308": "setPriceOfEther(uint256,string)", +"b6ed9f15": "PFOffer(address,address,bytes,uint256,uint256,uint128)", +"b6eda884": "ads()", +"b6edc68f": "changeMicroPay(address)", +"b6edd743": "transferTokensTo(address)", +"b6ee48aa": "setContractSK(string,string)", +"b6ee8120": "realizedETH(address)", +"b6eeb6bb": "PREPURCHASER()", +"b6ef4454": "funderWithdraw()", +"b6ef78c2": "cancelCounterStack(bytes32,bytes32)", +"b6f020b2": "checkExistsItems(string)", +"b6f0391b": "setMap(string,string)", +"b6f085c7": "usernames(bytes20)", +"b6f0ecb1": "setAMLWhitelisted(address,bool)", +"b6f1a927": "CPAWallet()", +"b6f250ea": "determineWeights()", +"b6f29d50": "awardSellers()", +"b6f35624": "boughtAmountOf(address)", +"b6f36dcf": "owner3()", +"b6f3c071": "CyCo()", +"b6f3d256": "lowestBid()", +"b6f46b61": "claimBeercoins()", +"b6f46d4c": "RFQ(string,uint256,string)", +"b6f478de": "lifeVestingStage()", +"b6f4df34": "totalSupplyEdition(uint256)", +"b6f4f96c": "fundingThreshold()", +"b6f50c29": "setICO(address)", +"b6f529d6": "paused_2()", +"b6f5dda5": "getAllInvestmentsCollected()", +"b6f5e0e6": "showProfileDetails()", +"b6f681ce": "ChangeOwner(address,address,uint256)", +"b6f687a2": "rewardKoth()", +"b6f6e8ae": "getMatches(uint256,bytes3)", +"b6f73bb9": "devuelveRoles(bytes32)", +"b6f7600d": "GetAllConsentData()", +"b6f7bfcd": "ADVISORS_ADDR()", +"b6f84764": "getRemainingUint(uint8,bytes)", +"b6f921ad": "check(string)", +"b6f98e53": "needsAllowancePayment()", +"b6f9fda5": "timeoutResolve(bytes32,uint256)", +"b6fac235": "callStcWithBtc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"b6fae6c7": "approveContract(bytes32)", +"b6fb4a14": "createNewSystem(string,uint8,uint8)", +"b6fb7e46": "endingBalance()", +"b6fb9f25": "redeemWithdrawalCertificate(string,uint256,address,bytes)", +"b6fc1043": "make(bool,uint8,uint256,uint256,bytes16,uint256,uint256)", +"b6fc14a6": "createNewZMultiSigWallet(address[],uint8)", +"b6fc276a": "preparationPeriodEquipmentTrainingFeeMultiplier()", +"b6fca0df": "sendAirDrops(address)", +"b6fda7ba": "allocateTokenForAdvisor()", +"b6fe87fb": "remoteBettingClose()", +"b6fef44c": "increaseArrivalTime(uint256,uint256)", +"b6ff5087": "notifyDeathCancellation()", +"b7009613": "canCall(address,address,bytes4)", +"b700967b": "modexp(uint256[],uint256,uint256[])", +"b7009c97": "StatPreICO()", +"b700f67a": "settleApproveRequest(bytes,bytes,bool,uint256)", +"b7019063": "EthereumDIDRegistry()", +"b7019744": "payBack(address,uint256)", +"b701dc14": "setBackEndAddress(address)", +"b7020c63": "getSpermlordReq()", +"b7028b1c": "CryptoRideCoin(uint256,string,uint8,string)", +"b702a879": "draw(uint256,address)", +"b703aa3a": "stopForge()", +"b703c75a": "getPresaleNumber()", +"b704b608": "weiToTokens(uint256,uint256)", +"b7056765": "implementsERC165InterfaceNoCache(address,bytes4)", +"b706b764": "HelpCoin()", +"b706f78e": "_mintTokens(int256,address,uint256)", +"b7073d2e": "insertCLNtoMarketMaker(address)", +"b7086f7b": "stopSale(address,uint256)", +"b708aabe": "getrunprize()", +"b70902bc": "debug4()", +"b7090bb5": "www_experty_io()", +"b70949c9": "editContributors(address[],uint256[],bool[],uint256[],uint256[])", +"b7098a32": "Bee()", +"b709df11": "getValue(address,address,address)", +"b70a7545": "GIFT(uint256,string,uint8,string)", +"b70ae49a": "execute_payment(uint256,bytes32)", +"b70b9717": "voitingStartTime()", +"b70c9acf": "stream(bytes32)", +"b70d0b3b": "ownerEdge()", +"b70d30bf": "returnTokens2(address,uint256)", +"b70da7dc": "isKnownCrowdsourcer(address)", +"b70dfb25": "SeleniumRichChain(uint256,string,uint8,string)", +"b70f0058": "_isApprovedBattle()", +"b70f4b13": "crowdfundContract()", +"b70f6ea8": "getDataPoint(uint256,uint256)", +"b70fadb7": "getAddressFromSan(string)", +"b70fbda1": "GoldRegistry()", +"b71051e2": "percentageOf(uint256,uint256)", +"b7107d00": "setSeller(address,address)", +"b710e8fe": "_restartsystem()", +"b711e18a": "_applyRefCredits(address,uint256)", +"b7133fa9": "test(uint256[5])", +"b7134feb": "icoMaxCap()", +"b713ef49": "developer_increase_price(uint256)", +"b714075e": "transferDevBalance(address,uint256)", +"b714e3cc": "GetDynamicRatio(uint256)", +"b71503fc": "FundsDrained(uint256)", +"b7159185": "shortShare()", +"b7160dee": "CVR()", +"b7161cc1": "VitaminTokenNew(uint256,string,string)", +"b71653a8": "setGalleryThreePrice(uint256)", +"b7167359": "contributed1(address)", +"b71698c7": "solutions(uint256)", +"b716e3f2": "addBoard(address,address)", +"b716f404": "raceOut(uint256)", +"b71738f1": "withdrawDthTeller(address)", +"b717cfe6": "CallTest()", +"b717dadf": "getEtherCountFor(address)", +"b7182b95": "getTokenOwner()", +"b719397f": "IsPreICO()", +"b719d032": "predecessor()", +"b719d1d0": "getRegInfo(address)", +"b71a6dd6": "deposit_asset(uint32,uint256)", +"b71ab971": "getPlayerEarning(uint256)", +"b71c47a2": "surrender()", +"b71ce659": "GCA()", +"b71d1a0c": "_setPendingAdmin(address)", +"b71e0120": "limitBranchType()", +"b71e513b": "createGame(string,string,uint16,uint64)", +"b71e9c23": "throws()", +"b71f3cde": "onRefund(uint256,address,uint256)", +"b71f7f1c": "SuperFruit(uint256,string,string)", +"b71f8010": "setContract3(address)", +"b720a274": "_endOfICO()", +"b7213bd4": "readLog(uint256)", +"b72179ff": "viewFirstLotOfContractState()", +"b72218e3": "initialHolder()", +"b722875f": "giveBonus(address,uint256)", +"b722a9ef": "getPreviousShareholder(address)", +"b72314a1": "getGroupDescription(uint256)", +"b7232cd9": "enterBidForStar(uint256)", +"b723b34e": "mintTo(uint256,address)", +"b72413e4": "tokenDiscountPercentage(address)", +"b72481f8": "totalWinnings()", +"b725d84f": "PRICE_10()", +"b725e556": "UserOffers(address)", +"b7266456": "StandardToken()", +"b7268ef4": "rdiv(uint128,uint128)", +"b72703ac": "getPrev(address)", +"b72753d5": "updateItem(uint256,string,uint256,bool)", +"b7279ca6": "enableSweep(uint8[],bytes32[],bytes32[],address)", +"b727b194": "initialIssueMinting()", +"b7288f02": "freezeAccount(bool)", +"b72916ef": "getMsgValueBefore()", +"b7297cf3": "gameSettings()", +"b729d499": "dustPepe(uint256,address)", +"b72a0026": "APPToken()", +"b72a97e6": "updateTeamV(address)", +"b72b5a33": "NewBoardMember(address)", +"b72bedd0": "validation(uint256)", +"b72cacde": "approveByA(uint256,string)", +"b72ceab8": "alwaysRequireCosignature()", +"b72d0be5": "revocables(address)", +"b72e717d": "fromAddress(address)", +"b72f0e06": "LicenseCoin()", +"b72f547d": "startTransferGet()", +"b72f8ebb": "changeFreeBetValue(uint256)", +"b730aaaa": "Counting_CardPoint(uint256)", +"b730ee7f": "Anemoi()", +"b73112e5": "setCountryRank(uint256,string,uint256)", +"b73114b9": "purchaseCenturion(uint256)", +"b7312707": "fromHexChar(uint256)", +"b7317598": "claimI()", +"b7317806": "setEndOfICO(uint256)", +"b731e848": "left93(uint256)", +"b7324f8e": "PresaleClaimed(uint256)", +"b733e6a6": "LaunchContract(address,bool)", +"b73405a9": "roundMoneyDownNicely(uint256)", +"b734cbba": "setIcoDates(uint256,uint256,uint256,uint256,uint256)", +"b7352bee": "usdSeasonAccountPurchased(uint16,address)", +"b736ca82": "initialize(address,address,address,address,address,address,address,uint256,uint256,uint256,uint256)", +"b7375af7": "PresaleUnlimitedStarted(uint256)", +"b737ed1b": "getRandom(bytes32)", +"b737f5bd": "addOldInvestment(address,uint256,uint256)", +"b738169c": "betOnOddEven(bool,bool)", +"b7381a2c": "noteTokens(address,uint256)", +"b7384f6b": "initialOraclizeSettings()", +"b7387e66": "OpenBox(uint256)", +"b7388178": "getIsStoreSet(string)", +"b73974a1": "HIGH()", +"b73a9dbc": "variationCycle()", +"b73afe4f": "relocate()", +"b73b68e5": "lockTokens(address,uint256,bool)", +"b73c6ce9": "withdrawEarnings()", +"b73c71b2": "Test1Coin()", +"b73cb519": "changeIcoCap(uint256)", +"b73ded75": "setParams()", +"b73eb3e9": "decorationAt(address,uint256)", +"b73f02e4": "setActiveHashType(bytes32,bool)", +"b73f1e52": "fourthRelease()", +"b73fe29c": "getPeriodicalAR()", +"b73fe963": "noOfWaves()", +"b73fefe8": "rejectProposalAsHost(uint256)", +"b7403878": "updateLeaders_(address,uint256)", +"b741cb36": "setStageStartTime(bytes32,uint256)", +"b742398b": "trade(address,uint256,bytes,address,uint256,bytes)", +"b743f7b6": "giveEthCharityAddress()", +"b744a850": "getAssetTokenByIndex(uint256)", +"b744d2e6": "WithdrawEther(address)", +"b744d893": "DigiBlackCoin()", +"b7462833": "Blarity(address,uint256,uint256,uint256,address[],uint256[])", +"b7465a19": "setSlackUsersCap(uint256)", +"b746ec9f": "checkTotalPayouts()", +"b74746e7": "CharlieToken()", +"b747e025": "testFailMintNoAuth()", +"b7482509": "deposit(address,string)", +"b7491780": "_calculateNewHeroPower(uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"b7491d65": "BiathlonNode(address,string,string,string)", +"b749b225": "bountyDrop(address[],uint256[])", +"b74a3266": "finalizeTemplate()", +"b74bc710": "LuckyDoubler()", +"b74bd09e": "rndGap_()", +"b74bd72b": "canTransfer(uint32,int256,address)", +"b74bee6a": "Mido()", +"b74c13f1": "storeAttachment(string)", +"b74cf3b6": "setVoterCount(uint256)", +"b74d13a5": "disableCheckArea()", +"b74d4103": "getForwardUpdateFeesTo()", +"b74d8e58": "getKittySkillScore(uint256)", +"b74db274": "VeryToken()", +"b74e20bb": "xCrypt(address,address,address,address)", +"b74e452b": "today()", +"b74e47ac": "getPartsOfOwner(address)", +"b74e825e": "DIVIDEND_FUND_FRAC_BOT()", +"b74f010f": "DreamCoin(uint256,string,string)", +"b74f312e": "changeTotalDistributed(uint256)", +"b74f32f2": "airdrop(address[],uint256,uint256,uint256)", +"b74feb18": "getRoundWinnerPot(uint256)", +"b74ffca7": "bookCab(uint256)", +"b75014c0": "startIcoMainSale()", +"b750948d": "canUserReleaseArtwork(address,address)", +"b750ac85": "LOG_HouseAddressChanged(address,address)", +"b751ecfc": "DomainIO(uint256,uint256)", +"b7526b79": "migrateDungeon(uint256,uint256)", +"b753485f": "currentGen()", +"b7538f3e": "ChangeClient(address)", +"b753a98c": "push(address,uint256)", +"b7540d9f": "freezed()", +"b756919d": "_handleEnergyTopup(address,uint256,uint256)", +"b756feff": "triggerDisposition()", +"b7581c67": "vestingFounderAllocation()", +"b7595d3f": "getBoolField1()", +"b7598cca": "AreaPrice(uint256,uint256,uint256)", +"b759f954": "approve(uint256)", +"b75a0ac6": "setICOToken(address)", +"b75baa18": "w_futureDevelopment()", +"b75c2068": "lockShares()", +"b75c4f80": "getInternalDependencies()", +"b75c7d9e": "updateDealer(string,address,uint256)", +"b75c7dc6": "revoke(bytes32)", +"b75c7e62": "MedsupplyToken()", +"b75d7e50": "getExtrasData()", +"b75ece9c": "startFundingTime()", +"b75f4084": "finishInvesting()", +"b75f9b20": "commissionPCT()", +"b75fdf3a": "liquidityPoolTokens()", +"b760744f": "MytilcoinStorage()", +"b760c979": "TokenGranted(address,uint256)", +"b760e822": "minimumPurchaseInWei()", +"b760faf9": "depositTo(address)", +"b7614de7": "stakedByUser(address)", +"b7618a31": "rvt()", +"b761962c": "sampleMulti(bool,bytes32,int8,bytes4)", +"b761a16b": "JustmakeNewAccountsIssuer()", +"b7629dcb": "investorsAddress()", +"b762e6e8": "mintTimeLocked(address,uint256,uint256)", +"b762fbac": "changeFountainContractAddress(address)", +"b763150d": "registerCustomer(address,address)", +"b763aeed": "sheetcoinToken()", +"b764132e": "CubaLibre()", +"b764311d": "RITToken()", +"b7643c5c": "_computePVPPetAura(uint256)", +"b7645ed4": "changeMaxCapUSD(uint256)", +"b76467c1": "Haltable()", +"b764e273": "failSend()", +"b764e8f5": "read_config()", +"b76564bd": "app()", +"b7656808": "minted(address,uint256)", +"b7656dc5": "transferFromPreSignedHashing(address,address,address,uint256,uint256,uint256)", +"b7663b08": "startICO_w2()", +"b7665613": "isPlaying(address)", +"b7667603": "Goldplatina()", +"b76689a4": "createInviteID(address)", +"b766b562": "setBonusReceived(address,bool)", +"b76803b2": "cgoAddress()", +"b7682a81": "buyGanToken(uint256)", +"b768628f": "publishedWinningScoreThreshold()", +"b7688c8b": "ico_period()", +"b768cd5d": "modifyStartTime(uint256)", +"b768ce60": "getTotalVolumeToken()", +"b7692032": "Facebook()", +"b769e4c5": "LogCancelTemplateProposal(address,address,uint256)", +"b76b37dd": "toLotteryPool(uint256)", +"b76b3e39": "setICObyAddress(address,uint256)", +"b76b4ee2": "ManagerPermissionGrantedEvent(address,string)", +"b76b78fb": "getAllElement()", +"b76bf76b": "distributeTime()", +"b76c2e39": "LQX()", +"b76c3764": "NumberGame()", +"b76c5c9f": "sendAdvisorsBalance(address[],uint256[])", +"b76c8a2c": "SpartaTeamCoin()", +"b76c94e1": "fundsOf(uint256)", +"b76ce26c": "updatesolbuyrate()", +"b76d0edd": "Log1(address,bytes32,uint256,string,string,uint256,bytes1,uint256)", +"b76dfb28": "totalRemainInInventory()", +"b76e1324": "startCreatingAss(string,string,uint256,uint256,uint256)", +"b76e4890": "Tester()", +"b76e5e06": "getBA(bytes32)", +"b7700f33": "getManagerPubkey()", +"b77030a0": "setTau(address)", +"b770391b": "MineAffected(uint256,uint256)", +"b770485f": "specialContract()", +"b770486f": "investmentGuidesRewardsWithdrawn()", +"b770c7ef": "giftPlanet(uint256,uint256,address)", +"b7719ef5": "devWithdrawal(uint256,uint256)", +"b7742856": "mainSaleprice()", +"b774d3d7": "BankOwner_GetDonationsBalance()", +"b775553d": "setDividendCutPercentage(uint256)", +"b775c9ef": "etxAddress()", +"b7760c8f": "transfer(uint256,address)", +"b7764475": "ETHXBT()", +"b776fc15": "addItem(uint256,string,uint256)", +"b777b11e": "setBurnStart(bool)", +"b777cad7": "managerPrimary()", +"b7782455": "unicornAddress()", +"b77825d2": "getIndexOrder2(uint256)", +"b778809b": "initiateContract()", +"b778d4b4": "releaseToday()", +"b778e69e": "getPastWinnerEntries()", +"b7796a43": "getAllInvestmentsWithdrawnBack()", +"b77a284c": "transferAndCallWhitelist(address)", +"b77bf600": "transactionCount()", +"b77cd1c7": "refreshBalance(address)", +"b77d09c9": "gameGifIsOver()", +"b77d1597": "QAcoin()", +"b77d4876": "startTokensSale(address,uint256)", +"b77da4a0": "totalDevCoin()", +"b77e4185": "promotionsAvailable()", +"b77e60dd": "tokensaleSecondsToStart()", +"b77ebcbb": "Country_code(uint16)", +"b77f00b3": "preIcoPhaseCountdown()", +"b77f39fe": "recoverTokens()", +"b77fc549": "withdrawAffiliateCommission()", +"b77ffaf5": "changeInvestNum(uint256)", +"b7808600": "ClaimCrowdsale(uint256)", +"b780a659": "cryptoString()", +"b780ef58": "_transferRobot(address,address,uint256)", +"b7813355": "getTotalCollectedWei()", +"b781ad99": "ALLOC_SALE_CORNERSTONE()", +"b781afa7": "EverhuskCrowdsale(uint256,uint256,uint256,address)", +"b7825cfc": "addTask(bytes32,string)", +"b782fc9b": "getFirstActiveDuel2()", +"b7833cc3": "getWitness(uint256)", +"b783508c": "receiveAuction(address,uint256,uint256,uint256)", +"b78376e9": "addPayer(address)", +"b783969f": "GenkiProjectToken()", +"b783d6c7": "challengeRegistration(bytes32)", +"b7840731": "RedeemOraclize(uint256)", +"b7844170": "getSellUnitsInformations()", +"b7844aff": "NeuroToken()", +"b7845c97": "isPhase(uint256,uint256)", +"b785473c": "satRaised()", +"b786ed91": "isCommit(bytes32)", +"b7870845": "getCalculatedFees()", +"b787b91d": "registerVestingSchedule(address,address,address,uint256,uint256,uint256,uint256)", +"b7886b37": "checkReceivedUser(address)", +"b789321a": "priceRound4()", +"b7897485": "getCurrentBet()", +"b78a80ff": "delayedSetStakes(uint256)", +"b78aa7f4": "challengeChannel(bytes,bytes,bytes)", +"b78ae50a": "getCrystalsByKind(address,uint256)", +"b78b52df": "allocate(address,uint256)", +"b78b6087": "finalizeMigration()", +"b78b7232": "addFeedIn(address,address,int256,uint256,uint256)", +"b78b842d": "kyberNetwork()", +"b78bd4a5": "breakCookie(string)", +"b78be802": "emergency_withdraw(uint256,address)", +"b78be927": "ZYCoin(uint256,string,string)", +"b78c1517": "reservationFund()", +"b78c1853": "deleteOwnPeerReview()", +"b78d27dc": "bond(uint256,address)", +"b78d32cd": "BET()", +"b78da386": "withDrawFunds()", +"b78e4bfd": "jinglesInfo(uint256)", +"b78e5e26": "transferTokensFromBountyAddress(address,uint256)", +"b78f8389": "divideUpReward(uint256)", +"b78f9de7": "Sale()", +"b78fd7bc": "transferRemainingTokensToUserAdoptionPool(uint256)", +"b790301a": "PLN_Omnidollar()", +"b79047cc": "PricePredictionBettingGame(address)", +"b790505d": "set_compenstation(uint256)", +"b790634e": "getDepositRate()", +"b7909898": "allocateInitialBalances(address[],bytes32[],uint256[])", +"b790a77b": "_withdraw(address,uint256)", +"b790c32c": "transferAuditorRecord(address,address)", +"b7915e39": "getAllowedNotaries()", +"b791e8ed": "calcEffectiveOptionsForEmployee(address,uint32)", +"b791f3bc": "migrateAmountBooks(address)", +"b7928b4f": "getReason(uint256)", +"b792d022": "batchCreateSingleSeedAuction(uint8[],uint8[],uint256[],uint256[],uint256[],uint256)", +"b792e6ec": "init(uint256,address)", +"b792f5f6": "ret_luklen()", +"b7930507": "UNLOCKED_TIME()", +"b793233b": "icoEndTimestamp()", +"b7935f0a": "emergencySetDAdmin(bytes32,address)", +"b794004d": "YOU_BET_MINE_DOCUMENT_PATH()", +"b7942d78": "RegReader(address)", +"b79550be": "recoverFunds()", +"b795aab3": "getRemainingCountImpl(uint32)", +"b795dffe": "purchaseKey(bytes32)", +"b796a339": "addRegistryIntoOwnerIndex(address,address)", +"b796c9b8": "Withdrawall(uint256,address[])", +"b7970d80": "rngCallbackGas()", +"b7975d1f": "getMyToad()", +"b797b5ba": "tgeCurrentPartInvestor()", +"b798b129": "finalizeEarlyBirds()", +"b7992c0b": "finalize3()", +"b799ba7e": "CalorieCoin(address,address,uint256)", +"b79a5539": "preTokenSalesCapReached()", +"b79a6231": "Tier_Basic()", +"b79af928": "totalSpentEth(address)", +"b79c5f7f": "IntentionToFund(address,uint256)", +"b79eb3a4": "AlterContactPubkey(address,bytes32,bytes32,bytes32,bytes32)", +"b79ec028": "setLevelup(uint8[4])", +"b7a025f9": "bZxTo0xContract()", +"b7a139bf": "firstRoundPercent()", +"b7a1affa": "DACContract()", +"b7a1c236": "LogChangeIsPayableEnabled(bool)", +"b7a1d003": "SessionClose(uint256,uint256,uint256,uint256,uint256)", +"b7a2cbcc": "lockedTransfers()", +"b7a2d99d": "withdrawAbleEther()", +"b7a2e1f2": "buy(string,string,uint256,address,address,address,address,bytes2)", +"b7a311fd": "TimoNetwork(uint256,string,string)", +"b7a3446c": "oldBalanceOf(address)", +"b7a40f21": "purchasePlanet(uint256)", +"b7a55438": "replaceOperator(address,address)", +"b7a693d7": "MaxSantaRewardPerToken()", +"b7a6b6a7": "AIREP()", +"b7a7612c": "setBtcEthRate(uint256)", +"b7a78911": "testMultitransfer2()", +"b7a8807c": "openingTime()", +"b7a90cf9": "BitAseanToken(uint256,string,uint8,string)", +"b7a9434b": "registerSpawned(uint32,int256)", +"b7a973bd": "setCompte_13(string)", +"b7a97a2b": "isValidChannel(uint256)", +"b7ab4db5": "getValidators()", +"b7ab63e9": "getPollingStation(uint256,uint256)", +"b7ab7ade": "setAllowedContract(address[])", +"b7abf606": "modifyLocality(string)", +"b7ac5d3b": "marketingFundAddress()", +"b7acbd41": "checkSellerGuarantee(address)", +"b7acdca6": "addBet(uint256,address)", +"b7ad2432": "totalWindows()", +"b7adb169": "getPendingUserlists()", +"b7adb974": "lightingTransfer(address,address,address,uint256,uint32,bytes32)", +"b7ae74fd": "FreeCoin(address,uint256,uint256,uint256,uint256,uint256)", +"b7aec6a5": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256)", +"b7aec6b1": "getSpecificEscrowTransaction(address,address,uint256)", +"b7b0422d": "init(uint256)", +"b7b172b3": "cashout(address,uint256)", +"b7b1b93f": "_createPixel(uint32,uint8,uint8,uint8,string)", +"b7b1d7f7": "isCrowdSaleActive()", +"b7b1e3cc": "getPropertyData(uint16,uint256,uint256)", +"b7b2a009": "getCardDetails(uint8)", +"b7b2bbc0": "WinnerSet(uint256,uint256,address)", +"b7b2c7d6": "batchFillOrders(address[5][],uint256[6][],uint256[],bool,uint8[],bytes32[],bytes32[])", +"b7b2e501": "makeInvisible(uint128)", +"b7b33765": "calculationOfPayment()", +"b7b3a56e": "overflow_lower()", +"b7b3b89a": "lockedVault()", +"b7b3ea98": "endContrib()", +"b7b4557c": "LogMigrationInitiated(address,address,address)", +"b7b47e31": "batchActivenessUpgrade(uint256[],uint256[])", +"b7b48388": "addThing(bytes32,bytes32,string,string)", +"b7b4ceb3": "CPCEIco()", +"b7b4fe13": "setWhitelistDemoc(address,bool)", +"b7b5709a": "freezeFrom(address,bool)", +"b7b57c3f": "getPartnerMessage(address,address,uint256)", +"b7b5e811": "getProjectBonus()", +"b7b6700b": "viewPlayerPayout(address)", +"b7b6e978": "unlockForOrder(address,uint256)", +"b7b747c5": "testDepositUsingDeployedContract()", +"b7b8533a": "expireAfter()", +"b7b96723": "right7(uint256)", +"b7b9dead": "MyAdvancedToken()", +"b7ba0ba0": "showAssetEvent(bytes32,uint256)", +"b7ba6050": "currentTokenOfferingRaised()", +"b7bae9b7": "exists(bytes,bytes)", +"b7bb018d": "unlockingBlock()", +"b7bb208b": "JobitToken()", +"b7bc2c84": "isFueled()", +"b7bc7653": "set_pauseDET(bool)", +"b7bc7cb8": "fixedExp(uint256)", +"b7bda68f": "taxAddress()", +"b7bdc7ef": "setDomainPrice(bytes32,uint256)", +"b7bedaf1": "setPreAddr(address)", +"b7bf356a": "taskExists(bytes32)", +"b7c03170": "CurrentState()", +"b7c14d7a": "payOutJackpot()", +"b7c1a119": "percent3_33()", +"b7c251c3": "getRedeemedPeriods(bytes32,address,uint256)", +"b7c2ccb6": "getNodalblockTimestamp(string)", +"b7c3236f": "getEtherKey(uint256)", +"b7c38d02": "testControlCreateSameIpfsHashAndNonce()", +"b7c42cf0": "claimTokensICO(address)", +"b7c4b775": "setMaxGas(uint256,uint256)", +"b7c4bf17": "readyUp()", +"b7c52820": "addSentTrade(address,bytes32)", +"b7c54c6f": "getHKGOwned()", +"b7c55259": "endGame(uint256,address,address,address)", +"b7c5b181": "delegatedTransfer(address,address,uint256,string,uint256,bytes32,bytes,uint256)", +"b7c65d1a": "retrieve_domain(address,uint256)", +"b7c70c34": "seratioCoin()", +"b7c74cf6": "_calculatePayment(uint8)", +"b7c763b5": "getString(uint256)", +"b7c7986f": "getMarket_CommunitUnusedTokens()", +"b7c7ecbe": "setTitulaire_Compte_6(uint256)", +"b7c8561f": "removeDestroyer(address)", +"b7c8699d": "modifyGovtAccount(address)", +"b7c8a90a": "removeExclusionFromTokenUnlocks(address[])", +"b7c93330": "ResourcePoolTester()", +"b7c940f6": "SolarDaoTokenCrowdsale(address,address,uint256,uint256,uint256)", +"b7c97930": "registerPool(string,uint256,uint256)", +"b7c97fa0": "BEN()", +"b7c9da33": "buyTulips(uint32,uint16)", +"b7ca3086": "getSelfCount()", +"b7ca51e8": "starToken()", +"b7caf50a": "ticketsNum()", +"b7cb4830": "NERU()", +"b7cc2312": "bobClaimsPayment(bytes32,uint256,uint256,address,address,bytes20)", +"b7ccc466": "categoriesCount()", +"b7ccccaf": "bridgeValidatorsProxyOwner()", +"b7cce253": "maximumMainSaleRaise()", +"b7cdddcb": "claimEth()", +"b7cefd9f": "FlatEarth()", +"b7d02044": "deployToken(string,string,uint8,uint256)", +"b7d0628b": "getGameState()", +"b7d130ff": "isAuthorizedToSell(address)", +"b7d29e91": "NameChanged(bytes32,string)", +"b7d3a9c9": "setWhitelistAgent(address)", +"b7d3cb87": "countAllProposals()", +"b7d454a4": "setNotTransferable(bytes32)", +"b7d478bf": "getAvgAmount(uint256,uint256)", +"b7d4c4a5": "getInvestorsList()", +"b7d4dc0d": "unsetBase(address,uint64)", +"b7d4e5fd": "getX2(uint256)", +"b7d534a1": "addrToString(address)", +"b7d5d4c0": "piggyBank()", +"b7d5d74c": "balanceAtBlock(address,uint256)", +"b7d5ddc8": "setAssetClaimString(uint256,string,string)", +"b7d5e804": "remove(uint8,uint8)", +"b7d5ef4d": "BATokenFactory()", +"b7d65d17": "setUnitCoinProductionMultiplier(address,address,uint256,uint256,bool)", +"b7d6f432": "buyCar(address,uint256,bool,address,uint256)", +"b7d6f6c6": "WHALE(address)", +"b7d74fda": "DevelCoin(uint256,string,uint8,string)", +"b7d7a4e0": "say(uint256,uint256)", +"b7d7acea": "externalGiftEth(address)", +"b7d89483": "AddressList(string,bool)", +"b7d8b1d9": "emitWorkStarted(uint256,uint256)", +"b7d9549c": "incrementPrice(uint256,address)", +"b7d9d7b9": "roundTwoAmount()", +"b7da166b": "_mint(address,address,uint256)", +"b7da5b0d": "TreatzCoin()", +"b7dacbf1": "setBackup(address)", +"b7db7f0f": "allowTransfer(address,address,address,uint256,bytes)", +"b7db87e8": "testFooArray()", +"b7dc2a9f": "weiMinimum()", +"b7dc3b18": "buy(uint256,string)", +"b7dc5c11": "priceGuaranteed()", +"b7dc8a32": "firstValidBlockNumber()", +"b7dc9d85": "ORDER_DONE(address,address,address,bool,uint256,uint256,uint256)", +"b7dcf6a9": "createPromoCollectible(uint8,uint8,uint256,address,uint256,uint256,uint256)", +"b7dd1d17": "getAllRevisionBlockNumbers(bytes32)", +"b7ddcb27": "InteractiveCrowdsaleToken(address,string,string,uint8,uint256)", +"b7de47d3": "getIndex(uint256,uint256)", +"b7dea35f": "hatchSeeds(address)", +"b7dec1b7": "GENESIS()", +"b7ded7cc": "purchaseHero(uint256)", +"b7df07a6": "receivePlayerInfo(address,string)", +"b7df7ef8": "AccountUnlocked(address)", +"b7df9289": "recvShrICO(address,uint256,uint256)", +"b7dfc8a5": "updateTokenPerEther(uint256)", +"b7e0308d": "priceStep2()", +"b7e03264": "showWinner()", +"b7e05277": "private_DelGameBar(uint256)", +"b7e05d4f": "newProposallog(string)", +"b7e09773": "devTeamReinvest()", +"b7e1917c": "tokenAdmin()", +"b7e1b974": "getStr(uint256)", +"b7e1bce7": "ReceiverAddressChanged(address)", +"b7e1ecef": "addAttendantAndTransfer(string,string,bool)", +"b7e1fd9b": "createDividend(uint256,uint256,address,uint256,bytes32)", +"b7e2263b": "getTotalMatches()", +"b7e24979": "addThing(bytes)", +"b7e28a3b": "certificationManager()", +"b7e2f504": "isPreSaleFinalised()", +"b7e39b4f": "setBalances(address[],uint256[])", +"b7e43a84": "maximumIssuerReservedUnits()", +"b7e45353": "forbidChecking(uint256)", +"b7e4a503": "Determine_Result(uint256,uint256)", +"b7e5cabb": "contractorsProfitAddress()", +"b7e621c3": "claimCompanyTokens()", +"b7e6bd34": "getTopic(bytes15)", +"b7e6dfe3": "GetApplicantAddress()", +"b7e82526": "GraybuxToken()", +"b7e83329": "ExportMaster()", +"b7e90262": "roleAdminAddress()", +"b7e92ede": "EtheRoox(address,address,address,uint256,uint256,uint256)", +"b7e9f193": "nextWithdrawal()", +"b7eb22b3": "getAccountsSize()", +"b7eb5e0a": "unlockAddress(address)", +"b7ec2086": "priceWei()", +"b7ec44b4": "asyncTransfer(address,uint256)", +"b7ecbaae": "removeWhitelistAddress(address)", +"b7ee2552": "ICOpaused()", +"b7eea206": "openLedgerAddress()", +"b7ef5fed": "claimRewards(uint16[],address)", +"b7efc1cd": "authorizeMintToken()", +"b7eff231": "oraclize_query(string,bytes[3])", +"b7efff16": "GANAPATI()", +"b7f01bfc": "tank()", +"b7f1489e": "setLosePercent(uint256)", +"b7f1e6af": "preferredSaleEndTime()", +"b7f2f33c": "transferRightIfApproved(address,bytes)", +"b7f37983": "getInvestmentRecordListLength()", +"b7f3ffed": "updateProfiterole(address,uint256)", +"b7f43a63": "brideVow()", +"b7f48211": "setPackState(uint256,bool)", +"b7f53c91": "CryptoSilver()", +"b7f545cc": "deployTokenContract(uint256,bool)", +"b7f603ff": "LimbToken()", +"b7f63665": "ttToken()", +"b7f6a75a": "XPAToken(address,address,uint256,uint256,uint256)", +"b7f6e74d": "unpositionFrom(address,address,uint256)", +"b7f79374": "DildoToken()", +"b7f84ae2": "icoPhaseTimeInterval()", +"b7f90f12": "decrementCount()", +"b7f927e6": "PROMETHEUS_VOUCHER_LIMIT()", +"b7f92b71": "reserveFund()", +"b7f9c4f6": "initCapsule(uint256)", +"b7fa265a": "_withdraw(bool)", +"b7fb1dc8": "payToMarketingReferral()", +"b7fba4d3": "getProxy(address)", +"b7fc5a48": "getPoolStars(uint32)", +"b7fc6612": "transferMany(address[],uint256[])", +"b7fcc321": "CryptoHoleToken()", +"b7fcfa69": "amountReceivedFromTransfer(uint256)", +"b7fd45a0": "EscrowICO()", +"b7fda832": "updateGenVaultAndMask(address,uint256)", +"b7fde9da": "mintCoins(address,uint256)", +"b7ff11be": "isAcceptedDcorpMember(address)", +"b7ff2aed": "withdrawMaker(address,uint256,address)", +"b8005f38": "execBoard()", +"b800b2fe": "BEZOS()", +"b800db55": "__isSenderInRole(uint256)", +"b8017221": "get_party2_balance()", +"b8029269": "get_money()", +"b804dc56": "setRecallPercent(uint256)", +"b80509c5": "getCountsById(uint256)", +"b80540c0": "Adjudicator(address[],uint256,uint256)", +"b80546c2": "endPeriodA()", +"b805a5ca": "GetChip(uint32)", +"b8066bcb": "etherToken()", +"b8068a5f": "CATServicePaymentCollector(address)", +"b80756f0": "_calculateLockedBalance(address)", +"b80777ea": "timestamp()", +"b8077e28": "getTxOrigin()", +"b8079d49": "debitWalletLMNO(address,uint256)", +"b807ed76": "SANKEYSOLUTION()", +"b80825ff": "TheBittrip()", +"b808745c": "transferPass(bytes32,address)", +"b8087ac0": "goalMet()", +"b80907f2": "getReputationToken()", +"b809127e": "getQuickPromoBlockInterval()", +"b8093100": "giveBounty(uint256,address,address)", +"b809ceb2": "updateIcoDates(uint256,uint256,uint256,uint256)", +"b80a30b7": "_getInvestorTokenAmount(address)", +"b80ac7df": "verifyProof(bytes32[],bytes32)", +"b80aedf2": "setReservedTokensList(address,uint256,uint256,uint256,bool)", +"b80cdcf6": "finishCrowdsale()", +"b80ced14": "LPCoinToken()", +"b80d3181": "annualPrice()", +"b80e63df": "baseTokenBalance(address)", +"b80ee369": "createCardForAcquiredPlayer(uint256,address)", +"b80f3532": "exchnageRate()", +"b8109e1a": "MeetingsEntity()", +"b810b81c": "Pixereum()", +"b810bfa4": "GDC(address,address,address,address,address)", +"b810d24b": "updMinPurchaseLimit(uint256)", +"b810fb43": "addressList(uint256)", +"b811215e": "initialCap()", +"b81168b4": "CNNTokenBase(uint256,string,string,uint8)", +"b8121385": "stopOperation()", +"b8121fe4": "viewPetitionSigner(uint256)", +"b8126a3e": "addSideService(address,uint256)", +"b812a6ce": "lastBlock_v11()", +"b813c627": "releasedSupply()", +"b813d939": "test_fourValidEqUint(int256)", +"b8144a72": "getBankRating(address)", +"b814660e": "AllowTransferLocal()", +"b8163641": "checkReceive(address)", +"b8174685": "_claimReward721(address,string)", +"b817e043": "JobMarket()", +"b818f9e4": "batchTransferFrom(address[],address[],uint256[])", +"b8198875": "StreamToken(uint256)", +"b81af39b": "declineMP(address,int256)", +"b81b0b6a": "claim(bytes32,string,string,address,bytes32,bytes32,uint8)", +"b81bb854": "createRequest(address,address[],address[],int256[],address,string)", +"b81c259e": "PexCash()", +"b81c6453": "vote(uint8,address)", +"b81ca723": "InitialCoinOfferingToken()", +"b81ccdd5": "cashilaTokenSupply()", +"b81ce8a7": "MicropaymentsNetwork()", +"b81db9da": "addUserValueName(bytes20)", +"b81df742": "minBuyLimit()", +"b81e3b19": "bankMoney()", +"b81e43fc": "getEventName()", +"b81ec822": "PRE_SALE_2WEEK_BONUS()", +"b81f39a8": "addToReserve()", +"b81f3be0": "deleteVotersWithoutShares(uint256[],uint256[],bool)", +"b81ff45b": "getBalanceByAccount(string)", +"b8205d35": "IncentToken()", +"b8206a18": "unVestAddress(address)", +"b820c41c": "iceToken()", +"b8216ea8": "redeemMany(address[])", +"b821da1b": "submitBid(uint256,uint256)", +"b821f815": "pay_winner(uint256)", +"b8225dec": "selfDestructInitiated()", +"b822b28a": "lastBlock_a8Hash_uint256()", +"b823aac7": "endICOTimestamp()", +"b823e991": "CourseCertification()", +"b8240a65": "UpdatedPrice(uint256)", +"b82465e9": "managerIncome(address)", +"b8248dff": "isValidOwner(address)", +"b82545e5": "judgeWin(uint256,uint256)", +"b8254880": "SurrusContract()", +"b8261f8f": "myEntityList(uint256)", +"b826d6d7": "DigiPulseToken()", +"b82852ec": "changeReserveIAMDestinationAddress(address)", +"b82864e0": "getHouseEdgeFee(uint8,uint256)", +"b828cfd2": "PRVTToken(uint256,string,uint8,string)", +"b8291bda": "Pomzon()", +"b829528e": "LotteryLog(address,string)", +"b82a0ce8": "bonusTime()", +"b82a65b2": "getReportingToken(uint256[])", +"b82a737c": "communityAmount()", +"b82b2a07": "makeProposal(uint8,uint8)", +"b82e6416": "doTimeoutForDefendant(uint256)", +"b82eb946": "_setStageLimit(uint256)", +"b82fb745": "saleEndAtBlock()", +"b82fcdeb": "tokensAllocatedForTeamAndReserve(address)", +"b82fd275": "removeFrozenTokenConfigurations(address[])", +"b82fedbb": "register(bytes32,address,bytes32,bytes32)", +"b8305b43": "HodlCreated(uint256,address,uint256,uint256)", +"b83069c5": "getStemPrice()", +"b830b305": "getpersonCount()", +"b830c538": "unassignRole(address,bytes32,address)", +"b8314c22": "whaleMax()", +"b831d137": "saleSharesSold()", +"b832004d": "setTokenInfoParametersReady()", +"b832679c": "setKmPards(address)", +"b832fdde": "NON_VESTED_TEAM_ADVISORS_SHARE()", +"b833ac27": "PolyToken(address)", +"b8341628": "mintingPreIcoFinish()", +"b834f6fb": "isMainChain()", +"b83506cf": "defaultBuyNowPrice()", +"b83520b3": "allowIcoExit(bool)", +"b835a7fe": "RubiksToken()", +"b8366bd1": "CorruptionCoin()", +"b837433c": "TEAM_ADVISORS_SHARE()", +"b837a3b8": "sendProfitsRewardBips()", +"b837c58e": "payTo()", +"b837c94f": "ASEBToken()", +"b8385339": "finalizeStage(uint256)", +"b8386f3b": "_gambling(uint256,bytes32,uint256)", +"b8388aca": "findBestRate(address,address,uint256)", +"b839e0d1": "lockedAllocatable()", +"b83a1bdc": "lastMineralUpdateTime()", +"b83a4da9": "totalWeiSale()", +"b83ace61": "setHouseEdge(uint256,uint256,uint256)", +"b83b4529": "FundsTransferredToMultisig(address,uint256)", +"b83c298e": "updateBoolSetting(uint256,bool,address,string,string)", +"b83d3f2c": "oraclizeSource()", +"b83dfdc9": "setInvestorData(address,uint256,uint256)", +"b83e1d14": "CountTokenUser(address,uint256,bool)", +"b83e4779": "OntologyToken(uint256,string,string)", +"b83e9662": "ParaTransfer()", +"b83fc6b6": "CrowdsaleClosed(uint256)", +"b8406a7e": "balanceOfLotteryNum(address)", +"b840a1db": "WhitelistChanged(address,bool)", +"b840b421": "OriginalVirtualOperation()", +"b8415b0c": "startDistribute()", +"b8416d2e": "exec(address,bytes32,bytes)", +"b84172e7": "getH1Bidder()", +"b842826c": "Built()", +"b842eef2": "test02BuyToken()", +"b8435050": "crowdsaleclosed()", +"b84391de": "setBetEndTime(uint256)", +"b8441be0": "setTransferAuthPermission(address,bool)", +"b8444c13": "forceVoidRace()", +"b845b51e": "IIPToken(uint256)", +"b845c9a2": "WEI()", +"b8471085": "PRIVATESALE_START_DATE()", +"b84738aa": "changeMinPay(uint256)", +"b848b944": "doSellerCancel(bytes16,address,address,uint256,uint16,uint128)", +"b8499750": "advisorLock()", +"b84a6849": "createShareToken(uint256)", +"b84aac5c": "decreaseApprovalPreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"b84b05b2": "NetyulCrowdsale(address,uint256,uint256,uint256,address,address)", +"b84b276d": "second_whitelistSupplier()", +"b84b8b8c": "buyGoods()", +"b84c11da": "create(address,string,bytes32,uint256,address)", +"b84c35b3": "addCode(string,uint256)", +"b84c743b": "getReferencePrice(address,address)", +"b84c8246": "setSymbol(string)", +"b84cc017": "myBonus(uint256)", +"b84d2106": "shut(bytes32)", +"b84dda70": "tweakState()", +"b84dfbd2": "securityToken()", +"b84e1327": "checkIfContractCreatedHere(address)", +"b84e44ab": "setProviderLastSupplyID(uint256,uint256)", +"b84ebd7f": "createMechBTC(uint256,address)", +"b84ee1a4": "setTransferProxy(uint32,int256,address)", +"b84f1318": "AddNewCurrency(string,string,string)", +"b84fe73b": "voteAll(address)", +"b84fed88": "isMintContract(address)", +"b8500e5e": "purchaseRecordsNum()", +"b8506a3f": "tokensPerWei7()", +"b850ae36": "isRegular(uint256)", +"b851ed97": "bonusAllowed()", +"b8522043": "getUserList()", +"b8534ed1": "contractEndTime()", +"b8547736": "testBadWithGoodInterface(address,uint256,address,uint256)", +"b85477c5": "dealStatus()", +"b857a688": "Eth_Amount()", +"b858b39f": "PhotoAdded(address,address)", +"b85926e0": "VESTED_AMOUNT()", +"b85973c1": "overbidNation(uint8)", +"b8598f9e": "computeOppositePrice(uint16)", +"b85a6a20": "numComments()", +"b85bf538": "ownerSetBankersLimit(uint256)", +"b85c2f72": "submitEntry(uint256,uint256,uint256,uint256)", +"b85cf54e": "rewardPoolPercentage()", +"b85d6275": "RemoveModerator(address)", +"b85dfb80": "backers(address)", +"b85e0402": "AppCoinsIAB()", +"b85e0aca": "legacyRepContract()", +"b85e5915": "ExitPlincWithLoss(uint256)", +"b85e7df1": "setPresaleMode()", +"b85e84c0": "judgeFinality(bytes32[13],bytes32[],bytes32[],bytes32[10],uint256[4])", +"b85ea983": "countPortfolios(address)", +"b85eb295": "checkOwnershipAndAvailability(address,uint256[4])", +"b85ed17d": "getHolderByIndex(uint256,address)", +"b85f726a": "Cashier()", +"b85fb20f": "getPollStage(uint256)", +"b861be22": "checkPermissions(address,address)", +"b8621759": "issueNewCoins(address,uint256)", +"b862d80d": "minBetVal()", +"b86397e7": "mFUNDING_CURRENT_DURATION()", +"b863bd37": "random(uint256)", +"b8642896": "ETSToken(address)", +"b864f5a9": "verify(uint256[],uint256[])", +"b8657988": "MYSUPERTOKEN()", +"b8661e2d": "getAllTeamsIds()", +"b86780b3": "restTokensBurned()", +"b867e8e6": "accrueDividendsPerXTokenETH()", +"b868723e": "endPrice()", +"b868a2ff": "update(uint256,uint256,bytes32[])", +"b8697dbd": "getLockByIndex(uint256)", +"b869f1e2": "SALE_CAP_IN_USD()", +"b86a1fb2": "adminPool()", +"b86a3582": "ETCH3dVs()", +"b86b14cd": "setRate1(uint256)", +"b86b9aa4": "getJackpotWinBonus(uint8,bytes32,bytes32)", +"b86bc74f": "CERTIFIER()", +"b86c49e1": "getMarketsItemId(uint256)", +"b86c6b7b": "calculateCellBuy(uint256,uint256)", +"b86c9845": "MithrilSword()", +"b86dab46": "addToApprovedAddress(address)", +"b86df9db": "RewardRecycled(uint256,address,uint256,uint256,uint256)", +"b86e0657": "removeServer()", +"b86e321c": "withdrawReward(address)", +"b86ec38f": "REIMBURSABLE()", +"b86eeb69": "bountyTotalSupply()", +"b86f602c": "submitOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"b86f6aa7": "resetCollectedFees()", +"b8701689": "removeGlobalConstraintPre(int256,address,int256,address)", +"b870ecbb": "testNormalWhitelistAdd()", +"b870f613": "back(address,uint256)", +"b8716f3a": "_teamTransfer(address,uint256)", +"b8726395": "Mint(int256,uint256)", +"b873846f": "ArrayPasser(uint8[9])", +"b873e9a7": "trustedReportingParticipantTransfer(address,address,uint256)", +"b875a5e0": "rateThirdRound()", +"b8760ad3": "payStakingFee(address,uint256,uint80,uint80,uint256,address)", +"b87760ad": "uint256Tostr(uint256)", +"b8782d49": "PHASE2_RATE()", +"b8788453": "mainSale_StartDate()", +"b87aedcc": "recentPlayersFront()", +"b87b9ac3": "testExchangeRate(uint256)", +"b87ba329": "getMemoryTraceMeta(uint256)", +"b87c01e3": "GVPE_address()", +"b87c03c2": "multiAccessOwners(uint256)", +"b87c7d43": "setEthAmount(uint256)", +"b87cbafc": "bn128_check_pairing(uint256[12])", +"b87d8712": "RulesProposalSubmitted(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"b87dbf81": "handleAffiliate(uint256,uint256,uint256)", +"b87dddf6": "tokenFallback(address,uint256,bytes,string,uint256)", +"b87e461c": "scrapPercent()", +"b87e64ce": "DecentBetVault(address)", +"b87ee9d6": "setLLV_edit_4(string)", +"b87f9b98": "_stringToByte(string)", +"b87fb3db": "start_block()", +"b87fb721": "LogNewTemplate(uint256,address,string)", +"b87ff295": "MintTokens(int256,address,uint256)", +"b8803738": "total_user_eth_cap()", +"b88064ad": "peMinPerPerson()", +"b881604d": "removeStrip(uint256)", +"b8840d3d": "getDrug(uint256)", +"b88467c2": "getProjectEscrowAddress(bytes32)", +"b8847e9d": "haltRevealPeriod(bytes32)", +"b8850556": "ApplyAction(uint32,uint32,uint256,address,address)", +"b8851fea": "endDateStart()", +"b8852718": "transferLockedPart(address,uint256)", +"b8857936": "dtSetEthBalance(address,uint256)", +"b885acd8": "fourthWeekTokenPrice()", +"b885d560": "airDeliverStandalone(address[],uint256[])", +"b88635e2": "PtestToken()", +"b8867485": "proxyOf(uint256)", +"b8871f98": "_createEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256,bool)", +"b8872fb7": "reinvest(address)", +"b8873077": "HUNT(uint256,uint256,uint256,uint256,address)", +"b88746b0": "previousDrawingClosed()", +"b8878171": "getPersiansBattlePointsBy(address)", +"b888690a": "deleteMessage(uint256)", +"b888a492": "isNewPayoutPeriod()", +"b888a66b": "tktPrice()", +"b888adfa": "lastPhaseChange()", +"b88903f7": "TokenDrop(address,uint256)", +"b8894fe3": "mintTokenToBuyer(address,uint256,uint256)", +"b889d440": "markTokenSold(uint256)", +"b88a374c": "EarnEnoughMoney()", +"b88a529b": "getCurrentRate(uint256)", +"b88a802f": "claimReward()", +"b88ab668": "TBXToken()", +"b88c9148": "getFee(address)", +"b88d0169": "INITIAL_EMISSION_FACTOR()", +"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)", +"b88d6aa7": "refund(bytes32,uint8,uint256,uint256)", +"b88e8518": "FluencePreSale(uint256,uint256,uint256)", +"b88e962f": "showEmployee(uint256,uint256,uint256)", +"b88eef53": "registryCreated()", +"b88f9936": "setMinTms(uint256)", +"b88fd16e": "developmentFundAddress()", +"b8901a41": "am_I_locked(address)", +"b8905649": "Crowdsale(address,uint256,uint256,address,address)", +"b8906755": "payProviderFee(address)", +"b890de6b": "thirdLineWrong()", +"b890ed85": "CryptoSagaCardSwapVer2(address,address,address,address)", +"b891656e": "thismanyblockstillthspudholderwins()", +"b8918710": "FangTangCoin(uint256,string,string,uint8,bool,uint256,uint256,uint256,uint256)", +"b893deb1": "getContestEndTime()", +"b89503f3": "getDiceWinAmount(uint256,uint256)", +"b895947a": "Janders()", +"b895c813": "registIcoAddress(address)", +"b896149c": "BLUEOS()", +"b89648cf": "getBoughtTicketList()", +"b8972db5": "sendToken()", +"b8973927": "setContractStart(bool)", +"b89761b8": "encoded_data()", +"b897b4f5": "multAirdrop(address[],uint256)", +"b8991ffb": "reject_payment(uint256,bytes32)", +"b899e1b7": "_setApp(bytes32,bytes32,address)", +"b89a73cb": "isShareholder(address)", +"b89bf71d": "safeWithdrawal4(address)", +"b89c5932": "setRequestLimitInterval(uint256)", +"b89c70c0": "calculateCoinBuy(uint256,uint256)", +"b89cd5bd": "icoPartner(address,uint256)", +"b89e066a": "MINCAP_TOKENS_PRE_ICO()", +"b89e8cbb": "getRemainingSellingTime()", +"b89f3025": "investExt(address,uint256)", +"b89fc89e": "setDistributionAddress(address)", +"b89fde71": "CheckAmbientTempException(bytes32,uint32)", +"b8a15b1d": "bobMakesErc20Payment(bytes32,uint256,address,bytes20,address,uint64)", +"b8a1e355": "doBet(uint256)", +"b8a1fdb6": "transferAndFreezing(address,uint256,uint256,uint256,uint8)", +"b8a24252": "checkpoints(uint256)", +"b8a25119": "setPresaleMode(bool)", +"b8a268c1": "getCloseFlag(bytes)", +"b8a32c7e": "claimTile(uint256,uint256,uint256)", +"b8a358e9": "canMintUtility(address,uint256)", +"b8a393b8": "openCompetition()", +"b8a3c6ea": "KPCSAdministrator(string)", +"b8a4a064": "applauseCashCrowdsale()", +"b8a4b858": "INVESTOR2()", +"b8a4db81": "addValueBonus(uint256,uint256)", +"b8a4f9ae": "addInFutureExpanstionMap(address)", +"b8a5368a": "gameStart(uint256)", +"b8a548c5": "SCTokens()", +"b8a582a9": "EtherMoney()", +"b8a582af": "logicVersion(address)", +"b8a67b6e": "GiroToken()", +"b8a67c3c": "expireDate()", +"b8a684f8": "CryptoSagaSwapPLAT(address,address,address,address)", +"b8a76f54": "setIPFSHash(string)", +"b8a7c78a": "CommunityAddress()", +"b8a80aac": "getItem(address,uint256)", +"b8a876ed": "Quitcoin()", +"b8aa0a34": "getSealDate()", +"b8aa4da8": "addMemberToBS(address)", +"b8aaae7a": "PXXToken()", +"b8aac3a5": "createAndSignBBODocument(bytes,bytes,address[],uint256)", +"b8ab9203": "secondRoundMayTokensLimit()", +"b8ab9883": "claimTimeoutEndedWithMove(bytes32,uint256,uint256)", +"b8aba8cf": "NewPayment(address,uint256)", +"b8abd184": "getInvestorKey(bytes32,uint8)", +"b8aca90b": "CurrentGame()", +"b8ad2abe": "addTokenGrant(address,uint256)", +"b8ad2fca": "claimMeme()", +"b8adaa11": "reject(uint256)", +"b8af146f": "subsm(uint256,uint256)", +"b8af21b9": "isLotteryClosed()", +"b8af6bc7": "getAgentsAmount()", +"b8af7642": "seeAddress(uint256)", +"b8afae78": "IPM2COIN()", +"b8afd597": "FinishRoundGamble()", +"b8b040a1": "xapo()", +"b8b0f533": "get_bitcoineum_contract_address()", +"b8b13e6b": "MaximumcoinStart()", +"b8b18915": "withdrawBonus(address)", +"b8b199e5": "_userSignUp(string,address,bool)", +"b8b19c27": "MultiOwnable(address[16],uint256[16])", +"b8b2052c": "setCrowdsale(address,address)", +"b8b23120": "getFlagPrice()", +"b8b27765": "payManagementBodyPercent(uint256)", +"b8b2bdad": "setBool(string,bool)", +"b8b2d490": "feePerSec()", +"b8b359b8": "voteByIndex(uint256,address,uint256)", +"b8b3d85b": "getFunderBalance(address)", +"b8b459bc": "OrderUpdated(uint256)", +"b8b4f1a0": "signContract()", +"b8b52652": "startFightA(uint256,uint256,bytes4)", +"b8b570f1": "Distributed()", +"b8b690e7": "__targetExchangeCallback(uint256)", +"b8b798be": "getYearlyUSDSalariesTotal()", +"b8b7b899": "receiveTransfer(address,uint256,address,bytes)", +"b8b7edb2": "hashToken()", +"b8b808cc": "getAddressFromNumber(uint256)", +"b8b85873": "purchaseArray(uint256)", +"b8b8d387": "myWeiValue()", +"b8b8fc3a": "getPI_edit_20()", +"b8ba427d": "RetDime()", +"b8ba532f": "developer_edit_name(string)", +"b8ba7c7f": "createGen0Auction(uint256,uint8,uint8,uint8,uint8)", +"b8baed2c": "calcTradeFeeMulti(uint256[],uint256[])", +"b8bb372c": "APIHeaven()", +"b8bb41dc": "setReceiver6()", +"b8bcaad5": "_randomPack(uint256)", +"b8bce6d0": "dateEcoRelease12()", +"b8bcf6c9": "ico2ndPrice()", +"b8bd3dbb": "setMakerFee(uint256)", +"b8bdd8dd": "close(bytes)", +"b8bdf701": "initiateCreateSale(uint256,uint256,uint256,uint256)", +"b8be73ed": "offchainUploaderAddress()", +"b8beafd6": "buyVolumes(address,address)", +"b8bf029b": "list(address,uint256,uint256,uint256,uint256)", +"b8bf0f1f": "getRemainingBlocksUntilPayoutk()", +"b8c0517a": "splitStake(address,address,address,uint256)", +"b8c26d0b": "ContractWithParams(address)", +"b8c2a9e1": "getBidReports(uint256)", +"b8c375b6": "WavesToken()", +"b8c48f8c": "setInitialParent(int256,int256,int256)", +"b8c508e5": "MOBOL()", +"b8c52477": "_exchange(uint256,uint256)", +"b8c577ff": "setGrowth(uint32)", +"b8c58128": "setList(uint256,uint256[])", +"b8c65462": "preICOSaleStart()", +"b8c6a67e": "maxPendingParticipants()", +"b8c6d2e9": "BretCoin()", +"b8c6f579": "setAuction(address)", +"b8c766b8": "saleClosed()", +"b8c78391": "releaseableBalanceOf(address)", +"b8c7dea3": "stageCurrentSum(uint256)", +"b8c7e354": "tryToCompleteProject()", +"b8c86aa6": "getArraySettingResult()", +"b8c87a06": "setStage3()", +"b8c8fb73": "solve(uint256,uint256,uint256,uint256)", +"b8c92537": "acceptBidForCollectible(uint256,uint256,uint256,int256)", +"b8c9371d": "getPassOwner(bytes32)", +"b8c963a6": "atxContract()", +"b8c9c4d2": "burnResource(uint16,uint256)", +"b8c9d365": "h()", +"b8c9e4ed": "getStr()", +"b8c9e694": "getRaceMutation(uint32)", +"b8cb243d": "escrowTransfer(uint256,address)", +"b8cb40e0": "getDistributedTotal()", +"b8cb65ee": "removeTokens(uint256)", +"b8cc3c12": "depositToSubRound(uint256)", +"b8ccbd17": "removePermission(bytes4)", +"b8ccc682": "constructUrl(bytes32,uint256)", +"b8ccf4c7": "sendPositiveWhuffies(address,string)", +"b8cd0b94": "DoorLock()", +"b8cd4a8e": "joinCarveUpTen(uint256)", +"b8cd81ed": "raffleTokenReward()", +"b8ce670d": "burn(address,uint256,address)", +"b8cf14e7": "updateStatusPlayer()", +"b8cf2515": "currentFundrise()", +"b8d00d4a": "requestErc20Transfer(address,address,uint256)", +"b8d04f4e": "getReferrerAddress(address)", +"b8d08db2": "releaseCount()", +"b8d0cf4a": "setTokenPriceUSD(uint256)", +"b8d117fc": "bonusEnds4()", +"b8d1194c": "tokenGoal()", +"b8d16dbc": "isLeapYear(uint256)", +"b8d2f523": "no_aff()", +"b8d364bb": "allDistinct(address[5])", +"b8d3bfe3": "MeatGrindersAssociation(address,address,uint256,uint256,uint256,address)", +"b8d3d08a": "assertEq29(bytes29,bytes29)", +"b8d400d2": "fromEthers(uint256)", +"b8d415c9": "bntyMicrodollarPrice()", +"b8d46c9c": "setOrUpdateRecord2(string,string,string,string,address,uint8,bytes32,bytes32)", +"b8d4b642": "startICODate()", +"b8d4efb5": "validate_percent(uint8)", +"b8d55a91": "CPLToken()", +"b8d5b7f0": "maximumToken()", +"b8d73101": "expirationString()", +"b8d73849": "LogTokenDeposit(address,uint256,bytes)", +"b8d74f4b": "getAcceptedTokenAmount(address)", +"b8d85d23": "adminSetAddress(address)", +"b8d87069": "_removeContributor(uint256)", +"b8d94039": "writePosition(uint256,int256)", +"b8d94b95": "buildDSNullMap()", +"b8d9cbbe": "addMember(address,uint256,uint256,uint256)", +"b8daf1b1": "cancelChainlinkRequest(bytes32)", +"b8dbf876": "transferFromOwner(address,address,uint256)", +"b8dd3c55": "confirmSettingsChange(uint256)", +"b8dd7a5b": "numberOfWagersToMinimumTimeout()", +"b8ddc4df": "HPA_TokenERC20(uint256,string,string)", +"b8ddef1a": "IdeaCoin()", +"b8de3843": "allAmountRaised()", +"b8de85d8": "p_setBankOfEthAddress(address)", +"b8df17f0": "verifySigner(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"b8df5ce3": "ownerInitialBalance()", +"b8e010de": "set()", +"b8e046d1": "MinexoDigital()", +"b8e0d08d": "increaseHardCap(uint256)", +"b8e0ffbe": "getPaymentsLength()", +"b8e2cfb1": "getMinMaxInvest()", +"b8e31ee7": "MithrilGauntlet()", +"b8e381e5": "subscriptions()", +"b8e3d8e8": "LOL()", +"b8e3e6da": "participateCrowdsaleAll()", +"b8e4189c": "updateHighestMiles_(uint256,address)", +"b8e42041": "invalidateOrdersBefore(address)", +"b8e44852": "chargeTokensForManagement()", +"b8e60467": "LRCMidTermHoldingContract(address,address)", +"b8e6a433": "calcFactorReward(uint256)", +"b8e920de": "buyTicketTest2(bytes)", +"b8e945fc": "setOwnerNick(uint256,string)", +"b8e9a6f0": "addLockedAccount(uint8,address,uint256)", +"b8e9ac71": "BICToken(uint256,string,string)", +"b8e9c22e": "getRate(address,uint256,bool,uint256)", +"b8eaffcc": "getnodeparam(address)", +"b8eb115e": "increaseDuration(uint256)", +"b8eb3546": "maxSell()", +"b8eb993d": "PUBLIC_SALE_TOKEN_CAP()", +"b8ebed78": "rightForInterest(uint256,bool)", +"b8ec59e4": "changeColorOrange()", +"b8edcd1f": "isOwnerOfJob(address,uint256)", +"b8eddde1": "paymentsOwed(address)", +"b8ef04e7": "_getRandomNumber(uint256,uint256)", +"b8ef5f4d": "nextGameSeedPercent()", +"b8ef9fcc": "cardAddressExists(address)", +"b8f20cfd": "myBalances()", +"b8f249e2": "testThrowsSaleWalletIncorrectSaleAddress()", +"b8f2690d": "TestDividendFund()", +"b8f28531": "notEqual(address,address,string)", +"b8f2954d": "addData(bytes32[],bytes32,bytes32,bytes32,uint256,uint256,uint256,uint256)", +"b8f2bbac": "modify_perms(bytes32,bytes32,int256)", +"b8f3b75d": "buyWithAddress(address)", +"b8f47481": "withdrawErc20ForAddress(address,address,uint256)", +"b8f48d3d": "setMaxRoundSize(uint256)", +"b8f53f36": "maxPrivateSaleStage()", +"b8f5e56c": "DeClub(uint256,string,string)", +"b8f6c219": "purchaseDatesToken(uint256)", +"b8f6d3ef": "getNodalblockData(string)", +"b8f6e7ff": "changeMarketStatus(uint8)", +"b8f71f26": "scheduleTransaction(uint256,address)", +"b8f75c0b": "bountyFactory()", +"b8f76562": "setWithdrawable(address)", +"b8f77005": "getQueueLength()", +"b8f78178": "createNameAndPoint(int256,bytes32,address)", +"b8f7a665": "isLive()", +"b8f7f41e": "drpCrowdsaleRecordedBalance()", +"b8f929ad": "saleWhitelist()", +"b8fa7778": "for_votes()", +"b8fbb72d": "COMMON_WITHDRAW_SUPPLY()", +"b8fbb87d": "isAssociatedAddressFor(uint256,address,address)", +"b8fbe499": "Cygnus()", +"b8fc7bd0": "setPresidenteDeMesaVerify(bytes32,uint256,uint256,uint256,bytes32)", +"b8fcf937": "myToken()", +"b8fd1e10": "updateBalancesContract(address)", +"b8fd1ffa": "addressToEtherOwed(address)", +"b8fde2a4": "dailyPercentAtNow()", +"b8fe6f93": "triggerTransaction(uint256,uint256)", +"b8ffc962": "isMaxSupplyLocked()", +"b8ffd53f": "getStageStartTime(bytes32)", +"b8ffd64b": "PowTokenBase()", +"b9002e62": "delegatedFwd(address,bytes,uint256)", +"b900a870": "getApprenticeChestPrice()", +"b900da19": "calculateBonusPercentage(uint256)", +"b9019437": "eitherHaveAttribute(address,address,bytes32)", +"b9022e44": "updatePresaleWhitelist(address[],bool)", +"b90291c3": "changeWebsite(string)", +"b902c833": "switchfor()", +"b90306ad": "Burn(uint256)", +"b9037bc2": "unlockTokensForAddress(address)", +"b903a2a5": "MultiTransfer(address[],uint256)", +"b904088e": "maximumInvestment()", +"b9043235": "_create(uint256,address)", +"b90436ba": "MBT()", +"b9045c00": "InvestCoin()", +"b904ef4a": "delUIntValue(bytes32)", +"b9068d9e": "distributeFunds(uint256,address,address,address)", +"b906b7b7": "burnPercentage10m()", +"b9078616": "executeTrade(address,address,uint256,uint256)", +"b907996a": "Forwarder()", +"b9089280": "admin_del(address)", +"b908b008": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[1])", +"b9093fc6": "addIdentity(address)", +"b9098b33": "krs()", +"b90a4df1": "ApushJoustUser(address,address)", +"b90ae5a1": "registrarAuth()", +"b90b0108": "iconcontract()", +"b90b09c0": "random_bool(uint8)", +"b90b1248": "extractTokenEth(uint256)", +"b90b9aea": "EOCToken(uint256,string,string)", +"b90c1dbb": "getCreationDate()", +"b90c8566": "Somplak()", +"b90c86a9": "LogOraclizeCall(uint256,bytes32,string)", +"b90c92e2": "FysicalToken()", +"b90cec6d": "AddOfficialApps(address)", +"b90d3d0c": "data(address)", +"b90d86b9": "autoMatch()", +"b90d89a0": "start_seller(address,address,uint32)", +"b90da496": "getRankTitle(uint256)", +"b90dcc58": "SAFEToken(uint256,string,string,uint8)", +"b90e6bd8": "userRound(address,uint256)", +"b90f1af1": "icoEndUnix()", +"b90f65a2": "canCancelBet()", +"b910378d": "getBI(bytes32)", +"b91038c7": "participate(address)", +"b9103e1f": "refundAction(bytes32)", +"b9106dd9": "setAllowAccess(address,bool)", +"b91070e8": "processEmergencyFundReleaseFinished()", +"b9119b87": "ChangeSwapperAddress(address)", +"b911f2fb": "settleCandyGetx(uint256)", +"b912950e": "buyItemRaffleTicket(uint256)", +"b91366b0": "upgradeReactor()", +"b9138584": "Deedcoin()", +"b9140422": "readMailByAdmin(uint256,bytes16,address)", +"b9144c96": "TokenMinted(address,uint256)", +"b9145944": "verifySig(address,bytes32,bytes)", +"b914cf7c": "leve1(address)", +"b914d908": "getBeneficiaryIndex(address)", +"b9156830": "hasPriorDuplicate(string,uint256)", +"b9166178": "investorWallet(address)", +"b916c5ff": "redeemCoupons(uint256,string)", +"b916de59": "reset(address[])", +"b916e5d0": "goldenTokenId()", +"b916f8fd": "delistMon(uint64)", +"b9172dec": "changeStage(uint8)", +"b9174330": "gco(uint256,address)", +"b9186d7d": "priceOf(uint256)", +"b919be66": "useMultipleItem(uint256,uint256,uint256,uint256,uint256)", +"b91aedab": "transferLocked(address,uint256[],uint256[])", +"b91bb31c": "initLottery(uint256,uint256,uint256)", +"b91bf310": "initialChargeFeePool(address)", +"b91c771f": "replaceProduct(address,address,address,address)", +"b91d1aed": "createPassport(uint256,bytes32)", +"b91d3ace": "addDev(address)", +"b91d4001": "releaseTime()", +"b91d4a0f": "frontWindowAdjustmentRatio()", +"b91db40c": "FINE()", +"b91dee6c": "ResetUpdateState()", +"b91e3422": "premiumHold()", +"b91e4087": "validAddresses(address)", +"b91fe64b": "getLastDepositDate()", +"b9204d1c": "TeamVestTimeLimit()", +"b9209e33": "isVerified(address)", +"b920c799": "Insureum(uint256,uint256)", +"b920ded9": "_detectInvestorGroup(uint256)", +"b920ef71": "removeExtension(uint256)", +"b9212662": "s13(bytes1)", +"b921e163": "increaseSupply(uint256)", +"b9223946": "endVote()", +"b9224385": "LogResultWinner(uint256,address,uint256,uint256,bytes)", +"b92289ef": "sendleftmoney(uint256,address)", +"b9235d08": "FlippedCoin(address,uint256,int256)", +"b923909d": "check_hash_exist_in_chain(string)", +"b923b205": "setWhitelist()", +"b9247673": "buyListing(bytes32,uint256)", +"b9256f7e": "newTickerQueryResult(string,bytes32)", +"b925af47": "creatorsTotalBalance()", +"b92620bd": "targetWallet()", +"b926bd06": "Prepurchased(address,uint256,uint256,uint128,uint256)", +"b9272a11": "_redeemAdoptedAxies(address,uint8,uint256)", +"b927ef43": "validatorSetApplyBlock()", +"b928024d": "tokensPerWeiBonus250()", +"b9291296": "useMyOldName(string)", +"b9292158": "getTimestamps(address)", +"b929709a": "getPOOL_edit_1()", +"b92984f8": "TokenGame()", +"b92a3961": "currentRoundBudget()", +"b92a56bf": "deathData_v10()", +"b92ae87c": "isSubscribed(address)", +"b92b9d6c": "replacePublisherRegistry(address)", +"b92cb5b8": "addBrick(uint256,string,string,uint256,string,bytes32[],uint256)", +"b92cc8cf": "isExisting(uint256)", +"b92cd8f1": "officalHolding()", +"b92ce1a7": "createRandomCharacter()", +"b92d6c2f": "TWCToken()", +"b92dd395": "setManagerPowerful(bool)", +"b92ddee6": "setStartTimeIco(uint256,uint256)", +"b92e9f9e": "reportWasCalled()", +"b92edfc6": "NumberOfAuctions()", +"b92f1986": "IMDEXinvalidateOrdersBefore(address,uint256)", +"b9308d9e": "updateName(address,string)", +"b9318b0c": "_born(uint256,uint256)", +"b931b484": "bountyTokensLeft()", +"b931bec5": "setContractErc20Token(address,address)", +"b9324db6": "upgradeCardShield(uint256)", +"b9330829": "maxUint256()", +"b935170b": "addShopOwner(string,string)", +"b93529bc": "tokenTicketPrice()", +"b9358ba4": "isApper(address)", +"b9359169": "GayPersonalAds()", +"b9364835": "getCatOwner(uint256)", +"b93651bb": "__initFuse()", +"b9368721": "balancesRiskcoins()", +"b93806ab": "setWinningNumbers(uint256,string)", +"b9381f3c": "checkCapsAndUpdate(uint256,uint256)", +"b93833c3": "changeRewardAmount(uint256)", +"b9384f12": "changeMinCapUSD(uint256)", +"b938b469": "SetRewardMultiAD(uint256)", +"b938bf42": "sendBounty(bytes32)", +"b93983dd": "StoxSmartTokenSale(address,address,uint256)", +"b939d43a": "ARISCOIN()", +"b93a4408": "setMintFrequency(uint256)", +"b93a50b0": "_setApprovalForAll(address,bool)", +"b93ab165": "getCurrentInfo()", +"b93c109f": "totalInterests()", +"b93c3de2": "getHistoryRoundList()", +"b93c7d42": "sellDividendPercentCandy()", +"b93dab0b": "getBetCount()", +"b93dc802": "setEth(uint128[2])", +"b93e0e39": "ROCK()", +"b93ea812": "subtract(int256,int256)", +"b93eb763": "x(int256,int256)", +"b93f9b0a": "getAddress(uint256)", +"b93fd2bf": "createCustomAtom(uint64,uint8,uint8,uint8,uint128,uint128,uint32)", +"b9408373": "USD_PER_ETH()", +"b940db1a": "sellAllDolAtOnce()", +"b9413c47": "totalReturnedCredit()", +"b9420310": "tokenSale()", +"b942394d": "getPercent2(address)", +"b94265b8": "addReferrer(address,address)", +"b9429069": "isFarmer(address)", +"b94371ec": "getWhitelistOwner()", +"b9447f7e": "customBuyerForIndex(uint256)", +"b944ef3c": "initialTraining()", +"b94512c7": "BioCoin()", +"b9459b70": "getCurrentLuckyStonePrice()", +"b9460d04": "updateTicketVault(uint256,uint256)", +"b94669e5": "interfaceThawTokens(address,uint256)", +"b9468f7e": "bid(uint256,bool)", +"b946c19c": "rankDataContract()", +"b946fab1": "maxAmountPresale()", +"b9474959": "_isTokenOperator(address,uint256)", +"b94761b4": "SetupAllowance(address,uint256)", +"b94776de": "mintUnlockTime(address,uint256,uint256)", +"b9478ade": "DylanCoin(uint256,string,string)", +"b948348c": "purchaseTicket(uint256)", +"b94844dd": "AAAToken()", +"b9484955": "getInvestorArray()", +"b9488546": "ownersCount()", +"b9499cd6": "Midwife()", +"b949f2f3": "finishPVEBatch(uint32[])", +"b94b0a3a": "getFulfillment(uint256,uint256)", +"b94bae91": "setUser(address[])", +"b94bc7fe": "proofOfSalt(bytes32,uint8)", +"b94c3451": "techBuff()", +"b94cc52f": "mark(address,bytes32)", +"b94e3516": "TAKCoin()", +"b94e962a": "allocateTickets(uint256)", +"b94ee0fc": "Triunvirate(address[])", +"b94f5a6e": "eventPirze(address,uint8)", +"b94f969c": "investmentBTC()", +"b94fa03f": "requiredSharesToBeBoardMember()", +"b94fb4a3": "WaykiCoin()", +"b94fdaab": "upload_group_key(uint256[4])", +"b950556a": "setThingValid(bytes32[],bool)", +"b950ae2b": "changeTopWithdrawable(uint256)", +"b950f0a0": "rateTier3()", +"b95254f6": "setAsLotteryRunner(address,bool)", +"b952ab7b": "unclaimedTokensForInvestor(address)", +"b9531df3": "lowTimeBonusLimit()", +"b953a9ac": "getDocumentProposalCount()", +"b9541ad5": "resetReferee(address)", +"b95459e4": "moduleRegistry()", +"b95460f8": "open(address)", +"b954ca70": "setcapbounus(uint256,uint256,uint256)", +"b95594e5": "lineOfPlayers(uint256)", +"b9559685": "StateHolder()", +"b955b95c": "getKindOfPackage(address)", +"b955e60d": "roundData(uint256)", +"b956a8a6": "easyMineToken()", +"b9570c01": "transferAndCall(address,uint256,bytes32)", +"b957aeb6": "getUserReaction(uint256)", +"b957b886": "stackOffset(uint256)", +"b9582195": "SFXToken()", +"b958893e": "XTVAirDropped()", +"b9588adc": "getStageAttributes(uint8)", +"b958a5e1": "getPhoneByAddress(address)", +"b958abd5": "setA(string)", +"b9592e92": "setGM(address)", +"b9599f3a": "fetchUndistributedProfit()", +"b95a4baf": "daysSinceLaunch()", +"b95a8327": "marketGrapes()", +"b95af889": "processTransferToICAPResult(address,bytes32,uint256,bool)", +"b95bb4f8": "price(uint16)", +"b95c2740": "buy(address,bytes)", +"b95cbed6": "currentExpiryInterval()", +"b95d2a53": "deedUri(uint256)", +"b95f2be8": "_releaseVouchers(address,uint256)", +"b96095fd": "GEND1()", +"b960a45f": "unpauseTrueUSD()", +"b960a6d4": "ITTMultisig()", +"b96144fd": "removeUsername()", +"b9615878": "getHeader(bytes32)", +"b961716b": "getActiveTier()", +"b961b1e0": "teamNamingIncome()", +"b96297b5": "killya()", +"b962de9a": "ProsperaToken(uint256,string,uint8,string)", +"b9632689": "numFunders()", +"b9635685": "JAJToken()", +"b963e1d0": "getPurpouse()", +"b964608d": "get_return_by_level(uint256)", +"b9649e52": "getPlayerPotWinning(uint256,uint256,uint256)", +"b96528fd": "pubAddress()", +"b9653382": "firstPeriodEndDate()", +"b965817d": "UBSCoin()", +"b9659d4a": "sibling()", +"b9668eb2": "settleUnclaimedPerTokenPayouts(address,address)", +"b966f350": "tokenMintingEnabled()", +"b96732d9": "TransferToSAToE(uint256)", +"b9676e72": "SPTToken()", +"b967a52e": "setContactInformation(string)", +"b968440a": "Finalized(uint256,uint256)", +"b968486e": "isLottoStarted()", +"b96890a1": "airdroptoken()", +"b96891e5": "getAddressesSize()", +"b9689cf3": "crowdsaleAirdropAddress()", +"b968a53c": "getBurnAddresses()", +"b969d399": "getBattleCooldown(uint64)", +"b96a39bd": "createPlayer(string,uint256,uint256)", +"b96b8edf": "changeAirdropQty(uint256)", +"b96bf2b5": "expressReloadNumSec(uint256,uint256,uint256[],uint256[])", +"b96c0866": "completeOrder(string)", +"b96c10ba": "_assign(address,address,address)", +"b96d64fb": "start_quiz_game(string,string)", +"b96dc22a": "enableLambo(uint256)", +"b96dc96d": "delCertificate(string)", +"b96e988b": "addressBilborough()", +"b96f54d1": "fixedReverse(uint256[10])", +"b96f8a39": "Voting()", +"b970e3d0": "JATICO()", +"b971667c": "calculateEmissionTokens(uint256,uint256,uint256,uint256)", +"b9717b23": "setOdd(uint256,uint256,uint256)", +"b971a1f8": "VivekTestToken()", +"b971b4e5": "setNotTransferable(bytes20)", +"b9727dc2": "getProjectClient(uint256)", +"b9727f50": "saveRevenueShareDistribution(address,uint256)", +"b972b967": "transferTokensToTeam(address,uint256,uint256)", +"b97386d1": "reputationProblems(address,bytes32)", +"b973b286": "Imteaz()", +"b974b0a3": "allData()", +"b974ddcb": "getAnimalById(uint256)", +"b9750acf": "selfDestroy()", +"b97585d3": "addOldNickname(address,string)", +"b975ce23": "crownName()", +"b975d9c7": "setCCH_edit_32(string)", +"b976b35b": "uponTransfer(address,address,uint256)", +"b976f464": "authoriseAccount(address)", +"b9774f7b": "confirmations(uint256)", +"b9776301": "testTrustedTransferFrom()", +"b9789d7d": "ChangeDeadLine(uint256,uint256,string)", +"b97a6c12": "redeemForReportingParticipant()", +"b97a7d24": "getGoal()", +"b97af2c8": "setTokenDecimals(uint256)", +"b97b451e": "increaseApprovalPreSignedCheck(address,address,uint256,uint256,uint256,uint8,bytes)", +"b97b9df8": "AUACoin()", +"b97cab2c": "convert2Peony(uint256)", +"b97ce4d3": "distributionteamFinished()", +"b97d3627": "TosToken()", +"b97df70a": "setTokenReward(address,address)", +"b97e3b43": "setMintAgent(address,address,bool)", +"b97fd9e1": "releaseWallet(address)", +"b980a312": "PtestTokenICO(uint256,uint256,address,address,address,uint256,uint256,uint256,uint256)", +"b980b10d": "masterCardEscrow()", +"b9812d9a": "getNextReportingWindow()", +"b981655f": "DebtManager()", +"b9818be1": "feeOwner()", +"b982e5c1": "testAddPending()", +"b9843c7c": "setUnavailable()", +"b9844d6f": "updateSelfDropStageState(uint256,uint256,uint256,uint256,uint256,uint256)", +"b9855c76": "restartPeriod()", +"b9858a28": "addContract(address,address)", +"b9861011": "setUniqueBlindedProposal(uint256,bytes32)", +"b986b611": "withdrawAddressUpdate(address)", +"b986bb67": "STATUS_DESTROYED()", +"b9871548": "set_token_address(address,string)", +"b9879450": "CREATOR_TOKEN()", +"b987ae02": "fundWithdrawal(uint256)", +"b987bdac": "InterCrypto()", +"b987f688": "gettotalCards()", +"b9883b3f": "main(uint16,uint8,int256)", +"b988899f": "setBenificiary(address)", +"b988c505": "newProposal(address,uint256,string,bytes,uint64)", +"b9890a74": "initBonuses(string)", +"b989915c": "lastUsdPerEthChangeDate()", +"b989c7ee": "returnInt32(int32)", +"b989ffa7": "getArtist(bytes32)", +"b98a5418": "assignedAmountToAngelInvestment()", +"b98aacf0": "retreiveHrt(string)", +"b98ac0c5": "setUserAlloc(address,uint256,uint256)", +"b98b5f9c": "listPrycto1()", +"b98bafde": "Redeemed(uint32,address)", +"b98bcf16": "getPubKeyByHash(bytes28)", +"b98c90c2": "ECOS(address)", +"b98cb57e": "rinkeby()", +"b98d49a5": "getSponsorshipCount(address)", +"b98dbb50": "updateprojectDuration(address,uint256)", +"b98de7c7": "setLive()", +"b98e2769": "sketchNoLongerForSale(uint256)", +"b98ef00d": "disclosureList(uint256)", +"b98f0992": "TokenRK50Z()", +"b98f5932": "getUserExp(address)", +"b98fa504": "AddTower(uint32,uint16,uint16,uint256,uint256,uint16,uint16)", +"b98fb437": "getethused(address)", +"b98fdc36": "IconomiToken(uint256,string,uint8,string,uint256)", +"b990033e": "setNewRegister(string,bytes32,uint256)", +"b9902eef": "Rate8()", +"b9908cbb": "maximalIndividualContribution()", +"b9910c5f": "JixoCoin(uint256,string,string)", +"b991357c": "isAdvisorsTokensThirdReleased()", +"b99152d0": "balanceOfToken(address)", +"b991bc14": "direct_refunds(address[],uint256[])", +"b991f607": "Bank(uint256,uint256)", +"b9926d1d": "limitBuy(uint256)", +"b992812e": "hasIssued(address)", +"b9931d30": "getPlayerToken(uint32)", +"b9934b9e": "ownerResumeContract()", +"b99371a0": "GetPrestigeInfo(uint256)", +"b993a53e": "preSaleBalancesOf(address)", +"b993a91f": "migrationAccountCounter()", +"b993c871": "NGToken()", +"b995b014": "_exploreUsingEmont(address,uint256,uint256,uint256)", +"b995ce4d": "returnTokenAddress(uint256)", +"b99613cb": "getPlayRecordNoTurnData(address,address)", +"b99798e8": "accFounder()", +"b9980306": "processARvRevForecast()", +"b9981a67": "firstBalanceOf(address)", +"b999279e": "VerifyProofAndUpdateState(uint256[],uint256[],uint256[],uint256[],bytes)", +"b9997819": "ownerSetHouseEdge(uint16)", +"b999abbc": "Spole()", +"b99a8a00": "exchange_coefficient()", +"b99ac856": "roundin(address)", +"b99b2f81": "myReferrals()", +"b99b951d": "claimTokensE(uint8)", +"b99bc116": "verifyTrustedSender(address[],uint256,uint256,address,uint8,bytes32,bytes32)", +"b99c2b51": "_getWinAmount(uint8,uint8,uint8,uint24,uint256,uint256,uint256,uint256,uint256)", +"b99de11e": "endThirdWeek()", +"b99dfe18": "getPackage(uint256)", +"b99ec99a": "AuditorRegistryReplaced(address,address)", +"b99eccc1": "SplitWeighted(uint256)", +"b99f1d02": "claimClusters()", +"b99f247d": "ERGCOIN()", +"b99f48d5": "promisedPop()", +"b99f6073": "tokenPurchased()", +"b9a0157e": "setArrayIndexValue(bytes32,uint256,bytes32)", +"b9a0a708": "testChargesAmountApproved()", +"b9a0c1bb": "_approveRobot(uint256,address)", +"b9a1bd86": "registerPrivateContribution(address,uint256)", +"b9a2131b": "ContractTST()", +"b9a29d42": "getKevin()", +"b9a2de3a": "endAuction(uint256)", +"b9a30afb": "HelloGoldSale(address,address,address,address)", +"b9a41409": "gcpa(uint256)", +"b9a45aac": "whitelistAddress(address,bool)", +"b9a4a755": "afterApproveAction(uint256)", +"b9a4defe": "changeTargetAddress(address)", +"b9a52203": "saveRN(uint256)", +"b9a527b4": "book(address,address,uint256,uint256)", +"b9a54062": "getMaximumWritesPerStep()", +"b9a59b83": "isEngineerContract()", +"b9a5a2d9": "numberOfApprovedSteaks()", +"b9a5e073": "contracteesSize()", +"b9a60038": "totalTransactions()", +"b9a68300": "bountyOnlineWallet()", +"b9a6e94c": "buyTile(int32,int32)", +"b9a6f7b0": "BTHB()", +"b9a804fb": "ArrowTestCoin()", +"b9a82f80": "buyPepe(uint256)", +"b9a904f9": "testUnauthorizedSetBetaPackage()", +"b9aa8236": "getMaxAgonId()", +"b9aaaeee": "populateTierTokens()", +"b9ac0524": "icoEtherReceivedTotal()", +"b9ac38aa": "test_newProposalAndVoting()", +"b9aceb63": "BuyTicketUseVault(address,uint256)", +"b9ad36b9": "prophecise(bytes32)", +"b9ad771c": "registerHWCWit(string)", +"b9ae4bda": "associatedPubkeys(uint256)", +"b9ae7364": "pauseAuction()", +"b9af809e": "getMinEthersInvestment()", +"b9afd6e1": "returnChildAddressForParent(address)", +"b9b162c3": "calculateTop5HeroesPower(address,address,uint256)", +"b9b1c90c": "moveToSafetyWallet()", +"b9b237c2": "tokenFunded()", +"b9b26bd2": "registerBroker()", +"b9b2a331": "setAccPrice(uint256)", +"b9b2a890": "rewardDaily(uint32,uint32)", +"b9b2b5cd": "totalFeeCollected()", +"b9b3ded2": "createDividend(uint256,uint256)", +"b9b42602": "ethRefunds(address)", +"b9b43faa": "createInt256s(bytes32[],int256[])", +"b9b466ab": "myLoveBlockCount()", +"b9b6990b": "getUserBetsInARazInstance(uint256,uint256)", +"b9b6c2d4": "getAmountOwed(bytes32,address)", +"b9b7238b": "addInvestorBonusInPercent(address,uint8)", +"b9b7569b": "isGameLogicContract()", +"b9b7b68c": "limitbreak_contrib()", +"b9b842e5": "setCandyLand(address)", +"b9b8af0b": "halted()", +"b9b8c246": "invest(address,uint256)", +"b9b8e25d": "getRemainingTokensToSell()", +"b9b94997": "repossessBooking(address,uint256)", +"b9ba2926": "receivedCollateral()", +"b9bac5f8": "lockedUntilTime()", +"b9bcf81f": "getTlength10()", +"b9bd4f76": "newSale(uint256,uint256,uint8,uint256)", +"b9bda244": "sumICO()", +"b9bdbbbb": "FILMToken(uint256,string,uint8,string)", +"b9beadae": "testCantBuyTokensInEndedSale()", +"b9beeb8d": "DatingCoinToken()", +"b9bf068e": "getUncompensatedContributors(uint256,uint256)", +"b9c009f0": "checkContributorBalance(address)", +"b9c0d227": "defaultTokensPerWei()", +"b9c105cf": "getTaskRewardAndStatus(bytes32)", +"b9c1a60a": "econReserveAllocation()", +"b9c2c6fb": "removeMember(bytes32)", +"b9c2ee82": "upgradeController(address)", +"b9c3395f": "getTokenAmountBonus(uint256)", +"b9c3515c": "votingActive(bytes32)", +"b9c390aa": "SaferEcRecover()", +"b9c3a818": "TEAM_SUPPLY()", +"b9c4d0a7": "fundOrder(uint256)", +"b9c53d04": "SECCoin()", +"b9c5be85": "allocatePurchase(address,uint256,uint256)", +"b9c5eb90": "updateVoucherMthRate(uint256)", +"b9c7ce49": "totalIssuingCollateral()", +"b9c81f1d": "Membership()", +"b9c8464d": "extractFees(uint256)", +"b9c8559d": "RocketPoolReserveFund(address)", +"b9c89ff7": "getTargetRepMarketCapDivisor()", +"b9c97a44": "UnlockAccount(address)", +"b9c99e5e": "DepositUnfrozen(address,uint256)", +"b9caebf4": "del(address)", +"b9cb385d": "invitedInit(address,address)", +"b9cb5b5f": "HatchEggs()", +"b9cbbb62": "testInequalityAddr()", +"b9cc8b48": "oraclizeOn()", +"b9ccaed2": "getMesas()", +"b9cce72c": "addFlag(bool[2])", +"b9ce10d5": "Fyle(string,string,uint8,uint256)", +"b9ce795f": "createVoter(string)", +"b9ceda19": "updateTokenNameAndSymbol(string,string)", +"b9cf01a1": "Cardiology()", +"b9cf9d49": "getNextOrderUser(address,address,uint256,address)", +"b9d0a638": "Bro()", +"b9d1d49b": "minimumBalance()", +"b9d1ed4a": "ethDeposits(address)", +"b9d1fd60": "fundingMaxAmount(address)", +"b9d2fa35": "disableFundingWallets(address)", +"b9d32a1f": "tokenTransferOwnership(address,address,address,address)", +"b9d3514d": "addEventToUser(address)", +"b9d36743": "priceToMint(uint256)", +"b9d414bd": "setSecurityTokensWallet(address)", +"b9d47fff": "mySubdividends()", +"b9d5205c": "SASH()", +"b9d54f6f": "setMinPurchaseLimit(uint256)", +"b9d5d7fe": "resetUserPicture(string)", +"b9d6257d": "DeletePool(string)", +"b9d677f9": "_buyProp(uint256,uint256,uint256)", +"b9d69a30": "sendTo(address,address,uint256,bytes)", +"b9d723eb": "startNewPeriod()", +"b9d7fdf4": "bonusTierSize()", +"b9d8350e": "getWeiFromUsdCents(uint256)", +"b9d92de8": "calculate(uint256)", +"b9da4033": "_randBySeed(uint256)", +"b9da706e": "LandSale(address,uint256,uint256,uint256)", +"b9da8360": "_setBattleContract(address,address)", +"b9db15b4": "getProduct(uint256)", +"b9db9a6d": "resetAllApproval()", +"b9dc25c5": "approvedUser()", +"b9dda7b8": "_ERC20Contract()", +"b9de1c41": "buyRaffleTicket(uint256)", +"b9deb729": "isTransferEnable()", +"b9dedc6a": "shareTransfer(address,address,uint256)", +"b9df2d22": "isGameRunning()", +"b9df819f": "receiveFunds(address,address,uint256)", +"b9dfaf3a": "setPriceChannelMaxSize(uint256)", +"b9e01aeb": "buySpaceshipUpgrade(uint256,uint16,uint8)", +"b9e04eea": "withdrawStuckEtherOfAmount(address,uint256)", +"b9e15a67": "coinAgeForAddress(address,address)", +"b9e16b65": "issueDescription()", +"b9e1aa03": "deposit(address,bytes32)", +"b9e205ae": "updateExchangeRate(uint256)", +"b9e290f9": "setValue(bytes32,address)", +"b9e328de": "GIDIDAX()", +"b9e3a8dd": "isCompositionOnlyWithBaseLayers()", +"b9e3e2db": "releaseDate()", +"b9e3ee01": "addNodeToWhitelist(address)", +"b9e448df": "OpenFund(bytes32,string)", +"b9e4d098": "setNewEndDate(uint256)", +"b9e58ab0": "setPropertyOwnerSalePricePrivateModeFlag(uint16,address,uint256,bool,uint8)", +"b9e5e2c4": "ratePerWeiInPreICO()", +"b9e6152b": "process(address)", +"b9e6ac68": "TabTradersToken(address,address)", +"b9e6edcf": "s15(bytes1)", +"b9e6f1d9": "get_amount()", +"b9e70ed6": "setLoanParameters(address,bytes32,uint256,uint256,uint256,uint256,uint256,uint256)", +"b9e722cd": "caddress()", +"b9e77649": "OVISBOOKED_TOKENS()", +"b9e7afd1": "__setSecretaryGeneral(address)", +"b9e7c061": "tempGetDataToCheck(uint256,uint256)", +"b9e7e2f9": "Beercoin()", +"b9e8574f": "getReservedDestinationInfo(address)", +"b9e95382": "store(uint32)", +"b9e99231": "EEM()", +"b9e9d1aa": "futureOwner()", +"b9e9e441": "exchangeTokensByAddress(uint256,address,address)", +"b9eb04f3": "hashPosition(uint32,int64,bytes16)", +"b9eb5511": "setPI_edit_5(string)", +"b9eca0c8": "gID_()", +"b9ed6df8": "withdrawEtherFromcontract(uint256)", +"b9ed93e9": "setWaitTimeBlocks(uint256)", +"b9edf911": "approveBulk(address[],uint256[])", +"b9ef7835": "infect(bytes32)", +"b9f10278": "EtherPredictx()", +"b9f14557": "unban(address)", +"b9f1fb62": "transferPrivateReservedUFT(address,uint256)", +"b9f2086b": "BlockWar()", +"b9f24e44": "freezeGame(uint256)", +"b9f256cd": "newProposalInEther(address,uint256,string,bytes)", +"b9f28076": "historyIdx(address)", +"b9f2d592": "maxAllowedReservingPercentage()", +"b9f308f2": "getEtherForTokens(uint256)", +"b9f37c86": "Registrar()", +"b9f4657d": "approve_tx(address,bytes)", +"b9f48cad": "performAction(address,bytes,uint256)", +"b9f4b5c2": "refundStart()", +"b9f615d7": "bankRollInvest()", +"b9f696d5": "setNote(uint256,bytes32,string)", +"b9f71934": "promotionsOfClaimant(address)", +"b9f7d242": "restoreAllPersistentTokens(uint256)", +"b9f89751": "withdrawAsCreator()", +"b9f96247": "SellMulti(uint256[],address)", +"b9f9d9a5": "test_insert_findNoHintAtPosition()", +"b9fa2055": "capETH()", +"b9fac520": "BIU()", +"b9fb0579": "Transfer_of_authority(address)", +"b9fb3ff8": "BOOYAHTEST()", +"b9fb7b8c": "Deposit_referral()", +"b9fbe331": "bonusTokenRateLevelOne()", +"b9fea3bb": "setBaseInfo(address)", +"b9feeb05": "GetCategoryCount(string)", +"b9ff5fcf": "getMakerBetDetails(uint256,address)", +"b9ffc576": "RevalootSwap()", +"ba001de3": "revokeBountyTokens(address,uint256)", +"ba00660f": "publicWithdraw()", +"ba00ab60": "cancelAuthorizations(address,address[])", +"ba0179b5": "confirm(uint256)", +"ba02021d": "redeemTicket(uint256,address)", +"ba029c97": "wei20()", +"ba02cf47": "MORTU()", +"ba02e9f2": "Coincirculationchain()", +"ba02f006": "_concat(string,string)", +"ba030c8c": "endRefundingingTime()", +"ba033fe1": "buyAndTransfer(uint256,address,address,bytes)", +"ba0410fb": "changeExhangeRate(uint8)", +"ba044799": "setDropable(bool)", +"ba057826": "MDXToken()", +"ba065e1f": "expired(uint256)", +"ba067f59": "setToSendLeft()", +"ba075da2": "undermineComponent(uint16,uint256)", +"ba081b8d": "PHOENIX_POOL()", +"ba086518": "delist(uint16)", +"ba087b9d": "balanceOfAtType(address,uint256,uint256)", +"ba08809d": "showTimeLock(address)", +"ba08f299": "decrementTotalIssuerCount()", +"ba09591e": "setSellFloor(uint256)", +"ba0a272b": "icoEtherReceivedPreFirstSale()", +"ba0a4ca9": "_safeGasStaticCall(address,bytes)", +"ba0a93a8": "getRankOnePlayer()", +"ba0b9788": "setTitulaire_Compte_7(uint256)", +"ba0bafb4": "currentWindow()", +"ba0bba40": "setup()", +"ba0bc2f4": "initialCardPrice()", +"ba0bf0c4": "weiMaxInvestment()", +"ba0bface": "managementBodyAddress()", +"ba0c1777": "ecoLock13()", +"ba0c9b54": "mcs()", +"ba0cf581": "findDispute(address)", +"ba0d291b": "CashMateToken()", +"ba0d46f3": "BoraToken(uint256)", +"ba0d94a8": "Bcigarcoin()", +"ba0df427": "sumOf(uint256[])", +"ba0e0f5e": "removeTrustedAccount(address)", +"ba0e6cc9": "removeVerified(address,address)", +"ba0e930a": "transferManager(address)", +"ba0f5b20": "getDarknodeBond(address)", +"ba0fbf0d": "_saleTokens()", +"ba102763": "etherToSendSecurityPool()", +"ba1066ed": "pendingAmount()", +"ba10db46": "transferEthHandleOwnership(bytes32,address)", +"ba112d50": "setDataEquip(address)", +"ba1162d7": "getFmLength()", +"ba119e5a": "SEBCToken()", +"ba11ecde": "preSaleOpen()", +"ba124401": "FrozenGuard()", +"ba13a572": "lottery()", +"ba14d606": "test(address,uint256)", +"ba151ad9": "USD_PER_TOKEN()", +"ba157d46": "setWebGiftEtherAmount(uint256)", +"ba15e52e": "getInfo(bytes20)", +"ba15fcaa": "Tremendoustoken()", +"ba16ae2d": "WBET()", +"ba16d600": "minReward()", +"ba16e00e": "bonusEnd05()", +"ba17e592": "performWrite1()", +"ba1803c1": "setCryptoJinglesContract(address)", +"ba181ac6": "setWhitelist(address,address)", +"ba1a2243": "setTokenPaymentCustomer()", +"ba1ad438": "newFee(uint256)", +"ba1af80f": "phase4Price()", +"ba1b44da": "getBoardRating(address,uint256)", +"ba1b6221": "calcUnMaskedGuEarnings(uint256,uint256)", +"ba1c0201": "evRefund(address,uint256,address,uint256,bool)", +"ba1c3b92": "setSalePeriod(uint256,uint256)", +"ba1ccbee": "getSupportedRolesCount()", +"ba1cd983": "unitCreationFee()", +"ba1d8d4f": "createAutoridadElectoral(bytes32,bytes32)", +"ba1f879f": "privateSale()", +"ba1fd9f4": "widraw(uint256,address,bytes32)", +"ba209dab": "rejectCertification(uint256)", +"ba20dda4": "getBeneficiary(bytes32)", +"ba21d62a": "Command(address,bytes)", +"ba2318ca": "totalSaleSupplyCap()", +"ba236abe": "getMyWinAmount(address)", +"ba255cd1": "liquidAllocatable()", +"ba25a585": "EventUpgradeTank(address,uint256,uint8)", +"ba25d944": "longDescription()", +"ba278e08": "setStartTime(uint256,uint256)", +"ba285f5d": "minimalPaymentInWei()", +"ba286ee3": "testRegisterCustomer()", +"ba2902fb": "rehancoin()", +"ba2a730b": "getAddressLastUpdate(address,address)", +"ba2a98f2": "closeZoneShop(bytes2)", +"ba2ab079": "changeEndPrivateSale(uint256)", +"ba2aee26": "addGains(address,uint256)", +"ba2d5c88": "MINBET_perTX()", +"ba2e84f9": "publicsalesCap()", +"ba2eb541": "isExpired(address)", +"ba2ee51f": "ICO_TOKENS_AMOUNT()", +"ba2ee65c": "manage()", +"ba2eebb4": "transferControl(bool)", +"ba2fa957": "markettingPercentage()", +"ba3019de": "fwdPaymentAndData(address,bytes)", +"ba3025d4": "epicenter_works_addr()", +"ba32348f": "reffUp(address)", +"ba32694c": "howCoin()", +"ba331eab": "tokenSetTransferFeeAbs(address,address,uint256)", +"ba33a876": "VBToken()", +"ba34251b": "usdToEthPrice()", +"ba344304": "Lydian()", +"ba344743": "_rawTransfer(address,address,uint256)", +"ba346d11": "ArenaPool()", +"ba34c8f1": "setrate(uint256)", +"ba353925": "paymentDisable()", +"ba35749c": "deleteOffer(bytes32,address)", +"ba35b1d3": "TxMessage(uint256,uint8,uint256)", +"ba35c0be": "changeSelectFight2DeathContract(address)", +"ba35f38d": "eip20TransferFrom(address,address,address,uint256)", +"ba3603fd": "usdPerMEth()", +"ba36f423": "att()", +"ba3717c0": "setStrF1F2(string,string)", +"ba376923": "Cez()", +"ba377731": "getSupplyBalance(address,address)", +"ba37caa4": "exchangeStaStb(uint256,uint256)", +"ba386f0b": "propertyIdToAuction(uint256)", +"ba38743b": "GrabUnallocatedValue()", +"ba38c599": "announced()", +"ba391bb2": "perTokenPrice()", +"ba399ad2": "isInLockStage()", +"ba3b60ed": "rawVotes()", +"ba3c0067": "getTopPlayers(uint256)", +"ba3d0cb5": "retentionMin()", +"ba3dc67c": "startingPoint()", +"ba3eb50f": "TokenEther()", +"ba3eb61d": "InterfaceData(address)", +"ba3eefc5": "makeInvestment(uint256)", +"ba3f41da": "beginCodeUpdate()", +"ba3f56f8": "startFinalStage2()", +"ba3f5a12": "tokenMultiplier()", +"ba3f8f2c": "getTokenPriceUSDWEI(uint256)", +"ba3f8f31": "ReleasingScheduleLinearContract(uint256,uint256,uint256)", +"ba3fc155": "ownerWithdrawal(uint256,address)", +"ba3fd8f7": "currChampion()", +"ba3fdb8f": "_createArt(uint256,address)", +"ba40aaa1": "setGiveAway(uint256)", +"ba414fa6": "failed()", +"ba41dc5b": "setwalletOne(address)", +"ba425379": "Ico_rejected(string)", +"ba429f33": "getRewardsContractHash(address)", +"ba42c8e5": "resolveSupervisorVote(uint256)", +"ba42fdb9": "handleLastProposal()", +"ba437b5d": "KOKC()", +"ba441560": "SetRedeemRate(uint256)", +"ba4442ab": "ReassingTokens(uint256,uint256)", +"ba44593c": "set(bytes32,address)", +"ba44bc0b": "UserMinMaxCrowdsale(uint256,uint256)", +"ba44f6a4": "RETHEN1()", +"ba452930": "stopPrivatePlacement()", +"ba454d60": "changeMaxEntries(uint256)", +"ba457dd1": "BreezeCoin()", +"ba45b0b8": "transfer(address,address)", +"ba4611d9": "getClaimCount()", +"ba463acd": "createPackage(uint256,uint256,uint256,string,uint256)", +"ba4670da": "onlyOwnerSetAdvWallet(address)", +"ba46adeb": "exerciseLong(address[2],uint256[7],uint8,bytes32[2])", +"ba470738": "changeRejectSetting(uint256,bool)", +"ba47c5f8": "inpreSalePeriod()", +"ba4823e1": "SoundcoinsToken(address)", +"ba485844": "func_0C0E()", +"ba487e62": "newCampaign(uint32,uint96,uint16,uint16)", +"ba48e057": "setBatchTransferLimit(uint256)", +"ba490a03": "SpudToRotator(uint256,address)", +"ba49e21f": "getAttoTokensAmountPerWei(uint256)", +"ba4a579d": "canBetOnRound(uint256)", +"ba4bcd72": "currentAdmin()", +"ba4c206e": "removeCertificationDocumentInternal(address,bytes32)", +"ba4c825e": "_transfer(address,address,uint256,bool)", +"ba4d0c99": "conversion(uint256)", +"ba4d573f": "addSelctFight2Death(uint256,uint256,uint256)", +"ba4e1c38": "airdropTotalQty()", +"ba4feabd": "createEscuela(uint256,address)", +"ba50f965": "add_creature(uint256,address)", +"ba5129b9": "ethRateChanger()", +"ba515481": "maturity_refund(address[],address,uint256[])", +"ba51a6df": "changeRequirement(uint256)", +"ba51b1b4": "setTokenSymbol(string)", +"ba5233b2": "setPartnerQuota(address,uint256)", +"ba52688d": "approveCycle(bool)", +"ba53d9f3": "getSpartansOnTheBattlefield(address)", +"ba554374": "updateTranchRate(uint256,uint256)", +"ba5595d3": "numTokensAuctioned()", +"ba5673c3": "getChildrenLength(bytes32)", +"ba56763e": "getBidInfo(uint64)", +"ba56f6ee": "god()", +"ba57225d": "LogCrowdsaleEnd(bool)", +"ba575a39": "KOREKCHAIN()", +"ba59a75e": "bn128_map_to_G1(bytes32)", +"ba59f784": "ChessLotto()", +"ba5a2d33": "exitPool(address)", +"ba5abaf8": "startFightB(uint256,uint256,bytes4)", +"ba5b0e95": "CPCEIcoDeposit()", +"ba5bea09": "addPendingPayment(address,uint256)", +"ba5c3a9d": "distributionList(uint256)", +"ba5c5d93": "address_book()", +"ba5c9bd6": "processReinvest(address,uint256,uint256,uint256)", +"ba5cb281": "uint32At(bytes,uint256)", +"ba5cb999": "RealTotalSupply()", +"ba5e286b": "getShipProductCount()", +"ba5eceb6": "borrowerBalance(address)", +"ba5f3e46": "getPlayerBetData(address)", +"ba61021f": "calcBonus()", +"ba612493": "getCurrentPassportLogicVersion()", +"ba61810c": "startNextPhase()", +"ba61a960": "Launched()", +"ba61ee09": "myRefBonus()", +"ba622884": "isManufacturerAddress()", +"ba622ddc": "getPlayerAnimals(address)", +"ba625fe6": "WineCoin()", +"ba629113": "contract12function2()", +"ba6361fb": "payme()", +"ba639d5a": "supplyRound1()", +"ba63abd6": "getPInvestedSumByRound(uint256,address)", +"ba63defb": "etherToSendJackpot()", +"ba63e25a": "canBeWhitelisted(uint256,bytes32)", +"ba6489e5": "getAccountReferrer(address)", +"ba65fa25": "getMerchantPublicKeyByAdmin(address)", +"ba66d7a6": "MDKICO(uint256,uint256,uint256,address,address)", +"ba6763ce": "withdrawBalanceFromStorageContract()", +"ba68693f": "PinZhiCoin()", +"ba693c86": "addsmartContractAdress(address)", +"ba69fcaa": "deleteStringValue(bytes32)", +"ba6a7e27": "AOABANK()", +"ba6afc50": "getIncentivesPool()", +"ba6b285a": "neuroChainAddresses(address)", +"ba6b5f96": "getChild(address,uint256,address,uint256)", +"ba6bbe55": "getPublicSaleTokensAvailable()", +"ba6c6490": "unlockTeamTokensTime()", +"ba6ca603": "ALDToken(uint256,string,uint8,string)", +"ba6cc6c3": "open(bytes32,address,uint32)", +"ba6dc506": "throwSlammerEvent(bytes32,address,address,uint256[10])", +"ba6f30e4": "sellCenturion(uint256,uint256)", +"ba6f4ab0": "burnCarbonDollar(address,uint256)", +"ba6ff8ad": "RTokenBase(uint256,string,string,uint8)", +"ba70d049": "DonateAdded(address,address,uint256)", +"ba70d54a": "ACTIVE_STATUS()", +"ba71c7f5": "setPricesManually(string)", +"ba723f99": "stopBid()", +"ba723fe2": "getRequestHash(bytes,bytes,uint256)", +"ba72cc36": "teamLock()", +"ba730e53": "getSellPrice(uint256)", +"ba7314ae": "AncestorHellNotes()", +"ba7325be": "indexOf(string,string,uint256)", +"ba736a99": "fetchOrderByIdWithWithPayer(string,address)", +"ba73737d": "AndiosCoin(uint256,string,uint8,string)", +"ba7435d9": "knightEquity()", +"ba75bbd8": "front()", +"ba75d0de": "minimumHydroStakeDelegatedUser()", +"ba76000e": "Add_Patient(uint256,uint256,string,string,string)", +"ba7607bf": "LogBidAccepted(bytes32,address,bytes32,address,bytes32,uint256)", +"ba76938b": "freezeDeposit(uint256)", +"ba76bfb7": "checkWithdrawalAvailable(address)", +"ba76e19b": "EthereumPrivateToken()", +"ba770154": "getUserPictureByUsername(string)", +"ba7705aa": "setIPFS(address,string,string)", +"ba773a70": "icoPrice_()", +"ba77ddc9": "PresaleFinalized(uint256)", +"ba780759": "EtherSportCrowdsale(uint256,uint256,address,address,address)", +"ba78a98a": "timelockEndTime()", +"ba78c773": "declineBid(string,uint64)", +"ba7a8149": "lockEtherPay()", +"ba7b37d4": "updateBalance(uint256)", +"ba7b86b9": "KhuuKoin()", +"ba7badeb": "nextVersion(address,bytes32)", +"ba7bd2aa": "withdrawTokens(uint256,uint256)", +"ba7bde55": "totalSupplyShares()", +"ba7bf7ff": "addcoinfee()", +"ba7c4af8": "revokeMyId(bytes32)", +"ba7cc631": "createKingdom(string,string,uint256,address,bool)", +"ba7ce849": "drawPool(uint256)", +"ba7d0b3c": "ETE()", +"ba7d619c": "returnTokensFromHoldAdditionalAddress(uint256)", +"ba7da724": "devVUPDestination()", +"ba7dc45f": "_removeOperation(bytes32)", +"ba7e424d": "isIcoEnded()", +"ba7e7cab": "getApprovalCount(uint256)", +"ba7ed2ff": "setMinInvestment(uint256)", +"ba7efcdd": "investmentLimit()", +"ba7fb1df": "getAddressToken()", +"ba8029bb": "setStartSale(uint256)", +"ba809390": "AccountReaderAdded(address,address)", +"ba80d787": "contributor()", +"ba80e058": "landingDiscount_ppc()", +"ba8118b1": "goNextRound()", +"ba81522f": "maxBlockDrift()", +"ba816496": "last50plusblocknr()", +"ba818f8d": "affiliateFee()", +"ba827243": "YangMaoZhuangYuan(uint256,string,uint8,string)", +"ba82bde2": "bindusertop(address,address)", +"ba82c897": "updateRewardToken(address,uint256)", +"ba82f55d": "ethsoccer48()", +"ba838b01": "EdCoinToken()", +"ba83c970": "closeSell()", +"ba83d63d": "getBidFreelancer(uint256)", +"ba847552": "isAddrCanCallServer(string,address)", +"ba84cb3f": "MobileApp()", +"ba85571c": "getPlayerInfoByAddress(address,uint256)", +"ba8661a2": "TimestampScheduler(address)", +"ba873f60": "setAssociation(address,bytes32,bytes32)", +"ba8747b3": "addReport(uint256,string,string)", +"ba874999": "getGameEngineAddress()", +"ba87ebfa": "IMDEXsetOwner(address)", +"ba87fdd4": "getSenderCities(address)", +"ba885446": "tokensPerAllocation()", +"ba88d537": "_getSenderStatus(uint256)", +"ba8a141f": "EnterCoin()", +"ba8a86c2": "whiteListedAddressPresale(address)", +"ba8ad39e": "grantToAllowBlocking(address,bool)", +"ba8af655": "returnAmountPledged(uint256,address)", +"ba8b7152": "BlockOfLifeToken()", +"ba8b9712": "adminRefundTokens(address,uint256)", +"ba8bb22a": "LIRAX(uint256)", +"ba8c0c9d": "getPropertyLastUpdater(uint16)", +"ba8c6980": "hasGrantAccess(address)", +"ba8cded7": "Bet(uint256)", +"ba8d045a": "tobuy(uint256,address,uint256)", +"ba8ef244": "getEvaluation(uint64)", +"ba8fb567": "startPhase2(uint256)", +"ba904eed": "removeRegistrar(address)", +"ba9072ea": "crownedTime()", +"ba907b7e": "testFailCreateWithParentsSameItemId()", +"ba90d553": "getContractsByType(uint256)", +"ba90f022": "modifyRecord(uint256,string,string,string,bytes32,int64)", +"ba9130a6": "execCustom(address,bytes,uint256,uint256)", +"ba91d87b": "mintForWorker(address,uint256)", +"ba922e04": "Karma(uint256)", +"ba92d382": "factory_address()", +"ba9316b7": "getExp(uint256,uint256)", +"ba9334a0": "testCombinators()", +"ba9398e9": "publicSaleEtherRaised()", +"ba93d5e5": "setBankrollAddress(address)", +"ba93d980": "swapOpen()", +"ba941154": "newTapProposalFromCompany(uint256)", +"ba944118": "TMXGlobalToken(uint256,uint256,string,string,uint8)", +"ba953bc8": "KanadeCoin()", +"ba95b235": "sayNo()", +"ba95d63a": "leftSharePriceRateOfIncrease()", +"ba95df98": "releaseUserPrivateBonusTokens(address,uint256,address)", +"ba967a84": "addInit(address,address,address,address,uint256,string)", +"ba976ae5": "marketToken2018()", +"ba982c41": "tokensUnsold()", +"ba996aca": "getPlayerLevel(uint256)", +"ba99d1a6": "RATE_DAY_0()", +"ba9a061a": "START()", +"ba9a4d6e": "hasAddressVotedInBallot(uint32,address)", +"ba9a8b37": "convertibleTokenCount()", +"ba9a91a5": "SALT()", +"ba9a9e03": "StorageEnabled()", +"ba9ac37f": "mul(uint16,uint16)", +"ba9bb827": "CONTRIBUTION_MIN()", +"ba9bf757": "getPlatformBalance()", +"ba9c4637": "getMyPoints()", +"ba9d0638": "receivedCount()", +"ba9d407a": "GetAddressByName(bytes32)", +"ba9d4c09": "devuelveAppaddr(bytes32)", +"ba9e0907": "XJF()", +"ba9e9a86": "binarySearchForChallenge(uint256,uint256,bytes,uint256,bytes32[])", +"ba9ea413": "purchaseCostFiat(uint256)", +"baa0181d": "batchCancelOrders(address[5][],uint256[6][],uint256[])", +"baa0b806": "content(uint256)", +"baa23ac1": "SpecialDrawingRight()", +"baa24fce": "rightVotes()", +"baa28752": "listCenturion(uint256)", +"baa290d9": "DANSToken(address,address,uint256,uint256,uint256,address,uint256,address,uint256,address,uint256)", +"baa2e587": "confirmReception()", +"baa2edaf": "tokensDataProviders()", +"baa2ff01": "get_blockhash(uint256)", +"baa30f7b": "jackpotCount()", +"baa32a94": "NiuYanToken(uint256,string,uint8,string)", +"baa371d0": "DigiPulse()", +"baa3f7ee": "claimedOf(address)", +"baa3fc48": "calculate_proportional_reward(uint256,uint256,uint256)", +"baa40cd4": "mintForPrivateFiat(address,uint256)", +"baa40e5c": "getVote(string)", +"baa416b6": "CorsariumCore(address[],uint256[])", +"baa46bdd": "_createDistrict(uint256,uint256,uint256,uint256)", +"baa47694": "submitBlock(bytes32)", +"baa5eb5c": "isDspRegistered(address)", +"baa61df0": "tokenContractClaimTokens(address)", +"baa6ab81": "priceByPeriod()", +"baa70a8b": "LBCoinJ(string,string,uint256)", +"baa79dd3": "ethOdinRate2()", +"baa7d1f3": "MULTISIG_ETH()", +"baa83568": "requestColuLocalNetworkOwnershipTransfer(address)", +"baa8529c": "give(bytes32,address)", +"baa90366": "isThereACoinAtCoordinates(uint16,uint16)", +"baa92a05": "returnsenderbalance()", +"baa93b56": "crownIfFreeze(address)", +"baa9a8a9": "EtherbotsCore()", +"baa9da15": "soldTotal()", +"baa9e531": "totalTokensBought()", +"baaa3eef": "setDistValues(string,string,string,string,string)", +"baaa8b9a": "actualGotTokens(address)", +"baaac593": "LogWaterTree(uint256,address,uint256)", +"baab7a3a": "isSuccessDoneState()", +"baab89d5": "getLockedStructAmount(address,address,uint256)", +"baac2178": "MNLTToken()", +"baac274d": "getCustomerBalance(address)", +"baac4316": "sendTokensToMe(address,uint256)", +"baac5300": "createTokenProxy(address)", +"baad0828": "changeControllerInBntyTokenContract(address)", +"baad1532": "getMatchServer(uint256)", +"baad6c2e": "setInfoTier(string)", +"baadbca0": "newTickerQuery(string,bytes32)", +"baae172c": "setRefreshLockBalance(address)", +"baaee21f": "getLastN(bytes1,uint8)", +"baaeecb0": "getAllApproval()", +"baaefe5b": "priceInc()", +"baaf2d4f": "transferOtherERC20Token(address,uint256)", +"baaf4eef": "RESERVES_HOLDER()", +"bab1d921": "closeCurrentStage()", +"bab25514": "GRUToken()", +"bab2b5e9": "percent3()", +"bab2f2b5": "containsOnlyAlphaNumerics(string)", +"bab2f552": "currentCycle()", +"bab41142": "takerApproves(uint256)", +"bab41293": "getDataColla_001_002(string)", +"bab42b54": "test_campaignRules()", +"bab4e3b1": "getOwnedToken(address,uint256)", +"bab54f69": "_isExcluded(uint256)", +"bab5714c": "sendTeamSupplyToken(address,uint256)", +"bab58ec9": "periodITO_tokenPriceUSD()", +"bab5b64e": "spenderAddress()", +"bab5e2af": "LogBTHFoundationWalletChanged(address)", +"bab6d101": "checkClaimTokenByIndex(uint256)", +"bab6f9bf": "generateRevokeStakeForDelegationSchemaHash(uint256,uint256)", +"bab7b237": "totalRelease()", +"bab86ea8": "test(string,string)", +"bab8bd04": "clearAllRequests()", +"bab8fe40": "claimableTokens()", +"bab92a29": "get_owner_planets(uint256)", +"bab94366": "AppUpdated(address,string,address,uint256,bool)", +"bab95dba": "_getFeeAndNetAmount(uint256)", +"bab99890": "CPollo()", +"bab9c00c": "SmartSignature()", +"bab9fc63": "testFailCreateWithParentParentNotInUse()", +"baba4811": "recieveFunds()", +"babb019d": "enact_liquidation_less(address,uint256,uint256)", +"babb3e0b": "updateEthRate(string,string)", +"babbb78d": "teamTokenWallet()", +"babcc04c": "getLogsNum()", +"babcc539": "isAllowed(address)", +"babd222f": "addressToLarePurchased(address)", +"babd7012": "activeSupply()", +"babddb4c": "FundReturn(address,uint256,bool)", +"babe9394": "EasyMineToken(address,address,address,address)", +"babf2b2d": "EscrowMyEtherEntityDB()", +"babf5e37": "changeFree(uint256)", +"bac02609": "buyEarlyWhitelist(address)", +"bac03cd7": "totalContractBalance()", +"bac0b029": "BifreeToken()", +"bac0b276": "allocate(address,uint256,uint8)", +"bac127b9": "SecondAddressBalance()", +"bac15203": "unPauseContract()", +"bac18f9a": "handToBitmap(uint32)", +"bac1e2e0": "testBitsAndSuccess()", +"bac1e9f6": "getChannelSize(address,uint256)", +"bac21a22": "totalSupplyLimit()", +"bac37239": "addMarketMakerAddress(address,address)", +"bac506e0": "rf()", +"bac55edd": "setDnsDomains(string,string,string)", +"bac6068c": "inject(address,uint128)", +"bac6241f": "LookRevToken(address,uint256)", +"bac74b4f": "ISLABCoin()", +"bac756e1": "PresaleToken(uint256,uint256)", +"bac79651": "setTokens(address,uint256)", +"bac7bb9f": "checkaddress()", +"bac7c252": "BTC10kon54()", +"bac97647": "uncleSafeNr()", +"bac9dbab": "ROLE_COO()", +"bacbe2da": "cancelVote(uint256)", +"bacc2753": "vestTo(address,uint256)", +"bacc2c42": "participate(uint256,uint256,uint256,uint256,uint256,uint256)", +"bacc58d7": "backManusOwner()", +"baccc92b": "RegulatorIfc(address)", +"bacd2a90": "mallocBudget(address,uint256)", +"bacd2e97": "executedCount()", +"bacd70b7": "callSomeFunctionViaInner3()", +"bacd8d88": "soldPercent()", +"bace4cf6": "Distribution(uint16,uint256,address)", +"bacef685": "createTokens(uint32,address)", +"bacf3f65": "secondPeriodOfICO()", +"bacf5f84": "_addBaseStats(uint256,uint8[8])", +"bacfddbc": "isDepositAddress(address)", +"bad09457": "test3(address[5],uint256[5],uint8,bytes32,bytes32)", +"bad16031": "isBlackjack()", +"bad19ead": "copyToAllUnits(uint256,uint256,uint256,uint256,uint256)", +"bad1f08f": "open(uint256,uint32,uint256)", +"bad21d65": "startInstantInterface(address,address,uint256,uint256,uint256,address,uint256,address,uint256)", +"bad2d6d2": "removeBlacklist(address,address)", +"bad4d623": "setAltDeposit(uint256)", +"bad568b1": "allowanceBcoupons(address,address)", +"bad69502": "getProviderRateHistory(uint256,uint256)", +"bad6b379": "changeCUSEaddress(address)", +"bad751bc": "createPeerReviewContract(address,bytes)", +"bad7726c": "checkDividendPaymentAvailable()", +"bad7d46a": "CreateOffer(uint8)", +"bad84416": "eligibleVotes(address)", +"bad845e6": "deleteProductInternal(bytes32)", +"bad84c9e": "getNumTicks()", +"bad9643b": "balance_wirthdraw()", +"badaba27": "packTable(uint256)", +"badae9b4": "addArgumentToRequestUint(int256,uint256,bytes32,uint256)", +"badb2e5a": "UpgradeRigETH(uint8,uint256)", +"badb97ff": "adminBurn(uint256)", +"badbaa3c": "setCallData()", +"badbbf34": "RBACWithAdmin()", +"badc9a52": "adminChanged(address,address)", +"badca131": "kill_and_withdraw(address)", +"badcf391": "sendMail(bytes16,bool)", +"badcfbcf": "withdrawSnowflakeBalance(address,uint256)", +"baddee6f": "listMultipleItems(uint256[],uint256,address)", +"bade1c54": "proposeReparameterization(string,uint256)", +"bade1ef9": "Birth(address,uint256,uint256,uint256)", +"bade6033": "propose(bytes,uint256)", +"bade777c": "Marked(address,address,address,address,uint256,uint256,bytes32)", +"badec5b4": "HK168coin()", +"badf3de9": "durationForBetAmount(uint256)", +"badf8b37": "TwoFactorAuth(string,string)", +"badfa573": "setAllowTransferTimestamp(uint256)", +"badfedf2": "genEthsRec(uint256,uint256)", +"bae07416": "canBeValidated(uint256)", +"bae0c536": "addSaleAgent(address)", +"bae118f4": "setHouseInfo(bytes32,uint256,string,bytes32)", +"bae18880": "getReceipt(address,uint256)", +"bae18ac3": "setUpgradeFee(uint256)", +"bae1c1ac": "doSendWithSignature(address,uint256,uint256,bytes,uint256,bytes,bool)", +"bae1cc74": "multiSubWithdraw(address[])", +"bae2718f": "WithNoArgumentConstructor()", +"bae2b6ab": "setLedgers(uint256)", +"bae2ddb5": "XBHX()", +"bae37857": "getEndTimeOfSession(uint256,uint256[],uint256)", +"bae3791e": "weisHardCap()", +"bae3c066": "sendInternally(uint256,uint256)", +"bae3c27f": "weiLimit()", +"bae4f466": "roundKeys()", +"bae5e693": "partnersAllocation()", +"bae5f9dd": "takerAffiliateFee()", +"bae61714": "setICOWeek3Bonus(uint256)", +"bae667bc": "tokenOf(bytes32)", +"bae6c2ad": "queueSize()", +"bae6d62b": "manualOverride()", +"bae70892": "setMyPubKey(bytes32,bytes32,bytes32,bytes32,bytes32)", +"bae72565": "readAddress(address,uint256)", +"bae728b1": "setUnholdDate(uint256)", +"bae78d7b": "getEntry(uint256)", +"bae804a7": "transferFromSender(address,uint256)", +"bae8d888": "createArtefact(uint256)", +"bae944ba": "globalUnlockTime()", +"bae971e4": "getWithdrawEtherAmountValue()", +"bae99efc": "ICO_MAX_CAP()", +"baea0431": "getMsgDataAfter()", +"baea3a21": "addToWhitelistInternal(address)", +"baeb0718": "checkin()", +"baeb8cad": "deleteGroup(address,address)", +"baeb91ae": "invest(uint128)", +"baebcaf0": "getApp(address,uint256)", +"baec1ced": "depositPresaleWithBonus(address,uint256,uint256)", +"baec25ee": "ZYHToken()", +"baecd693": "sendTokensAfterBuy(address,uint256,uint256)", +"baed8bb1": "getAddressValues(bytes32)", +"baee193d": "changeCountryLimit(uint256,uint256)", +"baeeddfc": "Ublasti(uint256,string,string)", +"baef73e9": "expiryOf(uint256)", +"baf00f76": "removeAllSubUsers()", +"baf03586": "calculateBaseGet(uint256,uint256,bool,uint256)", +"baf05a87": "hodl_interval()", +"baf11cab": "isCommitted(uint256,address)", +"baf1256f": "withdrawToPlayer(address)", +"baf30051": "token_issued()", +"baf38352": "buy_for(address)", +"baf3a4d4": "distDivRate()", +"baf3d262": "Tickets_Sold(string,uint256)", +"baf3ef13": "disableNode()", +"baf44453": "FundAccount(address,address,address)", +"baf4960d": "createPlanet(uint256,address,uint256,uint256,uint256,uint256,uint256)", +"baf4ec53": "sumICOStage3()", +"baf4f6d1": "_endContestIfNeededStalemate()", +"baf539ee": "changeGasLimit(uint256)", +"baf5fbff": "PreIcobonusEnds()", +"baf652fe": "bonusThresholdWei()", +"baf6f9ca": "saleis(bool)", +"baf6fd32": "setintertoken(address)", +"baf73c0f": "holdingsOf_BULL(address)", +"baf79eb4": "removeDealInternal(bytes16)", +"baf8809b": "releaseTimeLock(address)", +"baf8c622": "_SUTokenContract()", +"baf9b369": "post(bytes)", +"baf9c5a2": "initialSupplyPrivateSale()", +"baf9d07b": "addAuthorization(address,address)", +"baf9d0cf": "getRoundAwardTicketNum(uint256)", +"bafa090d": "breakup(address,uint256)", +"bafa9c9d": "FighterUpdated(uint256)", +"bafb8e83": "marketSupply()", +"bafc1437": "getPurchased(uint256)", +"bafc7fe9": "zero_fee_transaction(address,address,uint256,uint256)", +"bafcea6f": "dataSourceGetYellowCards()", +"bafd244f": "setAmbassadorAddress(address)", +"bafdaf5e": "_getTargetBlock(uint256)", +"bafdebf3": "getServerAddress(string)", +"bafe648d": "BerithCoin(uint256)", +"bafedcaa": "lastRewardAmount()", +"baff4609": "lockTokenForNode(uint256,uint256,uint256)", +"baffa903": "getStartPrice()", +"baffed2a": "disallowWrite(uint256,address)", +"bb004abc": "reserveManager()", +"bb005d4f": "setPlayerResearch(address,uint256)", +"bb007db9": "getSalaryTokenCount(address,address)", +"bb00c8f9": "ownerMintAmount()", +"bb00faca": "bonus02()", +"bb00fc55": "bookEarnings()", +"bb013206": "addNewCertificate(uint256,bytes32,bytes32)", +"bb0165b1": "setContractAddress(uint256,address)", +"bb01aa39": "unreserve(uint32)", +"bb01fb1f": "Issue(uint64,address,uint256)", +"bb043d53": "MinimalPayValue()", +"bb053484": "getInitializeFeePerEthInAttoethValue()", +"bb056781": "purchaseGas(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bb057c5e": "proposedImplementation()", +"bb05ca52": "JadeCoin()", +"bb061fb5": "addWhite(uint256,uint256,uint256,bool)", +"bb07576d": "voteToUpdatePrenup()", +"bb083c2b": "substractFee(uint256,uint256)", +"bb08b247": "showAuction(string)", +"bb08c6c3": "o_desafiante(bytes14)", +"bb0936f7": "first_bonus_amount()", +"bb09adbb": "privGoal()", +"bb0a420a": "user(address,address)", +"bb0a64b6": "batchTransfer(address[],uint256[],address)", +"bb0bcbff": "AddPoolMember(address,string)", +"bb0bef19": "validateFile(address,uint256,bytes,bool,bool)", +"bb0c08b6": "getDebitNonce(bytes32)", +"bb0c8298": "minimumAmount()", +"bb0c8893": "claimUnrelatedTokens(address,address)", +"bb0ce7d3": "TotalHoldersAmount()", +"bb0d6fb6": "noCount(uint256)", +"bb0d7f9a": "listTCC()", +"bb0db551": "add_32(uint32,uint32)", +"bb0e01fd": "isError(uint8)", +"bb102aea": "totalSupplyCap()", +"bb10b2f1": "PRE_SALE_BONUS_PER_CENT()", +"bb119f6e": "productInfo(uint256)", +"bb11ed7e": "rescueTokensInMultiplePolls(uint256[])", +"bb128575": "StopSell()", +"bb13245f": "decimalsMultiplier()", +"bb133331": "trusteeContract()", +"bb1488d8": "_newAuction(uint256,uint256,uint256,uint256)", +"bb1583fc": "isBatched()", +"bb158dd5": "addToTokenLocked(address[])", +"bb15ac8e": "readBool(bytes32)", +"bb1630f2": "getAllSigs()", +"bb169da5": "Diploma_landing_page()", +"bb1757cf": "claim(address,bytes)", +"bb17a938": "toRlp(uint256)", +"bb17c8cc": "round2StartTime()", +"bb17e050": "Nullify(address,address,address,address)", +"bb18705c": "_buildSettleId(bytes,bytes)", +"bb1953fe": "updateSeed()", +"bb1a473b": "VOLUME_25()", +"bb1a5aad": "flipFinalizedSwitchTo(bool)", +"bb1ad687": "gateKey()", +"bb1adf9b": "DURATION_BEFORE_RESTORE_UNSOLD()", +"bb1af82b": "Test3()", +"bb1b21ed": "RefCommission(uint256,uint256)", +"bb1b99ce": "isCurrentUserAdministrator()", +"bb1c9351": "redeemNativeToken(bytes32,address)", +"bb1cc065": "buy_lovelock_withLOV(bytes32,string,string,string,uint256)", +"bb1d1cf9": "tier_rate_3()", +"bb1d45fc": "setOtherManager(address,uint8)", +"bb1d7ffa": "weddingdate()", +"bb1dfeca": "buildId3(address,uint256)", +"bb1e54bc": "TokenCrowdsale(address)", +"bb1eeb59": "totalWeiAmountSale2()", +"bb1f602e": "FailingDeployment()", +"bb205c84": "getDownVoteCount(bytes12,bytes12)", +"bb210372": "getPresale(uint256)", +"bb221cc8": "Hadescoin(address)", +"bb221e4b": "FuelToken()", +"bb22d75c": "PROMOTION_PROGRAM()", +"bb23e3a9": "arr(uint256,uint256,uint256)", +"bb23ef74": "setOwnerTestValue(uint8)", +"bb2408e6": "PERCENT_DELIMITER()", +"bb245283": "getHatchDurationMultiByGeneration()", +"bb24f0dc": "operationsLength()", +"bb2559ca": "initialTokenBalanceFetched()", +"bb256f68": "VaultCountPerProcess()", +"bb25b143": "DrawReadyToPayout(uint32,uint8,uint8,uint8,uint8,bytes32)", +"bb25bd15": "addWin(address,uint256)", +"bb25fd7f": "SODIUMTOKEN()", +"bb262080": "JaroSleep(address,uint256)", +"bb26d9d1": "requestCosign(address,uint256,bytes,bytes)", +"bb27e19e": "getlen(bytes32,bytes32)", +"bb280cba": "addBackers(address,uint256,uint256)", +"bb287679": "mainFabricAddress()", +"bb28c3f2": "setNonce(string,uint256)", +"bb29998e": "test(address)", +"bb2a51d1": "setSecurityGuard(address)", +"bb2a7d0c": "addVestingSchedule(address,uint256[],uint256[])", +"bb2aebe3": "createAssetPack(bytes32,string,uint256[],bytes32[],uint256)", +"bb2bded0": "trinityDataContract()", +"bb2c5ad7": "hasRandom()", +"bb2ce2f5": "DeedClosed()", +"bb2ced1b": "previousFounders()", +"bb2ced25": "startPoll(address,address,bytes32,bytes32,uint256,uint256)", +"bb2d713e": "sells(uint256)", +"bb2dc863": "getChildBlock(uint256)", +"bb2de15a": "TicketsBought(uint8,address,uint16[])", +"bb2e6904": "hopeCoin(uint256,string,string)", +"bb2eb4d2": "ONE_PERCENT()", +"bb2eb982": "impl_rewardsFactor()", +"bb2ebf83": "CostChip(address,uint32)", +"bb2f159b": "read_i32()", +"bb2f3228": "EOCSToken(uint256,string,string)", +"bb305ef2": "getBondOwner(uint256)", +"bb3084db": "ICOStarted(uint256)", +"bb30d796": "releaseAllocation(address)", +"bb316f06": "contributeForAddress(address)", +"bb32b6f8": "receivedCWC(address,uint256)", +"bb33072f": "refundToInvestor()", +"bb33d729": "unpauseSale()", +"bb33e730": "MoveTokens(address,address,uint256,string)", +"bb340909": "initPecul()", +"bb34534c": "addressOf(bytes32)", +"bb34e57c": "ROLE_BURN()", +"bb35783b": "move(address,address,uint256)", +"bb35b29c": "MintIND(address,address,uint256)", +"bb35f7ee": "rocketTravelTimeByResource(uint256,uint256)", +"bb3611e7": "BonusWhiteListCrowdsale(uint256)", +"bb36a233": "customtransfer(address,uint256)", +"bb36e5d0": "returnExternalPayments(address,bool,bool)", +"bb36ef7b": "addManyToKyc(address[])", +"bb370bad": "orderWasValid(uint256,uint256,uint256,uint256)", +"bb371fdd": "setMaxDeposit(uint256)", +"bb37a162": "payAdvertisers(bytes32)", +"bb389952": "unlockFounder()", +"bb38be10": "notifyCharge()", +"bb397161": "createNonRepeatableVpfFactory(string,bytes32,uint256,int256[])", +"bb39a960": "trade(address,uint256,address,uint256)", +"bb39c85f": "getTotalOwedTokenRepaidToLender(bytes32)", +"bb39ea60": "MIN_ACCEPT_ETHER()", +"bb3a304f": "setFundingLock(bool,address)", +"bb3a77ae": "ROLE_ARBITER()", +"bb3b2a35": "withdraw_4()", +"bb3b8dca": "getCertificateHash(bytes)", +"bb3ce7fe": "DepositHolder()", +"bb3cf577": "AddressListed(address,uint256)", +"bb3d13c5": "addValidation(address,bytes32)", +"bb3d5af2": "GetClaimCount()", +"bb3d9326": "YTC()", +"bb3e409a": "buyEggs(uint256,address)", +"bb3e443b": "FDataToken()", +"bb3e5b0a": "setPI_edit_34(string)", +"bb3f0390": "min_inv()", +"bb3f5330": "revertFunds()", +"bb3f5b7d": "totalTransfer()", +"bb3ff0bd": "TITSCOIN()", +"bb41f421": "payerPercent()", +"bb424892": "minimumCost()", +"bb427d8a": "enterBet()", +"bb42de92": "getSubscriberContentCount()", +"bb43a11e": "getHashOf(address)", +"bb440715": "getPoolBonusExpertFactor(uint256)", +"bb440b82": "funComputeRoundPrice()", +"bb445084": "getRDividends(address)", +"bb449782": "setCommunityAccount(address)", +"bb44e08d": "updateOrderNumber(uint256)", +"bb452ea7": "objectDoublet()", +"bb4534f1": "addrecruit(address,address,address,address)", +"bb453d5a": "CBCToken()", +"bb45d09d": "getCurrGameInfo()", +"bb471d73": "getRealAmountBonus(uint256,uint256,uint256)", +"bb472219": "resetGame()", +"bb472c93": "bet2deltaOf(uint256)", +"bb476637": "deliverTokensAdmin(address,uint256)", +"bb48156a": "preSaleRound()", +"bb4872de": "stoppable()", +"bb48d190": "upgradeToPremium(bytes32)", +"bb4a7f18": "getAllBusinessOwners()", +"bb4b236a": "CSToken(uint256,string,uint8,string)", +"bb4b7bd0": "listForSale(uint256,bytes32)", +"bb4c006c": "checkDeletable(address)", +"bb4c9f0b": "multiSend(address[],uint256[])", +"bb4cbd0b": "gracePeriodStopBlock()", +"bb4d0cb5": "FSC3()", +"bb4d4b2f": "addVestingAccount(address,uint256,uint256)", +"bb4d7cd1": "tag(uint256,string)", +"bb4d9e22": "WithBonusPeriods()", +"bb4e3f4d": "add(uint8,uint8)", +"bb502bac": "EthbetOraclize(address,address,uint256)", +"bb502dd9": "checkExchangeSupported(bytes32)", +"bb504317": "divest(address,uint256)", +"bb50c67a": "crowdsaleRunning()", +"bb510a77": "createChannel(address,uint256)", +"bb5166e7": "getPaymentType(address,uint256)", +"bb5196d6": "setParams(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb51de39": "IDEAL()", +"bb51f32d": "withdrawTeam()", +"bb52ca2c": "getOrgClaimsCount(address)", +"bb537ced": "matchesDelay()", +"bb540231": "totalFartsReceived()", +"bb542ef0": "setOwnerWallet(address)", +"bb5530c4": "updateCampaign(uint256,string,string,string,address,address,address,string)", +"bb56a683": "guaranteedBuyersBought()", +"bb572896": "consolationRewardsRequiredFaith()", +"bb57349c": "handleSaleClaimCallback(address,uint256)", +"bb575333": "sessionEndTime()", +"bb582db6": "mgmtBodyAddress()", +"bb584a3a": "EventCancelAuction(uint256,address)", +"bb59b48c": "payableWeiReceived()", +"bb59d68c": "DariaRotkoToken()", +"bb5a1149": "myReferee()", +"bb5a4f4c": "placeBet(uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bb5a7ca0": "extendEventStartsTime(bytes32,uint256)", +"bb5adf14": "setProxyManagementContract(address)", +"bb5b3edc": "emergencyWithdraw(uint256,bool)", +"bb5b5203": "toggleActions()", +"bb5b586b": "usdPerKEther()", +"bb5b6aa4": "myInner2()", +"bb5bf0c3": "WisdomWorldStandardToken(uint256,string,uint8,string)", +"bb5c3821": "total_ICO_supply()", +"bb5d3bcb": "tokensPromotion()", +"bb5d40eb": "isValid()", +"bb5d69a0": "setEns(string,address)", +"bb5ddb0f": "sendMessage(address,bytes)", +"bb5e0696": "LongTermReserveMinted(address,address,uint256,uint256)", +"bb5e3d3b": "doThing(string)", +"bb5e5875": "InseeCoin()", +"bb5e78a4": "HasSigningPermission(address)", +"bb5e9dec": "get30Artworks(uint16)", +"bb5e9eab": "thirdWeek()", +"bb5f4629": "orders(address,bytes32)", +"bb5f747b": "isWhitelistAdmin(address)", +"bb5f95fe": "LSECoin()", +"bb602e80": "Volkscoin()", +"bb6198dd": "getOrCacheTargetReporterGasCostsWasCalled()", +"bb632244": "btcs()", +"bb642f65": "seedCreatedCount()", +"bb64c09b": "KIMEX(address,address)", +"bb64c79e": "SearchTimeBlocknumber(string)", +"bb64e420": "getTransactionByTransactionId(uint256)", +"bb6534a9": "AMOUNT_TeamSupport()", +"bb67be65": "AFUN(address,uint256)", +"bb68b86f": "maxTokensToDistribute()", +"bb6954ce": "BourseToken()", +"bb6996a5": "swapWinner(uint256,bool,uint256)", +"bb6a0853": "GreedPit()", +"bb6a0f07": "tasksCount()", +"bb6a1427": "testThrowRestartEnforceRevisions()", +"bb6a55bd": "_mintToken(address,uint256)", +"bb6ad6ef": "withdrawTokenId(uint256)", +"bb6af3da": "limit9()", +"bb6af543": "setJackpotPayRate(uint256)", +"bb6b13a1": "tier1()", +"bb6b38bb": "setAdminAddressForComissions(address)", +"bb6b4619": "SendETC(address)", +"bb6c1178": "RentToken()", +"bb6c4827": "burnThis(uint256)", +"bb6d0132": "End_Promotion()", +"bb6d203c": "spend(address,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"bb6d8c77": "contractPoweredUp()", +"bb6e7de9": "endContract()", +"bb6f0f0f": "fetchAllCandidatesBySnapshotBlock(uint256)", +"bb6f175f": "SimpleAquaPriceOracle(uint256,uint256)", +"bb6f6c15": "protectedDenominationOfOrigin()", +"bb7029a9": "gameCollapse()", +"bb702c8e": "discard()", +"bb707059": "approveMany(address[])", +"bb70abfa": "_computePVPBeneficiaryFee(uint256)", +"bb718861": "scheduleCall(address[2],bytes4,bytes,uint8,uint16,uint256[6])", +"bb71a7c3": "makeInvestment(address,address,uint256,uint256,address)", +"bb72680c": "getHasPermission(address,string,string)", +"bb72b12d": "oldOwnerProfit()", +"bb731f98": "Excalibur()", +"bb73703f": "delRoleForUser(address,string)", +"bb7436a7": "getUsersDroidsIds()", +"bb74a5a0": "testValidationOfDoubles()", +"bb74b4e6": "TOKEN_SUPPLY_OWNER()", +"bb74dcda": "isRefunded(address,address)", +"bb750232": "allowReceiver(address)", +"bb75a2a9": "throwMe()", +"bb76d8a5": "TimeLock()", +"bb777028": "PRE_ICO_BONUS_TIME_3()", +"bb777498": "calculateId(string,string,string)", +"bb77b136": "planetAuction()", +"bb77d7d8": "ConunToken(uint256,string,uint8,string)", +"bb784140": "AragonTokenSaleMock(uint256,uint256,address,address,uint256,uint256,uint8)", +"bb7859b5": "periodThree()", +"bb785f0e": "AirDropPayBitsR1(address[])", +"bb78d159": "approveTokenControlInfo(uint256)", +"bb79428c": "RateUpdate(string,uint256,string,string)", +"bb7963e3": "hasArbiterVoted(uint256,address)", +"bb7a6dba": "vestingHasStarted()", +"bb7c15ab": "createDog(uint256,uint256)", +"bb7c62cb": "getReferrerBonusTokens()", +"bb7cb80b": "dropOffset()", +"bb7d064f": "automatedReport(uint256[])", +"bb7d4f65": "ICOFFSHORE()", +"bb7d715b": "startEthToCentsRateUpdateCycle()", +"bb7dd72d": "finishMintingStruct()", +"bb7fa4ac": "sellCeiling()", +"bb7fb08b": "getContributor(address,uint256)", +"bb7fde71": "mint(address,uint256,uint256,string)", +"bb7fe5c9": "LotteryAdmin(address)", +"bb7ff992": "requestSellforETH(uint256)", +"bb806dc9": "initial()", +"bb813a9b": "KkkTokenSale(uint256,address)", +"bb814746": "ICO_TWO()", +"bb814e9e": "versionExists(bytes32)", +"bb818ea6": "advancedNETH(uint256,string,string)", +"bb81926d": "_applyCommission(uint256)", +"bb822605": "calculateTokensTier(uint256,uint256)", +"bb826e50": "maxBlockActions()", +"bb828f11": "setChallengeRewardsPercent(uint256)", +"bb83a01f": "MyTALToken()", +"bb843219": "closingDateFunding()", +"bb84d362": "splitProfitVIP_only_Dev()", +"bb850e01": "_transferOwnershipOnBuy(address,uint256,address)", +"bb85931b": "eSTATERToken(address,address)", +"bb862588": "getCET6ScoreById(uint32)", +"bb86d8fe": "CPGPEREGRINE_FTL_SPEED()", +"bb878f2a": "ProposalAdded(uint256,uint256,string)", +"bb87b5f8": "getPersonalStatus(address)", +"bb87c1f2": "getAllowedUsers(address,uint256)", +"bb889341": "ZiberToken()", +"bb88c016": "decreaseApproval(uint256,address,uint256)", +"bb898233": "getAct()", +"bb8ab48c": "Bluechip()", +"bb8b2b47": "getUserContribution(address)", +"bb8bbc90": "ContractEFT()", +"bb8bcc46": "crowdSaleCap()", +"bb8be064": "HardwareToken()", +"bb8bedc9": "setMasternodeCandidate()", +"bb8c256a": "ecadd(uint256,uint256,uint256,uint256)", +"bb8c7ce4": "ContributionReceived(address,bool,uint256,uint256,uint256)", +"bb8c869d": "contestOver()", +"bb8c9797": "claimReward(string)", +"bb8d35ce": "medibitToken()", +"bb8dc735": "getNonceCompareOp()", +"bb8e8f46": "isExecutionAllowed()", +"bb8f0dd2": "PonziSeller()", +"bb8f712f": "generateGame(bytes32,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bb90617b": "toUINT112(uint256)", +"bb90cec2": "setNewRound()", +"bb911607": "percents(uint256,uint256)", +"bb912454": "setKNCPerEthRate(uint256)", +"bb913f41": "_setImplementation(address)", +"bb91f8ae": "ownerTransferAllEther()", +"bb925c19": "_selectWinner(uint256)", +"bb94392e": "getRemainingTokenForArticle(string)", +"bb945177": "produceTokens(address,uint256,uint256)", +"bb9453a5": "assetProperties(address)", +"bb95024c": "DevilsCoin()", +"bb95d992": "blockhashes(uint256)", +"bb963c8a": "transferLibOwnership(bytes,address)", +"bb969132": "getLandEstateId(uint256)", +"bb9694f3": "Eth()", +"bb971094": "finishAirdrops()", +"bb979c3d": "getHotelsByManager(address)", +"bb9932a7": "addressReserveSupply()", +"bb996043": "returnPtSafeXLarge()", +"bb99999c": "TokenLinked()", +"bb99dec1": "MoldCoin(uint256,address)", +"bb9b02a8": "evLockFund(address,uint256)", +"bb9b13d8": "getTotalInterestAmount(address)", +"bb9ba82d": "Florijn(uint256,string,string)", +"bb9c3f2b": "minWager()", +"bb9c6c3e": "verify(string)", +"bb9e1edc": "ethBaseBalance(address)", +"bb9e3547": "setTokenCost(uint256)", +"bb9e37ec": "TitleApproved(uint256)", +"bb9efd5e": "bulk(address[],uint256[])", +"bb9efdc6": "QUAK()", +"bb9fc9ed": "transferStmpsToOwnerAccount(address,uint256)", +"bba02bf8": "LyuTestToken()", +"bba04dc9": "resetExplicitState(uint32,int64,int256,uint64,int8)", +"bba231ce": "_isPast(uint256)", +"bba2e907": "prepaymentFee()", +"bba33ace": "sellerCut()", +"bba45738": "setOmegaContract(address)", +"bba46031": "LOFO()", +"bba4a876": "setStateDistributing()", +"bba4b31e": "birthBlock()", +"bba4c282": "RaiblocksClassic()", +"bba4e4c0": "AddressForReturn()", +"bba4e9bd": "getTraitCount()", +"bba52516": "tokenTimelock()", +"bba570cb": "getDatURL(string)", +"bba5ad87": "registNameXid(string,uint256)", +"bba5b24e": "buyTokens(uint8)", +"bba65ed1": "isbit(uint256,uint256)", +"bba7a1ab": "getTokenVolumebasedBonusRateForPhase1(uint256)", +"bba80923": "msub(uint128,uint128)", +"bba8a065": "insert(uint8,uint8)", +"bba8b342": "PresaleMidexToken()", +"bba90086": "updateAndTransferFrom(address,uint256,string,uint256,uint256)", +"bba91ea7": "getHomeadvIndex(uint256)", +"bba9a9f6": "zeroFeesTransfer(address,address,uint256)", +"bba9cfe1": "soldBeforeUnsoldAllocation()", +"bba9dc60": "deactivateProvider(address)", +"bba9ffce": "TransactionFailed(address,address,uint256)", +"bbaa7345": "changeDivestmentFee(uint16)", +"bbaa7a57": "getHeroAttributes(uint256)", +"bbaaa787": "claimable(address,bool)", +"bbaac1e8": "privateSaleTokensAvailable()", +"bbab867c": "setSubContractAddresses(address,address)", +"bbac78a9": "setImmutableOwnership(address)", +"bbad490f": "phase_3_bonus()", +"bbad6172": "ICOZ()", +"bbadb845": "updateProduct(uint256,string,uint256,uint256,uint256)", +"bbaefe9f": "bytePrice()", +"bbafb379": "updateBatchStartTime(uint256,uint256)", +"bbb01c9c": "privateIcoMinimumContribution()", +"bbb0c054": "foundersVestedPayment()", +"bbb0d58e": "_createNeighbors(int32,int32)", +"bbb104cf": "FucksToken9()", +"bbb1c4c0": "withdrawForFiveYear()", +"bbb21c4d": "explore(uint256,uint256)", +"bbb28a65": "contributors_count()", +"bbb37f60": "purchaseLeader(uint256)", +"bbb37f76": "registerTier2Users(address[])", +"bbb44989": "Token2GB(address)", +"bbb50b78": "vraWallet()", +"bbb655b6": "_setGasPrice(uint256)", +"bbb7259c": "CrowdsaleLimit(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bbb73e3e": "GetBuyPrice()", +"bbb7d310": "getCompte_19()", +"bbb7eb64": "addInventories(uint256,uint256,uint256,uint16)", +"bbb896ad": "isCurrentAdmin(address)", +"bbb906f7": "TomSkin()", +"bbb92642": "BotTradesToken()", +"bbba3333": "safer_ecrecover(bytes32,uint8,bytes32,bytes32)", +"bbbc0f55": "_price_tokn_ICO_first()", +"bbbc67d0": "getParticipantDestination()", +"bbbc77dd": "intersubtoken(address,uint256)", +"bbbd2953": "startNewBattle(uint256,uint256,uint256,uint256)", +"bbbdef70": "FreezoneToken()", +"bbbe1390": "getEmployerJobsForFreelancerInvite(address,address,address)", +"bbbeac89": "MastermindAlliancePublishingGroupToken()", +"bbbf8fbd": "increaseWeiRaised(uint256)", +"bbbf9384": "BATTLE_CASUALTIES()", +"bbbfc4db": "mulsm(uint256,uint256)", +"bbbff4fb": "updateMinAmountWei(uint256)", +"bbbff571": "changeKey(string)", +"bbc001c3": "alloc()", +"bbc0c1a2": "addOrg(string,string,string)", +"bbc0ebbf": "soldForFirst()", +"bbc10d1a": "distributeeBitcoinCashSmall(address[])", +"bbc2402d": "startCrowdsale(uint256)", +"bbc2986c": "setPrice(uint16,uint256)", +"bbc2fcf5": "TOKEN_PER_ETH()", +"bbc30ad8": "getGalleryData(uint256)", +"bbc32820": "autoPay()", +"bbc39ab6": "readCharityAddress()", +"bbc42b3f": "orderToContractor(uint256)", +"bbc43d41": "pay(uint128,address,bytes1)", +"bbc49130": "Milestone_OpenTheIco(string)", +"bbc53086": "csvConcat(string,string,string,string)", +"bbc5aa5b": "maxTransferAmount(uint256)", +"bbc5d3d9": "setQuickConverter(address)", +"bbc6049d": "etherSpin()", +"bbc620a8": "setNewWithdrawCommission(uint256)", +"bbc6351e": "MMMC()", +"bbc64582": "getVotesCount(address,uint256,bytes32)", +"bbc6df30": "getRoundInfoByID(uint256)", +"bbc6eb1f": "getDefaultDonation()", +"bbc7d0b9": "marketingPool()", +"bbc7f045": "ZenCoin()", +"bbc84d1a": "voteWorth()", +"bbc878c4": "totalSeraphims()", +"bbc894a1": "GuoCoin()", +"bbc8e3cb": "disallowTransfers(address[])", +"bbc94fda": "priceProgression()", +"bbc9626b": "move_o(uint8,uint8)", +"bbc9f09a": "payPartners()", +"bbca0a89": "c_endTime()", +"bbcac1c3": "vipBrokerFee()", +"bbcb4e3a": "TokenERC20(uint32,string,string)", +"bbcbce8e": "MIN_GOLD_TO_UPGRADE()", +"bbcbe572": "d(address,address)", +"bbcbefd0": "unset()", +"bbcc69ef": "withdrawTokensByInvestors()", +"bbcc8cea": "SaiSaiToken(uint256,string,string)", +"bbcd0f02": "endorseClaim(string,string,string,address,address,string)", +"bbcd5bbe": "setTokenContract(address)", +"bbcdd139": "initExploit()", +"bbcded7a": "left73(uint256)", +"bbce2c17": "lastBurn()", +"bbce3fc2": "getLastBet()", +"bbce67ca": "lastPlayTime()", +"bbce877b": "getbuymoney(address,uint256)", +"bbced0d0": "newTopic(string)", +"bbcef175": "end_redeem_period()", +"bbd0c939": "computePrice(uint256,uint256)", +"bbd1e186": "addModule(string)", +"bbd1e1fc": "editionActive(uint256)", +"bbd2e01e": "betsLength()", +"bbd2e059": "impl_transferMSI(address,address,uint256)", +"bbd31db3": "openAll()", +"bbd32de0": "massTransfer(address[],uint256)", +"bbd3684c": "reservedteamtoken()", +"bbd37e37": "RICO()", +"bbd37ef3": "getReportingParticipant(uint256)", +"bbd39ac0": "coinBalanceOf(address)", +"bbd3b27c": "loveEvent()", +"bbd3b2ab": "inrSessions()", +"bbd418e6": "testConcatStorage4Bytes()", +"bbd425df": "bestUser()", +"bbd4271f": "setRateAndStart(uint256,uint256,uint256)", +"bbd46303": "changeStage(uint8,uint256,uint256,uint256)", +"bbd4e8c9": "numDeposits()", +"bbd4edb1": "updateRatingCustomer(string,bool)", +"bbd4f854": "buyShares(bytes32,uint8,uint256,uint256)", +"bbd5301a": "_devteam()", +"bbd53bf7": "fairsale_protectionOFF()", +"bbd5d174": "LogGame(string,string,string,string)", +"bbd6dd48": "getUserTokenInfos(uint256)", +"bbd74748": "Ethraffle_v4b()", +"bbd7a3c7": "scripts(address)", +"bbd8b602": "getOracleOutcomes(bytes,address[])", +"bbd95c32": "inArray(uint256[],uint256)", +"bbd974cc": "maxAllowedTakerBetsPerMakerBet()", +"bbd9a5fa": "grantPermission(address,string)", +"bbda1e9a": "BicycleToken()", +"bbda33d9": "getGameName()", +"bbdaebe2": "transferFromInternal(address,address,uint256)", +"bbdb31cb": "challenge(uint256,address,bool)", +"bbdb57c3": "batchTransferORSS(address[],uint256[])", +"bbdbd31e": "beneficiaryAndBirth(bytes32,int256,bytes32)", +"bbdc02db": "gameType()", +"bbdc04d8": "getDealData(bytes32)", +"bbdc7709": "startDispute()", +"bbdd366a": "DECIMALS_MULTIPLIER()", +"bbddaca3": "setReferrer(address,address)", +"bbdefbbb": "AWMVoucher()", +"bbdfbfba": "delivered()", +"bbe00af5": "beneficiars()", +"bbe18d43": "betClosed()", +"bbe2b727": "burnWholeBalance()", +"bbe42771": "closeDeed(uint256)", +"bbe430de": "available(address,address)", +"bbe437eb": "endICO_w2()", +"bbe4fd50": "getNow()", +"bbe562b0": "multiplication(uint256,uint256)", +"bbe5d9d4": "addSpace(uint256,uint256,bytes)", +"bbe61730": "get_sale_arbits_total()", +"bbe7180b": "envio_dinero()", +"bbe7221e": "orderbookContract()", +"bbe86e6a": "sendTokensToOne(address,uint256)", +"bbe8a9b6": "registerSecretBatch(bytes32[])", +"bbe93d91": "mul(int256,int256)", +"bbe9c7d6": "takePromille(uint256,uint256)", +"bbe9f99d": "isTeamMember(address)", +"bbeadcad": "invalidateVotingAtIndex(uint256)", +"bbeb5923": "joinFee_()", +"bbeb76bc": "setMultipleParticipantWhitelist(address[],bool[],uint256[])", +"bbec170f": "lockAllAccount()", +"bbec3768": "createOrder(uint128,uint16,uint256,uint8,uint256)", +"bbec9e1b": "deletePriceCredentialItemId(bytes32)", +"bbececa9": "left78(uint256)", +"bbed7177": "getContentTimestamp(uint256)", +"bbee1ab7": "forgiveIt(address)", +"bbef83cf": "getContractNameById(bytes32)", +"bbef8624": "calculateWithdrawalRequestWitnessHash(address[],uint256[])", +"bbef86b8": "PayForServiceCHL(uint256)", +"bbf02b00": "level_8_percent()", +"bbf0f065": "keepEth()", +"bbf14d67": "tier3Timestamp()", +"bbf1e6d0": "SetMiningEnable()", +"bbf2a9a3": "changeAcct3(address)", +"bbf2ee4e": "lockAddress(uint256)", +"bbf3ae00": "ccExchangeRate()", +"bbf48d6f": "convertReward()", +"bbf58f4d": "foundersVault()", +"bbf59a41": "personal_withdraw()", +"bbf646c2": "ethAddr()", +"bbf7585c": "getDistributionAt(uint256)", +"bbf76802": "purchaseApprove(address)", +"bbf78026": "SetMemberInfo(address,address,bytes32)", +"bbf89803": "addBuyer(address)", +"bbf9cd8b": "EACCoin()", +"bbfa6153": "getRegulatorLevel(address)", +"bbfad256": "updated(uint256)", +"bbfb2f7a": "getEndtime()", +"bbfbaaf8": "getWorkSecondsInProgress()", +"bbfbe6b6": "discountedMiningDifficulty(address)", +"bbfcc86b": "getHistEthRate(uint256)", +"bbfdc3c4": "logicStatic(address)", +"bbfe6b75": "externalCall(address,uint256,bytes,uint256,uint256)", +"bc0111a8": "initEnsRigistrar()", +"bc014bb9": "earlyBackers()", +"bc019eed": "getAffiliate(address)", +"bc01b767": "freezeTransfersUntil(uint256)", +"bc02844c": "totalRemaining(uint256)", +"bc032967": "getRetailerByAddress(address,address)", +"bc03a31e": "superManager(address)", +"bc04056a": "LockedDayAdded(address,uint256,uint256)", +"bc0409bf": "addTokens(bytes32,uint256)", +"bc04562d": "Reclaimer(bytes32)", +"bc04cb0f": "FEED1()", +"bc04d77b": "datasetHub()", +"bc055227": "ownerOfPiranha(uint256)", +"bc05529b": "SaleDeadline()", +"bc058968": "updateThingData(bytes32[],bytes32[],uint88)", +"bc05d087": "registerProduct(uint256,string)", +"bc063e1a": "MAX_FEE()", +"bc064863": "getRequestorAddresses()", +"bc070e83": "minimumBuyIn()", +"bc084de9": "CrowdsaleAuthorizer(address,uint256,uint256,uint256,uint256,uint256)", +"bc08afd9": "WebOfTrustToken(address,uint256)", +"bc09b5ec": "fundPreIco()", +"bc0aaff2": "setzBytes32(bytes32)", +"bc0aca61": "setFeeAccount1(address)", +"bc0ae61e": "GazeBountyCoin()", +"bc0b45fa": "OSPN()", +"bc0c868c": "stocksOf(uint256)", +"bc0cd8d3": "BOOCOIN()", +"bc0e7adb": "testThrowsDisownNotOwner()", +"bc0eaf0a": "calcAmountAt(uint256,uint256)", +"bc0f920a": "AuthSuspend(bool)", +"bc0fb9a0": "predictWinner(uint256,uint256,uint256)", +"bc1013db": "m_totalWorkerPoolCount()", +"bc101ffe": "twentyPercentWithBonus()", +"bc104f24": "compareItemSlots(uint256,uint256)", +"bc10a667": "euroRaisedICO()", +"bc10ce84": "Test(int256)", +"bc1123fe": "isUInt256ValidIn64(uint256)", +"bc112fa3": "ALC_FUNDATION_ADDRESS()", +"bc11f72c": "DABcoin()", +"bc120fe7": "whitelisted(address,address)", +"bc126ba1": "totalCents()", +"bc1292a0": "BonusChange(uint256)", +"bc129a98": "accountedTokenSales()", +"bc12d19d": "maxCapTokenPresale()", +"bc12e3d7": "getAuction(uint64)", +"bc1351ba": "has_contract_started()", +"bc13e3a6": "controller2()", +"bc14016b": "removeAllOps()", +"bc148094": "PostAdded(address)", +"bc1558be": "MANHATTANPROXY3RDAVE()", +"bc15a2dd": "BEAXY()", +"bc15be93": "firstRoundCosmosDiscount()", +"bc15e5fe": "get_next_global_audit_document(bytes32)", +"bc16272d": "requestRegistration(bytes32)", +"bc168c90": "_setIPFSHash(bytes32,string)", +"bc174df3": "ProofOfCryptoNick()", +"bc17991d": "restoreBalances(address[60],uint256[60],uint256[60])", +"bc17a0b4": "PAST()", +"bc17bd7e": "SelfDestructible(address,address)", +"bc17e669": "exiteJugador(address)", +"bc186dc9": "unlockBalanceByIndex(uint256)", +"bc18f727": "galleryFive()", +"bc197c81": "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)", +"bc19bcbf": "submitBallotWithPk(bytes32,bytes32)", +"bc19bce5": "resolveName(string)", +"bc1a3810": "thelnwaonCoins()", +"bc1af71d": "_maxTokenSoldPreICO()", +"bc1c002c": "call_contract(address,address)", +"bc1c58d1": "contenthash(bytes32)", +"bc1c9888": "CoOwnerSet(address)", +"bc1e9ca3": "USD_CENT_PER_TOKEN()", +"bc1ea063": "LogContractOwnershipChangeInitiated(address)", +"bc1f71e1": "depositKncForFee(address,uint256)", +"bc2010cc": "feesC()", +"bc2017f3": "adjustPriceOfCountryPlayersAfterWin(uint256)", +"bc201a9d": "addSupport(address)", +"bc208057": "enter(uint256,uint256,uint256)", +"bc215cb6": "BBTokenBox()", +"bc21ce9d": "Aggregation()", +"bc22df1a": "buySpaceshipUpgrade(bytes5,uint16,uint8)", +"bc22f570": "poolsToCreate()", +"bc231983": "Temp()", +"bc24300e": "_borrowToken(address,uint256,uint256,address,address,bool,bool)", +"bc244c11": "shut(address,bytes32)", +"bc244fc9": "systemAddress(address)", +"bc24612c": "claimableAmount(address,bytes4)", +"bc246a36": "hashState(address,uint256,uint256,uint256)", +"bc24d886": "setSail(uint256,uint256,uint256,uint256,uint256,uint256)", +"bc25415c": "produce(uint64)", +"bc25a810": "lock(address,bytes32)", +"bc25e2fd": "postProof(string)", +"bc2622b4": "addKeyValue(string,string,string,uint256)", +"bc2674b1": "LogExchange(address,address,uint256)", +"bc27c7bb": "buyZoAssets(bytes32)", +"bc28cfe4": "getTicketSet(address,uint256,uint256)", +"bc28d878": "rejectProposal(uint256)", +"bc294a7c": "setCEOAddress(address)", +"bc2a4dd6": "doBalanceOf(address)", +"bc2b6913": "donateSkin(uint128[],address[],bool[],uint256[])", +"bc2bbad7": "getMyNotes(uint64,uint64)", +"bc2be1be": "getStartTime(uint256)", +"bc2c3a12": "ValidContractAdded(address,address,uint256)", +"bc2c5873": "reinvestPartial(uint256,bool)", +"bc2d10f1": "finishEthGet()", +"bc2d87f5": "Set(string,string,address)", +"bc2eb3f8": "removeNode(bytes32,bytes32)", +"bc2fe07b": "transferCardOwnership(address,uint8)", +"bc300ed3": "setBounty(address)", +"bc304e55": "serverTransfer(address,address,uint256)", +"bc308233": "autoreleaseTime()", +"bc30e4ac": "abcLotto()", +"bc30f3f8": "modifyPlatformAddr(address)", +"bc339f41": "logMarketCreated(bytes32,string,string,address,address,address,int256,int256,uint8)", +"bc33f8ef": "commonRebate()", +"bc345e11": "Updated(address,address,bytes,bool)", +"bc346090": "DigipayToken()", +"bc346c9c": "Attack(address)", +"bc34f204": "getP3DBalance()", +"bc356eea": "VEN()", +"bc3574d4": "adjustSupply(uint256)", +"bc3589bf": "TOKEN_FIRST_PRICE_RATE()", +"bc358af9": "listItem(uint256,uint256,uint8,address)", +"bc35c57f": "setMinAmount2Round(uint256)", +"bc3619dd": "onBlockClose(address)", +"bc364d7b": "tokenVestingAddress()", +"bc367377": "setTokenBurnApproveReset(address,address,address,address)", +"bc376bbe": "unlockFor(address,uint256)", +"bc378a73": "getProposalsLength()", +"bc37d7b8": "setVendingFee(uint256,uint256,uint256)", +"bc389b6d": "callWithdraw(uint256)", +"bc38a991": "testInsert()", +"bc39d42f": "sigDestinationTransferFrom()", +"bc3a72a5": "ETHHToken(uint256,string,string)", +"bc3abbdb": "etherPerMiner()", +"bc3b0d31": "STCB()", +"bc3bc814": "changeTolerance(bytes32,uint256)", +"bc3c2846": "requestMediator(uint256,uint256,address)", +"bc3d9390": "printBlockHash()", +"bc3dde2f": "xxx(address)", +"bc3f7bcb": "moleculartechnologySupply()", +"bc3f931f": "getVote(uint256,address)", +"bc4006f5": "erc721Metadata()", +"bc40487c": "Hashnodetestcoin()", +"bc4076e9": "accountsReceiveableHeld()", +"bc408ec4": "ElixirUSD()", +"bc40b52a": "startPreICO()", +"bc40bac6": "getCrydrViewAddress(string)", +"bc41f298": "changeControllerAccess(address,bool)", +"bc427bc8": "setFreezeForFounding(uint256,address,uint256)", +"bc428ee2": "getTimeOutAuthentication()", +"bc431846": "getBetPriceID(uint256)", +"bc4447ef": "getBlackListStatus(address,address)", +"bc447a6d": "numDragonTypes()", +"bc448782": "setCrowdsaleAddress(address,address)", +"bc44e79d": "getStageWinners(uint8,uint16,uint8)", +"bc44ea9a": "setBank(address,uint256)", +"bc451844": "BONUS_DURATION_1()", +"bc456c42": "changePaymentAddress(address,address)", +"bc45d789": "setConfigUint(int256,bytes32,uint256)", +"bc466ab2": "setNewEnd(uint256)", +"bc467a3e": "ownedContract()", +"bc48bc22": "erc20TokenCount()", +"bc48f4be": "getLand(int256,int256,address)", +"bc499814": "generatePrefixedPreimage(bytes32)", +"bc4998b9": "eth2MNT(string)", +"bc4a2030": "getCurrentRate(uint256,uint256,uint256,uint256)", +"bc4af295": "spawnAssetWithCreator(address,uint256,uint256,uint256,address)", +"bc4afa67": "MBTCToken(address,uint256)", +"bc4b3365": "addFunds(address,uint256)", +"bc4b346d": "confirmQuest()", +"bc4bbad1": "updateCostETH(uint256)", +"bc4c594b": "tokenManagerAddress()", +"bc4d76e5": "EPay()", +"bc4d9b50": "minerLockedAmount()", +"bc4e3105": "unlockAddressDuringITO(address,address)", +"bc4f65a3": "addCity(bytes32,uint256,uint256)", +"bc4fcc4a": "redeemedAt(bytes32)", +"bc4fe17e": "addressToUser(address,address)", +"bc50c09e": "playAnyTriples(uint256)", +"bc517131": "walletVersion()", +"bc5213b7": "_setCurrentRate(uint256)", +"bc523229": "ShopDex()", +"bc525652": "templates(uint256)", +"bc52b43b": "buyinAs(address)", +"bc537bae": "getMeOutOfHereStocks()", +"bc53a93d": "E4Token()", +"bc54a168": "buyTokensOnInvestorBehalfBatch(address[],uint256[])", +"bc54f56f": "getTemplateDetails()", +"bc562b9e": "loseSponsor(uint32)", +"bc56a240": "walletEtherPresale()", +"bc56e749": "acceptProposal(uint256,address)", +"bc57275b": "EthCnyPrice()", +"bc579103": "totalPayed()", +"bc57d5f5": "transferFrom(address,address,uint256,uint256,uint256,uint256)", +"bc597d9f": "getProposalVotesCount(uint256)", +"bc59afe6": "scanMany(address[],bytes1[])", +"bc59d45a": "raisedWei()", +"bc5b75f4": "EtherWorldCup()", +"bc5bf5bf": "releaseVestingTokens(address)", +"bc5c0c67": "setDowntime(uint256)", +"bc5cfd4f": "lastBonusNumber()", +"bc5d066e": "changeCompanyWallet(address,address)", +"bc5d0f65": "beginExecution()", +"bc5dc168": "balanceOfLocked2Y(address)", +"bc5dfd7d": "getCompte_23()", +"bc5e4bb4": "_hasSkillsCheck(uint256)", +"bc5ff5e1": "oraclize_query(string,string[4],uint256)", +"bc602ab7": "removeRandomClass(uint32)", +"bc607f7b": "funcFromC2()", +"bc60878e": "total_received_amount()", +"bc60a365": "removeAdminAccount(uint256,address)", +"bc60ac60": "StefyToken()", +"bc61394a": "fillOrder(address[5],uint256[6],uint256,bool,uint8,bytes32,bytes32)", +"bc6171df": "sendETHToMultiSig(uint256)", +"bc62c89a": "getTrainerEarn(address)", +"bc62d8d8": "parse(string)", +"bc632a21": "creationTime(address)", +"bc634abb": "getDocumentProposals()", +"bc636707": "_explorationTime(uint8,uint8,uint8)", +"bc63cc90": "starCountsForOwner(address)", +"bc64059b": "exchangeEtherForHavvensAtRate(uint256,uint256)", +"bc643df1": "getIncludes(uint256,uint256)", +"bc649f4c": "grantProvider(address)", +"bc6548fb": "etherVault()", +"bc655f54": "getEndDate1()", +"bc65c559": "preIcoInvestment(address,uint256,uint256)", +"bc65d6f6": "getSubscriberContentHashes()", +"bc65e9e1": "PenCoin()", +"bc6633f7": "setSaleState(uint16,bool)", +"bc677b46": "viewOwner()", +"bc67f832": "setMessageSender(address)", +"bc68118b": "setDeveryRegistryAddress(address)", +"bc68fad9": "burnBalance()", +"bc697319": "minimumGoal()", +"bc698641": "relayBalance()", +"bc69dc89": "BenefyCashToken(string,string,uint8,uint256)", +"bc6a49a3": "LaunchRocketEvent(address,uint32,int64,int64)", +"bc6ac112": "calculateRegionInitialSalePixelPrice(address[16],uint256)", +"bc6b12b3": "odem()", +"bc6c06e7": "GoodfieldRetail(uint256,string,string)", +"bc6c4d0f": "totalVotesForCandidate(uint256)", +"bc6d68ee": "updateSubscription(address,address,bool,uint256)", +"bc6d80fa": "getLenderAmountForIncreasePositionAtTime(bytes32,uint256,uint32)", +"bc6e6604": "TOKENS_PER_ETH()", +"bc6f1699": "clockpos()", +"bc6f712a": "Attestation(string,bool,address)", +"bc6f9021": "maxCapTokens()", +"bc6fd6d9": "MINIMAL_WEI()", +"bc70ad19": "IMEXX()", +"bc713f1d": "AddPoolCoOwner(string,address)", +"bc71b0a6": "DeCenterToken(address,address,address,uint256,uint256)", +"bc71cdcb": "BAInvestor()", +"bc7202d7": "_updateSalePrice(uint256,uint256,address)", +"bc734f0f": "nextSeason()", +"bc735d90": "setOperator(address,address,bool)", +"bc73a7e4": "_preValidatePurchase(address,uint256,uint256)", +"bc73c971": "TierBasicDividendAddress(address)", +"bc7411b2": "chargeBonuses()", +"bc745a0d": "nextBonusStepLimit()", +"bc752b61": "buyTicket(uint256[],uint256)", +"bc76dca0": "GoWalletProject()", +"bc77b919": "_mySymbol()", +"bc77f476": "EVCChain()", +"bc78ac81": "setPet(string)", +"bc7a6e35": "_startAuction(bytes32)", +"bc7b3f86": "NewHighestBid(address,uint256,string)", +"bc7b6d62": "setResolver(uint256,address)", +"bc7b801e": "adminUpdateWorldSnapshot()", +"bc7c322c": "ratePerWei()", +"bc7c55ed": "listing()", +"bc7c72d7": "getmessagefromdovie()", +"bc7d8cb4": "EURSToken(address)", +"bc7dbc0d": "yearlyFee()", +"bc7dce06": "setETHPrice(uint256)", +"bc7e8d3c": "isDeholdable()", +"bc7f25e4": "getReferrerOf(address)", +"bc7f3b50": "getDelegate()", +"bc7f58b1": "addAgreement(address,bytes32,uint32,uint32)", +"bc802c83": "userManagerContract()", +"bc80bee8": "setFeerate(uint256[3])", +"bc81572c": "createPromoScene(address,string,uint256[],uint256)", +"bc81786f": "addBonusToClient(address,address,uint256,string)", +"bc81c97b": "failingRefund(address,uint256)", +"bc81f147": "set_iconiq_arbits_per_ether(uint256)", +"bc81f2f5": "eraseMatch(uint256)", +"bc82f4d3": "verifyEmailAddress(address,string)", +"bc83a6fb": "ekkoBlock1(uint256,string,uint8,string)", +"bc83d001": "DividendFacial()", +"bc8409a4": "investWallet()", +"bc843509": "toByte()", +"bc84a7ba": "getsometokenn(address,uint256)", +"bc851718": "hashLast()", +"bc855006": "SantaiToken()", +"bc85c055": "queryEOSTokenBalance(address,address)", +"bc85e064": "merchantWallet()", +"bc86a23a": "addPrimaryRecord(string,string,string,string,string,string,string)", +"bc87103a": "removeFunder(address,address)", +"bc8711fd": "getWinnersLength()", +"bc87b70f": "oldestGen()", +"bc88adc4": "getBuyerBalancesOfCurrentAuctions(address[],address[],address)", +"bc899015": "CappedCrowdsaleImpl(uint256,uint256,uint256,address,uint256)", +"bc8aa899": "we_token()", +"bc8b336d": "Ninecoin()", +"bc8bde64": "_creator()", +"bc8caa47": "resetDividendsCalculation()", +"bc8cb3f9": "destTokensReferals()", +"bc8d7a51": "gemsOfOwner(address)", +"bc8e1143": "processTransaction(bytes,uint256,address,bytes20)", +"bc8e9cde": "createGen0Horse(uint256,uint256,uint256,uint256,uint256,uint256,address)", +"bc8f3bcb": "ZeroDollarHomePage()", +"bc8fbbf8": "nuke()", +"bc903cb8": "getProposalInfo(uint256)", +"bc912e1a": "WHITELIST_SALE_PRICE()", +"bc9147a4": "Foundation()", +"bc916a50": "hasOwner(uint16)", +"bc921d54": "setImageData(uint256,uint16,uint256[])", +"bc92bea5": "getRandomItems(address,string)", +"bc944d9e": "newLowestAsk(uint256,address)", +"bc950708": "totalRaisedInCents()", +"bc95f178": "make(bytes32,bytes32)", +"bc9748a1": "pong()", +"bc978361": "setrteamVaultAddr(address)", +"bc97a8ac": "JackpotPayout()", +"bc97fd06": "updateMultipleUsersReward(address[],uint256[])", +"bc98b8b0": "getTTTInfo(uint256)", +"bc9904ec": "updateProfile(address,bytes)", +"bc99249e": "buy(address,bool)", +"bc9968a2": "dataController()", +"bc99c8be": "takerAddressAt(uint256)", +"bc99cc37": "maxInvestors()", +"bc99d04c": "YRQ(uint256,string,string)", +"bc9abe67": "completedFlag(uint16)", +"bc9aed8b": "TokensIssued(address,uint256,uint256,uint256,bool,uint256)", +"bc9b717e": "TokenPurchase(address,address,uint256)", +"bc9c278d": "IcoContract(address,address,uint256,uint256,uint256,uint256)", +"bc9c58f6": "countOrigins()", +"bc9cbcc8": "setImbalanceStepFunction(address,int256[],int256[],int256[],int256[])", +"bc9cc1fb": "getAllbetByGtype(uint8)", +"bc9d8d6a": "getLastWallet()", +"bc9da641": "testToUint8()", +"bc9e080e": "setVerifierManager(address)", +"bc9e6b0f": "_getClientLastPaidRate(address)", +"bc9f31e3": "mock_throwIfNotRemoved(address,address)", +"bc9ff567": "InternetWealth(uint256)", +"bca19900": "tokenHardcapIssued()", +"bca19ca0": "TAAS_CONTRACT()", +"bca1f81c": "lockOpen()", +"bca2b941": "setTokenPrice(uint256,uint256,uint256)", +"bca2bbc0": "EtherModifierMoops()", +"bca36985": "ExposureSettled(bytes32,address,uint256)", +"bca38dab": "createGuess(uint256,string,string,string,uint8,bytes,uint256,uint256,uint256[],bytes32[])", +"bca3eb24": "setCAO(address)", +"bca50515": "transferFromPreSigned(bytes,address,address,uint256,uint256,uint256)", +"bca51abf": "_detectStage(uint256)", +"bca53fa0": "AIHTeamLockContract()", +"bca58da8": "change_block()", +"bca60cf5": "getAgreement()", +"bca63e50": "mintTotal()", +"bca65475": "jugar()", +"bca6e8ec": "sendToReceiver(address,address,uint256)", +"bca7093d": "withdrawalPeriod()", +"bca72b59": "revealVote(string,uint256,uint256)", +"bca76131": "GoCryptobotCore()", +"bca77cd6": "YUBToken()", +"bca7a9e2": "lockToken()", +"bca7bd85": "getAllLockerInfo()", +"bca7e96b": "needsFinalization()", +"bca86986": "testSetup()", +"bca915c7": "createPromoPlayer(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bca9745c": "display_time(bytes32)", +"bca9a5c5": "getEmployee(uint256)", +"bca9adef": "vestedAvailableAmount(address,address)", +"bca9e546": "testControlCreateWithParentParentNotInUse()", +"bcaa218e": "myFrontEndTokens()", +"bcaa85df": "lockAccounts(address,bool)", +"bcab7ad2": "TimeDecayingTokenBoundary(uint256,uint256,uint256,uint256,address)", +"bcabb0c8": "getAllProposalVoters(uint256)", +"bcabb54c": "modifyCommunityInfo(uint256,string,string,string,string)", +"bcabbfb1": "startDonation()", +"bcae19f4": "base58Address(bytes)", +"bcae9d43": "theProxy()", +"bcaedade": "STANDARD()", +"bcafe9a9": "setIncreaseRepAvailableForExtraBondPayouts(bool)", +"bcb02b74": "testFailPushWhenStopped()", +"bcb0a787": "_setSchellingRoundSupply(uint256)", +"bcb0c2d7": "removeStakeholder(address)", +"bcb0c7c0": "nomParticipant(uint256)", +"bcb0f541": "setEarlyBirdDuration(uint256)", +"bcb1e4f7": "GetSellingTokenUnitPrice()", +"bcb2f8c6": "externalFundProposal(uint256)", +"bcb32828": "emissionAddress()", +"bcb39621": "currentSeason()", +"bcb3b5d2": "getGamblesList(uint256)", +"bcb593f1": "subOnStage(address,uint256)", +"bcb60fa9": "blockTx(bool)", +"bcb638cb": "parseImpressions(uint64,bytes)", +"bcb7b0d4": "pauseICOs()", +"bcb7f880": "DTCC_ILOW_2()", +"bcb83450": "createMarriage()", +"bcb98ba2": "changeChampsName(uint256,string)", +"bcba53f4": "_createBlock(uint256,uint256,uint256,string,address)", +"bcba6939": "transferERC20Token(address,uint256)", +"bcbb64c4": "softCapInToken()", +"bcbc1585": "_payRoyalty()", +"bcbc758a": "SixStandardToken(uint256,string,uint8,string)", +"bcbc9175": "prefixedHash(bytes32)", +"bcbd3bcd": "_editPersonalNote(string,uint256)", +"bcbd82e5": "rateForPreICO()", +"bcbd9881": "setFriendsFingersRate(uint256)", +"bcbdbf40": "SaleResumed()", +"bcbea1ad": "transferCardTo(address,address)", +"bcbf5b90": "totalSupplyForPresale()", +"bcbf7229": "resetVoteCount(uint256)", +"bcbfe43c": "openSaleCompleted()", +"bcc13d1d": "contributionMin()", +"bcc1480a": "canTransferBalance(address)", +"bcc17ca0": "getvalues(uint256)", +"bcc221d0": "getBonusValue()", +"bcc30409": "processPurchase(address,uint8,uint256)", +"bcc37dd4": "approvedAccount(address)", +"bcc38018": "recycleReward(uint256)", +"bcc38d59": "proxies()", +"bcc3af24": "hasVotedOnConstitutionPoll(uint8,address)", +"bcc44a72": "restoreTokenOwnership()", +"bcc46e83": "addCollateral(uint256)", +"bcc4e4ab": "getVesting()", +"bcc4f0ed": "isValidBuy(uint256,uint256)", +"bcc5601b": "BaktFactory(address,bytes32,address)", +"bcc5dce5": "stash(uint256)", +"bcc6092a": "MyEtherBank()", +"bcc673bd": "GeneralToken(string,string,uint8)", +"bcc70902": "create(address,uint256,uint256[],uint256)", +"bcc74a3b": "isAdminAddressExist(address)", +"bcc7900c": "SystemTest()", +"bcc7db5a": "cleanupErrorGame(address,uint256,uint256)", +"bcc91d61": "sendEther(address[],uint256[])", +"bcc941b6": "totalWinners()", +"bcc94309": "calculator(uint8,uint256,uint256)", +"bcc9ed6f": "MAX_PAYOUT_FRAC_TOP()", +"bcca1fd3": "changeVotingRules(uint256,uint256,int256)", +"bccb6157": "RedemptionWalletUpdated(address)", +"bccb8fc0": "vestTokens(address,uint256,address,uint256,uint256,uint256,bool)", +"bccc85e6": "receiveTokenLoot(uint256,uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"bccda810": "logicContractAddress()", +"bccdd9a6": "getValueFromCents(uint256)", +"bcce515d": "bulkMint(uint256[])", +"bccee504": "m_ETHPriceLifetime()", +"bccf0972": "egrToken()", +"bccf5aa4": "issueTokenAndTransfer(address)", +"bcd0b22a": "getSnapsLength()", +"bcd0ce28": "BitcoinUniversal()", +"bcd101a6": "getStartDates()", +"bcd2780b": "addValidContract(address)", +"bcd2feff": "biotorBiomassToken()", +"bcd396d1": "adminTrade(uint256[],address[],uint8[],bytes32[])", +"bcd3d8ca": "Collector(address,address,uint256)", +"bcd3ff89": "setGameSponsorInfo(address,uint256)", +"bcd4144b": "giveGreed()", +"bcd45a76": "HolderVacated(address)", +"bcd47934": "hasBiometric()", +"bcd5078c": "get_king_address()", +"bcd533ae": "newRefundProposal()", +"bcd5349f": "getCapacity(uint256)", +"bcd59261": "getDepositBlock()", +"bcd59b36": "secondsAfterStart()", +"bcd60f6c": "winningProposal(uint256)", +"bcd61c6a": "getGoodPrice(bytes32)", +"bcd789cc": "submitProposal(bytes32,string,address,address,uint256)", +"bcd85b6d": "getBackerStatus(address)", +"bcd88a61": "viewInvestorDividendPool()", +"bcd9cc60": "rejectCetification(address)", +"bcda2c0c": "_delete()", +"bcda601f": "Panicked(address)", +"bcdac66f": "Power()", +"bcdaea36": "setOpGas(uint256,uint256,uint256,uint256,uint256)", +"bcdb446b": "recoverEth()", +"bcdd6121": "increaseApproval(address,address,uint256)", +"bcdda53f": "TokenERC20(address,uint256,address)", +"bcddd64e": "CHECKPOINT_KEY()", +"bcde18f1": "fundingStart()", +"bcde87eb": "totalAmountOfTeatokensCreated()", +"bcdea6f9": "getStageMinimum(uint8)", +"bcdf266c": "EphronTestCoin()", +"bcdf43dc": "add_presale_arbits_sold(address,uint256)", +"bcdf569b": "finalize(address,address)", +"bcdfe0d5": "Hello()", +"bce0e87a": "payoutOnPurchase(address,uint256)", +"bce0fb22": "takeOwnershipWithIndex(uint256,uint256)", +"bce1cdc3": "getTotalEtherOfAllRounds()", +"bce24669": "removeGame(address)", +"bce2b9a3": "purchaseEgg()", +"bce2bb42": "setCoinTotalsContract(address)", +"bce2d16d": "koef()", +"bce32da4": "AndhraToken()", +"bce3cc67": "TokensReclaimed(uint256)", +"bce440d5": "TokensContractAddressSet(address,address)", +"bce49a90": "KKCToken(address)", +"bce4d041": "updateCancels(address,uint256)", +"bce5a209": "owners2tokens(address,uint256)", +"bce5fc53": "UIOCOIN(uint256,string,uint8,string)", +"bce6158d": "PTransfer(address,uint256)", +"bce643aa": "developer_new_symbol(string)", +"bce70868": "buildingIsPublic(uint256)", +"bce83d2a": "setWhitelist(address,address,string)", +"bce94649": "getRangeURI(uint256)", +"bce9ae3d": "NewDeal(uint256,address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bce9ccb9": "GetCitySnapshot(address,uint256)", +"bcea363d": "killContract(address)", +"bcea7ea0": "chargingGas(uint256)", +"bcead63e": "lender()", +"bceaf1fd": "CLOUDForGas()", +"bcec1df3": "ROLE_DISTRIBUTOR()", +"bcecbc65": "getSendersEth(address)", +"bceceefe": "startCrowdsale0(address)", +"bcecf667": "usdToEth(uint256)", +"bced2c8c": "InteractingTokenA(uint256,uint256)", +"bced9cfd": "guessSeed(uint256)", +"bcedb86c": "payQuarterFinalWinner(uint256)", +"bcee2dd4": "getFeeCollected()", +"bcee6eb9": "validateProposedThroneRules(uint256,uint256,uint256,uint256)", +"bceeb243": "getUserSSCeducationDetails(string)", +"bceee05e": "isSuperuser(address)", +"bceeeb9a": "SearchIPR(string,address)", +"bcef393a": "balanceOfVault(uint256,address)", +"bcef84b1": "getMaxBuy(uint256,uint256)", +"bcefafab": "changeAccountAddressForSponsee(address)", +"bcf0dd8e": "marketTransfer(address,address,uint256)", +"bcf0e1ea": "TerrariumCoin()", +"bcf175c8": "oraclize_cbAddress()", +"bcf2e323": "sort(bool)", +"bcf49c72": "dewhitelistAddress(address,address)", +"bcf599f1": "toUnixtime(bytes32)", +"bcf610bc": "UnsetAgenda(string,address)", +"bcf6558c": "releaseMid()", +"bcf685ed": "setAgent(address)", +"bcf68f87": "lockCrowdSale()", +"bcf6b3cd": "changeBaseValue(uint256,uint256,uint256,uint256)", +"bcf711b2": "CBXToken()", +"bcf7b67e": "emitFeesClaimed(address,uint256)", +"bcf7bd0b": "requireEnoughExpForBreeding(uint256)", +"bcf83634": "basecost()", +"bcfa87d2": "getBounsEarnings(address)", +"bcfaa79d": "mintTokens(address)", +"bcfb0140": "getTokenOrderDataHash(uint256[],uint256,uint256,address,address)", +"bcfb4ea1": "Million()", +"bcfb9b61": "voteProposal(uint256,bool)", +"bcfbd445": "getTrader(uint256)", +"bcfc5078": "bountiesKey()", +"bcfcb03e": "allocateFounderTokens()", +"bcfde742": "setHardCapCHF(uint256)", +"bcfe070f": "batchCancel(address[],uint256[])", +"bcfe8fb4": "ArtTokenBurn()", +"bcfea3e4": "BLMCH()", +"bcff702b": "salePause()", +"bcfffab8": "shopStoreNextId()", +"bd002e1e": "startPoll(bytes,uint256,uint256,uint256)", +"bd00b0c2": "changeDedeAddress(address)", +"bd0100c9": "registerAddress(string,address,address)", +"bd01c7d5": "buyTicketToDraw(uint256,uint256,address)", +"bd025a79": "setDoge(address)", +"bd02942f": "allocateAdvisors(address,uint256)", +"bd02d0f5": "getUint(bytes32)", +"bd02e4f6": "calcRandomNumberAndGetPreliminaryGameResult(uint256,uint64)", +"bd041c4d": "vote(address,bool)", +"bd042ca6": "GigsToken()", +"bd04923f": "values(uint256,uint256,uint256)", +"bd05c055": "timeBetweenGames()", +"bd05cb4d": "createContractItem(string)", +"bd06aa84": "WithdrawalContract()", +"bd06e777": "SCORE_REPORT_START_TIME()", +"bd075b84": "mint(address[])", +"bd079484": "getmortiesSinceLastHatch(address)", +"bd079a18": "YTPAY(uint256,string,string)", +"bd088724": "mintDone()", +"bd097e21": "fundContract()", +"bd09f117": "eidooWallet_()", +"bd0a0e85": "setLeaderboard(uint256,uint256)", +"bd0ae405": "voterReward(address,uint256)", +"bd0af85d": "pay(address,address)", +"bd0b65e4": "sub_id(string,uint256)", +"bd0c6307": "contrExit(uint256[])", +"bd0cac13": "updPool(uint8,uint256)", +"bd0cc4ee": "reverseSplitTokensAfterDistribution(uint256)", +"bd0e5d07": "deposit4()", +"bd0e6a0f": "startICO(bool)", +"bd0fda3d": "EntityCount()", +"bd102430": "blacklister()", +"bd102993": "CurrentStageUpdated(uint256)", +"bd119967": "add_rating(uint256,uint256)", +"bd11e933": "wingsTokenRewardsPercent()", +"bd129b92": "batchFillOrders(uint256[],bytes[])", +"bd12a007": "InterfaceId_ERC721Metadata()", +"bd131a78": "firstAuctionsExtendableDuration()", +"bd149031": "LongToken(uint256,string,string,uint256)", +"bd14fe3e": "hasOwnerAccess(address)", +"bd153c64": "emitted()", +"bd15e9ab": "hasMinBudget(address,uint256,uint256[])", +"bd1607ed": "HashRush(string,string,uint8,uint256)", +"bd16deaa": "ownerSetMaxBet(uint256)", +"bd16f1f3": "unfreezeByIndex(uint256)", +"bd1723e5": "blackBox()", +"bd17647f": "changeMilestone(uint8,uint256,uint256)", +"bd17a9d8": "blockAccess(address,bytes32)", +"bd17d63a": "TokenStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", +"bd183430": "ArtIs()", +"bd185612": "changeCertificateHash(address,bytes32,uint256)", +"bd187e3b": "changeParticipationFeeForRaz(uint256,uint256)", +"bd189666": "DetailedERC20Mock(string,string,uint8)", +"bd19036a": "investmentCapIcoPhaseTwoPounds()", +"bd1954c6": "ownerToBooty(address)", +"bd1a77a8": "sellNac(uint256,address,uint256)", +"bd1ad05c": "LogRecoveryChanged(address,address,address)", +"bd1b324c": "NewMyToken()", +"bd1b768b": "getApprovedAddressesOfList(address[],address)", +"bd1baedb": "SignumToken()", +"bd1bca06": "_getCrabData(uint256)", +"bd1d3432": "FOUNDER_ADDRESS1()", +"bd1de900": "totalOffer()", +"bd1edd81": "acceptDeposits(uint256[],uint256[],uint256[],uint256[])", +"bd1f4b52": "withdrawErc20(address,uint256)", +"bd1f7d52": "GetBoosterData()", +"bd1fac00": "TOKEN_COMMUNITY()", +"bd218493": "tokenLimitPerWallet()", +"bd21a864": "DigitalTradingCoin(address)", +"bd21fa47": "accountBalances()", +"bd22b1cb": "millionDollarTokenReward()", +"bd22d07f": "getTankByTokenId(uint256)", +"bd22f1cd": "testSubmitHash()", +"bd2302fc": "transferProposal()", +"bd23076f": "LamboToken()", +"bd23eb39": "tokenFallback()", +"bd242709": "initBob(uint256,uint256)", +"bd249ff0": "lockedBoardBonusAddress()", +"bd24b0d0": "ZHORA()", +"bd24de29": "blockDuelBegin()", +"bd24f08a": "isInBalanceLimit(address,uint256)", +"bd2560a0": "_inverseGetTokenAmount(address,uint256)", +"bd262a20": "setAuthority()", +"bd272880": "OnUpdateFee()", +"bd2850ab": "Freeze(address,address,uint256,uint256,string)", +"bd285ea8": "ReferedCrowdsale()", +"bd28d688": "TFOA(uint256,string,string)", +"bd28f504": "_computePet(uint256,uint256,uint256)", +"bd290d8b": "isValidLenth(string)", +"bd295f30": "GoodTronToken(address,address)", +"bd2b4ab7": "DigitalContentsToken()", +"bd2b6444": "adminUpdateWhiteList(address,address,bool)", +"bd2c0ead": "removeHolder(address,uint256)", +"bd2c245e": "privateIcoFinalized()", +"bd2cef65": "callback_ForPayout(bytes32,string,bytes)", +"bd2deecb": "create(bytes32,address,address[],address,bytes32)", +"bd2fffb3": "FlipNA()", +"bd3124e0": "addToBank()", +"bd320dde": "firstSaleDelivery(address,uint256)", +"bd322b77": "enableApi(address)", +"bd32aa44": "initiateSelfDestruct()", +"bd336584": "first_release(uint256)", +"bd338d85": "yearOneMultiplier()", +"bd33cc91": "requestRefundContributor()", +"bd345ed9": "setETH(string,uint256)", +"bd353ce2": "withrawDev()", +"bd355f43": "amountOfBags()", +"bd3566b7": "generateToken(address,uint256,string,string)", +"bd35d570": "GAS_TO_COMPLETE_EXECUTION()", +"bd366ddc": "reclaimEthicHubTeamFee()", +"bd36a5cd": "updateSaleStatus()", +"bd36c881": "bytesToAddress(bytes,bytes)", +"bd36cc93": "burnCancel(address,address)", +"bd37fec9": "Protean()", +"bd382b45": "getWindowAdjRatioForGameId(uint256,bool)", +"bd3a2ef4": "updateOdds(string,uint256)", +"bd3a5208": "getOraclizeRoundGasFee()", +"bd3a9d3c": "_createAuction(uint256,string,uint256)", +"bd3b5d07": "m_pending()", +"bd3bef41": "NewLeader(uint256,address,uint256,uint256)", +"bd3ccfc9": "getWeeklyTransactionVolumeSending()", +"bd3ce132": "transferManually(uint256,address)", +"bd3d0ecb": "newName(string,string)", +"bd3e19d4": "getCost()", +"bd3e7401": "setupSale(uint256,address)", +"bd3f0965": "AiraEtherFunds(string,string)", +"bd3f7817": "DaysToDestroy(address)", +"bd3fe562": "getRadarsIds()", +"bd4074f9": "tokensForCrowdSale()", +"bd431462": "BuyBSTtokens()", +"bd45115c": "PGPToken()", +"bd457de2": "KAPcoin(uint256,string,string)", +"bd478fcb": "readFromCart(address,uint256)", +"bd47c1a2": "getAccountListLenght()", +"bd47dd7a": "lockSeedInvestors()", +"bd484606": "techWallet()", +"bd48fa0e": "unpause_3()", +"bd499af3": "updateOptionsRegistryAddress(address)", +"bd49f00f": "ownersTokenList(address,uint256)", +"bd4a359d": "getLatestVersion(bytes32,bytes32)", +"bd4b6bbd": "transferScoupons(address,uint256)", +"bd4bb67e": "transferTokensFromKingWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"bd4c0755": "Test68()", +"bd4cfadf": "getownerInfo(address)", +"bd4dc024": "landRegistry()", +"bd4e0b4d": "REFERRAL_TOKENS()", +"bd4ed6cc": "sumHardCapPreICO2()", +"bd5021af": "startRecovery(address)", +"bd5034ff": "Redeem(address,uint256,uint256,uint256)", +"bd50b3b4": "transferAndLock(address,uint256)", +"bd513bea": "getTreasure(bytes32)", +"bd51525e": "typeOf(address,uint256)", +"bd51654b": "showMyEtherBalance(address)", +"bd516e04": "addCombat(uint128,uint128,bytes32)", +"bd5196cf": "createGame(string,string,uint256,uint256,string,address,uint256,string,bytes32[2],bool,string)", +"bd51d5d0": "hasBalance(address,uint256)", +"bd51fa4c": "propose(string,string,string)", +"bd527527": "setLLV_edit_13(string)", +"bd52d81a": "_emitRoleRemoved(address,uint8)", +"bd5304e3": "ContributorBalanceChanged(address,uint256)", +"bd53cb96": "changeUnitsUserCanBuyLimit(uint256)", +"bd541ad0": "depositEscapedFunds()", +"bd545f53": "cancelAllOrders(uint256)", +"bd54bced": "LogN_fnc(address,bytes32,uint256,string,bytes,uint256,bytes1,uint256)", +"bd550824": "_setPayTo(address)", +"bd556252": "PRE_ICO_PERIOD()", +"bd58118f": "allocateAngelTokens(address,uint256)", +"bd5821ca": "_refund(address)", +"bd5821f1": "changeActualTokenValue(uint256)", +"bd583bff": "registerManager(address,address)", +"bd59434d": "setGame(uint8,address)", +"bd59fdde": "ITube()", +"bd5acbd6": "continueOrder(uint128,uint256)", +"bd5ae945": "NodeSwapCrowdSale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,uint256)", +"bd5b758d": "ObtainChip(uint32)", +"bd5b948d": "CCH_ILOW_1()", +"bd5c4e24": "TIMEOUT_DESTROY()", +"bd5c5420": "setExchangeRate(address,uint256)", +"bd5ca3a3": "createProxyImpl(address)", +"bd5d7b1d": "FEELCOIN()", +"bd5dec98": "withdraw(address[])", +"bd5e3a80": "GPPHARMTOKEN(uint256,uint256)", +"bd60527b": "getEmployerContracts(address,uint256[],uint256[])", +"bd611c73": "TOTAL_ICO_TOKENS()", +"bd61ff75": "cmpn(uint256,uint256)", +"bd6206ec": "initialDayWithdraw(uint256)", +"bd621042": "setUnownedPriceInExoTokens(uint256,uint32)", +"bd623d68": "encodeData(uint128,uint256,uint24,uint40,uint32)", +"bd625f1b": "setend(uint256)", +"bd62fff3": "Nines()", +"bd632e10": "batchInvest(address[],uint256)", +"bd633642": "MeissaChallengeToken()", +"bd639259": "getOwnerAngelCount(address)", +"bd63c338": "canRecover(uint256)", +"bd646356": "calculateCommissionToWithdraw(uint32)", +"bd6501b1": "isValidator(uint64,address)", +"bd656daf": "Fomo2D()", +"bd659784": "addToList(address)", +"bd65fc4c": "stb()", +"bd66528a": "claim(bytes32)", +"bd675c0e": "revealMove(uint256,uint8,string)", +"bd679ab2": "WithdrawGains()", +"bd679ad6": "burnDragons(uint256)", +"bd6812a4": "lastBlock_a0()", +"bd684865": "getAuthByPhone(string)", +"bd68817f": "clearRAMAll()", +"bd68eb34": "_spawnAxie(uint256,address)", +"bd6a9abb": "hasClearingPrice(address,bytes32)", +"bd6bbc31": "lastCollection()", +"bd6bf475": "canUpdateCompany(string,address)", +"bd6c4661": "fetchCancelledOrdersForPayer(address)", +"bd6c6756": "cardsCount()", +"bd6cac4f": "isPriorPack(address)", +"bd6d894d": "exchangeRateCurrent()", +"bd6de5a3": "dNextOffer()", +"bd6e578a": "getPreSaleFund()", +"bd6e5e03": "calcICO(uint256,uint256,uint256)", +"bd6edba5": "getUserBalances()", +"bd6fd20d": "getDeedTimestamp(string)", +"bd7084b2": "getNextNonce()", +"bd7095db": "GetCompetitionFunds(uint32)", +"bd70c53a": "LYFToken()", +"bd70fce9": "getApprenticeDistributedRandom(uint256)", +"bd7162b6": "setPixelPrice(uint16,uint16,uint256)", +"bd7173dd": "addLuckyblock(uint256)", +"bd719336": "canDistributeReservedTokens()", +"bd71e476": "ownerSetMinBetMining(uint256)", +"bd7243f6": "wipeBlacklistedAccount(address)", +"bd725f6e": "UBSToken()", +"bd728083": "ShowPurchased(uint256,address,address,uint256,uint256)", +"bd733dfb": "getUintsOwnerCount(address,address)", +"bd739a2f": "existsManagedContract(uint256,address)", +"bd73a9b4": "setTime4(address,uint256)", +"bd7427f8": "forceRefund()", +"bd7474ca": "upgradeDeploymentAdmins(address)", +"bd74c4e7": "setAttribute(address,address,bytes32,bytes,uint256)", +"bd74dc9d": "servicePaymentWithCharityPercentage(address,uint256)", +"bd763f59": "addPlayerData(uint256,uint256,string,uint256,uint64,uint64,uint64)", +"bd76540a": "buyIn(uint8,uint256)", +"bd76bf19": "addToBuyList(uint256,uint256)", +"bd778fde": "CoinNext()", +"bd77ac2c": "disburse(uint256)", +"bd780d0d": "getLastAttack(uint256,uint256)", +"bd788c88": "allocate(address,address,uint256,uint8)", +"bd792db3": "setIcoAddress(address)", +"bd797e32": "ChangeEmployeeState(address,uint8,uint8)", +"bd79a42a": "decimalToPreciseDecimal(uint256)", +"bd79d692": "depositEtherToVault(uint256)", +"bd7a9fda": "nameRegistry(address)", +"bd7afb29": "lastBlock_f17()", +"bd7b09e4": "totalCitizens()", +"bd7b7849": "addFace(string,string)", +"bd7be110": "SaveCoin()", +"bd7c13c6": "phase1MaxEtherCap()", +"bd7d2789": "checkWinner(uint256,uint8,bytes32)", +"bd7d3836": "pauseCrowdSale()", +"bd801ed4": "yishiliToken()", +"bd80d449": "newOK()", +"bd812166": "getSeasonInfo(uint32[99])", +"bd815a10": "RecyclerToken(uint256,string,string)", +"bd820688": "numOperators()", +"bd826f2b": "currentnumber()", +"bd837b2b": "approveToPullOutTokens(address,address,uint256)", +"bd83ea8d": "createMarriage(string,string,string,string,uint256)", +"bd84d8f6": "ProgressiveIndividualCappedCrowdsale(uint256,uint256)", +"bd853960": "assertEq14(bytes14,bytes14,bytes32)", +"bd85530c": "getAllSuccessInvestmentsCollected()", +"bd858288": "orderMatch(uint256,uint256,int256,uint256,uint256,address,uint8,bytes32,bytes32,int256)", +"bd85948c": "startNewRound()", +"bd85aac5": "getAllShareholdersAndShares()", +"bd85b039": "totalSupply(uint256)", +"bd85e163": "FOURTH_USER_CUT()", +"bd865d29": "end_auction()", +"bd8697ab": "makeFailed(bool)", +"bd88a04f": "p3dWithdrawForAdmin(address,uint256)", +"bd88f603": "setImageData(address[16],uint256,uint16,uint256[])", +"bd897671": "KYRIOSToken()", +"bd89d806": "y_Title()", +"bd8a79d5": "getFollowingCandidate()", +"bd8aa780": "whitelist(address[])", +"bd8b452e": "eatUnicorns()", +"bd8c1d33": "checkTransferFromToICAPWithReference(address,bytes32,uint256,string)", +"bd8c5643": "disableMoving()", +"bd8caabf": "setVirtualReserveBalance(uint256)", +"bd8cb6ca": "removePlugin(address,address)", +"bd8d34f5": "fundForTeam()", +"bd8d585e": "NCO()", +"bd8d5c7f": "EtherCartel()", +"bd8d5ce3": "amountReservedTokens()", +"bd8d86c4": "getlevel(uint256,uint256)", +"bd8d92c3": "requestDiplomaEntry(uint256,uint256)", +"bd8e0905": "weiToToken(uint256)", +"bd8e4725": "IxiniumFT()", +"bd8e4a51": "getCAORatio()", +"bd8e68c9": "PRICE_STAGE_FOUR()", +"bd8f61d8": "PerfectCoin()", +"bd8f997c": "getTotalQtyIpfsAddresses()", +"bd902dad": "approveSingleUser(address)", +"bd90df70": "targetContract()", +"bd916452": "claimReferrerBonus()", +"bd9215f4": "highest_bidder()", +"bd9335c0": "scheduleHangouts()", +"bd93f493": "LAUNCH_DATE()", +"bd945430": "OUTINGRESERVE()", +"bd94b005": "cancelSale(uint256)", +"bd94fafc": "PRESALE_CAP()", +"bd952178": "rejectAllocation(address)", +"bd95264c": "store(address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"bd957585": "declareCrowdsaleEnd()", +"bd95b1f2": "getdays()", +"bd95d909": "sellTokenPerEther()", +"bd95f042": "sendRemainsToOwner()", +"bd963442": "handleRefundRequest(address)", +"bd965677": "setRelayed(address)", +"bd968eed": "runeToWeiRatio()", +"bd96b348": "GeBitToken()", +"bd97ce3a": "changeReferrer(address)", +"bd987008": "setAccountIsNotFrozenForReturn(address,bool)", +"bd991fc5": "setGroupRight(string,string,bool)", +"bd9934f1": "freezeAddress(address,uint256)", +"bd993f9e": "COREthExchangeRate()", +"bd998dc8": "CloseSale()", +"bd9a0158": "setTimeConstants(uint256,uint256)", +"bd9a11fd": "finalstate()", +"bd9a548b": "getPrices()", +"bd9a5673": "oraclize_query(string,string[5])", +"bd9b49b7": "goalCompletedBlock()", +"bd9b6d86": "confirmOwner()", +"bd9b6e85": "tokenTranslate()", +"bd9c33bc": "_discount(uint8)", +"bd9c5688": "distributeFee(uint256,address)", +"bd9ca422": "AIChain(uint256,string,string)", +"bd9d6b37": "AddNewPresalePackage(uint16,uint256)", +"bd9d6d7f": "memeData(uint256)", +"bd9e6bfc": "makeBuyOffer(uint32)", +"bd9ead1f": "calculateClaimableReward(address,address)", +"bd9ebfbb": "marketSellOrdersNoThrow(uint256,bytes[])", +"bd9ec492": "maximumEther()", +"bd9ef436": "witnessOf(uint256)", +"bd9f8917": "finalizeEnableRefunds()", +"bd9fbe7b": "getDefaultAQL()", +"bda00866": "getAmountOfUnlockedTokens(address)", +"bda02782": "b(address)", +"bda1504b": "currentSize()", +"bda1f35e": "Fleuth()", +"bda2aa53": "testUnsyncedRate()", +"bda2e692": "DinosaurFarmerNew()", +"bda330f7": "refundingStarttime()", +"bda393d3": "totaldividends()", +"bda4cf80": "_pfind(address)", +"bda4fd89": "totalItem()", +"bda5c450": "calculateDividendTokens(uint256,uint256)", +"bda5ea03": "tkwins()", +"bda6642c": "changeStartingPricesLimits(uint256,uint256,uint256)", +"bda6c497": "borrowerReturnDate()", +"bda70d92": "destroyOldCoins(address,uint256,string)", +"bda77531": "changeAdultDragonStage(uint8)", +"bda7c3ee": "delegateTransfer(address,address,uint256,uint256)", +"bda81086": "jsonRead(string,string)", +"bda8bf45": "getWitnessWeiCost()", +"bda9a055": "getStepsCount(uint256)", +"bda9b45c": "whitelistMe(uint128,uint8,bytes32,bytes32)", +"bdaa80c1": "TronX()", +"bdaacabd": "buyXname()", +"bdaacbbe": "calculateAdminFee(uint256)", +"bdaae1e7": "createGame(uint256,uint256,uint256,uint256)", +"bdab5fb0": "fishLocation(bytes32)", +"bdace3de": "ChessClubLiveChessCoin()", +"bdad3db2": "_mintTo(address,uint8,uint256)", +"bdad4dc3": "allocate(address[],uint256[])", +"bdad8112": "hashArguments(address,uint40,uint40,uint128,uint256)", +"bdaeb0a0": "m_GameHidden()", +"bdaf2fae": "timeBought(uint256)", +"bdaf78fb": "refundUser(bytes32,bytes32)", +"bdafcda9": "logClassic(string,address)", +"bdb001a7": "mana()", +"bdb00fb9": "blackjack(uint256,uint256,address)", +"bdb084b2": "startCrowdsaleY1(address)", +"bdb10825": "MOOVIN(uint256,string,string)", +"bdb15209": "getNewPrice(uint256,uint256)", +"bdb27170": "setLockinManagerAddress(address)", +"bdb2e597": "TheBestToken(uint256,string,uint8,string)", +"bdb337d1": "gameOver()", +"bdb4dc6e": "getBrickSize()", +"bdb4f321": "balanceOfStocksAt()", +"bdb57edc": "TokenRedeem(address,uint256)", +"bdb5daf5": "OvisAddress()", +"bdb66236": "pushDividends()", +"bdb6bce8": "livingSupply()", +"bdb81203": "newGrant(address,address,uint256,uint256,uint256,uint256,bool)", +"bdb9c11f": "transferTokensFrom(address,address,uint256,uint256)", +"bdb9f28d": "setPresaleAddress(address)", +"bdba9255": "getCounterLimit()", +"bdbaae63": "mint(int256)", +"bdbb829d": "haltICO(address)", +"bdbbf429": "escrowHistory(address,uint256,uint256)", +"bdbbfcad": "stageAmount()", +"bdbcd001": "testSetValidProvider()", +"bdbcd192": "PowerEnabled(address,address,address,address)", +"bdbed722": "getAllTokenIds()", +"bdbf3a2c": "addBenefactor(uint256,address,string,string)", +"bdbf40a9": "Certify(address,uint256)", +"bdbf7d4c": "DELETE_NAME_ROLE()", +"bdc056c0": "BanknadToken()", +"bdc06de4": "SGTExchanger(address,address,address)", +"bdc0ba8e": "disableMaintenance()", +"bdc0f93c": "node_count(uint256)", +"bdc2866e": "MasterMindAlliance()", +"bdc2f1e8": "multivestBuy(address,address,uint8,bytes32,bytes32)", +"bdc31ce8": "Roto2coin()", +"bdc33928": "placeIndexToApproved(uint256)", +"bdc441b2": "getItemCount(uint256)", +"bdc4843a": "lockAddressAfterITO(address,address)", +"bdc6d9ab": "schedules(uint256)", +"bdc742fc": "updAcceptDonate(bool)", +"bdc74e23": "_processTokensAssgin(address,uint256)", +"bdc850d6": "ALasser()", +"bdc8e551": "isICOOver()", +"bdc95b32": "registerIdentity(string,string,string)", +"bdc963d8": "getUIntValue(bytes32)", +"bdc99152": "Token_1_Balance(address,address)", +"bdcab795": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool)", +"bdcafc55": "setSaleFee(uint256)", +"bdcbd9d1": "howMuchCanXContributeNow(address)", +"bdcbda5c": "AccountTransfersThawed(address,bool)", +"bdcc3439": "add_master(address)", +"bdcc809a": "setReleaseCompany(uint256,bool)", +"bdccd1af": "TokenHolder(uint256,address)", +"bdcd0262": "addRecord(bytes32,bytes32,bool)", +"bdcd21a1": "spawnRaceManual(uint256,uint256,bool)", +"bdcd3071": "LogBonusLOTRedemption(address,uint256,uint256)", +"bdcdc0bc": "updateTotalAvailable(uint256,uint256)", +"bdcdc258": "transferAllowed(address,address,address,uint256)", +"bdce46be": "PriceIncrease(string,uint256,address)", +"bdced258": "VendCrowdsale(uint256,uint256,uint256,address,uint256)", +"bdceed0b": "gvToken()", +"bdcefb62": "FRST_CRWDSALE_RATIO()", +"bdcf49b5": "changeContractStatus(address,bool)", +"bdcfbc37": "ANMInflationVesting()", +"bdd079fc": "addManyToWhitelist(address[],uint256[],uint256[])", +"bdd088e9": "littleMonster()", +"bdd1de62": "delWhitelists(address[])", +"bdd2ae24": "add(bytes,int256,uint256)", +"bdd2d286": "drawPlayer(address,address)", +"bdd30406": "successfulWithdraw()", +"bdd36562": "getBonusByAddressAndIndex(address,uint256)", +"bdd3abd9": "MjolnirWebsite()", +"bdd3fea0": "set_for_sale(uint256)", +"bdd41d4c": "ParagonCoinToken(address)", +"bdd50908": "approveWithdrawAddress()", +"bdd5be2f": "performBuy(address[8],uint256[6],uint256,uint256,uint8,bytes32,bytes32)", +"bdd5f8da": "weiPerSgd()", +"bdd62b7b": "defective(bytes32,uint256)", +"bdd75267": "OPULENCE()", +"bdd7908b": "getFishParams(uint256,uint256,uint256,address)", +"bdd7c220": "CryptessaLiquidCoin()", +"bdd83add": "isAllocated12()", +"bdd8a366": "g1()", +"bdd8f051": "SmartOToken()", +"bdd9f4e7": "batchInnerTransfer(address[],address[],uint256[],uint256)", +"bddac117": "SetAmount(string,uint256)", +"bddae40e": "setCommittee(address)", +"bddb7c83": "setUserBlacklisted(address,bool)", +"bddba4eb": "grantRole(address,string)", +"bddbe244": "get_vice_pic(uint8)", +"bddcfead": "MakeWinner(address,uint256,uint256)", +"bddd0abd": "ExampleToken(uint256)", +"bddd1e7e": "WITHDRAWAL_END_TIME()", +"bddd3202": "_tryTriggerPayout(uint16,uint256)", +"bddd3a6b": "step7()", +"bddefc06": "withdrawed(address,uint256,string)", +"bddf66ff": "claimMigrate()", +"bde18839": "OHGVientiane()", +"bde1f585": "endCrowdsalel()", +"bde236a5": "checkClaimEntitlement()", +"bde27f4a": "forwardToHotWallet(uint256)", +"bde2ddf2": "_forwardFunds(address)", +"bde4e7c2": "tokenAddFee()", +"bde5c4a2": "_stealCardWithId(uint256)", +"bde60ac9": "donate(uint64,uint64)", +"bde66362": "_createNinja(uint256,uint256,uint256,uint256,address)", +"bde6a5a9": "burnPrice()", +"bde7ef86": "SynTokenCrowdsale()", +"bde7fa7d": "removeWhiteListed(uint256)", +"bde842ac": "getJobStatus(uint256,uint256)", +"bde86dd1": "tokenExpirationTime(uint256)", +"bde8a93e": "setBankroll(address)", +"bde8c509": "mintIdentityTokenDelegated(address,address,uint8,bytes32,bytes32)", +"bde8cd4d": "icoPool()", +"bde97455": "SCRefundVault()", +"bdeb130c": "doPayment(uint256,uint256,address)", +"bdeb45b8": "expireIfNecessary()", +"bdeb9fb4": "tokensAvailableForSale()", +"bdec5cce": "LotteryRoundCompleted(bytes32,uint8,bytes4,uint256)", +"bdeddb45": "setMyICOContract(address)", +"bdee21ff": "test_oneValidAssertFalse()", +"bdef744b": "PriceTwoDisable()", +"bdf1211e": "getPercentBurn()", +"bdf1e7cf": "getProviderReward(address,uint256)", +"bdf27b50": "setPOOL_edit_21(string)", +"bdf2a0f5": "fundDaoFor(uint256,uint256)", +"bdf3390e": "checkPwnData()", +"bdf384a8": "peekUpdated()", +"bdf391cc": "getPair(uint256)", +"bdf3c4ae": "stock()", +"bdf44067": "TCASHx()", +"bdf499e1": "DappHunt()", +"bdf4bb73": "DatToDtrcNumerator()", +"bdf4e7c6": "TaskRegister(address,address,address)", +"bdf5fba1": "COMMUNITY_POOL_ADDR()", +"bdf63c15": "RSPLT_F()", +"bdf692f4": "Propersix()", +"bdf6fb56": "requestMilestonePayment(uint256)", +"bdf70087": "getInvestor(bytes32,uint8)", +"bdf70de1": "SportXToken()", +"bdf7220f": "getFinalTeams()", +"bdf75a6a": "PRICE_RATE_FIRST()", +"bdf7716d": "getNodeHeight(bytes32)", +"bdf79c9d": "Adapter(address,address,address)", +"bdf7a8e6": "airdrop(uint256,address[])", +"bdf7f22f": "puremail()", +"bdf82b2a": "killFrost()", +"bdf86a66": "give(address)", +"bdf88d34": "stopTest()", +"bdf944b3": "depositAffiliate(uint256)", +"bdf99bd4": "AntPetTempleToken()", +"bdf9f646": "disApprove(address)", +"bdfaa337": "totalAlloc()", +"bdfb481d": "ABDEL_ALLOCATION()", +"bdfbab66": "getReferals(address)", +"bdfc0522": "investBounty(address,uint256)", +"bdfd582b": "FailClosedVault(address,address,uint256,uint256,address,uint256)", +"bdfd6257": "settingNameExist(string,address)", +"bdfdb519": "accept(string,uint256,uint16)", +"bdfdbf56": "read_u16_array()", +"bdfe7d47": "addresses(string)", +"bdff85cf": "ArrAccountIsNotFrozenForReturn(uint256)", +"bdff9fca": "checkTotalPaid()", +"bdffd282": "SIZE()", +"be0043bc": "removeMinterByIndex(uint256)", +"be007380": "DapdapNiubi()", +"be01bc87": "carTaxiCrowdsaleAddress()", +"be02bc3c": "internalTransfer(address,address,uint256,uint256)", +"be030bd8": "_setToken(address)", +"be038478": "createPermission(address,address,bytes32,address)", +"be03c602": "test_get()", +"be040fb0": "redeem()", +"be041614": "storedDataInBytes()", +"be048d04": "getOrganizationalCertAddressByID(string)", +"be0522e0": "inflation()", +"be063693": "intermediadorAprovaPagamento(bool)", +"be0638e4": "WealthShare()", +"be06ae25": "VirsymCoin()", +"be06e4e8": "inheritedConstant()", +"be08728f": "_setRemovalPrice(uint256)", +"be08d744": "TFcoin(uint256,string,string)", +"be099e7d": "endICOs()", +"be0ad4d1": "calculatePayoutVariables()", +"be0ca01b": "resetChallenge(uint256)", +"be0d4da4": "produceLottoNumber(uint256,uint256)", +"be0da251": "CANCELLED_FEE_FLAG()", +"be0e9d75": "removeWorker(address,address)", +"be0ecd32": "synthInitiatedExchange(address,bytes4,uint256,bytes4,address)", +"be0f0a50": "setPriceStep5(uint256)", +"be0f27cf": "rejectBountyTransfer(address)", +"be0f6bcb": "End10()", +"be104849": "AutorizeRefund()", +"be10862b": "partner()", +"be10c33d": "LogOperatorRem(address)", +"be116c3b": "removeProxy(address)", +"be11ce2f": "minEthContribution()", +"be1271c4": "setPrice(uint8)", +"be140381": "firstEntranceToSaleStateUNIX()", +"be14e5fc": "ETH530on420()", +"be154a18": "Partial8Transfer()", +"be160a92": "ERC20token(uint256,string,uint8,string)", +"be162060": "validCrowdsale()", +"be163d75": "validPurchase(uint256)", +"be165566": "setTokenBankrollAddress(uint8,address)", +"be169856": "getOriginByIndex(uint256)", +"be16dccd": "tomoDeposit()", +"be177c6a": "addJoinAirdropQuest(address)", +"be17a8b1": "doCustomAirdrop(address,address[],uint256[])", +"be17be5d": "total_minted()", +"be189035": "modifyIndividualCap(address,uint256)", +"be18a08b": "finishUpRound(int256,string)", +"be190032": "timespan()", +"be19d926": "Britishcoin()", +"be1abba5": "payoffAmount()", +"be1b7b4c": "FIRST_UNLOCK()", +"be1c766b": "getLength()", +"be1eefbf": "hotStore()", +"be1ef5c1": "approveWithdraw(address,address)", +"be1faaaf": "depositCoupon(address[2],uint256[7],uint8,bytes32[2])", +"be1ff08b": "sbtToken(address)", +"be20d298": "AxiePresale()", +"be20f9ac": "getSlotInfo(uint256)", +"be213c2d": "startBoughtExit(bytes32[],uint256,bytes32[])", +"be220272": "houseWithdraw()", +"be22f546": "daiToken()", +"be22f6aa": "LUYOCrowdsale()", +"be23d291": "requestPrint(address,uint256)", +"be241871": "isTxExist(bytes32)", +"be2430fe": "sendValues()", +"be25270f": "hash(string,uint256)", +"be25d0ce": "buyerCapHighEther()", +"be2671c9": "getUserBonusBalance(address)", +"be26733c": "Kill()", +"be268c3f": "batchSubmit(address[])", +"be275680": "submissionOpen(uint256)", +"be27b22c": "claim(bytes,bytes)", +"be2863ab": "addWalletsToWhitelist(address[])", +"be28f5db": "makeTokens()", +"be29184f": "mint(address,uint128)", +"be292552": "setMintAddress(address,address)", +"be297530": "Coinname()", +"be29783f": "commitVoteOnSpecialProposal(bytes32,bytes32)", +"be29d81f": "BRL_Omnidollar()", +"be2a2ff2": "getAccountBlockedFunds(address)", +"be2b1047": "hodlerTimeStart()", +"be2b5996": "designateAdmin(address,address)", +"be2d8b2d": "PowerToken()", +"be2dbe21": "Raffle()", +"be2dcd6c": "buyMFCoins(address,uint256)", +"be2eaad4": "expectedFunds(uint256,bool)", +"be2ef9f0": "secondWalletPercent()", +"be2f3059": "RcdGet()", +"be2fd146": "addMultiRequest(address,uint256,uint256,address)", +"be2ff4a9": "withdrawBank(uint256)", +"be30eda8": "transferAndLock(address,address,uint256)", +"be30f0a6": "setPurchaseLimits(uint256,uint256)", +"be317e7e": "ICOReserveLockUp()", +"be31b600": "CART()", +"be31ffed": "AOSToken()", +"be32cf8d": "mix()", +"be32eeba": "getFishIdByPos(uint256)", +"be3400b8": "CharityCashCoin()", +"be34dab3": "addBrick(string,string,uint256,string,bytes32[])", +"be354949": "setReservesForExchangeTokensWallet(address)", +"be35525d": "setPlayerAffID(uint256,uint256)", +"be357616": "withdrawFee(uint256)", +"be361f60": "retrieveChange()", +"be363e36": "sendMoneyBack()", +"be36e676": "Set(bytes32,bytes32)", +"be38e241": "activations()", +"be3912fa": "registerProduct(uint256,uint256,uint256,bytes,bytes)", +"be3945e4": "getFee(address,address,uint256)", +"be395cd5": "setPoliticsForJackpotParticipantsList(bool)", +"be3c33f4": "ZeroXCoin()", +"be3c8488": "previousStageIsFinalized()", +"be3c92a6": "setLimitTokenPurchase(uint256,uint256)", +"be3ca849": "getFunding(address,uint256)", +"be3cbb04": "iWantXJade(uint256)", +"be3daf55": "shouldLiquidate(bytes32,address,address,address,address,uint256,uint256,uint256,uint256)", +"be3dd131": "migrateFunds(address[])", +"be3dedae": "changeOwnership(string,uint256,uint256,address,address)", +"be3e33d5": "play(bytes1)", +"be3e41b1": "bonusFirstTwoDays()", +"be3eac25": "WithdrawEnabled()", +"be3ee935": "addClient(string,string,string,string,uint256,uint256,uint8,uint8)", +"be3f3471": "total_trades()", +"be3f34a1": "collectIncome(address)", +"be400cad": "KudosToken(string,string,string,uint8,address)", +"be4054b9": "commitReading(address,uint256,uint256,string)", +"be40887d": "sumDepth(uint128)", +"be408a5f": "winner_percentage()", +"be410448": "getERC20Id(uint256,address)", +"be427b1c": "setFinderFee(uint256)", +"be4299a6": "Maxsupply()", +"be4413fc": "Donator3()", +"be4474b4": "processFee(uint256)", +"be44e2d6": "getdeptreqscount()", +"be457017": "validateRefundSignature(uint8,bytes,address)", +"be45a26f": "variables()", +"be45af43": "InnovateToken()", +"be45cdb8": "crowdsaleTokenBalance()", +"be45d47e": "whitehatRecover()", +"be45fd62": "transfer(address,uint256,bytes)", +"be46203e": "Claim_TRAC_900()", +"be4663a1": "vestContract()", +"be46b94c": "ROLE_KNOWN_ORIGIN()", +"be46bffb": "verifyLottery(uint8,bytes32,bytes)", +"be46e9ca": "starting()", +"be46ee5f": "postNewAnswer(bytes32,bytes32)", +"be471027": "limitedSale()", +"be47dca1": "getNumberOfClients()", +"be482cc2": "getCurrentLotteryJoiners()", +"be48acc4": "MAX_PERSIANS()", +"be48d81e": "team_accounts(uint256)", +"be490a04": "Banned(address,bool)", +"be494573": "pureBalanceOf(address)", +"be4951e4": "setBroker(address,address)", +"be4a0910": "sendTokensSale(address,uint256)", +"be4a0b11": "preAssign(address)", +"be4a471c": "memoryFactor()", +"be4a6bad": "newOrder(address,uint256,uint256)", +"be4a7160": "closeDistribution(bool)", +"be4a90eb": "GoramCoin(uint256,string,uint8,string)", +"be4aba09": "tokenR6()", +"be4b1772": "withdrawToken(uint256,address)", +"be4bb31a": "WAmlingCoin()", +"be4c3a0c": "getContractOwner(string)", +"be4c45d5": "changeBuyingPrice(uint256)", +"be4c9e96": "TRONIC()", +"be4cbafd": "RichGoldToken()", +"be4cc281": "ManagerUpdate(address,address)", +"be4ce05c": "JULY()", +"be4d06cc": "setLLV_edit_16(string)", +"be4dbb5e": "getInvestorByValue(address)", +"be4dbe26": "getBlocklancerContractHolder()", +"be4ea54d": "setDeveloper(string,uint256)", +"be4eb0e9": "getUserFromId(uint256)", +"be4ebda3": "BOUNTY_SHARE()", +"be4f4fdf": "restrictedShare()", +"be50af2e": "tokenWithdraw(address,uint256)", +"be519862": "percDown(uint256)", +"be51bc0a": "FuncToken()", +"be523c23": "dungeonPreparationTime()", +"be5308ea": "BitplusToken(uint256,uint256)", +"be53874f": "emergencyFundReleased()", +"be53f968": "getPreSaleStart()", +"be54c568": "starting(uint256)", +"be54f214": "monthWithdraw()", +"be5638ff": "investor_contains(address)", +"be5648c3": "getResoType()", +"be56e037": "equipSingle(uint256)", +"be571e2e": "BigbomToken(uint256,uint256,address,address,address,address,address,address,address)", +"be571e8f": "getTokens(address,bytes32,uint256)", +"be572d52": "addItem(uint256,string)", +"be576364": "synthInitiatedFeePayment(address,bytes4,uint256)", +"be592488": "validateName(bytes)", +"be597faa": "_finishTge()", +"be59b4b1": "mostRecentCaller()", +"be5affd1": "address3a()", +"be5b9c74": "MultiSigWalletMock(address[],uint256)", +"be5babc2": "CryptoGems()", +"be5c2423": "failedVerificationSlashAmount()", +"be5df6cb": "findLover(address)", +"be5e72e0": "updateBasePrice(uint256,uint256,uint256,uint256)", +"be5ea335": "betERC20(address,bool,uint256)", +"be5eb443": "getScriptAction(bytes,uint256)", +"be5eeb2d": "getSociety(uint256)", +"be5f3d12": "allocateTokensForAdvisor()", +"be5f5a5b": "setSecretSignerByIndex(address,uint256)", +"be600276": "move(uint16)", +"be6002c2": "exec(address,bytes)", +"be6010f9": "calcHash(uint32,uint8,uint256,uint256,int256,bytes32,bytes32,uint256)", +"be60988e": "getLotteryByID(uint32)", +"be60989d": "addCard(string,uint8,string,string,string)", +"be60be76": "TokenMigration()", +"be60e771": "ZAMZA()", +"be616e83": "processAP()", +"be621764": "TradeRegister()", +"be62e98e": "MIN_PRICE_SALE()", +"be6307c8": "getDraw(uint256)", +"be6340b8": "mintedDirectly()", +"be63c8ca": "Retire()", +"be63f7b1": "TobkaCoin()", +"be640921": "regInitAccount(string,string,string)", +"be65d234": "Owner_Changed(address)", +"be65d27a": "vaultDeposit()", +"be66399f": "setOuverture_effective(uint256)", +"be676ac6": "transfer_balances(address[])", +"be67f4fd": "ActualShareManager()", +"be6872af": "totalTokensForSold()", +"be6896c3": "PropellerheadSupport()", +"be692cd3": "erase_data()", +"be6ad6d2": "ForceEther()", +"be6ae331": "get_session_state(address,uint32,uint32)", +"be6b6ba6": "getVestingStageAttributes(uint8)", +"be6c03ff": "stakedForProposal(address,address,bytes32,bytes32)", +"be6c554f": "firstCheckpointPrice()", +"be6c61f5": "unsetIdentity(address,address)", +"be6c87ad": "item(address,address,uint256,bool,bytes)", +"be6cef0a": "msgExaminer()", +"be6d055a": "proxy(address,bytes)", +"be6d91e6": "getBalanceOfSender()", +"be6fc181": "getFeeParams()", +"be71021f": "_crownFreeze(uint256)", +"be7118a7": "Dilution(address,uint256)", +"be71248a": "payWinner()", +"be737f72": "toSmallestShareUnit(uint256)", +"be7385e3": "getPlayerSpaceships(address)", +"be73983a": "reservePR()", +"be73d879": "joinBytes(bytes,bytes)", +"be74264d": "getFeePercent()", +"be74381f": "calculatePercents(address)", +"be743ccb": "MCCPP()", +"be754ba4": "buy20Price()", +"be760488": "assign(address,uint256)", +"be782f58": "setBreedTimeout(uint32)", +"be78632e": "nstDeposit()", +"be788e70": "getWithdrawableBalance()", +"be78bb7a": "transferCallGas()", +"be78e656": "buyXaddr()", +"be79ca77": "preSaleBonus3Amount()", +"be7a1540": "setlvlNfee(uint256)", +"be7a3164": "getNextAuditRequest()", +"be7aa7be": "SportStarToken()", +"be7b4858": "isOpenDistributionClosed()", +"be7c06ba": "iniOwner()", +"be7c29c1": "getNewDAOAddress(uint256)", +"be7ccd7e": "setupMiniGame(uint256,uint256)", +"be7cddf8": "TwoD()", +"be7e2848": "SkillChainContributions()", +"be7edebe": "setURIBase(string)", +"be7f5d23": "addressesReserving(uint256)", +"be7fdab1": "returnMoney(address)", +"be80073a": "SentTo(address,address)", +"be802f05": "getIcoTokensSold()", +"be80dcfd": "floatEconony()", +"be81d5bf": "CROWD_WEEK3_PERIOD()", +"be82f56b": "drainToken(address,address)", +"be82fffe": "allPolls()", +"be8360c5": "_maint_EndPromo()", +"be83a6b4": "ShitCloneslordReq()", +"be83b3c6": "LogFinishICO(address,address,address,address)", +"be83ff83": "vipRate()", +"be854def": "robPantryT(address,uint256)", +"be85bf3b": "PaymentWithdrawn(uint256,address,uint256)", +"be85cbcd": "makeLoan(address,uint256)", +"be85e4ef": "initEngineer()", +"be86d5a7": "makerTransferEther(address,uint256)", +"be86d996": "SINGLE_SALE_MULTIPLIER()", +"be87662b": "inviteProfit(address)", +"be87bcfc": "getReport(uint256,uint256)", +"be87c1ab": "returnBalance(address[2],uint256[7],uint8,bytes32[2])", +"be882d91": "setQuestionFee(address,uint256)", +"be888bd7": "devteamReserve()", +"be89900b": "PIOE()", +"be8a4737": "withdrawalT4T()", +"be8a550d": "ICO(address,address)", +"be8acd3f": "ordersLength()", +"be8b4f45": "HussyToken()", +"be8bd3df": "IlumXToken()", +"be8c1bcc": "batchDrop(address[],uint256[])", +"be8cd7b8": "participatePresaleNow()", +"be8db3cf": "deadlineBlockNumber()", +"be8dd49a": "getTokenUserCounter()", +"be8ecef3": "requestAddOwner(address,string)", +"be8eef8e": "hasOpened()", +"be8f316a": "testmsg()", +"be90be7f": "clearPoolsDone()", +"be9117cc": "curryChickenToken()", +"be912a0a": "getAyantDroitEconomique_Compte_7()", +"be913b6f": "ETH_FUND(address)", +"be916531": "test_OverSixtyPercent()", +"be91de53": "frozenBalanceOf(address)", +"be91ebe5": "tgrSettingsChangeRequest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"be92ccfd": "setDisableBet(uint256)", +"be92f334": "astrSold()", +"be9413a7": "_cancelRole(address,address)", +"be95e01a": "payout(uint256,address)", +"be96031e": "playerinfo(address)", +"be96bb92": "_isFullOrNull(uint256,uint256)", +"be96faf7": "AWYManKeepChain()", +"be975f57": "CreateSTR(address,uint256)", +"be981ff4": "transferOwnershipForVanityURL(address)", +"be986420": "quarters()", +"be987c11": "PriceDecrease(string,uint256,address)", +"be988dbc": "BroCoin()", +"be999705": "addFunds(uint256)", +"be99a797": "setNewRegister(int256,string,string,uint256)", +"be99a980": "setAddress(bytes32,address,bool)", +"be99c50f": "purchaseInternal(uint256,address)", +"be99ed6f": "getCompte_41()", +"be9a6555": "start()", +"be9a9a28": "getRequestStatus(uint256,uint256)", +"be9aa8ac": "setSaleContracts(address,address,address)", +"be9afac7": "getDaysInMonth(uint256,uint256)", +"be9b076d": "Initialized(uint256)", +"be9b3282": "cookUpFee()", +"be9b3e8a": "reclaimEth(uint256)", +"be9ba97f": "maxContributionPerAddress()", +"be9c1add": "heldBalanceOf(address)", +"be9d89c5": "createTokenToMarket()", +"be9ddfed": "getSanTimeLastMove(uint256)", +"be9e1080": "_escrowPaymentEarning(address,bytes32,uint256,uint256,address,address,bool)", +"be9e3774": "deathData_f18()", +"be9e4697": "getDiscountTrancheDiscount(uint8)", +"be9f2dc0": "hourPotHighscore()", +"be9f7a20": "setInsertCar(bytes32,uint256,uint256,uint256,uint16,uint8,uint8,uint8,uint8,uint8)", +"be9fa8dc": "Ethex(address,address,uint256,uint256,address,uint256)", +"bea046a1": "cashOutShip(uint32)", +"bea05440": "CurrentStatus(uint8)", +"bea10370": "hasRecentPrice(address)", +"bea124a6": "query(bytes,bytes,int256)", +"bea1dcf8": "taxCollector()", +"bea24735": "create_a_new_market(address,uint256,uint256,uint256)", +"bea28a30": "undoTransferOwner()", +"bea31228": "ObirumIssued()", +"bea3c8b3": "PardusNetwork()", +"bea40bad": "composeJingle(address,uint32[5],uint32[5],string,string,uint8[20])", +"bea412fa": "RedBUX()", +"bea433a9": "TriumHolding()", +"bea4ae88": "saleDue()", +"bea4c4ee": "setIBalance4(uint256,uint256,uint256)", +"bea50ae3": "setConfirmationPeriod(uint256)", +"bea51ec2": "SunnyX()", +"bea51f81": "addToKYCList(address)", +"bea5f9cd": "newPokemon(uint256,uint256,uint256)", +"bea677dd": "MCS()", +"bea69bb9": "Bal()", +"bea70578": "getPOOL_edit_16()", +"bea72c0a": "dsAdd(uint256,uint256)", +"bea76c3c": "disputeBlockNos(uint256)", +"bea7c13a": "gasPriceForCompensationAtHomeSide()", +"bea8bd27": "updateVettingTime(uint256)", +"bea948c8": "GetGift()", +"beaa4765": "setComplete(bool)", +"beab0638": "TokenAllocate(address,uint256)", +"beab3537": "isClaimed(bytes32,string)", +"beab9848": "SelfllerySaleFoundation(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint8)", +"beabacc8": "transfer(address,address,uint256)", +"beabb2c2": "proxyEnableRefunds()", +"beabdb7b": "isPermitted(bytes32)", +"beabeb3c": "getTheRandNum()", +"beac4bc3": "pauseUET()", +"beacf74f": "test_insert_findWithHintPrevDecreased()", +"bead0513": "leaveCommunity(address)", +"bead21a6": "lockAtTime()", +"bead45cf": "deposit_amount()", +"beadd203": "confirmWarranty(string,string,string)", +"beadf957": "cancelOperation(bytes32)", +"beae207f": "startAirdrop(uint256)", +"beaf56a6": "changeInsurer(address)", +"beafa2dc": "sacToken(uint256,string,string)", +"beb08ab9": "projectWallet()", +"beb0a416": "website()", +"beb1274d": "medianize(uint256[])", +"beb2b55d": "balanceHaben(address)", +"beb2bad6": "SHITP()", +"beb318a0": "updateSelfDropStageState(string,bool)", +"beb38b43": "set(bytes12,address)", +"beb3a38f": "capDay1()", +"beb40d58": "queryShare(address)", +"beb5f658": "compare(address,address)", +"beb6422f": "setClue1(string)", +"beb7de13": "updateCaps(uint256,uint256,uint256,uint256)", +"beb7fd4e": "_setMany(address,uint256,uint256[],uint256[],bool)", +"beb92f55": "setCaller(address)", +"beb9571c": "User_3()", +"beb96be5": "releaseFor(address,uint256)", +"beb9716d": "canMint()", +"beb9c90d": "wavesGW()", +"beb9d27e": "prepopulate(address)", +"beb9df86": "fwdToENS(bytes)", +"beba0b11": "ScallopCrowdsale(uint256,uint256,address,address)", +"beba285d": "privatePlacementAllocatingToken()", +"bebaa421": "setTrustAddress(address)", +"bebb7756": "RecievedDonation(address,uint256,string)", +"bebb7e60": "kscBurnFrom(address,uint256,string)", +"bebc3bfb": "requestWithdrawal(address,uint256,string)", +"bebc9d93": "buyCopyright(uint256,string,string)", +"bebcc045": "description(bytes32)", +"bebd284e": "registerCoinData2(address,uint256,address)", +"bebda5b9": "WhitelistUpdated(uint256,string,address)", +"bebdd5ca": "GenericCrowdsale(address,uint256,uint256,uint256)", +"bebe3c88": "advisorsPeriodLength()", +"bebe4f6d": "Standard_5()", +"bebeb73f": "createRoom(uint256,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bebf10d5": "WorkflowState()", +"bebf8498": "addCardToRegistry(address,bytes32,uint256)", +"bebfe207": "publishMessage(string)", +"bec0d799": "removeBook(uint256)", +"bec10cde": "increaseStake(uint256,uint256)", +"bec13af1": "doBuyerCancel(bytes16,address,address,uint256,uint16,uint128)", +"bec17f69": "isPreIco()", +"bec24a0d": "payJackpot1()", +"bec272da": "IotaGoldToken(address)", +"bec3150e": "EthereumBrilliant()", +"bec3e6f3": "overStage(uint8)", +"bec3fa17": "transferTokens(address,uint256)", +"bec507ce": "switchfun()", +"bec5e7b2": "playerDataRecord(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"bec60bd2": "change_token_price(uint256)", +"bec6bc67": "adoptionRequests(bytes5)", +"bec6eb15": "buyGladiatorChest(uint256)", +"bec77cb1": "getOwnerCards(address)", +"bec7abfd": "getBounsEarningsInRound(address,uint256)", +"bec809ec": "tomoConvertRate()", +"bec81091": "executeEtherDeltaBuy(uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,bytes32,uint256)", +"bec823c6": "BitcoinGreen()", +"beca159b": "registerUser(address,string,uint256,uint256,uint256)", +"beca40df": "PERC_TOKENS_TO_DEV()", +"beca4a8e": "TeleGrams()", +"beca7440": "right52(uint256)", +"becb1f35": "isForking()", +"becb44da": "token_sale_start_block()", +"beccdb77": "lastFeesCollected()", +"beccdd91": "updateSecPerBlock(uint256)", +"becd0580": "payEtherToWinner(uint256,address)", +"becd283f": "getPurchaseCount()", +"becd7027": "withdrawPurchasedTokens()", +"becda0ea": "tune(uint256)", +"bece1b22": "GameData(address,bytes32[],bytes32[],int256[])", +"bece2ea1": "tokenPriceIncremental()", +"bececd4e": "updateVerificationStatus(address,bool)", +"becee565": "GodeCoin(address,address)", +"becf0426": "registerAffiliate()", +"becf3add": "bonusPercent()", +"becf917f": "DistribFundsReceiverAddress()", +"becf9ce1": "removeFromAccountList(address)", +"becfbf69": "peekLastNonce()", +"bed03fdb": "winnerSelect(uint256)", +"bed09038": "updateMember(address,address,uint256)", +"bed0a8e5": "testRegisterSwarmEth()", +"bed0d1b9": "validTransfer(address,uint256)", +"bed18966": "getCompletedFlag(uint16,uint16)", +"bed1a924": "totalICOSupply()", +"bed1b8b9": "convertToInt(string)", +"bed1cfcd": "addToOwnership(address)", +"bed230d0": "burningMansCount()", +"bed25542": "onTokenReceived(address,uint256,bytes)", +"bed289c9": "CPolloToken()", +"bed315f8": "setRate(uint16)", +"bed33cae": "getCancelableAt(uint256)", +"bed34bba": "compareStrings(string,string)", +"bed36fee": "test_insert_null()", +"bed411a0": "CheckPrize(address)", +"bed43ffa": "CoinCrowdToken()", +"bed47ed8": "sId()", +"bed50ef8": "emitFeesWithdrawn(address,uint256)", +"bed531fd": "playersAmounts(uint256)", +"bed54a24": "ert()", +"bed6701f": "lastweek_winner2()", +"bed7437f": "setHydroTokenAddress(address)", +"bed866f6": "donations(bytes32)", +"bed9404f": "calculateAccountLiquidity(address)", +"bed9588b": "getUint256Max()", +"bed99850": "burnRate()", +"bed99dec": "replaceSecurityDepositRegistry(address)", +"bed9d712": "chargeJNT(address,address,uint256)", +"bed9d861": "withdrawStake()", +"beda363b": "dynamicReverse(uint256[])", +"beda86b9": "removeContributors(uint256[])", +"bedaa624": "setBZRxToken(address)", +"bedb86fb": "setPause(bool)", +"bedbb1a5": "saucePoolTotal()", +"bedc17ea": "testFailSetName()", +"bedc7796": "ownerCountOfCard(address,address)", +"bedca054": "Crowdsale(address,address,uint256)", +"bedcb4fc": "EthlanceContract(address)", +"bedcf003": "ownerBalance()", +"bedd12a5": "depository()", +"bedda13f": "setData_1(string)", +"bedddbc4": "darkcoin()", +"beddf557": "NOLLYCOIN(address)", +"bede2cac": "joinedCrowdsales(uint256)", +"bede4bd8": "lockupOf(uint256)", +"bedecc06": "seatsCount()", +"bedefffe": "getOwnerName(address)", +"bedf0f4a": "Stop()", +"bedf8e75": "Netyul(uint256,string,string)", +"bee03488": "getAllSSP()", +"bee066a8": "blocksUntilWin()", +"bee11672": "allowBundlingMultitoken(uint256)", +"bee1351e": "_getJYPCBonus()", +"bee14b3d": "getDevBalance()", +"bee16cae": "getCodeToken(uint256)", +"bee200cb": "underLimit(address,uint256)", +"bee2135e": "prefixedHash(string)", +"bee23c42": "contain(address[],address)", +"bee28042": "LVX()", +"bee2e134": "ethCollected()", +"bee36f37": "disableMiniSwapLock()", +"bee40aa4": "setCallType(uint256,uint256)", +"bee47606": "originalPricesBySpinner(uint256)", +"bee4bbeb": "unsetIsBuyByAtom(uint256)", +"bee4cc6b": "getBAB(bytes32,address)", +"bee588e9": "registerCert(bytes32,bytes,uint256)", +"bee5cdca": "getProjectById(uint256)", +"bee5ea6d": "PurgeCoin()", +"bee604ea": "addGame(address,string,uint256)", +"bee6348a": "presaleOpen()", +"bee712da": "buyZone(uint256)", +"bee96d9f": "updateGoldReferrer(address)", +"bee98dff": "get(string,int256)", +"bee9f6f3": "_getVATToCollect(uint256,uint256,address)", +"beea7bfb": "newSubdomain(string,string,string,address,address)", +"beea887c": "totalVCCoin()", +"beeae9a6": "Ather(uint256,string,string)", +"beeb0578": "processFundingFailedFinished()", +"beeb0a82": "SeaCoin()", +"beeb1b5d": "amountRaisedIsc()", +"beeb6d87": "withdrawCoin(bytes4,bytes32,uint256)", +"beebeff7": "tokenForAdvisor()", +"beec1caa": "issueCertificate(string,string,string)", +"beee5852": "opponentAmount()", +"beee9a34": "TIER4()", +"bef17ed0": "totalTeamContributorIds()", +"bef19a8b": "narcosByDistrict(uint8)", +"bef23131": "_createBurnLot(address,uint256)", +"bef28736": "UpgradedController(address)", +"bef2e0d8": "Variant()", +"bef35ccb": "requestClose(uint64)", +"bef39963": "releasedTokens()", +"bef3a083": "deadLine()", +"bef44f18": "transferChild(uint256,address,address,uint256)", +"bef4876b": "finished()", +"bef4f95d": "alarms(uint256)", +"bef5223f": "withdrawTokenToFounder()", +"bef55ef3": "readData()", +"bef566ef": "requestForMigration(address)", +"bef5bb45": "checkHash(address,string)", +"bef72fa2": "controllerLookupName()", +"bef7a2f0": "Fee()", +"bef7c258": "tierStartTime(uint256)", +"bef80387": "KYCCrowdsale(address)", +"bef8f7a5": "userAddressAdded(address)", +"bef90b94": "GetShipsByOwner(address)", +"bef973e4": "getUnclaimedFunds()", +"bef97c87": "transfersEnabled()", +"bef9e4ce": "getPreviousProfit(uint256)", +"befa1e2f": "totalBets()", +"befa7d5a": "addressFundDevelopers()", +"befaed75": "Sell_Offer(uint256,uint256,uint256)", +"befb6e56": "calCandidate(address)", +"befbae04": "completeIcoPart2()", +"befc3e2b": "getInvested()", +"befc5c32": "getOwnersItemList(address)", +"befcc34d": "updateSignedDealsCount(address,uint256)", +"befda2ff": "postIcoPhaseCountdown()", +"befe0e79": "infinity()", +"befe6299": "buySPIKE()", +"befed472": "SKToken(uint256,string,string)", +"beff6dbf": "getInsurancesCount(bytes32)", +"beff778e": "CoinBazarCap()", +"beff90dc": "isVersionContractOrLogic()", +"beffc416": "set_address2(address,address)", +"befff6af": "setUseDELEGATECALL(bool)", +"bf02dbcf": "randNums()", +"bf03e092": "join_address_pay(uint256,address)", +"bf03ef7d": "setDailyTokenLimit(uint256)", +"bf04820b": "totalLosses()", +"bf050334": "resolveDisputeBuyer(string,address)", +"bf052a8a": "countConfirmations(uint256)", +"bf059dc2": "_nonce1()", +"bf05cbe6": "hasFourStepWithdraw()", +"bf05d653": "endVesting(address)", +"bf06444b": "BrokenContract()", +"bf07aae7": "CQT(uint256,string,uint8,string)", +"bf082e38": "GICT()", +"bf084408": "submitProof(bytes32)", +"bf0872ef": "totalDiscount(uint256,uint256,string)", +"bf08778c": "seeAllNumbers()", +"bf09466f": "addEntryIn4WeekPeriods(address,uint256,bool,uint256)", +"bf0a07bd": "getHardCap()", +"bf0a53f5": "Notarize(bytes32)", +"bf0aaaf5": "OWN_ChangeState_locked(bool)", +"bf0af1ba": "checkProof(bytes,bytes32,bytes32)", +"bf0b0c52": "PaisaToken()", +"bf0b47ce": "getWinLoseAmountByBettingOwnerInGamblingParty(uint256,address)", +"bf0b88aa": "CanYaDao()", +"bf0bb225": "recoverAddressFromSignature(bytes32,uint256,address,address,uint256,address,address,uint256,bytes32,bytes32,bytes)", +"bf0c4343": "dividends_by_type(address,bool)", +"bf0ce059": "isRootAuthority(address)", +"bf0d44d5": "testControlCreateWithParentsForeignNotInUse()", +"bf0d4f03": "EventLevelUp(uint32,uint32,uint32)", +"bf0d51be": "COINLAW()", +"bf0dc1c0": "IICToken(uint256,string,string)", +"bf0df0c1": "Start3()", +"bf0e4900": "randomWithNonce(uint256)", +"bf0e63d7": "FastGrowthToken()", +"bf0e9d61": "getProof(string,string)", +"bf0f5495": "volunteerWrite()", +"bf0f88ae": "Google()", +"bf101b32": "isTransferAuthorized(address,address)", +"bf1031d9": "proposeTemplate(address,address)", +"bf10bde1": "calculatePrize(address,uint256,uint256)", +"bf1152db": "preTransfer(address,address,uint256)", +"bf11f412": "buyCreditsAndSpendAndRecover(string,uint256,uint8,address,uint256,address)", +"bf120ae5": "freeze(address,bool)", +"bf12165e": "fillUpSlot(uint256,uint256)", +"bf125c49": "balanceIsZero(address,string)", +"bf12bf4f": "transformContract()", +"bf13633c": "setvalues(string,string,string,string,string,string)", +"bf137795": "canSpawnAs(uint32,int256,address)", +"bf1482fa": "getDonators()", +"bf14c119": "fund(bytes32)", +"bf14dcbf": "collectStakingBonusTokens()", +"bf152765": "userBalance()", +"bf15a645": "add_numbers(uint256)", +"bf15d827": "issueTDETokens(address,uint256)", +"bf15e42a": "CoinClaim(string,string,uint8)", +"bf15e64c": "setPlayerLimit(uint256)", +"bf15ea76": "transferrableTime()", +"bf16e9e8": "PccToken()", +"bf16ec99": "_computeCut(uint128)", +"bf176c34": "profitAddr()", +"bf1792b3": "toHex(uint256)", +"bf187478": "shift_left(uint64,uint256)", +"bf18dfbe": "PhantomToken()", +"bf190c8e": "GACToken()", +"bf1a2e52": "NucleusVisionTokensMinted(address,uint256)", +"bf1b31c2": "ThirdPartyPlatformAddr()", +"bf1b5f19": "withdrawRequest(int256,int256)", +"bf1bb055": "getCCH_edit_14()", +"bf1c30f5": "applicationNameTaken(string)", +"bf1c8016": "closedSaleWallet()", +"bf1cd416": "GrowthPool_Released()", +"bf1d4c66": "lastPurchaseTimestamp()", +"bf1dfb8a": "totalBattles()", +"bf1e799b": "getTimelock(address)", +"bf1e8497": "preCrowdMinContribution()", +"bf1fe420": "setGasPrice(uint256)", +"bf205ebc": "luckyNumber()", +"bf208e00": "setMinAcceptedAmountInPresale(uint256)", +"bf2095a4": "sellManually(address,uint256)", +"bf212637": "getMatronId(uint256)", +"bf21e45d": "changeCrowdSaleDates(uint8,uint256)", +"bf22c457": "getJob(uint256)", +"bf22d670": "boolCallWithArray(bool[4])", +"bf22f63d": "PasswordChallenge(bytes20,bytes32)", +"bf23aec2": "getplaypool()", +"bf23b411": "eosPRIVATE(uint256,uint256)", +"bf24a794": "getMostVotedOptions()", +"bf24aad0": "set_maxDETsPerReturnLessThan(uint256)", +"bf24de3d": "transferTo(address[])", +"bf251bc6": "foundersPercentOfTotal()", +"bf251e7f": "TOTAL_CROWDSALE_FUND()", +"bf254915": "set_Gas(uint256)", +"bf255974": "GoldRegistry(address)", +"bf25bf2e": "ethToTokenRest(uint256,uint256)", +"bf25c597": "VernamToken(uint256)", +"bf25c61d": "isOwnerItem(uint256,bytes32)", +"bf260037": "addressFutureInvest()", +"bf2699e7": "initValidator(address,address,address)", +"bf26bf58": "MartinKoTokenHolder()", +"bf277962": "beneficiary(bytes32,int256)", +"bf27f585": "totalFundsReceived()", +"bf27fa7c": "OCoin()", +"bf2805e3": "getVestingAllocation(address,uint256)", +"bf2860a4": "allocateProofTokens()", +"bf28d7ee": "_setOutcome(int256)", +"bf29a854": "aboutFactoryWorkers(uint256)", +"bf29b90a": "changeAssociation(address)", +"bf2b7524": "updatePoolAddressCapTier2(uint256)", +"bf2c1cc8": "setDailyDepositLimit(uint256)", +"bf2c3dad": "TransferSellAgentSiteReg(address,uint256)", +"bf2c7cbe": "rateT4T()", +"bf2d9e0b": "totalRevenue()", +"bf2e694f": "getPreviousRequest(address,address)", +"bf2e727b": "BONUS_LEVEL_1()", +"bf303d14": "convertCountryIndexToBytes(uint256[])", +"bf30d943": "changefirst24Percent(uint256)", +"bf31196f": "offerPunkForSaleToAddress(uint256,uint256,address)", +"bf314640": "newResolution(string,string)", +"bf31d573": "send_to_darshil()", +"bf31fc58": "VestingMasterContract(address,bool)", +"bf326254": "unlockedCustomer(address)", +"bf32a4b6": "withdrawOwner2(uint256)", +"bf32bf97": "FailGuyTax()", +"bf33589b": "createImageTest()", +"bf33be97": "balanceOfOrder()", +"bf34040d": "_depositEthereum(uint256)", +"bf347404": "engravedToken()", +"bf34ea7d": "makeBatchPayment(address[],uint256[])", +"bf354389": "Eplay()", +"bf35588b": "setDepositRate(uint256)", +"bf35af36": "vestingOwing()", +"bf35d5de": "FighterCreated(address,uint256,uint256)", +"bf35d96b": "Lock(uint256,address,address,uint256,uint256)", +"bf363b18": "transferFee(address,uint256)", +"bf368399": "leaderboard(uint256)", +"bf36c5b0": "offerPieceForSale(uint256)", +"bf36dd16": "icoStartTimestamp()", +"bf3724af": "f2(uint256)", +"bf375fb5": "signFork(uint256,bytes32)", +"bf37689c": "showArrayLength()", +"bf37b8f1": "devOwed()", +"bf381f93": "changeVestingAddress(address,address)", +"bf385c00": "hasSufficientPaymentInternal(address,uint256)", +"bf390355": "initCasino()", +"bf391545": "getBAUU(bytes32,address,uint256)", +"bf395d3d": "getShipProduct(uint32)", +"bf3986ba": "TrustlessTransactions_TransactionHeight()", +"bf39ba48": "PRIVATESALE_SUPPLY()", +"bf3b1101": "transferWalletOwnership(address)", +"bf3b397b": "tokensToEthereum_(uint256)", +"bf3b9e38": "a(uint256,uint256,uint256)", +"bf3bcc41": "isMod()", +"bf3c1120": "setBytesValue(string,bytes)", +"bf3c685f": "TOTAL_VALUE()", +"bf3d6141": "setParams(uint256[],uint8[],uint256[],uint256[])", +"bf3d9995": "officialWebsite()", +"bf3da865": "scannedGoldCaps()", +"bf3e394e": "withdrawInvestment()", +"bf3e4a79": "CoreTeamAndFoundersWallet()", +"bf3e67eb": "Sk8coin()", +"bf3eea48": "privateFundEnabled()", +"bf3f493c": "AdminAdded(address,address)", +"bf40b904": "getIssuedBlock(bytes32)", +"bf40fac1": "getAddress(string)", +"bf417b9f": "MINING_SUPPLY()", +"bf419975": "MBLToken()", +"bf41e16f": "TOTAL_SHARE()", +"bf428c17": "addTrustedContractAddress(address)", +"bf4386a0": "maxMembers()", +"bf439e80": "mintForEarlyInvestors(address[],uint256[])", +"bf43e91c": "withdrawAffVault(uint256)", +"bf43ed4d": "dateInit()", +"bf43fffb": "getFirstEncounterIdFromDay(uint256)", +"bf44aa70": "setSellCommission(uint256)", +"bf44eb03": "liquidityReserveWallet()", +"bf45db19": "ArtGallery()", +"bf463341": "GetInitData()", +"bf4637e5": "jackpotPercent()", +"bf464090": "getManagerCut(uint256,uint256)", +"bf466c06": "getIntValueByKey(string,string)", +"bf46ad1d": "approveSponsorableJob(address,uint256,address,address[])", +"bf46d3df": "canSwap(uint256,address)", +"bf474766": "joinGame(bytes32)", +"bf485e95": "getElementLocation(address)", +"bf487801": "getContractBalanceOf()", +"bf48d8b5": "setCurrenseeFoundationAddress(address)", +"bf49649b": "Galatasaray()", +"bf49d120": "addReview(string,uint256,address)", +"bf4a185b": "ClientOrderEvent(address,uint8,uint128)", +"bf4a5485": "extLockBot(uint256,uint16)", +"bf4a63f8": "withdrawSOC(uint256)", +"bf4a79e6": "TimeChain()", +"bf4aaf86": "DefaultActionDelayed()", +"bf4aeff2": "payoutPeriodEnd()", +"bf4b72e3": "metaTransferHash(address,uint256,uint256,uint256)", +"bf4b7ddd": "updateEnabledStatus(address,bool)", +"bf4c06a1": "changeLogOwner(address)", +"bf4d0abe": "NatoExchangeToken()", +"bf4d5af4": "failures(uint256)", +"bf4d89b5": "parseInt(string,uint256)", +"bf4e9615": "calcPriceFromFactor(uint256)", +"bf4f7cc0": "onlyStores()", +"bf503a6e": "crowdSalePercentage()", +"bf506b47": "registerTXS(uint256,address)", +"bf5103a1": "AUTH_CANMINT()", +"bf5124d0": "displayCard(uint256)", +"bf52439b": "BezantERC20Base(string)", +"bf530969": "setLabel(string)", +"bf53253b": "NATIVE_ASSET()", +"bf5371e3": "sendOnRequest()", +"bf538b68": "BOXToken()", +"bf538f6f": "mintingCompleted()", +"bf539711": "buyTokensPresale(address)", +"bf53dd15": "HBToken(uint256,string,string,uint256)", +"bf53e3ba": "harvestQuorumPercent()", +"bf53fa61": "PRIVATESALE_END_DATE()", +"bf547894": "transferBatch(address)", +"bf54bb60": "Bitscor()", +"bf552230": "_changeAttributes(uint256,uint256)", +"bf5522da": "bounties(bytes32)", +"bf55486b": "Tanya()", +"bf559d11": "startTournament()", +"bf566599": "changeMyName(string)", +"bf5671fd": "changeSecOwner(address)", +"bf568a4c": "endIcoByCap()", +"bf56ac81": "withdrawAffiliateBalance(address)", +"bf56cc08": "emergencyClawbackEther(uint256)", +"bf5772b9": "escape(uint32,uint32)", +"bf583903": "remainingTokens()", +"bf58aad8": "privatePreSale()", +"bf59cdff": "getH3Amount()", +"bf5a451b": "foreverBlockBattleAddressUpdate()", +"bf5a4dd3": "unlist(uint256)", +"bf5a79ee": "_getSchellingRoundDetails(uint256)", +"bf5abfe3": "SimpleConsent(string,address,address)", +"bf5b2e5d": "MIND_FOUNDATION_AMOUNT()", +"bf5b4c0c": "getPendingExploreData(address)", +"bf5b6016": "addContract(string,address)", +"bf5b6234": "fillSellOrder(address,address,uint256,uint256,uint256)", +"bf5bb323": "donationMap()", +"bf5c7f9b": "emissionProvidersCount()", +"bf5c844b": "oneweek()", +"bf5cf791": "AIRDROP_TOKENS_NUMS()", +"bf5e54d2": "updateTokenImprint(uint256,bytes32,int256)", +"bf5f0169": "deliverTeamTokens(address)", +"bf5f2b67": "tradingBalanceOf(address,address)", +"bf5f4edf": "addMonsterClassExtend(uint32,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8)", +"bf5f93e7": "twoHightestBidsDifference(string)", +"bf5fc2ee": "setStartsAt(uint256)", +"bf604019": "coinTradeStart()", +"bf606d14": "sendOneEtherToHome()", +"bf611c78": "OmniDex()", +"bf61b517": "FEE_SILO()", +"bf61e4b2": "AsuRaimu()", +"bf620a45": "lockAccount(address,uint256)", +"bf6211d9": "StripToken(address)", +"bf624273": "expiryBlock()", +"bf630bc8": "AliCoin()", +"bf6311c2": "_progressAdPrice(uint256)", +"bf632e67": "stateController()", +"bf6537a0": "crowdsaleBeneficiary()", +"bf654aac": "maxFeePercentage()", +"bf656791": "getMinContrib()", +"bf65d492": "FileName()", +"bf65dd32": "_checkAndCallApprove(address,uint256,bytes)", +"bf664892": "PARSECS_PER_ETHER_BASE()", +"bf66a5f9": "indSaleDeposit()", +"bf6713f6": "getGift(uint256)", +"bf671782": "handleReferrals(address,uint256,uint256)", +"bf686453": "PAN()", +"bf6888c8": "VESTED_PERCENT()", +"bf6896eb": "signAgreement(bytes32)", +"bf69d707": "punkBids()", +"bf6a10d7": "validateContributor(address,uint256,uint8,bytes32,bytes32)", +"bf6a1413": "hasSigned(address)", +"bf6ad320": "winnerPrice()", +"bf6ad32b": "getgbyte()", +"bf6afbaf": "FeePaid(address,address,uint256)", +"bf6b43a1": "upgradeCrystalMine()", +"bf6b6536": "SampleContractOther()", +"bf6c277a": "getTotalAccessorySeries()", +"bf6c4de9": "newPLCRWithToken(uint256,string,uint8,string)", +"bf6ca138": "issuedExternallyTokens()", +"bf6d91be": "addClient(address,uint256,uint256,uint256)", +"bf6d9abd": "unlockTransfer()", +"bf6deda4": "createLotto(bytes,bytes,bytes10,bytes10,bytes)", +"bf6eac2f": "stake(address,address,uint256)", +"bf6eb070": "MAX_ALLOWED_STAGE_2()", +"bf6ec777": "takeFee(uint256,address)", +"bf6edbd9": "mintFrozen(address,uint256)", +"bf6f7755": "transferBaseOwnership()", +"bf7035c3": "getSaleContractDepositEtherMin(address)", +"bf70a985": "PRESALE_ETH_IN_WEI_FUND_MAX()", +"bf70bd75": "stopPreIco_step2()", +"bf716708": "TOKEN_SUPPLY_SEED_PRESALE_LIMIT()", +"bf730997": "modifyGuess(uint256,uint256,uint256)", +"bf733e29": "oraclize_newRandomDSQuery(uint256,bytes,uint256)", +"bf735b13": "createSale(bytes32,uint256)", +"bf737c87": "JackpotWon(address,uint256)", +"bf7408de": "TAJ()", +"bf742d56": "canExecuteArbitraryCode()", +"bf748655": "isPaymentRegistered(bytes32)", +"bf748e47": "get_pre_kyc_iconiq_bonus_numerator(address)", +"bf7540d2": "getMoneyCount()", +"bf754558": "conversionsEnabled()", +"bf75553a": "sacarWEA()", +"bf75fdb5": "CreateShortAlias(bytes32)", +"bf77aa1f": "updateListing(uint256,bytes32,uint256)", +"bf77afdb": "TokensReserved(uint256)", +"bf7929a6": "refundeadline()", +"bf7abee6": "SetAuth(address)", +"bf7b69ee": "payDebt(address)", +"bf7ba12a": "LupeShares(address,address)", +"bf7c734e": "setMinSell(address,uint256)", +"bf7c775e": "RESERVED_RESERVE_UNLOCK_AT()", +"bf7e214f": "authority()", +"bf7e4026": "pizza_machine(uint256,uint256,uint256)", +"bf7e7f62": "MaxCouponsPaymentUSD()", +"bf7ea21c": "addWhitelistMember(address[],uint256[])", +"bf7f10fe": "isTransferShipment()", +"bf7f3cfe": "getVotesPerProposal()", +"bf7f8b89": "EthernetCash()", +"bf7ff81e": "bitwordsWithdrawlAddress()", +"bf815059": "updateUnidentifiedSaleLimit(uint256)", +"bf81765c": "adminAddressForComissions()", +"bf83735c": "changelp19(address)", +"bf83f2a2": "setAllocator(address)", +"bf843aed": "BuckyCoin()", +"bf8554ff": "fireOnOfferingChanged(uint256,bytes32,uint256[])", +"bf85cc27": "settleCfd(uint128)", +"bf85e628": "startVesting(uint256,uint256)", +"bf86d690": "isShutdown()", +"bf86e013": "createPromoBot(uint256,address)", +"bf872aee": "revokeConfirmation(uint256,bytes)", +"bf8783e0": "callAndGetReturn(address,bytes,uint256)", +"bf884cf5": "exitThisIcoForHalfOfTokenPrice()", +"bf8853c6": "getUserInterest(address)", +"bf8869b5": "GetBal()", +"bf88a6ff": "reward_contract()", +"bf88fc09": "revokeOwners(address)", +"bf892eaa": "removeTrustedContract(address)", +"bf89662d": "refundable()", +"bf8981c0": "left36(uint256)", +"bf8af541": "setLockRatio(uint256,uint256)", +"bf8b6466": "anOfferWeCantRefuse()", +"bf8b7ec2": "OpenGift()", +"bf8ba305": "getCodeStorage(uint256)", +"bf8bcee4": "setMaxLimit(uint256)", +"bf8bdac1": "setService(address)", +"bf8bf85e": "latestReleaseChecksum()", +"bf8c50ff": "scheduleTransaction()", +"bf8c6b63": "is_diagonal(int8)", +"bf8ce97f": "_take0xTrade(address,uint256,address[5][],uint256[6][],bytes)", +"bf8d5df8": "setTickerSymbol(string)", +"bf8dde4d": "calculatedReward()", +"bf8e0ea4": "logGive(address,string)", +"bf8eae55": "ChangeGasReuired(uint256)", +"bf8ecf9c": "authProposals()", +"bf8edd85": "setPriceInEth(uint256,uint256)", +"bf8f09cb": "cancelOrder(address,uint32)", +"bf8faa9c": "AMLToken(string,string,uint256,uint256,bool)", +"bf8fc670": "sendToAggregation(uint256)", +"bf9005ec": "Test6J()", +"bf907def": "buyGold(bytes32,string,string,string,string,string)", +"bf90c4e7": "PYRToEth()", +"bf913c5e": "getFamedStarByMass(uint256)", +"bf91cbb5": "mineIsBigger()", +"bf91ef18": "mergeBoostData(uint256)", +"bf9222d0": "DNT()", +"bf93a8be": "changeOwnership(address,address)", +"bf947852": "blockInvestor(address)", +"bf94de12": "createPoll(address,bytes32,uint256)", +"bf955038": "Judgement(uint256,uint256,uint256)", +"bf962302": "addIntTag(bytes32,int32)", +"bf96ae63": "signUp()", +"bf981995": "getCountryInfo(uint256)", +"bf983772": "BaseExchangeRateChanged(uint256)", +"bf98976e": "test_curatorDoesVeto()", +"bf989b6e": "setContracts(address,address,address,address)", +"bf98a50d": "GasReceipt(address)", +"bf99669d": "DevPromotionsMarketingSupply()", +"bf99cce1": "buyTokens(address,uint256,bytes32[])", +"bf9a5fde": "setConfiguration(uint256[],uint256[])", +"bf9a6958": "createVoterOnElection(uint256,address,address,string,string,string)", +"bf9ab00c": "getTeamPerfit(uint256)", +"bf9b8b38": "CrypviserToken(address)", +"bf9bbe71": "TRE()", +"bf9befb1": "totalStakes()", +"bf9c0d44": "RandomLedgerService()", +"bf9c3949": "createFaucet()", +"bf9c5001": "authors(address)", +"bf9d3d39": "setLineUpEnable(uint256)", +"bf9e6b0e": "TokenSwap(address,uint256)", +"bf9e7b75": "DeliveredBTC(address,uint256)", +"bf9f01f8": "buyMasterNodes(uint256,uint256)", +"bf9fc4e2": "balanceOfRobots(address)", +"bfa0b133": "salt()", +"bfa0fc93": "getVoteResult(uint256)", +"bfa190f3": "mTransfer(address,address,uint256)", +"bfa1bd62": "stakeAirdropWhileLocked(address,address,uint256,bytes)", +"bfa3c1e6": "MySale(uint256,uint256,uint256,uint256,uint256,uint256,address,bytes32,address,uint256)", +"bfa51df9": "isAirdropped(address)", +"bfa535c7": "apply(string,uint256)", +"bfa54b3f": "BLB()", +"bfa5f1f7": "getLandmark(uint256)", +"bfa814b5": "func()", +"bfa87e80": "tellPreviousContract(address)", +"bfa8ad36": "createProof(bytes32,bytes32)", +"bfaa1763": "FATA()", +"bfaad84b": "getLastStarOfAssetId(uint32)", +"bfab3db9": "withdrawContractBalance()", +"bfab41c9": "getTargetBlock()", +"bfab4f8b": "isMonsterAuction()", +"bfabd754": "increaseFrozen(address,uint256)", +"bfabe6c4": "ShakaliosToken()", +"bfac0046": "getPlayerWallet(uint256)", +"bfad16f4": "new_offer(uint256,uint256)", +"bfae2f0e": "addrAdmin()", +"bfae8867": "getLockTimestamp(string)", +"bfaec04e": "publish(string,bytes32)", +"bfafa8e6": "auditText(uint8,string)", +"bfafb91c": "changeMaxCoefPlayerForEmission(uint256)", +"bfafe92f": "_buyCallToOpen(uint256,uint256,uint256,uint256,address)", +"bfb01f72": "buyWithCustomerId(string)", +"bfb04c60": "proposeAcceptanceAsMember(uint256)", +"bfb05e0b": "declineFightApproval(uint256)", +"bfb08b4f": "MayanToken()", +"bfb0d82e": "__callback(bytes32,address[])", +"bfb1fcf5": "dmlwallet()", +"bfb2fad7": "totalDepositTokenAll()", +"bfb42682": "addPresaleOrder(address,uint256)", +"bfb460e9": "receiverSetAmountRequired(uint256)", +"bfb47e72": "CryptoSurprise()", +"bfb4d66f": "SudjuKoin()", +"bfb4ebcf": "Foo()", +"bfb51ac9": "startGame(uint256,bytes32)", +"bfb65777": "allContacts(address)", +"bfb68141": "disableTokensTransfer()", +"bfb77030": "BRM()", +"bfb7896d": "OQToken()", +"bfb790b4": "weeklyRate(uint256)", +"bfb7c227": "Developeo(uint256,string,string,address,address,address,address,address,bool)", +"bfb7d9f6": "stringandbytes()", +"bfb80547": "unfreezeAddress(address)", +"bfb8a319": "withdrawal(bytes32,address)", +"bfb8c63e": "confirmDeal(bytes16)", +"bfb909ce": "applyFeeToAddress(address,address)", +"bfb9f088": "addInvestorList(address[])", +"bfba1e8d": "gamePlayed()", +"bfba5dd6": "equal(address,address,string)", +"bfba9029": "hashBetMax()", +"bfbaa54d": "MithrilMace()", +"bfbad8b9": "preSaleEtherRaised()", +"bfbb6a23": "winEth(address,uint256)", +"bfbbd489": "setMonsterAuctionAddress(address)", +"bfbbfb1d": "getWinNumberBySlot(uint256,uint256)", +"bfbc37f7": "KOSHER()", +"bfbc793c": "computeNameFuzzyHash(string)", +"bfbc944c": "oldTokenReward()", +"bfbccfae": "currentCoinsCreated18Decimals()", +"bfbcf293": "setChampEC(address,address)", +"bfbd5074": "getVillain(uint256)", +"bfbf95cf": "participateICO(address,uint256)", +"bfbfa8e4": "kBalance()", +"bfc0a342": "owner_loadFunds()", +"bfc0cc5c": "sendEcosysSupplyToken(address,uint256)", +"bfc0e849": "startNextEra(bytes32,uint256,int256)", +"bfc1f48c": "isCapFree(address)", +"bfc2a675": "CreateCredo(address,uint256)", +"bfc2aa2a": "claimedSupply()", +"bfc303fa": "updatePublicData(uint256,string)", +"bfc38592": "cancelItemSale(uint256)", +"bfc3aef0": "setActiveStar(uint256)", +"bfc3cd2f": "testFailChargeMoreThanApproved()", +"bfc3d84b": "CT()", +"bfc47aa0": "tokensCrowdsale()", +"bfc4d11c": "subJobSponsorshipsBalance(address,uint256,uint256)", +"bfc54822": "bet(uint256,uint256,uint256)", +"bfc5624a": "newBadAPM(bytes32,bytes32,address,bool)", +"bfc6cdd1": "DukevsKansas()", +"bfc708a0": "reportMalicious(address)", +"bfc7952f": "outstandingPayouts()", +"bfc83af4": "setBountyTokenWallet(address)", +"bfc84528": "juicyBonus()", +"bfc8bfce": "executeTransaction(uint256,address,bytes,bytes)", +"bfc99f5b": "unsafeWriteAddress(uint256,address)", +"bfca33f7": "Court(address[],uint256[])", +"bfcabcbf": "changeFeeAmountThreshold(uint256)", +"bfcae563": "dateSaleEnded()", +"bfcc4ab2": "change_time_stamp(uint256,uint256)", +"bfcc8b6d": "ownerOfPlayer(uint256)", +"bfcdbae9": "preICOStartTime()", +"bfcdca48": "CastVote(bool)", +"bfce0b7f": "mainSaleEtherCap()", +"bfce477f": "forwardTransaction(uint256,bytes)", +"bfce8cbf": "redeemAdoptedAxies(address,uint256,uint256,uint256)", +"bfcf04cf": "updateId()", +"bfcf0baf": "testSliceToString()", +"bfcf63b0": "claimEther(address,uint256)", +"bfcf73e7": "blocksToLive()", +"bfd07c38": "LowJackpotHolder()", +"bfd0a553": "specWallet()", +"bfd1084f": "BitNauticWhitelist(uint256)", +"bfd13217": "ethReceivedPresaleOne()", +"bfd17831": "RECEIVER_ADDRESS()", +"bfd201f5": "setTransferFees(uint256,uint256,uint256)", +"bfd2385e": "allowanceOf(address)", +"bfd24821": "BonusCrowdsale(uint256,uint256)", +"bfd2ed01": "bountyPercent()", +"bfd3c5fa": "refundTransactionAfterExpiry(uint256)", +"bfd3fa6a": "becomeFairymaster()", +"bfd431d1": "RefundToBuyers()", +"bfd45540": "BlocHipo()", +"bfd4d720": "investors_number(uint256)", +"bfd4dce9": "WhatIsTheBestFoodInTheWorld()", +"bfd525b3": "stopTimeLength()", +"bfd61504": "_addControllerByPartition(bytes32,address)", +"bfd6ef3e": "explore(uint256,uint256,uint256)", +"bfd74534": "getRequest(address,address)", +"bfd7534f": "developer_address_for_D(address)", +"bfd75da4": "TrueUSD()", +"bfd812ec": "suspend(bool)", +"bfd8222a": "checkReward(uint256,uint256)", +"bfd8300d": "setBonusInterval(uint256)", +"bfd85808": "frozenTokens(address)", +"bfd8a06e": "getFinalWinningReportingToken()", +"bfd8fc93": "getOwnersLength(bytes32)", +"bfd90435": "addDataset(address,address)", +"bfd94c8c": "transferIsAllowed(address)", +"bfd9726d": "getMntTokenBalance(address)", +"bfda3b1a": "setSharedStorage(address)", +"bfdad9a4": "SignedContractVault(string)", +"bfdadc19": "change_price(uint256)", +"bfdb8796": "getPoolNameByID(uint256)", +"bfdc35f2": "onBalance()", +"bfdcc9a2": "numBuckets()", +"bfdcd480": "test_invalidProposalDuration()", +"bfdcdbf5": "subkey(address,uint256)", +"bfdd1a20": "getPOOL_edit_17()", +"bfde4f62": "withdrawAllEthToOwner()", +"bfdecf8c": "purchaseTokenInPresale()", +"bfdeddaa": "AllowedContributionCheck(uint256,uint8)", +"bfdf5e80": "communityPot_()", +"bfe0c27e": "getCurrencyAddress()", +"bfe10928": "distributor()", +"bfe1292a": "distributeLenderBot(address[],uint256,uint256)", +"bfe36f58": "HashCoinToken()", +"bfe370d9": "bytesToBytes32(bytes)", +"bfe38df5": "getTotalBet()", +"bfe3a664": "createCrowdsale(address,uint256[8])", +"bfe3c39d": "JYKToken()", +"bfe3e03a": "midGradeHold()", +"bfe44c4b": "getUserValue(bytes20,uint256)", +"bfe484de": "judge(uint256,bool,bytes32)", +"bfe4ed8e": "Razoom(address)", +"bfe53e5c": "holdersWithdrowsOf(address)", +"bfe597fe": "genesisBlockCount()", +"bfe689cf": "lockedValuesAndTime(address,uint256,uint256,uint256)", +"bfe6b1ac": "acceptOffer(uint16,uint256)", +"bfe6c0c7": "viewa1(address)", +"bfe70251": "_checkCertificate(bytes,uint256,bytes4)", +"bfe713e3": "truecoin()", +"bfe777c3": "addPrMemberById(uint256,address,address)", +"bfe7e2eb": "BCBCYCoin()", +"bfe86bbe": "publicGetElement(uint256,uint256,uint256)", +"bfe8936c": "getAssetDetailsURI(uint256)", +"bfe8c107": "betOnDozen(bool,bool,bool)", +"bfe9b7df": "pubkeys1()", +"bfe9e7f4": "pack(address,bytes)", +"bfe9f204": "dividendCycleTime()", +"bfea267a": "getBalanceToMint(address)", +"bfea8790": "enableScheduler()", +"bfead4b9": "maxWithoutWhitelistPerUser()", +"bfeb049c": "IndexOfCurrentDraw()", +"bfebb947": "unblacklist(bytes32)", +"bfec83d6": "RoleAdded(address,string)", +"bfec8b01": "insertSection(bytes32)", +"bfee3569": "setTokenControlInfo(address,uint256,uint256,uint256)", +"bfef9627": "set(bytes4,uint8,uint8)", +"bff04d6f": "testPostpone()", +"bff05aef": "adminRefundTokens(address,uint256,uint256)", +"bff0fbb8": "calculateMeat(uint256)", +"bff10815": "deleteOffer(uint16)", +"bff179c4": "setJadeCoinZero(address)", +"bff18c78": "deployFactory()", +"bff1f9e1": "totalUsers()", +"bff2c413": "ChangeFoundersWalletAddress(uint256,address)", +"bff35618": "setTransferLock(bool)", +"bff41e36": "WEI_RAISED_CAP()", +"bff44f0d": "confirmAddressChange(address,address)", +"bff49180": "updateVendorValid(uint256,bool)", +"bff547c0": "setOrganizationShareSymbol(string)", +"bff5e021": "PumpToken()", +"bff5fb64": "appNickname()", +"bff5fccd": "myWishes()", +"bff65668": "isPresaleHolder(address)", +"bff7df7c": "refundDeadLine()", +"bff7e179": "multiPurchase(uint32[],uint8[],uint8[],uint8[],string)", +"bff8314f": "SetMaxPosXblock(uint256)", +"bff8a36d": "decreaseReserve(uint256)", +"bff974e8": "getContentReplies(uint256)", +"bff99c6c": "tokenWallet()", +"bff9e842": "getSamplesForOwner(address)", +"bffa02d5": "sendP3D(address,uint256)", +"bffa4e41": "getMintAmountApproval(address,address)", +"bffa55d5": "claimRefund(address)", +"bffa9258": "assetCount(address)", +"bffb10de": "add_creature(address,string)", +"bffbe61c": "node(address)", +"bffc235a": "mintedList(uint256)", +"bffcd758": "nasdaqo(uint256,string,string)", +"bffd952a": "transferMaintainer(address)", +"bffdf3f1": "Test4()", +"bffeadd6": "move(uint8,uint256,bytes,uint8,bytes32,bytes32)", +"bffee609": "setSkills(address,uint256,uint256,uint256)", +"bfff23f2": "CaptainKitty()", +"bfff374d": "DepositReturned(uint256,address)", +"bfffe670": "window1StartTime()", +"c00007b0": "getReward(address)", +"c0001786": "ownerBurn(address,uint256)", +"c0012077": "TeamContract()", +"c002c4d6": "getTicket()", +"c003598a": "XEN()", +"c0036137": "ownerProfitPercent()", +"c003b082": "getMyPlayerID()", +"c003f540": "sco(uint256,address,uint256)", +"c00465ab": "CrowdsaleToken(uint256,uint8,address,bool,address)", +"c004a877": "shiftSalePurchase()", +"c0056b7b": "updateAccount(uint8,bytes32,bool,bytes32)", +"c005c686": "validateCompoundContract(uint256)", +"c005dc7b": "hon2backup()", +"c00710fa": "userContractsPred(address,uint256[],uint256[],uint256)", +"c0075772": "setPromoTokenController(address)", +"c0086b19": "BCP(uint256,string,uint8,string)", +"c00941d9": "Dominator()", +"c009b451": "setEventActive(bool,string)", +"c00ab18c": "_toSgaAmount(uint256)", +"c00ade41": "receiveTransferOwnership()", +"c00b060c": "getArrBoolField3()", +"c00c176c": "GoGO()", +"c00c2ceb": "isRedeemAllowed()", +"c00c4e9e": "batch(address[],uint256[])", +"c00ca383": "getByOwner(address,uint256)", +"c00d5305": "oraclize_setNetwork()", +"c00d8f3d": "processLotteryReward()", +"c00daefe": "etherFund(bytes32,string)", +"c00e4306": "getCurrentTokenAmountForOneEth()", +"c00ea6ef": "Polaris()", +"c0112678": "arcToken()", +"c0116c3c": "doAirdrop(address[],uint256[])", +"c011cd1c": "getClixToken()", +"c012e179": "mintDepositAccount()", +"c0130adb": "addadjacencies(uint16[],uint16[],uint16[])", +"c0140fd1": "bid(bytes32,address,uint256)", +"c014464e": "checkFeePeriodRollover()", +"c014875f": "mint(bytes32,address,uint256,bytes)", +"c01569f9": "buyPiece()", +"c01685d4": "FTKTToken()", +"c01706dd": "getContentByRank(address,uint256,uint256)", +"c0171112": "timestamp(uint64)", +"c018d0e6": "getFeeAmount(int256,int256)", +"c018fe0d": "sub_sessione(string,uint256)", +"c01a1c5f": "totalSellPrice(uint256,uint256)", +"c01a8c84": "confirmTransaction(uint256)", +"c01ae5d3": "drop(address[],uint256[])", +"c01b3aa4": "STARTING_SNAKE()", +"c01bc982": "isRestricted(address)", +"c01c1ca3": "claimRemaining()", +"c01ca43f": "getPlayerState(address)", +"c01d1c60": "getTokenExchangeRate()", +"c01d8280": "get_balance(address,string)", +"c01de45c": "storeBet(uint256,uint256,uint256)", +"c01e38e6": "addPlayer(address,uint256,uint256)", +"c01e3985": "StupidityToken()", +"c01e8b6a": "Zigit()", +"c01f475f": "_setClearingPrice(bytes32,uint256)", +"c01f56d0": "OfferToDisciple(uint256,uint256)", +"c01f9e37": "proposalDeadline(uint256)", +"c0204bab": "EasyOsmiumCrowdsale()", +"c020df48": "updateGas(uint256)", +"c022215c": "getTotalDeposit()", +"c0227bd3": "_toTaxes(uint256)", +"c022abbe": "GetAuction(uint32)", +"c022ef43": "getTimeLeftToNextLocalBountyCollect(uint16)", +"c023a231": "BitSTDView(address)", +"c02515a9": "maxTokenForHold()", +"c0263163": "ATT(address)", +"c026327a": "removeBankToken(uint256)", +"c02738da": "generateTargetTokens(address,uint256,uint256)", +"c02898a0": "potatoOwner()", +"c028c674": "right82(uint256)", +"c028df06": "offer()", +"c028e3c9": "cordX(uint256)", +"c0297bc8": "DreamX()", +"c02aaea1": "totalTokensForSaleDuringPreICO()", +"c02b04d8": "rescueLostProperty(uint256,address)", +"c02b5395": "NAMO()", +"c02bf40c": "FundsDeposited(address,uint256,uint256,uint256,uint256)", +"c02c89fe": "PreicoClose()", +"c02cc957": "firstDigit(string)", +"c02d0140": "buyCard(uint8,string,string,string)", +"c02d1e02": "a_document(uint256)", +"c02e580e": "roundEnd()", +"c02f081a": "shiftBits(bytes,int256)", +"c02fd500": "E4Lava()", +"c0309697": "challengeContract(address)", +"c030d8b8": "setCardContract(address)", +"c030f3e2": "increaseSaleLimit(uint256)", +"c031a180": "getBytes(bytes32)", +"c031a78b": "maxMedalsBurned()", +"c0324c77": "setParams(uint256,uint256)", +"c032846b": "getContractStatus()", +"c0329a3e": "startAirdropFrom(address,address[],uint256)", +"c032dc30": "execute(uint256,address)", +"c0338a0c": "transferTileFromOwner(uint16[],address)", +"c0343b09": "setDisputeInterface(address)", +"c035340c": "withdraw_1()", +"c035e492": "onholdBalances(address)", +"c0362523": "setUpgradedOwner(address,address,address)", +"c036c100": "NextGenHype()", +"c03785c3": "MyRefundVault(address)", +"c03795ba": "departmentrequest(address,string,bool)", +"c037ae58": "VESTED_AMOUNT_TOTAL()", +"c037d9ce": "getElementsFromIndex(uint32,uint32)", +"c038a38e": "totals()", +"c038f541": "setProperty(string,string,uint256,int256,string)", +"c03951f7": "FaceWalletToken()", +"c0395bb5": "isCurrentOrPastAdmin(address)", +"c039b88c": "_makeSpecialId(address,address,bytes32)", +"c039bd87": "withdrawTokenFromPkt(address,uint256)", +"c039d6db": "PutEther()", +"c039daf6": "tokenCreationMin()", +"c03a4018": "getGuessInfo(string)", +"c03aac7a": "setSellDividendPercentageFee(uint8)", +"c03b70d5": "getTurnover(address)", +"c03ba041": "BNC(address)", +"c03bdbae": "setRdFee(uint256,uint256)", +"c03c3003": "increment(int256)", +"c03c72aa": "isBattleDecider()", +"c03ce1d8": "BondingManager(address)", +"c03ce796": "crowdSaleStage()", +"c03cf137": "getMyLocker()", +"c03d00f3": "a_viewCoinSupplyAndFunding(bool)", +"c03d1b1d": "verifyCertWithID(bytes32,bytes32,bytes32,address)", +"c03d848c": "convertEthToCents(uint256)", +"c03e2cbf": "Whitelisted(address,bool,uint256,uint256)", +"c03e382f": "calculateShare()", +"c040188f": "preSaleLockEndTime()", +"c0406226": "run()", +"c040e6b8": "stage()", +"c040ebec": "getUserSize()", +"c04123fb": "checkProposalCode(uint256,address,uint256,uint256,bytes)", +"c041652d": "getVendorApplicationStatusTrackCount(string)", +"c04198f3": "getEndDate(string)", +"c042575f": "ETHmultiplier()", +"c0435e29": "setDefaultFriendsFingersRate(uint256)", +"c043c0d9": "changeMaximumPlayers(uint32)", +"c043df8c": "verifyWithdrawSignature(address,bytes)", +"c04484fd": "resetInternal(uint256)", +"c045732c": "addPreIcoMembers(address[])", +"c0459899": "approvePreSigned(address,uint256,uint256,uint256,uint8,bytes)", +"c04605b8": "softEndDate()", +"c0462ec3": "withdrawAllTokensToExchange(address,address,uint256)", +"c0463711": "lastUpdate()", +"c0463810": "PalmToken()", +"c0465f3a": "dateSisterWins()", +"c046c691": "setMoveProductToWhom(address,uint256,address)", +"c046d9b5": "borrow(address,uint256,address,bytes)", +"c0472889": "currentIDnumber()", +"c047c1d8": "transactionsStatusUpdate(bool)", +"c0489af5": "foundersTimelock1()", +"c048dfb8": "postpone(uint256)", +"c0496e57": "setNotarisationFee(uint256)", +"c049813a": "preIcoStagePeriod(uint256)", +"c04a5414": "developmentWallet()", +"c04aa9b8": "rpow(uint128,uint64)", +"c04bb954": "rejectionRatio()", +"c04c5947": "getGames()", +"c04c68eb": "changeAllowTransferState()", +"c04c8e43": "SNSCOIN()", +"c04ca3f5": "_removeAgent(address)", +"c04cc86b": "collecttaxes(uint256)", +"c04d90d0": "ownerByIndex(uint256)", +"c04de318": "slashAddressLikeUsername(string)", +"c04ecdb8": "promoTokenController()", +"c04f01fc": "power(uint256,uint256)", +"c04fcad8": "INITIAL_TOTAL_SUPPLY()", +"c0506782": "_createArtwork(string,string,uint32,address)", +"c050f6dc": "admitUser(address)", +"c0517c5a": "XferMoneyMarketing()", +"c051f75f": "setSchemaRegistry(address)", +"c05283ff": "logQuery(bytes32,address)", +"c0533b5d": "appVersionList(bytes32,address)", +"c05374f7": "AirChn()", +"c05390f6": "PRIZE()", +"c053dc6b": "EtherBags()", +"c053ebf5": "setProviderClosed(uint256,uint256)", +"c054e050": "extractProofOfExclusion(address[],uint256[],bytes32[],uint256[],bytes,bytes)", +"c0567656": "subtractFee(uint256)", +"c0576b73": "monsters(uint256)", +"c057b40d": "SpainvsRussia()", +"c057eca7": "minStakingTime()", +"c0584e68": "ContributorsSupply()", +"c0597a55": "freedWosPoolForThirdStage()", +"c05a30b9": "_processFunds(uint256,uint256)", +"c05a8e81": "getPosition(uint8[176],uint256)", +"c05b7cf6": "setCreationProfit(uint256)", +"c05b8066": "setCompte_18(string)", +"c05ce08f": "calculatePoints(uint256,uint256)", +"c05d1f0e": "PRESALE_JOINTTOKENS()", +"c05dd5d2": "MatchAborted(uint256)", +"c05e5776": "giveRightToVote(address,address)", +"c05f486e": "DEV_SUPPLY()", +"c060ac53": "bytes20ToString(bytes20)", +"c0615f09": "CPGPEREGRINE_EXTRACTION_BASE()", +"c0619c70": "setPrimaryManager(address)", +"c06265d3": "createContractState(string)", +"c062dc5f": "releaseAmount()", +"c062ef86": "_random_empty_location()", +"c062f578": "updateStage()", +"c0631b12": "moneyWallet()", +"c0645011": "getPastRound(uint256)", +"c06474e0": "removeShare(address,uint256)", +"c06508dc": "QBTCoin(address)", +"c0652cf9": "EdelRostenCoin()", +"c0659108": "beneficiariesLength()", +"c065ecc2": "queryChildLength()", +"c065fcf1": "RESERVED_PARTNERS_SIDE()", +"c066bd1a": "addItem(uint256,uint256,address)", +"c06702dd": "changeStage()", +"c0670d2c": "calculateDistributionPeriods()", +"c0675b78": "addBuyTokensRequest(string,uint256)", +"c0677fb6": "SetIdentifiedContract(address,address)", +"c0689e2d": "newCrowdFundingCampaign(address,uint256)", +"c068eae0": "player_collect_winnings(uint256)", +"c06a22f4": "dollarsForEther()", +"c06b0d21": "BondToken(address,address,address)", +"c06b5281": "buyXnameQR(address,bytes32,uint256)", +"c06c4474": "get_burned(bytes32)", +"c06c66ca": "bountyFund()", +"c06d1272": "startPreIco()", +"c06d1490": "oppositeAnnouncement(uint256)", +"c06d7744": "getAllSignersCount()", +"c06dabf8": "_escrowHostPaymentEarning(address,bytes32,uint256,uint256,address,bool,uint256)", +"c06f146b": "setNumInvalidMarkets(uint256)", +"c06f1bc4": "updateVoterTimes(address,uint256)", +"c06f4c1d": "newCampaign(bytes32,bytes32,bytes32,address,uint256,uint256,uint256,address)", +"c06f8340": "cancelAuctionByAdmin(uint256)", +"c06fad06": "items()", +"c06fff76": "proposePauseChange(bool)", +"c0702d9c": "_mint()", +"c07097a6": "coindropsLockEndingAt()", +"c0715d1d": "assertSafe(bool)", +"c071f3bf": "deliverPurchasedTokens()", +"c072422d": "buyTokens(bytes32,uint256,uint8,bytes32,bytes32)", +"c072497a": "claimPlotMultipleWithData(uint256[],uint256,string,string,string,string)", +"c072dcf3": "ExampleContract()", +"c073af55": "GetJackpotMin()", +"c07401f0": "addToPool()", +"c0740c16": "numElementsOdd()", +"c0741c53": "test_assetRegistration()", +"c0743044": "partAllocations(uint256)", +"c074313f": "pricePerStake()", +"c074a27e": "proposeTransaction(address,uint256,bytes,string)", +"c074fe80": "SetPrecioUnidadPase(uint256)", +"c07653af": "Gavinhereum(uint256,string,string)", +"c076c847": "NorthPoleAF()", +"c0774df3": "canForward(address,bytes)", +"c0777545": "balanceAD()", +"c077b0f9": "getARSchedule()", +"c079418b": "setTranchWei(uint256[])", +"c0797ae1": "stakerIncomeShare(bytes32)", +"c079c318": "adjustFee(uint256)", +"c07a1f0c": "changeHouseFeeAddress(address)", +"c07a32c4": "dateIsLegal(uint256)", +"c07a5537": "MintableTokenWithMinters()", +"c07b18ca": "PullPaymentMock()", +"c07b2586": "SAFCOIN(uint256,string,uint8,string)", +"c07bcfdc": "updateLimitPerDay(bytes32,uint256)", +"c07dc59c": "withdrawPot(string)", +"c07dc890": "selfRegisterDINs(uint256)", +"c07dd842": "buyFactor()", +"c07e3391": "setMonethaAddress(address,bool)", +"c07f47d4": "latestVersion()", +"c07f773a": "totalTokensAllocated()", +"c080f08f": "complexReturnType(int256,string,bool,string)", +"c0819961": "Invest()", +"c081efc1": "hasSellerBeenAccepted(address)", +"c083455f": "ownerPutInterest(uint256)", +"c0835106": "isVotable(bytes32)", +"c08415b1": "ORDER_PLACE(address,address,bool,uint256,uint256,uint256)", +"c0845e8a": "catchMonster(address,uint32,string)", +"c0846957": "EtherDeltaTokenBalance(address)", +"c0851e09": "getEarlyPurchase(uint256)", +"c0864877": "tokensForOwner()", +"c088003d": "getMinThresholdOfVoters(uint256)", +"c0887991": "getOperation(address)", +"c088df47": "SECRET_BONUS_FACTOR()", +"c08a86b1": "endGame(bool,uint256)", +"c08cc02d": "getProposalCount()", +"c08d1fe5": "timeLimit()", +"c08dd1dc": "IOU(string,string,uint8)", +"c08e05aa": "icoRuleCancel(uint256)", +"c08eea14": "cloneAccount(uint256)", +"c0905fef": "getStackholders()", +"c090b4df": "createRecord(string,string)", +"c090b86d": "createKingdom(string,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"c090da1e": "Zhennong(address)", +"c0910475": "PaymentStatusTimeStamp(address,address)", +"c0916437": "modifyChoice(uint256)", +"c091c435": "refund(address[],uint256[])", +"c091e45a": "redenominate()", +"c0926d40": "HBOToken()", +"c0929385": "confirmInit(address,address,string,bytes32,uint256)", +"c092ecf4": "blocksToVest()", +"c0934c45": "getNextRules()", +"c0938c1a": "setMintAgent(int256,address,bool)", +"c0942dfd": "registerNameXIDFromDapp(address,bytes32,uint256,bool)", +"c0946d54": "AtomCoin()", +"c094c73e": "VeritaseumToken()", +"c094df20": "shift(address,uint256)", +"c0956fd9": "getRealTokenAmount(uint256)", +"c0963d97": "getTokensAmount(uint256,address)", +"c0966693": "RoomNonceAdd(uint8)", +"c09689a6": "tryFinalizeProposalsByVoterIndices(uint256[],uint256[],bool[])", +"c096aa81": "fuint8(uint8)", +"c097d629": "setPI_edit_30(string)", +"c0981285": "buyComissionUnits()", +"c098201f": "updateEtherAndtokenAmount(uint256,uint256)", +"c0997654": "destIndex(address)", +"c09a4ef4": "latestEthTxRequest()", +"c09a898d": "SPTS()", +"c09b2a2c": "weiMinSale(uint256)", +"c09bdd06": "_escrow(address,address,uint256)", +"c09d81be": "calculatePoundsTimesEther(uint256)", +"c09f32e8": "closeQuestion(uint256)", +"c09fed25": "transferFromBalance(uint256,address)", +"c0a06ecb": "infoWithdraw4()", +"c0a0b5fa": "getKilledArray(uint256)", +"c0a14da4": "isTeamLockInPeriodOverIfTeamAddress(address,address)", +"c0a150b3": "RovaZoneBToken()", +"c0a1a949": "x15()", +"c0a1b72a": "totalSupplyWithOutBonus()", +"c0a1e525": "createDaoPOLSKAtokens(address)", +"c0a2203e": "insert(address,address)", +"c0a239e3": "valuePerShare()", +"c0a28014": "setTreeStructure(address,address)", +"c0a2d9b3": "EssentiaToken()", +"c0a35d62": "burnReturn(address,uint256)", +"c0a35e8b": "getTokensMintedAt(uint256)", +"c0a36345": "getTokenOwnerRewardPercent()", +"c0a39fb0": "blockTransfer(uint256)", +"c0a41466": "etherSender(address,uint256)", +"c0a42d91": "SignatureInvalidity()", +"c0a5bcbd": "DefaultCents()", +"c0a7639e": "checkIfAddressIsWhiteListed(address)", +"c0a7f894": "MAVCash(uint256,string,uint8,string)", +"c0a843a1": "getCurrentUserRefBonus()", +"c0a8694d": "NamableAddressList(string,bool)", +"c0a899f2": "transferAsChild(address,uint256,address,uint256,uint256,bytes)", +"c0a8fb73": "FlightDelayController()", +"c0a9066b": "LogValentineRequestCreated(string,string,string,address,address)", +"c0a9581d": "sendFee(uint256)", +"c0a963c9": "notifyWinner(address,uint256)", +"c0a99a83": "oneTokenInUsdWei()", +"c0aa18e7": "History()", +"c0aa3b21": "ownerTokens()", +"c0aa7e2e": "cancelInvoice(bytes32)", +"c0aace0b": "totalKitties()", +"c0ab5704": "setVesting(address,uint256,uint256,uint256)", +"c0ab86bd": "SBSolutions()", +"c0abf829": "tokenCreationMinMile2()", +"c0ac3d1c": "PRE_ICO_BONUS_RATE()", +"c0ac9983": "tokenURIPrefix()", +"c0ad7427": "saleTokenSupply()", +"c0adb725": "AuthCancel(address,address)", +"c0adc465": "getCurrentBonusRate()", +"c0ae6a3a": "ultimateOutcomes(bytes)", +"c0aee5ba": "THAW_CYCLE_USER()", +"c0b14de7": "setLandLimit()", +"c0b204a6": "TeamWalletAmount()", +"c0b241d7": "icoRate()", +"c0b332c1": "moveCharge()", +"c0b3569d": "setAssetProxy(address)", +"c0b3870a": "withdrawJackpot()", +"c0b39e68": "unfinalize()", +"c0b3aff3": "INCREASE_RATE()", +"c0b3dab3": "Devilsbest()", +"c0b4d404": "setGrowingControlStartAt(uint256)", +"c0b4e657": "HongkongerCoin()", +"c0b4fa6d": "_reward(address[])", +"c0b6762c": "SILVER_AMOUNT_XPER()", +"c0b6f0c2": "NextRoundAndEvents()", +"c0b6f561": "initiateOwnershipTransfer(address)", +"c0b75b7d": "setMinContributionAmount(uint256)", +"c0b7eba4": "game_allocation()", +"c0b82515": "gzeUsd()", +"c0b84bfe": "setFee(uint256,uint8)", +"c0b8a80d": "CVAlejandro()", +"c0b92612": "changePig(address)", +"c0b9b36a": "bountyTokensBatch(address[],uint256[],string)", +"c0b9b8ce": "releaseToAdvisor(address,uint256)", +"c0b9ecc8": "getNames(address,uint256,uint256)", +"c0ba6adf": "gemDefenseConversion()", +"c0bac1a8": "isMigrated(string,string)", +"c0bb20a6": "setBonusSale(uint256,uint256,uint256)", +"c0bb6c27": "setTotalPersistLimit(uint256)", +"c0bb8466": "WithdrawFees()", +"c0bd3f40": "dumpData(uint256,uint256)", +"c0bd8351": "getGameId()", +"c0be3e9a": "removeOffChainAddresses(address[])", +"c0be4b51": "genWeeklySecondPrizeKey(uint8[4])", +"c0be7ad3": "freezeAccountDirect(address,bool)", +"c0c116d5": "getStringValue(uint256)", +"c0c133a8": "DATE_ICO_END()", +"c0c19d29": "mock_length()", +"c0c1b107": "changeOraclizeGasPrice(uint256)", +"c0c1b18e": "getDepositSize(address)", +"c0c1cf55": "executeAction(uint256)", +"c0c1dab1": "setReceiver1()", +"c0c1eebc": "addToken(address,bytes32)", +"c0c2c087": "getOrdersInfo()", +"c0c3da9c": "totalSupplyLocked1Y()", +"c0c4440a": "totalAmountOfCrowdsalePurchases()", +"c0c47e12": "getDeal(bytes16)", +"c0c4d8a8": "Fundraiser(address,address,uint256,uint256,address,uint256,bytes32,uint256,uint256,uint256,uint256,uint256)", +"c0c53b8b": "initialize(address,address,address)", +"c0c5fda5": "getTotalSupply(address,uint256,bytes,uint8,uint256)", +"c0c602d9": "tokenAssigned()", +"c0c620d2": "DroneToken(uint256,string,string)", +"c0c6a430": "BadTronToken(address,address)", +"c0c6a68a": "setMockedBlockNumber(uint256)", +"c0c76940": "StopperCoin()", +"c0c77236": "resetHolder(bool)", +"c0c77b71": "changeRegistrationStatusForGoldWhiteList(address,bool)", +"c0c81969": "tokenSupplies(uint256)", +"c0c83c0d": "getDebtById(uint256)", +"c0c8821a": "icoRuleUpdate(uint256,uint256,uint256,uint256,uint256)", +"c0c8b567": "registerCertificateHash(address,bytes32)", +"c0c8ccb3": "PreHELIX()", +"c0c91e6d": "getMinPriceSale()", +"c0c95917": "BrinkzSupply()", +"c0c98d6f": "setProof(uint256,bytes32)", +"c0cab256": "ZZWHToken()", +"c0cad302": "setNetworkName(string)", +"c0cc365d": "setExpirationTime(uint256)", +"c0cc6eb1": "rejectPayment(bytes8)", +"c0ccc863": "NacContract(uint256,uint256,uint256,address,uint256,uint256)", +"c0cd1ec1": "recordLog(uint256,address,uint256,uint256,uint8,uint8)", +"c0cd2e32": "chargeWeeklyRate(bytes32,address)", +"c0cd54c6": "GetGameType(address)", +"c0cf067b": "deathData_v7()", +"c0cf22e9": "setSendGiftPrice(uint256)", +"c0cfa7e5": "startDispute(uint256)", +"c0d061f4": "execute(address,uint256,bytes32)", +"c0d0aa69": "daoMultisig()", +"c0d129d4": "BallotPreferential()", +"c0d13a6d": "MIN_BUY_ETHER()", +"c0d26946": "randomNumber(address,uint256)", +"c0d2834b": "DataSource()", +"c0d3f378": "specialManagerListMap(uint256)", +"c0d470a6": "setCCH_edit_23(string)", +"c0d4fa0c": "emitFeePeriodDurationUpdated(uint256)", +"c0d6568d": "FEATURE_TRANSFERS()", +"c0d6ce63": "punksRemainingToAssign()", +"c0d75442": "TOKEN_SALE()", +"c0d84ce5": "TransferFrom(address,address,uint256)", +"c0d8b0b8": "setPetAuras(uint64,uint8,uint8,uint8)", +"c0d910cd": "getTankOwner(uint256)", +"c0d9f997": "transperrun()", +"c0dab516": "adminPercent()", +"c0db4dd7": "TRANSACTION_MIN_IN_ETH()", +"c0db8dd8": "allowToLock(address,address)", +"c0dcf63a": "isLastRaceFinsihed()", +"c0de3d71": "TransactionCancelledICAP(bytes32,uint256,string,address)", +"c0df77d0": "getRefName(uint256)", +"c0e06ca3": "whitelistAddressPresale(address,uint256)", +"c0e093f1": "AirdropMultiple(address[],uint256)", +"c0e09852": "isVesting(address)", +"c0e17c61": "TenStepTestCoin()", +"c0e18579": "ONETIMESOLD(uint256)", +"c0e19314": "divideFractional(uint256,uint256,uint256)", +"c0e1e272": "buyToken(uint32,uint32,uint32,address)", +"c0e22f31": "frozenStatusOf(address)", +"c0e31001": "avatar(address,uint256,bytes)", +"c0e3153c": "balanceSub(address,address,uint256)", +"c0e317fb": "addToBalance()", +"c0e33275": "perTokenAmountMax()", +"c0e37b15": "transferData(address,uint256,bytes)", +"c0e59e4d": "lastRateUpdateTimeForCurrency(bytes4)", +"c0e5fbb6": "unlockBalanceOf(address)", +"c0e71f54": "toKeyValue(string,string)", +"c0e738ef": "summAdvisors()", +"c0e789cc": "friendsFingersWallet()", +"c0e793c2": "transferOwnership(string,address)", +"c0e79a11": "setAllowed(address)", +"c0e8ad51": "LydianCoin()", +"c0e9118e": "killAllXAITActivity()", +"c0e91320": "finishPVEBatch(uint256[])", +"c0e91569": "GRCToken()", +"c0ea09d7": "rest()", +"c0ea537b": "amountOfTokensPoolD()", +"c0ea6ff5": "test3_search()", +"c0eaded2": "makeDeal(uint256,uint256,uint256,uint256,uint256,string,address,string,address,uint256,uint256)", +"c0eb2325": "scheduleTransaction(address,bytes,uint256)", +"c0eb2e70": "buy(address,uint256[],uint256[],bool)", +"c0ebc67a": "SimpleStateChannel()", +"c0ebdba1": "InvestedOtherCrypto(address,uint256,uint256)", +"c0ec55a5": "buyPokemon(address,uint256)", +"c0ed969a": "updateBackend(address)", +"c0edec55": "CroatiavsDenmark()", +"c0ee0b8a": "tokenFallback(address,uint256,bytes)", +"c0ee57a5": "giveReserveTo(address,uint256)", +"c0ee6db8": "_lockToken(address,uint256)", +"c0efa161": "getDeveloperReservedBalanceLimit()", +"c0f0c21c": "updateMaxTokenLimit(uint256)", +"c0f0e925": "getPercent3(address)", +"c0f11a1b": "addressArrayContains(address[],address)", +"c0f16fab": "checkAllowedContribution(address,address,uint256,uint8)", +"c0f17d13": "ChessCash()", +"c0f3622c": "updateRates(uint256,uint256,uint256)", +"c0f3ab76": "B2BCoinContract()", +"c0f40163": "issueFTT(address,uint256)", +"c0f496ac": "ecosystemAllocation()", +"c0f4bfa4": "nbSellers()", +"c0f4d29b": "setLocation(uint256,uint256)", +"c0f4f41e": "changeRefresherFee(uint256)", +"c0f57529": "eth_seed_amount()", +"c0f5a9cb": "deleteThing(bytes32[])", +"c0f5b5f7": "setSecondRoundPricing(uint256)", +"c0f5dc97": "totalSupplyUnlocked()", +"c0f64f43": "attachAsset(uint256)", +"c0f65734": "SignedDigitalAsset(string)", +"c0f68859": "getMinimumGracePeriod()", +"c0f6a3f9": "reserveVaultAddr()", +"c0f6c0da": "getTokensFromEth(uint256)", +"c0f6c7b8": "getIdArray(address,uint256,string,string)", +"c0f70d5a": "IOUSupply()", +"c0f7c498": "create_planet()", +"c0f8275e": "detailsOf(uint256)", +"c0f8940c": "decode()", +"c0f8de32": "shouldThrowOnAttemptToTransferToNullAddress()", +"c0f96105": "Enabled()", +"c0fd43b4": "lastNonce(address)", +"c0fdba2d": "YCBIToken()", +"c0fe6c92": "isClientAddedBefore(address,address)", +"c0feb62d": "fundRaisedDuringPublicSale()", +"c0feee42": "Error(bytes32)", +"c0ff3ebc": "ILFManager()", +"c1009f1b": "testInitialLedgerBalance()", +"c1013658": "createAsset(uint256,bytes32,uint256)", +"c1021099": "DBDVToken()", +"c1039215": "PresaleExtended(uint256)", +"c10435cc": "lastEruptionTimestamp()", +"c1061561": "shut_down()", +"c1072279": "unicornBreeding()", +"c1075329": "withdrawFunds(address,uint256)", +"c10796df": "_performTransferToICAPWithReference(bytes32,uint256,string,address)", +"c107aa6f": "addAssociatedAddress(address,address,address,uint8,bytes32,bytes32,uint256)", +"c107b9b8": "CTCB()", +"c107e109": "addFactory(string,address)", +"c1082c00": "YBananaCoin()", +"c108adab": "setChangeFee(uint256)", +"c108d542": "distributionFinished()", +"c108f3b4": "nextDelayedSetStake()", +"c1098e2e": "preSaleFirstCap()", +"c109e024": "blockdif()", +"c10a0840": "CryptoChallenge()", +"c10b30c0": "unlockPurchasedTokensClaim()", +"c10b9358": "saleEnd()", +"c10be521": "gapFactor()", +"c10bef22": "ConditionsAdded(address,uint256)", +"c10c0bd3": "logMatchdayResults(int16,string)", +"c10c3463": "addProduct(string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c10c3546": "setEscrow(address)", +"c10ce2b0": "calculateDiffPercent(uint256,uint256)", +"c10d0f11": "didChangeCollateral(bytes32,address,uint256)", +"c10dd4c6": "getEvents(bytes32[],address)", +"c10e5fe7": "GemCoin()", +"c10e7dfe": "bonusInited()", +"c10e9ba0": "isClientIdentRejectedOf(address)", +"c10eb14d": "_withdraw()", +"c10efd2f": "compareResults()", +"c10f1a75": "proxyFactory()", +"c10f5075": "KudosPoll(string,string,uint8,uint256,uint256,uint256)", +"c10fa635": "channelParticipantCount(uint64)", +"c10fa789": "withdrawalsVotes(address,uint256)", +"c10fbf0e": "reDraw()", +"c110afe2": "Percent(uint256,uint256)", +"c110e6a0": "HealthCoin()", +"c111368b": "vestingsRemainBalance(address)", +"c112411e": "_clarifyPVPSchedule()", +"c112601c": "transferLibOwnership(bytes32,address)", +"c1127f90": "PresalePool(address,uint256,uint256)", +"c112a083": "finalizeChangeName()", +"c112dfa3": "changeDecimals(uint8)", +"c11301d4": "getSaleContractTargetEtherMax(address)", +"c1139ba0": "transferAuthorship(address,bytes32,bytes32)", +"c113d195": "XECToken(string,string,uint8,uint256)", +"c11403fc": "maxListingSeconds()", +"c114301c": "icoPlatformWithdraw(uint256)", +"c115b06c": "CYFToken()", +"c11645af": "test_threeInvalidAssertFalse()", +"c116574c": "__update_oraclize(address)", +"c1165781": "totalSupplyOnIco()", +"c11737c7": "getFirstBuyer(address)", +"c11741a9": "submitReview(uint256,bool)", +"c117c9eb": "isUserInAllowedList()", +"c117cfe2": "TwoDimensions()", +"c11808da": "getFloor()", +"c1184537": "changeContracts(address,address,address,address)", +"c118a9de": "getDiscountOf(uint256)", +"c119167b": "numberOfExchInEstateNasBob(address,uint256)", +"c119d019": "collectPayment(address,uint256)", +"c11a4b47": "Origin()", +"c11b2252": "equipContract()", +"c11bd455": "timeOfLastHalving()", +"c11bf4e3": "execute(uint256,address[],uint256[],uint8[],bytes32[],bytes32[])", +"c11bf8d6": "CLXToken(uint256,string,string)", +"c11c0cc1": "getSecondPoints()", +"c11d9d9f": "minEtherContrib()", +"c11dde0d": "setManufacturer(address)", +"c11e1ff3": "getMe()", +"c11efcdc": "getRaisedForCurrentStage()", +"c11f49e3": "ETHERNETSUPPLY()", +"c11f5284": "setReceivers()", +"c11fb13e": "trustedProposals(uint256)", +"c1204caa": "trade(uint256[11],address[4],uint8[2],bytes32[4])", +"c12076f1": "holderGroupNumber()", +"c120d1a4": "outingreserveBalance()", +"c121be4d": "removeAddressManual(address)", +"c122759f": "issuerDistributedUnits()", +"c1232366": "gameCloneFee()", +"c1238940": "bmy(uint256,string,uint8,string)", +"c123a658": "boostCloneMarket(uint256)", +"c1243528": "airdropRecord(address)", +"c1246d39": "simulatePathwayFromBeneficiary()", +"c124e2ea": "checkBetDozen(uint8)", +"c1257bad": "testPassingAProposal()", +"c1258f69": "txCount(address)", +"c1263215": "calculateObtainedJOY(uint256)", +"c1266227": "pow2Bounds(int256)", +"c12692dc": "tokenRaise(address,uint256)", +"c12719a7": "EthPriceDependent(address[],uint256,bool)", +"c1273676": "fundingUnlockTime()", +"c1273ba0": "likeCelebrity(uint256,uint256)", +"c127ae41": "getSignatureHash()", +"c127c247": "addMember(address,string)", +"c127ee20": "SearchUserPurchase(string,string)", +"c128c9e7": "GetBuildingData(address,uint256)", +"c1292cc3": "lastId()", +"c1294224": "payoff(address)", +"c12954fa": "restartMinting()", +"c129827b": "_setSpecialityValue21(uint256)", +"c12a0fd7": "removeReverseRate(address[])", +"c12ae5e9": "blocksInFirstCapPeriod()", +"c12af1ce": "fipsRegister(uint256,bytes)", +"c12b2513": "assignSubBroker(uint256,address)", +"c12c202c": "getGrapesSinceLastHarvest(address)", +"c12c2eb3": "abstractENS()", +"c12c31d6": "listAllAdmins()", +"c12d1d82": "updateToken(uint256,uint256)", +"c12d7b01": "Error(uint16)", +"c12d97de": "DevGiveBlockReward()", +"c12dec39": "_fetchOrdersForMerchant(address)", +"c12e760e": "agreeFromDrone()", +"c12eb191": "updateEarlyParticipantWhitelist(address,uint256)", +"c12edde6": "EURValue()", +"c12f48e3": "AssetRegistered(address,string,string,string,uint256)", +"c12fac40": "oneHundredThousand()", +"c13026b0": "changePresaleCap(uint256)", +"c13051d7": "getCellsInfo()", +"c1309aea": "getOfferor(uint256)", +"c1310951": "createNewDepositContract(uint256)", +"c131acdf": "GetBestTokenCount(uint8)", +"c1321111": "setSaleLength(uint256,uint256,uint256,uint256)", +"c132bc18": "balanceWosPoolForThirdStage()", +"c132dd4f": "authorizedCreateTokensToPrivate(address,uint256)", +"c1331bc3": "setBlacklistSpender(address)", +"c1333a9c": "setPurchaseRequirements(uint8,address[],uint256[])", +"c134bc92": "hell()", +"c13517e1": "createDispute(uint256,bytes)", +"c135a2d8": "getBackgroundValue(uint256)", +"c135c040": "gzePerEth()", +"c1374d5a": "EtherUSDPriceFactor()", +"c138195c": "icoEtherMinCap()", +"c1381ea3": "DutchExchangeProxy(address)", +"c13862ea": "setBoardRating(uint256,uint8)", +"c13982ee": "checkCap()", +"c13992b4": "Metadium()", +"c13a135a": "getWinnerOfEvent(bytes32)", +"c13ab0fe": "WOLF4()", +"c13afa91": "object_locations(uint256)", +"c13b22ef": "setTokenTransferFeeAbs(address,address,uint256)", +"c13b37c7": "updateIsRevertedEndTimeReached()", +"c13b3895": "getHype(uint256)", +"c13b72a8": "registerCDP(uint256)", +"c13c6813": "_addTimelock(address,uint256)", +"c13ca374": "SimpleSale()", +"c13e24d2": "Reinvest(uint256)", +"c13e285d": "maxTrialDrops()", +"c13f4af7": "claim(address,uint128)", +"c13fb08b": "breedOnAuction(uint256,bool,uint256,bool,string,string)", +"c140635b": "audit(bytes32)", +"c1408cda": "getDataFromAddress(address)", +"c141e6da": "ERC721ReceiverMock(bytes4,bool)", +"c141ed74": "calculateCrowdAmount(uint256)", +"c14248a2": "lrcSent()", +"c1429c11": "ChainStarToken()", +"c143a372": "TokenTransferFrom(address,address,uint256)", +"c143ab2c": "crowdSaleStop()", +"c143f701": "getRequestFundInfo(uint256)", +"c1440167": "Voterplayer()", +"c1441172": "setBlackFlagRequest(uint256,uint256)", +"c144734c": "getUploadTypes(uint256)", +"c1448284": "approved(address,uint256)", +"c144a510": "ADDR_WITHDRAWAL2()", +"c144a5db": "Bytelending(uint256,string,string)", +"c144d7dc": "buyMine(uint8)", +"c145d105": "withdrawSettle(bytes32,address,uint256,uint256,bytes32)", +"c1460942": "getLiquidationSpread()", +"c14634cf": "KudosTokenSale(address,uint256,address)", +"c1468587": "mainwallet()", +"c146eb02": "UNOPEN(string,string,uint256,uint256,bool)", +"c148002c": "latestUnlockStage()", +"c148e20e": "FCCToken(string,string,uint256,uint256,bool)", +"c14958cb": "giveUp(address,address)", +"c1499199": "_uncreditUser(address,uint256)", +"c14a2455": "balDailyLotto()", +"c14a3b8c": "mintTimelocked(address,uint256,uint256)", +"c14a6046": "payerContract()", +"c14a932f": "signedTransferFromSig()", +"c14a9f05": "challenge(address,uint256,uint256)", +"c14ab7a1": "PredictTheFutureCaller(address,uint8)", +"c14bafb1": "lastPurchaseTime()", +"c14bfd29": "hasAlreadyVoted(uint256,address)", +"c14c1ce3": "requestUpdate(uint256)", +"c14c5574": "Gold(address,address,int256,address)", +"c14c7bd7": "performRead1()", +"c14d2358": "init(address,uint256[],uint256,uint8,uint256,bool)", +"c14d3abe": "enableSuperUser(address,bool)", +"c14e50ce": "setValidater(address)", +"c14e61ba": "overdraftTotal()", +"c14e6cd0": "changeTransferLock(bool)", +"c14e7a3f": "setCooldown(uint16,uint32)", +"c14e9f58": "submitBlockHeader(bytes)", +"c14edad2": "teamDistribute()", +"c14f42fd": "mLoadAndReturn(bytes32)", +"c14f7ea8": "rejectSubmission(uint256)", +"c14fbd64": "satoshiMood()", +"c15185f5": "getAuditPrice(uint256)", +"c151ac55": "_createMovie(string,address,uint256)", +"c151c5ad": "getSignerTable()", +"c15294a1": "creatGameBet(uint256,bytes32)", +"c152d3eb": "setKYCTeam(address)", +"c1531ecc": "changeIssuer(address,bool)", +"c1551fc8": "QuadCoreChain()", +"c1554658": "changeDepositorLimit(uint256)", +"c155836d": "LuCyToken(address,string,uint8,string,string)", +"c155cfde": "_preAllocateTokens(address,uint256)", +"c1560a14": "hardCapInUSD()", +"c1562547": "checkUser()", +"c156ef6b": "_createPainting(address,uint256,uint256,uint8,uint8,uint256,uint256)", +"c157b869": "totalUsdValueOfAllTokens()", +"c157d72c": "itemInfo(address,uint256,bytes)", +"c1596534": "addReserve(address,uint8,bool)", +"c1598f6a": "newWage(uint16)", +"c1599011": "conversionRateOfState(uint256)", +"c1599bd9": "X()", +"c15a6791": "oneShotTokenRepartition(uint256)", +"c15ae376": "_shareToDistribution(uint256,address,uint256,uint256)", +"c15aec44": "totalGasUtilizing()", +"c15b42bf": "AsignarPasesLibres(uint16,uint32)", +"c15c09b5": "admin_set_exchange_rate(uint256)", +"c15d0b10": "getLoanValue(bool)", +"c15d15da": "_isValidSignatureAndData(address,address,bytes)", +"c15d7bca": "setEthToTokenConversion(uint256)", +"c15e47c4": "getFirstBatch(address,address)", +"c15e61c0": "Authorization()", +"c15f05fb": "changePrimaryArbitrator(address)", +"c15f618a": "purchasePokemon(uint256)", +"c15f68f0": "Retired()", +"c15f817d": "_import_island(bytes32,address[3],uint256[7],uint256[8])", +"c15f8779": "get_previous_item_in_state_from_item(bytes32,bytes32)", +"c1614981": "allocateLocked(address,uint256)", +"c1615945": "setAffiliateContract(address)", +"c1615c87": "DEFROST_PERIOD()", +"c161d506": "CollabCoinToken()", +"c162ba2f": "walletId()", +"c162bc03": "clearProposal(address)", +"c163bba7": "publish(string,string)", +"c163edf7": "OutcomeEvent(string,uint256)", +"c163fb0e": "ownedHouses(address)", +"c1640913": "RETAINED_TOKENS()", +"c166311f": "freeLotterySeconds()", +"c166c458": "getUserRequestCount(address)", +"c166ee38": "sweepAccount()", +"c1670257": "redeemContractSentTokens(address,uint256)", +"c1674b74": "assertReadyToClose(uint256)", +"c167d1cd": "getAvailableSupply()", +"c1684711": "migrateTokens(address)", +"c16849c0": "tokenSC()", +"c1687877": "buyTokens(uint256,uint256,address)", +"c168e037": "getCustomerPremium(uint256)", +"c1691fc3": "add_bonus(uint256)", +"c1694bd4": "TransferDetails(string,uint256,string,uint256,uint256,address[])", +"c16959b2": "_unpackRaceFinishData(uint256)", +"c1699a99": "stakePeriod()", +"c1699bf6": "setPrimaryAccount(address)", +"c169ec0d": "setBuzzCafe(address)", +"c16ac06f": "CM()", +"c16ae3ce": "_receiveFrom(address,uint256)", +"c16b451f": "_checkedTransfer(address,address,uint256)", +"c16b9374": "regularEndGame(address,uint32,uint8,uint16,uint256,int256,uint256,address)", +"c16bca13": "MIN_AUDIT_TIME()", +"c16bea20": "addControllerByPartition(bytes32,address)", +"c16c0851": "miningOneSelf()", +"c16d1377": "IS_CND_CONTRACT_MAGIC_NUMBER()", +"c16d3344": "setMinimumOfferPrice(uint256)", +"c16d515a": "_createCenturion(address)", +"c16e50ef": "validate(bytes)", +"c16f402c": "getEpisodes()", +"c16fe907": "getTransfer(uint256)", +"c1707f66": "stateSetOpen(uint32)", +"c170fd54": "bid(uint40)", +"c171747b": "convertEthToMet(uint256)", +"c1717f80": "BC2Token()", +"c171cfa6": "getBetValueByGamble(uint8,uint8)", +"c171fb91": "referrerLevel1Percent()", +"c172085e": "initialization()", +"c17281d0": "refundPartial(address,uint256,uint256,uint256)", +"c172aae5": "getIdentifier(uint256)", +"c172f9c9": "receiveApproval(address,uint256,address,bytes32)", +"c1733712": "authorizePayment(address,uint256,uint256)", +"c1733f68": "getToken(string)", +"c173508b": "removeConnection(address,address,bytes32)", +"c1736222": "tokenForSPSold()", +"c1739b69": "InfraOfOwner(address)", +"c1747585": "testEvent2()", +"c174cc59": "getrunused(address)", +"c1751903": "lockBreak()", +"c1756a2c": "sendEther(address,uint256)", +"c1758fee": "vest2mlDevelopers(address,address)", +"c1766657": "addBonusForMultipleHolders(address[],uint256[])", +"c176b1d8": "deletePriceIdv(bytes32)", +"c176d42a": "NavGlobalTourCoin()", +"c176e639": "payout(address[],uint256[])", +"c176e73b": "pkt()", +"c177c20f": "CliToken()", +"c177e804": "WEETtoken()", +"c177f22e": "findKingdomCalled(string)", +"c1784a4e": "safekey(uint256)", +"c1786ab2": "pre(address,bytes32,bytes32)", +"c178a2d4": "CreationContract()", +"c178fc87": "setTokenRate(uint256,string)", +"c1790561": "_getPetBonus2(uint256)", +"c179186e": "collectWinnings(uint256,uint256,uint256)", +"c179520c": "ManageAccount()", +"c17a099b": "presaleBonusTokensDistributed()", +"c17a893e": "transferAUTOtoken1(address[])", +"c17b5a93": "ProfitExchange()", +"c17b9770": "log2Floor(int256)", +"c17c0456": "ownerCEO()", +"c17c3521": "setHourlyRate(uint256)", +"c17ccc6c": "withdrawUnlockedTokens()", +"c17d8720": "checkBank(string,address)", +"c17de343": "isStarOwner(uint256,address)", +"c17e2aa1": "burnAllTokens()", +"c17e6817": "sendSafe(address,uint256)", +"c17e92b6": "unregisterFromBlacklist(address)", +"c17ed7bd": "purchaseSilver()", +"c17f23e8": "getRoundID()", +"c17f8891": "setEtherFeeMin(uint256)", +"c17ffac6": "unsetRegionForSale(uint256,uint256)", +"c180e1d0": "GCPToken()", +"c1811783": "FreezableToken()", +"c1812b15": "reorganizeOwners()", +"c1826d78": "Collect()", +"c1829a14": "testFailTooFewConfirms()", +"c182f531": "GetFreeEther()", +"c183660c": "cancelJobContract(uint256,string)", +"c18378a0": "sellTokensFrom(address,uint256)", +"c18384ec": "setRestricted(address)", +"c1838e92": "proposeTokenOwner(address)", +"c1839258": "LogTokenPurchase(uint256,uint256)", +"c1840b39": "_generateRandom(bytes32)", +"c1857bf7": "withdrawFoundation(address,uint256)", +"c185d772": "emissionStages(uint256)", +"c185e492": "preSaleThirdPrice()", +"c186dcbf": "getStaticArraySum()", +"c18715f8": "prolongationPermitted()", +"c1873e26": "releaseCoreTeamAccount()", +"c1889ff2": "payAccTax(uint256)", +"c188f44b": "addproduct(string,string,uint256,string)", +"c1891ac6": "multiplePing(address[])", +"c1899ca7": "request_dividend(address)", +"c18a40c7": "multiowned(uint256,address[])", +"c18b4136": "AAC()", +"c18b5279": "KFHToken()", +"c18b8db4": "listings(bytes32)", +"c18b9760": "test_insert_findWithHintPrevDecreased(int256)", +"c18bca5f": "setCollectionAddress(address,address)", +"c18ca54c": "testEvent(int256,int256,uint256,uint256,string,string)", +"c18d767a": "weiMinSalePreIco()", +"c18e8903": "totalWeiRaisedDuringICO4()", +"c18e94b4": "Keizer()", +"c18edde1": "saleopeningTime()", +"c18f4831": "burnFeeDenominator()", +"c1908360": "createEntry(string,string)", +"c190b129": "holderState()", +"c1912433": "acceptAndPay(bytes32,uint256[],uint256[],int256)", +"c1918e90": "accountAddressForSponsee()", +"c191cbd7": "TeamTokensAllocated(uint256)", +"c191d37d": "Escapable(address,address,address)", +"c1927292": "TIER1_BONUS()", +"c1929d8c": "ADVISOR_THREE()", +"c192ca98": "isCS(address)", +"c1932833": "maxAirdropParticipants()", +"c19358bb": "setPropertyLastUpdater(uint16,address)", +"c193fbf8": "pushArray(bytes32,address)", +"c19455c8": "signedTransferCheck(address,address,uint256,uint256,uint256,bytes32,address)", +"c1955e62": "spend(uint256,bytes32)", +"c195dc41": "getStageEndDate()", +"c19678d5": "canLotteryBeExecuted()", +"c196b54f": "bound(uint256,uint256)", +"c1971240": "dailyGrowthUpdated_date()", +"c197a7b1": "getLastStoragePayDate()", +"c197cdee": "preSaleTokenLeft()", +"c1989276": "MaxItems()", +"c1991040": "getCurrentVotingDescription()", +"c19a8095": "deleteUser(address,address)", +"c19bbf50": "getLockStatus(address,address)", +"c19c9a21": "CCTHCoin()", +"c19d7808": "MamaBearToken()", +"c19d93fb": "state()", +"c19da6b2": "canBuy(address,address)", +"c19dccd8": "KantrotechCoin1(string,string,uint256,uint256)", +"c19dd320": "cancel2(uint256)", +"c19e33ce": "COIN_SUPPLY_ICO_PHASE_0()", +"c19e7b00": "WeiCapChanged(uint256)", +"c1a06de3": "Valens()", +"c1a12d66": "crowdsaleOpen(bool)", +"c1a21bf3": "sellerBalances(address,address,uint256,address)", +"c1a2a8f4": "boards()", +"c1a2babc": "getMemberSince(address)", +"c1a38768": "STARTUP()", +"c1a3bb06": "total_bet_withdrawn()", +"c1a3bda5": "randomQueryID()", +"c1a6ec6a": "ADVISORY_TEAM_PORTION()", +"c1a7db7b": "MtcDailyLimitChange(uint256)", +"c1a82cdb": "reissueCertWithID(bytes32,bytes,bytes32,uint256,bytes32,bytes,bytes32,uint256,bytes32)", +"c1a85e16": "test_insert_findWithHintNextUpdateTail()", +"c1a9953f": "checkRokTeam()", +"c1aa049d": "getIsPurchased(address)", +"c1aa104e": "OpenRetailContract(uint16,bytes32,string,string)", +"c1aa5d98": "getGameIdByAddress(address)", +"c1aa721d": "lockAfterManuallyMint()", +"c1aaa717": "_bountySupply()", +"c1ab1b54": "RebateCoin()", +"c1abbf6a": "addjoinlist_even(address,uint256)", +"c1ac7902": "playJackpot()", +"c1ad5bea": "isdeposit()", +"c1ad7925": "finalizeFunding(address)", +"c1adb83e": "NecashTokenBase()", +"c1ae36d0": "carsOf(address)", +"c1ae4044": "checkBetColor(uint8)", +"c1af5785": "enterLottery()", +"c1afdd48": "belowSevenBets()", +"c1b0510a": "GlobalBusinessSystem()", +"c1b0561d": "PDTToken()", +"c1b056b0": "getNodeLeftChild(bytes)", +"c1b06513": "registerEvent(bytes32[])", +"c1b07b1a": "receiverOne()", +"c1b082b6": "issueOfTokens()", +"c1b0dc2f": "LogPolyClaimed(address,uint8,uint256,uint256,uint256)", +"c1b15e44": "_setAllowance(uint256)", +"c1b16cb0": "ownerAddAsset(string)", +"c1b2dfc1": "gameGiftMaxAmount()", +"c1b36489": "QuickUnionPayChain()", +"c1b3e6ab": "blockedSum()", +"c1b43a17": "secondHighestBidder()", +"c1b43af8": "IPchainStandardToken(uint256,string,uint8,string)", +"c1b466d6": "calculate0xbtcReceived(uint256)", +"c1b4aa51": "burnContractCoins(uint256)", +"c1b533b0": "getExchangeRateInUSD()", +"c1b58f6c": "unlockAllAllocationAddresses()", +"c1b664de": "setStageCount(uint256)", +"c1b668a9": "getBoardInfo(address,address)", +"c1b68a7c": "DebitClientOnce(address)", +"c1b73010": "removePauser_(address)", +"c1b74ad8": "propose(uint256,bytes32,address)", +"c1b7a892": "AsiaCoin()", +"c1b8847b": "setMaxFeeWithdrawal(uint256)", +"c1b8b704": "updateGlobalMax(uint256)", +"c1b90c7b": "_sendTokens(uint256,address)", +"c1b99811": "transferPrimordialToken(address,uint256)", +"c1b9f177": "bountyReserve()", +"c1ba93e1": "dbkDeposit()", +"c1bb95d0": "TransferConfirmed(address,uint256,uint256)", +"c1bbcbef": "MICKTOKEN(uint256,string,string)", +"c1bc2664": "ClearView()", +"c1bd1e85": "killFeed()", +"c1bd3685": "proposeSolve(uint256,uint256)", +"c1bd762b": "wantMyEther()", +"c1bd8186": "crowdsalepricing(address,uint256)", +"c1bd8ecb": "initializeCrowdsale(address,uint256)", +"c1bd9b12": "getShareAddressFromId(uint256)", +"c1bdff26": "onNewLoan(uint256,address)", +"c1be4031": "XaurumProxyERC20()", +"c1beb1e1": "MusereumToken()", +"c1bf1dcf": "setRegistrar(address,bool)", +"c1bf22a9": "XAUToken()", +"c1c02a46": "Atlas()", +"c1c03094": "EventBattleOver()", +"c1c0e046": "rescueAccount()", +"c1c0e9c4": "exec()", +"c1c1066b": "getCommentsCount()", +"c1c11aca": "GitToken(uint256,string,uint8,string)", +"c1c11c96": "getSender(address,uint256,address,uint256,uint256,uint256)", +"c1c1d218": "BOND()", +"c1c28d7d": "calNewTokens(uint256)", +"c1c379ac": "tokenTwitter()", +"c1c3eccf": "vestingPeriodInMonths()", +"c1c43648": "addAction(uint256,uint256,uint8[6],uint8[6],uint16[6],uint8[6],uint256,uint256)", +"c1c4676e": "updateGameCost(uint256)", +"c1c5897e": "AOMcoinERC20()", +"c1c5a3b6": "CaptainSell()", +"c1c5de4a": "tryDeposit()", +"c1c64ecf": "mintPriceBuffer()", +"c1c6c749": "changeWhitelistPrivateStatus(address,bool)", +"c1c6d4e8": "addLoanProduct(uint32,uint32,uint32,uint256,uint32,bool)", +"c1c723f4": "validateProposedMonarchName(bytes)", +"c1c74dde": "_setFunds(address,uint256)", +"c1c7bc68": "addFreeMineralMulti(address[],uint32[])", +"c1c8277f": "reclaimOwnership()", +"c1c8b89d": "Recash(uint256,string,string)", +"c1cbbca7": "contribute(uint256)", +"c1cbbe6c": "getRoundAvailableToken(uint256)", +"c1cbdff3": "moreThanSoftLimit()", +"c1cc0046": "returnOffer(uint64)", +"c1cc0775": "calculateFeeDynamic(uint256,uint256)", +"c1cc6958": "leekStealGo()", +"c1ccaed3": "pageBuyRecordByAccount(address,uint256,uint256)", +"c1cd1759": "SpicePayroll(address)", +"c1cda902": "setTradeable()", +"c1cdaae8": "generate(address,address,address,uint256,uint256)", +"c1ce53fc": "reflect(string)", +"c1ce56eb": "addAccount(address,uint256)", +"c1ce6647": "minAmountToGetBonus()", +"c1cfb99a": "get_balance()", +"c1d038b2": "getSkillIdByIndexAndLevel(uint8,uint8)", +"c1d11037": "updateAddresses(address,address)", +"c1d1f5c0": "BirdToken()", +"c1d1faf3": "createAuction(uint40,uint128,uint128,uint40,address)", +"c1d22403": "_subFromValueHeld(address,uint256,bool)", +"c1d25c3d": "insert(int256,int256)", +"c1d298ab": "emitFeesDonated(address,uint256)", +"c1d32ad5": "Distribute(address,uint256)", +"c1d34b89": "transferFromAndCall(address,address,uint256,bytes)", +"c1d357bc": "getMinAllowedBid(uint256)", +"c1d4691a": "withdrawalTo()", +"c1d47a21": "submitPayment(bytes8,uint32)", +"c1d4bc64": "originalsCount()", +"c1d4f708": "getMwLength()", +"c1d55af8": "buy(uint256,address,uint256,bool)", +"c1d5725f": "buyToken(address,address,uint256)", +"c1d5e84f": "addNewUser(address)", +"c1d6036b": "contractExchangeRate(address)", +"c1d63ce6": "deleteArrayBytes32(bytes32,uint256)", +"c1d66482": "Postman()", +"c1d6ab37": "setIsContainerForShareToken(bool)", +"c1d6cbd8": "getPlayerPoint(uint32)", +"c1d75bea": "IBM()", +"c1d9e273": "nextFreeCount()", +"c1da1881": "getPollType(uint256)", +"c1da3923": "ICOstartTime()", +"c1dbbfb3": "withdrawAllFromRoot()", +"c1dbd9b2": "authorize(address,uint256)", +"c1dbf5ef": "changePTSBAddress(address)", +"c1de0842": "quarterThird()", +"c1de93df": "Forwarded(address,uint256,bytes)", +"c1de9ef8": "getPositionHeldToken(bytes32)", +"c1dfacb2": "getQualifiersPoints(uint160)", +"c1e0e604": "updateUsdPerMEth(uint256)", +"c1e10f65": "distributeeBitcoinCashMedium(address[])", +"c1e1955e": "getaddressfocuscardid2(address,address)", +"c1e1b327": "adminCollectPastShopFund()", +"c1e31eab": "SERVER_TIMEOUT()", +"c1e3bd3e": "getParticipants(uint256)", +"c1e41f38": "COMPANY_TOKENS()", +"c1e457c8": "experienceDelay()", +"c1e472be": "returnNotes(uint256)", +"c1e4884d": "setSecondStageStartsAt(uint256)", +"c1e4dfda": "setPriceWei(uint256)", +"c1e50f3c": "internalAddManager(address)", +"c1e5202a": "isUserMakerFeeEnabled(address,uint256)", +"c1e52775": "addDenomination(bytes8,address)", +"c1e5304a": "CreateNewDraw(uint256,bytes)", +"c1e5976e": "getStarkKey(address)", +"c1e59a50": "Example4(string)", +"c1e6102b": "LunyrToken(address,address,uint256,uint256)", +"c1e65cb9": "BTRS()", +"c1e68672": "totalWhitelistedFunding()", +"c1e68e4b": "developer_string_D(string)", +"c1e6c506": "TokenPriceInWei(uint256,uint256)", +"c1e70e63": "startManualPeriod(uint256)", +"c1e71903": "getResults(uint256,string)", +"c1e7310a": "signEA(uint32)", +"c1e74d71": "minPresaleContributionEther()", +"c1e80334": "_acceptImplementation()", +"c1e99a0e": "isInitialInvestor(address)", +"c1e9c53e": "Lottery(uint8,uint256)", +"c1ea8b93": "preCrowdsaleTokens()", +"c1eac693": "ArisaCoin()", +"c1eb1840": "canBurn()", +"c1eb3534": "batchMintToPool(uint128[],uint256[],uint128[])", +"c1eb354a": "setlockall(uint256)", +"c1eb50a7": "LinaAllocation(address,uint256)", +"c1eb5ddd": "DEV()", +"c1eb8c89": "wihtdraw()", +"c1ec10f4": "RigoBlock()", +"c1ec4a2a": "RegisterContract()", +"c1eca4b0": "checkCanAddStockProfit()", +"c1ed41fa": "appliedPresale()", +"c1ed54a1": "isBetValid(uint256,uint256,bytes)", +"c1ee22dd": "EMISSION_FOR_SALESTAGE5()", +"c1ee3375": "autoTransferApproved(uint256,uint256)", +"c1ef098b": "storeHarvestOperationByRegulator(string,string,string,uint32,uint16,uint16,string)", +"c1f04f3c": "allWeights()", +"c1f06e89": "changeYUMOAddress(address)", +"c1f0dac1": "test_largeDeviationNotPermitted()", +"c1f0e2c3": "createGameRound(uint256)", +"c1f10663": "withdrawAccumulatedFees(address)", +"c1f16bdc": "getWeiBalance(address)", +"c1f18e38": "isExpired(bytes)", +"c1f19220": "summFounders1()", +"c1f1d116": "internalVote(bytes32,address,uint256,uint256)", +"c1f307c9": "_isTime()", +"c1f45e80": "sendForPreICO(address,uint256)", +"c1f52604": "winningPrice()", +"c1f573ca": "bidInAuction(uint256,uint256,uint256)", +"c1f602e0": "intoRoom(uint256)", +"c1f62946": "getSecretRevealBlockHeight(bytes32)", +"c1f64cb0": "supportedRoleList(uint256)", +"c1f77309": "assignedPayoutAddress()", +"c1f7c539": "initPricer()", +"c1f8056b": "createAvatar(address,string,uint256)", +"c1f979ab": "add_recent(uint256)", +"c1fa1ed0": "assertEq(bytes32,bytes32,string)", +"c1fae25b": "receiveAirDrop()", +"c1fb7c34": "hmin(uint128,uint128)", +"c1fb9b9e": "developer_How_To(string)", +"c1fcf863": "getSoftwareExecRecord(uint32)", +"c1fd2580": "spendable_supply()", +"c1fd4339": "createMarket(bytes32,uint256,uint256,address)", +"c1fe5281": "minPurchaseNum()", +"c1ff808d": "changeBonus(uint256)", +"c1ffc0a5": "MinimumEthereumInvestmentUpdated(uint256,uint256)", +"c2006a18": "set_fixedFeeInCWC(uint256)", +"c201293b": "setCollateralPoolContractAddress(address)", +"c20155df": "ethRate2()", +"c201df97": "UnLockAddress(address)", +"c2021d1b": "maxTeamBonusBps()", +"c203367a": "EnddatePresale()", +"c2038560": "setOutcome(bytes,bytes)", +"c203d77f": "setSaleFinishTime(uint256)", +"c204505a": "testFailRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"c204642c": "airdrop(address[],uint256)", +"c204b288": "InvestorChanged(address,address)", +"c204f9f1": "_transferFromToICAP(address,bytes32,uint256)", +"c2052403": "payOut()", +"c20547b3": "getGameAmount(uint256)", +"c205afd4": "deferredTotalTokens()", +"c205e64c": "revokeInsertAgentAuthorization(address)", +"c20615ed": "ownerWithdrawn()", +"c20652fe": "setApiAddress(address)", +"c2083f55": "lacksFunds()", +"c2091d0e": "getPatron(uint256)", +"c209fbe9": "change_notice(string)", +"c20a20d6": "setBlipTokenAddress(address)", +"c20a6ae9": "EDMToken(address,uint256)", +"c20c0f3a": "betsForLevel(uint256)", +"c20c1d9b": "newWithdrawCommission(uint256)", +"c20dcbf7": "createPool(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,string)", +"c20e346f": "unFrozenToken(address,uint256)", +"c20ec5dc": "numberOfFriends()", +"c20f966b": "Utcoin()", +"c2108a92": "calculateBalance(uint256,uint256)", +"c210c623": "getKeys(uint32)", +"c21191ae": "GechainCoin()", +"c2127e03": "getMyShrimp()", +"c212bad5": "dropModule(string,bool)", +"c212cffa": "NUGOLD()", +"c2134b23": "addRecoverer(address)", +"c215290a": "frozenUntil(address)", +"c215e800": "currentSubRound()", +"c2161c31": "getStringHash(string)", +"c2168ecd": "removeMintContract(address)", +"c216c0d3": "addCredits(address)", +"c217a724": "spendWithGasAndData(address,uint256,uint256,bytes)", +"c217c0e1": "ClickGemTokenERC20()", +"c2190c94": "registerSettlement(uint64,address,address)", +"c219c28c": "votingTokenAddress()", +"c219d326": "getData_14()", +"c21aa2e4": "PoHarj()", +"c21ab7f9": "createToken(address)", +"c21abf05": "tatalEthFromBuyer()", +"c21afa55": "MintingManagerRevoked(address)", +"c21afe12": "schedulePriceUpdatesRolling(uint256,uint256,uint256)", +"c21bbe56": "SetupDone()", +"c21c45e3": "iconRate()", +"c21c5ee1": "fixSpecications(bool)", +"c21c9c21": "validEvent()", +"c21d0204": "SetEvaluate(bytes32[],uint8,uint64[])", +"c21d5ab7": "setNode(address)", +"c21db033": "removeSupplier(address,address)", +"c21de274": "transferReverseProxyThirdParty(address[],uint256[],uint8[],bytes32[],bytes32[])", +"c21e5712": "makeLiquidCor()", +"c21ea693": "retraitStandard_3()", +"c21ec92c": "getAssetIpfs(uint256)", +"c21ed112": "genesisVirus()", +"c21fb125": "SpecificApproval(address,address,uint256)", +"c21fcffb": "DIYTubeCoin()", +"c2205ee1": "_authority()", +"c22082ab": "EveryCoin(address,uint256)", +"c2222b80": "claimSubscriptionDeposit(uint256)", +"c222ef6d": "periods(bytes32)", +"c2234f67": "CONVERSION_DENOMINATOR()", +"c2235e74": "getTotalAmountOfChatMessages()", +"c2236b26": "setICO3Phase()", +"c2239daa": "setselfdropamount(uint256)", +"c223f557": "stopRedeeming()", +"c2248877": "getBarCodeDataCount(bytes32)", +"c2248c22": "changeOldTokenReward(address)", +"c2250a99": "transferStoreOwnership(address)", +"c225752c": "OneChanceCoin(string,string,uint8,address,address)", +"c22598d2": "BitClemm()", +"c225bf03": "resetContractDeploymentDate()", +"c226d279": "setMiniPoolEdit_7(string)", +"c226d9ee": "doTest()", +"c2276090": "settleBet(bool)", +"c227cee0": "shutThatShitDown()", +"c2289576": "AddTitle(uint256,string,string,string,uint256)", +"c228bcc6": "getFillVolumes(bool,bytes,uint256,uint256)", +"c2299e33": "shutdownMarket(bytes32)", +"c22a146c": "Unlock(address,string,bytes32)", +"c22a933c": "setBaseDeposit(uint256)", +"c22ab4e0": "reservedWallet()", +"c22af7ff": "ComputeBuy(uint256)", +"c22c4f43": "services(uint256)", +"c22d6c3c": "setArenaInterface(address)", +"c22f0ee2": "transferManagers(address)", +"c22f1c54": "_initializeAccount(address,address,uint256,uint256)", +"c22f8250": "updateStandard(bytes4,bytes4)", +"c22fc384": "exitScam()", +"c2304c4a": "addExplicitPosition(uint32,int64)", +"c2314be4": "CONFIG_FEES_DIV()", +"c231bace": "setMigrationTarget(address)", +"c232209e": "_verify(address,string)", +"c2328516": "disablePrivateFund()", +"c2329e5f": "_isNotOnSale(uint256)", +"c233e870": "isLatestPatchTree(bytes32,bytes32)", +"c2353918": "getCount(uint256)", +"c2356d23": "mintChest(address,uint16,uint24,uint24,uint8,uint8)", +"c235a5c7": "getGameStart(uint256)", +"c235e858": "VendorInterface(address)", +"c2362dd5": "lastEpochBlock()", +"c23693e0": "multiAccessRequired()", +"c23697a8": "check(address)", +"c236cc66": "GeneralUpdate(uint256,uint256)", +"c2370a62": "openGameResult(uint256,string)", +"c237898d": "getOwnerBalanceInMilliTokens()", +"c2381296": "beginPwn()", +"c2385fa6": "right78(uint256)", +"c238999b": "dislikeTrack(address,bytes32)", +"c239dfe0": "PermissionAdded(address)", +"c23a25ba": "getRoundBetOrigin(uint256,uint256)", +"c23a7427": "createMultipleWikiPages(string[])", +"c23a9e84": "getuserinverst()", +"c23b4b5b": "bountyShare()", +"c23c87d5": "play(bool)", +"c23da3a9": "initialSaleEndDate()", +"c23de962": "DefaultActionCalled()", +"c23e1cea": "SaleTokens()", +"c23ec301": "KSScidTOKEN()", +"c23f001f": "balances(address,address)", +"c23fed45": "setEscapeRequest(uint32,int256,uint32)", +"c2407089": "CursedToken()", +"c2410a69": "lockCostPerHour()", +"c2412676": "Token()", +"c2427f76": "getBidID(address,bytes32,uint256,uint256,uint256,uint256)", +"c242afaf": "bet(uint256,uint256,uint256[],uint256,address,bytes32)", +"c243431e": "AnalyticProxy()", +"c24366f0": "setKYCProvider(address)", +"c243bdee": "isHolderOwnAddress(bytes32,address,address)", +"c24504b7": "internalBuyTokens(address,address,uint256)", +"c245c1bc": "ownerBurnToken()", +"c2473378": "consortiumPlaceholder()", +"c247620d": "getArtistInfo(address)", +"c2490a67": "removeCardOwner(uint64)", +"c24924d6": "setQueryFee(uint256)", +"c2494dbf": "transferOnWallet()", +"c24962f4": "calculatePercentageToRelease(uint256)", +"c24977cf": "testPrivate()", +"c2498be6": "conjureAirdrop()", +"c24a0f8b": "endDate()", +"c24a8908": "token_airdrop_cnt_max()", +"c24a9674": "finalizeLastRound()", +"c24ad463": "Refundpot()", +"c24becf3": "getLastTier()", +"c24c153d": "addRound(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c24d316e": "UNITDummyPaymentGateway(address)", +"c24de0e4": "halvingSubsidy(uint256)", +"c24dec82": "TOKEN_BUSINESS()", +"c24e1fc1": "issuedSupplyRatio()", +"c24fe21b": "transferLockup()", +"c2502d34": "claim_price_money()", +"c2506eee": "setO3(address)", +"c2507ac1": "getTokenAmount(uint256)", +"c2507ef7": "_createPanda(uint256,uint256,uint256,uint256[2],address)", +"c250a312": "active_withdrawable()", +"c250ef46": "refSystem(uint256,address)", +"c25193ad": "lcm(int256,int256)", +"c251a4e9": "G2Ufund()", +"c252ca75": "getBonusPercent(address)", +"c252d844": "rest_time()", +"c253400b": "RPS(address)", +"c2535bf0": "COOLCOIN()", +"c254e4db": "SFT()", +"c2552497": "impl_mining(address,bytes)", +"c255343e": "targetUser()", +"c255fa40": "updateTotal()", +"c255fb17": "getRefBalance(address)", +"c25615c0": "joinOneLottery()", +"c256d578": "getLastAuctionWinsDate()", +"c256ea58": "get_receiverCryptobank(uint256)", +"c2571a0a": "percUp(uint256)", +"c2572c51": "advisorsAndPreICO()", +"c2577661": "getBallotPapper(uint256,uint256,uint256)", +"c257c851": "calculateEtherReceived(uint256)", +"c257eabb": "etherPaid()", +"c257f3ab": "getNumberOfShipsByOwner()", +"c258ff74": "List()", +"c2596b1e": "getDragonPrice(uint256,uint256)", +"c25a796e": "setHardcupFalse()", +"c25ab8b0": "iOSCoin()", +"c25acada": "Bithereum()", +"c25ae09f": "EthealNormalSale(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"c25b345a": "VivekRohitVibhayToken()", +"c25c22ee": "stageTokenMul(uint256)", +"c25cf1d0": "changeLockPeriod(uint256)", +"c25d0ac1": "tgeSettingsPartInvestor()", +"c25e6908": "ultimateOutcomes(bytes32)", +"c25f1901": "addThing(bytes32,string,string,string)", +"c25f1afe": "SponsorAdded(address)", +"c25f75fc": "pantry()", +"c25fe1a4": "changeHoldingTax(uint256)", +"c2606d99": "BITTECHToken()", +"c2608314": "getJntBeneficiary()", +"c260f681": "IsBoilerValid(uint256)", +"c2610cda": "SecretNumber()", +"c26181e0": "censorUser(address,bool)", +"c2619a5a": "AdministratorAdded(address,address,bool)", +"c26298a7": "getBalanceOfResidualBcoupons()", +"c262a33b": "preSaleCloseTime()", +"c262b912": "createCampaign(string,uint256[3],uint256[],uint256,uint256,uint256,uint256,string,int256)", +"c262df45": "isKnownRequest(address,address)", +"c26317d1": "RoundRevealStarted(uint256,uint256)", +"c26381f2": "limitETH()", +"c264786f": "pauseBlockNumber()", +"c264a063": "withdrawExcess()", +"c264a77c": "setSettleTimeout(uint256)", +"c2656473": "CROWDSALE_LIMIT()", +"c265a6c0": "KRCPreSaleContract(uint256,address,address)", +"c26613d5": "LogRebalance(address,bytes32,string,uint256,uint256,uint256)", +"c2664609": "submitStackholderTransaction(address,bool)", +"c2674780": "freecommunitycoin()", +"c2676e39": "VAToken()", +"c267e4b8": "previousWeiBalance()", +"c26875a4": "calculateCellBuySimple(uint256)", +"c268e777": "setDailyHourLimit(uint8)", +"c268e93f": "recordShareholders(address,address,uint256)", +"c269014b": "getMemberId(address)", +"c2695a25": "Rivercoin()", +"c2699b1d": "getFirstBuyLimit(bytes32)", +"c269f263": "PRETDESupplyRemaining()", +"c26a331d": "bonusProvider()", +"c26aa3c9": "lockUnicorn(uint256)", +"c26b41e7": "totalUETsSold()", +"c26b7ce9": "CashTelexToken()", +"c26b93df": "vote(uint80,uint256)", +"c26bacd1": "removeDriver(address)", +"c26c12eb": "getQuorum()", +"c26c7472": "addTimeToExpiry(uint256)", +"c26c84ec": "setBI(bytes32,int256)", +"c26d0412": "ethRate1()", +"c26d0c2c": "emitWorkPaused(uint256,uint256)", +"c26d69e1": "OnePercentGift()", +"c26d7daa": "startGladiatorBattle(uint256)", +"c26dd189": "jade(uint256)", +"c26fe7ce": "releaseVestedTokensFor(address)", +"c270cbeb": "BtcThumb(uint256,string,uint8,string)", +"c270ce28": "rdCollectorAddress()", +"c270d7cb": "getPlayerRoundWinningInfo(uint256,address)", +"c2710949": "calcValuePerShare(uint256,uint256)", +"c2714a97": "addBRA(address)", +"c271ca90": "numMomentsOf(uint256)", +"c2722ecc": "getStore()", +"c2723d2e": "token_transfer(address,address,uint256,bytes)", +"c272f73e": "burnSignature(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"c27382d9": "buyAndPlayGame(uint256,uint256,address)", +"c273b05f": "spentParsecs()", +"c27509cf": "investDirect()", +"c27549d9": "setRemainders(uint256,uint256)", +"c276086f": "createProducer(bytes32,uint256,bytes32)", +"c2761031": "k(uint256,uint256)", +"c2765b77": "setLegalToken(address)", +"c276963f": "tabsOneEthCanBuyICO()", +"c2769b11": "renounceVesterManager()", +"c276dce3": "internalForward()", +"c2775347": "haltsTrades()", +"c2777ce3": "currentEtherRateInCents()", +"c277f1ac": "fromId(uint256)", +"c277fe56": "pause(bool,string)", +"c2783ee5": "viewCrowdSaleLive(bool,bool)", +"c2784966": "TkoWhitelist(address)", +"c279d042": "product4_sell()", +"c27a65c1": "changeEthPriceQueryDelay(uint256)", +"c27a74d0": "catOwners(uint256)", +"c27b1ed9": "getConversionRateFactor()", +"c27b2c2d": "collectEarnings()", +"c27bc67c": "configureKeys(uint32,int256,bytes32,bytes32,uint32,bool)", +"c27bc7b2": "fortifyClaims(address,uint16[],uint256,bool)", +"c27c327e": "changeNewRubesUntilPayout(uint256)", +"c27cabb5": "proposalFee()", +"c27d1580": "getNorsefirePrice()", +"c27d607b": "lastEvidence()", +"c27d7721": "create(uint256[101][])", +"c27e7398": "getLockedTimeUserInfo(address,address)", +"c27fc305": "f1()", +"c280541c": "buy(uint256,address,bytes32)", +"c2808d1a": "MinSum()", +"c2812f74": "triggerMinCap()", +"c281309e": "feeTake()", +"c28196b1": "addImmigration(address)", +"c281a013": "FinalizableCrowdsale(uint32,uint32,uint256,address)", +"c281d19e": "cbAddress()", +"c283226d": "reclaimTokens(string,string)", +"c2832430": "withdrawForfeited(address,uint8,address)", +"c2843a14": "addInviterValue(uint256,uint256,address,address)", +"c2844c60": "emitJobRatingGiven(address,address,uint256,uint8)", +"c2844ebf": "isCustomerAlreadyRegister(address)", +"c2845184": "SUPPLY_FOR_REFERAL()", +"c284ab55": "eLYQD()", +"c284cdc5": "GetDescript(string)", +"c2852f38": "pauseContract(uint256)", +"c2856ca9": "presoldMax()", +"c285a245": "preferredSaleTLYperETH()", +"c285daf9": "Xoflife()", +"c286ba5b": "unfreezeAccountTimeAndValue(address)", +"c286f3d9": "SetLockAddress(address)", +"c287820a": "kittensSold()", +"c287fa72": "calcDiviDistribution(uint256,uint256)", +"c288ab9d": "getUserCurrentMartialId()", +"c288eeee": "nowPeriod()", +"c2897b10": "stand()", +"c289adfa": "getAssetPrice(uint128,uint128)", +"c289dbe8": "first_withdrawal(uint256)", +"c28a56f1": "checkReceiptProof(bytes32,bytes,uint256[],bytes,bytes)", +"c28a9157": "bullsmasterReq()", +"c28aafb1": "addWallet(address,string)", +"c28b4369": "giftCard(uint256,address)", +"c28b4577": "setPermissionById(uint8,bytes32)", +"c28bfe5a": "testFailCreateSameIpfsHashAndNonce()", +"c28c770a": "getLockedTokensPerUser(address)", +"c28cedf3": "DEMO()", +"c28d38a8": "STARTING_SEEDS()", +"c28d5644": "LogMinSell(address,uint256)", +"c28db642": "tocancel(uint256)", +"c28dbc38": "grantAccessForToken()", +"c28de2cd": "upgraded()", +"c28e5022": "collectAndUpdate(address[])", +"c28e6e39": "ReducingSupplyCoin()", +"c28eab85": "setMinimumTokenSell(uint16)", +"c28ec9d7": "respondToChallenge(uint256[9],bytes,bytes32[],bytes,bytes32[],bytes,bytes32[],bytes,bytes,bytes32[])", +"c28f57ca": "ICOSaleStart()", +"c28f812c": "getPaycarnita()", +"c28f8e09": "icoFunded()", +"c28f9df1": "requestVestingTrusteeOwnershipTransfer(address)", +"c290367f": "playDiceCombinations(uint256,uint256,uint256)", +"c290d691": "pay(uint256)", +"c291ad27": "Notify_Number(string,uint256)", +"c291bf6d": "AuthDapps(address,bool,int256,bool,bool)", +"c291df56": "affPercent_()", +"c29224ea": "roundFailedToStart()", +"c292aae3": "McrForGasFailed(address,uint256)", +"c2930f91": "baseUnit()", +"c29338cf": "cozyTime(uint256,uint256,address)", +"c293fc0a": "SetBankerPrincipal(uint8,uint256)", +"c29402f1": "relistGenesisSales(bytes32,uint256)", +"c2944f69": "_multiSendOwner()", +"c2944f7a": "registHolderStep(address,uint8,address)", +"c294c93b": "getSANOwner(uint256)", +"c2954ff4": "Sent(address,uint256,bytes)", +"c2955bdf": "setUserBlacklistedStatus(bool)", +"c296302a": "transferRoot(address)", +"c296f721": "_buyLandForCandy(address,uint256)", +"c29721e0": "sendArena(address[],uint256[],uint64)", +"c297fa0f": "DEFAULT_DURATION()", +"c2985578": "foo()", +"c2992300": "setCreatePrice(uint256)", +"c29988db": "distributeEbyte(address[],uint256)", +"c299a394": "getNextRank(address)", +"c29a6fda": "setERC20(address)", +"c29d350f": "startTimeOf(address)", +"c29d9d74": "startMultipass(string,string,string,string,string,uint256,address)", +"c29e8863": "setImplementation(bytes32,bytes32,address,bytes32)", +"c29fb94a": "transferFokenIssued(uint256,uint256)", +"c2a029f0": "setID_control(uint256)", +"c2a15dbb": "_currentIcoPhaseBonus()", +"c2a15e7e": "votingEndsInHHMM()", +"c2a24b33": "Post(address,string,string)", +"c2a2747b": "p1()", +"c2a2916d": "nameAddress(string)", +"c2a33485": "setReg3(uint256)", +"c2a394cb": "AuctionSuccessful(uint256,uint256,address,address,uint256)", +"c2a48c70": "revokeUserRole(bytes32,string,address)", +"c2a49237": "memberSellToken(uint256)", +"c2a5e5c2": "setTwitter(string)", +"c2a63e3b": "getEmployeeCount()", +"c2a88340": "Deactivate()", +"c2a8ec80": "betStats()", +"c2a95cc9": "updateTrustSettings(address,uint256)", +"c2a960a1": "signSendFlower(bytes32,string,string,address,string,bytes16,uint256)", +"c2a96ce5": "EscrowVault(address)", +"c2a98b41": "mymethod(uint256,string)", +"c2aaf9c4": "receiveEth(uint256)", +"c2ab66dd": "hasAttribute1ButNotAttribute2(address,bytes32,bytes32)", +"c2ac0b4a": "intMax(int256)", +"c2ac3aff": "addEth()", +"c2ac481c": "disaToken()", +"c2acc5cf": "mintTokens(address[],uint256[])", +"c2add678": "getLockerInfo(address)", +"c2adf34a": "bonusWeiAmount()", +"c2ae1a53": "sendTransaction(bytes32,uint256,int256)", +"c2ae7e14": "approvePaillier(address,string)", +"c2aeb355": "GRAMATON()", +"c2b06664": "setDS(address)", +"c2b0c743": "payETHToProvider(address,address,uint256)", +"c2b12a73": "setBytes32(bytes32)", +"c2b2fb5e": "editionExists(uint256)", +"c2b373a7": "seedHash()", +"c2b41ac4": "updateMinimumStakingTokenPercentage(uint8)", +"c2b4470c": "FINLAB_PRESALE()", +"c2b477a7": "mintLimitByTemplate(uint256)", +"c2b4ab4d": "getCountBonus(uint256)", +"c2b4ddde": "setFundingEnabled(bool)", +"c2b6b58c": "isClosed()", +"c2b70850": "QuantiModoToken()", +"c2b7be16": "addSupportedToken(address,address)", +"c2b8fd12": "MYRN()", +"c2b98295": "balanceOfNonKYC(address)", +"c2ba4744": "canMint(address)", +"c2ba5b40": "getPackageData(string)", +"c2ba857e": "setJobAccepted()", +"c2baa882": "tokensPerCHF()", +"c2bc2efc": "get(address)", +"c2bdb862": "verifyProofOfTransitionAgreement(address,uint64,uint256,bytes32,uint256[2],bool,bytes32,bytes32,uint8)", +"c2bf17b0": "recover(bytes32,uint8,bytes32,bytes32)", +"c2bf1af7": "freezingStatus()", +"c2c06f20": "OldRopeToken()", +"c2c13a70": "LOCKUP_WALLET()", +"c2c3bd6a": "_v()", +"c2c4a328": "getInitPrice(bytes32,uint8)", +"c2c4abe6": "ASSPToken()", +"c2c4c5c1": "checkpoint()", +"c2c5143f": "bobMakesEthDeposit(bytes32,address,bytes20)", +"c2c52055": "ChampionGameStarted(uint256,uint256)", +"c2c546b8": "sumICOStage6USD()", +"c2c5b9f1": "setInt(string,int256)", +"c2c5ec41": "isValidProof(bytes32,string)", +"c2c5f89f": "BonusAwareCalculator(address,address)", +"c2c61d01": "agreeToTrade(address)", +"c2c62562": "setCrowdsaleData(uint256,uint256,uint256)", +"c2c68ee1": "unlockTrading()", +"c2c7ca1d": "extraTokensMintedDuringPresale()", +"c2c7ff0a": "ToperCoin()", +"c2c8fd40": "increaseWorldLimit(uint256,uint256,uint256)", +"c2ca058d": "clearBlacklistMapping()", +"c2cb88bd": "giftMessage()", +"c2cb9927": "reward(address,uint256,uint256,string)", +"c2cba306": "TokenAddress()", +"c2cbb299": "airdrop_auto(address,address)", +"c2cca62c": "TransferMinersReward()", +"c2ccb8a8": "isCurrentAccountMinter(address)", +"c2cd0e01": "issueNewCoins(address,uint256,string)", +"c2cd7632": "isEmployee(address,address)", +"c2cdaf24": "start1BonusPeriod1()", +"c2cdbf01": "SyloToken()", +"c2cf7326": "hasConfirmed(bytes32,address)", +"c2cf9bbb": "PotPotato()", +"c2d0916f": "moveMetadata(address,address)", +"c2d15d21": "totalIssuanceLastAverageBalance()", +"c2d23e41": "continuousBacking()", +"c2d25167": "closeIcoOne()", +"c2d37428": "withdrawForWinner(uint256)", +"c2d415e2": "Chicken()", +"c2d4160a": "GetEvaluate(uint256,uint8)", +"c2d42ef2": "removeAccount(uint256)", +"c2d4423f": "excludeWhale(address)", +"c2d4489f": "provider2()", +"c2d4f851": "calculatePrice(uint256,address)", +"c2d526aa": "_rank(uint256)", +"c2d53eb4": "initOwner()", +"c2d560ab": "stopOraclize()", +"c2d5baf9": "JJL()", +"c2d83718": "randomTeam()", +"c2d83e61": "UserPool(address,address)", +"c2d86376": "NewDonor(address,uint256,uint256)", +"c2d8de54": "promisor()", +"c2d936d9": "MINATOKU()", +"c2d9c196": "preico_startdate()", +"c2da621b": "setMeterPoint(address,int256)", +"c2dab162": "mineit(address,uint256)", +"c2db0482": "getUnionIdByAddress(address,address)", +"c2db26fc": "unverifyAccount(address)", +"c2db2c42": "purchaseToken(uint256)", +"c2db5890": "breedAxies(uint256,uint256,uint256)", +"c2db8676": "BloodToken()", +"c2db9e25": "getMinerHalvingHashRate()", +"c2dc0470": "KilledTillNow()", +"c2dc9af4": "hardCapHash()", +"c2dcdfb4": "preferredSaleTokensLeftForSale()", +"c2dced85": "numberDecimal18()", +"c2de2909": "drawRandomWinner()", +"c2de89b7": "getCleide()", +"c2def3b9": "getOrganizer()", +"c2df8815": "Adnity()", +"c2e0af44": "doMove(address,address,uint256)", +"c2e12f21": "setDefaultTranches(bytes32[])", +"c2e171d7": "Save()", +"c2e26adb": "bulkPay(address[],uint256,address)", +"c2e28dd1": "setTitulaire_Compte_8(uint256)", +"c2e2a338": "withdrawRejected()", +"c2e2a33e": "setPermanentLimitForType(uint32,uint256)", +"c2e3460d": "Anxxia()", +"c2e4601a": "getAffiliateRate(uint256)", +"c2e46379": "transferBountyTokens(address[],uint256[])", +"c2e4b8fb": "TokensUpgradedFrom(address,uint256)", +"c2e52206": "getPlayerCount()", +"c2e55da3": "product3_pot()", +"c2e5d950": "finalizedRefund()", +"c2e5ec04": "setTradingEnabled(bool)", +"c2e5feb5": "KeyReplaced(address,address)", +"c2e62675": "COTToken()", +"c2e78f12": "deVerify(address)", +"c2e800ed": "isContractProxy(address)", +"c2e88185": "CyberMusicToken()", +"c2e9fab3": "SubUser()", +"c2ea2f9c": "halfCentury(address)", +"c2ea5c9e": "getInvArray()", +"c2eaaeb3": "computeTxFee(uint256)", +"c2eac875": "secure(uint256,string)", +"c2eb10a2": "makeBundle(uint256)", +"c2ecdf8e": "ownerCMIT()", +"c2ed2b05": "documents(uint256)", +"c2eddfd2": "kyberMultiSigWallet()", +"c2edec0b": "setCharityDonation(uint256)", +"c2ee0a57": "getBlockList()", +"c2ee3a08": "ONE()", +"c2eef08e": "stopLandEthSale()", +"c2f02b33": "Crowdsale7(address,uint256,uint256,uint256,address,address)", +"c2f0bb29": "getCardDetails(uint16,uint8,uint256)", +"c2f0c083": "angelOnLeaderboard(uint64)", +"c2f0d93f": "icoAbandoned()", +"c2f0dbe2": "claimPremium(address[2],uint256[7],uint8,bytes32[2])", +"c2f137f1": "swapAddr()", +"c2f3ce10": "ADDRESS_LIMIT()", +"c2f3d788": "read_total_number_of_purchases()", +"c2f415b5": "CTBoatGame(address,address,uint256)", +"c2f490e9": "caller_()", +"c2f4976f": "setRoundFinalScore(uint16,bytes32)", +"c2f4faf4": "TestOrder(address)", +"c2f61a9f": "setOraclizeQueryType(string)", +"c2f666a3": "PriceIncrease()", +"c2f7c50a": "FindID(address)", +"c2fa6697": "fundraiserCallData()", +"c2fa8b2d": "PoetToken()", +"c2faa691": "Constructor(uint256,string,string)", +"c2fb538e": "updateFactoryContract(address)", +"c2fb8f36": "TinyHuman(address,address,address)", +"c2fbe7bc": "transferFees()", +"c2fc048a": "transferOwnerToProxy()", +"c2fcbf37": "isValidateParameter(string,uint256)", +"c2fce718": "getPartsOfOwnerWithinRange(address,uint256,uint256)", +"c2fd0263": "isTripleNumber(uint256)", +"c2fe2022": "getFollowers(address)", +"c2fe3321": "PRE_ICO_ON()", +"c2febe49": "QuantorToken()", +"c2febef5": "removeCountry(uint256)", +"c2ff0f15": "NewShare(string,bool,string)", +"c2ff3334": "jump(uint256)", +"c2ff7a38": "adjustBalanceCheckpoints(address)", +"c2ffc7bb": "slates(bytes32,uint256)", +"c2fffd6b": "setCancelFee(uint256)", +"c30096ef": "calculationTeamsRewards(uint256[])", +"c3017200": "removeAssociatedAddress(uint256,address,address)", +"c3027525": "getOwned()", +"c302a45b": "crowdsaleStopped()", +"c302f747": "poolPresale()", +"c30354cb": "VUP_TOKEN_SUPPLY_TIER3()", +"c30381b9": "setSellCourse(uint256)", +"c303c3d5": "returnEtherToInvestors()", +"c303c53a": "withdrawForTwoStep()", +"c304b368": "updatedRandom(string)", +"c304ffc4": "CreateICE(address,uint256)", +"c3059c63": "buyUpgradeCard(uint256)", +"c306834e": "PRIVATE_SALE_LIMIT()", +"c306cb90": "sendDevTokens()", +"c30715d1": "setNumRewardsUsedForAddress(uint256,address,address)", +"c30718e8": "testIntParser()", +"c3077c10": "settxpct(uint256)", +"c307f6ba": "withdrawWbtToken(address,uint256)", +"c3082e95": "playerOutputAtNow(address)", +"c308f55b": "fallback(uint256,address,uint256)", +"c30a990a": "createPaymentChannel(address,uint256,uint256)", +"c30b06e8": "allMultitokens()", +"c30b182e": "sendVNET(address,uint256)", +"c30b8867": "maxPercentPerPlayer()", +"c30bc5ef": "breedWith(uint40,uint40)", +"c30bf4d8": "CodeEligible()", +"c30c0c0c": "checkUsers(address,address)", +"c30d0ee4": "phiRate()", +"c30dafd8": "_setTittyForSale(bool,uint256)", +"c30df14c": "logPurchase(address,uint256)", +"c30df586": "ZAI()", +"c30e9767": "canReceive(address,address,bytes32,uint256,bytes)", +"c30ed0a4": "Getwsic(uint256)", +"c30f4a5a": "updateURI(string)", +"c31028dc": "hasFirstUnionIds(bytes32,bytes32)", +"c31051fe": "teamPeriodLength()", +"c31053f7": "NNT()", +"c310b9df": "ProposalAdded(uint256,uint256,string,bytes32)", +"c311a3cd": "GetHoga(address,uint32)", +"c311d049": "withdrawEth(uint256)", +"c312d468": "sendPToken(address,uint256)", +"c312ffed": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c31422ac": "calculateTokens(address,uint256)", +"c3143fe5": "setUserCap(address,uint256)", +"c31453a7": "_unpackAttackParams(uint256)", +"c3146814": "pegETHUSD(uint256)", +"c3153834": "prefixedRecover(uint8,bytes32,bytes32,address)", +"c315432a": "isGameStarted()", +"c3155201": "XulCrowdsale(uint256,uint256,uint256,address)", +"c31592af": "getY(bytes)", +"c315a082": "KRT()", +"c3169ef2": "respond(uint256,uint256[4])", +"c316c98b": "updateCollector(address)", +"c3173774": "balanceThreshold()", +"c317464d": "CryptoHearthStone()", +"c31752c0": "getEmployerJobs(address,uint8)", +"c3182360": "getTimeBonus(uint256)", +"c3191f31": "readWelfareAddress(uint256)", +"c3192c82": "getcurrNumOfUpgrades()", +"c319618f": "getAllMyPackageIds()", +"c31989ed": "TronGold()", +"c319a02c": "right98(uint256)", +"c319e412": "allowContribution()", +"c31a0972": "OrpheusRoyalSiamRailways()", +"c31ad7dc": "voteYes(string)", +"c31b29ce": "GAME_DURATION()", +"c31bb2fb": "XEPToken()", +"c31bb8d6": "percentToTakeAsRake()", +"c31c0b62": "isSaleComplete()", +"c31c5221": "approveSetTokenControlInfo()", +"c31c6855": "presaleBonusTokensClaimed()", +"c31ce93e": "getExchangeGroups()", +"c31ceb2a": "numberOfAttendees()", +"c31d0031": "CrowdFundDAO(string,uint8,string)", +"c31d309a": "addRequestorAddress(address)", +"c31d3a6d": "payInvestors()", +"c31d3e8e": "maxPublicSale()", +"c31e0547": "quickConverter()", +"c31e6ee0": "sendTokensToService(address)", +"c31f3537": "removeBotAddress(address)", +"c31f586d": "cancelSaleAuction(uint256)", +"c31fa083": "setIpfs(string)", +"c32011f0": "unfreezeTeamRecepientBlock()", +"c3204954": "confirmTransactionByMediatorFee(uint256)", +"c320c727": "setRegistrationFee(uint256)", +"c3210eb7": "proposeCount()", +"c3218f50": "startPreICO(address)", +"c321dc18": "showParticipantWei(address)", +"c32221cf": "_newRepo(string,address)", +"c32377df": "recevoirApprobation(address,uint256,address)", +"c3237ff4": "emitFeePeriodClosed(uint256)", +"c32426c9": "ProvideToken()", +"c324606a": "confirmStakeholderTransaction(uint256)", +"c324a669": "purchaseSoldiers(uint256,uint256)", +"c325ae4e": "belongsToUser(address)", +"c3262dfd": "setUserID(bytes32)", +"c3283d83": "getStrandContract(uint256)", +"c32863a7": "every15()", +"c32935d7": "getBuyPriceTimesByTime(uint256)", +"c329e4a5": "BoardAddressChanged(address,address,address)", +"c32a4369": "getAllSamplesForOwner(address)", +"c32a4c7e": "returnCoke(uint256)", +"c32a50f9": "setSeed(uint256)", +"c32a6f6d": "toUint(string)", +"c32a88ae": "recoveryPaymentDigest(bytes32,uint256)", +"c32a8edf": "someMethod1(uint256,uint256,uint256,uint256)", +"c32a9b00": "do_grant_tokens(address,uint256)", +"c32aaa86": "getNameWriterId(bytes32)", +"c32b8683": "creatorRequestFundTransfer(uint256,address,uint256)", +"c32c1e65": "setOperations(address)", +"c32cc6d5": "investFor12Months(address,uint256,uint256)", +"c32ceb14": "setQueryIdForAddress(bytes32,address)", +"c32d88bb": "changeDepositAmount(uint256)", +"c32d946d": "performTransfer(address,address,uint256,bytes)", +"c32dee3a": "second_bonus_amount()", +"c32e16e7": "REQUEST_CANCELED_BY_LENDER_STATUS()", +"c32e2b42": "SalesAgentRemoved(address)", +"c32ee591": "isTransferAllowed(address,address,address,address,uint256)", +"c32f6945": "MiningLevelup(address,uint256,uint256)", +"c32fb5ea": "getNewAllowancePeriod()", +"c32ff491": "ServerManager()", +"c3310517": "reservedTokensDestinationsLen()", +"c3315b4b": "EasyInvest25()", +"c3328816": "TeamAdvisorsWallet()", +"c3332621": "shippingDate()", +"c3332732": "setNextGame(uint256,uint256,uint256,uint256)", +"c3336c0f": "transferMultipleSame(address[],uint256)", +"c3340892": "LogStateChange(uint8)", +"c334447b": "bytes32ToTokenId(bytes32)", +"c334e875": "payByErc20(uint256)", +"c334ea8f": "setMateAdvertisementRate(uint256)", +"c3351b88": "getParticipantExternalId(bytes32)", +"c3354632": "_premoveByIndex(uint256)", +"c335f0a4": "RKGToken()", +"c336937d": "Revoked(address,address)", +"c3369b0d": "issueTokens(uint256,uint256,uint256)", +"c336e7fb": "NobelToken()", +"c3380b72": "getDefense(bytes32,bytes32,uint256)", +"c33818fd": "Controller_Address2()", +"c338287f": "getUSDPrice()", +"c33890ff": "StartNewIteration()", +"c3392f25": "PRCT100_R_TEAM()", +"c33a4cc8": "PresaleUpdated(uint256,uint256)", +"c33a5bb6": "RLCPerETH()", +"c33a66e0": "updatePriceEDEX(uint256)", +"c33a800b": "createHeldCoins()", +"c33aa7fe": "submitBid(string)", +"c33af352": "_getFunc(uint256,uint256,uint256,uint256)", +"c33b76c6": "rakeAddress()", +"c33bbe47": "LAM()", +"c33cfe36": "KolkhaToken(uint256)", +"c33db789": "_triggerFinishTournament()", +"c33df4ba": "getNumOfRickHolders()", +"c33e1844": "BTMC()", +"c33e40a3": "setBasePoints(uint256)", +"c33e4942": "definition(bytes32)", +"c33fb877": "process()", +"c3403ddf": "endVoting()", +"c34052e0": "contains(uint256)", +"c341031a": "Testereum()", +"c341b9f6": "freezeAccounts(address[],bool)", +"c3430bce": "validWhiteListedPurchase(address)", +"c3434883": "buy(uint256,uint256,bool)", +"c3437e06": "approvedBuyer(address)", +"c3440022": "WhitelistedAddress()", +"c34492a7": "buyTokensByOptions(address,uint256,string)", +"c344bc47": "HonestisNetworkTokenWire3()", +"c344bc4a": "REALCrowdsale()", +"c344cdd2": "offerOptionsConversion(address)", +"c34588ba": "countOfDeeds()", +"c3458d18": "callRecipient(address,address,address,uint256,bytes,bytes,bool)", +"c345b571": "_subDai(uint256,address)", +"c345c54b": "doSafeSend(address,uint256)", +"c3462818": "PFC(address)", +"c34764cf": "makerWithdrawERC20Token(address,uint256)", +"c347fe1f": "addCET4(uint32,uint32,uint32)", +"c3492908": "BASE_TIME_TO_COOK()", +"c3496529": "setVesting(address[],uint256[])", +"c34a253a": "cardFacevalue(uint8)", +"c34b6ae0": "setFreeTransferAllowed(bool)", +"c34ba3e9": "createPromise(address,uint256,uint256)", +"c34c08e5": "executor()", +"c34c27ad": "SendOwner()", +"c34c4417": "registerData(bytes)", +"c34c6b93": "getDateInfo(uint256)", +"c34d2732": "MAX_COMMIT_DURATION_IN_SECONDS()", +"c34da17c": "isBurned()", +"c34db131": "CSCPreSaleManager()", +"c34dd141": "percent_reduction()", +"c34de22d": "genKeysRec(uint256,uint256)", +"c34debc7": "updatePlayerWin(address,uint256)", +"c34e6e1b": "OnlyWhiteListedAddresses(address)", +"c34ef9af": "second_bonus_duration()", +"c34f1fea": "UnfreezeAmount(address,uint256,uint256)", +"c34f6b0d": "getPrize()", +"c34f783d": "allocateToken(address[],uint256[],uint256[])", +"c34f869b": "Voted(uint256,bool,address,string)", +"c34fb5ca": "canonizedParameterizer()", +"c3500745": "refundLockDate()", +"c3501ff6": "redeemToken(uint256,address)", +"c3502510": "UsdPerEthChanged(uint256,uint256)", +"c3508d58": "refundByOwner(address)", +"c350bbb6": "RoscaERC20(uint256,string,string)", +"c3513132": "accessTokenFee(uint256)", +"c351fd77": "setGasPricePctOfBetValue(uint256)", +"c351fdfd": "setBatchNumber(address[],uint256[])", +"c3521b1a": "wolkFund()", +"c352dae2": "getWalletInfo()", +"c352fbda": "grantMarketingCoins(address,uint256)", +"c353a89e": "changeMember(address,address)", +"c353c2de": "unPauseTokenSale()", +"c353dbb1": "EtherPluscoin()", +"c3542cad": "SaleStageUp(int256,uint256)", +"c3548647": "setActivationFee(uint256)", +"c35506c0": "upgradingEnabled()", +"c355b107": "cNiceGuy()", +"c355eaf0": "setEthlanceSponsorWalletContract(address)", +"c35740f9": "partner2_name()", +"c3576b41": "setOwnersCommission(uint256)", +"c35774a1": "setApproval(address,uint256[],bool)", +"c35789cc": "Close()", +"c3584d88": "getMaxEtherToInvest()", +"c358ced0": "isRevealPhase()", +"c359a2a4": "increaseContribution(address,uint256)", +"c35a4d46": "DubaiGreenBlockChain()", +"c35ac080": "modificaCurso(uint256)", +"c35c08bd": "getCrowdsourcer(bytes32)", +"c35c3265": "novumAddress()", +"c35cabf4": "littClientId()", +"c35d1e01": "RESERVE_TOKENS()", +"c35dcf90": "getWhitelists()", +"c35e1b33": "MSERToken(uint256,string,string)", +"c35ef892": "getWriteTimestamp(bytes32)", +"c35f4bbb": "calculatePrimordialMultiplier(uint256,uint256,uint256,uint256,uint256)", +"c3602ee5": "delayedRequest(string,uint256)", +"c36086f0": "initTransaction(address,uint256)", +"c360c616": "TittyPurchase(address,address)", +"c3615e39": "set_address(address,address)", +"c36360f2": "limit8()", +"c36433e2": "createPromoDrug(bytes32,address,uint256,uint256)", +"c3645759": "increaseDistrictWeed(uint256,uint256)", +"c364a25d": "setHash(uint16,bytes32)", +"c3650a21": "danserviceTeamAddress()", +"c36572d6": "hasEnded(uint256)", +"c3657f96": "setBoxCount(uint16,uint16)", +"c365a646": "_setRiskParameters(uint256,uint256)", +"c365d4f0": "initWidth()", +"c36604ed": "secretNumber()", +"c3662528": "isApproved(bytes32,uint256,bytes)", +"c3663271": "Icoends()", +"c366b1d3": "BulkToken()", +"c3676a02": "mangeWhileList(address,bool)", +"c367ec17": "rewardAuditor(uint256,address,uint256)", +"c36800eb": "IdentityCreated(address,address,address,address)", +"c368109c": "monster_hp(uint256)", +"c3681e3d": "change_p3(uint256)", +"c3682ace": "time_end_sale()", +"c36851bc": "bidOnWonder()", +"c3685e89": "addMessage(address,string,string)", +"c3689f01": "testControlSetNotRetractableNotOwner()", +"c368b160": "disbursement()", +"c36981f4": "withdrawNacNetfReController(uint256,address)", +"c369c0c6": "addValidationPreSigned(address,bytes32,uint8,bytes32,bytes32,bytes32)", +"c36a7b45": "getUserTotalEthVolumeSaldo(address)", +"c36ad8a6": "deleteStar(uint256)", +"c36af460": "getLatest()", +"c36c0155": "get_planet_info(uint256)", +"c36c09e2": "setTrustedSender(address)", +"c36ccedc": "approve(address[16],address,uint256)", +"c36de353": "Ethereumt()", +"c36de531": "smallestUnitName()", +"c36e6fe5": "XclusiveCoin()", +"c36e9546": "SVL()", +"c36ff164": "claimFoundationToken()", +"c36fff2d": "availableOptions(uint256)", +"c37067fa": "donate(bytes32)", +"c370b0b5": "BbeCoin()", +"c370c86d": "setTokenName(address,string)", +"c370d8fe": "ExpandandHarvest(uint256)", +"c3720290": "giveSignOff()", +"c37210f4": "getDocumentSign(uint256,uint256)", +"c3722b1f": "AutoSell()", +"c3736dfa": "_shiftRight(bytes32,uint256)", +"c3737054": "changeManagerQuorum()", +"c373c0ef": "setStartDate(uint32)", +"c37479b4": "mintForwarder(uint256,bytes32,address[],int256,address)", +"c3751729": "mGenerateTokens(address,uint256)", +"c375ba8a": "getLavaPacketTypehash()", +"c375c2ef": "removeContract(address)", +"c3762904": "ethraised()", +"c37792b5": "generateSecurityToken(string,string,string,bool)", +"c3780a3a": "myFunction()", +"c3787865": "balanceFromToken(uint256)", +"c378a83b": "EarthToken()", +"c378ea76": "getFrom(uint256)", +"c378f1af": "RemoveAll()", +"c37981b3": "maxFixedSupply()", +"c37991e3": "ProposalEnd(uint256,string)", +"c37a676c": "acceptMins(uint256)", +"c37a6e8d": "signer1_proposal()", +"c37a832d": "getRoundUserBalance(uint256,address)", +"c37b0aa7": "modifyPriceCountry(uint256,uint256)", +"c37b85a6": "assignIndices(address[])", +"c37bcb1e": "unlockDate1()", +"c37cb1ae": "airdropsTokens(address[],uint256[])", +"c37cdcfe": "doDisputeMemoryRead(uint256,bytes32,uint256)", +"c37d1c8b": "tokensToMint(uint256)", +"c37d8a7e": "indexReplies()", +"c37d9044": "create(uint8)", +"c37db253": "isNotZero(bytes32,string)", +"c37dfc5b": "fillOrder(uint256,uint256)", +"c37e7379": "distributePresale(address)", +"c37e74c7": "getRet()", +"c37e8cb2": "testExportAuthorized()", +"c37e8f11": "additionalCurrency(address,int256)", +"c37f68e2": "getAccountSnapshot(address)", +"c37f7f7f": "doTransferIn(address,address,uint256)", +"c37ff3d9": "sha(uint256,uint256)", +"c3800257": "Addmember(string,address,address,uint256,bool,uint256,bool)", +"c3800fdc": "CurrentToken(address)", +"c3801938": "getStateRoot(uint256)", +"c3830618": "reduceStake(uint256)", +"c3834d89": "setPromo(address,uint256,uint256)", +"c383b1bb": "summon10SkinAppearance(uint256,uint128)", +"c383e020": "endContract(address)", +"c384521f": "tokenCapPhaseTwo()", +"c384b170": "teamWallet2()", +"c3858e82": "unregisttIcoAddress(address)", +"c38672a0": "confirmTokenTransaction(uint256)", +"c38678c3": "addBuildingToServer(uint256,uint8[10],uint8[10],uint8[10],bytes32[10],uint8)", +"c386ff7d": "checkFunction(bytes32,uint256)", +"c38789ba": "example(uint256,address)", +"c387b2a7": "BatchTransferContract(address)", +"c3886f61": "checkWithdrawal(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"c3888bce": "transferTokenToMultiple(address[],uint256)", +"c388c167": "setNameAndTicker(string,string)", +"c388cca6": "testBitAndFailIndexOOB()", +"c38a0306": "devFeeHandle(uint256)", +"c38a0fcb": "MGLTOKEN()", +"c38a8afd": "minimumBet()", +"c38ad273": "priceETH()", +"c38ad65b": "getHeroPostAddres()", +"c38bb537": "setPauseStatus(bool)", +"c38c0fa7": "getParentPayoutDistributionHash()", +"c38c5813": "registerAdmin(address)", +"c38c9800": "innerContract(string)", +"c38caab5": "setPost(string)", +"c38e52c0": "deletePeerReview(address)", +"c38e650f": "changeRoundManager(address)", +"c38f0741": "snapshotDailyGooResearchFunding()", +"c38f1abf": "waitTokensPeriod()", +"c391c1b5": "updateOwner(address,address,uint256)", +"c391d581": "getXPROMO_MULTIPLIER()", +"c392079f": "removeCoin(string)", +"c392cf41": "reveal(address)", +"c392f118": "getSellingStatus(uint256)", +"c392f5a0": "getAllPackageReleaseHashes(string)", +"c39387ad": "checkAndUpdateStage()", +"c3946909": "setTheKingsQuote(string)", +"c394f6cb": "unclaimedTokens()", +"c39513af": "setDeprecated(string,address)", +"c395546c": "authorizedToSpend()", +"c395a16b": "leaderBid()", +"c395f336": "processPurchase(uint256,uint256)", +"c3964372": "startRound(uint256,uint256)", +"c3966409": "endProject()", +"c397ae1b": "holosForWei(uint256)", +"c39804ac": "generatePreimage(uint256,uint256,uint8)", +"c39899c1": "isDeadline(uint256)", +"c398a925": "supportsERC165(address)", +"c398f030": "expire(uint256,uint8,bytes,bytes,bytes)", +"c399330d": "getBonusByTime()", +"c399d7c5": "getAccountTokenStats(address)", +"c399ec88": "getDeposit()", +"c39a9d97": "crowdSaleType()", +"c39afb0b": "BitcoinEther()", +"c39b79d4": "_contains_(address)", +"c39cb03f": "ERC827Token(uint256,string,string)", +"c39cbef1": "changeName(uint256,string)", +"c39ce8b6": "FranklinFrank()", +"c39cf53d": "nextrafflenumber()", +"c39e7394": "addAuctionReward()", +"c39ffc65": "GVFX()", +"c3a07df6": "getPermissions()", +"c3a0ba73": "BlockFilesManagement()", +"c3a11c51": "etherPriceInUsd()", +"c3a151de": "getPlayedGamePlayers()", +"c3a18dec": "PRIVATE_SUPPLY_ADDRESS()", +"c3a1e7cc": "totalWEIInvested()", +"c3a25c4c": "computeCntrAmountUsingPacked(uint256,uint16)", +"c3a267b7": "createEthGlobalDelegation(address,address)", +"c3a2a665": "retrieve(address,uint256)", +"c3a2a93a": "getContracts()", +"c3a2c0c3": "scheduleCall()", +"c3a3017d": "issueMasterCardNumber(address,address,uint256)", +"c3a34e1c": "timeTillImpact()", +"c3a35825": "getUint(bytes32,string)", +"c3a39544": "initialCompanysTokenAllocation()", +"c3a3ee80": "setPartsToSell(uint256,uint256)", +"c3a48741": "distributeTKLN(address[],uint256)", +"c3a4ebf5": "_roundOver()", +"c3a4f8b5": "hibit(uint256)", +"c3a5fc4d": "IconFoundation()", +"c3a62a68": "getDate(bytes10)", +"c3a69a75": "dividendsDistributor()", +"c3a6e2a7": "disableToken(bool)", +"c3a74e6a": "placeSellFciOrder(uint256)", +"c3a83aab": "getTokensAvailableToMe(address)", +"c3a869e6": "goldenTicketPrice(uint256)", +"c3a8da5f": "EthereumMark()", +"c3a8f536": "rsub(uint128,uint128)", +"c3a9b1c5": "sayHello(string)", +"c3a9bd8b": "maximumTokens()", +"c3a9be6b": "setLimitGame(uint256,string)", +"c3a9c930": "Gift(uint256,address,address)", +"c3aa0fe6": "setItemLimitHolding(uint256,uint256)", +"c3abe888": "sendBatch(address[])", +"c3ac93df": "QCOToken(address,address,address,address,address,address)", +"c3ad5ecb": "getTweet(uint256)", +"c3ae43a0": "buy100tickets()", +"c3aea22e": "fillSellOrder(uint256)", +"c3aeacdf": "changeRules(address)", +"c3aebdd1": "s5(bytes1)", +"c3aedd92": "updateIsVerifiedInBulk(address[],bool[])", +"c3af38fa": "changeInfoUrl(uint256,string)", +"c3af702e": "totalfv()", +"c3b0f915": "KickToken()", +"c3b1037b": "ownerSetGasPrice(uint256)", +"c3b18fb6": "updateSplit(uint256,uint256)", +"c3b18ff2": "totalSupplyICO()", +"c3b1d52b": "recipientToGiftIds(address,uint256)", +"c3b1ff93": "acceptGame(address,uint256,bytes32)", +"c3b24be0": "Leg()", +"c3b2556d": "lookup(bytes)", +"c3b2d337": "_initialSupply()", +"c3b3271d": "updateStar(uint256,string,string)", +"c3b35a7e": "withdrawTo(address,address,uint256)", +"c3b3c656": "kickOutGroup(address,uint256)", +"c3b4db25": "setSeller(uint256)", +"c3b55635": "log(string,bool)", +"c3b57af8": "getStageAmount(uint256,address,address)", +"c3b66bed": "getProposalVotersCount(uint256)", +"c3b6f939": "mToken()", +"c3b7572c": "updateCommission(string,uint8,uint8)", +"c3b75b8f": "setLockProductActiveState(uint32,bool)", +"c3b7e378": "startTimeStage2()", +"c3b8bfe5": "transferIfNoHF(address)", +"c3b909d7": "progressiveId()", +"c3b91d15": "AiBank()", +"c3b9741b": "ModifiedCrowdsale(uint256,uint256,uint256,address)", +"c3b9e2ed": "powerWithModulus(uint256,uint256,uint256)", +"c3b9f21e": "p4()", +"c3ba2368": "transferERC721(address,string)", +"c3ba65e7": "totalChicken()", +"c3ba7574": "mintForFund(address)", +"c3ba938d": "JPY_Omnidollar()", +"c3bb68cf": "weisPerEther()", +"c3bb8feb": "releaseSell(uint256)", +"c3bcb586": "soldKeys()", +"c3bd0bae": "CapLevelPrice()", +"c3bdc16f": "setUserRole(address,bytes32,address,uint8)", +"c3be259f": "ConnectiusToken(uint256)", +"c3be3c24": "_updateTopUpAvailable()", +"c3be6e8d": "SetStartTimeTLP1(uint256)", +"c3be8df3": "addAff(uint256,bytes32)", +"c3bea9af": "createGen0Auction(uint256)", +"c3bf32e3": "numberOfHeroClasses()", +"c3bf504a": "extractEth(uint256)", +"c3c0198c": "getAssesByOwner(address)", +"c3c0befb": "dumpPrize()", +"c3c132b2": "_indexProofId(string)", +"c3c1d4c7": "withdrawTokensTo(address)", +"c3c2686c": "preSaleWallets(uint256)", +"c3c2f066": "block(bytes32)", +"c3c357f9": "tokenSaleCompleted()", +"c3c5026c": "depositWEI()", +"c3c503b7": "becomeBankermaster()", +"c3c51aca": "cancelSellTokenOrder(uint64)", +"c3c563f4": "validateAmount(uint256)", +"c3c59aa9": "walletTimeOf(address)", +"c3c5a547": "isRegistered(address)", +"c3c5b40e": "setSaleAddr(address)", +"c3c63edc": "mintBadge(uint256)", +"c3c6e202": "indexLastThreads()", +"c3c6f0c9": "getCustomerTxTimestampPaymentKWh(address,bytes32)", +"c3c735cb": "BITDRIVE()", +"c3c74c45": "applyForCertification(string,string,address,string,string,uint256)", +"c3c75e5c": "setEditionPackSize(uint8,uint8)", +"c3c88a1d": "disableTransfer(uint256)", +"c3c8c12b": "setVipInfo(address,uint256)", +"c3c90e64": "checkReward(address)", +"c3c95c7b": "getMarket(bytes32)", +"c3ca3c6a": "SingularityTest3()", +"c3cad5e7": "senderMIT(address)", +"c3cb4159": "getICOBonus()", +"c3cb50ed": "setTileType(uint16,bytes32)", +"c3cb8c14": "finalizeVault()", +"c3cbc2c9": "offerSacrifice()", +"c3cbd341": "create(address,uint256,address,address)", +"c3cd9996": "CLASS_AQUATIC()", +"c3cdb4af": "getMinimeCheckpointSlot(uint256,uint256)", +"c3ceb939": "view58()", +"c3cfe00f": "EEB(uint256,string,uint8,string)", +"c3d014d6": "setContent(bytes32,bytes32)", +"c3d08f06": "setPermissionByAddress(uint8,address)", +"c3d0a20a": "NewToken(address,string,string)", +"c3d0a564": "getAccountBalance(bytes)", +"c3d23e10": "checkBet()", +"c3d2c355": "setKey(bytes32)", +"c3d32e56": "PixelCore()", +"c3d345c4": "getHangoutAddress()", +"c3d38586": "newCookie()", +"c3d4d75a": "getCommitHash(bytes32,address)", +"c3d54c9a": "paiementConfirmation(bytes32,bytes32)", +"c3d55adc": "calculateBuyGoldFee(uint256,uint256)", +"c3d58d95": "runICO()", +"c3d59369": "setIcoDiscountPercentages(uint8,uint8,uint8,uint8)", +"c3d5fd39": "getAdminInfo()", +"c3d68a85": "temporaryKill(address)", +"c3d69d03": "NatureX()", +"c3d7ad74": "sendPurchasedTokens(address,uint256)", +"c3d7e350": "removeAccount(uint256,address)", +"c3d8c099": "endICOStage5()", +"c3d97a27": "carsCount()", +"c3d9820d": "RefillOraclize()", +"c3d9c4b4": "share(uint256)", +"c3da42b8": "c()", +"c3da5153": "getEthartArtReward()", +"c3daab96": "withdrawBond(uint256)", +"c3dac9a1": "time_bought()", +"c3db397f": "unstakePartialContent(bytes32,uint256,uint256,bytes8,uint256)", +"c3db5ead": "Uruntest()", +"c3dc0083": "finishDeal(uint256,uint256)", +"c3dc1040": "orderInternal(uint256,bytes32)", +"c3dd2395": "maxCapEur()", +"c3de1ab9": "gamePaused()", +"c3de7cbf": "checkRedemptionWindow(uint256,uint256)", +"c3ded82a": "toUint96Throw()", +"c3dee67f": "updateAllHoldersShareInfo()", +"c3defb70": "changePause()", +"c3df99b6": "upvoteComment(bytes32,bytes32,bytes32)", +"c3dfb938": "countFortunes()", +"c3dfbeea": "migratePresaleBalances(address,address,address[])", +"c3dfdae6": "gameToken()", +"c3e017c2": "dNextStage(uint32)", +"c3e053ac": "percentBuyBackTypeTwo()", +"c3e06be9": "changeReceiveWallet(address)", +"c3e0ae67": "future_round_percentage()", +"c3e0bbad": "getContentByName(string)", +"c3e1d25c": "percentsOfProjectComplete()", +"c3e2087c": "setManagementCompany(string)", +"c3e27948": "setTrueUsdFastPause(address)", +"c3e2f26e": "icoedAmount()", +"c3e38ae9": "setSEKU(uint256)", +"c3e3908c": "get_pre_kyc_bonus_numerator(address)", +"c3e3c7bc": "teamTokens()", +"c3e50027": "dealConfirm(uint256)", +"c3e58eec": "blackListSectorExists(uint8[])", +"c3e6ea31": "BONUS1()", +"c3e8fb40": "smartToken()", +"c3e92f9e": "DrawLottery(string,uint256)", +"c3e93fa3": "depositHelpe(uint256)", +"c3ea0fca": "promoEthCommission()", +"c3ea901d": "uint2ToStr(uint256[2])", +"c3eb0723": "LogNewSecurityToken(string,address,address,address,uint256,uint8)", +"c3edb4c2": "finalizeChangeInsuranceFees()", +"c3ee6311": "lockAndCall(string)", +"c3eed29a": "reinvest(uint256,address)", +"c3ef473c": "ShareHolderVoted(address,uint256,bool)", +"c3ef586a": "Gambit()", +"c3ef83fc": "executionTimeOf(uint256)", +"c3f010f7": "numGames()", +"c3f03fb8": "querySpecialRateForAddress(address,address)", +"c3f07ba7": "addTokenAddresses(address[])", +"c3f0dad9": "isGenerator()", +"c3f17ae8": "getAmountToIssue(uint256)", +"c3f1a710": "getInvestment()", +"c3f1b0ea": "changeRequest(bytes32,bytes32,bytes32,string,bytes32,bytes32,uint256)", +"c3f3310b": "tokensOfFounder(address)", +"c3f34a50": "Dao(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"c3f3b854": "maxNumBets()", +"c3f44c0a": "relayMetaTx(uint8,bytes32,bytes32,address,bytes,address)", +"c3f51fca": "initMintable(address,address,uint256,uint256)", +"c3f53e94": "ownerClaimTokensAndRefundForUser(address)", +"c3f59687": "transferMastership(address)", +"c3f6263f": "charityCutOf(uint256)", +"c3f67cde": "withdrawSecond()", +"c3f6e09c": "sendOnlyHash(string)", +"c3f7ec97": "addLog(bytes)", +"c3f7f169": "safeSend(uint256)", +"c3f843d7": "minVeriAmount()", +"c3f84c05": "retribution(uint256,address)", +"c3f90202": "f4()", +"c3f909d4": "getConfig()", +"c3f9409f": "signBitcoin(bytes32,uint8,bytes32,bytes32)", +"c3fa4f27": "sendPowerToken()", +"c3fa5f93": "BlockScheduler(address,address)", +"c3fb31a4": "coolDungeon()", +"c3fb5e5f": "createVestFundFor(address,uint256,uint256,uint256)", +"c3fb90d6": "_storage()", +"c3fbc632": "ICORunning()", +"c3fc4787": "finalizeFork()", +"c3fdbef8": "totalInSharedPool()", +"c3fe3e28": "game()", +"c3ff05d1": "getBoxCountZIndex(uint8)", +"c3ff3878": "checkForValidChallenge(address,uint256)", +"c401a2a3": "destroyforproduction(uint256)", +"c401d6b0": "totalTokensToSupply()", +"c4021c13": "topupEnergyByToken(address,uint256,uint256)", +"c4026d7b": "removeDev(address)", +"c402e446": "Express_Satisfaction_MediatedTransaction(uint256)", +"c403adc8": "changeInSale(bytes32,bytes32,uint256)", +"c403cf6d": "RESERVED_TOTAL_AMOUNT()", +"c403f90f": "airdropTime()", +"c4041bc5": "viewauction(uint256)", +"c4043465": "MYEXCTOKEN()", +"c404b3f6": "currentTranche()", +"c4052559": "haraKiri()", +"c4052a78": "airLiftPrice()", +"c4057e61": "getData_4()", +"c40580de": "removeOwners2()", +"c405b1f0": "addJob(address,uint256,uint256)", +"c405d30e": "send2marketing(address,address)", +"c405e11b": "_addAnswerToHistory(bytes32,bytes32,address,uint256,bool)", +"c4069caf": "getPlayersByTrackId(uint256)", +"c406d4af": "getPixelToken(uint24)", +"c407670f": "donorCount()", +"c4076876": "pay(address,uint256)", +"c407c6d8": "chop(string)", +"c4085bf6": "_sell(address,uint256,bytes)", +"c4086893": "getLockedBalance(address)", +"c408efba": "isMigrationPhaseOpen()", +"c40940f4": "pricePerUnicorn()", +"c409ad08": "exec(bytes,bytes,address[])", +"c40af29f": "tokenTeamSupporter()", +"c40b276b": "hasString(string[],string)", +"c40b4c4d": "minSumPreICOUSD()", +"c40b716c": "setLLV_edit_14(string)", +"c40b8868": "changePresale(address,uint256[])", +"c40b8dcf": "usdToHavPrice()", +"c40bdc05": "_requestLoans(address,uint256)", +"c40cf4eb": "memberContract()", +"c40d19a5": "getAddressSize()", +"c40d4163": "ArthToken(uint256)", +"c40d62fe": "OrpheusBlockChainCitySiam()", +"c40dc8ec": "deadline(uint256)", +"c40fdc94": "Delisted(uint256)", +"c40fec3a": "forceOffsetExecuteFeeRate()", +"c4109843": "OrdersMatched(bytes32,bytes32,address,address,uint256,bytes32)", +"c4109d48": "baseTokensAllocated()", +"c411e4d4": "canCancel(uint256)", +"c4128b6d": "upgradeCount()", +"c4130ae0": "registerEvent()", +"c413af2e": "setPreICOPhase()", +"c413fdf3": "testPayout()", +"c414dede": "tablets(address,uint256)", +"c41518f2": "luckyYouToken()", +"c41559bb": "ETHbalanceOf(address)", +"c415b95c": "feeCollector()", +"c4163518": "isMining(address)", +"c4164365": "investBalanceMax()", +"c4166ea8": "OBGAllocation(address)", +"c416a0d7": "emergencySetBBFarm(uint8,address)", +"c41728a7": "sectorOwnerCut()", +"c4173548": "preSaleRaised()", +"c417becd": "RCToken()", +"c4184def": "BCBToken()", +"c418c8c9": "TradeToken(address,string,string,uint256,uint256)", +"c418c93e": "addOnStage(address,uint256,uint256)", +"c4198161": "setParameters(address,uint256)", +"c41a360a": "getOwner(uint256)", +"c41a9892": "bet2()", +"c41a9dfe": "has_joined()", +"c41addb5": "newModerator()", +"c41b0ae7": "getNumberOneArg(address,bytes4,address)", +"c41c19dc": "trackContributions(address,uint256)", +"c41c33af": "submitChallengeOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"c41c3bde": "setBuyingTime(uint256,uint256)", +"c41c9a61": "transferERC20Tokens(address,address,uint256)", +"c41e1d4f": "MAX_NUM_NAVITOKENS()", +"c41efe08": "getBestSale(bytes32)", +"c41f48a3": "DinosaurFarmer2()", +"c41f4cc0": "takerStatus(address)", +"c41f9482": "getDateTime(uint256)", +"c41fbbb5": "addFounder(address,uint256,uint256)", +"c420928d": "EncryptoTelToken()", +"c420f7fe": "getPlayerShipModelById(uint64)", +"c421249a": "sui()", +"c4215398": "publicSaleAddress()", +"c4218d33": "oraclizeBalance()", +"c421fa8e": "updateCrowdfundState(uint256,address,uint256)", +"c421fc6b": "currentStageData(uint8)", +"c422293b": "finishIssuance()", +"c422d09b": "ConfirmOwner()", +"c422ed19": "addFreeBet(address,uint256)", +"c4236cdc": "catchStarters()", +"c4254c7b": "CoreWallet()", +"c4255d61": "addZeroTest()", +"c4259e2e": "changeOwnerInfo(uint256,uint256,string,string,string,string)", +"c4264738": "refundSafe()", +"c426b1e5": "showDepositEther(address)", +"c426c3e2": "getExtendedAttributesForPlayer(uint256)", +"c426fbb6": "setCrowdsaleStartBlock(uint256)", +"c4270574": "userRollDice(uint256,address)", +"c42791ae": "setBountyOwner(address)", +"c427a68b": "ExtremeSetupToken()", +"c427af9b": "outcomeAmounts(address,int256)", +"c427e699": "getContractsOf()", +"c42882e3": "getEarlyAccessKitsRemaining()", +"c42890b6": "setCastleContract(address)", +"c4290b76": "getAmountWithdrawal(address,bytes32)", +"c42956d3": "nextExchangeRateIndex()", +"c4298f89": "ACL(address)", +"c429e4a3": "TEAM_ALLOWANCE()", +"c42a0716": "erc20(string,string,uint256,uint256)", +"c42b372d": "openAutoFree(address)", +"c42b5fe1": "registerExternal()", +"c42bb1e4": "contract_eth_value()", +"c42bd05a": "newToken()", +"c42c237a": "CortexCoin()", +"c42c9905": "register(bytes20,uint32,int24[4],int24[4],uint32[4],bytes32[])", +"c42cb819": "goldBoxAmountForSale()", +"c42cce7e": "total_tickets()", +"c42cd8cf": "etherSplit(address,address)", +"c42cf535": "setGovernor(address)", +"c42e04c0": "etherOne()", +"c42e1ace": "TKP()", +"c42ed894": "getRoundTargetBlock(uint32)", +"c42edd61": "payFeesToggle()", +"c42edf88": "leveRage()", +"c42f61d3": "RhodoToken(address)", +"c42fd368": "RateChanged(address,uint256,uint256)", +"c4305a55": "windowBonusMin()", +"c430bcda": "whitelistInvestor(address)", +"c43147c1": "InitializeManifesto(string,string,uint256,bool,bool)", +"c43148ca": "makeProposal(string,uint256,uint256,uint256,uint256,address,address)", +"c4319bd8": "AgreementHashEn()", +"c431f885": "addToContribution()", +"c4321adb": "investInTheSystem(uint256)", +"c4329ae5": "totalChangedPixels()", +"c433793d": "removeWhiteListedAddress(address)", +"c433e8ca": "remainMintTokenAmount()", +"c4342252": "latestScheduledUpdate()", +"c434650c": "_checkOrder(address)", +"c4359c1b": "marketSeeds()", +"c435ae0c": "setMaxGoal(uint256)", +"c435d26f": "GREMToken()", +"c435d2ac": "publishedTokenOfOwnerByIndex(address,uint256)", +"c435d68e": "numberOfContracts()", +"c4366149": "optionBalance(bytes32,address)", +"c4373c05": "tickRequiredLog(uint256,address,uint256)", +"c43782e0": "ZipToken()", +"c437b951": "BytechTechnology()", +"c43821aa": "issuanceCurrentBalanceSum(address)", +"c43823e1": "jsonKeyExists(string,string)", +"c4387936": "edgePigmentB()", +"c439af4f": "WAVEliteToken()", +"c43a6a79": "returnsTwoNamed(uint256,uint256)", +"c43aa319": "startTime_()", +"c43ae983": "GROWTH_BUMP()", +"c43b7934": "stagePrice(uint256)", +"c43bb538": "requestOwnershipTransfer(address,bytes32)", +"c43c633b": "traderBalances(address,address)", +"c43c9e12": "addTokenAdmin(address,address)", +"c43d0575": "scheduleCall(bytes4,uint256)", +"c43d56bb": "changelp4(address)", +"c43d9ac9": "TCETest()", +"c43e0e72": "_withdraw(address,address)", +"c43e9462": "getRoundNumber(uint256,uint256)", +"c43eb0e0": "getAvatar(bytes32)", +"c43ed2c8": "update(bytes)", +"c43f22c4": "isInvestorAllowed(address)", +"c440008e": "foundersFund()", +"c4400ed4": "getProfit(uint8,uint256)", +"c4405fa7": "_getMaxRarityChance()", +"c44088fd": "rewardUnitsRatePerYear()", +"c440e875": "dedeNetworkAddress()", +"c44193c3": "offerPunkForSale(uint256,uint256)", +"c44237dc": "EventUpgradeShip(address,uint32,uint8)", +"c4426a88": "arbitrate(address,address,bytes32,bool)", +"c44299c7": "preAlphaPrice()", +"c4432f31": "P3DAddress()", +"c443a99a": "MicoinNetworkToken(uint256,string,string)", +"c44412e3": "revokeBonusCreditOf(address,uint256)", +"c4453bd0": "getPlayerMinions(uint32,uint8)", +"c4454980": "fundManually(address,uint256)", +"c4457e47": "load(uint8[],uint256,uint256,uint256,bool)", +"c445e2ef": "RedPillToken()", +"c4468f69": "setNewPotWinner()", +"c4477a11": "Banknote(address,uint256)", +"c4479812": "batchMultipleAmount(address[],uint256[])", +"c44828be": "totalAllowance(address,address)", +"c4489110": "BUYOUT_PRICE()", +"c448fa85": "isExtraDistribution()", +"c44a2a10": "ownerCredited()", +"c44b0290": "setLockPostion1(address,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8,uint256,uint8)", +"c44b10d9": "payoutOdds()", +"c44c2efd": "burnPLUTUSTOKEN(uint256)", +"c44cb8fc": "viewTotalPayoutToPlayer(address)", +"c44cd4df": "sendReaction(address,int8,string)", +"c44ced7e": "ozr()", +"c44d36ee": "protectedTransfer(address,uint256,bytes32)", +"c44d6f87": "PAPER()", +"c44dcaca": "draw(uint256,address,uint256)", +"c44e6640": "getAuctionCount()", +"c44e787f": "sideBetPay(bytes32)", +"c44f7864": "getRemainingTimeInSecond()", +"c450a08a": "queryLockedTokens(address)", +"c450a25f": "unfreeze_contract()", +"c450d98b": "getCommunityReputation(address)", +"c4522c92": "removeStaff(address)", +"c45250c8": "icoRound3()", +"c45330b4": "remainingTotalBonuses()", +"c453cdd4": "getMyVines()", +"c4543386": "TUIToken()", +"c4545e6d": "_replaceModule(address)", +"c4552791": "proxies(address)", +"c4561d61": "finishICO()", +"c456354e": "setEndTimeStamp(uint256)", +"c4569504": "getKudosOf(address)", +"c456d394": "getPixelPrice(uint256)", +"c4576525": "WEC()", +"c457fb37": "getTokenPrice(uint256)", +"c45849c2": "doDistribution(uint256,address,uint256)", +"c458e5f3": "CrowdForceTestToken()", +"c4590d3f": "setLimits(uint256,uint256)", +"c4596419": "mintSoldTokens(address,uint256)", +"c45982b9": "madd(uint128,uint128)", +"c459b003": "ATTR_PERMANENT()", +"c459b9e3": "MaxStarIndexAvailable()", +"c45a0155": "factory()", +"c45a4047": "batchTrasfer(address[],uint256,uint256)", +"c45a6f98": "unlockMultiple(address[])", +"c45aa04c": "queryShareholders(bytes,uint256)", +"c45ad06a": "etherSince50()", +"c45b415e": "createRequest(address[4],address,uint256[11],uint256,bytes)", +"c45bb448": "MIX()", +"c45c4f58": "balance1()", +"c45cda5a": "init_fund()", +"c45d19db": "tokensToBeReturned(address)", +"c45d32cf": "getRemainingBytesLeadingZs(uint8,bytes)", +"c45d3d92": "conversionWhitelist()", +"c45d5fcb": "TwoStageCrowdsale(uint256,uint256,address)", +"c45d8af4": "getWinIndexFromHash(address,bytes32)", +"c45d8c8b": "Gryphon()", +"c45ddd87": "targetDiscountValue4()", +"c45df8e5": "COSIGN_MAX_TIME()", +"c45e4a7b": "SwiftDex()", +"c45ec88c": "Put(bytes32)", +"c45ef547": "offlineDiscipleSold(uint256,address,uint256)", +"c46073f7": "LUCYD()", +"c46093de": "_0xMonacoinToken()", +"c46180a7": "setBalanceOfActiveToken(address,uint256)", +"c461889e": "OkLive(uint256,string,string)", +"c4618978": "MIN_INVEST_ACTIVE()", +"c4620549": "quaker(address)", +"c4626ea7": "PumpHodl()", +"c4628520": "cashoutEOSBetStakeTokens(uint256)", +"c462a408": "maxParticipantCount()", +"c462bd11": "setupRules()", +"c46362fd": "set_merge_mint_threshold(uint256)", +"c463a1af": "CapitalMatchToken()", +"c463b008": "triggerTransferEvent(address,address,uint256)", +"c464fe65": "sellTokens(address,uint256)", +"c465e742": "UpdatedTokenInformation(bytes32,bytes32)", +"c466313c": "GetMainSale()", +"c4664649": "FIXEDREWARD_MM()", +"c4666fab": "transferNodeContractOwnership(address)", +"c467706d": "startEarlyAdopters()", +"c467a317": "freezeTeam()", +"c467b0ff": "_play(uint256,uint256,uint256,uint256,uint256)", +"c4694ec6": "ecoSupply()", +"c4697667": "BONUS_WL()", +"c469eb99": "deleteFromWhiteList(address,address)", +"c46a23a2": "signedAverage(int256,int256)", +"c46a2925": "setMinApprovalCount(uint256)", +"c46a3a0d": "icoPhase1EndTime()", +"c46a6262": "playEtherOf()", +"c46aaf38": "PharmaGenome()", +"c46b2d9d": "denyBundling()", +"c46b644b": "NewTicketEvent(address,uint8,uint8,uint8)", +"c46c3c68": "RuffToken()", +"c46cacae": "initial_time()", +"c46ce53e": "getOneTotalFeesCollected(uint256)", +"c46d2235": "serverEndGameConflictImpl(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,bytes32,bytes32,uint256,address)", +"c46d4cf1": "thawAccountTransfers(address)", +"c46df008": "walletData(address)", +"c46e3e85": "unitGooProduction(uint256)", +"c46e614a": "isCMCT()", +"c46ed45a": "fee_percentage()", +"c46f3e25": "lastChanceEnabled()", +"c4701037": "aaa(bytes)", +"c47028c1": "TOKEN_RATE_CROWDSALE()", +"c47031ab": "getKarma()", +"c470ff6d": "getInsideCallCount()", +"c4716d0f": "contributedCap(address)", +"c4725577": "getPrice(uint256,uint256,uint256,uint256)", +"c472c7e6": "setTotalWithdraw(address,uint256,address,bytes,bytes)", +"c4735121": "thirdRoundTime()", +"c4740a95": "removeAccount(address)", +"c4749079": "_roundDivision(uint256,uint256,uint256)", +"c4749bbd": "showInvestBalance()", +"c474e70a": "returnFundsForMultiple(address[])", +"c4752773": "priceStep3()", +"c475abff": "renew(uint256,uint256)", +"c475cdf5": "issueNew(uint256)", +"c476dd40": "reportMalicious(address,uint256,bytes)", +"c477d234": "checkIfAlreadyOrderedForDay(uint256,address)", +"c4784fd4": "setMsg(string)", +"c4788efe": "resetTotalVotes()", +"c478b52f": "PLATINUM_AMOUNT_TPT()", +"c478fc37": "EtherWheel(uint256,uint256,uint8)", +"c4791421": "changeCooldownEndTime(uint40,uint40)", +"c47958e2": "ERC20(string)", +"c479ace6": "updateOwners(uint256,address,address[],uint256,uint8[],bytes32[],bytes32[])", +"c47af5cf": "ChangeCost(uint256)", +"c47af732": "setReserved(address,bool)", +"c47bc007": "add_funds()", +"c47c4cc7": "getInitialBalanceByAddress(address,address)", +"c47cf5de": "getAddress(bytes)", +"c47d5bb8": "unitsUserCanBuyLimitEth()", +"c47e7bcb": "softcap3Reached()", +"c47e951f": "adjust_eth(uint256)", +"c47e9fea": "ContributionRefund(uint256,address)", +"c47ef875": "activeTokens()", +"c47f0027": "setName(string)", +"c47f0f90": "getPurchases()", +"c47fae76": "autoPlayBot()", +"c47fc244": "grantInvestorsTokens(address[])", +"c48029d4": "AddTokensToMember(address,int256)", +"c4806df4": "createTokenOwner()", +"c480e583": "revertTransfer(address,uint256)", +"c4811a0e": "maxICOThirdSupply()", +"c4813b2c": "StgOnebonusEnds()", +"c4815c96": "teamAdvTokens()", +"c4818ae1": "joinPillar(uint256,uint8,uint256)", +"c4818cdc": "_balanceOf(address,address)", +"c482299f": "transferAUTOtokens10(address[])", +"c482ceaf": "reinit()", +"c4834c30": "teamTotalSupply()", +"c483b71c": "Map(address)", +"c483befa": "setParameters(address,string,string,string,address,uint256,uint256)", +"c4841369": "paymentsByPurchaser(uint128)", +"c4843365": "getRarity(uint32,uint256)", +"c48513a4": "getStringConstant()", +"c485297b": "HelloSystem()", +"c48590e9": "PARTNER_SUPPLY()", +"c485ac95": "setWalletForTokens(bytes32,address)", +"c486301b": "AcceptsExchange(address)", +"c4864f45": "changeAcceptExchange(bool)", +"c4868452": "preIcoActive()", +"c486d133": "round1InitialBonus()", +"c4871039": "totalWeiRaisedDuringPhase2()", +"c4882e44": "disableRound0()", +"c488847b": "liquidateCalculateSeizeTokens(address,address,uint256)", +"c488d6f2": "stopOffering()", +"c489744b": "getTokenBalance(address,address)", +"c489a649": "updateAirdrop(address)", +"c48a0dc0": "OptionToken()", +"c48a3cbf": "setStackPtr(uint256)", +"c48a66e0": "transferTimelocked(address,uint256,uint256)", +"c48a7560": "sellScams(uint256)", +"c48b1cf0": "test_5_accessRestriction_addMember_shouldThrow()", +"c48c68ee": "addressFounders4()", +"c48d5a4a": "_buy(uint256,uint256,uint256,address,uint256)", +"c48d93d8": "JuraToken(uint256,string,string)", +"c48d99ca": "DataDumped(address,string,bytes32)", +"c48db366": "Africacoin()", +"c48dc5fb": "JackpotAwarded(uint256,address,uint256)", +"c48e1c4d": "importAddresses(address[],address[])", +"c48e5ec4": "getPurchaseDetail(uint256,uint256)", +"c48e819c": "test_openRegistry()", +"c48eabc0": "getContributionPool()", +"c48ef17c": "floorId()", +"c4909a70": "addConfig(bytes32,bytes32)", +"c490a266": "toUInt(bytes)", +"c490dfa6": "isVerifiedAddress(address,address)", +"c491fd18": "FlexibleTokenSale(address,address,uint256,address)", +"c493afcf": "closeRefund()", +"c494a080": "totalPlayer()", +"c494c3dc": "hashParent(uint256,bytes32,bytes32)", +"c494c3f7": "teleportKnight(uint32)", +"c494f71a": "LedgerFund(uint32,uint32,uint64,uint64)", +"c49589bb": "rateUSDcETH()", +"c4969b8f": "setSellerAndAmt(address,uint256)", +"c4977807": "getFrozenAccount(address)", +"c4983c65": "updatePoints(address)", +"c498fcfd": "getUnitDefenseIncreases(address,address,uint256)", +"c49a1ede": "updateShareValue(address,uint256)", +"c49a3b04": "OraclizeVerifier(address,string,uint256,uint256)", +"c49a8fc9": "secureUpdateOrderFunds(address,bool,uint128,uint128,uint128,uint128)", +"c49b94e9": "getTokenTxn(uint256)", +"c49c3635": "getEventOutcomeIsSet(uint256,uint256)", +"c49d3b9f": "memberData()", +"c49d9ff8": "chatMessages(uint256)", +"c49ee5b4": "finalUnpause()", +"c49f91d3": "EIP712DOMAIN_TYPEHASH()", +"c49fea77": "setVariables(uint8,uint8,uint8,uint8,uint256)", +"c49fef66": "maxAnimals()", +"c4a06710": "isKYCPassed(address,address)", +"c4a0dada": "getOtherName()", +"c4a13f23": "affiliateBonusPercent()", +"c4a1dfda": "viewFirstBatchOfClauses()", +"c4a1ee37": "gasLimitWithdrawConfirm()", +"c4a1fedf": "increaseWeeklyTransactionVolumeReceiving(uint256)", +"c4a2c6b4": "Partial23Send()", +"c4a2d664": "setTransferFeeMax(uint256)", +"c4a2e641": "confirmTransaction(uint256,bytes)", +"c4a2fe12": "setversion(uint256)", +"c4a31557": "packSaleAddress()", +"c4a381b8": "setTokenRate(uint32)", +"c4a4cb4e": "countMilk()", +"c4a4e267": "weaponToApproved(uint256)", +"c4a4f265": "minimalContribution()", +"c4a50433": "unprocessedProfits()", +"c4a5350d": "createNewContract(string,string)", +"c4a5b138": "approved(address,uint256,address,bytes)", +"c4a796c1": "setReferee(address)", +"c4a8158c": "getMyTurtle()", +"c4a8598e": "BANCOR_X()", +"c4a85bc1": "allowAccess(address)", +"c4a89e9e": "lengthOf(uint256,uint256)", +"c4a8a670": "getEvent(string,uint256)", +"c4a8b570": "setdteamVaultAddr3(address)", +"c4a942cb": "chunkSize()", +"c4a96758": "getByteFromByte32(bytes32,uint8)", +"c4a9e116": "stakeCount()", +"c4aa94a6": "withdraw(address,uint256,address[],uint256[])", +"c4ad32be": "generateTrees(uint256)", +"c4adb406": "validDestinations(uint256)", +"c4ae16a8": "getPlayerId(address)", +"c4ae3168": "togglePause()", +"c4b05f49": "addThing(string,string,string,string)", +"c4b06c19": "SeedSale(address)", +"c4b14e0b": "getSignature(bytes32)", +"c4b195ab": "r2(address)", +"c4b24a46": "checkReward()", +"c4b2841c": "_doTradeWithEth(address,uint256,address)", +"c4b293db": "getBuyRatio()", +"c4b296a7": "getInvestorIndex()", +"c4b2a668": "GlavCryptPoint()", +"c4b2eccb": "maxAmountAddresses(address)", +"c4b35f3d": "DIV()", +"c4b379f7": "earningsOfPlayer()", +"c4b3a516": "setPercentageAvailableToSell(uint256)", +"c4b40fb7": "tkcAddress()", +"c4b4dff1": "PayChain()", +"c4b54551": "MAX_SPARTANS()", +"c4b57df5": "createEscrow(uint16,address,address,uint256,uint16,uint32,uint32)", +"c4b5cde2": "EventBuyShip(address,uint16,uint64)", +"c4b5f891": "LTBToken()", +"c4b62bbb": "updateAddressSetting(uint256,address,address,string,string)", +"c4b67e8a": "generateReport2(int8[],uint32[])", +"c4b6b5fd": "initChallenge()", +"c4b6c2f3": "btcPriceProvider()", +"c4b6fec9": "sendVal()", +"c4b71cec": "ICO_LEVEL_1()", +"c4b781a8": "setPercentAllocationFee(uint256,uint256)", +"c4b7c4cf": "communityVote(bytes32,bool)", +"c4b80f6e": "incPlayerOwed(address,uint256)", +"c4b9223f": "setVestingSchedule(address,address,uint256,uint256,uint256,uint256,bool)", +"c4b9897b": "IagonToken()", +"c4baa573": "process2(bytes32,uint256[],bytes)", +"c4baf4a4": "IQT_FUNDATION_ADDRESS()", +"c4bb0173": "hash_sha3(string,uint256)", +"c4bc5da5": "resumeContract()", +"c4bc7b70": "setGlobal(uint64,bool)", +"c4bd10d9": "getPollOption(uint256,uint256)", +"c4bd8ebc": "num_monsters()", +"c4bde5e1": "totalLotteryNumber()", +"c4bebd69": "pauseLastStart()", +"c4bff124": "addBlacklistItem(address)", +"c4c0698d": "withdrawInEmergency()", +"c4c1b39a": "tokenPriceInitial_()", +"c4c1c94f": "add(address[])", +"c4c1d835": "DataAuction(address,address)", +"c4c22e98": "blockInterval()", +"c4c24249": "turnLast()", +"c4c2e702": "execute(uint32)", +"c4c308be": "getBeneficiaryCash()", +"c4c3718b": "satoshi_bth_decimals()", +"c4c39ba7": "SWAP_CAP()", +"c4c49380": "setCap()", +"c4c4a89b": "buyNewDrone(uint256)", +"c4c4d00b": "CRBTTokenLive()", +"c4c4e3c0": "GOLD_AMOUNT_SKL()", +"c4c4e438": "oraclize_query(uint256,string,bytes[3])", +"c4c50acf": "giftTokens(address,uint256)", +"c4c59c77": "ethIN()", +"c4c5f3de": "forecastingClosed()", +"c4c6710d": "buyTicket(uint256,uint256,uint256)", +"c4c676cf": "TRBToken()", +"c4c68b44": "getTotalSupplyForType(uint256)", +"c4c745b6": "getBonusFactor(address,uint256)", +"c4c842f7": "_emitJobBinded(uint256,uint256,bool)", +"c4c90d70": "withdrawHouseFee()", +"c4c90f4c": "tokenUsersSave(address)", +"c4cae886": "setManualTradingAllowed(bool)", +"c4cb291e": "unpaid()", +"c4cbb591": "compot()", +"c4cbd65b": "isTourUnfreezed(uint256)", +"c4cbfa44": "isConstructor()", +"c4cc161b": "SellSnail(uint256)", +"c4cc5616": "addStory(uint256,string)", +"c4cc6e53": "TgeOtherReleasingScheduleContract(uint256,uint256)", +"c4ccf6ea": "getAmountBonus(uint256)", +"c4cf8a40": "createTradeContract(address,address,uint256,uint256,uint256,bool,bool)", +"c4cf9385": "MetaMorph()", +"c4cfc5be": "PGE01NY()", +"c4d01481": "getPreRemainCoins()", +"c4d07951": "setVoting(address)", +"c4d18b18": "calculatePoohBuy(uint256,uint256)", +"c4d252f5": "cancel(bytes32)", +"c4d259ad": "setIsAdmin(address,bool)", +"c4d2783c": "GTTAirdrop(address,address)", +"c4d2b1b3": "getLoanData(bytes32)", +"c4d2bac9": "HelloToken()", +"c4d3926a": "currentTokenIdNumber()", +"c4d42292": "ResidualShare(uint256,string,string)", +"c4d4fdc0": "getBonusRateForTimeBased()", +"c4d66de8": "initialize(address)", +"c4d77090": "nodeAddresses(uint256)", +"c4d7b98f": "erc20ContractSwitch(address,address,uint256)", +"c4d8aa44": "VenaCoin()", +"c4d9102f": "setNextID(uint256,int256)", +"c4d97470": "PeriodReset(uint256,uint256,uint256,uint256)", +"c4daa2a6": "roundFees(uint256)", +"c4dbf622": "buyPrice(uint256)", +"c4dc1556": "finalizeProposal()", +"c4dcad1d": "mining(address,uint256)", +"c4dd3b33": "checkUserSignature(address,string,uint32,string,string,bytes32,bytes32,uint8)", +"c4dd5acc": "isLastBadgeEle(uint256,uint256)", +"c4dddedd": "addressVerified(string)", +"c4ded499": "getActiveBetsAmount(address)", +"c4df310a": "isWithinTokenAllocLimit(uint256)", +"c4e11c91": "updateStats(uint256,uint256)", +"c4e12e1d": "updateMinVotedTokens(uint256)", +"c4e16b7d": "whitelistToken(address,uint256)", +"c4e1793f": "_onOverTimeBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", +"c4e29e66": "getOrderHash(address,uint256,address,uint256,uint256,uint256,address)", +"c4e34d46": "lockBonusTokens(uint256,address,uint256)", +"c4e37095": "setSaleState(bool)", +"c4e3a63b": "firstPeriod()", +"c4e41b22": "getTotalSupply()", +"c4e5b7f2": "createAcceptAndPayFromBytes(bytes,address[],uint256[],uint256[])", +"c4e5fd83": "_safeTransferFromInternal(address,address,uint256,bytes)", +"c4e627c2": "maxTokenCount()", +"c4e6aaa6": "setLocationId(uint32)", +"c4e6c604": "otherAddress()", +"c4e7099f": "mockTime(uint32)", +"c4e71adc": "firstReleaseTime()", +"c4e7d14c": "MultiSender(uint256)", +"c4e85b63": "flushTokens()", +"c4e9311b": "bindJobWithBoard(uint256,uint256)", +"c4e98398": "SimpleRegistrar(bytes32,uint256)", +"c4e9e80b": "setAutoSell(uint256)", +"c4eaa978": "_price_token_ICO4()", +"c4eb2b3c": "putSaveData(address,address,string)", +"c4eb8ec2": "transfer_ether(address,uint256)", +"c4ecfbbe": "MonsterChampionship(address)", +"c4eeeeb9": "isReissuable(bytes32)", +"c4ef18fc": "setRentAuctionContractAddress(address)", +"c4ef92d3": "OmiseGOGold()", +"c4efa665": "decimalPrecision()", +"c4f06ba9": "makerOf(uint256)", +"c4f07cff": "getWithdrawTransactionIds(uint256,uint256,bool,bool)", +"c4f0a043": "BTCPrice()", +"c4f1215c": "maxGoalReachedAt()", +"c4f141ff": "setWeiPerCHF(uint256)", +"c4f14c9c": "restrict(address,address)", +"c4f161ab": "isWinner(address,address)", +"c4f1ce79": "clearCurPrize(address,uint256)", +"c4f2a64f": "blockWait()", +"c4f2a7af": "GeneScience(address)", +"c4f35d6c": "WithdrawalToken(uint256)", +"c4f363bf": "getVersionByte(uint256)", +"c4f3c097": "setBasicRate(uint256)", +"c4f54568": "blocktubeTag(string)", +"c4f5cd82": "firstAllocation()", +"c4f62031": "setPlayerPrice(uint256,uint256)", +"c4f7f1e2": "scaledRewardPerToken()", +"c4f8210e": "_safeTransfer(address,uint256)", +"c4f8adc7": "consul_nme()", +"c4f8b9fb": "testAdd(uint256,uint256,uint256)", +"c4f8f339": "getPercent4(address)", +"c4f95105": "showUnpayedPercent(address)", +"c4f987a5": "removeWorker(address)", +"c4f99aa5": "publicReservedAddress()", +"c4fa9c6b": "getReservedTokenDestinationList(address,bytes32)", +"c4faa950": "BrinkToken(uint256,string,uint8,string)", +"c4fbdaff": "gibLambos(uint256)", +"c4fc3a3b": "presaleTokenSupply()", +"c4fc89e1": "bubbled()", +"c4fce59a": "fourthExtendedBonusSalesEnds()", +"c4fd262a": "CrowdsaleStarted(uint256,uint256,uint256,uint256)", +"c4fda23e": "sellTokensIcoWithReferal(address)", +"c4fdc6b8": "pauseIco()", +"c4fe2675": "getProtoIdByTokenId(uint256)", +"c4fed7fb": "addHouseCredits(address,uint256)", +"c4ff3614": "Wallet(address[],uint256,uint256)", +"c5007227": "DTToken()", +"c500ea36": "userPendingCrateNumber(address)", +"c501024b": "setMinCutValue(uint256)", +"c5015018": "TEAM_MONTHLY()", +"c501825a": "WALK()", +"c501b87f": "setCreditMcAddress(address)", +"c503101e": "setCanClaim(bool)", +"c503772d": "returnUint8(uint8)", +"c503a868": "getTeamFee(address)", +"c5043343": "tempSetWinner(uint256,address)", +"c5044b62": "isDescriptionFinalized()", +"c50497ae": "SUPPLY()", +"c50499db": "developer_string_contract_verified(string)", +"c504bfb8": "ColorsMain()", +"c50508de": "initialAuctionDuration()", +"c505c82c": "zxcSold()", +"c505ebce": "endRate()", +"c506adae": "migrateInvestorsFromHost(uint256)", +"c5072172": "justThrow()", +"c50853f5": "getNumPublications()", +"c50886ae": "test_ConsensysNotReached()", +"c508d8f2": "reederemPeriods(uint256)", +"c5096a69": "feeFor(address,address,uint256)", +"c509c262": "TokenManager()", +"c509d0b2": "logCompleteSetsPurchased(address,address,address,uint256)", +"c509db3b": "getverifytime(address)", +"c50aea06": "claimShares(uint256,uint256)", +"c50bb446": "getNeutralMutation(uint32)", +"c50bd2e4": "trancheDenominator()", +"c50be063": "myPlanetList(address,uint256)", +"c50be16c": "setPublicRelease(uint256)", +"c50c44cf": "getAuctionSeller(uint256)", +"c50c97d0": "changeStorage(address)", +"c50cb9ae": "transferComplex(address,uint256,uint256)", +"c50d725c": "DACToken()", +"c50d847e": "POSC()", +"c50ec10a": "repoAppId()", +"c50f197b": "charitySplitPercent()", +"c50f8274": "IWasFirstServiceToken()", +"c50ff563": "canSubAllocation(address,uint256)", +"c510187e": "vpfHash(bytes32,uint256,uint256)", +"c5104c3d": "minPurchaseAmt()", +"c5105bb5": "TotalEDUSupply()", +"c510c906": "getEventOutcomeNumeric(uint256,uint256)", +"c510da62": "getsell(uint256)", +"c510db20": "userCanStillBuyEth(address)", +"c510dfeb": "convertAddressFormat(address[8])", +"c510f746": "createElection(bytes32,bytes32[])", +"c51131fb": "canBeSet(bytes32)", +"c511a362": "TransferTargetToken(address,uint256)", +"c511b016": "SingularDTVToken(address,address,string,string,uint256)", +"c511ed5e": "closeMarket()", +"c51215df": "preSaleListTime()", +"c51226b3": "secondStageMintingDate()", +"c5129348": "See_price()", +"c512d1d1": "testCalculateItemId()", +"c5132a5c": "getCreateMarketDesignatedReporterAddressValue()", +"c5133802": "mintFraCoins(address,uint256)", +"c5135ba0": "fuckynum()", +"c513cde2": "KD1Token()", +"c513d596": "BountyAdded(bytes32,string)", +"c513f66e": "EMPTY_PARAM_HASH()", +"c51450ca": "getTokenIdAtIndex(uint256)", +"c514ff3f": "EasticoinToken(uint256,string,string)", +"c515205d": "getValue2()", +"c515627e": "depositEther(address,uint256,uint256,uint256)", +"c5160187": "mintStart4()", +"c5162e1a": "vendre(uint256)", +"c516358f": "bountyAddress()", +"c5179027": "team0Points()", +"c518123a": "financingPeriod()", +"c519099d": "teamAndFounders()", +"c519500e": "potSplit_(uint256)", +"c51a29e0": "getContractType()", +"c51be90f": "query_withGasLimit(uint256,string,string,uint256)", +"c51bf934": "CEILING()", +"c51cc592": "setTransferAllowance(bool)", +"c51cd5d6": "StarWarsRTscore()", +"c51cd6ad": "getLockAccount(address,uint256)", +"c51ce17b": "TelegaOut(address)", +"c51cf179": "calcBaseFeeForShares(uint256)", +"c51d16b6": "totalCollectedWei()", +"c51dc993": "expiryCheck(string)", +"c52046de": "isDeployed()", +"c5210e89": "ERC20Standard(uint256,string,uint256,string,bool)", +"c52141da": "checkSign(address)", +"c52164c6": "reputation()", +"c52173de": "xConvert(address[],uint256,uint256,bytes32,bytes32,uint256)", +"c5231563": "addAddress(uint256,address)", +"c523d5dd": "setBlockPart(uint64,uint64,uint64,bytes32,bytes)", +"c523ef11": "VNDCash(uint256,string,uint8,string)", +"c5241e29": "removeWhitelisted()", +"c5242acb": "setWithdrawOwner(address)", +"c524645b": "getTimeBonusAmount(uint256)", +"c527018b": "jdalevsystemscoin()", +"c527326e": "PFOffer(address,address,bytes32,uint256,uint256,uint128)", +"c5277ddd": "isPublisherRegistered(address)", +"c5282f7a": "generateTokensForPresaleAccounts(address[])", +"c528fee7": "DRCToken()", +"c5292c67": "getStart()", +"c5292ed9": "calculateEggSell(uint256,uint256)", +"c52987cf": "strikePrice()", +"c529b80b": "transferWithData(address,uint256,bytes32)", +"c52ab778": "execute(address,uint256,uint256)", +"c52adfda": "BobsNVag()", +"c52ba8b6": "addCrowdsales(address,address)", +"c52bd836": "setDappOwner(bytes32,address)", +"c52c936c": "removeByIdx(uint256[],uint256)", +"c52cb003": "OwnerDistribSupply_()", +"c52cde58": "getRedeemableTokensVoter(bytes32,address)", +"c52ce9be": "basicTransferFromTest(address)", +"c52e40d0": "totalWeiExpected()", +"c52f02ce": "BLS_PRE_ICO()", +"c52f9fa6": "PartialOwnershipCrowdsale(uint256)", +"c52fd6fa": "exTx(uint256)", +"c5312191": "WeiController(address,address,address,uint256,bool)", +"c531c245": "exists(int256)", +"c531d52b": "STRUTToken()", +"c5337992": "setBossHPDefault(uint256)", +"c5337ed4": "random2()", +"c5339132": "lastPlayed()", +"c533fc68": "getLockAccInfo(address)", +"c5340dcd": "received_wei_with_bonus()", +"c53467cf": "releasePublicPresaleBonusTokens(address[],uint256)", +"c5346fb1": "approve_coin(string,bool)", +"c534ba4b": "destroyBlacklistedTokens(address,uint256)", +"c5350345": "Magexbit()", +"c535165f": "revealAndPayout(bytes,bytes)", +"c5364bc3": "GetChallengeWeightedVolumes(uint256)", +"c536c952": "getDsitribute(address,uint256)", +"c536ed5f": "buyDmlCoin(address)", +"c537a210": "principalOutstanding()", +"c537f954": "adjustDeployRange(uint256,uint256,uint256)", +"c53833fe": "getLastContract()", +"c539607c": "get_internal_block_number()", +"c53a0292": "increaseNonce()", +"c53abe29": "tokenOnlyDeploymentCost()", +"c53ad76f": "Kardashian()", +"c53adaff": "SingularDTVWorkshop()", +"c53b12f9": "myEthBalanceOf()", +"c53b4252": "getpatient(uint256,uint256)", +"c53b9c04": "maxTimeRemain()", +"c53bafbb": "setPriceOf(string,string,address)", +"c53c2556": "getTokenIdFrombBPhash(string)", +"c53c614d": "canBeWhitelisted(string)", +"c53ce034": "totalDraw()", +"c53d6ce1": "getAllBalances(address)", +"c53d8483": "getActualTotalTokens()", +"c53dbf82": "disclosureAdded(uint256,bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"c53df200": "getArrUintField1()", +"c53df937": "unshareService(bytes32,address)", +"c53e4387": "IHODLToken()", +"c53ee3a5": "_setInitialCardPrice(uint128)", +"c53f926b": "setByuoutActive(bool)", +"c53fc65f": "tokensDevelopers()", +"c53ffe66": "KillerWhale()", +"c5401559": "setQuantityAdminOnly(uint256,uint256)", +"c5405f17": "registerUserBonus(address,address,address)", +"c540f903": "DeployRelay()", +"c540fb66": "updateBuyNum(bytes32,uint8)", +"c54110d6": "AcceptsNASDAQ(address)", +"c54117ac": "REDGILL()", +"c54124be": "sub()", +"c541783c": "getLockedBalanceOf(address,address)", +"c541a5bd": "revertAML(address)", +"c5426124": "getStar(uint256)", +"c542675e": "fus(uint256)", +"c54397a4": "changeAffiliate(address,uint256)", +"c543ae53": "evaluateArea(address,uint8,uint256)", +"c543b427": "IntegrationOfCredit()", +"c543c922": "devWithdraw(uint256)", +"c54421ae": "teamTokensNotDistributed()", +"c5442f7d": "getRandom(uint16,uint8,address)", +"c5444ff9": "buyTokens(address,uint128,uint256)", +"c544682b": "rewardForBurn(uint256)", +"c544f8d9": "EventRemoveFromBattle(address,uint64)", +"c5454d11": "Finalize()", +"c545c09d": "calculatePrice(uint256,uint256,uint256,address)", +"c5460e71": "getReleasableAmount(uint256,address)", +"c5465a23": "votingstage()", +"c546a92e": "testTransferTokensUsingRawCall()", +"c54704e6": "setLockStartTime(uint256)", +"c547092b": "setMilestone(uint256)", +"c547af82": "_totalVouchersSupply()", +"c547d8f1": "totalWeiAmountSale3()", +"c547e14d": "setHatchDurationByTimes(uint32[])", +"c54837a4": "extinguish()", +"c5487661": "proxyTransferToICAPWithReference(bytes32,uint256,string)", +"c5494b82": "SCH()", +"c5495b54": "replaceAssetManager(address,bytes32)", +"c5498e4e": "setTeamAndAdvisorAndAirdropAddresses(address,address,address)", +"c54996b7": "refundBond(uint256,address)", +"c549e4e9": "sellPriceAt(uint256)", +"c549e6b9": "DAYS()", +"c549e7a0": "ManualTokenMintRequiresRefund(address,uint256)", +"c54a068c": "getCurrentRateInternal()", +"c54a0980": "Total_Entries()", +"c54b25b0": "claimCancelled(uint16,address)", +"c54b5658": "toAddress(bytes,bytes,uint256)", +"c54c80eb": "RxPharma()", +"c54cd39c": "getSandwichInfoCaloriesPrice(uint256)", +"c54d51d4": "popDecoration()", +"c54d59a1": "snt_claimed(address)", +"c54d8609": "setCoOwner2(address)", +"c54e73e3": "setPresale(bool)", +"c54e91c6": "currentPart(address,address)", +"c54f050c": "_createOrder(address,address,uint256,address,uint256,uint256,uint256)", +"c54f3409": "getGameEnd(address,uint256)", +"c54f5344": "OfficialWalletAddr()", +"c5503e89": "allocateTokensInternally(uint256)", +"c5505235": "toEther(uint256,uint256,uint256)", +"c550eb56": "isOrderExist(uint64)", +"c5526d16": "setCrowdsaleWallet(address)", +"c5530077": "wildcards(uint16)", +"c55374d0": "oraclizeDelay()", +"c55425e6": "TotalOwnerSupply()", +"c5543b22": "powerDayPerPersonCapInWei()", +"c5546ecd": "transferTokensToParticipants(uint256,uint256,uint256,uint256,address)", +"c5549cc0": "minDeadline()", +"c554a600": "initTokenPorter(address,address)", +"c5566dac": "getNumberOfCourse()", +"c5575ef0": "checkTransferFrom(address,address,uint256)", +"c557b985": "icon()", +"c557d29c": "ByteLocker()", +"c557e552": "_getWager(address)", +"c558ae6b": "Airdrop(address[],uint256[])", +"c5590033": "setStatus(string,string)", +"c5592be2": "addContract(string,address,address)", +"c559743a": "included(address)", +"c559c395": "bitwordsCutOutof100()", +"c55a02a0": "SNT()", +"c55b6bb7": "setAdmin(address,address)", +"c55c1cb6": "queryN_withGasLimit(uint256,string,bytes,uint256)", +"c55c4115": "FEE_CHARGER_DENOMINATOR()", +"c55c4f47": "isCrowdsaleSuccessful()", +"c55d0f56": "getCurrentPrice(uint256)", +"c55d34d4": "airdropGW()", +"c55dae63": "baseToken()", +"c55dd86a": "isLegalPlayer(bytes32,address,address)", +"c55e0eaa": "bonusPeriodDurationInHours()", +"c55e4645": "LETOCoins()", +"c55ed894": "withdraw_to_owner()", +"c55ee28c": "nextSession()", +"c55f1f42": "timeLockSend(address,address,uint256,bytes)", +"c55f3b4c": "GetInventory(address,uint256)", +"c55f60dc": "checkAndUpdateLimit(uint256)", +"c55fb39f": "SAFE_PERIOD()", +"c5620ded": "LogBuy(address,uint256,uint256,uint256)", +"c56351cd": "createCrowdsale(address,uint32,uint256,address,uint8,address,address)", +"c5639ed2": "SUB(uint256,uint256)", +"c56551b6": "pos()", +"c56597ba": "_v2()", +"c565eba6": "isRoundTwoSalePeriod(uint256)", +"c566d43c": "registerPlayer(address,bytes32)", +"c5671148": "mul64()", +"c567cd26": "updateStudent(string,bytes32,string)", +"c567e43a": "show_me_the_money()", +"c567f304": "approveAddReserveData(uint256)", +"c5682244": "changeTickPrice(uint256)", +"c56893fb": "getLockerCount()", +"c5689e7d": "deWhiteListContract(address)", +"c56935e2": "showJackpotNextRd()", +"c5699ac2": "canRestoreUnsoldTokens()", +"c5699d68": "_compare(int256,bytes,int256)", +"c569bae0": "right93(uint256)", +"c569fb36": "setDepositPool(address)", +"c56a0ffe": "summDevelopers()", +"c56a3e88": "isManager()", +"c56af732": "CannabanC()", +"c56b2dc2": "upgradePony(uint256,uint256,bytes)", +"c56b4294": "_initialMint()", +"c56bbda4": "isTransferApprove(uint256)", +"c56bea64": "setBlacklistedUser(address)", +"c56c89a2": "ChendeWorld()", +"c56cf2b2": "getAllSaleAnimals()", +"c56d0d67": "tokensSoldWhitelist()", +"c56e3849": "Versioned(string)", +"c56e610e": "getEscrowBalance()", +"c56ecdfa": "_isOne(address)", +"c56ef049": "execBuyBack(uint256)", +"c56f1578": "UzairToken()", +"c56fc9c1": "PreSaleDistributed()", +"c570e952": "CustomPOAToken(string,string,address,address,uint256,uint256,uint256)", +"c5715483": "bonusMinContribution()", +"c571627b": "ChangeMainWallet(address)", +"c572652b": "distributeWithLockup(address,uint256,uint256,uint256,uint256)", +"c5729617": "get_value_by_hash(string)", +"c572ca10": "TokenProcurement(address,address,uint256,uint256)", +"c572dcc3": "getFreeMiner()", +"c572e9cb": "_decodeBuyData(bytes)", +"c57380a2": "getControllerAddress()", +"c573902d": "getInfoPanel()", +"c573e6bd": "distributeIfNeeded(address,uint256)", +"c57443fa": "ZRX_EXCHANGE_ADDR()", +"c574a53c": "addJurisdiction(bytes32[],bool[])", +"c574d156": "getGameBalance()", +"c575200d": "setPropertyBecomePublicEarnUntil(uint16,uint256,uint256)", +"c575c238": "sendToken(address)", +"c57679fc": "recipientMIT()", +"c5774a3f": "seedAmount()", +"c5787fa3": "picops_identity(address,uint256)", +"c578b2f4": "getTransformTarget_default()", +"c578f2c8": "SetCityName(address,bytes32)", +"c5793979": "sendCheck(address,uint256,bytes32)", +"c57949e2": "AllowanceLedger(address,address)", +"c57981b5": "FEE()", +"c57a050e": "fairandeasy()", +"c57a4a4d": "TOKEN_PUBLIC_SALE_CAP()", +"c57a8825": "updateRegistryAddress(address)", +"c57a99e5": "testFailRetractLatestRevisionEnforceRevisions()", +"c57c3bbd": "addLockProduct(uint32,uint32,uint32,bool)", +"c57c5f60": "initMultiowned(address[],uint256)", +"c57c7b62": "mktIssue(address,uint256)", +"c57d3fb7": "setReFundAddress(address)", +"c57d5fe9": "addToBalance(address,address,uint256)", +"c57dead7": "betsLost()", +"c57fbf90": "tokenRate(address)", +"c58068d8": "getIdFromStr(string)", +"c5809312": "setLLV_edit_28(string)", +"c58156e0": "removeAllocation(address)", +"c5820c45": "DFSDex()", +"c58343ef": "getRequest(uint256)", +"c5837713": "a_empresa(bytes5)", +"c583bb53": "RYNO()", +"c5854113": "MilestonesFactory(address)", +"c58580aa": "icoAddress1()", +"c585bb93": "registerAssetProxy(address)", +"c585de64": "Rate3()", +"c58684ab": "setPauseEmergence()", +"c5868754": "is_signed()", +"c587e3d6": "totalRised()", +"c587f93e": "softCapCountDownTimer()", +"c588415e": "phase4EndBlock()", +"c588953e": "enddate()", +"c588ba1b": "getLowestGameWithoutQuorum()", +"c588cabd": "firstBonusPercent()", +"c5893a8e": "OnPreSaleBuyerCompensated(address,uint256)", +"c589f1f3": "transferEthersToDao(uint256)", +"c58a3321": "setAccessControl(address,address,uint8,bool)", +"c58a34cc": "setTimeout(uint256)", +"c58a6ce8": "sendPayment(uint256,address)", +"c58aaae6": "selfDestructBeneficiary()", +"c58b54ef": "getAssetAttributes(uint256)", +"c58cc060": "firstBuyers()", +"c58ce220": "setDeveloper(string)", +"c58d0be0": "getCompetitionStatusOfRegistrants()", +"c58d96a5": "whiteListERC223(address)", +"c58f2f49": "hashTypes(uint8)", +"c58f520f": "sharingPool()", +"c5907a34": "Kanicoin()", +"c590c994": "unfreezeCount()", +"c5917695": "KevCoin()", +"c5919f24": "addNewMeme(string,string,string,string)", +"c591b3ca": "itemCanVote(address,uint256)", +"c591c8a3": "getAllJinglesOnSale()", +"c59255dc": "changeMilestone(uint8,uint256,uint256,uint256)", +"c592c3ba": "addAmountBoughtAsMember(address,uint256)", +"c5933658": "registerEmailAddress(address,string)", +"c59361b9": "getInsurance(address,uint256)", +"c593dfbf": "queryDataFromId(address,uint256)", +"c5944f30": "Token(address,uint256)", +"c5947cd6": "getReportingState()", +"c594a12d": "areadjacent(uint16,uint16)", +"c59513a4": "updateMyTimeMintBalance()", +"c5958bda": "removeFile(bytes)", +"c595fee6": "adminWithdrawEther()", +"c5960c29": "buyKeyByAddr(address)", +"c59671a7": "set_dni(uint256)", +"c5980b07": "getDRSCoinDividend(uint256)", +"c5981892": "buyTokensCrowdsale(address)", +"c59981cd": "edit(uint256,uint256,uint8,uint8,uint8,uint8,string)", +"c599b77f": "setUserGroup(address,address)", +"c599d58f": "MAX_NUM_PAYOUT_ATTEMPTS()", +"c59a9428": "transferTreasurership(address)", +"c59acae4": "lrcWithdrawn()", +"c59b2e20": "NEVA()", +"c59b5562": "buyICO()", +"c59c1144": "setDefaultKey(address,address,uint8,bytes32,bytes32)", +"c59d278e": "vehicleDatesByCity(bytes32)", +"c59d4847": "getStats()", +"c59d55ad": "releaseTransfer(bytes32,uint8,bytes32,bytes32)", +"c59d5633": "getPurchasePrice(uint256)", +"c59d6abe": "getAngelClaims(uint64)", +"c59e0b87": "setSecondWalletPercent(uint256)", +"c59e5729": "upAd(uint256)", +"c59ea269": "snowflakeBalance(string)", +"c59ee1dc": "raisedAmount()", +"c59f3a7c": "getConditionsState()", +"c59f6983": "editMaxItems(uint8)", +"c59f83cf": "_getNftContract(address)", +"c5a0a555": "setImageRegionId(uint256,uint256)", +"c5a0ca8f": "init(address[],uint256[],uint256,address)", +"c5a0d1c7": "percentageQuarter1()", +"c5a104d9": "ln_fixed3(uint256,uint256)", +"c5a1d7f0": "metadataHash()", +"c5a2d352": "publish(uint256,bytes32)", +"c5a369b4": "addAddressDescription(string)", +"c5a46ee6": "value(uint256)", +"c5a4eb35": "initialPricePaid(uint256)", +"c5a55152": "distributeRewards(address[])", +"c5a60ddb": "payout(bytes32,uint256,uint256)", +"c5a6732b": "_isChallengerAttackFirst(uint256,uint256)", +"c5a796ac": "set_address_Arina(address,address)", +"c5a83c2b": "countAssets()", +"c5a88559": "getWithdrawNum()", +"c5a8a2ab": "changeStatus(uint256,uint8)", +"c5a8d421": "RocketFuelToken()", +"c5a9833e": "trusteeVaultAddr()", +"c5a988c9": "extendPreSalesPeriodWith(uint256)", +"c5aa0f17": "setNewJackpot(uint256,uint256,address)", +"c5aad3be": "getStackPtr()", +"c5ab4602": "updateBalance(address,address,uint256,bool)", +"c5ac124d": "cashToEth()", +"c5ac8a4d": "leftSharePrice()", +"c5aca3b2": "NYXDecentralizedIdentificationRequest(string,string)", +"c5ace443": "priceFeedSource()", +"c5ad94a9": "addressSharesCount(address)", +"c5ae6e0e": "Kernal()", +"c5ae7570": "getSaleFinancialData()", +"c5af3808": "setJntBeneficiary(address)", +"c5af9000": "Convert()", +"c5afc0a5": "BonusAllocation(address,string,uint256)", +"c5afce8b": "ensureInAccountList(address)", +"c5b045eb": "secondRoundPercent()", +"c5b05616": "TokenAuction()", +"c5b15057": "updateSettlementStatus(bool)", +"c5b15caf": "CIBOS()", +"c5b1a53c": "deposit(bytes16[],uint64)", +"c5b1d9aa": "newRound()", +"c5b1e789": "Unset(string,address)", +"c5b2333c": "set_status_user(address,address,bool,bool)", +"c5b2429d": "periodPreITO_tokenPriceUSD()", +"c5b35556": "bixToken()", +"c5b3a429": "PresaleStartTimeChanged(uint256)", +"c5b417ec": "buyPlot(uint256,uint256)", +"c5b43c39": "CypherX()", +"c5b53a34": "_setAuthorizedPower(uint256)", +"c5b748c0": "redemptionPrice()", +"c5b7589c": "startMiniGame()", +"c5b7be81": "TruckingCoin()", +"c5b7c51b": "participateEvent(address)", +"c5b7f5bf": "presale_eth_fund()", +"c5b85eb8": "UBSI()", +"c5b8d7a1": "cyclesStartFrom()", +"c5b8f772": "isOwnerOf(address,uint256)", +"c5b930f9": "singletonHash(bytes32)", +"c5b9cdf8": "SMARTCCCoin()", +"c5bac421": "pruneInvestors(uint256,uint256)", +"c5bafbc4": "eosDACToken()", +"c5bb8af4": "IMDEXsetInactivityReleasePeriod(uint256)", +"c5bcc4f1": "parentSnapShotBlock()", +"c5bd8456": "TakeOffWorldWide()", +"c5bd9089": "redeemCoupons(uint256)", +"c5bdbd70": "multDenominator()", +"c5be7a77": "_shareDevCut(uint256)", +"c5bef690": "_escrowIndex()", +"c5bef74e": "getHash1(address,uint256,address,uint256,uint256,uint256)", +"c5bf2249": "wallet(bytes)", +"c5bf339c": "getLastNonPublished()", +"c5bfa9d9": "getUserBalanceOnEther(address)", +"c5bfd5dd": "TokenDrop()", +"c5bfef39": "initCountry(uint256,uint256)", +"c5c00ac6": "needVerified()", +"c5c01169": "checkFrozenAccounts(address)", +"c5c03af3": "_mode()", +"c5c09b20": "TestRecover(uint256,uint256,uint8,bytes32,bytes32)", +"c5c0b859": "pauseMaster()", +"c5c0db08": "whom()", +"c5c187f5": "LogApproval(address,address,uint256)", +"c5c2f6e0": "getTopPlayerScores(uint256)", +"c5c4412d": "CleanBankerRound(uint8)", +"c5c4744c": "totalRaised()", +"c5c5135c": "crystalPrice()", +"c5c56740": "ROBIET()", +"c5c593e1": "openGameResultAndNewGame(uint256,uint256,uint256,string,bytes32)", +"c5c680f3": "testUser()", +"c5c6b12a": "isInvestorInWhitelist(address)", +"c5c715e4": "approveBatch(address[],uint256[])", +"c5c72bf4": "sayAnything(string)", +"c5c7681f": "Main(address)", +"c5c78258": "YoloTokenPresaleRound2(uint256,uint256,uint256,uint256,address,address)", +"c5c80103": "listFaceToFaceAttendants()", +"c5c8015b": "isNotContract(address)", +"c5c872ae": "transferFromRobot(address,address,uint256)", +"c5c87db4": "reinvestReturns(uint256,address)", +"c5c8a08a": "getExpirationTimeFromAddress(address)", +"c5c925e2": "StoreRegistry()", +"c5c93bdc": "Birth(uint256,uint256,uint256)", +"c5c95c55": "QuantityUnit()", +"c5c9e3be": "setPreparationPeriodTrainingFeeMultiplier(uint256)", +"c5c9f617": "walletE()", +"c5cac386": "Questions()", +"c5cc52fc": "Indemnisation_5()", +"c5ccebd3": "smallerPriceComparator(uint256,uint256)", +"c5cd3bec": "getRevisionTimestamp(bytes20,uint256)", +"c5cd88db": "missingFundsToEndAuction()", +"c5ce3911": "productId()", +"c5cf8c7e": "getCurrentHighscore()", +"c5d03fc0": "OftenChainToken()", +"c5d0c68b": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint64,uint64)", +"c5d14955": "phase_2_token_price()", +"c5d22e94": "MAX_TOTAL_AMOUNT_TO_RECEIVE_ETH()", +"c5d2577c": "newTransfer(bool,address,address,uint256,uint256,uint256)", +"c5d290d0": "RUNtoken(uint256,string,string)", +"c5d39a33": "isEating(address)", +"c5d456d6": "moves(address,uint256,uint256)", +"c5d46dfc": "computeScore(address)", +"c5d51586": "loser(address)", +"c5d5997c": "changeSubUser(address,address)", +"c5d61ad0": "newGame(uint256,bool,uint256)", +"c5d65d1a": "approveSponsorableJob(uint256)", +"c5d6a7f1": "GreatcoinERC20Token()", +"c5d6c75d": "PunchClock()", +"c5d7802e": "z()", +"c5d7dd0a": "Blockcash(string,string,uint256,uint256)", +"c5d81804": "mintSBIToken(address,uint256)", +"c5d83794": "setDesign(uint256,string)", +"c5d8adcb": "EventProduct(uint32,string,uint32,uint32,uint32,uint32,uint32,uint256,uint256,uint256)", +"c5d953a3": "setCurrentMarketRate(uint256)", +"c5d9ada3": "IANToken()", +"c5d9c762": "set_pre_kyc_iconiq_bonus_denominator(address,uint256)", +"c5dacf68": "getOwnerEth()", +"c5db22da": "lastBlock(uint64)", +"c5dba811": "doRandom(address[],address,uint256)", +"c5dc6b55": "getAccountBonus(address,address)", +"c5dce83d": "changeAPTController(address)", +"c5ddb614": "BlockFundIncubatorToken()", +"c5ddba02": "startDate1()", +"c5decd37": "ico3Raise()", +"c5df27ef": "ETHcap()", +"c5e08ba9": "get_oo_of(address)", +"c5e12813": "burnAllInvestorTokens(address)", +"c5e290cd": "_editInfoImpl(string)", +"c5e2a7db": "updateMetadata(address)", +"c5e2f418": "disableChanges()", +"c5e34e77": "Total_Products(uint256)", +"c5e35f42": "Gentingchain(uint256,string,string)", +"c5e36b7e": "lockMana(uint256)", +"c5e3adf5": "nFund()", +"c5e3b1a6": "reclaimOwnership(string,string,bytes32)", +"c5e3e3f3": "s21(bytes1)", +"c5e412e5": "createSaleContract(address,uint256,uint256,bool)", +"c5e42338": "getIncreaseTotalStakeCalled()", +"c5e4594f": "multiline(uint256,uint256,uint256,bytes32)", +"c5e634e4": "transferAuditTokens(address,uint256)", +"c5e7b4fe": "setupPreIco(uint256,uint256)", +"c5e8b864": "hasEnoughBST(address,address,address)", +"c5e951a4": "agentOrdersOf(uint256,uint256)", +"c5e974ed": "transferToken(bytes32,address,address,uint256)", +"c5e98a4c": "updateIncentiveTokenLimit(uint256)", +"c5e991a8": "ThirdEtherLimit()", +"c5ea01c9": "testF2(uint256)", +"c5ea0b4a": "buySquare(uint8,uint256,address)", +"c5ea3c65": "maxId()", +"c5ea6256": "enableSecureMode()", +"c5ea8e1d": "RefUpdate(string,uint256,uint256,uint256)", +"c5eab684": "calculateDividends(uint256,uint256)", +"c5eaccfd": "whitelistAddrAndBuyTokens(address,uint256)", +"c5ebeaec": "borrow(uint256)", +"c5ec05fd": "scheduleSale(uint256,uint256)", +"c5ec365f": "guideInvestmentAttractedShareToPay()", +"c5ecfc61": "getEscrowDeposit(string)", +"c5ed7162": "firstPresaleStart()", +"c5ed8c99": "canCollect(uint256)", +"c5edd450": "payFor(uint256)", +"c5ee5688": "setCompte_25(string)", +"c5ef4c3e": "set(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c5efaa11": "calculateValue(int256,uint64)", +"c5efaae8": "buyCredits(address,uint256)", +"c5efea68": "getAdminStatus(address)", +"c5f0d3d6": "geneKind()", +"c5f2892f": "get_deposit_root()", +"c5f310c0": "register(bytes12)", +"c5f39cd7": "rateSecondTier()", +"c5f40edd": "discountedDealAmount()", +"c5f4b3da": "RewardPoolAmount()", +"c5f4c98b": "changeDiscountStep(uint256)", +"c5f5ce21": "advisorTokenWallet()", +"c5f60620": "expectedTokens(uint256,bool)", +"c5f70682": "setByuoutCount(uint256)", +"c5f713cf": "push(uint256,bool)", +"c5f7ed63": "NeckCoin()", +"c5f913fe": "callExitFromUnknownContract(address)", +"c5f956af": "treasuryAddress()", +"c5f98578": "RequestFromContract()", +"c5f98a3f": "mega()", +"c5fa1924": "MMS()", +"c5fbe723": "result_payto()", +"c5fc43cb": "Newera()", +"c5fc98c9": "TOKEN_THIRD_DISCOUNT_MULTIPLIER()", +"c5feaf60": "PRE_SALE_START_1()", +"c5fee757": "executeOrder2(uint256)", +"c5ff2069": "MooTokenSale()", +"c5ff2222": "playNo()", +"c600e1dc": "getProfit(address)", +"c6011633": "setRateFees(uint256,uint256)", +"c6017a25": "playerRoll(uint256,address)", +"c601b7f8": "icoPhase1Start()", +"c60211ee": "MineFinished()", +"c6028cf3": "nextSaleStage()", +"c6029e7b": "sendBPESOTokenToMultiAddr(address[],uint256[])", +"c603a4e3": "getTotalHP(uint256,uint256,uint256,int256)", +"c603ae14": "jockeyFS(uint256)", +"c603bd7d": "_executeOrder(address,uint256,uint256,bytes,int256)", +"c603c97b": "NewPiedPiperCoin(string,string,uint8,uint256)", +"c6041333": "calculateKnowledgeBuySimple(uint256)", +"c6046f77": "mintAndTransfer(address,uint256,bytes)", +"c6049946": "saleExchangeRate1()", +"c604bec9": "hasExtension(address)", +"c604e967": "delFilter(uint256)", +"c605f76c": "helloWorld()", +"c6062bc3": "sellerRefund(uint256,address)", +"c60778cf": "RefundRequest(uint256,address,uint256)", +"c6080b3f": "KiDhon()", +"c60880e0": "Aster()", +"c609ab26": "setImageCurrentRegionId(uint256,uint256)", +"c60aa10d": "newForgeCon(address)", +"c60b099f": "removeRate(uint256,uint256)", +"c60b7784": "queryEOSCrowdsaleKey(address,address)", +"c60bdc7f": "setUsersContract(address)", +"c60c13a3": "blockAccountFunds(address,uint256)", +"c60c3aca": "callFor(address,uint256,uint256,bytes)", +"c60cae29": "changePeriodTime(uint256,uint256)", +"c60ccb0e": "takerBuyAsset()", +"c60ce271": "findNextMinute(uint256,bytes)", +"c60ced1b": "LetsGoChain(string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"c60f56b2": "totalAcorns()", +"c60f6462": "resetRick()", +"c610bb07": "tranfer(address,uint256)", +"c6113205": "getTokenByIndex(bytes32,string,uint256)", +"c6114aaf": "updateIPOPrice(uint256)", +"c6117d37": "xactionFeeShare()", +"c611ded7": "reserveTokensAddress()", +"c6129a5a": "GetVersion()", +"c612cc4e": "compareDatesWithoutTime(uint256,uint256)", +"c613089f": "getBetsEvenAndODD(uint256)", +"c6132eb3": "timeBetweenRewards()", +"c6137977": "eliminateSmartContractByteCode()", +"c614b522": "getAllInvestmentPackageIds()", +"c614da67": "free(bytes12)", +"c6150296": "checkBalances(address,address)", +"c615365f": "EthBetter()", +"c6159a35": "icoTransfer(address,uint256)", +"c6169e1f": "maxTournamentContenders()", +"c616f412": "totalQuantity()", +"c6178a65": "soldTokensSale()", +"c617fe6e": "_setAllowance(address,address,uint256)", +"c6180d27": "silverBoxPrice()", +"c618210a": "crowdsalepricing(address,uint256,uint256)", +"c618a1e4": "volume()", +"c618d15f": "ConvertNumbers(bytes5)", +"c6195d03": "ONE_DECIMAL_QUANTUM_ABC_TOKEN_PRICE()", +"c6195d36": "setConfig(address,uint256)", +"c6199b6d": "getCustomerServiceAddress()", +"c619bbd3": "GetPower()", +"c61ab738": "getSupplyLimit(uint32)", +"c61b06ae": "collectibleIndexToOwner(uint256)", +"c61b8a44": "rewardGenerationComplete()", +"c61c3c4b": "buyPackWithETH(bool)", +"c61de162": "_withdrawPromoter(address,uint256)", +"c61e42ae": "mint(uint256,int256)", +"c61e5be6": "cardSetsInCirculation(uint256)", +"c61ea7a3": "CrowdfundableToken(uint256,string,string,uint8)", +"c61efde6": "MsgEngine(uint8)", +"c61f1103": "foundersTimelock2()", +"c61f13a1": "setWitdrawGas(uint256)", +"c61f3a2c": "drpToken()", +"c61fb3f1": "Moon()", +"c62072d2": "nfo_transaction(uint256,uint256,address,address,bytes32)", +"c620b5fe": "isDaySecond()", +"c620ecc7": "KYCTeam()", +"c62122eb": "AmberToken()", +"c621f96e": "deleteDIDHolder(address)", +"c6220fbd": "dividendDistributionStartTime()", +"c6221878": "projectCompleted()", +"c62239da": "printAllCompanies()", +"c6224757": "issueTreasury(address,address,address)", +"c622afb0": "getInsertPointForNumTokens(address,uint256)", +"c6235f8d": "delMarketMaker(address,address)", +"c623674f": "ipfsHash()", +"c6236a5c": "scheduleCall(bytes,uint256,uint256,uint8,uint256)", +"c6240303": "SetAuxOwner(address)", +"c6253f14": "XXXXXXXX08(uint256)", +"c625bd27": "transferFromBRXPay(address,address,uint256)", +"c625e9b1": "buyTokens(uint256,address)", +"c62631a5": "LicensingToken()", +"c62662f2": "setTotalCapitalization(uint256)", +"c6266693": "setCoreContract(address)", +"c626c52e": "isGame(address)", +"c6279ab1": "voteClose()", +"c627d0f8": "setCampaign(uint256,uint256)", +"c628ddc3": "TAIL()", +"c629061d": "external_oraclize_randomDS_proofVerify(bytes,bytes32,bytes,string)", +"c6291223": "fundTransferWithin(address,address,uint256)", +"c629cdf4": "collectPayout()", +"c629e770": "donorList()", +"c62aa67d": "getNodeId(bytes32)", +"c62c5fda": "setIcoFirstWeekRate(uint256)", +"c62cfa1d": "getMyNote(uint64)", +"c62d7407": "frozenOf()", +"c62dcd5b": "getSentTransactions()", +"c62dee76": "HumanBlockToken()", +"c62eac5c": "create(address,uint256,bytes32,int256)", +"c62fae5d": "getValueInfo(address)", +"c63012a1": "setHashPiture(uint256,bytes32)", +"c630f92b": "canEnterPool()", +"c630f96b": "ZToken(uint256,string,uint8,string)", +"c6314bf9": "companyAllocation()", +"c6317f37": "Token_Saled()", +"c631b292": "closeVoting()", +"c631e758": "clearRole(address)", +"c6321979": "buyTokenPack(uint256)", +"c632e654": "_takeRdFee(uint256)", +"c633084f": "sendGreeting(address,string)", +"c6335b26": "startInvasion(uint256,uint256[])", +"c633eb24": "generateReserve()", +"c63445f3": "setFeePool(uint256)", +"c634d032": "mintToken(uint256)", +"c634fd83": "adminSetDefaultFee(uint256,uint256)", +"c63545e9": "developer_edit_text_fees(string)", +"c6354bc0": "addCountries()", +"c6357b54": "impl_forging(address,uint256,uint256)", +"c635a9f2": "MinimumDeposit()", +"c635bf38": "keyGt(bytes32,bytes32)", +"c635d65e": "StandardToken(address,string,string,uint8,uint256,bool)", +"c6361267": "mintOneWeek()", +"c6366ce9": "TOTAL_ICO_CAP()", +"c636813e": "disapproveSingleUser(address)", +"c63755e1": "transferPresale(address,uint256)", +"c6381649": "getChats()", +"c6384071": "voteCount()", +"c638529f": "SetProvider()", +"c6388e6f": "_AtlantisToken()", +"c6393e62": "migrationSetBoard(bytes32,bytes32,string,uint8,address)", +"c63998ed": "updateUnitsOneEthCanBuy(uint256)", +"c6399fc7": "_setItemNotForSale(uint256)", +"c639e8c5": "registerVerifier(address)", +"c63a4e05": "getCartLength()", +"c63c1a27": "calcFight(uint64,uint64,uint256,uint256)", +"c63ccb3b": "Discount()", +"c63d04df": "BonusReferred(address,address,uint256,uint256)", +"c63d99db": "auctionName()", +"c63e2ebc": "setRoundStart(uint256,uint256)", +"c63e529b": "buy(string,string)", +"c63ebcbb": "claimedUnits()", +"c63f49ab": "LuckyDice()", +"c63fdcc7": "claimPayment(uint256)", +"c63ff8dd": "claim(bytes)", +"c64012a6": "CoinSent(uint256,address,string)", +"c640487d": "_changeLogicContractAddress(address)", +"c640752d": "update(address,address)", +"c641aaca": "addPrivateSaleEndDate(uint256)", +"c6427474": "submitTransaction(address,uint256,bytes)", +"c642b103": "treasuryTimelockAddress()", +"c642e7bf": "getRoundState(uint256)", +"c642f094": "MOT()", +"c6430e29": "get_firstbytes(address)", +"c6434660": "isTakePermitted(uint256,uint256,uint256,address,address,uint256,uint256,address)", +"c643872e": "paymentTo(uint256,bytes,address)", +"c6440b3e": "sub(uint32,uint32)", +"c64572b8": "minimalPriceUSD()", +"c645ecc4": "handleReturnBytes32()", +"c6461625": "setIV_R4(uint256)", +"c64743d5": "BlockMined()", +"c6476fe9": "isMinimumInEther()", +"c647b20e": "setTaxes(uint256,uint256)", +"c647c3d9": "t_1st_StageEnd()", +"c648843a": "current_week()", +"c6490835": "total_tokens()", +"c64a2358": "_targetBlock()", +"c64a3239": "updateExec(address)", +"c64aace0": "airdropConjured()", +"c64bf22d": "SummerGreen()", +"c64bf32f": "distribute_token()", +"c64d73c6": "JCoin()", +"c64e03a2": "FAPcoin()", +"c64e08a0": "CampaignPausd(uint256)", +"c64e8bc0": "executeN(uint256)", +"c64f28c8": "createImage(address,uint256,uint16,uint16,uint16,uint16)", +"c64f9490": "updateAccessoryLock(uint64,bool)", +"c64fa2e4": "totalDividendShares()", +"c64fbbce": "_calcRemainingRoundTime()", +"c65025f8": "isSmartSharingEnded(bytes32)", +"c6502da8": "basePayment()", +"c6512a33": "CNC(uint256,string,uint8,string)", +"c6544e5c": "icoSpecConfirmed()", +"c6548076": "isUserBlacklisted(address,address)", +"c65538ec": "afterSTEDistributed()", +"c655d7aa": "recoverAddress(bytes32,bytes)", +"c655fd2c": "setSlowDump(uint256)", +"c6560856": "currentJackpotInWei()", +"c6567835": "changeVaultWallet(address)", +"c6570e67": "contractorTransfer_Scoupon(address,uint256)", +"c65799a4": "ReturnRequested(address,address)", +"c6580352": "HeroTrained(uint256,address,uint256,uint256,uint256,uint256,uint256,bool,uint256)", +"c65808b9": "getSpell(uint32)", +"c6585a27": "updateNotaireAddress(address)", +"c659ce2b": "setBountyAddress(address)", +"c659d443": "url(bytes32)", +"c659dceb": "is_verified()", +"c65a0fdf": "updatePixelIndex(uint16,uint16)", +"c65a4068": "_multisig(bytes32,uint256)", +"c65ac542": "saleUnpause()", +"c65ad85c": "isReadyToStart(bytes32)", +"c65b125f": "setContestContractAddress(address,address)", +"c65b490e": "getBabyMakinPrice(uint256)", +"c65c6eae": "getReadableContribution()", +"c65c9567": "gameResult(uint256,uint256)", +"c65c9d63": "getNextStakedNode(address)", +"c65ccc07": "setLtdParams(uint256,uint256,uint256)", +"c65cec32": "refundTokenToCustomer(address,address,uint256,address)", +"c65d15b9": "reference()", +"c65daea0": "allocated6Months()", +"c65fb380": "isSet()", +"c6601270": "getMyIceDragon()", +"c660477b": "GetData(uint256)", +"c6610dec": "owner_share()", +"c661deb4": "issueHardcapToken(address,address,uint256)", +"c661ee4d": "proofAddr()", +"c661fed3": "isAdvisor(address)", +"c6620580": "presale_tokens()", +"c6634ef5": "certify(uint256)", +"c6638df9": "LogTemplateCreated(address,address,string)", +"c66485b2": "setDefaultResolver(address)", +"c665242b": "storeMsg(string)", +"c6653041": "ParticipantRegistry()", +"c666c798": "setExtendedTokenCap(uint256)", +"c6677519": "executeSettingsChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"c667ab20": "setFundsRegistry(address)", +"c6685617": "record(address,uint256)", +"c6688445": "stringToSignExample()", +"c668dfd7": "doAirdrop(address,address[],uint256)", +"c668ee3d": "operatingFundAddress()", +"c668f71b": "exchFee()", +"c6699ba8": "addPayTable(uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"c669c955": "incentivesIn(address[],uint256[])", +"c66a431d": "addContract(bytes32,bytes32,bytes32,bytes32,address,bytes32)", +"c66aaf0f": "sucessor()", +"c66bd6aa": "updateEthICOThresholds(uint256,uint256,uint256,uint256,uint256)", +"c66c2536": "doTransferOut(address,address,uint256)", +"c66c67e9": "setReservedTokensPercent(uint256)", +"c66e4095": "icoContract()", +"c66e9260": "ESCCrowdsale()", +"c66ed8f7": "lockGenesisImports()", +"c6702187": "CLAIM_SIGNER_KEY()", +"c6705a00": "signupUsersManually(address)", +"c6711049": "withdrawTokenManually(uint256)", +"c67117f5": "InvEnterpriseAddr()", +"c67146a5": "check_bet(uint256,address,uint8)", +"c6715f81": "left44(uint256)", +"c6716590": "DovieBarMitzvah()", +"c67410fb": "getOwnersLoan(address)", +"c67415f3": "mineCrystals(uint256)", +"c674e0c9": "setSmartContractStatus(uint8)", +"c67685a9": "turnOffCanUpdateDeveloperMiningPower()", +"c67747a5": "bitGuildAddress()", +"c6776239": "BitPropertyToken()", +"c6777e63": "changeUrls(string,string)", +"c677b207": "addElectedMember(address,string)", +"c6786e5a": "destroy(address[])", +"c6788bdd": "claims(address)", +"c678ca19": "comfirmIsses(uint256)", +"c678e618": "sendDividend()", +"c679580e": "isModuleHandler(address)", +"c6795b45": "bonusPatterns(uint256)", +"c67979a5": "PakistanRupee()", +"c6798033": "dedicatedProxyAddress()", +"c67acceb": "firstStageEndsAt()", +"c67af5cc": "logMarketParticipantsDisavowed(address)", +"c67b099f": "createWildcard(string,uint256,uint16)", +"c67b599a": "presaleMinPurchase()", +"c67bbc24": "getVolume()", +"c67c6eab": "stopCrowdSale()", +"c67ce6f5": "FlightDelayNewPolicy(address)", +"c67d376d": "getClosedCandidates()", +"c67e43c1": "setExpectedEnd(uint256)", +"c67f3ba3": "GanLiXia()", +"c67f3e1f": "totalDistributedinWei()", +"c67f7df5": "getDepositsCount(address)", +"c6803622": "wasCalled()", +"c68098d9": "personalCapEndAt()", +"c6814aa2": "copyPaper(address,uint256)", +"c681d68d": "badgeBalanceOf(address)", +"c68218d1": "setStrF1F2F3(string,string,string)", +"c6822356": "_createAss(string,uint32,string,uint256,uint256,uint256)", +"c682a10d": "createRoot(string,string)", +"c682d0bb": "authorized_updateSaleInfo(uint256,uint256)", +"c68309a7": "buyICloudSecsAgainstEther()", +"c683630d": "isWhitelist(address)", +"c6837a87": "getDepositeTime(address,uint256)", +"c683d8e4": "enableSale()", +"c6842868": "registerBroker(address)", +"c6851889": "Sale(address,uint256)", +"c68581ea": "addFile(uint256,string,uint256,string,string)", +"c686554e": "getInfo(address,address)", +"c687857c": "updateAsset(uint256,string,string,string,uint256)", +"c687ce9d": "setInitialOwner(address,uint256,uint256)", +"c6888fa1": "multiply(uint256)", +"c68890c7": "AcceptGuardianOffer(uint256)", +"c6891018": "take(uint256,bytes32[])", +"c68a3c1e": "setShares()", +"c68a536d": "GetLuckyRewards()", +"c68ad0a8": "Hold(address,address,uint256,uint8)", +"c68ae617": "authenticate(address,uint256,uint256,uint256)", +"c68b82c9": "ethLastUpdate()", +"c68bf3ea": "eDeposit()", +"c68cd47e": "COIN_SUPPLY_ICO_TIER_1()", +"c68cee04": "addArtistToRegistry(bytes32,address,uint256,uint256)", +"c68d81e0": "a(address)", +"c68deb7e": "saleEndTimestamp()", +"c68e35b0": "verifyHash(bytes32,uint8,bytes32,bytes32)", +"c68e52d9": "setTimeStamp(string,uint256)", +"c68ee9cd": "search(uint256,uint256)", +"c68eebe3": "getCurrentTokenPriceInCents()", +"c68f2ada": "getDoc(string,string)", +"c68f7dfc": "test_hasClaimableShares_zeroClaimableStake()", +"c68fd307": "minimumContributionPresalePhase1()", +"c68fe0c1": "WeClosedInto()", +"c69034ab": "test_21_assertGasUsage50Boards()", +"c690c9a5": "Apollo()", +"c6912a39": "confirmRedbullQuest(address)", +"c692c049": "pushData()", +"c692d9de": "LogNeumarksIssued(address,uint256,uint256)", +"c692f4cf": "renounceAgent()", +"c69493a0": "subSale()", +"c69500fd": "rewardPay(address,uint256)", +"c695ff11": "randomAPI_url()", +"c6960d4c": "winnerid()", +"c6967c17": "DeviseToken(uint256)", +"c6969604": "emitBoardCreated(uint256,bytes32,bytes32,address,uint256,uint256,uint256,bool)", +"c69768dd": "createInkeTrade(bool,uint256,uint256)", +"c6979c0a": "WhitelistContract()", +"c697cbec": "_startNextRound()", +"c6998dc2": "updatePartner1_vows(string)", +"c69a00be": "setPeggedToken(address,address,address,uint256)", +"c69a8e13": "erc20BalanceForAddress(address)", +"c69b3936": "getNumSigs(bytes32)", +"c69b5df2": "prev_hash()", +"c69b5dfb": "verifyInvestors(address[])", +"c69b761f": "admin_set_deposit(address)", +"c69c7069": "mintPaper(string,string)", +"c69cd09d": "breedingFee()", +"c69e06db": "transactionsActive()", +"c69ed5f2": "executeTransaction(bytes32)", +"c69f4481": "setBlacklist(uint32,bool)", +"c69f8623": "convertSignalToMinimal(uint256)", +"c69fa8a9": "setAuthorizerAddress(address)", +"c69fbf48": "bountyProgram()", +"c6a00369": "LRCFoundationIceboxContract(address,address)", +"c6a05c06": "payOut(uint8,uint256)", +"c6a09d95": "grantAccess(address,address)", +"c6a0b13f": "cancelOnSaleCrab(uint256)", +"c6a0eb24": "test_threeInvalidEqBytes32Message()", +"c6a118d4": "impl_transferMS(address,address,uint256)", +"c6a17d2b": "pow10(uint256,uint8)", +"c6a22681": "getParticipantIndex(uint64,address)", +"c6a2573d": "oneTokenInEurWei()", +"c6a2afa7": "TokenECCAC(uint256,string,uint8,string)", +"c6a41bd7": "updateDetails()", +"c6a470e2": "getDisputeState(uint256)", +"c6a496bf": "Artwork(bytes32,uint256,string,string,string,uint256,address)", +"c6a4d345": "setMaxEscrow(uint256)", +"c6a4f4af": "getCurrentPotInfo()", +"c6a52959": "gba()", +"c6a5d5da": "updateBlocksPerDay(uint256)", +"c6a69931": "verifyCommit(address,uint40,uint256,uint8,bytes32,bytes32)", +"c6a71577": "WEKUToken(address)", +"c6a725d8": "confirmTransaction(uint256,bool)", +"c6a7d3af": "setTokenExcange(address,uint256)", +"c6a81857": "existsCountsById(uint256)", +"c6a898c5": "u()", +"c6a97c60": "SolusToken()", +"c6a98543": "ICONIC_NIC(uint256,string,string)", +"c6ab4514": "sendRobust(address,uint256,uint256)", +"c6ab5429": "KotET2()", +"c6ab5cdc": "closeBuy()", +"c6ab5d90": "withdraw(uint8)", +"c6ab848a": "referralInstance()", +"c6abc298": "getBetAt(address,uint256)", +"c6ac53fd": "submitTransaction(address,uint256,bool,bytes)", +"c6ad1191": "MyOwnCoin()", +"c6ad5d7c": "expireBid(address)", +"c6ae3b57": "dEthereumlotteryNet(address,address)", +"c6ae67ad": "fundcruToken()", +"c6af3166": "checkDouble(address)", +"c6af43f9": "updateThresholdNewAuction(uint256)", +"c6af477c": "get(bytes32,string)", +"c6afd98a": "requestConversion(uint256)", +"c6b0263e": "setPublicCapability(address,bytes4,bool)", +"c6b0a1fa": "checkPricePair(uint256,uint256)", +"c6b0de7e": "removeFromWhiteList(address,address)", +"c6b0ffd0": "is_success()", +"c6b20dc2": "Invacio()", +"c6b2a5dd": "updateCurrentSupply()", +"c6b3a7cf": "wplus(uint256,uint256)", +"c6b3ad7b": "setTWhitelist(address[],uint256[])", +"c6b4ad80": "ctu_owner()", +"c6b511a1": "EshaCoin()", +"c6b547e6": "getDocumentName(uint256)", +"c6b59e9e": "changeParameters(uint256,uint8,uint256)", +"c6b6005b": "TMSYToken(address,address,address,address,address)", +"c6b6b1e8": "ICOReserveSupply()", +"c6b6bc3c": "burnPurchase(uint256)", +"c6b85d2b": "AtomicX()", +"c6bbb6ef": "sendTokensTo7(address,address,address,address,address,address,address,uint256)", +"c6bc8dee": "testInitial2of3()", +"c6bcd5f7": "INTEGROToken()", +"c6bcefe5": "otherPoolTotal()", +"c6bd541f": "supportTeam(uint256,uint256,uint256)", +"c6bd5a13": "dividendsPaidPerShare(address)", +"c6bd62f5": "get_CountAllHolderForProfit()", +"c6bd9187": "closeEvent(bytes32)", +"c6bec93a": "startLottery(uint256)", +"c6befedf": "createPoll(bytes32)", +"c6bf03dd": "changeReleaseAccount(address,address)", +"c6bf7489": "sendLudumToMany(address[],uint256[])", +"c6c09252": "_generateCode()", +"c6c18e31": "PCToken()", +"c6c1e248": "ProductFactory()", +"c6c20a75": "getTotalCardValue()", +"c6c25d04": "artUrlList()", +"c6c27c71": "_slrByrLmtChk(address,uint256,uint256,address)", +"c6c2966d": "setFundingEnv(uint256,uint256,uint256)", +"c6c2ea17": "fib(uint256)", +"c6c332f2": "getUserEthVolumeSaldo(address,address)", +"c6c39bda": "unitsOneEthCanBuyafter()", +"c6c3bbe6": "mint(address,address,uint256)", +"c6c3f3f9": "setKyberProxy(address)", +"c6c4676c": "currentResult()", +"c6c4bf44": "issueFor(bytes32,address)", +"c6c55773": "Topplay()", +"c6c599c1": "changeApprover(address)", +"c6c5de53": "testFailMixItemStoreNotRegistered()", +"c6c65136": "spiderReq()", +"c6c68eb7": "getAyantDroitEconomique_Compte_2()", +"c6c6b3ed": "Sale(uint256,uint256,address)", +"c6c7d143": "cancelRedemptionRequest(uint256)", +"c6c7f5aa": "impl_amountOfOrderQueue()", +"c6c839f0": "increaseFreezeValue(address,uint256)", +"c6c85ca5": "updateTokenRate(uint256)", +"c6c8823c": "getActionPrice(string)", +"c6c8cdc7": "LogFundTransfer(address,uint256,bool)", +"c6c99744": "t01_setKey(bytes32)", +"c6caa959": "sellRock(uint256,uint256)", +"c6cb7a96": "orderMatchTest(uint256,uint256,int256,uint256,uint256,address,address,uint256,int256)", +"c6cb7ab8": "getBytesValues(bytes32)", +"c6cbc52a": "revokeCertificate(bytes32)", +"c6cbd5f0": "abandonedIcoBalances(address)", +"c6cc68b9": "BuyStockRocket(uint16,address)", +"c6cce2e7": "len(address)", +"c6cd15aa": "frozenVaults()", +"c6cd712d": "delegatedTransferAndNotify(address,address,uint256,uint256,uint256,bytes32,bytes,uint256)", +"c6cdbe5e": "categories(uint256)", +"c6cdc6f6": "fastICO(uint256)", +"c6cdf77e": "upgradeWeth(address)", +"c6ce2664": "setBancorRegistry(address)", +"c6ce81f0": "manualSendTokens(address,address,uint256)", +"c6ceafef": "setFeedAddress(address)", +"c6ceb50b": "Decimals()", +"c6cebebd": "get_info(uint256)", +"c6ced32b": "getWorkersCount()", +"c6cf1c7f": "generateRandomPerformance()", +"c6cf452b": "testInitialA()", +"c6cf4dd9": "upgradeOnePointZeroBalances()", +"c6cf54de": "BIC(uint256,string,uint8,string)", +"c6d04634": "BasicCrowdsale(address,address)", +"c6d0be63": "emergencyCease()", +"c6d0ffda": "failedTemperaturesLength()", +"c6d1d23d": "totalPledgedFeesAt(uint256)", +"c6d2cb6a": "getLavaTypedDataHash(address,address,address,uint256,uint256,uint256,uint256)", +"c6d32838": "deathData_f3()", +"c6d3ab9d": "changeTokenSymbol(string)", +"c6d417de": "NewName(address,string)", +"c6d44ecc": "_getTokenCountToBuyFromSeller(uint256)", +"c6d456ec": "Winning_Entry()", +"c6d48e0d": "getVersionsCount()", +"c6d69a30": "setTaxRate(uint256)", +"c6d761d4": "cancelEscape(uint32)", +"c6d779e6": "getAmountOrdersForDay(uint256)", +"c6d784cc": "Statustelega(address)", +"c6d81547": "DecisionTokenSale(uint256,address)", +"c6d8a203": "setConversionRateAddress(address)", +"c6d8be5a": "setPricingStrategy()", +"c6d8f0c4": "getLocks(uint256)", +"c6d90e70": "AcceptsDailyRoi(address)", +"c6d9112a": "MAX_DAILY_TOKEN_COSIGN_SPEND()", +"c6d95512": "ExchangeTokenPushed(address,uint256)", +"c6dad082": "make()", +"c6daeeaa": "TIME_TO_HATCH_1SNAIL()", +"c6dbdf61": "primary()", +"c6dc3640": "AirDropPayBitsR2(address[])", +"c6dc437b": "bids_ignored_count()", +"c6dca1d2": "proposeAsset(string,uint256,uint256)", +"c6dd5098": "DateCoinCrowdsale(uint256,uint256,uint256,address,address,address,address)", +"c6dd5db5": "validateOrder(address,uint256,address,address,uint256,address,uint256,uint256)", +"c6dd8018": "Cygnal()", +"c6ddcfe8": "publicSellToken()", +"c6ddd889": "ForeignBridge(uint256,address[])", +"c6de150b": "soldIdeaWei()", +"c6de5709": "calc_partnerPercent(address)", +"c6deeb9d": "contributionAccepted()", +"c6df66a7": "firstPlay(bytes32,uint8,bytes32)", +"c6e000b5": "mntpToken()", +"c6e0329f": "LaoHuiHui(uint256,string,string)", +"c6e04590": "rateHard()", +"c6e08ba9": "EligmaCrowdsaleContract()", +"c6e0c908": "checkTransferFromWithReference(address,address,uint256,string)", +"c6e0dc6e": "ChangeTransferStatus()", +"c6e1c178": "TheLuckyOne(bytes)", +"c6e3a9b3": "_total_sold()", +"c6e3d1b4": "promotionsOfHost(address)", +"c6e3e8fd": "getManualByAddress(address,address)", +"c6e3ffc3": "determinePID()", +"c6e416b5": "addressGains(address)", +"c6e5546c": "distributeTokens(uint256,uint256)", +"c6e68059": "DeAuthorized(address)", +"c6e68ea6": "createTournament(bytes32,uint256,uint256)", +"c6e6ab03": "allocateCandyToken(address[],uint256[])", +"c6e6b803": "grantAt()", +"c6e715e1": "rechargeDeposit()", +"c6e81b07": "remainingAuctionable()", +"c6e8b4f3": "createProxyAndCall(address,address,bytes)", +"c6e946df": "ComputePharaohReq()", +"c6e994d7": "shareWithdraw()", +"c6e9ce11": "NZD_CLEAR()", +"c6e9ff54": "changeBonusDistributionAddress(address)", +"c6ea3037": "_createSale(uint256,uint256,uint256,uint256,address)", +"c6ead8af": "tokensBurnt()", +"c6eae0c5": "limitEth()", +"c6eb8a65": "stage2BeginTime()", +"c6ed3418": "TokenMintPoD()", +"c6ed8990": "addTokens(uint256)", +"c6ed8e1b": "getApprovedProxys()", +"c6eda379": "totalZTKCheckAmounts()", +"c6ee701e": "getInts()", +"c6ee7a2c": "Linkable(address,address)", +"c6eeeb04": "increaseTimeBy()", +"c6f017e1": "addOrgan(address)", +"c6f03aaa": "getRegister(string,string)", +"c6f0557f": "insertarMensaje(uint256,string,string)", +"c6f067d1": "MVPToken()", +"c6f1649f": "deposit(address,uint256,address,address)", +"c6f3a895": "endFirstPeriodTimestamp()", +"c6f47486": "getHistoricalPrice(uint256)", +"c6f482aa": "largeCapDelay()", +"c6f48866": "isGameOver(bytes32)", +"c6f4ebb3": "o_minerador(uint256)", +"c6f54e62": "order(address[2],uint256[4])", +"c6f5b0e0": "getContributor(uint256)", +"c6f5d91f": "getAddressWhiteList()", +"c6f6122d": "transferredManually()", +"c6f664af": "totalInsuranceFlows()", +"c6f6d9d9": "lotteryCount()", +"c6f6f216": "setMaxPerTx(uint256)", +"c6f70370": "generateRoomNightToken(uint256,uint256,uint256,uint256,uint256,bytes32)", +"c6f88b0a": "_hasCorrectTreasury(address)", +"c6f981d7": "setTrap(uint256)", +"c6f9defe": "futureExpanstion()", +"c6fadeb3": "fechAllSumNumForEncourage(uint256)", +"c6faf736": "updatePromoBonus(uint256)", +"c6fc2bae": "ACEEquityToken(uint256,string,string,uint8)", +"c6fd2103": "recordImbalance(address,int256,uint256,uint256)", +"c6fdee56": "isAddress(address,address)", +"c6fe317f": "changeVanityURL(string)", +"c6fe7296": "resetPhases(uint256,uint256,bool,uint256,bool)", +"c6ff3ae3": "EthMark()", +"c6ff4081": "tokenProcess(address)", +"c7005f04": "distributeInternal(uint256,uint256,uint256,uint256)", +"c701672f": "_recordPresalePurchase(address,uint256)", +"c7021c9e": "submitPresetTransfer(address)", +"c7024b98": "deleteHybridization(uint256)", +"c7027329": "isBossWannaCryContract()", +"c7028f96": "burnAllLeftTokens()", +"c702d3b4": "Unregistered(address,address,uint256,uint256,uint256,uint256)", +"c7033137": "settleBets()", +"c7033721": "genesisRoot()", +"c70383a5": "takeOwnerShip(uint256)", +"c7046117": "sendAsGift(address,uint256)", +"c7047fa7": "metadataUrlPrefix()", +"c704e04a": "recordingResultsOfBet(bytes16,bytes16[],uint8[])", +"c704f7ed": "lockName()", +"c705a1a8": "getMerchandise(uint256)", +"c705e1a3": "allowToken(address,address,uint256,bool,bool,address)", +"c7071c3e": "MiningRewardChanged(uint256)", +"c707936a": "Serpent()", +"c707bae5": "getTopNames()", +"c708ed9c": "getPI_edit_15()", +"c7091c5e": "INITIAL_STAGE()", +"c70978da": "UnicornBreeding(address)", +"c7097f62": "linkAddress(address)", +"c7098e91": "decodeOrderTokenAndIsBuy(uint256)", +"c709c7b8": "priceStep7()", +"c70a24af": "ROLE_NEED_LOCK_UP()", +"c70a3f1a": "whiteHat()", +"c70a9246": "GetConsentData(uint256)", +"c70ad05b": "identity_storage()", +"c70bbc13": "emitRevoke(bytes32,uint256,address)", +"c70cc560": "storePassword(string)", +"c70cdad8": "hashBacktestPositions(uint32,int64[])", +"c70cef3a": "WalamaCoin()", +"c70d169d": "answerRequest(uint256,bytes)", +"c70dd8b3": "procureTokens(address)", +"c70e8640": "amountFundTeam()", +"c70ef908": "setPI_edit_33(string)", +"c70f5eaa": "buyCard(uint256)", +"c70f8e71": "enableTypeById(uint256,uint256)", +"c70faf90": "EndMinting(uint256)", +"c70fe6bd": "migrateAuction(uint256,address)", +"c71029e1": "getBankRequests(string,uint256)", +"c7102df7": "__stopBlock()", +"c710a2aa": "marketplace_controller()", +"c7110035": "multiSigWithdrawal(address,uint256)", +"c7120bad": "linkAccount(uint8,string,string)", +"c7120d77": "sendFunds(address,uint256,uint256,uint256,uint256,uint256)", +"c712f3b3": "TradeId()", +"c7133f53": "setAccountS(address)", +"c713a67b": "momentNonceOf(uint256,uint256)", +"c713aa94": "setEndBlock(uint256)", +"c713b10f": "isSameSign(int256,int256)", +"c713bd70": "getMarketerRate()", +"c7143c41": "notSameSeed(string,string)", +"c7144269": "changeSettings_only_Dev(uint256,uint256,uint256,uint256,uint16,uint256,uint256,uint256,uint8,uint8)", +"c7153816": "lowerSupply(uint256)", +"c715533e": "allFrozenTime()", +"c715a2b1": "withdrawnOf(address)", +"c71692b6": "capPreICO()", +"c716b616": "adopt(uint32,uint32)", +"c7172710": "pouseCrowdsale()", +"c7178230": "isDeprecated()", +"c717e9eb": "voidOrRevert(uint256)", +"c718640a": "setDragonSpecialPeacefulSkill(uint256,uint8)", +"c718b272": "Floor(uint32,address)", +"c718b2bb": "YunToken(address)", +"c718d0e0": "_setFreezedBalance(address,uint256,uint256)", +"c7192cda": "EventUpdateWasReset()", +"c7192e44": "setPaid(address)", +"c719348b": "safeCheck(uint256)", +"c71a7aea": "distributedReservedTokensDestinationsLen()", +"c71ad84d": "vehrespond(uint256,uint256,address,bool)", +"c71b583b": "closeRequest()", +"c71ba100": "revokeBalance(address,address,address)", +"c71bee4c": "OMITokenLock(address,address)", +"c71bf8ba": "multiplierOfPrice()", +"c71c0b40": "fundRaised()", +"c71c3f05": "blackListCompanies()", +"c71c6c55": "receiveIncome(bytes32,bytes32)", +"c71c890a": "weekFourStart()", +"c71cb0b4": "buildTile(uint16,uint16,uint8,uint16)", +"c71cbcf3": "recoverAccount(address,address)", +"c71daccb": "checkBalance()", +"c71ddb9f": "releaseContract()", +"c71e48d6": "setOutcome(bytes32,bytes32[])", +"c71e876b": "VESTING_DURATION_2Y()", +"c71eef58": "applyForTokenOneDay()", +"c71f2bae": "AddOpenOrder(uint32)", +"c71f311c": "setFABAcompanyTokensWallet(address)", +"c71f4253": "getNumberOfVotes(uint256)", +"c7216a44": "_generate_special_horsey(address,address,address,bytes32)", +"c721b34b": "setBattleAddress(address)", +"c721b6bd": "grantVestedTokens(address,uint256,uint256,uint256,uint256,bool,bool,bool)", +"c721cfe2": "reClaimBalance()", +"c721f08d": "activateSale()", +"c722328d": "withdrawToMultisig()", +"c722e113": "_transferDivs(uint256,uint256,uint256)", +"c722e462": "CoinX()", +"c7238af7": "escapeDestination()", +"c724772c": "turnOnIco()", +"c72486d2": "Unexpended()", +"c724acb7": "calcDifficulty()", +"c7258d7f": "isUserWhitelisted(address,address)", +"c726c2b9": "getPI_edit_24()", +"c726dea8": "memberArray(uint256)", +"c7277115": "ManagedToken(string,string,uint8)", +"c727980a": "payDeposit(uint256,address,uint256)", +"c7280315": "UnauthorizeToTransfer(address)", +"c7286a21": "removeContribution(address)", +"c7291b7e": "descriptionHashHistory(uint256)", +"c729a567": "withdrawFundToAddress(address)", +"c72a2328": "tier_rate_1()", +"c72a480e": "DGameController(address[])", +"c72b5176": "getGroups()", +"c72b5e4f": "persentRate()", +"c72be838": "gasForDCN()", +"c72c1133": "Log(string,uint256,uint256)", +"c72c757e": "delete_allowedAddress(address,address)", +"c72cbd78": "removeused()", +"c72e1576": "addAddressInWhitelist(address)", +"c72e57c7": "lockedTill()", +"c72e6d03": "p_setRefPercent(uint256,uint256)", +"c72e8baf": "PRICE_3()", +"c72e9e45": "setEgeregAddress(address)", +"c72f0dd9": "Player_HitOrStand(uint256,bool)", +"c7303c61": "createPost(string)", +"c7304f37": "changePool(uint88)", +"c730bbd8": "rateWaiting()", +"c730dfbb": "WemarkToken()", +"c731c504": "restoreFunds(address,address,uint256)", +"c731e124": "rewardslength()", +"c73202ff": "jpPercentageDivisor()", +"c732d201": "currentCount()", +"c7330bf6": "getDepositesCount(address)", +"c7343754": "getLendingItemLength(address)", +"c7347832": "asyncTransfer(address,address,uint256)", +"c734f917": "onTokenTransfer(address,uint256)", +"c73659be": "RexToken(uint256,address)", +"c736a051": "getPlayer(address,uint256)", +"c736e118": "bgxWallet()", +"c7377d80": "Bourneereum(uint256,string,string)", +"c737b7c6": "getTotalTickets(address)", +"c7381593": "Multimember(address[],uint256)", +"c7385f2e": "proofIds(uint256)", +"c738a836": "changeEnabledAddressStatus(address,bool)", +"c7395151": "updateMaxAcceptedDeposits(uint256)", +"c7398dd4": "getCustomValue()", +"c73992e4": "hasApproved(address)", +"c73997b1": "changeBaseValue(uint256,uint256,uint256)", +"c739d31c": "setPrivateSaleAgent(address,bool)", +"c73a2d60": "disperseToken(address,address[],uint256[])", +"c73aae86": "get_Release()", +"c73b187d": "oraclizeMinCallbackGas()", +"c73b302e": "projectsCount()", +"c73c27bc": "getNodeId(uint256)", +"c73c2a45": "WriteBible(uint16,uint16,uint16,uint16,string)", +"c73c933d": "ChangeBurnBoundsOperationEvent(uint256,uint256,uint256)", +"c73d3b30": "getAbilities()", +"c73defce": "ETCHaddress()", +"c73ea367": "setNickName(string)", +"c73ec2eb": "minCompositionFee()", +"c73f0c11": "burnGlobFoneCoin(uint256)", +"c73f20e3": "issueamount()", +"c73fcee2": "CLNTotalSupply()", +"c74073a1": "close(address)", +"c740bc9f": "setLongtermMinter(address,uint256)", +"c7410070": "publicbattlestart()", +"c7411eb4": "calculateAntBuy(uint256,uint256)", +"c741764c": "oldE4()", +"c741d70d": "retrieveFounds()", +"c741e85a": "set_parameter(string,uint256)", +"c741f0f3": "buyBILL()", +"c7420a9f": "store(bytes,address,address,uint256,uint8,uint8)", +"c7423803": "finishRecovery()", +"c7423f26": "strFundDeposit()", +"c74266b3": "HanYinToken()", +"c742bab1": "VUP_TOKEN_SUPPLY_TIER1()", +"c743092e": "Buy(uint256,address,uint256,uint256,uint256,uint256)", +"c7430e28": "Trillionix(address,address)", +"c7431f5c": "changeETXAddress(address)", +"c74352af": "FileServerManager()", +"c74370db": "Transfer(address,address,uint48,bytes)", +"c74442e6": "withdrawNexiums(address)", +"c7445c22": "getPassportId(address,address)", +"c7446565": "startAt()", +"c74590e3": "LogInvestment(address,uint256)", +"c745ca9a": "transferBack(uint256,address,address)", +"c745dab9": "MakerDepositedEther(uint256)", +"c7464e8a": "showRandomWinners()", +"c746a52d": "showme(uint256,uint256,uint256)", +"c746b299": "PSCToken()", +"c746c8f4": "addAllowedSender(address)", +"c747ef76": "AbieFund(address[])", +"c747f120": "totalIssuerCollateralisation()", +"c74803de": "_isContained(bytes32,bytes,bytes32)", +"c7489441": "closeMarketMaker(uint256)", +"c748b54b": "PeerWalletsERC20Token()", +"c74a2449": "canUserAnswerQuestion(address,uint256)", +"c74a4000": "cnrtoken()", +"c74a690c": "price_in_wei()", +"c74a827c": "setMonsterCreatorAddress(address,address)", +"c74a96eb": "setHGT(address)", +"c74abe43": "getMyTokensValue()", +"c74b1e01": "startPresaleTime()", +"c74b5a3e": "open5Chest()", +"c74c251f": "addSafely(uint256,uint256)", +"c74c851a": "isValidInvestment(address,uint256)", +"c74ca049": "unshareKey(bytes32,address)", +"c74ce765": "TESTTESTToken(address)", +"c74e907b": "commit(address,uint256,uint256)", +"c74fc077": "guards(uint256)", +"c74fda29": "_distributeAdvisorsToken(uint256)", +"c7506049": "_processSalePurchase(address,uint256)", +"c7508ec7": "removeClaim(address,address,bytes32)", +"c750938e": "shiftcashToken()", +"c750c3b1": "allocateEndTime()", +"c750cb79": "getHighestBidder(uint256)", +"c750df73": "submitContract(bytes32)", +"c7516da7": "CITY_INCREASE_RATE()", +"c751e027": "PoolTeam()", +"c752746e": "tokenHoldersClaimed(address)", +"c752a999": "MoneyTokenPromo(uint256,string,uint8,string)", +"c752ff62": "totalUpgraded()", +"c75363b6": "BEGIN_TIME()", +"c7542f1d": "GCCToken()", +"c754fc08": "addGroup(uint256,uint256,uint256)", +"c75514e8": "executeOptions(address,uint256,string)", +"c7559da4": "uint256ToBytes(uint256)", +"c7573e82": "registerStudent(address)", +"c7574839": "communityWallet()", +"c7576e8f": "TOBToken()", +"c7576ed4": "finalizeMigration(address,address)", +"c75782be": "startup(uint256,address)", +"c7586219": "burnShares(uint64)", +"c7586cde": "THIRD_USER_CUT()", +"c758b813": "ausGroupAllocation()", +"c75902cf": "iwtfundtokens()", +"c7591d35": "checkGuess()", +"c7593f01": "SKLAuction()", +"c75abf24": "setup(uint256,uint256,uint256)", +"c75bc4fb": "setMaintenanceLock(bool)", +"c75bc6f8": "UniverseShieldToken(address,address)", +"c75c6a06": "batchCancelVoteForCandidateByIndex(uint256,address[],uint256[])", +"c75d9d29": "unlockPurchase()", +"c75e8d55": "setRecipientString(string)", +"c75fb740": "Error(bytes)", +"c75fc22f": "freeEther()", +"c7600cde": "getInitialReporterAddress()", +"c7602316": "deploy(string)", +"c7614487": "MAX_CROWD_FUNDING_ETH()", +"c761a2f5": "revertFeeCalculatedFlag(bool)", +"c762547d": "contractCreatedCount()", +"c762c463": "mUsers(address)", +"c762d3ea": "calculateReferralBonus(uint256,uint256)", +"c762d5f7": "setBorrower(address)", +"c763400e": "endpreIco(bool)", +"c763e5a1": "chain()", +"c764427c": "addAllowedContract(address,address)", +"c764d4c4": "withdrawCountriesToken()", +"c764ee57": "VIWOZ()", +"c7656f6e": "startProject()", +"c765defd": "setBeneficiary(address,bytes32)", +"c76668cf": "transferCheck(address,address,uint256)", +"c7669337": "fundMinting(address,uint256)", +"c766ce02": "addFactProviderToWhitelist(address,address)", +"c768051a": "gla()", +"c768a4cd": "upgradeSword(address)", +"c768ac01": "totalWithdrew()", +"c76a4bfb": "relayReceiveApproval(address,address,uint256,bytes)", +"c76a74df": "Bitscoin()", +"c76b838c": "bulkSell(uint8[],bytes6[],uint32[],uint32[])", +"c76c1ba5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"c76c68d0": "CalcToc(uint256,uint256,uint256)", +"c76c9269": "ethVest()", +"c76d0754": "fiatSend(address,uint256,uint256)", +"c76de3e9": "Start(string,string)", +"c76df481": "getArmyOwner(uint256)", +"c76e7f32": "addressToPersonId(address)", +"c76f0d13": "COSTToken()", +"c76f80c8": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint32)", +"c772173a": "ProsperToken()", +"c7725426": "setAuthorizeMintToken(uint256)", +"c772af39": "boss()", +"c7736abf": "windowOpenTime()", +"c77547f7": "maxTimeIntervalHB()", +"c7760b11": "getlevel(address)", +"c77636fc": "PauseOwnerAdmin(bool)", +"c77684f9": "ClipperCoin(uint256,string,string)", +"c776cc42": "FREEDOMCoin()", +"c7775011": "setSlaveWallet(address)", +"c77810a4": "Pot()", +"c778427b": "migrationInitiated(address)", +"c7786275": "Bitansuo()", +"c778a46b": "doPresaleMinting(address,uint256,int256)", +"c7798891": "TokensReleased(address,uint256)", +"c77a0de6": "xfer(uint256)", +"c77a16ed": "resumeTransfers()", +"c77ae9bf": "resetRaz(uint256,address,uint256)", +"c77bd8cc": "acceptAdminToo()", +"c77bdfce": "bindToken(address,address)", +"c77c00f8": "openNewBet(address,uint256,uint256)", +"c77db34e": "PWNasdas()", +"c77dff62": "shrimpyramid()", +"c77e7614": "getTotalWithdrawAmount()", +"c77ef9b8": "setAccessProvider(address)", +"c77f58c8": "transferMinusComission(address,uint256,uint256)", +"c77fe4d6": "incentivisingSupply()", +"c781d7b0": "calculateAntSell(uint256)", +"c781f97b": "getCurrentCrabPrice()", +"c7825c3f": "Pruebalillo()", +"c782fc60": "getExtraBalance(address)", +"c783dc9e": "pullEther(uint256)", +"c783fb10": "validBalanceOf(address)", +"c784648d": "addIdArrayItem(address,uint256,string,string,uint256)", +"c7847d19": "createAnnoTrade(bool,uint256,uint256)", +"c7857d27": "setMyName(string)", +"c786a66f": "_createSchedule(address,uint256,uint256,uint256,uint256)", +"c786ebd1": "LogPrepareToStart(string,uint256,uint256,address,address)", +"c7876ea4": "basePrice()", +"c7878fa0": "setHumanityFund(address)", +"c7888a07": "claimSuperDragonEggs()", +"c7891514": "forthWeekMainICOBonusEstimate()", +"c78974de": "get_test_data_length()", +"c78982d5": "getIntervalCoefficient(bytes2,uint256)", +"c789ea87": "acceptFoundation(string)", +"c78a33e1": "DestroyEvent(address,uint256)", +"c78a4c98": "icoRaised()", +"c78a8dfe": "Kardanor()", +"c78ad77f": "percentage()", +"c78af2f7": "contributeByProxyContract(address,uint256)", +"c78b200c": "transferableFromBlock()", +"c78b616c": "totalListings()", +"c78bd060": "makeInvestment()", +"c78c0138": "timestamp_contract_start()", +"c78c3a83": "getPredictions()", +"c78cdf66": "mintTimelocked(address,uint256,uint32)", +"c78d7380": "COINECTToken()", +"c78d846d": "PTCToken()", +"c78dc603": "alt_buyCollectible(uint256,uint256,int256)", +"c78e139a": "setUpgradedContractAddress(address)", +"c78f3e18": "starteth()", +"c78fc487": "indexedByOwner(address,uint256)", +"c791316e": "minFundingAmount()", +"c791bd21": "AngelToken()", +"c791cc39": "BOECoin(uint256,string,uint8,string)", +"c791e16b": "platPriceOracleContract()", +"c792024a": "tierRates(uint256)", +"c79343e5": "isSYNVault()", +"c7939f34": "oddsTotal(uint256,uint256)", +"c79403f5": "moveFurnaceData(address[],uint16[],uint256[],bool[],uint256[])", +"c7941a09": "setDelegadoDeEscuela(bytes32,bytes32,uint8,uint8)", +"c794549e": "setDesignatedReport(bool)", +"c7946842": "URLOf(uint256)", +"c794ef10": "purchaseCostEther(uint256)", +"c794f575": "makeAnnualInvest(uint256)", +"c7956846": "get_solved(address)", +"c795dd24": "availableTokenBalance(uint256,uint8)", +"c7963ae8": "Tabo()", +"c7968135": "totalNumberOfFunders()", +"c798b5cf": "CommunityToken()", +"c7990f70": "SetDevFee(uint16)", +"c7995a4e": "_registerTrade(uint32,uint256)", +"c79a68cf": "setPrices(uint256,uint256,string,string)", +"c79ba27d": "kscTransferFrom(address,address,uint256,string)", +"c79bb895": "SGACrowdsale()", +"c79bdb46": "setRewardPercent(uint256,uint256)", +"c79c9105": "countOfPublicKey(bytes32)", +"c79eaa22": "sub(uint96,uint96)", +"c79f5321": "update_data()", +"c79f7cef": "_postValidatePurchase(address,uint256)", +"c79f8b62": "error()", +"c79fc609": "addressC()", +"c7a02061": "totalEtherCollected()", +"c7a08487": "_generateRandomDna()", +"c7a16847": "SetRewardMulti(uint256)", +"c7a16965": "testUint(uint256)", +"c7a1865b": "play(bytes32)", +"c7a1f221": "tokenPriceInCents()", +"c7a1fb36": "PRE_SALE_CAP()", +"c7a24403": "Illuminatus()", +"c7a28247": "stopBuyingTokens()", +"c7a2a663": "getCodeAtAddress(address)", +"c7a323fe": "ACTION_INITIAL_BIDDING()", +"c7a32726": "StartCrowdsale()", +"c7a37657": "getCfd(uint128)", +"c7a3778f": "testControlRetractLatestRevisionNotUpdatable()", +"c7a4af15": "setPrice(uint8,uint128)", +"c7a4cf8d": "checkOverMaxcap(uint256)", +"c7a4e4bc": "VIPCHAINToken()", +"c7a5d285": "extract(address)", +"c7a6c454": "confirmTransaction()", +"c7a6c6d4": "_creditTokens(address,uint256)", +"c7a86dd2": "updateEnergy(uint32,uint32,uint256)", +"c7a86e33": "signedApproveCheck(address,address,uint256,uint256,uint256,bytes,address)", +"c7a96920": "stopICO_20_March()", +"c7a9a64b": "depositNetfRevenue(uint256)", +"c7a9d6de": "startICO(address)", +"c7aa278e": "poolInvestors()", +"c7aaa83f": "Bounty0xToken()", +"c7abc42a": "getgamecard(uint256)", +"c7ac0909": "AddedName(address,string,uint256,address,uint256)", +"c7ac14b1": "dividendCutPercentage()", +"c7acae2e": "getServerAddress()", +"c7ad31b0": "LogHodlStartSet(address,uint256)", +"c7adb61f": "initializeTreeCoinProject(address,uint256,uint256,address,address)", +"c7adef28": "getCitationRecord(bytes32,uint256)", +"c7ae3ad5": "fillBuyOrder(uint256,uint256,uint256)", +"c7ae7451": "addEvent(address)", +"c7ae9632": "xfer(address,address,uint256)", +"c7af18f1": "SedPoSToken()", +"c7af3dd1": "updateCost()", +"c7afe9f2": "setTokenAddress(address,address)", +"c7aff0d7": "manuallyProcessTransaction(address,uint256)", +"c7b0235b": "DPPCrowdsale()", +"c7b0f0ca": "lockTokensPercent()", +"c7b0fc5e": "usedItem(uint256)", +"c7b11fca": "mainMaxContribution()", +"c7b160db": "getTotalNumberOfAddressesReceivedAirDrop()", +"c7b1fd00": "usdPerEthLogSize()", +"c7b23ec6": "initalizeOrgan()", +"c7b27a25": "IOReceipts()", +"c7b31ed0": "store(address,address,uint256,uint8,uint8,bytes)", +"c7b3b0d4": "getCompanyInfo(bytes32)", +"c7b41aa9": "getSmartCoins()", +"c7b43f02": "expressBuyNums(uint256,uint256[])", +"c7b5716d": "createSellOrder(address,uint256,uint256,uint256,uint256)", +"c7b6084c": "backendOperator()", +"c7b6ccae": "opetToken()", +"c7b6fd6a": "subDays(uint256,uint256)", +"c7b799ae": "addressFunc(address,address)", +"c7b7d6ca": "sendResearchAndDevelopment()", +"c7b81f4f": "isEpochDataSet(uint256)", +"c7b850dd": "whitelistedContributors(address)", +"c7b87d74": "setOldTokenAddress(address)", +"c7b97288": "addTokenEmission(uint256,uint256,uint256)", +"c7b98dec": "right1(uint256)", +"c7b9bc9e": "Token(uint256,string,uint8,string,string)", +"c7b9c355": "setSecondBonusPercent(uint256)", +"c7ba24bc": "claimAndConvert(address[],uint256,uint256)", +"c7ba9264": "KAL4Token()", +"c7bb38e7": "setAmount(bytes32,uint256)", +"c7bb42f7": "TEAM0()", +"c7bc747d": "retrieveTokenByContract(address,uint256)", +"c7bce243": "Menu05()", +"c7bdbb95": "allowTransferOwnership(bool)", +"c7bdcde9": "IYAKIN()", +"c7be44fa": "banReferrer(address)", +"c7be7ae3": "frozenSupply()", +"c7bec318": "removeAccountAddress(address)", +"c7c049fc": "saleGoal()", +"c7c0c5bf": "modifyMarking(bytes32,uint256)", +"c7c16353": "weiToRaise()", +"c7c2aa25": "WarriorsBackToHome(address,address,uint256)", +"c7c2aee3": "personalCap()", +"c7c3268b": "setBaseUrl(string)", +"c7c36959": "GubbermentOverthrown(address,address)", +"c7c3b1c1": "canTerminate()", +"c7c3b2dd": "setMockedTotalCollected(uint256)", +"c7c40fbb": "addPassportLogic(string,address)", +"c7c4ff46": "depositor()", +"c7c54e4d": "theEBCC(uint256,string,uint8,string)", +"c7c5f59d": "forBounty()", +"c7c625ee": "rand(address)", +"c7c6939c": "LongPlace(address[2],uint256[8],uint8,bytes32[2],uint256)", +"c7c7322b": "testCantInitiateIncorrectSale()", +"c7c7e9ea": "getAllowed(address,address)", +"c7c806cb": "ambassadorAddress()", +"c7c80f02": "teamLockUp()", +"c7c83804": "setFinancingsAdd(address)", +"c7c8b07b": "KillSwitch()", +"c7c8c424": "ownersEth()", +"c7c8ff35": "getNeutralMutationCost(uint8)", +"c7ca07bb": "QuantityAvailable()", +"c7cb94e3": "GenPlayerRatio(address,uint256)", +"c7cbb9c8": "_createArea()", +"c7cc3743": "addContractAddr()", +"c7cc4ee9": "later()", +"c7cc63aa": "getBetTitle()", +"c7ccc559": "upgrade_cap()", +"c7cd31d5": "setLLV_edit_23(string)", +"c7ce060b": "publicDeductDeposit(address,uint256)", +"c7ceac99": "calculateBattleBoost(uint16,address,address)", +"c7cec7f8": "versions(bytes32)", +"c7cefbf1": "IDH()", +"c7cf28fe": "canClaimTimeout()", +"c7cf6a2a": "LJSToken()", +"c7cf8075": "getAvailableDevFund()", +"c7d044be": "AutoChainToken()", +"c7d128d1": "readTotalNumberOfUserPurchases(address)", +"c7d20f82": "addMeterpoint(address,int256)", +"c7d22929": "betOpen(uint256,string,string,string,string)", +"c7d26e90": "getAccessoryClaims(uint64)", +"c7d4f68e": "getRobotForUserByIndex(address,uint256)", +"c7d586c9": "provideProofOfWork(uint256)", +"c7d5b6f1": "cancelSellOffer()", +"c7d5c0af": "XVOTOKEN()", +"c7d5d171": "costRecharge(uint256)", +"c7d5dd36": "Factory(address,address)", +"c7d6e988": "fundOwnerWallet()", +"c7d6faf1": "easyPropose(address,uint256)", +"c7d77970": "registerNameXaddrFromDapp(address,bytes32,address)", +"c7d7b5a6": "fillOrder(address[5],uint256[6],uint8,bytes32,bytes32)", +"c7d96304": "canMateWithViaAuction(uint256,uint256)", +"c7d9f4d1": "transferableBalanceOf(address)", +"c7da93b7": "specialTransfer(address,uint256,uint256,uint256)", +"c7daae0a": "firstFreeAddressIndex()", +"c7dab436": "vestingTime()", +"c7daceb1": "acceptBuyNowOffer(uint256)", +"c7db04d7": "SelfDestructManager()", +"c7db3342": "getCurrentRoundKey()", +"c7dbbc47": "nextTicket()", +"c7dbc2be": "minimumPodSize()", +"c7dd4b4f": "gameID()", +"c7dddf0f": "itemHistoryOf(uint256)", +"c7de2d13": "WithdrawToken(address,uint256,address)", +"c7dea777": "areOldMiningKeysVoted(uint256,address)", +"c7deda22": "Doug()", +"c7df0a90": "all_eth()", +"c7df9054": "getBuyUnitsInformations()", +"c7dfabcc": "Buy(uint8,string)", +"c7e04670": "publicSaleTokenPrice()", +"c7e0635d": "AGENT_STATUS(bytes32,address)", +"c7e09d9c": "getSides(uint256)", +"c7e12723": "Erc20Test(string,string,uint8)", +"c7e210c3": "optionPoolMembersLockTotalOf(address)", +"c7e22ac4": "setOracleGas(uint256)", +"c7e284b8": "getTimeLeft()", +"c7e293d9": "allocateFunds(address,address,uint256)", +"c7e35a5c": "LOCK_START()", +"c7e3b6e8": "airdropAndVault()", +"c7e3ff4b": "pregnantMonsters()", +"c7e40b3a": "StatXCoin()", +"c7e416c5": "LOG_SuccessfulSend(address,uint256)", +"c7e4f453": "TokenFactoryImpl(address)", +"c7e50dc9": "isLOC(address)", +"c7e52480": "convertYourTokens()", +"c7e56740": "_getIndex(address,address)", +"c7e58644": "getSharesCount()", +"c7e59334": "toggleAttachedEnforcement(bool)", +"c7e5fc3b": "GlobalTechToken()", +"c7e67360": "GAS_BUFFER()", +"c7e6926e": "_airdropTotal()", +"c7e6d04f": "ownerConfig(address,uint256,uint256)", +"c7e73adf": "getParticipantSource()", +"c7e83451": "matchMultipleOrders(uint64[],uint64[])", +"c7e92738": "MicroBTC()", +"c7e975b8": "partner2_voted_update_marriage_status()", +"c7e9aaaf": "_isSiringPermitted(uint256,uint256)", +"c7ea07bb": "SealTokenSale(address,address,address,uint256,uint256,uint256,uint256)", +"c7ea8a68": "EOSToken()", +"c7ebc8fe": "getWinnings(address,uint256,uint256)", +"c7ed1e86": "getNoOfMsgs(address)", +"c7ed4555": "DepositSlot(address)", +"c7ed4d8c": "distributeVM(address[],uint256,uint256)", +"c7edaf33": "TheGoDgital()", +"c7edf88c": "DOW_SAT()", +"c7ee005e": "prime()", +"c7ee1c4e": "getPreviousSeed()", +"c7ee98c2": "trustedBurnTokens(uint256)", +"c7ef47d7": "isKill()", +"c7efa689": "getSaleDay(uint256)", +"c7efb162": "setup(address,address,address,uint256,uint256)", +"c7efb8ab": "ledger(address,bytes32)", +"c7f04e65": "purchase(uint32)", +"c7f132d5": "QuarterCoin()", +"c7f18d5b": "updateData(uint256,uint256,uint256,uint256,uint256,bytes,bytes)", +"c7f1f06f": "GetEmail(uint256)", +"c7f24b11": "getCCH_edit_8()", +"c7f2c3d9": "EasyInvest10()", +"c7f2e6af": "Contribute(bytes20)", +"c7f300ed": "CrowdSale_ModifyEndDate(uint256)", +"c7f3166d": "getBetInfo(uint256,uint256)", +"c7f31f1c": "HandWins(address)", +"c7f36010": "setupClaim(uint256)", +"c7f423c7": "setLeaf(uint256,bytes32)", +"c7f42c64": "battleFee()", +"c7f43b57": "TIER2_CAP()", +"c7f46dea": "testRewardBS(bytes32)", +"c7f5f1e8": "DistributeNextNTokens(uint256)", +"c7f6f40c": "updateKYCStatus(uint256)", +"c7f6fa60": "EIDTokenERC20()", +"c7f71103": "futrMiner()", +"c7f7475c": "AdminGroup(string)", +"c7f758a8": "getProposal(uint256)", +"c7f7be5c": "setGxCoinContract(address)", +"c7f84605": "___upgradeTo(address)", +"c7f86c37": "withdrawFundsRP()", +"c7f8fe65": "getBalanceReleased()", +"c7fa1d47": "Hedge()", +"c7fa52de": "setRegistryAddr(address)", +"c7faa88d": "collectProfit()", +"c7fb117c": "depositCancel(uint256,uint256)", +"c7fb9aab": "displaymultisig()", +"c7fbad27": "revealStart()", +"c7fc9ace": "WorldNode()", +"c7fccd3f": "isAuthorizedForToken(address,address,address)", +"c7fde81f": "changePOI(address)", +"c7fe11d4": "_createCaptainToken(address,uint256,uint32,uint32,uint32,uint32,uint32,uint256)", +"c7fee63e": "updateRate()", +"c7ff1584": "isHalted()", +"c7ff1b60": "maxCapReached()", +"c7ff2086": "getPropertyColorsOfRow(uint16,uint8)", +"c8004293": "lastKnownPropertyAddress()", +"c80094b3": "testEquals()", +"c8016c85": "MAIN_SALE_BONUS_PERCENTAGE_PHASE1()", +"c8027210": "Malaysia370()", +"c8028bee": "auditorRegistry()", +"c803486b": "getAvailableFunds(address)", +"c803ae2a": "kycComplete()", +"c803f981": "care(uint256)", +"c8045941": "changeDescription(string,string)", +"c8046827": "registerBurn(uint256)", +"c804a58e": "toggleRefunding()", +"c8051885": "isWithinContributionRange()", +"c805801c": "VoipTken()", +"c805914a": "setRespectRequiredToRecruit(uint256)", +"c805b6bc": "PRESALE_TOKEN_HARD_CAP()", +"c805f68b": "setRelay(address)", +"c806286d": "setFreeze(uint256,bool)", +"c80667e3": "appendUintToString(string,uint256)", +"c80675de": "sendDiamond(address,bytes32,string,bytes16,uint256)", +"c806a91d": "TOKEN_TOTAL_CAP()", +"c80743c5": "maximumTokenAmount()", +"c807be58": "endTimeSale2()", +"c807cb02": "Uninjected(address)", +"c807e645": "JECKAirdrop()", +"c8081bd2": "requestMutualJobCancellation(bytes16,address,address,uint256,uint256)", +"c8088830": "_canPayOraclize(uint256)", +"c808cf86": "exchangeHelenium(uint256,address)", +"c80944e5": "buildRight(address,uint256)", +"c80a589b": "withdrawTokenBalance(uint256,address)", +"c80b05e1": "isViolated(address)", +"c80bbb17": "ReserveFund()", +"c80becb6": "enablePreSale()", +"c80c14a5": "getBankBalanceWEIInfo()", +"c80c28a2": "getNumberOfParticipants()", +"c80d3694": "saleWeiCap()", +"c80db88c": "getSchellingExpansion(uint256)", +"c80e0ddd": "saveCode(uint256,string)", +"c80e3e1e": "SingularityTest23()", +"c80ec522": "withdrawn()", +"c80f9a4f": "transferPokemon(address,address,uint256)", +"c81050e6": "checkBranchInEpisode(uint256,uint256)", +"c8117b5b": "extractBalanceOfLength()", +"c81196da": "numberOfMilestones()", +"c8135ba1": "bids_decrypted_count()", +"c813c30e": "testThrowSomething()", +"c813e02e": "_isLeapYear(uint16)", +"c814324c": "timeBought(address)", +"c81450a0": "RaffleResult(uint256,uint256,address,uint256,uint256,bytes32)", +"c814864c": "CreateChips(uint256,uint256,uint256,uint256,bool)", +"c8149cbc": "setMigrationLock(bool)", +"c8159d70": "Seriality()", +"c815c9ef": "TerraEcoToken()", +"c8162068": "setTeamAddr(address)", +"c8162497": "BETX()", +"c8166a8a": "Question()", +"c817d75d": "Transfer(address,address,uint256,uint256,uint256)", +"c817e84d": "addWhitelisted(address,bool)", +"c8187cf1": "determineReward(uint256)", +"c818acf7": "createCloneToken(address,uint256,string,uint8,string,bool,address)", +"c818faec": "updatedAt(uint256)", +"c8193841": "addSoftwareVersionRecord(bytes32,bytes32,uint256)", +"c8199231": "createContractTot(string,uint256)", +"c8199826": "buyTickets()", +"c819f6e9": "levToken()", +"c81a5455": "Milestone_CloseTheIco(string)", +"c81a7d10": "CurryCoin()", +"c81bd106": "approveNewOwner()", +"c81c590d": "getEtherAmount(uint256)", +"c81caae7": "acceptMember(address,string,string)", +"c81cbc5c": "MIST()", +"c81cf764": "getAmountFromBuyer(address,address)", +"c81d1d5b": "getPunk(uint256)", +"c81e05ad": "KODO()", +"c81eccda": "getTokenId(bytes)", +"c81ede67": "pollBurnQty()", +"c81f49cb": "getTotalPaid(address,uint256)", +"c8216f33": "getLineUpEnable_default()", +"c8226e61": "withdrawEgereg(uint256)", +"c822bd3d": "transferCost(bytes16,uint256)", +"c822d7f0": "isRegistered(string)", +"c8234ac8": "createTokenUri(uint256)", +"c82467c9": "ComputeTokenPrice()", +"c8248f8d": "PreICO(address,address,address,address,address)", +"c824a222": "auctionsOf(address)", +"c82531a3": "createAuction(uint256,address,uint256,uint256,uint256,address)", +"c825a939": "fundingRatePredictionBonusPoolInIBC()", +"c827a7bb": "testExternal(uint256[20])", +"c82829e0": "setSoftHardCaps(uint256,uint256)", +"c828371e": "getStartTime()", +"c828e6ee": "getCurrentlyClaimableAmount(address)", +"c8290efd": "zen()", +"c8291dbd": "increment(address,address)", +"c829958c": "isImported(address,address)", +"c8299b10": "gotransfer()", +"c8299ed8": "afterClaim(uint256,uint256,uint256,uint256,uint256)", +"c829b0e3": "MAX_LAYERS()", +"c82aac47": "searchByTag(bytes32)", +"c82b8ec5": "EtherDaruma(address,address,address,uint256,uint256,uint256)", +"c82bb37b": "PotSplit(uint256,address,bool)", +"c82bd265": "ContributionAccepted(address,uint256,uint256)", +"c82c73c1": "isAddressSet(address)", +"c82cd463": "transferFundkeeper(address)", +"c82cd8e6": "ControllerRetired(address)", +"c82d81dd": "GICAToken()", +"c82db402": "ownerSetOraclizeGas(uint256,uint256)", +"c82f2418": "decodeTokenOrderTokenAndIsBuy(uint256)", +"c82f8d9e": "distributeToken(address,address,uint256)", +"c83068eb": "setPre(uint256,uint256,uint256,uint256,uint256)", +"c8306c89": "set_arbits(address,address,uint256)", +"c830b89d": "ReleaseDateChanged(address,uint256)", +"c830c656": "increasePermillage()", +"c83126ed": "generateVoteForDelegationSchemaHash(uint16,address,bytes32,address)", +"c831306e": "icoTimeBonusPhase2End()", +"c831391d": "getPoolOverlapSize()", +"c83261bd": "claimTokenFor(address)", +"c83281e9": "UserAccount(bytes32,bytes32,bytes32,bytes32,bytes32)", +"c832b00d": "limitDateCrowdWeek3()", +"c8335143": "AlekseiZaitcevPrivateSale(uint256,uint256,uint256,address)", +"c8335ba0": "setInitSize(uint256)", +"c833d7b1": "BigbomContributorWhiteList()", +"c834d03d": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[3])", +"c83507a8": "removeAdv(address)", +"c836292b": "teamMembers(address)", +"c836efcb": "_permitted()", +"c83780a2": "crowdsaleCounter()", +"c838ccb6": "getDelegates()", +"c839008e": "setPixelPropertyContract(address)", +"c8391142": "j1Timeout()", +"c83923c5": "getMetadataChannel(string)", +"c83927a0": "pdo()", +"c8393ba9": "initiateWithdrawal(address,uint256)", +"c8398947": "currentStateActive()", +"c839c0de": "CreateVersion(bytes,string)", +"c83a7e94": "AEToken()", +"c83a9472": "deathData_a11()", +"c83a981c": "openPool(uint8)", +"c83abb40": "registerNotary(address,string,string,string)", +"c83ac557": "ChangeCommunityHolder(address,address)", +"c83be888": "single_move(uint256,uint8,uint8)", +"c83cb16c": "_not(bool)", +"c83ea900": "soldDET(address,uint256,bytes32)", +"c83ec89d": "tradeWithOutputFixed(address,address,address,uint256,uint256)", +"c8401567": "betbucketTwo()", +"c840b187": "goodsNotReceived(uint256)", +"c841df4f": "getMonsterStats(uint256)", +"c8420d2f": "CollectibleIndex5()", +"c8422c2d": "boostrapParty(address,address)", +"c8435ba2": "levelOneTokenNum()", +"c843c0c8": "getMyAlien()", +"c8443fad": "revokeExchanger(address)", +"c8449b65": "Gold()", +"c84640f5": "addtotalCardValue(uint256,uint256)", +"c846690b": "initialiseToken()", +"c847259c": "changeClub(address)", +"c84748f9": "returnFrozenFreeFunds()", +"c848a0bc": "notifySellToken(uint256,address)", +"c848fab7": "SeeleToken(address,address,uint256)", +"c84920cb": "Ubisoft()", +"c84a6140": "BackdoorBurner(uint256,string,uint8,string)", +"c84a8766": "setRegionImageDataCloud(uint256,uint256,uint256,string)", +"c84aba9b": "demurrageBalance(address,address)", +"c84b0555": "token(address,string,string)", +"c84b1ce7": "PUBLIC_RESOLVER_LABEL()", +"c84b470f": "SALE_PERCENTAGE()", +"c84ba84a": "finishedPurchase()", +"c84c009b": "Operated(address)", +"c84c5963": "setPauseCutoffTime(uint256)", +"c84c692a": "isTradableFciInSession()", +"c84c9ef5": "LastName()", +"c84ca867": "getCurrentPriceAttoTokensPerWei()", +"c84cda0f": "setRate(string,uint256)", +"c84d56e0": "setRealmSale(uint256,uint256)", +"c84eb9e5": "invest(address,bytes)", +"c84f5d6f": "RowanCoin()", +"c850029e": "returnTokenOwnership()", +"c85147c5": "mediumCount()", +"c8517b48": "CNDTTokenDeposit()", +"c851b643": "legendsToken()", +"c851ed7c": "startNewVote(uint256,string)", +"c8520131": "Withdrawable()", +"c85234c7": "startPreICOStage3()", +"c8525c09": "unlock(bytes32,bytes32)", +"c853c03d": "newDraw(uint256,uint8[3],uint256,uint256,uint256,uint256)", +"c8544e81": "addGenesisPairs()", +"c854db91": "vault_refund(address)", +"c85501bb": "minThreshold()", +"c855d689": "returnLongAddress(bytes32,uint8,bytes32[2])", +"c855e7bb": "tokenForTeamGranted()", +"c8578967": "setNewChecker(address,address)", +"c857a88c": "createDataRequest(address,address,uint256,uint256)", +"c8582572": "affiliateCommission(address)", +"c8583ad6": "UnregisteredPrefix(string,address)", +"c8583e69": "getEthUsdRate()", +"c858c017": "testMsgSenderInVoters()", +"c859c482": "holdBalanceOf(address)", +"c85aff48": "tokenNAVMicroUSD()", +"c85b7941": "totalEthBankrollReceived()", +"c85bb02a": "isParticipating(uint256,address)", +"c85bb1f7": "_doMapAuto(address,string)", +"c85bc22d": "getDefrostFactor()", +"c85c11eb": "TOKEN_SECOND_PRICE_RATE()", +"c85c75b2": "completeCodeUpdate()", +"c85dba67": "getPrefix(uint32,int256)", +"c85e07b9": "stamp()", +"c85e0be2": "setHost(address)", +"c85e1f73": "totalRecalled()", +"c85ee477": "FileCoinCash()", +"c85f6a80": "emission(address)", +"c85fd4f8": "deployToken(string,string,uint8,string,address,bool,address)", +"c86039da": "redeemedSupply()", +"c8612b2f": "TOKENS_FOR_SALE()", +"c861f243": "_getBonus(uint256)", +"c861f3a0": "houseStake()", +"c8622c24": "claim(address,bytes32)", +"c86283c8": "withdrawTo(uint256,address)", +"c862a134": "feePercent_()", +"c8636bb9": "forbidToken(address[])", +"c8643bc2": "MintOperationEvent(address,uint256,uint256,uint256)", +"c864e760": "recordCommissionEarned(uint256)", +"c865164b": "StakingPriceFeed(address,address,address)", +"c865c29b": "HopiumCoin()", +"c865cadb": "setActiveValueBonus(bool)", +"c86662a3": "addOwner_(address)", +"c86779a4": "lastBlock_v14()", +"c867cccb": "Contribution(address,address,address,address)", +"c867ea63": "GoldConnect()", +"c867fa29": "BookERC20EthV1p1Factory()", +"c86813a8": "PassContractorCreator()", +"c8685f21": "validUsername(string)", +"c868a569": "canBreed(uint40,uint256,uint40,uint256)", +"c8690233": "pubkey(bytes32)", +"c8691b2a": "getHistory(uint256)", +"c8695e59": "RPS(bytes32,address)", +"c86a90fe": "sendCoin(uint256,address)", +"c86a9dea": "isKickoffEnabled(uint256)", +"c86b7001": "randomOrgAPIKey()", +"c86c50f7": "changeAllowInvestment(bool)", +"c86d0251": "_getTeamSupportAmount(uint256,uint256)", +"c86dca5a": "isExploring(uint256)", +"c86e25d7": "tokenCreateContract()", +"c87022d3": "startMonarchyGame(uint256)", +"c8705544": "payAmount()", +"c870ef78": "MINING_POOL_HOLDER()", +"c8713608": "HELIX()", +"c87158fa": "_addBlockProducer(uint256,address)", +"c87235fd": "burnRemaining(address)", +"c872da3c": "KIND()", +"c8738351": "uintFloor(uint256,uint256)", +"c8744434": "lastTransferQueueIndex()", +"c8750d8a": "testHitSoftCapPresale()", +"c8756f12": "getTotalSponsorship()", +"c875b1fb": "distributeBonuses()", +"c875d16f": "ArthurStandardToken(uint256,string,uint8,string)", +"c8765ff2": "rateICO()", +"c87744d9": "_approvedForTransfer(address,address,uint256)", +"c8781368": "freezedMoment()", +"c8788134": "discountedPrice()", +"c878851d": "setCreate(bool)", +"c878dad9": "multiFreeze(address[],bool[])", +"c8796572": "collectFees()", +"c87a31cd": "fillOrder(bytes32,address[5],uint256[6],uint8,bytes32,bytes32)", +"c87b36ed": "disableBetting()", +"c87b56dd": "tokenURI(uint256)", +"c87be1af": "recoverHashSigner(bytes32,bytes)", +"c87c07de": "deprecateMeleeSubtype(uint8)", +"c87cfe63": "setData(uint256[])", +"c87e5613": "setMaxTokenBuyin(uint256)", +"c87e8bd0": "icoRound6()", +"c87f9386": "setAllItemActive(address,address,bool)", +"c8804b7b": "DSC()", +"c88098f2": "setParticipationFee(uint256)", +"c880fab1": "dragonTreasureToken()", +"c8813ffd": "addToVIPList(address[])", +"c881b3c0": "AllowedGasPriceUpdated(uint256)", +"c88215e7": "calculateExcessBalance()", +"c882acc8": "deleteMemberOfGroup(address,uint256)", +"c882ee8c": "testUint(int256,uint256)", +"c882ef92": "GameOpened(uint256)", +"c8830ddf": "ECryptoToken()", +"c883346e": "_getProviderIsForRent(uint256)", +"c8833f56": "setTiersInfo(uint8,uint256[],uint256[],uint256[],uint256[],uint8[2])", +"c883d3fa": "addMappingForPlayerIDs(uint256,uint256,uint256)", +"c88449a1": "_getTransferFeeAmount(address,uint256)", +"c8852b5b": "getBirthCut(uint256)", +"c8857dcd": "setOperateMode()", +"c885bc58": "withdrawReward()", +"c885e92d": "contlength()", +"c8860f41": "getWinningChoice(uint256,uint256)", +"c886594d": "getNodeEnabledStatus(address)", +"c8865c0e": "allocated24Months()", +"c886ec0d": "getTreasureProbabilityType(bytes32)", +"c888fafd": "bankerDepositPer()", +"c888fcc3": "getPollResult(uint256)", +"c8894a0c": "WMToken(address,uint256)", +"c88961da": "createKingdom(string,address,address,address)", +"c88996d6": "MessageCallTransaction(bytes,uint256,uint256,address,uint256,uint8,uint256,uint256)", +"c889e0de": "finishAirdropBy0Eth()", +"c88b675b": "setMaxAvailableSpot(uint256)", +"c88b77e0": "grantTeamAdvisorToken(address)", +"c88b7c8e": "setConversionFee(uint256)", +"c88bf75a": "applyRaises(uint256[])", +"c88c5101": "investor_bonus()", +"c88cc6ac": "getCertification(address)", +"c88e662e": "externalSales(address,uint256)", +"c88fd3ec": "changeIcoRate(uint256)", +"c88fe1fa": "maxCapMintTransfer()", +"c890635a": "ownerSale(address,uint256)", +"c890f27e": "GenChipByWeight(uint256,uint8,uint256[])", +"c891a29d": "setEpochData(uint256,uint256,uint256,uint256[],uint256,uint256)", +"c8922057": "MAXUM_SUPPLY()", +"c89231b3": "mintForInvestor(address,uint256,uint256)", +"c892693b": "setMotAddress(address)", +"c892cfdf": "amountRised()", +"c8931355": "setONTExchangeRate(uint256)", +"c893ae0b": "ptToPtwo()", +"c894e1e5": "setTransferFeeRate(uint256)", +"c895304b": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256,uint256)", +"c89547f9": "adminSetTxFeeInviteGame(uint256)", +"c89550a8": "BMICoin(address,address)", +"c89605a2": "DEALERWIN()", +"c8961644": "unBan(address)", +"c89924da": "totalTokensForSaleDuringICO2()", +"c8997121": "forwardFunds(uint256)", +"c899fa77": "hodlerTotalValue3M()", +"c89a32ab": "releaseTargetToken(uint256)", +"c89acc86": "send(address,bytes)", +"c89b50c7": "credit(address[],uint256[])", +"c89b7d8c": "buyCommonTTWByETH(uint256,address)", +"c89b989e": "lckTokenAddress()", +"c89baff5": "GoldenGate()", +"c89cea99": "getMyAnts()", +"c89d6063": "claim(bytes32,uint256,address,uint8,bytes32,bytes32,bytes32[])", +"c89dcfce": "mint(address,bytes32,uint256)", +"c89e4361": "delegate()", +"c89e528e": "receiveCreateAuctionFromArray(address,address,uint256[],uint256,uint256)", +"c89ec68a": "startRecovery(address,address)", +"c89f2ce4": "funds()", +"c89f51ef": "createPromoRabbit(uint256,address)", +"c89f8f08": "testGetController()", +"c89faa72": "confirmTransferItem(address,address,string)", +"c89fb5f0": "ethunpause()", +"c89fcf58": "setNoviceDungeonId(uint256)", +"c8a1becb": "_monthToNumber(string)", +"c8a1e1c7": "sendInternally(address,uint256)", +"c8a2c880": "setCallStack(uint256,uint256)", +"c8a2cc03": "strikersMetadata()", +"c8a2e0bc": "addCustomerReqACC(address,address,address,address)", +"c8a3af72": "is111bit(uint256)", +"c8a45c44": "tokenMaturityPeriod()", +"c8a48d71": "removeStep(bytes16)", +"c8a4ac9c": "mul(uint256,uint256)", +"c8a4c767": "kickCommitteeVote(address)", +"c8a4ddc3": "resetBatches(address,address)", +"c8a4e001": "EarlyPurchaseAmended(uint256)", +"c8a59bb6": "GrTokenTest()", +"c8a5e6d7": "transferFundAndEndGame()", +"c8a635b7": "setWeiRate(uint256)", +"c8a6dab7": "test_tokenFreeze()", +"c8a71e14": "bonusCalculationFactor()", +"c8a73eca": "transferOpen()", +"c8a7432f": "getPreIcoPurchase(address)", +"c8a76494": "Bet()", +"c8a7836e": "getFINMigrationRecord(address)", +"c8a808d6": "avatar(address,address,uint256,uint256,bytes)", +"c8a814b8": "firstSend(bytes32)", +"c8a830ba": "max(uint256)", +"c8a83384": "allowBurns()", +"c8a8ac2e": "submit(uint256,bytes32,bytes32,bytes32)", +"c8a90f76": "handlePresaleToken(address,uint256)", +"c8a9e841": "addCustomerFromKYC(address)", +"c8aafbc3": "NodeHash()", +"c8ac7014": "updateMerchantByAdmin(address,string,string)", +"c8ad27e6": "finishPre()", +"c8ad9645": "InactivityHolderResetBalance(address)", +"c8aded5d": "setDiscounts(uint256[],uint256[])", +"c8ae8774": "_startMegabox(uint256)", +"c8aef513": "preSendTTC()", +"c8aeff39": "isMarket()", +"c8af1538": "fallbackPayout()", +"c8af46b4": "canAnyoneBurn()", +"c8b08125": "tokensRemaining()", +"c8b0e68d": "getCEO()", +"c8b18b5b": "oneMonth()", +"c8b19fa8": "ioxToken()", +"c8b1a635": "pricePerCoin()", +"c8b21f18": "distributionuserFinished()", +"c8b26773": "startEnrollment()", +"c8b2ccba": "addStrand(uint256,address,bytes32,string)", +"c8b32089": "TokenLiquidityMarket(address,uint256,uint256,uint256)", +"c8b342ab": "getBid(address)", +"c8b35c7a": "BANANA()", +"c8b39eb5": "setEdCoreContract(address)", +"c8b413ad": "initialize(address[5],address,uint256[12],uint256,bytes)", +"c8b43c10": "isPausedCrowdsale()", +"c8b4c5b8": "MarketToken(uint256,uint256)", +"c8b4eb6e": "withdrawPresale(address)", +"c8b52bfb": "ChangeCost(uint256,uint256)", +"c8b56bda": "unregister_contract(bytes32)", +"c8b5da66": "pressButton()", +"c8b6a463": "ASUT()", +"c8b70559": "_endContestIfNeeded()", +"c8b7c3ee": "MITCoin()", +"c8b7e8c3": "testMakeBet()", +"c8b82220": "registerNameIP(string,string)", +"c8b91531": "MINOR_VERSION()", +"c8bb32e0": "updatePosition()", +"c8bb73ef": "testGetBitsFailIndexOOB()", +"c8bb7d51": "unitRareGrowth()", +"c8bc2452": "LuJiaZuiToken()", +"c8bc429a": "removeDividendPathway(address,uint256)", +"c8bc6fa0": "maxCapEth()", +"c8bd14ef": "totalInvSupply()", +"c8bd1d13": "VERIME(address)", +"c8bd3782": "OsherCurrentICOPrice()", +"c8bdbfb6": "withdrawUnsoldTokens()", +"c8bdc0c7": "RevokeDOT(bytes32,bytes)", +"c8bf3388": "totalIRCAllocated()", +"c8bffa93": "tier1End()", +"c8c01a55": "request(address,uint256)", +"c8c08a89": "_isOfficialApps(address)", +"c8c0b288": "bountyFundManager()", +"c8c0cbbb": "setLockedAccountThresholdUsd(uint256)", +"c8c1a400": "infoAboveSpot()", +"c8c21594": "releaseByStage(address)", +"c8c2ed54": "tokenAssignmentControl()", +"c8c2fe6c": "acceptManagement()", +"c8c365fc": "nowday()", +"c8c388eb": "RegBase(address,bytes32,address)", +"c8c3b926": "changeDragoDao(address)", +"c8c5139d": "setUserDisplay(address,string)", +"c8c67ca1": "transferValuebyAddr(address)", +"c8c719d2": "MangachainToken(address,address,address,address,address)", +"c8c72bb4": "TEAM_RESERVE_FTX()", +"c8c749ec": "preTgeManager()", +"c8c75647": "setVerified(address)", +"c8c79643": "addBurningMan(address,uint256)", +"c8c89fa5": "secretBids(address)", +"c8c9b1f8": "shouldVerifySegment(uint256,uint256[2],uint256,bytes32,uint64)", +"c8c9d745": "userLookup(uint256)", +"c8ca645f": "getName(string,string,address)", +"c8cada78": "oraclize_query(uint256,string,bytes[2])", +"c8cb60bb": "cancelBid(bytes32,uint8,int32,bool)", +"c8cb7d04": "Kristina()", +"c8cb8677": "WithdrawMyTokens()", +"c8cb8a75": "setCreator(address,uint256)", +"c8cb985a": "callDividend()", +"c8cc5cd8": "distributeYield(uint256)", +"c8cc9cc2": "getElement(address)", +"c8ccaebc": "extendedTimeLock()", +"c8cd09ae": "TransferredPreBuyersReward(address,uint256)", +"c8cd65e5": "processDeposit(address,uint256)", +"c8cddd61": "test_validShouldBe3_increaseTimeBy30000()", +"c8ce122b": "checkJackpot(address)", +"c8ce2fec": "lifetimeDeposits()", +"c8ce30b0": "blocksForWei(uint256)", +"c8ceaa95": "mint(bytes32,int256,address,uint256)", +"c8ceae12": "tavernContract()", +"c8cf4722": "getRequestsLength()", +"c8cf67a1": "buySmartSpeed()", +"c8cfb032": "getPlayerByAddr(address)", +"c8cfd490": "UNLOCK_TEAM()", +"c8cfe153": "revealVote(uint8,string)", +"c8d0ec0a": "reduceAllowance(address,address,uint256)", +"c8d172d6": "getTokenInfoNonce()", +"c8d1c017": "addUIntValue(bytes32,uint256)", +"c8d1cf4a": "tokenPriceForMainICO()", +"c8d3db82": "getPresaleMaxValue()", +"c8d47f16": "replaceLogic(address)", +"c8d4b389": "approveAndCallPreSigned(bytes,address,uint256,bytes,uint256,uint256)", +"c8d508fa": "test_insert_findNoHintUpdateTail(int256)", +"c8d50d7c": "nextBackWindowAdjustmentRatio()", +"c8d52ee3": "refundTransfer(address,uint256)", +"c8d61985": "setCryptoAgent(address)", +"c8d689b1": "addAllowedLock(uint256)", +"c8d840fa": "EventEmergencyContinue()", +"c8d86e35": "bullToken()", +"c8d88829": "oslikiFoundation()", +"c8d8cf88": "appIndex()", +"c8d942b5": "Travelerscoin()", +"c8d9c042": "AuctionCreated(uint256,uint256,uint256,uint256,bool)", +"c8d9ebc4": "getTomato(uint8)", +"c8db6a42": "functionCalling(address)", +"c8db6af9": "getCompte_14()", +"c8dc60ca": "vehiclesByCity(bytes32)", +"c8dc7e19": "setReconciliationDate(uint256)", +"c8dd64ea": "daVinciAddress()", +"c8dd6ce7": "getPlayerDetails(address)", +"c8dda301": "VOTING_START_BLOCKNR()", +"c8dda71c": "HistoryUpdated(string,uint256[])", +"c8ddf66f": "MMChainToken()", +"c8df5da0": "BOSHICoin()", +"c8e0f101": "userPlay()", +"c8e11521": "TripBitToken()", +"c8e13bb4": "fit()", +"c8e1fe3f": "getCountriesOfCampaign(bytes32)", +"c8e2190d": "_cancelOperation(bytes32,address)", +"c8e2fca0": "use(address,address,uint256,uint256,uint256,uint256,uint256,string)", +"c8e32074": "returnFrom(address,uint256)", +"c8e49707": "activateExportFee(address)", +"c8e4acef": "playerByAddress(address)", +"c8e55708": "oraclize_query(string,string[1])", +"c8e566c6": "betInputToBytes(uint40,uint40,uint40,uint40,uint40)", +"c8e569a8": "stopICO()", +"c8e56acb": "FAPFundDeposit1()", +"c8e5f54f": "ArcanaToken()", +"c8e626f8": "checkDivsBalance()", +"c8e6b2a8": "logTimestampSet(uint256)", +"c8e6ba4d": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"c8e6c7d9": "imin(int256,int256)", +"c8e706e2": "contractWallet()", +"c8e71424": "MotherDNAShare()", +"c8e788c1": "RELEASE_EPOCH()", +"c8e7ca2e": "getMsgData()", +"c8e7e5ef": "TOTAL_NUM_TOKENS()", +"c8e8ce63": "outsourceConfirmNode(uint256)", +"c8e8d6d6": "TheTokenE()", +"c8e8f487": "missedVerificationSlash(uint256,uint256,uint256)", +"c8e9fc8b": "testgas()", +"c8ea0cfa": "CoinmakeToken()", +"c8ea1f7f": "updateEntity(uint256,bytes32,uint256,bytes32,uint256)", +"c8ea429e": "closeCdp(uint256,uint256,uint256)", +"c8eab537": "randomJackpot(uint32,bytes32,uint32)", +"c8eaf28f": "addWhitelists(address[])", +"c8eb747a": "B42Token()", +"c8ec2eb8": "MUBEX()", +"c8ec57ed": "revokeConfirm(bytes32)", +"c8ed6253": "ManagedToken()", +"c8ede712": "makersAverageRating(address)", +"c8edf65e": "GetAndReduceFeesByFraction(uint256)", +"c8ee0c6b": "withdrawBySubscription(address,uint256,bytes32,string)", +"c8ee2da8": "setReputationIRNNodeShare(uint256)", +"c8ef8b00": "window2TotalSupply()", +"c8efd7af": "getResolverFee()", +"c8f07770": "funcThatReverts()", +"c8f09634": "visaOfferingsLength(uint256)", +"c8f099cb": "upgradeEvilMorty(address,address)", +"c8f0d741": "AlienFarmer()", +"c8f21d22": "TagadaTsoinTsoinCoin()", +"c8f2835f": "transferBack(address,uint256)", +"c8f288ad": "getPoo(uint256)", +"c8f3a9e1": "getLastRollOutput(address)", +"c8f3e5f0": "getParameterByTitle(bytes32)", +"c8f41706": "pausePhase()", +"c8f478e1": "SetChangePlatformFlag(bool)", +"c8f490c8": "numOfBalloonsTypes()", +"c8f5c3f9": "LNCHSale(uint256,uint128,uint256,uint256,uint128,string,uint128,string,uint128,string,uint128,string,uint128,string)", +"c8f5d8b0": "total_coins()", +"c8f803f8": "setUnitJadeStealingMultiplier(address,address,uint256,uint256,bool)", +"c8f87d36": "_register(uint256,address)", +"c8f88076": "emissionMasOneType(address[],uint256[],bytes32[],uint256)", +"c8f8d75d": "Config(uint8,address)", +"c8f98db8": "getWinningFaction()", +"c8fbbdda": "getGPSStartTime()", +"c8fca35e": "getBidHash(uint256,uint256,address,address,uint256,uint256)", +"c8fd39f7": "GetEthShop()", +"c8fd6ed0": "unstake(uint256,bytes)", +"c8fdc891": "numberOfMonarchs()", +"c8fddb80": "updateLemonCoinsRemainingToDrop()", +"c8fdf67d": "holdTransaction(uint256,uint256,uint256)", +"c8fe2065": "getSingleBetItemCount(uint256)", +"c8fea2fb": "collect(address,address,uint256)", +"c8fed3f6": "withdrawCashReserveFund()", +"c8ff80a1": "setMonsterClass(uint32,uint256,uint256,bool)", +"c9000726": "nextStep()", +"c90109fa": "removeSomeCWCsFrom(address,uint256)", +"c90189e4": "fechAllVoteResultPreStageByBlock(uint256)", +"c902c3ae": "bets(bytes32)", +"c902d1b6": "_checkClientSign(address,bytes32,bytes)", +"c902ee36": "tokensAvailable(address)", +"c9030ea0": "addMember(address,bool)", +"c904a2ee": "minAllowedReservingPercentage()", +"c906a5aa": "testDeleteVoter()", +"c906baa3": "GACFund()", +"c906c873": "limitCrowdsale()", +"c906cd68": "ForceCoinTransfer(address,address,uint256)", +"c90755e2": "secretaryGeneral()", +"c90763f0": "subAllocation(address)", +"c9079673": "last_payment_timestamp()", +"c90797ea": "suicideContract(address)", +"c907d53b": "getTakeOwnershipFee(uint256)", +"c9085820": "set_owner(bytes12,address)", +"c908f302": "searchPursesByAddress(address)", +"c9090c7f": "levelFourTokenNum()", +"c9099385": "addApplication(string,string,string,string)", +"c909b929": "closingTimePeriodTwo()", +"c90a6a8e": "MAIN_SALE_BONUS_PERCENTAGE_PHASE4()", +"c90aef26": "Fetch_Game_Board_Vitualization(uint32)", +"c90c205b": "CLAIM_AMOUNT_ETH()", +"c90c589a": "OAR()", +"c90c83a8": "scheduleCall(address,uint256,uint256,uint256,uint256)", +"c90c949b": "checkForBonuses(uint256,uint256)", +"c90cfb0b": "newFact(string,string)", +"c90d080a": "registerEvent(bytes)", +"c90d1431": "MYLASTTOKEN()", +"c90d2cd9": "createBallot(uint256,address,string,string)", +"c90de215": "ClockAuction(address,address,uint256,uint256)", +"c90f34f0": "Bitstarti(uint256,string,string)", +"c90f793e": "currentAgreement()", +"c90fc8ee": "allTotalSupply()", +"c90fda80": "countRC(address)", +"c9100bcb": "getClaim(bytes32)", +"c9101f6c": "increaseApproval(uint256,address,uint256)", +"c9102029": "_getTokens()", +"c9116b69": "myBalance()", +"c9116e4a": "yearThreeClaimed()", +"c911b56e": "isController(address,address)", +"c913b552": "getVersions(bytes)", +"c913f364": "addMoonPrizePool(uint256,uint256)", +"c914ef54": "SetAllow(address)", +"c91540f6": "getCurrentCompetitionValues(string)", +"c915fc93": "proposeUpgrade(address)", +"c91610cd": "transferDelegator(address)", +"c91752b2": "girlIdToAuction(uint256)", +"c91813ca": "testToBool(bytes)", +"c919992d": "changeBrokerImp(address)", +"c91b0149": "setWhitelister(address,bool)", +"c91b46c6": "claimHero()", +"c91bc856": "withdrawCAT()", +"c91c6fa5": "completeSupply()", +"c91ca6c7": "calculatePeerTokens()", +"c91cd9d0": "minimumNumber()", +"c91d7e9c": "getFee(bytes32[])", +"c91d956c": "setMinBalance(uint256)", +"c91e4cc8": "getItemsByTypeAndOwner(string,address)", +"c91e5ad6": "DatingTokenTest()", +"c91fc619": "getTotalOut(address)", +"c92015f6": "getAccountUnlockTime(address)", +"c9206ddf": "setSalvageable(address,bool)", +"c9219a7a": "verifyProof(uint256[2],uint256[2][2],uint256[2],uint256[8])", +"c921f647": "GiftSend(uint256,address,address,bytes32,string,bytes16,uint8,bytes24,uint16,uint16,uint256)", +"c92261b5": "set(bytes32,int256)", +"c922f446": "emergencyWd()", +"c9230c5d": "assetName()", +"c923c870": "getsysdayruns()", +"c9247058": "MasternodeRewardAddedToRewardPool(uint256)", +"c924c524": "secondSend(bytes32)", +"c924d441": "EnableTokenWithdrawals()", +"c92501b7": "setStopTime(uint256)", +"c926435c": "bonusInfo()", +"c926aae6": "kscSell(address,address,uint256,string)", +"c9270652": "returnLoanLength(uint256)", +"c92728a1": "_ballotIdToNamespace(uint256)", +"c9295bc6": "getOrgInfo(address)", +"c9296d14": "scheduleTransaction(address,uint256,uint256,uint256,bytes)", +"c929bdac": "notaioAccounts(address)", +"c929ccf3": "setTokenId(uint256)", +"c929d55e": "overrideTokenHolders(address[],uint256[])", +"c92a1ad8": "bonusPriceDeltaPerHour()", +"c92a1e26": "setting(bytes)", +"c92aecc4": "chi()", +"c92ba8b2": "add(address,uint32,uint128,uint128)", +"c92babd1": "SITMock(address)", +"c92cd4d3": "getNewTokenBalanceOf(address)", +"c92d2385": "transferPreSignedHashingWithPrefix(address,address,uint256,uint256,uint256,uint256)", +"c92d3ea9": "Amazon()", +"c92db04d": "VanMinhCoin(uint256,string,uint8,string)", +"c92e365f": "placeBid(address,uint256,uint256,uint256,bytes,int256)", +"c92f068c": "updateHpbNodeBatch(address[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[],bytes32[])", +"c92f3a0c": "GameICO()", +"c92f8954": "withdraw(address,uint256[3])", +"c932c71e": "USDsToken()", +"c932ca62": "setBuildersAddress(address)", +"c9330bfb": "ethToTokenConversion()", +"c9334051": "decodeAssets(bytes32[])", +"c9335f58": "worldwidegiftcode()", +"c9351571": "WorldCupToken()", +"c93685b8": "getQuorumPercent()", +"c937b0a9": "platinum()", +"c937da12": "addToPublicWhitelist(address)", +"c937e091": "SearchUserID(string)", +"c9380d3e": "DeciserToken()", +"c938acc8": "checkExistsOwnedPet(uint64)", +"c9393c62": "NewState(uint8)", +"c939625b": "LuckCashCrowdsale(uint256,uint256,uint256,address,address)", +"c939fd50": "remainingIssuableNomins(address)", +"c93a6c84": "setDefaultFee(uint256)", +"c93aac88": "setReleasingSchedule(address)", +"c93ab4c3": "checkTreesWatered(uint256[])", +"c93b9755": "mintAgents(int256,address)", +"c93c266e": "updateWalletAddress(address)", +"c93ce90f": "chefOwnerWithdrawal()", +"c93ceec8": "collectDividends(address)", +"c93cff84": "test_validContractBalance()", +"c93dd31a": "Blammascoin()", +"c93e253d": "balanceOfBasic(address)", +"c93e718b": "removeAddressesFromOperators(address[])", +"c93e8862": "_checkCap(address)", +"c93e8b15": "getActiveBuyOrders(uint256)", +"c9406e86": "crowdsaleEnds()", +"c940c1b7": "addCustomerHash(bytes32,bytes32)", +"c9410b76": "ClockAuction(address,uint256)", +"c942940c": "Sukaya()", +"c944a38e": "CharlyLifeLog(string,int256)", +"c9456530": "isRespectTimeFrame()", +"c945b53f": "lottoIdentifier()", +"c946f3af": "Standard_3()", +"c94727f0": "getWinChoice(uint256,uint256)", +"c947db81": "earlyWithdrawalFeePct()", +"c9498266": "hash_passcode(bytes32)", +"c949ba9b": "TokenBase()", +"c949c0c9": "_houseOf(address)", +"c94a18ba": "kpyGoalReached()", +"c94a5841": "BITVesting()", +"c94b0ac1": "CryptoTwitch()", +"c94b56e3": "isMinCapReached()", +"c94b5c3d": "cabbageToken()", +"c94bfdb1": "setTokenDescription(address,uint256,string)", +"c94c6787": "specialSend(uint256,address)", +"c94c79dd": "EtherTots()", +"c94d0eee": "oddEven(uint256,address)", +"c94d9caf": "createTxEth(address,uint256)", +"c94dc71e": "Satochi()", +"c94e643c": "grantTokens(address,uint256)", +"c94e6567": "fetchBlocks(address)", +"c94e7b5c": "icoTokenSupply()", +"c94f2d69": "ILOTContract()", +"c94f7983": "StillToGo(uint256)", +"c94fbd4b": "Reek()", +"c9507465": "useraddinverst(uint256)", +"c9511b59": "setAddressToken(address,address)", +"c95292c4": "EthlanceDB()", +"c95320db": "migrationPhase()", +"c9537838": "getExpectedBalance(address)", +"c954d4fa": "blendbacktest(uint32[],bytes32[],bytes32[],uint64[])", +"c9553010": "testDistributing()", +"c955457e": "getRandomArbiter()", +"c955b514": "addCancelled(bytes32,uint256)", +"c955bde2": "getExpirationRequest(bytes32)", +"c9567bf9": "openTrading()", +"c956d497": "helpWithdrawal(address)", +"c956db57": "WOLF3()", +"c957012e": "caps(bytes32)", +"c9580804": "setAccessManager(address)", +"c9584008": "registerTicker(address,string,string,bytes32)", +"c959467b": "setInterestDB(address,uint256)", +"c959ec57": "GetRocketStock(uint16)", +"c95acadd": "ethAuction()", +"c95ae083": "isMethodAllowed(bytes4)", +"c95bd3aa": "closePreSignedHashing(address,bytes32)", +"c95c0efd": "setBonusUnlockAt(uint256)", +"c95c0f7b": "getTransactionIds(uint256)", +"c95c1036": "calculateStakeAmountWithBonuses(uint256,address,uint256)", +"c95c16af": "imported(address)", +"c95c67dc": "ADVISORS_SUPPLY_LIMIT()", +"c95c9a83": "ThinkCoin(uint256)", +"c95d8e40": "clientSign()", +"c95e0909": "resetPlayer(address)", +"c95e81cb": "MyBet(uint8,address)", +"c95f79ba": "closeLeaderboard(uint16)", +"c95f8b91": "TransferFunds(address,uint256)", +"c95f95bb": "ComputedGainsRate(address,uint256)", +"c96027b3": "ethpaused()", +"c9613733": "startNextEra(bytes32,uint256,int256,uint256,int256,uint256,int256)", +"c961df66": "contract_period()", +"c9620770": "doVote(address,uint256,uint256)", +"c96266e8": "getDragonFight(uint256)", +"c96304e8": "balancesAddressDescriptionUpdate(string)", +"c9634f32": "randomContestant(uint256,uint256)", +"c9644b77": "retireAxie(uint256,bool)", +"c96492c4": "SspManagerContract(address,address)", +"c964e493": "getSpaceship(uint256)", +"c9651729": "firstLineWrong()", +"c9653bea": "MainExchange()", +"c96593a0": "The10ETHPyramid()", +"c965e1d3": "constructAPIParam()", +"c965ed7b": "OwnerReward()", +"c9660d07": "ownerSetEdgeRangeAndPayout(uint256,uint256,uint256)", +"c966865e": "notRandom(uint256)", +"c9679537": "HafizToken()", +"c968907f": "grantVestedTokens(address,uint256,uint256,uint256,uint256,uint256,bool)", +"c968aab3": "makeUntradable(uint8)", +"c968ac68": "getWin(uint64)", +"c9693411": "deliverPresaleFuelBalances(address[],uint256[])", +"c96adb01": "getUserBet(address)", +"c96c54a7": "airdrop(address[],uint256,uint8)", +"c96c8a1d": "ownerListMap(uint256)", +"c96cd46f": "suicide()", +"c96cea70": "updateUsername(string)", +"c96d2dfa": "getStateAndProof(bytes,uint256)", +"c96e5627": "numRegistered()", +"c96e785f": "setWhitelisted(address,address)", +"c96e83db": "firstContributorId()", +"c96e8fee": "Bury(address,uint256)", +"c96f3238": "getWithdrawAmount(uint256,uint256)", +"c96f5041": "addHash(string,uint256)", +"c971442c": "getDBs()", +"c971aade": "FINALSTSTEST()", +"c971b12b": "_onRandom(uint256,bytes32)", +"c9734ebd": "WatchLastPayout()", +"c97358df": "GGPCToken()", +"c973851d": "kMaxStake()", +"c97399d0": "_isOwner(address,uint256)", +"c973c2e3": "collectorAddress()", +"c9744029": "getPremium()", +"c974631b": "platformWithdrawalProposed()", +"c974947d": "unlockAddress(address[])", +"c975653d": "StartCity()", +"c9762f8f": "TooBigPriceDiff(uint256,uint256)", +"c976b4f9": "slowDump()", +"c976bbbb": "_compare(int256,bytes2,int256)", +"c976ce9c": "privateSaleLimit()", +"c977a7a7": "setUsdToEtherExchangeRate(uint256)", +"c9788631": "beneficiaryWallet()", +"c978a7bc": "inviteRate()", +"c978c45d": "setNewMessage2(string)", +"c978ee59": "fourthStageMintingDate()", +"c979113c": "nextStageEmission()", +"c9791e0d": "confirmBobIndirectPay(uint256)", +"c97a06ce": "isHardcapReached()", +"c97aae82": "NulsStandardToken(uint256,string,uint8,string)", +"c97ab7ca": "isICOClosed()", +"c97b5278": "XYZSecurities()", +"c97b6d1f": "updateBatch(int128[],uint128[],uint8[],bytes32[],bytes32[],bool)", +"c97be180": "lock(address,uint256,uint256,uint256)", +"c97c1505": "readRate(string)", +"c97c6353": "testHello()", +"c97ca645": "updateWeiPerWholeToken(uint256)", +"c97cc71e": "getTransferRawAddress(bytes)", +"c97cef81": "Shelter(string,string)", +"c97dc17b": "DatareumToken()", +"c97e8480": "delegatedTransfer(address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"c97ec033": "changeOverERC228(address,address,uint256,address)", +"c97f8363": "setBonusAddress(address)", +"c9801b50": "f_public()", +"c98031be": "hintURL(int256,bytes32,string)", +"c980c626": "setImage(uint256,string)", +"c98165b6": "createTarget()", +"c98166c0": "ethAmount()", +"c9818728": "candyCap()", +"c9819d1e": "GuardaRegistro(bytes32)", +"c982e353": "getCurrentPrice(uint256,uint8)", +"c9838930": "setReferralTokenContract(address)", +"c985c221": "get_all_levels()", +"c986cf7c": "defrostAdvisorsTokens()", +"c987a78a": "AISI()", +"c987c5a1": "userAdd(address)", +"c988d70f": "getDailyWithdrawLimit()", +"c9891384": "PendinglinesToLines()", +"c9894b5c": "taxValue()", +"c98a79fb": "getBallotLogN(address)", +"c98b7027": "bgb_per_Keos()", +"c98bd7da": "isWinner(uint256,uint256)", +"c98bdd2f": "year5LockAddress()", +"c98c3083": "OutcomeToken()", +"c98c6e08": "payAmountForLoanAtIndex(uint256,uint256)", +"c98cf6e3": "COBToken()", +"c98d3457": "alliance(address,address)", +"c98d9b83": "getTokensContractAddress()", +"c98e4149": "setKingdomFactory(address)", +"c98f0ad9": "getUnlockedBalanceLimit(address)", +"c98fc4d9": "adminSetConfig(address,address,address)", +"c98fefed": "convertFor(address[],uint256,uint256,address)", +"c99051dc": "getWildcardsRemaining(uint16)", +"c9912255": "gago()", +"c99252d3": "joinGame(uint256,uint8,uint8)", +"c99380c9": "getAttoTokensBoughtInICO()", +"c9940c31": "getPoolCandidateContract(uint256)", +"c994fe31": "setCompanyManager(address)", +"c995623e": "revealMove(bytes32,uint256)", +"c9956b05": "FMCToken()", +"c99749a8": "prepareWithdrawProposalGivenSplitProposalId()", +"c997c1e2": "mul18(uint256,uint256)", +"c99842f9": "startPreIco(uint256,uint256,uint256)", +"c998e9dd": "changeUserKeyFromRecovery(address)", +"c9991176": "addAdministrator(address)", +"c99a975d": "optInFcnMinGas()", +"c99ae8a7": "setFechaTax(uint256)", +"c99b1f28": "icoWeek4Bonus()", +"c99b27ad": "updateFirstWallet(address)", +"c99c3c62": "getCarProductCount()", +"c99d89fc": "PriceOneEnable()", +"c99d9ef7": "startIcoDate()", +"c99db1ba": "_calculateLockedPercentage(uint8)", +"c99dccf9": "getInvestor(uint256)", +"c99f3357": "DRAIN_DELAY()", +"c99ff644": "dilute(uint256)", +"c9a04e55": "getDailyEthProfit(address)", +"c9a0e252": "ICOParticipants(address)", +"c9a1d88b": "placeBet(uint16,uint16,bool)", +"c9a2ab19": "aragonDevMultisig()", +"c9a30482": "BurnableCrowdsaleToken(string,string,uint256)", +"c9a365a7": "foundationlock()", +"c9a3f228": "SCLCrowdsale(address,address,address,uint256)", +"c9a43b2b": "m_software(uint256)", +"c9a4faa6": "AdexContract(address,address,address,uint256,uint256,uint256)", +"c9a5003c": "lastHello()", +"c9a52d2c": "setBytesValue(bytes32,bytes)", +"c9a56efd": "getBetterBettingInfo2(address)", +"c9a6964a": "initializeOwnable(address)", +"c9a6b2a8": "addAuction(uint256,uint256,uint256,uint256,address)", +"c9a6e480": "tokenSupplyFromCheck()", +"c9a75d90": "setPI_edit_20(string)", +"c9a7623a": "buyingPrice(bool)", +"c9a77e3d": "totaleMsg()", +"c9a815bd": "setSpendingLimit(address,uint256)", +"c9a82aa8": "markCrowdsaleEnding()", +"c9a8baae": "myFirstLoop()", +"c9a99f19": "subscribeCaller(address,address,uint256,address,uint256)", +"c9aa013b": "Start5()", +"c9aa4cf8": "testHasTokens()", +"c9aa71b8": "getFlyingUnicorns(bytes32,uint64)", +"c9ab521f": "AddBook(uint256,string,address)", +"c9ac836d": "transferPet(address,address,uint64)", +"c9acab84": "left59(uint256)", +"c9ad51b5": "TOKEN_AMOUNT_ICO_STAGE1_PRE_SALE3()", +"c9ae5594": "countHand(uint8[])", +"c9af089f": "getOrCreateChildUniverse(bytes32)", +"c9af2418": "checkUp(address,bytes32)", +"c9b06a4b": "AECloudToken()", +"c9b0d97b": "canCollect()", +"c9b0eef4": "oracleItQuery(uint256,string,string,string,uint256,uint256)", +"c9b110cb": "getAmountOfWithdrawals(address,address)", +"c9b1a517": "Show_Doctor(uint256)", +"c9b1b2ae": "etherKing(uint256)", +"c9b25f0f": "transferEther()", +"c9b2a580": "UTTotalSupply()", +"c9b2e522": "getSymbol(address)", +"c9b31d4b": "getCurrentSecret()", +"c9b3e736": "getTokenSellPrice()", +"c9b44821": "FIRETRADES()", +"c9b46bbb": "test0_adding()", +"c9b4cb94": "BIBToken(uint256,string,uint8,string)", +"c9b4ddb2": "receiveLockedAmount(address,uint256)", +"c9b5757e": "refundBet(uint256,uint8)", +"c9b5e555": "founderAddr()", +"c9b67627": "NonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2],uint256)", +"c9b7ab8b": "getPostLink(uint256)", +"c9b8020d": "starbaseToken()", +"c9b86d43": "manualState()", +"c9b94eb9": "liabilityFinalized(uint256)", +"c9ba0d4d": "r9kAddress()", +"c9ba32f4": "COPPER_AMOUNT_NDC()", +"c9ba73a3": "getmypost(uint256)", +"c9ba93be": "getIndexFromAddress(uint256,address)", +"c9bba27b": "manualEmissionEnabled()", +"c9bbc8c0": "donkeyName(address)", +"c9bc0883": "transferFromForcibly(address,address,uint256)", +"c9bc2bf5": "updateSnipCoinToEtherExchangeRate(uint256)", +"c9bc5dbd": "requestCeilingRaise(uint256)", +"c9bd2893": "fines()", +"c9bebd90": "ownerAlias()", +"c9c08bb7": "tickerAddress()", +"c9c09ac8": "denyBundlingMultitoken(uint256)", +"c9c0c77a": "deposit(uint16)", +"c9c0f25e": "getAllWorkers()", +"c9c1db4a": "launchFund(uint256)", +"c9c1ed93": "testControlRegisterContractIdAgain()", +"c9c1eded": "EPYCOIN()", +"c9c22deb": "getStarDistanceInLyThousandths(uint8)", +"c9c286c6": "getUnitRafflePlayers(uint256)", +"c9c347b9": "EthereumOneToken(string,uint8,string)", +"c9c4405b": "CariNetPrivilege(uint256,string,string)", +"c9c447e0": "getGamePrize(address,uint256)", +"c9c4797d": "ParticipantAuthority()", +"c9c51578": "buyBronze(uint256,uint256,uint8,bytes32,bytes32)", +"c9c53232": "totalStakedAt(uint256)", +"c9c538aa": "to_binary(uint256)", +"c9c5b5b4": "migrate(string)", +"c9c6176c": "BidSubmission(address,uint256,uint256)", +"c9c666aa": "changeCardboardUnicornTokenAddress(address)", +"c9c798b3": "addToFreelancerAvgRating(address,address,uint8)", +"c9c7cb74": "_burnTokens(address,uint256)", +"c9c7ef25": "withdrawtime()", +"c9c80a56": "adminshipLevel(address,uint8)", +"c9c8580c": "makeOffer(uint256,bytes32,uint256,address,uint256,uint256,address,address,uint256)", +"c9c85ec6": "currentGameCost()", +"c9c8ffd2": "test_increaseBlockNumber30211()", +"c9c92c12": "transferWineFromVineyardCellar()", +"c9c92dc5": "getProposal(bytes32,string)", +"c9ca080d": "Indecoin()", +"c9cb0043": "supportTokenAmount()", +"c9cb0e9b": "emitNewSmartToken(address)", +"c9cb6f47": "distributeDifferentAmountOfTokens(address[],uint256[])", +"c9cb7204": "unsold()", +"c9cbc222": "PicAdded(address,uint256,address,bytes32)", +"c9cbf8c9": "saleExchangeRate3()", +"c9cc0498": "buyComission()", +"c9cc0ed5": "setGuardianSale(uint256,uint256)", +"c9cc1a05": "transferTokensToContributor(uint256)", +"c9cd40a2": "vestingEntries(address)", +"c9cda91f": "changeTokenAddress(address)", +"c9ce1c23": "KUEKeNParty(string)", +"c9ce624f": "buyBackFund()", +"c9cf03ce": "refundMoneyForUser(bytes32)", +"c9cf2d4e": "vault_deposited(address)", +"c9cfa6ba": "setAllocation(address,address,uint256,uint256[],uint256[])", +"c9cfac55": "refundCurrency(address,uint256,uint256)", +"c9cfe755": "sendUnsold(address,uint256)", +"c9d00764": "TokenPurchased(string,uint256,uint256,uint256)", +"c9d0320a": "_doExtendPoll(uint256,uint256,uint256)", +"c9d07650": "NetkingToken(uint256,string,uint8,string)", +"c9d12d11": "RC(address,uint256,uint256,uint256,uint256)", +"c9d2373b": "marketKnowledge()", +"c9d256ae": "tokenSaleLeft()", +"c9d27afe": "vote(uint256,bool)", +"c9d27bcf": "doDisputeMemoryAccessSequence(uint256,bytes32)", +"c9d2d217": "TokenState(address,address)", +"c9d34622": "diffDays(uint256,uint256)", +"c9d4623f": "engine()", +"c9d57328": "managePlayer(uint256)", +"c9d66690": "RedeemEvent(address,uint256)", +"c9d68389": "airdropper()", +"c9d7d862": "drawFundsAfterTransfer(uint64)", +"c9d82560": "RewardBonusTimePeriod()", +"c9d82c96": "ICO_DURATION()", +"c9d96393": "updateGenVault(uint256,uint256)", +"c9d9c2b4": "deathData_a0()", +"c9dab438": "Subrosa()", +"c9dac221": "Bussines_Card(string,uint256,string,address)", +"c9db1bbf": "setPreICOStartDate(uint256)", +"c9db2bbd": "addPendingContribution(address,uint256,uint256)", +"c9dbc259": "ExchangeSwitch(bool)", +"c9dca9ba": "changeTokenMinter(address)", +"c9dd3a56": "annualInterestUpdateToken()", +"c9dd915f": "checkPremium(address)", +"c9ddd118": "checkPersonalRemaining(address)", +"c9ddd12f": "getTimestampOfDayEnd(uint256)", +"c9de31c7": "EOToken()", +"c9deb567": "collectionsAvailable()", +"c9dfa731": "lost(uint256,uint256)", +"c9e01787": "registerAffiliate(address[],uint256[],string)", +"c9e075c6": "showLockState(address,uint256)", +"c9e077e6": "bride()", +"c9e20791": "_setName(bytes32,string)", +"c9e25251": "buy(bool)", +"c9e3af7e": "currentBetLimit()", +"c9e3e66c": "secondCheckpointPrice()", +"c9e40106": "getConsolationPrizeTokenId(uint256,address)", +"c9e43221": "MIN_WTH()", +"c9e4d8bb": "isService(address,address)", +"c9e525df": "N()", +"c9e55b4e": "adminFixMaxSupply(uint256)", +"c9e6bef4": "_endsAt()", +"c9e7fd4b": "SovTokenCrowdsale()", +"c9e84346": "bonusLevels(uint256)", +"c9e904be": "totalEthRaised()", +"c9e9f4dc": "donateToLottery()", +"c9e9ff2c": "CPBWallet()", +"c9ea7c7c": "setMinimumFundingGoal(uint256)", +"c9ebb5e8": "freeMem()", +"c9ebeba6": "setIPFSParameter(string,string)", +"c9ec6cf6": "setOpenCloseHour(uint8,bool)", +"c9ecc566": "PurchasingAllowed(bool)", +"c9eda121": "setArrayIndexValue(bytes32,uint256,string)", +"c9ee21fa": "GUNS()", +"c9eea77c": "_updatePrice()", +"c9eebd9d": "modifyVictim(uint16,string,string)", +"c9ef5569": "getVolumeBonusPercent(uint256)", +"c9efa392": "bonusMilestones()", +"c9efda2c": "canStartAuction()", +"c9f09090": "populateTrancheTokens()", +"c9f0a02d": "burnAuction()", +"c9f166f8": "ctz32(uint32)", +"c9f1b7f0": "TeamToken()", +"c9f21fec": "setAuditTimeout(uint256)", +"c9f316dc": "getReferenceCodesOfAddress(address)", +"c9f3d62e": "getCarProductEarning(uint32)", +"c9f68025": "AMToken()", +"c9f73464": "maxCandidateId(uint256)", +"c9f84e1a": "unlockSecondPrivate()", +"c9f88f27": "invokeContracts(bytes)", +"c9f8cf20": "getCanvasesWithSellOffer(bool)", +"c9fa11df": "EventChain()", +"c9fa595b": "paused_3()", +"c9fa8f2d": "houseFeeHoldover()", +"c9faa7c5": "isActivated(address)", +"c9fb975c": "UnicornsSold(address,uint256,uint256,uint256)", +"c9fbdc36": "referral_fee()", +"c9fbe626": "TweetRegistry()", +"c9fca8a5": "rivetzRegister(uint256,uint256,uint256,address,address)", +"c9fd1955": "getVestingWalletLength()", +"c9fd83e2": "lastFeePeriodStartTime()", +"c9ff34ec": "privateTime()", +"c9ffb6e3": "claimPocketMoney()", +"ca001903": "AntarctiCoin()", +"ca00aad3": "closeLottery(uint256,string)", +"ca0157cd": "getGameIds(address)", +"ca01b37c": "DASToken()", +"ca01ba39": "generateTokens(uint256)", +"ca01d731": "XinfinUpgradeableToken(address)", +"ca02dbe3": "Requestprofit()", +"ca0370f7": "calculateCompoundContract(uint256,uint256)", +"ca03dab5": "withdrawSubdivsAmount(uint256)", +"ca03fdcd": "ShowADV()", +"ca04d26f": "transferReadable(address,uint256)", +"ca04e076": "getOwnerPixelCount(address)", +"ca051844": "withdrawBalance(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"ca056aed": "addTokens(address,uint256,uint256)", +"ca06226d": "Ecopackcoin()", +"ca07218c": "setIt(address)", +"ca077f72": "allocate4ProjectToken()", +"ca0781a1": "getRateAndCheckCap()", +"ca079c52": "Upd(uint256,string,address,uint256,uint256)", +"ca087b96": "FlexFitRewards()", +"ca093888": "gameIsSundown()", +"ca0941b4": "findIdByHostPort(string,uint256)", +"ca0a992e": "IvyKoinContract()", +"ca0a9c2d": "makeUser(address,string,string)", +"ca0b1878": "addValue(address,uint256)", +"ca0b49ae": "getMyCarsIdx()", +"ca0c0a49": "gameActiveStrRef(string)", +"ca0c1e62": "computeMerkle(int256,int256,int256[],int256,int256,int256[])", +"ca0c2024": "minCapPre()", +"ca0c601c": "maxGoalInICO()", +"ca0c74be": "buyForInvestor(address,uint256)", +"ca0c9b5c": "storeTransactionData(address,address,uint256,uint256)", +"ca0cd7c0": "setUnlockLater(uint256)", +"ca0d01a6": "_yearTwoSupply()", +"ca0d0d82": "getMilestoneInfo(uint8)", +"ca0d6e48": "Mariton()", +"ca0d9564": "removeAdminList(address[])", +"ca0dcf16": "mintRate()", +"ca0e5c27": "ViewProjects()", +"ca0f1215": "initialSaleDuration()", +"ca0fe62a": "CryptoMemes()", +"ca0fe751": "switchRankings(uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"ca1149d1": "getUserEntryStatuses()", +"ca1314af": "getMax(uint256[])", +"ca13b818": "setWinningTeam()", +"ca13fb0f": "minInvestCents()", +"ca154008": "AssetContract()", +"ca15fb65": "getCardPower(uint256,uint256)", +"ca1637f5": "getGDemocsN()", +"ca169e66": "Voodka()", +"ca17cad1": "getBoxPrice(uint256,uint256)", +"ca185022": "foundersFundAddress()", +"ca1861aa": "stockCancelBuyOrder(uint256,uint256,uint256)", +"ca18da3f": "setGender(uint8,string)", +"ca18ebbf": "preICOPrice()", +"ca1929aa": "LogBeerRedeemed(address,bytes32,uint256)", +"ca1938e5": "houseCutPercentage()", +"ca1a2eb4": "localPaiementConfirmation(bytes32,bytes32)", +"ca1a3086": "transferChickenFrom(address,address,uint256)", +"ca1a4942": "CountExecs()", +"ca1a9433": "addZiekenhuis(address)", +"ca1aa5bb": "distributeReservedTokens()", +"ca1ab2ef": "divideByZero(uint256)", +"ca1ac5cb": "_createWhale(string,address,uint256)", +"ca1ad32c": "setPartnerPercent(address,uint16)", +"ca1b06b2": "ActionAuctionPlat(address,address)", +"ca1b5aa7": "allowUpgrading(bool)", +"ca1bf69f": "froze(address,uint256)", +"ca1c3bb3": "testNonExistingVoteWeight()", +"ca1c8895": "setPriceOfToken(uint256)", +"ca1d209d": "fund(uint256)", +"ca1d6f73": "doTeamMinting(address)", +"ca1e5bb7": "mintTokensByETHExternal(address,uint256)", +"ca1e9738": "getPricePerToken()", +"ca1ea20e": "dataMigration(address,address,address[])", +"ca1eb8be": "marketaWallet()", +"ca209c8b": "Bullexi()", +"ca2145a7": "CoinHot()", +"ca215005": "getIndividualPrice(address,uint256)", +"ca2156bd": "redenominate(uint256)", +"ca2177ef": "NSPFallback(address,uint256,uint256)", +"ca219b16": "XsearchToken()", +"ca2317dd": "changeReserveTeamRecepient(address)", +"ca2322c2": "mashToken()", +"ca2392f8": "sell(uint8,bytes6,uint32,uint32)", +"ca24034b": "deathData_v17()", +"ca2527e5": "batchTransfer2(address[])", +"ca256771": "weiPerUSDinTGE()", +"ca2571af": "lockedEarningsOf(address)", +"ca25bf6f": "IncubatorGlobalGas()", +"ca25e9c5": "setPurchaseRatios(address[],uint256[])", +"ca263a49": "registerDomain(bytes8,string)", +"ca2659dc": "commitPhasesDerived()", +"ca265c0f": "getCurrentSpend(address)", +"ca267f28": "getRecordCount()", +"ca2748bd": "transferAndFreeze(address,uint256,uint256,uint256,uint256,uint256)", +"ca276c07": "updateTierMinimum(uint256,uint256)", +"ca2785bf": "flushHouseFees()", +"ca278feb": "VanityURL()", +"ca27b214": "LucksToken()", +"ca27eb1c": "createListing(bytes32,uint256,address)", +"ca281fd9": "renounceControl()", +"ca28d2ae": "SEKCapitalToken()", +"ca292622": "getCompany(bytes32)", +"ca29cae8": "bufferWallet()", +"ca2a2f99": "_inMoney(uint256)", +"ca2acfff": "_getTokenAmountWithoutBonus(uint256)", +"ca2bf047": "predictPacks(uint256)", +"ca2c139c": "getCurrentQuickPromoBonus()", +"ca2cba95": "playerwithdraw()", +"ca2cd9d3": "marketactive()", +"ca2cef51": "MiningWarContract()", +"ca2d553a": "setAccessControl(address,address,uint8)", +"ca2dfd0a": "removeVerifier(address)", +"ca2dfff1": "notforked()", +"ca2e2f49": "firstVestedLockUpAmount()", +"ca2e8cc5": "markRedeemed(address)", +"ca2f281b": "FMC(uint256,string,string)", +"ca2f5a07": "PubRejected(address,string)", +"ca2f5cb4": "_addPauser(address)", +"ca2f6487": "Zettabyte()", +"ca2fd584": "getCommanderPot()", +"ca30597d": "BoomstarterPreICO(address[],address,address,uint256,bool)", +"ca30a279": "setTgeAsSaleAgent()", +"ca313539": "EMISSION_FOR_SALESTAGE2()", +"ca315ca6": "slashStake(uint256,address)", +"ca3181e0": "mint(address,uint32,uint256)", +"ca31879d": "claimToken(address,address)", +"ca3228d7": "_updatePlayersMilk(address)", +"ca325469": "destinationAddress()", +"ca3261c6": "giveAuthorization(address)", +"ca330563": "isRedeemed(address)", +"ca33a817": "_guardianVendPrice(uint256,uint256)", +"ca343d2b": "getICOBonusAmount(uint256,uint256)", +"ca34a0e3": "iterate_next(uint256)", +"ca34e1d6": "WineMarket(address)", +"ca35271c": "numDebtors(address)", +"ca35bff2": "setCaps(uint256,uint256,uint256,uint256,uint256)", +"ca36226d": "removeCrowdsaleContract(address,address)", +"ca3654e7": "requestBonus()", +"ca36695c": "setUsdPerEth(uint256)", +"ca368538": "randN()", +"ca37a9eb": "setWeiPerCent(uint256)", +"ca37dfad": "crossBalance()", +"ca37f7d9": "reserverWallet()", +"ca386496": "setPassword(string,string)", +"ca392c49": "setPreITO(address)", +"ca39e5ef": "fight(uint256,uint256)", +"ca3a3f0d": "_payTicketByEarnings(uint256,address)", +"ca3aa607": "LendToken()", +"ca3b5c91": "hasRelation(bytes,bytes,address)", +"ca3c7519": "getReffName(address)", +"ca3c8e11": "BRONZE_AMOUNT_NDC()", +"ca3c9147": "ownerHistoryEntry(uint256,uint256)", +"ca3dd175": "approveAuthority(address)", +"ca3e1176": "DaoRulesProposals(uint256)", +"ca3e1733": "ico1Tokens()", +"ca3e5333": "isFundManager()", +"ca3fc092": "CheckPrivilegeAccomplishment(uint256)", +"ca4028da": "BabyBorn(string,uint256)", +"ca408e14": "publishSerie(string,string,string,string)", +"ca414006": "setData_11(string)", +"ca41d16f": "SMTfundAfterPreICO()", +"ca4223ad": "LATIME()", +"ca42afda": "getGErc20ToDemocs(address)", +"ca43801a": "SelfDesctructionContract()", +"ca4398e3": "StellarToken(uint256,string,uint8,string)", +"ca43b191": "armySatelitesCount(uint256)", +"ca4401f1": "investor_addRefBonus(address,uint256)", +"ca440ca3": "decimalDiv(uint256,uint256)", +"ca441b85": "randomBlockStart(uint256)", +"ca446dd9": "setAddress(bytes32,address)", +"ca448a88": "revokeAsset(bytes32,uint256)", +"ca44c8e4": "testMemoryIntegrityCheck4Bytes()", +"ca46e41f": "CROSAIR_VOUCHER_LIMIT()", +"ca4742f1": "getRN(uint256)", +"ca482264": "GetApplicant(uint32)", +"ca482849": "_finalSupply()", +"ca4858af": "evacuateTokens(address)", +"ca48b0be": "setupToken(address,address,address)", +"ca4938fb": "totalFreezed()", +"ca495022": "weiFromExchange()", +"ca4a0298": "maxAirDrop()", +"ca4a2bf7": "NewTokensSold(uint256,address,uint256)", +"ca4a3df3": "winlose()", +"ca4b208b": "developer()", +"ca4b4fd6": "remove(bytes32[],bytes32)", +"ca4bb2b5": "printAllProducts(uint256)", +"ca4bc6ae": "getBurritoData(uint256)", +"ca4bd513": "FundsRefunded(uint256)", +"ca4c8fc6": "OneTestCoin()", +"ca4cbf67": "getUint(address,string)", +"ca4d1435": "GWGF(uint256,string,string)", +"ca4e02d0": "Jump(address,uint256,uint256)", +"ca4e4863": "VECTORZILLA_RESERVE()", +"ca4f0911": "preICOPush(address,uint256)", +"ca4ff630": "priceForStage(uint8)", +"ca5271a1": "funcWithoutArguments()", +"ca52cc86": "CollectibleOffered(uint256,uint256,uint256,address,uint256)", +"ca53135a": "min_bet()", +"ca5397c7": "cancelSellOffer(uint32)", +"ca5450ce": "any_customer_payments_yet()", +"ca5454db": "createTransferAgreement(uint256,uint256,address)", +"ca54ea4e": "pointOf(uint256)", +"ca5541c1": "nextRoundReserve()", +"ca555f2c": "setInitLockedAccount()", +"ca558b25": "DataContacts(address)", +"ca55954c": "getTokenHolder(uint256)", +"ca56106c": "testCopy()", +"ca561d4d": "KiemTraNamNhuan(uint16)", +"ca579642": "GroupBuy(address)", +"ca585774": "RewardForum(uint256)", +"ca588f14": "delAdmin(address,address)", +"ca58a06c": "managerKey()", +"ca58d2b4": "FUNDS()", +"ca58da1a": "changeReserve(address)", +"ca59f45b": "transferRecord(bytes32,address,uint256)", +"ca59fa8d": "_distributedTo(address,uint16)", +"ca5a3b4a": "isAllowedWhitelist(uint256,uint256)", +"ca5a3f38": "getDaysPassedSinceLastRefundBallot()", +"ca5a899c": "totalStashedPayouts()", +"ca5adadc": "processEthPulicFunding(address)", +"ca5b4207": "log8(uint8)", +"ca5b428f": "Police_2()", +"ca5b8a52": "REGULAR_CATEGORY()", +"ca5c058d": "founderTokensLockedUntil()", +"ca5c1547": "preSaleFirstPrice()", +"ca5c7a34": "getLand(int256,int256)", +"ca5c7b91": "lockedSupply()", +"ca5d0880": "airDrop()", +"ca5eb5e1": "setDelegate(address)", +"ca5f4282": "amountWanted()", +"ca607c4e": "transfer_other(address,address,uint256)", +"ca60f409": "CurrentIcePrice()", +"ca61295b": "removeFRA(address)", +"ca615662": "testFailCreateWithForeignParentNotInUse()", +"ca6158cb": "itemId()", +"ca61cdac": "testSub()", +"ca61e9b3": "verifyHashWithPrefix(bytes32,uint8,bytes32,bytes32)", +"ca621ac3": "DEVELOPER_RESERVED()", +"ca626232": "exchangeAdapterManager()", +"ca628c78": "withdrawToken()", +"ca632cc5": "bountyPaid()", +"ca639025": "getNujaRegistry()", +"ca63a55b": "getHotelsLength()", +"ca63b5b8": "freezingCount(address)", +"ca63f057": "DISCOUNT_STAGE_ONE()", +"ca6490cf": "elementFunction()", +"ca64a02d": "withdrawBalances(address)", +"ca64a095": "viewNextRelease(address)", +"ca64ad89": "getNotPayableTime(uint256)", +"ca64cd34": "marketCapRed()", +"ca6528cc": "increaseBalanceOrWithdraw(address,address,uint256,uint256)", +"ca6649c5": "joinGame(uint256,uint8)", +"ca668eb2": "MyERC20Token(string,string,uint256,uint256)", +"ca66a9c7": "blocktubeCoin(uint256,string,uint8,uint256,string,string)", +"ca67065f": "tokensAreFrozen()", +"ca67628f": "presaleFemaleEnd()", +"ca68968e": "ConversionRates(address)", +"ca68a45d": "createLastWill(address,string,string,string,uint256,uint256)", +"ca698873": "countWhitelists()", +"ca699de1": "StagedRefundVault(address)", +"ca69e323": "maxToken()", +"ca6ad198": "oraclizeMinCallbackGasPrice()", +"ca6ad1e4": "setCustomGasPrice(uint256)", +"ca6b72fd": "XtracoinToken()", +"ca6c7400": "getBuyerSignature(string)", +"ca6cf796": "startWinery(string,string,string,uint256)", +"ca6cfd95": "_createToken(string)", +"ca6d56dc": "addMember(address)", +"ca6d5d0c": "getLockedTokensInGroup_(address,uint256)", +"ca6f8295": "RDOToken()", +"ca7044c3": "RelentlessConscience2Token()", +"ca708230": "funnel()", +"ca709a25": "getFeeToken()", +"ca710013": "hasAllowanceToRecieveTokens(address,address)", +"ca7140ad": "playerForceGameEnd(uint8,uint256,uint256,int256,uint256,uint256)", +"ca722cdc": "settleBet(uint256,bytes32)", +"ca7230e9": "transferFromRegister(address,uint256)", +"ca7275cc": "SpiceHours(address)", +"ca733c32": "commandAddress()", +"ca73419e": "addAddressesToBlacklist(address[])", +"ca7390ab": "mulDivCeil(uint256,uint256,uint256)", +"ca740c8b": "IncreaseFunding(uint256,uint256)", +"ca74124c": "addUser(uint256,uint256,uint256,string,string)", +"ca7423ad": "withdrawLocks(bytes32,bytes32,uint256,address,address)", +"ca7430ea": "transferunlock()", +"ca758f42": "stcMaxBonus(uint256)", +"ca75b954": "PRESALE_HOLDER()", +"ca75cbfe": "submitTransaction(address,uint256,address)", +"ca75d770": "m_Owner()", +"ca760021": "withdrawChamp(uint256,address)", +"ca761365": "getDebris(bytes32,uint8)", +"ca76e548": "updateRest()", +"ca76ecce": "gettotalBondDivs(uint256)", +"ca7729f7": "_parseIntScientificWei(string)", +"ca77a6e8": "handleALU(uint256,int256,uint256,uint256,uint256,uint256)", +"ca77ab65": "calculate()", +"ca77ab8a": "getNextFile(bytes)", +"ca77ba31": "totalIssuanceCurrentBalanceSum()", +"ca77ea25": "createTokenByAtes(address,uint256,string)", +"ca78e65b": "disableManuallyMintTokens()", +"ca790380": "AstatosToken(address)", +"ca792754": "_assign(address,uint256)", +"ca79e2f2": "mintLongTermTokens(address,uint256)", +"ca79f967": "abortInactiveFight(uint256)", +"ca7a08ef": "compensate(address)", +"ca7b15da": "tokenRate5()", +"ca7bfc5d": "FinanceChain(uint256,string,string)", +"ca7c4dba": "getEtherPrice()", +"ca7c4e35": "OmenoToken()", +"ca7c8d07": "Medcash(address,address)", +"ca7c9296": "calculateFundedValueTokenToken(address,address,uint256,uint256,address,uint256)", +"ca7c95f2": "PRE_SALE_20_BONUS_MIN()", +"ca7ca5b4": "removeMember(address,bytes32)", +"ca7d18fe": "CORPayCoin()", +"ca7dc5b1": "getNumberOfTweets()", +"ca7e321f": "startBuyBackDate()", +"ca7e88ba": "setOutcome(bytes32,uint8)", +"ca80b489": "setGenes(uint256,uint256)", +"ca8127d4": "tradingFeeModifiers(address,address)", +"ca819d35": "getUserIDByWallet(address)", +"ca82a7c8": "rentModified(uint256)", +"ca82b5aa": "playBps(uint8)", +"ca84c176": "bonusAfterPresale()", +"ca84d17d": "payLeaderAndDev()", +"ca855a57": "SecureEgg()", +"ca85dbfc": "quickSetStarterClasses()", +"ca862298": "BitcoinWorld()", +"ca8695a4": "resetNewTokens()", +"ca8786c9": "bacancyToken()", +"ca879753": "burnMe()", +"ca87cb2a": "MRASToken()", +"ca87e67e": "setSaleTime(uint256,uint256)", +"ca87eb50": "Seo(address,uint256)", +"ca8836d2": "isPending(uint256)", +"ca88552d": "stock(address)", +"ca887dc4": "getAllGameStatistic()", +"ca88a7b0": "_shareToReferer(address,uint256,uint256)", +"ca88b3b2": "destructAll()", +"ca88bd5b": "isAccountBlocked(address)", +"ca88c5bd": "_getChallengeSuccess(uint256,uint256,uint256)", +"ca899878": "depositForRelay()", +"ca8a2c08": "createEstate(int256[],int256[],address)", +"ca8ab933": "countInstructors()", +"ca8b39c8": "setRegionBlockUpdatedAt(uint256,uint256)", +"ca8b42e4": "max_index()", +"ca8ee75a": "read_u8_array()", +"ca8f8ff3": "isExist(uint256)", +"ca8f9651": "voterVotingTime(address)", +"ca922078": "fundingStage(bytes32)", +"ca929e12": "transform(uint8,uint8)", +"ca92a136": "result_hash()", +"ca940bba": "getPastBet(uint256)", +"ca94452d": "setCrowdsaleTransfer(address,uint256)", +"ca94692d": "abiSignature()", +"ca949a1d": "blackjackValue(uint8)", +"ca94a927": "UnicornManagement(address)", +"ca95402d": "ExpRegistrar()", +"ca965c3f": "transferCEO(address)", +"ca96d7fc": "claim(bytes32,bytes32,uint8)", +"ca970bac": "donateDivs()", +"ca972cd4": "registerNewAccount()", +"ca97a248": "MoveRerolled(uint256,uint256,uint256)", +"ca97d274": "updateTokens3PerEth(uint256)", +"ca990859": "getPlayedInfo(address)", +"ca997200": "getForecastData(bytes32,bytes32,bytes12,uint8)", +"ca9a06df": "calcReservedTokens(uint256,uint256)", +"ca9a9386": "getNickname(address,address)", +"ca9c2862": "getCrydrController()", +"ca9c4b33": "hatchEgg()", +"ca9ccd3d": "secondRoundTime()", +"ca9d07ba": "refill(uint256)", +"ca9d0f8d": "process2(uint256,address)", +"ca9defb7": "ownerTransferZTH(address,uint256)", +"ca9e1993": "_transfer()", +"ca9ec138": "toEthSignedMessageHashBytes(bytes)", +"ca9efc73": "left81(uint256)", +"ca9f0803": "reservedInvestors(address)", +"ca9fa49e": "halfyearteam_trade_date()", +"caa02e08": "winnerCount()", +"caa035d6": "getTokenSaleType()", +"caa03a3e": "getPlayerId(string)", +"caa0f0af": "devAllocateTokenInMinutes(address,uint256,uint256)", +"caa0f92a": "getNextTokenId()", +"caa14e36": "setGiveBirthType(bool)", +"caa25756": "registerProductContract(address,address)", +"caa3b6e4": "TicTacToe()", +"caa3d559": "TRCExchangeRate()", +"caa4041e": "getAccountLimit(address)", +"caa4c5d0": "assumeControl()", +"caa5aba2": "ConfigurableParameters(uint256,uint256)", +"caa648b4": "getTotalValue()", +"caa67873": "CreateKDT(address,uint256)", +"caa6fea4": "emergency()", +"caa7590d": "MIN_INVEST_BOARD()", +"caa774ed": "petOnLeaderboards(uint64)", +"caa7b4b8": "ABToken(uint256,string,uint8,string)", +"caa7be13": "ClientPaymentEvent(address,uint8,uint8,int256)", +"caa7fd06": "cancelBid(uint256,uint256,bool)", +"caa82ab2": "TokenSendFail(uint256)", +"caa872ae": "_takeAll(address,address,uint256)", +"caa877e7": "buyFor(address,address)", +"caa8e084": "div(uint32,uint32)", +"caaa2045": "addressToNumTowns(address)", +"caaacb12": "totalForMining()", +"caab0acc": "testThrowCreateRetracted()", +"caab21d2": "Ore()", +"caabe889": "inAllocationLockPeriod()", +"caac87d0": "airdropPlays()", +"caad5b18": "withDrawEther(uint256)", +"caade55b": "AddrPartnerPocket()", +"caaed302": "rejectMilestone(uint256)", +"caaee91c": "setProxyOwner(address)", +"caaf2dd7": "getInitialAnswerResult(uint256)", +"caaf6d21": "numLoveItems()", +"caafa055": "ROUND_7_PRESALE_BONUS()", +"caafc163": "process2(uint256,address,address)", +"cab0198f": "emitTokensToOtherWallet(address,uint256,uint256)", +"cab067c0": "initialiseCrowdsale(uint256,uint256,address,address)", +"cab09273": "getUsedPaymentSupply()", +"cab0f632": "changeSponseeAddress(address)", +"cab17220": "VotesNecessary()", +"cab36e92": "addHash(uint256,string)", +"cab37586": "partnerWithdrawed(address)", +"cab39db9": "_updatePhase(bool)", +"cab3ad2c": "BONUS_ICO_WEEK_ONE()", +"cab47da7": "RATE_FOR_WEEK2()", +"cab54df1": "testHitPresaleCapPreDistribute()", +"cab59238": "setTrust(address,bool)", +"cab5c0f1": "_incrementState()", +"cab60267": "getGameCalculatedStats(uint256)", +"cab63661": "setPublisher(address)", +"cab6eade": "_destroyDeed()", +"cab7e3d9": "purchaseCars(uint256,uint256,bool)", +"cab7f0cc": "test_insert_findWithHintNextRemoved(int256)", +"cab7f521": "invoke()", +"cab896dc": "gameCost()", +"cab925a3": "BurnReceipt(address,uint256)", +"cab9c32a": "sellLimit(uint256,uint256)", +"caba203d": "Loyalty()", +"cabb3a3a": "isAlphaNumeric(string)", +"cabc0f43": "isLotteryOpen()", +"cabc6589": "awardWinnings()", +"cabc737c": "_addMaster(address)", +"cabcaaa0": "associateWithFile(bytes32)", +"cabd27de": "Motion(address)", +"cabd734f": "reject(bytes32)", +"cabe0452": "getCampaign(bytes32)", +"cabe2c0a": "levelEndDate()", +"cabf72e5": "WSBCCoin()", +"cabf8493": "balancesImporter4()", +"cabfb934": "replace(address)", +"cabfd1bf": "allocateTokens(address)", +"cac07bbf": "distributeTeamCut(bool,uint256)", +"cac12d2d": "tokenGenerationCap()", +"cac35112": "tokenRelease()", +"cac37f93": "totalTokensWithdrawn()", +"cac3e64a": "checkToken()", +"cac3f6c9": "percOf(uint256,uint256,uint256)", +"cac625e6": "transferTokenOwnership(address,address,uint16)", +"cac6d78f": "ToexCoin()", +"cac6edd8": "rightLottery()", +"cac77df7": "__transferFromToICAPWithReference(address,bytes32,uint256,string)", +"cac7db8a": "addUserToList(address)", +"cac7fc71": "allBalances(address,address,address[])", +"cac8d538": "setERC20Contract(address)", +"cac92fe1": "Aeroneum(address,address)", +"cac952ae": "isValidCustomerTxPaymentForMCW(address,bytes32)", +"cac98d6d": "getCCH_edit_24()", +"cac9a94e": "changeWalletOwnerAddress(address)", +"cac9ffbd": "fillIndexedBid(uint256)", +"cac9ffee": "unWhitelistAddress(address)", +"caca66bd": "transferPlatformship(address)", +"cacb27f4": "_D_sendToTeamEthContract()", +"cacc24eb": "transferFromViaProxy(address,address,address,uint256)", +"cacca238": "getBaseAmount(uint256)", +"cacca4a0": "approveTransfer(uint256)", +"caccd7f7": "developerAddress()", +"caccd805": "daoPOLSKAtokens()", +"cacd7a66": "creatUserID(string)", +"cace12e6": "roundInfo()", +"cace467e": "cancelSell(uint256,uint256,uint256,uint256)", +"cace7bd3": "claimRewardK(uint256)", +"cace8f37": "dragonGirlLotteryNumber()", +"cacf1e0e": "getPaymentsCount()", +"cacf5a33": "calculateVestedAmount()", +"cacf66ab": "genesisTimestamp()", +"cacfa24a": "_isBuilt(uint256)", +"cacfb535": "unpackAll(uint256)", +"cacfd8e9": "playTypes(uint256)", +"cad079ed": "investedUSD()", +"cad0899b": "sum(uint256,uint256)", +"cad1c663": "getChildOperation(bytes32,uint8,uint8)", +"cad1d39b": "getPersonalAirdropUnlockTimestamp(address,address)", +"cad2042f": "O2OToken(uint256,string,string)", +"cad27ae1": "random(uint64,uint8)", +"cad283a0": "EtherBetIO(address)", +"cad3d24d": "calculateBoatFee(uint256)", +"cad41357": "darknodeBond(address)", +"cad461ea": "setWeiPerUSD(uint256)", +"cad4ae37": "_addToBlacklist(address)", +"cad60d17": "freezeTokens(uint256,uint256)", +"cad66781": "NumOfStudentsRequests()", +"cad6dd1f": "sumPreICOUSD()", +"cad7214d": "supplyRound4()", +"cad80024": "left58(uint256)", +"cad916ec": "DEVELOP_CAP()", +"cad93688": "Test2(uint256)", +"cad9639d": "DEXK()", +"cad9642b": "getReportCount()", +"cad987f5": "updateAppreciationStep()", +"cadaacbf": "g(address)", +"cadb1166": "modifyWhiteList(address[],bool)", +"cadb3031": "timeoutY()", +"cadb48d9": "contractCreationBlockTime()", +"cadb5236": "vestToAddressEx(address,uint128,uint8,uint32)", +"cadbead4": "Pentacoin()", +"cadc958f": "VoteOnTransferStarted(address)", +"cadca796": "setShareHolders(bool,uint256,uint256)", +"cadcbce4": "PartComplete()", +"cadd888b": "getRewardToken(uint256,uint256)", +"cade3a5d": "_createPixel(uint24,uint32,address)", +"cade4f31": "collected_crowd_vitas()", +"cade77fa": "readAddress(address)", +"cadec1b2": "Registrar(address)", +"caded61f": "saleRatio()", +"caded711": "subOpenRoomCount(address)", +"cadf338f": "valueOf(uint256)", +"cadf74e2": "_unclaimedChickenOf(address)", +"cae039eb": "getWishTime(uint256)", +"cae07d2a": "TOKEN_SCALE()", +"cae15051": "tokenReceived(address,uint256)", +"cae20b59": "getAnimalIdsWithPendingCostume()", +"cae21530": "fightZeroMonster()", +"cae270b6": "sell(address,address,uint256)", +"cae342f6": "dontShowMeInTrace()", +"cae39b6f": "compute_pi(uint256)", +"cae3c254": "publicFundingWhiteList(address)", +"cae3d482": "vehicles()", +"cae44e83": "EthereumCoin()", +"cae4d676": "sendRefund(address)", +"cae523c1": "testOwnedTryAuthUnauthorized()", +"cae57913": "addTwo(uint256)", +"cae5c8c3": "APP_STORE()", +"cae6047f": "INVERSE_BASIS_POINT()", +"cae61d2e": "offer(string,uint256,uint256,address)", +"cae6b9c5": "tapPoll()", +"cae6ff18": "SKPT()", +"cae774b3": "maxInterval()", +"cae8e284": "newProposal(address,uint256,string,bytes32)", +"cae8eb2f": "ctrtToken()", +"cae96610": "WorldWifi()", +"cae96926": "is_creator(address)", +"cae98d4f": "r1(address)", +"cae9a07d": "changeManager()", +"cae9ca51": "approveAndCall(address,uint256,bytes)", +"caeafe6a": "stageStartTime()", +"caeb2539": "PreSaleBuy(address)", +"caeb2e2c": "_emitSkillAreasSet(address,uint256)", +"caeb30e9": "Configurator()", +"caebb256": "channelManagerByAsset(address,address)", +"caec390e": "getinfolaff(address)", +"caec3c79": "getBatchTransfer(address,address)", +"caecc5aa": "turnrefund()", +"caed4f9f": "DataService()", +"caed80df": "registries(address)", +"caee04b5": "AddGameCategory(string)", +"caee1daf": "creationRateOnTime()", +"caee262c": "sharesRec(uint256,uint256)", +"caee3305": "firstVestStartsAt()", +"caee4e18": "CommunityVotes(uint256)", +"caee7c78": "grantsCreated()", +"caef2181": "GetTimeMultiplier(uint256)", +"caef5dec": "getSubPayeesCount(bytes32)", +"caef6a84": "ETHMONEY()", +"caefb79e": "setCaps(uint256,uint256,uint256)", +"caefc5d5": "SemfaxToken()", +"caefdbe9": "FWDaddrETH()", +"caf05ce3": "isStopPlay()", +"caf0887d": "split(uint256,uint256,uint256)", +"caf19e5a": "toText(bool)", +"caf1bb7c": "repoBase()", +"caf29765": "PERCENTAGE_DIVISOR()", +"caf306c2": "ratePerWeiInMainICO()", +"caf439cb": "angelBurn(address,uint256)", +"caf44683": "test2(uint256)", +"caf597f3": "INVEToken(address)", +"caf66171": "bigRoundMaxRoundNum()", +"caf6cb3f": "marketDefaultFeeHigh()", +"caf6e1c9": "setClosedManually(bool)", +"caf6fe1a": "randomGenes()", +"caf71743": "createSellOrder(address,uint256,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"caf798d7": "transferRegion(uint16,address)", +"caf7caf1": "_multiplyDecimalRound(uint256,uint256,uint256)", +"caf807a1": "closeEth()", +"caf91b30": "airdrop(uint8,bytes32,bytes32,uint256)", +"caf9bf58": "getContributionsCount(address)", +"cafa1cde": "PajCoin223()", +"cafa22d7": "setLeftICOTokens(uint256)", +"cafab7e1": "viewPetitionShareholderWithAddress(address)", +"cafaed51": "deadlineParticipation()", +"cafb2202": "invested()", +"cafbc49d": "createProduct(bytes32,string,address,uint256,uint8,uint256)", +"cafbcc8a": "inInnerScope(uint256,uint256)", +"cafc0fbd": "isRegulated(address)", +"cafd3d52": "setUpCrowdsale()", +"cafe0e90": "setFee(string,uint256)", +"cafe2f19": "setReachCapped()", +"caff4b03": "Response(bytes32,uint256)", +"cb009d2c": "KellerWilliams(uint256,uint256)", +"cb00e7f8": "MCTContractToken(uint256,address)", +"cb0177a0": "disableAllocationModificationsForEver()", +"cb0195ee": "changeDeveloperTemplateAmountLimit(uint256)", +"cb01a9bf": "payRent(bytes32,string)", +"cb01c70c": "episodesNum()", +"cb01cd02": "masscreate(uint256,uint256)", +"cb01f15c": "GetLogMessageWarning()", +"cb01f431": "maxTokensToSaleInClosedPreSale()", +"cb0210a0": "updateReputation()", +"cb029785": "Aphrodite()", +"cb02ba28": "multiSend(uint256,address[])", +"cb030cee": "_reducerunmoney(address,uint256)", +"cb03e43b": "AnimalFoodToken()", +"cb040e0b": "createTemplate(string,bytes32,bool,address,bytes32,uint256,uint256,uint8,uint256)", +"cb04a34c": "getMarketTotalPar(uint256)", +"cb05b93e": "getEth()", +"cb076478": "getTicket(address,uint256)", +"cb07b94b": "getLastRegionId()", +"cb09abc2": "resolveProp(uint256)", +"cb09b0d0": "ownerAPI()", +"cb0a2d95": "HashtagToken(uint256)", +"cb0a3889": "setPreIcoStart(uint256)", +"cb0ab425": "getIPFSHash(address)", +"cb0b6161": "_calcRelease()", +"cb0b7b03": "setContributionMinimum(uint256)", +"cb0cedb8": "getFineLevelOfAddress(address)", +"cb0cfaa2": "finalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", +"cb0d3133": "setEscrowedProjectBalances(uint256,uint256)", +"cb0d3981": "getMintForReportingParticipantTargetValue()", +"cb0ef7d0": "hgtRates(uint256)", +"cb0f86ab": "cards_black(uint256)", +"cb0fb059": "getNumberTwoArgs(address,bytes4,address,address)", +"cb10e0c5": "getLastDuel1()", +"cb10fa76": "safeToMul(uint256,uint256)", +"cb11526d": "moving()", +"cb117f0c": "approveAndCallAsContract(address,uint256,bytes)", +"cb122a09": "setFee(uint8)", +"cb12b48f": "me()", +"cb12be81": "prometheusShipMinted()", +"cb12fc1d": "LAMDEN_DECIMALS()", +"cb1374a2": "claimTokens(address[],uint256[])", +"cb146814": "baseETHBalance()", +"cb149b09": "unlockWorker(address,address)", +"cb14a5cf": "treeDetails(uint256)", +"cb14b170": "SubscriptionModuleImpl()", +"cb14d93b": "getHash(bytes,address,uint256)", +"cb1579ec": "checkOrderBatch(uint256[48])", +"cb15d07b": "getOfferAmount(uint256)", +"cb161f8a": "AddDiv()", +"cb16415f": "fundsToOwner(uint256)", +"cb1650b4": "createThread(string,string)", +"cb16d4a2": "sendEther(uint256,address)", +"cb16e6d0": "earlyParticipantWhitelist(address)", +"cb170735": "createBools(bytes32[],bool[])", +"cb192f2c": "setAdvertisingAddress(address)", +"cb19bf53": "Testtoken5()", +"cb1a32a4": "aotLength()", +"cb1a7b1d": "tokenDelta(address,address,address,uint256,uint256,uint256)", +"cb1aaa31": "distributed_bounty()", +"cb1ab340": "setFinancialAdmin(address)", +"cb1b82b7": "getuserbalance(address,address)", +"cb1ba60f": "voteOnElection(address,address,address,address,uint256)", +"cb1be21a": "configureWallet(address)", +"cb1c2b5c": "MIN_STAKE()", +"cb1c8b6a": "purchaseDefense()", +"cb1d8418": "getForkingMarket()", +"cb1d9d63": "setENGCommunityAddress(address)", +"cb1de087": "transferFromFST(address,address,uint256)", +"cb1e4389": "isMajorityConfirmed(bytes)", +"cb1fa715": "setSingleWithdraw(uint256)", +"cb1faac1": "leftVotes()", +"cb1fc276": "createPassportByOwner(address)", +"cb1fc7bc": "totalSzaboInBids()", +"cb207166": "LifeFactor_iv()", +"cb227cae": "getPOOL_edit_18()", +"cb22c0aa": "setBudget(address,string)", +"cb22d392": "windowFinalBlock(uint256)", +"cb22d41b": "numBeneficiaries()", +"cb22fd59": "setFeeCharge(uint64)", +"cb238ffa": "returnHashLong(address,uint256[3])", +"cb2410b9": "changeContentData(uint256,uint256,bytes32)", +"cb244f65": "koreanCitizen()", +"cb24e8f1": "Foorp()", +"cb254080": "TomToken()", +"cb25d9a2": "JFDToken()", +"cb27bdc1": "revealDeadline(bytes32)", +"cb27f28a": "endCrowdFund()", +"cb282253": "totalEthContributed()", +"cb28ba6a": "AIToken(uint256)", +"cb28c716": "createKycData(address,string,string,uint256,uint256,string,string,string,string,int256,uint256)", +"cb293e7a": "rentRentable(bytes32,address)", +"cb294dc5": "ULTRONEUM()", +"cb2971b1": "eosTokenAddress()", +"cb297ef0": "_performRenewal(uint256,uint256)", +"cb29881c": "createEggScheme(uint256,uint256,uint256,uint256,uint256,uint256,bool,bool)", +"cb29eee0": "medsupply()", +"cb2b34d6": "setSalary(uint256)", +"cb2b5668": "EVBChain()", +"cb2b9031": "addressToBytes(address,address)", +"cb2bea55": "setEmergencySecrets(uint256,uint256)", +"cb2c05dc": "viewInitialPricePerShare()", +"cb2c8723": "addUtilityHolder(address)", +"cb2e0814": "iii(address)", +"cb2e1d10": "icoRound4()", +"cb2e46f3": "endTimer()", +"cb2ec895": "deposit(bytes32,address,uint256,bool)", +"cb2f7b87": "update(uint32,uint128,uint128)", +"cb2f7c49": "hashDifficulty(bytes32)", +"cb2fe520": "remainingTokenBurnt()", +"cb31b6cd": "multiTransferFrom(address,address[],uint256[])", +"cb3204a8": "getKycHash(uint256)", +"cb338436": "doSendProfits(address)", +"cb33e7fa": "doTrade(address,address,uint256)", +"cb35ef2c": "demotest()", +"cb3687df": "core(uint256,uint256,uint256,uint256)", +"cb3694ba": "getManualInvestorsCount()", +"cb379765": "tsauction(uint256)", +"cb381b61": "teamETHUnlock1()", +"cb381c3c": "setGas4Token(uint256)", +"cb388b9b": "test_callIt()", +"cb38c7b4": "getWithdrawalList(address)", +"cb393ecb": "Dice5()", +"cb3993be": "decreaseApprovalAndCall(address,uint256,bytes)", +"cb39aafb": "validateRequest(bytes32[8],bytes,bytes,bytes)", +"cb3a11f9": "withdrawUserSpecifiedFunds(string,uint256,uint8)", +"cb3ab271": "WYQToken(uint256,string,string)", +"cb3ae150": "Playforbulktoken()", +"cb3b0c79": "LotToken()", +"cb3bc227": "LogBeerBought(uint256,address)", +"cb3c28c7": "trade(address,uint256,address,address,uint256,uint256,address)", +"cb3cb085": "validateTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)", +"cb3ce26e": "m_owners()", +"cb3cf99a": "decode(bytes,uint256,uint256,uint256,uint256,uint256,uint256)", +"cb3d6b5f": "devTeamWithdraw()", +"cb3e394d": "transferFromWithFee(address,address,uint256,uint256)", +"cb3e64fd": "unhalt()", +"cb3ebec2": "ownerDividend()", +"cb3eecc9": "getNewInstance()", +"cb3eef2c": "allWorkers()", +"cb3fcb56": "setGrowthTokensPercent(uint256)", +"cb4153e9": "destroyNinja(uint256)", +"cb421a21": "denemekontrat()", +"cb424c24": "HZRToken(address)", +"cb42a77b": "stringTobytes32(string)", +"cb43269d": "getRegistryImplementation()", +"cb4360d9": "allocateToken(address,uint256,uint256)", +"cb43e079": "drain_block()", +"cb44211e": "addApproval(address)", +"cb44b53d": "ResolutionProposals()", +"cb457d47": "unlimited()", +"cb45a294": "getSecondTokens()", +"cb4717b2": "SetProperty(bytes32,uint256,uint256,uint256)", +"cb4735f2": "estimatedFundingAmount(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cb4799f2": "getMetadata(uint256,string)", +"cb47a8ce": "MultiChampion()", +"cb47abc7": "getTotalNumberOfTransactions()", +"cb48e1a5": "assignShareTokens(uint256)", +"cb4a15c5": "checkStringLength(string,uint256,uint256)", +"cb4b0105": "Unhold(address,uint256)", +"cb4b3710": "setStopSelling()", +"cb4b9db1": "EchoChainToken()", +"cb4bc2e9": "tryauthenticate(bytes)", +"cb4bd883": "updateRef(bytes32,string)", +"cb4be0bb": "getTurtlemasterReq()", +"cb4c86b7": "funding()", +"cb4c88ae": "MediatedTransferStatusModified(uint256,bool)", +"cb4c8ee4": "isRSPScience()", +"cb4d3d67": "AddedTokenHolder(address,uint256)", +"cb4de968": "ICO_BASE_PRICE_IN_WEI()", +"cb4e75bb": "smbl()", +"cb4e7fdc": "icoIsRunning()", +"cb4f1d85": "getPolicyHolder(bytes)", +"cb50301a": "unsoldAddr()", +"cb510e97": "isStaff(address)", +"cb51c418": "_toString(address)", +"cb51f777": "TOKEN_PRICE_NUM()", +"cb526229": "RefundChequeByHash(uint256)", +"cb52926a": "getBoughtAssetPacks(address,address)", +"cb52c25e": "updateAmountRemainingForSale(uint256)", +"cb553ac9": "sweepWizardCommission(uint256)", +"cb55adfb": "getStrategyTokenAndWeightByIndex(uint256,uint256)", +"cb560ac4": "winningMultiplier()", +"cb562fb3": "Uniond()", +"cb56d626": "testFailBlobStoreNotRegistered()", +"cb56dd79": "getFinalState(uint256)", +"cb56e40b": "getTrader(uint8)", +"cb574b8c": "buyUpgrade()", +"cb577480": "prepare(uint256)", +"cb5829ab": "Revision()", +"cb5853a8": "claimTaxex(uint256,uint256)", +"cb58594e": "airDropShadowMoney()", +"cb586251": "MintableMultiownedToken(address[],uint256,address)", +"cb5b6bef": "setPriceStep8(uint256)", +"cb5bf9b8": "EthersRaised()", +"cb5cf43f": "supplyReady()", +"cb5d0646": "Presale2Sold()", +"cb5e4805": "NvcFundCoin()", +"cb5e7d2d": "newMember(address,bytes20,uint64)", +"cb5e891f": "_setActiveSupply(uint256)", +"cb5f18db": "get_ads()", +"cb5fa63f": "getRoundEth(uint256)", +"cb5fd01f": "TestToken(address,address,address,address)", +"cb5fe36e": "VESTING_2_DATE()", +"cb60f8b4": "sellStartTime()", +"cb6142c9": "freezeAllAccountInEmergency(bool)", +"cb61522d": "MILLIODS()", +"cb61b42d": "updateShares(uint256,uint256,uint256)", +"cb61b49e": "_setRate(address,address,uint256)", +"cb6291cb": "ownerSendTokens(address,uint8,uint256)", +"cb6308f1": "approveVersion(address)", +"cb6367d1": "verifySignatures(bytes32,uint8[],bytes32[],bytes32[])", +"cb637d85": "changeAccountService(address)", +"cb639322": "realReserve()", +"cb63da4e": "ALLOC_RES()", +"cb63ddb6": "makeProposal(uint8,uint256)", +"cb642180": "_updateNodeHeight(bytes32)", +"cb645ae2": "addOneRequest(address)", +"cb64a37b": "createSeratioStake()", +"cb64d74d": "etherFeePercent()", +"cb656a13": "adviserSold()", +"cb65ad66": "MobileAppSupply()", +"cb65c0f5": "withdraw_excess_tokens(uint256)", +"cb662fe1": "claimedList(uint256)", +"cb67f20f": "SaleClosed(uint256)", +"cb67f948": "unlockTokens(address)", +"cb68780f": "GetICOData(uint256)", +"cb6890d9": "setAccount(address,uint256)", +"cb692928": "dataControlSetFeePropMaxGlobal(uint256)", +"cb6ad855": "log10Ceiling(int256)", +"cb6af4cb": "createChannel(string)", +"cb6b1f05": "cf2Wallet2Pct()", +"cb6b25f3": "votePassed(uint256)", +"cb6b8699": "getPI_edit_5()", +"cb6bfa03": "BNIToken()", +"cb6bfd23": "CyTestCoin(uint256,string,uint8,string)", +"cb6c1655": "tokensFor1EthP1()", +"cb6cec4b": "getIpfsAfterTitle(bytes32)", +"cb6d0c5f": "minimumDurationInBlocks()", +"cb6da9da": "takerCount()", +"cb6e3fa9": "shouldUpdateFunder(address)", +"cb70d9a7": "changeUserCertificate(bytes32)", +"cb712535": "_transferFrom(address,address,uint256)", +"cb7129a3": "resolvePriorBets()", +"cb724422": "testPayTokens()", +"cb739476": "MAGExCoin()", +"cb739c0f": "changeRateLoss(uint256)", +"cb740c61": "grant(address,uint256,uint256,uint256)", +"cb742358": "virtualBalanceOf(address)", +"cb752679": "buyTokensWithPoly(uint256)", +"cb757e92": "REGO()", +"cb758a89": "addDataPoint(uint256,bytes32)", +"cb76937c": "getUserBetsTimeStampInARazInstance(uint256,uint256)", +"cb7729d3": "shiny()", +"cb774d47": "startingIndex()", +"cb775d5a": "consumePower(uint256)", +"cb77ed34": "_getProviderSupply(uint256)", +"cb78bebc": "USER_BUY_LIMIT()", +"cb78c9f0": "flips()", +"cb795a64": "allowedBuy()", +"cb79d573": "maxCompanyValue()", +"cb79e31b": "votingRightsOf(address)", +"cb7a0a6f": "getPlayerSpaceshipBattleModeById(uint256)", +"cb7aac1e": "transferTokensFromProjectFundAddress(address,uint256)", +"cb7acdd9": "hola()", +"cb7b3f0a": "readPaymentChannels()", +"cb7b3fb9": "KinguinIco()", +"cb7b4ad4": "canCPCreateInFactory(address,address)", +"cb7b8673": "setTokenExchangeRate(uint256)", +"cb7bba39": "lockaddress(address)", +"cb7bba61": "prove(string,string)", +"cb7c05e7": "verify_fund()", +"cb7c225e": "Send_TrustlessTransaction(address,uint256)", +"cb7c30f2": "m_D_n()", +"cb7d38ac": "changeStartPreSale(uint256)", +"cb7d8ef2": "spark()", +"cb7e70fa": "buyTokensOnInvestorBehalf(address,uint256)", +"cb7e9057": "dispatcher()", +"cb7e9bf1": "rewardHistoryMapOf(address,uint256)", +"cb7ef63d": "Coinage(uint256,uint256,uint256,uint256,uint256,uint256)", +"cb7fd9db": "checkVeracity(string)", +"cb802c8b": "getInvoice(bytes32)", +"cb80bd60": "LogRefundFailed(address,uint256)", +"cb810ea9": "sendTokensSingleValue(address,address,address[],uint256)", +"cb81fecf": "lockRequestCount()", +"cb821f03": "calculateClaimByIndex(address,uint256)", +"cb82d5df": "canMakeNoFeeTransfer(address,address)", +"cb84e69e": "setMessageMaxCharacters(uint256)", +"cb8523c6": "addAllowed(address)", +"cb856252": "getFreezeList()", +"cb859c09": "getGameRules()", +"cb85f175": "WhiteListedInvestorAdded(address,string)", +"cb86df95": "moveStartDate(uint256)", +"cb8820ef": "setWriterId(address,bytes32,bytes32)", +"cb884207": "deathData_f5()", +"cb885a36": "Crowdsale(address,uint256,uint256,uint256,address,address,uint256)", +"cb89558d": "AgreementHashRu()", +"cb899024": "defrostToken()", +"cb8a67ed": "ownersForChange()", +"cb8b4b83": "CollectERC20(address)", +"cb8b99b2": "_addCryptantFragments(address,uint256)", +"cb8c2982": "getMyKebabers()", +"cb8c478a": "activeTime()", +"cb8cb4a3": "getGoals(address)", +"cb8cd7cb": "transferFee_()", +"cb8d0f46": "tstop()", +"cb8ff46f": "koinconekt()", +"cb908d78": "_updateEthereumPrice()", +"cb912ffb": "tokenCountSet()", +"cb918634": "setDrawP(uint256)", +"cb91a6ba": "setGemPerMiner(uint256)", +"cb91aec7": "getFreelancerContracts(address,address)", +"cb91f1c2": "periodPreITO_endTime()", +"cb92042c": "removeShare(address)", +"cb923813": "saled()", +"cb92bfa1": "_computeCurrentPrice(uint256,uint256,uint256,uint256)", +"cb92c28d": "rewardEvery1000Draw7(uint256)", +"cb92cb52": "BuyBackStart(uint256,uint256,uint256)", +"cb930934": "KopihitamToken()", +"cb93abb2": "BUYER_STEP_1(bytes32)", +"cb93e347": "CryptoGamesMarket()", +"cb93f7ef": "withdrawDevFee()", +"cb944e24": "saleCapUsd()", +"cb945312": "testEqual()", +"cb949213": "addressToPurchasedTokens(address)", +"cb949e51": "getCustomer(address)", +"cb94aa26": "withdrawBatch(address[],uint256[])", +"cb950c37": "updateValidMCAmount(uint256)", +"cb9580e0": "TotalPaid()", +"cb95a6f6": "Bounty(address)", +"cb96012e": "hashTo256(bytes32)", +"cb965ae9": "allKeys()", +"cb96b0d6": "MAX_EXCHANGE_FEE_PERCENTAGE()", +"cb96f11d": "Oversight()", +"cb9756ad": "buyClimateCoinsAgainstEther()", +"cb9854a2": "confirmSwap()", +"cb985708": "investorWalletAddress()", +"cb985dd1": "MARKET_SHARE()", +"cb990457": "holdersByIndices(uint256,uint256,bool)", +"cb991efe": "depositEscrow(uint256)", +"cb99cbac": "startServer(uint256)", +"cb99d98e": "_addWhitelisted(address)", +"cb9a20d0": "MINI_GAME_ADD_TIME_DEFAULT()", +"cb9a3251": "finalizeMany(uint64[])", +"cb9a32a5": "promoMasterpiecesCreatedCount()", +"cb9a5edd": "availableLand()", +"cb9aac64": "usesLibrary()", +"cb9ae707": "latestDifficultyPeriodStarted()", +"cb9b3a3c": "getCCH_edit_4()", +"cb9bdf45": "tokenSoftcapIssued()", +"cb9c8505": "throwIfStartPastBlocktime()", +"cb9d5eb4": "safeMove(address,address,uint256)", +"cb9d6176": "LogDelete(address,uint256)", +"cb9d86e2": "BlockRefunded(address)", +"cb9dd1a0": "setMoving()", +"cb9e2755": "deleteEntity(uint256)", +"cba01a49": "LunarLink()", +"cba0e996": "isExcluded(address)", +"cba1fa10": "set_iconiq_presale_open(address,bool)", +"cba25e79": "presaleHardcap()", +"cba2c735": "createPurse(string)", +"cba456df": "casinoProxy(address,address,address)", +"cba4bc94": "_setHowManyOwnersDecide(uint256)", +"cba4f643": "changePreIcoRate(uint256)", +"cba50fd1": "generateUserRelation(address,uint256)", +"cba58ab6": "disableService()", +"cba59827": "Reject()", +"cba5b465": "endContract(address,uint256)", +"cba6582e": "Ellomiun()", +"cba66250": "FTV(address,address,address,address)", +"cba66e14": "sliceBytes20(bytes,uint256)", +"cba6a3a2": "setTransferAuthorized(address,address,uint256)", +"cba74da1": "getResource(bytes32,uint256,bytes32)", +"cba88872": "countdown()", +"cba8901b": "getPayoutKeys()", +"cba8be1c": "setServerAdmin(address)", +"cba91a35": "roundTwoTime()", +"cba9a794": "handleReturnBool()", +"cba9c0e0": "presale_start_block()", +"cbaa0b25": "playerAttack(uint256,uint256)", +"cbaa0bec": "amendSingleResult(int16,string)", +"cbaba70f": "EADC()", +"cbac21b8": "periodPreITO_mainCapInUSD()", +"cbac8816": "tokenRate20()", +"cbaca250": "RewardSplit(uint256)", +"cbacb269": "stopBonusCompaign()", +"cbacffe4": "addToPayeeBalance(address,uint256)", +"cbad3779": "getPublisherRegistry()", +"cbad60b6": "spread(uint8)", +"cbad7bf6": "cg(address,uint256,uint256,uint256)", +"cbaddbaa": "BurnMe()", +"cbae0163": "readPosition(uint256,int256)", +"cbae0978": "NewResolver(uint256,address)", +"cbae1467": "deleteAllAvatars()", +"cbaeadb4": "getRewardHistory(address)", +"cbaedd3c": "slashUsername(bytes)", +"cbaf4742": "OPERATE_SUPPLY()", +"cbaf5104": "_isClosed(bytes)", +"cbaf566d": "updateRentInfo(uint256,uint256,uint256)", +"cbafee8a": "tokensToMint()", +"cbb01884": "setDefault(uint8,address)", +"cbb04cbd": "debtPaid()", +"cbb05527": "totalCapInWei()", +"cbb0c95a": "getPlayerWithdrawEarning(uint256)", +"cbb105d6": "NewWorld()", +"cbb1d761": "confirmBySigner(bytes32,address)", +"cbb2fd5d": "TRTToken()", +"cbb31da9": "maker(address)", +"cbb433ea": "DeepToken()", +"cbb45120": "TOTAL_WINS()", +"cbb45444": "test_transfer_to_contract_without_fallback()", +"cbb50d30": "teamAllocationTokenSend(address,uint256)", +"cbb6e5c9": "transferTopLevelDomainOwnership(bytes32,address)", +"cbb70c92": "addLOC(address)", +"cbb8b158": "TESTH()", +"cbb9818c": "turn_flag_ON()", +"cbb9dbb9": "depositCoupon(address[2],uint256[8],uint8,bytes32[2])", +"cbba3f4b": "DCSToken()", +"cbbacd48": "cliffs(address)", +"cbbaed1b": "incentiveDistributionMaxRounds()", +"cbbb2698": "checkBlackAccount(address)", +"cbbc1bf3": "setCosignerAddressForUser(address)", +"cbbc8504": "GnosisTalk()", +"cbbc8a51": "setForeignDailyLimit(uint256)", +"cbbcdf77": "addCurrency(uint256)", +"cbbd809c": "approvedAddressInLUT(uint256)", +"cbbda00e": "Ptest()", +"cbbdca36": "Upgradable(address)", +"cbbe2199": "ActualTokenManager()", +"cbbe2569": "Bogocoin()", +"cbbe300b": "FooMintToken()", +"cbbe974b": "unlockUnixTime(address)", +"cbbea348": "getModeratorAtIndex(uint256)", +"cbbf879c": "getNumParentOperation(bytes32,uint8)", +"cbbf9420": "distributeVES(address[],uint256,uint256)", +"cbbfe168": "getOrder(uint256,address)", +"cbc066ab": "_transferOrderMoney(uint256,address)", +"cbc12d13": "maxRingSize()", +"cbc1cfd2": "emergency_withdraw()", +"cbc24224": "MuskToken()", +"cbc264f2": "nestedFirstAllToAll(uint256)", +"cbc265ac": "revealSeckey(bytes32)", +"cbc3b73e": "delegateHasValidSignature()", +"cbc3fb0d": "blind_sha256(string,address)", +"cbc44835": "PlateMate()", +"cbc469de": "STRToken()", +"cbc52ee4": "EtherIslands()", +"cbc598c5": "isAmountAllowed(address,uint256)", +"cbc61daf": "mintForMarket(address,uint256)", +"cbc69c8d": "SocialMediaToken()", +"cbc6c267": "ejenfwdToken()", +"cbc7755c": "registerNameXnameFromDapp(address,bytes32,bytes32,bool,uint8)", +"cbc7854e": "setTokens(address,address)", +"cbc846d9": "setBoosters(address)", +"cbc85c97": "getAllCardsClaimContender()", +"cbc8ae5f": "TOKEN_SUPPLY_ICO()", +"cbc9023c": "forceRoll()", +"cbc91e98": "sendTokensAfterBuyExp(address,uint256,uint256)", +"cbc9c89c": "Claim_TRAC_3800()", +"cbca02d3": "trasnferFromOwner(address,uint256)", +"cbca99c7": "updateWLAddress(address)", +"cbcaacab": "checkTransferWithReference(address,uint256,string)", +"cbcabc13": "changeMdtTeamAddress(address)", +"cbcb3171": "tokenReserve()", +"cbcc65eb": "ACL_APP_ID()", +"cbccf9d6": "Simpletoken()", +"cbcd5dfe": "MintableMasterToken()", +"cbcdc2e4": "transferBalanceToOwner(uint256)", +"cbce2fcf": "setAmountBasedBonus(uint256[],uint256[],uint256[])", +"cbce4c97": "gift(address,uint256)", +"cbcf4d25": "icoAccounts(address)", +"cbcf8ece": "setAccountBonus(address,address,uint256)", +"cbcf98e6": "changeSecondaryWallet(address)", +"cbcffd2f": "ShowInfo(uint256,string)", +"cbd076f8": "depositForUser(address,uint256)", +"cbd07fd8": "paidDividends(address,uint32)", +"cbd08c8c": "config(uint256,uint256,uint256,uint256)", +"cbd1b782": "test_claimShare_notTranscoder()", +"cbd21f00": "JBartContract()", +"cbd243b4": "SetWhy(uint32)", +"cbd2ac68": "confirmWhitelistRemoval(bytes32)", +"cbd2bdfd": "getAllAuctions()", +"cbd2c73b": "signUserKeyChange(address)", +"cbd2ecd2": "transferAllowance(address,address,uint256)", +"cbd3b403": "getLuck(address)", +"cbd3faef": "amountOwedForApiForBuyer(uint256,address)", +"cbd49462": "_sender()", +"cbd5131b": "sponsoredBonusAmount()", +"cbd57134": "KTCToken()", +"cbd5bb2b": "setRound(uint8)", +"cbd6cc67": "SendDataToken(uint256,string,uint8,string)", +"cbd85c76": "bytesToBytes4(bytes,uint256)", +"cbd88663": "drawJurors(uint256,uint256)", +"cbd8877e": "stakeMinAge()", +"cbd8e690": "setTokenAmountPerHeritor(address,address,uint256)", +"cbd8ff79": "ContributionToPrizeFund()", +"cbd9597d": "GenChipLevel_Special(uint256,uint256,uint256)", +"cbd9d2e0": "InvalidCaller(address)", +"cbda1d85": "fundingGoalHardCap()", +"cbdb2469": "_getPetBonus1(uint256)", +"cbdb4f72": "GetClientBalance()", +"cbdc5aa4": "tokensTradeable()", +"cbdd3268": "genesisImportsComplete()", +"cbdd69b5": "tokensPerEth()", +"cbde2ff0": "isUnfreezed(uint256)", +"cbdf02fb": "rejectCertificate(address,address)", +"cbdf3878": "goldLevelBonusIsUsed()", +"cbdf8692": "Lockup()", +"cbe0a1aa": "totalEthCharityCollected()", +"cbe0e49a": "presaleGranteesMapKeys(uint256)", +"cbe211ec": "adPriceWeek()", +"cbe230c3": "isAllowedToken(address)", +"cbe239ed": "setIcoPaymentStatus(bool)", +"cbe23b94": "cards_start_total()", +"cbe29f34": "advisorsSupply()", +"cbe2e97e": "setGameStatus(bool)", +"cbe324d8": "_setSuggestedAdPrice(uint256,uint256)", +"cbe335c1": "verifyDocument(bytes32,bytes,uint16)", +"cbe37e25": "BYBToken()", +"cbe3a072": "add(uint32)", +"cbe3be97": "KeplerCoin()", +"cbe40622": "setup(address,address,uint256)", +"cbe432b0": "ico3Tokens()", +"cbe44fa2": "setWhitelisted(address,uint16)", +"cbe5404f": "setAccountFrozen(address,bool)", +"cbe56377": "amendLock(uint256,uint256)", +"cbe566de": "deleteCascade(uint256)", +"cbe7a150": "getCryptoMatch(uint256)", +"cbe7b838": "YunKaiCoin()", +"cbe8047e": "testValidation()", +"cbe8623f": "divUp(uint256,uint256)", +"cbe9ef39": "BasicCoin(uint256,address)", +"cbea4412": "getItemHolders(uint256)", +"cbeb5749": "ShoreCoin(uint256,string,uint8,string)", +"cbebc563": "computeTraitScore(uint256,uint256,uint256)", +"cbec09a7": "bonus01()", +"cbec455f": "continueCrowdsale()", +"cbec72f3": "ownerHasClaimedTokens()", +"cbec78b9": "requestPrice(string,string,int256)", +"cbecb89e": "refferal(uint256,address)", +"cbed1568": "addAdminWhitelist(address)", +"cbedbf5a": "sendMoney()", +"cbeea68c": "permit(address,address,bytes32)", +"cbefe55c": "calcTokenRate()", +"cbf09802": "rateOf(address)", +"cbf0b0c0": "kill(address)", +"cbf0fa2d": "totalWageredForAddress(address)", +"cbf1304d": "balances(address,uint256)", +"cbf1382f": "founderStorageVault()", +"cbf1591d": "setDenyContract(bool)", +"cbf21837": "isSelling()", +"cbf26c0b": "DeviceOwner()", +"cbf2ad23": "confirmedBy()", +"cbf2b203": "Crowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"cbf33562": "addTrustLink(address,bool)", +"cbf346cc": "_sellCrowd(uint256,address)", +"cbf4531d": "dividendsAmount(address)", +"cbf66a02": "withdrawRune()", +"cbf6fff9": "SALE_SUPPLY()", +"cbf7c9a7": "isUserKyc(address)", +"cbf7cc2e": "deployFinished()", +"cbf7f009": "FAPFounder()", +"cbf89ed8": "DividendDeposited(address,uint256,uint256,uint256,uint256)", +"cbf9051c": "setPublisherRewardPool(bytes32,uint256)", +"cbf93c9b": "_claimExploreItemUsingEMont(uint256,uint256)", +"cbf97572": "HipsterFarmer()", +"cbf9a125": "queryChibiAdd(uint256)", +"cbf9b6dd": "getRecorderAddress(uint32)", +"cbfa18ea": "contractRefundFinished()", +"cbfa3c9c": "scaling()", +"cbfba0e1": "withdrawFee(bytes8)", +"cbfc12ba": "Soniq()", +"cbfc4bce": "gift(address)", +"cbfd14a2": "publicSaleSupply()", +"cbfd79e2": "AirdropFan()", +"cbfe6d41": "documentExists(bytes32)", +"cbfebb34": "setETHRate(uint256,uint256)", +"cbff158f": "addPollOption(uint256,bytes)", +"cbff17fa": "_setMinted(uint256,address)", +"cbff2cfc": "_getValueEther(uint256,uint256)", +"cbff69db": "contributionAt(uint256,uint256)", +"cbffb1ae": "updateConflictResolution(address)", +"cc00814d": "setPublicOfferLimit(uint256,uint256)", +"cc00ce12": "set_arbits_sale_open(bool)", +"cc01e39f": "availableAmountToCollect(uint256)", +"cc0238be": "getsumdata2(bytes32)", +"cc027cc9": "register(address,uint256,address,address)", +"cc02d73f": "setColorContract(address)", +"cc03477d": "nMsgsWaiting()", +"cc03c342": "setPlatformAddress(address)", +"cc05d836": "executeOrder(bool,address[3],uint256[4],uint256,uint8,bytes32,bytes32)", +"cc062b58": "enableSelling()", +"cc06c359": "maxLevel()", +"cc06f5ea": "getPeriodReceivedBalanceFor(uint256,address)", +"cc071051": "purchaseWolk()", +"cc075fa7": "stopTeamTrade()", +"cc07a94d": "_createMobster(string,address,uint256,uint256)", +"cc07dc37": "userReferralsWei(address,address)", +"cc08ebf6": "CryptoSportZ()", +"cc09c6b3": "OXO(uint256,string,string)", +"cc0a26d1": "CurrentMined()", +"cc0b2c9f": "tokenToOwner(uint256)", +"cc0b5a5f": "cancel(uint256,address,address)", +"cc0b94b7": "getChannelStatus(bytes32)", +"cc0b9dff": "addExitToQueue(uint256,address,address,uint256,uint256)", +"cc0bb8e5": "proof_of_public_key2()", +"cc0d0c90": "BlueTitaniumClassic()", +"cc0e13e2": "enableMaintenance()", +"cc0e1f66": "startOver()", +"cc0e24e1": "CheckDOT(bytes32)", +"cc0e97c9": "logicContract()", +"cc0f1786": "feeDecimals()", +"cc0f65f7": "GetMinerData(address)", +"cc10145f": "ownerWithdrawRune()", +"cc1027ea": "_validateReferrer(address)", +"cc105441": "MMOcoin()", +"cc10d53d": "IsPatient(address)", +"cc10e401": "create(string,bool)", +"cc11298e": "getRewards(uint256,uint256)", +"cc121ac1": "unsoldTokensVault()", +"cc129f4d": "radd(uint128,uint128)", +"cc130482": "SUNX()", +"cc131be1": "CreateNewDraw(uint256)", +"cc135555": "currentGene()", +"cc1423bf": "releaseBubToken()", +"cc143ce9": "NewXRateProvider(address,uint16,address)", +"cc147334": "payAllRewards()", +"cc148bf4": "awardBalanceOf(address,uint8)", +"cc14a7a3": "paidAddress()", +"cc151c82": "tokensToSellOnce()", +"cc15bee7": "isPurchasingPaused()", +"cc15c26c": "buyTokensReserve()", +"cc15d080": "getEmployeeInformation(uint256)", +"cc1602df": "lotteryCore()", +"cc16e6e1": "TOTAL_RESERVE_FUND()", +"cc16f5db": "Burn(address,uint256)", +"cc17aa28": "numAdoptedAxies(address,uint8,bool)", +"cc181ca8": "king()", +"cc189d00": "Vault(address,uint256)", +"cc198380": "totalSoldSlogns()", +"cc1b63d5": "setStakeStartTime(uint256)", +"cc1b8de6": "freedWosPoolToTeam()", +"cc1bc747": "deallocate(address,address)", +"cc1c0937": "NeuralToken()", +"cc1d050d": "startBlockProfit()", +"cc1d1e18": "_getCurrentTokenPrice()", +"cc1d4c02": "certified(address)", +"cc1ef080": "startPreSTOSale()", +"cc204cc2": "amountsWithdrew(address)", +"cc20d075": "getChannelId(address,address,uint8)", +"cc212a48": "disburseFunds(uint256)", +"cc21a9a2": "_weekFor(uint256)", +"cc21e972": "US_INSTITUTIONAL()", +"cc234ee1": "setICORunning(bool)", +"cc23a690": "releaseValue2()", +"cc23b75b": "HARD_CAP_IN_TOKEN()", +"cc242f40": "CardsRead()", +"cc24f571": "releaseTenPercent()", +"cc255b38": "testBazMethodId()", +"cc25decd": "SampleOffer(address,bytes,uint256,uint256,uint256,uint256,uint256)", +"cc268393": "setDescendant(address)", +"cc2761a4": "test_me(int256)", +"cc27f97b": "LSYP()", +"cc289fa9": "getPartnerAddressStatus(address)", +"cc293aea": "setRenewalsCreditAffiliatesFor(uint256)", +"cc2942da": "SetAElfCommunityMultisig(address,address)", +"cc29a0e6": "transferTTProduction(address,address,uint256)", +"cc2a9192": "LogWinnerPaid(address)", +"cc2aa2c7": "NAMINORI()", +"cc2b20ff": "refferBonusFunction(uint256)", +"cc2c2058": "addSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", +"cc2c2bcf": "MotionFactory(string,string,string)", +"cc2c5453": "add_sword(uint16)", +"cc2dcd7e": "removeSideService(address,uint256)", +"cc2e08ea": "getRecTransactionData(uint256)", +"cc2e15cc": "getSponsorableJobs(address)", +"cc2eacb1": "setReferralPercent(uint16)", +"cc2f5029": "updateNoteMetadata(uint64,uint16)", +"cc2f5186": "Balances(address,address,address)", +"cc2fd120": "unofficialUserSignUp(string)", +"cc304924": "DocumentAdded(uint256,string,uint256)", +"cc305ae6": "userAssignElement(uint256,uint256,address)", +"cc308a54": "whitelistStartBlock()", +"cc30eeb1": "isEligibleForRepayment(uint64)", +"cc3154f8": "attendeesList()", +"cc326e1c": "currentPhaseRate()", +"cc328f2f": "b531647b()", +"cc32f8ad": "transferMoneyForTaskSolutions(string,uint256)", +"cc33ad3d": "DSP(uint256,string,string)", +"cc33c875": "tokenInfo(uint256)", +"cc341430": "coordinatorAgreeForEmission(address)", +"cc342eba": "RoseToken()", +"cc3451d6": "MultiverseToken()", +"cc3471af": "maxClaimBlock()", +"cc348429": "Ethmall(address,address,address,uint256,uint256,uint256)", +"cc34a247": "icoEndTimestampStage1()", +"cc34f810": "AllstocksToken()", +"cc361cc4": "getTotalBonusPerShare()", +"cc364f48": "getRange(uint256)", +"cc36809f": "fee_msg()", +"cc36a328": "team0Query()", +"cc36f8eb": "ArtCoin()", +"cc373d79": "withdrawCommissions(uint256)", +"cc38639f": "newTuneOption(uint32,uint32,uint256,bool,bool,uint128,uint64)", +"cc38c8a0": "insuranceAccount()", +"cc3938f9": "chkLockedA(address,uint256)", +"cc397ed3": "getCurrentFor(address)", +"cc3a0c8d": "customerExchangeEther(uint256,address,string)", +"cc3ad9a1": "unPackParams(uint256)", +"cc3b8806": "getCertificateMetaDataCount(bytes32,bytes32,bytes32)", +"cc3bb31a": "crowdsaleStart()", +"cc3bde3d": "TOTAL_SUPPLY_LIMIT()", +"cc3bf9e9": "redeem(bytes32,address)", +"cc3c2c01": "getValidityBondFloor()", +"cc3c59cc": "Paymec()", +"cc3c7098": "createTokenToMarket2021()", +"cc3c74a1": "proposalNonce()", +"cc3ccf57": "previous_owner()", +"cc3d2721": "minWithdraw()", +"cc3d574b": "ElectedBoardController(address,address[],uint256,address)", +"cc3d967b": "getUserDetails(address)", +"cc3df01f": "issueToken(uint256)", +"cc3e378e": "hasEnoughFundsToStart()", +"cc3eacbb": "getOraclizeFee()", +"cc3efd6b": "PUKCoin()", +"cc3f44bf": "getGoldStatusMinted(address)", +"cc3f51d0": "hitPotProcess(string,bool,uint256)", +"cc3fa0fd": "NobleAssetsCoin(uint256,string,string)", +"cc3fdd4c": "buyFeePercent()", +"cc41a396": "rateStage3()", +"cc41d3b2": "refundPreIco()", +"cc422cc2": "coeRemainingAtCurrentRate()", +"cc423c28": "setSchellingExpansion(uint256,uint256)", +"cc42e83a": "withdrawWinnings()", +"cc436196": "initialFundsReleaseDenominator()", +"cc436e42": "memberIsActive(uint8)", +"cc442c3f": "ICO_PRICE4()", +"cc445611": "purchase(bytes32)", +"cc44b15b": "setCode(address,bytes32,uint256)", +"cc44fd2b": "changeManagement(address)", +"cc451581": "getCurrentBigPromoBonus()", +"cc4580c8": "getBetsLength()", +"cc459696": "contentCount()", +"cc466256": "_roll(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"cc4720c7": "calculateRewardTokens(uint256,uint8)", +"cc47a40b": "reserve(address,uint256)", +"cc47de73": "ExpandT()", +"cc490e64": "getSplitCount()", +"cc494291": "setJobController(address)", +"cc4999ea": "getTradingInfo(uint256)", +"cc49ede7": "getVesting(address)", +"cc4aa005": "getDestroySharesOwnerValue()", +"cc4aa204": "ERC20()", +"cc4b998a": "titleIds()", +"cc4bf6a3": "miningTen()", +"cc4c1c05": "SwytchToken()", +"cc4cc05f": "collectToken()", +"cc4d233c": "Reclaimed()", +"cc4d819c": "tokensPurchased()", +"cc4d96df": "_refreshVoteForVoter(uint256)", +"cc4da8f4": "EventWinReward(address,uint256)", +"cc4e0008": "Ticket(address)", +"cc4fa81b": "exchangeCalculator(uint256,uint256,uint256)", +"cc4fbc43": "acceptTokenPayment(address,uint256,address,uint256)", +"cc5061da": "voteForUser(uint16,address)", +"cc50dacb": "buyCar(uint32)", +"cc50fc28": "mintInternal(int256,address,uint256)", +"cc537821": "buyNextRank()", +"cc539eb1": "replaceAccount(address,address)", +"cc552c8e": "setHardCapUSD(uint256)", +"cc5530eb": "endPreSaleStage()", +"cc577f38": "addPresaleAmount(address,uint256)", +"cc57e4f8": "increasePregnantCounter()", +"cc58bcf8": "getCurrentLevel(uint256,uint256,uint256)", +"cc5a02cb": "withdraw(address,uint8)", +"cc5a7051": "_setMinDailyPerUser(uint256)", +"cc5a7804": "payoutTokens(address,uint256,uint256)", +"cc5aba27": "ConstructorTest(uint256,uint256,string,string)", +"cc5b13a0": "PAYOUT_DELAY_INTERVAL()", +"cc5b2292": "DepositForDividends(uint256)", +"cc5b542e": "toBeDistributed()", +"cc5c095c": "mintableSupply()", +"cc5c4224": "setFreezingManager(address)", +"cc5c4a6b": "attachPresale(address,address)", +"cc5cab33": "userRewarders(address,uint32)", +"cc5cee0a": "calculateEthereumReceived(uint256,uint256)", +"cc5f0240": "batchCancelVoteForCandidate(address[],uint256[])", +"cc5f09fb": "getNbCitizensLocation(string)", +"cc5fc0d7": "updateInvestBalance()", +"cc603ed5": "collectRate(address)", +"cc61d0cb": "changeMinWithdraw(uint256)", +"cc620704": "joinToTrack(bytes32)", +"cc6266a1": "getHashFromData(bytes32,bytes32)", +"cc6305ed": "getNumTicketsPurchased(uint256,address,address)", +"cc634dac": "get_kek()", +"cc63604a": "canExecute(uint256)", +"cc638e03": "rublaJEPoken()", +"cc63996e": "getHairValue(uint256)", +"cc63a3c9": "set_token(address)", +"cc642cc2": "numHolders()", +"cc64cfcb": "getDeployedMarriages()", +"cc64e2d5": "depositEthers(address)", +"cc657697": "GetMatchLength()", +"cc657e62": "sendToken(uint256,uint256)", +"cc668524": "verifyPosition(uint8,uint64,uint64,uint64)", +"cc66d3c7": "buyEngineer(uint256[8])", +"cc66ec47": "TerraformReserve(address)", +"cc677679": "setEMAPeriods(uint256)", +"cc679ffc": "TUPC()", +"cc67b1bf": "getTransferPerc()", +"cc69084f": "PHASE_CLOSED()", +"cc691763": "draw(uint32,uint8,bytes32)", +"cc6c010d": "ATMGold(uint256,string,uint8,string)", +"cc6c8e31": "NFXCoinToken()", +"cc6ca7b7": "specialBaseLayer(uint256)", +"cc6cf340": "BERTCLUBCOIN()", +"cc6d7850": "burnILF(address,uint256)", +"cc6d8ba6": "inheritInvestorPosition(uint256)", +"cc6da375": "recipientVIP(address)", +"cc6db55f": "setJackpotModulo(uint256)", +"cc6e15e5": "setDelayedTokenAllocator(address)", +"cc6e6f25": "Withdraw_5()", +"cc6e70e8": "MSTCOIN()", +"cc6e8593": "lawSupportProfitAddress()", +"cc6ec39a": "switchToGame(string)", +"cc6eced7": "priceOfTeam(uint256)", +"cc6f0ed0": "BirthdayCandy()", +"cc70993d": "earlyTimeLock()", +"cc70bb1a": "publish(string,string,string,address)", +"cc70decb": "showBonus(address)", +"cc7188a5": "unLinkFromMasterWallet(address)", +"cc724b27": "isTesting()", +"cc72c918": "queryOwnerAddr()", +"cc72ecb0": "purchaseStartBlock()", +"cc741c9c": "getDidClaimBooty(address,uint256)", +"cc743a86": "ICO_PROMO_REWARDS()", +"cc74e2ca": "min_refund_block()", +"cc750395": "setMonthOpen(uint256,uint256,uint8,uint256,uint256)", +"cc754a28": "ICOStartTimeChanged(uint256)", +"cc755b70": "releaseFrozenBalance()", +"cc759458": "unconfirm(address)", +"cc759f88": "removeBools(bytes32[])", +"cc75ac19": "_withdrawAffVault(uint256)", +"cc75c4b1": "abc(uint256)", +"cc75cc9b": "SendmoneyCall(uint256)", +"cc764986": "updateEmaDailyYield(uint256)", +"cc774681": "mapCompletionNumberForWithdraw(address)", +"cc77b82d": "BEEFYToken()", +"cc783c5e": "setBankrollerContractOnce(address)", +"cc78cc98": "multisigPreICO()", +"cc7949ae": "round_count()", +"cc797d8e": "setMaxAttackPrizePercent(uint256)", +"cc798890": "queryAccounts()", +"cc79aa04": "getProposal(bytes32,bytes32)", +"cc79eaf0": "getColors(uint32)", +"cc7a060f": "ethersCollecteds()", +"cc7a2049": "permissionManager()", +"cc7b2ee7": "initAirdropAndEarlyAlloc()", +"cc7b41ec": "changeRollUnder(uint256)", +"cc7b60fe": "_emitWorkFinished(uint256,uint256)", +"cc7c4c39": "gotWinner()", +"cc7cd9f8": "fundingEthGoal()", +"cc7cddb8": "dive3(address)", +"cc7d1a0f": "currentHighestBid()", +"cc7e1b9a": "setRedemptionAddress(address)", +"cc7e2208": "Order()", +"cc7e492e": "refillInstantMintPool()", +"cc7e930c": "commitmentsOf(address,address)", +"cc7f365c": "VLADALINA()", +"cc7f593c": "setRequiredMajority(uint256)", +"cc7f608d": "setSaleType(uint8,uint8,uint32,uint256,uint256)", +"cc7f8266": "read_i8_array()", +"cc7fa928": "nbMonthsPay()", +"cc7fe38c": "addPresaleInvestor(address,uint256,uint256)", +"cc80f6f3": "show()", +"cc80f9e8": "ownerOfID(uint256)", +"cc81dbb5": "DEFROST_FACTOR_TEAMANDADV()", +"cc822f54": "changeYDistAddress(address)", +"cc826160": "ownershipDistributed()", +"cc82e72e": "SetPlatformInformation(string)", +"cc833e69": "Cryptonationz(string,string,uint8,address,address,address,address,address)", +"cc851cac": "SecuritiesVaultBank()", +"cc863948": "withdrawTokenShare()", +"cc86566c": "tempMngr()", +"cc8658b3": "chkStaff(address,address)", +"cc865b71": "withdrawRoundController(uint256,address)", +"cc872b66": "issue(uint256)", +"cc876ded": "born(uint256,uint256)", +"cc87ed82": "checkNumCards(uint256,uint8,uint8,bytes32,bytes32)", +"cc8818f6": "setReservefund(uint256)", +"cc88be52": "NuoBaoChainToken(uint256,string,uint8,string)", +"cc891023": "depositLock(address)", +"cc893855": "calculateTotalPayment(uint64)", +"cc896494": "_setGameOver()", +"cc89698c": "getTopicCount()", +"cc897e40": "END_SKO1_UNITS()", +"cc89d596": "getCryptantFragments(address)", +"cc89e8bc": "ecosystemTokens()", +"cc8a86a0": "Y2_release()", +"cc8af0fe": "bytesToUInt(bytes,bytes)", +"cc8b34ab": "CrowdCoin()", +"cc8b96e5": "prepare(uint256,address,address)", +"cc8baf63": "m_tokenDistributor()", +"cc8bd060": "setUnitsOneEthCanBuy(uint256)", +"cc8c0f9f": "transferLocked(address,uint256,uint8)", +"cc8c3c45": "getTokenIdsLength()", +"cc8c49aa": "sc(uint256,uint256,uint256,uint256,uint256)", +"cc8cd5c5": "withdrawDragonsFilm()", +"cc8ce27e": "CryptoChamps()", +"cc8ce862": "allowedGasPrice()", +"cc8e4bc2": "LOCKAMOUNT3()", +"cc8eac6c": "isSTOAttached()", +"cc8eb425": "newuser(address,address)", +"cc8f0b48": "withdraw(bytes32,address,uint8,bytes32,bytes32)", +"cc90050e": "GetCurrentRoomAndRound(address)", +"cc9062f9": "finalizeTransferChildrenOwnership()", +"cc90da29": "bonusNum()", +"cc90e725": "addProject(string,address)", +"cc91e91c": "Freezable()", +"cc925957": "logAccess(string,string,uint256)", +"cc92bad4": "updateParkingRate(uint256)", +"cc92ebad": "createCrowdsale(uint256,uint256,uint256,uint256,address,address,address)", +"cc937ccd": "Doves()", +"cc93ee70": "forwardCoins(uint256)", +"cc93f66e": "endTournament(uint256,uint256)", +"cc9415d0": "commitOn(uint256)", +"cc9425b7": "OCTACryptoToken()", +"cc949797": "balanceAffiliateOf(address)", +"cc94d923": "createTransaction(address,uint256,bytes32,address,address,address)", +"cc94e4a2": "set_sale_address(address,address)", +"cc954820": "changeFallbackDeposit(uint256)", +"cc95d8d1": "s36(bytes1)", +"cc96019f": "referralTokenWallet()", +"cc96b943": "offerOptionsToEmployee(address,uint32,uint32,uint32,bool)", +"cc976620": "usdPerEthCoinmarketcapRate()", +"cc97b38f": "BANCOR_X_UPGRADER()", +"cc97edbf": "bmi()", +"cc98c893": "developer_Transfer_ownership(address)", +"cc98ff20": "purchaseVillage(uint256)", +"cc991d8a": "BTestToken(uint256,string,uint8,string)", +"cc996d1b": "bids()", +"cc9a31a7": "isRepresentor(address)", +"cc9a88c9": "canSend(uint32,uint32,int256)", +"cc9ab267": "voteForCandidate(bytes32)", +"cc9ac376": "addLock(address,uint256,uint256)", +"cc9ae3f6": "getMyReward()", +"cc9b31c9": "exchangeFeeIncurred(uint256)", +"cc9b714c": "ClearAuth(address)", +"cc9b71c2": "TaskCoin()", +"cc9b7826": "setGuaranteedAddress(address,uint256)", +"cc9ba6b2": "buyRef()", +"cc9c0936": "startedWorkTS()", +"cc9c437c": "get_orderAddress(address,uint256,uint256,uint256,uint256)", +"cc9d7519": "getTierInfo(uint256)", +"cc9d858d": "FundsRegistryTestHelper(address[],uint256,address)", +"cc9de25d": "bytesToUint256(bytes)", +"cc9e735f": "decrementDate()", +"cc9f28ea": "getDeletedTeams()", +"cc9fd9d9": "onSetCredit(address,uint256)", +"cca07f44": "setSpecialLimits(address,uint256,uint256)", +"cca08d55": "updatesolsforhire()", +"cca0feb6": "updateTax(uint256)", +"cca10ba5": "getMultiSigBalance()", +"cca213a1": "setTranchTime(uint256[])", +"cca2194c": "getInvestorContribution(address)", +"cca26917": "getRoundBalance(address,address,uint256)", +"cca3e832": "_balanceOf(address)", +"cca40111": "_recharge(address,uint256)", +"cca41651": "addressPrivateSale()", +"cca470d2": "roundInvestorInfoByAddress(uint32,uint32,address)", +"cca4f3c5": "winthdraw(address,address,uint256)", +"cca5020b": "totalLBSold_PRIVATE()", +"cca520ee": "transferFromMoreThanAllowedTest(address)", +"cca5dcb6": "isTransferEnabled()", +"cca63f4f": "buyXname(uint256,uint256,string)", +"cca6ae0b": "getGPSMinEth()", +"cca746df": "getAnnualFee()", +"cca78d53": "getActiveListLength()", +"cca794da": "setGzeBonusOnList(uint256)", +"cca91579": "PlaceHolder(address)", +"cca97025": "_performTransferFromWithReference(address,address,uint256,string,address)", +"cca9943c": "wei25()", +"ccaa5135": "LIFECOIN()", +"ccaa5c65": "LomeliToken()", +"ccaab1ca": "companyPercent()", +"ccaaef45": "purchaseCompanyAdv(uint256,string,string)", +"ccab1be7": "SubmissionAccepted(address)", +"ccab841b": "divf(int256,int256,uint256)", +"ccabcfca": "XMLYBadge()", +"ccac77f5": "GooLaunchPromotion()", +"ccad19e4": "sendEtherFromAddContract(address)", +"ccadd6b1": "bet1Of(uint256)", +"ccadef15": "_setOCPTokenContract(address)", +"ccae794a": "showFPCount()", +"ccaee929": "JihoyContract()", +"ccaf4b03": "setIreg(uint256)", +"ccb00344": "changeEtsAddress(address)", +"ccb07cef": "crowdsaleClosed()", +"ccb0893d": "isUIntPrivate()", +"ccb13cbd": "_acceptAnchorAdmin()", +"ccb1c0a1": "getQuestion(string)", +"ccb1cbbc": "testFailBurnNoAuth()", +"ccb20e8e": "StormBrewCoin()", +"ccb22e37": "description3()", +"ccb2e9a4": "insertAccount(bytes32,string,uint256,string,string)", +"ccb3449e": "NewPresaleAllocation(address,uint256)", +"ccb50a29": "SIGMA_MAX_CARGO()", +"ccb53365": "startICOPhase()", +"ccb570e3": "transfer(uint256,address,address)", +"ccb60e39": "rentOutMultiple(address,uint256,uint256[])", +"ccb61dad": "MICRO_DOLLARS_PER_BNTY_MAINSALE()", +"ccb64997": "isBCDCToken()", +"ccb6cbe8": "icoBottomIntegerPrice()", +"ccb767ae": "transferTo(address,uint32)", +"ccb783a9": "setGPSStartTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"ccb98ffc": "setEndTime(uint256)", +"ccbac9f5": "randomNumber()", +"ccbae5f6": "createEscrow(address,address,uint256,uint256)", +"ccbb41d0": "TOC()", +"ccbb52f5": "getGroupRates(uint256)", +"ccbba441": "setMigrateStage()", +"ccbd5152": "bankrollBeneficiaryAmount()", +"ccbd8d25": "setDropAmount(uint256)", +"ccbd8d29": "tokenAvatar()", +"ccbda1af": "getChannelByName(string)", +"ccbde432": "delete_candidate(uint8)", +"ccbe2a68": "kill(uint8[176],uint8)", +"ccbe4968": "Withdawal(address,uint256)", +"ccbfc6ed": "revokeSignature(bytes)", +"ccc08913": "Restricted()", +"ccc08974": "setGameActive(bool)", +"ccc108d7": "reopen()", +"ccc11f11": "hasAssetRights(address,bytes32)", +"ccc13814": "max(int256[])", +"ccc39b5d": "DonationClaimed(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"ccc51afb": "lookupFillingRing(address,uint256)", +"ccc54d69": "LOCKUP_3M_ICO_TIMESTAMP()", +"ccc55189": "Nation(address,address)", +"ccc5d05f": "testNoTokensNoCalls()", +"ccc61bef": "REWARD_WIN_MULTIPLE_PER()", +"ccc62bbe": "assertEq2(bytes2,bytes2,bytes32)", +"ccc643d7": "updateSaleTime(uint256,uint256)", +"ccc6ddf3": "createPromoPow(address,string,uint256,uint256,uint256,uint256)", +"ccc72302": "AUDITED_AND_REJECTED()", +"ccc8b33c": "buyXnameQR(address)", +"ccc924ef": "TokensUndelegated(address,uint256,address)", +"ccc9735d": "ERCSpammer(uint256,uint256,string,string)", +"ccc98790": "w(uint256)", +"ccca123b": "waitTime()", +"ccca237c": "foundationAsset()", +"cccb987f": "withdrawTwice()", +"cccc020f": "changeInsuranceFeesOperation()", +"cccc8f91": "getDappId()", +"ccccc36b": "createAcceptAndAdditionalsFromBytes(bytes,bytes,bytes,uint256[])", +"cccd2ea8": "getProductData(address)", +"ccce413b": "symbols(uint256)", +"ccce6458": "createKingdom(string,string,uint256,bool)", +"ccceee48": "lastBlock_v1Hash_uint256()", +"cccf3a94": "gasForCLOUD()", +"cccf7a8e": "has(uint256)", +"cccf88f9": "batch_refund_bix(address[],address,uint256[])", +"ccd15921": "addTransferAndCallWhitelist(address)", +"ccd1a621": "addguess(uint256)", +"ccd30a62": "getWhitelistedAddresses(uint256)", +"ccd331bf": "bountyAmount()", +"ccd385f5": "staff_3()", +"ccd3948b": "removeRestaurant(address)", +"ccd39537": "dilute(address,uint256)", +"ccd4020c": "PassTokenReborn(address)", +"ccd46ae4": "BuyTicketUseVault(uint256,uint256)", +"ccd65296": "initialize(uint256,uint256,uint256,uint256,address)", +"ccd6559b": "newRandom(string)", +"ccd65c0a": "activateMainSale()", +"ccd68f3b": "stamps(uint256)", +"ccd6aca4": "preSaleSecondCap()", +"ccd71e8c": "armySubmarinesCount(uint256)", +"ccd75361": "setFooInt(uint256)", +"ccd89ecd": "calculateManyHash(address,address[],uint256[],uint256,uint256)", +"ccd8ad0c": "setGenTime(uint256)", +"ccd8c186": "DebitCoinTokenGenesis(address)", +"ccd8e2cf": "AnmiToken()", +"ccd8ead7": "addToCategorie2(address,address)", +"ccd93998": "getRequiredSignatures()", +"ccd95a50": "sendTokenToMultiAddr(address[],uint256[])", +"ccd96ab0": "cite(bytes32,string)", +"ccd9aa68": "passedKYC(address)", +"ccd9d08f": "MLIOU()", +"ccda4b99": "getMethodValue(string)", +"ccda696b": "ownersTransfer(address,uint256)", +"ccdaeab0": "getTechBonus3(uint256)", +"ccdb05d4": "NokuCustomERC20(string,string,uint8,address,address)", +"ccdb3f45": "newAddress()", +"ccdbbff5": "securityTokensWallet()", +"ccdc535e": "placeBetV1(uint256,uint256,uint256)", +"ccdd1979": "multisend(address,address[],uint256)", +"ccdd49f2": "StyToken(address,address)", +"ccdd95d6": "releaseEnjinTeamTokens()", +"ccdf68f3": "isOutcomeSet()", +"ccdfcfa4": "returnFundsForAll()", +"cce0244d": "setSafeContract(address,bool)", +"cce0a1ca": "isPresaleSetup()", +"cce0c0fa": "addOneGame(string,uint256)", +"cce0cd0c": "blockVersion()", +"cce106f8": "AmountToLittle()", +"cce1dfd2": "minimum_token_sell()", +"cce21eda": "DividendsWithdrawal(uint256,address,uint256,uint256,uint256,uint256)", +"cce2270a": "isSecondStageFinalized()", +"cce2771e": "redeemUTXO(bytes32,uint8,uint256,bytes,bytes,bool,uint8,bytes32,bytes32)", +"cce29ea7": "preSaleEndTime()", +"cce2f8e3": "checkAddressMisused(address)", +"cce356b5": "getHodlers()", +"cce3906b": "hasWithdrawnRake()", +"cce3c13b": "isLeaf(uint256)", +"cce48e65": "GeeTestCoin()", +"cce4bd52": "reclaimFunds()", +"cce7db58": "swipe(address)", +"cce7ec13": "buy(address,uint256)", +"cce81927": "EtherDice(address,address)", +"cce91957": "take(bytes)", +"cce93ae1": "PeriodChanged(uint256,uint256)", +"cceb6368": "receiveTicket(address)", +"cceb9214": "setAuctionStatus(bytes32,uint8)", +"ccebca11": "Foo(address,bytes32,address)", +"ccec1461": "bulkEtherSender(address[],uint256[])", +"ccecc71f": "getPlayerPoints(bytes32)", +"cced2bb6": "LogOwnerRemoved(address)", +"cced9b63": "setBestMatch(uint256,uint256,address)", +"cceda56c": "CAPPED_SUPPLY()", +"ccedf3d2": "getChainCode(string)", +"ccee31e8": "setNbKingdomsType(uint256,address,bool)", +"ccee8047": "settleCall(uint256,uint256,address)", +"ccef6d63": "_isClientPaidUp(address)", +"ccf053ba": "TOTAL_TOKEN_SUPPLY()", +"ccf06abf": "canCompose(string,uint256[],address)", +"ccf0768a": "transferDividends(address)", +"ccf12304": "set_mint(uint256)", +"ccf1454a": "addressOf(string)", +"ccf1ab9b": "usurpation()", +"ccf1e80b": "JUNE()", +"ccf20872": "ChainKey(uint256,string,string)", +"ccf24838": "updateOwner(uint256,address,address)", +"ccf27a4e": "setPrice2(uint256)", +"ccf2b87b": "sendWithFreeze(address,address,uint256,uint256)", +"ccf41499": "TokenFactory(uint256,string,uint8,string)", +"ccf4a941": "getVendorApplication(string)", +"ccf4b70a": "RATE1()", +"ccf4f413": "setSubRegistrar(string,address)", +"ccf53a84": "getFile(uint8)", +"ccf5401e": "checkQuest(address)", +"ccf5c5cf": "registerConsumer(address,uint32)", +"ccf64316": "playerRollDiceSingle(uint256)", +"ccf670f8": "setLevelUpFee(uint256)", +"ccf69e9b": "randomContract()", +"ccf6b8b3": "CCCoinToken(string,string,uint256,uint256,address,address,address,address,uint256)", +"ccf7ba0f": "recoverPrice(address,address)", +"ccf7d0d4": "sendTokensAfterCrowdsale()", +"ccf7fe56": "JustinCoin()", +"ccf82afd": "WataexToken()", +"ccf8bcf3": "transferOVISBookedTokens()", +"ccf8e5d0": "CLITOKEN()", +"ccf8ef24": "undelegateVote()", +"ccf9f35f": "awardsCount()", +"ccfa8e71": "addBank(string,address,string)", +"ccfaa72f": "setRentalPricePerHour(uint256)", +"ccfbdb9e": "CrowdSaleDapCar()", +"ccfc0053": "withdrawMILs(uint256)", +"ccfc1e4e": "preSaleWeiCap()", +"ccfc811b": "registerParticipant()", +"ccfc8729": "registerWithToken(address,uint256,address)", +"ccfc9556": "USDChain(uint256,string,uint8,string)", +"ccfcbdbe": "canMakerTerminate(bytes32)", +"ccfdca9a": "setMinPaymentAmount(uint256)", +"ccfe4691": "CtfToken()", +"ccfed305": "CMDToken()", +"ccff361f": "AibitbankToken()", +"ccff42b2": "isValidAdapter(address)", +"cd008f1a": "getMine()", +"cd00ee0d": "startToken()", +"cd027be5": "getAllowAmount(address)", +"cd034234": "refundRequest()", +"cd0389fd": "metadataToken()", +"cd03b093": "getSupportersForTopic(string)", +"cd041ae9": "removeCooldown()", +"cd048de6": "setWord(string)", +"cd04ccfc": "newProposalEthUSDOracle()", +"cd05c214": "TOKEN_FOURTH_PRICE_RATE()", +"cd05d1eb": "shopPants()", +"cd062734": "getCallABISignature(bytes32)", +"cd0643ee": "takeInvestments()", +"cd066fd6": "computeInitialPrice(uint256)", +"cd0699e9": "OysterPrePearl()", +"cd06a7bf": "rewardsupply()", +"cd076620": "mint(address,uint256,int16,int16,int16,int16,int16,int16,uint256)", +"cd0845fd": "bool2str(bool)", +"cd09039b": "PayForFlag(string)", +"cd09263f": "rate_toCap()", +"cd0a314b": "walletBalance()", +"cd0c5896": "etherBalance(address)", +"cd0c870d": "XAP()", +"cd0e761d": "getCurrentContextAddress()", +"cd0e8900": "DEFACTO()", +"cd0ee59b": "_payByErc20(uint256)", +"cd0f26c6": "setRedemptionContract(address,address)", +"cd0f5abd": "DTCC()", +"cd0fdc24": "getPaintingArtistId(uint256)", +"cd0ffdba": "NukTestToken()", +"cd103b4d": "RateToken(uint256)", +"cd11731d": "setPlayerBookAddress(address)", +"cd11c85d": "timeTillNextAttack()", +"cd12efc8": "getsecond(uint256[])", +"cd132aad": "addPrivateSale(uint256)", +"cd133c8f": "buyXid(uint256)", +"cd13592a": "claimTokensByUser()", +"cd13c6f8": "wildlifeconservationToken()", +"cd152c0a": "getPreAuthorizedAmount(address)", +"cd154c59": "mainSaleExchangeRate()", +"cd15c6ab": "MANACrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"cd15fc71": "ContractFeatures()", +"cd16ecbf": "setNum(uint256)", +"cd17c4b6": "numOfTokens()", +"cd180fdc": "transferTokensFromAdvisorsAddress(address,uint256)", +"cd1814d7": "selfDestroyTime()", +"cd187043": "_price_token_ICO1()", +"cd18c168": "TakeEth(address,uint256)", +"cd18d5a4": "airDrop(address)", +"cd197ff6": "fechVoteInfoForVoter(address)", +"cd1a4e4d": "setHyperDisbursementAddress(address)", +"cd1a5cad": "PricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", +"cd1a8ad7": "EGGS_TO_HATCH_1SNAKE()", +"cd1b9311": "challenge(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[])", +"cd1ce6d5": "setAdvisorFee(uint256)", +"cd1dc527": "isTokenAddressAlreadyInList(address)", +"cd1e0355": "totalRefundedAmount()", +"cd1e0717": "getRequester()", +"cd1e484b": "reserveStarsForOwner(uint256)", +"cd1f63dc": "getMinBuy(uint256,uint256)", +"cd1f8393": "logsCount()", +"cd1f9a57": "totalContractHolders()", +"cd1fca94": "BETNetworkTeamAddress()", +"cd1fdc14": "_claimReward20(address,string)", +"cd2057d0": "fail(bytes)", +"cd20b24b": "saosao5()", +"cd22ccea": "GameRoll(address,uint256,uint8,uint8,uint256)", +"cd22f418": "_getAllRevisionTimestamps(bytes32)", +"cd22f536": "addProductByRegulator(string,uint256,string,string,string,string)", +"cd230ebd": "tokensClaimableAfter()", +"cd233e25": "oraclize_gaslimit()", +"cd23dde0": "create(string,uint256,uint256,address,uint256,uint16,uint8,uint256[3],bool)", +"cd257213": "RemoveTickets(uint256)", +"cd25f56e": "OptionExercise(address,uint256)", +"cd26e1a8": "SECURITY_ETHER_CAP()", +"cd271488": "newSaleProjects(string,string,string,uint256)", +"cd277e6c": "addSolution(bytes32,address,uint32)", +"cd27d1a0": "setMaxRaiseAmount(uint256)", +"cd27f1d9": "cappedTokenSupply()", +"cd29c71a": "metadataUrl()", +"cd2a0c29": "purchase_with_eth(uint256,address,uint256,uint256,uint256,address,bytes)", +"cd2a11be": "EnableTrade(bool)", +"cd2a68e5": "withdrawBillionsCoins()", +"cd2a7a61": "broadcastState(bytes)", +"cd2ab49e": "setupBankrollInterface(address)", +"cd2b5a82": "weiToDistribute()", +"cd2cdd5b": "claimOwnershi()", +"cd2cde48": "authorizeIcoBurn()", +"cd2d5291": "walletAdvisor()", +"cd2d8a2d": "historyId()", +"cd2ec3fe": "runAnnualInflation()", +"cd2f0710": "getItemById(uint256)", +"cd2f5f2b": "clearFooArray()", +"cd2f7357": "tokenTransfer(address,uint256,uint256)", +"cd2f7c1a": "Census()", +"cd306137": "initialiseGlobals()", +"cd31037c": "BlockScheduler(address,address,address)", +"cd313ad9": "listOfFunds(uint256)", +"cd31f391": "SixtyPercentRules(address)", +"cd3265a3": "setUpgradeTarget(address)", +"cd327398": "addExceptions(address[])", +"cd3293de": "reserve()", +"cd336707": "reopenContributions()", +"cd342917": "Lesson(address,uint256)", +"cd35c5e9": "Eurotrad()", +"cd3651a7": "setLevelBonusJPYC(uint256,uint256,uint256,uint256)", +"cd367936": "fundICO(address)", +"cd37dcb8": "peCap()", +"cd3882d5": "stage4()", +"cd38aa87": "chooseWinner()", +"cd394a41": "ETH10K()", +"cd395a96": "_transferAndLock(address,address,uint256,uint256)", +"cd3a1dde": "MaxAirDropXblock()", +"cd3a376a": "changeSeller(address)", +"cd3a7531": "loadVotesForParticipantVerify(bytes32,bytes32,uint8)", +"cd3b0309": "CTokenCoin()", +"cd3c3011": "getPublishTime(bytes32)", +"cd3ce306": "redeemEther(bytes32,address)", +"cd3cf20e": "messageWithinLimits(uint256)", +"cd3de8d5": "payToController()", +"cd3e0155": "BucketDestroyed(bytes32,uint256)", +"cd3e45c5": "getTop10Messages()", +"cd3f7a50": "DepositMTU(uint256)", +"cd3fe21d": "getTotalNumberPlayed(uint256,uint256)", +"cd40137f": "resetTimeSeal()", +"cd402189": "list_files()", +"cd402c8e": "payoutSize(address)", +"cd40a48d": "send1Mil(address)", +"cd41ada1": "addressDividendReserve()", +"cd4217c1": "freezeOf(address)", +"cd423c99": "getDistributedOreBalances(address)", +"cd42693d": "victorieumToken()", +"cd43def3": "updateServiceTokensPerCredit(address,uint32,uint256)", +"cd43ebf9": "totalSpankStaked()", +"cd43ee99": "isAffiliateProgram()", +"cd45376c": "sellWine(uint256)", +"cd45e561": "CHSToken()", +"cd45fcdb": "Fxxk2Token()", +"cd46abe4": "ecosystemPercentOfTotal()", +"cd46d7e5": "approveByIndex(uint256)", +"cd474b04": "chainStartBlockNumber()", +"cd47c0e1": "cooRemoveReviewer(address)", +"cd47f390": "rescueLostKydy(uint256,address)", +"cd482d9f": "getLLV_edit_2()", +"cd48578f": "MaxEth()", +"cd495391": "setNonlistedUser(address)", +"cd496e35": "votePositionOf(uint256,uint256)", +"cd497999": "isHardCapGoalReached()", +"cd499523": "userList(address,uint256)", +"cd4aed30": "errorWithMessage()", +"cd4b3c57": "newSubdomain(string,string,address,address)", +"cd4b6914": "getRandom(uint256)", +"cd4c04c6": "Appoint(uint256,address)", +"cd4c4c0c": "getCurrentBucket()", +"cd4d0570": "getbuynode(address)", +"cd4d1664": "EconomyRebated(string,string,string,string,string)", +"cd4d4b46": "BONUS_CAP()", +"cd4d6895": "verifyEIP20(address)", +"cd4e28b5": "setNextBidExpireBlockLength(uint256)", +"cd4e396b": "USER_ACQUISITION()", +"cd4f5e90": "MTToken()", +"cd4fb3be": "newBurnableOpenPayment(address,string,uint256,uint8,uint256)", +"cd501bf7": "SignalsCrowdsale(address,address,address,address)", +"cd503c0b": "claimFees(bytes4)", +"cd504bd8": "getPhasePricesPeriods(uint256)", +"cd50d44f": "CheckRepresentment()", +"cd51bcae": "setBuyRequestLimit(uint256)", +"cd51f084": "owner_freeze_term()", +"cd5286d0": "getAsset(string)", +"cd53a3b7": "makerWithdrawAsset(uint256)", +"cd53ac45": "MANHATTANPROXYFDR()", +"cd53e455": "receivedEther()", +"cd5406e4": "getBalanceAtSnapshot(address)", +"cd54c54e": "setCirculationCap(address,uint256)", +"cd550cc8": "XferMoneyTeamAddress()", +"cd55205b": "KotET()", +"cd559561": "getPeers()", +"cd55cda2": "determineFinalOutcome(uint256)", +"cd56028f": "ArjToken()", +"cd560862": "EZ25COIN()", +"cd5617b6": "STCDR()", +"cd5655da": "setPixelBlock(uint256[],uint256[],uint256[],uint256[])", +"cd565bc5": "determineAffID(uint256,uint256)", +"cd5681d5": "mintRefs(bytes32)", +"cd568d0f": "submit(string,int8,int8,int16,string)", +"cd56f019": "getDefaultClaim(address)", +"cd572a07": "BOF()", +"cd575c32": "mintGem(uint256,string,uint256,bool,uint256)", +"cd576dd0": "IPAC()", +"cd5777e2": "allocateTokensToInvestors(address,uint256)", +"cd57a448": "SwapContract(address,uint256)", +"cd57a650": "BasilNetwork()", +"cd584045": "enableApproval()", +"cd586a50": "OnliCoinToken()", +"cd58a867": "internalAssignTokens(address,uint256,uint256,uint256,uint256)", +"cd58e75b": "newBurnableOpenPayment(address,uint256,uint8,uint256,string)", +"cd591822": "CanaryV7Fast()", +"cd59bf5b": "getNowFromOwner()", +"cd5a489d": "killContract(bool)", +"cd5a57cb": "registerOpinion(uint256,string)", +"cd5a9bf3": "isCurrentOrPastAccountMinter(address)", +"cd5ab612": "buyEmptyPixelArea(uint256,uint256,uint256,uint256)", +"cd5acd4d": "setKey(bytes32,bytes32,bytes)", +"cd5b4ae0": "zHQPreSale()", +"cd5b8837": "distributeGREEN(address[],uint256,uint256)", +"cd5ba752": "firstPlacePot()", +"cd5ba978": "presale_end_block()", +"cd5bfb63": "tokenIdOf(bytes32)", +"cd5bfbe4": "initialVestAmount()", +"cd5c222f": "msgMap(uint256)", +"cd5c4c70": "deleteOwner(address)", +"cd5d6c2b": "betInfoIsLocked()", +"cd5d950f": "TaxiToken()", +"cd5dba1e": "WhiteElephant()", +"cd5dd1d0": "showMsgSender()", +"cd5e2038": "t_ImmlaTokenDepository2()", +"cd5e3c5d": "roll()", +"cd5ebd93": "calculateTimeout()", +"cd5ecd60": "theWinnernumber()", +"cd5f49d5": "transferRewards(address,uint256,uint256)", +"cd5f5c4a": "tryGet(bytes12)", +"cd60aa75": "TokenPurchase(address,uint256,uint256)", +"cd60fe35": "MAX_TOTAL()", +"cd619681": "count_nodes()", +"cd61a95a": "sellOrder(uint256,uint256)", +"cd61cb3a": "setTokenUpgrader(address)", +"cd62b382": "Sunset(bool)", +"cd634920": "buyLeader(uint256,uint256)", +"cd635b71": "ownerShipTransfer(address)", +"cd639e6c": "EthFundTransfer(uint256)", +"cd639e8c": "transferByInternal(address,address,uint256)", +"cd63acf9": "buyChest()", +"cd63d930": "distributionCap()", +"cd64b135": "_depositToken(address,uint256)", +"cd64d952": "buildConnection(address,address,address,int256,uint256,uint256)", +"cd6566b0": "battle(bytes8,bytes5,bytes8,bytes5)", +"cd65908e": "changeIPFS(string)", +"cd65bb67": "ViewToken()", +"cd67571c": "accept(address,uint256)", +"cd679413": "ASHLEY_ALLOCATION()", +"cd67e55e": "LSTRatePerWEI()", +"cd67f3bc": "LimingCoin()", +"cd68100c": "lastAddress()", +"cd69859e": "vestedAdvisors()", +"cd69a7f1": "weightsApportionDecimals()", +"cd6a7ca7": "allowance(address,address,address,address)", +"cd6c4bb0": "startSettlementPreparation()", +"cd6c8343": "getAttributeValue(address,uint256)", +"cd6d7f81": "PRICE_FACTOR()", +"cd6dc687": "initialize(address,uint256)", +"cd6dca9e": "SaleFinalised(address,address,uint256)", +"cd6e05e2": "totalPotAwayTeam()", +"cd6e4dad": "LBCToken(address,address)", +"cd6e8855": "setMedications(bool)", +"cd6ebff6": "betAmountAtNow()", +"cd6ee0c2": "WISDOM()", +"cd6f4e0d": "dragoCount()", +"cd6f7c50": "GeneNuggetsToken()", +"cd6f7fdb": "applyKarmaDiff(address,uint256[2])", +"cd6fafa2": "XXXXXXXX04()", +"cd6fc2d1": "addMiningWarPrizePool(uint256)", +"cd704cb4": "getGeneralRelation(uint32)", +"cd71a397": "contract6function1()", +"cd71a471": "withdrawMkt(address,uint256)", +"cd72250d": "multiTransfer(address[],address[],uint256[])", +"cd728815": "setSubContractAddresses(address)", +"cd7292a0": "ChessLottery()", +"cd729a91": "unlockedTeamAllocationTokens()", +"cd72ab69": "etherRaised()", +"cd73d26c": "blocksPerDeal()", +"cd73df78": "getAllUsers(bool)", +"cd74096a": "getDataHoldersRefBonus(address)", +"cd755b41": "subs(address,address)", +"cd761b9c": "Grass()", +"cd762827": "joinGame(address,uint256)", +"cd76635b": "_setAddr(address)", +"cd76aa16": "getTotalCollected(uint64,address)", +"cd76faf5": "listActiveEggs()", +"cd7724c3": "getEthToTokenInputPrice(uint256)", +"cd77521a": "setFSTAddress(address)", +"cd77a0c8": "purchaseToken(address)", +"cd7805bc": "pinged(address,uint256,uint256,uint256)", +"cd781bf3": "pullEntry(uint256)", +"cd784d1b": "isSuperUser(address)", +"cd78a3b7": "processVote(bool)", +"cd79f86d": "submitPkgHash(string,string)", +"cd7a2c3b": "ResumeICO()", +"cd7b6744": "lockGlobalToken()", +"cd7ba8fd": "currentBlockHashCst()", +"cd7c92e3": "requestPrice(uint256)", +"cd7d5b92": "STARTING_SWORD()", +"cd7da845": "throwsWhenFinalizingWithIncorrectCap()", +"cd7da914": "renounceArbiter(address)", +"cd7dfa31": "setStarDeleted(uint256)", +"cd7e3184": "getValueBonus(uint256)", +"cd7e9fa6": "RefondCoin(uint256,string,string)", +"cd7eac3a": "house_fee_pct()", +"cd7ec171": "developer_string_C(string)", +"cd7ecda0": "grantPromoPack(address,uint8)", +"cd7f85fa": "budgetMultiSigWithdraw(uint256)", +"cd7fa74b": "setPendingReview()", +"cd7fb38c": "isValidMatingPair(uint256,uint256)", +"cd7ff921": "stringIndexOf(string,string)", +"cd80da82": "tokenShare(address)", +"cd819bdd": "setaddrFWD(address)", +"cd82a778": "_allowTimelock(address,address)", +"cd836e15": "SHARDING_REWARD()", +"cd838f0f": "getNames()", +"cd83b57c": "TacoCoin()", +"cd84cff4": "wwwithdrawww(uint256)", +"cd852330": "buyFromTrusterDealer(address,uint256,uint256)", +"cd854072": "affiliatThreshold1()", +"cd8550b8": "setBonus(bool)", +"cd85e945": "EtalonToken()", +"cd863e25": "startOffering(uint256)", +"cd866ee1": "MaximCoin()", +"cd868648": "setEndBlockNumber(uint256)", +"cd86eee2": "tokenCreationMinMile1()", +"cd871b16": "matchBytes32Prefix(bytes32,bytes,uint256,bytes)", +"cd875247": "OffGridParadise(string,string)", +"cd880b1e": "kcck256stradd(string,address)", +"cd881742": "teamTokensReleased()", +"cd88333e": "coldStore(uint256)", +"cd887739": "getExpertiseId(uint256)", +"cd88bac4": "teamTokensLockAddress()", +"cd897b75": "withdrawSubRound(uint256)", +"cd8aa272": "Icarus()", +"cd8b02c8": "Revoce()", +"cd8b0a77": "getProjectJudge(uint256)", +"cd8c063b": "isTransferAllowed()", +"cd8cc844": "lotteryStart()", +"cd8cdccd": "XiiPay()", +"cd8d3918": "calcLuckyCoinBenefit(uint256)", +"cd8d8da0": "tokenFallbackExchange(address,uint256,uint256)", +"cd8db998": "isDepositBlock(uint256)", +"cd8df8ec": "activateLastSale()", +"cd8e250a": "frozenBalancesOf(address)", +"cd8ed6f6": "addMarking(bytes32,bytes32,int256)", +"cd8f8b3c": "updateMintingAgent(address,bool)", +"cd8fce49": "Consents()", +"cd905dff": "isOperational()", +"cd9063f6": "replaceToken(address)", +"cd906676": "changelp1(address)", +"cd90b99d": "spawnInstance(address,uint256,uint256,uint256)", +"cd91672d": "firstStageDatetime()", +"cd91866a": "_startGameRound()", +"cd9217f7": "eventListener()", +"cd928f69": "updateAllowedTransfers(address,bool)", +"cd92dec0": "WaterMeterAcorn(address)", +"cd92eba9": "debtLedgerLength()", +"cd932c9c": "parseTimestampParts(uint256)", +"cd93307a": "EthereumSmart(uint256,string,string)", +"cd9354e4": "successesOf(address)", +"cd9380d5": "testSetBalanceSetsSupplyCumulatively()", +"cd93f6f3": "SetPoolEntryFee(string,uint256)", +"cd943e54": "transferToLock(address,uint256,uint256)", +"cd944e3b": "EXPERTS_POOL_TOKENS()", +"cd94a2a4": "owlToken()", +"cd953744": "getZTKCheck(address,address)", +"cd9548ce": "CompanyURL(string,string)", +"cd955faa": "hasSantaCoins(address)", +"cd9679dd": "issuePRETDETokens(address)", +"cd9745f2": "voteForTransaction(uint256)", +"cd9847bc": "testAccessControl()", +"cd98b214": "getMarketCreatorSettlementFeeInAttoethPerEth()", +"cd997aa3": "getData_31()", +"cd9a1b63": "devBalance()", +"cd9a1fa6": "countOfOwners()", +"cd9a27ba": "defaultRegionTax()", +"cd9a3c98": "any(bool[7])", +"cd9a7a56": "revokeOperatorByTranche(bytes32,address)", +"cd9b2f05": "addContributors(address[],bytes32[])", +"cd9c8d80": "VerifiedInfoHash(bytes32)", +"cd9d12f2": "icoStartUnix()", +"cd9d27ed": "setDelegadoDeDistritoVerify(bytes32,bytes32,uint8)", +"cd9ea342": "testMode()", +"cd9f05b8": "balanceEtherAddress(address)", +"cda0574e": "emitNominUpdated(address)", +"cda0eeaa": "gameMinBetAmount()", +"cda113ed": "globalBet()", +"cda2695a": "sponsor(address,uint256,uint256,uint256)", +"cda35494": "bonusMintingAgent()", +"cda368c3": "teamV()", +"cda3c001": "getUnsoldPeriod()", +"cda4351b": "ViewBetByID(uint256)", +"cda43ec5": "returnHrt(address,string)", +"cda4beef": "createAuction(uint256,uint256,uint256)", +"cda6239d": "getArrayOfTiers()", +"cda68e5d": "LogDecreaseCap(uint256)", +"cda6e92a": "sendTransaction(address,uint256,uint256,string,bytes)", +"cda78dea": "DTransport()", +"cda8300e": "Transfer_data_enabled()", +"cda87e33": "getConfigBoolz(bytes)", +"cda95d80": "Reserve()", +"cdab73b5": "blackList()", +"cdab9b5b": "setProviderName(uint256,string)", +"cdaba786": "addBet(uint256)", +"cdad5f94": "sendState(bytes,uint256,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"cdad6576": "changeBountyArbiter(uint256,address)", +"cdadb0fa": "right58(uint256)", +"cdaeb47d": "removeAddressFromMaster(address)", +"cdaf4028": "getMigrationCount()", +"cdb0ec6b": "getLinkedWallets(address)", +"cdb0fed9": "Livetest()", +"cdb230be": "DHAMAR()", +"cdb23c2d": "getMonarchyFactory()", +"cdb2867b": "canVote(uint256,address)", +"cdb294a2": "startDeal(bytes32,address)", +"cdb30482": "setBalancesUSD(address,address,uint256)", +"cdb3344a": "createGravatar(string,string)", +"cdb38f4f": "preICOTokenIssuedTotal()", +"cdb532b9": "deleteCharity(uint256)", +"cdb58e21": "DUBI()", +"cdb616b2": "ForkDelta(address,address,uint256,uint256,address)", +"cdb627b2": "showRecastConfigs()", +"cdb62c16": "getCashOutAmount(uint256)", +"cdb6753b": "setNav(uint32)", +"cdb75f2b": "NemoXXToken()", +"cdb7699a": "manualTransferTokensToWithBonus(address,uint256,uint256,uint256)", +"cdb78a2a": "giveNxc(address,uint256)", +"cdb7ef81": "getMinAuditPriceMax()", +"cdb80c51": "_service()", +"cdb88ad1": "setPauseState(bool)", +"cdb986cc": "getExperience()", +"cdb99909": "fstPrivateSalePortionNumerator()", +"cdbaed5a": "_isValidDepositCountry(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cdbb02af": "getAddressCount()", +"cdbccf50": "unfreeze_end_date()", +"cdbce03d": "checkOwner()", +"cdbcff6d": "getQuotas()", +"cdbd0f0e": "getRatioOf(address)", +"cdbd1031": "craftTwoCards(uint256,uint256)", +"cdbd3fc9": "bax()", +"cdbd7516": "allowUsers(address,address[])", +"cdbdc7a4": "DeveciToken()", +"cdbdd569": "SetLastRoomAndRound(address,uint8,uint256,bool)", +"cdbdf391": "left34(uint256)", +"cdbf9c42": "multiply13(uint256)", +"cdbfd448": "memberLog()", +"cdc04961": "setStates(address[],uint8[],uint8[])", +"cdc0563a": "presaleTokenRate()", +"cdc06bdd": "CrypviserICO(address[],uint256)", +"cdc07bbc": "_destroy(address,uint256)", +"cdc18424": "withdrawer()", +"cdc25845": "setBuyPrices(uint256)", +"cdc26dcb": "dorcasToken()", +"cdc2895c": "getOffer()", +"cdc39f4a": "addCardSet(uint256,uint256,uint256,bytes32,string,address,uint8)", +"cdc3e046": "balanceMaxSupply()", +"cdc57fd3": "modifyTokenPrice(uint256)", +"cdc5c7cd": "updateLinkHash(uint256,bytes32)", +"cdc62c03": "getFeeToTokenConversion(uint256)", +"cdc62d39": "ballotDetails(uint32)", +"cdc68b85": "create_all()", +"cdc7076d": "getMilk()", +"cdc81bc2": "totalInVaults()", +"cdc86ec4": "tokenCreationMinPayment()", +"cdc89404": "round5StartTime()", +"cdc8d357": "mintVerify(address,address,uint256,int256,uint256,int256)", +"cdcb3cdb": "crowdsaleSupply()", +"cdcb7c8f": "chase()", +"cdcb8788": "nextRoundFee()", +"cdcbac0d": "phase3StartingAt()", +"cdcc599b": "YunnimToken()", +"cdcc5d3e": "getTokenHolderTribunal()", +"cdcd77c0": "baz(uint32,bool)", +"cdcda9a8": "DogeCash(uint256,string,string)", +"cdcdb463": "getRiskParameters(bytes32)", +"cdce240c": "WillCoin(string,uint256,string,uint8)", +"cdce5206": "getUserNum()", +"cdcf0c4a": "dispute(string,address)", +"cdcf4b9b": "priceDenominator()", +"cdcf5794": "checkCooldown(address,address)", +"cdd11b83": "roundTotalWinnings()", +"cdd13589": "batchDistributeWithAmount(address[],uint256[])", +"cdd13673": "rewardReductionRate()", +"cdd13701": "getEventHashes(uint256[256])", +"cdd1b539": "getSequenceNumber(uint256,address)", +"cdd2067e": "getVendingAmountSold(uint256)", +"cdd247a9": "offerAd(uint256,uint256)", +"cdd2ef0c": "starBuy()", +"cdd3574a": "crowdsaleStartBlock()", +"cdd3ab58": "addDistributionSources(address[])", +"cdd432d0": "rewardNumerator()", +"cdd63344": "moveTo(uint256)", +"cdd6d079": "_tokensForEth(uint256,uint256)", +"cdd72253": "getVoters()", +"cdd739f6": "tokenCapForPreICO()", +"cdd7b1fd": "init(uint256,uint256,uint256,address)", +"cdd8750e": "getDueTime(bytes32)", +"cdd8b2b2": "registerBeneficiary(address)", +"cdd8cc49": "debug_string(string)", +"cdd8d4e8": "mgmtRewardPercentage()", +"cdd90fbb": "firstRoundWMDiscount()", +"cdd93332": "getTradingStart()", +"cdd977e0": "addrService()", +"cdda62ad": "FutureBlockCall(address,uint256,uint8,address,bytes4,bytes,uint256,uint256,uint16,uint256,uint256)", +"cdda96cf": "TokenPriceETH()", +"cddaf241": "distributeReservedTokens(uint256)", +"cddb4e44": "getDataAddress()", +"cddb523b": "changeTeamWallet(address,address)", +"cddb8e94": "buyProduct(address,uint256)", +"cddbe729": "game(uint256)", +"cddbff7c": "CRYPTODUBAI()", +"cddc028b": "IndexEmpireToken()", +"cddc37c1": "withdrawForTwoYear()", +"cddce877": "TOKEN_SHARE_OF_LEGALS()", +"cddd351c": "transferFromOnBehalf(address)", +"cdde5413": "updateTileTimeStamp(uint16)", +"cdde76f7": "hasAnyAttrs(uint256,bytes2)", +"cdde9294": "avgTokenWinValue()", +"cddeaba0": "setTokenPrice(uint256,uint256,uint256,uint256)", +"cddfbaaf": "AirDropAFTKSeven()", +"cde02b25": "totaldivineTokensIssued()", +"cde0a4f8": "setRegulator(address)", +"cde180a9": "listContractByModuleId(string)", +"cde1d97a": "ChangeTokenVaultAddress(address)", +"cde25f8a": "getWineOwner(address)", +"cde2c35a": "rewardBobaBase(uint256)", +"cde2d72a": "receiveBTC(address,string,address,uint256,string)", +"cde2e8d7": "A2ACrowdsalePartner()", +"cde4018e": "AgriChainData()", +"cde40bc8": "bonusFirstWeek()", +"cde43f28": "mintTokens(uint256,int256,address,uint256)", +"cde4efa9": "flip()", +"cde596b2": "Pay(address)", +"cde5f58f": "RELEASE_INTERVAL()", +"cde68041": "hasPermission(address,address)", +"cde74e51": "licenses(bytes32)", +"cde7da75": "claimActingPlayerOutOfTime(uint256)", +"cde7f980": "save(string,address,uint256)", +"cde93eec": "NewIssue(address,uint256)", +"cde99727": "calculateROI()", +"cde9f2ea": "startdate()", +"cdea76d6": "buyLong(address[2],uint256[2],uint8,bytes32[3])", +"cdeaf5bc": "addItem(uint256,uint256,uint256,uint32[8])", +"cdeb1485": "massTransfer(address[],uint256[],bytes32)", +"cdeb7bac": "MaiToken2()", +"cdebf885": "Rent(address,uint256,uint256,uint256)", +"cdecd1d7": "FUN()", +"cded6986": "_getBridgeTokenFee(uint256)", +"cded6fa5": "JesusCrowdsale()", +"cdeda055": "_assert(bool)", +"cdee2112": "CyberToken()", +"cdee2b92": "saleclosingTime()", +"cdee5c4a": "raceRegistration(uint256,address)", +"cdee8973": "Swapped(address,uint256)", +"cdef3911": "assignTokenOperator(address)", +"cdef9423": "create(address,address,address,address,address,address,address,uint8,string)", +"cdef9fb6": "SimpleStore(uint256)", +"cdefa007": "FondoNetwork(uint256,string,string)", +"cdefa4de": "ParaD2Test()", +"cdefe704": "getLOCbyID(uint256)", +"cdf016ca": "minimumBounty()", +"cdf05ab5": "voteTime(uint256)", +"cdf20e1e": "currentSyndicateValue()", +"cdf32cab": "totalInvestedWei()", +"cdf3bc6f": "revise()", +"cdf3bdab": "GetMyAcorn()", +"cdf45c03": "FourLeafClover()", +"cdf46344": "mint(address,string,string,uint256,uint64,uint64,uint64)", +"cdf4d6b4": "registerKYC(address[])", +"cdf574f1": "purchase(uint256,bytes7)", +"cdf6ddb4": "activeCrowdsalePhase1(uint256)", +"cdf744b2": "setFounderPercent(uint256)", +"cdf90e02": "Roles2LibraryAndERC20LibraryAdapter(address,address)", +"cdf93c0f": "EtherBlock()", +"cdf99413": "CrowdsaleToken(string,string,uint256,uint256,bool)", +"cdf9b77e": "getCurrency(uint256)", +"cdfb0a21": "PRVTSToken()", +"cdfb2b4e": "enableWhitelist()", +"cdfb5832": "setClaimer(address)", +"cdfbc437": "setMaxBetAmount(uint256,uint256)", +"cdfbc8f1": "MINIMAL_PURCHASE()", +"cdfbe22c": "isAnExchanger(address)", +"cdfc20aa": "addHashType(uint8,string)", +"cdfd293b": "BOUTSPRO_AMOUNT()", +"cdfd72e8": "calcTeamEarnings(uint256,uint256)", +"cdfd7474": "SONICToken(string,uint8,string)", +"cdfdb7d6": "increaseAllowance(address,uint256,address)", +"cdfe2815": "createVip(address,uint256,uint256,uint256)", +"cdff1be4": "pauseWithdrawal(address,address)", +"cdff5857": "updateUint256s(bytes32[],uint256[])", +"ce00d49c": "_transferWithRate(address,address,uint256)", +"ce017242": "updateICOPrice()", +"ce01e1ec": "set2(uint256)", +"ce021384": "numberOfReferralCodes(address)", +"ce0457fe": "NewOwner(bytes32,bytes32,address)", +"ce04a8c5": "isDAppReady()", +"ce04c10e": "highContributionAward(address)", +"ce050632": "setBettingTime(uint256)", +"ce05264f": "createInterceptorFromVault()", +"ce05369b": "releaseTokenHolder()", +"ce058d0d": "ChangeLEXTokenAddress(address)", +"ce0617ec": "lockedUntil()", +"ce072163": "collectPayments()", +"ce07d2b4": "proxyTransfer(address,address,uint256,bytes)", +"ce098093": "createtoken(string,string,string,address)", +"ce0a191a": "setLotteryTokensPercent(uint256)", +"ce0b5bd5": "cancelWhitelistRemoval(bytes32)", +"ce0bb9c4": "looksCoin()", +"ce0bd51f": "bancorConverterFactory()", +"ce0befcf": "remainTokens()", +"ce0d5f78": "addAddressToBlacklist(address,address)", +"ce0df06b": "FreezeAccount(address)", +"ce0e19ba": "appendString(string)", +"ce0f802d": "MaazBTC()", +"ce0f92b7": "hashOrder(bytes,uint64,uint64,uint256,uint256,uint256)", +"ce0ff8d8": "CSStoken(uint256,string,string)", +"ce10814c": "wmax(uint128,uint128)", +"ce109195": "internalDoesEventExist(bytes32)", +"ce10cf88": "getAddressByIndex(uint256)", +"ce11f2bb": "vote(uint256[])", +"ce120afb": "_safeTransferPaymnt(address,uint256)", +"ce139296": "icoPhaseDiscountPercentage1()", +"ce13bfb7": "cancelLoanOffering(address[9],uint256[7],uint32[4],uint256)", +"ce144eb9": "spiceUp(string)", +"ce146d3d": "getTotalWins()", +"ce148564": "TIER3END()", +"ce148c1f": "tempTokensPeriodOf()", +"ce14a46e": "totalPeriod()", +"ce14d404": "PieTokenBase()", +"ce14eeb8": "BASE_HARD_CAP_PER_ROUND()", +"ce14f10b": "disabled(uint256)", +"ce15647a": "getTeam(uint8)", +"ce158ba2": "approveCompanyAllocation(address)", +"ce160edd": "searchAndBid(uint256,uint256)", +"ce1619f8": "_lockPaymentTokens(address,uint256,uint256)", +"ce161b57": "AngelTestToken()", +"ce165894": "updateExpectedAmount(bytes32,uint8,int256)", +"ce17f01e": "Hostblock()", +"ce18eb0b": "stage1Deadline()", +"ce19419b": "testThrowsSetNotUpdatableNotOwner()", +"ce1a70a3": "SimplePreTGEContract()", +"ce1aafc0": "VinaexToken()", +"ce1afbe1": "_transferToken(address,address,uint256)", +"ce1b088a": "withdrawDonations()", +"ce1bd789": "DestroyTransferFeeCoin()", +"ce1c1538": "getCardByOwner(address)", +"ce1c93af": "abandon(string)", +"ce1cf229": "SimpleMultiSigWallet()", +"ce1d6ea0": "testAppendTranch()", +"ce1ed182": "getLastMilestoneStartsAt()", +"ce1ed2bb": "BecomeSquirrelDuke()", +"ce1f561c": "holdingTaxDecimals()", +"ce1ffcd9": "setTransferEnable(bool)", +"ce203b83": "officialUserSignUp(string,address)", +"ce204b78": "defrozen(address)", +"ce204bf1": "TOKEN_LOCKING_PERIOD()", +"ce20fd84": "query(bytes2,int256)", +"ce21abf3": "sendUnsoldPRETDETokensToTDE()", +"ce21fbf4": "GolemToken()", +"ce220ecf": "testAddBalanceFailsAboveOverflow()", +"ce2293ca": "EIB(string,string,uint8,uint256)", +"ce230030": "unlockSupervisedFunds(address)", +"ce233452": "limitPurchasing(uint256,uint256)", +"ce23772b": "removeWalletFromWhitelist(address)", +"ce23e8bc": "LIQUIDATION_TOKENS_PER_ETH()", +"ce23f2b2": "newLoan(bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"ce241d7c": "LogSetOwner(address)", +"ce248843": "removeOne(address)", +"ce255bba": "setsafekey(uint256)", +"ce266af8": "tom()", +"ce267b55": "ecdsaVerify(address,bytes,uint8,bytes32,bytes32)", +"ce2777a3": "BigchatToken(uint256,string,uint8,string)", +"ce27a21a": "setLogoPrice(uint256)", +"ce289284": "Result(bytes1)", +"ce2a9f62": "totalEthCollected()", +"ce2c6ad5": "getChainFeeArray()", +"ce2ce3fc": "getLocation()", +"ce2d173f": "setSelfOff()", +"ce2d3fa1": "returnKVTToOwner()", +"ce2dfd00": "createFootballerStar(uint256,uint256,uint256,uint256)", +"ce2f67a2": "exampleFunction()", +"ce2fc873": "setArticleHash(uint256,string)", +"ce2fc8b1": "RequestC(bytes32,bytes32)", +"ce2fce38": "getTransferInfo(address,uint256)", +"ce3099fa": "testNBool()", +"ce30b8d9": "operatorBurn(address,uint256,bytes)", +"ce3174ca": "revokeSubmission(address,address)", +"ce329570": "byzantineCloseChannel(bytes32)", +"ce347a65": "fund(uint16)", +"ce3498b8": "DelegatedIdentity(address)", +"ce356e3a": "addTeam2(uint64,uint64,uint64,uint16)", +"ce371431": "queryFunds(address)", +"ce373b95": "heroOfThePit()", +"ce376aa3": "buy_king()", +"ce3800e1": "moonLevel()", +"ce383ec7": "view68()", +"ce389e53": "getTokenAddHold()", +"ce394696": "calculateCost(uint256,uint256)", +"ce39952a": "disableSecureMode()", +"ce39976d": "getUrlAtIndexOf(address,address,uint256)", +"ce3a7076": "Cancelot(address,address)", +"ce3b0475": "changePriceDecraseTime2Action(uint256)", +"ce3be6bb": "withdrawWallet1()", +"ce3cc3aa": "changeTolerance(address,bytes32,uint256)", +"ce3ccfd0": "shouldReturnDefault(bytes32)", +"ce3cd997": "setStage(uint8)", +"ce3cef0d": "stopTakeToken()", +"ce3d9237": "mintMarginTokens(bytes32,address[7],uint256[8],uint32[2],bool,bytes,bytes)", +"ce3e82a4": "KorkToken()", +"ce3f865f": "collect(uint256)", +"ce3fff35": "ONTTotalSupply()", +"ce4150eb": "migrateMarketInFromSibling()", +"ce419871": "openKYC()", +"ce41d75d": "NewIntelTechMedia(address)", +"ce4254ce": "terminationTime()", +"ce4258e9": "OPENAI()", +"ce429429": "generateOrderByMerchant(address,uint256,string,string,string)", +"ce42bb11": "getLockedDevFundAmount()", +"ce42fa88": "Telcoin(address)", +"ce435f4b": "SetParticipantAgrHash(address,address,bytes32)", +"ce43b0c0": "creditorAddresses(uint256)", +"ce43c032": "getUsername(address)", +"ce43c097": "CradTimeLock(address)", +"ce44573a": "GenChipByRandomWeight(uint256,uint8,uint256[])", +"ce45a260": "CryptoDime()", +"ce45f981": "MooAdvToken(uint256,string,string)", +"ce468922": "transferCat(bytes5,address,address,uint256)", +"ce46e046": "isPayable()", +"ce471aee": "kompitechToken()", +"ce47befd": "checkoutCart(string)", +"ce47e604": "sendAliceBlue(address,uint16,uint256)", +"ce483c42": "statusI()", +"ce483e88": "incrementOpenInterest(uint256)", +"ce48a54d": "getHeroLevel(address,address)", +"ce49735a": "distributeAlliniTokens()", +"ce4a6f09": "offerCanvasForSaleToAddress(uint32,uint256,address)", +"ce4a9206": "minPayInterval()", +"ce4ae74a": "setRewardMinter(address,uint256)", +"ce4c4a74": "TrueFlipToken(address)", +"ce4cf4c8": "advisorTotal()", +"ce4d01a3": "validate(uint256)", +"ce4d66b9": "roundBonus(uint256)", +"ce4d6fdf": "maritalStatus()", +"ce4dbdff": "securityTokenRegistry()", +"ce4ddabd": "updateTimeRC(address,uint256,uint256)", +"ce4e42d2": "BountyManager(address)", +"ce4e5aa4": "findBestMatch()", +"ce4e84a3": "STARTING_CHICKEN()", +"ce4e8c1a": "createNextPremiumSale(uint8,uint256)", +"ce4eb657": "updateXDRRate(uint256)", +"ce4ef577": "tokensAllocatedForAs(address,address,address,address,address,address,address,address,address)", +"ce4efe62": "insert(uint256,bytes32,bytes32)", +"ce507401": "oraclizeGasPrice()", +"ce50f72d": "getAvailableBalanceOf(address,address)", +"ce50f926": "getMinLimit()", +"ce510d46": "neededAmountTotal()", +"ce513b6f": "withdrawable(address)", +"ce52242e": "gotchinfo(address)", +"ce522f22": "updateWeiCap(uint256)", +"ce52c4ef": "createDelegation(address,uint256)", +"ce52cf84": "encoding_format()", +"ce53ee2d": "voteNoLockByAdmin(address,address,uint256)", +"ce5440bb": "depositAgent3(uint256,uint256,uint256[],uint256[],uint256)", +"ce5478a4": "lockedCapitalOf(address)", +"ce5494bb": "migrate(address)", +"ce5566c5": "cash(uint256,uint256)", +"ce557031": "purchaseTokens(address)", +"ce5570ec": "isWallet(address)", +"ce563036": "BaseContract()", +"ce5659bc": "changePartner2(address)", +"ce56c454": "withdrawEther(uint256,address)", +"ce56f3fb": "moneybuy(address,uint256)", +"ce5774c6": "Proposal(string)", +"ce578cd6": "managementContractAddress()", +"ce57d8d5": "getSingleInvestor(address)", +"ce5910f3": "unfreez()", +"ce592586": "setThresold(uint256,uint256)", +"ce5968da": "onMint(int256,address,uint256)", +"ce597164": "normalDemurrageAmount(uint256)", +"ce5a5df7": "createUnicorn(address)", +"ce5a63ff": "purchaseBlock(uint256,uint256)", +"ce5ac32d": "Firmament()", +"ce5c073d": "setMintMaster(address)", +"ce5c2c33": "performTransaction(uint256)", +"ce5c4fd8": "finalizeSale(uint256,uint256)", +"ce5c5201": "cryptogsAddress()", +"ce5d80e6": "stealCardWithId(uint256)", +"ce5e13aa": "getPlayerProfit(address)", +"ce5e4190": "set_tokens_per_ether(uint256)", +"ce5e6393": "tgrSetFinished()", +"ce5e84a3": "activate(bool)", +"ce5e9ffb": "CORRECTION()", +"ce5f9454": "numerator()", +"ce5fa1e9": "secondExchangeRatePeriod()", +"ce5fd7f3": "OfferContract()", +"ce606ee0": "contractOwner()", +"ce60f78d": "createMarriage(bytes,bytes,uint256,bytes,bytes)", +"ce622ec5": "announceWinner(string)", +"ce6236ca": "getRoundLength()", +"ce627bd9": "mineblocksAddr()", +"ce629a6b": "_computeTournamentBooty(uint256,uint256,uint256)", +"ce63066f": "test_6_basicTransfer_increaseBlocksBy1000()", +"ce6342f3": "getAbiVersion()", +"ce63cc89": "postTask(string,string,uint256,uint256)", +"ce649b39": "setEthereumRate(uint256)", +"ce655952": "_cancelSale(uint256)", +"ce665dd8": "OFFSET()", +"ce67bda6": "testNop(int256,int256,uint256)", +"ce686e40": "IcoToken(string,string,uint256,string)", +"ce686e62": "BurnableOpenPayment(address,uint256,bool,uint256,string)", +"ce691294": "kRate()", +"ce6933d5": "fetchPaidOrdersForPayer()", +"ce695d7f": "_addArea(address,uint256)", +"ce699a41": "releaseVestedTokens(address)", +"ce69cd20": "MIN_BID()", +"ce6a9bd6": "proofType_Ledger()", +"ce6b3467": "withdrawExcessToken(address)", +"ce6c0b64": "_getTokenNumberWithBonus(uint256)", +"ce6c2589": "_emitOracleRemoved(address)", +"ce6c5080": "tokenSetAudit(address,address,address,address)", +"ce6c9a89": "changeMinimalWei(uint256)", +"ce6d35d1": "migrateToken(address,address)", +"ce6d41de": "getMessage()", +"ce6eaef5": "startSecondSale()", +"ce6eaff9": "YOU_BET_MINE_DOCUMENT_SHA512()", +"ce6efb07": "AmountLimitCrowdsale(uint256,uint256)", +"ce6f149c": "WEEKS_26()", +"ce6f899d": "EventLogin(address,string)", +"ce709c9b": "proposalCreateTime(uint256)", +"ce70faec": "createUltimateOracle(address,address,uint8,uint256,uint256,uint256)", +"ce71b83c": "TianqibaoTokenERC20(uint256,string,string)", +"ce71caee": "juryOperator()", +"ce72a696": "ICO_PERCENTAGE_1()", +"ce73a61d": "setWhitelistExpiration(uint256)", +"ce73b41a": "addBuyTokensRequest(address,string,uint256,uint256)", +"ce742222": "SCARABToken2()", +"ce744ba5": "SellOffer(address,address,uint256,uint256,uint256,uint256)", +"ce746024": "recover()", +"ce7462e9": "setStarSellPrice(uint256,uint256)", +"ce749c29": "defund()", +"ce774030": "raiseCoinsAdded(address,uint32,uint256)", +"ce77cf42": "Rafflecoin()", +"ce782e08": "floorLog2Test(uint256)", +"ce784216": "scrapCount()", +"ce7842f5": "referralBonus()", +"ce784564": "findPositionInMaxExpArray(uint256)", +"ce78b752": "ActivatedEvent(bool)", +"ce7917d7": "GEOCOIN()", +"ce794294": "multisignature()", +"ce799b0a": "changeStakeRate(bytes32,uint256)", +"ce79add1": "givableBalanceOf(address)", +"ce79d17d": "Storesumdata(bytes32,bytes32,uint64)", +"ce7a0697": "_internalTgeSetLive()", +"ce7a2b02": "processPayment(address,address)", +"ce7a60ab": "unlockBalance(address)", +"ce7a94eb": "SliceByte32(bytes,uint32)", +"ce7aa79f": "PXMCToken(uint256,string,uint8,string)", +"ce7ab6a7": "set_refunded(bool)", +"ce7ba916": "_initBadges(address,uint256,uint256,uint256)", +"ce7c2ac2": "shares(address)", +"ce7c5d7f": "transferEthToOwner(uint256)", +"ce7ca615": "FoundationAddress()", +"ce7ca665": "medalBoost()", +"ce7cdbb7": "getIndexRoot(bytes32)", +"ce7d3539": "AVMDisputeProcess()", +"ce7e23a0": "UnityToken(address,uint256,uint256)", +"ce7e51e3": "uint256ToString(uint256)", +"ce7f6e82": "CoinPulseToken()", +"ce7fc203": "accForTeam()", +"ce803a70": "noOfSeats()", +"ce806176": "setPurchasing(bool)", +"ce809e4e": "ETH_DECIMALS_FACTOR()", +"ce813d8f": "addTurretParts(uint8[])", +"ce816706": "X4BToken()", +"ce818ed5": "SiringClockAuction(address,uint256)", +"ce82eb33": "ico4Bonus()", +"ce830f5b": "_unlockToken(address)", +"ce845d1d": "currentBalance()", +"ce85e801": "MAX_PRICE_SALE()", +"ce85fbe2": "joojinta()", +"ce860a62": "getShipIdsByOwner()", +"ce869a64": "fails()", +"ce8721b2": "daoAccounts(address)", +"ce873a67": "processReferer(address)", +"ce8775a4": "win(uint256,uint256,uint256,bytes,uint256)", +"ce87f626": "replaceWizardRP(address)", +"ce8804c9": "setAdvertAddr(address)", +"ce883cdb": "getPoolsLength()", +"ce8883af": "potFee(uint256)", +"ce88a9ce": "setProduction()", +"ce88b145": "getAccount(uint256)", +"ce89a2a2": "changeSettings(uint256,uint8)", +"ce89b5de": "buy100()", +"ce89c80c": "calcKeysReceived(uint256,uint256)", +"ce8ac033": "getAvatar(address)", +"ce8ae9f3": "giveReward(address,uint256)", +"ce8b5b60": "setLockAfterManuallyMint(bool,int256)", +"ce8b7151": "isHF()", +"ce8b7be4": "consultantsAllocation()", +"ce8bbe4b": "bobMakesErc20Deposit(bytes32,uint256,address,bytes20,address)", +"ce8bcae3": "allFundsCanBeUnlocked()", +"ce8d054e": "_setupNoCallback()", +"ce8d096d": "redeemVestableToken(address)", +"ce8d1910": "claimFromSeveral(uint256,address[])", +"ce8d388d": "disableWithdraw()", +"ce8d73de": "o_labirinto(uint256)", +"ce8dc388": "TOTAL_ROUNDS()", +"ce8e120a": "thawTransfers()", +"ce8e2fd8": "SaintArnouldToken(address,uint256,uint256)", +"ce8e5170": "burnedAfterSaleCount()", +"ce8e95d4": "updateRegion(uint256,uint256,uint256[],bool,bool,uint8[128],bool,address)", +"ce8ebfc8": "makeSchoolToken()", +"ce8ff29b": "TicTacToeAdjudicator(address,address,address,address,uint256)", +"ce90203c": "computeSellPrice()", +"ce906c6a": "listPrycto5()", +"ce909980": "checkTimeout(address)", +"ce90bafa": "topUpERC20(address,uint32,uint192)", +"ce912692": "createNew(address,address,address,uint256,uint256,uint256)", +"ce916d85": "icoTokensReceived(address)", +"ce91e4b3": "freezeaccount(address,bool)", +"ce923728": "setDealMembers(address,address,address,uint256)", +"ce92dced": "newBid(bytes32)", +"ce93b0e4": "returnAdvisorTokens(address,uint256)", +"ce950d1e": "FancyAssetsCoin(uint256,string,string)", +"ce952345": "icoAssignReservedBounty(address,uint256)", +"ce95aad2": "isOnCraftingAuction(uint256)", +"ce95b475": "getBalanceByAdress(address,address)", +"ce96c8e4": "set_deposit_manager(address)", +"ce96ec6b": "setRefer(address)", +"ce972050": "token_orderSheet(address,uint32)", +"ce972f33": "Menu01(address,uint256)", +"ce97f61a": "submitTally(uint256,uint256,uint256)", +"ce9822c7": "Magic10(uint256,address)", +"ce99151e": "p_wallet()", +"ce9a3b0f": "special()", +"ce9a6ac8": "putOn(uint256,uint256,address)", +"ce9ae667": "PharmaWit()", +"ce9ae91c": "getARed(uint256,uint256)", +"ce9af2b9": "isReserved(string,address,string,bytes32)", +"ce9b4321": "calculateCommission(uint256)", +"ce9c39c9": "stepTwoStartTime()", +"ce9e673b": "forceOffsetBasicFeeRate()", +"ce9e6bb7": "setEndTimeIcoStage2(uint256)", +"ce9e7730": "createSubcourt(uint96,bool,uint256,uint256,uint256,uint256,uint256[4],uint256)", +"ce9f24dc": "SilentNotaryCrowdsale(address,address,address,uint256)", +"ce9fb088": "TransferSellAgentBounty(address,uint256)", +"cea024d9": "tokenPriceNum()", +"cea08621": "changeDailyLimit(uint256)", +"cea10af7": "hardFundingGoal()", +"cea15706": "DarkrenlandCoin()", +"cea16c83": "endFinalStage2()", +"cea198c8": "LogBidCanceled(bytes32)", +"cea22b51": "ico_stage()", +"cea289db": "debugInt(uint256)", +"cea2ed48": "CreatedPet(uint64)", +"cea4b687": "updateListingWithSender(address,uint256,bytes32,uint256)", +"cea5033c": "_requestTokens(address,uint256)", +"cea5b151": "getLabelHash(string)", +"cea5d64b": "shift_right(uint256,uint256)", +"cea63361": "transactionFeeRateM()", +"cea65e97": "addressIsOwner(address)", +"cea67184": "getHydroId(address,address)", +"cea7555b": "distributedFundariaStakes()", +"cea81ab1": "generateContestForDelegationSchemaHash(address,uint256,bytes32)", +"cea876ba": "EthMatch(uint256)", +"cea943ee": "getSaleConfig()", +"cea9707a": "getMyTicketList(bool,uint256,uint256)", +"cea99275": "hasInitMartial()", +"cea9b7af": "ICO_EOS_AIRDROP()", +"cea9d26f": "rescueTokens(address,address,uint256)", +"cea9f621": "setVars(address,address)", +"ceaa50d4": "getLastPayoutAmountAndReset()", +"ceaae25d": "massChangeRegistrationStatusForGoldWhiteList(address[],bool)", +"ceaafb67": "AnonymousDeposit(address,uint256)", +"ceab09d8": "set_participant(address,uint256,uint256,uint256,bool,uint8)", +"ceab4ea7": "VOODOO()", +"ceac2aed": "submit_payment(uint256,uint256,bytes32,bytes32,uint256,address,bytes32)", +"ceacc749": "calcCurrentMinBid()", +"cead2c29": "get_ptc_balance(address)", +"cead4620": "putBtoWithSto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ceadd9c8": "donateAsWithChecksum(address,bytes4)", +"ceae3424": "balanceSoll(address)", +"ceae7f64": "thirdStageMinting()", +"ceaf0bfb": "admAccount(address,bool)", +"ceaf1e94": "_transferToAddress(address,uint256)", +"ceaf9519": "needToGetFree()", +"ceafb18d": "getCard(address)", +"ceb0884d": "getSolution(address,uint32)", +"ceb10f1c": "preIcoCap()", +"ceb21433": "Activate(address,address,address,address)", +"ceb22fa0": "meteredEarn(uint256)", +"ceb24797": "getKycLevel(address)", +"ceb2731a": "purchaseCrate()", +"ceb35b0f": "addAddress(string,address)", +"ceb408b4": "_set5()", +"ceb41385": "getHashLeftPad()", +"ceb44d04": "checkSplitEnd(uint256)", +"ceb51f0a": "setApproved(address,uint256)", +"ceb5bc46": "proshgold()", +"ceb60654": "getGroup(uint256)", +"ceb6dbc3": "time_of_token_swap_end()", +"ceb791d9": "priceRate()", +"ceb7bc87": "tokenTransferFrom(address,address,uint256,address[])", +"ceb7e43c": "getAddOnComplete(uint16)", +"ceb88ff4": "setContribution(address,uint256)", +"ceb8ee8b": "durationInMinutes()", +"ceb98dc7": "unbuy()", +"ceb9a5fd": "getGameCurrentRoundId(uint256)", +"ceba1794": "MAX_LOAN_AMOUNT()", +"ceba30b5": "scheduleTransaction(address,bytes,uint256[4],uint256)", +"ceba5029": "MOBTokenIssue(address)", +"cebac2f2": "LRCLongTermHoldingContract(address,address)", +"cebae575": "GLAU()", +"cebb8bb0": "testControlRestartEnforceRevisions()", +"cebbbce5": "ClaimAirdrop(address,uint256)", +"cebc141a": "devCount()", +"cebc9a82": "getDelay()", +"cebce72d": "token(uint64)", +"cebd31bc": "getStartingPrice()", +"cebe09c9": "quota()", +"cebf3bb7": "minRaise()", +"cebfa61e": "month18companyUnlock()", +"cec0213e": "HealthDataChain(uint256,string,string)", +"cec0f734": "setTransferToken(uint256)", +"cec10c11": "setFees(uint256,uint256,uint256)", +"cec1365a": "ShortLimit(uint256)", +"cec17a12": "ChrisBell(uint256,string,uint8,string)", +"cec33f4e": "getPatentFee(address,uint16[5],uint256)", +"cec3638d": "VotingChallenge()", +"cec36cb4": "refundPoweredUp()", +"cec4a1cc": "pauseRefund(bool)", +"cec4ab9c": "whitelistEnable()", +"cec63cea": "NamoToken()", +"cec68824": "registerFull()", +"cec7260b": "move_monster(uint16,uint16)", +"cec77ad5": "ALLOC_ADVISOR()", +"cec7b4e8": "Deposit(uint256,address,uint256,string)", +"cec8d277": "decrypt(address,bytes,string)", +"cec95aa1": "getReleaseHashForPackage(string,uint256)", +"cec9b4ef": "_executeTransaction(uint256)", +"cec9df89": "getAddressBetsForEvent(bytes32,address,string,string)", +"ceca122d": "activate(bool,bool,bool)", +"ceca7e8e": "fundLock(address,uint256)", +"cecaf395": "buildBlocks(int32,int32,bytes16)", +"cecb06d0": "mintOwner()", +"cecc33e7": "issueTickets(address,uint256,uint256)", +"ceccc10e": "getHoldersNameAddr()", +"cecd0264": "executePayment(string)", +"cecd0ab5": "_processFundsOverflow(address,uint256)", +"cecd9dd4": "_isNeededNewLottery()", +"cecdc6aa": "TEAM()", +"ced095d6": "getContest(string)", +"ced0a3a5": "setHookOperatorContract(address)", +"ced0bcc3": "MangaCoin()", +"ced0c0c2": "subscriptionRate()", +"ced0d31d": "setFeeRate(uint256,uint256,uint256,uint256,uint256,uint256)", +"ced11e40": "addMemory(string,bytes)", +"ced1a60b": "pooja()", +"ced29978": "LogFrozenAccount(address,bool)", +"ced32b0c": "setSender(address)", +"ced39558": "buyLand(uint256)", +"ced3fb9c": "isAddressAuthorized(address)", +"ced444bf": "offerStarForSaleToAddress(uint256,uint256,address)", +"ced4c064": "withdrawTo(string,address)", +"ced4f4b8": "sellEther()", +"ced659b6": "burnMktCoins()", +"ced72f87": "getFee()", +"ced78ed1": "getImageData(uint256,uint16)", +"ced7d018": "reFundByOther(address)", +"ced80aca": "updateMultipleReservedTokens(address[],uint256[],uint256[],uint256[])", +"ced84a71": "addInvestor(address,uint256,uint256)", +"ced92670": "changeMultiplier(uint256)", +"ced9f7c0": "mokenNoName(uint256)", +"ceda4a03": "NovioCoin_TEST()", +"cedadaca": "SingularityTest6()", +"cedbbeee": "createTokens(address)", +"cedc01ae": "getActivator(address)", +"cedc2ce1": "setMaxTransfers(uint256)", +"cedc7277": "getBuyPrice(address)", +"cedcbd99": "ACTION_BUY_OFFER_ACCEPTED()", +"cedcd770": "foundationWithdraw(uint256)", +"cedd90f6": "purchase(bool,bool)", +"ceddd07d": "balanceOfUnlocked(address)", +"cedf222e": "congressMemberThreshold()", +"cee024dc": "getNumberOfVotes()", +"cee02a86": "SOFTCAP_ETH_LIMIT()", +"cee0b4fe": "CRTSTAL_MINING_PERIOD()", +"cee13e28": "Conversion(address,address,address,uint256,uint256,int256,uint256,uint256)", +"cee24e31": "gambler1()", +"cee26ed5": "sellers(uint256)", +"cee2a9cf": "isInvestor(address)", +"cee401ef": "enableICO()", +"cee594c8": "addStage(uint256,uint256,uint256,uint64,uint64,uint256)", +"cee6b0d9": "AcceptsSunny2(address)", +"cee6b53c": "updateLastActivity()", +"cee6ee38": "aEthereumlotteryNet()", +"cee6f794": "SEKEM()", +"cee6f93c": "getResultOfLastFlip()", +"cee73630": "buyTPT(uint256,uint256,uint8,bytes32,bytes32)", +"cee749bc": "withdrawTokenRefund(uint256,address)", +"cee80356": "min4payout()", +"cee829ea": "refundMany(address[])", +"cee8fa1f": "Funding_Setting_cashback_time_end()", +"cee93e23": "isActive(uint32,int256)", +"cee96f49": "setissuedSupplyRatio(uint256)", +"ceea3914": "lookupUserDonationHistoryByCampaignID(address)", +"ceead4b6": "setCompte_10(string)", +"ceeafd9d": "withdrawFundsAdvancedRP(address,uint256,uint256)", +"ceeb7066": "setJoinFee(uint256)", +"ceebe28d": "repoInterfaceVersion()", +"ceec8f8f": "removeProduct(string,string)", +"ceee4119": "getUsersRadarsIds()", +"ceee9658": "rotate_right(uint256,uint256)", +"ceeea0ea": "completeAttack(bytes32)", +"ceef3800": "calculateBonusTierQuotient()", +"ceef3d93": "changelp7(address)", +"ceef644c": "LIFEINVIDER()", +"ceefbbd6": "prePreIcoEndAt()", +"cef037fd": "setContinueSelling()", +"cef062fc": "reserveVault()", +"cef0e9e2": "getFalconmasterReq()", +"cef24cac": "AmountToFund(uint256)", +"cef29521": "PRICE_MULTIPLIER_ICO4()", +"cef2e559": "marketplace_storage()", +"cef42254": "getContribution(uint256)", +"cef4be3c": "partialClaim(address,uint256)", +"cef55ae1": "newComp(uint8)", +"cef5ed69": "changeServiceAgent(address)", +"cef6a39a": "createMinerAuction()", +"cef6cfb2": "addToWhiteList(string,address)", +"cef75d9f": "myCardDividends()", +"cef7a4d0": "LogTemplateSet(address,address,address)", +"cef7e760": "initialCaps()", +"cef887b0": "storeBlockWithFee(bytes,int256)", +"cef8d343": "buyShare(uint256,bool)", +"cef94360": "updatefundingEndTime(uint256)", +"cef9601f": "timeTillNextSteal()", +"cef9ca6b": "ThreeDLPrivate()", +"cef9db6d": "TOKEN_SUPPLY_TOTAL()", +"cefa624b": "getPlayerAirdropGameData(address)", +"cefa80fc": "foundersTeam()", +"cefaba7f": "prc(uint256)", +"cefad386": "_accountOkayChecks(bytes32,uint64)", +"cefb09b6": "getBrokerInfo(uint256)", +"cefb3605": "vaultToWallet()", +"cefc0848": "minimumStakingTokenPercentage()", +"cefce1f2": "GameOver(string)", +"cefd2239": "unlocktoken(address,address,address)", +"cefddda9": "isGenesisValidator(address)", +"cefdfcf3": "testControlRetractNotRetractable()", +"cefe23dd": "HarjCoin()", +"cefeb6f7": "MeshPointManager(int256)", +"cefed526": "Atlantide(uint256,string,string)", +"ceff149b": "getRoundLuckyPot(uint256)", +"ceff6fe6": "cancelApproveForAddress(uint256)", +"ceffbaf1": "isReleaseApproved()", +"cf0023ec": "pvt_plmt_max_in_Wei()", +"cf007460": "nextClaim(address)", +"cf00c197": "stageOneEnd()", +"cf00cba0": "BlocksquareSeriesA()", +"cf00d4b9": "prizePoolPercent()", +"cf011b26": "excludedAddresses(address)", +"cf02ba9d": "optionsPerShare()", +"cf034b1d": "transferFromTrustedContract(address,uint256)", +"cf03e589": "Registered(address,string,address)", +"cf03f5f4": "activateMasterKey(address)", +"cf04dd7e": "DAPSTOKEN()", +"cf04fb94": "changeVerifier(address)", +"cf054fb2": "hardCapAmount()", +"cf0682bc": "warning()", +"cf06b141": "assertEq17(bytes17,bytes17,bytes32)", +"cf06b3ba": "KOIOSToken(string,string,uint256,uint256)", +"cf071005": "showLastPoolAddress(address)", +"cf07fbb6": "HUToken()", +"cf082176": "ETHERION()", +"cf083591": "listAllAttendants()", +"cf086765": "getPatronsCount()", +"cf094497": "betCount()", +"cf09c6dd": "lastBlock_f10Hash_uint256()", +"cf09e0d0": "createdAt()", +"cf09e6e1": "SetBigContract(address)", +"cf09e820": "getPropertyOwnerSalePrice(uint16)", +"cf0a07b2": "Choon(address,address,address)", +"cf0a50d3": "DopeToken()", +"cf0aed0e": "setMinimumBuyValue(uint256)", +"cf0cb613": "finalUnlockTransfer()", +"cf0dbc27": "getH2Bidder()", +"cf0e4076": "findAddress(address,address[])", +"cf0e4be5": "eggsInTimeSlot(uint8)", +"cf0e80fe": "getClaimedBalance(address)", +"cf0f02bd": "IntoQueue(address)", +"cf0f0593": "shl8(uint8,uint8)", +"cf0f2bf8": "transferPreSigned(address,uint256,uint256,uint256,bytes)", +"cf0f34c4": "setMaxDuration(uint256)", +"cf0f864e": "battleCardIdRange()", +"cf0fc7d5": "_fetchOrderByIdWithMerchant(string,address)", +"cf0fdacb": "getRarityBonusValue(uint256)", +"cf100287": "payToManager(uint256)", +"cf112453": "canUpdateNextGameInitalMinBetSize()", +"cf124ba3": "tokenSaleIsFinished()", +"cf1259d8": "badge_obj()", +"cf12789a": "percOf(uint256,uint256)", +"cf12b725": "releaseTokenPrivate()", +"cf12d99f": "xorexs()", +"cf12e870": "giveAccess(address)", +"cf134a06": "totalLicensePurchases()", +"cf136426": "IagonTestToken()", +"cf1405fe": "firstDay()", +"cf14b191": "recoverAddressOfSigner(address,address,uint256,uint8,bytes32,bytes32)", +"cf14cecc": "whitelistMaxTok(uint256,address)", +"cf1578dc": "getOwnerFunds()", +"cf157942": "endsigning()", +"cf158fe9": "scheduleTransaction(uint256,uint256,uint256)", +"cf15b87d": "IcoCompleted()", +"cf160cf2": "addModerator(address,string)", +"cf16b4a2": "_packPlayerData(address,uint256)", +"cf16cc83": "getRoundStart(uint256)", +"cf16e955": "buyOnBehalf(address)", +"cf187228": "_createChar(string,address,uint256)", +"cf187df1": "addFrozenBalances(address,uint256)", +"cf18811f": "getTrusteeIndex()", +"cf1893de": "TimeBasedContract()", +"cf191540": "retraitStandard_5()", +"cf19463d": "newPokemonMaster(address)", +"cf195101": "Zchain()", +"cf195e34": "issuedToDate()", +"cf1a6243": "MIOTCrowdsales(address,address)", +"cf1b037c": "registerCallback(address)", +"cf1b11e8": "tokensPerWeiPlusBonus(uint256)", +"cf1b3f08": "withdrawTop(uint256)", +"cf1b45c3": "User(address,address)", +"cf1c13ce": "setBonusRate()", +"cf1c316a": "addAuthorized(address)", +"cf1c9f52": "pauseDET()", +"cf1cd249": "secureSend(address)", +"cf1d21c0": "ETHER_ADDRESS()", +"cf1d567f": "cosmicDice()", +"cf1d8294": "setPresaleParticipantWhitelist(address[],bool)", +"cf1e3bcb": "projectReserve()", +"cf1eba78": "promoMap(bytes32)", +"cf1ec58d": "usdPerEthLog(uint256)", +"cf1edfea": "checkIfLockCanBeRemoved(address)", +"cf1ee6f9": "OVISRESERVED_TOKENS()", +"cf1eef50": "UpdateRateAgent(address)", +"cf1f335e": "sendLiquidityFund(address,uint256)", +"cf1f3dd7": "ledgerName()", +"cf200e9f": "getBalancesSeller(uint256)", +"cf202727": "myfirsttoken()", +"cf20ac40": "citadelBalance()", +"cf210e16": "restrictedAcct()", +"cf216207": "tokensToTransfer(address,address,address,uint256,bytes,bytes)", +"cf21977c": "mint(address,uint256,uint256,uint256,uint256,string)", +"cf225109": "getSellAgents(uint256)", +"cf22c803": "Election(bytes32[],uint256,uint256,uint256)", +"cf2317d5": "nBallots(bytes32)", +"cf235743": "whitelist(address[],uint256[])", +"cf23616e": "enableTimelock(uint256)", +"cf25e4e8": "getActiveBusinessesPerType(uint256)", +"cf26ac9b": "getLinkOwner(address)", +"cf27539e": "LBL(uint256,string,string)", +"cf278430": "split(address,bytes32,uint8,uint256)", +"cf279ff1": "inserirOuvidoriaNoCadastro(address,bytes32,uint8,bytes32,bytes32,int256)", +"cf27d016": "isInGracePeriod()", +"cf282878": "_createNode()", +"cf2887e5": "transferTo(address,address[],uint256)", +"cf28b18e": "p_update_tokensRewardsAllocated(uint256)", +"cf295a5c": "mintbuy(address,uint256)", +"cf299d04": "joinPre()", +"cf2a8612": "two(uint256)", +"cf2affca": "changeRequiredAdmin(uint256,bool,bytes)", +"cf2b16d9": "Game(address)", +"cf2b3b47": "createRoomQuick()", +"cf2b8c05": "getRealisation_effective()", +"cf2c52cb": "deposit(address,bytes)", +"cf2d03ae": "minJump()", +"cf2d31fb": "register(bytes32,string)", +"cf2d5d66": "TestSelfDropToken()", +"cf2d5eb4": "ICO_TRIGGER()", +"cf2d923f": "ADVISORS_AND_CONTRIBUTORS_ADDRESS()", +"cf2e011e": "link(string)", +"cf2e161c": "DOWN_winBets()", +"cf2e3efc": "GetBankAccountBalance()", +"cf2e80cc": "_setSentReveal(uint256,address,bool)", +"cf2f856e": "gracePeriodMinTran()", +"cf2f9a4a": "transferTokenContractOwnership(address,address)", +"cf2fb7ca": "setDIDTokenAddress(address)", +"cf3006a1": "setEthPriceInDollar(uint256)", +"cf309012": "locked()", +"cf310642": "Police_1()", +"cf314b6a": "verifyAccount(address,bool)", +"cf317b7e": "getSellerInfo(address)", +"cf31e9fe": "getOutputHash()", +"cf31ff86": "isAddressValid(address)", +"cf32b062": "deadlines()", +"cf32b957": "LockInventory()", +"cf33babc": "VotingStarted(uint256)", +"cf351c1d": "setFeeTokenAddress(address)", +"cf35238a": "googleSupply()", +"cf356f83": "parcelGzeWithBonusOnList()", +"cf357364": "getOrderType(bytes32)", +"cf35bdd0": "assets(uint256)", +"cf35f275": "transferFromStakedisbursementfund(address,uint256)", +"cf3630b4": "setNextStartTime(uint256)", +"cf36fe8e": "bobMakesEthPayment(bytes32,address,bytes20)", +"cf3743c6": "DuxToken()", +"cf38b609": "priceChibi()", +"cf397201": "addLockedTokeA(address,uint8,uint256)", +"cf39bff5": "accoutToSummonNum(address)", +"cf3b1967": "TOKEN_DECIMALS_UINT8()", +"cf3b70e6": "CreatedIAM(address,uint256)", +"cf3c6fd3": "distributeFounderTokens(address,uint256)", +"cf3ca0fa": "blockDotGasLimit()", +"cf3cb33f": "exchangeToken(address,uint256)", +"cf3d1e3c": "sellOffline(address,uint256)", +"cf3d29ea": "SNTMock(address)", +"cf3d3849": "getNumInvalidMarkets()", +"cf3d82e5": "setMaxStage1AllocationPerInvestor(uint256)", +"cf3dd39e": "existenceTotalSupplyTest(address)", +"cf3e172b": "getTokenInfo(address,bytes32)", +"cf3e194d": "calculateMultiplierAfterConversion(address,uint256)", +"cf3e52b8": "ValidateWorldSnapshotInternal(uint256)", +"cf3e52d9": "topWizard()", +"cf3e9519": "lrcUnlockPerMonth()", +"cf40bb58": "currentTimeIndex()", +"cf40f290": "EventLuckyNumberUpdated(uint256,uint256,uint8)", +"cf4186cb": "rejectMint(uint256,uint256)", +"cf41d6f8": "getPaid()", +"cf4228ea": "isSignedByAll()", +"cf4246a6": "ethereum2USDprice()", +"cf424b16": "releaseForSeed(address,uint256)", +"cf427d1b": "currentPenalty(address)", +"cf4315bb": "MINBET_perROLL()", +"cf43f4aa": "TrustedhealthToken()", +"cf4422e8": "getMilestoneDetails(bytes32)", +"cf44f5f7": "updateKeyMasks(uint256,uint256,uint256,uint256)", +"cf456865": "createCompany(bytes32,bytes32,uint256)", +"cf45f83b": "MADToken()", +"cf460fa5": "right16(uint256)", +"cf462616": "isVestingSet(address)", +"cf464997": "safeAssert(bool)", +"cf46827e": "getStakingMetrics(address,bytes32)", +"cf46bd24": "TransferContractOwnership(address,address)", +"cf46db5b": "isAllowed(uint8,address)", +"cf46dca7": "setProducer(address,bool)", +"cf47810c": "deleteAvatar(uint256)", +"cf478921": "addSpecialFeeTake(address,uint256,uint256)", +"cf47c326": "generateCryptsyToken()", +"cf488329": "BITCASH(string,string,uint8,uint256)", +"cf48d1a6": "setVox(address)", +"cf4a1612": "scheduleTransaction(uint256,address,bytes,uint256)", +"cf4baa4b": "kemnagToken()", +"cf4c3eac": "reservedWeis()", +"cf4cc8fb": "BitBallCoin()", +"cf4cea67": "dateBonus(uint256,uint256,uint256)", +"cf4d3a88": "PeopleSeedCapitalCoin()", +"cf4d6c0b": "AcceptsHyperDivs(address)", +"cf4e593a": "getPlayedGameJackpot()", +"cf4e964a": "cardStructs(uint8)", +"cf4e9ec3": "endCallRequestDate(address)", +"cf4fab1f": "PERFORMANCE_FEE_RATE()", +"cf504d48": "projectActive(uint256)", +"cf509b9d": "gracePeriodAmount()", +"cf51ee7a": "removeValueBonus(uint8)", +"cf51f582": "NucleusVisionAirDrop()", +"cf52a7b2": "whiteListAddress(address)", +"cf52ab0b": "New(address,uint256,uint256)", +"cf5303cf": "checker()", +"cf530bc3": "LOG_NewBet(address,uint256,uint256,bytes32)", +"cf53951d": "test_registrationInformationAccurate()", +"cf53d630": "getBetInfoByID(uint256)", +"cf54aaa0": "getDecimals(address)", +"cf561cea": "TestKToken()", +"cf564ab5": "getVehicleByAddress(address)", +"cf5713b6": "whatsMyName()", +"cf58802f": "getOverview(uint256,uint256)", +"cf58a045": "memberBuyToken()", +"cf58fbeb": "test_insert_findWithHintNextRemovedUpdateTail()", +"cf5ae516": "PauseICO()", +"cf5b5a77": "medalUnFreeze()", +"cf5b8018": "summSupporters()", +"cf5b90f0": "sendToken(address[])", +"cf5ba53f": "create(bytes)", +"cf5bd8e6": "EthBlockExplorer()", +"cf5c1b52": "setForSale(uint256,bool,uint256)", +"cf5c2ac7": "usdCentsBalance()", +"cf5c8b99": "CuratorRules(address,address[])", +"cf5cb132": "getRegisteredAssets()", +"cf5d4e4d": "BarterCoin()", +"cf5d57db": "changeReward(uint256)", +"cf5e36df": "getWeiContributed(uint16,address)", +"cf5f2201": "unMinedPop()", +"cf5f87d0": "updateConsumable(uint256,uint256,uint8)", +"cf6036fd": "length(bytes1)", +"cf62277c": "ThePiContract()", +"cf62d4e3": "changeMaxBetDoubleDice(uint256)", +"cf6304d4": "endPreTokensale()", +"cf6346cb": "presaleMinValue()", +"cf63bb83": "neymarHasMinted(uint256)", +"cf63edea": "tokenIdExist(uint256)", +"cf64c42f": "endCrowdsalePhase1Date()", +"cf64da7f": "HOVERCRAFT_TYPE()", +"cf652d1d": "setDefaultBoxNumber(uint256)", +"cf654886": "getHeroLevel(uint256)", +"cf65952c": "deactivateDevice(address)", +"cf662b5e": "JGCoinOld()", +"cf665443": "nextMint()", +"cf6661fb": "getNativeAsset()", +"cf67805c": "MumsTheWord()", +"cf682b3c": "VMVToken()", +"cf69318a": "left60(uint256)", +"cf693418": "_teamJackpot(uint256)", +"cf69443c": "getCurrentUserTotalReward()", +"cf69df28": "getDataRequestLength()", +"cf6a8722": "removeBytes32(bytes32)", +"cf6accab": "sendCharityPrizeToCharityAddress(uint256)", +"cf6ad876": "cancelAgreement()", +"cf6b1081": "proxyGetRefund()", +"cf6b3822": "WatchCollectedFeesInSzabo()", +"cf6b70cf": "many_payments()", +"cf6b8bbf": "XYT()", +"cf6bd8b9": "view62()", +"cf6d06a1": "transferFree(address,uint256)", +"cf6e4488": "custodianChangeReqs(bytes32)", +"cf6efb49": "getCdRate()", +"cf6f3b59": "userAdd(uint256)", +"cf6f3fe4": "distance_driven()", +"cf6fbb9d": "Mint(address,uint256,uint256,bytes32)", +"cf6fbeea": "takeAway(address,address)", +"cf6fcbb0": "calculateAveragePixelPrice(uint256,uint256)", +"cf7018d4": "setAdURI(uint256,string)", +"cf70ba36": "tokenZNT()", +"cf710b34": "showTeam()", +"cf710b73": "test_setMaxSize_update()", +"cf72085f": "deliverTokensBatch(address[],uint256[])", +"cf7209c5": "KyberHandler(address)", +"cf724096": "transferEthers(address,address,uint256)", +"cf72b511": "get_refund_deposit_addr_amount(uint256)", +"cf7315c6": "retract(bytes20)", +"cf731bd7": "Temgean()", +"cf73a1bc": "managerAddress()", +"cf756935": "determineLuckyVoters()", +"cf763d1c": "periodLimit()", +"cf76a3b9": "TokenState(uint256,uint8)", +"cf76cb7d": "simInstallments(bytes)", +"cf76ebf9": "carsGifted()", +"cf772c7d": "victims(uint16)", +"cf7730f1": "reserveFundSupply()", +"cf775255": "configureDomainFor(string,uint256,uint256,address,address)", +"cf77c8db": "setAffiliateContract(address,address)", +"cf78044d": "setMaxIndex(uint256)", +"cf783d8a": "allAccounts()", +"cf78a450": "unlockBBK(uint256)", +"cf78cf0d": "ContractCreated(address)", +"cf7956ab": "SIEToken(address,address)", +"cf79d8b4": "completeRemainingTokens()", +"cf7a8965": "steal()", +"cf7aebea": "transferAntique(address,bytes32)", +"cf7b38a2": "resumeCollectToken()", +"cf7b8c5f": "player_count()", +"cf7bb192": "canStakeExisting(address,bool,uint256,uint256,uint256,uint256,bytes8,uint256)", +"cf7c2985": "setAuctionPriceLimit(uint256)", +"cf7c2b31": "paymentOf(address)", +"cf7d0304": "MintableLazyCoderToken()", +"cf7d23a3": "Withdrawn(uint256,address,uint256)", +"cf7dcc15": "distributeEth(uint256,uint256)", +"cf7e01ba": "ICO1Period()", +"cf7e06cb": "setCapForParticipants(address[],uint256[])", +"cf7e69f8": "changeCooldownIndex(uint40,uint16)", +"cf7e9242": "getAgreements()", +"cf7efb4c": "SketchMarket()", +"cf7f12ea": "getBidCountForSketchesWithHolder(address)", +"cf808000": "iWantXKeys(uint256)", +"cf81377d": "eosDASH(uint256,uint256)", +"cf813e3f": "getLockTime(uint8)", +"cf81978b": "recipientMIT(address)", +"cf81f24d": "iWannaLiveForever()", +"cf820461": "txFee()", +"cf82601b": "removeInstitutionAsset(string,string)", +"cf82731f": "getPic(uint256)", +"cf832ce2": "ownerRefundPlayer(bytes32,address,uint256,uint256)", +"cf837fad": "contractLock()", +"cf8407c9": "registerFund()", +"cf854969": "rate1()", +"cf866d6f": "LastProposalCanDiscard()", +"cf86a95a": "transferMintership(address)", +"cf876b72": "setAccountUrl(string)", +"cf879e83": "isRevoke(address,address)", +"cf881ad9": "fUseAmount()", +"cf88eebe": "enableBuyBackMode(address)", +"cf8951d1": "CollateralTransfered(uint256)", +"cf89744f": "MaxBetUpdate(uint256)", +"cf89956e": "Base(uint256,string,uint8,string)", +"cf8a24de": "emulatePurchase(address,address,uint256,uint256,uint256)", +"cf8bc918": "getCrowdsalesLength()", +"cf8c9cc8": "submitTransaction(address,address,uint256,uint256,bytes)", +"cf8d652c": "tokenCreationRate()", +"cf8d8ca0": "walletName()", +"cf8e9996": "MuellerFiredby51()", +"cf8eb597": "AccountIsFrozen(address)", +"cf8eeb7e": "subBalance(address,uint256)", +"cf8f4d4f": "getParticipantRegistry()", +"cf8f8f12": "finishICOInternal()", +"cf8fee11": "getBasicRate(address,bool)", +"cf904e7d": "delCertAdmin(address)", +"cf9057f7": "findNextYear(uint256,bytes4)", +"cf905858": "hasIdentity(address,address)", +"cf90bfc9": "DatPayToken()", +"cf90e741": "Presale(uint256,uint256,address)", +"cf910b37": "_getRandom(bytes32[4],uint8)", +"cf913ae7": "setKoikeToken(uint256,address)", +"cf914a87": "ownerSetOverride(address,bool)", +"cf91e331": "TransferGenesis(address)", +"cf92e19b": "maxPlayableGameId()", +"cf934d67": "newIndex(bytes32,uint256)", +"cf934fb8": "sendToBeneficiaryContract()", +"cf94e395": "set_hosp(uint256,string)", +"cf951c9f": "initAsset(uint256,string,string,string)", +"cf9530d0": "totalSupplyOf(address)", +"cf957ce0": "ROSCA(uint16,uint128,uint256,address[],uint16)", +"cf9676c1": "setMintRequestUintMap(uint256,int256,string,uint256)", +"cf96ce03": "setHouseEdgePercent(uint256)", +"cf9779cd": "accountFor(address,bool)", +"cf984f16": "testFailRestartEnforceRevisions()", +"cf98e120": "calculateStagePrice()", +"cf991259": "BRANDS_ADDR()", +"cf99a4d9": "buybackTypeTwo()", +"cf99cd2e": "iterateThroughSwarm(address,uint256)", +"cf99d935": "finalizeIfNecessary()", +"cf9a60d4": "ETH_USD_EXCHANGE_RATE_IN_CENTS()", +"cf9ac727": "logPrice(address,address,uint256)", +"cf9ac928": "bbd36484()", +"cf9b62d9": "OwnerOf(uint256)", +"cf9b9e0a": "FDCToken()", +"cf9d33d8": "GeniusInvest()", +"cf9df5eb": "insert(address,address,address,address,uint256,address,bytes32,uint256)", +"cf9f3db2": "PresaleTimeRangeChanged(address,uint256,uint256)", +"cf9f5ef6": "MANW()", +"cf9faf1d": "ownerSetRate(uint256)", +"cfa0136f": "setPresaleEndTime(uint256)", +"cfa01baf": "prepareForEarlyFinalization()", +"cfa059ee": "getIssuanceIds(bool,bool,bool,bool,uint256,uint256)", +"cfa06700": "_emitAccessBlocked(address,bytes32)", +"cfa084b0": "setTransferOwnership(address)", +"cfa0c480": "addTx(address,uint256,bytes)", +"cfa12510": "returnHash(address[2],uint256[7])", +"cfa24ee3": "setFighterCoreAddress(address)", +"cfa3bfce": "_validateLockupStages()", +"cfa3c132": "parentOf(uint256)", +"cfa446ec": "Standard_2()", +"cfa46990": "getSellUnicornFullPrice(uint256)", +"cfa4a6a6": "getPools(bytes32)", +"cfa4f3e8": "setRelease(uint256)", +"cfa517df": "getOwnerByAnimalId(uint256)", +"cfa51e01": "getAllTokenSold()", +"cfa5cfd3": "balanceInSpecificTier(uint256)", +"cfa5d53b": "blocktubeTransfer(address,uint256)", +"cfa5df4b": "swapAbleToken()", +"cfa5f02a": "exchangeETH()", +"cfa675cc": "_revealBid(bytes32,address,uint256,address,address,address,uint256,uint256)", +"cfa7074b": "BuyRateChanged(uint256,uint256)", +"cfa75d43": "developer_add_string_B(string)", +"cfa83079": "minHpDeducted()", +"cfa86845": "RedeemingTimeLimit()", +"cfa9fa85": "percentageHumanityFund()", +"cfaa234c": "_isNotMixing(uint256,uint256)", +"cfaa759d": "privateIcoStartTime()", +"cfaaa266": "TransferOwnership(address)", +"cfaaff4c": "ADZbuzzCommunityToken()", +"cfab3056": "guesses(int256)", +"cfab472f": "isUserEnabledForContract(address,address)", +"cfab6554": "sumElements(uint16[])", +"cfab8862": "pfcController()", +"cfabe67b": "acceptVestingTrusteeOwnership()", +"cfac2280": "uniqueJingles(bytes32)", +"cfad5277": "totalAddresses()", +"cfae2c65": "dispenseTokensToInvestorAddressesByValue(address[],uint256[])", +"cfae3217": "greet()", +"cfae52e1": "createFirstDay()", +"cfaed1e2": "minAllowedBetInEth()", +"cfaf7315": "BuyEggs()", +"cfaf8a33": "sellTile(uint256)", +"cfb009cf": "Obredis()", +"cfb079d3": "DX()", +"cfb27084": "switchAirDrop(bool)", +"cfb3647b": "tokenMinter()", +"cfb3a493": "getMyBounty(uint256)", +"cfb3b886": "jack_nonce()", +"cfb45e3c": "_cancelOperation(bytes32,uint256)", +"cfb51928": "stringToBytes32(string)", +"cfb5a5f8": "getShare(uint256)", +"cfb64dfc": "addCustomerFromProviderAdmin(address)", +"cfb6e9af": "LogBet(address,uint256,uint256)", +"cfb75c92": "slavenAdress()", +"cfb7b9e9": "PROM()", +"cfb9147d": "exploreFastenETHFee()", +"cfb9e26f": "getStateOfPlan()", +"cfba0279": "hasSkill(address,uint256,uint256,uint256)", +"cfba24ac": "isSenderBiometricLocked()", +"cfba4fe0": "findBalance(address)", +"cfba99dc": "getQuoteAsset()", +"cfbb2047": "currentSmartSpeedNumber()", +"cfbb4b24": "Invent()", +"cfbb7d36": "teamWithdraw()", +"cfbb9f37": "DOW_THU()", +"cfbbbd9e": "PASS()", +"cfbbd902": "calcWinNumbers(string)", +"cfbbda3d": "seekApproval()", +"cfbd3bbb": "GetCarrot(address)", +"cfbd4885": "revokeMinter(address)", +"cfbe2cb3": "walletDeposit(address,uint256,uint256)", +"cfbed755": "getCard(uint64)", +"cfbef67d": "extract(bytes,uint256)", +"cfbf92a9": "getNodeStake(address)", +"cfbf9a36": "getBetRecord(uint256)", +"cfc05b56": "setTokensSoldGoal(uint256)", +"cfc0cc34": "getStrategy(uint256)", +"cfc19710": "closeMtr()", +"cfc220b6": "SpermLabs()", +"cfc2a93e": "dividendRoundsBeforeFoundersStakeUnlock()", +"cfc2aad2": "generateBonusForGene(uint256)", +"cfc41c91": "reb()", +"cfc450af": "maxInvestmentInWei()", +"cfc45610": "Makindo()", +"cfc4af05": "blt()", +"cfc4af55": "tau()", +"cfc4d0ec": "getOrderHash(address[5],uint256[6])", +"cfc54848": "sendEth(uint256)", +"cfc5a969": "bytesToUint(bytes32)", +"cfc5e7c8": "getSellCount(address)", +"cfc72007": "selfdestruct(address)", +"cfc7e2da": "getMinAmount()", +"cfc9cb7f": "ForestingToken(address)", +"cfca375c": "NooCrowdsale()", +"cfcb2b7e": "createController(address,address,address,uint256,uint256,uint256,uint256,uint256)", +"cfcb69d1": "TelegramTON()", +"cfcba2f8": "firstRefundRoundFinishTimestamp()", +"cfcc09a9": "simpleICO(string,string,uint8,address,uint256[],uint256[],int256)", +"cfcc57ad": "maxFundsThatCanBeWithdrawnByOwners()", +"cfcc7720": "rechargeRobot(uint256)", +"cfcccb32": "escrowList(address)", +"cfcd84a9": "collectibleIndexToPrice(uint256)", +"cfcd8c2d": "init(address,uint256,uint256,uint256,uint256,uint256,uint256,bool,address,bool)", +"cfcdde19": "PRICE_PREBUY_BONUS()", +"cfd00530": "isContractSignedBySigner(string,address)", +"cfd0a970": "TierClassicDividendAddress(address)", +"cfd129f8": "stageSoftcap(uint8)", +"cfd28966": "getMigrateOutDestinationValue()", +"cfd2eb49": "StoreComission(address,uint256)", +"cfd32aa0": "removeFunder()", +"cfd32ef7": "isMember(address,bytes32)", +"cfd3c17d": "currentLuckyStoneNumber()", +"cfd447d7": "startSale(uint256,bool)", +"cfd4ca6b": "contract_md5()", +"cfd4edcf": "ProofOf()", +"cfd550a3": "ICO_ENABLERS_CAP()", +"cfd56a13": "_sell(address,uint256,uint256)", +"cfd5cb77": "userAttackMonsterCDSeconds()", +"cfd65fdb": "assertEq19(bytes19,bytes19)", +"cfd6eea2": "QDCoin()", +"cfd7ab91": "STARTTIME()", +"cfd7be04": "backNewHopeOwner()", +"cfd7f1fb": "_chkBuyerLmtsAndFinl(address,uint256,uint256)", +"cfd8a175": "betPrice()", +"cfd8d6c0": "setProvider(address)", +"cfd938df": "Channel(string)", +"cfd94b01": "votersLen()", +"cfd9e0ea": "getStateForTime(uint256)", +"cfda7175": "getArbiterFeeAmount(uint256,uint8,uint256,address)", +"cfdac910": "getSketchesWithAuthor(address)", +"cfdacb58": "SetCryptoPrice(uint256,uint256)", +"cfdafde4": "saleIsFinished()", +"cfdb2eb7": "freeClaimAllowanceOf(address)", +"cfdb35ed": "setLKCExchangeRate(uint256)", +"cfdba320": "getRemainLockedOf(address)", +"cfdbf254": "MAX_BATCH_SIZE()", +"cfdd4520": "showCurrentBidValue()", +"cfdd7557": "CountOfAlastayaToken()", +"cfdd7e8a": "createFirstCommonsForum()", +"cfdf35b6": "removeLog(string)", +"cfe01e23": "anyAuditRequestMatchesPrice(uint256)", +"cfe0a5dc": "tokenKoef()", +"cfe0d487": "backup_finishIcoVars()", +"cfe0eeb7": "startSale(uint32,uint64,uint64)", +"cfe186b2": "finishGame(uint256)", +"cfe1887b": "delListReq(string,uint256,uint256)", +"cfe2b37a": "setIntF1ArrBoolF2AddressF1(int256,bool[],address)", +"cfe2f4e2": "Nicks()", +"cfe30939": "houseEarnings()", +"cfe3b8fb": "sTks(address,uint256)", +"cfe3d16d": "_register(address,address)", +"cfe3e683": "GWBCoin()", +"cfe4fb8e": "VECTORZILLA_RESERVE_VZT()", +"cfe52bdd": "sendFunds(address)", +"cfe5344a": "updateNovaAddress(address)", +"cfe5655c": "createDataControl()", +"cfe60c87": "LookRevToken()", +"cfe643ac": "getRightAndRoles()", +"cfe67587": "getWeeklySellVolume()", +"cfe6f220": "CertificateAddresses(bytes32)", +"cfe76488": "whitelistApplication(uint256,bytes32)", +"cfe7b770": "getBetInfo()", +"cfe7e7a0": "createLamboSale(uint256,uint256)", +"cfe7f3c0": "AddForm45(uint256,uint256,uint256,uint256)", +"cfe8c535": "giveAnimals(uint8,address)", +"cfe9a7b8": "getPackageName(uint256)", +"cfea3bb6": "swapTokenInfo(address)", +"cfea751f": "getIsAllTransfersLocked()", +"cfeaa5ea": "setBonusList(address)", +"cfeaaca1": "newCampaign(string,uint256,uint256,address)", +"cfeb93a8": "delABaddress(uint256,address,address)", +"cfeb9a97": "setSubFreezingTime(uint64)", +"cfeb9ec0": "BSmartValueCirculateAssets()", +"cfebb88b": "recallVoteToFreezeFund()", +"cfebc813": "changeExplain(string)", +"cfebf24d": "optionOf(address)", +"cfec22f8": "minSum()", +"cfec6ca3": "calculateProfitGameType1(uint256,uint256)", +"cfec8d83": "GetUserPELOAmount(address)", +"cfec934a": "runCrowdsale()", +"cfecd73d": "EtherIncPrivate()", +"cfed9199": "timePassed(uint256)", +"cfedc04a": "neverdieToken()", +"cfee88db": "closeClaims()", +"cfefaa8b": "Executed(string,uint256)", +"cfefb3d5": "payout(bytes32)", +"cfefcfb0": "VotedForProposal(uint256,address)", +"cfefe48b": "transferableTokensNow(address)", +"cfefe5a2": "isContribPeriodRunning()", +"cfefeb60": "airDropTime()", +"cff068a3": "random(uint256,uint256,address,uint8)", +"cff07771": "getEvaluationCount()", +"cff0ab96": "params()", +"cff12797": "setIcoPhase3(uint256,uint256)", +"cff13efb": "newCar(string,bytes17)", +"cff1b6ef": "updateAdminFee(uint256)", +"cff29dfd": "bidders(uint256)", +"cff2fa42": "_returnFee(address,uint256)", +"cff382ae": "AICrypto()", +"cff3d4d8": "stage1()", +"cff410b4": "Exit()", +"cff43a03": "verifyNewOrganizer(bool)", +"cff4d6cd": "payoutTotal()", +"cff5b28e": "FLUX()", +"cff61fb6": "batchExchange(address[])", +"cff6bc21": "allSigners(uint256)", +"cff72e67": "changeDevelopersRecipient(address)", +"cff76d67": "totalEthBankrollRecieved()", +"cff82e22": "getTicketCount(address)", +"cff9293a": "vote(uint32,uint32)", +"cff941fc": "Configured(address,address)", +"cffa4346": "DIETCoin()", +"cffc9997": "SetBuildingData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"cffdc976": "WithdrawOwnerFunds(uint256)", +"cffe02cf": "setCrowdsaleRate(uint256)", +"cffe764c": "Insure()", +"cffee328": "successfulDeals()", +"cfff25bb": "getNumReserves()", +"cfff63ca": "assignMediator(address)", +"cfff8974": "mintToInfluencer(address,uint256,string)", +"cfffa030": "lanch_atak()", +"d0005aa4": "salesStart()", +"d0008a6d": "addNewMember(address,uint256)", +"d000a404": "PT(uint256,string,string)", +"d001425a": "bank2()", +"d0015500": "ownerSecondary()", +"d002462b": "setDeploymentFee(uint256)", +"d002a41c": "getUnReportedMatches()", +"d00408b7": "StandardToken(address)", +"d0044f9a": "_getLuckyList(uint256,uint8)", +"d0045341": "totalMintAmount()", +"d0047acf": "mint(address,uint256,uint32)", +"d004f0f7": "swap(address,uint256)", +"d004f38b": "setRates(uint256,uint256,uint256)", +"d0064c00": "maxDebt()", +"d0068f80": "getClient(uint256)", +"d0072e59": "forceReturn(address)", +"d007c644": "payInterest(address)", +"d007ff4b": "showJackpotBalance()", +"d0089141": "ovedclaimBountyairdrop(address,uint256)", +"d008d7a2": "BosToken()", +"d00910a3": "yearlyTeamTokensPaid(uint256)", +"d0095cc6": "genNumber()", +"d00a9058": "getOwnTokens()", +"d00cce41": "roleExists(string)", +"d00d20f4": "getTokensCrowdsaled()", +"d00eef6a": "TokenGranted(address,uint256,string)", +"d00ef880": "setShareTokenAddress(address,address)", +"d01296d9": "addmember(uint256,address)", +"d0130009": "Subtraction(uint256,uint256)", +"d013a182": "getServerBuildingWeapon(uint256,uint8,uint8)", +"d0142c47": "ImperialCreditToken()", +"d014c01f": "enter(address)", +"d014d667": "XCDT()", +"d0158b87": "fetchCancelledOrdersForMerchantByAdmin(address)", +"d015d86f": "getRoundStats()", +"d015f6dd": "NorthPoleAddress()", +"d01678f0": "raiseDay2()", +"d0169c1e": "lockAsset(bytes32)", +"d0169f4c": "start_POSTICO()", +"d016ec40": "vipBrokerNum()", +"d0174145": "create(address,address,uint256,uint256,uint256,uint256)", +"d017c2b4": "returnTokensToWallet()", +"d017cdcf": "acquireFame(uint256)", +"d017e20d": "processing(address,uint256,uint256,uint256)", +"d017f49b": "JustOneToken2()", +"d01860d0": "isFinishedSuccessfully()", +"d018a00f": "redeemBeer(bytes32)", +"d018db3e": "attack(address)", +"d0198c33": "getFunctionIdentifier(string)", +"d019d2c4": "MRT()", +"d01a69c9": "totalBeneficiaries()", +"d01a9453": "BitAirToken(address,string,string,uint256,uint256)", +"d01ab2e6": "_cancelOrder(address,address,uint256,address,uint256,uint256,uint256)", +"d01ab31a": "ICOStart()", +"d01b555d": "setSalePause(bool)", +"d01ba5f0": "increaseShardBalance(address,uint256)", +"d01bbdc9": "setOracleCallbackGasLimit(uint256)", +"d01c0904": "FujintoToken(uint256,string,uint8,string)", +"d01d0175": "StorageConsumer(address)", +"d01d6b86": "amountOfRegisters()", +"d01e2df9": "testContains()", +"d01ec886": "importPresaleContribution(address)", +"d01f4c9f": "hoursSinceTimestamp(uint256)", +"d01f4ffe": "stopSecondSale()", +"d01f63f5": "getWhitelist()", +"d02041f3": "advisorsPeriodAmount()", +"d02042a3": "relief()", +"d020ae40": "gameTotalGen()", +"d020dc3b": "rejectMessage(uint256,string)", +"d02143ed": "getRefToLength(address,address)", +"d0216dce": "XXXXXXXX07(address)", +"d021d8da": "Coinbase()", +"d0220b1c": "setCreateChampFee(uint256)", +"d0225e9e": "MAX_LRC_DEPOSIT_PER_ADDRESS()", +"d0237ab8": "EtherLiteSupply()", +"d023d2bd": "getGladiatorChestPrice()", +"d023d32c": "setEndAfterSecond(uint256)", +"d024768f": "computePropertyHash(string,string)", +"d024cd02": "startAuctionDirect(uint256,uint256,uint256,uint64,address)", +"d02528e6": "GetGameIndexesToProcess()", +"d02721cb": "withdrawProvider()", +"d02764f3": "releasesCount()", +"d0280037": "buyin(uint8,bytes32,bytes32)", +"d0286ab2": "setEmissionTime(uint256)", +"d028754b": "Withdraw_1()", +"d028a625": "deathData_v11()", +"d028c246": "Compaq()", +"d028f571": "getTokenForTeam(address)", +"d0297bc6": "changeMaximumContribution(uint256)", +"d02982cf": "isMember()", +"d029a530": "buyUnicornWithCandy(uint256)", +"d02a4f84": "bcn()", +"d02a6db7": "TokenLongExercised(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"d02a9889": "getDateOfFirstPayment()", +"d02b1653": "enablePrivateFund()", +"d02b97aa": "withdrawPromoter()", +"d02bf162": "spinTheWheel()", +"d02bf828": "lotteryTokensWallet()", +"d02c438a": "enableTokenSupport(bool)", +"d02c8cdf": "cancelMatch(uint256)", +"d02cc69f": "playWar(uint256)", +"d02d08b2": "hasCrowdsaleFinished()", +"d02d1382": "getPlayerCard(uint8)", +"d02d3892": "ApolloSeptemBaseCrowdsale(address,address)", +"d02d4554": "createUser(address,address)", +"d02d518d": "setArtEvt(string,string)", +"d02dade4": "getProviderCounter()", +"d02ddc12": "insert(bytes1,bytes1)", +"d02e140a": "finalizePrivatesale()", +"d02e5cfb": "mtcDailySpent()", +"d02e8f70": "MONUMENT_CITY_FEE()", +"d02ea39e": "DuckToken()", +"d02ecbb5": "ObitanChainxToken()", +"d02f5463": "pillarTokenFactory()", +"d02f7351": "seizeAllowed(address,address,address,address,uint256)", +"d02f8b98": "getApplications(address,bytes32,address)", +"d02fcad9": "wdiv(uint128,uint128)", +"d0302051": "rewardPercent()", +"d031370b": "reserveTokens(uint256)", +"d0315658": "getShareDistributionWithTimestamp(bytes)", +"d031babf": "LikeCrowdsale(address,uint256,uint256,uint256)", +"d031d8c4": "_transferLand(uint256,uint256,address)", +"d032ae76": "doAirDrop(address[])", +"d033c456": "addAddress(address,string)", +"d033d277": "OwnerNamed()", +"d033e6ee": "preAllocate(address,uint256,uint256)", +"d033f913": "getRoundSeedHash(uint32)", +"d034536e": "logFileClosing(string,uint256,string,string)", +"d0356fa8": "createVestingGrants()", +"d035bed4": "validContract(address,uint32)", +"d035e45f": "token_escape(address)", +"d0360e59": "drainContract()", +"d036261f": "amountBonuses(uint256)", +"d036bce2": "_calculateTokens(uint256)", +"d0376283": "onlyApprovedOrOwnerOfToken(uint256,address,bool)", +"d0378d07": "decreaseReserve(uint256,uint256)", +"d038906a": "FloraFicToken()", +"d0399bb8": "endGame(uint256)", +"d03b41a9": "bountyBalance()", +"d03bf119": "RANGESTART_11()", +"d03c8e34": "addAngel(address)", +"d03cff97": "devMiningRewardPerETHBlock()", +"d03d5231": "raffleDraw()", +"d03d9604": "maskIt(address,uint256)", +"d03e1021": "ORACLIZE_GASPRICE_GWEY()", +"d03e3059": "someMethod3(uint256,uint256,uint256)", +"d03e6817": "Volkstest()", +"d03e9bcc": "LogReceiveFunds(address,uint8,uint256)", +"d03e9fff": "plusTourFreezingTime(uint256)", +"d03ffefb": "createDeposit()", +"d04148d6": "m_account()", +"d04206f3": "CROSS_RESERVE()", +"d042a795": "multiSendA(uint256,uint256)", +"d042ce2c": "currentStageTokensBoughtByAddress()", +"d04301f2": "Annexe_SO_DIVA_SAS_5()", +"d0431cf5": "_openBox(uint256)", +"d0435cb0": "MonsterTokenCrowdsale(uint256,address,address,uint256,uint256)", +"d043d028": "toBytes4(bytes,bytes,uint256)", +"d045e1ff": "_inverse()", +"d046065e": "addBet(uint256,uint256,address,uint256)", +"d0471ee1": "Leverages(address[])", +"d04737bd": "Yuzhuralzoloto_2()", +"d0479abc": "burnUnsoldTokens(uint256)", +"d047a0d0": "getEmergencyTransferSigner(address,uint256)", +"d04807e9": "Heronium()", +"d0481f82": "hasLicenseTerms(bytes32,bytes32)", +"d048bc87": "inAngelPeriod()", +"d048db37": "getOfferCount()", +"d04a419b": "getDegree(bytes32)", +"d04a46b0": "sendFutureExpanstionBalance(address,uint256)", +"d04b019e": "getWalletResourceBalance(address)", +"d04b5f82": "test01Token()", +"d04bfc9c": "buyer_pay()", +"d04c9115": "getLoyaltyPoints(address)", +"d04cb43f": "withdraw_all_token(address,address)", +"d04d26fe": "updateStrength(uint256,uint8)", +"d04d2ca3": "BlacklistParticipant(address)", +"d04d8667": "authorized_recordPlatformFee()", +"d04dbdea": "Testtoken4()", +"d04e5586": "MEAManager()", +"d04f0535": "PisticciCash()", +"d04fe107": "getActiveAds()", +"d050498e": "assertEq24(bytes24,bytes24,bytes32)", +"d050557d": "bulkRegisterPoA(bytes32,bytes32,bytes,uint256)", +"d05144c8": "getMakeCount()", +"d0516650": "frozen(address)", +"d0516b82": "maxPresaleAmount()", +"d051dfd3": "prizes(uint256,address)", +"d052fbf6": "getHistory(string,uint256)", +"d05391d2": "admin_transferFrom(address,address,uint256)", +"d05407d4": "SetStepFunctionWrapper(address,address)", +"d054261e": "_generateRandomHash(string)", +"d05461a6": "mintForReportingParticipant(int256,address,uint256)", +"d0549602": "scheduleTransaction(address,uint256,uint256,uint256)", +"d054cd87": "badBoardSent(bytes10,uint256,uint8,bytes32,bytes32,bytes10,uint256,uint8,bytes32,bytes32)", +"d0569bc8": "getWinResults(uint256)", +"d056cc69": "stateCode(uint256)", +"d0578df9": "SMGC()", +"d0587032": "tablet_length()", +"d0590bad": "generateMessageToSign(address,uint256)", +"d05b7ca4": "uintToChar(uint8,uint256)", +"d05ba4da": "addPokemonToSellingList(address,uint256)", +"d05bb517": "withdrawFeeToken(uint256)", +"d05c78da": "safeMul(uint256,uint256)", +"d05c9342": "_getATxToken()", +"d05c9ad6": "setNumRewardsAvailableForAddress(uint256,address,address)", +"d05cb545": "registry(address,uint256)", +"d05d996f": "TXDELAY()", +"d05ec6c5": "getBonus4(uint256)", +"d05ee727": "teamAccount()", +"d05efd40": "directorA()", +"d0600560": "AD()", +"d0607948": "getteamnum(address)", +"d060a2a5": "doSmallDrop(uint256,uint256,uint256,uint256)", +"d0610ac9": "interpolate(uint256,uint256,uint256,uint256,uint256)", +"d0617f2f": "OMICrowdsale(uint256,address,address,address)", +"d062c7ab": "CleanBankerCandidate(uint8)", +"d06301d3": "__resolve(uint256)", +"d063f55f": "toLittleEndian(uint64)", +"d06426d5": "convertUsdToEther(uint256)", +"d0647f30": "_createDebt(bytes,bytes,uint256)", +"d06502b9": "batchTransferAgileToken(address[],uint256[],address,address)", +"d06544d0": "getCoinAddress(string)", +"d0658850": "ListingDB(uint64,uint64,address)", +"d066c841": "GenesisBuyPriceHistory(address,uint256)", +"d06760da": "isPartOfOrg()", +"d0676647": "ProposalClosed(uint256,uint256,uint256,uint256,bool,uint256)", +"d06798f2": "fourweeks()", +"d0679d34": "send(address,uint256)", +"d0683428": "executeRulingA(uint256)", +"d0692775": "gamesLeft(address)", +"d06980f1": "LogHodlClaimed(address,address,uint256)", +"d06982b2": "setDemurrageAmount(uint256)", +"d0699c98": "calcFees(uint256,uint256,uint256)", +"d06a0f5b": "setDynamicCeilingAddress(address)", +"d06a57b0": "pauseAllTokens(bool,string)", +"d06a89a4": "maxLength()", +"d06b3ea0": "whackingPool()", +"d06b44a6": "YKCToken(uint256,string,string,uint256)", +"d06b6f7e": "setMinTokensToSale(uint256)", +"d06ba559": "WrestleCoin()", +"d06c54fb": "acceptNextOwner()", +"d06c7b5b": "signalToken()", +"d06c91e4": "multisigEther()", +"d06ca26c": "managedWallets()", +"d06cdc73": "LuckyNumberService()", +"d06d4612": "jak()", +"d06f887b": "destroyMyToken(uint256)", +"d06f9734": "setTreasurer(address,bool)", +"d0707c61": "PerformingDrop(uint256)", +"d0708e31": "DocumentCertoChainContract(string,string,string,string)", +"d071f7b1": "recover(bytes32)", +"d073c531": "IMOSToken()", +"d073ca3d": "SUCCESS_FLAG()", +"d074443f": "DeathFactor_i()", +"d0747a9c": "getGoldmintFeeAccount()", +"d074a38d": "biddingTime()", +"d074de8c": "Testico()", +"d074f215": "PHASE_1_PRICE()", +"d075c11c": "viewNoncsallocations(address)", +"d0774f74": "GENSIS_TOTAL_COUNT()", +"d077814b": "divBase()", +"d0785dd7": "getNumberOfPlayersInCurrentGame()", +"d07866d2": "sizeOf(uint256)", +"d0799bee": "setRole(string,string)", +"d07a8bd7": "RisingToken()", +"d07ac4c4": "oraclize_query(uint256,string,bytes[4],uint256)", +"d07adab3": "getOutAmount()", +"d07bff0c": "getVoter(uint256)", +"d07c53b6": "thinkMode()", +"d07e7d7c": "setTTCTokenAddress(address)", +"d07e9f90": "getJobsCount()", +"d07f29e5": "addFounderAccounts(address,uint256)", +"d07f2ff6": "GreenWorldFarm()", +"d07f3a8f": "RobBanker(uint8,uint256,uint256,uint8)", +"d07f8181": "decreasePaymentsBalance(address,uint256)", +"d07fdfb0": "October12_2017()", +"d081b681": "vows()", +"d081b9f5": "networkState()", +"d081f2b8": "BOUNTY()", +"d0821b0e": "bet(uint8)", +"d08275f1": "WolframAlpha()", +"d08279b0": "unpauseTournament()", +"d082ea8c": "setExchangeAddress(address)", +"d083955c": "adjustMintRates()", +"d084f670": "getLocked(bytes16)", +"d085835a": "timeLock()", +"d085b82f": "TIMECOIN(address)", +"d085c8b8": "StartDistribution()", +"d085e66e": "GetPart(bytes32,uint256)", +"d0863580": "blocksRemaining()", +"d0868223": "returnATXChanges()", +"d086a201": "main_ico(address,uint256)", +"d087d288": "getNonce()", +"d088070a": "checkWhitelist(address,uint256)", +"d088f50d": "getNumeroCeldas()", +"d0894297": "EARLY_INVESTOR_WALLET()", +"d0897347": "engrave(bytes32,string,string,bytes32)", +"d089e11a": "accountRegistry()", +"d08a787c": "bytes32ToString(bytes32,bytes)", +"d08b89f3": "disableStopping()", +"d08bc007": "logRef(address,uint256)", +"d08bfe26": "CrowdsaleClose(uint256,bool)", +"d08c6803": "deletePerson(uint256)", +"d08d5559": "AABToken()", +"d08d66ec": "setBonusState(uint256)", +"d08d6753": "mdtRewardAmount()", +"d08e2354": "goldPercentage()", +"d08f2c67": "getHistoryAt(uint256)", +"d0900033": "COLONERToken()", +"d09119b4": "mortgage(address)", +"d0914c8d": "RelestToken()", +"d091b550": "newOwnerCandidate()", +"d0937598": "getLuckyblockBase(bytes32)", +"d09398ee": "transferCDP(address,uint256)", +"d093e04b": "payJackpot(uint256)", +"d0940a5d": "best()", +"d0946d00": "subFreeMineral(address)", +"d0949f99": "UINT256_MAX()", +"d094dd21": "getLLV_edit_14()", +"d095761f": "withdrawNetIncome()", +"d095d499": "profit3eggs()", +"d095edb2": "initializeModuleAddresses(address[])", +"d09677df": "TankSellMaster()", +"d09685b0": "getEntriesCount()", +"d096b8f0": "setupRaffle()", +"d0973af8": "transferTokensFromContract(address,uint256)", +"d09812e1": "settlementRegistry()", +"d0982feb": "tokenLockDuration()", +"d0983f4b": "tokenRatios()", +"d0988149": "MANHATTANPROXYMADISONAVE()", +"d0995198": "returnMinGoal(uint256)", +"d0995b33": "refundBalances(address[])", +"d09a6a62": "transferUnlock()", +"d09b0ae4": "RealEstate()", +"d09cb807": "isCurrentAdmin(address,address)", +"d09de08a": "increment()", +"d09e21ee": "ignore(bytes4,bool)", +"d09e3526": "setStatusI(address)", +"d09eae58": "SCAMToken()", +"d09edf31": "authorizer()", +"d09ef241": "getOrder(uint256)", +"d09f85ca": "Eventine()", +"d09f872a": "VenusToken(uint256,string,string)", +"d09f8b8b": "addXY(uint256,uint256,uint256,uint256)", +"d09fb45e": "setApprovedContracts(address,bool)", +"d09fbcee": "HumanTokenAllocator(address,address,address,address,address)", +"d0a05fea": "setI_S(uint256)", +"d0a06fb9": "cloneCard(address,uint256)", +"d0a1adf4": "contains(bytes1,bytes1)", +"d0a27473": "teamUnlock1()", +"d0a2da8e": "give(address,uint256,string,string)", +"d0a2f2c4": "getAllInvestors()", +"d0a45f84": "getVersionImplementation(address,bytes32,address,bytes32,bytes32)", +"d0a4a81b": "setTellerModerator(address)", +"d0a56299": "GetAssetTypeAverageSalePrice(uint256)", +"d0a579fb": "releaseForEarlyInit(address[],uint256)", +"d0a5eb4e": "setMainWallet(address)", +"d0a61995": "sell_(address,uint256)", +"d0a62566": "approveIndexed(address,uint256)", +"d0a63663": "incrementLimitBranch()", +"d0a6f018": "LogBalanceChange(address,uint256,uint256)", +"d0a6fa54": "getPriceById(bytes32)", +"d0a7b467": "setAragonDevMultisig(address)", +"d0a826f3": "setWildcardList(address,address,bool)", +"d0a835e3": "buyShip(uint32)", +"d0a8c801": "fshare()", +"d0aa0313": "setCompte_38(string)", +"d0aa407f": "withdrawEther(bytes32,uint256,uint256,uint256[])", +"d0aac5cf": "teamProfile(uint256)", +"d0ab0066": "calcFlexibleReward(uint256)", +"d0ab48e9": "toB32(bytes,uint256,bytes,address)", +"d0ab8432": "whitelistRegisteredAmount(address)", +"d0ac01ac": "setOfferExpiry(uint256)", +"d0ac2252": "getShipEarning(uint32)", +"d0ad7fb8": "buyTicket(uint256[],address)", +"d0ade72d": "assertEquals(uint256,uint256)", +"d0ae4356": "getRequestStatus(address,address)", +"d0ae9aec": "setMinInvest(uint256)", +"d0aff67d": "setNeverdieContractAddress(address)", +"d0b01e68": "__setBeneficiary(address)", +"d0b02abc": "createProductionUnit3()", +"d0b06f5d": "lastUpdated()", +"d0b0c0d5": "unlockDevTokenSupply()", +"d0b18fbf": "transferByForce(address,address,uint256)", +"d0b1b910": "FXSToken()", +"d0b2b579": "seedFund()", +"d0b368a0": "addToApproveList(address)", +"d0b3da99": "join(uint256,bool)", +"d0b4755c": "RATE_SALESTAGE1()", +"d0b52156": "getIpfsHash(address,address)", +"d0b5981f": "closePreICOPublic()", +"d0b68efb": "yoobaTokenAddress()", +"d0b6ba2a": "moveFunds()", +"d0b74806": "claimA()", +"d0b753f3": "sendPreSaleBonus(address,address)", +"d0b7ca57": "mintToken(address,uint256,bytes,bytes)", +"d0b83db9": "insertUser(address,bytes32)", +"d0b86d15": "FaradEscrow()", +"d0b8bc84": "OwnerUnfreeze(uint256,address)", +"d0b91ca7": "showBurnedCoins(address)", +"d0b94ffe": "web3ViewRoll(bytes32,bytes32,uint256,uint256,uint256)", +"d0b99ee2": "_distributeLandholderTax(uint256)", +"d0b9e58b": "SspContract(address,address,address,uint256,string)", +"d0b9e792": "returnBorrowedEth()", +"d0bb1d40": "airdropsCount()", +"d0bc1a88": "addMoney(uint256)", +"d0bc97d0": "isCrowdsaleFull(uint256,uint256)", +"d0bcebc8": "collectBack3()", +"d0bcfc0c": "Bankroll()", +"d0bec975": "countBid(uint8)", +"d0bf4d95": "SmokeExchangeCoin(uint256,address,address,uint256,uint256,uint256)", +"d0bf9502": "btcLastUpdate()", +"d0bff051": "testSetBalanceDb()", +"d0c03f35": "multisigVault()", +"d0c0c39c": "countTokens(uint256,address)", +"d0c1c844": "getLimitedBalanceOf(address)", +"d0c1d117": "editAddressDescription(address,string,address)", +"d0c24e93": "setNotUpdatable(bytes20)", +"d0c3033c": "generalBounty()", +"d0c32dd3": "otcPurchase(uint256,address)", +"d0c32ea9": "SearchALLFileLength()", +"d0c39f14": "Lottery(address)", +"d0c412ec": "ENDOairdrop()", +"d0c426e6": "burnAllRemainingIBC()", +"d0c475e5": "addRecordStrict(uint256)", +"d0c55ea9": "withdrawForPartner(bytes32,address,uint256)", +"d0c5c585": "getBurnAmount()", +"d0c5c946": "refundBpToken(address)", +"d0c75ea2": "verifyCommonTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"d0c7b012": "placeGame(uint24,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"d0c7c635": "mintToTeamAndAdvisors()", +"d0c8a7a5": "randgen()", +"d0c9bb92": "releaseTCLRinTeamTokens()", +"d0ca12ba": "ICO_START()", +"d0ca1982": "getCrowdsaleInfo(address,bytes32)", +"d0ca4dd7": "ownerWithdrawTokens(address,address,uint256)", +"d0ca5e7a": "createTokenToMarket2020()", +"d0ca7379": "mintReferralShare(uint256,address,uint256)", +"d0cac952": "HouseManaged()", +"d0cb874a": "getTokenByMineID()", +"d0ccf4bc": "createInstance(bytes32,bytes32,address,bytes,bytes32,bytes32,address,bytes,bytes32,uint256,uint256,bytes)", +"d0ce659f": "SwitzerlandvsCostaRica()", +"d0ce7360": "closeContract(uint256)", +"d0cf49e9": "zoLastRefreshTime()", +"d0d0ed05": "withdrawVault()", +"d0d13e87": "smartContractIsForSale(uint256)", +"d0d1ea70": "setTrustee(address)", +"d0d2e745": "manualExchange(address,uint256)", +"d0d38b65": "setFirstRankForFree(bool)", +"d0d390bf": "HubToken(address)", +"d0d3b9df": "IfModuleRegist(address)", +"d0d3f5ba": "removeNode()", +"d0d44cca": "setPOOL_edit_34(string)", +"d0d511f9": "getGoalsCount()", +"d0d529a7": "openWindow()", +"d0d552dd": "setAsset(address)", +"d0d68241": "betALenght()", +"d0d832ad": "fundraiseType()", +"d0d89ce3": "cummulativeTokensSold()", +"d0d968c0": "burnFromReserve(uint256)", +"d0d98276": "revokeOffer(address)", +"d0d9e21d": "emitCapabilityAdded(address,bytes4,uint8)", +"d0d9fcf7": "RANGE_STAT_MAX()", +"d0da3e86": "getNextAntiReplayTag(uint256)", +"d0dad7e1": "maxCapMain()", +"d0db5083": "hatch()", +"d0dc0a04": "all_creatures_for_species(uint256)", +"d0dc5c65": "updateTotalSupply()", +"d0dd38ad": "setDepositGasCost(uint8)", +"d0de7b29": "MetadiumVesting(address,uint256,uint256,uint256,bool)", +"d0def521": "mint(address,string)", +"d0e075c7": "BitcoinPurple()", +"d0e0813a": "promote(address)", +"d0e0ba95": "setId(uint256)", +"d0e0e8f6": "isLockedConfig()", +"d0e2bef0": "initFactorReward(uint256,uint256,uint256,uint256)", +"d0e2dc64": "playAway()", +"d0e30db0": "deposit()", +"d0e33b1b": "testGetResults()", +"d0e3cbbe": "getCurrentTotalEther()", +"d0e3f734": "setPubkey(string)", +"d0e4567e": "activeGroups()", +"d0e46235": "buyCardsAndSendGift(uint8,address)", +"d0e4713d": "CEC()", +"d0e55727": "changeOfferTime(uint256,uint256)", +"d0e6cfec": "bountyTokenWallet()", +"d0e709b6": "initialTransfer(address,uint256,uint256)", +"d0e7a5cb": "editPrice(uint256,uint256)", +"d0e95ded": "MithrilOre()", +"d0e98c14": "sendRestBack()", +"d0e9f00f": "BNTBalance()", +"d0ebdbe7": "setManager(address)", +"d0ec057e": "getFeeAmount(uint256,bool)", +"d0ec1607": "cancelPoll(uint256)", +"d0ed5c2f": "walletContract()", +"d0edf912": "createTransaction(address,uint256,uint256,uint256,uint256)", +"d0ee32c4": "getSymbolFromAddress(address)", +"d0ef1048": "_getRand()", +"d0ef368d": "setAllocation(address,address,uint256,uint256,uint256)", +"d0eff891": "weiToEther(uint256)", +"d0f040c4": "checkOwnerAllowance(address)", +"d0f0efcb": "buyPredictXname(bytes32,uint8)", +"d0f13638": "minimumPrepaidClaimedPercent()", +"d0f15e9e": "WalletWithEmergencyTransfer()", +"d0f17d41": "contributionMaximum()", +"d0f2019c": "hasToken(address,address)", +"d0f3235d": "_transferAirdrop(address[],uint256,bytes)", +"d0f3aa80": "allowSale()", +"d0f46c0b": "getUsersContract()", +"d0f4f99c": "solvePuzzle(uint256)", +"d0f5f4cd": "getPixelColor(uint16,uint16)", +"d0f6fc40": "QuantityFactorSet(uint256,uint256,address)", +"d0f76bb8": "End3()", +"d0f7a601": "etherRate()", +"d0f817db": "getOrgCertificatesCount(address)", +"d0f86c9d": "getUser(int256)", +"d0f86ea8": "getMemoryRead(uint256,uint256)", +"d0f86fec": "ENKToken()", +"d0f87ce7": "periodPreITO_mainCapInWei()", +"d0f89c6d": "setWhiteBackersByList(address[],bool[])", +"d0f8c714": "add(bytes32,uint256,bytes,bytes8)", +"d0f8e6a4": "DelegationTransferred(address,address)", +"d0f96983": "composite(uint256,uint256,uint8)", +"d0f96f6b": "DigitalPadlock(string)", +"d0fa968a": "s14(bytes1)", +"d0fab480": "meg()", +"d0fb8909": "activations(address)", +"d0fbb9e4": "claimRemainEth(uint256)", +"d0fbe7fe": "buyTickets(uint256[])", +"d0fc1e7d": "getFrequency(bytes32)", +"d0fc2782": "multisigs(uint256)", +"d0fc35cf": "StandardFormula()", +"d0fc899a": "presaleInvestorsETH(address)", +"d0fca0ca": "gogo(bytes,bytes,address[])", +"d0fe3e85": "releaseTokensTo(address)", +"d0febda9": "getModerator(address)", +"d0febe4c": "buyTokens()", +"d0fef78f": "Visor()", +"d0ffecaa": "setWhaleMax(uint256)", +"d10032dc": "getTokeRate()", +"d1013fec": "endTimeSale1()", +"d101d3b2": "timelock(address,uint256,uint256,uint256,bool)", +"d1026aa8": "YESToken()", +"d10271a1": "OxProtocol()", +"d103449c": "addURL(string)", +"d1037a11": "swap(uint256,address,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"d1042e31": "getUserReward(address,address,bool,bool,bool)", +"d1047434": "getFactoryCount()", +"d1048bc9": "reserveVanityURLByOwner(address,string)", +"d104a136": "getBase()", +"d104bca2": "getUnitsAttack(address,uint256,uint256)", +"d1051a68": "DynamicToken()", +"d10523b7": "GoldenLightChainToken(uint256,string,uint8,string)", +"d105350b": "getLockedBalance(address,uint8)", +"d10541ab": "changeIdentityEthAddress(address)", +"d1058e59": "claimAll()", +"d1073bdb": "setBitwordsCut(uint256)", +"d107a5cc": "freezeAllowance(address,uint256)", +"d108177a": "removeEmployee(address)", +"d10865a7": "endSecondWeek()", +"d108b7d4": "KyberContributorWhitelist()", +"d108ffc0": "tokenToWei(uint256)", +"d1092be8": "transferAllowedDelete(address)", +"d1096155": "requireOnce()", +"d10a5e1d": "lockBalance(uint256,bool)", +"d10ac7eb": "balanceOfComisionDone(address)", +"d10adfe3": "setPricing()", +"d10aee9c": "mainPlayer()", +"d10bc924": "seeCurrentParticipants()", +"d10c3d1d": "removeFromInitialSupply(uint256)", +"d10c504f": "has_voted(address)", +"d10ceb47": "setConsolationRewardsPercent(uint256)", +"d10d42eb": "Dividend(address)", +"d10da303": "_createLinglongCatWithTime(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"d10db2e1": "addCar(address,uint8,uint16)", +"d10e10b3": "testCanFinalizeEndedSale()", +"d10e23c8": "ClothingCoin()", +"d10e73ab": "createIdentity(address,address)", +"d10e99fe": "mint(int256,bytes32)", +"d10f6de9": "_requestSignature(bytes32[8],bytes)", +"d1100691": "BookCafe()", +"d1104bd3": "SLRC()", +"d110f0e6": "LEGAL()", +"d1110c5f": "buyMicroKeysWithHandle(string,string)", +"d11127c0": "lastBlock_f18()", +"d1120db0": "size2()", +"d112cf30": "PCNCoin()", +"d114751e": "getWeightRange(uint256,uint256,uint256)", +"d1153f25": "bugFund()", +"d1159747": "PREICOstart()", +"d115cac6": "joinTournament(uint256)", +"d115f02d": "updateMinReward(uint256)", +"d116c8c4": "releasePayment()", +"d11711a2": "participate()", +"d1180c98": "Lotoblock()", +"d11831c3": "generateHash()", +"d1190b7f": "changeTransferStepLock(bool)", +"d1195c48": "transferNashOut(address,uint256)", +"d119db4c": "addScore(address,uint256)", +"d11bd1a6": "sendContingencyFunds()", +"d11bee0f": "STSTEST6()", +"d11cd4c6": "changeStartPrice(uint256)", +"d11d8526": "isValidProductID(uint256)", +"d11db83f": "getPendingTransactions()", +"d11e77e4": "REIToken()", +"d11f13df": "numberOfParticipantsWaitingForPayout()", +"d11f5b9f": "VictorieumNewICOToken()", +"d11ffc55": "referralSupply()", +"d1206a29": "unlockRewardTokenMany(address[])", +"d120a284": "getBytesFromNumbers(uint8[3])", +"d120a4f2": "setUnderCollaterizedPosition()", +"d1211a71": "Solarex()", +"d1226567": "bulletAmount(address)", +"d1237220": "LogId(address,uint48)", +"d1239730": "mintEnabled()", +"d123b6e2": "ensureRegulated(address)", +"d1241e67": "getProductIdAt(uint256)", +"d125a7e2": "partialRefund(uint256)", +"d1260edd": "userDeposit(address)", +"d126ae0c": "TRLCOIN_DECIMALS()", +"d126dac4": "cashout(address,address,uint256)", +"d1279ea8": "AddTrust(address,uint256)", +"d127bb9d": "currentElement()", +"d12892e4": "setGiftMode(bool)", +"d128f2de": "cancelOwner()", +"d128fc20": "allocateTokensForFounder()", +"d1295eca": "ENDRoot()", +"d1295f13": "DTRACK()", +"d129ee38": "MediatedTransaction_Protection_Seconds()", +"d12a039c": "_getTokenBalance()", +"d12a0a2e": "icoClosed()", +"d12a6049": "setWeiLockSeconds()", +"d12a7b42": "whitelistResolver(address)", +"d12b51c0": "changeUserEduExp(bytes32)", +"d12b88a6": "SelimToken()", +"d12c08bf": "EGGS_TO_HATCH_1BULLS()", +"d12c1e28": "badgesOf(address)", +"d12c7b52": "WarToken()", +"d12d5c47": "ReferredBonusTokensEmitted(address,uint256)", +"d12d9510": "DFTBToken()", +"d12e0b2a": "MultiOwnable()", +"d12f6938": "crowdSaleStatus()", +"d12f7029": "STARTING_PRICE()", +"d1301074": "grantTokenOwnership(address)", +"d13091ed": "newGoal(bytes)", +"d1314ee0": "getBroker()", +"d1315ea3": "ISRA()", +"d131a803": "FetchlastHacker()", +"d131ab1e": "UpdatedTokenInformation(string,string)", +"d131af30": "precisionMinimum()", +"d131dfb8": "setFirstStageStartsAt(uint256)", +"d13209f9": "unhold()", +"d132391a": "setSaleEndTime(uint256)", +"d132a8f4": "totalBuyTokens()", +"d132eb02": "ProposalPassed(address,address,uint256)", +"d13319c4": "getHash()", +"d1342958": "refuseKyc(address)", +"d134474c": "winnings()", +"d134f4aa": "challengeCanBeResolved(string)", +"d1351e94": "getRoundPlayerKeys(uint256)", +"d1354f64": "ReceiveTips(address,uint256)", +"d135ae6e": "isSignedByToly()", +"d135cc4b": "withdrawLocked()", +"d135df42": "CONEGTY()", +"d1366f17": "sellerRequestCancel(uint16,address,address)", +"d136a579": "claimEarlyIncomebyAddressRound(address,uint256)", +"d1375f76": "COIN_SUPPLY_ICO_TOTAL()", +"d1376daa": "getClosingLine()", +"d13782a7": "addStage(uint256,uint256,uint256)", +"d137874b": "getDiscount()", +"d1382092": "getNumTokens(address,uint256)", +"d1384eb6": "institution()", +"d13936fe": "connectOrderPrice(address,address,uint256,uint256)", +"d1397162": "icoOverview()", +"d13a3386": "withdrawSale2()", +"d13a64d3": "getYanCoefficient(uint256,uint32)", +"d13a73c4": "numberOfStages()", +"d13a7efd": "earlyResolveB()", +"d13b54b7": "getGameAmount(address,uint256)", +"d13bf769": "foundersFundTimelock2Address()", +"d13c9c1e": "allocatePresaleTokens(address,uint256,uint256,uint256)", +"d13cb1fb": "fundings(uint256)", +"d13d1ace": "scheduleCall(bytes,bytes,uint16,uint8,uint256,uint256,uint256,uint256,uint256)", +"d13daa79": "TestTokenERC20()", +"d13e0808": "nextCommonTTMTokenId8()", +"d13e2a6a": "Wei_Remaining_To_ICO_Cap()", +"d13e5846": "tokenHolderCount()", +"d13e79ec": "getUSDRaised()", +"d13ea9ca": "setMinesPrice()", +"d13f092e": "setRaffleLimit(uint256)", +"d13f90b4": "initialize(address,address,uint256,uint256,uint256)", +"d13f9d55": "newIteration(uint256,string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"d1407bec": "TraceCrowdsale()", +"d141138e": "getServerMoneyBag(uint256)", +"d1414b20": "_withdrawOrderBalance(uint256,address)", +"d14192ba": "numParameters()", +"d141b610": "MembershipPaid(address,uint8,uint256)", +"d1428e7a": "ratioFor(uint256,uint256,uint256)", +"d142bc5c": "individualWeiCollected(address)", +"d143dad0": "getLineSum(uint256)", +"d1442e93": "getStrField2()", +"d1472046": "CollectChips(address,uint256)", +"d14779c4": "signDigitalContract(string)", +"d1477f7b": "setInitialTokenValue(uint64)", +"d1479575": "creditcoinLimitInFrac()", +"d1482791": "updateInterest()", +"d148288f": "setHoldingPeriod(uint256)", +"d14ac7c4": "crowdSaleAllowance()", +"d14b2f9b": "addBonusToken(address,uint256)", +"d14b691d": "_resetReleaseTime(address)", +"d14cd233": "tokenSpread()", +"d14e1784": "paymentForWeek(uint256)", +"d14e62b8": "setCount(uint256)", +"d14ebab3": "NXE_Coin()", +"d14f17f7": "airdrop(address[],address)", +"d14f56f1": "moveUnsold()", +"d14f9219": "ham()", +"d150f835": "currentDonation()", +"d150fbe6": "convertToInd()", +"d151ec28": "getMadeTXFund(uint256)", +"d152865b": "getLastDIVDPeriod()", +"d15334a5": "firstVestAmount()", +"d15376a7": "lastBlock_f14()", +"d1538303": "docdetail(uint256,string,string)", +"d15392b2": "forceRelease(uint256)", +"d153ab40": "addMultipleTier1Members(address[])", +"d153b60c": "proposedOwner()", +"d153d118": "MyDice()", +"d1541264": "getManagerForCount(address)", +"d1555f1f": "approveCommitmentTransfer(address)", +"d1558b7c": "referrersCount()", +"d155908b": "addone()", +"d155feec": "EdisonCoin()", +"d156549f": "setExpiredAndWithdraw()", +"d1571996": "multisigOwner()", +"d1572e4c": "setResource(string,string,address)", +"d1577656": "purchaseTo(address)", +"d157e816": "MiningExtended(uint256,uint256,uint256)", +"d157ee04": "approveNextManager(address)", +"d157f27d": "sendAdvisorsSupplyToken(address)", +"d157f645": "setPaymentInterval(uint256)", +"d1587a18": "getAvailableRewardForUser(bytes32,address)", +"d1594403": "manualTransferTokensTo(address,uint256,uint256,uint256)", +"d15b506b": "TokenROC()", +"d15b95b4": "delegateDklBidAuction(uint256,uint256,bytes,uint256,uint16)", +"d15b9614": "GetLogMessageError()", +"d15c11e5": "providerRegistry(address)", +"d15c82e3": "reserveManyTokens(uint256[],uint256,address)", +"d15cfa25": "ChronoMint(int256,address,address,address)", +"d15d2745": "CLE_Beta_Pictoris()", +"d15d62a7": "getLibrary(uint256)", +"d15db5fb": "_computeBackground(uint256)", +"d15e06a0": "registerCrowdsales(address,uint256,uint256)", +"d15e1014": "marketingTokensPercent()", +"d15e3170": "payoutVoter(uint256,uint256)", +"d15e9459": "stopAddressesTotal()", +"d15ecbc2": "simulatedBlockNumber()", +"d15ee9ff": "setUsersCanTrade(bool)", +"d15f10cc": "acceptSubmission(uint256)", +"d15fc954": "wallet_Address()", +"d16058df": "getPayOrderKey(uint256)", +"d1613036": "releaseTokenTransfer(bool)", +"d1613731": "adminGetBalance()", +"d1614df3": "individualMinCap()", +"d1615300": "startWeekTwo()", +"d161b56a": "tokensMintedDuringICO()", +"d1622424": "_checkAgreement(address)", +"d1631361": "ms0()", +"d1632f67": "assignFundReceiver(address,uint256)", +"d16352af": "getProtocol()", +"d163b764": "row(uint32)", +"d163fcab": "getCurrentHero()", +"d1650f7f": "test_oneValidEqStringNoLog()", +"d1651786": "donateUnicorns(uint256)", +"d165288e": "setAllowMining(bool)", +"d165d7cd": "registerNameXnameFromDapp(address,bytes32,bytes32)", +"d1660f99": "safeTransfer(address,address,uint256)", +"d16617ae": "restartMiniGame()", +"d166539b": "_migrate(uint256)", +"d16712ed": "maxGoalReached()", +"d16782f6": "testMetered()", +"d1682600": "StandardToken(uint256,string,uint8,string)", +"d16856ca": "addAdmin(address,string)", +"d16865a3": "PRIORITY_ADDRESS_LIST()", +"d168f699": "Glv(uint256,string,uint8,string)", +"d1698430": "revokeAllTokenGrants(address)", +"d169a020": "evMgmtIssueBountyToken(address,uint256,address,uint256,bool)", +"d169c869": "endOfPreSale()", +"d16a7a4b": "FreezeAccount(address,bool)", +"d16a8fe7": "kickMember(address)", +"d16a9624": "winBidEth(address,address,uint256,uint256)", +"d16b04cf": "myCoinAge()", +"d16b6473": "getOnTokenTransferToValue()", +"d16be71b": "teamTokensDelivered()", +"d16c4cf5": "FOUNDER1()", +"d16e1ded": "requestTransferItem(address,address,string)", +"d16e443a": "previousDelegates()", +"d16e92db": "createCrowdsale(uint256,uint256,address,address,address,address,uint256,uint256,bool)", +"d16edc15": "chargeFeePool()", +"d16f8669": "crowdsaleClose()", +"d16ff4c8": "nextCandidateId()", +"d1701397": "Flip1Token()", +"d17222dc": "CATContract()", +"d1724881": "getBroker(address)", +"d17291bd": "icoRunning()", +"d1729a4a": "sendTokensManually(address,uint256)", +"d172d6fc": "playFast()", +"d1734eac": "isInNextGeneration(address)", +"d173707d": "hasPhysicalAddress(address)", +"d1738b72": "wroomWroom()", +"d173d531": "Amalgam()", +"d173e578": "setInitialAllocationLock(address)", +"d173fc82": "setTokenAdmin(address,address,address,address)", +"d1746107": "teamTokenRatio()", +"d174c388": "tokensaleToOtherCoinUser(address,uint256)", +"d1759141": "massEthFund()", +"d175958f": "cancelApproveForAll(uint256)", +"d175d38d": "calculateBonus(uint32)", +"d176be98": "DonorCrowdsale(uint256,uint256,uint256,address,uint256)", +"d1776731": "userToRobots(address,uint256)", +"d1778ed7": "UltrixCoin()", +"d177e6a6": "fillOrder(address,address,uint256,uint256)", +"d1786610": "getTokenRemaining()", +"d1789176": "AMOUNT()", +"d179eb71": "clonedFrom()", +"d17a1b5b": "SetAccessType(uint32)", +"d17a79c1": "totalNormalEtherCollected()", +"d17aa842": "GetDivPerCoinLarge()", +"d17ab3c6": "free2Of(uint256)", +"d17be133": "getAllHousing()", +"d17cf29f": "retrieveWarriors(address,address,uint8)", +"d17d0d29": "SITExchangerMock(address,address,address)", +"d17d25de": "marketingTokenAddress()", +"d17e45fb": "s23(bytes1)", +"d17e4889": "decodeProps(uint256)", +"d17f5d9d": "indice_vincitore()", +"d17f7142": "isLocked(uint256,uint256,address,address)", +"d17fd539": "_newInterest(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d1802d79": "mintEGAS()", +"d18063cd": "registerParticipantAgent(address)", +"d1809fe8": "depositLiquidateThePool()", +"d180be1d": "isMemberOf(address,address,string)", +"d180d0bc": "_deliverTokens(address)", +"d180ebca": "FinishIco()", +"d1812be7": "newCustomFutureLottery(uint256,uint256,address,uint256)", +"d18165f6": "OEN()", +"d1818aed": "setPresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"d181c37e": "NecroToken()", +"d182b4ff": "CurrencyHedge()", +"d182b83b": "validate(string)", +"d182d253": "ICO_PHASE1_LIMIT()", +"d183434d": "accountsBalances(uint256,address)", +"d1835b8c": "left21(uint256)", +"d184194b": "Smw()", +"d184935d": "getDebug()", +"d184adf6": "distributeToAddressesAndAmounts(address[],uint256[])", +"d184b88e": "AddedPrepaidTokensEvent(address,uint256,uint256,uint256)", +"d18523ac": "TimeDestroy(address)", +"d185c583": "ownerWithdrawFees()", +"d185f378": "_owns(bytes32,uint256)", +"d18611d6": "reactivate()", +"d1866019": "GetReferredCount()", +"d186659d": "setRateIcoMainSale(uint256)", +"d186899a": "issueAndLock(address,uint256)", +"d18746ed": "BonusChanged(string,uint256)", +"d188f550": "setPlayerGeneralLv(uint64,uint8)", +"d1893d23": "oldusesr(address,address)", +"d189b98d": "firstPrivateReleaseTime()", +"d189c1b0": "createUserByEmail(bytes32,bytes32,uint256)", +"d18a5563": "depositsStack(uint256)", +"d18ad4de": "getPlayerAff(address)", +"d18b07b2": "calculateCommission(uint256,uint256)", +"d18b93e6": "_owns(address,uint256,uint256)", +"d18c5da7": "FrogDaruma(address,address,address,uint256,uint256,uint256)", +"d18d944b": "setHardCap(uint256)", +"d18df96c": "vault_enableRefunds()", +"d18dfdc9": "parrot(uint256)", +"d18e031e": "verifyDeed(string)", +"d18e142d": "Announcements(uint256)", +"d18e81b3": "currentTime()", +"d18ffb8d": "inversorIsKyc(address)", +"d19003e5": "_endOfPreICO()", +"d1900a04": "TRCTotalSupply()", +"d191b336": "AdjustBetAmounts(uint256)", +"d191d7f4": "OPERATIONS_SHARE()", +"d191e11d": "rateSystem(address,uint256)", +"d192367b": "randomA()", +"d1925b80": "YACHT()", +"d1933a1b": "goalManagment(bool)", +"d19370bb": "resetKYC(address)", +"d1938376": "get_payment_by_id(uint256,uint256,address)", +"d193a0ca": "splitsSingle(uint256,uint256)", +"d1940a16": "announce(uint256)", +"d195bbd5": "AywakeToken(address,address)", +"d195ef83": "mintAdminApproval()", +"d195fd28": "RESERVED_BOUNTY_SIDE()", +"d1976a6f": "completeGame(uint256,uint256,string,address)", +"d19853c7": "exchangeBounty(address,uint256)", +"d1987a28": "setTradeRobot(address)", +"d1988b6a": "getGameHash(uint256)", +"d199168d": "claimedTokens(address,uint256)", +"d199c81d": "TokenSale(uint256,uint256,uint256,uint256,address,uint256,uint256,address)", +"d19b8d87": "refundManagerContractAddress()", +"d19b99b5": "turnMigrateOff()", +"d19c395f": "capPreICOTrasferred()", +"d19d1912": "getSelfGroupsContributedTo()", +"d19d8e1a": "Ethereumbonus()", +"d19e09ce": "setDefaultAccountingPeriodSettings(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes2)", +"d19e1ad4": "_calculateNewPrice(uint256)", +"d19e2364": "addDonateTokenAddress(address)", +"d19e6cf0": "ChangeDeadLine(uint256,uint256,uint256,string,uint256)", +"d1a0cc5c": "processPayment(address,address,uint256)", +"d1a0e8c8": "setFeeRebatePercent(address,uint8)", +"d1a132f9": "enableNodeRegistration()", +"d1a1beb4": "mint(address,uint256,bool)", +"d1a1f5ba": "addSongData(string,string,string,string)", +"d1a2749c": "Crowdsale(address,uint256,uint256,address,address,uint256,uint256,uint256,uint256)", +"d1a2bfaf": "Wallet_Initial_Supply()", +"d1a2dfd2": "isExistingDataIdentifier(bytes32)", +"d1a301e3": "setInitialBlockHeight(uint256,uint256)", +"d1a3d3ad": "assertEq9(bytes9,bytes9)", +"d1a3fb20": "updateUserRatio(uint256,address)", +"d1a40ce1": "_rewardVote(address,address,uint256)", +"d1a4a98c": "BeBitcoin(uint256,string,uint8,string)", +"d1a61025": "tradeBookOf(address)", +"d1a634e6": "OVC()", +"d1a69455": "get_enode_by_row(uint256)", +"d1a6ed67": "setFunctionIdSubcontract(bytes4,address,uint256,uint256)", +"d1a75e0d": "VOTE_FOR()", +"d1a75fea": "createTreatyRequest(uint8,string,uint256)", +"d1a7d1a8": "MyPinerTokenTest2()", +"d1a8d447": "get_all_bet_values()", +"d1a94e58": "TXOtoken()", +"d1a9eb19": "withdrawToContractOwner(uint256)", +"d1a9f5be": "createFileWithContents(string,uint256,bytes32[],uint256)", +"d1aadb6a": "setColour(uint8,uint8,uint8)", +"d1ab0457": "AddSoftware(string,string,bytes32,bytes32,bytes32)", +"d1abdab8": "divideDecimal(uint256,uint256)", +"d1acb464": "CreatedLoan(uint256,address,address)", +"d1ae0488": "transferBecauseOfAggregate(address,uint256,address,uint32,uint256[],uint256[])", +"d1ae2f01": "getVictim(uint16)", +"d1ae956f": "isPayed(uint256)", +"d1ae9607": "LFSTYLToken()", +"d1aea543": "forwardFunds(address)", +"d1af8a5a": "LinkerExample()", +"d1afaf1f": "addusertime(address)", +"d1afdb86": "buyAllowed()", +"d1b12b4e": "extCreateBot(uint256,uint256,uint256,uint256,address)", +"d1b1a22b": "set(string,uint256[],uint256[],uint256[],bool[],uint256[])", +"d1b1b65a": "rangeETHAmount()", +"d1b31a63": "cryptobank(bytes32,bytes32)", +"d1b33094": "addAccessor(address,uint8)", +"d1b33afa": "_calculateDayPass()", +"d1b39ae5": "decimalOffset()", +"d1b4ff7e": "multiAccessRevokeD(bytes32,address)", +"d1b53d2d": "tryFinalizeProposalByVoterIndices(uint256,uint256[],bool,int256)", +"d1b5e2be": "testFailRegisterContractIdAgain()", +"d1b648cd": "contractSendGas()", +"d1b6a51f": "finishEthGetToken()", +"d1b6dd30": "airdropClaimed(address)", +"d1b7cb9b": "transferBatch(address[])", +"d1b878e9": "getresult(uint256)", +"d1b9c430": "OPEN()", +"d1ba656b": "minimumTransferInWei()", +"d1ba8257": "SIX()", +"d1baaf58": "communityRoundStartDate()", +"d1bab4cc": "batchApprove(address,uint256[],uint256[],uint256[])", +"d1baceac": "DepositBank(address,uint256)", +"d1bb0433": "preSaleTokensPurchased()", +"d1bb5cf1": "marketplaceContract()", +"d1bb7b59": "tokensPerWeiBonus111()", +"d1bb8688": "ICO_SHARE()", +"d1bba64f": "Investment()", +"d1bc2cc4": "transferGift(address,address)", +"d1bc4157": "KanZhang()", +"d1bc5c8e": "KryptoroToken()", +"d1bc62de": "EARLY_FOUNDERS_USD()", +"d1bc76a1": "recipients(uint256)", +"d1bcbf6c": "_isReady()", +"d1bd328b": "bonusFirstIco()", +"d1bd56c1": "TripleT()", +"d1bdf639": "cards_black_check(address)", +"d1be7cc4": "serverPortUpdate()", +"d1bf942a": "rok()", +"d1bf9aba": "nextRune()", +"d1c01b26": "Crowdsale(address,address,uint256,uint256)", +"d1c06b2f": "availablePositions()", +"d1c1132f": "lockInTreasury()", +"d1c13abd": "returnRental()", +"d1c15acf": "OWNERS_AND_PARTNERS_SUPPLY()", +"d1c19fbc": "Withdrawn(address,address,uint256)", +"d1c1f19f": "NewPlay(address,uint256,bool)", +"d1c2babb": "merge(uint256,uint256)", +"d1c31f10": "tokenLockUp(bool)", +"d1c332c7": "preDistriToAcquiantancesStartTime()", +"d1c43558": "TheExtraordinarySpacemen()", +"d1c46916": "releaseLock(address)", +"d1c484f6": "proposedRecoveryKeyPendingUntil()", +"d1c4c206": "setRoute(string,address,bool)", +"d1c5e119": "getMyAnotherDragon()", +"d1c673e9": "transferAndCall(address,uint256,uint256,bytes)", +"d1c693f8": "TOTAL_TOKENS_FOR_PRICE()", +"d1c699aa": "exerciseFee()", +"d1c6b0ca": "setBonusAmount(uint256)", +"d1c6f448": "updateInitialRate(uint256)", +"d1c72c89": "isInRoundTwoState()", +"d1c73322": "tokenHardcapReached()", +"d1c7a6ac": "ActivationWithdrawal(address[2],uint256[8],uint256,uint256)", +"d1c7be4d": "_pushLuckyInfo(uint256,uint8,address,uint256)", +"d1c85478": "GGRocketToken(address,string,string,uint256,uint256)", +"d1c8e7e6": "charityDonation()", +"d1ca0218": "issueToken(uint256,uint256,uint256)", +"d1cb0f0f": "getAllTombs()", +"d1cb923c": "HUNDREDTIMES(uint256)", +"d1cb993d": "grantAllowance(address,uint256)", +"d1cbfc66": "getOneTotalFeesDistributed(uint256)", +"d1cbfe65": "setRefferal(address)", +"d1cc9976": "isTerminated()", +"d1cd19cf": "advisorCut()", +"d1cd7bfa": "setSUTokenContract(address)", +"d1cdcf71": "PRICE_STAGE_FOUR_BONUS()", +"d1cdfe84": "Bonus_PoolTransfer(address,uint256)", +"d1ce017c": "getABIHashForMod(bytes32)", +"d1ce36aa": "unLockIdx()", +"d1ce65ab": "isCryptoRomeLandComposableNFT()", +"d1cec3ac": "CrowdSaleTest()", +"d1cf113e": "multiAccessSetRecipient(address)", +"d1cfe644": "EventCashOutTank(address,uint256)", +"d1d115ac": "test_fourInvalidEqUint(int256)", +"d1d1c8ae": "ConvertNumbers(bytes)", +"d1d1f264": "setSubscriptionStatus(bool,bytes32)", +"d1d2bd55": "calculateRangeLength()", +"d1d3a898": "_createElement(uint256,string,address,uint256,uint256)", +"d1d3bb92": "testSetPkg()", +"d1d3d8a6": "MintLog(address,uint256)", +"d1d422f6": "roundEvent(address[6],bytes32[6])", +"d1d46d2b": "setChestPrice(uint16,uint256)", +"d1d4c4c6": "safeDiv(int256,int256)", +"d1d5190c": "changeStart(uint256)", +"d1d53493": "setMaximalInvestmentTimeTreshold(uint256)", +"d1d566cf": "allocateExtraTokens(address)", +"d1d5824d": "maxBetThresholdPct()", +"d1d58b25": "claimable(uint256)", +"d1d675e4": "setMaximumCoinsPerAddress(uint256)", +"d1d6d639": "EstimateGas()", +"d1d6e44a": "paintGraffiti(uint256,string,string)", +"d1d80fdf": "setAddr(address)", +"d1d8fd65": "TransferCoins(address,uint8)", +"d1d93318": "createAvatar(string,uint256)", +"d1da09ee": "extractImportFeeChargeLength()", +"d1da8436": "setAdData(uint256,string,string)", +"d1db1cc4": "LogRefundingOpened(uint256)", +"d1db99b6": "INR_Omnidollar()", +"d1dbcd70": "isNodeTLDOfRegistrar()", +"d1dc3706": "LogReceivedETH(address,uint256)", +"d1dc72a0": "METAHASHCOIN()", +"d1dd2794": "buy_end_time()", +"d1ddb24e": "recordResult(address,address,address)", +"d1de5011": "getAccount(bytes32)", +"d1de592a": "add(bytes32,bytes32)", +"d1defff2": "_educatedToken()", +"d1df1252": "ringBell()", +"d1df306c": "burnToken(address,uint256)", +"d1df81df": "getPlayerInfo()", +"d1dfdc07": "patentSaleTimeDelay()", +"d1e0363d": "_createLock(uint32,address,uint256)", +"d1e040ec": "ConvertColouredBkp(address)", +"d1e07bcb": "onlyCapperMock()", +"d1e15045": "sendBack()", +"d1e191a4": "withdrawEverything()", +"d1e19ab2": "distributeAllTokensToContributor()", +"d1e2eb5e": "countInvestor()", +"d1e34733": "GCOXACMToken(string,string,uint8,uint256)", +"d1e400f4": "ecoSystemAddress()", +"d1e4b8da": "importBalance(address)", +"d1e58e0f": "preIcoRate()", +"d1e692eb": "lastLottoTime()", +"d1e6a64f": "leftForSale()", +"d1e7e81f": "selfLock()", +"d1e83b8b": "ChangeInterest(uint256,uint256,uint256,uint256,bool)", +"d1e8acb4": "ABC(uint256,string,uint8,string)", +"d1e9822c": "RESERVE_WALLET()", +"d1e99563": "BACKLEAF()", +"d1e9ab13": "Swift()", +"d1e9dcbf": "serverForceGameEnd(address,uint256)", +"d1e9f75b": "testHitSoftCap()", +"d1ea2786": "offerSketchForSale(uint256,uint256)", +"d1ea8b89": "QNTUsdRate()", +"d1eabc94": "CardToken(uint256,string,string,string,string)", +"d1eb6404": "donationsFrom(address)", +"d1eba9c9": "getDeployedAuctions()", +"d1ec32ed": "secondsToHold()", +"d1eca85e": "startIcoPreICO()", +"d1ecdec6": "m_OwnerFees()", +"d1ed3dad": "getIndex(address,address)", +"d1ed74ad": "retrieve(bytes32)", +"d1ee2bf9": "icoDiscountTime()", +"d1ee32c3": "issueTokensForICO(uint256)", +"d1ef4e91": "vestTokens(address,uint256,uint256)", +"d1ef752d": "Post(address,address,address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"d1efb5cd": "_getChamp(uint256)", +"d1efd30d": "secret()", +"d1f03514": "getRewardLevel(uint256)", +"d1f0bb2d": "populateAllowedFreeExchanges()", +"d1f1ef34": "setPrivateSale()", +"d1f1fff8": "minBalanceForTxFee()", +"d1f276d3": "releaseAgent()", +"d1f2a7e2": "isUserPolicyAccepted()", +"d1f2efd5": "isMainSale()", +"d1f2f971": "calculateDivi()", +"d1f34b14": "__uintToBytes(uint256)", +"d1f38097": "CTGToken()", +"d1f461d5": "getUsernameFromAddress(address)", +"d1f46c8d": "resolveCycle()", +"d1f4df47": "grantBountyTokens(address)", +"d1f55764": "shareContract()", +"d1f59db9": "isLatestMinorTree(bytes32,bytes32)", +"d1f61c44": "Totalizeum()", +"d1f61ed5": "dropRoute(uint32)", +"d1f6424f": "configurationCrowdsale(address,uint256,uint256,address,uint256[],uint256,uint256,uint8,uint256)", +"d1f69902": "getHeroClassId(uint256)", +"d1f6d676": "ExchangeContract(address,address,uint256,uint256)", +"d1f70760": "setAdditionalTokensFromCommonPoolWallet(address)", +"d1f7a4e4": "createCertificate(bytes)", +"d1f8a208": "removeOrganisation(address)", +"d1f92cab": "timereumDelta()", +"d1f95204": "propertyIndexToOwner(uint256)", +"d1f9c24d": "gameState()", +"d1f9f3a0": "bitdncToken()", +"d1fa338d": "TokenStorage(address)", +"d1fa74d2": "SimpleEscrow()", +"d1fa94d0": "setLockStatus(bool)", +"d1fa9cad": "Partners()", +"d1fae327": "CofounderSwitchedEvent(address)", +"d1fb386a": "_recordStashedPayout(uint256,uint256)", +"d1fb5646": "releaseTo(address)", +"d1fc0ddf": "prevOracle()", +"d1fc8cf3": "endDispute()", +"d1fccf9e": "bonusedPurchases()", +"d1fd260e": "getLotteriesByOwner(address)", +"d1fd3b12": "_rotateCauldron(uint8)", +"d1fe43ba": "migrateDueToNoReports()", +"d1fea3d5": "setReleased(bool)", +"d1feb5ee": "deleteArrayBytes32()", +"d1feca67": "addSpendingRequest(address)", +"d1ff535e": "PURCHASER_MAX_TOKEN_CAP()", +"d1ff8151": "getNumTanks()", +"d1ff9605": "setAdminFeePercent(uint256)", +"d1ffb796": "_ListingRemoved(bytes32)", +"d2004f8c": "getChance(uint256,uint256)", +"d20058af": "ESCBAirdropper(uint256,address)", +"d2008118": "logPromiseConfirmed(uint256)", +"d202158d": "keyHasPurpose(bytes32,uint256)", +"d2038d4d": "finalize4()", +"d2051f8e": "updatePassword(uint256,string,string,string)", +"d205ad7d": "proposeDissolve(bytes)", +"d205bcb0": "isPendingOracle(address)", +"d205f1e6": "testFail_set_price_without_token()", +"d2064e2f": "getStamp(uint256)", +"d2077782": "changeRequestCount()", +"d2079c0f": "playersLength()", +"d207e757": "ownerSetOraclizeSafeGas(uint32)", +"d2080ccd": "pauseWhitelist()", +"d20838f4": "setRegistryContractAddress(address)", +"d208fd60": "getMessageSender(uint256)", +"d209a566": "BP_PERSIAN()", +"d20ae2b5": "getMyWorks(bytes32,bytes32)", +"d20c34de": "TaylorToken()", +"d20cd8e5": "Solved(address,string,string)", +"d20d6119": "createTokenUri(uint8,uint8,uint8,uint8,uint8)", +"d20db416": "_approvePurchaser(address,uint256)", +"d20de0bc": "nextParticipantIndex()", +"d20e54a8": "startBet(uint256)", +"d20f5029": "advisorsTokensAddress()", +"d21077f3": "areFundsReleasedToBeneficiary()", +"d211483f": "RoleRemoved(address,string)", +"d211fd18": "capital()", +"d211fe86": "icoEndtime()", +"d21220a7": "token1()", +"d212a69a": "_fees()", +"d2134b26": "expTx(uint256,uint256,uint256)", +"d2135356": "isValidRelease(uint256)", +"d213ed96": "manageApprovedMintingModule(address,bool)", +"d213f109": "calcAmtReclaimable(address)", +"d21407fa": "crowdSalesCompleted()", +"d214326f": "GetWinners()", +"d214becb": "charactersCountOf(address)", +"d21577f2": "stakeEther()", +"d2161687": "reflectSwitch()", +"d2164302": "forgeWeaponPureDamage(uint256,uint256,uint256,uint256)", +"d216995b": "determineBonus(uint256,uint256)", +"d2169d2f": "getMonsterLevel(uint64)", +"d2169dfd": "RETURN_DATE()", +"d216a47d": "decreaseApproveAndCall(address,uint256,bytes)", +"d216a86c": "publicEventActive()", +"d216d55d": "etherandomExec(bytes32,bytes32,uint256)", +"d21705ff": "admin_proportion()", +"d2178b08": "get2()", +"d217b149": "managerUnset()", +"d218e144": "calculateRanking()", +"d218f92d": "checkinter()", +"d219f103": "collectedEtherFrom(address)", +"d21ad1ed": "calculateWinnerCut(uint256,uint256)", +"d21b84ac": "createNewDAO(address)", +"d21b93df": "Hypes()", +"d21b96ab": "ringhashRegistryAddress()", +"d21bcc7c": "get46(uint256,uint256)", +"d21bdee4": "Bitforce()", +"d21c39a1": "acceptPayment(address,uint256,address,uint256,uint256)", +"d21c700f": "stopToken()", +"d21cacdf": "referrerOf(address)", +"d21cbffc": "getIfVoted(uint256,address)", +"d21ceba0": "RemainingTokensReceiverAddress()", +"d21cf24f": "setSingleWithdrawMax(uint256)", +"d21d2cd1": "lifePoints()", +"d21d7950": "changeGasLimitOfSafeSend(uint256)", +"d21e17a6": "_payEthereum(uint256)", +"d21efc35": "endPhase()", +"d21fa4e1": "contract_alive_until_this_block()", +"d2201c3b": "CreateLUNETS(address,uint256,uint256)", +"d22057a9": "register(bytes32,address)", +"d220b727": "ProposalTallied(uint256,int256,uint256,bool)", +"d2225635": "getBetterNumOfWinnings(address)", +"d22290a4": "feeBips()", +"d222dc04": "requiredSignedAddress()", +"d2231919": "TransactionRefundedByMediator(uint256,uint256)", +"d22341a9": "withdrawDeveloperPot(address)", +"d2234b37": "withdrawal2()", +"d2235998": "_cancelAuction(address,uint256,address)", +"d223926f": "buyBooster(uint256)", +"d224118f": "PrepareDraw()", +"d224c3e0": "gen0Step()", +"d224f1ed": "proxiesCount(address)", +"d2254db0": "DDEToken()", +"d22591c8": "addBook(string,address)", +"d226d11f": "foundEvidence()", +"d226ff1b": "User(string)", +"d2273f37": "_changeTuneOption(uint32,uint32,uint256,bool,bool,uint128,bool,uint64,uint256)", +"d2282dc5": "setUint256(uint256)", +"d228cfc5": "claimHodlRewardFor(address)", +"d229a94a": "lockTokensForTradingMarketContract(address,uint256)", +"d22a1180": "finanReserveAllocation()", +"d22ac06f": "_approveEscrow(bytes32,uint256)", +"d22b1a0f": "secondVestStartsAt()", +"d22b32e9": "hivePerEther()", +"d22b3c8b": "ownerArmyCount(address)", +"d22b3de6": "setTitulaire_Compte_10(uint256)", +"d22b64a2": "getDonationByAddress(address,address)", +"d22b9177": "getImageRegionId(uint256)", +"d22bdce2": "_getNextStage()", +"d22c391a": "validateProposedThroneRules(uint256,uint256,uint256,uint256,uint256)", +"d22c78f8": "getPlanetDetails(uint256,uint256)", +"d22d9c6d": "tokensInUse()", +"d22dee48": "claimProfit(uint256)", +"d22e7b69": "validatePublisher(address,bool,string)", +"d2305f07": "getCloneArray(uint256[])", +"d230e875": "MaxValue()", +"d232790d": "setLastWinner(address,uint256,uint256,uint256)", +"d232a8f5": "firstStageCap()", +"d23376ec": "getPOOL_edit_14()", +"d233e5c0": "oxen(address)", +"d233fc0b": "changeRecovery()", +"d235f947": "setMaxHealthAndMana(uint256,uint32,uint32)", +"d23628f1": "CyberRailNET()", +"d2368f64": "Billing(uint256,uint256)", +"d237a427": "TT()", +"d237b43f": "reclaimResourceDeposits(address)", +"d237bc74": "paymentSizeC()", +"d238cd1b": "redeemVoucherSingle(uint256,address,address,uint256)", +"d238ec90": "HWGLToken()", +"d2395dcd": "buyTokens(address,uint256,uint256)", +"d239ea8b": "getSchemasLenght()", +"d23ad39d": "setCommons(address)", +"d23b8f5c": "drawDailyWinner()", +"d23dcee0": "_generateTokenURI(bytes32[],uint256)", +"d23df2d1": "RENEX_SETTLEMENT_ID()", +"d23e09f5": "trioContract()", +"d23e8489": "transferOwnership(uint256)", +"d23ea159": "eGoldchainStart()", +"d23ef360": "setExchangeRegulatorWallet(address)", +"d23f0abb": "issueTokensForPresale(uint256)", +"d23f1bba": "noBets()", +"d23f4450": "scoreDown(address)", +"d24155c1": "getAmountBonusRate()", +"d2415852": "TheDivine()", +"d241ead8": "testMinReturn0WithReturn()", +"d242448c": "transferredCrowdsale()", +"d24257c0": "betAmount()", +"d2427db5": "checkTotalPayout(address)", +"d242b051": "reserveWaveLockup()", +"d243ec26": "payDev()", +"d244059a": "whiteListLimit()", +"d24481ea": "checkWin()", +"d24594b8": "canApply(uint256,bytes32)", +"d245a084": "TransactionRefundedAfterDispute(uint256,uint256)", +"d245aa92": "endBlockBonus3()", +"d245da28": "updateEarlyParicipantWhitelist(address,address,uint256)", +"d2467e31": "GetSellingTokenDecimals()", +"d246a8c9": "lastNegativeVoting()", +"d246b379": "calculateRevenue(uint256,uint256,uint256)", +"d246d411": "burnAddr()", +"d247160a": "ethertoteDevelopmentTransferComplete()", +"d24876b7": "sellCMTAgainstEther(uint256)", +"d248cf1f": "DASHABI(uint256,string,string)", +"d24987fc": "getNewTokenPrice(uint256)", +"d24999ca": "getkillerPriceConversionFee()", +"d249a52e": "update(bytes,uint256[],uint256[])", +"d24ac764": "getRejectionCount(uint256)", +"d24b06b7": "registryRequestCustodian()", +"d24b08cc": "callstoredaddress()", +"d24b62a8": "lotteryReset()", +"d24b7090": "_payEtherAndDistribute(uint256)", +"d24b7e7a": "setEthPrice(uint128)", +"d24bcb15": "usechainWallet()", +"d24bcf54": "getEarlyIncomeByAddressRound(address,uint256)", +"d24c48bc": "getLiquidationSpreadForPair(uint256,uint256)", +"d24c5a36": "random1()", +"d24c8fe4": "_getCurrentStage()", +"d24d11ad": "BattleProvider(address,uint256,uint256,uint256,uint256,uint256)", +"d24ddcfe": "buyKissBTC()", +"d24ecc10": "initializeSale(uint256,uint256,uint256,uint256,address)", +"d24ef4f3": "PLATFORM_DEVELOPMENT()", +"d24f8a17": "convertShortedTokensToLiquidationToken(uint256)", +"d2500033": "RISE()", +"d25090ff": "withdrawContribution(uint256)", +"d25119c7": "getMsgHash(address,string,string)", +"d2521034": "marriageStatus()", +"d2526418": "getFeePercent(address)", +"d2531590": "CANCEL_EXTRA_GAS()", +"d2536893": "setDividendWinners(uint256[],uint256[],uint8[],uint256)", +"d2548393": "team2019TokenCreated()", +"d255494a": "removeInventory(bytes32)", +"d25570f2": "AliceToken(uint256)", +"d2558fca": "Token3D()", +"d2559533": "WinancesToken()", +"d256451c": "setRates(uint256,bytes32[],uint256[])", +"d256c7a5": "setTokensPerEther(uint256,uint256)", +"d2571062": "setAllContracts()", +"d2577fec": "_getRoleSignature(address,bytes32,address)", +"d258d7b6": "test_4_generateTokensAccrossBlocksAfterDestroy_increaseBlocksBy1000()", +"d258f2f4": "TeTeToken()", +"d2591068": "TLCMarketCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"d259224a": "ssstt()", +"d2598c4c": "removeTrader(uint8)", +"d2599300": "savedReferral(address)", +"d2599312": "initShareRule4Publicity()", +"d259d761": "changeAdminContract(address)", +"d25a1212": "revokeAttributeSigned(address,uint8,bytes32,bytes32,string,bytes)", +"d25a13b4": "roundTwoBlock()", +"d25a5be9": "airdropTotalSupply()", +"d25b3ee1": "AcademiCon()", +"d25b4f2a": "CrowdsaleRC()", +"d25c0767": "isSaleAuction()", +"d25d19e2": "SetThrdOwner(address)", +"d25d603c": "cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32,string)", +"d25dc056": "transferToWinner(address,address,uint256)", +"d25e3443": "ISLToken(uint256,string,string)", +"d25f08b1": "adminAddICO(uint256,uint256,uint256,uint256,uint256,uint256[],uint256[],bool)", +"d25f1c35": "CPGPEREGRINE_MAX_CARGO()", +"d25f82a0": "getAirdrop()", +"d25ff342": "MNXToken()", +"d2602930": "RockPaperScissors()", +"d26031ab": "phase2EndingAt()", +"d261de38": "NVCTToken()", +"d261fbed": "addressCallWithArray(address[3])", +"d2620e2d": "holdOf(bytes32)", +"d2625fce": "pendingOracleB()", +"d2631e42": "changeRewardManager(address)", +"d263b7eb": "ownerkill()", +"d263be48": "myWallets()", +"d263d2a4": "setWildCardToken(uint256)", +"d264a878": "getOraclizeWinnerTimeOffset()", +"d264cfdc": "lockAccountOf(address)", +"d264e05e": "forward()", +"d2650fe5": "RedeemEvent(address,uint256,uint256,uint256,uint256)", +"d2651855": "changeERC20(address)", +"d2654219": "getCurrencyDenominated()", +"d2656069": "SmartContract_Allowed(address)", +"d26574ac": "setCardPerkText(uint256,string)", +"d2663184": "setDividendCardAddress(address)", +"d266e83b": "isActive(address,uint256)", +"d2670025": "REQ()", +"d2676711": "getCommentAccountsLength()", +"d267dc96": "Tradenexi()", +"d2689abc": "ecdsaverify(uint256,uint256,uint256,uint256,uint256)", +"d269ae55": "MAX_ALLOWED_TOTAL()", +"d26c8a8a": "coinBalance()", +"d26cbe1e": "Contributed(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d26cfeae": "setMinAmount4Round(uint256)", +"d26da39e": "isRequestFromOwnerOrMeterKey(address)", +"d26dbd2a": "preSaleTokensDisbursed()", +"d26ee061": "getAvailableFundsForTheTeam()", +"d26f9cd7": "backofficeRedeem(uint256)", +"d26ff86e": "submit(bytes32,bytes32)", +"d270085e": "addNoFeeAddress(address[],address[])", +"d270b8e8": "tokenDistributionEndTime()", +"d270cbaf": "buyAAC()", +"d270e7ab": "mainContract()", +"d271011d": "transferEthers()", +"d2715a6b": "getEmblemOwner()", +"d2718fbe": "setOwnerFlag(uint256,uint8)", +"d271900d": "linkContract(address)", +"d2719d22": "btcRate()", +"d271b067": "ln(int128)", +"d2727e6c": "_oneTokenInWei()", +"d2728f90": "Bought(uint256,address,uint256)", +"d273285b": "createdWallets()", +"d27399b5": "countAddressesSet()", +"d27416ec": "verify(bytes32,uint8[5],bytes32)", +"d27482a4": "claimOwner(address)", +"d274b230": "registerFor(address,address,uint256,uint256,uint256)", +"d274fa91": "amendRetention(uint256,uint256)", +"d2756e11": "finalizeNumber(uint256)", +"d2758538": "createOneDrink(string)", +"d2760b64": "_isBuying()", +"d27626fd": "pushToken(address[],uint256,uint256)", +"d2769df1": "isValidComposition(uint256[],uint256)", +"d276a3e1": "auctionedEth()", +"d2786ba4": "getMetaData()", +"d2789aa5": "getPrivilegeState(string)", +"d279830c": "addMilestone(uint256,uint256,uint256)", +"d279c191": "claimReward(address)", +"d27a43f6": "_checkWin(uint256,address)", +"d27a6f28": "ZyPPACrowdsale(uint256,uint256,uint256)", +"d27aa18e": "Secure()", +"d27bf2e3": "getCurrentLocation()", +"d27d1bc4": "proposalsNumber()", +"d27d3e88": "bulkSend(address[],uint256[])", +"d27f41cd": "CharityInProgressWallet()", +"d27fcf96": "gmtFundAddress()", +"d27ffef1": "OLIFEToken()", +"d282866a": "whichTick(uint256)", +"d282db01": "_withdrawal(address)", +"d2835c58": "P4P()", +"d283833d": "toekensForTeam()", +"d283859d": "removeBlack(address)", +"d2840362": "addAdvisors(address,uint256,uint256)", +"d28442ef": "ownerProfit()", +"d2846c7b": "isProxyContract()", +"d285b7b4": "loan()", +"d286dbf2": "internalNewRound(uint256,uint256)", +"d2871105": "tokensIssuedBySTO()", +"d2874e49": "withdraw(address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"d2879f47": "_getContractTokenBalance()", +"d2886ebc": "getUserSkills(address)", +"d288c878": "blackListERC20(address)", +"d289ade2": "payFee(uint256)", +"d289eb82": "buyMultipleItems(uint8)", +"d289f187": "_addBonus(address,uint256)", +"d28a4f9e": "setKyberContractAddress(address)", +"d28ae9ef": "calcMiningSharesAmount(uint256,uint256)", +"d28b5317": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address,string,int256)", +"d28be797": "getShitClonelordReq()", +"d28c25d4": "changeGreeting(string)", +"d28c2aaa": "fix_parents(uint256,bool)", +"d28cb7b5": "availableWallet(address)", +"d28cbded": "ERC20Token(uint256,string,uint8,string)", +"d28d4e0c": "queryAllAccounts()", +"d28d8852": "_name()", +"d28dcdea": "haltPurchase()", +"d28e4355": "updateClaimable(uint256)", +"d28e88bd": "freezeDateOf(address)", +"d28f95ba": "withdrawalEth()", +"d28fa960": "withdraw_all_funds()", +"d28fdde8": "updatePrice(uint256[])", +"d2901c47": "RATE_SOFT()", +"d290ee06": "revokeTokenTimelock(address,uint256)", +"d291fa81": "GetMinerAt(uint256)", +"d29208d4": "MasterCoin()", +"d292515d": "totalMintNums()", +"d292b920": "CryptaurMigrations()", +"d292e6cb": "_sendPriceUpdate(address,uint256)", +"d294cb0f": "accountBalance(address)", +"d294f093": "claimFees()", +"d2953f84": "assetByIndex(address,uint256)", +"d29543af": "FolioNinjaToken(address,address,uint256,uint256)", +"d296853a": "whitelistPreSaleAddress(address,bool)", +"d2968a7f": "addContribution(address,uint256,uint16)", +"d2970120": "getSettlingTimeoutBlock(bytes32)", +"d29709fb": "returnDeposit(address,uint256)", +"d2973f93": "setUserType(address,uint256)", +"d2983dfd": "LoadedRefund(address,uint256)", +"d299dac0": "blake2b(bytes,bytes,uint64)", +"d29b5d2f": "mintReputation(uint256,address,bytes32)", +"d29c8c96": "createdBlockOnCommitsPhase(uint256,address)", +"d29cafe1": "ZilliqaToken(address,uint256)", +"d29cbd60": "getMonsterBaseStats(uint64)", +"d29d44ee": "_transferOwnership(address)", +"d29d503c": "addHolder(address,uint256,uint8,uint256)", +"d29d91ca": "getNarcoHomeLocation(uint256)", +"d29db7e4": "_processPurchase(address,uint256)", +"d29dd76d": "whitelistAdmins(address)", +"d29e2746": "place_buy_order(uint16,string,address,string,string)", +"d29e319c": "TOKEN_ICO3_LIMIT()", +"d29e6803": "secretHash()", +"d29ebd2e": "privateOfferingSupply()", +"d29f541d": "getPosition(uint256,address)", +"d2a09b96": "_updateReferrals(uint256,uint256)", +"d2a17959": "transferTokensFromVault(address,uint256)", +"d2a1e045": "FuBi()", +"d2a2feaa": "STRI()", +"d2a32c12": "bonus_amount()", +"d2a3899c": "payOrder(uint256,uint256,uint256)", +"d2a3b190": "SAToken()", +"d2a405f7": "_issetConverter(address)", +"d2a4ccc5": "redeemBuzzCafeBal()", +"d2a569c3": "startAirdrop()", +"d2a59d69": "dragons(uint256)", +"d2a6629c": "playerActiveGames(address,uint256)", +"d2a6cf5e": "internalTrade(uint256,uint256,uint256,uint256,uint256,uint256,bool,address,address,bytes32)", +"d2a718ec": "isRefundLocked()", +"d2a753e4": "cancelBid(address,bytes32,int32,bool)", +"d2a764d1": "contributeInBNB()", +"d2a79e57": "tixPresaleDeposit()", +"d2a7d38a": "MIN_FUNDING_AMOUNT()", +"d2a7ea17": "setSelfAsPureShareholder(string)", +"d2a86985": "_ORAK()", +"d2a9b6ed": "getVotingFor(address)", +"d2aa24b6": "getControlInfoMaxPerBlockImbalanceList()", +"d2ab6be1": "start(uint8)", +"d2ab78b7": "getGameName(address)", +"d2ac0f59": "setHeroContract(address)", +"d2ac1c8e": "addApprovedAddress(address)", +"d2ac2d8a": "heldOf(address)", +"d2acbc0d": "card_metal_minamount()", +"d2accad3": "_changeText(uint256,string)", +"d2ace0cc": "_newVoting(bytes,string)", +"d2ae5f65": "earlyInvestorTokenRaised()", +"d2ae8eaa": "getGenesForSale()", +"d2aeb90f": "removePoweruser(address)", +"d2aee00b": "getCanAttackMonsterIds()", +"d2afa8c1": "isERC721()", +"d2afeeeb": "createBoard(bytes32,bytes32,uint256,uint256,uint256)", +"d2b001fb": "PREMIUM_TYPE_COUNT()", +"d2b022d5": "pendingWithdrawalsBalance()", +"d2b0d554": "getDisclaimer()", +"d2b10b75": "AirDropContract(address,address)", +"d2b1569e": "redeemRewardedAxies(address,uint256)", +"d2b3fe93": "updateRoundLimits(uint256)", +"d2b420ce": "isOfferSorted(uint256)", +"d2b4a460": "getJackpotFee(uint256)", +"d2b50743": "DOW_FRI()", +"d2b5c227": "AsideTokensHaveBeenAllocated(address,uint256)", +"d2b5d9e1": "refferalFee()", +"d2b73cea": "getActiveContractAddress(uint256)", +"d2b74f70": "CryptoFamousStorage()", +"d2b75b70": "_upsert(address,uint256,bool,bool,uint256)", +"d2b77264": "pollMap(bytes32)", +"d2b78529": "getContractNetBalance()", +"d2b7d957": "executeDelegatecall(address,uint256,bytes)", +"d2b8035a": "draw(uint256,uint256)", +"d2b8915c": "offerPosition(uint256,uint32,uint256)", +"d2b8b867": "doPayment(uint256)", +"d2b93303": "EternalToken()", +"d2b962f2": "createLiability(bytes,bytes)", +"d2b9da84": "Office(string,string,uint256)", +"d2ba499c": "IS_SIGNATURER(address)", +"d2ba5537": "numberOfClaimants()", +"d2ba8073": "minbid()", +"d2bafbe6": "setMaxCoordinate(uint256)", +"d2bb6fd5": "timeTier2()", +"d2bbda29": "registerName(string,address,string)", +"d2bbf6df": "getIndexId(address,bytes32)", +"d2bd3dd9": "YAP()", +"d2bec28c": "startCraftingAuction(uint256,uint256,uint256,uint256)", +"d2bf36c0": "getPackData(uint256)", +"d2bf779f": "getKingdomInformations(string)", +"d2bfd24b": "setgamecard(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d2c03c01": "auto_withdraw(address)", +"d2c0e032": "set(address,string,string)", +"d2c18e0b": "api()", +"d2c18f59": "emergencyManager()", +"d2c33eb2": "claimRaisedWei(address,address)", +"d2c37621": "getUserLocalTokenBalance(address)", +"d2c3a1ec": "updateStageInfo(uint256,uint256)", +"d2c411d3": "closeBatch(uint256)", +"d2c49b7f": "getTimeUntilEnd(uint256)", +"d2c51c72": "withhold()", +"d2c5c368": "testFailRestartNotUpdatable()", +"d2c5ce31": "dateTimeAddr()", +"d2c73093": "createTokens(uint256,address)", +"d2c731d9": "TermsOfUse()", +"d2c877f8": "setDollarRate(uint256)", +"d2c87b02": "MB(address,address,address,address,address)", +"d2c936ff": "currentBonusLevel()", +"d2c94ec5": "C4FToken()", +"d2ca159a": "listUnconferences()", +"d2ca2115": "periodLength()", +"d2cad255": "BankDeposit(address,uint256)", +"d2cad6da": "bonusCalculate(uint256)", +"d2cae700": "getAllFailedInvestmentsCollected()", +"d2caeea8": "aomucoin()", +"d2cafe2d": "allAssetsOf(address)", +"d2cbcea6": "getSSP(address)", +"d2cc7015": "placeMove(uint8)", +"d2cc718f": "accumulatedInput()", +"d2cced90": "getAnnualInterest(uint256)", +"d2cd9673": "totalMining()", +"d2cd96bd": "changeQuorum(uint256)", +"d2cdf580": "setKYCpassed(address)", +"d2ce33f8": "preMinting()", +"d2ce89e5": "logoURL()", +"d2cf7704": "BanAttempt(address,address,uint256)", +"d2cfe5a7": "posscoin()", +"d2d0ded1": "referrerBonusPercent()", +"d2d0e066": "deposit(address,uint256,uint16)", +"d2d10162": "initialize(address,address,uint256,uint256,address,address)", +"d2d10be8": "TGEToken(string,string)", +"d2d153a4": "Grand_Solar_Minimum()", +"d2d21e85": "sendToNest(uint256)", +"d2d26edc": "Cloudcoin()", +"d2d3b8e0": "multiAllowance(address,address[],address[])", +"d2d3d7fb": "fetchAllVoters()", +"d2d42074": "getExchangeContractAddress()", +"d2d44955": "Cindicator()", +"d2d4bd72": "getCrossRate(bytes,bytes)", +"d2d5a55c": "ownerValidator()", +"d2d7231f": "calculateReward(uint256)", +"d2d791c0": "payBatch(bytes32[],uint256[],address,address,bytes)", +"d2d85cf2": "rootsMatch(address,address)", +"d2d8cb67": "TOKEN_PRICE()", +"d2d8fd0a": "settleFrom(address,address,uint256)", +"d2d92f24": "getWhitelistEntry(uint256)", +"d2d93f90": "ethRate()", +"d2d976da": "webpage()", +"d2d97d9f": "coldStorage()", +"d2d9b8c6": "setCompte_24(string)", +"d2d9d44e": "awardTitanium(address,address,address)", +"d2da29c7": "hostAddress()", +"d2db29af": "claimFutureUse()", +"d2dc0869": "add(string,uint256,string,string,address)", +"d2dcd933": "totalSupplyAtTime(uint256)", +"d2dd8d2a": "authorized_updateCardClaimerAddress(uint256,address)", +"d2dd9f79": "transferVault(address)", +"d2ddf1ae": "TradingForest(address)", +"d2de6cca": "getArrayValueByKey(string,string)", +"d2de6ec5": "distribute(uint256,uint256,uint256)", +"d2de9989": "stopPreIoc()", +"d2df254c": "weiToUSD(uint256)", +"d2df9222": "recoverStockKey(bytes12)", +"d2df9cc1": "startTimeSaleNoBonus()", +"d2e013d9": "Execution(string,string,string,string,string,string)", +"d2e01b2f": "getLockPosition(address)", +"d2e0637b": "createContractTot(string)", +"d2e10879": "getReceiptRoot(uint256)", +"d2e1d201": "setstring(string,string)", +"d2e2acf5": "_proxyTransferEvent(uint256,uint256,uint256,bytes32)", +"d2e3646c": "optionsConverter()", +"d2e474b3": "PROMOTORS_POOL()", +"d2e73d78": "withdrawDepositorFunds(address,uint256)", +"d2e78ace": "DestructionContract()", +"d2e80494": "setConversionRate(uint256)", +"d2e81bf9": "initPlayer(address)", +"d2e8309e": "test_messageSenderEq()", +"d2e90d0f": "startTimeICO()", +"d2e91b85": "getset()", +"d2e9236b": "sendEthValue(address,bytes,uint256)", +"d2e9953a": "setAdmin(address,address,bool)", +"d2ea7f7f": "CreditDAOfund(address)", +"d2eb6483": "EVMDB()", +"d2ecb4f9": "initialAllocation()", +"d2ed2d30": "setWorst(uint8)", +"d2eda057": "checkBool(bool[])", +"d2eeead7": "PatrickTestCoin()", +"d2ef0669": "denyAccess(address,address)", +"d2ef3b0d": "getCreateShareTokenMarketValue()", +"d2ef7398": "challenge()", +"d2efeef3": "TradableTokens()", +"d2f03bf6": "registerWithETH(address)", +"d2f070b9": "email(address)", +"d2f0be99": "getRefund(uint256)", +"d2f1f189": "ICOAddress()", +"d2f1f712": "getVoters(uint128)", +"d2f27cf4": "setCelebrityPrice(uint256,uint256)", +"d2f28141": "calculateBonus(uint256,address)", +"d2f2d549": "CLPTestNetToken()", +"d2f32d94": "get_card()", +"d2f343c7": "timeWindow()", +"d2f3b963": "dateICOEnded()", +"d2f3ea43": "getPurchaseAmount(uint256)", +"d2f40cab": "getFunctioName()", +"d2f4a50a": "wallets()", +"d2f5e28b": "requestEthereumPrice(string,string)", +"d2f65fbc": "setMockBytes32(bytes4,bytes32)", +"d2f6f67d": "mintingContract()", +"d2f7265a": "exchange()", +"d2f7c5db": "GetDetail(address)", +"d2f7f377": "testRegisterNickWalletEth()", +"d2f80c15": "addDivisionJurisdiction(bytes32[],bool[])", +"d2f82026": "quickSortBids()", +"d2f8dd45": "Owned(address)", +"d2fa1f8b": "proxyPurchases(bytes32)", +"d2fa635e": "setMaxGasPrice(uint256)", +"d2fa9a67": "RESERVED_TOKENS_FOR_FURTHER_TECH_DEVELOPMENT()", +"d2fabaec": "VITToken()", +"d2faf216": "withdrawBuyer(address[2],uint256[7],uint8,bytes32[2])", +"d2fafb19": "setAmount(address,uint256)", +"d2fb32c2": "getGen0ObjInfo(uint64)", +"d2fb8787": "recordExists(bytes)", +"d2fbbc51": "ADVISORS_TOKENS_PERCENT()", +"d2fbd0ed": "payOrder(uint256,uint256)", +"d2ff5d4f": "allWETHbalances(address,address[])", +"d2ff8fd8": "ICOtokensSold()", +"d2ffca2d": "currentTotalExcess()", +"d2ffd541": "mintAdminCancel(address,address)", +"d30047bc": "firstPreSaleEndDate()", +"d3006dea": "ValueFinalized(bytes8)", +"d300746f": "pullTokensBack()", +"d300a034": "oraclize_query(string,bytes[])", +"d300a968": "isSecurityToken(address)", +"d3017193": "addUser(address,uint256)", +"d301c85f": "ownerAllocateTokensForList(address[],uint256[],uint256[])", +"d30272b8": "signAgency(uint256)", +"d302af4a": "isAirdropContract()", +"d302b0dc": "unFreeze(uint256)", +"d303b750": "Coupon(address,uint256,uint256)", +"d303e3b2": "checkMidiNoteValue(uint8)", +"d3050195": "_ownsRobot(address,uint256)", +"d305399d": "addToWhitelist(address,uint16,uint256)", +"d305577e": "GSSingle(uint256)", +"d305671a": "Dario(uint256,int256,uint256)", +"d3057859": "trade(uint8[2],bytes32[4],uint256[8],address[6])", +"d30592c6": "_trim(uint256[],uint256)", +"d3059c91": "maxTokensForCommand()", +"d305a45d": "requestDivident()", +"d3062b24": "getIndicesWithClaimableTokensForBuyers(address,address,address,uint256)", +"d3066879": "withdrawVestings(address)", +"d306967b": "TokenCreated(uint256,string,uint256,address)", +"d30792d4": "bonusesMapPos(bytes32)", +"d30796a2": "OwnerTransfer(address,address,uint256)", +"d307cd53": "_b4(string,uint256)", +"d3087ff5": "startOpenPpTime()", +"d3088b52": "transferWithMessageAndRequestAddress(address,uint256,address,bytes)", +"d3088b5f": "CesaireToken()", +"d30895e4": "player1()", +"d308cbe2": "withdrawMoneyByAdmin(uint256,address)", +"d30920c1": "contractTotalInvested()", +"d3098883": "memberFee()", +"d30a119b": "calculateBonusTokens(uint256)", +"d30a1325": "checkProposalExistence(string)", +"d30a512e": "betOnColumnOrDozen(bool,bool,bool)", +"d30a969a": "RemiCoin(uint256,string,string,uint8)", +"d30b5386": "payFee(bytes32,uint256,address)", +"d30bbde8": "checkWorkingInfra(uint256,uint256)", +"d30beffa": "unholdGold(address,uint256)", +"d30bf323": "setTaskRewardPaid(bytes32)", +"d30c0a64": "encodeUint(uint256)", +"d30cad77": "nextRoundDuration()", +"d30e2004": "setRegionUrl(uint256,uint8[128])", +"d30e268b": "saleTokensPerUnit()", +"d30e9302": "distributionTokens()", +"d30f945a": "setNewManager(address)", +"d30fa946": "fulfillDeliverable(bytes32)", +"d30fbd0d": "safeSubtract(uint256,uint256)", +"d30fc8a1": "FundsAdded(uint256)", +"d3100538": "YOLOCASH()", +"d3109af3": "drainWei()", +"d310bc32": "releaseName(string)", +"d3111d3f": "_getLockedAmount(address,address)", +"d3115524": "_bptc(uint256,uint256,uint256,uint256,address)", +"d3118a5a": "addDoc(string,string)", +"d3119dc0": "minEtherForAccounts()", +"d311b44d": "everyBidFee()", +"d312846b": "uniqueContributors()", +"d313f235": "terminateTokenSale()", +"d3140a65": "createOpenLockAndDraw(address,address,uint256)", +"d3146a46": "Claim_TRAC_9600()", +"d316e912": "deleteGrantee(address)", +"d3183864": "calculateMultiplierAfterBurn(address,uint256)", +"d3195184": "_canNowTransfer()", +"d3195c82": "refundTransactionAfterDisputeFee(uint256)", +"d319ab75": "getProposalContractor(uint16,uint16)", +"d31a8be1": "setCentsPerEther(uint256)", +"d31af484": "updateTokenUri(uint256,string)", +"d31b3320": "getUserTokenInfo(address)", +"d31c153c": "AllocateAgentChanged(address,bool)", +"d31cfed6": "initialMonthWithdraw(uint256)", +"d31d7b0a": "MoonCatRescue()", +"d31efc7e": "createHero(string,uint16,uint16,uint16)", +"d31f0f38": "RamenCoin()", +"d31fdffd": "setHammer(address)", +"d31feea1": "OpenLongevity()", +"d31ff13c": "changeContractOwner(address,string)", +"d320ac9a": "DonationDeposited4Matching(address,uint256)", +"d321fe29": "getAmount()", +"d3220144": "newPriceDecreaseRate(uint256,uint256)", +"d3226425": "DuMangoCoin()", +"d324191c": "Codexstandard()", +"d3251aa2": "setHelpCoinAddress(address)", +"d3257034": "AgriChainCultivation()", +"d3258b9e": "DevDorothyCoin()", +"d325c2e8": "revertPurchase(address)", +"d3261592": "dripRate()", +"d32632fd": "migrationGate()", +"d327523a": "getTotalNumberOfBoards()", +"d329ce51": "developer_cycle(address,uint256)", +"d32a7ee0": "updateLand(uint256,uint256,uint256,uint256)", +"d32a9cd9": "settle(bytes32,bytes32)", +"d32ab21d": "voteFor(uint8,uint8,uint8)", +"d32aba42": "getPresaleBonusAmount(uint256)", +"d32b1bea": "encodeAddress(address)", +"d32b607c": "sumElements(uint32[])", +"d32b8575": "_startAuction(uint256)", +"d32c943a": "resolveChallenge(bytes32)", +"d32cb0fe": "exercise()", +"d32cbabb": "Ast()", +"d32e245b": "getContributorRemainingCap(uint256)", +"d32e29de": "setApproveFee(uint256)", +"d32e48c0": "LockOpen(address)", +"d32ef1e5": "RhodonToken(address)", +"d3309a7e": "productTribe(string)", +"d3313802": "EtheraffleDisbursal(address)", +"d331aeb3": "getAllFiatTransactionsCount()", +"d331b696": "computeNameFuzzyHashET(string)", +"d33219b4": "timelock()", +"d333d7cf": "destroyShares(address,uint256)", +"d333ec79": "changeServiceAccount(address)", +"d334d75b": "expireLoan()", +"d3363dd7": "icoThresholdBonus3()", +"d3364687": "PRESALE_START()", +"d33656e0": "primaryOperator()", +"d336ac80": "getPersonInfo(uint256)", +"d337616e": "resetLottery()", +"d337b9c9": "myWeapons()", +"d337ce86": "addProject(uint256,string,address,uint256,uint256)", +"d337e72e": "EtherToken2()", +"d3382a55": "whitelistRate()", +"d3392545": "spawnItem(uint256,uint256,address)", +"d33abd33": "t_2nd_StageEnd()", +"d33b79d9": "addBallotAndVoterNoPk(bytes32)", +"d33c0a4d": "getMyCells()", +"d33c449f": "gesamtGuthaben()", +"d33ca02b": "externalCall(address,uint256,uint256,bytes)", +"d33cf9fa": "MultiSigMint(address)", +"d33d1aac": "getWeeklyTokensForWebsitesAmount()", +"d33d5f3e": "CLOSE_TIME()", +"d33d6732": "totalSupplyMintTransfer()", +"d33d6f65": "Delivery(address,uint256,uint256,int256,int256,int256,int256,address)", +"d33e1a48": "genRNGContractAddress()", +"d33ecfee": "setResume()", +"d3400a1d": "etherRatioForOwner()", +"d34047b6": "mint(address,string,bytes32)", +"d340ab41": "addInvestorBonusInTokens(address,uint256)", +"d340dd8a": "getCCH_edit_13()", +"d340e8f8": "setDistributionPercentage(uint256,uint256,uint256)", +"d341281a": "ALH()", +"d3418fb7": "capOfTotalSupply()", +"d3419bf3": "prices()", +"d3419d4e": "TokenAiContribution(address,address,address,address,address,address,address)", +"d341e052": "JoyGameDemo(address,address)", +"d342275e": "setProgress(uint256)", +"d342c598": "Bou(address)", +"d342e4f4": "runInOneDay()", +"d3437bd3": "ProofOfStableClone()", +"d3437fe0": "assertFact(uint256,bytes)", +"d3446856": "tournamentPaused()", +"d344e01b": "stopTransferToken()", +"d3451379": "updatePower(uint256)", +"d3456121": "amountInContract()", +"d3462259": "howManyTokens(uint256,address)", +"d346feb8": "changeCertBot(address)", +"d3471035": "KarmaToken()", +"d347c205": "transferableTokens(address,uint64)", +"d347de03": "setPlayerGeneralCd(uint64,uint32)", +"d3481bd0": "buyBlock(uint256,uint256)", +"d3484c1c": "TOKEN_SUPPLY_MAINSALE_LIMIT()", +"d348b409": "calculatePrice()", +"d348ee9a": "correctResult(int16)", +"d349f8b4": "MobileGoToken()", +"d34a280a": "setPreAmounts(uint256,uint256)", +"d34a412c": "switchRankings(uint16,uint8,uint64,uint64,uint64,uint64,uint64,uint64)", +"d34acd12": "functionCalls(uint256)", +"d34afaff": "getLatestIndex(address)", +"d34b1537": "minFundingReached()", +"d34b1aef": "returnUnsoldSafeLarge()", +"d34b2451": "BurritoPurchased(uint256,address,uint256)", +"d34b6cd3": "BBDToken(uint256,uint256,uint256,uint256)", +"d34b7e25": "checkWin(uint256[])", +"d34bb772": "EndsAtChanged(uint256)", +"d34be5be": "startVotingPrepare(address)", +"d34cc179": "updateDaoContract(address,string)", +"d34d8e43": "oracleItQuery(string,string,uint256,uint256)", +"d34dd1f0": "safeWithdrawal(address,uint256)", +"d34e4b20": "getWinnerHistory(uint256)", +"d34ed095": "getSoilTempException(bytes32)", +"d35066e6": "rsrvToSale(uint256)", +"d3511f82": "getRoundBetNumber(uint256,uint256,uint256)", +"d3516b7e": "setVote(uint256,bool)", +"d3525adf": "setMetadata(bytes32,bytes32)", +"d35262ef": "getInt256Min()", +"d3528d9b": "createBetAcrossDeposit(bytes16,bytes16,bytes16,bytes16,uint256,uint256)", +"d352a862": "ownerOfTwitterId(uint256)", +"d3535452": "buyPosition(address)", +"d353a1cb": "finish(uint256)", +"d3554dd5": "NieShichaoToken()", +"d35590c2": "sponsors(address)", +"d355f139": "requestBatchLoans(uint256)", +"d3565934": "YANG()", +"d3568560": "calcDates(uint256,uint256)", +"d356a28b": "addSERAPHIM(address)", +"d356a879": "removeAddressByIndex(uint256)", +"d357aa15": "raise2ndAppeal()", +"d357f0ce": "_checkPixelLeft(uint256)", +"d357ff87": "sweepRoundsActive(bool)", +"d359b0c7": "XeniaToken()", +"d359be70": "distributeExternal(uint256)", +"d359f82c": "updateExpiry(uint256)", +"d35ada32": "addParticipant(address,address)", +"d35b9d83": "codeAt(address)", +"d35bcf88": "addCET4(uint32,uint64,uint64,uint64,uint16,uint16,uint8,uint8,uint8)", +"d35c7372": "theCeiling(uint256,uint256)", +"d35c9a07": "withdrawProfit(address,uint256)", +"d35cf913": "mint_tokens(address,uint256)", +"d35d031e": "SellerChanged(address,address)", +"d35d90ba": "MPKToken()", +"d35e29d7": "mint(address,uint32)", +"d35e48e6": "PLBToken()", +"d35e6537": "IONIATOKEN()", +"d35e656b": "userNameTaken(string)", +"d35f0a16": "_getShares()", +"d35f4a99": "mint(int256,address,uint256)", +"d35fbbfb": "range(uint256,uint256,uint256)", +"d3604bc9": "yesContract()", +"d3614854": "getAdministratorETH()", +"d3617e7a": "MyToken(address)", +"d361ab64": "sendFreeTokens(address,uint256)", +"d3626d09": "getyestoday()", +"d3631e00": "refundUnconfirmed()", +"d3637c27": "icoArray(uint256)", +"d3650fb8": "approvers(uint256)", +"d365a08e": "masterAddress()", +"d365a3fb": "settleBet(uint256[],bytes32)", +"d366f83b": "allSidesPledgedAmount()", +"d366fbab": "startLottery(bytes32,uint256,uint256,uint256,uint256,bool)", +"d3670cb4": "BitcoinBlackToken()", +"d3671166": "PurchaseSuccessful(address,uint256)", +"d367a398": "NVTAddr()", +"d3695161": "deleteUser(string)", +"d369a744": "CCtestToken(address)", +"d36a1fa8": "ALKACOIN()", +"d36a35c9": "strikersBaseContract()", +"d36a8026": "Phoenix()", +"d36ae26b": "commBallotPriceWei()", +"d36afad5": "hasKey(address)", +"d36b96a9": "controllerFailed()", +"d36b9e64": "contributorsPeriodsElapsed()", +"d36bed21": "getGameAddressById(uint256)", +"d36bf8a1": "increaseWithdrawalChunk()", +"d36d9b19": "request_callback(uint8)", +"d36dbc0c": "addWineryOperation(string,string,string,uint256,uint16,string)", +"d36e0f39": "EIP20Token()", +"d36e9ac3": "burnUnused()", +"d36e9b2a": "RentalAgreement()", +"d36ef2cc": "PolicyPalNetworkCrowdsale(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d36f0e9c": "etherForCharity()", +"d36f5c87": "stitch(int256,int256,bool)", +"d36f69eb": "getEthInCents()", +"d3701ff2": "TongToken()", +"d3707129": "_removeShareFromLastOwner(address,uint256,uint256)", +"d3708487": "setInfoAboveSpot(uint256)", +"d37194f5": "getTotalDepositsAmountLeft()", +"d371d551": "addAddressToCappedAddresses(address)", +"d372e3a0": "isCrydrViewAddress(address)", +"d3732642": "FastRealisticPyramid()", +"d373507b": "setAllowSell(bool)", +"d37360a0": "efw()", +"d3749a15": "user_contract()", +"d375b921": "orderUsable(address[8],uint256[6])", +"d3775371": "has_reading()", +"d377bc5f": "lockedMoney(bytes16)", +"d377dedd": "currentNiceGuy()", +"d378f4e0": "NOOR()", +"d37990ce": "setGenerationSeasonController(uint256)", +"d379be23": "claimer()", +"d37a9bb0": "restrictTransfers()", +"d37aff82": "changeStatus(uint8,bytes32)", +"d37b34d7": "blacklistAccount(address)", +"d37b8a96": "deploy(string,string,uint8,string,address)", +"d37cd1d9": "TalentCoin(address,uint256,string,uint256,string,uint256)", +"d37d753f": "spin(address,uint256)", +"d37fe6cb": "balanceOfWithoutUpdate(address)", +"d3807fa5": "NameChange(string)", +"d380e036": "marketDefaultFeeLow()", +"d3811c0f": "setMetadataBase(string)", +"d38159b8": "testPass()", +"d38185d3": "_buyXid(uint256,uint256,bytes32)", +"d381ba7c": "setRootUser(address,bool)", +"d381c67e": "isRentAuction()", +"d383b80d": "getCurrency(bytes32)", +"d383f646": "issue()", +"d384077d": "_closeProvider(address)", +"d384af87": "checkpopa()", +"d384d177": "haveCommonPrefixUntilZero(bytes32,bytes32)", +"d385293d": "confirmTokenTransferToBooking(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d38537cf": "TimerAuction(string,uint256)", +"d385fac9": "bwin()", +"d38609f9": "unhaltFX()", +"d386130c": "Encrypt(uint256)", +"d38685ee": "unlockGlobalToken()", +"d3872d57": "getLandRevenue(uint256)", +"d387978d": "cancelled(address,bytes32)", +"d387c4c1": "getOwnedTokens(address,address)", +"d388089a": "getJobDetail(uint256)", +"d3884c3f": "removeService(bytes32)", +"d38875ec": "addDeal(uint256,uint256,string,string,uint256,string,bytes32)", +"d388e416": "getAccountReferalsStats(address)", +"d3890a43": "DaoCasinoToken(uint256,uint256,uint256,address)", +"d3895c91": "changeConversionRate(uint256)", +"d38ac5ac": "WayBackToken()", +"d38bd9f0": "newTokenOwner()", +"d38bee56": "PlaceSell(address,address,uint256,uint256,uint256)", +"d38bfff4": "transferGovernance(address)", +"d38c3253": "ownerSelfDestruct()", +"d38c4cca": "removeFromTokenTransferDisallowedAddresses(address)", +"d38cba4b": "paymentRewardTokensPriority(uint256,uint256)", +"d38d0f28": "updateSplit(uint256)", +"d38e5ab7": "TransferDisable()", +"d38eb9d3": "escrowFrom(address,uint256)", +"d38f3b68": "getMedications()", +"d38fe43f": "setMembershipContract(address)", +"d390021d": "getLastTimeUpdated()", +"d390e819": "disableDonationContract()", +"d391014b": "ROLE_ADMIN()", +"d391a970": "removeFromOwnedTokens(address,uint256)", +"d391ce7a": "CrowdsaleContract()", +"d3927c15": "reimburse()", +"d392c5a2": "getNumOptionChains()", +"d3933154": "MYL(uint256,string,string)", +"d393c871": "register(string,address,uint256)", +"d393cde5": "wholeLineWrong()", +"d393f628": "changeDemurringFeeOwner(address)", +"d3943976": "getSGCUsers(address)", +"d3943ab4": "setIntArr(uint256,uint256)", +"d3943c83": "numberOfWithdrawls()", +"d3946ea4": "manuallyEndAuction()", +"d394a12e": "secondPresaleStart()", +"d39502bb": "AIBITTECH()", +"d3953822": "getThisAddress()", +"d395ee0f": "setQuickBuyPath(address[])", +"d3962239": "getCustomerPassword(address)", +"d3964ca1": "operationsEthWallet()", +"d397e9e4": "getDisputeCrowdsourcer()", +"d397f861": "TRAC_Tokens_left()", +"d3980d87": "ReferenceToken(string,string,uint256,address[],address)", +"d398806d": "updateMinJump(uint256)", +"d399354b": "KYC_USD_LMT()", +"d39aa15c": "_getTransferFeeAmount(address,address,uint256)", +"d39b0cbb": "Start10()", +"d39b1d48": "setDistributeAmount(uint256)", +"d39b7e4f": "setBPAddress(address)", +"d39bbf06": "MAX_INVESTOR()", +"d39c7880": "setAddressOfERC20Token(address)", +"d39c9afd": "OwnerKill()", +"d39cb111": "getShortId(bytes32)", +"d39cce1c": "calculateSaleReturn(uint256,uint256,uint16,uint256)", +"d39ce83a": "paymentMixed(uint256,uint256,uint256)", +"d39cee11": "benchTransfer(address[],uint256[])", +"d39d8fce": "presaleStart_6_December()", +"d39de6e9": "getAuthorizedAddresses()", +"d39e4607": "LogIcoCompleted()", +"d39eb301": "getStatus(uint8,uint8)", +"d39ebe2c": "setup(uint8,uint8)", +"d39ec1fe": "currentTethers(address,uint256)", +"d39f4149": "fxpMul(uint256,uint256,uint256)", +"d39f532d": "SafeGift(uint256,string,string)", +"d3a057c8": "isConfigured()", +"d3a05872": "AutoFareCalculator()", +"d3a0d0ab": "RTokenBase(uint256,string,string,uint8,bool)", +"d3a2d050": "addData(uint256[])", +"d3a3086e": "ActorCoin()", +"d3a39686": "getAddress(bytes32,bytes32)", +"d3a516d3": "viewSuperOwner()", +"d3a56ec3": "processRequest(uint256,uint256,uint256)", +"d3a5768b": "RoundWinner(address,uint256)", +"d3a57b9f": "showRdWonNum(uint256)", +"d3a5dcb0": "EQUITRADER()", +"d3a60bd5": "Exchange(address,uint256,uint256,uint256,address,address)", +"d3a61150": "setDatabaseDownloadUrl(string)", +"d3a699cd": "PePaDe()", +"d3a6be66": "donotXXXDappToken()", +"d3a6c234": "benWallet()", +"d3a70dba": "getReaderId(bytes32)", +"d3a73d12": "modifyLevelCaps(uint256[])", +"d3a85394": "currentPeriodTokenCollected()", +"d3a86386": "minimumBid()", +"d3a871e9": "REELToken()", +"d3a9187e": "mintTemplate(uint256,int256,uint256,uint256,uint256,string)", +"d3a99388": "JcashUpgradeableToken(address)", +"d3aa22c7": "transferTLA(string,address)", +"d3aa831f": "testOwnedTryAuth()", +"d3aceae2": "_balance(address)", +"d3ae2814": "LogTokensFrozen(bool)", +"d3aefeeb": "pauseUnpauseICO()", +"d3af4dc7": "processRequest(uint256,uint256)", +"d3b0d9eb": "refundFunds(address)", +"d3b15dd6": "Millet()", +"d3b19ee1": "dislike_trackable(address)", +"d3b234fc": "getAttoTokensToBeFounder()", +"d3b246d0": "upgradeEvilMorty()", +"d3b25696": "tradeIntentOf()", +"d3b302e7": "applyForMembership(string)", +"d3b3809c": "EscrowGoods(address,uint256,uint256,uint256,uint16,uint256)", +"d3b3eccb": "isARTDistributed()", +"d3b4be21": "Obtener_Reputacion(address)", +"d3b5305c": "setAgriChainDistribution(address)", +"d3b5695c": "setOraclizeCallbackGasLimit(uint256)", +"d3b58024": "RepeatCustomerToken()", +"d3b5c016": "submitSolution(uint256,string)", +"d3b5dc3b": "precision()", +"d3b6486a": "setLeastFund(uint256)", +"d3b6664a": "purchaseTrophy(uint256)", +"d3b6ac97": "defenceElementBySubtypeIndex(uint256)", +"d3b6fbc2": "MOVIECREDITS()", +"d3b7576c": "update(uint256,bytes32)", +"d3b7bcf1": "preAllocation()", +"d3b7bfb4": "fundingAddress()", +"d3b7ef5e": "SCE(uint256,string,string)", +"d3ba95ce": "throwsWhenFinalizingIfNotMultisig()", +"d3bac6e3": "coordinatorAccountCount()", +"d3bbb2c8": "b13ToBytes(bytes13)", +"d3bc89b7": "GetGuestTokenNo()", +"d3bc9aca": "addCourse(uint256,string,uint256,uint256,string,string)", +"d3bca884": "addBalance(address,address,uint256)", +"d3bced2c": "withdrawBotFee(uint256)", +"d3bd5a4b": "resetUserPromoBonus(address)", +"d3bd6e23": "newUpdater(address,address)", +"d3bd7713": "setCapAtDuration(uint256)", +"d3bdbd8f": "editMilestone(uint256,uint256,uint256,uint256,uint256,string)", +"d3bdd242": "isMovingEnable()", +"d3bf0ce6": "AAP()", +"d3bfe76a": "revokeApproval(address,address)", +"d3c0715b": "vote(uint256,bool,string)", +"d3c13c25": "GCOXAPLToken(string,string,uint8,uint256)", +"d3c18378": "getPlayersBalance(address)", +"d3c1c838": "batchTransfer(address[])", +"d3c2a592": "claimAsset(uint256)", +"d3c33c52": "ipc()", +"d3c4055d": "VITE()", +"d3c41dae": "FindCourseBaseOnIdStudent(uint256)", +"d3c564ad": "tokenZLT()", +"d3c567c1": "cancelVoteForCandidateByStage(address,uint256,uint256)", +"d3c5ea45": "ICO_PHASE3_PERIOD()", +"d3c62676": "MiamiToken()", +"d3c65384": "ContributedAmount()", +"d3c65737": "sumICOStage4USD()", +"d3c683e5": "LOG_FailedDraw(address,uint256)", +"d3c6a6d6": "getWitnessCount()", +"d3c764f2": "buyPixelBlock(uint256,uint256,uint256,bytes32)", +"d3c78097": "startDistribuion()", +"d3c7adf9": "JimatCoin()", +"d3c7c2c7": "getSupportedTokens()", +"d3c7ca2f": "Allinone()", +"d3c8dd69": "Parent()", +"d3c8e99e": "_shareDiscountPrice(uint256,address)", +"d3c9ad17": "REBALANCE()", +"d3c9cc26": "getTokens(uint256)", +"d3caee1b": "currencyToToken(address,bytes16,uint256,bytes)", +"d3cc0c37": "batchVote(address,address[],uint256[])", +"d3cc8d1c": "claimTokensFromSeveralAuctionsAsBuyer(address[],address[],uint256[],address)", +"d3cce1d2": "setOldContractData(address)", +"d3cd6052": "getProposalCount(bytes32)", +"d3cdb97b": "partIndexToOwner(uint256)", +"d3cde1a5": "updateReferral(address,uint256)", +"d3cde1c0": "getIndexAndCheckIfAllowedToPublish(uint256,uint256)", +"d3cdf6c5": "calculateTokenAmount(uint256,uint8)", +"d3ce71df": "buyCozy(uint256,uint256,bool,address)", +"d3ce77fe": "destroyTokens(address,uint256)", +"d3cea787": "setContractServerBlackWhiteListType(string,uint256)", +"d3cecc4d": "checkVestingCondition(address)", +"d3cedfee": "sspCount()", +"d3d10d87": "OwnerChanged(bytes32,address)", +"d3d18836": "publicLock(address,uint256)", +"d3d19965": "deleteCroupier(address)", +"d3d2172e": "total_reward()", +"d3d37a31": "setSaleCap(uint256)", +"d3d3b01c": "ToRent(uint256,uint256,uint256,address)", +"d3d3d412": "getGateAddress(address)", +"d3d3dd85": "updateHpbBallotAddress(address,address)", +"d3d43efa": "returnLoanStatus(uint256)", +"d3d44e8b": "getBlockCount(uint256,uint256,bytes32)", +"d3d54129": "setPCAddress(address)", +"d3d55493": "calculateRefundAmount(uint256,uint256)", +"d3d6a975": "testThrowsTransferNotEnabled()", +"d3d70c3c": "setPrivelegedWallet(address)", +"d3d77f98": "setCoeff(uint8,uint128,uint8,bytes32,bytes32)", +"d3d864f5": "isFundingOpen()", +"d3d8aa55": "IG()", +"d3d8acf8": "checkMyVestingPeriod()", +"d3d9e741": "SuperCoin()", +"d3da927f": "isRegistered(address,address)", +"d3daa8aa": "EtheremonPayment(address,address,address,address,address)", +"d3db2371": "DHCSToken()", +"d3dbc861": "Initiate()", +"d3dc9794": "pendingTxs()", +"d3dcc175": "devTeam()", +"d3dccb03": "ERC20Token(string,string,uint8,uint256,address,uint256,address[],uint256[])", +"d3dcd55a": "calcTokensFromEth(uint256)", +"d3dd9a18": "addManyAuthorizeToWhitelist(address[])", +"d3ddebce": "STATE_BET_DISABLED()", +"d3de5834": "disableFeesForUser(address,uint256)", +"d3deedfd": "MANHATTANPROXY2NDST()", +"d3df2d01": "maxUsdFundingReached()", +"d3e00f4b": "stampBirth(uint256,address)", +"d3e0996a": "checkProductGenuine(address,address,uint256)", +"d3e141e0": "left5(uint256)", +"d3e15747": "setLock(uint256)", +"d3e212c5": "bidExchange(uint256,uint256)", +"d3e242c2": "_confirmTransaction(uint256,address)", +"d3e2846a": "LINKFund()", +"d3e3623b": "earlyBackersAmountLeft()", +"d3e65414": "contributedToken(address)", +"d3e65b6c": "buyTicketByOther(uint256,bytes32,bytes32,bytes32)", +"d3e66a9e": "startCompetition()", +"d3e6dda7": "removeFound(address)", +"d3e6f49f": "isReadyToBreed(uint256)", +"d3e73312": "allocatedFounders()", +"d3e7d44d": "tokensBurnedTotal()", +"d3e82be8": "getMinPrivateSaleBuy()", +"d3e837cb": "setChecksOn(bool)", +"d3e848f1": "systemAddress()", +"d3e89483": "policies(uint256)", +"d3e8b207": "distributeWithLockup(address,uint256,uint256,uint256)", +"d3e91a98": "destroyAllTokens(address)", +"d3ea3322": "testBuildTokenSystemCost()", +"d3eb11d6": "payoutsWallet()", +"d3eb667e": "BigBoobsToken()", +"d3eb6f61": "isGoalReached()", +"d3ebd2dc": "transferFron(address,address,uint256)", +"d3ebf454": "LotteryRoundDraw(address,bytes4)", +"d3ecb95f": "wc()", +"d3ed0ea2": "setAuthor(uint256,string)", +"d3edcb0a": "_wholeToken(address)", +"d3edcb5b": "getCreditorAddresses()", +"d3ee86e7": "mmax(uint128,uint128)", +"d3eee5ad": "lockForDays(uint256,uint256)", +"d3efa856": "CreditBIT()", +"d3efbd7f": "freezeContract(bool,uint256,uint8[],bytes32[],bytes32[])", +"d3f01fbd": "calcToken()", +"d3f045d2": "Player(address,uint32,uint32,uint32,uint32,uint256,uint256)", +"d3f06def": "uploadFile(uint256,uint256,bytes32,bytes32[],bytes32[],uint256)", +"d3f16925": "setDevLimit(uint256)", +"d3f189bd": "COMMUNITY_ADDRESS()", +"d3f1a78c": "updateDelayTime(uint256)", +"d3f1fbd7": "updateLastMiningTime(uint256)", +"d3f233af": "burnOf(address,uint256)", +"d3f297d6": "claimLiquidityReward()", +"d3f2b996": "PTH(uint256,string,uint8,string)", +"d3f2e7cf": "runningRound()", +"d3f3bea2": "distributionRealized()", +"d3f40a02": "denyAccess(uint256,uint256)", +"d3f4fcd9": "claimInitialAllotment(string,string)", +"d3f574e7": "testToUint128()", +"d3f60667": "trackBuyBack(uint256,uint256)", +"d3f60d9c": "startTimeRound2()", +"d3f6a157": "setWallets(address,address)", +"d3f6be9f": "LogDeposit(address)", +"d3f6c328": "AMOCoin(address)", +"d3f6dc52": "oracleItQuery(string,string,string)", +"d3f71ecc": "checkIsOnSale(uint256)", +"d3f73bd4": "getOwnerCEO()", +"d3f8868b": "getFrequency(uint256)", +"d3f8cc95": "exhaustAfterFusion(uint256,uint256,uint256)", +"d3f92288": "WhiteList()", +"d3f9ba69": "processOneCombat(uint32,uint32)", +"d3f9fc33": "ownerRecoverTokens(address,uint256)", +"d3faaeca": "softCapInTokens()", +"d3fbf39d": "mintNFTNotForSale(uint256,string)", +"d3fc310a": "_addExtraReceiver(address)", +"d3fc9864": "mint(address,uint256,string)", +"d3fd311e": "trading_deactivated()", +"d3fd9eba": "transferAuction(address,address,uint256)", +"d3fe1ae1": "updateMember(address,uint256,uint256,uint256)", +"d3ff09a5": "setTotalTaskEscrow(uint256)", +"d40027ec": "lockoutPeriod()", +"d401defe": "getBasicInfo(address)", +"d40224ec": "triggerSale(bool)", +"d402be57": "calcMode()", +"d402f87c": "setTotalProfit(address,uint256)", +"d4030114": "tableSize()", +"d40394be": "batchAddWhitelistedTransfer(address[])", +"d404d6c2": "pushEther()", +"d404ea23": "hashKey()", +"d405a069": "grantInitialAllocations()", +"d405d6f4": "Chally()", +"d40619b8": "getUsersScannersIds()", +"d4065763": "returnRemainingMoney()", +"d406e403": "test_startBlock()", +"d407d212": "claimJ()", +"d408746a": "GetContractAddr()", +"d4088e33": "setPrice(uint256,uint256,uint64)", +"d4092dd2": "getPOOL_edit_29()", +"d409a12c": "Kcoin()", +"d409ddda": "EtherizationUtils()", +"d40a71fb": "step1()", +"d40b9d9a": "OwnerHeartbeated(address)", +"d40c0a58": "saveTeamSpent(address,uint256)", +"d40c3084": "fundValues()", +"d40d4d76": "etherToSendBankRoll()", +"d40dc870": "MAX_AMOUNT()", +"d40e35da": "Interest_Rate()", +"d40e985d": "decompose(uint256)", +"d40e9b9c": "rakeEventPlaceholderAddress()", +"d40fa8bf": "ZRX()", +"d40fd402": "salarySent()", +"d41097e3": "disbandTo(address)", +"d4112c56": "changeUtilityAccount(address)", +"d41212c8": "_insertTokenMetadata(uint256,string)", +"d41376e1": "withdrawl(address,address,bytes32)", +"d4138673": "IkuraTransferToken(address,address,uint256)", +"d413bd66": "OfflineMultiSig(address,address,address[],uint256)", +"d414da2a": "addPatternUserIndex(address,bytes32)", +"d4155d1f": "getJuror(address)", +"d41584ab": "LogCertifierRemoved(address)", +"d416c997": "_stringsEqual(string)", +"d416d1a6": "lastInvestorPaidOut(uint256)", +"d416d4f3": "Balance(address,address)", +"d416efdb": "donationTo(address)", +"d417f18d": "getTopicNameAndVotesAt(uint256)", +"d4186ba4": "test_oneValidEqInt3()", +"d41977cd": "contractFee()", +"d419ef9f": "WinToken(address)", +"d41b6853": "enter(address,uint256,uint8,uint8,uint8,uint32[11])", +"d41bcb81": "phaseEndTime(uint256)", +"d41bdea7": "unlock(bytes32,bytes32,bytes32)", +"d41be98d": "createDebtToken(string,string,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"d41c85fa": "__redeem()", +"d41cc314": "EventUpgradeTank(address,uint32,uint8)", +"d41d661e": "remOne(address)", +"d41ded30": "encodeLength(uint256,uint256)", +"d41e3281": "DocumentManager()", +"d4200f94": "setCreditBitContract(address)", +"d4203561": "transferFee(uint256)", +"d420e4e0": "BCaaS()", +"d420e527": "BuyLimitsCrowdsale(uint256,uint256)", +"d4212e93": "storeInitialClaim(address,uint16[],uint256,bool)", +"d4214d1b": "releaseUnclaimedBounty(address)", +"d42151b0": "FFCTToken()", +"d4229b1a": "appBase(bytes32)", +"d422cf58": "numLocks()", +"d422e4e0": "takeFee(address,uint256,string)", +"d422e810": "exchange_commission_wallet()", +"d423740b": "setter(uint256)", +"d423754b": "removeFactProviderFromWhitelist(address,address)", +"d4245e5b": "transferringETH(address)", +"d424f628": "fundingGoalReached()", +"d425bd91": "calculateDepositInfoWitnessHash(uint256[])", +"d4264af0": "mintTo(address,bytes32,string,uint256)", +"d4269986": "getPuzzle(uint8)", +"d426b04e": "largeContribThreshold()", +"d426bb47": "allocateForPrivateSale(uint256)", +"d42706bd": "Batix()", +"d4270d60": "recall()", +"d427ccbf": "getEventAddress()", +"d427ce74": "getBylawsProjectDevelopmentStart()", +"d428bf3b": "SetdivForPrice(uint256)", +"d4291e0c": "num_hosts()", +"d429bfae": "currentTokenOffered()", +"d42a5011": "setPackLimit(uint16)", +"d42a9dd5": "ICO_PHASE1_PERIOD()", +"d42aa2f6": "getHealth(uint8[176],uint8)", +"d42ad6ea": "getMinAuditPriceMin()", +"d42b31b9": "_DeclineInsurance()", +"d42bd8a4": "receivedUETreturn(address,uint256)", +"d42bf301": "doTriggerTryAuth()", +"d42c334e": "DepositMasterContract(address)", +"d42cc0d1": "Planetagro_Exchange(address)", +"d42cda15": "getOnMintTargetValue(int256)", +"d42cfc41": "transferFeeDenominator()", +"d42d24fc": "auditContract()", +"d42d4c10": "PASSToken()", +"d42d8eed": "tag(address,uint256)", +"d42db190": "versionAddresses(bytes32,bytes32,address)", +"d42dca55": "getAuditors(uint256)", +"d42e26f5": "initializePresaleFundraiser(uint256,uint256,uint256,uint256)", +"d42e87ed": "callOnSignUp()", +"d42ed758": "MixManager()", +"d42eeb4f": "EtherDrugs()", +"d4300225": "publicGetBalance(address)", +"d430381b": "mayorCutPercentage()", +"d4313945": "setProviderInvitedUser(uint256,address,bool)", +"d431b1ac": "setPause()", +"d431ba8e": "lastBlock_v8()", +"d432a885": "withdrawedFoundationCounter()", +"d4331c21": "setSubTourFreezingTime(uint64)", +"d4332f50": "changeBPaddress(address)", +"d4335bd2": "getSevenCount()", +"d433ea6a": "CueCrypto()", +"d4346010": "verifiedTransferFrom(address,address,uint256,uint256,uint256,uint256)", +"d43503ab": "Sunset()", +"d4357107": "address_to_tokens_prev_week1(address)", +"d43582c8": "removeNOSPackage(uint256)", +"d4365b4b": "Weaver()", +"d436b6e2": "EtherAdvance()", +"d4371968": "MAX_IMMORTALS()", +"d4384156": "UbexToken(uint256)", +"d438fdbd": "offlineSales(uint256,uint256)", +"d439390c": "MIN_PURCHASE()", +"d43948ee": "transferGainedEther()", +"d439ef55": "distributionMinimum()", +"d43a0b4c": "hodlerTotalValue9M()", +"d43a7c16": "finalizePrivateIco()", +"d43c3bb9": "getData_30()", +"d43c45b8": "withdrawSurprisePot(address)", +"d43c5a4a": "setTeamVault(address,address,uint64)", +"d43ea9e1": "levelTwoTokenNum()", +"d43ef6b9": "__mulmod(bytes,bytes,bytes)", +"d43f24b0": "removeApprovedContractAddress(address)", +"d43fb152": "isMilistoneSubmited(bytes32)", +"d4403495": "OWN_mintToken(uint256)", +"d440c6f3": "getWorkerAffectation(address)", +"d441ea62": "CleanBankerProfit(uint8)", +"d4430bc7": "tokenSaleOngoing()", +"d443173d": "requestUnFreezeAccount(address,string)", +"d4434387": "PolyCompliance()", +"d443f64a": "Start_Resume_PreICO()", +"d443fc85": "acceptGuardianVend(uint256)", +"d4440991": "callTransfer(address,uint256)", +"d44512e3": "changePrestige(address)", +"d445afdc": "week1Price()", +"d445cc78": "unfreezeTransfer()", +"d44750f5": "bonus_price()", +"d448273c": "mineForMany(address[],bytes32[])", +"d4483263": "secondRoundMayStart()", +"d4492c57": "addInvestorGrant(address,uint256,uint256,uint256)", +"d449844d": "XbitfwdToken()", +"d449a832": "decimals(address)", +"d449ce7c": "Administered()", +"d44a2863": "changeBooking(string,uint256[],uint256,address,bytes32)", +"d44aadf7": "initROS()", +"d44aecb0": "ico1_startdate()", +"d44b01ec": "safeWithdrawERC721(address,uint256,address,address)", +"d44bc088": "getTaskId(uint256)", +"d44cf3dc": "_setPriceFactor(uint256,uint256)", +"d44d159d": "mintWithBase(address,uint256,uint256)", +"d44d3394": "WIDTH()", +"d44dbbaf": "addStringComparison(bytes32,bytes32,bytes1)", +"d44dd681": "beginLiquidation()", +"d44f2d3d": "getInitialWithdrawalDone()", +"d45036c7": "viewTeamTokens()", +"d4508698": "driveCar()", +"d4524c72": "manualEtherWithdraw()", +"d45294f5": "charityAmtToCharity()", +"d45318b9": "scoringDuration()", +"d4538051": "_emitHolderAddressAdded(bytes32,address,uint256)", +"d4540ca7": "isDeployerOrOperator()", +"d454f92e": "mNumVoters()", +"d4550efd": "addEngineerQuest(address)", +"d455b973": "changeStageBlock()", +"d4565916": "activateproduct(uint256)", +"d45769b8": "N2Contract()", +"d4582b56": "Token(string,uint8,string)", +"d4589835": "sellMorties()", +"d4589e99": "assertDowntime()", +"d458c522": "participantCapTier1()", +"d459197b": "distributeALCTokenBatch(uint256)", +"d4595aaa": "blockExpiration()", +"d459654a": "techSupport()", +"d45973f4": "turretElementBySubtypeIndex(uint256)", +"d4597aa1": "tokenFrozenUntilTime()", +"d459fc46": "SetCheckpoint(uint256,bytes32,bytes32,uint64,uint8[],bytes32[],bytes32[])", +"d45a717e": "topGoodsId()", +"d45b1ae4": "StandardGasPriceLimit(uint256)", +"d45b5f71": "getIcoStep(uint256)", +"d45baeab": "Deposit(uint8)", +"d45bcac1": "listAddresses(address[],uint256[],uint256[])", +"d45c1b06": "Bank(string)", +"d45c241c": "minBonus()", +"d45c4435": "getTimestamp(bytes32)", +"d45e09c1": "canTransfer(address,uint256)", +"d45efad5": "getAccessControl(address,address,uint8)", +"d4607048": "buyForEverybody()", +"d461518c": "p_setGameDuration(uint256)", +"d4616967": "deployCode(bytes)", +"d4620041": "getFirstRoundReleaseTime()", +"d4625a3a": "equals()", +"d4629ae7": "ddftFund()", +"d46300fd": "getA()", +"d4631019": "_startCounter()", +"d4638401": "oneImpInWei()", +"d4638fea": "operatorRedeemByTranche(bytes32,address,uint256,bytes,bytes)", +"d463ca18": "findSsp(address)", +"d463eeb3": "numLoans()", +"d464520c": "PowX()", +"d4649fde": "expire(uint256,uint8,bytes32,bytes32,bytes32)", +"d4653a3b": "EXToken()", +"d465abca": "notInArray(address)", +"d465c392": "revealProofOfPerfBlock(uint32,string,bytes32,bytes16,bytes32,bytes16,bytes32,bytes32)", +"d466a03f": "citizensAmounts(uint256)", +"d466a046": "LogBidExpired(bytes32)", +"d466ab6b": "ROLE_BOUNCER()", +"d467cc00": "calculateRate(uint256,uint256)", +"d467cc64": "DoubleOrNothingImpl()", +"d4683f6d": "ArticCoin(uint256,string,string)", +"d4686534": "LYNIA()", +"d46a005a": "addWhiteListUser(address,uint256,uint256)", +"d46a5d7e": "vote(uint256,bool,uint256)", +"d46aa610": "buyInMarket(uint256)", +"d46b2987": "Luvtoken()", +"d46b9b84": "lifeN(uint256)", +"d46ba0c9": "etherRaisedPerWallet(address)", +"d46c0f40": "finishPrivatePlacement()", +"d46cddd4": "capPresale()", +"d46d0393": "getNextRegionId()", +"d46d0a22": "setV_S(uint256)", +"d46d79bb": "withdrawAllEth(address)", +"d46dbca1": "developerTemplateAmountLimit()", +"d46dd5bb": "showCurrentWinner()", +"d46ea4a4": "EXP_18()", +"d46eb119": "wrap()", +"d46f8eb1": "getSource(string,string,string,string)", +"d46ff2f1": "getTweetsDiff(uint256)", +"d470097c": "lastLargestHODLER()", +"d4701c35": "activate_kill_switch(string)", +"d4702576": "calculateTokens(uint256,uint256,uint256)", +"d4717240": "setkeytoken(address)", +"d4724a57": "TokenTransferForFounder(address,uint256,address,address)", +"d472d6bf": "get_token_balance(address)", +"d472fa26": "lockTokenToDate(address,uint256,uint256)", +"d472fe7e": "totalTokensICO1()", +"d4735d92": "Transfer(bytes32,address)", +"d4737d11": "setSampleRegistry(address)", +"d47380e0": "_mintToken(address,uint256,uint256,string)", +"d4740b78": "getAmountWeekly(uint32)", +"d4747f0a": "IQC()", +"d474a352": "submitBlockHeader(bytes,uint256)", +"d47510c0": "UNICORN_ID()", +"d475526f": "numActiveGames()", +"d475b1ab": "phase5Price()", +"d475bfa8": "proxyClaimTokens(address,address)", +"d47637f7": "getLittafiContent(bytes32,uint256)", +"d476620b": "winnerKey()", +"d476758f": "extractablePercentage()", +"d4768994": "soldIdeaWeiPostIco()", +"d477e3d4": "checkAddERC20(address)", +"d477f05f": "setDev(address)", +"d47875d0": "getScore(address)", +"d4788cc3": "HGT_Reserve()", +"d478f533": "allowFreezing(address)", +"d4793a9b": "getNextGuessId()", +"d4798327": "getPendingBattleRewardsCount(address)", +"d47a2010": "bnbRaised()", +"d47b44c3": "Fool()", +"d47bb75c": "TOKENERC20(uint256,string,string)", +"d47c0fb0": "onIncome()", +"d47c9e11": "eastadsCREDITS()", +"d47cc085": "sameNum()", +"d47cc9d7": "start_the_race()", +"d47cf598": "setDayThird()", +"d47d3202": "releaseINATokenToTeam()", +"d47d5cfe": "swarmTree()", +"d47d996e": "addCrowdSale(uint256)", +"d47dbde2": "buyerFundRelease(uint256,address)", +"d47e813d": "SteveCoin()", +"d47e81eb": "blockSettlement(uint64,uint64)", +"d47eb8ee": "validCall(uint256,bytes)", +"d47eca0a": "checkDiv()", +"d47ee6c1": "numberOfLeaderboardPlayers()", +"d47f269e": "getHand(uint256)", +"d4807fb2": "initializeRound()", +"d4810b61": "PRE_ICO_START()", +"d48210bc": "perValue()", +"d4821432": "endICOStage8()", +"d4849a8b": "newEthBackedLoan(uint32)", +"d484a285": "PRE_ICO_SLGN_LESS()", +"d48599e3": "setdrawadm(address)", +"d4859dbc": "UniversalFunctionSecure(uint8,bytes32,bytes32,bytes32,bytes32,bytes32)", +"d4859dc5": "disableManager(address)", +"d48675f3": "minGoal()", +"d4867694": "updateship(uint256,uint256)", +"d48684d8": "changeLimit(uint256,uint256)", +"d4868c32": "tokenReserved3Deposit()", +"d486d129": "releaseVesting(address)", +"d4871517": "BTCLotto(address,uint256)", +"d487758a": "forgive(uint16,uint32)", +"d4878cac": "_transferChild(address,address,uint256)", +"d487b21a": "assets_controller()", +"d4884b56": "getEventEnd()", +"d4897729": "getCET4InfoById(uint32)", +"d489a018": "adminAddWorldBalance()", +"d489b701": "starEthRate()", +"d489b83f": "teamOneShares()", +"d489c0bf": "getBuyCount(address)", +"d489e180": "getPendingPartCrateLength()", +"d489fc8b": "_useOraclize()", +"d48a1f6e": "returnPurchasedEther()", +"d48a9340": "SaveCryptoToken()", +"d48b2e92": "Identify()", +"d48b55e5": "calculateTokenOnlySellPrice(uint256)", +"d48b7a9d": "CryptoMyWord()", +"d48bb321": "next(bytes2,bytes2,bytes2,bytes2,bytes2,bytes2,bytes4,uint256)", +"d48bfca7": "addToken(address)", +"d48c4193": "addWhitelistedTransfer(address,address)", +"d48d02f6": "withinLimits(uint256)", +"d48e638a": "getCreator(uint256)", +"d48e6a1b": "TEAM_TOKENS_PERCENT()", +"d48e9cd5": "OMG()", +"d48ea599": "getBeneficiaryByTime(address,uint256)", +"d48f08e5": "disableRegulator(address)", +"d48f7196": "numHodlers()", +"d48fb85c": "FIVE_YEAR_KEEPING()", +"d48fe280": "OK()", +"d4912ab1": "SNTPlaceHolderMock(address,address,address,address)", +"d491461a": "Gnosis()", +"d492283f": "switchLock(bool)", +"d4923d4e": "getUserVote(address)", +"d493b9ac": "transferAnyERC20Token(address,address,uint256)", +"d494c388": "setMinBuyAmount(uint256)", +"d49620ec": "RoundFinalized(uint256)", +"d49636c2": "san()", +"d496a4f1": "cashBackVotes()", +"d496bde4": "mainSaleTime()", +"d496f9d2": "PlayReferred(uint8,uint8,uint8,uint8,address)", +"d4971613": "HashBounty()", +"d49758d6": "use_bounty_token(address,uint256)", +"d4975d71": "changeVoter(address,address,string)", +"d4981928": "WorkOrder(uint256,address,address,address,address,uint256,string,address,address)", +"d499555b": "getFirstActiveDuel()", +"d49982cc": "sendPreSaleBonusMany(address[])", +"d499b2c3": "pks(uint256)", +"d49ab244": "ICOWhitelisted(address)", +"d49ad161": "addTokenDetails(uint256,address[],uint256[],uint256[],uint256[])", +"d49c51b7": "claimedMK(address)", +"d49ce78d": "WiggaToken()", +"d49d1836": "openegg(uint256,uint256)", +"d49d1bac": "transferERC223(uint256,address,address,uint256,bytes)", +"d49d5181": "MAX()", +"d49dbb5c": "minBalanceToSell()", +"d49dd9a8": "getStateofContract()", +"d49dd9e4": "SonnetCoin()", +"d49edbd8": "lastPrizeGiven()", +"d4a03f60": "acceptAdoptionRequest(bytes5)", +"d4a04ff4": "importFromOld(address,address,address,address,address[],uint256[])", +"d4a226c3": "bountyManagerDistributionContract()", +"d4a2498d": "addData(string)", +"d4a24f06": "checkPermissions()", +"d4a28823": "EOSSale(uint256,uint128,uint256,uint256,uint128,string)", +"d4a2f3ca": "getShipAuctionEntity(uint32)", +"d4a34564": "start3BonusPeriod3()", +"d4a34a9e": "tokenDecimalsLeft()", +"d4a3e9d7": "capture()", +"d4a436cc": "_countBits(uint256)", +"d4a4513e": "fpct_packet_size()", +"d4a61d61": "OnlineCasinoCoin()", +"d4a631ab": "ContractLogEvent(int256,int256,uint256,string,string)", +"d4a67930": "openBuy()", +"d4a6fd3e": "has_presale_started()", +"d4a8d9ba": "Inbox(string)", +"d4a9991f": "requestDividends()", +"d4a99d61": "finishDelivery()", +"d4aa6b59": "Button(uint64,uint64,uint64,uint64,uint64,address)", +"d4aa7394": "GameStatusUpdate(bool)", +"d4aa7d38": "City(uint256,string,string)", +"d4aae0c4": "kernel()", +"d4ab4a89": "_migrateRobot(string)", +"d4ac6af5": "MAX_REFERRAL_TOKENS()", +"d4acaf6c": "ecrecoverFromSig(bytes32,bytes)", +"d4acfa01": "tokenFrozenSinceBlock()", +"d4ad678e": "addItem(bytes16,uint16,uint16,bool)", +"d4ae1061": "getPurseDetails(uint256)", +"d4afc8b6": "retrieveERC(address)", +"d4b03d34": "changeValueBonus(uint8,uint256,uint256)", +"d4b088f9": "ICO_PHASE2_AMOUNT()", +"d4b0a23b": "addWhitelists(address[],uint256[])", +"d4b0c6e5": "stringToBytes10(string)", +"d4b0e966": "changeSaleStart(uint256,uint256)", +"d4b15ee0": "LogRefund(address,uint256,uint256)", +"d4b175d4": "mineTokens(address,uint256)", +"d4b182d4": "block(address,bytes32)", +"d4b1a462": "LogBought(uint256)", +"d4b1cdcc": "isResolverFor(uint256,address)", +"d4b1d19f": "testThrowsTransferDisabled()", +"d4b2931c": "tokenSEEDcap()", +"d4b2d5f0": "SQR_TOKEN()", +"d4b3f5b6": "tokenWithdraw(address,uint256,uint256)", +"d4b572be": "RESERVE_TOKENS_SUPPLY()", +"d4b64f35": "getBalanceOfModifiedWeth()", +"d4b71aa9": "maxPresaleWei()", +"d4b795c0": "getCurrentRoundEntry()", +"d4b83992": "target()", +"d4b8a6f1": "setFeeSchedule(uint256,uint256,uint256,uint256)", +"d4b9e410": "coiner()", +"d4ba15ad": "earlyPariticipantWeiPrice()", +"d4ba769c": "getLatestComponent(string)", +"d4badfad": "totumAllocation()", +"d4bb02e4": "changeRatePreSale(uint256)", +"d4bb1f28": "FCOIN1346Token(uint256,string,string,uint256)", +"d4bc0942": "withdrawOracleFunds()", +"d4bc87d9": "currentPriceChangeNumber()", +"d4bcffe4": "AbxyjoyCoin()", +"d4bd5a0d": "addCollaborator(uint256,address)", +"d4bdb879": "tokenSaleHasFinished()", +"d4bdc45f": "downvote(uint256,int256)", +"d4bde313": "ownBalance()", +"d4bdfe00": "ETCTransfer(address,address,uint256)", +"d4be5f68": "ATL_PER_ATP()", +"d4be6356": "authentication(bytes8)", +"d4be7714": "bornFamedStar(uint256)", +"d4bffa5a": "STATE_INITIAL_BIDDING()", +"d4c0cbce": "NovaCoinTransfer(address,uint256)", +"d4c1089b": "WorldRecord(string,bytes32,address)", +"d4c24db7": "StarterTokenSale()", +"d4c2b6b1": "scheduleTransaction(address,bytes,uint256[5],uint256)", +"d4c30ceb": "getFeeBalance()", +"d4c34dbb": "changeSoulCap(uint256)", +"d4c3eea0": "totalValue()", +"d4c46fa6": "setDeploymentPriceYear(uint256)", +"d4c49094": "WithrawDevToken()", +"d4c50f00": "coinPerEth()", +"d4c55f56": "wkaToken()", +"d4c6d9ad": "getbetresult(bytes32)", +"d4c72e7f": "etherollBeneficiary()", +"d4c76e8b": "MaxToken()", +"d4c80edf": "amountWagered()", +"d4c8fdae": "saleEtherRaised()", +"d4c9b1f2": "setMainAddress(address,address)", +"d4ca68ea": "replacePolicyTo(address,uint8)", +"d4cab39b": "AddedPrecommitment(address,uint256)", +"d4cae6e2": "getMetadataURL(bytes,uint256)", +"d4caf2a4": "setCodeSize(uint256)", +"d4cd5509": "CulturalCoinCrowdsale(uint256,uint256,uint32,uint32,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"d4cdeb3c": "isInPresale()", +"d4ce1415": "detectTransferRestriction(address,address,uint256)", +"d4ce545a": "random(bytes32)", +"d4cf02ef": "getStringToSignWithKey(string,int256)", +"d4d0aced": "transferPartOfUnsoldTokens(address,uint256)", +"d4d0d6e6": "addTrusted(address)", +"d4d0e931": "resetAllVotes()", +"d4d1b7da": "approveTokensFromAnyWithSignature(address,address,address,uint256,uint256,uint256,uint256,bytes)", +"d4d227de": "PBToken()", +"d4d2af8d": "sellCoin(uint16)", +"d4d2e23c": "LogRandom(uint64)", +"d4d30bd9": "GreenX(address,address,address)", +"d4d33ece": "isRebirthAllowed(uint256,uint256)", +"d4d37883": "sendSurplusTokens()", +"d4d42658": "getTokenRateEther()", +"d4d42c91": "SetupML(uint256,uint256,uint256,uint256)", +"d4d5d32a": "collectFee()", +"d4d64f2b": "getRevokeHash(bytes,uint256)", +"d4d6adc0": "SiliconXCoin()", +"d4d6cdc4": "getStageTotal()", +"d4d6d366": "metadataUrlSuffix()", +"d4d6f5ee": "deleteChannel(address,address,address)", +"d4d70128": "totalContributions(uint256)", +"d4d728fe": "IsClaimed(bytes32)", +"d4d7b19a": "isHolder(address)", +"d4d81a13": "ClownCore()", +"d4d82dae": "MCFitCrowdsale(uint256,uint256,uint256,address)", +"d4d84da5": "addTokenShop(address,uint256)", +"d4d90bd5": "MINIMUM_PURCHASE_AMOUNT_IN_WEI()", +"d4d91bdd": "_createOpinion(string,address,uint256)", +"d4d92b14": "mintInternal(address,uint256)", +"d4d96ac5": "flag(string)", +"d4d9748d": "NeoToken()", +"d4d9bdcd": "approveHash(bytes32)", +"d4d9f559": "addWhiteListAddSetAuctionObj(address,uint256,uint256)", +"d4db3791": "processTransferResult(address,address,uint256,bool)", +"d4dc8e83": "walletCreateSnap(uint256,uint256)", +"d4dca69b": "thisAddress()", +"d4dcbc60": "declineApproval(uint256)", +"d4dd1594": "updateLandData(int256,int256,string)", +"d4dd26fb": "initKYCUser(uint256)", +"d4dd5d99": "LiteXTokenVesting(address,uint256,uint256,uint256,uint256,bool)", +"d4dd707f": "upgrade_node(address,address,string)", +"d4dd92a9": "TeamAllocation()", +"d4def0ba": "escrowedTokens()", +"d4df0c6d": "setSaleAuctionAddress(address,address)", +"d4df1be8": "getETHNeedPay(uint256,uint256)", +"d4df6152": "getInvestorByIndex(uint256,uint256)", +"d4df89e2": "messageBoard1(string)", +"d4dfadbf": "getMarket(address)", +"d4dfc4b9": "MinimalManuscript(bytes32,string)", +"d4e08743": "isVaidUsername(string)", +"d4e12f2e": "approve(address,int256)", +"d4e17e6d": "closeBuy(bool)", +"d4e19bd1": "HART_NETWORK_ID()", +"d4e30489": "NewYorkCoin()", +"d4e32938": "subuser(address,uint256)", +"d4e4716f": "_setWhitelistedUser(address)", +"d4e4841d": "tokenToEthTransferOutput(uint256,uint256,uint256,address)", +"d4e678b8": "refundTransaction(uint256)", +"d4e75363": "NextDistribution(uint256)", +"d4e77133": "SendCoin(uint32,uint32,uint32,address)", +"d4e78272": "Draw()", +"d4e7b9cf": "amountAvailableToCashout()", +"d4e823a3": "createVendingItem(uint256,uint256,uint256,uint256,uint256)", +"d4e8b749": "periodITO_weiPerToken()", +"d4e8e063": "startGrantAuthentication(address)", +"d4e90e24": "CCTC()", +"d4e93292": "withdrawal()", +"d4ea7b08": "_emitPublicCapabilityRemoved(address,bytes4)", +"d4eaa9fd": "approveAndCall(uint256,bytes)", +"d4eb139d": "migrateSet()", +"d4eb21ff": "PonderAirdropToken()", +"d4eb4186": "setB0xAddresses(address,address,address,address)", +"d4eb4540": "BLOCKTIMEOUT()", +"d4eb487e": "getProtectHourglass(bytes32,uint8)", +"d4eba667": "updateNovaContractAddress(address)", +"d4ebc5ff": "voteUp(uint256)", +"d4ed0b46": "setCRaddress(address)", +"d4ed2cf5": "candidateTillExchange()", +"d4ed8990": "updatePoolAddressCapTier1(uint256)", +"d4ee025f": "resetRequest()", +"d4ee1d90": "newOwner()", +"d4ee4041": "removeBlock(address)", +"d4ee9415": "addPurchased(uint256,uint256)", +"d4ee9fba": "existPublicKey(bytes32,address)", +"d4eeb6ad": "seasonTopSalesRewards(uint16)", +"d4eec5a6": "optOut()", +"d4efcfe4": "getAccountInformation(uint256)", +"d4f04289": "ownerSellArmy(uint256,uint256)", +"d4f06298": "UpdatedMainAccount(address)", +"d4f0ca3f": "onlyTestSetTimestamp(uint256)", +"d4f0ebe6": "getWeaponNb(uint8[176],uint8)", +"d4f114a6": "numOfBoundaries()", +"d4f11ab2": "updateCompanyWallet(address)", +"d4f2e67c": "ico(address,uint256)", +"d4f2f1da": "EthereumNano()", +"d4f397b5": "getLootClaimed(uint256,address)", +"d4f3d6b8": "updateEditionType(uint256,uint256)", +"d4f3dd84": "_generation()", +"d4f50f98": "getVoter(address)", +"d4f639ea": "run2()", +"d4f6aa98": "getLargePaymentBonus(uint256)", +"d4f7329e": "minttoken(uint256)", +"d4f74bf4": "curatorAccount()", +"d4f77b1c": "joinGame()", +"d4f96a09": "giveawayAddr()", +"d4fa83c3": "setWhitelistTx(address)", +"d4fa9021": "DeductABS(uint256,uint256)", +"d4fac45d": "getBalance(address,address)", +"d4fb0bc1": "payOut(uint256,uint256)", +"d4fb0d23": "totalGuess()", +"d4fb9a01": "tradingStatus()", +"d4fbe1e0": "devAllocation(address,uint256)", +"d4fbeb19": "registerToken(address,string)", +"d4fc5822": "userWeiSpent(address)", +"d4fdbcff": "ViewDividendPoolEnds()", +"d4fef717": "APC(uint256,string,string)", +"d4ff60cb": "URB()", +"d4ff88d5": "TokenSent(address,uint256)", +"d4ffd1bd": "updateStrategy(uint256,string,string,string,address[],uint256[],bytes32)", +"d5002f2e": "getTotalShares()", +"d50030ad": "getMyDividends()", +"d5005c35": "COINVR()", +"d5009584": "getManager()", +"d500ca00": "assignReward(address,uint256)", +"d500dd6a": "challengeTimeout(uint256,bool,address)", +"d500f861": "buyFromWallet(uint256,bytes32)", +"d501953d": "poolTokenAmount()", +"d5020ce8": "daysMinutesTilExpiryTime()", +"d5025625": "terms()", +"d502db97": "getAddr(string)", +"d5034f2f": "changeRegistrationStatuses(address[],uint256[])", +"d503d33f": "MyPoolBalance()", +"d503e948": "developer_edit_text_minimum_period(string)", +"d503ef95": "getCategoryEvaluation(address,uint256,uint256,address)", +"d50495f4": "addTransaction(bytes)", +"d504cb65": "currentBet()", +"d504ea1d": "getArray()", +"d5050493": "tokenOf(address,address)", +"d505c1cf": "currJackpotBetID()", +"d506355c": "getRentInfo()", +"d5064037": "BitcoinVision()", +"d5065090": "setVendingStartPrice(uint256,uint256)", +"d5072607": "auditTimeout()", +"d5089396": "Token(string,string,uint8,uint256)", +"d509b16c": "testWithdraw()", +"d509b1f9": "like(address,address,uint256,string,address)", +"d50a04f4": "dataPerUsd()", +"d50a3d2c": "privateSale(address,uint256)", +"d50b3065": "addTokenBalance(address,uint256)", +"d50b65d7": "startBlockjack()", +"d50b7123": "testLockTokensForTrading()", +"d50bb794": "getComponent(uint256,uint256,uint256,uint256)", +"d50cb88b": "priceMultiplier()", +"d50d4822": "revokeParticipation(address)", +"d50e38c6": "IbkToken()", +"d50e829e": "setStopped(bool)", +"d50f6bf0": "transferETH(address)", +"d50f6d3a": "getPartner(address)", +"d50f7c73": "lastBlock_v10()", +"d5102704": "testRenameStore()", +"d51033db": "getTuple()", +"d5119402": "PUBLIC_SALES_3_PERIOD_END()", +"d511beec": "WithdrawICOEarnings()", +"d511cc49": "DAILY_PURCHASE_LIMIT()", +"d511f6c0": "startBuyingTokens(bool,uint256,uint256)", +"d5144eca": "updateUserBio(string,string)", +"d515b1ce": "Team(address)", +"d515be39": "getTokenName(address,uint256)", +"d5167b26": "partialTrade(uint256)", +"d5170fcc": "BonusFinalizeAgent(uint256,address)", +"d5171523": "euroteambet()", +"d517bc6f": "calcPointShamir(uint256,uint256,uint256,uint256)", +"d5182b70": "blocked(uint256)", +"d5185115": "forwardTokens(address,address,uint256)", +"d51902cf": "fallbackAccount()", +"d5193235": "mintUserAdoptionTokens()", +"d519bdcb": "distributeSML(address[],uint256)", +"d519fdc5": "alterGiveKarmaFee(uint256)", +"d51abbd9": "updateMaxTxGas(uint256)", +"d51c2454": "stepOne(int256)", +"d51c86e7": "setData_12(string)", +"d51d4fa8": "Securities_3()", +"d51e1737": "creedex(address,address,address,uint256,uint256,uint256)", +"d51eda9a": "AMC()", +"d51f5abd": "BEXMToken(uint256,string,string)", +"d52230c4": "totalContributionsBySender(address)", +"d5235a04": "contractEnable()", +"d5246eba": "queryRandom()", +"d5250364": "checkWrapperBalance()", +"d52550a4": "TokenPool(address,address,address)", +"d525aa32": "conditionalTransitions()", +"d5260eea": "getChannelAddress(string)", +"d526b9bd": "_allow()", +"d526c08e": "uv()", +"d526c40c": "_denyPublishSecret()", +"d526d332": "getLogic(uint256)", +"d526eaeb": "getMaximumReadsPerStep()", +"d5280c28": "AuthorizedCreate(address,uint256)", +"d529a072": "buyAddress(address,bytes8,uint256)", +"d529debb": "subOnHold(uint256)", +"d52a3524": "addAction(bytes32,bytes32,string,uint256,bool,uint256,uint256)", +"d52a5fc4": "decomission()", +"d52a7cbf": "setWallet1(address)", +"d52a7e86": "totalRewardedAxies(bool)", +"d52b38cd": "updateVendorApplicationStatus(string,string,string,string,string,string)", +"d52b5cb4": "_addLegitRace(address)", +"d52b79bd": "XTT()", +"d52b8a0e": "addVineyardEndorsement(string,uint256,bool,string,string)", +"d52b9e40": "activateTokenSwitch()", +"d52c6c08": "approCertificate(uint256)", +"d52e4633": "futureRoundTokensRelease()", +"d52f7122": "myCredit()", +"d52f916f": "setAddressCrowdsale(address,address)", +"d52f9f0f": "axonburn(uint256)", +"d530040a": "createAddressHash(address,bytes32)", +"d5307b0c": "weiContributed(address)", +"d53087b2": "JANUS()", +"d531eeaa": "icoBonus1()", +"d5320300": "getWithdrawableAmountANPES(address)", +"d532968f": "_chkSellerLmts(address,uint256)", +"d532df3c": "setCraftAuctionAddress(address)", +"d532e481": "activateFrozenAccount(address)", +"d533d0db": "changeUserLangAbility(bytes32)", +"d534831c": "sumOfWeights()", +"d5349606": "removeDeadTurns(uint16)", +"d535268d": "BUZZ()", +"d5353792": "setWithdrawGasCost(uint8)", +"d5356b7d": "TOKENS_PER_USD()", +"d5356fe1": "tokenFallback(address,address,uint256)", +"d53590a7": "durationPreSale()", +"d5364231": "forcedRedeem(address,uint256)", +"d536c3ae": "beginPhaseTwo(uint256)", +"d5370904": "getAvailableTokenCount()", +"d5375a5c": "getHigherInstance()", +"d537c3e3": "blockLockActive()", +"d537df3c": "claimTwitterIdIfNeededThenStealCardWithTwitterId(uint256,address,uint8,bytes32,bytes32,uint256)", +"d537e131": "calculateMatchPrice_(address[14],uint256[18],uint8[8],bytes,bytes,bytes,bytes,bytes,bytes)", +"d538359e": "Copeland()", +"d5387acb": "buy4(address[],address[],uint256[],bytes,bytes,bytes,bytes)", +"d539a014": "SSDTokenSwap()", +"d539a226": "assertEq10(bytes10,bytes10,bytes32)", +"d53a9b85": "tokensPerCents()", +"d53aaec2": "cPT()", +"d53abe1b": "stopRound(bool)", +"d53b2679": "activated_()", +"d53b4ab4": "communityAllocation()", +"d53b932a": "percentLeft()", +"d53bb6ac": "EthBita()", +"d53bc605": "testMultitransfer1()", +"d53beee4": "isOk(bytes1)", +"d53c61bf": "slasherAddress()", +"d53ca3c7": "setDiscountMember(address,address,string,bool)", +"d53ce956": "setOperationAddress(address)", +"d53dbe8e": "publishier()", +"d53e35db": "Garfield()", +"d53e963b": "buyCore(uint256,uint256)", +"d53f1cbd": "getBidFee(uint256)", +"d53f8208": "fundaria()", +"d541ca5d": "BONUS_PCT_IN_ICONIQ_SALE()", +"d5420df4": "drawToHand(uint256,uint32,uint256)", +"d5425571": "gasonBuffPercentage()", +"d5427123": "insertData(uint256,string)", +"d543f9d6": "setTeamPerfitAddress(address)", +"d544361e": "increaseShares(uint256,address)", +"d544e010": "removeAuthority(address)", +"d5456bc6": "lastBlock_a14Hash_uint256()", +"d545782e": "updateTokenRate(address,uint256,uint256)", +"d545ee2d": "CustomToken(string,string)", +"d54604ae": "min_fundingGoal()", +"d54656d5": "startTrade(address,address,uint256,uint256,uint256)", +"d546c975": "getCharacterServer(uint256)", +"d5472a5e": "userRewardAccountBalance(address,address)", +"d5472fcb": "removeWhiteLister(address,address)", +"d5477d37": "getColdWalletAddress()", +"d54839bf": "FEE_DEV()", +"d54a6bfb": "setHmcAddress(address)", +"d54ac04d": "get_master(bytes32)", +"d54ad2a1": "totalClaimed()", +"d54ad593": "getgamecardintro(uint256)", +"d54b02ec": "weiToCollectByInvestor(address)", +"d54b066f": "calcAmount(uint256)", +"d54c03a9": "NOORToken()", +"d54c2a63": "improveCard(uint256,uint256,uint256)", +"d54c4726": "usageCost()", +"d54c7099": "TVContract()", +"d54c7b4f": "_triggerCooldown(uint256)", +"d54c8c87": "emitApprove(address,address,bytes32,uint256)", +"d54ced9c": "canContributeAmount(address,uint256)", +"d54cefc1": "transferTokens(address,address[],uint256[])", +"d54dc5eb": "REGISTRATION_COST()", +"d54dd8f9": "slice4(bytes,uint256)", +"d54e583a": "transferFrom(address,address,uint256[],uint256[])", +"d54f4dd6": "TestVeryCoin3()", +"d550172a": "verifySig(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,bytes,address,address)", +"d5503d5f": "payBalance()", +"d550668d": "setContract(bytes32,uint256,address,address)", +"d550f044": "setAllowLocalBuy(bool)", +"d55108be": "JOLDEAME()", +"d5518feb": "RequestCollectInterface(address)", +"d551f601": "_auth_mode()", +"d552844b": "signTrueloveByCOO(bytes32,string,string)", +"d55321db": "newGame(address,string,string,uint256,uint256,uint8,uint8,uint8,uint256)", +"d5537c0d": "setUsersCap(uint256)", +"d553adf0": "frozenFunds(address)", +"d5544f94": "getFundsAndAvailable(address)", +"d5547587": "ReviewToken(uint256,string,uint8,string,address)", +"d554ba86": "round_b_begin_date()", +"d554f8b4": "changeDeDeStorageAddress(address)", +"d5551518": "CapitalMiningToken(string,uint8,string,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"d5556544": "offset()", +"d5562901": "getFeeSchedule()", +"d5563f31": "createAuction(uint256)", +"d556c8f5": "getHashID(address,bytes32)", +"d5572bd6": "closeCrowd()", +"d5582205": "getCertifiedStudentAtIndex(uint256)", +"d5582965": "stopMint()", +"d55a772d": "getCurrentOwner(string)", +"d55ac94c": "WhiteBullsToken()", +"d55b7703": "privateIcoCap()", +"d55b9eb1": "XIAOMI()", +"d55b9f4d": "DISCOUNT_PRIVATE_PRESALE()", +"d55bc06a": "LDEX()", +"d55bdc5f": "getCampaignPriceById(bytes32)", +"d55c4af8": "_p3dSellPercentage(uint256)", +"d55c980f": "submitEntry(bytes,string)", +"d55c9c84": "confirmWinner()", +"d55cc3e2": "JSONpath_raw(string,string)", +"d55d1fed": "EGGS_TO_HATCH_1Dragon()", +"d55e62a0": "removeTrusted(address)", +"d55e725b": "initialFunds()", +"d55ec654": "wash_list(uint128)", +"d55ec697": "upgrade()", +"d55edcfd": "freezeChangesToVesting(address)", +"d55fe582": "isAssociated(address)", +"d560f696": "releaseRoto(address,bytes32)", +"d561be54": "createVestingContractWithConstantPercent(address,uint256,uint256,address,uint256)", +"d561ef2b": "setMinBuyableAmount(uint256)", +"d562a121": "calcTokens(uint256)", +"d562de0b": "investor_insert(address,uint256)", +"d562deef": "getAffiliateFee()", +"d5630f71": "AlpenCash()", +"d5635444": "getCoupon(string)", +"d5656ccf": "getWager()", +"d5666b5f": "versionBase(bytes32,bytes32,address)", +"d5667d8a": "updateUSDWEI(uint256)", +"d5668a92": "_checkTransactions(address)", +"d5670f59": "VisualChainToken()", +"d567c0e1": "cashBackWeight(address)", +"d5687efd": "WhitelistSetDay(address,uint8,uint256)", +"d5698726": "LogSetPicosPerEther(uint256)", +"d56a0a88": "bipedaljoe()", +"d56a4555": "setLink(uint256[2])", +"d56a62cf": "getPurchases(address,uint256)", +"d56a9314": "transfer_m(address,uint256,string)", +"d56b2889": "finish()", +"d56b7577": "BM_ICO()", +"d56b7746": "mintTokenCollection(string)", +"d56bd142": "getPayments()", +"d56cd796": "addNewCourse(int128,string,string,string,string)", +"d56d229d": "nftContract()", +"d56de6ed": "adminAllowance()", +"d56e3068": "getTotalDonated()", +"d56ea1b0": "pausePending()", +"d56efabf": "LockableToken()", +"d56f279f": "resignOwnMembership()", +"d5708d5a": "setMinAmount(address,uint256)", +"d571829e": "mintTokensToEralyInvestors()", +"d571a9a9": "Hawaii()", +"d571dbac": "getHeadInfo()", +"d571e645": "validStoreBuff()", +"d571edb0": "getExchangeGroupsLength()", +"d572056e": "testItem(bytes)", +"d5722518": "setUintsOwnerCount(address,address,uint256,bool)", +"d5723bf7": "finishGame(uint256,uint256)", +"d572fd99": "getPlayerCardsNumber()", +"d574bcdf": "reLoadXname(uint256,bytes32)", +"d575af74": "getSubscriptionServiceId(bytes32)", +"d575f332": "updateCampaign(address)", +"d5762230": "overStakeAgeBurn()", +"d5767fb6": "_emitCapabilityAdded(address,bytes4,uint8)", +"d576dc58": "TOKEN_SALE_LIMIT()", +"d5775f5c": "getCurrentSellPrice()", +"d5778d37": "preIcoTokens()", +"d5778efa": "STASHToken()", +"d5778f07": "transferAdvocatedTAOLogos(address,address,address)", +"d5779b7f": "imageUploadComplete(address[16],uint256)", +"d577ab70": "authorizeEscrowService(address)", +"d577d785": "setJPYC(address)", +"d57869d4": "findTrustedContract(address,address)", +"d578ec6c": "uploadData(bytes32[100])", +"d578f434": "BONUS_PCT_IN_VREO_SALE_PHASE_2()", +"d579f9e8": "changeBinary(uint256)", +"d579fd44": "approveNextOwner(address)", +"d57a0577": "TEAM_BONUS_PER_CENT()", +"d57a12f5": "testCheckSigs()", +"d57a9e4f": "LATER_AUCTIONS_INITIAL_PERCENTAGE()", +"d57ad588": "hashToSign_(bytes32)", +"d57b8932": "leaseBlock(uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"d57bde79": "highestBid()", +"d57c00de": "PayForServiceETH()", +"d57c1ea2": "addIssue(uint256)", +"d57c25f8": "UnderratedToken()", +"d57f62ff": "getPeriodLockedBalanceFor(uint256,address)", +"d5812ae1": "positionPrice()", +"d5813323": "traded(bytes32)", +"d583644b": "upgradeStrength(uint256)", +"d5838ca7": "addPublicKey(address)", +"d5847d33": "conversionRatesContract()", +"d585b852": "DAOToken()", +"d586bd4e": "donateP3D()", +"d586d2e4": "cancelRequest(uint256,uint256)", +"d586e30f": "calcNextReward()", +"d587dbf9": "change_specific_addy(address,uint256)", +"d588acc4": "claimMiningReward()", +"d588b892": "testCount(uint256)", +"d588d4d8": "hasHash(bytes10,uint8)", +"d5893bb2": "tradeEventEnabled()", +"d58b8282": "roundFiveTime()", +"d58b82bb": "getCampaignDailyPrice(address)", +"d58bf09a": "redeem(bytes32,address,bool[4])", +"d58c4b85": "siteAccount()", +"d58d1566": "subsidyHalvingInterval()", +"d58e1758": "totalConvertLotsByAddress(address)", +"d59070f8": "mintCopieExecutoire(bytes32)", +"d5909149": "CerberusNetwork()", +"d590bf49": "deleteCase(uint256)", +"d590df4a": "setFirstPeriodCap(uint256)", +"d591221f": "testTransfer()", +"d59138ef": "markReleased()", +"d59167f6": "claimComputation(bytes,bytes32)", +"d591d777": "finanVestingStages()", +"d592c243": "Issuance(address,uint256,uint256,uint256)", +"d592f5fd": "reserveFullMintAllowance()", +"d593c953": "revenueShareIdentifierList(address)", +"d5949bf3": "RegistroBlockchain()", +"d595c331": "burnSupply(uint256)", +"d5969f2b": "grantEnable()", +"d596c862": "toggleRedeemActive()", +"d59768a3": "updateAddress()", +"d597b634": "ETC()", +"d597b8c8": "getOffer(bytes32)", +"d597c6bb": "_generateSpaceship(uint16,address)", +"d598aef8": "TESTToken()", +"d598b2c5": "getTopCompanyStartBlock()", +"d598cae5": "ACTIVE_LOAN_CANCELED_BY_LENDER_STATUS()", +"d598d2ab": "Reward(address,address,uint256,string,uint256)", +"d598d4c9": "service()", +"d5992ef5": "isSuited(uint8,uint8)", +"d5996502": "TheMLMDemo()", +"d59aec08": "notesOf(address)", +"d59b5d4e": "getDocumentIdWithContentHash(string)", +"d59ba0df": "setDistributor(address,bool)", +"d59cf17f": "WeAPOWH()", +"d59e31ed": "totalETHSold()", +"d59e6461": "addRoot(bytes32)", +"d59f1844": "content_intro()", +"d59f1f3f": "proposalsByShareholder(address,uint256)", +"d59f2827": "isTokenOwner(uint256,address)", +"d59f37e0": "verifyCanRemoveOrderById(uint32)", +"d59f4e68": "setPaintingArtist(uint256,string)", +"d59f5c6e": "OmegaNode()", +"d59f9cc7": "getFullAddressList()", +"d59fde06": "CredoIco(address,uint256,uint256)", +"d5a056d8": "AddOrigin(address)", +"d5a18e4c": "setMany(address,uint256,uint256[],uint256[])", +"d5a2040e": "AKM()", +"d5a31956": "commissionArt(uint256,uint256)", +"d5a34dfb": "VPC0x()", +"d5a3b734": "dataSourceAddress()", +"d5a41695": "fetchVoteNumForCandidateBySnapshotBlock(address,uint256)", +"d5a4726b": "sumICO2()", +"d5a4a3c6": "findRecentBet(address)", +"d5a506d0": "regionExists(uint16)", +"d5a53dec": "ACTION_SELL_OFFER_ACCEPTED()", +"d5a5825d": "currentEtherBalance()", +"d5a632b5": "addPartnerSaleWallet(address)", +"d5a683c0": "addDividends(uint256)", +"d5a6c97a": "setWhitelistModerator(address,uint8)", +"d5a73fdd": "getVestedAmount(address)", +"d5a7b500": "softCapTriggered()", +"d5a81428": "sellPriceInWei()", +"d5a841f9": "setFaucetThresholdSecs(uint256)", +"d5a8487f": "getSquareWins(uint256,uint256)", +"d5a849e9": "getRewardBalance(address)", +"d5a8c0d9": "Ghcwchain(uint256,string,string)", +"d5a9f356": "testTemp3()", +"d5aa1a26": "getRouteSize()", +"d5aa1aca": "setmmVaultAddr(address)", +"d5aa7803": "isGuessesOpen()", +"d5aaadd1": "finishMintingRequestSetup()", +"d5ab20a7": "removeNFBTNY(address,uint256)", +"d5ab7f30": "crowdsaleSuccessful()", +"d5abaa27": "JoinTheFray(address)", +"d5abeb01": "maxSupply()", +"d5acdeb2": "allocateCorporateToken(address,uint256)", +"d5aceaac": "closeBattleboard(uint16)", +"d5ad2e00": "m_wcStored()", +"d5ad3ad0": "setServiceController(address)", +"d5ad3cda": "removeWalletsFromWhitelist(address[])", +"d5ae1085": "updateNextOrderPrice(address,address,uint256,uint256)", +"d5ae79ea": "processCollision()", +"d5af8f24": "createAndSellAllAmountBuyEth(address,address,address,uint256,address,uint256)", +"d5afd6bc": "startOperation()", +"d5b014f8": "MoonTrail()", +"d5b01c99": "existIdAtCurrentVersion(bytes32)", +"d5b0c0d5": "numberOf(bytes16)", +"d5b1402c": "ViralTokenSale()", +"d5b235d0": "test_claimShares_emptyRewardPool_isTranscoder()", +"d5b2a01a": "ownerFee()", +"d5b2c102": "sendCoin(bytes32,bytes32,uint256)", +"d5b36845": "stage3Bonus()", +"d5b36eeb": "TEHToken()", +"d5b3b317": "minutestotal()", +"d5b40406": "signUpForAirdrops()", +"d5b42496": "enableShowValue(bool)", +"d5b4ea20": "USDcRaised()", +"d5b5dc49": "companyReserve()", +"d5b61da0": "PRE_SALE_MIN_ETHER()", +"d5b74699": "library1function()", +"d5b85b2d": "setBAAU(bytes32,address,address,uint256)", +"d5b89bc8": "Issuance(address,uint256,uint256)", +"d5b8a884": "ASStokenICO(address)", +"d5b9df87": "LEADER_FEE()", +"d5ba4d21": "changeHold(address,uint256,uint8,uint256,bool)", +"d5ba5f82": "getBattleCard(address)", +"d5bab53d": "xtestTransferToken()", +"d5bb7f67": "updateFeatures(uint256)", +"d5bc0a07": "LYBTToken(uint256,string,uint8,string)", +"d5bcecab": "setLeagueRosterAndSaleAndTeamContractAddress(address,address,address)", +"d5bcf8ef": "setGameRunning(bool)", +"d5bd3443": "newOption(address,uint256,bool)", +"d5bd57a1": "getCardsDetails()", +"d5bde837": "registerPoA(string,bytes32,uint64[],uint64[],address,address,string,bytes2)", +"d5be4153": "buyAd(uint256)", +"d5bec84e": "weiPixelPrice()", +"d5bee9f5": "randomAddress()", +"d5bf158a": "affiliateName(address)", +"d5bf2dbe": "setFeeParameters(uint256,uint256,uint256,uint256)", +"d5bf4da1": "eTicket()", +"d5bf5fc3": "sendBountySupplyToken(address)", +"d5c06d30": "icoEnabled()", +"d5c0c185": "canChangeBeneficiaryParams()", +"d5c14391": "getAvailableAmount(uint256)", +"d5c166d5": "getExchgComisnMulByThousand()", +"d5c21c4f": "setMinAuditPrice(address,uint256)", +"d5c2d2b6": "TEAM_INCENTIVES_AMOUNT()", +"d5c2e3ca": "destroyContract(string)", +"d5c2ee21": "hasLanguage(address,uint256,uint256)", +"d5c34755": "LogAuthCreate(address,uint256)", +"d5c4098d": "enableRenounceOwnership()", +"d5c44898": "updateLastPrice(uint256)", +"d5c469f8": "isP2SH(bytes,uint256,uint256)", +"d5c53c44": "DETEX()", +"d5c5d8e1": "yetAnotherFunction()", +"d5c60c97": "ShowInfoBool(bool)", +"d5c61301": "say(string)", +"d5c61881": "enableWithdrawl()", +"d5c655c9": "lastTaskIndex()", +"d5c7aece": "CertAdminDeleted(address)", +"d5c7bcc8": "coinIssuedEtc()", +"d5c80423": "lockDeposit(bytes32,string)", +"d5c813dc": "sellerfee()", +"d5c96b36": "gettotalCardValue()", +"d5c9712f": "getBytesLE(bytes,uint256,uint256)", +"d5c98db1": "setPropertyOwner(uint16,address)", +"d5c999f8": "getBanque()", +"d5c9b239": "getAllShops()", +"d5c9c144": "SetGasFeeReimbursed(uint256)", +"d5ca35bc": "withdraw(address,uint256,uint256,address,uint8,bytes32,bytes32)", +"d5cb4a04": "getParticipantTransactions(address,address)", +"d5cc1d49": "upload(bytes32,bytes32,bytes32,bytes32)", +"d5cc8813": "startingPriceOf()", +"d5cce45a": "showbuyPrice()", +"d5cd3243": "addUser(bytes32,bytes32,uint256)", +"d5cdd2c7": "tokenToPoint(uint256,address,uint256)", +"d5ce3389": "from()", +"d5ce44c1": "totalEthReceivedinWei()", +"d5ce6719": "AC(uint256,string,string,address)", +"d5ce6a34": "LogAddressTokenCapCalculated(uint256,uint256,string)", +"d5ce91fd": "isRegistered(address,bool)", +"d5ceecea": "ERC777DemoToken(string,string,uint256,uint256)", +"d5cef133": "requestRefund()", +"d5cf5c72": "setSoftCap(uint256)", +"d5cfa94e": "claimAdmin(string)", +"d5cfad68": "getUserCertificationDetails(string)", +"d5cfc01b": "lockAddressByKYC(address,address)", +"d5cfee3e": "playerIsRegistered(address)", +"d5d067b0": "createRequestAsPayerAction(address[],int256[],address,uint256[],uint256[],string)", +"d5d09021": "isCrowdsaleFull()", +"d5d0da83": "KingsToken(uint256)", +"d5d1b95a": "convertRegularToRewardTokens(address,uint256)", +"d5d1e770": "confirmOwnership()", +"d5d21e18": "createTokenContract()", +"d5d2f528": "setTokenCounts(uint256,uint256)", +"d5d434c9": "SocialXBounty()", +"d5d4dfad": "balanceHistoryLength(address)", +"d5d55931": "ETXCrowdsale()", +"d5d55c8a": "PurchaseConfirmed()", +"d5d5913c": "getCCH_edit_2()", +"d5d5cefa": "cancelOptionOrder(address[3],uint256[3],uint256[2],bool)", +"d5d5f469": "getDocumentIdWithIPFSdirectoryHash(string)", +"d5d66031": "Wp()", +"d5d75cad": "_changeWallet(address)", +"d5d8a751": "Gallery_MuYi_No3()", +"d5da9e82": "teamLockTransferFrom(address,address,uint256)", +"d5db3fe2": "LogTrade(address,address,uint256,uint256,uint8,uint8,uint256,int256,uint256,int256)", +"d5db72eb": "isRegistrar(address)", +"d5db9366": "cancelCollateralTransfer(uint256)", +"d5db9410": "ChangeProtectionTime(uint256,uint128)", +"d5dbb1ad": "solveBet(address,uint8,bool,uint8,bytes32,bytes32)", +"d5dbe634": "incrementTotalSupply(uint256)", +"d5dc7139": "Scratch()", +"d5dcc638": "StrongHands()", +"d5dcf127": "setAge(uint256)", +"d5dd5127": "managerNotSetInApp()", +"d5de30e0": "evMgmtInvestProject(address,uint256,address,uint256,bool)", +"d5de78bc": "getGrantBalanceOf(address)", +"d5df7559": "removeDocument(uint256)", +"d5df7bcc": "newFootballMatch(uint256)", +"d5e03fc6": "payoutParty()", +"d5e05c89": "isSpaceshipUpgradeAllowed(bytes5,uint16,uint8)", +"d5e0b616": "getAnyElementByIndex(uint256)", +"d5e0d8fc": "setCompositionPrice(uint256,uint256)", +"d5e0e131": "totalAdvisorsSupply()", +"d5e16567": "getAccountValues()", +"d5e38f60": "lpFeeBp()", +"d5e3fbb2": "payfee()", +"d5e45a83": "positionFrom(address,address,uint256)", +"d5e4a36e": "isPreSaleRunning()", +"d5e4b342": "trexdevshopWaited1Years()", +"d5e5e6e6": "preciseUnit()", +"d5e83d9c": "RisikoCoin()", +"d5e99dac": "rateLoss()", +"d5e9abfd": "mustKyc(address)", +"d5e9eb9c": "IPM()", +"d5ea36f9": "offMaintenance()", +"d5eb0cbf": "isContractPermanent(string)", +"d5ec40af": "buyToken(uint32,uint32,address)", +"d5ec7e1d": "left22(uint256)", +"d5ec8d82": "_estIntegerSqrt(uint64,uint64,int256)", +"d5ecc1bd": "papu()", +"d5ecf7c5": "getNumExcessTokens(uint256)", +"d5ed289d": "getClaimRate(uint256)", +"d5ed9cba": "setLandRegistry(address)", +"d5edca54": "Games(uint256,uint256)", +"d5ee739d": "tokenRateWei()", +"d5f0400e": "validClaim(bytes32,string,string,address,bytes32,bytes32,uint8)", +"d5f07396": "checkIfReferee(address)", +"d5f12812": "setSpend(address,uint256)", +"d5f17df2": "selectFight2DeathContract()", +"d5f1e8d8": "hardCapEther()", +"d5f222ee": "tally(address)", +"d5f24708": "gotake()", +"d5f37f95": "sign(uint256,uint256,address)", +"d5f39488": "deployer()", +"d5f404c7": "update_power()", +"d5f47a51": "Ethraffle_v3b()", +"d5f48e76": "cancelSynthesizingAuction(uint256)", +"d5f4f0b3": "addTokens()", +"d5f52d51": "withDrawMyBalance()", +"d5f5b788": "maxCapUSD()", +"d5f5df2a": "checkFiscal(bytes32)", +"d5f6b538": "getClaimsCountForStory(bytes12)", +"d5f72b2e": "addMany(address,uint256,uint256[],uint256[])", +"d5f7b144": "_burnToken(address,uint256)", +"d5f827e2": "TBrate()", +"d5f868b7": "removeReverseRate(address)", +"d5f87242": "assertInvalidState()", +"d5f9ac43": "transferFromTangibleAssetfund(address,uint256)", +"d5f9bdf1": "TokenCreated(address,address)", +"d5f9e6c7": "ProjectName()", +"d5fa2b00": "setAddr(bytes32,address)", +"d5fa2da5": "newEscrow(uint256)", +"d5fb1a1c": "ByteLockerShares()", +"d5fbe080": "_getEnd(int256)", +"d5fcc7b6": "setPresale(address)", +"d5fd5351": "WithdrawAddressApproved(address,address,bool)", +"d5fdb334": "getOpenGameIds()", +"d5fdfdbc": "setResult(string,string,string)", +"d5fe6062": "claimTusdProxyOwnership()", +"d5fec406": "abdicate(uint64,address)", +"d5ff0e7b": "transferToContract(address,address,uint256,bytes)", +"d5ff38ae": "migrateBasicData(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d5ff56f8": "allowChange()", +"d600630c": "registerInstitution(string,address,address)", +"d6006e88": "send(address[],uint256[],uint256)", +"d6006e8e": "preSaleSuccess(address,uint256,uint256,uint256)", +"d600c846": "JingzhiContract()", +"d60207c7": "getLowestUnitPriceIdxFromBuy()", +"d6026ac1": "getPRewardedSumByRound(uint256,address)", +"d6030d57": "BOUNTY_CAMPAIGN_SHARE()", +"d6039a41": "totalsigs()", +"d603f872": "buyPreICO()", +"d603fd28": "sendToAddressWithTime(address,uint256,uint256)", +"d6046836": "setAllowBuy(bool)", +"d604d6a8": "getSkillRating(address,uint256,uint256,uint256,uint256)", +"d604d8d1": "checkHash(bytes32)", +"d605787b": "rng()", +"d6063225": "Ktx(uint256,string,uint8,string)", +"d606f34b": "century(address)", +"d60743b1": "read_total_number_of_user_purchases(address)", +"d6077912": "RRRToken()", +"d608b3b2": "totalCharity()", +"d609ea93": "stakingEpochDuration()", +"d609fe59": "OEO(uint256,string,string)", +"d60bf518": "Test3(address)", +"d60d7044": "_char(bytes1)", +"d60dcb5d": "Switch()", +"d60df5be": "xmr()", +"d60e1447": "supplyBezNolei()", +"d60f0e5a": "BonusWhiteList(address,address,uint256,uint256)", +"d60f2eae": "buyPBTTAgainstEther()", +"d60f6cd9": "sendNumber(uint16,address,address)", +"d60fa784": "Voicecoin()", +"d60fd1be": "Hopecoin()", +"d6103b26": "_newPepe(uint256[2],uint64,uint64,uint64,address)", +"d6106696": "withdrawal_last_voter()", +"d6106b3e": "buys(uint256)", +"d611225b": "addContract(string)", +"d61191bd": "distributeValidityBond()", +"d612be77": "dpToken()", +"d612cff5": "permissionHash(address,address,bytes32)", +"d613ac91": "buybackTypeOne()", +"d613be0a": "forceChangeContractOwnership(address)", +"d6142c5b": "createProvider(bool,string,string,string,string,uint8,bool,address)", +"d615950d": "mintUpdateToken(uint256)", +"d61647f2": "developer_string_golos(string)", +"d616fe6e": "setTxAboveLimits(address,uint256,bytes32)", +"d617ad7d": "getPatentFee(address,uint16[5])", +"d618996b": "orderEnd()", +"d6192c6c": "hodlerStakes(address)", +"d619d216": "retrieveEth()", +"d619f6b3": "sendIndividualAmount(address[],uint256[])", +"d61a4524": "setdissolveaddress(address)", +"d61bd8fb": "getAvlShares(bool)", +"d61ca7eb": "RYH()", +"d61ccf84": "RABAToken()", +"d61e7201": "updateStatus(uint256)", +"d61e9274": "SetRate(uint32)", +"d61f92a3": "getJoinAddr(uint256)", +"d61fb0bf": "dateIT()", +"d620c7c8": "LogNewContractProposal(address,address,address,uint256)", +"d620caaa": "walletFromTeam()", +"d621a4f2": "setWithdrawBankFee(uint256)", +"d621b83f": "_createKydy(uint256,uint256,uint256,uint256,address)", +"d621c878": "improvementContract()", +"d621e813": "tradeEnabled()", +"d6223305": "ReleaseableToken(uint256,uint256,address)", +"d6224a6b": "getPixelText(uint256)", +"d6233491": "getPaid(string,address)", +"d6236ad0": "MetisCoin()", +"d62457f6": "callValue()", +"d624fdb6": "approveUser(address)", +"d625a7a6": "BetAdded(uint256,address,uint256,uint256,uint256)", +"d625c654": "migrateLosingTokenRepToWinningToken()", +"d6264b75": "transferBack(uint256,address)", +"d626db79": "setPublicWhitelistAbility(bool)", +"d6271727": "processUpgrade(address,uint256)", +"d628e0a6": "WatchBalance()", +"d628ecd7": "multiValueAirDrop(address[],uint256[])", +"d6291f6f": "VitalKey()", +"d629bc12": "iNf4mation()", +"d62a13ac": "ExhaustionCoin()", +"d62a7127": "getlastid()", +"d62ac58c": "AdvisorsPartners()", +"d62b255b": "setOwner(address,string)", +"d62b6f7e": "Main()", +"d62c6523": "cancelReservedTokens(address,uint256)", +"d62d3115": "testCreate()", +"d62f0f22": "getMyRice()", +"d62f146b": "updateSkill(uint256,uint256,uint16)", +"d6300201": "getPercent(address)", +"d630bd53": "pledgeApprove(uint256)", +"d630d100": "releaseAdmPercent()", +"d630efbc": "getAllTotalPrize()", +"d63124d7": "checkMidiNotesValue(uint8[])", +"d631eed7": "withdrawEthForUser(uint256)", +"d631f6d4": "DeleteProject(string)", +"d63241a6": "EtherCheque()", +"d63249ee": "_placeBet(uint256,address,bytes)", +"d632f639": "_privateSale()", +"d632fd1d": "PIP()", +"d6349dd6": "referralDividendsOf(address)", +"d634ba22": "baseNumber()", +"d6351433": "getRichToken(uint256)", +"d635357e": "TestContract(int256,string)", +"d63547e6": "GetFreeCnt()", +"d63581de": "setPricePoints(uint64[])", +"d63587a2": "randomNum(uint256)", +"d635b69f": "preValidatePurchase(uint256)", +"d635fc63": "getReveralSupply()", +"d6362e97": "getMin()", +"d6370149": "_errorAndRefund(string,uint256,uint8)", +"d6380f37": "complete(uint256,uint256)", +"d6387a3e": "getMinersAt(uint32,uint32)", +"d638d981": "SingularityTest24()", +"d63900d5": "getTileLocation(uint16,uint16,address,address)", +"d6391a01": "Total_TokenSupply()", +"d639bf80": "Bitstocksmarket()", +"d63a1389": "mintFeeFlat()", +"d63a6ccd": "usd()", +"d63a8e11": "allowed(address)", +"d63bed4c": "_setPermissionManager(address,address,bytes32)", +"d63d4af0": "getOwnerTokens(address)", +"d63e6ce7": "increasePeriod()", +"d63e7cc1": "priceICO()", +"d63ebe92": "StepVesting(address,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"d63eea42": "MAX_NUMBER_BETTERS()", +"d63fe1c7": "TARGET_TOTAL_SUPPLY()", +"d64196f8": "minInvestedLimit()", +"d641f3e4": "playGame(uint256,uint256,uint256,bytes32)", +"d64232c0": "option10name()", +"d6424ea7": "calculateAmount(string,uint64)", +"d6427c24": "randomPlayer()", +"d6449e15": "cancelTXwithCode(bytes32)", +"d644af34": "withdrawAndSend()", +"d644c46f": "wuxiaMasterPrice()", +"d644e356": "index(uint256,address,uint256,uint256)", +"d645ddf6": "mint(string,string,string)", +"d64637c7": "distributeDivident(uint256)", +"d6464b7c": "getSellerOfToken(uint256)", +"d6475c3a": "returnTokensForDay(uint256,uint256)", +"d647bb22": "Customcoin()", +"d647e2da": "test_set_get_RiskParameters()", +"d6481502": "setFreezingPercentage(uint8)", +"d648a647": "fundingStartBlock()", +"d648d7fd": "post(address,uint256)", +"d6495676": "emitPaymentReleased(uint256)", +"d64b12cf": "MAX_UNICORNS_TO_GIFT()", +"d64bcc1a": "releaseIcoTokens()", +"d64c2018": "setNextImagePart(uint256,uint16,uint16,uint16,uint256[])", +"d64c34fc": "getLockAmount()", +"d64d136d": "wnFromGas(uint256)", +"d64d6968": "isReferrer(address)", +"d64dc79f": "bidDkl(uint256,uint256,uint256,bytes,uint256)", +"d64e4e1b": "PKTToken()", +"d64ee8d2": "unBlockContract()", +"d64f5135": "In(address)", +"d64f86c0": "nextTransferFeeProp(uint256)", +"d64fe5ea": "getLockedWalletReleased(address)", +"d650cb2e": "forgiveMe()", +"d652818d": "ZYMToken()", +"d6528231": "FACTOR_3()", +"d6545ede": "hbtoken()", +"d6555687": "migrateUserData()", +"d655c786": "cancelOrderInternal(uint80,bool,bool)", +"d656a794": "stopForce()", +"d657ae0c": "actualTotalSupply()", +"d6582d0d": "isWeekDay(uint256)", +"d658d2e9": "hashes(bytes32)", +"d658d3ed": "setLedgerValue(string,address,address,uint256)", +"d65995ed": "attemptBeginLoanAtIndex(uint256)", +"d659afb6": "_isCooldownReady(address)", +"d659d968": "is_open()", +"d65a16c0": "isOneToken()", +"d65a4184": "tokenSaleActive()", +"d65aabc1": "t_Slava2()", +"d65ab5f2": "startGame()", +"d65b476c": "Governable()", +"d65b48fd": "ReceivedTokens(address,uint256,address,bytes)", +"d65c0035": "removeAddressFromWhitelist(uint256,address)", +"d65c8c6c": "claimDiamond(uint64,uint64)", +"d65d8876": "SitOut(address,uint256,uint256,uint256,uint256)", +"d65f86f2": "setLeed(string)", +"d6604881": "whitelistBonusLockPeriod()", +"d660521c": "depositStake(uint256,bytes)", +"d660c897": "theRichest()", +"d660ea36": "lastBlock_v1()", +"d661952a": "removePrivilegeAddress(address)", +"d6619ffb": "funds_address()", +"d661d206": "INITIAL_FOUNDER_SUPPLY()", +"d661dd31": "MULTIPLIER_DIVISOR()", +"d661f244": "getRoomName()", +"d6636307": "stateSetOver()", +"d66495cd": "getSpaceshipProductTotalSoldByModel(uint16)", +"d6649861": "tokenTransfertoACC(address,uint256)", +"d664cd89": "askMembership()", +"d6661999": "securityTokenOffering(address,uint256,uint256)", +"d6664653": "landmarkToOwner(uint256)", +"d667dcd7": "houseEdge()", +"d6680a69": "getAllIntel()", +"d6682007": "getGameNumSides(uint256)", +"d66847df": "distributeARTToken()", +"d668a461": "escapeHatch(bool)", +"d668e654": "LogTokenReceiver(address,uint256)", +"d669133f": "PotSplit(uint256)", +"d669899c": "sendLudumToSingle(address[],uint256)", +"d6699f48": "addPolicy(uint8,uint256,uint8)", +"d669e1d4": "MAX_CAP()", +"d66b0b51": "komission()", +"d66b2207": "escrowTransferInfo(address,uint256)", +"d66bd524": "reserves(address)", +"d66c7faa": "ICO_PHASE3_LIMIT()", +"d66c9cc2": "transferSenderPaysFee(address,uint256)", +"d66cac2b": "invest(uint32,uint32,uint64,uint16)", +"d66cb9e1": "renewbeginnerprotection(uint256)", +"d66d9e19": "leave()", +"d66e5726": "getWriter()", +"d66f146d": "refundPoll()", +"d66f3afa": "addEmployee(address,string,uint256[3],uint256)", +"d66fd10d": "LogVote(address)", +"d6714924": "calculateBoardScore(uint256)", +"d6721000": "addCommissionToPendingWithdrawals(uint32)", +"d6728d51": "developer_EKN()", +"d673c93b": "split(address,uint256,uint256,uint256)", +"d6740de5": "mint_for_testing()", +"d674d6a1": "RimuoviNegoziante(address)", +"d6755434": "remainingCapInWei()", +"d6757f39": "_existPlatform(bytes32)", +"d675ecbd": "addPrivateInvestor(address,uint256)", +"d67601ac": "starsRemainingToAssign()", +"d67772d3": "PennyEther()", +"d6779b01": "winningsClaimable(address)", +"d6779d6f": "isWarrantyValid(string)", +"d678724f": "getGameNumberOfEntries(uint256)", +"d6787711": "betHash()", +"d678ba48": "depositLRC()", +"d679677a": "currentTier()", +"d6798645": "set_cooldown(uint256)", +"d679c4f2": "claimDividendPercentage()", +"d67a073f": "Drain()", +"d67a10e3": "etherDelta()", +"d67a1140": "getMultiBalances(address)", +"d67a12d4": "getStrategyHiddenState(bytes32)", +"d67a1694": "getBountyChance(uint256)", +"d67a7e5f": "updateSignedDealsCountInBulk(address[],uint256[])", +"d67ae54d": "EUR(uint256)", +"d67b534e": "socialIdentityToCardId(uint256,uint256)", +"d67b9a89": "ONLY600Coin()", +"d67bf1ad": "coinBurnMkt()", +"d67bf379": "getByUser(address)", +"d67c1a7a": "finishCrowdSale()", +"d67c4497": "_approveTransfer(uint256,address,address)", +"d67c7f35": "p_update_mResaleMultipler(uint256)", +"d67c9961": "pass(uint256)", +"d67cbec9": "release(uint32,uint32,uint32,bytes20)", +"d67d0bb9": "tokenCreationMaxCap()", +"d67d3af8": "cancelRequest(address,address)", +"d67d73e0": "removeAllowedContract(address,address)", +"d67d78cd": "addCard(uint32,uint32,uint32,uint32,uint32,uint256)", +"d67f4d1b": "TittyFarmer()", +"d67fd89e": "setout(bool)", +"d6805f49": "novaTransfer(address,uint256)", +"d680914d": "SLABToken()", +"d6816cc1": "fixSpecications(uint256,bool)", +"d68199dc": "gameStats()", +"d681ffa7": "getDefinition(uint256)", +"d6820709": "beginTimeTS()", +"d6823455": "minQuanValues()", +"d682b601": "auditContract(address,bytes32,bytes,bool)", +"d6830af3": "setSettingTAOId(address)", +"d68314ea": "setReserveWeight(uint32)", +"d68352d2": "BeatTokenIcoPhase1Started()", +"d683d1a2": "markRedemptionFulfilled(bytes32)", +"d6847cd8": "getWithdrawalCoolingPeriod()", +"d68526c8": "withdrawGemmyMusic(address,uint256)", +"d68561a3": "_isOwnerOf(address,address,uint256)", +"d6858850": "AlphabetConvert(address)", +"d6872352": "sendEtherManually(address,address,uint256,uint256)", +"d6875520": "reclaimUnwantedGift()", +"d687a9b3": "_deleteAddress(bytes32)", +"d687b57e": "interSend(address,uint256)", +"d689cfe1": "_setClientPaidUpTo(address,uint256)", +"d68a9fb8": "getFreeTokensAmountOfUser(address)", +"d68c967f": "addAddressToBackEnd(address)", +"d68d961a": "ROLE_MINT()", +"d68e0ff7": "DestroyCoin(address,uint256)", +"d68e462c": "withhold(address,uint256)", +"d68e9b1e": "createGen0Token(uint8)", +"d68f30a7": "recordMoment(address,uint256,uint256)", +"d68f65f8": "SHAToken(uint256,string,string)", +"d68f6aac": "salers(uint256)", +"d68f93df": "changeBonuses(uint256[],uint256[])", +"d68fac6d": "knuckReward()", +"d68fbe5c": "testCannotGetTokensInNotInitiatedSale()", +"d6906295": "withdrawCloneTokens(address)", +"d691092a": "predictExploreReward(uint256)", +"d6914217": "getServerUserIndex(address,uint256)", +"d6916c34": "airDrop(address,uint256[],address[])", +"d6938c18": "StagebleCrowdsale()", +"d693dca2": "setAllowCnsContract(address,bytes32,address,bytes32,bool)", +"d693e17f": "internalSend(uint8,address,uint256)", +"d6940c8c": "_RemovedFromGeneration(address,uint256)", +"d69450d5": "setUUID4Bytes(bytes)", +"d6948c47": "winningTeamId()", +"d69570e2": "durationOfState(uint256)", +"d6960697": "confirmPurchase()", +"d6965ff7": "shops()", +"d696888a": "EpietherCrowdsale()", +"d697a9f1": "CooCoinToken(uint256,string,string)", +"d69932a3": "getLpBidPrice()", +"d699c00e": "transferWeiToWallet(uint256)", +"d699fe3d": "setPhase(uint256,uint256,uint256,uint256)", +"d69a0d2f": "getMostExpensiveCryptoGamer()", +"d69a1a5f": "getNextPayoutEstimation()", +"d69b6cf4": "IdolToken()", +"d69c3d30": "nextNonce()", +"d69c9275": "extraDistributionPart()", +"d69d895e": "NUM_RESERVED_COIN()", +"d69dbf63": "getIssuanceBlockTimestamp(bytes32)", +"d69dc9a5": "balance_(address)", +"d69dd156": "setInt256(int256,int256)", +"d69e37da": "doCall(address)", +"d69f13bb": "reportBenign(address,uint256)", +"d6a02bc2": "getSignedSubscribers()", +"d6a039f0": "Qbase()", +"d6a0810f": "ContractPurchased()", +"d6a0dec5": "buyTicketByOther(uint256,bytes32,bytes32,bytes32,bytes32)", +"d6a15231": "getIcedInfos(address)", +"d6a1f6a7": "breakIdUniqueness(uint256,uint256,address)", +"d6a2a596": "CrowdSale(address,uint256,uint256)", +"d6a30fb4": "start_quiz_quest(string,string)", +"d6a39db0": "lockUp(bool)", +"d6a3b623": "HONORABLE_LOSS_BONUS()", +"d6a3bc16": "finalReserveWallet()", +"d6a3f374": "dividendRate()", +"d6a43a3e": "setPermissionById(uint8,bytes32,bool)", +"d6a45623": "setAuctionsEnabled(bool)", +"d6a527eb": "share1()", +"d6a55e10": "sub_arbits(address,address,uint256)", +"d6a595ac": "payto2()", +"d6a5e546": "emergencyRefundContract()", +"d6a619e3": "transferIfPuritanical(address)", +"d6a62445": "confirmReturnToken(bytes32,string,bytes32,bytes32,uint256,uint256,uint256,uint256,uint256)", +"d6a6a520": "undoUpgrade()", +"d6a6da3e": "angelInvestorsTokens()", +"d6a75d82": "winningsClaimable()", +"d6a78004": "burnRemaining()", +"d6a83613": "bytes20ToString(bytes20,bytes20)", +"d6a90bcf": "tokenMultisigWallet()", +"d6a9c807": "_createDog(uint256,uint256,uint256,uint256,address,uint8,uint256,bool)", +"d6a9de51": "getSeller(uint256)", +"d6a9e9d1": "teamPercentage()", +"d6aab015": "getBonusPool()", +"d6abe110": "tokenDetails()", +"d6ac2394": "payoutInvestor(uint256)", +"d6ad00a9": "DOJC()", +"d6ad5e5e": "MIN_ACCEPTED_VALUE()", +"d6ae5f29": "getUsedReserveSupply()", +"d6aefb61": "setBatchTransfer(address,address,bool)", +"d6af9411": "Rouleth()", +"d6afc9b1": "getProfile()", +"d6b0f363": "OpusToken(address)", +"d6b0f484": "disableWhitelist()", +"d6b1deac": "KTOCrowdsale()", +"d6b1e4a9": "buyMinersWithEther(uint64)", +"d6b224f2": "getNextActiveBuyDetails(bytes32,uint64)", +"d6b2b242": "Realize(uint256)", +"d6b2e2ba": "PARSEC_CREDITS_PER_ETHER()", +"d6b33f59": "getNextActiveSellDetails(bytes32,uint64)", +"d6b44859": "scheduleUndoIt(uint256)", +"d6b4ec12": "getDailyWithdrawalLimit()", +"d6b52d9a": "partnerETHRewardsPercent()", +"d6b53175": "UpdatePoolState(uint8)", +"d6b5983d": "checkAmount(address,uint256)", +"d6b5abc9": "weiToPonzi(uint256,uint256)", +"d6b645bc": "react(address)", +"d6b6f9f1": "secondXRChangeBlock()", +"d6b74865": "watcher()", +"d6b7c81d": "BountyIssued(address,uint256)", +"d6b867e6": "exchange(uint256,address,uint256)", +"d6b8746d": "getConversionManager()", +"d6b8ae26": "jexp(uint256,uint256,uint256)", +"d6b8ec66": "presaleEth()", +"d6b92187": "_syncLockedDepositsAmount(bytes32)", +"d6b93d43": "fillBuy(address[8],uint256[6],uint8,bytes32,bytes32)", +"d6b94aba": "TTT(string,string,uint8,uint256)", +"d6bacb0e": "getTxRoot(bytes32)", +"d6bafa0c": "ECommercePaymentSystem()", +"d6bb0ad5": "CrowdsaleGummy(address,address)", +"d6bb358e": "LuckyBaby()", +"d6bb9eff": "getMartialCardTypeIdList(uint256)", +"d6bc1b39": "setPrices(bool,uint256)", +"d6bc1e57": "fromWei(address,address,uint256)", +"d6bd603c": "getBalance(address,address,address)", +"d6bd64fc": "test_get_expired()", +"d6bd8727": "getUrl()", +"d6be178d": "rateStage2()", +"d6be6bd5": "birth(bytes32)", +"d6bea5fd": "rangeToProposalID(uint256)", +"d6bec803": "setExpiredAndWithdraw(address)", +"d6beebf7": "buyTokens_ETH(address,uint256,uint256,bytes8)", +"d6bf28e4": "_sendMonsterPrize(uint256,address)", +"d6bf7530": "getEthDepositAddress()", +"d6bfc2d4": "oykooshi()", +"d6c0ceab": "changeBountyDeadline(uint256,uint256)", +"d6c12f88": "pricingPlan()", +"d6c1869b": "s33(bytes1)", +"d6c19fe0": "build(bytes,uint256,uint256,address)", +"d6c1be92": "gameEarnings()", +"d6c242d6": "approveViewer(uint256,address)", +"d6c2479a": "donationsAddress()", +"d6c3453c": "addTrancheRateAndTokens(uint256,uint256,uint256)", +"d6c54bf7": "destroyTokens(address,address,uint256)", +"d6c5a41e": "tier3End()", +"d6c5d823": "getScientificData(uint256)", +"d6c6f48e": "mintAgents()", +"d6c75abf": "RiskPrices(address[],uint128[])", +"d6c7b4ad": "receiver1()", +"d6c7b65b": "addInfo(address,address,uint256,string)", +"d6c8976b": "changeTokenController(address)", +"d6c8f93c": "getCooldownIndex(uint256)", +"d6c9d27a": "addCountry(uint256,uint256)", +"d6ca8ccb": "disown(bytes20)", +"d6cb56e6": "FishCoin()", +"d6cb9ec2": "viewContractState()", +"d6ccb332": "FED(uint256,string,uint8,string)", +"d6ccf7a7": "addTokenTime(uint256,uint256)", +"d6cd4a02": "listAgents()", +"d6cd9473": "renounceWhitelisted()", +"d6cf18e7": "createPiranhaTokens()", +"d6cf5297": "oracleItSetNetwork()", +"d6cfece1": "preBonus()", +"d6d02c51": "whois(string)", +"d6d0be9f": "getProductData(uint256)", +"d6d13ac0": "Split(bytes32,uint8)", +"d6d14171": "initialTimestamp()", +"d6d1b8bb": "TCLRToken()", +"d6d1f369": "Test4(uint256)", +"d6d1fc2a": "SoSoCoin()", +"d6d21dfd": "who()", +"d6d22fa4": "MetaCoin()", +"d6d25008": "coldStoreLast()", +"d6d30a51": "increaseJackpot(uint256)", +"d6d3286c": "geProposalInfo(uint256)", +"d6d329b9": "ships(uint64)", +"d6d34c7c": "coOwner()", +"d6d3e19c": "DigitalKeyCoinKO()", +"d6d4136a": "checkPos()", +"d6d5c8d5": "DEFROST_MONTHS()", +"d6d65f3d": "getCurrentMilestoneIndex()", +"d6d6945e": "doPurchase(address,uint256,uint256)", +"d6d707a6": "BaseStoreToken()", +"d6d76ed5": "status(address,bytes32)", +"d6d76fb7": "ArtCertificate(address,bytes32,string,string,string,string,string,address)", +"d6d7d525": "get(bytes)", +"d6d80f0b": "withdrawal_party_a_gets()", +"d6d86646": "UpdatePolicyState(address,string,string,uint8)", +"d6d902c4": "claimThroneFor(bytes,address)", +"d6d9266a": "setNewUseIndex()", +"d6d98ffc": "CosmicExperiencePoints()", +"d6da0805": "registerName(bytes32)", +"d6dad4cb": "BCFLeague(address,uint256,uint256,uint256,uint256)", +"d6db71e9": "allowRefund(address)", +"d6db85af": "fracExp(uint256,uint256,uint256,uint256)", +"d6db8ab6": "dividendPayouts(uint256)", +"d6dbf1c2": "getPOOL_edit_9()", +"d6dd1f0f": "ConnectLeaf(uint256,uint256)", +"d6dda33d": "isPremine()", +"d6ddbd2d": "purchaseAdv(uint256,uint256,string,string)", +"d6ddd21b": "vestingStartTimestamp()", +"d6de8dc4": "getPlayBlockNumber()", +"d6dfb77a": "getIndexToken(uint256,uint256)", +"d6e0bf29": "OwnerDeposit()", +"d6e0d73c": "mintA()", +"d6e20a56": "confirmKYC(address)", +"d6e2bcb5": "SwordMaster()", +"d6e325ae": "joinClub()", +"d6e38114": "addBet(address)", +"d6e3bb94": "addAudit(address,address)", +"d6e3dd77": "balancesImporter3()", +"d6e4ddc5": "ownerOf(address[16],uint256)", +"d6e5fe98": "setStakeRequirements(uint128,uint128)", +"d6e67215": "newCajutel()", +"d6e78eb0": "setGasMin(uint256)", +"d6e871ff": "loser(address,uint256)", +"d6e898ad": "vest2team(address,address)", +"d6e89cf0": "setTransferStatus(uint256)", +"d6e8a0b0": "incrementBid(uint256)", +"d6e95f77": "isSellable()", +"d6e9b019": "getDisputeData()", +"d6ea53b1": "changePayer(address)", +"d6ea5a0e": "distributionEntryCount()", +"d6ea8c90": "decimalOddsForOutcome(uint8)", +"d6eab9f2": "setHostFee(uint256)", +"d6eac4cd": "initTokenGrants()", +"d6eafd08": "scheduleCall(address,bytes,bytes,uint8,uint256[4])", +"d6eb1bbf": "authorised(address)", +"d6eb748c": "setRelation(address,address)", +"d6ec0065": "CHN()", +"d6ecb38a": "firstAddressFromDeployer(address)", +"d6ecff50": "Identified()", +"d6ed8f52": "addAirdropList(address,uint256)", +"d6edb047": "addAllocationPartOne(uint256,uint256)", +"d6ef25d5": "addVersion(uint64[3],address,bytes)", +"d6ef3de2": "Stocks()", +"d6ef7af0": "withdrawRewards(address,uint256)", +"d6efb030": "sendEthToContract(address)", +"d6efc8eb": "marketBuyOrders(uint256,bytes[])", +"d6effa2b": "ICOwei()", +"d6f0b484": "serverEndGame(uint32,uint8,uint16,uint256,int256,bytes32,bytes32,uint256,address,address,bytes)", +"d6f12a6a": "refundT4T()", +"d6f15469": "setBuyEnabled(bool)", +"d6f22e69": "getChecksumPairCount()", +"d6f327cc": "swapCardForReward(address,uint8)", +"d6f35eb4": "setMinAmountSale(uint256)", +"d6f3c45f": "tokenCrowdsaleCap()", +"d6f42038": "PhoneToAddress()", +"d6f4472d": "BTCS_PORTION_MAX()", +"d6f4c235": "setInstructor(string,uint256,string)", +"d6f4e56e": "allTokensSold()", +"d6f50ed6": "registrarApp(bytes32,address,bytes32[])", +"d6f5792d": "isCurrentAccountReader(address)", +"d6f5988e": "getInfoMarkTokens(address)", +"d6f5c939": "tie()", +"d6f6b6e7": "closeFailedVotingAndWithdraw()", +"d6f7ddf9": "topUp(address,uint256)", +"d6f8307f": "requesters(address)", +"d6f8560d": "withdraw_eth()", +"d6f8ecae": "time2()", +"d6fa3efa": "requiredTimeBetweenDraws()", +"d6fb1678": "mineableSupply()", +"d6fb69b9": "_sendWinnerJackpot(address)", +"d6fbf202": "startingPrice()", +"d6fc2e62": "rateProjectSecondParty(bytes32,uint8)", +"d6fd1fe9": "saleAction()", +"d6fd8822": "threeTimes(address,uint256)", +"d6fe3d6d": "afterForkRescueContractBalance()", +"d6fea306": "weiICOMaximum()", +"d6febde8": "buy(uint256,uint256)", +"d6feecde": "ret_len()", +"d700071a": "minorPartnerAddress()", +"d7003222": "unitCost()", +"d700ed39": "isStarterClaimed(address)", +"d70108a6": "getCmd_control()", +"d702087f": "setSecretSigner(address)", +"d7020b0c": "setarg_3(uint256)", +"d7020d2a": "approveEscrow(bytes16,address,address,uint256)", +"d702b63d": "for_longterm()", +"d702db81": "UserRetireHodl(uint256)", +"d702e364": "setPreICOSoldAmount(uint256,uint256)", +"d7052e17": "GotTokens(address,uint256,uint256)", +"d705763d": "Tset(uint256,string,uint8,string)", +"d705d6d7": "MainSale(address,uint256,uint256,uint256)", +"d70657ac": "getBalanceHolder()", +"d7067dc5": "crowdSalePaused()", +"d70695bb": "swarmRedistribution(address,uint256)", +"d706df8c": "BioStem()", +"d7074aaf": "GetCard(uint32)", +"d70754ec": "node()", +"d7079ee7": "startPublicsale(uint256,uint256)", +"d707d466": "allocToMember(address,uint256)", +"d7081e03": "transferAmount(address,uint256)", +"d7085e05": "SafeSend(address)", +"d70907b0": "freezeWithTimestamp(address,uint256)", +"d70925b4": "teamEthTransferComplete()", +"d70948b5": "_create_drug(bytes32,address,uint256,uint256)", +"d7098154": "claimPrize(uint256)", +"d70afa96": "FEE_ADMIN()", +"d70b6342": "minInvEth()", +"d70cf105": "moveBalance(address,address,uint256)", +"d70d2e26": "DetherTx()", +"d70d37e6": "OptedIn(address,address)", +"d70d532b": "provideAccess(address,uint8)", +"d70d9254": "isBetClosed()", +"d70d9604": "Sales()", +"d70dbf7d": "Aequitas()", +"d70e0f90": "disableAuto()", +"d70e62eb": "lowLimit()", +"d70ed38a": "withdraw(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"d70efa86": "_inRateFallEffectLimit(uint256,uint256)", +"d70fe207": "cancelOrdersOnOption(uint256,uint256)", +"d710999d": "SiliconValleyCoin()", +"d7109dda": "getCurrentSaleDay()", +"d710e2f0": "sendAllToOwner(address)", +"d710eaac": "NewWallet(address,address,address)", +"d71186b9": "Fund_Contract()", +"d7121f4b": "HolikopterToken()", +"d7123dff": "_createBuilding(uint256,uint256,uint256,uint256,uint256,uint256,address,bool)", +"d712800f": "setLockValue(address,uint256,string)", +"d712d06d": "tokenDestroyed(address,uint256,string)", +"d712eb4a": "voteWeight()", +"d7130651": "getCity(uint256)", +"d7131e5f": "createToken(uint256,address,string,string)", +"d71331c2": "getCountPlayerByTrackId(bytes32)", +"d715c8b2": "ownerHistoryCount(uint256)", +"d716222c": "is_owner(uint256,address)", +"d716e9ca": "getTotalInvoices()", +"d71710e0": "countAttributeTypes()", +"d717b05e": "exchangeLimit()", +"d71801d4": "gallerySix()", +"d7182850": "ownerTokensAllocated()", +"d7186f2b": "KNTTToken()", +"d718e763": "FinalizableCrowdsale(address,address)", +"d719213e": "preBuyPrice1()", +"d719843f": "getVendingStepPrice(uint256)", +"d71a0d7c": "HolahopxToken()", +"d71c14aa": "_isAOContentUsageType(bytes32)", +"d71c4028": "DRPCrowdsale(address,address,uint256)", +"d71cdd78": "BONUS_HI_QTY()", +"d71cf1e4": "getFee(uint256,address,address,address,address)", +"d71d3b3c": "CrowdSalePreICO()", +"d71d6cc5": "blendbacktest(uint32[],bytes32[],bytes32[],uint64[],bytes32)", +"d71d9e8a": "buyFlower(uint256)", +"d71db8aa": "getBonusPerShare(address)", +"d71df760": "oraclize_newRandomDSQuery(uint256,uint256,uint256)", +"d71e58f8": "admin_set_exchange_rate(uint256[])", +"d71e8296": "canIWithdraw()", +"d71e930c": "teamAddressTwo()", +"d71eb6ab": "recursive_store(uint32,uint256)", +"d71f1bd6": "LottesyAddress()", +"d71fcbe6": "BaseBountyContract(address)", +"d7203294": "ZeroXEth()", +"d7206124": "setInvestorLock(bool)", +"d721b0af": "batchExchange(address[],uint256[])", +"d721c760": "IssueAssigneeLoaded(bytes32,string)", +"d7228bb5": "doSucceedingTransferFrom()", +"d7237e45": "invitedByReferalBonus()", +"d723879c": "icoOver2()", +"d723b7c6": "rewardAtRound(uint256)", +"d723bb73": "fetchVoteInfoForVoterBySnapshotBlock(address,uint256)", +"d72473f3": "Added(uint256,string,address,uint256,bool)", +"d72503ba": "buyCat(uint256)", +"d725a9f0": "crowdSaleaddress()", +"d725f10d": "curse(address,address)", +"d7260cba": "refundGame(uint256)", +"d726755b": "moveFloor(uint256)", +"d726f7c7": "mainCoinSentToEther()", +"d7276479": "battlesOwner()", +"d727d64b": "disputeSettledTerminate(bytes32,address,uint8,address,uint8,bool,address)", +"d7289cb4": "FundsReturned(address,uint256)", +"d728b6db": "getCatOfferPrices()", +"d728cc72": "novaCoinAddress()", +"d7290181": "emptyWrongToken(address)", +"d7299009": "isCustomerHasACCfromWL(address)", +"d7299ef7": "pausePresale(bool)", +"d72ad259": "unlockFunds(address)", +"d72ad623": "getReferrerReward()", +"d72b11bd": "reserveWallet()", +"d72b6d3b": "CREATION_LIMIT()", +"d72bdc53": "initialize(address,string,string,uint8,uint256)", +"d72c83c0": "SmokeExchangeCoinCrowdsale(uint256,uint256,address,uint256,uint256,uint256,address)", +"d72c9391": "confirmTransactionSig()", +"d72d04db": "addGame(address)", +"d72d8dd6": "numRegistries()", +"d72dec33": "changeVaccinHistory(address)", +"d72e2b78": "soldTokensWithoutBonus()", +"d72e3de1": "createCustomReservation(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d72e4167": "getCompte_38()", +"d72eabb8": "minimalToken()", +"d72f7958": "fortune_break_current()", +"d73019e9": "icoStartDate()", +"d7303eaf": "nicole()", +"d7304b09": "cleanupOdd()", +"d730bfe2": "RabbitCoin()", +"d7311963": "m_controller()", +"d7315d60": "totaldeposited()", +"d731a779": "removeTRA(address)", +"d732a3fa": "newRound(uint256,bytes32)", +"d732d30e": "getGamblingPartyInfo(uint256)", +"d732d955": "decrease()", +"d73478f8": "userToNumTowns(bytes32)", +"d735140d": "fourthTokenExchangeRate()", +"d7353371": "PeerLicensing()", +"d7354b49": "getBirthDay()", +"d735875d": "Start_quiz_g(string,string)", +"d735dc92": "multiAirdrop(address[],uint256[])", +"d735fa25": "wholeSaleValueLeft()", +"d7365f9b": "_purchaseMake(uint256)", +"d737035d": "holdersBonus(uint8)", +"d73792a9": "FEE_DENOMINATOR()", +"d7379999": "permissionAt(uint8,int256)", +"d737c2b0": "setContractInfo(bytes32,address,bytes20)", +"d737d0c7": "msgSender()", +"d7385abd": "placeBet(int8,int8,uint32,uint256)", +"d7397a72": "setUrl(address,uint256,string)", +"d739aaf8": "getGameInfoById(uint256)", +"d73a24fc": "canBeWithdrawn()", +"d73a2901": "setManagedVote(uint256,uint152,bool)", +"d73b0cf2": "buyerFundRelease(uint256)", +"d73b1dc9": "decreaseAllowance(address,address,uint256)", +"d73b3a67": "withdrawal_Eth(uint256)", +"d73c277c": "storageName()", +"d73cbc6b": "testLen()", +"d73cbcba": "daCall()", +"d73cedd4": "SPECTRUMZ()", +"d73dd623": "increaseApproval(address,uint256)", +"d73e0c89": "getBookCount()", +"d73ec78d": "_checkCancelAvailability(uint256,uint256,uint256)", +"d73f0b25": "lookupCampaignPart1(uint256)", +"d73f3408": "SimpleMultiSig(uint256,address[])", +"d73fe0aa": "getShares()", +"d73ff0db": "preSaleBfPlatform()", +"d740547e": "mintBonusTokensForGames(uint256)", +"d740766e": "testNoTokenTransferIfNotApproved()", +"d741e2f9": "pip()", +"d743015a": "createAssetPack(bytes32,uint256[],bytes32[],uint256,string)", +"d743ca38": "newWinner(uint256,address,uint256,uint256,uint256)", +"d7441753": "getTypicalItemById(string,uint256)", +"d7447c8c": "addCandidate(address,address,bytes32)", +"d744aec8": "getTokenBalanceInContract(address)", +"d744f2a3": "wantMyToken(uint256)", +"d744f330": "IdClaveChain(address)", +"d744f47c": "validateMessage(string,bytes32,uint8,bytes32,bytes32)", +"d744fcb8": "ClaimFeesFromSharesBought(uint256)", +"d74543f0": "communityusersCap()", +"d7463573": "getOpeningTime()", +"d746a38b": "getMicroModuleByIdPart1(uint256)", +"d7471ad2": "nemocoin()", +"d7480aa4": "AuctusEtherVesting(address,uint256,uint256,uint256)", +"d748d1f6": "revokeEditorRights(address)", +"d749eaab": "newPrimera(address,address)", +"d74a960e": "BGFTToken(uint256,string,string)", +"d74a99d4": "create(uint256,string,uint8,string)", +"d74ae98e": "redeemShip(uint256)", +"d74afaa1": "newowner()", +"d74b2722": "setRefunder(address)", +"d74be848": "maskSender(address)", +"d74c894e": "setSecurityWallet(address)", +"d74d763e": "setUCCoinPerEther(uint256)", +"d74d7e79": "calculateRewardAt(uint256)", +"d74e0d9e": "SetBanker(uint8,address)", +"d74ea11e": "addMockPendingWinner(address,uint256)", +"d74f8e9a": "getLastPayments(uint256)", +"d74f8edd": "MAX_OWNER_COUNT()", +"d7504385": "validateToAddress(address)", +"d7508a55": "prepareAuctionForNonOGChain()", +"d7517caa": "getPresaleStatus()", +"d751b8de": "Request(uint16[],string,address,uint32[],uint256)", +"d7520298": "SetfirstTTaxAmount(uint256)", +"d7522582": "isCurrentTierCapReached()", +"d752dd8e": "AFSBToken()", +"d75318f8": "SecretCoin()", +"d75320b1": "_subtractFromMintPool(uint256)", +"d7533595": "keccak_f(uint256[25])", +"d7533751": "UnvestedSkyeCrypto(uint256,string,string)", +"d75352e1": "marginCall()", +"d75446fe": "etherGet()", +"d7546da7": "Commitment(address,address,address)", +"d754a6bc": "adminResetEmail(address,address,string)", +"d754f0ac": "LOCKOUT_PERIOD()", +"d754f3d5": "currentEraIndex()", +"d75528a5": "addSpecial(uint256,uint256,uint256)", +"d7554a68": "addUser(address,string,string)", +"d7557f18": "closeCampaign()", +"d755cc4a": "buyGOP(address,string,uint256,uint256,uint256)", +"d755e021": "getPlayerShipBattleById(uint64)", +"d7560f2b": "numRewardsUsed(address)", +"d7575592": "addr_teamPartToken()", +"d757579e": "XxxTokenSale()", +"d7578295": "Cashpayz()", +"d75b2b18": "takeCollateral(address)", +"d75b363f": "userRewardCount(address,address)", +"d75b5d9d": "RAFEND()", +"d75b80cc": "a_incognita(uint256)", +"d75d93f6": "registerMeOnToken(address,uint256,string)", +"d75de4ab": "isAddressInWhitelist(address,address)", +"d75e30cf": "drawFee()", +"d75e662f": "OverpayRefund(address,uint256)", +"d75e7afd": "calDivs(address,uint256)", +"d75e87ef": "PersonalInfoAdded(address,string,string,string,string,string,string,string)", +"d75ebde2": "joinGameFromBalance(uint256)", +"d75f0dd6": "SixtusToken()", +"d75fabb0": "RewardOffer(address,address,bytes32,uint256,uint256,uint128,uint256)", +"d7604a78": "modifyWhitelist(address,uint256,uint256,uint256,bool)", +"d7625c88": "hasMigrated(address)", +"d762755d": "minimumContributionWeiByOneInvestor()", +"d7638b73": "phase2Cap()", +"d763f92d": "FintechChain()", +"d7642ae2": "COIN_COST_ICO_TIER_3()", +"d7643e18": "protoCount()", +"d7651471": "Notes()", +"d7655b98": "OmixToken(uint256)", +"d7669119": "NewPrice(uint256,string)", +"d767aee0": "bbb()", +"d767e0d6": "SoldToCustomer(string,string)", +"d767ee4d": "updateLogic(uint256)", +"d7682701": "_cancelPermissions(address,address[])", +"d768729d": "getRecentDiary()", +"d7688d31": "destEthFoundationDev()", +"d7689460": "CryptoRex()", +"d768d95b": "finaliseContract()", +"d768d95e": "fetchVoteMainInfoForVoterBySnapshotBlock(address,uint256)", +"d768dd4b": "Stage3Allocation()", +"d769ae1b": "SLCAdvancedToken(uint256,string,string)", +"d769f32a": "mulXY(uint256,uint256,uint256)", +"d76a0cb8": "HybridBlock()", +"d76a130a": "TokenCDCQ(uint256,string,string)", +"d76a69e2": "Fund(address,address,address,address,address,address,address,address,address[])", +"d76b6095": "phase1Rate()", +"d76bce7c": "dropEth(address[],uint256[])", +"d76d6ee0": "query(bytes32,bytes2,int256)", +"d76dc2eb": "LOCKAMOUNT1()", +"d76dc656": "GDCAcc02()", +"d76dddd3": "unfreezeTime()", +"d76e5765": "getUserIpfsFromId(uint256)", +"d76f288f": "metaBurnHash(address,uint256,uint256,uint256)", +"d76f94aa": "toAlphabet(uint8[])", +"d7717750": "tokenLogic()", +"d7723231": "getIcoPurchase(address)", +"d772ddc0": "setProcessorAddress(address)", +"d7730236": "maxEthRaised()", +"d7734855": "getDiff(uint256,uint256)", +"d77371e0": "GoodDayToken()", +"d7744b9f": "getReferee(uint256)", +"d774c038": "multisend(address[],address)", +"d775db2a": "testThrowsSaleWalletIncorrectMultisig()", +"d7760500": "partnersRelease()", +"d7768c47": "prepare(bytes)", +"d77727de": "seeOwner(uint256)", +"d7777c29": "startPreICOStage1()", +"d77844f6": "isLimitationPeriodActive()", +"d77849c7": "tokenTakeback(address,uint256)", +"d778610e": "updateStateWithPrivateSale(uint256,uint256,uint256)", +"d7787f33": "setUpgradeContract(address,address)", +"d7789a9f": "unsetEndorsement(address,uint256)", +"d778c911": "price3()", +"d7790c11": "waipaytoken()", +"d7796915": "checkWithdrawValueFX(uint256)", +"d779ca24": "payoutBonusesToHolders()", +"d77a39c9": "addPresaleTokens(address[],uint256[],uint256)", +"d77a80a8": "lastFunder()", +"d77a86a0": "sendTo(address,uint64)", +"d77ac32d": "discountSum(uint256)", +"d77b0ff7": "keyAtIndexHasNext(uint256)", +"d77bd1ae": "ProposalAdded(uint256,address,string)", +"d77bf0cf": "CONFIG_PRICE()", +"d77c96f8": "mainICOThirdWeekEndTime()", +"d77d0012": "getBankPercent()", +"d77d3f79": "KoaStandardToken(uint256,string,uint8,string)", +"d77da4f4": "withdrawToTeam(uint256)", +"d77e2f55": "pendingEtherForCroupier()", +"d77e8986": "isExistsEscrow(bytes16,address,address,uint256)", +"d77ec4a4": "executeWithdrawTransaction(uint256)", +"d77fc50f": "checkZeroValue(uint256)", +"d77ff9ea": "eventCardRangeMin()", +"d7800fa2": "PurchaseRegistered(bytes32,address,uint256)", +"d7815ba4": "shareholdersHolding1y()", +"d7816f45": "transferlocked()", +"d781be46": "endDatetime()", +"d781d0f4": "YaoToken(uint256,string,string)", +"d781f3f4": "FootScoutCrowdsale()", +"d781fbf9": "removeERC223(uint256,address,uint256)", +"d78235cf": "setconfigurationEtherPrice(uint256)", +"d78276c6": "withdrawERC20(uint256)", +"d782cc54": "setNewBonusLevel(uint256,uint256)", +"d782d647": "createdTokens(uint256)", +"d7837ec9": "withdrawNonTop(uint256)", +"d783aacf": "ItalyToken()", +"d783b53b": "addSupporter(address)", +"d784601a": "myEthBalanceOfNoFee()", +"d784d426": "setImplementation(address)", +"d78506ce": "RoyaltysOwing(address)", +"d785c19c": "worldCupResultPart1()", +"d785e5c9": "m_isCirculating()", +"d78724d6": "getUserContractCount(address)", +"d7872745": "GumToken()", +"d788a945": "_isLongitude(int256)", +"d7892b6a": "changePeaceRelayAddr(address)", +"d789479d": "celtic_cross()", +"d78996d8": "getUtilizationAndAnnualBorrowRate(uint256,uint256)", +"d789b4c1": "uintMax(uint256)", +"d78b16a1": "emitTokens(uint256)", +"d78c15d9": "isPromoted()", +"d78c20ff": "voteApprove(uint256)", +"d78cb1b2": "buyXgoldTokens(address)", +"d78d610b": "getRecipients()", +"d78db648": "multStore(int256)", +"d78e1bb1": "teamPot_()", +"d78ed508": "getShipProductStartPriceByModel(uint16)", +"d78efa67": "addrecruit(uint256,uint256)", +"d7901260": "closePreICOPrivate()", +"d7901645": "GetDappinfo(string)", +"d790dce7": "endOfSaleFullWithdrawal()", +"d79185d7": "StartGuess_wis(string,string)", +"d791de63": "unlock(address[])", +"d791ed7a": "BaoBaoToken(uint256,string,string)", +"d792b356": "teamTokenAllocation(uint256)", +"d793f7a9": "preICOamountBonusMultipierInPercent(uint256)", +"d7942050": "Setuppresale(uint256,uint256)", +"d79521e8": "getPokemonDetails(uint256)", +"d7955eaf": "Santal()", +"d7959cf9": "ipfs()", +"d7963f94": "changeOwners(address)", +"d7982a6c": "unlockEscrow()", +"d7984cff": "CappedAndBurnableToken(uint256)", +"d79875eb": "sell(uint256,uint256)", +"d7988c98": "makeGrant(address,uint256,uint256,uint256,uint8)", +"d7989a93": "advancedTokensPerEth()", +"d79941d8": "getQueryRandomCallbackGas()", +"d79964c3": "addDeprecation(uint256,address,address,address,uint256,address)", +"d79b5bc6": "DonationSentButNotMatched(address,uint256)", +"d79bd499": "retrieveBalance()", +"d79c1f7f": "batchReclaimExpiredSwaps(bytes32,bytes32[])", +"d79cb6fd": "buyScams()", +"d79d5c7a": "COMPANY_TOKENS_PERCENT()", +"d79d63be": "getCardPrice()", +"d79d8e6c": "set(bytes32,address,bytes32)", +"d79e1e7d": "sumElements(uint64[])", +"d79e3755": "totalPromo()", +"d79e5de8": "HeliumToken()", +"d79e7894": "isAfterICO()", +"d79f5678": "DazzioCoin()", +"d7a084e0": "isWhiteListGame(address)", +"d7a08641": "checkCanRelease(bool,uint256,uint256)", +"d7a10acb": "balances2(uint256)", +"d7a1192d": "STAGE3_TIME_END()", +"d7a14a05": "totalAmountOfEarlyPurchases()", +"d7a15951": "winnerReward(address,uint256)", +"d7a17187": "ico2Raise()", +"d7a1cfe1": "addFriend(address)", +"d7a23fd4": "getActivityCount(uint256)", +"d7a42b54": "isEntity(uint256)", +"d7a4a09d": "detectJanuary(uint8)", +"d7a58658": "changeHouseedge(uint8)", +"d7a5afcf": "holderPartnershipsTokens()", +"d7a5f278": "slashInvalidUsername(bytes,uint256)", +"d7a5fdee": "DGPTokenOldContract()", +"d7a66ebe": "readContent()", +"d7a71868": "setManualPrice(uint256)", +"d7a78db8": "freeze(uint256)", +"d7a8560f": "invoicesStackCount()", +"d7aa6d74": "ShitCloneFarmer()", +"d7aa8273": "getTransactionInfo(uint256)", +"d7aa89b8": "storageOracle()", +"d7aae0e6": "executeProposal(uint256,address)", +"d7ab2770": "fetchGiven(address,bytes32)", +"d7ac79ba": "deleteHeir(address)", +"d7ad28ec": "GSMulti(uint256,uint256)", +"d7ad4931": "buyNow(bytes32)", +"d7ae339b": "ForecastChainToken()", +"d7ae76b6": "DING()", +"d7af26f8": "getPlayersBalances()", +"d7b03000": "resetCards()", +"d7b0a358": "shiggidyToken()", +"d7b0ca65": "last50plusblokhack()", +"d7b0e692": "set_new_admin(address)", +"d7b11125": "pwr(uint64,uint64)", +"d7b12454": "checkContract(address)", +"d7b12f38": "PRICE_STAGE_TWO_BONUS()", +"d7b15a88": "getLockedFundsLastSpending()", +"d7b1b9c4": "foundationTokensAllocated()", +"d7b1bb22": "cadastrar(bytes32,uint8,bytes32,bytes32,int256)", +"d7b2aae6": "setContactInfo(string)", +"d7b2f360": "getEncounterDetails()", +"d7b32f5f": "GetPrivateSale()", +"d7b33f66": "updatePercentToTakeAsSeed(uint256)", +"d7b33f94": "PRE_ICO_AMOUNT()", +"d7b40107": "auctionByAssetId(uint256)", +"d7b4750c": "getFunder(uint256)", +"d7b4a7f6": "MinerOneCrowdsale(address)", +"d7b4c9b1": "lookupKittyDetails1(uint256)", +"d7b53081": "closeSaleAnyway()", +"d7b5507d": "blockchaincertified()", +"d7b701b6": "SarahCoin()", +"d7b7024d": "approvedWithdrawAddresses(bytes32)", +"d7b7913b": "f3(uint256)", +"d7b7961c": "getPairHash(address,address)", +"d7b84f68": "moveDataContractBalanceToWorld()", +"d7b8cdf4": "MinimumContributionChanged(uint256)", +"d7b8de00": "setMaxCollectable(uint256)", +"d7b91bcc": "buyTokensICO()", +"d7b96d4e": "locker()", +"d7b97db1": "setDistributionTime(uint256)", +"d7b9cc24": "setCasino(address)", +"d7ba30b2": "rateAirDrop()", +"d7ba42fc": "addActionAccount(address)", +"d7ba95ca": "share2()", +"d7baa041": "PublicLayer()", +"d7bb913f": "accountTokensPurchased(address)", +"d7bb99ba": "contribute()", +"d7bbce2a": "setOrCacheDesignatedReportStake(uint256)", +"d7bc23af": "newParameters(int256,uint256,uint256,uint256)", +"d7bd6d0d": "addExchangeAccounts(address,address)", +"d7bd8987": "testTransfering()", +"d7bdaaa6": "WLMWallet()", +"d7bdc3fa": "addVolumeDiscount(uint256,uint8)", +"d7be503f": "_tokePerEth()", +"d7be708c": "BoulePreSale(address,uint256,uint256,uint256,address)", +"d7be8ceb": "performFetch()", +"d7bea56a": "totalExcessEth()", +"d7bfc8c5": "BabyDragon()", +"d7c01c3e": "SetTakePot(uint256)", +"d7c0302e": "numOfCitizensWhoReceivedDrops()", +"d7c06439": "AriumToken()", +"d7c06919": "getAuctions()", +"d7c0d42d": "ControlledToken(uint256,string,uint8,string)", +"d7c0f72b": "getTitulaire_Compte_5()", +"d7c23572": "historyTimesPlayed(address)", +"d7c23578": "addSig(bytes32,bytes32,bytes32,uint8)", +"d7c26adb": "oraclize_setProof(bytes1)", +"d7c2a887": "MANAGEMENT_FEE_RATE()", +"d7c35657": "EthsqrGate()", +"d7c39cc6": "totalSellingItem()", +"d7c482ef": "Defroze(address,bool)", +"d7c48e2b": "preseller()", +"d7c4e7ac": "HarlleriumCoin()", +"d7c4f9d3": "SignatureAdded(string,string,uint256)", +"d7c5b986": "LogContribution(uint8,address,uint256)", +"d7c61e7b": "CreateSaleAvgPrice(uint256,uint256,uint256,uint256,uint64,address)", +"d7c7159c": "buyWithKYCData(bytes,uint8,bytes32,bytes32)", +"d7c74279": "deployChildren(address)", +"d7c8112d": "WithdrawAllFunds(uint256)", +"d7c81b55": "gameId()", +"d7c81fdc": "MSCCStandardToken(uint256,string,uint8,string)", +"d7c8843b": "getEggsSinceLastHatch(address)", +"d7c8e90c": "voteAmendment(uint256)", +"d7c8f959": "CreateEmployee(address,uint32,uint32,uint16)", +"d7c94efd": "teamFee()", +"d7c97fb4": "erc721Contract()", +"d7c9a0e3": "getMyMoney()", +"d7ca01b5": "confirm(address,uint256)", +"d7ca20e6": "HashStore(uint256)", +"d7ca3a90": "CelebrityMarket(address)", +"d7ca7cc5": "changeLockingPeriod(uint256)", +"d7ca9949": "totalSoldTokens()", +"d7cb55a2": "AToken()", +"d7cbac05": "BONUS_ICO_STAGE1_PRE_SALE1()", +"d7cbbb73": "getAllCardsAddress()", +"d7cc43bf": "aSetStart(uint256)", +"d7cc8362": "isLatestMajorTree(bytes32,bytes32)", +"d7ccc2c3": "getLastPayment()", +"d7cd6c13": "burnFundAccount(address,uint256)", +"d7cd7209": "newGroup(address,bytes32,address[])", +"d7ce330b": "Deco()", +"d7cea877": "monthStr(uint256)", +"d7cee31e": "houseAddress()", +"d7cf1d20": "HDT_Token()", +"d7cf61d7": "assertSignedByBoth(uint256,bytes32,uint8,bytes32,bytes32)", +"d7cf7bcb": "purchaseSafe(uint256,uint256)", +"d7cff986": "submitAnswerCommitment(bytes32,bytes32,uint256,address)", +"d7d0afa4": "_fetchCreatedOrdersForMerchant(address)", +"d7d12297": "taskTotalBalance()", +"d7d15059": "functionName()", +"d7d1b48c": "_setWingsValue12(uint256)", +"d7d1bdbd": "getUnsoldOwner()", +"d7d23155": "owner_linkage()", +"d7d29315": "drawReuslt(uint256,address[],address[],uint256,uint256,uint256)", +"d7d319e4": "CWCreturnQuery()", +"d7d3c4d5": "pvpContenderRemoved(uint256)", +"d7d40523": "HardwareWallet()", +"d7d43b41": "MoedaToken()", +"d7d49532": "lastBlock_a9()", +"d7d5878d": "revokeSchedule(address,address)", +"d7d7442f": "updateThreshold(uint256)", +"d7d7be34": "oraclize_query(string,bytes[1])", +"d7d88043": "endSaleDate()", +"d7d8cdd5": "addTRA(address)", +"d7d90fb1": "ClearCLevelSignature()", +"d7d96a12": "StarToken()", +"d7d9fef0": "scheduleTimelock(address,uint256,uint256)", +"d7dae83c": "active_withdraw(address)", +"d7dbb88b": "getn2Exception(bytes32)", +"d7dbdbe3": "setVicepresidenteDeMesa(bytes32,uint256,bytes32)", +"d7dc6203": "calculateInterest(address,uint256)", +"d7dcaa19": "BuToken()", +"d7dccb1e": "EthSplit(address[],address)", +"d7dd2ae3": "ValidateCitySnapshotInternal(address,uint256)", +"d7dd8652": "refundCrowdsale()", +"d7dde189": "StartupToken()", +"d7de57c6": "challengeWithFutureCustody(address,uint256,bytes32[],uint256[],bytes32[])", +"d7de9c6e": "setOracleQueryString(string)", +"d7df7ef9": "_createWonder(address)", +"d7dfa0dd": "logic()", +"d7e07d5f": "destTokensReserve()", +"d7e0b6e3": "registerUser(address,bytes32)", +"d7e0d83d": "setPrvd(address)", +"d7e0e776": "getBalanceOfInstance()", +"d7e11e9d": "AddTicket(bytes)", +"d7e25c36": "isCapReached()", +"d7e2f000": "preallocationsWhitelist()", +"d7e30832": "TankTransfer(address)", +"d7e31d67": "setRewardChance(uint256)", +"d7e3aab2": "VestedMultisigWallet(address[],uint256,uint256)", +"d7e44b89": "splitPay(address[],uint256,address)", +"d7e4e1f7": "setSail(uint16,uint16,bool)", +"d7e5c07d": "allocateTokens(uint256,uint256,address)", +"d7e64c00": "investorCount()", +"d7e7088a": "setUpgradeAgent(address)", +"d7e751ff": "tokenWithdraw(uint256)", +"d7e8015a": "FuckToken(uint256,string,uint8,string)", +"d7e84fbf": "builder()", +"d7e8553a": "_deleteValidator(address)", +"d7e9ec6e": "RemovedBlackList(address)", +"d7ea39c6": "referralDone()", +"d7ea977b": "V1ChainToken()", +"d7ea97e2": "setBTHFoundationWallet(address)", +"d7ead1de": "right74(uint256)", +"d7eae6db": "setUnPauseEmergence()", +"d7eaef90": "LGTToken()", +"d7ebf53d": "countActiveCastle()", +"d7ec1fac": "CrowdSaleTokenSoldout()", +"d7ecb5e3": "MINI_GAME_BETWEEN_TIME()", +"d7ecba0c": "numBarriersPerBoard()", +"d7ecc129": "supplyTo(address,uint256)", +"d7ed3fb1": "get_participant_topl_address(address)", +"d7ed7453": "redeemWinnings(uint256)", +"d7edddb2": "withdrawAdministratorMoney(uint256)", +"d7edf88c": "replenishEth()", +"d7ef1356": "best_adjustment(bool)", +"d7ef4a04": "CreateCredoIco(address,uint256)", +"d7efbf34": "transition()", +"d7f08eed": "unlistSubName(bytes32)", +"d7f0d86b": "attackUnit(uint256,uint256)", +"d7f0df73": "Betcash(uint256,string,uint8,string)", +"d7f0f01b": "fund(uint8,uint8,uint8)", +"d7f31eb9": "forward(address,uint256,bytes)", +"d7f3c770": "Mesut()", +"d7f42ee2": "getBBLibVersion()", +"d7f56ef7": "partnershipsTokenAddress()", +"d7f59fd0": "tgeSettingsBlocksPerStage()", +"d7f5b43e": "setCapacityByIndex(uint256,uint256)", +"d7f6f81c": "getProviderBadge(address)", +"d7f746ce": "tickingBomb()", +"d7f7582c": "totalCapitalization()", +"d7f7f3aa": "markTransferTokens(address,uint256)", +"d7f8a053": "TokenRate(uint256)", +"d7f9d655": "Divies()", +"d7fa1007": "setHash(bytes32,bytes32)", +"d7fa445e": "claimBidReward(uint256)", +"d7fb4f1d": "endTime_()", +"d7fb5ef5": "angelSupply()", +"d7fb7427": "transferNewCoin(address,uint256)", +"d7fb8dc0": "messageForReason(uint8)", +"d7fc1b9b": "register(string,string,bool)", +"d7fc23a2": "createNewAsset(string,string,uint256)", +"d7fc98c3": "subscribeIndividual(bool)", +"d7fd00b0": "TEAMS_PER_ENTRY()", +"d7fd0e77": "requestTime()", +"d7fe270e": "multipleTokensSend(address[],uint256[])", +"d7febcb9": "TestUserBitFlag(address,uint256)", +"d7ff4d7a": "WODECESHIBI(uint256,string,uint8,string)", +"d7ffbbaa": "setInformation(string)", +"d8013c4e": "addNote(bytes32,bytes20,string,string)", +"d80162fc": "setRecommendStatus(bool)", +"d8018c42": "getReleaseTimes(address)", +"d801aa84": "isWalletFromUser(string)", +"d8020a18": "marketingPercent()", +"d80326a9": "VentanaToken()", +"d80364ba": "LogRegister(address,string)", +"d8047a07": "RobotChain()", +"d80528ae": "stats()", +"d8055812": "votesDecline()", +"d8058712": "UnicornAccessControl(address)", +"d8063ea6": "addDelegate(address,address,string,address,uint256)", +"d8070c40": "IcoPrice()", +"d807a688": "wper(uint256,uint256)", +"d8085306": "mintTokensForSecondStage()", +"d8085f78": "ownerCanClaimCard(address,address,address[3],uint256)", +"d8085fee": "multiMerge(address[])", +"d80866da": "isValidZ(uint16)", +"d8090cbf": "resetReclaim()", +"d809d248": "startNextGame()", +"d80a5c3b": "MyContribution()", +"d80ad1ed": "getSponsorshipProportionalAmount(address,uint256,uint256)", +"d80aea31": "_setCreatedBlockOnRevealsPhase(uint256,address,bool)", +"d80b1a68": "createAndEndowC1(uint256,uint256)", +"d80b2056": "emptyWrongEther()", +"d80cc340": "retainBalance()", +"d80d3025": "changeBonusSystem(uint256[],uint256[])", +"d80d9c55": "changeSecondsInBlock(uint256)", +"d80e821c": "reevaluateICO(uint256)", +"d80e8700": "CurrentTime()", +"d80ffb20": "drawNumber()", +"d8104e19": "GetMyEarning()", +"d810f298": "computeSettlementAmount()", +"d81111ab": "BuyTokens()", +"d8112523": "sendIncentive()", +"d811b100": "getHouseAddressOne()", +"d811b7ca": "transferToOtherBucketContract(address)", +"d811f09e": "ownershipTransferAllowed()", +"d811fcf0": "farmer()", +"d81230c8": "shareactive()", +"d812d961": "getSanName(uint256)", +"d812f2b0": "setDelegadoDeEscuela(bytes32,uint256,uint256)", +"d8132807": "_getMinAuctionStartPrice()", +"d8134a23": "removeAcceptedToken(address)", +"d813b4b9": "setArtIdt(string,string)", +"d8145062": "squirrelmasterReq()", +"d8148166": "DistributionMint(address,uint256)", +"d81494ba": "blacklist_addys(address[])", +"d8149fe7": "dive1(address)", +"d814ebed": "TruUpgradeableToken(address)", +"d8152cbc": "createBalanceSnapshot()", +"d815fa30": "ERC20Token(uint256,string,string,uint256)", +"d816187f": "PreIcoWallet()", +"d8162db7": "lockedUntilBlock()", +"d8174150": "MAX_PRESALES_EXTENSION()", +"d8175101": "ownerHasCardSimple(address,address)", +"d81849b8": "additionalTokenRate()", +"d818eb63": "Fundraiser(address,address,uint256,uint256,uint256)", +"d818ecee": "setDisputed(address,string)", +"d81a91e9": "get_party2()", +"d81ab0c1": "invoke(uint256,address,address,bytes)", +"d81ad101": "IMPACT_REGISTRY_ADDRESS()", +"d81b1020": "setForceContract(address)", +"d81c2232": "icoPhase2TimeBonusInPercentage()", +"d81c6741": "removeAddressFromBonuslist(address)", +"d81d5062": "relayBuyerCancel(bytes16,address,address,uint256,uint16,uint128,uint8,bytes32,bytes32)", +"d81d8f89": "getSalaryTokensTotalValue(address)", +"d81dd9f7": "destroyGame(uint256)", +"d81dfe30": "LOCKED_TIME()", +"d81e8423": "get(address,address)", +"d81efdc4": "euroCentsInOneEther()", +"d81f53fd": "EtherId()", +"d81f84b7": "getAddr(uint256)", +"d81f9830": "BONUS_WINDOW_2_END_TIME()", +"d8207301": "MyWishCrowdsale(uint256,uint256,uint256)", +"d820ab95": "secondStageReserve()", +"d8211b0d": "BENZCoin()", +"d821b9f9": "initialAllocations(address)", +"d8220323": "setLoto(address)", +"d82277cc": "createInvestment(address,uint256)", +"d823eec9": "TEAM_TOKEN_CAP()", +"d825b510": "addDisagree(bytes32)", +"d825ebc3": "calculateMinting(uint256)", +"d826505d": "isEthNoEnc(uint16)", +"d8267fef": "letItRain(address[],uint256[])", +"d826853e": "sellKeys(uint256,uint256,string)", +"d826f88f": "reset()", +"d826fdf1": "checkRefundExistanceByOwner()", +"d8270dce": "creationTime()", +"d82745c8": "withdrawCooldown(address)", +"d828435d": "getNonce(address,address)", +"d8291e97": "CHELSCOIN()", +"d8294ede": "minimumTimeout()", +"d82974f8": "moveUnsoldTokensToFoundation()", +"d829f1e0": "blendWithOthers(address,uint256,uint256,uint256)", +"d82a6d56": "isOBR()", +"d82b394f": "createShip(uint256)", +"d82beb9e": "sender_enode()", +"d82c6df4": "inactivate()", +"d82ce857": "getPI_edit_26()", +"d82e3962": "calculateReward(address)", +"d82ed7eb": "unwhitelistAddressPresale(address)", +"d82f6a3f": "maxWeiInvestment()", +"d82f94a3": "deleteMinter(address)", +"d82fa3f1": "doInvest(address)", +"d831a158": "ownerCtuContract()", +"d831b714": "withdrawDeklaBalance(address,bytes)", +"d832d0c8": "isFoundation(address)", +"d833590f": "totalSupplyPretty()", +"d833c736": "tripleRoomMax()", +"d833dbe9": "preSaleRate()", +"d834e619": "min(uint256[])", +"d834f1e8": "setConfiguration(string,string,uint256)", +"d8353b75": "vestingDateEnd()", +"d83616b2": "TokenSaleLockTransfer(uint256,uint256,uint256)", +"d83623dd": "startDistribution()", +"d83671b7": "addLock(address,bool)", +"d83678ac": "tradeToken()", +"d8367d41": "startIncomeDistribution()", +"d836b12d": "getInvestorTokenPercentage(address,uint256)", +"d836f06a": "VestingKYCSetted(address,uint256)", +"d836f794": "sellKebabs()", +"d836fbe8": "changeHatchEscapeCaller(address)", +"d8377b20": "buyAndSetDividendPercentage(address,uint8)", +"d8381df0": "createCastle(uint256,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"d8389dc5": "hash(bytes32)", +"d8392c92": "WithCoin()", +"d83a223a": "changeFounderWalletAddress(address)", +"d83a7f67": "getDepositAddress(address)", +"d83a8d11": "testProposing()", +"d83aabbe": "getWagerCount()", +"d83c68b9": "Pilendthereum(uint256,string,string)", +"d83cb681": "getMixer(bytes32,uint256)", +"d83d2afc": "leftoverWeiAmount(address)", +"d83edd70": "refundEth(address)", +"d83f24a2": "multiMerge(address[],uint256[])", +"d83fcfa3": "TMN()", +"d8412808": "HazzaTokenInterface()", +"d84201bf": "buy5()", +"d8420e3a": "_isValidWithCompositions(uint256[],uint256)", +"d8436663": "destroyIBTCToken(address,uint256)", +"d8439165": "upgradePonyResult(uint8,uint256)", +"d843dcbb": "ELF()", +"d843e40a": "getRoundNum()", +"d843e721": "convertToATK(uint256)", +"d844a0fa": "TierionNetworkToken()", +"d845a4b3": "request(uint256)", +"d8460e8c": "Menu09()", +"d8464746": "getEyesValue(uint256)", +"d847e48f": "BlingTokenSale()", +"d8485ed6": "FCOIN1519Token(uint256,string,string)", +"d84891da": "EM122()", +"d8489a81": "MaxDistribPublicSupply_()", +"d848dee7": "setDeprecated(bool)", +"d8493983": "GroverBucks()", +"d849eeba": "gotResult()", +"d84acf20": "restoreAllTempTokens(uint256)", +"d84bd737": "xcc()", +"d84cb6ad": "ETH_Rate_Factor()", +"d84d2a47": "spreadMultiplier()", +"d84d95ba": "confirmMultipleTransactions(uint256,uint256)", +"d84dbdc3": "verifyInvestor(address)", +"d84f93cb": "priceOfOfficalCardSold()", +"d84fdbed": "getSponsorships(address,address,bool)", +"d850288b": "etherlist_top()", +"d8507a8d": "unfrezee()", +"d851eb5d": "betPlaced(address,uint256)", +"d8523fc2": "askForMatch(uint256)", +"d8526677": "MintMasterTransferred(address,address)", +"d852748c": "totalPoolOptions()", +"d8528af0": "allowedSpenders(address)", +"d85349f7": "cliffDuration()", +"d8542d51": "oldTokenAddress()", +"d8550112": "putServerAddress(string,address,uint256)", +"d855c059": "setExtraConfig(uint256,uint256,uint256,uint256,uint256)", +"d85633ec": "releaseOwnership()", +"d8567213": "chargeAll(uint256)", +"d856cbae": "ICOMinTresholdReached(uint256,string)", +"d8574e16": "addressD()", +"d857561d": "enableWithdrawal()", +"d8578d14": "showPlayerSafeById(uint256,uint256)", +"d857eba6": "getTagAt(uint256)", +"d8583895": "getNumberOfDeposits()", +"d85874b9": "badgerAmount()", +"d8589be3": "CoinFlipper()", +"d858b5c8": "order_sell(uint256,uint256)", +"d858ebf4": "createVisaOffering(uint256,bytes32,bytes32,uint256,uint256,bytes32)", +"d8590f93": "clearingPrice(address,bytes32)", +"d8592d79": "closeWormhole()", +"d85a82f6": "processDIVD()", +"d85b07e0": "stopIcoAndBurn()", +"d85b228e": "testCreateGame(string,string,bool)", +"d85b559f": "startSelection()", +"d85ba798": "getCutieId(bytes)", +"d85bd526": "running()", +"d85c8966": "ownerTransfer(address,uint256)", +"d85d3d27": "mint(string)", +"d85d656f": "getSMPTokensAmountPerWei(uint256)", +"d85d6d41": "finishLocking()", +"d85e2d20": "b(address,uint256)", +"d85e5486": "privateCap()", +"d85e88db": "item(address,uint256,bool,bytes)", +"d85edab6": "m_investors(uint256)", +"d85f4450": "numberOfWins()", +"d860ced1": "TIER1END()", +"d86123e1": "setMany(address[])", +"d8615e5b": "transferAndPay(address,uint256,bytes)", +"d86202cb": "getUserProductAtIndex(bytes32,uint256)", +"d8627542": "intialSupply()", +"d862b611": "extraMint()", +"d8632388": "allPlayCount()", +"d8632ae3": "sign(uint8,bytes32,bytes32)", +"d863f7f4": "DigiPeso()", +"d86491fc": "testReentracy()", +"d864c322": "changeAccountStorage(address)", +"d864e740": "committee()", +"d8650f49": "tokenGenerationLock()", +"d865897c": "_getHashKey(address,uint256)", +"d865a374": "instruct_1()", +"d865ae9b": "hasRole(address,bytes32,bytes32)", +"d865dc4f": "tokensSoldCount()", +"d8674554": "tokenTransfertoKYC(address,uint256)", +"d867bb25": "getONG(bytes32)", +"d8682e69": "returnTimeLeft()", +"d86892a7": "setSellerGuarantee(uint256)", +"d868c718": "scheduleFight()", +"d8690c22": "isAvailableLockSlot(address,uint256)", +"d8692f17": "calcMerkleDefault(bytes32[],uint256,uint256,bytes32)", +"d869c681": "issuedTokenBalance()", +"d869d86d": "getAmountsForChangeWeight(address,address,uint256)", +"d86afbbb": "giveItem(address,uint256)", +"d86b2982": "numbersCount()", +"d86b3721": "getblock()", +"d86b8739": "redeemedTokens()", +"d86bc1b0": "cancelByAdmin(uint256[])", +"d86c31e5": "BOXSToken(address,address,int256)", +"d86c5bf7": "angelWheelFinanceSupply()", +"d86df333": "deleteAccounts(address,address,address[])", +"d86e1850": "AuditBalances()", +"d86e762d": "getTotalAmountRaised()", +"d86e79c3": "createFixedPeriodVpfFactory(string,bytes32,uint256,uint256,int256[],uint256,uint256,uint256)", +"d86eb3b7": "reservedTokensAddress()", +"d86ec25a": "setNotaryParcel(uint256)", +"d86f26f2": "BigBucksToken()", +"d86f8ccd": "getAccountLockState(address)", +"d86fb89d": "updateRoundsInformation(uint256)", +"d871e94b": "tokenClaimWaitingPeriod()", +"d8730ef2": "getMaxCommunityTokens()", +"d8737d8a": "buyEthUnit(uint256,uint256)", +"d873f0d6": "tokenSaleMin()", +"d874082a": "fundtransfer()", +"d8743fad": "weiMinContribution()", +"d87522ae": "pauseEnd()", +"d8754716": "createNewTankHull()", +"d87574e0": "airDropPot_()", +"d87624ba": "buyGrimReapersAgainstEther()", +"d87692d9": "transferAllAndCall(address,bytes)", +"d876c9c0": "SECOND_AUCTIONS_INITIAL_PERCENTAGE()", +"d8772e79": "get_transaction_count()", +"d8774d99": "restrict(bool)", +"d8783b04": "PRICE_MULTIPLIER_ICO6()", +"d8787fde": "nextContract()", +"d8788e68": "getTokensForSaleCap()", +"d879380d": "timeoutRegistration()", +"d879914a": "getBidsLength()", +"d879e911": "JORDAN()", +"d87a253b": "registerNameXnameFromDapp(address,bytes32,bool)", +"d87adaa0": "registerPubKey(address,bytes)", +"d87b5c29": "getSpawnCount(uint32,int256)", +"d87bc4cd": "WEGC()", +"d87bca3f": "VictorieumToken()", +"d87be21b": "lastBlock_a4Hash_uint256()", +"d87c3df5": "applyBonus(uint256)", +"d87c5df6": "assignTokensWallet(address,address,uint256)", +"d87c5fb9": "balanceOfBuyer(address)", +"d87c9478": "getStageAverageBonus(uint8)", +"d87ce037": "round1Cap()", +"d87d2a66": "ETH_CRWDTOKEN()", +"d87d2b8d": "BuyMOYTokens()", +"d87d9a66": "get_account_balance_eth(address)", +"d87ddccc": "WithdrawEvent(string)", +"d87e568a": "setHWCDeposit(address,uint256)", +"d87f8da5": "cancelAuction(uint256,bytes)", +"d880285e": "sPeriodEndDate()", +"d880610c": "appendKeyValue(string,address)", +"d88080ed": "ERC20Standard(uint256,string,string,uint256)", +"d880b0b0": "LogChangePCWallet(address)", +"d8819e0a": "maxTrainerLevel()", +"d8822727": "CarDeregistered(uint256)", +"d882ad5e": "Valeriumcoin()", +"d883e789": "PayWins(address)", +"d8844241": "getTotalCategories()", +"d884a322": "betMaxAmount()", +"d886daa2": "revokeAccessDeposit(address,address)", +"d8879dd8": "isValidString(string,string,uint256)", +"d8879fdc": "deleteBio(bytes3)", +"d887ac35": "mUpgradeCostFactor()", +"d8887efc": "withdrawForTrexdevshop()", +"d88905fa": "sanMint(string,string)", +"d8894bb5": "fraction()", +"d88a3af9": "register(address,string,string,uint256,string,string,bytes32,address,address)", +"d88ae250": "setProjectsContractAddress(address)", +"d88b0815": "numberOfCrySolObjects()", +"d88b2da2": "_registerReferral(string,address)", +"d88b8676": "addTrustedAccount(address)", +"d88b9732": "BUXCOIN()", +"d88bfbad": "ContractDisabledBlock()", +"d88c271e": "isWhitelistedUser(address)", +"d88c5237": "VenusCoin()", +"d88cdbd6": "setMe(uint256)", +"d88d8b38": "registerToken(uint256,bytes,uint256)", +"d88dc1c6": "winner_announced(address,uint256)", +"d88e92a7": "OmegaProtocol()", +"d8909e74": "withdrawMyDeposit(uint256)", +"d8910b70": "getTransferProxy(uint32,int256)", +"d89135cd": "totalBurned()", +"d8915fc5": "DCAssetBackend(bytes32,bytes32)", +"d8916bb9": "etherToWei(uint256)", +"d89397b1": "btcsBuyRecipient(address)", +"d893b9f1": "soldTokensPreSale()", +"d894e937": "setSomeValue(string)", +"d894f861": "costFunds()", +"d895530c": "getCurrentCandidateForPrize()", +"d8959512": "getConnectorBalance(address)", +"d8966ad3": "getTombByOwner(address)", +"d896dd64": "setStatus(uint256,uint8)", +"d89739b1": "Marketplace(address)", +"d897833e": "setSaleStatus(bool)", +"d898e1b9": "_depositEther()", +"d899299e": "realUnicornAddress()", +"d899d312": "Testimony()", +"d899e112": "target3()", +"d89ab6d3": "YouCollectCoins()", +"d89b465c": "getUnitAttackIncreases(address,address,uint256)", +"d89b8057": "setOscar(address)", +"d89b908d": "checkFundingCap()", +"d89bcaaa": "BATsPerEth()", +"d89cca38": "assignLawyer(string)", +"d89d4404": "_payEther(uint256)", +"d89dc0ad": "MarketOpen(address)", +"d89ea0f5": "setClearingPriceComponent(address)", +"d89edecf": "returnAmountPlusInterest(uint256)", +"d89ef018": "addUsersWhitelistA(address[])", +"d89f9719": "getOrderOtherArguments()", +"d89fb919": "episodePurchase(uint256,address,uint256)", +"d89fda34": "Fish()", +"d89fec58": "aboutCurrentPack()", +"d8a0aa6c": "getPositionById(address)", +"d8a119b9": "ownerSetVisible(string,string)", +"d8a140f9": "peony()", +"d8a1e70a": "widthrawDev()", +"d8a2848d": "setPaymentEscrow(address)", +"d8a351de": "_getDefaultPartitions(address)", +"d8a3daa0": "createEntry(uint256,uint256[])", +"d8a3f0bf": "getFactoryPrice()", +"d8a489d9": "pauseTournament()", +"d8a506f3": "thirdStageDiscountPriceOfTokenInWei()", +"d8a52178": "ContractManager()", +"d8a54360": "totalRemaining()", +"d8a5cca1": "Finalised(address,uint256)", +"d8a6021c": "transferTreasury(address)", +"d8a7233e": "addBook(string,string)", +"d8a74c7c": "getGamblingPartySummarizeInfo(uint256)", +"d8a74f3b": "ThrowError()", +"d8a79d87": "wolf3Balance()", +"d8a865f6": "getElementAt(uint256)", +"d8a8e03a": "move(uint256,address)", +"d8a9e45e": "getProductContractUser(address)", +"d8aa9f85": "totalForOutcome(uint8)", +"d8ab8274": "getStates()", +"d8ab9208": "addressByIndex(uint256)", +"d8aba1c6": "partFees()", +"d8ac1bb3": "buyTokensReferral(address,string)", +"d8ac26c0": "ForksTestContract()", +"d8ac289f": "frozenWallet4y()", +"d8ac5b4e": "tokensPerCents_gte5kUsd()", +"d8ad1c5c": "getCapAmount()", +"d8ae6139": "WavesPay()", +"d8aeedf5": "freezingBalanceOf(address)", +"d8afc2fe": "getAdminVariables()", +"d8afd392": "advisorySupply()", +"d8b0403a": "Bithemoth(address,address)", +"d8b0b499": "country()", +"d8b11d54": "AddItemExtra(uint32,uint16,uint256,uint16,uint16,string,address)", +"d8b120c1": "getMeshPointByName(int256,string)", +"d8b163d0": "eventsAdmin()", +"d8b29324": "unlockAmount(string,uint8)", +"d8b3315f": "public_withdraw(uint256)", +"d8b3a2eb": "isOdd(uint256)", +"d8b3ad77": "setDateTimeLib(address)", +"d8b3d69a": "getVendorApplicationScoringTrack(string,uint256)", +"d8b3e417": "USD20TestToken()", +"d8b4e580": "uploadBalances(address[],uint256[])", +"d8b50a63": "addAction(string,uint256)", +"d8b5cf43": "beneficiary_modify(address)", +"d8b66ae1": "sendTokens(address[],uint256[])", +"d8b79543": "FxxkToken()", +"d8b86753": "getOrderCount(address)", +"d8b964e6": "approved(address)", +"d8b98118": "CRLperEther()", +"d8b98fca": "AirDrop(address)", +"d8b9a2a0": "addContract(address,address,uint256)", +"d8b9a7e8": "CLC(uint256,string,string)", +"d8ba6de2": "Endorsements()", +"d8ba8ce3": "setNextDiscountTTMTokenId6(uint64)", +"d8baa905": "getAreaEvaluation(address,uint256,address)", +"d8bad5bd": "userLoans(address,uint256)", +"d8bbae03": "getTransferValueFor(address)", +"d8bd4761": "createCurrency(string,string,uint8,uint256)", +"d8be2838": "unSuspend(address)", +"d8be30fc": "getUserMessage(address)", +"d8bea898": "addReferredInvestor(string,address)", +"d8bf0568": "level1Bonus()", +"d8bf0ef8": "finishBurning()", +"d8bf1773": "calculatePoohBuySimple(uint256)", +"d8bf63b7": "START_BLOCK_NUMBER()", +"d8c02572": "Gallery_MuYi_No2()", +"d8c1c3c2": "getNumberOfTx(uint256)", +"d8c1fad1": "StakeIt()", +"d8c251b5": "isNotRegistered(address)", +"d8c26129": "foundationWithdraw()", +"d8c2c1c1": "getcoeffcient(address,uint256)", +"d8c2c878": "PlexCoin(uint256,string,uint8,string)", +"d8c30700": "getCurrentCap()", +"d8c34127": "isKnownSignature(string)", +"d8c35273": "getHumanNumber()", +"d8c37ecd": "calculateMarketPixelPrice(address[16],uint256)", +"d8c3c1ed": "finalizeIto(uint256,uint256,uint256)", +"d8c42e42": "doublePrice(uint256)", +"d8c4661c": "getNID()", +"d8c4c34e": "KaraOmToken()", +"d8c4cd7d": "saveStudent(uint256,string,string,address,address)", +"d8c57892": "getDecision(bytes32)", +"d8c5c6f8": "disapproveInternal()", +"d8c65cbb": "_setEyesValue4(uint256)", +"d8c681a7": "BaoFengChengCoin(uint256,string,string)", +"d8c6bd6f": "checkMine(uint256)", +"d8c90762": "addTrustedIssuer(address,string)", +"d8c929a8": "getCurrentRoundRewards()", +"d8c9334b": "TextChanged(bytes32,string,string)", +"d8c94cd5": "_addToken(address,uint256)", +"d8c97f34": "transferFromVest(uint256)", +"d8ca713a": "getStringMember()", +"d8ca8a55": "distributeIQTTokenBatch(uint256)", +"d8cb2d4a": "STOCoin()", +"d8cb4aa3": "bonus(address)", +"d8cb52d3": "getFreeRabbit(uint32,uint256,uint8,bytes32,bytes32)", +"d8cba0ba": "transferWallet(address)", +"d8cba7a2": "phase3Cap()", +"d8cbce53": "calculateDividendsFor(address)", +"d8cc3c5e": "get_milestone_information(uint256,address)", +"d8ccd0f3": "free(uint256)", +"d8cdac0d": "window0StartTime()", +"d8cecc7b": "MdedicalChainCoin()", +"d8cf9184": "getServerCreationFee()", +"d8cfd15a": "LogB(bytes32)", +"d8cff716": "NBAT101(address,address,address,address,address)", +"d8d07637": "poll(uint32)", +"d8d0819f": "CoinVilla()", +"d8d1d507": "whiteListContracts(address)", +"d8d1efea": "releaseTimeSecond()", +"d8d34c89": "ManualTransfer(address,uint256)", +"d8d3b1a4": "TIER1()", +"d8d40cee": "gameNumber()", +"d8d45d13": "setShipping(string)", +"d8d4a75e": "AUD_Omnidollar()", +"d8d4ec02": "checkVesting(address)", +"d8d5740c": "XMLYToken()", +"d8d5a200": "payBountyManager()", +"d8d736c5": "_makeDepositForPeriod(bytes32,uint256,uint256)", +"d8d777f2": "_attack(uint32,uint8,uint64)", +"d8d8e2f2": "test_23_assertGasUsage200Boards()", +"d8d9159d": "pr0coinAddress()", +"d8da3bc0": "getCurrentPotSize()", +"d8da708f": "preico_enddate()", +"d8db583f": "getFreelancerSkills(address,address)", +"d8dbb475": "JSONpath_string(string,string)", +"d8dbb712": "OfferCancel_internal(uint8,bool)", +"d8dbe4c9": "setContractManager(address)", +"d8dd2b79": "emitTransferFeeRateUpdated(uint256)", +"d8de5a41": "splTransferFrom(address,address,uint256,uint256,uint256)", +"d8df44fd": "maxTimeBonus()", +"d8df5dc1": "lockAmount()", +"d8df9aad": "setDayWithdrawCount(uint256)", +"d8e09dac": "setTrustee(address,bool)", +"d8e1b9ba": "explore2(uint256,address,bool)", +"d8e20e2c": "brickPrice()", +"d8e223b5": "issueMedal(address)", +"d8e2e392": "admin_set_isRequireData(bool)", +"d8e30740": "ETH_RECEIVED_CAP()", +"d8e3c1c8": "buyPlatinum(uint256,uint256,uint8,bytes32,bytes32)", +"d8e3c33f": "gridToIndex(uint256,uint256)", +"d8e476ab": "icoPhaseDiscountPercentage2()", +"d8e4ab0d": "isOmegaContract()", +"d8e4f9d9": "teamTwo()", +"d8e5ae6a": "Etheramid()", +"d8e5c048": "scheduleCall(address,uint256,uint256)", +"d8e5c797": "concat(string,string,string,string)", +"d8e5e64e": "getAsAddressOrZero(bytes32)", +"d8e60616": "OFNOG()", +"d8e6b249": "findPossibleDelegatorsOf(address)", +"d8e71b35": "ico3receivedTotal()", +"d8e74ed7": "monsterStrength()", +"d8e86854": "setPrices(uint256,uint256,uint256,uint256)", +"d8e8752a": "resetUsedToday(uint8,uint8)", +"d8e8b177": "interestOf(address)", +"d8e9602b": "tierCap(uint256)", +"d8e963b3": "PRE_ICO_END_TIME()", +"d8e97a56": "averageTimestamp()", +"d8eb3a98": "withdrawAuctionBalance()", +"d8eb6af3": "redeemEthers(address,uint256)", +"d8ebfe5a": "interaddmoney(address,uint256,uint256)", +"d8ec55ed": "meh()", +"d8ec696f": "__address1__()", +"d8edbd79": "ZTToken()", +"d8ee2ff4": "_buys(uint256,uint256)", +"d8ee796f": "founderAllocatedTime()", +"d8eea572": "getMinInt64()", +"d8eebd8d": "spentBalance()", +"d8eef28b": "ordersFor(uint256,uint256)", +"d8f012c6": "StatelessFactory(string,string,string)", +"d8f06b52": "closeAfterWhitelisted(address)", +"d8f0b9c4": "amountToBeneficiary()", +"d8f0c358": "getSetupParametersCount()", +"d8f163ab": "totalTokensDistributed()", +"d8f248b8": "getForge(uint256)", +"d8f2cd12": "onceSetOwners()", +"d8f2f09f": "china()", +"d8f306a1": "setAvailableToken(uint256)", +"d8f342be": "getBTCETH(uint256)", +"d8f3790f": "ethBalance(address)", +"d8f42fca": "SzeToken(address,address)", +"d8f45fdb": "LICToken()", +"d8f5d098": "privateUnlock(address)", +"d8f6d596": "getSale(uint256)", +"d8f6dcf2": "getTaskById(bytes32)", +"d8f71809": "MAX_COMMISION()", +"d8f9659b": "withdrawnTokens(address[],address)", +"d8f9d144": "changeOwner(string,address)", +"d8f9e51b": "EkoBeerCoin()", +"d8fa191b": "setProviderDetailFields(uint256,bool,bool,uint256)", +"d8faefc9": "fixDistribution(uint8,uint256)", +"d8fbbf31": "removeContractFromWhiteList(address,uint256)", +"d8fbe994": "transferFromAndCall(address,address,uint256)", +"d8fbff9f": "createDroneFromVault()", +"d8fce0d4": "pinchVillain(uint256,uint256)", +"d8fcfd6b": "convertRealTo256(int128)", +"d8fd1ed9": "creatorReward()", +"d8fd2043": "getSkullyById(uint256)", +"d8fd7ae3": "subtractAllowed(address,address,uint256)", +"d8fe1558": "BaseICOTokenWithBonus(uint256)", +"d8fe511f": "tithes()", +"d8fed39e": "tokenSoftcap()", +"d90025d1": "DIVIDEND_FUND_FRAC_TOP()", +"d900a6ae": "hgtSold()", +"d901402b": "getCommitHash(address,uint256)", +"d9019530": "request(address,uint32)", +"d901b98c": "test_1_generationAcrossBlocks_increaseBlocksBy100()", +"d902ac2e": "insert_data()", +"d9037441": "setEthFundDeposit(address)", +"d9037522": "removeVoter(address,string)", +"d903c5ae": "minimumTDEContributionInWei()", +"d904094e": "ownerCancelArmyMarketplace(uint256)", +"d9057007": "supportsInterface(address,bytes4)", +"d9067fbd": "initCongress(address)", +"d9076129": "secondBonusPercent()", +"d907e02e": "_cancelBet(uint256)", +"d9082962": "totalRefunded()", +"d9089b11": "_processDividends(uint256)", +"d9099f67": "endPreICOStage3()", +"d90a28c0": "fullProfit()", +"d90a8224": "getNumberOfSuccessfulDeals()", +"d90a88cd": "getContentReplies(uint256,uint256)", +"d90b02aa": "left80(uint256)", +"d90b4958": "completeProject(bytes32)", +"d90c1759": "dayFor(uint256)", +"d90c2861": "Albertheijn()", +"d90cdfb4": "getCanvasInfo(uint32)", +"d90d5b58": "copyright(address)", +"d90d870b": "adminSetPercent(uint256)", +"d9106264": "clearAuth(string)", +"d910c805": "MAX_POWERBALL_NUMBER()", +"d9114476": "addAudit(bytes32,uint256,bytes32)", +"d912d248": "transfertOwnership(address)", +"d912ebb2": "tokensIssuedIco()", +"d9134c46": "isGlobalConstraintRegistered(int256,address,int256,address)", +"d9135493": "AdPotato()", +"d913dea2": "UsdRateSet(uint256)", +"d9144448": "upgradeProposal(address,address,address,uint256)", +"d9144712": "numberClaimToken()", +"d914cd4b": "addPool(address)", +"d915562b": "isControlled()", +"d9159f60": "sealedBy()", +"d915cdbd": "investBalances(address)", +"d916d8fd": "getPlayersCountByGame(uint256)", +"d916ec32": "getEmissionProviders()", +"d917863e": "addExchangeTestAccounts(address,address)", +"d9178993": "maxPeriodDuration()", +"d917deb5": "Donate()", +"d91921ed": "addBalance(uint256)", +"d9194d2c": "toggleTransferable(bool)", +"d9194fcb": "setCEO(address,bytes)", +"d91aee02": "getTotalGamesParticipated()", +"d91c98d3": "startingBlock()", +"d91ca13e": "EquinoxCoin()", +"d91d81c6": "preIcoEndAt()", +"d91dc952": "timeLock(address,uint256)", +"d91e1c63": "totalGambles()", +"d91e24c2": "TIMEToken(address,uint256)", +"d91f3f33": "BookERC20EthV1Dec()", +"d91f68a2": "currentMessageNumber()", +"d92126fc": "NewFees(uint256,uint256,uint256)", +"d9214848": "CONFIGURE(bytes32,bytes32)", +"d921eb78": "isRefund()", +"d9226ced": "_setMaxAssets(uint256)", +"d922aa30": "core(uint256,address,uint256)", +"d922b6ab": "stage_1_tokens_scaled()", +"d922cd12": "InsightChainToken()", +"d922d5c8": "TimeLockedController(address)", +"d922f603": "Purpose()", +"d923a0be": "setLoyaltyWallet(address)", +"d923c99e": "getRecordByRow(uint256)", +"d9244bf9": "maximumHodlDuration()", +"d9246bec": "activateICO(uint256)", +"d9249e7e": "PuppiesCore()", +"d924c660": "shift_right(uint32,uint32)", +"d9269cb4": "at_permille(uint256)", +"d92782ac": "sumICOStage5()", +"d927b5ad": "addDistributionPeriod()", +"d928a3d8": "_getSchellingRoundSupply()", +"d928e32e": "ERC20Basic(string,string,uint8,uint256)", +"d9296e45": "totalWeiFunded()", +"d92c4f7c": "AirContactToken(uint256,string,uint8,string)", +"d92ca5b4": "tokensTeam()", +"d92cb5b0": "WinRound(address)", +"d92d5bb3": "ADSToken()", +"d92d7056": "option20name()", +"d92da722": "processBuyRequestFiat(string,uint256,address,uint256,uint256)", +"d92da8f8": "bountySupplyRemaining()", +"d92dc325": "MintAndTransferToken(address,uint256,bytes32)", +"d92ebe46": "createDAO(address,uint256,uint256,uint256,string,string,uint8)", +"d92ec71b": "addDeal(uint256,string,string,uint256,bytes32,string)", +"d92ed48d": "rebalanceBuckets()", +"d92fb5e9": "newClaimer()", +"d9300e30": "checkIfAllALCDistributed()", +"d9305ba7": "LOG_OwnerDeposit(uint256)", +"d930a90b": "testFailMoveBalanceDueToInsufficientFunds()", +"d93112e3": "totalEarlyStage()", +"d9326337": "PiaoPiaoToken()", +"d932b248": "AssetISR()", +"d932ed92": "MarriageCertificates()", +"d933b5f2": "SLABSToken()", +"d933c1fb": "XYOracleBonus()", +"d933dac7": "view26()", +"d9357438": "getInfoByAddr(address)", +"d9359419": "payoutERC20(string)", +"d935bac3": "test1Vote()", +"d935c8b4": "totalEthSales()", +"d935e0a7": "BBCC(uint256,string,uint8,string)", +"d936547e": "whitelisted(address)", +"d9368ba2": "getUserOptState(address,address)", +"d93761fb": "transferSKM()", +"d937ed44": "grantVestedEDEXContract()", +"d9386789": "coreTeamMemberTwo()", +"d9386c9f": "cofounderVUPDestination()", +"d939727d": "setMaxTokenNumbers()", +"d939c960": "fundRecipient()", +"d93a0a8e": "newClassPlayer(uint256,uint256,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"d93a64a2": "updateDebris(bytes32,uint8,bytes32,address)", +"d93b4451": "Authorise(bytes16,address,address)", +"d93b4ee7": "disableLogic(address)", +"d93d6ad0": "isKeyHolder(address)", +"d93da7f0": "ROUND_5_PRESALE_BONUS()", +"d93dbeff": "calculateLevel(bytes8,bytes5)", +"d93debd5": "registerDappAddress(address)", +"d93e5aeb": "count_next_address(address,uint256)", +"d93e7573": "disown(bytes32)", +"d93eeb5c": "safeTransferManyFrom(address,address,uint256[],bytes)", +"d93ef85f": "Photos()", +"d93fabfa": "addSeller(address)", +"d94073d4": "PT()", +"d94085cc": "FindMyFish_EnterBarcode(bytes32)", +"d9409bc5": "WFCC()", +"d940c3ee": "processPayroll(address,uint256)", +"d94123b8": "channel_api()", +"d94178c2": "getvalue(string)", +"d9417b6a": "balanceWosPoolToWosSystem()", +"d9417d69": "wikiRemoveTokenFrom(address,uint256)", +"d941c4ad": "prepare(bytes32)", +"d94288de": "totalFeatures()", +"d94389bd": "__char(bytes1)", +"d94395e2": "lastCitizenPaid()", +"d943c8b6": "oldHolders(address)", +"d9441f14": "playerMsgs(uint256)", +"d944534a": "generate(uint256,address,string)", +"d944c749": "ADVISOR_FOUR()", +"d945799f": "removeLockFund(address)", +"d94585bd": "proveAndClaim(bytes,bytes,bytes)", +"d9468475": "findRecentInterest(address)", +"d946af8f": "addNodeAddress(uint256,address)", +"d9474ad7": "unlockedProvider(address)", +"d9479692": "contract_name()", +"d947c8d1": "transferSketch(address,uint256)", +"d947e234": "offerGuardianVend(uint256,uint256)", +"d948d468": "forward(bytes)", +"d94929fe": "setTokenSaleRounds(uint256[5],uint256[5],uint256[5],uint256[5],uint256[5],uint256[5])", +"d94a0a7d": "findNextwaitPairBetIDs(uint256,uint256)", +"d94a75bc": "MELON_CONTRACT()", +"d94acc0a": "distributeVSN(address[],uint256)", +"d94b9843": "toContractAddr()", +"d94c7c29": "updateTokPerLockRate(uint256)", +"d94ca0f9": "approvePrimordialTokenAndCall(address,uint256,bytes)", +"d94d0316": "timeIncrease()", +"d94d0787": "EthlyteToken()", +"d94fd026": "applyPixelChange(uint256,uint256,uint256,uint256,uint256[])", +"d94fe832": "idOf(address)", +"d95030cb": "ticketTransfers(uint256,uint256)", +"d9506c5f": "startSettle(bytes,uint8[2],bytes32[2],bytes32[2])", +"d950aec6": "splitWinnings(uint256)", +"d950c432": "multiFreezeWithTimestamp(address[],uint256[])", +"d950cc3c": "getUserCap()", +"d9510215": "withdraws()", +"d9515238": "forward_funds(uint256)", +"d951d39a": "tokensIssuedForBonusRangeThree()", +"d951d7ec": "updateMIN_BET(uint256,uint256)", +"d951e357": "bonusFourthWeek()", +"d9520c9a": "allTokenOwnerOnStart()", +"d9527fa7": "buyShares()", +"d95374ce": "pendingJackpotForHouse()", +"d95402e7": "Redeem()", +"d95405f2": "lockTokenDays(address,uint256,uint256)", +"d95425e6": "TXwithCode(bytes32)", +"d95431cd": "lookupFeaturedSprites(uint256)", +"d9548e53": "isExpired(uint256)", +"d954a949": "setDeal(address,bool,uint256,uint256,uint256)", +"d954af09": "revealBid(bytes32,uint256,address,address,address,uint256,uint256)", +"d954bd4a": "ICO_TIER_LAST()", +"d954cbcb": "amountInvested()", +"d95514a8": "Regulator()", +"d955ec17": "setMiniumInputEther(uint256)", +"d95660be": "timeNow()", +"d956634f": "claimTokensAndRefund()", +"d9573c1a": "taxEth(uint256,address)", +"d9575ec5": "registerNameXID(string,uint256,bool,uint8)", +"d95808f0": "lastBlock_f3()", +"d9583497": "acceptFulfillment(uint256,uint256)", +"d9592676": "packKey(uint8,uint128)", +"d9597016": "multisetCustomGasPrice(uint256[],address[])", +"d95983c3": "Destroy(address,address,uint256)", +"d959868a": "total_no_of_CTD()", +"d959cbd2": "fMul(uint256,uint256)", +"d959e244": "left25(uint256)", +"d95a0aa5": "setDirectMintLimit(uint256)", +"d95a2d42": "lendGovernmentMoney(address)", +"d95a820f": "LogStartPreICO()", +"d95ab72d": "getMemberWallet(address)", +"d95ace6f": "checkSigned(bytes32,uint8,bytes32,bytes32)", +"d95b6371": "isOperatorFor(address,address)", +"d95c6092": "StartreasureToken(uint256,string,uint8,string)", +"d95efb98": "genesisAddress(address)", +"d95ffc08": "myEthBalance()", +"d9606ca1": "WINE(uint256,string,string)", +"d96073cf": "swap(uint256,uint256)", +"d960924d": "dtAddEthBalance(address,uint256)", +"d960ede1": "sectionPrice(uint256)", +"d96152c3": "executeRuling(uint256,uint256)", +"d961de44": "domainConnector(bytes32)", +"d9629e06": "casinoGames(uint256)", +"d962a68b": "buyTokensByUSD(address,uint256)", +"d962c51e": "redeemByTranche(bytes32,uint256,bytes)", +"d962dd99": "setCompte_43(string)", +"d9637826": "safe_sub(uint256,uint256)", +"d964f28a": "TokenAiNetworkToken(address,address)", +"d9652cb1": "startTimestampOfBonusPeriod()", +"d965ea00": "getMemberLength()", +"d9663f6a": "START_PREICO_TIMESTAMP()", +"d966cfc3": "totalAllocatedToAdvisors()", +"d967f752": "rentMachine(address,uint256,uint256,uint256)", +"d968595f": "isValidProposal(uint256)", +"d968dab1": "chipBalanceOf(address,address)", +"d9696054": "readInfoList(address,uint256,uint256)", +"d969b919": "Etherplanet()", +"d969ead4": "countpro(uint256)", +"d96a094a": "buy(uint256)", +"d96a22b8": "windowBonusStep1()", +"d96a8687": "XMPToken()", +"d96aee49": "MultipleConstructorTest()", +"d96bcd8f": "randomTargetAssign()", +"d96bfbb3": "resetUser(uint256,address)", +"d96c0991": "quitFromAirdrops()", +"d96c26c9": "submitTransaction(address,uint256,bytes,bytes,bytes)", +"d96c30a4": "checkTime(address,uint256)", +"d96c550a": "_preValidatePurchase(address,uint256,uint8)", +"d96cb018": "icoCap()", +"d96cc905": "toB32(uint256,uint256,bytes,address)", +"d96d7ea2": "PRE_EXECUTION_GAS()", +"d96db2ec": "OfferToRealm(uint256,uint256)", +"d96de4ce": "AdminDrawError()", +"d96e1f76": "icoStatus()", +"d96e5565": "testThrowsRetractNotRetractable()", +"d96ed505": "minGasPrice()", +"d97036c2": "ARM1Token()", +"d9703dac": "getResoMethod()", +"d97049bb": "regs(uint256)", +"d97095f3": "AST()", +"d970c19b": "raiseCoinsSeeded(address,uint32,uint256,uint256)", +"d9710278": "TwoFucksToken()", +"d9719e56": "CROWDSALE_SHARE()", +"d971da94": "priceUSDcETH()", +"d972bc59": "setICO_Contract(address)", +"d972e8ad": "getTranche(uint256)", +"d972ea3e": "dragon()", +"d9740383": "SAWJewelleryChain()", +"d9741bd9": "PinMoToken()", +"d975767b": "eLitecoin()", +"d975f3b7": "withdr(uint256)", +"d977076e": "getExtraBets()", +"d9779fbe": "currentTokenSupply()", +"d977a59c": "getCurrentRateByStage()", +"d977b282": "getValue(address,address,uint256)", +"d9784223": "getEscrowAndHash(bytes16,address,address,uint256,uint16)", +"d9785451": "timerMax()", +"d9787517": "getTotalPossibleTokens(address)", +"d978a0d3": "setFinancialOfficer(address)", +"d9795f66": "usersNTD()", +"d9797076": "CoinBroSupply()", +"d979e906": "getXNKPurchased()", +"d979f5aa": "setHolder(address)", +"d97a9c39": "resetContent(string,address,string,string,string,uint256,uint256)", +"d97b0a6e": "Workcoin()", +"d97b14f0": "sendAdvisory(address,uint256)", +"d97c5be5": "losePooling()", +"d97cec3f": "transferMultiSameValue(address[],uint256)", +"d97cf075": "onlyBouncerExecuteCall(address,uint256,uint256,bytes)", +"d97d4f52": "FOUNDERS_LOCK_DATES(uint256)", +"d97dec19": "transferAll(address,address,uint256,address,uint256,uint256,address)", +"d97e38d6": "getApprovedBuyerForIndex(address,uint256)", +"d97fc929": "CommitSolutionHash(bytes32)", +"d9803cb2": "addOfficer(address)", +"d9823996": "withdraw(uint152,address,uint256)", +"d982466d": "getPlayerAwardByRndNo(uint256,address)", +"d98299a0": "RedBlue()", +"d9829cbc": "getRewardAndPrepareWithdraw()", +"d982a84e": "citadelAddress()", +"d9844e25": "hexAddress(bytes32)", +"d9852ca9": "nbDispute()", +"d985f122": "RelayToolsTest()", +"d9875c93": "stageNow()", +"d988a0f9": "Payoutnextrefund()", +"d989f5f2": "productOwners(address,uint256)", +"d98a977d": "TestWorldSnapshotInternal(uint256)", +"d98ae811": "transferDay(uint16,address)", +"d98b094c": "communityPeriodsNumber()", +"d98b2fbf": "getOverviewsCounter(uint256)", +"d98b43f7": "removeOracleAddress()", +"d98b9bb5": "placeBid(address,uint256)", +"d98bce37": "batchBurnAssets(uint256[])", +"d98bf529": "LimitTop()", +"d98c08b5": "CryptaurDepositoryTest()", +"d98c1524": "getPortfolio(bytes32,address)", +"d98d011d": "getCandidateKey(bytes,bytes,bytes,bytes)", +"d98de8a5": "isCrydrViewRegistered(string)", +"d98e14bd": "STAT_COUNT()", +"d98e2997": "addMiningToken(address,uint256)", +"d98f47fe": "recieveEscrowTransfer(address,uint256)", +"d98f4ea2": "sumICOStage7USD()", +"d98f6088": "blockDelay()", +"d9901ce4": "DappToken(uint256)", +"d991c58f": "mintMaster()", +"d99202c5": "STCDRListing()", +"d9923a16": "Account_timePayout(address)", +"d992aa70": "createBounty(string,uint256[])", +"d992bd5b": "testResultNotZero()", +"d9934a8c": "holdAddress4()", +"d993693c": "LOTTYcoin()", +"d9946793": "shareHolderBalanceOfAtTime(address,uint256)", +"d9946a79": "PERSONAL_CAP()", +"d9948af7": "sumICOStage1USD()", +"d9964d92": "getResourceName(uint16)", +"d9967889": "BalanceOf(address)", +"d9969061": "prove(bytes32,uint256)", +"d9971e92": "reject(uint64,string)", +"d99727cc": "removeBonus(uint8)", +"d9972b96": "isAuthorized(address,bytes4)", +"d997598b": "HoChiMinh()", +"d997933f": "canBreedWith(uint40,uint40)", +"d997a153": "transferBatchIdempotent(address[],uint256[],bool)", +"d997ccb3": "payMe()", +"d9987c07": "ReturnToOwner(address,uint256)", +"d998d0d5": "chunkNr()", +"d99929db": "getAssetIdTypeSequenceId(uint256)", +"d99969df": "DUNE_BUGGY()", +"d999741e": "grantFoundationToken()", +"d999b17e": "CROWDSALE_PHASE_3_START()", +"d999f132": "optionDescription(uint256)", +"d99a8dc3": "submit(string)", +"d99a9d20": "_setTransferFeeProp(uint256)", +"d99bb9f7": "removeOwnership()", +"d99c6c76": "_invest(address)", +"d99d83e3": "txsPerHour(uint256)", +"d99dbdbe": "changeBookState(uint256,uint256)", +"d99dd314": "companyTimeLock()", +"d99f8bd8": "VarnixToken()", +"d99fe20d": "dexTestApprove(address,address,uint256)", +"d9a0b299": "deactivateClaim()", +"d9a18f6d": "totalTokensForSaleDuringICO1()", +"d9a19a7a": "MMOTOKEN()", +"d9a2a083": "TeamWalletUpdated(address,address)", +"d9a2fff5": "airDropPercent()", +"d9a3988d": "LogPollApproved(bytes32)", +"d9a3c199": "testSaleToken()", +"d9a457fe": "endRound(address)", +"d9a4ad8b": "shouldHadBalance(address)", +"d9a4cc33": "_finalizeSale(bool)", +"d9a50120": "SaniCoin()", +"d9a52ab3": "getForkMigrationPercentageBonusDivisor()", +"d9a569f5": "OfferPlay(address,uint8,uint8)", +"d9a57382": "propertyIdToEscrow(uint256)", +"d9a5b0a7": "testHighestTranchNotExact()", +"d9a6c6db": "FactbarDeed()", +"d9a6cf81": "transferableUntil()", +"d9a6e2de": "VST(string,string,uint8,uint256)", +"d9a7556f": "indexThreads()", +"d9a8748c": "fundAccount()", +"d9a8e212": "GOLDQ()", +"d9a96c92": "LegalToken()", +"d9a96f9b": "saleManagerAddress()", +"d9aa1881": "tokenDestroyed()", +"d9aa5543": "newDoc(bytes32,uint256,string)", +"d9ab1ec9": "smallCount()", +"d9aba9ce": "getProduct(address)", +"d9abedb4": "take_fees_eth_dev()", +"d9ac03a6": "getCurrentCertificateNonce(address,address)", +"d9ac9a88": "getAuctionTotal()", +"d9aea707": "modifyCeo(address)", +"d9af3691": "verifyCertificate(address,uint256)", +"d9afa38b": "payDividends(address,uint256)", +"d9b02ddf": "setGeneral(uint32,uint8,uint8,uint16,uint16,uint16,uint16,uint32[4],uint32[4],uint8)", +"d9b058bd": "setOraclizeGasprice(uint256)", +"d9b158b1": "angelInvestorsWallet()", +"d9b238ea": "test_insert_findWithHintNotTightBound(int256)", +"d9b25a24": "proxyBuyTokens(address)", +"d9b36043": "TJFucks()", +"d9b4abf5": "marketplace_controller_v2()", +"d9b5134c": "getTotalExchanged(address)", +"d9b5618c": "TimeBroker()", +"d9b596c7": "generateRand()", +"d9b5b5ca": "exponential(uint256,uint256)", +"d9b5c4a5": "nodeRegistry()", +"d9b627dd": "CancelledByBuyer(bytes32)", +"d9b6aec4": "allInvestments()", +"d9b6b197": "tempAdvisorsTeam()", +"d9b7d154": "applyForTask(uint256)", +"d9b7d41b": "createFootballer()", +"d9ba32fc": "getWhitelistStatus(address)", +"d9ba8ea4": "finishLastRound()", +"d9bb57c6": "removeGameManually(address,address)", +"d9bb6102": "HealthCashMock()", +"d9bc9873": "getCanvasPaintedPixelsCount(uint32)", +"d9bcc65b": "setSeedContract(address)", +"d9bccfd6": "getWarrantyPrice(address,uint256,uint256,uint256)", +"d9bd0799": "clearPeriods()", +"d9bd2468": "getToken(uint256,address)", +"d9bdc10c": "getPlayerHasGetFree(address,address)", +"d9bdd6fa": "createCDPLeveragedAllDai()", +"d9be976c": "GainmersTOKEN(uint256,uint256,address)", +"d9bf3187": "setOutcome(int256,uint8,bytes32,bytes32)", +"d9bf8238": "setWinery(address,bool)", +"d9bfa73e": "orderEpoch(address,address)", +"d9c01911": "mintIdentityToken()", +"d9c090a0": "updateRoleName(address,bytes32)", +"d9c1a344": "balanceTotalOf(address)", +"d9c1ac25": "transferAllERC20Token(address,uint256)", +"d9c24acb": "_unlockedAmount(uint256)", +"d9c263f8": "purchaseWithEth(uint256,uint256,uint256,address,bytes)", +"d9c27cc6": "setPep(address)", +"d9c3193d": "setSpaceshipPrice(uint16,uint256)", +"d9c397f6": "gmtFund()", +"d9c39fca": "setSilverContractAddress(address)", +"d9c3d3c9": "checkReturn()", +"d9c4870e": "beneficiaryAddress()", +"d9c522ec": "daiRate()", +"d9c52d27": "getDiscountTrancheEnd(uint8)", +"d9c55ce1": "fill()", +"d9c57bcc": "importExchangeSale(uint256,address,uint256)", +"d9c67404": "getMerkleRoot(bytes)", +"d9c682a7": "borrowerReturnFiatPerEthRate()", +"d9c6925e": "AccountIsNotFrozenForReturn(address)", +"d9c693cb": "emergencyLock()", +"d9c7041b": "ownbalance()", +"d9c76d61": "coolHero()", +"d9c779ce": "_buyP3D(uint256)", +"d9c7ddfa": "_updateBurnRate()", +"d9c850f4": "getItemKindCount()", +"d9c88e14": "ownerWithdraw(address,uint256)", +"d9c97699": "__callback(bytes32,string,uint256)", +"d9ca0b7f": "transferRoutingCode(bytes32,address)", +"d9caa3d2": "submit(bytes32)", +"d9caaada": "minPreContribution()", +"d9caed12": "withdraw(address,address,uint256)", +"d9cba1a1": "MulTraToken()", +"d9ccf695": "strayToken()", +"d9cd6046": "BuyTicketSeed()", +"d9cd9273": "Arycoin(address,uint256,uint256,uint256)", +"d9cd98b0": "withdrawDevFees(address)", +"d9ce2451": "setLeaf2(uint256,uint256)", +"d9cea519": "getDealInfo(uint32,uint64,uint64,uint64)", +"d9cfc182": "getHighestPriceAt(uint256)", +"d9cff93a": "last_result(address,address)", +"d9d0b091": "AddMarking(bytes32,bytes32,int256,uint256)", +"d9d14d37": "numOfMiningTimes()", +"d9d1ceaa": "draw(uint256,bytes32[])", +"d9d1d4bb": "getCompte_28()", +"d9d1e0e5": "createBlock(uint256,uint256,bytes32,bytes32,bytes32,bytes32)", +"d9d1f5d9": "removePendingExplore(uint256,uint256)", +"d9d210b8": "changeHelper(address,bool)", +"d9d2d058": "Splitter()", +"d9d34ce1": "isForkingMarketFinalized()", +"d9d3cc78": "seriesByName()", +"d9d578e5": "airDropSetup(address,uint32,uint256)", +"d9d60b52": "getGameState(address)", +"d9d61655": "getOwnedTokens(address)", +"d9d61a10": "GetUserSafesLength(address)", +"d9d73887": "Diana()", +"d9d770bb": "_triggerPVEStart(uint256)", +"d9d84531": "getRemainingKingdoms()", +"d9d8b2ee": "creationInvestmenting()", +"d9d958ec": "setUint8(uint8,uint8)", +"d9da0142": "cancelEscrow(bytes20)", +"d9da2738": "changeOfficialAddressIfNecessary(address)", +"d9da486a": "initialEcologyAccount(uint8)", +"d9da76de": "DailyMint()", +"d9daa497": "getStageTargetAmount(uint256)", +"d9daae78": "CCH_Seaport_1()", +"d9dac92c": "acceptDiscipleVend(uint256)", +"d9dad80d": "ownerOf(uint256,uint256)", +"d9db1f55": "deprecate(string,string,string)", +"d9db3c73": "revealVoteOnSpecialProposal(bytes32,bool,bytes32)", +"d9db9d89": "globalSupplyAfterPercentageLogic()", +"d9dbd382": "FUTX()", +"d9dc7fcd": "EVM()", +"d9ddafb3": "exchangeTransfer(address,uint256)", +"d9de1e98": "HuuumanStandardToken(uint256,string,uint8,string)", +"d9def89a": "buyShitClones()", +"d9df2878": "CryptoCollectorContract()", +"d9e0dc59": "getLocation(address)", +"d9e19a91": "setAccountValue(uint16,uint8,uint8,int64)", +"d9e34038": "ODCToken()", +"d9e39e50": "getTransferDetails(address)", +"d9e4fa6a": "setUsdPerKEther(uint256)", +"d9e50186": "setWeiMin(uint256)", +"d9e55f7a": "getAllowedToMine(address)", +"d9e5a50b": "getSnakemasterReq()", +"d9e68b44": "left100(uint256)", +"d9e73095": "MiracleToken()", +"d9e79c72": "admin_dividend(uint256)", +"d9e7c8ca": "createRace(uint256,uint256,uint256)", +"d9e7ee1c": "new_game(uint256,uint256)", +"d9e8843f": "payRent(uint256)", +"d9e947f3": "kickOutMember(address)", +"d9e95a98": "addVoter(address,string)", +"d9e9c745": "decreaseShardBalance(address,uint256)", +"d9ea1b47": "Raffle_Finished()", +"d9ea372b": "myfichain()", +"d9ea9bfa": "createBtcAddressHex(uint256,int256,uint256,int256)", +"d9eac337": "MegaWattContract()", +"d9ead22b": "accountForClose(uint256)", +"d9eb547b": "extractCLNfromMarketMaker(address,uint256)", +"d9eb5947": "flatFee()", +"d9ec0508": "testThrowTransferNotEnabled()", +"d9ec3018": "submitSpendLimit(uint256)", +"d9ecad7b": "breed(uint256,uint256)", +"d9ece4c7": "changeMaximumContributionForPrivatePhase(uint256)", +"d9ee369a": "withdrawDifferentToken(address,bool)", +"d9ef1ee3": "insert(string,uint256)", +"d9ef58a5": "thisAddr()", +"d9f00023": "SBGToken()", +"d9f01878": "centralMinter()", +"d9f02210": "StarbaseMarketingCampaign()", +"d9f0354d": "buildMilestone(uint256,uint256,uint256)", +"d9f035aa": "cardList(uint256)", +"d9f0cf04": "createAuctionWhenPaused(address,address,uint256,uint256,uint256,uint256)", +"d9f165dc": "updateFactory(address)", +"d9f1a1a9": "PublicBallot(address,string,string)", +"d9f2ac8a": "decr()", +"d9f300ce": "referedRateBonus()", +"d9f38388": "RequirementChanged(uint256,bytes32)", +"d9f3afff": "addCurrency(string,uint8)", +"d9f47e41": "totalDevelopmentFundBalance()", +"d9f4ecbb": "lastProfit()", +"d9f4f56e": "_ethRefund()", +"d9f58923": "GlobalConstraintRegistrar()", +"d9f69e4e": "addUserWhoBuy(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"d9f754a3": "LogSetWithdrawLimit(address,uint256)", +"d9f7e285": "returnExcedent(uint256,address)", +"d9f7eacf": "removeGains(address,uint256)", +"d9f80c65": "setMinInvesment(uint256)", +"d9f81b83": "timeWithoutUpdate()", +"d9f861b1": "getFreelancerInvoices(address,uint8)", +"d9f884bf": "BIONICCOIN()", +"d9f8a3c3": "lastTransactionReceivedInWei()", +"d9f8a4e2": "calcCurrentTokenPrice()", +"d9fa1e78": "PractiParlezCrowdSale()", +"d9fa8c54": "unClaimedToken(address)", +"d9fa9335": "houseKeeping()", +"d9facbe0": "isObserver(address)", +"d9facc80": "MerchantWallet(address,string,address)", +"d9fb6963": "stateSetLocked()", +"d9fb7413": "lockTimeLeft()", +"d9fc4b61": "safeTransferFrom(address,address,address,uint256)", +"d9fc8026": "getPubKeyArr(bytes32,uint256,uint256[])", +"d9fca769": "setWinner(address)", +"d9fcb31f": "comm_channel()", +"d9fdd155": "isLegendaryPart(uint256,uint256)", +"d9fe0137": "_transfer_byProxy(address,address,uint256,bytes)", +"d9fe1045": "MidasDiscountToken()", +"d9fe60f3": "DTHPool(address,address,uint256,string,string,string)", +"d9feb8ce": "loserTwo()", +"d9feeeb6": "fillMyOrder(uint256)", +"d9fefb93": "getData_34()", +"d9fefbf8": "addData(uint256,uint256,bytes32)", +"d9fefd6c": "bountyTokenTimelock()", +"d9ff4ad8": "burnFrom(address,uint256,bytes)", +"d9ff8e9d": "setWalletOut2(address)", +"d9ff8ffc": "BetAnB()", +"d9ff94b7": "setRegionPurchasedAt(uint256,uint256)", +"da00586b": "houseKeep()", +"da00a1f4": "setGetFree(bool)", +"da0225db": "belongsTo(address,uint256)", +"da0239a6": "remainingSupply()", +"da025051": "freelancePlayer(address)", +"da02b6cf": "computeWinner(address,uint256,uint256,address,uint256,uint256,uint256)", +"da02f5f3": "updateIsVerified(address,bool)", +"da0321cd": "addresses()", +"da037fd1": "confirmPerfectReception()", +"da040c0f": "purchasingAllowed()", +"da04197e": "Duration(uint256)", +"da04f82b": "addUserManager(address)", +"da05277e": "ImpactRegistry(address)", +"da05f535": "RefundCrowdsaleFactory(address)", +"da062d68": "ExCToken11()", +"da06d96c": "_tokensToEthereum(uint256)", +"da074874": "getRemainingEthAvailable()", +"da0774ad": "getCallFeeScalar(uint256,uint256)", +"da081204": "littAdmins()", +"da08c5a3": "setTransferWhitelist(address)", +"da09118e": "addTokenGrant(address,uint256,uint128,uint16,uint16)", +"da09c72c": "devAddr()", +"da0a599e": "EjariRules()", +"da0a5fe0": "TestToken(string,string,uint256)", +"da0b0682": "beginGame()", +"da0b0c36": "getNumDesignatedReportNoShows()", +"da0bba7b": "changeOraclizeConfig(bytes32)", +"da0bba90": "sendPrize(address[],uint256[],uint64)", +"da0d76f8": "betContractDOWN()", +"da0e1451": "distributionForRefers(uint256,uint256,uint256)", +"da0ef68b": "ICO_END_DATE()", +"da0f039d": "MaxTotalSupply()", +"da0f3877": "postFreezeDevCATDestination()", +"da0f57d0": "confirmWithdraw(uint256)", +"da0fab61": "BlockContract()", +"da1070da": "newEscrow(address,address,bytes32)", +"da11f709": "bank1()", +"da122e02": "Fishbank(address,address,address)", +"da128527": "finalizeUpdateState()", +"da12e9ef": "TokenHolder(address,uint256)", +"da13610c": "rewarding(address)", +"da1441cd": "KudosBank(uint256)", +"da147d32": "tradeTracker()", +"da14c723": "setCustomBuyer(address,uint256)", +"da14e3b2": "transferAndFreezeTokens(address,uint256)", +"da16241b": "Platopay()", +"da17835f": "FermionToken()", +"da178cb0": "plot()", +"da17c21b": "BlockchainMoneyEngine(uint256,string,string)", +"da18bcef": "getMin(uint256[])", +"da1919b3": "mintFor(address,uint256)", +"da1a13ce": "fitsTokensForSaleCap(uint256)", +"da1aaa59": "_withdraw(address)", +"da1ad97f": "clearHpbNodeCache()", +"da1b2d9d": "comDrop(uint256,uint256,uint256,uint256)", +"da1b4359": "uploadFinish()", +"da1b620b": "getTarget(string)", +"da1b95a6": "DAO(address,address,bytes32,bytes32,address,address,address)", +"da1bd8ab": "setupTrustedAccounts()", +"da1d7711": "createHive()", +"da1eb542": "ceil1(int256,int256)", +"da1edb38": "shareLastTen(uint256,uint256)", +"da1ee417": "MoveChain(uint256,string,uint8,string)", +"da1f149c": "SECURRO()", +"da1f6433": "AtomUX()", +"da1fe7d5": "configureDomain(string,uint256,uint256)", +"da1ff555": "cliffTeamTokensRelease()", +"da2216ef": "getContractCreatedTimeById(bytes32)", +"da2242b8": "createActivity(uint256,string,uint256,uint256)", +"da228f9c": "bountyTokensCreated()", +"da22ec07": "storing()", +"da233128": "getCrowdsaleContract()", +"da23c057": "editAd(uint256,string,string,string,string,bool,bytes32,bytes2,uint8,bytes4)", +"da23d18b": "updateOnSaleSupply(uint256)", +"da2424ae": "setPI_edit_22(string)", +"da24b08c": "UsdPerKEtherUpdated(uint256,uint256)", +"da257cb4": "setMinRevenue(uint256)", +"da25c0cd": "ThisExternalAssembly()", +"da25de3c": "remainingBalance()", +"da262f58": "setTokenInfo(string,string)", +"da26358a": "unregisterVendor()", +"da26663a": "getPrice(uint32)", +"da26c241": "approvePauseChange(bool)", +"da26d0b9": "addAuction(uint256,address,uint128,uint128,uint64,uint64)", +"da26ebc2": "getPayeeCount()", +"da26f7f6": "CIFR()", +"da274488": "getMotd()", +"da27ab1f": "getFreeShitClone()", +"da27cb0f": "Lottery(string,uint256,uint256)", +"da280fe5": "resetHasAutoVote()", +"da284dcc": "expirationTime()", +"da28c81a": "updateKYClist(address[])", +"da293136": "TestCrowdsaleController(uint256,address,uint256)", +"da2a97d8": "GetCurrentNumbers()", +"da2aa615": "addRandomFight2Death(address,uint256)", +"da2b2589": "GenExtWeightList(uint8)", +"da2b7416": "testBitsAndFailIndexOOB()", +"da2bbfc7": "setTokenURIBase(string)", +"da2c0460": "gameGiftOnceAmount()", +"da2d7b70": "userSubscriptionsLength(address)", +"da2d8720": "payJackpot2()", +"da2d8c88": "updateRestrictedStockSendTime(address,uint256)", +"da2dcea6": "returnTokenMulti(address[])", +"da302fc3": "lighthouseLib()", +"da306946": "ShareDATA(string)", +"da30d418": "cancelDist()", +"da311588": "getCoin(uint256)", +"da31cf2a": "getStageEtherRaised()", +"da323c94": "getSketch(uint256)", +"da328377": "ownerSetStakeCommence(uint256)", +"da333ca6": "payOut(uint256)", +"da337465": "getPenguinsByOwner(address)", +"da34b7f3": "_transfer(uint256)", +"da35762a": "getPI_edit_16()", +"da359dc8": "setBytes(bytes)", +"da35a26f": "initialize(uint256,address)", +"da35d581": "DaoHubAccount()", +"da3678df": "transferTokenByContract(uint256,address)", +"da36d217": "lockupTok(address,uint256)", +"da36fd03": "FundingAccepted(address,uint256,uint256)", +"da374157": "changePopulous(address)", +"da38abb3": "randomGen(address)", +"da38daba": "getLeftCoordinate(bytes1)", +"da38f805": "TaskToken()", +"da38fe31": "ConsentDirectory()", +"da392f06": "availableNow()", +"da397985": "CBOToken()", +"da3986e4": "getTAOIds(uint256,uint256)", +"da3b6b35": "totalHashRate()", +"da3c300d": "currentFee()", +"da3cbf96": "getShipClass(uint32)", +"da3cd674": "GetDChainDOTHash(bytes32,uint8)", +"da3d18e8": "PlusUltra()", +"da3d23a9": "GetEnd()", +"da3d454c": "borrowAllowed(address,address,uint256)", +"da3d7d7f": "reconfigure(uint256,uint256)", +"da3e0fd1": "getAuctionsById(uint32[])", +"da3e3397": "approveToken(address,address,uint256)", +"da3f8c38": "Amethycoin()", +"da3fb6f7": "mainSaleRateP2()", +"da4077b9": "finishHim()", +"da421df5": "pageFiles(uint256,uint256)", +"da42eea5": "setRedeemWallet(address)", +"da440a1d": "wallcoinToken()", +"da446958": "totalTokensCap()", +"da4493f6": "activationTime()", +"da44d275": "viewWinners()", +"da44e034": "maximumTokensForForth()", +"da46098c": "setAllowance(address,address,uint256)", +"da465d3f": "saleSharesAvail()", +"da46a73c": "setGameOperator(address)", +"da46e48e": "setGLA(uint32)", +"da46e6c4": "transferFeeIncurred(uint256)", +"da46eda1": "setBlockDotDifficulty(uint256)", +"da46fe62": "ethereumToTokens(uint256,uint256)", +"da4751c0": "setMinPrivateSaleCompanyBuy(uint256)", +"da4778c2": "delayHours()", +"da4793ac": "setMaxSecurityGuardDelay(uint256)", +"da47d856": "getService(bytes32)", +"da481ce0": "DemeterCrowdsale(uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"da489997": "addAsset(address,address)", +"da49613c": "ownedfunction()", +"da498084": "addTokenHolder(address)", +"da499f6f": "SupportAddOn(uint256,address,uint256)", +"da49cdb5": "getLostTokens(address)", +"da4a22dc": "MXN_Omnidollar()", +"da4a76c0": "becomeGameSponsor()", +"da4a77aa": "isRatifier(address)", +"da4a8ef6": "SettingsSet(address,uint256,uint256)", +"da4b5e29": "contains()", +"da4d0756": "vehicleExist(address,string)", +"da4d2615": "Gomblot()", +"da4f2899": "isUserInGroup(bytes32,address)", +"da5136b8": "setWhitelistAddress(address,address)", +"da5140fc": "lockTokensForAddress(address,uint256,uint256)", +"da5196e0": "getmemreqdetails(uint256,uint256)", +"da51bbd9": "luckyPendingIndex()", +"da51f168": "GetDayReward()", +"da5269a6": "getListOfConsents()", +"da5341a8": "issueMaxNomins()", +"da53462c": "initialize(address,address,uint256,uint256,uint256,uint256,address,address,uint256)", +"da535758": "lockUp(address,uint256,uint256,uint256)", +"da547dcf": "preIcoHardcap()", +"da548e29": "priceExpirationBlockNumber()", +"da5520cd": "HeroNodeToken()", +"da57736f": "stageThree()", +"da5950a4": "tokenBought(uint256,uint256)", +"da5a9366": "getAppBase(bytes32)", +"da5abf5d": "payment_returned(uint256)", +"da5b1f5c": "buy50()", +"da5c0a7c": "testDisown()", +"da5c5b55": "noVotes(uint256,address)", +"da5c7ec2": "WNCT()", +"da5da3b9": "initializeTokenSaleWithToken(uint256,uint256,uint256,uint256,address,address)", +"da5db748": "firstRelease()", +"da5e4489": "resetListing(string)", +"da5e9c62": "whitelistDayMaxStake(uint8)", +"da5ea40c": "computeMerkle(bytes32,uint256,bytes32[])", +"da5f3ac1": "GAME_END()", +"da5f838d": "weisRaised()", +"da5fa890": "_addManager(address)", +"da60278a": "receivable(address)", +"da60d7e8": "BOARD_2()", +"da62a246": "rewardsTokenSupply()", +"da640668": "checkNameOccupied(bytes32)", +"da6443ad": "addAddressToWhitelist(address,address)", +"da649c63": "startSalePhase(uint256,uint256)", +"da652b4a": "summBilborough()", +"da6585ff": "calcSrcQty(uint256,uint256,uint256,uint256)", +"da658f22": "birthPerHundred()", +"da66cb3e": "secondRoundICOTokensLimit()", +"da67ac42": "MIPCoinToken()", +"da682aeb": "onApprove(address,address,uint256)", +"da6838ff": "getIfBonus()", +"da683c63": "Token(string,bytes32)", +"da68d47d": "licenseNFT()", +"da69f1c8": "arrayTest(address[])", +"da6aabbe": "set_sale_address(address,string)", +"da6b31b9": "testErrorTransferToNullAuthority()", +"da6babca": "setNextPrice(uint256,uint256)", +"da6c5832": "CROSAIR_MAX_PRICE()", +"da6d8ca4": "LotteryRecharge()", +"da6dfea7": "setRate(address[],address[],uint256[],uint256[],bool)", +"da6e11a5": "approveFactoryContract(address,bool)", +"da6efb01": "winAddressOf()", +"da6f76b5": "updateEpisode(string,uint256)", +"da70db17": "HireGoToken()", +"da710422": "getTokenAmountForWei(uint256)", +"da7150b9": "Qwidex(address,address,address,uint256,uint256,uint256)", +"da721672": "checkFloatingSupply(address,uint256,bool,uint256)", +"da72c1e8": "adminTransfer(address,address,uint256)", +"da7360df": "paymentInternal(bytes32,uint256[],uint256)", +"da73630e": "addTeam(address,string)", +"da737613": "placeBet(bytes22)", +"da73f0f9": "conversion_rate()", +"da748b10": "pausedUntil()", +"da74c5a1": "citiesSold()", +"da74ce27": "tokenCapForFourthMainStage()", +"da7545d0": "titleCount()", +"da756ba7": "BEAT()", +"da75b901": "deployStepTwo()", +"da76d5cd": "withdrawBalance(uint256)", +"da7855a3": "reclaimLocalNodeFee()", +"da78d655": "owner1OK()", +"da7911e1": "getOrderListLengthFactor()", +"da79a9fc": "setTxAsSpent(bytes32,bytes32,uint256)", +"da7bd3e9": "getVestingScheduleEntry(address,uint256)", +"da7c0ad4": "SaleScheduled(uint256,uint256)", +"da7c6a42": "registrations(bytes32)", +"da7ccce9": "test_oneValidEqInt1()", +"da7d0082": "isCertification(address,bytes32)", +"da7d249f": "UnsetBlockForSale(uint256,uint256,address)", +"da7d57f9": "startRareRaffle(uint256,uint256)", +"da7d7827": "getSubscriptions(address,string)", +"da7d86fd": "softDelete(bytes32)", +"da7e019e": "AlterContactName(address,bytes32)", +"da7e6fdf": "TokenDrop(address[],uint256[])", +"da7eadd4": "totalAffiliateDDT()", +"da7fc24f": "setBackend(address)", +"da7fc7c5": "payoutCompleted()", +"da7fd1f0": "gemmyMusicSupply()", +"da7ffbd4": "generateRandomSpell(uint8[14],uint32)", +"da801f20": "approveAndCall(address,uint256,address,address,bytes32,uint256,uint256,uint256)", +"da81b09b": "lastPeriodStarDate()", +"da8267e3": "hasDirectorAccess(address)", +"da82a035": "sweepCommission()", +"da8300d2": "initialEnemyCombination()", +"da832237": "SMALLEST_TOKEN()", +"da834ac4": "getPayoutNumerator(uint256)", +"da83a649": "onlyAdmin(bool)", +"da850601": "MKYCToken()", +"da8567cb": "AldiyoCoin()", +"da857f2c": "reduceLastWeekStake(address,uint256)", +"da85868e": "fifthExchangeRate()", +"da883e6a": "addItems(uint256[],uint256[],address)", +"da88a831": "updateBaseTokensPerEther(uint256)", +"da89970b": "hasntStarted()", +"da8a01a5": "CROWD_WEEK2_BONUS()", +"da8a46e0": "listUserRecastsFrom(address,bytes32,uint256,bool)", +"da8ad6b6": "getTAO(address)", +"da8c229e": "controllers(address)", +"da8d2f35": "ChannelDeleted(address,address)", +"da8e2890": "payNihilum()", +"da8e44d8": "registerColor(string,uint256)", +"da8ee786": "transferFromContract(uint256)", +"da8f410a": "ApprovedToken()", +"da8f54d8": "testVali(address,uint256)", +"da8f9fe5": "DetailedERC20(uint256,string,string,uint8)", +"da8fb7cd": "ASSToken(uint256,string,uint8,string)", +"da8fbf2a": "pauseMinting()", +"da909b09": "setExchanger(address)", +"da91254c": "whoAmI()", +"da918f76": "placeBlock(uint16,uint16)", +"da9287d1": "acceptHybridization(uint256,uint256)", +"da9332bb": "addCompanyURL(string,string)", +"da93d0d1": "setPrice()", +"da93dfcf": "give(address,bytes32,address)", +"da93f938": "maxAppeals()", +"da942ab3": "issueTokensExternal(address,uint256)", +"da94e770": "YBVToken()", +"da9534b4": "Stex()", +"da9590cb": "addPublicSaleWallet(address)", +"da95ebf7": "requestWithdrawal(address,uint256)", +"da96bbcd": "publicEventTokens()", +"da977038": "volumeBasedBonus(uint256)", +"da979b8d": "SpecialRate(address,address,uint256,uint256)", +"da98655e": "getNullAddress()", +"da9893dd": "Resource(address,string,string,string)", +"da9ab565": "changeId(string)", +"da9ad094": "changeParameter(uint32,uint32)", +"da9b3cb4": "getGameBid(uint256,uint256)", +"da9b90c4": "TOKEN_FIRST_DISCOUNT_MULTIPLIER()", +"da9bca21": "numActiveMembers()", +"da9bdbfc": "CKCoin()", +"da9bf54c": "icoPhaseDiscountPercentage4()", +"da9c2697": "GaillardTokenSale()", +"da9c273d": "cancelInvoice(uint256)", +"da9c6a46": "getReplyCount(uint256)", +"da9c87fa": "changePayRate(uint256)", +"da9d0f6b": "withdrawCustom(uint256,address)", +"da9d56d7": "getBidIds()", +"da9d95bc": "commonWithdraw(address,uint256)", +"da9da572": "tryAirdrop()", +"da9dd8bf": "isAddressVerified(address)", +"da9e13aa": "getProviderSales(address)", +"da9eadac": "remit(address,uint256,bytes)", +"da9eeaeb": "PetroNetworkToken()", +"da9f40b8": "setAssetFileLink(string)", +"da9f4875": "freezeTokens()", +"da9f6918": "MultiSigWallet(address[],uint256,uint256)", +"da9f7550": "requestRandom()", +"da9f84a6": "rerollValue(uint256)", +"daa08539": "mintShares(address,uint64)", +"daa0ab0e": "majorityForTeam()", +"daa0f79f": "LEGAL_EXPENSES_ADDR_1()", +"daa147f3": "redeemLevAndFeeByStaker()", +"daa170ca": "difficultyBalance()", +"daa17f49": "marketplaceAddress()", +"daa1d7d4": "maximumPercentageOfDaysSupply()", +"daa21e0e": "testBitSetSuccess()", +"daa232ac": "_bonusRatio1()", +"daa283c8": "__callback(bytes,string)", +"daa3a163": "isUpgradeable()", +"daa44bf8": "getInStreamOf(address)", +"daa45281": "_addTo(address,uint256)", +"daa4cf88": "getCurrentStageIndex()", +"daa50ee0": "DSTMultisig()", +"daa5f48b": "findbit(uint256)", +"daa69c9e": "killDividentContract(uint256)", +"daa6f417": "howMuchTokensAvailableForExchangeFromStock()", +"daa7370f": "onFailure()", +"daa86216": "getAllowedContractsCount()", +"daa89fef": "issueNewHeldCoins(address,uint256)", +"daa94ab1": "frozenAccountProfit(address)", +"daa9604d": "byPonzi(address)", +"daaa50c9": "transferWithCustomReservingNet(address,uint256,uint256)", +"daaa6b5d": "setReleasedAddress(address,address)", +"daaadd8e": "arr(address,address)", +"daab88a6": "createEngine(uint256)", +"daac1f64": "reqfee()", +"daac518a": "playerTokenAddress()", +"daacb24f": "right42(uint256)", +"daad98f4": "socibit()", +"daae717c": "setIndividualMinCap(uint256)", +"daae7e98": "setCompte_20(string)", +"daaf3d2e": "attack(uint256,uint256,address)", +"daafe0a5": "setPrice(uint32)", +"dab0537b": "change_p2(uint256)", +"dab09999": "returnMyEthBalance(address)", +"dab122de": "dInit(address,address,bool)", +"dab12beb": "SmartSweep()", +"dab23f7c": "__callback(bytes32)", +"dab306b1": "votingFee()", +"dab30ccc": "addBonusPeriod(uint64,uint64,uint256,uint8,uint256,uint8)", +"dab3ed63": "withdrawMyInvestmentsBack()", +"dab41935": "TootyrToken()", +"dab43e6d": "PreSale3DAPP(address)", +"dab46553": "removeOracle()", +"dab4c65e": "totalDowSold()", +"dab4cb87": "gameValue()", +"dab4d1c1": "PixelPrice(uint16,uint16,address,uint256)", +"dab5cec2": "setExtraTokensPercent(uint256)", +"dab5f340": "setRoot(bytes32)", +"dab5fdc4": "DOWN_totalBets()", +"dab680dc": "getGlobalInfo()", +"dab78820": "ERC20Rescue(address,uint256)", +"dab80075": "Signature(address,string,string)", +"dab80d6f": "addSponsor(address)", +"dab8194f": "enableGame(address)", +"dab8263a": "weiPerToken()", +"dab83b9a": "selltokens0()", +"dab88ad7": "VI6()", +"dab8a18b": "specialTransfer(address,uint256,uint256)", +"dab8c01a": "Zorro01Token()", +"dab8ef38": "addRooms(string,uint256)", +"dab8fa73": "setPackage(string,uint64[3])", +"dab91e87": "linkToMasterWallet(address)", +"dab93a93": "PolarisDEX(address,address,address,uint256,uint256,uint256)", +"dab951ba": "arrayFunc(int256[10])", +"dab9938e": "setIcoBeginDate(uint256)", +"dab9afa4": "Test12Address()", +"dabb0531": "getCharacter(uint256)", +"dabb37d4": "Lakshmi(uint256,string,string)", +"dabb624b": "rate_ETHUSD()", +"dabb6360": "percentage_of_three()", +"dabb6778": "vestingTeamWallet()", +"dabbbd0b": "sharesChainToken()", +"dabbd2bd": "removePlayerFromServer(uint256)", +"dabbd670": "team2Token()", +"dabc0c37": "isPassOwner(bytes32,address)", +"dabc706e": "getProposalCost()", +"dabd2719": "setDiscount(uint256)", +"dabd2eb2": "changePrice(bytes32,uint256)", +"dabd5d65": "addDays(uint256)", +"dabdc1f2": "ChangeActiveDigger(address)", +"dabecd8d": "_newBid(bytes32)", +"dabed8be": "Update_UserWinningHistory_Data(uint32,uint32)", +"dabf7dc8": "PayoutDividendEarly(uint256,bool)", +"dabf7ec4": "helper(uint256)", +"dabf8246": "EventAuction(address,uint256,uint256,uint256,uint256,uint256)", +"dac00420": "maxHalvings()", +"dac05adc": "test_1_ensureVoteWorks_increaseBlocksBy100()", +"dac1182e": "signBBODocument(bytes,bytes)", +"dac17430": "lastVoteTime()", +"dac194f1": "setAutoInvest()", +"dac1e5e5": "_computePVPReward(uint256,uint256)", +"dac32ba9": "modifyPolicyTo(address,uint8,uint8)", +"dac34674": "setNextGameSettings(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"dac3ab88": "getCurrencyHash(uint256)", +"dac3f6d2": "queryFusionData_ext(uint256)", +"dac47a71": "SetGiftTime(uint256)", +"dac4fcdb": "getNewCustomPrice(address,address)", +"dac54b8a": "returnHoldings(address,uint256,uint256)", +"dac54daa": "OPLTest()", +"dac5b8ae": "TokenSale(address,uint256,uint256,uint256)", +"dac645bd": "getBUI(bytes32,uint256)", +"dac649c8": "NEWC()", +"dac6af5e": "SWIFTH(address,address[],address)", +"dac796bb": "getInvestorBalance(address,address)", +"dac7c858": "TOKEN_TRANSFER_PROXY_ADDR()", +"dac84ee4": "moveToReceiver(address,address,uint256)", +"dac8df25": "DEVELOPER_CUT()", +"dac90466": "_error(bytes32)", +"dac9555d": "allocate_slot(address)", +"dac9882a": "offChainAddresesValidCount()", +"daca5ce0": "bonusTokensPercent()", +"dacaeb07": "pledge(bool,uint256)", +"dacc8e11": "getTPrice(uint256)", +"dacd06fc": "KongQiCoin()", +"dacd4472": "PixoArenaFounderToken()", +"dacdbb93": "removeAccountSearch(address)", +"dace4557": "setUnlockTime(uint256)", +"dacef51b": "payincount()", +"dacf18c7": "getDeathCoin()", +"dacf9483": "getUIntValueConverted(bytes32,uint8,uint256)", +"dacfa06f": "manualDraw()", +"dad0128d": "calculateAdjustedFiguresForBattle(address[3],address[3])", +"dad03cb0": "returnError()", +"dad13822": "setMonsterClassSiteSet(uint256,uint256)", +"dad22781": "AdvancedArtificialIntelligenceSafetyDefense()", +"dad24541": "PresaleToken()", +"dad2771d": "signReceipt(uint256,int256)", +"dad30cfc": "test_transfer_to_contract_with_fallback()", +"dad38294": "PowTokenHashedBase()", +"dad39151": "multiApprove(address,address[],uint256[])", +"dad52c72": "_itemCancelMarkets(uint256)", +"dad59f35": "raisedEthers()", +"dad5c2e3": "validAstroCount()", +"dad5c3ee": "chainyShortLink(uint256,string)", +"dad5fda3": "vester()", +"dad6b482": "userHasPositveBalance(address)", +"dad72332": "claimUnsold()", +"dad788d9": "isJobExpired(uint256)", +"dad7ad9e": "aix()", +"dad7c095": "transferWithAllowance(address,address,address,uint256)", +"dad7e4d2": "Aaa()", +"dad86b45": "teamETHUnlock3()", +"dad90035": "withdrawalRequests()", +"dad901be": "callWithdraw()", +"dad950f4": "InvestorPart()", +"dad98b52": "MonsterBitToken()", +"dad99119": "ddf()", +"dad99989": "burnCoins(address)", +"dad9a423": "setDuesIn(uint256)", +"dada85c3": "setAirdropOn(uint8)", +"dadad8fe": "addNewStreetName(string)", +"dadb20be": "ChangeTokenName(address)", +"dadc89eb": "setPreIcoDates(uint256,uint256)", +"dadcb23a": "getRevenueFactor(uint256)", +"dadcb460": "bumpPointer()", +"dadce8b0": "setExpiration(uint64)", +"dadd9e8e": "withdraw_some_amount(address,uint256)", +"daddff33": "claimController()", +"daded88e": "addMessageRequest(address,address[],string)", +"dae072d9": "GameWon(address,uint256)", +"dae1bd84": "AddChip(address,uint32)", +"dae1ddd2": "check_period(address,address)", +"dae1f17a": "getShopOwner(string)", +"dae21454": "toEthereumSignedMessage(string)", +"dae37abc": "cancelParticipation()", +"dae37fac": "spendAvailable()", +"dae392ee": "softFundingGoal()", +"dae3f7e2": "Gralaxious()", +"dae595e5": "getAuctionStart(address,address)", +"dae611c4": "lockUnlockMatchGPForBetting(uint256,bool)", +"dae6f081": "setScrapMinStartPrice(uint256)", +"dae79483": "getMemsize()", +"dae7e05d": "_bonusAll(uint256)", +"dae8865c": "ETHERCToken()", +"dae89f18": "coordinatorAccountIndex(uint256)", +"dae8af77": "getFeeWindowId(uint256)", +"dae9c31b": "ProofPresale()", +"dae9e379": "getFundBalance()", +"daea85c5": "approve(address)", +"daeab905": "issueReceipts(address,uint256)", +"daeb1c98": "PlusToken()", +"daeb860d": "versionAddresses(bytes32,bytes32)", +"daec4582": "AuctionEnded(address,uint256)", +"daec75f3": "buyXwithdraw(bytes32,uint256)", +"daec8128": "mintTokensForFounders()", +"daecc910": "getCKOwner(uint256)", +"daed6726": "ETHCollected()", +"daee4dd6": "readCheck(address,uint256)", +"daee9e35": "level2Bonus()", +"daeed3a6": "rateFinalStage2()", +"daef0e92": "stopCurrentGame(uint256)", +"daef4df8": "addCar(string,address,uint256,uint256,uint256)", +"daef569f": "insChainTokenLedger()", +"daf017a9": "GetRocket(uint32)", +"daf059c6": "createGuess(uint16,uint64,uint64,uint16)", +"daf13a47": "reserveLockup()", +"daf161e2": "getThirdAdmin()", +"daf1af19": "Current_balance()", +"daf1db09": "readyForFinish()", +"daf22f4d": "identify(bytes32)", +"daf32370": "getPurchaseAddress(uint256)", +"daf47ba3": "incGenLabFace(uint256)", +"daf488b1": "setReferrerPercent(uint256)", +"daf49451": "BINGToken()", +"daf4f66e": "isLimitEnabled()", +"daf64aa5": "getCompanyDetails(uint256)", +"daf69093": "BLOCKCHAIN_DEPOSIT_BETA_1M()", +"daf6ca30": "saleContract()", +"daf6e5ae": "DeepBrain()", +"daf760d0": "getData_6()", +"daf7f103": "_error(uint256)", +"daf8f438": "startRedeeming()", +"daf9812f": "updateBincentiveErrand(address)", +"daf9a535": "getData_20()", +"dafa1d2d": "burn(string)", +"dafa55a1": "creatureIndexToOwner(uint256)", +"dafae408": "checkThreshold(uint256)", +"dafaf94a": "getOracle(bytes32)", +"dafba12f": "setMAGContractAddress(address)", +"dafc5608": "TransferFeeRateConfirmed(uint256,address,uint256)", +"dafc64c4": "ERC223MintableTokenFactory(address)", +"dafd54a6": "ExaEUR()", +"dafd70c9": "RESERVED_UTILITY_GROUP()", +"dafea207": "smax256(int256,int256)", +"daff0093": "setReference(address,address,bytes32)", +"db00345d": "BookToken()", +"db006a75": "redeem(uint256)", +"db00758a": "getSGNTokenManager()", +"db00b848": "_performGeneric(bytes,address)", +"db00d1a9": "_preValidateCancellation()", +"db0251e9": "contributeMsgValue()", +"db035918": "deployForeignBridge(address)", +"db041965": "fightBetaMonster()", +"db0436c2": "RUNEToken()", +"db04a0ee": "getOrganizerActivationStatus(uint256)", +"db04aef4": "getHoldersLength()", +"db051653": "setEtherFeePercent(uint256)", +"db054134": "mintForReportingParticipant(uint256)", +"db059dfb": "createSsp(address,uint256,string)", +"db05ccfc": "setValue(address,uint256,uint256,uint256)", +"db060e1a": "RESERVED_TOKENS_FOR_FINANCIAL_INSTITUTION()", +"db068e0e": "setExchangeRate(uint256)", +"db06f0c2": "doPresaleMinting(address,uint256,uint256)", +"db078f08": "toggleKey(address,bool)", +"db0827e9": "ashcashToken()", +"db0834cf": "lockedAllocation()", +"db08444a": "toUint(int256,string)", +"db087ad5": "getCurrentPricePerWei()", +"db08ccec": "enjinTeamAddress()", +"db0a087c": "getTypeName()", +"db0aa668": "Bittwatt()", +"db0ad29c": "SocialMediaMarketToken(uint256)", +"db0c154a": "hitCharacter(uint16,uint16,uint8)", +"db0c9a02": "marketSell(uint256)", +"db0d5175": "getTransfer(address)", +"db0d7ce5": "LotteryRoundCreated(address,string)", +"db0db014": "dividendsForAmountAndTime(uint256,uint256)", +"db0dd71e": "addAbility(string,bool,uint8,uint8,uint8,uint256,uint256)", +"db0e127a": "openDoor()", +"db0e16f1": "emergencyERC20Drain(address,uint256)", +"db0ec968": "transfer(address,uint16[])", +"db0edd08": "PubKeyHashAdded(bytes20,uint8)", +"db0fb107": "updateSafeSender(address)", +"db107371": "DecentrEx(address,address,address,uint256,uint256,uint256)", +"db11040f": "LogRegError(address,string)", +"db112977": "Project_Info(uint256)", +"db11ead1": "markContribution()", +"db1227da": "initGameReferred(address,uint8)", +"db122ad4": "committeeJoinVotes(address)", +"db123b1a": "ZRX_ASSET_DATA()", +"db12630a": "fundariaCap()", +"db12999b": "airdropTokens(address,address[],bool)", +"db1366bf": "buyExchangeRate()", +"db136b1e": "createAsset(address,uint256)", +"db15520d": "TPTContributors()", +"db15b72d": "getDInfo(bytes32)", +"db165a76": "createLand(address,uint256)", +"db16d0fe": "optionExist(uint256,uint256)", +"db171211": "returnToSender()", +"db171754": "vestedAddress()", +"db180b2b": "LOCKAMOUNT2()", +"db18c972": "play4(address,uint256)", +"db18f962": "updateSplitandSend()", +"db192761": "Clockpay()", +"db1a71ae": "trackable_likes(address)", +"db1b569f": "previousSender()", +"db1bdd1d": "TheTokenG()", +"db1c45f9": "getAllGames()", +"db1c53e2": "isTransferedUser(address)", +"db1d0fd5": "alpha()", +"db1d68b5": "countryWinnerID()", +"db1eeb51": "MizeCoin()", +"db1f6689": "authorContentByIndex(uint256)", +"db201648": "AppicsFund()", +"db21fc9c": "gettimeback()", +"db22032f": "rentalTimeRemaining()", +"db2307b6": "changeRecvEthStatus(bool)", +"db230b52": "viewScore(address)", +"db239951": "cbAddresses(address)", +"db23c5d7": "icoRuleAdd(uint256,uint256,uint256,uint256)", +"db23f7e3": "veztUserArrayIdentifier(address)", +"db246fda": "withdrawalTimeOf(address)", +"db248091": "assignBonus(address,uint256)", +"db25b407": "listActive()", +"db25c328": "joinToProvider(uint256,address)", +"db25e637": "Strikes(address[])", +"db264a36": "s10(bytes1)", +"db27b0bc": "addUInt(uint256,uint256)", +"db27b8dd": "vestingManager()", +"db299492": "IGFC(uint256,string,uint8,string)", +"db29fd6e": "increaseDistrictCoke(uint256,uint256)", +"db29fe12": "addShareholder(address)", +"db2a0cb7": "HumanStandardTokenFactory()", +"db2ac8d8": "WINTOKENADDRESS()", +"db2becb0": "getWalletFeeSignatures()", +"db2c4e2d": "complexScaleObsTest(address)", +"db2d10a5": "PreICOTokenPushed(address,uint256)", +"db2d5841": "batchRelease(address[])", +"db2e21bc": "emergencyWithdraw()", +"db2ea20e": "arrayTestMulti(address[],address[],uint256[])", +"db2ea5c0": "_callERC165SupportsInterface(address,bytes4)", +"db2f1d83": "TalkCrypto()", +"db3119bb": "manageLink(uint256,uint256)", +"db318833": "_ecAdd(uint256,uint256,uint256,uint256,uint256,uint256)", +"db31dd17": "removeAddressFromWhitelist(address,string)", +"db31fb03": "excessEth(address)", +"db3268d8": "getBU(bytes32)", +"db32be98": "refundICO()", +"db330794": "addToVestMap(address,uint256,uint256,uint256,uint256)", +"db3359f0": "makeNonFungible(uint256,address)", +"db35132c": "WithdrawEther(address,uint256)", +"db3543f5": "setFoundation(address)", +"db35a03d": "allowedSpenders()", +"db36c2e5": "destroyOldCoins(address,uint256)", +"db37ceec": "maxEthContribution()", +"db37e42f": "multisetProofType(uint256[],address[])", +"db383bf2": "MyNewToken()", +"db38b877": "testRsplit()", +"db395d2e": "bonusPercentForWeiAmount(uint256)", +"db39a8e8": "getTokenTransferInsByAddress(address,address,uint256)", +"db39ceac": "MyBalance2(address,address)", +"db3b73db": "getPlatformName()", +"db3c1b94": "EtmPerBtc()", +"db3d8421": "getTotalAngelCardSeries()", +"db3e7f4f": "forgeTokens(address,uint256)", +"db3fab84": "Hamza_Ahmed_Coin()", +"db3fd0b8": "usedReserveSupply()", +"db403747": "mintForYear(address,uint256)", +"db40e896": "stopExchange()", +"db40ed24": "WeGoldToken()", +"db412f39": "preSaleDelivery(address,uint256)", +"db420fe3": "serverAddress()", +"db422e0b": "sendTokensAndRefund(address)", +"db447c04": "getPurchaseDetail(uint256,uint256,address)", +"db45479b": "closeChannel(uint256,address,bytes32,uint256,bytes32,bytes)", +"db456f77": "extraReceiverByIndex(uint256)", +"db45a30f": "buyPlanet(uint256)", +"db475044": "SHITcoin()", +"db478d08": "levelTwoBonus()", +"db47b9c9": "isTokenSupported(address,address)", +"db480704": "HCTToken()", +"db4844f3": "setRequestFailed(uint256)", +"db491d49": "ContributionReward()", +"db491de9": "daysToUnfreeze(address,address)", +"db491e80": "getNote(uint256,uint256)", +"db4ad99f": "constructUserIdentity(address,string,uint32,string,string,bytes32,bytes32,uint8)", +"db4bb866": "bitskiToken()", +"db4bd421": "trackable_record(address,uint256)", +"db4c528b": "increasePositionOnBehalfOf(address,bytes32,uint256)", +"db4cacec": "Other()", +"db4ce763": "DTRExpensiveWallet(uint256)", +"db4cf8e6": "getAccountAddress(uint256)", +"db4d1296": "confirmAdminTx(uint256)", +"db4e1df5": "setBTTSToken(address)", +"db4ecbc1": "CONTRACT_ADDRESS()", +"db518db2": "withdrawFor(address,uint256)", +"db51d62b": "OpenTime()", +"db52e130": "saveString(string)", +"db530222": "nextEndTime()", +"db536d2f": "getDefaultKey(address)", +"db5370c3": "EEAcoin(address)", +"db543fdc": "adviserAndBounty()", +"db5517b0": "snapshots(address,uint256)", +"db5549d8": "TokenBurn(address,uint256,bool)", +"db55bd2d": "authoriseNextAction()", +"db56702b": "firstWeekEndTime()", +"db56c29d": "Billionstrader()", +"db56d26c": "ChangeFiliate(address)", +"db57c429": "createPromoGameItem(address,string,uint256,uint256)", +"db5861ed": "ULA(uint256,string,string)", +"db589907": "setCosts(uint256,uint256)", +"db589bbe": "getInternalDrawings(uint256)", +"db59190d": "C1(uint256)", +"db59c052": "getFreeTokens(uint32,bytes32,bytes32,uint8)", +"db5a2778": "adminAddCountry(string)", +"db5ad407": "setData(bytes32,uint256,uint256,uint256,uint8[])", +"db5b4183": "oracleOutcomes(bytes,address)", +"db5b5799": "setClientSupply(address,uint256)", +"db5b7635": "TokenMacroansyPower()", +"db5c92a7": "getTokensInUSD(uint256)", +"db5c9442": "TRIAL()", +"db5cf9de": "getSpaceshipProductClassByModel(uint16)", +"db5d855b": "getReceiptId(address,address,uint256)", +"db5df447": "redemptionPriceCalculate(uint256)", +"db5eef61": "PredictionMarket()", +"db5f2f31": "calcExchangeRate()", +"db5f5d7c": "usedAPI()", +"db606931": "pointRootNode(address)", +"db618c08": "TestAuditor()", +"db623bd5": "ErrorSendingETH(address,uint256)", +"db624887": "W()", +"db62df0e": "likeTrack(address,bytes32)", +"db6380ec": "tokenCapForMainICO()", +"db638e51": "resetUserRefBalance(address,address)", +"db63e149": "EmployeeWallet(string)", +"db641ab4": "Game_balance_in_Ethers()", +"db642bce": "GoddessToken()", +"db6648c0": "collateralisation(address)", +"db66ef59": "getPublicKeyN()", +"db6727c1": "myBitFoundationPercentage()", +"db680e3d": "getMeterInfoByMonth(uint8,uint256)", +"db681e1d": "GameScored(bytes32,int256,int256,uint256)", +"db681e54": "getGenerationForCall(bytes32)", +"db681e9f": "sendRefund(uint256)", +"db6997ae": "getCitiesData(uint256[])", +"db6a3652": "addOrder(address,uint256)", +"db6aef35": "amountOfWorkpointQueue()", +"db6bb289": "Zygoma()", +"db6bbeb2": "abx_token()", +"db6be534": "end_ts()", +"db6be871": "getAmountByCoupon(bytes32)", +"db6bed22": "addPresaleWallets(address[],uint256[])", +"db6c1831": "bonusSystem(bytes5,uint256)", +"db6c709c": "updateExchangeRates(uint256,uint256)", +"db6c71d6": "rspContract(address,uint256)", +"db6c7286": "CTokenGB()", +"db6c9416": "AgoraToken()", +"db6f1e74": "getUser(uint32)", +"db6f7537": "getPOOL_edit_22()", +"db6f9deb": "rewarded(uint256,address)", +"db6fcf01": "is_destroyed(uint256)", +"db7057fb": "rngId()", +"db714efe": "getBlocks(uint256,uint256)", +"db71c776": "setRateIcoPreICO(uint256)", +"db71d8b6": "FEE_SELECT_LRC()", +"db723e73": "personalMincap()", +"db72496f": "cancelSubscription(uint256,uint256)", +"db737c78": "getToken(uint256,bool)", +"db73bfce": "gameInfo()", +"db7400a5": "createAppInstance(bytes32,bytes)", +"db747f21": "setOraGasLimit(uint256)", +"db74847d": "distributeTratok(address[],uint256[])", +"db74c27a": "backRedPillTokenOwner()", +"db75dd5f": "AQBToken()", +"db76790f": "setAdvisorWallet(address)", +"db76e9c2": "setMemberLevel(address)", +"db77032d": "RATE_SALESTAGE4()", +"db775041": "donation(bytes32,uint256)", +"db775410": "setTypedJackpotWinner(address,uint256)", +"db7757cf": "valueRaised()", +"db78d0ce": "getAirdropAtSnapshot(address)", +"db78f5ef": "withdrawOnBehalf(uint256,string,uint256,uint8,bytes32,bytes32)", +"db79a65f": "resetUserWhiteListAmount()", +"db79e673": "getTradeOfferRecipientItems(uint256)", +"db7a0855": "MZToken()", +"db7a2f42": "projectAgent()", +"db7a4605": "getWallets()", +"db7a80f8": "getContributionUSD(address)", +"db7b87ff": "init(address,uint256,bytes32,uint256,uint256,uint256,bool,bool,address)", +"db7bc073": "refundWhenNotClosed(address)", +"db7ca38a": "XaurmProxyContract()", +"db7d2665": "FundTransfer(address,uint256,address)", +"db7d9065": "assignedAmountToCooperativePartner()", +"db7ed9e7": "addAssessorToPool(address)", +"db7ef562": "_2_nation()", +"db7ef7c6": "verifyEscrowVendor(uint256,address)", +"db7f1e6b": "getInitialEnemyCombination()", +"db7fea95": "WALLET_T8EX_RESERVED()", +"db803a86": "post(string,address[])", +"db80813f": "set(bytes32)", +"db80a787": "emitCourtUpdated(address)", +"db80fbc9": "balanceOfLockup()", +"db82967c": "createUsingProxy(address,bytes)", +"db8298f3": "_commissionTarget()", +"db833e3a": "sellShares(bytes32,uint8,uint256,uint256)", +"db83694c": "getSaleInfo()", +"db8374ee": "buyOracleFor(bytes,address,address)", +"db83d02f": "VREO_SALE_CLOSING_TIME()", +"db84252c": "tokenCreator()", +"db852ee7": "pieceSold(address,address,uint256)", +"db856759": "depositOldTokensFor(address,uint256,address)", +"db856f28": "_updateCard(address,uint256)", +"db85bd78": "registerTraderAccount(address)", +"db86d850": "transferGoo(address,uint256)", +"db87cbcc": "GetPermissionsList(address,address)", +"db88176f": "getQuestion(uint256)", +"db8850bc": "_merge(uint256,uint256)", +"db886f23": "Marketing()", +"db89c044": "reputationOf(address)", +"db89edb2": "BitDailyBot()", +"db8a61d4": "APP_BASES_NAMESPACE()", +"db8b6ccf": "addSubjectMatter(string)", +"db8b7fae": "transform(address)", +"db8bcec4": "MAX_TIME_RANGE_COUNT()", +"db8cee5e": "_generateRandomDna(uint256)", +"db8cfa5a": "HAVtoUSD(uint256)", +"db8d55f1": "getFees()", +"db8d7c39": "disableRestriction()", +"db8e9043": "SetOutRate(uint256)", +"db8ecf34": "registerFreelancer(string,string,bytes32,uint256,uint256,uint256[],string,string,bool,string,uint256,uint8,uint256[],uint256[],string)", +"db8ed8a7": "withdraw_a_bit(uint256)", +"db8ee692": "_price_tokn_ICO()", +"db8f0301": "getAEth(uint256,uint256)", +"db8f2f75": "EthStorageContract(address,address,address[],uint256,uint256,string,string,uint8)", +"db8f5a35": "feesAndBountySupplyRemaining()", +"db8f7fb5": "preDiscountPercentage()", +"db9078b4": "CheckGenChip(uint32)", +"db9090a7": "devTokenWithdraw(uint256)", +"db91095e": "LVXToken()", +"db91774c": "setMinValue(uint256)", +"db9254a5": "_buy(address,uint256,uint256)", +"db9311c2": "getBlocksToNextRound()", +"db93f375": "startTokenVotes(address[],uint256,uint256,uint256,address[])", +"db946a11": "PlayStationChain()", +"db958f18": "FootCoin(uint256,string,string)", +"db95937d": "orderContractorProposal(uint256)", +"db967d05": "endOfPhase3()", +"db97c24d": "uzziToken()", +"db98abd8": "testThrowCancelSellOrderTwice()", +"db98d73f": "setRecordAddress(address)", +"db99800c": "fetchCreatedOrdersForMerchant(address)", +"db9a21bb": "CreateRZM(address,uint256)", +"db9abbd4": "arr(bytes32,bytes32)", +"db9b6775": "testMintThis(int256)", +"db9b7170": "setApproval(address,bool)", +"db9cc410": "createAsset(string,uint256)", +"db9cc99d": "AuctionCancelled(uint256,uint256)", +"db9cd8d3": "tab()", +"db9d28d5": "numDigits(uint256)", +"db9d5d31": "AdminRemoved(address,address)", +"db9dfb35": "newTeamOnEnd(uint16,uint64,uint64,uint64)", +"db9f16a8": "takeOffItem(uint256,uint8)", +"dba01cfe": "distributePENT(address[],uint256,uint256)", +"dba07858": "_removeFromList(address[],address)", +"dba0e9bb": "ethertoteDevelopmentWallet()", +"dba1a5f9": "allocateFunds()", +"dba1ac3d": "getEnforceRevisions(bytes20)", +"dba21586": "ProofOfTrevonJames()", +"dba21657": "askForEther(uint256)", +"dba22cb0": "transferPlanet(address,uint256,uint256,uint256)", +"dba232e3": "POPToken()", +"dba2a570": "_tune(uint256,uint256)", +"dba2d875": "forcedRefund()", +"dba31911": "bookSpaVisit(uint256)", +"dba33c03": "saleTokensCents()", +"dba3e704": "setMinimumContribution(uint256)", +"dba4c85c": "GetWithdrawBalance(address)", +"dba56cb8": "buyTokensFromContract(address,uint256)", +"dba5e917": "SelfDestruct()", +"dba6f7be": "verifyCreateSig(address,uint256,uint256,bytes32,bytes)", +"dba72a4e": "ICONIQ_SALE_OPENING_TIME()", +"dba7ef7d": "Bookie(address,address)", +"dba86ab6": "claimCardboard(uint64)", +"dba8be6e": "chickenTokenDelegator()", +"dba989ca": "_bonusTime2()", +"dba9a8a2": "setTrCut(uint256)", +"dba9daab": "pickBigWinner()", +"dbaaa2dd": "MIN_CONTRIBUTION_PRESALE()", +"dbaab3e1": "setMarketingAdmin(address)", +"dbaad1e5": "ownerDied()", +"dbab2f97": "merge(address[],bytes32,bytes32,int256,int256)", +"dbab7f1b": "UserInfoContract()", +"dbac248b": "MannaCoin()", +"dbac4cbf": "GetContractStateTerminatedSecDep()", +"dbac7806": "milestone()", +"dbacc237": "holderOf(uint256)", +"dbad21af": "tickets1kprice()", +"dbaea636": "UVPToken()", +"dbaec0fd": "createPattern(bytes32,string,address,string)", +"dbaf023d": "LogoVote()", +"dbaf2145": "requestWithdrawal()", +"dbaf5ce7": "changeRatesToken(uint8,uint256)", +"dbaf7247": "getValueByIndex(uint256)", +"dbafd0f2": "getTotalSeconds()", +"dbafdbb6": "setBalanceLimit(address,uint256)", +"dbb094ef": "Crowdsale(address,uint256,address,address)", +"dbb173d9": "test_updateKey_decreaseNoHint(int256)", +"dbb183c2": "setAuthorizedLogicContractAddress(address)", +"dbb24554": "updatePriceDenominator(uint256)", +"dbb34667": "getDsoStake(uint256)", +"dbb3cef3": "developer_update_Terms_of_service(string)", +"dbb47d77": "claimPlayerWinnings()", +"dbb56384": "encodeUtxoPosition(uint256,uint256,uint256)", +"dbb57a4b": "transferOne(address,uint256)", +"dbb61238": "maxDelay(uint256)", +"dbb62f24": "setDataMining(address)", +"dbb633f1": "ownerWithdrawalDate()", +"dbb72f67": "nullify(address)", +"dbb80e42": "allTokensLength()", +"dbb82429": "_randByRange(uint256,uint256)", +"dbb833df": "investWithoutId()", +"dbb8a305": "getBetName(uint256)", +"dbb98cae": "limit7()", +"dbb9deda": "goNext()", +"dbbabdfe": "getnum(uint256)", +"dbbb119c": "addMaster(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"dbbb206f": "buy(address,address,address,address,address)", +"dbbbe8df": "transferByCrowdsale(address,uint256)", +"dbbc6fcc": "isPayableEnabled()", +"dbbc853b": "tokenURISuffix()", +"dbbd3a71": "addClaim(address,bytes32,string,string,address,uint256)", +"dbbd4865": "isEarlyBirdsStage()", +"dbbd78da": "getAccountNickname(address)", +"dbbd7934": "findItem(address[],address)", +"dbbd9a04": "ALLOC_MAX_PRE()", +"dbbdad8c": "generateReleaseTokensSchemaHash(address,address,uint256,bytes32)", +"dbbdae63": "updateSeller(address)", +"dbbdf083": "register(uint256,address)", +"dbbe2ff9": "setCirculationShares(string)", +"dbbf01b2": "setAddUsers(address,address,string,string,uint256)", +"dbbfcd7c": "getCOR()", +"dbc02821": "XTVNetworkContractAddress()", +"dbc0c085": "teamMultisig()", +"dbc139be": "LogMigration(address,uint256)", +"dbc1f226": "suicide(address)", +"dbc27799": "pendingNewRound()", +"dbc2783d": "DoNotDeployThisGetTheRightOneCosParityPutsThisOnTop()", +"dbc2d042": "consumerAddress()", +"dbc2ef49": "getNotUsedToken_()", +"dbc38940": "executeTxn(uint256)", +"dbc45228": "newProposal(address,uint256,bytes,bytes)", +"dbc488e2": "ESlotsCrowdsale(address)", +"dbc53c07": "read(uint16,uint16)", +"dbc56297": "claim(address,bytes32,bytes32,uint8,bytes32,bytes32)", +"dbc57971": "getIcoStatus()", +"dbc5d002": "sendQuery(string,uint256,uint256)", +"dbc65f85": "preBuyPrice2()", +"dbc69521": "totContribution()", +"dbc7464b": "getEquippedItemId(address,uint256)", +"dbc837c5": "insurer()", +"dbc8817d": "GOLDENRATIO()", +"dbc91396": "cancelOrder(uint128)", +"dbc91ed1": "subset(string,uint256,uint256)", +"dbc933bc": "p_withdrawDevHoldings()", +"dbc9ef42": "_removeAuction(uint40)", +"dbca1207": "getLastSeed()", +"dbcbaca4": "investorInfo(address)", +"dbcbb362": "setTransperRun(uint256)", +"dbcc4658": "getSmartContractByPosition(uint256)", +"dbcc6caf": "second_release(uint256)", +"dbccb926": "CreatedToken(address,uint256)", +"dbcd258d": "blocksPerHour()", +"dbce1ff7": "referralRateInviter()", +"dbceb005": "split(uint256)", +"dbcf0531": "ContractFullfilled(address,int256)", +"dbcf194a": "GetInventoryCount(address)", +"dbd01de1": "cluster()", +"dbd05767": "RBA()", +"dbd0e1b6": "getSeller()", +"dbd16774": "IGMathsContract()", +"dbd19619": "round_earnings(uint256)", +"dbd1be77": "getDrone(uint256)", +"dbd1df92": "setTitulaire_Compte_1(uint256)", +"dbd229ff": "totalSupplyMarket()", +"dbd2a4c5": "promoterInfo()", +"dbd2ac60": "distributeCallback(uint256,uint256)", +"dbd3100e": "getBuilding()", +"dbd3313e": "PizzaPoll()", +"dbd3c372": "safeMulticastTransfer(address[],uint256[],uint256[],bytes)", +"dbd3cd62": "withdrawPayment(uint256)", +"dbd3d021": "findNextSecond(uint256,bytes2)", +"dbd42da5": "ranked()", +"dbd4a422": "synthetixState()", +"dbd4a8ea": "setBase(address,uint64,bool)", +"dbd54b62": "setMasterAuth(address)", +"dbd55fb3": "ACTION()", +"dbd594bb": "FoundsTransferd(address,uint256)", +"dbd5ef6d": "setFeeConfig(uint256,uint256,uint256,uint256)", +"dbd64ae9": "closeSale3()", +"dbd6da8c": "isUidSet(string)", +"dbd6f5c1": "allocationAddress()", +"dbd760ca": "PriceThreeDisable()", +"dbd7fd13": "saleMilk()", +"dbd84659": "receiveTokenByClientAccount(string,uint256,address)", +"dbd848e3": "ICO_Ended()", +"dbd8987c": "contractFeePercentage()", +"dbd8c25f": "BasicTokenImpl()", +"dbd91792": "multiowned()", +"dbd9a4d4": "setAllowances()", +"dbdb8b56": "eosGAS()", +"dbdb96c2": "updated_policy_payload()", +"dbdbbb28": "getRoundBonusRate()", +"dbdc275d": "createB()", +"dbdd5ae6": "actOnBehalf(bytes,uint256,uint8,bytes32,bytes32)", +"dbdd5d74": "swapsFor(address)", +"dbddcdb7": "getScouponBalances(address)", +"dbde1988": "transferFromWithoutReward(address,address,uint256)", +"dbde2f19": "min(uint8,uint8)", +"dbdef054": "setFinalizeAgent()", +"dbdf7fce": "resetCounter()", +"dbdf8538": "_emitWorkStarted(uint256,uint256)", +"dbdff2c1": "getRandomNumber()", +"dbe01790": "getAllHpbNodes()", +"dbe1053d": "sendEthBackToUsers()", +"dbe201c7": "getAllBidsByAdslot(uint256)", +"dbe2bc84": "_suspendMarket(address)", +"dbe2c85b": "checkFiscalVerify(bytes32)", +"dbe2e296": "pushToPot()", +"dbe3010c": "WINNER_SHARE()", +"dbe3071a": "Kitchen()", +"dbe3117a": "tier2Timestamp()", +"dbe35007": "getAuctionsLength()", +"dbe3e92f": "provenanceOf(address)", +"dbe54524": "set_CWC_Address(address)", +"dbe55e56": "platformAddress()", +"dbe587b9": "CashPokerProPreICO()", +"dbe5bab5": "getOpenOrders()", +"dbe5ca78": "POAP()", +"dbe5fe9d": "setMaxCoinSides(uint8)", +"dbe6c02f": "isOwnerOrOperator(address,address)", +"dbe705ea": "fetchCreatedOrdersForMerchantByAdmin(address)", +"dbe7e3bd": "claimed(uint256)", +"dbe992af": "updateEntry(uint256,address,uint256)", +"dbe9eebf": "getPricePointsLength()", +"dbea52d8": "lotteryPrice()", +"dbeab275": "createRoutingCode(bytes32)", +"dbeabd21": "getPplsAddr(uint32)", +"dbecc372": "Example(uint256)", +"dbecfb25": "koth_v1b()", +"dbed1e88": "getUnlockTime(address)", +"dbed3a30": "GamePoolAddress()", +"dbedf9e4": "TB01()", +"dbee0dea": "releaseTimeLock()", +"dbeea819": "tokenGrantees(uint256)", +"dbef0790": "returnUnsoldTokens(address)", +"dbefe789": "NUM_OF_PHASE()", +"dbf14295": "claimSilver(uint64,uint64,uint64,uint64,uint64,uint64)", +"dbf14dd9": "buyfloaksAgainstEther()", +"dbf1b00b": "claimBeer()", +"dbf1bfee": "ballotFee()", +"dbf1ede3": "_getLogTokenContract(uint256)", +"dbf1f780": "_hasEntryForCompetition(address,uint256)", +"dbf1fe48": "calculateTokensFromWei(uint256,uint256)", +"dbf27e0c": "updateConstitutionPoll(address)", +"dbf2c9da": "isValidAuthority(address)", +"dbf2f3c2": "get_reward(address)", +"dbf323dd": "DEDToken()", +"dbf35430": "ownedOwnershipTransferred()", +"dbf44530": "isWhite(address,address)", +"dbf45aa3": "EthBank()", +"dbf4c54c": "batchTransfer(address[],address[],uint256)", +"dbf502c0": "getCentsPerETH()", +"dbf517a2": "_connectModule()", +"dbf53a0e": "StandardTokenMock(address,uint256)", +"dbf552aa": "LOG_InvestorEntrance(address,uint256,uint256)", +"dbf5b91b": "setSafeGas(uint256)", +"dbf5eb1c": "closeTokenSale(address)", +"dbf63340": "availableSynthCount()", +"dbf675c9": "bonusAddresses(address)", +"dbf724c7": "setReceiver2(address)", +"dbf76c03": "bountyOfflineWallet()", +"dbf79dcd": "StatusCow(address,uint256)", +"dbf7dc0c": "getEntityList(bytes32[],uint8[])", +"dbf81cc6": "foundersTokensAddress()", +"dbf8d2fa": "sendTips()", +"dbf98f6a": "totalSupplyBonds()", +"dbfa5863": "_endDate()", +"dbfa6226": "interfaceInstances(uint256)", +"dbfa980b": "Slogan(string)", +"dbfab65b": "AvalonToken()", +"dbfb129e": "ChecksumDatabase(string,string,string)", +"dbfb18e7": "GoblinChainToken()", +"dbfc74cb": "ORACLIZEGASPRICE()", +"dbfccd16": "ethersplay(uint8)", +"dbfdb6e5": "getIcoTokensAmount(uint256,uint256,address)", +"dbfdef01": "TechnoEng()", +"dbfe791b": "confirmed(bytes32)", +"dbfeb17f": "eth_cap()", +"dbfec8b7": "CHEXToken(address,uint256,uint256)", +"dbfef710": "getDefaultRequiredGas()", +"dbff4182": "seedCoins(address,uint32,string,uint256)", +"dc00adef": "buyLand(bytes32,int256[],int256[],address)", +"dc00b602": "EllipseMarketMaker(address,address,address)", +"dc00e43b": "BananaBasket()", +"dc012626": "ballotOf(address)", +"dc015851": "minimumContributionPhase4()", +"dc01bd0c": "calculateAmountForDAI(uint256)", +"dc021628": "setFund()", +"dc02511e": "addPermittedContracts(address[])", +"dc02f456": "decodeTransfer(bytes)", +"dc042405": "getNames(address[],address)", +"dc048cf2": "withdraw(uint256,string)", +"dc0527de": "NDEX()", +"dc06269f": "showWhaleAddr()", +"dc06b859": "numMarketMakers()", +"dc06d8f8": "lnTest(uint256,uint256)", +"dc06e754": "_setRspTokenAddress(address)", +"dc070657": "changeBeneficiary(address)", +"dc08a80b": "safeToAdd(int256,int256)", +"dc08b611": "EXAC()", +"dc08e2c5": "getVIPOwner(uint256)", +"dc08e5ff": "getStockCount()", +"dc09426c": "GetGameInfo()", +"dc09996c": "escrowDatabase(address,uint256)", +"dc09d8fd": "showInvestorsComission()", +"dc0b3564": "players()", +"dc0b48c1": "startPubTrade()", +"dc0ba228": "change(bytes,uint256[])", +"dc0bd011": "collectDonations()", +"dc0bd38e": "appendDecryptedBids(uint256[],uint256[],uint256[],address[],address,uint256[],uint256[],uint256[])", +"dc0bd75f": "arr(address,uint256,uint256)", +"dc0c1a27": "numberOfMajorEvents()", +"dc0c7735": "isPreSaleTokenSet()", +"dc0d3dff": "funders(uint256)", +"dc0d4cb6": "merculetContract()", +"dc0eb1a3": "PredictTheFutureChallenge()", +"dc0f5ffc": "get_candidate_pic(uint8)", +"dc11a496": "changeAdmin(address,bool)", +"dc11b386": "getDailyTarget(uint256,uint256)", +"dc11be24": "smallSize()", +"dc126e63": "unlockVestedTokens(address)", +"dc1279d4": "getPureFromGene(uint256[2])", +"dc129870": "Loom()", +"dc12a805": "right57(uint256)", +"dc12abb5": "setPresaleDates(uint256,uint256)", +"dc132be8": "getAmountofTotalParticipants()", +"dc13352a": "TeamSupply()", +"dc135226": "getValueFromDollars(uint256)", +"dc13f85f": "getMaxPriceSale()", +"dc14af38": "setIncrEth(uint256)", +"dc1542aa": "testSafeAdd()", +"dc154918": "_computeTournamentContenderCut(uint256)", +"dc154a19": "buyAndSetDivPercentage(uint256,address,uint8,string)", +"dc15c635": "getdeptinfo(uint256,address)", +"dc165652": "bountyTokensVault()", +"dc1790e3": "getdeptreqdetails(uint256,address)", +"dc17c9ca": "getTokenOwner(address)", +"dc17e808": "getPaidOrderByIndex(uint256)", +"dc183d64": "setBridgeValidatorsImplementation(address)", +"dc184e70": "reserveAccount()", +"dc190074": "setsafemode(uint256)", +"dc19266f": "Total_of_Players()", +"dc199335": "checkIdentifier(string)", +"dc1997ea": "landlord()", +"dc1abb6e": "MAX_AUDIT_TIME()", +"dc1b93cb": "COREXCoin()", +"dc1bba17": "getTxAmountMCW(bytes32)", +"dc1bebe6": "creditExecutedFundsLessFees(uint128,uint256,uint256)", +"dc1c1389": "acceptOfferForCity(uint256,uint16,uint256)", +"dc1cb47b": "priceTLP2()", +"dc1d672d": "mQueue(uint256)", +"dc1d70c3": "presaleBonusLock()", +"dc1d83b3": "changeTelephone(address)", +"dc1df3f6": "myTokens(address)", +"dc1eab83": "standardSale()", +"dc1fb5a5": "community()", +"dc1fca7e": "dateSaleStarted()", +"dc1fdff0": "commissionSum()", +"dc201838": "QuickPrice()", +"dc206e5f": "oraclize_query(uint256,string,string[])", +"dc20d6e7": "updateRandomNumber(uint256)", +"dc20f957": "assetIncome(bytes32)", +"dc21b3de": "preIcoBonus(uint256,uint256)", +"dc22aca5": "GalaxiumCoin()", +"dc22cb6a": "series(uint256)", +"dc22eba6": "register(uint256,uint256,uint256,uint256,uint256)", +"dc2424fc": "setPositionPrice(uint256)", +"dc242e38": "calTotalSupply(uint256)", +"dc2811cd": "KDOU()", +"dc2816b7": "AddNewChip(uint32,uint8,uint8,uint8)", +"dc28d0c9": "tokenToValue(address,uint256)", +"dc298682": "createCategory(string)", +"dc29a89e": "concatBytes(bytes,bytes,bytes,bytes,bytes,bytes,bytes)", +"dc29da22": "getNodeHash(address)", +"dc29ec37": "tokenReserve(address,uint256)", +"dc29f1de": "topUp()", +"dc2a3056": "setTripleRoomMax(uint256)", +"dc2a60f6": "isReadOnly()", +"dc2af3de": "getCEOAddress()", +"dc2b32e6": "getWeiInvested(address)", +"dc2ba357": "SetupQDA(string,string,uint256,uint256,uint256,address,address,uint256)", +"dc2c928a": "pausePlayerContracts(uint256,uint256)", +"dc2cf3f5": "timeElapsed()", +"dc2d46f8": "getWeiAmount()", +"dc2df955": "get_project_information(uint256)", +"dc2e47c8": "save4(address,bytes,string)", +"dc2e7b33": "cal(uint256,uint256)", +"dc2ebcbc": "whitelistMainSaleAddressMany(address[],bool)", +"dc2f56cf": "transferAgreement(bytes32,address)", +"dc2f7867": "setMaxLength(uint256)", +"dc2f8744": "bounties(uint256)", +"dc2f8a38": "setResult(uint256,uint8,int8)", +"dc30685e": "gas4Token()", +"dc3080f2": "spentAllowance(address,address)", +"dc30e253": "doFinalizeSale(uint256,uint256)", +"dc30f912": "addTokenization(string,string,uint8)", +"dc3134ae": "getIslandBattleStats(uint256)", +"dc31adee": "releaseMarketingTokens()", +"dc31e06c": "NEKOCOIN()", +"dc31e473": "opmAddress()", +"dc322802": "stage2Bonus()", +"dc32c72f": "secondReserveTimeLock()", +"dc340a76": "dataControlDelOwner(address,address)", +"dc3496d7": "allHashTypes(uint256)", +"dc35213f": "change(address,uint256[])", +"dc35a6bd": "LOWER_PRICE_RESET_PERCENTAGE()", +"dc35a900": "createOffer(uint256,uint256,uint256)", +"dc35ea16": "bonusInPhase1()", +"dc371e54": "deleteName(bytes32)", +"dc376392": "ETCCoin()", +"dc3774b3": "availableBalances(address)", +"dc382cbf": "sumAcceptedContrib()", +"dc391176": "delayedPayments()", +"dc39537a": "AVAILABLE_BONUS2_SUPPLY()", +"dc39d06d": "transferAnyERC20Token(address,uint256)", +"dc39e5fe": "removeOperationType(uint32)", +"dc3a1cad": "setIBalances2(uint256[],uint256[])", +"dc3a8372": "controllerApproval(address,uint256)", +"dc3a9433": "lockedFundsPercent()", +"dc3ab866": "checkEarnings(address)", +"dc3acebe": "getApp(address)", +"dc3c39aa": "TCDC()", +"dc3ccfdd": "transfer_tokens_from_contract(address,uint256)", +"dc3d1a2a": "addNewEmployeeWallet(address,address)", +"dc3d2b5c": "MiniMeIrrVesDivToken(address,address,uint256,string,uint8,string,bool)", +"dc3d4203": "createPatient(bytes32,bytes32,uint256,uint256,uint256,bytes32,uint256)", +"dc3d6305": "_transferFromAllArgs(address,address,uint256,address)", +"dc3da6e9": "IcoAddressSet(address)", +"dc3ecbb4": "debug_wei()", +"dc3ef685": "feePromille()", +"dc3f65d3": "createdByMe()", +"dc3f7536": "AdamToken()", +"dc40af1f": "oneTimeTickets(address)", +"dc414448": "_addToParticipants(address)", +"dc415804": "setFiscal(bytes32,uint256,uint256,uint256)", +"dc419fd8": "cancelOrder(bool,uint256)", +"dc41e726": "IndoJek()", +"dc420fd2": "withdrawPayoutFromBet(uint256)", +"dc4243f1": "setSalaryToken(address,address,address,uint256)", +"dc441754": "addDocument(bytes32,string,string,uint256,uint256)", +"dc44bb1c": "createEscrowFrom(address,address,uint256,uint256)", +"dc454c13": "EDROP()", +"dc45b93a": "contributorsCompleteCount()", +"dc45bfb3": "buyPack(uint256)", +"dc45d08e": "getEtherBalance(address)", +"dc45e27f": "getBonusBalanceByType(uint256,uint256,bytes1)", +"dc460933": "assignRole(address,bytes32,address)", +"dc46a76d": "getIdeasSinceLastDeploy(address)", +"dc46c813": "TwoExRush()", +"dc46d984": "numGamesCanceled()", +"dc47b3c1": "numberOfTokenIds()", +"dc47e5b7": "approveAndCall(address,address,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"dc489c9b": "setAirdropper(address)", +"dc493790": "advisoryWallet()", +"dc4a307c": "createCommonAuction(uint256,string)", +"dc4b3115": "thirdPriceTime()", +"dc4baedd": "checkVerify(address)", +"dc4bc06e": "getUserCategory(address)", +"dc4c4005": "RemoveUser(address,address)", +"dc4d2ccd": "DiscountPercentToken(uint256,string,string)", +"dc4ece27": "BONUS_3_DAYS()", +"dc4ee13f": "overallTakenEther()", +"dc4f63cc": "cap_max()", +"dc502d64": "ethToBeDistributed()", +"dc50af26": "against()", +"dc51fba8": "SetherFinalized()", +"dc52696f": "tokenSupplyChanged()", +"dc52c514": "batchCreateDrawings()", +"dc533342": "reconciliationDateSet()", +"dc53903b": "fundsReceived(uint256)", +"dc540979": "POFOMO()", +"dc5418b1": "view32()", +"dc541eb7": "SelfllerySale()", +"dc542a79": "isMaximumGoalReached()", +"dc542c0f": "ALIToken()", +"dc547301": "setCurrentSupply(uint256)", +"dc54d919": "long_tokens(uint256)", +"dc555090": "updateTime()", +"dc555766": "createWithdraw(address,uint256)", +"dc566787": "topdownAndCashout(address,uint256)", +"dc570aad": "setPermission(address,string,bool)", +"dc57726f": "TokenGenerationEnabled()", +"dc57c1ef": "CopyrightToken(uint256,string,string)", +"dc57c323": "nextInputProfit()", +"dc57d553": "epochLast()", +"dc583801": "doubleyour5()", +"dc585713": "EtherFundMeIssueTokensCrowdfunding(string,string,string,uint256,uint256,uint256,address,address,string,string,uint256,uint256,uint256,uint256)", +"dc5936f0": "addCountry(bytes2)", +"dc596304": "NineLTDevToken()", +"dc597b47": "getAnimals(uint8)", +"dc5a2199": "ICO_WALLET()", +"dc5aa474": "lastBlock_f2Hash_uint256()", +"dc5acb90": "getOrThrow(string)", +"dc5b041b": "validationPassed(address)", +"dc5b0662": "getIndexByShip(uint256)", +"dc5b87cf": "getPartnerAllocation(uint256)", +"dc5bc461": "RadToken()", +"dc5bcafb": "UnicornToken(address)", +"dc5bf961": "totalTokensLocked()", +"dc5c3e06": "setFundraiseLimits(uint256,uint256)", +"dc5c9677": "changeSellerProposedValue(uint256)", +"dc5d184f": "setID(uint256)", +"dc5d9bfe": "migrationStep(uint256)", +"dc5df3fd": "ExperimentalPreICO(address,uint256,uint256,uint256,uint256,uint256,address)", +"dc5dff36": "LottoComplete(address,uint256,uint256)", +"dc5fced4": "totalRake()", +"dc5fe025": "forward(address,bytes,uint256)", +"dc5fe349": "releaseManyStakes(uint256[],address[],address[],uint256[])", +"dc602df2": "tokenValueMultiplier()", +"dc6037d1": "setbaseconfig(uint256,uint256,uint256,uint256,uint256)", +"dc60457c": "publicIssue(address,uint256)", +"dc6055dd": "BOUNTY_WALLET()", +"dc61164d": "getMySperm()", +"dc61456c": "cooAddCro(address)", +"dc622bcc": "setTokensAllocation(address,uint256,address[],uint256[])", +"dc62da61": "checkGameListed(address)", +"dc63a62c": "getFileListHead()", +"dc63f0be": "getSatOwed(address)", +"dc646367": "endSale(bool)", +"dc64752d": "collectsAccountDividends(address)", +"dc659907": "useModule(address)", +"dc661aaa": "mainICOFirstWeekEndTime()", +"dc6668db": "make_anonymous_withdraw(uint256)", +"dc667d0c": "getCountriesCount()", +"dc669dd4": "EndorToken()", +"dc689d3c": "getBaseDenomination()", +"dc693ca7": "totalWeiAmountSale1()", +"dc69a2d6": "tearDown(uint256)", +"dc69aa23": "SudanGoldCoinCrowdsale(uint256,uint256,uint256,address)", +"dc6b1cbd": "setUser(address,address,uint256,uint256)", +"dc6b7fb4": "LockedAccountThresholdUsdUpdated(uint256,uint256)", +"dc6b9b29": "notesLength()", +"dc6bbdf5": "totalContributionInWei()", +"dc6bc372": "TokenChangerBNT(address,address)", +"dc6bfbb5": "nextBallotId()", +"dc6c0cdd": "Share()", +"dc6c3ee4": "setMaxTokenCap(uint256)", +"dc6dd152": "playerRollDice(uint256)", +"dc6e7262": "refundTransactionByMediatorFee(uint256)", +"dc6e9cf9": "_MINIMUM_TARGET()", +"dc6f39a3": "TriggerCooldown()", +"dc6ff38e": "MAIN_MAX_CAP()", +"dc7049bf": "annualManagementFee()", +"dc706a3a": "VictusToken()", +"dc70ab02": "setTotalExecutedPerDay(uint256,uint256)", +"dc718791": "changeRules(uint256,uint256,uint256,uint256,uint256)", +"dc71db43": "worldCupResultPart2()", +"dc720528": "AgriChainProduction()", +"dc726205": "rates(bytes32)", +"dc730c50": "initialSingleWithdraw(uint256)", +"dc73e49c": "swapToken()", +"dc7454dd": "amountReleased()", +"dc74665e": "totalLeaderboards()", +"dc75f2db": "multiowned(address[],uint256)", +"dc760edf": "hardCapCrowdSale()", +"dc76dc8d": "applyForCertification(string,string,string,uint256)", +"dc76fabc": "getSpotPrice()", +"dc77e5e1": "serviceTokensBurn(address)", +"dc787bba": "getCountTempHolders()", +"dc799f88": "BaseCertoChainContract()", +"dc79b176": "getUserGroup(address)", +"dc79c2ef": "addUser(bytes32,bytes32,bytes32,bytes32,bytes32)", +"dc79d069": "investorSupply()", +"dc7abeb3": "OPENSOURCE_TOKENS()", +"dc7ac1ba": "lendVault()", +"dc7b808e": "callLibSet(uint256)", +"dc7bbd72": "hasThreeStepWithdraw()", +"dc7cbfab": "priceCounter()", +"dc7df9d8": "testToUint(int256,bytes)", +"dc7e5762": "goNextPeriod()", +"dc7e88e8": "amountOfBooked(address)", +"dc7fc898": "bankermasterReq()", +"dc80035d": "setFoo(uint256)", +"dc801db6": "MyYLCToken(uint256,string,uint8,string)", +"dc80aaee": "DeltaToken()", +"dc81e2b8": "DarenHui()", +"dc82697c": "getContractValue()", +"dc835df5": "Sense()", +"dc8369ce": "myStakesOnCountry(uint256)", +"dc8452cd": "required()", +"dc845934": "getPlayerBetResult(uint256)", +"dc846d95": "Own()", +"dc84e79e": "raisedPreSaleUSD()", +"dc851b02": "itcERC20()", +"dc85561b": "firstRoomAvailable(string,uint256[])", +"dc85b996": "window1EndTime()", +"dc8650de": "_removeFreezer(address)", +"dc86e6f0": "baseUnit(bytes32)", +"dc87cfbf": "executeTransaction(uint256,bytes)", +"dc885527": "burnUnmintedTokens(uint256)", +"dc88e838": "getOAR()", +"dc8a0f65": "change_game_dice(string)", +"dc8b0203": "clearApprovalAndTransfer(address,address,uint256)", +"dc8bc70d": "finalizeSale(address)", +"dc8c06d8": "addEmployerFeedback(address,uint256,address,string,uint8)", +"dc8d1095": "simpleSubmit(uint256)", +"dc8d2696": "inboxSize(address)", +"dc8d26ad": "changeICODates(uint8,uint256,uint256)", +"dc8ee41e": "coldWallet1()", +"dc8f2ae0": "addExplicitPosition(uint32,int64[2])", +"dc8fbb44": "deathData_f12()", +"dc903eb7": "addChunk5ToWhiteList()", +"dc904e69": "waveCap3()", +"dc90e42f": "restrictedStockOf(address)", +"dc91868f": "backTo(address)", +"dc91b634": "Ticketh()", +"dc91ea68": "PayerStringUpdated(string)", +"dc92beec": "setManyWhitelist(address[])", +"dc93f7c9": "feePayedPerReserve(address)", +"dc94b4a4": "doPay(bytes32,uint256,uint256)", +"dc94e45d": "setDistrito(uint256)", +"dc9513c1": "JustifyClaimWithWitness(uint8)", +"dc951fdc": "totalOverthrows()", +"dc9564d5": "buy(uint256,string,address,address,address,address)", +"dc9590f0": "_START_TARGET()", +"dc965479": "FooContractCall(address)", +"dc97a4f9": "getTotalUnPayedDividendsAmount()", +"dc97d962": "getInt(bytes32)", +"dc97e366": "stageIndex()", +"dc9861db": "updateMeDao(address)", +"dc988b40": "allowWorkerToContribute(address,address,address)", +"dc992aa0": "minUSD()", +"dc998901": "SaveData()", +"dc9a1535": "isPublic()", +"dc9a190e": "isAllowedTrade(address)", +"dc9a1df3": "SafecontractsTREXToken()", +"dc9ac994": "iconiqSaleOngoing()", +"dc9ae17d": "burn(bytes,address,uint256)", +"dc9b6d68": "getTimeSinceLastEvent(address)", +"dc9bb7db": "noKing()", +"dc9c6e15": "_myinitialSupply()", +"dc9d625b": "setMaintainance(bool)", +"dc9deea3": "amountPurchasedWithDecimals()", +"dc9deeff": "setPresellPrice(uint256)", +"dc9e7a87": "TransferedERC20(address,address,uint256)", +"dc9e9ba0": "allowStart()", +"dc9eb903": "Tbond1()", +"dc9ebff7": "getTotalInvestedEther()", +"dc9f0622": "transferManual(address,uint256,string)", +"dca0b866": "TwoPersonContract(address,address,bytes32)", +"dca0f3ef": "getEntryFeePaid(address)", +"dca27d5e": "setV_R4(uint256)", +"dca44b39": "setPerOneEther(uint256)", +"dca5f188": "AddressBook()", +"dca5f6b0": "jurors(address)", +"dca60034": "isMapped(string)", +"dca6058c": "canSetTransferable()", +"dca67e5d": "_createResident(string,string)", +"dca6f378": "withdrawTokensFromPool(uint96)", +"dca703d0": "LogSetQuestionFee(address,uint256)", +"dca73e6b": "getMyStores()", +"dca7bcbe": "getWords()", +"dca80bc6": "EtheremonRankBattle(address,address,address)", +"dca92eb5": "terminateLiquidation()", +"dca95419": "recoverSigner(bytes32,string)", +"dca9fd5b": "editStatus(uint256,string,uint256,uint256,int8)", +"dcaa5620": "findNextWeekday(uint256,bytes)", +"dcaabed7": "getLastDeedByAddress(string)", +"dcabf93f": "refundstate()", +"dcac652e": "setOwnerShare(address,uint256)", +"dcac69c3": "inheritedPure(uint256,uint256)", +"dcace702": "getClientLastPaidRate(address)", +"dcacf19a": "finalizeAndRestart(address)", +"dcae2cb4": "getWinningPrize(uint256)", +"dcaee066": "setStakeDisbursementAddress(address)", +"dcaeea15": "setadmin()", +"dcaf391e": "totalAirDropToken()", +"dcafa43e": "SaxoToken()", +"dcafaec2": "setCostToCreateGame(uint256)", +"dcafee05": "killBalance()", +"dcb01759": "salesEth(address)", +"dcb032ce": "addNodeGroup(string)", +"dcb04503": "testConcatStorage33Bytes()", +"dcb0a094": "tokenSetBurnFeeProp(address,address,uint256)", +"dcb12421": "isSoftcapOn()", +"dcb1c012": "ChowSale()", +"dcb27883": "CallAborted(address,bytes32)", +"dcb31b82": "isConfig()", +"dcb35d06": "getTransactionApproveCount(uint256)", +"dcb36063": "crowdsaleMinter()", +"dcb3ff58": "updateDividendBalance(uint256,address,address,uint256)", +"dcb46e38": "setWorstCaseRateFactor(uint256)", +"dcb4775e": "tokenPartner()", +"dcb4876f": "removeAddresses(bytes32[])", +"dcb5930a": "ratingContractAddress()", +"dcb6af48": "calcAverageICOPhaseKeyPrice(uint256)", +"dcb7e083": "teamTokensInitial()", +"dcb7f86f": "getWinningPayoutDistributionHashFromFork()", +"dcb814ef": "presaleWhitelistDiscount()", +"dcb951de": "pushDividends(address)", +"dcb9528e": "getBiddingInfo(address)", +"dcb9d457": "updateClientOfContractorManagers(uint256,uint256)", +"dcba03da": "MINEA()", +"dcbab608": "initialize(uint256,uint256,uint256,uint256,uint256)", +"dcbac60c": "winPrizes(uint256)", +"dcbad97b": "setEndIcoMainICO(uint256)", +"dcbc1288": "m_SMR()", +"dcbc1c05": "Deposit(address,address,uint256,uint256)", +"dcbc84ab": "coinsIssuedMkt()", +"dcbda04c": "setCrowdsaleInterface(address)", +"dcbe7cf1": "addInsuranceProduct(uint256,uint256,uint256,string,string,bytes32)", +"dcbf16d4": "Normal(uint8)", +"dcbfa406": "sendVirtTokens(address,uint256)", +"dcbfa4b7": "addSkills(bytes32[])", +"dcbfe3d5": "clearRequests(bytes32)", +"dcc0ccf3": "Dao(address)", +"dcc0e622": "setTokensForCrowdSale(uint256)", +"dcc1fd02": "angelSaled()", +"dcc23730": "setCurrency(uint256)", +"dcc279c8": "setHalted(bool)", +"dcc33e0b": "updateOperationalAddress(address)", +"dcc42e9b": "cards_blue_total()", +"dcc439cf": "updatePlayersGooFromPurchase(address,uint256)", +"dcc5237b": "FlatPricing(uint256)", +"dcc53305": "getMail(uint256)", +"dcc60128": "getProjects()", +"dcc6131c": "checkBalance(uint256[],address)", +"dcc66b4b": "addRelationshipBindingWineryOperation(bytes32,uint256,bytes32,int256)", +"dcc66cc2": "getDelegate(uint256)", +"dcc6762c": "withdrawalInitiate()", +"dcc6e7ad": "refundEth(uint256)", +"dcc71ed4": "AdvisorsAndFounders(address,uint256)", +"dcc76a92": "Ranking()", +"dcc7f6b0": "Ethen(address)", +"dcc819c8": "computeCntrAmountUsingUnpacked(uint256,uint16,int8)", +"dcc8592c": "KOCMOCToken()", +"dcc8a508": "partnerBonus(uint8)", +"dcc9a58c": "testCreateGame(string,string,bool,string,address,string)", +"dccb0c89": "test_1_someTest()", +"dccb37f1": "initialTokenBalance()", +"dccb5afb": "_emitTimeAdded(uint256,uint256)", +"dccb70a7": "setEnableAllTransfers(bool)", +"dccb98da": "SparkToken()", +"dccbb14b": "payInterests()", +"dccbfa2a": "minInvestedCap()", +"dccc6c94": "fireCloseProposalEvent(address,uint256)", +"dcccb41d": "setTransferAddress(string,address)", +"dccd4315": "startingAt()", +"dccdc893": "setNewWhiteList(address)", +"dcceaaa8": "sendShipmentTo(address,uint256)", +"dccee5b2": "posibleDividendsOf(address)", +"dccf77ce": "setCurrentBlock()", +"dccfbb62": "overthrow(bytes23)", +"dcd0fa9e": "get_arbits_min_contribution(address)", +"dcd1e670": "checkAmount(uint256)", +"dcd320a0": "bouncyCoinToken()", +"dcd3c2e5": "QLALA()", +"dcd4090b": "getStage3Start()", +"dcd4eb14": "addNewTicket(uint256,bytes32,uint256,uint256,uint256,bytes32,string)", +"dcd58e2f": "FUTURE_ME_ADDRESS()", +"dcd65479": "numPeriods()", +"dcd6561d": "currentSaleSold()", +"dcd7dd2e": "setKYCLevel(address,uint8)", +"dcd8023c": "TokenBranch(uint256,uint8)", +"dcd84f2a": "UserDestroy(address)", +"dcd93691": "retrieveOnFail()", +"dcd9c289": "getBAA(bytes32,address)", +"dcda0c8f": "requestDiplomaByNr(uint256)", +"dcda2385": "TransferSellAgentCreators(address,uint256)", +"dcda4554": "dazoToken()", +"dcda4bf3": "mOwner()", +"dcdaa35b": "mintAmount2()", +"dcdb622b": "MessageSet(string,uint256,uint256,address)", +"dcdbbe37": "lockTransferFor(address,uint256)", +"dcdc055a": "doBuy(address,uint256)", +"dcdc7254": "admin_set_shopStorePrice(uint256)", +"dcdc7dd0": "mint(address,uint256,bytes,bytes)", +"dcdd6d38": "getHolderAddresses(bytes32)", +"dcdd9af2": "DEX(address,address,address,uint256,uint256,uint256)", +"dcdda6d7": "teamUnfreeze()", +"dcde0019": "disapprove()", +"dcde835e": "NewSale(uint256,uint256,uint256,uint256)", +"dcdea898": "MintToken(address,uint256)", +"dce0b4e4": "creationFee()", +"dce11375": "emitter()", +"dce1d3c6": "addTokenPendingToken()", +"dce23e97": "getPriceValue(bytes32)", +"dce293a7": "minLength(uint256)", +"dce2b4c1": "getMarkup(uint256)", +"dce2f2dd": "Vouched(address,bytes32)", +"dce388b6": "payeePartsToSell()", +"dce4a447": "at(address)", +"dce4ae87": "DigixConfiguration()", +"dce4b34e": "submitAnswerByArbitrator(address,bytes32,bytes32,address)", +"dce4fa38": "IcoTokens()", +"dce57755": "getBlockLength()", +"dce579d1": "extendIco(uint256)", +"dce59311": "didOwnerEndCrowdsale()", +"dce59c00": "addPayee(address)", +"dce5c5a9": "norsefirePrice()", +"dce5c757": "cool()", +"dce5f277": "investorsAddress(uint256)", +"dce6417d": "DebitCoinToken(string,string,uint8)", +"dce722dd": "getJobSkills(uint256)", +"dce77d84": "getCurrentRate(address)", +"dce85216": "moveUnsoldTokens()", +"dce98784": "NiewGold()", +"dce9f6c3": "SuperConductToken()", +"dcea0a64": "ADX()", +"dcea7113": "buyOutPrice()", +"dcea80a5": "exchangeIEO()", +"dceacb93": "_createNewBadge(address,uint256)", +"dceaf74c": "youAre(address)", +"dceb3e7d": "getConfirmations(bytes32,address)", +"dcebb122": "extendSale(uint56)", +"dcec5ecc": "calcNewEmployeePoolOptions(uint256)", +"dcec7204": "EtherNeo()", +"dced2f1a": "currentCharId()", +"dceda27b": "getRegularCarSupply(uint256)", +"dcede2c3": "testIsSameSign()", +"dcedeeed": "claimIfNeededThenSteal(uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)", +"dceeeae8": "ServiceController(address,address,address,address)", +"dcef8165": "CoinBirdDEX()", +"dcefa538": "buyTokens(address,address,uint256)", +"dcefcb8e": "extractCallData(bytes)", +"dcf00b6e": "getAccreditationActive(bytes32,bytes32)", +"dcf1579c": "thirdBonusPercent()", +"dcf1a9ef": "commissionBalance()", +"dcf1df05": "showValue(address,address)", +"dcf219f2": "setLootboxFee(uint256)", +"dcf34a91": "SpendingUnblockedEvent(address)", +"dcf3fb2a": "revoke(address,address)", +"dcf537b1": "multiply7(int256)", +"dcf63591": "course()", +"dcf6a592": "isGreaterThan(uint256,uint256)", +"dcf72c10": "buyTo(address)", +"dcf73856": "generateGroups()", +"dcf7bb5c": "changeTarget(address)", +"dcf7c0d0": "TokenTrader(address,uint256,address,uint256,uint256,uint256,bool,bool)", +"dcf7c2f9": "asset(uint8,string,bytes)", +"dcf8045e": "tiersInitialized()", +"dcf8113e": "campaignEndedSuccessfully()", +"dcf86587": "_transferWallet(address)", +"dcf8f13a": "getCurrentItemPrice(uint256)", +"dcf90793": "IcoWallet()", +"dcf91ea9": "MoftakToken()", +"dcf946c2": "getAllParentIds(bytes32)", +"dcf97439": "revealX(uint256,uint256)", +"dcf988d6": "GetFeeBalance(uint256)", +"dcf9bbec": "hasVerifiedAttributeIndex(address,uint256)", +"dcf9e836": "setProviderLimits(address,uint256,uint256)", +"dcfa6ac4": "buyChamp(uint256,address)", +"dcfa9222": "transferAccessTo(address,address)", +"dcfa9cc0": "testProxyCall()", +"dcfac095": "CPX(uint256,string,string,address)", +"dcfc3b46": "getAdIdByUser(address,uint256)", +"dcfc4430": "groomAddr()", +"dcfcda2b": "changeEscrow(address)", +"dcfda779": "allowCrowdsaleAddress(address)", +"dcfe63a9": "finishPrivateSale()", +"dcfe64e9": "SHA256()", +"dcfe8eb4": "SetIPR(string,string,address,string,string,uint256,string,string)", +"dcff2f76": "createAndJoinCDP()", +"dcff5581": "NewFeeAddress(address)", +"dcfff171": "setDelegadoDeDistrito(bytes32)", +"dd001254": "nameToTokenId(string)", +"dd00182b": "dogeAddress()", +"dd004ca8": "_endEdit()", +"dd009f48": "recursiveCeil(uint256,uint256,uint256)", +"dd00a9dc": "close(uint256,uint256,bytes)", +"dd00b605": "normalCheck()", +"dd012a15": "setIt(uint256)", +"dd01f781": "goToWork(uint256)", +"dd01f9e4": "LogNeededBalance(uint256)", +"dd022727": "getGameByIndex(uint256,bool)", +"dd029560": "CoreLayer()", +"dd02e30d": "isValidTxPaymentForKWh(bytes32)", +"dd03447f": "DiamondCash()", +"dd052519": "withdrawAllPlayers()", +"dd05db9a": "amountPerRelease()", +"dd0669d4": "getZCount(uint8,uint8)", +"dd0702d6": "changeTeamPoolForFrozenTokens(address)", +"dd083f20": "teamPart()", +"dd0860a8": "IsOwner(address)", +"dd08b5c9": "disableRedemption()", +"dd090981": "setName(uint256,uint256,bytes32)", +"dd09de33": "soldTokensOnIco()", +"dd09e13c": "totalRegistrationBonusAmount()", +"dd0a1019": "isReserveGenerated()", +"dd0ac8ac": "HoldCrowdsale(uint256,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256,uint256,address)", +"dd0b1af5": "setMythexTokenAddress(address)", +"dd0b281e": "start(address)", +"dd0b7ffe": "setBuyNowPrice(uint256)", +"dd0c189c": "updateFirstExhangeRate(uint256)", +"dd0c42ab": "updateRequiredEntries(uint16)", +"dd0cf15d": "sendFund()", +"dd0cf7d4": "stopGuess(uint32,bool)", +"dd0d74ff": "IssueBank(address)", +"dd0e2373": "voterAddresses(uint256)", +"dd0e3902": "setData_6(string)", +"dd0e7832": "transferWithChange(uint256,address,address,address,uint256,uint256,bytes,bytes,bytes)", +"dd0f0808": "genEvent()", +"dd0f5a9a": "presalePiEnd()", +"dd0fa641": "winning_bets_total()", +"dd100efa": "getIcoEnded()", +"dd10d97e": "getPlayerWaiting()", +"dd11247e": "totalTickets()", +"dd114c22": "publish(address,uint256,address,uint256)", +"dd1219fd": "powerSwitch(bool)", +"dd12b51f": "getPermissionCheck()", +"dd137b5d": "toBase58(uint256,uint8)", +"dd13e20a": "forgeWeaponRarity(uint256,uint256,uint256,uint256)", +"dd13fd5f": "_acceptContribution(address,uint256,uint8)", +"dd14ab79": "updateTimestamp(bytes32,uint256)", +"dd151d1e": "pushAddressArray(bytes32,address)", +"dd155f3f": "removeAddress(uint256,address[])", +"dd15b66c": "MyWill(address,string,string,string,address,uint256,uint256)", +"dd15f993": "depositUSD(address,uint256)", +"dd16d981": "isCampaignValid(bytes32)", +"dd16fe09": "getCashBackObject(uint256)", +"dd17e151": "sendabr(uint256)", +"dd17eaec": "setMultipleRates(bytes32[],uint256[])", +"dd18b250": "getIdArray(address,address,string,string)", +"dd192de7": "affiliatesAddress()", +"dd193e7b": "addPerSell(uint16,uint256,bool)", +"dd1956b0": "InfiniviToken()", +"dd1a293a": "burnTokensFrom(address,uint256,uint256)", +"dd1a56a7": "WellnessToken()", +"dd1a5f0d": "_grandPVPLoserReward(uint256)", +"dd1a68c1": "report(uint16,uint16,uint8)", +"dd1aa549": "PARTNERS_WALLET()", +"dd1b1928": "getInputSize(uint256)", +"dd1b6137": "push(uint256,uint256)", +"dd1b7a0f": "nonFungibleContract()", +"dd1b89c6": "freezeExists(uint256)", +"dd1b9c4a": "POOL_FEE()", +"dd1bb3d1": "confiscateBalance(address)", +"dd1bb6f5": "TokenICOGAT()", +"dd1c35bc": "recycle(uint256)", +"dd1cdf84": "keybasePubURL(string)", +"dd1d5e64": "incGenLabFight(uint256)", +"dd1dbc3a": "calcUnMaskedEarnings(uint256)", +"dd1dc0ad": "RequestSale()", +"dd1dffb7": "getFundsCollected()", +"dd1e2651": "getUserKey(uint256)", +"dd1e4e11": "_getRandom(uint256)", +"dd1ee3d7": "whaleAddress()", +"dd1eee44": "couponTokenSaleAddr()", +"dd1f969b": "PURCHASE_AMOUNT_RATE_REFERENCE()", +"dd1fc642": "_approvedFor(address,address,uint256)", +"dd20a53e": "createTournament(uint256)", +"dd215410": "getWinnersIndex(uint256)", +"dd217ce1": "getAddusers()", +"dd218ff2": "addPreIcoPurchaseInfo(uint256,uint256)", +"dd21f395": "t_3rd_StageEnd()", +"dd22148f": "investedSumOnPreIco()", +"dd228801": "setAffiliateRate(uint256,uint256)", +"dd234dc7": "PixelBought(uint256,bytes32,uint256,address,address)", +"dd23795f": "bobMakesEthDeposit(bytes32,address,bytes20,uint64)", +"dd238603": "unsetWhitelist(address)", +"dd2407d3": "sendOnlyHash(bytes32)", +"dd242fa4": "staff_4()", +"dd253cd0": "setTransferMinimumFee(uint8)", +"dd2594af": "changeTokenApproves(uint256)", +"dd27efa0": "_packPVPData()", +"dd27fcad": "EternalCoin(uint256,string,string)", +"dd280c7a": "requestDetachmentOnPause(uint256)", +"dd288173": "doStore(uint256,uint256,bytes32)", +"dd28d12b": "ZILINGGOSupply()", +"dd28d14d": "getMembersInGroup(uint256)", +"dd294142": "institutionTimeLock()", +"dd2a07a0": "LCS()", +"dd2ac276": "genToLuck(uint256,uint256)", +"dd2ad311": "scheduleCall(bytes,uint256)", +"dd2bcae0": "DeviceIsDeactivated(address)", +"dd2c4d3d": "AdoptionRequestCancelled(bytes5)", +"dd2c888e": "balanceHistory(address,uint256)", +"dd2d2a12": "minimum(uint256,uint256)", +"dd2d4ea0": "tokensMain()", +"dd2e0ac0": "unlockToken(uint256)", +"dd2f4ebd": "getNumberOfGames()", +"dd300c6d": "getSettingChangeConfirmationCount(uint256)", +"dd301057": "noOfTiers()", +"dd3032bc": "RoundCHardCap()", +"dd30651f": "activateUser(address,uint256)", +"dd3129a9": "calculateAllBuyBackSum()", +"dd31f462": "clearDebt()", +"dd321018": "levelItemClass()", +"dd324fe7": "PieceStandardToken(uint256,string,uint8,string)", +"dd3260fc": "checkOpenTimer()", +"dd32858e": "withdrawWinner()", +"dd34abd3": "transferDirectorA(address)", +"dd34c9a3": "capFlex()", +"dd34dab8": "startTimeOfSaleLot4()", +"dd34e129": "PriceTest()", +"dd34e7be": "Vault(address,uint256,uint256)", +"dd365b8b": "pwn()", +"dd36b59c": "getPlanetOwner(uint256)", +"dd36e18b": "ContractStatus()", +"dd37ad1f": "calculateValueMantisseTrick(int256,uint64)", +"dd37be12": "mod(uint32,uint32)", +"dd3840ef": "PRIVATEPLACEMENT()", +"dd386239": "manuallySetNumRewardsAvailableForChildAddress(address,uint256)", +"dd397e03": "preIcoTarget()", +"dd3b014c": "getLatestVersion(bytes32)", +"dd3bd008": "getReadyTime()", +"dd3c407f": "_set7()", +"dd3ccd84": "percentForHelpCoin()", +"dd3d0bee": "changelp18(address)", +"dd3e5f47": "_sharesValid(uint256,uint256)", +"dd3ef6a6": "deathData_v12()", +"dd3f2893": "_processTokensPurchase(address,uint256)", +"dd3f8608": "FloatGameToken(bytes32,address)", +"dd3f9526": "_controller()", +"dd3fa136": "ship(string)", +"dd3ff4f6": "sendFeeToWallet(address,address)", +"dd413da0": "Vendi(uint256)", +"dd4198f4": "getScore(uint8,bytes32)", +"dd41cc2f": "getQuestionCount()", +"dd41e1c7": "redeemFrom(address,uint256,string)", +"dd420fc5": "auditorComment()", +"dd4253f7": "MeosunToken()", +"dd42c228": "totalLockedFund()", +"dd42faf7": "window3TokenExchangeRate()", +"dd4314b2": "unique_players()", +"dd443c7b": "cancelMarkets(uint256)", +"dd449a83": "allower()", +"dd44a15c": "allocateTokensForContributor(address)", +"dd450d4e": "transferFromBankToAccount(bytes32,uint256)", +"dd457c7f": "balancesSet()", +"dd45e247": "getUserListSize()", +"dd462e2d": "withdrawAmountHashing(uint256,uint256)", +"dd467064": "lock(uint256)", +"dd473d2b": "withdraw_all()", +"dd47fe15": "sendToTarget(address,address,address,address,uint256)", +"dd48087f": "balanceOfContract(address)", +"dd486c35": "ownerWantMyEther()", +"dd489e44": "setSystemStartingPriceMin(uint256)", +"dd48d911": "totalSellOrders()", +"dd49756e": "depositTokens(uint256)", +"dd49f1c8": "BooMToken()", +"dd4a055b": "buySale(uint8,address)", +"dd4a8361": "setWhitelistEntries(address[],bool)", +"dd4a8f61": "contractorManager()", +"dd4aac73": "SELLER_STEP_2_GET_PASS()", +"dd4aeb92": "manageMinting(bool)", +"dd4bc101": "weightOf(address)", +"dd4bd4b7": "getProjectMilestoneStartWindow(bytes32)", +"dd4c97a0": "approveNode(address)", +"dd4dfb62": "kUnit()", +"dd4e6993": "leerGat()", +"dd4e8823": "poiLockup()", +"dd4f1f2a": "multipleHomocide()", +"dd4f5f0f": "withdrawBBO()", +"dd4f8f74": "roundStartTime()", +"dd506e09": "changeRound()", +"dd50e9d4": "clearSummonNum()", +"dd510361": "setTransformTarget_pool(address,uint256)", +"dd5108d1": "addressToTotalDonationAmount(address)", +"dd510e98": "newLockUpAddress(address)", +"dd515cdb": "checkVotingForStartPayment()", +"dd51faa2": "setGas(uint256)", +"dd523559": "devuelveAddressUsuario(bytes32)", +"dd5244b4": "testTryProxyCallWithValue()", +"dd53c301": "mintContract(address,address,uint256)", +"dd54291b": "tokenCap()", +"dd54a62f": "content(string)", +"dd54cc0c": "advBtyWallet()", +"dd550958": "getOwnerAddress(uint256)", +"dd55f11b": "deleteCitizen(uint256)", +"dd55fba0": "createSecondPromoCollectible(uint256,address,uint256,address)", +"dd563726": "GoingGems(uint256,address)", +"dd565e76": "pushDecoration(uint256)", +"dd57d5c5": "setTrust(address)", +"dd585e7b": "newincomelog(uint256,string)", +"dd5891b3": "join(address,string,string)", +"dd58f5d9": "isIcoFinish()", +"dd592a32": "topUpAmount()", +"dd595328": "untransform(uint16)", +"dd59c954": "mintBatch(bytes32,bytes32,bytes32,bytes32,bytes32,address)", +"dd5a4efd": "GameRefunded(uint256,uint256,uint256)", +"dd5a612c": "getCashPrior()", +"dd5a7f40": "getContractCreationTxGasprice()", +"dd5ac448": "payoutReferrer()", +"dd5b23df": "transferBond(address,uint256)", +"dd5b29b7": "toB32(uint256,bytes)", +"dd5c2678": "KappyKoin()", +"dd5ca673": "setMintRequestStringMap(uint256,int256,string,string)", +"dd5cba71": "CHXTokenSale()", +"dd5dcd52": "findActiveRange(address)", +"dd5dd552": "_cancelOrder(address)", +"dd5dd8f2": "timeGap()", +"dd5ddfe8": "setPermission(address,uint8)", +"dd5df59c": "nonEtherBuy(address,uint256)", +"dd5e403c": "IcoFund()", +"dd5e5cb5": "changeMaxDrawingTime(uint256)", +"dd5e8410": "jackpotMedium()", +"dd5ea752": "burnAndConvertToQUA(uint256)", +"dd5f63fd": "niceguy3()", +"dd5f9a22": "STSTEST5()", +"dd604fcb": "EgyptianPound()", +"dd60b394": "giveFreezePermission(address[],bool)", +"dd60c898": "participantsCount()", +"dd611e8d": "Setter(uint256)", +"dd616a45": "ZeroCap()", +"dd62b1a0": "LalaToken()", +"dd62ed3e": "allowance(address,address)", +"dd62f6f3": "getPayoutDistributionHash()", +"dd63133a": "onPurchase(uint16,uint16,uint8,address,uint256)", +"dd6350a0": "withdrawContributed()", +"dd63f7d0": "functionReturningValue(bytes32)", +"dd644f72": "basisPointsRate()", +"dd66111d": "gameRoundEnd()", +"dd67a360": "OrderLifeCycle()", +"dd681e51": "ecosystemGrantsReserveWallet()", +"dd68b386": "TransactionRefundedAfterExpiry(uint256,uint256)", +"dd6996a3": "LOL3()", +"dd6ad764": "withdraw(uint8,address)", +"dd6afdfe": "Chou(uint8)", +"dd6b2fc6": "isBarCodeData(bytes32)", +"dd6b996d": "endDividendPool()", +"dd6c1394": "GazeCoinCrowdsaleWhitelist()", +"dd6e66d0": "tokenHoldersTotal(address)", +"dd6e8e6a": "_markRedemptionFulfilled(bytes32)", +"dd6ed59a": "initSubPayees(bytes32,address[],int256[])", +"dd6f0f19": "ApplicationIsInDevelopment()", +"dd719d2c": "airDrop(address,address,address[],uint256[])", +"dd7202d8": "getQuantum(uint256)", +"dd722127": "adminRemove(address,string)", +"dd7221e8": "LogPause(bool)", +"dd727ea6": "runJackpot()", +"dd729530": "add_shield(uint16)", +"dd72ae4e": "availableICO_w1()", +"dd73d17b": "getComment(address,address)", +"dd751310": "isRegisteredPublicKey(uint256)", +"dd75e7ff": "getENow()", +"dd75ecce": "getVestingAmount(address,uint256)", +"dd76d2fa": "setIdArray(address,uint256,string,string,address[])", +"dd787875": "setupSale(uint256,uint256,address)", +"dd791ce5": "tokenDec()", +"dd796b07": "indexOfCardAddress(address)", +"dd79cc6a": "secretBidCount()", +"dd79e33e": "splitIdentifiers(string)", +"dd7a1722": "accountLocked()", +"dd7aabc8": "_transferHelper(address,uint256)", +"dd7b3e97": "buyoutsEnabledFromTimestamp()", +"dd7b3f26": "bytes32ToBytes(bytes32,bytes32)", +"dd7bff82": "removeCandidates()", +"dd7d168a": "getEthBullet(string)", +"dd7d6bb0": "getLpAskPrice()", +"dd7db870": "addFreeVineyard(address)", +"dd7dde04": "maxTeamSize()", +"dd7e11be": "InternationalPaymentToken()", +"dd7eba7a": "ValentineRegistry()", +"dd7f2225": "MiCarsICO()", +"dd7f88ee": "date_start()", +"dd80f2a6": "Vibrancier()", +"dd817963": "lastBlock_f0Hash_uint256()", +"dd819721": "setNFTbyTokenId(uint256,string,bool)", +"dd838808": "endMigrationPeriod()", +"dd83a303": "cancelMortgage(uint256)", +"dd83c825": "backersAddresses()", +"dd8432fe": "getRemainingTokensForSale()", +"dd847dfe": "get_contract_money()", +"dd84acaa": "addressesAllowed(address)", +"dd859739": "SetBeneficiary(string,string,string,string,string,string,string,string,string,string,address,string)", +"dd85b1dd": "setServiceProvider(address)", +"dd85b82e": "EthealWhitelist(address)", +"dd8617ca": "payether(address,uint256)", +"dd86210a": "medalSymbol()", +"dd864883": "changeApprovalCore(address,uint256,uint256)", +"dd86f719": "COMMUNITY_BOUNTY_HOLDER()", +"dd87c9f0": "exeStatus()", +"dd897767": "isRealWorldPlayerMintingEnabled(uint128)", +"dd898fa2": "MinterStorePoolCrowdsale()", +"dd89daa5": "getBBFarmID(bytes4)", +"dd8a0c56": "vacate(address)", +"dd8ad12a": "executeAppReturn(bytes32)", +"dd8b0ff6": "rmax(uint128,uint128)", +"dd8bd8cb": "Patient(address)", +"dd8bf1f5": "setDistrict0xNetworkToken(address)", +"dd8c8855": "addWarehouse(uint256,uint256,bytes32)", +"dd8d11e2": "isValidSubscription(bytes32)", +"dd8d149d": "tokenCrowdsaleRate()", +"dd8d1cef": "totalUserCampaigns(address)", +"dd8d4c40": "getCallers()", +"dd8e668c": "FUND_FRAC_BOT()", +"dd8ee602": "log(bytes,uint256)", +"dd8ef66b": "cancelTrade(address)", +"dd8f3195": "HyperChipsToken()", +"dd8fee14": "regulator()", +"dd905097": "organisationWallet()", +"dd90c403": "getAccountFeed(address,uint256,uint256)", +"dd9180ea": "tokenReservationAllocated()", +"dd91f1f5": "toggleAuthorization(address,address,bytes32)", +"dd924594": "distributeAirdrop(address[],uint256[])", +"dd92a8b0": "confirmSell(uint256)", +"dd932c5b": "voteEnd(uint256)", +"dd93890b": "setMeta(uint256,bytes32,bytes32)", +"dd939155": "recordUpdate(address,uint256,int256,bool)", +"dd93c74a": "setInactivityReleasePeriod(uint256)", +"dd946033": "right81(uint256)", +"dd952089": "getTaxDataSignatures()", +"dd9546b1": "minInvestments()", +"dd9555f1": "withdrawBidForCollectible(uint256,uint256,int256)", +"dd955c44": "sellEth(address,uint256)", +"dd955d4c": "rawTransfer(address,bytes32)", +"dd9568b0": "messageInfo(uint256)", +"dd96440e": "DDD()", +"dd967b0b": "refundLoan()", +"dd9815a2": "claimPlayerProfit()", +"dd982bdf": "FaceBookCoin()", +"dd999ade": "cleanUpRounding()", +"dd9a76ff": "pay(address,address,uint256,uint256)", +"dd9a9e2c": "CORReserveAccount()", +"dd9bc47e": "finish(address,address)", +"dd9bf998": "authorizeTradingAccounts(uint256)", +"dd9bfb04": "bakanceOfBeer(address)", +"dd9cfc4b": "tokenSalesByAsset(address,uint256)", +"dd9d687e": "namehash(bytes32)", +"dd9dd688": "calcStopPrice()", +"dd9e3848": "NewHolder(address)", +"dd9e4094": "makeMemChange1(uint256,uint256,uint256,int256)", +"dd9e7b1b": "max_raised_amount()", +"dd9ea299": "getLastDepositId()", +"dda0268d": "queryBetUnit()", +"dda0c1d6": "adminAmendBallot(uint32,string,uint256,uint256)", +"dda0e4ba": "finishAllGames()", +"dda0f1bb": "sendToTicker()", +"dda13903": "GoldOwner()", +"dda2d923": "setIcoAddress(address,address)", +"dda3342b": "ReplicatorFactory()", +"dda342bb": "list(address,uint256,uint256)", +"dda38380": "CFTRAD()", +"dda3baff": "showlevel(address)", +"dda44b10": "buyRecipient(address,uint8,bytes32,bytes32)", +"dda477fd": "walletTransfer(address)", +"dda4fa8f": "setReserveWallet(address)", +"dda5062c": "userIds()", +"dda51424": "right80(uint256)", +"dda55b18": "GxTraders(address)", +"dda5d5cb": "saosao2()", +"dda5d799": "PRT()", +"dda6020b": "freezeMintUntil()", +"dda61c00": "getIsSecurityWalletReg(address)", +"dda63359": "setSellToContract(bool)", +"dda69410": "add(address,uint16,uint8,uint8)", +"dda6abb8": "sendToVestingContract()", +"dda6c3ce": "checkWinning(uint256)", +"dda6c7cf": "setActiveUserListLength(uint256)", +"dda72292": "BONUS_TIER_6_LIMIT()", +"dda81c15": "TIER_4_BUYIN()", +"dda89912": "setExchangeDetails(bytes32,bytes32)", +"dda943d6": "maxSet()", +"dda9939c": "Store(address[])", +"dda9f1a3": "HODLRegistration()", +"ddaa26ad": "START_TIME()", +"ddaa4c48": "granularPreallocate(address,uint256,uint256)", +"ddaa7e02": "GetTickSize3(uint256)", +"ddaaff27": "generateSection()", +"ddac6654": "validUntil()", +"ddad2ffe": "newNode(address)", +"ddad3ca1": "tokenMaxCap()", +"ddae2e26": "__save128(uint256[])", +"ddafaf4d": "reclaimNtvuEther(uint8)", +"ddb0fdc0": "addAvailablePack(uint256,bytes4)", +"ddb12a35": "countPayOrder()", +"ddb141c2": "execute_transfer(uint256)", +"ddb1bdc8": "credit(address,uint256,uint256)", +"ddb1ede9": "canceledBookingfc(uint256)", +"ddb22537": "withdrawDeadBids()", +"ddb25d71": "GBPproxy()", +"ddb31cea": "TEAM_TOKENS_LOCK_PERIOD()", +"ddb4897a": "NitroCoins()", +"ddb49f98": "SpiceNinja()", +"ddb5b3ac": "SellTokens()", +"ddb62333": "readTaskState(string)", +"ddb6af4c": "setTimeStamp(uint256,uint256)", +"ddb6e116": "vote(uint16)", +"ddb72188": "chAirDropLimit(uint256)", +"ddb792a0": "admin_from_To_transfer(address,address,uint256)", +"ddb863be": "multiPartySend(address[],uint256[],bytes)", +"ddb8b099": "itemNameOf(uint256)", +"ddb8f090": "GlobalTransfersUnlocked(bool)", +"ddb9341b": "SetBuildingDataArray(uint256[])", +"ddb9769c": "_settingsApplied()", +"ddba8c45": "verifyEscrow(uint256,address,address)", +"ddbb4ab4": "_bytes32ArrayToString(bytes32[])", +"ddbbc35c": "searchByName(string)", +"ddbcb5cb": "registerAs(address,bytes32,address)", +"ddbcb5fa": "MIN_AMOUNT()", +"ddbcf3a1": "ensNode()", +"ddbdf242": "traders()", +"ddbe7c41": "NeverEndingApp()", +"ddbe8f09": "voteEnd()", +"ddbe92d3": "setBondFundAddress(address)", +"ddbf5856": "completeLottery()", +"ddbf5c8f": "checkFee(uint256,uint256)", +"ddbfbdbf": "ETHERKUN()", +"ddbfd63e": "AddGoods(uint32,uint32,uint256,uint32,uint32,uint32,uint32,uint8,uint8,uint8)", +"ddc002e8": "TokenSold(address,uint256,uint256,bool,bool)", +"ddc0db14": "AmountBonusPricing(uint256[])", +"ddc12019": "_triggerCooldown()", +"ddc23059": "SchemeRegistrar()", +"ddc23ddd": "erc165InterfaceSupported_NoCache(address,bytes4)", +"ddc33450": "MNLTGUNE()", +"ddc35950": "setOwner(uint32,address)", +"ddc3e344": "_sellPutToClose(uint256,uint256,uint256,uint256,address)", +"ddc4aacf": "token4Gas()", +"ddc53c2c": "lastFreeBlock()", +"ddc541dd": "publisher(address)", +"ddc63262": "harvest(uint256)", +"ddc645f8": "CollateralReturned(uint256)", +"ddc6a171": "allowance(address,uint256)", +"ddc6f83e": "setIdent(string)", +"ddc6ffaa": "SecuredLedgerToken()", +"ddc86af6": "extractById(int128)", +"ddc8bb54": "PriceOf1000TokensInUSD()", +"ddc8d7a6": "_removePauser(address)", +"ddc983f2": "bonusEnds50()", +"ddca15de": "ServiceContract()", +"ddca337e": "SetMaxChequeValue(uint256)", +"ddca3f43": "fee()", +"ddcb1a94": "serviceBurn(uint256)", +"ddcbf794": "addScore(uint256,uint256)", +"ddcd3681": "getRemainingTrialDrops(address,address)", +"ddcd7ee9": "lastJson()", +"ddcd8763": "requestBuywithETH()", +"ddcd887b": "testMiddleTranchNotExact()", +"ddceafa9": "recovery()", +"ddcfa217": "newRecurringBillingContract(address)", +"ddd1002e": "LogStart()", +"ddd113f4": "numMarriages()", +"ddd1527b": "transferFromOwner(uint256)", +"ddd1b67e": "getCurrentMonth()", +"ddd35de8": "tokensPerBTC()", +"ddd41ef6": "transferDirector(address)", +"ddd505f6": "addTransaction(address,uint256,uint256,string,uint256,bytes)", +"ddd53cc5": "setupICOPrices(uint256,uint256,uint256,uint256)", +"ddd57872": "setTimeStamp(string)", +"ddd5e1b2": "claim(uint256,address)", +"ddd5e68b": "transferEthersToOwner(uint256)", +"ddd641b0": "tierName(uint256)", +"ddd6d79a": "remainingWithdraw()", +"ddd7c879": "claimWei(uint256)", +"ddd81f82": "registerProxy()", +"ddd83259": "_normalDistribution(uint256,uint256)", +"ddd85dd8": "Freda()", +"ddd9537d": "getUsdEthExchangeRate()", +"ddda66db": "setMerchantWallet(address)", +"dddac167": "VotingFinished(uint256,uint256)", +"dddaf901": "wcapToken()", +"dddb983b": "testFailCreateWithParentsForeignNotInUse1()", +"dddbb753": "getAdsCount()", +"dddd3594": "ConsentDirective(address,uint256)", +"dddd3de8": "getvalid()", +"dddf31f1": "lastClaims(address)", +"dddf33cc": "offerCatForSale(uint256,uint256)", +"dddfb2f2": "buyEIT()", +"dddff84c": "StandardCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"dde0523f": "changeVisitCosts(uint256,uint256,uint256,uint256,uint256,uint256)", +"dde05a67": "TinaCoin()", +"dde070e8": "getClaimAmount(address)", +"dde0d085": "mathTransfer(address[],uint256)", +"dde107c2": "stampIndextotransactions(uint256)", +"dde1589c": "icoTokensPrice()", +"dde26ec9": "createGrant(address,uint256,uint256)", +"dde27e29": "distributeTokens2(address[],uint256[])", +"dde2b332": "setTransferFrozen(bool)", +"dde2fc22": "DLCToken()", +"dde37357": "MultiOwner(address[],uint256)", +"dde3ae6d": "changeAssetOwner(address)", +"dde41aa9": "canonizedRegistry()", +"dde42067": "paidTokensOf(address)", +"dde43cba": "REVISION()", +"dde49979": "unlockFor(address)", +"dde4a70b": "getSell(uint256)", +"dde4dc8e": "Show_Patient(uint256,uint256)", +"dde4f41a": "releaseMultiWithStage(address[],address[])", +"dde5a65d": "purchase(address,address)", +"dde68e2e": "refundETHToCustomer(address,uint256)", +"dde6b340": "calculateLoanerInterest(uint256)", +"dde6e256": "getCarProduct(uint32)", +"dde6f449": "GlobfoneCoin()", +"dde6f484": "setMainAccount(uint256,address)", +"dde7af32": "warriorGold()", +"dde82c2d": "coinsRemaining()", +"dde8535f": "getMemberStatus(address)", +"dde8b7ac": "setFeeAbsMaxGlobal(uint256)", +"dde8c8d6": "getUserVote(uint256,uint160,bool)", +"dde8dab2": "BEERCOIN()", +"dde9394c": "returnOwners()", +"ddea6df3": "isHumanToken(address)", +"ddeae033": "claimFor(address)", +"ddeae8ca": "markDone(uint16)", +"ddeb5094": "pause(bool,bool)", +"ddeb63b5": "setEscrowAddress(address)", +"ddec280e": "fetchAssetPrice(address)", +"ddec60d9": "Parents()", +"ddecc5d9": "getTradingTime()", +"dded49cb": "setadmin(address)", +"dded5dd8": "isAdminForGame(uint256,address)", +"ddedfc19": "TheLightToken()", +"ddeed1a4": "projectFailed(uint16)", +"ddef6421": "adventureContract()", +"ddef880f": "getDeepInfo(uint256)", +"ddef8f29": "HOTTO()", +"ddefdb90": "fillOrKill(address[5],uint256[6],uint256,uint8,bytes32,bytes32)", +"ddf0432f": "startPresale(address,uint256)", +"ddf063c8": "collectedEth()", +"ddf08ebc": "checkCaptain(address,uint32)", +"ddf09e89": "NelsonChenTestToken()", +"ddf0c070": "addBalances(address[],uint256[])", +"ddf187b0": "dogFight()", +"ddf1be5f": "setIII_R1(uint256)", +"ddf252ad": "Transfer(address,address,uint256)", +"ddf25ce9": "renExBalancesContract()", +"ddf27259": "LogCertificationDbUnRegistered(address)", +"ddf29872": "teamvalue()", +"ddf2d8cd": "setDesignatedReportReceivedTime(uint256)", +"ddf31394": "lockToken(address,uint16)", +"ddf33cc7": "TEAM_TOKENS1()", +"ddf34ab0": "getAgreedCompletionDate(bytes16,address,address,uint256,uint256)", +"ddf41bf4": "migrateHolders(uint256)", +"ddf4a032": "changeSettings(uint256,uint64,uint8,uint8,uint8,uint8)", +"ddf4b011": "TIME_UPDATE(bytes32)", +"ddf5cc29": "ActivationWithdrawal(address[2],uint256[8],uint256)", +"ddf6e5a0": "GEN_0_LIMIT()", +"ddf7e1a7": "tokenToTokenSwapInput(uint256,uint256,uint256,uint256,address)", +"ddf9d613": "getCustomBuyerLimit(address,address)", +"ddfa3a60": "getCrystalWeights()", +"ddfa53e4": "hardcapInWei()", +"ddfafa96": "getRates(address,uint256)", +"ddfb8b9b": "Start_quiz_qz(string,string)", +"ddfc50df": "setByte(bytes1,bytes8,bytes32)", +"ddfd72f8": "setHashByWriter(bytes32,address,bytes32)", +"ddff0346": "_getFechHpbBallotAddrInterface()", +"de002aa6": "pushWork(uint256)", +"de0099a3": "heldTokens(address)", +"de009e7f": "offerToChannel(address,uint256)", +"de00a094": "controlled()", +"de0123bf": "AddMultipleAddresseseToWhitelist(address[])", +"de01ec28": "setStateMigrated()", +"de024515": "DEMT()", +"de02ae96": "bytes32ToBytes(bytes32[],bytes32)", +"de02f1fc": "PER_ACCOUNT_ADDITIONAL_TOKENS()", +"de0498d3": "Date_Started()", +"de05905b": "doSetName(bytes32)", +"de06b7f4": "doTakerPayment()", +"de06ef49": "whaleStartTime()", +"de07a886": "DEFROST_MONTH_IN_MINUTES()", +"de080401": "SethTokenPurchase(address,address,uint256,uint256)", +"de089aee": "userMaximumPurchaseAmountNg(address)", +"de08a6d8": "metaTransfer(address,uint256,bytes,uint256,uint256)", +"de08c364": "removeAdminister(address)", +"de08f188": "storageStep()", +"de090b25": "LockInExpiry()", +"de0a1c5d": "changeVuePayETHDestinationAddress(address)", +"de0a7cc6": "purchasedTicket(address)", +"de0b18f2": "getAssetAttachment(uint256)", +"de0b5af2": "BONUS_COEFF()", +"de0bffc2": "GlobaLiquids()", +"de0cf58b": "callerAllocationStartBlock()", +"de0d0802": "getWeightAndUpdate(address)", +"de0d50e4": "incGen0PresaleCount()", +"de0d7083": "Alter_MediatedTransaction(uint256,bool)", +"de0e9a3e": "unwrap(uint256)", +"de0f2b49": "setCertifierStatus(address,bool)", +"de0f725d": "removeContract(address,address)", +"de0fe922": "addHashType(string)", +"de0ff7c5": "getEther()", +"de1079b3": "vestFromTime()", +"de10f04b": "eraseNode(bytes32[])", +"de117fb1": "buyDirector(uint256)", +"de11823a": "GoldAllocation(uint256,uint256)", +"de11892b": "isAuthorized(address,bytes32)", +"de11c94a": "factoryContract()", +"de121554": "addLike(uint256,bool)", +"de12b52c": "getTopBlock()", +"de12b839": "GetPie()", +"de13bec6": "getApiByName(string)", +"de1446e8": "view54()", +"de14bbf7": "randomGen(uint256,uint256)", +"de14c818": "approvePayment(uint256)", +"de14d323": "confirmAlice(uint256)", +"de14e54d": "setActivity(address,bool)", +"de150d5d": "throwSlammer(bytes32,bytes32,bytes32)", +"de154352": "getBlocksTillMattew()", +"de154761": "upgradeManager()", +"de1565fe": "MainnetProtocol()", +"de1682a5": "PTLC()", +"de170570": "getTiers()", +"de176643": "_advisorsSupply()", +"de179108": "allSaleCompleted()", +"de17dfa9": "setCryptaurToken(address)", +"de1881a8": "processingFee()", +"de18af92": "getEmployerInvoices(address,uint8)", +"de18bec6": "BeneficiaryChange(address)", +"de18dd18": "refuseSale(address[])", +"de192a20": "ARChain(uint256,string,string)", +"de1955df": "reclaimByReceiver(address,bytes32)", +"de1ac2fd": "checkOperator(address)", +"de1b0486": "withdrawFrom(address)", +"de1b27f5": "SALE_ALLOCATION()", +"de1bee1b": "dogexSupply()", +"de1c237f": "getarg_2_input()", +"de1c78fb": "batch_send(address[],uint256)", +"de1c7f70": "getEns(address)", +"de1c977a": "testPreDistribute()", +"de1e46e6": "placeBet(uint256,uint256,uint8,int256)", +"de1e8de8": "MINIMAL_INVESTMENT()", +"de1eb2d0": "withdrawQuantity()", +"de1f892a": "adjust_ERC223Transfer(bool)", +"de1ff163": "isCurrentOrPastAccountReader(address,address)", +"de2037a7": "createSensor(uint256,uint256,uint256)", +"de20555f": "getGoldStatusCustodianverify(address)", +"de20bc92": "Stake()", +"de2111e2": "got()", +"de217625": "setAssets(address[])", +"de2184bf": "voting(address,uint256,string)", +"de21cd78": "allItems(uint256,uint256)", +"de21dc6f": "fundit(address)", +"de2237d3": "getVotersLength()", +"de223f63": "transferPauseOperator(address)", +"de242ff4": "allowance()", +"de24d3ba": "WEBCOIN()", +"de255778": "relocationActive()", +"de26bbb2": "percentage(uint256,uint8)", +"de271ee0": "depositAngelInvestmentEth()", +"de272835": "advisorIssue(address,uint256)", +"de2831f2": "getRemainingBonus()", +"de283b21": "current_transferred()", +"de28431c": "priceLastUpdate()", +"de287359": "acl()", +"de28ba54": "MorpheusTokenFAKE()", +"de28fc1d": "icoSender()", +"de2904de": "CapUpdated(uint256,bytes32,uint256)", +"de292789": "getResult()", +"de2994c4": "unfreezingTimestamp()", +"de2a4a43": "RLLToken(uint256,string,string,address)", +"de2a9778": "createProxy(address,address,uint256,uint256,uint256,uint256,uint256,address,uint256,string,uint8,string,bool)", +"de2b2cd2": "changeDonor(address)", +"de2b4473": "setSaleDepositsAllowed(bool)", +"de2c1d09": "SendERC20ToDex(address)", +"de2c1e85": "_packWarriorCommonData(uint256,uint256)", +"de2c75ee": "getIncidentByUUId(bytes32)", +"de2e6136": "sendGift(address)", +"de2ed893": "totalDonations()", +"de2f827e": "saveChickenOf(address)", +"de301e8c": "getRTEBonusTokenVaultBalance()", +"de3039d2": "findPrecedingPrice(uint256)", +"de306341": "createMineForToken(uint256,uint256,uint256,uint256,uint256)", +"de31482a": "tokenHasDistributed()", +"de318242": "Mani()", +"de326c1e": "movePatentData(uint16[],address[],uint256[],bool[],uint256[],uint256[],uint256[])", +"de329396": "ownerSetMaxProfit(uint256)", +"de32abd1": "mulExp(uint256,uint256)", +"de33d8d8": "Print(string,address)", +"de341661": "unpause_2()", +"de346a40": "whiteListERC20(address)", +"de34bacd": "cardPrice()", +"de35a696": "Child(string,address)", +"de35be81": "submitSellOrder(bytes32,uint256,uint256)", +"de377015": "maxIcoTokensSold()", +"de37ca12": "MyFirstSmartContract()", +"de37e977": "thisTokenBalance()", +"de38460b": "nextSaleAgent()", +"de3849be": "owner_AirdropUpdateToken(address[],uint256)", +"de385438": "calculateEmission(uint256,uint256)", +"de38a5f4": "verifyKYC(bytes32,bytes32,bytes32,bytes32,bytes32)", +"de38c771": "setFundingAmount(uint256)", +"de38eb3a": "MAX_TIMEOUT()", +"de3989f5": "CalledA()", +"de39acea": "get32(bytes,uint256)", +"de3a8511": "teamKeepingSupply()", +"de3ab731": "evaluateAfterQuery(bool,uint256)", +"de3b5061": "updateBuyType(address,address,int256)", +"de3b653a": "IsReleaseToken()", +"de3bcb97": "takeAll()", +"de3bec59": "baseowner()", +"de3d0290": "gwtoken(uint256,string,uint8,string)", +"de3dac84": "freezeAccount(uint256)", +"de3e3492": "setRebase(uint256)", +"de3ea04a": "SAGAToken()", +"de3f18e2": "winningTeam()", +"de3f26eb": "oracleRegistryContract()", +"de3fbdee": "addRate(uint256,uint256)", +"de400629": "createListingWithSender(address,bytes32,uint256,address)", +"de4125b0": "addWineryOperationEndorsement(string,uint256,bool,string,string)", +"de4138de": "getCurrentStateId()", +"de41e1a1": "assignOwner(address[],uint256,address)", +"de42dcc9": "LuckCashToken(uint256)", +"de42f045": "auditTimeoutInBlocks()", +"de43844b": "fixedExp(int256)", +"de44a17e": "setNewModifier(address)", +"de44bf01": "getCreateUniverseParentUniverseValue()", +"de459c9b": "RATE_SALESTAGE6()", +"de469071": "hashBetSum()", +"de47864c": "testSafeAdd(uint256,uint256)", +"de47e0bf": "withdrawBaseETH()", +"de48ff52": "updateState(int128,uint128,uint8,bytes32,bytes32,bool)", +"de494190": "getCommentIdByAd(uint256,uint256)", +"de49bd54": "BurnTokensAndSetAmountForNewBlockchain(address)", +"de4b3262": "setBasePrice(uint256)", +"de4b3a73": "defaultText()", +"de4b4073": "devSend()", +"de4b45fa": "finalizeReclaim()", +"de4b51eb": "setTrustedAddress(address,address,bool)", +"de4c0574": "migrateAllowancesFromLegacyRep(address[],address[])", +"de4cd094": "convertToDecimal(uint256)", +"de4d51a5": "setSaleType_Airdrop(uint8,uint8,uint32,uint8,int256,uint256,int256)", +"de4f4d2b": "totalEthHandled()", +"de4f9383": "transferEtherFrom(address,address,uint256)", +"de5007ff": "sweepMsg()", +"de50f2fe": "KycClaveChain(address)", +"de5101af": "timestampToDate(uint256)", +"de51f57e": "setValueStep3(uint256)", +"de52ccbe": "NGX()", +"de530bbb": "EMISSION_FOR_SALESTAGE4()", +"de534744": "tokenDistribution(address,uint256)", +"de563b89": "removeRatio()", +"de56a245": "editionOptionalCommission(uint256)", +"de571e48": "getCollectedAmount()", +"de575a02": "dismissRoom(uint256)", +"de576c8a": "CREATED_STAR5()", +"de5785d5": "feesAvailableForWithdraw()", +"de578a90": "ApodTokenContract()", +"de57e8b4": "releaseEscrow(bytes16,address,address,uint256)", +"de583ed3": "_improveCard(uint256,uint256,uint256)", +"de5866f9": "s19(bytes1)", +"de589fa9": "TokenLongExercised(address[2],uint256[8],uint8,bytes32[2],uint256,uint256)", +"de58d156": "createAsset(string,string,string)", +"de5990ca": "INTREPID_VOUCHER_LIMIT()", +"de59a5cb": "SaleClockAuction(address,address,address,uint256,uint256)", +"de5ac86d": "createWager(bytes32)", +"de5b71f7": "distributeReward(address,uint256,uint256)", +"de5b9987": "getUnitDefenseMultiplier(address,address,uint256)", +"de5b9e4f": "BitMEDSmartToken()", +"de5bb5a2": "nEdits()", +"de5c995e": "Y2_lockedTokenReleaseTime()", +"de5cb7ed": "DutchAuctionPoD()", +"de5cf247": "giveTokens(address,address,uint256,string)", +"de5d953a": "logSingleIndex(bytes,bytes,uint256)", +"de5da0cf": "nextGiftId()", +"de5dc6c8": "tokenCapped()", +"de5dead6": "reduceInventories(uint256,uint256,uint256,uint16)", +"de5e21df": "timerStart()", +"de5e7ac4": "getOutcome(address)", +"de5eaa83": "donate(uint8,bytes32,bytes32)", +"de5eeb6e": "preICOAddress()", +"de5f3ec6": "buy10Price()", +"de5f5517": "lad(bytes32)", +"de5f72fd": "faucet()", +"de5f9866": "getTokensLeft()", +"de605ecc": "changeSettings(uint256,uint256,uint32)", +"de60a67d": "maxCapIco()", +"de620676": "_sellprice()", +"de622de4": "tgeStarted()", +"de62319c": "IQT_CONTRACT_ADDRESS()", +"de625d1f": "totalReceivedWei()", +"de628e3b": "tokensCalculator(uint256,uint256,uint256,uint256)", +"de629235": "getCertificationDocumentAtIndex(address,uint256)", +"de637901": "poptxs(address,uint256)", +"de63a530": "setAddressAndFunctionIdVoteRules(address,address,bytes4,bool,uint256[5])", +"de63dc35": "setPartnerFromPreICOAffiliate(address[],bytes32[],uint256[])", +"de640e19": "Investment(uint256)", +"de642b5a": "cbdc(uint256,string,string)", +"de644ebd": "firstMintRound0For(address[],uint256[],uint8[])", +"de648b87": "setSKLContractAddress(address)", +"de656b71": "BecomeSnailmaster()", +"de658979": "_updateCompany(bytes32,bytes32)", +"de6595b2": "WhitelistedUpdated(uint256,bool)", +"de65da20": "purchaseGame()", +"de661217": "left75(uint256)", +"de667e70": "setBuyer(uint256,address)", +"de66b5f7": "unidentifiedSaleLimit()", +"de66ed0d": "getTargetReporterGasCosts()", +"de6746a5": "founders(address)", +"de6764ba": "Swanroll()", +"de67fd05": "deleteLayer(uint256)", +"de683a7d": "change(address,uint256,address)", +"de68c43f": "noFee(address,address,uint256)", +"de6a1b19": "landmarkPoolTotal()", +"de6a9d83": "CheckResultCalled(bytes32,address)", +"de6ab39c": "INITIALSUPPLY()", +"de6b8a2e": "getOrderLength(address)", +"de6b978d": "POA20(string,string,uint8)", +"de6baccb": "transferWithLock(address,uint256,uint256)", +"de6bd0e8": "redistributeEthForAddresses(uint256,address[])", +"de6c4f4b": "reset(address,address,address,address,address,address,address)", +"de6ca3f0": "_setCommit(uint256,address,bytes32)", +"de6cdd2e": "getExchangeInfo(bytes32)", +"de6eb4be": "NBAONLINE()", +"de6ed7dc": "GoldIssueBurnFee(string)", +"de6ef007": "amountTokensPerEth()", +"de6f24bb": "sendMessage(address,string)", +"de7086f6": "TemplateToken()", +"de70b36c": "RevokeViewingPrivelege(address)", +"de718e3f": "initialWeiRais(uint256)", +"de71c467": "presentObject(bytes,bytes32)", +"de71d56b": "getStandartComponent(uint256,uint256)", +"de72a01d": "Agt()", +"de72b83d": "totalBountyAmount()", +"de72cab0": "finishBonusPeriod()", +"de733397": "allowClaiming()", +"de7337a1": "changeFloor(uint256)", +"de7383e0": "handleTokensReceived()", +"de742c2d": "getFreeAlien()", +"de74880c": "platformUnfreeze()", +"de74e57b": "listings(uint256)", +"de750f6f": "getNine(uint256)", +"de753fe5": "PrecioUnidadPase()", +"de758458": "IPFSProxy(address[],uint256,uint256)", +"de75c36e": "addressMasterNodes()", +"de763a40": "getEtherFeeForPriceInCandy()", +"de77229f": "MinterOwnershipTransferred(address,address)", +"de77743d": "needsbeneficiary(uint256)", +"de7874f3": "plyr_(uint256)", +"de78be15": "onSoftCapReached(uint256)", +"de78e78a": "tokenLaunched()", +"de78ed85": "actual_balance(address)", +"de795edd": "prova()", +"de79fb92": "UKTTokenVoting(uint256,bytes32[],address[],uint256[])", +"de7a5956": "getWinnerTeam()", +"de7ae335": "WithdrawDividendsAndCouponsTo(address)", +"de7b1a77": "finalizeTokenSaleManager()", +"de7b24b8": "ICOFailed(uint256,uint256,string)", +"de7b89bd": "GetUserExtraData1(address)", +"de7bea74": "getThreshold(uint8)", +"de7c2ed2": "TEAM_VESTING_DURATION()", +"de7c99c3": "releasePrivateBonusTokens(address[],uint256[])", +"de7cb327": "Proof()", +"de7d4fc4": "getGameNumber()", +"de7dd576": "etherPriceInPoundPences()", +"de7ea691": "getRandom(uint8,uint256)", +"de7fe3e7": "getItemInfo(uint256)", +"de803198": "setFunderSmartToken(address)", +"de80344d": "startStage(uint256,uint256,uint256,uint256)", +"de80b0a5": "promo()", +"de812733": "createBaby(uint256,uint256,uint256,uint256)", +"de81333e": "claimHeldBalance()", +"de815e61": "FourArt(address,address,address,address,address,address,address,address,address,address,address)", +"de81aaaa": "hardCapUSD()", +"de821a35": "_updateGenerationSeasonFlag(uint256,uint8)", +"de8248fb": "FEE_PERMILLE()", +"de824f93": "TimeLeft()", +"de82b54d": "cancelSellToConsumer(address)", +"de82efb4": "gimme()", +"de831ee7": "changeMinTransfer(uint256)", +"de840f11": "NassauToken()", +"de850c71": "dequeueAlternately()", +"de852afe": "revokeAccessDeploy(address)", +"de854065": "Portfolio(address)", +"de85a4a9": "tokenIssuedMkt()", +"de85c040": "GetMyRound()", +"de866db1": "buyContract()", +"de86ba28": "_addMintedTotallyByBridge(uint256,address)", +"de874962": "EOS_Silver()", +"de8801e5": "presaleStart()", +"de887bba": "getSecretBet(address)", +"de889d50": "refundWallet(address)", +"de88a342": "payDividends()", +"de894d3a": "_transferDividends(address,address,uint256)", +"de8a1c2e": "OMIToken()", +"de8a6fa2": "baseEthCapPerAddress()", +"de8b1d5c": "createCustomPresale(uint256,uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"de8b888e": "freezeTokenTransfers()", +"de8ba6d1": "getAndDel(bytes32)", +"de8bb64f": "TEFC()", +"de8bf3b6": "noRoundMiniGame()", +"de8c85ea": "operationToken()", +"de8f246c": "setStartTimestamp(uint32)", +"de8f50a1": "verify(bytes,bytes,bytes)", +"de8f55af": "dailyDistribution()", +"de8fa431": "getSize()", +"de901104": "setLLV_edit_15(string)", +"de9122f7": "wipeAttributes(string,bytes32[])", +"de917978": "SafecontractsTREXFund()", +"de91af7b": "totalPoolCap()", +"de91bb10": "CardManger()", +"de92af4b": "LongBought(address[2],uint256[3],uint256)", +"de931662": "callToken()", +"de934416": "balancePrivate(address)", +"de934d86": "BOT_ELEMENT_1()", +"de9364f4": "testFailBurnGuyWithoutTrust()", +"de940c29": "renounceOwnershipForever(uint8)", +"de942e62": "getLLV_edit_6()", +"de944520": "getBurnAmountApproval(address,address)", +"de9476dd": "addNewAirdrop(string,uint256,uint256,address,uint256)", +"de94b800": "backToken(address,uint256)", +"de957cf4": "setChunkSize(uint256)", +"de9652b1": "getcoinSortinglength()", +"de96587e": "removeAmbassador(address)", +"de96e823": "StarbaseCrowdsale(address)", +"de981f1b": "getContract(uint8)", +"de98bc4f": "LogMintingStopped()", +"de990bda": "etherMaximum()", +"de995b90": "sendOwnershipFrom(address,address,uint256)", +"de998dd0": "_affiliateProgramIsActive()", +"de9a1bdb": "MyToken(string,string,uint8,uint256)", +"de9b33f9": "getWithdrawNonce(bytes32)", +"de9b9364": "max_investment_eth()", +"de9d0e85": "_setPendingAnchor(address,uint256)", +"de9daf91": "setEmissionLimit(uint256)", +"de9db5d3": "projectShare()", +"de9eade3": "totalInitialAddresses()", +"de9ee13e": "calculateMaximumPayment(address,address)", +"de9f28e4": "getJobTotalSkills(uint256)", +"de9f4248": "identities()", +"de9f57f5": "LogBroker(address)", +"dea011f5": "updateService(address,address)", +"dea01b3e": "removeOneSecret(bytes32)", +"dea06188": "NumberOfBlockAlreadyMined()", +"dea09ef3": "takeFee(address,address,address,uint256,uint256)", +"dea0a837": "SetParticipantURL(address,address,string)", +"dea0cbd7": "viewMaxGasPrice()", +"dea19cda": "_fetchOrderByIdWithWithPayer(string,address)", +"dea1bd69": "setValidity(uint256)", +"dea216af": "nestedSecond(uint256)", +"dea2356c": "setInvestorGain(uint256)", +"dea37fb0": "Force()", +"dea3ce27": "setEligibleForReimburse(bool)", +"dea4267b": "addCourse(string,string,string,string,string)", +"dea5408f": "paymentSizeB()", +"dea5de80": "phase_4_Time()", +"dea6aec7": "getTargetSupply()", +"dea7b768": "submitBallotNoPk(bytes32)", +"dea89056": "holdMax()", +"dea8d6b6": "testCannotSetPresaleTokensAfterSaleStarts()", +"dea90acf": "getEmergencyTransferSignersCount(address)", +"dea95ff8": "setRoundNum(uint256)", +"dea97078": "getPendingTransactionsSellerAddresses()", +"dea9b464": "depositCollateral(bytes32,uint256)", +"dea9c72b": "getLatestPreReleaseTree(bytes32,uint32,uint32,uint32)", +"dea9ecd6": "DeanCoin(uint256,string,uint8,string)", +"deaa0d0a": "withdrawal1()", +"deaa59df": "setWallet(address)", +"deab5a78": "TEGTY()", +"deac4659": "inArray(address)", +"deaca58e": "settlvlement(address,uint256,address,string,string)", +"dead98f6": "part_to_vehicle(uint256,string,uint256)", +"dead9f93": "setParams(uint256,uint256,address,address)", +"deadc3dc": "currentStepIndexByDate()", +"deae5d4d": "networkPlaceholder()", +"deaf5a5e": "transferDocument(bytes32,address)", +"deb06c3a": "gameActive(uint256)", +"deb077b9": "nextSaleId()", +"deb081df": "getIslands()", +"deb0e09b": "getVotingDuration()", +"deb209f6": "isProviderValid(uint256)", +"deb2432b": "zecId()", +"deb27fc5": "getDragonTypes(uint256)", +"deb2e0b9": "MedNet()", +"deb36e32": "startVesting()", +"deb41f8d": "setTuple(uint256,uint256,bytes32)", +"deb43874": "Heritable(uint256)", +"deb52738": "finaliseFirstPhase()", +"deb53ab4": "BeneficiaryStake(uint256)", +"deb5d6c2": "inviterReg()", +"deb60627": "MhpCoin()", +"deb6930c": "PriceTicker()", +"deb77083": "stage2Bounty()", +"deb775a7": "tokenEmission(uint256,uint256)", +"deb80111": "transfer_asset(address,uint256)", +"deb80d66": "ProvidencePresale()", +"deb83bcc": "crowdsaleEndLockTime()", +"deb931a2": "getOwner(bytes32)", +"deb93b5b": "balanceOfOn()", +"deb979ac": "mktValueupdated(uint256)", +"deba5e95": "addCandidate(address,bytes32,string)", +"debad25e": "TeslaTest()", +"debad27f": "getProducts(uint256)", +"debaeb0e": "bonusLevel1PercentModifier()", +"debbc6eb": "btcRelay()", +"debc74f6": "buyRateZeroQuantity(uint256)", +"debc94ff": "Buckcoin()", +"debcbdcf": "preSaleStartdate()", +"debd122e": "setUp(uint256)", +"debe1c69": "setAccountingParams(uint256,uint256,uint256)", +"debe9768": "mintTokensLockedMultiple(uint256,int256,address[],uint256[],uint256[])", +"debf5b9f": "phase_4_rate()", +"debfbade": "calcNextNumShareholders(address,address,uint256)", +"dec0257d": "deleteContract(bytes32)", +"dec04b9b": "testNow()", +"dec10357": "currentCandyTotalSupply()", +"dec18b46": "second_withdrawal(uint256)", +"dec22b07": "forceExecuteRandomQuery()", +"dec24118": "lastCallBlock()", +"dec26d55": "LifeSet_003()", +"dec32ae8": "byTokens()", +"dec4b436": "subAttack(uint256,uint256)", +"dec57e94": "QTUM()", +"dec5cf53": "Exile()", +"dec6bc91": "EthernautsPreSale()", +"dec6c2d8": "updatedDistributee(address,uint256)", +"dec74ae9": "eurId()", +"dec7542f": "changePermission(address,address,bytes32,bool)", +"dec7ee57": "convert2Platinum(uint256)", +"dec7fa11": "minimumTokenAmount()", +"dec8f52e": "getVested(address)", +"dec96e7b": "setTitulaire_Compte_3(uint256)", +"dec9ba44": "createBet()", +"deca15db": "calcQueryCost(uint256,uint256)", +"deca6e76": "adminsInitialized()", +"decadbcc": "mainstreetCrowdfund()", +"decb3a90": "winAmount()", +"decb4803": "Tipcoin()", +"decbd169": "createPet(uint8,string)", +"decd8785": "addPartnerAddress(address)", +"decd8a25": "MINI_GAME_PRIZE_CRYSTAL()", +"decde7c0": "GetCert(uint32)", +"decdffbb": "_emitJobRatingGiven(address,address,uint256,uint8)", +"dece296f": "RET_DIV()", +"dece2e67": "releaseFundsSeller()", +"dece3355": "MinePoS(address,uint256)", +"decebbce": "getFunds(address)", +"decf1e64": "minimumPledgeAmount()", +"decfe0d4": "destroyEnabled()", +"ded04fe9": "testFailCreateNewRevisionNotOwner()", +"ded05da5": "changeIcoAddress(address)", +"ded1588c": "OwnerWithdrawTokens(address,address,uint256)", +"ded1c11b": "startFinalStage1()", +"ded1d0b8": "createMiniTicket(address,uint256)", +"ded1e438": "checkRatio(uint256,uint256)", +"ded1e4de": "DisputeResolver(address[],address)", +"ded1e7e3": "innerGreet()", +"ded1f580": "Unregister(address,bool)", +"ded24016": "getDynamicArrayElement(uint256)", +"ded2d0f4": "awardToken(address,uint256)", +"ded30375": "setectoken(address)", +"ded317a8": "minCapUSD()", +"ded37745": "maybeAnotherTime(uint256)", +"ded4980f": "withdrawInvestmentsBeneficiary(address,address)", +"ded54a4c": "stitch(uint256,uint256,bool)", +"ded5bc6c": "getBdpImageStorage(address[16])", +"ded5bd14": "setApp(string,uint256,address)", +"ded78d3d": "trade(address,uint256,address,uint256,uint256,address,uint8,bytes32,bytes32,uint256)", +"ded8454a": "addressToBytes(address)", +"ded8f76d": "_sort(uint256,uint256)", +"ded94688": "showOwner()", +"ded9b075": "getAllDepositesCount()", +"deda0b5a": "mockSetResult(string)", +"deda20de": "doPurchaseFor(address)", +"deda2f9d": "triggerStealManually(uint32)", +"dedb7e25": "_ifEvenThenOddTooFlags(uint256)", +"dedc440f": "getEscuela(uint256,uint256)", +"deddab12": "withdrawalToken(uint256)", +"dede12a4": "startWeekOne()", +"dedeb3ca": "referralRateInvitee()", +"dedf141e": "setDates(uint256,uint256)", +"dedfb567": "multiFreezeAccount(address[],uint256)", +"dee023e2": "transferAllArgsNoAllowance(address,address,uint256)", +"dee1bfbe": "totalLendingFiatAmount()", +"dee1cfd8": "icoStartTimestampStage()", +"dee1f2af": "addToken(address,uint256,uint256)", +"dee2596b": "changeBonusTokenAddress(address)", +"dee2b058": "setCapacity(uint256,uint256)", +"dee2fedd": "setproduct(uint256,uint256,string,string)", +"dee3a226": "finalizeSto()", +"dee3efb2": "getWorkerPoolByIndex(uint256)", +"dee4b246": "buyTokens(uint64,uint256,uint8,bytes32,bytes32)", +"dee5216e": "applyRuntimeUpdate(address,address,uint64,uint64)", +"dee54b68": "WalletAddressUpdated(address,address)", +"dee555bf": "discountRateIco()", +"dee5a9e7": "PRICE_STAGE_THREE_BONUS()", +"dee6e5a4": "toggleKYC(address,bool)", +"dee73dbb": "AcceptedOwnership(address)", +"dee751ce": "createHoldToken(address,uint256)", +"dee7e59b": "LogWithdrawTokens(address,uint256)", +"dee81a13": "Local()", +"dee846c5": "updateJoinedCrowdsales(address)", +"dee8575c": "getNumBits(uint256)", +"dee86dfb": "marketIdeas()", +"dee8bd51": "ReleaseICO()", +"dee9f53f": "idOf(uint256)", +"deeb2efe": "getShifters(address,uint256)", +"deeb7124": "MDAToken()", +"deebeac9": "transferToken(address)", +"deec053d": "getMarketCachedIndex(uint256)", +"deec4c20": "getCardsInfo(uint256)", +"deecb187": "KyberNetworkProxy(address)", +"deed18e2": "isReadyToFinalize()", +"deed2be0": "getDailyPlayers()", +"deed4b80": "isFirstLockTimeEnd()", +"deee9adb": "setPOOL_edit_10(string)", +"deef6c99": "ZigguratToken(uint256,string,uint8,string)", +"def04570": "TheFrozenDeadShitCoin()", +"def0defa": "getOwnerHistoryCountOf(bytes32)", +"def18101": "currentBid()", +"def1a2da": "vc3Wallet4Pct()", +"def2489b": "convert(address)", +"def2be48": "getBAAAU(bytes32,address,address,address)", +"def4ba32": "utrTestToken()", +"def51dc2": "CIC()", +"def59575": "manualyAddReferral(address,uint256)", +"def59ea5": "addMember(address,address,uint256)", +"def5bbd0": "strConcats(string,string,string,string,string)", +"def7eb44": "maxChangeFee()", +"def843ef": "createOfAthleteCard(string,address,uint256,uint256,uint256)", +"def86cbb": "modifyWhitelist(address[],address[])", +"def871ef": "AirDrop(uint256)", +"def8ecf4": "removeBuyOrder(uint256)", +"def9176c": "team1Balance()", +"def92c69": "MAX_BALANCE()", +"def98a72": "recipientExtraMIT()", +"def9c7e2": "_escrowStakeOwnerPaymentEarning(address,bytes32,uint256,uint256,address,bool)", +"defa92ee": "depositDividends()", +"defaa5f2": "_transferEthereum(uint256,uint256,uint256)", +"defafa37": "setRefundTimelock(uint256)", +"defb9584": "PROMO_CREATION_LIMIT()", +"defbc073": "weiUnlocked()", +"defc876e": "removeAddressFromCaller(address)", +"defc8ae9": "BuyOffer(address,address,uint256,uint256,uint256,uint256)", +"defce6d8": "FlagAddress(address)", +"defe2883": "totalSupplyByAsset(bytes32)", +"defe2c47": "_checkRecommend(bool,uint256)", +"defefe96": "payCompoundTerm(uint256,uint8,uint8)", +"deff30c6": "sellTokens(address)", +"deff3a37": "purchaseReject(address)", +"deff41c1": "m_owner()", +"deff5757": "setPartnersRelease(uint256)", +"deff71b8": "setAllFlagPairs(bool[2][])", +"deff7f2f": "CrowdFundings()", +"deffbaee": "addOwnershipChest(address,uint256)", +"df000ff7": "acceptParityOwnership()", +"df013fab": "setDelegadoDeEscuela(bytes32,bytes32,uint256,uint256)", +"df018dbd": "process(address,address,address,string,string)", +"df022cbc": "hello1()", +"df034586": "lockCount(address)", +"df034cd0": "updater()", +"df034db8": "aCASATest()", +"df037443": "timeoutX()", +"df0441cc": "_checkUnlock(address)", +"df054797": "securityAudit()", +"df0584af": "ClimateCoinAddress()", +"df065d78": "TEST_PLAYER()", +"df06c1d8": "plotsOwned(address,uint256)", +"df06f906": "numBets()", +"df0795aa": "setKycProvider(address)", +"df08ce62": "give(address[],uint256[])", +"df09176b": "ActualizePrice(uint256,uint256,uint256,uint256)", +"df0969dc": "clearPlayerPrize(address)", +"df09921f": "institutionAllocation()", +"df0a2bda": "refundIgnoredBids(uint256)", +"df0a8589": "dealAmount()", +"df0ad3de": "upgradeabilityAdmin()", +"df0b1344": "SchmeckleTokenSale()", +"df0b52c8": "keyAddress()", +"df0bcf4d": "setAvatar(uint256)", +"df0c428c": "releaseAdvisorsTeamTokens()", +"df0c7a55": "nextPrice(uint16)", +"df0cd37b": "Etheremojis()", +"df0d05d9": "EmporioExchage()", +"df0d1078": "volumeType1()", +"df0da20e": "BONUS_WINDOW_1_END_TIME()", +"df0efbf5": "rateForSale(uint256)", +"df0f093b": "purchasePeriod()", +"df0f26f9": "getBalanceAddr(uint256)", +"df0f3227": "DurationAltered(uint256)", +"df0f3c19": "getGameCountdown()", +"df0f3e1c": "isFalse(bool,string)", +"df109ee1": "AuctionManager()", +"df10dd6e": "checkSubAvailability(bytes32)", +"df117c47": "updateSuperPrivilegeParams(uint256,uint256)", +"df11d258": "witness(bytes32,bytes32,bytes32,bytes32,uint8,bytes32,bytes32)", +"df12b94e": "investBalance()", +"df133cf9": "minesPrice(uint256)", +"df1340a0": "QTR_Token()", +"df13569d": "FACTOR_6()", +"df13994e": "callback(bytes32)", +"df143fb7": "HackerGold(address)", +"df148cdb": "setPonziAddress(address)", +"df155488": "startLockTime()", +"df15c37e": "getWinners()", +"df15f87e": "FiatRaisedUpdated(address,uint256)", +"df1614cf": "setLendFee(uint256)", +"df1673e9": "CHINESE_EXCHANGE_4()", +"df175e9b": "newCampaign(address,uint256,uint256)", +"df17c4b1": "delegateTransferAndCall(uint256,uint256,address,uint256,bytes,uint8,bytes32,bytes32)", +"df181831": "staff_1()", +"df1836ca": "referrerAndOwnerPercent()", +"df18e215": "updateTokenStore(address)", +"df190048": "getAdPrice(uint256)", +"df19b71c": "digitToNumber(uint8)", +"df19df5d": "ownerOperationsLength(address)", +"df1a5aab": "reservedTokensClaimStage()", +"df1abf83": "revertTokensByKYC(address)", +"df1b817e": "setupCutie(uint40,uint16)", +"df1c455c": "unallocated()", +"df1cd2b5": "volumeBonusesTokens(address)", +"df1cf293": "addAuction(uint32,uint256,uint256,uint256)", +"df1d4559": "setFOUNDATION_POOL_ADDR(address)", +"df1dbbc9": "ShareToken()", +"df1dd826": "trade(uint256)", +"df1e36c6": "unlockDeposit(string,address)", +"df1ead82": "disinvest()", +"df1ec3ea": "BesideERC20(uint256,string,string)", +"df1f4a6e": "getTimestring(uint256)", +"df1fc781": "KickicoCrowdsale(address,address,address,address,address,address,address,address,address)", +"df201a46": "simple()", +"df203ff7": "depositGasCost()", +"df20b119": "balanceEthCrowd(address)", +"df20c021": "addNewChannelAndRankofuser(address,string,int256)", +"df20d738": "BokkyPooBahsEtherRefundablePrize()", +"df221223": "setWeiExchangeRate(uint256)", +"df22bf83": "canUseTokens(address,uint256)", +"df23128f": "adjustTranche(uint256)", +"df234815": "tokensAvailableAtTierInternal(uint8,uint256,uint256)", +"df2436b3": "isExistByBytes(bytes32)", +"df247c5d": "CareerXonToken(uint256,uint256,uint256,uint256)", +"df25322d": "getFundReceiver()", +"df25ecf8": "DSTContract(string,string)", +"df25ee23": "getIndexId(address,bytes)", +"df25f3f0": "minPerTx()", +"df26ca08": "emitError(uint256)", +"df28aef7": "withdrawLiquidatePool(uint256)", +"df28d6fa": "Dex2(address)", +"df294588": "get_Gains(address,address)", +"df294cad": "allocateNominalToken(address,uint256)", +"df295080": "changeAbstractStorage(address)", +"df29b982": "emergencyWithdrawERC20(address,uint256)", +"df29dfc4": "get_start_time()", +"df2a201b": "setSystemOraGasLimit(uint256)", +"df2a2753": "LDGToken()", +"df2a29da": "getDenominationToken()", +"df2a6e4f": "kscBatchSellByOtherCoin(address,address[],uint256[],uint256,uint256[],string)", +"df2b1cf8": "toBytes(uint256,uint256)", +"df2b1f28": "tokenSetTransferFeeReceiver(address,address,address,address)", +"df2bf12b": "totalBatchOf(bytes32)", +"df2c05a9": "UbermenschPrefundToken(address)", +"df2c7fc1": "AuctionFinished(address,uint256,uint256,uint256,uint64,uint256,address)", +"df2cdbed": "_setBidState(bytes32,uint8)", +"df2d33d5": "isBreakingCap(uint256)", +"df2d44af": "EthLongExercised(address[2],uint256[7],uint8,bytes32[2],uint256,uint256)", +"df2df29a": "CEO_Signature()", +"df2dfb20": "canIBuy()", +"df2e5c0f": "changePricePerUnicorn(uint256)", +"df2f0a4a": "getDecisionBlockNumber(uint256,uint256)", +"df2fbae6": "totalAvaliableSupply()", +"df300b46": "getThing(bytes32[])", +"df305680": "clearProposalLocked(address)", +"df30e592": "isValidContributorId(uint256)", +"df31566e": "setUInt(string,uint256)", +"df3164c6": "Release()", +"df31b589": "bonusForPreICO()", +"df320b29": "refundBet(bytes32)", +"df32754b": "owned()", +"df32dc5c": "withdrawEarning(uint256)", +"df331545": "reservedOperationalExpenses()", +"df334093": "acceptingDeposits()", +"df342d66": "setSubcontractAddressAndDataPattern(uint256,address,uint256,uint256,uint256,uint256,bytes,bytes)", +"df36318a": "exchangeStart()", +"df3864d5": "ticketsSold(uint256)", +"df390d63": "encodeData(uint128,uint256,uint24,uint40)", +"df3959f5": "setInitializeUniverseValue()", +"df3a4fa1": "maxSubdivisions()", +"df3a635a": "removeDeed(address,uint256)", +"df3a6b10": "testMemberAddedEvent()", +"df3aa1fc": "FTXToken(address)", +"df3b75f0": "test_standardCampaignDeploymentAndUse()", +"df3be668": "productLimits(bytes32)", +"df3be9e8": "ERCFW()", +"df3c211b": "calculateVestedTokens(uint256,uint256,uint256,uint256,uint256)", +"df3c3a30": "mintLocked()", +"df3c5a42": "supplyICOContract(address)", +"df3c8620": "num_challenges()", +"df3cc390": "setUsdRate(uint256)", +"df3e0a1d": "completeEscrow(uint256)", +"df3f5974": "readPublicRecord(bytes32,bytes32)", +"df3fb59e": "DSPRegistryReplaced(address,address)", +"df40503c": "getRemainCoins()", +"df40a089": "setDrawAddress(address,address)", +"df41765e": "circulatingTokensFromSale()", +"df418fbf": "returnBytes1(bytes)", +"df41d979": "ico_distribution(address,uint256)", +"df426401": "founderTokenUnlockPhase2()", +"df428e3b": "createChildUniverse(uint256[],bool)", +"df42dfa9": "initialARXSupplyInWei()", +"df42e80e": "Asset()", +"df43b699": "setInvoiceCancelled(address,address,uint256)", +"df43b830": "absolutCBD()", +"df444df1": "createEscrowBySeller(address,uint256)", +"df459426": "parse_signature(bytes32,bytes,bytes)", +"df4604b3": "submitOrVote(bytes32)", +"df462098": "setNextCommonTTMTokenId7(uint64)", +"df463ed3": "buyService(uint64,uint64)", +"df47a924": "DiaToken()", +"df482ad5": "privateFundSupply()", +"df483622": "addLotteryParticipant(address,uint256)", +"df487962": "FibokenCreated(uint8,address,uint256)", +"df48a2b0": "setReinvestmentAddress(address)", +"df49804a": "mtv()", +"df49dfe3": "updateTransferMinimumFee(uint8)", +"df4a2ecc": "hasNext()", +"df4aaf04": "COIN_SUPPLY_ICO_TIER_2()", +"df4adb94": "getOutcomeByIndex(uint256)", +"df4b2970": "getRabbitMother(uint32)", +"df4b3351": "collectEtherBack(address)", +"df4bcf58": "isMigrationAgent()", +"df4bd18d": "setPriceAndRate(uint256,uint256)", +"df4bef32": "searchInList(address)", +"df4c2164": "mintableAddress()", +"df4c98b5": "createRentAuction(uint256,uint256,uint256,uint256,uint256)", +"df4cbb96": "commitProposal(bytes32,string)", +"df4d17dc": "initToken(address)", +"df4dfa7f": "PRE_ICO_TOKENS_AMOUNT()", +"df4e79fa": "VESTED_TOKENS()", +"df4ebd9d": "buyWanCoin(address)", +"df4ec249": "step3()", +"df4f0088": "guardVillain(uint256,uint256)", +"df4f011c": "licenseIds(uint256)", +"df4f5a72": "refunder()", +"df4fc373": "SetIPR(string,string,address,string,string,uint256,address)", +"df4fcf8e": "newFeePercentageIsSet(uint256)", +"df5055e6": "adminVer()", +"df506768": "payTeam(address)", +"df506801": "preSaleThirdCap()", +"df50a8c1": "updateFundraiser(address,bool)", +"df50afa4": "setAllowTransfers(bool)", +"df51d46b": "setUnlockEarlier(uint256)", +"df520efc": "pricePerTokenInWei()", +"df52f321": "CinociCoin(uint256,string,string)", +"df53623f": "_unlockContract()", +"df5483ad": "setImageWidth(uint256,uint16)", +"df54c659": "TransferredFoundersTokens(address,uint256)", +"df55b41a": "owner(string)", +"df55f529": "UNLOCK_TEN_PERCENT_PERIOD()", +"df565ca2": "rateRatioCVSThreshold()", +"df571e33": "postSoftRate()", +"df57904a": "GoodfieldNewRetail(uint256,string,string)", +"df57a6ec": "_generateRandomDna(string)", +"df57b742": "getReverse(bytes32)", +"df58471d": "increaseFundingGoal(uint256)", +"df58d236": "WipedAccount(address,uint256)", +"df590d89": "KnowHowChain()", +"df591e82": "goForward()", +"df59cbeb": "OwnedUpgradeabilityProxy()", +"df5a1417": "PLAYERWIN()", +"df5b588c": "PublishWinnersScoreThres(uint16)", +"df5cc291": "get4(bytes,uint256)", +"df5cf723": "delegation()", +"df5d3e89": "subBuy(bytes32,bytes32,address)", +"df5d3ec7": "setSaleEnd(uint32)", +"df5dd1a5": "addOracle(address)", +"df5dd98f": "refFeeVal()", +"df5e3569": "hasBet(uint256)", +"df5f0603": "retrieveEth(uint256)", +"df5f53f1": "checkWithdrawal(address,address,address,uint8,bytes32,bytes32,uint8,bytes32,bytes32)", +"df603769": "reconcile(uint256,address[],int256[],uint8[],bytes32[],bytes32[])", +"df61f51b": "TokensIssued(address,uint256,uint256,uint256)", +"df6378e9": "getAuctionAddress(uint256)", +"df63d908": "testYBool()", +"df63e659": "deleteAllMessages()", +"df642cad": "setCost(uint8,uint256,uint32)", +"df65d1ef": "getLuckBoyAddrList()", +"df66fc14": "sendTokenTeamAdvisor(address)", +"df67184a": "getRequiredBalance(uint256)", +"df673d35": "SISA_token()", +"df67ae3d": "GetStuffList(address)", +"df67d82d": "minETH()", +"df68a516": "viable_print(int256,uint256,uint256,uint64)", +"df68c1a2": "canTransfer()", +"df68fd99": "popElementWithPos(uint256)", +"df6a000d": "safe_withdraw(uint256)", +"df6a6002": "fourthMonthEnd()", +"df6a6b38": "redeemed(address,uint256)", +"df6ab3d5": "masssend(address[],uint256[])", +"df6abd34": "icoHardcap()", +"df6adc2a": "JackpotWinner()", +"df6af2f8": "setpatient(string,string,uint256,uint256)", +"df6af7d1": "getUnclaimedBuyerFunds(address,address,address,uint256)", +"df6afed9": "replaceArtwork(uint16)", +"df6b1ebb": "analyzeCondition(uint8)", +"df6c13c3": "getMinFunding()", +"df6c7cf4": "changeAssembly(uint256,uint64[],uint64[])", +"df6cf923": "IXTPayment()", +"df6d3afa": "setAngelHolder(address)", +"df6d4843": "getMaxLimit()", +"df6da6f9": "tokenSellData(address)", +"df6e1331": "drawGame(uint256,string)", +"df6e7a5f": "setTokenDelegation(address,address)", +"df6ee5f2": "lend(bytes32,bytes,address,uint256,bytes)", +"df6ee6b7": "addStage(uint256,uint256,uint256,uint256,uint256,uint256)", +"df6f023d": "reLoadCore(uint256,uint256,uint256,uint256)", +"df700074": "setadmin(address,address)", +"df706f77": "JTrex()", +"df708f01": "setMainContract(address,address)", +"df70ab71": "increasePositionOnBehalfOfRecurse(address,address,bytes32,uint256)", +"df70f3b5": "Jumanji()", +"df713abd": "get_time_locked_contract_size(address)", +"df7447dd": "createTicker(uint256)", +"df7458cd": "addReply(bytes32,string,uint256,address)", +"df745d28": "releaseBatch(address[])", +"df752519": "MANHATTANPROXY1STST()", +"df75574a": "buyItem3()", +"df755a98": "prPercent()", +"df75f3fb": "setPreSaleDurance(uint256)", +"df761fff": "TokensClaimedEvent(address,uint256,uint256,uint256)", +"df76d18d": "RegisterIP(bytes32,string)", +"df775a93": "skipInitBecauseIAmNotOg(address,address,uint256,uint256,uint256,uint256,bytes8,uint256)", +"df776689": "BasicIterator()", +"df77a290": "OddsAndEvens()", +"df77e074": "GetBetInfo(uint8,uint256,address)", +"df77eb1e": "transferHomeViaRelay(address,uint256)", +"df78c1dd": "payIn(uint256)", +"df79d8fa": "initialInvestorAccount(uint8)", +"df7ae3d8": "debugVal()", +"df7b70ab": "writesExercised(bytes32,address)", +"df7be446": "_removeNFToken(address,uint256)", +"df7bf704": "matchResult()", +"df7c5fca": "checkPeriodic()", +"df7cc70d": "ethUnPause()", +"df7cec28": "cancelBid(bytes32)", +"df7dbd70": "prTokens()", +"df7dfef7": "deleteAction(uint256)", +"df7efed8": "WeiinEth()", +"df8011b2": "HOWL()", +"df8089ef": "setAdministrator(address)", +"df811d7d": "numberOfPlayersInCurrentRound()", +"df816206": "getGiftIdsByRecipient(address)", +"df817e54": "checkPreIcoStatus()", +"df821cf7": "BIDCOIN()", +"df833a1a": "createGato(uint256)", +"df8344fe": "allAllowancesForManyAccounts(address[],address,address[])", +"df84807a": "templateIdOf(uint256)", +"df851f03": "calcNextPrice(uint256)", +"df8713ed": "addPot(uint256)", +"df88126f": "lockedInBets()", +"df8812c7": "addStageAmount(uint256)", +"df88401c": "KillahyToken()", +"df885536": "nxtAddr()", +"df888f4e": "AO()", +"df88f5b8": "setNotConstant()", +"df88fb44": "exchangeByPet(uint256,uint256,address)", +"df8b7771": "initialiseValues()", +"df8bb140": "cancelCampaign(bytes32)", +"df8d52a9": "get_comp(uint256,uint256)", +"df8d66e4": "addPlatform(bytes32)", +"df8dc370": "Reservation(address,address[])", +"df8de3e7": "claimTokens(address)", +"df8e03b1": "BasicWhitelist()", +"df8e739d": "bitzToken()", +"df8e9261": "_testItem()", +"df8f4376": "calcSTQAmount(uint256)", +"df8f4eb7": "originalTotalSupply()", +"df8f7971": "ProfileOwner()", +"df8f8a81": "setETCLockingAddr(address)", +"df90061b": "onSaleTokens()", +"df90c98d": "whiteListEndTime()", +"df90f719": "mln()", +"df91f2ab": "SggCoin()", +"df9204b6": "powerStatus()", +"df922744": "ScamSeal()", +"df922f3a": "changeCommission(uint256)", +"df93c9aa": "testrevert()", +"df957b04": "_couldWithdrawFromHolder(address,uint256)", +"df958553": "burnForGateway(address,string,uint64,uint64)", +"df9669e0": "setCrowdsaleEndDate(uint32)", +"df969bc0": "ADVISOR_TWO()", +"df96a336": "Bitkeun()", +"df979b92": "setIncreaseTotalWinningStake(bool)", +"df98ba00": "m_opNum()", +"df98ef33": "getResource(bytes,uint256,bytes)", +"df990c33": "becomeOwlmaster()", +"df9933e5": "SetPwd(bytes32)", +"df998f59": "checkSertificate(address,address)", +"df99f8bf": "TradeToken()", +"df9a4f56": "registerAuditor(address)", +"df9abaa0": "smallUintFunc(uint8,uint256)", +"df9b0774": "SwapResumed(uint256)", +"df9b2931": "FANBASE()", +"df9b3bae": "ZperToken(address,uint256,uint256)", +"df9b5fe9": "ALH3()", +"df9d3580": "accountBuyLimit()", +"df9e33e8": "getForeverRose()", +"df9f3139": "out4Done()", +"df9f92fb": "Scan(address[],uint256[])", +"dfa0ca14": "swapProject(uint256)", +"dfa13498": "LeasedBlock(uint256,uint256,uint256,uint256,bytes32,bytes32,bytes32,bytes32,address)", +"dfa15809": "databaseAddress()", +"dfa15b58": "RESERVED_OTHERS_SIDE()", +"dfa22fed": "buyFromOwner(string)", +"dfa24e8e": "sendEther(address,uint256,uint256)", +"dfa38fea": "NANI(address)", +"dfa4591c": "removeLogicVersion(uint256)", +"dfa54594": "getStandartRobot(uint256)", +"dfa5a25d": "purchaseCoffee()", +"dfa6bc72": "LoggedPhaseICO(uint256,uint256,uint256,string,string,uint8,bool,bool)", +"dfa72237": "innerPlayerFlight(uint256,uint16,uint256)", +"dfa78bf5": "savior()", +"dfa8be5f": "hackEducated(address)", +"dfa93d64": "relayContractAddress()", +"dfa9b440": "addAddressToWhiteList(address[])", +"dfaa3136": "addToMap(uint256[])", +"dfadb43c": "candyLandSaleAddress()", +"dfae7dc1": "vestingWhitelister()", +"dfaeaf67": "ThrowProxy(address)", +"dfaf3658": "closeCdp(address,uint256,uint256)", +"dfaf734a": "lastReleaseTime()", +"dfafaa72": "sendTo(address,uint256,address)", +"dfafb31d": "QUANTH()", +"dfafcf7e": "isMinion(address)", +"dfafe10f": "addParticipant(address)", +"dfb01c8f": "BCC()", +"dfb03cf7": "put(address,address)", +"dfb06d85": "AgentContract(address,address,address,uint256,uint256)", +"dfb0fb28": "ANGEL_ADDRESS()", +"dfb1913d": "withdrawFor(address[],uint256[])", +"dfb1abc0": "distributeReservedTokens(address,uint256)", +"dfb1c0e5": "buyToKen(uint256)", +"dfb259de": "SmartPoolToken(uint256,address)", +"dfb2866d": "priceFactor()", +"dfb29935": "sendHash(string)", +"dfb30c14": "getPlayerSpaceshipModelById(uint256)", +"dfb3557b": "BNB_MIN_CONTRIB()", +"dfb36b0b": "villagePrice()", +"dfb41e7c": "getForecast(bytes32,uint8,uint256)", +"dfb4a12e": "updateCandidateInfo(address)", +"dfb4ae3a": "WHOM()", +"dfb4b2f0": "deadline_status()", +"dfb59249": "EthRental()", +"dfb5a995": "countStureq()", +"dfb5f420": "Crowdsale(address,uint256,uint256,uint256)", +"dfb685cb": "BIT()", +"dfb69cb2": "colors(uint8)", +"dfb6c468": "transferCoinvest(address)", +"dfb873fb": "getPrizeByToken(uint256)", +"dfb87be1": "setEndRate(uint256)", +"dfb8a38d": "getTokenPackPrice()", +"dfb8c6c2": "battleContractAddressCanBeUpdated()", +"dfb9560c": "right24(uint256)", +"dfb9bdca": "exchange(address,address[],uint256[],uint256)", +"dfba3be1": "pvpFinished(uint256[],uint256)", +"dfba9570": "removeStaff(string)", +"dfba9798": "withdrawMytoken(uint256)", +"dfbb3036": "currentRoundInformation()", +"dfbb4021": "checkGrid(uint8)", +"dfbb70c9": "timeOfLastIncrease()", +"dfbc3de1": "applyMember()", +"dfbcb8d9": "transferCard(address,address,address)", +"dfbd5c69": "EggsRedeemed(address,uint256)", +"dfbd6150": "subowner()", +"dfbd9973": "pageByAccount(address,uint256,uint256,uint256)", +"dfbde5a7": "FedCoup()", +"dfbe0587": "sellPorftolio(uint256,uint256)", +"dfbebd07": "licenseExpirationTime(uint256)", +"dfbec00e": "requestTopic(string)", +"dfbed623": "updateCaller(address,bool)", +"dfbef8de": "AllowExchanger(address)", +"dfbf53ae": "winner()", +"dfc027ef": "replayAnser(uint256,uint256[])", +"dfc0bedb": "setCode(uint256)", +"dfc10ea8": "callerAllocationEndBlock()", +"dfc119b0": "testRfind()", +"dfc28653": "NucleusVisionTokenUnlocked()", +"dfc2a146": "ORACON(uint256,uint256)", +"dfc366e8": "tenthousandths()", +"dfc3a987": "cntMembers()", +"dfc42f7c": "OmegaContract()", +"dfc4a516": "doApprove(address,address,uint256)", +"dfc6fbaa": "presaleBalanceOf(address)", +"dfc6ffc6": "CharlieCoin()", +"dfc74cb4": "testPlaceBet()", +"dfc75b9c": "sendJigouByOwner(address,uint256)", +"dfc765dc": "getMatchers_by_index(uint256)", +"dfc78bdc": "ProposalTallied(uint256,bool,uint256)", +"dfc7d488": "getTransactionFee(uint256)", +"dfc86d56": "UsdToEtherConvert(uint256)", +"dfc89632": "PresidentElections()", +"dfc8bff1": "updateLock(uint256)", +"dfca2f53": "LookAtPrizes()", +"dfca685a": "unlockPrivate()", +"dfca8fd2": "contributeForMakers(address)", +"dfcb4157": "saleAfterRefundPeriod()", +"dfcb737f": "allocateMarket_CommunitTokens()", +"dfcbb794": "TrustFund(address,uint256,address)", +"dfcbc298": "CancelBuyOrder(bytes32,address,uint256,uint256,address)", +"dfcc4b86": "ConcludeChallenge(uint256)", +"dfcc525d": "info_SeeTINAmotleyLine(uint256)", +"dfccdef5": "collectedETH()", +"dfcdc7f2": "regReferrer(address)", +"dfcdde5e": "calcAmount()", +"dfce5a7a": "changeGrantsController(address)", +"dfce791a": "counterWagerAndDeposit(uint256)", +"dfce8ac3": "fipsLegacyRegister(bytes20,address,bytes)", +"dfceb5ba": "refund_and_die()", +"dfcefd7e": "indexOf(uint64[],uint64,bool)", +"dfd0163e": "voteNoLockBatchByAdmin(address[],address[],uint256[])", +"dfd024c1": "allocateInvestors()", +"dfd0c510": "ICOReward()", +"dfd142c1": "IncreaseWithdrawalAmount(uint256)", +"dfd17111": "ConstructZCashClue(bytes32)", +"dfd17f2b": "buyInBatch(uint256,uint256,uint256[],uint256)", +"dfd1be58": "platformFundingPerEpoch()", +"dfd200c5": "setRunning(bool)", +"dfd2c96d": "updateHouse(address,address)", +"dfd2ddec": "setForeignBridgeProxyOwner(address)", +"dfd4715e": "setDAdmin(bytes32,address)", +"dfd4e0f6": "setPrivateSaleHalt(bool)", +"dfd50f52": "contestants(uint256)", +"dfd51b4c": "updateIris(bytes32,address)", +"dfd52b74": "_getIcoAddr()", +"dfd5d3b0": "creditMcAddress()", +"dfd5dd6b": "ranksCount()", +"dfd6a9d5": "getPoolTotalStakeQspWei(uint256)", +"dfd6e6c5": "getIcoPhaseOneThreeDayIndex(uint256)", +"dfd80665": "whitelistAgent()", +"dfd84c13": "sendGain()", +"dfd8d516": "IsThisInternal()", +"dfd92f8a": "registerProduct()", +"dfd94849": "addNewSpinner(uint256)", +"dfd9e184": "droneIndexToApproved(uint256)", +"dfdadcb9": "isValidPurchase()", +"dfdadec6": "AlphaCarToken()", +"dfdb27da": "FoundGameCoin()", +"dfdb5f17": "doBurn(address,uint256)", +"dfdc349d": "getLestCommonMul(uint256,uint256)", +"dfdc99c7": "setKpopCelebContractAddress(address,address)", +"dfdce77b": "setScrapPercent(uint8)", +"dfdd3997": "maxETHAutoContributions()", +"dfdd4293": "voidCaller(address,address)", +"dfde567f": "processAR(uint256)", +"dfdfb261": "addEsgoTX(address,uint256,uint256,uint256,uint256)", +"dfe0f0ca": "transferWithSender(address,address,uint256)", +"dfe1304c": "HumanStandardToken123(uint256,string,uint8,string)", +"dfe138a6": "rewardPerUnit()", +"dfe1b17e": "dequeueOrder()", +"dfe1dcf6": "adminSendEthtoAddContract()", +"dfe1f357": "checkHash(address,uint256,address,uint256,uint256,uint256)", +"dfe2de30": "boughtTime(address)", +"dfe333bd": "copiesSold(uint256)", +"dfe33748": "TokensAreFrozen()", +"dfe346d0": "NicksTastyToken()", +"dfe3a52b": "CUTOFF_PRESALE_TWO()", +"dfe3e746": "setMasterNode(address)", +"dfe4858a": "constuctor()", +"dfe4c261": "approveTransaction(uint256,uint256,string)", +"dfe525a2": "addHandler(address,address,string,string)", +"dfe5ef48": "issue(address,uint256,uint256)", +"dfe64599": "getAllHpbNodesExt()", +"dfe699b1": "SetApplicant(string,string,string,int256,string)", +"dfe6af85": "testThrow_testablePayoutCaseShouldBeFailure()", +"dfe6d366": "gamblers()", +"dfe71183": "createCDPLeveraged()", +"dfe71486": "displayuserdetails(address)", +"dfe81a26": "GnarlyTimes()", +"dfe921cb": "lifeReserveTimeLock()", +"dfea6ec2": "placeBetWithInviter(uint256,uint256,uint256,uint8,bytes32,bytes32,address)", +"dfea8483": "Countout()", +"dfeade00": "AceEquityToken(uint256,string,string,uint8)", +"dfeb1719": "getNotaire()", +"dfeb1fd3": "getUserVotes(address,string,string)", +"dfeb34b6": "stakeFailOverRestrictionLifted()", +"dfeb3c49": "getNonces(address,address)", +"dfebb4ee": "viewMostRelevantClauses()", +"dfec375e": "calcCurPointsForAcct(address)", +"dfedff20": "getTwit(address,uint256)", +"dfee01d8": "mUpgradeSpeedup()", +"dfee2bad": "phaseReleaseAmount()", +"dfee6348": "COMMUNITY_PLUS_PRIORITY_SALE_CAP_ETH()", +"dfef54a3": "TihoToken(uint256,string,uint8,string)", +"dfef58a6": "registration(bytes32,uint256,address)", +"dfef5f69": "mintingStartTime()", +"dfefaf3f": "secureUnapprove(address)", +"dff0259f": "donationSum()", +"dff05de4": "pctDIDOwned(address,address)", +"dff114dd": "investedCrowdsaleTokenOf(address)", +"dff18fe0": "provideTeamHolderToken(address)", +"dff1ab15": "checkProposalCode(uint256,address)", +"dff2db71": "binaryAddress()", +"dff3f3b9": "ownerWithdrawal(uint256)", +"dff3f83e": "resolveRawDelegation(bytes32,uint256)", +"dff44b2f": "divorce()", +"dff4a5e8": "getRestaurant(address)", +"dff53231": "love()", +"dff538e6": "_currentDay()", +"dff5f5cb": "updateStartPhase(uint256)", +"dff649dc": "NameChanged(address,uint256,string,string,uint256)", +"dff675c2": "getDelivery()", +"dff79905": "LogTokenRemover(address,uint256)", +"dff90b5b": "sendFees()", +"dffa771f": "_setWeaponValue9(uint256)", +"dffb0bd1": "getPlayerTotalDividend(address)", +"dffbbef5": "stopDistribution()", +"dffbd9de": "TokenAdded(address,address)", +"dffcf9a7": "transferableHavvens(address)", +"dffd5e57": "buyToken(bytes32)", +"dffd6054": "changeGameAddress(address)", +"dffd722f": "totalEarn()", +"dffd9b8e": "CEO_TEAM_SHARE()", +"dffdc75d": "forward(address,bytes,uint256,bool)", +"dffe0a63": "getStatGames()", +"dffeadd0": "main()", +"dfff2f79": "autoReinvestFor(address)", +"dfffcbdb": "triggered(uint256)", +"e0004f43": "batchTransferTokenS(address,address[],uint256[])", +"e000eec3": "createPixel(uint24,uint32)", +"e0018f2f": "showPlayerSeasonScores(address,int8)", +"e001ddf1": "teamTokensCurrent()", +"e0020f1a": "tokensPerEthPublicSale()", +"e0024ae3": "_mine(uint256,address)", +"e002a486": "changeForwardTo(address)", +"e002f2ee": "cpCap()", +"e0031b1d": "GetDOTDelegatedRevoker(bytes32,uint8)", +"e003604e": "close(address,uint32,uint192,bytes)", +"e0036d1d": "verifyPosition(uint16,uint8,uint64)", +"e0041396": "slice(bytes,uint256,uint256)", +"e0046553": "ownerSetSpreadPremium(uint256)", +"e004b76f": "PermissionRemoved(address)", +"e004fe97": "CarRegistry(string)", +"e004feb0": "testFailMintGuyWhenStopped(int256)", +"e0056019": "setLand(uint8,uint8,uint8,bool,uint8[])", +"e0063224": "vouchers(bytes32,uint256)", +"e0068052": "division(uint256,uint256)", +"e00686e4": "rewardPerBlockPerAddress()", +"e006997c": "authenticate(string,bytes)", +"e007b330": "sterilize(uint256[])", +"e0081b8c": "approve(bytes32,bytes32,uint256)", +"e00824bb": "payCreator()", +"e0089ce7": "UCtestCoin(uint256,string,uint8,string)", +"e008cdf3": "SBSCoin()", +"e00a1e8b": "addToSendAllowed(address)", +"e00a7fc5": "transferFromOwn(address,uint256)", +"e00ab6dd": "private_setminBet(uint256)", +"e00ac9a3": "thirdTime()", +"e00bc0f4": "setIsContainerForMarket(bool)", +"e00bc7fb": "vota_un_candidato(address)", +"e00be2a9": "getErc20Rate(string)", +"e00cb0bc": "etherReceivedPrivate()", +"e00d0aed": "TalosToken()", +"e00d0f3d": "updateCandidateAddrByIndex(uint256,address,address)", +"e00d7e5c": "ExampleToken()", +"e00dd161": "currentId()", +"e00f882c": "numberOfExchInEstateNasAlice(address,uint256)", +"e00fb7b7": "getInvited(uint32)", +"e00fe2eb": "getText()", +"e01060f8": "transferOwnership(uint8[],bytes32[],bytes32[],uint256,address[])", +"e010c686": "newProposal(uint256,uint256,bytes32)", +"e011171d": "setDOwner(bytes32,address)", +"e0117441": "setRegistrationPrice(uint256)", +"e011ac87": "amountLeft()", +"e01330bb": "testMul(uint256,uint256,uint256)", +"e014a39f": "weiRaisedIncludingFiatCurrencyRaised()", +"e014a83f": "takeToken(address,uint256,string)", +"e01546a8": "fromFraction(int256,int256)", +"e01567cf": "ethBioxRate1()", +"e015c62a": "calculatePrice(uint256,uint256,uint256)", +"e015d863": "variation()", +"e016603f": "createMultipleShows(uint256[])", +"e0179e6c": "etherValue(uint256)", +"e0180115": "culcurateBonusRate()", +"e0182436": "cancelEscrow(uint256)", +"e0187d18": "third_partner_address()", +"e018c36c": "buyFirstPackFromReferral(address,bool)", +"e0192072": "Rescue(address,address,uint256)", +"e0195a53": "maxRandom(uint256,address,uint256)", +"e01964d0": "sterile(uint256)", +"e019ac29": "setKycCertifier(address)", +"e01a38c6": "ecrecoverSigner(bytes32,bytes,uint256)", +"e01a6ace": "vote_Candidate_name(bytes32[])", +"e01ac5a4": "giveReward(bytes32,address,uint8)", +"e01b1b10": "ICODays()", +"e01bb918": "_withdrawAll(uint256,address)", +"e01bc60b": "totalCustomBuyersMapping()", +"e01c6d4e": "cashin()", +"e01c979a": "GuneToken()", +"e01cd37a": "cancelSellingToken(address)", +"e01cdfaa": "getEmployeeInfoById(uint256)", +"e01cff84": "getTransferringForCount(address)", +"e01d1f3d": "MultiSigWallet(address[],uint256,uint256,string)", +"e01dd67b": "AMBASSADOR_THREE()", +"e01e0618": "feeDiv(uint256,uint256)", +"e01e92d2": "abs(int128)", +"e01ea00c": "getDarknodesFromEpochs(address,uint256,bool)", +"e01ef1f8": "addInventory(bytes32,string,string,string,string,uint256,uint256)", +"e01fff13": "familyContract()", +"e0201e07": "Eclipse()", +"e0204585": "get_bet(address,address)", +"e020b8a3": "contract_date()", +"e02163e7": "etherContributionOf(address)", +"e021b8cb": "useWeapon(uint8,uint8,uint8,uint8,uint8[176])", +"e021deff": "meta(address)", +"e022040c": "setReceiver5()", +"e02243ee": "buyInternal(address,uint256)", +"e023094f": "createDroid(uint256,string,uint256,uint256,uint256)", +"e023f90e": "getCity(uint16)", +"e02426c1": "getSignatureHash(bytes4,uint256)", +"e024ec5a": "getFmmsDetail(bytes32)", +"e0256835": "balancesCrowd(address)", +"e02584bf": "listPairForReserve(address,address,bool,bool,bool)", +"e025a666": "rewardPercentageDivisor()", +"e027034d": "isWithinIEO()", +"e028222f": "CreateABet(address,uint256)", +"e028ff3b": "lotteryGiveHuntMinimalNumber()", +"e0299621": "GBIToken(uint256,string,string)", +"e02b8b29": "HardcapToken()", +"e02ba030": "excess_token()", +"e02bc1c6": "bidDeposit(bytes32)", +"e02bcd3e": "getLendTokenBalance()", +"e02c3b5d": "getAllLeftLeg()", +"e02c7e1f": "timelockAllocationAddress(address,uint32)", +"e02c85a4": "_checklottery(uint32,uint32)", +"e02cec51": "refund(address[])", +"e02d1c0e": "tradeStarttime(uint256)", +"e02d306f": "getUNTSQM()", +"e02df495": "MAX_ETHER_24H()", +"e02f8d33": "PRICE_STAGE_THREE()", +"e02f9027": "iTime()", +"e02fab06": "anubisToken()", +"e0300fc4": "unregisterFor(address,bytes32,address,uint256,uint256,uint256)", +"e0303a2e": "getFirstTwoOutputs(bytes)", +"e0304542": "oddEven(uint8)", +"e0307e94": "gcsp(uint256)", +"e030bbd5": "tokenToPointByMetaMask(uint256,uint256)", +"e030dfb9": "emergency(bytes32,bytes1)", +"e03179b4": "LogContribution(uint256,uint256)", +"e031d6f0": "isICOFinished()", +"e0328c5f": "setRecovery()", +"e0328c80": "hasRedeemed(address,address,uint256)", +"e033192c": "gettransferableStartTime()", +"e03335b4": "_calculatePricePerPixel(uint256)", +"e033f73c": "executeApplication(address)", +"e0340a05": "Maya_Preferred()", +"e035e1ac": "thirdBonusEnds()", +"e03652c2": "isTransactionPending()", +"e0376e74": "LOG_EmergencyWithdrawalSucceeded(address,uint256)", +"e037a71c": "withdrawLimit(address,uint8)", +"e03827d2": "left70(uint256)", +"e0389a47": "removeAccountMilestone(address)", +"e038c75a": "circulating_supply()", +"e0391b6f": "trackable_dislikes(address)", +"e03992fd": "nextForkUrl()", +"e039967c": "migrateTransfer(address,address,uint256,uint256)", +"e039e4a1": "getOwner(uint8,uint8)", +"e039f224": "isFork()", +"e03b3044": "setAyantDroitEconomique_Compte_7(uint256)", +"e03bc7e1": "_registerDevice(address,bytes32,bytes32,bytes32)", +"e03c151e": "LogSetSTOContract(address,address,address,uint256,uint256)", +"e03c1c4b": "setLineStartTime(uint256,uint256)", +"e03c639c": "addPreSaleWallet(address)", +"e03cca4d": "setChallengeFormulaContract(address)", +"e03d890b": "_addTokenToAllTokensEnumeration(uint256)", +"e03e09a8": "_createAuction(address,address,uint256,uint256,uint256)", +"e03ec01d": "getTargetWallet(address)", +"e0401918": "SMRToken()", +"e0402d26": "validDoHash(bytes32)", +"e04093d6": "updateOracleWithENS()", +"e040c164": "createT513(uint256,uint256,address)", +"e040f3e1": "_humanSender(address)", +"e0412a54": "setBonusRound2(uint256)", +"e0429b6c": "ShinySquirrels()", +"e042ad58": "operationWallet()", +"e0443e92": "LogCreate(address,address,uint256,uint256)", +"e0446273": "messageIsEmpty(string)", +"e044c2de": "newLoan(bytes,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"e044c47f": "playerRollDice()", +"e0453376": "hasFourYearWithdraw()", +"e0457049": "trustedInput()", +"e0457884": "betResolution(uint8,uint8,uint8,bool)", +"e0462547": "setEndPreSale(uint256)", +"e0462d0a": "coreTeamMemberOne()", +"e046c4dc": "Delete()", +"e046f06f": "deathData_a1()", +"e0470e02": "matureDragon(uint256)", +"e0472e36": "swapProposal(uint256)", +"e0475e27": "holderMarketingTokens()", +"e048d0fc": "voteCancelCurrent()", +"e0495a64": "getNormalBuyers()", +"e04a1942": "test_fourValidEqUint()", +"e04a2525": "NoahDividend(address)", +"e04a8c08": "Sold()", +"e04ac09e": "BountyIssued(uint256)", +"e04c130b": "token_transferFrom(address,address,address,uint256)", +"e04c1830": "findNextHour(uint256,bytes2)", +"e04cd07c": "BOLTH(address,address[],address)", +"e04d5105": "calculateSeedBuySimple(uint256)", +"e04f31e9": "forward(address,uint256,bytes,bool)", +"e04fac0c": "aVideoCost()", +"e0504910": "buyWithTokens(address)", +"e050674c": "_deliverWhitelistBonus(address)", +"e0522012": "getAdjustedPotAsFixedPointForGameId(uint256,bool)", +"e052a587": "isNotExpired(uint256,uint256)", +"e052f0c8": "setParams(string,string,string,string,uint256,address,uint256)", +"e053178a": "XCPlugin()", +"e0539225": "preicoPrice()", +"e054057d": "LogBuy(uint256,address,uint256)", +"e0540d85": "CDreamingICO()", +"e054c029": "changejp2(address)", +"e055bba4": "turnId()", +"e056989a": "OfferUpdated(uint256,bytes,uint256,address)", +"e056c1eb": "isGlobalPause()", +"e056f2ff": "takerFeeRateE4()", +"e0576665": "addLen(string)", +"e0585ce8": "BetcoinICO()", +"e058cc59": "setMemeTemplate(string)", +"e0591ddc": "gizerItemsContract()", +"e059c868": "private_UpdateGameBarLimit(uint256,uint256)", +"e05a48cd": "unregisterVendor(address,address)", +"e05b4c5f": "GetReferredAt(uint256)", +"e05b5456": "ChenToken(address,address)", +"e05bac82": "amountReceivedFromExchange(uint256)", +"e05c5a83": "sellerOf(uint256)", +"e05cb6f4": "Mitrav()", +"e05d769e": "expirationSeconds()", +"e05e3028": "getCommunityManagement(uint256)", +"e05e91e0": "returnUint64(uint64)", +"e05ea744": "frost()", +"e05ee7a4": "RATEotu()", +"e05f149e": "getTotalRuns()", +"e05f7d67": "setPCoinContractAddress(address,address)", +"e05fad90": "decode(bytes,uint256,uint256)", +"e0607290": "confirmChangeOracle()", +"e06174e4": "settings()", +"e0619859": "At(uint256,bytes32)", +"e061ddca": "getSensorAddress()", +"e0623632": "UNSOLD_ADDRESS()", +"e062aff8": "startTimeNumber()", +"e06309bb": "ValueOwners()", +"e06375c8": "_fDist()", +"e063a439": "_computeFee(uint128)", +"e06452d0": "Completed()", +"e064bc82": "setFoundersTokensWalletSlave(address)", +"e064c1ec": "denyChanges()", +"e065029e": "PokemonPow()", +"e0655fe5": "changeBuyFee(uint256)", +"e06572ec": "sell(address,uint256[],uint256[],bool)", +"e065914c": "isPersonalLock(address)", +"e065e388": "NewBOP(address)", +"e067ea46": "Etherep(address,uint256,address,uint256)", +"e067f631": "intervalUpdate()", +"e06868e2": "numberOfBet()", +"e06902fa": "ito()", +"e06a09ec": "calculateInterestIndex(uint256,uint256,uint256,uint256)", +"e06a60ff": "HumanityCard()", +"e06aa145": "TokenBurned(address,uint256,uint256,uint256)", +"e06abd36": "updateMAX_AMOUNT(uint256,uint256)", +"e06af204": "BetlyCoin()", +"e06b5837": "getCanSellUnit(address,address,uint256)", +"e06b7e39": "getInitOrInput()", +"e06b850c": "testIntParserTwoDecimal()", +"e06c0fd2": "SatoshiToken()", +"e06c5808": "burnFromAddress(uint256)", +"e06d8de9": "acquisitionsLockEndingAt()", +"e06e0051": "withdrowETH()", +"e06e0e22": "postRelayedCall(bytes,bool,uint256,bytes32)", +"e06e0e43": "overLimit()", +"e06e3873": "encrypt(uint256[])", +"e06e6b20": "Like(bytes32,bytes32,uint256)", +"e06e82b2": "teamNIMFAAddress()", +"e06e9d22": "addCustomerTokenAmount(address,uint256)", +"e06ec0bb": "isListing()", +"e06f3d38": "ownerA()", +"e06fa13d": "ETCL()", +"e06fa68e": "updateAfter(uint256)", +"e06fc6d4": "mainsaleRemaining()", +"e0709589": "blink_block()", +"e0715a86": "unlocksCount()", +"e071681d": "setManyAccountsVerified(address[])", +"e071c0ca": "transferVaultOwnership(address)", +"e072830c": "FUNDING_ETH_HARD_CAP()", +"e0728801": "ANV()", +"e072bd10": "getPlayerInventory(address)", +"e073ef69": "pubKeyToBitcoinAddress(bytes,bool)", +"e0741187": "createBreedingAuction(uint256,uint256,uint256,uint256)", +"e074278d": "setOwnerAddr(address)", +"e074b027": "hasExecuted(uint256)", +"e074bb47": "removePermission(address)", +"e074ee55": "getPeriodsToPay(bytes32,address,uint256)", +"e0755792": "Permission(bytes32,address[],bytes4[])", +"e0755b35": "WePOW()", +"e076c0ae": "queryNow()", +"e0772f6a": "CROWDSALE_TOKEN_IN_WEI()", +"e0775be1": "create(address,address,address,address,address,address,address)", +"e0778211": "_releasableAmount(address,uint256)", +"e077ca97": "fx()", +"e078c549": "getNumberOfTokensToIssue(uint256)", +"e07959bd": "setGainsRate(uint256)", +"e079e334": "getNewCoinFee()", +"e079e7e5": "addStock(string,uint256,uint256,uint256,uint8)", +"e07a2671": "migrationSetPlayer(bytes32,uint256,bytes32,address,uint256,uint256,uint256)", +"e07a31c7": "getWinningCount(uint256,uint256)", +"e07a5d29": "CLRCoin()", +"e07be247": "createSellENS(string,uint256)", +"e07c80fb": "getKindAddress()", +"e07ccdeb": "totalPartnerWithdrawSupply()", +"e07cd936": "ArtcoinPlaceholder(address,address)", +"e07d4f6b": "saveCarDataTransaction(address,address)", +"e07f0b66": "SendMessage(uint256,string,address)", +"e07f0f13": "ZhangPeiPei(uint256,string,uint8,string)", +"e07f0f5e": "transferToken(address[],uint256[])", +"e07f3dd6": "go(uint8)", +"e07fa3c1": "withdrawFund()", +"e080241c": "setNFTDetached(uint256)", +"e080b60c": "apiCallsContractAddress()", +"e0812c75": "migrateInvestorFromHost(address,address)", +"e0813e25": "getRandomInt(uint256)", +"e0813e5e": "updateTokensPerEthOnce(uint256)", +"e08155dd": "ICO_PERCENTAGE_4()", +"e0815ca9": "findNextMinute(uint256,bytes2)", +"e0818669": "lps()", +"e081b569": "DiceOnline()", +"e081fdfe": "availableBalanceOf(uint256,uint256)", +"e082707c": "_uintToString(uint256)", +"e0832cf6": "getWinCount(address)", +"e0834ea4": "WatchBalanceInEther()", +"e083a1b5": "_createEstate(int256[],int256[],address,string)", +"e083d4c8": "dividendBalanceOf(address)", +"e084a819": "prepareCrowdsale()", +"e08503ec": "calculateNextPrice(uint256)", +"e085448f": "FIRST_USER_CUT()", +"e085942a": "getSubjectMattersSize()", +"e085c539": "getPlayerScore(address)", +"e085f82b": "rejectCertificate(address)", +"e086141d": "Assigned(address,uint256)", +"e0862fd7": "getNumBadBets(uint256)", +"e086e5ec": "withdrawETH()", +"e0873c06": "reissueAsset(bytes32,uint256)", +"e08761f5": "dtValidateCitySnapshot(address,uint256)", +"e087cd55": "withdrawIncentives()", +"e0882af8": "airDrop(address,address[],uint256[])", +"e0886f90": "at(uint256)", +"e088747b": "withdraw(address,uint256,string)", +"e088a96b": "claimerUnset()", +"e08a5f9e": "startPresaleDate()", +"e08ac014": "unlockPeriodNum()", +"e08b63ad": "getAddTokenNonce()", +"e08bc3fe": "parseInt(bytes)", +"e08d28d3": "maxInvestmentICO()", +"e08d8497": "ICO_LEVEL_2()", +"e08e433a": "transferTime()", +"e08ed5f9": "withdrawBid(int256,int256,int256)", +"e090318c": "setFacts()", +"e090ebab": "VUO()", +"e0911183": "devTeamAutoBuy(uint256,uint256)", +"e091de56": "MDA()", +"e091f453": "setDividend(uint256)", +"e0929b95": "claimFreeFirstCard(address)", +"e092e85f": "getStakedBalanceUnOrdered(uint256,bytes32)", +"e093a157": "abs(uint256,uint256)", +"e09413ba": "totalDistributedAirdrop()", +"e0945a80": "wbcoin()", +"e0950ddf": "getBet(uint256,address)", +"e095f814": "etherToToken(uint256)", +"e0963ced": "LinkEyeStandardToken(uint256,string,uint8,string)", +"e09678fd": "setIcoContract(address)", +"e097e7b9": "sendTokensBack()", +"e098161b": "getRareCoinAddress()", +"e09874c0": "setPlayConfigs(uint256,uint256,uint256)", +"e0987873": "BurnedAllRemainedTokens()", +"e098c76d": "optionPoolTotalMax()", +"e09adc70": "ethToTokenRate()", +"e09ca60c": "secureApprove(bytes32,uint256)", +"e09ceada": "_newAuction(uint256,uint256,uint256)", +"e09cffcf": "SingularityTest18()", +"e09d0b75": "compareLeaf(uint256,uint256,uint256,uint256)", +"e09dbfa4": "checkPatternExistance(bytes32)", +"e09dd024": "FNCTToken()", +"e09ded57": "lengthOfCommonPrefix3232(bytes32,bytes32)", +"e09e9490": "releasePendingTransfer()", +"e09ea701": "BaseMonoretoCrowdsale(uint256,uint256,uint256)", +"e09ee57f": "feePercentageMax()", +"e09ef83e": "promoCutieCreatedCount()", +"e09f0020": "subCreditScore(uint256,string)", +"e09f310a": "get_iconiq_presale_open(address)", +"e09f6f49": "successAtBlock()", +"e0a09c1f": "Crowdsale(address,address)", +"e0a0f50d": "setSlaveWalletPercent(uint256)", +"e0a1a292": "addressAdvisors()", +"e0a1be53": "updateTargetedMoneyReached()", +"e0a1ca6e": "winningChance()", +"e0a1fdad": "unset(bytes12)", +"e0a21739": "setBlackFundsWallet(address)", +"e0a27b2c": "withdrawWinnings(uint256,uint256)", +"e0a29e23": "owner_freeze_start()", +"e0a3bff7": "RollCount()", +"e0a3e7ec": "computeDeferBlock()", +"e0a49f14": "setMatchOutcome(uint256,string)", +"e0a4aacb": "ExacoreContract(uint256,string,string)", +"e0a53397": "createSingle(uint256)", +"e0a550fc": "closeMainSaleICO()", +"e0a60ea3": "BITTOToken()", +"e0a62339": "getSha256_UInt(uint256,uint256)", +"e0a668b4": "setVesting(address,uint256,uint256)", +"e0a70811": "restart(bytes20,bytes)", +"e0a73a93": "premium()", +"e0a7527d": "updateCABoxToken(address)", +"e0a7b2c3": "startChallenge()", +"e0a802ba": "scanInputs(bytes,uint256,uint256)", +"e0a827c6": "RxI()", +"e0a8299f": "galleryTwo()", +"e0a82ea8": "setMinBetPerRoll(uint256)", +"e0a8aa72": "channelOpened(uint64)", +"e0a8f6f5": "cancelProposal(uint256)", +"e0aa5654": "getCountReadyPlayerByTrackId(bytes32)", +"e0abdf66": "setBlockTimestamp(uint256)", +"e0ac2b72": "HaHaChainToken()", +"e0ac50cb": "isTreasureBox(address)", +"e0ac61bb": "changeOwnerSharePerThousandForMating(uint256)", +"e0acac7f": "withdrawSum()", +"e0ad411d": "assets(bytes)", +"e0ae751f": "setAuthorizedContract(string,address,bool)", +"e0ae96e9": "din()", +"e0b1cccb": "updateBalance(address,uint256)", +"e0b1cecd": "DataToken()", +"e0b30178": "OVCLockAllocation(uint256,address,address,address)", +"e0b3198c": "serverPort()", +"e0b34ef1": "_setERC820compatibility(bool)", +"e0b3c49c": "acceptTermsAndJoinDXF()", +"e0b3cc90": "priceOf(uint32)", +"e0b438ef": "removeNameByOwner(string)", +"e0b45487": "_setValidator(address)", +"e0b490f7": "getAccountId(address)", +"e0b4cf0a": "setMinMaxBet(uint256,uint256)", +"e0b6cddd": "LLV_311_EDIT_2()", +"e0b78225": "RemoveTrustedContractAddress(address,address)", +"e0b86c53": "decreaseLock(uint256,uint256,address)", +"e0b999a1": "getAmount(address,uint256)", +"e0b9e83d": "update(address,address,address,uint256,uint256,address)", +"e0bab523": "for_rewards()", +"e0bb933b": "getDragon(uint256)", +"e0bc6c44": "claimInsurance(bytes32)", +"e0bc6dea": "removeTransferableAddress(address)", +"e0bd3015": "getClaimableBalance()", +"e0bd53be": "sellTokensForZec(string,address,uint256,uint256)", +"e0bd7d15": "addContributor(address,uint256)", +"e0bede59": "firstPeriodSupply()", +"e0bfa1f7": "removeUtilityHolder(address)", +"e0bfe9ad": "MAX_TOKENS_RESERVE()", +"e0c012ff": "modifyairdrop(uint256,uint256)", +"e0c104ad": "DONC()", +"e0c2bc77": "CDEos(uint256,string,uint8,string)", +"e0c2dcbd": "last_win_wei()", +"e0c4cea8": "GrowToken()", +"e0c5f3a0": "add256(uint256,uint256)", +"e0c6046c": "donateToProject(uint16)", +"e0c6190d": "checkTime()", +"e0c63902": "Ok()", +"e0c67b9c": "ROKToken()", +"e0c68158": "changeIssuanceAddress(address)", +"e0c68db0": "shr(uint32,uint8)", +"e0c6d1ed": "migrateForInvestor()", +"e0c78337": "XITOToken(address)", +"e0c7c117": "Randao()", +"e0c82651": "RWToken()", +"e0cb3aa0": "buyWithLimit(uint256,uint256)", +"e0cbbde7": "makeCode(uint256,string)", +"e0cbc2cb": "changeInGameAmount(uint256)", +"e0cbf845": "testAddLocked()", +"e0cc4e1b": "LifCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"e0cd34f6": "getBlockBuildFee(uint256)", +"e0cd6eff": "board_size()", +"e0ce0b79": "processSeason(uint32)", +"e0ce72cb": "_fConfig()", +"e0ceb25b": "fairsaleProtection()", +"e0cec919": "setDailySupply(uint256)", +"e0cee23f": "SuccessfullyTransferedFromCompanyInventory(address,uint256,bytes32)", +"e0cf1316": "_transferPlayer(address,address,uint256)", +"e0cf17a5": "totalStoredDDT()", +"e0cf1e4c": "removeMembers(bytes32,address[])", +"e0cf715d": "EtherTrend()", +"e0cf72e1": "ERC20Token(uint256,string,string)", +"e0cfc05c": "testThrowsRetractLatestRevisionDoesntHaveAdditionalRevisions()", +"e0cfde22": "setRestrictedParticipationCap(address[],uint256)", +"e0d05c51": "MemoireClement()", +"e0d1ba52": "Rate_Eth()", +"e0d2771d": "MINIMUMINVESTMENTPRESALE()", +"e0d29d38": "STARTING_POOH()", +"e0d3558e": "GetBoosterData(uint256)", +"e0d370ac": "site()", +"e0d4ea37": "getSeed(uint256)", +"e0d4ea7e": "addDestructionProposal(string)", +"e0d54970": "getInstructions()", +"e0d5af94": "ownerWithdrawAll()", +"e0d669d8": "tradesLock(address)", +"e0d6d530": "setContracts()", +"e0d751da": "returnBets()", +"e0d77ff6": "hasBeenBooted(uint32)", +"e0d79d38": "addcertifieddata(string,string,string)", +"e0d872b7": "getSideServices()", +"e0d9bc7b": "sybmol()", +"e0da260c": "widthdraw(uint256)", +"e0da4abd": "getDefaultExchangeRate()", +"e0db6781": "offerDraw(bytes32)", +"e0db874d": "moneyBack(address)", +"e0dba60f": "setController(address,bool)", +"e0dbbea2": "search(uint256,bytes32)", +"e0dc892c": "GiftHasBeenSent()", +"e0dcf2d8": "processInitialDistribution()", +"e0dd31da": "MDCSToken(uint256,string,uint8,string)", +"e0dda563": "GetContractStagePreMoveIn()", +"e0ddaa0e": "MAX_TOKEN_BUYIN()", +"e0dec0c0": "contractValue()", +"e0df51bb": "test_oneValidAndInvalidEqAddress()", +"e0df53b9": "LotteryRoundStarted(bytes32,bytes32,uint256,string)", +"e0df5b6f": "setTokenURI(string)", +"e0dfd0a6": "GIFTCOIN()", +"e0e04685": "setOldContract(address)", +"e0e081d7": "marketStatus()", +"e0e0e2d3": "random(uint8)", +"e0e1104d": "tierWhitelist(uint256)", +"e0e11a14": "newVowIdFlag(address,uint256,uint256)", +"e0e1593c": "decayedPriceFrom(uint256,uint256)", +"e0e16f91": "TestContract(address,uint256)", +"e0e1a7f0": "testSHA3()", +"e0e267e5": "minimumWei()", +"e0e29ac1": "SLMICO(address)", +"e0e32504": "isDaySixtyChecked()", +"e0e34e06": "getGlobalConstraintParameters(address,int256,address)", +"e0e3671c": "checkOwner(address)", +"e0e3b9d7": "ImmutableShares()", +"e0e3ba5a": "getLosesShare(address)", +"e0e3feae": "skimALittleOffTheTop(uint256)", +"e0e40349": "name(address,bytes32)", +"e0e4704e": "RequestDetachmentOnPause(uint256)", +"e0e4731a": "TokenGoalReached()", +"e0e4c438": "sendInternally(address,uint256,uint256)", +"e0e58009": "BookingPoC(address,address,uint256)", +"e0e5fffd": "preSale4()", +"e0e69937": "setDefaultVestingParameters(uint256,uint256,uint256,uint256,bool)", +"e0e6d6cb": "requireValidIndex(uint256,uint256)", +"e0e7127a": "getContractOwnerAddress()", +"e0e722b7": "MAX_ALLOWED_STAGE_3()", +"e0e81ccb": "getCurrentSchellingRoundID()", +"e0e848c0": "checkDone()", +"e0e84e81": "changeCompanyWalletAddress(address)", +"e0e85fe8": "StatEventA(string,address)", +"e0e8823c": "withdrawDai(uint256,address)", +"e0e8a555": "KAL3Token()", +"e0e9b349": "getReportRegistrationFee()", +"e0ea129e": "militaryToken()", +"e0eb3035": "registerAudits(bytes32[],bytes,bool)", +"e0eb60b2": "initialSpinners(uint256)", +"e0eb6613": "PresalePool(address,uint256[],uint256)", +"e0eb9449": "mateAnimal(uint256,uint256,string,string)", +"e0ebd259": "discountValue()", +"e0ebdbff": "getAuditRequestor(uint256)", +"e0ec289a": "creditsExchanged()", +"e0ed78d1": "setRouletteRules(address)", +"e0ee74e9": "changeActualQueue(address)", +"e0ee94e9": "PocketCoin()", +"e0eef0b9": "BOOKIE_POOL_COMMISSION()", +"e0efdaf9": "softCapTokensAmount()", +"e0f0497d": "currentTokenSaleId()", +"e0f06352": "testIsContractAddress()", +"e0f20a65": "etherLock()", +"e0f31fae": "isDoneReporting(address)", +"e0f32198": "runSweepStake()", +"e0f3691d": "thisEther()", +"e0f426fa": "numMCApplied()", +"e0f47580": "withdrawCommisionToAddress(address,uint256)", +"e0f4a1a2": "minimumPRETDEContributionInWei()", +"e0f4ed01": "parcelEth()", +"e0f50bac": "senderWithdrawal(uint256)", +"e0f609d4": "unsafeIsEncrypted()", +"e0f6cc07": "isChain(string)", +"e0f74cde": "BONUS_TIMES_VALUES(uint256)", +"e0f76121": "GlobalCryptoShares()", +"e0f771c9": "Bithumb(uint256,string,string)", +"e0f7b44d": "PreTgeExperty()", +"e0f898e4": "totalTokenLossValue()", +"e0f8c670": "getFirstPaymentAmount()", +"e0f8da97": "sponsoredBonusToken()", +"e0f9210b": "batchDistributeReward(address[],uint256[],uint256)", +"e0faf0a8": "getOnSaleIds()", +"e0fb8459": "recevedEthFromExchange(address,uint256)", +"e0fce922": "deliver(address,uint256,uint256)", +"e0fd59bf": "disableAdminForever()", +"e0fddf81": "setemployee(address,string,uint256)", +"e0fdf336": "finalReserveTimeLock()", +"e0fe01f4": "makePrediction(int8,string)", +"e0fe075e": "payoutReady()", +"e0fe42be": "existsPriceOnAssetPair(address,address)", +"e0fe4a84": "updateStrategyCategory(bytes15,uint256)", +"e0fe6d07": "SideBridge(uint256,address[])", +"e0fe9ccf": "WaltonTokenLocker()", +"e0ff5b8b": "getBook(uint256)", +"e0ff5d2f": "setMaxRacers(uint8)", +"e0ffa0da": "lastBlock_f13()", +"e0ffe8e3": "newOrder(string,string,uint256,uint256,string,string,string)", +"e1005556": "allowTransferWhitelist()", +"e1017332": "sellPaused()", +"e1021b53": "getLuckyRecordSize()", +"e10289b8": "addContributor(uint256,address,uint256)", +"e102baab": "setTokenController(address)", +"e102d950": "getNameHash()", +"e1036f86": "tax_distributed()", +"e103f176": "transfer_master(address,address,uint256)", +"e1041d86": "__throw()", +"e106fae9": "lottoLowestNumber()", +"e106fb4b": "stringToBytes(string)", +"e1082335": "to(bytes32,address)", +"e1089240": "Csts()", +"e108d2d6": "setMintAdminApproval(address,address,address)", +"e1094ff6": "DGZTokensSold(address,uint256)", +"e1097249": "initStage()", +"e109ef24": "setTokenOperatorApprovals(address,address,bool,bool)", +"e10a70b7": "LogRedeemVIBE(address,uint256,uint256,uint256)", +"e10aa985": "Elyxr()", +"e10b650b": "winnerWithdraw()", +"e10bcc2a": "startMilestone(bytes32,uint256,address,uint32)", +"e10be707": "changeGoodBye(string)", +"e10c7bb5": "EventStore()", +"e10d29ee": "queue()", +"e10d416f": "enablePurchasing(bool)", +"e10d4c0b": "isSaler(address)", +"e10e274a": "CrazyEarning()", +"e10e5dce": "_build(bytes)", +"e10e66e6": "changeWeiPerToken(uint256)", +"e10e8ffe": "doOraclize()", +"e10e95c9": "fundingEnabled()", +"e10eda7a": "IOCFundIndex()", +"e10f1b06": "isTournament(address)", +"e10fb98f": "testMul()", +"e1103422": "retractRewards()", +"e11074cb": "initFund()", +"e1108706": "rfind()", +"e1112648": "record(bytes)", +"e1115aa5": "addUserRewards(uint256,uint256,address)", +"e1134799": "claimDaoStakeSupply(address)", +"e11398e8": "burnLeftovers()", +"e113c6fd": "ICO_SINCE()", +"e11443cb": "UWNToken(uint256,string,string,address)", +"e1152343": "payout(uint256)", +"e11527d4": "linkedContract()", +"e11583b7": "TokenOPSSaleAddress()", +"e116b17e": "getKudosLeftForProject(address,address)", +"e1175a79": "getMyTickets(string,address)", +"e117e6f9": "MyToken(uint256,string,uint8,string,uint256,uint8,uint256,string,string,string,string,string,string,string)", +"e1181c73": "faucetLif()", +"e1187e2e": "getCollectibleWithMeta(uint256)", +"e118eda4": "featuredSpritesLength()", +"e118fba2": "redeemPurchases()", +"e119f8bb": "migrateMarketInFromNibling()", +"e11a5a4f": "allocateStartBlock()", +"e11aa56d": "getDeedTimestampByAddress(string,uint256)", +"e11b09e0": "softCapCompleted()", +"e11b53af": "getContributionsCount()", +"e11dba54": "messagesLength()", +"e11df80d": "batchVipWithLock(address[],uint256[],bool)", +"e11e1b0c": "escrowBalance()", +"e11efa06": "getProgress(uint256)", +"e11f493e": "reentrancy()", +"e11f6398": "MAXIMUM_PERCENT()", +"e11fe9ec": "hasItem(uint256,uint256)", +"e12073a0": "getAllDetails(address)", +"e12097b7": "getCurrSale()", +"e121c102": "incentives(uint256)", +"e1221400": "getCoinInfo(string)", +"e1226164": "getFamilyById(address)", +"e122c028": "totalLBSold_GENERAL_2()", +"e122f1b2": "GoldenCurrencyToken()", +"e123182b": "purchase(bytes32,uint256)", +"e1248d52": "DYLC_ERC20Token()", +"e124e37b": "add_allowedAddress(address,address)", +"e124f899": "toPool()", +"e1252b9b": "make_anonymous_registration(uint256,uint256)", +"e1254fba": "getDeposit(address)", +"e125501f": "refundParticipants(uint256)", +"e125f88b": "aoccoin()", +"e1266042": "setTakeOwnershipFeePercents(uint256)", +"e126eb7d": "referralCodeFromAddress(address)", +"e1270b6e": "approval(address,address)", +"e1281280": "setAddressUIntMapping(address,uint256)", +"e12849b2": "getMineGenesis()", +"e1287520": "getBets(uint256,uint256)", +"e128f0d6": "getTogetherDate()", +"e12925a9": "setUnownedNickname(uint256,string)", +"e129330b": "factorContributed()", +"e129c99d": "notaryBookSize()", +"e129f783": "NameRegistered(address,bytes32)", +"e12a3bbe": "icoAllocation(uint256)", +"e12a894e": "CbdStandardToken(uint256,string,uint8,string)", +"e12badcf": "PlatformInformation()", +"e12bcd68": "relayerName()", +"e12bceeb": "performEqual(address,address[],uint256)", +"e12cbb3c": "SIGNAL_DELAY()", +"e12cbb9e": "updateOrderBatch(bool[],uint32[],uint128[],uint128[],uint32[],int256)", +"e12ed13c": "currentBlock()", +"e12ee8d7": "totalAmountRaked()", +"e12f3a61": "getClaimableAmount(address)", +"e12f670f": "DiscourzeToken()", +"e13044fb": "changeEth_to_usd(uint256)", +"e13062c2": "getInvoices(address,uint256[])", +"e1313dfb": "additionalInfo(uint256)", +"e13245b1": "getCommunityBallotsEnabled()", +"e13251b9": "listAssetsFrom(uint256,bytes32,uint256,bool)", +"e132db41": "checkRate()", +"e1332ab9": "setParameter(string,string)", +"e13380e9": "EmClassic()", +"e133ad53": "extendCost(uint256)", +"e1345b02": "SMARTGold()", +"e134c9ff": "shutdownMarket(address,bytes32)", +"e134e33d": "reason()", +"e1351c05": "pay_coin()", +"e1370365": "makeLogFill(address,address,address,address,address,uint256,uint256,uint256,uint256,uint256)", +"e137047b": "RESELLING_LOCK_UP_PERIOD()", +"e1376da2": "updateFirstActiveGamble(uint256)", +"e137cdd9": "totalTokenCreationCap()", +"e138efb2": "setAllowStart(bool)", +"e139bbd8": "getBalance1(address,address)", +"e139e569": "getPriceAndTime()", +"e13a7716": "testReturn()", +"e13aba48": "testBurn()", +"e13bd03c": "delCashier(address,address)", +"e13c6b39": "externalContribution(address,uint256)", +"e13da09f": "HARJToken(string,uint8,string)", +"e13dc28b": "testValidTransfers()", +"e13e2ecf": "dev_issueTo(address,uint256)", +"e13ec1fa": "RoundChanged(uint256)", +"e13efb79": "getReferenceHash(bytes32)", +"e13fafdb": "marketCoins()", +"e13fe91c": "REALPlaceHolderMock(address,address,address)", +"e1404b41": "setNewMembers(address,address,uint256,uint256)", +"e1419546": "makeLiquid()", +"e1421a45": "makeIntString(string,uint256,string)", +"e142967e": "addClaim(uint32,int256,string,string,bytes)", +"e1437b00": "calculateCurrentMarketPixelPrice(address[16])", +"e143b3a1": "createNewEscrow(address,address,address)", +"e1444721": "minGoalReached(uint256,string)", +"e1472d88": "increaseBalance(address)", +"e1479d07": "megoAddress()", +"e1479ebe": "is_registered(bytes32)", +"e1482188": "showCollectedFee()", +"e1486ea8": "getContest(uint32)", +"e1489191": "commission()", +"e148bae9": "assignClientIfNotAssigned(address)", +"e148fe28": "transferTokensFromReserveAddress(address,uint256)", +"e1496d16": "TEAM_NAMES(uint256)", +"e149f036": "ownedTokens(address,uint256)", +"e149fbfa": "ShapeshiftBotSolo(string)", +"e14a147e": "addPokemon(string,address,uint256)", +"e14acc04": "getCanLoanAmount()", +"e14b238a": "EITToken()", +"e14b7571": "stage_3_price()", +"e14b983e": "LevelToken()", +"e14c4675": "rateForMainICO()", +"e14c5e17": "setcreatorAddr(address)", +"e14ca10e": "oraclizeCallbackGasLimit()", +"e14df8b7": "subDepotEth(address,uint256)", +"e14e1ba7": "_getTokenAmountWithReferal(uint256,uint8)", +"e14e5ca4": "BETHER()", +"e14ed045": "getContributionOf(address)", +"e14f08d5": "renounceTokenOwnership()", +"e14f680f": "sendAll()", +"e151fb62": "_updateMetadata(uint256,string)", +"e153591c": "FairyFarmer()", +"e1538b32": "gasPayback()", +"e1539c53": "claim(bytes32,string,string)", +"e153af40": "RiyazToken()", +"e153b74e": "tokenFallback(address,uint48,bytes)", +"e154179e": "addToTrusted(string)", +"e1541b7d": "testDiacritcs()", +"e1541bc3": "setTdeIssuer(address)", +"e154d17d": "heldTokens(address,uint256)", +"e155999e": "getFreeCrocs()", +"e155b66c": "ConvnertToSecret(uint8,string)", +"e15618b9": "founderWithdrawablePhase4()", +"e1567997": "kscBatchTransferToBounty(address,address[],uint256[],uint256,uint256[],string)", +"e1568024": "totalAmountOfCrowdsalePurchasesWithoutBonus()", +"e1569f6b": "testThrowsSetNotRetractableNotOwner()", +"e15746af": "TJCUToken(uint256,string,uint8,string)", +"e157819a": "distributeCOMIKETCOIN(address[],uint256)", +"e1587aae": "maxFinneyPerSaleLessThan()", +"e158a24e": "ethTransfertoACC(uint256)", +"e1590ed7": "mainEtherReceived()", +"e15a307c": "killAndRefund()", +"e15cba26": "_pay(bytes32,address,uint256,uint256,uint256)", +"e15d051f": "adminUnsigned(address)", +"e15e9d47": "depositFlag(address,uint256,uint256)", +"e15f3ec2": "Sent(address,address,int256)", +"e1606013": "issueCert(uint256,bytes)", +"e160a1d6": "manaPerEth()", +"e160e146": "createContractToken(string)", +"e161c3bf": "getPercentage(uint256)", +"e1621b04": "getDatePosted(uint256)", +"e163698a": "setTokenForPublicSale(uint256)", +"e16385fc": "destroyTokens(uint256,address)", +"e163b75b": "settleBet(bytes20,bytes20,bytes32)", +"e164483f": "numberOfBlocksToStartGame()", +"e164ac50": "teamPercent()", +"e1654fad": "roundIn(uint256,string)", +"e1661eff": "getClaim(address,address,bytes32)", +"e1661ff2": "Later(address)", +"e1662aa6": "saveMsgByUser(string,string)", +"e166b756": "ownerMethod()", +"e166bebd": "BINOToken()", +"e1674588": "getTokenURIs(uint256,bool)", +"e1675421": "changeFsTKAuthority(address)", +"e167dbca": "exchangeTokens()", +"e168a31a": "getOwnedArea(address)", +"e168ae8a": "_isPreICO()", +"e168c3ec": "votes()", +"e16b924d": "sellBonds(uint256,bool)", +"e16ba8c6": "privateSale1Hardcap()", +"e16bd3b7": "getSales(address)", +"e16c7d5e": "signedApprove(address,address,address,uint256,uint256,uint256,bytes,address)", +"e16c7d98": "getContract(bytes32)", +"e16c8053": "setTransfer(uint256,uint256)", +"e16c8d4b": "viewMyShares(bool)", +"e16c93e5": "Swarm(address,address,uint256)", +"e16dbb2f": "Multiplication(uint256,uint256)", +"e16dd936": "getVestingSchedule(address,address)", +"e16e2843": "setdividendFee(uint8)", +"e16e9340": "getAddressArrayIndex(bytes32,uint256)", +"e16e93aa": "DU30Token(string,uint8,string)", +"e16f374c": "getHarborLocation(uint16,uint16)", +"e16f5fe9": "DeathFactor_iv()", +"e16fb2f9": "recordInvestment(address,uint256,uint256)", +"e16fe580": "CalcHash(bytes)", +"e1703521": "setPriceMoreThanOneETH(bool)", +"e170dd81": "MintingSale(address)", +"e1725c92": "decimalPlaces()", +"e1726faa": "pushDividendPayment(uint256,uint256,uint256)", +"e1727807": "splitPot()", +"e1727fc6": "contractDeployedTime()", +"e172a57e": "updateGenerationStopTime(uint256,uint8)", +"e172dac8": "ethOdinRate1()", +"e1733234": "get_all_activity(uint256,address)", +"e173b0d0": "reserveAll()", +"e17463c2": "changelp5(address)", +"e174f106": "ManualMigration(address)", +"e1757a3c": "TIMEOUTBLOCKS()", +"e1758bd8": "nativeToken()", +"e175c86a": "getInviteInfo()", +"e1765073": "getPath(uint256)", +"e17682eb": "StablePrice(uint8)", +"e177246e": "setDelay(uint256)", +"e17755c4": "zrxTokenContract()", +"e177573c": "setHatchTime(uint64,uint256)", +"e177644a": "TimeStamp()", +"e177b18b": "minCoordinatorCount()", +"e177b707": "Valdela()", +"e177bb9b": "registerCode(string)", +"e17928ba": "BOBOTOKEN()", +"e17a3ccf": "paused_4()", +"e17a5894": "yoobaTeamAddress()", +"e17a7c70": "stage3_start()", +"e17b25af": "setMetadataAddress(address)", +"e17b3054": "creatorOwner(address)", +"e17b35ed": "isMint(address)", +"e17bf87a": "testRewardBB(bytes32)", +"e17cb777": "rewardRetweet(address)", +"e17e1274": "testTransferToRejectAuthority()", +"e17e1a86": "SetupWWC(string,string,uint256,uint256,uint256,address,address,uint256)", +"e17e7a20": "setTotalStaked(uint256)", +"e17fc704": "canMintFoundation(uint256)", +"e17fe6a0": "getCreatorReward()", +"e17fec26": "Unregistered(bytes32)", +"e180819e": "setBuyTime(uint256)", +"e18099e1": "ethTokenRate()", +"e180dbbd": "isEarlyBird(address,address)", +"e180e23b": "Annexe_CPS_6()", +"e182e27a": "fastHatchingPrice()", +"e182fd01": "tokensBankPartners()", +"e184c9be": "expiry()", +"e1851b83": "getMaximumFundsInEuroCents()", +"e1859169": "communityContributionQuota()", +"e185a890": "widthdrawRefunds(address)", +"e185b24c": "emptyIndex(address[])", +"e1863b19": "MultisigWalletMock(address[],uint256,uint256)", +"e186fb27": "checkcitizendetails(uint256,string,string,string,string)", +"e1878925": "isDeregisterable(address)", +"e187a550": "logCall(uint256,uint256)", +"e187eaf7": "addMoreTime(uint256,uint16)", +"e1883433": "withdrawEther(uint64)", +"e189dba1": "sellIssuerTokens(uint256)", +"e18a9134": "getLockProducts(uint256)", +"e18af2b8": "PHPCoin(uint256,string,string)", +"e18b170e": "tune(uint256,uint256,uint256,uint256,uint256)", +"e18b7fcf": "receiveFee()", +"e18c52ae": "testControlTransferNotTransferable()", +"e18c8cf9": "etherInWei()", +"e18d38ce": "getPlayerName(address)", +"e18d9bba": "getUSDAmountByWeis(uint256)", +"e18dc0f6": "pricingStrategyAddress()", +"e18e34d5": "setPayoutFee(uint256)", +"e18ed57b": "_calculateTax(uint256)", +"e18f1355": "TestERC20Token(uint256,string,uint8,string)", +"e18faad8": "_adduserdayget(address,address,uint256,uint256)", +"e18fb814": "setFixPrice(uint256)", +"e18fe709": "AirRewardTotalSupply()", +"e190264f": "newCampaignAccount(uint256)", +"e1909035": "GetCompetitionResults(uint32,bool)", +"e190d1b5": "claimFreeCrab()", +"e1911d70": "METADATA_URL()", +"e19136a4": "urbitAdminAddress()", +"e191548d": "AnimecardCore()", +"e192c4e0": "investor_Refund()", +"e193289f": "setVotingHelper(address)", +"e1938b14": "oraclizeSetWinner()", +"e193b735": "tokensDonated()", +"e1948e44": "ethRateExpiration()", +"e194e369": "getFamedStarByName(string)", +"e19593e5": "cashout(uint256,address,address,address,uint256,bytes,bytes)", +"e195d096": "tokenReserved()", +"e195f2ec": "howManyFees()", +"e1980d15": "setBuyAuctionAddress(address)", +"e199b7e4": "getMasterAdress()", +"e199c8a8": "SafiraToken()", +"e19a7bc8": "stopMigration()", +"e19ab767": "totalDistrictSupply()", +"e19aca85": "takeDividends(address)", +"e19bb964": "priceIncreasingRatio()", +"e19bc813": "bonusesCount()", +"e19bc8e5": "initPrivateIco(uint256,uint256,uint256,uint256,uint256)", +"e19d36ff": "removeAsset(bytes32,address)", +"e19eaf79": "blocknumber(address)", +"e19f1c55": "EstatePurchased(uint256,address,uint256)", +"e19fb933": "MentalHealthLifeToken(uint256)", +"e19fd3c5": "determinePurchase()", +"e1a05087": "getImpactUnmatchedValue(string)", +"e1a05344": "createSaddle6(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"e1a1cd8d": "crowdfundEndDate()", +"e1a27ad3": "needsAdministration()", +"e1a283d6": "mintingPaused()", +"e1a29a3f": "setVariationAddress(address,address)", +"e1a2c446": "lockRewardTokenMany(address[])", +"e1a382f4": "ZTHToken(uint256,string,string,uint8)", +"e1a3e55c": "buy(string,address)", +"e1a44749": "setOptions(uint256)", +"e1a566f4": "challengeExists(string)", +"e1a57611": "tokenReceivers(uint32)", +"e1a58a74": "flowerContract()", +"e1a63c14": "PixelMap()", +"e1a67cd3": "overrideTokenHolder(address,uint256)", +"e1a69d88": "level_1_amount()", +"e1a6ddcd": "isValidContribution()", +"e1a6df9e": "FLIGHT_NUMBER()", +"e1a6e625": "TradingStart(uint256)", +"e1a6f014": "offer(uint256,address,uint256,address,uint256,bool)", +"e1a7739c": "getExercisePeriodDeadline()", +"e1a8af8a": "getWinnerPrize(uint256)", +"e1a9109d": "setSeedPrice(uint256)", +"e1a9a2b1": "endRound(uint256,uint256)", +"e1a9f9b9": "_buyCallToClose(uint256,uint256,uint256,uint256,address)", +"e1aa1098": "GuardaRegistro(string)", +"e1aa1bcc": "refundDeadline()", +"e1aa60dc": "lastBlock_v3()", +"e1aa7e95": "createNewUser(bytes32,bytes,address)", +"e1ab5860": "declarePublicOfferingPlan(uint256,uint256)", +"e1ab690e": "ANRToken()", +"e1ab7cda": "OnetVN()", +"e1aba68e": "newProposal(address,string)", +"e1abf819": "GetWinner(bytes32,address,bytes32,address)", +"e1ac48ad": "saleableTokens()", +"e1aca6fb": "quickSort(uint256,uint256)", +"e1ad1162": "transfer(address,uint256,bool)", +"e1ad7699": "setPayload(string)", +"e1ad84a0": "GetFixedPrice(uint256)", +"e1addfbb": "priceOfreservations(address)", +"e1ae91b3": "TestToken(address,uint256,uint256)", +"e1af0121": "associationOf(address)", +"e1af915d": "changeGenes(uint40,uint256)", +"e1afb08c": "unlock(bytes16)", +"e1b0513b": "withdrawGame()", +"e1b0d4b2": "setTransactionsAllowed(bool)", +"e1b10970": "moveFactory(uint8,uint8)", +"e1b27e6b": "COO()", +"e1b3f338": "undoPending(address)", +"e1b40a76": "ipfsAddress()", +"e1b41513": "LIVEToken()", +"e1b4d6cb": "HOTCRYPTO()", +"e1b5265a": "PutForExchange(address,uint256)", +"e1b53078": "makerAffiliateFee()", +"e1b54285": "endDateOfVipPlacement()", +"e1b5989d": "FastLoan()", +"e1b5ce0f": "buy(uint256,string,string)", +"e1b7535f": "getDepositor()", +"e1b7abda": "HOST_SHARE()", +"e1b8347b": "testFundsAreTransferrableAfterSale()", +"e1b84ac3": "_storeSettingCreation(address,uint8,string,address,address,string)", +"e1b8708f": "OwnerChanged(address,address,bytes32)", +"e1b92b21": "LogOmegaEggSale(address,uint256)", +"e1b9dc08": "setCallbackGasLimit(uint256,uint256)", +"e1b9dea4": "Globglogabgalab()", +"e1b9ed9d": "_buyTokens(address,uint256,uint16)", +"e1ba84a9": "testFallbackThenAdd()", +"e1baa2a0": "ownerAngelTransfer(address,uint64)", +"e1baa9cb": "CNT_Common()", +"e1baed1a": "hireBountyHunter(uint256)", +"e1bc048e": "clones_to_create_one_idea()", +"e1bc3003": "reveal(bytes,string)", +"e1bccc7f": "FccToken()", +"e1bd5af9": "contractHolderAddress()", +"e1bdc3c9": "addAddressMappingProposal(address,address)", +"e1be7467": "bounties()", +"e1bedf2a": "AlarmTester(address)", +"e1bf34e9": "transferToKnownContract(address,uint256,bytes32[])", +"e1bf4f50": "upgradeM5Logic(address)", +"e1bf50c8": "_transferChamp(address,address,uint256)", +"e1bfc31e": "acceptOp()", +"e1c0669d": "getJobSponsorshipId(address,address,uint256)", +"e1c093da": "getMinerBlock()", +"e1c1451a": "tokensIssuedMkt()", +"e1c18c42": "setEarned_money(uint256)", +"e1c1b939": "verifyTransaction(bytes32,uint256,address,address,uint256,address,address,uint256,bytes,bytes)", +"e1c33523": "xpaFundDeposit()", +"e1c3aedc": "updateRewardVaultContract(address)", +"e1c3bac6": "stakeMaxAge()", +"e1c3fb91": "_hasClosed()", +"e1c49dde": "previousRounds()", +"e1c4a6a6": "getIsRemoved(bytes32)", +"e1c4c9fe": "remainingReward()", +"e1c52dc6": "Confirmation(address,bytes32)", +"e1c5d838": "createOrgan(string)", +"e1c621c0": "_rewardTokens(address,uint256)", +"e1c66292": "Create(uint32,address)", +"e1c68f31": "findFloorKey(uint256)", +"e1c6b14b": "addToOtherMap(uint256,uint256)", +"e1c70b29": "_createPow(string,address,uint256,uint256,uint256)", +"e1c7392a": "init()", +"e1c7f06a": "AddSharedAccount(bytes32,bytes32,bytes32,address)", +"e1c80391": "setArtcoin(address,address,address)", +"e1c941b0": "batchSendWebGiftToken(address[],uint256)", +"e1c95bb9": "updateThresholdNewTokenPair(uint256)", +"e1c9ccaa": "ShopalToken()", +"e1ca1b7d": "FilmoljupciCoin()", +"e1ca6f6f": "distribute_100_tokens_to_many(address[])", +"e1ca8b57": "setNewPriceFuncAddress(address)", +"e1caa0c7": "createAndCall(string,bytes)", +"e1cb0e52": "getVal()", +"e1cb5515": "newArticle(string,string,string,address)", +"e1cba8d2": "TUBECOINcontract()", +"e1cd5fc0": "PROJECTOPERATION_SUPPLY()", +"e1cda468": "createRequestFromBytes(bytes)", +"e1ce95c8": "summon10SkinAppearance(uint256)", +"e1cf0b3b": "refundAllPlayers()", +"e1d001eb": "mintAllowance(int256)", +"e1d03d11": "setUnlockedAddress(address)", +"e1d07058": "_modifySpendLimit(uint256)", +"e1d10d85": "getMyTickets()", +"e1d10f79": "calluseraddress(address)", +"e1d1e8ef": "getCurrentUnitPrice()", +"e1d2d3e4": "SocialMedia()", +"e1d2f649": "restartAuction(uint256,uint256,uint256)", +"e1d30979": "wolkInc()", +"e1d35155": "ProudofYourCoin()", +"e1d4efc4": "YHT()", +"e1d5988e": "discount(uint256,uint256,uint256,uint256,uint256)", +"e1d5e8eb": "rollDices(uint256)", +"e1d5ec4c": "seedShare()", +"e1d6aceb": "transferWithComment(address,uint256,string)", +"e1d6e166": "getContracts(address,uint256)", +"e1d76c8e": "getBlocksByOwnerDesc(uint256,uint256,address)", +"e1d7ce2c": "EthCentsUpdated(uint256)", +"e1d7fadc": "disqualifyHopeful(uint256)", +"e1d81736": "addUser(uint256)", +"e1d8501d": "getUSDAmount(uint256,uint256)", +"e1d94d94": "ownerChangeSlogan(string)", +"e1d9627f": "ReputationChanged(address,int32,int32)", +"e1da4135": "bountyFundAddress()", +"e1da4f85": "setStartStage2(uint256)", +"e1da5637": "setPercentWeiJackpot(uint256)", +"e1dace1a": "rewiewToken()", +"e1dad94c": "recountUsersBalance()", +"e1db206c": "limitTier1()", +"e1db8e7e": "getCreatedPayoutNumerators()", +"e1db8ff2": "mineForMany(address[],address[],uint8[],bytes32[],bytes32[])", +"e1dbc281": "changeBank(uint256)", +"e1dc7792": "OptedOut(address,address)", +"e1dcafa3": "setDefaultReputationReward(uint256)", +"e1dcf3de": "NewBooking(address,uint256,uint8,uint256)", +"e1de02f3": "_exit(address)", +"e1de373f": "addPlayerName(string)", +"e1df4517": "WealthChainToken()", +"e1df507c": "calculateAmounts(uint256)", +"e1df7f60": "startstopICO(bool)", +"e1e073b6": "amountTokenIssued()", +"e1e09299": "addUserRole(address,uint8)", +"e1e158a5": "MIN_DEPOSIT()", +"e1e1f977": "parseTx(address[4],uint256[3],uint32[4])", +"e1e29558": "completeTask(uint256)", +"e1e2ccd2": "sellDrugs()", +"e1e3f915": "parameterizer()", +"e1e46351": "mvpLaunchedAt()", +"e1e46f24": "tokenRate2()", +"e1e471eb": "BankingPayToken()", +"e1e4d737": "setTokenFront(address)", +"e1e5c093": "controlSum()", +"e1e7c320": "getGamesPlayerBids(uint256,address)", +"e1e85c4b": "splitProfit(uint256)", +"e1e867e5": "getFees(uint256,uint256,address)", +"e1e87c28": "refundToBuyers()", +"e1e87f40": "LogDividend(address,uint256,uint256)", +"e1e87f60": "_getBid(address,uint256,uint256)", +"e1e902af": "transferToLock(address,uint256,string)", +"e1e93604": "atomicMatch_(address[14],uint256[14],uint8[6],bytes,bytes,bytes,bytes,bytes,bytes,uint8[2],bytes32[5])", +"e1e9e249": "encodeAddress(address,address)", +"e1ea0a57": "TOKKA()", +"e1ea5e05": "token_fallback(address,address,uint256,bytes)", +"e1eac4a8": "get_bountyHunter(address,address)", +"e1eae0b4": "fullUnitsStaked(address)", +"e1eb5f87": "NewPrice()", +"e1ebdb6d": "setWhitelistA(address,address)", +"e1ec12c7": "TopPlayerToken()", +"e1ed7fcb": "setBagMultiplier(uint256,uint256)", +"e1edd8ec": "getSupplyAgent(address)", +"e1eddc6d": "_rand(uint256)", +"e1ee9284": "getOwnCard(address)", +"e1ee9a3d": "isPreIcoDate()", +"e1ef42b1": "Total_Investors()", +"e1efda6d": "airaSend(address,address,uint256)", +"e1f0ae1b": "NexoToken()", +"e1f0c376": "gameDuration()", +"e1f11822": "carnumOf(address)", +"e1f16616": "invcoinSentToEther()", +"e1f21c67": "approve(address,address,uint256)", +"e1f4895a": "getCostToken()", +"e1f4a9b1": "set_pre_kyc_bonus_denominator(uint256)", +"e1f51aca": "listTokenByRank()", +"e1f5760b": "horsesRemaining(uint256)", +"e1f57846": "com_fee_transaction(address,address,address,uint256,uint256)", +"e1f5eb3f": "convertTokens(uint256,address)", +"e1f5ebc5": "_projectAddNew(address,uint256)", +"e1f6452e": "AggiungiNegoziante(address,bool)", +"e1f69952": "voteSvp02(bool)", +"e1f7d0e1": "PRE_SALE_END()", +"e1f7ec5a": "getStored()", +"e1f82d60": "publicReservedToken()", +"e1f86887": "getPortfolioTable()", +"e1f87904": "getNextDouble(address)", +"e1f8922e": "transferName(address,string)", +"e1f8926b": "depositEthPool(uint256)", +"e1fa70ef": "endCloseSale()", +"e1fa7638": "attack(uint256,uint256)", +"e1fa78e9": "AgriChainLabelInt()", +"e1fa82d0": "transferFromFlower(address,address,uint256)", +"e1fa8b02": "distribute(uint256,address)", +"e1fa8e84": "register(bytes32)", +"e1fac58d": "lockedBalanceOfByDate(address,uint256)", +"e1fb070e": "MtTaborToken()", +"e1fbeaed": "CUCUX()", +"e1fcad6a": "_equipUpOne(address,uint256)", +"e1fcb86d": "YouTube()", +"e1fd3d4e": "emergencySetDOwner(bytes32,address)", +"e1fd632f": "EDU_KYC_BONUS()", +"e1fdb4b4": "refundBet(uint256)", +"e1ff98f2": "getTotalCounter()", +"e1ffdecb": "tokensPerTranche()", +"e20056e6": "replaceOwner(address,address)", +"e200cee8": "setBossWannaCryInterface(address)", +"e201be98": "airDropToken()", +"e201d466": "MultiToken(uint256,string,uint256,string,string,uint256)", +"e2021f66": "getAttack(bytes32,bytes32,uint256)", +"e2022d3a": "storeNewVesting(address,address,address,string,uint256)", +"e202e1eb": "contractPartOne(uint256)", +"e20314ed": "trade(uint256[10],address[4],uint256[6],bytes32[4])", +"e2034834": "RemoveRocketForSale(uint32)", +"e203f335": "leafPrice()", +"e2045452": "setUsername(address,string)", +"e2045b5e": "getBadgeInfo(uint256)", +"e2047589": "assertEq(address,address,bytes32)", +"e204ce12": "transferExtra(address,uint256,uint256)", +"e2056c46": "ExtraBalToken()", +"e2059fdf": "showIssueDetail(address,bytes32)", +"e2069734": "destroyRemainingTokens()", +"e2087a44": "receiveApprovalTest(address,uint256,address,bytes)", +"e209bf22": "addMeme(string,string)", +"e20a4bcd": "recoverAddressFromCooperativeSettleSignature(bytes32,address,uint256,address,uint256,bytes)", +"e20a5ac2": "bonusFourthWeekPeriod()", +"e20a9ae9": "Tesoro()", +"e20acc79": "changeInterval()", +"e20b7d3c": "checkPoolAddressTierCap(uint8,uint256)", +"e20bbd8d": "RecoveryWithTenant()", +"e20bc67b": "autoUnlock(address)", +"e20bce0a": "lowTimeBonusValue()", +"e20c6d3d": "getMessageData()", +"e20ccec3": "pending()", +"e20cfc4a": "payedDividendsUSD()", +"e20d35ad": "CellBlocksToken()", +"e20dc05b": "globalOperator()", +"e20de6eb": "addrLockedFunds()", +"e20e1dc3": "createProxy(address[],uint256)", +"e20e36a0": "ExchangeAdapterBase(address,address)", +"e20e54a5": "getMHTHoldersNumber()", +"e20ff6f7": "fetchCurrentSatoshiState()", +"e2101509": "getSketchesWithHolder(address)", +"e211003d": "processOffChainPurchase(address,uint256)", +"e2119c80": "computeRealCap(uint256,uint256)", +"e2121de1": "withdrawAny()", +"e2130d1e": "unlockTeamTokens()", +"e21316ea": "mortal(address)", +"e213beb7": "transferCoOwnership(address)", +"e213e10a": "_createMeme(uint256,string,address,uint256)", +"e2153231": "SahilToken()", +"e2155c14": "galleassMint(address,uint256)", +"e21608be": "ReserveToken()", +"e2164700": "currentRewardNum()", +"e216bf4d": "SetBlockForSale(uint256,uint256,uint256,address)", +"e2172000": "left63(uint256)", +"e2179b8e": "g()", +"e21827a1": "unmintedTokens()", +"e218519c": "getref()", +"e2187e6e": "endTimeLockedTokensTeam()", +"e2188190": "CROWD_WAVE3_PERIOD()", +"e219aa11": "GetEscrowETHBalance()", +"e219b9e1": "rebateOneFenmu_()", +"e21a430b": "publicRelease()", +"e21aaa0f": "_getShipPrice(uint256,uint256)", +"e21ac8a1": "AvatechToken()", +"e21b0b95": "updateGlobalMinContribution(uint256)", +"e21b63b2": "setNewMint()", +"e21b9d08": "m_changeable()", +"e21be4f4": "CBMTToken()", +"e21c4783": "isPermitted(address,bytes32)", +"e21e221b": "ContributionRegistration(address)", +"e21f37ce": "message()", +"e21f44f4": "PoolCreated(uint8,uint256,uint256)", +"e21f8e56": "get_game_fees()", +"e21fd9fc": "_owns(address,uint256)", +"e2202a4d": "jester()", +"e2211592": "TWO_DAYS()", +"e2217114": "forwardEther(uint256)", +"e2217d5c": "payeth()", +"e2219773": "webGiftOnceMaxAmount()", +"e221d5d5": "getDukeNickName(string)", +"e222b00c": "blocksPerPayPeriod()", +"e22325ad": "transferBase(bytes32,address)", +"e2233ada": "smartDoor(address[])", +"e223b547": "calcFixedReward(uint256)", +"e223cb37": "AddBill(uint256,uint256,uint256,bool)", +"e223ed87": "getPetValue(uint256)", +"e223facb": "USER_GAME_WITH_TOKEN(uint256)", +"e224179e": "icoOverride()", +"e22497e4": "removeFromPublicSaleWhitelist(address[])", +"e225c56b": "KudosToken()", +"e225e588": "TNCN()", +"e226a1b6": "getAddressStatus(address)", +"e226cdec": "sellOffline(address,address,uint256)", +"e226ed22": "balanceOfERC20(uint256,address)", +"e227b5d1": "ETHContributed(address)", +"e228647f": "olty_6()", +"e228a6f4": "withdraw(uint256,uint8,uint16)", +"e228d627": "nextTokenAddress()", +"e228ecb4": "lockBalance()", +"e22938bd": "ShareManager()", +"e22955c6": "MultiplyContract(address,uint256,uint256,uint256,uint256,uint256)", +"e2298591": "xIPFSPublicKey()", +"e22a3af8": "canClaimTokens()", +"e22a6231": "addCandidate(address,string,string)", +"e22a9877": "getHWCAddress(address)", +"e22aa47a": "lockTokensForCs(address,address,address)", +"e22ad518": "startNextPremiumSale()", +"e22ae31d": "FrameCoin()", +"e22b0c46": "verify(uint256,uint256,uint8,bytes,bytes)", +"e22b3fb4": "changeOwner(bytes)", +"e22b94e8": "ForceCryptoInvestmentCoin()", +"e22baa56": "nonZero(uint256)", +"e22bda35": "eventVenue()", +"e22c6128": "getIncome(address)", +"e22d1581": "saleEnd2()", +"e22e8046": "getLunckyIndex()", +"e22ed995": "createStudent(string,string,string,uint32,bytes1)", +"e22f8dc9": "buy_lovelock(string,string,string,uint256)", +"e22fb860": "CJXToken()", +"e22fcd08": "useItems(uint32,uint256,address,uint256)", +"e23000a0": "buyBackPrice()", +"e2301d02": "subApproval(address,uint256)", +"e2306253": "o1Address()", +"e230dfbd": "setETHUSD(uint256)", +"e230e246": "cutFor(address,uint256,uint256,uint256)", +"e2311a78": "Payperblock()", +"e2313d1f": "ClaimOrichalcum()", +"e231bff0": "redeemed()", +"e2322c73": "firstPeriodWindows()", +"e2326909": "addCourse(string,string,string,uint256,uint8,uint8,uint16,uint8,uint8)", +"e2331332": "AortaToken()", +"e2332120": "secondUnlockTime()", +"e233ee0d": "publicFillOrder(bytes32,uint256,bytes32)", +"e2356efd": "holdTokensOnStage()", +"e235847a": "addSourceForTimeline(uint256,uint256,string,bool)", +"e235ca59": "revealsCount(uint256)", +"e236de22": "distributorWallet()", +"e2376be1": "sendMon(address,address,uint64)", +"e2387bb6": "AuctionHouse()", +"e238c7ed": "setAllowanceAdmin(address,address,uint256)", +"e238def9": "getReleasedBalance()", +"e23941bc": "testDepositWithdraw()", +"e239421d": "Lotthereum(uint256,uint256,uint256,uint256,bytes32)", +"e239ccba": "Disco()", +"e23a15b5": "logSigned(string,bytes16)", +"e23a4916": "getMainLockup()", +"e23a7785": "approveAndBuy(uint256,address,uint256,bool)", +"e23a845a": "getExpirationTime()", +"e23c5063": "getAttributeValue(address,bytes32)", +"e23caa06": "getLotteryDetailsA(int256)", +"e23cbad1": "getArkData(uint256)", +"e23d0996": "getDBallotID(bytes32,uint256)", +"e23d0b23": "week2Price()", +"e23da75a": "setTokenApproval(uint256,address)", +"e23e231f": "TOKENS_NOT_FOR_SALE()", +"e23e3229": "investorIndex()", +"e23eaae6": "SmogToken()", +"e23eb0c5": "_calculateFEE2Distribute()", +"e23f5e49": "checkLucky(address,uint256,uint256)", +"e23f61f6": "isCurrentOrPastAdmin(address,address)", +"e23fc908": "_setBurnFeeAbs(uint256)", +"e2418c15": "throwsWhenNetworkPlaceholderIsBad()", +"e241c1d9": "deriveKey(uint256,uint256,uint256)", +"e241e9c5": "_getUt(address)", +"e2420bd2": "setTwitterBot(address)", +"e242df57": "MiracleTeleToken(uint256)", +"e242fbbb": "addHuman(string,uint8)", +"e244054a": "trade(bool,bytes,uint256,uint256)", +"e2442441": "VpaxContract()", +"e24459ce": "rakugoPresaleAddress()", +"e2449c13": "createSqr(uint256,address,uint256,uint256)", +"e244fe89": "addToCommunitySaleWhitelist(address[])", +"e2454522": "verify(uint8,bytes32,bytes32)", +"e2457f50": "changeZS(address,address,uint256,uint256)", +"e24613ea": "getNexOrdertUser(address,address,uint256,address)", +"e2466cb6": "invalidateAnnouncement(uint256)", +"e24670eb": "EthToCentsUpdated(uint256)", +"e246ddba": "icoFinishTime()", +"e246f71a": "EventAddManager(address,address)", +"e247a2e2": "updateVolume(uint256)", +"e248b435": "setCCH_edit_15(string)", +"e2496d5b": "tokensWeiRaised()", +"e2499b98": "stakedContentById(bytes32)", +"e249a575": "setTermsNumber(uint256)", +"e24a1d1e": "deauthoriseMaker(address)", +"e24a5042": "transmuted(uint256)", +"e24b4403": "_emitDeposited(address,uint256,address)", +"e24b7721": "addressLeskiw()", +"e24c36d0": "flushEra()", +"e24cddd6": "getCartLength(address)", +"e24cf226": "closeEscrow(uint256)", +"e24f8313": "addReputation(address,uint256)", +"e24fe110": "Decentralized()", +"e24fed00": "assertEq(bytes,bytes,string)", +"e2506eab": "setEMAValue(uint256)", +"e250ecfe": "Cogenero(uint256,uint256,uint256,address)", +"e251e358": "preIcoSoftCap()", +"e25209b6": "roundOneLimit()", +"e253c21d": "ZBCToken()", +"e253dd6b": "setBonusRound4(uint256)", +"e2542f03": "updatePurchasePossible(bool)", +"e2550156": "smallBlind()", +"e25520a7": "LocklistAddressdisable(address)", +"e2558086": "calculateLandmarkPrice(uint256)", +"e255d5ad": "maxBuyRateInPrecision()", +"e25665da": "earlyBackersPoolAddress()", +"e256888f": "PERCENTAGE_PRECISION()", +"e2573266": "withdrawRC()", +"e2575e48": "_isMultiple(uint256)", +"e2576998": "changeMaxCoefPartnerForEmission(uint256)", +"e2583070": "balanceImportsComplete()", +"e25876d3": "weiToFinney(uint256)", +"e258a0f0": "createItem(string,uint256,uint256,uint256[6])", +"e258aa02": "createPromoRegion(address,string,uint256)", +"e258be32": "removeBookSigner(bytes16,address)", +"e259501e": "contributorsWallet()", +"e2595235": "addPack(uint8,uint128,uint256)", +"e259d074": "endauctionother(uint256)", +"e25a2a99": "updateTier(uint256,uint256,uint256)", +"e25a51b6": "setCompositeReputation(string,uint32)", +"e25ade5f": "issueTokens(address,uint256,uint256,bool)", +"e25b5cbd": "STAKE_APR()", +"e25bc771": "_transferCard(address,uint256,uint256)", +"e25bd409": "receivePositionOwnership(address,bytes32)", +"e25c80d0": "_currentIcoPhaseMinimum()", +"e25c9c33": "getBadgeLevel(bytes32,uint256)", +"e25d4dac": "mintFund(address,uint256)", +"e25f0a98": "requestedForMigrationAt()", +"e25f71ac": "isRoundAwarded()", +"e25fe175": "step()", +"e2616387": "MPY(uint256,uint256)", +"e26176d9": "FundRanking(address)", +"e261fc63": "UserRank(address)", +"e2621a66": "HPBToken(address)", +"e26259a4": "updateMyHns(string,address)", +"e264172c": "drainETH()", +"e26422fe": "DaysToDestroy()", +"e2646a9f": "getICOStage()", +"e2649caf": "voteToFreezeFund()", +"e264a2f4": "KIN_PER_USD()", +"e264fc07": "_buyFillet(address,uint256,bytes)", +"e2651539": "priceCreatingChannel()", +"e26534bf": "whaleExchangeRate()", +"e2659324": "require_email(bool)", +"e265c5e2": "getTotalTokenWithdrawByAddress(address)", +"e2664254": "priceDivisor(uint256,uint256)", +"e26659da": "getAllBaller()", +"e26693ac": "stakeDice()", +"e266e5ad": "Mystical()", +"e267761f": "unmintedGBT()", +"e267dd9b": "addAgent(uint256,uint256,uint256,address)", +"e26814d8": "withdrawCoins(address,uint256)", +"e26835ce": "giveToken(address)", +"e2684f08": "_isPaused()", +"e268ea6b": "SOFT_CAP_T()", +"e269053a": "getNumberOfAssets()", +"e2693180": "DHANACOIN()", +"e269f929": "recoverRevokeHash(bytes,bytes,uint256)", +"e26a687f": "BP_IMMORTAL()", +"e26ba086": "getTargetInvalidMarketsDivisor()", +"e26bc039": "numRegisteredModules()", +"e26c2da9": "TerraToken()", +"e26c551e": "publishConditions(string)", +"e26c8434": "AdminStartDraw(string,bytes)", +"e26dee0e": "IcoExt()", +"e26e7b50": "calculateCritMassRewards(uint256)", +"e26e8d84": "FillSellOrder(address,address,uint256,uint256,uint256,uint256,uint256)", +"e26f0342": "ArrayTypesTest(uint256[10])", +"e26f21bf": "setHoldPercentage(uint256)", +"e26fdc12": "equipDown(uint256)", +"e27008c2": "_createRareCard(address,uint256,uint256,uint256,uint256)", +"e270398a": "emitJobPosted(uint256,address,uint256,uint256,uint256,bytes32,bool)", +"e270bc81": "resumeICO(address)", +"e270f88c": "_getFreezeTime(uint256)", +"e27131f9": "MintCoin()", +"e2725161": "calculateOdds(uint8)", +"e2726e94": "minSumICOStage4USD()", +"e272b892": "pauseContract(bool)", +"e2734c93": "getPlayerBalance(address)", +"e273f117": "SetServiceProviderFee(address,uint256)", +"e2740b4e": "getTradesRoot()", +"e2749799": "GBank(uint256)", +"e274a3e7": "Papergold()", +"e274fa4e": "BitcoinXL()", +"e274fd24": "eventContract()", +"e2757a50": "PepFarmer()", +"e275a016": "check_data(string)", +"e275f296": "transferFromMulti(address[],address[],uint256[])", +"e27671ff": "hillpayout()", +"e276729d": "getPeriodStarted(uint256)", +"e276c799": "getx()", +"e2775da5": "getMartialOwner()", +"e2776ab8": "CryptoPhoenixes(address)", +"e2786d65": "refundSplitMembers()", +"e278c0f2": "setInvestorsFee(uint256)", +"e278d283": "getLineUpEnable_pool(address)", +"e278fe6f": "closeRound()", +"e2790853": "OX()", +"e27929b6": "addRecord(bytes32,string,string)", +"e27a8aca": "addWhiteListedInvestor(address,string)", +"e27a9c74": "setOwnerName(uint256,string)", +"e27b73f0": "issueWithExternalFoundation(address,uint256,bytes32)", +"e27c5b17": "testSlice()", +"e27da9c6": "current_tier()", +"e27e3fd3": "CancelGame()", +"e27ecfcc": "LogStartDate(uint256,uint256)", +"e27f0236": "agingBalanceOf(address,uint256)", +"e27f1692": "Bitsonatoken()", +"e27f3853": "timeFreezeTeamTokens()", +"e27fe50f": "startAuctions(bytes32[])", +"e280b58f": "tokenIssuedLockUp()", +"e280d66b": "updateWonNums(uint256,uint256)", +"e2812256": "Monarch()", +"e281d7e4": "CryptoSlotsGame()", +"e282348c": "w_Founders()", +"e282726b": "reserveAddr()", +"e282938d": "founderLockEndTime()", +"e282969e": "getPerson(uint256,bool)", +"e282cda6": "calculateBucketId(bytes32[])", +"e283d1ec": "registerEscrow(string,string)", +"e2842d79": "getAllUsers()", +"e28435c4": "ownerETHCashout(address)", +"e284cbfa": "getAllAdIdsByCat(uint256)", +"e284f217": "distributeToAll(uint256)", +"e2861c8d": "cashOutProfit()", +"e2865b4d": "growCost()", +"e2868c54": "Airdrop2(uint256)", +"e2869853": "RefID(string,string)", +"e2869f70": "setCrowdsaleAndVesting(address,address,address)", +"e2877e04": "transferFactoryResourceAmount(uint16,address,uint256)", +"e287adf4": "addSig(address,bytes32)", +"e2889c82": "setTimeLimit(uint256)", +"e2894a8a": "OwnerAnnounce(string)", +"e2896598": "leaderTimestamp()", +"e289fcb6": "contractActive()", +"e28a5e63": "sellDeadline1()", +"e28ab336": "MAX_INVEST_SHARE()", +"e28b0d9a": "updateFundingEndBlock(uint256)", +"e28b2b76": "ipoPlatform()", +"e28b7555": "CapiterContract()", +"e28d717b": "transferETH()", +"e28d8c4b": "claimBonusTokens()", +"e28deda5": "sweepTokenAmount(address,uint256)", +"e28e6b3a": "masterTotalEarning()", +"e28fa27d": "setHardcap(uint256)", +"e28fed1e": "userRescues(address)", +"e29121de": "ADVISOR_TOKENS()", +"e2912367": "_getValuePartByPercent(uint256,uint256)", +"e292c740": "setLargeInvestorWei(uint256)", +"e2935edb": "getUpgradeCardList(address)", +"e2948c21": "marketingTeamTokens()", +"e29532c1": "getDataFromCode(string)", +"e2954a14": "purchaseSeconds()", +"e29581aa": "getNodes()", +"e2958974": "read_transfer_config()", +"e295c9d6": "getActiveBanners()", +"e297273a": "getBlockHashOrZero(uint256)", +"e298287f": "senderAddressIsSecretContract(address)", +"e2982c21": "payments(address)", +"e2985596": "angelCardDataContract()", +"e298d85c": "discountBlock()", +"e2996879": "HuoNiu()", +"e299beb3": "SimpleIndex()", +"e29a2e89": "publishMessage(string,string,string)", +"e29a82d3": "BigFishRoll()", +"e29bfe13": "submitWithdrawTransaction(address,uint256)", +"e29c6a7b": "addYearToken()", +"e29caee2": "currentStageTokensRate()", +"e29e1345": "amountPerDay()", +"e29e1864": "PresaleCapChanged(address,uint256)", +"e29e3a4c": "artistsArtworkCount()", +"e29e436a": "setWorldCupTeamDesc(uint256,string)", +"e29eb836": "totalCollected()", +"e29f5182": "byte32ToString(bytes32)", +"e29f610d": "end1Timestamp()", +"e29f99f0": "tokenAdd()", +"e29f9da6": "_getrand09()", +"e29fa4b4": "setOriginalOwner(uint256,address,address)", +"e29fb547": "scheduleCall(bytes4,uint256,uint256,uint8,uint256)", +"e2a034dd": "participantsFirst(uint256)", +"e2a0d56d": "FundsBurned(uint256)", +"e2a27ca8": "_setBorderValue14(uint256)", +"e2a288c0": "placeCoin(uint16,uint16)", +"e2a2adc2": "divisionRoundedUp(uint256,uint256)", +"e2a3382f": "holdedOf(address)", +"e2a376ec": "addContributor(address,uint256,uint256,uint256,uint256)", +"e2a38a4b": "removeTokens(address,address,uint256)", +"e2a4853a": "setUint(bytes32,uint256)", +"e2a51b8f": "amountOfParticipants()", +"e2a5c39f": "revealPeriodStartedTimestamp(bytes32)", +"e2a71f12": "accountDelete()", +"e2a8215b": "purchaseTokens(address,uint256,address)", +"e2a9ba05": "getBoosterDuration(uint256)", +"e2a9bb53": "CreateBattleCards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)", +"e2a9ca4c": "disableTokenTransfer()", +"e2aa2dcf": "CryptoPeopleName()", +"e2aa6003": "gameResult(uint256,uint256,uint256,bool,uint256,uint256)", +"e2aa6c66": "createPasswordChallenge(bytes20,bytes32)", +"e2aa99ab": "startCrowdsaleY2(address)", +"e2aafa21": "inWhitelist(address)", +"e2ab691d": "lock(address,uint256,uint256)", +"e2acf75d": "auctionCancel(bytes32)", +"e2ad0699": "addCertification(address,bytes32,bytes,bytes32)", +"e2ae0c79": "setParentID(uint256,uint16)", +"e2ae9de0": "deleteArrayUint(bytes32,uint256)", +"e2b05077": "getSaleDate(bytes,uint256)", +"e2b0caef": "when()", +"e2b13fa0": "ManagerPermissionRevokedEvent(address,string)", +"e2b178a0": "getAuthority()", +"e2b202bf": "deleteUint(bytes32)", +"e2b20a72": "SecretToken()", +"e2b2579b": "isClean(address)", +"e2b26323": "proceedToNewStage(int256)", +"e2b375a9": "transferOwnership2(address)", +"e2b43e23": "setDepositInterface(address)", +"e2b4b30d": "getvaluejoinlist_odd(uint256)", +"e2b4f4b5": "lockedTeamUFT()", +"e2b770b4": "updateUSDMonthlySalaries(address,uint256,uint256)", +"e2b7713f": "Midel()", +"e2b863cf": "calculatePayout(bytes32,uint256)", +"e2b8766c": "testFailTransferNotTransferable()", +"e2b91318": "createOptionAndUnderwrite(bool,address,uint128,uint128,address,uint64,uint256)", +"e2b9e186": "name_()", +"e2b9e322": "bondsOutstanding(address)", +"e2ba53f0": "winnerName()", +"e2ba600e": "starting_giveaway()", +"e2ba6ce8": "m_KYCProvider()", +"e2bbb158": "deposit(uint256,uint256)", +"e2bc1971": "getGamblerGameIds(address)", +"e2bca77e": "calculatePrizeAmount(uint256,uint256,uint256)", +"e2bd505b": "setTitulaire_Compte_2(uint256)", +"e2bd8e43": "CodysToken()", +"e2c03ace": "itemsCount()", +"e2c14bdd": "getMapping(bytes32)", +"e2c1f02c": "buySuperDragon()", +"e2c1f7d7": "firstCapEndingBlock()", +"e2c20836": "updateAndGetHodlTotalValue()", +"e2c2ae5a": "isBuyPrice(uint16)", +"e2c2d72c": "setChallengeScienceContract(address)", +"e2c31be6": "icssale(address)", +"e2c345e2": "originalContract()", +"e2c38eaf": "findProductIndexById(uint256)", +"e2c3941a": "DOG_Token()", +"e2c3f9a8": "RATE_PUBLIC_SALE()", +"e2c41dbc": "depositFunds()", +"e2c516be": "icoReceivedWei()", +"e2c518fa": "lastMovement(address)", +"e2c5449e": "chanceNo()", +"e2c61114": "setImportFee(address,uint256)", +"e2c6d41c": "council()", +"e2c718d8": "right20(uint256)", +"e2c76bb0": "SpeculateCoin()", +"e2c7f7ae": "majorOwnerShares()", +"e2c86092": "ifoodCommunity()", +"e2c8a8ad": "contributorPoolMintQuota()", +"e2c8dd34": "dividendsWallet()", +"e2c8e54a": "senderIsPosition(address,address)", +"e2c8f7c8": "ARIWallet()", +"e2c92a52": "distribute(address,uint256,uint256)", +"e2c9b07d": "ChangeBillLeasingInfo(uint256,uint256,uint256,bool)", +"e2c9bc9e": "GenesisTransfersCount()", +"e2ca01f0": "addNewOrUpdateHolder(uint256,bytes32,bytes32,bytes32)", +"e2ca481c": "swaps(address,bytes20)", +"e2cbb9b7": "evCreatedToken(address,uint256,address,uint256)", +"e2cc20bd": "dealerHit()", +"e2cc7a51": "signingPrefix()", +"e2cdd42a": "vote(uint256,address,bool)", +"e2ce7e67": "read_i16_array()", +"e2cf8b0d": "createBundle()", +"e2d07a33": "QYKToken()", +"e2d0d519": "sendOwnership(address,uint256)", +"e2d17ab1": "checkGoals()", +"e2d1da31": "createBuildingOmni(uint32,uint8,uint8,uint8,uint8,uint8,address,bool)", +"e2d2a868": "autoRefundCrowdsaleContributor(address)", +"e2d2dcca": "removeMemberAcct(address)", +"e2d2e219": "dividendsPerShare()", +"e2d31df4": "getTeamPerfitAmuont()", +"e2d45f7b": "transferMultipleDelegated(address,address[],uint256[],uint256,uint256,uint256,bytes)", +"e2d56060": "balanceInWei()", +"e2d5d11b": "revealCap(uint256,uint256)", +"e2d6eddc": "get_row_col(uint256,uint256,uint256)", +"e2d7a7c0": "setAttrCustom(uint256,uint256,uint256,uint256)", +"e2d7c64c": "darknodeRegisteredAt(address)", +"e2d84e23": "getLink()", +"e2daeb9c": "NICTO()", +"e2dbbf62": "changeIcoDiscountLevels(uint256,uint256)", +"e2dc35e0": "transferFund(address,uint256)", +"e2dc5da5": "finishMintingTokens()", +"e2dc7763": "freeze(address[],bool)", +"e2dc9aa1": "addTransaction(string,uint64,string)", +"e2dea715": "getMinerId(address)", +"e2deaa81": "set_reference(uint256,uint256,uint256)", +"e2deb962": "signUp(uint256,bytes32)", +"e2dede94": "getNode(uint256,uint256)", +"e2df0463": "changeTrancheAdmin(address)", +"e2df15d6": "setRewardClosed(uint256)", +"e2df20d1": "setAvailable(bool)", +"e2df2472": "Aurum()", +"e2df6c6f": "getBonus3(uint256)", +"e2e0c049": "UpdateSellAgent(address)", +"e2e15f2e": "Reward()", +"e2e1ff4d": "getBallotsNum(address)", +"e2e267fc": "SintToken(uint256)", +"e2e29ffe": "assertThat(bool)", +"e2e2e5cf": "UpdateMinBalance(uint256)", +"e2e39498": "_verifySignature(bytes,bytes,bytes)", +"e2e51348": "LogContractCreated(address,uint256)", +"e2e54288": "getCertificationList(bytes32,bytes32)", +"e2e5bd42": "setBetBasic(uint256)", +"e2e5fade": "presaleSales()", +"e2e616bb": "whiteListEnabled()", +"e2e68372": "IAM_PER_ETH_PRE_SALE_RATE()", +"e2e686d0": "safeAdd32(uint32,uint32)", +"e2e71098": "_FCTOKEN(uint256,string,uint8,string)", +"e2e794c3": "setPremiumMultiplier(uint8)", +"e2e79a02": "level2(address,address)", +"e2e7ab3a": "setEthlanceInvoiceContract(address)", +"e2e831cf": "genders(uint8)", +"e2e8b978": "sizeOfUint(uint16)", +"e2e9e6e8": "updateMaxMinComparables(uint256,uint256,uint256)", +"e2eb3336": "_performPurchase(uint256,uint256,address,uint256,address)", +"e2eb91cc": "removeAddressFromOwners(address)", +"e2ec6ec3": "addAddressesToWhitelist(address[])", +"e2ecb311": "createEscrow(address,uint256,uint256)", +"e2ecef03": "boleno()", +"e2edf7be": "usd2FokenByStage(uint256,uint16)", +"e2edfc20": "collectAirDropTokenBack(uint256)", +"e2ee2e89": "isPlayerInRound(uint256,address)", +"e2ee9941": "tap(bytes20)", +"e2ef9241": "FawnCoin()", +"e2f0a05a": "TokenCLC(uint256,string,uint8,string)", +"e2f1d298": "_addGroupToMember(address,bytes32)", +"e2f23224": "isEnableBuySell()", +"e2f273bd": "updateAdmin(address)", +"e2f2eb27": "NUMBER_OF_BOOSTERS()", +"e2f31829": "updateStatus(uint256,uint256)", +"e2f35f17": "teamAccountAddress()", +"e2f36034": "calculateRevenueAtBlock(uint256)", +"e2f45eba": "PrettyGirl(uint256,string,string)", +"e2f60706": "specialPurchase()", +"e2f60c26": "getMintAuditApproval(address,address)", +"e2f779f3": "withdrawTokensFromCustody(address,uint256,address,address)", +"e2f77ae2": "setPriceInExoTokens(uint256,uint32)", +"e2f8a017": "payInstallment(uint256)", +"e2f8b790": "buyBlueStarEgg(uint256,uint16)", +"e2f8fa16": "getPendingTaxData()", +"e2f8feb2": "internal_tester(int256)", +"e2f90632": "notTooLongSinceUpdated()", +"e2fa5398": "pack(uint16,uint64,uint64)", +"e2fa5fb1": "secondDiscountCap()", +"e2fa6f90": "_removeTokenFromOwnersList(address,uint256)", +"e2fa9ee0": "openShop(uint256)", +"e2faf044": "createDAO(address,uint256,uint256,uint256)", +"e2fb3d4a": "setReferralSmartContract(address)", +"e2fc2691": "upvotePost(bytes32)", +"e2fc421d": "crowdsaleStartTime()", +"e2fc5d19": "setConfirmations(bytes32,bool,bool)", +"e2fc6f68": "beneficiaryBalance()", +"e2fd38e9": "startEvent()", +"e2fd3c08": "OmVPNToken()", +"e2fdcc17": "escrow()", +"e2fdf807": "purchasableTokens()", +"e2fecdf3": "copy(bytes,uint256,uint256,uint256)", +"e2ffe3f3": "storageToUint(string)", +"e3004b57": "depositToken(address,bytes)", +"e30081a0": "setAddress(address)", +"e3038aaf": "calcOrderToMsAmount(uint256)", +"e303a92b": "drawLottery(uint256)", +"e303cccd": "sellKun(uint256)", +"e303e81e": "authorizeForTier(uint256,address[])", +"e30443bc": "setBalance(address,uint256)", +"e3049b6f": "getFighters(uint32)", +"e3049ded": "AllyNetworkToken()", +"e305044f": "disableServiceMode()", +"e3059cef": "recover(uint8,bytes32,bytes32,address)", +"e305c210": "getPositionFromBattleboard(uint16,uint8)", +"e30637d6": "REFF_TOKENS()", +"e30651b4": "COMMUNITY_CAPPED_VALUE()", +"e3069e4d": "HTX()", +"e306d361": "setUnits(address)", +"e306f779": "EIP712_DOMAIN_HASH()", +"e308262a": "kycPassed(address,address)", +"e3083fb5": "removeFromContribution(uint256)", +"e308700f": "thresholdEtherLimitForSeedRound()", +"e308c213": "getBag(uint256)", +"e30922fc": "isGameLocked(address)", +"e309396b": "addSchema(string,string)", +"e3098986": "totalSold_()", +"e309aa15": "RefundSent(address,uint256)", +"e309d1b5": "tierTwoRate()", +"e309f318": "spermlordAddress()", +"e30addb4": "set_property_layout(uint256,string,string,string)", +"e30b407e": "payWinningGladiator(uint256,uint256)", +"e30bd740": "reverse(address)", +"e30c36f1": "bubbleSort(uint256[])", +"e30c3978": "pendingOwner()", +"e30c7b0a": "TronXtended(uint256,uint256)", +"e30ca7cb": "getBalanceOfContractInSzabo()", +"e30cfa40": "isExecuted(uint256,uint256)", +"e30d1625": "stateUpdate(uint256,uint256,uint256,uint256,uint256,uint256,bytes)", +"e30dd27a": "EpsBonus()", +"e30dfb94": "callAndFailWithoutReason()", +"e30e3334": "BonusTokens()", +"e30f4e2b": "addMultipleAddressesToWhitelist(address[])", +"e30f4f84": "addWhiteBacker(address)", +"e30f7c8b": "startAirdrop(address[],uint256)", +"e30fe37a": "setQueryAddress(address)", +"e310c2ca": "emissionPay(uint256)", +"e312e00f": "approve(address,uint256,bytes,string)", +"e3140c51": "PCHAIN()", +"e31418be": "rateMap(uint256)", +"e3142e90": "logInitialReporterTransferred(address,address,address,address)", +"e31430c0": "acceptEscrow(address,address,uint256)", +"e314d852": "mintWithMemo(string,address,uint256)", +"e3153827": "reading_card_reversed_at(uint8)", +"e316bd56": "hashMsg(bytes32,address,bytes32,address,uint256,bytes32,string)", +"e316e9c0": "Issue(uint256,address,uint256,uint256)", +"e31743d7": "setTransferBlocked(bool)", +"e31870dc": "mlDevelopers()", +"e318a74c": "RACEFORETH()", +"e318b52b": "swapOwner(address,address,address)", +"e318de73": "getString(address,bytes32)", +"e3199044": "setGoalsPlayed(uint256,uint256,uint256,bool)", +"e319b0e2": "advisorsUnlockedAfterCliff()", +"e31a0292": "getostToken()", +"e31a7c01": "triggerTransfer(address,address,uint256)", +"e31a8116": "getMinPrice()", +"e31a9d92": "lastID()", +"e31b1aae": "ChangeInterest(uint256,uint256,uint256,bool)", +"e31bfa00": "next_id()", +"e31c60e3": "Request(address,uint256)", +"e31c71c4": "safeToSub(uint256,uint256)", +"e31d3460": "addused(uint256)", +"e31d3938": "MINT_INTERVAL_SEC()", +"e31e0c46": "set_end_block(uint256)", +"e31e2d6d": "func_0A93()", +"e31e450d": "checkBoard(uint256)", +"e31f28ef": "getTransferInfoTime(address,uint256)", +"e31f3e0c": "startUpgradePoll(address)", +"e31f4263": "theCamp()", +"e31ff6c2": "recordOffChainContribute(uint256,address,uint256)", +"e3206975": "bet_MAX()", +"e321045a": "_storeSettingDeprecation(uint256,address,address,address,uint256,address)", +"e321192b": "addTransaction(address,uint256,uint256,string,bytes)", +"e3218219": "DungeonTokenAuction(uint256)", +"e321adb3": "_canTransfer(uint256,address)", +"e3224ac3": "piecesOwned(address)", +"e32381b6": "kscMintTo(address,uint256,string)", +"e32497c4": "getArtefactsIds()", +"e3252a76": "oraclize_randomDS_proofVerify__sessionKeyValidity(bytes,uint256)", +"e32540b4": "OptionTransfer(address,address,uint256,uint256)", +"e3256429": "COMPANY_RESERVE_FOR()", +"e325fb4b": "bonusCap()", +"e326acbf": "uintFloor(uint256,uint256,uint256)", +"e326e6ad": "DEFAULT_PRESALES_DURATION()", +"e32754a0": "MyFreeCoin112(uint256,string,uint8,string)", +"e327a46f": "breakdown(uint256)", +"e3280126": "addOrder(string,bool)", +"e328cc5c": "getActiveArbiters()", +"e328ef67": "INDInflationVesting()", +"e3296684": "transferToPie(uint256)", +"e329e871": "endTime1()", +"e32a29bb": "burnClosedTokenMultiple(bytes32[])", +"e32aa56a": "acceptLastMilestone(bytes32)", +"e32ae93b": "getQueueOpening()", +"e32af410": "CSClosed(bool)", +"e32b349a": "JCB()", +"e32b6325": "releaseForIco(address,uint256)", +"e32c5f01": "managePID(uint256,uint256)", +"e32c65f2": "tokensPerWei15()", +"e32cb7fc": "decimalPlace()", +"e32d264e": "addDefaultOperatorByTranche(bytes32,address)", +"e32d5cf8": "setApprovals(address,address,uint256)", +"e32d76de": "validBeneficiary(address)", +"e32e68ec": "isNewSchool(uint256)", +"e32e9f22": "setDeploymentReward(uint256)", +"e32ecd18": "LEXT()", +"e32ef3c5": "refereesCount(address)", +"e33051dd": "setGasPriceLimit(address)", +"e3306a6f": "CurrentStatus()", +"e330a737": "setCrowdsaleCloseTimerFor(uint256)", +"e332dfe9": "Token0901(uint256,string,string)", +"e333f969": "setUserAllocMax(address,uint256)", +"e3343501": "_playRealOdds(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e3349637": "addshop(uint256,string,string,string)", +"e334cd92": "getAstrosLength()", +"e334f32e": "encodeString(string)", +"e3350d7c": "setValidKYC()", +"e3353f3e": "increaseBlockTarget()", +"e335b5e9": "allocateSupply()", +"e335e1f8": "LogFundsLocked(address,uint256,uint256)", +"e33607da": "saleMarket()", +"e336e01d": "saleQuantity()", +"e33734fd": "changeProposalDeposit(uint256)", +"e337db6e": "NANJCOIN()", +"e337dd35": "SendingBounty(bytes32,uint256)", +"e337eca6": "TalkBounty(bytes32)", +"e3380b7e": "joinPillarCore(uint256,uint256,uint8)", +"e3386a98": "trustedToken()", +"e338a490": "DEVELOPER_FEE_FRAC_BOT()", +"e3393a6d": "voting(string)", +"e3396d2f": "updatePlayersCoin(address)", +"e339886c": "ADDR_WITHDRAWAL1()", +"e3399538": "ArithValue()", +"e33a9ab7": "createOffer(uint16,uint256)", +"e33b7de3": "totalReleased()", +"e33b8707": "append(uint256)", +"e33ba574": "hashSecret(bool,bytes32)", +"e33bb62a": "BRDCoin()", +"e33c7ae2": "scheduleTransaction(uint256,uint256,bytes)", +"e33c9755": "getActionIds(bool,bool,bool)", +"e33d27e4": "complete_sell_exchange(uint256)", +"e33d28d7": "vestBalanceOf(address)", +"e33dafbf": "emitters(bytes4)", +"e33e59d8": "getInsuranceContracts()", +"e33e5c5e": "getAddressUInt8(bytes32,bytes32)", +"e33f6aaf": "getOnBurnAmountValue()", +"e3407276": "bigModExp(uint256[6])", +"e340c2fb": "bidETHIncrement()", +"e340d0d6": "renewDec(uint256,uint256)", +"e3419202": "redits()", +"e341eaa4": "sign(uint256,bytes32)", +"e342c2e6": "investorWhiteList()", +"e343fea6": "contractPays()", +"e344606b": "hashtagCommission()", +"e34486f8": "isActivePoll()", +"e344ce6b": "updateWhiteLists(address[],bool[])", +"e3450e13": "lastPlayer()", +"e34514ba": "getVirtualBalance(address)", +"e345514c": "CreateTokenToTax(address,uint256)", +"e345f098": "showLastBidder()", +"e34639cb": "AllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"e3464b1b": "Drop()", +"e346b380": "totalPreSale()", +"e346f79e": "submitTokens(address)", +"e3470882": "markFirstSaleComplete()", +"e347a773": "shares(bytes32,bytes32)", +"e348270d": "killMePlease()", +"e3489a4f": "setII_R1(uint256)", +"e3495569": "MAX_DISCOUNT()", +"e3499381": "checkPlayerPayout(address)", +"e349c313": "addPlayerToBoard(bytes32,bytes32)", +"e349c7df": "settleUncle(bytes32,bytes32)", +"e349cb12": "change_name(string)", +"e349f108": "jokerAddress()", +"e34a90a7": "distributeBounty()", +"e34ac873": "avatarTransferState()", +"e34ad653": "EmissiveToken(address,string,uint8,string,string)", +"e34b7983": "doPremine()", +"e34c3896": "FundUpdated(uint256)", +"e34c8dbf": "distributionDate()", +"e34da795": "claimTokens4mBTC(address,uint256)", +"e34dd755": "CrowdsaleAddress()", +"e34e1700": "StarlightToken()", +"e34e32c0": "assignOwnership(address)", +"e34e5786": "test_testableStandardCampaignPayoutToBeneficiary()", +"e34e7889": "unlistDomain(string)", +"e34e7cda": "maxRoundDelta()", +"e34f2a9e": "fundingStartTimestamp()", +"e34f7137": "_performApprove(address,uint256,address)", +"e34f947d": "repairCar(bytes17,string,string,uint256)", +"e34f9dcc": "GCOXPACToken(string,string,uint8,uint256)", +"e34ffcb8": "changeMinAmount(uint256)", +"e3500b48": "setResolver()", +"e35060d9": "RequestEthereumCollect(address)", +"e350b490": "gameToWinner(uint256)", +"e3524d36": "getCurrentDiscountPercent()", +"e3528455": "burnPrimordialTokenFrom(address,uint256)", +"e3530e9c": "spendFromMultisig(bytes32,uint256,address)", +"e3539dcc": "LogReceivedETH(address,uint256,uint256)", +"e3546ac5": "isRatio()", +"e354a3f2": "freezeAccount(address,bool,string)", +"e35501be": "activate_admin_commission()", +"e3552808": "RoboToken(uint256)", +"e35568cb": "getAvailableTokens()", +"e355cd4a": "SharkPool()", +"e35694c0": "callFunction(address,address,uint256,bytes32)", +"e3577e71": "setPaymentSettings(string,string)", +"e3579ea5": "publish(string,string,address,uint256)", +"e3583870": "replaceDecomissioned(address)", +"e358b0e1": "withdrawPreICOEth()", +"e358d75a": "getFairymasterReq()", +"e3599c21": "updateGame(uint8,uint8[],uint32,uint8,uint8)", +"e359cbbb": "hasEnoughBalance(address,uint256)", +"e35b37fe": "TRANSFER_COST()", +"e35b8717": "GolixTokenDistribution(uint256,uint256,uint256,address,address,address)", +"e35b9699": "Namek()", +"e35c606b": "JiggsR()", +"e35c96d4": "NextToken(address)", +"e35ca326": "cancelOrder(uint80,bool)", +"e35d1a86": "sendFundsToOwner(address,uint256)", +"e35d3590": "AddSocialAccount(bytes32,bytes32,bytes32)", +"e35d75a9": "tokensToEthereum_3(uint256,uint256)", +"e35e6078": "tokenPerUsdDenominator()", +"e35e6e0c": "setPrice(uint16,uint16,uint8,bytes32,uint256)", +"e35f0254": "numberOfProposals(string)", +"e35f4db3": "developer_edit_text_amount(string)", +"e3602077": "withdrawInWei(address,uint256)", +"e360736e": "getHistory(string)", +"e360a49e": "latestUpdate()", +"e361112a": "isPaying()", +"e3611578": "testFooKill()", +"e36255e2": "_checkGeneralRequirements(uint256,uint8,uint8)", +"e3625dee": "REFERPAYToken()", +"e362bc9a": "confiscateDeposit()", +"e362efdc": "getTotalPayout()", +"e362f168": "CoinAdvisorPreIco(address,address,uint256,uint256)", +"e362fcaa": "Creditors(address)", +"e3637435": "supportAccount()", +"e3643106": "getLatest(uint256,uint256)", +"e364bd01": "KEOS()", +"e3650781": "setGasForGR(uint256)", +"e3651ef3": "fetchRecentSubmittals()", +"e3659e69": "CNIFCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e365fd7f": "setMiniPoolEdit_8(string)", +"e3661586": "confirmManager()", +"e3669d7c": "Ballot(string,bytes32[])", +"e3677664": "transferPiece(uint256,address)", +"e3685ef7": "PocketMoneyContract()", +"e3686b49": "PopeCoin(uint256,string,uint8,string,address)", +"e3688d7a": "maxNumMC()", +"e3692473": "setMockedDate(uint256)", +"e3699763": "_addAddress(address)", +"e36a0e6e": "hasPermissionFrom(address)", +"e36af50d": "betsKeys()", +"e36b0b37": "stopSale()", +"e36b9b9f": "addMemberById(uint256,address,address)", +"e36ba174": "updateMaxCapEthOnce(uint256)", +"e36c2072": "countCourses()", +"e36c3f70": "BENEFITToken(uint256,uint256,uint256,uint256,uint256)", +"e36d036c": "mintPresale(uint256,address)", +"e36d3844": "CardCreated(address,uint256,uint256,uint256)", +"e36d392c": "DeliverInfo(uint64,uint256,uint256,uint256,uint256,bytes32,uint64,bytes32)", +"e36d3a43": "SENDING_BLOCK()", +"e36db785": "creditor()", +"e36dd1f9": "withdrawalMoneyBack()", +"e36e1051": "setcardsalemoney(uint256,uint256)", +"e36e5d18": "showTopsPlayer()", +"e36f3177": "maxIssuingSupply()", +"e36f3e7c": "getAddressDescription(address)", +"e3710599": "SendTokens(string)", +"e371817e": "calculateTokenAmount(uint256,address)", +"e371c0e6": "transferPermissions(address,uint256)", +"e371cdd4": "luke(uint256,string,string)", +"e371dfdb": "allFamily(uint256,address)", +"e372d0eb": "ownersOfArea(uint256,uint256,uint256,uint256)", +"e37362ab": "NRB_Main()", +"e37426d4": "StopCrowdsale()", +"e374e8d4": "isMyWalletLocked_Receive()", +"e375dfed": "StarbaseCrowdsale(address,address)", +"e377ac31": "legal()", +"e3787c61": "TestContract(string)", +"e3788da6": "ExternalAccountsBase()", +"e378f045": "window0TokenCreationCap()", +"e37a012f": "fireEventOnTokenTransfer(address,uint256)", +"e37a7fff": "newPlayer(uint256,uint256)", +"e37aa618": "distributeValue()", +"e37aca99": "BOXICOIN()", +"e37b346d": "redistribution()", +"e37b71ce": "getFundTX(address,uint256)", +"e37bddc3": "changeEnd(uint256)", +"e37c6cf8": "redeemDisavowedTokens(address)", +"e37c8613": "balanceOfPendingToken(address)", +"e37ccac7": "getSuperseded(address)", +"e37cd202": "getBonusRate(uint256)", +"e37d46bd": "myDivs()", +"e37d4fed": "withdrawToFounders(uint256)", +"e37d883a": "NumbersToken()", +"e37e26cc": "_buyFromMarket(uint256,bool,uint256)", +"e37e60d1": "testControlRetractNotOwner()", +"e37e7d1a": "init(address,uint256[],uint256,uint8)", +"e380575a": "presaleFundsRaisedInWei()", +"e380ae96": "setNow(uint256)", +"e380b7bd": "balanceOfToken(address,uint256)", +"e38138a2": "startPurchaseTokens()", +"e3814b19": "fromUint(uint256)", +"e38180ec": "addToPayeeBalance(address,address,uint256)", +"e381a8d9": "StegoCoin()", +"e38296e4": "changeDelegate(address)", +"e382b854": "_setPackedTimestamp(bytes20,uint256)", +"e382c3e6": "getPeriodBonus()", +"e382fe45": "deathData_v4()", +"e383da38": "totalAffiliateTokensSent()", +"e3843f6e": "myLoseShare()", +"e3844a61": "isBetPossible(bool)", +"e3848e5b": "thing(string,string,string)", +"e385b43a": "DistributionNextPos()", +"e385f7d2": "SendResult(uint64,bytes18,bytes32,bytes11)", +"e3873ad7": "setDepositBankFee(uint256)", +"e3877391": "DDJETHToken()", +"e3877acd": "frozenDaysForAdvisor()", +"e38787aa": "internalBurnTokens(address,uint256)", +"e387d31a": "estateRegistry()", +"e388cbb9": "swpFundDeposit()", +"e389b63f": "transfer(address,uint256,bytes,string,uint256)", +"e38bc1f0": "timeThatFinishGuaranteedPeriod()", +"e38c35b6": "getLockedUserBalance(bytes32)", +"e38c4585": "JointICOContractAddress()", +"e38c9825": "maxgame()", +"e38cc06b": "testDiv()", +"e38d0fbd": "FirstTradingEcosystem()", +"e38d6b5c": "maxPrice()", +"e38d7e99": "_next_id()", +"e38da1a1": "storeDoi(bytes32,bytes32)", +"e38e2cfb": "step(uint16)", +"e38f4861": "initLock()", +"e38fbdf6": "addBoundary(address)", +"e38ff5dc": "updateInvestor()", +"e39062f5": "MDTKAirdrop(address,address)", +"e3906b3d": "mintNextCard()", +"e390e263": "disableWhiteListForever()", +"e3914699": "dEthereumlotteryNetWinners(address)", +"e391a7c4": "revokeSignaturePreSigned(bytes,bytes,uint256)", +"e391b3d1": "ssword(string)", +"e391bda5": "transferImpl(address,address,uint256)", +"e39253e6": "SampleToken(uint256,string,uint8,string)", +"e392a521": "indexPrice(uint8)", +"e3945eba": "planetLife(uint256,uint256,uint256)", +"e395983a": "bountyTokensBatch(address[],uint256[])", +"e39608af": "ETUToken(string,string,uint256,uint256)", +"e3961174": "tokensCreationCap()", +"e3964b8c": "ERC20Token(string,string,uint8,uint256,address)", +"e3967d6a": "currentTimeBonus()", +"e3967eed": "totalUserNumber()", +"e396bd60": "LogEscrowWeiReq(uint256)", +"e396da73": "checkProof(bytes32,bytes32[],uint256)", +"e3973b5a": "NiteshToken()", +"e397dfd1": "updatetoken(uint256,string,string,uint256)", +"e39898d1": "checkSaleValid()", +"e399331b": "coinAllocation()", +"e3994993": "addDiary(string)", +"e399cb0d": "initializeCappedFundraiser(uint256)", +"e399daab": "zoomraffleFee()", +"e39a686c": "ChainBackedOption()", +"e39b2284": "ZEONPrivateSale(address,address,address,uint256,uint256)", +"e39b40d8": "_createCard(string,uint256,address,address,bool)", +"e39bbf68": "dividedBy(uint256,uint256)", +"e39bdfab": "getCutie(uint40)", +"e39c6d80": "batchTransfer(address,uint256[],uint256[])", +"e39c742a": "_caluLocktime(uint8)", +"e39cbe80": "senderAdminAndSaleNotFinal()", +"e39d2a98": "nextCommonTTMTokenId2()", +"e39dcc21": "blah()", +"e39ebde9": "FOLIToken()", +"e39fa059": "queryRandomCallback(bytes32,string,bytes)", +"e39fbd88": "tokensDispensed()", +"e39fff72": "Divs()", +"e3a0a148": "giveOwnership(address)", +"e3a0de36": "admin(string,string,string,string)", +"e3a12480": "getBalance(uint8)", +"e3a135b9": "_bid(uint256,uint256,uint256,uint256,address)", +"e3a199d6": "testThrowCreateNewRevisionNotUpdatable()", +"e3a2a327": "SmartCityCrowdsale(address,address,address,uint256)", +"e3a37ea2": "newIndex(bytes32)", +"e3a47b00": "standing()", +"e3a531a3": "setSaleAuctionContractAddress(address)", +"e3a5f6f8": "_receiveToken(address,address,uint256)", +"e3a70ec1": "max_goal_amount()", +"e3a71e32": "deliverBonusTokens(address[])", +"e3a75485": "TORUE()", +"e3a797f1": "getCandidateMemberInfo(uint256)", +"e3a79840": "finishPresale(uint256,uint256)", +"e3a7f45a": "ecrecoverWrapper(bytes32,uint8,bytes32,bytes32)", +"e3a83290": "SALE_address()", +"e3a861a4": "setCrydrView(address,string)", +"e3a87f8b": "secondPrivateReleaseTime()", +"e3a8b13a": "core(uint256,uint256,address,uint256,string,uint256)", +"e3a8b345": "emptyContract()", +"e3a8e29c": "addBorrower(address)", +"e3a8e50b": "Subscription(bytes,address,bytes)", +"e3a94e9f": "addPacksToStandardSale(uint32[])", +"e3a96cbd": "getDispute(uint256)", +"e3a9744b": "mintTokens(int256,uint256,address,bool)", +"e3a97893": "secondPresaleEnd()", +"e3a99d2b": "updata(uint256,uint256)", +"e3a9b508": "EnableDisableTokenProxy()", +"e3a9db1a": "depositsOf(address)", +"e3aa018e": "setRank(address,uint256)", +"e3aa3c6e": "initialBonuslistTokens()", +"e3aa3fbb": "startEscrow(string,uint256,uint64)", +"e3aa62b1": "responsavel()", +"e3aae11b": "isStartGame()", +"e3ab8492": "requestGWAPrice(string)", +"e3abeaf3": "setAllowedTransferTo(address,bool)", +"e3ac3880": "backupfarmItems(address[],uint256[])", +"e3ac5d26": "prize()", +"e3ac8e16": "setFinalizationTime(uint256)", +"e3acc49a": "catIndexToPriceException(uint256)", +"e3adf4ea": "ChangeICOEnd(uint256)", +"e3ae1667": "commRate()", +"e3ae85f0": "winReward()", +"e3aec30c": "ballotStarted()", +"e3aeedc4": "lastMintedTokens()", +"e3aef2bd": "checkUnlockedTokensData()", +"e3af2ed9": "TWToken()", +"e3b0073e": "getVoteCounter(uint256,uint256)", +"e3b08f56": "concatYearMonth(uint16,uint8)", +"e3b09a85": "HungrCoin()", +"e3b10447": "GITToken()", +"e3b2594f": "fundingCap()", +"e3b26a8c": "SocialNetwork()", +"e3b3847c": "SubmitProofOfOwnership(bytes32)", +"e3b3932a": "bookKeeper()", +"e3b45ab7": "MIN_TOKEN_AMOUNT()", +"e3b460c9": "hookOperator()", +"e3b49a03": "rollSystem(uint256)", +"e3b55276": "AdminBuyForSomeone(uint16,address)", +"e3b5a153": "lastEpochTX()", +"e3b6040e": "amountSlicesCount()", +"e3b61135": "reinvestProfit()", +"e3b62158": "TokenVault(address)", +"e3b71ded": "setMaxContributionCrowdsaleAddress(address)", +"e3b7b668": "_setMaxDailyPerUser(uint256)", +"e3ba3398": "importTokens(address)", +"e3ba80d0": "purchaseImpl(uint16,uint64,address)", +"e3bab7ce": "buildInternalSalt(uint128,address,address,address,uint256,uint64)", +"e3bb01ac": "viewCancelledList(address)", +"e3bb3445": "releaseSupply(uint256,uint256)", +"e3bbab85": "test_smallDeviationPermitted()", +"e3bbb4f1": "MAX_GAS_PRICE()", +"e3bc2bb5": "newPassword(string,uint256)", +"e3bd9638": "getContract(address,address,uint256)", +"e3bea282": "callnotchecked()", +"e3bfdcfe": "pollBurnInc()", +"e3c04c32": "getNota(uint256)", +"e3c08adf": "getPlayerLAff(uint256)", +"e3c10714": "setMinContrib(uint256)", +"e3c2e4b9": "_setCreatedBlockOnCommitsPhase(uint256,address,bool)", +"e3c33a9b": "hasRole(string)", +"e3c3b200": "proposeWithFeeRecipient(address,address,bytes)", +"e3c3ec92": "BONUS_REWARD()", +"e3c3f180": "_setPurchasePremiumRate(uint128)", +"e3c4b1ae": "minSumICOStage2USD()", +"e3c517a9": "lockFlag()", +"e3c5862b": "setCAO(uint256,uint256,uint256,uint256,uint256,uint256)", +"e3c5a852": "buyTickets(uint256[],uint256,uint256)", +"e3c5d11a": "MIN_BUY_TOKENS()", +"e3c6e66d": "discountedIcoStartBlock()", +"e3c73d32": "minimumPriceCount()", +"e3c79a20": "enterOnBehalfOf(uint256[],uint256,address)", +"e3c82106": "becomeDuke(string,string)", +"e3ca12c6": "sendtoB(uint256)", +"e3cafbb0": "TOKEN_EARLYSUPPORTERS()", +"e3cb0cf0": "maxTransferPerTimeframe()", +"e3cb49f9": "setBlockingState(address,uint256,uint256)", +"e3cb8563": "playToken()", +"e3cbe744": "updatePlayersCoinByOut(address)", +"e3cc3570": "mintMigrationTokens(int256,address,uint256)", +"e3cc65e2": "getInvestorsLength()", +"e3cc83cf": "withdrawWhenFinished(address)", +"e3ccb809": "voteOnProposal(bool)", +"e3cd30f6": "getBuilding(uint8[176],uint8,uint8)", +"e3cd7c03": "getPass(address)", +"e3ce9714": "proxyWithdraw(address,uint256,uint8,bytes32,bytes32)", +"e3ceb06d": "YesNo(bytes32,address,string,address,uint256)", +"e3cee57b": "calLast5RoundProfitForRead(uint256)", +"e3cf1ad3": "changeRegistrationStatus(address,uint256)", +"e3cf6644": "sendKmPards()", +"e3cfef60": "timeRemaining()", +"e3cff634": "test(uint32)", +"e3d021d5": "purchaseTicket(uint16[])", +"e3d0252b": "defaultTriggerTime()", +"e3d0799c": "PLATFORM_FEE_PER_10000()", +"e3d0be5c": "EARLY_INV_BONUS()", +"e3d1072c": "Giveafuck()", +"e3d13592": "newTechSupport()", +"e3d1afd4": "TestToken(uint256,string,string,address)", +"e3d1e6d6": "hasProof(bytes32)", +"e3d2a98c": "setCurrentFundingGoal(uint256)", +"e3d2c1bf": "presaleTokensPerDollar()", +"e3d33fc9": "transferCount()", +"e3d36a98": "Credit(address)", +"e3d3f4cd": "bidGift(uint256,address)", +"e3d4187f": "Buy(address,uint256)", +"e3d51a0f": "repayBorrowInternal(uint256)", +"e3d5d88b": "getServerBuildingName(uint256,uint8,uint8)", +"e3d5e6a3": "year2Unlock()", +"e3d670d7": "balance(address)", +"e3d6ce2b": "addFiatTransaction(string,int256)", +"e3d6e4a3": "setFundsCreditBitContract(address)", +"e3d74457": "releaseTimeFirst()", +"e3d7f159": "FIRST_TIER_DISCOUNT()", +"e3d86998": "declareNewerVersion()", +"e3d91ebf": "bonusPoolsOf(address)", +"e3d9e8ea": "drawnArbiter(address,uint256)", +"e3da41b5": "sortWinningNumbers(uint8[5])", +"e3da5399": "left90(uint256)", +"e3da9f8f": "tranchesOf(address)", +"e3dac959": "makeTapTop()", +"e3db17b8": "updateContract(address)", +"e3db6670": "isHardCapTokensReached()", +"e3dbaff1": "tokensSpent()", +"e3dbda67": "setArtistsControlAddress(uint256,address,address)", +"e3dcd2c8": "maxPaymentInEther()", +"e3dd164e": "setNewTokenImporter(address)", +"e3de18b2": "withdrawMyClosedDeposits()", +"e3dea4b7": "setMcrAmountForGas(uint256)", +"e3debbbe": "getSubscriptionServiceID(bytes32)", +"e3e06c45": "PayPayCoin()", +"e3e10762": "calculateIdeaBuySimple(uint256)", +"e3e1dcb3": "getRouteNameByIndex(uint256)", +"e3e2342f": "callTokenHolderTribunal(string)", +"e3e28bab": "setTimes(uint256[],uint256[])", +"e3e2b1ba": "add_number(uint256)", +"e3e4001b": "buyWithReward(address)", +"e3e42b0c": "ZenAD()", +"e3e4a1b4": "burnUserTokens(uint256)", +"e3e4b9fb": "claimJob(uint256)", +"e3e5075c": "depositBattleValue(address)", +"e3e532a2": "setInstantToken(address)", +"e3e5439c": "specDWallet()", +"e3e54ac2": "CarDeregistrationFaled(uint256)", +"e3e5c9c1": "WhiteListBonusTokensEmitted(address,uint256)", +"e3e7399e": "addWinner(address,bytes4,uint256)", +"e3e7519c": "getTokenPriceforDapp()", +"e3e77055": "MultipleTokenVesting(uint256,uint256,uint256,address,uint256)", +"e3e7903f": "updateScore(address)", +"e3e7b439": "cryptoWillToken()", +"e3e7c665": "makeMoney()", +"e3e7d4f4": "leaderboardEntries(uint256)", +"e3e88734": "SigUser(address)", +"e3e9800d": "_cancelSellOfferInternal(uint32,bool)", +"e3e98cad": "COSSToken()", +"e3e9bc3f": "becomeSponsor()", +"e3e9cb4c": "Birth(address,uint256)", +"e3ea6496": "newCarProductID()", +"e3ea67d4": "STARTING_TURTLES()", +"e3eba060": "allowedToSpend(address,address)", +"e3ec0251": "subtraction()", +"e3ec0666": "clearJackpotParticipants()", +"e3ec5046": "DECIMALCOUNT()", +"e3ec7584": "showTokensUnfreezeDate(address)", +"e3ecbd7e": "isEditionEnabled(uint256)", +"e3ed14db": "getDiamond(uint256)", +"e3ed48a4": "getTokenScope(uint256)", +"e3edbfd3": "getAmountDue(address)", +"e3f037d8": "FlightDelayUnderwrite(address)", +"e3f0920a": "coinMaster()", +"e3f0b761": "walletF()", +"e3f0dd48": "getMult(bytes32,bytes32,uint256)", +"e3f10188": "updateFlagCount(address,address,uint256)", +"e3f16a61": "GRPlaceholder(address,address)", +"e3f25f01": "_delegateforward(address)", +"e3f2e4a4": "ante()", +"e3f310c7": "priceToSpend(uint256)", +"e3f38dd6": "GetSignVersion(string,address,uint256)", +"e3f4937f": "outOverRoundId()", +"e3f4ffdc": "GeezerToken()", +"e3f5009f": "payWithMileagePoint(uint256)", +"e3f508f5": "setLeaf(uint256,uint256)", +"e3f52c99": "warrior()", +"e3f563f6": "generateCompoundTerms(uint256)", +"e3f596a4": "ownerPrice()", +"e3f61948": "getStartIndex(uint64)", +"e3f688d3": "ThingschainToken(address)", +"e3f6b544": "member()", +"e3f7faaf": "calculatePrice(uint256,uint16)", +"e3f954be": "buyICOTokens()", +"e3f96400": "getTotalOwnerAccounts()", +"e3f9ba0e": "returnEth()", +"e3f9cd17": "lockTokenForExchange(address)", +"e3fa5882": "tryWithdraw(uint256)", +"e3fc03a8": "Guess(address,uint256,int256,int256,uint256)", +"e3fc43b2": "ended(bool)", +"e3fcbac1": "getSharesPercentage(address)", +"e3fcf122": "_sctc(uint256,uint256,uint256,uint256,address)", +"e3fe0317": "_setAllocationFee(bytes32,uint256)", +"e3fe48a1": "loadWhiteList(address[],bytes32[])", +"e3fe6a9e": "sehrRaised()", +"e3fe9740": "icoThresholdReached()", +"e3ff2f05": "weiExchangeRate()", +"e3ff9ac2": "MACHToken()", +"e3ffc9a3": "sendEtherToOwner()", +"e3ffcb84": "loserOf(uint256,uint256)", +"e3ffefe3": "ZeroReturnProfit()", +"e4002b30": "commitEuro()", +"e4007949": "buyRegistration()", +"e4019e07": "BOB()", +"e40205d6": "roundEndTime()", +"e4020804": "isHealthy()", +"e4024194": "returnedData()", +"e4027126": "mSumRawSpeed()", +"e40418a0": "trustedContractAddr()", +"e4043b37": "updateProduct(uint256,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4048049": "createBool(bytes32,bool)", +"e4062df5": "SkychainToken()", +"e4063140": "getAllActivity(uint256)", +"e40652e3": "creatUserPurchase(address,string)", +"e4065c4c": "Alias()", +"e406bb4b": "minedTokenCount()", +"e407ccb9": "Repayment(uint256)", +"e40819af": "lastTokenCreated()", +"e4083daf": "create_game_invite(bytes32,address,uint32,uint32,uint8,uint16,uint8,address,uint256)", +"e408de80": "buyInWithAllBalanced()", +"e40906ed": "getBorrowBasicInfo(uint256)", +"e4098655": "getCallCalledAtBlock(bytes32)", +"e409edf1": "chooseWinnerDeadline()", +"e40a72d4": "_internalToken()", +"e40a7545": "collectBuyFee(uint256,address)", +"e40a955c": "grantTeamTokens(address)", +"e40b4523": "activateVault(address,uint256,uint256,uint256,uint256)", +"e40c231e": "StoneToken()", +"e40cc359": "getListParamsUnOrdered(uint256)", +"e40d3692": "contributedAmountOf(address)", +"e40d835e": "getPositionIdFromNonce(uint256)", +"e40d8fc3": "addICOEndDate(uint256)", +"e40dd35b": "isGameApproved(address)", +"e40e56d3": "regular_coins()", +"e40e8457": "requestBurnerContract()", +"e4105ed5": "setToken(uint8,address)", +"e4109df8": "MAGTOKEN()", +"e410a0c6": "setup(address,uint16)", +"e4115a8c": "ApcrdaZebichain()", +"e4120220": "getTokenTrust(address)", +"e412828a": "Shark()", +"e412c526": "set_pre_kyc_bonus_numerator(address,uint256)", +"e415f4ee": "_addDai(uint256,address)", +"e4160e48": "admin_active_withdrawable()", +"e4165e15": "ownerDeactivateToken()", +"e416d173": "PreICO(uint256,uint256,address,address,uint256)", +"e416f6b4": "_startRound()", +"e416faa0": "getBetNum()", +"e4171746": "major_partner_address()", +"e417291b": "undelegateDAOTokens(uint256)", +"e41763f2": "setTokenFeeDeposit(address,uint256)", +"e41765de": "addBotAddress(address)", +"e417c38c": "Reward(address,uint256,uint256,uint256)", +"e417c62c": "ProofFund(address)", +"e4187d02": "multiplyDecimal(uint256,uint256)", +"e418f592": "receiveToken(address,uint256,bytes)", +"e419f189": "multiAccessIsOwner(address)", +"e41adb25": "PoolPreICO()", +"e41b1d28": "noAccountedWithdraw()", +"e41c02c9": "determineFirstPeriodOutcome(uint256)", +"e41cc093": "getItemStore(bytes12)", +"e41d0944": "acceptDonate()", +"e41d65e0": "payWinnerManually()", +"e41eaa41": "fakeNow()", +"e41ee46a": "MAX_QUANTITY()", +"e41f7dc1": "ethPriceProvider()", +"e41fb842": "comunityMintedTokens()", +"e420264a": "g(uint256)", +"e420a904": "FirstToken()", +"e420dcc5": "tokenDrian()", +"e4218416": "redemptionPayouts(uint256)", +"e422d6b8": "createRareCard(uint256,uint256,uint256)", +"e422ebe9": "getBot()", +"e422f311": "secondWeekEndTime()", +"e422f699": "toBE(uint256)", +"e4232069": "MAX_INPUT_USERS_COUNT()", +"e4246ad2": "canContractExchange(address)", +"e4246ba0": "setPaymentContract(uint8,address)", +"e424ddbd": "allocateFoundersTokens(uint256)", +"e4251361": "getTodayInvestment()", +"e4254585": "MFNToken()", +"e4274453": "PUBLIC_CROWDSALE_SOFT_CAP()", +"e4277f78": "backToOldOwner()", +"e427a197": "previousMinters(address)", +"e428ad8a": "ReferralReward(uint256)", +"e428fd5f": "takeBackMoney()", +"e42996d1": "redeemCoinsToICO(uint256)", +"e429bd8b": "getUsableAmount(address,address)", +"e429cef1": "addAuditor(address)", +"e42a4556": "KKTokenNew()", +"e42a8bc9": "dAddBallot(bytes32,uint256,uint256)", +"e42a9156": "AppleproToken()", +"e42a96e7": "escrowContract()", +"e42b0193": "test_insert_findWithHintNextIncreased(int256)", +"e42bb93f": "StarUniteChain(uint256,string,uint8,string)", +"e42bff66": "mintBadge(address,uint256)", +"e42c04f4": "Cryptshopper()", +"e42c08f2": "tokenBalanceOf(address)", +"e42c1337": "getSalary(string)", +"e42c1b76": "BountyActivated(uint256,address)", +"e42cb9f3": "statement()", +"e42d5be0": "getPaymentOf(address)", +"e42d674d": "refundIco()", +"e42d6efa": "unregisterUsers(address[])", +"e42d70ba": "safeAddCheck(uint256,uint256)", +"e42def21": "CryptoHill()", +"e42f4cc0": "addPersonalInfo(address,string,string,string,string,string,string,string)", +"e4309307": "fortifyClaims(uint16[],uint256,bool)", +"e430bb5b": "getFreeCoins()", +"e4310205": "addMastercardUser(address)", +"e431af36": "_addMember(address,uint256)", +"e431d241": "validateAndRegisterClaim(address,bytes32,uint8,bytes32,bytes32)", +"e4322464": "MatchBettingFactory(address)", +"e43252d7": "addToWhitelist(address)", +"e432f0e5": "queryOracle(string)", +"e4330545": "dump()", +"e433bb3a": "HAVY()", +"e4340e6a": "Wallet5()", +"e435f2c9": "takeOwnershipMultiple(uint256[])", +"e4360fc8": "getFileListElement(bytes)", +"e43650b6": "changeILFManager(address,bytes32)", +"e436a3f7": "getRoot2_16(uint256)", +"e436bdf3": "Draws(uint256)", +"e4372d0f": "setRestrictedAcct(address,uint256)", +"e437d1a7": "unRedeem(uint256)", +"e437d815": "getDsitributeMulti(address[],uint256[])", +"e438ff55": "changeINAWallet(address)", +"e43926fb": "refundTokenToCustomer(address,uint256)", +"e439501e": "AntmineToken()", +"e4397db1": "getBetsState()", +"e43a0bb2": "pullFunds()", +"e43a8897": "DonatedBanner()", +"e43aa5ff": "Medban()", +"e43ac447": "DirectConnectionFactory()", +"e43ae642": "deleteDIDHolderWhenBalanceZero(address)", +"e43b72b4": "discountedInvestors(address)", +"e43ba0bd": "isStrategy(bytes15)", +"e43bb0f6": "link(uint256,address,address)", +"e43bc1e9": "functionName3(bytes32)", +"e43c74a4": "BRoyalCoin()", +"e43cd900": "PoolBounty()", +"e43d68ce": "GetBanker(uint8)", +"e43dfebf": "burningTokens()", +"e43f696e": "setWhiteList(address[],bool)", +"e43f8424": "burnGoldTokens(address,uint256)", +"e4403507": "tokenContractBalance()", +"e4415d98": "investorDividends(address,address)", +"e44171b1": "Arina_amount_judgment(uint8,uint256)", +"e4424c9e": "createNew(bytes32,address)", +"e443253a": "DataFromSetting(uint8)", +"e443348e": "ONE_TOKEN()", +"e4440a86": "marketWallet()", +"e4444feb": "removeAllowedAddress(address,address)", +"e444504c": "nextClaim()", +"e44451ba": "removeAddressFromAdminlist(address)", +"e444a2e1": "_birthPerson(string,string,uint64,bool,bool)", +"e44501c4": "inactive_dividend(address)", +"e4454fdc": "GetMaxStageEthAmount()", +"e44591f0": "isNonFungible(uint256)", +"e4480dd8": "withdrawl(uint256)", +"e448ee26": "joinChallenge(uint256)", +"e4492fcd": "TokensPerETH()", +"e4495b15": "confirmSetIssuer()", +"e449c52a": "getStr(string)", +"e449de9f": "prevContract()", +"e44a94d3": "minContributionPresale()", +"e44ac1e4": "addLock(address[])", +"e44b974f": "placeBet(uint8,uint256,uint256,uint8,bytes32,bytes32)", +"e44bc43f": "stepOneRate()", +"e44c333a": "DreamTeam()", +"e44c96c9": "addInitialOwners(address[])", +"e44caea6": "balances3(uint256)", +"e44d3084": "testFailure()", +"e44d311b": "ticketPrices(uint256)", +"e44d6f04": "beatTeamWallet()", +"e44dbb75": "addAddressListItem(uint256,address)", +"e44ddaf5": "healthAndMana(uint256)", +"e44de421": "buyTokenFrom(address,address,uint256)", +"e44f777c": "returnETHforUnqualifiedBuyers(uint256,uint256)", +"e450056c": "tokenPartition(uint256)", +"e4503da4": "startPhaseMaximumcontribution()", +"e4504f62": "dogCore()", +"e451197a": "OrdoCoin()", +"e451ecfa": "swapTokenValueForCredits(address,address,uint256,address,string,uint256,uint8,address)", +"e45285cf": "setAIRDROPBounce(uint256)", +"e4536316": "removeARA(address)", +"e4536b84": "BalanceReader()", +"e453877e": "_approveTransfer(uint256)", +"e4538c6c": "addUndergraduateTo(address,string,string,string,uint8,uint8,uint8,uint8,uint8,uint8,uint32,uint32)", +"e454158c": "futureSaleAllocation()", +"e4543410": "setIncrementPercentage(uint256)", +"e4547443": "releaseTimeLock(address,uint256)", +"e4547f98": "documentExists(bytes)", +"e45499c1": "updatePriceOfToken(uint256)", +"e4556549": "get_session_balance(address,uint32,uint32)", +"e4556f2d": "MaturityPrice(uint256,uint32,bool,bool,bool)", +"e455d26c": "getCurrentNeedsCount()", +"e455fce7": "extractOversightAddressesIndexLength()", +"e4560388": "endTimeMain()", +"e45648ac": "exchangeOldVersion()", +"e4564a4a": "returnAddressBonuses()", +"e4569c4e": "eeeeeeeeeeee()", +"e4578590": "SplitPaymentMock(address[],uint256[])", +"e457deda": "FindSlug()", +"e457e1e5": "charge(uint256)", +"e458c754": "whitelists(uint8,address)", +"e45a4fb4": "isMultipleOf(uint256,uint256)", +"e45a93cc": "GIT()", +"e45aa608": "tokensForfortis()", +"e45ab391": "Technology5G(address)", +"e45b1d1b": "openClosedToken()", +"e45b7388": "subscribers_TO_HATCH_1CraigGrant()", +"e45b8134": "transfersFrozen()", +"e45bc0ae": "dollcoin()", +"e45be8eb": "minPrice()", +"e45bf7a6": "forwardTo()", +"e45c1879": "getAuctionsCount()", +"e45c210c": "LogFunderInitialized(address,string,uint256)", +"e45c47b9": "SetPermissionsList(address,address,uint8)", +"e45ce7e3": "refillTxFeeMinimum()", +"e45ceec1": "getUnreadMessages(address)", +"e45d0550": "getAddressArray(address,string,string)", +"e45d4717": "withdrawLogic(bytes32,uint256,uint256,uint256[])", +"e45da0be": "freezeAddress()", +"e45dbabd": "addAddressesToWhitelist(uint256,address[])", +"e45ebe93": "checkVoteStatus()", +"e45ef4ad": "bobClaimsPayment(bytes32,uint256,address,address,bytes20)", +"e45fc71f": "getPeriodCycle(uint256)", +"e460382c": "importBalanceBatch(address[])", +"e4614066": "MelonToken(address,address,uint256,uint256)", +"e46164c5": "waitingForPayout()", +"e4626c8f": "like(address,uint256)", +"e462c888": "createEscrowByBuyer(address,uint256)", +"e463b659": "EtownCoinTest(uint256,string,uint8,string)", +"e463fa6b": "AddWhitelist(address)", +"e464dcc8": "userHasLuckyStone(address)", +"e4651465": "addEthTeller(address,uint256)", +"e46523f2": "_isNeighbor(uint8,uint8)", +"e46537ba": "JJCOIN()", +"e465c465": "like(address)", +"e46617b6": "releaseMultiAccounts(address[],address)", +"e4662939": "CLBToken()", +"e46638e6": "canTransfer(address,address,uint256)", +"e46694e8": "lastStakePriceUSCents()", +"e46751e3": "exp(int256)", +"e467f7e0": "mint(address[],uint256[])", +"e4682f00": "cancelSpendLimit(uint256)", +"e4683a79": "refund(bytes32,bytes32)", +"e4684d8f": "AXNETToken()", +"e468688e": "addTotalSupply(uint256)", +"e46871f1": "governingLaw()", +"e468cb72": "FUTM()", +"e468dc16": "Testokenmaking()", +"e4690a0b": "popRequest()", +"e469185a": "updateReserveRatio(uint8)", +"e4693e98": "endFundingTime()", +"e4698ee7": "start5Phase2020()", +"e46a5c21": "getArmyBattles(uint256)", +"e46c2cc4": "bytarr28(bytes28[])", +"e46d1939": "napoleonXAdministrator()", +"e46d6cb1": "canChangeRecoveryAddress(uint256)", +"e46da1b9": "MeiJiuToken(uint256,string,uint8,string)", +"e46dcfeb": "initWallet(address[],uint256,uint256)", +"e46dea92": "BlockChainPay()", +"e46f20dc": "getTransferHash(address,uint256,address,address,uint256,uint256)", +"e46f9ecf": "enableCodeExport()", +"e46fbe76": "burnSomeEther()", +"e46feb2c": "orgy1f(string,string)", +"e4706e3a": "TokenRateChange(uint256)", +"e470ddf8": "totalKittiesBurned()", +"e47112bd": "sendTokens()", +"e471a5b9": "putIntoPackage(uint256,uint256,address)", +"e471d770": "StopTheFakesPromo()", +"e472311b": "handleHTLCUpdateTx(address,bytes32,bytes32)", +"e4723828": "TestMath()", +"e4725ba1": "accept(bytes32)", +"e4745970": "transfer(uint256,address,string)", +"e474777e": "applyForCertification(string,string,bool,string,address,string,string)", +"e474f97a": "setPreicoAddress(address,uint256)", +"e4752159": "DigitusToken()", +"e475222e": "activeGames()", +"e476137b": "windUp()", +"e476af5c": "revokeAttributeSigned(address,uint8,bytes32,bytes32,bytes32,bytes)", +"e476cb86": "_mintTokens(address,uint256)", +"e4772ae3": "getDailyCount(address)", +"e4779d73": "register_user(address)", +"e4788384": "CancelAuction(address,uint256,uint256,uint256,uint64,uint256,address)", +"e478b578": "ProofofConcept()", +"e47a192e": "FactomIssued()", +"e47a6a9f": "disbursementPeriod()", +"e47bc32b": "ShanHuCoin()", +"e47c0c20": "GetCityData(address)", +"e47c5902": "ecverify(bytes32,bytes)", +"e47c66ca": "removePanelist(address,address)", +"e47ca4eb": "LogNewAnswer(bytes32,bytes32,bytes32,address,uint256,uint256,bool)", +"e47cb18f": "PointToken(uint256,string,string,uint256)", +"e47d8085": "isCurrentUser(address)", +"e47d914a": "fechVoteInfoForVoter()", +"e47da59e": "consumeTicket(address,string,uint256)", +"e47dace5": "totalLenderBalance()", +"e47dea1d": "setWithdraw(address)", +"e47e1c0b": "getAssetIds()", +"e47e7e66": "ask(uint256)", +"e47ea649": "isICOfinalized()", +"e47f0d64": "list_products()", +"e47f18d0": "CryptoTorchToken()", +"e47ffb64": "setSoft_Cap(uint256)", +"e480ba6a": "isDailySettlementOnGoing()", +"e4818a5d": "totalUnreleasedTokens()", +"e4818e4b": "secondPeriod()", +"e481c884": "ACFWallet()", +"e481ebf0": "getOwnedActiveEntry(uint256)", +"e48225ce": "startStakingAt(uint256)", +"e4828367": "buyEther(uint256)", +"e48341db": "getUpdateCount(bytes32)", +"e4845c2f": "Sperm()", +"e4849b32": "sell(uint256)", +"e4852b9b": "transferAccount(address)", +"e4860339": "tokens(address)", +"e486387a": "ReferenceToken(string,string,uint256)", +"e486869b": "setstoredaddress(address,address)", +"e487624b": "EarnedGNS(address,uint256)", +"e487c88b": "CROWDSALE_UNVERIFIED_USER_CAP()", +"e487e87b": "activateICOStatus()", +"e487eb58": "getOwner(bytes20)", +"e487fdb6": "participant1SentTokensCount()", +"e4881813": "cat()", +"e489c5ff": "haltIco()", +"e489d510": "MAX_TOKEN_SUPPLY()", +"e489fc68": "NdexSupply()", +"e48a1d60": "assertPaymentIndexInRange(uint256)", +"e48a4a29": "mayjaKill()", +"e48c09fe": "getFiltersLength()", +"e48c3c5c": "lockInDays()", +"e48cf65f": "_setClassViewValue2(uint256)", +"e48d81a8": "multisigwallet()", +"e48db5d4": "ProofVote(address)", +"e48e0d69": "ownerRetrieveTokenDetails()", +"e48e603f": "right54(uint256)", +"e49013b3": "jigoutuihuan(address,uint256)", +"e490c513": "getEntityState(bytes32)", +"e49168f3": "whichEpoch(uint256)", +"e4917fd2": "provenAddresseList(address[],bool)", +"e491936f": "getDisputeTX(uint256)", +"e49280cb": "close(address,uint256)", +"e492814f": "play(address)", +"e4928550": "daylimit()", +"e4929aa4": "FCC(address)", +"e4932abe": "INC()", +"e493ef8c": "Q()", +"e4942930": "SetMinLot(uint256)", +"e4952ddb": "transferDataOwnership(address)", +"e495f08e": "getHouseInfo(bytes32)", +"e495faf4": "bonusesPayed()", +"e496f510": "oraclize_query(uint256,string,bytes[3],uint256)", +"e497718e": "receiveLoan(address)", +"e497e88e": "XDCE()", +"e4983e27": "HEOContract()", +"e498922f": "getExp(uint256)", +"e498b98f": "setRedeemRequestLimit(uint256)", +"e498f5de": "FrozenFunds(address,bool,uint256)", +"e4995a1d": "ProdTokensale()", +"e4997dc5": "removeBlackList(address)", +"e4998173": "blockHalving(uint256)", +"e499f542": "distribute_reward(uint256,uint256)", +"e49b4c64": "ownerModAdmin(address,bool)", +"e49b606c": "claimWinnings(bytes32)", +"e49c9529": "underwrite(uint256,uint256[6],bytes)", +"e49cb2fb": "withdrawERC20Tokens(address,uint256)", +"e49cc6a9": "getUserBalancesLastBet()", +"e49dcee9": "fixTokens()", +"e49f6e91": "editContact(address,string)", +"e49fdaa8": "setClaimLimit(address,address,uint256)", +"e4a008a0": "cancelEthOffer()", +"e4a05c1f": "_nibblesToTraverse(bytes,bytes,uint256)", +"e4a0c124": "QCSTToken()", +"e4a0d386": "ethToBeClaimed()", +"e4a13fa4": "getICOAddress(uint8)", +"e4a1d868": "deposit_token(address,uint256)", +"e4a27ba0": "_play()", +"e4a2a8af": "getOwnerClientDetails()", +"e4a2ac62": "getCompactData(address)", +"e4a2c6d6": "loadProfit()", +"e4a30116": "initialize(uint256,uint256)", +"e4a30200": "BRV(uint256,string,string)", +"e4a358d7": "getPrefix(uint32)", +"e4a36a77": "getBondRemainingToBePaidOut()", +"e4a41c7f": "becomeFriendsWithMe()", +"e4a46a99": "howManyEthersToBecomeOwner()", +"e4a682d8": "InvestorToken()", +"e4a6e85a": "CoinStorage()", +"e4a72b13": "bZxContractAddress()", +"e4a77d29": "setInitialVaribles(uint256,uint256,uint256,address,address,address)", +"e4a7f363": "NewSymbol(string,uint8)", +"e4a86349": "getSubscribersCount()", +"e4a8de44": "quater1()", +"e4a9b286": "getVestingDuration(address,address)", +"e4aa0741": "AmericoTokenToken()", +"e4aa2436": "SouthAfricanRandsToken()", +"e4aa533e": "guess(bytes32)", +"e4aa6c5c": "MHCBC()", +"e4aa8140": "MAX_WEI()", +"e4aa82d7": "test_addAndGetVersion()", +"e4aa8da9": "checkReceiptProof(bytes,uint256,bytes,bytes)", +"e4abae32": "respond(uint256,address,address,bool,bool)", +"e4abf00e": "UnFrozenAddress(address)", +"e4ac3206": "withdrawIQT(uint256)", +"e4acecf3": "SALE0_END()", +"e4ad9a18": "takeTokens(address,uint256)", +"e4ada9fa": "setFeeForFirstArtWorkChangeRequest(uint256)", +"e4adc325": "UBS()", +"e4adc4f0": "ownerTransferWeiThirdWallet(uint256)", +"e4ae2e88": "enableEdition(uint256)", +"e4ae7d77": "getResolver(string)", +"e4af29fc": "accountCount()", +"e4af5f30": "getMinMaxBet()", +"e4af8331": "func_02E5()", +"e4b0a97b": "test_doubleVotingAgainst()", +"e4b0d3e6": "preRelayedCall(address,address,bytes,uint256)", +"e4b1443b": "KIK_ADDRESS()", +"e4b19e98": "amountRefunded()", +"e4b1e977": "hadd(uint128,uint128)", +"e4b1f93a": "isValidPurchase(uint256,uint256)", +"e4b1fe54": "totalGas()", +"e4b203ef": "sealed()", +"e4b34274": "round4StartTime()", +"e4b3c517": "crowdsaleContinue()", +"e4b42498": "AfrFballCoinXToken()", +"e4b503ec": "MinAmountByBetChanged(uint256)", +"e4b50cb8": "getToken(uint256)", +"e4b50ee8": "setRaiseRatio(uint256)", +"e4b541f3": "currentDevFees()", +"e4b5553c": "AddPromoter(address)", +"e4b5762a": "setPriceFeed(uint256,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e4b5ddeb": "addInvestorAtID(uint8)", +"e4b5e557": "CPWAToken()", +"e4b64da9": "sellOrders(address)", +"e4b6ac4c": "bonus2StartETH()", +"e4b6f799": "withdrawDai()", +"e4b6fbe2": "getApproveSpenderValue()", +"e4b73ac9": "foundersWallet3()", +"e4b74590": "distance(uint256,uint256,uint256)", +"e4b7b1b0": "Payroll(address,address)", +"e4b7fb73": "getRemainingSupply()", +"e4b8ebb7": "powercoin()", +"e4b90ed2": "reclaimInternal(address)", +"e4ba3969": "supportRecord(uint256)", +"e4bb7160": "adjustInflationRate()", +"e4bbb4b0": "POLY()", +"e4bc01b4": "FooMintableToken()", +"e4bd6695": "create(string,string,uint8,address,uint256)", +"e4bd9ebd": "calcId(uint256)", +"e4bdaa61": "buy(uint16,address)", +"e4be5159": "queryChild()", +"e4be782a": "createSecurityToken(string,string,uint256,uint8,address,uint256,address,uint256,uint8,uint256,uint8)", +"e4bf56b8": "getPastGamesLength()", +"e4bf6195": "changeGroupInfo(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"e4bff515": "_pointToResolverAndResolve(int256,bytes32,address)", +"e4c01bbb": "LogSetSymbol(string)", +"e4c05a7d": "checkEngineerQuest(address)", +"e4c0aaf4": "changeGovernor(address)", +"e4c14a34": "Tx(address,address,uint256,string)", +"e4c19408": "startPreIco(uint256,uint256)", +"e4c21cf2": "CheckSoftCap()", +"e4c28308": "buyPortfolio(address,uint256,uint256)", +"e4c2db06": "getPreviousFile(bytes)", +"e4c487c9": "Betsicbo()", +"e4c53f04": "setCreationCurator(address)", +"e4c5ff46": "manualMint(address,uint256)", +"e4c60492": "RANGESTART_8()", +"e4c82881": "change_tokenReward(uint256)", +"e4c92731": "FAST()", +"e4ca784b": "isPoliceNode(address)", +"e4cb30ad": "getCharacter(address,uint256)", +"e4cc1161": "seedWithGasLimit(uint256)", +"e4cc18be": "finishMint()", +"e4cc98a5": "dividendPeriod()", +"e4cd7d96": "OX_ORG()", +"e4cdf3cc": "takeBack(uint256,uint256,bytes32,uint8,bytes32,bytes32)", +"e4ce25ac": "roundEthShares()", +"e4ce6ccf": "deed(bytes32)", +"e4cecd32": "cf_request(uint256,uint256)", +"e4cf77bb": "GoodBoyPoints(uint256,string,string)", +"e4cfcbf7": "setChainNext(address)", +"e4cfe9eb": "callerAllocationPeriod()", +"e4cff610": "process_merge_mint_ious(address)", +"e4d0f41d": "setAuthorized(address,address,bool)", +"e4d13625": "pauseActivity(uint16)", +"e4d1b2cc": "allocatedToken()", +"e4d2fecf": "isListening(address,address)", +"e4d433e8": "startDealForUser(bytes32,address,address,uint256,uint256,bool)", +"e4d534cb": "feewallet()", +"e4d5a558": "updateAndSafeTransferFrom(address,uint256,string,bytes)", +"e4d609cc": "addRequester(address)", +"e4d6d778": "getused(address)", +"e4d74f2e": "BCBcyCoin()", +"e4d75c9d": "setVestingAddress(address)", +"e4d76d3b": "ATN(uint256)", +"e4d7a3d4": "getAllClients()", +"e4d7c28c": "decision()", +"e4d8dead": "setChild(uint256,string)", +"e4d91372": "setlevel(address)", +"e4d9d212": "isPVPListener()", +"e4d9de94": "getInfo(uint8)", +"e4d9e130": "CrowdsaleToken()", +"e4da3860": "XfinityAsset()", +"e4db2230": "addCard(uint256,uint256,address)", +"e4db2ceb": "auth(string)", +"e4db4dc1": "CheckEligibility(address,string,string)", +"e4db6062": "GivethBridge(address,address,uint256,uint256,address,uint256)", +"e4db915e": "citadelBuy(uint256,address)", +"e4dbc385": "assertEq12(bytes12,bytes12)", +"e4dbf719": "FlightDelayLedger(address)", +"e4dc2aa4": "totalSupply(address)", +"e4dc3d8b": "raisedSale1USD()", +"e4dcb06b": "open(string)", +"e4dd7794": "fundingPaused()", +"e4de6ec6": "AyeshaCoin()", +"e4deb007": "setNextSaleAgent(address)", +"e4dec825": "setAllowContributionFlag(bool)", +"e4dedc7f": "DeleteContract()", +"e4df2531": "topBalance()", +"e4e075cc": "_getPlayerInfoByAddress(address)", +"e4e0bd1f": "PointPowerCoin()", +"e4e0c030": "makePayment(bytes32,uint8,bytes32,bytes32,uint256,uint8,uint256,bool)", +"e4e103dc": "rewardUser(address,uint256)", +"e4e1aae6": "BlockChainShopCoin()", +"e4e1bd53": "DisableTransfers(address)", +"e4e1f29b": "discountStep()", +"e4e1f6c5": "compare(address)", +"e4e1f7af": "mintTokensMultiple(uint256,int256,address[],uint256[])", +"e4e299f7": "zero_out(uint256)", +"e4e2bfe4": "canFinalize(uint256)", +"e4e2ca59": "supportsEIP20Interface(bytes4)", +"e4e2d2ae": "changeScore(uint256,uint256)", +"e4e3466a": "AIToken()", +"e4e4c8c0": "eMTV()", +"e4e57b9e": "sellTokens(address,uint256,uint256)", +"e4e609de": "LogBuyCoins(address,uint256,string)", +"e4e663a9": "getStatLotteries()", +"e4e6de18": "setPaoContactAddress(address)", +"e4e713e0": "DTCC_ILOW_6()", +"e4e76c16": "setCryptoSoulContract(address)", +"e4e790b8": "withdraw_GIC(uint256)", +"e4e80c49": "SpudToRotator(uint256)", +"e4e85963": "tokenRemainPreSale()", +"e4e985a8": "getKycProvider()", +"e4e9bcca": "setEthPriceProvider(address)", +"e4ea58a5": "withdrawInviteRewardToOrder()", +"e4eab468": "getWarrantyPrice(address,string,uint256,uint256,uint256)", +"e4eacd70": "curentBallotId()", +"e4eaee4c": "setBool(bool,bool)", +"e4eba2ef": "supplylimit()", +"e4ec3762": "onChain(address)", +"e4ec404c": "AG()", +"e4edf852": "transferManagement(address)", +"e4ee07b7": "UtlToken(address,address,address,address,address,address)", +"e4ef2cef": "link(address,string)", +"e4ef3eaa": "SetEvaluate(address,uint8,uint8)", +"e4f02750": "listGlobalAuditDocumentsFrom(bytes32,uint256,bool)", +"e4f06100": "adminSetDiv(uint256)", +"e4f20fb2": "mintPresale(address,uint256)", +"e4f2487a": "salePhase()", +"e4f26633": "betStage(uint256,uint256[])", +"e4f37374": "pixels(uint32)", +"e4f3f47f": "BuyCurrentTypeOfAsset(uint256)", +"e4f4c554": "AddressDefault()", +"e4f627fe": "keysCount()", +"e4f6973f": "BIPOOH_DAO_32()", +"e4f7a076": "set3RoundTime(uint256)", +"e4f7de93": "isIcoComplete()", +"e4f84173": "defValue()", +"e4f843f9": "deprecateTurretSubtype(uint8)", +"e4f896e8": "proclaimAllInactive()", +"e4f8b908": "_payout(address)", +"e4f8c6fb": "YettaCrowdSale()", +"e4f95226": "getLastInvestors()", +"e4fa8fc3": "hash_of(address)", +"e4fab06f": "delegatedFwd(address,bytes)", +"e4fae421": "ALLOC_ECOSYSTEM()", +"e4fc6b6d": "distribute()", +"e4fcf329": "setBonusRate(uint256)", +"e4fe8eb1": "getUserBigPromoBonus(address)", +"e4ff0f18": "rocketshipReachedDestination()", +"e4fffb3a": "updateMaxTokensToDistribute(uint256)", +"e50007b9": "TerminateEmployee(address,address,uint32,uint8)", +"e5002347": "setLimitMaxCrowdsale(uint256,string)", +"e5002a05": "whitelistAddress()", +"e5027880": "fortyEndTime()", +"e50278a6": "sellAllAmountPayEth(address,address,address,uint256)", +"e5033268": "endPreICOTimestamp()", +"e5033ee4": "maxBridgeHeight()", +"e503f70d": "newArticle(string,string,string)", +"e5042271": "setNick(string,string)", +"e5043632": "ElectronicHealthRecordToken(uint256,string,uint8,string)", +"e5045002": "setSecurityWalletAddr(address)", +"e504862b": "assertEq30(bytes30,bytes30)", +"e5065522": "updatePermissions(address,uint256)", +"e506b9b7": "joule()", +"e5071024": "setSemaphoreExternalNulllifier()", +"e5071b8e": "incrementCount()", +"e5075f4f": "ezpzToken()", +"e507d6dd": "getPlanActiveTime()", +"e507e7a4": "brandAccountsLength()", +"e508202d": "triggerLibraryEvent()", +"e5098e85": "eliminarEntidades(uint256)", +"e509b9a0": "initiateTransfer(string,string,uint256,uint256)", +"e509cac5": "_changeTokenAddress(address)", +"e50a32a9": "PriorityQueue()", +"e50a3bb1": "oraclize_query(string,string[],uint256)", +"e50ab759": "contractIndex(bytes32)", +"e50beffb": "voteStart(uint256)", +"e50d0473": "SetRank(uint8,address,uint16)", +"e50d2da1": "setSuperInvestor(address)", +"e50d8a8a": "deauthorizeMintRequester(address)", +"e50dce71": "testControllerApproveSetsAllowance()", +"e50dd26a": "contractTokenWithdraw(uint256,address)", +"e50dd478": "isFiscal()", +"e50e2f65": "EARLYADOPTERS()", +"e50ff8e9": "TestSportsG()", +"e5104307": "IsPlayer(address)", +"e5106ae9": "isValidNodalblockJson(string)", +"e51073f4": "withDrawInWei(uint256)", +"e510989a": "setNewDepositCommission(uint256)", +"e5113280": "RecipientStringUpdated(string)", +"e513575a": "getGblockWithOffsetFromCurrent(uint8)", +"e5135ae3": "CSZ_ERC20()", +"e515a4d1": "gen0Limit()", +"e515cd38": "deliver(address)", +"e516f4dd": "LogOwnerChange(address,address)", +"e5173942": "PRE_SALE_SOFT_CAP()", +"e517fd54": "getBonusPercents(uint256)", +"e5189e2a": "minSumICOStage3USD()", +"e5193c48": "withdrawGalacticTokens(address)", +"e51949fb": "getMinAuditPriceSum()", +"e51a3b40": "mul(uint8,uint8)", +"e51a7826": "buyCore(uint256,uint256,uint256,bytes32)", +"e51ace16": "record(string)", +"e51bfd9a": "selfHybridizationPrice()", +"e51c3257": "isTokenRateCalculated()", +"e51d2093": "getSaleFee()", +"e51d5c33": "Bitstraq_Token()", +"e51dc14a": "setMinBidDifferenceInSzabo(uint256)", +"e51dfd90": "cancelSellOrder(uint256,uint256)", +"e51e3c61": "transferReserveFundTokens(address,uint256)", +"e51e88bd": "MintingManagerApproved(address)", +"e51f2c68": "change(address,uint256)", +"e51f95cc": "init_crowdsale(address)", +"e51fcfa2": "LLV_311_EDIT_4()", +"e51ff1fc": "iterateOverThings()", +"e520f09e": "tokensToMintInHold()", +"e520fc7e": "treasure()", +"e5212deb": "_buyIcoToken(uint256)", +"e521357c": "LocalsValidation()", +"e521889c": "distributePrizes(uint256,uint8)", +"e5225381": "collect()", +"e52269c2": "Ooredoo()", +"e523757e": "Cashback(address,uint256)", +"e524d618": "UBetCoin()", +"e5254036": "changeNameOperation()", +"e5258557": "setMigrateFeesDueToFork(bool)", +"e525af22": "TOAB()", +"e525c3d8": "dTRIGGER_NEXTWEEK_TIMESTAMP()", +"e5260958": "Defraycoin()", +"e5269bbf": "limitDefaultType()", +"e526d7a0": "getTeamAddress(bytes32)", +"e527217b": "Object(string,string)", +"e52858c6": "token_b()", +"e5286c80": "token1stContract()", +"e5291ac5": "getVMParameters(uint256)", +"e52b6a56": "getAmountBonus(uint256,uint256)", +"e52bb742": "getGenre(uint256)", +"e52c0f24": "changeICOStartBlock(uint256)", +"e52c17a8": "test_increaseTimeBy800000_timecheck()", +"e52c66c1": "getTotalLosses()", +"e52c9da1": "giveaway(address,uint256,uint8)", +"e52d0404": "addressOfIndex(uint32)", +"e52d0659": "setPriceForBasePart(uint256)", +"e52e9f15": "isAddressLocked(address)", +"e52eb288": "buyFuel(address)", +"e52eb764": "updateVIPBoard()", +"e52efbf1": "getCompte_4()", +"e52f64ce": "releaseMany(address[])", +"e530db1c": "pool_percentage()", +"e531a9b8": "numOfUntransferableEcTokens(address)", +"e53229c7": "zasxzasxqa()", +"e5333b5e": "close_next_bucket()", +"e534155d": "holder()", +"e534a34b": "addThing(uint256,uint256,uint256,uint256,bytes32)", +"e534bf4f": "sha(bytes32)", +"e534c676": "getRefillPercFor(string)", +"e5357b02": "ReturnCode(uint8)", +"e535ed35": "closeChannel(bytes,bytes,bytes)", +"e5362206": "hdiv(uint128,uint128)", +"e5362667": "getTotalTokenCount()", +"e5363ab8": "initialise(address,uint256,uint256,uint256,uint256,uint256,string,uint8,string)", +"e536a41f": "USD20Crowdsale()", +"e536c723": "lowestContribution()", +"e536f869": "pai_add(string,string)", +"e53767bd": "denied(address,address)", +"e537a195": "getSeatAvatarUrl(uint256)", +"e537ceb9": "userOddsCycle(address)", +"e53831ed": "setSomeValue(uint256)", +"e5390e05": "thirdPeriodOfICO()", +"e53910a2": "TestNetReputationToken()", +"e5393f25": "GetSoftwareCount()", +"e53a22ac": "addSubMilestone(uint16,string,string,uint64,bool)", +"e53a8a5f": "GRAPE()", +"e53a8cf4": "getTokensLeft(string)", +"e53ae072": "PUCOINToken(address,uint256)", +"e53b373e": "TimeBankChain()", +"e53c4548": "transferOwner(address,uint256)", +"e53c9a5f": "cf_confirm(uint256,uint256)", +"e53cacba": "listOutEmployees()", +"e53cf8c9": "XBornID()", +"e53cfed9": "setupMiniGame()", +"e53d4988": "WLLToken()", +"e53e04a5": "refillGas()", +"e53eb53d": "amountToSeedNextRound(uint256,uint256)", +"e53ecb79": "allocatedBalance()", +"e5408eae": "TEAM_RESERVE()", +"e5411525": "crowdsaleStartTimestamp()", +"e54135ac": "updateExchangeRates(uint256)", +"e54280e7": "setBZxContract(address)", +"e542e7a3": "updateEtherCost(uint256)", +"e542e7c5": "newIdAuctionEntity()", +"e54384f9": "removeEntryManual(uint256,address)", +"e5438f5e": "FLiK(uint256,string,string,uint256,uint256)", +"e5449600": "unFreezeUser(address)", +"e544b52c": "setNextRules(uint256,uint256,uint256,uint256)", +"e545f941": "releaseToken(address)", +"e546299b": "activatePass(bytes32)", +"e5463032": "getWLAddress()", +"e546bb0c": "apiAddress()", +"e546d9c4": "removeTeam(address)", +"e548799c": "registerCrowdsale(address,address,uint256[8])", +"e548cf13": "betOnColumn(bool,bool,bool)", +"e548f086": "ETHOfCrySolObjects()", +"e549053f": "AnotherStorage(address)", +"e549114b": "stageOneCap()", +"e54919e6": "hasInitCard2()", +"e5494be1": "unlock2Y()", +"e5499e55": "LWFToken()", +"e549ec26": "safeDrain()", +"e54a29bb": "getRegisteredUser(address)", +"e54a9646": "netAddress()", +"e54aae13": "getMarketTopLevels()", +"e54c495a": "majorityReward()", +"e54c4f98": "getRefundValue(address)", +"e54d4051": "receiveInteger(bytes,uint256,uint16)", +"e54d62e9": "simDuration(bytes)", +"e54d8ccb": "Mappings()", +"e54ebe61": "updateBalance(uint256,bool)", +"e5514c9d": "MAX_PRESALE_TOKENS_SOLD()", +"e55156b5": "setFee(address,uint256)", +"e5515b55": "updateAssignedAudits(uint256)", +"e55186a1": "getUnit()", +"e551bff0": "PokerPayoutValue()", +"e5520228": "getEarningsRate()", +"e55219c6": "Chromium()", +"e5522a5b": "getClassMintCount(uint32)", +"e5533790": "setBiddingComponent(address)", +"e554482e": "arrayLength()", +"e554a5ff": "closeBid(address,uint256)", +"e554af57": "BAJIDOR(uint256,string,uint8,string)", +"e5553b33": "GenChip(uint32)", +"e555c1a3": "sellMyTokens()", +"e5568317": "setDeliveryAddress(string)", +"e556a08c": "validateToken(address,bool)", +"e557498b": "reFund(address,uint256)", +"e5575e61": "getTheLengthOfUserFreeze(address)", +"e557a18e": "activateHedge(address,uint256)", +"e557bb4e": "places(uint256)", +"e55834cb": "write(string,uint256)", +"e5583c59": "executeTxn(address,uint256,uint256)", +"e5589756": "Debug(string,address,uint256)", +"e5593b4d": "allocateTeamAndPartnerTokens(address,address)", +"e559afd9": "addToWhitelist(address,address[])", +"e559c724": "TEAM_VESTING_PERIOD()", +"e55a07b6": "setTiers(bytes32[],uint256[],uint256[],uint256[],uint256[],uint256[],bool[],bool[])", +"e55a07c2": "tokenSaleClosed()", +"e55a6ef6": "votingPeriodStartTime()", +"e55a7afb": "Gemmes()", +"e55ae4e8": "getPlayer(uint256)", +"e55b4aa8": "getBalloonCosts()", +"e55b55ce": "getPreSaleTokensAvailable()", +"e55b69b3": "startPostIco(uint256)", +"e55b8b62": "getPeerTokens(address)", +"e55c6d07": "getStartDateOfCampaign(bytes32)", +"e55db48e": "roundId_()", +"e55ed42e": "_phxToken(address)", +"e55f98f3": "Log1(uint128,string)", +"e55fae77": "setUpdatePeriod(uint256)", +"e56044c8": "incMemberBadRep(address,uint256)", +"e5604559": "UserUpgraded(address,uint256,uint256,uint256,uint256)", +"e560bf2e": "setOraclizeGasCost(uint256)", +"e5612b3b": "finishDistribute()", +"e5612d0e": "transferPaillier(string,address)", +"e561f28a": "cityIndexToApproved(uint256)", +"e562dfd9": "openRound()", +"e562f0ec": "setKYCRequiredToSendTokens(bool)", +"e5637956": "MIN_INVESTED_ETH()", +"e563d541": "delFrException(address)", +"e564bd4d": "accFoundation()", +"e564f88e": "tokensToIssue()", +"e564fd25": "setNotary(address,bool)", +"e56556a9": "getPlayerID(address)", +"e5656f9c": "updateMsgSenderBonusDrops(uint256)", +"e565b387": "FOUNDATION_POOL_ADDR_VEST()", +"e565beeb": "softMtcTransfer(address,uint256)", +"e565fd1b": "SetStorage(address,address)", +"e56646ae": "SmartPonzi()", +"e5664f65": "prePreSalePeriod()", +"e5665b57": "_softcap()", +"e566be4e": "EthRelief(address)", +"e566dfc6": "_handleFunds(uint256,uint256,address,uint256)", +"e567756f": "setDevelopmentAuditPromotionWallet(address)", +"e56860c3": "fundingLock()", +"e5689afa": "updateStorage(uint256,uint256)", +"e56988dd": "latestBidTime()", +"e569c1d4": "getMintOwner()", +"e56a9973": "marketCells()", +"e56adb5f": "IsWhite(address)", +"e56b3e68": "mediate(uint256)", +"e56b9dce": "GetPrize(uint256)", +"e56bb194": "calculateMyPercents()", +"e56c10a0": "ONTExchangeRate()", +"e56c174b": "getRate(address,address,uint256)", +"e56c38b1": "modify_uint(uint256)", +"e56c8155": "initialiseMultisig(address,uint256)", +"e56c8552": "spinTheWheel(address)", +"e56d3fea": "developer_add_address_for_B(address)", +"e56e4776": "avgSalesToCount()", +"e56e56b2": "sellCard(address,uint256,uint256,uint256,uint256)", +"e56e60f6": "SingularityTest12()", +"e56ee3c1": "cityPrice()", +"e56f3815": "isKnownOnly()", +"e5700ddf": "jack_winner()", +"e5702701": "minSellRateInPrecision()", +"e57053cd": "airdropWinTime()", +"e5707fa2": "teamContact()", +"e570be18": "DVIPBackend(address,address)", +"e5714ea3": "insertCLNtoMarketMaker(address,uint256)", +"e571c35e": "ReverseRegistrar(address,bytes32)", +"e571fd2d": "addPrescription(uint256,string)", +"e5720f2d": "getCredibilityScoreOfClaim(bytes12,bytes12)", +"e5723b6d": "buyerApprove(address,uint256,bytes32)", +"e572dee5": "bountyTokens(address,uint256)", +"e5731b77": "UnpackRevocation(bytes)", +"e5734c57": "setPhase1DurationInHours(uint256)", +"e574015c": "auditSupply()", +"e57405e2": "EMISSION_FOR_TEAM()", +"e575c5cb": "assertOnlyTo(uint256)", +"e575df72": "getUserStatus(uint256,address)", +"e576038f": "addNewSampleType(string,uint256)", +"e5760520": "bountyWallet()", +"e5766e84": "initPayoutTable()", +"e5769ab9": "getLastPresser()", +"e5775515": "getUserWallet(string)", +"e577d2c2": "updateEthToTokenOrderWHint(uint32,uint128,uint128,uint32,int256)", +"e5781b71": "SatFix(int256,int256,int256)", +"e5782fd5": "setFeeStructure(uint256,uint256,uint256)", +"e5789f5f": "getTotalLevelValue()", +"e5791c3e": "mustHoldFor()", +"e5796716": "restrictTransfert()", +"e579ebeb": "chAirDropFshare(uint256)", +"e57a68da": "StephenHawking()", +"e57ac748": "resolveDisputeSeller(string,address)", +"e57b921d": "_createNumber(string,uint256)", +"e57bc079": "DrawAddr()", +"e57c09bc": "contentById(bytes32)", +"e57c78ec": "unregisterPresale(address)", +"e57c8d1b": "dummyAgent()", +"e57d4adb": "approvedOrders(bytes32)", +"e57d880a": "externalPurchase(address,string,uint256,uint256,uint256)", +"e57e31fa": "approveSubmission(address,address)", +"e57e5741": "onXon()", +"e57e6593": "createClaim(string,string,address,uint256,string)", +"e57ea16d": "checkValueSent(bytes,bytes20,uint256)", +"e57ebc0f": "FRPToken()", +"e57f5a1d": "removeFromStud(uint256)", +"e58018c5": "openSaleEndTime()", +"e5807e06": "unfreezeBoughtTokens(address)", +"e580b2b0": "presaleEnded()", +"e580f47b": "lotteryId()", +"e580f6ab": "createGame(uint8)", +"e581002e": "strategybacktest(uint32[],bytes32[],bytes32[],uint64[],bytes32)", +"e5815b33": "JohanNygren()", +"e58172b1": "cardCost()", +"e5820af7": "pushtx(address,uint256)", +"e582645e": "isTokenSaleRunning()", +"e582b7e0": "lastBidAmount()", +"e582dd31": "stored()", +"e58306f9": "adminMint(address,uint256)", +"e5834b4d": "setShareactive(bool)", +"e5839836": "isFrozen(address)", +"e585f69f": "TokenResolver()", +"e587fb71": "setTreasureBox(address,bool)", +"e588a2bb": "ChannelWithdraw(address,address,uint32,uint192)", +"e5893cbe": "Register(address,bool)", +"e58a6509": "SMTfund()", +"e58ae45b": "migratePhraseData(uint256,uint256,uint256,uint256,uint256)", +"e58b0eb1": "WinkelERC20()", +"e58b5ab2": "setFinishedTx()", +"e58b69f2": "getCompte_6()", +"e58ba9e4": "stealCardWithSocialIdentity(uint256,uint256)", +"e58c68bc": "MAX_GEN0_GIRLS()", +"e58c8c5c": "checkParticipantStatus(address)", +"e58ca07e": "IntegratedMoney()", +"e58cd3cb": "setTokenCapInUnits(uint256)", +"e58d116b": "addConfirmation(bytes32)", +"e58d478e": "btcAddrPubKeyUncompr(bytes32,int256,bytes32,int256)", +"e58dd55a": "endThirdBonus()", +"e58dede7": "_tokenAllocator()", +"e58eda1b": "ARTWORK_AUCTION_DURATION()", +"e58ef8a8": "executeTransfer(address,address,uint256)", +"e58f0289": "MANGGAHTOKEN()", +"e58f2623": "getLotteryData()", +"e58fc54c": "withdrawForeignTokens(address)", +"e58fdd04": "isFeed(address)", +"e5910f04": "setCourceSale(uint256)", +"e591253c": "refundPreICO()", +"e59160e3": "nomin()", +"e591fa26": "getProjectFeedbackWindow(bytes32)", +"e5920ab5": "getNoVotes()", +"e592172e": "test_twoInvalidEqString()", +"e5926ddc": "getSaleLength()", +"e592f95a": "getRewardWinnings(address,uint256)", +"e593428f": "PURCHASE(bytes32,uint256)", +"e5949b5d": "channels(uint256)", +"e594ad35": "assignCore()", +"e5962195": "blocked(address)", +"e596d811": "approveBatchTransfer(address)", +"e597a27f": "getNumberOfBlocksRemainingToWin()", +"e597f402": "create(bytes1,bytes32,bytes)", +"e59843ec": "allowAutoInvest(address)", +"e5994905": "transferTokenFrom(address,address,address,uint256)", +"e59997c9": "getFmmsDetail(uint256)", +"e599a767": "GGG()", +"e59a29a6": "getStakePerDraw()", +"e59af25b": "buy_spice_melange()", +"e59b0e14": "testIsNull(bytes)", +"e59bcf52": "subLockValue(address,uint256)", +"e59c4fa3": "smallUintFunc(int256,uint8,uint256)", +"e59c5e56": "Filled(address,uint256,address,address,uint256,address,uint256,uint256)", +"e59c9ada": "getBonuses(uint256)", +"e59cef17": "RaisedFunds()", +"e59cf926": "FOUNDER_ADDRESS3()", +"e59d2b7f": "unfreezeTeamWalletBlock()", +"e59d4912": "setOracleInterval(uint256)", +"e59d843a": "Replicator(bytes,uint256,uint256,address)", +"e59de295": "setItemPerPage(uint16)", +"e59de3a5": "drawToken(address)", +"e59e1ca6": "getBrickBuilders(uint256)", +"e59e6759": "ZXZX(uint256)", +"e59eee2e": "PRE_ICO_MIN_DEPOSIT()", +"e59f611f": "InputLimit(uint256)", +"e59ff828": "createOrder(uint32,uint32,uint256,bool)", +"e5a01e69": "getWeaponNumber()", +"e5a07419": "sellDividendPercentEth()", +"e5a078a7": "cancelRegistration()", +"e5a17818": "cancelSeller(bytes32,uint256)", +"e5a1eac2": "setSellDividendPercentageFee(uint8,uint256,uint256)", +"e5a23e7e": "changeBirthSettings(uint256,uint8,uint8)", +"e5a252b1": "playerTempReward()", +"e5a27038": "Pluton(uint256,string,uint8,string)", +"e5a284f8": "roundFourBlock()", +"e5a31c5d": "canGrantVestedTokens(address,address)", +"e5a3363c": "luckyVoters(uint256)", +"e5a34f97": "getFullround()", +"e5a3c0ad": "addPrivateSaleTokens(address,uint256)", +"e5a3c771": "expiredLockPeriod()", +"e5a4bed3": "getInterest()", +"e5a512af": "refund_with_close_position(address[],address,uint256[])", +"e5a5fbc8": "crowdsaleInProgress()", +"e5a62ffc": "Tile()", +"e5a64de6": "CompraUnidadesPases(uint16,uint8)", +"e5a6b10f": "currency()", +"e5a6fadd": "ReinsureSeveralDeaths(bool)", +"e5a70ef7": "feeMultiplier()", +"e5a71eb6": "Itterator9000Ultra()", +"e5a749e8": "needSurvive(bytes32)", +"e5a7b51f": "parentChange(address,uint256)", +"e5a82fe7": "REXEN(address)", +"e5a85478": "getUserTXCount()", +"e5a912c7": "xdest()", +"e5a93dd8": "inCirculation()", +"e5a9d6b0": "get_registrant(bytes32)", +"e5aa3d58": "i()", +"e5ab8be0": "isCollaboratorOrOwner(address,uint256)", +"e5ac7291": "lockAccounts(address[],uint256)", +"e5ac808e": "checkProof(bytes32,bytes32,bytes32[],uint256)", +"e5ace862": "getPoolMinStakeTimeInBlocks(uint256)", +"e5aceac5": "getWorlCupByID(uint256)", +"e5ae7721": "submitPayment(bytes32,bytes32[],uint256,uint256,uint8)", +"e5af0e89": "setNewTokenURI(string)", +"e5af18c5": "score(bytes32)", +"e5af350e": "reloadWhiteByName(uint256)", +"e5af3a35": "throwsSaleWalletIncorrectMultisig()", +"e5af48d8": "isApproved(address,address,uint256)", +"e5af8d92": "iiinoTokenAddress()", +"e5afe3e6": "tokenPrices(uint256)", +"e5b02393": "addSaler(address)", +"e5b02447": "findTopNValues(uint256[],uint256)", +"e5b0ee4d": "changeVestingPeriod(uint256)", +"e5b2169f": "Registry(string)", +"e5b28c07": "weeksFromEndPlusMonth()", +"e5b2a58d": "SinoeCoin()", +"e5b4003b": "grantPoolRole(address)", +"e5b5019a": "MAX_UINT()", +"e5b598d9": "hasChampSomethingOn(uint256,uint8)", +"e5b5a527": "giveStellarReward()", +"e5b5fe72": "Put(address)", +"e5b6b4fb": "Securities_5()", +"e5b6eac4": "teamUnlock2()", +"e5b73e08": "payer(address)", +"e5b754fb": "Redeem(address,uint256,uint256)", +"e5b7ec88": "setVoteCut(uint256)", +"e5b82bba": "dayTokenFees()", +"e5b8d6e0": "withdrawTokenRefund(uint256)", +"e5b9a74c": "submit(address,string,string,string)", +"e5ba08e5": "_baseDebt(uint256,uint256,uint256,uint256)", +"e5ba0b8a": "sellOffer(uint256,uint256,address,bytes32)", +"e5bb6575": "blockUser(address,address)", +"e5bb9fb9": "cancelTx(uint8)", +"e5bc7be0": "replaceModuleHandler(address)", +"e5bcb303": "getAccessorPurpose(address)", +"e5bf1b75": "getElectionId(string)", +"e5bf93b9": "balanceEther(uint256)", +"e5c0de3e": "Labereon()", +"e5c0fa69": "torchDividendsOf(address)", +"e5c19b2d": "set(int256)", +"e5c2205e": "_calculateTokens(uint256,uint8,uint256)", +"e5c31ddc": "rejectTransfer(uint256,uint256)", +"e5c361b0": "totalTokensICO4()", +"e5c389cd": "setConfig(uint256,uint256,uint256,uint256)", +"e5c42fd1": "addStakeholder(address)", +"e5c46869": "refPercentage()", +"e5c46944": "MultiSigWallet(address[],uint256)", +"e5c5dabb": "CSCResourceFactory()", +"e5c60091": "highest_bid()", +"e5c60d0b": "INVESTMENT_FUND_TOKENS_SUPPLY()", +"e5c6258d": "withdrawCrowdsaleTokens(address,uint256)", +"e5c774de": "houseEdgeDivisor()", +"e5c7bc6c": "treesOnSale(uint256)", +"e5c7e509": "testThrowTransferDisableNotEnabled()", +"e5c8b03d": "renounceSigner()", +"e5c8eb2f": "mytesttokenToken()", +"e5c91047": "addMeByRC(address)", +"e5c92020": "freezeFrom(address,uint256,uint256,uint256)", +"e5c98b86": "RoundSet(uint64,address)", +"e5c9c2ed": "_initialize(address,address)", +"e5ce8200": "withdrawForMkt(address)", +"e5cf2297": "amountOwed(address)", +"e5cf45b0": "FruitionToken()", +"e5cfd1bc": "player3Timestamp()", +"e5d00bee": "initiateCrabPartData()", +"e5d00f1f": "checkDepositQuest(address)", +"e5d02cd0": "PriceReturn(uint256,uint128)", +"e5d0713b": "maxGamesPerBlock()", +"e5d0c1bd": "LATToken()", +"e5d17171": "skl()", +"e5d2ce2f": "setCategory(uint256)", +"e5d3d9d7": "getBuyArray(address)", +"e5d4610f": "generatorTransfer(address,uint256)", +"e5d5876d": "_sell(uint256)", +"e5d5c898": "isSuperior(bytes32[],bytes32[])", +"e5d607f3": "SocialLendingToken(uint256,string,string,uint256)", +"e5d71cfe": "rewardLottery(bool)", +"e5d787f2": "moreTokenPerEtherForPresaleRound()", +"e5d8011f": "getCurrentTokenAmountForOneBtc()", +"e5d8103e": "setTotalBonuses(uint256)", +"e5d824a7": "addData(uint256)", +"e5d8f1ca": "removeAmount()", +"e5d90d94": "LuckchemyToken()", +"e5d9dac4": "assetTransfer(address,uint256)", +"e5da2717": "BOBToken()", +"e5dada63": "_pushRoomNight(address,uint256,bool)", +"e5db1a68": "bytes32Func(bytes32)", +"e5db2612": "addPrivatePurchaser(address,uint256,uint256,uint256)", +"e5db7a20": "mainnetAccountDict(address)", +"e5db9b49": "getJobInvoices(uint256,uint8)", +"e5dc476f": "getVideoGameCurrentPrice(uint256)", +"e5dc67d6": "setGameCloneFee(uint256)", +"e5dcc824": "getInfo1(address,address)", +"e5dd05ab": "primaryLedgerCount(string)", +"e5dd90a5": "HumanStandardToken(uint256,string,uint8,string)", +"e5ddb19d": "_applyLevelBonus(int256,uint256)", +"e5de0b89": "EGGS_TO_HATCH_1FALCON()", +"e5de2925": "endPreSales()", +"e5df3dd0": "unfrozen(address,uint256)", +"e5df669f": "recoverAddr(bytes32,uint8,bytes32,bytes32)", +"e5df7b10": "getBoughtTokens()", +"e5dfbe78": "setCreateDividendPercent(uint256)", +"e5e04a33": "SendResult(uint64,uint64)", +"e5e123f1": "funeral(bytes32,int256)", +"e5e1a202": "endTimeOne()", +"e5e231dd": "pauseTokens()", +"e5e288e5": "sendTransaction(address,uint256,bytes)", +"e5e2fd7b": "balanceTreasury()", +"e5e38fc7": "test_twoTrueAndFalseAssert()", +"e5e3ac4f": "removeAssociatedAddressDelegated(address,address,uint8,bytes32,bytes32,uint256)", +"e5e41a63": "publishOption(uint256,uint256)", +"e5e45b16": "notifyTempBreach(int256)", +"e5e4807f": "setPriceToPreSale()", +"e5e51bd7": "getOrderTokenCompletedAmount(uint256,address)", +"e5e53493": "requestKinTokenOwnershipTransfer(address)", +"e5e5cfac": "Altcoin()", +"e5e5dff1": "cancelBounty(uint256)", +"e5e5e5d6": "emitGenericProposal(string)", +"e5e6a0aa": "ticketTransfereesAmount(address)", +"e5e75fee": "fountainContractAddress()", +"e5e792de": "_pro(address,uint256)", +"e5e7a136": "CEO_SHARE()", +"e5e7b82b": "ethEurRate()", +"e5e7c276": "isData()", +"e5e7fa53": "div(uint96,uint96)", +"e5e88590": "unholdSubscription(uint256)", +"e5e9a9bb": "registerUsers(address[])", +"e5ea1201": "changeTicketType(uint256,string,uint256)", +"e5eab096": "setDomain(string)", +"e5eabf14": "playInternal(address,uint256,uint256,address,uint256)", +"e5eb9d7a": "SilverMoon()", +"e5ec8df3": "calcTimedQuotaByPower(uint256,uint256,uint256,uint256)", +"e5ed1d59": "startGame(uint256)", +"e5ed31cb": "updateBytes32(bytes32,bytes32)", +"e5ed44c2": "Koplak()", +"e5ed78bb": "setDateStart(uint256)", +"e5ee8dae": "publicGetElementOffer(uint256,uint256,uint256)", +"e5eee9be": "longJudge(uint256,address)", +"e5ef0b95": "BitRRToken()", +"e5f06556": "fillRequest(bytes32,string,uint256)", +"e5f171d6": "BLOCKCHAIN_DEPOSIT_BETA()", +"e5f2806a": "createPlayer(uint32[7],uint256,address)", +"e5f2d88f": "settotalCardValue(uint256)", +"e5f363f8": "FTTtoken()", +"e5f3b2dc": "advisorsTokensWallet()", +"e5f3e7b5": "placeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32)", +"e5f3fcb1": "alias_price()", +"e5f4906a": "moveTokenICO(address,uint256)", +"e5f59e7c": "setIsChargingManagementFee(bool)", +"e5f5d05b": "tokensRaisedRound()", +"e5f6186d": "maxContributionWei()", +"e5f643cf": "InvestorWhiteList()", +"e5f65c71": "initialBlockCount()", +"e5f6a908": "AddrCommunityDistribute()", +"e5f6b137": "getOutCar(string,uint256)", +"e5f6d376": "updateStatusViaTokens()", +"e5f6f252": "getUserNumEntries(address,uint256)", +"e5f6f716": "thirdChainETH()", +"e5f796fd": "CONTRIBUTION_END()", +"e5f79bee": "PRE_SALE()", +"e5f8ce92": "setPercent2(address,uint256)", +"e5f92973": "conclude()", +"e5f952d7": "rewardMathGeniuses(uint256,uint256)", +"e5f982a4": "validateChainlinkCallback(bytes32)", +"e5f9a40f": "TRHToken(address,string,string,uint256,uint256)", +"e5f9ec29": "left51(uint256)", +"e5f9f510": "BetMe(address,uint256)", +"e5fb08c0": "tokenExchangeRateMile2()", +"e5fb9211": "constructLeaf(uint256,address,uint256)", +"e5fb9332": "mintProject(string,string,string,address)", +"e5fd6364": "unregisterPublicKey(uint256)", +"e5fdac45": "presentMissingChunk(bytes)", +"e5fe3d7a": "aprovaPagamento(bool)", +"e5fe4f31": "buy(uint8,bytes32,bytes32)", +"e5fe7870": "vote(string,uint128,uint256)", +"e5ff2e8a": "mintTeamTokens()", +"e5ff7674": "restartPresale()", +"e5ffea8e": "testCalculateNeededCollateral()", +"e5ffeaf6": "fixAddress(address,bytes32)", +"e600c817": "verifyUser(string)", +"e600fd93": "getBonusPercentageByMachineMode(uint8)", +"e6025572": "ShadowBox()", +"e602af06": "confirmChangeOwnership()", +"e604cf9f": "get_all_squares()", +"e6072d5a": "BONUS_MID_QTY()", +"e607a638": "DataController(address,address)", +"e608433b": "weiForRefundPreICO(address)", +"e608ca67": "calculateSubscore(address,int16,int16)", +"e608d3e5": "marketingCap()", +"e609120a": "intercrypto_convert(uint256,string,string)", +"e609348a": "upgradeOwner(address)", +"e60a33aa": "userEndGame(uint32,int256,bytes32,bytes32,uint256,address,bytes)", +"e60a72bc": "ReferalsTokenHolder(address)", +"e60a955d": "setActive(uint256,bool)", +"e60aafab": "setIcoStatus(uint256)", +"e60b0cad": "endPreICOStage1()", +"e60b1424": "bytes32ToUint(bytes32)", +"e60b2c9a": "SALE_2WEEK_BONUS()", +"e60b7ff7": "batchTransferToken(address,address[],uint256)", +"e60c11a0": "subContractBalance(uint256,uint256)", +"e60d3caf": "updatePowerDayRate(uint256)", +"e60dbaae": "Jump()", +"e60f1ff1": "getExit(uint256)", +"e60fb021": "publishOwner()", +"e60fd342": "getCreateSharesFxpValue()", +"e6107cbb": "isBurnApproved()", +"e6108fc9": "increaseLockBalance(address,uint256)", +"e61109fd": "setFiscalVerify(uint256,uint256,uint256,bytes32)", +"e611ad32": "CourseBaseOnIdStudentFunct(uint256)", +"e6120842": "warningERASEcontract()", +"e612a4b6": "get_order(string,uint256)", +"e612c0ad": "team2()", +"e6131706": "updateTransaction(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"e6131a64": "UpdateBeneficiary(address)", +"e6135ffe": "_removeIndex(uint256)", +"e6136d84": "icoBegintime()", +"e61387e0": "knc()", +"e6138b37": "TESTBRB()", +"e613d3b2": "getParentUser(address)", +"e6153d1b": "mint(string,bytes16,uint256,uint32,address)", +"e615ed91": "AragonTokenSaleTokenMock(address,uint256)", +"e61604cf": "liquidateBorrow(address,address,address,uint256)", +"e616c975": "GetAccountIsFrozenCount()", +"e6175794": "MaPToken()", +"e617f204": "setWhiteListAdmin(address,address)", +"e618f558": "TempTokensSend(address,uint256,uint256,uint256)", +"e6197f41": "setTokenSaleFinished()", +"e61a3c73": "GuDuFengCoin(uint256,string,uint8,string)", +"e61ab6c9": "accountPubPreSale()", +"e61b6557": "reserveOwner()", +"e61b762b": "cancelAllSellOrders(address,uint256,uint256)", +"e61b959e": "dev_outStream()", +"e61c51ca": "topUpGas(uint256)", +"e61c6320": "_recoverAddressFromSignature(bytes,bytes32)", +"e61ca819": "indexToAddress(uint256)", +"e61d5d50": "raisedOBR()", +"e61fde91": "BiciDevuelta()", +"e6206711": "SendEthOn()", +"e6207611": "setChests(address)", +"e6213127": "deprecate(bool,address)", +"e621350d": "getDiscountAndSupply()", +"e621b149": "softCapUSD()", +"e621b5df": "redeemEther()", +"e6229c14": "_createBid(address,uint256,address,address,bytes32,uint256,uint256)", +"e622abf8": "LOCK_END(uint256)", +"e6232ba1": "updateEndDate(uint256,uint256)", +"e6234260": "depositCollateralOnBehalfOf(address,bytes32,uint256)", +"e623a1a6": "kcck256straddadd(string,address,address)", +"e623a93b": "votesForAnswer()", +"e623c4ac": "addressInSwap(address,address)", +"e6240deb": "activityCount()", +"e62420d9": "getChild(address,uint256)", +"e62444e1": "submitJRH(uint256,uint256,bytes32,uint256,bytes32[],uint256,bytes32[])", +"e624b02a": "changeHold(address,uint256,uint256)", +"e624d199": "partnerSaleWallets(uint256)", +"e625215c": "withdrawStake(uint256,bytes)", +"e6252c0f": "deleteHpbNodeCache(address)", +"e6256509": "SPNToken()", +"e62580cb": "MYToken(uint256,string,uint8,string)", +"e6259f53": "timeArrayOf(uint256)", +"e6281254": "FundsMoved(uint256)", +"e628dbf9": "changeTiming(uint256,uint256,uint256,uint256,uint256,uint256)", +"e6293e23": "burnerAddress()", +"e629837c": "updateAndSafeTransferFrom(address,uint256,string)", +"e62a4ac9": "setBUI(bytes32,uint256,int256)", +"e62af875": "isContractOwnerLocked()", +"e62b795c": "addCourse(string,string,string,string,uint8,uint8)", +"e62bd899": "mintStart1()", +"e62c04bb": "OwnershipTransferred(address[],address[])", +"e62c2f9c": "get_location()", +"e62c9df9": "participantToEtherSpent(address)", +"e62cc611": "ETHER_HARD_CAP()", +"e62cd55c": "test_oneInvalidFalseEq()", +"e62d64f6": "withdrawableBalance()", +"e62d809d": "subdividendsOwing(address)", +"e62d909f": "TargetCreated(address)", +"e62e3c07": "getTransactionDetails(bytes)", +"e62eea47": "startSettling(bytes32)", +"e631b536": "fields(address,uint256)", +"e631e9b3": "solveIO(uint256,bytes32,bytes32,bytes32,bytes32)", +"e63227b0": "freezeGlobalTansfers()", +"e6324270": "profilParticipant(uint256)", +"e632c2f3": "totalPurchased()", +"e633cefe": "itemInfo(address,address,uint256,bytes)", +"e63466a3": "_getToken(address)", +"e6346867": "imaxChainToken()", +"e63697c8": "withdraw(uint256,address,uint256)", +"e6369e41": "Timestamp()", +"e636bc3c": "addRoyLuxList(string,string,uint256,uint256)", +"e6378d3a": "joinGame(bytes32,string)", +"e637f824": "GetPlayerDataAt(address)", +"e638d76d": "migrateDomain(bytes32,uint256)", +"e638f372": "getDIVDPayoutPercent()", +"e639481a": "getUpperBoundBlocksTillGameEnd()", +"e63988bd": "getContributorInformation(address)", +"e63a6788": "miningOnePlat()", +"e63b029d": "finishSalvage(address)", +"e63b681e": "redeemExternalToken(bytes32,address)", +"e63b6b87": "DipTokensale()", +"e63bc62d": "processProposal(uint256)", +"e63c83c1": "getTotalWithdrawn(uint64,address)", +"e63d38ed": "disperseEther(address[],uint256[])", +"e63d4957": "totalLimitUSDWEI()", +"e63da5f7": "bootstrap2()", +"e63da84c": "getBattleRandom(uint256,uint256)", +"e63df4a7": "createJobEscrow(bytes16,address,address,uint256,uint256,uint32,uint32)", +"e63edfef": "Learn()", +"e63fb7d2": "getAdText(uint256)", +"e6400bbe": "suspend()", +"e64044c0": "payoutKeys(uint256)", +"e640663a": "removeFromOwnershipAuctionTokenIDs(address,uint256)", +"e640d5a8": "PubAccepted(address)", +"e6416f4e": "sendFoo(address,uint256,bytes)", +"e641bde1": "addInvestor(address)", +"e642b7b6": "isWhitelistOnlyStatus()", +"e642b900": "Bugcoin()", +"e642b9be": "MTP_PER_ETH_PRE_SALE()", +"e643197b": "TRY_Omnidollar()", +"e643d63c": "_setProposal(uint256,string,bytes32,bytes32,bytes32,string,uint256,uint256)", +"e6441201": "set_foo(string)", +"e644d886": "ico3total()", +"e644f60b": "isFresh(string)", +"e6452f64": "TGEDeployer(uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"e6456a30": "HARDCAP_ETH_LIMIT()", +"e6458f6e": "getExternalDependencies()", +"e646350d": "getTokensAvailableForSale()", +"e6468b9f": "mCoinPerBlock()", +"e6470fbe": "updateDefaultPayment()", +"e6471555": "remForSalesBeforeStageLast()", +"e64853c4": "polls()", +"e648ce75": "setSelfClaim(bytes32,bytes)", +"e64906a4": "setTokenForPreSale(uint256)", +"e64a4e27": "updateDealConditions(uint256,uint32,uint32,bool,uint256)", +"e64acfa4": "getRealValueToReturn(uint256)", +"e64e3241": "mint(bytes32,bytes,uint256[],bytes,bytes)", +"e64f15a2": "deleteTask(bytes32)", +"e64fd8b0": "transferTokenWallet(address)", +"e650672b": "setGreenToken(address)", +"e6506873": "bookingMetadataForKey(bytes32)", +"e650ca40": "firstWeekBonusInWeek()", +"e6511ce2": "createCodeContract(string)", +"e6512ea2": "fundBounty()", +"e6514de2": "PreSaleLimit()", +"e6519a35": "getCreationTime()", +"e6527376": "OneWorldCryptoCoin()", +"e65284f1": "getRealPriceSpeed()", +"e652ca86": "LowcarbonToken()", +"e652f4cc": "getVoteCount(address)", +"e6530b97": "addArbiter(address,uint256)", +"e653d52d": "approveProxy(address,address,uint256,uint8,bytes32,bytes32,string)", +"e653d5d3": "GlobalStorageMultiId()", +"e653ec6a": "unsubscribeFromPool()", +"e6544b87": "ICORatio()", +"e65500e9": "startincreaseWithdrawalTeam()", +"e6560c94": "_saveBonus(address,uint256)", +"e6562fe1": "approveForwardedAccount(address,address,string)", +"e6569b1e": "getConID()", +"e6571176": "checkCertificate(bytes)", +"e657807b": "endIco()", +"e658d221": "claimPlotMultipleWithData(uint256[],string,string,string,string)", +"e6591f4e": "setNSFW(uint8,bool)", +"e65a0117": "earn(uint256)", +"e65a2e7f": "forceEmpty(bytes32)", +"e65af219": "PlusCoin()", +"e65b00b6": "Confirmation(address,bytes32,bool)", +"e65b1fd0": "getConsecutiveDeaths()", +"e65b490d": "_rewardWinners()", +"e65b743e": "dispatchGains()", +"e65b782f": "getCurrentTranche()", +"e65b96a7": "MyDanaToken()", +"e65b99c6": "uservalue()", +"e65bbceb": "makeAdoptionRequest(bytes5)", +"e65c1244": "holderEthers(address)", +"e65ca2fe": "Crowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"e65d1522": "fromWei(uint256)", +"e65d19ca": "createInactiveEdition(uint256,bytes32,uint256,uint256,uint256,address,uint256,uint256,string,uint256)", +"e65d6b49": "getCommission()", +"e65d9717": "pushVendor(string,address,bool)", +"e65da9a2": "PROMOTION_ACCOUNT()", +"e65de3ca": "removeTitleTransfer(string)", +"e65dea55": "validate(uint256,uint256,uint256,string,string,string)", +"e65e63ed": "secondsaleclosingTime()", +"e65e73e2": "oneavl()", +"e65e95a8": "token_address(address)", +"e65f0246": "updateCountryHoldersCount(uint256,uint256)", +"e65f1d98": "bigLoop(uint256)", +"e65f2a7e": "enroll()", +"e65f5ea4": "distribute10MT(address[])", +"e6601fb4": "viewFunds(address)", +"e660c7aa": "PresaleAddress()", +"e660dd54": "compWallet()", +"e661a98f": "ecosystemtoken()", +"e661b3d5": "returnStatus(uint256)", +"e662bd25": "doTransfer(address)", +"e662e9af": "getPersonalStakes(address,address)", +"e662ff97": "sellMyTokensStocks()", +"e6634e41": "tokensPerEthAtRegularPrice()", +"e664214a": "releaseUnlocked(address,address,uint256,uint256)", +"e6642528": "BitcoinIndigo()", +"e664725b": "bn128_add(uint256[4])", +"e664755b": "withdrawAttacker()", +"e664d8e8": "showhospital(uint256)", +"e664e1e0": "getAddressTwo(address)", +"e6657008": "TicketsInGame()", +"e665dba0": "addAuthorizedExternal(address,address)", +"e66623ad": "ETbankWord()", +"e6662e2b": "UrbitToken(address,address)", +"e666767b": "getPlayerBetForCurrentPlayRound(address)", +"e6678f33": "updateReferralBonusRate(uint256)", +"e66825c3": "pricePerUnit()", +"e668a547": "SingularityTest8()", +"e668a7af": "buyFrom(address,uint256)", +"e668e1f3": "noContestTime()", +"e668e5ce": "getPlayerBetCount(string,uint256,string)", +"e6690fb1": "nextAuction(uint256)", +"e6691249": "getCompte_5()", +"e66a5e6b": "waveCap1()", +"e66a6b22": "isSigned()", +"e66aa720": "pureBalance(address)", +"e66bf416": "DLK()", +"e66c4175": "LargeCapStartTimeChanged(uint256)", +"e66c66d9": "setMonsterCreatorAddress(address)", +"e66caeb4": "payFortune(uint256)", +"e66d1b84": "countHoldAmount(address)", +"e66d4694": "gymContract()", +"e66d9874": "REQUEST_REJECTED_BY_HOST()", +"e66dda4e": "wallocked()", +"e66dde38": "startRound(bool)", +"e66e00f8": "getAdminDashboard()", +"e66f51fd": "AxieERC721Metadata()", +"e66f53b7": "curator()", +"e66f6e75": "getIsAttack()", +"e66f7bba": "oracleItQuery(uint256,string,string)", +"e670f7cd": "checkHash(string)", +"e6714f63": "eth_min()", +"e6717d3f": "setPresidenteDeMesa(bytes32,uint256,bytes32)", +"e671ac23": "getMonthClaimed(address)", +"e671f510": "onEtherandomExec(bytes32,bytes32,uint256)", +"e6722531": "checkBoosterQuest(address)", +"e672eb49": "GetBetInformation(uint256)", +"e673f646": "setContributor(address,address,bool,uint8,uint8,address)", +"e6744035": "booleanToUInt()", +"e6748da9": "setBytes(bytes32)", +"e674a0bd": "unlock(address,address)", +"e67524a3": "mintTokens(address,uint256,string)", +"e6758649": "revokeStakeholderConfirmation(uint256)", +"e676d53f": "GRAD()", +"e6774e1e": "setCapTab(uint256,uint256)", +"e6779bba": "_calculateTokensAmount(uint256)", +"e677d67d": "decode(bytes,uint256)", +"e679366f": "setExchangeTime(uint16,uint8,uint8,uint8,uint8,uint8)", +"e67ad254": "airBegintime()", +"e67bcfb6": "viewPreSaleCancelledList(address)", +"e67c4f96": "_createItem(string,address,uint256)", +"e67cdfb7": "moveOldUser(uint256)", +"e67d35c6": "UmeTravelNet()", +"e67d5b16": "SpeedJump()", +"e67e04f9": "startAcceptingDonation()", +"e67e3d56": "ethTaxRate()", +"e67e8aaf": "cliffPercent()", +"e67eed44": "getTicketOwner(int256,uint256)", +"e67f3cde": "about(address)", +"e67fcd10": "createSale(string,uint256,uint256,uint256,uint256)", +"e6807ca9": "checkBlacklist(address)", +"e68122e2": "createConsent(address,string,string)", +"e681e906": "_disableModule(bool)", +"e681f989": "saveMetaData(address,bytes32,bytes32)", +"e68215ec": "getOrganizerInforById(uint256)", +"e6821bf5": "videos(uint256)", +"e6824b0d": "REAPER_INTREPID()", +"e682c9ea": "rescindVote(bytes32)", +"e682e290": "getWhitelistStatus(address,address)", +"e682e2b2": "PingToken()", +"e6838ffa": "CbDataStandardToken(uint256,string,uint8,string)", +"e684aa5c": "amountAlreadyPaidBack()", +"e684d75d": "from_Initialisation_to_Lifecycle()", +"e685f2fe": "SilcCrowdsale(uint256,uint256,uint256,address,uint256,uint256)", +"e686b89a": "stage_2_price()", +"e6885aad": "Notary()", +"e688aab4": "changeOperative(address)", +"e688d097": "activekey(address)", +"e688f89d": "getMax(uint256)", +"e6890105": "addRefundTransaction(uint256,uint88)", +"e6891995": "KStarCoin()", +"e6891a55": "underwritePriceOf(uint256)", +"e6898a7d": "getSex(uint256[2])", +"e689928e": "seventyeight()", +"e689aa66": "isAllocated9()", +"e68a471d": "getLatestTokenPayday(address,address,address)", +"e68a555d": "UpdateUserPELOAmount(address,uint256)", +"e68a655c": "setEtherDeltaFees()", +"e68a7c3b": "getAccounts(uint256,uint256)", +"e68a9610": "releaseTokensTo(address,address)", +"e68c32b3": "cgadmin(address)", +"e68d3ae3": "escrow(uint256,string,address,uint256)", +"e68d7535": "cancelWhiteList(address[])", +"e68e64cb": "getCurrentUserReward(bool,bool)", +"e68f05fe": "SetCrowdsaleAddress()", +"e68f08a0": "MatchGetted(uint256,bool,uint256,uint256,uint256)", +"e68fb207": "makeOrder(address,address,uint256,uint256)", +"e690833a": "getPropertyRatingTuple()", +"e690d9bf": "Rollercoaster()", +"e6917e67": "tierOnePurchase()", +"e691bed4": "get_arbits(address,address)", +"e693e4d1": "neironixProfitAddress()", +"e69405fd": "_endDutchAuction(uint256,uint256)", +"e69432c8": "getMyNormalDragons()", +"e694d107": "getlastDividendPoints()", +"e694f694": "distributeLRNX(address[],uint256)", +"e69506aa": "Tokens_Per_Dollar_Denominator()", +"e6955d7c": "XYCC()", +"e6957514": "mergedMinerValidatorAddress()", +"e695c00c": "assertEq29(bytes29,bytes29,bytes32)", +"e696d10d": "processPurchase(address,address,uint256)", +"e696fb9a": "_6_friends()", +"e696fd64": "change_ico_finish(uint256)", +"e6972dbb": "readEventFromDatabase(uint64)", +"e6979b90": "multiAdd(address[],uint256[])", +"e697b5d8": "referrals(address,uint256)", +"e69852d0": "getUserNameOf(address)", +"e698816f": "getTokenIdOfCR(string)", +"e69932e5": "getFreeSeeds()", +"e6997f6d": "rootUTXOMerkleTreeHash()", +"e699e8c3": "removeDefaultOperator(address)", +"e69a2d9a": "Lent(uint256,address)", +"e69b414b": "issuedTokensAmount()", +"e69b9b65": "exchangeableTokensFromSale()", +"e69d09cf": "releasedForTransfer()", +"e69d27a8": "lifeFactor_v()", +"e69d849d": "donate(address,uint256)", +"e69e04b3": "defaultPrice()", +"e69e4640": "calculateBalance(uint256,uint256,uint256)", +"e69e9337": "PERSONAToken()", +"e69fde41": "KentraToken(uint256,uint256)", +"e69ffce8": "changeRegulator(bool)", +"e6a0525f": "getStudentID(bytes)", +"e6a1e811": "newBet(uint8)", +"e6a27cf2": "getUserEarningsInfo()", +"e6a33268": "secondRate()", +"e6a3afe8": "sendTreasuryTokens()", +"e6a43d63": "crowdsaleSoftCap()", +"e6a45026": "fetchStageIndexBySnapshotBlock(uint256)", +"e6a50d84": "getAddressFromIndex(uint256,uint8)", +"e6a5d78d": "_getMerkleRoot(bytes32,bytes32[])", +"e6a605df": "PreTgeEnable()", +"e6a6d4c8": "getExecutedTransactions()", +"e6a7638c": "eucledianDistance(uint256,uint256,uint256,uint256)", +"e6a8fe04": "evHarvest(address,uint256)", +"e6a9026b": "submitTransaction(address,uint256,string,bytes)", +"e6a9627c": "setAgentAddress(address,address)", +"e6a9b2d8": "createTAO(string,string,string,string,bytes32,address,uint256)", +"e6aa216c": "getExchangeRate()", +"e6aa96a5": "CRS()", +"e6aaae81": "tokensSoftCap()", +"e6aac98f": "currentDayTS()", +"e6ab96ed": "unstakeContent(bytes32)", +"e6abaaba": "tier_cap_2()", +"e6ac17a1": "tokens_total()", +"e6acca00": "_finishBet(address)", +"e6acf0c1": "determineOutcome(bytes32,uint8[],uint8[])", +"e6ad204e": "vestingAccounts(address,uint256)", +"e6ad5bc7": "getFrozenTimestamp(address)", +"e6adde32": "setIsHiddenMessages(bool)", +"e6ae0536": "UpdateBackedAmount(uint256)", +"e6ae1a97": "getTokenAmount(address)", +"e6ae89b4": "getPlayerInfoInRound(uint256)", +"e6ae92b0": "getItem(address,address)", +"e6ae967b": "updateOrder(bool,uint32,uint128,uint128,uint32,int256)", +"e6af2d5d": "TRICToken()", +"e6af35f0": "calculateFee()", +"e6b09e92": "setAd(string,string)", +"e6b1602f": "buyOneRabbit(uint256)", +"e6b18f52": "LongTermProjectTokensAddress()", +"e6b1c48d": "Amal()", +"e6b1e71c": "jackpot(uint256,uint256)", +"e6b35875": "getAllbetByGtype(int8)", +"e6b55ff3": "TokenEmissionEvent(address,uint256,bool)", +"e6b6f9d5": "baseDiscounts(uint256,uint256,string)", +"e6b71e45": "changeIncrease(address[],uint256[])", +"e6b827a6": "becomeSpermlord()", +"e6b950f3": "_computeCooldownRemainingTime(uint256)", +"e6b96447": "updateMaxNum(uint32)", +"e6b96fe3": "setupFund(bytes32,address,uint256,uint256,address,address,address[],address[],uint8,bytes32,bytes32)", +"e6b972f5": "userName(address)", +"e6ba54c1": "specialInfo(uint256)", +"e6bb64b4": "generateChampionTokens(address,uint256,uint256)", +"e6bb88b3": "setMinEscrow(uint256)", +"e6bbe9dd": "getMinThreshold()", +"e6bc2cc9": "Marcela_Birthday(string,string,string,string)", +"e6bc5269": "CrypexToken()", +"e6bc7d2a": "FairDistributionToken()", +"e6bcbc65": "mostSignificantBit(uint256)", +"e6bcc297": "STARTING_BANKER()", +"e6bd0eca": "newUser(address,string,uint256)", +"e6bd11b2": "availableBuyInShares()", +"e6bf3fdc": "removeFarmer(address)", +"e6bf6ca2": "check_deadline()", +"e6bf70e2": "register(bytes20,uint96,uint32,bytes32[],uint16)", +"e6c01488": "addComment(bytes32,bytes32,string)", +"e6c0459a": "right79(uint256)", +"e6c0e6d5": "discountRate()", +"e6c0e9e1": "randomDS_sessionPubKeysHash(uint256)", +"e6c160dc": "RateSetter()", +"e6c1beb4": "prepend(address)", +"e6c1d7fc": "getHedgeIndices(address)", +"e6c21c24": "isCertified(uint256,uint256)", +"e6c22a11": "district0xNetworkToken()", +"e6c25aa1": "totalPhase2Donations()", +"e6c28db4": "getPlayerSpaceshipCount(address)", +"e6c2dee8": "Vish()", +"e6c2f4fe": "SendmoneySend(uint256)", +"e6c3329d": "EthaToken()", +"e6c35a91": "batchAirDrop(address[],uint256[])", +"e6c3b4ab": "testBalanceAuth()", +"e6c4498b": "LOCKING_UNLOCK_TIME()", +"e6c4a46a": "_addRecord(bytes32,address,string,string)", +"e6c4c2c7": "admin_tokenAdd(uint256)", +"e6c50020": "callAllFromMew(uint256,address)", +"e6c52016": "setToken(address,uint256,address)", +"e6c54139": "BitmassXToken()", +"e6c57a08": "timeIncreasePerTx()", +"e6c5e94c": "setinterval(uint256,uint256)", +"e6c63912": "lastBlock_a17Hash_uint256()", +"e6c721e4": "senderDelegates(address,address)", +"e6c75c6b": "triggerEvent(string)", +"e6c7c456": "balanceOfContract()", +"e6c88b31": "auditor(uint256,bytes32)", +"e6c89d4a": "makeOfferForCityForSomeone(uint16,uint256,address)", +"e6c8fcf1": "getExpirationRequest(uint256)", +"e6c9f6ee": "shelf(string,address)", +"e6ca00b5": "_abortAllRounds()", +"e6ca0f47": "setStages()", +"e6cb9013": "safeAdd(uint256,uint256)", +"e6cbcba9": "PlusOnePonzi()", +"e6cbd74c": "TokenSold(uint256,uint256,uint256,uint256)", +"e6cbe351": "saleAuction()", +"e6cda5ff": "countDays()", +"e6ce1622": "ProcessMarkings(bytes32,uint256,uint256,uint256)", +"e6d02bf0": "unsubscribeCaller(address,address)", +"e6d04d5e": "whitelistedParticipants(uint256)", +"e6d09529": "getTTTCount()", +"e6d0a37d": "RemovePoolMember(address,string)", +"e6d0dfda": "setDiscountTime(uint256)", +"e6d1092d": "vestedTeam(uint256)", +"e6d17238": "specialWallet()", +"e6d17cfc": "_updateToken(uint256,uint256)", +"e6d18a7a": "nihilumBalanceOf(address)", +"e6d20a23": "king_of_returning_shirts()", +"e6d26bc6": "setTeamContractAddress(address,address)", +"e6d2ceab": "set_pool_percentage(uint8)", +"e6d30bf2": "finishMinting(bool,bool)", +"e6d343a5": "getTransContractLocked()", +"e6d3b85b": "getOwnershipForCloning(uint256)", +"e6d3f673": "distributeGeneratedPower(uint256)", +"e6d41b39": "isApprovedTransferer(address,uint64)", +"e6d44122": "limitPreSale()", +"e6d4d217": "addAddressToWhitelist(address,string)", +"e6d54815": "delSpecialPrice(address)", +"e6d55f3a": "buy10ktickets()", +"e6d61f70": "resetInactivityTimer()", +"e6d660dc": "UBT(uint256,string,uint8,string)", +"e6d66ac8": "sendTokens(address,address,uint256)", +"e6d76a76": "withdrawSynthetix(uint256)", +"e6d78add": "tokensPerWei5()", +"e6d7fd33": "TokenERC20(uint256)", +"e6d8a47a": "MIN_INVEST_BUY()", +"e6d8d435": "AMBASSADOR_ONE()", +"e6d944a7": "computeCurrentPrice(uint16)", +"e6d95eb8": "DSAuthorized()", +"e6d970aa": "registry(address,address,bytes32)", +"e6d9bb0f": "secondsUntilEnd()", +"e6da89cd": "addVestingForBeneficiary(address,uint256)", +"e6dab965": "startTrack(bytes32,uint256)", +"e6dad824": "withdrawFrom(uint256)", +"e6db38c7": "purchaseFromTime(uint256)", +"e6dba7e8": "EX()", +"e6dbf486": "setCLC(address)", +"e6dc3655": "_validateUrl(string)", +"e6dc85a3": "weiTotal()", +"e6dc992d": "buySquareAtAuction(uint8,uint256,address)", +"e6dd672c": "enterMainSale()", +"e6dd9a8d": "endBookings()", +"e6deb223": "addPlayerMapping(string,string,uint256,uint256)", +"e6deefa9": "deposit(address,uint16)", +"e6dff3b4": "whitelistInvestor(address,bool)", +"e6e05562": "getIslandPreviousOwners(uint256)", +"e6e08ba4": "openPreICOPrivate()", +"e6e13795": "_addEntry(bytes32)", +"e6e261b2": "getFundAllTx(uint256)", +"e6e2c041": "_removeDiscount(uint256)", +"e6e2e1cd": "VestFFTokens(uint256,uint256)", +"e6e35407": "startCoinFlip(bytes32,bytes32,bytes32)", +"e6e45ea2": "MyHumanStandardToken(uint256,string,uint8,string)", +"e6e46238": "idCount()", +"e6e5b492": "AirwayBill()", +"e6e623d5": "setTokenSymbol(address,bytes32)", +"e6e68cb3": "map(uint256,uint8)", +"e6e7237f": "claim_time_victory(uint256)", +"e6e84bf8": "Suren3Token()", +"e6e88593": "_contractStatus()", +"e6e8c692": "computeResponseFirstHalf(uint256,uint16)", +"e6e91cfc": "voidFailedPayment(uint256)", +"e6e93b14": "setbetEnd()", +"e6eb00ce": "drawingNo()", +"e6eb6867": "updateKey(bytes)", +"e6ecc9c1": "getReservedAmount(address)", +"e6ecf8a0": "CONTENT_FUND()", +"e6ed4746": "setBonus(uint8)", +"e6ed51b7": "createToken(uint256,address,address)", +"e6ed6c74": "getRabbit(uint256)", +"e6ee78bd": "approveRemoveOwnerRequest()", +"e6effbe9": "createAuction(address,uint256,uint256,uint256,uint256,address)", +"e6f02bf9": "computeBonuses(uint256)", +"e6f041c1": "testLessThan()", +"e6f0823c": "deleteNota(uint256)", +"e6f091f9": "isAccepted(address)", +"e6f0b6cf": "individualCapInWei()", +"e6f0beeb": "sort(uint8[4])", +"e6f1a189": "isCustomToken()", +"e6f3ae3c": "neighbor(uint256,uint8)", +"e6f46410": "RBC()", +"e6f47613": "multiSubWithdrawFor(address[],address[])", +"e6f4c4a7": "setOtherSettingOwner(address)", +"e6f602ff": "benTook()", +"e6f6266a": "numMinters()", +"e6f67ef2": "payOrganizer()", +"e6f6b789": "setInterfaceImplementation(string,address)", +"e6f6e19f": "emissionStage()", +"e6f7bf89": "GetOwnerAddress()", +"e6f7ec75": "populateTierRates()", +"e6f8263e": "JackpotPeriods()", +"e6f8298c": "cancelActiveLoanAtIndex(uint256)", +"e6f82ca3": "_clearBridgeTokenFee(uint256)", +"e6f859e7": "descriptions(uint256)", +"e6f9476a": "getContribPeriod()", +"e6f9f265": "areNoncesValid(bytes,uint64[],uint64[])", +"e6fafef0": "ContributionMinimumUpdated(uint256)", +"e6fb5c4a": "CHLToken()", +"e6fbf441": "transferFromSenderPaysFee(address,address,uint256)", +"e6fd2982": "initialReserve()", +"e6fd42ee": "currentHalving()", +"e6fd48bc": "startTimestamp()", +"e6fd604c": "cut()", +"e6febc9b": "investorWithdraw(uint256)", +"e6ff0853": "advisorsTokenWallet()", +"e6ffd50d": "OXGOLD()", +"e6fff409": "TetherGBP()", +"e7001b84": "setOwnedCount(address,uint256,uint256,bool)", +"e700d63a": "FeesConverted(uint256,uint256,uint256)", +"e700efc4": "MaxSupply(address,uint256,bool)", +"e701900c": "refundTransaction(bool)", +"e701a6d3": "handlePresaleTokenMany(address[],uint256[])", +"e701d051": "setMarketerRate(uint256)", +"e70265a5": "FRACTION_ETHER()", +"e7031501": "jackpotWinPercent()", +"e703e9c3": "CheckActivate()", +"e704430d": "numberOfTreasuryOfficials()", +"e70468b1": "cancelOpenBids()", +"e7046bf0": "setFx(address)", +"e704f151": "burnContributorTokens(address)", +"e7058e15": "Rollback()", +"e705a519": "SALE_1WEEK_BONUS()", +"e7062263": "checkEndorsementExists(bytes32,bytes32)", +"e706918c": "testToggleBitSuccess()", +"e7073a4c": "MarketplaceV2(address)", +"e7074de2": "FOUNDATION_TOKENS()", +"e7077a3a": "CCToken()", +"e7084b7e": "closeTimeout()", +"e7092b41": "getAllowance(address,address,address)", +"e7095e97": "mintTo(address,string,uint256,uint256)", +"e70990d7": "summon10()", +"e7099763": "client_wallet()", +"e709cd09": "ONDEONE()", +"e70addec": "right87(uint256)", +"e70b11df": "revokeAllocation(address)", +"e70b5259": "mapHeight()", +"e70b793a": "blankbreedingdata(uint256,bool)", +"e70c052a": "ethFundDepositAddress()", +"e70c3276": "HyipProfitTokenTeamAddress()", +"e70cd5ec": "destroyItemsStorage()", +"e70e690a": "set_gas_price_max(uint256)", +"e70e6ece": "BOURSETOKEN()", +"e70eb392": "claimReward(uint256,address)", +"e70f5d95": "setIV_R3(uint256)", +"e70fe5e3": "GenesisToken(address,uint256)", +"e7105795": "_raceOpened(uint256)", +"e710efc6": "regSpot(uint16,bytes32)", +"e711da27": "writeToStorage()", +"e71264fa": "addNewTokens(uint256)", +"e7127e29": "addressToTrainer(address)", +"e712b694": "comp_count()", +"e712bbad": "enterArena(uint256[4],address)", +"e71346f4": "removeAnimalIdFromCountry(uint256,uint256)", +"e7137dbf": "withdrawETH(address,address,uint256)", +"e713cda8": "returnUint32(uint32)", +"e714a028": "cancelWithdrawalRequest()", +"e7151828": "deathData_v1()", +"e7152a5c": "transferStar(address,uint256)", +"e715920f": "doBuy(address)", +"e717db5c": "CheetahCoin()", +"e717dc3d": "tax_fund()", +"e717ea61": "getCurrentAddress()", +"e718234d": "tokenLock()", +"e71897cd": "alfatokenteam()", +"e718ad01": "ReclaimPeriodChanged(uint256,uint256)", +"e718f7aa": "_Setting_Default_GameBoard(uint256)", +"e7199f82": "transferCentralBanking(address)", +"e71a02e1": "DELAY_PERIOD()", +"e71a402e": "mul_float_power(uint256,uint8,uint8,uint8)", +"e71a5577": "getNumPullRequests()", +"e71a7811": "completeOwnershipTransfer()", +"e71b49ad": "ADDR_TKG_ORG()", +"e71b7913": "expireTransfer(address)", +"e71b8b93": "bye()", +"e71bbf48": "TokenSyndicateFactory()", +"e71bdf41": "addDelegate(address)", +"e71c3b38": "LogSetRBInformationStoreAddress(address)", +"e71c9697": "placeBet(uint256,uint256,uint256)", +"e71d3ae2": "CYFR()", +"e71d77a7": "PRICE_CHANGE_TIME_STEP()", +"e71d7bf0": "testControlTransferNotEnabled()", +"e71df6d6": "acceptMembership(address,uint8,uint256)", +"e71e592b": "replaceDelegates(address[],address[])", +"e71ecf6e": "revenueShareCurrency(address)", +"e71efd18": "Mytoken(uint32,string,uint8,string,address)", +"e7201d7d": "masterOwner()", +"e720b4a7": "DEEM()", +"e720e1b3": "marmoOf(address)", +"e7211134": "createDAO(uint256,string,bytes32)", +"e7212728": "getFreeChicken()", +"e7225175": "timeoutSEC()", +"e722a522": "createContractPeriodicTable(string)", +"e7233ce7": "getAdIds()", +"e7239ed2": "getTimebasedBonusRate()", +"e723a8f9": "setFundraising(address)", +"e724529c": "freezeAccount(address,bool)", +"e7255ef9": "desiredOutcome()", +"e7271c34": "removeArts(address)", +"e7278231": "DesToken()", +"e727de55": "setEggPrice(uint128)", +"e7299675": "DroplexToken()", +"e729b416": "lockIndexes(uint256)", +"e729ebe8": "getSignatureParts(bytes)", +"e72b0e23": "CreateTUBE(address,uint256)", +"e72b6091": "extendSaleTime()", +"e72c40dc": "CoreTeamMinted(address,address,uint256,uint256)", +"e72c81cf": "demo1(address,uint256,bytes,string)", +"e72cba6e": "ICO_PHASE1_AMOUNT()", +"e72e46fd": "ImmlaIco(address,address,uint256,uint256,uint256)", +"e72eb439": "DogTestToken()", +"e72f4f2a": "s38(bytes1)", +"e72f5f63": "maxRandom()", +"e72f7a78": "finishCurrentGame()", +"e72f99ac": "deathData_a18()", +"e72fd4e1": "developerCut()", +"e72fee5d": "massTeamMsgHash()", +"e7302541": "convertOldToken(address)", +"e730e87a": "stageOneSupply()", +"e73140c1": "setPublicOfferingDate(uint256,uint256,uint256)", +"e7316a95": "_set10()", +"e731b034": "HawalaKickoffTime()", +"e731bb09": "cpn(uint256)", +"e7320f9e": "getGameMaxNumberOfBets(uint256)", +"e7326806": "transferOracle(address)", +"e7328000": "userTokenBalances(address)", +"e7329e71": "scheduleCall(bytes,bytes,uint256,uint256,uint8,uint256)", +"e732a7e1": "preAllocationsPending()", +"e7334156": "processNextDeposit(address)", +"e73471fa": "_mintNativeCoinsByErcToNativeBridge()", +"e735b48a": "updateDescription(string)", +"e735f667": "destroyChildren(uint256)", +"e7368a1f": "isOnSale(uint16,uint64)", +"e736f03c": "actived()", +"e7377ccb": "vestingMembers(address)", +"e7383c91": "ICOStarted(uint256,string)", +"e73886b0": "addLocked(address,uint256)", +"e738a7a5": "createDungeon(uint256,uint256,uint256,uint256,address)", +"e738cb69": "EventLogged(string,uint8,uint256,address)", +"e738d2b3": "claimingFee()", +"e7398fa3": "setTokenRate(address,uint256)", +"e73995cd": "setSale(uint256,uint256,uint256,address)", +"e739a4fe": "initialSeed()", +"e73a914c": "setDAO(address)", +"e73b7d77": "testControlCreateNewRevisionNotUpdatable()", +"e73b9e2f": "bridgeAmount(address)", +"e73c032b": "PRESALE_TOKENCAP()", +"e73c3c53": "pingOracle(uint256)", +"e73c6353": "Payroll(address,uint256,uint256)", +"e73c99a0": "METADOLLAR()", +"e73cba34": "getTicketRound(uint256)", +"e73cc2eb": "walletPeriodOf(address)", +"e73cf000": "EMIToken()", +"e73de430": "releaseAccount(uint8,address)", +"e73e5063": "setRewardManagerLimit(uint256)", +"e73fc0c3": "getTokenByName(string)", +"e740ce26": "DSToken()", +"e740f4fc": "card_start_first()", +"e7416f01": "lastBlock_a18Hash_uint256()", +"e7422d29": "sendBalance()", +"e742b943": "ispackagesaleSetup()", +"e742db66": "tokenTaxRate()", +"e742f18a": "Task(bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"e743892b": "escrowExpiration(bytes32)", +"e744052b": "FalconFarmer()", +"e745656b": "removeImmigration(address)", +"e7463688": "MasharibTestCoin()", +"e7477f1c": "WithdrawDeposit(uint256)", +"e74799b4": "TOKEN_MIN()", +"e747f31c": "debit(uint256,uint256)", +"e74803db": "putSaleRequest(uint256,uint256)", +"e74915d0": "distribute(address,uint256,address)", +"e74997a8": "transferInternal(string,address,string,address,string,uint256,uint256)", +"e74a19fa": "AirdropTokensHolder(address,address,address)", +"e74a48be": "reservedTokens(address,uint256)", +"e74a5847": "getGladiatorCooldown(address)", +"e74a84ea": "issueToken(address,uint256)", +"e74ab046": "increasePrice_20_January()", +"e74ac94a": "RetailLoyaltySystemToken()", +"e74b981b": "setFeeRecipient(address)", +"e74b9d11": "safeToSubtract(uint256,uint256)", +"e74ba7b3": "getMntTokensPerEth(uint256)", +"e74baeef": "Upgrade(address,bytes)", +"e74cd692": "testNextRune()", +"e74ceb77": "EGGS_TO_HATCH_1CHICKEN()", +"e74d6d1b": "getLeader(address)", +"e74e66d7": "toB32(uint256)", +"e74e6e9e": "GBMToken()", +"e74f3fbb": "claimVestedTokens()", +"e74f8eff": "firstDayTokenLimit()", +"e74ffbd5": "getPart(bytes32,uint256)", +"e750b5c0": "getProjectAddress(string)", +"e7514287": "IsGenesisAddress(address,address)", +"e7519ac0": "_setTokenName(address,uint256,string)", +"e751f271": "execute(bytes32)", +"e75235b8": "getThreshold()", +"e7528e1f": "createSubmission(string,bytes32)", +"e75303a5": "recentWinners()", +"e7530cfc": "_batch3_icosaleStartTimestamp()", +"e7542782": "Recovery(address)", +"e754a4e5": "presale2_startdate()", +"e75528cc": "buyBuilding(uint256,uint256)", +"e75539e7": "Schrodinger()", +"e7556704": "GPSToken()", +"e755aaaf": "takePoint(uint32,int256,bool)", +"e755e077": "MKToken()", +"e755e60f": "settleBetTest(uint256,bytes32)", +"e75623d8": "setDeploymentAdminsContract(address)", +"e75705c7": "submitFakeHeader()", +"e7572230": "getPrice(uint256)", +"e7574128": "abcToken()", +"e757835e": "Yotra()", +"e7579c24": "totalBuyerSupply()", +"e757c17d": "preSalePrice()", +"e75864e4": "StarsICO(uint256,uint256,uint256,address,address,address,address,uint256)", +"e758d445": "getCurrentTierInfo(address,bytes32)", +"e759dfb8": "investorsBatchSize()", +"e75a0747": "Staker()", +"e75afb65": "endCrowdfund(address)", +"e75b4642": "_decreaseAllowance(address,uint256)", +"e75b8b23": "getRecordById(uint256)", +"e75bd44a": "currentPrize(address)", +"e75bf79b": "ESEVENTYSEVEN()", +"e75bf820": "extraTokensHolder()", +"e75cdd7b": "isAddressInServer(uint256,address)", +"e75d1721": "vevcoin()", +"e75dcb19": "partnerSaleTokenPrice()", +"e75e69d6": "TryCoin()", +"e75ea9da": "preICOEndDate()", +"e75ef9b2": "trackSpend(uint256)", +"e75f02e3": "UraniumPlus()", +"e75f1634": "pearlSend(address)", +"e75f6e21": "totalMfr()", +"e7609c16": "getFarmer(address)", +"e760a11a": "attachContracts(address,address,address,address,address)", +"e760d284": "BOOKIES(uint256)", +"e760da9d": "createCP(address,string,string)", +"e760fb06": "groveAddress()", +"e7619fad": "allTokenIds()", +"e761eec6": "RecordTransfer(address,address,uint256)", +"e76240a4": "calcZWCAmountByToken(address,address,uint256)", +"e76261fb": "GetContractStateCancelledByLandlord()", +"e7637b5b": "deleteInfo(uint256,bytes32)", +"e7638445": "getRaffleTimeLeft()", +"e7651d7a": "normalProcess()", +"e7657e15": "ids()", +"e765bc5a": "thirdStageEnd()", +"e765c69a": "betOnDozen(uint256)", +"e765cb44": "auctionMinPrice()", +"e7663079": "owner_()", +"e766d79e": "CrowdsaleEndChanged(uint256,uint256)", +"e767b578": "createPlayerAndAssign(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,bytes,string,address)", +"e76895bf": "OwnerAdded(address,bytes32)", +"e7694493": "is_white_listed(address,uint256,bytes)", +"e7696a29": "updateWeedTotal(uint256,bool,uint16)", +"e769dfbd": "buyTransferFee()", +"e769f61f": "private_withdrawAll(address)", +"e76abcb9": "presaleBonusTier2()", +"e76b8126": "finish(address,address,address,address)", +"e76cc0d3": "failWithoutReason()", +"e76dd3ef": "returnBet(uint64)", +"e76e337d": "Honolulu()", +"e76e5ecf": "__DEBUG_BAL()", +"e76e9286": "depositPresale(address,uint256,uint256)", +"e76eabe5": "finishPreIcoAndStartIco()", +"e76ece01": "setInvestStart(uint256)", +"e76ed0e3": "DividendToken()", +"e76f0836": "getcurrNumOfCards()", +"e76f3d5a": "REFERRED_BONUS_PERMILLE()", +"e76f62cd": "Reissue(uint256)", +"e770390d": "deleteMultitoken(uint256)", +"e771066f": "marriageProof(bytes)", +"e7712a94": "MDTCrowdsale(address)", +"e7718594": "totalAccessories()", +"e771e193": "GetCountryCode(uint16)", +"e7722f9b": "isAddressInvited(address)", +"e773c82f": "bonusEnds2()", +"e773ffd5": "queryPlayerUnAwakeSkillIds(uint32[11])", +"e7740cf9": "revealPaper(string)", +"e7751e48": "ownershipAuctionCount(address)", +"e775781b": "getPopularity(bytes32)", +"e775f01f": "CAPToken()", +"e776a5b5": "wallet_address()", +"e776fa22": "AlphaconCrowdsale(bytes32[5])", +"e77772fe": "tokenFactory()", +"e777b97b": "LogRegisteredInterval(uint64,uint64)", +"e777d060": "removeProviderAdmin(address)", +"e7781f3c": "ToppedUp()", +"e77900e9": "projectMemberAddress()", +"e779a8cf": "airLimitCount()", +"e77a6daa": "tokenCalculate(uint256)", +"e77a912f": "prefilled()", +"e77aaee2": "enterRecoveryMode()", +"e77b077f": "canExchange(address)", +"e77b8d94": "ipow(int128,int64)", +"e77ba2c9": "checkIfMegaJackpotWinner()", +"e77c646d": "redeem(uint256,bytes)", +"e77cfa1c": "weiPending()", +"e77db232": "isKYCApproved(address)", +"e77dd5b3": "setSoftCapUSD(uint256)", +"e77df041": "LykkeTokenBase(address,string,uint8,string,string)", +"e77e02d3": "giveAdvisorsTokens(address,uint256)", +"e77ef21f": "drawdown()", +"e77f9906": "gameListOf(address)", +"e77ff2f6": "centralAuthority()", +"e77ff818": "privateSaleEndTime()", +"e780377e": "liquidityPoolAllocation()", +"e7804444": "allowMigrate()", +"e780f6c9": "setDestructionAddress(address)", +"e7810318": "updateInitialBonus(uint256)", +"e781d8c5": "getPC()", +"e7827e85": "unfreezeTokens(uint256)", +"e7829152": "prometh(address)", +"e782b172": "transferWithLockBatch(address[],uint256[],uint256[],uint256[])", +"e783bfb1": "totalAllocatedToTeam()", +"e7843949": "STATE_PAYOUT()", +"e784a923": "thisweek()", +"e7850f2d": "Sunny()", +"e78562c0": "dividendRecentBuyersPercentageDecreaseFactor()", +"e785bab2": "withdrawAdminRevenue()", +"e785daaf": "setUnownedPurchaseableMode(uint256,bool)", +"e786140e": "setBio(bytes3,bytes)", +"e78631fb": "changePhaseToICOweek2()", +"e78686eb": "reclaimContribution(address)", +"e78721af": "getSmartSharingByID(uint256)", +"e7873b58": "tokensBurned()", +"e787418a": "isSubmitted(uint256)", +"e787654c": "_forumIdToAddr(string)", +"e787887b": "initialRewardFraction()", +"e787b523": "CLKToken(address)", +"e788b5eb": "emitAreaSet(uint256,bytes32)", +"e78b8a37": "setPoolSize(uint16,uint32,uint16)", +"e78bfee0": "allocate(address,uint256,uint128,uint256)", +"e78c1136": "CreateLCD(address,uint256)", +"e78c219b": "takeBuy(address,uint256,uint256,address)", +"e78c3462": "betsOff(uint256)", +"e78ce8db": "getCarEarning(uint32)", +"e78ce986": "KOK()", +"e78cea92": "bridge()", +"e78d6306": "getBountyTransfers(uint256)", +"e78dd6f1": "mainSaleTokenLocked()", +"e78e3ab1": "ESOPOpened(address)", +"e78f5412": "_whichCourse(uint256)", +"e78fd9a8": "submitMint(address,uint256)", +"e78ff581": "getProposalPayloadHash(bytes32,uint256)", +"e7906208": "setA_Signature()", +"e790aa9e": "joinMountain(bytes32,address)", +"e791b66c": "Wemark()", +"e79206e6": "finishElections(uint256)", +"e7921023": "getHolderLink(address)", +"e79248ea": "setRelationFrom(uint8,address)", +"e7930d21": "DeliverToken()", +"e7933601": "getOverBalanceWEIInfo()", +"e7933d58": "setIcoPhaseAddress(address)", +"e7938b82": "minAllowedStakeInPercentage()", +"e79487da": "checkInvariant()", +"e7950ede": "logs(bytes)", +"e795c149": "FinalToken(uint256)", +"e79609e2": "getOrCacheDesignatedReportStake()", +"e7964b49": "sendeth(uint256)", +"e796570b": "isClearingPriceValidator(address)", +"e796818e": "AEFTOKEN()", +"e79695da": "WhitelistUpdate(address,bool)", +"e796a6eb": "refund(uint256,address,uint256)", +"e796c43c": "_cancelActiveAuction(uint40,address)", +"e797398f": "IsMultiFreeze(address,address[])", +"e797496b": "sigDestinationApproveAndCall()", +"e7977701": "setLotteryOptions(uint8,uint256,uint16,uint256)", +"e7979efa": "LOG_BetWon(address,uint256,uint256,bytes32)", +"e797ec1b": "enableMinting()", +"e7984a3b": "updateRewardForContributor(address,uint256,string)", +"e7986466": "setSupportedToken(address,bool)", +"e798f4eb": "webpud()", +"e7990596": "getAddressAndBalance(address)", +"e7992845": "pendingInstallments()", +"e7996f07": "removeAttribute(bytes32)", +"e799f374": "fundingMaxInWei()", +"e79a198f": "unregister()", +"e79ab547": "bulkTokenSender(address[],address[],uint256[])", +"e79b4388": "LogBidExpired(uint256)", +"e79d0860": "partnerCount()", +"e79e0a22": "getEthers(uint256)", +"e79e2bd3": "updateArea(uint256)", +"e79e770f": "EmergencySafe()", +"e79faa58": "unpause(string)", +"e79fb53c": "setUSDEtherPrice(uint256)", +"e79ffa11": "_dev()", +"e79ffa99": "getpurchasersLength()", +"e7a01215": "right2(uint256)", +"e7a01352": "adjustHardCap(uint256)", +"e7a02352": "MintDarioToken(address,int256,uint256)", +"e7a0459a": "setCatalogPlayersAddress(address)", +"e7a05f08": "isTokenSaleToken(address)", +"e7a17d83": "emitTaskCreated(uint256,uint256)", +"e7a25bfc": "JustEscrowTestCoin()", +"e7a2e28e": "fishbank()", +"e7a33822": "seal(address,uint256)", +"e7a35405": "managerAddressNumberMap(address)", +"e7a3c218": "testFail_mint_without_add_authority_to_controller()", +"e7a4581a": "getCirculationSupply()", +"e7a49c2b": "trustedTransferTokens(address,uint256)", +"e7a4d9d3": "LIQUID_TOKENS()", +"e7a60a9c": "getValidatorAtIndex(uint256)", +"e7a6e75c": "ETH_USD_rate()", +"e7a7043d": "addPrecommitmentAdjustment(address,uint256)", +"e7a83c74": "AT()", +"e7a8a5cb": "setTier(uint256)", +"e7a95a7f": "WHOLESALE_THRESHOLD()", +"e7aa3afc": "getProjectStatus()", +"e7aa8ed5": "CrowdsaleMCS()", +"e7aab290": "set_s(string)", +"e7ab4f1c": "getShareholderArray()", +"e7ac4df8": "launchInvestment(uint256)", +"e7ac81e5": "productSold(uint64,uint32,string)", +"e7acaa1e": "createJob(bytes32,address,address,uint256)", +"e7acb2b4": "ZitronSupply()", +"e7acdcd0": "deleteInvest(uint32,uint32)", +"e7aef169": "refreshInvestor(address,address,uint256)", +"e7aefd01": "allowTransfersEnabled(bool)", +"e7af4540": "ChiyouCulturalAcchain(uint256,string,uint8,string)", +"e7afae52": "WayCellToken()", +"e7b0f666": "totalPaid()", +"e7b172ed": "GAS_PRICE_LIMIT()", +"e7b1983e": "giveReward(uint256[4],uint32,uint8,bool,uint32[4])", +"e7b1a7ae": "collect_fee(string)", +"e7b1d43c": "withdrawVotingRights(uint256)", +"e7b1d6dd": "setServerStatus(string,uint256)", +"e7b2d7e5": "deprecateAndUpgrade(address)", +"e7b3387c": "getVoteCount()", +"e7b379c6": "TokensUnlocked(address,uint256)", +"e7b43c44": "changePuzzle(uint8,uint8,uint8,uint8,uint8)", +"e7b48d98": "getBurningMans()", +"e7b48f74": "get(int256,address)", +"e7b4e5ab": "entrants(uint256)", +"e7b512ec": "setAddress(bytes32,bytes32,address,bool)", +"e7b5d97d": "getMyReferralDividends()", +"e7b6135d": "getClown(uint256)", +"e7b6805b": "OriginalMyIdRepository()", +"e7b686a7": "UnpackEntity(bytes)", +"e7b69e74": "interest(uint256)", +"e7b6ff08": "beerAndHookersCap()", +"e7b70b38": "getPurchaseInfo(uint256,uint256,uint256,bool,uint256,uint256)", +"e7b7aea5": "changesp2(address)", +"e7b7c2a6": "setup(uint256,uint256,uint256,address,uint256,uint256,string,address,address)", +"e7b808ea": "getAccountFeeModifiers(address)", +"e7b83730": "tokenAmount(uint256,uint256)", +"e7b89977": "setFeeAccount2(address)", +"e7b8d977": "editionsOfType(uint256)", +"e7b94df4": "donationWallet()", +"e7b9aaef": "FIRST_VOLUME_BONUS()", +"e7b9db8d": "confirmBurning(uint256)", +"e7ba1012": "supplyController()", +"e7ba2cc8": "BelottoCrowdsale(uint256,uint256,uint256,uint256,uint256,address,address,address,address,address,address)", +"e7ba6c46": "resetReservations(address,bool)", +"e7bb22cd": "getValidClassId(uint64,address)", +"e7bb5233": "crowdsaleState()", +"e7bbda11": "heroCore()", +"e7bd85ca": "PFGC(uint256,string,string,bool)", +"e7be5617": "setOracleReference(address,address)", +"e7bf5352": "_withdraw(uint128,address,uint256,uint128)", +"e7bf7b08": "GroupCreated(uint32,uint256)", +"e7bf7dfc": "getProductPrice(uint256)", +"e7bfcf57": "HighCoin()", +"e7bfdc93": "clearLevels()", +"e7c0bd15": "SeedLog(address,bytes32,uint256)", +"e7c0dad5": "checkApprovalRatio()", +"e7c0e558": "BoomerangLiquidity(uint256,address)", +"e7c12837": "getPOOL_edit_24()", +"e7c158c6": "_setStrengthValue18(uint256)", +"e7c17972": "btcToTokens_(uint256)", +"e7c4118a": "certIssued()", +"e7c5c27f": "saleOpen(address)", +"e7c5d907": "Broker(bool)", +"e7c6229a": "publicOfferingHolder()", +"e7c6978e": "RSCCoinCrowdsale(address,address)", +"e7c77c80": "getAmountDailybyNum(uint32,uint8[4])", +"e7c8d171": "getTotalWidth(uint16,uint16)", +"e7c8dd6d": "GemsToken()", +"e7c8f61e": "enableAura(uint256,uint256)", +"e7c957c0": "MultiTransact(address,bytes32,uint256,address,bytes)", +"e7ca1343": "setReserveForCompany(address)", +"e7ca438d": "getUserDisplay(address)", +"e7cc62bd": "total_users()", +"e7cc862b": "storehouseIndex(uint256)", +"e7cc8ded": "generateLockupTokensDelegationSchemaHash(address,uint256,bytes32)", +"e7cd4a04": "addWhiteList(address)", +"e7ceaeab": "getTrackOwner(bytes32)", +"e7cf0171": "enableTokenClaiming(bool)", +"e7cf514d": "setMinOrderEthAmount(uint256)", +"e7cf548c": "getBurnCount()", +"e7cf6fcb": "changeEtherTxLimit(uint256)", +"e7cf7b34": "ICO_PRICE3()", +"e7cfafce": "getBirthMonth()", +"e7d00518": "FinishTokensale()", +"e7d0242b": "totalWeiCollected()", +"e7d03e93": "setMaxiumInputEther(uint256)", +"e7d0c552": "getRoyaltyPartners()", +"e7d0c7e7": "timeStampOfCrowdSaleStart()", +"e7d11a44": "getFutureTransByIdx(uint256)", +"e7d137ec": "balancesAddressDescription(address)", +"e7d1a024": "NewOne(address,uint256,uint256)", +"e7d2340f": "playervanity(address)", +"e7d29d8b": "withdrawExtraToken(address)", +"e7d29e38": "addHolderAddress(bytes32,address)", +"e7d2c590": "showCompany(uint256)", +"e7d2f315": "totalSupplys(address[])", +"e7d3fe6b": "mint(uint256,uint256,address)", +"e7d4761b": "unhalt_15day()", +"e7d47c2e": "selflleryManagerWallet()", +"e7d48741": "allOldUsers(uint256)", +"e7d4fd91": "getTokenControlInfo(address)", +"e7d50e5c": "FarmShare()", +"e7d53fcb": "privateSale(address)", +"e7d5a62b": "testNot()", +"e7d80c70": "getOrderCreator(bytes32)", +"e7d854af": "setWithdrawABIHash(bytes32)", +"e7d86204": "registerTeamScores(uint256[])", +"e7d87cda": "arbTokenExists(uint256)", +"e7d8c7db": "MicroToken()", +"e7da257f": "highestBidderCC()", +"e7daaa5a": "OwnerManager()", +"e7dac983": "submitClaim(uint256,uint256,uint256,uint256,uint256)", +"e7dafdb6": "transfer_token(address,address,uint256)", +"e7db6770": "startWork(uint256,bytes32,bytes32,address)", +"e7dde9a3": "_setDailyLimit(uint256)", +"e7de559c": "contrDividends(uint256[])", +"e7de72a4": "createFlag(uint16,uint256)", +"e7dee968": "KittyCore()", +"e7df2f3e": "disburseAddr()", +"e7e00d1d": "assignTestAddresses(bool)", +"e7e024ce": "janwin(uint256,uint256)", +"e7e0ca7b": "tariffIndexForAmount(uint256)", +"e7e10490": "cancelSale()", +"e7e1e69f": "commitBid(bytes32,string)", +"e7e2aa0e": "buyer_cancel()", +"e7e31d52": "setNinjaKindCount(uint8)", +"e7e31e7a": "addSpender(address)", +"e7e3411d": "fechBalanceByAddress(address[])", +"e7e3e167": "rate(address,int256)", +"e7e481c5": "BP_SPARTAN()", +"e7e52369": "firstMembershipPurchase()", +"e7e6aed1": "test_testableStandardCampaignContribution()", +"e7e766ca": "CSCRarePreSaleManager()", +"e7e7e3e8": "ETHEREMON_PROCESSOR()", +"e7e8116e": "forceTransferTokenOwnership()", +"e7e96a43": "getPOOL_edit_2()", +"e7e9e106": "rewardVote(address,address,uint256)", +"e7e9f385": "notarise(bytes32)", +"e7ea3d2d": "usernames(bytes16)", +"e7ea4406": "Civiq()", +"e7ea8065": "setNameRefer(string,address)", +"e7ea8122": "isStateInitializing()", +"e7eaaa05": "totalAvailableForSale()", +"e7eb285f": "stepEtherValue()", +"e7ebc348": "nonActivationWithdrawal(address[2],uint256[8],uint8,bytes32[2])", +"e7ec6aef": "getSigners(bytes32)", +"e7ec8182": "issueTeamTokens()", +"e7edab45": "_cancelParticipation()", +"e7ee6ad6": "rate(uint256)", +"e7ee85a5": "quickBuyPath(uint256)", +"e7eed1f7": "getCurrentPot()", +"e7efcfc2": "totalPayoutAmount()", +"e7f034c1": "getUri(address,uint256)", +"e7f0a865": "transfertokenContract(address)", +"e7f1111e": "initializeHolding(address)", +"e7f18249": "insertShareholder(address)", +"e7f1c468": "UserSold(address,uint256,uint256,uint256,uint256)", +"e7f23cb1": "getCallStack(uint256)", +"e7f35484": "NewAquarium(address)", +"e7f4037a": "demintTokens(address,uint8)", +"e7f40d35": "IntervalBytecodes()", +"e7f44523": "ReceivedLTC(address,uint256,string)", +"e7f4767c": "delimiter()", +"e7f56111": "ClaimPayout(uint8[],bytes32[],bytes32[],bytes)", +"e7f578e1": "createDoc(string,string,string)", +"e7f6edbd": "holdingTax()", +"e7f9e408": "stopTransfer()", +"e7fa443e": "unlockCashpledge(bytes32)", +"e7fa6883": "investFor24Months(address,uint256,uint256)", +"e7fa7969": "assertEq25(bytes25,bytes25)", +"e7fac728": "friendsFingersRatePerMille()", +"e7faecec": "testFailInsufficientFundsTransfers()", +"e7fb5388": "exit(string)", +"e7fb74c7": "buyItem(uint256)", +"e7fbee28": "checkIfCustodiesServedBBD(address[])", +"e7fc4b64": "ricardianVoucher(uint256,string,uint8,string,string,string,uint8,uint8)", +"e7fcde9b": "setFeeType(uint256,uint256,uint256)", +"e7fcf520": "signToResetTokenControlInfo()", +"e7fd9a13": "addEmployee(address,uint256)", +"e7fdc514": "buyFromVault(uint256,uint256,uint256)", +"e7fde97a": "_withdrawDividends(address)", +"e7ff0e38": "bountyDistributed()", +"e7ff8901": "transferWine(address,bytes32)", +"e8001e93": "sellerApprove(address,uint256,bytes32)", +"e80080d0": "cancelBurnRequest(uint256,string)", +"e80160ab": "order(bytes32)", +"e8017bb7": "getHTLCSpendingHash(int256,bytes32)", +"e801a361": "tileTimeoutTimestamp(uint256,address)", +"e8022dc9": "PLAgreements(address,address)", +"e8024468": "getHeroRequiredGoldForLevelUp(uint256)", +"e8024d75": "eNomCoin()", +"e8025d77": "changeStatus(uint256)", +"e8038e25": "TokenSale(uint256,uint256,address)", +"e803b708": "setDetails(string,uint256)", +"e803bcc6": "SetPriceIncrease(uint16)", +"e8046759": "decimals_multiplier()", +"e8055e9c": "burnExcess(uint256)", +"e8069e84": "verify(bytes32,bytes,address,address)", +"e806c603": "robottradingToken()", +"e8071f30": "exponential_decay(uint256,uint256)", +"e8078d94": "addLiquidity()", +"e8083863": "finalizeAuction(uint256)", +"e8088ca2": "GetEvaluate(bytes32,uint8)", +"e808aef7": "isIcoSuccess()", +"e808d671": "crowdsaleTokenMint()", +"e809046f": "NumeraireBackend(address[],uint256,uint256)", +"e80919d5": "mintUnderCap(uint256,uint256)", +"e80a4df7": "NotusNetwork()", +"e80b128f": "tournamentsAddr()", +"e80b7ab6": "clearArray()", +"e80bd3e5": "addCertificationDocumentToSelf(bytes32)", +"e80c4182": "ShresterToken()", +"e80d2ef8": "calculatesubscribersell(uint256)", +"e80d47dd": "USDSTEMPRICE()", +"e80d60b8": "CryptohomaToken()", +"e80db5db": "coreContract()", +"e80f23aa": "tokenApprovalWithSignature(address,address,address,uint256,uint256,uint256,bytes32,bytes)", +"e80f72c0": "getTransactionFromProposal(uint256,uint256)", +"e80fd970": "etherToSendDev()", +"e810267a": "dateEcoRelease6()", +"e8107ed4": "ElectriumToken(uint256,string,uint8,string)", +"e81140a8": "setPreICOStartTime(uint256)", +"e811f50a": "collectedFee()", +"e8125eb9": "updateContractTokenBalance()", +"e814018d": "getCrowdsaleHardCap()", +"e8141f93": "logUint(int256,uint256)", +"e8144c42": "advisorsTokensLock()", +"e8147a25": "changeMinBet(uint256)", +"e814c941": "removeParticipant(address[])", +"e815b60d": "SencToken()", +"e8168177": "lastBlock_a2()", +"e816a515": "takeFlight()", +"e816f76f": "Association(address,uint256,uint256)", +"e8171f37": "valueOfScheme(uint256)", +"e81766e8": "AgriChainDataContract()", +"e8179abf": "getStar(uint256,string,string)", +"e819172a": "TestCoin2()", +"e8197a4b": "totalSuppliedAfterLock()", +"e81a6c58": "issueRefundIfNecessary(uint256)", +"e81b34af": "_deployContract()", +"e81b3c88": "CardCount()", +"e81b53d0": "computeCost(address,bytes32,bool)", +"e81ba080": "updateMaxCap(uint256)", +"e81c17a1": "setOwnerAt(uint16,uint16,uint8,address)", +"e81c2fec": "reDistribution()", +"e81ca129": "consumeTicket(address,uint256)", +"e81cf24c": "replace(uint256,uint256)", +"e81d53cf": "arr()", +"e81d6c6f": "reserveY2()", +"e81dd181": "callSoftCap()", +"e81e0a09": "Win(address,uint8,uint256)", +"e81e1ccc": "withdrawDonation()", +"e81e935a": "summPrivateSale()", +"e81ecb4c": "received(uint64)", +"e81f0154": "pipeIndex()", +"e81f02b6": "withdrawFrom(address,address)", +"e81f35fd": "setLastTokenId(uint256)", +"e81fdd77": "restCandy()", +"e8203e38": "emitWithdrawn(address,uint256,address)", +"e820a32f": "vetoPayout(uint256,uint256)", +"e820ce4a": "setCTime(uint256)", +"e8211eeb": "setUpDistribution(address[],uint256[],uint256)", +"e8223468": "sha3clone(bytes)", +"e8227611": "setRealisation_effective(uint256)", +"e8238688": "setTokenVestingFactory(address)", +"e823b9bf": "toInt256Safe(uint256)", +"e823da03": "VKBToken()", +"e823fa20": "checkDragonStatus(uint256,uint8)", +"e8244d48": "changeHouseEdge(uint256)", +"e824b9c7": "moftakToken()", +"e827653c": "referalCount(address)", +"e827b3e2": "latestPost(address)", +"e827f7f3": "request(bytes32,string,uint256)", +"e827ff89": "HDToken99(uint256,address)", +"e82898b3": "loser()", +"e828a293": "TestyToken()", +"e82906b3": "ISCoin(address)", +"e82935da": "like(uint256)", +"e8294aad": "bonus1Ends()", +"e8297da2": "defaultLockInDuration()", +"e829945a": "buyProperty(uint16,uint256)", +"e829a171": "MIN_GET_AMOUNT_FINNEY()", +"e829d86d": "releaseAgents(address)", +"e82a7d8d": "submitAnswer(address,uint256)", +"e82aa31f": "createTeam(uint256[])", +"e82b7cb2": "proxySetCosignerAddress(address,bytes32)", +"e82bef29": "fundAddress()", +"e82c6e7b": "totalTokenSales()", +"e82c6e8a": "mintFirstTokens(address,uint256,uint256[])", +"e82cc47f": "getFundInfo(bytes32,string,address,address)", +"e82d777c": "FHCContract()", +"e82db7a0": "Batman(uint256,string,string)", +"e82ed40c": "communityContributionWithdraw(uint256)", +"e82f7dd4": "testThrowsRetractLatestRevisionNotUpdatable()", +"e83007b2": "RunLottery()", +"e83029bb": "checkbalance(address)", +"e8303659": "ETHER_CAP()", +"e8307d00": "setMinPurchase(uint256)", +"e8315742": "maxTokens()", +"e831884e": "getPhaseAtTime(uint256)", +"e832b482": "channelConfiguration(uint64)", +"e832fda3": "select_at(uint256)", +"e833bb53": "FLKDForGas()", +"e833cc12": "getNamespace(uint256)", +"e83400f6": "getBudgetOfCampaign(bytes32)", +"e83447d0": "breakLink()", +"e834a834": "claimed()", +"e834e89c": "FlexCoin()", +"e8350fae": "proclaimInactive(uint8)", +"e8358025": "isCrowdSaleFinalized()", +"e835852b": "LogQueryFeeSet(uint256,uint256)", +"e835dd27": "STAKE_MIN_AGE()", +"e837ab59": "getParticipantByAddress(address)", +"e8380983": "BChain(uint256,string,uint8,string)", +"e83851f8": "EtherAsteroid()", +"e8387af8": "_mint(int256,address,uint256)", +"e839554e": "getBasicCentsPricePer30Days()", +"e839e65e": "query2(string,string,string)", +"e83b2adf": "PTestYankeeCoin(uint256,string,string)", +"e83ba1fe": "stageFundGoalReached(uint8)", +"e83c0bba": "setEmployeeTokenAllocation(address,address,address[],uint256[])", +"e83c272c": "setTime2(address,uint256)", +"e83c460d": "TimeWeekOne()", +"e83c78d4": "toggleContractStopped()", +"e83ce1f9": "addAddressAlias(address,address)", +"e83cf468": "sendBattleTokens(address,uint256)", +"e83d1c5e": "LatestRechargeTime()", +"e83d589b": "getLLV_edit_24()", +"e83ded8e": "balanceOfLockTime(address)", +"e83dfe5a": "ConcludeChallenge(uint256,string)", +"e83e0359": "dividendsRightsFixUpdate_(address,uint256)", +"e83e34b1": "maxFees()", +"e83e92ac": "setSalesFee(uint256)", +"e83f682a": "beginContinuousSale()", +"e8400be5": "startBetting(uint32,uint32)", +"e840c116": "SocialNote()", +"e8421b94": "PlayToken()", +"e84221ef": "playBigOrSmall(uint256,uint256)", +"e8425467": "USDDecimals()", +"e8429510": "TokenForInvestor(uint256,uint256,uint256)", +"e8436936": "StatsMinted()", +"e8436ca5": "setMainCampaignStatus(bool)", +"e8443708": "PaygineHasDeployed(uint256)", +"e844ca34": "withdrawTokensToAdvisors()", +"e844cb18": "batatacoin()", +"e844d097": "addCandidate(uint256)", +"e845105c": "countriesLockEndingAt()", +"e846e7c0": "drawPeriod()", +"e846f1f4": "collectPercent(uint256)", +"e846f997": "contributionWallet()", +"e8474230": "getHybridizationFullPrice(uint256)", +"e8477bda": "setBuyMaxLimit(uint256)", +"e847ca9c": "BAXI()", +"e84818bc": "largeContribPercentage()", +"e8489626": "setProxy(address,address,bytes32)", +"e848aba2": "addWhiteListUsers(address[],uint256[],uint256[])", +"e849ec8c": "ChangeTokenContractOwner(address)", +"e84a481b": "adddotchtooffer(uint256,uint256)", +"e84b53bd": "addItemTo(address,uint256,uint256,uint256,uint256)", +"e84b69e4": "editTimer(uint8,uint256)", +"e84c9d5c": "removeWhitelister(address,address)", +"e84d2abf": "inMainSalePeriod()", +"e84d90c0": "checkDisabledStatus()", +"e84d92e8": "_getBridgeNativeFee(uint256)", +"e84f7054": "refundMyIcoInvestment()", +"e84f82f0": "emitBegin()", +"e85034a2": "walletTrade(address,uint256,address,address,uint256,uint256,bool,bytes32)", +"e85061ca": "playerAction(uint256,uint8)", +"e850899a": "StartPreSale()", +"e850a8ef": "payTo(address[])", +"e850e4c4": "GetContractStateEarlyTerminatedByLandlord()", +"e850efaf": "setRegionTax(uint16,uint8)", +"e850f3ae": "getGenerationIdForCall(bytes32)", +"e851808e": "CHARITYSEACOIN()", +"e8518341": "transferOwnershipWithHowMany(address[],uint256)", +"e8518be0": "requestReplaceOwner(address,address,string)", +"e8518dc6": "rateWithBonus()", +"e85230e9": "minETHin()", +"e85353e1": "admin_set_withdraw(address,bool)", +"e85365d5": "firstblock()", +"e8539244": "SetPayrollLocked(bool)", +"e85393d7": "WithdrawEmergency()", +"e853cda3": "checkKncArbitrageRate(uint256)", +"e853ce64": "joinTeam(uint256,uint256)", +"e854d135": "executeWill(address)", +"e854dfb4": "Order(address,uint256,uint256)", +"e854eeb3": "fciDecimals()", +"e85501d8": "revokeRequest()", +"e8554e8b": "getRaceBaseStats(uint256)", +"e855aee5": "_mint(uint256,address)", +"e8561d36": "cashBackFromProject(address,address)", +"e856528a": "mul(uint128,uint128)", +"e8580dd4": "Survey(address,uint256,string,bytes32[])", +"e85ac5b0": "ownerSetAuditor(address)", +"e85b26c0": "createClaim(address,uint256)", +"e85ca2a4": "bitcoin_multisig_vault()", +"e85dcfe8": "ScheduleTransaction(string,uint256,uint256)", +"e85de8e7": "valueInUSD()", +"e85e0bd7": "addToken(uint256,uint256,uint256)", +"e85e3d92": "LongClosed(address,uint256)", +"e85efc50": "assertEq(uint256,uint256,bytes32)", +"e85f3be6": "TOSPrivateHoldingContract()", +"e85f3fb0": "setAuthorizedSpender(address)", +"e86142b5": "orderOnSaleAuction(uint256)", +"e861c4f1": "dividendEndTime()", +"e861dc85": "VETO_PERIOD()", +"e861e34d": "minInvestInWei()", +"e861f077": "HaltStatus(bool)", +"e8625060": "testDisputedInvalidSequenceWrongWriteValue()", +"e863051c": "SmartForestCoin()", +"e86310eb": "exp(address,address,uint256)", +"e863a122": "getPercentageCW()", +"e863d8cc": "repeatedPayment(address,uint256,uint256,uint256)", +"e863f0d3": "acknowledgeOrder(uint256)", +"e8641652": "strCompare(string,string)", +"e86434ef": "startRefundPayment(uint256,uint256)", +"e864f2b6": "exchange(address,uint128)", +"e864fd27": "checkCap(uint256)", +"e8665638": "bonusVestingPeriod()", +"e866d302": "setJackpotWinCount(uint256)", +"e86701e0": "playerFlight(uint256,uint16)", +"e8672de9": "removeRatePlan(uint256)", +"e8679512": "getTransformInfo(uint32)", +"e867ecda": "setPricing(uint256)", +"e8685ba1": "getNumOfCandidates()", +"e8689bf8": "_emitUserRatingGiven(address,address,uint256)", +"e868b55e": "createReaderWriter(bytes32,address,address,bytes32)", +"e868cd17": "ManUnitedSC()", +"e86994ea": "getPropertyColors(uint16)", +"e869d45f": "registerScheme(address,bytes32,bytes4,address)", +"e86a3b8b": "WSIPrivateEquityShare()", +"e86a9b1e": "Custodian(address[],uint256,uint256,address)", +"e86afde0": "description(uint64)", +"e86ba262": "getTimeLimitForReplyOnProposal()", +"e86ba99d": "tryFinalizeProposals(uint256[],address[],bool[])", +"e86bf267": "takeCfd(uint128,address)", +"e86c6431": "isTransferManager(address)", +"e86c87d3": "func_0778()", +"e86cf04b": "TinyProxy(address,uint256)", +"e86d24ca": "getSmartSharingByHash(bytes32)", +"e86d86ea": "totalTransferWhitelistMapping()", +"e86dad29": "assetArray(uint256)", +"e86dea4a": "feeNumerator()", +"e86e3f2a": "setArrIntF1StrF2(int256[],string)", +"e86e52ec": "isBlocked(address,uint256)", +"e86f2c75": "mainSaleSecondBonus()", +"e86f6699": "isWhitelistedAddress(bytes32,uint8,bytes32,bytes32)", +"e870a88e": "setnumMax(uint16)", +"e870bec1": "logging(uint256)", +"e871614a": "getResponseUint(uint256,bytes32)", +"e871f35f": "addCourse(string,uint256,uint256,string,string)", +"e872a05e": "addrMine()", +"e873d02d": "cap2(address)", +"e8742b55": "setComment(string)", +"e87508be": "investorDeposit()", +"e8755d00": "setServiceFee(uint256,uint256)", +"e8756037": "finishExchange()", +"e8757d19": "donations()", +"e875bfbc": "getMinimumFunds()", +"e8763023": "ProofOfAwareness()", +"e876bdef": "getEtherRaised()", +"e876c273": "TotalSupplySet(uint256)", +"e876e3f1": "investorsFee()", +"e87752f4": "icsToken()", +"e8777158": "grantVested(address,address)", +"e877e541": "bankuToken()", +"e877f910": "sendToContract(address,uint256,bytes)", +"e8787040": "ElevenElevenToken()", +"e8789d88": "getEndTimeOfStage(address,uint256)", +"e878d65f": "QIUToken()", +"e879790a": "HHRFallback(address,uint256,uint256)", +"e87a0a59": "EIB()", +"e87a9d84": "phase1AccountTokensMax()", +"e87aa769": "_getShinyPurity(uint16,uint16)", +"e87b0242": "ADVISORS_LOCK_DATES(uint256)", +"e87bbdbb": "spawn(bytes32,address,address)", +"e87c05c6": "restSupply()", +"e87c0ee6": "getGameCount()", +"e87c1463": "bidTicket(uint256)", +"e87da468": "addChild(bytes32,bytes32)", +"e87df70e": "fivetimes()", +"e87e77fe": "switchAirdrop()", +"e87ea055": "checkCurrentStage()", +"e87ed8b5": "RTB2()", +"e87f41bb": "deleteInvestorTokens(address[],uint256[])", +"e87ff056": "getTeamByPosition(uint8)", +"e8801360": "soldTokensCounter()", +"e8814606": "CryptosisToken(uint256,string,string)", +"e882f844": "DINAR()", +"e883429a": "isTransferAllowedteam()", +"e8836183": "blockLock()", +"e88390aa": "coinSendDifferentValue(address,address[],uint256[])", +"e883d157": "outstandingPower()", +"e88499a9": "claimPayout()", +"e8850978": "reportMissingChunk(bytes32,uint256,uint8,bytes32,bytes32)", +"e8853e32": "getData_28()", +"e8854cfd": "getPointer(uint256)", +"e885910f": "trackCrowdsale(address)", +"e885b81f": "Bonuslist(address)", +"e8862924": "decodedLocksroot()", +"e886dade": "bulkTransfer(address,address[],uint256[])", +"e887841e": "to(uint256)", +"e8878b11": "wakeUpProxy()", +"e88810ff": "presalePiDiscount()", +"e8884aee": "_useFromDailyLimit(uint256)", +"e88885fa": "price1Of(uint256)", +"e888e445": "CatalogoOuvidorias(bytes32,uint8,bytes32,bytes32,int256)", +"e88a728f": "getAssetIdOwnerAndOIndex(uint256)", +"e88ab341": "contributorsVestTokenAllocation()", +"e88b0067": "mintInvestment(string,string,uint256,address,uint256)", +"e88b8ac6": "confirmAndCheck(bytes)", +"e88b9436": "MYR_Omnidollar()", +"e88bc2ba": "Variation(address,address)", +"e88c6a8a": "moveToken(address)", +"e88d27eb": "registerProperty(string,string,string,string,string)", +"e88d9567": "changeDepositFee(uint256)", +"e88dc5b7": "rewardPeriod()", +"e88eff06": "setUserRoles(address[],bytes32[],address[],uint8[])", +"e88f3a86": "addBonusToBlock(uint256,uint256,uint256)", +"e88f4510": "LigerToken(address,address,address,address,address)", +"e88f4c6f": "usedCoreSupply()", +"e88f97bd": "query2_fnc(uint256,string,string,string,uint256)", +"e8903656": "executeSubscription(uint256)", +"e8906a2d": "addSigners(address[])", +"e89152ac": "ItemReceived()", +"e8916af9": "addLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"e891c9db": "validateWithdrawalSignature(address,uint256,address,address,bool,uint256,uint8,bytes32,bytes32)", +"e8927fbc": "increase()", +"e8928f7a": "setMaxWei(uint256)", +"e8930efd": "Investors(address)", +"e8932ea1": "burnClosedTokenInternal(bytes32)", +"e8936b29": "liveSince()", +"e894000b": "authorizedPower()", +"e89401a1": "multihash(bytes32)", +"e894326c": "addDepositCreator(address)", +"e8944564": "test_insert_findWithHintPrevRemoved()", +"e894f117": "TokenTimelock(address,address,uint64)", +"e8959b94": "addUser(int256)", +"e8974832": "levelTwoBonus(uint256)", +"e89826ac": "addGame(string)", +"e89876d6": "POSController(address,uint256,uint256,uint256,uint256)", +"e89927ef": "voteForCandidate(string)", +"e8992d40": "additionalTotalSupply(uint256)", +"e8997dbd": "setFeesController(address)", +"e899e848": "Fastmarketnetwork()", +"e89a49e2": "setPrivateName(bytes32)", +"e89a4e92": "getFeeRatioForJS(address)", +"e89ac5dd": "OrganizeFunds()", +"e89aeaca": "redeemLand(address)", +"e89b0e1e": "addAccount(address)", +"e89b2564": "Rate5()", +"e89b3ecb": "withdrawPUB()", +"e89b5d4b": "incrementInventory(uint256,uint256)", +"e89b727c": "myTotalStakeAmount()", +"e89b9ff6": "errCounter()", +"e89bc86b": "getBooleanMapCount(string)", +"e89c9b5d": "doThrow(string)", +"e89cdff5": "setTeamName(uint256,string)", +"e89d0d17": "getTeamLeaders()", +"e89d7f23": "payDividend(uint256,uint256)", +"e89df228": "shippingService()", +"e89f0f40": "DTR()", +"e89f3477": "grip()", +"e89f38d4": "BonusToken()", +"e89f5329": "createDebt(uint256,address,uint256)", +"e89f7672": "fight(bytes32,bytes32,bytes32)", +"e89f98a2": "TokenContractChanged(address)", +"e8a01f11": "BagSold(uint256,uint256,uint256,uint256,address,address)", +"e8a0aed3": "createToken(string,string,uint8)", +"e8a0cf44": "getScannersIds()", +"e8a0d312": "issueIndividualTokens(address,uint256)", +"e8a0e3c9": "BigbomPrivateSaleList()", +"e8a12479": "CBCT()", +"e8a1c08f": "nibbleToChar(uint256)", +"e8a207ad": "freeTokensAvailable()", +"e8a21157": "setNonEtherController(address)", +"e8a21382": "calculateInstantBonusAmount(uint256,address)", +"e8a28d52": "changeAllowAllBurnTransfers(bool)", +"e8a2a5ba": "Resolved(address,uint256,uint256,bool)", +"e8a43960": "elixor()", +"e8a478ad": "round0Bonus()", +"e8a481bd": "edit(address,bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", +"e8a4b797": "isTokenApproved(address,uint256)", +"e8a5282d": "setConfig(bytes32)", +"e8a55471": "_transfer(address,uint40)", +"e8a61357": "testInternal(uint256)", +"e8a61cc8": "refundBuyer()", +"e8a62235": "storeAction(address)", +"e8a6d7dc": "START_RATE()", +"e8a71012": "switchCrowdSaleStage()", +"e8a7228b": "hasEnoughValidSignatures(bytes,uint8[],bytes32[],bytes32[])", +"e8a748e7": "whitelistOneAddress(address)", +"e8a7be57": "MRVToken(address,address)", +"e8a7e256": "ownerTopUp()", +"e8a9594f": "rateOfEmissionPerYear()", +"e8a96b46": "getHolder(uint256)", +"e8a97ea8": "StateChanged(uint8,uint8)", +"e8aa1f5e": "makeOwnerBitmapBit(address)", +"e8aa377b": "storeHarvestOperation(string,string,uint32,uint16,uint16,string)", +"e8aa58ce": "vaultToWallet(address,uint256)", +"e8aa6b6f": "TeamtokenRelease4()", +"e8aabf9c": "ownerTransferWeiSecondWallet(uint256)", +"e8aada0c": "ViewBet(address)", +"e8aadc3f": "locationId()", +"e8ab245b": "WarriorsAssignedToBattlefield(address,address,uint256)", +"e8ac0e76": "getPropose(address)", +"e8ac764b": "twoMillionFourHundredThousand()", +"e8aca46a": "addReferral(address)", +"e8aca672": "getNodalblockURL()", +"e8acee9e": "fundPreSale()", +"e8ad1015": "__FindProjects(string)", +"e8ad2369": "getCaseAtIndex(uint256)", +"e8ad6912": "setGasForCLOUD(uint256)", +"e8ad7bcc": "secondTTax()", +"e8adf589": "getRateScale()", +"e8ae7dd2": "getCCH_edit_22()", +"e8ae8c6e": "DescriptionInt()", +"e8af214a": "fundingRemainingAvailableInEth()", +"e8afedd9": "setCommissionTarget(address)", +"e8b0a262": "ICO2Period()", +"e8b13c44": "getChainyTimestamp(string)", +"e8b1d0f3": "relayCall(address,bytes4,bytes)", +"e8b1e825": "getTokenPriceInWeiAndPhaseIdxs()", +"e8b23632": "playerRefundAll()", +"e8b3891e": "userTransferUser(address)", +"e8b3ed65": "addDoc(string,string,string,string)", +"e8b49df2": "payWithEth(uint256,address)", +"e8b4c9d7": "OPEN_PACKAGE_PRICE()", +"e8b50802": "PRESALE_END()", +"e8b5b796": "transferownership(address)", +"e8b5e51f": "invest()", +"e8b611d6": "dailySupply()", +"e8b69081": "checkActionIsAuthorisedAndReset()", +"e8b6bbe4": "feeToSeconds(uint256)", +"e8b6fa80": "claim(int256,int256,int256,int256)", +"e8b9d536": "SingularityNetToken()", +"e8ba2fc9": "FundWallet(address,address)", +"e8ba6509": "isFinished(uint256)", +"e8ba854f": "updateWallets(address,address)", +"e8ba8f8b": "fixPlayerSurname(uint256,string)", +"e8bb7143": "removePackCategory(uint256,bytes4)", +"e8bba4f6": "getDepositedOf(address)", +"e8bc0d40": "activateNextRound()", +"e8bccab3": "Neglect(address,uint256,uint256,int256)", +"e8bd09ff": "GetPlayerNumber(uint8)", +"e8bd5cc4": "NTRYPerEther()", +"e8be2e8e": "NewsContractEntity()", +"e8be3853": "setOffchainPayment(address,bool)", +"e8be73dc": "BenkiICO(address)", +"e8beef5b": "fireEventLog3Anonym()", +"e8befc0d": "getDividends(bool,address)", +"e8bfe5b8": "landmarkPriceStepNumerator()", +"e8bfebec": "ISSUE_METHOD()", +"e8c0485f": "profile(string)", +"e8c09c0d": "verificationHoldersValueMap(address)", +"e8c0a0df": "totalDepositBalance()", +"e8c23649": "referralName(string)", +"e8c28358": "calculateDispensedTokensForGasPrice(uint256)", +"e8c2cb16": "equal(string,string,string)", +"e8c32d13": "DoacaoEvento()", +"e8c3a65f": "save1(address,bytes,string)", +"e8c3e34d": "GetProperty(bytes32,uint256,uint256)", +"e8c494f1": "calcPresaleTokenSupply()", +"e8c4d328": "airDropNumber()", +"e8c4fa04": "coinIssuedGemmyMusic()", +"e8c5ff96": "jackpotLarge()", +"e8c61c4e": "actionB(uint256)", +"e8c66cac": "fundingReserve()", +"e8c67216": "getRateLimit()", +"e8c6ed14": "niceGuy()", +"e8c78934": "disableReservePurchases(address,bool)", +"e8c7df8a": "admin_token_add(uint256)", +"e8c80880": "VestingAddressChanged(address,address)", +"e8c8a52a": "reinvestDivs(uint256)", +"e8c8bb52": "_getRegistry()", +"e8c93aa9": "createProductionUnit7()", +"e8c96256": "Lesson_2(address,uint256)", +"e8c9a3e5": "withdrawnTokens(address)", +"e8c9f9de": "LocalToken(uint256,uint256,string,string,string,address,address,address)", +"e8ca1609": "startNewPayoutPeriod()", +"e8ca3bbb": "auctionsContract()", +"e8cb635b": "checkRequestSignature(bytes,bytes,uint256,bytes)", +"e8cc00ad": "withdrawOwner()", +"e8cf0aca": "depositEthersFor(address)", +"e8cf56a9": "C2L()", +"e8cf86ff": "MyTestCoin()", +"e8cf958e": "setBwMarketValidCaller(address)", +"e8cfc40d": "EtherPrice(uint256,uint8)", +"e8d03e91": "deployBoard()", +"e8d07525": "getLockerAddr(uint256)", +"e8d0affb": "addOwner(address,bool,bytes)", +"e8d0ed31": "sendInvestor(address,uint256)", +"e8d11d9c": "DavidCoin()", +"e8d1891b": "removeOracle(address,uint256)", +"e8d199ec": "BetterBitcoin()", +"e8d1e961": "lockAccount(uint256)", +"e8d320e6": "coinBalanceOf(address,uint8)", +"e8d3280f": "decrement(address)", +"e8d34f5d": "ensureCollateralBalance(uint256)", +"e8d375fe": "week_in_blocs()", +"e8d3a5a9": "joinboard(string)", +"e8d3cad5": "getDepositsLength(address)", +"e8d47923": "fAdd(uint256,uint256)", +"e8d50403": "ChangeDates(uint256,uint256,uint256,uint256)", +"e8d59fae": "PROMO_TOKEN_AMOUNT()", +"e8d663a4": "requalify(address)", +"e8d6b5aa": "TORCToken()", +"e8d6f62d": "p1Of(uint256)", +"e8d70569": "setGameAddress(uint8,address)", +"e8d83383": "whitelistMaxContribAmount()", +"e8d88bd4": "Race()", +"e8d8c3a7": "decreaseApprovalAllArgs(address,uint256,address)", +"e8d9d76a": "WCMY()", +"e8dad6d3": "getOrganizerAddress(uint256)", +"e8dc800c": "setReadings(bytes32,uint256,bool)", +"e8dca673": "throwsWhenSaleIsNotTokenController()", +"e8dcd15f": "NeuralProtocol()", +"e8ddb731": "myshowindex(address)", +"e8ddf15a": "withdrawEthBalance()", +"e8de636c": "add(bytes20,address)", +"e8df0ca1": "checkRefundPollDate()", +"e8dfa50d": "addPigment(address,uint256,uint256,uint256,uint256)", +"e8e03280": "window0EndTime()", +"e8e09563": "PresaleToken(address,address)", +"e8e0d5bf": "getConversionInfo(string)", +"e8e44248": "transferMiner(address,uint256)", +"e8e5882e": "SmartpoolVersion(address[3])", +"e8e72f75": "ownerSetPriceOracle(uint256,address)", +"e8e7426e": "Presale(address)", +"e8e7c73d": "useMonthlyAccess()", +"e8e81fe4": "setTelegram(string)", +"e8e9eeae": "getPremiumCentsPricePer30Days()", +"e8ea0675": "redeemedEscrow(bytes32)", +"e8eb2284": "amountOf(uint256)", +"e8ebf3c5": "iii()", +"e8ecea05": "getSpecialNum()", +"e8ed024e": "LoopringToken(address)", +"e8ed1cdd": "getAccountQuantity()", +"e8edb2ff": "geneticallyEngineer(string)", +"e8edc816": "spender()", +"e8ee8b44": "MIS()", +"e8ee8c75": "deleteCandidateBySnapshotBlock(address,uint256)", +"e8eecf4c": "maxTxValue()", +"e8eed374": "hashTerms(string,string)", +"e8ef51db": "getCCH_edit_15()", +"e8efc1a0": "updatedValue(bytes32)", +"e8efe846": "blocksOwners(uint256)", +"e8f00990": "calcPlayerDivs(uint256)", +"e8f04e84": "disableLotteryGiveHunt()", +"e8f09e24": "getDisableBet(uint256)", +"e8f1736c": "TakeMoney()", +"e8f1bd8c": "getNeighbourhoodOf(uint256)", +"e8f1dc9a": "_unpackMakeData(uint256)", +"e8f35f2c": "updateUSeqvol()", +"e8f38323": "getJobHunterWithdrawalAmount()", +"e8f3cd59": "getFunderContributionClaimed(address)", +"e8f4bc12": "InitUpgradeCard()", +"e8f54364": "JJ(uint256,string,string)", +"e8f5cf36": "changeWCT2Controller(address)", +"e8f62764": "feesController()", +"e8f62f46": "someMethod2(uint256,uint256,uint256)", +"e8f64680": "purchaseFor(address,bytes32,uint256)", +"e8f6bc2e": "changeAccountLevelsAddr(address)", +"e8f72850": "interactWithXYZ()", +"e8f88890": "dev_inStream()", +"e8f8a1d2": "buyBuyerTokens()", +"e8f95666": "transferPreSigned(address,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"e8fa1d51": "handleCloseChannel(address,bytes32,uint256,address,uint256,address,uint256)", +"e8fac4cd": "transfer(address,address,address,address[],uint256,uint256)", +"e8faf89c": "ETHER_MAX_CONTRIB_USA()", +"e8fb02d2": "sellFeeMilliPercent()", +"e8fbc67d": "MultisigWallet(address[],uint256,uint256)", +"e8fc0780": "_malloc(uint256)", +"e8fc451a": "init(uint256,uint256,address,uint256,uint256,uint256,uint256)", +"e8fc9273": "verify(address,string)", +"e8fc9c10": "UnicornContract(address,address,address)", +"e8fcda45": "_set8()", +"e8fe6b66": "getCode(bytes32)", +"e8fe9473": "test_threeInvalidEqUint(int256)", +"e8ff269e": "setMaxAvatarNumber(uint8)", +"e900604d": "claimTokenOwnership(address)", +"e9007d4e": "settleGame(uint256,uint256,string,uint256)", +"e9013cf7": "getFreelancerInvoicesByStatus(address,address,uint8)", +"e9024691": "recoverPreSignedHash(address,bytes4,address,uint256,uint256,uint256)", +"e9024ff5": "modifyMessage(string)", +"e90352eb": "_transferCheck(address,address,uint256)", +"e90389bd": "setWaitingTimeBuffer(uint256)", +"e90459f8": "emitError(bytes32)", +"e906c804": "_distributeBridgeFee(uint256,bool,bool)", +"e906e664": "getx2Policy(address,uint256,uint256,uint256)", +"e90799d2": "unlock4Circulate(uint256)", +"e9083a41": "drainMe()", +"e9084739": "economyBoost(uint16,uint16)", +"e9085957": "RANGESTART_1()", +"e9087eb7": "canMove(address)", +"e908a6d6": "Initialize_PlayUnit(uint256,uint256,uint256)", +"e9092bca": "weeOneEthCanBuy()", +"e90956cf": "setCurator(address)", +"e909ebfa": "addDelegate(address,address)", +"e909f2cc": "updateCancelDistFlag()", +"e90a3cf2": "addressCashwolf()", +"e90ab7fe": "lunetReserve()", +"e90acd53": "bidder(bytes32)", +"e90bcb32": "senderToProxy(address)", +"e90cb9b9": "setBurnAddress(address,address)", +"e90d2120": "etcWallet()", +"e90dae86": "TokenAUC(uint256,string,uint8,string)", +"e90dd9e2": "tokenState()", +"e90e5453": "rand(uint256,uint256,uint256)", +"e90ecfce": "EvoToken(address)", +"e90f84bd": "getETHFromTokens(uint256)", +"e9105cf1": "unblockTokens()", +"e9108538": "mintSilcToken(address,uint256)", +"e91208ad": "galleryFour()", +"e9121758": "token_holders_array(uint256)", +"e9121b12": "transferAndApply(address,uint256)", +"e9126154": "returnLoan(uint256)", +"e912ae4f": "getLastPaidTransaction()", +"e9130d4a": "test_twoInvalidEqBytes()", +"e9140274": "stakeTAOContent(uint256,uint256,bytes8,uint256,string,string,string,string,uint256,address)", +"e914575b": "endPublicIcoForTesing()", +"e9149e34": "investedWei()", +"e914d828": "TimeMoneyToken()", +"e9156cfe": "getMutation(uint32)", +"e916d0f0": "doBalance(address)", +"e916d29e": "matchBytes32Prefix(bytes32,bytes)", +"e91710aa": "DogCoinCrowdsale(uint256,uint256,uint256,uint256,address)", +"e9171abb": "airdropRecipientCount()", +"e91723b2": "aggiungi_candidato(string)", +"e9177f1b": "HTCToken()", +"e917b027": "setProjectManager(address)", +"e917f82d": "OxyCoin()", +"e918268b": "changeDrawer(address)", +"e9187ef4": "refundAction(bytes32,uint256)", +"e9198076": "fillBuyOrderPartially(uint256,uint256,uint256)", +"e919ca10": "getMyDiscount()", +"e91a08a2": "grantedParsecCredits()", +"e91a68bf": "getAllRightLeg()", +"e91b3ac5": "getMutalbeInfo()", +"e91b6987": "addNewObj(address,uint32)", +"e91bb26e": "redeemEgg(address)", +"e91c3a3e": "getStatusInfo()", +"e91cc17c": "withdrawFunder(address)", +"e91ccdc0": "allFundingProcessed()", +"e91cd09d": "thisbalanceETH()", +"e91d1ea0": "downtime()", +"e91dcba1": "MDL()", +"e91df414": "Nurucoin()", +"e91df8da": "AuctionSoldOut(uint256)", +"e91e10af": "allocationFinished()", +"e91e13a9": "CHUNK_SIZE()", +"e91f9d96": "getNftsByOwner(address)", +"e91ff7ca": "STORAGE_WALLET()", +"e921528e": "evTransfer(address,uint256,address,address,uint256)", +"e921b4f8": "buyByAddress(address)", +"e922248e": "MinterFunc(address,uint256)", +"e92254ba": "finaliseFunding()", +"e922ee6f": "removeParent(address)", +"e9233a65": "getNameIds(uint256,uint256)", +"e92340b5": "ICO_BONUS_TIME_2()", +"e923c3d6": "_setUint(bytes4,uint256)", +"e923e707": "hardCapWei()", +"e9253156": "force_deduct_fees()", +"e92565be": "settrans(bool)", +"e9262dae": "changeMinApproval(uint8)", +"e9263f9d": "ifcoinToken()", +"e9266fca": "collectRobot(uint256,uint256,uint256,uint256,uint256)", +"e92704e8": "setGason(uint32,bool)", +"e927a8c0": "changeContracts(address,address,address)", +"e927ca04": "addVesting(address,address,address,string,uint256)", +"e927da3f": "buyPackWithKitty(uint256)", +"e927ea7a": "ballotVoteCount(uint32,uint32)", +"e927f1f9": "getLeaderBoardData(address)", +"e927fc5c": "creatorAddress()", +"e9288d72": "pushToBank(address)", +"e928ad47": "createEthBidAuction(uint256,uint256,uint16)", +"e9298b97": "changePermissions(address,uint8)", +"e92a5d74": "createTimeDecayingToken(uint256,uint256,uint256,uint256,uint256,string,uint8,string,uint8)", +"e92b6818": "CONTRIB_PERIOD1_STAKE()", +"e92b7f4b": "AddVoters(string)", +"e92ba335": "airdropCountLimit1()", +"e92bb686": "_CallAborted(address,bytes32,bytes18)", +"e92bf2a8": "saveData(uint256,bytes32,uint8,bytes32,bytes32,bytes32,address,address)", +"e92c02cf": "startOpenWindow(uint256,uint256)", +"e92d5178": "bankerBeginTime()", +"e92dfb23": "LimitBalance(uint256)", +"e92e4505": "test_9b_testGoodTransfer_thenInvalid()", +"e92e4d63": "setReservingStep(uint256)", +"e92e5c34": "getVoterCount(uint256)", +"e92e5f03": "PRESALE_TOKEN_SUPPLY_LIMIT()", +"e92f2904": "Compra()", +"e92f7447": "isDayThird()", +"e92f8cfc": "MIN_BUYBACK_VALUE()", +"e92f9c1d": "getWarriorsFromIndex(uint256,uint256)", +"e92fdeaa": "ethRec(uint256,uint256,uint256)", +"e930f06f": "setToSaleWallet(address)", +"e930f3a6": "ethContractBalance()", +"e93119d9": "balanceOf(address,address,uint256)", +"e931f1ba": "secondRoundMayEnd()", +"e931fa0c": "setMonsterGene(uint64,uint256)", +"e93239d3": "outputWalletAddress()", +"e9324444": "preSaleState()", +"e93314ab": "getS()", +"e9333fab": "set_admin(address)", +"e9339de5": "Moneda(address,address,address)", +"e933cfb0": "mintCard(uint256,address)", +"e933e6eb": "checkPriceCrowdsale(uint256,uint256)", +"e9347e31": "_sellKeys(uint256,uint256,bytes32)", +"e9348532": "kncRateBlocksTrade()", +"e934ab0c": "ActualCommitteeRoom()", +"e9353cb7": "createProductionUnit3Beta()", +"e9358b01": "newENS(address)", +"e9360096": "cancelCompetition(uint256)", +"e9361d34": "ethartRevenueReward()", +"e93680d5": "_my_transfer(address,address,uint8)", +"e936e878": "disburser()", +"e9377aca": "mtEndTime()", +"e937f689": "_getElement(string,uint256)", +"e938f121": "testFunction(address,uint256,bytes)", +"e9391db9": "getBenificiary()", +"e9395679": "uintToString(uint256)", +"e93a1906": "buyFeeMilliPercent()", +"e93ab977": "bids_ignored_refunded()", +"e93b9c89": "stepVestingPercent()", +"e93ba042": "distributePrices(uint256)", +"e93ba06f": "getWhitelistAt(uint256)", +"e93c5973": "UpdateRequiredSignatures(uint256)", +"e93c980d": "tokenUnit()", +"e93d3e5f": "setNextRoundFee(uint256)", +"e93e25fe": "zilleriumToken()", +"e93e40db": "offerCollectibleForSale(uint256,uint256,uint256)", +"e93e7b26": "Stage3Deadline()", +"e93f29bd": "_setPartitionControllers(bytes32,address[])", +"e93f3f8d": "setBuyPrice(uint256,uint256)", +"e93f57b9": "capAmount()", +"e9408491": "setInitialBal(uint256)", +"e94087d6": "joinAsBroker()", +"e941fa78": "withdrawFee()", +"e94200f1": "burnAllOwnerTokens()", +"e94233f6": "oraclizeGasCost()", +"e942b516": "set(string,string)", +"e942c564": "getWei(uint256)", +"e9433ab6": "endDonations()", +"e943cc01": "powerDayEndTime()", +"e944267c": "FourArt()", +"e9445d5a": "createAudit(uint256,uint256,uint256)", +"e94479a9": "MinterRemoved(address)", +"e944a6d7": "claimSpecialResource(uint256)", +"e944f52d": "addressToBytes(address,address,address)", +"e94559b1": "ETToken()", +"e945c391": "setEndTime(uint64)", +"e945e26c": "CCH_OLI_1()", +"e946115b": "flushVault(uint256,address)", +"e946ad4a": "getUpgradesOwned(address,uint256)", +"e947962b": "pushRefIncome(address)", +"e9482aa6": "UsingANormalStruct()", +"e9485982": "canBePurchasedByETH(uint16)", +"e949fba1": "_getPurchaseToken(address,uint256)", +"e94a4db1": "isSuitableGen(uint256,uint256)", +"e94acf0e": "TinyRouter(address)", +"e94aea8a": "lastStealBlockNumber()", +"e94b6aef": "getLayEggInfo(uint32)", +"e94bc926": "cancelVoteForCandidate(address,address,uint256)", +"e94c8dc0": "NXX()", +"e94d7af6": "getCountAllBuildings(uint256,bool)", +"e94dc568": "freeBalancesOf(address)", +"e94e4bf1": "maxDailyCap()", +"e94e80fa": "playerIndexToApproved(uint256)", +"e94e83d8": "Answer(string)", +"e94f1dc6": "setWhitelistInternal(address,address,uint256)", +"e95015b9": "spawnMonster(uint256,address)", +"e9506c73": "_investAsBonusProgram(address,uint256)", +"e9512fa4": "setVotingQuestions(string,string,string)", +"e9519a6b": "FirexToken()", +"e951c35b": "NewAppleToken()", +"e9523c97": "getAllAdmins()", +"e952f74f": "airdropCount()", +"e9540395": "getRewardDivisor()", +"e9546d08": "increaseK()", +"e95502fb": "lockedShares()", +"e9556430": "SECONDS_PER_MINUTE()", +"e9559803": "getShipById(uint256)", +"e955ee03": "revertNoncsallocation(address)", +"e9560b3b": "getParticipantBalance(address)", +"e95626c5": "Lizun()", +"e95715cb": "jackpotSend()", +"e9577a11": "getHistBtcRate(uint256)", +"e95823ad": "safe(bytes32)", +"e958d15f": "partnerMessagesCount(address,address)", +"e958d1ae": "TreeContract()", +"e9592a9f": "AuctionStarted(uint64,uint64,address)", +"e9596db3": "betInfo(bytes32)", +"e95a644f": "checkIn(uint256)", +"e95ac9f7": "LBToken(address,uint256)", +"e95af01b": "identify(address,address)", +"e95b2bb8": "Ethraffle_v2b()", +"e95b4aa8": "nameOf(address,address)", +"e95bcfb1": "UVDICO()", +"e95bd5f2": "testToData(bytes)", +"e95bee59": "checkFormat(string)", +"e95d0a59": "MarbleEarth(address,address)", +"e95d716c": "FEE_SELECT_MARGIN_SPLIT()", +"e95d74e0": "set_coin_minimum_trade(string,uint256)", +"e95db6f9": "buyKey()", +"e95f206e": "MIN_WEI_AMOUNT()", +"e95f2c7d": "getMaxLoanAmount(uint256)", +"e95f6414": "dayPotExpiration()", +"e95f72e3": "ROD()", +"e95fa798": "SellerCancelDisabled(bytes32)", +"e9600f12": "release(bytes16,address,address,uint256,uint16)", +"e960127e": "set2RoundTime(uint256)", +"e960b940": "DoubleSixToken()", +"e960bb48": "balanceOfLocked(address)", +"e9616fb0": "changeFreezingAgent(address,bool)", +"e962867d": "BillionsToken()", +"e9629d7f": "phase1Cap()", +"e96309e7": "gatherOldBalanceOf(address)", +"e9639c80": "releaseTheOriginal(uint256)", +"e963f3e8": "MAX_BUYIN_GAS_PRICE()", +"e9653482": "hasValidProfile(address)", +"e966668c": "advisorset()", +"e9668128": "isTransactionsAllowed()", +"e9677b6b": "safeExecuteOrder(address,uint256,uint256,bytes,int256)", +"e967a9b7": "dataSourceCallbackExtras(uint256,uint16)", +"e967bb18": "refundAllMoney()", +"e967e60c": "placeBid(string)", +"e968ab95": "enableTokenTransferability()", +"e968d087": "shrink128(uint256)", +"e968e1ec": "setPLATPrice(uint256)", +"e9698f62": "setBurnAmountApproval(address,address,uint256)", +"e969c871": "swapTokens(address[],uint256[])", +"e96a6b38": "getSignerFlagFor(address)", +"e96b462a": "isOwner(address,bytes32)", +"e96b5e13": "SERENITY()", +"e96b8aa6": "bitwordsWithdrawalAddress()", +"e96bf86d": "lastHour()", +"e96cd01c": "SoraToken()", +"e96d01d4": "setPlayerOverrideId(uint256,uint256)", +"e96d36ac": "communityAllocating()", +"e96d6e4f": "publicKeys()", +"e96da99e": "reply(bytes32,uint256)", +"e96e5950": "getEventHash()", +"e96fefec": "resetTransferToValues()", +"e9703701": "byteToUint(bytes1)", +"e970754b": "getTxs(uint256,uint256)", +"e970e86d": "testBlockNumber()", +"e9715de9": "referralBonusPercent()", +"e97193a6": "removeAuthor(address)", +"e971c252": "issue(address[],uint256[])", +"e972261d": "calculateProfit(uint256,uint256)", +"e9733b27": "checkStakeBalance()", +"e9734172": "createWagerAndDeposit(bytes32)", +"e9739db7": "getTokenRate(uint256)", +"e973b7ba": "node_height(uint256)", +"e973f2c4": "reinvest_color(uint256,uint256,uint256)", +"e9742d23": "createGun(uint256)", +"e9748e58": "renewalsCreditAffiliatesFor()", +"e974c000": "checkIsOnlyOwner(bytes32)", +"e97758a2": "thirdRewardPeriodEndBlock()", +"e977992d": "Doubler()", +"e9779b76": "depositOldTokens(address,uint256)", +"e977a11c": "wavesAssetId()", +"e977fa76": "_forceTransfer(address,address,uint256)", +"e9794dc1": "CreateHash(uint8,string)", +"e9799993": "Wafflecoin()", +"e979af97": "pushArray(bytes32,string)", +"e979bac1": "getCustomerBankRating(string)", +"e979fed6": "ownerstake()", +"e97a4779": "evaluateProposalPreCondition(uint256)", +"e97b2190": "add_wall(uint16)", +"e97b7689": "getTotalBuyers()", +"e97b97fe": "neumark()", +"e97cf883": "calculate(uint256,uint256,uint256)", +"e97cfab4": "withdrawDivs(uint256)", +"e97d87d5": "releaseStartTime()", +"e97db66e": "setJackpot()", +"e97dcb62": "enter()", +"e97e490c": "canuse(address)", +"e97e6dca": "applyPresale()", +"e97ed99c": "TurtleFarmer()", +"e97f6313": "token_airdrop_amount_each()", +"e97fe114": "tradeModifiers(address,address)", +"e98096fc": "numberOfNames()", +"e980c2e0": "littafiContentCommit(bytes32,string,string,string,string,bool)", +"e9813f9c": "_distinctOwners(address,address)", +"e981c803": "rejectPauseChange(bool)", +"e982d5a9": "transferOwnership1(address)", +"e9835ee1": "LogAgreementAmended(address,string)", +"e9841bd8": "certifyTradeAsCounterparty(bytes32,address)", +"e98444e8": "BIMI_DAO_31_a()", +"e984d794": "setRarity(uint256,uint256)", +"e984dd74": "ZenixSupply()", +"e985e367": "saleToken()", +"e985e9c5": "isApprovedForAll(address,address)", +"e9867fe7": "_splitElement(uint256)", +"e9874106": "pricePerTicket()", +"e98799e0": "Mejasa()", +"e987cc45": "getfrom(address)", +"e9884b44": "depositClient()", +"e9886064": "_sendPrimordialTokenAndRewardDev(uint256,address)", +"e988998a": "refreeze()", +"e9892821": "isSpendableFrozenCell(address,uint256)", +"e9893c67": "awardAmount()", +"e98a0de7": "setGitHub(string)", +"e98a1439": "priceOfMultiple(uint256[])", +"e98ae339": "cancelMarginCall(bytes32)", +"e98b1679": "set_pre_kyc_bonus_denominator(address,uint256)", +"e98b7f4d": "getKitty(uint256)", +"e98bf38e": "test_insert_zeroKey()", +"e98c365b": "totalMigratedOut()", +"e98c7608": "mod9710(bytes)", +"e98cab50": "burnIndexed(uint256)", +"e98cf987": "turnOnSale()", +"e98d3112": "OwnableWithDAO()", +"e98dcba2": "approveExchange(address,address,uint256)", +"e98df8bf": "registerMeeting(address,uint256)", +"e98e130c": "GetCandidatePrincipal(uint8)", +"e98e8a64": "getKeccak(bytes32)", +"e98ebdd5": "numResponses()", +"e98f402c": "getClassCheckOwner(uint64,address)", +"e98f5708": "Dgp(address)", +"e98fe5ce": "AgriChainType()", +"e9900714": "sendIBTCToken(address,uint256)", +"e991ae55": "valid_weights(int256[],uint256,uint256,uint256[])", +"e9922f12": "getCoinInfoFromId(uint16)", +"e992a041": "_setPendingImplementation(address)", +"e992ae5a": "INCXToken()", +"e992d8d8": "KNC()", +"e992f6cd": "pos(address[],uint256)", +"e99358a5": "TeamtokenRelease2()", +"e9938919": "EnterBetsForRaz(uint256,uint256[])", +"e9938e11": "getPricePerCoin(uint80)", +"e99392c0": "localsAvatar(bytes32,address,bytes32)", +"e993a9c0": "change_flag_hash(bytes32)", +"e993c056": "SaloniToken()", +"e9947583": "addAuditorToMultiRequestAssignment(uint256,address)", +"e995064e": "changeEmployee2(address)", +"e995194f": "transfer(address,uint256,uint256,int256)", +"e99543aa": "Trash(uint256)", +"e9958314": "getRequest(uint32)", +"e9959105": "setMintHelper(address,int256)", +"e99667ad": "OwnershipTransfer(string,address,address)", +"e99671ad": "movePermission(address)", +"e996ee88": "getItemStage(uint256,bytes32)", +"e9970b6c": "isLessThan(uint256,uint256)", +"e99718d8": "addressOf(address,bytes32)", +"e9986f90": "activeStarGenome(address)", +"e9989220": "viewShareholderListing(uint256)", +"e998d2fa": "revokeVerification(address)", +"e998db2a": "directMessage(uint8,string)", +"e99a7a72": "createCeleb(string,uint256,address,uint256[6],uint256[6])", +"e99a7dca": "lastCampaignID()", +"e99b9ab7": "getProposalCreatedOn(address,uint256)", +"e99d2866": "setSeller(address)", +"e99d2db4": "universalToken()", +"e99d7333": "BlitzCrypto()", +"e99ebee2": "dist_multiple_airdrop(address[],uint256)", +"e99ed199": "getAddressLiquidatePool()", +"e9a05055": "newMerchant(address,string)", +"e9a0dd77": "cancelBid(bytes32,int32,bool)", +"e9a158a6": "currentETHPrice()", +"e9a1e689": "PreICO(uint256,uint256,uint256,uint256,address,address)", +"e9a241cc": "checkRoundsNumberToRun()", +"e9a24e24": "userlength()", +"e9a3773c": "setBotContract(address)", +"e9a3f454": "setAgriChainSeal(string)", +"e9a51c0d": "call1(uint256)", +"e9a5605d": "WheelOfFortune(uint256)", +"e9a58c40": "fun(uint256,uint256)", +"e9a59b32": "participantRoundAmount(address,address,uint256)", +"e9a5c776": "THETOKEN()", +"e9a62ba6": "MEGAMALLCOIN()", +"e9a6cce4": "getClaimKeysCount()", +"e9a6fdc3": "addressAt(bytes,uint256)", +"e9a765eb": "checkICOStatus()", +"e9a76ff7": "getInputName(uint256,uint256)", +"e9a78a1e": "decodedNonce()", +"e9a8bae6": "getArray(string)", +"e9a909a2": "setOraclizeAddrResolverI(address)", +"e9a9c1b4": "get_party1_balance()", +"e9a9c50c": "redeemTokens()", +"e9aa80b1": "contributorsAddress()", +"e9ab04a8": "hatchEgg(uint256,string)", +"e9ab1bd7": "True()", +"e9ab77e5": "getTimes()", +"e9ac31f2": "msgdata()", +"e9ac5918": "whatDidJasonSay()", +"e9ad1b38": "findAddressByEndpoint(string,int256)", +"e9ad72d7": "_canLotteryFree(address)", +"e9aeb932": "dUpgradeToPremium(bytes32)", +"e9afa7a1": "signedApprove(address,address,uint256,uint256,uint256,bytes,address)", +"e9afad38": "getTotalVesting()", +"e9b00581": "LogStartWeek(string)", +"e9b04e69": "addSourceForBudget(uint256,uint256,string,bool)", +"e9b07bbf": "transfer(address,uint256,bytes,bytes)", +"e9b0c0e1": "adminContractSecurity(address,bool,bool,bool)", +"e9b18084": "Diary(address,bytes)", +"e9b1f1ce": "updateRandomSource(uint256)", +"e9b23b8b": "updateLeaderboard(address,address)", +"e9b29a9d": "setAPI(address)", +"e9b2f0ad": "unfreezeTokens(address,uint256)", +"e9b32a3f": "HOUSE_EDGE_DIVISOR()", +"e9b3fd39": "TradeBox()", +"e9b48288": "insertMessage(string,bool)", +"e9b4a028": "payAirdrop(address[],uint256)", +"e9b54840": "viewReferral(address,uint256)", +"e9b58225": "extDestroyBot(uint256)", +"e9b5a2f7": "firstWithdraw()", +"e9b62f13": "lastBlock_f4()", +"e9b6953b": "team1Token()", +"e9b85cf4": "SimpleOwnedStorage(string)", +"e9b93569": "OwnerGetFee()", +"e9b991cc": "refundPct()", +"e9ba267e": "distributeETHP(address[])", +"e9ba2e9b": "Storage(uint256)", +"e9ba77fb": "receiveToken()", +"e9ba8698": "TheBillionCoinCash()", +"e9bacc1a": "freeBalances(address)", +"e9bb4aac": "WaltonTokenLocker(string,address,address,uint256)", +"e9bb84c2": "transferEth(address,uint256)", +"e9bbc19e": "Example3(string)", +"e9bc13b8": "_createCanvasInternal(address)", +"e9bc63f7": "getSellInfo(uint256)", +"e9bc9598": "totaltransactions()", +"e9bce432": "yetAnotherTransferTo(address,uint256)", +"e9bd48b8": "VLTToken()", +"e9bd97dc": "getData_24()", +"e9bdab6a": "tips(address,bytes32)", +"e9bec833": "setCrowdsalePause(bool)", +"e9bf42b8": "existenceName(address)", +"e9c003d2": "indexOf(bytes32[],bytes32)", +"e9c1a9c4": "ProcessGame(address,address,bool,uint256)", +"e9c24166": "executeRequest(bytes32)", +"e9c26893": "setValidDurationData(uint256)", +"e9c2fbd5": "Banned(string)", +"e9c31315": "checkBetParity(uint8,address,bytes32,bytes32)", +"e9c33249": "ReceivedBTC(address,string,uint256,string)", +"e9c33dfe": "getHouseEdgeFee(uint256,uint256)", +"e9c35ea8": "universalCall(string)", +"e9c4a3ac": "dispatch()", +"e9c54384": "doesContractImplementInterface(address,bytes4)", +"e9c63b9c": "requestPeerBalance()", +"e9c64ad7": "evRecord(address,uint256,string)", +"e9c6c176": "addBlock(uint256,uint256,bytes32)", +"e9c6ed11": "withdrawNomins(uint256)", +"e9c714f2": "_acceptAdmin()", +"e9c771f2": "KBItoken()", +"e9c801e1": "refundInternal(uint256)", +"e9c9262e": "_productExists(uint256)", +"e9c93ce7": "cbtFundDeposit()", +"e9c9db5c": "ICOcontroller()", +"e9c9f4e0": "_finalizeFailure(uint32,string)", +"e9ca9b2a": "phase1StartingAt()", +"e9cac389": "onlyWhitelistedCanDoThis()", +"e9cafac2": "deleteArray()", +"e9cb364f": "lastTip(address,bytes32)", +"e9cbd678": "_resetBalanceDivis(address)", +"e9cddb1d": "EARLY_BET_INCENTIVE_COMMISSION()", +"e9ceef50": "createCanvas()", +"e9cf287a": "sellerGuaranteeEther()", +"e9cfa745": "calculateNetworkTokenBonusAmount(uint256,uint256,uint256,uint256,uint256)", +"e9cfb399": "SoupToken(string,string)", +"e9d16224": "maxFundedValue()", +"e9d1c598": "isEligibleForAirdrop(address)", +"e9d1d700": "assertFunction()", +"e9d1e422": "JZCoin()", +"e9d36c56": "transferredAmountToReceive(uint256)", +"e9d41d48": "getAuthorizationDataSource()", +"e9d56d2e": "releaseDividendsRightsForce(address,uint256)", +"e9d5d43b": "getWinnerByDrawBlockNumber(uint256)", +"e9d724e5": "changePreIcoEndDate(uint256)", +"e9d7d79a": "SRNT_per_ETH()", +"e9d7f309": "addRemainingTokens()", +"e9d862b0": "_updateTokensAvailable(uint256)", +"e9d8d3d7": "MAX_CONTRIBUTION_DURATION()", +"e9d8dbfd": "isService(address)", +"e9d979dd": "CioCoinERC21Token(uint256,string,string,uint256)", +"e9d9c4a9": "devTokenTimelock()", +"e9d9d5ec": "releaseBBT(address,uint256)", +"e9da12ab": "ATRToken()", +"e9db5d79": "Steak()", +"e9db5f5a": "addSpecialAccount(address)", +"e9db787b": "cancelStack(bytes32)", +"e9dc0614": "vote(bytes)", +"e9dc2e49": "createItem(uint256,uint256,uint256,uint256,uint32)", +"e9dc438e": "confirmAllSells()", +"e9dd7b6c": "getUID(uint256)", +"e9de432f": "testGasPrice()", +"e9de5c0f": "gen(bytes32,uint256)", +"e9de78fd": "TestRobotarCrowdsale()", +"e9deb98c": "presaleConcluded()", +"e9dff847": "withdrawMatingRequest(uint256)", +"e9e04195": "GEEKSID()", +"e9e041f3": "getTotalWeightedContribution()", +"e9e22362": "setWinPercent(uint256[])", +"e9e2990e": "bankManager()", +"e9e2c786": "returnMessage(uint256)", +"e9e30746": "withdrawBankroll(address,uint256)", +"e9e30997": "awardMiniGameAirdrop()", +"e9e32bfb": "firstLevelPrice()", +"e9e3b1cf": "checkAuthenticity(string)", +"e9e43eef": "getLLV_edit_10()", +"e9e44349": "hashLicenseTerms(bytes32,bytes32)", +"e9e48842": "token_unlock_time()", +"e9e48880": "BOUNTY_AMOUNT()", +"e9e55c71": "PRESALE_LEVEL_1()", +"e9e61da5": "updatePolicy(bytes32,address,uint256,uint256,uint256,uint256,bool)", +"e9e69a48": "getCurrentPageSize()", +"e9e7a667": "get_stake(bytes32)", +"e9e7e908": "BlockOfLifeToken(uint256,string,string)", +"e9e972d9": "fileLink()", +"e9e98e76": "WSKYCoin()", +"e9e99d81": "getChannelFeed(address,uint256,uint256,uint256)", +"e9e9b5bc": "setIntF1F2(int256,int256)", +"e9ea666b": "test_remove_singleNode()", +"e9eaa69b": "sweepToOwner()", +"e9ebeafe": "greet(bytes32)", +"e9ec42e6": "getConsistency(uint256)", +"e9ec9e8b": "renounceBurner()", +"e9ecc0cf": "getInvestorsTokens(address)", +"e9ecd32b": "RajTest()", +"e9ed8281": "getDiniRequest(uint256)", +"e9ed8667": "balanceLocks(address)", +"e9ed9b64": "setProposer(address,bool)", +"e9edd759": "CCoinToken()", +"e9edf4cd": "hardwareWallet()", +"e9ee6eeb": "transferAdmin(address,address)", +"e9ef5318": "_isValidLandID(uint8)", +"e9efdd6b": "getByFrom(uint256,uint256)", +"e9f0509f": "Commit(uint256,address,bytes32)", +"e9f0ee56": "addPrice(uint256)", +"e9f12ed3": "itemsByName(string)", +"e9f1c4c3": "f2(uint256,uint256)", +"e9f21537": "setUint(bytes32,bytes32,uint256,bool)", +"e9f29b7b": "setTokenUriPref(string)", +"e9f2dbfb": "makeCommitment(uint256,bytes32,address,address)", +"e9f3b9ee": "triggerSteal(uint32,uint256)", +"e9f4043f": "buyTokens(address,uint8)", +"e9f50b02": "_transferHelper(address,address,uint256)", +"e9f58a52": "rotate_left(uint256,uint256)", +"e9f6af47": "getZethrTokenBankroll(uint256)", +"e9f6bd0b": "numberOfDays()", +"e9f702f2": "createDiamond(string,address,string,string,string,string)", +"e9f84c5b": "ClearToken()", +"e9f88ca5": "ICHAINToken()", +"e9f89121": "getWeeklyJackpot(uint32)", +"e9f8cd70": "addTokenPair(address,address,uint256,uint256,uint256,uint256)", +"e9f90fe6": "listPokemons(address)", +"e9f998ce": "checkInventory(uint256)", +"e9f9d8e2": "unidentifyParticipant(address)", +"e9fa6277": "updateMasks(uint256,uint256,uint256,uint256)", +"e9fa65aa": "updateNextStealTime(uint32)", +"e9fad716": "itemPrice(address,address,uint256,uint256)", +"e9fad8ee": "exit()", +"e9fb078e": "setFreeTime(uint256,uint256)", +"e9fca283": "buy(uint256,bytes32)", +"e9fcc787": "buyCoinsAtICO()", +"e9fd3434": "Cedex()", +"e9fd4e1f": "setAllowCnsContract(bytes32,address,bytes32,bool)", +"e9fd74dc": "create(string,string,uint8,uint256,address,string,address)", +"e9fe799e": "registrantRemove(address)", +"e9fee16f": "refundAll(uint256)", +"e9ffd6de": "allBlockCoordinates(uint256)", +"e9ffdf28": "Erc20Dist()", +"ea00a289": "getStateofContractString()", +"ea00cdb2": "DrazenToken()", +"ea00fad4": "callSender(address,bytes4)", +"ea011db4": "isCustomerHasKYCfromWL(address)", +"ea014645": "PTYC(uint256,string,string)", +"ea020f7b": "WindToken()", +"ea0217cf": "setVotingPeriod(uint256)", +"ea02db0f": "communityPoolAddress()", +"ea03918c": "AGC(uint256,string,string)", +"ea03c115": "getFunctionType()", +"ea045f34": "CROSS_RESERVE_FTX()", +"ea048256": "PROCOIN()", +"ea049958": "stakeScale(address,uint256)", +"ea05667a": "maximumPurchaseFraction()", +"ea0570e0": "convertToBytes32(uint256)", +"ea0599c7": "buyIt()", +"ea05cd01": "addCarProduct(string,uint32,uint32,uint32,uint32,uint32,uint256,uint256)", +"ea061e77": "changeNeat(address)", +"ea06ad02": "postBuyTokens()", +"ea071ac0": "depositShares()", +"ea083b86": "contract_enabled()", +"ea08bb89": "creatureCosts(uint8)", +"ea08ec2c": "accountModifiers(address)", +"ea0930f2": "_currentTime()", +"ea0a5237": "announce(string)", +"ea0a73d2": "TokenGMCT(uint256,string,string)", +"ea0a93e2": "miningLeader()", +"ea0aee14": "BuyStockRocketEvent(address,uint32,uint32,address)", +"ea0d0015": "_bill_all_participants()", +"ea0d1027": "calculateSumToWithdraw()", +"ea0d1702": "verifyEscrowCustomer(uint256,address)", +"ea0d18b0": "CurrenXToken()", +"ea0d5dcd": "getUserStatus(address)", +"ea0d6ad2": "setErrorROFR(bytes)", +"ea0d8da4": "amountReserved()", +"ea0d98aa": "changeParticipants(uint256)", +"ea0f5449": "Transaction(bytes32,address,address,uint256,uint256)", +"ea107240": "deleteRegionData(uint256)", +"ea10b18f": "withdrawMainDivi()", +"ea10d246": "get_orders_sell_amount(address)", +"ea110eda": "setOraclizeGasLimit(uint256,uint256)", +"ea112b6c": "updateCrowdsaleAddress(address)", +"ea116243": "_setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", +"ea118590": "vote_proposed_address(string)", +"ea11e00e": "LogMatchingEnabled(bool)", +"ea1325be": "createTokenUri(uint8,uint8,uint64,uint64)", +"ea135eeb": "computeSha3(uint256[16],uint256[8])", +"ea14457e": "emitRecovery(address,address,address)", +"ea149ab5": "bank2Val()", +"ea14bc11": "box1Star5()", +"ea15f262": "ETHEREAL()", +"ea1642f8": "getManyBalances(address[])", +"ea16c148": "isIcoAgent(address)", +"ea16cee5": "migratestate()", +"ea177073": "nextMaxPlay()", +"ea18e3d5": "getFreeSword()", +"ea19efb5": "startVoting(bytes32)", +"ea1a20d5": "shareholdersWallet()", +"ea1a9537": "IOBSTestToken()", +"ea1b28e0": "maxStake()", +"ea1bbe35": "getIndex(string)", +"ea1bf386": "getNextSellerBOTdata(uint256)", +"ea1c0379": "maximumAllocationPerParticipant()", +"ea1c1690": "timestampToDateTime(uint256)", +"ea1c41be": "RxEALSaleContract()", +"ea1cf495": "ImagodeiToken()", +"ea1d64b8": "startPostIco()", +"ea1da8b9": "updatePresaleMinWei(uint256)", +"ea1df439": "timestampFirst()", +"ea1e4c2d": "Transaction2()", +"ea1e572b": "addOrderBasicFields(uint256,address,uint256,uint256,bytes32)", +"ea1e74ef": "withdrawEtherToIfPossible(address,uint256)", +"ea1eaecb": "buyMinersWithGem(uint64)", +"ea1ecff4": "sendByTranches(bytes32[],address,uint256[],bytes)", +"ea1f2954": "transferSnowflakeBalance(string,uint256)", +"ea1f4082": "RGXToken(string,string,uint256,uint256,uint8)", +"ea1f9b3e": "NoxonInit()", +"ea2028b7": "changeSaleHardcap(uint256)", +"ea212b1e": "withdrawRequest(address,bytes32)", +"ea217d4d": "logSaleStart(uint256,uint256)", +"ea21c6be": "find_and_or_register_user(address,address)", +"ea21d12d": "deleteUncompletableRequest(bytes32)", +"ea222fde": "getAmbientLightControlLimits(bytes32)", +"ea22ee15": "LOG_EmergencyWithdrawalVote(address,bool)", +"ea23c473": "scheduleUpgrade(address,string,string,bytes32,uint256)", +"ea2470ab": "priceLocked()", +"ea251c2f": "owner_BurnUpdateTokenFrom(address,uint256)", +"ea25415a": "getAcceptedGames()", +"ea25f24a": "TokenCreation(uint256,uint256,address)", +"ea26b575": "Eth_Collected()", +"ea273277": "setAyantDroitEconomique_Compte_8(uint256)", +"ea274a6b": "processBuy(address,uint256)", +"ea27a881": "getMinimumEndowment(uint256,uint256,uint256,uint256)", +"ea28baee": "getRealWorldPlayerRosterIndex(uint128)", +"ea295ec2": "calcRevenue(address)", +"ea29a210": "TokenVesting(address,uint256,uint256,uint256)", +"ea2a31fc": "NMK()", +"ea2a33fc": "getInitialREPSupply()", +"ea2a9599": "callThisToStart()", +"ea2bc862": "optionDescription(uint256,uint256)", +"ea2c23da": "createAccounts(uint256)", +"ea2c2f36": "doubleBonus(address)", +"ea2c4357": "newTokenUnlockPercent(uint256)", +"ea2c69d1": "Marijuaneum()", +"ea2ce651": "isTokenUpgrader()", +"ea2d4cf8": "__DeployerFunctions(address,address,uint256)", +"ea2da598": "NLToken()", +"ea2e34f2": "isTransformAgent()", +"ea2ea847": "testChallengeFinalize()", +"ea2f28d3": "countWeeks()", +"ea2f43c3": "currentIncreaseWithdrawalTeamBallot()", +"ea2f9ebe": "retrievePoolFee(uint256)", +"ea2fe1a2": "nay()", +"ea3015b8": "burnUnusedTokens()", +"ea304511": "changeParameters(uint256[],uint256[],uint256[],uint256[])", +"ea30e2e6": "XiaoMuMuToken()", +"ea316027": "creditWalletUserLMNO(address,uint256)", +"ea317f6d": "setdissolveprice(uint256)", +"ea31b291": "getCreatorByTrackId(uint256)", +"ea31c53c": "_openGameLoop()", +"ea31ccb6": "rICO(address,address,address)", +"ea31d56b": "mintTrusted(address,uint256)", +"ea326431": "Neulaut()", +"ea32a8f4": "addshares(uint256,address)", +"ea32c95e": "EMPTY_PUBLIC_KEY_ID()", +"ea3367ae": "divMasterAmt()", +"ea337cdb": "batchChangeHoldPeriod(uint256)", +"ea33dd24": "developer_increase_prices(uint256,uint256)", +"ea341309": "catsRemainingToAssign()", +"ea348da6": "FuckERsToken33()", +"ea352634": "closeChannel(bytes32,uint256,address,uint256,address,uint256,bytes,bytes)", +"ea359082": "End4()", +"ea35df16": "unlockBlock()", +"ea35e805": "calculateWinner()", +"ea364a9a": "addSingleApprovedAddress(address,address,uint8)", +"ea36ad91": "transferERCXTokenInitiation(string,address,address,uint256)", +"ea383176": "month30Allocated()", +"ea391420": "endIcoRound()", +"ea3b3a91": "recoverAddress(bytes32,uint256[3])", +"ea3b9ba1": "enter(uint256,address)", +"ea3bd5df": "purchase(uint256,uint256,address)", +"ea3c281a": "removePartner(address)", +"ea3d2827": "selectWinner(string)", +"ea3d4109": "rateIsStale(bytes4)", +"ea3d508a": "selector()", +"ea3d7e2c": "getOraclizeGas()", +"ea3d895f": "vestingBonusMultiplier()", +"ea3ebae6": "getConfigBool(bytes32)", +"ea3f190e": "devFee2(uint256)", +"ea3f6ce0": "joinGroupAndInvest(uint32,address)", +"ea4061cc": "calculateToFund(address,uint256)", +"ea4099e4": "QuantumPigBlockchain()", +"ea40c9e7": "ARCHETYPALXToken()", +"ea414b28": "setTaxWallet(address)", +"ea41bca5": "doStake(address,uint256,uint256,address,address)", +"ea42418b": "settlementContract()", +"ea428bad": "ACLYDcidTOKEN()", +"ea4354dc": "totalDividendWinners()", +"ea43671d": "watchPercent()", +"ea439e10": "transactionRawToBytes(uint256,address,address,uint256,bool,bool)", +"ea43b069": "PRIVATE_SALE_TOTAL()", +"ea43b79f": "unhaltDirectTrade()", +"ea448370": "setUserEmail(string)", +"ea454da8": "WonderDogToken(uint256,string,uint8,string)", +"ea46193e": "getEtherBalance()", +"ea46336b": "ShiversToken(uint256,string,uint8,string)", +"ea4634a7": "MarginlessCrowdsale(address)", +"ea46d7b9": "TACOS()", +"ea470d33": "voteForAnswer(uint256,address,bool)", +"ea4796b9": "revertIfReturnLessThanMinAndDie()", +"ea47cb24": "ownerAccount()", +"ea486cb1": "moderList()", +"ea490b84": "ethereumForkArbiter()", +"ea49ac03": "allScamsForSale()", +"ea4a294f": "addCard(uint256,uint256)", +"ea4a6aad": "LogQuantity(uint256,string)", +"ea4af029": "ConferenceCertification()", +"ea4afc54": "reserves(address,address)", +"ea4b466b": "admin_deposit(int256,int256)", +"ea4b9dce": "getLastBetNumber()", +"ea4ba8eb": "getOutcome(bytes)", +"ea4c4388": "createCredit(uint256,address,uint256)", +"ea4cc26d": "CryptoPayment()", +"ea4cc7eb": "divvy(uint256,address,uint256)", +"ea4ce239": "totalSale()", +"ea4dfce9": "benAddress()", +"ea4e6ded": "getListOfSupportedTokens()", +"ea4ef51f": "relockPart(address,uint256,uint256,uint256,int256)", +"ea4efa5d": "ganeshrajToken()", +"ea4f0882": "clearVolumeDiscounts()", +"ea503429": "privateSaleWallet()", +"ea5136a1": "adminUpdateSettings(address,address)", +"ea515c98": "pgoUnlockedLiquidityWallet()", +"ea51b3d6": "allocateOwnership(address)", +"ea51c343": "verifyLoanOffering(address[9],uint256[7],uint32[4],bytes32,bytes)", +"ea520b18": "totalDrop()", +"ea5213e1": "removeExternalContributor(address)", +"ea5366c1": "set_contract2address(address,address)", +"ea56a44d": "changeUpgradeMaster(address)", +"ea57712a": "SetFreeMKI(uint256)", +"ea57d818": "EmilToken()", +"ea5815f5": "getDatesForUser(address)", +"ea584ee6": "changeFreeZombiewCount(uint16)", +"ea58c644": "EUSD()", +"ea58c955": "powerDayRate()", +"ea58ca03": "DATE_01_JUN_2018()", +"ea593025": "giveKarma(uint256,string,string)", +"ea595672": "_transfer(address,address,uint32)", +"ea596a34": "EBIT()", +"ea598cb0": "wrap(uint256)", +"ea599cb3": "totalAward()", +"ea59a4e8": "GetPlayer_FromAddr(address,uint8)", +"ea5a13aa": "coindropsTokens()", +"ea5a22eb": "mintax()", +"ea5b2ae2": "checkIsWinner(uint256)", +"ea5b561f": "guardian1Vote()", +"ea5c204b": "MecStandardToken(uint256,string,uint8,string)", +"ea5c3204": "foundersAmount()", +"ea5ea470": "payFunding(uint256)", +"ea60e4ab": "Yusuf()", +"ea60e79b": "preICOLimit()", +"ea612545": "setBorrowAgreement(uint256,uint256,string)", +"ea62f24c": "unlockTeamAdvisorsPartnersTokens()", +"ea636aca": "setNinjaContract(address)", +"ea63ceb6": "allowAccount(address,bool)", +"ea64ad37": "totalUserTransfered()", +"ea64aee5": "GameBidAccepted(address,uint256,uint256,uint256,bytes,bool)", +"ea64faca": "init(string,string,address,uint256,uint256,address,uint256,address)", +"ea650378": "getTokenIDRelateWithTx(bytes32)", +"ea650c7d": "tokenToExchangeSwapOutput(uint256,uint256,uint256,uint256,address)", +"ea663631": "openTimerElapsed()", +"ea66543f": "isEmployee(address)", +"ea669a8a": "setTusdRegistry(address)", +"ea6723cd": "usdMnr()", +"ea680080": "firstAuctionsReferrer()", +"ea681932": "weiWantedOf()", +"ea6825aa": "VieToken()", +"ea6955e5": "ownerWithdrawUnspentCredits()", +"ea6a49ea": "setBetPrices(uint256[])", +"ea6b1377": "MAXTOKENSOLD()", +"ea6b8243": "switchOwnerTo(address)", +"ea6be96f": "estimateTokens(uint256)", +"ea6c1258": "setFSTKCentral(address)", +"ea6c9750": "transferToInvester()", +"ea6ca182": "addAgingTimesForPool(address,uint256)", +"ea6cc6e9": "delayedTokenAllocator()", +"ea6dee80": "addKey(address,address)", +"ea6ef2fe": "teamShare()", +"ea6f0725": "initCompoundContract(address,uint256,uint256,uint256)", +"ea6f1c4a": "sponsorLevel()", +"ea6f67e1": "SingularityTes26()", +"ea6f7f3e": "addAllValidShaHashes()", +"ea7000d6": "buyTokens(bytes32)", +"ea70b4af": "pendingCount()", +"ea70bdad": "attackTileForExistingUser(uint16,uint256,bool,bool)", +"ea726acb": "getReferrerAddr(address)", +"ea727ba2": "changeInterest(uint256[])", +"ea72d9de": "SENS_PER_ETH_BASE_RATE()", +"ea737b54": "getCompte_42()", +"ea74329c": "tokensRemainingPreCrowd()", +"ea74838a": "setControllers(address[])", +"ea7553f0": "vault_wallet()", +"ea75d311": "isBuyOrder(bytes32)", +"ea760a6b": "kkICOTest80()", +"ea760df8": "partner1_vows()", +"ea769e97": "changeTradeState(bool)", +"ea76a36f": "Mahjongcoin()", +"ea770a4c": "getNewCoinsIssued(uint256,uint256,uint256)", +"ea773d9e": "blink()", +"ea77d01a": "buyWarriorChest(uint256)", +"ea77ffd8": "consumeDiscount(uint8,uint8)", +"ea780bf2": "overloadedMethod(address,uint256,string)", +"ea782500": "curr_number()", +"ea7858f5": "player_cancelGame(uint256)", +"ea7873db": "addCompany()", +"ea794ef4": "constructWeaponTokenIdForWinner(uint256,uint256)", +"ea79dd79": "equal(bytes32,bytes32,string)", +"ea79f33d": "uniquenessIndex()", +"ea7a0142": "setRemark1(string)", +"ea7a7184": "testGetBalanceDb()", +"ea7b5df3": "pecunioTokenBalance()", +"ea7c2115": "lookupKittyDetails2(uint256)", +"ea7cabdd": "checkAllOwner(uint256[],address)", +"ea7ceaf7": "stopRefunds()", +"ea7f4d27": "right13(uint256)", +"ea7f537a": "percentOfGoal()", +"ea7f7a59": "finalizeLottery(uint256)", +"ea7f9244": "getRank08()", +"ea801802": "AviaC01n()", +"ea8037d6": "batchEscrowToTeamContract(address,uint32[])", +"ea8118ba": "Trustcoin(address)", +"ea8269f4": "balanceAddress(address,address)", +"ea82fa2a": "VestingScheduleConfirmed(address,address,uint256,uint256,uint256,uint256)", +"ea830cde": "getSendIndex(uint256)", +"ea83add4": "DoTrade(address,address,uint256,address,uint256,address)", +"ea842e65": "deleteTeam(uint256)", +"ea8466dc": "LBQ(uint256,string,string)", +"ea84a6cd": "memberShare(uint256)", +"ea84bfee": "update(address,bool)", +"ea851885": "buyStake(bool)", +"ea85b367": "create(address,int256,address,address)", +"ea85b581": "Deadpool2RottenorFresh()", +"ea85c7ac": "getOriginalSpinnerPrice(uint256)", +"ea863e62": "JorgeToken()", +"ea87003c": "setRenamingCosts(uint256)", +"ea871246": "LOW_RANGE_RATE()", +"ea87152b": "register(string,uint256)", +"ea879634": "getCode()", +"ea87a0aa": "updateItemsPrices(uint256[],uint256[])", +"ea88246d": "Transction()", +"ea885b55": "UNDERWAY_STATUS()", +"ea89c6bc": "TrackChain()", +"ea8a0a23": "PlotTerrainUpdate(uint256,uint256,address,uint256,bytes32)", +"ea8a1af0": "cancel()", +"ea8a4305": "Zigicoin()", +"ea8a66c7": "absoluteMinTimeLock()", +"ea8ab096": "XEV()", +"ea8acb67": "_transferToContract(address,address,uint256)", +"ea8af87d": "sumPreICO1()", +"ea8b03c2": "innerGuess(uint256,uint256,uint256,address)", +"ea8b3e9f": "setFlag(string,uint256)", +"ea8b4627": "playerLastScoredGame(address)", +"ea8b5ca3": "isContractExpired()", +"ea8b73df": "createEthCommunityTokenAndMint(string,uint8,string,uint8,uint256)", +"ea8c1516": "isBlockedAccount(address)", +"ea8d103f": "transferFundToAccount(address)", +"ea8dc8d0": "buyTicket(uint256,uint8)", +"ea8e84a1": "RecoveryEvent(string,address)", +"ea8eb4be": "blockingDuration()", +"ea8eee87": "updatePrivateExhangeRate(uint256)", +"ea8ef515": "airdropSameAmount(address[],uint256)", +"ea8ef6be": "getBranch()", +"ea8f6691": "mintSpecificCard(address,uint8,uint256)", +"ea903c78": "setEndStage3(uint256)", +"ea905308": "LogSaleCapReached(uint256)", +"ea90ad7e": "FAUT()", +"ea91ec69": "TokensReleased(uint256,uint256,uint256)", +"ea91f8c7": "showMyTokenBalance()", +"ea920b2b": "betSummary()", +"ea92c2d0": "usd2wei(uint256)", +"ea92dd1d": "withdaw(uint256)", +"ea932954": "withdraw_token(address,uint256)", +"ea9362de": "maxMintingTime()", +"ea93a324": "getCreateShareTokenCounter()", +"ea941538": "TradeExecute(address,address,uint256,address,uint256,address)", +"ea94c696": "distributeAmount(address[],uint256)", +"ea94eaa2": "CreateTokenByAtes(address,uint256,string)", +"ea95e4d8": "BreezeCoinICO()", +"ea961d78": "decreaseTokensMulti(address[],address,uint256[])", +"ea963a21": "ReconCongress(uint256,uint256,int256)", +"ea9707a3": "getCaptainIndexToCount(uint32)", +"ea9746a2": "FNTCrowdsale(uint256,uint256,uint256,uint256,uint256,uint256,address,uint256,address,address)", +"ea983f7f": "Alfacoin()", +"ea985057": "BountiesMinted(address,address,uint256,uint256)", +"ea98847b": "withdraw2()", +"ea988ebd": "mine1000(uint256)", +"ea98de9f": "runDividendPayment()", +"ea98e540": "proxyTransferFromToICAPWithReference(address,bytes32,uint256,string)", +"ea98fcf9": "tokenForBounty()", +"ea9960d8": "participate(bytes32[],bytes32[])", +"ea996c9c": "approvedRewardSources(address)", +"ea99e689": "withdrawFeeRate()", +"ea9a3eb5": "AFWToken()", +"ea9ac537": "emitExchangeFeeUpdated(uint256)", +"ea9ae72e": "setPosTokens(uint256)", +"ea9b4be5": "Rearden()", +"ea9b6025": "burnTimeChange()", +"ea9c2859": "CurrentGoldPercentIncrease()", +"ea9c3bb3": "ico2_startdate()", +"ea9c8e63": "addSmartContracts(address[])", +"ea9ce8fd": "redeemToken(bytes)", +"ea9e107a": "acceptRegistrarTransfer(bytes32,address,uint256)", +"ea9e372f": "withdrawImpl(address,address)", +"ea9eb855": "setWLMTPrice(uint256)", +"ea9f0c4c": "Partial20Send()", +"ea9f4968": "withinLimit(uint256)", +"ea9fa768": "newWeiController(address,address,uint256,bool)", +"eaa0e760": "automaticWithdrawLoop(uint256,uint256)", +"eaa1f9fe": "reqisterListening(address)", +"eaa26f0f": "withdrawal_delay()", +"eaa2b2f6": "kill(string)", +"eaa2f447": "BelottoCoin(address)", +"eaa37394": "create(bytes,bytes32,bool,bool,bool,bool,bool)", +"eaa382c2": "isMintingManager(address)", +"eaa40283": "getNewsContractAddress()", +"eaa4077a": "SetICOPhase(address,uint256,uint256,uint256,uint256,uint256)", +"eaa42a15": "_setSnapshotStakeAmount(uint256,address,address,uint256)", +"eaa47de2": "RickAndMortyShrimper()", +"eaa4d4c2": "tokenallowance(address,address)", +"eaa59c74": "rejectShipping(uint256,string)", +"eaa5dd76": "set_prod(uint256,uint256,string,string)", +"eaa61dc2": "changeLicenseTerms(bytes32,bytes32,bool,uint256,bool,uint256)", +"eaa61e91": "BagpackicoToken()", +"eaa643d5": "StandingOrder(address,address,uint256,uint256,uint256,string)", +"eaa8e6d8": "LifeFactor_iii()", +"eaa968cc": "closeBet()", +"eaa9b9a7": "timestamp_ack()", +"eaaad8e9": "masterKeys(address)", +"eaabd05e": "setTokenSwarmHash(address,bytes32)", +"eaac77a7": "priceTokenWeiPreICO()", +"eaac77ea": "supply_cap()", +"eaacc753": "verifyHolder(address,string)", +"eaae46e5": "clearClaims(uint32)", +"eaae7b7e": "sendable(address,uint256)", +"eaaf2489": "_registerContributors(uint256,address)", +"eaaf88c1": "setTeleportContractAddress(address)", +"eaaff394": "getListing(uint64)", +"eab07d42": "GetDayCount(uint256)", +"eab15085": "setData_9(string)", +"eab184b8": "JLCToken()", +"eab228b9": "PRE_ICO_TIER_LAST()", +"eab23779": "validateAndGetTransferFee(address,address,address,uint256)", +"eab27a7c": "getMigrateInReporterValue()", +"eab2d378": "setPauseMode(bool)", +"eab4fb18": "THIRD_PARTY_LOCKUP()", +"eab5cd84": "createHONtokens(address)", +"eab65fb2": "EmpAgreements(address)", +"eab88624": "lockMoney(address,uint256,uint256)", +"eab8d67b": "GetPlayerAt(uint256)", +"eab9eb2d": "sellGrapes()", +"eabbcb4b": "startIco(uint256,uint256,uint256,uint256)", +"eabc8b8e": "canBeBidden(uint256)", +"eabd11af": "RandomNumGenerated(uint64)", +"eabd5dd6": "superman()", +"eabd94ba": "tryUnlock()", +"eabd9e60": "BlackNWhite()", +"eabdd572": "withdrawDAI(address,uint256)", +"eabe09ad": "addr1()", +"eabe7d91": "redeemAllowed(address,address,uint256)", +"eabf1ce3": "Approved(address,address,uint256,string)", +"eabf4240": "mintableTokenAddress()", +"eabffab6": "VestingScheduleRegistered(address,address,uint256,uint256,uint256,uint256)", +"eac037b2": "tierBudget()", +"eac046ce": "AFFBToken()", +"eac116c4": "createKingdom(string,address,address,address,address)", +"eac12cae": "stage1Tokens()", +"eac1e58f": "PRICE_BTCS()", +"eac24932": "setEarlyParicipantWhitelist(address,bool)", +"eac257dc": "StandardTokenImpl()", +"eac2f8d9": "MultiOwnable(address)", +"eac34569": "redeemLottery(uint256)", +"eac38f75": "_rotateRight(bytes32)", +"eac3e799": "target1()", +"eac449d9": "revoke(address,uint256)", +"eac471a0": "cycleLength()", +"eac472bf": "p_setDevPercent(uint256,uint256)", +"eac48278": "mintToFounders()", +"eac50c47": "setOnSale(uint256,bool,uint256)", +"eac533e1": "privateSell2Token()", +"eac5426f": "setOwnTheDayContract(address)", +"eac58572": "transferDuringIntialOffer(address,uint256)", +"eac5a89d": "checkWhitelisted(bytes32,bytes)", +"eac5ab43": "verifyModule(address,bool)", +"eac60b27": "AddTag(address,string)", +"eac66cd8": "getNumberContracts()", +"eac80b2d": "changeVariables(uint256,uint256)", +"eac8221e": "previousRoundsCount()", +"eac8f5b8": "getAsset(uint256)", +"eac9d94c": "averageGen0SalePrice()", +"eaca7a0f": "setBaseTokens(address,address)", +"eacb05d8": "Total_ICOSupply()", +"eacb6c08": "addressToSubscriberCount(address)", +"eacba6c7": "setFounderUser(address)", +"eacbc236": "emitTransferToICAP(address,address,bytes32,uint256,string)", +"eacbe9ca": "removeDeal(bytes16)", +"eacc25e7": "Team_Wallet()", +"eacc501a": "setTransferFeeReceiver(address,address)", +"eacc5b3b": "safeSend(address,uint256,uint256)", +"eaccb2e8": "transferOperationsFunction(address)", +"eacccaf0": "setReward(address,uint256)", +"eacd2141": "ReasignTokens(int256,int256)", +"eacd2ff3": "addCar(string,address,uint256,uint256,uint256,bool)", +"eacde2cb": "tokenIdByIndex(uint256)", +"eace4827": "player_make_bet(uint8)", +"eaced5b7": "setSoldTokens(uint256)", +"eacf7d8a": "MAX_EXPIRE_DELAY()", +"eacfb78a": "getServerName(uint256)", +"eacfc0ae": "Authorized()", +"ead0327d": "getNickName(address)", +"ead04e44": "addressIsSplitter(address)", +"ead0f75a": "capFinalized()", +"ead17f58": "bonusWindow3EndTime()", +"ead1ed5b": "registerPayment(address,uint256,uint256)", +"ead2a439": "getUniqueAddressByIndex(uint256,address)", +"ead2bfdc": "getGamePrize(uint256)", +"ead2fba4": "setApprove(address,address,address,address,uint256)", +"ead3a1de": "QYQ(uint256,string,string,address)", +"ead3c2cf": "multiMint(int256,address[],uint256[])", +"ead490ad": "recoverLeftoversICO()", +"ead491ac": "getMarketDataByTokenIdx(uint256)", +"ead4c32c": "dividendCalculation(uint256)", +"ead4faaf": "Starmid(uint256,string,string,uint8)", +"ead50da3": "frequency()", +"ead5d359": "withdraw(address,uint256,bool)", +"ead710c4": "greet(string)", +"ead81e86": "addCourse(uint256,uint256,string,string,string)", +"ead956c1": "_orderTokens(address,uint256,uint256)", +"eada8645": "GetSchool(uint256)", +"eadb2481": "TransfersEnabled()", +"eadb6e84": "startRitual()", +"eadb6fa9": "deleteAccountsInBulk(address[])", +"eadb80b8": "ownerOfChild(address,uint256)", +"eadc56d2": "betting(uint256)", +"eadcbf39": "MFTcreator()", +"eadd2f91": "distributionTwo(address)", +"eadd94ec": "usdRaised()", +"eadd9c8d": "CabChain()", +"eadddb3c": "getRoomCount()", +"eaddf568": "WhitelistAddressRemoved(address,address)", +"eaddf7b9": "getNextImageId()", +"eadf1f39": "lastBlockRewarded()", +"eadf4672": "checkScope(address,address)", +"eadf6258": "updateRound()", +"eadf9760": "setUint(bytes32,string,uint256)", +"eae00565": "getVotesResult()", +"eae19df4": "tokenReceived()", +"eae3d479": "createItem(uint256,uint256,uint256,uint256)", +"eae445ed": "masternodeInfo(uint256)", +"eae45561": "setWhitelistedBatch(address[])", +"eae4c19f": "deployedAt()", +"eae4e5ce": "getPersonalAirdropAmount(address,address)", +"eae5a62d": "getProposedOwner()", +"eae6754a": "totalEthDeposited()", +"eae70d5e": "setprize(address,uint256)", +"eae7236f": "transferBack(uint256)", +"eae81c37": "getDeployedGames()", +"eae8675d": "getCompanyToken(uint256)", +"eae8a3d6": "setMigrate(address)", +"eae8cf88": "Zitron()", +"eae903e3": "CreatePayroll(address)", +"eae9dbec": "RESERVED_BUSINESS_GROUP()", +"eaea25ec": "blockSubsidy(uint256)", +"eaeb83a2": "User_4()", +"eaec3fc8": "addCantonEmployee(address)", +"eaec75aa": "finalizeBuyback()", +"eaecfca7": "changeBackend(address)", +"eaed2210": "TransactionCancelled(address,uint256,string,address)", +"eaefea72": "addStringTag(bytes32,bytes32)", +"eaf03fc5": "withdrawFromFeeBalance()", +"eaf0ded9": "presale_price_in_wei()", +"eaf16303": "DYC(uint256,string,string)", +"eaf18c45": "setTTMTokenAddress(address)", +"eaf214ea": "changeTxnTax(uint256)", +"eaf2402d": "_getStartIndex(uint64)", +"eaf2a5ef": "itemNum()", +"eaf39a14": "setCustomBonus(uint256)", +"eaf4170c": "implementsSaleClockAuctionListener()", +"eaf4181a": "stopPortalGunAndRick()", +"eaf4438f": "SuperEdge()", +"eaf44931": "TokenReturned(address,uint256)", +"eaf49a82": "numAnimalsXType()", +"eaf4b6df": "allocate3ProjectToken()", +"eaf5815a": "recoverAddr(bytes32,bytes)", +"eaf59375": "returnUnsoldSafe()", +"eaf626c2": "Set(bytes32,address,address,uint256)", +"eaf6d212": "getCertificateSince()", +"eaf7e325": "getNumItems()", +"eaf82213": "getContributionsForAddress(address)", +"eaf8294b": "fundTransfer(uint256)", +"eaf86db3": "isSellingState()", +"eaf8b774": "getAllbetByNum(int8,int8)", +"eaf9144a": "addWhitelister(address)", +"eaf97475": "disableAutoReinvest()", +"eaf98d23": "FEE_PERCENT()", +"eaf994b2": "mintReputation(uint256,address,address)", +"eaf9d194": "updateNameAndSymbol(string,string)", +"eafac339": "ICOendtime()", +"eafb2b7a": "setMembershipType(address,uint256)", +"eafb704f": "majorEventFunc(uint256,bytes32,bytes32)", +"eafc99a7": "frenzyContract()", +"eafde28c": "unwrapEth()", +"eafe5eec": "joinGameWithBalance(uint256)", +"eaff425a": "MIN_JURORS()", +"eaff4b37": "FundsWithdrawn(address,uint256)", +"eaffb3f9": "rebond(uint256)", +"eaffd429": "getOrganisations()", +"eb0030b3": "Paydata(address,uint256,bytes,uint256)", +"eb009642": "mapInvestors(address)", +"eb00f20e": "utilityAccount()", +"eb0166d9": "AccountBalance(string,string,uint256,string,string,uint256,uint256)", +"eb01d83b": "getBidAmount()", +"eb01f42d": "KOIOSTokenPreSale(address,uint256,uint256,uint256,uint256,address)", +"eb0207e3": "hPayMultiSig()", +"eb02c301": "getPosition(uint256)", +"eb03085b": "set_bonus_received()", +"eb0331d5": "destroyAccount()", +"eb03791b": "BastetToken()", +"eb03db73": "suicideFunds(address)", +"eb03e351": "purchased_snt(address)", +"eb03fb71": "winningValue()", +"eb045789": "ChannelSeries(address)", +"eb04c36c": "fundingRaised()", +"eb04df1d": "setRNGCallbackGasConfig(uint256,uint256)", +"eb053fad": "calc(bytes4,bytes32,uint256,address,bytes24)", +"eb05920e": "func_2(string)", +"eb05bfc0": "disableSaleOwner(address)", +"eb0616e5": "gimmePizza()", +"eb068fe5": "F0001Token()", +"eb06980f": "userAtIndex(uint256)", +"eb06e65e": "allowanceFromProxy(address,address,address)", +"eb06ec32": "rewardTaskCompletion(uint256,address)", +"eb08aa3b": "preSaleAddress()", +"eb08b304": "changeMeatProvider(address)", +"eb08dbfc": "emitBurned(address,uint256)", +"eb09ad46": "EthernautsExplore()", +"eb09b5bc": "FUNCToken(uint256,string,string)", +"eb0a70c1": "hasVersion(string)", +"eb0bfa38": "setRegionPrice(uint16,uint256)", +"eb0c9e5a": "verifySignature(address,uint256,uint8,bytes32,bytes32)", +"eb0db6ac": "setChemistryAddress(address)", +"eb0e9240": "checkNumber(uint256)", +"eb0eea61": "Securities_4()", +"eb0f2100": "sweep(uint256,address,uint256,uint8[],bytes32[],bytes32[])", +"eb0f46cc": "revokeAccessMint(address,address)", +"eb0f4b33": "numOwnershipStatuses()", +"eb0f5186": "_determineDefence(uint256)", +"eb0fb0a3": "setTokenToOwner(uint256,address,bool)", +"eb1098b8": "packLimit()", +"eb10b4bd": "getSettingDeprecation(uint256)", +"eb11dd7b": "squirrelReq()", +"eb121e2f": "update(uint256,uint256[101][])", +"eb1257c5": "create(int256,int256)", +"eb12d61e": "addSigner(address)", +"eb12fd82": "setRates(address[],address,uint256[])", +"eb12fef5": "nAddressLog()", +"eb1301a2": "addAddressToUncappedAddresses(address)", +"eb142e36": "_setUserInfo(address,uint64,uint256,address)", +"eb14367d": "layEgg(uint64)", +"eb14b353": "setGenesis(address)", +"eb14f53e": "batchTransferEther(address[],uint256[])", +"eb15d21b": "QiToken()", +"eb1635ed": "getMintingPrice(uint256)", +"eb18747a": "getGoldStatusCode(address)", +"eb18ebdf": "product4()", +"eb18fbe7": "setPreIcoEnd(uint256)", +"eb195635": "IQT_DECIMALS()", +"eb1ab91b": "AtomicSwap(address,uint256,bytes32,uint256)", +"eb1bb9d9": "hybridizationListSize()", +"eb1c6e6b": "getRiskLimits()", +"eb1cae39": "EvNewPrice(uint256,uint256)", +"eb1cfa82": "setMaxDrops(uint256)", +"eb1d380e": "callContractFunctionByAddress(address,string,address,address,uint256,uint256,bool,string,bytes32)", +"eb1d74c8": "UpdatedBonusAccount(address)", +"eb1de3e5": "ICDStopTime()", +"eb1e2cd9": "getPlayerAccountBalance(address)", +"eb1ea5be": "clearTracks()", +"eb1ebd93": "BLS_TOTAL_CAP()", +"eb1edd61": "FEE_ADDRESS()", +"eb1f9c78": "HasDelegateAuthority()", +"eb1fa690": "queryVestingRemain(uint256,uint256)", +"eb1ff845": "changeId(uint256,uint256,uint256)", +"eb222098": "ProGenTech()", +"eb229f1e": "totalSupplyFromInventory()", +"eb230b2d": "bobClaimsDeposit(bytes32,uint256,bytes32,bytes20,address,address)", +"eb239d9a": "timeAdjustNeg()", +"eb245d91": "custodianTransfer(address,address)", +"eb24ffdd": "getCountriesData(uint256[])", +"eb26df0a": "updateDiscounts(uint256[],uint256[])", +"eb28615e": "createCommunityToken(string,uint8,string,uint8)", +"eb28d249": "setMissions(uint256,uint16)", +"eb28ddcf": "_isTAOSignatureAddressValid(address,address,address,uint256)", +"eb290e12": "Mimicoin(uint256,string,string)", +"eb295b27": "getChannelId(address)", +"eb29d9ea": "transferWithEther(address,uint256)", +"eb2a783e": "canBuyExistentToken(uint256)", +"eb2a7c4a": "freeLottery(uint256)", +"eb2b381a": "toDecimals(uint256)", +"eb2b6e95": "PUNDI()", +"eb2bab77": "increasePot()", +"eb2bdbab": "getBUU(bytes32,uint256)", +"eb2bef47": "BetterAuction(address,address,address,uint256,uint256)", +"eb2c0223": "upgradeContract(address)", +"eb2c118a": "ExtTokenPurchase(address,address,uint256,uint256,uint256)", +"eb2c6a19": "setInvestorWhitelist(address,bool)", +"eb2c8408": "setOrganizationDescription(string)", +"eb2c87a4": "partner2_vows()", +"eb2cf098": "get_data_item()", +"eb2f3038": "buyout(address,uint256)", +"eb2f4817": "requestAccess()", +"eb2f8696": "_getCurrentSecret()", +"eb2ff2d2": "softCapPreSale()", +"eb3087bf": "buyFci(address,uint256)", +"eb30db7b": "trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,string)", +"eb30f57d": "maxEthToRaise()", +"eb31f3d0": "Zoltan()", +"eb321173": "claimStake()", +"eb32cf9b": "saleExchangeRate2()", +"eb338f4e": "raiseMaxNumInterests(uint256)", +"eb343301": "registerCertWithID(bytes32,bytes,bytes32,uint256,bytes32)", +"eb34967a": "gameGeneration()", +"eb34c173": "firstAuctionsStartDate()", +"eb34fa12": "CurrentTLSNProof(address,string)", +"eb357e99": "payment_time()", +"eb35a849": "getSignerby()", +"eb36622d": "readBytes32(bytes32)", +"eb36d549": "WINR()", +"eb36f8e8": "stringToBytes64(string)", +"eb3721be": "getMarketOrder(uint256)", +"eb37df4f": "getGiftsByTemplateId(uint256)", +"eb37ec99": "seasonTopSalesRemain(uint16)", +"eb381429": "mint(int256,uint256,bytes32)", +"eb38615b": "setLiveTx(address)", +"eb39bc90": "setPropertyColors(uint16,uint256[5])", +"eb39f443": "startMintingDate()", +"eb3a2345": "setFunding(bool)", +"eb3a733f": "responseOptions(uint256)", +"eb3a867b": "LogVote(bytes32,bool,address)", +"eb3a88dc": "lockupTokens(address,uint256)", +"eb3b0ab3": "setFeeLocked(bool)", +"eb3b41be": "OrderFulfilled(uint256,uint256)", +"eb3b6891": "throwsWhenTransferingDuringSale()", +"eb3beb29": "silo()", +"eb3c8d7d": "changeMaximumValueWithoutProofOfAddress(uint256)", +"eb3cd55c": "setEveryBidFee(uint256)", +"eb3d032d": "FAPFundDeposit4()", +"eb3de344": "whitelistInvestor(address,string,string)", +"eb3f1b61": "allocateAngelWheelFinanceToken(address[],uint256[])", +"eb3f2427": "plainPay()", +"eb3fa926": "manager_()", +"eb3fee82": "setCompte_16(string)", +"eb40a9c8": "setRecommenderAllow()", +"eb41fbca": "changeTargets(uint256,uint256)", +"eb42b0cb": "payBeneficiaries()", +"eb4435a3": "Github()", +"eb4439fb": "enableVoting()", +"eb446ad8": "WHITELIST_SUPPLIER()", +"eb4475a1": "reducerunmoney(address,uint256)", +"eb44bb04": "frozenPool()", +"eb44dd5d": "preSale5Finished()", +"eb44fdd3": "getMarket(uint256)", +"eb455dc6": "sendBitcoin(string,uint256)", +"eb464316": "TOKENSALE_BLACKLIST()", +"eb46a11a": "setInvestorId(address,bytes32)", +"eb470ebf": "getTimeStamp(address)", +"eb473fc7": "alreadyAvailedOffer(address,address)", +"eb49168f": "getIntervals(bytes32,uint256)", +"eb496a80": "exploitMe(bytes8)", +"eb4999f4": "ticket1price()", +"eb4a2935": "getScribes()", +"eb4b41b2": "disableAmbassadorMode()", +"eb4b8091": "payWinners(address[20],uint256[20])", +"eb4be616": "CanBaoToken()", +"eb4c5593": "FREEZE_END()", +"eb4c5ab9": "createShapeShiftConversionPost(string,string)", +"eb4c9ae7": "claimUpdateToken()", +"eb4d0e32": "redemptionFund()", +"eb4dd8f2": "confirm(address)", +"eb4defcb": "returnCoupon(address[2],uint256[7],uint8,bytes32[2])", +"eb4df824": "getOwnItemCount(address)", +"eb4e64d6": "amendAgreement(string)", +"eb4eecec": "altarFund()", +"eb4f16b5": "addStake(uint256)", +"eb4f17e7": "saleProceedsEtherAllowStale(uint256)", +"eb4f54b2": "TokenRUSD(uint256,string,uint8,string)", +"eb4fe500": "logoVote()", +"eb502d45": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32)", +"eb5068f2": "exitWallet()", +"eb50849e": "setCanAcceptTokens(address,address,bool)", +"eb508932": "lastPayouts(uint256)", +"eb51e2e4": "_popularitySetting(uint256,uint8)", +"eb51e575": "getNextPrizePool()", +"eb5230d7": "ETHERFUNDME_FEE()", +"eb52835b": "nextShareTime()", +"eb52e404": "adminTrade(uint256[8],address[4],uint8[2],bytes32[4])", +"eb531996": "getConversation(address,address,uint32)", +"eb53367a": "delABaddress(string)", +"eb533750": "extLockNinja(uint256,uint16)", +"eb5392ff": "Leonardo()", +"eb53a9a3": "getInitializeNumTicksValue()", +"eb53d273": "getServerNb()", +"eb55b2a3": "replaySweep(address[],address)", +"eb56105d": "marketSize()", +"eb5625d9": "safeApprove(address,address,uint256)", +"eb5653d7": "tokenIdToApproved(uint256)", +"eb570b05": "currentSalePriceInWei()", +"eb57d309": "TenantTerminateMisrep(string)", +"eb581c8f": "ScudoCoin()", +"eb58705b": "_performTransferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"eb5904c0": "setProfitDistributionContract(address)", +"eb59ec82": "setLastMint(address,uint256)", +"eb5a458e": "unregisterByList(address[])", +"eb5a662e": "getAllowance(address)", +"eb5a7033": "getPrefixedHash(address)", +"eb5ae7ad": "set_stop(bool)", +"eb5b135b": "tFinalized()", +"eb5b62b4": "BOPToken(address,uint256)", +"eb5ba3b4": "polyTokenAddress()", +"eb5ba56e": "creator_tablets_count(address)", +"eb5baebf": "MAX_SUPPLY_DECIMAL()", +"eb5bbef8": "withdrawInternal(uint256,bool)", +"eb5bdda0": "allocateAdvisorTokens(address,uint256,uint64,uint64)", +"eb5ce181": "Sample()", +"eb5dd1e3": "shouldPass()", +"eb5dd94f": "updateController(bytes32,address)", +"eb5ea1c0": "RemovePoolCoOwner(string,address)", +"eb5edde3": "bonusPreICO()", +"eb5f2cf8": "InsertCard(uint32,uint32,uint8,uint16,uint16,uint16,uint16,uint32[])", +"eb60082b": "profitsSendable()", +"eb601c70": "Vogeldubastardtoken()", +"eb605e9f": "hasPlayerWagered(address)", +"eb60764f": "getDayCount()", +"eb60c5d7": "DadsToken()", +"eb60e2c7": "setCountPlayersInPosition(uint256)", +"eb614fc7": "locked_allocation()", +"eb6157f7": "Abloxx()", +"eb6192a9": "getMTUBal(address)", +"eb62a013": "Offer(address,address,bytes32,uint256,uint256,uint128,uint256)", +"eb62df61": "acceptOffer()", +"eb639fd0": "luckyPot()", +"eb63e140": "getBuyPriceAfterTax()", +"eb63eadd": "setValue(uint256,uint256,uint256)", +"eb6443a3": "getIntelsByProvider(address)", +"eb64922b": "sendTeamTokens(address)", +"eb64d3e0": "TokenDrain(address,address,uint256)", +"eb64d5ce": "getUnitsStealingCapacity(address,uint256,uint256)", +"eb65a2c7": "crownDecimals()", +"eb663cf2": "LOOMIA_REMAINDER()", +"eb665994": "_0xBitcoinToken()", +"eb6779d4": "test_oneFalseAssert()", +"eb67cee8": "contractSize(address)", +"eb680744": "nextCheckpoint()", +"eb6855e3": "BossToken()", +"eb685867": "withdrawForFourYear()", +"eb685c47": "setTokenPrice(uint256,uint256)", +"eb68b4c7": "sellAura(uint256)", +"eb68ce95": "processRegisterUser(address,address,address)", +"eb6a145b": "extractPartsFromGene(uint256)", +"eb6b192f": "ownerByAddress(address)", +"eb6bbd78": "getUserImages(address)", +"eb6bce5e": "makeBet(uint256,uint256,uint256,uint256,uint256,bytes32,bytes32,address)", +"eb6c4bc8": "monsterIdToGeneration(uint256)", +"eb6d509e": "Test(uint8)", +"eb6d9fb5": "constructOwned()", +"eb6dc7c4": "processBurn(address,uint256)", +"eb6ecc03": "triggerTokenFallbackIfNeeded(address,address,uint256)", +"eb6ed29a": "setCanGetMoneyBack(bool)", +"eb6f80f1": "setPreferredSaleTLYperETH(uint256)", +"eb700331": "getLockTokenSupply()", +"eb70095d": "showVault()", +"eb701349": "updateHpbNode(address,bytes32,bytes32,bytes32,bytes32,bytes32,bytes32)", +"eb70696e": "YiWenTest2(uint256,string,string,uint256)", +"eb7085cb": "teamReserveTokens()", +"eb70bc86": "BountyFulfilled(uint256,address,uint256)", +"eb70e13e": "_unpackStrengthValue(uint256)", +"eb70e498": "observer()", +"eb712a48": "etherTransfer(uint256,address[])", +"eb71b7e4": "prepayProposal(address)", +"eb727714": "trustNet()", +"eb73900b": "Whitelist(address)", +"eb7402f5": "multiAccessHasConfirmed(bytes32,address)", +"eb7492d1": "testTotalSupply()", +"eb74fa0b": "BCAClubCoin(uint256,string,string)", +"eb7550d8": "manualFinishGame(uint256)", +"eb75c410": "getOffer(address)", +"eb75dc03": "TOKEN_PRESALE_CAP()", +"eb76174e": "calcProfitInvestorForRead(address,uint256)", +"eb76607d": "creationCap()", +"eb7698e2": "RaffleBitcoinBook(string,uint256)", +"eb770d0c": "setEntryFee(uint256)", +"eb780d3c": "SMILO_FOUNDATION_AMOUNT()", +"eb782d8c": "ContentSeries(address)", +"eb78a26d": "blackFundsWallet()", +"eb78a2af": "checkrespond(uint256,address)", +"eb794dd7": "addBlack(address)", +"eb795549": "safeTransfer(address,uint256,bytes)", +"eb799177": "gasOraclize()", +"eb79ec7c": "withdrawStocks()", +"eb7a10b1": "test_36_assertGasUsage2000Boards()", +"eb7a6471": "getPersonalAirdrop(address,address)", +"eb7a7241": "last_mint()", +"eb7b7006": "getRefundInfo(address)", +"eb7bb9fb": "CrowdsaleHardCapReached(uint256)", +"eb7bdc37": "withdrawSfowns(address)", +"eb7c244d": "amount5kUsdInCents()", +"eb7c6525": "ZbzStandardToken(uint256,string,uint8,string)", +"eb7c6f72": "step6()", +"eb7cdb56": "rankDown(uint256,uint256)", +"eb7db21b": "flip32(bytes32)", +"eb7ea41b": "showLastGlobalAuditTime()", +"eb7f3905": "tradeWithTips(uint256[10],address[4],uint256[10],bytes32[4])", +"eb7f4c0d": "CrowdsalePorto(address,address)", +"eb7fabd7": "getMax(uint64[])", +"eb800846": "setLLV_edit_18(string)", +"eb807339": "getRiskId(uint256)", +"eb80b3d1": "raceDistCon()", +"eb810864": "addTokensMulti(address[],address,uint256[])", +"eb8136f3": "stockTokens()", +"eb81e95a": "controllerBurn(address,bytes32,uint256)", +"eb8222eb": "spendMoney()", +"eb823572": "ProfitContainerAdapter(address,address,address)", +"eb8266b5": "addNumberToDynamicBytes(uint256)", +"eb829aef": "MPTToken(address,address,uint256,string,uint8,string)", +"eb83e2b5": "receiveApproval(address,uint32,address,bytes)", +"eb83f015": "castleContract()", +"eb845c17": "gen0AuctionDuration()", +"eb846c6f": "ReferrerReward(address,uint256)", +"eb854131": "mbtcToUsd(uint256)", +"eb8571c8": "trans(address,address,uint256)", +"eb85c61e": "GUIDEToken()", +"eb85d999": "IVE()", +"eb869b8b": "Scheduled(uint256,uint256)", +"eb87073a": "verifyImages(bytes32,uint256,uint8,uint256,bool)", +"eb87ec01": "newStatus(address)", +"eb880380": "checkCooSeed(uint32)", +"eb886568": "signatureCheckerFreezed()", +"eb88d688": "createCommitment(uint256)", +"eb88e84d": "LatiumSeller()", +"eb89022e": "endDate1()", +"eb8ac921": "test(uint256,uint256)", +"eb8b12d4": "PLATFORM_WALLET()", +"eb8ba66c": "insertStage(uint8,uint256,uint256)", +"eb8bbd28": "getTotalFunds()", +"eb8cad45": "doMarriage()", +"eb8cb983": "LogPauseICO()", +"eb8d2444": "saleIsActive()", +"eb8d3321": "start_PRIVATESALE()", +"eb8e1660": "getPlayerOption()", +"eb8eea15": "totalMainSaleTokenIssued()", +"eb8fa486": "contributionInCauldron(uint8,address)", +"eb8fb32c": "setPercentageToKill(uint8)", +"eb8fb3ec": "getConstraint(bytes32,address,address)", +"eb90450f": "getFirstBuyerAddress(uint256)", +"eb907398": "changeSoftCap(uint256,uint256)", +"eb90fff8": "blockContract()", +"eb91385a": "UnauthorizedAccess(address,bytes4)", +"eb91b5ac": "ALUXToken(uint256,string,string)", +"eb91d37e": "getCurrentPrice()", +"eb9220ab": "updateRent(uint256)", +"eb9253c0": "seize(address,uint256)", +"eb931024": "passKYC(address)", +"eb935e70": "bigbrother()", +"eb93c515": "burnUpdateToken(uint256)", +"eb944e4c": "revokeTokenGrant(address,uint256)", +"eb947f19": "ExampleResourcePool()", +"eb94eecb": "isContributionAllowed()", +"eb95264c": "consolationRewardsPercent()", +"eb95b7d5": "Bounty(address,address)", +"eb95d4e6": "purchaseTokens(uint256,address,address)", +"eb95f0bf": "getCurRoundId()", +"eb965c5e": "Orientation(bytes32[])", +"eb967a2a": "refundsClaimed()", +"eb968ac7": "change(address,int256)", +"eb96ada7": "gameUnpause()", +"eb975390": "lockedTokenTransfer(address[],uint256[])", +"eb9763ed": "transferby(address,address,uint256)", +"eb981fea": "withdrawFromToken(uint256)", +"eb987ca7": "placeBet(address,uint256,string)", +"eb98c8d6": "getGoldsSinceLastCollect(address)", +"eb990c59": "initialize(address,address,uint256,uint256)", +"eb9969a8": "getAllBalance()", +"eb9a5211": "DonationMatched(address,address,uint256)", +"eb9aec0a": "oraclizeIds(uint32)", +"eb9af834": "removePolicy(uint8,uint256)", +"eb9bc6ff": "partyCount(address)", +"eb9c9708": "SisterToken(uint256,string,string)", +"eb9df7db": "updateContractOwner(address)", +"eb9e0398": "mint(int256,uint256,address)", +"eba0184f": "issuable()", +"eba052e7": "RefreshChipUnableList(uint8)", +"eba068ce": "addBountyForHunter(address,uint256)", +"eba2a91b": "superMintBulk(address[],uint256[])", +"eba36dbd": "setAddr(uint256,address)", +"eba37aff": "nrMeasurements()", +"eba37dbd": "getAllReportersDisputeBondToken()", +"eba38402": "finishEvent(address,uint256)", +"eba3cdfe": "bundle(address,uint256)", +"eba4ae3b": "NewDungeonFloor(uint256,uint256,uint32,uint128,uint256)", +"eba56302": "tier1Total()", +"eba60632": "drawNow()", +"eba66dc9": "JOTUNSupply()", +"eba6a307": "getQuotePrice()", +"eba74c0b": "updateCodeWeight(string,uint256)", +"eba898a0": "_authenticate(string,uint256)", +"eba9a4a8": "DiamondBond()", +"ebaa32f3": "submission_stage_block_size()", +"ebaa4470": "getOwnerAuctions(address)", +"ebaac771": "write(string)", +"ebab43e4": "isPreSaleTime()", +"ebabfb0b": "volumeType6()", +"ebac0a56": "fillGoldBuyOrder(address,uint256,uint256)", +"ebad6612": "m_ETHPriceInCents()", +"ebaddea7": "unlockAccounts(address[])", +"ebadfd3d": "checkGivenAway()", +"ebae35a6": "DAOTokenCreationProxyTransferer(address,address)", +"ebae46be": "finishFunding()", +"ebae743b": "addCET6To(address,uint32,uint32)", +"ebae7bf1": "addHpbNode(address,bytes32,bytes32,bytes32)", +"ebaf0e74": "dInit(address,bool)", +"ebaf7f2f": "returnReward(uint256)", +"ebafefb1": "makeInitAccount()", +"ebb045fa": "PublicResolver(address)", +"ebb05f9c": "setItemApproveForAll(uint256,bool)", +"ebb0a856": "leastSwap()", +"ebb0e631": "dtGetCityData(address)", +"ebb11c93": "_build(address,uint256,bytes)", +"ebb1b7ed": "apiAuthorized()", +"ebb1dc21": "ERC20ByteCode()", +"ebb240ef": "ExampleUpgradeable23Token(address,uint256,bytes32,bytes32,uint256)", +"ebb31418": "disableTicker()", +"ebb32c65": "FooAbi(address)", +"ebb332be": "getFunStr()", +"ebb3fd8d": "kingdomName()", +"ebb44389": "bulkMintVested(uint256,address[],uint256[])", +"ebb4ac3c": "ForwarderFactory(address,bytes32,address)", +"ebb4f484": "ROLE_SUPERUSER()", +"ebb5a996": "setUsdLockAccountThreshold(uint256)", +"ebb5f11c": "explore(uint256,address,bool)", +"ebb689a1": "clearAll()", +"ebb6b338": "certifiedPartner()", +"ebb6c59f": "right72(uint256)", +"ebb6dc3a": "returnEther()", +"ebb71194": "withdrawFees(bytes32)", +"ebb741cb": "getChannelSize(uint256)", +"ebb75afc": "debugLog(string,uint256)", +"ebb85502": "GAME_START_TIME()", +"ebb88b97": "getABaddressByName(string)", +"ebb8c22c": "Win(address,uint256,uint256,uint256,uint256)", +"ebb940e6": "BuyBackContract()", +"ebb9ab25": "moveState(uint256,uint256)", +"ebb9b466": "phase_5_Time()", +"ebb9ba80": "calculateRewardForLevel(uint8,uint256)", +"ebba1400": "setIntegerValue(uint256)", +"ebba5184": "WuZeFoundation()", +"ebbaa1fc": "AdvancedToken()", +"ebbb76c8": "LongTermProjectTokens()", +"ebbbe00b": "testNopUnroll16(int256,int256,uint256)", +"ebbc4965": "acceptOwner()", +"ebbc9543": "_getPersonalAirdropUnlockTimestamp(address,address)", +"ebbe05d0": "setMinWeiAmount(uint256)", +"ebbf2f6a": "PixelColor(uint16,uint16,address,uint24)", +"ebbfb637": "Registered(bytes32,uint256,address)", +"ebbfb994": "startTokenSale(uint256,uint256)", +"ebbfcfef": "tomoDepositAddress()", +"ebc04649": "ChangeDatabase(address)", +"ebc16c5c": "getDrugsSinceLastCollect(address)", +"ebc1b4f1": "ForexCoin()", +"ebc20426": "minCapWei()", +"ebc26c95": "ToniToken()", +"ebc33c51": "minContrib()", +"ebc46fdb": "detachControllerForever()", +"ebc56c33": "_hardRequire(bool,bytes32)", +"ebc56eec": "set_allow_refunds(bool)", +"ebc58f62": "MSXAdvanced()", +"ebc59f32": "configPerShares()", +"ebc66bac": "Payreum()", +"ebc697d1": "testControlRestartNotOwner()", +"ebc6a661": "endICOStage2()", +"ebc6e332": "AuctionCreated(address,uint256,uint256,uint256,uint256,address)", +"ebc73e65": "setWaitingTime(uint256)", +"ebc824a2": "killItWithFire()", +"ebc8b934": "add_player(bytes32)", +"ebc97c36": "advisorsPeriodsNumber()", +"ebc98117": "getUserId(uint256)", +"ebcbee16": "totalRaisedInWei()", +"ebcc0de1": "closingPrices(address,address,uint256)", +"ebcc8eb6": "ETHCONEarlyBirdDonation(address)", +"ebcc9a31": "ICOweek2End()", +"ebccb566": "Halo3DPotPotato(address)", +"ebcd8d8a": "setStarInitialPrice(uint256)", +"ebce79ff": "enableBlacklist(address[])", +"ebcfd89e": "AGCoin()", +"ebcfd922": "playerEther()", +"ebd03c55": "changePlatPrice(uint32,uint256)", +"ebd057fa": "owner_withdrawal(uint256)", +"ebd062de": "removeOwnerAddress(address)", +"ebd0f599": "asktoken()", +"ebd3d58a": "InitPeculiumAdress(address)", +"ebd4587d": "GetCourseCode(uint256)", +"ebd46d64": "encodeTokenId(uint256,uint256)", +"ebd4d009": "TotalFloatingInt()", +"ebd56581": "bitservice()", +"ebd58975": "sub2(uint256,uint256)", +"ebd66a9c": "MAX_ALLOWED_PRE_SALE()", +"ebd7cda4": "cTime()", +"ebd83378": "get_blocks_for(uint256)", +"ebd863ac": "DccbtcToken()", +"ebd8d7a0": "getRefReservedTokens()", +"ebd8fde3": "calculatePriceIncrease(uint256)", +"ebd9954c": "tgrStageBlockLeft()", +"ebda6686": "referrerLevel3Percent()", +"ebdac090": "depositFees(uint256)", +"ebdb6063": "lastIssuance()", +"ebdb730d": "weiPerFee()", +"ebdbc7d6": "CurrentTokenOwner()", +"ebdbd65e": "update_private_room(bytes32)", +"ebdcc8ac": "testrc(bytes32,uint8,bytes32,bytes32)", +"ebdd3f77": "triggerRecoveryAddressChange(uint256,address,bool)", +"ebde0bce": "MultiUser()", +"ebde609b": "LykkeTokenErc223Base(address,string,uint8,string,string,uint256)", +"ebdf0d5d": "endianConvert32bit(uint256)", +"ebdf86ca": "add(string,string)", +"ebdfa455": "joinedCrowdsalesLen()", +"ebdfd722": "whitelistEndTime()", +"ebdfe5ad": "picops_is_verified(bool)", +"ebe010b8": "_setStakeHolder(address)", +"ebe02377": "submissionPool()", +"ebe09a93": "getGoldTransaction(string,uint256)", +"ebe14170": "EdgelessToken()", +"ebe1df4f": "LLV_v31_4()", +"ebe22b12": "unsale()", +"ebe24dfd": "deployCtorContract()", +"ebe25056": "isWarlordChest(uint256)", +"ebe29383": "initializeSomeAddress(address,address,address)", +"ebe347d1": "lastTimeWithdrawal()", +"ebe36cb0": "read_price_floor()", +"ebe41b73": "deposit(uint8)", +"ebe4c0d1": "dividendsSumForUser(address)", +"ebe4c597": "VestingRevoked(address,uint256,uint256)", +"ebe599aa": "updateAppExec(bytes32,address)", +"ebe5a4b2": "toB32(bytes,address)", +"ebe5f590": "isJobHasFreelancer(uint256)", +"ebe64f97": "draw_random_card(uint8,uint8[])", +"ebe65f60": "withdrawOffer(uint256,uint256,bytes32)", +"ebe6ba07": "deprecateInterface()", +"ebe6f3cc": "setDappTokenContractAddr(address)", +"ebe749d3": "tokenLockTime()", +"ebe74b21": "PRE_SALE_30_ETH()", +"ebe771da": "setPercent5(address,uint256)", +"ebe7e852": "calculateResult(uint256,uint256,uint256)", +"ebe87ca4": "between(address)", +"ebe89597": "validate(uint256,bytes32,address,bytes32,bytes32)", +"ebe955fe": "simFrequency(bytes)", +"ebea3815": "setDays(uint256)", +"ebea3d30": "setFixedRate()", +"ebeac0c8": "marketCapBlue()", +"ebeac2b5": "reactivate(address)", +"ebead05f": "getOrderSharesEscrowed(bytes32)", +"ebeae1ad": "DrocoinCrowdSale()", +"ebeb0838": "delFromWhiteList(address)", +"ebeb0f48": "lockTotalSupply()", +"ebeb1b5e": "transferTokenToMultisig(address,address)", +"ebeb76bb": "assignMeta(string,uint256)", +"ebec7352": "numVideos()", +"ebec7752": "usableBalanceOf(address)", +"ebed561b": "engineRunning()", +"ebed7a95": "mineral2Shares(uint256)", +"ebedef1a": "approvalFallback(address,uint256,bytes)", +"ebef28aa": "BID_DELAY_TIME()", +"ebf04917": "tranches()", +"ebf056e3": "revoke(bytes32,address,bool)", +"ebf06bcb": "spawnSite(uint256,uint256,address)", +"ebf0c717": "root()", +"ebf0da65": "erc223()", +"ebf0e5f1": "SimplePriceFeed(address,address,address)", +"ebf1356e": "minMineSize()", +"ebf1a495": "sendEthTweet(uint256,bool,string,bool,string,uint256)", +"ebf31253": "getMoneyness()", +"ebf469dc": "issue(address,uint256,string)", +"ebf5128c": "mintUnICOLeftToken(address,address,address)", +"ebf522b8": "_newJockey(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"ebf53e0e": "countAllCliDrm()", +"ebf59068": "exitOnHalt(address[],uint256[],bytes,bytes,bytes32)", +"ebf5cdfd": "jackpotGuard(uint256)", +"ebf652cc": "lockInTime1()", +"ebf6e91d": "hit(uint256)", +"ebf70010": "ChangeWhiteList(address,bool)", +"ebf701e0": "getAccountBalance(bytes32)", +"ebf76522": "selfDestroy(address,address)", +"ebf81d30": "_Withdrawal(bytes32,uint256,uint256)", +"ebf88de4": "removeHeir()", +"ebf89fa9": "withdrawPonzi(uint256)", +"ebf95043": "balanceOfMorty(address)", +"ebfa3c1b": "maxRandomRound()", +"ebfaacce": "uncappedBuyerList(address)", +"ebfb3630": "vernamCrowdsaleToken()", +"ebfd288a": "getVerifiedReceipt(bytes,bytes,bytes)", +"ebfd5b26": "addTokenTo(address,uint256,uint256,bool)", +"ebfda085": "LOOT()", +"ebfdc657": "foundersAddress()", +"ebfe0f39": "makeCoin(uint256)", +"ebfed9f2": "motionVoting(uint256)", +"ebff2602": "Withdraw(address,address,uint256,uint256,uint256)", +"ebff410d": "bonusAccountBalances(address)", +"ebff831f": "getFactories(address)", +"ebffd7e3": "getStage1Cap()", +"ec000bb5": "getPrizes()", +"ec003704": "getVestingStart(address,address)", +"ec005255": "boolToInt(bool,bool)", +"ec00d2a4": "frozenRecordsCount()", +"ec017820": "TransferToBTCoE(address,uint256)", +"ec01f75f": "initOperated(address)", +"ec0274ed": "CreateBatch(uint256,string)", +"ec0317ff": "AidCoin()", +"ec034bed": "donationAddress()", +"ec035393": "_getAllRevisionBlockNumbers(bytes20)", +"ec035aac": "bonusOver3ETH()", +"ec0373c6": "adminGetPlayerCount()", +"ec041a24": "getOrModifyBlocked(address)", +"ec0484ef": "roiEscrow(bytes32)", +"ec049219": "AtmanToken()", +"ec0493f7": "_populateTokenData(uint256,bytes16,uint256,uint32)", +"ec062ac0": "getMaxProfit()", +"ec066a4c": "ALLYToken()", +"ec0904f7": "releaseFor(address)", +"ec096f8d": "addTransaction(address,uint256,bytes)", +"ec0a0b50": "TOKENS_SUPPLY()", +"ec0a12d3": "JKToken()", +"ec0b3d21": "testThrowsIfPlaceholderIsBad()", +"ec0b3de4": "deletePetition(uint256)", +"ec0b4153": "getMoneyness(int256,uint256,uint256)", +"ec0b4207": "initCountTokens()", +"ec0b529f": "lockMinSiteTipPercentage()", +"ec0ba006": "countEgg(uint64)", +"ec0be13d": "Location()", +"ec0c6a72": "issue(bytes32,int256,string,bytes,uint256)", +"ec0cfd0b": "getProperties()", +"ec0d69e3": "train(uint256,bool,uint8)", +"ec0da0cd": "registerOptionPair(address,uint256,address,uint256,uint256)", +"ec0da330": "testSafeSub(uint256,uint256)", +"ec0de26e": "foundationTimelock()", +"ec0ea816": "breed(uint256,bool,uint256,bool,string,string)", +"ec0f1025": "testBitsOrSuccess()", +"ec0f60d9": "ICOcontributors()", +"ec1024d1": "censoredChatMessages(uint256)", +"ec10286d": "PointlessCoin(uint256,string,uint8,string,address)", +"ec109249": "RefundableAllocatedCappedCrowdsale(uint256,address,address,uint256,uint256,uint256,uint256,address,address,address,address,uint256)", +"ec112460": "_updateDistribution()", +"ec1182c2": "freezePrice()", +"ec11d0cf": "DeltaBalances()", +"ec12f1ef": "increaseMaxAvailableTokens(uint256,string,uint256)", +"ec1329c2": "makeProposal(address,uint8,uint256)", +"ec132ce3": "unconfirm(uint256)", +"ec13cc7b": "freeze(bytes32)", +"ec13df6b": "setExecutiveOfficer(address)", +"ec140a1f": "BTSJToken()", +"ec149de9": "Ethereumwhocoin()", +"ec14f974": "MAX_CARS()", +"ec1553d1": "mintCoin(address,uint256)", +"ec15afe1": "filmpaid()", +"ec15c6ba": "substring(string,uint256,uint256,uint256,uint256)", +"ec164625": "_clearTotalBonusTokensByAddress(address)", +"ec176dee": "weiToTokenFactor()", +"ec17a7a3": "addressSCICO()", +"ec17b20e": "setStartingBlock(uint256)", +"ec1847b6": "getWorkerIndex(address)", +"ec1893b4": "getProps()", +"ec18ca9c": "lastPresser()", +"ec18e2f1": "logInitialReporterRedeemed(address,address,address,uint256,uint256,uint256,uint256[])", +"ec1938a8": "AddNewSegment(address,address,uint256,uint256,uint256,string)", +"ec1ad474": "removeFromWallet(address,uint256)", +"ec1b375a": "spardosenName()", +"ec1d9bf4": "isGoldRegistry(address)", +"ec1e4861": "assignWinnings(uint256)", +"ec1e6a4f": "tearDown()", +"ec1e74a7": "commitThreshold()", +"ec204f87": "_getTokenAmount(uint256,uint8)", +"ec20b457": "addInvestor(address,uint256)", +"ec20fc35": "populationIncrease()", +"ec216c34": "checkOwnerIndex(uint256)", +"ec21a913": "setUint256(int256,uint256)", +"ec22f94f": "getRedeemableReputationVoter(bytes32,address)", +"ec238994": "trustedTransfer(address,address,address,uint256)", +"ec23ba66": "Kapitalexote()", +"ec24aa01": "startPrivateSaleStage()", +"ec25adf4": "addtokens()", +"ec271be2": "charityWalletAddress()", +"ec277ce7": "Resilience()", +"ec27bdd3": "challengingInput()", +"ec27f6d8": "LegacyRepContract()", +"ec280bf6": "moreMinFunds(uint256)", +"ec28118e": "nextDiscountTTMTokenId1()", +"ec2929fb": "divbonus()", +"ec29781e": "deliveryId()", +"ec29ff7c": "getMaxiumInputEther()", +"ec2a4062": "setOpenBlock(uint256)", +"ec2ac54e": "deposit(address,uint256,bytes32,uint256)", +"ec2af44d": "test_oneValidEqBool()", +"ec2b189c": "GetURL(address,uint256)", +"ec2b50bf": "setUserLibrary(address)", +"ec2bb963": "openPrize()", +"ec2bcd22": "addressCanContribute(address)", +"ec2c28b4": "checkBuy(uint256)", +"ec2c8fec": "getEggsOff(address)", +"ec2c9016": "getMarkets()", +"ec2cdb87": "initialSaleComplete()", +"ec2ec781": "testFailGetUnsetToken()", +"ec2efe40": "MinPayment()", +"ec2f39b4": "isICOStarted()", +"ec2f81ac": "createGroup(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ec300fcc": "MediChainToken(uint256)", +"ec309038": "canStart()", +"ec30ad95": "EthsqrCore()", +"ec30c4e3": "getPointsToSpend()", +"ec3178f9": "getMemesByOwner(address)", +"ec322a88": "tokenlenth()", +"ec32d68f": "xrateProviders(uint256)", +"ec32e4e8": "admin_inactive_withdrawable()", +"ec332488": "openForPublicTrade()", +"ec342ad0": "BASE()", +"ec343a97": "Rate4()", +"ec35576e": "GetProfitFunds()", +"ec3575ec": "soccer()", +"ec357c64": "getIsCoinReg(string)", +"ec36196e": "toSpread()", +"ec3743f1": "setTeamFund()", +"ec37a6e4": "logReputationTokensTransferred(address,address,address,uint256)", +"ec38027e": "MadToken()", +"ec384a3e": "tokenToExchangeTransferInput(uint256,uint256,uint256,uint256,address,address)", +"ec38e855": "mintOperations(uint256)", +"ec3a0489": "PAYToken()", +"ec3a6d64": "getGoodDecision(bytes32)", +"ec3a6f73": "numRegistrants()", +"ec3adf65": "editUser(bytes32,bytes32,bytes32,bytes10,bytes32,bytes32,bytes32)", +"ec3af4a9": "getProjectKudos(address)", +"ec3bb11a": "maximumRaised()", +"ec3c155e": "ERC20TokenMock(uint256,string,uint8,string)", +"ec3d21e1": "kycPass(address)", +"ec3d45e8": "setMinParticipants(uint256)", +"ec3d5ffb": "stillAllowedReadable()", +"ec3f3636": "firstStage()", +"ec3f5d62": "withdrawRestOfBalance()", +"ec3fdf1d": "getExpiredAddressIndexes(address)", +"ec40c43d": "SmartPool(uint256,uint256,uint256)", +"ec40db16": "HedgeContract1(uint256,address,address)", +"ec412e00": "targetDiscountValue2()", +"ec42f82f": "finishIco()", +"ec439d67": "countAllUsers()", +"ec43eeb6": "getAddressOfId(uint256)", +"ec443813": "BytesToAddress(bytes)", +"ec449e67": "currentPriceInfoOf(uint256,uint256)", +"ec44acf2": "trading()", +"ec46009d": "EstateX()", +"ec4673d1": "approveWithdraw(uint256)", +"ec46bf8f": "emergency_withdraw(uint256)", +"ec47297e": "_CallCancelled(bytes32)", +"ec4754c6": "endetoken()", +"ec47a795": "getLockedStages(address)", +"ec47e7ed": "EtherWithdraw(uint256,address)", +"ec480557": "readTotalNumberOfPurchases()", +"ec486c23": "NewBToken()", +"ec4a79cf": "unlockaddress(address)", +"ec4aca2a": "bancorTradingContract()", +"ec4b48ad": "testCanDeposit(address)", +"ec4baa83": "StaticEthAvailable()", +"ec4bfdd4": "calculateOptionsComponents(uint256[9],uint32,uint32,bool)", +"ec4c76bb": "setInitialBuyoutPrice(uint256,uint256)", +"ec4cd0cf": "isSuccessful()", +"ec4d88d7": "usernames(bytes32)", +"ec4e530d": "_decodePriceData(bytes)", +"ec4eb442": "author(uint256)", +"ec4fb7a0": "totalTokensPresale()", +"ec4fd09d": "getEtherDog(uint256)", +"ec503611": "profitsSent()", +"ec505f58": "INDOCASH()", +"ec5134ca": "processStep()", +"ec51431f": "Unvault(uint256,uint256)", +"ec530de6": "countAddresses()", +"ec5325c1": "getDarknodes(address,uint256)", +"ec53589d": "FhnwCoin()", +"ec54a36a": "updateTimer(uint256)", +"ec54fa5e": "listCOFI()", +"ec556889": "proxy()", +"ec559176": "setEthBalance(address,uint256)", +"ec560828": "monarchyEndReward()", +"ec56a373": "contracts(bytes32)", +"ec56c6b0": "contracteventcount()", +"ec56eb93": "getComponentCount(uint256)", +"ec57e25b": "Magzia()", +"ec582a00": "IkuraStorage()", +"ec58b996": "encodeMessage(uint256,uint256,uint16[])", +"ec58f4b8": "addSolver(address)", +"ec591b20": "cancelSellCard(uint8)", +"ec59565f": "BinaryOptionV2(address,address,address)", +"ec597128": "addition()", +"ec5975c6": "getTokensReserve()", +"ec5a25e0": "WalletLibrary()", +"ec5aceab": "createOrder(address,address[3],uint256[5],int256)", +"ec5c71b3": "getChildIds(address,uint256,uint256)", +"ec5c9036": "Crowdsale(address,uint256,uint256)", +"ec5d9cc8": "balanceAvailableTokens(address)", +"ec5d9e58": "organisationName()", +"ec5dfaa2": "initHolders(address[],uint96[])", +"ec5dfb84": "bbBalance()", +"ec5ffac2": "minimumStake()", +"ec607f7d": "nextPeriod()", +"ec60bcf3": "burnFrom(address,address,uint256)", +"ec61c430": "YudiToken(uint256,string,string)", +"ec620eb3": "setClaimBlocks(uint256,uint256)", +"ec622892": "disableInvestment(address[])", +"ec62558d": "adminBurnToken(uint256)", +"ec62b216": "PRE_ICO_BONUS_PERCENTAGE()", +"ec647d42": "JESToken()", +"ec64f52f": "brag()", +"ec6507d7": "debug_transfer(address,address,uint256)", +"ec651551": "PVP(uint256,uint256,uint256)", +"ec653833": "totalAuctionItems()", +"ec654389": "tokenBountyAllocated()", +"ec654e38": "accident()", +"ec65b7a0": "FINALIZE(bytes32)", +"ec664694": "GooToken(uint256)", +"ec672cf6": "setAddressArray(bytes32,address[])", +"ec67abe4": "MOMCoin()", +"ec67e37a": "assignRevenueContract()", +"ec68197b": "setGameAddrt(address,bool)", +"ec688e8f": "walletNotLocked(address)", +"ec68a73d": "totalSpecies()", +"ec698a28": "__transferFromWithReference(address,address,uint256,string,address)", +"ec6a4487": "setMoneyWallet(address,address)", +"ec6acb33": "reputationClear(address,string)", +"ec6afc22": "oraclize_query(uint256,string,string[3])", +"ec6b16ca": "pMinInFp()", +"ec6b1d1e": "findAddress(bytes32)", +"ec6b393d": "subWeiRaised(uint256)", +"ec6be06e": "setBeneficiaryAddress(address)", +"ec6c18fc": "TOKEN_DECIMALS_MULTIPLIER()", +"ec6c32cd": "amendArticleItem(uint256,uint256,bytes)", +"ec6e43ae": "PRICE_CHANGE_ENDING_TIME()", +"ec6e5d09": "SellerHistory(address,address,uint256,uint256)", +"ec6e7bbf": "getTargetSite(address,uint256,uint256,uint256)", +"ec6eb411": "adjustBalance(address)", +"ec6f3a8c": "originalTokenHolder()", +"ec6f509e": "IcoStartTime()", +"ec6f772d": "addVirus(address,uint256)", +"ec704095": "getMyCrocs()", +"ec714926": "setTargetDiscountValue8(uint256)", +"ec715a31": "releaseToken()", +"ec7219a1": "growthReserveTokenSend(address,uint256)", +"ec727000": "getApprovalDB()", +"ec736b67": "validPerc(uint256)", +"ec737576": "finalizeMintUtility(address,uint256)", +"ec7380d9": "transferManually(uint256,address,address)", +"ec747b09": "getPaymentById(uint256,uint256)", +"ec74b818": "rbInformationStore()", +"ec756ee5": "getOrCacheValidityBondWallCalled()", +"ec759b80": "getOwners(uint8)", +"ec759f87": "setTemporaryVariables()", +"ec76312a": "sendInvestorIndex()", +"ec76bd65": "volumeType5()", +"ec77537b": "finalizeDispute()", +"ec77809f": "removeAssetPartOwner(bytes32,address)", +"ec77a89f": "GoldTokenLedger()", +"ec78626f": "setPOOL_edit_11(string)", +"ec788712": "toAddress(bytes,uint8)", +"ec789ef3": "sellpr0coinsAgainstEther(uint256)", +"ec796908": "tokensArray(uint256)", +"ec79efa8": "candidateETHAssets()", +"ec79f9bd": "setDisputeThresholdForFork(uint256)", +"ec7a3ab6": "calcBurnFee(uint256)", +"ec7b2843": "kvcMul(uint256,uint256)", +"ec7b642a": "setEvent(uint256)", +"ec7b8c40": "deleteFrozenAddresses(address)", +"ec7b9655": "spiritual_guidance()", +"ec7bb2ac": "setGen0Limit()", +"ec7bbcd2": "TradeAdsCoin()", +"ec7bf78d": "SetWorldSnapshot(uint256,bool,uint256,uint256,uint256)", +"ec7c06be": "doMigrate()", +"ec7c2ef7": "withdraw_excess_tokens()", +"ec7c637d": "getBalanceLimit(address)", +"ec7dd7bb": "getOrderDetails(uint256)", +"ec7de1e9": "masterOfCeremonyPending()", +"ec7df86e": "hasSDCC(address,address,uint256)", +"ec7dfb4d": "weiGoal()", +"ec7ecec5": "getPlayerState(uint256)", +"ec7f2ae7": "LogTransactionComplete(bytes32,address,uint256,bytes)", +"ec7f9906": "changeFreeAnimalsLimit(uint256)", +"ec7fea7b": "BiXuTo()", +"ec7fec8b": "defineWinner()", +"ec7ff617": "getMatchIdx()", +"ec801286": "BITHELPTOKEN()", +"ec810684": "registrationVote(address,uint256)", +"ec8120c9": "totalItemsForSale()", +"ec814f4e": "doDevelopFunds(uint256)", +"ec81aadb": "deployedTokens(uint256)", +"ec81b483": "CAP()", +"ec81e22e": "returnmoneycreator(uint8,uint256)", +"ec824ca9": "hashNumber(uint8)", +"ec82bf91": "_pay_token_commission(uint256)", +"ec82cf4e": "setDepositPpm(uint32)", +"ec841fe0": "LogTokensPerEthUpdated(uint256)", +"ec845dd8": "totalSubscription()", +"ec847fe8": "divholder()", +"ec854a04": "DogToken()", +"ec85d2f2": "regulatorStatus()", +"ec85d464": "returnAmountRaisedSoFar(uint256)", +"ec866d28": "isApproveOnly()", +"ec867b27": "isTokenVerified(address)", +"ec86e1d7": "getReleaseType(address)", +"ec86fdbd": "getOrCacheMarketCreationCost()", +"ec87543b": "lockedCZRMap(address,uint256)", +"ec875f98": "addCourses(string,address[])", +"ec881472": "Validator(string)", +"ec8861e7": "switchDelegate(bool)", +"ec88abc8": "SOVv11Token()", +"ec8909c0": "setShort(address)", +"ec89331b": "get_invester_detail(uint256)", +"ec89c8f0": "MicheleToken(uint256,string,string)", +"ec8a2c88": "investments()", +"ec8ac4d8": "buyTokens(address)", +"ec8b283c": "give(address,address,uint256)", +"ec8b8f4e": "addMinerTokens(uint64,address[],uint64[])", +"ec8be5b9": "canClaim(bytes32,uint256,address,bytes)", +"ec8cae23": "changeHolderCount(uint256)", +"ec8cb281": "openDate()", +"ec8d140b": "setLockedWalletEntity(address,address)", +"ec8d82f8": "oraclize_query(string,bytes[],uint256)", +"ec8e1afa": "interfaceInstanceCount()", +"ec8edf7a": "changeWalletAddress(address)", +"ec8f3fa5": "getWithdrawalAddress()", +"ec8f4d04": "onApprove(address,address,uint256,uint256)", +"ec8f850b": "withdrew()", +"ec8f95fc": "refCount(address)", +"ec8fb8ef": "withdrawOldTokens(address,uint256)", +"ec8fe065": "buyItem(address,uint8,uint256)", +"ec901017": "mintTokensWithTimeBasedVesting(address,uint256,uint256,uint256,uint256)", +"ec902779": "scribes(address)", +"ec9029a3": "minerToken(address,uint256)", +"ec90a79a": "recv_from_side_chain(uint256,bytes)", +"ec912d61": "markCredit(address,uint256)", +"ec91b550": "miningThree()", +"ec92b98d": "bancorErc20Eth()", +"ec933789": "ParticipantAgent(string,address)", +"ec93a081": "HelperSearchToken()", +"ec93b3f8": "GetCardType(uint8,uint8,uint8)", +"ec93cfae": "FountainOfWealth()", +"ec941ef8": "BXZToken()", +"ec94ce4b": "enabledMintTokens(bool)", +"ec9723ad": "setSalePeriod(uint256,uint256,uint256)", +"ec972a07": "lastBlock_f15()", +"ec972fb0": "timeOfLastDistribution()", +"ec973642": "enable(address,bool)", +"ec979082": "marketCount()", +"ec97cff7": "addCertificationDocument(address,bytes32)", +"ec985c99": "minfinney()", +"ec98618e": "getDial1Type(uint8)", +"ec98eefc": "createTokenContract(address,uint256)", +"ec993f3d": "changeDiscount(uint8)", +"ec9974eb": "getTotalWEIEther()", +"ec99bfe9": "setPreSaleParams(uint256,uint256,uint256,uint256)", +"ec99c60c": "getMatchFromList(uint256)", +"ec9a6e87": "setDefaultPartitions(bytes32[])", +"ec9b5cb2": "publicSaleEnd()", +"ec9be5fe": "setPotatoOwner(address)", +"ec9c677d": "checkDeck(uint256,uint8[],bytes32)", +"ec9d35aa": "transferWithCommission(address,uint256)", +"ec9d7fd2": "getAccumulatedServiceFee()", +"ec9da59e": "setMainContractAddress(address)", +"ec9e7971": "kycAdmin()", +"ec9edfc2": "addSmallInvestor(address,uint256,uint256)", +"eca001dd": "checkWhitelisted(address,uint256,uint256,uint8,bytes32,bytes32)", +"eca0290b": "rawSetAttribute(bytes32,bytes32,bytes)", +"eca058cc": "tokensForWei(uint256)", +"eca0be47": "TEAM_GROUP_WALLET()", +"eca10286": "loseNum()", +"eca1ada7": "getPlayersCount(uint256)", +"eca25f42": "TARGET_ADDRESS()", +"eca28cb7": "AleaPrivateSale(uint256,uint256,uint256,address,uint256,address)", +"eca2e604": "makeWorkStage(uint256,uint256)", +"eca38e0c": "ethSent()", +"eca3ee2c": "currentFundingAmount()", +"eca4742a": "getApprovedAddress(uint256)", +"eca49641": "TurnBasedGame(bool)", +"eca5339d": "mintExtraTokens(uint256)", +"eca5c793": "testErrorUnauthorizedNameRegister()", +"eca6e42d": "set_minimum_trade(uint256)", +"eca73f64": "currentBonus()", +"eca85419": "_getAllChildIds(bytes32)", +"eca90ffc": "LogGetEther(address,uint256,string)", +"eca95377": "generateRandom(string,uint256,uint256)", +"ecaa0e45": "OXGOLDSupply()", +"ecaaf6c8": "newIdTankHull()", +"ecab1a06": "_getExpProportion(int256)", +"ecabaf24": "NewHighestBid(uint256,address)", +"ecac7f4b": "symbolsCount()", +"ecacb3e0": "BitcoinSinhalaToken()", +"ecad17c1": "HurtleCoin()", +"ecad78a2": "paydCouponsETH(address)", +"ecaeacf6": "RESERVED_TOKENS_FOR_CYNOTRUST()", +"ecaeb904": "getDeltaMonth(uint256,uint256)", +"ecaf76b8": "minReferAmount()", +"ecb0116a": "getExitFee()", +"ecb0256b": "relayTx(bytes,int256,int256[],int256,int256,bytes,int256,int256[],int256,int256)", +"ecb071cf": "mainSaleStartdate()", +"ecb0b862": "payContract()", +"ecb14519": "payToken(address,address)", +"ecb15644": "GasFiles()", +"ecb1b31c": "TRONIC1()", +"ecb20de7": "takeBuyTokenOrder(address[3],uint256[3],uint256,uint8,bytes32,bytes32)", +"ecb389e0": "mmVaultAddr()", +"ecb39cba": "developer_edit_stake_reward_rate(string)", +"ecb3dc88": "depositCounter()", +"ecb41054": "doesUserExist(address)", +"ecb4136e": "NotAnotherPonzi()", +"ecb42795": "MANA()", +"ecb42914": "STAGE_1_MAXCAP()", +"ecb46858": "buyGolds()", +"ecb58c74": "ownerAllocate(address,uint256)", +"ecb5fff6": "DELTA()", +"ecb62e49": "defaultParameters(uint256)", +"ecb63011": "receiveApproval(address,uint256,address,uint8)", +"ecb6af21": "accountB()", +"ecb6b50c": "RAVI_ADDRESS()", +"ecb6c47a": "allStop()", +"ecb70a98": "tokensByDashTx(string)", +"ecb70fb7": "hasEnded()", +"ecb75089": "jackpotRoundNumber(uint256)", +"ecb828ea": "lastTokensIssued()", +"ecb86574": "getSum(address)", +"ecb87dc4": "cjTeamWallet()", +"ecb98714": "random_damage(uint256)", +"ecb98e3d": "getUSDAmountByTokens(uint256)", +"ecb9d6a3": "_cancelTknOffer(address)", +"ecba18c0": "closeCrowdsale(bool)", +"ecbb06c9": "setPlayerGeneralAttr(uint64,uint32,uint32,uint32,uint32)", +"ecbb596a": "DecentralizedCrowdFunding(address,uint256,string,uint256,uint256)", +"ecbbcdda": "processFundsIfAny()", +"ecbbd1ca": "calculateMaximumBurnAmount(address)", +"ecbc1481": "calcVIPBenefit(uint256,uint256)", +"ecbc3177": "shitFundAddress()", +"ecbc328d": "totalCardValue(uint256)", +"ecbc8fa7": "adjustBalance(address,int256)", +"ecbca55d": "setConversionFee(uint32)", +"ecbd15fd": "alterTokenGrant(address,uint256)", +"ecbdb633": "getDataHolders(address)", +"ecbdbb32": "balanceETH()", +"ecbdee9b": "setWeiPerSatoshi(uint256)", +"ecbee997": "getPlayerBetInfo(address)", +"ecbf171c": "setSiteRewards(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ecbfc077": "startClaim()", +"ecc0148e": "inquire()", +"ecc06c76": "setFormula(address)", +"ecc0ee18": "fortune_setimgnme(uint256,bytes32[144],bytes32)", +"ecc137db": "getRandomAdversary(uint256,uint8)", +"ecc18582": "exitContest(uint32)", +"ecc1a0c9": "SetApplicant(uint256[])", +"ecc1caef": "founderReward()", +"ecc1cfaf": "withdrawALC(uint256)", +"ecc21830": "setBuyoutFeePercentage(uint256)", +"ecc258dd": "removeSecondAdvisorLock(address)", +"ecc2c47c": "outSdcForUser(uint256)", +"ecc2e57d": "classVariants(uint256)", +"ecc310ae": "kittyActions(uint256,uint256)", +"ecc38a1f": "REFERER_PERCENT()", +"ecc4029b": "getSpentAmount(address,address)", +"ecc46d1b": "DEBATE_PERIOD_MINUTES()", +"ecc4a6c2": "getSelled(uint256)", +"ecc54067": "TopTokenBase()", +"ecc55e4b": "setBool2(bool)", +"ecc57df4": "_fetchOrderByIdWithPayer(string,address)", +"ecc5aaaa": "startMint(uint256,bool,int256,uint256)", +"ecc7296b": "rebalanceMargin()", +"ecc72b0f": "getSentTrade(address,uint256)", +"ecc73f48": "collectedSum()", +"ecc7e7bc": "TestTokenToken()", +"ecc91c28": "addEtherBroAuction(uint256,uint128)", +"ecc91fdc": "buyCopyright(uint256,uint256,string,string)", +"ecc9665b": "maxWithoutWhitelist()", +"ecc98ce4": "ERC721_RECEIVED()", +"ecc99af0": "getNegID()", +"ecca031f": "hasVoted(uint256)", +"ecca9c2e": "getPrizeAmount()", +"eccaa8b5": "getSpellAbility(uint32)", +"eccb15bc": "SatPosition(int256,int256)", +"eccb6bd0": "addTicket(uint256,address)", +"eccbc596": "maxAttackPrizePercent()", +"eccbf4cc": "getTokenCountFor(address)", +"eccc32f2": "DD()", +"eccd162e": "Fortune(string)", +"eccd1a8d": "NEWT()", +"eccd8e0d": "getExchangeRate(uint256,uint256,uint256)", +"ecce7e63": "setWinningTeam(uint256)", +"eccf1b29": "CrystalDoubler()", +"eccf93c0": "updateCrowdsale(uint256,uint256,uint256,uint256)", +"ecd08bc3": "rap()", +"ecd0c0c3": "_token()", +"ecd13b89": "discountDivisor()", +"ecd1a83a": "getUserCoolDown(address)", +"ecd1c4a5": "availableZLT()", +"ecd22328": "weiCrowded()", +"ecd27189": "freeToUseTokens()", +"ecd370bd": "withdrawCoinToOwner(address,uint256)", +"ecd4eb74": "sendFees(uint256)", +"ecd57ec1": "setMinMaxDays(uint8,uint8)", +"ecd59d9b": "OTHERCRUISER()", +"ecd63757": "makePresale(string,address,uint256,uint256,string,string)", +"ecd747de": "getFishByPos(uint256)", +"ecd75c59": "FourWaySplit(address,address,address,address,address,address,address,address)", +"ecd79066": "getRedeemableReputationProposer(bytes32)", +"ecd7df06": "ICOweek4End()", +"ecd9297d": "withdrawAffBonus()", +"ecd9442e": "setMaxWeiAllowed(uint256)", +"ecd9c155": "transferDistributorship(address)", +"ecda10f5": "deploymentTime()", +"ecda249b": "UIWishSale(address,uint256,uint256,uint256,uint256,uint256,uint256,address,address)", +"ecda3055": "start_ICO1(uint256)", +"ecda58c2": "withdraw_3Completed()", +"ecda5fb6": "prizeFundFactor()", +"ecda6635": "owner_MIN_LIMIT()", +"ecda98dd": "start_bond(address[],address,uint256[])", +"ecdb065b": "bitNot(bytes32)", +"ecdb620d": "offlineRealmSold(uint256,address,uint256)", +"ecdc454c": "finalizeProposal(uint256,address[],bool,int256)", +"ecdc7135": "GoldeaBonusCalculator(uint256,uint256)", +"ecdd9549": "bonusOver10ETH()", +"ecdd9632": "generateOrder(address,address,address,uint256,string,string,string)", +"ecdf419a": "doCoinage()", +"ecdf5459": "awardReferralBonus(address,address,uint256)", +"ecdf6fed": "shareDividends()", +"ecdfca06": "tokensPreSale()", +"ecdfdc27": "ROLE_ADMINISTRATOR()", +"ece02921": "queryGameHistory(uint256)", +"ece0d561": "CashSaved(uint256)", +"ece11912": "getBetValue(uint256,uint256,uint256)", +"ece1d6e5": "maxRate()", +"ece1de44": "appeal(bytes32)", +"ece2064c": "setCurrentRewardTokens()", +"ece20f36": "nullify()", +"ece2ea40": "nextCapTime()", +"ece2f7e0": "getPlayersUnits(address)", +"ece35d01": "sessionDuration()", +"ece44b81": "numCollected()", +"ece4f10d": "LULUCOIN()", +"ece5ca56": "getData_33()", +"ece62017": "sTCBonus(uint256,uint256)", +"ece66346": "CryptoSagaHero(address)", +"ece67270": "countdownIsUp()", +"ece7c397": "SurveyTokenSale()", +"ece7fa5d": "registerToken(address,string,string,uint256,uint256)", +"ece84fd5": "crowdsaleFinished()", +"ece8557f": "modifyICOEndDate(uint256)", +"ece866b9": "l()", +"ece8a1d9": "baby()", +"ece8a29d": "addCourse(string,string,string,string,string,string)", +"ece9aed4": "crearJuegosPublico()", +"eceadfd1": "ONEX()", +"eceae9bf": "setRequiredGoldIncreaseFactor(uint256)", +"eceb2945": "checkProposalCode(uint256,address,uint256,bytes)", +"eceb9eef": "SweetTokenLogic(address,address,address,address[],uint256[])", +"eceba876": "getChildUniverse(bytes32)", +"ececa529": "mainFundPrecent()", +"eced0280": "getPhase()", +"eced2967": "calculateAndRegisterEarlyBonuses(uint256)", +"eced5526": "SCALE()", +"eced6c57": "extraTokensPerUnit()", +"ecedafcb": "SampleCrowdsale(uint256,uint256,uint256,uint256,uint256,address)", +"ecedf7b2": "initialisation(address,address)", +"ecee4eb1": "calculateNoOfTokensToSend(uint256)", +"eceebc3f": "setAllowTrading(bool)", +"ecef0e54": "DigixbotUsers(address)", +"ecef615b": "sellTransferFee()", +"ecf0848f": "MIN_PRESALE()", +"ecf12669": "FinToken()", +"ecf1e0fd": "addManyUsers(address[],uint256[])", +"ecf1fca0": "tradeProfileImplementation()", +"ecf1fdea": "setper(uint256,uint8,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"ecf24ec0": "Contribution(address,address,address,uint256)", +"ecf41c8c": "createOption(uint256,bytes32)", +"ecf42e5a": "ETHRLINK(address,address)", +"ecf477d5": "CrowdsaleStarted(address)", +"ecf56d82": "etherToTokens_(uint256)", +"ecf59b83": "ico3Min()", +"ecf6512f": "modify_Presale2StartDate(uint256)", +"ecf68eb8": "TokenTransferAllowed(uint256,address)", +"ecf6eb22": "setConfigAddress(bytes,address)", +"ecf6f108": "bigToken()", +"ecf6f2f8": "Bitgram()", +"ecf7105e": "etherBounty(address,uint256)", +"ecf7b873": "_airdropUnlocked(address)", +"ecf82c91": "setPixelDistributor(address)", +"ecf836ba": "updateInstance(bytes32,bytes32,bytes32)", +"ecf862cc": "stopSweepStake()", +"ecf88111": "setConfig(address,uint256,uint256,uint256)", +"ecf90824": "testegy(uint256,string,string)", +"ecf9d3e9": "getDesignatedReportPayoutHash()", +"ecf9ea1d": "expanded()", +"ecfa3292": "Forwarder(address,bytes32,address)", +"ecfb49a3": "totalPool()", +"ecfb5d17": "deleteFromWhitelist(address)", +"ecfbe70c": "withdrawERC20Token(address,address)", +"ecfc5964": "incTotalSupply(uint256)", +"ecfc7ecc": "placeBid()", +"ecfce7b4": "addProductEndorsement(string,uint256,int256,bool,string,string)", +"ecfd0a56": "account1()", +"ecfd8928": "contributorCount()", +"ecfef21a": "Mojito()", +"ecff39af": "START_WEEK_1()", +"ecff537f": "getGen0COnfig(uint32)", +"ecff58df": "countProjects()", +"ecff7531": "BankerFarmer()", +"ecffc18a": "RussianCash()", +"ed007cb6": "AggiungiMiner(address)", +"ed00b73f": "EbolaToken()", +"ed016620": "EtherToken1()", +"ed01bf29": "budget()", +"ed02a732": "doBountyairdrop(address,uint256)", +"ed02ad37": "numberOfGuesses()", +"ed02ada4": "TransferCoinsFrom(address,address,uint8)", +"ed02dded": "lossToCharity(uint256,address)", +"ed032ad2": "lastCharNoZero(string)", +"ed03a5b3": "cloneArray(uint256[],uint256)", +"ed03d0da": "withdrawShares(address)", +"ed045a3c": "doRefund(uint256,uint256,uint256)", +"ed047efd": "assignAnotherOwner1(address)", +"ed04d9f2": "getBuyingAmountRanges()", +"ed05084e": "setWinner()", +"ed05582b": "getHash(address,uint256)", +"ed05ae78": "getDepositBalance(address)", +"ed060ac1": "batchMount(address,uint256[],uint256)", +"ed0668fb": "getMyTurtles()", +"ed06a62c": "confirmBobDirectPay(uint256)", +"ed06d4dc": "KiwiTestToken()", +"ed06fb91": "PART_REWARD_CHANCE()", +"ed07e7b6": "arbifi(uint256,bool)", +"ed081329": "vote(address[])", +"ed09d19a": "get3(uint256)", +"ed0ad321": "releasedOf(address)", +"ed0b01cf": "MINERS_STAKE()", +"ed0b1cb3": "LLV_311_EDIT_1()", +"ed0bce14": "Cryptolotto1Day(address,address,address,address)", +"ed0c4123": "tokensPaid(address)", +"ed0c7091": "resignOwnership()", +"ed0cc2e1": "balancesUploaded()", +"ed0cdfdb": "MonsterAuction(address,uint256)", +"ed0e4665": "AVAILABLE_ADVISOR_SUPPLY()", +"ed0e92e5": "removeControllerContract(address)", +"ed0f22d5": "Start6()", +"ed1062ba": "CallExecuted(address,bytes32)", +"ed10e33c": "unLock()", +"ed11a690": "STARTING_TURTLE()", +"ed11d089": "Fortecoin()", +"ed129c2d": "printMarket()", +"ed12e8ef": "getVaultBalance()", +"ed1426e6": "purchasePixel(uint256,uint256,uint256)", +"ed148ea7": "testEnsFail()", +"ed149514": "setPartners(address,address)", +"ed14b6a5": "takeOver()", +"ed14d17e": "collectRevenue()", +"ed156449": "HeroCoin(address,address,address,address)", +"ed15863a": "bookWeekVisit(uint256)", +"ed15c31d": "Token10xAmin()", +"ed15c5e6": "targetDiscountValue6()", +"ed15dafd": "LBToken()", +"ed1627e9": "closeThisTurn()", +"ed17dab7": "tokensDistributedPresale()", +"ed17faa8": "setPlayerDayEthInLimit(uint256)", +"ed180443": "getUint256(int256)", +"ed185562": "presaleDeadline()", +"ed18838c": "setAutoBuy()", +"ed188f33": "cSale()", +"ed18bc3f": "Slot(address)", +"ed18ecae": "scan(address,bytes1)", +"ed18f0a7": "blue()", +"ed190746": "testSplit()", +"ed1923ee": "mediumRate()", +"ed1a9ca1": "returnsOneUnnamed(uint256,uint256)", +"ed1b71ea": "registerUser(address,address,address)", +"ed1ba837": "PensionFundRelease(address[],address,address,uint8,uint256,uint256,uint8,address)", +"ed1d4870": "changeReceiver(uint256,address)", +"ed1d840d": "getPriceForAssetAmount(address,uint256)", +"ed1ece04": "mineCard()", +"ed1eee68": "getFee(string)", +"ed1f1656": "totalaccumulated()", +"ed1f2229": "distributeForBountiesAndAdvisors()", +"ed1f9991": "getParticipantIndexAddress(uint256)", +"ed20f370": "debundleAndWithdraw(uint256)", +"ed21187a": "getInvestorsCount()", +"ed21248c": "Deposit()", +"ed214fff": "getParticipantList()", +"ed21a7e7": "Airsavecoin()", +"ed225a8a": "equipmentTrainingFeeMultiplier()", +"ed22671d": "set(bytes32,bytes32,bytes32,bytes)", +"ed22c02f": "SGEPreICO()", +"ed23378b": "getMarketCreatorMailbox()", +"ed234e20": "addCompany(address,string)", +"ed23e5b7": "requestObjectRoot(bytes32,uint256,uint8,bytes32,bytes32)", +"ed244fcd": "getAccountValues(uint16,uint8)", +"ed24e3e0": "CryptoABS()", +"ed25ba8c": "blinc_block()", +"ed25e6c2": "expand(uint32[4],uint32[26])", +"ed2648d3": "setCCH_edit_14(string)", +"ed26cae8": "contains(address,address)", +"ed26e60d": "GetReserveAmount(address)", +"ed26fc86": "SnowBall()", +"ed287795": "transferFromAndLock(address,address,uint256,uint256,uint256)", +"ed28d37f": "TokenOne()", +"ed28ef51": "addManyUsers(address[])", +"ed29211b": "claimReward(address,uint256,address)", +"ed29c12b": "MFI()", +"ed2a2d64": "nonceOf(address)", +"ed2b5a3c": "getBorrowRate(address,uint256,uint256)", +"ed2b8e0b": "getPoolRotationDelay()", +"ed2c92b1": "finalizeLastCampaign()", +"ed2cbf06": "_deliverTokens(address,uint256)", +"ed2d1d9e": "goodNightSweetPrince()", +"ed2d4a1b": "process_game()", +"ed2ddeae": "claimAllSupporterTokensByOwner(address)", +"ed2de952": "setInvestorsStorage(address)", +"ed2df26d": "getGameResult(uint256)", +"ed2e3f7e": "ChainBankToken(uint256)", +"ed2e5a97": "read(uint256)", +"ed2eb843": "withdrawEther(address,address,uint256)", +"ed2f2369": "activeStakes()", +"ed2f5b1a": "getRestoredTransactionStatus(uint256)", +"ed2fbf96": "timesno()", +"ed3058e0": "transferRight(address,bytes)", +"ed30ec8f": "_validFee(uint256,uint256)", +"ed319520": "_validateTokensLimits(uint256)", +"ed3375f5": "RSPLT_I()", +"ed338ff1": "saleEndTime()", +"ed3390ea": "findBest(uint256,uint256)", +"ed33e00c": "participantClaimCredits()", +"ed33fba7": "PitisCoin()", +"ed3411dc": "register(bytes20,uint24,uint32,bytes32[],uint16)", +"ed3437f8": "scalingFactor()", +"ed343f65": "totalDropPerUnlockedToken()", +"ed34ca2e": "ThePlat()", +"ed355b0b": "getBestInvestor()", +"ed361694": "failSafeMode()", +"ed361c17": "burningCapableAccount(address[])", +"ed3643d6": "checkSignersByName(bytes32,uint256,uint256,uint256)", +"ed36a874": "getOracleAddressByName(string)", +"ed3788c9": "futureDevelopmentPoolAddress()", +"ed3831ae": "p_count(uint256)", +"ed39eab3": "HGT()", +"ed3a2164": "PrincelyGoldenDollar()", +"ed3a865e": "raceId()", +"ed3ad43e": "finalizeDeprecation(uint256,address)", +"ed3b4eca": "setMinAmount1Round(uint256)", +"ed3d4dc1": "POWM()", +"ed3e3e0b": "update_counts(uint256)", +"ed3e46ae": "tipHash()", +"ed3f1c87": "allowAccess(address,address)", +"ed3f443f": "getMyBetRecordCount()", +"ed3fd0d7": "EVMScriptRegistryFactory()", +"ed40175d": "testFailOnFailedCall()", +"ed4080b1": "getPreminerAllocation(address,uint256)", +"ed40a8c8": "getWord()", +"ed4127df": "CANVAS_HEIGHT()", +"ed429d1b": "_amountCourse()", +"ed43191d": "DataRecordStructs(bytes32)", +"ed442e14": "getDividends()", +"ed45747f": "editCell(address,uint256)", +"ed45c9be": "getAllTheThings()", +"ed45e578": "getAttoTokensLeftForICO()", +"ed46eb52": "deleteCaller(uint256)", +"ed47ca94": "debug_verifySharesTreeSubmission(uint256[],uint256[],uint256,uint256,uint256,uint256)", +"ed49196b": "auctionleader()", +"ed498fa8": "userTokens(address)", +"ed49d2f8": "maxDelay()", +"ed4ae6b5": "isValidVoting(address)", +"ed4b1d0d": "scheduleTransaction(uint256)", +"ed4c1cdd": "xauToEur()", +"ed4c1d97": "syncToken()", +"ed4c87ac": "startProject(string,address,address,address,bytes,uint8,uint8,uint8,bool)", +"ed4dd2ab": "SECOND_TIER_DISCOUNT()", +"ed4e65fb": "noStoreIsActive()", +"ed4e73da": "signedTransferFrom(address,address,address,address,uint256,uint256,uint256,bytes,address)", +"ed4f114d": "ConversionRateChange(uint256)", +"ed4f2b33": "setup(uint8,bytes32[])", +"ed4f415e": "Holahop()", +"ed505d3e": "totalAmountOfPresalePurchasesWithoutBonus()", +"ed50dd4e": "ChiSale(address,uint256[],uint256[])", +"ed52068c": "revokeBurnDelegate(address)", +"ed526601": "greenOnFanChun()", +"ed54746e": "lastAuction()", +"ed550443": "proxyContract()", +"ed561fe5": "receiveSecurityDeposit(address)", +"ed56531a": "pause(bytes32)", +"ed5667b4": "transferOfPower(address)", +"ed5677f6": "tierThreeMin()", +"ed56de8c": "withdrawZRX(uint256)", +"ed5850b9": "register(address,uint8,bytes32[5],address)", +"ed5863f6": "agaisnt_votes()", +"ed58bad8": "setAuthorizedMinter(address,bool)", +"ed58c840": "transferGu(address,uint256)", +"ed58d5ec": "setLendingContract(address)", +"ed59313a": "setUsername(string)", +"ed598be7": "TenantMoveIn(string)", +"ed59eda1": "_addSuperInvestor(address)", +"ed5bc87b": "fundedProxy()", +"ed5c58f3": "set0xTokenProxy(address)", +"ed5d2289": "latchFciUser(uint256)", +"ed5d3f1a": "pow_10(uint256)", +"ed5d6fbc": "completion()", +"ed5da4f9": "computeReturnBonus(uint256)", +"ed5dc952": "getIsRoundOver(uint256)", +"ed5e68f9": "closeAnnualInvest()", +"ed5e7691": "CrowdCoinPreICO(address,address,address)", +"ed5e8437": "locks(bytes32)", +"ed5eafa2": "ClinicalTrial(address,address,uint256,uint256,uint256,bytes32,bytes)", +"ed5ec919": "voidTransaction(uint256)", +"ed60ade6": "bidOnSiringAuction(uint256,uint256)", +"ed611895": "ManualChangeUnholdDate(uint256,uint256)", +"ed6183bf": "isWinner(uint8,uint8[5],uint8[5])", +"ed621591": "KaratBankCoin()", +"ed621ae1": "PriceWeekFour()", +"ed621df6": "GuessNumber()", +"ed621e9a": "addWhitelistUsers(address[],uint256[])", +"ed621f0f": "YUN(uint256,string,uint8,string)", +"ed62543d": "bttsToken()", +"ed62986b": "_getBattleResult(int256,int256,int256,int256,uint256)", +"ed62cf1f": "setCanCall(address,address,bytes,bool)", +"ed62f501": "maxPendingPayouts()", +"ed6302be": "left98(uint256)", +"ed63455c": "stringContains(string,string)", +"ed644025": "X5Coins(uint256,string,string)", +"ed64b36b": "left15(uint256)", +"ed64bea4": "JamCoin()", +"ed64c08c": "clearBudget(address)", +"ed653164": "releaseEscrow(uint256)", +"ed654fd7": "logCompleteSetsSold(address,address,address,uint256)", +"ed666e96": "artsCreatedCount()", +"ed67bca3": "_finalize()", +"ed67e002": "getFreezeTime()", +"ed684cc6": "trigger(uint256)", +"ed68ece1": "newFeed(string)", +"ed68ff2c": "setRequireSignedAddress(bool,address)", +"ed6a2bc9": "LLToken(uint256,uint256,address)", +"ed6a2d35": "Blincoin()", +"ed6a897d": "teamTokensHolder()", +"ed6b2d7d": "extractTokens(address,address)", +"ed6b40c0": "PRICER_DELAY()", +"ed6b5ad5": "pauseSwap()", +"ed6bcd84": "TransactionPending(uint256,address,address,uint256,uint256)", +"ed6bd807": "phase2StartTime()", +"ed6be066": "charitySpaceToken()", +"ed6bf091": "changeEndDate(uint32)", +"ed6bfa2b": "toggleDeposit(bool)", +"ed6c3e84": "blockStart(uint64)", +"ed6cb909": "transferAddress(address)", +"ed6cd5d3": "get_recipient_balance()", +"ed6cd66d": "CreateUKGEvent(address,uint256)", +"ed6d4055": "SBIBank(address)", +"ed6d8521": "VULToken()", +"ed6d9169": "pushBounty(uint256)", +"ed6d969a": "addSegmentation(address,uint256,uint256,uint256)", +"ed6db106": "_HUNDRED()", +"ed6e7f7a": "processMutuallyAgreedJobCancellation(bytes16,address,address,uint256,uint256,uint8,bytes,bytes)", +"ed6e85c7": "installDonationContract(address)", +"ed6eba84": "getLockedUserDeposits(bytes32)", +"ed6f0792": "askOracle()", +"ed70d83c": "setRefProgram(address)", +"ed70e032": "_removeAvatar(address)", +"ed713d55": "ZerroXBToken()", +"ed71cfb3": "isDepositContract()", +"ed724103": "isRoundOneSalePeriod(uint256)", +"ed7305ea": "Enrium(uint256,string,uint8,string)", +"ed732ddb": "placeBet(uint256,uint256,string)", +"ed73b6a6": "PariMutuel()", +"ed743556": "YISSToken(address,uint256)", +"ed74de9d": "clone(address,uint256,uint256)", +"ed7510a0": "registerContributorPool(address,uint256)", +"ed7546b7": "_checkEvenIfCommBallot(bytes32)", +"ed769922": "buypr0coinsAgainstEther()", +"ed782750": "ICONIQ_TOKENS_NEEDED_PER_INVESTED_WEI()", +"ed785e29": "PresaleBREMP(address,uint256)", +"ed786cd6": "getCurrentWeek(uint256,uint256)", +"ed78cf4a": "potSwap()", +"ed793207": "_burnRemainingTokens(uint256)", +"ed7a1548": "updateSecondExhangeRate(uint256)", +"ed7a4e0b": "winnerAddress()", +"ed7a96e7": "saleInProgress()", +"ed7ad2d2": "createDeposit(uint256,bytes)", +"ed7b4753": "BULL()", +"ed7c238d": "getFileName(uint256)", +"ed7caa8e": "profitOrgPay()", +"ed7ce71a": "KWRT()", +"ed7dd693": "PlaceNewForecast(bytes32,bytes32,bytes32,bytes12)", +"ed7eff2b": "setConvertContract(address)", +"ed7f8deb": "refRewardL1Per100()", +"ed80577d": "offerBtc(address,uint256,bytes32)", +"ed806207": "isInt128ValidIn64(int128)", +"ed810cfa": "emitBurnEvent(address,uint256)", +"ed810d02": "tokensSentMain()", +"ed815d83": "query(bytes)", +"ed81a68e": "edgeRange()", +"ed81cdda": "rootOwnerOfChild(address,uint256)", +"ed81f681": "currentDayOfWeek()", +"ed824f2f": "tokenETHAmount()", +"ed82cac9": "toEthers(uint256)", +"ed83e9aa": "YDHTOKEN(string,string,uint256)", +"ed83eb7d": "FileStorage()", +"ed84115e": "publisherMessage()", +"ed857bfd": "BitmassExchangeToken()", +"ed861328": "submitStack(uint256,uint256,uint256,uint256,uint256,bool)", +"ed861e13": "managerCountInt()", +"ed864190": "testMultipleGetters()", +"ed86d9c7": "playSpecificTriples(uint256,uint256)", +"ed879c77": "computeNextSystemSalePrice()", +"ed885897": "getTotalPot(uint256)", +"ed88c68e": "donate()", +"ed8991fb": "balanceMap()", +"ed89b2a0": "calculateQuantityBonuses(uint256)", +"ed89e864": "SupplyChanged(uint256,uint256)", +"ed8a4116": "_resetPotatoes()", +"ed8a73a3": "developer_edit_text_crowdsale(string)", +"ed8a9c0f": "clearExpiredFreezing(address)", +"ed8b6556": "getJackpotAmount()", +"ed8b9059": "set_withdrawal_gas(uint256)", +"ed8bfa4d": "drainSMS()", +"ed8c2aed": "closePoll()", +"ed8d806b": "largestHODLERAddress()", +"ed8df164": "New(string,bytes32)", +"ed8e690b": "MessageUpdated(uint256,address,string)", +"ed8e873c": "gvAgent()", +"ed8e9f2c": "LogUnfinalized(uint256)", +"ed8f02d0": "tokenValuePublish(uint256,string,uint256)", +"ed8f10df": "testSign()", +"ed8f11de": "Evocoin()", +"ed8fe3c1": "totalTRsWon()", +"ed8fee35": "MSCE()", +"ed90c7b7": "deleteProduct(uint256)", +"ed918136": "Pilfered(uint256,uint256,uint256)", +"ed91c906": "stopGo()", +"ed927dae": "bytes32ToString(bytes32,bytes32,bytes32)", +"ed92f0a0": "BTC7500on49()", +"ed93a8c9": "Bet0xgame(string,string,uint256,uint256,string)", +"ed93ca26": "startTimeDay()", +"ed950638": "whitelistRegistry()", +"ed952728": "getProposalHash(address,uint256,bytes)", +"ed953b69": "keyLocked()", +"ed95f52b": "startMark()", +"ed981d4f": "calculateNeededCollateral(uint256,uint256,uint256,int256,uint256)", +"ed98f12c": "EthearnalRepTokenCrowdsale(address[],address,address)", +"ed996590": "processWhenStop()", +"ed9978c7": "language()", +"ed9980a6": "numPayTables()", +"ed9a3ac1": "bidProxy()", +"ed9a3d2e": "isCustomerinBL(address,address)", +"ed9a6a65": "tokenVendor1()", +"ed9b0107": "get_senderCryptobank(uint256)", +"ed9bb8d7": "getTweets(uint256)", +"ed9beb05": "setICO(bool)", +"ed9c6d53": "getCCH_edit_9()", +"ed9c7c11": "validateTAOSignature(string,uint256,address,string,uint8,bytes32,bytes32)", +"ed9ca4ff": "setAllowedToPurchase(bool)", +"ed9cf58c": "setToken()", +"ed9d2d79": "transferTeamTokens(address,uint256)", +"ed9d7dd3": "transferCommissionGetter(address)", +"ed9da760": "uniq(uint128[])", +"ed9e3ca2": "addAuditAddress(address,address)", +"ed9f18fb": "setMinStake(bytes32,uint256)", +"ed9f4010": "getATokenHolder(uint256)", +"ed9ff004": "privateStage()", +"eda003ce": "setSaleController(address)", +"eda0576b": "seeZombieRole(uint256)", +"eda09d80": "SELLER_CHECK_STEP(bytes32)", +"eda1122c": "redeem(bytes32)", +"eda14233": "timeStampOfCrowdSaleEnd()", +"eda20bc9": "completeFailed()", +"eda23f20": "getListTempHolders()", +"eda2a0af": "calcPayouts(bool[])", +"eda30c9e": "delGame(address)", +"eda4597f": "fake_airdrop(address,address,uint256)", +"eda4e6d6": "periodStart()", +"eda50e33": "addDescription(string,uint256)", +"eda5d80b": "test_startNumber()", +"eda5de7c": "toggleDrain()", +"eda5ffdc": "newWork(uint256,uint256,uint256,address)", +"eda6e2db": "EarlyContribReceipt(address,uint256,bytes32)", +"eda70f7e": "expiredCount()", +"eda71f6e": "getEstimateObligation(bytes32)", +"eda8669e": "setAtomCool(uint256,uint8)", +"eda89279": "getAuctionEnd(uint256)", +"edaa6a8d": "Sylence()", +"edaaeed2": "DT()", +"edac3cb3": "popExperience()", +"edac985b": "addWhitelist(address[])", +"edacfd25": "invalidateHashes(bytes32[])", +"edad7f9b": "VestingContract()", +"edad8585": "tokenIssuedPreFirstIco()", +"edadeb26": "initCommunityAddr(address)", +"edae7771": "setKingdomCreationFeeWei(uint256)", +"edaebc20": "getTrait(uint32)", +"edaee1dc": "buyAnimalsFromUser(uint256)", +"edafe588": "feeSharingBps()", +"edb04c12": "OpenWindow(uint256,uint256,address)", +"edb08434": "mint(int256,address,uint256,bool,uint32)", +"edb0bb3a": "updatePrice(uint256,uint256,uint256,uint256,uint256)", +"edb0f2ca": "MockGetTogether()", +"edb1072e": "buyWithTokensBy(address,address)", +"edb17d10": "join_refund(uint256)", +"edb25841": "getOrder(address,uint256)", +"edb27f4e": "switchWizard(address)", +"edb2b809": "nextGameCost()", +"edb3623f": "goldTransfer(address,uint256)", +"edb41dec": "onRoundEnd()", +"edb5d946": "fillSell(address[8],uint256[6],uint8,bytes32,bytes32)", +"edb649de": "updateReferalBonus(uint256)", +"edb78e36": "claimBonus(address,address,uint256)", +"edb9548c": "_increasePrice(uint256)", +"edb961ff": "toHexString(bytes32)", +"edbae7c6": "setSaleAdvertisementRate(uint256)", +"edbb1d43": "savings_goal()", +"edbe32c4": "getTradeOfferState(uint256)", +"edbea0b1": "mintWallets(address,address,address,address,address,address,address,address)", +"edbeee22": "getItemTypeIdByTypeAndId(string,uint256)", +"edbf4ac2": "initialize(address,address,uint256,uint256,uint256,uint256,uint256)", +"edc0aee6": "createPlayerMatch(uint256,uint256,uint256,uint256,uint256)", +"edc11a11": "isReadyToFight(uint256)", +"edc19a81": "safeTransferFromWithFees(address,address,address,uint256)", +"edc1ab6a": "announce_therand(uint32,bytes32)", +"edc1e4f9": "setAllowanceSheet(address)", +"edc25f42": "calcRefill(string,uint256)", +"edc2ee4e": "configOf(uint256)", +"edc31e14": "testExecuteSellOrderShouldIncreaseSellerBalance()", +"edc3b4db": "getCharacterNuja(uint256)", +"edc41d06": "canCloseVoteRevealPhase(address,bytes32,bytes32)", +"edc423e6": "cancelChangeOracle()", +"edc427fc": "pullEtherFromContractAfterPreICOPublic()", +"edc42b2d": "changeWhitelistedContract(address)", +"edc48941": "buyByAtom(uint256)", +"edc62aaf": "_generateRandomPart(uint256,address)", +"edc6454d": "SaleToken(string,string,uint256)", +"edc65c83": "setOraclizeCallbackGas(uint256)", +"edc74092": "determineOutcome(uint256,uint256,uint256,bool)", +"edc7aeda": "HYCToken()", +"edc7bcf5": "EscrowContract(address,address,uint256,address)", +"edc7d4ab": "changeOriginWalletIdForAthlete(uint256,address)", +"edc922a9": "getProviders()", +"edc93066": "CompShare1()", +"edc94527": "TgeProxy()", +"edc9f182": "migrate(address,uint40,uint40)", +"edca1e40": "blike()", +"edca371d": "BuySeed()", +"edca914c": "buyTicket()", +"edcb3c08": "IsInitAssign()", +"edcb9e9e": "updatePayout(address)", +"edce50de": "deposit(bytes32,uint256,uint256,address,uint256)", +"edcf2ad4": "_addLegitOwner(address)", +"edcf4d56": "deletePriceValue(bytes32)", +"edcf6b26": "getVersion(string,string,uint256)", +"edcfd050": "advisors()", +"edd004e5": "next(uint256)", +"edd0b5cb": "getFeeRatio(address)", +"edd0d90d": "__max__(uint256,uint256)", +"edd13e38": "mediumFunding()", +"edd19ded": "PaymentManagerUpdated(address,address)", +"edd1d02e": "getNextFeeWindow()", +"edd20050": "LOG_SuccessfulDraw(address,uint256)", +"edd21840": "calculateKnowledgeSell(uint256)", +"edd27b8f": "setDestroyThreshold(uint256)", +"edd36afd": "ProjectValidation(address,address,address,address[],address)", +"edd3896c": "ShowWhaleAddress()", +"edd3def5": "setTmpWriteTimestamp(bytes32,uint256)", +"edd3ff84": "isSponsorableJobApproved(address,uint256,address[])", +"edd403a9": "TOP1000()", +"edd40c3c": "setMnyTiers(address)", +"edd57e32": "_decodeTokenId(uint256)", +"edd5ede6": "passTo(uint256,uint16[],uint8,bytes32,bytes32,address)", +"edd634b8": "fullPrice()", +"edd637ca": "CreateCRS(address,uint256)", +"edd637d0": "bonus(address,address)", +"edd6705a": "changeExchangeRate(uint256,uint256)", +"edd6cfb1": "removeStudent(string)", +"edd6fb16": "countConfirmed()", +"edd70a75": "removeContractRole(bytes32,string)", +"edd7716a": "checkVotingForChangeBuySellPrice()", +"edd7bb75": "changeBet(uint256)", +"edd7ca6f": "getInterest(address,address)", +"edd7fcc4": "_createPermission(address,address,bytes4,address)", +"edd83104": "amended(address)", +"edd8dd89": "CalculationUpdate(uint256,uint256,uint256,uint256,uint256,uint256)", +"edd94fb9": "setBaseEthCap(uint256)", +"edd9e183": "feedUnicorn(uint256)", +"eddb00d4": "placeBuyOrder(uint256,uint256,uint256,uint256)", +"eddb53e1": "TokenWithdrawal(address,uint256)", +"eddce76b": "testFailDisownNotTransferable()", +"eddd0d9c": "setMintFee(uint256)", +"eddd2d39": "getResourceERC20Address(uint16)", +"eddd9d82": "tokenController()", +"edddb350": "getAccessorySeries(uint8)", +"edde6407": "_transfer_byProxy(address,address,uint256)", +"edde8349": "random_num()", +"edde9145": "PlaceSellOrder(uint32,uint256)", +"eddf3a48": "BsToken_STN()", +"eddfcffa": "getDealsLength()", +"ede02b71": "bleach(uint128,uint128)", +"ede05887": "getActiveContractRecordConcat(string)", +"ede2271c": "DOO()", +"ede340ec": "getEloRating(address,address)", +"ede38421": "totalStakedForAt(address,uint256)", +"ede3d9d5": "returnDynamic()", +"ede42186": "gettotal_Supply()", +"ede48fb7": "triggerEvent()", +"ede4edd0": "exitMarket(address)", +"ede5a07d": "getSquareArea(uint256)", +"ede5f66f": "getNumberMilestones(uint256)", +"ede729ad": "expertTokensPerEth()", +"ede778d2": "EventCancelAuction(uint32)", +"ede78573": "EDT2()", +"ede8acdb": "startAuction(bytes32)", +"ede8af01": "getNextGameId()", +"ede8cf8f": "RaidenToken(address,address,address,address,uint256)", +"ede8e035": "FITN()", +"ede8ebf3": "checkApprove(address,uint256)", +"ede8eed4": "MemberAdded(address,uint256)", +"ede930c9": "changeOwnershipto(address)", +"ede963d1": "isAddressExpired(address,uint32)", +"edea3e5d": "createFincontractWithParties(address,address,bytes32)", +"edeb34f7": "GrantsControlled()", +"edeb4ea9": "howMany(uint256)", +"edeb797c": "getNumOptions(uint256)", +"edebb8c5": "generateCryptsyToken(uint32,uint32,uint32)", +"edecde0e": "withdrawAllChannels(address)", +"eded5d9e": "getColor(uint256,uint256)", +"ededb770": "payeeWithdrawInterest(uint256)", +"edede601": "testBalance()", +"edeeb143": "minPlay()", +"edef8bdd": "teamStakesFrozen()", +"edeff589": "giveMeSomeBBUCKs()", +"edf049f7": "sendPer3()", +"edf0b0df": "getPositionCount(address,address)", +"edf0d328": "setBlockDotCoinbase(address)", +"edf0ede3": "withdrawTokenUser(address,uint256,address)", +"edf1da66": "GxOrderList(address)", +"edf1eeb0": "oraclize_useCoupon(string)", +"edf26d9b": "addresses(uint256)", +"edf2d2a2": "setWithdrawGasOverhead(uint256)", +"edf2f745": "notifyTerminate(uint256)", +"edf3cbb1": "TeamDisqualified(address)", +"edf4a403": "getRateWithBonus()", +"edf53886": "addressToUser(address)", +"edf576d1": "MaybePerformClose()", +"edf5c0c0": "getChannelList()", +"edf6466d": "NewMayor(address,address)", +"edf6601c": "getMintRequestStatus(uint256,int256)", +"edf69f2b": "iCarChain(uint256,string,string)", +"edf6fb4b": "isBiometricCompleted(bytes32)", +"edf8333d": "transferFromNonprofitdisbursementfund(address,uint256)", +"edf87aff": "createUint256s(bytes32[],uint256[])", +"edf89793": "routingCodeMap(bytes32)", +"edf92ff3": "rentModified(address,uint256)", +"edfa45e6": "GetMyProd()", +"edfab4fc": "receivedWeiCap()", +"edfb4175": "getRollResults(uint256,uint8,uint8,uint256,address)", +"edfb4191": "getInterestCount()", +"edfbda27": "_addNFToken(address,uint256)", +"edfbf7b6": "setVotingDeadline(uint256)", +"edfbf9cf": "addService(string,string,int256,uint256,uint256)", +"edfceace": "deleteStrategy(bytes15)", +"edfd2f81": "percentageRecipient3()", +"edfd786e": "uint2str()", +"edfdd9d8": "coolduwnUP(uint32)", +"edfe5483": "IQFToken()", +"edfe676b": "refundPlayersAfterVeryLongGame()", +"edfea70c": "playerProfit()", +"edff2702": "window0TokenExchangeRate()", +"edffe3e8": "setAddressF1F2(address,address)", +"edfffca0": "minedToken()", +"ee00362f": "strToOperator(bytes32)", +"ee007a54": "pickRandomAssets(uint256,bytes32[])", +"ee00adcd": "ICOEndedSuccessfuly(uint256,uint256,string)", +"ee00dd43": "getEventFirst(uint256)", +"ee0145f3": "calcETCtoCOR(uint256)", +"ee0186b6": "buyPreSale(address,uint256)", +"ee029de1": "exchangeInterval()", +"ee0446b2": "approvedAmount(address)", +"ee0465d3": "BetComplete(bool,uint256,uint256,uint256,address,uint256)", +"ee04b4b9": "rescueIndex()", +"ee069097": "getAllFunding()", +"ee06eece": "Opulentos()", +"ee070805": "disabled()", +"ee0715ed": "updateRenExBalances(address)", +"ee071aad": "hasCollectedWinnings(address)", +"ee07a22c": "MakeDai(address,address,uint256,uint256,uint256)", +"ee07bf22": "Supply()", +"ee08022a": "getNumRegularTokensBought(address,address)", +"ee08388e": "parentOf(address)", +"ee08fcf3": "getAttributesForAssets(uint256[])", +"ee091034": "IcoDiscountPercentagesChanged(address,uint8,uint8,uint8)", +"ee095c0e": "endRaffle()", +"ee09a001": "_saveAndTransfer(uint256,uint256,uint256)", +"ee09ae4a": "ethFundManager()", +"ee09d27c": "Result(address,string)", +"ee0a8011": "grantCoins(address,uint256)", +"ee0b04be": "claimTokensFor(address)", +"ee0b0eb0": "IotWifitoken()", +"ee0b5445": "transferStorageOwnership(address)", +"ee0b5d8b": "getPlayerInfoByAddress(address)", +"ee0c0346": "changeSupervisor(address)", +"ee0c3e02": "tradeEventHandler(address,uint256,address,uint256,address,address,bytes32,uint256)", +"ee0cb64c": "weekFourthRate()", +"ee0d605c": "authenticate(bytes)", +"ee0d93ce": "optionInitialSupply()", +"ee0d9c61": "withdrawXPI(uint256)", +"ee0dc478": "testSetEnforceRevisions()", +"ee0e21a0": "Amount(uint256)", +"ee0ebe0c": "packageCount()", +"ee0f1d6b": "checkPlayerClaimed(uint256,address)", +"ee0f809e": "buyTulip(bytes32,uint16)", +"ee0fcc75": "setScore(address,uint256)", +"ee0fdd0f": "pledgeTokens(uint256,uint256)", +"ee10a45d": "EMPresale()", +"ee112b59": "Aereum(uint256,string,string)", +"ee11ab9d": "getCEdetails(bytes32)", +"ee1333a1": "setProviderWebsite(uint256,string)", +"ee1374a2": "transferAdvisor2Tokens(address,uint256)", +"ee13e042": "Vix18Coin()", +"ee15b84b": "TokenFulfillment(address[2],uint256[8],uint8,bytes32[2],uint256)", +"ee15ee31": "PartnersAddress()", +"ee166bba": "setOfferSize(uint256)", +"ee16bf57": "FailSafeActivated(bool)", +"ee16c7bd": "GetTickSize(uint256,uint256,uint256)", +"ee172546": "totalRewardsDistributed()", +"ee174697": "winnerAnnounced()", +"ee179857": "addVestingGrant(address,uint256,uint256,uint256)", +"ee1879ef": "makeRecorderID()", +"ee192d13": "createRoom(uint8,uint8)", +"ee196fb8": "doApproval()", +"ee1971ea": "getOwnersBalance()", +"ee19a7fc": "getReleaseBlock(address)", +"ee19bfb5": "increaseWorldCorner(uint64,uint64,uint64)", +"ee19c6dd": "setTether(address,uint256,uint32,uint256)", +"ee19fbec": "stop_service(uint256,uint32)", +"ee19fe96": "minSiteTipPercentage()", +"ee1a4b5a": "sT2()", +"ee1a6295": "bonusEndTime()", +"ee1ae93b": "executeRecallCapital(address,uint256)", +"ee1b4828": "closeBooks()", +"ee1bb82f": "SetURI(uint256,string)", +"ee1c888a": "setEnableBuyAndSell(bool)", +"ee1ce841": "getKeyCount()", +"ee1d036c": "getVestingQuantity(address,uint256)", +"ee1df50d": "poolStartDate()", +"ee1df98e": "LTO()", +"ee1e61b2": "currentFundingStage()", +"ee1e84f6": "performRefereeDecision(uint256,uint256)", +"ee1ec46c": "MembersLength()", +"ee1f5a7f": "setEtherWallet(address)", +"ee1fae7f": "setMaxBatchAssignment(uint256)", +"ee1fc2e6": "decreasePreSaleSupply(uint256)", +"ee1fe2ad": "mint(address,address)", +"ee207e07": "getTimeBonus()", +"ee2089b2": "setPresale(address,bool)", +"ee20e493": "CloudX()", +"ee20e784": "setAllowance(address)", +"ee20f05c": "generatePseudoRand()", +"ee2127c8": "RATE_TIER2()", +"ee216932": "getIcoPhaseOneTokenPriceInPoundPences(uint256)", +"ee216ff5": "setPresaleClosingTime(uint256)", +"ee21aa64": "_getBalance(address)", +"ee224707": "withdrawAllocation()", +"ee22610b": "executeTransaction(uint256)", +"ee2269e5": "returnPtSafeLarge()", +"ee228dec": "createQueue(bytes32,bytes32,bool,bytes32,bytes32,bool)", +"ee22adf8": "_recomputeAccountLastAverageBalance(address)", +"ee2316db": "rand2()", +"ee2383a6": "CreateCampaign(uint16,uint16)", +"ee23a94a": "setSpecialPrice(address,uint256,uint256)", +"ee23e7f7": "runTime()", +"ee245b53": "setFishbank(address)", +"ee24b5e4": "historyBlue(uint256)", +"ee24bba8": "htoa(address)", +"ee255c57": "controllerAddr()", +"ee259ff2": "buyWithEther()", +"ee25f580": "consumeMsg()", +"ee2661ca": "operationalSplitPercent()", +"ee2679bc": "auctionStarted()", +"ee26ab66": "distributeEbyteForEBYTE(address[])", +"ee26bf68": "LogSetup(address,uint256,uint256)", +"ee27ab57": "endFirstDayICO()", +"ee27ac98": "set_new_dividend_share(uint256)", +"ee27e707": "buy(uint8,bytes)", +"ee280f89": "lotteryByETH(address)", +"ee28b744": "getClaimable()", +"ee28ea62": "acceptEscrow(uint256)", +"ee295b32": "Erc20Token(string,string,uint8)", +"ee298d19": "winningChanseSt()", +"ee29ce15": "shareKey(bytes32,address)", +"ee2a0c12": "setPrivateSaleAddress(address)", +"ee2a1ec1": "_removeTokenFromBarn(uint256,address)", +"ee2aab77": "canSend(bytes32,address,address,uint256,bytes,bytes)", +"ee2af3fb": "set_factory(address)", +"ee2b78a1": "minPurchaseQty()", +"ee2c4fec": "PARTNER_SALES()", +"ee2d2490": "bidfailure()", +"ee2dbd8c": "_addSigner(address)", +"ee2dbf86": "hasvote()", +"ee2e66c7": "CryptoSlotsCrowdsale()", +"ee2eba5b": "updateUserClaimInBulk(address[],uint256[])", +"ee2ee146": "unlockTokenForExchange(address)", +"ee2ef6ec": "makeItSellable(uint256)", +"ee2ef9d9": "midasDepositAddress()", +"ee2f00a8": "totalPresaleCount()", +"ee2faf74": "setCrowdsaleBlocks(uint256,uint256,uint256,uint256)", +"ee2fbf3a": "privateFundingSupply()", +"ee30839f": "IkuraMint(address,uint256)", +"ee314997": "calculateTotalGamePrize()", +"ee31bf00": "quickChange(uint256,address[],uint256)", +"ee31eb04": "setBrickAddress(address)", +"ee31f9f6": "totalSupplyTmp()", +"ee3244aa": "unreg_bountyHunter(address,address)", +"ee331490": "Addition(uint256,uint256)", +"ee339fd7": "Pruebacoin123()", +"ee33a04e": "recordId(address)", +"ee33c5f0": "_updateCompanies(bytes32[],bytes32[])", +"ee34c6ad": "hybridizationExists(uint256)", +"ee35478a": "tokenMarketPool()", +"ee355b1f": "cancelTicket(uint256)", +"ee359959": "refundGameAfterLongInactivity()", +"ee360ff0": "transferTokensToDividendManager(address)", +"ee362d3d": "ACATokenSale(address,uint256,uint256,uint256,address)", +"ee36d4ab": "placeBuyOrder(uint256,uint256)", +"ee3711be": "Storage()", +"ee3743ab": "nextStage()", +"ee378610": "etherToTokens(uint256)", +"ee37e271": "setSaleType_Presale(uint8,uint8,uint32,uint256,uint256)", +"ee38232f": "updateNota(uint256,string,string)", +"ee386beb": "TokensPerKEtherUpdated(uint256)", +"ee389b94": "TenToken()", +"ee38c7d3": "BONUS_ICO_STAGE1_PRE_SALE5()", +"ee38cad3": "setYxName(address,address,string)", +"ee39e7a0": "getK()", +"ee3a0229": "processBTCTransaction(bytes,uint256,address,bytes20)", +"ee3a5075": "removeEthInvestorRequest(uint256)", +"ee3a8816": "TheSwifthDAICO(address,address,address,address,address,address,address,address)", +"ee3c3bad": "isAllowedPurchase(address,uint256)", +"ee3cc63d": "MSP(address)", +"ee3d2f07": "massClaim()", +"ee3e3e2a": "tokensPerOneEther()", +"ee3e8a02": "enableSaleOwner(address)", +"ee3ec146": "calculateAccountValuesInternal(address)", +"ee3f1bc7": "changeVoters(address,string)", +"ee4024db": "setAdmin(bytes32,address)", +"ee40a13c": "addNewReport(string)", +"ee40b9bc": "TestRo(uint256,string,uint8,string)", +"ee40d7c6": "SvelteyCoin(uint256,string,uint8,string)", +"ee41858e": "addBlock(address,uint256,uint256,uint256,uint256)", +"ee41ed47": "insertCase(uint256)", +"ee422f13": "borrowItem(uint256)", +"ee428514": "CPTestCoin()", +"ee42b10b": "act()", +"ee42c2d9": "getRewardMatrix()", +"ee4350ed": "sellBonds(uint256)", +"ee43d30f": "allocateRestOfTokens()", +"ee44b7d1": "removeSubOwner(address,address)", +"ee44de25": "BaseExspaceToken()", +"ee4516d9": "getChannelParticipantInfo(uint256,address,address)", +"ee453126": "setErc20token(address)", +"ee45487b": "coinsIssued()", +"ee460c64": "isStored()", +"ee47c809": "BEZOP_EXCHANGE()", +"ee47dcec": "ClubTeamLockContract()", +"ee4827ea": "getCardInfo(uint256,uint256,uint256)", +"ee4833d8": "setupStorage(uint256,uint256)", +"ee48a6e6": "setActivationTime(uint256,uint256)", +"ee4a0122": "chkAdmin(address,address)", +"ee4a8fda": "IncreaseSupply(uint256,uint256,uint256)", +"ee4aa327": "TOKENS_PER_ETHER_DAY_ONE()", +"ee4ae2c9": "sendMoney(address,uint256)", +"ee4be288": "claimBounty()", +"ee4c1ed3": "stakeGLX(address,address)", +"ee4ca97e": "setupAssetProxy(address)", +"ee4d09d9": "Floxytoken()", +"ee4d2823": "burnGold(uint256)", +"ee4d3c7f": "spiceUp(uint256,string)", +"ee4d9402": "addComment(address,uint256,bytes32,bytes32,bytes32)", +"ee4de756": "getEtherollAddress()", +"ee4e4416": "isMaintaining()", +"ee4eabce": "updateContractBalance(uint256)", +"ee4fb202": "NARCoin(address,address)", +"ee51575e": "getUnapprovedUsersTop150(bool)", +"ee51b879": "ceilingStrategy()", +"ee5200a1": "testEggIds()", +"ee52ecae": "generateWinNumberTest(uint256,uint256,uint256,uint256,uint256)", +"ee5301d5": "mint(address,bytes32,bytes32,bytes32[],bytes)", +"ee532f31": "transferFromWithData(address,address,uint256,bytes)", +"ee533a4d": "lockTip(bytes32)", +"ee53b1ad": "getExitFee2()", +"ee53d244": "validCourses(address)", +"ee53d619": "CollectChips(address)", +"ee5418f0": "getRandomCase(uint256,uint256[])", +"ee54876e": "ALXToken()", +"ee5493b6": "isRegisteredFirm(string)", +"ee54d54f": "isVendor(address)", +"ee552390": "getUser(uint64)", +"ee556b5b": "saveMetaData(address,bytes32,bytes32,bytes32,bytes32,uint32,uint256,uint256,bytes32,uint256)", +"ee55efee": "closeSale()", +"ee564544": "_slotCancelNew()", +"ee57e4df": "emptyActiveUserList()", +"ee5845cc": "makeOfferForCity(uint16,uint256)", +"ee588b69": "PORNO()", +"ee594a50": "darknodePublicKey(address)", +"ee59da42": "withdrawERC20(uint256,uint256,address,uint256)", +"ee5c3dfd": "recentWins(uint256)", +"ee5c9654": "changeIncomesSplits(uint256,uint256,uint256,uint256,uint256,uint256)", +"ee5e1551": "BICOIN()", +"ee5e2988": "FreezeTokens()", +"ee5e862f": "purchaseExactWolk(uint256)", +"ee5f013e": "addOptionChain(uint256,uint256,string,uint256,uint256,bytes32,address,int256[])", +"ee5f8c8f": "roundTime()", +"ee607ab1": "lowEtherBonusLimit()", +"ee60b201": "operatorSendByTranches(bytes32[],address,address,uint256[],bytes,bytes)", +"ee60bfd0": "CELLS_TO_MAKE_1_SPERM()", +"ee61873c": "distributeBonusTokens(address,uint256)", +"ee620965": "presaleAddr()", +"ee6392ce": "getWhitelistTotal()", +"ee64f2a4": "ManagersChanged(string,address)", +"ee650248": "vote(uint256,int8)", +"ee65eec2": "ProtoTrailToken()", +"ee66a18d": "setDynamicArrayElement(int8,uint256)", +"ee66dc36": "_updateReputationScore(bytes32,bytes32)", +"ee67575f": "transferWeb3js(address,uint256)", +"ee67aa5a": "_lockToken(uint256,uint256,uint256)", +"ee67fcda": "testBuyManyTimes()", +"ee683d2d": "_clearAllRequest()", +"ee684830": "pollEnded(uint256)", +"ee68702c": "CHRTToken(uint256,string,uint8,string)", +"ee6891af": "transferByThirdParty(uint256,address,uint256,uint8,bytes32,bytes32)", +"ee68edad": "Pacul()", +"ee69590f": "setMarketCreatorSettlementFeeDivisor(uint256)", +"ee699681": "SellableToken(address,address,uint256,uint256,uint256,uint256)", +"ee6a5e54": "setBirthDate(address)", +"ee6ab4a6": "win(address,uint256)", +"ee6c2f49": "getFreeSummonTimestamp(address,address)", +"ee6c5a8b": "totalDestinationBalance()", +"ee6d2641": "sendWithExtraGasExt(address,uint256,uint256)", +"ee6d84c5": "getBlack()", +"ee6e1bba": "initBloomFilter()", +"ee6ef19f": "init_dev_and_presale_allocation(address,address,address)", +"ee6f3a55": "getAmountOfVotersInProposal(uint256)", +"ee6f5dac": "currentAmountRaised()", +"ee70f392": "managerSecondary()", +"ee712f59": "balanceIsNotZero(address,string)", +"ee718c60": "CAC()", +"ee7203b8": "startlistUploaded()", +"ee720837": "Sendmoney(uint256)", +"ee72302b": "_getBidIdList()", +"ee725d44": "toChannelID(string)", +"ee737c12": "TOKEN_DESK_BONUS()", +"ee73c117": "getTokensDistributedPlusTrickleDownBonuses()", +"ee74612b": "PayFreelancer(int256)", +"ee749b26": "putToBank()", +"ee75caa9": "SoldNoBonuses()", +"ee76ac07": "setCalleeContract(address)", +"ee76c2d6": "getInventory(uint256,uint256,uint256)", +"ee777c99": "decreaseRate(uint256,address)", +"ee7782f1": "getPK(uint256)", +"ee77cc51": "_creditUser(address,uint256,uint32)", +"ee77fe86": "scheduleCall(address,bytes4,bytes,uint256,uint256,uint8)", +"ee783c14": "getPriceUSDcETH()", +"ee784123": "getTwo()", +"ee786838": "initialize(address[4],address,uint256[12],uint256,bytes,address)", +"ee78b99c": "setGameConfigContract(address,address)", +"ee790db2": "getDesignatedReportDueTimestamp()", +"ee7a301d": "oldUsers(bytes32)", +"ee7c0db0": "getTokensSold()", +"ee7c1786": "isBidFinal()", +"ee7cf9f2": "kingBlock()", +"ee7d72b4": "setGasLimit(uint256)", +"ee7d92b8": "GenesisAddressTransfer(address,address,uint256)", +"ee7e18df": "drawRound(uint256,string)", +"ee7e2039": "createNewAuction(uint256,uint256)", +"ee7e508a": "getFirstCommonsForum()", +"ee7e94f3": "logging()", +"ee7f371c": "JadeCoinToken()", +"ee7f9c47": "view48()", +"ee7fc5a3": "mulRate(uint256,uint256)", +"ee80d7cb": "currentPreSale()", +"ee815eae": "setAutoPayFee(bool)", +"ee81f3ec": "returnTokenAmount(address[2],uint256,uint256[8],uint8,bytes32[2])", +"ee81f57c": "getCreateUnicornPriceInCandy()", +"ee828cdb": "UnFreeze(address,uint256,uint256)", +"ee82ac5e": "getBlockHash(uint256)", +"ee82ea2d": "performRead3()", +"ee832165": "lastEfficientBlockNumber()", +"ee8327fd": "KpopCeleb()", +"ee836fbc": "DummyToken(string,string,uint256,uint256)", +"ee83ce87": "getToJackpot(uint256)", +"ee84c008": "Boostmi()", +"ee86eccc": "getLastRoundAddress()", +"ee8734d0": "turnFaucetOn()", +"ee87b286": "setQuantstampAudit(address)", +"ee87c3b3": "marginBalanceOf(address)", +"ee880879": "getCommAuction()", +"ee882a99": "getSecondsRemaining(bytes32)", +"ee889ed0": "endPreSale()", +"ee89bb87": "unlockVoterMusic(uint256)", +"ee89dab4": "getInitialized()", +"ee8a0a30": "setArrayLimit(uint256)", +"ee8a4ee2": "releaseAllatOnce()", +"ee8b39f6": "withdrawFreeBalance()", +"ee8b7cd9": "updateProfileName(string)", +"ee8bd1f6": "AddTickets(uint256)", +"ee8bd224": "obtainBounty(address,uint256)", +"ee8c24b8": "getTokenAddresses()", +"ee8c4bbf": "getBounty(uint256)", +"ee8c4c6d": "testPayTeam()", +"ee8cbc9d": "addLimitedWalletAddress(address)", +"ee8cdd4e": "setNewPrice(uint256)", +"ee8d75ff": "emissionFundsAmount()", +"ee8e520f": "confirmPurchase(uint256,address)", +"ee8e993c": "updateBonusPercent(uint256)", +"ee8f31c3": "createNullTile(uint16)", +"ee8f997b": "importPresaleBalances(address[],uint256[],address)", +"ee8ff562": "setMaxProfit()", +"ee91877c": "usernames(address)", +"ee919d50": "setA(uint256)", +"ee91afab": "getNameHash(address)", +"ee91b8a7": "pausedToPublic()", +"ee9267d1": "airdropBalance()", +"ee92d2b5": "setLastAlert(string,int256,string)", +"ee92d484": "isCreator()", +"ee92ef5c": "auctioneerCut()", +"ee92fda1": "getUid(address,address)", +"ee93114c": "thresholdNewAuction()", +"ee947a7c": "lockupPeriod()", +"ee94bdaf": "switchUpgradeAgentLocked(bool)", +"ee94c797": "getMerkleTreeRoot(bytes20)", +"ee94d631": "addPetIdMapping(address,uint64)", +"ee94d7ba": "carousalRatio()", +"ee94ee98": "LogFundingSuccessful(uint256)", +"ee95a9de": "registerNewMerchant(address,address)", +"ee95feaf": "isSeller(address)", +"ee97adbc": "loadEarlyPurchases()", +"ee97f7f3": "master()", +"ee987ffc": "setNextDiscountTTWTokenId1(uint64)", +"ee98aee6": "endCrowdSale()", +"ee99205c": "stakingContract()", +"ee992fd8": "tokensOfCaptain(uint32)", +"ee994a54": "Omisgo()", +"ee999096": "getuseraddressbyid(uint256)", +"ee9a5432": "markMilestoneComplete(uint256)", +"ee9a8489": "getLastDrawBlockNumber()", +"ee9adde1": "medalTransfer(address,uint256)", +"ee9b26bd": "transferPointer()", +"ee9b4152": "MIN_HOLDER_TOKENS()", +"ee9c087a": "bittToken()", +"ee9c26d6": "getmypostlastid()", +"ee9c7f43": "isValidGid(uint8)", +"ee9cb414": "LogEscrowWei(uint256)", +"ee9ce090": "decodeIndirect(bytes)", +"ee9cebde": "unitEthCost(uint256)", +"eea0168a": "completeContract(bool)", +"eea086ba": "currentContextAddress()", +"eea0d168": "deployMiners(address,uint32[],uint32[],uint32[])", +"eea147c7": "getCompoundContract(uint256)", +"eea17587": "getFreelancerContractsByStatus(address,address,uint256[],uint256[])", +"eea19185": "getMaxDisplayPrice()", +"eea21c6e": "EICToken(uint256,string,uint8,string)", +"eea23d8a": "setPromoMoney(uint256)", +"eea2a3ff": "ChangedFeePercentage(uint256)", +"eea327e0": "untrust(address)", +"eea42151": "getCompte_43()", +"eea4b1ad": "setPayloadFrom(address,string)", +"eea4cf1c": "subDev()", +"eea5ac01": "SuperiorBit()", +"eea5d10e": "DepositorLimitChanged(uint256,uint256)", +"eea6753b": "accept(address,uint256,uint256)", +"eea6c540": "getRandomNumber(uint256,address,uint256,uint256,uint256)", +"eea7570e": "gasReserve()", +"eea7e46b": "setAirAmount(uint256)", +"eea8465a": "tokensCommunity()", +"eea8c4da": "changeBSTRequirement(address,uint256)", +"eea95aaa": "unsafeWriteUint(uint256,uint256)", +"eeaa75b9": "getTaskFromToken(bytes32)", +"eeaaf19d": "vote(bytes32,bytes32)", +"eeab221c": "getFreePlumber()", +"eeab57bf": "ALLOC_COMMUNITY()", +"eeaba083": "updatePositions(address,address,int256,uint256)", +"eeac6d78": "FakeZRX()", +"eeac848b": "ChestsStore(address)", +"eeae1f4c": "allPlayerTokenContracts()", +"eeae5e4d": "sharesOfScheme(uint256)", +"eeaec245": "testInitial2of2()", +"eeaee3e4": "LIMIT_PER_USER()", +"eeafe7b0": "setACL(address,uint8)", +"eeb046b3": "BidAccepted(uint256,uint256)", +"eeb0af89": "amountMintPerDuration()", +"eeb2d26b": "getRateAt()", +"eeb3c910": "requestRedemption(uint256)", +"eeb415ee": "batchNewAuctions(uint128[],uint256[],uint256[],uint256[])", +"eeb441a4": "updateLoveStory(bytes16,bytes32,bytes32)", +"eeb46634": "getHolding(address)", +"eeb522aa": "ido()", +"eeb57139": "CollectMoney(uint256)", +"eeb58410": "AGCoin(uint256,string,string)", +"eeb64f0c": "PONADistributionContract()", +"eeb6588a": "donationsStartTime()", +"eeb72866": "identify()", +"eeb7ab0c": "checkImageInput(uint256,uint256,uint256[],bool,bool)", +"eeb7beb2": "designarHeredero(address)", +"eeb8a8a9": "upRoundID(uint256)", +"eeb8b934": "priceMultiplier(uint256)", +"eeb92294": "WithdrawalAfterGoalReached()", +"eeb9635c": "mintTokens()", +"eebb7fe9": "BDragon()", +"eebba256": "HOURLY_VALUE_DECAY_RATE()", +"eebbd2b7": "_transferFunc(address,address,uint256)", +"eebc20d2": "createCopyright(string,address,uint256,uint256,string,string,string,uint256,uint256)", +"eebc5081": "checkpointPrice(address)", +"eebc5a26": "_getFinance()", +"eebc7a39": "getPendingValidators()", +"eebcd477": "setIsBuying()", +"eebddedd": "Redemption(address,uint256,uint256)", +"eebdff04": "_bonusLucy(uint256)", +"eebe18cf": "startGamGetToken()", +"eebe41e0": "changePrefererForTask(address,uint256,address)", +"eebed750": "wDiamond()", +"eebf9808": "PiggyBank()", +"eec03444": "enableBundling()", +"eec0ddd7": "Holders(address)", +"eec11f64": "ABCTokenContract(address,address,uint256,uint256)", +"eec13165": "tokenTest()", +"eec1a391": "addBond()", +"eec2898a": "getRefundGasAmount(uint256)", +"eec2b628": "beforeExecute(address)", +"eec3589d": "_updateSaleInfo(uint256,uint256)", +"eec38cec": "set_pauseSale(bool)", +"eec3cb41": "placeBet(bool[],uint256,uint256)", +"eec3e2e8": "setLLV_edit_29(string)", +"eec3fcff": "CloseCrowdSale(uint256)", +"eec48ca5": "setReferralBonuses(uint256,uint256)", +"eec4bcef": "setMaxPrivateSaleBuy(uint256)", +"eec5d076": "getTotalUnvestedAndUnreleasedTokens(address)", +"eec5f1dc": "audit(address)", +"eec65b98": "transferToMainViaRelay(address)", +"eec65c58": "getOrderMakerTokenAmount()", +"eec69548": "BBTCToken()", +"eec6d500": "multiSend(address,address,address[],uint256[])", +"eec7006f": "roundThreeBlock()", +"eec71bea": "LogTokenIssued(address,uint256,uint256,uint256)", +"eec78546": "buy_Exchg_booking(address,uint256,uint256,address,uint256)", +"eec7faa1": "tokenAmount()", +"eec809ff": "setMonthWithdraw(uint256)", +"eec8d544": "CROWDSALE_TARGET()", +"eeca6afd": "CPSToken()", +"eeca6df7": "getFreeVines()", +"eecb24ec": "priceDecreaseRate()", +"eecb4a65": "GRETToken()", +"eecb7005": "useAsBankroll()", +"eecc3135": "DAICOCap()", +"eecc3be8": "all_creatures()", +"eecd2789": "left86(uint256)", +"eecd8876": "GexAlloc(address)", +"eece1e1f": "scheduleShuffling()", +"eece203a": "disableTransferAgreement(uint256)", +"eeced605": "addPrediction(bytes32,uint256,uint256,uint8,uint256,address,address)", +"eecf78b3": "makePurchase(uint256,address,string)", +"eecfb384": "icoBonus5EndDate()", +"eed02e4b": "joinGroup(uint256)", +"eed04e69": "preBuyPrice3()", +"eed0c172": "FoodSafetyChain()", +"eed0fc03": "generateFinalTokens(uint256)", +"eed11836": "getTreeSize()", +"eed331f7": "tokenOwnerNumberMax()", +"eed3f79e": "gameRefund(uint256)", +"eed45ca8": "setIsShareToken(bool)", +"eed47127": "TOTAL_MIND_TOKEN_SUPPLY()", +"eed50a32": "delegation(address)", +"eed65c11": "auctionSize()", +"eed7128c": "_generateRandomGenes()", +"eed72217": "addressToMinimumTextDonation(address)", +"eed7eaea": "getAirdropStatus(address)", +"eed857e1": "surrender(address,bytes32,uint256)", +"eed92ad5": "AdrenalinCoin(uint256,string,string)", +"eeda0e21": "earningsFromNumberOfCells(address,address)", +"eeda149c": "Register(address)", +"eeda22c6": "ownerPauseRecommend(bool)", +"eeda6357": "betCount_()", +"eedb1743": "removeSaler(address)", +"eedb714c": "CO_FOUNDER_PORTION()", +"eedb95c9": "changeZS(address,uint256)", +"eedb9ed5": "minPremium()", +"eedbd7eb": "ClosePatent(bytes32)", +"eedbe31d": "getCurrentStage()", +"eedc966a": "tokenBalance(address)", +"eedc9a8d": "IndorseToken()", +"eedcf50a": "mainDAO()", +"eedd1dd3": "doesProofExist(uint256,string,string,uint256,bytes32)", +"eede471e": "goToSleep(uint256)", +"eedf504d": "BG1Token()", +"eee007e2": "initialSingleWithdrawMax(uint256)", +"eee02e61": "getMerchantPassword(address)", +"eee09758": "setMyCut(uint256,uint256)", +"eee0b552": "resetCallsCount()", +"eee0d9e2": "Elements()", +"eee14119": "PROSH()", +"eee144df": "getInitialSeedAsFixedPointForGameId(uint256)", +"eee187fd": "getMemberIdxOfUser(address)", +"eee1c59d": "oneHourAfterStartTime()", +"eee1e7e5": "calculateBurnAmount()", +"eee1f5f9": "getOwnedWineCountOf(address)", +"eee24219": "rateContract()", +"eee24570": "getPet(address)", +"eee2cc46": "returnEverything()", +"eee3671b": "wadmin_withdrawFund(uint256)", +"eee392c8": "initialTransfer(address,uint256)", +"eee3c4c9": "stageThreeCap()", +"eee428c0": "MAX_FUND_ASSETS()", +"eee457f7": "getContributionFromHash(bytes32)", +"eee56b7a": "takeout(uint256)", +"eee59ccf": "ownerAccessoryTransfer(address,uint64)", +"eee6ce93": "PRESALE_ETH_IN_WEI_ACCEPTED_MIN()", +"eee78595": "transferCustomToken(address,address,uint256)", +"eee881e8": "_stand(uint256,uint8[],bytes32,uint8,uint8,bytes32,bytes32,bool)", +"eee908ed": "changePriceCurveSettings(uint256,uint256,uint256,uint256,uint256)", +"eee92395": "fund(uint256,address)", +"eee94805": "getTokens(uint256,uint256,bool)", +"eee95f6d": "setbtyctoken(address)", +"eee97206": "double(uint256)", +"eeeb17e7": "deauthorizeMintFulfiller(address)", +"eeeb4f36": "ASTC()", +"eeebb30c": "changeRateWin(uint256)", +"eeec0e24": "relay(address,uint256)", +"eeed1767": "whiteListInvestor(address)", +"eeed1b26": "extensionTime()", +"eeed908a": "PublisherUnregistered(address)", +"eeee7cc0": "depositFiat(address,uint256,bytes32)", +"eeef9d55": "getAuctionIdArray(uint64,uint64)", +"eef017f1": "getCompte_2()", +"eef05f65": "setTokenIpfsHash(address,bytes)", +"eef0ef1e": "changeTeamPoolInstant(address)", +"eef0fdbe": "closeLoanOnBehalfOfRecurse(address,address,address,bytes32,uint256)", +"eef1812d": "settingsIco(uint256,address,uint256,uint256,uint256)", +"eef21cd2": "removeCaller(address)", +"eef22a79": "MultiAirDropToken(uint256,string,uint8,string)", +"eef27913": "ContractFeeChanged(uint256,uint256)", +"eef3a0fa": "PPPC(uint256,string,uint8,string)", +"eef3c914": "DelegatedTo(address)", +"eef44945": "Sudosucks()", +"eef49ee3": "deposited()", +"eef547d7": "deal_details(uint32)", +"eef55c72": "getBallotOfSender()", +"eef5a499": "createProductionUnit6()", +"eef5acb4": "SubscriptionDepositReturned(uint256,uint256,address,address)", +"eef5bfae": "UpdateSavingsBank()", +"eef68db5": "gameFinished(uint256,uint256,uint256,uint256)", +"eef6f89d": "bonusClosingTime1()", +"eef719b1": "getQuarterResult(uint256)", +"eef72a3c": "claimTokens(address[])", +"eef73ebb": "setSaleRate(uint256)", +"eef73ff9": "Devs_Supply()", +"eef7dd0a": "GetBetId(uint256,uint256)", +"eef80bbc": "getData_11()", +"eef85ced": "getMytokenBalance(address)", +"eef892aa": "tokenMint(address,uint256)", +"eef8e35f": "setChainyURL(string)", +"eef90cbe": "tokenPublicSale()", +"eef93611": "GetDChainRevokableHash(bytes32,uint32)", +"eef9495c": "CABoxToken()", +"eef94a21": "createT513many(uint256,uint256,address)", +"eef9c27c": "requestTokens(uint256)", +"eefa597b": "isToken()", +"eefa5dfc": "PingPaid()", +"eefb9538": "setData_32(string)", +"eefc3083": "tokenColors(address)", +"eefe3818": "createOpenAndLock(address,address)", +"eefe8527": "MysteriumPricing(uint256)", +"eefea6b7": "feeFromTotalCostForAccount(uint256,uint256,address)", +"ef006b65": "presaleBonusTier4()", +"ef0143a3": "sendPixelsToMarket(bytes32,uint256)", +"ef01db0e": "assignItemRafflePrize(address)", +"ef02ad08": "getTokenInfoDataTracking()", +"ef02ce46": "Rafatar()", +"ef02d5d6": "durationCrowdSale()", +"ef0377fd": "SomaIco(address,address,address,uint256,uint256,uint256)", +"ef043c5a": "Netkrone()", +"ef04fdb7": "buyShares(bytes,uint8,uint256,uint256)", +"ef051f0c": "BlankCanvas()", +"ef057245": "SECUREOURSCHOOLS(uint256,string,uint8,string)", +"ef0582b6": "addEpisodeData(uint256,uint256,uint256,string)", +"ef058f52": "getGoldInfoVendor(address)", +"ef05bf0e": "ROUND_2_PRESALE_BONUS()", +"ef05dc2f": "modX(uint256)", +"ef0614b9": "getItemIds()", +"ef069ae3": "changeSaleMinimum(uint256)", +"ef07a81f": "getDonation(uint256)", +"ef084006": "unholdDate()", +"ef0901b8": "_gapOfCubeSum(uint256,uint256)", +"ef096063": "PollCreated(uint256,uint256,uint256,uint256)", +"ef0a14f8": "removeAddressFromAdmin(address)", +"ef0a3046": "sendOutEther()", +"ef0ad164": "testContractOrNormal(address)", +"ef0aea3c": "getisPlay(bytes32)", +"ef0b2368": "bytes32ToStr(bytes32)", +"ef0b44db": "bonus2Ends()", +"ef0b4db3": "markAsProject(address)", +"ef0b5420": "getOwedDividend(address)", +"ef0dbcbb": "setContractAt(uint16,uint16,uint8,address,address)", +"ef0dd241": "minCapTokens()", +"ef0dddba": "earlybonus()", +"ef0e239b": "getService(uint256)", +"ef0f52bc": "hodlAdded(uint256,address,uint256,uint256)", +"ef110f49": "TotalDeposits()", +"ef113b69": "_internalVote(address,address,uint256)", +"ef115542": "clearStorage(uint256[])", +"ef11e18b": "log_transfer(address,address,uint256)", +"ef11e55b": "isEarlyBonus()", +"ef11ef3d": "HubiiNetworkTokens()", +"ef125360": "removeWhiteListed(address)", +"ef12af52": "ReentrancyMock()", +"ef13070b": "ChangeicoWallet(address)", +"ef1367dd": "setLanguages(bytes3[])", +"ef14124f": "getAmountToUpdate(uint8)", +"ef14a0f6": "CBITToken()", +"ef14adc7": "sellingEnable(uint256)", +"ef15c51c": "deleteRoomByRoomID(uint256)", +"ef1706ce": "drainTokens()", +"ef18374a": "getOwnerCount()", +"ef18e458": "frozenTransferFrom(address,address,uint256,uint256,bool)", +"ef18e9ed": "acceptOrder(uint256)", +"ef1961b4": "Dropped(bytes32,address)", +"ef19792a": "licenseTerms(bytes32)", +"ef19c332": "_checkSigned(bytes32,uint256,uint8,bytes32,bytes32)", +"ef1ad460": "DAPPStoreToken()", +"ef1bfef9": "m_sharedDividendBalance()", +"ef1e5663": "updateBalances(address,uint256)", +"ef1e7e3f": "deauthorizeBurnFulfiller(address)", +"ef1e8dae": "lastBlock_a13()", +"ef2025c2": "burnTokenStatus()", +"ef20bff8": "getSpawnLimit(uint32,uint256)", +"ef21059e": "cancelEth(uint256)", +"ef220233": "getGrid8()", +"ef228e1a": "UCASH()", +"ef229dc7": "setStepMoney(uint256)", +"ef22b87f": "executeTransaction(address,uint256,uint256)", +"ef233f5c": "RELEASE_THRESHOLD()", +"ef23b3a3": "quotaOf(address)", +"ef24b77c": "RegisterNewKey(address,address)", +"ef24bd6b": "ESCBTokenSale(uint256,uint256,address,uint256)", +"ef2573fc": "calculateHouseCutAmount(uint256)", +"ef265d6d": "burn(uint256,address,address)", +"ef26e41d": "whiteLister()", +"ef270ee2": "getApproved(bytes32)", +"ef284d8f": "DiscardToken()", +"ef289d8d": "NewKing(uint256,address,string,uint256,uint256,uint256)", +"ef29a7e5": "emitWorkFinished(uint256,uint256)", +"ef29d2bb": "setNeighbourRewardPercentage(uint256)", +"ef2a9147": "balancesListAddressMap(uint256)", +"ef2b04d1": "callBtcWithStc(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"ef2b7d65": "publicGetParticipant(uint256,uint256)", +"ef2bbbdf": "updateEndDate(uint256)", +"ef2bd19e": "getDisapprovalsFor(address)", +"ef2c5842": "_getTknAddr()", +"ef2cc977": "MAX_AIRDROP_TOKENS()", +"ef2d44c3": "setChampForSale(uint256,uint256)", +"ef2d5786": "createDelegation(address,uint64,address)", +"ef2d8700": "getDocuments()", +"ef2ddb55": "presaleUnfreeze(uint256)", +"ef2de6f8": "ownsPlayerTokens(uint32)", +"ef2e2059": "resetGenesisBlock(uint256)", +"ef2e3fbc": "getTokenInfoHeritor(address)", +"ef2e7321": "INITIALGASFORORACLIZE()", +"ef2e7c48": "IMDEXtrade(uint256[8],address[4])", +"ef2e95d7": "ubdateBTC()", +"ef2f2750": "request_payout_users()", +"ef2f92ad": "forfeitShares(uint256)", +"ef2fa169": "setServiceFee(address,uint256)", +"ef2fd54d": "viewVotes()", +"ef303553": "athleteCanClaimPercent()", +"ef3088d1": "AirDropRedeemAFTK2()", +"ef31bfd1": "isValidSignatureAndMethod(address,address,bytes)", +"ef3229db": "addTokenFunds()", +"ef323d85": "getPlotPrice()", +"ef326c6d": "isOps(address)", +"ef3336f5": "paymentsByBenefactor(address)", +"ef3377ca": "devWalletLocked()", +"ef338b88": "seekOdd(uint256,uint256)", +"ef339fc4": "getTokenProxyAddress()", +"ef33f8f0": "bet1000_001eth()", +"ef343588": "trade(uint256[8],address[4],uint8[2],bytes32[4])", +"ef34ded2": "lottoLength()", +"ef35b59d": "_withdrawTokensToWallet()", +"ef35cdbb": "getLLV_edit_30()", +"ef35d902": "preIcoEnds()", +"ef35fc16": "HIGH_RANGE_RATE()", +"ef3613c3": "allEth()", +"ef36a883": "termsAndConditionsAreSigned(address,uint8,bytes32,bytes32)", +"ef36fa39": "fpart(int256)", +"ef37052d": "isArrAccountIsNotFrozen(address)", +"ef37cfe9": "getBetsCountAndValue()", +"ef37f061": "IPOcoinHotelShares()", +"ef387a50": "rateIco()", +"ef38a306": "genWallet()", +"ef38d089": "UpdateSellAgent(address,address)", +"ef394e1b": "getFastest(uint16,uint8,uint8)", +"ef39fe35": "updateSaleStageManually(uint256)", +"ef3a6031": "testBaseToken()", +"ef3aaf54": "setHouseAddress(address)", +"ef3adfb3": "XPAAssets()", +"ef3b70bc": "setMultiRequestRegistrar(uint256,address)", +"ef3bec3d": "endow(address,uint256)", +"ef3c0531": "contentHostById(bytes32)", +"ef3c64a8": "IcoTokenMock()", +"ef3cbc39": "minOrderEthAmount_()", +"ef3cdb2f": "upgradeM5Token(address)", +"ef3d622b": "EOSBetBankroll(address,address)", +"ef3e8869": "claimStarter(string,uint256)", +"ef3f7c55": "TokenSold(uint256,string,uint256,uint256,address,address)", +"ef406d01": "TokenEBU(uint256,string,string)", +"ef4080bd": "init_pre_ico(address)", +"ef40c3e6": "tokenSwapLock()", +"ef416aec": "firstMonthEnd()", +"ef41e06f": "testThrowSetEnforceRevisionsNotOwner()", +"ef41ea7e": "feePerc()", +"ef41f95a": "newProposal(string,address,uint256,address,uint256,bytes)", +"ef427776": "internalCalculateBonus(uint256,uint256,uint256)", +"ef42b5da": "withdrawFunds(address[])", +"ef430aa6": "category()", +"ef431437": "lastDayPaid()", +"ef43a2b8": "ChangeEmissionRateCoefficient(uint256)", +"ef4445b8": "contribute(uint8,bytes32,bytes32)", +"ef449888": "allowsNewGames()", +"ef455b3c": "substractFromNumber(uint256)", +"ef4592fb": "getResult(bytes)", +"ef464e19": "internalRelease(uint256)", +"ef46e0ca": "executeOrder(uint256,uint256)", +"ef474056": "changeOpenString(string)", +"ef47492b": "summFoundersShare()", +"ef4787a1": "getIsLimited()", +"ef478bf6": "deleteInvestor(address)", +"ef47ff4b": "balance(uint8)", +"ef4886ef": "retrieveVanityForWallet(address,address)", +"ef48eee6": "pay(uint256,uint256)", +"ef49567e": "E_Bid(address,uint256)", +"ef49b414": "isGladiatorChest(uint256)", +"ef4a0c61": "ico_starting_supply()", +"ef4b31d8": "proxySetup()", +"ef4b41b9": "upgradeShifter(address)", +"ef4b6831": "callModifiedDeposit(uint256)", +"ef4b91c0": "ProxySender(address)", +"ef4ba598": "offerPriceEth(uint256)", +"ef4bdfdd": "Set_your_game_number_between_1_15(string)", +"ef4c8685": "LogNewWallet(address)", +"ef4d6149": "investedAmoun(address)", +"ef4e679b": "totalNtsSold()", +"ef4ec047": "addFounder(address)", +"ef4ef103": "bankrollExternalUpdateTokens(uint256,uint256)", +"ef4f0c5f": "changeExtraBets(uint256)", +"ef4f6e9c": "calcUnMaskedEarnings(uint256,uint256)", +"ef4fac01": "calcTotalTokens(uint256,uint256)", +"ef4ffee2": "Honestgamble()", +"ef50aec0": "set_taxi_driver(address)", +"ef5121b3": "appreciationRateWei()", +"ef520aba": "getall_horsesCount()", +"ef52ad21": "MintMade(uint256,uint256,uint256)", +"ef52b0dc": "RuneToken()", +"ef53030c": "thelnwaonCoin()", +"ef532a47": "addBagAndGift(uint256,address)", +"ef538593": "NeptaToken()", +"ef54801b": "getGrantBeneficiaries()", +"ef548aaf": "PLAYER_TURN_SINGLE_PERIOD()", +"ef54af8b": "TieToken(address)", +"ef551b38": "PaymentAddress(address,bytes4)", +"ef556029": "testFallbackIsCalledOnTransfer()", +"ef5793c2": "LOG_OwnerWithdraw(address,uint256)", +"ef57cbec": "BARToken()", +"ef5850c7": "stakersForPoll(bytes32)", +"ef589693": "getSMPTokensBoughtInICO()", +"ef599ba5": "getCoinBalance(bytes4,bytes32)", +"ef59f8c8": "setRaffleAddress(address,address)", +"ef5a3a88": "dividendsIndex()", +"ef5a625b": "disqualify(address)", +"ef5a80af": "ProductAdded(address,address,address,string,bool)", +"ef5a8fb5": "sellLand()", +"ef5ba9ed": "ALLOC_AIRDROP()", +"ef5c2010": "SelfPayPreSale(uint256,uint256,uint256,uint256,uint256,address,address)", +"ef5d5331": "isHashValid(bytes32)", +"ef5daf01": "_dumpToCompany()", +"ef5f937c": "OpportyToken()", +"ef5fad95": "DaWeiToken(uint256,string,string)", +"ef5fb05b": "sayHello()", +"ef5fbdb2": "stopPlaying()", +"ef5fd51b": "getKeys(uint32,int256)", +"ef61041c": "_approveAllArgs(address,uint256,address)", +"ef616584": "getPurchaseETHNum()", +"ef642054": "car_propose(uint256,uint256,uint256)", +"ef6506db": "credit(address,uint256)", +"ef660169": "withdrawRest()", +"ef660ab8": "deliverCandidate(uint256,uint256)", +"ef674e66": "isWhiteListed()", +"ef67caa0": "reservedTokensFounders()", +"ef685294": "addCascade(address,uint256)", +"ef688df5": "addFundraiser(address)", +"ef68913c": "dronesDeployed()", +"ef6957d0": "ownerSetIsClosing(uint256,bool)", +"ef69f408": "protectedTransfer(address,address,uint256)", +"ef69f7d9": "ManagerRemoved(address)", +"ef6a676d": "allowTransferToken()", +"ef6a6bcc": "LogAddressCapExceeded(address,uint256,string)", +"ef6a88de": "AbstractQuintessenceToken(uint256,uint256)", +"ef6ac0f0": "run(bytes32)", +"ef6b141a": "setStarted(bool)", +"ef6b329a": "close_down()", +"ef6c4b93": "addLimitAddress(address)", +"ef6d1cc8": "QZToken(string,string,uint8,uint256)", +"ef6d7b3b": "emitCancelled(address,uint256,uint256)", +"ef6da43c": "setIsWeiAccepted(bool,uint256)", +"ef6f1f36": "setData_25(string)", +"ef6f8e92": "Creative()", +"ef6face6": "privateContribution()", +"ef706adf": "cancelOffer(uint256)", +"ef70aebf": "endMinting()", +"ef71a1f2": "BCREWARDS(uint256,string,string)", +"ef7293d7": "SELLER_STEP_4_ACCEPT(bytes32)", +"ef739d0f": "changeCountry(uint256,bytes2)", +"ef7507c8": "testWinner(uint256)", +"ef765af8": "erc20ApproveChecking()", +"ef76c060": "HPQToken(address)", +"ef778d30": "createProject(address,string,string,bytes32)", +"ef77b601": "SHAREFIDENCE()", +"ef77ed99": "isFundingState()", +"ef78a5b2": "singleUserSignUp(address,address)", +"ef78d4fd": "period()", +"ef79a35f": "getNumberOfLocks(address)", +"ef7a4a32": "logoId()", +"ef7a5956": "BRONZE_AMOUNT_SKL()", +"ef7a5a2a": "getIudexScoreAll(address,bytes32)", +"ef7ac0e5": "enableTransfer(bool)", +"ef7c7797": "getSaleContractDepositAddressVerified(address)", +"ef7c9ecd": "preIcoTotalSupply()", +"ef7d47a5": "setMinBlockPurchaseInOneGo(uint256)", +"ef7dbc54": "listCompetitors()", +"ef7dd831": "SUPPLY_FOR_ADVISORSL()", +"ef7e1e89": "pow()", +"ef7f23a6": "numberOfBlocksBetweenSupplies()", +"ef7f2e1c": "addHashrate(address,uint256)", +"ef7f3834": "grantInitialAuthentication(address)", +"ef80027e": "Members_info(address)", +"ef802e62": "tokensRemainingStage2()", +"ef804ead": "testInequalityBytes()", +"ef80c53a": "earlyReserveBeginTime()", +"ef80f1ab": "LitmusCrowdsale()", +"ef80ff18": "tokenExchangeAddress()", +"ef816fd9": "isState(uint256,uint8)", +"ef817f2a": "EtherZaarFactory()", +"ef81eb57": "removeLastSaleOnlyNotActivated()", +"ef82c8a8": "geProposalCount()", +"ef82f95c": "setFront(address)", +"ef8322fd": "queryRoles(address)", +"ef84e27f": "getWorkpointSupportCancel()", +"ef8594be": "setPriceStep6(uint256)", +"ef85fdad": "IRC_PER_ETH_SALE()", +"ef869443": "investWithCustomerId(address,uint128)", +"ef8700e5": "tokensForDevelopment()", +"ef885772": "GCCERC20(uint256,string,string)", +"ef890cc8": "isGameFinished()", +"ef898355": "revealHiddenPosition(uint32,int64[2],bytes16)", +"ef89d6e3": "getArmorValue(uint256)", +"ef8a22ac": "mineableTokens()", +"ef8a9235": "currentStatus()", +"ef8a9c8f": "allocatedStage()", +"ef8b0e15": "processContribution(address,uint256,uint256)", +"ef8b5892": "setRoundTwoRaito(uint256)", +"ef8c1d86": "ownerWithdrawParsecs(uint256)", +"ef8c2c58": "openModifyCountdown()", +"ef8c8944": "setPlayerId(uint256)", +"ef8d4a49": "getAssetIDForTypeSequenceID(uint256,uint256)", +"ef8dcc2e": "LogTransactionConfirmed(bytes32,address,uint256)", +"ef8dd09b": "deleteEntry(bytes32)", +"ef8e8069": "smallPrice()", +"ef8ea3d0": "NewRegistration(uint256,address)", +"ef8f1229": "EMISSION_FOR_SALESTAGE3()", +"ef8fdfd8": "Bonus()", +"ef902a0c": "ShowBool(bool)", +"ef9089d6": "nextPrice()", +"ef90aa46": "givenBountyTokens()", +"ef9124e1": "TrinityToken()", +"ef9130b9": "getBetItemCount()", +"ef921826": "setMaxDuration(uint32)", +"ef922305": "DACCToken()", +"ef92742e": "ICOmint()", +"ef92b384": "saveGenCode(address,uint256)", +"ef92b701": "CFC()", +"ef940837": "payday(uint256,address,uint256)", +"ef941dca": "issueTokens(uint256,string)", +"ef943909": "PublisherAddress()", +"ef94ce1e": "addMenu(string)", +"ef9521ea": "GruffinzContact()", +"ef95aa5d": "getManifest(address,bytes32,uint256)", +"ef961367": "registerForCompetition(address,uint8,bytes32,bytes32)", +"ef982eba": "settournamentPrizeAddress(address)", +"ef984923": "transferTenuousTokenOwnership(address)", +"ef98dea3": "getAuctionManagerAddress()", +"ef99c9ef": "DACVest()", +"ef9b0214": "read_i32_array()", +"ef9b559a": "CLX()", +"ef9bfe1a": "returnInvestors()", +"ef9c3512": "falconmasterReq()", +"ef9c4446": "cancelProposeTo()", +"ef9c52ea": "maxIco()", +"ef9c79da": "getFileNum()", +"ef9cb474": "changeWorkerPoolPolicy(uint256,uint256,uint256,uint256)", +"ef9da13d": "getPeriodOwnerLockedBalance(uint256)", +"ef9e7f95": "self_readyTime()", +"ef9f6023": "PUBLICSALE_SUPPLY()", +"ef9fc1de": "DelegateChanged(address,address)", +"ef9fc50b": "addNumbers(uint256,uint256)", +"ef9fe3ac": "setCompte_8(string)", +"efa08854": "companyShare()", +"efa0a1ef": "SettankImposedMax(uint256)", +"efa0e659": "EthX()", +"efa1c34c": "destroyChannel(address)", +"efa227ca": "finish(uint16)", +"efa25196": "getDevidends()", +"efa390f6": "createNewEvent(bytes32,string,uint256,uint256,string,string)", +"efa3d586": "add(address,uint8,uint256)", +"efa3dccd": "totalDividendsPerCoin()", +"efa408de": "setReservedTokensListMultiple(address[],uint256[],uint256[],uint256[],bool[])", +"efa40c2a": "engine(string,string,address)", +"efa4f94d": "computeDeadline()", +"efa52fb3": "iterateGet(uint256)", +"efa56a1e": "use_OEM_Parts(bytes32,uint256,uint256)", +"efa5d431": "vote(address,address,uint256)", +"efa6fd63": "perTransactionRate()", +"efa726e8": "setEggLimit(uint16,uint16)", +"efa74f1f": "getTokenBySymbol(string)", +"efa7e56b": "GameEnds()", +"efa85335": "Registrar_Oraculo(address)", +"efa8d998": "GetEtherSpent(address)", +"efa94e47": "createToken(bytes32,string,string)", +"efa99ecf": "SubModuleSuspended(uint256)", +"efaa55a0": "joinGame(uint256)", +"efaa86b1": "claimTeamTokens(address)", +"efab1e50": "getInvestorDetails(address)", +"efab4b91": "_unpackIntelligenceValue(uint256)", +"efabaa89": "sortTrusted()", +"efac0fd0": "PowerEvent(address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address[],uint256[])", +"efac4db4": "add(address[],uint256)", +"efacd73b": "_createRocHunting(uint256,uint256)", +"efad6df3": "cycleLimit()", +"efada80b": "getRunDetails(uint256)", +"efada94b": "setParentPayoutDistributionHash(bytes32)", +"efae0f2f": "AIR_1()", +"efaf8e22": "isSenderRegisteredAgent(address)", +"efaf90c8": "DAYS_31()", +"efb0cdd9": "MeTooToken()", +"efb109d4": "privlocatum(string,string,uint8,uint256)", +"efb173d4": "addCompany(uint256,string)", +"efb1900d": "deleteThisContract()", +"efb20f6a": "Worldcoin1()", +"efb23d73": "getFirstHexByte(bytes1)", +"efb2bfd3": "signatureChecker()", +"efb369c7": "transferFundsByOwner(address,address)", +"efb588e4": "presaleMaxValue()", +"efb610bc": "isExternalBuyer(address)", +"efb7601d": "getExchangeRate(address)", +"efb7e8b3": "mistakenTokens()", +"efb7fa77": "unLinkFromMasterWallet(address,address)", +"efb8b6b1": "after10Seconds()", +"efb95ced": "masterRewardsPercent()", +"efb98bcf": "getRemainingTime()", +"efba9bd2": "recoverLeftovers()", +"efbb5f17": "retrait_2()", +"efbb6108": "transferStbToOwner(uint256)", +"efbbbd65": "getLambo(uint256)", +"efbbe160": "abiDecodeRegister(bytes)", +"efbc0075": "transferOwnerShipToPendingOwner()", +"efbc5469": "addTransaction(address,uint256,uint256)", +"efbcae98": "deleteMemberOfCommunity(address,uint256)", +"efbcebe5": "ObsToken()", +"efbd4bff": "priceForRect(uint256,uint256,uint256,uint256)", +"efbd863e": "setRealTokenPrice(int128)", +"efbd8a92": "setPriceFactor(uint256)", +"efbd9ec2": "changeList(address,bool)", +"efbe1c1c": "end()", +"efbe31d5": "removeHoldByAddressIndex(address,uint256)", +"efbe3894": "MakePatient()", +"efbe4262": "_removeSuperInvestor(address)", +"efbe584d": "isDEditor(bytes32,address)", +"efbe62e8": "validate(uint256,bytes)", +"efbe8fd1": "createToken(string,string,string,uint256)", +"efbec487": "payBoss(uint256)", +"efbee9b3": "_stake(address,bytes32,uint256)", +"efbf7d83": "GrowGuildToken()", +"efc018cc": "coupDetat(address)", +"efc0712c": "activateGladiator(address)", +"efc07e84": "withdrawBalanceERC20(address,uint256,address)", +"efc139cd": "SmartBooking()", +"efc1595e": "DeDice()", +"efc1ba92": "FakeMembershipRegistry(address)", +"efc1c0ab": "SimpleNameRegistry()", +"efc2fd2a": "getRefillStatFor(string)", +"efc3323c": "createEvent(bytes16,bytes16[],bytes16[],uint256[])", +"efc3d252": "GetLuckyLandIds()", +"efc4cbdd": "Fiocoin()", +"efc4f1dc": "switchSaleState()", +"efc58aea": "spawnAsset(address,uint256,uint256,uint256)", +"efc5c693": "executeSell()", +"efc63bd3": "_rawGetGlobalDelegation(address)", +"efc65b3a": "CindicatorIssued()", +"efc7285c": "mintPresaleWithBlock(address,uint256,uint256,uint256,uint256)", +"efc7652e": "getBAU2(bytes32,address,uint256)", +"efc77f3f": "LTHToken()", +"efc78401": "isSenderAllowed(address)", +"efc81a8c": "create()", +"efc82381": "FirstTimeTransfer()", +"efc8d3c6": "amountReservedRefsTokens()", +"efc927b9": "ShowEmissionRate(uint256)", +"efca0214": "HotPotToken()", +"efca2eed": "totalDistributed()", +"efca9f09": "minimumPurchaseLimit()", +"efcb6cde": "changeOwner(bytes32,bytes32,bytes32,address,string,bytes32,bytes32)", +"efcc3c7f": "getMiniPoolEdit_3()", +"efcceaae": "getGamePaused()", +"efcd1cd9": "signatureSplit(bytes)", +"efcd2ddd": "changeOracleAdd(address)", +"efcd853f": "DogezerPreICOCrowdsale(address,address,address,address)", +"efce0688": "createPrometh(address)", +"efce079e": "doQuest(uint256)", +"efce1d66": "BitEyeEx(address)", +"efce6e78": "PinkyToken()", +"efce828e": "skinCreatedNum()", +"efcee869": "vote(bool,string)", +"efcefb40": "withdrawAllFor(address[])", +"efcf095c": "viewNumberOfMemories()", +"efcf2479": "trim(string,string)", +"efcf2730": "_premint(address,uint256)", +"efcf4f41": "getPixel(uint16)", +"efcf6d68": "finanReserveTimeLock()", +"efd0c851": "getPayoutReadyState()", +"efd0f455": "getChStatus()", +"efd12624": "startPostICO()", +"efd2abec": "calculateAntBuySimple(uint256)", +"efd2fb9b": "DeltaToken1()", +"efd46e1d": "E4RowEscrow()", +"efd4d0a6": "finishedloading()", +"efd6479a": "publicGetUserInfo(address)", +"efd64af9": "getReportingWindow()", +"efd71eb0": "updateVaultWallet(address)", +"efd7313d": "setExists(bytes32,bool)", +"efd73adc": "MigrationFund()", +"efd76499": "_cancelOrder(address,uint256)", +"efd8871a": "revoke(bytes32,address)", +"efd8c379": "userXRTBalance(address)", +"efd979cb": "setMinimumEtherToAccept(uint256)", +"efd9d7e0": "KoosAlbertsToken()", +"efdc4d01": "extraReceiversLength()", +"efdc5b77": "change_nodelist(address)", +"efdcb506": "getMsgGasBefore()", +"efdcc0f8": "getTeamTokens(uint256)", +"efdcd974": "setFeeReceiver(address)", +"efde6dcf": "Rejected()", +"efde9d6e": "InitChallengeAddress(address[10],address,uint256[10])", +"efdea046": "test_3_someTest()", +"efdecd9b": "check_withdrawdao()", +"efdee94f": "deployerAddress()", +"efdff7bb": "getContractAddressById(bytes32)", +"efe08a7d": "changeAddress(address,address)", +"efe0e495": "calculateVestedTokensNumber(uint256,uint256,uint256,uint256,uint256)", +"efe1525e": "viewFeaturedLength()", +"efe213a9": "_getCurrentPeriod()", +"efe2c8a4": "setConsumerAddress(address)", +"efe37d6f": "ELTTokenImpl()", +"efe3f4f4": "determineInterfaceImplementationStatus(address,bytes4)", +"efe43338": "determineWinner(uint256)", +"efe4e0a1": "iterateThroughSwarm(address,uint256,uint256)", +"efe51cca": "state2()", +"efe6bfa3": "sellOrders(bytes32)", +"efe6c772": "MAX_PLAYERS_PER_STAGE()", +"efe79268": "PRICE_STANDARD()", +"efe7a504": "END()", +"efe7c791": "RANGESTART_5()", +"efe86dd5": "batchPunchOut(address[],uint64[])", +"efe89d5a": "tokens2owners(address)", +"efe8c94f": "_safeSub(uint256,uint256)", +"efe93036": "getListTeamByPlayType(uint256)", +"efe998b9": "ethDividendAmount()", +"efe9b08d": "dissolve(address)", +"efe9e86b": "MyPinerTokenTest3()", +"efea0172": "startIco(bool)", +"efea835a": "devfeesoutstanding()", +"efeb4ad7": "onMoneySent()", +"efeb5e58": "beneficiaries(uint256)", +"efeb5f1f": "addWallet(address)", +"efeb941d": "ICOstart()", +"efebc720": "swapEndTime()", +"efecab8a": "addSale(address,uint256)", +"efed160f": "func_0431()", +"efed7b0a": "fondPlatform()", +"efedf429": "admin_member_isWithdraw(address,bool)", +"efeecb51": "getNumberOfTokens()", +"efef39a1": "purchase(uint256)", +"efef445b": "transferDataFrom(address,address,uint256,bytes)", +"eff02ec5": "returnBorroweedEth()", +"eff134ee": "withdrawTokenOwnerReward()", +"eff14c78": "submitValue(bytes8)", +"eff24744": "getTaskAddress(bytes32)", +"eff26a3b": "checkExist(address)", +"eff35f75": "setTickTime(uint256)", +"eff38f92": "getQuestion()", +"eff3c4e7": "openForPublic()", +"eff413ad": "setGoldMigrated(address,bool,string)", +"eff5c266": "addToMemeList(string)", +"eff60f56": "LRXCOIN()", +"eff631cf": "setNewPeriod(uint256)", +"eff6be2f": "changeBaseFee(uint256)", +"eff6e83d": "getIndexOrder(uint256)", +"eff7ed65": "setExchangeRateETHToUSD(uint256,uint256)", +"eff841d1": "setReserveWeight(uint256)", +"eff867e5": "CruzeiroToken()", +"eff877e2": "calcTokenPriceInWei()", +"eff883bd": "takerSellAsset(uint256)", +"eff8e748": "discountRate(address)", +"eff91c7e": "getLatestId()", +"effa00a6": "isIQTDistributed()", +"effb8415": "set_recivers(address,uint256)", +"effbbf92": "enableDisableTokenProxy()", +"effc4c1f": "throwIfLocked()", +"effc792d": "stakeInCurrentPeriod(uint256)", +"effcd413": "wallstreet2()", +"effd88b7": "ethToWei()", +"effda074": "addFactoryToCP(address,address)", +"effe031e": "payBankRoll()", +"efff1fb9": "_collect(address,uint32,uint32,uint32)", +"efff718d": "BITBIX()", +"efff78a5": "setRule(uint16,uint256,uint256,uint256,uint256)", +"effff82f": "valueToken()", +"f0004ab4": "PRIVATESALE_TOKENCAP()", +"f0006707": "setWriteTimestamp(bytes32,uint256)", +"f000999e": "upgrade(address,address,address)", +"f0024677": "deleteTellerMods(address)", +"f0032567": "computeFare(uint16)", +"f00388f7": "give(address,uint256)", +"f003a487": "unpauseCrowdsale(address)", +"f004073a": "performAction(uint256)", +"f00423ac": "XXXcoin()", +"f0044924": "BitGemPlayToken(address,address)", +"f004b12b": "CrowdFund(uint256,uint256,address)", +"f005b1b7": "UniversalTradeCoinToken()", +"f0061866": "deleteCourse(address)", +"f006228c": "guardian3()", +"f00648b8": "withdrawCoreTeamTokens()", +"f0072795": "itemsRange(uint256,uint256)", +"f007557f": "IPXTokenBase()", +"f0075829": "isValidPubKey(bytes)", +"f0083250": "canImplementInterfaceForAddress(address,bytes32)", +"f0086703": "setNextMilestone(uint256,uint256)", +"f008be46": "currentTierDiscountPercentage()", +"f009347d": "KudosProxy(address)", +"f00989a8": "FOUNDING_TEAM()", +"f00aac7f": "ArrayRR()", +"f00ac1da": "Login()", +"f00acc47": "prepareRoll(uint256,uint256)", +"f00c67fc": "Bounty0xEscrow()", +"f00c7669": "lastBlock_v2()", +"f00c9e67": "testStoresChallengeOwner()", +"f00d2823": "TokenMinted(uint256)", +"f00d4b5d": "changeOwner(address,address)", +"f00d7326": "isSenderInvestor(address,address[])", +"f00db260": "underwriter()", +"f00e4129": "EmergencyFundingReleaseApproved()", +"f00e6a2a": "getTarget()", +"f00e6f0a": "getResultData(uint8)", +"f00e8651": "createRequest(address[2],address,uint256[11],uint256,bytes)", +"f00f087f": "operationsPercent()", +"f00f7b33": "loseOdd()", +"f00f9b4d": "transferForMining(address)", +"f00ff174": "verifyWithdraw(bytes32,bytes32)", +"f0109f84": "valueAirDrop()", +"f010b6e5": "wipeBlackListedTrueUSD(address)", +"f011a7af": "claimProfit()", +"f011e270": "_payoutWinner(uint256,uint256,uint256,uint256)", +"f0123bc2": "dtStart()", +"f0137edf": "tokensFor1EthP3()", +"f013e0e1": "setWhitelist(address[],uint256[])", +"f0141d84": "getDecimals()", +"f0144a91": "dataset_md5checksum()", +"f0149751": "getTotal(bytes32)", +"f0149b9d": "ZenswapNetwork()", +"f01551f6": "difficultyAdjustmentPeriod()", +"f015bc93": "PRESALE_ADDRESS()", +"f0163621": "changeDomain(uint256,uint256,address)", +"f0163a82": "getNobleBalance()", +"f0173703": "ROLE_ORACLE()", +"f0174a25": "initMetadataDisable()", +"f018f741": "isPresidenteDeMesa(bytes32)", +"f019bd5e": "_generateOrder(address,address,address,uint256,string,string,string)", +"f019c267": "decreaseApproval(address,address,uint256)", +"f019c5da": "expReward()", +"f019c941": "SLAV()", +"f01b896f": "ambi2()", +"f01cc531": "setMonarchyRewards(uint256,uint256)", +"f01dbd03": "rewardAddressesSet()", +"f01de8c3": "getNextBattleTime(uint64)", +"f01e0648": "Voted(address,address,bool)", +"f01e341b": "addPostOnUser(address,address)", +"f01e66ec": "getAvgPrice()", +"f01eddda": "claimMyApis()", +"f01ee2cf": "sendERC20Tweet(uint256,string,string,string,string)", +"f01f20df": "burnPercentage()", +"f01fe692": "create(uint256,address)", +"f020044f": "gameActive()", +"f02011a8": "StatusContributionMock()", +"f0204007": "allocateTokens(uint256)", +"f0206a0d": "DayToken(string,string,uint256,uint8,bool,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f0207fb1": "_commission()", +"f020bfe1": "McCringleToken()", +"f020d093": "applyInsurance(bytes32)", +"f020f279": "balanceWinPoolForSecondStage()", +"f02137c8": "updateTicketPrice(uint256)", +"f02152ab": "sponsorOpinion(uint256,uint8,bool)", +"f02175c7": "checkNewOwnerArgs(uint256,uint256,uint256)", +"f0217c32": "changeSaleBlocks(uint256,uint256,uint256)", +"f0217ce5": "permit(bytes32,bytes32,bytes32)", +"f02286c1": "topUpLuck(uint256)", +"f022a694": "ToxbtcToken()", +"f022a867": "unholdMntp(address,uint256)", +"f022d9f6": "setContractProtection(bool)", +"f023d600": "purchase_address()", +"f0247f78": "maxQtyInFp()", +"f024a95a": "setMinimumTribute(uint256)", +"f02694f6": "SetStartVesting(uint256)", +"f027c7e0": "initOptionProgram()", +"f027d1f0": "setC4FContractOwner(address,address)", +"f0285b96": "_ownerSupply()", +"f02895e4": "ICO_ADDRESS()", +"f0296bfa": "setRefBonus(uint256,uint256)", +"f029e102": "SandwichShop()", +"f02a306e": "timeoutXEnabled()", +"f02a4463": "SkyExchange()", +"f02d7ef0": "issued(address)", +"f02dd53f": "getLand(uint256)", +"f02e0b3c": "SALE_IN_PROGRESS()", +"f02f1b6f": "getDailyLotteryParticipants(uint256)", +"f02f3a89": "oem_share()", +"f02f85c5": "timeOfLastBlock()", +"f02fc78f": "batchRegularTransfers(bytes32[],bytes32[])", +"f02fff9d": "Fcoin()", +"f0303452": "approveAll(address,uint256[])", +"f0314df0": "addTrustedContract(address)", +"f031a4d2": "TasksHandler(address,uint256,uint256,uint256,uint256)", +"f0330d54": "claimTwitterBonus()", +"f03342ad": "initiatedBy(address)", +"f0342179": "setPriceUnits(uint256)", +"f0349d5f": "setupStages()", +"f0350c04": "transfer_ownership(address)", +"f03529c3": "setMasterFeeContract(address)", +"f0356a36": "balanceOfContractFeeEth()", +"f036417f": "setTokenSymbol(address,string)", +"f0366c45": "imageExists(uint256)", +"f0369550": "getStage0Cap()", +"f036b592": "getBonusFactor(uint256,uint256)", +"f036ed56": "addResources(address,address[],bytes4[])", +"f0375c55": "SudanGoldCoinToken()", +"f038a969": "createScanner(uint256,string,uint256,uint256,uint256)", +"f038e106": "CKAOTToken()", +"f039218a": "Robycoin_test1()", +"f039d9d5": "totalPicks()", +"f03a1bc6": "addBet(address,uint256)", +"f03a5687": "reinvestDividend()", +"f03a6872": "bitmask_add(address,uint256)", +"f03aa262": "noContributors()", +"f03b0c0b": "setMultiSigWallet(address)", +"f03b7c70": "addComment(string,address,bool,uint256)", +"f03b8bf5": "UoBAMZNToken()", +"f03bcc7f": "submitAudit(address,bytes32,bool)", +"f03c0e8f": "D3JDemo(uint256,string,uint8,string)", +"f03c58ca": "test_feePoolShare_isTranscoder()", +"f03c7c6e": "pit()", +"f03c867a": "ownerDisablePayee(address)", +"f03d43ed": "updateTokenTicketPrice(uint256)", +"f03d7d2f": "transferReferralFee(address,uint256)", +"f03dc3d3": "getUsedReveralSupply()", +"f03dc4e4": "private_setMinGamePlayAmount(uint256)", +"f03dc5ef": "publicKeys(bytes32)", +"f03dd010": "WithdrawalETH(uint256)", +"f03de5fe": "buyHLPMT()", +"f03e5de5": "isDisputeActive()", +"f03e786a": "approveAndCall(bytes,address,address,address,uint256,uint256,uint256,uint256,bytes)", +"f03fbf2f": "CheckChangePlatformFlagAndAddAccountsInfo(address,address,uint256)", +"f03fed22": "nwmToken()", +"f040d973": "ERC20Token(string,string,uint8,uint256,address,address)", +"f0413191": "badge(uint8,string,bytes)", +"f04182d8": "insertProposal(address,uint256,address)", +"f0419588": "reply(uint256,uint8)", +"f0425fe1": "swappedTokens()", +"f04303e3": "setSealableProperty(address,uint256,bytes32,bytes32)", +"f0437a36": "getMyCommitmentHash(uint256)", +"f0439e0f": "removeExpiredName(string)", +"f044632f": "loikikdid()", +"f0446e02": "testFailMintNoAuth(int256)", +"f0456691": "PrevOwner()", +"f0459440": "readPermissions(address,uint256)", +"f046395a": "subscriptions(address)", +"f04646fe": "roll(bytes)", +"f04686aa": "LogOrderCreated(address,address,address)", +"f046cdec": "private_setHouseEdge(uint256)", +"f0474350": "proposalWeight(uint256)", +"f0479392": "poolAdd(uint256)", +"f047a528": "isRoundingErrorCeil(uint256,uint256,uint256)", +"f047d077": "cancelBuyNowOffer(uint256)", +"f0485328": "setAccessory(uint8,address)", +"f04893c2": "modCFOAddress(address)", +"f048b97f": "userPurchaseNumMap(address)", +"f04961ba": "getEther(uint256)", +"f04991f0": "deposit(int256)", +"f04aa255": "_transferAvailable(address,address,address)", +"f04be582": "tokentBalance(address,address)", +"f04bf0c5": "updateTrustScoreInBulk(address[],uint256[],uint256[])", +"f04cb80c": "setInvestorDataAndIssueNewToken(address,uint256,uint256,uint256)", +"f04d4d55": "deactivateLineItem()", +"f04da65b": "getShares(address)", +"f04e2b45": "_init(address)", +"f04e42cd": "allocateCoins(address[],uint256[])", +"f04e7476": "BSBCoin()", +"f04e8c6f": "payoutPeriodStart()", +"f04ed952": "typeSize(uint256)", +"f0502ff7": "tokensRequiredForAllWins()", +"f05168e6": "getAddTokenResetSignatures()", +"f052a76b": "setSpecialOffer(uint256,uint256,uint256,uint256,uint256)", +"f052d65a": "getCreature(uint256)", +"f0534e0a": "addWalletBonus(address,string)", +"f05396ac": "currentOperation()", +"f05492e0": "_getMaker(bytes32,uint8,bytes32,bytes32)", +"f054d139": "decimalsFactor()", +"f055d324": "walletBountyProgram()", +"f0560ea0": "approvedRatio(uint256,uint256,uint256,uint256)", +"f056a5c7": "declareRF(string)", +"f0575008": "Locked(bytes32,bytes32,bytes32)", +"f05764a0": "Currenttask()", +"f05834d6": "setReservedTokensListMultiple(address[],uint256[],uint256[],uint256[])", +"f05854ba": "SealToken()", +"f0586f0d": "doThrow(bool)", +"f058e6d1": "TXOsale()", +"f0591308": "getMem()", +"f0594d38": "PrizeAwarded(uint256,address,uint256)", +"f059bb6d": "buyTokensPreHook(address,uint256)", +"f059cf2b": "spentToday()", +"f05a2818": "changeMinimumBetAmount(uint256)", +"f05a64bc": "potTime()", +"f05a781d": "acceptNewOwner()", +"f05aa334": "cofounderA()", +"f05ad9f3": "communityTotal()", +"f05b854f": "LogSquareWinsUpdated(uint256,uint256,uint256)", +"f05ccd75": "onDecreaseApproval(address,address,uint256)", +"f05d16f7": "setTxFee(uint256)", +"f05d5547": "named(string)", +"f05d68c1": "_newIncomingTransaction(address,address,uint256,string)", +"f05d85d6": "atmToken()", +"f05dd6d5": "LogWinner(address,uint256)", +"f05dda57": "XeinToken()", +"f05f3e77": "developer_voting_info(string)", +"f05f45b1": "authoriseEntrants(address[])", +"f05fae68": "getStoreBalance()", +"f06067ac": "transferByLock(address,uint256,uint256,uint256)", +"f060ccb5": "escFundAddress()", +"f060f617": "setCursedContract(address)", +"f0610b5e": "unlockAllAccount()", +"f0611c44": "lockAfterMinting(uint256,uint256)", +"f06186c7": "testReality()", +"f0624097": "checkBlockEmpty(uint256,uint256)", +"f062e26b": "check_darkdao()", +"f0640355": "AddTeamAccount(address,address)", +"f0646a3c": "DART()", +"f064b971": "tryToCloseProject()", +"f065c36e": "MonopolyBank(uint256,string,uint8,string,address)", +"f0664a4f": "ownerOne()", +"f0666fba": "burnedBitcoin(address,uint256)", +"f066719f": "arbTrade(address[],uint256[],uint8[],bytes32[])", +"f066844e": "_emitAreaEvaluated(address,address,uint8,uint256)", +"f066cb83": "treeBuild(address,address)", +"f0685bf0": "TestFund()", +"f068a3a6": "setNextSmartContract(address)", +"f068dc81": "authorizeRequestorAddress(address)", +"f069629c": "generalSaleStartDate()", +"f06a1e13": "QUOTE_ASSET()", +"f06b0901": "interRefreshLock()", +"f06b53e9": "saveDividends()", +"f06b9ca6": "avgTokenBetValue()", +"f06bbf75": "EXTERNAL_QUERY_GAS_LIMIT()", +"f06c5610": "constructionTime()", +"f06d335e": "_recoverAccount(address,address)", +"f06d56ae": "ICO3Period()", +"f06ea69c": "toUint16(bytes,bytes,uint256)", +"f06ebc38": "setKv(uint256,uint256)", +"f06ef632": "fundOrderInternal(address,address,uint256)", +"f06fc103": "sendTokens(address,uint256,uint256)", +"f0704f02": "week3Price()", +"f0705249": "updateSspAbi(string)", +"f07065b3": "writeToDiary(uint256,bool)", +"f0715594": "_addAdminAccount(uint256,address)", +"f071b5fb": "LogEscrowReq(uint256)", +"f071cacb": "_setClientSupply(address,uint256,uint256)", +"f071db5a": "feesCollected()", +"f071ecc5": "AFTER_MAX_GOAL_DURATION()", +"f07227dc": "release(address[],address,uint256[])", +"f07255e3": "nextBoundaryAmount()", +"f073b277": "euroRaisedRc()", +"f07494a0": "bla()", +"f0757a91": "TOKEN_PRICE_THOUSANDTH()", +"f075f253": "QRRial()", +"f07629f8": "eventsHistory()", +"f076ba9c": "ethercrowdfund()", +"f077ae0f": "removeSample(address,uint256)", +"f07819a3": "setMesa(uint256)", +"f0782640": "getCompanyCount()", +"f0793782": "modifyHorseyDna(uint256,bytes32)", +"f0794ca6": "getRocOwnerItem(uint256)", +"f07a019d": "ownerRecoverTokens(address,address)", +"f07b454c": "divMultiplier()", +"f07b4608": "destruirContrato()", +"f07b9a04": "certAuthIssuesCerticate(address,address,uint256,string,string,string,string,uint256)", +"f07b9f20": "MapleCoin()", +"f07c0b21": "AgriChainLabel()", +"f07c44c2": "appropriate(uint256)", +"f07d0c49": "Logs(address,uint256,string)", +"f07edbf4": "maximumAdminBalance()", +"f0803358": "TSpaceCoin()", +"f080f860": "MAYA()", +"f081d9bd": "HaraKiri()", +"f081fc2e": "MAX_TOTAL_AMOUNT_GET_ETH()", +"f082650b": "setStarData(uint256,uint16,uint16,uint32,uint32,uint32,uint64,uint64)", +"f0829c37": "VeraCoin()", +"f083156c": "LYBToken(string,uint8,string)", +"f083e8f2": "addressFundFounder()", +"f0843ba9": "quickConvert(address[],uint256,uint256)", +"f085b2a1": "clearTokenLock(address)", +"f0863c08": "maxPowerUserAddress()", +"f0869641": "normal_trade_date()", +"f086965e": "changeOwner(bytes32)", +"f08697a3": "QuyDau()", +"f0876747": "KocoCoin()", +"f087d2ec": "STREAMING()", +"f088d547": "buy(address)", +"f0893de2": "maxTradingStartTime()", +"f089b7dd": "hashtag()", +"f089d566": "AdmineTeamTokens()", +"f089e2ed": "getProject(string,uint256)", +"f089e972": "currentNetfRound()", +"f08a5faa": "getSmartHash(string)", +"f08b82e6": "getTotalTokens()", +"f08c9e2e": "deathData_f2()", +"f08ccd02": "allocatePresaleTokens(address,uint256,uint64,uint64,bool,bool)", +"f08d5a25": "initialLockedValues(address,address,address,address,address,address,address,address)", +"f08e362f": "transferFunds(uint256,address)", +"f08ea4cc": "_startContract(uint256)", +"f08fa322": "investors_deliveryDate(address)", +"f090cee8": "addInvestor()", +"f091e5a2": "CoinMeet()", +"f0920a41": "wminus(uint256,uint256)", +"f0921b80": "habichnet1()", +"f09304b5": "setIntervalSchedulePresale(uint256,uint256,uint256)", +"f0932bd7": "setNextRoundLength(uint256)", +"f0933ab9": "isInActiveStage()", +"f093fd0a": "_bidEth(uint256,uint256)", +"f0942d35": "gameStatus(bytes32)", +"f0947680": "lockstatus()", +"f095ed3c": "cancelAndEndEvent(bytes32)", +"f09649ed": "getStateLength()", +"f0965328": "transferFor(address,uint256)", +"f0970566": "createDklAuction(uint256,address,uint256)", +"f097e106": "maxBuyingDate()", +"f098efb3": "ICOActive()", +"f098f8e4": "finalWindowTime()", +"f09915d4": "assign(uint256,uint256)", +"f0995961": "notarize(bytes32,uint256)", +"f099ce67": "getGladiatorDistributedRandom(uint256)", +"f099fbbd": "callBurnTokens(uint256)", +"f09a1f87": "hashOrderTyped(uint8,address,uint256,uint256,uint256,uint256)", +"f09a4016": "init(address,address)", +"f09a58f8": "internalSellTokenFromAdmin(address,uint256,bool)", +"f09a9b3c": "addGoal()", +"f09b538f": "function_3(string)", +"f09bea14": "totalCities()", +"f09bfcc2": "distributeFixed(address[],uint256)", +"f09c25e6": "playerCheckProvablyFair(uint256,bytes)", +"f09c3152": "NerdShitCoin()", +"f09c5829": "swaps(uint256)", +"f09cac98": "receiveApproval(address,uint8)", +"f09d3103": "royaltyTracking(address)", +"f09dd7c6": "withdrawAffiliateCommision()", +"f09dd844": "revealPurchaseOrder(bytes32,uint256,uint256,bytes32,address)", +"f09e34f0": "addReleaseAgent(address)", +"f09e65f1": "setAtomFath(uint256,uint64)", +"f09ea2a6": "offer(uint256,address,uint256,address)", +"f09ecf10": "Contract_Owner()", +"f0a03aa3": "ITE()", +"f0a0a299": "VIPFee()", +"f0a15f10": "TIER2_RATE()", +"f0a233d4": "SharesChainToken(address)", +"f0a279ae": "phase1EndingAt()", +"f0a2bea2": "testCheckRokBalance()", +"f0a2c430": "inGameRewardAddress()", +"f0a32e7b": "maxRefundStageDuration()", +"f0a3563c": "userClaims(address)", +"f0a3ce5d": "distributeDivs(uint256,uint256)", +"f0a3d4fd": "freezeAPI(uint256,string)", +"f0a3dfa4": "isStartTimeCorrect(uint256,uint256[])", +"f0a42aa0": "_upgradeLevel(uint256,uint16,uint16,uint16,uint16,uint16,uint16,uint16)", +"f0a43714": "whitelistSize()", +"f0a45cff": "report_death(uint256,uint256)", +"f0a71ef6": "getPrevBlock(bytes)", +"f0a72a84": "accountMaster()", +"f0a78538": "scheduleTransaction(uint256,bytes)", +"f0a7975f": "setDayQualitys(address)", +"f0aadcda": "AIMcoin()", +"f0aaf4ec": "getOptionsForModel(uint64)", +"f0abb382": "isHotWallet(address,address)", +"f0acc83a": "QCSCToken()", +"f0acd7d5": "spin()", +"f0acfea2": "piranhasTotalSupply()", +"f0ad243e": "getCoefficient(bytes2,uint256)", +"f0adcedb": "executeWinningProposal()", +"f0adda7d": "setNextVersionAddress(address)", +"f0ae03be": "robotCoin()", +"f0af0844": "addTimeUnequalledDefence(address,uint256)", +"f0af50c9": "stoppedSale()", +"f0af7e65": "cancelAgon(uint64)", +"f0afbf84": "newFutureLottery(uint256,uint256,uint256)", +"f0afd95a": "_2_education()", +"f0b01d56": "VINEYARD_ADDRESS()", +"f0b05bfd": "getGamesOfPlayer(address)", +"f0b070ca": "createAppeal(uint256)", +"f0b087c5": "getConfigUint(bytes)", +"f0b0cfa3": "readSoftwareInformation(address,address,uint256)", +"f0b1adbe": "registerEarnings(uint256)", +"f0b1b42e": "createContractPow(string,uint256,uint256,uint256)", +"f0b24181": "totalSupplySale2()", +"f0b25186": "shopKnife()", +"f0b30f69": "saveLockedERC20Tokens(address,address,uint256)", +"f0b32c69": "test_threeValidEqBytes32()", +"f0b37c04": "unauthorize(address)", +"f0b3a7ba": "hardCapToken()", +"f0b3adee": "updateRewardRate(address,uint256)", +"f0b5165f": "delayOfPreICO()", +"f0b53256": "SoftCap()", +"f0b534cb": "getApprovedVotes()", +"f0b620a2": "isPaymentCompleted(address)", +"f0b6e707": "ORDER_CANCEL(address,address,uint256)", +"f0b7e532": "withdrawTaker(address,uint256)", +"f0b80000": "PRESALE_START_DATE()", +"f0b85b19": "setDefaultLockInDuration(uint256)", +"f0b9e5ba": "onERC721Received(address,uint256,bytes)", +"f0ba23e6": "minterChangeable()", +"f0ba958c": "Error(uint8)", +"f0ba96ff": "performPayouts()", +"f0bae2c5": "doIssueDividend()", +"f0bae787": "_receiveBuyRank(address,uint256)", +"f0bbab3b": "HSHToken()", +"f0bbe08b": "phasePublicSale2_To()", +"f0bbe877": "Deployed(address,uint256,string)", +"f0bc153a": "get_contract_balance()", +"f0bc6cfb": "isReferred(address)", +"f0bc9cc5": "receivedDETreturn(address,uint256)", +"f0bcaf75": "UsingDB(address)", +"f0bd9ab5": "pushToken(address,bool)", +"f0bea8c7": "downVoteHouse(address)", +"f0bf1aea": "Paint(uint256,bytes3)", +"f0bf4df4": "setMinEnterFee(uint256)", +"f0bf611b": "transferDao(address)", +"f0bfd737": "Testtoken(uint256,string,string)", +"f0c001df": "proofType_Android()", +"f0c0546c": "closedRound()", +"f0c06aa5": "distrust(address)", +"f0c1d1c7": "setContributionPool(address)", +"f0c295fd": "seeZombieColor(uint256)", +"f0c388c7": "convertMainchain(string,string)", +"f0c413dd": "balanceOfContract(address,address,address)", +"f0c41bb2": "getChampsByOwner(address)", +"f0c45472": "modifiyEndFundingTime(uint256)", +"f0c4c04e": "extractFunds()", +"f0c4c339": "getFreezeSinceDetails()", +"f0c4fcc5": "mustToSellCourses()", +"f0c4fd0c": "isAttributesValid(uint256)", +"f0c5a46b": "periodPreITO_period()", +"f0c5a77b": "updateBurnableStatus(bool)", +"f0c69e8d": "calculateWithdrawable()", +"f0c71318": "zenOSCrowdsale()", +"f0c87852": "moveData(uint128[],address[],bool[],uint256[])", +"f0c95bc1": "setAdminVariables(uint256,uint256,uint256,uint256,uint256)", +"f0c99750": "endICOStage4()", +"f0ca618e": "Indemnisation_3()", +"f0caea2b": "SmartRoulette()", +"f0cafe0e": "tokenGNO()", +"f0cb556c": "updateLatestRevision(bytes32,bytes)", +"f0cb740a": "isJobStart(bytes)", +"f0cb8e77": "savedAddresses(address)", +"f0cbe059": "proxyTransferFromWithReference(address,address,uint256,bytes32,string)", +"f0ccc21a": "chunk5IsAdded()", +"f0cd58b7": "AuthAddr(address)", +"f0cd5c17": "cancelTx()", +"f0cd8057": "OACC()", +"f0ce6231": "XIAOZHI4()", +"f0cecafc": "privateSale2Hardcap()", +"f0cf198a": "RemoveSubscriber(address)", +"f0cfcaa8": "_getNewEstateId()", +"f0d02ce9": "AVG_BLOCKS_02W()", +"f0d07014": "allItemsForSale()", +"f0d0dd3f": "subDomainOwner(string,string)", +"f0d1c8ce": "hasTrade()", +"f0d1d021": "set_stoptransfer(bool)", +"f0d1eaaf": "getChannelById(bytes32)", +"f0d22ade": "isRepeated(int256)", +"f0d30786": "getPositionCallTimeLimit(bytes32)", +"f0d3a9df": "getBuyersCount()", +"f0d474f9": "underdogCount()", +"f0d4753e": "TOKEN_OFFERING_ALLOWANCE()", +"f0d4c92d": "setTimeBonus(uint256)", +"f0d4d1a6": "lotteryParticipants()", +"f0d504eb": "lookupKitty(uint256)", +"f0d5511c": "isArrAccountIsFrozenByDate(address)", +"f0d655f8": "_calculateTokenAmountAndRemainderBudget(uint256)", +"f0d6cc70": "endFullBonusTime()", +"f0d6ff48": "MeetOneTokenBase()", +"f0d7c9ff": "setPreviousSurplus(address[],uint256[])", +"f0d7f3eb": "auctionPause()", +"f0d85c89": "setRecovery(address)", +"f0d89e67": "LogRedeemTicket(uint256,address,string)", +"f0d8d4af": "sendTest()", +"f0d8e968": "getLastLease(uint8)", +"f0d90937": "usdAmount()", +"f0d97469": "setTokenExchange(address)", +"f0d9bb20": "yesToken()", +"f0da84f8": "getTransferable(bytes32)", +"f0daa286": "doubleXY(uint256,uint256)", +"f0daba01": "merchantIdHash()", +"f0dc4171": "collectTokens(address[],uint256[])", +"f0dce839": "IBU()", +"f0dd7a5d": "borrowBook(uint256,address,address)", +"f0dda65c": "mintTokens(address,uint256)", +"f0ddc0c6": "InjurymapCoin()", +"f0df232f": "buyMessage()", +"f0df6929": "RequireHuman()", +"f0e02bd6": "WEI_MAXIMUM_EARLYPURCHASE()", +"f0e10c0d": "play(address,uint256)", +"f0e1354c": "removeFromEggPhase(uint256)", +"f0e1691a": "addEvent(string,uint256)", +"f0e1ba2c": "priceLimit()", +"f0e1f84d": "setVotingProxy(uint32,int256,address)", +"f0e231b5": "Datenow()", +"f0e26f80": "getBattleDetails(uint256)", +"f0e3d1ba": "setEnd(bool)", +"f0e3fff8": "totalWon(address)", +"f0e40662": "getTotalAmount(uint256)", +"f0e42a1f": "getDividendTransactionLeft()", +"f0e4c4fe": "setGatewayI(address)", +"f0e53489": "integrity()", +"f0e5eeac": "ico2total()", +"f0e61771": "tokenFreezing(address,bool)", +"f0e6c2dc": "CASToken()", +"f0e769dc": "resumeSwap()", +"f0e7cf13": "adminClaimAirdropMultiple(address[])", +"f0e86f93": "ICOBlacklisted(address)", +"f0e959f9": "TokenSales(address)", +"f0ea0294": "setStage2Start(uint256)", +"f0ea433a": "sendQualifiedPartnerCommissionFee(address,uint256)", +"f0ea4bfc": "raised()", +"f0eb29fb": "_communitySupply()", +"f0eb737a": "getCurrentDiscount()", +"f0ebce5a": "getEnum()", +"f0ec03ae": "tokenWeiSold()", +"f0ec747e": "VETRA()", +"f0ec94cf": "edgePerPosition()", +"f0ecadaf": "comprueba(address,bytes32)", +"f0ecadcc": "voteSvp03(bool)", +"f0ed029e": "DebugUint(uint256)", +"f0ed14e0": "right95(uint256)", +"f0edb7cf": "admin_set_Apply_Store_Id_Fee(address)", +"f0ee7df2": "setMaxWin(uint256)", +"f0ef7621": "FishOne()", +"f0f0fe10": "ownerSetRecommendProportion(uint256)", +"f0f21344": "right27(uint256)", +"f0f2805f": "isOnSale(uint256)", +"f0f3f2c8": "getProject(uint256)", +"f0f44260": "setTreasury(address)", +"f0f46302": "shopHelmet()", +"f0f53ee4": "setBool(bytes32,bytes32,bool)", +"f0f5af8b": "calculateObtainedAMIS(uint256)", +"f0f7bd31": "LibertyToken()", +"f0f87e98": "TokenWithoutStart(string,string,uint8)", +"f0f8aff9": "getPriceForAssetAmountMulCollatRatio(address,uint256)", +"f0f8b7a5": "betX5()", +"f0f967e8": "canCall(address,address,bytes)", +"f0f9a729": "dividendsOf()", +"f0fa55a9": "setSlippage(uint256)", +"f0fb4372": "RatingStore(address,address)", +"f0fb8efd": "allowDefaultToken(address,bool)", +"f0fbc8ac": "indInflationDeposit()", +"f0fbe2e4": "addressAirdrop()", +"f0fbfd3a": "targetDiscountValue5()", +"f0fc1438": "tradeComplete(address,uint256,address,uint256,address,address,uint256,uint256)", +"f0fc6bca": "claimDividend()", +"f0fcc6bb": "pay(address,uint256,address)", +"f0fdb32f": "canStartWork()", +"f0fdc689": "setInv2(address)", +"f0fdf834": "a(uint256)", +"f0fe3d68": "metaBurnCarbonDollar(address,uint256,bytes,uint256,uint256)", +"f0fee1f7": "LogMigrate(address,address,uint256)", +"f0feef96": "closeChannel(bytes,uint256,uint8,bytes32,bytes32)", +"f0ff4840": "LuckchemyCrowdsale(address)", +"f0ff6ac4": "withdrawal(uint256,address,uint128)", +"f1001f8c": "getTotalLockedBalance(address)", +"f10143e1": "TokenToppedUp(address,uint256,uint256)", +"f101618a": "getMiniPoolEdit_8()", +"f1018c6f": "boughtNum()", +"f101b269": "appstore_share()", +"f103b433": "updateMaxSupply(uint256)", +"f104c836": "setAssetTransferGas(address,uint256)", +"f1052af5": "isRegisteredContract(address)", +"f105c981": "get_contrib_arbits_min()", +"f105e23b": "PVE_COMPENSATION()", +"f1068454": "pid()", +"f10700c2": "shouldCompleteDay()", +"f1076703": "getVerificationId(address,bytes,bytes)", +"f107941b": "buyTest(address,uint256)", +"f107b5e7": "getMaximumLimit()", +"f108a7d2": "withdraw(uint256,address,string)", +"f109517c": "delegatedTxHashesUsed(bytes32)", +"f10968ea": "assertEq(bool,bool,bytes32)", +"f10a4f0a": "WALLET_PARTNER()", +"f10a7798": "setAuth(address,address)", +"f10a9848": "currentNumberOfUpgrades()", +"f10ae2ab": "__dig_then_proxy(uint256,address,bytes)", +"f10ca95a": "close(bytes32,bytes32)", +"f10cb3da": "ObjectToken(uint256,string,uint8,string)", +"f10cb5dc": "DomainChanged(address,uint256,uint256)", +"f10ce7c4": "registration(address,string)", +"f10d1de1": "setUnbondingPeriod(uint64)", +"f10e5ceb": "getNumAdd(uint8)", +"f10ecc65": "chainlinkToken()", +"f10fae62": "setLLV_edit_21(string)", +"f10fdf5c": "getContribution()", +"f11079cf": "createType(address)", +"f110bbdf": "SetupAccounts()", +"f1112e70": "payYearlyJackpot(address)", +"f1115024": "registerBusinessOwner(bytes32,address)", +"f1115c7e": "transferMSI(address,uint256)", +"f112ddc0": "GJMI()", +"f113c854": "icoThresholdBonus1()", +"f113f700": "advisoryReserveTokens()", +"f113fccd": "trueGods()", +"f1144ce0": "HCoinToken()", +"f1145727": "buyStarterPack()", +"f1147bae": "withdrawRoyalty()", +"f1156cdf": "getCurrentVoting()", +"f115f06a": "WhiteListSet(address,bool)", +"f1160dc2": "ParticipantAuthority(string,address)", +"f116260f": "CryptoTreasure()", +"f1167e0d": "createPlayerIfNeeded(address)", +"f1168e11": "_createMobster(string,address,uint256,uint256,uint256,string)", +"f1173928": "RemovedFromGeneration(address,uint256)", +"f11745df": "totalHolder()", +"f117c924": "totalInvestedInWei()", +"f1183e21": "assertEq0(bytes,bytes,bytes32)", +"f118e465": "LogCreateVIBEX(address,uint256)", +"f118f7d6": "setDestinationMultisigWallet(address)", +"f119a48d": "toUnixtime(uint32,uint8,uint8,uint8,uint8,uint8)", +"f119ada4": "addTeam(string)", +"f119fcaa": "isMintableNFT()", +"f11a8911": "accountTxs(uint256)", +"f11a97ef": "MinerToken()", +"f11af32a": "EuroToken()", +"f11b9b46": "FRPTOKEN()", +"f11b9fc8": "emitTokens(address,uint256)", +"f11bdfa4": "_isValidHeight(uint8)", +"f11be7c1": "getTrustedContracts()", +"f11c2cec": "changeOwner(address,address,address)", +"f11c4482": "approveFromProxy(address,address,uint256)", +"f11c46f4": "How_to_interact_with_Smartcontract()", +"f11c8de8": "ZENT()", +"f11cfc56": "Vicky()", +"f11d5039": "place_holder()", +"f11d5b33": "reward(address,bytes32,uint256)", +"f11dd6ac": "viewGiveKarmaFee()", +"f11eb099": "preIcoAllocation()", +"f11ef5cf": "reserve(uint8)", +"f11f7d2d": "maximumBidAllowed()", +"f12001ae": "Testereumx()", +"f1204db6": "maximumJackpot()", +"f1208af8": "drawWeeklyWinner()", +"f120974e": "CHENDE()", +"f1215d25": "deposit(uint256,string)", +"f122ed60": "send_message(address,string)", +"f1233b79": "updateTimeBetweenGames(uint256)", +"f12479ac": "getPhase(uint8)", +"f124a300": "setPayable(bool)", +"f124eab5": "ETD()", +"f125561d": "notifyReceiver(address,address,uint256,bytes)", +"f12585f5": "getStageVolumeBoundaries(uint256)", +"f12611f1": "XID(address)", +"f1261fce": "permitTransfers()", +"f126e30f": "countUser(address)", +"f1272f35": "ICOBlaster()", +"f127328a": "totalTokenCollected()", +"f12782b2": "EPXAirDrop()", +"f127e53c": "LunchMoney()", +"f1280c23": "getCCH_edit_32()", +"f1287aef": "Ethmoji()", +"f129c5d7": "getGeneScienceAddress()", +"f12a1580": "withdrawDevReward()", +"f12a15b1": "heapify(int128[])", +"f12acca2": "upgradePonyHashing(uint256,uint256)", +"f12b3d3c": "SentFeeToPlatform(uint256)", +"f12b60f2": "TEAM_POOL_INIT()", +"f12c095b": "developer_string_A(string)", +"f12c87eb": "planetIndexToOwner(uint256)", +"f12d15c3": "transwerFunds(uint256)", +"f12d394f": "execute(uint8[],bytes32[],bytes32[],address,uint256,bytes)", +"f12ddd2b": "sendTokensToOwner(uint256)", +"f12e5eaa": "withdrawPartial(bytes32,address,uint256)", +"f12f5409": "accrueInvestorsTokens(address,address,uint256)", +"f12f6925": "NokuFlatPlan(uint256,uint256,address,address)", +"f13016d5": "internalPresale(address,uint256)", +"f1309dc0": "transferTokens(address,uint256,uint256,uint256)", +"f130da53": "GreenXToken()", +"f13101e9": "_delegate(address)", +"f1311a2e": "pgoMonthlyInternalVault()", +"f1317352": "setVCX(address,address,uint256)", +"f1317c09": "halt_purchases()", +"f1319892": "CoinifinexToken()", +"f131a7ae": "clearGame()", +"f1320af2": "exempt(address)", +"f13375bd": "addApprovedWalletAddress(address)", +"f13397b4": "EmeraldToken(string,string,uint256)", +"f133a7c6": "_update(uint256,uint256)", +"f133c38c": "testIntParserOneDecimal()", +"f1348138": "DoAirDrop(address,uint256)", +"f13497d6": "notifyCollateralNotTransfered(uint256)", +"f1349955": "externalTxs(uint256,bytes32)", +"f1352e78": "rewardPlayers(address[],uint256[])", +"f136a874": "approvedAddresses(address)", +"f137005f": "EOCHToken()", +"f13707b3": "adminGetPlayer(uint256)", +"f1378efa": "QuanYToken()", +"f137c236": "DSNCOIN()", +"f137d1a3": "getVestedAmount(uint256,uint256)", +"f13837f6": "ALPToken()", +"f1388f14": "mtrx()", +"f1388f46": "set_value()", +"f138fca5": "resetKoth()", +"f1395f3f": "tokensForDevteam()", +"f1398db1": "MbbToken()", +"f13a38a6": "getConstant()", +"f13ab647": "doMakerPayment(address)", +"f13ad3bf": "RemoveAllHeaders()", +"f13b68e8": "getPurchaseableMode(uint256)", +"f13b8d66": "removePerformer(address)", +"f13ba6a9": "_calcPhase()", +"f13c310c": "_createPlayer(string,uint256)", +"f13c7f57": "returnAllBalance()", +"f13c8fef": "weiTokensRaised()", +"f13c9b2b": "gcFundAmount()", +"f13ca4b8": "setEtherAmount()", +"f13cc606": "buyNOS(uint256)", +"f13d111f": "reverse(uint8[])", +"f13d22c1": "getModuleByName(string)", +"f13dc2e2": "watermark()", +"f13fc23b": "FINX()", +"f14053ad": "minVal()", +"f140b8ea": "getSentTransfer(uint256)", +"f141d076": "DURATION_DECREASE_PER_ETHER()", +"f14210a6": "withdrawETH(uint256)", +"f1437bd0": "setFrom(address)", +"f143e6db": "clearRequest(uint256)", +"f143ffe9": "ProfToken()", +"f14467fb": "ViewMyPrivateKeys(string)", +"f1448e10": "requestExecution(bytes)", +"f1455328": "CappedCrowdsale(uint256,uint256)", +"f145761c": "StartedGame(uint256,uint256)", +"f145cae9": "updateStoreFee(uint256)", +"f145ff23": "getDistributedTokens()", +"f1469382": "updateRates(uint256,uint256)", +"f147decc": "buscarAssinatura(string)", +"f147df3b": "get_king_address(address)", +"f1496070": "getAuctionArray(uint64,uint64)", +"f14ae17d": "isPresalePurchase(address)", +"f14b1c01": "upgradeFactory(uint256)", +"f14bd85d": "resignFromGroup()", +"f14be97f": "setTgeAddr(address)", +"f14ca7d7": "getVestingReleaseInterval(address,uint256)", +"f14ca885": "preICOcontributors()", +"f14d147f": "tokenSaleWeiMax()", +"f14dc176": "setDestructionCurator(address)", +"f14e96f1": "getBestBid(uint256)", +"f14eb30d": "SaleClockAuction()", +"f14f58f1": "removeAsset(uint256)", +"f14faf6f": "donate(uint256)", +"f14fcbc8": "commit(bytes32)", +"f14ff5cf": "getSeatMessageUrl(uint256)", +"f1508105": "Ohni(uint256,string,uint8,string)", +"f1518627": "anotherOwner()", +"f151e4ae": "devuelveToken()", +"f1522d53": "redeemablevilsinfo(address)", +"f1533936": "BNTPrice()", +"f153d3ad": "BurnupHoldingAccessControl()", +"f15467c4": "WelCoinICO(uint256,uint256,address,address)", +"f15627a1": "mintArray(address[],uint256[])", +"f156deb2": "miningTokensOf(address)", +"f1572e7d": "getQuoteKey()", +"f15732b8": "REAL()", +"f157c54b": "operatorRedeemByTranche(bytes32,address,uint256,bytes)", +"f157ea0b": "forkAddress()", +"f158458c": "getMinimumEndowment(uint256,uint256)", +"f15886db": "addressToReceiverToAllowedSprite(address,address,uint256)", +"f1588d66": "getPurchaseAmount(address,uint256)", +"f158e478": "destroyCampaign(bytes32)", +"f159eb84": "KVCToken()", +"f159f38f": "getTracks2()", +"f15a1b59": "tokenForTeam()", +"f15a691d": "validPurchase()", +"f15a9ae8": "maxPVPContenders()", +"f15ae568": "addEntry(address)", +"f15afa50": "fpMulI(int256,int256)", +"f15b2bda": "approveMintLocked(address,uint256)", +"f15beecf": "payNode(bytes32,uint32)", +"f15bf739": "getShareholderArrayLength()", +"f15caaa9": "insertDate(uint256)", +"f15cfe33": "KRWT_Token()", +"f15d775d": "changeMedianier(address)", +"f15e3af1": "getMatchAtRoundIdAtIndex(uint256,uint256)", +"f15e5548": "PasesSocio(uint16)", +"f15f14c5": "Dividends()", +"f15f2bf0": "blockEndICO()", +"f15f56a7": "calcBingo()", +"f1608682": "updateUserDetailsInBulk(address[],uint256[],uint256[],uint256[],bool[])", +"f160d369": "updateFeeRecipient(address)", +"f1610120": "next_giveaway()", +"f1625534": "deactivateRound(uint256)", +"f16270c3": "VITTokenSale(address,uint256,uint256,uint256,uint256,address[20])", +"f162c5a1": "totalScaleStaked()", +"f1637630": "withdrawBatch(bytes32[],address)", +"f1644b6c": "getFaucets()", +"f16638ec": "UselessReserveBank()", +"f1665a48": "NewVestedToken(address,address,uint256,uint256)", +"f166dc27": "Bid(address,string,uint256)", +"f1671b56": "getWeightRange()", +"f16787bc": "readFromCards(uint256,uint256)", +"f1679095": "getTransferAddressUser(address)", +"f167d695": "sacarDoacoes()", +"f1684237": "Ownable(address)", +"f1686296": "Hodor(string)", +"f1687a8d": "tokenSellCost()", +"f1694b3d": "updateResearch(address,uint256)", +"f16b6482": "gameCountdown(address)", +"f16b9422": "_recordFailedOldOwnerTransfer(address,uint256)", +"f16bdb9c": "validate(bytes20,uint96,uint32,bytes32[],uint16)", +"f16bdba9": "isCustomerinBLFromWL(address,address)", +"f16c5e8d": "issuerGuiveToken(address,uint256)", +"f16d9aca": "khabibToken()", +"f16dfbe9": "verifyAccount(address)", +"f16e74ac": "minDividendEtherAmount()", +"f16f9b53": "signedApproveAndCall(address,address,uint256,bytes,uint256,uint256,bytes,address)", +"f16fa66a": "updateLotteryData(address)", +"f16fa954": "debug_resizeRealPrefix(uint256,uint256)", +"f1700f94": "getInfoF1(address)", +"f1703d24": "addEntity(address)", +"f170c83c": "famedStarAddress()", +"f1714e97": "preserveTokens(address,uint256)", +"f1714fcc": "AddCommitteeToMapAndArrayEvent(address)", +"f171a730": "transferEvent_(address,uint256,bool)", +"f171ba5d": "verdictExecuted(address,bool)", +"f172f58f": "getPositionOwner(bytes32)", +"f172f84f": "jockeyLevel(address)", +"f17313e6": "unFrozenAddress(address)", +"f1736d86": "m_dailyLimit()", +"f17382ae": "SUPPLY_FOR_RESERVE()", +"f1739cae": "transferProxyOwnership(address)", +"f17401de": "init_multiowned(address[],uint256)", +"f17454b0": "UserAdded(bytes20)", +"f174683a": "VTrust()", +"f174b333": "buscarDocumentoPorId(uint256)", +"f1751688": "showReportForDevice(uint16)", +"f17520e5": "changeWhitelistAdmin(address)", +"f1753550": "supportsInterface(bytes32)", +"f175e6a9": "getTwitter()", +"f1762e5d": "bnbRefundEnabled()", +"f1765b22": "acceptSale(address[])", +"f1771cf0": "BURNABLE_UP_TO()", +"f177e837": "to62Encoding(uint256)", +"f177fc4f": "PornSceneToken()", +"f1781c72": "removeLockedTime(address,uint256)", +"f1797233": "positionAtIteration(uint256)", +"f179a86e": "setEtherToTokenAllowed(bool)", +"f179c6ef": "confirmBatch(address[])", +"f179f9f1": "parsecCreditContract()", +"f17a1ff5": "BAG_TRANSFER_FEE()", +"f17a3c4b": "FTST()", +"f17b1d63": "BacCara()", +"f17b5bb0": "assertMatchingBalance(uint256,uint256)", +"f17b6d9b": "relayCMCT(address,uint256,bytes32)", +"f17ba16b": "approveByAddress(address,address,uint256)", +"f17cc54b": "TestLib()", +"f17ccd73": "DNMC()", +"f17d186c": "withdrawAllFundsFromContract()", +"f17e48ec": "adminTransfer(address,uint256)", +"f17f29d0": "getGoldDataSerial()", +"f17f3ca3": "AUCTION_WHEN_PERCENTAGE_LOGIC_STARTS()", +"f17f6f8a": "escapeCaller()", +"f1806a21": "getUnapprovedUsers()", +"f180743a": "tokensForFounder()", +"f1807e35": "removePermission(uint8)", +"f18166c2": "TRADE_REWARD()", +"f181b388": "setTotalWithdraw(uint256,address,uint256,bytes,bytes)", +"f181f396": "unspentAmounts(uint256)", +"f182dd3b": "releaseTokens4Sender(uint256)", +"f183452c": "releaseTokenByOwner(address)", +"f1835db7": "verify(bytes32,uint8,bytes32,bytes32)", +"f1838a15": "burnFeatureDeactivation()", +"f1838fe4": "getExpectedRates(address,address[],address[],uint256[])", +"f1850af8": "getTokenSymbol()", +"f1860118": "tradeExecuted(address,uint256)", +"f1861749": "nextDiscountTTMTokenId6()", +"f18697cf": "IdolCoin()", +"f186a625": "transferContentOwnership(bytes32,address,address,string)", +"f186bb79": "getPixelPrice(uint16,uint16)", +"f186c67f": "permit(address,bool)", +"f186d77e": "setStarContract(address)", +"f1870e0c": "contractFinalized()", +"f187650d": "DeskBellPresale()", +"f18771de": "NujaRegistry()", +"f1880128": "getSTMPDecimals()", +"f1880b24": "checkToken(address)", +"f18899be": "getOpenApplications()", +"f189348a": "teleportCharacter(uint32)", +"f1895e08": "__issueTokens(address,uint256)", +"f1898fda": "TOKEN_CONTROLLER_INTERFACE()", +"f18ab544": "pendingList(address)", +"f18ad6fb": "getRecord()", +"f18b7bde": "SplitDividendsAmongstOwners(uint256)", +"f18ba98c": "handleSaleCompletionCallback(uint256)", +"f18cbe08": "_byteToString(bytes32)", +"f18d03cc": "transfer(address,address,address,uint256)", +"f18d20be": "adminWithdraw()", +"f18d4dbb": "addTokenSupply(uint256)", +"f18d5a93": "TokensSent(address,uint256)", +"f18dd512": "PERSONAL_FIRST_HOUR_CAP()", +"f18df6bb": "increaseAllowanceToken(address,uint256)", +"f18e120b": "setMaxTokensPerAccount(uint256)", +"f18ecf80": "OfferToken(uint256,string,string)", +"f190a793": "companyTokenWallet()", +"f190ac5f": "mintToAddresses(address[],uint256)", +"f190b4d3": "newUserRewardPool()", +"f1914dc5": "StaticEthAvailable(uint128,uint128)", +"f191c26d": "CPT()", +"f192866a": "sellTicket(uint256)", +"f192e91c": "forfeit(bytes32)", +"f1931b9e": "LAFIN()", +"f193a3f7": "changeBank(address,address)", +"f19414d5": "admin_inactive_dividend(address)", +"f194c23f": "_getCurrentAltarRecordId()", +"f1952473": "AcoraidaMonicaWantsToKnowTheNewQuestion(string)", +"f195995c": "isValidGeneration(uint8)", +"f195f0f9": "slice2(bytes,uint256,uint256)", +"f19674f6": "PatronThreeWithdrawal()", +"f19798ab": "numRolls()", +"f1979de8": "setPixelAreaColor(uint256,uint256,uint256,uint256,uint32[])", +"f197bbdd": "deadlineOne()", +"f1991a27": "saleStartTokenCreationRate()", +"f199265f": "internalExecuteCall(address,uint256,uint256,bytes)", +"f199f56d": "roundReward()", +"f19a5810": "changeBaseTokenPrice(uint256)", +"f19ab230": "Bcoin()", +"f19ac52d": "newDepositCommission(uint256)", +"f19be31b": "btcAddrPubKeyCompr(bytes32,bytes32)", +"f19be5d5": "JackpotCore(uint256,uint256,uint256,uint256)", +"f19c020d": "returnTokensAll(address)", +"f19c78b5": "contributorsKeys()", +"f19cfeff": "RepossessionBounty(address,uint256)", +"f19d2bcd": "EOS_address()", +"f19d736e": "Prosper()", +"f19dd75b": "lspToken()", +"f19e3c9f": "LogSnapshotCreated(uint256)", +"f19e75d4": "ownerMint(uint256)", +"f19e774e": "isValidBet(uint256)", +"f19eb731": "TKT_TokenERC20(uint256,string,string)", +"f19ee2a9": "_getAsset()", +"f19efc43": "getRoundInProgress()", +"f19f3246": "rejectOwnership()", +"f19fb157": "withdrawnow()", +"f19fc6ab": "gonIIToken()", +"f19fe69b": "withdrawTokenTo(address,address)", +"f19fefbc": "Hodling(address,address,uint256)", +"f1a00a53": "unregisterListening(address)", +"f1a0a85c": "div(uint64,uint64)", +"f1a138f4": "Airdropsamount()", +"f1a252b8": "getMoneyBack()", +"f1a39bde": "indexByTokenId(uint256)", +"f1a3de09": "register_minting(address)", +"f1a5158b": "Contest()", +"f1a570b8": "DividendRecycled(uint256,address,uint256,uint256,uint256)", +"f1a5fc99": "bytesToInt(bytes)", +"f1a63733": "createBountyToken(address,uint256)", +"f1a6ed46": "ORIGIN_ETH_BRT_RATIO()", +"f1a9af89": "startPrice()", +"f1a9d749": "LRCCcoin(uint256,string,string)", +"f1aaea1c": "updateLabAddress(address)", +"f1ab36b4": "getSaleInformation()", +"f1ace1a1": "ART_DECIMALS()", +"f1ad3334": "storeETH()", +"f1ade50c": "VelesCoin()", +"f1ae5437": "changeTakeFee(uint256)", +"f1ae72a5": "minAcceptedEthAmount()", +"f1ae8c55": "startRaffle(uint256)", +"f1afc4f6": "ShareHolderController(address,address[],uint256[],address,uint256,uint256,uint256,uint256,uint256,uint256)", +"f1b0202e": "TalkToExpertPayment(address)", +"f1b07f96": "deblacklistAddress(address,address)", +"f1b12493": "IcoContract(address,address,uint256,uint256,uint256,uint256,uint256)", +"f1b234ad": "setWallet(address,address)", +"f1b2b03c": "start_ts()", +"f1b2d6a3": "getListings()", +"f1b3ea6f": "asyncDebit(address,uint256)", +"f1b3f968": "getRaceEndBlock()", +"f1b3fd80": "momentTimeOf(uint256,uint256)", +"f1b46bc8": "generateRandomCard(uint32)", +"f1b4d548": "isValidTeam(uint256[])", +"f1b50c1d": "enableTransfer()", +"f1b541c2": "startPublicSaleStage()", +"f1b5bc17": "mintAmount4()", +"f1b5c777": "contributeWasCalled()", +"f1b5d7de": "pre_prices(uint256)", +"f1b6315e": "StartRoulette(uint8)", +"f1b676a4": "ico3Ended()", +"f1b6cee5": "winPot(uint256[])", +"f1b74348": "addExisitingContributors(address[],address,uint256[])", +"f1b75173": "getLegacy(uint256)", +"f1b8a5bf": "commitPhaseMinVotes()", +"f1b9ee24": "setInactive()", +"f1bab09c": "setExtraBonus(uint256)", +"f1bab410": "manualSale(address,uint256)", +"f1bba50a": "GoldBlocksTickets()", +"f1bba6f9": "account(string)", +"f1bbc663": "tokenSaleClosedTime()", +"f1bca30f": "removeManyAdmins(address[])", +"f1bca7a4": "doCall(uint256)", +"f1bcb6e5": "createContractor(address,address,bool,address,string,string)", +"f1bd4c04": "getJackPot()", +"f1bd5978": "__address3__()", +"f1be1679": "getMarket()", +"f1be42f1": "numCharacters()", +"f1bf18db": "availableZNT()", +"f1bfb9cd": "listSingleCard()", +"f1c05831": "authoriseSale(uint256,uint256,address,uint256)", +"f1c10c24": "infoTokens(address)", +"f1c16deb": "validPurchase(address,uint256,uint256,uint256,uint256,uint256)", +"f1c21077": "PROBABILITY_DIVISOR()", +"f1c22a05": "setNewPixelPrice(uint256)", +"f1c30ec0": "reclaim(bytes)", +"f1c36ce0": "burnFromAddress(address)", +"f1c3dd3e": "fuckTest()", +"f1c41b68": "setConsensusRules(uint256[6])", +"f1c461c7": "mesasCreatedVerify()", +"f1c4d6b0": "DOG_Crowdsale()", +"f1c4ecb4": "maxCapWei()", +"f1c53a3a": "UpdateUserExtraData1(address,bytes32)", +"f1c55931": "reserveFunds(address)", +"f1c5d07b": "totalLoveBlocks()", +"f1c61958": "DIGITALCASH()", +"f1c6aeb7": "SetApplicant(string,uint32,uint256,int256,string)", +"f1c6c520": "runningauctions(uint256)", +"f1c760ae": "fixBalanceInternal(address)", +"f1c7689e": "CandyRate()", +"f1c94b45": "lastBlock_a7Hash_uint256()", +"f1c9cc11": "lockMin()", +"f1ca9410": "gen0CreatedCount()", +"f1cca8aa": "setTakerFee(uint256)", +"f1ce37d9": "eachUserWeight()", +"f1ce9595": "TIME_PERIOD_IN_SEC()", +"f1cea858": "TCLRToken(address,address,address,address,address,address)", +"f1cf5b38": "setWethContractAddress(address)", +"f1cf8d27": "addFuel(uint256,uint256,uint256,uint256,uint256)", +"f1cfb100": "remainingEscrow(bytes32)", +"f1cff4b5": "testBitsNotSetSuccess()", +"f1d02a8c": "MiningToken(string,string)", +"f1d0469e": "get_sec_by_year(uint256)", +"f1d08bfa": "setOpenForSale(bool)", +"f1d15f1f": "setLandPrice(uint256,uint256)", +"f1d1768c": "updatePresaleListMapping(address[],address,bool)", +"f1d18a42": "safediv(uint256,uint256)", +"f1d20d4d": "provider(bool,address,address,address)", +"f1d2165f": "SaleActive()", +"f1d22be0": "freezeAll(address)", +"f1d2b3c2": "Owner1()", +"f1d2b8ab": "seePurchase(uint256)", +"f1d308d5": "SingularityTest17()", +"f1d35260": "setGovernor(uint8,address)", +"f1d3a853": "PalliumCrowdsale(uint256,address)", +"f1d588c5": "setRoleManager(address)", +"f1d59443": "getUSETTotalSupply()", +"f1d61850": "confirmationPeriodOver()", +"f1d61f23": "timeLockAdvisor(address)", +"f1d71b73": "betBlueCoin()", +"f1d73540": "Quiz(string,string)", +"f1d841f1": "minAcceptedAmount()", +"f1d89857": "RequestFactory(address,address)", +"f1d91942": "setInfoUrlPrefix(string)", +"f1da588a": "PrivateCoin()", +"f1da7e63": "getMortgageRate(address)", +"f1daa1f0": "writeDefinitions(uint256,string)", +"f1daa5ba": "calculateAmountForETH(uint256)", +"f1db23dc": "totalProceeds()", +"f1dbd547": "FINAL_AML_DAYS()", +"f1dbd647": "receiveDividends(uint256,uint256)", +"f1dc24ae": "getMeshPointByCreator()", +"f1dd08b4": "transferCommissionReceiver(address)", +"f1dd6147": "buyTokensIco(address)", +"f1de75e3": "getPrefixOwner(string)", +"f1dfcddb": "testTransferGasIssue()", +"f1dffed7": "setIntValue(int256)", +"f1e02620": "setFirstTime(uint256)", +"f1e03d67": "createEscrow(bytes16,address,address,uint256,uint16,uint32,uint32,uint8,bytes32,bytes32)", +"f1e253dd": "brickIds()", +"f1e298c3": "addFee(address,uint256,address,uint256)", +"f1e2ac12": "evalParam(bytes32,uint32,address,address,bytes32,uint256[])", +"f1e2e921": "_Owned()", +"f1e328f9": "left68(uint256)", +"f1e4a540": "unsetCoordinator()", +"f1e50ce9": "saveMe()", +"f1e69009": "registerDsp(address,uint8,bytes32[5])", +"f1e6bb1c": "getVoteOptions(uint256)", +"f1e6f4cd": "right40(uint256)", +"f1e7ae1f": "modifyMemberLimits(address,uint256,uint256)", +"f1e8ace7": "decodeBillingMetadata(uint256)", +"f1e8aec4": "isStardted()", +"f1e954d8": "increaseTokenSaleAllocation()", +"f1e9951f": "getActionCount(bool,bool,bool)", +"f1e9a514": "VREO_SALE_PHASE_2_END_TIME()", +"f1ea43e7": "TCSCCoin()", +"f1ea6cbd": "creationMinCap()", +"f1ead3d6": "getAuctionsFor(address)", +"f1eae25c": "mortal()", +"f1eae64a": "openSell()", +"f1eb0ed9": "newInitialPlayerOffering(string,string,uint256,uint256,address,uint256,uint8)", +"f1ebe451": "ChooseB()", +"f1ecff08": "BastoneToken()", +"f1ed9923": "isEcoAllocated6()", +"f1eeec2e": "insureClient(address,uint64)", +"f1ef9881": "hashSecret()", +"f1ef9a08": "preicoAddresses(address)", +"f1efb76a": "getPayTo()", +"f1f05a3f": "getAttr(bytes32,uint256)", +"f1f0b290": "lockToken(bool)", +"f1f1e30f": "ethForKey(uint256)", +"f1f201e8": "getArtworkInfo(uint256)", +"f1f33565": "ENG()", +"f1f339ef": "doCheck()", +"f1f3ae31": "novaContractAddress()", +"f1f49033": "deductDeposit(address,uint256)", +"f1f4e25d": "OctaBlock()", +"f1f62f10": "isWalletLocked_Send(address)", +"f1f6d945": "webAddress()", +"f1f732cb": "BONUS_TOKENS_RESERVED()", +"f1f76438": "checkNumber(address)", +"f1f87fc9": "BitMix()", +"f1f9539f": "KittyRace(address)", +"f1fa1744": "sellpause()", +"f1fa906c": "getProjectName(uint256)", +"f1fb3ace": "minEth()", +"f1fb5219": "_calculateContribution(uint32,uint8,uint64)", +"f1fbf2a3": "calculateObtainedSBT(uint256)", +"f1fc4db4": "updateCutoff(uint24)", +"f1fd9614": "getNumData(uint256)", +"f1fe42b8": "TransactionRequest(address[3],address,uint256[11],uint256,bytes)", +"f1fea32a": "setPOOL_edit_7(string)", +"f1fec2b8": "nodePrice()", +"f1ff3d4b": "totalNumberMinted()", +"f1ff4a67": "releaseWithheldTokens(address,bool)", +"f1ff732b": "setBanker(address)", +"f1ffde45": "BasicBallot(address,string,string)", +"f20001b0": "Menu08()", +"f20151e1": "setExecutionMaxPerTx(uint256)", +"f2016a4f": "updateMinEthPerNotification(uint256)", +"f201da0d": "newChannel(address,address,uint256,uint256,uint256,address)", +"f2020275": "users()", +"f2021550": "QBankChain()", +"f2022905": "toldYouItWouldWork()", +"f20341a8": "getRemainingTarget()", +"f203af26": "registerImport(bytes8,bytes8,uint256)", +"f203c19d": "usersAddress()", +"f203c857": "getSpeaker(address)", +"f20431c8": "MyTotalNTD()", +"f2057179": "changeInstitutionOwner(string,address,address)", +"f20652a1": "nxcSold()", +"f2068bfc": "addUniqueSpinner(string,uint256,address,uint256,uint8,uint8,uint8)", +"f206cf74": "MINIMUM_ETH_SOFT_CAP()", +"f206e7c9": "fechAllVoteResultBySnapshotBlock(uint256)", +"f20717e9": "getNbTrade()", +"f207564e": "register(uint256)", +"f2080ba6": "Pong(int8)", +"f2083220": "activeTranscoderTotalStake(address,uint256)", +"f2091083": "dollaryDanToken()", +"f2097550": "bucketExists(bytes32)", +"f2097b9b": "doesAddressOwnSpinner(address,uint256)", +"f209fc1f": "purchaserWhiteList(address)", +"f20b2cf5": "getMJModel(uint256)", +"f20b4368": "AllocateMainSale(address,uint256)", +"f20b93ea": "getInvoiceAmountPaid(bytes32)", +"f20d5385": "endCrowdsalePhase2Date()", +"f20d5943": "s0(bytes1)", +"f20d5e57": "distributeToReferreal(uint256,address)", +"f20dde7b": "updateCostETH()", +"f20de9d6": "openGameLoop()", +"f20e5e35": "getAuctionDetails(uint256)", +"f20e5f51": "PeriodChanged(uint8)", +"f20eaeb8": "output()", +"f20f24ec": "pauseTokenSale()", +"f2102390": "SOFTCAP_RATE()", +"f2107f83": "getStakingInfoPayload(bytes)", +"f2108aa8": "FraCoin()", +"f2114752": "viewSecondLotOfContractState()", +"f21153d2": "withdrawSettle(bytes32,uint256,address,address,uint256,uint256,bytes32,bytes,bytes,bytes32)", +"f211c9ed": "releaseMultiByStage(address[])", +"f2125f40": "SEELE()", +"f212c216": "setSystemAuctionDuration(uint256)", +"f213159c": "depositTo(address,address,uint256)", +"f2139abf": "getBigPromoBlockInterval()", +"f213aad2": "dayWithdrawCount()", +"f2141ab9": "lossToCharity(uint256)", +"f21439b5": "envokeTokenAllocation()", +"f2147f7b": "currentPeriodPrice()", +"f21502e5": "ZTHTKNADDR()", +"f2153fae": "BNKCToken()", +"f215bc3e": "genEstKeyBlockNr(uint256)", +"f21632e1": "icoEtherReceived()", +"f2166ab1": "xpanda(uint256,string,string)", +"f216b203": "TokenSyndicate(address,uint256,uint256,uint256,uint256)", +"f216bfd6": "updateUportInfo(string)", +"f216f45d": "nextStageBonus()", +"f21711f3": "currentRating()", +"f217d6a3": "standardDailyLimit()", +"f217f15c": "doCreate(uint256,bytes)", +"f2180c61": "versionCode()", +"f2181e23": "initializeGasPriceLimitFundraiser(uint256)", +"f219fa66": "depositERC20(address,address,uint256,uint256)", +"f21a1468": "getOutcomeTokens()", +"f21aaee6": "MinerChain()", +"f21aefd2": "isDebug()", +"f21af007": "unWhitelist(address)", +"f21b1150": "test_div(uint256,uint256)", +"f21b422a": "unregisterCustodian(address,address)", +"f21b64ad": "DepositETH(uint256)", +"f21b9379": "setRoundAvailableToken(uint256,uint256)", +"f21baec7": "withdrawPreIcoFounds()", +"f21c27a7": "CTAMToken()", +"f21cdf6f": "defrost()", +"f21d5dea": "withrawAll()", +"f21ddc7a": "teamBalanceOf(address)", +"f21f537d": "startedAt()", +"f21f80d0": "setGenome(uint256,uint256)", +"f21f8236": "getRefTo(address,address)", +"f2204d35": "getWalletsFromUser()", +"f220cbe0": "GetIsPaused()", +"f2218819": "getAddressAndSharePriceOfFunds()", +"f221abef": "isReachedThreshold()", +"f221b25b": "addSponsorshipsTotalRefunded(address,uint256,uint256)", +"f221b75a": "addCET4(uint32,string,uint32,uint32,uint32,uint32)", +"f221fda0": "totalRooms(string)", +"f2225500": "FHCoin()", +"f222d0b9": "getNumberOfBets()", +"f223446c": "start_game(bytes32,uint8,uint32,uint16,address,uint256,uint8)", +"f2234f6e": "confirmAdmin()", +"f223885a": "deposit(uint256[],uint256[])", +"f2245b64": "DioToken()", +"f225138b": "littCapsuleGet(bytes32)", +"f22513a7": "withdrawLatium(uint256)", +"f225415a": "getFrozenBalanceByAddress(address,address)", +"f225ba3f": "unLockBounty(address)", +"f2260031": "lockAddress(address,bool)", +"f2263e12": "refundedFunding()", +"f2269c8e": "_createFootballerStar(uint256,uint256,uint256,uint256)", +"f2269dba": "airdropCooldownEnd()", +"f2274abb": "getReservedIsVested(address)", +"f227b198": "CreateWEE(address,uint256)", +"f229abbd": "enableBurn(bool)", +"f22a0b31": "getDays(uint256)", +"f22a598f": "changePriceUpdateTimeline(uint256)", +"f22aa38b": "getSDCCSupply()", +"f22aae52": "_memcpy(uint256,uint256,uint256)", +"f22b0c94": "setBonusOff()", +"f22b258a": "trustedMarketTransfer(address,address,uint256)", +"f22b683e": "delKycVerifiedInvestor(address)", +"f22c0f7d": "isValidTxPaymentForMCW(bytes32)", +"f22c10d7": "setShareHolders(uint256,address,uint256,bool)", +"f22c618e": "isItemStopped()", +"f22c6a7c": "STE(string,string)", +"f22c71e5": "finalizeLottery(uint16,bytes32,uint256)", +"f22c8f63": "FINANCE_CAP()", +"f22d022b": "burnIcoCoins()", +"f22dbfe6": "forLoyalty()", +"f22f264d": "setMinBalance()", +"f22ffd1d": "TLN_TOKEN_DECIMALS()", +"f23008ca": "CarBonCash()", +"f2309723": "setUserApproval(address,address,string)", +"f23103ee": "subTx(address,uint256,bytes)", +"f2316472": "transferMyTokens()", +"f2325244": "VULCAN_PROMETHEUS_MAX_CARGO()", +"f232880d": "reserveWaveTokens()", +"f232a84d": "getAmountAttempted(address)", +"f232e351": "initializeBalances()", +"f23342d8": "checkHashExists(bytes32)", +"f2335e9d": "setAvgGas(uint8,uint16)", +"f2342bba": "getBagDetails(uint256)", +"f2342cd5": "Contributor(string,address,address)", +"f234bac5": "tokenCreationCapUpdate(uint256)", +"f235bdfd": "getRetailerTotalBalances(address)", +"f235bfa4": "addAccount(address,string,uint256)", +"f236e2fb": "UTCT()", +"f2371fb3": "grantGiveableKudos(address,uint256)", +"f2371fd1": "newEmployer(bytes32)", +"f238683f": "lastKing()", +"f238dbea": "minimum_payment()", +"f2393d55": "getKebabsSincelastKebab(address)", +"f239c5dd": "crowdsaleMinted()", +"f239e528": "sendOneEtherHome()", +"f23a6e61": "onERC1155Received(address,address,uint256,uint256,bytes)", +"f23a8155": "internalInvest(address,uint256,uint256)", +"f23a8aa6": "getOwnerLink(address)", +"f23b55c3": "BB8Token()", +"f23b6fa2": "emitApprovalEvent(address,address,uint256)", +"f23b872e": "tvc()", +"f23ba8e6": "hire(address,uint256)", +"f23bc4f8": "acceptOffer(uint64)", +"f23bd5f8": "getYes(uint256)", +"f23c51cd": "setReceiverContractAddress(address)", +"f23ca012": "becomeNorsefire()", +"f23e22a7": "rescheduleTransaction(uint256,uint256)", +"f23f07f6": "getMinAuditPriceMedian()", +"f23f16e6": "appealCost(uint256,bytes)", +"f23f2cbe": "withdrawWithFee(address,uint256,uint256,bool)", +"f2405395": "STAGE_THREE_ETHRaised()", +"f2408d6b": "PIN(uint256,string,string,uint256,uint256,uint256)", +"f2409d65": "getMileagePoint(address,address)", +"f240d0f5": "feesWithdrawn()", +"f240f7c3": "dispute()", +"f24113c6": "updateProfile(bytes32,bytes32)", +"f241335d": "calculatePrice(string,uint88)", +"f2414cbd": "YASToken()", +"f24150ae": "VoxelDestroyed(uint8,uint8,uint8)", +"f2415183": "Tithe()", +"f2416f64": "oracleItCallbackAddress()", +"f242432a": "safeTransferFrom(address,address,uint256,uint256,bytes)", +"f2429b1c": "buyCryptopinions(address)", +"f2430fe5": "Plumix()", +"f243c170": "buyTokens2(address)", +"f243c2a7": "tokenIssuer()", +"f244815e": "setBuyUnfreezePeriodSeconds(uint256)", +"f245036e": "setPools(address)", +"f2451a43": "addOwnerNotations(string)", +"f2455807": "setDesignatedReporter(address)", +"f24570e0": "approvedFactories()", +"f245b9e4": "DVIP(address)", +"f245d8c6": "NewHero(address)", +"f2460172": "_removeAssetFrom(address,uint256)", +"f246080a": "addvehicles(address,string,string,string,string,string,string)", +"f246317c": "SafeTimeLock()", +"f247016c": "isVoteOngoing()", +"f2477f7c": "BLOCKREWARD()", +"f24818cb": "unholdTime()", +"f2491377": "MAX_SINGLE_ISSUED_FROM_OTHER_CURRENCIES()", +"f249cf19": "get_all_challenges()", +"f24a0faa": "balance3()", +"f24a534e": "Oracle()", +"f24a6997": "maxGasRefund()", +"f24ae640": "countAccounts()", +"f24b5779": "removeTrustedIssuer(address,string)", +"f24b6782": "updateCrowdsaleTimeline(uint256,uint256)", +"f24d2532": "changeRegistrationStatus(address,bool)", +"f24e4a15": "Purge()", +"f24e7fd9": "activateKillSwitch()", +"f24edfd6": "setWhitelistedAddressPre(address[],bool)", +"f24f9abe": "grantBonusTokens(address,uint256)", +"f24ff92c": "withdrawal(uint256,address,uint256)", +"f2505211": "oracleItQuery(uint256,string,string,string)", +"f2513ee9": "cancelMarketsWhenPaused(uint256)", +"f2518983": "reinvestEther()", +"f251bc8c": "addPack(address[],uint16)", +"f251fc8c": "totalContributors()", +"f25214e4": "CRYPTODOL()", +"f2523e7a": "setUseRegistry(bool)", +"f2529e55": "Fidget(address,address,uint256,uint256,uint256,uint256)", +"f2530d1d": "claimableDividend()", +"f2534e47": "changeCertifier(address)", +"f253e6ae": "Daric()", +"f2540e39": "_unfollow(address,address)", +"f2556289": "endDutchAuction(uint256,uint256)", +"f255c21f": "Offer(address,string,uint256,uint256)", +"f2561a43": "voteSuicide(address)", +"f25633dd": "year1Unlock()", +"f256b130": "marketingFund()", +"f256b48e": "getBalanceOfDist(bytes32)", +"f257bf3b": "getAuthorityIndex(address)", +"f2582ef5": "UserStatus(string,address,uint256)", +"f258a4ea": "investorAccounts(uint256)", +"f2590315": "ClockAuction(address,address,uint256)", +"f25a7815": "MockSale(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"f25acb35": "acceptDeal(bytes16)", +"f25aed54": "accountWithUpdatePermissions()", +"f25b278b": "fetchHash(uint256)", +"f25b3f99": "blocks(uint256)", +"f25c130a": "createOnRound(uint256)", +"f25c870a": "MyERC223(string,string,uint8,uint256)", +"f25d2422": "fetchVoteInfoForCandidate(address)", +"f25dafd1": "drainAUC(uint256)", +"f25e34a9": "checkJuryVoted(address)", +"f25e7bb4": "getState(bytes20)", +"f25e9ed2": "getMaster(address)", +"f25eb5c1": "removeReverse()", +"f25ebdad": "isProxyManager(address)", +"f25ee28d": "MySecondToken()", +"f25efc49": "frozenRecords(uint256)", +"f25f4b56": "feeWallet()", +"f25fbe6f": "MetaGold()", +"f25fd5cf": "createGoldSellOrder(uint256,uint256)", +"f260ad05": "titanToken()", +"f260bd94": "validateRequestParams(address[3],address,uint256[12],uint256,bytes,uint256)", +"f261a8c0": "withdrawbymanager()", +"f2624067": "LogIncreaseCap(uint256)", +"f2624b5d": "whitelistCount()", +"f262521f": "PHASE_5_PRICE()", +"f262de8c": "add_staircase(uint16)", +"f2634485": "setGameRules(uint256,uint256,uint256,uint256)", +"f26377ed": "kittyGym()", +"f2642d0f": "decayedTransfer(address,uint256,address)", +"f2653966": "createReleaseAuction(uint256,uint256,uint256,uint256,uint256)", +"f26557d8": "AdeelaTestCoin()", +"f2659bd1": "GetCityLandNums()", +"f265d351": "rateSetter()", +"f2663a03": "TERSERAH()", +"f267035f": "BOARD_1()", +"f267215a": "_getProviderClosed(uint256)", +"f267ded5": "TokenStarted(address)", +"f268225c": "setBountyWalletAddress(address)", +"f26835d4": "tokensRemainingInHolding(address)", +"f26a058d": "U21Y()", +"f26b9834": "ENOM()", +"f26baecc": "_capLevelEth()", +"f26bb53d": "setCityPlan(address,uint256)", +"f26bbde8": "WHOMCrowdsale(address)", +"f26c159f": "freezeAccount(address)", +"f26c6aed": "newChannel(address,uint256)", +"f26cbe9a": "raiseDollarsDeducted(address,uint160,int160)", +"f26df083": "finalIntervalForTokenGen()", +"f26e5e85": "GetUpgradeCost(uint256,uint256)", +"f26e787e": "sendDelayedTransactions()", +"f26f336e": "MINING_RESERVE()", +"f26f4f61": "threshold(bytes32,address)", +"f26f6334": "setCraftingAddress(address)", +"f26fb705": "getPayoutRoundId()", +"f270bcda": "getClosingBlockNumber(uint256)", +"f2711812": "milion()", +"f27197ab": "getIsAvailable()", +"f272404d": "_approve(address,uint256,address)", +"f2729497": "numberOfFarmers()", +"f2729d8a": "getMinutes(address)", +"f272a60c": "addBagDelayed(uint256,uint256)", +"f272fe18": "Campaign(uint256,uint256,uint256,address)", +"f273515c": "Cyberminer(uint256,string,string)", +"f273fbbc": "perform_withdraw()", +"f27402e9": "bchRaised()", +"f274a828": "icoPhase3Start()", +"f274d00c": "LAWCoin(uint256,string,string,address)", +"f2759ee2": "transferDomainBackToSeller(string)", +"f2760d9c": "shareHoldersWallet()", +"f2761444": "MathUtil()", +"f2766051": "lastFinish()", +"f276e1c7": "voteResultPublish(address[],uint256[])", +"f276f36b": "getGameDataByIndex(uint256)", +"f276fdde": "onTaxTransfer(address,uint256)", +"f277010d": "percentFeeTimes100()", +"f27715b4": "updateMultiSig(address)", +"f2787d33": "feeAccountToken()", +"f278bd02": "newBooleanValue()", +"f279648b": "setConstraint(int256,bytes32,bool,bool)", +"f279fac5": "internaltransfer(address,address,uint256)", +"f27a4188": "icoSucceed()", +"f27a73ca": "frozenCell(address,uint256)", +"f27a8a99": "updateEmployeeInfo(uint256,string)", +"f27ac4d9": "decrease(address,uint256)", +"f27ae77d": "DGDIssued()", +"f27b6d8f": "Message(string,address,uint256)", +"f27b8084": "walletWebydo()", +"f27b9341": "getTeamPlayersNum()", +"f27c24ed": "startCloseSale()", +"f27c3bf6": "oneYear()", +"f27c85bc": "getQuickPromoPercent()", +"f27d0afe": "deleteArbitrator(address)", +"f27d3977": "NEOBleu()", +"f27db8c9": "getWinnerPayout()", +"f27e2ef6": "nextMineEvent()", +"f27e4b1e": "SwitchTokenTransactionsOn()", +"f27ee76c": "lastPot()", +"f27eede0": "getTotalBid(address,uint256)", +"f27f974b": "Margaret()", +"f2801fe7": "getUserInfo(address,address)", +"f28063ce": "getMemeHolders()", +"f28075af": "get_player_address(uint256)", +"f280efaf": "addressToBytes1(address)", +"f28109d1": "ConsentTemplate(string,string,uint256,string,string,string)", +"f281c386": "_percent(uint256,uint256,uint256)", +"f281e7d1": "checkManagerStatus(address)", +"f282b1df": "batchAddCandidateByIndex(uint256,address[],bytes32[])", +"f282f551": "setCrowdsaleTokenExtv1(address)", +"f2836e1c": "contributorStatement(uint256,string)", +"f28386bf": "Nexium()", +"f2853292": "ChangeOwner(address)", +"f2856a2a": "getTeamPlayers(uint256)", +"f285d98e": "unlockSecret()", +"f285f25c": "tokenMetadataHash(uint256)", +"f286c1c5": "addtoOwners(address,address)", +"f287900d": "LogContribution(address,address,uint256,uint256,uint256,uint256)", +"f2887132": "baseHourglass()", +"f288753d": "centsPerEth()", +"f2888dbb": "unstake(address)", +"f2891b3d": "assetRegistrant(bytes32)", +"f28a2f75": "_allocateUnspentRefTokens()", +"f28a7912": "quick2()", +"f28ac86a": "token(string,string,uint256)", +"f28adc4d": "Attack()", +"f28afb1e": "pushAngelInvestmentData(address,uint256)", +"f28b325d": "admin_set_shopStoreRegister(address)", +"f28b7a9c": "disbursementAmount()", +"f28b824e": "MAT_TOTAL_SUPPLY_LIMIT()", +"f28c0716": "approveDeal(bytes32)", +"f28ce253": "is_min_goal_reached()", +"f28d253d": "getDividents()", +"f28e59c9": "get_sale_owner(address)", +"f28ee00c": "permittedSender()", +"f28f0f6a": "bulkCreateLambo(uint256,address,uint64,uint256,uint256)", +"f2901ae2": "ownerSetGlobalOperator(address,bool)", +"f29143ad": "Project_ChangeOwner(uint256,address)", +"f2928eea": "CaptainPreSell()", +"f2934817": "HalalPenny()", +"f293bab5": "numberofnews()", +"f294aa26": "EndoSHARD()", +"f295206f": "_unsafeSend(address,uint256)", +"f295587e": "giveITup()", +"f29617da": "registrationDeposit(address)", +"f2965a2c": "BurnupGameCore(address)", +"f296c1f2": "buyTokens(address,uint256,uint256,string)", +"f297109d": "RESERVED_TEAM_LOCKED_SIDE()", +"f2977c97": "approve(address,bytes32,bool)", +"f298083b": "setLottery(address)", +"f2980eb2": "getPRewardLength(address)", +"f2983257": "setFeatureStatus(string,bool)", +"f29a72ff": "_addTokenToPartition(address,bytes32,uint256)", +"f29b2040": "export(address,bytes8,address,address,uint256,uint256,bytes)", +"f29c1bc2": "setIsChargingTokenTransferFee(bool)", +"f29c7870": "setRefineCost(uint256)", +"f29d2f28": "setTokenHolder(address)", +"f29f1fa2": "RecievedEth(address,uint256,uint256)", +"f29f4d0b": "lastBuyTime()", +"f29f7b1b": "remove_coin(uint256)", +"f29fdb8a": "createSeason(uint32,uint64,uint64,address[8],uint256[8],uint16[8],address[8])", +"f29fe77e": "testMintGuy(int256)", +"f2a0928d": "preICOduration()", +"f2a0a987": "GCNYToken()", +"f2a16d5a": "GetNonce(uint8)", +"f2a38dac": "setKYCAdmin(address,address)", +"f2a40db8": "accounts(uint256)", +"f2a4a82e": "item()", +"f2a5630a": "BallotUp()", +"f2a5c79c": "getViewDatas()", +"f2a6517f": "updateTokenContractAddr(address)", +"f2a69417": "cancelFoundationTransfer()", +"f2a6e605": "evenDistThresh()", +"f2a724b1": "SnoqualmieCoin(uint256,string,string)", +"f2a75fe4": "empty()", +"f2a7e624": "approvedWallet()", +"f2a9a8c7": "allowance(bytes32,bytes32)", +"f2ab3e60": "incomeOf10k()", +"f2ab59d9": "contributionTarget_()", +"f2ab9384": "sumElements(uint256[])", +"f2abd01d": "initialBeating()", +"f2ac9427": "pricesToCommit(address[])", +"f2adc939": "removeBoundary(uint256)", +"f2af0e2f": "getProviderCurrentSupply(address)", +"f2af59bf": "fourthStage()", +"f2afe985": "LEBRON()", +"f2b0318e": "_getNibbleArray(bytes)", +"f2b05c15": "getTopicCount(address)", +"f2b0a55d": "getPlotData(uint256)", +"f2b175c0": "sendTokenTeam(address,uint256)", +"f2b1be45": "setAquariumCost(uint256)", +"f2b265ca": "playGame(uint256,string,string,string)", +"f2b26d8f": "nextEtherForSale()", +"f2b29993": "getMineral(uint256)", +"f2b2f40c": "allowPurchase(uint256)", +"f2b2ff1b": "platformReferral()", +"f2b3ddfa": "getCET4ByAddr(address)", +"f2b40209": "RATE3()", +"f2b445ad": "rowround(uint256,uint256)", +"f2b45ac1": "startCrowdSale()", +"f2b45ec5": "DonQuixoteToken()", +"f2b47d52": "geneScience()", +"f2b4c1b9": "isValidDataHash(bytes32,bytes)", +"f2b559ac": "printQuotation(int256)", +"f2b6e8b6": "emitSynthetixUpdated(address)", +"f2b7a54b": "destTokensAirdrop()", +"f2b841c0": "isPlayerIdle(address,uint256)", +"f2b85515": "addNewGame(address)", +"f2b904c3": "checkBetColumn(uint8,address,bytes32,bytes32)", +"f2b9541f": "createEthCommunityToken(string,uint8,string,uint8)", +"f2b9b40f": "enableRegistration()", +"f2b9f903": "_getParticipantRoles(address,address)", +"f2b9fdb8": "supply(address,uint256)", +"f2ba18ed": "calculateVotes()", +"f2ba31ea": "Marine()", +"f2ba478d": "EtherCashPay(address,address,address,uint256,uint256,uint256)", +"f2ba810e": "PRE_SALE_30_BONUS_MIN()", +"f2baaa07": "createBet(uint32,uint256)", +"f2bb5ce1": "maxMintProofOfStake()", +"f2bbca67": "checkVotingForChangeBuySellLimits()", +"f2bbdab4": "N2C()", +"f2bc7ded": "getHowManyOwnersDecide()", +"f2bcd022": "withdrawalAddress()", +"f2bddf66": "redemptionInfo(address,uint64)", +"f2be600d": "getNumTanksType(uint256)", +"f2bea1fc": "MANAGER_SUPPLY()", +"f2bee03d": "set_sale_address(address)", +"f2bf7e7a": "TokenGAC(uint256,string,string)", +"f2bff63b": "ico_tokens()", +"f2c00979": "_emitTransferred(address,address,uint256,address)", +"f2c0cdbe": "dividendsPercent()", +"f2c0d168": "newOwner(address,address)", +"f2c1d74e": "FansToken()", +"f2c298be": "register(string)", +"f2c2dff2": "testFailSetNotRetractableNotOwner()", +"f2c340f2": "chfCentsPerToken()", +"f2c3e6d9": "requireTokenFuel()", +"f2c402b6": "todayReserved()", +"f2c44e77": "UpgradeEnabled(address)", +"f2c4c45d": "makeInvestment(address,uint256,address,address,uint256,uint256,address)", +"f2c51f9d": "DNAc()", +"f2c5925d": "setNext(bytes12)", +"f2c6bab0": "doCallNumber()", +"f2c70bda": "addInvestorIfNotExists(address)", +"f2c768e1": "Register(string,string,string,uint256,uint256,address)", +"f2c7d331": "receiveDividends(uint256)", +"f2c80435": "addToUnminted(uint256)", +"f2c816ae": "addAddressToBlacklist(address)", +"f2c8257e": "getcapname()", +"f2c8a87b": "SYC2ndEarlyPurchase()", +"f2c8b676": "FACTOR_8()", +"f2c8d247": "convertibleToken(uint16)", +"f2c9e0ed": "SkrumbleToken()", +"f2c9ecd8": "getNumber()", +"f2cba6a6": "REPUTATION_DECIMALS()", +"f2ccaed5": "getSaleContractEndBlock(address)", +"f2cd84d5": "tokenHoldersToClaim(address)", +"f2cedaa0": "destroyCoins(address,address,uint256)", +"f2cee589": "TIER1_PERCENT()", +"f2cf687a": "MAXPERWEI()", +"f2cf70e4": "setWeekly()", +"f2cfe267": "setEpochData(uint128[],uint64[],uint64[],uint256[])", +"f2d05f2b": "playerIndexToOwner(uint256)", +"f2d06540": "setBitpaintingStorage(address,address)", +"f2d15c48": "setLicenceTellerPrice(bytes2,uint256)", +"f2d213c8": "BONUSED_PURCHASES_LIMIT()", +"f2d2e1a7": "QSHU()", +"f2d2fa91": "privateSaleMaxContrAmount()", +"f2d386b9": "getjournalists()", +"f2d439d8": "PokerPayout()", +"f2d50151": "verifyRs1Hash(bytes,bytes32)", +"f2d578dc": "RHToken()", +"f2d57adf": "setClaimInterval(uint256)", +"f2d5866d": "ATTR_EXPLORABLE()", +"f2d5d56b": "pull(address,uint256)", +"f2d68ee0": "withdrawCollateralFromPool(address,uint256)", +"f2d6cd26": "CEO_Trader()", +"f2d6e0ab": "__process(bytes,address)", +"f2d701a7": "giveaway(uint256,uint256,uint256,bool,address)", +"f2d73dc6": "VoteZoneToken()", +"f2d7f637": "closePosition(bytes32,uint256,address,address,bool,bytes)", +"f2d805d5": "firstStageRaisedInWei()", +"f2d906cc": "addressFounders2()", +"f2d93fb0": "setRushTimeFloorCount(uint256)", +"f2d9f46e": "flipPayingDoublrs(bool)", +"f2da1f0a": "imageAddress(address)", +"f2da67db": "setMany(uint256,int256,uint256,bytes20,address,bytes)", +"f2da877d": "dataOfSell(address,uint256)", +"f2dabd26": "multipleMint(address[],uint256[])", +"f2dadd3d": "FundRequestPrivateSeed(uint256,address)", +"f2db5493": "VGS()", +"f2dbe0f8": "options(bytes32,address,address)", +"f2dbf12e": "personalInfo()", +"f2dc8878": "setTokenSaleAmount(address,uint256)", +"f2dd4be8": "publish(string,bytes32,uint256)", +"f2dd4e03": "getTxCon(bool,bool)", +"f2dd6585": "garanteSystemDepositInAllFunds()", +"f2ddc772": "confirm(bytes)", +"f2dddd95": "BLDAToken(uint256,string,uint8,string)", +"f2de12fc": "getFxUSDAmount(string,uint256)", +"f2dfa136": "STATUS_DEAL_WAIT_CONFIRMATION()", +"f2dfd7f5": "cancelWarranty(string,string,address)", +"f2e03ad0": "openProvider(address,bool,string,string,uint256,string,uint8,bool,address)", +"f2e09c7a": "activatePoint(uint32,int256)", +"f2e0d636": "registerSponsor(uint32,int256,bool,uint32)", +"f2e1192a": "wolkSale()", +"f2e12a39": "setRole(uint8,address)", +"f2e1b1cc": "getWinSlot(uint256)", +"f2e1be50": "GDPOracle()", +"f2e22ae0": "messageBoard(string)", +"f2e253ec": "FUTURE_ME_TOKENS()", +"f2e27b33": "signedTransferHash(address,address,address,uint256,uint256,uint256)", +"f2e28e16": "BrianexToken()", +"f2e29341": "accountQuery(address)", +"f2e2e5ea": "trustedAddressInLUT(uint256)", +"f2e34909": "PRICE_CUTOFF()", +"f2e41c0b": "birthDateOf(uint256)", +"f2e4ff30": "isValidAuction(uint256)", +"f2e552a5": "verifyUpdateTransaction(bytes32,uint256,address,uint256,address,uint256)", +"f2e55ac1": "getDestinationByIndex(uint256)", +"f2e62772": "admin_address()", +"f2e650ff": "PerpetualTestCoin()", +"f2e6e170": "addressesImported(address,uint256,uint256)", +"f2e6fecd": "Ethernational()", +"f2e7269b": "transfer_token2_toContract(address,address,uint256)", +"f2e7514c": "buyByName(string)", +"f2e79ab7": "ETHealth()", +"f2e84f24": "_byrne(uint256)", +"f2e998df": "ownerRevealOverride(uint256)", +"f2ea83e6": "executeRecursive(address,address,bytes32,int256)", +"f2eae773": "getLockedWalletAmount(address)", +"f2eaee02": "applyWait()", +"f2eb32fb": "addOffChainContribution(address,uint256,uint256,string)", +"f2eb3e34": "init1()", +"f2eb5dd3": "tokenUSDRate()", +"f2ebde57": "tryExec(address,bytes)", +"f2ec602c": "feeWithdrawn()", +"f2ec6264": "ownerAddressLUT(uint256)", +"f2ecebea": "ratePreIco()", +"f2ed2148": "newGateway()", +"f2edb7c7": "purchaseWonder(uint256)", +"f2ee8be9": "setSubmissionOpen(uint256)", +"f2eea5c1": "setupAccreditedAddress(address,uint256)", +"f2eec570": "transferredAmount(address)", +"f2eec69b": "CTOAddress()", +"f2f03877": "commit(uint256,bytes32)", +"f2f0967b": "setLifToken(address)", +"f2f18af2": "Withdraws(address,uint256)", +"f2f254c7": "getLatestMinorTree(bytes32,uint32)", +"f2f2a043": "setUserCommissionRate(uint256)", +"f2f3384e": "_getGen0Address(uint256)", +"f2f3a1d2": "Erc20Token(string,string,uint8,uint256)", +"f2f3c773": "vestInterval()", +"f2f48e20": "Update_START_PRESALE_TIMESTAMP(uint256)", +"f2f4eb26": "core()", +"f2f56ffe": "getCommit(uint256,address)", +"f2f62ac7": "TOSPrivateIncentiveContract()", +"f2f65960": "setGracePeriod(uint256)", +"f2f6861b": "WinbitTest()", +"f2f6ccda": "getBalanceFromOwner()", +"f2f6ff15": "COLOR_BLACK()", +"f2f70594": "disableMintForever()", +"f2f76549": "startExit(uint256,uint256,uint256,bytes,bytes,bytes,bytes)", +"f2f8569f": "buyAndTransfer(address,address,bytes)", +"f2f85fce": "GRAND()", +"f2f921e6": "snapshotDailyGooDepositFunding()", +"f2f977a7": "getBetsByCategory(string)", +"f2fa8f69": "TokenPolicy(address)", +"f2fb5706": "deletePersons()", +"f2fc6deb": "weiToTokensBono(uint256)", +"f2fc9100": "init(address,string,string,uint8,uint256,bool)", +"f2fd2a49": "galleryThree()", +"f2fdddf4": "setEncryptContract(address)", +"f2fde38b": "transferOwnership(address)", +"f2fdfe34": "createSpecies(uint256,string,address)", +"f2fe1a1d": "geSoftwareVersionRecordsLength()", +"f2fec913": "collectMKR(uint256)", +"f2ff0912": "getHolderAtIndex(uint256)", +"f2ffb4fc": "stopLive()", +"f30000f9": "NewCloneToken(address)", +"f300cf1d": "addUserToMeta(address,uint256)", +"f301ac65": "hashBid(address,uint256,address,address,bytes32,uint256,uint256)", +"f3022de8": "setNewContractAddress(address)", +"f3025556": "newDeveloper(address,uint64,bool)", +"f3025f10": "dataOfBuy(address)", +"f302be42": "startTokenRaffle(uint256,address,uint256)", +"f3036c24": "UTORN()", +"f30398ef": "Wishcoin()", +"f30416ca": "setSaleAuctionContractAddress(address,address)", +"f30431b5": "addAdminAccount(uint256,address)", +"f3052d26": "getCategory(uint256)", +"f30562b6": "updateRecord(string,string,string)", +"f3057ff9": "accsessAccountTransfer(address,uint256)", +"f3072020": "partner_1_name()", +"f3074b58": "withdrawSDTfromcontract()", +"f307946d": "hardCapMainSale()", +"f3083c44": "GetMyEarnings()", +"f308846f": "registeredCallbacks(address)", +"f3095511": "GetTokenPriceCents()", +"f309782b": "LescovexAddr()", +"f309caca": "icoEndOfStageB()", +"f309e3c5": "allocateUnsold()", +"f30a4a70": "getSoldToken()", +"f30a7166": "multiTransferFrom(address,address[],address[],uint256[])", +"f30ba854": "tokensPerEther_numerator()", +"f30bb8af": "GoalReached()", +"f30c0ee6": "getRank05()", +"f30c9296": "myUsableBalance()", +"f30d3ad4": "crowdSaleAmountRaised()", +"f30d4d3f": "signedTransferFromCheck(address,address,address,uint256,uint256,uint256,bytes,address)", +"f30df155": "calculateBorrowAmountWithFee(uint256)", +"f30f8508": "setReservedTokensList(address,uint256,uint256)", +"f30faff6": "SetExtra(uint256)", +"f31011ac": "ANTS_TO_COLLECT_1ANTHILL()", +"f310348e": "_removeFrom(address,uint256)", +"f3106780": "DoDividend(uint256,uint256,uint256)", +"f3107c48": "nestedFirstAnyToAny2(uint256)", +"f310a19d": "getPlayerVaultsHelper(uint256,uint256)", +"f31174ee": "inactivityReleasePeriod()", +"f3125a1f": "deposit(address,uint256,bytes,uint256)", +"f31294a4": "announcementURI()", +"f3130ba5": "setTokensSoldInPresale(uint256)", +"f3147b00": "totalICOAmount()", +"f314bf46": "setReleaseDb(address)", +"f314e2c0": "CoinExchangeToken(uint256,string,uint8,string)", +"f314e976": "parcelGzeWithoutBonus()", +"f315e81d": "getStage1End()", +"f31604c7": "setData()", +"f3161022": "convertToEther(uint256)", +"f3164eb6": "transferAndFrozen(address,uint256)", +"f31660e9": "getOrganisationsSize()", +"f3169506": "readPurchaseAtIndex(uint256)", +"f316ea78": "buyOrderTotal()", +"f317b85b": "ownerAddressNumberMap(address)", +"f3181001": "founderAndTeamSent()", +"f3182d6c": "setFeeRate(address,uint256,uint256)", +"f31887e6": "tokenTransferByAdmin(address,uint256)", +"f318c75f": "dvipAddress()", +"f318cc4a": "invite(uint256,uint256,uint256)", +"f3191443": "toggleMigrationStatus()", +"f3199e98": "setMinWeiForDInit(uint256)", +"f319a899": "NameProvider(address)", +"f31a044d": "test_bytes(bytes,bytes)", +"f31a18a5": "endICOStage7()", +"f31b4e89": "updateEpisode(uint256,string,uint256)", +"f31bac4d": "SwitchLoanOwner(address,uint256)", +"f31bebaf": "BugBountyOneBreaker()", +"f31df3f8": "AddItem(uint32,uint16,uint256,uint16,uint16,string)", +"f31e3e84": "AML()", +"f31e731e": "attack(address,bytes32,uint256)", +"f31ed9e6": "DescartesToken()", +"f31fe982": "endGround(uint256)", +"f3200a1c": "change_symbol(string)", +"f3201424": "register(address,address,address)", +"f3203dc0": "MultisigsChanged(address,address)", +"f3205c93": "isUserBanned()", +"f320d963": "assertEq(string,string)", +"f320f858": "setRandomAddress(address,address)", +"f32106f0": "TemplateToken(uint256,string,uint8,string)", +"f32113d5": "setBgxWalletAddress(address)", +"f3214652": "NHSToken()", +"f321653a": "setCommunityBallotStatus(bool)", +"f3217345": "getShowText()", +"f32188a5": "reinvest(address,bool)", +"f3221c7f": "hasHash(address,bytes32)", +"f322770c": "LogWhitelistAdd(address,uint256,address)", +"f3227dc4": "cancelDeal(string)", +"f322a1cf": "BlueChainToken()", +"f322c755": "daoManager()", +"f32306d2": "registerNameXID(string,uint256)", +"f3236460": "closeUp()", +"f323a061": "lottoQueue()", +"f3269716": "year()", +"f326be05": "Centaure()", +"f3278191": "BuyFST(address,uint256,uint256,uint256)", +"f32784cd": "getGratitudeOf(address,uint256)", +"f327b7fc": "isNotZero(address,string)", +"f3283fba": "setMultisig(address)", +"f3290290": "createIncident(bytes32,bytes32,uint256,uint256,bytes32,uint256,uint256,uint256,bytes32)", +"f32a547c": "getBuy(uint256)", +"f32a72eb": "airDropMembers(address)", +"f32a9f77": "ReceiveEther(address,uint256)", +"f32b85e8": "timeScale()", +"f32d61eb": "setDevTokensPercent(uint256)", +"f32e8038": "setPercentIncrease(uint256,uint256,uint256)", +"f32eca11": "revokeAccessDeposit(address)", +"f32efd3c": "recoverUser(address,address,uint256,uint8,bytes32,bytes32)", +"f32f6a23": "olympus()", +"f32fc856": "Wanchain()", +"f32fe995": "left96(uint256)", +"f3302a4d": "ChangeTransferStatus(bool)", +"f3305ae2": "setName(bytes32,address)", +"f331020c": "GAMEPAUSED()", +"f3310628": "allocateTokensInternal(address)", +"f33146af": "test_twoTrueAsserts()", +"f3316ef5": "countStudentRequest()", +"f3318fed": "ThrowsInConstructor(bool)", +"f3319243": "decimalFraction(uint256,uint256)", +"f331de4c": "addShare(address,uint256,uint256,uint256)", +"f332511f": "getTxcode(uint256)", +"f33261ac": "stageCount()", +"f33280b2": "etherLimit()", +"f332a245": "unbanToken(address)", +"f3332d1c": "burnTokensExp(uint256,uint256)", +"f3333e7f": "etherProceedsAccount()", +"f33376c6": "createNext(address,string)", +"f333fe08": "getCertificate(bytes32)", +"f3358ac4": "getNum(uint256)", +"f33670aa": "sharesAddress()", +"f336bc7e": "maxDecreasePct()", +"f336e80a": "setMaximumVotingWindow(uint256)", +"f3372898": "dtrade(address,uint8,uint8,uint256[],address[],bytes32[])", +"f337616c": "PETER()", +"f337a0bb": "getLLV_edit_4()", +"f337c2e1": "calculateNextEtherValue(uint256)", +"f33801e0": "setCoachPrice(uint256,uint256)", +"f3382694": "isCamp()", +"f3388e75": "timelockController()", +"f338c984": "initialBountyAmount()", +"f3391998": "hasHash(uint256)", +"f339292f": "mintingStopped()", +"f3396905": "lockedNowBalanceOf(address)", +"f339c504": "lockBalance(uint256)", +"f33aa95d": "setIsTransferEnabled(bool)", +"f33ae7fd": "auctionOf(uint256)", +"f33b1ea5": "rewardUsers(uint256,address[],uint256[])", +"f33d0f3a": "requiredBet()", +"f33d9a52": "get_data_benefited(address,string)", +"f33dc1fa": "founderTokensAllocated()", +"f33f8f26": "setpubprize(uint256)", +"f33f9522": "readCoin(uint256)", +"f33ffc16": "addSpecialBonusConditions(address,uint256,uint256)", +"f34080b3": "MIN_INVESTMENT_ICO_PHASE_TWO_POUNDS()", +"f3408110": "transferWithFee(address,address,uint256)", +"f340fa01": "deposit(address)", +"f3412942": "accountLevelsAddr()", +"f34186c8": "endEthGet()", +"f341cae8": "setEmergencyAccount(bytes32,bytes32)", +"f341d3ba": "bandwidthFactor()", +"f3433ff2": "callbackTime()", +"f3436873": "totalAxiesRewarded()", +"f3436c85": "TKXToken()", +"f343ccbd": "CrystalSkull()", +"f3444701": "newTankType()", +"f344f4fa": "HARDCAPPED_SUPPLY()", +"f345d06b": "getTileHp(uint16,uint8)", +"f3463272": "signupFee()", +"f3465181": "preSeedAllocation()", +"f3466b47": "setTotalCollected(uint256)", +"f346fd74": "TraceChain()", +"f34839d1": "C50()", +"f3492915": "confirmSpendLimit(uint256)", +"f34969d1": "minimumFundingCHF()", +"f349e3e3": "own(address)", +"f34a5e85": "MercuryToken()", +"f34b95b3": "register(string,address,bytes32)", +"f34c7010": "commitSecurity(address,uint256,uint256)", +"f34d22d0": "getQuickPromoRemainingBlocks()", +"f34df94e": "Version(string,address,address,bool)", +"f34e2699": "isPresaleFinalized()", +"f34e3723": "release(string)", +"f34e4c60": "currNumOfBattleCards()", +"f34ed4e6": "RanDAOPlus(address)", +"f34f43f6": "getRepTokenAddress()", +"f34f5f45": "Election(string)", +"f3512ce0": "multiLock(address[])", +"f351d166": "_depositEscrow(uint256)", +"f3522656": "getRejections(uint256)", +"f352c45c": "createChallenge(string,string,uint256,uint256)", +"f353108b": "fechVoteResultForCandidate(address,uint256)", +"f353ae48": "goodluck()", +"f354040c": "SpreadToken()", +"f3541901": "execute(address,bytes,uint256,uint256)", +"f3548cd3": "getBagCount()", +"f354e2c3": "_getSeason()", +"f355b92d": "BuyTokens(address)", +"f356d6cc": "getPI_edit_18()", +"f356e8de": "placeNewSurvey(bytes32,uint256,uint32,uint256)", +"f3574a20": "TokenTransacted(address,address,bytes32,address,uint256,address)", +"f3576220": "withdrawls()", +"f3582373": "getTokenAddressesLength()", +"f3586fb9": "_isAuthorized(address,uint256)", +"f35898bd": "PreviousPayout()", +"f358b3de": "REKTMultiSigWallet()", +"f359671c": "withdrawWithReference(address,uint256,string)", +"f359b03c": "recalcBonuses()", +"f359d66d": "driverCount()", +"f35a8796": "removeHouseHold(uint256)", +"f35b3b51": "Bullioncoin()", +"f35b6068": "selectWinningNumber()", +"f35ba5d3": "acceptCeoOwnership()", +"f35c172e": "getSecondHexByte(bytes1)", +"f35d606c": "ETFToken(address[],uint256[],uint256)", +"f35dad40": "totalRedeemed()", +"f35e3945": "SRHCoin(uint256,string,string)", +"f35e4a6e": "setStartBlock(uint256)", +"f360234c": "compare(uint256,uint256)", +"f3604e54": "advisorsKey()", +"f36089ec": "getConversionRate()", +"f3608b57": "_getEthToUsdPrice(uint256)", +"f360c183": "setNonce(uint256)", +"f360e22f": "celebrityCount()", +"f3611719": "confirmFriendship(string)", +"f3616a90": "UpdateHOLDer(address,address)", +"f362b9af": "StartNewMiner()", +"f362d78f": "testBitNotEqualSuccess()", +"f3634033": "token_b_amount()", +"f363441f": "getCreatorDotBalance()", +"f363449f": "reservationSupply()", +"f3635a02": "vc2Wallet4Pct()", +"f3637d51": "setPayLock(bool)", +"f3647597": "setGrantVestedEDEXContract(address)", +"f364e7f4": "_investAsEarlybird(address,uint256)", +"f36631e7": "createHero(uint16,address)", +"f3667517": "getMinter()", +"f3669ec9": "hopefuls(uint256)", +"f36706cb": "SENSToken(address,address,uint256,uint256)", +"f3678cd3": "updateOffChainTokens(uint256)", +"f36a1fd9": "_allowBuyDirect()", +"f36a4bd3": "ReceivingContractTokenFallbackFailed(address,address,uint256)", +"f36b135d": "PRICE_EXPONENT()", +"f36c0810": "RANDOM_BYTES_COUNT()", +"f36c83f0": "getPuppy(uint256)", +"f36d1b8e": "SignStopDividend()", +"f36d1e4e": "setRewards(uint256,uint256,uint256)", +"f36d29e7": "triggerTansferEvent(address,address,uint256)", +"f36db900": "gameStarterDividendPercentage()", +"f36e20db": "getStage1Start()", +"f36e8dea": "MedicalCannabis()", +"f36f235d": "getLedger()", +"f36fd108": "editTitle(uint256,string)", +"f370031e": "BetOnATeam(address,uint256,uint256)", +"f3701da2": "build(address)", +"f3702b82": "setBonusPattern(uint256[],uint256[])", +"f3703a69": "LogGrantCreated(bytes32,uint256)", +"f3706bb7": "killTransaction(bytes32,bytes32,string,string)", +"f370ff51": "LogTokenPurchase(address,address,uint256,uint256)", +"f371475a": "initialiGnSupply()", +"f371ec49": "pausedB()", +"f3737ffd": "setDiscount(uint256[],uint256[])", +"f3746947": "giveBirth(uint256,uint256[2],uint256[2])", +"f3746ff7": "advisorReserve()", +"f375bcaa": "failedTimestampSeconds()", +"f37633f9": "Internet()", +"f376daa8": "MMX(uint256,string,string)", +"f3773466": "endIcoRoundManually()", +"f377f5b7": "setAirdropTotalSupply(uint256)", +"f3781697": "HubiiCrowdsale(address,uint256,uint256)", +"f3784dec": "withdrawFailed(address)", +"f378ff76": "random(uint32,uint32)", +"f3791477": "OLD_TOKEN()", +"f3794914": "mintParticularPart(uint8[4],address)", +"f37a7d4d": "boosters()", +"f37a9c1c": "ALLOW_BETA()", +"f37b0427": "CryptrustToken()", +"f37b437b": "scheduleCall(address,bytes,uint256,uint256,uint8,uint256,uint256)", +"f37b74ca": "authorizePayment(string,bytes32,address,address,uint256,uint256)", +"f37b916a": "tokenCreateUtcTimeInSec()", +"f37bdaac": "transferSig(bytes32,uint256,address)", +"f37bf1be": "getParticipateName(uint256)", +"f37cc477": "calcOutput(uint256,uint256)", +"f37d11cc": "canTransferFrom(address,address,uint256)", +"f37e592d": "shopStoreId(address)", +"f37e741e": "projectWeight(uint256)", +"f37f8345": "getTokenRates(address,address[])", +"f37fda1b": "setUser(address,address,bool)", +"f37fdaf5": "calculateProfitPercent(uint256)", +"f37ff01b": "getLLV_edit_13()", +"f380729d": "claimB2()", +"f3813163": "proxyTakeEtherBack(address)", +"f3817b23": "getWizzPandaCountOf(uint256)", +"f381a3e2": "FuelingToDate(uint256)", +"f381f2a5": "minimumCap()", +"f38323bb": "bountyDurationInBlocks()", +"f383c7b3": "setCrowdsaleStart(uint256)", +"f383d6b9": "OwnerValidatorImpl()", +"f384632c": "updateContestTeam(uint32,uint32,uint8[],uint32[])", +"f384764c": "oraclize_query(string,bytes[2])", +"f3850fda": "receiveTokens(uint256,uint256)", +"f385d890": "cnt_registrations()", +"f3868555": "orderEthOf(address)", +"f386b8fd": "TestToken2()", +"f3873e7b": "PublicBattle()", +"f38780e2": "winnerPaid()", +"f388b046": "currentTask()", +"f388ef80": "updateXPLPerEther(uint256)", +"f389057f": "_setMouthValue5(uint256)", +"f3898a97": "convert(address[],uint256,uint256)", +"f38a6163": "IncMainSupply(uint256)", +"f38a8262": "grantPermission(address,bytes32)", +"f38ad578": "setSecondWinner(address[])", +"f38afbf7": "setModuleEnable(string,uint256)", +"f38b0585": "withdrawAdvisorFunds()", +"f38b0600": "fireEventLog3()", +"f38b2ef0": "testTheFirstMultiplier()", +"f38d5cb9": "_getHash(address,address,address,address)", +"f38db3d8": "setRunningInternal(bool)", +"f38e5ca2": "getBlobStoreFromFullBlobId(bytes32)", +"f38fb65b": "revertCall()", +"f3905b82": "ibaMultisig()", +"f390cae4": "ADDR_TKG_TECH_FUND()", +"f390e4b4": "getResidentNumber()", +"f3913e69": "tokenTransferFrom(address,address,address,uint256)", +"f391f074": "accountIdForAddress(address,address)", +"f3922cde": "addExceptAddress(address)", +"f39259d0": "_batch2_icosaleStartTimestamp()", +"f393b3b0": "_DataRegistered(bytes32)", +"f393f022": "icoStartP5()", +"f3942753": "addTxToCustomerRegistry(address,bytes32,uint256,uint256)", +"f3945ca0": "addEndorsement(bytes32,bytes32)", +"f39460c4": "setCheckMinContribution(bool)", +"f3956a71": "isMEH()", +"f396282d": "signupVerify(bytes32,bytes32)", +"f396cd66": "weiAmountShare()", +"f396e81b": "SALES_DURATION()", +"f397884b": "preIcoOpeningTime()", +"f3983e44": "createAmountFromTmedForAddress(uint256,address,address)", +"f398dc28": "aprovarUsuario(address,uint256)", +"f398faaa": "getRank09()", +"f3993d11": "batchTransferFrom(address,address,uint256[])", +"f39981e1": "burnStake(address)", +"f3998918": "getPreSaleTokenAmount(uint256)", +"f39992e4": "Blackwood()", +"f399c7e6": "startGame(address,uint256)", +"f39afaba": "GCV()", +"f39b1e74": "CQMVValueCirculateAssets()", +"f39b5b9b": "ethToTokenSwapInput(uint256,uint256)", +"f39b7fb1": "get_dati_articolo(bytes,bytes,bytes10)", +"f39bfb52": "giveBountyTokens(address,uint256)", +"f39c2197": "numberOfPartners()", +"f39cce01": "convertLotIdsByAddress(address)", +"f39d359b": "initDemoc(string)", +"f39d9f19": "CSES1()", +"f39e6e1e": "OwnerAddition(address)", +"f39e9fa6": "setERC223Activated(bool)", +"f39ec1f7": "lookup(bytes32)", +"f39f421e": "FIBKAD()", +"f3a04af4": "PUBLIC_TOKENS()", +"f3a133a9": "setStartAt(uint256)", +"f3a16c3e": "tokenCreationCapWithOutBonus()", +"f3a1b4b2": "setCrowdsaleStartandDuration(uint256,uint256)", +"f3a1d297": "addToken(address,string,string,uint8,string)", +"f3a1f828": "EventRandomLedgerRequested(address,uint256,uint256,uint8,address)", +"f3a247cb": "ZooToken(uint256)", +"f3a27963": "unpauseMints()", +"f3a3abc6": "setWhitelistTransfer(address,address,bool)", +"f3a3bef4": "innerScope()", +"f3a3de38": "EMACCrowdsale(uint256,uint256,uint256,address)", +"f3a44fe1": "withdrawForWorkshop()", +"f3a49f90": "sendOwner()", +"f3a504f2": "funded()", +"f3a53cd8": "ICOWIZARD(string,string,uint8,uint256)", +"f3a5626b": "addPurchased(bytes32,uint256)", +"f3a5644d": "crowdsaleEndedTime()", +"f3a5950e": "testHighestTranch()", +"f3a5f262": "setMemberTier(address,uint256)", +"f3a60cb4": "unLockAddrOwner(address)", +"f3a670cd": "Redeemed(address,uint256,uint256)", +"f3a67ad2": "subAccountBalance(address,uint256)", +"f3a8041f": "Crowdsale(address,uint256,uint256,uint256,uint256,uint256)", +"f3a87492": "AntiFakeLabelToken(address,uint256)", +"f3a8bcaa": "_logGameGiftInfo(address)", +"f3a9bf03": "verifyImage(address,string)", +"f3aa4420": "_grandTournamentBooty(uint256,uint256,uint256,uint256)", +"f3aa67ad": "buyTokensOraclePayIn(address,uint256)", +"f3ab7ea9": "seeker()", +"f3ac2732": "confirmed(uint256)", +"f3ac3df5": "prizeFund()", +"f3ac9ee4": "parseOpenTx(address[11],uint256[10],uint32[4],bool,bytes)", +"f3acc06b": "retrait_1()", +"f3acc477": "addTotalEtherValue()", +"f3ad0dd8": "multiTransferToken(address[],uint256[])", +"f3adcc46": "getMinerHashRateCurrentHalving()", +"f3ae2415": "isManager(address)", +"f3ae5acd": "LastExtractTime()", +"f3aee9f9": "tokensUnlockPeriod()", +"f3afe129": "hourPotExpiration()", +"f3aff181": "collectBagHolderFund(uint256)", +"f3b07bb1": "maxEthPerTransaction()", +"f3b15ffd": "test_insert_containsId()", +"f3b16265": "onDraw()", +"f3b303cd": "AdvanceToken()", +"f3b35100": "voteOf(address)", +"f3b3a9fa": "maxReserve()", +"f3b423d5": "updateReloadAmount(uint256)", +"f3b42c40": "isOnSaleAny3(uint256,uint256,uint256)", +"f3b4735e": "lotteryAddresses(uint256)", +"f3b4eccb": "ChallengeFund()", +"f3b50c04": "rescind()", +"f3b55007": "TDx(uint256,string,uint8,string)", +"f3b5678f": "ETHER_MAX_CONTRIB()", +"f3b585cc": "nSteps()", +"f3b5a5af": "bonusForEveryone()", +"f3b600ec": "_allocateTokens(address,uint256,uint256)", +"f3b6a748": "unpauseFrom(uint256)", +"f3b75ee3": "totalCommunityFundMinted()", +"f3b77f30": "close(bytes,bytes)", +"f3b849d6": "_allocateReferralTokens(address,uint256)", +"f3b8b2a9": "weiBuysHowManySeconds(uint256)", +"f3b978c1": "checkProof(bytes32[],bytes32[])", +"f3ba138e": "MineLevel(uint256)", +"f3baa092": "RemoveRequestEvent(address,address)", +"f3bb9741": "commitmentCampaign(uint256,bytes32)", +"f3bbc84c": "tierNum()", +"f3bd27a4": "secondStageMinting()", +"f3bda50a": "getSetNewTerrainPrice(uint256,uint256,bytes32)", +"f3bdc228": "destroyBlackFunds(address)", +"f3bdea04": "burnICACOIN(uint256)", +"f3bdf8ba": "requestEthereumLastMarket(address,string)", +"f3be07eb": "getDefaultTranches(address)", +"f3be1e35": "VIVAToken(uint256)", +"f3becb59": "C(address)", +"f3bf6b73": "proposalChecked(address,uint256,uint256)", +"f3bf78e7": "setBAAAU(bytes32,address,address,address,uint256)", +"f3bf93a0": "forceReleaseAdmin(bytes32)", +"f3bfddb7": "getById(string)", +"f3bfe75e": "BeatTokenIcoFinalized()", +"f3c0efe9": "tokenToTokenTransferOutput(uint256,uint256,uint256,uint256,address,address)", +"f3c156f3": "purchaseDigitalArtSellingItem(uint256)", +"f3c15f49": "getLiability()", +"f3c16e54": "Resolve(bytes32)", +"f3c1c7c0": "LogCoinsEmited(address,uint256)", +"f3c20de0": "tokens(uint16)", +"f3c274a6": "isPut()", +"f3c37bd5": "Verifier(address,uint256,uint8)", +"f3c505c2": "updateInventories(uint256,uint256,uint256,uint16)", +"f3c50ce0": "CobeFriendCore()", +"f3c51c84": "_EnvoisTokens(uint256,uint256)", +"f3c537c5": "fint8(int8)", +"f3c64850": "amendedEarlyPurchaseIndexes(uint256)", +"f3c6a223": "Bifrost1Token()", +"f3c74496": "logWorkerStatement(string)", +"f3c78091": "AcceptingDepositsChanged(bool)", +"f3c7d275": "prenup(string,string,string,string,string,address,address)", +"f3c7e538": "set_successful_verifier(address)", +"f3c85eba": "compound(uint256,uint256,uint256)", +"f3c8f3ef": "startListing()", +"f3c8ffaa": "endPreICOStage()", +"f3c957f2": "haltCommitPeriod(address,bytes32,bytes32)", +"f3c95c60": "isValidUser(address)", +"f3c9a5cc": "CrowdsaleController(uint256,address,address,bytes32)", +"f3ca062a": "setLevel(uint256,uint8,uint8,uint16)", +"f3ca29b1": "ownerDailyWithdrawal()", +"f3ca2b54": "test_twoValidEqString()", +"f3ca5679": "Fund(address,string,address,uint256,uint256,address,address,address,address,address[],address[])", +"f3ca7425": "exercisePriceOf(uint256)", +"f3ca824c": "setStartCloseSale(uint256)", +"f3caad03": "isCitizen(address)", +"f3cb1805": "bidOnBreedingAuction(uint40,uint40)", +"f3cb4aae": "confirmBusiness(address)", +"f3cb8c31": "addEmployee(address)", +"f3cbc040": "checkVerify(bytes32,uint256,uint256,uint256)", +"f3cbe7b5": "exchangeableTokensFromStock()", +"f3cc2436": "maxPoolTotal()", +"f3cc6860": "setHash(bytes32,uint256,bytes32)", +"f3cca49a": "restoreUnsoldTokens(address)", +"f3cca5b4": "crowdSaleSoldAmount()", +"f3cca85a": "getInputAddress()", +"f3ccaac0": "image()", +"f3ccb401": "DistributeAirdropMultiple(address[],uint256)", +"f3ccc2f2": "buscarDocumentoPorQM(string)", +"f3cd1c28": "setTransfersAllowed(bool)", +"f3cd543f": "sendBoughtTokens(address,uint256)", +"f3ce2bc6": "_updateSaleAvgHistory(uint256,uint256)", +"f3ce40eb": "setSchellingRoundSupply(uint256)", +"f3ce782e": "LongBought(address[2],uint256[5],uint256)", +"f3cee129": "getOwnerServer()", +"f3cee64d": "setCmd(uint256)", +"f3d1dfee": "calcSeason(uint16)", +"f3d2f17b": "getData_22()", +"f3d2f824": "setXQU(string)", +"f3d305b4": "getBoostedProposalsCount(address)", +"f3d3402a": "changeBountyData(uint256,string)", +"f3d38a7b": "setBTBAddress(string)", +"f3d3d448": "setControllerAddress(address)", +"f3d3fce7": "settleLend(bytes,bytes,address,uint256,bytes,bytes,bytes,bytes)", +"f3d448d2": "countryInfo(uint256)", +"f3d47d1b": "transferAllFrom(address,uint256[])", +"f3d490db": "transferByPartition(bytes32,address,uint256,bytes)", +"f3d4b942": "emergencyFreeze()", +"f3d544d2": "FRTToken(uint256,string,string)", +"f3d6b54e": "setAirdropPrize(uint256,uint256)", +"f3d6cb29": "setLLV_edit_34(string)", +"f3d791ea": "submitTrade(address,uint256,address,bytes)", +"f3d79244": "frozenProfitDate(address)", +"f3d7bf1d": "privateStageTokensSold()", +"f3d7c6f7": "claimPrivateTokens(address[],uint256[])", +"f3d7e464": "EARLY_CONTRIBUTOR_VESTING_PERIOD()", +"f3d838a0": "Copyright()", +"f3d89c49": "setAutoCreationFee(uint256)", +"f3d91708": "isEligibleForUpgrade(address)", +"f3d97a25": "cancelTrade(address,address,uint256,uint256,uint256)", +"f3d9bc65": "sendBountyTokens(address,uint256)", +"f3d9eeec": "CourseChanged(uint256,uint256)", +"f3db09b8": "invoice(bytes32,address,address,uint256,uint256,uint256,uint64,uint64)", +"f3db4f2b": "retrievePieceFromEscrow(uint256)", +"f3dbaf0d": "removeVestingAdmin(address)", +"f3dd3d8a": "newCurrency(string,string,uint8)", +"f3ddb946": "bets_total()", +"f3de56de": "createNewSociety(string)", +"f3df0bbe": "startNewBallot(bytes32,bool,bytes32[])", +"f3df29b6": "periodITO_endTime()", +"f3e1cb63": "rsVerifyPublic(bytes32,uint256[2],uint256[],uint256[],uint256[],uint256[])", +"f3e1efbf": "validation_inviter(address)", +"f3e238d2": "StrongKek()", +"f3e2aa83": "requestReclaimEther()", +"f3e3c629": "testBalanceOfStartsAtZero()", +"f3e41a99": "addRound()", +"f3e4877c": "distribution(address[],uint256)", +"f3e4cac4": "_getTokenPrice()", +"f3e5c15e": "screenstate()", +"f3e62640": "buyToken(uint256,address,uint256)", +"f3e664c9": "setSaasApiProfitAddress(address)", +"f3e68264": "getSignerOfBalanceHash(address,uint8,uint256,bytes)", +"f3e71756": "checkTickets()", +"f3e84c4c": "FundingClosed()", +"f3e84cf3": "createNewRevision(bytes32,bytes)", +"f3e94596": "LogReferral(address,address,uint256)", +"f3ea1241": "releaseFirst()", +"f3ea4c68": "set_symbol(string)", +"f3eac094": "defaultAuctionPrice()", +"f3eb2445": "SimpleToken(string,string,uint256,address)", +"f3ec3f4a": "whitelistPreSaleAddressMany(address[],bool)", +"f3ecda21": "ITSM()", +"f3ece9f4": "addBlockList(address)", +"f3ed064a": "bonus01End()", +"f3edf112": "changeHelper(address)", +"f3ee6305": "removeCertificationDocument(address,bytes32)", +"f3eeb84b": "lastBlock_f9Hash_uint256()", +"f3eef981": "_init(uint40,uint40)", +"f3f10da7": "Balance(string,uint256,address)", +"f3f11048": "ethAddressPublicKey(bytes32,int256,bytes32,int256)", +"f3f16a15": "voted(address,bool)", +"f3f18615": "verifyTrustedSender(uint256,address,uint256,uint8,bytes32,bytes32)", +"f3f1b5a7": "CongressOwned()", +"f3f1d909": "redeemCoin(uint256,address,bool)", +"f3f1e4ea": "MenglaToken(address)", +"f3f2e656": "setAttributeSigned(address,uint8,bytes32,bytes32,string,bytes,uint256)", +"f3f2f0bc": "beneficiary2()", +"f3f31853": "getPayTable(uint16)", +"f3f43703": "pendingWithdrawals(address)", +"f3f458f8": "cycleCount_()", +"f3f480d9": "challengePeriod()", +"f3f4aef3": "getUserIDAndInviterEarnings()", +"f3f52865": "getPersonalStakeAmounts(address,address)", +"f3f6f0d7": "lastIndex()", +"f3f70674": "oracle_call(uint256)", +"f3f7650d": "fetchOrdersForMerchant(address)", +"f3f79a97": "setDebtIncreasingFactor(uint256)", +"f3f9240b": "investAs(address)", +"f3f969a0": "setRegisteredAuthority(string,address,bool)", +"f3f9c004": "reffalPool()", +"f3fa1e7b": "bulkApproveTransfers(uint256[])", +"f3fa2c37": "getUpdateHash(uint256,uint256,uint256,uint256)", +"f3fac412": "_calcEndTime(uint256)", +"f3fb9a02": "setInfo(uint256,uint256)", +"f3fbabb5": "setDedicatedProxy(address)", +"f3fbfc60": "SFTSEV()", +"f3fc536d": "revokeConfirmation(bytes32)", +"f3fc7fb2": "Ordient()", +"f3fce3b5": "setC4FContractProviderCompleted(address,bool)", +"f3fd826f": "transferFromTokens(address,address,address[],uint256[])", +"f3fde261": "onTransition(bytes32)", +"f3fe12c9": "claim(string)", +"f3fe5bc2": "totalWitdrowedToken()", +"f3fef3a3": "withdraw(address,uint256)", +"f3ff10bf": "UseQuantity(int32)", +"f4009d99": "changeMainStartTime(uint256)", +"f400a3d7": "finishDate()", +"f400d37b": "yesVoteSum()", +"f400fde4": "amount1()", +"f4010db0": "deleteTile(uint16)", +"f4016ac3": "setInitialState(address)", +"f4016b17": "destroyBPESOToken(address,uint256)", +"f4025568": "approveCertificate(uint256)", +"f4029e92": "getMonsterReturn(uint64)", +"f40314f4": "tokenCurrentStage()", +"f4044697": "xrateProviders()", +"f404d1e2": "transferAndCall(address,uint256,bytes,string)", +"f404df8e": "_getExpectedRate(address,address,uint256)", +"f405311b": "Made(address,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"f405a275": "EventJoinedBattle(address,uint256)", +"f4064471": "messagePreSignedHashing(bytes8,address,address,uint256,uint256,uint256,uint8)", +"f4071928": "mintAuditApproval(address,address,uint256)", +"f407c81d": "tokenNoByAddress(address)", +"f408ebe9": "dev_reset()", +"f409a609": "internalMintToken(uint256)", +"f409ab66": "getDepositedCount()", +"f409e633": "SetENGDevAddress(address,address)", +"f40a049d": "triple(uint256)", +"f40a9112": "whaleIncreaseLimit()", +"f40c0843": "subscribe(address,uint8,bytes32)", +"f40d71f1": "releaseTokens(address,uint256)", +"f40d8d8f": "updateAllowance()", +"f40e0b6e": "coinsToSell()", +"f40e28f2": "createGen0Auction(uint256,uint256,uint256,uint256,address)", +"f40e8d8b": "retryWinner(uint256)", +"f40ea5cb": "setReservePricing(uint256)", +"f40ebcf3": "setBalanceOfValueFor(address,uint256)", +"f40ef739": "preIcoEndsAt()", +"f41017fc": "finalize(uint24)", +"f410a26b": "receive(address,uint8,uint32[])", +"f410aa39": "_issueByPartition(bytes32,address,address,uint256,bytes,bytes)", +"f4116381": "setFiscal(bytes32)", +"f411fb21": "freezeWithdraw(address,uint256,bool)", +"f41293c7": "getIndexForTeamId(uint32,uint32)", +"f412af91": "getOuvidoriaEndpoint(address)", +"f41377ca": "setFoundationAddress(address)", +"f41440d9": "setCreator(address,address)", +"f414cccb": "removeFreezableAddresses(address[])", +"f4156757": "TeamPoolAddress()", +"f415ed14": "slash(bytes32)", +"f4162530": "nodeFee()", +"f4163340": "isFailed()", +"f416d2cb": "emitTokensSince()", +"f417614a": "validateAndReturnContribution()", +"f418b153": "replaceMarketingToken(uint256,uint256,uint128)", +"f418cf4e": "recordSenderIfNecessary()", +"f4199bb8": "initializeWhitelist(address[])", +"f4199fb7": "ayy()", +"f419c69d": "_createPony(uint256,uint256,uint256,uint256,address)", +"f41a12c8": "_takeOwnership(address,uint256)", +"f41b536e": "getRecipientString()", +"f41bc988": "isPartyA(address)", +"f41bfa9e": "mint(int256,uint256,string)", +"f41c1c93": "setAnswerFee(uint256)", +"f41c639e": "sendMsg()", +"f41d0b0c": "getInfluencer(string)", +"f41d1a82": "partner1_name()", +"f41d97fc": "getPriceOfTokenInLastAuction(address)", +"f41db329": "addAuction(uint40,uint40,uint128,uint40)", +"f41dc25f": "totalWeiLose()", +"f41e3494": "hasFailed(uint256)", +"f41e60c5": "enableTransfers(bool)", +"f41e8fc8": "periodAmount()", +"f41f4b10": "retrieveHouseTake()", +"f41fa999": "TTest()", +"f4201c3c": "isVIP(address)", +"f4206706": "withdrawEthers(uint256)", +"f420977d": "noOfTokenAlocatedForSeedRound()", +"f420c5b1": "getCloneWallets(uint8)", +"f420d9d2": "setNumRewardsAvailableForAddress(address,address)", +"f4217648": "setWhitelist(address[])", +"f421e02b": "testCantFinalizeWithIncorrectCap()", +"f42206d1": "HouseEdgeUpdate(uint256)", +"f422878a": "addressIsStakeDiceGameContract(address)", +"f42355a4": "isSaleInitialized()", +"f4239eec": "affiliatePercent()", +"f4246be4": "addToBundle(bytes32,bytes32)", +"f4250f75": "AgriChainPrevData()", +"f42541be": "promoToonsMinted()", +"f42598f0": "get_mintable()", +"f4268e46": "g17token()", +"f426ceee": "award(bytes32,uint256,address,bool,uint256)", +"f426d8ac": "withinHomeLimit(uint256)", +"f426f03a": "setFrequency(uint256)", +"f427211c": "getTime2(address)", +"f4279d1f": "updateEthUSDOracle()", +"f42a2c42": "removeAssetListing(uint256)", +"f42aa287": "getBlobStore(bytes12)", +"f42ac1de": "minQuorum(uint256)", +"f42b1ae0": "unPauseGame()", +"f42b9999": "icoMinInvest()", +"f42c051e": "submitTokenToEthOrderWHint(uint128,uint128,uint32,int256)", +"f42c0f02": "MARKETING_SHARE()", +"f42c56c2": "cbrt(uint256)", +"f42ca2ee": "sub_32(uint32,uint32)", +"f42d1d30": "creditorAmounts(uint256)", +"f42eb765": "getAgreement(bytes32)", +"f42ef9ec": "emitWithrawalRequestEvent(address,address)", +"f42f0c7d": "lengthOfCommonPrefix32(bytes32,bytes)", +"f430511a": "setMaxAddresses(int32)", +"f43098af": "resetTokenOwnership()", +"f4320f00": "getProjectUnusedTokens()", +"f4325417": "App(address,string,uint256,string)", +"f4325d67": "reserveToken()", +"f43313b6": "assertEq31(bytes31,bytes31,bytes32)", +"f433262f": "updateFromRegistry()", +"f4338e89": "getAllTeamCosts()", +"f433e12e": "marketingTokenWallet()", +"f4347267": "getX(bytes)", +"f434e028": "PreICOProxyBuyer(address,uint256,uint256,uint256)", +"f4351908": "InitialRateChange(uint256,uint256)", +"f4351e15": "addAndMintPlayers(uint128[],bool[],uint256,uint256,uint256)", +"f43532ac": "changeWaveVoteContract(address,string)", +"f435d012": "setUnitJadeStealingIncreases(address,address,uint256,uint256,bool)", +"f435f5a7": "lock(address)", +"f436de14": "setAllowanceValue(uint256)", +"f437019c": "stop_service(uint256)", +"f437bc59": "host()", +"f437d6bc": "objectShield()", +"f4381136": "DeferredPresaleTokenPurchase(address,address,uint256,uint256)", +"f4385912": "getPlayerId(uint256)", +"f4385eaf": "KPISToken()", +"f4387d86": "arbitrateApproveMilestone(uint256)", +"f4395dbc": "bitmcoinToken()", +"f4399f2d": "MDIToken()", +"f43a72b0": "setactive(bool)", +"f43abdf3": "getCrowdsaleUserCap()", +"f43acb52": "checkLottery(uint256)", +"f43b1620": "addUserAuto()", +"f43b4808": "viewPassword(uint256)", +"f43b7a76": "AdmineAdvisorTokens()", +"f43bac53": "poolFeeIncurred(uint256)", +"f43e34b2": "unFreezeAll(address)", +"f43e3918": "MELON()", +"f43e98c7": "refunding()", +"f43f523a": "mod(uint256,uint256)", +"f43fd7e0": "_handleTrainingFailure(uint256,uint256,uint256)", +"f4412803": "currentTotalAirDrop()", +"f44191f0": "getAccessoryByIndex(address,uint256)", +"f441b1c8": "currentAmount()", +"f4424cac": "getNumberOfLogEntries()", +"f44349dd": "angelTokenSupply()", +"f44376a2": "preFixed(address,uint256)", +"f443ea83": "MindHacker()", +"f444c136": "createDklAuction(uint256,address,uint16,uint256)", +"f444ea30": "allowBack()", +"f4451628": "buyHSShop(uint256)", +"f44544b3": "fundPos()", +"f4462d04": "periodicity()", +"f44637ba": "addBurner(address)", +"f4463fb7": "emergencySelfDestruct()", +"f44667a6": "tokensAmount(address,address)", +"f446c1d0": "A()", +"f449619e": "collectPrize(uint256)", +"f449958d": "deliverManagementTokens(address)", +"f449c3cb": "_presaleSupply()", +"f449ffe4": "setPresaleRate(uint256)", +"f44a06b9": "endIcoSaleRound1()", +"f44a6ca9": "addProduct(address)", +"f44b43f8": "approveAmount(uint256,address,uint256)", +"f44b54ca": "functionName1(bytes32)", +"f44b79b3": "withdrawalAll()", +"f44bd811": "TRCERC20(uint256,string,string)", +"f44dc562": "_addKey(address,uint256)", +"f44e1351": "setEpisodeManager(address)", +"f44f13d8": "assert2()", +"f44f8be9": "sendNegReq(uint256,uint256,uint256,string)", +"f44ff712": "blockHeight()", +"f450096f": "updateOraclizeGas(uint256,uint256)", +"f4500eb5": "ETHERCFeeModifiers()", +"f4508082": "_price_token()", +"f4509fc2": "LOCKED_1Y_DATE()", +"f450b574": "_mixer()", +"f450cfee": "disablePrivileged()", +"f450d53a": "allFinalised()", +"f450e5f8": "TOKENS_SOLD_LIMIT()", +"f4510455": "STQPreICO2TestHelper(address,address[])", +"f4514ca6": "buySome(uint256,uint256,uint256,uint256,uint256)", +"f4519035": "betOdd()", +"f452b69c": "getCommandTokens()", +"f452f32d": "getByTo(uint256,uint256)", +"f45346dc": "deposit(address,uint256,address)", +"f45392fb": "getReportingWindowByMarketEndTime(uint256,bool)", +"f453c827": "getAddressField3()", +"f4544255": "refer(address,address)", +"f454c32c": "teamReserveTokensDistributed()", +"f4559619": "newOwnerTemp()", +"f4560403": "Zero()", +"f456106d": "ProdCToken()", +"f4572664": "changeMinimumPurchaseAmount(uint256)", +"f457361a": "paidversion()", +"f457547a": "spreadPercent()", +"f457688d": "can_i_jump()", +"f4577298": "EthGet()", +"f457ee5a": "donation(address)", +"f45811bd": "Voyager()", +"f4586cba": "setVestingRevokeDate(address,address,uint256)", +"f4591074": "finishInvite()", +"f45934b6": "cards_gold_total()", +"f45984fd": "TOKEN_UNIT_RATIO()", +"f459ce60": "btycbuy(uint256)", +"f459eb61": "generateKeccak256(bytes)", +"f459f517": "dividendsPoolAddress()", +"f45a729c": "getEtherValue(uint256)", +"f45b106a": "increaseMonthlyTransactionVolumeReceiving(uint256)", +"f45b4fba": "setPersonalBonus(address,uint256,address,uint256)", +"f45b96a0": "financePeriodsCount()", +"f45c85e5": "currentOwnerFeePercent()", +"f45ce8d7": "setAddressKYC(address,bool)", +"f45dae6e": "parseLoanOfferRates(uint256[7],uint32[4])", +"f45e29bb": "hashCoin()", +"f45e8dc4": "buyWarlordChest(uint256)", +"f45eb5b4": "_generateRandomhashNumber(string)", +"f45ef033": "nextReduceSupply()", +"f45efe88": "stage1Bounty()", +"f45f74f8": "VerityToken()", +"f460473e": "fillArray()", +"f460590b": "updateSigner(address,bool)", +"f460c5e4": "listItem(uint256,uint256,uint8)", +"f460e5d0": "setRamenContract(address)", +"f461847c": "DatGirl()", +"f4619e71": "NokuCustomERC20Service(address)", +"f461db0e": "teamAllocatedTime()", +"f461db4a": "getdoc(uint256)", +"f4623d44": "getStorage(address,uint256,uint256,bytes)", +"f4623e0b": "addBalance(address,address,uint256,uint256)", +"f462671e": "isAuthDisabled(uint256,uint256)", +"f46332e0": "test_claimShare_emptyFeeAndRewardPools()", +"f4635674": "countryOwnersOf()", +"f4637003": "transferChildren(address)", +"f463be37": "setSecondAddressBalance(address)", +"f463edd1": "createDocument(uint256)", +"f464e64e": "premiumPacks(uint256)", +"f464e7db": "sellToken(address,uint256)", +"f4656219": "PRICE_RATE_FOURTH()", +"f4660ff5": "timeVault()", +"f4662f71": "canUnshelf(string,address)", +"f466f106": "addHouseHold(uint256,uint256,uint256)", +"f4674b89": "withdrawByAdmin(address,uint256,address)", +"f4686b42": "GxAdminOperations(address)", +"f468e9b3": "inICO()", +"f469707f": "addToGoldList(address)", +"f46b5321": "calculatePoolAmount(uint256)", +"f46b986a": "secondExtendedBonusSalesEnds()", +"f46bbc09": "thirdStageTokenRate()", +"f46c0f29": "compensate(uint256)", +"f46c50dc": "doFail()", +"f46c858a": "addAdvisor(address)", +"f46d1982": "setup(address,uint256)", +"f46d91f4": "TokenBurn(uint256)", +"f46da084": "createName(string,string,string,string,bytes32)", +"f46de44a": "Etherumchain()", +"f46eccc4": "minters(address)", +"f46f16c2": "MARKET()", +"f46ff44f": "dollarToEtherRatio()", +"f4700d3e": "lpMaxVolume()", +"f4703d26": "numbersCountMax()", +"f47073f4": "setTotalIncomeFeePercent(uint256)", +"f470fd5e": "BLU()", +"f47125f5": "StableICO()", +"f471e626": "disapproveByC(uint256,string)", +"f47279d2": "capRemaining()", +"f47289e1": "_ecDouble(uint256,uint256,uint256)", +"f472d615": "enableIco()", +"f472e136": "fraction(int64,int64)", +"f4734818": "_random(uint256,uint256,uint256,uint256,uint256)", +"f4736429": "changeUnicornRanchAddress(address)", +"f473c484": "BatchDetachAssets(uint256[10])", +"f4749624": "dist_list_set(address[],uint256[])", +"f474b6b2": "aboutWorker(address)", +"f4752806": "convert2PeonyToken(uint256)", +"f4757a49": "HighestBidIncreased(address,uint256)", +"f47599db": "WLMTBounce()", +"f4773d26": "AESSignatum(uint256,string,string)", +"f47760ac": "forceGame(uint256,uint256)", +"f47795f3": "CommonTokensale(address,address,address)", +"f477a6b7": "depositEthers()", +"f477c2b9": "setColdWalletAddress(address)", +"f4784b37": "placeCube(uint256,uint256,uint256,uint256,uint256)", +"f478cef1": "leader_2()", +"f47a6e84": "getReleased()", +"f47aa124": "AutoSplitCurator(address)", +"f47b7740": "information()", +"f47c84c5": "MAX_TOKENS()", +"f47cd133": "AMBASSADOR_FOUR()", +"f47ce310": "getRoomCurrentSet(uint256)", +"f47efbca": "getMemberLinks(address)", +"f47f5921": "exerciseOption(address[3],uint256[3])", +"f4807a4d": "downTickTest(address,uint256)", +"f4812eb9": "tokenIdToPrice(uint256)", +"f4814444": "_withdrawBalance()", +"f481d2d0": "BaseFareCalculator()", +"f4833360": "getTeamInfoByID(uint256)", +"f48339e4": "MintingEnded()", +"f4835aea": "postHardRate()", +"f4838452": "loseWager(address,uint256,uint256,bool,uint256)", +"f484e827": "slashSmallUsername(bytes)", +"f48513ed": "setFundOnContract(bool)", +"f4869726": "buyWithSignedAddress(uint128,uint8,bytes32,bytes32)", +"f487404f": "oldOwner()", +"f487c403": "DataStore(string)", +"f487e4b6": "SendERC20ToAsset(address)", +"f4880b22": "transferStatus()", +"f489faf9": "addAddressToBonuslist(address)", +"f48a3f2b": "PlazaToken(uint256,string,string)", +"f48aa044": "upgradeEthCost(uint256)", +"f48b4391": "SBToken(address,address)", +"f48be22b": "initialiseAllocations()", +"f48c157d": "createGame(string,bytes32[])", +"f48c2afa": "PVCCrowdsale(uint256,address,address)", +"f48c3054": "proxyPayment(address)", +"f48c4633": "disableRefunds()", +"f48d11af": "removeFromVIPList(address[])", +"f48d1c5e": "totalDisposed()", +"f48d371c": "create(uint256,uint256,int256,address,address)", +"f48d60ca": "hasOwner(uint256)", +"f48e20f2": "getCreateFeeWindowUniverseValue()", +"f48e5f27": "infoWithdraw1()", +"f48e9c33": "ETPotatoPresale(address,uint256,uint256)", +"f48edf0c": "partner(address,address)", +"f48f378d": "KuyyomToken()", +"f48f3ced": "HFCoin(string,string)", +"f4903ca0": "newContract(string,address[],string,bytes32,uint256)", +"f4914919": "incrementContinuityNumber(uint32)", +"f4915f5f": "BHM()", +"f4916f05": "VoteSvp002(address,uint256,uint256)", +"f49259b7": "UpgradeableToken(address)", +"f49296ae": "WasHere()", +"f4929cc5": "initPair(address)", +"f492a72f": "signUp(address[],uint256[],string)", +"f493c848": "transferMultiply(address[],uint256[])", +"f49501f3": "soldOnCurrentSale()", +"f4954387": "setHalt(bool)", +"f49627be": "Technology4G()", +"f4970e71": "approveWithdrawal(address,uint256)", +"f49727bd": "getSkillEvaluation(address,uint256,uint256,uint256,address)", +"f497463a": "setVariables(uint256,uint256,uint256,uint256)", +"f49808ea": "addEthForPayment()", +"f4993bbd": "executeEmergencyWithdrawal()", +"f499a349": "NewPrefixPrice(uint256,uint256)", +"f49a5504": "permittedInvestors(address)", +"f49a616c": "updateFeePayoutAddress(address,address)", +"f49a66fd": "_pushLandId(uint256,uint256)", +"f49b728e": "setAllResourceERC20Addresses(address)", +"f49b8e10": "BelezaNetwork()", +"f49bb5a8": "numberPlateExist(address,string)", +"f49bbb23": "getUserClientsCount(address)", +"f49bff7b": "getBounty()", +"f49d1d19": "viewSellOffersAtExchangeMacroansy(address,bool)", +"f49dec70": "buyPepeAffiliated(uint256,address)", +"f49e8135": "calculateTokenBuySimple(uint256)", +"f49eee20": "priceFactorB()", +"f49f0974": "proxyList()", +"f49fc563": "SULTANS()", +"f4a011be": "transferWithReserving(address,uint256)", +"f4a05f8f": "_transferAsset(uint256,address,bool)", +"f4a1585b": "setNextCycle()", +"f4a222e9": "icoRaisedETH()", +"f4a32ef8": "bonusTokensSold()", +"f4a43448": "getEstateSize(uint256)", +"f4a475cb": "t_ImmlaTokenDepository()", +"f4a4b8c7": "OfferUnHold(uint256,bytes,bool,address)", +"f4a67395": "showAddresses()", +"f4a6ef99": "logBytes(bytes32)", +"f4a81d08": "getKudosGiven(address)", +"f4a8619a": "prep(address,uint8)", +"f4a8a699": "_mint_with_uri(address,uint256,string)", +"f4a8cbc0": "tokensToWei(uint256,uint256)", +"f4a92020": "rawApprove(address,bytes32)", +"f4a972de": "softEthTransfer(address,uint256)", +"f4a9c919": "startThinking()", +"f4a9df62": "annul(address)", +"f4aa1291": "withdrawFundsAdvanced(address,uint256,uint256)", +"f4aa956c": "preIcoIsRunning()", +"f4aac034": "charityFraction()", +"f4ab2928": "isContractPaused()", +"f4ab2b19": "releaseAllOldBalanceOf(address[])", +"f4ab4d1d": "_getPetAura(uint256)", +"f4ab9adf": "addVoter(address)", +"f4ac6560": "batchVipWtihLock(address[],uint256[],bool)", +"f4acc2ed": "setContractAdmin(address,bool)", +"f4accda5": "order(uint256,uint256,address)", +"f4ace1a5": "processContribution(address,uint256)", +"f4ad2212": "EthereumEmerald()", +"f4ad8e37": "listings(uint64)", +"f4ae0d2f": "getTechBonus1(uint256)", +"f4ae2164": "EDToken()", +"f4ae67a1": "setTargetDiscountValue9(uint256)", +"f4af9146": "setDefaultTranche(bytes32[])", +"f4afbdca": "assets_explorer_controller()", +"f4b0ce03": "NewIssue(address,uint256,bytes)", +"f4b103d4": "SimpleStorage(uint256)", +"f4b186a7": "setProfitOwner(address)", +"f4b272db": "licenseAttributes(uint256)", +"f4b28747": "CaptainToken()", +"f4b2dfea": "Matching_Finneys()", +"f4b2f5b6": "maxTokenSupplyICO1()", +"f4b43268": "phrase()", +"f4b432b8": "validUser(string)", +"f4b489e7": "upgraded(address)", +"f4b4d77e": "cutOf(uint256)", +"f4b5cbc4": "setCrowdSale(address)", +"f4b74ae9": "updateBestInvestor(address,uint256)", +"f4b79379": "generalRate()", +"f4b86c48": "isMarketplace()", +"f4b95676": "IsReady()", +"f4b96570": "greet_omar(uint256)", +"f4b97c4c": "insertNode(bytes32,bytes32,bytes32)", +"f4b9fa75": "dai()", +"f4ba89f9": "escrow_fee_numerator()", +"f4bbd5d4": "getDealByNumber(uint256)", +"f4bbfd6a": "scheduleCall(bytes,bytes)", +"f4bd0bcf": "isConditionMet()", +"f4bd0eb2": "getSplit(uint256,uint256,uint256,uint256)", +"f4bd65a7": "_updatePhaseTimes()", +"f4bd9429": "unassignOwner(address,address)", +"f4bead6e": "percentageToToteLiquidatorWallet()", +"f4bebac2": "winner_bids()", +"f4bffad6": "bonusForMainICO()", +"f4c06c8e": "removeConfirm(bytes)", +"f4c140b2": "setArtistFees(uint256)", +"f4c28ea3": "lowerLimitForToday()", +"f4c2ebdd": "createLandAndAuction(address,uint256,address,uint256,uint256)", +"f4c38aa1": "initLending(address,uint256,uint256)", +"f4c3b4d7": "transferable(uint256)", +"f4c3f3f7": "fetchAllDataForCustomer(address)", +"f4c52644": "requestRefundDonator()", +"f4c5ab7c": "validateCallGas(uint256,uint256)", +"f4c679db": "Gidnist(address)", +"f4c6f423": "requestWarranty(string,address,uint256,uint256)", +"f4c7f92c": "newRubesUntilPayout()", +"f4c84d19": "update(string,string)", +"f4c91807": "calculateCurrentPrice_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes)", +"f4c97199": "updateNextGamePotSplit(uint256)", +"f4c99177": "setBlocksPerPayPeriod(uint256)", +"f4c9b1fd": "campaignState()", +"f4caee88": "isParticipating(address)", +"f4cb09cf": "setAmbassadors(address,bool)", +"f4cb290b": "editMemeInfo(uint256,string,string,string,string)", +"f4cb4ae3": "tokenCreationMaxPrivateSale()", +"f4ccbc4f": "getWithdrawals(address,address)", +"f4ce66e0": "extractUint(bytes,uint256,uint256)", +"f4ce7c1c": "purchaseWithEther(uint256)", +"f4ce7d4a": "ChannelContractAddressChanged(address,address)", +"f4cebdc2": "HeroCore()", +"f4cee3b5": "jasontestToken()", +"f4d0b2a5": "RefundInvestorsBallot(address)", +"f4d0b67f": "SetTime(uint256)", +"f4d176e1": "mapMaster()", +"f4d21515": "submitQuery(uint256)", +"f4d218f9": "lastBlockClaimed()", +"f4d22b02": "transferMoreETH(address,uint256)", +"f4d24fea": "setItem(uint8,uint8,uint256)", +"f4d26fec": "upgradable()", +"f4d28ab0": "Update_START_PREICO_TIMESTAMP(uint256)", +"f4d2cac3": "setBonusSale(uint256)", +"f4d3e94f": "weiRaisedInPresale()", +"f4d44b72": "getBoardsCount()", +"f4d48c0d": "channelParticipant(uint64,uint64)", +"f4d56a51": "isIdValid(bytes16)", +"f4d5d6ce": "seriesBSupply()", +"f4d64745": "HgcToken()", +"f4d76b60": "postValidatePurchase(address,uint256)", +"f4d7b725": "GasPrice()", +"f4d87f8a": "WW3Token()", +"f4d92886": "test_shutDownVersion()", +"f4d94699": "EndowmentRetriever()", +"f4d957a5": "test_validProxyFundTransfer()", +"f4da6a54": "AUTHORSIGHASH()", +"f4da834c": "cancelAuctionToBuy(uint256)", +"f4daa98c": "BitcoinFuture()", +"f4dadc61": "locks(uint256)", +"f4dae266": "total_wei_given()", +"f4dafe71": "update_hash(bytes32)", +"f4db9ad1": "bountyOnlineTokens()", +"f4dba182": "take(uint256,uint256[])", +"f4dbeb9d": "getCredRanksByContents(address,uint256[])", +"f4dc2d21": "Deed(uint256)", +"f4dd0fe9": "ico1Max()", +"f4ddca3c": "shortenBonusPreIco(uint256)", +"f4ddff1c": "_teamID()", +"f4de8dfe": "generateUID(uint256,uint256,uint256,uint32)", +"f4def44b": "getStaff(uint256)", +"f4df1fb2": "themedSpinners(uint256)", +"f4df80ee": "subUserTokens(address,uint256)", +"f4e0f412": "exec(address,uint256)", +"f4e1358a": "transfer_enabled()", +"f4e2d68b": "ltcBalance()", +"f4e340ac": "RedFoo()", +"f4e36afd": "findThroneByNameHash(uint256)", +"f4e3be2d": "getSpawnProxy(uint32)", +"f4e42844": "ResetTransferState()", +"f4e50a4d": "getSupportedTokenByIndex(uint256)", +"f4e62c34": "OrigoToken()", +"f4e68486": "weiICOMinimum()", +"f4e6a70d": "addAnimalType(uint128,uint8)", +"f4e6d3f9": "calculateLockedPercentage(uint8)", +"f4e733c3": "lifeTime()", +"f4e75b79": "OwnershipTransferProposed(address,address)", +"f4e76a46": "getBalanace(bytes32,address)", +"f4e83593": "Volunteertimedollartocken()", +"f4e96093": "IntimateShoppe(uint256,uint256,uint256,address,address,address,address,uint256,uint8)", +"f4e9c944": "PRE_ICO_START_TIME()", +"f4ea7263": "Take_share_team_AES()", +"f4ea77f3": "coinPool()", +"f4ea95b9": "validateReleaseVersion(uint32[3])", +"f4eb20da": "SNC()", +"f4eb6889": "description1()", +"f4ebed78": "currentReward(uint64)", +"f4ec186d": "MoonCoin()", +"f4ec593d": "ICOCrowdsale(uint256,uint256,address,address)", +"f4ed0f46": "editionSize()", +"f4ed216c": "removeExchangePartnerTargetAddress(address)", +"f4ed660f": "testIfElse()", +"f4eda76a": "traitIdxToName(uint256)", +"f4eda996": "extractEntry(address[],uint256[])", +"f4edb15b": "narcosByOwner(address)", +"f4ee82ee": "TOKEN_SECOND_DISCOUNT_MULTIPLIER()", +"f4ee9efe": "mintPartOfEmission(address,uint256,uint256)", +"f4eef932": "deptcheckapproval(string)", +"f4efa24c": "getConsensusDetails(address)", +"f4f0b6e5": "investorDate(address)", +"f4f0dafd": "T0XToken()", +"f4f0fc21": "raiseCap(uint256,uint256)", +"f4f22662": "setPersonalBonus(address,uint8)", +"f4f27042": "open(address,address,uint256)", +"f4f3122e": "startSale(uint256,uint256)", +"f4f3b97c": "updateSubjectMatter(uint256,string)", +"f4f3bdc1": "minus(uint256,uint256)", +"f4f3c8a4": "comment()", +"f4f42246": "percentageCut()", +"f4f4d237": "getById(uint256)", +"f4f572ae": "CMO_Signature()", +"f4f59992": "m_analytics()", +"f4f5b30f": "unitTestGetAvailableReward(uint256,uint256)", +"f4f5e1c1": "SHARE_BOUNTY()", +"f4f61563": "setInviteeCount(address,uint256)", +"f4f6d6fe": "weiMinSale()", +"f4f724b3": "getEmployerJobsByStatus(address,address,uint8)", +"f4f7c6c2": "disagreeWithdraw(uint256)", +"f4f864f0": "STARBITToken(address)", +"f4f87730": "create_token(uint256)", +"f4f94a40": "ownerSetRandomGenerateMethod(uint256)", +"f4f96d29": "smartWallet()", +"f4f98ad5": "commit(uint256)", +"f4f996d5": "WandtChain(uint256,string,uint8,string)", +"f4fa6c1d": "blockheight()", +"f4fa8603": "fabricTokenSafe()", +"f4fab748": "end2Timestamp()", +"f4fb6789": "tknfwdToken()", +"f4fb7d4e": "m_nonEtherController()", +"f4fba1bc": "executeProof(bytes32[],uint256)", +"f4fc3570": "disableController(address)", +"f4fc5d13": "RevealBet(string)", +"f4fd326c": "SuperCarbonCoinToken()", +"f4fde3b6": "sendMoneyOwner()", +"f4feccbb": "LogUserUnRegistered(address)", +"f4ff56f4": "ProposalCloned(uint256,uint256,uint256,string,bytes32)", +"f4ff78bf": "changeMaster(address)", +"f4ffa7a9": "getMountTokenIds(uint256,address)", +"f50059b6": "reconcileDividend(address)", +"f500a0a3": "VeritasToken()", +"f5012d4b": "sendOtherTokens(address,uint256)", +"f5015000": "setMaxCharacters(uint16)", +"f5018d1c": "IronHands2()", +"f501af70": "OpenLongevityPresale()", +"f501d8b8": "transferFromICO(address,uint256)", +"f5023de9": "founder2Wallet()", +"f50249fc": "totalSupplyMax()", +"f502cdc0": "distributeNIM(address[],uint256,uint256)", +"f5037b2a": "addressLength(address,address)", +"f503a994": "leaveTeam(uint256,uint256)", +"f5042801": "setAsRefunded(address,uint256,uint256)", +"f504b089": "memberKeys(uint256)", +"f504e0da": "load_level(uint16)", +"f504efa7": "popHatch()", +"f50522ca": "setNote(uint256,bytes32,string,string)", +"f5059560": "makeProject(string,uint256,uint256)", +"f505a299": "getLLV_edit_32()", +"f505a92d": "reserveFor(address,uint256)", +"f505eb6e": "WolkDestroyed(address,uint256)", +"f505f5f7": "quicksort_core(uint256[],uint256,uint256)", +"f506d7e5": "getCompte_31()", +"f506fc54": "acceptValentineRequest(address)", +"f5074f41": "destroyAndSend(address)", +"f5088730": "copy(uint256,uint256,uint256)", +"f509078f": "isForAuction(uint256)", +"f5093ab4": "UpdateState(uint8,uint8)", +"f509b627": "confirm(address,uint224,uint32,address)", +"f509c554": "PIPSCHAIN()", +"f50a2644": "canCompleteContribution(address)", +"f50aac53": "register(address,string,uint8,string)", +"f50ab247": "StopGame()", +"f50ab7b0": "updateCoupleImageIPFShash(bytes)", +"f50acfa0": "transferToParent(address,address,uint256,uint256,bytes)", +"f50b486d": "getTokenIdsIndex(uint256)", +"f50b5308": "PRICE_MULTIPLIER_ICO1()", +"f50b769e": "lastEditionOf(uint256)", +"f50bab3f": "distributeCRTM(address[],uint256,uint256)", +"f50ca46a": "hasICOFinished()", +"f50d3914": "resetFoundationtList()", +"f50e3ac8": "_getAllInterest()", +"f50ebd21": "OHGLuangPrabang()", +"f50ecf0b": "basicIncomeLimit()", +"f50f1ba9": "_getRevisionTimestamp(bytes32,uint256)", +"f50fc02e": "flipsLost()", +"f510371a": "deleteOperation(bytes32)", +"f510c329": "EmitTransactionDetails(address,uint256,uint256,uint256,string,string,string)", +"f510c32b": "setRateWaiForCentPerToken(uint256)", +"f510ccd3": "CancelAuction()", +"f51119db": "checkAuditor()", +"f5112373": "testFloatArray()", +"f5112f87": "welcomeBonus()", +"f512106a": "testStringKeyValue()", +"f5122232": "LogAccess(address,bytes32,address,bytes4,bool)", +"f513a671": "soldItems()", +"f5143b1c": "HNContract()", +"f514e92c": "TARGET_DURATION_BETTING_BLOCK()", +"f514f0f9": "STAGE_THREE_TIME_END()", +"f5156fba": "CECToken(uint256,string,string)", +"f5166eea": "reservedTokensLockedPeriod()", +"f516e9ec": "ethDeltaDepositAddress()", +"f5173120": "TOKEN_FIFTH_PRICE_RATE()", +"f518e66d": "_addStakeholder(address)", +"f5194ae2": "MainToken()", +"f5195b62": "c_dateTo()", +"f5196002": "getBOPCount()", +"f519618f": "addMultipleTier2Members(address[])", +"f51b793a": "get_appuration(uint8)", +"f51c2907": "affiliatThreshold2()", +"f51c755b": "testConcatMemory33Bytes()", +"f51cbc72": "Level()", +"f51d0c6f": "_awardForRecommender(bool,uint256,uint256)", +"f51d1399": "reduceBalance(address,address,uint256)", +"f51d401f": "getStageStartTime(int256)", +"f51d4cb1": "getCurrentVUPRate()", +"f51d61ff": "Thanatos()", +"f51d7d5f": "getTitle(address)", +"f51dcaa7": "AVGONE()", +"f51e181a": "scale()", +"f51f4738": "setCompleted(bool)", +"f51f5e78": "addPlayer(bytes32,bytes32,bytes6)", +"f51f96dd": "salePrice()", +"f51fb6a1": "leftInTier()", +"f5207c31": "businessPlannedPeriodDuration()", +"f5218ec2": "increaseRepAvailableForExtraBondPayouts(uint256)", +"f522ec0e": "_refundTokens(address)", +"f52343f4": "flipExecutionSwitchTo(bool)", +"f5235a46": "withdrawFoundersTeamAndAdvisors()", +"f5238546": "stopInvest()", +"f5238660": "totalMarketingFundMinted()", +"f524613f": "freeze(address,uint256,uint8)", +"f5251269": "ETHDividends()", +"f5254af8": "startPriceForHLPMT()", +"f5258aee": "ContractAdded(address,uint256)", +"f525cb68": "poolCount()", +"f525dcf1": "setLockFund(address,uint256)", +"f52706c9": "setMinResalePercentage(uint256)", +"f527c856": "TOKENS_PER_KETHER()", +"f527dd6c": "_emitSkillSet(uint256,uint256,uint256,bytes32)", +"f5292748": "_stakeContent(address,bytes32,uint256,uint256,bytes8,uint256,uint256)", +"f5298aca": "burn(address,uint256,uint256)", +"f529d448": "changeBalance(address,uint256)", +"f52a41f3": "mintOWL(address,uint256)", +"f52ad690": "badgeUnFreeze()", +"f52ae24b": "transmute(address,uint256)", +"f52b8d1f": "tokenReserved1Deposit()", +"f52bbc2d": "withdraw(address,address,uint256,uint256,address)", +"f52bd7cb": "addSwap(bytes5,bytes5,bytes32,bytes32,bytes12,bytes32,bytes32,bytes12)", +"f52c456f": "_createClown(uint256,uint256,uint256,uint256,address)", +"f52f2526": "exerciseOption(uint256)", +"f52f77b2": "createEntity(address,address)", +"f52fa89b": "evolveGeneration(uint16)", +"f52ff1da": "SDT(address)", +"f530259e": "isBlacklistDestroyer(address)", +"f5308c7d": "removeTransferLock()", +"f5318389": "setEmbassyCtrl(address)", +"f531aff2": "THINK_TANK_FUND_TOKENS()", +"f531cc63": "LogCreateEVN(address,uint256)", +"f531dbbf": "TOKEN_SWAP_DURATION_HOURS()", +"f5323da4": "phase_5_bonus()", +"f532e888": "getBookForUser(uint256)", +"f5336737": "BFTcoin()", +"f5341b4e": "UserTipped(address,bytes32,uint256,bytes32,bool)", +"f5343752": "exchangeEnabled()", +"f534b022": "burnleftToken()", +"f534d187": "girlBasicToken()", +"f5357102": "tohash(address,address,uint256)", +"f536c61a": "deleteAllChildren()", +"f5370884": "WithdrawalVotedEvent(uint256,address,uint256,uint256)", +"f5376e49": "TestingToken(uint256)", +"f53773dc": "withdrawBattleValue(uint256)", +"f5383f3a": "getFoundationStatus(address)", +"f5385345": "acceptOwnershipOffer()", +"f5397b5d": "initiate(bytes32,address,address,bytes32,uint256,uint256)", +"f53995ff": "setIncludeAuctions(bool)", +"f53a93f8": "MyFinalizableCrowdsale(address)", +"f53b0b3a": "_regularDonationsTotal()", +"f53b396b": "SimpleTokenCoin()", +"f53b8ded": "mintPreSaleTokens(address[],uint256[],uint256[])", +"f53bc835": "setMaxBuy(uint256)", +"f53bde25": "RATE_PRIVATE()", +"f53c5c87": "setTileContract(uint16,uint16,uint8,address)", +"f53d0a8e": "administrator()", +"f53d9d58": "AddLiquidity(uint256)", +"f53da97e": "currentSalePhase()", +"f53f43d9": "setcapname(string)", +"f53fb0cb": "isCollectionAllowedAt(bytes8,bytes8,uint256)", +"f53fbaf6": "send_ETH_from_contract(address)", +"f53fd201": "_modifyPixelColor(uint24,uint32,address)", +"f54011f5": "blockExternalTransfer()", +"f54095a7": "standart()", +"f5414023": "claimReward(bytes32)", +"f5419108": "view46()", +"f541c812": "releaseReward(address,uint256)", +"f543d3c6": "Stockfinex(uint256,string,uint8,string)", +"f544cf4f": "decayedPriceOfCard(uint256)", +"f545118b": "subdividendsOf(address)", +"f54575d6": "addAdvisor(address,uint256)", +"f54580cc": "card_blue_minamount()", +"f5459d6b": "INVESTOR1()", +"f5462105": "isFundedMax()", +"f546232d": "ComputeMyEggs(address)", +"f5465992": "totalTokenBalance(address)", +"f5470d7b": "itemType()", +"f5486860": "nextPrizeTime()", +"f548a578": "removeBurnupGame(address)", +"f549dd0e": "Vitamin()", +"f54a2ddc": "setRefundable(address,uint256)", +"f54b384d": "withdrawBuildingTokens(address)", +"f54cc2d0": "mintTokensForServices()", +"f54d28ae": "OPSPoolAddress()", +"f54d41db": "updateInventories(uint256,uint256[],uint16)", +"f54da8ee": "addWasteType(string)", +"f54dbf4c": "Emission(address,uint256)", +"f54dd191": "Flag()", +"f54dd974": "setResourceERC20Address(uint16,address)", +"f54e3977": "BTML()", +"f54e7a40": "offlineTransaction(address,uint256)", +"f550cb45": "rank(address,uint256)", +"f551924c": "testpidgeon()", +"f5519e8d": "WanChainToken()", +"f55206a5": "validatePurchase(address)", +"f5521bf1": "loanDuration()", +"f5529d3f": "ESIT()", +"f552b2ba": "threads(uint256)", +"f552d91b": "tokenToTokenTransferInput(uint256,uint256,uint256,uint256,address,address)", +"f5537ede": "transferToken(address,address,uint256)", +"f5539407": "getInvestorInforAddr(uint16)", +"f554567f": "getTeller(address)", +"f554e8cc": "officialHold()", +"f554e934": "TOKEN_COMPANY_OWNED()", +"f55523e7": "fiat_contract()", +"f5552b42": "wotDay(uint256)", +"f5556d78": "Vegas()", +"f555b815": "rate2()", +"f5562753": "getClaimAmountForBlock(uint256)", +"f5582870": "CENTS()", +"f559417c": "finalizebackup()", +"f559468c": "initiallyLockedAmount(address)", +"f5596659": "HoloWhitelist()", +"f5597e21": "addProperty(string,string,uint64,uint64,uint64)", +"f55ab987": "penalizeInactiveJuror(address,uint256,uint256[])", +"f55b23c0": "externalLeave()", +"f55b39a3": "PetCore()", +"f55b8fc9": "setraisedAmount(uint256)", +"f55bddcc": "NFTAuctionBase()", +"f55befee": "TOURNAMENT_TOKENS_PERCENT()", +"f55c9f60": "developerReserve()", +"f55ecf06": "setExchangeRate(uint256,uint256)", +"f55f41f9": "Version(string,address,address,address,address,address)", +"f560783d": "getLastProfit()", +"f560aa57": "setTokenPrices(uint256[],uint256[])", +"f560d415": "privateSalePrice()", +"f5610668": "currNumOfCards()", +"f56142b3": "burnPrivate(uint256,uint256,uint256)", +"f561e2f9": "refundTransactionFee(uint256)", +"f5620ed6": "addItemTo(address,uint256,uint256,uint256,string)", +"f562db76": "wct1()", +"f56311d7": "getMntpMigration(uint256)", +"f5632ab4": "receivedEth()", +"f563424e": "fetchBilateral(address,bytes32)", +"f564ae65": "getRemainingCount(uint32)", +"f564bb8c": "getNodeIdx(string)", +"f564dca9": "setUrls(string,string)", +"f564ea7e": "get_bank_data(address)", +"f5653a79": "_presentValue(uint256)", +"f56585de": "transferOtherTokens(address)", +"f56589d5": "PupToken()", +"f56613e4": "lockBetInfo()", +"f5663819": "minContributionETH()", +"f566c1b5": "_normalizeDecimals(uint256,uint256)", +"f5672f92": "garbageCollect()", +"f567a72a": "listMultipleItems(uint256[],uint256[],uint256,address)", +"f568006f": "generateBalanceHash(address,uint8,uint256)", +"f5681f9d": "Deposited(address,address,uint256,uint256)", +"f5685061": "startPreICOnow()", +"f56898fe": "getCompte_40()", +"f5689a80": "TOKEN_CREATED_MIN()", +"f5691b07": "_bidDkl(uint256,uint256)", +"f569626d": "sanTTTCost()", +"f569a2fc": "withdraw1(address)", +"f56a5176": "getMostRecentAuctionStart()", +"f56b8a46": "TEAM_BONUS_PERCENT()", +"f56c66b1": "parseInt128(string)", +"f56d7abe": "PaceCoin()", +"f56e0609": "WorldCup(bytes32,bytes32,bytes32)", +"f56e4cb1": "blockTokens()", +"f56e8421": "currentSquirrelOwner()", +"f56eba15": "SGEToken()", +"f56f516f": "isValid(bytes32[])", +"f5710cc5": "setInitialBalance(uint256)", +"f5716958": "updateSplits(uint256,uint256,uint256,uint256)", +"f571da7f": "confirmAssessor()", +"f5720769": "setDrawer(address)", +"f57213d8": "subsafe(uint256,uint256)", +"f57271cd": "LogEnded(bool)", +"f5727f5c": "chainLedger()", +"f572ae2e": "toggleInPlayJoining()", +"f573864f": "PrandexBountyToken()", +"f5738bcd": "setInstructions(string)", +"f5743c4c": "incrementNonce(address)", +"f574c691": "KCoinToken()", +"f5751524": "unfixTokenPriceInWei()", +"f575c810": "finishPrivateSaleAndStartPreSale(address,uint256,uint256,uint256)", +"f57688b6": "communityVesting4Years()", +"f576f722": "getCurrentTierInfo()", +"f577990d": "passoverEndTime()", +"f577a5d0": "publicTokens()", +"f578fd7c": "applyForToken()", +"f578fd85": "assertEq0(bytes,bytes)", +"f57a1ccc": "f4(uint256,uint256)", +"f57ac2df": "World2()", +"f57ad503": "resetRole(address)", +"f57ad6ea": "deposit_token(uint256)", +"f57ae7b9": "buildId2(address,address,address,uint256,bytes)", +"f57be85d": "ownerActivateToken()", +"f57d74d8": "blaze()", +"f57d76d5": "RestrictedShares(string,string,uint256,uint256)", +"f57db6e1": "signLoan(address)", +"f57e2368": "bonusAvailable()", +"f57e63e2": "eventEnded()", +"f57ee77b": "getRoundId()", +"f57fc26a": "lccxTeamTokensVesting()", +"f5804c35": "test_someTest()", +"f5811447": "createAuction()", +"f5812687": "distributeTokenFunds(address,address,uint256)", +"f5813085": "getTotalTokensByAddress(address)", +"f5818d94": "EtherModifierPandee()", +"f581ec95": "FIRST_VOLUME_EXTRA_BONUS()", +"f581f1ef": "setPicopsCertifier(address)", +"f5820ac6": "unPauseAllTransactions()", +"f5823b0b": "parseOrder(bytes,address,address)", +"f582d293": "buyEnabled()", +"f582fe70": "PundiXToken()", +"f58339c1": "_generateGuardianSale(uint256,uint256,uint256,uint256,uint256)", +"f5836761": "DGBLY()", +"f58431fd": "Citizen(address)", +"f584bf09": "Softcap()", +"f58589ff": "setAirdrop(uint256,uint256,uint256,uint256,uint256)", +"f58590e9": "ReturnChametz(address,uint256,uint256)", +"f5866066": "setStringValue(bytes32,string)", +"f5868e49": "Administrable(address)", +"f586c6d9": "getPoolAddress()", +"f586df65": "checkMembership(bytes32,bytes32,uint64,bytes)", +"f5877bdb": "maintaining()", +"f5878d40": "maxSCount()", +"f587c53f": "_generateGene(uint64,uint64,uint256,uint256)", +"f58951d1": "approve_reject_deleteCertificate(uint256)", +"f589cbbe": "addPick(uint256)", +"f58a1adb": "setup(uint256,uint256,uint256,address,uint256,uint256,bytes,address,address)", +"f58a535f": "phasePublicSale2_From()", +"f58adfe5": "CharityReservesSupply()", +"f58b4554": "userPayout()", +"f58bb0c9": "dealInitialCards()", +"f58c251c": "sentinel()", +"f58d3321": "usersCanUnFreeze(bool)", +"f58e2327": "foundationTokenHolder()", +"f58edbca": "ISBParentsCoin()", +"f58fc2f2": "LimorToken()", +"f58fef8e": "Destroy()", +"f590aacc": "preBuy()", +"f5923a6e": "withdrawEth(address,address,uint256)", +"f5933f66": "changeFlagArraySize(uint256)", +"f5938baf": "getRemainingBlocks()", +"f593efec": "briqcoin()", +"f594ba7b": "assignManagement(address)", +"f594f13f": "votedFor(address)", +"f595f1cc": "pendingFees(address,uint256)", +"f5963aa5": "isJson(string)", +"f5965d55": "windowOf(uint256)", +"f5967a2f": "holdPeriod()", +"f596d10a": "parseSignature(bytes)", +"f597a499": "UserDatabase(uint256)", +"f597d097": "streamerContractMaxAmount()", +"f597f97d": "fractionalBits(int256)", +"f59823cf": "Congress(uint256,uint256,int256)", +"f598e201": "finishDividend()", +"f5991a05": "sellCoins()", +"f59ae82c": "getTokenPurchase(address)", +"f59da238": "MBDCToken(uint256,string,string,uint8)", +"f59db647": "precommitmentAdjusted()", +"f59dfdfb": "feed(uint256)", +"f59e0894": "sendSecond(address,uint256)", +"f59e38b7": "balanceOfToken(address,address)", +"f59e754c": "setAuctionFee(uint256)", +"f59ed863": "privateSaleDate()", +"f59f5e65": "createWheelBetHash(uint256,uint256,uint256)", +"f59f99ee": "createNextGeneration()", +"f59faf9e": "GrainToken()", +"f5a0ea6c": "createMatch(uint256,uint256)", +"f5a1c96d": "nextFeesPerMillion()", +"f5a1f5b4": "setNewOwner(address)", +"f5a23083": "listMOT()", +"f5a23af0": "myColorIs()", +"f5a2d3c7": "DomainSale(address)", +"f5a30cee": "individualMaxCap()", +"f5a332f6": "endICO(uint256)", +"f5a486f3": "issueResolved(bytes32,string)", +"f5a5438e": "dist_airdrop(address,uint256)", +"f5a647aa": "sendTokensToSevenAddresses(address,address,address,address,address,address,address,uint256)", +"f5a79767": "getAmount(address)", +"f5a7ffeb": "dontPanic()", +"f5a8ea09": "viewClaimedThisPool()", +"f5a908f0": "getOraclePrice(string)", +"f5a91ef7": "getEmailAddressOwner(string)", +"f5a956d8": "swap(uint256[],uint256,uint256)", +"f5a98558": "restrictionRemoved()", +"f5a9e21f": "canUpdateCompanyPreferences(string,address)", +"f5aa0200": "makeClaim()", +"f5aa19b7": "reclaimUnclaimed()", +"f5aab219": "currentIcoRate()", +"f5ab16cc": "rewardTokens(address)", +"f5ab4c62": "participationEndTimestamp()", +"f5ab69c8": "thirdPlacePot()", +"f5ab865a": "tokensAirdrop()", +"f5ac0b6b": "BasketFactory(address,address,uint256)", +"f5ac481d": "leaveTeam(uint256,address,uint256,uint256)", +"f5ac6319": "_raised()", +"f5ac9db6": "tradeable()", +"f5ad9034": "TokenTranchePricing(uint256[])", +"f5adad57": "BdpControllerHelper(bytes8)", +"f5aec88c": "getUserTokenBalance(address)", +"f5af374b": "withdrawEth(address,uint256[],uint256[])", +"f5af4035": "sellTokensForEth(address,uint256)", +"f5af6289": "EAI_TokenERC20(uint256,string,string)", +"f5af6621": "getEscapeRequest(uint32)", +"f5af6de6": "firstStageEnd()", +"f5affc60": "claimHash(bytes32)", +"f5b01fd7": "TruCrowdSale(uint256,uint256,address,address,uint256,uint256)", +"f5b0f72d": "Ethername()", +"f5b12540": "STATE_NOT_STARTED()", +"f5b33d0a": "MicroDex()", +"f5b3beba": "OverAllPerSell()", +"f5b41aaa": "set_iconiq_token_amount(address,uint256)", +"f5b45714": "currentKing()", +"f5b490d5": "roundLockAmount()", +"f5b4f3c1": "WFC(string,string,uint8,uint256)", +"f5b53e17": "getInt256()", +"f5b53fc1": "checkMonsterAttack(uint16,uint8,uint8)", +"f5b56c56": "highestBindingBid()", +"f5b57a8d": "transferFeeDenum()", +"f5b5af16": "closePlayerGame(bytes32)", +"f5b5bfb9": "provideDividend(uint256)", +"f5b61230": "escapeHatchDestination()", +"f5b85ad8": "RoundToken()", +"f5b944eb": "ROLE_MANAGER()", +"f5b9644c": "PRE_ICO_RATE()", +"f5babff2": "convertBytesToBytes32(bytes)", +"f5bade66": "setDeposit(uint256)", +"f5bae6b6": "equal(int256,int256,string)", +"f5bb02b2": "ICODepositContract()", +"f5bb5aac": "TokenStore(uint256,address)", +"f5bbc6d5": "isArbiter(address)", +"f5bd48c4": "totalLotsByAddress(address)", +"f5bd4931": "transferFlower(address,uint256)", +"f5bd8f5f": "_isTrue(address)", +"f5bdeca1": "SetGasLimit(uint256)", +"f5be3193": "totalIssued()", +"f5bea782": "userWithdrawPendingTransactions()", +"f5bee4e6": "priceTokenToCoin()", +"f5bf6d63": "totalIssuerSupply()", +"f5bf7413": "close(address,address,uint256)", +"f5bf7e3d": "registerDINs(address,uint256)", +"f5c15237": "isPlatformManager(address)", +"f5c217da": "lastSaleTimestamp()", +"f5c233f1": "transferAndLock(address,uint256,uint256,uint256)", +"f5c256ca": "sendPrepaidERC20Tweet(uint256,string,string,uint256)", +"f5c3f206": "setApprovers(string,string,address[])", +"f5c4201f": "denyTransfer(address)", +"f5c454ca": "ProjectDescriptionUpdated(address,string,bytes32)", +"f5c476f9": "totalLockedTokens()", +"f5c4ceda": "SimpleConstructorArray(uint256[3],uint256[3])", +"f5c57382": "nameOf(address)", +"f5c5906e": "setBlockRoot(uint256,uint256,bytes32)", +"f5c5ad83": "decrementCounter()", +"f5c60309": "YuChainToken()", +"f5c6ca08": "sendTokens(uint256)", +"f5c6cd0a": "GlobexSciICO()", +"f5c6cf05": "changeTokenForSale(uint256)", +"f5c758c4": "getKycApproved(uint256)", +"f5c86d2a": "ledgerTransfer(address,address,uint256)", +"f5c87d20": "setAdminPayout(uint8)", +"f5c89f83": "StartMiningByIdArray(uint256[])", +"f5c8d71b": "forceMove(address,address,uint256)", +"f5c901db": "ck()", +"f5c91f5a": "init(address,uint256,uint256,uint256,uint256,uint256)", +"f5c972ac": "setUserInfo(address,uint256,uint256)", +"f5c98aff": "GreeterB(bytes)", +"f5c99ae9": "createToken(string,string,uint256,uint256,uint256,uint256)", +"f5c9d5f1": "refundPart(address)", +"f5ca6cd4": "TOKEN_SALE_ALLOCATION()", +"f5caccad": "gatherCollateral()", +"f5cb0daa": "queryWaitingTimeBuffer()", +"f5cb3dff": "getAddressFromData(bytes)", +"f5cb911d": "divideByNumber(uint256)", +"f5cbf6cc": "construtor(uint256)", +"f5cc4056": "BSMinting()", +"f5cce54d": "preSaleCoinCap()", +"f5ce0d5b": "onRemoval(string,uint256)", +"f5cf673b": "setClaimer(address,address)", +"f5d00ccf": "NewPatent(bytes32)", +"f5d05f7e": "foundationVestedPayment()", +"f5d09857": "createDungeon(uint256,uint256,uint256,uint256,uint256,address)", +"f5d09ff7": "bancorETHToken()", +"f5d17f10": "get_term_deposit_end_date()", +"f5d1d299": "setProviderTitle(bytes32)", +"f5d241d3": "update(uint80,address,uint32,uint32,uint32,uint256)", +"f5d36a57": "quorumVersion()", +"f5d3c79a": "setReinvest(bool)", +"f5d50f86": "balanceAsSupporter()", +"f5d5edc4": "deployService(bytes32,address)", +"f5d60a51": "accessPolicy()", +"f5d60acd": "EtherTakeAfterSoftcap()", +"f5d67a20": "currentCrowdsale()", +"f5d6fa14": "whichPrice(uint256)", +"f5d72a28": "setTakeRewardsPeriod(uint256)", +"f5d73261": "transferAnyTokens(address,uint256)", +"f5d78625": "getPersonalInfo(address)", +"f5d82b6b": "add(address,uint256)", +"f5d9356e": "newKrakenPriceTicker(string)", +"f5d97789": "changeBinaryAddress(address)", +"f5d9d3fd": "formated_data_url()", +"f5da16e9": "RECHToken()", +"f5da210c": "getClientData(address)", +"f5dabc58": "transferDistributePxl(address,uint256,bool,string)", +"f5db370f": "setSanityRates(address[],uint256[])", +"f5db8bc7": "depositedETH(address)", +"f5db9820": "firstTarget()", +"f5dd7650": "_computeTournamentBeneficiaryFee(uint256)", +"f5ddff92": "getReputationUpdateLogEntry(uint256)", +"f5df1d10": "getCollectibleTypeBalance(address,uint256,uint256)", +"f5df1f1d": "PresalePool(uint256,uint256,uint256,address[])", +"f5df6618": "newUser(string,string,string)", +"f5e1713e": "sale_state()", +"f5e27f5f": "emperor()", +"f5e3394f": "getUnicornGenByte(uint256,uint256,bytes1)", +"f5e33a9d": "createPot(string)", +"f5e3542b": "lookup()", +"f5e37d57": "_doTradeForEth(address,uint256,address,uint256)", +"f5e47f96": "getTicketsByAddress(address)", +"f5e493aa": "getCrowdsaleTierList(address,bytes32)", +"f5e53f2b": "register(bytes7)", +"f5e736ed": "tacoPoolTotal()", +"f5e7b8e3": "setScoringThreshold(uint256)", +"f5e7ce99": "canPerform(address,address,bytes4)", +"f5e7ef7a": "getCountCities()", +"f5e82554": "executeFill(address,address[5],uint256[8],uint256,uint8,bytes32,bytes32)", +"f5e8e8a9": "NASRToken()", +"f5e998f7": "FuckCoin()", +"f5ea15d3": "setContracts(address[16])", +"f5ea25f0": "setTokenAcceptanceRate(address,uint256)", +"f5eacece": "create2()", +"f5eb2313": "UrlHint()", +"f5eb42d1": "ExecLog(address,bytes32,uint256,bytes32,bytes32,uint256)", +"f5eb8890": "balanceUser(address)", +"f5ec2eed": "companyName()", +"f5ec8685": "claimAfter45days()", +"f5ece00a": "cryptoChallenge()", +"f5edc92f": "subwooferUSBToken()", +"f5ee3348": "setLive(bool)", +"f5eeaea3": "openChannel(address,uint256,uint8)", +"f5eed98d": "publisherCount()", +"f5ef98ea": "setDeathBlock(uint256)", +"f5efbd2d": "addModule(address,bytes,uint256,uint256)", +"f5f06acc": "airDropTokens()", +"f5f0f1e9": "firstBuyPrice()", +"f5f23b52": "makeTradable(uint8)", +"f5f2669b": "isAddressNotEmpty(address)", +"f5f2b62f": "nextSale()", +"f5f2de34": "ethReceived()", +"f5f3e58f": "preSale1()", +"f5f4123f": "_createAvatar(address,string,uint256)", +"f5f56b7a": "seasonRefAccounts(uint16)", +"f5f5ba72": "getContractName()", +"f5f5bb3b": "hashBid(address,uint256,address,bytes32,bytes32,uint256,uint256)", +"f5f5c622": "setDErc20(bytes32,address)", +"f5f5f123": "changeMaximumContributionForPublicPhase(uint256)", +"f5f6ea26": "EthOne()", +"f5f83a61": "transferManyLandToEstate(int256[],int256[],uint256)", +"f5fb17f2": "offerPieceForSaleByAddress(address,uint256)", +"f5fb1b74": "buyname(string)", +"f5fb22ca": "claimMobsterFunds()", +"f5fb9137": "donate_step()", +"f5fc20c6": "canUse(uint256)", +"f5fc32c8": "getAllot(bytes32,uint8)", +"f5fc3d47": "giftToken(address,address,uint256)", +"f5fc58c4": "totalLosts()", +"f5fd118e": "coordinatorSetAgreeForEmission(uint256)", +"f5fd1936": "countZTKChecks()", +"f5fd2108": "ethToBeDistributedSet()", +"f5fd9343": "Reco()", +"f5fda5da": "test_35_assertGasUsage1400Boards()", +"f5fda8cd": "testPublic()", +"f5ff3dc7": "setOraclizeWinnerTimeOffset(uint8)", +"f5ff5c76": "agent()", +"f5ff8977": "renameArtwork(uint256,string)", +"f60203c6": "createUser(uint256,uint64,uint64)", +"f602467e": "FundWithdrawal(address,uint256,bool)", +"f602c312": "erc20Store()", +"f602e325": "reserveAdress()", +"f6030aeb": "mint(address,uint256,int256)", +"f60381a1": "stra2cbor(string[])", +"f603fa92": "toggleAttachedEnforement(bool)", +"f60436cd": "reduceTime()", +"f604498a": "getClientSupply(address,uint256,uint256)", +"f604620a": "getTicketsAtAdress(address)", +"f604e6a6": "withdrawXNK(address)", +"f6054027": "IFLTSidechain()", +"f605ef93": "LongBought(address[2],uint256[5],uint8,bytes32[3],uint256)", +"f606b648": "transferTokensFromSpecialAddress(address,address,uint256)", +"f60744d5": "verifySignature(bytes32,uint256,uint256,uint8,bytes32,bytes32)", +"f607e88a": "_tokenPurchase()", +"f6089e12": "melt(uint256[],uint256[])", +"f60957c0": "HowLongIsDisputeStillRunning(uint256)", +"f609a1a1": "extraMintArray(address[])", +"f609bad6": "newDaoRulesProposal(uint256,uint256,uint256,uint256,uint256,bool,address,uint256)", +"f609bf42": "getSecondsTimeLocked(bytes4)", +"f60a696d": "migrateUsers(address[10])", +"f60b0714": "EscrowContract(address,address,uint256,uint256)", +"f60b9406": "vestingStartUnixTimestamp()", +"f60ba338": "setOpenTime(uint256)", +"f60bb720": "receiveFees()", +"f60ca60d": "project()", +"f60ca6b6": "distory()", +"f60cdcf6": "totalPlayers()", +"f60daa71": "dutchAuctionToCraft()", +"f60e28f7": "checkUserAndInitIfNecessary(address,address)", +"f60edb0e": "proposedController()", +"f60f1ccb": "useregister(address,string)", +"f60f49bb": "PayToken()", +"f6105254": "CryptoSagaArenaVer1(address,address,address,address,address,address,uint32,uint256,uint32,uint256,bool)", +"f610e52a": "acceptInvite(bytes)", +"f612a62d": "getSaleContractIsFinalised(address)", +"f613f7a0": "mintUsingSignature(uint256,uint8,bytes32,bytes32)", +"f6142990": "altDeposited(address)", +"f614fd72": "assertEq24(bytes24,bytes24)", +"f6150d17": "payedAmount()", +"f6151ff6": "transferTokenTo()", +"f6153ccd": "totalDeposit()", +"f615e369": "selectDeliverer(uint256)", +"f615ed54": "subSeconds(uint256,uint256)", +"f616b7b7": "report(string)", +"f616ce3c": "candy()", +"f616f29f": "transferEthFeeAndRefund(uint256,uint256,uint256,address)", +"f6174b90": "transferCheques(address,address,uint256,uint256)", +"f617642b": "getlevellen(uint256)", +"f617a0e9": "BoSenCoin_Test(uint256,string,uint8,string)", +"f6187006": "crowdSaleIsRunning()", +"f618c39f": "PartiallyForgived(address,address,uint256)", +"f619304a": "getSellOrdersBlackMarket()", +"f61a3e2b": "roundWithdraw(uint256)", +"f61a7f6f": "fixSaleCompleted()", +"f61ac3a4": "checkForReceivedTokens()", +"f61adfdd": "UnitedfansToken(address)", +"f61b7483": "M5Logic()", +"f61b9aed": "transferFrom(address,address,uint256,bool,uint256)", +"f61c266b": "getExpiry()", +"f61c6c4b": "LobsterFarm()", +"f61ca773": "transferWithPurpose(address,uint256,bytes)", +"f61ca87a": "setUserValue(bytes20,uint256,uint256)", +"f61cd7de": "callerTokenAmountAtBlock(uint256)", +"f61d9afc": "Errors()", +"f61eab7a": "getExtension(uint256)", +"f61ed985": "Kill(uint256)", +"f61f019d": "GitBitToken()", +"f61f35dd": "FOG()", +"f61f54c2": "SendEtherToFund(uint256)", +"f61ff377": "AccountFilledWithBonus(address,uint256,int256)", +"f6205042": "storeClaimSeed()", +"f622a105": "createDApp(bytes32,uint32)", +"f622cc82": "declareWinningOutcome(uint8)", +"f6232556": "Security_GetNumberOfAttemptsToConnectBankAccountToANewOwnerAddress()", +"f6233016": "DomenoToken()", +"f623d7a7": "TrustlessTransactions_Log(uint256)", +"f625ca7d": "lengthOf_addressAndDataPattern_to_voteRulesHash(address,address)", +"f625ee28": "startMasterCopyCountdown(address)", +"f625f472": "MultiownedControlled(address[],uint256,address)", +"f6261a0f": "_isValidWithdrawLimits(uint256,uint256,uint256)", +"f62732b8": "index(address,address[])", +"f627fe6c": "returnSomething()", +"f6281a9b": "getTierWhitelist(uint256)", +"f62847f4": "TerrionFund()", +"f6288422": "commission_system()", +"f628e8e8": "startDonations()", +"f62a92fa": "testRevertTx()", +"f62bc2dc": "ICTA()", +"f62cce34": "_clearRecordHierarchy(uint256,bytes32[],bytes32)", +"f62cec27": "setStartPreICO(uint256)", +"f62de0c3": "weiPerUSD()", +"f62e037c": "BETTING_CLOSES()", +"f62eded9": "buyStar(uint256,uint256)", +"f62ee1af": "burnFrom(address,uint32)", +"f62eec09": "rejectLastDeliverable(bytes32)", +"f62f47ab": "UDF_PORTION()", +"f62f9dbb": "tokenRatios(uint256)", +"f63051ff": "FXTOKEN(address,uint256)", +"f630a468": "setAtomIsRent(uint256,uint128)", +"f630e0f5": "submitTransaction(address,uint256,bytes,bytes,bytes,uint256)", +"f6310813": "transferDoc(uint256,address,address)", +"f631345b": "setlargeBonusStopTime(uint256)", +"f6326fb3": "depositETH()", +"f633adc1": "getRegister(int256,string)", +"f6340be4": "updateProvision(address,uint32,uint256,uint256)", +"f634bd29": "sec_addr()", +"f635052f": "colorPrice()", +"f635d160": "setPOOL_edit_20(string)", +"f635f50c": "minedTokenStartTime()", +"f6360d37": "requestDiploma(uint256)", +"f6366b9f": "OwnerTokensAllocated(uint256)", +"f6368f8a": "transfer(address,uint256,bytes,string)", +"f636931e": "PineapplePoints()", +"f6373296": "applySettings(uint256,uint256,uint256,uint256)", +"f637b7da": "collectedWei()", +"f637d950": "getAssetInfo(uint256)", +"f63841e4": "featurePrice()", +"f6384cb8": "sendReferallFundBalance(address,uint256)", +"f63850d0": "GanaTokenPublicSale(address,address,address,uint256,uint256)", +"f639365d": "testSetGet()", +"f63a43c0": "TokensPurchased(address,uint16,uint256,uint256,uint256,uint256,uint256)", +"f63a5d22": "divideDecimalRoundPrecise(uint256,uint256)", +"f63b1f7c": "GoldenLightCoin(uint256,string,uint8,string)", +"f63c2659": "PriceCalculator(uint256)", +"f63c533c": "Cost()", +"f63c5532": "incrementStat(uint256,uint256)", +"f63cb8a3": "requireTokenFuel(address[])", +"f63da25b": "Emailer()", +"f63df2e9": "createStandardToken(address,uint256)", +"f63ef744": "sendCharityETH(bytes)", +"f63f0e62": "turnOffCanUpdateNextGameInitalMinBetSize()", +"f640b81e": "test_oneInvalidEqBytes32Message()", +"f640d508": "transferToken(address,uint256,address)", +"f6413e46": "getFaucetAmountValue()", +"f6418b0b": "buyLandForEth()", +"f641d753": "changeElementName(uint256,string)", +"f6420e15": "tc()", +"f6432b8c": "publishLawyersInAttendance(string)", +"f6436a7c": "BONUS_ICO_PERIOD_TWO()", +"f643cf3d": "NEToken(address,uint256,uint256,uint256)", +"f64402c4": "setVicepresidenteDeMesa(bytes32)", +"f6444bcc": "isDeploying()", +"f6446614": "withDrawToPoolOwner(uint256)", +"f6448391": "getAllERC20(uint256)", +"f644c926": "SarmayehaaToken()", +"f6454620": "add_certifications(string,string)", +"f645496e": "giveawayFee()", +"f645835b": "beneficiaryAddresses(address)", +"f6458c6a": "toZ1(uint256[3],uint256)", +"f6460964": "teamKeepingPerEpoch()", +"f64623f1": "getBalanceB(bytes)", +"f646286b": "getPlayerShipOwnerById(uint64)", +"f6469342": "_setPackedBlockNumber(bytes32,uint256)", +"f64820f9": "addAttendant(string)", +"f6486cad": "burnReserveFees(address)", +"f6487e4e": "rejectCampaign(address,string)", +"f648f20b": "agencyWallet()", +"f64ab21a": "getOnMintAmountValue(int256)", +"f64b5c16": "distDay()", +"f64bfaba": "getBuyers()", +"f64c08b1": "onThrone()", +"f64ccca6": "payToken(address,address,uint256,uint256)", +"f64cd26b": "gcmp(uint256,uint256)", +"f64e167e": "getTextCount()", +"f64efacb": "icoHardCapInWei()", +"f64fca2e": "getNodeId(bytes)", +"f64fe563": "asyncSend(address,uint256,uint256)", +"f64ffde4": "getAccountPendingValue(address)", +"f6503662": "safeApprove(address,uint256,uint256)", +"f65045df": "totalClosedBID()", +"f6508be6": "tokensPerWei(uint256)", +"f651bf44": "move_to(uint16)", +"f652076b": "_getTokensAmount(uint256,uint256)", +"f652badb": "bitSSAToken()", +"f653279c": "TOKENS_FOUNDERS()", +"f653d286": "toggleTokenSaleOnHold()", +"f6560449": "evaluateProposalMetricEnd(uint256)", +"f65625ae": "changeWinnerPrizeMoneyForRaz(uint256,uint256)", +"f6577774": "BonusCrowdsaleImpl(uint256,uint256,uint256,address)", +"f6585116": "bytesFunc(bytes)", +"f658b1d5": "calculateContribution(uint256)", +"f659a45f": "airdropTokens(address,uint256)", +"f65bed0d": "initNewGame(uint8[16])", +"f65bffc3": "checkDividend(address)", +"f65c4d42": "Participate(uint256)", +"f65d1488": "setMarketingProfitAddress(address)", +"f65d226f": "getTotalBetAmount(bytes32,bytes32)", +"f65d6d4f": "MAX_MINT_NUMBER()", +"f65e2761": "RandomNumberGuessed(uint256,address)", +"f65e8d4d": "potMembers()", +"f65f5eeb": "choose(bytes32,bool)", +"f6618bab": "getBuyRequestsLength()", +"f661b886": "testCanTransfer()", +"f661e767": "villainIndexToApproved(uint256)", +"f6621121": "setSlammerTime(address)", +"f6623552": "getWalletBonuses(address)", +"f6626856": "LTT()", +"f662a12a": "oraclize_randomDS_proofVerify__returnCode(bytes32,string,bytes)", +"f662b881": "commitmentOf(address)", +"f662f291": "getInit(address,address)", +"f66302a2": "releaseMe(uint256)", +"f6631c64": "PPBC_Ether_Claim()", +"f6644c5a": "STARTING_FAIRY()", +"f6648d4c": "publishMixerType(bytes32)", +"f66597c2": "listTrophy(uint256,uint256,uint256,uint256)", +"f665a541": "coinsAdded(address)", +"f6660246": "fundOrderInternal(address,uint256)", +"f666323e": "UUIDProvider()", +"f669052a": "maxTokensToMint()", +"f66a79a0": "secondaryWallet()", +"f66afcac": "isTheAO(address,address,address)", +"f66b48da": "getHorseData(uint256)", +"f66bf229": "minBuyAmount()", +"f66c3af1": "getAddTokenApproveSignatures()", +"f66c6691": "shortTimeLock()", +"f66c75e5": "refund(bytes20,address)", +"f66cce0e": "adjustKPIs(uint256,uint256)", +"f66d0076": "getNumberOfCE()", +"f66d1f65": "releaseToEarlyInvestors(address,uint256)", +"f66d278e": "AgriChainDescriptionInt()", +"f66d685a": "lockInsolventTransfers()", +"f66e86bb": "withdrawGasPayback()", +"f66f0bd9": "MingYuanToken(uint256,string,uint8,string)", +"f66f2449": "THANKSTEST4()", +"f66f640e": "pregnantZodiacs()", +"f66f83f6": "latestSeriesForUser()", +"f67028be": "trade(uint256,uint256,bool,bool)", +"f67187ac": "lookup(string)", +"f671cae4": "setIcoThirdWeekRate(uint256)", +"f671f5b3": "deleteEntireGlofile()", +"f6724a55": "totalAmountInvested()", +"f6729bf2": "canChangeLocked()", +"f672c1aa": "totalBountyCount()", +"f672e4d8": "changeAdminUser(address)", +"f6731d62": "intCallWithArray(int256,uint8[4])", +"f673745a": "edoPerWei_()", +"f674cfe5": "VOLUME_60()", +"f674d799": "removeManyFromWhitelist(address[])", +"f67501f7": "changePet(uint256,uint256,uint256,uint256)", +"f6757cff": "getEmployeeInfo(uint256)", +"f6761151": "Withdraw(address)", +"f676d539": "get_dati_lotto(bytes)", +"f6774660": "calculateNumDIDToIssue(uint256,uint256)", +"f677cf0d": "isDistributed()", +"f678142a": "ethLandSaleOpen()", +"f6783518": "KYCToken()", +"f678462f": "termsAndConditions()", +"f6785de7": "newPayOutPercentageIsSet(uint256)", +"f678cf02": "setRelation(uint8,address)", +"f6791858": "tgeStartTime()", +"f679791d": "playerRoll(uint256,uint256,address)", +"f67a1d37": "BlockChainChallenge()", +"f67a7782": "periodOne()", +"f67a81ea": "Bigba()", +"f67abd87": "entryDetails(uint256)", +"f67b3047": "setItemActive(address,address,string,bool)", +"f67d5a8d": "sendDividendsWithRefBonus(address,uint256,uint256)", +"f67e3d0d": "howManyShips()", +"f67e8db2": "getEthToTokenOrderList()", +"f67f83a8": "updateFileds(uint256,uint256)", +"f67ff0af": "_llTransferFrom(address,address,address,uint256)", +"f68009b9": "getRoundBetAmount(uint256,uint256,uint256)", +"f68016b7": "gasLimit()", +"f68036f0": "FaucetManager()", +"f6805019": "addMeeting(string,uint256,uint256,uint256,uint256,uint256)", +"f6806074": "withdrawBonds(uint256)", +"f680b106": "RateEth()", +"f6814165": "castToInt(uint256)", +"f681f6e7": "capitalRaised()", +"f68297f3": "emergy_withdraw(address)", +"f6832c4a": "DO()", +"f683b247": "openSecret(bytes32,bytes32,string)", +"f68445dd": "myContract2()", +"f685e618": "_crownUnFreeze(uint256)", +"f685f942": "ZNCoin()", +"f685f9ad": "Moac()", +"f6860955": "emitAborted()", +"f686640b": "getCrabsOfOwner(address)", +"f686f019": "getCompte_9()", +"f686fa10": "verifyBBODocument(bytes,bytes)", +"f6879623": "addBountyReward(uint256)", +"f688bb2b": "setAirDrop(uint256,uint256,uint256,uint256)", +"f68975a9": "Total_Savers()", +"f68abb25": "approveToFight(uint256,uint256)", +"f68c021b": "EtherXeum()", +"f68c5b6a": "equalBytes32ToBytes(bytes32,bytes)", +"f68ce40b": "turtlemasterReq()", +"f68da9a0": "AthenaLabsICO(uint256,uint256[7],uint256,address,address[3])", +"f68dcd2b": "MHTHolders(uint256)", +"f68e63e3": "PRICE_MUL()", +"f68f1a0c": "recoverETH_SendbyMistake()", +"f68f8e42": "dataSourceGetGroupResult(uint256)", +"f6903c9c": "processEndOfYear(uint256)", +"f691b30b": "lockReleaseDate6Month()", +"f691e362": "EtherDOGEICO()", +"f692715c": "getGameResult(uint64)", +"f6928070": "numberOfGames()", +"f6933c7d": "isICOActive()", +"f693de1d": "signUpForTournament(uint32[])", +"f694211c": "Composed(uint256,address,uint256[5],uint256[5],string,string)", +"f6946940": "jack_pot()", +"f694b761": "createPool(string,address,uint256,uint256,uint256,uint256,uint256,uint256)", +"f694c4be": "NSEToken()", +"f6950d5f": "LIFEWORLD()", +"f6951038": "testCreateWithParentsForeign1()", +"f696c4ed": "fightAgon(uint64,uint64,uint256,uint256)", +"f6973532": "setAddOwnerRequest(address)", +"f6978685": "HashnodeTestCoin_new()", +"f697a0ed": "ppb(uint256,uint256)", +"f697ddb2": "firstAddress()", +"f69871e9": "WithConstructorArguments(uint256,bytes32)", +"f6988b79": "getDeveloperReservedLockInfo(uint256)", +"f698bceb": "getMintable()", +"f698da25": "domainSeparator()", +"f698e626": "WrapReadTokenData()", +"f699ad94": "setupFundingInfo(uint256,uint256)", +"f69a3c7b": "termsAndConditionsAreSigned(uint8,bytes32,bytes32)", +"f69a6982": "getVirtualTradesSummed(bytes32,uint256)", +"f69adce6": "dinoToken()", +"f69b9dd8": "safeWithdrawalTokens(uint256)", +"f69ba02c": "toB32(address,uint256)", +"f69bbf16": "setContributions(address,uint256,bool)", +"f69bf03b": "issuePartnerTokens(uint256)", +"f69c3b24": "registerEarlyContrib(address,uint256,bytes32)", +"f69d03c9": "ETCWalletCreated(address)", +"f69d5f0e": "icoPhases(uint256)", +"f69da37e": "toRefer()", +"f69e672e": "modifyContactManual(uint256,address,string)", +"f69e739e": "voteForCandidate(uint256,address,address)", +"f69e8384": "ceoRemoveCoo(address)", +"f69e98d7": "bite(uint256,uint256)", +"f69f1027": "PRESALE_WEI_GOAL()", +"f69f18a6": "timesIsOver(address)", +"f69f190c": "getWorkerStatus(address)", +"f69f64f7": "setInfo(uint256)", +"f69f7cab": "createTokenVault(uint32)", +"f69f8a5c": "approvedBuyerForIndex(uint256)", +"f6a01234": "TokenStorage(uint256,address)", +"f6a03ebf": "setStart(uint256)", +"f6a08ced": "OracleBitfinex()", +"f6a0be88": "NCRCoin()", +"f6a0e8a4": "DTCC_ILOW_7()", +"f6a10249": "TransferedEth(address,uint256)", +"f6a12b48": "MatchmakerPrevails(address,address,uint256,uint256,uint256)", +"f6a14bf7": "getNumberOfTokensForTheTeam()", +"f6a176ae": "fpMul(uint256,uint256)", +"f6a25127": "test_set_label()", +"f6a29b81": "EntropyTxDetails(address,string,uint256)", +"f6a30e3e": "minTicket()", +"f6a31715": "Revocation(address,uint256)", +"f6a31b9c": "transferManagerContract()", +"f6a33253": "changeRatio(uint256)", +"f6a3b1dd": "totalHardcap()", +"f6a3d24e": "exists(address)", +"f6a3e8c8": "lockInfo(address,uint64)", +"f6a46c2e": "settleBaseDeliveries()", +"f6a47e9a": "MongoliaNationalToken()", +"f6a5546a": "testBilibirdaToken()", +"f6a56bcf": "TianLianCoin(uint256,uint256)", +"f6a58558": "withdrawRemainingRtc()", +"f6a5b13e": "m_beneficiary()", +"f6a5fa30": "subShares(uint256)", +"f6a60d89": "resumeCrowdsale()", +"f6a74ed7": "removeController(address)", +"f6a84013": "totalMEATonsSupply()", +"f6a8aea7": "financialStrategy()", +"f6a92de9": "mycontracts(uint32,address)", +"f6a94ecb": "notifyOfArbitrationRequest(bytes32,address,uint256)", +"f6ab4243": "buyCastle(uint256,uint256,uint256)", +"f6ac54dd": "checkRegPeriod(bytes32)", +"f6ac6684": "getStringZero(uint256,uint256)", +"f6ad660b": "f3(uint256,uint256)", +"f6ada1ad": "rewardDaysLeft()", +"f6adab61": "delayOfICO1()", +"f6af18f5": "montly_pay()", +"f6af2718": "Quantastic()", +"f6afad47": "getDatabase(uint256)", +"f6afe805": "PRE_SALE_GMRP_TOKEN_CAP()", +"f6b09195": "preicoTokensPerEth()", +"f6b098f8": "nextAttackTimestamp()", +"f6b10854": "safeWithdrawAll()", +"f6b12f28": "gameOwner()", +"f6b15fe6": "getProfit(uint256,uint256)", +"f6b19c74": "drain(uint256)", +"f6b2b334": "upgradeTo(address,uint256)", +"f6b2c3b6": "VendTitle(uint256)", +"f6b39b3c": "ContractTotalMined()", +"f6b3e080": "roundOneRate()", +"f6b44d03": "validFactories()", +"f6b4c691": "getPendingCratesForUser(address)", +"f6b4dfb4": "contractAddress()", +"f6b5460f": "withdrawTrackOf(string)", +"f6b55a93": "hotWalletAddress()", +"f6b63224": "_getHpbNodesInterface()", +"f6b69697": "importPreviousWinners(uint256[],address[],uint256[])", +"f6b6daf1": "supportedTokens(uint256,uint256)", +"f6b70702": "LightComplexAirdrop()", +"f6b781a1": "Bolton()", +"f6b87500": "internalCalc(int256,int256)", +"f6b911bc": "burn(address,address,uint256)", +"f6b91944": "walletLists()", +"f6b924f8": "EventAuction(address,uint32,uint256,uint256,uint256,uint256)", +"f6b94cb4": "negotiate(uint32)", +"f6b9571a": "remove_owner(address)", +"f6b97131": "redemptionCount(address)", +"f6b9d05d": "bountyAllocation()", +"f6b9fd79": "STARTING_VINES()", +"f6ba13a5": "lastBlockNumberInRound()", +"f6ba3b6c": "addThing(string,string,bytes32,string)", +"f6bb3cc4": "deleteString(bytes32)", +"f6bd5893": "getGas(uint256)", +"f6be4776": "CannabizToken()", +"f6be71d1": "setDuration(uint256)", +"f6bea5dd": "LOCKEDiN()", +"f6bed059": "mixer()", +"f6bf0edd": "removecantonEmployee(address)", +"f6bf44b6": "getPoolStakeCount(uint256)", +"f6bffff8": "_createTombWithData(address,string)", +"f6c05625": "isValidNumber(uint8)", +"f6c0736b": "register_token(address,string)", +"f6c0d6a3": "_getChainLength(uint256)", +"f6c1acdf": "proofFor(string)", +"f6c1db4c": "GetChequeInfoByHash(uint256)", +"f6c28241": "BuyForFriend(address,address,uint256,uint256,uint256)", +"f6c3f6cd": "readUserPurchaseAtIndex(address,uint256)", +"f6c42713": "changeExpiredLimit(uint256)", +"f6c50d8b": "_ownersTokens()", +"f6c536a0": "sendBonusMany(address[],uint256[])", +"f6c5c80d": "cleanUp()", +"f6c6b731": "activeFirstRound()", +"f6c7430e": "JAPACHELOR()", +"f6c8f62e": "TransferBack(address,uint256,uint256)", +"f6c976d2": "test_1_assertGasUsage50Boards()", +"f6c98dd7": "WikiToken()", +"f6c99dad": "SETUP()", +"f6c9e930": "approveSender(address,address,bool,uint256,uint256)", +"f6ca75d8": "AkonCoin()", +"f6cabaa0": "burnedToDate()", +"f6cb86db": "whitelistTransferPrimordialTokenFrom(address,address,uint256)", +"f6cbcab0": "mintParts(int256,uint16,address)", +"f6cbea50": "ErrorReturningEth(address,uint256)", +"f6cc7d60": "setUnitDefenseIncreases(address,address,uint256,uint256,bool)", +"f6cdf281": "returnPtSafeMedium()", +"f6ceecc4": "TokenAdminContract(address,address[],uint256,uint256)", +"f6cf3a7d": "setDeveloperCut(uint256)", +"f6cf4570": "BoughtBlock(uint256,uint256,uint256,address,bytes32,bytes32,bytes32,bytes32)", +"f6cf5411": "startTimePreIco()", +"f6d024c6": "test_add(uint256,uint256)", +"f6d0bf2f": "GetContractBalance()", +"f6d2eb65": "_validateQualityConsensus(bytes32,bytes32)", +"f6d2ff9d": "setFreelancer(address,address,bool,string,uint256,uint8,uint256[],uint256[],string)", +"f6d339e4": "setAddress(bytes32,string,address)", +"f6d361cc": "ENTRY_FEE()", +"f6d3aebc": "get_salary()", +"f6d3d52d": "RatesChanged(address,uint32,uint32)", +"f6d3df65": "ownerStartsCrowdsale(uint256)", +"f6d4a265": "addLacks(uint16[],int64[],uint16[],int256,int64[],int256,int64[],uint8[])", +"f6d51638": "getRocIdToTokenId(uint256)", +"f6d5959b": "getActionStatus(uint256)", +"f6d68fca": "balanceWinPoolForThirdStage()", +"f6d6d5aa": "claimableToken()", +"f6d72acd": "setVoter(uint256,address,uint256)", +"f6d860d1": "approveUserKYCAndSetReferrer(address,address)", +"f6d89563": "airdropTotalCurrent()", +"f6d956df": "buy(uint8,uint256,uint256)", +"f6da1c0a": "getPriceSMPTokensPerWei()", +"f6dab356": "getGPSEndTime()", +"f6db2bac": "LOG_BetLost(address,uint256)", +"f6db6e50": "ponziToWei(uint256,uint256)", +"f6dbc252": "MOREToken()", +"f6dcb32c": "sendRewardTokens()", +"f6dd0187": "getSubject(uint256)", +"f6ddac74": "updateLocation(string,string)", +"f6ddcee5": "_generate_seed(uint256)", +"f6de4b81": "_doVote(address,uint256,uint256)", +"f6df0d50": "setFrozenAccountICO(bool)", +"f6df26d2": "kickOutCommunity(address,uint256)", +"f6dfafe1": "getShareHolder(uint256)", +"f6dfcff7": "getCooldownEndTime(uint40)", +"f6dfdad1": "getContractInformation()", +"f6e158b9": "getPickedAssetsAndFinalSeed(bytes32[],uint256[],uint256,uint256)", +"f6e212ea": "addCrystal(address,uint256)", +"f6e4641f": "purchaseFor(address)", +"f6e4a3dd": "tradeBalances(address,uint256,address,uint256,address,address,uint256)", +"f6e5c6a4": "totalWeiDonated()", +"f6e5e112": "startingEtherValue()", +"f6e5e298": "setScientificData(uint256,string)", +"f6e66c17": "totalAwards()", +"f6e681a9": "IkuraApproval(address,address,uint256)", +"f6e72981": "mintManyTo(address,string,uint256[],uint256[])", +"f6e7b785": "tdeStarted()", +"f6e7f69d": "test_insert_findWithHintPrevRemoved(int256)", +"f6e87f81": "SkillChainToken()", +"f6e898b0": "getIcedAddresses()", +"f6e9b85c": "doSetCanCreateGrants(address,bool)", +"f6ea1a3f": "CryptoSpin(address)", +"f6ea6252": "MINER_END_PRICE()", +"f6eb1337": "TokenBought(address,uint256,uint256,uint256,uint256)", +"f6eb13b3": "VietnamToken(uint256,string,uint8,string)", +"f6eb58de": "TransferManagerRevoked(address)", +"f6ebe41a": "defaultURIStart()", +"f6ec91d5": "developerAccount()", +"f6ecb9ee": "getprizemoney(address)", +"f6ecd724": "init(address,uint256,bytes32,uint256,uint256,uint256,uint256,bool,bool,address)", +"f6ecebf2": "LeagueAdministrator()", +"f6ed4b71": "getBasketDetails(address)", +"f6ed5342": "updateEscrow(uint64,uint256)", +"f6ed860e": "cancelGoldSellOrder()", +"f6ed8fe7": "grantsUnlock()", +"f6ee2d8d": "developersTokensWallet()", +"f6ee439f": "registerAssetComment(int256,string,string,uint256)", +"f6ee87b8": "_0xEtherToken()", +"f6ee8c59": "FirstBonus()", +"f6eeb89c": "addBid(string,string,uint256,address)", +"f6eeff1e": "punkNoLongerForSale(uint256)", +"f6ef97ff": "transferEthToWallet(uint256)", +"f6efcb7a": "setKeyData(bytes32,bytes32,bytes32)", +"f6f0fa8d": "teamReleased()", +"f6f10a26": "topUpWithEtherAndTokensForHolders(address,uint256)", +"f6f15ec9": "Larbaoui()", +"f6f17bba": "distributePreSoldShares()", +"f6f1995d": "onlyOwnerSetBountyWallet(address)", +"f6f3144d": "GetEthBalance(address)", +"f6f32cc4": "CICToken(string,string)", +"f6f36028": "Score()", +"f6f36641": "setV_R5(uint256)", +"f6f3973f": "fundIco()", +"f6f494c9": "getTermsContract(bytes32)", +"f6f505c4": "RaffleResult(uint256,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes32)", +"f6f54833": "HighEndTreasureChain()", +"f6f55ada": "TokenDistributed(address,uint256)", +"f6f5eb59": "transferableStartTime()", +"f6f5f567": "SMPAcquired(address,uint256,uint256)", +"f6f65f1a": "ASTRN_TOKEN()", +"f6f6edd4": "issuerDecimals()", +"f6f6fc74": "holderTeamTokens()", +"f6f7301e": "getById(int128)", +"f6f82ecb": "massChangeRegistrationStatusForSilverWhiteList(address[],bool)", +"f6f844e4": "setOp(bytes32)", +"f6f8ca07": "burnPXL(address,uint256)", +"f6f91737": "MAX_FREE_REFERRAL_PACKS()", +"f6f94a85": "ScaleFactor()", +"f6f94b47": "MiningPayout(address,uint256,uint256)", +"f6f96d91": "rateOfEther()", +"f6f98e34": "calcReleaseToken(address,uint256,uint256)", +"f6fb2c72": "buyGuardian(uint256,uint256,uint256)", +"f6fb4c9a": "_createFilm(string,address,uint256)", +"f6fb6ecf": "buildHouse()", +"f6fbc06a": "getWeiInvested(address,address)", +"f6fc8160": "addSeed(uint256)", +"f6fc96ad": "mainsale()", +"f6fcbee1": "getArrayUint(bytes32)", +"f6fcc14e": "agTechWallet()", +"f6fe3a01": "getUint256Min(int256)", +"f6fee732": "getAccountNote(address)", +"f7008156": "_haveEveryoneDeposited()", +"f700abf1": "addBudget(uint256,uint256)", +"f700ead9": "withdrawTokenMulti(address[],uint256[])", +"f702dd8a": "hkchain(uint256,string,string)", +"f703601e": "safe_add(uint256,uint256)", +"f703e773": "changeLifeExpectancy(uint256)", +"f7044bae": "getShareHolderCount()", +"f7048161": "checkRefundSignature(uint8,bytes,address)", +"f704b57a": "Bitconnect()", +"f704cb98": "addInvitation(address,address,uint256,address,string)", +"f70532fe": "getContractsOf(address,uint256)", +"f705fb87": "preICOend()", +"f7066121": "lastJackpotRound()", +"f706b476": "set_pauseUET(bool)", +"f706b814": "PARSEC_CREDIT_DECIMALS()", +"f7073490": "buyLink()", +"f7074919": "seenHereA()", +"f70794ea": "acceptHelp(uint256)", +"f707a308": "tierTwoMin()", +"f7086dd1": "SmigesToken()", +"f70904b4": "sale1Accepting()", +"f7095d9d": "updateTentativeWinningChildUniverse(bytes32)", +"f709dd51": "getTrademark()", +"f70ad595": "team_release_epoch()", +"f70b0a07": "setTrustedLateCloser(address,bool)", +"f70b13c5": "vestedTokens(uint64)", +"f70bbb9a": "getProposalExternalToken(bytes32,address)", +"f70bbdaf": "create(string,string,uint32,int256,string,address)", +"f70bdba7": "AdidasCoin()", +"f70c92de": "GOSHUIN()", +"f70ccc6e": "MaptPricing()", +"f70d7629": "_verifyOwnershipOfTokens(uint256,address,uint256)", +"f70dbb77": "isPresalePeriod()", +"f70dd1fe": "isAllocated6()", +"f70eabff": "addTeamAndAdvisorsAllocation(address,uint256)", +"f70f1821": "weeksFromEnd()", +"f70fa221": "getInitializeCashValue()", +"f71143ca": "isSaleLive()", +"f712d7ff": "testFailControllerTransferFromWithoutApproval()", +"f712f3e8": "implementsERC165Interface(address,bytes4)", +"f7138eaf": "createArtworkAuction(string,string,uint32)", +"f71441a5": "maxGoal()", +"f7146269": "testGetRandomDragon(uint256)", +"f7149220": "RNG()", +"f714a96e": "myCompany()", +"f714bf3d": "overflowOwner()", +"f714de9c": "MultiAccess()", +"f7160766": "getCompte_13()", +"f716171c": "createTrade(uint16,address,address,uint256,uint16,uint32)", +"f7164029": "upgradePrefixPreSignedFirst(uint8,bytes)", +"f716b7bf": "initInvesters()", +"f716c400": "getCrowdsaleUniqueBuyers()", +"f716fe43": "s37(bytes1)", +"f717442a": "previousPriceOf(uint256)", +"f717c310": "freezeTransfersSince(uint256,string)", +"f71868da": "Ethereumcapital()", +"f719254d": "cancelEthToTokenOrder(uint32)", +"f719e111": "useOraclize()", +"f719edfb": "firstPublish()", +"f71ad40e": "icoCapInWei()", +"f71b041c": "refundUser(bytes32,uint8,uint256,uint256)", +"f71b382c": "PIEXTREAM()", +"f71be837": "sign(address)", +"f71c60bd": "AMBASSADOR_FIVE()", +"f71cc3a5": "setUserStatus(address,uint256)", +"f71db383": "setArbitrationContractAddress(address)", +"f71dcb10": "CreatedMTP(address,uint256)", +"f71f7a25": "set(bytes32,bytes32)", +"f71f9c38": "SupplyChanged(uint256)", +"f72047ff": "_enableRefunds(address)", +"f72084b2": "foundationShare()", +"f720a453": "senderStake()", +"f720d563": "endAttack(address,bool,uint256,uint256,uint256,uint256,uint256,uint256[])", +"f720ef08": "setTokenAiNetworkToken(address)", +"f720f3d2": "tokensToEther(uint256,uint256)", +"f720f80b": "isMaster(address)", +"f7213db6": "orderFills(bytes32)", +"f72457af": "CertifierDb()", +"f7253071": "lastBlock_f0()", +"f725839f": "multiGenerate(address,address[],bytes)", +"f7260d3e": "receiver()", +"f7265042": "getUsersShipsIds()", +"f726af40": "MilestoneAmountRaised()", +"f726f715": "distributeFunds(uint256)", +"f727550e": "determineOutcome(uint256)", +"f72755fe": "getRequest(int256)", +"f72758e7": "getBracketDataMiddleTeamIds(uint8)", +"f72860ca": "modifyCustomer(string,string)", +"f7286888": "getPhaseNumber()", +"f72918ef": "addVoterVote(address)", +"f729688e": "_hasFlags(uint256,uint256)", +"f729b216": "moreTokenPerEtherForSeedRound()", +"f729cf0d": "getJob(bytes32)", +"f72a244d": "handleAllowance(string,uint256)", +"f72ae72c": "remainingTokenForSale()", +"f72b7ab9": "SbloccaConto(address)", +"f72c436f": "isHuman(address)", +"f72c75a5": "delegateVestingContractOwner(address)", +"f72d2c22": "BONUS_HI()", +"f72d3b15": "LamboPresale(uint256,uint256,uint256,address)", +"f72d50a9": "getPOOL_edit_4()", +"f72d53ba": "getNumMatches()", +"f72db5a3": "getLLV_edit_8()", +"f72e460a": "getBUUU(bytes32,uint256,uint256)", +"f72e695b": "setPoolCut(uint256)", +"f72f30e1": "Vesting(address)", +"f72f34db": "getDCountedBasicBallotsN(bytes32)", +"f72f6826": "ChangeEnd(uint256)", +"f72fc599": "_isThereAnOnGoingTapProposal()", +"f73052e8": "totalSoldCount()", +"f73079a6": "Auto(address,string)", +"f73089b9": "sale2Stopped()", +"f7309f29": "testLedgerUnderPayback()", +"f731c3bd": "lotteries(uint32)", +"f731d33c": "ApzCoin()", +"f7326286": "getARInvIndexTable()", +"f73294b8": "isValidatorAlreadyVoted(address,address)", +"f732eb66": "getPayoutDenominator()", +"f7342cd3": "SGF()", +"f7362152": "testThrow_testableContributionCaseExpectFailure()", +"f73770e7": "is_contract_paused()", +"f737f274": "getBuyDemand(uint256)", +"f73857cc": "deauthorizeAddress(address)", +"f738e5ca": "ownerTakeProfit()", +"f739a501": "snapShot(uint256,address)", +"f739ba2f": "picops_withdraw_excess()", +"f739c261": "legendary()", +"f739ed4c": "id_for_user_version(uint256,uint256)", +"f73a590c": "distributed_team()", +"f73b5541": "bulkWhitelist(address[])", +"f73baf62": "proxy_initialization()", +"f73c30e3": "getESOP()", +"f73c8dfd": "pvpQueueSize()", +"f73cc97c": "AddDOT(bytes)", +"f73d05db": "getSha()", +"f73d594c": "ERC20Base()", +"f73e05dd": "RetrieveCommissions()", +"f73f4ebc": "processBuyRequest(string,address,uint256,uint256,bool)", +"f74034df": "purchaseGen0Token(uint256)", +"f7407178": "get_banlance(address)", +"f740fbc9": "test_validPerc()", +"f74100e3": "getBits(bytes)", +"f741b602": "denyInvestor(address)", +"f742048b": "NlvToken(uint256,string,string)", +"f7426b62": "unlock(bytes32,bytes,uint256[],bytes,bytes,bytes,uint256[],bytes,bytes)", +"f74279b0": "totalEarning()", +"f7434ea9": "arbitrationCost(bytes)", +"f7437384": "NucleusVisionAllocation()", +"f743d334": "BancorBuy()", +"f744538d": "submitClearingPrice(address,bytes32,uint256)", +"f7448a31": "transferERC20(address,uint256)", +"f745630f": "update(uint256,string)", +"f746e28d": "fundSchool(uint256)", +"f746f365": "icoSoldCap()", +"f746fcdb": "presaleMade(string,uint256)", +"f74715cb": "ApproveERC20(address)", +"f7474d00": "payEther()", +"f74758ef": "safeSendCard(uint256,address)", +"f7477435": "TokensWorldCoin()", +"f747a5eb": "auctionBid(bytes32)", +"f747b744": "investFromWallet(uint256)", +"f749013e": "dateStartContract()", +"f7493c6a": "UpdatePremiumLimit(uint256,uint256)", +"f749bdc1": "BUYER_CHECK_STEP(bytes32)", +"f749d980": "LastExecuted()", +"f74a4e63": "transferToMint(uint256)", +"f74b766a": "createBet(uint256,uint256,uint256,bool,string)", +"f74c67b3": "getAddressKYCState(address)", +"f74c753f": "dontReturn()", +"f74d73ec": "issueSertificate(address,address)", +"f74deae3": "MultiSigWallet(address,string,uint256,uint256,string)", +"f74e8655": "setWhitelistAgent(address,bool)", +"f74e9bde": "pwr(uint256,uint256)", +"f74f4702": "changeRequiredMajor(uint256,bool,bytes)", +"f74fbb47": "StateChanged(bool)", +"f74fc598": "listSharesForSale(uint256,uint256)", +"f750aaa6": "withdrawEverything(address)", +"f75165c6": "right22(uint256)", +"f751758b": "getCurrentTokenPrice()", +"f751b26a": "unclaimedRoyalty()", +"f751c2f5": "MAC()", +"f751cd8f": "drop()", +"f752644c": "aelfCommunityMultisig()", +"f752fdc3": "wdivide(uint256,uint256)", +"f75316b4": "CobinhoodToken()", +"f754f766": "setBonus(uint8,uint8,uint8,uint8)", +"f7553098": "voteForOutcome(int256,uint256)", +"f755a76e": "createBoard(bytes32)", +"f755a98b": "setCrowdsaleEndBlock(uint256)", +"f75640b3": "crowdsaleCanceled()", +"f7566b49": "getBet(address)", +"f756b574": "getDropAmount()", +"f7572cf3": "newCampaign(address,uint256)", +"f757342c": "setRewardWasSent(address)", +"f758ff59": "SentDeveloperFee(uint256,uint256)", +"f759c480": "balanceOfrun(address)", +"f759e298": "getNumberOfBlocksPerKick()", +"f75a275b": "reservedLPT()", +"f75b8d3c": "getExpiredCratesForUser(address)", +"f75beacf": "HuaTuo()", +"f75ccbf0": "checkErrors(bytes32)", +"f75cf7d5": "IndecoinBounty()", +"f75d34bb": "ICOChanged(address)", +"f75e5d85": "selfDestruct(uint8,bytes32,bytes32)", +"f75eb240": "removeCallSpenderWhitelist(address)", +"f75ec528": "getSpaceInfo(uint256)", +"f75fa5e1": "xorReduce(bytes32[],uint256)", +"f75fb878": "preICOwei()", +"f75fdcaa": "cancelMilestone(uint256)", +"f760d2a2": "_incrementBlockStats(bytes16,uint8)", +"f761720a": "isEquiped(address,uint256)", +"f7618a40": "LIMIT_PROMO()", +"f7620435": "inquire_length(uint256)", +"f7627da2": "startUnlimitedSale(uint256)", +"f7628949": "B2ANDcoin()", +"f762e147": "addAsset(uint256,uint256,bytes)", +"f7637bec": "AccountReaderRemoved(address,address)", +"f764531d": "saleStartAtBlock()", +"f7647f36": "acceptPurchase(uint256,uint256)", +"f764e8a0": "partPos()", +"f764eb93": "LogDepositForDividend(uint256,uint256)", +"f765088f": "UpdateClientAddress(address)", +"f7654176": "split()", +"f76543e9": "hasOpening()", +"f7658e0f": "bonusDecreaseDay()", +"f765b6b1": "getEventInfo(bytes32)", +"f765e6e4": "return_pause()", +"f765ec6f": "lastBlock_a11Hash_uint256()", +"f766658d": "finalizePreIcoDate()", +"f76692a6": "dtTestCitySnapshot(address,uint256)", +"f766cd3e": "minInvestorCap()", +"f766eca7": "EtherDeltaApproveToken(address,uint256)", +"f7670b0c": "updateAuth(address,address,bool)", +"f7678fda": "setNewRegister(string,string,uint256)", +"f767fdcf": "KRYPT()", +"f767fe97": "MarketingAddr()", +"f7682aa5": "CURVE_CUTOFF_DURATION()", +"f7683b37": "ETTCE()", +"f768402a": "addProduct(address,string,string,uint256,string)", +"f768923a": "ignite()", +"f768f0f5": "setTrustValue(uint256,uint256)", +"f769aeb2": "getNextPoliceAssignment()", +"f76a24e6": "isTesting(uint16)", +"f76aae2f": "addVerifiedAddress(address)", +"f76b8c5e": "destinationOf(uint256)", +"f76bd7d1": "disableIssuance()", +"f76bf292": "StormToken(address)", +"f76bf757": "registerPage(bytes8,string,bytes32,string)", +"f76c0f4e": "updateFlipTokenRewardAmount(uint256)", +"f76c1ea5": "setReceiptLiablity(address,address)", +"f76c84eb": "manualChangeMonth(uint256)", +"f76c906b": "mCurrentSnapshotId()", +"f76ce123": "ERC20Template()", +"f76cf4bf": "BiToro()", +"f76d270e": "_setTokenBudget(address,uint256)", +"f76d3569": "auditorDelegate()", +"f76e8d29": "createSplitAgreement(address,address,address)", +"f76e9183": "VitalSkin()", +"f76f8d78": "SYMBOL()", +"f76f950e": "uint2str(uint256)", +"f76ffe7a": "startMintingData()", +"f77014da": "setGVE(uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32,uint32)", +"f7701b47": "downloadPriceInWei()", +"f7701ce8": "batchDistribute(address[],uint256)", +"f770a865": "FaradCryptoken()", +"f770c96f": "TDESupply()", +"f771bc6b": "minerSaleCount()", +"f772547b": "addressToSubscriptions(address,uint256)", +"f77267ea": "sendTokensToWorkers(uint8,uint8)", +"f77282ab": "finalizeAuction()", +"f773a3fb": "maxAssignedRequests()", +"f773ab80": "isPVPProvider()", +"f773c770": "TMSYToken(address,address)", +"f77404e5": "totalCommonWithdrawSupply()", +"f7745f88": "BudCoin()", +"f7746e36": "cars(uint256)", +"f7749e32": "rocketTimeUntilMoon(uint256)", +"f7750bd5": "startEthGetToken()", +"f7759c84": "maxTokenSupplyPreICO()", +"f7768580": "EventTransferAction(address,address,uint32,uint8)", +"f7770906": "buy_energy_core(address,uint32,uint32,uint64,uint32,uint64)", +"f778f32b": "addAlgo(uint256)", +"f7791010": "approveWriter(uint256,address)", +"f779a68d": "_deposit(address,address,uint256,bytes)", +"f779abf7": "DaoUpgraded(address)", +"f77a0923": "BitcoinProcessor(address)", +"f77a490d": "setMinPurchaseInWei(uint256)", +"f77aa0ad": "changeRedTeamAddress(address)", +"f77abd74": "getMatchPointsGroups(uint256,uint192)", +"f77b1856": "getAddTokenData()", +"f77b6f61": "getCRhashOfCRTokenId(address,uint256)", +"f77c1dc6": "unknownInvestors(uint256)", +"f77c4791": "controller()", +"f77c4ff9": "_firstRoundFight()", +"f77ca208": "managerIsPaused()", +"f77d62f0": "roundNumber_()", +"f77da6d5": "claimImmediateTokens(address)", +"f77dc854": "setHookableTokenAddress(address)", +"f77dff06": "joinPillarWithEarnings(uint256,uint8,uint256)", +"f77e4d8b": "test_YayIsNotOverSixtyPercent()", +"f77e8b83": "addPlayer(string)", +"f77f29b1": "getFeeWindow()", +"f77f2f2e": "setRewardStatus(address,bool)", +"f7800e69": "fundVault()", +"f780259e": "totalPrayers()", +"f780d867": "add_coin(string,string,address,uint8)", +"f7815fae": "getIntField2()", +"f782b2ea": "_confirm(address)", +"f784cae5": "Fetish()", +"f784dd61": "RealeaseTime()", +"f78525a1": "getFaucetByName(string)", +"f785ef72": "decimals_()", +"f785f03d": "setMigrating(bool)", +"f7860bb1": "addToBounty()", +"f7862ec2": "feeWindowBurn(address,uint256)", +"f7868884": "FOUNDERS_REWARD()", +"f786bb62": "Hiken(uint256,string,uint8,string)", +"f786becd": "MAJOR_VERSION()", +"f786cb82": "updateLemontokensRemainingToDrop()", +"f7870c5b": "Unlock(address,uint256,uint256)", +"f7888aec": "balanceOf(address,address)", +"f7892887": "phase_1_Time()", +"f7899d9e": "_buyCommonTTM(uint256,uint256,address,address)", +"f78a706a": "extraEmission(uint256)", +"f78a7a55": "createBurnRequest(address,uint256,string)", +"f78c6b54": "donations(bytes32,uint256)", +"f78cc9cf": "getTokenNextPrice(uint256)", +"f78d1c6a": "managePID(uint256)", +"f78d5494": "approveNewMintRequest()", +"f78dd0c1": "MovieCoin(uint256,uint256)", +"f78e4210": "test_oneValidEqAddress()", +"f78ed322": "regNameWOwner(string,address,address)", +"f78fa141": "_uintToSPDStr(uint256)", +"f78fadc6": "HXC()", +"f78fe0e9": "stand(uint8[],bytes32,uint8[])", +"f7903871": "RevTokens()", +"f7908f00": "verifyTransaction()", +"f79098f4": "getEditionLimits(uint256)", +"f793595a": "ThreeAT()", +"f7935969": "getRank(address,uint256)", +"f793fb64": "valInt()", +"f794062e": "isListed(address)", +"f79480f8": "lastBlock_f19Hash_uint256()", +"f794e7f2": "addDefenceParts(uint8[])", +"f794eb58": "getBonusRate()", +"f7963e8a": "testNewCounterValueIszero()", +"f7966eef": "changeReputation(address,int32)", +"f7969147": "currentBurned()", +"f796e06f": "calculateAndRegisterBonuses(uint256)", +"f79710fd": "extraTokens(address,address,uint256)", +"f797ac0e": "addSellingItem(uint256,uint256,uint256)", +"f797b617": "buyInvestorPack(uint256)", +"f797f7b6": "ETH_SIGN_TYPED_DATA_ARGHASH()", +"f7981bdd": "indSeed()", +"f7982243": "addRecipient(address,uint256)", +"f7987a03": "applySetMaxFeeWithdrawal()", +"f798abce": "teamLockAddr()", +"f79915ce": "kkTestICO91()", +"f7992d85": "eta()", +"f7996163": "joinSinceOf(uint256)", +"f79a2b84": "setFirstMile(address,address)", +"f79a3c25": "voteForDisable()", +"f79a97fc": "isSpentTxPaymentForMCW(bytes32)", +"f79acad3": "approveInvestorsInBulk(address[])", +"f79b22e0": "betOnATeam(uint256)", +"f79cfaea": "STLToken(string,string,uint8,uint256)", +"f79d0a8b": "callSomeFunctionViaInner1()", +"f79d6687": "removeTokenTime(uint256)", +"f79dcf8d": "earliest_buy_time()", +"f79e2b32": "inListAsOf(address,uint256)", +"f79ea94d": "VoipToken()", +"f79ebd7f": "tokenPriceDenom()", +"f79ed94b": "reserveAddress()", +"f79f528b": "getMinAuctionValue()", +"f79fc70d": "testBaseStoreTokenUsingDeployedContract()", +"f7a01b93": "StateMachine()", +"f7a06a88": "setSellerGuarantee(bool,uint256)", +"f7a0715f": "DoneToken()", +"f7a084c0": "AIRDROP_START_AT()", +"f7a0b2da": "updatePeloExtenstionContract(address)", +"f7a0ee1c": "maxtokens()", +"f7a0fa0a": "getShareDistribution(bytes)", +"f7a268c4": "freezeAccount(address,bool,bool)", +"f7a33598": "round(uint256[4])", +"f7a34573": "setAction(string,uint256)", +"f7a40e99": "moveERC721Tokens(address,address,uint256)", +"f7a4c45c": "calculateSaleReturn(uint256,uint256,uint8,uint256)", +"f7a6a046": "backOrenCoinOwner()", +"f7a7408b": "BuyLevel()", +"f7a7ec12": "fund_color(address,address,uint256,uint256,uint256)", +"f7a80784": "addProduct(string,uint8)", +"f7a8b34d": "planetName(uint256,uint256,uint256)", +"f7a919be": "createRegion(address[16],address,uint256,uint256,uint256,uint256)", +"f7a9a152": "count_users()", +"f7aa4e0e": "MithrilArrows()", +"f7aad9ed": "amendBalances(address[])", +"f7ab6ec6": "getOfferingByProposal(address,uint8)", +"f7abab9e": "tokenTotalSupply()", +"f7ac5611": "pushStatus(string,uint256,uint256,int8)", +"f7ac9c2e": "approvePreSignedHashing(address,address,uint256,uint256,uint256)", +"f7ad51ce": "cardsKeys()", +"f7ad7d8f": "getAllowedAmountByTeam()", +"f7ad906f": "contractTransfer(address,address,uint256)", +"f7adc48f": "test3(uint256)", +"f7ae24ae": "FundWithdrawal(address,uint256)", +"f7ae9421": "checkInvestorBalance(address)", +"f7aeea14": "removeGlobalConstraint(address,int256,address)", +"f7af21c9": "cancelCrowdsale()", +"f7af630b": "GetBindTokensAccountEvent(address,string)", +"f7b09d33": "giveReserveFund(address,uint256)", +"f7b14066": "setup(uint256,uint256,uint256,uint256,uint256,uint8,uint256,uint256,uint256,uint256)", +"f7b188a5": "unPause()", +"f7b22fa2": "getCurrentBeneficiaryCap()", +"f7b28073": "moleculartechnology()", +"f7b2a7be": "rewardAmount()", +"f7b3ae2f": "getSwapData(bytes32)", +"f7b42d08": "set_price_and_sell(uint256,uint256)", +"f7b43abf": "PRESALE_ICO_PORTION()", +"f7b47870": "setPublicOfferingHolder(address)", +"f7b4b087": "purchaseFirstTokens(uint256)", +"f7b4feec": "FaucetsToken()", +"f7b53431": "feesTaken()", +"f7b54065": "getInvestmentCurrentValue(address)", +"f7b578ee": "LiveCoin()", +"f7b6302e": "getInvestorTokensPurchase(address,uint256)", +"f7b75258": "withdrawlsEnabled()", +"f7b77a21": "MasternodeRegistered(address,uint256)", +"f7b822db": "setDEditor(bytes32,address,bool)", +"f7b89a3e": "getTotalCosts()", +"f7b8a600": "payAltCoin(bytes32,uint256,bytes)", +"f7b8eeb7": "getWhale(uint256)", +"f7b92f34": "CandidToken()", +"f7b95d35": "setRNGCallbackGas(uint256)", +"f7ba8896": "random(uint256,uint256,address)", +"f7bada53": "randomChoiceFromticketPool()", +"f7bbd1c1": "setMinAcceptEther(uint256)", +"f7bc2003": "releaseApprove(bytes32,uint8,bytes32,bytes32)", +"f7bc39bf": "owns(address)", +"f7bd2361": "LookAtBalance()", +"f7c0085b": "changeRandomOrgAPIKey(string)", +"f7c00e2f": "presaleWeiRaised()", +"f7c07442": "getReferrals(address[])", +"f7c0f4c6": "calculateRates()", +"f7c0fa4a": "requireCorrectReceipt(uint256)", +"f7c15df9": "_addExtraGasLimit()", +"f7c2b38c": "seconds_left()", +"f7c360e0": "fee_claimer()", +"f7c38052": "createBuyOrder(address,uint256,uint8[],address[5][],uint256[6][],uint256[],uint8[],bytes32[],bytes32[])", +"f7c3b210": "ENCKToken(uint256,string,uint8,string)", +"f7c3ee7a": "immortality()", +"f7c42ac8": "onChainIdentities(address)", +"f7c45aa4": "sld(address,uint256,string)", +"f7c46a73": "totalhospital()", +"f7c58b62": "weiPerEther()", +"f7c5f4b6": "getPreICOBonus()", +"f7c618c1": "rewardToken()", +"f7c68ffb": "isReleasedOnce()", +"f7c824f1": "CombineCard(uint32)", +"f7c8a091": "forPresale()", +"f7c8af48": "destroyItem(uint256)", +"f7c8d634": "tab(bytes32)", +"f7c9a7be": "drawTertiaryCWinners(uint256)", +"f7c9afa2": "onlyOwnerGetAdvWallet()", +"f7c9f1da": "setPonziPriceinWei(uint256)", +"f7c9f74a": "insert_contribution(address,uint256)", +"f7cab847": "getRule(bytes32)", +"f7cb5709": "CoinsLimitUnalterableInteger()", +"f7cb789a": "roundDuration()", +"f7cb8e66": "testIt()", +"f7cbcb8f": "withdrawCrowdsaleOsherCoins()", +"f7cc8c13": "MobSquads2()", +"f7cc8f40": "nbBackerWithMoreOrEqualTen()", +"f7cdf47c": "ETHEREUM()", +"f7ce25bb": "cardAndChecklistIdsForOwner(address)", +"f7ce4479": "setCommunityAddress(address)", +"f7cf0aa1": "updateMinBet(uint256)", +"f7cf9a1c": "Create(address,uint256,address,string)", +"f7cfd902": "removalBlackList(address)", +"f7d08eae": "distributeReserveSupply(uint256,address)", +"f7d0e04b": "setReputation(address)", +"f7d4c7e3": "getBracketDataFinals()", +"f7d518b5": "StartNewGame(string,string,string)", +"f7d5e485": "airdropToken(address[],uint256)", +"f7d6dbe5": "UpgradeProposals()", +"f7d7477b": "sumAmounts(uint256[])", +"f7d8417d": "MYRED(uint256,string,uint8,string)", +"f7d871df": "NucleusVisionAirDropTokensMinted(address,uint256)", +"f7d8c883": "breedWithAuto(uint256,uint256)", +"f7d9078e": "mintToSpecialFund(address)", +"f7d91cd4": "allocateReserveCompanyTokens()", +"f7d97577": "setPrice(uint256,uint256)", +"f7d978a2": "changeEntryFee(uint256)", +"f7d9a5ae": "BtcToken()", +"f7dadf7d": "setBurnFormula(address)", +"f7daef72": "getIndexBatchByUsername(bytes20[])", +"f7db7348": "preapprove(address,uint256,uint256,uint16)", +"f7dba1dc": "nullifyProduct(bytes32)", +"f7dc0455": "transferInitialAllocation(address,uint256)", +"f7dc909b": "createNewEvent(bytes32,string,string,uint256,string,string)", +"f7dd2e28": "BAG_TRANSFER_MINIMUM_AMOUNT_OF_BUYS()", +"f7ddfb4b": "meltingContract()", +"f7decfd1": "blacklistSwitch()", +"f7defe8c": "pickTheWinner()", +"f7df8f87": "vestingFounderAddress()", +"f7e0bc92": "COLOR_CUSTOM()", +"f7e0e743": "removeFirstAdvisorLock(address)", +"f7e23677": "catAttributes(uint256,uint256)", +"f7e23778": "PresaleEnd(uint256)", +"f7e28f8b": "weiRaisedAfterDiscountRounds()", +"f7e2ed66": "mOnTransfer(address,address,uint256)", +"f7e2ff00": "userWithdrawalStartTime()", +"f7e3c068": "PrestigeUp()", +"f7e3f00e": "PUBLIC_SALES_2_RATE()", +"f7e42647": "updateTrustRank(uint256)", +"f7e498f6": "verifyProof(bytes32,bytes,bytes,uint256,bytes32[])", +"f7e4a4a9": "hardCapPreSale()", +"f7e502cb": "HALToken()", +"f7e5951e": "_calcRemainReward()", +"f7e6af80": "_getOwner()", +"f7e74e65": "updateEmployee(uint256,uint256,string)", +"f7e77e44": "releaseMyVestedTokens()", +"f7e78e78": "verifyDeal(bytes32,bytes)", +"f7e7d6d8": "Noscam()", +"f7e80582": "enableAutoReinvest(uint256)", +"f7e83aee": "verify(bytes,bytes)", +"f7e95364": "updateGuMasks(uint256,uint256,uint256)", +"f7e98d15": "YELLOWLAMBO()", +"f7ea7a3d": "setTotalSupply(uint256)", +"f7ead092": "totalWinAmount()", +"f7eaec4f": "removeAgent(address,uint256)", +"f7eb4017": "findAddressByEndpoint(int256,string)", +"f7ebc39a": "isTransferAllowed(address,address,uint256)", +"f7ec221e": "authorizedToDraw()", +"f7ec2f35": "isContract()", +"f7ec7b51": "create_new_deal(uint32,uint256,uint32)", +"f7ecc428": "mintForInvestor(address,uint256)", +"f7ed6031": "getRoundDividendShare()", +"f7ed71d0": "left40(uint256)", +"f7edbbe6": "nextLapId()", +"f7ee503e": "editTicketPrice(uint256)", +"f7efd150": "create(address,address,string,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,address)", +"f7efd408": "votesIter(uint256)", +"f7f03516": "EasyHashingCoin()", +"f7f15304": "ARCD_FUND()", +"f7f1962e": "firstAuctionsInitialDuration()", +"f7f20cb3": "getTournaments()", +"f7f2210c": "openBetIndex()", +"f7f2741c": "AFTCoin()", +"f7f32916": "computeTokenWithBonus(uint256)", +"f7f33c54": "CriptaliaRewards()", +"f7f3815c": "setOperation(address)", +"f7f3ad16": "FixBet51()", +"f7f3da3b": "TestContractOne()", +"f7f4b9d4": "saleEnd1()", +"f7f50faa": "chunksAlreadyVested()", +"f7f5886e": "initializeS4FE(address)", +"f7f59411": "purchaseExistent(uint256)", +"f7f59b0f": "LogCustomerVerified(address,address,uint8)", +"f7f6d4da": "GreenEarthEconomyFund()", +"f7f74b56": "closeVoring()", +"f7f7915d": "setNextRoundFee(uint32)", +"f7f8303b": "product1_sell()", +"f7f87361": "DepositProxy(address,address)", +"f7f8aae9": "SudoEnabled(bool)", +"f7f9cb1c": "wrappedContract()", +"f7fad9fc": "UpdateState(uint256)", +"f7fb07b0": "getCurrentRate()", +"f7fb4801": "firstRoundWMEnd()", +"f7fc1bd6": "PROMETHEUS_SHIP_PRICE()", +"f7fc7783": "SanityPricing(address)", +"f7fc8a91": "haveShelf(string)", +"f7fca4f4": "setFeeFormula(address)", +"f7fca8d3": "ratePublicSale()", +"f7fce4da": "raffle_addr()", +"f7fd2e19": "TCoin()", +"f7fd3d01": "releaseCarbonDollar(uint256)", +"f7fe2e32": "newBurnableOpenPayment(address,uint256,uint256,string,string)", +"f7fe3477": "assertEq(bool,bool)", +"f7fe6f39": "fibo()", +"f7feeb31": "amendEntry(uint256,bytes32,bytes32,bytes32,bytes16,bytes1,bytes16,bytes32,bytes32)", +"f7ff50e2": "transaction_count()", +"f7ffaa5b": "ExTokeA()", +"f7ffbd85": "amountRemaining()", +"f7ffc366": "executeRulingB(uint256)", +"f80176ab": "GetEthereum(address,uint256)", +"f8018a79": "prepend(address,address)", +"f801fae9": "_fCancelDist()", +"f802075f": "requiredEndowment()", +"f8024d10": "getMemberAtIndex(uint256)", +"f80334ae": "selfDestruction()", +"f803bef0": "forceUpdateWinners(address[])", +"f803f97e": "transferAUTOtokens5(address[])", +"f8058bdf": "_CROWDSALE_PAUSED()", +"f805b300": "SALE_4WEEK_BONUS()", +"f8065ed6": "setStopMatchBetting()", +"f8083bab": "simulatedWithdrawal(address,address)", +"f8085c58": "updateStakerRanking(address)", +"f80979d6": "isPreSalePeriod(uint256)", +"f809c826": "managerToFunds(address)", +"f80af907": "roundThreeAmount()", +"f80b3564": "returnAddress(bytes32,uint8,bytes32[2])", +"f80b3cfa": "checkBetLowhigh(uint8)", +"f80bb2a7": "activateSubRound(uint256)", +"f80bbedc": "ethToToken(uint256,uint256)", +"f80d6e90": "GPHToken()", +"f80d9e58": "PVE_BATTLE()", +"f80db825": "AffiliateCoinMultiSigWallet()", +"f80dfdc2": "getTmpWriteTimestamp(bytes32)", +"f80e77d2": "updateETHNZD(uint256)", +"f80ea517": "getDealerInfo(string)", +"f80eba7c": "getTrapid(uint256,uint8)", +"f80f44f3": "right97(uint256)", +"f80f4ea8": "mintAdminApproval(address,address,uint256)", +"f80f5d4a": "EightteenToken()", +"f80f5dd5": "addWhitelist(address)", +"f80f96f6": "returnGanaBeforeSale(address)", +"f80fb7ae": "addCET4To(address,uint32,uint32)", +"f81126a7": "periodICOStage3()", +"f8115814": "TOKToken()", +"f8115891": "getSatTokensOwed(address)", +"f8125093": "set_devcon_map()", +"f8129cd2": "send(address,address[],uint256[])", +"f812f423": "advanceEndTime(uint256)", +"f8132b66": "lockCycle()", +"f813f027": "requestedTokens()", +"f813fcfa": "changeFooIntArrayDynamicSize(uint256)", +"f8140a7e": "standardFee()", +"f814530b": "_allocateETH(uint8,bool)", +"f8147d67": "callTest(uint256,address)", +"f81501f8": "smartContractPriceIsSet(uint256)", +"f815a842": "_getETHBalance()", +"f815e6ab": "kdtFundDeposit()", +"f816f0aa": "gameCancelled(uint256)", +"f8185a13": "getBatches(address)", +"f818d723": "transferPower(address)", +"f8193547": "transferAndExecute(address,uint256,string,string)", +"f81a1860": "killOnUnsupportedFork()", +"f81a95db": "setReferrerFee(uint256)", +"f81b1998": "StopTransferGuard(address[])", +"f81bfa3f": "killThisContract()", +"f81d0292": "setParentAddress(address,address)", +"f81d087d": "prepareLottery()", +"f81d29df": "GambangCoin()", +"f81dc03f": "QuizwinToken()", +"f81de228": "getInvestorPacksAvailable()", +"f81dee03": "set_koef(uint256)", +"f81e8775": "resolveAddress(address)", +"f81ed6ae": "updateStart(uint256)", +"f81f8101": "initializedTime()", +"f81f8bf6": "burnReputation(uint256,address,bytes32)", +"f81ff8e7": "CurrentCoinPrice()", +"f8201a32": "requestLoan(uint128,address,address,address,uint256,uint64,bytes)", +"f821a17c": "getVotingNetworkDetails()", +"f821c423": "sendAirdrops(address[],uint256[])", +"f822372e": "Lab51TestToken()", +"f8225a05": "_setTransferFeeAbs(uint256)", +"f8226dbf": "TC(uint256,string,string)", +"f822841e": "PropertySet(address,bytes32,bytes32)", +"f8228f14": "assignSpartansToBattle(uint256)", +"f8229eba": "addAuthByCode(string,string,string)", +"f8241d7e": "updateAddresses(bytes32[],address[])", +"f8242c32": "addChallenge(address)", +"f824384a": "addInvestorAtID(uint256)", +"f8247299": "getIudexScoreAll(address,address)", +"f8256121": "publicResolver()", +"f8264772": "getTokenss()", +"f828500d": "isValidMessageLength(string)", +"f828c3fa": "scheduleCall(address,bytes4,bytes32,uint256)", +"f828edbe": "excludeWallet(address,bool)", +"f829d1a0": "walletSplitPercentage()", +"f82a4707": "secondsBetweenMints()", +"f82a7496": "giveMeCDP(uint256)", +"f82ab2ec": "PRIVATE_SALE_PRICE()", +"f82b2c31": "confirmByC(uint256,string)", +"f82bffa0": "get_merkle_proof(uint256)", +"f82c09a3": "PresentToCEO()", +"f82c2301": "resignFromCommunity()", +"f82c50f1": "log(uint256)", +"f82de7b0": "mineBlocks(uint256)", +"f82e4a4f": "Cointum(address,address,address,uint256,uint256,uint256)", +"f82ec3e6": "Norm()", +"f82edc1b": "unSign(address,address)", +"f82f396f": "sha(string,string)", +"f82f7a4b": "startDepositExit(uint256,address,uint256)", +"f82fb363": "icoController(address)", +"f82fe152": "PLAYER_METADATA()", +"f83064c7": "transferMintship(address)", +"f830c325": "updateToken(string,string)", +"f830d489": "depositExit(uint256,bytes32,bytes,bytes)", +"f83186f5": "HoryouToken()", +"f831aee6": "kingdomCreationFeeInFinney()", +"f831e962": "getWebStats()", +"f831ebab": "freezeTokens(address,uint256,uint256)", +"f831fe32": "updateApp(string,address,uint256,bool)", +"f833061b": "RESELLING_LOCKUP_PERIOD()", +"f8333e0e": "Aramco()", +"f8339005": "getSaddle(uint256)", +"f833f984": "OSEToken()", +"f8341fca": "BezantToken(string)", +"f8347242": "betsNum()", +"f834db41": "getBeneficiaryManage()", +"f834e212": "setGamePrize(uint256,uint256)", +"f8351daf": "winningCard()", +"f8354a82": "nextArenaTime()", +"f835a686": "setSaleEnd()", +"f835eb1b": "New(string,uint256,uint256,string,string)", +"f83629e0": "EBLCreation(uint256,string,string)", +"f83761e5": "setBAU2(bytes32,address,uint256,uint256)", +"f837e7c1": "battleAdd(uint256)", +"f838b0e9": "get_allowance_expires(address,address)", +"f838ea1a": "setDefaultMaxJump()", +"f838f6dd": "AssignBurnFees(address,uint256)", +"f8392303": "changeTicketMag(uint256)", +"f839407b": "setRateRoundSeed(uint256)", +"f83944ab": "LogEggAcquisition(address,uint256)", +"f839686d": "STSTEST7()", +"f839dc62": "pauseWork(uint256)", +"f839eb1a": "Referral(uint256,address,address,address)", +"f83a4c8a": "claimBet(uint8,uint8)", +"f83a768d": "addDiceRoll(uint256,uint256)", +"f83b5dce": "ec()", +"f83c4f82": "enableCirculation()", +"f83c6f64": "MIATOKEN()", +"f83ce05d": "deauthorizeBurnRequester(address)", +"f83d08ba": "lock()", +"f83d14e6": "buySketch(uint256)", +"f83d69db": "intMin(int256)", +"f83d96c1": "InsuranceAgent()", +"f83e3f5a": "SetProjectName(string)", +"f83e5793": "caged()", +"f83e9a20": "lock_period()", +"f83eb5dc": "forcedRefund(address)", +"f83fcdea": "setPrice(uint256,uint256,address)", +"f84038b1": "getMinimumContribution()", +"f8407634": "checkFunderAccount(address,address)", +"f8408a8d": "Funding_Setting_cashback_time_start()", +"f843545c": "active_payable()", +"f843b1b6": "singleWithdraw()", +"f843d4ec": "setEthereumBalance(uint256,bool)", +"f843dad6": "phaseTwoEnd()", +"f843ea4d": "updatePhaseSupplyAndBalance(uint256)", +"f843ebb1": "runTests(address,address)", +"f844a9f4": "requestArbitration(bytes32,uint256,address,address)", +"f84501e0": "prosperaTokenAddress()", +"f84564f6": "RGTOKEN()", +"f845862f": "newUser(bytes32)", +"f8465534": "removeFromSendAllowed(address)", +"f8469646": "slice(address[],uint256,uint256)", +"f847b16d": "INAToken()", +"f848091a": "claimERC20(address,address,uint256)", +"f8482ca5": "Payroll()", +"f848d541": "withdrawLimit()", +"f84907d7": "tokens_backed(address)", +"f849acb8": "overrideLock(bool)", +"f84a0e74": "BSWCValueCirculateAssets()", +"f84a6519": "requiredDownPayment()", +"f84ad0fb": "ProvideWorkOrder(address,address,address,address,address,uint128)", +"f84af7f3": "isAssetIdOwnerOrApproved(address,uint256)", +"f84b2f51": "disqualified()", +"f84b624e": "ProjectCoin()", +"f84b903e": "distributed()", +"f84bcb11": "setEtherReceivers(address,address[])", +"f84ce165": "setEndStage1(uint256)", +"f84dcb1e": "CFToken()", +"f84ddf0b": "lastTokenId()", +"f84f30c4": "_isCorrectBuyin(uint256)", +"f84f420b": "getRandomNumber(address,uint256)", +"f84fce56": "isDraw()", +"f850a136": "get_lose_coefs()", +"f850a7a4": "_addUser(address,address)", +"f850b7f8": "ERC20YSLToken()", +"f851019a": "BONUS_50_100()", +"f8515cfc": "destroyFactory()", +"f8515eca": "Operable(address[])", +"f8516c6c": "groupPolicyInstance()", +"f851a440": "admin()", +"f8524236": "DeleteImage(uint256)", +"f852b976": "_updateState()", +"f853343d": "addStakeAD(uint256,address)", +"f8536b94": "participated(uint256,address)", +"f8538662": "signup(bytes32,bytes32)", +"f853ee49": "rateUSD()", +"f8542f5e": "getCopaCoreAddress()", +"f8548bea": "quarterFirst()", +"f8548e36": "transfer(uint256,address,uint256)", +"f854d74c": "withdrawCommunityTokens(address,uint256)", +"f856d605": "tokensPerEther()", +"f8570b01": "_newEpoch(uint256)", +"f85771b2": "removeManager(address,address)", +"f8579af8": "test_percPoints()", +"f8588593": "isSuperContract(address,address)", +"f85905ac": "testEqualityUint(int256)", +"f85a253f": "setTEx(address)", +"f85a3dea": "totalAmountOfEarlyPurchasesWithBonus()", +"f85aefba": "testBitsSetFailIndexOOB()", +"f85b2160": "recoverFailedLock()", +"f85c6b3b": "_safeGasCall(address,bytes)", +"f85cb0b5": "Start2()", +"f85cd33e": "timelockTokens()", +"f85d9cc7": "setReviveFee(uint256)", +"f85daa38": "authorityContractAddress()", +"f85e4854": "tokenIssuedPreSecondIco()", +"f85ef43b": "modifyPolicyAttribute(uint8,uint256,uint8)", +"f85f0972": "FoxicoPool(uint256,uint256,address)", +"f85f3b7f": "defaultIcoDeadline()", +"f85f8a3a": "BiTianToken()", +"f8605230": "getNewTeamPositionAndCheck(uint16,uint8,uint64)", +"f860a6d8": "withdrawlBalance()", +"f860e64a": "Lottery(uint256,uint256,uint256)", +"f8615d24": "getBio(address,bytes3)", +"f861d2bf": "MIRC()", +"f86282da": "doStateChanges()", +"f862d780": "addIn(address)", +"f862f6f4": "cap_nuru()", +"f86325ed": "BASE_PRICE()", +"f8635ece": "openSession()", +"f86418e5": "_privateSaleTransferFromOwner(address,uint256)", +"f864bc65": "lastBlock_a5Hash_uint256()", +"f864ca14": "withdrawToWallet(uint256)", +"f864e729": "getAvailableTokenForUser(address)", +"f8651d56": "Prether()", +"f868061e": "setICOExchangeRate(uint256)", +"f8688ddd": "setTargetFeePeriodDuration(uint256)", +"f869b11a": "declareVictor(uint256,uint256)", +"f869b3ff": "AdvisorsFund()", +"f86a3529": "totalStages()", +"f86a3eeb": "MyGaoguans()", +"f86a6334": "setCampaignStartDateById(bytes32,uint256)", +"f86abfd9": "mainSaleRateP4()", +"f86ae8b2": "TokenSaleStop()", +"f86b0669": "burner_addr()", +"f86b5ebc": "DANSSold()", +"f86c4354": "GovcTechnicalGases()", +"f86c8ed3": "blocksUntilNewPotentialWinner()", +"f86ccd41": "amountDeposited()", +"f86cd33d": "noThrowCall(address,bytes4)", +"f86da6ed": "checkTotalBets()", +"f86db133": "forwardWithRevert(address,uint256,bytes)", +"f86e898c": "hasMinCreatedOn(address,uint256,uint256)", +"f8702fe1": "calcFees(uint256,string,uint256)", +"f870849d": "GetBankerPrincipal(uint8)", +"f871cca9": "_check(uint8)", +"f871e0e1": "DutchAuction(address,address,address)", +"f8721a4e": "calcReturnValue(uint256,uint256)", +"f8721f1e": "nAlarms()", +"f8725493": "GCA1()", +"f872bec0": "sn()", +"f872c9dd": "Vote(address,string,uint256)", +"f872f047": "testControlMixItemStoreNotRegistered()", +"f8732d3e": "goodLuck(address,uint256)", +"f8737bc0": "nextUnlockTime()", +"f87394d6": "DonateEther()", +"f873d7e6": "initializeTrueUSD(uint256)", +"f8742a14": "hivePerUSD()", +"f87482e1": "changeMigrate(address)", +"f875c421": "delegateReferalTokens(address,uint88)", +"f876101c": "setConstantsContract(address)", +"f876250a": "getNumClonesInWild(uint256)", +"f876fe1a": "availableHavvens(address)", +"f8779524": "addNewGame(string,int8)", +"f87876c5": "resignFromMatch(uint256)", +"f8788382": "payService(uint256,uint32,string,uint64,uint64,uint64,uint64,uint64,uint64)", +"f8789e1a": "_createUnitHelper(uint256,address)", +"f878fcc2": "migrationAllowed()", +"f87aa82f": "_setBuyPrice(uint256)", +"f87aad3e": "SetAllLock(bool)", +"f87aba30": "placeBet(uint256,uint256,uint256,bool)", +"f87c77c0": "getVirtualChannel(bytes32)", +"f87d7236": "addCapFreeAddress(address)", +"f87e7446": "Houton()", +"f87eac7f": "lastBlock_v15()", +"f87f31c3": "mintMiniICOTokens(address,uint256)", +"f87f44b9": "setWebsite(string)", +"f87ffb74": "gameIdCntr()", +"f88001d4": "reopenSale()", +"f8801631": "getTotalDonateWEIInfo()", +"f8806544": "getBioLanguages(address)", +"f880f920": "calcMax()", +"f8811c36": "registerNewAccount(address)", +"f8811efd": "mintMonster(address,uint256)", +"f88218e0": "claimPheonix(address)", +"f8823353": "_isListed(address,address)", +"f88339a5": "CBOPToken(address)", +"f8833efd": "probabilities(uint256)", +"f88351d9": "getDividendsBalance(address)", +"f88371e8": "balancesLocked1Y()", +"f883dfb5": "initializeLevel()", +"f8840c38": "TopforceCoin(uint256,string,uint8,string)", +"f88489a6": "getBidIdsByToken(address)", +"f884e54a": "giveCat(bytes5,address)", +"f88573c8": "Administration()", +"f885eaf2": "returnAllowedTime()", +"f88607e4": "ICO_PRICE2()", +"f88649a1": "getLastWinner()", +"f8868778": "change(uint256[])", +"f886cbda": "reado()", +"f886e9b6": "removeRelation(address)", +"f8887cd3": "TransferToken(address,address,address,address,uint256)", +"f8895cc8": "schema()", +"f8896ea6": "Interim()", +"f8897945": "min()", +"f889ac54": "JP_sum()", +"f88a067f": "registerHotel(string)", +"f88a742b": "insertStage(uint8,uint256,uint256,uint256)", +"f88b07a3": "SoldToken()", +"f88b1f38": "balances6(uint256)", +"f88bf15a": "removeLiquidity(uint256,uint256,uint256,uint256)", +"f88bfe3e": "getCountStages()", +"f88cc87c": "decline(bytes32,bytes32)", +"f88cf827": "getVendorProducts(address,uint256,uint256,uint256,uint256,uint256,bool)", +"f88d2047": "cancelOrder(uint256,bool)", +"f88d6732": "dice(uint256)", +"f88d88e4": "address_book(bytes32)", +"f88e0b09": "getTransferValueValue()", +"f88e9fbf": "divide(uint256,uint256)", +"f88edaf2": "mMultiSigWallet()", +"f89005e7": "depositWithReference(string)", +"f8900ddd": "godAddress()", +"f89037a9": "TureTreasureChain()", +"f8907491": "isCollectionAllowed(bytes8,bytes8)", +"f890e286": "oracleOf(address)", +"f8910119": "AuctionStarted(uint256,uint256)", +"f8910241": "_getTokenAmountForBuyer(uint256,bool)", +"f892ee05": "subDevTwo()", +"f894d398": "withdraw_asset(uint32,address,uint256)", +"f894d957": "signedApproveCheck(address,address,uint256,uint256,uint256,bytes32,address)", +"f895436a": "setLotteryParameters(uint256,uint256,uint256,uint256,bool)", +"f8956a67": "getBonus(address,address,uint256)", +"f896503a": "getConfigAddress(bytes32)", +"f896680c": "testInitialEtherBalanceShouldBeZero()", +"f8975cd9": "ZanteCoin()", +"f8976385": "RokToken()", +"f897ae8c": "numEmptyIndexes()", +"f897c998": "lastSaleTime()", +"f897ebbc": "setDelegatedFromOperation()", +"f8981789": "setCompliance(address)", +"f8984677": "_calculateMinimumprice()", +"f898e574": "incentiveDistributionDate()", +"f898f8ab": "Escapable(address,address)", +"f8995981": "ABAS()", +"f899b607": "FxdCoin()", +"f899e9f3": "annihilateShares(address,uint256)", +"f89a053b": "setAccountFeeModifiers(address,uint256,uint256)", +"f89a5100": "RGP()", +"f89a77b1": "removeValidator(address,bool)", +"f89be593": "softcap()", +"f89ca001": "revealMove(bytes32,uint256,bytes32)", +"f89e4df3": "saleMilk(uint256,uint256)", +"f89e6512": "CMDCrowdsale()", +"f89ea906": "_refundExcess(address,uint256)", +"f89eae17": "testStop()", +"f89f0e44": "getMyDividendTokens()", +"f89f2a65": "addExchanger(address)", +"f89f3834": "getAccountChartDetailsByEntityId(address)", +"f89f74bf": "MATCHES_PER_ROUND()", +"f89f7cb3": "updateDrawPeriod(uint256)", +"f89fdabc": "TokenTransferContract(address,address)", +"f8a05d13": "transferLd(address,uint256,string)", +"f8a09cd0": "settlementDetails(uint64)", +"f8a0cdee": "addUserRewardPayouts(address,uint256)", +"f8a17d7f": "League(address,uint256)", +"f8a21631": "PrivateCoinSupply()", +"f8a321e1": "checkInvestorContribution(address)", +"f8a34b26": "presale(address,uint256)", +"f8a35b35": "maximumSubscription()", +"f8a39a6e": "test_twoTrueAssertNoMessage()", +"f8a3ce82": "resetSession()", +"f8a40b7d": "requestSetWithdrawalLimit(address,uint256,string)", +"f8a46568": "HashnodeProCoin()", +"f8a47213": "VnixNetwork()", +"f8a4cc33": "withdrawPoly(uint256)", +"f8a4e608": "verifiedKYCAddresses(address)", +"f8a5399a": "settleExtraToken(address)", +"f8a56efd": "balanceOfRaws(address)", +"f8a5a8dd": "getTranchesLength()", +"f8a6172e": "receiveToken(address,uint256,address,bytes)", +"f8a6c595": "constructor(address)", +"f8a6fca8": "confirmImperfectReception(uint256)", +"f8a777f5": "batchCreateInternalDrawings()", +"f8a8fd6d": "test()", +"f8a9972a": "selectWinner20()", +"f8a9c6ae": "golix()", +"f8aa0a59": "updatebalance()", +"f8aa836b": "THRESHOLD2()", +"f8aabbd9": "makeTJs(address)", +"f8ab02dd": "isRefAvailable(address)", +"f8ab745e": "validTransfer(uint256)", +"f8abb93d": "hasVotedOnUpgradePoll(uint8,address)", +"f8abe7f2": "testSandwichOrder(uint256,address)", +"f8ac6570": "tokensBoughtInEarlybird()", +"f8ad69a8": "HetherToken()", +"f8adb686": "earlyBackerSupplyRemaining()", +"f8adccdb": "doPartnerShares(uint256)", +"f8aed03a": "btcsPortionTotal()", +"f8af2514": "IsItConstantinople()", +"f8af56b7": "_finish()", +"f8af9e6f": "setAdv(uint256,string,string)", +"f8b096bb": "setupRegion(uint256,uint256,uint256[],bool,uint8[128])", +"f8b0c0b6": "getTransferStat()", +"f8b10464": "pause_PRIVATESALE()", +"f8b11853": "getGenerationStartAt(uint256)", +"f8b14500": "EmissionProvider(address,address,address,uint256,uint256,uint256,uint256)", +"f8b1db8f": "donationBoxes(bytes32)", +"f8b28c26": "getSecretByHash(bytes32)", +"f8b2cb4f": "getBalance(address)", +"f8b2e259": "lowCapWei()", +"f8b332ad": "onpayInstallment(uint256,address,uint256)", +"f8b367c1": "categoryCap(uint256)", +"f8b3d3b1": "receiveInitialFunds()", +"f8b42f78": "getOrderBookKeys(uint256)", +"f8b45b06": "totalsData()", +"f8b4ab7a": "updateTotalSupply(uint256,uint256)", +"f8b4cfc6": "lock(uint8,uint256)", +"f8b4e080": "changeRateOfToken(uint256)", +"f8b542c8": "_0xPeriheliaToken()", +"f8b608a1": "addTournamentContender(address,uint256[])", +"f8b71c64": "rewardTo(address,uint256)", +"f8b746dd": "BdpEntryPoint(address[16],bytes8)", +"f8b89dfb": "setStep(uint8)", +"f8b91abe": "renounceManager()", +"f8b991e8": "firstRewardPeriodEndBlock()", +"f8ba7317": "sealManualMigration()", +"f8ba8e6a": "getAllowanceAmount(address)", +"f8bb201c": "setCroupier(address)", +"f8bb801d": "getTxIds(uint256,uint256,bool,bool)", +"f8bb9160": "TIGER()", +"f8bbca99": "multivestBuy(address,uint256,uint256)", +"f8bc0505": "left76(uint256)", +"f8bc8548": "getPOOL_edit_31()", +"f8bd4498": "AMOUNT_BASETEAM()", +"f8bd526e": "setCoinageContract(address)", +"f8bd71c7": "unstop()", +"f8bdbb60": "assertEq10(bytes10,bytes10)", +"f8bdc610": "_preProcessProposal(bytes32)", +"f8bdc9dd": "get_shares()", +"f8bf77ae": "managedContracts(uint256,address)", +"f8bfb34c": "getBorderValue(uint256)", +"f8c1c186": "isSale()", +"f8c206b0": "killFaucet(address,address,string,address)", +"f8c25c48": "changeCreatorBalance(uint256)", +"f8c28ce0": "releaseOperation()", +"f8c32ccb": "APG()", +"f8c34050": "priceIncrease()", +"f8c3a293": "ADVISORS_AND_PARTNERS_PER_CENT()", +"f8c439dc": "ETH_EUR()", +"f8c46eff": "FinalizableToken(string,string,uint8,uint256)", +"f8c4892f": "transferProxy(address,address,uint256,uint256,uint8,bytes32,bytes32,string)", +"f8c4ab92": "getNewCumulativeAllowance()", +"f8c52125": "deriveMarketCreatorFeeAmount(uint256)", +"f8c587ac": "paper()", +"f8c5e217": "getSellRatio()", +"f8c64800": "signTwo()", +"f8c65bae": "Bgc(uint256,string,string)", +"f8c75351": "transferViaProxy(address,address,address,uint256)", +"f8c80d26": "privateCreation()", +"f8c8282b": "transfer_storage_ownership(address)", +"f8c8765e": "initialize(address,address,address,address)", +"f8c8de10": "stringToUint8(string)", +"f8c95160": "tokenEmission5(address,uint256,address,uint256,address,uint256,address,uint256,address,uint256)", +"f8ca3e22": "CustomCrowdsale(uint256,uint256,uint256,uint256,address,address)", +"f8ca9442": "getBalance_in_token()", +"f8cbd580": "freezeIndex(uint256)", +"f8cc1055": "transferCallership(address,uint256)", +"f8ccb027": "AdminTransferred(address,address)", +"f8ccbd38": "validPurchaseForManual()", +"f8ce3164": "accumulatedFee()", +"f8ce5894": "updatePrizePool(address)", +"f8cf0e1c": "unlockAddr(address)", +"f8d09593": "Kikicoin(uint256,string,string)", +"f8d1f5f0": "setProvider(uint8,address)", +"f8d29219": "fundingStartUnixTimestamp()", +"f8d29f8a": "hasProfilePicture(address,address)", +"f8d3277d": "removeFromWhitelist(address,address)", +"f8d3a26a": "QuasaCoinExchanger()", +"f8d3afa4": "numberOfTransactions()", +"f8d3e256": "publicLockEnd()", +"f8d420a1": "cancelGame(uint32)", +"f8d50542": "addToWhitelist(address[],uint256[])", +"f8d506e1": "TCNYCoin()", +"f8d578f0": "registerContribution(bytes32,address,uint256)", +"f8d599eb": "appendContribution(address,uint256)", +"f8d609b2": "assert_ex(bool)", +"f8d67506": "Shop(uint256,address)", +"f8d6b70a": "setAyantDroitEconomique_Compte_5(uint256)", +"f8d7f790": "COMMUNITY()", +"f8d86bbc": "setNewEndtime(address,uint256,uint256,uint256)", +"f8d93136": "Savings(uint256,uint256)", +"f8d95520": "extUnlockNinja(uint256,uint16)", +"f8d970b6": "checkTemplateRequirements(bytes32,bytes32,bool,uint8)", +"f8d988d6": "toExchange(address)", +"f8daa0ee": "transferGroupCommune(uint256,address)", +"f8dad3db": "MAXIMUMINVESTMENTSALLOWED()", +"f8db188b": "MeetToken()", +"f8db5d07": "unlockKyc(address)", +"f8db71b5": "getStatusContract(address)", +"f8dc11cc": "soldTokenInPublicsale()", +"f8dc5dd9": "removeOwner(address,address,uint256)", +"f8dcbddb": "setStep(uint256)", +"f8dcc3e0": "getLinkStatus(bytes32,address)", +"f8dcc9a9": "potato()", +"f8dd1764": "ClearToken(address,address,address,address,address)", +"f8ddd288": "s31(bytes1)", +"f8de2dfd": "destroyCoins(address,uint256)", +"f8dea17f": "startraffle()", +"f8df084d": "ZUR()", +"f8dfaa1e": "ret_img(uint256)", +"f8e0cc1c": "getPI_edit_32()", +"f8e1badd": "getCrowdsalePrice()", +"f8e1ec40": "CTOcoin()", +"f8e217c4": "getDivBalance(address)", +"f8e29885": "get_game_balance()", +"f8e2d041": "maxNumberMembers()", +"f8e2d4f9": "settleBetVerifi(uint256[],bytes32)", +"f8e2dc6a": "rangeOfBets(uint256,uint256)", +"f8e39177": "intrepidShipMinted()", +"f8e3aa92": "sendNugget(address,uint256)", +"f8e43382": "icoRunningStatus()", +"f8e4500a": "getTokenIssued(address)", +"f8e48488": "returnDevelopersCut(uint256)", +"f8e4ed5f": "escrowDecision(uint256,uint256,address)", +"f8e5521a": "getBlockHashOddOrEven(uint256)", +"f8e58024": "colors()", +"f8e65295": "storeIt(string)", +"f8e6a8cf": "payETH(address)", +"f8e6b331": "jtest()", +"f8e7577d": "FIBToken()", +"f8e76cc0": "_exists(uint256)", +"f8e8b93d": "setTrueUSD(address)", +"f8e8e035": "COSHACNYToken(address)", +"f8ea5daf": "withdrawalEnabled()", +"f8eac151": "Multiply(uint256,uint256)", +"f8ead7cf": "getUserAverageDividendRate(address)", +"f8eb5fc5": "getSalePrice(uint256)", +"f8ebabcd": "_setPixelBlockPrice(uint256,uint256,uint256)", +"f8ebf282": "changeHSShopPrice(uint256,uint256)", +"f8ec4bf2": "setAllowTransactions(bool)", +"f8ec4cd5": "withdrawBidForCollectible(uint256,uint256)", +"f8ec6911": "buyback()", +"f8ec7e83": "test_updateKey_zeroNewKey()", +"f8ecb558": "getFishByAddress(address)", +"f8ed0dfb": "setBuff(uint256,uint8,uint32)", +"f8eee5d6": "returnPaidBackBlock(uint256)", +"f8ef13f4": "EthbetToken()", +"f8ef9a3d": "getPaymentLog(uint256)", +"f8efaf2b": "partner_2_name()", +"f8efc03e": "approveWhitelisted(uint256)", +"f8eff67c": "takeInvest()", +"f8f079bb": "reserveAllocation()", +"f8f122ba": "numCompletedRequests()", +"f8f1939d": "PRESALE_TOKEN_CAP()", +"f8f1d927": "multiERC20TransferTightlyPacked(address,bytes32[])", +"f8f1f151": "testToAddress(bytes)", +"f8f2d5e4": "preIcoTokensCount()", +"f8f32de6": "revealAssertion(uint128,uint256,uint256,uint256,string)", +"f8f46b5f": "getCurrentMinerAddress()", +"f8f53ce7": "nestedSecondAnyToAny(uint256)", +"f8f5cefd": "updateNextMemberPayment(address,uint256,uint256)", +"f8f63375": "YXLToken()", +"f8f6773b": "calculatePurchaseBonus(uint256)", +"f8f6882e": "LavaWallet()", +"f8f6e080": "UnclaimedDividendTransfer(uint256,uint256)", +"f8f7312d": "ChangeBurnBoundsEvent(uint256,uint256)", +"f8f73808": "create(address[],uint256)", +"f8f8a912": "GetBalance()", +"f8f9271c": "changeRegistrationStatusForSilverWhiteList(address,bool)", +"f8f9456c": "CrowdsaleFactory(address)", +"f8f96a55": "lastBlock_v6Hash_uint256()", +"f8f9be36": "settlementRegistration(uint64)", +"f8f9da28": "borrowRatePerBlock()", +"f8fb1d0f": "countUsers()", +"f8fb1f07": "sponsorsOf(uint256)", +"f8fb3366": "stopPreSale()", +"f8fb491f": "setSaleAddress(address)", +"f8fb4ab7": "NBAT001(address,address,address,address,address)", +"f8fbdbb6": "getChkLockedTokens(address,uint256)", +"f8fc16ef": "minWeiToAccept()", +"f8fc6fcd": "QNBAI()", +"f8fc94aa": "refundTransactionAfterExpiryFee(uint256)", +"f8fd72ac": "getCompte_44()", +"f8fdebd3": "weiMaxCap()", +"f8fe2cb0": "toDepositCommitmentRecord(address,address,uint256,uint256,uint256)", +"f8fe2f9d": "KyberGenesisToken(address)", +"f8fe63b0": "getERC721Id(uint256,address)", +"f8ff612e": "WithdrawToHolder(address,uint256)", +"f8ffe42a": "SetCoefRew(uint256)", +"f900592a": "ToggleTransferAllowance(bool)", +"f900b5d6": "getUserTotalPaid(address,address)", +"f9010d19": "joinEvent()", +"f901a18f": "setSale(uint256,uint256)", +"f9020e33": "saleStatus()", +"f9039f33": "update_current_rate(uint256,string)", +"f904b9ff": "GXDHRPToken()", +"f9059832": "isSaleEnded()", +"f906a440": "getInvoice(string)", +"f9079685": "SPCoin()", +"f9081ba2": "safeContract()", +"f908326b": "payRewardForAddress(address,address)", +"f90836df": "_transferFundkeeper(address)", +"f9084729": "pvt_plmt_token_generated()", +"f9094303": "finishVoting()", +"f909640c": "InitialPriceDisable()", +"f909d60d": "getMinimumGasLimit()", +"f90a2f30": "usedNonce(address,uint256)", +"f90b2bfe": "dissolve(uint256)", +"f90b2e74": "setInitialTime()", +"f90c3f27": "FUNDING_PERIOD()", +"f90ce548": "SmartDeposit()", +"f90cf0a4": "Land(address)", +"f90ddee2": "tokenBurners(address)", +"f90e292c": "stage3Start()", +"f90f11b7": "withdrawNVTfromGame(uint256,uint256)", +"f90f3278": "resetUsername(string)", +"f90f4560": "placeBet()", +"f90f4a30": "Matthew()", +"f90fa5dd": "sendTokensToAdvisorsLock(address)", +"f910feaa": "safeTransfer()", +"f912e58c": "setPreCrowdsaleAddress(address)", +"f912ed00": "lockMe()", +"f913a879": "getBidsNum(address)", +"f913b919": "setAssetLevel(uint16,uint256)", +"f9146b2f": "newRefPayStation(address)", +"f9153fbc": "changeHouse(address)", +"f9154476": "__redeemAmount(address)", +"f915cf42": "MINIMUM_BET_VALUE()", +"f9163e64": "lockUpAmountStrOf(address,address)", +"f9172266": "setOldSeelToken(address)", +"f9174551": "cooperativeSettle(address,address,uint256,address,address,uint256,bytes,bytes)", +"f9177aad": "CreateFBL(address,uint256)", +"f9190fcc": "smartSponsor(address)", +"f9191b18": "revealVotes(address,bytes32,bytes32,address[],uint256[],uint256[])", +"f9195a30": "doFunding(bytes32,string,address,uint256,address)", +"f91a545b": "getLossTokenAmount()", +"f91a792e": "decryptHand(string,uint256,uint256,uint256)", +"f91b853b": "upgradeFrom2To3()", +"f91bb05a": "withdrawForeignTokensTo(address,address)", +"f91bcd76": "getMintForReportingParticipantAmountValue()", +"f91c022b": "secondTokenCap()", +"f91c26a5": "dLogN()", +"f91c339e": "calculateTxHash(address,address[],uint256[])", +"f91cb3d6": "proposalAvatar(bytes32)", +"f91d4db7": "TokenTracker(uint256)", +"f91e89db": "maxMonsterHit()", +"f91f681f": "targetFromBits(uint32)", +"f91f87f2": "tokenDistributionDuration()", +"f9215676": "paymentsByCustomer(uint128)", +"f921991c": "transferTokensWithOffsetAndLimit(uint256,uint256)", +"f922501a": "CRYPTOBULL()", +"f9226daf": "LogWithdrawal(address,uint256,uint256)", +"f922da7e": "addTokensToCampaign(bytes32,uint256)", +"f922f216": "disableERC20()", +"f923058c": "get_total_supply()", +"f923b8aa": "setBCY(uint256)", +"f9244a9b": "sendToMinter(uint256)", +"f9249fbf": "initiateTeamVesting(address)", +"f924c276": "fechStageIndexBySnapshotBlock(uint256)", +"f92561f3": "lambosBuildCount()", +"f9261d3f": "setProviderDetails(address,string,string,string,uint8,address)", +"f9268170": "setEdgePerPosition(uint256)", +"f926ac20": "totalInWei()", +"f9271fd3": "changeFundAddress(address)", +"f928655b": "transferA2B(address,address)", +"f92883a2": "mint(address,uint256,uint256,uint256,uint256)", +"f9297a40": "getPrice(bytes,int256)", +"f92a373b": "payForOption(address,address,address,uint256)", +"f92a69ec": "createPolicy(address,uint256,uint8,bytes32,bytes32)", +"f92a73d7": "ICONIQ_SALE_CLOSING_TIME()", +"f92a7595": "fxpMul(int256,int256,int256)", +"f92a79ff": "getExecutor(bytes)", +"f92a9de5": "developmentFunds()", +"f92abed9": "GetEvaluate(uint32,uint8)", +"f92ad219": "initialize(address,uint256,uint256,uint256,uint256)", +"f92b359a": "instrumentManifest()", +"f92b9dc7": "TVThreshold()", +"f92bb8c9": "getConfigUint(bytes32)", +"f92c33f7": "EventLuckyNumberRevealed(address,uint256,uint256,address)", +"f92c45b7": "reservedAmount()", +"f92c6bb6": "getGuessStatus(uint256,uint256)", +"f92c9b47": "TOKENS_FUTURE()", +"f92caf3a": "UploadIMG()", +"f92cd2b2": "airdropTokensBatch(address[],uint256[])", +"f92ec991": "preEtherReceived()", +"f92fff12": "requestEtherToUSD(bool,uint256,uint256)", +"f9307837": "setMaxcap(uint256)", +"f930a3d2": "presaleMint(address,uint256,uint256)", +"f9319a88": "SECOND_TIER_RATE()", +"f931eaef": "untokenizeProperty(string)", +"f931edb4": "ClaimedTokens(address,address,uint256)", +"f93231ba": "GetAskingTokenMutiplier()", +"f932380e": "RoyalPanties(uint256,string,string)", +"f9323a32": "_selling()", +"f9324c5f": "EarlyBird(bool)", +"f9327b9f": "preSaleDeadline()", +"f933b844": "_addToVesting(address,address,uint256,uint256)", +"f9355dca": "functionFour()", +"f93589ce": "didWin(bytes)", +"f935ae8b": "requestExchangeRate(string,string)", +"f935fd94": "WeiTransfer(address,uint256)", +"f937a6eb": "setLockup_investors(address,uint256,uint256)", +"f938075c": "weiToRecoverPreICO(address)", +"f9391d24": "AllPayAuction()", +"f939499d": "backupfarmSingle(address,address,uint256)", +"f9394c10": "getCarrotCredits()", +"f93a2109": "ADT()", +"f93a8d96": "EtheeraCrowdsale(uint256,address)", +"f93acbe9": "SubBankerProfit(uint8,uint256)", +"f93af357": "updateSigners(address,bool)", +"f93b4466": "LudumToken(address,address,address,address)", +"f93ca568": "ActualQueue()", +"f93d029a": "sendICOByOwner(address,uint256)", +"f93de2c3": "updateMinimumQuota(uint256)", +"f93e2d31": "adminEditCity(uint16,string,uint256,address)", +"f93e6715": "freeUntilDate()", +"f93ee24c": "addMinerTokens(uint32,address[],uint32[])", +"f93f1391": "getPokemonBetTimes(uint256)", +"f93f1b02": "incByTwo()", +"f93f7ab5": "saleRateFirstDay()", +"f93f9a76": "WhitelistUpdated(address,bool)", +"f93fc97b": "test_updateKey_increaseNoHint(int256)", +"f940e385": "withdraw(address,address)", +"f9419088": "mintNonFungible(uint256,address[])", +"f941c01a": "getOwnerToken()", +"f942be1c": "endDayOneTime()", +"f9432517": "transferLimit()", +"f94497fe": "testCreateWithParentsForeign0()", +"f944f4c7": "removeUser()", +"f9454f3f": "register(address,uint256,uint256)", +"f9455301": "setHoldTime(uint256)", +"f945b274": "jackpotTokenEthRate()", +"f945ba2d": "avatarFee()", +"f945e8b2": "getCurrentRound(uint256,uint256)", +"f946372c": "TOKENS_SALE_HARD_CAP()", +"f946d61c": "logReputationTokensTransferredCalled()", +"f94789bf": "KungfuToken()", +"f948d276": "changeShare(address,uint256)", +"f948e51a": "implementation2()", +"f949116d": "ICDCap()", +"f94a3223": "submitCro(bytes32,bytes32)", +"f94a360d": "MAXIMUM_BET_SIZE()", +"f94aa8bf": "BliBliToken(address,uint256)", +"f94b97c9": "IntoQueue(address,address)", +"f94c12cb": "cancelPendingChange()", +"f94c81c3": "RobotTradingToken(address)", +"f94c9e13": "getChannelInfo(address,address)", +"f94d2d44": "formatNumber(uint24,uint256)", +"f94d71a0": "unregisterObserver(address)", +"f94d7a10": "setTransferFromWhiteList(address,bool)", +"f94df54f": "importersBanksLetterOfCredit()", +"f94df678": "getAuthorizedEditAgents()", +"f94df97f": "Lotery(uint256,uint256,uint256,uint256,address,uint256)", +"f94e08d0": "queryWaitingTime()", +"f94e45de": "Scaltinof()", +"f94f04e4": "sendPresaleTokens(address,uint256)", +"f94f1e9a": "LifePasswordAI()", +"f94f6910": "POINTS_TO_LEVEL()", +"f9500927": "eth_amount_judgment(uint8)", +"f950db2b": "unfreezeUpgrade()", +"f951410d": "setBcouponTransferCost(uint256)", +"f9514ec9": "ApprovedBy(address)", +"f9515f1b": "addGroup(address)", +"f951f856": "getPeriodTotalReceived(uint256)", +"f952279e": "cancelOffer(bytes32)", +"f952f938": "CreateCreature(uint256,address)", +"f953927e": "openRoom(uint256,uint256,address)", +"f95440ba": "decimalPoints(bytes32)", +"f954501f": "validRouletteBetData(bytes,uint256)", +"f95547fa": "getGameFees(uint256)", +"f9565aec": "NewTokenGrant(address,address,uint256,uint256)", +"f9566392": "WeightedSubmission()", +"f956a1b5": "EthereumPinkToken()", +"f956c139": "getMatchIndex(uint256)", +"f956ecde": "invalidatePurchase(uint256)", +"f956fc52": "didWithdrawCollateral(bytes32,address,uint256)", +"f957417e": "activateToken()", +"f957ddba": "withdrawAllFrom(address)", +"f958530f": "bountyTransferToken(address[],uint256[])", +"f9586eaa": "setScouponAllocationFactor(uint256)", +"f9587219": "SetPetCardDataContact(address)", +"f9589eb3": "onceOuttime()", +"f95918eb": "indexOfUserInfo(uint256)", +"f959300b": "calculateSetupAllowedUntil(uint256)", +"f959fe4b": "admin_set_dividend(address,bool)", +"f95a5504": "buyandearn(uint256)", +"f95a77e5": "MALCoin(uint256,string,string)", +"f95a78fd": "milestone(uint64)", +"f95af64c": "freezeUpdateTokenAccount(address,bool)", +"f95af865": "selfWithdrawBalance()", +"f95afe2c": "getPortion(uint256)", +"f95b4309": "get_selected_player()", +"f95b5a58": "getInitialAnswer(uint256)", +"f95b5e0d": "mintTokensWithReferal(address,address,uint256)", +"f95bbc9c": "activeValueBonus()", +"f95c1a73": "allocationForESCBbyStage()", +"f95e0a54": "update(uint256,string,string)", +"f95e6306": "processInterval()", +"f95fbf67": "registerBarcode(bytes32,string,string,string,string,string,string)", +"f95fe2e7": "AddNewChallenge(uint256,uint256,uint256,uint256,bool)", +"f9609f08": "deposit(address,address)", +"f9614ac5": "content(string,address,uint256)", +"f9616bfa": "AidEvaCoin()", +"f9618364": "DGDb_Auction(address,address,address,address,uint256)", +"f9619147": "InbestDistribution(uint256,address)", +"f9639d80": "getCanAcceptAmount(address)", +"f963aac6": "CONFIG_MAX_PLAYERS()", +"f96512cc": "createPerDay()", +"f9654378": "TokenWithValidityPeriod(string,string,uint8,uint256,address,string,address)", +"f965e32e": "changeValue(uint256)", +"f9660347": "fetchAllBlocks()", +"f9662c8f": "returnInterest(uint256)", +"f966ade7": "repayLoan()", +"f9672443": "getMyEntityParents(uint256)", +"f9672820": "distributeARTTokenBatch(uint256)", +"f9676db4": "purchaseWithDai(uint256,uint256,uint256,uint256,address,bytes)", +"f96777d4": "payJackpotToWinner(address,uint256)", +"f9677e22": "computeSecret(uint256,address,address)", +"f96803d3": "getJobInvoicesByStatus(address,uint256,uint8)", +"f9683828": "coinback(uint256)", +"f968adbe": "maxPerTx()", +"f968f493": "unlockTokens()", +"f96a181e": "getContact(address)", +"f96abf0c": "deleteCrowdsaleContract(address)", +"f96b636d": "GILLIONTOKEN()", +"f96c166c": "isInPresalePhase()", +"f96cecc1": "returnAmount(address,uint256,bytes32)", +"f96d1c94": "closeStage()", +"f96ddf7a": "getSigner(bytes32,uint8,bytes32,bytes32)", +"f96eb003": "migrateManual(address)", +"f96f143e": "RELEASE_GAS_FEES()", +"f96f2fa1": "Shareable(address[],uint256)", +"f9706844": "recommendFundToPlayer(uint256,address,uint256)", +"f970bbfc": "removeDiscountStruct(uint256)", +"f97110a3": "getDeployedBlogs()", +"f9715458": "minActivatedToken()", +"f9718fc8": "returnTokens()", +"f971b054": "StoxSmartToken()", +"f972e2bf": "dateTransferable()", +"f974a1a2": "PURCHASE_AMOUNT_UNIT()", +"f974ae3c": "PrivateSaleExchangeRate(uint256)", +"f975a024": "openNonceId()", +"f975f3a2": "INITIAL_TOKEN_SUPPLY()", +"f976104f": "revokeDelegate(address,address,bytes32,address)", +"f976c371": "ZLHToken()", +"f9778d0d": "fixPlayerCountryId(uint256,uint256)", +"f9781eae": "test_curators()", +"f9782191": "fifth()", +"f978e842": "_addAdmin(address)", +"f97944e0": "CREATE_AMOUNT()", +"f9794660": "finneyToWei(uint256)", +"f9795a95": "minSlippageFactorInBps()", +"f979764d": "blockDotNumber()", +"f97a02fa": "inActive()", +"f97a9d38": "bonusSubscription()", +"f97b392a": "unregisterEmployee(address)", +"f97b65da": "closeShortPosition()", +"f97b7390": "getCurrentDiscountTrancheIndex()", +"f97bf9e4": "close(address,uint256,uint256,bytes)", +"f97c72b1": "_onBall(uint8,uint8,uint8,uint8,uint8[3][3][31])", +"f97cebed": "BellaStandardToken(uint256,string,uint8,string)", +"f97d0591": "parseTimestamp(uint256)", +"f97d8aee": "WriteBond(uint256,address,address)", +"f97e17d9": "payRate()", +"f97ea6fc": "getIndicesWithClaimableTokensForSellers(address,address,address,uint256)", +"f97f8e17": "takeOrder(address,address[5],uint256[8],bytes32,uint8,bytes32,bytes32)", +"f97fa1bd": "FrozenTokenEvent(address,uint256)", +"f98038ee": "howManyDicks()", +"f980a012": "mainSaleRateP1()", +"f980e52d": "clam()", +"f98139be": "getCensuredByCount(uint16)", +"f98157bd": "GetDeadline()", +"f9819884": "toggleDeathConfirmationByProxy()", +"f981aaca": "addDeal(uint256,string,string,uint256,string,bytes32)", +"f981f0c0": "_getAddress(address,bytes32)", +"f9820cc1": "Nothing()", +"f983c0fa": "run1()", +"f98456d2": "unenableTransfers()", +"f9854bfc": "creditsBalanceOf(address)", +"f985779c": "sin(uint16)", +"f985f5fc": "authorized_createCard(uint256,uint256,address,address)", +"f9869165": "ELIPSToken()", +"f9870705": "getProject(address)", +"f98765b2": "BotRemoved(address)", +"f988279c": "isAce(uint8)", +"f9888687": "raiseethamount()", +"f9889f78": "batchTransferFixedAmount(address,address[],uint256)", +"f988da4a": "TopsToken(uint256,string,uint8,string)", +"f9892c28": "ProofOfStableCoin()", +"f98a4eca": "executeVote(uint256)", +"f98b19f4": "publishBatch(uint16,uint16,string,string,bytes3)", +"f98b26a9": "submitProposal(address,uint256,uint256)", +"f98bbc60": "commit(address,bytes32,bytes,bytes32,uint8,bytes32,bytes32)", +"f98c48c1": "setData_18(string)", +"f98cbf76": "closeEXORImports()", +"f98d28bb": "priorityWallet()", +"f98d7c75": "SALE_STAKE()", +"f98dbad0": "hashCompareWithLengthCheck(string)", +"f98e09a6": "listResources()", +"f98e17a7": "PerSellOver(uint16[])", +"f98e87ba": "hashedParameters()", +"f98eaa9c": "ClaimTokens(address,address,uint256)", +"f98f5b92": "setWhitelister(address)", +"f9900bbb": "reinvestGameDividend()", +"f99031a7": "isWhiteList(address)", +"f9907274": "allTokenAddress()", +"f9909915": "bulkStoreHeader(bytes,int256,bytes,int256)", +"f990b73b": "end_crowdsale()", +"f991a43f": "currentTadpoleOwner()", +"f992905d": "deployContracts(uint256,address)", +"f9937c2b": "getCertificateKeys()", +"f9938192": "reenduser()", +"f993bef3": "postDeadline()", +"f993d955": "BTC_SUISSE_TIER_3()", +"f9943133": "MeltingContract()", +"f99450b9": "getEOSIO_USERNAME(uint256)", +"f994789a": "proposeRewardsWithdrawal(address)", +"f994bffa": "addCard(string,string,uint8,string,string)", +"f99514e2": "noInputReturn()", +"f9952ecf": "changeBoat(address)", +"f9953de5": "addOrg(string)", +"f9956289": "PRESALE_OPENING_TIME()", +"f99638a5": "bTest()", +"f9965dbf": "giveBounty(address[],uint256)", +"f996c697": "THRESHOLD1()", +"f9974d9d": "calculateWineSellSimple(uint256)", +"f9977329": "CROWDSALE_AMOUNT()", +"f997e136": "safeAdd(int256,int256)", +"f997f0c1": "_minHouseEdge()", +"f997f7eb": "ojiletoken()", +"f998393c": "Icostart()", +"f9983a12": "GetMyInvestmentBalance()", +"f9991f33": "AddProject(uint256,address)", +"f999ad04": "CreatePCC(address,uint256)", +"f999eead": "donateToDivs()", +"f99b7f0b": "getAllMatches(uint256)", +"f99ca1ee": "productionOf(address)", +"f99ca808": "totalDonationsWithBonuses()", +"f99cc96e": "tokenMaxSupply()", +"f99d18eb": "VIUREFoundersTokenSale(uint256,uint256,address)", +"f99d948f": "gameExpirationTime()", +"f99e574b": "BCEK(uint256,string,string)", +"f99ebb71": "testFailUpdateLatestRevisionEnforceRevisions()", +"f99ec32c": "lastFreezeSeq(uint8)", +"f99ee846": "KEACoin(uint256,uint256)", +"f99f128c": "make_initial_deposit(uint256)", +"f99f977c": "bountyPercentOfTotal()", +"f99fc046": "dEthereumlotteryNet()", +"f99fddae": "isValidUser(address,uint256)", +"f99ff180": "readMail(uint256,bytes16)", +"f99ff4df": "paged(uint256,uint256)", +"f9a01e94": "mintReward(address,uint256,uint256,uint256,uint256,uint256)", +"f9a075dc": "releaseETH(uint256)", +"f9a0fcc7": "RequestEthereum(address,address)", +"f9a191c8": "giveDirectoryTokenAllowance(uint256,address,uint256)", +"f9a2916f": "getInitiated()", +"f9a2cbd5": "INTREPID_SHIP_LIMIT()", +"f9a32246": "_transferFromToICAPWithReference(address,bytes32,uint256,string,address)", +"f9a329a6": "toVault()", +"f9a381e2": "CurrentToken()", +"f9a3e07d": "getObjInfoWithBp(uint64)", +"f9a42b8b": "_updateSpaceshipPrice(uint256)", +"f9a56fd8": "GamersCoin1()", +"f9a57ae4": "notDistributedAmount()", +"f9a596dd": "validatePrograms(uint256[])", +"f9a6da0c": "pks()", +"f9a794ad": "EtherLovers()", +"f9a7a2ef": "named(bytes)", +"f9a7c906": "setBonusTokenRateLevelTwo(uint256)", +"f9a86856": "maxWeiSMSVerified()", +"f9a87d4f": "buyAllAmountBuyEth(address,address,uint256,address,uint256)", +"f9a8b0ba": "latchTotalFci(uint256)", +"f9a8b611": "moveUnsold(address)", +"f9a8c5b9": "teamSum()", +"f9a8e898": "slashReservedUsername(bytes,bytes32[])", +"f9a8f797": "setLatestContract(address)", +"f9a94d43": "finalisePreSale()", +"f9a94ecd": "SellTokenToRaj()", +"f9ab21e2": "indexOf(uint32[],uint32,bool)", +"f9ac71bf": "allowNorthPoleMinting()", +"f9add1b9": "ourLastWinner()", +"f9ae77ff": "supportNewPurge(address,address,uint256)", +"f9aef74e": "PureGold()", +"f9b04f72": "reinvestByProxy(address)", +"f9b07b9b": "TeikhosBounty()", +"f9b16430": "HonestisNetworkETHpreICO()", +"f9b18e72": "RentableProvider(string,string)", +"f9b207f6": "Teepee()", +"f9b220f4": "modify_uint8(uint8)", +"f9b290b6": "PDPCointoken()", +"f9b2b19a": "getCns()", +"f9b2d1ee": "buyForFriend(address)", +"f9b2ec8e": "MinStarIndexAvailable()", +"f9b35ca3": "seed_traded_token()", +"f9b3e7f0": "hashAccountId(string)", +"f9b41139": "getBoxCount(uint16)", +"f9b4257d": "newXcat(bytes32,address,string,uint256,string,uint256,uint256)", +"f9b4d63a": "ownerOff(address)", +"f9b5c633": "ICONClassicToken()", +"f9b646db": "isTokenType(address,uint256)", +"f9b6b0c4": "create(address,uint256,uint256,uint256,uint256)", +"f9b71e73": "tankImposedMax()", +"f9b7fb56": "MarketboardListingBuyback(address,uint256)", +"f9b83323": "getNumberOfChecks()", +"f9b8659f": "detach(uint32,int256)", +"f9b87d40": "setKeys(uint32,bytes32,bytes32,uint32)", +"f9b8d639": "getMemberBonus(address)", +"f9b9a626": "getTotalWithdraws()", +"f9ba134d": "subtractAmount(address,uint256,uint256)", +"f9baa6ec": "freezingAgent(address)", +"f9bacc1c": "totalBonuses()", +"f9bb656b": "crowdSaleState()", +"f9bb84f5": "areWeekdaysOpen(uint256[],uint256[],uint256,uint256)", +"f9bbcc6d": "setMinVoteWeightK(uint256)", +"f9bcb4b1": "symbolLocked()", +"f9bd9338": "onFrozenAccount(address,bool)", +"f9be029f": "disableWhitelistAddress(address)", +"f9be437a": "UpdateTokenAddress(address)", +"f9befdef": "ownerSetGasLimit(uint256)", +"f9bfc71b": "mulUIntValue(bytes32,uint256)", +"f9bffc0f": "phID_()", +"f9c113cb": "ReadContent(string)", +"f9c12dda": "collectAll(uint8)", +"f9c1437e": "test5_searchAcrossNodes()", +"f9c15f94": "sendStableReward(address,address,uint256)", +"f9c1a197": "TransferEthToAddr(address,uint256)", +"f9c29e66": "hashOrder_(address[7],uint256[7],uint8,uint8,uint8,bytes,bytes,bytes)", +"f9c38ebf": "APTest1()", +"f9c397f8": "VoteInOrganizationScheme()", +"f9c3a68e": "setminimumAmount(uint256)", +"f9c447a9": "PurchasedTokens(address,uint256)", +"f9c4fb94": "addallbuy(address[],uint256[],address,uint256)", +"f9c58926": "_emitJobOfferPosted(uint256,address,uint256,uint256,uint256)", +"f9c5e0aa": "updateAttribute(bytes32,bytes32)", +"f9c6046a": "setForDutchSale(uint256,uint256,uint256)", +"f9c638ea": "globalMin()", +"f9c71f79": "isEquipedAny3(address,uint256,uint256,uint256)", +"f9c78097": "betToken(address)", +"f9c809fe": "addTip(address,bytes32,uint256)", +"f9c811f1": "regWL(address,uint256)", +"f9c8dec3": "KYC_ROLE()", +"f9c926c1": "has(address,address)", +"f9c935cf": "discountValue5()", +"f9c9b9de": "ExperimentalToken()", +"f9cb1b48": "getTotalInvestment()", +"f9cb6d7a": "reservedTokensAreDistributed()", +"f9cbcef0": "setStages(uint32[],uint8[],uint32[])", +"f9cbec43": "transferLandToEstate(int256,int256,uint256)", +"f9cc0605": "getAvailable()", +"f9cc2e66": "setPlatformFeePer10000(uint256)", +"f9cc6fce": "TestIOTACoin()", +"f9cd3ceb": "oracleFee()", +"f9cdbc4e": "paySmartContract(bytes32,uint256[])", +"f9ce67dd": "compareToIgnoreCase(string,string)", +"f9ce733b": "Pets()", +"f9ce7813": "transfer(address,address,uint256,address)", +"f9cee7b5": "totalScammedQuantity()", +"f9d09126": "updateTopicAssetClass(bytes15,bytes15)", +"f9d0fed4": "allowanceProvider()", +"f9d13bf0": "validate(address[4],address,uint256[12],uint256,uint256)", +"f9d176b4": "setManualWithdraw(bool)", +"f9d20590": "distributeFinancialAward(bytes12,int256,bytes12)", +"f9d38868": "exy()", +"f9d3b4e9": "obol()", +"f9d429ee": "NO_BATTLE_LOG()", +"f9d49797": "whitelistMaxWei(address)", +"f9d53ac8": "addPaper(address)", +"f9d593c8": "setNAVAdmin(address,address)", +"f9d5b4bb": "LogContribution(address,uint256,uint256,uint8,uint8)", +"f9d5e08b": "adminUsrCount()", +"f9d630a1": "TUI_ALLOCATION()", +"f9d6de48": "WALLET_LB_COMMUNITY()", +"f9d70200": "buyCrystal(uint256,uint256)", +"f9d75f25": "editDailyLimit(uint256)", +"f9d7f0fc": "CSES2()", +"f9d80dcd": "getInstanceImplementation(bytes32)", +"f9d8241c": "renterExists(address)", +"f9dbe5e9": "_updateStage(uint256,uint256)", +"f9dc0793": "getCustomerBankName(string)", +"f9dc5d43": "getAllPayment(uint256)", +"f9dca989": "becomeOwner()", +"f9dcef27": "cityPoolCutPercentage()", +"f9df65eb": "nullified()", +"f9df6c33": "calculateTokensAmount(uint256,bool)", +"f9df816a": "changeWhitelistPrivateStatuses(address[],bool)", +"f9dfa4a3": "setMaximumEtherToAccept(uint256)", +"f9dfb361": "preSaleStartBlock()", +"f9dfcfcc": "transferContract(address,address,address)", +"f9dfd0a5": "Token(address,string,string,uint8,uint256)", +"f9dfea54": "relockGroup(uint256)", +"f9dfecb9": "preICOTokens(uint256,uint256)", +"f9e0093d": "multiWithdraw(address[])", +"f9e05ed9": "sha(uint128)", +"f9e13de4": "doMigration(uint256,uint256)", +"f9e19fa5": "resetState()", +"f9e1ceda": "getBalancePercentRate()", +"f9e24dc2": "balanceOfMineral()", +"f9e27106": "investmentEntryCost()", +"f9e37733": "_createUnicorn(address)", +"f9e3c1e9": "setNextAddr(address)", +"f9e40a21": "allWon()", +"f9e4fb34": "fundTransferIn(address,address,uint256)", +"f9e51b1d": "withdraw(uint128,string,uint32)", +"f9e54282": "dropUsername(bytes32)", +"f9e68952": "createDrone()", +"f9e73764": "airdropExecute(address,address[],uint256)", +"f9e84395": "unexempt(address)", +"f9e856ae": "oldE4RecycleBin()", +"f9e8ad7c": "isPreIcoStage()", +"f9e9d34a": "getUserRefBalance(address,address)", +"f9ea3a18": "getHTLCSpendingData(uint256,int256,bytes32)", +"f9ea8839": "AlphaMarketCoinExchanger(address[],address)", +"f9eab09f": "setChickenHunt(address)", +"f9eb4ee2": "APPROVAL(address,address)", +"f9eba935": "debit(string,uint256)", +"f9ebdc8b": "isConfirmed(bytes32,address,address)", +"f9ec2edb": "startNewBoss()", +"f9eec610": "next(string,string,string,string,string,string)", +"f9eee901": "setClaimTreshold(uint256)", +"f9ef04be": "free(address,bytes32,uint256)", +"f9ef2c7d": "HTC()", +"f9ef33ff": "walletOEM()", +"f9ef66f5": "getRoundWinnings(address,uint256)", +"f9f03556": "ERC20(uint256,string,string)", +"f9f0507f": "timeLockedStart()", +"f9f14f6a": "library14function()", +"f9f16ef2": "numberOfTokens()", +"f9f20540": "setInvestTokenLimit(uint256)", +"f9f22d6c": "createNamespace(string,address)", +"f9f286f9": "setMultisigMain(address)", +"f9f2c161": "setGod(address)", +"f9f2c93c": "santaClaus()", +"f9f2ecb6": "getExtendAddr(address)", +"f9f39a9c": "initialize_bannable(address)", +"f9f411d8": "userTokens(address,uint256)", +"f9f447eb": "getCallDataHash(bytes32)", +"f9f53be0": "ChangeAmountPrice(uint256)", +"f9f5e8c8": "changeToCoin(address,address,uint256)", +"f9f71423": "increasePlayersGooProduction(uint256)", +"f9f73135": "get_heap(uint256)", +"f9f7d9de": "TOTAL_PERCRENTS()", +"f9f81a73": "setAccountCoords(string)", +"f9f86baf": "airdrop(address[],uint256[],uint8)", +"f9f8b586": "JMToken()", +"f9f8bdb7": "currentRate()", +"f9f8f895": "switchOn()", +"f9f90a60": "durationInBlocks()", +"f9f92be4": "blacklist(address)", +"f9f94bc6": "bioUnlock(bytes32,uint8,bytes32,bytes32)", +"f9fae4f7": "TOKEN_CREATION_CAP()", +"f9fafb59": "LogBidFinal(address,uint256,uint256,uint256)", +"f9fb12ad": "TestXRPCoin()", +"f9fb3c95": "transferBonus(address,uint256)", +"f9fb452f": "productID()", +"f9fbd554": "test(string)", +"f9fc0d07": "processRewards()", +"f9fc4816": "withdrawAmountETH(uint256)", +"f9fd41d8": "setRevolution(address)", +"f9fd5250": "DOW_MON()", +"f9fef3b3": "withMod(uint256)", +"f9ff1378": "solicitaDevolucao()", +"f9ffabca": "NewAdmin(address,address)", +"fa003b2e": "SCCAIToken(address,address)", +"fa006d87": "newPlaySeed(address)", +"fa009e36": "xxx7Coin()", +"fa0196eb": "OsherCoinAward(uint256)", +"fa01dc06": "revoked(address)", +"fa01dd3c": "BRTToken()", +"fa02955f": "registerMeOnEther(string)", +"fa02c4b7": "approveTransfer(address,uint256)", +"fa02dcc1": "TankWithdrawAll()", +"fa030ef1": "baba()", +"fa03446c": "tokensFromEther()", +"fa036370": "Athereum()", +"fa043b0f": "checkSig(bytes32,bytes32,uint8,bytes32,bytes32,address)", +"fa044862": "requireOk(bytes1)", +"fa048a18": "addHpbNode(address,bytes32,bytes32)", +"fa05064e": "setBountyDistributionContract(address)", +"fa058795": "logAdr(address)", +"fa061d48": "isReadyToSynthesize(uint256)", +"fa066fbd": "AccountGasLimitReached()", +"fa07153a": "commitVote(uint256,bytes32,uint256)", +"fa097028": "_burnRemainingTokens()", +"fa09cb30": "PatCoin()", +"fa09e630": "withdrawAll(address)", +"fa0a6cfe": "AFEBToken()", +"fa0a8f26": "calculateNextPrice(uint256,uint8)", +"fa0b5e55": "registerUser(address,uint256)", +"fa0b6211": "hasRoundEnded()", +"fa0bad28": "onholdBalance()", +"fa0bc8e1": "ownerOfSocialIdentity(uint256,uint256)", +"fa0c3034": "GenoPay()", +"fa0c498e": "refundJobSponsorships(uint256,uint256)", +"fa0c76c5": "calcUserDivsAvailable(address)", +"fa0cdc81": "getManifestById(bytes32)", +"fa0d5b52": "BerryLakeCoin()", +"fa0d80fc": "icoDenominatorPrice()", +"fa0ff39f": "setDummy(uint256)", +"fa1026dd": "getCommitment(address)", +"fa107a41": "Cajutel(uint256,string,string,address,address,address,uint256,uint256)", +"fa113488": "setCMTForGas(uint256)", +"fa113773": "BlackSeaCoin()", +"fa1152f3": "MoregainCoin(uint256,string,string)", +"fa11c471": "holdsValidLicense(address)", +"fa12d782": "openGame()", +"fa130b68": "developer_edit_text_price(string)", +"fa133fdb": "massTransferTokens(address[],uint256)", +"fa13af97": "InServiceToken()", +"fa140e3d": "MitToken()", +"fa1456a9": "transferKROContractOwnership(address,string)", +"fa147e5e": "remainingTokensAndCost()", +"fa14df6b": "getChangeRecipientFee()", +"fa169ec8": "getHashDigest(string)", +"fa16ab6c": "Platform()", +"fa16c53b": "DiscrashCredit()", +"fa17a19d": "forceStand()", +"fa188644": "whitelist5Addresses(address[5])", +"fa188df2": "addMinter(address,address)", +"fa1896f4": "getOneTokenInWei()", +"fa18dd2b": "isSetupMode()", +"fa193a6e": "Voter()", +"fa198656": "roundingPercent(uint256,uint256,uint256)", +"fa1a5f59": "soldAmount()", +"fa1acb5c": "_startTime()", +"fa1ad09e": "fundTransferOut(address,address,uint256)", +"fa1b3eb8": "gamesOf(address)", +"fa1ba1e1": "burn(uint256,bool,uint256,uint256)", +"fa1bde89": "test_set_get_OraclizeCallback()", +"fa1c594e": "disableRegistryUpdate(bool)", +"fa1ca37e": "_transferCeo(address)", +"fa1cee57": "approveKNCRateRange(uint256)", +"fa1d9cf8": "getZoneTeller(bytes2,bytes16)", +"fa1db1e7": "SendResult(uint64,bytes32,bytes32)", +"fa1e4fcb": "holdoverBalance()", +"fa1eae3c": "newSchellingRound(bool)", +"fa1f919f": "pre_enddate()", +"fa2073ad": "getAnswerCounts()", +"fa208cc5": "KickTheCoin()", +"fa20e77d": "burntTokens()", +"fa212d37": "getCurrentMaximalDeposit()", +"fa2299ee": "soldSupply()", +"fa23023b": "lockSales()", +"fa233620": "RENTALTOKEN(uint256,string,string)", +"fa24e7a0": "xyjtoken(uint256,string,string)", +"fa255179": "getCheckResultMessage()", +"fa25fd57": "settleOrder(uint256,uint256)", +"fa26db7e": "setMinAllowedReservingPercentage(uint256)", +"fa26fe32": "delivery(string)", +"fa27e070": "removeProxyForSender(address,address)", +"fa28a6b6": "checkTrainingPrice(uint256,bool)", +"fa28ba0d": "validateReleaseLockfileURI(string)", +"fa29141b": "minSellAmount()", +"fa292c44": "BitcoinPower()", +"fa2a68d2": "QToken()", +"fa2a8997": "isReleased()", +"fa2a9be6": "createPoll(bytes,uint16,uint256,uint256)", +"fa2acd87": "G(uint64[16],uint256,uint256,uint256,uint256,uint64,uint64)", +"fa2af9da": "platformWallet()", +"fa2b579d": "at_percentile(uint256)", +"fa2b76e2": "tokenReserved2()", +"fa2c7f9b": "getLender(uint256)", +"fa2cac28": "rejectEthTransactionRequest()", +"fa2cc19e": "calculate_price(uint256,uint256)", +"fa2d7efa": "AdlasToken()", +"fa2d84b6": "addBlacklistAddress(address,address)", +"fa2dedec": "SATS_TO_TOKENS()", +"fa2e9db8": "sunsetWithdrawDate()", +"fa2f29b6": "claimEOSclassicFor(address)", +"fa2f3e9a": "numAccountsInfo()", +"fa2f7a8f": "renounceContract()", +"fa307fcb": "sendMultipleMessages(address[],string,string,uint256)", +"fa309571": "delegateGetTokens(address,uint256)", +"fa30b251": "buyTicket(string)", +"fa314c67": "newAtomFee()", +"fa31b371": "deletePublicKey(bytes32,address)", +"fa31e684": "releaseTokensSaleCount()", +"fa3276bc": "isModifiedInRound(address,address,uint64)", +"fa332152": "giftSendIndex()", +"fa33bcf3": "isInList(address)", +"fa34b345": "walletsDelegate()", +"fa34b37b": "bonusPreviousOwner(uint256,uint256,uint256)", +"fa34da5e": "getTarget(bytes32,bytes4)", +"fa352dec": "tokensToEthereum_(uint256,uint256)", +"fa3559f7": "attestToContract(uint256,bool,string)", +"fa355d1c": "_distributeFloatWalletToken(uint256)", +"fa358c24": "refundPaused()", +"fa35a310": "Contributed(address,uint256,uint256)", +"fa35aa94": "deathData_f10()", +"fa36316e": "setFiatPerEthRate(uint256)", +"fa368e6d": "isWMSale()", +"fa369e66": "batchTransfer(bytes32[])", +"fa3754ca": "getCurrentDiscountRate()", +"fa37668f": "createContract(bytes32,bytes20,bytes20,uint256,uint256,uint256)", +"fa391c64": "isCompleted()", +"fa3a0f78": "getCreateMarketController()", +"fa3a3a7e": "DemoPreSale(uint256,uint256,address,address,address,uint256,uint256,uint256)", +"fa3b8f2c": "AdvertisementPayout(uint256)", +"fa3c6320": "intercrypto_recover()", +"fa3c8251": "TimeDecayingTokenEnvironment(uint256)", +"fa3c9bbc": "getHostRoomLists(address,address)", +"fa3e9b45": "setCreditDao(address)", +"fa3ed04d": "getDArbitraryData(bytes32,bytes)", +"fa3f1e99": "testBlobStoreRegistered()", +"fa3f5acf": "sendMsg(string,string)", +"fa3f998c": "redeem_deposit(uint256)", +"fa3fa196": "transferCreator(address)", +"fa404e34": "revokePoolRole(address)", +"fa407c19": "NRCToken()", +"fa40ce34": "addAllowedContracts(address[])", +"fa4125f7": "activateNextRound(uint256)", +"fa41fd32": "lastCallstopPreICO()", +"fa42f3e5": "map_address(string)", +"fa448f7a": "_handleAffiliate(address,uint256,uint256,uint256)", +"fa45858e": "changeSellPOPPrice(uint256,uint256)", +"fa45aa00": "executeWithdrawal()", +"fa461f33": "setValueStep2(uint256)", +"fa462e95": "mintStepPrice()", +"fa46b8b4": "SellRateChanged(uint256,uint256)", +"fa472bad": "SkillCoinTest()", +"fa47c564": "confirmERC20(bytes32)", +"fa48b4bf": "mintEtherBro()", +"fa48dfcd": "setLockup_jiedians(address,uint256,uint256)", +"fa49841d": "ownerAdmin()", +"fa49a13a": "Vulgus()", +"fa4a2e36": "ShyneTokens(uint256,string,string)", +"fa4a80f1": "Matrioska()", +"fa4ac15d": "withdrawAffVault(uint256,string)", +"fa4bb165": "setRoundNumber(uint256)", +"fa4c4271": "reClaimIFS(address)", +"fa4c5dc0": "addMessage(string,uint8,uint8,uint8)", +"fa4d0c3c": "lockDeadline()", +"fa4d300d": "ICOSplit()", +"fa4d3698": "setOwners(address[])", +"fa4de094": "KPOP_ARENA_CONTRACT_ADDRESS()", +"fa4e5e5a": "notify(uint8,string,string)", +"fa4f34a0": "GetChallengeTimings(uint256)", +"fa4f5511": "campaignUrl()", +"fa4f96c4": "ActivatedEvent(bool,bool)", +"fa4fb369": "addPreSaleTokens(address,uint256)", +"fa4feb65": "icoTokens()", +"fa5007cc": "getHold(uint256,bytes6)", +"fa502cf7": "addBidToStack()", +"fa5064be": "submitProposal(uint256,uint256,uint256,uint8,uint64,string)", +"fa5083fe": "getMaximumBetRate()", +"fa508d3e": "dnnToken()", +"fa509eda": "nextonetogetpaid()", +"fa509ff7": "collected_eth()", +"fa50b335": "IS_TIER_CONTRACT_MAGIC_NUMBER()", +"fa518054": "_addToWhitelist(address)", +"fa51a2bf": "setSupplyLock(bool)", +"fa51ae86": "RATE_CORNERSTONE()", +"fa5201e1": "LuckToken(uint256,string,string)", +"fa5252e4": "pbWinner()", +"fa52bcb3": "ICSTCrowSale()", +"fa52c7d8": "validators(address)", +"fa52caf6": "HECoin(address)", +"fa53bb1b": "setauctionother(uint256)", +"fa544161": "getOwner(address)", +"fa550659": "approvalForAll()", +"fa552d8e": "withdrawSale1()", +"fa556996": "TimeClock(string,uint256,uint256,uint256,uint256)", +"fa55afe2": "setABIHashForMod(bytes32,bytes)", +"fa55f4d4": "modifyEligibility(uint256)", +"fa566ddd": "doAllowance(address,address)", +"fa56780d": "getPurseContributions(uint256,uint256)", +"fa57e2ab": "resolved(bytes32,bytes32,uint256)", +"fa57ff82": "ownerSetJackpotToken(address,uint256,uint256,uint256)", +"fa58f510": "getFeeMake(uint256)", +"fa5919a8": "DAOSecurity(address,address,bytes32,uint256,uint256,uint128)", +"fa59d199": "removeHash(string)", +"fa5a1db6": "save(uint256,uint256,uint256)", +"fa5b344e": "assignSubMember(address,uint256)", +"fa5ba0f9": "stepPrice()", +"fa5bbcd2": "crowdsaleCreators(address)", +"fa5bc660": "offerDiscipleVend(uint256,uint256)", +"fa5be8f8": "setBonus(uint256,uint256,uint256)", +"fa5bfc1e": "claimedRewardHook(uint256,address,address,uint256)", +"fa5c0c70": "getSaleOrder(uint256)", +"fa5c5857": "createStakingContract(uint256,bool)", +"fa5cd179": "join_address(uint256)", +"fa5cdc2b": "OLTestSynatax()", +"fa5da441": "incrementedIndexOfName(string)", +"fa5e288c": "ABBC()", +"fa5ed321": "_pointToResolverAndResolve(bytes32,address)", +"fa5ef276": "getVotedData(address,uint256,address)", +"fa5f090b": "SmartIdeaTokenERC20(uint256,string,string)", +"fa5f2d80": "AOG(address,address,address,address,address,address,address)", +"fa607442": "timeOneSession()", +"fa608890": "withdrawRemainingRewards(uint256)", +"fa60a16e": "serviceAddressOf(address,uint256)", +"fa60fb0b": "getTxRoot(uint256)", +"fa6140dd": "weekPotLeader()", +"fa6171e4": "superMint(address,uint256)", +"fa62a1ff": "revokeAdminStatus(address)", +"fa640427": "setPermissionsProvider(address)", +"fa64dffa": "getDestQty(address,address,uint256,uint256)", +"fa65d336": "hasFreePlaces()", +"fa6669b7": "updateAccountData(uint256,uint16,bytes32,uint256,uint16,bytes32)", +"fa667907": "changeOwnerSharePerThousandForBuying(uint256)", +"fa66be4e": "countryLengthOf()", +"fa66e143": "employeeSignsToESOP()", +"fa671e5f": "deathData_v19()", +"fa671f6b": "validPurchaseIco(uint256)", +"fa6799f2": "revokeVesting(address,uint256)", +"fa67ae5a": "setBlockDelay(uint256)", +"fa67ba6f": "getSecondsTimeLockedByTx(uint256)", +"fa6878a7": "setBAB(bytes32,address,bytes)", +"fa68829a": "UnKoin()", +"fa68b4ce": "lookupISO3116_1_alpha_3(bytes)", +"fa691a26": "totalRoundsPassed()", +"fa695dd7": "createItem(string,uint256,uint256,bool,bool,string,uint256)", +"fa696d98": "ART_FOUNDATION_ADDRESS()", +"fa69ede9": "setNewRatesBase(uint256)", +"fa6a0712": "setOwnerPrice(uint128)", +"fa6ab63b": "getTokenSum()", +"fa6ac98e": "test_0_testBasicTxProposal()", +"fa6ad04c": "PRCT_BOUNTY()", +"fa6b129d": "tokenGenerationEvent(address)", +"fa6b535d": "deleteContact(bytes32,address)", +"fa6bdbf8": "_transfer(address,address,uint256,bytes)", +"fa6d373c": "LeaderHash()", +"fa6d8f1f": "callAndReward_1(string,string,uint256)", +"fa6e01a2": "ARTCToken()", +"fa6e5776": "haveExtension(string)", +"fa6ec547": "registeredAddress(address,bool)", +"fa6f3522": "EthimalFounderEggs()", +"fa6f3936": "isModerator(address)", +"fa6fc037": "prepareToBreed(uint256,bool,uint256,bool,uint256)", +"fa6fcc50": "_startBetBlock()", +"fa70466e": "getMonsters(uint16)", +"fa70f6da": "STRATToken()", +"fa712f71": "isBattleboardLive(uint16)", +"fa713023": "IEICrowdsale(uint256,uint256,uint256)", +"fa725ea3": "requireValidAddress(address)", +"fa7299f7": "getOwnerVirusLength(address)", +"fa729b5b": "CNY_Omnidollar()", +"fa72c53e": "providerFeePerEth()", +"fa73af0b": "GRANT_BATCH_SIZE()", +"fa73cb37": "ptxToken()", +"fa73f074": "useAddr()", +"fa76b253": "getAddressForAccount(string)", +"fa779bd6": "checkBalanceTier(address)", +"fa77c074": "shaThree(string)", +"fa785263": "checkRemoveOwnerArgs(uint256,uint256,uint256)", +"fa785928": "_revealBid(bytes32,address,uint256,address,bytes32,bytes32,uint256,uint256)", +"fa7860da": "etherHardCap()", +"fa78b172": "drawSecondaryWinners()", +"fa796124": "BitLumensCrowdsale(address,address)", +"fa796fa1": "CryptoZoo(address,address,address)", +"fa7a6cd3": "developer_string_symbol(string)", +"fa7ae620": "cryptaurReserveFund()", +"fa7af6fe": "investInternal(address,address)", +"fa7c31af": "withdrawCommunity(uint256)", +"fa7ca492": "preICOStats()", +"fa7d68f1": "getAccountInfo(uint256,uint256)", +"fa7e4eaa": "BELIBELA()", +"fa7e8f7c": "EtradeMarketsCoin()", +"fa7f6b96": "tokensLocked(address,uint256)", +"fa80918b": "computeNodeId(bytes,bytes)", +"fa81b200": "masterOfCeremony()", +"fa825185": "getChargers()", +"fa82b674": "ETHContract()", +"fa82e9fc": "organizer1()", +"fa83c01b": "setStopSendWebGift(bool)", +"fa848fb0": "startDayOneTime()", +"fa849243": "targetDiscountValue1()", +"fa85d33e": "istransferAllowed()", +"fa878e8f": "TOKEN_RATE_10_PERCENT_BONUS()", +"fa885329": "setTableSize(uint256)", +"fa885868": "addPreminer(address,address,uint256,uint256)", +"fa888c74": "callIt(uint256)", +"fa89401a": "refund(address)", +"fa894c08": "balanceWosPoolForSecondStage()", +"fa89ae7d": "ownerTransferEth(address,uint256)", +"fa8a3c1c": "rateC()", +"fa8a975d": "forcedTransferAll(address,address)", +"fa8ad6b9": "unsetIsRentByAtom(uint256)", +"fa8b72ff": "setBountyTokensWallet(address)", +"fa8b9a4b": "GetApplicant(uint256)", +"fa8dc33a": "checkRecordExists(bytes)", +"fa8ec0b2": "_transfer(address,address,uint256,string,uint256)", +"fa8edab6": "checkBalance(address,address,uint256,uint256)", +"fa8fc08d": "GxCoin(address)", +"fa8fd2b5": "LockRequestable()", +"fa90693b": "isBlockRedeemed(uint256)", +"fa912743": "feesStrategy()", +"fa922e66": "pickaxe()", +"fa923d10": "FutureCoin()", +"fa92fb6e": "IssueRejected(uint256)", +"fa93019c": "getBlocks(uint8,uint8)", +"fa93185f": "LockedDayRemoved(address,uint256,uint256)", +"fa93f883": "getMinute(uint256)", +"fa967415": "nextUpgradeMaster()", +"fa968eea": "minBetAmount()", +"fa96a49e": "totalSupplyUpgraded()", +"fa9768c9": "getOnMintAmountValue()", +"fa9789cf": "trainKitty(uint256)", +"fa984da8": "SujiToken()", +"fa985a2f": "p_update_mNewPlotDevPercent(uint256)", +"fa9907ad": "pay500Winners(uint256)", +"fa99d7ae": "enterDungeon(uint256[4],uint32)", +"fa9a4c35": "getPOOL_edit_21()", +"fa9acb05": "addressInArray(address,address)", +"fa9aecfb": "isUnowned(uint256)", +"fa9af30f": "getGoldXchgRate()", +"fa9b44b7": "PendingETHs(address[])", +"fa9ba8b4": "FunFaceToken()", +"fa9ce7e7": "moveTokensFromStockToExchange(uint256)", +"fa9d2352": "hasRequiredStateChanges()", +"fa9df423": "setShp(address)", +"fa9e6f11": "Exafire()", +"fa9e82cf": "uploadStartlist(uint256[])", +"fa9f117f": "setNextRoundMaxDonors(uint256)", +"fa9f245c": "CappedToken(uint256)", +"fa9fd8b2": "incremental(uint256,uint256)", +"faa06c06": "GetCityName(address)", +"faa0a264": "burnToken()", +"faa10f43": "require(bool)", +"faa1a8ff": "getOwnedBot(address,uint256)", +"faa3981a": "boolMemoryArray(bool)", +"faa458f4": "submittedHashes(bytes32,uint256,uint256)", +"faa51485": "isValidTraderAddress(address)", +"faa5369d": "getBorrowingItem(uint256)", +"faa5c564": "register(uint256,uint256,uint256)", +"faa5ca93": "erc20Buy(address,uint256,string,string)", +"faa5d0ea": "updAmountBonusEnabled(bool)", +"faa5e124": "ref_percent()", +"faa5e74a": "TokenPurchaseWithGuarantee(address,address,uint256,uint256)", +"faa62d3f": "setPercentageToLock(uint256)", +"faa679bf": "TraceToken()", +"faa7fc61": "bustRange()", +"faaa4d22": "distributePCY(address[],uint256,uint256)", +"faaa58da": "RemovePauser(address)", +"faaad90f": "getBlocksUntilNextRound()", +"faaad91d": "convertToPrimordial(uint256)", +"faab806f": "emergencyStopSale(address)", +"faab9d39": "setRegistrar(address)", +"faabc195": "updateContract(uint256,address,uint256)", +"faac90ec": "StorageFactory()", +"faacf0fd": "toChar(bytes1)", +"faad4a49": "setDividends(uint256,uint256)", +"faad6eb5": "updateAgent(address,bool)", +"faadb14a": "getCustomerTxPaymentKWh(address,bytes32)", +"faae4c17": "usernamesToAddresses(bytes32)", +"faaebd29": "Fight_Results(uint256,address,address,uint128,uint128,uint32,uint256,uint32,uint256,uint8)", +"faaf027b": "getAddressTokenSaleId(address,address)", +"faaf1921": "updateEthToCentsRateCycleStarted()", +"faaf71e6": "checkSoftCapOk()", +"faafa08f": "CatICO(address)", +"fab0568c": "GIFTToken(uint256,string,uint8,string)", +"fab14b36": "saleBalance()", +"fab18075": "numLots()", +"fab2c469": "getSlots()", +"fab2cb36": "totalSharesIssued()", +"fab2e425": "GAMESPLAYED()", +"fab2f86b": "stopVoting()", +"fab37154": "setMintAddress(address)", +"fab3be9a": "WETCToken()", +"fab3ebb1": "NULL_ENCRYPTION_ALGORITHM_DESCRIPTION_URI_SET_ID()", +"fab4087a": "parse(bytes)", +"fab425e7": "external_to_internal_block_number(uint256)", +"fab43cb1": "getPongAddress()", +"fab4969f": "amountRaisedPhase()", +"fab4cb39": "getWarrantyPrice(string,uint256,uint256,uint256)", +"fab55a49": "addr_forge()", +"fab57a21": "truebitAddress()", +"fab5ccb1": "submitBlock(bytes32,bytes)", +"fab67bb6": "hasNotEnded()", +"fab825c6": "setCanvasName(uint32,string)", +"fab88d39": "STS(uint256,string,uint8,string)", +"fab8cbe4": "splitTokensBeforeDistribution(uint256)", +"fab93805": "ballotLog(bytes32[2])", +"fab9b243": "isUpgradable(address,address,string)", +"fab9caaf": "JungleScratch(address)", +"fab9f0c4": "DigiWillToken()", +"faba1f16": "_createPow(string,address,uint256,uint256,uint256,uint256)", +"fabacf0d": "Yetxkd1601()", +"fabae696": "updatefxFee(uint256)", +"fabb25fa": "x_constructor(address)", +"fabb7952": "setPaintingName(uint256,string)", +"fabbdc5b": "COIN_COST_ICO_TIER_2()", +"fabc1cbc": "unpause(uint256)", +"fabcc880": "update(uint256,int256[2],uint256[2],int256,bytes32,address,uint256,uint256,uint256[3])", +"fabde80c": "coinBalance(address)", +"fabe1416": "canClaimToken()", +"fabec44a": "getCurrentVersion()", +"fabee62d": "taxTo(address)", +"fabefafe": "computePayout(uint256,address)", +"fabf00c3": "NewGrant(address,address,uint256)", +"fabf5ea5": "maxInvestedLimit()", +"fabf657a": "approveAddress(address)", +"fabfbefb": "lastPayoutIndex()", +"fac08874": "BPTestCoin()", +"fac20ab8": "getGameWinner(uint256)", +"fac2548b": "updateMember(address,uint256,bool,string)", +"fac28349": "setInvite(address,uint256,uint256)", +"fac2b5f8": "setEplay(address)", +"fac333ac": "ids(uint256)", +"fac34ff6": "throwFoo()", +"fac3a4db": "changeWithdrawableNetfRe(uint256)", +"fac3c1f4": "setOracleName(address,string)", +"fac416ab": "PriceThreeEnable()", +"fac50e4c": "StgTwobonusEnds()", +"fac5235b": "teamTokensAllocated()", +"fac52bfd": "my_name()", +"fac57fc9": "hasUpgraded(address)", +"fac5bb92": "getPreRelease(bytes32)", +"fac5fbc7": "ContractDisabled(uint256)", +"fac647cc": "testLongerJson()", +"fac65256": "wavesTokens()", +"fac66f01": "getConditions(uint256,uint256)", +"fac67cf6": "updateVIPRank(address)", +"fac6a8a2": "withdrawExchangesToken()", +"fac6fb16": "getVoteStatusFromProposal(uint256,address)", +"fac6fe0c": "level_6_percent()", +"fac78d83": "tierModifiable(uint256)", +"fac7abe3": "latestAuctionIndices(address,address)", +"fac7b20a": "maxCapTokenTotal()", +"fac8a800": "isTeller(address)", +"fac952c5": "getLastWithdraw()", +"fac97122": "ownerSetJackpotAddress(address)", +"fac9d2c7": "Blockkonnect()", +"faca7cfa": "prevBalance()", +"facaa838": "IsEscrowActive()", +"facb2195": "setIntF1(int256)", +"facbf93b": "totalBlocks()", +"facc7905": "unLockTime()", +"facce5bb": "wingsTokenRewards()", +"facd0934": "BONUS_250_500()", +"facd743b": "isValidator(address)", +"face030b": "SpinTheWheel(address)", +"face873f": "getAllActiveSales()", +"face9e8e": "hash_sha256(string,uint256)", +"facef32a": "IGI()", +"facf55e6": "getMyClones()", +"fad09ab3": "closeProvider(address)", +"fad09c3c": "DemoContract()", +"fad15673": "UmkaToken(string,string,uint8,uint256)", +"fad18e7b": "registerNameXaddrFromDapp(address,bytes32,address,bool,uint8)", +"fad239ac": "PermTokenTest()", +"fad356f8": "testTransferFromSelf()", +"fad35818": "calcInviterBenefit(uint256)", +"fad3f8f7": "maxPreSale()", +"fad4b99a": "updateChannelMinimum(address,uint256)", +"fad4e1f2": "getIDMapping(uint256,uint256)", +"fad5a2af": "isClosedAndValid()", +"fad6049b": "_transferFrom(uint256,address,uint256)", +"fad60615": "roundProfitByAddr(address,uint256)", +"fad774ee": "BONUS_LEVEL_2()", +"fad7ed8c": "_A_tokenSaleCompleted()", +"fad8200e": "userToNumCelebs(address)", +"fad88be7": "VOISE()", +"fad8b32a": "revokeOperator(address)", +"fad9100c": "FOMOed()", +"fad992ea": "claimINRDividends()", +"fad9aba3": "dust()", +"fad9bf9e": "storeBlockWithFeeAndRecipient(bytes,int256,int256,bytes,int256,int256)", +"fada2c18": "transferBond(uint256)", +"fada4b76": "quater3()", +"fada5da1": "collectEth()", +"fadc0700": "InitiateMakes()", +"fadc342e": "_checkRevenueFactor(uint256,uint256,uint256,uint256)", +"fadc51cf": "isAlpha(bytes1)", +"fadc554b": "updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)", +"fadcd861": "createMarriage(string,string,string,string)", +"fadcf13c": "startBounty()", +"fadd3235": "gameEndBlock()", +"fadda208": "getMemberAdresse(uint256)", +"fadeb59c": "getListingDB(uint8)", +"fadf4cb2": "batchAssignTokens(address[],uint256[],bool[])", +"fadf4f3b": "GECToken(address,uint256)", +"fadf617b": "reveal(int128,string)", +"fadf87b1": "testGetBitsSuccess()", +"fae14192": "changeFeePercentage(uint256)", +"fae17e21": "createBid(uint256,address,address,address,uint256,uint256)", +"fae21f0a": "initBank()", +"fae24454": "removeFromManagementWhitelist(address)", +"fae25444": "getNumberOfOffers()", +"fae29ee8": "setWebInfo(string,string)", +"fae2dd4b": "myName()", +"fae429af": "NinjaCoinNC()", +"fae4a213": "buyWithAddressAndFunction(address,bytes4)", +"fae53222": "addPlayerGeneral(address,uint32,uint32,uint8)", +"fae59753": "transferOwnershipMessage(address)", +"fae6edcf": "getI2()", +"fae72303": "totalWeiRaisedDuringPhase3()", +"fae73549": "Burnt_Token()", +"fae8529a": "maxprice()", +"fae860db": "transferToLockedBalance(address,uint256,uint256,uint256,uint256,uint256,uint256)", +"fae8c29e": "setPromoPause()", +"fae8f9a2": "setInitialParent(int256,int256,int256,int256,int256,int256)", +"fae92612": "setMarketAddress(address)", +"fae95a71": "participationPresaleHistory(address)", +"fae9c6b3": "preICOTokenRemaining()", +"fae9d06d": "calculateTxFee(uint256,address)", +"faea1878": "cooRemoveCro(address)", +"faea624c": "VestTokens(address,uint256,uint256,uint256,bool,string,uint256)", +"faea9129": "Syndicate()", +"faed08a9": "reLoadXname(uint256)", +"faed1922": "purchaseWhaleCard()", +"faed77ab": "wipeAndFree(address,bytes32,uint256,uint256)", +"faed86ab": "strConcats(string,string,string,string)", +"faede6a1": "Y2_lockedTokenAmount()", +"faee13b9": "set(int8)", +"faee4402": "donateToWhale(uint256)", +"faee4a10": "initialBankroll()", +"faef2ad2": "getCategoryHash(address)", +"faeff650": "phase1TokenPriceInEth()", +"faf0952b": "testThrowRestartNotOwner()", +"faf21148": "ValoremICO()", +"faf236c7": "emitTokensFor(address,uint256,uint256,uint256)", +"faf27bca": "greeter(string)", +"faf3d174": "upgradeStart(address)", +"faf42125": "setTokenURIAffixes(string,string)", +"faf5115f": "setBank(address,address)", +"faf81ba5": "applyBonus(uint256,uint256)", +"faf87b8a": "payoutEF()", +"faf880ad": "SoftcapReached(address,uint256)", +"faf924cf": "proof()", +"faf95e3d": "PayForServiceETHEvent(address,uint256)", +"faf9859c": "NIU(uint256,string,uint8,string)", +"faf9b5cf": "mintSendTokens()", +"faf9f330": "accrueTeamTokens(address,address,uint256)", +"fafa4c82": "defaultTransferGas()", +"fafa8e1a": "removeDat(string)", +"fafaacfa": "hasConfirmed(bytes32,address,uint256)", +"fafb2330": "setPayout(uint256,uint256)", +"fafb3c7a": "giftCar(address,uint256,bool)", +"fafb76dd": "getOffsetIndex()", +"fafb9334": "roll_normal(address,uint256,uint256,bytes32,bytes32,bytes,bytes32,uint256)", +"fafbb62b": "create(string,string,uint8,uint256,address,string,address,address)", +"fafbb9a3": "getNextPayoutTime()", +"fafbcc08": "IBNZDEVELOPERSERC20_Crowdsale()", +"fafc56d9": "setStepTwoRate(uint256)", +"fafcdc34": "dist(address)", +"fafd2efb": "cashoutable(address,address)", +"fafd4bba": "RESERVED_TOKENS_FOR_CRYPTO_EXCHANGES()", +"fafd6bcb": "isConfirmedBy(bytes,address)", +"fafdb3af": "PlayerBalance(uint8,uint256,uint256)", +"fafe029f": "getWtotalTransCnt(uint8)", +"fafe0902": "gift_ClaimTINAmotleyLine(uint256)", +"fafe805e": "BLOCK_PER_PHASE()", +"fafe8845": "StateChanged(uint256,uint8)", +"faff50a8": "rootNode()", +"faff660e": "isPrivate()", +"fb007107": "CanMint(bool)", +"fb00cc67": "search_winner_bid_address(uint8)", +"fb00fec6": "getStatusForRootHash(bytes32)", +"fb0101c4": "getUserSpaceIds(uint256)", +"fb01badd": "companyShares()", +"fb01f4b1": "developerPrizeClaim()", +"fb02191c": "addRepo(bytes32,string)", +"fb03735e": "contractTokenReward()", +"fb03eaea": "getDisputeThresholdForFork()", +"fb048705": "itemOf(uint256)", +"fb04f22c": "secondReleaseDone()", +"fb054439": "canBearWith(uint256,uint256)", +"fb05594f": "STARTING_SHRIMP()", +"fb062a84": "offerOptionsToEmployeeOnlyExtra(address,uint32,uint32,uint32)", +"fb064161": "advisorsAllocation()", +"fb06603c": "modifyToken(address,uint256,string,string,string,string,bool)", +"fb070d0d": "CatFarmer()", +"fb0720dc": "icoStartP1()", +"fb072d2a": "random(uint256,uint8)", +"fb07ac86": "realPriceOracle()", +"fb083fdc": "EtherDelta()", +"fb088558": "contributeWithoutVesting()", +"fb08937c": "tokenTransfer(address,address,address,uint256)", +"fb08f3a1": "whitelistRequired()", +"fb08fdaa": "replaceContract(address)", +"fb099c84": "newInvestor()", +"fb09b1ac": "testBalanceOfReflectsTransfer()", +"fb09c964": "getXQU()", +"fb09db11": "setActiveWhitelist()", +"fb0a0344": "mockBuy()", +"fb0a2e3c": "buyerDecimals()", +"fb0a3867": "updateClientAddress()", +"fb0a8c62": "addGenerator()", +"fb0b0220": "outFromPool(uint256)", +"fb0b02cd": "destroyBucket(bytes32)", +"fb0b6b6d": "confirmTransactionByMediator(uint256)", +"fb0c0782": "buy2(uint256)", +"fb0c1faa": "LearnX()", +"fb0cf7ab": "getStagePrice(uint8)", +"fb0d7e43": "initialBonus()", +"fb0f6f42": "s1(bytes1)", +"fb0f9363": "getAuctions(address)", +"fb0f97a8": "depositToken(address,address,uint256)", +"fb0fcd8c": "triggerRselfdestructRefund()", +"fb101581": "transferToCharity(address)", +"fb10b0d3": "currentMaximumSalePercentage()", +"fb114f57": "oraclize_query(uint256,string,string[3],uint256)", +"fb11613e": "getGamesByDay(uint256)", +"fb1161f1": "bountyCap()", +"fb1291c3": "getPixels(bytes32)", +"fb12ee85": "amountOfOpenRFQs()", +"fb13a707": "changeVestingWhitelister(address)", +"fb13bfae": "getFreezeInfo(address)", +"fb1478e5": "changeSaleEndBlock(uint256)", +"fb14cbca": "check(bytes32,uint256,address,uint32,uint32,bytes32[])", +"fb14f058": "addVestingAdmin(address)", +"fb15e737": "boolToBytes32(bool,bool)", +"fb1641d6": "rejectGame(address,uint256)", +"fb1669ca": "setBalance(uint256)", +"fb1684f9": "lockTextKey(string,uint256)", +"fb171eac": "witdrawToken(address,uint256)", +"fb173712": "SetRate(address,address,uint256,uint256)", +"fb176b69": "paleyer1show(uint8,uint8,uint8,uint8,uint8)", +"fb17905f": "DemolishByCredits(uint256,uint256)", +"fb18962d": "setSoftwareTokensPercent(uint256)", +"fb1ace34": "notarize(bytes)", +"fb1ae783": "getWinnerTeam(uint256)", +"fb1bc4d7": "PsExToken()", +"fb1c3461": "_calculatePercent(uint256,uint256)", +"fb1ce13a": "TestEOSCoin()", +"fb1ce2ea": "NotifyMe(address,uint256)", +"fb1d8201": "addClaim(uint32,string,string,bytes)", +"fb1d9eea": "transferFundsTokens(address,address,uint256)", +"fb1db11f": "updateEarlyParticipantWhitelist(address,address,uint256)", +"fb1de995": "solveTask(uint256,uint256,uint256,int256,uint256,int256)", +"fb1e3804": "FULL_TOKEN_AMOUNT()", +"fb1e61ca": "getRequest(bytes32)", +"fb1f41f9": "info_OwnerTINAmotleyLine(uint256)", +"fb1fad50": "halt(uint256)", +"fb1fdc2e": "lengthNotEqual(address[],uint256,string)", +"fb2004f2": "BCOExtendedToken(address,string,string,uint256,uint256)", +"fb203f90": "ShopereumTokensPerEther()", +"fb20b70d": "setBonusDate2(uint256)", +"fb20d071": "registerVestingSchedule(address,address,uint256,uint256,uint256,uint256,uint256)", +"fb20d98f": "deleteEditor(address)", +"fb20dc80": "setPriceForVerification(uint256)", +"fb213549": "confirmApplication(address)", +"fb21364b": "allocate2ProjectToken()", +"fb214f4c": "presetGymTrainer()", +"fb218f5f": "storeData(string)", +"fb21eefd": "fwdData(address,bytes)", +"fb222d48": "extractVaultTokens(address,address)", +"fb236bba": "_deleteOffer(uint256)", +"fb237eb2": "isUserWhitelisted(address)", +"fb23bbb1": "BONUS_WINDOW_3_END_TIME()", +"fb241406": "RedPen()", +"fb25b62c": "LineToken()", +"fb2643c0": "DragonKing(address,address,uint8,uint8,uint8,uint16[],uint16[])", +"fb26c00f": "Treasury(address)", +"fb26c3f8": "minimumPresaleWeiDeposit()", +"fb26e2d8": "tgrStartBlock()", +"fb274654": "offerCollectibleForSaleToAddress(uint256,uint256,int256,uint256,address)", +"fb277a24": "testMintInvalid(int256)", +"fb27961c": "softCapAmount()", +"fb279ef3": "tip(uint256,address,uint256)", +"fb282a17": "distributeCallback(uint256,address[])", +"fb282f92": "solveGame(uint256,uint256)", +"fb283111": "setRunSwitch(bool)", +"fb2861ff": "MINTTIME()", +"fb2898e4": "startSaleDepo(uint256)", +"fb28be72": "SetupQPY(string,string,uint256,uint256,uint256,address,address,uint256)", +"fb293a34": "backGamePlayerCoinOwner()", +"fb29aa97": "getNumLoveItems()", +"fb2c95b6": "PlayX3()", +"fb2cb34e": "transferPaused()", +"fb2dfa45": "getKitties()", +"fb2e0078": "withdrawalFunds(bool)", +"fb2e3240": "setDOwnerFromClaim(bytes32,address)", +"fb2ee901": "getBattleFee()", +"fb2eff20": "PhoenixFund()", +"fb2f3a8a": "MAX_BOUNTY_SUPPLY()", +"fb2f5064": "getPendingTokens(address)", +"fb2fbf49": "registerEOSAddress(string)", +"fb305569": "UbiqIssued()", +"fb30d070": "setNewAge(int256)", +"fb31a6cc": "executeOffer(address)", +"fb31b262": "VuePayTokenSale()", +"fb31ff37": "getFullRecord(bytes32)", +"fb3220fe": "addNodalblockData(string)", +"fb3296ea": "transferFromNA(address,uint256)", +"fb32ade3": "releaseLockedTokensFor(address)", +"fb32aedb": "voteB()", +"fb32f4f5": "ARK_FLAGGER_1_00()", +"fb3458d1": "extractElementsFromGene(uint256)", +"fb346eab": "totalSpent()", +"fb34d075": "channelCloseTimeout(uint64)", +"fb34fc6f": "WatchNextBlockReward()", +"fb350502": "calculateWalletTokens()", +"fb35370b": "transferDari(address,address,uint256)", +"fb3551ff": "getAgent(address)", +"fb357f74": "EBLLToken(address,uint256)", +"fb35a4ba": "KKToken(uint256,string,uint8,string)", +"fb35b4e4": "totalDeployments()", +"fb35d545": "unlockDate4()", +"fb3650c2": "grab(address[],uint256[])", +"fb368e8f": "getServiceName(bytes32)", +"fb36eba1": "createCard(address,uint16,uint16)", +"fb36fae4": "setJpycContactAddress(address)", +"fb37baa1": "whitelistUserForTransfers(address)", +"fb386216": "getSeatAddress(uint256)", +"fb38ec94": "founder3()", +"fb3918d7": "fillReserve()", +"fb3979f0": "updateAccountChartAgainstExistingEntity(address,uint256,uint256,uint256)", +"fb3a1fb2": "getReleaseDb()", +"fb3a3ff3": "HODLERAddress(address)", +"fb3ab12b": "setEndSale(uint256)", +"fb3b11af": "CWCCToken()", +"fb3ba9b3": "LogNewBlacklistedAddress(address,address)", +"fb3bc400": "myProfitsReceived()", +"fb3c0d70": "transferFromToken(address,address,address,uint256)", +"fb3d8b6e": "SiringClockAuction(address,address,uint256,uint256)", +"fb3dc0b3": "Leader(string,address,bytes32)", +"fb3ea59b": "acceptBatched(address[],bool)", +"fb3ed5c7": "airdropSupply()", +"fb3f1fd6": "nextroundblocksbeforenewpay()", +"fb3f4d29": "tokenApprove(address,address,uint256)", +"fb3f71c8": "addContract(address,uint256,string)", +"fb3fd6a1": "m_bIsLock()", +"fb402c26": "BuyTokensWithTokens(address,address,uint256,uint256)", +"fb40340d": "totalNormalTokenGenerated()", +"fb40c22a": "getAllCases()", +"fb4101c0": "reward(address,bytes32)", +"fb43b2a2": "approveBreeding(address,uint40)", +"fb43d9f4": "getTotalValue(address[],uint256[],address)", +"fb441663": "claimExit(address[],uint256[],bytes,bytes,bytes32)", +"fb4460dd": "getVoterStakes(address,uint256)", +"fb45d080": "pieBalanceOf(address)", +"fb468340": "getTotalMember()", +"fb46d4c5": "tweet(string)", +"fb46d5b1": "awardCyclePrize()", +"fb46f492": "emissionMas(address[],uint256[],bytes32[],uint256[])", +"fb470a92": "FlukeCoins()", +"fb471ce5": "ERC223Transfer_enabled()", +"fb47a067": "_getRevisionBlockNumber(bytes20,uint256)", +"fb486250": "confirmOwner(uint8)", +"fb486c7b": "setGivenName(uint256,string)", +"fb48ca1d": "NewSuggestion(address,string,uint256)", +"fb48cf0e": "getVoter(uint256,uint32)", +"fb490695": "griefCost()", +"fb497ad2": "stage_1_TokensSold()", +"fb49dc4a": "AEFFTOKEN()", +"fb4a18a2": "setCrowdfundPayout(address,uint256)", +"fb4a6cde": "StarbaseEarlyPurchase()", +"fb4a86bc": "amountToBeRaised(bytes32)", +"fb4aa0a1": "fundReceiver()", +"fb4b7693": "sendSeedAndHash(string)", +"fb4cd8e2": "numBidders()", +"fb4ce0a9": "addAssetsOwner(address)", +"fb4da5b7": "pay(address,string)", +"fb4fbcd8": "getClaimTradingProceedsWaitTime()", +"fb4fd984": "requestPrize(bytes32,uint8,bytes32,bytes32)", +"fb50aec5": "getVendorApplicationStatus(string)", +"fb51a1ea": "read_total_purchased_today(address)", +"fb5209bf": "trickleUp(address)", +"fb524c32": "GetMaximumBet()", +"fb5274e5": "generateWinners()", +"fb54047c": "getCustomExtraData(bytes32,uint256,bytes32)", +"fb557c8c": "PrideToken()", +"fb5589b4": "memCopy(uint256,uint256,uint256)", +"fb55d09d": "EtherGames()", +"fb55ed2a": "transferBlocToUser(address)", +"fb58674d": "Npole()", +"fb598f87": "createPost(uint256,uint256)", +"fb5a3282": "restFinish(address)", +"fb5b82d0": "setCollector(address)", +"fb5bd32b": "withdrawDevBalance()", +"fb5d5729": "getPongvalTransactional()", +"fb5d5999": "getDepositary_function_control()", +"fb5d7376": "step4()", +"fb5e6a76": "WithdrawMulti(uint256,address[])", +"fb5f39dd": "offlineSell(address,uint256)", +"fb5f8a13": "changeAddressKnight(address)", +"fb5fef42": "distributeALCToken()", +"fb6021ae": "ICO(string,string,uint8,uint256)", +"fb60938f": "getSumAmountOfSuccessfulDeals()", +"fb6139b5": "setServerFee(string,uint256)", +"fb6168ac": "BUY_ME()", +"fb621f14": "getSecurityTokenAddress(string)", +"fb6287d2": "setWalletAddresses(address,address,address)", +"fb62e083": "addWhiteListed(address)", +"fb632ef9": "transferrableBalanceOf(address)", +"fb63c4fc": "MESSAGE_PRICE()", +"fb63e4b1": "CEZA(uint256,string,string)", +"fb640453": "_getTotalBmcDaysAmount(uint256,uint256)", +"fb644a14": "Force(address)", +"fb64e072": "recordTransfer(address,address,uint256,uint256)", +"fb64e6b1": "icoAddr()", +"fb656067": "genesisCallerAddress()", +"fb659c3a": "addArticleItem(uint256,bytes)", +"fb65a1a3": "teamdistr(address,uint256)", +"fb65a3cb": "createCampaign(bytes32,uint256,address)", +"fb65e4b1": "Contribution()", +"fb674cf4": "emissionEnabled()", +"fb67983c": "fuckingClaim1(bytes,bytes)", +"fb687c24": "refundMethodABI()", +"fb68a3be": "printTokens(uint256)", +"fb68aa89": "hasInitCard1()", +"fb690dcc": "donated(address)", +"fb6a53d2": "multiBurn(uint256[])", +"fb6aeb42": "PRE_PUBLIC_LOCKUP_PERIOD()", +"fb6b18c0": "totalAirDrop()", +"fb6b3857": "transfer_to_session(uint32,uint32,uint64)", +"fb6b4afd": "getWeaponModel(uint256)", +"fb6bbbce": "Crowdsale()", +"fb6c2b6f": "stopMarket(uint32)", +"fb6cae8e": "NetkillerToken(uint256,string,string,uint256)", +"fb6d0e8f": "pullShares(address)", +"fb6e155f": "availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)", +"fb6e6558": "holderNumber(address)", +"fb6f6875": "deleteHotel(address)", +"fb6f71a3": "setCharity(address)", +"fb6f93a4": "setEthUsdRate(uint256)", +"fb6f9579": "Increase()", +"fb702ed1": "multiDistribute(uint256[])", +"fb7043ea": "isRefundPossible()", +"fb709d2e": "charities(uint256)", +"fb70f765": "foundationTokenSupply()", +"fb70ff96": "increasePieceCount(uint256)", +"fb71807f": "setUser(string,string,bytes32,uint256,uint256,uint256[],string,string)", +"fb719113": "deathData_f17()", +"fb7248cb": "playerGuess(address,int16)", +"fb72d24e": "shift_right(uint64,uint256)", +"fb72fdfe": "setTotalAllowed(address,uint256)", +"fb73a593": "modifyAllLevelCaps(uint256[],uint256)", +"fb741504": "IndividualCapCrowdsale(uint256,uint256)", +"fb7450be": "setBtcToken(address)", +"fb74da7e": "setTentativeWinningPayoutDistributionHash(bytes32)", +"fb74e6f7": "ADVISOR_STAKE_FOUR()", +"fb756f97": "Tokenomicx()", +"fb75b2c7": "rewardWallet()", +"fb77269e": "periodITO_period()", +"fb77378a": "SCOOP()", +"fb775b46": "giver()", +"fb77eae2": "startTimeSaleWithBonus()", +"fb78eb53": "Oncology()", +"fb78f85c": "mgrCount()", +"fb791b0b": "withdrawOrder(uint256)", +"fb794281": "gas_amount()", +"fb79e70f": "superNovaSupply()", +"fb7a2c1f": "addQuestion(string,uint256,uint256,string)", +"fb7a5f4f": "getEndBlock()", +"fb7a809c": "buyStageDataRecord(uint256,uint256,uint256,uint256,uint256,uint256)", +"fb7ae31e": "getCurrentRoundLeft()", +"fb7baf70": "initRegistMatch(uint8,uint8,uint8,uint256)", +"fb7c0a3f": "doBuy(uint256)", +"fb7cb850": "setMaxMerge(uint8)", +"fb7cf694": "buyPriceInWei()", +"fb7e54eb": "vcx()", +"fb7e7456": "endOfLockProjectToken()", +"fb7f21eb": "logo()", +"fb80d66f": "SQR_TOKEN_MULTIPLIER()", +"fb80fe9e": "test(uint256,address)", +"fb81299b": "setAllMarketsFinalized(bool)", +"fb815503": "withdrawWin()", +"fb81563b": "SpaceImpulseERC20()", +"fb84da41": "createSketch(string,string)", +"fb850fab": "newCampaign(uint32,uint256)", +"fb8621df": "push(bytes32,string,bytes)", +"fb8632b8": "availableEmission()", +"fb867165": "getSaveData(address)", +"fb86a404": "hardCap()", +"fb87bf7b": "LLX()", +"fb87d5ea": "TransactionRequest(address[4],address,uint256[11],uint256,bytes)", +"fb87eb0b": "setRefundsActive(bool)", +"fb88e7c1": "updateBestPromouter(address,uint256)", +"fb890a17": "YUPToken(address,address,address,address,address)", +"fb89fb28": "yield7Day()", +"fb8a5bf8": "H2OC()", +"fb8a5f1c": "createTransaction(address,uint256,bytes32,address,address)", +"fb8b0197": "claimReceivables(address[])", +"fb8bc297": "getInvestorPackPrice()", +"fb8c7420": "GetRandomNumber()", +"fb8dd3bb": "createEvent(bytes32,bytes32[],address,uint256,uint256,uint256,uint256)", +"fb8e4f1a": "BountyChanged(uint256)", +"fb8e7870": "buyKebabs()", +"fb8e82b4": "min(uint32,uint32)", +"fb9073eb": "reLoadXname(bytes32,uint256)", +"fb913d14": "sendByTranche(bytes32,address,uint256,bytes)", +"fb920ad1": "reclaimAndBurn(address,uint256)", +"fb92488b": "ChangePrice(uint256)", +"fb92507d": "daytime(uint256)", +"fb92e4fb": "_isGoodAddress(address)", +"fb932108": "distribute(address,uint256)", +"fb950559": "getAffiliation(address)", +"fb950a7f": "addGrantableAllocation(address,uint256,bool)", +"fb95adeb": "testFailBlockhashInsuffiecientFee()", +"fb95d9e7": "addConfigEntryAddr(bytes32,address)", +"fb961571": "ICOStartBlockChanged(uint256)", +"fb969b0a": "bootstrap()", +"fb9734fc": "confirmProposal(address,bytes32,uint256)", +"fb979ba2": "ROUND_1_PRESALE_BONUS()", +"fb97b61f": "lpAskVolume()", +"fb98a409": "skinContract()", +"fb990288": "_newInterest(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fb9a0c58": "startRefundProcess(uint256)", +"fb9a2ce2": "getSellPosition(bytes32,uint256)", +"fb9a4595": "GitHubBounty()", +"fb9ab10b": "EpsToken()", +"fb9b4ab8": "createrAddress()", +"fb9ba033": "checkAllowedAddressForMinting(address,address)", +"fb9ba7bc": "removeAccreditedInvestor(address)", +"fb9bbeaf": "RaiSed()", +"fb9c7303": "completeInvestment()", +"fb9ca16b": "MarianaKey(uint256,string,uint8,string)", +"fb9cb15d": "numChipsMinted()", +"fb9dd851": "getGameInfoByIndex(uint256)", +"fb9ded46": "totalWeiRaisedDuringICO3()", +"fb9e1270": "investmentIdLastAttemptedToSettle()", +"fb9ec0a8": "assignPersiansToBattle(uint256)", +"fb9efcf0": "setCustodianForeign(address)", +"fba06849": "fipsPublishDataMulti(bytes20[],bytes)", +"fba07791": "fiatCost()", +"fba0aa5b": "txFeeSentInWei()", +"fba0ce5e": "setLinkedIn(string)", +"fba12c17": "minerLockAddress()", +"fba13bd0": "depositBalanceOf(address)", +"fba17fc9": "Flye()", +"fba246de": "DepositETH()", +"fba26207": "setUint64(int64,uint64)", +"fba2a2d2": "setPeriod(uint16)", +"fba2b18b": "_getplayersurplus()", +"fba2fb66": "newPolicy(bytes32,bytes32,uint256,uint256,uint8,bytes32)", +"fba36b31": "payWithRef(address)", +"fba4734f": "withdrawEthereum(uint256)", +"fba4abb2": "payoutBalanceCheck(address,uint256)", +"fba52ff1": "getInvestorClaimedTokens(address)", +"fba5de1c": "cancelGetTogether()", +"fba5ee24": "getSinistre_effectif()", +"fba5f1f6": "weaponModels(uint256)", +"fba6651c": "getCommunityTaxes(uint256)", +"fba6748c": "getMaxPrivateSaleBuy()", +"fba6e51b": "_getFinalAddress(uint256[],address[],uint256)", +"fba70381": "adventureByToken(address,uint256,uint256,uint256,uint64,uint64)", +"fba71fe9": "periodICOStage6()", +"fba74490": "PoseidonQuark()", +"fba779f6": "armyHelicoptersCount(uint256)", +"fba79777": "test1cash()", +"fba7c1ab": "addMake(string,address,uint256,uint256)", +"fba7cc79": "getIsActive()", +"fba83066": "topSalesRatio(uint16)", +"fba84b2a": "LjwStandardToken()", +"fba90629": "totalSupplyPrivateSale()", +"fba906c5": "HiroyukiCoin()", +"fba939f8": "_goal()", +"fba9ce40": "donateToDev()", +"fba9cea9": "someAction(address)", +"fba9dbbb": "chnageSpecialFeeTake(uint256,address,uint256,uint256)", +"fba9ecac": "getFreeBanker()", +"fbaa0ece": "weekTwoRate()", +"fbaa6050": "getApprovalRequirement(bytes4)", +"fbaa89d3": "LogBidRemoved(address,uint256)", +"fbabc444": "PeaceChainToken(uint256,string,string)", +"fbabdb06": "disapprove(address,uint256)", +"fbac3951": "isBlocked(address)", +"fbac7d1d": "setCampaign(bytes32,uint256,uint256,uint256,uint256,bool,address)", +"fbac89f6": "unlock(bool)", +"fbacc43f": "getBases()", +"fbad8983": "sendyum(address)", +"fbae5e7d": "Investors(uint256)", +"fbaeac89": "newOwnerAPI()", +"fbaf094a": "provider(address)", +"fbaf12a7": "_removeBlacklistedUser(address)", +"fbb0eb8b": "mintingNonce()", +"fbb11f29": "setTokenGbi(address)", +"fbb1c5c4": "XBCOMMUNITY()", +"fbb26d00": "releaseBasicAccount()", +"fbb39f6e": "offerTrade(uint256,uint256)", +"fbb4d51b": "OverseasReturneesUnion()", +"fbb4dc6b": "secondMonthEnd()", +"fbb4f0e3": "NuToken()", +"fbb58c5c": "STARTING_FALCON()", +"fbb5d52d": "sellCoinsToICO(uint256)", +"fbb5f682": "KUNTEStandardToken(uint256,string,uint8,string)", +"fbb6272d": "tokens(uint32)", +"fbb65708": "freedWinPoolForSecondStage()", +"fbb78719": "private_setmaxBet(uint256)", +"fbb8932a": "getSeatMessage(uint256)", +"fbbb75c5": "getClaimedOwners()", +"fbbc3448": "getWrefundIndex(uint8)", +"fbbcb4de": "GointoMigration(address)", +"fbbd6545": "pushHatch(address,uint32,uint16,uint16)", +"fbbdb68c": "hiddenOwner()", +"fbbdbf22": "_setTimes()", +"fbbe20a9": "breeding(uint256,uint256)", +"fbbe7887": "NewBOP(address,address,uint256,uint8,uint256,string)", +"fbbedf5c": "ERC20Token(string,string,uint8,uint256)", +"fbbf119b": "BTCCCoin()", +"fbbf93a0": "getDetails()", +"fbbfa45e": "destory(address)", +"fbbfe830": "refundTokenHolder()", +"fbc00b4a": "GACC()", +"fbc032ab": "GCFcoinF(uint256,string,string)", +"fbc09b26": "m_totalDatasetCount()", +"fbc34d1c": "artistsArtworkCount(address)", +"fbc3d0ef": "frozenReserveTeamWallet()", +"fbc402fc": "updateDarknodeBond(address,uint256)", +"fbc44458": "setTransferAuthorizations(address)", +"fbc449a7": "FirstContract()", +"fbc47e56": "tokenListContract()", +"fbc4f981": "ReceivedBTC(address,uint256,string)", +"fbc53c8e": "Arascacoin(uint256,string,string)", +"fbc5db95": "lowestAskTime()", +"fbc6c0f0": "firstChipBonus()", +"fbc6d0ff": "confirmTransactionWithSignatures(bytes32,uint8[],bytes32[])", +"fbc6d545": "ADST()", +"fbc7ad3e": "finishedLoading()", +"fbc805ee": "changeMaximumContributionForAllPhases(uint256)", +"fbc80af6": "FakeNewsToken()", +"fbc8aafe": "delegateExecute(address)", +"fbc94bd1": "icoFinishInternal(uint256)", +"fbc94f24": "changeTokenPrice(uint256)", +"fbc990d0": "_removeMember(address)", +"fbc9c601": "requestAccess(address,int256,address)", +"fbca1c9d": "get_charge()", +"fbca6ba6": "maintenance(uint256)", +"fbcbc0f1": "getAccount(address)", +"fbcc3775": "isMyWalletLocked_Send()", +"fbccc2b1": "setBoolF1UintF1StrF2Intf3(bool,uint256,string,int256)", +"fbcebd02": "delegatedRefund(address)", +"fbcece85": "freeTokens(address,uint256)", +"fbceff0e": "WangWangCoin(uint256,string,uint8,string)", +"fbcf1594": "UNLOCK_TEAM_2()", +"fbcfa0d7": "createCard(string,uint256,address,address,bool)", +"fbd06cb6": "s42(bytes1)", +"fbd0c5d7": "SaleClockAuction(address,address,uint256)", +"fbd0e7df": "Reimburse()", +"fbd15163": "lengthMessages()", +"fbd18b58": "setBlockBalance(uint256,uint256,uint256)", +"fbd1df54": "TotalCount()", +"fbd1eb7b": "deployAgentWallet()", +"fbd22407": "EscrowRaj()", +"fbd275f8": "randomGen(address,uint8)", +"fbd2dbad": "previousDelegates(uint256)", +"fbd395f8": "pauseToken(uint256)", +"fbd3c51a": "left83(uint256)", +"fbd3d51b": "setMasterAddress(address,address)", +"fbd4200c": "base_token_is_seeded()", +"fbd42e0f": "releaseLockedTokens()", +"fbd4e0f0": "chkdrawadm(address)", +"fbd54a63": "sendAmount(address[],uint256)", +"fbd59425": "ETLToken()", +"fbd668a9": "setMaxProfit(uint256)", +"fbd6d77e": "addCoordinator(address)", +"fbd6fdde": "reLoadCore(uint256,uint256)", +"fbd70768": "___setProxyOwner(address)", +"fbd7b853": "setTokenSupplyLimit(uint256)", +"fbd7c5f1": "priceT3()", +"fbd7d081": "TOKEN_HODL_3M()", +"fbd81564": "logger(string)", +"fbd902f2": "_distributeTokenToPurchaser(address,address,uint256)", +"fbd95a39": "sendToAddress(address,address,uint256)", +"fbd9c625": "changeAddressPaladin(address)", +"fbd9c902": "vendi()", +"fbda68e2": "numberOfMessages()", +"fbdafaf9": "getInvestorAtIndex(uint256)", +"fbdb70fb": "KRWT()", +"fbdbad3c": "lastCompletedMigration()", +"fbdc03fe": "nettingContractsByAddress(address,address)", +"fbdc562a": "setCanChange(bool)", +"fbdd3982": "s17(bytes1)", +"fbdd7852": "Ownership()", +"fbdd8508": "PriceAccepted(uint256,uint256)", +"fbdda15a": "isTrustedContractAddress(address)", +"fbde47f6": "FEE_RANGE()", +"fbde5b64": "gameLength()", +"fbde8ad4": "pStartBlock()", +"fbde8d75": "manualWithdrawTokens(uint256)", +"fbdeecab": "endTimePreIco()", +"fbdf0378": "getAllChildren(bytes32)", +"fbdf45c8": "ZoosCoinToken()", +"fbe00e8e": "receiveEtherFromGameAddress()", +"fbe04e1c": "boolFunc(bool,bool,bool)", +"fbe0508c": "toggleActive(bool)", +"fbe093dc": "targetFeePeriodDurationSeconds()", +"fbe0fa4b": "checkDivsMgView(address)", +"fbe2e125": "addBet(uint256,uint8,uint256,bool)", +"fbe334f8": "getNumFulfillments(uint256)", +"fbe3462c": "minBuyRateInPrecision()", +"fbe3549c": "addWeight()", +"fbe38ffb": "canEscapeTo(uint32,int256,uint32)", +"fbe3bb40": "TSTOraclzAPI()", +"fbe3e1a2": "_setCap(uint256,string)", +"fbe413e4": "createMember(address,bytes20,uint64)", +"fbe45b48": "unitPLATCost(uint256)", +"fbe5ce0a": "removeOwner(address,address)", +"fbe5d87e": "getTotalCollected()", +"fbe6529f": "findOldest()", +"fbe6a9b2": "winners_count()", +"fbe7913f": "Accept_Payment()", +"fbe89965": "GoldenCoinToken()", +"fbe8dab9": "getProfitForDay(uint256,uint256)", +"fbe9bb6d": "_isValidDepositCountry(uint256,uint256,uint256)", +"fbeaa807": "RefundSent(uint256,address,uint256)", +"fbeaaed2": "VersionedAgreementControll()", +"fbeac9c9": "setRefBonus(address,uint256)", +"fbeaebc6": "murder()", +"fbeb89dd": "tournamentContract()", +"fbebc9af": "getPixelAuthor(uint32,uint32)", +"fbec4769": "MatchpoolAdministrator()", +"fbec51bc": "requestRedemption(address)", +"fbec6f21": "gold()", +"fbec9121": "maxRandom(uint256)", +"fbece99f": "abortive(uint256,uint256)", +"fbee7b58": "giftIsFrom()", +"fbeecb47": "safeTransferByContract(address,address,uint256)", +"fbeee7e4": "isPeriodClosed(uint256)", +"fbef0195": "_calcDelta(uint256,uint256,uint256,uint256)", +"fbef957b": "ada()", +"fbf05e69": "GasLog(string,uint256,uint256)", +"fbf0ade1": "setOwnerFee(uint256)", +"fbf0f7da": "buildOutAddress()", +"fbf184c6": "getBankermasterReq()", +"fbf1a44b": "holyBountyFundDeposit()", +"fbf1f78a": "unapprove(address)", +"fbf22dea": "issueSoftcapToken(address,address,uint256)", +"fbf2360c": "isMessageEnabled()", +"fbf2dd6a": "depositTokensForAccount(address,address,address,uint256)", +"fbf350e2": "TokenBBBasic()", +"fbf3c88d": "getSignedPublicEncKey(address)", +"fbf405b0": "pinakion()", +"fbf42072": "CashPoints1()", +"fbf44a1b": "setOraclizeGas(uint256)", +"fbf552db": "hint()", +"fbf561fe": "developer_add_address_for_A(address)", +"fbf58b3e": "transfer(string,address)", +"fbf69367": "FuleexToken()", +"fbf788d6": "cash(address,uint256,uint8,bytes32,bytes32)", +"fbf7980f": "setChainsAddresses(address,int256)", +"fbf7ba65": "claimExploreItem(uint256)", +"fbf7e985": "ExaUSD()", +"fbf80773": "isUserRoot(address)", +"fbf82d31": "WorldWideCoin()", +"fbf9180e": "getLastAuditTime(address)", +"fbf92322": "getPoolSizeQspWei(uint256)", +"fbf94ce1": "GlaidexToken()", +"fbf9dab7": "getBetters()", +"fbf9dc12": "GoldBank()", +"fbfa49a8": "icoWithdraw()", +"fbfa4b7f": "requestsCount()", +"fbfa77cf": "vault()", +"fbfb76c4": "GUAEX(uint256,string,string)", +"fbfb77d7": "setArquivo(bytes)", +"fbfb7e70": "market_WithdrawForSale(uint256)", +"fbfb8b02": "createMintRequest()", +"fbfbb62e": "BASE_CLB_TO_ETH_RATE()", +"fbfc1653": "XBLToken()", +"fbfca20b": "_Send_Bettings_to_Winner(uint256,uint256)", +"fbfd1da4": "getKeccak256Uint(uint256,uint256)", +"fbfd45f5": "PRE_SALE_START_2()", +"fbfd90cb": "finishBurningByCreator()", +"fbff728f": "HodboCrowdsale()", +"fbffb355": "testBitsEqualFailIndexOOB()", +"fc00234e": "icoStage()", +"fc006216": "MODICOIN()", +"fc01157c": "firstCrowdSaleEndDate()", +"fc017495": "EmployeeOptionsExercised(address,address,uint32,bool)", +"fc018c05": "makePublic()", +"fc01987b": "setLockAccount(address)", +"fc01abbe": "stringToBytes32(string,string)", +"fc01ce83": "increaseClaimsBalance(address,address,uint256)", +"fc01dfbb": "mintUpto(address,uint256)", +"fc0262e0": "CpublicGold()", +"fc02c1df": "assertExpectations()", +"fc03441c": "allDecimals()", +"fc034bd8": "getPoolOwners()", +"fc036d7c": "SECURITY()", +"fc037776": "assertEq31(bytes31,bytes31)", +"fc03c7ec": "setLockend1(uint256)", +"fc03fb11": "MacBookOracle()", +"fc043830": "getNetworkFee()", +"fc043cad": "setPullPaymode()", +"fc04771a": "RT()", +"fc04a2ec": "_getOriginAddressHash(address,address,string)", +"fc04c0c4": "partnerTransfer(uint256,bytes32,address,uint256)", +"fc04c62e": "offerAsSacrificeFromVault(address)", +"fc05a6fc": "getPeopleBeforeMe(address,address)", +"fc06013a": "updateTokenEmission(uint256,uint256,uint256,uint256)", +"fc0656c9": "candyTokenAddress()", +"fc06a877": "createApp(string,uint256,string)", +"fc06d2a6": "sunrise()", +"fc078bd4": "GDCAcc05()", +"fc0808e5": "bet_MIN()", +"fc091b71": "MitCoin()", +"fc09ff9e": "submitTransaction(address,string,string,uint8[],bytes32[],bytes32[])", +"fc0a39b7": "isJackpot(bytes32,uint256)", +"fc0c3460": "CryptoSoft()", +"fc0c38a7": "Dsocial()", +"fc0c50fe": "getCallPtr()", +"fc0c546a": "token()", +"fc0d0117": "masterWallet()", +"fc0dce74": "ATL(address)", +"fc0e3d90": "getStake()", +"fc0e4262": "___AllBalance()", +"fc0e64de": "setInitialGasForOraclize(uint256)", +"fc0e74d1": "shutdown()", +"fc0ea853": "processWithITG(address,uint256)", +"fc0f392d": "activateSafeMode()", +"fc100eb2": "inxToken()", +"fc10655e": "actual_feedin()", +"fc10881a": "CXCoin()", +"fc108f70": "GamblerPerAddress(address)", +"fc10d4d5": "getFeeRecipientById(uint256)", +"fc11f71c": "setInstructor(address,address,uint256,bytes16,bytes16)", +"fc122892": "deleteOpenAction(string,address,string)", +"fc12c7da": "blocknumbersOf(uint256)", +"fc12dfc7": "weiDelivered()", +"fc13440c": "HealthCharityToken(uint256,string,uint8,string)", +"fc136941": "EmergencyWithdrawalProposed()", +"fc13a76a": "testFailAddForeignChildNotInUse()", +"fc14230f": "wei2euroCents(uint256)", +"fc143f2b": "defrostOwner()", +"fc14a47c": "CTBToken()", +"fc14ed71": "updateForSale(uint256)", +"fc157b13": "getOrganFunction(uint256)", +"fc15dcef": "resAmount()", +"fc1711f2": "setWeight(uint256)", +"fc176c4c": "getAdsCountByUser(address)", +"fc177bd6": "resetArray()", +"fc178f2a": "MoonTokenERC20(uint256,string,string)", +"fc17ce26": "Panthercoin()", +"fc17d2ac": "setFunctionEightPrice(uint256)", +"fc184fff": "addPhenomenon(string,string,string,uint8)", +"fc190261": "getIntervalsForWindow(uint256,uint256,uint256,uint256,int256)", +"fc190d6e": "newUpdate(string,bool)", +"fc192fb0": "setMinimumWithdrawal(uint256)", +"fc196cf3": "getNoInvestor()", +"fc1a1110": "currentLiquidInDeal()", +"fc1a142d": "adPriceHour()", +"fc1a3f0a": "decreaseTokenLock(address,uint256)", +"fc1adfdf": "invest(address,uint256,uint256,uint256)", +"fc1b8a7e": "richestPlayer()", +"fc1b9286": "rewardActivityEnd()", +"fc1c01b2": "setCrowdsaleParams(uint256,uint256,uint256)", +"fc1c2180": "setHotWalletAddress(address)", +"fc1c32fa": "fundariaBonusFundAddress()", +"fc1c5218": "RemoveOpenOrder(uint32)", +"fc1c9620": "depositOrWithdraw(address)", +"fc1da46a": "parcipateCrowdsaleAll()", +"fc1dfdf1": "extraData1FromHash(string)", +"fc1e1a32": "NetfBalance()", +"fc1e2ce9": "getGameAmounts(uint256)", +"fc1eb4d1": "withdrawPoly()", +"fc1ed437": "initialAmount()", +"fc1f2a70": "Add(uint256,string,string)", +"fc1f2d46": "setAllowTransferWhitelist(bool)", +"fc1f5c9c": "personalSegmentHash(string,uint256,bytes32)", +"fc1f5e53": "resetTimeLockValue(address)", +"fc1f7652": "_isBoardMember(address)", +"fc200a55": "mintWithTimeLock(address,uint256,uint256)", +"fc201122": "_setOwner(address)", +"fc204334": "sendAwardToLastOne()", +"fc207c8f": "periodAt(uint256)", +"fc21fa40": "getAmountByCurrency(uint256)", +"fc223410": "doBet(uint256[],uint256[],uint256[],uint256)", +"fc22545c": "getPreICOFundersCount()", +"fc22a9f8": "initialIssuance()", +"fc22d0e5": "migrate(address,uint256,uint256)", +"fc23466d": "search_data()", +"fc235fb8": "timeWaitApply4Redeem(address)", +"fc236188": "setData_7(string)", +"fc23f5b1": "getAddressByID(uint256)", +"fc248fd6": "RegisterNode(bytes32)", +"fc24e589": "badgeTotalSupply()", +"fc2525ab": "get(address,string)", +"fc252b94": "_getBuyPrice()", +"fc257baa": "traderWithdrawalSignals(address,address)", +"fc2584a2": "fillOrMarket(address)", +"fc26088e": "K_INITIAL_SUPPLY()", +"fc2615d5": "getRemainTime()", +"fc2634b7": "callURL(string,string,string)", +"fc26d522": "tip_total()", +"fc26fe01": "setairDropManagerLimit(uint256)", +"fc27ea83": "defaultAmount()", +"fc281217": "TokenInformation(address)", +"fc284d07": "earlyBackers(uint256)", +"fc28bc8f": "staffContract()", +"fc2b8b7b": "initTokenSupply(uint256)", +"fc2b8cc3": "quit()", +"fc2bd7ae": "sendtoMultiWallets(address[],uint256[])", +"fc2c1ddb": "setItemAvailable(uint256,bool)", +"fc2c3e08": "getIteration()", +"fc2d2b69": "SmartBondsToken()", +"fc2d64e3": "getProviderData(address)", +"fc2df281": "withdrawICOEth()", +"fc2e5bf2": "OfferOnHold(uint256,bool,address)", +"fc2ea8a5": "airdropAmount()", +"fc2f5e67": "recoveryAllowed()", +"fc300522": "getCallFee(bytes32)", +"fc303ef1": "destroyBottle()", +"fc3087f8": "withdrawAll2()", +"fc314e31": "tokenDetails(uint256)", +"fc317cbe": "mainSaleDate()", +"fc322d73": "challengers(bytes32)", +"fc324642": "__createNewToken(address,string,uint256,uint256,uint256,uint256)", +"fc325efd": "getItemByIndex(uint256)", +"fc3280c2": "getDegreeAtIndex(uint256)", +"fc32f09c": "MyShareToken()", +"fc331ebb": "transfererc20(address,address,uint256)", +"fc334e8c": "reveal(bytes32,bytes32)", +"fc335bb5": "OrmeCash()", +"fc337f5a": "getFreeCat()", +"fc342947": "renewFeatured(uint256)", +"fc34b908": "TOTAL_BONUS_SUPPLY_ETH()", +"fc366a2a": "RETZE()", +"fc36cc9d": "setCoolHero(uint32)", +"fc36e15b": "vote(string)", +"fc37987b": "buyRate()", +"fc380d96": "addBonusTokens(uint256,uint256)", +"fc384b7c": "executeStackholderTransaction(uint256)", +"fc385d51": "changeRelease6m(address)", +"fc3880ae": "priceWithBonus()", +"fc38ce19": "validPurchaseTokens(uint256)", +"fc38d4a4": "upgradeAgility(uint256,uint256)", +"fc395c90": "AddBillModerator(address)", +"fc3b7379": "lastBlock_a18()", +"fc3c28af": "devPercent()", +"fc3c8561": "testDistribute(uint256,address[],uint8[])", +"fc3d9f9f": "calcUnMaskedKeyEarnings(uint256,uint256)", +"fc3daf81": "_CalcDiv()", +"fc3f162b": "unregisterAuditor(address)", +"fc3fc168": "DIVIDEND()", +"fc3fc4ed": "getAuctionInfo(uint256)", +"fc4116bb": "p_update_mResalePlotTaxPercent(uint256)", +"fc416159": "coreERC()", +"fc429e6a": "transfer_from_session(uint32,uint32,uint64)", +"fc42b58f": "getTransferFee(address,uint256)", +"fc4333cd": "clean()", +"fc434891": "unWhitelistAddresses(address[])", +"fc43bbfb": "setWhitelistAddress(address,uint256)", +"fc442ec3": "getFlavor()", +"fc44e41b": "RANDOMFACTToken()", +"fc44fd28": "payBalanceToReturnWallet()", +"fc450ae6": "MummyAccountWithdraw()", +"fc45c822": "getDividends(address,address)", +"fc470105": "TestcoinToken()", +"fc47b9d2": "brulerDe(address,uint256)", +"fc47fcf5": "total_devidend()", +"fc48b653": "authorizedTransfer(address,address,uint256)", +"fc49926f": "getCountdowns()", +"fc4a089c": "newPermission(bytes32,address[],bytes4[])", +"fc4a4a1e": "StartTime()", +"fc4b01ff": "addTicketsToDraw(uint256,uint8,uint8)", +"fc4b2473": "ALC_CONTRACT_ADDRESS()", +"fc4bd9d7": "throwIfSetPresaleTokensAfterSaleStarts()", +"fc4c0daa": "_agent()", +"fc4d20f5": "addMonsterObj(uint32,address,string)", +"fc4d705b": "COLOR_GOLD()", +"fc4db64e": "SendAmount(address,address,uint256)", +"fc504655": "getPriceInWei()", +"fc512b92": "postCrowdsaleWithdraw(uint256)", +"fc515d93": "approvedAddressSize()", +"fc51b9c5": "cancelOrder(address[3],uint256[5],int256,int256)", +"fc51daef": "getCurrentRoundWinner()", +"fc523f7a": "settte(uint256,address)", +"fc525c75": "Ammbr(string,string,uint8)", +"fc52be0a": "getLatestTokenAllocation(address,address)", +"fc52cc1d": "incPreSell(address,uint256)", +"fc52f2eb": "DogRacingToken()", +"fc5378bb": "getEmployeeInfoById(address)", +"fc539a4a": "getInstances(bytes32)", +"fc53c821": "getMembersLength()", +"fc53f958": "ADMIN_ALLOWANCE()", +"fc53fe51": "_authorizePayment(address,uint128)", +"fc548f08": "changeArbitrator(address)", +"fc55c8d6": "buyPixel(uint256,bytes32)", +"fc55ea9d": "removeCustomer(string)", +"fc56200e": "JCFv1(uint256,string,string,uint8)", +"fc563658": "getNumber(uint256)", +"fc578323": "getProposalProposedBy(bytes32,bytes32)", +"fc57fadf": "IsValidAddress(address)", +"fc58452e": "castVote(bytes32,uint16)", +"fc58edea": "FoundationAddressFreezeTime()", +"fc58fc49": "setUser(address,address,string,uint256)", +"fc59116d": "setTokenTypes(uint16,uint16,uint16)", +"fc591ce5": "AddForm46(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fc5a0152": "div256(uint256,uint256)", +"fc5ab1c6": "_unlockOther(address)", +"fc5b57a6": "removeStackholder(address)", +"fc5b652a": "LogNeumarksBurned(address,uint256,uint256)", +"fc5be8ec": "bonuscalico(uint256)", +"fc5c0cde": "allTimeDiscount(uint256)", +"fc5d9244": "totalBonusTokens()", +"fc5e2cce": "calculatWithdrawForPeriod(uint8,uint256,uint256)", +"fc5eb846": "currentHunterNumber()", +"fc5f3e1d": "ATEC_Token()", +"fc5faa82": "ProWalletToken()", +"fc5fc345": "getPlayerIds()", +"fc5fc8ae": "preICOEnds()", +"fc601902": "_isAdmin()", +"fc608e17": "getAllocatedTokenCount(address,address)", +"fc60bb36": "_removeGroupFromMember(address,bytes32)", +"fc60e82c": "calculatePrize(uint256,uint256,uint256,uint256)", +"fc612a8d": "priceUpdater()", +"fc623ef8": "hashToSign(bytes32)", +"fc632647": "MNToken(uint256,string,uint8,string)", +"fc63977a": "getAddressFromUsername(bytes32)", +"fc63d4fb": "order(bool,uint32,uint128)", +"fc63dad6": "getLastBuyer(bytes32,uint8)", +"fc65169a": "phase4Duration()", +"fc65b3ac": "all_team_accounts()", +"fc65ee05": "marginCallOnBehalfOfRecurse(address,address,bytes32,uint256)", +"fc65f812": "_currentPrice(uint256)", +"fc6634b9": "setSellPrice(uint256)", +"fc673c4f": "operatorBurn(address,uint256,bytes,bytes)", +"fc676652": "Embassy(address,address)", +"fc67af2d": "withdrawCommunityBalance()", +"fc68521a": "f(address)", +"fc687311": "betOn(int8)", +"fc688e87": "logAccount(address,uint256)", +"fc6a0ca6": "changeTeamSize(uint8)", +"fc6a3ff7": "ticketsOwnedByUser(address)", +"fc6b72b6": "bringCat(uint256)", +"fc6c403b": "getMySalePrice(bytes32)", +"fc6d0dd0": "getLightingWithdraw(address,address,bytes32,bytes32,uint256,uint32)", +"fc6d1892": "setArrUintField1(uint256[])", +"fc6def15": "decider()", +"fc6e33ee": "MAX_SALE_DURATION()", +"fc6ef5a5": "getUserTokenLocalBalance(address)", +"fc6f46a0": "addTether(address,string,uint256,uint32,string)", +"fc6f9468": "adminAddress()", +"fc6fadec": "LoggedReward(uint256,string,uint8,string,bool,bool)", +"fc700dc0": "createBucketLender(bytes32,address,address,address,uint32[7],address[],address[])", +"fc70b462": "viewReputation(address)", +"fc722b2b": "trustedDarknodeRegistry()", +"fc72c1ef": "ERC20Base(uint256)", +"fc735e99": "verify()", +"fc7368fa": "reopenBet(uint256)", +"fc73c86e": "getInvestments(address)", +"fc73ec00": "changeDividend(uint256)", +"fc741c7c": "makerFee()", +"fc749323": "NTC()", +"fc74dadd": "delegateProxy(address,bytes)", +"fc74f55c": "IexecHubAccessor(address)", +"fc753ce3": "NAME_ARK()", +"fc756c69": "createship(uint256,address)", +"fc7596a8": "GoldBoxToken()", +"fc763176": "agreeAmendmentJUR(address)", +"fc76501a": "preIco1Raise()", +"fc76687c": "jinglesOnSale(uint256)", +"fc77060d": "withdrawEtherHomeExternal()", +"fc772c8b": "reclaim(address)", +"fc773166": "GCoin()", +"fc78b430": "delegateVote(address,address,uint256)", +"fc792719": "hasBeenClaimed()", +"fc794183": "timesfucky()", +"fc79c8eb": "TBCoin()", +"fc7ae9f5": "presaleMaxContribution(address)", +"fc7b78b1": "changeVestingAgent(address)", +"fc7b9c18": "totalDebt()", +"fc7ba686": "affiliatesCutOutof100()", +"fc7c1c80": "getParentB(uint256)", +"fc7c41af": "doDisown()", +"fc7cb268": "PoSToken()", +"fc7d07ce": "AllocateFounderTokens()", +"fc7d2b3a": "EtherOcrend()", +"fc7d6518": "getLockSdc()", +"fc7e061f": "convertPresaleTokens(address,uint256,uint256,string)", +"fc7e286d": "deposits(address)", +"fc7e4768": "saleMinShares()", +"fc7e9c6f": "nextIndex()", +"fc7f1a88": "increaseBurnApproval(address,uint256)", +"fc7f7957": "callMeMaybe()", +"fc7fcae1": "extractFund(uint256)", +"fc800df4": "getBuyerbyaddress(address,address)", +"fc818684": "burnFromContract(uint256)", +"fc8234cb": "_unpause()", +"fc82d0f7": "currentIterationSupplyLimit()", +"fc836563": "SendTokens()", +"fc845834": "GoldenCoin()", +"fc860e96": "emissionTime()", +"fc862027": "setNameTAOLookupAddress(address)", +"fc86a7a5": "getTokenSoldPrice(uint256)", +"fc87790f": "addToWithoutFee(address)", +"fc8791c0": "change_p1(uint256)", +"fc87c766": "addressCap(address)", +"fc880be0": "SetCommissionValue(uint256)", +"fc882dff": "ownerHashed()", +"fc88ee77": "optionExerciseOf(address)", +"fc891b97": "MosesToken()", +"fc892cfe": "setup_token()", +"fc89aff6": "submitVerifiedUsers(address[])", +"fc89f349": "ORZToken()", +"fc8aaa76": "disableManualEmission(bytes32)", +"fc8ad37c": "changeParameters(uint256,uint256,uint256)", +"fc8b4a90": "checkDuplicateMatchId(address,uint256,uint256)", +"fc8bbb6d": "AddresstoAsciiString(address)", +"fc8c2f0d": "AlphaMarketTeamBountyWallet(address[],address)", +"fc8cddf2": "ARCADIA()", +"fc8d4f4f": "getShareHoldersInfo(uint256)", +"fc8dae84": "AllAmericanCoin()", +"fc8f3a94": "_getPayTo()", +"fc8f616e": "XXX()", +"fc8fc6f7": "KittyCoins()", +"fc9017a8": "sendMessage(address,string,bool,uint256,bytes32)", +"fc906720": "setSiringWithId(uint256,uint32)", +"fc906897": "StageDistributed(uint8,uint256)", +"fc909fc7": "EtherGrand()", +"fc912461": "_setControllers(address[])", +"fc914949": "ValidContractRemoved(address,address,uint256)", +"fc91a274": "getAmountByToken(bytes32,string,address)", +"fc91e03d": "EtherDeltaWithdraw(uint256)", +"fc94dd18": "verifyHumanStandardToken(address)", +"fc959d9a": "getMin(uint32[])", +"fc961664": "setPI_edit_7(string)", +"fc966d45": "uintToStr(uint256)", +"fc970859": "PacBall()", +"fc976827": "TOTAL_TOKEN_AMOUNT()", +"fc9774c1": "dividendShares(address)", +"fc989bbb": "addStockProfitInternal(uint256)", +"fc98f71e": "developerLock()", +"fc99342e": "create_table()", +"fc9937e5": "orders_sell_total()", +"fc996557": "goldContract()", +"fc998981": "sendBountyBalance(address[],uint256[])", +"fc9bfaa6": "externalCallFlag()", +"fc9c473d": "limitPerHolder()", +"fc9c8d39": "caller()", +"fc9dab52": "soldSale()", +"fc9dc608": "setRoundTime(uint256,uint256)", +"fc9e53df": "setNextRegistrar(address)", +"fc9ede65": "getPropertyBecomePublic(uint16)", +"fc9ee045": "getMaximalDeposit(uint256)", +"fc9f8cae": "_isApprovedPack()", +"fc9ffe02": "getWalletList()", +"fca062d3": "blockBeforeChange()", +"fca10682": "randomGen(uint256,uint256,uint256)", +"fca129a3": "finalizeDescription()", +"fca16c3b": "getBuyPrice(uint256,uint256,uint256)", +"fca2452b": "change_b(address)", +"fca2d9f5": "senttest()", +"fca2efd5": "DocnotaPresale(address,address)", +"fca346af": "SetupCrowdSale()", +"fca3644a": "verifyMessage(uint8,uint256,bytes32[4])", +"fca3b5aa": "setMinter(address)", +"fca495f0": "receivePurchase(uint256)", +"fca5d057": "migrateTokensV1(address,uint256)", +"fca5d21f": "playSlot()", +"fca5e61e": "drugs(uint256)", +"fca64947": "setMetaBet(uint256)", +"fca69afa": "CYCLE_CAP()", +"fca6d4e2": "LogAccess(address)", +"fca76c26": "lockMaxSupply()", +"fca7820b": "_setReserveFactor(uint256)", +"fca7c355": "MUSTToken(address,string,string,uint256,uint256)", +"fca7cdba": "pgoMonthlyPresaleVault()", +"fca865dd": "aSetProportion(uint16)", +"fca981f6": "setStepFunctions()", +"fca9bb5f": "FACTOR_1()", +"fcaa7664": "getStage()", +"fcaa96fa": "withdrawForThreeStep()", +"fcac1c77": "DragonKing(address,address,address,address,uint8,uint8,uint8,uint16[],uint16[])", +"fcad399f": "TheFlashToken(uint256,string,string)", +"fcad8cf3": "RentOffice()", +"fcae08e1": "fundTokens()", +"fcae4484": "unsubscribe()", +"fcae8c06": "takeMoney()", +"fcaf343e": "getUnsoldTokensAmount()", +"fcb0339e": "icoMinCap()", +"fcb0368c": "BuyToken(uint256)", +"fcb0a7ad": "getMinAuditPrice(address)", +"fcb0e55c": "_validGenes(uint256)", +"fcb163c7": "ExecuteOptions(address,uint256,string,uint8)", +"fcb1804d": "getRateAndTimeRemaining(uint256,uint256,uint256,uint256)", +"fcb1b62d": "arbiterAcceptCount()", +"fcb1cba0": "GetQuota()", +"fcb2931b": "LockupContract(address,address,address)", +"fcb2acd5": "_preValidatePurchase(address,uint256)", +"fcb2cafc": "verifyAddress(address)", +"fcb300e6": "_activate()", +"fcb36ce2": "buyCalcAndPayout(address,uint256,uint256,uint256,uint256,bool)", +"fcb3a3a3": "setCrowdsaleMinter(address)", +"fcb5bc29": "startPhase2()", +"fcb5ced3": "saveToCW()", +"fcb5d44d": "doExchange(uint256)", +"fcb6323a": "unclaim(address[])", +"fcb71ea9": "balanceOfHolder(address)", +"fcb750cf": "REFUND_DIVISION_RATE()", +"fcb806ac": "ReserveManager()", +"fcb80d16": "getCurrentFgcCap()", +"fcb899d7": "LEGAL_EXPENSES_ADDR()", +"fcb8b1e1": "NewHardCap(uint256)", +"fcb927aa": "addPublisher(string,bytes,address,address[],uint256[],address,uint32[])", +"fcb941c9": "setGenomeContractAddress(address,address)", +"fcb94dbb": "toBytes(address,address)", +"fcb9b505": "updateBeneficiary(address,uint256)", +"fcbc1bc4": "Standard23TokenMock(address,uint256)", +"fcbcf436": "clearSums()", +"fcbd06aa": "supportersMap(address)", +"fcbd2731": "transferToProxy(uint256)", +"fcbe0f5f": "BRD()", +"fcbeaaa7": "buyTile(uint16,uint16,uint8)", +"fcbf3131": "private_setBankAddress(address)", +"fcbf323a": "ScienceToken()", +"fcc01cce": "getExpectedAmount(bytes32)", +"fcc101ba": "getCommunityDescription(uint256)", +"fcc11241": "addOrder(uint256,uint256,uint256,uint256,uint256,uint8)", +"fcc15c8e": "Strike(uint16,uint32,uint16,uint8)", +"fcc1cc9b": "removeLockMultiple(address[])", +"fcc21e56": "withdrawToTeam()", +"fcc29ae8": "setMaxContributor(uint256)", +"fcc2a69b": "BankuNetwork()", +"fcc34e89": "migrateCrowdsale(address)", +"fcc36c49": "refuseInvestment()", +"fcc47803": "removeSpecialOffer(address)", +"fcc4a54c": "getDeedIds()", +"fcc4dec9": "refound(uint256)", +"fcc550c6": "CreateCCM(address,uint256)", +"fcc5b5ad": "investContracts(uint256)", +"fcc60b6a": "isInited()", +"fcc648f6": "withdrawEtherToReserveEscrow()", +"fcc6b5d5": "fillTheirOrder(address)", +"fcc73637": "updateExchangeRate(uint256,uint256)", +"fcc8221f": "getfromsun(address,uint256,uint256)", +"fcc830be": "getMyRickAndMorty()", +"fcc89710": "LogTokenSaleInitialized(address,address,uint256,uint256,uint256)", +"fcc9b48c": "isIcoFailed()", +"fcca4040": "tokenCapReached()", +"fcca8949": "p_setDevPercent_out(uint256,uint256)", +"fccc2813": "BURN_ADDRESS()", +"fcccc68f": "LoveBite()", +"fcce0492": "AdminTransferredOwnership(address,address)", +"fcce2622": "challengeAnswer(uint256,bytes)", +"fcceea26": "communitySupply()", +"fccf5a68": "SmartBinding()", +"fccf6e67": "newOrdersContract(address)", +"fccf82a4": "endDateOfPreSale()", +"fcd0a747": "RICTToken()", +"fcd10753": "_getProviderSupply(uint256,uint256,uint256)", +"fcd13382": "OsherCoinPresaleAward(uint256)", +"fcd13d65": "setContractRegistry(address)", +"fcd14456": "teamVestingPeriod()", +"fcd24400": "lookupCampaignPart2(uint256)", +"fcd307c4": "processReferral(address,address,uint256)", +"fcd3533c": "burn(uint256,address)", +"fcd41502": "requiredMajorityPercent()", +"fcd41c1f": "officialAddress()", +"fcd45807": "isTokenRegisteredBySymbol(string)", +"fcd47e79": "getnowcardcount()", +"fcd51a4e": "_setIntelligenceValue16(uint256)", +"fcd58363": "refundCancelledGame(uint32,uint32[])", +"fcd6e339": "giveBlockReward()", +"fcd6ec11": "HELLO()", +"fcd735dd": "transferVesting(address,uint256,uint256,uint256)", +"fcd778da": "setCardsAddress(address,address)", +"fcd792f4": "nextAvailableId(uint256)", +"fcd830c4": "setCCH_edit_28(string)", +"fcd8c9d4": "_goldTotalSupply()", +"fcd92992": "resync()", +"fcd936b1": "Simple()", +"fcd9da44": "setParameters(uint256,uint256,uint256,uint256)", +"fcd9f4ce": "withdraw(bytes32,string,string)", +"fcda4ded": "showBankAmount()", +"fcdb2c04": "getMyGameInfo()", +"fcddd056": "payIn()", +"fcde22fa": "_eachPrize(uint32,uint256,uint8,uint32,uint256)", +"fcde2ff6": "getPI_edit_23()", +"fcde6831": "addTokens(address[],bytes32[],uint256[],uint256)", +"fcde6ebe": "createSalesTierConfigMap()", +"fcde7b69": "TokenFRT(address)", +"fcde9925": "proposalOwner(uint256)", +"fcdf350b": "EGGS_TO_HATCH_1FAIRY()", +"fcdf9750": "createDispute()", +"fce14069": "partnerBonusPercent()", +"fce1cc35": "setInt(int256,int8,int16,int32,int256)", +"fce1ccca": "voting()", +"fce1e3e9": "setPatentFees(uint256[9])", +"fce20190": "_refund(uint256,uint256,uint256,uint256)", +"fce22c4c": "generatePseudoRand(bytes32)", +"fce266cb": "artworksFactory(address)", +"fce33f01": "withdrawLimit(address)", +"fce3b91e": "IdolToken1()", +"fce3bbb5": "setSelling(bool)", +"fce44634": "isValidHashType(uint8)", +"fce48558": "countryOf(uint256)", +"fce4c128": "checkInvestmentRequired(uint16,bool)", +"fce4f84f": "sellToConsumer(address,uint256,uint256)", +"fce59d0c": "MangoRepo()", +"fce6d586": "LogClaim(address,uint256)", +"fce78e5e": "TurtleToken(uint256,string,string)", +"fce846e8": "getExtraBonus()", +"fce87fb0": "tokenUriPrefix()", +"fce897e5": "payBid(address,uint256,bytes)", +"fce908ad": "whitelistTx(address,address)", +"fce927f3": "issueReservedTokens(uint256)", +"fce9fbff": "minWeiPerContributor()", +"fce9fdd9": "MPYCreation(address,uint256)", +"fceb9852": "isToOffChainAddresses(address[])", +"fcec617a": "conflictEndFine()", +"fcec962e": "adminWithdraw(address,uint256,uint256)", +"fceca4a0": "VICOXToken(uint256,address)", +"fcecbb61": "getReceipt(bytes32)", +"fced4a86": "CryptoHuntIco(uint256,uint256,address,address)", +"fced5694": "FOUNDER1_STAKE()", +"fced6ad2": "KARMAtoken()", +"fcee45f4": "getFee(uint256)", +"fcef09d6": "BlipCompetition(address)", +"fcef56a4": "createBar()", +"fcefe706": "getOutputIndex(uint256)", +"fcf07c6b": "foundationAddress()", +"fcf0f55b": "eventOracles(bytes32,uint256)", +"fcf23a92": "LogOwnerChanged(address,address)", +"fcf23d63": "getMatchInfoList03()", +"fcf2f85f": "requiredDevSignatures()", +"fcf32769": "adminWithdraw(address[4],uint256[5],uint8,bytes32,bytes32)", +"fcf3438c": "setSmsCertifier(address)", +"fcf36918": "doCall(bytes32)", +"fcf40170": "cleanWallets()", +"fcf4333a": "updateHashrate(address)", +"fcf43ce2": "setValidTransferAddress(address)", +"fcf4b576": "getVaultAccess(address)", +"fcf516aa": "VuePayToken()", +"fcf5462e": "SuperUltraUltraCoin()", +"fcf56577": "setRequesterLock(bool)", +"fcf7e73d": "addBeneficiary(address,uint256,uint256,uint256,uint256,bool,string)", +"fcf7fe50": "push(address,uint256,uint256,bool)", +"fcf84962": "InvestAddEvent(address,uint256)", +"fcf8566e": "unsoldCleanUp()", +"fcf911e7": "delAddressValue(bytes32)", +"fcf9c44d": "soldUET(address,uint256,bytes32)", +"fcfa2bfe": "SALES_START()", +"fcfa63e3": "getResourceAddress(string)", +"fcfbc962": "Unset(string,string,address)", +"fcfc1577": "masterFns(bytes32)", +"fcfc208e": "unclockAddressDuringITO(address,address)", +"fcfd3a4c": "PreICO(address)", +"fcfdaa52": "successfulTime()", +"fcfdbc23": "perform_withdraw(address)", +"fcfdcf8a": "removeOpenMakeOrder(address,address)", +"fcfdeba8": "changeGameEnable(uint256)", +"fcfdf7c5": "decApprove(address,address,uint256)", +"fcfe2247": "setContributionDates(uint256,uint256)", +"fcfe6af1": "transfer(address,uint256,address,address,uint256,uint8,bytes32,bytes32)", +"fcff1eaf": "increaseGasSpent(bytes32,uint128)", +"fcff5ed6": "createChannelDelegate(address,address,uint192)", +"fcffb14e": "getNormalPayout(uint256)", +"fcfff16f": "open()", +"fd004f2d": "IRONtoken()", +"fd01249c": "createGen0Auction(uint256,uint256)", +"fd01d4a1": "ownerDivRate()", +"fd0326b4": "m_nextSale()", +"fd036052": "modPass(uint256,uint256,string,string,string)", +"fd037bc5": "changeIsPayableEnabled()", +"fd03846e": "setCreditBondContract(address)", +"fd03c006": "agreeCount()", +"fd03d762": "resumeWork(uint256)", +"fd03e721": "referraltokencontract()", +"fd049319": "distribute1BTCO(address[])", +"fd04a902": "totaletherstransacted()", +"fd04b606": "getMarketMarginPremium(uint256)", +"fd05ddfc": "CCCRCoin()", +"fd062d3b": "handleFees(uint256,address,address)", +"fd06c6a9": "issuePass(address,bytes32,uint8)", +"fd070667": "tournamentResult(uint32[3][11][32])", +"fd074c28": "removeWeapon(uint8[176],uint8,uint8)", +"fd074e8e": "checkIfMissionCompleted()", +"fd0801c1": "appendNumToString(string,uint256)", +"fd080993": "submit(bytes32,bytes32,bytes32)", +"fd083748": "isGason(uint64)", +"fd084b16": "etherPartition(uint256)", +"fd085b41": "minSaleAmount()", +"fd08921b": "getYear()", +"fd090e47": "DEPOSIT_PERIOD()", +"fd0998de": "Totalbalance()", +"fd09b6f0": "JNDToken()", +"fd09d013": "CROWDSALE_ALLOCATION()", +"fd0a7f3e": "grantGrantableAllocations()", +"fd0aeb34": "EderCoin()", +"fd0b9dc2": "verifyWithdrawUpdate(bytes32,bytes32,uint256,uint256)", +"fd0bb752": "getBonusReceived()", +"fd0c1edb": "_setVault(address)", +"fd0c2a76": "Crowdsale(uint256,uint256,uint256,address,address)", +"fd0c78c2": "secondaryOperator()", +"fd0cdcdb": "withdrawRemaining(address)", +"fd0cfa91": "baseFeeDivisor()", +"fd0d1322": "WETCC()", +"fd0dd4d0": "btnSupply()", +"fd0e4695": "_canceloffer(address)", +"fd0edbd6": "refundSeller(address,address,uint256)", +"fd0f267b": "deathData_v0()", +"fd0f5a81": "updateWEIAmount(uint256)", +"fd1075d0": "setTokenRewardRate(uint256)", +"fd1094a9": "JaiHoToken()", +"fd12c1cb": "ethFnkRate2()", +"fd1343f1": "ESOPAndCompanySet(address,address)", +"fd138223": "remainingBountySupply()", +"fd13a7ce": "isPurchaseWithinCap(uint256,uint256)", +"fd14492a": "DinoTokenSale()", +"fd14ecfe": "balanceOfSPS()", +"fd15e091": "changeSymbolName(string)", +"fd17f289": "teamTokenSupply()", +"fd186de6": "StoToken(address,address)", +"fd18b484": "VitaToken()", +"fd19368a": "isEditionAvailable(uint8)", +"fd1a0a55": "JINGJING()", +"fd1aaa72": "sendToOwnerBalance(address,uint256)", +"fd1af169": "canSend(address,address,uint256,bytes)", +"fd1bd9b0": "getAmountLeft()", +"fd1c50e0": "sellAtIndex(uint256,uint256)", +"fd1c66da": "getCertificateIssued()", +"fd1ccaf3": "HideraNetwork(uint256,string,string)", +"fd1dc137": "settoken(address,bool)", +"fd1e582d": "ownertransfer(address,uint256)", +"fd1e5e7a": "getOrCacheDesignatedReportNoShowBond()", +"fd1f4ba5": "setAgenda(string)", +"fd1fb2fa": "rateB()", +"fd1fc4a0": "airDrop(address[],uint256)", +"fd203906": "getCarState(string)", +"fd208ca7": "endprivateIco(bool)", +"fd214edd": "collect(uint64,address[],address[],address)", +"fd221031": "tap()", +"fd221889": "priceFactorA()", +"fd222745": "melonport()", +"fd225cfd": "CoCoCoin()", +"fd228c0b": "isMintAgent(address)", +"fd22a6cf": "openGames(uint256)", +"fd23022a": "Orocoin()", +"fd232b59": "getEscrowPayments(uint256)", +"fd241e2b": "mintWithLocked(address,uint256,uint256)", +"fd2457d7": "clearStorage(bytes32[])", +"fd253492": "leadingHitCount()", +"fd255683": "getAddressValue(string)", +"fd260dfc": "getCertificationDbStatus(address)", +"fd263390": "setBank(address,bool)", +"fd26c460": "set_game(string,string)", +"fd275dd5": "TokenFreezerRules(address)", +"fd277399": "isService(bytes32)", +"fd27b51e": "getMarketSize()", +"fd27ce93": "checkRelease(address,uint256)", +"fd27d1d3": "getBlockPrice(uint256)", +"fd282afe": "batchSingleAmount(address[],uint256)", +"fd28392a": "changeSweepAccount(address)", +"fd289797": "_canSynthesizeWithViaAuction(uint256,uint256)", +"fd28feb3": "createInitialItems()", +"fd2994f7": "totalPointsPerToken()", +"fd2b4f23": "TheTestCompany()", +"fd2b6b19": "crowdSaleEnded()", +"fd2b863d": "produceUnitSeconds()", +"fd2c3abb": "targetDiscountValue8()", +"fd2c80ae": "updateInterval()", +"fd2ce18e": "getPayloadFrom(address)", +"fd2cee78": "pollEnded(bytes32)", +"fd2cf77a": "COLOR_BLUE()", +"fd2d39c5": "positionOf(address)", +"fd2db3f4": "countTotalInvestorsInCrowdsale()", +"fd2dba2f": "largeRate()", +"fd2e9caf": "PendingETH()", +"fd2ecc3f": "_setLastDate(uint256)", +"fd2edd76": "TOTAL_LOCKS()", +"fd306ca7": "transferProfitToHouse()", +"fd30929a": "disable(address[])", +"fd32649f": "cleanLog()", +"fd32f088": "calVoteResultByIndex(uint256)", +"fd330b26": "Total_Gamblers()", +"fd338726": "updatePlayerRewards(address,address)", +"fd339d18": "testAuthorityTryAuthUnauthorized()", +"fd345fc2": "totalNominees()", +"fd34d443": "kyberSwap(uint256,address,address,bytes32)", +"fd34e22e": "addrToForumId(address)", +"fd35c16d": "createLibra(bytes32[],bytes16[],uint256[])", +"fd35e71b": "entryPayoutDue(uint256)", +"fd367f7d": "toggleFeatured()", +"fd36c3f9": "burnFromAdmin(uint256)", +"fd37f1d0": "setInv1(address)", +"fd38af55": "testDebugClock()", +"fd39b40b": "GameScored(bytes32,int256,int256)", +"fd39ba59": "totalPreICOSupply()", +"fd3a77db": "acceptManagership()", +"fd3ab282": "q()", +"fd3acb5c": "getRoundOfSixteenResult(uint256)", +"fd3b34e6": "AddEntity(bytes)", +"fd3bbba5": "openOrCloseSale(bool)", +"fd3c1391": "flushShareNext()", +"fd3c1c43": "wolkAddress()", +"fd3c4277": "BattleDromeICO()", +"fd3c4cbf": "bidERC20(uint256,uint256)", +"fd3c88bd": "MultiVault(address,uint256)", +"fd3c9144": "intervalTime()", +"fd3cabc0": "_triggerPVEFinish(uint256)", +"fd3cb5d1": "doCommunityMinting(address,uint256,int256)", +"fd3d0dbf": "ioxis()", +"fd3d8cdc": "registerNameXID(string,bool)", +"fd3e2d86": "EpayToken(uint256,string,string,uint8)", +"fd3e50a7": "deliver()", +"fd3e6a0a": "transfers(address,address,uint256)", +"fd3ecae6": "changeExtendedTime(uint256)", +"fd3eefe9": "getAvailableAmount(string)", +"fd3f1a04": "unapprove(uint256)", +"fd3f2f66": "changePrivateContribution(uint256)", +"fd408767": "fireEventLog4()", +"fd40a1e9": "addMarketItem(bytes16,bytes16,bytes16[])", +"fd413596": "addBulk(address[])", +"fd41477f": "previligedLock(address,uint256)", +"fd414a29": "TOKEN_RATE_20_PERCENT_BONUS()", +"fd425dd5": "initCopper()", +"fd42657a": "_currentOwner()", +"fd426e40": "remainingTokensVIPs()", +"fd4446f3": "ICOSALE_JOINTTOKENS()", +"fd460302": "internalPresaleVesting(address,uint256,uint256,uint256,uint256,uint256)", +"fd4649ae": "UpdateUserPELOBonus(address,uint256)", +"fd46544a": "deleteAllBioTranslations()", +"fd467473": "setupFundingRate(uint256,uint256)", +"fd468aaa": "setPeriods(uint8)", +"fd473852": "TaiChiCoin()", +"fd475875": "newInversor(address,address)", +"fd475fa2": "requestAddAdmin(address,string)", +"fd478ca9": "getNumParticipants()", +"fd47eda6": "getMarketInterestRate(uint256)", +"fd48cc45": "challenge(bytes32,uint256,string)", +"fd4931a3": "getUintUsername(address,address)", +"fd4a343d": "extraMint(uint256)", +"fd4ad523": "recentlyEndedGames(uint256)", +"fd4b9d4d": "smalobox()", +"fd4bd17b": "calculateWineBuySimple(uint256)", +"fd4c5c9f": "MIN_LEADER_FRAC_BOT()", +"fd4c8c30": "PlayX20()", +"fd4d603c": "PS_PRICE()", +"fd4dabef": "solved(uint256,bytes32[])", +"fd4dbdf2": "T20coin(uint256,string,uint8,string)", +"fd4e165e": "RiceFarmer()", +"fd4e4d75": "addressA()", +"fd4eeb8f": "isOMICrowdsaleContract()", +"fd4f4125": "totalEtherHasBeenReceived()", +"fd4faee0": "Chain1()", +"fd4ff437": "addWhitelistBulk(address[],uint256[])", +"fd50299a": "addFeedback(address,uint256,address,string,uint8)", +"fd507f75": "airdropMultiple(address[])", +"fd50b005": "buyForWhitelisted()", +"fd52b3cd": "olumla()", +"fd52bdd5": "TweetherToken()", +"fd530c17": "Deposit(bytes20,uint256)", +"fd531e93": "getCertificate(address)", +"fd535203": "refundEther(uint256)", +"fd53e7b4": "admin_active_withdraw(address)", +"fd54fab8": "calculateBonusTokensAmount(uint256,uint256)", +"fd554229": "getGidOfRarity(uint8,uint8)", +"fd55714d": "getTotalCampaignsByCountry(string)", +"fd557d39": "queryCost()", +"fd56317d": "ANMvesting()", +"fd56d4c8": "getControlInfoPerToken(uint256)", +"fd577343": "setDefaultOperator(address)", +"fd57e9f9": "deleteElement()", +"fd57ee6d": "timelock(address,uint256,uint256)", +"fd58e63a": "setBonusMultiplier(uint256)", +"fd5a6019": "testUser(address)", +"fd5a60e1": "killDragon(uint256)", +"fd5c0663": "distributeBalanceToInvestors()", +"fd5c40ea": "ELIX_ADDRESS()", +"fd5c6694": "createGennezise(uint32)", +"fd5cb32c": "ItemBought(address,uint256,uint256,uint256,uint256)", +"fd5d173b": "MAX_NUM_OZT_TOKENS()", +"fd5d3e01": "getContractOrigin()", +"fd5eddf3": "supplyTokens(uint256)", +"fd5f1e03": "getParticipantLockedAmount(address,address,bytes32)", +"fd5f7256": "adminRetrieveContractConfig2()", +"fd5fde65": "mintTimeLockedTokens(address,uint256,uint256)", +"fd600107": "BONUS_TIER2()", +"fd600408": "tpe()", +"fd607594": "min_payment()", +"fd609b91": "DelVoteMemberCandidate(uint256)", +"fd60e1a8": "getReferralCounts()", +"fd6133a6": "updateTokensAvailable()", +"fd6180cb": "tokenDividendsOf(address)", +"fd619dce": "sigBountyProgramAddress()", +"fd61a725": "getMinimumReportingFeeDivisor()", +"fd626a86": "sellKWHAgainstEther(uint256)", +"fd6273a3": "ERC20KKToken()", +"fd6358ce": "setPricingStrategy(uint256,uint256,uint256,uint256,uint256,uint256)", +"fd636975": "addWeight(address,uint256)", +"fd637f02": "TEAM2()", +"fd63f640": "getLLV_edit_5()", +"fd645193": "RegistrationBonus(address)", +"fd64eccb": "isForwarder()", +"fd651d2c": "TransferBy(address,address,uint256)", +"fd655073": "balancesForWithdraw(address)", +"fd6673f5": "getNumberOfPlayers()", +"fd669810": "close(address,address,uint8,uint256)", +"fd67db81": "getCharity(uint256)", +"fd68610f": "getEtherBack()", +"fd6887af": "queenPrestige()", +"fd68a422": "returnmoneycreator(uint8,uint128)", +"fd68e463": "FeitebiToken(uint256,uint8,string,string)", +"fd68f377": "ethyclos()", +"fd69f3c2": "getMarketCount()", +"fd6aad25": "indexOf(address)", +"fd6b7ef8": "safeWithdrawal()", +"fd6ba459": "mintCard(address,uint8[14])", +"fd6bb46c": "addWeb(string)", +"fd6dd889": "marketTokenCreated()", +"fd6e1b50": "reportBenign(address)", +"fd6e3bfe": "setNFTAddress(address,address)", +"fd6ecb7b": "getReceiptDetails(bytes)", +"fd6efe80": "DiscCoin()", +"fd6f4137": "getAdvocate(address)", +"fd6f5270": "CouponDeposit(address[2],uint256[7],uint8,bytes32[2],uint256)", +"fd6f5430": "setContent(string,bytes32)", +"fd70813b": "setTermsAndConditions(string)", +"fd70b40d": "HashToken(address)", +"fd70f406": "citiesCount()", +"fd71b579": "LockMechanism(address,uint256)", +"fd720090": "right86(uint256)", +"fd7230d6": "create(uint256,bytes)", +"fd72a11a": "TorusCoin(uint256,address)", +"fd72e22a": "operationsWallet()", +"fd735602": "executeN()", +"fd7394ae": "IndividualityToken()", +"fd743f2b": "Coke()", +"fd747c0b": "rsaVerify(bytes,bytes,uint256,bytes)", +"fd74a151": "ETH_FUND_DEPOSIT()", +"fd7560ca": "distributeEarningsBasedOnScore(address,address)", +"fd75b8d4": "calculateGrantClaim(address)", +"fd7611c7": "withdrawContractTokens(address)", +"fd764e68": "transfer(uint256,address,address[],uint256[],uint8[],bytes32[],bytes32[])", +"fd777d9e": "teste1()", +"fd77905c": "setColorMetadata(uint256,string)", +"fd7801df": "getCitationLength()", +"fd782de5": "Proxy()", +"fd7903a0": "getTeamFromLeaderboard(uint16,uint8)", +"fd790923": "keyImageUsedUpdate(uint256[2])", +"fd791031": "gamesFund()", +"fd793c76": "btg()", +"fd79c2a9": "ContractName()", +"fd7a1b00": "forbidDeploy(address)", +"fd7ab1ad": "chiudi_votazioni()", +"fd7ac203": "TestToken()", +"fd7af387": "canTransferBetweenUsers()", +"fd7afee8": "insertData(uint256,string,string)", +"fd7c074f": "changeReceivingAddress(address)", +"fd7c460d": "ciberLottery()", +"fd7caf4d": "loyaltyCap()", +"fd7d7948": "getTranformedId(uint64)", +"fd7e1bee": "freezeTime()", +"fd7f611e": "createCompany(string)", +"fd7fc0e0": "invest(uint32)", +"fd7fe115": "grantAccess(address,bool)", +"fd7feb35": "cancelWonderSale(uint256)", +"fd7ffdb8": "recordSystemOnSaleToken(uint256)", +"fd8055d2": "updateBOTBillingInfo(uint256,string,address,string,string,uint256)", +"fd809759": "getYearIdx()", +"fd810eb3": "logAccess(bytes32,string)", +"fd8113e9": "checkprevowner(address)", +"fd812e7c": "revealHash(uint256,uint256,bytes4)", +"fd814dbd": "GameXToken()", +"fd8258bd": "canIssue(address,address,address,uint256)", +"fd82902d": "MeowCoin()", +"fd82a59f": "advisorsTokensVault()", +"fd83915e": "changeOwnership(bytes32,address)", +"fd83da09": "lastSaleDate(uint256)", +"fd83f3e3": "QueueUserMayBeDeliveryDroneCotnrol()", +"fd842125": "ricardianVoucher()", +"fd854148": "periodDuration(uint256)", +"fd85b1a7": "openChannel(uint256)", +"fd8663d2": "setBuyBackFund(address)", +"fd86e49d": "token_is_active(address)", +"fd872458": "PK(address,uint8,bytes32)", +"fd874a7b": "blockedTimeForBountyTokens()", +"fd87f2cb": "ADXProxy()", +"fd8828eb": "rawSetPrice(bytes32,uint256)", +"fd89a9b5": "enableImpairedTokenContract(address,bool)", +"fd89d17f": "THIRD_SUPPLY()", +"fd8ac8d0": "capDay2()", +"fd8acc42": "buyAuction(uint256)", +"fd8ae24b": "getTimeLeftInQ1()", +"fd8b09c2": "ENBToken()", +"fd8bb681": "earlyBackerList(uint256)", +"fd8bcf6d": "requestCancelationTime()", +"fd8be237": "CrowdsaleToken(string,string,uint256)", +"fd8c46e7": "distributeTokensToShareholders(address,uint256)", +"fd8c6fe4": "RexToken(uint256,address,address)", +"fd8d4bff": "MoyOpenDistribution()", +"fd902d1e": "setCutoffs(uint256)", +"fd904207": "OPTCToken()", +"fd906c0f": "createClone(address,string,string,string,address,uint256)", +"fd906ec9": "participate(bytes1[64])", +"fd909594": "icoGoal()", +"fd90a668": "allowManuallyMintTokens()", +"fd911997": "make(uint256,address,address,bytes32,bytes32,uint256,uint256)", +"fd9133f3": "LOCKTokenCOIN()", +"fd9168a9": "setRef(uint256)", +"fd9177b5": "LogMoveMade(uint256,uint8,uint8,uint8,uint8)", +"fd922a42": "server()", +"fd923a9e": "setCentsExchangeRate(uint256)", +"fd925795": "pvt_plmt_remaining_in_Wei()", +"fd9304cd": "minInvestmentValue()", +"fd93236b": "bankerEndTime()", +"fd9393c3": "init(uint256,string,string)", +"fd93bdb1": "changeRestricted(address)", +"fd94c80b": "priEtherReceived()", +"fd958695": "isAlphaNumeric(bytes1)", +"fd97a008": "autoDividendsFor(address)", +"fd97c61a": "getgamecardcount()", +"fd97d3c1": "giveCrypto()", +"fd9923ce": "asmTransfer(address,address,uint256)", +"fd994513": "executeVote(uint256[])", +"fd99a746": "transactionsCount()", +"fd99c012": "USDTUBESupply()", +"fd99c6a4": "upgradeCar(uint32,uint8)", +"fd9a4e61": "transferTokens(uint256)", +"fd9b41ff": "getCurrentFieldBalanceAndTarget()", +"fd9b8763": "Multiplier()", +"fd9be522": "withdrawFee(address,uint256)", +"fd9bf0a4": "_setPermissions(address,address[])", +"fd9bf3aa": "mint(address,int256)", +"fd9e2120": "initPara(uint256,uint256,uint256,uint256,address,uint256,uint256)", +"fd9e5fbf": "setTimeStaked(uint256,address)", +"fd9e8ff7": "Shard()", +"fd9f12b0": "isYellow()", +"fd9f6856": "lastDepositor()", +"fd9f9b87": "isOption(address)", +"fda0078f": "AKTestEther1(address,address,address,uint256,uint256,uint256)", +"fda03476": "luckySevenBets()", +"fda08958": "isServer(address)", +"fda0c61d": "setupWhitelist(address)", +"fda237f8": "genesisToken()", +"fda263e8": "timeEnd()", +"fda27af2": "claimSiteToken(uint8,uint256)", +"fda49eb4": "treasurer()", +"fda69fae": "getInt(string)", +"fda76eef": "RewardsGiftToken()", +"fda78599": "ecoSystemWallet()", +"fda79925": "complianceAddress()", +"fda80435": "c_MinInvestment()", +"fda86c95": "internalRevokeCert(bytes32,bytes,bytes32,bool,uint256)", +"fda92d3e": "ErrorMsg(string)", +"fda962d3": "totalGenesisRecipients()", +"fda9aafe": "WyzonCredit()", +"fdaa2632": "UploadURL(uint256,string)", +"fdaa94de": "deleteAddr(address,bytes)", +"fdaacf1b": "transferOwnerMoney(address)", +"fdab1b7b": "getCurrentAuctionPrice(address,address,uint256)", +"fdab5627": "_approveCertificate(uint256,bool)", +"fdac0025": "cups(bytes32)", +"fdac3a20": "set_eth(uint256)", +"fdac9ff7": "setAttributeValue(address,bytes32,uint256)", +"fdacbecd": "geteths(address)", +"fdacd576": "setCompleted(uint256)", +"fdad711d": "setFinalPayoutDistributionHash(bytes32)", +"fdade29f": "BuyBooster()", +"fdae3b70": "proofOfSms()", +"fdae6a92": "setTokenFeeMake(address,uint256)", +"fdae8a4c": "isAddressInBlackList(string,address)", +"fdaed331": "getTransferedUser(uint256)", +"fdaed778": "testConcatStorage32Bytes()", +"fdaf150c": "abc_initNetwork()", +"fdaf22e8": "minutos()", +"fdb04023": "closeVirtualChannel(bytes32,bytes32)", +"fdb31d10": "_createToken(string,bytes5,string,string,string,string,string,address,uint256)", +"fdb357be": "getVotingForCount(address)", +"fdb39c40": "userNameHashTaken(bytes32)", +"fdb406cb": "outstandingTokens(address)", +"fdb473b1": "unsetMyName()", +"fdb4dbe0": "totalEgg()", +"fdb5a03e": "reinvest()", +"fdb7b065": "marketDataOracle()", +"fdb7d435": "TEC(uint256,string,string)", +"fdb837e8": "GetTotalClicks()", +"fdb89360": "ParkCoin(uint256,string,string)", +"fdb914e2": "capPreSale()", +"fdb986cc": "NiobiumToken()", +"fdbab5f5": "PUBLICSALE_ENDTIMESTAMP()", +"fdbaf779": "internalBuyTokens(address,address)", +"fdbb16fd": "setEthPercent(uint256)", +"fdbb5aee": "ChannelNewBalance(address,address,uint256,uint256)", +"fdbb9fdb": "UNJUST(string,string,uint256,uint256,bool)", +"fdbc368a": "_ensureNewUser()", +"fdbc4006": "getCandidateList()", +"fdbc6530": "updaterAddress()", +"fdbc938d": "BlessingChainAlliance()", +"fdbd2534": "acceptCoinSale()", +"fdbd8dd8": "investInternal(address,uint256)", +"fdbd956d": "oraclize_query(uint256,string,bytes[],uint256)", +"fdbda9a7": "parentChange(address)", +"fdbdc112": "backersIndex(uint256)", +"fdbf0765": "hash(bytes20,uint96,uint32,bytes32[],uint16)", +"fdbf17d0": "computeFinalStake(uint256)", +"fdc03ca2": "enterContract()", +"fdc0713b": "getMinAuditPriceCount()", +"fdc193a4": "test3Fails()", +"fdc202f1": "Ticket(string,uint256)", +"fdc24095": "returnMasterNodes(address,uint256)", +"fdc272fe": "getTokenVolumebasedBonusRateForPhase3(uint256)", +"fdc292ea": "token(address,address)", +"fdc35112": "LogBuy(address,uint256,uint256)", +"fdc37c85": "securityCheckURI()", +"fdc3d8d7": "nextTaskId()", +"fdc40466": "maxInterestTime_()", +"fdc4741b": "addRecToQueue(address,uint256)", +"fdc487a7": "FundWithdrawl(address,address,uint256)", +"fdc4b338": "authorizeExtension(uint256,bool,string)", +"fdc4c3eb": "reservedWithdraw()", +"fdc5bf2c": "releaseToBuyer()", +"fdc61dd1": "coinAddress()", +"fdc63c5c": "aprobarMensaje(uint256,uint8,string)", +"fdc65c8c": "stakingBonusTokens()", +"fdc69291": "_adjustSupply(address,uint256)", +"fdc89f73": "toPowerOfThreeHalves(uint256)", +"fdc967e5": "jDallyCoin()", +"fdc98399": "getCurrentBuyerRateInPermilles(bool)", +"fdc99064": "unregisterNotary(address)", +"fdc9d0f4": "Telegram()", +"fdc9e72d": "_ownMint(uint256)", +"fdcb6068": "accessManager()", +"fdcb7539": "contruibuteData(bytes)", +"fdcbd0ec": "_deleteMinion(uint32,uint8,uint64)", +"fdcbd9b0": "GatewayStatusUpdated(bool)", +"fdcc6be3": "claimedPreICO(address)", +"fdccf45e": "computeCurrentPriceImpl(uint16,uint64)", +"fdcd0a18": "isRefundsEnabled()", +"fdcd649e": "EthAnte()", +"fdcd86ab": "addBets(bytes32)", +"fdce7f5e": "JinglesOpened(address,address,uint256)", +"fdce8e02": "checkHash1(address,uint256,address,uint256,uint256,uint256)", +"fdce9565": "determineWinner(uint256[7][],uint256[7][])", +"fdcea342": "fixPlayerMiddlename(uint256,string)", +"fdced779": "KozzProjectToken()", +"fdcf154c": "SODCOIN()", +"fdcf6f16": "getTopCompanyAtIndex(uint256)", +"fdd0298e": "PresaleAdded(address,uint256,uint256)", +"fdd080a4": "activateSaleContract(address)", +"fdd12c5e": "r(address,address)", +"fdd1a4e9": "externalCheckSign(bytes32,bytes,address)", +"fdd245ee": "referralLinkMinimum()", +"fdd2f2b0": "TIME_MULTIPLIER()", +"fdd3a879": "quick()", +"fdd3af8f": "fillTrade(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)", +"fdd3c1a1": "distributeTimelockedTokens(address,uint256,uint256)", +"fdd3e3ff": "_removeAuction(uint256)", +"fdd3ea94": "submitPeerReview()", +"fdd42e29": "TokenOTBC(uint256,string,uint8,string)", +"fdd4fd69": "penaltyDisbursalAddress()", +"fdd5828f": "massPay(address[],uint256)", +"fdd6a803": "readowners()", +"fdd6df8c": "mul2Require(uint256)", +"fdd7d87b": "decline(address,address)", +"fdd868df": "getTracks(uint256,uint256)", +"fdd8a733": "TokenCoinExchanger()", +"fdd8ed02": "BetPlaced(uint256,uint256,address,uint256)", +"fdd96ae0": "compensateContributors(uint256,uint256)", +"fdda3d8a": "setVicepresidenteDeMesa(bytes32,uint256,uint256,uint256)", +"fddaf68a": "getTipperPercentage(uint256,uint256)", +"fddb4683": "ERC20(string,string,uint256)", +"fddb7ef0": "mainSaleBonuses(uint256)", +"fddbcca5": "pause_4()", +"fddc4686": "getOwnedAssetsLength()", +"fddc5545": "BitHaus()", +"fddcbd09": "burnByCreator(address,uint256)", +"fddcc148": "iterator()", +"fdddb3ae": "Athena()", +"fddf0fc0": "ethRaised()", +"fddf16b7": "INTERFACE_SIGNATURE_ERC721()", +"fddf4e3b": "_packCombinedParams(int256,int256,int256,int256,int256)", +"fddfec78": "allowTransfer(address,address)", +"fde045b9": "HODLaddress()", +"fde07212": "Betting()", +"fde074c8": "betAddrsCount_()", +"fde0a64d": "admin_inactive_payable()", +"fde1276a": "removeDiscount(address)", +"fde17733": "demiseCEO(address)", +"fde1ee44": "addAttestation(string,bool,address)", +"fde20b6c": "tipPercentageLocked()", +"fde34dc4": "finalize(uint256,uint256,bytes32)", +"fde3cbd6": "NucleusVisionCoreToken()", +"fde440bb": "setPayoutNumeratorsValue(uint256[])", +"fde45344": "untrustContract(address)", +"fde46b03": "_set1()", +"fde4b39d": "updateStages()", +"fde4d9bf": "setAutoPrice()", +"fde5ca7d": "calcDevReward(uint256)", +"fde5e124": "t_Andrey2()", +"fde63e96": "CreateSpecialPlayer(bytes32,uint8,uint8,uint256,uint256,address)", +"fde6adb1": "placeBet(uint256,uint256,uint256,uint256)", +"fde7c834": "increase_bounty(address)", +"fde83a34": "tokensForTeam()", +"fde90733": "isRequestingEscapeTo(uint32,uint32)", +"fde9683d": "ICO_DAYS()", +"fde99668": "removeOrder(bytes32)", +"fde9ba41": "transfer(bytes,address,uint256)", +"fde9cded": "whichAuction(uint256)", +"fde9e506": "calcDividendsSum(address)", +"fdea8e0b": "presale()", +"fdeb49b0": "allocationsLength()", +"fded813c": "getInvoiceBalance(bytes32)", +"fdeddab2": "windUpContract(uint64)", +"fdee38a9": "ETH_TLD_NODE()", +"fdee4ff9": "setExpectedReturn(uint256)", +"fdee579c": "MINfinney()", +"fdee5c22": "THAWING_DURATION()", +"fdee60e9": "peloExtenstion()", +"fdee69f4": "calResult()", +"fdef9106": "hasPermission(address,address,bytes32,bytes)", +"fdf061f0": "adminWithdrawBalance()", +"fdf0d8e0": "get_account_balance_token(address)", +"fdf1a434": "updateMinInvestmentForIco(uint256)", +"fdf1aba0": "check1(uint256,uint256)", +"fdf31b39": "incrementTasksCompleted(address)", +"fdf372ad": "niceguy2()", +"fdf3b97f": "calculateVestedTokens(uint256,uint256,uint256,uint256)", +"fdf3fa53": "RemoveCategory(uint256)", +"fdf54c98": "SocialNode()", +"fdf55523": "numRefCredits(address,bool)", +"fdf56d57": "voteElection(uint256)", +"fdf58814": "getLLV_edit_3()", +"fdf62f05": "createEngine(uint256,string,uint256,uint256,uint256,uint256)", +"fdf6393c": "removeExistingDiscount(address)", +"fdf762bb": "TEAM_AND_ANGEL_SUPPLY()", +"fdf78f70": "unlockStatus(address)", +"fdf7983a": "safeTransferChild(address,address,uint256,bytes)", +"fdf8e11c": "getTotalAngels()", +"fdf97cb2": "trustee()", +"fdfa571e": "getDrawStatus(uint32)", +"fdfac8e5": "BMC()", +"fdfcb425": "activate(address,uint256,uint256,uint256,bool,bool)", +"fdfd5b43": "determineWinnerScript()", +"fdfecb0c": "isEcoAllocated12()", +"fdff31ed": "getPairSellLoyaltyPerc(address,address)", +"fdff6b30": "testInitialBalanceUsingNewContract()", +"fdff85b4": "CONFIG_RETURN()", +"fdff9b4d": "managers(address)", +"fe0030d9": "IRPToken()", +"fe00344a": "AuctionCompleted(uint256,uint256,address)", +"fe006839": "INITIAL_SUPPLLY()", +"fe00779e": "removeBountyAddresses(address[])", +"fe007eeb": "SmartRouletteTokenDividend()", +"fe00b3a3": "kosacafToken()", +"fe0149a0": "ZQCToken()", +"fe01ee96": "Clearing(address,uint256)", +"fe01f1ff": "TokenTester()", +"fe01ff62": "verifyTx(uint256[2],uint256[2],uint256[2][2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2],uint256[2])", +"fe02739c": "releaseJackpot()", +"fe029156": "swap(address,address,uint256,uint256)", +"fe038093": "createTeams()", +"fe04a5bc": "senderMIT()", +"fe04cb1d": "setStatusPrice(uint256)", +"fe052bc6": "minimumInvestmentInWei()", +"fe05e8b1": "assertFact(uint256,string)", +"fe05f7c2": "destroyforeth(uint256)", +"fe063351": "newCustomer(address,string)", +"fe06a915": "totalMTPAllocated()", +"fe082a21": "SFEscrow()", +"fe085775": "PresaleAllocation(address,uint256,uint256)", +"fe08e5fe": "setGalleryTwoPrice(uint256)", +"fe0904e6": "minerDifficulty()", +"fe094708": "Map(address,address,uint256,uint256)", +"fe098371": "findFrozenCell(address,uint128,uint128)", +"fe0a2c30": "returnArrayBytes1(uint8)", +"fe0a5ab0": "BLOCKS_BUCKET_SIZE()", +"fe0ba34e": "placeSellRequest(uint256,uint256,uint256)", +"fe0c32ae": "INEX()", +"fe0c4085": "vestingEnded(address)", +"fe0d94c1": "execute(uint256)", +"fe0dadd7": "teamTwoTotalPlayers()", +"fe0f2fab": "ChangeClaimAddress(address,address)", +"fe10d836": "setTokensToBeClaimed()", +"fe110116": "transferToPool()", +"fe12aeec": "SalesAgentAppointed(address,address)", +"fe1391ad": "generateFixtures()", +"fe13a823": "computeResponseFirstHalf(uint16)", +"fe13b118": "beginDutchAuction(uint256,uint256)", +"fe13baf7": "_encodeTokenId(int256,int256)", +"fe1439b4": "setCTO(address)", +"fe14b085": "walletUserCount()", +"fe164a5b": "setWhitelistThresholdBalance(uint256)", +"fe168eef": "_isNoNeedInCountryLimitChange(uint256,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe16e862": "transactionsOnForHolderUpdate(address,uint256)", +"fe16ed13": "getNDay(uint256)", +"fe173b97": "gasPrice()", +"fe1798a7": "randomAttack()", +"fe1829b6": "extendPublicSaleDiscountEndTime(uint256)", +"fe1865cd": "setCompte_26(string)", +"fe188184": "lastWinner()", +"fe18d6e6": "convertToEth(uint256)", +"fe18f82a": "getReceivedFunds(address)", +"fe192f1e": "parseIntRound(string,uint256)", +"fe195767": "distributeEPAL(address[])", +"fe19f495": "VESTING_CLIFF_DURATION()", +"fe1b0a5c": "setHardCap(address)", +"fe1b588f": "CoinExchange()", +"fe1b602a": "getPVPCycles(uint32[])", +"fe1b6f8f": "getVendorName(address)", +"fe1bae83": "callforhelp(uint256)", +"fe1c5aac": "SetParticipantURI(address,address,string)", +"fe1c91fa": "performWithdrawAccounting(uint256,address)", +"fe1cdbb8": "Module(address)", +"fe1ce5d7": "checkOwner(address,address)", +"fe1d2295": "BankWithdrawal(address,uint256)", +"fe1d470d": "calculateDiceProfit(uint256,uint256)", +"fe1da528": "tokensByEurTx(string)", +"fe1dcbb1": "AuthorizeOperator(address,address,bool)", +"fe1e079e": "getNumAnimalsXPlayer(address)", +"fe1ebb04": "augmintReserves()", +"fe1f06ea": "IQIAN(uint256,string,uint8,string)", +"fe1f11f1": "getNbits(bytes)", +"fe1f6a0b": "createGame(bytes32,address)", +"fe1fd352": "validEmitBuff()", +"fe211279": "testPrintableToken()", +"fe213712": "USER_GET_PRIZE()", +"fe21f306": "chainlinkOracleAddress()", +"fe229b61": "_softRequire(bool,bytes32)", +"fe229f7c": "RecToken()", +"fe22fcd8": "issuanceLastModified(address)", +"fe230675": "hasRecord(address)", +"fe23583d": "fechVoteResultForCandidate(address)", +"fe23b262": "currentPreICObalance()", +"fe23baea": "setHashByWriter(address,bytes32,address,bytes32)", +"fe23c6d1": "BetWon(address,uint256)", +"fe2450c1": "challengeRewardsPercent()", +"fe2506a4": "buyFromBal(uint256,uint256,bytes32)", +"fe2545dc": "purchaseFromVault(uint256)", +"fe25e00a": "arbiter()", +"fe26063f": "getTradeAndHash(uint16,address,address)", +"fe261ab0": "boolToUInt(bool,bool)", +"fe2622a5": "AgriChainDocuments()", +"fe2644c6": "creator_fee()", +"fe26cdeb": "And(bytes32,bytes32)", +"fe26da0c": "publicGetState()", +"fe26f16f": "withdrawABIHash()", +"fe275280": "Silver()", +"fe277aba": "chAllowAirdrop(bool)", +"fe280f2b": "roundInfo(uint32,uint32)", +"fe2830d3": "PausableCrowdsaleImplPaused(uint256,uint256,uint256,address)", +"fe28d1d8": "CROWD_WAVE2_BONUS()", +"fe29fc12": "CategoryCapSet(uint256,uint256)", +"fe2a4e62": "lockAndDistributeTokens(address,uint256,uint256,uint256)", +"fe2b6246": "updateMaxMinComparables(uint256,uint256,uint256,uint256)", +"fe2c6198": "price(string)", +"fe2ca553": "setBalances(uint256,uint256)", +"fe2cce6f": "PaylessMinisplit()", +"fe2cec21": "NeobitToken()", +"fe2d8933": "preIcoInvestors(address)", +"fe2da970": "getUserByUsername(bytes32)", +"fe2dac15": "LogNewQuestion(bytes32,address,uint256,string,bytes32,address,uint32,uint32,uint256,uint256)", +"fe2dc64b": "finalizeProposalVoteResults(bytes32,bytes32)", +"fe2e306b": "playe2Bid()", +"fe2e5db4": "SwapyExchange(address,address)", +"fe2edc1e": "retrieveFinished()", +"fe2fdf0b": "determineAllocation(address[],uint256[])", +"fe2ff4cf": "TokenSold(address,uint256)", +"fe31da3b": "disapproveByB(uint256,string)", +"fe32a6a7": "pushICO(uint256)", +"fe32c448": "TokenHolder(address)", +"fe332a0c": "backDARFtokenOwner()", +"fe33ada9": "isExistFounder(address)", +"fe34e486": "getStatus(bytes16)", +"fe353a5e": "checkWithdrawValueForAddressFX(address,uint256)", +"fe353d28": "_computeNextGen0Price(uint256)", +"fe35530c": "setUserWithdrawalAccount(address)", +"fe35804e": "createLottery(uint256,uint256)", +"fe37f21a": "changelp17(address)", +"fe389e09": "removeContract()", +"fe38ed66": "MarketManager()", +"fe396c71": "mintEarlySupportersTokens(address,uint256)", +"fe399121": "referrerEarnings_()", +"fe3b24b1": "createBBODocument(bytes32,uint256)", +"fe3c333b": "getActiveJudgmentByParty(address)", +"fe3c458e": "addContract(bytes32,address,bytes32)", +"fe3c51df": "getTeamId(string)", +"fe3c5d80": "becomeSnailmaster()", +"fe3c6ad4": "addclip(address,string,string,string)", +"fe3c9b6b": "setIcoEndTime(uint256)", +"fe3ce632": "lookup(bytes4,bytes)", +"fe3d002b": "AllocateAngelTokens(address,address,uint256)", +"fe3d07e4": "decrementInventory(uint256,uint256)", +"fe3d2236": "Oracle_ChangePeriod()", +"fe3e0efd": "TestERC20Token(string,string,uint256)", +"fe3ead72": "interreducemoney(address,uint256)", +"fe415139": "ProdPublicSale()", +"fe4170bc": "setDepositLock(bool)", +"fe417fa5": "claimTokens(address,uint256)", +"fe41b2da": "setInitialValidators(address[])", +"fe4215f7": "read_recast_config()", +"fe4259e3": "isMntpMigrated(address)", +"fe42cb2d": "setTokenExpectedFee(address,uint256,uint256,address)", +"fe42da15": "deleted(string,string,address,uint256)", +"fe435f6b": "getLLV_edit_33()", +"fe43be3f": "startDestruction()", +"fe442478": "sendFromContract(address,address,uint256)", +"fe44a664": "generateWithdrawalHash(string,uint256,address,uint256)", +"fe44d401": "MoncionToken()", +"fe4520ad": "_getOwnerTokens(address)", +"fe45c996": "reVerifiPost(uint256,bool,bool)", +"fe460201": "getTermsAndConditions()", +"fe4667e9": "getMaxLossAfterTrade(address,uint256,uint256,int256,int256)", +"fe47a2ad": "multiRequestAudit(string,uint256,uint256)", +"fe47a8a7": "totalFunding()", +"fe47c806": "processFunding(address,uint256,uint256)", +"fe47d34f": "USC(uint256,string,string)", +"fe49a9be": "ethGiven(address)", +"fe49ba1c": "getUnlockIdentifier(uint256,address,address)", +"fe49dd5f": "halveEntryPrice()", +"fe49e949": "requestChangeInsuranceFees(uint80,uint80,uint80,uint80,uint256,uint80,uint80,uint256)", +"fe4a3ac9": "setExecPrice(uint256)", +"fe4a3e5c": "TokenrateUpd(uint256,uint256)", +"fe4b84df": "initialize(uint256)", +"fe4c39fe": "setMaxArenaOneDay(uint256)", +"fe4c6b08": "_deliverTokens(address,uint256,uint256,uint256)", +"fe4caa64": "isAborted()", +"fe4cee66": "numberOfPartitions()", +"fe4d2a02": "_setupStages()", +"fe4d62f9": "getMiningKing()", +"fe4dd8d9": "getTokenApproval(uint256)", +"fe4e4a84": "exchangeIsRegistered(address)", +"fe4e6bf9": "queueMint(address,uint256,uint256)", +"fe4ee216": "transferTips(address,uint256,address,uint256,uint8,bytes32,bytes32)", +"fe4f7e11": "KangenToken()", +"fe501c6f": "ChannelSettled(uint256)", +"fe50cc72": "getGreeting()", +"fe50ce60": "getBloodlineFromParents(bytes32,bytes32)", +"fe51717a": "releasePause()", +"fe51c588": "changeFactoryAdmin(address)", +"fe52ee70": "setStartingTokensAmount(uint256)", +"fe530027": "trusteeWithdraw(uint256)", +"fe536ebe": "setPreferredSaleStartAndEndTime(uint256,uint256)", +"fe537a82": "upgradeTarget()", +"fe549815": "pendingTokenBalance()", +"fe54b5fc": "kyberHash()", +"fe553250": "adminTransferWorldBalance(uint256)", +"fe556cf0": "CirculationSupply()", +"fe55932a": "setName(uint256,string)", +"fe562ee6": "moveBlockValue(address,uint8,uint8,uint8,uint8,uint256)", +"fe5675cc": "toNext()", +"fe56e232": "setManagementFee(uint256)", +"fe56f5a0": "setEntranceFee(uint256)", +"fe5709c2": "getSlotWeight(uint256,uint256)", +"fe5709cd": "createPainting(uint256)", +"fe575a87": "isBlacklisted(address)", +"fe5815a6": "hasFinished()", +"fe58d3a3": "timeLimitEnable()", +"fe599559": "updateEthToUsdExchangeRate(uint256)", +"fe5a4e2d": "contractorReleaseFunds(bytes16,address,address,uint256,uint256)", +"fe5aa8e0": "getUserIndexOnToken(address,address)", +"fe5ba303": "reservesPerUnitToken()", +"fe5d5868": "XZBX()", +"fe5daae6": "_queAmount(uint256)", +"fe5e1853": "totalBet()", +"fe5e7e3e": "endICO14()", +"fe5f1dc4": "PRESALEPLUSCROWDSALE_EVE()", +"fe5f2e88": "refund(string)", +"fe5ff154": "recruitHeroFee()", +"fe602c65": "is_proposal_supported()", +"fe60d12c": "reserved()", +"fe60ed81": "changeUserGroup(address,uint256)", +"fe6129d5": "setPromoBonus(address,uint256)", +"fe61303b": "createGuardianSale(uint256,uint256,uint256,uint256,uint256,uint256)", +"fe6214c4": "LDTCrowdsale()", +"fe62a0a6": "transferFromPretgefund(address,uint256)", +"fe63300a": "registerExternalBill(uint256,address,address,uint256,uint256,uint256)", +"fe637e5e": "getScoreChange(int256,int256)", +"fe63d701": "removeQueueElement(uint256)", +"fe647394": "setTeamProfitAddress(address)", +"fe64d6ff": "changeAddress(address)", +"fe65066e": "setUsdMnr(uint256)", +"fe65bb65": "cashHistory()", +"fe669c26": "addPhase(uint256,uint256,uint256,uint256)", +"fe675deb": "Exchange(address,address,address,address,bytes32,uint256,address)", +"fe675f13": "toggleFieldActivation(string)", +"fe67a189": "finalizedTime()", +"fe67a54b": "endAuction()", +"fe687b2b": "teamc()", +"fe68b528": "getExchangeInformation(address)", +"fe68e285": "toNextStage()", +"fe68f73b": "getTargetBudget(uint256,uint256)", +"fe69c926": "onFrozenToken(address,uint256,uint256)", +"fe69dacd": "validDraws(address,uint256,uint256[])", +"fe6a0cd6": "hasNextSeedHashB()", +"fe6ad6c6": "isNotarized(bytes32)", +"fe6bca8f": "AllTest7()", +"fe6c19a4": "HelixexToken()", +"fe6cf9ee": "Krypticion()", +"fe6d4305": "ALC_DECIMALS()", +"fe6dcdba": "top()", +"fe6e0441": "minimalWeiTLP1()", +"fe6f0d82": "testConstructorEvent()", +"fe6f1b05": "percentDivider()", +"fe6f2a60": "matches(bytes32,bytes32)", +"fe6fef44": "setTokenQuota(uint256)", +"fe7009f2": "getSupplier(address)", +"fe704c1f": "RWQToken(uint256)", +"fe70a123": "KilledTokens(address)", +"fe70f417": "getNewForkReputationGoal()", +"fe71aec5": "LittleCactus()", +"fe71be6e": "monarchToken()", +"fe72277d": "addHashType(bytes32)", +"fe7279b1": "setTokenTransferFeeReceiver(address,address,address,address)", +"fe72ac7f": "newPrice(uint256)", +"fe72e717": "toDie(bytes)", +"fe72f3be": "addMember(string,string,string,uint256,string,string,uint256,string)", +"fe73bf21": "developer_edit_text_Exchanges_links(string)", +"fe73e3ec": "preliminaryGameResult(uint64)", +"fe73f74c": "withdrawTokenFromTAR(address,uint256)", +"fe742c6a": "millionInCents()", +"fe74f05b": "assertEq(int256,int256)", +"fe757fb5": "lastClaimPrice()", +"fe758a1e": "_timelimitCal(address)", +"fe75dff6": "GcoinProto()", +"fe75ff54": "runLottery(uint256)", +"fe76fbe3": "setStageOpeningTime(uint8,uint32)", +"fe777bcd": "etherForSale()", +"fe77adda": "reloadTickets(uint256,uint256,uint256)", +"fe77f5e5": "getCostToNextLevel(uint256)", +"fe7805f2": "MultiSigWallet()", +"fe786c5f": "prependUnderscore(string)", +"fe79bfd0": "giftCode(string,address)", +"fe7b0007": "calculateClaimable(address)", +"fe7baf8e": "RemoveAuthorityAddress(address)", +"fe7bf05e": "deathData_v6()", +"fe7c550f": "fibos(uint256)", +"fe7ccb79": "CCN()", +"fe7cd999": "registerForICO(address[],uint8)", +"fe7d1587": "canCall(address,address,address,address,bytes4)", +"fe7d8740": "getFreelancerContracts(address,uint256[],uint256[])", +"fe7e187f": "add_kycer(address)", +"fe7eba06": "getCurrencyLength(uint256)", +"fe7f0d14": "DST_BOUNTY()", +"fe800489": "totalUnitsLeft()", +"fe802d7f": "isMHTHolder(address)", +"fe8190ce": "test_v1()", +"fe8252f3": "withdrawlEnabled()", +"fe830334": "initToken(string,string,uint8,address,uint256,bool)", +"fe8311db": "sendLimitTokensToPartner(uint256)", +"fe8312c1": "validateWallet(address,bool,string)", +"fe836931": "freezeAmount()", +"fe8370bb": "NinjaCoin()", +"fe84bff5": "getTransferValue(uint256)", +"fe84c5ec": "fixedExpUnsafe(uint256,uint8)", +"fe853650": "getRandomHashesLength()", +"fe856722": "gasPrc()", +"fe859472": "PractiParlezToken()", +"fe86338c": "cancelOrderList(bytes32[],uint64[])", +"fe86de13": "testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,bool)", +"fe8705d5": "throwOnIncompatibleContract()", +"fe87ee28": "endRC()", +"fe8806f5": "removeRequest(address,address)", +"fe882fe2": "getValueAndBox(address)", +"fe88fc00": "balancsHolder(address)", +"fe892327": "DML_TOTAL_SUPPLY()", +"fe8925f4": "interestFeePercent()", +"fe89960f": "getFreeToken(string,address,uint256,bytes32,bytes32,uint8)", +"fe89a6c1": "MAX_ALLOWED_STAGE_1()", +"fe8a7458": "_isLowercaseLetter(bytes1)", +"fe8b2707": "depositedEtherGeneric(address,bytes4,address)", +"fe8b6642": "setEnforceRevisions(bytes32)", +"fe8beb71": "getVersionFor(address)", +"fe8cbe18": "LogBidWithdrawn(address,uint256,uint256)", +"fe8d640c": "setifoodCommunityAddress(address)", +"fe8d8c77": "setShouldGateGuard(bool)", +"fe8e6a63": "quarryCities(uint256)", +"fe8e77c7": "getGameIdByWalletUser(address)", +"fe8e992f": "unpackAllocation(bytes32)", +"fe8f4763": "ROYBOITokenIToken()", +"fe8f4bbe": "freedWinPoolToWinSystem()", +"fe8fb49f": "setLastMaxInvestments(uint256)", +"fe908b7a": "pay(bytes32,address,address,uint256,uint256,bytes)", +"fe90f3df": "WPAYCoin()", +"fe91d37f": "semanticVersionHash(uint16[3])", +"fe92049d": "submitAnswerByArbitrator(bytes32,bytes32,address)", +"fe925e80": "createLoan(address,address,address,uint256,string,uint256,uint256,uint256,uint256,uint256,uint256)", +"fe937fa4": "setEndMintDate(uint256)", +"fe949159": "sendMessageToChannel(string,string)", +"fe94e504": "setColor(uint8,string)", +"fe95112c": "faythe()", +"fe95a5ce": "hat()", +"fe95cbdd": "getAgentsWithService(uint256)", +"fe95ec9c": "popcnt32(uint32)", +"fe968ade": "putStcWithBto(uint256,uint256,bytes32,uint256,uint256,uint256,uint256,bytes32,bytes32,uint8)", +"fe972054": "create(string,string,uint8,uint256,address,uint256,uint256,uint256)", +"fe972f11": "_toMill(uint256)", +"fe97bcf4": "RandomNumberGenerated(uint256,uint8)", +"fe97e481": "maxCap_MInt()", +"fe97ee88": "hasPhone(address)", +"fe98184d": "trustedUniverseTransfer(address,address,uint256)", +"fe985cb9": "buyin(address)", +"fe98f1d1": "testCantFinalizeIfNotMultisig()", +"fe99049a": "transferFrom(address,address,uint256,uint256)", +"fe992c98": "balanceOfAll(address)", +"fe996956": "PMET(uint256,string,string)", +"fe99ad5a": "transferMinter(address)", +"fe9a3664": "supportList(address)", +"fe9afc5a": "LastUser()", +"fe9b7f2f": "maxAmountETH()", +"fe9bb2da": "setCSCFactoryERC721(address)", +"fe9bf404": "createManager(address,address)", +"fe9c3c28": "purchaseHalted()", +"fe9cc7f4": "VebEX()", +"fe9ccc1e": "maxBetWei()", +"fe9d2828": "getPI_edit_11()", +"fe9d7121": "StorageEther(address,address,address[],uint256,string,string,uint8)", +"fe9d744d": "buyBulkRegularCar(address,uint256[],address)", +"fe9d9303": "burn(uint256,bytes)", +"fe9e1c0f": "buyTokens_Vault(address,uint256,bytes8)", +"fe9fa16f": "testThrowExecuteSellOrderTwice()", +"fe9fab4d": "setPrices(string)", +"fe9fbb80": "isAuthorized(address)", +"fea0029d": "getEmissionType()", +"fea1377d": "USD_HARD_CAP()", +"fea22ae4": "newMinimumTokens(uint256)", +"fea277dc": "withdrawERC721(address,uint256,address,address)", +"fea2920e": "createNewDraw()", +"fea3afb6": "Update_UserPlayHistory_Data(uint32,uint32)", +"fea45621": "changeTotsupp(uint256)", +"fea5d7b1": "mgmtIssueBountyToken(address,uint256)", +"fea5d9e0": "lengthEqual(uint256[],uint256,string)", +"fea708f6": "totalPeriods()", +"fea78df4": "buyGold(uint256,uint256,uint8,bytes32,bytes32)", +"fea7bcfb": "additional(uint256)", +"fea8ae97": "MakerWithdrewERC20Token(address,uint256)", +"fea9b572": "MAX_NUMBER()", +"feaa29d8": "insertProfitHere()", +"feaa4cf3": "updateIntention(uint256,string,string,string)", +"feaaa476": "BurnToken(address[])", +"feac36d7": "insert(bytes32,bytes32)", +"feaceab4": "addPayment(string,address,string,uint256,uint256)", +"fead0097": "setTotalUnvestedAndUnreleasedTokens(address,uint256)", +"fead83a4": "redeemContingencyFundsBal()", +"feadce9c": "servicePause()", +"feadfdbd": "getTimeFromPrize()", +"feaea586": "recoverToken(address,address)", +"feaed589": "releasedMarketingTokens()", +"feaf0872": "getTokenTransferCount()", +"feaf1fe1": "registerToBlacklist(address)", +"feaf653d": "sendEth(address[],uint256)", +"feafb79b": "foundationAddr()", +"feb03fe1": "_handleProductionIncrease(address,uint256)", +"feb088ab": "openingTimePeriodTwo()", +"feb2432a": "addMediator(address)", +"feb272e4": "noDuplicates(bytes)", +"feb27ac9": "Proof_of_Tacos()", +"feb2a20c": "apiAccessDisabled()", +"feb31939": "attack(address,uint256,uint256[])", +"feb371cd": "VUP_TOKEN_SUPPLY_TIER2()", +"feb4ad89": "addEarlyPurchases()", +"feb4c708": "nextIdentityAccount()", +"feb50430": "getLevitatingKittens(bytes32,uint64)", +"feb5d106": "getBPCount()", +"feb7267b": "deleteMintable(address)", +"feb7d2fb": "KoniosToken(uint256,string,string)", +"feb80ee4": "stakeFromTokenContract(address,uint256)", +"feb99390": "add(uint128,uint128)", +"feba95fb": "purchaseFor(uint128,address)", +"febb0f7e": "bar()", +"febb1315": "gasLimitInWei()", +"febb5407": "currentLiquidity(address)", +"febc14b1": "roundCounter()", +"febc2980": "calculateWinnersCount(uint256)", +"febc8c39": "feeAffiliate()", +"febc9dec": "stringEquals(string,string)", +"febdb9b8": "rewardWinner()", +"febe4909": "approve(uint256,address)", +"febe8129": "destrcut()", +"febec059": "GetCurrentTypeSaleCount(uint256)", +"febefd61": "startAuctionsAndBid(bytes32[],bytes32)", +"fec07cb2": "calculateTally(address,uint256)", +"fec0cc19": "setIcoPhase4(uint256,uint256)", +"fec1aa12": "codetokenIndexToApproved(uint256)", +"fec1c41f": "AddNewBooster(uint256,int256,uint256,uint256,uint256,uint256,uint256)", +"fec2e27b": "acceptManagement(string)", +"fec320f4": "ListPairsForReserve(address,address,address,bool)", +"fec35182": "Crowdsale(address,uint256,uint256,uint256,uint256,address,address)", +"fec3e941": "MintAndTransferIAC(address,uint256,bytes32)", +"fec3fbe2": "functionTwo(uint256,uint256,uint256,uint256)", +"fec5438c": "costToCallOraclizeInWei()", +"fec568d4": "TransactionCompleted(uint128,uint256,uint256,string)", +"fec5c5f7": "FINX2Token()", +"fec5d3b0": "BTCRate()", +"fec5f0d2": "applyForGladiatorBattle(uint256,uint256,uint8[2])", +"fec69a87": "OneStandardToken(uint256,string,uint8,string)", +"fec6c66e": "applyFromCertificate(string,string,string,uint256)", +"fec74d31": "eolBlockNumber()", +"fec7c0a2": "FRPRUPEES()", +"fec7fc8e": "isSigned(bytes16,address)", +"fec84aac": "LogUserAddedToWhiteList(address)", +"fec850c3": "tokenSetBurnFeeReceiver(address,address,address,address)", +"fec86fb5": "userdynamicprofis()", +"fec8db83": "C3_TokenCreate(uint256,string,string)", +"fec966df": "countSmartSharingContract()", +"fec97c03": "finishFundraiser(uint256)", +"fec9cd77": "allowanceToBurn(address,address)", +"fec9dc1f": "updateNewToken(address,address)", +"fecab4bf": "vreoSaleOngoing()", +"fecadafd": "pushAtom(uint64,uint8,uint8,uint8,uint32,uint64,uint64,uint128,uint128,uint32)", +"fecc36c0": "fun(int256)", +"fecca5a5": "checkMyDonation()", +"fecd3486": "getTulip(uint256)", +"fecd817c": "cancelBuy()", +"fece5543": "mock_remove(address,address)", +"fecf9959": "withdrawTokens(uint256,address,uint256)", +"fed03118": "getTDETokenExchangeRate(uint256)", +"fed0827e": "RoseCoin()", +"fed09b2f": "isFemaleSale()", +"fed0b877": "distributeAirdropMulti(address[],uint256[])", +"fed0d2a1": "sellMultiplier()", +"fed1c977": "blockTransfering()", +"fed1cec2": "addWinners(uint256)", +"fed2063c": "mintDataStream(address,uint256,bytes32,bytes32,uint256)", +"fed23223": "sellFirst(uint256)", +"fed26772": "zeroFeeTransferByowner(address,address,uint256)", +"fed39929": "productOwner(string)", +"fed3a300": "right89(uint256)", +"fed3b141": "Coinbase(uint256)", +"fed3f18d": "admin_inactive_withdraw(address)", +"fed4614b": "funeral(bytes,int256)", +"fed4de76": "addAuthorizeRole(string,string,string)", +"fed503cd": "transferCoinInStages(address,address,uint256,uint256)", +"fed73b54": "getPlayerIdOfIndex(uint256,uint256)", +"fed7bb07": "getSeedAmountForGameId(uint256)", +"fed82ef3": "setSanityBounds(uint256)", +"fed8a53b": "callbackInsertApproveAndDistribute(uint256,address[],uint256[])", +"fed8b30a": "canSettleOrder(uint256,uint256)", +"fed8f40f": "invalidateMail(uint256)", +"fed9981e": "setDemocAdminEmergency(bytes32,address)", +"fed9d44f": "ARBITRARY_VALUATION_IN_ETH()", +"feda1045": "slaveWallet()", +"feda38bc": "setCrowdsaleOpen(bool)", +"fedabacf": "claimPrepaid(uint256,uint256,uint256,string,uint256)", +"fedb6dfd": "TACTICALCRUISER_FTL_SPEED()", +"fedbceba": "getRankLandLimit(uint256)", +"fedc2a28": "_rewardWinners(string,uint8,address[])", +"fedce093": "TheNextBlock()", +"fedda73b": "HC8ICO()", +"fedda89c": "claimVesting()", +"feddb41c": "peculOld()", +"feddd053": "updateStakers()", +"fede04c3": "reject(uint32,int256)", +"fede5cc6": "issueInternal(address,uint256,bool)", +"fedeac70": "handleQuickCloseChannel(address,bytes32,address,uint256,address,uint256,uint256)", +"fedf1ed8": "getCompte_21()", +"fedfd535": "Config()", +"fedfe46c": "vote(address,uint256,uint256,uint256)", +"fedffec0": "currentReferralPercent()", +"fee01177": "getTopics()", +"fee0596f": "createContractCompany(string)", +"fee13823": "ChargeTreasure()", +"fee1396b": "registerNewRecord(bytes32)", +"fee160be": "CarFare(uint16,uint16)", +"fee16841": "showDeposit(address)", +"fee21471": "getDayIndex_(uint256)", +"fee24454": "sendNowLastCount()", +"fee2cb05": "R2()", +"fee3154c": "setTransferWhitelist(address,address,bool)", +"fee35ff8": "newInvest(uint256,address,uint256)", +"fee4f41e": "signUp(string,address)", +"fee4f84d": "CryptopusToken()", +"fee692a3": "getAutomatedReportDisputeDueTimestamp()", +"fee6d28c": "addSnapshot(string)", +"fee7e35d": "tokenURISafe(uint256)", +"fee8775b": "Ping(address)", +"fee87e3b": "addresstoBytes(address)", +"fee99898": "getFee(address,address)", +"fee99e93": "HPAToken(uint256,string,uint8,string)", +"fee9aa44": "calculateRewardForAddress(address,address)", +"fee9ca13": "continueSale()", +"feea01b9": "create(bytes16,uint64,bytes)", +"feea799b": "rejectTransaction(uint256,bytes)", +"feec6fc1": "Tegchain(uint256,string,string)", +"feec756c": "updateRecipient(address)", +"feec7680": "changeFeesAddress(address)", +"feed5561": "getContributorsCount()", +"feed58ff": "setBackgroundColors(bytes3[])", +"feeda367": "addMarketTo()", +"feee8139": "setColors(uint32[],uint8[])", +"feefee1b": "firstExchangeRatePeriod()", +"fef038e8": "piggyBank(address)", +"fef10b95": "poolReward()", +"fef1dc7d": "seekerValue()", +"fef28cac": "Yudhacoin()", +"fef2cc97": "getPreAuthorizedAmount(address,address)", +"fef429e9": "linkClaimedTo(address)", +"fef47e38": "CREATE_NAME_ROLE()", +"fef4b969": "refundFromSeveral(uint256,address[])", +"fef5ae43": "enterCurrentRound()", +"fef5b185": "updateUserEducation(string,uint256,string,uint16)", +"fef5f1e7": "validateRequestParams(address[4],address,uint256[12],uint256,bytes,uint256)", +"fef636a8": "stage2Start()", +"fef64e37": "packedToStartTime(uint256)", +"fef7d5a8": "findEmptyBenefactorIndex()", +"fef8383e": "gameOpponent()", +"fef88502": "hommie()", +"fef9b5ae": "changeminpublicsale(uint256)", +"fef9cfe1": "setAvailableAfterStart(uint256)", +"fefa69a0": "batchCancelOrders()", +"fefa7d1c": "isLockup(address)", +"fefa7e41": "countDrugs()", +"fefa9bb1": "addReferrer(address)", +"fefaa293": "reservedTokensTeam()", +"fefaa626": "gameFinishedTime()", +"fefacee1": "MediatorFees()", +"fefb130e": "srb(uint256)", +"fefb8dc3": "publishPost(string,string)", +"fefb94a5": "PFAToken()", +"fefba6dd": "transferAnyERC223Token(address,uint256)", +"fefc38fd": "startActivated()", +"fefc7089": "AVAILABLE_RESERVE_SUPPLY()", +"fefc8b41": "test_insert_findWithHintNotTightBound()", +"fefd336c": "getSettingValues()", +"fefd41b9": "balanceOfRick(address)", +"fefd51b2": "getBrick(uint256)", +"fefd6e9a": "allocateEqual(address[],uint256)", +"feff0506": "addListing(string,string,uint256,address)", +"feffd402": "fetchVoteMainInfo()", +"ff00c592": "setNumRewardsAvailableForAddress(uint256,address)", +"ff01f11a": "finalUnpaused()", +"ff01ff08": "setGameVars(uint256,uint256,uint256,uint256,uint256)", +"ff01ffa8": "refundCrowdsaleContributor()", +"ff02326f": "MoonDustDividends()", +"ff025819": "numberOfActiveProposals(bytes32)", +"ff026158": "setSale(uint256,address)", +"ff044add": "oldCratesSold()", +"ff056949": "decreaseBalance(address,uint256)", +"ff05a9f0": "giftPlot(uint256,uint256,address)", +"ff05edd8": "inflateSupply(uint256)", +"ff069b4c": "getPetbyTileId(uint16,uint8)", +"ff06bb57": "setEthInCents(uint256)", +"ff07061b": "LUC()", +"ff08d2b0": "PayMiners()", +"ff09068f": "SMRTCoin()", +"ff0935b1": "checkFeeSchedule(address)", +"ff0938a7": "isPause()", +"ff097659": "getServerInfo(uint256)", +"ff09ff99": "purchaseCity(uint256)", +"ff0a22db": "_shareProfit(uint256,uint256,address)", +"ff0b3fc5": "intervalLength()", +"ff0b9c90": "createCheckpoint()", +"ff0bfc91": "mayGenerateAddr()", +"ff0c5a4b": "ContributionReceived(bytes32,address,address,uint256,uint256)", +"ff0cd868": "ShareEstateToken()", +"ff0ec23e": "setEditionName(uint8,string)", +"ff0efd6c": "submitDistance(uint256[])", +"ff0f27de": "setIDChain(address,address)", +"ff0f2e80": "getNumOrdersByPayee()", +"ff0f2f71": "setTTCAddress(address)", +"ff102896": "tokenRedemption(address,string)", +"ff10dc66": "quickTrade(address,address,uint256)", +"ff11e1db": "collectEther()", +"ff12128a": "step(int256,bool)", +"ff125c8a": "transferAllowed(address,address,uint256)", +"ff13c6c6": "RefundLoaded(uint256)", +"ff1401cc": "OdinCoin(address)", +"ff163aca": "AcquinomToken(address)", +"ff176844": "ThanosXToken()", +"ff1780ec": "rescueToken(address[],uint256[])", +"ff178834": "testApproveWillModifyAllowance()", +"ff17bc98": "burnOwnerTokens()", +"ff184b5d": "EthPerToken()", +"ff18539b": "setDepositCreator(address)", +"ff186b2e": "ethPrice()", +"ff190061": "balanceOfActiveToken(address)", +"ff192bc8": "isFreeze(address)", +"ff197bc3": "presaleTokenSold()", +"ff1ad781": "deadbids(address)", +"ff1ad7fa": "claimRewardBy(address,uint256,string)", +"ff1b01a6": "bet1000(uint256)", +"ff1b4341": "easyPropose(address,uint256,uint256)", +"ff1b636d": "Admin()", +"ff1c52d8": "Queue(bytes32,bytes32,bool,bytes32,address)", +"ff1c559e": "ChampionGameFinished(uint256,address,uint256,uint256)", +"ff1ca005": "supportComponent(uint16,uint256)", +"ff1d20b5": "getSecondStageWallet()", +"ff1d2712": "versionIndex()", +"ff1d83ae": "getTokenGranteesLength()", +"ff1d91b4": "ccStartTime()", +"ff1d9dd4": "updatePoolContract(address)", +"ff1e28a4": "createStamp(address,uint256)", +"ff1f7046": "requiresAuction(string)", +"ff1fd974": "getPayAmount(address,address,uint256)", +"ff2073d7": "fundRaiser()", +"ff208fa5": "test_insert_findWithHintNextAtPosition(int256)", +"ff213498": "FlowingHair()", +"ff21984a": "testMintAuth(int256)", +"ff21f27f": "issueToken(uint256,uint256,uint256,uint256)", +"ff22028b": "requireOwnerUnlockedAmount(uint256)", +"ff2258cb": "diffYears(uint256,uint256)", +"ff2263b7": "firstRoundStartTimestamp()", +"ff2311a4": "GetPatient()", +"ff238839": "showDelegateMsgSender(address)", +"ff23c7f2": "createArtefact(uint256,string,uint256,uint256,uint256)", +"ff23e1eb": "ShalloToken()", +"ff249bb0": "getTokenPacksAvailable()", +"ff25af24": "migrateAccount(bytes32,bytes32,uint256,uint256,address)", +"ff25e16d": "getLogErrorArguments()", +"ff25f859": "KIN_FOUNDATION_ADDRESS()", +"ff262ea5": "construct(uint256)", +"ff266d26": "reopen(address)", +"ff272ad4": "__toDecimals(uint256)", +"ff27848a": "GoldToken(address)", +"ff27c476": "shiftBitsRight(bytes,uint256)", +"ff27cbda": "getPI_edit_4()", +"ff28bcc2": "increaseReward()", +"ff28cdaf": "WCT(address)", +"ff28d625": "releaseEarning(bytes32,bytes32,bytes32,bool,address,address)", +"ff29507d": "fundingStopBlock()", +"ff299a63": "BTCUToken(uint256,string,uint8,string)", +"ff29bc95": "assignBalance(address,uint256,uint256)", +"ff29c104": "getTotalLeaderboards()", +"ff2a3776": "claimAllUnsold()", +"ff2b0571": "doFreeExtension(bytes32)", +"ff2b247f": "addNewTicket(uint256,bytes32,uint256,uint256,uint256)", +"ff2b350d": "acceptGiftTokens(address)", +"ff2d4b71": "addDoctor(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"ff2eff94": "Cow()", +"ff2f7a35": "getDeed(bytes32)", +"ff30feef": "walletTranslate()", +"ff31e930": "prizePoolAddress()", +"ff31f9e6": "getSecurityDepositRegistry()", +"ff332ab7": "getTokenDetails()", +"ff34ef7d": "PrimaToken()", +"ff359cb8": "RATE_SALESTAGE2()", +"ff36cf59": "contributeETH(address)", +"ff377705": "getNumEntries(address,address,uint256)", +"ff37839b": "getTxt(uint256)", +"ff37d31d": "escrowDeed(uint64)", +"ff394153": "transferEthersToDividendManager(uint256)", +"ff39ae55": "EthereumExtreme()", +"ff3a5eea": "isIco()", +"ff3a91d9": "getOwnerPicture(bytes32)", +"ff3adc83": "GazeCoinCrowdsale()", +"ff3af97f": "setBonusToken(address,uint256,uint256,uint256,address,uint256,uint256,uint256)", +"ff3bf1f4": "sitePercent_()", +"ff3c1a8f": "getTitle()", +"ff3c9472": "adduser(string,string,address)", +"ff3d1be0": "stopPreIco_step1()", +"ff3d398c": "buyTokensByAtes(address,uint256,string)", +"ff3e51c8": "ZULICC()", +"ff3e8ba1": "_transferDirect(uint256,uint256,uint256,bytes32)", +"ff3ef460": "_userOwnsToken(address,uint256)", +"ff3f427c": "createMobsterWithOwner(string,address,uint256,uint256,uint256,string)", +"ff3fb765": "testUpdateCase()", +"ff4039ea": "getDelegate(uint32)", +"ff40807b": "getAccumulator()", +"ff40fcf6": "buyBBC(address)", +"ff414b64": "getBalanceERC20(address)", +"ff41f5cc": "HUT34_RETAIN()", +"ff423357": "withdrawAmount(uint256,address)", +"ff429fc8": "getCooldown(uint16)", +"ff42fd41": "getTotalLockedAmounts(address)", +"ff4329ee": "receiveCashback(address)", +"ff4408ee": "stopCrowding()", +"ff46f210": "isUnfrozenAccount(address)", +"ff470507": "VaultbankVotingToken()", +"ff48fd9c": "mintGreen(address,uint256)", +"ff49b26e": "createEvent(uint256,uint256,uint8,uint32,address,uint256,uint8)", +"ff49b8ef": "KyberWhiteList(address)", +"ff4a6638": "followTrader(bytes,address,bytes32,uint256,address,uint256)", +"ff4a7a7c": "Blin()", +"ff4ab29c": "setMarketFees(uint256)", +"ff4b6fea": "_shiftLeft(bytes32,uint256)", +"ff4b9b95": "clearCandidateCache()", +"ff4bd173": "dealBuyContract(uint256,uint256,string,uint256,uint256,string)", +"ff4bf170": "TechieCoin()", +"ff4c9fa5": "getCurrentPriceForToken(uint256)", +"ff4cfa5e": "onSignUp(string,uint256)", +"ff4d7404": "sell(uint8,string,uint256,uint256,uint32)", +"ff4dddc4": "tokensInWeiSold()", +"ff4ea29e": "migrateTokens(address[])", +"ff4f03a9": "developeo()", +"ff507efa": "Consulteth(uint256,uint256)", +"ff508d76": "renderWeb()", +"ff50abdc": "totalDeposited()", +"ff50fcb6": "usedIcoSupply()", +"ff510ad8": "isOnTrade(uint256)", +"ff51d18c": "getFlightConnections(uint16)", +"ff523cb2": "oraclizeQueryGas(uint256)", +"ff53c5a3": "refundInvestor(address)", +"ff552482": "GennovaToken()", +"ff556ecb": "releaseUnicorn(uint256)", +"ff55da1c": "assertOnlySpecifiedCaller(address,bytes32)", +"ff55e2ee": "setCasinoAddress(address)", +"ff5639c4": "optInFromClassic()", +"ff56b59a": "start6Phase2025()", +"ff56b65a": "getTxPaymentKWh(bytes32)", +"ff5732a5": "calculateTokenGet(uint256,uint256,uint256,bool,bytes32)", +"ff574213": "YeekFormula()", +"ff584597": "setGameResult(bytes32,int256,int256)", +"ff585caf": "callback(uint256)", +"ff592125": "issuedNum()", +"ff596069": "computeAddressBonus(uint16)", +"ff597790": "getSold(uint256)", +"ff598a06": "betTotalGasprice_()", +"ff59f3cc": "theCyberGatekeeper()", +"ff5a478b": "finalizeTge()", +"ff5a47bd": "generateSeedB()", +"ff5b98b8": "setAvgReportingGasPrice(uint256)", +"ff5bc8a7": "getSaleContractTokensLimit(address)", +"ff5ce378": "_addTokenTo(address,uint256)", +"ff5d2c39": "to62Encoding(uint256,uint256)", +"ff5de44b": "getStockBalance(address,address,uint256)", +"ff5e51b3": "VTOSToken(uint256,string,string)", +"ff5e7d4d": "lockedFundsSeconds()", +"ff5f1346": "forSell()", +"ff5f8b4b": "takeOwnership(uint256,address)", +"ff5fcf01": "initializeNewSale(uint256,uint256,address,address)", +"ff5feb3e": "getVoterVotesCount(address)", +"ff5ff81f": "LastWillContractOraclize(address,address[],uint8[],uint256)", +"ff600081": "getValuePerMicroKey()", +"ff60af84": "setNewMinDeposite(uint256)", +"ff60cdf6": "get1TokenSellPrice()", +"ff615b87": "SECOND_PHASE_PRICE_FACTOR()", +"ff61ad09": "getRoomBalance(uint256)", +"ff62d2cf": "rewardAdjustmentPeriod()", +"ff630748": "setStepLimits(uint256,uint256)", +"ff6307f8": "angelFoundationShareDenominator()", +"ff6387ad": "setconfigurationTokenPrice(uint256)", +"ff6395a4": "assigned_bids()", +"ff63ac3b": "_getTime()", +"ff6417c1": "paidAddress(uint256)", +"ff6477be": "getScam(uint256)", +"ff64d469": "weR()", +"ff65226c": "canBuy()", +"ff655320": "withdrawFirst()", +"ff65e44a": "purchaseBronze()", +"ff668cbe": "donacionTeleton()", +"ff66a305": "setBountyManager(address)", +"ff67577a": "Appoint_Mediator(uint256)", +"ff67c9f5": "getRequirementTime(address)", +"ff6867c0": "startAndSetStopTime(uint256)", +"ff69ac36": "currentTokenAmount()", +"ff69e2bc": "CurrentPrice()", +"ff69f35e": "CryptoEmojis()", +"ff6a6df7": "MultiValidator()", +"ff6c33e6": "TOKEN_OWNER()", +"ff6c8b87": "MPGame(uint8)", +"ff6d24b1": "SedPOWToken()", +"ff6d6f63": "BCTToken(uint256,string,string)", +"ff6f0d54": "TipSmart()", +"ff6f2914": "foundersRewardsAccount()", +"ff7070eb": "_processIncomingEther(address,uint256)", +"ff70bd9c": "PirateNinjaCoin(string,uint8,string,uint256,uint256)", +"ff70c4d1": "getBuyerAddress(uint16,uint16)", +"ff70e8d9": "STAKE_MULTIPLIER()", +"ff70fa49": "setDeveloper(address)", +"ff71c6b0": "WALLET_T8EX_COMMUNITY()", +"ff722b08": "getSkillTypeCnt()", +"ff72c845": "bat()", +"ff739e40": "minEnterFee()", +"ff73d2d8": "getIsRevenuePaid(address,uint256)", +"ff74927b": "strConcat(string,string)", +"ff74c0b8": "subTotalInvoiced(address,uint256,uint256)", +"ff74e915": "NewContent(string)", +"ff75567b": "participant2SentEtherCount()", +"ff757d59": "kittenContract()", +"ff776f55": "regist(address)", +"ff77898a": "numberOfContractors()", +"ff7835bf": "SmartCoinCash()", +"ff78461c": "initSilver()", +"ff786f2d": "LogTradeError(address,address,uint256,uint256,uint16)", +"ff7885e8": "withdraw(address,address,address)", +"ff78d5ed": "mdtComparable()", +"ff78e48b": "setIsParentOf(bool)", +"ff79d600": "BATAGOR()", +"ff7b5730": "getSCF()", +"ff7c9329": "setMintingCompleted()", +"ff7c977f": "admin_dividend(int256,int256)", +"ff7e17b6": "endTimeTLP1()", +"ff7e5abd": "vestingIsCompleted(address,uint256)", +"ff7f5f2a": "EtherizationUtils2()", +"ff8028b3": "megaCandyToken()", +"ff80b69a": "minPresaleAmount()", +"ff81c554": "coinMinted()", +"ff81fb91": "unhint(int256,bytes32)", +"ff82b174": "getUserBigPromoBonus(address,address)", +"ff83ce17": "ManagerSet(address,bool)", +"ff83f562": "acceptOwnership(string)", +"ff840553": "roundid()", +"ff8489df": "tokensForFinalize()", +"ff848eaf": "newDeal(uint256,uint256,uint256,uint256)", +"ff84990c": "MRDSCoinToken()", +"ff84d49f": "setMiniPoolEdit_3(string)", +"ff84ed36": "Identity(address,address)", +"ff855ac3": "withdrawTokens1(uint256)", +"ff85bd39": "Free()", +"ff85fba2": "forceStart()", +"ff862839": "modifyairdrop(uint256)", +"ff8872c2": "accountEthAmount(address)", +"ff895a62": "deActivate()", +"ff897dbd": "updateMinAmount(uint256)", +"ff89a720": "ECCToken(uint256,string,string)", +"ff8bfffc": "sendEthTweet(uint256,bool,string,bool,string,string,string)", +"ff8cffc1": "returnBorrowerPaidLate(uint256)", +"ff8ed0f7": "Map(address,uint256)", +"ff8ee507": "EthernalLoveParent()", +"ff8f7551": "FINCO()", +"ff8f9b9f": "LOL10()", +"ff8f9de7": "BuyRTCtokens()", +"ff8fa0dd": "transferFromWithData(address,address,uint256,bytes32)", +"ff8fec7f": "setHashByProvider(bytes32,bytes32)", +"ff9151dd": "retrait_4()", +"ff91b949": "nonPublicSupply()", +"ff91bb45": "castVote(address,uint256)", +"ff92eb2c": "selleth(uint256)", +"ff938f4a": "addClientAuthority(address)", +"ff93a512": "createEvent(uint256,uint256,uint256,uint256,uint256,uint256,address[])", +"ff947525": "isShutDown()", +"ff94e502": "getIdByIndex(uint256)", +"ff950e90": "batchSpawnAsset(address[],uint256[],uint256[],uint256)", +"ff95a8d2": "grantFounderTeamToken()", +"ff96b467": "setLockup_contributors(address,uint256,uint256)", +"ff97278f": "_timeLimit(uint256)", +"ff981099": "getVotes(uint256)", +"ff9852bf": "balanceOwed(address)", +"ff989a0d": "safeDecrement(uint256,uint256)", +"ff9913e8": "allow(address)", +"ff992ef5": "addInvestorList(address,uint256)", +"ff993272": "bonus10end()", +"ff993a18": "ChangeBuyRate(uint256)", +"ff9a6773": "DexToken(address,address,address,uint256,uint256,uint256)", +"ff9b3acf": "house()", +"ff9c1c5c": "preICODataInitialized()", +"ff9c8437": "releaseStake(uint256,address,address,uint256)", +"ff9e1b38": "addUndergraduate(uint32,string,string,string,uint8,uint8,uint8,uint8,uint8,uint16,uint32,uint32)", +"ff9e3948": "phase_3_remaining_tokens()", +"ff9e7fe1": "MaxPowerCoin()", +"ff9f0e5c": "updateToken()", +"ff9f3055": "generateDna(uint256[])", +"ff9f633f": "lockedAddresses(address,uint256)", +"ffa05698": "get_back()", +"ffa08cb7": "checkPendingWithdrawal()", +"ffa094fb": "highestBidIsCC()", +"ffa1a2f1": "deleteMark()", +"ffa1ad74": "VERSION()", +"ffa230b0": "totalCharitySent()", +"ffa2548a": "LifeSet_008()", +"ffa2f5c2": "coindropsStatus()", +"ffa309e4": "currentFiscalYear()", +"ffa32d1c": "DST_ADVISERS()", +"ffa34f7c": "isFreezing(address)", +"ffa39d27": "ElectricCoin()", +"ffa39d3f": "_isAuthorized(address,bytes4)", +"ffa40a4c": "pregnantPandas()", +"ffa49c6a": "expiryEpoch()", +"ffa59501": "votesRemaining(uint64,uint64,uint8)", +"ffa61f69": "AllowSuccess(address,address)", +"ffa640d8": "tradeContract()", +"ffa651b6": "setEngineerInterface(address)", +"ffa67f6c": "crowdsaleUnpause()", +"ffa68839": "initDate()", +"ffa696d3": "exits(bytes32)", +"ffa6ae80": "isIdRegistered(bytes16)", +"ffa72707": "startBuying(uint256)", +"ffa82f78": "advisorsTokenAmount()", +"ffa89a00": "permissionToChange(address,address,uint256)", +"ffa8acde": "StrongHold()", +"ffa8c44a": "MINSALESCAP()", +"ffa90f7f": "redeemFrom(address,uint256,bytes,bytes)", +"ffa97aca": "getInvoice(address,bytes32)", +"ffaa3608": "voteFor()", +"ffaa67d4": "deployVesting(address,string,uint256,bool,bool,bool,address)", +"ffaa9c22": "setAllSupply(uint256)", +"ffaad6a5": "depositTo(address,uint256)", +"ffab0959": "backersRedeemed()", +"ffab3269": "EthRefunded(address,uint256)", +"ffab7dcd": "setPlayerGeneralDt(uint64,uint32)", +"ffab984d": "preIcoBuyPrice()", +"ffacade4": "setFilter(uint256,address)", +"fface4a3": "rowQuiter()", +"ffacf300": "doCrowdsaleMinting(address,uint256,int256)", +"ffad4fc1": "batchLock(address[],uint256)", +"ffad75eb": "finishICO(bool)", +"ffae15ba": "e()", +"ffae2c5b": "getAuthority(uint256)", +"ffae399e": "shouldRevert(bool)", +"ffaef25e": "addDataResponse(address,address,string)", +"ffaf78c2": "_createPiranha(string,address,uint256,uint8,uint256,uint8)", +"ffaf862f": "getProductWeiRaised(address)", +"ffb00df1": "TOKENS_LOCKED_2Y_TOTAL()", +"ffb05c6f": "minRequiredBlockQueueTime()", +"ffb0885d": "forceTransfer(address,uint256)", +"ffb171fb": "verifyBalanceProof(address,uint256,bytes)", +"ffb1a06d": "priceIsStale()", +"ffb1a6cb": "getWins(address)", +"ffb24446": "setMaxTicket(uint256)", +"ffb2c479": "process(uint256)", +"ffb2d35d": "allowRefund()", +"ffb308ef": "writeDocument(uint128,uint16,uint256,bytes32[],string,string,string)", +"ffb31c62": "BetterAuction()", +"ffb3401d": "SimpleAuction(uint256,address)", +"ffb38e84": "_setMinter(address,bool)", +"ffb391fe": "HM(uint256)", +"ffb40152": "contract_verified()", +"ffb4c857": "_confirmAndCheck(bytes32)", +"ffb4e44d": "get_participant(address,address)", +"ffb54a99": "tradingOpen()", +"ffb58247": "Ektcoin(uint256,uint256)", +"ffb5fc2a": "changeDeDeNetwork(address)", +"ffb747f0": "updateBatches(address,address,uint256)", +"ffb7bfba": "watchProposal(uint256)", +"ffb87173": "pixelPrice()", +"ffb92678": "commFoundAddr()", +"ffba376c": "unfreezeTokens()", +"ffbac044": "KickCommitteeFromMapAndArrayEvent(address)", +"ffbafdfe": "updateState(uint256,uint8)", +"ffbb62a3": "withdrawCoins()", +"ffbc9bd0": "canSubmit()", +"ffbd26ce": "addReinforcedWhitelist(address[])", +"ffbd400b": "boolToUInt(bool)", +"ffbd4dd5": "checkCertificate(string)", +"ffbd6f72": "splice(uint8[],uint256,uint256)", +"ffbd73d0": "OSUniEDUSupply()", +"ffbd8c37": "buyBNNTokens()", +"ffbfd19e": "accUserReward()", +"ffbfd38b": "FooStdToken()", +"ffc0060e": "QingFengCabve(uint256,string,uint8,string)", +"ffc0483d": "CoreAddress()", +"ffc0d035": "hgtDecimals()", +"ffc1b038": "blacklistInvestor(address)", +"ffc31215": "getStore(string)", +"ffc3a769": "transfer(address[],uint256[])", +"ffc3f1f2": "HyperToken()", +"ffc42904": "MarketContract()", +"ffc48c61": "buyerAddressTransfer(string,address,address)", +"ffc4bbb3": "FirstLevelCost()", +"ffc52a1f": "registerByList(address[],uint256[])", +"ffc54ea4": "setTokenActive(uint256,bool)", +"ffc6ff1e": "closeSubmission()", +"ffc797e4": "setLowerBondPrice(uint256,uint256)", +"ffc85dc5": "finalizeDeposits()", +"ffc8bcd7": "getRefToById(address,address,uint256)", +"ffc8c4cb": "totalConsume()", +"ffc9152e": "isRefunded(address)", +"ffc92376": "subEmployerTotalInvoiced(address,address,uint256)", +"ffc9896b": "getUserData(address)", +"ffca2968": "ExternalSaleSha3(uint8,bytes32,address,uint256,uint256)", +"ffcab3e9": "getValidDurationSignatures()", +"ffcad44e": "getGroupFileCount(string)", +"ffcb1edb": "getDividendTokenSupply()", +"ffcb39c2": "tier0(address)", +"ffcbb5df": "printStats()", +"ffcc7bbf": "getUserAtIndex(uint256)", +"ffcc8484": "nextroundERCtradeactive()", +"ffcce369": "changeIPFSHash(string)", +"ffcd64e5": "_issueByTranche(bytes32,address,address,uint256,bytes,bytes)", +"ffcdcb51": "AhooleeTokenPreSale(uint256,uint256,address,address,uint256,uint256,uint256,uint256,uint256)", +"ffcecf09": "PRE_SALE_START_3()", +"ffcf1ade": "logPromiseCanceled(uint256)", +"ffcf21a9": "eventOracles(bytes,uint256)", +"ffd10e07": "enterPool(address)", +"ffd19e8c": "isAlreadyProcessed(uint256)", +"ffd40b56": "allocatorBalance(address)", +"ffd4185c": "QuantumXICO()", +"ffd45f16": "calculateTokenCount(uint256,uint256)", +"ffd479bb": "setBaseInfo(uint256,bool,bool)", +"ffd48b73": "buyInternal(address,uint256,uint256)", +"ffd48f40": "setDelegadoDeDistritoVerify(bytes32)", +"ffd4e0e2": "getTotalIcoTokens()", +"ffd4e799": "HTJToken()", +"ffd4f4b2": "withdrawTokensFromContract(uint256)", +"ffd571ca": "ethersContributed()", +"ffd68462": "readCheckList(address,uint256,uint256)", +"ffd6a052": "ChangeAdminWalletAddress(uint256,address)", +"ffd71e13": "loadCoreAddress(address)", +"ffd740df": "removeNode(uint256)", +"ffd7b5e6": "investWithCustomerId(address,string)", +"ffd85b68": "setControllerDelegate(address)", +"ffd864d3": "chief()", +"ffd9ca40": "register(bytes20,uint64,bytes)", +"ffda0a37": "settleInterest()", +"ffdaa1b8": "TokenWithdraw(address,uint256,address,uint256)", +"ffdab909": "removeEntry(uint256)", +"ffdb0eb3": "getXRateProviderLength()", +"ffdcf095": "transferWithNarrative(address,uint256,string)", +"ffdd108b": "addEvent(uint256,string)", +"ffdd5cf1": "getInfo(address)", +"ffde0c74": "getGameState(uint256)", +"ffde8eae": "dismissBunner(address)", +"ffe0a9f2": "contractSymbolUpdate(string,bool)", +"ffe0fa66": "CarRegistry()", +"ffe189ef": "prev(uint80)", +"ffe280ee": "setWeight(uint256,uint256,bytes)", +"ffe2d77e": "directorLock()", +"ffe302d1": "setPlz(string)", +"ffe34512": "getNumChannels(address)", +"ffe3acc7": "changeGeneralSaleStartDate(uint256)", +"ffe3c6fd": "zKill()", +"ffe45b14": "getHTLCInvalidationTimeoutExtension(uint256,int256,bytes32,bytes32)", +"ffe48c76": "getBCDTRateForCurrentRound()", +"ffe4914a": "hdivide(uint256,uint256)", +"ffe496f2": "setMarginSpend(uint256)", +"ffe4fe4c": "roundFor(uint256)", +"ffe55303": "unfreezeCreditScore(uint256,string)", +"ffe5725f": "create(address,address,uint256)", +"ffe575b1": "Daxther()", +"ffe57c16": "byuoutActive()", +"ffe619df": "buyPixelToken(uint24,uint256,uint24)", +"ffe648d4": "releaseAllOnceLock(address)", +"ffe6bbd8": "myEarnings()", +"ffe8ee35": "SetDivTime(uint256)", +"ffe90ba6": "offsetIndex()", +"ffe94af0": "burnPass(bytes32,address)", +"ffe99ca7": "getCitiesStrings(uint256[])", +"ffea632b": "initialize(address,address,uint8,address)", +"ffeb7d75": "setUpgradeMaster(address)", +"ffec34e3": "TokenMintPoD(int256)", +"ffecf516": "addBot(address)", +"ffed6ed7": "buyAd(uint8,uint8)", +"ffeddd49": "addPolicy(bytes32,uint32,uint32,uint256,string)", +"ffee7c97": "getBookLength()", +"ffeea273": "withdrawWallet2()", +"ffeeac82": "info_Name()", +"ffeecfaa": "Log1(address,bytes32,uint256,string,string,uint256,bytes1)", +"ffef2b00": "SortCompetitionScores(uint32)", +"ffef8f88": "Share(uint256)", +"ffef9b3c": "_checkMaxRoundSupply(uint256)", +"fff04a87": "test_invalidBalanceNotZero()", +"fff07241": "playerExist(address)", +"fff10aba": "getEventsHistory()", +"fff28137": "reclaimToken()", +"fff311b1": "ownerSetjackpotContract(address)", +"fff35670": "icoLaunchTimestamp()", +"fff3a01b": "transfer(address,string,uint256)", +"fff3ad33": "getAddTokenDataTracking()", +"fff3c457": "readMessages(uint256)", +"fff43b4e": "_setBurnPool(uint256)", +"fff57ba3": "withdrawSettle(bytes32,bytes32,bytes32)", +"fff57fe1": "claimableOCDividend(address,address)", +"fff6a540": "LongBCoin(uint256,string,uint8,string)", +"fff6fb54": "TTOH()", +"fff78f9c": "doThrow()", +"fff7a97e": "addWallet(address,address)", +"fff83edf": "founderAmounts(uint256)", +"fff85d49": "addChunk1ToWhiteList()", +"fff8d42b": "phase2StartingAt()", +"fff93ec3": "setLandingPage(string)", +"fff95ce3": "getIsPoop()", +"fff9627d": "PRESALE_VAULT_START()", +"fff9d5b9": "confirmProofOfWork(uint256)", +"fffa932b": "withdrowTo(address)", +"fffa9d0c": "setGood(bytes32,uint256,uint256)", +"fffb5183": "initialize(uint256,address,uint256)", +"fffcde7c": "EOSINT()", +"fffce84f": "bountyFreeze(address,bool)", +"fffd52c6": "reading()", +"fffda870": "lastHorseSex()", +"fffdbe2c": "frozenTokensSupply()", +"fffe088d": "saleAddress()", +"fffeb1ca": "externalCheckSignBool(bytes32,bytes,address)", +"ffff6b04": "vestingSchedule(address)", +"ffffce47": "exchangeRateOracle()" +} \ No newline at end of file diff --git a/signer/fourbyte/abi.go b/signer/fourbyte/abi.go new file mode 100644 index 000000000000..585eae1cd848 --- /dev/null +++ b/signer/fourbyte/abi.go @@ -0,0 +1,164 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fourbyte + +import ( + "bytes" + "encoding/json" + "fmt" + "regexp" + "strings" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" +) + +// decodedCallData is an internal type to represent a method call parsed according +// to an ABI method signature. +type decodedCallData struct { + signature string + name string + inputs []decodedArgument +} + +// decodedArgument is an internal type to represent an argument parsed according +// to an ABI method signature. +type decodedArgument struct { + soltype abi.Argument + value interface{} +} + +// String implements stringer interface, tries to use the underlying value-type +func (arg decodedArgument) String() string { + var value string + switch val := arg.value.(type) { + case fmt.Stringer: + value = val.String() + default: + value = fmt.Sprintf("%v", val) + } + return fmt.Sprintf("%v: %v", arg.soltype.Type.String(), value) +} + +// String implements stringer interface for decodedCallData +func (cd decodedCallData) String() string { + args := make([]string, len(cd.inputs)) + for i, arg := range cd.inputs { + args[i] = arg.String() + } + return fmt.Sprintf("%s(%s)", cd.name, strings.Join(args, ",")) +} + +// verifySelector checks whether the ABI encoded data blob matches the requested +// function signature. +func verifySelector(selector string, calldata []byte) (*decodedCallData, error) { + // Parse the selector into an ABI JSON spec + abidata, err := parseSelector(selector) + if err != nil { + return nil, err + } + // Parse the call data according to the requested selector + return parseCallData(calldata, string(abidata)) +} + +// selectorRegexp is used to validate that a 4byte database selector corresponds +// to a valid ABI function declaration. +// +// Note, although uppercase letters are not part of the ABI spec, this regexp +// still accepts it as the general format is valid. It will be rejected later +// by the type checker. +var selectorRegexp = regexp.MustCompile(`^([^\)]+)\(([A-Za-z0-9,\[\]]*)\)`) + +// parseSelector converts a method selector into an ABI JSON spec. The returned +// data is a valid JSON string which can be consumed by the standard abi package. +func parseSelector(selector string) ([]byte, error) { + // Define a tiny fake ABI struct for JSON marshalling + type fakeArg struct { + Type string `json:"type"` + } + type fakeABI struct { + Name string `json:"name"` + Type string `json:"type"` + Inputs []fakeArg `json:"inputs"` + } + // Validate the selector and extract it's components + groups := selectorRegexp.FindStringSubmatch(selector) + if len(groups) != 3 { + return nil, fmt.Errorf("invalid selector %s (%v matches)", selector, len(groups)) + } + name := groups[1] + args := groups[2] + + // Reassemble the fake ABI and constuct the JSON + arguments := make([]fakeArg, 0) + if len(args) > 0 { + for _, arg := range strings.Split(args, ",") { + arguments = append(arguments, fakeArg{arg}) + } + } + return json.Marshal([]fakeABI{{name, "function", arguments}}) +} + +// parseCallData matches the provided call data against the ABI definition and +// returns a struct containing the actual go-typed values. +func parseCallData(calldata []byte, abidata string) (*decodedCallData, error) { + // Validate the call data that it has the 4byte prefix and the rest divisible by 32 bytes + if len(calldata) < 4 { + return nil, fmt.Errorf("invalid call data, incomplete method signature (%d bytes < 4)", len(calldata)) + } + sigdata := calldata[:4] + + argdata := calldata[4:] + if len(argdata)%32 != 0 { + return nil, fmt.Errorf("invalid call data; length should be a multiple of 32 bytes (was %d)", len(argdata)) + } + // Validate the called method and upack the call data accordingly + abispec, err := abi.JSON(strings.NewReader(abidata)) + if err != nil { + return nil, fmt.Errorf("invalid method signature (%s): %v", abidata, err) + } + method, err := abispec.MethodById(sigdata) + if err != nil { + return nil, err + } + values, err := method.Inputs.UnpackValues(argdata) + if err != nil { + return nil, err + } + // Everything valid, assemble the call infos for the signer + decoded := decodedCallData{signature: method.Sig(), name: method.RawName} + for i := 0; i < len(method.Inputs); i++ { + decoded.inputs = append(decoded.inputs, decodedArgument{ + soltype: method.Inputs[i], + value: values[i], + }) + } + // We're finished decoding the data. At this point, we encode the decoded data + // to see if it matches with the original data. If we didn't do that, it would + // be possible to stuff extra data into the arguments, which is not detected + // by merely decoding the data. + encoded, err := method.Inputs.PackValues(values) + if err != nil { + return nil, err + } + if !bytes.Equal(encoded, argdata) { + was := common.Bytes2Hex(encoded) + exp := common.Bytes2Hex(argdata) + return nil, fmt.Errorf("WARNING: Supplied data is stuffed with extra data. \nWant %s\nHave %s\nfor method %v", exp, was, method.Sig()) + } + return &decoded, nil +} diff --git a/signer/core/abihelper_test.go b/signer/fourbyte/abi_test.go similarity index 77% rename from signer/core/abihelper_test.go rename to signer/fourbyte/abi_test.go index 878210be1f21..314c12735b8c 100644 --- a/signer/core/abihelper_test.go +++ b/signer/fourbyte/abi_test.go @@ -1,36 +1,32 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . -package core +package fourbyte import ( - "fmt" - "strings" - "testing" - - "io/ioutil" "math/big" "reflect" + "strings" + "testing" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" ) func verify(t *testing.T, jsondata, calldata string, exp []interface{}) { - abispec, err := abi.JSON(strings.NewReader(jsondata)) if err != nil { t.Fatal(err) @@ -54,6 +50,7 @@ func verify(t *testing.T, jsondata, calldata string, exp []interface{}) { } } } + func TestNewUnpacker(t *testing.T) { type unpackTest struct { jsondata string @@ -97,11 +94,9 @@ func TestNewUnpacker(t *testing.T) { for _, c := range testcases { verify(t, c.jsondata, c.calldata, c.exp) } - } func TestCalldataDecoding(t *testing.T) { - // send(uint256) : a52c101e // compareAndApprove(address,uint256,uint256) : 751e1079 // issue(address[],uint256) : 42958b54 @@ -112,7 +107,7 @@ func TestCalldataDecoding(t *testing.T) { {"type":"function","name":"issue","inputs":[{"name":"a","type":"address[]"},{"name":"a","type":"uint256"}]}, {"type":"function","name":"sam","inputs":[{"name":"a","type":"bytes"},{"name":"a","type":"bool"},{"name":"a","type":"uint256[]"}]} ]` - //Expected failures + // Expected failures for i, hexdata := range []string{ "a52c101e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000042", "a52c101e000000000000000000000000000000000000000000000000000000000000001200", @@ -123,9 +118,9 @@ func TestCalldataDecoding(t *testing.T) { // Too short "751e10790000000000000000000000000000000000000000000000000000000000000012", "751e1079FFffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - //Not valid multiple of 32 + // Not valid multiple of 32 "deadbeef00000000000000000000000000000000000000000000000000000000000000", - //Too short 'issue' + // Too short 'issue' "42958b5400000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000042", // Too short compareAndApprove "a52c101e00ff0000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000042", @@ -138,7 +133,7 @@ func TestCalldataDecoding(t *testing.T) { t.Errorf("test %d: expected decoding to fail: %s", i, hexdata) } } - //Expected success + // Expected success for i, hexdata := range []string{ // From https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI "a5643bf20000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000464617665000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", @@ -148,7 +143,7 @@ func TestCalldataDecoding(t *testing.T) { "42958b54" + // start of dynamic type "0000000000000000000000000000000000000000000000000000000000000040" + - //uint256 + // uint256 "0000000000000000000000000000000000000000000000000000000000000001" + // length of array "0000000000000000000000000000000000000000000000000000000000000002" + @@ -163,79 +158,7 @@ func TestCalldataDecoding(t *testing.T) { } } -func TestSelectorUnmarshalling(t *testing.T) { - var ( - db *AbiDb - err error - abistring []byte - abistruct abi.ABI - ) - - db, err = NewAbiDBFromFile("../../cmd/clef/4byte.json") - if err != nil { - t.Fatal(err) - } - fmt.Printf("DB size %v\n", db.Size()) - for id, selector := range db.db { - - abistring, err = MethodSelectorToAbi(selector) - if err != nil { - t.Error(err) - return - } - abistruct, err = abi.JSON(strings.NewReader(string(abistring))) - if err != nil { - t.Error(err) - return - } - m, err := abistruct.MethodById(common.Hex2Bytes(id[2:])) - if err != nil { - t.Error(err) - return - } - if m.Sig() != selector { - t.Errorf("Expected equality: %v != %v", m.Sig(), selector) - } - } - -} - -func TestCustomABI(t *testing.T) { - d, err := ioutil.TempDir("", "signer-4byte-test") - if err != nil { - t.Fatal(err) - } - filename := fmt.Sprintf("%s/4byte_custom.json", d) - abidb, err := NewAbiDBFromFiles("../../cmd/clef/4byte.json", filename) - if err != nil { - t.Fatal(err) - } - // Now we'll remove all existing signatures - abidb.db = make(map[string]string) - calldata := common.Hex2Bytes("a52c101edeadbeef") - _, err = abidb.LookupMethodSelector(calldata) - if err == nil { - t.Fatalf("Should not find a match on empty db") - } - if err = abidb.AddSignature("send(uint256)", calldata); err != nil { - t.Fatalf("Failed to save file: %v", err) - } - _, err = abidb.LookupMethodSelector(calldata) - if err != nil { - t.Fatalf("Should find a match for abi signature, got: %v", err) - } - //Check that it wrote to file - abidb2, err := NewAbiDBFromFile(filename) - if err != nil { - t.Fatalf("Failed to create new abidb: %v", err) - } - _, err = abidb2.LookupMethodSelector(calldata) - if err != nil { - t.Fatalf("Save failed: should find a match for abi signature after loading from disk") - } -} - -func TestMaliciousAbiStrings(t *testing.T) { +func TestMaliciousABIStrings(t *testing.T) { tests := []string{ "func(uint256,uint256,[]uint256)", "func(uint256,uint256,uint256,)", @@ -243,7 +166,7 @@ func TestMaliciousAbiStrings(t *testing.T) { } data := common.Hex2Bytes("4401a6e40000000000000000000000000000000000000000000000000000000000000012") for i, tt := range tests { - _, err := testSelector(tt, data) + _, err := verifySelector(tt, data) if err == nil { t.Errorf("test %d: expected error for selector '%v'", i, tt) } diff --git a/signer/fourbyte/fourbyte.go b/signer/fourbyte/fourbyte.go new file mode 100644 index 000000000000..01988dcab0fe --- /dev/null +++ b/signer/fourbyte/fourbyte.go @@ -0,0 +1,144 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:generate go-bindata -nometadata -nocompress -o 4byte.go -pkg fourbyte 4byte.json +//go:generate gofmt -s -w 4byte.go +//go:generate sh -c "sed 's#var __4byteJson#//nolint:misspell\\\n&#' 4byte.go > 4byte.go.tmp && mv 4byte.go.tmp 4byte.go" + +// Package fourbyte contains the 4byte database. +package fourbyte + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "os" +) + +// Database is a 4byte database with the possibility of maintaining an immutable +// set (embedded) into the process and a mutable set (loaded and written to file). +type Database struct { + embedded map[string]string + custom map[string]string + customPath string +} + +// newEmpty exists for testing purposes. +func newEmpty() *Database { + return &Database{ + embedded: make(map[string]string), + custom: make(map[string]string), + } +} + +// New loads the standard signature database embedded in the package. +func New() (*Database, error) { + return NewWithFile("") +} + +// NewFromFile loads signature database from file, and errors if the file is not +// valid JSON. The constructor does no other validation of contents. This method +// does not load the embedded 4byte database. +// +// The provided path will be used to write new values into if they are submitted +// via the API. +func NewFromFile(path string) (*Database, error) { + raw, err := os.Open(path) + if err != nil { + return nil, err + } + defer raw.Close() + + db := newEmpty() + if err := json.NewDecoder(raw).Decode(&db.embedded); err != nil { + return nil, err + } + return db, nil +} + +// NewWithFile loads both the standard signature database (embedded resource +// file) as well as a custom database. The latter will be used to write new +// values into if they are submitted via the API. +func NewWithFile(path string) (*Database, error) { + db := &Database{make(map[string]string), make(map[string]string), path} + db.customPath = path + + blob, err := Asset("4byte.json") + if err != nil { + return nil, err + } + if err := json.Unmarshal(blob, &db.embedded); err != nil { + return nil, err + } + // Custom file may not exist. Will be created during save, if needed. + if _, err := os.Stat(path); err == nil { + if blob, err = ioutil.ReadFile(path); err != nil { + return nil, err + } + if err := json.Unmarshal(blob, &db.custom); err != nil { + return nil, err + } + } + return db, nil +} + +// Size returns the number of 4byte entries in the embedded and custom datasets. +func (db *Database) Size() (int, int) { + return len(db.embedded), len(db.custom) +} + +// Selector checks the given 4byte ID against the known ABI methods. +// +// This method does not validate the match, it's assumed the caller will do. +func (db *Database) Selector(id []byte) (string, error) { + if len(id) < 4 { + return "", fmt.Errorf("expected 4-byte id, got %d", len(id)) + } + sig := hex.EncodeToString(id[:4]) + if selector, exists := db.embedded[sig]; exists { + return selector, nil + } + if selector, exists := db.custom[sig]; exists { + return selector, nil + } + return "", fmt.Errorf("signature %v not found", sig) +} + +// AddSelector inserts a new 4byte entry into the database. If custom database +// saving is enabled, the new dataset is also persisted to disk. +// +// Node, this method does _not_ validate the correctness of the data. It assumes +// the caller has already done so. +func (db *Database) AddSelector(selector string, data []byte) error { + // If the selector is already known, skip duplicating it + if len(data) < 4 { + return nil + } + if _, err := db.Selector(data[:4]); err == nil { + return nil + } + // Inject the custom selector into the database and persist if needed + db.custom[hex.EncodeToString(data[:4])] = selector + if db.customPath == "" { + return nil + } + blob, err := json.Marshal(db.custom) + if err != nil { + return err + } + return ioutil.WriteFile(db.customPath, blob, 0600) +} diff --git a/signer/fourbyte/fourbyte_test.go b/signer/fourbyte/fourbyte_test.go new file mode 100644 index 000000000000..cdbd7ef73d5e --- /dev/null +++ b/signer/fourbyte/fourbyte_test.go @@ -0,0 +1,91 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fourbyte + +import ( + "fmt" + "io/ioutil" + "strings" + "testing" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" +) + +// Tests that all the selectors contained in the 4byte database are valid. +func TestEmbeddedDatabase(t *testing.T) { + db, err := New() + if err != nil { + t.Fatal(err) + } + for id, selector := range db.embedded { + abistring, err := parseSelector(selector) + if err != nil { + t.Errorf("Failed to convert selector to ABI: %v", err) + continue + } + abistruct, err := abi.JSON(strings.NewReader(string(abistring))) + if err != nil { + t.Errorf("Failed to parse ABI: %v", err) + continue + } + m, err := abistruct.MethodById(common.Hex2Bytes(id)) + if err != nil { + t.Errorf("Failed to get method by id (%s): %v", id, err) + continue + } + if m.Sig() != selector { + t.Errorf("Selector mismatch: have %v, want %v", m.Sig(), selector) + } + } +} + +// Tests that custom 4byte datasets can be handled too. +func TestCustomDatabase(t *testing.T) { + // Create a new custom 4byte database with no embedded component + tmpdir, err := ioutil.TempDir("", "signer-4byte-test") + if err != nil { + t.Fatal(err) + } + filename := fmt.Sprintf("%s/4byte_custom.json", tmpdir) + + db, err := NewWithFile(filename) + if err != nil { + t.Fatal(err) + } + db.embedded = make(map[string]string) + + // Ensure the database is empty, insert and verify + calldata := common.Hex2Bytes("a52c101edeadbeef") + if _, err = db.Selector(calldata); err == nil { + t.Fatalf("Should not find a match on empty database") + } + if err = db.AddSelector("send(uint256)", calldata); err != nil { + t.Fatalf("Failed to save file: %v", err) + } + if _, err = db.Selector(calldata); err != nil { + t.Fatalf("Failed to find a match for abi signature: %v", err) + } + // Check that the file as persisted to disk by creating a new instance + db2, err := NewFromFile(filename) + if err != nil { + t.Fatalf("Failed to create new abidb: %v", err) + } + if _, err = db2.Selector(calldata); err != nil { + t.Fatalf("Failed to find a match for persisted abi signature: %v", err) + } +} diff --git a/signer/fourbyte/validation.go b/signer/fourbyte/validation.go new file mode 100644 index 000000000000..4d042d240f67 --- /dev/null +++ b/signer/fourbyte/validation.go @@ -0,0 +1,117 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fourbyte + +import ( + "bytes" + "errors" + "fmt" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/signer/core" +) + +// ValidateTransaction does a number of checks on the supplied transaction, and +// returns either a list of warnings, or an error (indicating that the transaction +// should be immediately rejected). +func (db *Database) ValidateTransaction(selector *string, tx *core.SendTxArgs) (*core.ValidationMessages, error) { + messages := new(core.ValidationMessages) + + // Prevent accidental erroneous usage of both 'input' and 'data' (show stopper) + if tx.Data != nil && tx.Input != nil && !bytes.Equal(*tx.Data, *tx.Input) { + return nil, errors.New(`ambiguous request: both "data" and "input" are set and are not identical`) + } + // Place data on 'data', and nil 'input' + var data []byte + if tx.Input != nil { + tx.Data = tx.Input + tx.Input = nil + } + if tx.Data != nil { + data = *tx.Data + } + // Contract creation doesn't validate call data, handle first + if tx.To == nil { + // Contract creation should contain sufficient data to deploy a contract. A + // typical error is omitting sender due to some quirk in the javascript call + // e.g. https://github.com/ethereum/go-ethereum/issues/16106. + if len(data) == 0 { + // Prevent sending ether into black hole (show stopper) + if tx.Value.ToInt().Cmp(big.NewInt(0)) > 0 { + return nil, errors.New("transaction will create a contract with value but empty code") + } + // No value submitted at least, critically Warn, but don't blow up + messages.Crit("Transaction will create a contract with empty code") + } else if len(data) < 40 { // arbitrary heuristic limit + messages.Warn(fmt.Sprintf("Transaction will create a contract, but the payload is suspiciously small (%d bytes)", len(data))) + } + // Method selector should be nil for contract creation + if selector != nil { + messages.Warn("Transaction will create a contract, but method selector supplied, indicating an intent to call a method") + } + return messages, nil + } + // Not a contract creation, validate as a plain transaction + if !tx.To.ValidChecksum() { + messages.Warn("Invalid checksum on recipient address") + } + if bytes.Equal(tx.To.Address().Bytes(), common.Address{}.Bytes()) { + messages.Crit("Transaction recipient is the zero address") + } + // Semantic fields validated, try to make heads or tails of the call data + db.validateCallData(selector, data, messages) + return messages, nil +} + +// validateCallData checks if the ABI call-data + method selector (if given) can +// be parsed and seems to match. +func (db *Database) validateCallData(selector *string, data []byte, messages *core.ValidationMessages) { + // If the data is empty, we have a plain value transfer, nothing more to do + if len(data) == 0 { + return + } + // Validate the call data that it has the 4byte prefix and the rest divisible by 32 bytes + if len(data) < 4 { + messages.Warn("Transaction data is not valid ABI (missing the 4 byte call prefix)") + return + } + if n := len(data) - 4; n%32 != 0 { + messages.Warn(fmt.Sprintf("Transaction data is not valid ABI (length should be a multiple of 32 (was %d))", n)) + } + // If a custom method selector was provided, validate with that + if selector != nil { + if info, err := verifySelector(*selector, data); err != nil { + messages.Warn(fmt.Sprintf("Transaction contains data, but provided ABI signature could not be matched: %v", err)) + } else { + messages.Info(info.String()) + db.AddSelector(*selector, data[:4]) + } + return + } + // No method selector was provided, check the database for embedded ones + embedded, err := db.Selector(data[:4]) + if err != nil { + messages.Warn(fmt.Sprintf("Transaction contains data, but the ABI signature could not be found: %v", err)) + return + } + if info, err := verifySelector(embedded, data); err != nil { + messages.Warn(fmt.Sprintf("Transaction contains data, but provided ABI signature could not be varified: %v", err)) + } else { + messages.Info(info.String()) + } +} diff --git a/signer/fourbyte/validation_test.go b/signer/fourbyte/validation_test.go new file mode 100644 index 000000000000..0e98cd88e4b4 --- /dev/null +++ b/signer/fourbyte/validation_test.go @@ -0,0 +1,137 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package fourbyte + +import ( + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/signer/core" +) + +func mixAddr(a string) (*common.MixedcaseAddress, error) { + return common.NewMixedcaseAddressFromString(a) +} +func toHexBig(h string) hexutil.Big { + b := big.NewInt(0).SetBytes(common.FromHex(h)) + return hexutil.Big(*b) +} +func toHexUint(h string) hexutil.Uint64 { + b := big.NewInt(0).SetBytes(common.FromHex(h)) + return hexutil.Uint64(b.Uint64()) +} +func dummyTxArgs(t txtestcase) *core.SendTxArgs { + to, _ := mixAddr(t.to) + from, _ := mixAddr(t.from) + n := toHexUint(t.n) + gas := toHexUint(t.g) + gasPrice := toHexBig(t.gp) + value := toHexBig(t.value) + var ( + data, input *hexutil.Bytes + ) + if t.d != "" { + a := hexutil.Bytes(common.FromHex(t.d)) + data = &a + } + if t.i != "" { + a := hexutil.Bytes(common.FromHex(t.i)) + input = &a + + } + return &core.SendTxArgs{ + From: *from, + To: to, + Value: value, + Nonce: n, + GasPrice: gasPrice, + Gas: gas, + Data: data, + Input: input, + } +} + +type txtestcase struct { + from, to, n, g, gp, value, d, i string + expectErr bool + numMessages int +} + +func TestTransactionValidation(t *testing.T) { + var ( + // use empty db, there are other tests for the abi-specific stuff + db = newEmpty() + ) + testcases := []txtestcase{ + // Invalid to checksum + {from: "000000000000000000000000000000000000dead", to: "000000000000000000000000000000000000dead", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 1}, + // valid 0x000000000000000000000000000000000000dEaD + {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 0}, + // conflicting input and data + {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x01", i: "0x02", expectErr: true}, + // Data can't be parsed + {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x0102", numMessages: 1}, + // Data (on Input) can't be parsed + {from: "000000000000000000000000000000000000dead", to: "0x000000000000000000000000000000000000dEaD", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", i: "0x0102", numMessages: 1}, + // Send to 0 + {from: "000000000000000000000000000000000000dead", to: "0x0000000000000000000000000000000000000000", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", numMessages: 1}, + // Create empty contract (no value) + {from: "000000000000000000000000000000000000dead", to: "", + n: "0x01", g: "0x20", gp: "0x40", value: "0x00", numMessages: 1}, + // Create empty contract (with value) + {from: "000000000000000000000000000000000000dead", to: "", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", expectErr: true}, + // Small payload for create + {from: "000000000000000000000000000000000000dead", to: "", + n: "0x01", g: "0x20", gp: "0x40", value: "0x01", d: "0x01", numMessages: 1}, + } + for i, test := range testcases { + msgs, err := db.ValidateTransaction(nil, dummyTxArgs(test)) + if err == nil && test.expectErr { + t.Errorf("Test %d, expected error", i) + for _, msg := range msgs.Messages { + t.Logf("* %s: %s", msg.Typ, msg.Message) + } + } + if err != nil && !test.expectErr { + t.Errorf("Test %d, unexpected error: %v", i, err) + } + if err == nil { + got := len(msgs.Messages) + if got != test.numMessages { + for _, msg := range msgs.Messages { + t.Logf("* %s: %s", msg.Typ, msg.Message) + } + t.Errorf("Test %d, expected %d messages, got %d", i, test.numMessages, got) + } else { + //Debug printout, remove later + for _, msg := range msgs.Messages { + t.Logf("* [%d] %s: %s", i, msg.Typ, msg.Message) + } + t.Log() + } + } + } +} diff --git a/signer/rules/rules.go b/signer/rules/rules.go index 07c34db2202a..39538d18b903 100644 --- a/signer/rules/rules.go +++ b/signer/rules/rules.go @@ -1,18 +1,18 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// GNU Lesser General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package rules @@ -22,7 +22,6 @@ import ( "os" "strings" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/signer/core" @@ -42,29 +41,30 @@ func consoleOutput(call otto.FunctionCall) otto.Value { for _, argument := range call.ArgumentList { output = append(output, fmt.Sprintf("%v", argument)) } - fmt.Fprintln(os.Stdout, strings.Join(output, " ")) + fmt.Fprintln(os.Stderr, strings.Join(output, " ")) return otto.Value{} } -// rulesetUI provides an implementation of SignerUI that evaluates a javascript +// rulesetUI provides an implementation of UIClientAPI that evaluates a javascript // file for each defined UI-method type rulesetUI struct { - next core.SignerUI // The next handler, for manual processing - storage storage.Storage - credentials storage.Storage - jsRules string // The rules to use + next core.UIClientAPI // The next handler, for manual processing + storage storage.Storage + jsRules string // The rules to use } -func NewRuleEvaluator(next core.SignerUI, jsbackend, credentialsBackend storage.Storage) (*rulesetUI, error) { +func NewRuleEvaluator(next core.UIClientAPI, jsbackend storage.Storage) (*rulesetUI, error) { c := &rulesetUI{ - next: next, - storage: jsbackend, - credentials: credentialsBackend, - jsRules: "", + next: next, + storage: jsbackend, + jsRules: "", } return c, nil } +func (r *rulesetUI) RegisterUIServer(api *core.UIServerAPI) { + // TODO, make it possible to query from js +} func (r *rulesetUI) Init(javascriptRules string) error { r.jsRules = javascriptRules @@ -74,12 +74,28 @@ func (r *rulesetUI) execute(jsfunc string, jsarg interface{}) (otto.Value, error // Instantiate a fresh vm engine every time vm := otto.New() + // Set the native callbacks consoleObj, _ := vm.Get("console") consoleObj.Object().Set("log", consoleOutput) consoleObj.Object().Set("error", consoleOutput) - vm.Set("storage", r.storage) + vm.Set("storage", struct{}{}) + storageObj, _ := vm.Get("storage") + storageObj.Object().Set("put", func(call otto.FunctionCall) otto.Value { + key, val := call.Argument(0).String(), call.Argument(1).String() + if val == "" { + r.storage.Del(key) + } else { + r.storage.Put(key, val) + } + return otto.NullValue() + }) + storageObj.Object().Set("get", func(call otto.FunctionCall) otto.Value { + goval, _ := r.storage.Get(call.Argument(0).String()) + jsval, _ := otto.ToValue(goval) + return jsval + }) // Load bootstrap libraries script, err := vm.Compile("bignumber.js", BigNumber_JS) if err != nil { @@ -150,18 +166,12 @@ func (r *rulesetUI) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, if approved { return core.SignTxResponse{ Transaction: request.Transaction, - Approved: true, - Password: r.lookupPassword(request.Transaction.From.Address()), - }, + Approved: true}, nil } return core.SignTxResponse{Approved: false}, err } -func (r *rulesetUI) lookupPassword(address common.Address) string { - return r.credentials.Get(strings.ToLower(address.String())) -} - func (r *rulesetUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { jsonreq, err := json.Marshal(request) approved, err := r.checkApproval("ApproveSignData", jsonreq, err) @@ -170,28 +180,9 @@ func (r *rulesetUI) ApproveSignData(request *core.SignDataRequest) (core.SignDat return r.next.ApproveSignData(request) } if approved { - return core.SignDataResponse{Approved: true, Password: r.lookupPassword(request.Address.Address())}, nil - } - return core.SignDataResponse{Approved: false, Password: ""}, err -} - -func (r *rulesetUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - jsonreq, err := json.Marshal(request) - approved, err := r.checkApproval("ApproveExport", jsonreq, err) - if err != nil { - log.Info("Rule-based approval error, going to manual", "error", err) - return r.next.ApproveExport(request) - } - if approved { - return core.ExportResponse{Approved: true}, nil + return core.SignDataResponse{Approved: true}, nil } - return core.ExportResponse{Approved: false}, err -} - -func (r *rulesetUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - // This cannot be handled by rules, requires setting a password - // dispatch to next - return r.next.ApproveImport(request) + return core.SignDataResponse{Approved: false}, err } // OnInputRequired not handled by rules diff --git a/signer/rules/rules_test.go b/signer/rules/rules_test.go index 0b520a15bfcd..c030ed47ceb1 100644 --- a/signer/rules/rules_test.go +++ b/signer/rules/rules_test.go @@ -1,19 +1,19 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// GNU Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package rules import ( @@ -77,28 +77,18 @@ type alwaysDenyUI struct{} func (alwaysDenyUI) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { return core.UserInputResponse{}, nil } - -func (alwaysDenyUI) OnSignerStartup(info core.StartupInfo) { +func (alwaysDenyUI) RegisterUIServer(api *core.UIServerAPI) { } -func (alwaysDenyUI) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil +func (alwaysDenyUI) OnSignerStartup(info core.StartupInfo) { } func (alwaysDenyUI) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { - return core.SignTxResponse{Transaction: request.Transaction, Approved: false, Password: ""}, nil + return core.SignTxResponse{Transaction: request.Transaction, Approved: false}, nil } func (alwaysDenyUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataResponse, error) { - return core.SignDataResponse{Approved: false, Password: ""}, nil -} - -func (alwaysDenyUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - return core.ExportResponse{Approved: false}, nil -} - -func (alwaysDenyUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - return core.ImportResponse{Approved: false, OldPassword: "", NewPassword: ""}, nil + return core.SignDataResponse{Approved: false}, nil } func (alwaysDenyUI) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { @@ -106,7 +96,7 @@ func (alwaysDenyUI) ApproveListing(request *core.ListRequest) (core.ListResponse } func (alwaysDenyUI) ApproveNewAccount(request *core.NewAccountRequest) (core.NewAccountResponse, error) { - return core.NewAccountResponse{Approved: false, Password: ""}, nil + return core.NewAccountResponse{Approved: false}, nil } func (alwaysDenyUI) ShowError(message string) { @@ -122,7 +112,7 @@ func (alwaysDenyUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } func initRuleEngine(js string) (*rulesetUI, error) { - r, err := NewRuleEvaluator(&alwaysDenyUI{}, storage.NewEphemeralStorage(), storage.NewEphemeralStorage()) + r, err := NewRuleEvaluator(&alwaysDenyUI{}, storage.NewEphemeralStorage()) if err != nil { return nil, fmt.Errorf("failed to create js engine: %v", err) } @@ -133,11 +123,11 @@ func initRuleEngine(js string) (*rulesetUI, error) { } func TestListRequest(t *testing.T) { - accs := make([]core.Account, 5) + accs := make([]accounts.Account, 5) for i := range accs { addr := fmt.Sprintf("000000000000000000000000000000000000000%x", i) - acc := core.Account{ + acc := accounts.Account{ Address: common.BytesToAddress(common.Hex2Bytes(addr)), URL: accounts.URL{Scheme: "test", Path: fmt.Sprintf("acc-%d", i)}, } @@ -188,7 +178,7 @@ func TestSignTxRequest(t *testing.T) { t.Error(err) return } - fmt.Printf("to %v", to.Address().String()) + t.Logf("to %v", to.Address().String()) resp, err := r.ApproveTx(&core.SignTxRequest{ Transaction: core.SendTxArgs{ From: *from, @@ -208,6 +198,10 @@ type dummyUI struct { calls []string } +func (d *dummyUI) RegisterUIServer(api *core.UIServerAPI) { + panic("implement me") +} + func (d *dummyUI) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { d.calls = append(d.calls, "OnInputRequired") return core.UserInputResponse{}, nil @@ -223,16 +217,6 @@ func (d *dummyUI) ApproveSignData(request *core.SignDataRequest) (core.SignDataR return core.SignDataResponse{}, core.ErrRequestDenied } -func (d *dummyUI) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - d.calls = append(d.calls, "ApproveExport") - return core.ExportResponse{}, core.ErrRequestDenied -} - -func (d *dummyUI) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - d.calls = append(d.calls, "ApproveImport") - return core.ImportResponse{}, core.ErrRequestDenied -} - func (d *dummyUI) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { d.calls = append(d.calls, "ApproveListing") return core.ListResponse{}, core.ErrRequestDenied @@ -255,10 +239,6 @@ func (d *dummyUI) OnApprovedTx(tx ethapi.SignTransactionResult) { d.calls = append(d.calls, "OnApprovedTx") } -func (d *dummyUI) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil -} - func (d *dummyUI) OnSignerStartup(info core.StartupInfo) { } @@ -268,8 +248,7 @@ func TestForwarding(t *testing.T) { js := "" ui := &dummyUI{make([]string, 0)} jsBackend := storage.NewEphemeralStorage() - credBackend := storage.NewEphemeralStorage() - r, err := NewRuleEvaluator(ui, jsBackend, credBackend) + r, err := NewRuleEvaluator(ui, jsBackend) if err != nil { t.Fatalf("Failed to create js engine: %v", err) } @@ -278,17 +257,15 @@ func TestForwarding(t *testing.T) { } r.ApproveSignData(nil) r.ApproveTx(nil) - r.ApproveImport(nil) r.ApproveNewAccount(nil) r.ApproveListing(nil) - r.ApproveExport(nil) r.ShowError("test") r.ShowInfo("test") //This one is not forwarded r.OnApprovedTx(ethapi.SignTransactionResult{}) - expCalls := 8 + expCalls := 6 if len(ui.calls) != expCalls { t.Errorf("Expected %d forwarded calls, got %d: %s", expCalls, len(ui.calls), strings.Join(ui.calls, ",")) @@ -317,30 +294,30 @@ func TestMissingFunc(t *testing.T) { if approved { t.Errorf("Expected missing method to cause non-approval") } - fmt.Printf("Err %v", err) + t.Logf("Err %v", err) } func TestStorage(t *testing.T) { js := ` function testStorage(){ - storage.Put("mykey", "myvalue") - a = storage.Get("mykey") + storage.put("mykey", "myvalue") + a = storage.get("mykey") - storage.Put("mykey", ["a", "list"]) // Should result in "a,list" - a += storage.Get("mykey") + storage.put("mykey", ["a", "list"]) // Should result in "a,list" + a += storage.get("mykey") - storage.Put("mykey", {"an": "object"}) // Should result in "[object Object]" - a += storage.Get("mykey") + storage.put("mykey", {"an": "object"}) // Should result in "[object Object]" + a += storage.get("mykey") - storage.Put("mykey", JSON.stringify({"an": "object"})) // Should result in '{"an":"object"}' - a += storage.Get("mykey") + storage.put("mykey", JSON.stringify({"an": "object"})) // Should result in '{"an":"object"}' + a += storage.get("mykey") - a += storage.Get("missingkey") //Missing keys should result in empty string - storage.Put("","missing key==noop") // Can't store with 0-length key - a += storage.Get("") // Should result in '' + a += storage.get("missingkey") //Missing keys should result in empty string + storage.put("","missing key==noop") // Can't store with 0-length key + a += storage.get("") // Should result in '' var b = new BigNumber(2) var c = new BigNumber(16)//"0xf0",16) @@ -360,7 +337,6 @@ func TestStorage(t *testing.T) { if err != nil { t.Errorf("Unexpected error %v", err) } - retval, err := v.ToString() if err != nil { @@ -370,7 +346,7 @@ func TestStorage(t *testing.T) { if retval != exp { t.Errorf("Unexpected data, expected '%v', got '%v'", exp, retval) } - fmt.Printf("Err %v", err) + t.Logf("Err %v", err) } @@ -392,7 +368,7 @@ const ExampleTxWindow = ` var windowstart = new Date().getTime() - window; var txs = []; - var stored = storage.Get('txs'); + var stored = storage.get('txs'); if(stored != ""){ txs = JSON.parse(stored) @@ -437,19 +413,18 @@ const ExampleTxWindow = ` var value = big(resp.tx.value) var txs = [] // Load stored transactions - var stored = storage.Get('txs'); + var stored = storage.get('txs'); if(stored != ""){ txs = JSON.parse(stored) } // Add this to the storage txs.push({tstamp: new Date().getTime(), value: value}); - storage.Put("txs", JSON.stringify(txs)); + storage.put("txs", JSON.stringify(txs)); } ` func dummyTx(value hexutil.Big) *core.SignTxRequest { - to, _ := mixAddr("000000000000000000000000000000000000dead") from, _ := mixAddr("000000000000000000000000000000000000dead") n := hexutil.Uint64(3) @@ -471,28 +446,27 @@ func dummyTx(value hexutil.Big) *core.SignTxRequest { Meta: core.Metadata{Remote: "remoteip", Local: "localip", Scheme: "inproc"}, } } -func dummyTxWithV(value uint64) *core.SignTxRequest { +func dummyTxWithV(value uint64) *core.SignTxRequest { v := big.NewInt(0).SetUint64(value) h := hexutil.Big(*v) return dummyTx(h) } + func dummySigned(value *big.Int) *types.Transaction { to := common.HexToAddress("000000000000000000000000000000000000dead") gas := uint64(21000) gasPrice := big.NewInt(2000000) data := make([]byte, 0) return types.NewTransaction(3, to, value, gas, gasPrice, data) - } -func TestLimitWindow(t *testing.T) { +func TestLimitWindow(t *testing.T) { r, err := initRuleEngine(ExampleTxWindow) if err != nil { t.Errorf("Couldn't create evaluator %v", err) return } - // 0.3 ether: 429D069189E0000 wei v := big.NewInt(0).SetBytes(common.Hex2Bytes("0429D069189E0000")) h := hexutil.Big(*v) @@ -519,7 +493,6 @@ func TestLimitWindow(t *testing.T) { if resp.Approved { t.Errorf("Expected check to resolve to 'Reject'") } - } // dontCallMe is used as a next-handler that does not want to be called - it invokes test failure @@ -532,11 +505,10 @@ func (d *dontCallMe) OnInputRequired(info core.UserInputRequest) (core.UserInput return core.UserInputResponse{}, nil } -func (d *dontCallMe) OnSignerStartup(info core.StartupInfo) { +func (d *dontCallMe) RegisterUIServer(api *core.UIServerAPI) { } -func (d *dontCallMe) OnMasterPassword(request *core.PasswordRequest) (core.PasswordResponse, error) { - return core.PasswordResponse{}, nil +func (d *dontCallMe) OnSignerStartup(info core.StartupInfo) { } func (d *dontCallMe) ApproveTx(request *core.SignTxRequest) (core.SignTxResponse, error) { @@ -549,16 +521,6 @@ func (d *dontCallMe) ApproveSignData(request *core.SignDataRequest) (core.SignDa return core.SignDataResponse{}, core.ErrRequestDenied } -func (d *dontCallMe) ApproveExport(request *core.ExportRequest) (core.ExportResponse, error) { - d.t.Fatalf("Did not expect next-handler to be called") - return core.ExportResponse{}, core.ErrRequestDenied -} - -func (d *dontCallMe) ApproveImport(request *core.ImportRequest) (core.ImportResponse, error) { - d.t.Fatalf("Did not expect next-handler to be called") - return core.ImportResponse{}, core.ErrRequestDenied -} - func (d *dontCallMe) ApproveListing(request *core.ListRequest) (core.ListResponse, error) { d.t.Fatalf("Did not expect next-handler to be called") return core.ListResponse{}, core.ErrRequestDenied @@ -601,7 +563,7 @@ func TestContextIsCleared(t *testing.T) { } ` ui := &dontCallMe{t} - r, err := NewRuleEvaluator(ui, storage.NewEphemeralStorage(), storage.NewEphemeralStorage()) + r, err := NewRuleEvaluator(ui, storage.NewEphemeralStorage()) if err != nil { t.Fatalf("Failed to create js engine: %v", err) } @@ -624,7 +586,7 @@ func TestSignData(t *testing.T) { function ApproveSignData(r){ if( r.address.toLowerCase() == "0x694267f14675d7e1b9494fd8d72fefe1755710fa") { - if(r.message.indexOf("bazonk") >= 0){ + if(r.messages[0].value.indexOf("bazonk") >= 0){ return "Approve" } return "Reject" @@ -636,18 +598,25 @@ function ApproveSignData(r){ t.Errorf("Couldn't create evaluator %v", err) return } - message := []byte("baz bazonk foo") - hash, msg := core.SignHash(message) - raw := hexutil.Bytes(message) + message := "baz bazonk foo" + hash, rawdata := accounts.TextAndHash([]byte(message)) addr, _ := mixAddr("0x694267f14675d7e1b9494fd8d72fefe1755710fa") - fmt.Printf("address %v %v\n", addr.String(), addr.Original()) + t.Logf("address %v %v\n", addr.String(), addr.Original()) + + nvt := []*core.NameValueType{ + { + Name: "message", + Typ: "text/plain", + Value: message, + }, + } resp, err := r.ApproveSignData(&core.SignDataRequest{ - Address: *addr, - Message: msg, - Hash: hash, - Meta: core.Metadata{Remote: "remoteip", Local: "localip", Scheme: "inproc"}, - Rawdata: raw, + Address: *addr, + Messages: nvt, + Hash: hash, + Meta: core.Metadata{Remote: "remoteip", Local: "localip", Scheme: "inproc"}, + Rawdata: []byte(rawdata), }) if err != nil { t.Fatalf("Unexpected error %v", err) diff --git a/signer/storage/aes_gcm_storage.go b/signer/storage/aes_gcm_storage.go index 900831867914..8c5e147ac6d2 100644 --- a/signer/storage/aes_gcm_storage.go +++ b/signer/storage/aes_gcm_storage.go @@ -1,19 +1,18 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// GNU Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package storage @@ -53,7 +52,7 @@ func NewAESEncryptedStorage(filename string, key []byte) *AESEncryptedStorage { } } -// Put stores a value by key. 0-length keys results in no-op +// Put stores a value by key. 0-length keys results in noop. func (s *AESEncryptedStorage) Put(key, value string) { if len(key) == 0 { return @@ -75,27 +74,41 @@ func (s *AESEncryptedStorage) Put(key, value string) { } } -// Get returns the previously stored value, or the empty string if it does not exist or key is of 0-length -func (s *AESEncryptedStorage) Get(key string) string { +// Get returns the previously stored value, or an error if it does not exist or +// key is of 0-length. +func (s *AESEncryptedStorage) Get(key string) (string, error) { if len(key) == 0 { - return "" + return "", ErrZeroKey } data, err := s.readEncryptedStorage() if err != nil { log.Warn("Failed to read encrypted storage", "err", err, "file", s.filename) - return "" + return "", err } encrypted, exist := data[key] if !exist { log.Warn("Key does not exist", "key", key) - return "" + return "", ErrNotFound } entry, err := decrypt(s.key, encrypted.Iv, encrypted.CipherText, []byte(key)) if err != nil { log.Warn("Failed to decrypt key", "key", key) - return "" + return "", err + } + return string(entry), nil +} + +// Del removes a key-value pair. If the key doesn't exist, the method is a noop. +func (s *AESEncryptedStorage) Del(key string) { + data, err := s.readEncryptedStorage() + if err != nil { + log.Warn("Failed to read encrypted storage", "err", err, "file", s.filename) + return + } + delete(data, key) + if err = s.writeEncryptedStorage(data); err != nil { + log.Warn("Failed to write entry", "err", err) } - return string(entry) } // readEncryptedStorage reads the file with encrypted creds diff --git a/signer/storage/aes_gcm_storage_test.go b/signer/storage/aes_gcm_storage_test.go index a421a8449d7d..664ef1299405 100644 --- a/signer/storage/aes_gcm_storage_test.go +++ b/signer/storage/aes_gcm_storage_test.go @@ -1,19 +1,19 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// GNU Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + package storage import ( @@ -38,13 +38,13 @@ func TestEncryption(t *testing.T) { if err != nil { t.Fatal(err) } - fmt.Printf("Ciphertext %x, nonce %x\n", c, iv) + t.Logf("Ciphertext %x, nonce %x\n", c, iv) p, err := decrypt(key, iv, c, nil) if err != nil { t.Fatal(err) } - fmt.Printf("Plaintext %v\n", string(p)) + t.Logf("Plaintext %v\n", string(p)) if !bytes.Equal(plaintext, p) { t.Errorf("Failed: expected plaintext recovery, got %v expected %v", string(plaintext), string(p)) } @@ -110,8 +110,8 @@ func TestEnd2End(t *testing.T) { } s1.Put("bazonk", "foobar") - if v := s2.Get("bazonk"); v != "foobar" { - t.Errorf("Expected bazonk->foobar, got '%v'", v) + if v, err := s2.Get("bazonk"); v != "foobar" || err != nil { + t.Errorf("Expected bazonk->foobar (nil error), got '%v' (%v error)", v, err) } } @@ -154,11 +154,11 @@ func TestSwappedKeys(t *testing.T) { } } swap() - if v := s1.Get("k1"); v != "" { + if v, _ := s1.Get("k1"); v != "" { t.Errorf("swapped value should return empty") } swap() - if v := s1.Get("k1"); v != "v1" { + if v, _ := s1.Get("k1"); v != "v1" { t.Errorf("double-swapped value should work fine") } } diff --git a/signer/storage/storage.go b/signer/storage/storage.go index 60f4e3892a31..06b0fd98f753 100644 --- a/signer/storage/storage.go +++ b/signer/storage/storage.go @@ -1,31 +1,41 @@ // Copyright 2018 The go-ethereum Authors -// This file is part of go-ethereum. +// This file is part of the go-ethereum library. // -// go-ethereum is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // -// go-ethereum is distributed in the hope that it will be useful, +// The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with go-ethereum. If not, see . +// GNU Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . package storage -import ( - "fmt" +import "errors" + +var ( + // ErrZeroKey is returned if an attempt was made to inset a 0-length key. + ErrZeroKey = errors.New("0-length key") + + // ErrNotFound is returned if an unknown key is attempted to be retrieved. + ErrNotFound = errors.New("not found") ) type Storage interface { - // Put stores a value by key. 0-length keys results in no-op + // Put stores a value by key. 0-length keys results in noop. Put(key, value string) - // Get returns the previously stored value, or the empty string if it does not exist or key is of 0-length - Get(key string) string + + // Get returns the previously stored value, or an error if the key is 0-length + // or unknown. + Get(key string) (string, error) + + // Del removes a key-value pair. If the key doesn't exist, the method is a noop. + Del(key string) } // EphemeralStorage is an in-memory storage that does @@ -35,23 +45,29 @@ type EphemeralStorage struct { namespace string } +// Put stores a value by key. 0-length keys results in noop. func (s *EphemeralStorage) Put(key, value string) { if len(key) == 0 { return } - fmt.Printf("storage: put %v -> %v\n", key, value) s.data[key] = value } -func (s *EphemeralStorage) Get(key string) string { +// Get returns the previously stored value, or an error if the key is 0-length +// or unknown. +func (s *EphemeralStorage) Get(key string) (string, error) { if len(key) == 0 { - return "" + return "", ErrZeroKey } - fmt.Printf("storage: get %v\n", key) - if v, exist := s.data[key]; exist { - return v + if v, ok := s.data[key]; ok { + return v, nil } - return "" + return "", ErrNotFound +} + +// Del removes a key-value pair. If the key doesn't exist, the method is a noop. +func (s *EphemeralStorage) Del(key string) { + delete(s.data, key) } func NewEphemeralStorage() Storage { @@ -60,3 +76,12 @@ func NewEphemeralStorage() Storage { } return s } + +// NoStorage is a dummy construct which doesn't remember anything you tell it +type NoStorage struct{} + +func (s *NoStorage) Put(key, value string) {} +func (s *NoStorage) Del(key string) {} +func (s *NoStorage) Get(key string) (string, error) { + return "", errors.New("I forgot") +} diff --git a/swarm/AUTHORS b/swarm/AUTHORS deleted file mode 100644 index f7232f07ce74..000000000000 --- a/swarm/AUTHORS +++ /dev/null @@ -1,35 +0,0 @@ -# Core team members - -Viktor Trón - @zelig -Louis Holbrook - @nolash -Lewis Marshall - @lmars -Anton Evangelatov - @nonsense -Janoš Guljaš - @janos -Balint Gabor - @gbalint -Elad Nachmias - @justelad -Daniel A. Nagy - @nagydani -Aron Fischer - @homotopycolimit -Fabio Barone - @holisticode -Zahoor Mohamed - @jmozah -Zsolt Felföldi - @zsfelfoldi - -# External contributors - -Kiel Barry -Gary Rong -Jared Wasinger -Leon Stanko -Javier Peletier [epiclabs.io] -Bartek Borkowski [tungsten-labs.com] -Shane Howley [mainframe.com] -Doug Leonard [mainframe.com] -Ivan Daniluk [status.im] -Felix Lange [EF] -Martin Holst Swende [EF] -Guillaume Ballet [EF] -ligi [EF] -Christopher Dro [blick-labs.com] -Sergii Bomko [ledgerleopard.com] -Domino Valdano -Rafael Matias -Coogan Brennan \ No newline at end of file diff --git a/swarm/OWNERS b/swarm/OWNERS deleted file mode 100644 index 4b9ca96ebe62..000000000000 --- a/swarm/OWNERS +++ /dev/null @@ -1,25 +0,0 @@ -# Ownership by go packages - -swarm -├── api ─────────────────── ethersphere -├── bmt ─────────────────── @zelig -├── dev ─────────────────── @lmars -├── fuse ────────────────── @jmozah, @holisticode -├── grafana_dashboards ──── @nonsense -├── metrics ─────────────── @nonsense, @holisticode -├── network ─────────────── ethersphere -│ ├── bitvector ───────── @zelig, @janos, @gbalint -│ ├── priorityqueue ───── @zelig, @janos, @gbalint -│ ├── simulations ─────── @zelig -│ └── stream ──────────── @janos, @zelig, @gbalint, @holisticode, @justelad -│ ├── intervals ───── @janos -│ └── testing ─────── @zelig -├── pot ─────────────────── @zelig -├── pss ─────────────────── @nolash, @zelig, @nonsense -├── services ────────────── @zelig -├── state ───────────────── @justelad -├── storage ─────────────── ethersphere -│ ├── encryption ──────── @gbalint, @zelig, @nagydani -│ ├── mock ────────────── @janos -│ └── feed ────────────── @nolash, @jpeletier -└── testutil ────────────── @lmars \ No newline at end of file diff --git a/swarm/README.md b/swarm/README.md index e81963217f97..265883181306 100644 --- a/swarm/README.md +++ b/swarm/README.md @@ -1,244 +1,7 @@ -## Swarm +# Swarm -[https://swarm.ethereum.org](https://swarm.ethereum.org) +https://swarm.ethereum.org Swarm is a distributed storage platform and content distribution service, a native base layer service of the ethereum web3 stack. The primary objective of Swarm is to provide a decentralized and redundant store for dapp code and data as well as block chain and state data. Swarm is also set out to provide various base layer services for web3, including node-to-node messaging, media streaming, decentralised database services and scalable state-channel infrastructure for decentralised service economies. -[![Travis](https://travis-ci.org/ethereum/go-ethereum.svg?branch=master)](https://travis-ci.org/ethereum/go-ethereum) -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ethersphere/orange-lounge?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -## Table of Contents - -* [Building the source](#building-the-source) -* [Running Swarm](#running-swarm) -* [Documentation](#documentation) -* [Developers Guide](#developers-guide) - * [Go Environment](#development-environment) - * [Vendored Dependencies](#vendored-dependencies) - * [Testing](#testing) - * [Profiling Swarm](#profiling-swarm) - * [Metrics and Instrumentation in Swarm](#metrics-and-instrumentation-in-swarm) -* [Public Gateways](#public-gateways) -* [Swarm Dapps](#swarm-dapps) -* [Contributing](#contributing) -* [License](#license) - -## Building the source - -Building Swarm requires Go (version 1.10 or later). - - go get -d github.com/ethereum/go-ethereum - - go install github.com/ethereum/go-ethereum/cmd/swarm - -## Running Swarm - -Going through all the possible command line flags is out of scope here, but we've enumerated a few common parameter combos to get you up to speed quickly on how you can run your own Swarm node. - -To run Swarm you need an Ethereum account. You can create a new account by running the following command: - - geth account new - -You will be prompted for a password: - - Your new account is locked with a password. Please give a password. Do not forget this password. - Passphrase: - Repeat passphrase: - -Once you have specified the password, the output will be the Ethereum address representing that account. For example: - - Address: {2f1cd699b0bf461dcfbf0098ad8f5587b038f0f1} - -Using this account, connect to Swarm with - - swarm --bzzaccount - - # in our example - - swarm --bzzaccount 2f1cd699b0bf461dcfbf0098ad8f5587b038f0f1 - - -### Verifying that your local Swarm node is running - -When running, Swarm is accessible through an HTTP API on port 8500. - -Confirm that it is up and running by pointing your browser to http://localhost:8500 - -### Ethereum Name Service resolution - -The Ethereum Name Service is the Ethereum equivalent of DNS in the classic web. In order to use ENS to resolve names to Swarm content hashes (e.g. `bzz://theswarm.eth`), `swarm` has to connect to a `geth` instance, which is synced with the Ethereum mainnet. This is done using the `--ens-api` flag. - - swarm --bzzaccount \ - --ens-api '$HOME/.ethereum/geth.ipc' - - # in our example - - swarm --bzzaccount 2f1cd699b0bf461dcfbf0098ad8f5587b038f0f1 \ - --ens-api '$HOME/.ethereum/geth.ipc' - -For more information on usage, features or command line flags, please consult the Documentation. - - -## Documentation - -Swarm documentation can be found at [https://swarm-guide.readthedocs.io](https://swarm-guide.readthedocs.io). - - -## Developers Guide - -### Go Environment - -We assume that you have Go v1.10 installed, and `GOPATH` is set. - -You must have your working copy under `$GOPATH/src/github.com/ethereum/go-ethereum`. - -Most likely you will be working from your fork of `go-ethereum`, let's say from `github.com/nirname/go-ethereum`. Clone or move your fork into the right place: - -``` -git clone git@github.com:nirname/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum -``` - - -### Vendored Dependencies - -All dependencies are tracked in the `vendor` directory. We use `govendor` to manage them. - -If you want to add a new dependency, run `govendor fetch `, then commit the result. - -If you want to update all dependencies to their latest upstream version, run `govendor fetch +v`. - - -### Testing - -This section explains how to run unit, integration, and end-to-end tests in your development sandbox. - -Testing one library: - -``` -go test -v -cpu 4 ./swarm/api -``` - -Note: Using options -cpu (number of cores allowed) and -v (logging even if no error) is recommended. - -Testing only some methods: - -``` -go test -v -cpu 4 ./eth -run TestMethod -``` - -Note: here all tests with prefix TestMethod will be run, so if you got TestMethod, TestMethod1, then both! - -Running benchmarks: - -``` -go test -v -cpu 4 -bench . -run BenchmarkJoin -``` - - -### Profiling Swarm - -This section explains how to add Go `pprof` profiler to Swarm - -If `swarm` is started with the `--pprof` option, a debugging HTTP server is made available on port 6060. - -You can bring up http://localhost:6060/debug/pprof to see the heap, running routines etc. - -By clicking full goroutine stack dump (clicking http://localhost:6060/debug/pprof/goroutine?debug=2) you can generate trace that is useful for debugging. - - -### Metrics and Instrumentation in Swarm - -This section explains how to visualize and use existing Swarm metrics and how to instrument Swarm with a new metric. - -Swarm metrics system is based on the `go-metrics` library. - -The most common types of measurements we use in Swarm are `counters` and `resetting timers`. Consult the `go-metrics` documentation for full reference of available types. - -``` -# incrementing a counter -metrics.GetOrRegisterCounter("network.stream.received_chunks", nil).Inc(1) - -# measuring latency with a resetting timer -start := time.Now() -t := metrics.GetOrRegisterResettingTimer("http.request.GET.time"), nil) -... -t := UpdateSince(start) -``` - -#### Visualizing metrics - -Swarm supports an InfluxDB exporter. Consult the help section to learn about the command line arguments used to configure it: - -``` -swarm --help | grep metrics -``` - -We use Grafana and InfluxDB to visualise metrics reported by Swarm. We keep our Grafana dashboards under version control at `./swarm/grafana_dashboards`. You could use them or design your own. - -We have built a tool to help with automatic start of Grafana and InfluxDB and provisioning of dashboards at https://github.com/nonsense/stateth , which requires that you have Docker installed. - -Once you have `stateth` installed, and you have Docker running locally, you have to: - -1. Run `stateth` and keep it running in the background -``` -stateth --rm --grafana-dashboards-folder $GOPATH/src/github.com/ethereum/go-ethereum/swarm/grafana_dashboards --influxdb-database metrics -``` - -2. Run `swarm` with at least the following params: -``` ---metrics \ ---metrics.influxdb.export \ ---metrics.influxdb.endpoint "http://localhost:8086" \ ---metrics.influxdb.username "admin" \ ---metrics.influxdb.password "admin" \ ---metrics.influxdb.database "metrics" -``` - -3. Open Grafana at http://localhost:3000 and view the dashboards to gain insight into Swarm. - - -## Public Gateways - -Swarm offers a local HTTP proxy API that Dapps can use to interact with Swarm. The Ethereum Foundation is hosting a public gateway, which allows free access so that people can try Swarm without running their own node. - -The Swarm public gateways are temporary and users should not rely on their existence for production services. - -The Swarm public gateway can be found at https://swarm-gateways.net and is always running the latest `stable` Swarm release. - -## Swarm Dapps - -You can find a few reference Swarm decentralised applications at: https://swarm-gateways.net/bzz:/swarmapps.eth - -Their source code can be found at: https://github.com/ethersphere/swarm-dapps - -## Contributing - -Thank you for considering to help out with the source code! We welcome contributions from -anyone on the internet, and are grateful for even the smallest of fixes! - -If you'd like to contribute to Swarm, please fork, fix, commit and send a pull request -for the maintainers to review and merge into the main code base. If you wish to submit more -complex changes though, please check up with the core devs first on [our Swarm gitter channel](https://gitter.im/ethersphere/orange-lounge) -to ensure those changes are in line with the general philosophy of the project and/or get some -early feedback which can make both your efforts much lighter as well as our review and merge -procedures quick and simple. - -Please make sure your contributions adhere to our coding guidelines: - - * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). - * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) guidelines. - * Pull requests need to be based on and opened against the `master` branch. - * [Code review guidelines](https://github.com/ethereum/go-ethereum/wiki/Code-Review-Guidelines). - * Commit messages should be prefixed with the package(s) they modify. - * E.g. "swarm/fuse: ignore default manifest entry" - - -## License - -The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the -[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), also -included in our repository in the `COPYING.LESSER` file. - -The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the -[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also included -in our repository in the `COPYING` file. +**Note**: The codebase has been moved to [ethersphere/swarm](https://github.com/ethersphere/swarm) diff --git a/swarm/api/act.go b/swarm/api/act.go deleted file mode 100644 index 9566720b0331..000000000000 --- a/swarm/api/act.go +++ /dev/null @@ -1,538 +0,0 @@ -package api - -import ( - "context" - "crypto/ecdsa" - "crypto/rand" - "encoding/hex" - "encoding/json" - "errors" - "fmt" - "io" - "strings" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/ecies" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/sctx" - "github.com/ethereum/go-ethereum/swarm/storage" - "golang.org/x/crypto/scrypt" - "golang.org/x/crypto/sha3" - cli "gopkg.in/urfave/cli.v1" -) - -var ( - ErrDecrypt = errors.New("cant decrypt - forbidden") - ErrUnknownAccessType = errors.New("unknown access type (or not implemented)") - ErrDecryptDomainForbidden = errors.New("decryption request domain forbidden - can only decrypt on localhost") - AllowedDecryptDomains = []string{ - "localhost", - "127.0.0.1", - } -) - -const EMPTY_CREDENTIALS = "" - -type AccessEntry struct { - Type AccessType - Publisher string - Salt []byte - Act string - KdfParams *KdfParams -} - -type DecryptFunc func(*ManifestEntry) error - -func (a *AccessEntry) MarshalJSON() (out []byte, err error) { - - return json.Marshal(struct { - Type AccessType `json:"type,omitempty"` - Publisher string `json:"publisher,omitempty"` - Salt string `json:"salt,omitempty"` - Act string `json:"act,omitempty"` - KdfParams *KdfParams `json:"kdf_params,omitempty"` - }{ - Type: a.Type, - Publisher: a.Publisher, - Salt: hex.EncodeToString(a.Salt), - Act: a.Act, - KdfParams: a.KdfParams, - }) - -} - -func (a *AccessEntry) UnmarshalJSON(value []byte) error { - v := struct { - Type AccessType `json:"type,omitempty"` - Publisher string `json:"publisher,omitempty"` - Salt string `json:"salt,omitempty"` - Act string `json:"act,omitempty"` - KdfParams *KdfParams `json:"kdf_params,omitempty"` - }{} - - err := json.Unmarshal(value, &v) - if err != nil { - return err - } - a.Act = v.Act - a.KdfParams = v.KdfParams - a.Publisher = v.Publisher - a.Salt, err = hex.DecodeString(v.Salt) - if err != nil { - return err - } - if len(a.Salt) != 32 { - return errors.New("salt should be 32 bytes long") - } - a.Type = v.Type - return nil -} - -type KdfParams struct { - N int `json:"n"` - P int `json:"p"` - R int `json:"r"` -} - -type AccessType string - -const AccessTypePass = AccessType("pass") -const AccessTypePK = AccessType("pk") -const AccessTypeACT = AccessType("act") - -// NewAccessEntryPassword creates a manifest AccessEntry in order to create an ACT protected by a password -func NewAccessEntryPassword(salt []byte, kdfParams *KdfParams) (*AccessEntry, error) { - if len(salt) != 32 { - return nil, fmt.Errorf("salt should be 32 bytes long") - } - return &AccessEntry{ - Type: AccessTypePass, - Salt: salt, - KdfParams: kdfParams, - }, nil -} - -// NewAccessEntryPK creates a manifest AccessEntry in order to create an ACT protected by a pair of Elliptic Curve keys -func NewAccessEntryPK(publisher string, salt []byte) (*AccessEntry, error) { - if len(publisher) != 66 { - return nil, fmt.Errorf("publisher should be 66 characters long, got %d", len(publisher)) - } - if len(salt) != 32 { - return nil, fmt.Errorf("salt should be 32 bytes long") - } - return &AccessEntry{ - Type: AccessTypePK, - Publisher: publisher, - Salt: salt, - }, nil -} - -// NewAccessEntryACT creates a manifest AccessEntry in order to create an ACT protected by a combination of EC keys and passwords -func NewAccessEntryACT(publisher string, salt []byte, act string) (*AccessEntry, error) { - if len(salt) != 32 { - return nil, fmt.Errorf("salt should be 32 bytes long") - } - if len(publisher) != 66 { - return nil, fmt.Errorf("publisher should be 66 characters long") - } - - return &AccessEntry{ - Type: AccessTypeACT, - Publisher: publisher, - Salt: salt, - Act: act, - KdfParams: DefaultKdfParams, - }, nil -} - -// NOOPDecrypt is a generic decrypt function that is passed into the API in places where real ACT decryption capabilities are -// either unwanted, or alternatively, cannot be implemented in the immediate scope -func NOOPDecrypt(*ManifestEntry) error { - return nil -} - -var DefaultKdfParams = NewKdfParams(262144, 1, 8) - -// NewKdfParams returns a KdfParams struct with the given scrypt params -func NewKdfParams(n, p, r int) *KdfParams { - - return &KdfParams{ - N: n, - P: p, - R: r, - } -} - -// NewSessionKeyPassword creates a session key based on a shared secret (password) and the given salt -// and kdf parameters in the access entry -func NewSessionKeyPassword(password string, accessEntry *AccessEntry) ([]byte, error) { - if accessEntry.Type != AccessTypePass && accessEntry.Type != AccessTypeACT { - return nil, errors.New("incorrect access entry type") - - } - return sessionKeyPassword(password, accessEntry.Salt, accessEntry.KdfParams) -} - -func sessionKeyPassword(password string, salt []byte, kdfParams *KdfParams) ([]byte, error) { - return scrypt.Key( - []byte(password), - salt, - kdfParams.N, - kdfParams.R, - kdfParams.P, - 32, - ) -} - -// NewSessionKeyPK creates a new ACT Session Key using an ECDH shared secret for the given key pair and the given salt value -func NewSessionKeyPK(private *ecdsa.PrivateKey, public *ecdsa.PublicKey, salt []byte) ([]byte, error) { - granteePubEcies := ecies.ImportECDSAPublic(public) - privateKey := ecies.ImportECDSA(private) - - bytes, err := privateKey.GenerateShared(granteePubEcies, 16, 16) - if err != nil { - return nil, err - } - bytes = append(salt, bytes...) - sessionKey := crypto.Keccak256(bytes) - return sessionKey, nil -} - -func (a *API) doDecrypt(ctx context.Context, credentials string, pk *ecdsa.PrivateKey) DecryptFunc { - return func(m *ManifestEntry) error { - if m.Access == nil { - return nil - } - - allowed := false - requestDomain := sctx.GetHost(ctx) - for _, v := range AllowedDecryptDomains { - if strings.Contains(requestDomain, v) { - allowed = true - } - } - - if !allowed { - return ErrDecryptDomainForbidden - } - - switch m.Access.Type { - case "pass": - if credentials != "" { - key, err := NewSessionKeyPassword(credentials, m.Access) - if err != nil { - return err - } - - ref, err := hex.DecodeString(m.Hash) - if err != nil { - return err - } - - enc := NewRefEncryption(len(ref) - 8) - decodedRef, err := enc.Decrypt(ref, key) - if err != nil { - return ErrDecrypt - } - - m.Hash = hex.EncodeToString(decodedRef) - m.Access = nil - return nil - } - return ErrDecrypt - case "pk": - publisherBytes, err := hex.DecodeString(m.Access.Publisher) - if err != nil { - return ErrDecrypt - } - publisher, err := crypto.DecompressPubkey(publisherBytes) - if err != nil { - return ErrDecrypt - } - key, err := NewSessionKeyPK(pk, publisher, m.Access.Salt) - if err != nil { - return ErrDecrypt - } - ref, err := hex.DecodeString(m.Hash) - if err != nil { - return err - } - - enc := NewRefEncryption(len(ref) - 8) - decodedRef, err := enc.Decrypt(ref, key) - if err != nil { - return ErrDecrypt - } - - m.Hash = hex.EncodeToString(decodedRef) - m.Access = nil - return nil - case "act": - var ( - sessionKey []byte - err error - ) - - publisherBytes, err := hex.DecodeString(m.Access.Publisher) - if err != nil { - return ErrDecrypt - } - publisher, err := crypto.DecompressPubkey(publisherBytes) - if err != nil { - return ErrDecrypt - } - - sessionKey, err = NewSessionKeyPK(pk, publisher, m.Access.Salt) - if err != nil { - return ErrDecrypt - } - - found, ciphertext, decryptionKey, err := a.getACTDecryptionKey(ctx, storage.Address(common.Hex2Bytes(m.Access.Act)), sessionKey) - if err != nil { - return err - } - if !found { - // try to fall back to password - if credentials != "" { - sessionKey, err = NewSessionKeyPassword(credentials, m.Access) - if err != nil { - return err - } - found, ciphertext, decryptionKey, err = a.getACTDecryptionKey(ctx, storage.Address(common.Hex2Bytes(m.Access.Act)), sessionKey) - if err != nil { - return err - } - if !found { - return ErrDecrypt - } - } else { - return ErrDecrypt - } - } - enc := NewRefEncryption(len(ciphertext) - 8) - decodedRef, err := enc.Decrypt(ciphertext, decryptionKey) - if err != nil { - return ErrDecrypt - } - - ref, err := hex.DecodeString(m.Hash) - if err != nil { - return err - } - - enc = NewRefEncryption(len(ref) - 8) - decodedMainRef, err := enc.Decrypt(ref, decodedRef) - if err != nil { - return ErrDecrypt - } - m.Hash = hex.EncodeToString(decodedMainRef) - m.Access = nil - return nil - } - return ErrUnknownAccessType - } -} - -func (a *API) getACTDecryptionKey(ctx context.Context, actManifestAddress storage.Address, sessionKey []byte) (found bool, ciphertext, decryptionKey []byte, err error) { - hasher := sha3.NewLegacyKeccak256() - hasher.Write(append(sessionKey, 0)) - lookupKey := hasher.Sum(nil) - hasher.Reset() - - hasher.Write(append(sessionKey, 1)) - accessKeyDecryptionKey := hasher.Sum(nil) - hasher.Reset() - - lk := hex.EncodeToString(lookupKey) - list, err := a.GetManifestList(ctx, NOOPDecrypt, actManifestAddress, lk) - if err != nil { - return false, nil, nil, err - } - for _, v := range list.Entries { - if v.Path == lk { - cipherTextBytes, err := hex.DecodeString(v.Hash) - if err != nil { - return false, nil, nil, err - } - return true, cipherTextBytes, accessKeyDecryptionKey, nil - } - } - return false, nil, nil, nil -} - -func GenerateAccessControlManifest(ctx *cli.Context, ref string, accessKey []byte, ae *AccessEntry) (*Manifest, error) { - refBytes, err := hex.DecodeString(ref) - if err != nil { - return nil, err - } - // encrypt ref with accessKey - enc := NewRefEncryption(len(refBytes)) - encrypted, err := enc.Encrypt(refBytes, accessKey) - if err != nil { - return nil, err - } - - m := &Manifest{ - Entries: []ManifestEntry{ - { - Hash: hex.EncodeToString(encrypted), - ContentType: ManifestType, - ModTime: time.Now(), - Access: ae, - }, - }, - } - - return m, nil -} - -// DoPK is a helper function to the CLI API that handles the entire business logic for -// creating a session key and access entry given the cli context, ec keys and salt -func DoPK(ctx *cli.Context, privateKey *ecdsa.PrivateKey, granteePublicKey string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error) { - if granteePublicKey == "" { - return nil, nil, errors.New("need a grantee Public Key") - } - b, err := hex.DecodeString(granteePublicKey) - if err != nil { - log.Error("error decoding grantee public key", "err", err) - return nil, nil, err - } - - granteePub, err := crypto.DecompressPubkey(b) - if err != nil { - log.Error("error decompressing grantee public key", "err", err) - return nil, nil, err - } - - sessionKey, err = NewSessionKeyPK(privateKey, granteePub, salt) - if err != nil { - log.Error("error getting session key", "err", err) - return nil, nil, err - } - - ae, err = NewAccessEntryPK(hex.EncodeToString(crypto.CompressPubkey(&privateKey.PublicKey)), salt) - if err != nil { - log.Error("error generating access entry", "err", err) - return nil, nil, err - } - - return sessionKey, ae, nil -} - -// DoACT is a helper function to the CLI API that handles the entire business logic for -// creating a access key, access entry and ACT manifest (including uploading it) given the cli context, ec keys, password grantees and salt -func DoACT(ctx *cli.Context, privateKey *ecdsa.PrivateKey, salt []byte, grantees []string, encryptPasswords []string) (accessKey []byte, ae *AccessEntry, actManifest *Manifest, err error) { - if len(grantees) == 0 && len(encryptPasswords) == 0 { - return nil, nil, nil, errors.New("did not get any grantee public keys or any encryption passwords") - } - - publisherPub := hex.EncodeToString(crypto.CompressPubkey(&privateKey.PublicKey)) - grantees = append(grantees, publisherPub) - - accessKey = make([]byte, 32) - if _, err := io.ReadFull(rand.Reader, salt); err != nil { - panic("reading from crypto/rand failed: " + err.Error()) - } - if _, err := io.ReadFull(rand.Reader, accessKey); err != nil { - panic("reading from crypto/rand failed: " + err.Error()) - } - - lookupPathEncryptedAccessKeyMap := make(map[string]string) - i := 0 - for _, v := range grantees { - i++ - if v == "" { - return nil, nil, nil, errors.New("need a grantee Public Key") - } - b, err := hex.DecodeString(v) - if err != nil { - log.Error("error decoding grantee public key", "err", err) - return nil, nil, nil, err - } - - granteePub, err := crypto.DecompressPubkey(b) - if err != nil { - log.Error("error decompressing grantee public key", "err", err) - return nil, nil, nil, err - } - sessionKey, err := NewSessionKeyPK(privateKey, granteePub, salt) - if err != nil { - return nil, nil, nil, err - } - - hasher := sha3.NewLegacyKeccak256() - hasher.Write(append(sessionKey, 0)) - lookupKey := hasher.Sum(nil) - - hasher.Reset() - hasher.Write(append(sessionKey, 1)) - - accessKeyEncryptionKey := hasher.Sum(nil) - - enc := NewRefEncryption(len(accessKey)) - encryptedAccessKey, err := enc.Encrypt(accessKey, accessKeyEncryptionKey) - if err != nil { - return nil, nil, nil, err - } - lookupPathEncryptedAccessKeyMap[hex.EncodeToString(lookupKey)] = hex.EncodeToString(encryptedAccessKey) - } - - for _, pass := range encryptPasswords { - sessionKey, err := sessionKeyPassword(pass, salt, DefaultKdfParams) - if err != nil { - return nil, nil, nil, err - } - hasher := sha3.NewLegacyKeccak256() - hasher.Write(append(sessionKey, 0)) - lookupKey := hasher.Sum(nil) - - hasher.Reset() - hasher.Write(append(sessionKey, 1)) - - accessKeyEncryptionKey := hasher.Sum(nil) - - enc := NewRefEncryption(len(accessKey)) - encryptedAccessKey, err := enc.Encrypt(accessKey, accessKeyEncryptionKey) - if err != nil { - return nil, nil, nil, err - } - lookupPathEncryptedAccessKeyMap[hex.EncodeToString(lookupKey)] = hex.EncodeToString(encryptedAccessKey) - } - - m := &Manifest{ - Entries: []ManifestEntry{}, - } - - for k, v := range lookupPathEncryptedAccessKeyMap { - m.Entries = append(m.Entries, ManifestEntry{ - Path: k, - Hash: v, - ContentType: "text/plain", - }) - } - - ae, err = NewAccessEntryACT(hex.EncodeToString(crypto.CompressPubkey(&privateKey.PublicKey)), salt, "") - if err != nil { - return nil, nil, nil, err - } - - return accessKey, ae, m, nil -} - -// DoPassword is a helper function to the CLI API that handles the entire business logic for -// creating a session key and an access entry given the cli context, password and salt. -// By default - DefaultKdfParams are used as the scrypt params -func DoPassword(ctx *cli.Context, password string, salt []byte) (sessionKey []byte, ae *AccessEntry, err error) { - ae, err = NewAccessEntryPassword(salt, DefaultKdfParams) - if err != nil { - return nil, nil, err - } - - sessionKey, err = NewSessionKeyPassword(password, ae) - if err != nil { - return nil, nil, err - } - return sessionKey, ae, nil -} diff --git a/swarm/api/api.go b/swarm/api/api.go deleted file mode 100644 index c6ca1b57742e..000000000000 --- a/swarm/api/api.go +++ /dev/null @@ -1,1017 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -//go:generate mimegen --types=./../../cmd/swarm/mimegen/mime.types --package=api --out=gen_mime.go -//go:generate gofmt -s -w gen_mime.go - -import ( - "archive/tar" - "context" - "crypto/ecdsa" - "encoding/hex" - "errors" - "fmt" - "io" - "math/big" - "net/http" - "path" - "strings" - - "bytes" - "mime" - "path/filepath" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/ens" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - - opentracing "github.com/opentracing/opentracing-go" -) - -var ( - apiResolveCount = metrics.NewRegisteredCounter("api.resolve.count", nil) - apiResolveFail = metrics.NewRegisteredCounter("api.resolve.fail", nil) - apiPutCount = metrics.NewRegisteredCounter("api.put.count", nil) - apiPutFail = metrics.NewRegisteredCounter("api.put.fail", nil) - apiGetCount = metrics.NewRegisteredCounter("api.get.count", nil) - apiGetNotFound = metrics.NewRegisteredCounter("api.get.notfound", nil) - apiGetHTTP300 = metrics.NewRegisteredCounter("api.get.http.300", nil) - apiManifestUpdateCount = metrics.NewRegisteredCounter("api.manifestupdate.count", nil) - apiManifestUpdateFail = metrics.NewRegisteredCounter("api.manifestupdate.fail", nil) - apiManifestListCount = metrics.NewRegisteredCounter("api.manifestlist.count", nil) - apiManifestListFail = metrics.NewRegisteredCounter("api.manifestlist.fail", nil) - apiDeleteCount = metrics.NewRegisteredCounter("api.delete.count", nil) - apiDeleteFail = metrics.NewRegisteredCounter("api.delete.fail", nil) - apiGetTarCount = metrics.NewRegisteredCounter("api.gettar.count", nil) - apiGetTarFail = metrics.NewRegisteredCounter("api.gettar.fail", nil) - apiUploadTarCount = metrics.NewRegisteredCounter("api.uploadtar.count", nil) - apiUploadTarFail = metrics.NewRegisteredCounter("api.uploadtar.fail", nil) - apiModifyCount = metrics.NewRegisteredCounter("api.modify.count", nil) - apiModifyFail = metrics.NewRegisteredCounter("api.modify.fail", nil) - apiAddFileCount = metrics.NewRegisteredCounter("api.addfile.count", nil) - apiAddFileFail = metrics.NewRegisteredCounter("api.addfile.fail", nil) - apiRmFileCount = metrics.NewRegisteredCounter("api.removefile.count", nil) - apiRmFileFail = metrics.NewRegisteredCounter("api.removefile.fail", nil) - apiAppendFileCount = metrics.NewRegisteredCounter("api.appendfile.count", nil) - apiAppendFileFail = metrics.NewRegisteredCounter("api.appendfile.fail", nil) - apiGetInvalid = metrics.NewRegisteredCounter("api.get.invalid", nil) -) - -// Resolver interface resolve a domain name to a hash using ENS -type Resolver interface { - Resolve(string) (common.Hash, error) -} - -// ResolveValidator is used to validate the contained Resolver -type ResolveValidator interface { - Resolver - Owner(node [32]byte) (common.Address, error) - HeaderByNumber(context.Context, *big.Int) (*types.Header, error) -} - -// NoResolverError is returned by MultiResolver.Resolve if no resolver -// can be found for the address. -type NoResolverError struct { - TLD string -} - -// NewNoResolverError creates a NoResolverError for the given top level domain -func NewNoResolverError(tld string) *NoResolverError { - return &NoResolverError{TLD: tld} -} - -// Error NoResolverError implements error -func (e *NoResolverError) Error() string { - if e.TLD == "" { - return "no ENS resolver" - } - return fmt.Sprintf("no ENS endpoint configured to resolve .%s TLD names", e.TLD) -} - -// MultiResolver is used to resolve URL addresses based on their TLDs. -// Each TLD can have multiple resolvers, and the resolution from the -// first one in the sequence will be returned. -type MultiResolver struct { - resolvers map[string][]ResolveValidator - nameHash func(string) common.Hash -} - -// MultiResolverOption sets options for MultiResolver and is used as -// arguments for its constructor. -type MultiResolverOption func(*MultiResolver) - -// MultiResolverOptionWithResolver adds a Resolver to a list of resolvers -// for a specific TLD. If TLD is an empty string, the resolver will be added -// to the list of default resolver, the ones that will be used for resolution -// of addresses which do not have their TLD resolver specified. -func MultiResolverOptionWithResolver(r ResolveValidator, tld string) MultiResolverOption { - return func(m *MultiResolver) { - m.resolvers[tld] = append(m.resolvers[tld], r) - } -} - -// NewMultiResolver creates a new instance of MultiResolver. -func NewMultiResolver(opts ...MultiResolverOption) (m *MultiResolver) { - m = &MultiResolver{ - resolvers: make(map[string][]ResolveValidator), - nameHash: ens.EnsNode, - } - for _, o := range opts { - o(m) - } - return m -} - -// Resolve resolves address by choosing a Resolver by TLD. -// If there are more default Resolvers, or for a specific TLD, -// the Hash from the first one which does not return error -// will be returned. -func (m *MultiResolver) Resolve(addr string) (h common.Hash, err error) { - rs, err := m.getResolveValidator(addr) - if err != nil { - return h, err - } - for _, r := range rs { - h, err = r.Resolve(addr) - if err == nil { - return - } - } - return -} - -// getResolveValidator uses the hostname to retrieve the resolver associated with the top level domain -func (m *MultiResolver) getResolveValidator(name string) ([]ResolveValidator, error) { - rs := m.resolvers[""] - tld := path.Ext(name) - if tld != "" { - tld = tld[1:] - rstld, ok := m.resolvers[tld] - if ok { - return rstld, nil - } - } - if len(rs) == 0 { - return rs, NewNoResolverError(tld) - } - return rs, nil -} - -/* -API implements webserver/file system related content storage and retrieval -on top of the FileStore -it is the public interface of the FileStore which is included in the ethereum stack -*/ -type API struct { - feed *feed.Handler - fileStore *storage.FileStore - dns Resolver - Decryptor func(context.Context, string) DecryptFunc -} - -// NewAPI the api constructor initialises a new API instance. -func NewAPI(fileStore *storage.FileStore, dns Resolver, feedHandler *feed.Handler, pk *ecdsa.PrivateKey) (self *API) { - self = &API{ - fileStore: fileStore, - dns: dns, - feed: feedHandler, - Decryptor: func(ctx context.Context, credentials string) DecryptFunc { - return self.doDecrypt(ctx, credentials, pk) - }, - } - return -} - -// Retrieve FileStore reader API -func (a *API) Retrieve(ctx context.Context, addr storage.Address) (reader storage.LazySectionReader, isEncrypted bool) { - return a.fileStore.Retrieve(ctx, addr) -} - -// Store wraps the Store API call of the embedded FileStore -func (a *API) Store(ctx context.Context, data io.Reader, size int64, toEncrypt bool) (addr storage.Address, wait func(ctx context.Context) error, err error) { - log.Debug("api.store", "size", size) - return a.fileStore.Store(ctx, data, size, toEncrypt) -} - -// Resolve a name into a content-addressed hash -// where address could be an ENS name, or a content addressed hash -func (a *API) Resolve(ctx context.Context, address string) (storage.Address, error) { - // if DNS is not configured, return an error - if a.dns == nil { - if hashMatcher.MatchString(address) { - return common.Hex2Bytes(address), nil - } - apiResolveFail.Inc(1) - return nil, fmt.Errorf("no DNS to resolve name: %q", address) - } - // try and resolve the address - resolved, err := a.dns.Resolve(address) - if err != nil { - if hashMatcher.MatchString(address) { - return common.Hex2Bytes(address), nil - } - return nil, err - } - return resolved[:], nil -} - -// Resolve resolves a URI to an Address using the MultiResolver. -func (a *API) ResolveURI(ctx context.Context, uri *URI, credentials string) (storage.Address, error) { - apiResolveCount.Inc(1) - log.Trace("resolving", "uri", uri.Addr) - - var sp opentracing.Span - ctx, sp = spancontext.StartSpan( - ctx, - "api.resolve") - defer sp.Finish() - - // if the URI is immutable, check if the address looks like a hash - if uri.Immutable() { - key := uri.Address() - if key == nil { - return nil, fmt.Errorf("immutable address not a content hash: %q", uri.Addr) - } - return key, nil - } - - addr, err := a.Resolve(ctx, uri.Addr) - if err != nil { - return nil, err - } - - if uri.Path == "" { - return addr, nil - } - walker, err := a.NewManifestWalker(ctx, addr, a.Decryptor(ctx, credentials), nil) - if err != nil { - return nil, err - } - var entry *ManifestEntry - walker.Walk(func(e *ManifestEntry) error { - // if the entry matches the path, set entry and stop - // the walk - if e.Path == uri.Path { - entry = e - // return an error to cancel the walk - return errors.New("found") - } - // ignore non-manifest files - if e.ContentType != ManifestType { - return nil - } - // if the manifest's path is a prefix of the - // requested path, recurse into it by returning - // nil and continuing the walk - if strings.HasPrefix(uri.Path, e.Path) { - return nil - } - return ErrSkipManifest - }) - if entry == nil { - return nil, errors.New("not found") - } - addr = storage.Address(common.Hex2Bytes(entry.Hash)) - return addr, nil -} - -// Put provides singleton manifest creation on top of FileStore store -func (a *API) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (k storage.Address, wait func(context.Context) error, err error) { - apiPutCount.Inc(1) - r := strings.NewReader(content) - key, waitContent, err := a.fileStore.Store(ctx, r, int64(len(content)), toEncrypt) - if err != nil { - apiPutFail.Inc(1) - return nil, nil, err - } - manifest := fmt.Sprintf(`{"entries":[{"hash":"%v","contentType":"%s"}]}`, key, contentType) - r = strings.NewReader(manifest) - key, waitManifest, err := a.fileStore.Store(ctx, r, int64(len(manifest)), toEncrypt) - if err != nil { - apiPutFail.Inc(1) - return nil, nil, err - } - return key, func(ctx context.Context) error { - err := waitContent(ctx) - if err != nil { - return err - } - return waitManifest(ctx) - }, nil -} - -// Get uses iterative manifest retrieval and prefix matching -// to resolve basePath to content using FileStore retrieve -// it returns a section reader, mimeType, status, the key of the actual content and an error -func (a *API) Get(ctx context.Context, decrypt DecryptFunc, manifestAddr storage.Address, path string) (reader storage.LazySectionReader, mimeType string, status int, contentAddr storage.Address, err error) { - log.Debug("api.get", "key", manifestAddr, "path", path) - apiGetCount.Inc(1) - trie, err := loadManifest(ctx, a.fileStore, manifestAddr, nil, decrypt) - if err != nil { - apiGetNotFound.Inc(1) - status = http.StatusNotFound - return nil, "", http.StatusNotFound, nil, err - } - - log.Debug("trie getting entry", "key", manifestAddr, "path", path) - entry, _ := trie.getEntry(path) - - if entry != nil { - log.Debug("trie got entry", "key", manifestAddr, "path", path, "entry.Hash", entry.Hash) - - if entry.ContentType == ManifestType { - log.Debug("entry is manifest", "key", manifestAddr, "new key", entry.Hash) - adr, err := hex.DecodeString(entry.Hash) - if err != nil { - return nil, "", 0, nil, err - } - return a.Get(ctx, decrypt, adr, entry.Path) - } - - // we need to do some extra work if this is a Swarm feed manifest - if entry.ContentType == FeedContentType { - if entry.Feed == nil { - return reader, mimeType, status, nil, fmt.Errorf("Cannot decode Feed in manifest") - } - _, err := a.feed.Lookup(ctx, feed.NewQueryLatest(entry.Feed, lookup.NoClue)) - if err != nil { - apiGetNotFound.Inc(1) - status = http.StatusNotFound - log.Debug(fmt.Sprintf("get feed update content error: %v", err)) - return reader, mimeType, status, nil, err - } - // get the data of the update - _, contentAddr, err := a.feed.GetContent(entry.Feed) - if err != nil { - apiGetNotFound.Inc(1) - status = http.StatusNotFound - log.Warn(fmt.Sprintf("get feed update content error: %v", err)) - return reader, mimeType, status, nil, err - } - - // extract content hash - if len(contentAddr) != storage.AddressLength { - apiGetInvalid.Inc(1) - status = http.StatusUnprocessableEntity - errorMessage := fmt.Sprintf("invalid swarm hash in feed update. Expected %d bytes. Got %d", storage.AddressLength, len(contentAddr)) - log.Warn(errorMessage) - return reader, mimeType, status, nil, errors.New(errorMessage) - } - manifestAddr = storage.Address(contentAddr) - log.Trace("feed update contains swarm hash", "key", manifestAddr) - - // get the manifest the swarm hash points to - trie, err := loadManifest(ctx, a.fileStore, manifestAddr, nil, NOOPDecrypt) - if err != nil { - apiGetNotFound.Inc(1) - status = http.StatusNotFound - log.Warn(fmt.Sprintf("loadManifestTrie (feed update) error: %v", err)) - return reader, mimeType, status, nil, err - } - - // finally, get the manifest entry - // it will always be the entry on path "" - entry, _ = trie.getEntry(path) - if entry == nil { - status = http.StatusNotFound - apiGetNotFound.Inc(1) - err = fmt.Errorf("manifest (feed update) entry for '%s' not found", path) - log.Trace("manifest (feed update) entry not found", "key", manifestAddr, "path", path) - return reader, mimeType, status, nil, err - } - } - - // regardless of feed update manifests or normal manifests we will converge at this point - // get the key the manifest entry points to and serve it if it's unambiguous - contentAddr = common.Hex2Bytes(entry.Hash) - status = entry.Status - if status == http.StatusMultipleChoices { - apiGetHTTP300.Inc(1) - return nil, entry.ContentType, status, contentAddr, err - } - mimeType = entry.ContentType - log.Debug("content lookup key", "key", contentAddr, "mimetype", mimeType) - reader, _ = a.fileStore.Retrieve(ctx, contentAddr) - } else { - // no entry found - status = http.StatusNotFound - apiGetNotFound.Inc(1) - err = fmt.Errorf("Not found: could not find resource '%s'", path) - log.Trace("manifest entry not found", "key", contentAddr, "path", path) - } - return -} - -func (a *API) Delete(ctx context.Context, addr string, path string) (storage.Address, error) { - apiDeleteCount.Inc(1) - uri, err := Parse("bzz:/" + addr) - if err != nil { - apiDeleteFail.Inc(1) - return nil, err - } - key, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) - - if err != nil { - return nil, err - } - newKey, err := a.UpdateManifest(ctx, key, func(mw *ManifestWriter) error { - log.Debug(fmt.Sprintf("removing %s from manifest %s", path, key.Log())) - return mw.RemoveEntry(path) - }) - if err != nil { - apiDeleteFail.Inc(1) - return nil, err - } - - return newKey, nil -} - -// GetDirectoryTar fetches a requested directory as a tarstream -// it returns an io.Reader and an error. Do not forget to Close() the returned ReadCloser -func (a *API) GetDirectoryTar(ctx context.Context, decrypt DecryptFunc, uri *URI) (io.ReadCloser, error) { - apiGetTarCount.Inc(1) - addr, err := a.Resolve(ctx, uri.Addr) - if err != nil { - return nil, err - } - walker, err := a.NewManifestWalker(ctx, addr, decrypt, nil) - if err != nil { - apiGetTarFail.Inc(1) - return nil, err - } - - piper, pipew := io.Pipe() - - tw := tar.NewWriter(pipew) - - go func() { - err := walker.Walk(func(entry *ManifestEntry) error { - // ignore manifests (walk will recurse into them) - if entry.ContentType == ManifestType { - return nil - } - - // retrieve the entry's key and size - reader, _ := a.Retrieve(ctx, storage.Address(common.Hex2Bytes(entry.Hash))) - size, err := reader.Size(ctx, nil) - if err != nil { - return err - } - - // write a tar header for the entry - hdr := &tar.Header{ - Name: entry.Path, - Mode: entry.Mode, - Size: size, - ModTime: entry.ModTime, - Xattrs: map[string]string{ - "user.swarm.content-type": entry.ContentType, - }, - } - - if err := tw.WriteHeader(hdr); err != nil { - return err - } - - // copy the file into the tar stream - n, err := io.Copy(tw, io.LimitReader(reader, hdr.Size)) - if err != nil { - return err - } else if n != size { - return fmt.Errorf("error writing %s: expected %d bytes but sent %d", entry.Path, size, n) - } - - return nil - }) - // close tar writer before closing pipew - // to flush remaining data to pipew - // regardless of error value - tw.Close() - if err != nil { - apiGetTarFail.Inc(1) - pipew.CloseWithError(err) - } else { - pipew.Close() - } - }() - - return piper, nil -} - -// GetManifestList lists the manifest entries for the specified address and prefix -// and returns it as a ManifestList -func (a *API) GetManifestList(ctx context.Context, decryptor DecryptFunc, addr storage.Address, prefix string) (list ManifestList, err error) { - apiManifestListCount.Inc(1) - walker, err := a.NewManifestWalker(ctx, addr, decryptor, nil) - if err != nil { - apiManifestListFail.Inc(1) - return ManifestList{}, err - } - - err = walker.Walk(func(entry *ManifestEntry) error { - // handle non-manifest files - if entry.ContentType != ManifestType { - // ignore the file if it doesn't have the specified prefix - if !strings.HasPrefix(entry.Path, prefix) { - return nil - } - - // if the path after the prefix contains a slash, add a - // common prefix to the list, otherwise add the entry - suffix := strings.TrimPrefix(entry.Path, prefix) - if index := strings.Index(suffix, "/"); index > -1 { - list.CommonPrefixes = append(list.CommonPrefixes, prefix+suffix[:index+1]) - return nil - } - if entry.Path == "" { - entry.Path = "/" - } - list.Entries = append(list.Entries, entry) - return nil - } - - // if the manifest's path is a prefix of the specified prefix - // then just recurse into the manifest by returning nil and - // continuing the walk - if strings.HasPrefix(prefix, entry.Path) { - return nil - } - - // if the manifest's path has the specified prefix, then if the - // path after the prefix contains a slash, add a common prefix - // to the list and skip the manifest, otherwise recurse into - // the manifest by returning nil and continuing the walk - if strings.HasPrefix(entry.Path, prefix) { - suffix := strings.TrimPrefix(entry.Path, prefix) - if index := strings.Index(suffix, "/"); index > -1 { - list.CommonPrefixes = append(list.CommonPrefixes, prefix+suffix[:index+1]) - return ErrSkipManifest - } - return nil - } - - // the manifest neither has the prefix or needs recursing in to - // so just skip it - return ErrSkipManifest - }) - - if err != nil { - apiManifestListFail.Inc(1) - return ManifestList{}, err - } - - return list, nil -} - -func (a *API) UpdateManifest(ctx context.Context, addr storage.Address, update func(mw *ManifestWriter) error) (storage.Address, error) { - apiManifestUpdateCount.Inc(1) - mw, err := a.NewManifestWriter(ctx, addr, nil) - if err != nil { - apiManifestUpdateFail.Inc(1) - return nil, err - } - - if err := update(mw); err != nil { - apiManifestUpdateFail.Inc(1) - return nil, err - } - - addr, err = mw.Store() - if err != nil { - apiManifestUpdateFail.Inc(1) - return nil, err - } - log.Debug(fmt.Sprintf("generated manifest %s", addr)) - return addr, nil -} - -// Modify loads manifest and checks the content hash before recalculating and storing the manifest. -func (a *API) Modify(ctx context.Context, addr storage.Address, path, contentHash, contentType string) (storage.Address, error) { - apiModifyCount.Inc(1) - quitC := make(chan bool) - trie, err := loadManifest(ctx, a.fileStore, addr, quitC, NOOPDecrypt) - if err != nil { - apiModifyFail.Inc(1) - return nil, err - } - if contentHash != "" { - entry := newManifestTrieEntry(&ManifestEntry{ - Path: path, - ContentType: contentType, - }, nil) - entry.Hash = contentHash - trie.addEntry(entry, quitC) - } else { - trie.deleteEntry(path, quitC) - } - - if err := trie.recalcAndStore(); err != nil { - apiModifyFail.Inc(1) - return nil, err - } - return trie.ref, nil -} - -// AddFile creates a new manifest entry, adds it to swarm, then adds a file to swarm. -func (a *API) AddFile(ctx context.Context, mhash, path, fname string, content []byte, nameresolver bool) (storage.Address, string, error) { - apiAddFileCount.Inc(1) - - uri, err := Parse("bzz:/" + mhash) - if err != nil { - apiAddFileFail.Inc(1) - return nil, "", err - } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) - if err != nil { - apiAddFileFail.Inc(1) - return nil, "", err - } - - // trim the root dir we added - if path[:1] == "/" { - path = path[1:] - } - - entry := &ManifestEntry{ - Path: filepath.Join(path, fname), - ContentType: mime.TypeByExtension(filepath.Ext(fname)), - Mode: 0700, - Size: int64(len(content)), - ModTime: time.Now(), - } - - mw, err := a.NewManifestWriter(ctx, mkey, nil) - if err != nil { - apiAddFileFail.Inc(1) - return nil, "", err - } - - fkey, err := mw.AddEntry(ctx, bytes.NewReader(content), entry) - if err != nil { - apiAddFileFail.Inc(1) - return nil, "", err - } - - newMkey, err := mw.Store() - if err != nil { - apiAddFileFail.Inc(1) - return nil, "", err - - } - - return fkey, newMkey.String(), nil -} - -func (a *API) UploadTar(ctx context.Context, bodyReader io.ReadCloser, manifestPath, defaultPath string, mw *ManifestWriter) (storage.Address, error) { - apiUploadTarCount.Inc(1) - var contentKey storage.Address - tr := tar.NewReader(bodyReader) - defer bodyReader.Close() - var defaultPathFound bool - for { - hdr, err := tr.Next() - if err == io.EOF { - break - } else if err != nil { - apiUploadTarFail.Inc(1) - return nil, fmt.Errorf("error reading tar stream: %s", err) - } - - // only store regular files - if !hdr.FileInfo().Mode().IsRegular() { - continue - } - - // add the entry under the path from the request - manifestPath := path.Join(manifestPath, hdr.Name) - contentType := hdr.Xattrs["user.swarm.content-type"] - if contentType == "" { - contentType = mime.TypeByExtension(filepath.Ext(hdr.Name)) - } - //DetectContentType("") - entry := &ManifestEntry{ - Path: manifestPath, - ContentType: contentType, - Mode: hdr.Mode, - Size: hdr.Size, - ModTime: hdr.ModTime, - } - contentKey, err = mw.AddEntry(ctx, tr, entry) - if err != nil { - apiUploadTarFail.Inc(1) - return nil, fmt.Errorf("error adding manifest entry from tar stream: %s", err) - } - if hdr.Name == defaultPath { - contentType := hdr.Xattrs["user.swarm.content-type"] - if contentType == "" { - contentType = mime.TypeByExtension(filepath.Ext(hdr.Name)) - } - - entry := &ManifestEntry{ - Hash: contentKey.Hex(), - Path: "", // default entry - ContentType: contentType, - Mode: hdr.Mode, - Size: hdr.Size, - ModTime: hdr.ModTime, - } - contentKey, err = mw.AddEntry(ctx, nil, entry) - if err != nil { - apiUploadTarFail.Inc(1) - return nil, fmt.Errorf("error adding default manifest entry from tar stream: %s", err) - } - defaultPathFound = true - } - } - if defaultPath != "" && !defaultPathFound { - return contentKey, fmt.Errorf("default path %q not found", defaultPath) - } - return contentKey, nil -} - -// RemoveFile removes a file entry in a manifest. -func (a *API) RemoveFile(ctx context.Context, mhash string, path string, fname string, nameresolver bool) (string, error) { - apiRmFileCount.Inc(1) - - uri, err := Parse("bzz:/" + mhash) - if err != nil { - apiRmFileFail.Inc(1) - return "", err - } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) - if err != nil { - apiRmFileFail.Inc(1) - return "", err - } - - // trim the root dir we added - if path[:1] == "/" { - path = path[1:] - } - - mw, err := a.NewManifestWriter(ctx, mkey, nil) - if err != nil { - apiRmFileFail.Inc(1) - return "", err - } - - err = mw.RemoveEntry(filepath.Join(path, fname)) - if err != nil { - apiRmFileFail.Inc(1) - return "", err - } - - newMkey, err := mw.Store() - if err != nil { - apiRmFileFail.Inc(1) - return "", err - - } - - return newMkey.String(), nil -} - -// AppendFile removes old manifest, appends file entry to new manifest and adds it to Swarm. -func (a *API) AppendFile(ctx context.Context, mhash, path, fname string, existingSize int64, content []byte, oldAddr storage.Address, offset int64, addSize int64, nameresolver bool) (storage.Address, string, error) { - apiAppendFileCount.Inc(1) - - buffSize := offset + addSize - if buffSize < existingSize { - buffSize = existingSize - } - - buf := make([]byte, buffSize) - - oldReader, _ := a.Retrieve(ctx, oldAddr) - io.ReadAtLeast(oldReader, buf, int(offset)) - - newReader := bytes.NewReader(content) - io.ReadAtLeast(newReader, buf[offset:], int(addSize)) - - if buffSize < existingSize { - io.ReadAtLeast(oldReader, buf[addSize:], int(buffSize)) - } - - combinedReader := bytes.NewReader(buf) - totalSize := int64(len(buf)) - - // TODO(jmozah): to append using pyramid chunker when it is ready - //oldReader := a.Retrieve(oldKey) - //newReader := bytes.NewReader(content) - //combinedReader := io.MultiReader(oldReader, newReader) - - uri, err := Parse("bzz:/" + mhash) - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - } - mkey, err := a.ResolveURI(ctx, uri, EMPTY_CREDENTIALS) - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - } - - // trim the root dir we added - if path[:1] == "/" { - path = path[1:] - } - - mw, err := a.NewManifestWriter(ctx, mkey, nil) - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - } - - err = mw.RemoveEntry(filepath.Join(path, fname)) - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - } - - entry := &ManifestEntry{ - Path: filepath.Join(path, fname), - ContentType: mime.TypeByExtension(filepath.Ext(fname)), - Mode: 0700, - Size: totalSize, - ModTime: time.Now(), - } - - fkey, err := mw.AddEntry(ctx, io.Reader(combinedReader), entry) - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - } - - newMkey, err := mw.Store() - if err != nil { - apiAppendFileFail.Inc(1) - return nil, "", err - - } - - return fkey, newMkey.String(), nil -} - -// BuildDirectoryTree used by swarmfs_unix -func (a *API) BuildDirectoryTree(ctx context.Context, mhash string, nameresolver bool) (addr storage.Address, manifestEntryMap map[string]*manifestTrieEntry, err error) { - - uri, err := Parse("bzz:/" + mhash) - if err != nil { - return nil, nil, err - } - addr, err = a.Resolve(ctx, uri.Addr) - if err != nil { - return nil, nil, err - } - - quitC := make(chan bool) - rootTrie, err := loadManifest(ctx, a.fileStore, addr, quitC, NOOPDecrypt) - if err != nil { - return nil, nil, fmt.Errorf("can't load manifest %v: %v", addr.String(), err) - } - - manifestEntryMap = map[string]*manifestTrieEntry{} - err = rootTrie.listWithPrefix(uri.Path, quitC, func(entry *manifestTrieEntry, suffix string) { - manifestEntryMap[suffix] = entry - }) - - if err != nil { - return nil, nil, fmt.Errorf("list with prefix failed %v: %v", addr.String(), err) - } - return addr, manifestEntryMap, nil -} - -// FeedsLookup finds Swarm feeds updates at specific points in time, or the latest update -func (a *API) FeedsLookup(ctx context.Context, query *feed.Query) ([]byte, error) { - _, err := a.feed.Lookup(ctx, query) - if err != nil { - return nil, err - } - var data []byte - _, data, err = a.feed.GetContent(&query.Feed) - if err != nil { - return nil, err - } - return data, nil -} - -// FeedsNewRequest creates a Request object to update a specific feed -func (a *API) FeedsNewRequest(ctx context.Context, feed *feed.Feed) (*feed.Request, error) { - return a.feed.NewRequest(ctx, feed) -} - -// FeedsUpdate publishes a new update on the given feed -func (a *API) FeedsUpdate(ctx context.Context, request *feed.Request) (storage.Address, error) { - return a.feed.Update(ctx, request) -} - -// ErrCannotLoadFeedManifest is returned when looking up a feeds manifest fails -var ErrCannotLoadFeedManifest = errors.New("Cannot load feed manifest") - -// ErrNotAFeedManifest is returned when the address provided returned something other than a valid manifest -var ErrNotAFeedManifest = errors.New("Not a feed manifest") - -// ResolveFeedManifest retrieves the Swarm feed manifest for the given address, and returns the referenced Feed. -func (a *API) ResolveFeedManifest(ctx context.Context, addr storage.Address) (*feed.Feed, error) { - trie, err := loadManifest(ctx, a.fileStore, addr, nil, NOOPDecrypt) - if err != nil { - return nil, ErrCannotLoadFeedManifest - } - - entry, _ := trie.getEntry("") - if entry.ContentType != FeedContentType { - return nil, ErrNotAFeedManifest - } - - return entry.Feed, nil -} - -// ErrCannotResolveFeedURI is returned when the ENS resolver is not able to translate a name to a Swarm feed -var ErrCannotResolveFeedURI = errors.New("Cannot resolve Feed URI") - -// ErrCannotResolveFeed is returned when values provided are not enough or invalid to recreate a -// feed out of them. -var ErrCannotResolveFeed = errors.New("Cannot resolve Feed") - -// ResolveFeed attempts to extract feed information out of the manifest, if provided -// If not, it attempts to extract the feed out of a set of key-value pairs -func (a *API) ResolveFeed(ctx context.Context, uri *URI, values feed.Values) (*feed.Feed, error) { - var fd *feed.Feed - var err error - if uri.Addr != "" { - // resolve the content key. - manifestAddr := uri.Address() - if manifestAddr == nil { - manifestAddr, err = a.Resolve(ctx, uri.Addr) - if err != nil { - return nil, ErrCannotResolveFeedURI - } - } - - // get the Swarm feed from the manifest - fd, err = a.ResolveFeedManifest(ctx, manifestAddr) - if err != nil { - return nil, err - } - log.Debug("handle.get.feed: resolved", "manifestkey", manifestAddr, "feed", fd.Hex()) - } else { - var f feed.Feed - if err := f.FromValues(values); err != nil { - return nil, ErrCannotResolveFeed - - } - fd = &f - } - return fd, nil -} - -// MimeOctetStream default value of http Content-Type header -const MimeOctetStream = "application/octet-stream" - -// DetectContentType by file file extension, or fallback to content sniff -func DetectContentType(fileName string, f io.ReadSeeker) (string, error) { - ctype := mime.TypeByExtension(filepath.Ext(fileName)) - if ctype != "" { - return ctype, nil - } - - // save/rollback to get content probe from begin of file - currentPosition, err := f.Seek(0, io.SeekCurrent) - if err != nil { - return MimeOctetStream, fmt.Errorf("seeker can't seek, %s", err) - } - - // read a chunk to decide between utf-8 text and binary - var buf [512]byte - n, _ := f.Read(buf[:]) - ctype = http.DetectContentType(buf[:n]) - - _, err = f.Seek(currentPosition, io.SeekStart) // rewind to output whole file - if err != nil { - return MimeOctetStream, fmt.Errorf("seeker can't seek, %s", err) - } - - return ctype, nil -} diff --git a/swarm/api/api_test.go b/swarm/api/api_test.go deleted file mode 100644 index eb896f32aab7..000000000000 --- a/swarm/api/api_test.go +++ /dev/null @@ -1,502 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bytes" - "context" - "errors" - "flag" - "fmt" - "io" - "io/ioutil" - "math/big" - "os" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/sctx" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -func init() { - loglevel := flag.Int("loglevel", 2, "loglevel") - flag.Parse() - log.Root().SetHandler(log.CallerFileHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(os.Stderr, log.TerminalFormat(true))))) -} - -func testAPI(t *testing.T, f func(*API, bool)) { - datadir, err := ioutil.TempDir("", "bzz-test") - if err != nil { - t.Fatalf("unable to create temp dir: %v", err) - } - defer os.RemoveAll(datadir) - fileStore, err := storage.NewLocalFileStore(datadir, make([]byte, 32)) - if err != nil { - return - } - api := NewAPI(fileStore, nil, nil, nil) - f(api, false) - f(api, true) -} - -type testResponse struct { - reader storage.LazySectionReader - *Response -} - -func checkResponse(t *testing.T, resp *testResponse, exp *Response) { - - if resp.MimeType != exp.MimeType { - t.Errorf("incorrect mimeType. expected '%s', got '%s'", exp.MimeType, resp.MimeType) - } - if resp.Status != exp.Status { - t.Errorf("incorrect status. expected '%d', got '%d'", exp.Status, resp.Status) - } - if resp.Size != exp.Size { - t.Errorf("incorrect size. expected '%d', got '%d'", exp.Size, resp.Size) - } - if resp.reader != nil { - content := make([]byte, resp.Size) - read, _ := resp.reader.Read(content) - if int64(read) != exp.Size { - t.Errorf("incorrect content length. expected '%d...', got '%d...'", read, exp.Size) - } - resp.Content = string(content) - } - if resp.Content != exp.Content { - // if !bytes.Equal(resp.Content, exp.Content) - t.Errorf("incorrect content. expected '%s...', got '%s...'", string(exp.Content), string(resp.Content)) - } -} - -// func expResponse(content []byte, mimeType string, status int) *Response { -func expResponse(content string, mimeType string, status int) *Response { - log.Trace(fmt.Sprintf("expected content (%v): %v ", len(content), content)) - return &Response{mimeType, status, int64(len(content)), content} -} - -func testGet(t *testing.T, api *API, bzzhash, path string) *testResponse { - addr := storage.Address(common.Hex2Bytes(bzzhash)) - reader, mimeType, status, _, err := api.Get(context.TODO(), NOOPDecrypt, addr, path) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - quitC := make(chan bool) - size, err := reader.Size(context.TODO(), quitC) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - log.Trace(fmt.Sprintf("reader size: %v ", size)) - s := make([]byte, size) - _, err = reader.Read(s) - if err != io.EOF { - t.Fatalf("unexpected error: %v", err) - } - reader.Seek(0, 0) - return &testResponse{reader, &Response{mimeType, status, size, string(s)}} - // return &testResponse{reader, &Response{mimeType, status, reader.Size(), nil}} -} - -func TestApiPut(t *testing.T) { - testAPI(t, func(api *API, toEncrypt bool) { - content := "hello" - exp := expResponse(content, "text/plain", 0) - ctx := context.TODO() - addr, wait, err := api.Put(ctx, content, exp.MimeType, toEncrypt) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - err = wait(ctx) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - resp := testGet(t, api, addr.Hex(), "") - checkResponse(t, resp, exp) - }) -} - -// testResolver implements the Resolver interface and either returns the given -// hash if it is set, or returns a "name not found" error -type testResolveValidator struct { - hash *common.Hash -} - -func newTestResolveValidator(addr string) *testResolveValidator { - r := &testResolveValidator{} - if addr != "" { - hash := common.HexToHash(addr) - r.hash = &hash - } - return r -} - -func (t *testResolveValidator) Resolve(addr string) (common.Hash, error) { - if t.hash == nil { - return common.Hash{}, fmt.Errorf("DNS name not found: %q", addr) - } - return *t.hash, nil -} - -func (t *testResolveValidator) Owner(node [32]byte) (addr common.Address, err error) { - return -} -func (t *testResolveValidator) HeaderByNumber(context.Context, *big.Int) (header *types.Header, err error) { - return -} - -// TestAPIResolve tests resolving URIs which can either contain content hashes -// or ENS names -func TestAPIResolve(t *testing.T) { - ensAddr := "swarm.eth" - hashAddr := "1111111111111111111111111111111111111111111111111111111111111111" - resolvedAddr := "2222222222222222222222222222222222222222222222222222222222222222" - doesResolve := newTestResolveValidator(resolvedAddr) - doesntResolve := newTestResolveValidator("") - - type test struct { - desc string - dns Resolver - addr string - immutable bool - result string - expectErr error - } - - tests := []*test{ - { - desc: "DNS not configured, hash address, returns hash address", - dns: nil, - addr: hashAddr, - result: hashAddr, - }, - { - desc: "DNS not configured, ENS address, returns error", - dns: nil, - addr: ensAddr, - expectErr: errors.New(`no DNS to resolve name: "swarm.eth"`), - }, - { - desc: "DNS configured, hash address, hash resolves, returns resolved address", - dns: doesResolve, - addr: hashAddr, - result: resolvedAddr, - }, - { - desc: "DNS configured, immutable hash address, hash resolves, returns hash address", - dns: doesResolve, - addr: hashAddr, - immutable: true, - result: hashAddr, - }, - { - desc: "DNS configured, hash address, hash doesn't resolve, returns hash address", - dns: doesntResolve, - addr: hashAddr, - result: hashAddr, - }, - { - desc: "DNS configured, ENS address, name resolves, returns resolved address", - dns: doesResolve, - addr: ensAddr, - result: resolvedAddr, - }, - { - desc: "DNS configured, immutable ENS address, name resolves, returns error", - dns: doesResolve, - addr: ensAddr, - immutable: true, - expectErr: errors.New(`immutable address not a content hash: "swarm.eth"`), - }, - { - desc: "DNS configured, ENS address, name doesn't resolve, returns error", - dns: doesntResolve, - addr: ensAddr, - expectErr: errors.New(`DNS name not found: "swarm.eth"`), - }, - } - for _, x := range tests { - t.Run(x.desc, func(t *testing.T) { - api := &API{dns: x.dns} - uri := &URI{Addr: x.addr, Scheme: "bzz"} - if x.immutable { - uri.Scheme = "bzz-immutable" - } - res, err := api.ResolveURI(context.TODO(), uri, "") - if err == nil { - if x.expectErr != nil { - t.Fatalf("expected error %q, got result %q", x.expectErr, res) - } - if res.String() != x.result { - t.Fatalf("expected result %q, got %q", x.result, res) - } - } else { - if x.expectErr == nil { - t.Fatalf("expected no error, got %q", err) - } - if err.Error() != x.expectErr.Error() { - t.Fatalf("expected error %q, got %q", x.expectErr, err) - } - } - }) - } -} - -func TestMultiResolver(t *testing.T) { - doesntResolve := newTestResolveValidator("") - - ethAddr := "swarm.eth" - ethHash := "0x2222222222222222222222222222222222222222222222222222222222222222" - ethResolve := newTestResolveValidator(ethHash) - - testAddr := "swarm.test" - testHash := "0x1111111111111111111111111111111111111111111111111111111111111111" - testResolve := newTestResolveValidator(testHash) - - tests := []struct { - desc string - r Resolver - addr string - result string - err error - }{ - { - desc: "No resolvers, returns error", - r: NewMultiResolver(), - err: NewNoResolverError(""), - }, - { - desc: "One default resolver, returns resolved address", - r: NewMultiResolver(MultiResolverOptionWithResolver(ethResolve, "")), - addr: ethAddr, - result: ethHash, - }, - { - desc: "Two default resolvers, returns resolved address", - r: NewMultiResolver( - MultiResolverOptionWithResolver(ethResolve, ""), - MultiResolverOptionWithResolver(ethResolve, ""), - ), - addr: ethAddr, - result: ethHash, - }, - { - desc: "Two default resolvers, first doesn't resolve, returns resolved address", - r: NewMultiResolver( - MultiResolverOptionWithResolver(doesntResolve, ""), - MultiResolverOptionWithResolver(ethResolve, ""), - ), - addr: ethAddr, - result: ethHash, - }, - { - desc: "Default resolver doesn't resolve, tld resolver resolve, returns resolved address", - r: NewMultiResolver( - MultiResolverOptionWithResolver(doesntResolve, ""), - MultiResolverOptionWithResolver(ethResolve, "eth"), - ), - addr: ethAddr, - result: ethHash, - }, - { - desc: "Three TLD resolvers, third resolves, returns resolved address", - r: NewMultiResolver( - MultiResolverOptionWithResolver(doesntResolve, "eth"), - MultiResolverOptionWithResolver(doesntResolve, "eth"), - MultiResolverOptionWithResolver(ethResolve, "eth"), - ), - addr: ethAddr, - result: ethHash, - }, - { - desc: "One TLD resolver doesn't resolve, returns error", - r: NewMultiResolver( - MultiResolverOptionWithResolver(doesntResolve, ""), - MultiResolverOptionWithResolver(ethResolve, "eth"), - ), - addr: ethAddr, - result: ethHash, - }, - { - desc: "One defautl and one TLD resolver, all doesn't resolve, returns error", - r: NewMultiResolver( - MultiResolverOptionWithResolver(doesntResolve, ""), - MultiResolverOptionWithResolver(doesntResolve, "eth"), - ), - addr: ethAddr, - result: ethHash, - err: errors.New(`DNS name not found: "swarm.eth"`), - }, - { - desc: "Two TLD resolvers, both resolve, returns resolved address", - r: NewMultiResolver( - MultiResolverOptionWithResolver(ethResolve, "eth"), - MultiResolverOptionWithResolver(testResolve, "test"), - ), - addr: testAddr, - result: testHash, - }, - { - desc: "One TLD resolver, no default resolver, returns error for different TLD", - r: NewMultiResolver( - MultiResolverOptionWithResolver(ethResolve, "eth"), - ), - addr: testAddr, - err: NewNoResolverError("test"), - }, - } - for _, x := range tests { - t.Run(x.desc, func(t *testing.T) { - res, err := x.r.Resolve(x.addr) - if err == nil { - if x.err != nil { - t.Fatalf("expected error %q, got result %q", x.err, res.Hex()) - } - if res.Hex() != x.result { - t.Fatalf("expected result %q, got %q", x.result, res.Hex()) - } - } else { - if x.err == nil { - t.Fatalf("expected no error, got %q", err) - } - if err.Error() != x.err.Error() { - t.Fatalf("expected error %q, got %q", x.err, err) - } - } - }) - } -} - -func TestDecryptOriginForbidden(t *testing.T) { - ctx := context.TODO() - ctx = sctx.SetHost(ctx, "swarm-gateways.net") - - me := &ManifestEntry{ - Access: &AccessEntry{Type: AccessTypePass}, - } - - api := NewAPI(nil, nil, nil, nil) - - f := api.Decryptor(ctx, "") - err := f(me) - if err != ErrDecryptDomainForbidden { - t.Fatalf("should fail with ErrDecryptDomainForbidden, got %v", err) - } -} - -func TestDecryptOrigin(t *testing.T) { - for _, v := range []struct { - host string - expectError error - }{ - { - host: "localhost", - expectError: ErrDecrypt, - }, - { - host: "127.0.0.1", - expectError: ErrDecrypt, - }, - { - host: "swarm-gateways.net", - expectError: ErrDecryptDomainForbidden, - }, - } { - ctx := context.TODO() - ctx = sctx.SetHost(ctx, v.host) - - me := &ManifestEntry{ - Access: &AccessEntry{Type: AccessTypePass}, - } - - api := NewAPI(nil, nil, nil, nil) - - f := api.Decryptor(ctx, "") - err := f(me) - if err != v.expectError { - t.Fatalf("should fail with %v, got %v", v.expectError, err) - } - } -} - -func TestDetectContentType(t *testing.T) { - for _, tc := range []struct { - file string - content string - expectedContentType string - }{ - { - file: "file-with-correct-css.css", - content: "body {background-color: orange}", - expectedContentType: "text/css; charset=utf-8", - }, - { - file: "empty-file.css", - content: "", - expectedContentType: "text/css; charset=utf-8", - }, - { - file: "empty-file.pdf", - content: "", - expectedContentType: "application/pdf", - }, - { - file: "empty-file.md", - content: "", - expectedContentType: "text/markdown; charset=utf-8", - }, - { - file: "empty-file-with-unknown-content.strangeext", - content: "", - expectedContentType: "text/plain; charset=utf-8", - }, - { - file: "file-with-unknown-extension-and-content.strangeext", - content: "Lorem Ipsum", - expectedContentType: "text/plain; charset=utf-8", - }, - { - file: "file-no-extension", - content: "Lorem Ipsum", - expectedContentType: "text/plain; charset=utf-8", - }, - { - file: "file-no-extension-no-content", - content: "", - expectedContentType: "text/plain; charset=utf-8", - }, - { - file: "css-file-with-html-inside.css", - content: "", - expectedContentType: "text/css; charset=utf-8", - }, - } { - t.Run(tc.file, func(t *testing.T) { - detected, err := DetectContentType(tc.file, bytes.NewReader([]byte(tc.content))) - if err != nil { - t.Fatal(err) - } - - if detected != tc.expectedContentType { - t.Fatalf("File: %s, Expected mime type %s, got %s", tc.file, tc.expectedContentType, detected) - } - - }) - } -} diff --git a/swarm/api/client/client.go b/swarm/api/client/client.go deleted file mode 100644 index 5e293cca72a2..000000000000 --- a/swarm/api/client/client.go +++ /dev/null @@ -1,797 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "archive/tar" - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "mime/multipart" - "net/http" - "net/http/httptrace" - "net/textproto" - "net/url" - "os" - "path/filepath" - "regexp" - "strconv" - "strings" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/pborman/uuid" -) - -var ( - ErrUnauthorized = errors.New("unauthorized") -) - -func NewClient(gateway string) *Client { - return &Client{ - Gateway: gateway, - } -} - -// Client wraps interaction with a swarm HTTP gateway. -type Client struct { - Gateway string -} - -// UploadRaw uploads raw data to swarm and returns the resulting hash. If toEncrypt is true it -// uploads encrypted data -func (c *Client) UploadRaw(r io.Reader, size int64, toEncrypt bool) (string, error) { - if size <= 0 { - return "", errors.New("data size must be greater than zero") - } - addr := "" - if toEncrypt { - addr = "encrypt" - } - req, err := http.NewRequest("POST", c.Gateway+"/bzz-raw:/"+addr, r) - if err != nil { - return "", err - } - req.ContentLength = size - res, err := http.DefaultClient.Do(req) - if err != nil { - return "", err - } - defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return "", fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - data, err := ioutil.ReadAll(res.Body) - if err != nil { - return "", err - } - return string(data), nil -} - -// DownloadRaw downloads raw data from swarm and it returns a ReadCloser and a bool whether the -// content was encrypted -func (c *Client) DownloadRaw(hash string) (io.ReadCloser, bool, error) { - uri := c.Gateway + "/bzz-raw:/" + hash - res, err := http.DefaultClient.Get(uri) - if err != nil { - return nil, false, err - } - if res.StatusCode != http.StatusOK { - res.Body.Close() - return nil, false, fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - isEncrypted := (res.Header.Get("X-Decrypted") == "true") - return res.Body, isEncrypted, nil -} - -// File represents a file in a swarm manifest and is used for uploading and -// downloading content to and from swarm -type File struct { - io.ReadCloser - api.ManifestEntry -} - -// Open opens a local file which can then be passed to client.Upload to upload -// it to swarm -func Open(path string) (*File, error) { - f, err := os.Open(path) - if err != nil { - return nil, err - } - stat, err := f.Stat() - if err != nil { - f.Close() - return nil, err - } - - contentType, err := api.DetectContentType(f.Name(), f) - if err != nil { - return nil, err - } - - return &File{ - ReadCloser: f, - ManifestEntry: api.ManifestEntry{ - ContentType: contentType, - Mode: int64(stat.Mode()), - Size: stat.Size(), - ModTime: stat.ModTime(), - }, - }, nil -} - -// Upload uploads a file to swarm and either adds it to an existing manifest -// (if the manifest argument is non-empty) or creates a new manifest containing -// the file, returning the resulting manifest hash (the file will then be -// available at bzz://) -func (c *Client) Upload(file *File, manifest string, toEncrypt bool) (string, error) { - if file.Size <= 0 { - return "", errors.New("file size must be greater than zero") - } - return c.TarUpload(manifest, &FileUploader{file}, "", toEncrypt) -} - -// Download downloads a file with the given path from the swarm manifest with -// the given hash (i.e. it gets bzz://) -func (c *Client) Download(hash, path string) (*File, error) { - uri := c.Gateway + "/bzz:/" + hash + "/" + path - res, err := http.DefaultClient.Get(uri) - if err != nil { - return nil, err - } - if res.StatusCode != http.StatusOK { - res.Body.Close() - return nil, fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - return &File{ - ReadCloser: res.Body, - ManifestEntry: api.ManifestEntry{ - ContentType: res.Header.Get("Content-Type"), - Size: res.ContentLength, - }, - }, nil -} - -// UploadDirectory uploads a directory tree to swarm and either adds the files -// to an existing manifest (if the manifest argument is non-empty) or creates a -// new manifest, returning the resulting manifest hash (files from the -// directory will then be available at bzz://path/to/file), with -// the file specified in defaultPath being uploaded to the root of the manifest -// (i.e. bzz://) -func (c *Client) UploadDirectory(dir, defaultPath, manifest string, toEncrypt bool) (string, error) { - stat, err := os.Stat(dir) - if err != nil { - return "", err - } else if !stat.IsDir() { - return "", fmt.Errorf("not a directory: %s", dir) - } - if defaultPath != "" { - if _, err := os.Stat(filepath.Join(dir, defaultPath)); err != nil { - if os.IsNotExist(err) { - return "", fmt.Errorf("the default path %q was not found in the upload directory %q", defaultPath, dir) - } - return "", fmt.Errorf("default path: %v", err) - } - } - return c.TarUpload(manifest, &DirectoryUploader{dir}, defaultPath, toEncrypt) -} - -// DownloadDirectory downloads the files contained in a swarm manifest under -// the given path into a local directory (existing files will be overwritten) -func (c *Client) DownloadDirectory(hash, path, destDir, credentials string) error { - stat, err := os.Stat(destDir) - if err != nil { - return err - } else if !stat.IsDir() { - return fmt.Errorf("not a directory: %s", destDir) - } - - uri := c.Gateway + "/bzz:/" + hash + "/" + path - req, err := http.NewRequest("GET", uri, nil) - if err != nil { - return err - } - if credentials != "" { - req.SetBasicAuth("", credentials) - } - req.Header.Set("Accept", "application/x-tar") - res, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer res.Body.Close() - switch res.StatusCode { - case http.StatusOK: - case http.StatusUnauthorized: - return ErrUnauthorized - default: - return fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - tr := tar.NewReader(res.Body) - for { - hdr, err := tr.Next() - if err == io.EOF { - return nil - } else if err != nil { - return err - } - // ignore the default path file - if hdr.Name == "" { - continue - } - - dstPath := filepath.Join(destDir, filepath.Clean(strings.TrimPrefix(hdr.Name, path))) - if err := os.MkdirAll(filepath.Dir(dstPath), 0755); err != nil { - return err - } - var mode os.FileMode = 0644 - if hdr.Mode > 0 { - mode = os.FileMode(hdr.Mode) - } - dst, err := os.OpenFile(dstPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, mode) - if err != nil { - return err - } - n, err := io.Copy(dst, tr) - dst.Close() - if err != nil { - return err - } else if n != hdr.Size { - return fmt.Errorf("expected %s to be %d bytes but got %d", hdr.Name, hdr.Size, n) - } - } -} - -// DownloadFile downloads a single file into the destination directory -// if the manifest entry does not specify a file name - it will fallback -// to the hash of the file as a filename -func (c *Client) DownloadFile(hash, path, dest, credentials string) error { - hasDestinationFilename := false - if stat, err := os.Stat(dest); err == nil { - hasDestinationFilename = !stat.IsDir() - } else { - if os.IsNotExist(err) { - // does not exist - should be created - hasDestinationFilename = true - } else { - return fmt.Errorf("could not stat path: %v", err) - } - } - - manifestList, err := c.List(hash, path, credentials) - if err != nil { - return err - } - - switch len(manifestList.Entries) { - case 0: - return fmt.Errorf("could not find path requested at manifest address. make sure the path you've specified is correct") - case 1: - //continue - default: - return fmt.Errorf("got too many matches for this path") - } - - uri := c.Gateway + "/bzz:/" + hash + "/" + path - req, err := http.NewRequest("GET", uri, nil) - if err != nil { - return err - } - if credentials != "" { - req.SetBasicAuth("", credentials) - } - res, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer res.Body.Close() - switch res.StatusCode { - case http.StatusOK: - case http.StatusUnauthorized: - return ErrUnauthorized - default: - return fmt.Errorf("unexpected HTTP status: expected 200 OK, got %d", res.StatusCode) - } - filename := "" - if hasDestinationFilename { - filename = dest - } else { - // try to assert - re := regexp.MustCompile("[^/]+$") //everything after last slash - - if results := re.FindAllString(path, -1); len(results) > 0 { - filename = results[len(results)-1] - } else { - if entry := manifestList.Entries[0]; entry.Path != "" && entry.Path != "/" { - filename = entry.Path - } else { - // assume hash as name if there's nothing from the command line - filename = hash - } - } - filename = filepath.Join(dest, filename) - } - filePath, err := filepath.Abs(filename) - if err != nil { - return err - } - - if err := os.MkdirAll(filepath.Dir(filePath), 0777); err != nil { - return err - } - - dst, err := os.Create(filename) - if err != nil { - return err - } - defer dst.Close() - - _, err = io.Copy(dst, res.Body) - return err -} - -// UploadManifest uploads the given manifest to swarm -func (c *Client) UploadManifest(m *api.Manifest, toEncrypt bool) (string, error) { - data, err := json.Marshal(m) - if err != nil { - return "", err - } - return c.UploadRaw(bytes.NewReader(data), int64(len(data)), toEncrypt) -} - -// DownloadManifest downloads a swarm manifest -func (c *Client) DownloadManifest(hash string) (*api.Manifest, bool, error) { - res, isEncrypted, err := c.DownloadRaw(hash) - if err != nil { - return nil, isEncrypted, err - } - defer res.Close() - var manifest api.Manifest - if err := json.NewDecoder(res).Decode(&manifest); err != nil { - return nil, isEncrypted, err - } - return &manifest, isEncrypted, nil -} - -// List list files in a swarm manifest which have the given prefix, grouping -// common prefixes using "/" as a delimiter. -// -// For example, if the manifest represents the following directory structure: -// -// file1.txt -// file2.txt -// dir1/file3.txt -// dir1/dir2/file4.txt -// -// Then: -// -// - a prefix of "" would return [dir1/, file1.txt, file2.txt] -// - a prefix of "file" would return [file1.txt, file2.txt] -// - a prefix of "dir1/" would return [dir1/dir2/, dir1/file3.txt] -// -// where entries ending with "/" are common prefixes. -func (c *Client) List(hash, prefix, credentials string) (*api.ManifestList, error) { - req, err := http.NewRequest(http.MethodGet, c.Gateway+"/bzz-list:/"+hash+"/"+prefix, nil) - if err != nil { - return nil, err - } - if credentials != "" { - req.SetBasicAuth("", credentials) - } - res, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - defer res.Body.Close() - switch res.StatusCode { - case http.StatusOK: - case http.StatusUnauthorized: - return nil, ErrUnauthorized - default: - return nil, fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - var list api.ManifestList - if err := json.NewDecoder(res.Body).Decode(&list); err != nil { - return nil, err - } - return &list, nil -} - -// Uploader uploads files to swarm using a provided UploadFn -type Uploader interface { - Upload(UploadFn) error -} - -type UploaderFunc func(UploadFn) error - -func (u UploaderFunc) Upload(upload UploadFn) error { - return u(upload) -} - -// DirectoryUploader uploads all files in a directory, optionally uploading -// a file to the default path -type DirectoryUploader struct { - Dir string -} - -// Upload performs the upload of the directory and default path -func (d *DirectoryUploader) Upload(upload UploadFn) error { - return filepath.Walk(d.Dir, func(path string, f os.FileInfo, err error) error { - if err != nil { - return err - } - if f.IsDir() { - return nil - } - file, err := Open(path) - if err != nil { - return err - } - relPath, err := filepath.Rel(d.Dir, path) - if err != nil { - return err - } - file.Path = filepath.ToSlash(relPath) - return upload(file) - }) -} - -// FileUploader uploads a single file -type FileUploader struct { - File *File -} - -// Upload performs the upload of the file -func (f *FileUploader) Upload(upload UploadFn) error { - return upload(f.File) -} - -// UploadFn is the type of function passed to an Uploader to perform the upload -// of a single file (for example, a directory uploader would call a provided -// UploadFn for each file in the directory tree) -type UploadFn func(file *File) error - -// TarUpload uses the given Uploader to upload files to swarm as a tar stream, -// returning the resulting manifest hash -func (c *Client) TarUpload(hash string, uploader Uploader, defaultPath string, toEncrypt bool) (string, error) { - ctx, sp := spancontext.StartSpan(context.Background(), "api.client.tarupload") - defer sp.Finish() - - var tn time.Time - - reqR, reqW := io.Pipe() - defer reqR.Close() - addr := hash - - // If there is a hash already (a manifest), then that manifest will determine if the upload has - // to be encrypted or not. If there is no manifest then the toEncrypt parameter decides if - // there is encryption or not. - if hash == "" && toEncrypt { - // This is the built-in address for the encrypted upload endpoint - addr = "encrypt" - } - req, err := http.NewRequest("POST", c.Gateway+"/bzz:/"+addr, reqR) - if err != nil { - return "", err - } - - trace := GetClientTrace("swarm api client - upload tar", "api.client.uploadtar", uuid.New()[:8], &tn) - - req = req.WithContext(httptrace.WithClientTrace(ctx, trace)) - transport := http.DefaultTransport - - req.Header.Set("Content-Type", "application/x-tar") - if defaultPath != "" { - q := req.URL.Query() - q.Set("defaultpath", defaultPath) - req.URL.RawQuery = q.Encode() - } - - // use 'Expect: 100-continue' so we don't send the request body if - // the server refuses the request - req.Header.Set("Expect", "100-continue") - - tw := tar.NewWriter(reqW) - - // define an UploadFn which adds files to the tar stream - uploadFn := func(file *File) error { - hdr := &tar.Header{ - Name: file.Path, - Mode: file.Mode, - Size: file.Size, - ModTime: file.ModTime, - Xattrs: map[string]string{ - "user.swarm.content-type": file.ContentType, - }, - } - if err := tw.WriteHeader(hdr); err != nil { - return err - } - _, err = io.Copy(tw, file) - return err - } - - // run the upload in a goroutine so we can send the request headers and - // wait for a '100 Continue' response before sending the tar stream - go func() { - err := uploader.Upload(uploadFn) - if err == nil { - err = tw.Close() - } - reqW.CloseWithError(err) - }() - tn = time.Now() - res, err := transport.RoundTrip(req) - if err != nil { - return "", err - } - defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return "", fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - data, err := ioutil.ReadAll(res.Body) - if err != nil { - return "", err - } - return string(data), nil -} - -// MultipartUpload uses the given Uploader to upload files to swarm as a -// multipart form, returning the resulting manifest hash -func (c *Client) MultipartUpload(hash string, uploader Uploader) (string, error) { - reqR, reqW := io.Pipe() - defer reqR.Close() - req, err := http.NewRequest("POST", c.Gateway+"/bzz:/"+hash, reqR) - if err != nil { - return "", err - } - - // use 'Expect: 100-continue' so we don't send the request body if - // the server refuses the request - req.Header.Set("Expect", "100-continue") - - mw := multipart.NewWriter(reqW) - req.Header.Set("Content-Type", fmt.Sprintf("multipart/form-data; boundary=%q", mw.Boundary())) - - // define an UploadFn which adds files to the multipart form - uploadFn := func(file *File) error { - hdr := make(textproto.MIMEHeader) - hdr.Set("Content-Disposition", fmt.Sprintf("form-data; name=%q", file.Path)) - hdr.Set("Content-Type", file.ContentType) - hdr.Set("Content-Length", strconv.FormatInt(file.Size, 10)) - w, err := mw.CreatePart(hdr) - if err != nil { - return err - } - _, err = io.Copy(w, file) - return err - } - - // run the upload in a goroutine so we can send the request headers and - // wait for a '100 Continue' response before sending the multipart form - go func() { - err := uploader.Upload(uploadFn) - if err == nil { - err = mw.Close() - } - reqW.CloseWithError(err) - }() - - res, err := http.DefaultClient.Do(req) - if err != nil { - return "", err - } - defer res.Body.Close() - if res.StatusCode != http.StatusOK { - return "", fmt.Errorf("unexpected HTTP status: %s", res.Status) - } - data, err := ioutil.ReadAll(res.Body) - if err != nil { - return "", err - } - return string(data), nil -} - -// ErrNoFeedUpdatesFound is returned when Swarm cannot find updates of the given feed -var ErrNoFeedUpdatesFound = errors.New("No updates found for this feed") - -// CreateFeedWithManifest creates a feed manifest, initializing it with the provided -// data -// Returns the resulting feed manifest address that you can use to include in an ENS Resolver (setContent) -// or reference future updates (Client.UpdateFeed) -func (c *Client) CreateFeedWithManifest(request *feed.Request) (string, error) { - responseStream, err := c.updateFeed(request, true) - if err != nil { - return "", err - } - defer responseStream.Close() - - body, err := ioutil.ReadAll(responseStream) - if err != nil { - return "", err - } - - var manifestAddress string - if err = json.Unmarshal(body, &manifestAddress); err != nil { - return "", err - } - return manifestAddress, nil -} - -// UpdateFeed allows you to set a new version of your content -func (c *Client) UpdateFeed(request *feed.Request) error { - _, err := c.updateFeed(request, false) - return err -} - -func (c *Client) updateFeed(request *feed.Request, createManifest bool) (io.ReadCloser, error) { - URL, err := url.Parse(c.Gateway) - if err != nil { - return nil, err - } - URL.Path = "/bzz-feed:/" - values := URL.Query() - body := request.AppendValues(values) - if createManifest { - values.Set("manifest", "1") - } - URL.RawQuery = values.Encode() - - req, err := http.NewRequest("POST", URL.String(), bytes.NewBuffer(body)) - if err != nil { - return nil, err - } - - res, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - - return res.Body, nil -} - -// QueryFeed returns a byte stream with the raw content of the feed update -// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver -// points to that address -func (c *Client) QueryFeed(query *feed.Query, manifestAddressOrDomain string) (io.ReadCloser, error) { - return c.queryFeed(query, manifestAddressOrDomain, false) -} - -// queryFeed returns a byte stream with the raw content of the feed update -// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver -// points to that address -// meta set to true will instruct the node return feed metainformation instead -func (c *Client) queryFeed(query *feed.Query, manifestAddressOrDomain string, meta bool) (io.ReadCloser, error) { - URL, err := url.Parse(c.Gateway) - if err != nil { - return nil, err - } - URL.Path = "/bzz-feed:/" + manifestAddressOrDomain - values := URL.Query() - if query != nil { - query.AppendValues(values) //adds query parameters - } - if meta { - values.Set("meta", "1") - } - URL.RawQuery = values.Encode() - res, err := http.Get(URL.String()) - if err != nil { - return nil, err - } - - if res.StatusCode != http.StatusOK { - if res.StatusCode == http.StatusNotFound { - return nil, ErrNoFeedUpdatesFound - } - errorMessageBytes, err := ioutil.ReadAll(res.Body) - var errorMessage string - if err != nil { - errorMessage = "cannot retrieve error message: " + err.Error() - } else { - errorMessage = string(errorMessageBytes) - } - return nil, fmt.Errorf("Error retrieving feed updates: %s", errorMessage) - } - - return res.Body, nil -} - -// GetFeedRequest returns a structure that describes the referenced feed status -// manifestAddressOrDomain is the address you obtained in CreateFeedWithManifest or an ENS domain whose Resolver -// points to that address -func (c *Client) GetFeedRequest(query *feed.Query, manifestAddressOrDomain string) (*feed.Request, error) { - - responseStream, err := c.queryFeed(query, manifestAddressOrDomain, true) - if err != nil { - return nil, err - } - defer responseStream.Close() - - body, err := ioutil.ReadAll(responseStream) - if err != nil { - return nil, err - } - - var metadata feed.Request - if err := metadata.UnmarshalJSON(body); err != nil { - return nil, err - } - return &metadata, nil -} - -func GetClientTrace(traceMsg, metricPrefix, ruid string, tn *time.Time) *httptrace.ClientTrace { - trace := &httptrace.ClientTrace{ - GetConn: func(_ string) { - log.Trace(traceMsg+" - http get", "event", "GetConn", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".getconn", nil).Update(time.Since(*tn)) - }, - GotConn: func(_ httptrace.GotConnInfo) { - log.Trace(traceMsg+" - http get", "event", "GotConn", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".gotconn", nil).Update(time.Since(*tn)) - }, - PutIdleConn: func(err error) { - log.Trace(traceMsg+" - http get", "event", "PutIdleConn", "ruid", ruid, "err", err) - metrics.GetOrRegisterResettingTimer(metricPrefix+".putidle", nil).Update(time.Since(*tn)) - }, - GotFirstResponseByte: func() { - log.Trace(traceMsg+" - http get", "event", "GotFirstResponseByte", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".firstbyte", nil).Update(time.Since(*tn)) - }, - Got100Continue: func() { - log.Trace(traceMsg, "event", "Got100Continue", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".got100continue", nil).Update(time.Since(*tn)) - }, - DNSStart: func(_ httptrace.DNSStartInfo) { - log.Trace(traceMsg, "event", "DNSStart", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".dnsstart", nil).Update(time.Since(*tn)) - }, - DNSDone: func(_ httptrace.DNSDoneInfo) { - log.Trace(traceMsg, "event", "DNSDone", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".dnsdone", nil).Update(time.Since(*tn)) - }, - ConnectStart: func(network, addr string) { - log.Trace(traceMsg, "event", "ConnectStart", "ruid", ruid, "network", network, "addr", addr) - metrics.GetOrRegisterResettingTimer(metricPrefix+".connectstart", nil).Update(time.Since(*tn)) - }, - ConnectDone: func(network, addr string, err error) { - log.Trace(traceMsg, "event", "ConnectDone", "ruid", ruid, "network", network, "addr", addr, "err", err) - metrics.GetOrRegisterResettingTimer(metricPrefix+".connectdone", nil).Update(time.Since(*tn)) - }, - WroteHeaders: func() { - log.Trace(traceMsg, "event", "WroteHeaders(request)", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".wroteheaders", nil).Update(time.Since(*tn)) - }, - Wait100Continue: func() { - log.Trace(traceMsg, "event", "Wait100Continue", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".wait100continue", nil).Update(time.Since(*tn)) - }, - WroteRequest: func(_ httptrace.WroteRequestInfo) { - log.Trace(traceMsg, "event", "WroteRequest", "ruid", ruid) - metrics.GetOrRegisterResettingTimer(metricPrefix+".wroterequest", nil).Update(time.Since(*tn)) - }, - } - return trace -} diff --git a/swarm/api/client/client_test.go b/swarm/api/client/client_test.go deleted file mode 100644 index 39f6e4797db4..000000000000 --- a/swarm/api/client/client_test.go +++ /dev/null @@ -1,589 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "bytes" - "io/ioutil" - "os" - "path/filepath" - "reflect" - "sort" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/swarm/api" - swarmhttp "github.com/ethereum/go-ethereum/swarm/api/http" - "github.com/ethereum/go-ethereum/swarm/storage/feed" -) - -func serverFunc(api *api.API) swarmhttp.TestServer { - return swarmhttp.NewServer(api, "") -} - -// TestClientUploadDownloadRaw test uploading and downloading raw data to swarm -func TestClientUploadDownloadRaw(t *testing.T) { - testClientUploadDownloadRaw(false, t) -} -func TestClientUploadDownloadRawEncrypted(t *testing.T) { - testClientUploadDownloadRaw(true, t) -} - -func testClientUploadDownloadRaw(toEncrypt bool, t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - client := NewClient(srv.URL) - - // upload some raw data - data := []byte("foo123") - hash, err := client.UploadRaw(bytes.NewReader(data), int64(len(data)), toEncrypt) - if err != nil { - t.Fatal(err) - } - - // check we can download the same data - res, isEncrypted, err := client.DownloadRaw(hash) - if err != nil { - t.Fatal(err) - } - if isEncrypted != toEncrypt { - t.Fatalf("Expected encyption status %v got %v", toEncrypt, isEncrypted) - } - defer res.Close() - gotData, err := ioutil.ReadAll(res) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(gotData, data) { - t.Fatalf("expected downloaded data to be %q, got %q", data, gotData) - } -} - -// TestClientUploadDownloadFiles test uploading and downloading files to swarm -// manifests -func TestClientUploadDownloadFiles(t *testing.T) { - testClientUploadDownloadFiles(false, t) -} - -func TestClientUploadDownloadFilesEncrypted(t *testing.T) { - testClientUploadDownloadFiles(true, t) -} - -func testClientUploadDownloadFiles(toEncrypt bool, t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - client := NewClient(srv.URL) - upload := func(manifest, path string, data []byte) string { - file := &File{ - ReadCloser: ioutil.NopCloser(bytes.NewReader(data)), - ManifestEntry: api.ManifestEntry{ - Path: path, - ContentType: "text/plain", - Size: int64(len(data)), - }, - } - hash, err := client.Upload(file, manifest, toEncrypt) - if err != nil { - t.Fatal(err) - } - return hash - } - checkDownload := func(manifest, path string, expected []byte) { - file, err := client.Download(manifest, path) - if err != nil { - t.Fatal(err) - } - defer file.Close() - if file.Size != int64(len(expected)) { - t.Fatalf("expected downloaded file to be %d bytes, got %d", len(expected), file.Size) - } - if file.ContentType != "text/plain" { - t.Fatalf("expected downloaded file to have type %q, got %q", "text/plain", file.ContentType) - } - data, err := ioutil.ReadAll(file) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(data, expected) { - t.Fatalf("expected downloaded data to be %q, got %q", expected, data) - } - } - - // upload a file to the root of a manifest - rootData := []byte("some-data") - rootHash := upload("", "", rootData) - - // check we can download the root file - checkDownload(rootHash, "", rootData) - - // upload another file to the same manifest - otherData := []byte("some-other-data") - newHash := upload(rootHash, "some/other/path", otherData) - - // check we can download both files from the new manifest - checkDownload(newHash, "", rootData) - checkDownload(newHash, "some/other/path", otherData) - - // replace the root file with different data - newHash = upload(newHash, "", otherData) - - // check both files have the other data - checkDownload(newHash, "", otherData) - checkDownload(newHash, "some/other/path", otherData) -} - -var testDirFiles = []string{ - "file1.txt", - "file2.txt", - "dir1/file3.txt", - "dir1/file4.txt", - "dir2/file5.txt", - "dir2/dir3/file6.txt", - "dir2/dir4/file7.txt", - "dir2/dir4/file8.txt", -} - -func newTestDirectory(t *testing.T) string { - dir, err := ioutil.TempDir("", "swarm-client-test") - if err != nil { - t.Fatal(err) - } - - for _, file := range testDirFiles { - path := filepath.Join(dir, file) - if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { - os.RemoveAll(dir) - t.Fatalf("error creating dir for %s: %s", path, err) - } - if err := ioutil.WriteFile(path, []byte(file), 0644); err != nil { - os.RemoveAll(dir) - t.Fatalf("error writing file %s: %s", path, err) - } - } - - return dir -} - -// TestClientUploadDownloadDirectory tests uploading and downloading a -// directory of files to a swarm manifest -func TestClientUploadDownloadDirectory(t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - dir := newTestDirectory(t) - defer os.RemoveAll(dir) - - // upload the directory - client := NewClient(srv.URL) - defaultPath := testDirFiles[0] - hash, err := client.UploadDirectory(dir, defaultPath, "", false) - if err != nil { - t.Fatalf("error uploading directory: %s", err) - } - - // check we can download the individual files - checkDownloadFile := func(path string, expected []byte) { - file, err := client.Download(hash, path) - if err != nil { - t.Fatal(err) - } - defer file.Close() - data, err := ioutil.ReadAll(file) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(data, expected) { - t.Fatalf("expected data to be %q, got %q", expected, data) - } - } - for _, file := range testDirFiles { - checkDownloadFile(file, []byte(file)) - } - - // check we can download the default path - checkDownloadFile("", []byte(testDirFiles[0])) - - // check we can download the directory - tmp, err := ioutil.TempDir("", "swarm-client-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(tmp) - if err := client.DownloadDirectory(hash, "", tmp, ""); err != nil { - t.Fatal(err) - } - for _, file := range testDirFiles { - data, err := ioutil.ReadFile(filepath.Join(tmp, file)) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(data, []byte(file)) { - t.Fatalf("expected data to be %q, got %q", file, data) - } - } -} - -// TestClientFileList tests listing files in a swarm manifest -func TestClientFileList(t *testing.T) { - testClientFileList(false, t) -} - -func TestClientFileListEncrypted(t *testing.T) { - testClientFileList(true, t) -} - -func testClientFileList(toEncrypt bool, t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - dir := newTestDirectory(t) - defer os.RemoveAll(dir) - - client := NewClient(srv.URL) - hash, err := client.UploadDirectory(dir, "", "", toEncrypt) - if err != nil { - t.Fatalf("error uploading directory: %s", err) - } - - ls := func(prefix string) []string { - list, err := client.List(hash, prefix, "") - if err != nil { - t.Fatal(err) - } - paths := make([]string, 0, len(list.CommonPrefixes)+len(list.Entries)) - paths = append(paths, list.CommonPrefixes...) - for _, entry := range list.Entries { - paths = append(paths, entry.Path) - } - sort.Strings(paths) - return paths - } - - tests := map[string][]string{ - "": {"dir1/", "dir2/", "file1.txt", "file2.txt"}, - "file": {"file1.txt", "file2.txt"}, - "file1": {"file1.txt"}, - "file2.txt": {"file2.txt"}, - "file12": {}, - "dir": {"dir1/", "dir2/"}, - "dir1": {"dir1/"}, - "dir1/": {"dir1/file3.txt", "dir1/file4.txt"}, - "dir1/file": {"dir1/file3.txt", "dir1/file4.txt"}, - "dir1/file3.txt": {"dir1/file3.txt"}, - "dir1/file34": {}, - "dir2/": {"dir2/dir3/", "dir2/dir4/", "dir2/file5.txt"}, - "dir2/file": {"dir2/file5.txt"}, - "dir2/dir": {"dir2/dir3/", "dir2/dir4/"}, - "dir2/dir3/": {"dir2/dir3/file6.txt"}, - "dir2/dir4/": {"dir2/dir4/file7.txt", "dir2/dir4/file8.txt"}, - "dir2/dir4/file": {"dir2/dir4/file7.txt", "dir2/dir4/file8.txt"}, - "dir2/dir4/file7.txt": {"dir2/dir4/file7.txt"}, - "dir2/dir4/file78": {}, - } - for prefix, expected := range tests { - actual := ls(prefix) - if !reflect.DeepEqual(actual, expected) { - t.Fatalf("expected prefix %q to return %v, got %v", prefix, expected, actual) - } - } -} - -// TestClientMultipartUpload tests uploading files to swarm using a multipart -// upload -func TestClientMultipartUpload(t *testing.T) { - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - // define an uploader which uploads testDirFiles with some data - data := []byte("some-data") - uploader := UploaderFunc(func(upload UploadFn) error { - for _, name := range testDirFiles { - file := &File{ - ReadCloser: ioutil.NopCloser(bytes.NewReader(data)), - ManifestEntry: api.ManifestEntry{ - Path: name, - ContentType: "text/plain", - Size: int64(len(data)), - }, - } - if err := upload(file); err != nil { - return err - } - } - return nil - }) - - // upload the files as a multipart upload - client := NewClient(srv.URL) - hash, err := client.MultipartUpload("", uploader) - if err != nil { - t.Fatal(err) - } - - // check we can download the individual files - checkDownloadFile := func(path string) { - file, err := client.Download(hash, path) - if err != nil { - t.Fatal(err) - } - defer file.Close() - gotData, err := ioutil.ReadAll(file) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(gotData, data) { - t.Fatalf("expected data to be %q, got %q", data, gotData) - } - } - for _, file := range testDirFiles { - checkDownloadFile(file) - } -} - -func newTestSigner() (*feed.GenericSigner, error) { - privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef") - if err != nil { - return nil, err - } - return feed.NewGenericSigner(privKey), nil -} - -// Test the transparent resolving of feed updates with bzz:// scheme -// -// First upload data to bzz:, and store the Swarm hash to the resulting manifest in a feed update. -// This effectively uses a feed to store a pointer to content rather than the content itself -// Retrieving the update with the Swarm hash should return the manifest pointing directly to the data -// and raw retrieve of that hash should return the data -func TestClientBzzWithFeed(t *testing.T) { - - signer, _ := newTestSigner() - - // Initialize a Swarm test server - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - swarmClient := NewClient(srv.URL) - defer srv.Close() - - // put together some data for our test: - dataBytes := []byte(` - // - // Create some data our manifest will point to. Data that could be very big and wouldn't fit in a feed update. - // So what we are going to do is upload it to Swarm bzz:// and obtain a **manifest hash** pointing to it: - // - // MANIFEST HASH --> DATA - // - // Then, we store that **manifest hash** into a Swarm Feed update. Once we have done this, - // we can use the **feed manifest hash** in bzz:// instead, this way: bzz://feed-manifest-hash. - // - // FEED MANIFEST HASH --> MANIFEST HASH --> DATA - // - // Given that we can update the feed at any time with a new **manifest hash** but the **feed manifest hash** - // stays constant, we have effectively created a fixed address to changing content. (Applause) - // - // FEED MANIFEST HASH (the same) --> MANIFEST HASH(2) --> DATA(2) - // - `) - - // Create a virtual File out of memory containing the above data - f := &File{ - ReadCloser: ioutil.NopCloser(bytes.NewReader(dataBytes)), - ManifestEntry: api.ManifestEntry{ - ContentType: "text/plain", - Mode: 0660, - Size: int64(len(dataBytes)), - }, - } - - // upload data to bzz:// and retrieve the content-addressed manifest hash, hex-encoded. - manifestAddressHex, err := swarmClient.Upload(f, "", false) - if err != nil { - t.Fatalf("Error creating manifest: %s", err) - } - - // convert the hex-encoded manifest hash to a 32-byte slice - manifestAddress := common.FromHex(manifestAddressHex) - - if len(manifestAddress) != storage.AddressLength { - t.Fatalf("Something went wrong. Got a hash of an unexpected length. Expected %d bytes. Got %d", storage.AddressLength, len(manifestAddress)) - } - - // Now create a **feed manifest**. For that, we need a topic: - topic, _ := feed.NewTopic("interesting topic indeed", nil) - - // Build a feed request to update data - request := feed.NewFirstRequest(topic) - - // Put the 32-byte address of the manifest into the feed update - request.SetData(manifestAddress) - - // Sign the update - if err := request.Sign(signer); err != nil { - t.Fatalf("Error signing update: %s", err) - } - - // Publish the update and at the same time request a **feed manifest** to be created - feedManifestAddressHex, err := swarmClient.CreateFeedWithManifest(request) - if err != nil { - t.Fatalf("Error creating feed manifest: %s", err) - } - - // Check we have received the exact **feed manifest** to be expected - // given the topic and user signing the updates: - correctFeedManifestAddrHex := "747c402e5b9dc715a25a4393147512167bab018a007fad7cdcd9adc7fce1ced2" - if feedManifestAddressHex != correctFeedManifestAddrHex { - t.Fatalf("Response feed manifest mismatch, expected '%s', got '%s'", correctFeedManifestAddrHex, feedManifestAddressHex) - } - - // Check we get a not found error when trying to get feed updates with a made-up manifest - _, err = swarmClient.QueryFeed(nil, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb") - if err != ErrNoFeedUpdatesFound { - t.Fatalf("Expected to receive ErrNoFeedUpdatesFound error. Got: %s", err) - } - - // If we query the feed directly we should get **manifest hash** back: - reader, err := swarmClient.QueryFeed(nil, correctFeedManifestAddrHex) - if err != nil { - t.Fatalf("Error retrieving feed updates: %s", err) - } - defer reader.Close() - gotData, err := ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - - //Check that indeed the **manifest hash** is retrieved - if !bytes.Equal(manifestAddress, gotData) { - t.Fatalf("Expected: %v, got %v", manifestAddress, gotData) - } - - // Now the final test we were looking for: Use bzz:// and that should resolve all manifests - // and return the original data directly: - f, err = swarmClient.Download(feedManifestAddressHex, "") - if err != nil { - t.Fatal(err) - } - gotData, err = ioutil.ReadAll(f) - if err != nil { - t.Fatal(err) - } - - // Check that we get back the original data: - if !bytes.Equal(dataBytes, gotData) { - t.Fatalf("Expected: %v, got %v", manifestAddress, gotData) - } -} - -// TestClientCreateUpdateFeed will check that feeds can be created and updated via the HTTP client. -func TestClientCreateUpdateFeed(t *testing.T) { - - signer, _ := newTestSigner() - - srv := swarmhttp.NewTestSwarmServer(t, serverFunc, nil) - client := NewClient(srv.URL) - defer srv.Close() - - // set raw data for the feed update - databytes := []byte("En un lugar de La Mancha, de cuyo nombre no quiero acordarme...") - - // our feed topic name - topic, _ := feed.NewTopic("El Quijote", nil) - createRequest := feed.NewFirstRequest(topic) - - createRequest.SetData(databytes) - if err := createRequest.Sign(signer); err != nil { - t.Fatalf("Error signing update: %s", err) - } - - feedManifestHash, err := client.CreateFeedWithManifest(createRequest) - if err != nil { - t.Fatal(err) - } - - correctManifestAddrHex := "0e9b645ebc3da167b1d56399adc3276f7a08229301b72a03336be0e7d4b71882" - if feedManifestHash != correctManifestAddrHex { - t.Fatalf("Response feed manifest mismatch, expected '%s', got '%s'", correctManifestAddrHex, feedManifestHash) - } - - reader, err := client.QueryFeed(nil, correctManifestAddrHex) - if err != nil { - t.Fatalf("Error retrieving feed updates: %s", err) - } - defer reader.Close() - gotData, err := ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(databytes, gotData) { - t.Fatalf("Expected: %v, got %v", databytes, gotData) - } - - // define different data - databytes = []byte("... no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero ...") - - updateRequest, err := client.GetFeedRequest(nil, correctManifestAddrHex) - if err != nil { - t.Fatalf("Error retrieving update request template: %s", err) - } - - updateRequest.SetData(databytes) - if err := updateRequest.Sign(signer); err != nil { - t.Fatalf("Error signing update: %s", err) - } - - if err = client.UpdateFeed(updateRequest); err != nil { - t.Fatalf("Error updating feed: %s", err) - } - - reader, err = client.QueryFeed(nil, correctManifestAddrHex) - if err != nil { - t.Fatalf("Error retrieving feed updates: %s", err) - } - defer reader.Close() - gotData, err = ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(databytes, gotData) { - t.Fatalf("Expected: %v, got %v", databytes, gotData) - } - - // now try retrieving feed updates without a manifest - - fd := &feed.Feed{ - Topic: topic, - User: signer.Address(), - } - - lookupParams := feed.NewQueryLatest(fd, lookup.NoClue) - reader, err = client.QueryFeed(lookupParams, "") - if err != nil { - t.Fatalf("Error retrieving feed updates: %s", err) - } - defer reader.Close() - gotData, err = ioutil.ReadAll(reader) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(databytes, gotData) { - t.Fatalf("Expected: %v, got %v", databytes, gotData) - } -} diff --git a/swarm/api/config.go b/swarm/api/config.go deleted file mode 100644 index b8de16f5f01f..000000000000 --- a/swarm/api/config.go +++ /dev/null @@ -1,143 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "crypto/ecdsa" - "fmt" - "os" - "path/filepath" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/ens" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pss" - "github.com/ethereum/go-ethereum/swarm/services/swap" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - DefaultHTTPListenAddr = "127.0.0.1" - DefaultHTTPPort = "8500" -) - -// separate bzz directories -// allow several bzz nodes running in parallel -type Config struct { - // serialised/persisted fields - *storage.FileStoreParams - *storage.LocalStoreParams - *network.HiveParams - Swap *swap.LocalProfile - Pss *pss.PssParams - //*network.SyncParams - Contract common.Address - EnsRoot common.Address - EnsAPIs []string - Path string - ListenAddr string - Port string - PublicKey string - BzzKey string - NodeID string - NetworkID uint64 - SwapEnabled bool - SyncEnabled bool - SyncingSkipCheck bool - DeliverySkipCheck bool - MaxStreamPeerServers int - LightNodeEnabled bool - BootnodeMode bool - SyncUpdateDelay time.Duration - SwapAPI string - Cors string - BzzAccount string - GlobalStoreAPI string - privateKey *ecdsa.PrivateKey -} - -//create a default config with all parameters to set to defaults -func NewConfig() (c *Config) { - - c = &Config{ - LocalStoreParams: storage.NewDefaultLocalStoreParams(), - FileStoreParams: storage.NewFileStoreParams(), - HiveParams: network.NewHiveParams(), - //SyncParams: network.NewDefaultSyncParams(), - Swap: swap.NewDefaultSwapParams(), - Pss: pss.NewPssParams(), - ListenAddr: DefaultHTTPListenAddr, - Port: DefaultHTTPPort, - Path: node.DefaultDataDir(), - EnsAPIs: nil, - EnsRoot: ens.TestNetAddress, - NetworkID: network.DefaultNetworkID, - SwapEnabled: false, - SyncEnabled: true, - SyncingSkipCheck: false, - MaxStreamPeerServers: 10000, - DeliverySkipCheck: true, - SyncUpdateDelay: 15 * time.Second, - SwapAPI: "", - } - - return -} - -//some config params need to be initialized after the complete -//config building phase is completed (e.g. due to overriding flags) -func (c *Config) Init(prvKey *ecdsa.PrivateKey) { - - address := crypto.PubkeyToAddress(prvKey.PublicKey) - c.Path = filepath.Join(c.Path, "bzz-"+common.Bytes2Hex(address.Bytes())) - err := os.MkdirAll(c.Path, os.ModePerm) - if err != nil { - log.Error(fmt.Sprintf("Error creating root swarm data directory: %v", err)) - return - } - - pubkey := crypto.FromECDSAPub(&prvKey.PublicKey) - pubkeyhex := common.ToHex(pubkey) - keyhex := crypto.Keccak256Hash(pubkey).Hex() - - c.PublicKey = pubkeyhex - c.BzzKey = keyhex - c.NodeID = enode.PubkeyToIDV4(&prvKey.PublicKey).String() - - if c.SwapEnabled { - c.Swap.Init(c.Contract, prvKey) - } - - c.privateKey = prvKey - c.LocalStoreParams.Init(c.Path) - c.LocalStoreParams.BaseKey = common.FromHex(keyhex) - - c.Pss = c.Pss.WithPrivateKey(c.privateKey) -} - -func (c *Config) ShiftPrivateKey() (privKey *ecdsa.PrivateKey) { - if c.privateKey != nil { - privKey = c.privateKey - c.privateKey = nil - } - return privKey -} diff --git a/swarm/api/config_test.go b/swarm/api/config_test.go deleted file mode 100644 index bd7e1d870500..000000000000 --- a/swarm/api/config_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "reflect" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" -) - -func TestConfig(t *testing.T) { - - var hexprvkey = "65138b2aa745041b372153550584587da326ab440576b2a1191dd95cee30039c" - - prvkey, err := crypto.HexToECDSA(hexprvkey) - if err != nil { - t.Fatalf("failed to load private key: %v", err) - } - - one := NewConfig() - two := NewConfig() - - one.LocalStoreParams = two.LocalStoreParams - if equal := reflect.DeepEqual(one, two); !equal { - t.Fatal("Two default configs are not equal") - } - - one.Init(prvkey) - - //the init function should set the following fields - if one.BzzKey == "" { - t.Fatal("Expected BzzKey to be set") - } - if one.PublicKey == "" { - t.Fatal("Expected PublicKey to be set") - } - if one.Swap.PayProfile.Beneficiary == (common.Address{}) && one.SwapEnabled { - t.Fatal("Failed to correctly initialize SwapParams") - } - if one.ChunkDbPath == one.Path { - t.Fatal("Failed to correctly initialize StoreParams") - } -} diff --git a/swarm/api/encrypt.go b/swarm/api/encrypt.go deleted file mode 100644 index 0d516b3d574a..000000000000 --- a/swarm/api/encrypt.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "encoding/binary" - "errors" - - "github.com/ethereum/go-ethereum/swarm/storage/encryption" - "golang.org/x/crypto/sha3" -) - -type RefEncryption struct { - refSize int - span []byte -} - -func NewRefEncryption(refSize int) *RefEncryption { - span := make([]byte, 8) - binary.LittleEndian.PutUint64(span, uint64(refSize)) - return &RefEncryption{ - refSize: refSize, - span: span, - } -} - -func (re *RefEncryption) Encrypt(ref []byte, key []byte) ([]byte, error) { - spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewLegacyKeccak256) - encryptedSpan, err := spanEncryption.Encrypt(re.span) - if err != nil { - return nil, err - } - dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewLegacyKeccak256) - encryptedData, err := dataEncryption.Encrypt(ref) - if err != nil { - return nil, err - } - encryptedRef := make([]byte, len(ref)+8) - copy(encryptedRef[:8], encryptedSpan) - copy(encryptedRef[8:], encryptedData) - - return encryptedRef, nil -} - -func (re *RefEncryption) Decrypt(ref []byte, key []byte) ([]byte, error) { - spanEncryption := encryption.New(key, 0, uint32(re.refSize/32), sha3.NewLegacyKeccak256) - decryptedSpan, err := spanEncryption.Decrypt(ref[:8]) - if err != nil { - return nil, err - } - - size := binary.LittleEndian.Uint64(decryptedSpan) - if size != uint64(len(ref)-8) { - return nil, errors.New("invalid span in encrypted reference") - } - - dataEncryption := encryption.New(key, re.refSize, 0, sha3.NewLegacyKeccak256) - decryptedRef, err := dataEncryption.Decrypt(ref[8:]) - if err != nil { - return nil, err - } - - return decryptedRef, nil -} diff --git a/swarm/api/filesystem.go b/swarm/api/filesystem.go deleted file mode 100644 index 266ef71bec38..000000000000 --- a/swarm/api/filesystem.go +++ /dev/null @@ -1,292 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bufio" - "context" - "fmt" - "io" - "os" - "path" - "path/filepath" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const maxParallelFiles = 5 - -type FileSystem struct { - api *API -} - -func NewFileSystem(api *API) *FileSystem { - return &FileSystem{api} -} - -// Upload replicates a local directory as a manifest file and uploads it -// using FileStore store -// This function waits the chunks to be stored. -// TODO: localpath should point to a manifest -// -// DEPRECATED: Use the HTTP API instead -func (fs *FileSystem) Upload(lpath, index string, toEncrypt bool) (string, error) { - var list []*manifestTrieEntry - localpath, err := filepath.Abs(filepath.Clean(lpath)) - if err != nil { - return "", err - } - - f, err := os.Open(localpath) - if err != nil { - return "", err - } - stat, err := f.Stat() - if err != nil { - return "", err - } - - var start int - if stat.IsDir() { - start = len(localpath) - log.Debug(fmt.Sprintf("uploading '%s'", localpath)) - err = filepath.Walk(localpath, func(path string, info os.FileInfo, err error) error { - if (err == nil) && !info.IsDir() { - if len(path) <= start { - return fmt.Errorf("Path is too short") - } - if path[:start] != localpath { - return fmt.Errorf("Path prefix of '%s' does not match localpath '%s'", path, localpath) - } - entry := newManifestTrieEntry(&ManifestEntry{Path: filepath.ToSlash(path)}, nil) - list = append(list, entry) - } - return err - }) - if err != nil { - return "", err - } - } else { - dir := filepath.Dir(localpath) - start = len(dir) - if len(localpath) <= start { - return "", fmt.Errorf("Path is too short") - } - if localpath[:start] != dir { - return "", fmt.Errorf("Path prefix of '%s' does not match dir '%s'", localpath, dir) - } - entry := newManifestTrieEntry(&ManifestEntry{Path: filepath.ToSlash(localpath)}, nil) - list = append(list, entry) - } - - errors := make([]error, len(list)) - sem := make(chan bool, maxParallelFiles) - defer close(sem) - - for i, entry := range list { - sem <- true - go func(i int, entry *manifestTrieEntry) { - defer func() { <-sem }() - - f, err := os.Open(entry.Path) - if err != nil { - errors[i] = err - return - } - defer f.Close() - - stat, err := f.Stat() - if err != nil { - errors[i] = err - return - } - - var hash storage.Address - var wait func(context.Context) error - ctx := context.TODO() - hash, wait, err = fs.api.fileStore.Store(ctx, f, stat.Size(), toEncrypt) - if err != nil { - errors[i] = err - return - } - if hash != nil { - list[i].Hash = hash.Hex() - } - if err := wait(ctx); err != nil { - errors[i] = err - return - } - - list[i].ContentType, err = DetectContentType(f.Name(), f) - if err != nil { - errors[i] = err - return - } - - }(i, entry) - } - for i := 0; i < cap(sem); i++ { - sem <- true - } - - trie := &manifestTrie{ - fileStore: fs.api.fileStore, - } - quitC := make(chan bool) - for i, entry := range list { - if errors[i] != nil { - return "", errors[i] - } - entry.Path = RegularSlashes(entry.Path[start:]) - if entry.Path == index { - ientry := newManifestTrieEntry(&ManifestEntry{ - ContentType: entry.ContentType, - }, nil) - ientry.Hash = entry.Hash - trie.addEntry(ientry, quitC) - } - trie.addEntry(entry, quitC) - } - - err2 := trie.recalcAndStore() - var hs string - if err2 == nil { - hs = trie.ref.Hex() - } - return hs, err2 -} - -// Download replicates the manifest basePath structure on the local filesystem -// under localpath -// -// DEPRECATED: Use the HTTP API instead -func (fs *FileSystem) Download(bzzpath, localpath string) error { - lpath, err := filepath.Abs(filepath.Clean(localpath)) - if err != nil { - return err - } - err = os.MkdirAll(lpath, os.ModePerm) - if err != nil { - return err - } - - //resolving host and port - uri, err := Parse(path.Join("bzz:/", bzzpath)) - if err != nil { - return err - } - addr, err := fs.api.Resolve(context.TODO(), uri.Addr) - if err != nil { - return err - } - path := uri.Path - - if len(path) > 0 { - path += "/" - } - - quitC := make(chan bool) - trie, err := loadManifest(context.TODO(), fs.api.fileStore, addr, quitC, NOOPDecrypt) - if err != nil { - log.Warn(fmt.Sprintf("fs.Download: loadManifestTrie error: %v", err)) - return err - } - - type downloadListEntry struct { - addr storage.Address - path string - } - - var list []*downloadListEntry - var mde error - - prevPath := lpath - err = trie.listWithPrefix(path, quitC, func(entry *manifestTrieEntry, suffix string) { - log.Trace(fmt.Sprintf("fs.Download: %#v", entry)) - - addr = common.Hex2Bytes(entry.Hash) - path := lpath + "/" + suffix - dir := filepath.Dir(path) - if dir != prevPath { - mde = os.MkdirAll(dir, os.ModePerm) - prevPath = dir - } - if (mde == nil) && (path != dir+"/") { - list = append(list, &downloadListEntry{addr: addr, path: path}) - } - }) - if err != nil { - return err - } - - wg := sync.WaitGroup{} - errC := make(chan error) - done := make(chan bool, maxParallelFiles) - for i, entry := range list { - select { - case done <- true: - wg.Add(1) - case <-quitC: - return fmt.Errorf("aborted") - } - go func(i int, entry *downloadListEntry) { - defer wg.Done() - err := retrieveToFile(quitC, fs.api.fileStore, entry.addr, entry.path) - if err != nil { - select { - case errC <- err: - case <-quitC: - } - return - } - <-done - }(i, entry) - } - go func() { - wg.Wait() - close(errC) - }() - select { - case err = <-errC: - return err - case <-quitC: - return fmt.Errorf("aborted") - } -} - -func retrieveToFile(quitC chan bool, fileStore *storage.FileStore, addr storage.Address, path string) error { - f, err := os.Create(path) // TODO: basePath separators - if err != nil { - return err - } - reader, _ := fileStore.Retrieve(context.TODO(), addr) - writer := bufio.NewWriter(f) - size, err := reader.Size(context.TODO(), quitC) - if err != nil { - return err - } - if _, err = io.CopyN(writer, reader, size); err != nil { - return err - } - if err := writer.Flush(); err != nil { - return err - } - return f.Close() -} diff --git a/swarm/api/filesystem_test.go b/swarm/api/filesystem_test.go deleted file mode 100644 index 02f5bff6583d..000000000000 --- a/swarm/api/filesystem_test.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bytes" - "context" - "io/ioutil" - "os" - "path/filepath" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -var testDownloadDir, _ = ioutil.TempDir(os.TempDir(), "bzz-test") - -func testFileSystem(t *testing.T, f func(*FileSystem, bool)) { - testAPI(t, func(api *API, toEncrypt bool) { - f(NewFileSystem(api), toEncrypt) - }) -} - -func readPath(t *testing.T, parts ...string) string { - file := filepath.Join(parts...) - content, err := ioutil.ReadFile(file) - - if err != nil { - t.Fatalf("unexpected error reading '%v': %v", file, err) - } - return string(content) -} - -func TestApiDirUpload0(t *testing.T) { - testFileSystem(t, func(fs *FileSystem, toEncrypt bool) { - api := fs.api - bzzhash, err := fs.Upload(filepath.Join("testdata", "test0"), "", toEncrypt) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - content := readPath(t, "testdata", "test0", "index.html") - resp := testGet(t, api, bzzhash, "index.html") - exp := expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - - content = readPath(t, "testdata", "test0", "index.css") - resp = testGet(t, api, bzzhash, "index.css") - exp = expResponse(content, "text/css; charset=utf-8", 0) - checkResponse(t, resp, exp) - - addr := storage.Address(common.Hex2Bytes(bzzhash)) - _, _, _, _, err = api.Get(context.TODO(), NOOPDecrypt, addr, "") - if err == nil { - t.Fatalf("expected error: %v", err) - } - - downloadDir := filepath.Join(testDownloadDir, "test0") - defer os.RemoveAll(downloadDir) - err = fs.Download(bzzhash, downloadDir) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - newbzzhash, err := fs.Upload(downloadDir, "", toEncrypt) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - // TODO: currently the hash is not deterministic in the encrypted case - if !toEncrypt && bzzhash != newbzzhash { - t.Fatalf("download %v reuploaded has incorrect hash, expected %v, got %v", downloadDir, bzzhash, newbzzhash) - } - }) -} - -func TestApiDirUploadModify(t *testing.T) { - testFileSystem(t, func(fs *FileSystem, toEncrypt bool) { - api := fs.api - bzzhash, err := fs.Upload(filepath.Join("testdata", "test0"), "", toEncrypt) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - - addr := storage.Address(common.Hex2Bytes(bzzhash)) - addr, err = api.Modify(context.TODO(), addr, "index.html", "", "") - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - index, err := ioutil.ReadFile(filepath.Join("testdata", "test0", "index.html")) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - ctx := context.TODO() - hash, wait, err := api.Store(ctx, bytes.NewReader(index), int64(len(index)), toEncrypt) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - err = wait(ctx) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - addr, err = api.Modify(context.TODO(), addr, "index2.html", hash.Hex(), "text/html; charset=utf-8") - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - addr, err = api.Modify(context.TODO(), addr, "img/logo.png", hash.Hex(), "text/html; charset=utf-8") - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - bzzhash = addr.Hex() - - content := readPath(t, "testdata", "test0", "index.html") - resp := testGet(t, api, bzzhash, "index2.html") - exp := expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - - resp = testGet(t, api, bzzhash, "img/logo.png") - exp = expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - - content = readPath(t, "testdata", "test0", "index.css") - resp = testGet(t, api, bzzhash, "index.css") - exp = expResponse(content, "text/css; charset=utf-8", 0) - checkResponse(t, resp, exp) - - _, _, _, _, err = api.Get(context.TODO(), nil, addr, "") - if err == nil { - t.Errorf("expected error: %v", err) - } - }) -} - -func TestApiDirUploadWithRootFile(t *testing.T) { - testFileSystem(t, func(fs *FileSystem, toEncrypt bool) { - api := fs.api - bzzhash, err := fs.Upload(filepath.Join("testdata", "test0"), "index.html", toEncrypt) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - - content := readPath(t, "testdata", "test0", "index.html") - resp := testGet(t, api, bzzhash, "") - exp := expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - }) -} - -func TestApiFileUpload(t *testing.T) { - testFileSystem(t, func(fs *FileSystem, toEncrypt bool) { - api := fs.api - bzzhash, err := fs.Upload(filepath.Join("testdata", "test0", "index.html"), "", toEncrypt) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - - content := readPath(t, "testdata", "test0", "index.html") - resp := testGet(t, api, bzzhash, "index.html") - exp := expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - }) -} - -func TestApiFileUploadWithRootFile(t *testing.T) { - testFileSystem(t, func(fs *FileSystem, toEncrypt bool) { - api := fs.api - bzzhash, err := fs.Upload(filepath.Join("testdata", "test0", "index.html"), "index.html", toEncrypt) - if err != nil { - t.Errorf("unexpected error: %v", err) - return - } - - content := readPath(t, "testdata", "test0", "index.html") - resp := testGet(t, api, bzzhash, "") - exp := expResponse(content, "text/html; charset=utf-8", 0) - checkResponse(t, resp, exp) - }) -} diff --git a/swarm/api/gen_mime.go b/swarm/api/gen_mime.go deleted file mode 100644 index 109edeb506c5..000000000000 --- a/swarm/api/gen_mime.go +++ /dev/null @@ -1,1201 +0,0 @@ -// Code generated by github.com/ethereum/go-ethereum/cmd/swarm/mimegen. DO NOT EDIT. - -package api - -import "mime" - -func init() { - var mimeTypes = map[string]string{ - ".a2l": "application/A2L", - ".aml": "application/AML", - ".ez": "application/andrew-inset", - ".atf": "application/ATF", - ".atfx": "application/ATFX", - ".atxml": "application/ATXML", - ".atom": "application/atom+xml", - ".atomcat": "application/atomcat+xml", - ".atomdeleted": "application/atomdeleted+xml", - ".atomsvc": "application/atomsvc+xml", - ".apxml": "application/auth-policy+xml", - ".xdd": "application/bacnet-xdd+zip", - ".xcs": "application/calendar+xml", - ".cbor": "application/cbor", - ".ccmp": "application/ccmp+xml", - ".ccxml": "application/ccxml+xml", - ".cdfx": "application/CDFX+XML", - ".cdmia": "application/cdmi-capability", - ".cdmic": "application/cdmi-container", - ".cdmid": "application/cdmi-domain", - ".cdmio": "application/cdmi-object", - ".cdmiq": "application/cdmi-queue", - ".cea": "application/CEA", - ".cellml": "application/cellml+xml", - ".cml": "application/cellml+xml", - ".clue": "application/clue_info+xml", - ".cmsc": "application/cms", - ".cpl": "application/cpl+xml", - ".csrattrs": "application/csrattrs", - ".mpd": "application/dash+xml", - ".mpdd": "application/dashdelta", - ".davmount": "application/davmount+xml", - ".dcd": "application/DCD", - ".dcm": "application/dicom", - ".dii": "application/DII", - ".dit": "application/DIT", - ".xmls": "application/dskpp+xml", - ".dssc": "application/dssc+der", - ".xdssc": "application/dssc+xml", - ".dvc": "application/dvcs", - ".es": "application/ecmascript", - ".efi": "application/efi", - ".emma": "application/emma+xml", - ".emotionml": "application/emotionml+xml", - ".epub": "application/epub+zip", - ".exi": "application/exi", - ".finf": "application/fastinfoset", - ".fdt": "application/fdt+xml", - ".pfr": "application/font-tdpfr", - ".geojson": "application/geo+json", - ".gml": "application/gml+xml", - ".gz": "application/gzip", - ".tgz": "application/gzip", - ".stk": "application/hyperstudio", - ".ink": "application/inkml+xml", - ".inkml": "application/inkml+xml", - ".ipfix": "application/ipfix", - ".its": "application/its+xml", - ".js": "application/javascript", - ".jrd": "application/jrd+json", - ".json": "application/json", - ".json-patch": "application/json-patch+json", - ".jsonld": "application/ld+json", - ".lgr": "application/lgr+xml", - ".wlnk": "application/link-format", - ".lostxml": "application/lost+xml", - ".lostsyncxml": "application/lostsync+xml", - ".lxf": "application/LXF", - ".hqx": "application/mac-binhex40", - ".mads": "application/mads+xml", - ".mrc": "application/marc", - ".mrcx": "application/marcxml+xml", - ".nb": "application/mathematica", - ".ma": "application/mathematica", - ".mb": "application/mathematica", - ".mml": "application/mathml+xml", - ".mbox": "application/mbox", - ".meta4": "application/metalink4+xml", - ".mets": "application/mets+xml", - ".mf4": "application/MF4", - ".mods": "application/mods+xml", - ".m21": "application/mp21", - ".mp21": "application/mp21", - ".doc": "application/msword", - ".mxf": "application/mxf", - ".nq": "application/n-quads", - ".nt": "application/n-triples", - ".orq": "application/ocsp-request", - ".ors": "application/ocsp-response", - ".bin": "application/octet-stream", - ".lha": "application/octet-stream", - ".lzh": "application/octet-stream", - ".exe": "application/octet-stream", - ".class": "application/octet-stream", - ".so": "application/octet-stream", - ".dll": "application/octet-stream", - ".img": "application/octet-stream", - ".iso": "application/octet-stream", - ".oda": "application/oda", - ".odx": "application/ODX", - ".opf": "application/oebps-package+xml", - ".ogx": "application/ogg", - ".oxps": "application/oxps", - ".relo": "application/p2p-overlay+xml", - ".pdf": "application/pdf", - ".pdx": "application/PDX", - ".pgp": "application/pgp-encrypted", - ".sig": "application/pgp-signature", - ".p10": "application/pkcs10", - ".p12": "application/pkcs12", - ".pfx": "application/pkcs12", - ".p7m": "application/pkcs7-mime", - ".p7c": "application/pkcs7-mime", - ".p7s": "application/pkcs7-signature", - ".p8": "application/pkcs8", - ".cer": "application/pkix-cert", - ".crl": "application/pkix-crl", - ".pkipath": "application/pkix-pkipath", - ".pki": "application/pkixcmp", - ".pls": "application/pls+xml", - ".ps": "application/postscript", - ".eps": "application/postscript", - ".ai": "application/postscript", - ".provx": "application/provenance+xml", - ".cw": "application/prs.cww", - ".cww": "application/prs.cww", - ".hpub": "application/prs.hpub+zip", - ".rnd": "application/prs.nprend", - ".rct": "application/prs.nprend", - ".rdf-crypt": "application/prs.rdf-xml-crypt", - ".xsf": "application/prs.xsf+xml", - ".pskcxml": "application/pskc+xml", - ".rdf": "application/rdf+xml", - ".rif": "application/reginfo+xml", - ".rnc": "application/relax-ng-compact-syntax", - ".rld": "application/resource-lists-diff+xml", - ".rl": "application/resource-lists+xml", - ".rfcxml": "application/rfc+xml", - ".rs": "application/rls-services+xml", - ".gbr": "application/rpki-ghostbusters", - ".mft": "application/rpki-manifest", - ".roa": "application/rpki-roa", - ".rtf": "application/rtf", - ".scim": "application/scim+json", - ".scq": "application/scvp-cv-request", - ".scs": "application/scvp-cv-response", - ".spq": "application/scvp-vp-request", - ".spp": "application/scvp-vp-response", - ".sdp": "application/sdp", - ".soc": "application/sgml-open-catalog", - ".shf": "application/shf+xml", - ".siv": "application/sieve", - ".sieve": "application/sieve", - ".cl": "application/simple-filter+xml", - ".smil": "application/smil+xml", - ".smi": "application/smil+xml", - ".sml": "application/smil+xml", - ".rq": "application/sparql-query", - ".srx": "application/sparql-results+xml", - ".sql": "application/sql", - ".gram": "application/srgs", - ".grxml": "application/srgs+xml", - ".sru": "application/sru+xml", - ".ssml": "application/ssml+xml", - ".tau": "application/tamp-apex-update", - ".auc": "application/tamp-apex-update-confirm", - ".tcu": "application/tamp-community-update", - ".cuc": "application/tamp-community-update-confirm", - ".ter": "application/tamp-error", - ".tsa": "application/tamp-sequence-adjust", - ".sac": "application/tamp-sequence-adjust-confirm", - ".tur": "application/tamp-update", - ".tuc": "application/tamp-update-confirm", - ".tei": "application/tei+xml", - ".teiCorpus": "application/tei+xml", - ".odd": "application/tei+xml", - ".tfi": "application/thraud+xml", - ".tsq": "application/timestamp-query", - ".tsr": "application/timestamp-reply", - ".tsd": "application/timestamped-data", - ".trig": "application/trig", - ".ttml": "application/ttml+xml", - ".gsheet": "application/urc-grpsheet+xml", - ".rsheet": "application/urc-ressheet+xml", - ".td": "application/urc-targetdesc+xml", - ".uis": "application/urc-uisocketdesc+xml", - ".plb": "application/vnd.3gpp.pic-bw-large", - ".psb": "application/vnd.3gpp.pic-bw-small", - ".pvb": "application/vnd.3gpp.pic-bw-var", - ".sms": "application/vnd.3gpp2.sms", - ".tcap": "application/vnd.3gpp2.tcap", - ".imgcal": "application/vnd.3lightssoftware.imagescal", - ".pwn": "application/vnd.3M.Post-it-Notes", - ".aso": "application/vnd.accpac.simply.aso", - ".imp": "application/vnd.accpac.simply.imp", - ".acu": "application/vnd.acucobol", - ".atc": "application/vnd.acucorp", - ".acutc": "application/vnd.acucorp", - ".swf": "application/vnd.adobe.flash.movie", - ".fcdt": "application/vnd.adobe.formscentral.fcdt", - ".fxp": "application/vnd.adobe.fxp", - ".fxpl": "application/vnd.adobe.fxp", - ".xdp": "application/vnd.adobe.xdp+xml", - ".xfdf": "application/vnd.adobe.xfdf", - ".ahead": "application/vnd.ahead.space", - ".azf": "application/vnd.airzip.filesecure.azf", - ".azs": "application/vnd.airzip.filesecure.azs", - ".azw3": "application/vnd.amazon.mobi8-ebook", - ".acc": "application/vnd.americandynamics.acc", - ".ami": "application/vnd.amiga.ami", - ".apkg": "application/vnd.anki", - ".cii": "application/vnd.anser-web-certificate-issue-initiation", - ".fti": "application/vnd.anser-web-funds-transfer-initiation", - ".dist": "application/vnd.apple.installer+xml", - ".distz": "application/vnd.apple.installer+xml", - ".pkg": "application/vnd.apple.installer+xml", - ".mpkg": "application/vnd.apple.installer+xml", - ".m3u8": "application/vnd.apple.mpegurl", - ".swi": "application/vnd.aristanetworks.swi", - ".iota": "application/vnd.astraea-software.iota", - ".aep": "application/vnd.audiograph", - ".package": "application/vnd.autopackage", - ".bmml": "application/vnd.balsamiq.bmml+xml", - ".bmpr": "application/vnd.balsamiq.bmpr", - ".mpm": "application/vnd.blueice.multipass", - ".ep": "application/vnd.bluetooth.ep.oob", - ".le": "application/vnd.bluetooth.le.oob", - ".bmi": "application/vnd.bmi", - ".rep": "application/vnd.businessobjects", - ".tlclient": "application/vnd.cendio.thinlinc.clientconf", - ".cdxml": "application/vnd.chemdraw+xml", - ".pgn": "application/vnd.chess-pgn", - ".mmd": "application/vnd.chipnuts.karaoke-mmd", - ".cdy": "application/vnd.cinderella", - ".csl": "application/vnd.citationstyles.style+xml", - ".cla": "application/vnd.claymore", - ".rp9": "application/vnd.cloanto.rp9", - ".c4g": "application/vnd.clonk.c4group", - ".c4d": "application/vnd.clonk.c4group", - ".c4f": "application/vnd.clonk.c4group", - ".c4p": "application/vnd.clonk.c4group", - ".c4u": "application/vnd.clonk.c4group", - ".c11amc": "application/vnd.cluetrust.cartomobile-config", - ".c11amz": "application/vnd.cluetrust.cartomobile-config-pkg", - ".coffee": "application/vnd.coffeescript", - ".cbz": "application/vnd.comicbook+zip", - ".ica": "application/vnd.commerce-battelle", - ".icf": "application/vnd.commerce-battelle", - ".icd": "application/vnd.commerce-battelle", - ".ic0": "application/vnd.commerce-battelle", - ".ic1": "application/vnd.commerce-battelle", - ".ic2": "application/vnd.commerce-battelle", - ".ic3": "application/vnd.commerce-battelle", - ".ic4": "application/vnd.commerce-battelle", - ".ic5": "application/vnd.commerce-battelle", - ".ic6": "application/vnd.commerce-battelle", - ".ic7": "application/vnd.commerce-battelle", - ".ic8": "application/vnd.commerce-battelle", - ".csp": "application/vnd.commonspace", - ".cst": "application/vnd.commonspace", - ".cdbcmsg": "application/vnd.contact.cmsg", - ".ign": "application/vnd.coreos.ignition+json", - ".ignition": "application/vnd.coreos.ignition+json", - ".cmc": "application/vnd.cosmocaller", - ".clkx": "application/vnd.crick.clicker", - ".clkk": "application/vnd.crick.clicker.keyboard", - ".clkp": "application/vnd.crick.clicker.palette", - ".clkt": "application/vnd.crick.clicker.template", - ".clkw": "application/vnd.crick.clicker.wordbank", - ".wbs": "application/vnd.criticaltools.wbs+xml", - ".pml": "application/vnd.ctc-posml", - ".ppd": "application/vnd.cups-ppd", - ".curl": "application/vnd.curl", - ".dart": "application/vnd.dart", - ".rdz": "application/vnd.data-vision.rdz", - ".deb": "application/vnd.debian.binary-package", - ".udeb": "application/vnd.debian.binary-package", - ".uvf": "application/vnd.dece.data", - ".uvvf": "application/vnd.dece.data", - ".uvd": "application/vnd.dece.data", - ".uvvd": "application/vnd.dece.data", - ".uvt": "application/vnd.dece.ttml+xml", - ".uvvt": "application/vnd.dece.ttml+xml", - ".uvx": "application/vnd.dece.unspecified", - ".uvvx": "application/vnd.dece.unspecified", - ".uvz": "application/vnd.dece.zip", - ".uvvz": "application/vnd.dece.zip", - ".fe_launch": "application/vnd.denovo.fcselayout-link", - ".dsm": "application/vnd.desmume.movie", - ".dna": "application/vnd.dna", - ".docjson": "application/vnd.document+json", - ".scld": "application/vnd.doremir.scorecloud-binary-document", - ".dpg": "application/vnd.dpgraph", - ".mwc": "application/vnd.dpgraph", - ".dpgraph": "application/vnd.dpgraph", - ".dfac": "application/vnd.dreamfactory", - ".fla": "application/vnd.dtg.local.flash", - ".ait": "application/vnd.dvb.ait", - ".svc": "application/vnd.dvb.service", - ".geo": "application/vnd.dynageo", - ".dzr": "application/vnd.dzr", - ".mag": "application/vnd.ecowin.chart", - ".nml": "application/vnd.enliven", - ".esf": "application/vnd.epson.esf", - ".msf": "application/vnd.epson.msf", - ".qam": "application/vnd.epson.quickanime", - ".slt": "application/vnd.epson.salt", - ".ssf": "application/vnd.epson.ssf", - ".qcall": "application/vnd.ericsson.quickcall", - ".qca": "application/vnd.ericsson.quickcall", - ".espass": "application/vnd.espass-espass+zip", - ".es3": "application/vnd.eszigno3+xml", - ".et3": "application/vnd.eszigno3+xml", - ".asice": "application/vnd.etsi.asic-e+zip", - ".sce": "application/vnd.etsi.asic-e+zip", - ".asics": "application/vnd.etsi.asic-s+zip", - ".tst": "application/vnd.etsi.timestamp-token", - ".ez2": "application/vnd.ezpix-album", - ".ez3": "application/vnd.ezpix-package", - ".dim": "application/vnd.fastcopy-disk-image", - ".fdf": "application/vnd.fdf", - ".msd": "application/vnd.fdsn.mseed", - ".mseed": "application/vnd.fdsn.mseed", - ".seed": "application/vnd.fdsn.seed", - ".dataless": "application/vnd.fdsn.seed", - ".zfc": "application/vnd.filmit.zfc", - ".gph": "application/vnd.FloGraphIt", - ".ftc": "application/vnd.fluxtime.clip", - ".sfd": "application/vnd.font-fontforge-sfd", - ".fm": "application/vnd.framemaker", - ".fnc": "application/vnd.frogans.fnc", - ".ltf": "application/vnd.frogans.ltf", - ".fsc": "application/vnd.fsc.weblaunch", - ".oas": "application/vnd.fujitsu.oasys", - ".oa2": "application/vnd.fujitsu.oasys2", - ".oa3": "application/vnd.fujitsu.oasys3", - ".fg5": "application/vnd.fujitsu.oasysgp", - ".bh2": "application/vnd.fujitsu.oasysprs", - ".ddd": "application/vnd.fujixerox.ddd", - ".xdw": "application/vnd.fujixerox.docuworks", - ".xbd": "application/vnd.fujixerox.docuworks.binder", - ".xct": "application/vnd.fujixerox.docuworks.container", - ".fzs": "application/vnd.fuzzysheet", - ".txd": "application/vnd.genomatix.tuxedo", - ".g3": "application/vnd.geocube+xml", - ".g³": "application/vnd.geocube+xml", - ".ggb": "application/vnd.geogebra.file", - ".ggt": "application/vnd.geogebra.tool", - ".gex": "application/vnd.geometry-explorer", - ".gre": "application/vnd.geometry-explorer", - ".gxt": "application/vnd.geonext", - ".g2w": "application/vnd.geoplan", - ".g3w": "application/vnd.geospace", - ".gmx": "application/vnd.gmx", - ".kml": "application/vnd.google-earth.kml+xml", - ".kmz": "application/vnd.google-earth.kmz", - ".gqf": "application/vnd.grafeq", - ".gqs": "application/vnd.grafeq", - ".gac": "application/vnd.groove-account", - ".ghf": "application/vnd.groove-help", - ".gim": "application/vnd.groove-identity-message", - ".grv": "application/vnd.groove-injector", - ".gtm": "application/vnd.groove-tool-message", - ".tpl": "application/vnd.groove-tool-template", - ".vcg": "application/vnd.groove-vcard", - ".hal": "application/vnd.hal+xml", - ".zmm": "application/vnd.HandHeld-Entertainment+xml", - ".hbci": "application/vnd.hbci", - ".hbc": "application/vnd.hbci", - ".kom": "application/vnd.hbci", - ".upa": "application/vnd.hbci", - ".pkd": "application/vnd.hbci", - ".bpd": "application/vnd.hbci", - ".hdt": "application/vnd.hdt", - ".les": "application/vnd.hhe.lesson-player", - ".hpgl": "application/vnd.hp-HPGL", - ".hpi": "application/vnd.hp-hpid", - ".hpid": "application/vnd.hp-hpid", - ".hps": "application/vnd.hp-hps", - ".jlt": "application/vnd.hp-jlyt", - ".pcl": "application/vnd.hp-PCL", - ".sfd-hdstx": "application/vnd.hydrostatix.sof-data", - ".x3d": "application/vnd.hzn-3d-crossword", - ".emm": "application/vnd.ibm.electronic-media", - ".mpy": "application/vnd.ibm.MiniPay", - ".list3820": "application/vnd.ibm.modcap", - ".listafp": "application/vnd.ibm.modcap", - ".afp": "application/vnd.ibm.modcap", - ".pseg3820": "application/vnd.ibm.modcap", - ".irm": "application/vnd.ibm.rights-management", - ".sc": "application/vnd.ibm.secure-container", - ".icc": "application/vnd.iccprofile", - ".icm": "application/vnd.iccprofile", - ".1905.1": "application/vnd.ieee.1905", - ".igl": "application/vnd.igloader", - ".imf": "application/vnd.imagemeter.folder+zip", - ".imi": "application/vnd.imagemeter.image+zip", - ".ivp": "application/vnd.immervision-ivp", - ".ivu": "application/vnd.immervision-ivu", - ".imscc": "application/vnd.ims.imsccv1p1", - ".igm": "application/vnd.insors.igm", - ".xpw": "application/vnd.intercon.formnet", - ".xpx": "application/vnd.intercon.formnet", - ".i2g": "application/vnd.intergeo", - ".qbo": "application/vnd.intu.qbo", - ".qfx": "application/vnd.intu.qfx", - ".rcprofile": "application/vnd.ipunplugged.rcprofile", - ".irp": "application/vnd.irepository.package+xml", - ".xpr": "application/vnd.is-xpr", - ".fcs": "application/vnd.isac.fcs", - ".jam": "application/vnd.jam", - ".rms": "application/vnd.jcp.javame.midlet-rms", - ".jisp": "application/vnd.jisp", - ".joda": "application/vnd.joost.joda-archive", - ".ktz": "application/vnd.kahootz", - ".ktr": "application/vnd.kahootz", - ".karbon": "application/vnd.kde.karbon", - ".chrt": "application/vnd.kde.kchart", - ".kfo": "application/vnd.kde.kformula", - ".flw": "application/vnd.kde.kivio", - ".kon": "application/vnd.kde.kontour", - ".kpr": "application/vnd.kde.kpresenter", - ".kpt": "application/vnd.kde.kpresenter", - ".ksp": "application/vnd.kde.kspread", - ".kwd": "application/vnd.kde.kword", - ".kwt": "application/vnd.kde.kword", - ".htke": "application/vnd.kenameaapp", - ".kia": "application/vnd.kidspiration", - ".kne": "application/vnd.Kinar", - ".knp": "application/vnd.Kinar", - ".sdf": "application/vnd.Kinar", - ".skp": "application/vnd.koan", - ".skd": "application/vnd.koan", - ".skm": "application/vnd.koan", - ".skt": "application/vnd.koan", - ".sse": "application/vnd.kodak-descriptor", - ".lasjson": "application/vnd.las.las+json", - ".lasxml": "application/vnd.las.las+xml", - ".lbd": "application/vnd.llamagraphics.life-balance.desktop", - ".lbe": "application/vnd.llamagraphics.life-balance.exchange+xml", - ".123": "application/vnd.lotus-1-2-3", - ".wk4": "application/vnd.lotus-1-2-3", - ".wk3": "application/vnd.lotus-1-2-3", - ".wk1": "application/vnd.lotus-1-2-3", - ".apr": "application/vnd.lotus-approach", - ".vew": "application/vnd.lotus-approach", - ".prz": "application/vnd.lotus-freelance", - ".pre": "application/vnd.lotus-freelance", - ".nsf": "application/vnd.lotus-notes", - ".ntf": "application/vnd.lotus-notes", - ".ndl": "application/vnd.lotus-notes", - ".ns4": "application/vnd.lotus-notes", - ".ns3": "application/vnd.lotus-notes", - ".ns2": "application/vnd.lotus-notes", - ".nsh": "application/vnd.lotus-notes", - ".nsg": "application/vnd.lotus-notes", - ".or3": "application/vnd.lotus-organizer", - ".or2": "application/vnd.lotus-organizer", - ".org": "application/vnd.lotus-organizer", - ".scm": "application/vnd.lotus-screencam", - ".lwp": "application/vnd.lotus-wordpro", - ".sam": "application/vnd.lotus-wordpro", - ".portpkg": "application/vnd.macports.portpkg", - ".mvt": "application/vnd.mapbox-vector-tile", - ".mdc": "application/vnd.marlin.drm.mdcf", - ".mmdb": "application/vnd.maxmind.maxmind-db", - ".mcd": "application/vnd.mcd", - ".mc1": "application/vnd.medcalcdata", - ".cdkey": "application/vnd.mediastation.cdkey", - ".mwf": "application/vnd.MFER", - ".mfm": "application/vnd.mfmp", - ".flo": "application/vnd.micrografx.flo", - ".igx": "application/vnd.micrografx.igx", - ".mif": "application/vnd.mif", - ".daf": "application/vnd.Mobius.DAF", - ".dis": "application/vnd.Mobius.DIS", - ".mbk": "application/vnd.Mobius.MBK", - ".mqy": "application/vnd.Mobius.MQY", - ".msl": "application/vnd.Mobius.MSL", - ".plc": "application/vnd.Mobius.PLC", - ".txf": "application/vnd.Mobius.TXF", - ".mpn": "application/vnd.mophun.application", - ".mpc": "application/vnd.mophun.certificate", - ".xul": "application/vnd.mozilla.xul+xml", - ".3mf": "application/vnd.ms-3mfdocument", - ".cil": "application/vnd.ms-artgalry", - ".asf": "application/vnd.ms-asf", - ".cab": "application/vnd.ms-cab-compressed", - ".xls": "application/vnd.ms-excel", - ".xlm": "application/vnd.ms-excel", - ".xla": "application/vnd.ms-excel", - ".xlc": "application/vnd.ms-excel", - ".xlt": "application/vnd.ms-excel", - ".xlw": "application/vnd.ms-excel", - ".xltm": "application/vnd.ms-excel.template.macroEnabled.12", - ".xlam": "application/vnd.ms-excel.addin.macroEnabled.12", - ".xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12", - ".xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12", - ".eot": "application/vnd.ms-fontobject", - ".chm": "application/vnd.ms-htmlhelp", - ".ims": "application/vnd.ms-ims", - ".lrm": "application/vnd.ms-lrm", - ".thmx": "application/vnd.ms-officetheme", - ".ppt": "application/vnd.ms-powerpoint", - ".pps": "application/vnd.ms-powerpoint", - ".pot": "application/vnd.ms-powerpoint", - ".ppam": "application/vnd.ms-powerpoint.addin.macroEnabled.12", - ".pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12", - ".sldm": "application/vnd.ms-powerpoint.slide.macroEnabled.12", - ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", - ".potm": "application/vnd.ms-powerpoint.template.macroEnabled.12", - ".mpp": "application/vnd.ms-project", - ".mpt": "application/vnd.ms-project", - ".tnef": "application/vnd.ms-tnef", - ".tnf": "application/vnd.ms-tnef", - ".docm": "application/vnd.ms-word.document.macroEnabled.12", - ".dotm": "application/vnd.ms-word.template.macroEnabled.12", - ".wcm": "application/vnd.ms-works", - ".wdb": "application/vnd.ms-works", - ".wks": "application/vnd.ms-works", - ".wps": "application/vnd.ms-works", - ".wpl": "application/vnd.ms-wpl", - ".xps": "application/vnd.ms-xpsdocument", - ".msa": "application/vnd.msa-disk-image", - ".mseq": "application/vnd.mseq", - ".crtr": "application/vnd.multiad.creator", - ".cif": "application/vnd.multiad.creator.cif", - ".mus": "application/vnd.musician", - ".msty": "application/vnd.muvee.style", - ".taglet": "application/vnd.mynfc", - ".entity": "application/vnd.nervana", - ".request": "application/vnd.nervana", - ".bkm": "application/vnd.nervana", - ".kcm": "application/vnd.nervana", - ".nitf": "application/vnd.nitf", - ".nlu": "application/vnd.neurolanguage.nlu", - ".nds": "application/vnd.nintendo.nitro.rom", - ".sfc": "application/vnd.nintendo.snes.rom", - ".smc": "application/vnd.nintendo.snes.rom", - ".nnd": "application/vnd.noblenet-directory", - ".nns": "application/vnd.noblenet-sealer", - ".nnw": "application/vnd.noblenet-web", - ".ac": "application/vnd.nokia.n-gage.ac+xml", - ".ngdat": "application/vnd.nokia.n-gage.data", - ".n-gage": "application/vnd.nokia.n-gage.symbian.install", - ".rpst": "application/vnd.nokia.radio-preset", - ".rpss": "application/vnd.nokia.radio-presets", - ".edm": "application/vnd.novadigm.EDM", - ".edx": "application/vnd.novadigm.EDX", - ".ext": "application/vnd.novadigm.EXT", - ".odc": "application/vnd.oasis.opendocument.chart", - ".otc": "application/vnd.oasis.opendocument.chart-template", - ".odb": "application/vnd.oasis.opendocument.database", - ".odf": "application/vnd.oasis.opendocument.formula", - ".odg": "application/vnd.oasis.opendocument.graphics", - ".otg": "application/vnd.oasis.opendocument.graphics-template", - ".odi": "application/vnd.oasis.opendocument.image", - ".oti": "application/vnd.oasis.opendocument.image-template", - ".odp": "application/vnd.oasis.opendocument.presentation", - ".otp": "application/vnd.oasis.opendocument.presentation-template", - ".ods": "application/vnd.oasis.opendocument.spreadsheet", - ".ots": "application/vnd.oasis.opendocument.spreadsheet-template", - ".odt": "application/vnd.oasis.opendocument.text", - ".odm": "application/vnd.oasis.opendocument.text-master", - ".ott": "application/vnd.oasis.opendocument.text-template", - ".oth": "application/vnd.oasis.opendocument.text-web", - ".xo": "application/vnd.olpc-sugar", - ".dd2": "application/vnd.oma.dd2+xml", - ".tam": "application/vnd.onepager", - ".tamp": "application/vnd.onepagertamp", - ".tamx": "application/vnd.onepagertamx", - ".tat": "application/vnd.onepagertat", - ".tatp": "application/vnd.onepagertatp", - ".tatx": "application/vnd.onepagertatx", - ".obgx": "application/vnd.openblox.game+xml", - ".obg": "application/vnd.openblox.game-binary", - ".oeb": "application/vnd.openeye.oeb", - ".oxt": "application/vnd.openofficeorg.extension", - ".osm": "application/vnd.openstreetmap.data+xml", - ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", - ".sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide", - ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", - ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template", - ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", - ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", - ".ndc": "application/vnd.osa.netdeploy", - ".mgp": "application/vnd.osgeo.mapguide.package", - ".dp": "application/vnd.osgi.dp", - ".esa": "application/vnd.osgi.subsystem", - ".oxlicg": "application/vnd.oxli.countgraph", - ".prc": "application/vnd.palm", - ".pdb": "application/vnd.palm", - ".pqa": "application/vnd.palm", - ".oprc": "application/vnd.palm", - ".plp": "application/vnd.panoply", - ".paw": "application/vnd.pawaafile", - ".str": "application/vnd.pg.format", - ".ei6": "application/vnd.pg.osasli", - ".pil": "application/vnd.piaccess.application-license", - ".efif": "application/vnd.picsel", - ".wg": "application/vnd.pmi.widget", - ".plf": "application/vnd.pocketlearn", - ".pbd": "application/vnd.powerbuilder6", - ".preminet": "application/vnd.preminet", - ".box": "application/vnd.previewsystems.box", - ".vbox": "application/vnd.previewsystems.box", - ".mgz": "application/vnd.proteus.magazine", - ".qps": "application/vnd.publishare-delta-tree", - ".ptid": "application/vnd.pvi.ptid1", - ".bar": "application/vnd.qualcomm.brew-app-res", - ".qxd": "application/vnd.Quark.QuarkXPress", - ".qxt": "application/vnd.Quark.QuarkXPress", - ".qwd": "application/vnd.Quark.QuarkXPress", - ".qwt": "application/vnd.Quark.QuarkXPress", - ".qxl": "application/vnd.Quark.QuarkXPress", - ".qxb": "application/vnd.Quark.QuarkXPress", - ".quox": "application/vnd.quobject-quoxdocument", - ".quiz": "application/vnd.quobject-quoxdocument", - ".tree": "application/vnd.rainstor.data", - ".rar": "application/vnd.rar", - ".bed": "application/vnd.realvnc.bed", - ".mxl": "application/vnd.recordare.musicxml", - ".cryptonote": "application/vnd.rig.cryptonote", - ".link66": "application/vnd.route66.link66+xml", - ".st": "application/vnd.sailingtracker.track", - ".scd": "application/vnd.scribus", - ".sla": "application/vnd.scribus", - ".slaz": "application/vnd.scribus", - ".s3df": "application/vnd.sealed.3df", - ".scsf": "application/vnd.sealed.csf", - ".sdoc": "application/vnd.sealed.doc", - ".sdo": "application/vnd.sealed.doc", - ".s1w": "application/vnd.sealed.doc", - ".seml": "application/vnd.sealed.eml", - ".sem": "application/vnd.sealed.eml", - ".smht": "application/vnd.sealed.mht", - ".smh": "application/vnd.sealed.mht", - ".sppt": "application/vnd.sealed.ppt", - ".s1p": "application/vnd.sealed.ppt", - ".stif": "application/vnd.sealed.tiff", - ".sxls": "application/vnd.sealed.xls", - ".sxl": "application/vnd.sealed.xls", - ".s1e": "application/vnd.sealed.xls", - ".stml": "application/vnd.sealedmedia.softseal.html", - ".s1h": "application/vnd.sealedmedia.softseal.html", - ".spdf": "application/vnd.sealedmedia.softseal.pdf", - ".spd": "application/vnd.sealedmedia.softseal.pdf", - ".s1a": "application/vnd.sealedmedia.softseal.pdf", - ".see": "application/vnd.seemail", - ".sema": "application/vnd.sema", - ".semd": "application/vnd.semd", - ".semf": "application/vnd.semf", - ".ifm": "application/vnd.shana.informed.formdata", - ".itp": "application/vnd.shana.informed.formtemplate", - ".iif": "application/vnd.shana.informed.interchange", - ".ipk": "application/vnd.shana.informed.package", - ".twd": "application/vnd.SimTech-MindMapper", - ".twds": "application/vnd.SimTech-MindMapper", - ".mmf": "application/vnd.smaf", - ".notebook": "application/vnd.smart.notebook", - ".teacher": "application/vnd.smart.teacher", - ".fo": "application/vnd.software602.filler.form+xml", - ".zfo": "application/vnd.software602.filler.form-xml-zip", - ".sdkm": "application/vnd.solent.sdkm+xml", - ".sdkd": "application/vnd.solent.sdkm+xml", - ".dxp": "application/vnd.spotfire.dxp", - ".sfs": "application/vnd.spotfire.sfs", - ".smzip": "application/vnd.stepmania.package", - ".sm": "application/vnd.stepmania.stepchart", - ".wadl": "application/vnd.sun.wadl+xml", - ".sus": "application/vnd.sus-calendar", - ".susp": "application/vnd.sus-calendar", - ".xsm": "application/vnd.syncml+xml", - ".bdm": "application/vnd.syncml.dm+wbxml", - ".xdm": "application/vnd.syncml.dm+xml", - ".ddf": "application/vnd.syncml.dmddf+xml", - ".tao": "application/vnd.tao.intent-module-archive", - ".pcap": "application/vnd.tcpdump.pcap", - ".cap": "application/vnd.tcpdump.pcap", - ".dmp": "application/vnd.tcpdump.pcap", - ".qvd": "application/vnd.theqvd", - ".vfr": "application/vnd.tml", - ".viaframe": "application/vnd.tml", - ".tmo": "application/vnd.tmobile-livetv", - ".tpt": "application/vnd.trid.tpt", - ".mxs": "application/vnd.triscape.mxs", - ".tra": "application/vnd.trueapp", - ".ufdl": "application/vnd.ufdl", - ".ufd": "application/vnd.ufdl", - ".frm": "application/vnd.ufdl", - ".utz": "application/vnd.uiq.theme", - ".umj": "application/vnd.umajin", - ".unityweb": "application/vnd.unity", - ".uoml": "application/vnd.uoml+xml", - ".uo": "application/vnd.uoml+xml", - ".urim": "application/vnd.uri-map", - ".urimap": "application/vnd.uri-map", - ".vmt": "application/vnd.valve.source.material", - ".vcx": "application/vnd.vcx", - ".mxi": "application/vnd.vd-study", - ".study-inter": "application/vnd.vd-study", - ".model-inter": "application/vnd.vd-study", - ".vwx": "application/vnd.vectorworks", - ".vsc": "application/vnd.vidsoft.vidconference", - ".vsd": "application/vnd.visio", - ".vst": "application/vnd.visio", - ".vsw": "application/vnd.visio", - ".vss": "application/vnd.visio", - ".vis": "application/vnd.visionary", - ".vsf": "application/vnd.vsf", - ".sic": "application/vnd.wap.sic", - ".slc": "application/vnd.wap.slc", - ".wbxml": "application/vnd.wap.wbxml", - ".wmlc": "application/vnd.wap.wmlc", - ".wmlsc": "application/vnd.wap.wmlscriptc", - ".wtb": "application/vnd.webturbo", - ".p2p": "application/vnd.wfa.p2p", - ".wsc": "application/vnd.wfa.wsc", - ".wmc": "application/vnd.wmc", - ".m": "application/vnd.wolfram.mathematica.package", - ".nbp": "application/vnd.wolfram.player", - ".wpd": "application/vnd.wordperfect", - ".wqd": "application/vnd.wqd", - ".stf": "application/vnd.wt.stf", - ".wv": "application/vnd.wv.csp+wbxml", - ".xar": "application/vnd.xara", - ".xfdl": "application/vnd.xfdl", - ".xfd": "application/vnd.xfdl", - ".cpkg": "application/vnd.xmpie.cpkg", - ".dpkg": "application/vnd.xmpie.dpkg", - ".ppkg": "application/vnd.xmpie.ppkg", - ".xlim": "application/vnd.xmpie.xlim", - ".hvd": "application/vnd.yamaha.hv-dic", - ".hvs": "application/vnd.yamaha.hv-script", - ".hvp": "application/vnd.yamaha.hv-voice", - ".osf": "application/vnd.yamaha.openscoreformat", - ".saf": "application/vnd.yamaha.smaf-audio", - ".spf": "application/vnd.yamaha.smaf-phrase", - ".yme": "application/vnd.yaoweme", - ".cmp": "application/vnd.yellowriver-custom-menu", - ".zir": "application/vnd.zul", - ".zirz": "application/vnd.zul", - ".zaz": "application/vnd.zzazz.deck+xml", - ".vxml": "application/voicexml+xml", - ".wif": "application/watcherinfo+xml", - ".wgt": "application/widget", - ".wsdl": "application/wsdl+xml", - ".wspolicy": "application/wspolicy+xml", - ".xav": "application/xcap-att+xml", - ".xca": "application/xcap-caps+xml", - ".xdf": "application/xcap-diff+xml", - ".xel": "application/xcap-el+xml", - ".xer": "application/xcap-error+xml", - ".xns": "application/xcap-ns+xml", - ".xhtml": "application/xhtml+xml", - ".xhtm": "application/xhtml+xml", - ".xht": "application/xhtml+xml", - ".dtd": "application/xml-dtd", - ".xop": "application/xop+xml", - ".xsl": "application/xslt+xml", - ".xslt": "application/xslt+xml", - ".mxml": "application/xv+xml", - ".xhvml": "application/xv+xml", - ".xvml": "application/xv+xml", - ".xvm": "application/xv+xml", - ".yang": "application/yang", - ".yin": "application/yin+xml", - ".zip": "application/zip", - ".726": "audio/32kadpcm", - ".ac3": "audio/ac3", - ".amr": "audio/AMR", - ".awb": "audio/AMR-WB", - ".acn": "audio/asc", - ".aal": "audio/ATRAC-ADVANCED-LOSSLESS", - ".atx": "audio/ATRAC-X", - ".at3": "audio/ATRAC3", - ".aa3": "audio/ATRAC3", - ".omg": "audio/ATRAC3", - ".au": "audio/basic", - ".snd": "audio/basic", - ".dls": "audio/dls", - ".evc": "audio/EVRC", - ".evb": "audio/EVRCB", - ".enw": "audio/EVRCNW", - ".evw": "audio/EVRCWB", - ".lbc": "audio/iLBC", - ".l16": "audio/L16", - ".mxmf": "audio/mobile-xmf", - ".m4a": "audio/mp4", - ".mp3": "audio/mpeg", - ".mpga": "audio/mpeg", - ".mp1": "audio/mpeg", - ".mp2": "audio/mpeg", - ".oga": "audio/ogg", - ".ogg": "audio/ogg", - ".opus": "audio/ogg", - ".spx": "audio/ogg", - ".sid": "audio/prs.sid", - ".psid": "audio/prs.sid", - ".qcp": "audio/qcelp", - ".smv": "audio/SMV", - ".koz": "audio/vnd.audikoz", - ".uva": "audio/vnd.dece.audio", - ".uvva": "audio/vnd.dece.audio", - ".eol": "audio/vnd.digital-winds", - ".mlp": "audio/vnd.dolby.mlp", - ".dts": "audio/vnd.dts", - ".dtshd": "audio/vnd.dts.hd", - ".plj": "audio/vnd.everad.plj", - ".lvp": "audio/vnd.lucent.voice", - ".pya": "audio/vnd.ms-playready.media.pya", - ".vbk": "audio/vnd.nortel.vbk", - ".ecelp4800": "audio/vnd.nuera.ecelp4800", - ".ecelp7470": "audio/vnd.nuera.ecelp7470", - ".ecelp9600": "audio/vnd.nuera.ecelp9600", - ".rip": "audio/vnd.rip", - ".smp3": "audio/vnd.sealedmedia.softseal.mpeg", - ".smp": "audio/vnd.sealedmedia.softseal.mpeg", - ".s1m": "audio/vnd.sealedmedia.softseal.mpeg", - ".ttc": "font/collection", - ".otf": "font/otf", - ".ttf": "font/ttf", - ".woff": "font/woff", - ".woff2": "font/woff2", - ".bmp": "image/bmp", - ".dib": "image/bmp", - ".cgm": "image/cgm", - ".drle": "image/dicom-rle", - ".emf": "image/emf", - ".fits": "image/fits", - ".fit": "image/fits", - ".fts": "image/fits", - ".gif": "image/gif", - ".ief": "image/ief", - ".jls": "image/jls", - ".jp2": "image/jp2", - ".jpg2": "image/jp2", - ".jpg": "image/jpeg", - ".jpeg": "image/jpeg", - ".jpe": "image/jpeg", - ".jfif": "image/jpeg", - ".jpm": "image/jpm", - ".jpgm": "image/jpm", - ".jpx": "image/jpx", - ".jpf": "image/jpx", - ".ktx": "image/ktx", - ".png": "image/png", - ".btif": "image/prs.btif", - ".btf": "image/prs.btif", - ".pti": "image/prs.pti", - ".svg": "image/svg+xml", - ".svgz": "image/svg+xml", - ".t38": "image/t38", - ".tiff": "image/tiff", - ".tif": "image/tiff", - ".tfx": "image/tiff-fx", - ".psd": "image/vnd.adobe.photoshop", - ".azv": "image/vnd.airzip.accelerator.azv", - ".uvi": "image/vnd.dece.graphic", - ".uvvi": "image/vnd.dece.graphic", - ".uvg": "image/vnd.dece.graphic", - ".uvvg": "image/vnd.dece.graphic", - ".djvu": "image/vnd.djvu", - ".djv": "image/vnd.djvu", - ".dwg": "image/vnd.dwg", - ".dxf": "image/vnd.dxf", - ".fbs": "image/vnd.fastbidsheet", - ".fpx": "image/vnd.fpx", - ".fst": "image/vnd.fst", - ".mmr": "image/vnd.fujixerox.edmics-mmr", - ".rlc": "image/vnd.fujixerox.edmics-rlc", - ".pgb": "image/vnd.globalgraphics.pgb", - ".ico": "image/vnd.microsoft.icon", - ".apng": "image/vnd.mozilla.apng", - ".mdi": "image/vnd.ms-modi", - ".hdr": "image/vnd.radiance", - ".rgbe": "image/vnd.radiance", - ".xyze": "image/vnd.radiance", - ".spng": "image/vnd.sealed.png", - ".spn": "image/vnd.sealed.png", - ".s1n": "image/vnd.sealed.png", - ".sgif": "image/vnd.sealedmedia.softseal.gif", - ".sgi": "image/vnd.sealedmedia.softseal.gif", - ".s1g": "image/vnd.sealedmedia.softseal.gif", - ".sjpg": "image/vnd.sealedmedia.softseal.jpg", - ".sjp": "image/vnd.sealedmedia.softseal.jpg", - ".s1j": "image/vnd.sealedmedia.softseal.jpg", - ".tap": "image/vnd.tencent.tap", - ".vtf": "image/vnd.valve.source.texture", - ".wbmp": "image/vnd.wap.wbmp", - ".xif": "image/vnd.xiff", - ".pcx": "image/vnd.zbrush.pcx", - ".wmf": "image/wmf", - ".u8msg": "message/global", - ".u8dsn": "message/global-delivery-status", - ".u8mdn": "message/global-disposition-notification", - ".u8hdr": "message/global-headers", - ".eml": "message/rfc822", - ".mail": "message/rfc822", - ".art": "message/rfc822", - ".gltf": "model/gltf+json", - ".igs": "model/iges", - ".iges": "model/iges", - ".msh": "model/mesh", - ".mesh": "model/mesh", - ".silo": "model/mesh", - ".dae": "model/vnd.collada+xml", - ".dwf": "model/vnd.dwf", - ".gdl": "model/vnd.gdl", - ".gsm": "model/vnd.gdl", - ".win": "model/vnd.gdl", - ".dor": "model/vnd.gdl", - ".lmp": "model/vnd.gdl", - ".rsm": "model/vnd.gdl", - ".msm": "model/vnd.gdl", - ".ism": "model/vnd.gdl", - ".gtw": "model/vnd.gtw", - ".moml": "model/vnd.moml+xml", - ".mts": "model/vnd.mts", - ".ogex": "model/vnd.opengex", - ".x_b": "model/vnd.parasolid.transmit.binary", - ".xmt_bin": "model/vnd.parasolid.transmit.binary", - ".x_t": "model/vnd.parasolid.transmit.text", - ".xmt_txt": "model/vnd.parasolid.transmit.text", - ".bsp": "model/vnd.valve.source.compiled-map", - ".vtu": "model/vnd.vtu", - ".wrl": "model/vrml", - ".vrml": "model/vrml", - ".x3db": "model/x3d+xml", - ".x3dv": "model/x3d-vrml", - ".x3dvz": "model/x3d-vrml", - ".bmed": "multipart/vnd.bint.med-plus", - ".vpm": "multipart/voice-message", - ".appcache": "text/cache-manifest", - ".manifest": "text/cache-manifest", - ".ics": "text/calendar", - ".ifb": "text/calendar", - ".css": "text/css", - ".csv": "text/csv", - ".csvs": "text/csv-schema", - ".soa": "text/dns", - ".zone": "text/dns", - ".html": "text/html", - ".htm": "text/html", - ".cnd": "text/jcr-cnd", - ".markdown": "text/markdown", - ".md": "text/markdown", - ".miz": "text/mizar", - ".n3": "text/n3", - ".txt": "text/plain", - ".asc": "text/plain", - ".text": "text/plain", - ".pm": "text/plain", - ".el": "text/plain", - ".c": "text/plain", - ".h": "text/plain", - ".cc": "text/plain", - ".hh": "text/plain", - ".cxx": "text/plain", - ".hxx": "text/plain", - ".f90": "text/plain", - ".conf": "text/plain", - ".log": "text/plain", - ".provn": "text/provenance-notation", - ".rst": "text/prs.fallenstein.rst", - ".tag": "text/prs.lines.tag", - ".dsc": "text/prs.lines.tag", - ".rtx": "text/richtext", - ".sgml": "text/sgml", - ".sgm": "text/sgml", - ".tsv": "text/tab-separated-values", - ".t": "text/troff", - ".tr": "text/troff", - ".roff": "text/troff", - ".ttl": "text/turtle", - ".uris": "text/uri-list", - ".uri": "text/uri-list", - ".vcf": "text/vcard", - ".vcard": "text/vcard", - ".a": "text/vnd.a", - ".abc": "text/vnd.abc", - ".ascii": "text/vnd.ascii-art", - ".copyright": "text/vnd.debian.copyright", - ".dms": "text/vnd.DMClientScript", - ".sub": "text/vnd.dvb.subtitle", - ".jtd": "text/vnd.esmertec.theme-descriptor", - ".fly": "text/vnd.fly", - ".flx": "text/vnd.fmi.flexstor", - ".gv": "text/vnd.graphviz", - ".dot": "text/vnd.graphviz", - ".3dml": "text/vnd.in3d.3dml", - ".3dm": "text/vnd.in3d.3dml", - ".spot": "text/vnd.in3d.spot", - ".spo": "text/vnd.in3d.spot", - ".mpf": "text/vnd.ms-mediapackage", - ".ccc": "text/vnd.net2phone.commcenter.command", - ".uric": "text/vnd.si.uricatalogue", - ".jad": "text/vnd.sun.j2me.app-descriptor", - ".ts": "text/vnd.trolltech.linguist", - ".si": "text/vnd.wap.si", - ".sl": "text/vnd.wap.sl", - ".wml": "text/vnd.wap.wml", - ".wmls": "text/vnd.wap.wmlscript", - ".xml": "text/xml", - ".xsd": "text/xml", - ".rng": "text/xml", - ".ent": "text/xml-external-parsed-entity", - ".3gp": "video/3gpp", - ".3gpp": "video/3gpp", - ".3g2": "video/3gpp2", - ".3gpp2": "video/3gpp2", - ".m4s": "video/iso.segment", - ".mj2": "video/mj2", - ".mjp2": "video/mj2", - ".mp4": "video/mp4", - ".mpg4": "video/mp4", - ".m4v": "video/mp4", - ".mpeg": "video/mpeg", - ".mpg": "video/mpeg", - ".mpe": "video/mpeg", - ".m1v": "video/mpeg", - ".m2v": "video/mpeg", - ".ogv": "video/ogg", - ".mov": "video/quicktime", - ".qt": "video/quicktime", - ".uvh": "video/vnd.dece.hd", - ".uvvh": "video/vnd.dece.hd", - ".uvm": "video/vnd.dece.mobile", - ".uvvm": "video/vnd.dece.mobile", - ".uvu": "video/vnd.dece.mp4", - ".uvvu": "video/vnd.dece.mp4", - ".uvp": "video/vnd.dece.pd", - ".uvvp": "video/vnd.dece.pd", - ".uvs": "video/vnd.dece.sd", - ".uvvs": "video/vnd.dece.sd", - ".uvv": "video/vnd.dece.video", - ".uvvv": "video/vnd.dece.video", - ".dvb": "video/vnd.dvb.file", - ".fvt": "video/vnd.fvt", - ".mxu": "video/vnd.mpegurl", - ".m4u": "video/vnd.mpegurl", - ".pyv": "video/vnd.ms-playready.media.pyv", - ".nim": "video/vnd.nokia.interleaved-multimedia", - ".bik": "video/vnd.radgamettools.bink", - ".bk2": "video/vnd.radgamettools.bink", - ".smk": "video/vnd.radgamettools.smacker", - ".smpg": "video/vnd.sealed.mpeg1", - ".s11": "video/vnd.sealed.mpeg1", - ".s14": "video/vnd.sealed.mpeg4", - ".sswf": "video/vnd.sealed.swf", - ".ssw": "video/vnd.sealed.swf", - ".smov": "video/vnd.sealedmedia.softseal.mov", - ".smo": "video/vnd.sealedmedia.softseal.mov", - ".s1q": "video/vnd.sealedmedia.softseal.mov", - ".viv": "video/vnd.vivo", - ".cpt": "application/mac-compactpro", - ".metalink": "application/metalink+xml", - ".owx": "application/owl+xml", - ".rss": "application/rss+xml", - ".apk": "application/vnd.android.package-archive", - ".dd": "application/vnd.oma.dd+xml", - ".dcf": "application/vnd.oma.drm.content", - ".o4a": "application/vnd.oma.drm.dcf", - ".o4v": "application/vnd.oma.drm.dcf", - ".dm": "application/vnd.oma.drm.message", - ".drc": "application/vnd.oma.drm.rights+wbxml", - ".dr": "application/vnd.oma.drm.rights+xml", - ".sxc": "application/vnd.sun.xml.calc", - ".stc": "application/vnd.sun.xml.calc.template", - ".sxd": "application/vnd.sun.xml.draw", - ".std": "application/vnd.sun.xml.draw.template", - ".sxi": "application/vnd.sun.xml.impress", - ".sti": "application/vnd.sun.xml.impress.template", - ".sxm": "application/vnd.sun.xml.math", - ".sxw": "application/vnd.sun.xml.writer", - ".sxg": "application/vnd.sun.xml.writer.global", - ".stw": "application/vnd.sun.xml.writer.template", - ".sis": "application/vnd.symbian.install", - ".mms": "application/vnd.wap.mms-message", - ".anx": "application/x-annodex", - ".bcpio": "application/x-bcpio", - ".torrent": "application/x-bittorrent", - ".bz2": "application/x-bzip2", - ".vcd": "application/x-cdlink", - ".crx": "application/x-chrome-extension", - ".cpio": "application/x-cpio", - ".csh": "application/x-csh", - ".dcr": "application/x-director", - ".dir": "application/x-director", - ".dxr": "application/x-director", - ".dvi": "application/x-dvi", - ".spl": "application/x-futuresplash", - ".gtar": "application/x-gtar", - ".hdf": "application/x-hdf", - ".jar": "application/x-java-archive", - ".jnlp": "application/x-java-jnlp-file", - ".pack": "application/x-java-pack200", - ".kil": "application/x-killustrator", - ".latex": "application/x-latex", - ".nc": "application/x-netcdf", - ".cdf": "application/x-netcdf", - ".pl": "application/x-perl", - ".rpm": "application/x-rpm", - ".sh": "application/x-sh", - ".shar": "application/x-shar", - ".sit": "application/x-stuffit", - ".sv4cpio": "application/x-sv4cpio", - ".sv4crc": "application/x-sv4crc", - ".tar": "application/x-tar", - ".tcl": "application/x-tcl", - ".tex": "application/x-tex", - ".texinfo": "application/x-texinfo", - ".texi": "application/x-texinfo", - ".man": "application/x-troff-man", - ".1": "application/x-troff-man", - ".2": "application/x-troff-man", - ".3": "application/x-troff-man", - ".4": "application/x-troff-man", - ".5": "application/x-troff-man", - ".6": "application/x-troff-man", - ".7": "application/x-troff-man", - ".8": "application/x-troff-man", - ".me": "application/x-troff-me", - ".ms": "application/x-troff-ms", - ".ustar": "application/x-ustar", - ".src": "application/x-wais-source", - ".xpi": "application/x-xpinstall", - ".xspf": "application/x-xspf+xml", - ".xz": "application/x-xz", - ".mid": "audio/midi", - ".midi": "audio/midi", - ".kar": "audio/midi", - ".aif": "audio/x-aiff", - ".aiff": "audio/x-aiff", - ".aifc": "audio/x-aiff", - ".axa": "audio/x-annodex", - ".flac": "audio/x-flac", - ".mka": "audio/x-matroska", - ".mod": "audio/x-mod", - ".ult": "audio/x-mod", - ".uni": "audio/x-mod", - ".m15": "audio/x-mod", - ".mtm": "audio/x-mod", - ".669": "audio/x-mod", - ".med": "audio/x-mod", - ".m3u": "audio/x-mpegurl", - ".wax": "audio/x-ms-wax", - ".wma": "audio/x-ms-wma", - ".ram": "audio/x-pn-realaudio", - ".rm": "audio/x-pn-realaudio", - ".ra": "audio/x-realaudio", - ".s3m": "audio/x-s3m", - ".stm": "audio/x-stm", - ".wav": "audio/x-wav", - ".xyz": "chemical/x-xyz", - ".webp": "image/webp", - ".ras": "image/x-cmu-raster", - ".pnm": "image/x-portable-anymap", - ".pbm": "image/x-portable-bitmap", - ".pgm": "image/x-portable-graymap", - ".ppm": "image/x-portable-pixmap", - ".rgb": "image/x-rgb", - ".tga": "image/x-targa", - ".xbm": "image/x-xbitmap", - ".xpm": "image/x-xpixmap", - ".xwd": "image/x-xwindowdump", - ".sandboxed": "text/html-sandboxed", - ".pod": "text/x-pod", - ".etx": "text/x-setext", - ".webm": "video/webm", - ".axv": "video/x-annodex", - ".flv": "video/x-flv", - ".fxm": "video/x-javafx", - ".mkv": "video/x-matroska", - ".mk3d": "video/x-matroska-3d", - ".asx": "video/x-ms-asf", - ".wm": "video/x-ms-wm", - ".wmv": "video/x-ms-wmv", - ".wmx": "video/x-ms-wmx", - ".wvx": "video/x-ms-wvx", - ".avi": "video/x-msvideo", - ".movie": "video/x-sgi-movie", - ".ice": "x-conference/x-cooltalk", - ".sisx": "x-epoc/x-sisx-app", - } - for ext, name := range mimeTypes { - if err := mime.AddExtensionType(ext, name); err != nil { - panic(err) - } - } -} diff --git a/swarm/api/http/middleware.go b/swarm/api/http/middleware.go deleted file mode 100644 index 320da3046293..000000000000 --- a/swarm/api/http/middleware.go +++ /dev/null @@ -1,113 +0,0 @@ -package http - -import ( - "fmt" - "net/http" - "runtime/debug" - "strings" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/sctx" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/pborman/uuid" -) - -// Adapt chains h (main request handler) main handler to adapters (middleware handlers) -// Please note that the order of execution for `adapters` is FIFO (adapters[0] will be executed first) -func Adapt(h http.Handler, adapters ...Adapter) http.Handler { - for i := range adapters { - adapter := adapters[len(adapters)-1-i] - h = adapter(h) - } - return h -} - -type Adapter func(http.Handler) http.Handler - -func SetRequestID(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - r = r.WithContext(SetRUID(r.Context(), uuid.New()[:8])) - metrics.GetOrRegisterCounter(fmt.Sprintf("http.request.%s", r.Method), nil).Inc(1) - log.Info("created ruid for request", "ruid", GetRUID(r.Context()), "method", r.Method, "url", r.RequestURI) - - h.ServeHTTP(w, r) - }) -} - -func SetRequestHost(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - r = r.WithContext(sctx.SetHost(r.Context(), r.Host)) - log.Info("setting request host", "ruid", GetRUID(r.Context()), "host", sctx.GetHost(r.Context())) - - h.ServeHTTP(w, r) - }) -} - -func ParseURI(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - uri, err := api.Parse(strings.TrimLeft(r.URL.Path, "/")) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - respondError(w, r, fmt.Sprintf("invalid URI %q", r.URL.Path), http.StatusBadRequest) - return - } - if uri.Addr != "" && strings.HasPrefix(uri.Addr, "0x") { - uri.Addr = strings.TrimPrefix(uri.Addr, "0x") - - msg := fmt.Sprintf(`The requested hash seems to be prefixed with '0x'. You will be redirected to the correct URL within 5 seconds.
    - Please click
    here if your browser does not redirect you within 5 seconds.`, "/"+uri.String()) - w.WriteHeader(http.StatusNotFound) - w.Write([]byte(msg)) - return - } - - ctx := r.Context() - r = r.WithContext(SetURI(ctx, uri)) - log.Debug("parsed request path", "ruid", GetRUID(r.Context()), "method", r.Method, "uri.Addr", uri.Addr, "uri.Path", uri.Path, "uri.Scheme", uri.Scheme) - - h.ServeHTTP(w, r) - }) -} - -func InitLoggingResponseWriter(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - tn := time.Now() - - writer := newLoggingResponseWriter(w) - h.ServeHTTP(writer, r) - - ts := time.Since(tn) - log.Info("request served", "ruid", GetRUID(r.Context()), "code", writer.statusCode, "time", ts) - metrics.GetOrRegisterResettingTimer(fmt.Sprintf("http.request.%s.time", r.Method), nil).Update(ts) - metrics.GetOrRegisterResettingTimer(fmt.Sprintf("http.request.%s.%d.time", r.Method, writer.statusCode), nil).Update(ts) - }) -} - -func InstrumentOpenTracing(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - uri := GetURI(r.Context()) - if uri == nil || r.Method == "" || (uri != nil && uri.Scheme == "") { - h.ServeHTTP(w, r) // soft fail - return - } - spanName := fmt.Sprintf("http.%s.%s", r.Method, uri.Scheme) - ctx, sp := spancontext.StartSpan(r.Context(), spanName) - - defer sp.Finish() - h.ServeHTTP(w, r.WithContext(ctx)) - }) -} - -func RecoverPanic(h http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer func() { - if err := recover(); err != nil { - log.Error("panic recovery!", "stack trace", string(debug.Stack()), "url", r.URL.String(), "headers", r.Header) - } - }() - h.ServeHTTP(w, r) - }) -} diff --git a/swarm/api/http/response.go b/swarm/api/http/response.go deleted file mode 100644 index d4e81d7f67ea..000000000000 --- a/swarm/api/http/response.go +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "encoding/json" - "fmt" - "html/template" - "net/http" - "strings" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/api" -) - -var ( - htmlCounter = metrics.NewRegisteredCounter("api.http.errorpage.html.count", nil) - jsonCounter = metrics.NewRegisteredCounter("api.http.errorpage.json.count", nil) - plaintextCounter = metrics.NewRegisteredCounter("api.http.errorpage.plaintext.count", nil) -) - -type ResponseParams struct { - Msg template.HTML - Code int - Timestamp string - template *template.Template - Details template.HTML -} - -// ShowMultipleChoices is used when a user requests a resource in a manifest which results -// in ambiguous results. It returns a HTML page with clickable links of each of the entry -// in the manifest which fits the request URI ambiguity. -// For example, if the user requests bzz://read and that manifest contains entries -// "readme.md" and "readinglist.txt", a HTML page is returned with this two links. -// This only applies if the manifest has no default entry -func ShowMultipleChoices(w http.ResponseWriter, r *http.Request, list api.ManifestList) { - log.Debug("ShowMultipleChoices", "ruid", GetRUID(r.Context()), "uri", GetURI(r.Context())) - msg := "" - if list.Entries == nil { - respondError(w, r, "Could not resolve", http.StatusInternalServerError) - return - } - requestUri := strings.TrimPrefix(r.RequestURI, "/") - - uri, err := api.Parse(requestUri) - if err != nil { - respondError(w, r, "Bad Request", http.StatusBadRequest) - } - - uri.Scheme = "bzz-list" - msg += fmt.Sprintf("Disambiguation:
    Your request may refer to multiple choices.
    Click here if your browser does not redirect you within 5 seconds.
    ", "/"+uri.String()) - respondTemplate(w, r, "error", msg, http.StatusMultipleChoices) -} - -func respondTemplate(w http.ResponseWriter, r *http.Request, templateName, msg string, code int) { - log.Debug("respondTemplate", "ruid", GetRUID(r.Context()), "uri", GetURI(r.Context())) - respond(w, r, &ResponseParams{ - Code: code, - Msg: template.HTML(msg), - Timestamp: time.Now().Format(time.RFC1123), - template: TemplatesMap[templateName], - }) -} - -func respondError(w http.ResponseWriter, r *http.Request, msg string, code int) { - log.Info("respondError", "ruid", GetRUID(r.Context()), "uri", GetURI(r.Context()), "code", code) - respondTemplate(w, r, "error", msg, code) -} - -func respond(w http.ResponseWriter, r *http.Request, params *ResponseParams) { - w.WriteHeader(params.Code) - - if params.Code >= 400 { - w.Header().Del("Cache-Control") - w.Header().Del("ETag") - } - - acceptHeader := r.Header.Get("Accept") - // this cannot be in a switch since an Accept header can have multiple values: "Accept: */*, text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8" - if strings.Contains(acceptHeader, "application/json") { - if err := respondJSON(w, r, params); err != nil { - respondError(w, r, "Internal server error", http.StatusInternalServerError) - } - } else if strings.Contains(acceptHeader, "text/html") { - respondHTML(w, r, params) - } else { - respondPlaintext(w, r, params) //returns nice errors for curl - } -} - -func respondHTML(w http.ResponseWriter, r *http.Request, params *ResponseParams) { - htmlCounter.Inc(1) - log.Info("respondHTML", "ruid", GetRUID(r.Context()), "code", params.Code) - err := params.template.Execute(w, params) - if err != nil { - log.Error(err.Error()) - } -} - -func respondJSON(w http.ResponseWriter, r *http.Request, params *ResponseParams) error { - jsonCounter.Inc(1) - log.Info("respondJSON", "ruid", GetRUID(r.Context()), "code", params.Code) - w.Header().Set("Content-Type", "application/json") - return json.NewEncoder(w).Encode(params) -} - -func respondPlaintext(w http.ResponseWriter, r *http.Request, params *ResponseParams) error { - plaintextCounter.Inc(1) - log.Info("respondPlaintext", "ruid", GetRUID(r.Context()), "code", params.Code) - w.Header().Set("Content-Type", "text/plain") - strToWrite := "Code: " + fmt.Sprintf("%d", params.Code) + "\n" - strToWrite += "Message: " + string(params.Msg) + "\n" - strToWrite += "Timestamp: " + params.Timestamp + "\n" - _, err := w.Write([]byte(strToWrite)) - return err -} diff --git a/swarm/api/http/response_test.go b/swarm/api/http/response_test.go deleted file mode 100644 index 486c19ab0eed..000000000000 --- a/swarm/api/http/response_test.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "encoding/json" - "io/ioutil" - "net/http" - "strings" - "testing" - - "golang.org/x/net/html" -) - -func TestError(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - var resp *http.Response - var respbody []byte - - url := srv.URL + "/this_should_fail_as_no_bzz_protocol_present" - resp, err := http.Get(url) - - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - - if resp.StatusCode != 404 && !strings.Contains(string(respbody), "Invalid URI "/this_should_fail_as_no_bzz_protocol_present": unknown scheme") { - t.Fatalf("Response body does not match, expected: %v, to contain: %v; received code %d, expected code: %d", string(respbody), "Invalid bzz URI: unknown scheme", 400, resp.StatusCode) - } - - _, err = html.Parse(strings.NewReader(string(respbody))) - if err != nil { - t.Fatalf("HTML validation failed for error page returned!") - } -} - -func Test404Page(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz:/1234567890123456789012345678901234567890123456789012345678901234" - resp, err := http.Get(url) - - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - - if resp.StatusCode != 404 || !strings.Contains(string(respbody), "404") { - t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) - } - - _, err = html.Parse(strings.NewReader(string(respbody))) - if err != nil { - t.Fatalf("HTML validation failed for error page returned!") - } -} - -func Test500Page(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz:/thisShouldFailWith500Code" - resp, err := http.Get(url) - - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - - if resp.StatusCode != 404 { - t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) - } - - _, err = html.Parse(strings.NewReader(string(respbody))) - if err != nil { - t.Fatalf("HTML validation failed for error page returned!") - } -} -func Test500PageWith0xHashPrefix(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz:/0xthisShouldFailWith500CodeAndAHelpfulMessage" - resp, err := http.Get(url) - - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - - if resp.StatusCode != 404 { - t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) - } - - if !strings.Contains(string(respbody), "The requested hash seems to be prefixed with") { - t.Fatalf("Did not receive the expected error message") - } - - _, err = html.Parse(strings.NewReader(string(respbody))) - if err != nil { - t.Fatalf("HTML validation failed for error page returned!") - } -} - -func TestJsonResponse(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz:/thisShouldFailWith500Code/" - req, err := http.NewRequest("GET", url, nil) - if err != nil { - t.Fatalf("Request failed: %v", err) - } - req.Header.Set("Accept", "application/json") - resp, err = http.DefaultClient.Do(req) - if err != nil { - t.Fatalf("Request failed: %v", err) - } - - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - - if resp.StatusCode != 404 { - t.Fatalf("Invalid Status Code received, expected 404, got %d", resp.StatusCode) - } - - if !isJSON(string(respbody)) { - t.Fatalf("Expected response to be JSON, received invalid JSON: %s", string(respbody)) - } - -} - -func isJSON(s string) bool { - var js map[string]interface{} - return json.Unmarshal([]byte(s), &js) == nil -} diff --git a/swarm/api/http/roundtripper.go b/swarm/api/http/roundtripper.go deleted file mode 100644 index be8ea39856eb..000000000000 --- a/swarm/api/http/roundtripper.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "fmt" - "net/http" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -/* -http roundtripper to register for bzz url scheme -see https://github.com/ethereum/go-ethereum/issues/2040 -Usage: - -import ( - "github.com/ethereum/go-ethereum/common/httpclient" - "github.com/ethereum/go-ethereum/swarm/api/http" -) -client := httpclient.New() -// for (private) swarm proxy running locally -client.RegisterScheme("bzz", &http.RoundTripper{Port: port}) -client.RegisterScheme("bzz-immutable", &http.RoundTripper{Port: port}) -client.RegisterScheme("bzz-raw", &http.RoundTripper{Port: port}) - -The port you give the Roundtripper is the port the swarm proxy is listening on. -If Host is left empty, localhost is assumed. - -Using a public gateway, the above few lines gives you the leanest -bzz-scheme aware read-only http client. You really only ever need this -if you need go-native swarm access to bzz addresses. -*/ - -type RoundTripper struct { - Host string - Port string -} - -func (self *RoundTripper) RoundTrip(req *http.Request) (resp *http.Response, err error) { - host := self.Host - if len(host) == 0 { - host = "localhost" - } - url := fmt.Sprintf("http://%s:%s/%s:/%s/%s", host, self.Port, req.Proto, req.URL.Host, req.URL.Path) - log.Info(fmt.Sprintf("roundtripper: proxying request '%s' to '%s'", req.RequestURI, url)) - reqProxy, err := http.NewRequest(req.Method, url, req.Body) - if err != nil { - return nil, err - } - return http.DefaultClient.Do(reqProxy) -} diff --git a/swarm/api/http/roundtripper_test.go b/swarm/api/http/roundtripper_test.go deleted file mode 100644 index f99c4f35e058..000000000000 --- a/swarm/api/http/roundtripper_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "io/ioutil" - "net" - "net/http" - "net/http/httptest" - "strings" - "testing" - "time" -) - -func TestRoundTripper(t *testing.T) { - serveMux := http.NewServeMux() - serveMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - if r.Method == "GET" { - w.Header().Set("Content-Type", "text/plain") - http.ServeContent(w, r, "", time.Unix(0, 0), strings.NewReader(r.RequestURI)) - } else { - http.Error(w, "Method "+r.Method+" is not supported.", http.StatusMethodNotAllowed) - } - }) - - srv := httptest.NewServer(serveMux) - defer srv.Close() - - host, port, _ := net.SplitHostPort(srv.Listener.Addr().String()) - rt := &RoundTripper{Host: host, Port: port} - trans := &http.Transport{} - trans.RegisterProtocol("bzz", rt) - client := &http.Client{Transport: trans} - resp, err := client.Get("bzz://test.com/path") - if err != nil { - t.Errorf("expected no error, got %v", err) - return - } - - defer func() { - if resp != nil { - resp.Body.Close() - } - }() - - content, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("expected no error, got %v", err) - return - } - if string(content) != "/HTTP/1.1:/test.com/path" { - t.Errorf("incorrect response from http server: expected '%v', got '%v'", "/HTTP/1.1:/test.com/path", string(content)) - } - -} diff --git a/swarm/api/http/sctx.go b/swarm/api/http/sctx.go deleted file mode 100644 index b8dafab0b79d..000000000000 --- a/swarm/api/http/sctx.go +++ /dev/null @@ -1,34 +0,0 @@ -package http - -import ( - "context" - - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/sctx" -) - -type uriKey struct{} - -func GetRUID(ctx context.Context) string { - v, ok := ctx.Value(sctx.HTTPRequestIDKey{}).(string) - if ok { - return v - } - return "xxxxxxxx" -} - -func SetRUID(ctx context.Context, ruid string) context.Context { - return context.WithValue(ctx, sctx.HTTPRequestIDKey{}, ruid) -} - -func GetURI(ctx context.Context) *api.URI { - v, ok := ctx.Value(uriKey{}).(*api.URI) - if ok { - return v - } - return nil -} - -func SetURI(ctx context.Context, uri *api.URI) context.Context { - return context.WithValue(ctx, uriKey{}, uri) -} diff --git a/swarm/api/http/server.go b/swarm/api/http/server.go deleted file mode 100644 index 3c6735a73e80..000000000000 --- a/swarm/api/http/server.go +++ /dev/null @@ -1,887 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -A simple http server interface to Swarm -*/ -package http - -import ( - "bufio" - "bytes" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "mime" - "mime/multipart" - "net/http" - "os" - "path" - "strconv" - "strings" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/rs/cors" -) - -var ( - postRawCount = metrics.NewRegisteredCounter("api.http.post.raw.count", nil) - postRawFail = metrics.NewRegisteredCounter("api.http.post.raw.fail", nil) - postFilesCount = metrics.NewRegisteredCounter("api.http.post.files.count", nil) - postFilesFail = metrics.NewRegisteredCounter("api.http.post.files.fail", nil) - deleteCount = metrics.NewRegisteredCounter("api.http.delete.count", nil) - deleteFail = metrics.NewRegisteredCounter("api.http.delete.fail", nil) - getCount = metrics.NewRegisteredCounter("api.http.get.count", nil) - getFail = metrics.NewRegisteredCounter("api.http.get.fail", nil) - getFileCount = metrics.NewRegisteredCounter("api.http.get.file.count", nil) - getFileNotFound = metrics.NewRegisteredCounter("api.http.get.file.notfound", nil) - getFileFail = metrics.NewRegisteredCounter("api.http.get.file.fail", nil) - getListCount = metrics.NewRegisteredCounter("api.http.get.list.count", nil) - getListFail = metrics.NewRegisteredCounter("api.http.get.list.fail", nil) -) - -type methodHandler map[string]http.Handler - -func (m methodHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - v, ok := m[r.Method] - if ok { - v.ServeHTTP(rw, r) - return - } - rw.WriteHeader(http.StatusMethodNotAllowed) -} - -func NewServer(api *api.API, corsString string) *Server { - var allowedOrigins []string - for _, domain := range strings.Split(corsString, ",") { - allowedOrigins = append(allowedOrigins, strings.TrimSpace(domain)) - } - c := cors.New(cors.Options{ - AllowedOrigins: allowedOrigins, - AllowedMethods: []string{http.MethodPost, http.MethodGet, http.MethodDelete, http.MethodPatch, http.MethodPut}, - MaxAge: 600, - AllowedHeaders: []string{"*"}, - }) - - server := &Server{api: api} - - defaultMiddlewares := []Adapter{ - RecoverPanic, - SetRequestID, - SetRequestHost, - InitLoggingResponseWriter, - ParseURI, - InstrumentOpenTracing, - } - - mux := http.NewServeMux() - mux.Handle("/bzz:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleBzzGet), - defaultMiddlewares..., - ), - "POST": Adapt( - http.HandlerFunc(server.HandlePostFiles), - defaultMiddlewares..., - ), - "DELETE": Adapt( - http.HandlerFunc(server.HandleDelete), - defaultMiddlewares..., - ), - }) - mux.Handle("/bzz-raw:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleGet), - defaultMiddlewares..., - ), - "POST": Adapt( - http.HandlerFunc(server.HandlePostRaw), - defaultMiddlewares..., - ), - }) - mux.Handle("/bzz-immutable:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleBzzGet), - defaultMiddlewares..., - ), - }) - mux.Handle("/bzz-hash:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleGet), - defaultMiddlewares..., - ), - }) - mux.Handle("/bzz-list:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleGetList), - defaultMiddlewares..., - ), - }) - mux.Handle("/bzz-feed:/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleGetFeed), - defaultMiddlewares..., - ), - "POST": Adapt( - http.HandlerFunc(server.HandlePostFeed), - defaultMiddlewares..., - ), - }) - - mux.Handle("/", methodHandler{ - "GET": Adapt( - http.HandlerFunc(server.HandleRootPaths), - SetRequestID, - InitLoggingResponseWriter, - ), - }) - server.Handler = c.Handler(mux) - - return server -} - -func (s *Server) ListenAndServe(addr string) error { - s.listenAddr = addr - return http.ListenAndServe(addr, s) -} - -// browser API for registering bzz url scheme handlers: -// https://developer.mozilla.org/en/docs/Web-based_protocol_handlers -// electron (chromium) api for registering bzz url scheme handlers: -// https://github.com/atom/electron/blob/master/docs/api/protocol.md -type Server struct { - http.Handler - api *api.API - listenAddr string -} - -func (s *Server) HandleBzzGet(w http.ResponseWriter, r *http.Request) { - log.Debug("handleBzzGet", "ruid", GetRUID(r.Context()), "uri", r.RequestURI) - if r.Header.Get("Accept") == "application/x-tar" { - uri := GetURI(r.Context()) - _, credentials, _ := r.BasicAuth() - reader, err := s.api.GetDirectoryTar(r.Context(), s.api.Decryptor(r.Context(), credentials), uri) - if err != nil { - if isDecryptError(err) { - w.Header().Set("WWW-Authenticate", fmt.Sprintf("Basic realm=%q", uri.Address().String())) - respondError(w, r, err.Error(), http.StatusUnauthorized) - return - } - respondError(w, r, fmt.Sprintf("Had an error building the tarball: %v", err), http.StatusInternalServerError) - return - } - defer reader.Close() - - w.Header().Set("Content-Type", "application/x-tar") - - fileName := uri.Addr - if found := path.Base(uri.Path); found != "" && found != "." && found != "/" { - fileName = found - } - w.Header().Set("Content-Disposition", fmt.Sprintf("inline; filename=\"%s.tar\"", fileName)) - - w.WriteHeader(http.StatusOK) - io.Copy(w, reader) - return - } - - s.HandleGetFile(w, r) -} - -func (s *Server) HandleRootPaths(w http.ResponseWriter, r *http.Request) { - switch r.RequestURI { - case "/": - respondTemplate(w, r, "landing-page", "Swarm: Please request a valid ENS or swarm hash with the appropriate bzz scheme", 200) - return - case "/robots.txt": - w.Header().Set("Last-Modified", time.Now().Format(http.TimeFormat)) - fmt.Fprintf(w, "User-agent: *\nDisallow: /") - case "/favicon.ico": - w.WriteHeader(http.StatusOK) - w.Write(faviconBytes) - default: - respondError(w, r, "Not Found", http.StatusNotFound) - } -} - -// HandlePostRaw handles a POST request to a raw bzz-raw:/ URI, stores the request -// body in swarm and returns the resulting storage address as a text/plain response -func (s *Server) HandlePostRaw(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - log.Debug("handle.post.raw", "ruid", ruid) - - postRawCount.Inc(1) - - toEncrypt := false - uri := GetURI(r.Context()) - if uri.Addr == "encrypt" { - toEncrypt = true - } - - if uri.Path != "" { - postRawFail.Inc(1) - respondError(w, r, "raw POST request cannot contain a path", http.StatusBadRequest) - return - } - - if uri.Addr != "" && uri.Addr != "encrypt" { - postRawFail.Inc(1) - respondError(w, r, "raw POST request addr can only be empty or \"encrypt\"", http.StatusBadRequest) - return - } - - if r.Header.Get("Content-Length") == "" { - postRawFail.Inc(1) - respondError(w, r, "missing Content-Length header in request", http.StatusBadRequest) - return - } - - addr, _, err := s.api.Store(r.Context(), r.Body, r.ContentLength, toEncrypt) - if err != nil { - postRawFail.Inc(1) - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - - log.Debug("stored content", "ruid", ruid, "key", addr) - - w.Header().Set("Content-Type", "text/plain") - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, addr) -} - -// HandlePostFiles handles a POST request to -// bzz:// which contains either a single file or multiple files -// (either a tar archive or multipart form), adds those files either to an -// existing manifest or to a new manifest under and returns the -// resulting manifest hash as a text/plain response -func (s *Server) HandlePostFiles(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - log.Debug("handle.post.files", "ruid", ruid) - postFilesCount.Inc(1) - - contentType, params, err := mime.ParseMediaType(r.Header.Get("Content-Type")) - if err != nil { - postFilesFail.Inc(1) - respondError(w, r, err.Error(), http.StatusBadRequest) - return - } - - toEncrypt := false - uri := GetURI(r.Context()) - if uri.Addr == "encrypt" { - toEncrypt = true - } - - var addr storage.Address - if uri.Addr != "" && uri.Addr != "encrypt" { - addr, err = s.api.Resolve(r.Context(), uri.Addr) - if err != nil { - postFilesFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot resolve %s: %s", uri.Addr, err), http.StatusInternalServerError) - return - } - log.Debug("resolved key", "ruid", ruid, "key", addr) - } else { - addr, err = s.api.NewManifest(r.Context(), toEncrypt) - if err != nil { - postFilesFail.Inc(1) - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - log.Debug("new manifest", "ruid", ruid, "key", addr) - } - - newAddr, err := s.api.UpdateManifest(r.Context(), addr, func(mw *api.ManifestWriter) error { - switch contentType { - case "application/x-tar": - _, err := s.handleTarUpload(r, mw) - if err != nil { - respondError(w, r, fmt.Sprintf("error uploading tarball: %v", err), http.StatusInternalServerError) - return err - } - return nil - case "multipart/form-data": - return s.handleMultipartUpload(r, params["boundary"], mw) - - default: - return s.handleDirectUpload(r, mw) - } - }) - if err != nil { - postFilesFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot create manifest: %s", err), http.StatusInternalServerError) - return - } - - log.Debug("stored content", "ruid", ruid, "key", newAddr) - - w.Header().Set("Content-Type", "text/plain") - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, newAddr) -} - -func (s *Server) handleTarUpload(r *http.Request, mw *api.ManifestWriter) (storage.Address, error) { - log.Debug("handle.tar.upload", "ruid", GetRUID(r.Context())) - - defaultPath := r.URL.Query().Get("defaultpath") - - key, err := s.api.UploadTar(r.Context(), r.Body, GetURI(r.Context()).Path, defaultPath, mw) - if err != nil { - return nil, err - } - return key, nil -} - -func (s *Server) handleMultipartUpload(r *http.Request, boundary string, mw *api.ManifestWriter) error { - ruid := GetRUID(r.Context()) - log.Debug("handle.multipart.upload", "ruid", ruid) - mr := multipart.NewReader(r.Body, boundary) - for { - part, err := mr.NextPart() - if err == io.EOF { - return nil - } else if err != nil { - return fmt.Errorf("error reading multipart form: %s", err) - } - - var size int64 - var reader io.Reader - if contentLength := part.Header.Get("Content-Length"); contentLength != "" { - size, err = strconv.ParseInt(contentLength, 10, 64) - if err != nil { - return fmt.Errorf("error parsing multipart content length: %s", err) - } - reader = part - } else { - // copy the part to a tmp file to get its size - tmp, err := ioutil.TempFile("", "swarm-multipart") - if err != nil { - return err - } - defer os.Remove(tmp.Name()) - defer tmp.Close() - size, err = io.Copy(tmp, part) - if err != nil { - return fmt.Errorf("error copying multipart content: %s", err) - } - if _, err := tmp.Seek(0, io.SeekStart); err != nil { - return fmt.Errorf("error copying multipart content: %s", err) - } - reader = tmp - } - - // add the entry under the path from the request - name := part.FileName() - if name == "" { - name = part.FormName() - } - uri := GetURI(r.Context()) - path := path.Join(uri.Path, name) - entry := &api.ManifestEntry{ - Path: path, - ContentType: part.Header.Get("Content-Type"), - Size: size, - } - log.Debug("adding path to new manifest", "ruid", ruid, "bytes", entry.Size, "path", entry.Path) - contentKey, err := mw.AddEntry(r.Context(), reader, entry) - if err != nil { - return fmt.Errorf("error adding manifest entry from multipart form: %s", err) - } - log.Debug("stored content", "ruid", ruid, "key", contentKey) - } -} - -func (s *Server) handleDirectUpload(r *http.Request, mw *api.ManifestWriter) error { - ruid := GetRUID(r.Context()) - log.Debug("handle.direct.upload", "ruid", ruid) - key, err := mw.AddEntry(r.Context(), r.Body, &api.ManifestEntry{ - Path: GetURI(r.Context()).Path, - ContentType: r.Header.Get("Content-Type"), - Mode: 0644, - Size: r.ContentLength, - }) - if err != nil { - return err - } - log.Debug("stored content", "ruid", ruid, "key", key) - return nil -} - -// HandleDelete handles a DELETE request to bzz://, removes -// from and returns the resulting manifest hash as a -// text/plain response -func (s *Server) HandleDelete(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - log.Debug("handle.delete", "ruid", ruid) - deleteCount.Inc(1) - newKey, err := s.api.Delete(r.Context(), uri.Addr, uri.Path) - if err != nil { - deleteFail.Inc(1) - respondError(w, r, fmt.Sprintf("could not delete from manifest: %v", err), http.StatusInternalServerError) - return - } - - w.Header().Set("Content-Type", "text/plain") - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, newKey) -} - -// Handles feed manifest creation and feed updates -// The POST request admits a JSON structure as defined in the feeds package: `feed.updateRequestJSON` -// The requests can be to a) create a feed manifest, b) update a feed or c) both a+b: create a feed manifest and publish a first update -func (s *Server) HandlePostFeed(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - log.Debug("handle.post.feed", "ruid", ruid) - var err error - - // Creation and update must send feed.updateRequestJSON JSON structure - body, err := ioutil.ReadAll(r.Body) - if err != nil { - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - - fd, err := s.api.ResolveFeed(r.Context(), uri, r.URL.Query()) - if err != nil { // couldn't parse query string or retrieve manifest - getFail.Inc(1) - httpStatus := http.StatusBadRequest - if err == api.ErrCannotLoadFeedManifest || err == api.ErrCannotResolveFeedURI { - httpStatus = http.StatusNotFound - } - respondError(w, r, fmt.Sprintf("cannot retrieve feed from manifest: %s", err), httpStatus) - return - } - - var updateRequest feed.Request - updateRequest.Feed = *fd - query := r.URL.Query() - - if err := updateRequest.FromValues(query, body); err != nil { // decodes request from query parameters - respondError(w, r, err.Error(), http.StatusBadRequest) - return - } - - switch { - case updateRequest.IsUpdate(): - // Verify that the signature is intact and that the signer is authorized - // to update this feed - // Check this early, to avoid creating a feed and then not being able to set its first update. - if err = updateRequest.Verify(); err != nil { - respondError(w, r, err.Error(), http.StatusForbidden) - return - } - _, err = s.api.FeedsUpdate(r.Context(), &updateRequest) - if err != nil { - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - fallthrough - case query.Get("manifest") == "1": - // we create a manifest so we can retrieve feed updates with bzz:// later - // this manifest has a special "feed type" manifest, and saves the - // feed identification used to retrieve feed updates later - m, err := s.api.NewFeedManifest(r.Context(), &updateRequest.Feed) - if err != nil { - respondError(w, r, fmt.Sprintf("failed to create feed manifest: %v", err), http.StatusInternalServerError) - return - } - // the key to the manifest will be passed back to the client - // the client can access the feed directly through its Feed member - // the manifest key can be set as content in the resolver of the ENS name - outdata, err := json.Marshal(m) - if err != nil { - respondError(w, r, fmt.Sprintf("failed to create json response: %s", err), http.StatusInternalServerError) - return - } - fmt.Fprint(w, string(outdata)) - - w.Header().Add("Content-type", "application/json") - default: - respondError(w, r, "Missing signature in feed update request", http.StatusBadRequest) - } -} - -// HandleGetFeed retrieves Swarm feeds updates: -// bzz-feed:// - get latest feed update, given a manifest address -// - or - -// specify user + topic (optional), subtopic name (optional) directly, without manifest: -// bzz-feed://?user=0x...&topic=0x...&name=subtopic name -// topic defaults to 0x000... if not specified. -// name defaults to empty string if not specified. -// thus, empty name and topic refers to the user's default feed. -// -// Optional parameters: -// time=xx - get the latest update before time (in epoch seconds) -// hint.time=xx - hint the lookup algorithm looking for updates at around that time -// hint.level=xx - hint the lookup algorithm looking for updates at around this frequency level -// meta=1 - get feed metadata and status information instead of performing a feed query -// NOTE: meta=1 will be deprecated in the near future -func (s *Server) HandleGetFeed(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - log.Debug("handle.get.feed", "ruid", ruid) - var err error - - fd, err := s.api.ResolveFeed(r.Context(), uri, r.URL.Query()) - if err != nil { // couldn't parse query string or retrieve manifest - getFail.Inc(1) - httpStatus := http.StatusBadRequest - if err == api.ErrCannotLoadFeedManifest || err == api.ErrCannotResolveFeedURI { - httpStatus = http.StatusNotFound - } - respondError(w, r, fmt.Sprintf("cannot retrieve feed information from manifest: %s", err), httpStatus) - return - } - - // determine if the query specifies period and version or it is a metadata query - if r.URL.Query().Get("meta") == "1" { - unsignedUpdateRequest, err := s.api.FeedsNewRequest(r.Context(), fd) - if err != nil { - getFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot retrieve feed metadata for feed=%s: %s", fd.Hex(), err), http.StatusNotFound) - return - } - rawResponse, err := unsignedUpdateRequest.MarshalJSON() - if err != nil { - respondError(w, r, fmt.Sprintf("cannot encode unsigned feed update request: %v", err), http.StatusInternalServerError) - return - } - w.Header().Add("Content-type", "application/json") - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, string(rawResponse)) - return - } - - lookupParams := &feed.Query{Feed: *fd} - if err = lookupParams.FromValues(r.URL.Query()); err != nil { // parse period, version - respondError(w, r, fmt.Sprintf("invalid feed update request:%s", err), http.StatusBadRequest) - return - } - - data, err := s.api.FeedsLookup(r.Context(), lookupParams) - - // any error from the switch statement will end up here - if err != nil { - code, err2 := s.translateFeedError(w, r, "feed lookup fail", err) - respondError(w, r, err2.Error(), code) - return - } - - // All ok, serve the retrieved update - log.Debug("Found update", "feed", fd.Hex(), "ruid", ruid) - w.Header().Set("Content-Type", api.MimeOctetStream) - http.ServeContent(w, r, "", time.Now(), bytes.NewReader(data)) -} - -func (s *Server) translateFeedError(w http.ResponseWriter, r *http.Request, supErr string, err error) (int, error) { - code := 0 - defaultErr := fmt.Errorf("%s: %v", supErr, err) - rsrcErr, ok := err.(*feed.Error) - if !ok && rsrcErr != nil { - code = rsrcErr.Code() - } - switch code { - case storage.ErrInvalidValue: - return http.StatusBadRequest, defaultErr - case storage.ErrNotFound, storage.ErrNotSynced, storage.ErrNothingToReturn, storage.ErrInit: - return http.StatusNotFound, defaultErr - case storage.ErrUnauthorized, storage.ErrInvalidSignature: - return http.StatusUnauthorized, defaultErr - case storage.ErrDataOverflow: - return http.StatusRequestEntityTooLarge, defaultErr - } - - return http.StatusInternalServerError, defaultErr -} - -// HandleGet handles a GET request to -// - bzz-raw:// and responds with the raw content stored at the -// given storage key -// - bzz-hash:// and responds with the hash of the content stored -// at the given storage key as a text/plain response -func (s *Server) HandleGet(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - log.Debug("handle.get", "ruid", ruid, "uri", uri) - getCount.Inc(1) - _, pass, _ := r.BasicAuth() - - addr, err := s.api.ResolveURI(r.Context(), uri, pass) - if err != nil { - getFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot resolve %s: %s", uri.Addr, err), http.StatusNotFound) - return - } - w.Header().Set("Cache-Control", "max-age=2147483648, immutable") // url was of type bzz:///path, so we are sure it is immutable. - - log.Debug("handle.get: resolved", "ruid", ruid, "key", addr) - - // if path is set, interpret as a manifest and return the - // raw entry at the given path - - etag := common.Bytes2Hex(addr) - noneMatchEtag := r.Header.Get("If-None-Match") - w.Header().Set("ETag", fmt.Sprintf("%q", etag)) // set etag to manifest key or raw entry key. - if noneMatchEtag != "" { - if bytes.Equal(storage.Address(common.Hex2Bytes(noneMatchEtag)), addr) { - w.WriteHeader(http.StatusNotModified) - return - } - } - - // check the root chunk exists by retrieving the file's size - reader, isEncrypted := s.api.Retrieve(r.Context(), addr) - if _, err := reader.Size(r.Context(), nil); err != nil { - getFail.Inc(1) - respondError(w, r, fmt.Sprintf("root chunk not found %s: %s", addr, err), http.StatusNotFound) - return - } - - w.Header().Set("X-Decrypted", fmt.Sprintf("%v", isEncrypted)) - - switch { - case uri.Raw(): - // allow the request to overwrite the content type using a query - // parameter - if typ := r.URL.Query().Get("content_type"); typ != "" { - w.Header().Set("Content-Type", typ) - } - http.ServeContent(w, r, "", time.Now(), reader) - case uri.Hash(): - w.Header().Set("Content-Type", "text/plain") - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, addr) - } -} - -// HandleGetList handles a GET request to bzz-list:// and returns -// a list of all files contained in under grouped into -// common prefixes using "/" as a delimiter -func (s *Server) HandleGetList(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - _, credentials, _ := r.BasicAuth() - log.Debug("handle.get.list", "ruid", ruid, "uri", uri) - getListCount.Inc(1) - - // ensure the root path has a trailing slash so that relative URLs work - if uri.Path == "" && !strings.HasSuffix(r.URL.Path, "/") { - http.Redirect(w, r, r.URL.Path+"/", http.StatusMovedPermanently) - return - } - - addr, err := s.api.Resolve(r.Context(), uri.Addr) - if err != nil { - getListFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot resolve %s: %s", uri.Addr, err), http.StatusNotFound) - return - } - log.Debug("handle.get.list: resolved", "ruid", ruid, "key", addr) - - list, err := s.api.GetManifestList(r.Context(), s.api.Decryptor(r.Context(), credentials), addr, uri.Path) - if err != nil { - getListFail.Inc(1) - if isDecryptError(err) { - w.Header().Set("WWW-Authenticate", fmt.Sprintf("Basic realm=%q", addr.String())) - respondError(w, r, err.Error(), http.StatusUnauthorized) - return - } - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - - // if the client wants HTML (e.g. a browser) then render the list as a - // HTML index with relative URLs - if strings.Contains(r.Header.Get("Accept"), "text/html") { - w.Header().Set("Content-Type", "text/html") - err := TemplatesMap["bzz-list"].Execute(w, &htmlListData{ - URI: &api.URI{ - Scheme: "bzz", - Addr: uri.Addr, - Path: uri.Path, - }, - List: &list, - }) - if err != nil { - getListFail.Inc(1) - log.Error(fmt.Sprintf("error rendering list HTML: %s", err)) - } - return - } - - w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(&list) -} - -// HandleGetFile handles a GET request to bzz:/// and responds -// with the content of the file at from the given -func (s *Server) HandleGetFile(w http.ResponseWriter, r *http.Request) { - ruid := GetRUID(r.Context()) - uri := GetURI(r.Context()) - _, credentials, _ := r.BasicAuth() - log.Debug("handle.get.file", "ruid", ruid, "uri", r.RequestURI) - getFileCount.Inc(1) - - // ensure the root path has a trailing slash so that relative URLs work - if uri.Path == "" && !strings.HasSuffix(r.URL.Path, "/") { - http.Redirect(w, r, r.URL.Path+"/", http.StatusMovedPermanently) - return - } - var err error - manifestAddr := uri.Address() - - if manifestAddr == nil { - manifestAddr, err = s.api.Resolve(r.Context(), uri.Addr) - if err != nil { - getFileFail.Inc(1) - respondError(w, r, fmt.Sprintf("cannot resolve %s: %s", uri.Addr, err), http.StatusNotFound) - return - } - } else { - w.Header().Set("Cache-Control", "max-age=2147483648, immutable") // url was of type bzz:///path, so we are sure it is immutable. - } - - log.Debug("handle.get.file: resolved", "ruid", ruid, "key", manifestAddr) - - reader, contentType, status, contentKey, err := s.api.Get(r.Context(), s.api.Decryptor(r.Context(), credentials), manifestAddr, uri.Path) - - etag := common.Bytes2Hex(contentKey) - noneMatchEtag := r.Header.Get("If-None-Match") - w.Header().Set("ETag", fmt.Sprintf("%q", etag)) // set etag to actual content key. - if noneMatchEtag != "" { - if bytes.Equal(storage.Address(common.Hex2Bytes(noneMatchEtag)), contentKey) { - w.WriteHeader(http.StatusNotModified) - return - } - } - - if err != nil { - if isDecryptError(err) { - w.Header().Set("WWW-Authenticate", fmt.Sprintf("Basic realm=%q", manifestAddr)) - respondError(w, r, err.Error(), http.StatusUnauthorized) - return - } - - switch status { - case http.StatusNotFound: - getFileNotFound.Inc(1) - respondError(w, r, err.Error(), http.StatusNotFound) - default: - getFileFail.Inc(1) - respondError(w, r, err.Error(), http.StatusInternalServerError) - } - return - } - - //the request results in ambiguous files - //e.g. /read with readme.md and readinglist.txt available in manifest - if status == http.StatusMultipleChoices { - list, err := s.api.GetManifestList(r.Context(), s.api.Decryptor(r.Context(), credentials), manifestAddr, uri.Path) - if err != nil { - getFileFail.Inc(1) - if isDecryptError(err) { - w.Header().Set("WWW-Authenticate", fmt.Sprintf("Basic realm=%q", manifestAddr)) - respondError(w, r, err.Error(), http.StatusUnauthorized) - return - } - respondError(w, r, err.Error(), http.StatusInternalServerError) - return - } - - log.Debug(fmt.Sprintf("Multiple choices! --> %v", list), "ruid", ruid) - //show a nice page links to available entries - ShowMultipleChoices(w, r, list) - return - } - - // check the root chunk exists by retrieving the file's size - if _, err := reader.Size(r.Context(), nil); err != nil { - getFileNotFound.Inc(1) - respondError(w, r, fmt.Sprintf("file not found %s: %s", uri, err), http.StatusNotFound) - return - } - - if contentType != "" { - w.Header().Set("Content-Type", contentType) - } - - fileName := uri.Addr - if found := path.Base(uri.Path); found != "" && found != "." && found != "/" { - fileName = found - } - w.Header().Set("Content-Disposition", fmt.Sprintf("inline; filename=\"%s\"", fileName)) - - http.ServeContent(w, r, fileName, time.Now(), newBufferedReadSeeker(reader, getFileBufferSize)) -} - -// The size of buffer used for bufio.Reader on LazyChunkReader passed to -// http.ServeContent in HandleGetFile. -// Warning: This value influences the number of chunk requests and chunker join goroutines -// per file request. -// Recommended value is 4 times the io.Copy default buffer value which is 32kB. -const getFileBufferSize = 4 * 32 * 1024 - -// bufferedReadSeeker wraps bufio.Reader to expose Seek method -// from the provied io.ReadSeeker in newBufferedReadSeeker. -type bufferedReadSeeker struct { - r io.Reader - s io.Seeker -} - -// newBufferedReadSeeker creates a new instance of bufferedReadSeeker, -// out of io.ReadSeeker. Argument `size` is the size of the read buffer. -func newBufferedReadSeeker(readSeeker io.ReadSeeker, size int) bufferedReadSeeker { - return bufferedReadSeeker{ - r: bufio.NewReaderSize(readSeeker, size), - s: readSeeker, - } -} - -func (b bufferedReadSeeker) Read(p []byte) (n int, err error) { - return b.r.Read(p) -} - -func (b bufferedReadSeeker) Seek(offset int64, whence int) (int64, error) { - return b.s.Seek(offset, whence) -} - -type loggingResponseWriter struct { - http.ResponseWriter - statusCode int -} - -func newLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter { - return &loggingResponseWriter{w, http.StatusOK} -} - -func (lrw *loggingResponseWriter) WriteHeader(code int) { - lrw.statusCode = code - lrw.ResponseWriter.WriteHeader(code) -} - -func isDecryptError(err error) bool { - return strings.Contains(err.Error(), api.ErrDecrypt.Error()) -} diff --git a/swarm/api/http/server_test.go b/swarm/api/http/server_test.go deleted file mode 100644 index e82762ce0585..000000000000 --- a/swarm/api/http/server_test.go +++ /dev/null @@ -1,1313 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "archive/tar" - "bytes" - "context" - "encoding/json" - "errors" - "flag" - "fmt" - "io" - "io/ioutil" - "math/big" - "mime/multipart" - "net/http" - "net/url" - "os" - "path" - "strconv" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/api" - swarm "github.com/ethereum/go-ethereum/swarm/api/client" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -func init() { - loglevel := flag.Int("loglevel", 2, "loglevel") - flag.Parse() - log.Root().SetHandler(log.CallerFileHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(os.Stderr, log.TerminalFormat(true))))) -} - -func serverFunc(api *api.API) TestServer { - return NewServer(api, "") -} - -func newTestSigner() (*feed.GenericSigner, error) { - privKey, err := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef") - if err != nil { - return nil, err - } - return feed.NewGenericSigner(privKey), nil -} - -// Test the transparent resolving of feed updates with bzz:// scheme -// -// First upload data to bzz:, and store the Swarm hash to the resulting manifest in a feed update. -// This effectively uses a feed to store a pointer to content rather than the content itself -// Retrieving the update with the Swarm hash should return the manifest pointing directly to the data -// and raw retrieve of that hash should return the data -func TestBzzWithFeed(t *testing.T) { - - signer, _ := newTestSigner() - - // Initialize Swarm test server - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - // put together some data for our test: - dataBytes := []byte(` - // - // Create some data our manifest will point to. Data that could be very big and wouldn't fit in a feed update. - // So what we are going to do is upload it to Swarm bzz:// and obtain a **manifest hash** pointing to it: - // - // MANIFEST HASH --> DATA - // - // Then, we store that **manifest hash** into a Swarm Feed update. Once we have done this, - // we can use the **feed manifest hash** in bzz:// instead, this way: bzz://feed-manifest-hash. - // - // FEED MANIFEST HASH --> MANIFEST HASH --> DATA - // - // Given that we can update the feed at any time with a new **manifest hash** but the **feed manifest hash** - // stays constant, we have effectively created a fixed address to changing content. (Applause) - // - // FEED MANIFEST HASH (the same) --> MANIFEST HASH(2) --> DATA(2) ... - // - `) - - // POST data to bzz and get back a content-addressed **manifest hash** pointing to it. - resp, err := http.Post(fmt.Sprintf("%s/bzz:/", srv.URL), "text/plain", bytes.NewReader([]byte(dataBytes))) - if err != nil { - t.Fatal(err) - } - - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - manifestAddressHex, err := ioutil.ReadAll(resp.Body) - - if err != nil { - t.Fatal(err) - } - - manifestAddress := common.FromHex(string(manifestAddressHex)) - - log.Info("added data", "manifest", string(manifestAddressHex)) - - // At this point we have uploaded the data and have a manifest pointing to it - // Now store that manifest address in a feed update. - // We also want a feed manifest, so we can use it to refer to the feed. - - // First, create a topic for our feed: - topic, _ := feed.NewTopic("interesting topic indeed", nil) - - // Create a feed update request: - updateRequest := feed.NewFirstRequest(topic) - - // Store the **manifest address** as data into the feed update. - updateRequest.SetData(manifestAddress) - - // Sign the update - if err := updateRequest.Sign(signer); err != nil { - t.Fatal(err) - } - log.Info("added data", "data", common.ToHex(manifestAddress)) - - // Build the feed update http request: - feedUpdateURL, err := url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL)) - if err != nil { - t.Fatal(err) - } - query := feedUpdateURL.Query() - body := updateRequest.AppendValues(query) // this adds all query parameters and returns the data to be posted - query.Set("manifest", "1") // indicate we want a feed manifest back - feedUpdateURL.RawQuery = query.Encode() - - // submit the feed update request to Swarm - resp, err = http.Post(feedUpdateURL.String(), "application/octet-stream", bytes.NewReader(body)) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - - feedManifestAddressHex, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - feedManifestAddress := &storage.Address{} - err = json.Unmarshal(feedManifestAddressHex, feedManifestAddress) - if err != nil { - t.Fatalf("data %s could not be unmarshaled: %v", feedManifestAddressHex, err) - } - - correctManifestAddrHex := "747c402e5b9dc715a25a4393147512167bab018a007fad7cdcd9adc7fce1ced2" - if feedManifestAddress.Hex() != correctManifestAddrHex { - t.Fatalf("Response feed manifest address mismatch, expected '%s', got '%s'", correctManifestAddrHex, feedManifestAddress.Hex()) - } - - // get bzz manifest transparent feed update resolve - getBzzURL := fmt.Sprintf("%s/bzz:/%s", srv.URL, feedManifestAddress) - resp, err = http.Get(getBzzURL) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - retrievedData, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(retrievedData, []byte(dataBytes)) { - t.Fatalf("retrieved data mismatch, expected %x, got %x", dataBytes, retrievedData) - } -} - -// Test Swarm feeds using the raw update methods -func TestBzzFeed(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - signer, _ := newTestSigner() - - defer srv.Close() - - // data of update 1 - update1Data := testutil.RandomBytes(1, 666) - update1Timestamp := srv.CurrentTime - //data for update 2 - update2Data := []byte("foo") - - topic, _ := feed.NewTopic("foo.eth", nil) - updateRequest := feed.NewFirstRequest(topic) - updateRequest.SetData(update1Data) - - if err := updateRequest.Sign(signer); err != nil { - t.Fatal(err) - } - - // creates feed and sets update 1 - testUrl, err := url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL)) - if err != nil { - t.Fatal(err) - } - urlQuery := testUrl.Query() - body := updateRequest.AppendValues(urlQuery) // this adds all query parameters - urlQuery.Set("manifest", "1") // indicate we want a manifest back - testUrl.RawQuery = urlQuery.Encode() - - resp, err := http.Post(testUrl.String(), "application/octet-stream", bytes.NewReader(body)) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - rsrcResp := &storage.Address{} - err = json.Unmarshal(b, rsrcResp) - if err != nil { - t.Fatalf("data %s could not be unmarshaled: %v", b, err) - } - - correctManifestAddrHex := "bb056a5264c295c2b0f613c8409b9c87ce9d71576ace02458160df4cc894210b" - if rsrcResp.Hex() != correctManifestAddrHex { - t.Fatalf("Response feed manifest mismatch, expected '%s', got '%s'", correctManifestAddrHex, rsrcResp.Hex()) - } - - // get the manifest - testRawUrl := fmt.Sprintf("%s/bzz-raw:/%s", srv.URL, rsrcResp) - resp, err = http.Get(testRawUrl) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - manifest := &api.Manifest{} - err = json.Unmarshal(b, manifest) - if err != nil { - t.Fatal(err) - } - if len(manifest.Entries) != 1 { - t.Fatalf("Manifest has %d entries", len(manifest.Entries)) - } - correctFeedHex := "0x666f6f2e65746800000000000000000000000000000000000000000000000000c96aaa54e2d44c299564da76e1cd3184a2386b8d" - if manifest.Entries[0].Feed.Hex() != correctFeedHex { - t.Fatalf("Expected manifest Feed '%s', got '%s'", correctFeedHex, manifest.Entries[0].Feed.Hex()) - } - - // take the chance to have bzz: crash on resolving a feed update that does not contain - // a swarm hash: - testBzzUrl := fmt.Sprintf("%s/bzz:/%s", srv.URL, rsrcResp) - resp, err = http.Get(testBzzUrl) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode == http.StatusOK { - t.Fatal("Expected error status since feed update does not contain a Swarm hash. Received 200 OK") - } - _, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - // get non-existent name, should fail - testBzzResUrl := fmt.Sprintf("%s/bzz-feed:/bar", srv.URL) - resp, err = http.Get(testBzzResUrl) - if err != nil { - t.Fatal(err) - } - - if resp.StatusCode != http.StatusNotFound { - t.Fatalf("Expected get non-existent feed manifest to fail with StatusNotFound (404), got %d", resp.StatusCode) - } - - resp.Body.Close() - - // get latest update through bzz-feed directly - log.Info("get update latest = 1.1", "addr", correctManifestAddrHex) - testBzzResUrl = fmt.Sprintf("%s/bzz-feed:/%s", srv.URL, correctManifestAddrHex) - resp, err = http.Get(testBzzResUrl) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(update1Data, b) { - t.Fatalf("Expected body '%x', got '%x'", update1Data, b) - } - - // update 2 - // Move the clock ahead 1 second - srv.CurrentTime++ - log.Info("update 2") - - // 1.- get metadata about this feed - testBzzResUrl = fmt.Sprintf("%s/bzz-feed:/%s/", srv.URL, correctManifestAddrHex) - resp, err = http.Get(testBzzResUrl + "?meta=1") - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("Get feed metadata returned %s", resp.Status) - } - b, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - updateRequest = &feed.Request{} - if err = updateRequest.UnmarshalJSON(b); err != nil { - t.Fatalf("Error decoding feed metadata: %s", err) - } - updateRequest.SetData(update2Data) - if err = updateRequest.Sign(signer); err != nil { - t.Fatal(err) - } - testUrl, err = url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL)) - if err != nil { - t.Fatal(err) - } - urlQuery = testUrl.Query() - body = updateRequest.AppendValues(urlQuery) // this adds all query parameters - goodQueryParameters := urlQuery.Encode() // save the query parameters for a second attempt - - // create bad query parameters in which the signature is missing - urlQuery.Del("signature") - testUrl.RawQuery = urlQuery.Encode() - - // 1st attempt with bad query parameters in which the signature is missing - resp, err = http.Post(testUrl.String(), "application/octet-stream", bytes.NewReader(body)) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - expectedCode := http.StatusBadRequest - if resp.StatusCode != expectedCode { - t.Fatalf("Update returned %s. Expected %d", resp.Status, expectedCode) - } - - // 2nd attempt with bad query parameters in which the signature is of incorrect length - urlQuery.Set("signature", "0xabcd") // should be 130 hex chars - resp, err = http.Post(testUrl.String(), "application/octet-stream", bytes.NewReader(body)) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - expectedCode = http.StatusBadRequest - if resp.StatusCode != expectedCode { - t.Fatalf("Update returned %s. Expected %d", resp.Status, expectedCode) - } - - // 3rd attempt, with good query parameters: - testUrl.RawQuery = goodQueryParameters - resp, err = http.Post(testUrl.String(), "application/octet-stream", bytes.NewReader(body)) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - expectedCode = http.StatusOK - if resp.StatusCode != expectedCode { - t.Fatalf("Update returned %s. Expected %d", resp.Status, expectedCode) - } - - // get latest update through bzz-feed directly - log.Info("get update 1.2") - testBzzResUrl = fmt.Sprintf("%s/bzz-feed:/%s", srv.URL, correctManifestAddrHex) - resp, err = http.Get(testBzzResUrl) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(update2Data, b) { - t.Fatalf("Expected body '%x', got '%x'", update2Data, b) - } - - // test manifest-less queries - log.Info("get first update in update1Timestamp via direct query") - query := feed.NewQuery(&updateRequest.Feed, update1Timestamp, lookup.NoClue) - - urlq, err := url.Parse(fmt.Sprintf("%s/bzz-feed:/", srv.URL)) - if err != nil { - t.Fatal(err) - } - - values := urlq.Query() - query.AppendValues(values) // this adds feed query parameters - urlq.RawQuery = values.Encode() - resp, err = http.Get(urlq.String()) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(update1Data, b) { - t.Fatalf("Expected body '%x', got '%x'", update1Data, b) - } - -} - -func TestBzzGetPath(t *testing.T) { - testBzzGetPath(false, t) - testBzzGetPath(true, t) -} - -func testBzzGetPath(encrypted bool, t *testing.T) { - var err error - - testmanifest := []string{ - `{"entries":[{"path":"b","hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","contentType":"","status":0},{"path":"c","hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","contentType":"","status":0}]}`, - `{"entries":[{"path":"a","hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","contentType":"","status":0},{"path":"b/","hash":"","contentType":"application/bzz-manifest+json","status":0}]}`, - `{"entries":[{"path":"a/","hash":"","contentType":"application/bzz-manifest+json","status":0}]}`, - } - - testrequests := make(map[string]int) - testrequests["/"] = 2 - testrequests["/a/"] = 1 - testrequests["/a/b/"] = 0 - testrequests["/x"] = 0 - testrequests[""] = 0 - - expectedfailrequests := []string{"", "/x"} - - reader := [3]*bytes.Reader{} - - addr := [3]storage.Address{} - - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - for i, mf := range testmanifest { - reader[i] = bytes.NewReader([]byte(mf)) - var wait func(context.Context) error - ctx := context.TODO() - addr[i], wait, err = srv.FileStore.Store(ctx, reader[i], int64(len(mf)), encrypted) - if err != nil { - t.Fatal(err) - } - for j := i + 1; j < len(testmanifest); j++ { - testmanifest[j] = strings.Replace(testmanifest[j], fmt.Sprintf("", i), addr[i].Hex(), -1) - } - err = wait(ctx) - if err != nil { - t.Fatal(err) - } - } - - rootRef := addr[2].Hex() - - _, err = http.Get(srv.URL + "/bzz-raw:/" + rootRef + "/a") - if err != nil { - t.Fatalf("Failed to connect to proxy: %v", err) - } - - for k, v := range testrequests { - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz-raw:/" - if k != "" { - url += rootRef + "/" + k[1:] + "?content_type=text/plain" - } - resp, err = http.Get(url) - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("Error while reading response body: %v", err) - } - - if string(respbody) != testmanifest[v] { - isexpectedfailrequest := false - - for _, r := range expectedfailrequests { - if k == r { - isexpectedfailrequest = true - } - } - if !isexpectedfailrequest { - t.Fatalf("Response body does not match, expected: %v, got %v", testmanifest[v], string(respbody)) - } - } - } - - for k, v := range testrequests { - var resp *http.Response - var respbody []byte - - url := srv.URL + "/bzz-hash:/" - if k != "" { - url += rootRef + "/" + k[1:] - } - resp, err = http.Get(url) - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("Read request body: %v", err) - } - - if string(respbody) != addr[v].Hex() { - isexpectedfailrequest := false - - for _, r := range expectedfailrequests { - if k == r { - isexpectedfailrequest = true - } - } - if !isexpectedfailrequest { - t.Fatalf("Response body does not match, expected: %v, got %v", addr[v], string(respbody)) - } - } - } - - ref := addr[2].Hex() - - for _, c := range []struct { - path string - json string - pageFragments []string - }{ - { - path: "/", - json: `{"common_prefixes":["a/"]}`, - pageFragments: []string{ - fmt.Sprintf("Swarm index of bzz:/%s/", ref), - `a/`, - }, - }, - { - path: "/a/", - json: `{"common_prefixes":["a/b/"],"entries":[{"hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","path":"a/a","mod_time":"0001-01-01T00:00:00Z"}]}`, - pageFragments: []string{ - fmt.Sprintf("Swarm index of bzz:/%s/a/", ref), - `b/`, - fmt.Sprintf(`a`, ref), - }, - }, - { - path: "/a/b/", - json: `{"entries":[{"hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","path":"a/b/b","mod_time":"0001-01-01T00:00:00Z"},{"hash":"011b4d03dd8c01f1049143cf9c4c817e4b167f1d1b83e5c6f0f10d89ba1e7bce","path":"a/b/c","mod_time":"0001-01-01T00:00:00Z"}]}`, - pageFragments: []string{ - fmt.Sprintf("Swarm index of bzz:/%s/a/b/", ref), - fmt.Sprintf(`b`, ref), - fmt.Sprintf(`c`, ref), - }, - }, - { - path: "/x", - }, - { - path: "", - }, - } { - k := c.path - url := srv.URL + "/bzz-list:/" - if k != "" { - url += rootRef + "/" + k[1:] - } - t.Run("json list "+c.path, func(t *testing.T) { - resp, err := http.Get(url) - if err != nil { - t.Fatalf("HTTP request: %v", err) - } - defer resp.Body.Close() - respbody, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("Read response body: %v", err) - } - - body := strings.TrimSpace(string(respbody)) - if body != c.json { - isexpectedfailrequest := false - - for _, r := range expectedfailrequests { - if k == r { - isexpectedfailrequest = true - } - } - if !isexpectedfailrequest { - t.Errorf("Response list body %q does not match, expected: %v, got %v", k, c.json, body) - } - } - }) - t.Run("html list "+c.path, func(t *testing.T) { - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - t.Fatalf("New request: %v", err) - } - req.Header.Set("Accept", "text/html") - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Fatalf("HTTP request: %v", err) - } - defer resp.Body.Close() - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("Read response body: %v", err) - } - - body := string(b) - - for _, f := range c.pageFragments { - if !strings.Contains(body, f) { - isexpectedfailrequest := false - - for _, r := range expectedfailrequests { - if k == r { - isexpectedfailrequest = true - } - } - if !isexpectedfailrequest { - t.Errorf("Response list body %q does not contain %q: body %q", k, f, body) - } - } - } - }) - } - - nonhashtests := []string{ - srv.URL + "/bzz:/name", - srv.URL + "/bzz-immutable:/nonhash", - srv.URL + "/bzz-raw:/nonhash", - srv.URL + "/bzz-list:/nonhash", - srv.URL + "/bzz-hash:/nonhash", - } - - nonhashresponses := []string{ - `cannot resolve name: no DNS to resolve name: "name"`, - `cannot resolve nonhash: no DNS to resolve name: "nonhash"`, - `cannot resolve nonhash: no DNS to resolve name: "nonhash"`, - `cannot resolve nonhash: no DNS to resolve name: "nonhash"`, - `cannot resolve nonhash: no DNS to resolve name: "nonhash"`, - } - - for i, url := range nonhashtests { - var resp *http.Response - var respbody []byte - - resp, err = http.Get(url) - - if err != nil { - t.Fatalf("Request failed: %v", err) - } - defer resp.Body.Close() - respbody, err = ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("ReadAll failed: %v", err) - } - if !strings.Contains(string(respbody), nonhashresponses[i]) { - t.Fatalf("Non-Hash response body does not match, expected: %v, got: %v", nonhashresponses[i], string(respbody)) - } - } -} - -func TestBzzTar(t *testing.T) { - testBzzTar(false, t) - testBzzTar(true, t) -} - -func testBzzTar(encrypted bool, t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - fileNames := []string{"tmp1.txt", "tmp2.lock", "tmp3.rtf"} - fileContents := []string{"tmp1textfilevalue", "tmp2lockfilelocked", "tmp3isjustaplaintextfile"} - - buf := &bytes.Buffer{} - tw := tar.NewWriter(buf) - defer tw.Close() - - for i, v := range fileNames { - size := int64(len(fileContents[i])) - hdr := &tar.Header{ - Name: v, - Mode: 0644, - Size: size, - ModTime: time.Now(), - Xattrs: map[string]string{ - "user.swarm.content-type": "text/plain", - }, - } - if err := tw.WriteHeader(hdr); err != nil { - t.Fatal(err) - } - - // copy the file into the tar stream - n, err := io.Copy(tw, bytes.NewBufferString(fileContents[i])) - if err != nil { - t.Fatal(err) - } else if n != size { - t.Fatal("size mismatch") - } - } - - //post tar stream - url := srv.URL + "/bzz:/" - if encrypted { - url = url + "encrypt" - } - req, err := http.NewRequest("POST", url, buf) - if err != nil { - t.Fatal(err) - } - req.Header.Add("Content-Type", "application/x-tar") - client := &http.Client{} - resp2, err := client.Do(req) - if err != nil { - t.Fatal(err) - } - if resp2.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp2.Status) - } - swarmHash, err := ioutil.ReadAll(resp2.Body) - resp2.Body.Close() - if err != nil { - t.Fatal(err) - } - - // now do a GET to get a tarball back - req, err = http.NewRequest("GET", fmt.Sprintf(srv.URL+"/bzz:/%s", string(swarmHash)), nil) - if err != nil { - t.Fatal(err) - } - req.Header.Add("Accept", "application/x-tar") - resp2, err = client.Do(req) - if err != nil { - t.Fatal(err) - } - defer resp2.Body.Close() - - if h := resp2.Header.Get("Content-Type"); h != "application/x-tar" { - t.Fatalf("Content-Type header expected: application/x-tar, got: %s", h) - } - - expectedFileName := string(swarmHash) + ".tar" - expectedContentDisposition := fmt.Sprintf("inline; filename=\"%s\"", expectedFileName) - if h := resp2.Header.Get("Content-Disposition"); h != expectedContentDisposition { - t.Fatalf("Content-Disposition header expected: %s, got: %s", expectedContentDisposition, h) - } - - file, err := ioutil.TempFile("", "swarm-downloaded-tarball") - if err != nil { - t.Fatal(err) - } - defer os.Remove(file.Name()) - _, err = io.Copy(file, resp2.Body) - if err != nil { - t.Fatalf("error getting tarball: %v", err) - } - file.Sync() - file.Close() - - tarFileHandle, err := os.Open(file.Name()) - if err != nil { - t.Fatal(err) - } - tr := tar.NewReader(tarFileHandle) - - for { - hdr, err := tr.Next() - if err == io.EOF { - break - } else if err != nil { - t.Fatalf("error reading tar stream: %s", err) - } - bb := make([]byte, hdr.Size) - _, err = tr.Read(bb) - if err != nil && err != io.EOF { - t.Fatal(err) - } - passed := false - for i, v := range fileNames { - if v == hdr.Name { - if string(bb) == fileContents[i] { - passed = true - break - } - } - } - if !passed { - t.Fatalf("file %s did not pass content assertion", hdr.Name) - } - } -} - -// TestBzzRootRedirect tests that getting the root path of a manifest without -// a trailing slash gets redirected to include the trailing slash so that -// relative URLs work as expected. -func TestBzzRootRedirect(t *testing.T) { - testBzzRootRedirect(false, t) -} -func TestBzzRootRedirectEncrypted(t *testing.T) { - testBzzRootRedirect(true, t) -} - -func testBzzRootRedirect(toEncrypt bool, t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - // create a manifest with some data at the root path - client := swarm.NewClient(srv.URL) - data := []byte("data") - file := &swarm.File{ - ReadCloser: ioutil.NopCloser(bytes.NewReader(data)), - ManifestEntry: api.ManifestEntry{ - Path: "", - ContentType: "text/plain", - Size: int64(len(data)), - }, - } - hash, err := client.Upload(file, "", toEncrypt) - if err != nil { - t.Fatal(err) - } - - // define a CheckRedirect hook which ensures there is only a single - // redirect to the correct URL - redirected := false - httpClient := http.Client{ - CheckRedirect: func(req *http.Request, via []*http.Request) error { - if redirected { - return errors.New("too many redirects") - } - redirected = true - expectedPath := "/bzz:/" + hash + "/" - if req.URL.Path != expectedPath { - return fmt.Errorf("expected redirect to %q, got %q", expectedPath, req.URL.Path) - } - return nil - }, - } - - // perform the GET request and assert the response - res, err := httpClient.Get(srv.URL + "/bzz:/" + hash) - if err != nil { - t.Fatal(err) - } - defer res.Body.Close() - if !redirected { - t.Fatal("expected GET /bzz:/ to redirect to /bzz:// but it didn't") - } - gotData, err := ioutil.ReadAll(res.Body) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(gotData, data) { - t.Fatalf("expected response to equal %q, got %q", data, gotData) - } -} - -func TestMethodsNotAllowed(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - databytes := "bar" - for _, c := range []struct { - url string - code int - }{ - { - url: fmt.Sprintf("%s/bzz-list:/", srv.URL), - code: http.StatusMethodNotAllowed, - }, { - url: fmt.Sprintf("%s/bzz-hash:/", srv.URL), - code: http.StatusMethodNotAllowed, - }, - { - url: fmt.Sprintf("%s/bzz-immutable:/", srv.URL), - code: http.StatusMethodNotAllowed, - }, - } { - res, _ := http.Post(c.url, "text/plain", bytes.NewReader([]byte(databytes))) - if res.StatusCode != c.code { - t.Fatalf("should have failed. requested url: %s, expected code %d, got %d", c.url, c.code, res.StatusCode) - } - } - -} - -func httpDo(httpMethod string, url string, reqBody io.Reader, headers map[string]string, verbose bool, t *testing.T) (*http.Response, string) { - // Build the Request - req, err := http.NewRequest(httpMethod, url, reqBody) - if err != nil { - t.Fatal(err) - } - for key, value := range headers { - req.Header.Set(key, value) - } - if verbose { - t.Log(req.Method, req.URL, req.Header, req.Body) - } - - // Send Request out - httpClient := &http.Client{} - res, err := httpClient.Do(req) - if err != nil { - t.Fatal(err) - } - - // Read the HTTP Body - buffer, err := ioutil.ReadAll(res.Body) - if err != nil { - t.Fatal(err) - } - defer res.Body.Close() - body := string(buffer) - - return res, body -} - -func TestGet(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - for _, testCase := range []struct { - uri string - method string - headers map[string]string - expectedStatusCode int - assertResponseBody string - verbose bool - }{ - { - uri: fmt.Sprintf("%s/", srv.URL), - method: "GET", - headers: map[string]string{"Accept": "text/html"}, - expectedStatusCode: http.StatusOK, - assertResponseBody: "Swarm: Serverless Hosting Incentivised Peer-To-Peer Storage And Content Distribution", - verbose: false, - }, - { - uri: fmt.Sprintf("%s/", srv.URL), - method: "GET", - headers: map[string]string{"Accept": "application/json"}, - expectedStatusCode: http.StatusOK, - assertResponseBody: "Swarm: Please request a valid ENS or swarm hash with the appropriate bzz scheme", - verbose: false, - }, - { - uri: fmt.Sprintf("%s/robots.txt", srv.URL), - method: "GET", - headers: map[string]string{"Accept": "text/html"}, - expectedStatusCode: http.StatusOK, - assertResponseBody: "User-agent: *\nDisallow: /", - verbose: false, - }, - { - uri: fmt.Sprintf("%s/nonexistent_path", srv.URL), - method: "GET", - headers: map[string]string{}, - expectedStatusCode: http.StatusNotFound, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz:asdf/", srv.URL), - method: "GET", - headers: map[string]string{}, - expectedStatusCode: http.StatusNotFound, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/tbz2/", srv.URL), - method: "GET", - headers: map[string]string{}, - expectedStatusCode: http.StatusNotFound, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz-rack:/", srv.URL), - method: "GET", - headers: map[string]string{}, - expectedStatusCode: http.StatusNotFound, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz-ls", srv.URL), - method: "GET", - headers: map[string]string{}, - expectedStatusCode: http.StatusNotFound, - verbose: false, - }} { - t.Run("GET "+testCase.uri, func(t *testing.T) { - res, body := httpDo(testCase.method, testCase.uri, nil, testCase.headers, testCase.verbose, t) - if res.StatusCode != testCase.expectedStatusCode { - t.Fatalf("expected status code %d but got %d", testCase.expectedStatusCode, res.StatusCode) - } - if testCase.assertResponseBody != "" && !strings.Contains(body, testCase.assertResponseBody) { - t.Fatalf("expected response to be: %s but got: %s", testCase.assertResponseBody, body) - } - }) - } -} - -func TestModify(t *testing.T) { - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - swarmClient := swarm.NewClient(srv.URL) - data := []byte("data") - file := &swarm.File{ - ReadCloser: ioutil.NopCloser(bytes.NewReader(data)), - ManifestEntry: api.ManifestEntry{ - Path: "", - ContentType: "text/plain", - Size: int64(len(data)), - }, - } - - hash, err := swarmClient.Upload(file, "", false) - if err != nil { - t.Fatal(err) - } - - for _, testCase := range []struct { - uri string - method string - headers map[string]string - requestBody []byte - expectedStatusCode int - assertResponseBody string - assertResponseHeaders map[string]string - verbose bool - }{ - { - uri: fmt.Sprintf("%s/bzz:/%s", srv.URL, hash), - method: "DELETE", - headers: map[string]string{}, - expectedStatusCode: http.StatusOK, - assertResponseBody: "8b634aea26eec353ac0ecbec20c94f44d6f8d11f38d4578a4c207a84c74ef731", - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz:/%s", srv.URL, hash), - method: "PUT", - headers: map[string]string{}, - expectedStatusCode: http.StatusMethodNotAllowed, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz-raw:/%s", srv.URL, hash), - method: "PUT", - headers: map[string]string{}, - expectedStatusCode: http.StatusMethodNotAllowed, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz:/%s", srv.URL, hash), - method: "PATCH", - headers: map[string]string{}, - expectedStatusCode: http.StatusMethodNotAllowed, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz-raw:/", srv.URL), - method: "POST", - headers: map[string]string{}, - requestBody: []byte("POSTdata"), - expectedStatusCode: http.StatusOK, - assertResponseHeaders: map[string]string{"Content-Length": "64"}, - verbose: false, - }, - { - uri: fmt.Sprintf("%s/bzz-raw:/encrypt", srv.URL), - method: "POST", - headers: map[string]string{}, - requestBody: []byte("POSTdata"), - expectedStatusCode: http.StatusOK, - assertResponseHeaders: map[string]string{"Content-Length": "128"}, - verbose: false, - }, - } { - t.Run(testCase.method+" "+testCase.uri, func(t *testing.T) { - reqBody := bytes.NewReader(testCase.requestBody) - res, body := httpDo(testCase.method, testCase.uri, reqBody, testCase.headers, testCase.verbose, t) - - if res.StatusCode != testCase.expectedStatusCode { - t.Fatalf("expected status code %d but got %d, %s", testCase.expectedStatusCode, res.StatusCode, body) - } - if testCase.assertResponseBody != "" && !strings.Contains(body, testCase.assertResponseBody) { - t.Log(body) - t.Fatalf("expected response %s but got %s", testCase.assertResponseBody, body) - } - for key, value := range testCase.assertResponseHeaders { - if res.Header.Get(key) != value { - t.Logf("expected %s=%s in HTTP response header but got %s", key, value, res.Header.Get(key)) - } - } - }) - } -} - -func TestMultiPartUpload(t *testing.T) { - // POST /bzz:/ Content-Type: multipart/form-data - verbose := false - // Setup Swarm - srv := NewTestSwarmServer(t, serverFunc, nil) - defer srv.Close() - - url := fmt.Sprintf("%s/bzz:/", srv.URL) - - buf := new(bytes.Buffer) - form := multipart.NewWriter(buf) - form.WriteField("name", "John Doe") - file1, _ := form.CreateFormFile("cv", "cv.txt") - file1.Write([]byte("John Doe's Credentials")) - file2, _ := form.CreateFormFile("profile_picture", "profile.jpg") - file2.Write([]byte("imaginethisisjpegdata")) - form.Close() - - headers := map[string]string{ - "Content-Type": form.FormDataContentType(), - "Content-Length": strconv.Itoa(buf.Len()), - } - res, body := httpDo("POST", url, buf, headers, verbose, t) - - if res.StatusCode != http.StatusOK { - t.Fatalf("expected POST multipart/form-data to return 200, but it returned %d", res.StatusCode) - } - if len(body) != 64 { - t.Fatalf("expected POST multipart/form-data to return a 64 char manifest but the answer was %d chars long", len(body)) - } -} - -// TestBzzGetFileWithResolver tests fetching a file using a mocked ENS resolver -func TestBzzGetFileWithResolver(t *testing.T) { - resolver := newTestResolveValidator("") - srv := NewTestSwarmServer(t, serverFunc, resolver) - defer srv.Close() - fileNames := []string{"dir1/tmp1.txt", "dir2/tmp2.lock", "dir3/tmp3.rtf"} - fileContents := []string{"tmp1textfilevalue", "tmp2lockfilelocked", "tmp3isjustaplaintextfile"} - - buf := &bytes.Buffer{} - tw := tar.NewWriter(buf) - - for i, v := range fileNames { - size := len(fileContents[i]) - hdr := &tar.Header{ - Name: v, - Mode: 0644, - Size: int64(size), - ModTime: time.Now(), - Xattrs: map[string]string{ - "user.swarm.content-type": "text/plain", - }, - } - if err := tw.WriteHeader(hdr); err != nil { - t.Fatal(err) - } - - // copy the file into the tar stream - n, err := io.WriteString(tw, fileContents[i]) - if err != nil { - t.Fatal(err) - } else if n != size { - t.Fatal("size mismatch") - } - } - - if err := tw.Close(); err != nil { - t.Fatal(err) - } - - //post tar stream - url := srv.URL + "/bzz:/" - - req, err := http.NewRequest("POST", url, buf) - if err != nil { - t.Fatal(err) - } - req.Header.Add("Content-Type", "application/x-tar") - client := &http.Client{} - serverResponse, err := client.Do(req) - if err != nil { - t.Fatal(err) - } - if serverResponse.StatusCode != http.StatusOK { - t.Fatalf("err %s", serverResponse.Status) - } - swarmHash, err := ioutil.ReadAll(serverResponse.Body) - serverResponse.Body.Close() - if err != nil { - t.Fatal(err) - } - // set the resolved hash to be the swarm hash of what we've just uploaded - hash := common.HexToHash(string(swarmHash)) - resolver.hash = &hash - for _, v := range []struct { - addr string - path string - expectedStatusCode int - expectedContentType string - expectedFileName string - }{ - { - addr: string(swarmHash), - path: fileNames[0], - expectedStatusCode: http.StatusOK, - expectedContentType: "text/plain", - expectedFileName: path.Base(fileNames[0]), - }, - { - addr: "somebogusensname", - path: fileNames[0], - expectedStatusCode: http.StatusOK, - expectedContentType: "text/plain", - expectedFileName: path.Base(fileNames[0]), - }, - } { - req, err := http.NewRequest("GET", fmt.Sprintf(srv.URL+"/bzz:/%s/%s", v.addr, v.path), nil) - if err != nil { - t.Fatal(err) - } - serverResponse, err := client.Do(req) - if err != nil { - t.Fatal(err) - } - defer serverResponse.Body.Close() - if serverResponse.StatusCode != v.expectedStatusCode { - t.Fatalf("expected %d, got %d", v.expectedStatusCode, serverResponse.StatusCode) - } - - if h := serverResponse.Header.Get("Content-Type"); h != v.expectedContentType { - t.Fatalf("Content-Type header expected: %s, got %s", v.expectedContentType, h) - } - - expectedContentDisposition := fmt.Sprintf("inline; filename=\"%s\"", v.expectedFileName) - if h := serverResponse.Header.Get("Content-Disposition"); h != expectedContentDisposition { - t.Fatalf("Content-Disposition header expected: %s, got: %s", expectedContentDisposition, h) - } - - } -} - -// testResolver implements the Resolver interface and either returns the given -// hash if it is set, or returns a "name not found" error -type testResolveValidator struct { - hash *common.Hash -} - -func newTestResolveValidator(addr string) *testResolveValidator { - r := &testResolveValidator{} - if addr != "" { - hash := common.HexToHash(addr) - r.hash = &hash - } - return r -} - -func (t *testResolveValidator) Resolve(addr string) (common.Hash, error) { - if t.hash == nil { - return common.Hash{}, fmt.Errorf("DNS name not found: %q", addr) - } - return *t.hash, nil -} - -func (t *testResolveValidator) Owner(node [32]byte) (addr common.Address, err error) { - return -} -func (t *testResolveValidator) HeaderByNumber(context.Context, *big.Int) (header *types.Header, err error) { - return -} diff --git a/swarm/api/http/templates.go b/swarm/api/http/templates.go deleted file mode 100644 index 986f5f8873d3..000000000000 --- a/swarm/api/http/templates.go +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "encoding/hex" - "fmt" - "html/template" - "path" - - "github.com/ethereum/go-ethereum/swarm/api" -) - -type htmlListData struct { - URI *api.URI - List *api.ManifestList -} - -var TemplatesMap = make(map[string]*template.Template) -var faviconBytes []byte - -func init() { - for _, v := range []struct { - templateName string - partial string - funcs template.FuncMap - }{ - { - templateName: "error", - partial: errorResponse, - }, - { - templateName: "bzz-list", - partial: bzzList, - funcs: template.FuncMap{ - "basename": path.Base, - "leaflink": leafLink, - }, - }, - { - templateName: "landing-page", - partial: landing, - }, - } { - TemplatesMap[v.templateName] = template.Must(template.New(v.templateName).Funcs(v.funcs).Parse(baseTemplate + css + v.partial + logo)) - } - - bytes, err := hex.DecodeString(favicon) - if err != nil { - panic(err) - } - faviconBytes = bytes -} - -func leafLink(URI api.URI, manifestEntry api.ManifestEntry) string { - return fmt.Sprintf("/bzz:/%s/%s", URI.Addr, manifestEntry.Path) -} - -const bzzList = `{{ define "content" }} -

    Swarm index of {{ .URI }}

    -
    - - - - - - - - - - - {{ range .List.CommonPrefixes }} - - - - - - {{ end }} - {{ range .List.Entries }} - - - - - - {{ end }} -
    PathTypeSize
    - {{ basename . }}/ - DIR-
    - {{ basename .Path }} - {{ .ContentType }}{{ .Size }}
    -
    - - {{ end }}` - -const errorResponse = `{{ define "content" }} -
    - - -
    -

    {{.Msg}}

    -
    - -
    -
    Error code: {{.Code}}
    -
    - - -
    -{{ end }}` - -const landing = `{{ define "content" }} - - - -
    - - - - - -
    - -{{ end }}` - -const baseTemplate = ` - - - - - - - - - {{ template "content" . }} - - -` - -const css = `{{ define "css" }} -html { - font-size: 18px; - font-size: 1.13rem; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - font-family: Helvetica, Arial, sans-serif; -} - -body { - background: #f6f6f6; - color: #333; -} - -a, a:visited, a:active { - color: darkorange; -} - -a.normal-link, a.normal-link:active { color: #0000EE; } -a.normal-link:visited { color: #551A8B; } - -table { - border-collapse: separate; -} - -td { - padding: 3px 10px; -} - - -.container { - max-width: 600px; - margin: 40px auto 40px; - text-align: center; -} - -.separate-block { - margin: 40px 0; - word-wrap: break-word; -} - -.footer { - font-size: 12px; - font-size: 0.75rem; - text-align: center; -} - -.orange { - color: #ffa500; -} - -.top-space { - margin-top: 20px; - margin-bottom: 20px; -} - -/* SVG Logos, editable */ - -.searchbar { - padding: 20px 20px 0; -} - -.logo { - margin: 100px 80px 0; -} - -.logo a img { - max-width: 140px; -} - -/* Tablet < 600p*/ - -@media only screen and (max-width: 600px) {} - -/* Mobile phone < 360p*/ - -@media only screen and (max-width: 360px) { - h1 { - font-size: 20px; - font-size: 1.5rem; - } - h2 { - font-size: 0.88rem; - margin: 0; - } - .logo { - margin: 50px 40px 0; - } - .footer { - font-size: 0.63rem; - text-align: center; - } -} - -input[type=text] { - width: 100%; - box-sizing: border-box; - border: 2px solid #777; - border-radius: 2px; - font-size: 16px; - padding: 12px 20px 12px 20px; - transition: border 250ms ease-in-out; -} - -input[type=text]:focus { - border: 2px solid #ffce73; -} - -.button { - background-color: #ffa500; - margin: 20px 0; - border: none; - border-radius: 2px; - color: #222; - padding: 15px 32px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; -} -{{ end }}` - -const logo = `{{ define "logo" }} - -{{ end }}` - -const favicon = `000001000400101000000000200068040000460000002020000000002000a8100000ae0400003030000000002000a825000056150000404000000000200028420000fe3a000028000000100000002000000001002000000000004004000000000000000000000000000000000000ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017e7e7e0362626263545454c548484849ffffff01ffffff01ffffff01ffffff01646464375b5b5bbf4545457758585809ffffff01ffffff01ffffff0164646443626262cf626262ff535353ff454545ff454545b74949492b6868681d626262a5626262fd5c5c5cff464646ff454545dd47474755ffffff01ffffff013f3f3feb565656ff636363ff535353ff464646ff3f3f3fff373737ab393939894d4d4dff626262ff5c5c5cff464646ff424242ff3a3a3af7ffffff01ffffff01383838e9353535ff424242ff474747ff383838ff353535ff363636ab35353587363636ff3a3a3aff4a4a4aff3b3b3bff353535ff363636f5ffffff01ffffff01383838e9303030ff181818ff131313ff232323ff343434ff363636ab35353587343434ff202020ff101010ff1d1d1dff303030ff373737f5ffffff01ffffff01232323c50c0c0cff0d0d0dff131313ff171717ff171717ff2929298b2727276b0f0f0ffd0d0d0dff101010ff171717ff161616ff232323d9ffffff01ffffff014d4d4d030f0f0f650c0c0ce7131313ff161616d51d1d1d4b63636363464646691717173b0d0d0dc50f0f0fff161616ef171717752e2e2e07ffffff01ffffff01ffffff01ffffff011d1d1d0f1515155360606045626262cf636363ff464646ff454545d3484848491414144d24242417ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013c3c3c374f4f4fff636363ff636363ff464646ff464646ff3f3f3fff3c3c3c41ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013636363d353535ff3c3c3cff575757ff363636ff181818ff282828ff37373747ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013636363d363636ff303030ff181818ff292929ff131313ef17171771696969136565653bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01323232371e1e1eff0d0d0dff0c0c0cff363636ff363636a3ffffff0185858515606060ff4747476bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01111111450d0d0dd10c0c0cff1b1b1bff2a2a2a993e3e3e0b30303085292929ff37373787ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636030e0e0e671616166b45454505323232432e2e2ed9151515c31d1d1d2dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014e4e4e05ffffff01ffffff01ffffff01ffffff010000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff28000000200000004000000001002000000000008010000000000000000000000000000000000000ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017272721b646464a54646466f72727205ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0168686845575757b74f4f4f39ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017e7e7e0b6262627d616161f3636363ff424242ff444444d74f4f4f49ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff016c6c6c27636363b5616161ff555555ff434343ff464646a35858581dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff016666665d616161e3626262ff636363ff636363ff444444ff464646ff434343ff454545b95252522bffffff01ffffff01ffffff01ffffff016c6c6c1363636393616161fb636363ff636363ff555555ff464646ff464646ff444444f5464646836666660bffffff01ffffff01ffffff01ffffff01ffffff016a6a6a3f626262c9616161ff636363ff636363ff636363ff636363ff444444ff464646ff464646ff464646ff434343fb48484897545454135b5b5b036868686f616161ef626262ff636363ff636363ff636363ff555555ff464646ff464646ff464646ff454545ff444444e54a4a4a5fffffff01ffffff01ffffff01ffffff013b3b3bd7505050ff646464ff636363ff636363ff636363ff636363ff444444ff464646ff464646ff464646ff454545ff3a3a3aff33333357313131113c3c3cff5a5a5aff646464ff636363ff636363ff636363ff555555ff464646ff464646ff464646ff464646ff424242ff383838f1ffffff01ffffff01ffffff01ffffff013a3a3ad5353535ff3a3a3aff575757ff646464ff626262ff636363ff444444ff464646ff464646ff3d3d3dff353535ff363636ff3636365535353511363636ff343434ff434343ff606060ff636363ff636363ff555555ff464646ff464646ff444444ff393939ff353535ff373737edffffff01ffffff01ffffff01ffffff013a3a3ad5363636ff363636ff343434ff3f3f3fff5d5d5dff646464ff444444ff404040ff363636ff353535ff363636ff363636ff3636365535353511363636ff363636ff363636ff343434ff4a4a4aff636363ff555555ff454545ff3c3c3cff353535ff363636ff363636ff373737edffffff01ffffff01ffffff01ffffff013a3a3ad5363636ff363636ff363636ff363636ff353535ff3f3f3fff363636ff353535ff363636ff363636ff363636ff363636ff3636365535353511363636ff363636ff363636ff363636ff353535ff383838ff3a3a3aff373737ff353535ff363636ff363636ff363636ff373737edffffff01ffffff01ffffff01ffffff013a3a3ad5363636ff363636ff363636ff323232ff181818ff0e0e0eff171717ff282828ff373737ff363636ff363636ff363636ff3636365535353511363636ff363636ff353535ff373737ff292929ff0f0f0fff111111ff1b1b1bff2f2f2fff373737ff363636ff363636ff373737edffffff01ffffff01ffffff01ffffff013a3a3ad5363636ff363636ff1e1e1eff0b0b0bff0d0d0dff0f0f0fff171717ff161616ff191919ff2c2c2cff373737ff363636ff3636365535353511363636ff373737ff2f2f2fff141414ff0b0b0bff0d0d0dff131313ff171717ff151515ff1f1f1fff333333ff363636ff373737edffffff01ffffff01ffffff01ffffff013b3b3bd5252525ff0d0d0dff0c0c0cff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff151515ff1c1c1cff313131ff3535355734343411333333ff1a1a1aff0b0b0bff0d0d0dff0d0d0dff0d0d0dff131313ff171717ff171717ff171717ff161616ff242424ff373737efffffff01ffffff01ffffff01ffffff012020205d0b0b0be50b0b0bff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff131313ff161616b73333331f3b3b3b05111111970a0a0afb0d0d0dff0d0d0dff0d0d0dff0d0d0dff131313ff171717ff171717ff171717ff161616ff141414f51c1c1c7fffffff01ffffff01ffffff01ffffff01ffffff014d4d4d0b1212127f0a0a0af50d0d0dff0d0d0dff0f0f0fff171717ff171717ff151515ff151515d522222249ffffff017373731b51515121ffffff011d1d1d2b101010b50a0a0aff0d0d0dff0d0d0dff131313ff171717ff171717ff131313ff181818a12e2e2e1dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012c2c2c1b0f0f0fa10a0a0afd0f0f0fff161616ff141414e91b1b1b69656565057878780b6363637b626262f3464646f7454545896969690fffffff011c1c1c470c0c0cd30b0b0bff131313ff141414ff151515c32a2a2a37ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff011d1d1d35111111bd1a1a1a8d2f2f2f11ffffff0166666659616161e1626262ff646464ff474747ff454545ff444444e9494949677b7b7b054040400517171769131313cd24242455ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0169696939626262c7616161ff636363ff636363ff646464ff474747ff464646ff464646ff444444ff454545d14e4e4e45ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01424242615e5e5eff636363ff636363ff636363ff636363ff646464ff474747ff464646ff464646ff464646ff464646ff434343ff3f3f3f77ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679343434ff494949ff636363ff636363ff636363ff646464ff474747ff464646ff464646ff474747ff3d3d3dff353535ff3a3a3a8dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679363636ff353535ff363636ff505050ff646464ff636363ff474747ff484848ff2f2f2fff1c1c1cff323232ff363636ff3a3a3a8dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679363636ff363636ff363636ff353535ff3a3a3aff5a5a5aff393939ff0f0f0fff040404ff111111ff151515ff232323ff3535358fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679363636ff363636ff363636ff363636ff323232ff171717ff2a2a2aff0c0c0cff030303ff111111ff141414fb171717992e2e2e17a3a3a305ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679363636ff363636ff363636ff1f1f1fff0b0b0bff0d0d0dff363636ff383838ff242424ff121212bf2a2a2a2dffffff01ffffff018484842b636363bf6d6d6d2fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0136363679373737ff252525ff0d0d0dff0c0c0cff0d0d0dff0d0d0dff373737ff363636ff353535ff39393949ffffff01ffffff01ffffff0186868629646464ff656565fb6464649b55555505ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012e2e2e650e0e0eff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0c0c0cff353535ff363636ff353535ff37373749ffffff01ffffff01ffffff0185858529656565ff525252ff353535ff4b4b4b0fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff011c1c1c430d0d0dcf0b0b0bff0d0d0dff0d0d0dff0d0d0dff171717ff282828ff363636ff37373749ffffff01ffffff01ffffff0144444459363636ff353535ff353535ff4e4e4e0fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0162626203161616630b0b0be70c0c0cff0d0d0dff171717ff161616ff171717ed3737372fffffff013e3e3e2b303030b72a2a2aff151515ff262626ff363636ff4b4b4b0fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013636360d101010850a0a0af7141414f91717178f45454511ffffff014c4c4c252c2c2cdb303030ff2d2d2dff151515ff131313ff1b1b1bad5a5a5a07ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012b2b2b2121212127ffffff01ffffff01ffffff01ffffff0161616109313131752b2b2bf1131313cd26262641ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014e4e4e1359595903ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000300000006000000001002000000000008025000000000000000000000000000000000000ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0173737357545454997c7c7c11ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0176767663515151916c6c6c0dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017676762d636363bb636363ff4d4d4dff434343eb4f4f4f6d7f7f7f05ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0176767635616161c3626262ff494949ff424242e94f4f4f6392929203ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017e7e7e19626262955f5f5ffd626262ff666666ff4f4f4fff464646ff424242ff434343d75a5a5a49ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017777771d6464649f5f5f5fff636363ff656565ff4b4b4bff464646ff424242ff444444d158585841ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff018585850966666677606060ef626262ff636363ff636363ff666666ff4f4f4fff464646ff464646ff464646ff414141ff464646b75d5d5d2dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff018989890d6868687f5f5f5ff5626262ff636363ff636363ff656565ff4b4b4bff464646ff464646ff464646ff404040ff484848b160606027ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff016a6a6a55626262df606060ff636363ff636363ff636363ff636363ff666666ff4f4f4fff464646ff464646ff464646ff464646ff454545ff424242fd484848956a6a6a17ffffff01ffffff01ffffff01ffffff01ffffff016969695f606060e3606060ff636363ff636363ff636363ff636363ff656565ff4b4b4bff464646ff464646ff464646ff464646ff454545ff414141f94a4a4a8d65656513ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff016e6e6e3b656565c15f5f5fff636363ff636363ff636363ff636363ff636363ff636363ff666666ff4f4f4fff464646ff464646ff464646ff464646ff464646ff464646ff444444ff424242ed52525277ffffff01ffffff016c6c6c37676767c95f5f5fff636363ff636363ff636363ff636363ff636363ff636363ff656565ff4b4b4bff464646ff464646ff464646ff464646ff464646ff464646ff434343ff444444e94d4d4d6dffffff01ffffff01ffffff01ffffff01ffffff01ffffff013c3c3cc5454545ff646464ff646464ff636363ff636363ff636363ff636363ff636363ff666666ff4f4f4fff464646ff464646ff464646ff464646ff464646ff464646ff474747ff424242ff333333fb34343409ffffff0131313199494949ff656565ff646464ff636363ff636363ff636363ff636363ff636363ff656565ff4b4b4bff464646ff464646ff464646ff464646ff464646ff464646ff474747ff414141ff373737ebffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf333333ff343434ff4f4f4fff666666ff636363ff636363ff636363ff636363ff666666ff4f4f4fff464646ff464646ff464646ff464646ff474747ff444444ff383838ff343434ff363636f737373707ffffff0135353597343434ff343434ff525252ff666666ff636363ff636363ff636363ff636363ff656565ff4b4b4bff464646ff464646ff464646ff464646ff474747ff444444ff383838ff343434ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff333333ff383838ff585858ff676767ff636363ff636363ff666666ff4f4f4fff464646ff464646ff474747ff464646ff3b3b3bff343434ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff333333ff383838ff5a5a5aff666666ff636363ff636363ff656565ff4b4b4bff464646ff464646ff474747ff454545ff3a3a3aff343434ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff363636ff363636ff323232ff3d3d3dff5d5d5dff666666ff666666ff4f4f4fff464646ff474747ff3e3e3eff353535ff353535ff363636ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff363636ff363636ff313131ff3f3f3fff5f5f5fff666666ff656565ff4b4b4bff464646ff474747ff3d3d3dff353535ff353535ff363636ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff363636ff363636ff363636ff353535ff323232ff444444ff676767ff525252ff404040ff363636ff353535ff363636ff363636ff363636ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff363636ff363636ff363636ff353535ff323232ff464646ff676767ff4e4e4eff404040ff363636ff353535ff363636ff363636ff363636ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff363636ff363636ff363636ff363636ff353535ff383838ff2d2d2dff2b2b2bff373737ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff363636ff363636ff363636ff363636ff363636ff383838ff2c2c2cff2a2a2aff373737ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff363636ff363636ff353535ff383838ff343434ff171717ff090909ff151515ff171717ff2d2d2dff383838ff363636ff363636ff363636ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff363636ff363636ff353535ff383838ff333333ff151515ff090909ff151515ff181818ff2f2f2fff383838ff363636ff363636ff363636ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff363636ff373737ff373737ff1f1f1fff090909ff0c0c0cff0c0c0cff171717ff171717ff141414ff1b1b1bff323232ff383838ff363636ff363636ff363636ff363636f737373707ffffff0135353597363636ff363636ff363636ff373737ff373737ff1d1d1dff0a0a0aff0c0c0cff0c0c0cff171717ff171717ff141414ff1c1c1cff333333ff383838ff353535ff363636ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf343434ff363636ff393939ff272727ff0c0c0cff0b0b0bff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff161616ff141414ff202020ff353535ff373737ff363636ff363636f737373707ffffff0135353597363636ff363636ff383838ff252525ff0b0b0bff0b0b0bff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff161616ff141414ff222222ff363636ff373737ff363636ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040bf383838ff2d2d2dff101010ff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff161616ff141414ff262626ff373737ff373737f737373707ffffff0136363697393939ff2b2b2bff0f0f0fff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff161616ff151515ff272727ff383838ff393939e3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013a3a3abd131313ff090909ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff171717ff171717ff151515ff171717ff262626fb38383807ffffff012a2a2a97121212ff090909ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff171717ff171717ff151515ff161616ff2a2a2ae7ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015f5f5f0b1616167b090909ef0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff171717ff171717ff0f0f0fff181818b74040402dffffff01ffffff014646461118181883080808f30b0b0bff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff171717ff161616ff101010ff181818b141414127ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014d4d4d171212129b090909fd0c0c0cff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff111111ff141414d335353547ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013838381d131313a5060606ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff171717ff171717ff111111ff181818cd2e2e2e3dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01333333310f0f0fbb070707ff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff141414ff121212e72424246d86868603ffffff01ffffff017373732b656565b9464646c95e5e5e3bffffff01ffffff01ffffff01323232370e0e0ec3080808ff0d0d0dff0d0d0dff0c0c0cff171717ff171717ff171717ff121212ff161616e525252563ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012525254d0e0e0ed9090909ff0c0c0cff171717ff151515ff121212f91d1d1d894d4d4d13ffffff01ffffff0178787815656565935f5f5ffb646464ff484848ff404040ff454545a96a6a6a1fffffff01ffffff01ffffff011b1b1b570e0e0edf080808ff0d0d0dff171717ff151515ff0f0f0ff3212121815656560dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01636363071a1a1a710a0a0aed0f0f0fff1b1b1bad2f2f2f23ffffff01ffffff018d8d8d0566666675616161eb616161ff636363ff646464ff484848ff464646ff454545ff424242f54c4c4c856262620fffffff01ffffff014040400b21212179080808f10f0f0fff1b1b1ba15757571dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014141411740404037ffffff01ffffff01ffffff016a6a6a4d616161db606060ff636363ff636363ff636363ff646464ff484848ff464646ff464646ff464646ff434343ff434343e751515167ffffff01ffffff01ffffff014646461d30303033ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0176767631616161c35f5f5fff636363ff636363ff636363ff636363ff636363ff646464ff484848ff464646ff464646ff464646ff464646ff464646ff424242ff454545d158585841ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015252527f636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff646464ff484848ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff434343ff454545a1ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01313131b53b3b3bff5b5b5bff676767ff636363ff636363ff636363ff636363ff636363ff646464ff484848ff464646ff464646ff464646ff464646ff464646ff474747ff444444ff393939ff383838d3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff323232ff404040ff616161ff656565ff626262ff636363ff636363ff646464ff484848ff464646ff464646ff454545ff494949ff474747ff3b3b3bff343434ff353535ff3a3a3ad3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff353535ff323232ff484848ff656565ff646464ff636363ff646464ff484848ff464646ff474747ff494949ff242424ff282828ff383838ff363636ff363636ff3a3a3ad3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff363636ff363636ff343434ff343434ff515151ff666666ff656565ff484848ff4b4b4bff323232ff070707ff040404ff151515ff181818ff2f2f2fff383838ff3a3a3ad3ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff363636ff363636ff363636ff363636ff333333ff383838ff5f5f5fff3c3c3cff0f0f0fff020202ff050505ff050505ff171717ff171717ff141414ff1c1c1cff323232d7ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff363636ff363636ff363636ff353535ff383838ff343434ff161616ff2a2a2aff0c0c0cff020202ff050505ff050505ff171717ff171717ff101010ff161616bf2e2e2e35ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff363636ff363636ff373737ff383838ff1f1f1fff0a0a0aff0c0c0cff373737ff3a3a3aff262626ff060606ff040404ff121212ff151515dd30303051ffffff01ffffff01ffffff018787872d6b6b6b47ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff363636ff363636ff393939ff272727ff0d0d0dff0b0b0bff0d0d0dff0d0d0dff373737ff363636ff373737ff383838ff1c1c1cf92020207568686807ffffff01ffffff01ffffff01ffffff018686863d5f5f5fff676767af77777721ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01363636b3363636ff393939ff2e2e2eff101010ff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff373737ff363636ff363636ff353535ff373737ebffffff01ffffff01ffffff01ffffff01ffffff01ffffff018686863d626262ff666666ff646464f76969698d9494940fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01383838b5333333ff161616ff090909ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff373737ff363636ff363636ff363636ff353535ebffffff01ffffff01ffffff01ffffff01ffffff01ffffff018686863d626262ff676767ff6b6b6bff555555ff3a3a3a93ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0125252589030303ff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff333333ff383838ff353535ff363636ff353535ebffffff01ffffff01ffffff01ffffff01ffffff01ffffff018585853d666666ff5f5f5fff3c3c3cff313131ff3a3a3a93ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012d2d2d3f0e0e0ecb080808ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff141414ff222222ff363636ff373737ff353535ebffffff01ffffff01ffffff01ffffff01ffffff01ffffff0177777741414141ff313131ff363636ff353535ff3a3a3a93ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff011e1e1e5f0a0a0ae50a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff171717ff161616ff151515ff282828ff353535f3ffffff01ffffff01ffffff01ffffff016e6e6e0b37373781242424f1191919ff333333ff383838ff343434ff3a3a3a93ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015a5a5a0d1919197f0a0a0af30b0b0bff0d0d0dff0d0d0dff171717ff171717ff161616ff0f0f0ffb24242489ffffff01ffffff01ffffff013e3e3e5d2d2d2de52e2e2eff2b2b2bff151515ff141414ff212121ff363636ff3b3b3b95ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013636361b111111a3080808ff0c0c0cff181818ff0f0f0fff171717b545454525ffffff01ffffff017f7f7f05363636c7282828ff313131ff313131ff2b2b2bff151515ff171717ff161616ff0c0c0cfb3434346bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01303030350f0f0fc7121212d337373741ffffff01ffffff01ffffff01ffffff01ffffff016b6b6b0b3a3a3a7d2c2c2cf12f2f2fff2b2b2bff151515ff101010ff171717bb4646462dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01515151193535359b242424ff131313d72828284bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014e4e4e2b59595905ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff000000000000ffff28000000400000008000000001002000000000000042000000000000000000000000000000000000ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0176767635666666914e4e4e457c7c7c09ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff018080801569696989545454696c6c6c0bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff018484840d70707061616161d5606060fb3d3d3ddf4e4e4e9172727213ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017070704d626262b35f5f5ffb464646f1454545a16a6a6a33ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017676760f67676753646464cf5e5e5eff656565ff626262ff414141ff404040ff444444e54b4b4b7b69696919ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01979797036c6c6c45676767a95d5d5dff616161ff626262ff484848ff424242ff3e3e3efd4e4e4e8958585831ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017e7e7e2b616161a75f5f5fef616161ff636363ff656565ff626262ff424242ff464646ff444444ff414141fd434343b961616153ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017777771969696981606060e7606060ff636363ff636363ff626262ff484848ff464646ff454545ff424242fd414141d95656566569696911ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01858585056e6e6e29656565995f5f5ff1616161ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff444444ff3f3f3fff484848af5353534b86868607ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01797979216a6a6a6f616161ed5e5e5eff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff3e3e3eff474747d75151515762626213ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01838383036f6f6f755f5f5fd3606060ff626262ff636363ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff454545ff434343ff404040e94e4e4e8d5f5f5f1bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff018f8f8f056b6b6b45616161c95f5f5ff7616161ff636363ff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff444444ff424242f1434343b16666662dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017070700f6969695f626262d35e5e5eff626262ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff404040ff444444f14d4d4d776a6a6a23ffffff01ffffff01ffffff01ffffff017b7b7b096c6c6c39636363c15f5f5ffb626262ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff434343ff414141f54a4a4aa35b5b5b2d70707007ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0171717143676767a7616161f3616161ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff444444ff414141f7474747cd54545447ffffff01ffffff015b5b5b096b6b6b99646464e1606060ff626262ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff444444ff424242ff414141d552525277ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01404040b33b3b3bff5c5c5cff656565ff646464ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff474747ff454545ff3a3a3aff313131ad34343407ffffff012e2e2e25383838ff535353ff656565ff656565ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff474747ff464646ff3b3b3bff3a3a3ae9ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9313131ff363636ff484848ff636363ff676767ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff404040ff363636ff343434ff353535a537373705ffffff0135353521333333ff333333ff434343ff5c5c5cff686868ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff484848ff414141ff393939ff313131ff3c3c3cdbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff323232ff353535ff4b4b4bff636363ff656565ff636363ff626262ff636363ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff464646ff474747ff464646ff414141ff363636ff343434ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff333333ff313131ff484848ff5e5e5eff666666ff646464ff626262ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff464646ff464646ff474747ff424242ff3a3a3aff343434ff353535ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff343434ff333333ff3d3d3dff555555ff686868ff656565ff626262ff636363ff656565ff626262ff424242ff464646ff464646ff464646ff484848ff444444ff393939ff353535ff353535ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff353535ff323232ff363636ff515151ff646464ff656565ff636363ff636363ff636363ff626262ff484848ff464646ff464646ff464646ff484848ff454545ff3d3d3dff353535ff343434ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff343434ff303030ff3f3f3fff575757ff666666ff656565ff646464ff626262ff424242ff464646ff474747ff454545ff3a3a3aff343434ff353535ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff363636ff303030ff373737ff535353ff636363ff656565ff636363ff626262ff484848ff464646ff474747ff454545ff3e3e3eff353535ff343434ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff363636ff363636ff333333ff333333ff484848ff606060ff696969ff626262ff434343ff474747ff3e3e3eff363636ff353535ff353535ff363636ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff363636ff353535ff343434ff333333ff3e3e3eff5d5d5dff686868ff626262ff484848ff474747ff424242ff373737ff353535ff353535ff363636ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff323232ff323232ff505050ff616161ff3d3d3dff373737ff343434ff353535ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff343434ff313131ff434343ff606060ff464646ff383838ff343434ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff3a3a3aff2b2b2bff1e1e1eff2d2d2dff383838ff373737ff353535ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff393939ff323232ff1c1c1cff262626ff373737ff383838ff353535ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff363636ff353535ff373737ff383838ff303030ff191919ff080808ff101010ff141414ff1a1a1aff303030ff383838ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff363636ff353535ff363636ff383838ff363636ff1d1d1dff0b0b0bff0c0c0cff141414ff181818ff292929ff373737ff373737ff363636ff363636ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff363636ff353535ff393939ff363636ff222222ff0c0c0cff0a0a0aff0c0c0cff121212ff171717ff151515ff161616ff212121ff353535ff393939ff363636ff363636ff363636ff363636ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff363636ff363636ff353535ff383838ff3a3a3aff262626ff121212ff0a0a0aff0c0c0cff0f0f0fff171717ff151515ff151515ff1e1e1eff2f2f2fff3a3a3aff363636ff363636ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff363636ff363636ff363636ff383838ff363636ff262626ff0d0d0dff090909ff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff141414ff151515ff232323ff353535ff383838ff363636ff353535ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff353535ff383838ff383838ff292929ff131313ff080808ff0c0c0cff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff151515ff131313ff202020ff313131ff383838ff363636ff363636ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9343434ff353535ff363636ff3a3a3aff2e2e2eff131313ff0a0a0aff0b0b0bff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff161616ff141414ff1a1a1aff2a2a2aff393939ff373737ff363636ff363636ff363636a537373705ffffff0135353521363636ff363636ff363636ff3a3a3aff313131ff1c1c1cff0a0a0aff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff161616ff151515ff161616ff282828ff363636ff383838ff363636ff333333ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444a9353535ff383838ff313131ff151515ff080808ff0b0b0bff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff171717ff161616ff131313ff1b1b1bff2d2d2dff373737ff373737ff363636a537373705ffffff0134343421363636ff383838ff333333ff1e1e1eff090909ff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff171717ff171717ff131313ff171717ff2a2a2aff363636ff353535ff3d3d3ddbffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01444444af353535ff1e1e1eff0d0d0dff0a0a0aff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff151515ff151515ff222222ff333333ff353535ad30303007ffffff0134343423373737ff282828ff0d0d0dff0a0a0aff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff151515ff141414ff1b1b1bff2e2e2eff3e3e3ee1ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013e3e3e6f0f0f0fd5040404ff0b0b0bff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff101010ff0e0e0ee72f2f2f7347474703ffffff013b3b3b13141414cd050505f70a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff121212ff0c0c0cf12a2a2aa5ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015f5f5f052020202b1a1a1aa1080808f1070707ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff141414ff0c0c0cff212121af2a2a2a496d6d6d07ffffff01ffffff01ffffff01333333231d1d1d730b0b0beb060606ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff171717ff171717ff171717ff151515ff0e0e0eff181818d72626265546464615ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014d4d4d29121212af080808ef0a0a0aff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff171717ff141414ff121212f9141414b93b3b3b4fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0138383819151515890a0a0ae5080808ff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff171717ff161616ff101010fb151515d72c2c2c614444440dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0133333311262626510f0f0fd7050505ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff121212ff171717ff171717ff171717ff171717ff171717ff101010ff141414e7242424733a3a3a19ffffff01ffffff01ffffff01878787097272725f4d4d4d736a6a6a11ffffff01ffffff01ffffff016060600524242445191919ad040404ff0a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff171717ff171717ff171717ff111111ff0e0e0efd242424873232322dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015c5c5c0d2525255f090909d7080808fb0b0b0bff0d0d0dff0c0c0cff121212ff171717ff171717ff161616ff121212ff121212df2121218965656511ffffff01ffffff01ffffff018080800d6767674b646464d1606060ff454545ff464646df4f4f4f6165656517ffffff01ffffff01ffffff01ffffff012d2d2d4b101010b5060606fb0a0a0aff0d0d0dff0d0d0dff0f0f0fff171717ff171717ff161616ff131313ff101010ef2020209d4242422dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012c2c2c2d1f1f1f83080808fb080808ff0d0d0dff121212ff171717ff141414ff0f0f0ff91e1e1eb12c2c2c354d4d4d09ffffff01ffffff01ffffff0178787825646464a75f5f5feb616161ff656565ff4a4a4aff414141ff424242f3414141bd69696937ffffff01ffffff01ffffff01ffffff0142424219171717710d0d0de3060606ff0c0c0cff0f0f0fff171717ff151515ff0d0d0dff171717c3292929575656560dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013737372d1212129d080808ef0d0d0dff121212f5191919bf2e2e2e3d70707003ffffff01ffffff018c8c8c037676762564646497606060ed606060ff636363ff636363ff656565ff4a4a4aff444444ff464646ff444444ff404040f74a4a4aad5555553162626207ffffff01ffffff01ffffff014040401125252589090909dd0a0a0aff121212ff141414c738383869ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015b5b5b0b1f1f1f591d1d1daf292929673f3f3f19ffffff01ffffff01ffffff01ffffff016d6d6d715f5f5fcd606060ff626262ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff454545ff434343ff414141db4f4f4f857b7b7b11ffffff01ffffff01ffffff0153535307222222331d1d1da91b1b1b8d4141412365656503ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff017c7c7c0f6868685d636363cb5e5e5eff626262ff636363ff636363ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff464646ff464646ff464646ff404040ff454545e14c4c4c6b69696917ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0177777733626262a3606060f3616161ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff464646ff464646ff464646ff464646ff444444ff424242f9454545b55d5d5d49ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014b4b4b0f5e5e5e85626262ff626262ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff444444ff414141ff454545a16464641dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0132323225333333cf4e4e4eff646464ff666666ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff474747ff404040ff303030e35757573bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd313131ff363636ff515151ff636363ff656565ff636363ff636363ff636363ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff464646ff464646ff464646ff464646ff464646ff414141ff373737ff343434ff323232e159595939ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff343434ff333333ff3c3c3cff5b5b5bff686868ff636363ff626262ff636363ff636363ff636363ff656565ff4a4a4aff444444ff464646ff464646ff454545ff464646ff4c4c4cff454545ff393939ff353535ff353535ff353535ff323232e159595939ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff353535ff313131ff3f3f3fff5d5d5dff666666ff646464ff626262ff636363ff656565ff4a4a4aff444444ff454545ff474747ff4a4a4aff404040ff212121ff2f2f2fff373737ff373737ff353535ff363636ff323232e159595939ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff353535ff333333ff363636ff484848ff646464ff676767ff626262ff656565ff4a4a4aff444444ff4b4b4bff4a4a4aff262626ff0b0b0bff090909ff171717ff252525ff353535ff393939ff363636ff323232e159595939ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff363636ff363636ff363636ff323232ff363636ff4c4c4cff646464ff676767ff4d4d4dff484848ff2c2c2cff0b0b0bff020202ff040404ff0b0b0bff171717ff141414ff161616ff282828ff353535ff343434e359595939ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff363636ff363636ff363636ff363636ff343434ff323232ff3f3f3fff5f5f5fff3a3a3aff161616ff030303ff030303ff050505ff040404ff0b0b0bff171717ff171717ff161616ff151515ff1a1a1aff242424e55555553bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff363636ff363636ff363636ff353535ff363636ff383838ff2e2e2eff191919ff262626ff111111ff030303ff030303ff050505ff040404ff0b0b0bff171717ff171717ff151515ff111111f9121212cd272727557d7d7d09ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff363636ff363636ff363636ff383838ff373737ff242424ff0b0b0bff0a0a0aff393939ff393939ff222222ff080808ff020202ff030303ff0b0b0bff181818ff0f0f0fff151515f32424247935353525ffffff01ffffff01ffffff01a3a3a30fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff363636ff363636ff363636ff383838ff373737ff272727ff0c0c0cff090909ff0c0c0cff0e0e0eff373737ff363636ff3a3a3aff393939ff1e1e1eff080808ff080808ff0f0f0feb232323914040401dffffff01ffffff01ffffff01ffffff01ffffff018282825d626262c36d6d6d4d8d8d8d09ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff363636ff353535ff363636ff3a3a3aff2f2f2fff131313ff0b0b0bff0b0b0bff0d0d0dff0c0c0cff0e0e0eff373737ff363636ff353535ff363636ff393939ff303030ff1c1c1cc92626264d68686807ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01868686515e5e5eff646464e9696969957878781fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723363636cd363636ff373737ff383838ff313131ff161616ff090909ff0b0b0bff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0e0e0eff373737ff363636ff363636ff363636ff353535ff353535ff3c3c3c8fffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0186868651616161ff676767ff646464ff656565f16a6a6a7d7f7f7f25ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0137373723353535cd393939ff373737ff1f1f1fff0d0d0dff0a0a0aff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0e0e0eff373737ff363636ff363636ff363636ff363636ff353535ff37373791ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0186868651616161ff676767ff666666ff676767ff686868f9555555cd55555511ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0134343425323232cf212121ff0e0e0eff090909ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0e0e0eff383838ff363636ff363636ff363636ff363636ff353535ff37373791ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0186868651616161ff686868ff696969ff5f5f5fff3d3d3dff303030ff4848481dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01474747132323238f020202ff080808ff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0c0c0cff2e2e2eff393939ff363636ff353535ff363636ff353535ff37373791ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0185858551666666ff676767ff494949ff353535ff323232ff353535ff4e4e4e1bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0130303045101010af080808f70a0a0aff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0d0d0dff131313ff1c1c1cff303030ff373737ff363636ff353535ff37373791ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0181818151494949ff363636ff313131ff363636ff353535ff363636ff4e4e4e1bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff0141414113191919690f0f0fdb060606ff0c0c0cff0d0d0dff0d0d0dff0d0d0dff0d0d0dff0c0c0cff0d0d0dff171717ff151515ff161616ff222222ff363636ff383838ff37373791ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff014d4d4d53272727c1242424ff373737ff373737ff353535ff353535ff363636ff4e4e4e1bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01626262091c1c1c830b0b0bd7090909ff0c0c0cff0d0d0dff0d0d0dff0c0c0cff0d0d0dff171717ff171717ff171717ff141414ff151515ff202020ff35353595ffffff01ffffff01ffffff01ffffff017474740540404049343434af2a2a2aff262626ff101010ff191919ff2e2e2eff373737ff363636ff363636ff4e4e4e1bffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015a5a5a073636362d141414a7080808f5080808ff0d0d0dff0c0c0cff0d0d0dff171717ff171717ff171717ff151515ff0e0e0efb1b1b1bbb3d3d3d29ffffff01ffffff01ffffff0151515119393939892a2a2ae92d2d2dff323232ff282828ff141414ff151515ff151515ff1f1f1fff343434ff393939ff4949491dffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff013636362f111111b5070707f30a0a0aff0d0d0dff171717ff141414ff111111f5111111c74343433d70707005ffffff01ffffff017c7c7c034e4e4e632a2a2af7292929ff323232ff313131ff323232ff282828ff141414ff171717ff171717ff151515ff0e0e0efd222222e153535315ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff012d2d2d151f1f1f590e0e0edb040404ff0f0f0fff171717e7262626673f3f3f1dffffff01ffffff01ffffff01ffffff01ffffff01444444293535358b2d2d2deb2b2b2bff313131ff323232ff282828ff141414ff171717ff121212ff0d0d0dff2222229d2626263dbebebe03ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01505050112626266f1d1d1d7f36363617ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01616161213333339d2c2c2ce92f2f2fff282828ff111111ff111111f7191919ab3c3c3c41ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015151510b3b3b3b43383838c51f1f1fff141414d71e1e1e654f4f4f13ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff015858580b4d4d4d4159595909ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff01ffffff010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000` diff --git a/swarm/api/http/test_server.go b/swarm/api/http/test_server.go deleted file mode 100644 index 9245c9c5b8db..000000000000 --- a/swarm/api/http/test_server.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package http - -import ( - "io/ioutil" - "net/http" - "net/http/httptest" - "os" - "testing" - - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed" -) - -type TestServer interface { - ServeHTTP(http.ResponseWriter, *http.Request) -} - -func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, resolver api.Resolver) *TestSwarmServer { - dir, err := ioutil.TempDir("", "swarm-storage-test") - if err != nil { - t.Fatal(err) - } - storeparams := storage.NewDefaultLocalStoreParams() - storeparams.DbCapacity = 5000000 - storeparams.CacheCapacity = 5000 - storeparams.Init(dir) - localStore, err := storage.NewLocalStore(storeparams, nil) - if err != nil { - os.RemoveAll(dir) - t.Fatal(err) - } - fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) - - // Swarm feeds test setup - feedsDir, err := ioutil.TempDir("", "swarm-feeds-test") - if err != nil { - t.Fatal(err) - } - - rhparams := &feed.HandlerParams{} - rh, err := feed.NewTestHandler(feedsDir, rhparams) - if err != nil { - t.Fatal(err) - } - - a := api.NewAPI(fileStore, resolver, rh.Handler, nil) - srv := httptest.NewServer(serverFunc(a)) - tss := &TestSwarmServer{ - Server: srv, - FileStore: fileStore, - dir: dir, - Hasher: storage.MakeHashFunc(storage.DefaultHash)(), - cleanup: func() { - srv.Close() - rh.Close() - os.RemoveAll(dir) - os.RemoveAll(feedsDir) - }, - CurrentTime: 42, - } - feed.TimestampProvider = tss - return tss -} - -type TestSwarmServer struct { - *httptest.Server - Hasher storage.SwarmHash - FileStore *storage.FileStore - dir string - cleanup func() - CurrentTime uint64 -} - -func (t *TestSwarmServer) Close() { - t.cleanup() -} - -func (t *TestSwarmServer) Now() feed.Timestamp { - return feed.Timestamp{Time: t.CurrentTime} -} diff --git a/swarm/api/inspector.go b/swarm/api/inspector.go deleted file mode 100644 index 6706b32e6529..000000000000 --- a/swarm/api/inspector.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "context" - - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -type Inspector struct { - api *API - hive *network.Hive - netStore *storage.NetStore -} - -func NewInspector(api *API, hive *network.Hive, netStore *storage.NetStore) *Inspector { - return &Inspector{api, hive, netStore} -} - -// Hive prints the kademlia table -func (inspector *Inspector) Hive() string { - return inspector.hive.String() -} - -type HasInfo struct { - Addr string `json:"address"` - Has bool `json:"has"` -} - -// Has checks whether each chunk address is present in the underlying datastore, -// the bool in the returned structs indicates if the underlying datastore has -// the chunk stored with the given address (true), or not (false) -func (inspector *Inspector) Has(chunkAddresses []storage.Address) []HasInfo { - results := make([]HasInfo, 0) - for _, addr := range chunkAddresses { - res := HasInfo{} - res.Addr = addr.String() - res.Has = inspector.netStore.Has(context.Background(), addr) - results = append(results, res) - } - return results -} diff --git a/swarm/api/manifest.go b/swarm/api/manifest.go deleted file mode 100644 index 890ed88bd4a6..000000000000 --- a/swarm/api/manifest.go +++ /dev/null @@ -1,585 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "strings" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage/feed" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - ManifestType = "application/bzz-manifest+json" - FeedContentType = "application/bzz-feed" - - manifestSizeLimit = 5 * 1024 * 1024 -) - -// Manifest represents a swarm manifest -type Manifest struct { - Entries []ManifestEntry `json:"entries,omitempty"` -} - -// ManifestEntry represents an entry in a swarm manifest -type ManifestEntry struct { - Hash string `json:"hash,omitempty"` - Path string `json:"path,omitempty"` - ContentType string `json:"contentType,omitempty"` - Mode int64 `json:"mode,omitempty"` - Size int64 `json:"size,omitempty"` - ModTime time.Time `json:"mod_time,omitempty"` - Status int `json:"status,omitempty"` - Access *AccessEntry `json:"access,omitempty"` - Feed *feed.Feed `json:"feed,omitempty"` -} - -// ManifestList represents the result of listing files in a manifest -type ManifestList struct { - CommonPrefixes []string `json:"common_prefixes,omitempty"` - Entries []*ManifestEntry `json:"entries,omitempty"` -} - -// NewManifest creates and stores a new, empty manifest -func (a *API) NewManifest(ctx context.Context, toEncrypt bool) (storage.Address, error) { - var manifest Manifest - data, err := json.Marshal(&manifest) - if err != nil { - return nil, err - } - addr, wait, err := a.Store(ctx, bytes.NewReader(data), int64(len(data)), toEncrypt) - if err != nil { - return nil, err - } - err = wait(ctx) - return addr, err -} - -// Manifest hack for supporting Swarm feeds from the bzz: scheme -// see swarm/api/api.go:API.Get() for more information -func (a *API) NewFeedManifest(ctx context.Context, feed *feed.Feed) (storage.Address, error) { - var manifest Manifest - entry := ManifestEntry{ - Feed: feed, - ContentType: FeedContentType, - } - manifest.Entries = append(manifest.Entries, entry) - data, err := json.Marshal(&manifest) - if err != nil { - return nil, err - } - addr, wait, err := a.Store(ctx, bytes.NewReader(data), int64(len(data)), false) - if err != nil { - return nil, err - } - err = wait(ctx) - return addr, err -} - -// ManifestWriter is used to add and remove entries from an underlying manifest -type ManifestWriter struct { - api *API - trie *manifestTrie - quitC chan bool -} - -func (a *API) NewManifestWriter(ctx context.Context, addr storage.Address, quitC chan bool) (*ManifestWriter, error) { - trie, err := loadManifest(ctx, a.fileStore, addr, quitC, NOOPDecrypt) - if err != nil { - return nil, fmt.Errorf("error loading manifest %s: %s", addr, err) - } - return &ManifestWriter{a, trie, quitC}, nil -} - -// AddEntry stores the given data and adds the resulting address to the manifest -func (m *ManifestWriter) AddEntry(ctx context.Context, data io.Reader, e *ManifestEntry) (addr storage.Address, err error) { - entry := newManifestTrieEntry(e, nil) - if data != nil { - var wait func(context.Context) error - addr, wait, err = m.api.Store(ctx, data, e.Size, m.trie.encrypted) - if err != nil { - return nil, err - } - err = wait(ctx) - if err != nil { - return nil, err - } - entry.Hash = addr.Hex() - } - if entry.Hash == "" { - return addr, errors.New("missing entry hash") - } - m.trie.addEntry(entry, m.quitC) - return addr, nil -} - -// RemoveEntry removes the given path from the manifest -func (m *ManifestWriter) RemoveEntry(path string) error { - m.trie.deleteEntry(path, m.quitC) - return nil -} - -// Store stores the manifest, returning the resulting storage address -func (m *ManifestWriter) Store() (storage.Address, error) { - return m.trie.ref, m.trie.recalcAndStore() -} - -// ManifestWalker is used to recursively walk the entries in the manifest and -// all of its submanifests -type ManifestWalker struct { - api *API - trie *manifestTrie - quitC chan bool -} - -func (a *API) NewManifestWalker(ctx context.Context, addr storage.Address, decrypt DecryptFunc, quitC chan bool) (*ManifestWalker, error) { - trie, err := loadManifest(ctx, a.fileStore, addr, quitC, decrypt) - if err != nil { - return nil, fmt.Errorf("error loading manifest %s: %s", addr, err) - } - return &ManifestWalker{a, trie, quitC}, nil -} - -// ErrSkipManifest is used as a return value from WalkFn to indicate that the -// manifest should be skipped -var ErrSkipManifest = errors.New("skip this manifest") - -// WalkFn is the type of function called for each entry visited by a recursive -// manifest walk -type WalkFn func(entry *ManifestEntry) error - -// Walk recursively walks the manifest calling walkFn for each entry in the -// manifest, including submanifests -func (m *ManifestWalker) Walk(walkFn WalkFn) error { - return m.walk(m.trie, "", walkFn) -} - -func (m *ManifestWalker) walk(trie *manifestTrie, prefix string, walkFn WalkFn) error { - for _, entry := range &trie.entries { - if entry == nil { - continue - } - entry.Path = prefix + entry.Path - err := walkFn(&entry.ManifestEntry) - if err != nil { - if entry.ContentType == ManifestType && err == ErrSkipManifest { - continue - } - return err - } - if entry.ContentType != ManifestType { - continue - } - if err := trie.loadSubTrie(entry, nil); err != nil { - return err - } - if err := m.walk(entry.subtrie, entry.Path, walkFn); err != nil { - return err - } - } - return nil -} - -type manifestTrie struct { - fileStore *storage.FileStore - entries [257]*manifestTrieEntry // indexed by first character of basePath, entries[256] is the empty basePath entry - ref storage.Address // if ref != nil, it is stored - encrypted bool - decrypt DecryptFunc -} - -func newManifestTrieEntry(entry *ManifestEntry, subtrie *manifestTrie) *manifestTrieEntry { - return &manifestTrieEntry{ - ManifestEntry: *entry, - subtrie: subtrie, - } -} - -type manifestTrieEntry struct { - ManifestEntry - - subtrie *manifestTrie -} - -func loadManifest(ctx context.Context, fileStore *storage.FileStore, addr storage.Address, quitC chan bool, decrypt DecryptFunc) (trie *manifestTrie, err error) { // non-recursive, subtrees are downloaded on-demand - log.Trace("manifest lookup", "addr", addr) - // retrieve manifest via FileStore - manifestReader, isEncrypted := fileStore.Retrieve(ctx, addr) - log.Trace("reader retrieved", "addr", addr) - return readManifest(manifestReader, addr, fileStore, isEncrypted, quitC, decrypt) -} - -func readManifest(mr storage.LazySectionReader, addr storage.Address, fileStore *storage.FileStore, isEncrypted bool, quitC chan bool, decrypt DecryptFunc) (trie *manifestTrie, err error) { // non-recursive, subtrees are downloaded on-demand - - // TODO check size for oversized manifests - size, err := mr.Size(mr.Context(), quitC) - if err != nil { // size == 0 - // can't determine size means we don't have the root chunk - log.Trace("manifest not found", "addr", addr) - err = fmt.Errorf("Manifest not Found") - return - } - if size > manifestSizeLimit { - log.Warn("manifest exceeds size limit", "addr", addr, "size", size, "limit", manifestSizeLimit) - err = fmt.Errorf("Manifest size of %v bytes exceeds the %v byte limit", size, manifestSizeLimit) - return - } - manifestData := make([]byte, size) - read, err := mr.Read(manifestData) - if int64(read) < size { - log.Trace("manifest not found", "addr", addr) - if err == nil { - err = fmt.Errorf("Manifest retrieval cut short: read %v, expect %v", read, size) - } - return - } - - log.Debug("manifest retrieved", "addr", addr) - var man struct { - Entries []*manifestTrieEntry `json:"entries"` - } - err = json.Unmarshal(manifestData, &man) - if err != nil { - err = fmt.Errorf("Manifest %v is malformed: %v", addr.Log(), err) - log.Trace("malformed manifest", "addr", addr) - return - } - - log.Trace("manifest entries", "addr", addr, "len", len(man.Entries)) - - trie = &manifestTrie{ - fileStore: fileStore, - encrypted: isEncrypted, - decrypt: decrypt, - } - for _, entry := range man.Entries { - err = trie.addEntry(entry, quitC) - if err != nil { - return - } - } - return -} - -func (mt *manifestTrie) addEntry(entry *manifestTrieEntry, quitC chan bool) error { - mt.ref = nil // trie modified, hash needs to be re-calculated on demand - - if entry.ManifestEntry.Access != nil { - if mt.decrypt == nil { - return errors.New("dont have decryptor") - } - - err := mt.decrypt(&entry.ManifestEntry) - if err != nil { - return err - } - } - - if len(entry.Path) == 0 { - mt.entries[256] = entry - return nil - } - - b := entry.Path[0] - oldentry := mt.entries[b] - if (oldentry == nil) || (oldentry.Path == entry.Path && oldentry.ContentType != ManifestType) { - mt.entries[b] = entry - return nil - } - - cpl := 0 - for (len(entry.Path) > cpl) && (len(oldentry.Path) > cpl) && (entry.Path[cpl] == oldentry.Path[cpl]) { - cpl++ - } - - if (oldentry.ContentType == ManifestType) && (cpl == len(oldentry.Path)) { - if mt.loadSubTrie(oldentry, quitC) != nil { - return nil - } - entry.Path = entry.Path[cpl:] - oldentry.subtrie.addEntry(entry, quitC) - oldentry.Hash = "" - return nil - } - - commonPrefix := entry.Path[:cpl] - - subtrie := &manifestTrie{ - fileStore: mt.fileStore, - encrypted: mt.encrypted, - } - entry.Path = entry.Path[cpl:] - oldentry.Path = oldentry.Path[cpl:] - subtrie.addEntry(entry, quitC) - subtrie.addEntry(oldentry, quitC) - - mt.entries[b] = newManifestTrieEntry(&ManifestEntry{ - Path: commonPrefix, - ContentType: ManifestType, - }, subtrie) - return nil -} - -func (mt *manifestTrie) getCountLast() (cnt int, entry *manifestTrieEntry) { - for _, e := range &mt.entries { - if e != nil { - cnt++ - entry = e - } - } - return -} - -func (mt *manifestTrie) deleteEntry(path string, quitC chan bool) { - mt.ref = nil // trie modified, hash needs to be re-calculated on demand - - if len(path) == 0 { - mt.entries[256] = nil - return - } - - b := path[0] - entry := mt.entries[b] - if entry == nil { - return - } - if entry.Path == path { - mt.entries[b] = nil - return - } - - epl := len(entry.Path) - if (entry.ContentType == ManifestType) && (len(path) >= epl) && (path[:epl] == entry.Path) { - if mt.loadSubTrie(entry, quitC) != nil { - return - } - entry.subtrie.deleteEntry(path[epl:], quitC) - entry.Hash = "" - // remove subtree if it has less than 2 elements - cnt, lastentry := entry.subtrie.getCountLast() - if cnt < 2 { - if lastentry != nil { - lastentry.Path = entry.Path + lastentry.Path - } - mt.entries[b] = lastentry - } - } -} - -func (mt *manifestTrie) recalcAndStore() error { - if mt.ref != nil { - return nil - } - - var buffer bytes.Buffer - buffer.WriteString(`{"entries":[`) - - list := &Manifest{} - for _, entry := range &mt.entries { - if entry != nil { - if entry.Hash == "" { // TODO: paralellize - err := entry.subtrie.recalcAndStore() - if err != nil { - return err - } - entry.Hash = entry.subtrie.ref.Hex() - } - list.Entries = append(list.Entries, entry.ManifestEntry) - } - - } - - manifest, err := json.Marshal(list) - if err != nil { - return err - } - - sr := bytes.NewReader(manifest) - ctx := context.TODO() - addr, wait, err2 := mt.fileStore.Store(ctx, sr, int64(len(manifest)), mt.encrypted) - if err2 != nil { - return err2 - } - err2 = wait(ctx) - mt.ref = addr - return err2 -} - -func (mt *manifestTrie) loadSubTrie(entry *manifestTrieEntry, quitC chan bool) (err error) { - if entry.ManifestEntry.Access != nil { - if mt.decrypt == nil { - return errors.New("dont have decryptor") - } - - err := mt.decrypt(&entry.ManifestEntry) - if err != nil { - return err - } - } - - if entry.subtrie == nil { - hash := common.Hex2Bytes(entry.Hash) - entry.subtrie, err = loadManifest(context.TODO(), mt.fileStore, hash, quitC, mt.decrypt) - entry.Hash = "" // might not match, should be recalculated - } - return -} - -func (mt *manifestTrie) listWithPrefixInt(prefix, rp string, quitC chan bool, cb func(entry *manifestTrieEntry, suffix string)) error { - plen := len(prefix) - var start, stop int - if plen == 0 { - start = 0 - stop = 256 - } else { - start = int(prefix[0]) - stop = start - } - - for i := start; i <= stop; i++ { - select { - case <-quitC: - return fmt.Errorf("aborted") - default: - } - entry := mt.entries[i] - if entry != nil { - epl := len(entry.Path) - if entry.ContentType == ManifestType { - l := plen - if epl < l { - l = epl - } - if prefix[:l] == entry.Path[:l] { - err := mt.loadSubTrie(entry, quitC) - if err != nil { - return err - } - err = entry.subtrie.listWithPrefixInt(prefix[l:], rp+entry.Path[l:], quitC, cb) - if err != nil { - return err - } - } - } else { - if (epl >= plen) && (prefix == entry.Path[:plen]) { - cb(entry, rp+entry.Path[plen:]) - } - } - } - } - return nil -} - -func (mt *manifestTrie) listWithPrefix(prefix string, quitC chan bool, cb func(entry *manifestTrieEntry, suffix string)) (err error) { - return mt.listWithPrefixInt(prefix, "", quitC, cb) -} - -func (mt *manifestTrie) findPrefixOf(path string, quitC chan bool) (entry *manifestTrieEntry, pos int) { - log.Trace(fmt.Sprintf("findPrefixOf(%s)", path)) - - if len(path) == 0 { - return mt.entries[256], 0 - } - - //see if first char is in manifest entries - b := path[0] - entry = mt.entries[b] - if entry == nil { - return mt.entries[256], 0 - } - - epl := len(entry.Path) - log.Trace(fmt.Sprintf("path = %v entry.Path = %v epl = %v", path, entry.Path, epl)) - if len(path) <= epl { - if entry.Path[:len(path)] == path { - if entry.ContentType == ManifestType { - err := mt.loadSubTrie(entry, quitC) - if err == nil && entry.subtrie != nil { - subentries := entry.subtrie.entries - for i := 0; i < len(subentries); i++ { - sub := subentries[i] - if sub != nil && sub.Path == "" { - return sub, len(path) - } - } - } - entry.Status = http.StatusMultipleChoices - } - pos = len(path) - return - } - return nil, 0 - } - if path[:epl] == entry.Path { - log.Trace(fmt.Sprintf("entry.ContentType = %v", entry.ContentType)) - //the subentry is a manifest, load subtrie - if entry.ContentType == ManifestType && (strings.Contains(entry.Path, path) || strings.Contains(path, entry.Path)) { - err := mt.loadSubTrie(entry, quitC) - if err != nil { - return nil, 0 - } - sub, pos := entry.subtrie.findPrefixOf(path[epl:], quitC) - if sub != nil { - entry = sub - pos += epl - return sub, pos - } else if path == entry.Path { - entry.Status = http.StatusMultipleChoices - } - - } else { - //entry is not a manifest, return it - if path != entry.Path { - return nil, 0 - } - } - } - return nil, 0 -} - -// file system manifest always contains regularized paths -// no leading or trailing slashes, only single slashes inside -func RegularSlashes(path string) (res string) { - for i := 0; i < len(path); i++ { - if (path[i] != '/') || ((i > 0) && (path[i-1] != '/')) { - res = res + path[i:i+1] - } - } - if (len(res) > 0) && (res[len(res)-1] == '/') { - res = res[:len(res)-1] - } - return -} - -func (mt *manifestTrie) getEntry(spath string) (entry *manifestTrieEntry, fullpath string) { - path := RegularSlashes(spath) - var pos int - quitC := make(chan bool) - entry, pos = mt.findPrefixOf(path, quitC) - return entry, path[:pos] -} diff --git a/swarm/api/manifest_test.go b/swarm/api/manifest_test.go deleted file mode 100644 index 1c8e53c43308..000000000000 --- a/swarm/api/manifest_test.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -func manifest(paths ...string) (manifestReader storage.LazySectionReader) { - var entries []string - for _, path := range paths { - entry := fmt.Sprintf(`{"path":"%s"}`, path) - entries = append(entries, entry) - } - manifest := fmt.Sprintf(`{"entries":[%s]}`, strings.Join(entries, ",")) - return &storage.LazyTestSectionReader{ - SectionReader: io.NewSectionReader(strings.NewReader(manifest), 0, int64(len(manifest))), - } -} - -func testGetEntry(t *testing.T, path, match string, multiple bool, paths ...string) *manifestTrie { - quitC := make(chan bool) - fileStore := storage.NewFileStore(nil, storage.NewFileStoreParams()) - ref := make([]byte, fileStore.HashSize()) - trie, err := readManifest(manifest(paths...), ref, fileStore, false, quitC, NOOPDecrypt) - if err != nil { - t.Errorf("unexpected error making manifest: %v", err) - } - checkEntry(t, path, match, multiple, trie) - return trie -} - -func checkEntry(t *testing.T, path, match string, multiple bool, trie *manifestTrie) { - entry, fullpath := trie.getEntry(path) - if match == "-" && entry != nil { - t.Errorf("expected no match for '%s', got '%s'", path, fullpath) - } else if entry == nil { - if match != "-" { - t.Errorf("expected entry '%s' to match '%s', got no match", match, path) - } - } else if fullpath != match { - t.Errorf("incorrect entry retrieved for '%s'. expected path '%v', got '%s'", path, match, fullpath) - } - - if multiple && entry.Status != http.StatusMultipleChoices { - t.Errorf("Expected %d Multiple Choices Status for path %s, match %s, got %d", http.StatusMultipleChoices, path, match, entry.Status) - } else if !multiple && entry != nil && entry.Status == http.StatusMultipleChoices { - t.Errorf("Were not expecting %d Multiple Choices Status for path %s, match %s, but got it", http.StatusMultipleChoices, path, match) - } -} - -func TestGetEntry(t *testing.T) { - // file system manifest always contains regularized paths - testGetEntry(t, "a", "a", false, "a") - testGetEntry(t, "b", "-", false, "a") - testGetEntry(t, "/a//", "a", false, "a") - // fallback - testGetEntry(t, "/a", "", false, "") - testGetEntry(t, "/a/b", "a/b", false, "a/b") - // longest/deepest math - testGetEntry(t, "read", "read", true, "readme.md", "readit.md") - testGetEntry(t, "rf", "-", false, "readme.md", "readit.md") - testGetEntry(t, "readme", "readme", false, "readme.md") - testGetEntry(t, "readme", "-", false, "readit.md") - testGetEntry(t, "readme.md", "readme.md", false, "readme.md") - testGetEntry(t, "readme.md", "-", false, "readit.md") - testGetEntry(t, "readmeAmd", "-", false, "readit.md") - testGetEntry(t, "readme.mdffff", "-", false, "readme.md") - testGetEntry(t, "ab", "ab", true, "ab/cefg", "ab/cedh", "ab/kkkkkk") - testGetEntry(t, "ab/ce", "ab/ce", true, "ab/cefg", "ab/cedh", "ab/ceuuuuuuuuuu") - testGetEntry(t, "abc", "abc", true, "abcd", "abczzzzef", "abc/def", "abc/e/g") - testGetEntry(t, "a/b", "a/b", true, "a", "a/bc", "a/ba", "a/b/c") - testGetEntry(t, "a/b", "a/b", false, "a", "a/b", "a/bb", "a/b/c") - testGetEntry(t, "//a//b//", "a/b", false, "a", "a/b", "a/bb", "a/b/c") -} - -func TestExactMatch(t *testing.T) { - quitC := make(chan bool) - mf := manifest("shouldBeExactMatch.css", "shouldBeExactMatch.css.map") - fileStore := storage.NewFileStore(nil, storage.NewFileStoreParams()) - ref := make([]byte, fileStore.HashSize()) - trie, err := readManifest(mf, ref, fileStore, false, quitC, nil) - if err != nil { - t.Errorf("unexpected error making manifest: %v", err) - } - entry, _ := trie.getEntry("shouldBeExactMatch.css") - if entry.Path != "" { - t.Errorf("Expected entry to match %s, got: %s", "shouldBeExactMatch.css", entry.Path) - } - if entry.Status == http.StatusMultipleChoices { - t.Errorf("Got status %d, which is unexepcted", http.StatusMultipleChoices) - } -} - -func TestDeleteEntry(t *testing.T) { - -} - -// TestAddFileWithManifestPath tests that adding an entry at a path which -// already exists as a manifest just adds the entry to the manifest rather -// than replacing the manifest with the entry -func TestAddFileWithManifestPath(t *testing.T) { - // create a manifest containing "ab" and "ac" - manifest, _ := json.Marshal(&Manifest{ - Entries: []ManifestEntry{ - {Path: "ab", Hash: "ab"}, - {Path: "ac", Hash: "ac"}, - }, - }) - reader := &storage.LazyTestSectionReader{ - SectionReader: io.NewSectionReader(bytes.NewReader(manifest), 0, int64(len(manifest))), - } - fileStore := storage.NewFileStore(nil, storage.NewFileStoreParams()) - ref := make([]byte, fileStore.HashSize()) - trie, err := readManifest(reader, ref, fileStore, false, nil, NOOPDecrypt) - if err != nil { - t.Fatal(err) - } - checkEntry(t, "ab", "ab", false, trie) - checkEntry(t, "ac", "ac", false, trie) - - // now add path "a" and check we can still get "ab" and "ac" - entry := &manifestTrieEntry{} - entry.Path = "a" - entry.Hash = "a" - trie.addEntry(entry, nil) - checkEntry(t, "ab", "ab", false, trie) - checkEntry(t, "ac", "ac", false, trie) - checkEntry(t, "a", "a", false, trie) -} - -// TestReadManifestOverSizeLimit creates a manifest reader with data longer then -// manifestSizeLimit and checks if readManifest function will return the exact error -// message. -// The manifest data is not in json-encoded format, preventing possbile -// successful parsing attempts if limit check fails. -func TestReadManifestOverSizeLimit(t *testing.T) { - manifest := make([]byte, manifestSizeLimit+1) - reader := &storage.LazyTestSectionReader{ - SectionReader: io.NewSectionReader(bytes.NewReader(manifest), 0, int64(len(manifest))), - } - _, err := readManifest(reader, storage.Address{}, nil, false, nil, NOOPDecrypt) - if err == nil { - t.Fatal("got no error from readManifest") - } - // Error message is part of the http response body - // which justifies exact string validation. - got := err.Error() - want := fmt.Sprintf("Manifest size of %v bytes exceeds the %v byte limit", len(manifest), manifestSizeLimit) - if got != want { - t.Fatalf("got error mesage %q, expected %q", got, want) - } -} diff --git a/swarm/api/storage.go b/swarm/api/storage.go deleted file mode 100644 index 254375b7770e..000000000000 --- a/swarm/api/storage.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "context" - "path" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -type Response struct { - MimeType string - Status int - Size int64 - // Content []byte - Content string -} - -// implements a service -// -// DEPRECATED: Use the HTTP API instead -type Storage struct { - api *API -} - -func NewStorage(api *API) *Storage { - return &Storage{api} -} - -// Put uploads the content to the swarm with a simple manifest speficying -// its content type -// -// DEPRECATED: Use the HTTP API instead -func (s *Storage) Put(ctx context.Context, content string, contentType string, toEncrypt bool) (storage.Address, func(context.Context) error, error) { - return s.api.Put(ctx, content, contentType, toEncrypt) -} - -// Get retrieves the content from bzzpath and reads the response in full -// It returns the Response object, which serialises containing the -// response body as the value of the Content field -// NOTE: if error is non-nil, sResponse may still have partial content -// the actual size of which is given in len(resp.Content), while the expected -// size is resp.Size -// -// DEPRECATED: Use the HTTP API instead -func (s *Storage) Get(ctx context.Context, bzzpath string) (*Response, error) { - uri, err := Parse(path.Join("bzz:/", bzzpath)) - if err != nil { - return nil, err - } - addr, err := s.api.Resolve(ctx, uri.Addr) - if err != nil { - return nil, err - } - reader, mimeType, status, _, err := s.api.Get(ctx, nil, addr, uri.Path) - if err != nil { - return nil, err - } - quitC := make(chan bool) - expsize, err := reader.Size(ctx, quitC) - if err != nil { - return nil, err - } - body := make([]byte, expsize) - size, err := reader.Read(body) - if int64(size) == expsize { - err = nil - } - return &Response{mimeType, status, expsize, string(body[:size])}, err -} diff --git a/swarm/api/storage_test.go b/swarm/api/storage_test.go deleted file mode 100644 index ef96972b68a6..000000000000 --- a/swarm/api/storage_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "context" - "testing" -) - -func testStorage(t *testing.T, f func(*Storage, bool)) { - testAPI(t, func(api *API, toEncrypt bool) { - f(NewStorage(api), toEncrypt) - }) -} - -func TestStoragePutGet(t *testing.T) { - testStorage(t, func(api *Storage, toEncrypt bool) { - content := "hello" - exp := expResponse(content, "text/plain", 0) - // exp := expResponse([]byte(content), "text/plain", 0) - ctx := context.TODO() - bzzkey, wait, err := api.Put(ctx, content, exp.MimeType, toEncrypt) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - err = wait(ctx) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - bzzhash := bzzkey.Hex() - // to check put against the API#Get - resp0 := testGet(t, api.api, bzzhash, "") - checkResponse(t, resp0, exp) - - // check storage#Get - resp, err := api.Get(context.TODO(), bzzhash) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - checkResponse(t, &testResponse{nil, resp}, exp) - }) -} diff --git a/swarm/api/testdata/test0/img/logo.png b/swarm/api/testdata/test0/img/logo.png deleted file mode 100644 index 9557f960535d520687f69a9a65b35e3637828dd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4119 zcmZ`+do)z*`yVr7W-!bM$ECrRODHiUOk&0v43%))b0kSoRD+_zm{E-!?8dzgxlAOC z&~1>S=`=36*Bs?i8XdQDL`4YSP3yPT`F+>={;}7ypXYs^&-?j2`+fIXPqM3vqpY-= zGz%m}*Bp7T7 z3NglEuxJw)Y%&lABjv(i%BO#?ce92T;6ZyGsj#&x=^alX4;|&S-yS_Gr7VNSB^kxG z!eBT}Co07w=FQ(jds2?HDxuyj%C}%UP=8=8eWdI3Rdn~_rjAn{G`DV1*?KvJb;ebn zXnC5IajD2Ou_o9AGgx?BK0m6ofNPeR;X*~rD3kD)B@EoXg^IkEi9!|-i< z7gerDG>{aTZz{Z}!3_kt$??eE$AMsGay-^3c~siYL?i_z5|RRV3dp=a8Bn5qv4{n>N7I3<zM z#CMSm4#M>w1ILqxF}><$v}x)olvTqqP?$W7?Nv9WiK(X~iZZ7%$!8V3K^vA}|Ce2O zJH87hxMYwrE+%P#d1y?&e;I;ac9AR;lT^V!s1~pZGnxQ0MVu)Q@~$@JBpUA*iM&`A zzBPIaaIQ@=$${4g3*8%KwhrhVWrp9xcYz0&1d{c|Bq>l8kGb@WuSot!Q4y2aUM<({HY`yy7$xIw!XByjybJspslHnnfs|!hi)vWg6?bCh z{2k?Ly*>etBGs*g+mW{?5wmI z>B~EU$om6rpn|mSc}zb2YkaDVz`SRL>^er;0dC8JBVUb)Zj+s}P{_Vpn{Sg#%gHD# z{Kj|_z^1Fq3qvyHkOz3$@VtsBAcn4vqm{ce3tOYDfsA_q0%hfIVQ7TO_J08%%^Al7 zG`hNs(Ek>S!kMB$h#E*op0-3@AWYQ+<5B#KQ7DX71csC4kW4L+8>2%>4v*!hNpL-U z$apac1xjf^pO>LSQlTyFwdiG$bw~u-TzhpNt3yc-6sP;?pbeCEfc^XewP1^8RIhC~ zxcQQ-&KcfT)PVj)AT)9hQHa%|z41RFLoYL7>b(5Q1p<@hu)VgPP@;m)QC=BxK)(`@ zirk|s#2V3B{10I0WuKVb_ODR@m@J3uwcP`5c1@p2SYE1#kmDC%kvn_VR)<8zpX&~N zH)Q!AK*4jz6Bc=*sbrV3zC}Jm!N5fZxufUGlZmey6jHu%6H>wUHfeDc-V$k z_IWPHmEW{S3!h6}TTMT-aJ~yl%ONk?*rjsG32JL!mo;e%w3&R60=?q6_R27(xq*zlTnllE`0>csGNF;PiKI<$XYJ>|hIT2K(@6)Y(V|Hv)#dmTW z%;_Io(C;%9)8tYK4goGO8A%x=XKQf?7=iwX@n?AG{-`n?G=eBxpz$?i#D+8uf_d++ zhBhfKHbYzpR4q2OVS?54S`#ULbB~4SU{(Fr_Y}3yE2hfe8|uRTIXob{sG%)7#N8Xk z(7_?xZ_XIvKvN&i6?pl}1<#*=zCb4pIj-JF3W1#co@1>~JKA)p8*Swr^;8Fkb-y;# z9JyjIre4`U_YQcm81JIa#pa3S$!T+OPK01J)7BD(b^C%uIC!*MCtZ>b&M0S63V2m= z8RA*;{M??CJTxi~s?7y#$Cj;r1x-(LUP#8aE$I4!PVaQmW#_;d#2vt*D8pI;Iup-x zv?BND2t&T@ug=k2KO+@JPN3$<*E!@wqp!kCu>DjdGIqtd{>V%jZXmJo{FB#Fl+l&p ztCDk52j@n9wu!%i6HaN?ek)ylAFcsZ49izG`hbZIkfETcK@%;zJIqoWNortK=0f;_|9Lc&2R;Xnr(bTYdGZ;Nu#2 z%Wpc!Gwl-)Z9eMdwi0yvtAA>Qwr5&5aNm4%%(vTOu!TA8;QX>pKdS_`8t%DpvkB8k z+;;kQj{*-tz>$TQKC_mL+2Lc-?rY=M62|lc zPY8l>st&`>r0U0`ZywSW3(ZHH)g~`e438ZGA>h~SiQ$yA#{=~fdB|!A_ceQnowHpJ zRh}2OvdvM#N4uc+^HBIHH!JTnIM2b_2a&&9Sh_f?EoyUn`ifnyH%tYpx>$VAGL<-`Du)x}rebb6~2?4fcvHwRJcOaOfKK z^Gbu4I_#Uj8|R15IOk&o?dh(qmml*Bvof_{?m;<0l9n2S2Pzcc#27VEEnN|B9`rrj z=Qw%N#%rBZp~F7w*;2`YRIEJ~s&&=YD~Rc1dYtT^yF<8?keWMPq9}(i84xwn6^G4( z=8`SUg%M#pdIPMaN7QOIFTax@fs?6zysVN>Rq}l&pV>(Uk(Sjw(^~2rs3xGa3Hi2c~Plk;DfZr$SE zL_=Ct* z>Z*4O2eK)XqF*n9w?aTzT{YKsb`&|V{{s{I0NZQ2{D-7(C`!t7*?CF9*bDz~KqSlU z#`ZS-ZsX+yMf~t(10pH0pBcNS{wkt)CrhQXDMJNd8L^UX#ObaiE1R)b9E>i2H6bA5 z2Q&(5T{s0i`K%Zbbb&_cy%}?jDISs~es_G!QyDv)CMT&%2x@%yox;^)oLs$rAZBa8Cg6{{YNF8Hj4kqe z%KXioMa^5Mkt59>(2_I*>y%j3>v1p1J9e^Qm8yzDS2J2A1UY!wUO^CCk_}1U1SjUk z>Anp2@u0lH8PFh!y5M}OALo;!!BwDYLqab+6w(HzBvJf+bb$zF|3FdYE`m%5g@Xtk zysg`+Ze57$wcKdkp7oQqj#3ZEZlJg$%WrO=^iw8(Y~%#Kfl>yWS^LP7A%~nIH~$m| z)*#-_JT9B2%t7}|O{(a|_lc=`1WxI6}Qu{cm} z3!nsT#FyQs41V~5q9#5*pSAPh;W5PA_YIo8s92k2=j(6pn!;n}Yn-9hma_<*O`MOr zDt{--S%j^B;aHHhp)E^UxT+=TlrVY=SNp_muRAI1hLLc1gM=01`_5(O7R_69cM%Y4+p<1 z|62XOSv0_LY7O?+U}hm`xC%|rx>5E%QNf3!j*^bhk3t4!YC^O$GO;o;HS-`6NhTH~ qqWLxx6OxI^pkGJk|0@VT6&xB8`@ajS&{6tO0nEwXh03!FWc~*<+c;7H diff --git a/swarm/api/testdata/test0/index.css b/swarm/api/testdata/test0/index.css deleted file mode 100644 index 693b13a37c7e..000000000000 --- a/swarm/api/testdata/test0/index.css +++ /dev/null @@ -1,9 +0,0 @@ -h1 { - color: black; - font-size: 12px; - background-color: orange; - border: 4px solid black; -} -body { - background-color: orange -} diff --git a/swarm/api/testdata/test0/index.html b/swarm/api/testdata/test0/index.html deleted file mode 100644 index 321e910d7a28..000000000000 --- a/swarm/api/testdata/test0/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - -

    Swarm Test

    - Ethereum logo - - \ No newline at end of file diff --git a/swarm/api/uri.go b/swarm/api/uri.go deleted file mode 100644 index 09cfa450202e..000000000000 --- a/swarm/api/uri.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "fmt" - "net/url" - "regexp" - "strings" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -//matches hex swarm hashes -// TODO: this is bad, it should not be hardcoded how long is a hash -var hashMatcher = regexp.MustCompile("^([0-9A-Fa-f]{64})([0-9A-Fa-f]{64})?$") - -// URI is a reference to content stored in swarm. -type URI struct { - // Scheme has one of the following values: - // - // * bzz - an entry in a swarm manifest - // * bzz-raw - raw swarm content - // * bzz-immutable - immutable URI of an entry in a swarm manifest - // (address is not resolved) - // * bzz-list - list of all files contained in a swarm manifest - // - Scheme string - - // Addr is either a hexadecimal storage address or it an address which - // resolves to a storage address - Addr string - - // addr stores the parsed storage address - addr storage.Address - - // Path is the path to the content within a swarm manifest - Path string -} - -func (u *URI) MarshalJSON() (out []byte, err error) { - return []byte(`"` + u.String() + `"`), nil -} - -func (u *URI) UnmarshalJSON(value []byte) error { - uri, err := Parse(string(value)) - if err != nil { - return err - } - *u = *uri - return nil -} - -// Parse parses rawuri into a URI struct, where rawuri is expected to have one -// of the following formats: -// -// * :/ -// * :/ -// * :// -// * :// -// * :// -// * :/// -// -// with scheme one of bzz, bzz-raw, bzz-immutable, bzz-list or bzz-hash -func Parse(rawuri string) (*URI, error) { - u, err := url.Parse(rawuri) - if err != nil { - return nil, err - } - uri := &URI{Scheme: u.Scheme} - - // check the scheme is valid - switch uri.Scheme { - case "bzz", "bzz-raw", "bzz-immutable", "bzz-list", "bzz-hash", "bzz-feed": - default: - return nil, fmt.Errorf("unknown scheme %q", u.Scheme) - } - - // handle URIs like bzz:/// where the addr and path - // have already been split by url.Parse - if u.Host != "" { - uri.Addr = u.Host - uri.Path = strings.TrimLeft(u.Path, "/") - return uri, nil - } - - // URI is like bzz:// so split the addr and path from - // the raw path (which will be //) - parts := strings.SplitN(strings.TrimLeft(u.Path, "/"), "/", 2) - uri.Addr = parts[0] - if len(parts) == 2 { - uri.Path = parts[1] - } - return uri, nil -} -func (u *URI) Feed() bool { - return u.Scheme == "bzz-feed" -} - -func (u *URI) Raw() bool { - return u.Scheme == "bzz-raw" -} - -func (u *URI) Immutable() bool { - return u.Scheme == "bzz-immutable" -} - -func (u *URI) List() bool { - return u.Scheme == "bzz-list" -} - -func (u *URI) Hash() bool { - return u.Scheme == "bzz-hash" -} - -func (u *URI) String() string { - return u.Scheme + ":/" + u.Addr + "/" + u.Path -} - -func (u *URI) Address() storage.Address { - if u.addr != nil { - return u.addr - } - if hashMatcher.MatchString(u.Addr) { - u.addr = common.Hex2Bytes(u.Addr) - return u.addr - } - return nil -} diff --git a/swarm/api/uri_test.go b/swarm/api/uri_test.go deleted file mode 100644 index a03874c433ca..000000000000 --- a/swarm/api/uri_test.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package api - -import ( - "bytes" - "reflect" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -func TestParseURI(t *testing.T) { - type test struct { - uri string - expectURI *URI - expectErr bool - expectRaw bool - expectImmutable bool - expectList bool - expectHash bool - expectValidKey bool - expectAddr storage.Address - } - tests := []test{ - { - uri: "", - expectErr: true, - }, - { - uri: "foo", - expectErr: true, - }, - { - uri: "bzz", - expectErr: true, - }, - { - uri: "bzz:", - expectURI: &URI{Scheme: "bzz"}, - }, - { - uri: "bzz-immutable:", - expectURI: &URI{Scheme: "bzz-immutable"}, - expectImmutable: true, - }, - { - uri: "bzz-raw:", - expectURI: &URI{Scheme: "bzz-raw"}, - expectRaw: true, - }, - { - uri: "bzz:/", - expectURI: &URI{Scheme: "bzz"}, - }, - { - uri: "bzz:/abc123", - expectURI: &URI{Scheme: "bzz", Addr: "abc123"}, - }, - { - uri: "bzz:/abc123/path/to/entry", - expectURI: &URI{Scheme: "bzz", Addr: "abc123", Path: "path/to/entry"}, - }, - { - uri: "bzz-raw:/", - expectURI: &URI{Scheme: "bzz-raw"}, - expectRaw: true, - }, - { - uri: "bzz-raw:/abc123", - expectURI: &URI{Scheme: "bzz-raw", Addr: "abc123"}, - expectRaw: true, - }, - { - uri: "bzz-raw:/abc123/path/to/entry", - expectURI: &URI{Scheme: "bzz-raw", Addr: "abc123", Path: "path/to/entry"}, - expectRaw: true, - }, - { - uri: "bzz://", - expectURI: &URI{Scheme: "bzz"}, - }, - { - uri: "bzz://abc123", - expectURI: &URI{Scheme: "bzz", Addr: "abc123"}, - }, - { - uri: "bzz://abc123/path/to/entry", - expectURI: &URI{Scheme: "bzz", Addr: "abc123", Path: "path/to/entry"}, - }, - { - uri: "bzz-hash:", - expectURI: &URI{Scheme: "bzz-hash"}, - expectHash: true, - }, - { - uri: "bzz-hash:/", - expectURI: &URI{Scheme: "bzz-hash"}, - expectHash: true, - }, - { - uri: "bzz-list:", - expectURI: &URI{Scheme: "bzz-list"}, - expectList: true, - }, - { - uri: "bzz-list:/", - expectURI: &URI{Scheme: "bzz-list"}, - expectList: true, - }, - { - uri: "bzz-raw://4378d19c26590f1a818ed7d6a62c3809e149b0999cab5ce5f26233b3b423bf8c", - expectURI: &URI{Scheme: "bzz-raw", - Addr: "4378d19c26590f1a818ed7d6a62c3809e149b0999cab5ce5f26233b3b423bf8c", - }, - expectValidKey: true, - expectRaw: true, - expectAddr: storage.Address{67, 120, 209, 156, 38, 89, 15, 26, - 129, 142, 215, 214, 166, 44, 56, 9, - 225, 73, 176, 153, 156, 171, 92, 229, - 242, 98, 51, 179, 180, 35, 191, 140, - }, - }, - } - for _, x := range tests { - actual, err := Parse(x.uri) - if x.expectErr { - if err == nil { - t.Fatalf("expected %s to error", x.uri) - } - continue - } - if err != nil { - t.Fatalf("error parsing %s: %s", x.uri, err) - } - if !reflect.DeepEqual(actual, x.expectURI) { - t.Fatalf("expected %s to return %#v, got %#v", x.uri, x.expectURI, actual) - } - if actual.Raw() != x.expectRaw { - t.Fatalf("expected %s raw to be %t, got %t", x.uri, x.expectRaw, actual.Raw()) - } - if actual.Immutable() != x.expectImmutable { - t.Fatalf("expected %s immutable to be %t, got %t", x.uri, x.expectImmutable, actual.Immutable()) - } - if actual.List() != x.expectList { - t.Fatalf("expected %s list to be %t, got %t", x.uri, x.expectList, actual.List()) - } - if actual.Hash() != x.expectHash { - t.Fatalf("expected %s hash to be %t, got %t", x.uri, x.expectHash, actual.Hash()) - } - if x.expectValidKey { - if actual.Address() == nil { - t.Fatalf("expected %s to return a valid key, got nil", x.uri) - } else { - if !bytes.Equal(x.expectAddr, actual.Address()) { - t.Fatalf("expected %s to be decoded to %v", x.expectURI.Addr, x.expectAddr) - } - } - } - } -} diff --git a/swarm/bmt/bmt.go b/swarm/bmt/bmt.go deleted file mode 100644 index 18eab5a2bcb8..000000000000 --- a/swarm/bmt/bmt.go +++ /dev/null @@ -1,690 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package bmt provides a binary merkle tree implementation used for swarm chunk hash -package bmt - -import ( - "fmt" - "hash" - "strings" - "sync" - "sync/atomic" -) - -/* -Binary Merkle Tree Hash is a hash function over arbitrary datachunks of limited size. -It is defined as the root hash of the binary merkle tree built over fixed size segments -of the underlying chunk using any base hash function (e.g., keccak 256 SHA3). -Chunks with data shorter than the fixed size are hashed as if they had zero padding. - -BMT hash is used as the chunk hash function in swarm which in turn is the basis for the -128 branching swarm hash http://swarm-guide.readthedocs.io/en/latest/architecture.html#swarm-hash - -The BMT is optimal for providing compact inclusion proofs, i.e. prove that a -segment is a substring of a chunk starting at a particular offset. -The size of the underlying segments is fixed to the size of the base hash (called the resolution -of the BMT hash), Using Keccak256 SHA3 hash is 32 bytes, the EVM word size to optimize for on-chain BMT verification -as well as the hash size optimal for inclusion proofs in the merkle tree of the swarm hash. - -Two implementations are provided: - -* RefHasher is optimized for code simplicity and meant as a reference implementation - that is simple to understand -* Hasher is optimized for speed taking advantage of concurrency with minimalistic - control structure to coordinate the concurrent routines - - BMT Hasher implements the following interfaces - * standard golang hash.Hash - synchronous, reusable - * SwarmHash - SumWithSpan provided - * io.Writer - synchronous left-to-right datawriter - * AsyncWriter - concurrent section writes and asynchronous Sum call -*/ - -const ( - // PoolSize is the maximum number of bmt trees used by the hashers, i.e, - // the maximum number of concurrent BMT hashing operations performed by the same hasher - PoolSize = 8 -) - -// BaseHasherFunc is a hash.Hash constructor function used for the base hash of the BMT. -// implemented by Keccak256 SHA3 sha3.NewLegacyKeccak256 -type BaseHasherFunc func() hash.Hash - -// Hasher a reusable hasher for fixed maximum size chunks representing a BMT -// - implements the hash.Hash interface -// - reuses a pool of trees for amortised memory allocation and resource control -// - supports order-agnostic concurrent segment writes and section (double segment) writes -// as well as sequential read and write -// - the same hasher instance must not be called concurrently on more than one chunk -// - the same hasher instance is synchronously reuseable -// - Sum gives back the tree to the pool and guaranteed to leave -// the tree and itself in a state reusable for hashing a new chunk -// - generates and verifies segment inclusion proofs (TODO:) -type Hasher struct { - pool *TreePool // BMT resource pool - bmt *tree // prebuilt BMT resource for flowcontrol and proofs -} - -// New creates a reusable BMT Hasher that -// pulls a new tree from a resource pool for hashing each chunk -func New(p *TreePool) *Hasher { - return &Hasher{ - pool: p, - } -} - -// TreePool provides a pool of trees used as resources by the BMT Hasher. -// A tree popped from the pool is guaranteed to have a clean state ready -// for hashing a new chunk. -type TreePool struct { - lock sync.Mutex - c chan *tree // the channel to obtain a resource from the pool - hasher BaseHasherFunc // base hasher to use for the BMT levels - SegmentSize int // size of leaf segments, stipulated to be = hash size - SegmentCount int // the number of segments on the base level of the BMT - Capacity int // pool capacity, controls concurrency - Depth int // depth of the bmt trees = int(log2(segmentCount))+1 - Size int // the total length of the data (count * size) - count int // current count of (ever) allocated resources - zerohashes [][]byte // lookup table for predictable padding subtrees for all levels -} - -// NewTreePool creates a tree pool with hasher, segment size, segment count and capacity -// on Hasher.getTree it reuses free trees or creates a new one if capacity is not reached -func NewTreePool(hasher BaseHasherFunc, segmentCount, capacity int) *TreePool { - // initialises the zerohashes lookup table - depth := calculateDepthFor(segmentCount) - segmentSize := hasher().Size() - zerohashes := make([][]byte, depth+1) - zeros := make([]byte, segmentSize) - zerohashes[0] = zeros - h := hasher() - for i := 1; i < depth+1; i++ { - zeros = doSum(h, nil, zeros, zeros) - zerohashes[i] = zeros - } - return &TreePool{ - c: make(chan *tree, capacity), - hasher: hasher, - SegmentSize: segmentSize, - SegmentCount: segmentCount, - Capacity: capacity, - Size: segmentCount * segmentSize, - Depth: depth, - zerohashes: zerohashes, - } -} - -// Drain drains the pool until it has no more than n resources -func (p *TreePool) Drain(n int) { - p.lock.Lock() - defer p.lock.Unlock() - for len(p.c) > n { - <-p.c - p.count-- - } -} - -// Reserve is blocking until it returns an available tree -// it reuses free trees or creates a new one if size is not reached -// TODO: should use a context here -func (p *TreePool) reserve() *tree { - p.lock.Lock() - defer p.lock.Unlock() - var t *tree - if p.count == p.Capacity { - return <-p.c - } - select { - case t = <-p.c: - default: - t = newTree(p.SegmentSize, p.Depth, p.hasher) - p.count++ - } - return t -} - -// release gives back a tree to the pool. -// this tree is guaranteed to be in reusable state -func (p *TreePool) release(t *tree) { - p.c <- t // can never fail ... -} - -// tree is a reusable control structure representing a BMT -// organised in a binary tree -// Hasher uses a TreePool to obtain a tree for each chunk hash -// the tree is 'locked' while not in the pool -type tree struct { - leaves []*node // leaf nodes of the tree, other nodes accessible via parent links - cursor int // index of rightmost currently open segment - offset int // offset (cursor position) within currently open segment - section []byte // the rightmost open section (double segment) - result chan []byte // result channel - span []byte // The span of the data subsumed under the chunk -} - -// node is a reuseable segment hasher representing a node in a BMT -type node struct { - isLeft bool // whether it is left side of the parent double segment - parent *node // pointer to parent node in the BMT - state int32 // atomic increment impl concurrent boolean toggle - left, right []byte // this is where the two children sections are written - hasher hash.Hash // preconstructed hasher on nodes -} - -// newNode constructs a segment hasher node in the BMT (used by newTree) -func newNode(index int, parent *node, hasher hash.Hash) *node { - return &node{ - parent: parent, - isLeft: index%2 == 0, - hasher: hasher, - } -} - -// Draw draws the BMT (badly) -func (t *tree) draw(hash []byte) string { - var left, right []string - var anc []*node - for i, n := range t.leaves { - left = append(left, fmt.Sprintf("%v", hashstr(n.left))) - if i%2 == 0 { - anc = append(anc, n.parent) - } - right = append(right, fmt.Sprintf("%v", hashstr(n.right))) - } - anc = t.leaves - var hashes [][]string - for l := 0; len(anc) > 0; l++ { - var nodes []*node - hash := []string{""} - for i, n := range anc { - hash = append(hash, fmt.Sprintf("%v|%v", hashstr(n.left), hashstr(n.right))) - if i%2 == 0 && n.parent != nil { - nodes = append(nodes, n.parent) - } - } - hash = append(hash, "") - hashes = append(hashes, hash) - anc = nodes - } - hashes = append(hashes, []string{"", fmt.Sprintf("%v", hashstr(hash)), ""}) - total := 60 - del := " " - var rows []string - for i := len(hashes) - 1; i >= 0; i-- { - var textlen int - hash := hashes[i] - for _, s := range hash { - textlen += len(s) - } - if total < textlen { - total = textlen + len(hash) - } - delsize := (total - textlen) / (len(hash) - 1) - if delsize > len(del) { - delsize = len(del) - } - row := fmt.Sprintf("%v: %v", len(hashes)-i-1, strings.Join(hash, del[:delsize])) - rows = append(rows, row) - - } - rows = append(rows, strings.Join(left, " ")) - rows = append(rows, strings.Join(right, " ")) - return strings.Join(rows, "\n") + "\n" -} - -// newTree initialises a tree by building up the nodes of a BMT -// - segment size is stipulated to be the size of the hash -func newTree(segmentSize, depth int, hashfunc func() hash.Hash) *tree { - n := newNode(0, nil, hashfunc()) - prevlevel := []*node{n} - // iterate over levels and creates 2^(depth-level) nodes - // the 0 level is on double segment sections so we start at depth - 2 since - count := 2 - for level := depth - 2; level >= 0; level-- { - nodes := make([]*node, count) - for i := 0; i < count; i++ { - parent := prevlevel[i/2] - var hasher hash.Hash - if level == 0 { - hasher = hashfunc() - } - nodes[i] = newNode(i, parent, hasher) - } - prevlevel = nodes - count *= 2 - } - // the datanode level is the nodes on the last level - return &tree{ - leaves: prevlevel, - result: make(chan []byte), - section: make([]byte, 2*segmentSize), - } -} - -// methods needed to implement hash.Hash - -// Size returns the size -func (h *Hasher) Size() int { - return h.pool.SegmentSize -} - -// BlockSize returns the block size -func (h *Hasher) BlockSize() int { - return 2 * h.pool.SegmentSize -} - -// Sum returns the BMT root hash of the buffer -// using Sum presupposes sequential synchronous writes (io.Writer interface) -// hash.Hash interface Sum method appends the byte slice to the underlying -// data before it calculates and returns the hash of the chunk -// caller must make sure Sum is not called concurrently with Write, writeSection -func (h *Hasher) Sum(b []byte) (s []byte) { - t := h.getTree() - // write the last section with final flag set to true - go h.writeSection(t.cursor, t.section, true, true) - // wait for the result - s = <-t.result - span := t.span - // release the tree resource back to the pool - h.releaseTree() - // b + sha3(span + BMT(pure_chunk)) - if len(span) == 0 { - return append(b, s...) - } - return doSum(h.pool.hasher(), b, span, s) -} - -// methods needed to implement the SwarmHash and the io.Writer interfaces - -// Write calls sequentially add to the buffer to be hashed, -// with every full segment calls writeSection in a go routine -func (h *Hasher) Write(b []byte) (int, error) { - l := len(b) - if l == 0 || l > h.pool.Size { - return 0, nil - } - t := h.getTree() - secsize := 2 * h.pool.SegmentSize - // calculate length of missing bit to complete current open section - smax := secsize - t.offset - // if at the beginning of chunk or middle of the section - if t.offset < secsize { - // fill up current segment from buffer - copy(t.section[t.offset:], b) - // if input buffer consumed and open section not complete, then - // advance offset and return - if smax == 0 { - smax = secsize - } - if l <= smax { - t.offset += l - return l, nil - } - } else { - // if end of a section - if t.cursor == h.pool.SegmentCount*2 { - return 0, nil - } - } - // read full sections and the last possibly partial section from the input buffer - for smax < l { - // section complete; push to tree asynchronously - go h.writeSection(t.cursor, t.section, true, false) - // reset section - t.section = make([]byte, secsize) - // copy from input buffer at smax to right half of section - copy(t.section, b[smax:]) - // advance cursor - t.cursor++ - // smax here represents successive offsets in the input buffer - smax += secsize - } - t.offset = l - smax + secsize - return l, nil -} - -// Reset needs to be called before writing to the hasher -func (h *Hasher) Reset() { - h.releaseTree() -} - -// methods needed to implement the SwarmHash interface - -// ResetWithLength needs to be called before writing to the hasher -// the argument is supposed to be the byte slice binary representation of -// the length of the data subsumed under the hash, i.e., span -func (h *Hasher) ResetWithLength(span []byte) { - h.Reset() - h.getTree().span = span -} - -// releaseTree gives back the Tree to the pool whereby it unlocks -// it resets tree, segment and index -func (h *Hasher) releaseTree() { - t := h.bmt - if t == nil { - return - } - h.bmt = nil - go func() { - t.cursor = 0 - t.offset = 0 - t.span = nil - t.section = make([]byte, h.pool.SegmentSize*2) - select { - case <-t.result: - default: - } - h.pool.release(t) - }() -} - -// NewAsyncWriter extends Hasher with an interface for concurrent segment/section writes -func (h *Hasher) NewAsyncWriter(double bool) *AsyncHasher { - secsize := h.pool.SegmentSize - if double { - secsize *= 2 - } - write := func(i int, section []byte, final bool) { - h.writeSection(i, section, double, final) - } - return &AsyncHasher{ - Hasher: h, - double: double, - secsize: secsize, - write: write, - } -} - -// SectionWriter is an asynchronous segment/section writer interface -type SectionWriter interface { - Reset() // standard init to be called before reuse - Write(index int, data []byte) // write into section of index - Sum(b []byte, length int, span []byte) []byte // returns the hash of the buffer - SectionSize() int // size of the async section unit to use -} - -// AsyncHasher extends BMT Hasher with an asynchronous segment/section writer interface -// AsyncHasher is unsafe and does not check indexes and section data lengths -// it must be used with the right indexes and length and the right number of sections -// -// behaviour is undefined if -// * non-final sections are shorter or longer than secsize -// * if final section does not match length -// * write a section with index that is higher than length/secsize -// * set length in Sum call when length/secsize < maxsec -// -// * if Sum() is not called on a Hasher that is fully written -// a process will block, can be terminated with Reset -// * it will not leak processes if not all sections are written but it blocks -// and keeps the resource which can be released calling Reset() -type AsyncHasher struct { - *Hasher // extends the Hasher - mtx sync.Mutex // to lock the cursor access - double bool // whether to use double segments (call Hasher.writeSection) - secsize int // size of base section (size of hash or double) - write func(i int, section []byte, final bool) -} - -// methods needed to implement AsyncWriter - -// SectionSize returns the size of async section unit to use -func (sw *AsyncHasher) SectionSize() int { - return sw.secsize -} - -// Write writes the i-th section of the BMT base -// this function can and is meant to be called concurrently -// it sets max segment threadsafely -func (sw *AsyncHasher) Write(i int, section []byte) { - sw.mtx.Lock() - defer sw.mtx.Unlock() - t := sw.getTree() - // cursor keeps track of the rightmost section written so far - // if index is lower than cursor then just write non-final section as is - if i < t.cursor { - // if index is not the rightmost, safe to write section - go sw.write(i, section, false) - return - } - // if there is a previous rightmost section safe to write section - if t.offset > 0 { - if i == t.cursor { - // i==cursor implies cursor was set by Hash call so we can write section as final one - // since it can be shorter, first we copy it to the padded buffer - t.section = make([]byte, sw.secsize) - copy(t.section, section) - go sw.write(i, t.section, true) - return - } - // the rightmost section just changed, so we write the previous one as non-final - go sw.write(t.cursor, t.section, false) - } - // set i as the index of the righmost section written so far - // set t.offset to cursor*secsize+1 - t.cursor = i - t.offset = i*sw.secsize + 1 - t.section = make([]byte, sw.secsize) - copy(t.section, section) -} - -// Sum can be called any time once the length and the span is known -// potentially even before all segments have been written -// in such cases Sum will block until all segments are present and -// the hash for the length can be calculated. -// -// b: digest is appended to b -// length: known length of the input (unsafe; undefined if out of range) -// meta: metadata to hash together with BMT root for the final digest -// e.g., span for protection against existential forgery -func (sw *AsyncHasher) Sum(b []byte, length int, meta []byte) (s []byte) { - sw.mtx.Lock() - t := sw.getTree() - if length == 0 { - sw.mtx.Unlock() - s = sw.pool.zerohashes[sw.pool.Depth] - } else { - // for non-zero input the rightmost section is written to the tree asynchronously - // if the actual last section has been written (t.cursor == length/t.secsize) - maxsec := (length - 1) / sw.secsize - if t.offset > 0 { - go sw.write(t.cursor, t.section, maxsec == t.cursor) - } - // set cursor to maxsec so final section is written when it arrives - t.cursor = maxsec - t.offset = length - result := t.result - sw.mtx.Unlock() - // wait for the result or reset - s = <-result - } - // relesase the tree back to the pool - sw.releaseTree() - // if no meta is given just append digest to b - if len(meta) == 0 { - return append(b, s...) - } - // hash together meta and BMT root hash using the pools - return doSum(sw.pool.hasher(), b, meta, s) -} - -// writeSection writes the hash of i-th section into level 1 node of the BMT tree -func (h *Hasher) writeSection(i int, section []byte, double bool, final bool) { - // select the leaf node for the section - var n *node - var isLeft bool - var hasher hash.Hash - var level int - t := h.getTree() - if double { - level++ - n = t.leaves[i] - hasher = n.hasher - isLeft = n.isLeft - n = n.parent - // hash the section - section = doSum(hasher, nil, section) - } else { - n = t.leaves[i/2] - hasher = n.hasher - isLeft = i%2 == 0 - } - // write hash into parent node - if final { - // for the last segment use writeFinalNode - h.writeFinalNode(level, n, hasher, isLeft, section) - } else { - h.writeNode(n, hasher, isLeft, section) - } -} - -// writeNode pushes the data to the node -// if it is the first of 2 sisters written, the routine terminates -// if it is the second, it calculates the hash and writes it -// to the parent node recursively -// since hashing the parent is synchronous the same hasher can be used -func (h *Hasher) writeNode(n *node, bh hash.Hash, isLeft bool, s []byte) { - level := 1 - for { - // at the root of the bmt just write the result to the result channel - if n == nil { - h.getTree().result <- s - return - } - // otherwise assign child hash to left or right segment - if isLeft { - n.left = s - } else { - n.right = s - } - // the child-thread first arriving will terminate - if n.toggle() { - return - } - // the thread coming second now can be sure both left and right children are written - // so it calculates the hash of left|right and pushes it to the parent - s = doSum(bh, nil, n.left, n.right) - isLeft = n.isLeft - n = n.parent - level++ - } -} - -// writeFinalNode is following the path starting from the final datasegment to the -// BMT root via parents -// for unbalanced trees it fills in the missing right sister nodes using -// the pool's lookup table for BMT subtree root hashes for all-zero sections -// otherwise behaves like `writeNode` -func (h *Hasher) writeFinalNode(level int, n *node, bh hash.Hash, isLeft bool, s []byte) { - - for { - // at the root of the bmt just write the result to the result channel - if n == nil { - if s != nil { - h.getTree().result <- s - } - return - } - var noHash bool - if isLeft { - // coming from left sister branch - // when the final section's path is going via left child node - // we include an all-zero subtree hash for the right level and toggle the node. - n.right = h.pool.zerohashes[level] - if s != nil { - n.left = s - // if a left final node carries a hash, it must be the first (and only thread) - // so the toggle is already in passive state no need no call - // yet thread needs to carry on pushing hash to parent - noHash = false - } else { - // if again first thread then propagate nil and calculate no hash - noHash = n.toggle() - } - } else { - // right sister branch - if s != nil { - // if hash was pushed from right child node, write right segment change state - n.right = s - // if toggle is true, we arrived first so no hashing just push nil to parent - noHash = n.toggle() - - } else { - // if s is nil, then thread arrived first at previous node and here there will be two, - // so no need to do anything and keep s = nil for parent - noHash = true - } - } - // the child-thread first arriving will just continue resetting s to nil - // the second thread now can be sure both left and right children are written - // it calculates the hash of left|right and pushes it to the parent - if noHash { - s = nil - } else { - s = doSum(bh, nil, n.left, n.right) - } - // iterate to parent - isLeft = n.isLeft - n = n.parent - level++ - } -} - -// getTree obtains a BMT resource by reserving one from the pool and assigns it to the bmt field -func (h *Hasher) getTree() *tree { - if h.bmt != nil { - return h.bmt - } - t := h.pool.reserve() - h.bmt = t - return t -} - -// atomic bool toggle implementing a concurrent reusable 2-state object -// atomic addint with %2 implements atomic bool toggle -// it returns true if the toggler just put it in the active/waiting state -func (n *node) toggle() bool { - return atomic.AddInt32(&n.state, 1)%2 == 1 -} - -// calculates the hash of the data using hash.Hash -func doSum(h hash.Hash, b []byte, data ...[]byte) []byte { - h.Reset() - for _, v := range data { - h.Write(v) - } - return h.Sum(b) -} - -// hashstr is a pretty printer for bytes used in tree.draw -func hashstr(b []byte) string { - end := len(b) - if end > 4 { - end = 4 - } - return fmt.Sprintf("%x", b[:end]) -} - -// calculateDepthFor calculates the depth (number of levels) in the BMT tree -func calculateDepthFor(n int) (d int) { - c := 2 - for ; c < n; c *= 2 { - d++ - } - return d + 1 -} diff --git a/swarm/bmt/bmt_r.go b/swarm/bmt/bmt_r.go deleted file mode 100644 index 0cb6c146f5d7..000000000000 --- a/swarm/bmt/bmt_r.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package bmt is a simple nonconcurrent reference implementation for hashsize segment based -// Binary Merkle tree hash on arbitrary but fixed maximum chunksize -// -// This implementation does not take advantage of any paralellisms and uses -// far more memory than necessary, but it is easy to see that it is correct. -// It can be used for generating test cases for optimized implementations. -// There is extra check on reference hasher correctness in bmt_test.go -// * TestRefHasher -// * testBMTHasherCorrectness function -package bmt - -import ( - "hash" -) - -// RefHasher is the non-optimized easy-to-read reference implementation of BMT -type RefHasher struct { - maxDataLength int // c * hashSize, where c = 2 ^ ceil(log2(count)), where count = ceil(length / hashSize) - sectionLength int // 2 * hashSize - hasher hash.Hash // base hash func (Keccak256 SHA3) -} - -// NewRefHasher returns a new RefHasher -func NewRefHasher(hasher BaseHasherFunc, count int) *RefHasher { - h := hasher() - hashsize := h.Size() - c := 2 - for ; c < count; c *= 2 { - } - return &RefHasher{ - sectionLength: 2 * hashsize, - maxDataLength: c * hashsize, - hasher: h, - } -} - -// Hash returns the BMT hash of the byte slice -// implements the SwarmHash interface -func (rh *RefHasher) Hash(data []byte) []byte { - // if data is shorter than the base length (maxDataLength), we provide padding with zeros - d := make([]byte, rh.maxDataLength) - length := len(data) - if length > rh.maxDataLength { - length = rh.maxDataLength - } - copy(d, data[:length]) - return rh.hash(d, rh.maxDataLength) -} - -// data has length maxDataLength = segmentSize * 2^k -// hash calls itself recursively on both halves of the given slice -// concatenates the results, and returns the hash of that -// if the length of d is 2 * segmentSize then just returns the hash of that section -func (rh *RefHasher) hash(data []byte, length int) []byte { - var section []byte - if length == rh.sectionLength { - // section contains two data segments (d) - section = data - } else { - // section contains hashes of left and right BMT subtreea - // to be calculated by calling hash recursively on left and right half of d - length /= 2 - section = append(rh.hash(data[:length], length), rh.hash(data[length:], length)...) - } - rh.hasher.Reset() - rh.hasher.Write(section) - return rh.hasher.Sum(nil) -} diff --git a/swarm/bmt/bmt_test.go b/swarm/bmt/bmt_test.go deleted file mode 100644 index ab712d08c2da..000000000000 --- a/swarm/bmt/bmt_test.go +++ /dev/null @@ -1,583 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bmt - -import ( - "bytes" - "encoding/binary" - "fmt" - "math/rand" - "sync" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/testutil" - "golang.org/x/crypto/sha3" -) - -// the actual data length generated (could be longer than max datalength of the BMT) -const BufferSize = 4128 - -const ( - // segmentCount is the maximum number of segments of the underlying chunk - // Should be equal to max-chunk-data-size / hash-size - // Currently set to 128 == 4096 (default chunk size) / 32 (sha3.keccak256 size) - segmentCount = 128 -) - -var counts = []int{1, 2, 3, 4, 5, 8, 9, 15, 16, 17, 32, 37, 42, 53, 63, 64, 65, 111, 127, 128} - -// calculates the Keccak256 SHA3 hash of the data -func sha3hash(data ...[]byte) []byte { - h := sha3.NewLegacyKeccak256() - return doSum(h, nil, data...) -} - -// TestRefHasher tests that the RefHasher computes the expected BMT hash for -// some small data lengths -func TestRefHasher(t *testing.T) { - // the test struct is used to specify the expected BMT hash for - // segment counts between from and to and lengths from 1 to datalength - type test struct { - from int - to int - expected func([]byte) []byte - } - - var tests []*test - // all lengths in [0,64] should be: - // - // sha3hash(data) - // - tests = append(tests, &test{ - from: 1, - to: 2, - expected: func(d []byte) []byte { - data := make([]byte, 64) - copy(data, d) - return sha3hash(data) - }, - }) - - // all lengths in [3,4] should be: - // - // sha3hash( - // sha3hash(data[:64]) - // sha3hash(data[64:]) - // ) - // - tests = append(tests, &test{ - from: 3, - to: 4, - expected: func(d []byte) []byte { - data := make([]byte, 128) - copy(data, d) - return sha3hash(sha3hash(data[:64]), sha3hash(data[64:])) - }, - }) - - // all segmentCounts in [5,8] should be: - // - // sha3hash( - // sha3hash( - // sha3hash(data[:64]) - // sha3hash(data[64:128]) - // ) - // sha3hash( - // sha3hash(data[128:192]) - // sha3hash(data[192:]) - // ) - // ) - // - tests = append(tests, &test{ - from: 5, - to: 8, - expected: func(d []byte) []byte { - data := make([]byte, 256) - copy(data, d) - return sha3hash(sha3hash(sha3hash(data[:64]), sha3hash(data[64:128])), sha3hash(sha3hash(data[128:192]), sha3hash(data[192:]))) - }, - }) - - // run the tests - for i, x := range tests { - for segmentCount := x.from; segmentCount <= x.to; segmentCount++ { - for length := 1; length <= segmentCount*32; length++ { - t.Run(fmt.Sprintf("%d_segments_%d_bytes", segmentCount, length), func(t *testing.T) { - data := testutil.RandomBytes(i, length) - expected := x.expected(data) - actual := NewRefHasher(sha3.NewLegacyKeccak256, segmentCount).Hash(data) - if !bytes.Equal(actual, expected) { - t.Fatalf("expected %x, got %x", expected, actual) - } - }) - } - } - } -} - -// tests if hasher responds with correct hash comparing the reference implementation return value -func TestHasherEmptyData(t *testing.T) { - hasher := sha3.NewLegacyKeccak256 - var data []byte - for _, count := range counts { - t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) { - pool := NewTreePool(hasher, count, PoolSize) - defer pool.Drain(0) - bmt := New(pool) - rbmt := NewRefHasher(hasher, count) - refHash := rbmt.Hash(data) - expHash := syncHash(bmt, nil, data) - if !bytes.Equal(expHash, refHash) { - t.Fatalf("hash mismatch with reference. expected %x, got %x", refHash, expHash) - } - }) - } -} - -// tests sequential write with entire max size written in one go -func TestSyncHasherCorrectness(t *testing.T) { - data := testutil.RandomBytes(1, BufferSize) - hasher := sha3.NewLegacyKeccak256 - size := hasher().Size() - - var err error - for _, count := range counts { - t.Run(fmt.Sprintf("segments_%v", count), func(t *testing.T) { - max := count * size - var incr int - capacity := 1 - pool := NewTreePool(hasher, count, capacity) - defer pool.Drain(0) - for n := 0; n <= max; n += incr { - incr = 1 + rand.Intn(5) - bmt := New(pool) - err = testHasherCorrectness(bmt, hasher, data, n, count) - if err != nil { - t.Fatal(err) - } - } - }) - } -} - -// tests order-neutral concurrent writes with entire max size written in one go -func TestAsyncCorrectness(t *testing.T) { - data := testutil.RandomBytes(1, BufferSize) - hasher := sha3.NewLegacyKeccak256 - size := hasher().Size() - whs := []whenHash{first, last, random} - - for _, double := range []bool{false, true} { - for _, wh := range whs { - for _, count := range counts { - t.Run(fmt.Sprintf("double_%v_hash_when_%v_segments_%v", double, wh, count), func(t *testing.T) { - max := count * size - var incr int - capacity := 1 - pool := NewTreePool(hasher, count, capacity) - defer pool.Drain(0) - for n := 1; n <= max; n += incr { - incr = 1 + rand.Intn(5) - bmt := New(pool) - d := data[:n] - rbmt := NewRefHasher(hasher, count) - exp := rbmt.Hash(d) - got := syncHash(bmt, nil, d) - if !bytes.Equal(got, exp) { - t.Fatalf("wrong sync hash for datalength %v: expected %x (ref), got %x", n, exp, got) - } - sw := bmt.NewAsyncWriter(double) - got = asyncHashRandom(sw, nil, d, wh) - if !bytes.Equal(got, exp) { - t.Fatalf("wrong async hash for datalength %v: expected %x, got %x", n, exp, got) - } - } - }) - } - } - } -} - -// Tests that the BMT hasher can be synchronously reused with poolsizes 1 and PoolSize -func TestHasherReuse(t *testing.T) { - t.Run(fmt.Sprintf("poolsize_%d", 1), func(t *testing.T) { - testHasherReuse(1, t) - }) - t.Run(fmt.Sprintf("poolsize_%d", PoolSize), func(t *testing.T) { - testHasherReuse(PoolSize, t) - }) -} - -// tests if bmt reuse is not corrupting result -func testHasherReuse(poolsize int, t *testing.T) { - hasher := sha3.NewLegacyKeccak256 - pool := NewTreePool(hasher, segmentCount, poolsize) - defer pool.Drain(0) - bmt := New(pool) - - for i := 0; i < 100; i++ { - data := testutil.RandomBytes(1, BufferSize) - n := rand.Intn(bmt.Size()) - err := testHasherCorrectness(bmt, hasher, data, n, segmentCount) - if err != nil { - t.Fatal(err) - } - } -} - -// Tests if pool can be cleanly reused even in concurrent use by several hasher -func TestBMTConcurrentUse(t *testing.T) { - hasher := sha3.NewLegacyKeccak256 - pool := NewTreePool(hasher, segmentCount, PoolSize) - defer pool.Drain(0) - cycles := 100 - errc := make(chan error) - - for i := 0; i < cycles; i++ { - go func() { - bmt := New(pool) - data := testutil.RandomBytes(1, BufferSize) - n := rand.Intn(bmt.Size()) - errc <- testHasherCorrectness(bmt, hasher, data, n, 128) - }() - } -LOOP: - for { - select { - case <-time.NewTimer(5 * time.Second).C: - t.Fatal("timed out") - case err := <-errc: - if err != nil { - t.Fatal(err) - } - cycles-- - if cycles == 0 { - break LOOP - } - } - } -} - -// Tests BMT Hasher io.Writer interface is working correctly -// even multiple short random write buffers -func TestBMTWriterBuffers(t *testing.T) { - hasher := sha3.NewLegacyKeccak256 - - for _, count := range counts { - t.Run(fmt.Sprintf("%d_segments", count), func(t *testing.T) { - errc := make(chan error) - pool := NewTreePool(hasher, count, PoolSize) - defer pool.Drain(0) - n := count * 32 - bmt := New(pool) - data := testutil.RandomBytes(1, n) - rbmt := NewRefHasher(hasher, count) - refHash := rbmt.Hash(data) - expHash := syncHash(bmt, nil, data) - if !bytes.Equal(expHash, refHash) { - t.Fatalf("hash mismatch with reference. expected %x, got %x", refHash, expHash) - } - attempts := 10 - f := func() error { - bmt := New(pool) - bmt.Reset() - var buflen int - for offset := 0; offset < n; offset += buflen { - buflen = rand.Intn(n-offset) + 1 - read, err := bmt.Write(data[offset : offset+buflen]) - if err != nil { - return err - } - if read != buflen { - return fmt.Errorf("incorrect read. expected %v bytes, got %v", buflen, read) - } - } - hash := bmt.Sum(nil) - if !bytes.Equal(hash, expHash) { - return fmt.Errorf("hash mismatch. expected %x, got %x", hash, expHash) - } - return nil - } - - for j := 0; j < attempts; j++ { - go func() { - errc <- f() - }() - } - timeout := time.NewTimer(2 * time.Second) - for { - select { - case err := <-errc: - if err != nil { - t.Fatal(err) - } - attempts-- - if attempts == 0 { - return - } - case <-timeout.C: - t.Fatalf("timeout") - } - } - }) - } -} - -// helper function that compares reference and optimised implementations on -// correctness -func testHasherCorrectness(bmt *Hasher, hasher BaseHasherFunc, d []byte, n, count int) (err error) { - span := make([]byte, 8) - if len(d) < n { - n = len(d) - } - binary.BigEndian.PutUint64(span, uint64(n)) - data := d[:n] - rbmt := NewRefHasher(hasher, count) - exp := sha3hash(span, rbmt.Hash(data)) - got := syncHash(bmt, span, data) - if !bytes.Equal(got, exp) { - return fmt.Errorf("wrong hash: expected %x, got %x", exp, got) - } - return err -} - -// -func BenchmarkBMT(t *testing.B) { - for size := 4096; size >= 128; size /= 2 { - t.Run(fmt.Sprintf("%v_size_%v", "SHA3", size), func(t *testing.B) { - benchmarkSHA3(t, size) - }) - t.Run(fmt.Sprintf("%v_size_%v", "Baseline", size), func(t *testing.B) { - benchmarkBMTBaseline(t, size) - }) - t.Run(fmt.Sprintf("%v_size_%v", "REF", size), func(t *testing.B) { - benchmarkRefHasher(t, size) - }) - t.Run(fmt.Sprintf("%v_size_%v", "BMT", size), func(t *testing.B) { - benchmarkBMT(t, size) - }) - } -} - -type whenHash = int - -const ( - first whenHash = iota - last - random -) - -func BenchmarkBMTAsync(t *testing.B) { - whs := []whenHash{first, last, random} - for size := 4096; size >= 128; size /= 2 { - for _, wh := range whs { - for _, double := range []bool{false, true} { - t.Run(fmt.Sprintf("double_%v_hash_when_%v_size_%v", double, wh, size), func(t *testing.B) { - benchmarkBMTAsync(t, size, wh, double) - }) - } - } - } -} - -func BenchmarkPool(t *testing.B) { - caps := []int{1, PoolSize} - for size := 4096; size >= 128; size /= 2 { - for _, c := range caps { - t.Run(fmt.Sprintf("poolsize_%v_size_%v", c, size), func(t *testing.B) { - benchmarkPool(t, c, size) - }) - } - } -} - -// benchmarks simple sha3 hash on chunks -func benchmarkSHA3(t *testing.B, n int) { - data := testutil.RandomBytes(1, n) - hasher := sha3.NewLegacyKeccak256 - h := hasher() - - t.ReportAllocs() - t.ResetTimer() - for i := 0; i < t.N; i++ { - doSum(h, nil, data) - } -} - -// benchmarks the minimum hashing time for a balanced (for simplicity) BMT -// by doing count/segmentsize parallel hashings of 2*segmentsize bytes -// doing it on n PoolSize each reusing the base hasher -// the premise is that this is the minimum computation needed for a BMT -// therefore this serves as a theoretical optimum for concurrent implementations -func benchmarkBMTBaseline(t *testing.B, n int) { - hasher := sha3.NewLegacyKeccak256 - hashSize := hasher().Size() - data := testutil.RandomBytes(1, hashSize) - - t.ReportAllocs() - t.ResetTimer() - for i := 0; i < t.N; i++ { - count := int32((n-1)/hashSize + 1) - wg := sync.WaitGroup{} - wg.Add(PoolSize) - var i int32 - for j := 0; j < PoolSize; j++ { - go func() { - defer wg.Done() - h := hasher() - for atomic.AddInt32(&i, 1) < count { - doSum(h, nil, data) - } - }() - } - wg.Wait() - } -} - -// benchmarks BMT Hasher -func benchmarkBMT(t *testing.B, n int) { - data := testutil.RandomBytes(1, n) - hasher := sha3.NewLegacyKeccak256 - pool := NewTreePool(hasher, segmentCount, PoolSize) - bmt := New(pool) - - t.ReportAllocs() - t.ResetTimer() - for i := 0; i < t.N; i++ { - syncHash(bmt, nil, data) - } -} - -// benchmarks BMT hasher with asynchronous concurrent segment/section writes -func benchmarkBMTAsync(t *testing.B, n int, wh whenHash, double bool) { - data := testutil.RandomBytes(1, n) - hasher := sha3.NewLegacyKeccak256 - pool := NewTreePool(hasher, segmentCount, PoolSize) - bmt := New(pool).NewAsyncWriter(double) - idxs, segments := splitAndShuffle(bmt.SectionSize(), data) - rand.Shuffle(len(idxs), func(i int, j int) { - idxs[i], idxs[j] = idxs[j], idxs[i] - }) - - t.ReportAllocs() - t.ResetTimer() - for i := 0; i < t.N; i++ { - asyncHash(bmt, nil, n, wh, idxs, segments) - } -} - -// benchmarks 100 concurrent bmt hashes with pool capacity -func benchmarkPool(t *testing.B, poolsize, n int) { - data := testutil.RandomBytes(1, n) - hasher := sha3.NewLegacyKeccak256 - pool := NewTreePool(hasher, segmentCount, poolsize) - cycles := 100 - - t.ReportAllocs() - t.ResetTimer() - wg := sync.WaitGroup{} - for i := 0; i < t.N; i++ { - wg.Add(cycles) - for j := 0; j < cycles; j++ { - go func() { - defer wg.Done() - bmt := New(pool) - syncHash(bmt, nil, data) - }() - } - wg.Wait() - } -} - -// benchmarks the reference hasher -func benchmarkRefHasher(t *testing.B, n int) { - data := testutil.RandomBytes(1, n) - hasher := sha3.NewLegacyKeccak256 - rbmt := NewRefHasher(hasher, 128) - - t.ReportAllocs() - t.ResetTimer() - for i := 0; i < t.N; i++ { - rbmt.Hash(data) - } -} - -// Hash hashes the data and the span using the bmt hasher -func syncHash(h *Hasher, span, data []byte) []byte { - h.ResetWithLength(span) - h.Write(data) - return h.Sum(nil) -} - -func splitAndShuffle(secsize int, data []byte) (idxs []int, segments [][]byte) { - l := len(data) - n := l / secsize - if l%secsize > 0 { - n++ - } - for i := 0; i < n; i++ { - idxs = append(idxs, i) - end := (i + 1) * secsize - if end > l { - end = l - } - section := data[i*secsize : end] - segments = append(segments, section) - } - rand.Shuffle(n, func(i int, j int) { - idxs[i], idxs[j] = idxs[j], idxs[i] - }) - return idxs, segments -} - -// splits the input data performs a random shuffle to mock async section writes -func asyncHashRandom(bmt SectionWriter, span []byte, data []byte, wh whenHash) (s []byte) { - idxs, segments := splitAndShuffle(bmt.SectionSize(), data) - return asyncHash(bmt, span, len(data), wh, idxs, segments) -} - -// mock for async section writes for BMT SectionWriter -// requires a permutation (a random shuffle) of list of all indexes of segments -// and writes them in order to the appropriate section -// the Sum function is called according to the wh parameter (first, last, random [relative to segment writes]) -func asyncHash(bmt SectionWriter, span []byte, l int, wh whenHash, idxs []int, segments [][]byte) (s []byte) { - bmt.Reset() - if l == 0 { - return bmt.Sum(nil, l, span) - } - c := make(chan []byte, 1) - hashf := func() { - c <- bmt.Sum(nil, l, span) - } - maxsize := len(idxs) - var r int - if wh == random { - r = rand.Intn(maxsize) - } - for i, idx := range idxs { - bmt.Write(idx, segments[idx]) - if (wh == first || wh == random) && i == r { - go hashf() - } - } - if wh == last { - return bmt.Sum(nil, l, span) - } - return <-c -} diff --git a/swarm/chunk/chunk.go b/swarm/chunk/chunk.go deleted file mode 100644 index 1449efccd0ef..000000000000 --- a/swarm/chunk/chunk.go +++ /dev/null @@ -1,5 +0,0 @@ -package chunk - -const ( - DefaultSize = 4096 -) diff --git a/swarm/dev/.dockerignore b/swarm/dev/.dockerignore deleted file mode 100644 index f9e69b37f369..000000000000 --- a/swarm/dev/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -bin/* -cluster/* diff --git a/swarm/dev/.gitignore b/swarm/dev/.gitignore deleted file mode 100644 index f9e69b37f369..000000000000 --- a/swarm/dev/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -bin/* -cluster/* diff --git a/swarm/dev/Dockerfile b/swarm/dev/Dockerfile deleted file mode 100644 index 728bdab1fb30..000000000000 --- a/swarm/dev/Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM ubuntu:xenial - -# install build + test dependencies -RUN apt-get update && \ - apt-get install --yes --no-install-recommends \ - ca-certificates \ - curl \ - fuse \ - g++ \ - gcc \ - git \ - iproute2 \ - iputils-ping \ - less \ - libc6-dev \ - make \ - pkg-config \ - && \ - apt-get clean - -# install Go -ENV GO_VERSION 1.8.1 -RUN curl -fSLo golang.tar.gz "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" && \ - tar -xzf golang.tar.gz -C /usr/local && \ - rm golang.tar.gz -ENV GOPATH /go -ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH - -# install docker CLI -RUN curl -fSLo docker.tar.gz https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz && \ - tar -xzf docker.tar.gz -C /usr/local/bin --strip-components=1 docker/docker && \ - rm docker.tar.gz - -# install jq -RUN curl -fSLo /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && \ - chmod +x /usr/local/bin/jq - -# install govendor -RUN go get -u github.com/kardianos/govendor - -# add custom bashrc -ADD bashrc /root/.bashrc diff --git a/swarm/dev/Makefile b/swarm/dev/Makefile deleted file mode 100644 index 365964b7f56c..000000000000 --- a/swarm/dev/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -.PHONY: build cluster test - -default: build - -build: - go build -o bin/swarm github.com/ethereum/go-ethereum/cmd/swarm - go build -o bin/geth github.com/ethereum/go-ethereum/cmd/geth - go build -o bin/bootnode github.com/ethereum/go-ethereum/cmd/bootnode - -cluster: build - scripts/boot-cluster.sh - -test: - go test -v github.com/ethereum/go-ethereum/swarm/... diff --git a/swarm/dev/README.md b/swarm/dev/README.md deleted file mode 100644 index 81e3b53585e9..000000000000 --- a/swarm/dev/README.md +++ /dev/null @@ -1,20 +0,0 @@ -Swarm development environment -============================= - -The Swarm development environment is a Linux bash shell which can be run in a -Docker container and provides a predictable build and test environment. - -### Start the Docker container - -Run the `run.sh` script to build the Docker image and run it, you will then be -at a bash prompt inside the `swarm/dev` directory. - -### Build binaries - -Run `make` to build the `swarm`, `geth` and `bootnode` binaries into the -`swarm/dev/bin` directory. - -### Boot a cluster - -Run `make cluster` to start a 3 node Swarm cluster, or run -`scripts/boot-cluster.sh --size N` to boot a cluster of size N. diff --git a/swarm/dev/bashrc b/swarm/dev/bashrc deleted file mode 100644 index efb504fa36eb..000000000000 --- a/swarm/dev/bashrc +++ /dev/null @@ -1,21 +0,0 @@ -export ROOT="${GOPATH}/src/github.com/ethereum/go-ethereum" -export PATH="${ROOT}/swarm/dev/bin:${PATH}" - -cd "${ROOT}/swarm/dev" - -cat <&2 <&2 - exit 1 - fi - name="$2" - shift 2 - ;; - -d | --docker-args) - if [[ -z "$2" ]]; then - echo "ERROR: --docker-args flag requires an argument" >&2 - exit 1 - fi - docker_args="$2" - shift 2 - ;; - *) - break - ;; - esac - done - - if [[ $# -ne 0 ]]; then - usage - echo "ERROR: invalid arguments" >&2 - exit 1 - fi -} - -build_image() { - docker build --tag "${name}" "${ROOT}/swarm/dev" -} - -run_image() { - exec docker run \ - --privileged \ - --interactive \ - --tty \ - --rm \ - --hostname "${name}" \ - --name "${name}" \ - --volume "${ROOT}:/go/src/github.com/ethereum/go-ethereum" \ - --volume "/var/run/docker.sock:/var/run/docker.sock" \ - ${docker_args} \ - "${name}" \ - /bin/bash -} - -main "$@" diff --git a/swarm/dev/scripts/boot-cluster.sh b/swarm/dev/scripts/boot-cluster.sh deleted file mode 100755 index 98ae3c8023f0..000000000000 --- a/swarm/dev/scripts/boot-cluster.sh +++ /dev/null @@ -1,288 +0,0 @@ -#!/bin/bash -# -# A script to boot a dev swarm cluster on a Linux host (typically in a Docker -# container started with swarm/dev/run.sh). -# -# The cluster contains a bootnode, a geth node and multiple swarm nodes, with -# each node having its own data directory in a base directory passed with the -# --dir flag (default is swarm/dev/cluster). -# -# To avoid using different ports for each node and to make networking more -# realistic, each node gets its own network namespace with IPs assigned from -# the 192.168.33.0/24 subnet: -# -# bootnode: 192.168.33.2 -# geth: 192.168.33.3 -# swarm: 192.168.33.10{1,2,...,n} - -set -e - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -source "${ROOT}/swarm/dev/scripts/util.sh" - -# DEFAULT_BASE_DIR is the default base directory to store node data -DEFAULT_BASE_DIR="${ROOT}/swarm/dev/cluster" - -# DEFAULT_CLUSTER_SIZE is the default swarm cluster size -DEFAULT_CLUSTER_SIZE=3 - -# Linux bridge configuration for connecting the node network namespaces -BRIDGE_NAME="swarmbr0" -BRIDGE_IP="192.168.33.1" - -# static bootnode configuration -BOOTNODE_IP="192.168.33.2" -BOOTNODE_PORT="30301" -BOOTNODE_KEY="32078f313bea771848db70745225c52c00981589ad6b5b49163f0f5ee852617d" -BOOTNODE_PUBKEY="760c4460e5336ac9bbd87952a3c7ec4363fc0a97bd31c86430806e287b437fd1b01abc6e1db640cf3106b520344af1d58b00b57823db3e1407cbc433e1b6d04d" -BOOTNODE_URL="enode://${BOOTNODE_PUBKEY}@${BOOTNODE_IP}:${BOOTNODE_PORT}" - -# static geth configuration -GETH_IP="192.168.33.3" -GETH_RPC_PORT="8545" -GETH_RPC_URL="http://${GETH_IP}:${GETH_RPC_PORT}" - -usage() { - cat >&2 < "${key_file}" - - local args=( - --addr "${BOOTNODE_IP}:${BOOTNODE_PORT}" - --nodekey "${key_file}" - --verbosity "6" - ) - - start_node "bootnode" "${BOOTNODE_IP}" "$(which bootnode)" ${args[@]} -} - -# start_geth_node starts a geth node with --datadir pointing at /geth -# and a single, unlocked account with password "geth" -start_geth_node() { - local dir="${base_dir}/geth" - mkdir -p "${dir}" - - local password="geth" - echo "${password}" > "${dir}/password" - - # create an account if necessary - if [[ ! -e "${dir}/keystore" ]]; then - info "creating geth account" - create_account "${dir}" "${password}" - fi - - # get the account address - local address="$(jq --raw-output '.address' ${dir}/keystore/*)" - if [[ -z "${address}" ]]; then - fail "failed to get geth account address" - fi - - local args=( - --datadir "${dir}" - --networkid "321" - --bootnodes "${BOOTNODE_URL}" - --unlock "${address}" - --password "${dir}/password" - --rpc - --rpcaddr "${GETH_IP}" - --rpcport "${GETH_RPC_PORT}" - --verbosity "6" - ) - - start_node "geth" "${GETH_IP}" "$(which geth)" ${args[@]} -} - -start_swarm_nodes() { - for i in $(seq 1 ${cluster_size}); do - start_swarm_node "${i}" - done -} - -# start_swarm_node starts a swarm node with a name like "swarmNN" (where NN is -# a zero-padded integer like "07"), --datadir pointing at / -# (e.g. /swarm07) and a single account with as the password -start_swarm_node() { - local num=$1 - local name="swarm$(printf '%02d' ${num})" - local ip="192.168.33.1$(printf '%02d' ${num})" - - local dir="${base_dir}/${name}" - mkdir -p "${dir}" - - local password="${name}" - echo "${password}" > "${dir}/password" - - # create an account if necessary - if [[ ! -e "${dir}/keystore" ]]; then - info "creating account for ${name}" - create_account "${dir}" "${password}" - fi - - # get the account address - local address="$(jq --raw-output '.address' ${dir}/keystore/*)" - if [[ -z "${address}" ]]; then - fail "failed to get swarm account address" - fi - - local args=( - --bootnodes "${BOOTNODE_URL}" - --datadir "${dir}" - --identity "${name}" - --ens-api "${GETH_RPC_URL}" - --bzznetworkid "321" - --bzzaccount "${address}" - --password "${dir}/password" - --verbosity "6" - ) - - start_node "${name}" "${ip}" "$(which swarm)" ${args[@]} -} - -# start_node runs the node command as a daemon in a network namespace -start_node() { - local name="$1" - local ip="$2" - local path="$3" - local cmd_args=${@:4} - - info "starting ${name} with IP ${ip}" - - create_node_network "${name}" "${ip}" - - # add a marker to the log file - cat >> "${log_dir}/${name}.log" <>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Starting ${name} node - $(date) ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -EOF - - # run the command in the network namespace using start-stop-daemon to - # daemonise the process, sending all output to the log file - local daemon_args=( - --start - --background - --no-close - --make-pidfile - --pidfile "${pid_dir}/${name}.pid" - --exec "${path}" - ) - if ! ip netns exec "${name}" start-stop-daemon ${daemon_args[@]} -- $cmd_args &>> "${log_dir}/${name}.log"; then - fail "could not start ${name}, check ${log_dir}/${name}.log" - fi -} - -# create_node_network creates a network namespace and connects it to the Linux -# bridge using a veth pair -create_node_network() { - local name="$1" - local ip="$2" - - # create the namespace - ip netns add "${name}" - - # create the veth pair - local veth0="veth${name}0" - local veth1="veth${name}1" - ip link add name "${veth0}" type veth peer name "${veth1}" - - # add one end to the bridge - ip link set dev "${veth0}" master "${BRIDGE_NAME}" - ip link set dev "${veth0}" up - - # add the other end to the namespace, rename it eth0 and give it the ip - ip link set dev "${veth1}" netns "${name}" - ip netns exec "${name}" ip link set dev "${veth1}" name "eth0" - ip netns exec "${name}" ip link set dev "eth0" up - ip netns exec "${name}" ip address add "${ip}/24" dev "eth0" -} - -create_account() { - local dir=$1 - local password=$2 - - geth --datadir "${dir}" --password /dev/stdin account new <<< "${password}" -} - -main "$@" diff --git a/swarm/dev/scripts/random-uploads.sh b/swarm/dev/scripts/random-uploads.sh deleted file mode 100755 index 563a51befcf9..000000000000 --- a/swarm/dev/scripts/random-uploads.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash -# -# A script to upload random data to a swarm cluster. -# -# Example: -# -# random-uploads.sh --addr 192.168.33.101:8500 --size 40k --count 1000 - -set -e - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -source "${ROOT}/swarm/dev/scripts/util.sh" - -DEFAULT_ADDR="localhost:8500" -DEFAULT_UPLOAD_SIZE="40k" -DEFAULT_UPLOAD_COUNT="1000" - -usage() { - cat >&2 </dev/null -} - -parse_args() { - while true; do - case "$1" in - -h | --help) - usage - exit 0 - ;; - -a | --addr) - if [[ -z "$2" ]]; then - fail "--addr flag requires an argument" - fi - addr="$2" - shift 2 - ;; - -s | --size) - if [[ -z "$2" ]]; then - fail "--size flag requires an argument" - fi - upload_size="$2" - shift 2 - ;; - -c | --count) - if [[ -z "$2" ]]; then - fail "--count flag requires an argument" - fi - upload_count="$2" - shift 2 - ;; - *) - break - ;; - esac - done - - if [[ $# -ne 0 ]]; then - usage - fail "ERROR: invalid arguments: $@" - fi -} - -main "$@" diff --git a/swarm/dev/scripts/stop-cluster.sh b/swarm/dev/scripts/stop-cluster.sh deleted file mode 100755 index 89cb7b0c9ab7..000000000000 --- a/swarm/dev/scripts/stop-cluster.sh +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/bash -# -# A script to shutdown a dev swarm cluster. - -set -e - -ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -source "${ROOT}/swarm/dev/scripts/util.sh" - -DEFAULT_BASE_DIR="${ROOT}/swarm/dev/cluster" - -usage() { - cat >&2 </dev/null; then - ip link delete dev "veth${name}0" - fi -} - -delete_network() { - if ip link show "swarmbr0" &>/dev/null; then - ip link delete dev "swarmbr0" - fi -} - -main "$@" diff --git a/swarm/dev/scripts/util.sh b/swarm/dev/scripts/util.sh deleted file mode 100644 index f17a12e420d0..000000000000 --- a/swarm/dev/scripts/util.sh +++ /dev/null @@ -1,53 +0,0 @@ -# shared shell functions - -info() { - local msg="$@" - local timestamp="$(date +%H:%M:%S)" - say "===> ${timestamp} ${msg}" "green" -} - -warn() { - local msg="$@" - local timestamp=$(date +%H:%M:%S) - say "===> ${timestamp} WARN: ${msg}" "yellow" >&2 -} - -fail() { - local msg="$@" - say "ERROR: ${msg}" "red" >&2 - exit 1 -} - -# say prints the given message to STDOUT, using the optional color if -# STDOUT is a terminal. -# -# usage: -# -# say "foo" - prints "foo" -# say "bar" "red" - prints "bar" in red -# say "baz" "green" - prints "baz" in green -# say "qux" "red" | tee - prints "qux" with no colour -# -say() { - local msg=$1 - local color=$2 - - if [[ -n "${color}" ]] && [[ -t 1 ]]; then - case "${color}" in - red) - echo -e "\033[1;31m${msg}\033[0m" - ;; - green) - echo -e "\033[1;32m${msg}\033[0m" - ;; - yellow) - echo -e "\033[1;33m${msg}\033[0m" - ;; - *) - echo "${msg}" - ;; - esac - else - echo "${msg}" - fi -} diff --git a/swarm/docker/Dockerfile b/swarm/docker/Dockerfile deleted file mode 100644 index 9450609dd8e2..000000000000 --- a/swarm/docker/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -FROM golang:1.11-alpine as builder - -ARG VERSION - -RUN apk add --update git gcc g++ linux-headers -RUN mkdir -p $GOPATH/src/github.com/ethereum && \ - cd $GOPATH/src/github.com/ethereum && \ - git clone https://github.com/ethersphere/go-ethereum && \ - cd $GOPATH/src/github.com/ethereum/go-ethereum && \ - git checkout ${VERSION} && \ - go install -ldflags "-X main.gitCommit=${VERSION}" ./cmd/swarm && \ - go install -ldflags "-X main.gitCommit=${VERSION}" ./cmd/swarm/swarm-smoke && \ - go install -ldflags "-X main.gitCommit=${VERSION}" ./cmd/swarm/global-store && \ - go install -ldflags "-X main.gitCommit=${VERSION}" ./cmd/geth - - -FROM alpine:3.8 as swarm-smoke -WORKDIR / -COPY --from=builder /go/bin/swarm-smoke / -ADD run-smoke.sh /run-smoke.sh -ENTRYPOINT ["/run-smoke.sh"] - -FROM alpine:3.8 as swarm-global-store -WORKDIR / -COPY --from=builder /go/bin/global-store / -ENTRYPOINT ["/global-store"] - -FROM alpine:3.8 as swarm -WORKDIR / -COPY --from=builder /go/bin/swarm /go/bin/geth / -ADD run.sh /run.sh -ENTRYPOINT ["/run.sh"] diff --git a/swarm/docker/run-smoke.sh b/swarm/docker/run-smoke.sh deleted file mode 100755 index ba57a7ecd654..000000000000 --- a/swarm/docker/run-smoke.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -set -o errexit -set -o pipefail -set -o nounset - -/swarm-smoke $@ 2>&1 || true diff --git a/swarm/docker/run.sh b/swarm/docker/run.sh deleted file mode 100755 index 3e613b56d95d..000000000000 --- a/swarm/docker/run.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -set -o errexit -set -o pipefail -set -o nounset - -PASSWORD=${PASSWORD:-} -DATADIR=${DATADIR:-/root/.ethereum/} - -if [ "$PASSWORD" == "" ]; then echo "Password must be set, in order to use swarm non-interactively." && exit 1; fi - -echo $PASSWORD > /password - -KEYFILE=`find $DATADIR | grep UTC | head -n 1` || true -if [ ! -f "$KEYFILE" ]; then echo "No keyfile found. Generating..." && /geth --datadir $DATADIR --password /password account new; fi -KEYFILE=`find $DATADIR | grep UTC | head -n 1` || true -if [ ! -f "$KEYFILE" ]; then echo "Could not find nor generate a BZZ keyfile." && exit 1; else echo "Found keyfile $KEYFILE"; fi - -VERSION=`/swarm version` -echo "Running Swarm:" -echo $VERSION - -export BZZACCOUNT="`echo -n $KEYFILE | tail -c 40`" || true -if [ "$BZZACCOUNT" == "" ]; then echo "Could not parse BZZACCOUNT from keyfile." && exit 1; fi - -exec /swarm --bzzaccount=$BZZACCOUNT --password /password --datadir $DATADIR $@ 2>&1 diff --git a/swarm/fuse/fuse_dir.go b/swarm/fuse/fuse_dir.go deleted file mode 100644 index 7f66451f1035..000000000000 --- a/swarm/fuse/fuse_dir.go +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build linux darwin freebsd - -package fuse - -import ( - "os" - "path/filepath" - "sync" - - "bazil.org/fuse" - "bazil.org/fuse/fs" - "github.com/ethereum/go-ethereum/swarm/log" - "golang.org/x/net/context" -) - -var ( - _ fs.Node = (*SwarmDir)(nil) - _ fs.NodeRequestLookuper = (*SwarmDir)(nil) - _ fs.HandleReadDirAller = (*SwarmDir)(nil) - _ fs.NodeCreater = (*SwarmDir)(nil) - _ fs.NodeRemover = (*SwarmDir)(nil) - _ fs.NodeMkdirer = (*SwarmDir)(nil) -) - -type SwarmDir struct { - inode uint64 - name string - path string - directories []*SwarmDir - files []*SwarmFile - - mountInfo *MountInfo - lock *sync.RWMutex -} - -func NewSwarmDir(fullpath string, minfo *MountInfo) *SwarmDir { - log.Debug("swarmfs", "NewSwarmDir", fullpath) - newdir := &SwarmDir{ - inode: NewInode(), - name: filepath.Base(fullpath), - path: fullpath, - directories: []*SwarmDir{}, - files: []*SwarmFile{}, - mountInfo: minfo, - lock: &sync.RWMutex{}, - } - return newdir -} - -func (sd *SwarmDir) Attr(ctx context.Context, a *fuse.Attr) error { - sd.lock.RLock() - defer sd.lock.RUnlock() - a.Inode = sd.inode - a.Mode = os.ModeDir | 0700 - a.Uid = uint32(os.Getuid()) - a.Gid = uint32(os.Getegid()) - return nil -} - -func (sd *SwarmDir) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fs.Node, error) { - log.Debug("swarmfs", "Lookup", req.Name) - for _, n := range sd.files { - if n.name == req.Name { - return n, nil - } - } - for _, n := range sd.directories { - if n.name == req.Name { - return n, nil - } - } - return nil, fuse.ENOENT -} - -func (sd *SwarmDir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { - log.Debug("swarmfs ReadDirAll") - var children []fuse.Dirent - for _, file := range sd.files { - children = append(children, fuse.Dirent{Inode: file.inode, Type: fuse.DT_File, Name: file.name}) - } - for _, dir := range sd.directories { - children = append(children, fuse.Dirent{Inode: dir.inode, Type: fuse.DT_Dir, Name: dir.name}) - } - return children, nil -} - -func (sd *SwarmDir) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error) { - log.Debug("swarmfs Create", "path", sd.path, "req.Name", req.Name) - - newFile := NewSwarmFile(sd.path, req.Name, sd.mountInfo) - newFile.fileSize = 0 // 0 means, file is not in swarm yet and it is just created - - sd.lock.Lock() - defer sd.lock.Unlock() - sd.files = append(sd.files, newFile) - - return newFile, newFile, nil -} - -func (sd *SwarmDir) Remove(ctx context.Context, req *fuse.RemoveRequest) error { - log.Debug("swarmfs Remove", "path", sd.path, "req.Name", req.Name) - - if req.Dir && sd.directories != nil { - newDirs := []*SwarmDir{} - for _, dir := range sd.directories { - if dir.name == req.Name { - removeDirectoryFromSwarm(dir) - } else { - newDirs = append(newDirs, dir) - } - } - if len(sd.directories) > len(newDirs) { - sd.lock.Lock() - defer sd.lock.Unlock() - sd.directories = newDirs - } - return nil - } else if !req.Dir && sd.files != nil { - newFiles := []*SwarmFile{} - for _, f := range sd.files { - if f.name == req.Name { - removeFileFromSwarm(f) - } else { - newFiles = append(newFiles, f) - } - } - if len(sd.files) > len(newFiles) { - sd.lock.Lock() - defer sd.lock.Unlock() - sd.files = newFiles - } - return nil - } - return fuse.ENOENT -} - -func (sd *SwarmDir) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error) { - log.Debug("swarmfs Mkdir", "path", sd.path, "req.Name", req.Name) - newDir := NewSwarmDir(filepath.Join(sd.path, req.Name), sd.mountInfo) - sd.lock.Lock() - defer sd.lock.Unlock() - sd.directories = append(sd.directories, newDir) - - return newDir, nil -} diff --git a/swarm/fuse/fuse_file.go b/swarm/fuse/fuse_file.go deleted file mode 100644 index ca04f737e2a7..000000000000 --- a/swarm/fuse/fuse_file.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build linux darwin freebsd - -package fuse - -import ( - "errors" - "io" - "os" - "sync" - - "bazil.org/fuse" - "bazil.org/fuse/fs" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" - "golang.org/x/net/context" -) - -const ( - MaxAppendFileSize = 10485760 // 10Mb -) - -var ( - errInvalidOffset = errors.New("Invalid offset during write") - errFileSizeMaxLimixReached = errors.New("File size exceeded max limit") -) - -var ( - _ fs.Node = (*SwarmFile)(nil) - _ fs.HandleReader = (*SwarmFile)(nil) - _ fs.HandleWriter = (*SwarmFile)(nil) -) - -type SwarmFile struct { - inode uint64 - name string - path string - addr storage.Address - fileSize int64 - reader storage.LazySectionReader - - mountInfo *MountInfo - lock *sync.RWMutex -} - -func NewSwarmFile(path, fname string, minfo *MountInfo) *SwarmFile { - newFile := &SwarmFile{ - inode: NewInode(), - name: fname, - path: path, - addr: nil, - fileSize: -1, // -1 means , file already exists in swarm and you need to just get the size from swarm - reader: nil, - - mountInfo: minfo, - lock: &sync.RWMutex{}, - } - return newFile -} - -func (sf *SwarmFile) Attr(ctx context.Context, a *fuse.Attr) error { - log.Debug("swarmfs Attr", "path", sf.path) - sf.lock.Lock() - defer sf.lock.Unlock() - a.Inode = sf.inode - //TODO: need to get permission as argument - a.Mode = 0700 - a.Uid = uint32(os.Getuid()) - a.Gid = uint32(os.Getegid()) - - if sf.fileSize == -1 { - reader, _ := sf.mountInfo.swarmApi.Retrieve(ctx, sf.addr) - quitC := make(chan bool) - size, err := reader.Size(ctx, quitC) - if err != nil { - log.Error("Couldnt get size of file %s : %v", sf.path, err) - return err - } - sf.fileSize = size - log.Trace("swarmfs Attr", "size", size) - close(quitC) - } - a.Size = uint64(sf.fileSize) - return nil -} - -func (sf *SwarmFile) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error { - log.Debug("swarmfs Read", "path", sf.path, "req.String", req.String()) - sf.lock.RLock() - defer sf.lock.RUnlock() - if sf.reader == nil { - sf.reader, _ = sf.mountInfo.swarmApi.Retrieve(ctx, sf.addr) - } - buf := make([]byte, req.Size) - n, err := sf.reader.ReadAt(buf, req.Offset) - if err == io.ErrUnexpectedEOF || err == io.EOF { - err = nil - } - resp.Data = buf[:n] - sf.reader = nil - - return err -} - -func (sf *SwarmFile) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error { - log.Debug("swarmfs Write", "path", sf.path, "req.String", req.String()) - if sf.fileSize == 0 && req.Offset == 0 { - // A new file is created - err := addFileToSwarm(sf, req.Data, len(req.Data)) - if err != nil { - return err - } - resp.Size = len(req.Data) - } else if req.Offset <= sf.fileSize { - totalSize := sf.fileSize + int64(len(req.Data)) - if totalSize > MaxAppendFileSize { - log.Warn("swarmfs Append file size reached (%v) : (%v)", sf.fileSize, len(req.Data)) - return errFileSizeMaxLimixReached - } - - err := appendToExistingFileInSwarm(sf, req.Data, req.Offset, int64(len(req.Data))) - if err != nil { - return err - } - resp.Size = len(req.Data) - } else { - log.Warn("swarmfs Invalid write request size(%v) : off(%v)", sf.fileSize, req.Offset) - return errInvalidOffset - } - return nil -} diff --git a/swarm/fuse/swarmfs.go b/swarm/fuse/swarmfs.go deleted file mode 100644 index c7aa983b7dce..000000000000 --- a/swarm/fuse/swarmfs.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package fuse - -import ( - "sync" - "time" - - "github.com/ethereum/go-ethereum/swarm/api" -) - -const ( - Swarmfs_Version = "0.1" - mountTimeout = time.Second * 5 - unmountTimeout = time.Second * 10 - maxFuseMounts = 5 -) - -var ( - swarmfs *SwarmFS // Swarm file system singleton - swarmfsLock sync.Once - - inode uint64 = 1 // global inode - inodeLock sync.RWMutex -) - -type SwarmFS struct { - swarmApi *api.API - activeMounts map[string]*MountInfo - swarmFsLock *sync.RWMutex -} - -func NewSwarmFS(api *api.API) *SwarmFS { - swarmfsLock.Do(func() { - swarmfs = &SwarmFS{ - swarmApi: api, - swarmFsLock: &sync.RWMutex{}, - activeMounts: map[string]*MountInfo{}, - } - }) - return swarmfs - -} - -// Inode numbers need to be unique, they are used for caching inside fuse -func NewInode() uint64 { - inodeLock.Lock() - defer inodeLock.Unlock() - inode += 1 - return inode -} diff --git a/swarm/fuse/swarmfs_test.go b/swarm/fuse/swarmfs_test.go deleted file mode 100644 index 460e31c4e9af..000000000000 --- a/swarm/fuse/swarmfs_test.go +++ /dev/null @@ -1,1671 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build linux darwin freebsd - -package fuse - -import ( - "bytes" - "flag" - "fmt" - "io" - "io/ioutil" - "math/rand" - "os" - "path/filepath" - "testing" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/testutil" - colorable "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 4, "verbosity of logs") - rawlog = flag.Bool("rawlog", false, "turn off terminal formatting in logs") - longrunning = flag.Bool("longrunning", false, "do run long-running tests") -) - -func init() { - flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(!*rawlog)))) -} - -type fileInfo struct { - perm uint64 - uid int - gid int - contents []byte -} - -//create files from the map of name and content provided and upload them to swarm via api -func createTestFilesAndUploadToSwarm(t *testing.T, api *api.API, files map[string]fileInfo, uploadDir string, toEncrypt bool) string { - - //iterate the map - for fname, finfo := range files { - actualPath := filepath.Join(uploadDir, fname) - filePath := filepath.Dir(actualPath) - - //create directory - err := os.MkdirAll(filePath, 0777) - if err != nil { - t.Fatalf("Error creating directory '%v' : %v", filePath, err) - } - - //create file - fd, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(finfo.perm)) - if err1 != nil { - t.Fatalf("Error creating file %v: %v", actualPath, err1) - } - - //write content to file - _, err = fd.Write(finfo.contents) - if err != nil { - t.Fatalf("Error writing to file '%v' : %v", filePath, err) - } - /* - Note @holisticode: It's not clear why the Chown command was added to the test suite. - Some files are initialized with different permissions in the individual test, - resulting in errors on Chown which were not checked. - After adding the checks tests would fail. - - What's then the reason to have this check in the first place? - Disabling for now - - err = fd.Chown(finfo.uid, finfo.gid) - if err != nil { - t.Fatalf("Error chown file '%v' : %v", filePath, err) - } - */ - err = fd.Chmod(os.FileMode(finfo.perm)) - if err != nil { - t.Fatalf("Error chmod file '%v' : %v", filePath, err) - } - err = fd.Sync() - if err != nil { - t.Fatalf("Error sync file '%v' : %v", filePath, err) - } - err = fd.Close() - if err != nil { - t.Fatalf("Error closing file '%v' : %v", filePath, err) - } - } - - //upload directory to swarm and return hash - bzzhash, err := Upload(uploadDir, "", api, toEncrypt) - if err != nil { - t.Fatalf("Error uploading directory %v: %vm encryption: %v", uploadDir, err, toEncrypt) - } - - return bzzhash -} - -//mount a swarm hash as a directory on files system via FUSE -func mountDir(t *testing.T, api *api.API, files map[string]fileInfo, bzzHash string, mountDir string) *SwarmFS { - swarmfs := NewSwarmFS(api) - _, err := swarmfs.Mount(bzzHash, mountDir) - if isFUSEUnsupportedError(err) { - t.Skip("FUSE not supported:", err) - } else if err != nil { - t.Fatalf("Error mounting hash %v: %v", bzzHash, err) - } - - //check directory is mounted - found := false - mi := swarmfs.Listmounts() - for _, minfo := range mi { - minfo.lock.RLock() - if minfo.MountPoint == mountDir { - if minfo.StartManifest != bzzHash || - minfo.LatestManifest != bzzHash || - minfo.fuseConnection == nil { - minfo.lock.RUnlock() - t.Fatalf("Error mounting: exp(%s): act(%s)", bzzHash, minfo.StartManifest) - } - found = true - } - minfo.lock.RUnlock() - } - - // Test listMounts - if !found { - t.Fatalf("Error getting mounts information for %v: %v", mountDir, err) - } - - // Check if file and their attributes are as expected - compareGeneratedFileWithFileInMount(t, files, mountDir) - - return swarmfs -} - -// Check if file and their attributes are as expected -func compareGeneratedFileWithFileInMount(t *testing.T, files map[string]fileInfo, mountDir string) { - err := filepath.Walk(mountDir, func(path string, f os.FileInfo, err error) error { - if f.IsDir() { - return nil - } - fname := path[len(mountDir)+1:] - if _, ok := files[fname]; !ok { - t.Fatalf(" file %v present in mount dir and is not expected", fname) - } - return nil - }) - if err != nil { - t.Fatalf("Error walking dir %v", mountDir) - } - - for fname, finfo := range files { - destinationFile := filepath.Join(mountDir, fname) - - dfinfo, err := os.Stat(destinationFile) - if err != nil { - t.Fatalf("Destination file %v missing in mount: %v", fname, err) - } - - if int64(len(finfo.contents)) != dfinfo.Size() { - t.Fatalf("file %v Size mismatch source (%v) vs destination(%v)", fname, int64(len(finfo.contents)), dfinfo.Size()) - } - - if dfinfo.Mode().Perm().String() != "-rwx------" { - t.Fatalf("file %v Permission mismatch source (-rwx------) vs destination(%v)", fname, dfinfo.Mode().Perm()) - } - - fileContents, err := ioutil.ReadFile(filepath.Join(mountDir, fname)) - if err != nil { - t.Fatalf("Could not readfile %v : %v", fname, err) - } - if !bytes.Equal(fileContents, finfo.contents) { - t.Fatalf("File %v contents mismatch: %v , %v", fname, fileContents, finfo.contents) - } - // TODO: check uid and gid - } -} - -//check mounted file with provided content -func checkFile(t *testing.T, testMountDir, fname string, contents []byte) { - destinationFile := filepath.Join(testMountDir, fname) - dfinfo, err1 := os.Stat(destinationFile) - if err1 != nil { - t.Fatalf("Could not stat file %v", destinationFile) - } - if dfinfo.Size() != int64(len(contents)) { - t.Fatalf("Mismatch in size actual(%v) vs expected(%v)", dfinfo.Size(), int64(len(contents))) - } - - fd, err2 := os.OpenFile(destinationFile, os.O_RDONLY, os.FileMode(0665)) - if err2 != nil { - t.Fatalf("Could not open file %v", destinationFile) - } - newcontent := make([]byte, len(contents)) - _, err := fd.Read(newcontent) - if err != nil { - t.Fatalf("Could not read from file %v", err) - } - err = fd.Close() - if err != nil { - t.Fatalf("Could not close file %v", err) - } - - if !bytes.Equal(contents, newcontent) { - t.Fatalf("File content mismatch expected (%v): received (%v) ", contents, newcontent) - } -} - -func isDirEmpty(name string) bool { - f, err := os.Open(name) - if err != nil { - return false - } - defer f.Close() - - _, err = f.Readdirnames(1) - - return err == io.EOF -} - -type testAPI struct { - api *api.API -} - -type testData struct { - testDir string - testUploadDir string - testMountDir string - bzzHash string - files map[string]fileInfo - toEncrypt bool - swarmfs *SwarmFS -} - -//create the root dir of a test -func (ta *testAPI) initSubtest(name string) (*testData, error) { - var err error - d := &testData{} - d.testDir, err = ioutil.TempDir(os.TempDir(), name) - if err != nil { - return nil, fmt.Errorf("Couldn't create test dir: %v", err) - } - return d, nil -} - -//upload data and mount directory -func (ta *testAPI) uploadAndMount(dat *testData, t *testing.T) (*testData, error) { - //create upload dir - err := os.MkdirAll(dat.testUploadDir, 0777) - if err != nil { - return nil, fmt.Errorf("Couldn't create upload dir: %v", err) - } - //create mount dir - err = os.MkdirAll(dat.testMountDir, 0777) - if err != nil { - return nil, fmt.Errorf("Couldn't create mount dir: %v", err) - } - //upload the file - dat.bzzHash = createTestFilesAndUploadToSwarm(t, ta.api, dat.files, dat.testUploadDir, dat.toEncrypt) - log.Debug("Created test files and uploaded to Swarm") - //mount the directory - dat.swarmfs = mountDir(t, ta.api, dat.files, dat.bzzHash, dat.testMountDir) - log.Debug("Mounted swarm fs") - return dat, nil -} - -//add a directory to the test directory tree -func addDir(root string, name string) (string, error) { - d := filepath.Join(root, name) - err := os.MkdirAll(d, 0777) - if err != nil { - return "", fmt.Errorf("Couldn't create dir inside test dir: %v", err) - } - return d, nil -} - -func (ta *testAPI) mountListAndUnmountEncrypted(t *testing.T) { - log.Debug("Starting mountListAndUnmountEncrypted test") - ta.mountListAndUnmount(t, true) - log.Debug("Test mountListAndUnmountEncrypted terminated") -} - -func (ta *testAPI) mountListAndUnmountNonEncrypted(t *testing.T) { - log.Debug("Starting mountListAndUnmountNonEncrypted test") - ta.mountListAndUnmount(t, false) - log.Debug("Test mountListAndUnmountNonEncrypted terminated") -} - -//mount a directory unmount and check the directory is empty afterwards -func (ta *testAPI) mountListAndUnmount(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("mountListAndUnmount") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "testUploadDir") - dat.testMountDir = filepath.Join(dat.testDir, "testMountDir") - dat.files = make(map[string]fileInfo) - - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["2.txt"] = fileInfo{0711, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["3.txt"] = fileInfo{0622, 333, 444, testutil.RandomBytes(3, 100)} - dat.files["4.txt"] = fileInfo{0533, 333, 444, testutil.RandomBytes(4, 1024)} - dat.files["5.txt"] = fileInfo{0544, 333, 444, testutil.RandomBytes(5, 10)} - dat.files["6.txt"] = fileInfo{0555, 333, 444, testutil.RandomBytes(6, 10)} - dat.files["7.txt"] = fileInfo{0666, 333, 444, testutil.RandomBytes(7, 10)} - dat.files["8.txt"] = fileInfo{0777, 333, 333, testutil.RandomBytes(8, 10)} - dat.files["11.txt"] = fileInfo{0777, 333, 444, testutil.RandomBytes(9, 10)} - dat.files["111.txt"] = fileInfo{0777, 333, 444, testutil.RandomBytes(10, 10)} - dat.files["two/2.txt"] = fileInfo{0777, 333, 444, testutil.RandomBytes(11, 10)} - dat.files["two/2/2.txt"] = fileInfo{0777, 333, 444, testutil.RandomBytes(12, 10)} - dat.files["two/2./2.txt"] = fileInfo{0777, 444, 444, testutil.RandomBytes(13, 10)} - dat.files["twice/2.txt"] = fileInfo{0777, 444, 333, testutil.RandomBytes(14, 200)} - dat.files["one/two/three/four/five/six/seven/eight/nine/10.txt"] = fileInfo{0777, 333, 444, testutil.RandomBytes(15, 10240)} - dat.files["one/two/three/four/five/six/six"] = fileInfo{0777, 333, 444, testutil.RandomBytes(16, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - // Check unmount - _, err = dat.swarmfs.Unmount(dat.testMountDir) - if err != nil { - t.Fatalf("could not unmount %v", dat.bzzHash) - } - log.Debug("Unmount successful") - if !isDirEmpty(dat.testMountDir) { - t.Fatalf("unmount didnt work for %v", dat.testMountDir) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) maxMountsEncrypted(t *testing.T) { - log.Debug("Starting maxMountsEncrypted test") - ta.runMaxMounts(t, true) - log.Debug("Test maxMountsEncrypted terminated") -} - -func (ta *testAPI) maxMountsNonEncrypted(t *testing.T) { - log.Debug("Starting maxMountsNonEncrypted test") - ta.runMaxMounts(t, false) - log.Debug("Test maxMountsNonEncrypted terminated") -} - -//mount several different directories until the maximum has been reached -func (ta *testAPI) runMaxMounts(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("runMaxMounts") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "max-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "max-mount1") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - dat.testUploadDir = filepath.Join(dat.testDir, "max-upload2") - dat.testMountDir = filepath.Join(dat.testDir, "max-mount2") - dat.files["2.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - - dat.testUploadDir = filepath.Join(dat.testDir, "max-upload3") - dat.testMountDir = filepath.Join(dat.testDir, "max-mount3") - dat.files["3.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - - dat.testUploadDir = filepath.Join(dat.testDir, "max-upload4") - dat.testMountDir = filepath.Join(dat.testDir, "max-mount4") - dat.files["4.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - - dat.testUploadDir = filepath.Join(dat.testDir, "max-upload5") - dat.testMountDir = filepath.Join(dat.testDir, "max-mount5") - dat.files["5.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - - //now try an additional mount, should fail due to max mounts reached - testUploadDir6 := filepath.Join(dat.testDir, "max-upload6") - err = os.MkdirAll(testUploadDir6, 0777) - if err != nil { - t.Fatalf("Couldn't create upload dir 6: %v", err) - } - dat.files["6.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - testMountDir6 := filepath.Join(dat.testDir, "max-mount6") - err = os.MkdirAll(testMountDir6, 0777) - if err != nil { - t.Fatalf("Couldn't create mount dir 5: %v", err) - } - bzzHash6 := createTestFilesAndUploadToSwarm(t, ta.api, dat.files, testUploadDir6, toEncrypt) - log.Debug("Created test files and uploaded to swarm with uploadDir6") - _, err = dat.swarmfs.Mount(bzzHash6, testMountDir6) - if err == nil { - t.Fatalf("Expected this mount to fail due to exceeding max number of allowed mounts, but succeeded. %v", bzzHash6) - } - log.Debug("Maximum mount reached, additional mount failed. Correct.") -} - -func (ta *testAPI) remountEncrypted(t *testing.T) { - log.Debug("Starting remountEncrypted test") - ta.remount(t, true) - log.Debug("Test remountEncrypted terminated") -} -func (ta *testAPI) remountNonEncrypted(t *testing.T) { - log.Debug("Starting remountNonEncrypted test") - ta.remount(t, false) - log.Debug("Test remountNonEncrypted terminated") -} - -//test remounting same hash second time and different hash in already mounted point -func (ta *testAPI) remount(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("remount") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "remount-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "remount-mount1") - dat.files = make(map[string]fileInfo) - - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // try mounting the same hash second time - testMountDir2, err2 := addDir(dat.testDir, "remount-mount2") - if err2 != nil { - t.Fatalf("Error creating second mount dir: %v", err2) - } - _, err2 = dat.swarmfs.Mount(dat.bzzHash, testMountDir2) - if err2 != nil { - t.Fatalf("Error mounting hash second time on different dir %v", dat.bzzHash) - } - - // mount a different hash in already mounted point - dat.files["2.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - testUploadDir2, err3 := addDir(dat.testDir, "remount-upload2") - if err3 != nil { - t.Fatalf("Error creating second upload dir: %v", err3) - } - bzzHash2 := createTestFilesAndUploadToSwarm(t, ta.api, dat.files, testUploadDir2, toEncrypt) - _, err = swarmfs.Mount(bzzHash2, dat.testMountDir) - if err == nil { - t.Fatalf("Error mounting hash %v", bzzHash2) - } - log.Debug("Mount on existing mount point failed. Correct.") - - // mount nonexistent hash - failDir, err3 := addDir(dat.testDir, "remount-fail") - if err3 != nil { - t.Fatalf("Error creating remount dir: %v", bzzHash2) - } - failHash := "0xfea11223344" - _, err = swarmfs.Mount(failHash, failDir) - if err == nil { - t.Fatalf("Expected this mount to fail due to non existing hash. But succeeded %v", failHash) - } - log.Debug("Nonexistent hash hasn't been mounted. Correct.") -} - -func (ta *testAPI) unmountEncrypted(t *testing.T) { - log.Debug("Starting unmountEncrypted test") - ta.unmount(t, true) - log.Debug("Test unmountEncrypted terminated") -} - -func (ta *testAPI) unmountNonEncrypted(t *testing.T) { - log.Debug("Starting unmountNonEncrypted test") - ta.unmount(t, false) - log.Debug("Test unmountNonEncrypted terminated") -} - -//mount then unmount and check that it has been unmounted -func (ta *testAPI) unmount(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("unmount") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "ex-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "ex-mount1") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - _, err = dat.swarmfs.Unmount(dat.testMountDir) - if err != nil { - t.Fatalf("could not unmount %v", dat.bzzHash) - } - log.Debug("Unmounted Dir") - - mi := swarmfs.Listmounts() - log.Debug("Going to list mounts") - for _, minfo := range mi { - log.Debug("Mount point in list: ", "point", minfo.MountPoint) - if minfo.MountPoint == dat.testMountDir { - t.Fatalf("mount state not cleaned up in unmount case %v", dat.testMountDir) - } - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) unmountWhenResourceBusyEncrypted(t *testing.T) { - log.Debug("Starting unmountWhenResourceBusyEncrypted test") - ta.unmountWhenResourceBusy(t, true) - log.Debug("Test unmountWhenResourceBusyEncrypted terminated") -} -func (ta *testAPI) unmountWhenResourceBusyNonEncrypted(t *testing.T) { - log.Debug("Starting unmountWhenResourceBusyNonEncrypted test") - ta.unmountWhenResourceBusy(t, false) - log.Debug("Test unmountWhenResourceBusyNonEncrypted terminated") -} - -//unmount while a resource is busy; should fail -func (ta *testAPI) unmountWhenResourceBusy(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("unmountWhenResourceBusy") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "ex-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "ex-mount1") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - //create a file in the mounted directory, then try to unmount - should fail - actualPath := filepath.Join(dat.testMountDir, "2.txt") - //d, err := os.OpenFile(actualPath, os.O_RDWR, os.FileMode(0700)) - d, err := os.Create(actualPath) - if err != nil { - t.Fatalf("Couldn't create new file: %v", err) - } - //we need to manually close the file before mount for this test - //but let's defer too in case of errors - defer d.Close() - _, err = d.Write(testutil.RandomBytes(1, 10)) - if err != nil { - t.Fatalf("Couldn't write to file: %v", err) - } - log.Debug("Bytes written") - - _, err = dat.swarmfs.Unmount(dat.testMountDir) - if err == nil { - t.Fatalf("Expected mount to fail due to resource busy, but it succeeded...") - } - //free resources - err = d.Close() - if err != nil { - t.Fatalf("Couldn't close file! %v", dat.bzzHash) - } - log.Debug("File closed") - - //now unmount after explicitly closed file - _, err = dat.swarmfs.Unmount(dat.testMountDir) - if err != nil { - t.Fatalf("Expected mount to succeed after freeing resource, but it failed: %v", err) - } - //check if the dir is still mounted - mi := dat.swarmfs.Listmounts() - log.Debug("Going to list mounts") - for _, minfo := range mi { - log.Debug("Mount point in list: ", "point", minfo.MountPoint) - if minfo.MountPoint == dat.testMountDir { - t.Fatalf("mount state not cleaned up in unmount case %v", dat.testMountDir) - } - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) seekInMultiChunkFileEncrypted(t *testing.T) { - log.Debug("Starting seekInMultiChunkFileEncrypted test") - ta.seekInMultiChunkFile(t, true) - log.Debug("Test seekInMultiChunkFileEncrypted terminated") -} - -func (ta *testAPI) seekInMultiChunkFileNonEncrypted(t *testing.T) { - log.Debug("Starting seekInMultiChunkFileNonEncrypted test") - ta.seekInMultiChunkFile(t, false) - log.Debug("Test seekInMultiChunkFileNonEncrypted terminated") -} - -//open a file in a mounted dir and go to a certain position -func (ta *testAPI) seekInMultiChunkFile(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("seekInMultiChunkFile") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "seek-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "seek-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10240)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Open the file in the mounted dir and seek the second chunk - actualPath := filepath.Join(dat.testMountDir, "1.txt") - d, err := os.OpenFile(actualPath, os.O_RDONLY, os.FileMode(0700)) - if err != nil { - t.Fatalf("Couldn't open file: %v", err) - } - log.Debug("Opened file") - defer func() { - err := d.Close() - if err != nil { - t.Fatalf("Error closing file! %v", err) - } - }() - - _, err = d.Seek(5000, 0) - if err != nil { - t.Fatalf("Error seeking in file: %v", err) - } - - contents := make([]byte, 1024) - _, err = d.Read(contents) - if err != nil { - t.Fatalf("Error reading file: %v", err) - } - log.Debug("Read contents") - finfo := dat.files["1.txt"] - - if !bytes.Equal(finfo.contents[:6024][5000:], contents) { - t.Fatalf("File seek contents mismatch") - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) createNewFileEncrypted(t *testing.T) { - log.Debug("Starting createNewFileEncrypted test") - ta.createNewFile(t, true) - log.Debug("Test createNewFileEncrypted terminated") -} - -func (ta *testAPI) createNewFileNonEncrypted(t *testing.T) { - log.Debug("Starting createNewFileNonEncrypted test") - ta.createNewFile(t, false) - log.Debug("Test createNewFileNonEncrypted terminated") -} - -//create a new file in a mounted swarm directory, -//unmount the fuse dir and then remount to see if new file is still there -func (ta *testAPI) createNewFile(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("createNewFile") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "create-upload1") - dat.testMountDir = filepath.Join(dat.testDir, "create-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Create a new file in the root dir and check - actualPath := filepath.Join(dat.testMountDir, "2.txt") - d, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(0665)) - if err1 != nil { - t.Fatalf("Could not open file %s : %v", actualPath, err1) - } - defer d.Close() - log.Debug("Opened file") - contents := testutil.RandomBytes(1, 11) - log.Debug("content read") - _, err = d.Write(contents) - if err != nil { - t.Fatalf("Couldn't write contents: %v", err) - } - log.Debug("content written") - err = d.Close() - if err != nil { - t.Fatalf("Couldn't close file: %v", err) - } - log.Debug("file closed") - - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - testMountDir2, err3 := addDir(dat.testDir, "create-mount2") - if err3 != nil { - t.Fatalf("Error creating mount dir2: %v", err3) - } - // mount again and see if things are okay - dat.files["2.txt"] = fileInfo{0700, 333, 444, contents} - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, testMountDir2) - log.Debug("Directory mounted again") - - checkFile(t, testMountDir2, "2.txt", contents) - _, err2 = dat.swarmfs.Unmount(testMountDir2) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) createNewFileInsideDirectoryEncrypted(t *testing.T) { - log.Debug("Starting createNewFileInsideDirectoryEncrypted test") - ta.createNewFileInsideDirectory(t, true) - log.Debug("Test createNewFileInsideDirectoryEncrypted terminated") -} - -func (ta *testAPI) createNewFileInsideDirectoryNonEncrypted(t *testing.T) { - log.Debug("Starting createNewFileInsideDirectoryNonEncrypted test") - ta.createNewFileInsideDirectory(t, false) - log.Debug("Test createNewFileInsideDirectoryNonEncrypted terminated") -} - -//create a new file inside a directory inside the mount -func (ta *testAPI) createNewFileInsideDirectory(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("createNewFileInsideDirectory") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "createinsidedir-upload") - dat.testMountDir = filepath.Join(dat.testDir, "createinsidedir-mount") - dat.files = make(map[string]fileInfo) - dat.files["one/1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Create a new file inside a existing dir and check - dirToCreate := filepath.Join(dat.testMountDir, "one") - actualPath := filepath.Join(dirToCreate, "2.txt") - d, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(0665)) - if err1 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err1) - } - defer d.Close() - log.Debug("File opened") - contents := testutil.RandomBytes(1, 11) - log.Debug("Content read") - _, err = d.Write(contents) - if err != nil { - t.Fatalf("Error writing random bytes into file %v", err) - } - log.Debug("Content written") - err = d.Close() - if err != nil { - t.Fatalf("Error closing file %v", err) - } - log.Debug("File closed") - - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - testMountDir2, err3 := addDir(dat.testDir, "createinsidedir-mount2") - if err3 != nil { - t.Fatalf("Error creating mount dir2: %v", err3) - } - // mount again and see if things are okay - dat.files["one/2.txt"] = fileInfo{0700, 333, 444, contents} - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, testMountDir2) - log.Debug("Directory mounted again") - - checkFile(t, testMountDir2, "one/2.txt", contents) - _, err = dat.swarmfs.Unmount(testMountDir2) - if err != nil { - t.Fatalf("could not unmount %v", dat.bzzHash) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) createNewFileInsideNewDirectoryEncrypted(t *testing.T) { - log.Debug("Starting createNewFileInsideNewDirectoryEncrypted test") - ta.createNewFileInsideNewDirectory(t, true) - log.Debug("Test createNewFileInsideNewDirectoryEncrypted terminated") -} - -func (ta *testAPI) createNewFileInsideNewDirectoryNonEncrypted(t *testing.T) { - log.Debug("Starting createNewFileInsideNewDirectoryNonEncrypted test") - ta.createNewFileInsideNewDirectory(t, false) - log.Debug("Test createNewFileInsideNewDirectoryNonEncrypted terminated") -} - -//create a new directory in mount and a new file -func (ta *testAPI) createNewFileInsideNewDirectory(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("createNewFileInsideNewDirectory") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "createinsidenewdir-upload") - dat.testMountDir = filepath.Join(dat.testDir, "createinsidenewdir-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Create a new file inside a existing dir and check - dirToCreate, err2 := addDir(dat.testMountDir, "one") - if err2 != nil { - t.Fatalf("Error creating mount dir2: %v", err2) - } - actualPath := filepath.Join(dirToCreate, "2.txt") - d, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(0665)) - if err1 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err1) - } - defer d.Close() - log.Debug("File opened") - contents := testutil.RandomBytes(1, 11) - log.Debug("content read") - _, err = d.Write(contents) - if err != nil { - t.Fatalf("Error writing to file: %v", err) - } - log.Debug("content written") - err = d.Close() - if err != nil { - t.Fatalf("Error closing file: %v", err) - } - log.Debug("File closed") - - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - // mount again and see if things are okay - dat.files["one/2.txt"] = fileInfo{0700, 333, 444, contents} - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, dat.testMountDir) - log.Debug("Directory mounted again") - - checkFile(t, dat.testMountDir, "one/2.txt", contents) - _, err2 = dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeExistingFileEncrypted(t *testing.T) { - log.Debug("Starting removeExistingFileEncrypted test") - ta.removeExistingFile(t, true) - log.Debug("Test removeExistingFileEncrypted terminated") -} - -func (ta *testAPI) removeExistingFileNonEncrypted(t *testing.T) { - log.Debug("Starting removeExistingFileNonEncrypted test") - ta.removeExistingFile(t, false) - log.Debug("Test removeExistingFileNonEncrypted terminated") -} - -//remove existing file in mount -func (ta *testAPI) removeExistingFile(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeExistingFile") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "remove-upload") - dat.testMountDir = filepath.Join(dat.testDir, "remove-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Remove a file in the root dir and check - actualPath := filepath.Join(dat.testMountDir, "five.txt") - err = os.Remove(actualPath) - if err != nil { - t.Fatalf("Error removing file! %v", err) - } - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - // mount again and see if things are okay - delete(dat.files, "five.txt") - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, dat.testMountDir) - _, err = os.Stat(actualPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - _, err2 = dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeExistingFileInsideDirEncrypted(t *testing.T) { - log.Debug("Starting removeExistingFileInsideDirEncrypted test") - ta.removeExistingFileInsideDir(t, true) - log.Debug("Test removeExistingFileInsideDirEncrypted terminated") -} - -func (ta *testAPI) removeExistingFileInsideDirNonEncrypted(t *testing.T) { - log.Debug("Starting removeExistingFileInsideDirNonEncrypted test") - ta.removeExistingFileInsideDir(t, false) - log.Debug("Test removeExistingFileInsideDirNonEncrypted terminated") -} - -//remove a file inside a directory inside a mount -func (ta *testAPI) removeExistingFileInsideDir(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeExistingFileInsideDir") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "remove-upload") - dat.testMountDir = filepath.Join(dat.testDir, "remove-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["one/five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["one/six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Remove a file in the root dir and check - actualPath := filepath.Join(dat.testMountDir, "one") - actualPath = filepath.Join(actualPath, "five.txt") - err = os.Remove(actualPath) - if err != nil { - t.Fatalf("Error removing file! %v", err) - } - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - // mount again and see if things are okay - delete(dat.files, "one/five.txt") - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, dat.testMountDir) - _, err = os.Stat(actualPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - - okPath := filepath.Join(dat.testMountDir, "one") - okPath = filepath.Join(okPath, "six.txt") - _, err = os.Stat(okPath) - if err != nil { - t.Fatal("Expected file to be present in re-mount after removal, but it is not there") - } - _, err2 = dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeNewlyAddedFileEncrypted(t *testing.T) { - log.Debug("Starting removeNewlyAddedFileEncrypted test") - ta.removeNewlyAddedFile(t, true) - log.Debug("Test removeNewlyAddedFileEncrypted terminated") -} - -func (ta *testAPI) removeNewlyAddedFileNonEncrypted(t *testing.T) { - log.Debug("Starting removeNewlyAddedFileNonEncrypted test") - ta.removeNewlyAddedFile(t, false) - log.Debug("Test removeNewlyAddedFileNonEncrypted terminated") -} - -//add a file in mount and then remove it; on remount file should not be there -func (ta *testAPI) removeNewlyAddedFile(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeNewlyAddedFile") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "removenew-upload") - dat.testMountDir = filepath.Join(dat.testDir, "removenew-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Add a a new file and remove it - dirToCreate := filepath.Join(dat.testMountDir, "one") - err = os.MkdirAll(dirToCreate, os.FileMode(0665)) - if err != nil { - t.Fatalf("Error creating dir in mounted dir: %v", err) - } - actualPath := filepath.Join(dirToCreate, "2.txt") - d, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(0665)) - if err1 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err1) - } - defer d.Close() - log.Debug("file opened") - contents := testutil.RandomBytes(1, 11) - log.Debug("content read") - _, err = d.Write(contents) - if err != nil { - t.Fatalf("Error writing random bytes to file: %v", err) - } - log.Debug("content written") - err = d.Close() - if err != nil { - t.Fatalf("Error closing file: %v", err) - } - log.Debug("file closed") - - checkFile(t, dat.testMountDir, "one/2.txt", contents) - log.Debug("file checked") - - err = os.Remove(actualPath) - if err != nil { - t.Fatalf("Error removing file: %v", err) - } - log.Debug("file removed") - - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - testMountDir2, err3 := addDir(dat.testDir, "removenew-mount2") - if err3 != nil { - t.Fatalf("Error creating mount dir2: %v", err3) - } - // mount again and see if things are okay - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, testMountDir2) - log.Debug("Directory mounted again") - - if dat.bzzHash != mi.LatestManifest { - t.Fatalf("same contents different hash orig(%v): new(%v)", dat.bzzHash, mi.LatestManifest) - } - _, err2 = dat.swarmfs.Unmount(testMountDir2) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) addNewFileAndModifyContentsEncrypted(t *testing.T) { - log.Debug("Starting addNewFileAndModifyContentsEncrypted test") - ta.addNewFileAndModifyContents(t, true) - log.Debug("Test addNewFileAndModifyContentsEncrypted terminated") -} - -func (ta *testAPI) addNewFileAndModifyContentsNonEncrypted(t *testing.T) { - log.Debug("Starting addNewFileAndModifyContentsNonEncrypted test") - ta.addNewFileAndModifyContents(t, false) - log.Debug("Test addNewFileAndModifyContentsNonEncrypted terminated") -} - -//add a new file and modify content; remount and check the modified file is intact -func (ta *testAPI) addNewFileAndModifyContents(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("addNewFileAndModifyContents") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "modifyfile-upload") - dat.testMountDir = filepath.Join(dat.testDir, "modifyfile-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - // Create a new file in the root dir - actualPath := filepath.Join(dat.testMountDir, "2.txt") - d, err1 := os.OpenFile(actualPath, os.O_RDWR|os.O_CREATE, os.FileMode(0665)) - if err1 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err1) - } - defer d.Close() - //write some random data into the file - log.Debug("file opened") - line1 := []byte("Line 1") - _, err = rand.Read(line1) - if err != nil { - t.Fatalf("Error writing random bytes to byte array: %v", err) - } - log.Debug("line read") - _, err = d.Write(line1) - if err != nil { - t.Fatalf("Error writing random bytes to file: %v", err) - } - log.Debug("line written") - err = d.Close() - if err != nil { - t.Fatalf("Error closing file: %v", err) - } - log.Debug("file closed") - - //unmount the hash on the mounted dir - mi1, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - log.Debug("Directory unmounted") - - //mount on a different dir to see if modified file is correct - testMountDir2, err3 := addDir(dat.testDir, "modifyfile-mount2") - if err3 != nil { - t.Fatalf("Error creating mount dir2: %v", err3) - } - dat.files["2.txt"] = fileInfo{0700, 333, 444, line1} - _ = mountDir(t, ta.api, dat.files, mi1.LatestManifest, testMountDir2) - log.Debug("Directory mounted again") - - checkFile(t, testMountDir2, "2.txt", line1) - log.Debug("file checked") - - //unmount second dir - mi2, err4 := dat.swarmfs.Unmount(testMountDir2) - if err4 != nil { - t.Fatalf("Could not unmount %v", err4) - } - log.Debug("Directory unmounted again") - - //mount again on original dir and modify the file - //let's clean up the mounted dir first: remove... - err = os.RemoveAll(dat.testMountDir) - if err != nil { - t.Fatalf("Error cleaning up mount dir: %v", err) - } - //...and re-create - err = os.MkdirAll(dat.testMountDir, 0777) - if err != nil { - t.Fatalf("Error re-creating mount dir: %v", err) - } - //now remount - _ = mountDir(t, ta.api, dat.files, mi2.LatestManifest, dat.testMountDir) - log.Debug("Directory mounted yet again") - - //open the file.... - fd, err5 := os.OpenFile(actualPath, os.O_RDWR|os.O_APPEND, os.FileMode(0665)) - if err5 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err5) - } - defer fd.Close() - log.Debug("file opened") - //...and modify something - line2 := []byte("Line 2") - _, err = rand.Read(line2) - if err != nil { - t.Fatalf("Error modifying random bytes to byte array: %v", err) - } - log.Debug("line read") - _, err = fd.Seek(int64(len(line1)), 0) - if err != nil { - t.Fatalf("Error seeking position for modification: %v", err) - } - _, err = fd.Write(line2) - if err != nil { - t.Fatalf("Error modifying file: %v", err) - } - log.Debug("line written") - err = fd.Close() - if err != nil { - t.Fatalf("Error closing modified file; %v", err) - } - log.Debug("file closed") - - //unmount the modified directory - mi3, err6 := dat.swarmfs.Unmount(dat.testMountDir) - if err6 != nil { - t.Fatalf("Could not unmount %v", err6) - } - log.Debug("Directory unmounted yet again") - - //now remount on a different dir and check that the modified file is ok - testMountDir4, err7 := addDir(dat.testDir, "modifyfile-mount4") - if err7 != nil { - t.Fatalf("Could not unmount %v", err7) - } - b := [][]byte{line1, line2} - line1and2 := bytes.Join(b, []byte("")) - dat.files["2.txt"] = fileInfo{0700, 333, 444, line1and2} - _ = mountDir(t, ta.api, dat.files, mi3.LatestManifest, testMountDir4) - log.Debug("Directory mounted final time") - - checkFile(t, testMountDir4, "2.txt", line1and2) - _, err = dat.swarmfs.Unmount(testMountDir4) - if err != nil { - t.Fatalf("Could not unmount %v", err) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeEmptyDirEncrypted(t *testing.T) { - log.Debug("Starting removeEmptyDirEncrypted test") - ta.removeEmptyDir(t, true) - log.Debug("Test removeEmptyDirEncrypted terminated") -} - -func (ta *testAPI) removeEmptyDirNonEncrypted(t *testing.T) { - log.Debug("Starting removeEmptyDirNonEncrypted test") - ta.removeEmptyDir(t, false) - log.Debug("Test removeEmptyDirNonEncrypted terminated") -} - -//remove an empty dir inside mount -func (ta *testAPI) removeEmptyDir(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeEmptyDir") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "rmdir-upload") - dat.testMountDir = filepath.Join(dat.testDir, "rmdir-mount") - dat.files = make(map[string]fileInfo) - dat.files["1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - _, err2 := addDir(dat.testMountDir, "newdir") - if err2 != nil { - t.Fatalf("Could not unmount %v", err2) - } - mi, err := dat.swarmfs.Unmount(dat.testMountDir) - if err != nil { - t.Fatalf("Could not unmount %v", err) - } - log.Debug("Directory unmounted") - //by just adding an empty dir, the hash doesn't change; test this - if dat.bzzHash != mi.LatestManifest { - t.Fatalf("same contents different hash orig(%v): new(%v)", dat.bzzHash, mi.LatestManifest) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeDirWhichHasFilesEncrypted(t *testing.T) { - log.Debug("Starting removeDirWhichHasFilesEncrypted test") - ta.removeDirWhichHasFiles(t, true) - log.Debug("Test removeDirWhichHasFilesEncrypted terminated") -} -func (ta *testAPI) removeDirWhichHasFilesNonEncrypted(t *testing.T) { - log.Debug("Starting removeDirWhichHasFilesNonEncrypted test") - ta.removeDirWhichHasFiles(t, false) - log.Debug("Test removeDirWhichHasFilesNonEncrypted terminated") -} - -//remove a directory with a file; check on remount file isn't there -func (ta *testAPI) removeDirWhichHasFiles(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeDirWhichHasFiles") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "rmdir-upload") - dat.testMountDir = filepath.Join(dat.testDir, "rmdir-mount") - dat.files = make(map[string]fileInfo) - dat.files["one/1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["two/five.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["two/six.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - //delete a directory inside the mounted dir with all its files - dirPath := filepath.Join(dat.testMountDir, "two") - err = os.RemoveAll(dirPath) - if err != nil { - t.Fatalf("Error removing directory in mounted dir: %v", err) - } - - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v ", err2) - } - log.Debug("Directory unmounted") - - //we deleted files in the OS, so let's delete them also in the files map - delete(dat.files, "two/five.txt") - delete(dat.files, "two/six.txt") - - // mount again and see if deleted files have been deleted indeed - testMountDir2, err3 := addDir(dat.testDir, "remount-mount2") - if err3 != nil { - t.Fatalf("Could not unmount %v", err3) - } - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, testMountDir2) - log.Debug("Directory mounted") - actualPath := filepath.Join(dirPath, "five.txt") - _, err = os.Stat(actualPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - _, err = os.Stat(dirPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - _, err = dat.swarmfs.Unmount(testMountDir2) - if err != nil { - t.Fatalf("Could not unmount %v", err) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) removeDirWhichHasSubDirsEncrypted(t *testing.T) { - log.Debug("Starting removeDirWhichHasSubDirsEncrypted test") - ta.removeDirWhichHasSubDirs(t, true) - log.Debug("Test removeDirWhichHasSubDirsEncrypted terminated") -} - -func (ta *testAPI) removeDirWhichHasSubDirsNonEncrypted(t *testing.T) { - log.Debug("Starting removeDirWhichHasSubDirsNonEncrypted test") - ta.removeDirWhichHasSubDirs(t, false) - log.Debug("Test removeDirWhichHasSubDirsNonEncrypted terminated") -} - -//remove a directory with subdirectories inside mount; on remount check they are not there -func (ta *testAPI) removeDirWhichHasSubDirs(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("removeDirWhichHasSubDirs") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "rmsubdir-upload") - dat.testMountDir = filepath.Join(dat.testDir, "rmsubdir-mount") - dat.files = make(map[string]fileInfo) - dat.files["one/1.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(1, 10)} - dat.files["two/three/2.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(2, 10)} - dat.files["two/three/3.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(3, 10)} - dat.files["two/four/5.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(4, 10)} - dat.files["two/four/6.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(5, 10)} - dat.files["two/four/six/7.txt"] = fileInfo{0700, 333, 444, testutil.RandomBytes(6, 10)} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - dirPath := filepath.Join(dat.testMountDir, "two") - err = os.RemoveAll(dirPath) - if err != nil { - t.Fatalf("Error removing directory in mounted dir: %v", err) - } - - //delete a directory inside the mounted dir with all its files - mi, err2 := dat.swarmfs.Unmount(dat.testMountDir) - if err2 != nil { - t.Fatalf("Could not unmount %v ", err2) - } - log.Debug("Directory unmounted") - - //we deleted files in the OS, so let's delete them also in the files map - delete(dat.files, "two/three/2.txt") - delete(dat.files, "two/three/3.txt") - delete(dat.files, "two/four/5.txt") - delete(dat.files, "two/four/6.txt") - delete(dat.files, "two/four/six/7.txt") - - // mount again and see if things are okay - testMountDir2, err3 := addDir(dat.testDir, "remount-mount2") - if err3 != nil { - t.Fatalf("Could not unmount %v", err3) - } - _ = mountDir(t, ta.api, dat.files, mi.LatestManifest, testMountDir2) - log.Debug("Directory mounted again") - actualPath := filepath.Join(dirPath, "three") - actualPath = filepath.Join(actualPath, "2.txt") - _, err = os.Stat(actualPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - actualPath = filepath.Join(dirPath, "four") - _, err = os.Stat(actualPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - _, err = os.Stat(dirPath) - if err == nil { - t.Fatal("Expected file to not be present in re-mount after removal, but it is there") - } - _, err = dat.swarmfs.Unmount(testMountDir2) - if err != nil { - t.Fatalf("Could not unmount %v", err) - } - log.Debug("subtest terminated") -} - -func (ta *testAPI) appendFileContentsToEndEncrypted(t *testing.T) { - log.Debug("Starting appendFileContentsToEndEncrypted test") - ta.appendFileContentsToEnd(t, true) - log.Debug("Test appendFileContentsToEndEncrypted terminated") -} - -func (ta *testAPI) appendFileContentsToEndNonEncrypted(t *testing.T) { - log.Debug("Starting appendFileContentsToEndNonEncrypted test") - ta.appendFileContentsToEnd(t, false) - log.Debug("Test appendFileContentsToEndNonEncrypted terminated") -} - -//append contents to the end of a file; remount and check it's intact -func (ta *testAPI) appendFileContentsToEnd(t *testing.T, toEncrypt bool) { - dat, err := ta.initSubtest("appendFileContentsToEnd") - if err != nil { - t.Fatalf("Couldn't initialize subtest dirs: %v", err) - } - defer os.RemoveAll(dat.testDir) - - dat.toEncrypt = toEncrypt - dat.testUploadDir = filepath.Join(dat.testDir, "appendlargefile-upload") - dat.testMountDir = filepath.Join(dat.testDir, "appendlargefile-mount") - dat.files = make(map[string]fileInfo) - - line1 := testutil.RandomBytes(1, 10) - - dat.files["1.txt"] = fileInfo{0700, 333, 444, line1} - - dat, err = ta.uploadAndMount(dat, t) - if err != nil { - t.Fatalf("Error during upload of files to swarm / mount of swarm dir: %v", err) - } - defer dat.swarmfs.Stop() - - actualPath := filepath.Join(dat.testMountDir, "1.txt") - fd, err4 := os.OpenFile(actualPath, os.O_RDWR|os.O_APPEND, os.FileMode(0665)) - if err4 != nil { - t.Fatalf("Could not create file %s : %v", actualPath, err4) - } - defer fd.Close() - log.Debug("file opened") - line2 := testutil.RandomBytes(1, 5) - log.Debug("line read") - _, err = fd.Seek(int64(len(line1)), 0) - if err != nil { - t.Fatalf("Error searching for position to append: %v", err) - } - _, err = fd.Write(line2) - if err != nil { - t.Fatalf("Error appending: %v", err) - } - log.Debug("line written") - err = fd.Close() - if err != nil { - t.Fatalf("Error closing file: %v", err) - } - log.Debug("file closed") - - mi1, err5 := dat.swarmfs.Unmount(dat.testMountDir) - if err5 != nil { - t.Fatalf("Could not unmount %v ", err5) - } - log.Debug("Directory unmounted") - - // mount again and see if appended file is correct - b := [][]byte{line1, line2} - line1and2 := bytes.Join(b, []byte("")) - dat.files["1.txt"] = fileInfo{0700, 333, 444, line1and2} - testMountDir2, err6 := addDir(dat.testDir, "remount-mount2") - if err6 != nil { - t.Fatalf("Could not unmount %v", err6) - } - _ = mountDir(t, ta.api, dat.files, mi1.LatestManifest, testMountDir2) - log.Debug("Directory mounted") - - checkFile(t, testMountDir2, "1.txt", line1and2) - - _, err = dat.swarmfs.Unmount(testMountDir2) - if err != nil { - t.Fatalf("Could not unmount %v", err) - } - log.Debug("subtest terminated") -} - -//run all the tests -func TestFUSE(t *testing.T) { - t.Skip("disable fuse tests until they are stable") - //create a data directory for swarm - datadir, err := ioutil.TempDir("", "fuse") - if err != nil { - t.Fatalf("unable to create temp dir: %v", err) - } - defer os.RemoveAll(datadir) - - fileStore, err := storage.NewLocalFileStore(datadir, make([]byte, 32)) - if err != nil { - t.Fatal(err) - } - ta := &testAPI{api: api.NewAPI(fileStore, nil, nil, nil)} - - //run a short suite of tests - //approx time: 28s - t.Run("mountListAndUnmountEncrypted", ta.mountListAndUnmountEncrypted) - t.Run("remountEncrypted", ta.remountEncrypted) - t.Run("unmountWhenResourceBusyNonEncrypted", ta.unmountWhenResourceBusyNonEncrypted) - t.Run("removeExistingFileEncrypted", ta.removeExistingFileEncrypted) - t.Run("addNewFileAndModifyContentsNonEncrypted", ta.addNewFileAndModifyContentsNonEncrypted) - t.Run("removeDirWhichHasFilesNonEncrypted", ta.removeDirWhichHasFilesNonEncrypted) - t.Run("appendFileContentsToEndEncrypted", ta.appendFileContentsToEndEncrypted) - - //provide longrunning flag to execute all tests - //approx time with longrunning: 140s - if *longrunning { - t.Run("mountListAndUnmountNonEncrypted", ta.mountListAndUnmountNonEncrypted) - t.Run("maxMountsEncrypted", ta.maxMountsEncrypted) - t.Run("maxMountsNonEncrypted", ta.maxMountsNonEncrypted) - t.Run("remountNonEncrypted", ta.remountNonEncrypted) - t.Run("unmountEncrypted", ta.unmountEncrypted) - t.Run("unmountNonEncrypted", ta.unmountNonEncrypted) - t.Run("unmountWhenResourceBusyEncrypted", ta.unmountWhenResourceBusyEncrypted) - t.Run("unmountWhenResourceBusyNonEncrypted", ta.unmountWhenResourceBusyNonEncrypted) - t.Run("seekInMultiChunkFileEncrypted", ta.seekInMultiChunkFileEncrypted) - t.Run("seekInMultiChunkFileNonEncrypted", ta.seekInMultiChunkFileNonEncrypted) - t.Run("createNewFileEncrypted", ta.createNewFileEncrypted) - t.Run("createNewFileNonEncrypted", ta.createNewFileNonEncrypted) - t.Run("createNewFileInsideDirectoryEncrypted", ta.createNewFileInsideDirectoryEncrypted) - t.Run("createNewFileInsideDirectoryNonEncrypted", ta.createNewFileInsideDirectoryNonEncrypted) - t.Run("createNewFileInsideNewDirectoryEncrypted", ta.createNewFileInsideNewDirectoryEncrypted) - t.Run("createNewFileInsideNewDirectoryNonEncrypted", ta.createNewFileInsideNewDirectoryNonEncrypted) - t.Run("removeExistingFileNonEncrypted", ta.removeExistingFileNonEncrypted) - t.Run("removeExistingFileInsideDirEncrypted", ta.removeExistingFileInsideDirEncrypted) - t.Run("removeExistingFileInsideDirNonEncrypted", ta.removeExistingFileInsideDirNonEncrypted) - t.Run("removeNewlyAddedFileEncrypted", ta.removeNewlyAddedFileEncrypted) - t.Run("removeNewlyAddedFileNonEncrypted", ta.removeNewlyAddedFileNonEncrypted) - t.Run("addNewFileAndModifyContentsEncrypted", ta.addNewFileAndModifyContentsEncrypted) - t.Run("removeEmptyDirEncrypted", ta.removeEmptyDirEncrypted) - t.Run("removeEmptyDirNonEncrypted", ta.removeEmptyDirNonEncrypted) - t.Run("removeDirWhichHasFilesEncrypted", ta.removeDirWhichHasFilesEncrypted) - t.Run("removeDirWhichHasSubDirsEncrypted", ta.removeDirWhichHasSubDirsEncrypted) - t.Run("removeDirWhichHasSubDirsNonEncrypted", ta.removeDirWhichHasSubDirsNonEncrypted) - t.Run("appendFileContentsToEndNonEncrypted", ta.appendFileContentsToEndNonEncrypted) - } -} - -func Upload(uploadDir, index string, a *api.API, toEncrypt bool) (hash string, err error) { - fs := api.NewFileSystem(a) - hash, err = fs.Upload(uploadDir, index, toEncrypt) - return hash, err -} diff --git a/swarm/fuse/swarmfs_unix.go b/swarm/fuse/swarmfs_unix.go deleted file mode 100644 index 9ff55cc324f7..000000000000 --- a/swarm/fuse/swarmfs_unix.go +++ /dev/null @@ -1,285 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build linux darwin freebsd - -package fuse - -import ( - "context" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "sync" - "time" - - "bazil.org/fuse" - "bazil.org/fuse/fs" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/log" -) - -var ( - errEmptyMountPoint = errors.New("need non-empty mount point") - errNoRelativeMountPoint = errors.New("invalid path for mount point (need absolute path)") - errMaxMountCount = errors.New("max FUSE mount count reached") - errMountTimeout = errors.New("mount timeout") - errAlreadyMounted = errors.New("mount point is already serving") -) - -func isFUSEUnsupportedError(err error) bool { - if perr, ok := err.(*os.PathError); ok { - return perr.Op == "open" && perr.Path == "/dev/fuse" - } - return err == fuse.ErrOSXFUSENotFound -} - -// MountInfo contains information about every active mount -type MountInfo struct { - MountPoint string - StartManifest string - LatestManifest string - rootDir *SwarmDir - fuseConnection *fuse.Conn - swarmApi *api.API - lock *sync.RWMutex - serveClose chan struct{} -} - -func NewMountInfo(mhash, mpoint string, sapi *api.API) *MountInfo { - log.Debug("swarmfs NewMountInfo", "hash", mhash, "mount point", mpoint) - newMountInfo := &MountInfo{ - MountPoint: mpoint, - StartManifest: mhash, - LatestManifest: mhash, - rootDir: nil, - fuseConnection: nil, - swarmApi: sapi, - lock: &sync.RWMutex{}, - serveClose: make(chan struct{}), - } - return newMountInfo -} - -func (swarmfs *SwarmFS) Mount(mhash, mountpoint string) (*MountInfo, error) { - log.Info("swarmfs", "mounting hash", mhash, "mount point", mountpoint) - if mountpoint == "" { - return nil, errEmptyMountPoint - } - if !strings.HasPrefix(mountpoint, "/") { - return nil, errNoRelativeMountPoint - } - cleanedMountPoint, err := filepath.Abs(filepath.Clean(mountpoint)) - if err != nil { - return nil, err - } - log.Trace("swarmfs mount", "cleanedMountPoint", cleanedMountPoint) - - swarmfs.swarmFsLock.Lock() - defer swarmfs.swarmFsLock.Unlock() - - noOfActiveMounts := len(swarmfs.activeMounts) - log.Debug("swarmfs mount", "# active mounts", noOfActiveMounts) - if noOfActiveMounts >= maxFuseMounts { - return nil, errMaxMountCount - } - - if _, ok := swarmfs.activeMounts[cleanedMountPoint]; ok { - return nil, errAlreadyMounted - } - - log.Trace("swarmfs mount: getting manifest tree") - _, manifestEntryMap, err := swarmfs.swarmApi.BuildDirectoryTree(context.TODO(), mhash, true) - if err != nil { - return nil, err - } - - log.Trace("swarmfs mount: building mount info") - mi := NewMountInfo(mhash, cleanedMountPoint, swarmfs.swarmApi) - - dirTree := map[string]*SwarmDir{} - rootDir := NewSwarmDir("/", mi) - log.Trace("swarmfs mount", "rootDir", rootDir) - mi.rootDir = rootDir - - log.Trace("swarmfs mount: traversing manifest map") - for suffix, entry := range manifestEntryMap { - if suffix == "" { //empty suffix means that the file has no name - i.e. this is the default entry in a manifest. Since we cannot have files without a name, let us ignore this entry - log.Warn("Manifest has an empty-path (default) entry which will be ignored in FUSE mount.") - continue - } - addr := common.Hex2Bytes(entry.Hash) - fullpath := "/" + suffix - basepath := filepath.Dir(fullpath) - parentDir := rootDir - dirUntilNow := "" - paths := strings.Split(basepath, "/") - for i := range paths { - if paths[i] != "" { - thisDir := paths[i] - dirUntilNow = dirUntilNow + "/" + thisDir - - if _, ok := dirTree[dirUntilNow]; !ok { - dirTree[dirUntilNow] = NewSwarmDir(dirUntilNow, mi) - parentDir.directories = append(parentDir.directories, dirTree[dirUntilNow]) - parentDir = dirTree[dirUntilNow] - - } else { - parentDir = dirTree[dirUntilNow] - } - } - } - thisFile := NewSwarmFile(basepath, filepath.Base(fullpath), mi) - thisFile.addr = addr - - parentDir.files = append(parentDir.files, thisFile) - } - - fconn, err := fuse.Mount(cleanedMountPoint, fuse.FSName("swarmfs"), fuse.VolumeName(mhash)) - if isFUSEUnsupportedError(err) { - log.Error("swarmfs error - FUSE not installed", "mountpoint", cleanedMountPoint, "err", err) - return nil, err - } else if err != nil { - fuse.Unmount(cleanedMountPoint) - log.Error("swarmfs error mounting swarm manifest", "mountpoint", cleanedMountPoint, "err", err) - return nil, err - } - mi.fuseConnection = fconn - - serverr := make(chan error, 1) - go func() { - log.Info("swarmfs", "serving hash", mhash, "at", cleanedMountPoint) - filesys := &SwarmRoot{root: rootDir} - //start serving the actual file system; see note below - if err := fs.Serve(fconn, filesys); err != nil { - log.Warn("swarmfs could not serve the requested hash", "error", err) - serverr <- err - } - mi.serveClose <- struct{}{} - }() - - /* - IMPORTANT NOTE: the fs.Serve function is blocking; - Serve builds up the actual fuse file system by calling the - Attr functions on each SwarmFile, creating the file inodes; - specifically calling the swarm's LazySectionReader.Size() to set the file size. - - This can take some time, and it appears that if we access the fuse file system - too early, we can bring the tests to deadlock. The assumption so far is that - at this point, the fuse driver didn't finish to initialize the file system. - - Accessing files too early not only deadlocks the tests, but locks the access - of the fuse file completely, resulting in blocked resources at OS system level. - Even a simple `ls /tmp/testDir/testMountDir` could deadlock in a shell. - - Workaround so far is to wait some time to give the OS enough time to initialize - the fuse file system. During tests, this seemed to address the issue. - - HOWEVER IT SHOULD BE NOTED THAT THIS MAY ONLY BE AN EFFECT, - AND THE DEADLOCK CAUSED BY SOMETHING ELSE BLOCKING ACCESS DUE TO SOME RACE CONDITION - (caused in the bazil.org library and/or the SwarmRoot, SwarmDir and SwarmFile implementations) - */ - time.Sleep(2 * time.Second) - - timer := time.NewTimer(mountTimeout) - defer timer.Stop() - // Check if the mount process has an error to report. - select { - case <-timer.C: - log.Warn("swarmfs timed out mounting over FUSE", "mountpoint", cleanedMountPoint, "err", err) - err := fuse.Unmount(cleanedMountPoint) - if err != nil { - return nil, err - } - return nil, errMountTimeout - case err := <-serverr: - log.Warn("swarmfs error serving over FUSE", "mountpoint", cleanedMountPoint, "err", err) - err = fuse.Unmount(cleanedMountPoint) - return nil, err - - case <-fconn.Ready: - //this signals that the actual mount point from the fuse.Mount call is ready; - //it does not signal though that the file system from fs.Serve is actually fully built up - if err := fconn.MountError; err != nil { - log.Error("Mounting error from fuse driver: ", "err", err) - return nil, err - } - log.Info("swarmfs now served over FUSE", "manifest", mhash, "mountpoint", cleanedMountPoint) - } - - timer.Stop() - swarmfs.activeMounts[cleanedMountPoint] = mi - return mi, nil -} - -func (swarmfs *SwarmFS) Unmount(mountpoint string) (*MountInfo, error) { - swarmfs.swarmFsLock.Lock() - defer swarmfs.swarmFsLock.Unlock() - - cleanedMountPoint, err := filepath.Abs(filepath.Clean(mountpoint)) - if err != nil { - return nil, err - } - - mountInfo := swarmfs.activeMounts[cleanedMountPoint] - - if mountInfo == nil || mountInfo.MountPoint != cleanedMountPoint { - return nil, fmt.Errorf("swarmfs %s is not mounted", cleanedMountPoint) - } - err = fuse.Unmount(cleanedMountPoint) - if err != nil { - err1 := externalUnmount(cleanedMountPoint) - if err1 != nil { - errStr := fmt.Sprintf("swarmfs unmount error: %v", err) - log.Warn(errStr) - return nil, err1 - } - } - - err = mountInfo.fuseConnection.Close() - if err != nil { - return nil, err - } - delete(swarmfs.activeMounts, cleanedMountPoint) - - <-mountInfo.serveClose - - succString := fmt.Sprintf("swarmfs unmounting %v succeeded", cleanedMountPoint) - log.Info(succString) - - return mountInfo, nil -} - -func (swarmfs *SwarmFS) Listmounts() []*MountInfo { - swarmfs.swarmFsLock.RLock() - defer swarmfs.swarmFsLock.RUnlock() - rows := make([]*MountInfo, 0, len(swarmfs.activeMounts)) - for _, mi := range swarmfs.activeMounts { - rows = append(rows, mi) - } - return rows -} - -func (swarmfs *SwarmFS) Stop() bool { - for mp := range swarmfs.activeMounts { - mountInfo := swarmfs.activeMounts[mp] - swarmfs.Unmount(mountInfo.MountPoint) - } - return true -} diff --git a/swarm/fuse/swarmfs_util.go b/swarm/fuse/swarmfs_util.go deleted file mode 100644 index 4f2e1416b615..000000000000 --- a/swarm/fuse/swarmfs_util.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build linux darwin freebsd - -package fuse - -import ( - "context" - "fmt" - "os/exec" - "runtime" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -func externalUnmount(mountPoint string) error { - ctx, cancel := context.WithTimeout(context.Background(), unmountTimeout) - defer cancel() - - // Try generic umount. - if err := exec.CommandContext(ctx, "umount", mountPoint).Run(); err == nil { - return nil - } - // Try FUSE-specific commands if umount didn't work. - switch runtime.GOOS { - case "darwin": - return exec.CommandContext(ctx, "diskutil", "umount", mountPoint).Run() - case "linux": - return exec.CommandContext(ctx, "fusermount", "-u", mountPoint).Run() - default: - return fmt.Errorf("swarmfs unmount: unimplemented") - } -} - -func addFileToSwarm(sf *SwarmFile, content []byte, size int) error { - fkey, mhash, err := sf.mountInfo.swarmApi.AddFile(context.TODO(), sf.mountInfo.LatestManifest, sf.path, sf.name, content, true) - if err != nil { - return err - } - - sf.lock.Lock() - defer sf.lock.Unlock() - sf.addr = fkey - sf.fileSize = int64(size) - - sf.mountInfo.lock.Lock() - defer sf.mountInfo.lock.Unlock() - sf.mountInfo.LatestManifest = mhash - - log.Info("swarmfs added new file:", "fname", sf.name, "new Manifest hash", mhash) - return nil -} - -func removeFileFromSwarm(sf *SwarmFile) error { - mkey, err := sf.mountInfo.swarmApi.RemoveFile(context.TODO(), sf.mountInfo.LatestManifest, sf.path, sf.name, true) - if err != nil { - return err - } - - sf.mountInfo.lock.Lock() - defer sf.mountInfo.lock.Unlock() - sf.mountInfo.LatestManifest = mkey - - log.Info("swarmfs removed file:", "fname", sf.name, "new Manifest hash", mkey) - return nil -} - -func removeDirectoryFromSwarm(sd *SwarmDir) error { - if len(sd.directories) == 0 && len(sd.files) == 0 { - return nil - } - - for _, d := range sd.directories { - err := removeDirectoryFromSwarm(d) - if err != nil { - return err - } - } - - for _, f := range sd.files { - err := removeFileFromSwarm(f) - if err != nil { - return err - } - } - - return nil -} - -func appendToExistingFileInSwarm(sf *SwarmFile, content []byte, offset int64, length int64) error { - fkey, mhash, err := sf.mountInfo.swarmApi.AppendFile(context.TODO(), sf.mountInfo.LatestManifest, sf.path, sf.name, sf.fileSize, content, sf.addr, offset, length, true) - if err != nil { - return err - } - - sf.lock.Lock() - defer sf.lock.Unlock() - sf.addr = fkey - sf.fileSize = sf.fileSize + int64(len(content)) - - sf.mountInfo.lock.Lock() - defer sf.mountInfo.lock.Unlock() - sf.mountInfo.LatestManifest = mhash - - log.Info("swarmfs appended file:", "fname", sf.name, "new Manifest hash", mhash) - return nil -} diff --git a/swarm/log/log.go b/swarm/log/log.go deleted file mode 100644 index ce372632e81d..000000000000 --- a/swarm/log/log.go +++ /dev/null @@ -1,48 +0,0 @@ -package log - -import ( - l "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" -) - -const ( - // CallDepth is set to 1 in order to influence to reported line number of - // the log message with 1 skipped stack frame of calling l.Output() - CallDepth = 1 -) - -// Warn is a convenient alias for log.Warn with stats -func Warn(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("warn", nil).Inc(1) - l.Output(msg, l.LvlWarn, CallDepth, ctx...) -} - -// Error is a convenient alias for log.Error with stats -func Error(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("error", nil).Inc(1) - l.Output(msg, l.LvlError, CallDepth, ctx...) -} - -// Crit is a convenient alias for log.Crit with stats -func Crit(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("crit", nil).Inc(1) - l.Output(msg, l.LvlCrit, CallDepth, ctx...) -} - -// Info is a convenient alias for log.Info with stats -func Info(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("info", nil).Inc(1) - l.Output(msg, l.LvlInfo, CallDepth, ctx...) -} - -// Debug is a convenient alias for log.Debug with stats -func Debug(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("debug", nil).Inc(1) - l.Output(msg, l.LvlDebug, CallDepth, ctx...) -} - -// Trace is a convenient alias for log.Trace with stats -func Trace(msg string, ctx ...interface{}) { - metrics.GetOrRegisterCounter("trace", nil).Inc(1) - l.Output(msg, l.LvlTrace, CallDepth, ctx...) -} diff --git a/swarm/metrics/flags.go b/swarm/metrics/flags.go deleted file mode 100644 index d348dc3e4d45..000000000000 --- a/swarm/metrics/flags.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package metrics - -import ( - "time" - - "github.com/ethereum/go-ethereum/cmd/utils" - gethmetrics "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/metrics/influxdb" - "github.com/ethereum/go-ethereum/swarm/log" - cli "gopkg.in/urfave/cli.v1" -) - -var ( - MetricsEnableInfluxDBExportFlag = cli.BoolFlag{ - Name: "metrics.influxdb.export", - Usage: "Enable metrics export/push to an external InfluxDB database", - } - MetricsEnableInfluxDBAccountingExportFlag = cli.BoolFlag{ - Name: "metrics.influxdb.accounting", - Usage: "Enable accounting metrics export/push to an external InfluxDB database", - } - MetricsInfluxDBEndpointFlag = cli.StringFlag{ - Name: "metrics.influxdb.endpoint", - Usage: "Metrics InfluxDB endpoint", - Value: "http://127.0.0.1:8086", - } - MetricsInfluxDBDatabaseFlag = cli.StringFlag{ - Name: "metrics.influxdb.database", - Usage: "Metrics InfluxDB database", - Value: "metrics", - } - MetricsInfluxDBUsernameFlag = cli.StringFlag{ - Name: "metrics.influxdb.username", - Usage: "Metrics InfluxDB username", - Value: "", - } - MetricsInfluxDBPasswordFlag = cli.StringFlag{ - Name: "metrics.influxdb.password", - Usage: "Metrics InfluxDB password", - Value: "", - } - // Tags are part of every measurement sent to InfluxDB. Queries on tags are faster in InfluxDB. - // For example `host` tag could be used so that we can group all nodes and average a measurement - // across all of them, but also so that we can select a specific node and inspect its measurements. - // https://docs.influxdata.com/influxdb/v1.4/concepts/key_concepts/#tag-key - MetricsInfluxDBTagsFlag = cli.StringFlag{ - Name: "metrics.influxdb.tags", - Usage: "Comma-separated InfluxDB tags (key/values) attached to all measurements", - Value: "host=localhost", - } -) - -// Flags holds all command-line flags required for metrics collection. -var Flags = []cli.Flag{ - utils.MetricsEnabledFlag, - MetricsEnableInfluxDBExportFlag, - MetricsEnableInfluxDBAccountingExportFlag, - MetricsInfluxDBEndpointFlag, - MetricsInfluxDBDatabaseFlag, - MetricsInfluxDBUsernameFlag, - MetricsInfluxDBPasswordFlag, - MetricsInfluxDBTagsFlag, -} - -func Setup(ctx *cli.Context) { - if gethmetrics.Enabled { - log.Info("Enabling swarm metrics collection") - var ( - endpoint = ctx.GlobalString(MetricsInfluxDBEndpointFlag.Name) - database = ctx.GlobalString(MetricsInfluxDBDatabaseFlag.Name) - username = ctx.GlobalString(MetricsInfluxDBUsernameFlag.Name) - password = ctx.GlobalString(MetricsInfluxDBPasswordFlag.Name) - enableExport = ctx.GlobalBool(MetricsEnableInfluxDBExportFlag.Name) - enableAccountingExport = ctx.GlobalBool(MetricsEnableInfluxDBAccountingExportFlag.Name) - ) - - // Start system runtime metrics collection - go gethmetrics.CollectProcessMetrics(2 * time.Second) - - tagsMap := utils.SplitTagsFlag(ctx.GlobalString(MetricsInfluxDBTagsFlag.Name)) - - if enableExport { - log.Info("Enabling swarm metrics export to InfluxDB") - go influxdb.InfluxDBWithTags(gethmetrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "swarm.", tagsMap) - } - - if enableAccountingExport { - log.Info("Exporting swarm accounting metrics to InfluxDB") - go influxdb.InfluxDBWithTags(gethmetrics.AccountingRegistry, 10*time.Second, endpoint, database, username, password, "accounting.", tagsMap) - } - } -} diff --git a/swarm/network/README.md b/swarm/network/README.md deleted file mode 100644 index 684ad0c8c017..000000000000 --- a/swarm/network/README.md +++ /dev/null @@ -1,152 +0,0 @@ -## Streaming - -Streaming is a new protocol of the swarm bzz bundle of protocols. -This protocol provides the basic logic for chunk-based data flow. -It implements simple retrieve requests and delivery using priority queue. -A data exchange stream is a directional flow of chunks between peers. -The source of datachunks is the upstream, the receiver is called the -downstream peer. Each streaming protocol defines an outgoing streamer -and an incoming streamer, the former installing on the upstream, -the latter on the downstream peer. - -Subscribe on StreamerPeer launches an incoming streamer that sends -a subscribe msg upstream. The streamer on the upstream peer -handles the subscribe msg by installing the relevant outgoing streamer -. The modules now engage in a process of upstream sending a sequence of hashes of -chunks downstream (OfferedHashesMsg). The downstream peer evaluates which hashes are needed -and get it delivered by sending back a msg (WantedHashesMsg). - -Historical syncing is supported - currently not the right abstraction -- -state kept across sessions by saving a series of intervals after their last -batch actually arrived. - -Live streaming is also supported, by starting session from the first item -after the subscription. - -Provable data exchange. In case a stream represents a swarm document's data layer -or higher level chunks, streaming up to a certain index is always provable. It saves on -sending intermediate chunks. - -Using the streamer logic, various stream types are easy to implement: - -* light node requests: - * url lookup with offset - * document download - * document upload -* syncing - * live session syncing - * historical syncing -* simple retrieve requests and deliveries -* swarm feeds streams -* receipting for finger pointing - -## Syncing - -Syncing is the process that makes sure storer nodes end up storing all and only the chunks that are requested from them. - -### Requirements - -- eventual consistency: so each chunk historical should be syncable -- since the same chunk can and will arrive from many peers, (network traffic should be -optimised, only one transfer of data per chunk) -- explicit request deliveries should be prioritised higher than recent chunks received -during the ongoing session which in turn should be higher than historical chunks. -- insured chunks should get receipted for finger pointing litigation, the receipts storage -should be organised efficiently, upstream peer should also be able to find these -receipts for a deleted chunk easily to refute their challenge. -- syncing should be resilient to cut connections, metadata should be persisted that -keep track of syncing state across sessions, historical syncing state should survive restart -- extra data structures to support syncing should be kept at minimum -- syncing is not organized separately for chunk types (Swarm feed updates v regular content chunk) -- various types of streams should have common logic abstracted - -Syncing is now entirely mediated by the localstore, ie., no processes or memory leaks due to network contention. -When a new chunk is stored, its chunk hash is index by proximity bin - -peers syncronise by getting the chunks closer to the downstream peer than to the upstream one. -Consequently peers just sync all stored items for the kad bin the receiving peer falls into. -The special case of nearest neighbour sets is handled by the downstream peer -indicating they want to sync all kademlia bins with proximity equal to or higher -than their depth. - -This sync state represents the initial state of a sync connection session. -Retrieval is dictated by downstream peers simply using a special streamer protocol. - -Syncing chunks created during the session by the upstream peer is called live session syncing -while syncing of earlier chunks is historical syncing. - -Once the relevant chunk is retrieved, downstream peer looks up all hash segments in its localstore -and sends to the upstream peer a message with a a bitvector to indicate -missing chunks (e.g., for chunk `k`, hash with chunk internal index which case ) -new items. In turn upstream peer sends the relevant chunk data alongside their index. - -On sending chunks there is a priority queue system. If during looking up hashes in its localstore, -downstream peer hits on an open request then a retrieve request is sent immediately to the upstream peer indicating -that no extra round of checks is needed. If another peers syncer hits the same open request, it is slightly unsafe to not ask -that peer too: if the first one disconnects before delivering or fails to deliver and therefore gets -disconnected, we should still be able to continue with the other. The minimum redundant traffic coming from such simultaneous -eventualities should be sufficiently rare not to warrant more complex treatment. - -Session syncing involves downstream peer to request a new state on a bin from upstream. -using the new state, the range (of chunks) between the previous state and the new one are retrieved -and chunks are requested identical to the historical case. After receiving all the missing chunks -from the new hashes, downstream peer will request a new range. If this happens before upstream peer updates a new state, -we say that session syncing is live or the two peers are in sync. In general the time interval passed since downstream peer request up to the current session cursor is a good indication of a permanent (probably increasing) lag. - -If there is no historical backlog, and downstream peer has an acceptable 'last synced' tag, then it is said to be fully synced with the upstream peer. -If a peer is fully synced with all its storer peers, it can advertise itself as globally fully synced. - -The downstream peer persists the record of the last synced offset. When the two peers disconnect and -reconnect syncing can start from there. -This situation however can also happen while historical syncing is not yet complete. -Effectively this means that the peer needs to persist a record of an arbitrary array of offset ranges covered. - -### Delivery requests - -once the appropriate ranges of the hashstream are retrieved and buffered, downstream peer just scans the hashes, looks them up in localstore, if not found, create a request entry. -The range is referenced by the chunk index. Alongside the name (indicating the stream, e.g., content chunks for bin 6) and the range -downstream peer sends a 128 long bitvector indicating which chunks are needed. -Newly created requests are satisfied bound together in a waitgroup which when done, will promptt sending the next one. -to be able to do check and storage concurrently, we keep a buffer of one, we start with two batches of hashes. -If there is nothing to give, upstream peers SetNextBatch is blocking. Subscription ends with an unsubscribe. which removes the syncer from the map. - -Canceling requests (for instance the late chunks of an erasure batch) should be a chan closed -on the request - -Simple request is also a subscribe -different streaming protocols are different p2p protocols with same message types. -the constructor is the Run function itself. which takes a streamerpeer as argument - - -### provable streams - -The swarm hash over the hash stream has many advantages. It implements a provable data transfer -and provide efficient storage for receipts in the form of inclusion proofs useable for finger pointing litigation. -When challenged on a missing chunk, upstream peer will provide an inclusion proof of a chunk hash against the state of the -sync stream. In order to be able to generate such an inclusion proof, upstream peer needs to store the hash index (counting consecutive hash-size segments) alongside the chunk data and preserve it even when the chunk data is deleted until the chunk is no longer insured. -if there is no valid insurance on the files the entry may be deleted. -As long as the chunk is preserved, no takeover proof will be needed since the node can respond to any challenge. -However, once the node needs to delete an insured chunk for capacity reasons, a receipt should be available to -refute the challenge by finger pointing to a downstream peer. -As part of the deletion protocol then, hashes of insured chunks to be removed are pushed to an infinite stream for every bin. - -Downstream peer on the other hand needs to make sure that they can only be finger pointed about a chunk they did receive and store. -For this the check of a state should be exhaustive. If historical syncing finishes on one state, all hashes before are covered, no -surprises. In other words historical syncing this process is self verifying. With session syncing however, it is not enough to check going back covering the range from old offset to new. Continuity (i.e., that the new state is extension of the old) needs to be verified: after downstream peer reads the range into a buffer, it appends the buffer the last known state at the last known offset and verifies the resulting hash matches -the latest state. Past intervals of historical syncing are checked via the session root. -Upstream peer signs the states, downstream peers can use as handover proofs. -Downstream peers sign off on a state together with an initial offset. - -Once historical syncing is complete and the session does not lag, downstream peer only preserves the latest upstream state and store the signed version. - -Upstream peer needs to keep the latest takeover states: each deleted chunk's hash should be covered by takeover proof of at least one peer. If historical syncing is complete, upstream peer typically will store only the latest takeover proof from downstream peer. -Crucially, the structure is totally independent of the number of peers in the bin, so it scales extremely well. - -## implementation - -The simplest protocol just involves upstream peer to prefix the key with the kademlia proximity order (say 0-15 or 0-31) -and simply iterate on index per bin when syncing with a peer. - -priority queues are used for sending chunks so that user triggered requests should be responded to first, session syncing second, and historical with lower priority. -The request on chunks remains implemented as a dataless entry in the memory store. -The lifecycle of this object should be more carefully thought through, ie., when it fails to retrieve it should be removed. diff --git a/swarm/network/bitvector/bitvector.go b/swarm/network/bitvector/bitvector.go deleted file mode 100644 index 958328502329..000000000000 --- a/swarm/network/bitvector/bitvector.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package bitvector - -import ( - "errors" -) - -var errInvalidLength = errors.New("invalid length") - -type BitVector struct { - len int - b []byte -} - -func New(l int) (bv *BitVector, err error) { - return NewFromBytes(make([]byte, l/8+1), l) -} - -func NewFromBytes(b []byte, l int) (bv *BitVector, err error) { - if l <= 0 { - return nil, errInvalidLength - } - if len(b)*8 < l { - return nil, errInvalidLength - } - return &BitVector{ - len: l, - b: b, - }, nil -} - -func (bv *BitVector) Get(i int) bool { - bi := i / 8 - return bv.b[bi]&(0x1<. - -package bitvector - -import "testing" - -func TestBitvectorNew(t *testing.T) { - _, err := New(0) - if err != errInvalidLength { - t.Errorf("expected err %v, got %v", errInvalidLength, err) - } - - _, err = NewFromBytes(nil, 0) - if err != errInvalidLength { - t.Errorf("expected err %v, got %v", errInvalidLength, err) - } - - _, err = NewFromBytes([]byte{0}, 9) - if err != errInvalidLength { - t.Errorf("expected err %v, got %v", errInvalidLength, err) - } - - _, err = NewFromBytes(make([]byte, 8), 8) - if err != nil { - t.Error(err) - } -} - -func TestBitvectorGetSet(t *testing.T) { - for _, length := range []int{ - 1, - 2, - 4, - 8, - 9, - 15, - 16, - } { - bv, err := New(length) - if err != nil { - t.Errorf("error for length %v: %v", length, err) - } - - for i := 0; i < length; i++ { - if bv.Get(i) { - t.Errorf("expected false for element on index %v", i) - } - } - - func() { - defer func() { - if err := recover(); err == nil { - t.Errorf("expecting panic") - } - }() - bv.Get(length + 8) - }() - - for i := 0; i < length; i++ { - bv.Set(i, true) - for j := 0; j < length; j++ { - if j == i { - if !bv.Get(j) { - t.Errorf("element on index %v is not set to true", i) - } - } else { - if bv.Get(j) { - t.Errorf("element on index %v is not false", i) - } - } - } - - bv.Set(i, false) - - if bv.Get(i) { - t.Errorf("element on index %v is not set to false", i) - } - } - } -} - -func TestBitvectorNewFromBytesGet(t *testing.T) { - bv, err := NewFromBytes([]byte{8}, 8) - if err != nil { - t.Error(err) - } - if !bv.Get(3) { - t.Fatalf("element 3 is not set to true: state %08b", bv.b[0]) - } -} diff --git a/swarm/network/discovery.go b/swarm/network/discovery.go deleted file mode 100644 index 4c503047a5b4..000000000000 --- a/swarm/network/discovery.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "context" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/swarm/pot" -) - -// discovery bzz extension for requesting and relaying node address records - -// Peer wraps BzzPeer and embeds Kademlia overlay connectivity driver -type Peer struct { - *BzzPeer - kad *Kademlia - sentPeers bool // whether we already sent peer closer to this address - mtx sync.RWMutex // - peers map[string]bool // tracks node records sent to the peer - depth uint8 // the proximity order advertised by remote as depth of saturation -} - -// NewPeer constructs a discovery peer -func NewPeer(p *BzzPeer, kad *Kademlia) *Peer { - d := &Peer{ - kad: kad, - BzzPeer: p, - peers: make(map[string]bool), - } - // record remote as seen so we never send a peer its own record - d.seen(p.BzzAddr) - return d -} - -// HandleMsg is the message handler that delegates incoming messages -func (d *Peer) HandleMsg(ctx context.Context, msg interface{}) error { - switch msg := msg.(type) { - - case *peersMsg: - return d.handlePeersMsg(msg) - - case *subPeersMsg: - return d.handleSubPeersMsg(msg) - - default: - return fmt.Errorf("unknown message type: %T", msg) - } -} - -// NotifyDepth sends a message to all connections if depth of saturation is changed -func NotifyDepth(depth uint8, kad *Kademlia) { - f := func(val *Peer, po int) bool { - val.NotifyDepth(depth) - return true - } - kad.EachConn(nil, 255, f) -} - -// NotifyPeer informs all peers about a newly added node -func NotifyPeer(p *BzzAddr, k *Kademlia) { - f := func(val *Peer, po int) bool { - val.NotifyPeer(p, uint8(po)) - return true - } - k.EachConn(p.Address(), 255, f) -} - -// NotifyPeer notifies the remote node (recipient) about a peer if -// the peer's PO is within the recipients advertised depth -// OR the peer is closer to the recipient than self -// unless already notified during the connection session -func (d *Peer) NotifyPeer(a *BzzAddr, po uint8) { - // immediately return - if (po < d.getDepth() && pot.ProxCmp(d.kad.BaseAddr(), d, a) != 1) || d.seen(a) { - return - } - resp := &peersMsg{ - Peers: []*BzzAddr{a}, - } - go d.Send(context.TODO(), resp) -} - -// NotifyDepth sends a subPeers Msg to the receiver notifying them about -// a change in the depth of saturation -func (d *Peer) NotifyDepth(po uint8) { - go d.Send(context.TODO(), &subPeersMsg{Depth: po}) -} - -/* -peersMsg is the message to pass peer information -It is always a response to a peersRequestMsg - -The encoding of a peer address is identical the devp2p base protocol peers -messages: [IP, Port, NodeID], -Note that a node's FileStore address is not the NodeID but the hash of the NodeID. - -TODO: -To mitigate against spurious peers messages, requests should be remembered -and correctness of responses should be checked - -If the proxBin of peers in the response is incorrect the sender should be -disconnected -*/ - -// peersMsg encapsulates an array of peer addresses -// used for communicating about known peers -// relevant for bootstrapping connectivity and updating peersets -type peersMsg struct { - Peers []*BzzAddr -} - -// String pretty prints a peersMsg -func (msg peersMsg) String() string { - return fmt.Sprintf("%T: %v", msg, msg.Peers) -} - -// handlePeersMsg called by the protocol when receiving peerset (for target address) -// list of nodes ([]PeerAddr in peersMsg) is added to the overlay db using the -// Register interface method -func (d *Peer) handlePeersMsg(msg *peersMsg) error { - // register all addresses - if len(msg.Peers) == 0 { - return nil - } - - for _, a := range msg.Peers { - d.seen(a) - NotifyPeer(a, d.kad) - } - return d.kad.Register(msg.Peers...) -} - -// subPeers msg is communicating the depth of the overlay table of a peer -type subPeersMsg struct { - Depth uint8 -} - -// String returns the pretty printer -func (msg subPeersMsg) String() string { - return fmt.Sprintf("%T: request peers > PO%02d. ", msg, msg.Depth) -} - -func (d *Peer) handleSubPeersMsg(msg *subPeersMsg) error { - if !d.sentPeers { - d.setDepth(msg.Depth) - var peers []*BzzAddr - d.kad.EachConn(d.Over(), 255, func(p *Peer, po int) bool { - if pob, _ := Pof(d, d.kad.BaseAddr(), 0); pob > po { - return false - } - if !d.seen(p.BzzAddr) { - peers = append(peers, p.BzzAddr) - } - return true - }) - if len(peers) > 0 { - go d.Send(context.TODO(), &peersMsg{Peers: peers}) - } - } - d.sentPeers = true - return nil -} - -// seen takes an peer address and checks if it was sent to a peer already -// if not, marks the peer as sent -func (d *Peer) seen(p *BzzAddr) bool { - d.mtx.Lock() - defer d.mtx.Unlock() - k := string(p.Address()) - if d.peers[k] { - return true - } - d.peers[k] = true - return false -} - -func (d *Peer) getDepth() uint8 { - d.mtx.RLock() - defer d.mtx.RUnlock() - return d.depth -} - -func (d *Peer) setDepth(depth uint8) { - d.mtx.Lock() - defer d.mtx.Unlock() - d.depth = depth -} diff --git a/swarm/network/discovery_test.go b/swarm/network/discovery_test.go deleted file mode 100644 index dd3299c0f1d6..000000000000 --- a/swarm/network/discovery_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "testing" - - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" -) - -/*** - * - * - after connect, that outgoing subpeersmsg is sent - * - */ -func TestDiscovery(t *testing.T) { - params := NewHiveParams() - s, pp := newHiveTester(t, params, 1, nil) - - node := s.Nodes[0] - raddr := NewAddr(node) - pp.Register(raddr) - - // start the hive and wait for the connection - pp.Start(s.Server) - defer pp.Stop() - - // send subPeersMsg to the peer - err := s.TestExchanges(p2ptest.Exchange{ - Label: "outgoing subPeersMsg", - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &subPeersMsg{Depth: 0}, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} diff --git a/swarm/network/fetcher.go b/swarm/network/fetcher.go deleted file mode 100644 index 6b21751669e3..000000000000 --- a/swarm/network/fetcher.go +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "context" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - defaultSearchTimeout = 1 * time.Second - // maximum number of forwarded requests (hops), to make sure requests are not - // forwarded forever in peer loops - maxHopCount uint8 = 20 -) - -// Time to consider peer to be skipped. -// Also used in stream delivery. -var RequestTimeout = 10 * time.Second - -type RequestFunc func(context.Context, *Request) (*enode.ID, chan struct{}, error) - -// Fetcher is created when a chunk is not found locally. It starts a request handler loop once and -// keeps it alive until all active requests are completed. This can happen: -// 1. either because the chunk is delivered -// 2. or because the requester cancelled/timed out -// Fetcher self destroys itself after it is completed. -// TODO: cancel all forward requests after termination -type Fetcher struct { - protoRequestFunc RequestFunc // request function fetcher calls to issue retrieve request for a chunk - addr storage.Address // the address of the chunk to be fetched - offerC chan *enode.ID // channel of sources (peer node id strings) - requestC chan uint8 // channel for incoming requests (with the hopCount value in it) - searchTimeout time.Duration - skipCheck bool - ctx context.Context -} - -type Request struct { - Addr storage.Address // chunk address - Source *enode.ID // nodeID of peer to request from (can be nil) - SkipCheck bool // whether to offer the chunk first or deliver directly - peersToSkip *sync.Map // peers not to request chunk from (only makes sense if source is nil) - HopCount uint8 // number of forwarded requests (hops) -} - -// NewRequest returns a new instance of Request based on chunk address skip check and -// a map of peers to skip. -func NewRequest(addr storage.Address, skipCheck bool, peersToSkip *sync.Map) *Request { - return &Request{ - Addr: addr, - SkipCheck: skipCheck, - peersToSkip: peersToSkip, - } -} - -// SkipPeer returns if the peer with nodeID should not be requested to deliver a chunk. -// Peers to skip are kept per Request and for a time period of RequestTimeout. -// This function is used in stream package in Delivery.RequestFromPeers to optimize -// requests for chunks. -func (r *Request) SkipPeer(nodeID string) bool { - val, ok := r.peersToSkip.Load(nodeID) - if !ok { - return false - } - t, ok := val.(time.Time) - if ok && time.Now().After(t.Add(RequestTimeout)) { - // deadline expired - r.peersToSkip.Delete(nodeID) - return false - } - return true -} - -// FetcherFactory is initialised with a request function and can create fetchers -type FetcherFactory struct { - request RequestFunc - skipCheck bool -} - -// NewFetcherFactory takes a request function and skip check parameter and creates a FetcherFactory -func NewFetcherFactory(request RequestFunc, skipCheck bool) *FetcherFactory { - return &FetcherFactory{ - request: request, - skipCheck: skipCheck, - } -} - -// New constructs a new Fetcher, for the given chunk. All peers in peersToSkip -// are not requested to deliver the given chunk. peersToSkip should always -// contain the peers which are actively requesting this chunk, to make sure we -// don't request back the chunks from them. -// The created Fetcher is started and returned. -func (f *FetcherFactory) New(ctx context.Context, source storage.Address, peers *sync.Map) storage.NetFetcher { - fetcher := NewFetcher(ctx, source, f.request, f.skipCheck) - go fetcher.run(peers) - return fetcher -} - -// NewFetcher creates a new Fetcher for the given chunk address using the given request function. -func NewFetcher(ctx context.Context, addr storage.Address, rf RequestFunc, skipCheck bool) *Fetcher { - return &Fetcher{ - addr: addr, - protoRequestFunc: rf, - offerC: make(chan *enode.ID), - requestC: make(chan uint8), - searchTimeout: defaultSearchTimeout, - skipCheck: skipCheck, - ctx: ctx, - } -} - -// Offer is called when an upstream peer offers the chunk via syncing as part of `OfferedHashesMsg` and the node does not have the chunk locally. -func (f *Fetcher) Offer(source *enode.ID) { - // First we need to have this select to make sure that we return if context is done - select { - case <-f.ctx.Done(): - return - default: - } - - // This select alone would not guarantee that we return of context is done, it could potentially - // push to offerC instead if offerC is available (see number 2 in https://golang.org/ref/spec#Select_statements) - select { - case f.offerC <- source: - case <-f.ctx.Done(): - } -} - -// Request is called when an upstream peer request the chunk as part of `RetrieveRequestMsg`, or from a local request through FileStore, and the node does not have the chunk locally. -func (f *Fetcher) Request(hopCount uint8) { - // First we need to have this select to make sure that we return if context is done - select { - case <-f.ctx.Done(): - return - default: - } - - if hopCount >= maxHopCount { - log.Debug("fetcher request hop count limit reached", "hops", hopCount) - return - } - - // This select alone would not guarantee that we return of context is done, it could potentially - // push to offerC instead if offerC is available (see number 2 in https://golang.org/ref/spec#Select_statements) - select { - case f.requestC <- hopCount + 1: - case <-f.ctx.Done(): - } -} - -// start prepares the Fetcher -// it keeps the Fetcher alive within the lifecycle of the passed context -func (f *Fetcher) run(peers *sync.Map) { - var ( - doRequest bool // determines if retrieval is initiated in the current iteration - wait *time.Timer // timer for search timeout - waitC <-chan time.Time // timer channel - sources []*enode.ID // known sources, ie. peers that offered the chunk - requested bool // true if the chunk was actually requested - hopCount uint8 - ) - gone := make(chan *enode.ID) // channel to signal that a peer we requested from disconnected - - // loop that keeps the fetching process alive - // after every request a timer is set. If this goes off we request again from another peer - // note that the previous request is still alive and has the chance to deliver, so - // requesting again extends the search. ie., - // if a peer we requested from is gone we issue a new request, so the number of active - // requests never decreases - for { - select { - - // incoming offer - case source := <-f.offerC: - log.Trace("new source", "peer addr", source, "request addr", f.addr) - // 1) the chunk is offered by a syncing peer - // add to known sources - sources = append(sources, source) - // launch a request to the source iff the chunk was requested (not just expected because its offered by a syncing peer) - doRequest = requested - - // incoming request - case hopCount = <-f.requestC: - log.Trace("new request", "request addr", f.addr) - // 2) chunk is requested, set requested flag - // launch a request iff none been launched yet - doRequest = !requested - requested = true - - // peer we requested from is gone. fall back to another - // and remove the peer from the peers map - case id := <-gone: - log.Trace("peer gone", "peer id", id.String(), "request addr", f.addr) - peers.Delete(id.String()) - doRequest = requested - - // search timeout: too much time passed since the last request, - // extend the search to a new peer if we can find one - case <-waitC: - log.Trace("search timed out: requesting", "request addr", f.addr) - doRequest = requested - - // all Fetcher context closed, can quit - case <-f.ctx.Done(): - log.Trace("terminate fetcher", "request addr", f.addr) - // TODO: send cancellations to all peers left over in peers map (i.e., those we requested from) - return - } - - // need to issue a new request - if doRequest { - var err error - sources, err = f.doRequest(gone, peers, sources, hopCount) - if err != nil { - log.Info("unable to request", "request addr", f.addr, "err", err) - } - } - - // if wait channel is not set, set it to a timer - if requested { - if wait == nil { - wait = time.NewTimer(f.searchTimeout) - defer wait.Stop() - waitC = wait.C - } else { - // stop the timer and drain the channel if it was not drained earlier - if !wait.Stop() { - select { - case <-wait.C: - default: - } - } - // reset the timer to go off after defaultSearchTimeout - wait.Reset(f.searchTimeout) - } - } - doRequest = false - } -} - -// doRequest attempts at finding a peer to request the chunk from -// * first it tries to request explicitly from peers that are known to have offered the chunk -// * if there are no such peers (available) it tries to request it from a peer closest to the chunk address -// excluding those in the peersToSkip map -// * if no such peer is found an error is returned -// -// if a request is successful, -// * the peer's address is added to the set of peers to skip -// * the peer's address is removed from prospective sources, and -// * a go routine is started that reports on the gone channel if the peer is disconnected (or terminated their streamer) -func (f *Fetcher) doRequest(gone chan *enode.ID, peersToSkip *sync.Map, sources []*enode.ID, hopCount uint8) ([]*enode.ID, error) { - var i int - var sourceID *enode.ID - var quit chan struct{} - - req := &Request{ - Addr: f.addr, - SkipCheck: f.skipCheck, - peersToSkip: peersToSkip, - HopCount: hopCount, - } - - foundSource := false - // iterate over known sources - for i = 0; i < len(sources); i++ { - req.Source = sources[i] - var err error - sourceID, quit, err = f.protoRequestFunc(f.ctx, req) - if err == nil { - // remove the peer from known sources - // Note: we can modify the source although we are looping on it, because we break from the loop immediately - sources = append(sources[:i], sources[i+1:]...) - foundSource = true - break - } - } - - // if there are no known sources, or none available, we try request from a closest node - if !foundSource { - req.Source = nil - var err error - sourceID, quit, err = f.protoRequestFunc(f.ctx, req) - if err != nil { - // if no peers found to request from - return sources, err - } - } - // add peer to the set of peers to skip from now - peersToSkip.Store(sourceID.String(), time.Now()) - - // if the quit channel is closed, it indicates that the source peer we requested from - // disconnected or terminated its streamer - // here start a go routine that watches this channel and reports the source peer on the gone channel - // this go routine quits if the fetcher global context is done to prevent process leak - go func() { - select { - case <-quit: - gone <- sourceID - case <-f.ctx.Done(): - } - }() - return sources, nil -} diff --git a/swarm/network/fetcher_test.go b/swarm/network/fetcher_test.go deleted file mode 100644 index 4e464f10f356..000000000000 --- a/swarm/network/fetcher_test.go +++ /dev/null @@ -1,476 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/p2p/enode" -) - -var requestedPeerID = enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8") -var sourcePeerID = enode.HexID("99d8594b52298567d2ca3f4c441a5ba0140ee9245e26460d01102a52773c73b9") - -// mockRequester pushes every request to the requestC channel when its doRequest function is called -type mockRequester struct { - // requests []Request - requestC chan *Request // when a request is coming it is pushed to requestC - waitTimes []time.Duration // with waitTimes[i] you can define how much to wait on the ith request (optional) - count int //counts the number of requests - quitC chan struct{} -} - -func newMockRequester(waitTimes ...time.Duration) *mockRequester { - return &mockRequester{ - requestC: make(chan *Request), - waitTimes: waitTimes, - quitC: make(chan struct{}), - } -} - -func (m *mockRequester) doRequest(ctx context.Context, request *Request) (*enode.ID, chan struct{}, error) { - waitTime := time.Duration(0) - if m.count < len(m.waitTimes) { - waitTime = m.waitTimes[m.count] - m.count++ - } - time.Sleep(waitTime) - m.requestC <- request - - // if there is a Source in the request use that, if not use the global requestedPeerId - source := request.Source - if source == nil { - source = &requestedPeerID - } - return source, m.quitC, nil -} - -// TestFetcherSingleRequest creates a Fetcher using mockRequester, and run it with a sample set of peers to skip. -// mockRequester pushes a Request on a channel every time the request function is called. Using -// this channel we test if calling Fetcher.Request calls the request function, and whether it uses -// the correct peers to skip which we provided for the fetcher.run function. -func TestFetcherSingleRequest(t *testing.T) { - requester := newMockRequester() - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peers := []string{"a", "b", "c", "d"} - peersToSkip := &sync.Map{} - for _, p := range peers { - peersToSkip.Store(p, time.Now()) - } - - go fetcher.run(peersToSkip) - - fetcher.Request(0) - - select { - case request := <-requester.requestC: - // request should contain all peers from peersToSkip provided to the fetcher - for _, p := range peers { - if _, ok := request.peersToSkip.Load(p); !ok { - t.Fatalf("request.peersToSkip misses peer") - } - } - - // source peer should be also added to peersToSkip eventually - time.Sleep(100 * time.Millisecond) - if _, ok := request.peersToSkip.Load(requestedPeerID.String()); !ok { - t.Fatalf("request.peersToSkip does not contain peer returned by the request function") - } - - // hopCount in the forwarded request should be incremented - if request.HopCount != 1 { - t.Fatalf("Expected request.HopCount 1 got %v", request.HopCount) - } - - // fetch should trigger a request, if it doesn't happen in time, test should fail - case <-time.After(200 * time.Millisecond): - t.Fatalf("fetch timeout") - } -} - -// TestCancelStopsFetcher tests that a cancelled fetcher does not initiate further requests even if its fetch function is called -func TestFetcherCancelStopsFetcher(t *testing.T) { - requester := newMockRequester() - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peersToSkip := &sync.Map{} - - // we start the fetcher, and then we immediately cancel the context - go fetcher.run(peersToSkip) - cancel() - - // we call Request with an active context - fetcher.Request(0) - - // fetcher should not initiate request, we can only check by waiting a bit and making sure no request is happening - select { - case <-requester.requestC: - t.Fatalf("cancelled fetcher initiated request") - case <-time.After(200 * time.Millisecond): - } -} - -// TestFetchCancelStopsRequest tests that calling a Request function with a cancelled context does not initiate a request -func TestFetcherCancelStopsRequest(t *testing.T) { - t.Skip("since context is now per fetcher, this test is likely redundant") - - requester := newMockRequester(100 * time.Millisecond) - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peersToSkip := &sync.Map{} - - // we start the fetcher with an active context - go fetcher.run(peersToSkip) - - // we call Request with a cancelled context - fetcher.Request(0) - - // fetcher should not initiate request, we can only check by waiting a bit and making sure no request is happening - select { - case <-requester.requestC: - t.Fatalf("cancelled fetch function initiated request") - case <-time.After(200 * time.Millisecond): - } - - // if there is another Request with active context, there should be a request, because the fetcher itself is not cancelled - fetcher.Request(0) - - select { - case <-requester.requestC: - case <-time.After(200 * time.Millisecond): - t.Fatalf("expected request") - } -} - -// TestOfferUsesSource tests Fetcher Offer behavior. -// In this case there should be 1 (and only one) request initiated from the source peer, and the -// source nodeid should appear in the peersToSkip map. -func TestFetcherOfferUsesSource(t *testing.T) { - requester := newMockRequester(100 * time.Millisecond) - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peersToSkip := &sync.Map{} - - // start the fetcher - go fetcher.run(peersToSkip) - - // call the Offer function with the source peer - fetcher.Offer(&sourcePeerID) - - // fetcher should not initiate request - select { - case <-requester.requestC: - t.Fatalf("fetcher initiated request") - case <-time.After(200 * time.Millisecond): - } - - // call Request after the Offer - fetcher.Request(0) - - // there should be exactly 1 request coming from fetcher - var request *Request - select { - case request = <-requester.requestC: - if *request.Source != sourcePeerID { - t.Fatalf("Expected source id %v got %v", sourcePeerID, request.Source) - } - case <-time.After(200 * time.Millisecond): - t.Fatalf("fetcher did not initiate request") - } - - select { - case <-requester.requestC: - t.Fatalf("Fetcher number of requests expected 1 got 2") - case <-time.After(200 * time.Millisecond): - } - - // source peer should be added to peersToSkip eventually - time.Sleep(100 * time.Millisecond) - if _, ok := request.peersToSkip.Load(sourcePeerID.String()); !ok { - t.Fatalf("SourcePeerId not added to peersToSkip") - } -} - -func TestFetcherOfferAfterRequestUsesSourceFromContext(t *testing.T) { - requester := newMockRequester(100 * time.Millisecond) - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peersToSkip := &sync.Map{} - - // start the fetcher - go fetcher.run(peersToSkip) - - // call Request first - fetcher.Request(0) - - // there should be a request coming from fetcher - var request *Request - select { - case request = <-requester.requestC: - if request.Source != nil { - t.Fatalf("Incorrect source peer id, expected nil got %v", request.Source) - } - case <-time.After(200 * time.Millisecond): - t.Fatalf("fetcher did not initiate request") - } - - // after the Request call Offer - fetcher.Offer(&sourcePeerID) - - // there should be a request coming from fetcher - select { - case request = <-requester.requestC: - if *request.Source != sourcePeerID { - t.Fatalf("Incorrect source peer id, expected %v got %v", sourcePeerID, request.Source) - } - case <-time.After(200 * time.Millisecond): - t.Fatalf("fetcher did not initiate request") - } - - // source peer should be added to peersToSkip eventually - time.Sleep(100 * time.Millisecond) - if _, ok := request.peersToSkip.Load(sourcePeerID.String()); !ok { - t.Fatalf("SourcePeerId not added to peersToSkip") - } -} - -// TestFetcherRetryOnTimeout tests that fetch retries after searchTimeOut has passed -func TestFetcherRetryOnTimeout(t *testing.T) { - requester := newMockRequester() - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - // set searchTimeOut to low value so the test is quicker - fetcher.searchTimeout = 250 * time.Millisecond - - peersToSkip := &sync.Map{} - - // start the fetcher - go fetcher.run(peersToSkip) - - // call the fetch function with an active context - fetcher.Request(0) - - // after 100ms the first request should be initiated - time.Sleep(100 * time.Millisecond) - - select { - case <-requester.requestC: - default: - t.Fatalf("fetch did not initiate request") - } - - // after another 100ms no new request should be initiated, because search timeout is 250ms - time.Sleep(100 * time.Millisecond) - - select { - case <-requester.requestC: - t.Fatalf("unexpected request from fetcher") - default: - } - - // after another 300ms search timeout is over, there should be a new request - time.Sleep(300 * time.Millisecond) - - select { - case <-requester.requestC: - default: - t.Fatalf("fetch did not retry request") - } -} - -// TestFetcherFactory creates a FetcherFactory and checks if the factory really creates and starts -// a Fetcher when it return a fetch function. We test the fetching functionality just by checking if -// a request is initiated when the fetch function is called -func TestFetcherFactory(t *testing.T) { - requester := newMockRequester(100 * time.Millisecond) - addr := make([]byte, 32) - fetcherFactory := NewFetcherFactory(requester.doRequest, false) - - peersToSkip := &sync.Map{} - - fetcher := fetcherFactory.New(context.Background(), addr, peersToSkip) - - fetcher.Request(0) - - // check if the created fetchFunction really starts a fetcher and initiates a request - select { - case <-requester.requestC: - case <-time.After(200 * time.Millisecond): - t.Fatalf("fetch timeout") - } - -} - -func TestFetcherRequestQuitRetriesRequest(t *testing.T) { - requester := newMockRequester() - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - // make sure the searchTimeout is long so it is sure the request is not - // retried because of timeout - fetcher.searchTimeout = 10 * time.Second - - peersToSkip := &sync.Map{} - - go fetcher.run(peersToSkip) - - fetcher.Request(0) - - select { - case <-requester.requestC: - case <-time.After(200 * time.Millisecond): - t.Fatalf("request is not initiated") - } - - close(requester.quitC) - - select { - case <-requester.requestC: - case <-time.After(200 * time.Millisecond): - t.Fatalf("request is not initiated after failed request") - } -} - -// TestRequestSkipPeer checks if PeerSkip function will skip provided peer -// and not skip unknown one. -func TestRequestSkipPeer(t *testing.T) { - addr := make([]byte, 32) - peers := []enode.ID{ - enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8"), - enode.HexID("99d8594b52298567d2ca3f4c441a5ba0140ee9245e26460d01102a52773c73b9"), - } - - peersToSkip := new(sync.Map) - peersToSkip.Store(peers[0].String(), time.Now()) - r := NewRequest(addr, false, peersToSkip) - - if !r.SkipPeer(peers[0].String()) { - t.Errorf("peer not skipped") - } - - if r.SkipPeer(peers[1].String()) { - t.Errorf("peer skipped") - } -} - -// TestRequestSkipPeerExpired checks if a peer to skip is not skipped -// after RequestTimeout has passed. -func TestRequestSkipPeerExpired(t *testing.T) { - addr := make([]byte, 32) - peer := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8") - - // set RequestTimeout to a low value and reset it after the test - defer func(t time.Duration) { RequestTimeout = t }(RequestTimeout) - RequestTimeout = 250 * time.Millisecond - - peersToSkip := new(sync.Map) - peersToSkip.Store(peer.String(), time.Now()) - r := NewRequest(addr, false, peersToSkip) - - if !r.SkipPeer(peer.String()) { - t.Errorf("peer not skipped") - } - - time.Sleep(500 * time.Millisecond) - - if r.SkipPeer(peer.String()) { - t.Errorf("peer skipped") - } -} - -// TestRequestSkipPeerPermanent checks if a peer to skip is not skipped -// after RequestTimeout is not skipped if it is set for a permanent skipping -// by value to peersToSkip map is not time.Duration. -func TestRequestSkipPeerPermanent(t *testing.T) { - addr := make([]byte, 32) - peer := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8") - - // set RequestTimeout to a low value and reset it after the test - defer func(t time.Duration) { RequestTimeout = t }(RequestTimeout) - RequestTimeout = 250 * time.Millisecond - - peersToSkip := new(sync.Map) - peersToSkip.Store(peer.String(), true) - r := NewRequest(addr, false, peersToSkip) - - if !r.SkipPeer(peer.String()) { - t.Errorf("peer not skipped") - } - - time.Sleep(500 * time.Millisecond) - - if !r.SkipPeer(peer.String()) { - t.Errorf("peer not skipped") - } -} - -func TestFetcherMaxHopCount(t *testing.T) { - requester := newMockRequester() - addr := make([]byte, 32) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - fetcher := NewFetcher(ctx, addr, requester.doRequest, true) - - peersToSkip := &sync.Map{} - - go fetcher.run(peersToSkip) - - // if hopCount is already at max no request should be initiated - select { - case <-requester.requestC: - t.Fatalf("cancelled fetcher initiated request") - case <-time.After(200 * time.Millisecond): - } -} diff --git a/swarm/network/hive.go b/swarm/network/hive.go deleted file mode 100644 index a0b6b988abe2..000000000000 --- a/swarm/network/hive.go +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/state" -) - -/* -Hive is the logistic manager of the swarm - -When the hive is started, a forever loop is launched that -asks the kademlia nodetable -to suggest peers to bootstrap connectivity -*/ - -// HiveParams holds the config options to hive -type HiveParams struct { - Discovery bool // if want discovery of not - PeersBroadcastSetSize uint8 // how many peers to use when relaying - MaxPeersPerRequest uint8 // max size for peer address batches - KeepAliveInterval time.Duration -} - -// NewHiveParams returns hive config with only the -func NewHiveParams() *HiveParams { - return &HiveParams{ - Discovery: true, - PeersBroadcastSetSize: 3, - MaxPeersPerRequest: 5, - KeepAliveInterval: 500 * time.Millisecond, - } -} - -// Hive manages network connections of the swarm node -type Hive struct { - *HiveParams // settings - *Kademlia // the overlay connectiviy driver - Store state.Store // storage interface to save peers across sessions - addPeer func(*enode.Node) // server callback to connect to a peer - // bookkeeping - lock sync.Mutex - peers map[enode.ID]*BzzPeer - ticker *time.Ticker -} - -// NewHive constructs a new hive -// HiveParams: config parameters -// Kademlia: connectivity driver using a network topology -// StateStore: to save peers across sessions -func NewHive(params *HiveParams, kad *Kademlia, store state.Store) *Hive { - return &Hive{ - HiveParams: params, - Kademlia: kad, - Store: store, - peers: make(map[enode.ID]*BzzPeer), - } -} - -// Start stars the hive, receives p2p.Server only at startup -// server is used to connect to a peer based on its NodeID or enode URL -// these are called on the p2p.Server which runs on the node -func (h *Hive) Start(server *p2p.Server) error { - log.Info("Starting hive", "baseaddr", fmt.Sprintf("%x", h.BaseAddr()[:4])) - // if state store is specified, load peers to prepopulate the overlay address book - if h.Store != nil { - log.Info("Detected an existing store. trying to load peers") - if err := h.loadPeers(); err != nil { - log.Error(fmt.Sprintf("%08x hive encoutered an error trying to load peers", h.BaseAddr()[:4])) - return err - } - } - // assigns the p2p.Server#AddPeer function to connect to peers - h.addPeer = server.AddPeer - // ticker to keep the hive alive - h.ticker = time.NewTicker(h.KeepAliveInterval) - // this loop is doing bootstrapping and maintains a healthy table - go h.connect() - return nil -} - -// Stop terminates the updateloop and saves the peers -func (h *Hive) Stop() error { - log.Info(fmt.Sprintf("%08x hive stopping, saving peers", h.BaseAddr()[:4])) - h.ticker.Stop() - if h.Store != nil { - if err := h.savePeers(); err != nil { - return fmt.Errorf("could not save peers to persistence store: %v", err) - } - if err := h.Store.Close(); err != nil { - return fmt.Errorf("could not close file handle to persistence store: %v", err) - } - } - log.Info(fmt.Sprintf("%08x hive stopped, dropping peers", h.BaseAddr()[:4])) - h.EachConn(nil, 255, func(p *Peer, _ int) bool { - log.Info(fmt.Sprintf("%08x dropping peer %08x", h.BaseAddr()[:4], p.Address()[:4])) - p.Drop(nil) - return true - }) - - log.Info(fmt.Sprintf("%08x all peers dropped", h.BaseAddr()[:4])) - return nil -} - -// connect is a forever loop -// at each iteration, ask the overlay driver to suggest the most preferred peer to connect to -// as well as advertises saturation depth if needed -func (h *Hive) connect() { - for range h.ticker.C { - - addr, depth, changed := h.SuggestPeer() - if h.Discovery && changed { - NotifyDepth(uint8(depth), h.Kademlia) - } - if addr == nil { - continue - } - - log.Trace(fmt.Sprintf("%08x hive connect() suggested %08x", h.BaseAddr()[:4], addr.Address()[:4])) - under, err := enode.ParseV4(string(addr.Under())) - if err != nil { - log.Warn(fmt.Sprintf("%08x unable to connect to bee %08x: invalid node URL: %v", h.BaseAddr()[:4], addr.Address()[:4], err)) - continue - } - log.Trace(fmt.Sprintf("%08x attempt to connect to bee %08x", h.BaseAddr()[:4], addr.Address()[:4])) - h.addPeer(under) - } -} - -// Run protocol run function -func (h *Hive) Run(p *BzzPeer) error { - h.trackPeer(p) - defer h.untrackPeer(p) - - dp := NewPeer(p, h.Kademlia) - depth, changed := h.On(dp) - // if we want discovery, advertise change of depth - if h.Discovery { - if changed { - // if depth changed, send to all peers - NotifyDepth(depth, h.Kademlia) - } else { - // otherwise just send depth to new peer - dp.NotifyDepth(depth) - } - NotifyPeer(p.BzzAddr, h.Kademlia) - } - defer h.Off(dp) - return dp.Run(dp.HandleMsg) -} - -func (h *Hive) trackPeer(p *BzzPeer) { - h.lock.Lock() - h.peers[p.ID()] = p - h.lock.Unlock() -} - -func (h *Hive) untrackPeer(p *BzzPeer) { - h.lock.Lock() - delete(h.peers, p.ID()) - h.lock.Unlock() -} - -// NodeInfo function is used by the p2p.server RPC interface to display -// protocol specific node information -func (h *Hive) NodeInfo() interface{} { - return h.String() -} - -// PeerInfo function is used by the p2p.server RPC interface to display -// protocol specific information any connected peer referred to by their NodeID -func (h *Hive) PeerInfo(id enode.ID) interface{} { - h.lock.Lock() - p := h.peers[id] - h.lock.Unlock() - - if p == nil { - return nil - } - addr := NewAddr(p.Node()) - return struct { - OAddr hexutil.Bytes - UAddr hexutil.Bytes - }{ - OAddr: addr.OAddr, - UAddr: addr.UAddr, - } -} - -// loadPeers, savePeer implement persistence callback/ -func (h *Hive) loadPeers() error { - var as []*BzzAddr - err := h.Store.Get("peers", &as) - if err != nil { - if err == state.ErrNotFound { - log.Info(fmt.Sprintf("hive %08x: no persisted peers found", h.BaseAddr()[:4])) - return nil - } - return err - } - log.Info(fmt.Sprintf("hive %08x: peers loaded", h.BaseAddr()[:4])) - - return h.Register(as...) -} - -// savePeers, savePeer implement persistence callback/ -func (h *Hive) savePeers() error { - var peers []*BzzAddr - h.Kademlia.EachAddr(nil, 256, func(pa *BzzAddr, i int) bool { - if pa == nil { - log.Warn(fmt.Sprintf("empty addr: %v", i)) - return true - } - log.Trace("saving peer", "peer", pa) - peers = append(peers, pa) - return true - }) - if err := h.Store.Put("peers", peers); err != nil { - return fmt.Errorf("could not save peers: %v", err) - } - return nil -} diff --git a/swarm/network/hive_test.go b/swarm/network/hive_test.go deleted file mode 100644 index fea4347ead43..000000000000 --- a/swarm/network/hive_test.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "io/ioutil" - "os" - "testing" - "time" - - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" - "github.com/ethereum/go-ethereum/swarm/state" -) - -func newHiveTester(t *testing.T, params *HiveParams, n int, store state.Store) (*bzzTester, *Hive) { - // setup - addr := RandomAddr() // tested peers peer address - to := NewKademlia(addr.OAddr, NewKadParams()) - pp := NewHive(params, to, store) // hive - - return newBzzBaseTester(t, n, addr, DiscoverySpec, pp.Run), pp -} - -// TestRegisterAndConnect verifies that the protocol runs successfully -// and that the peer connection exists afterwards -func TestRegisterAndConnect(t *testing.T) { - params := NewHiveParams() - s, pp := newHiveTester(t, params, 1, nil) - - node := s.Nodes[0] - raddr := NewAddr(node) - pp.Register(raddr) - - // start the hive - err := pp.Start(s.Server) - if err != nil { - t.Fatal(err) - } - defer pp.Stop() - - // both hive connect and disconect check have time delays - // therefore we need to verify that peer is connected - // so that we are sure that the disconnect timeout doesn't complete - // before the hive connect method is run at least once - timeout := time.After(time.Second) - for { - select { - case <-timeout: - t.Fatalf("expected connection") - default: - } - i := 0 - pp.Kademlia.EachConn(nil, 256, func(addr *Peer, po int) bool { - i++ - return true - }) - if i > 0 { - break - } - time.Sleep(time.Millisecond) - } - - // check that the connection actually exists - // the timeout error means no disconnection events - // were received within the a certain timeout - err = s.TestDisconnected(&p2ptest.Disconnect{ - Peer: s.Nodes[0].ID(), - Error: nil, - }) - - if err == nil || err.Error() != "timed out waiting for peers to disconnect" { - t.Fatalf("expected no disconnection event") - } -} - -// TestHiveStatePersistance creates a protocol simulation with n peers for a node -// After protocols complete, the node is shut down and the state is stored. -// Another simulation is created, where 0 nodes are created, but where the stored state is passed -// The test succeeds if all the peers from the stored state are known after the protocols of the -// second simulation have completed -// -// Actual connectivity is not in scope for this test, as the peers loaded from state are not known to -// the simulation; the test only verifies that the peers are known to the node -func TestHiveStatePersistance(t *testing.T) { - - dir, err := ioutil.TempDir("", "hive_test_store") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir) - - store, err := state.NewDBStore(dir) //start the hive with an empty dbstore - if err != nil { - t.Fatal(err) - } - - params := NewHiveParams() - s, pp := newHiveTester(t, params, 5, store) - - peers := make(map[string]bool) - for _, node := range s.Nodes { - raddr := NewAddr(node) - pp.Register(raddr) - peers[raddr.String()] = true - } - - // start and stop the hive - // the known peers should be saved upon stopping - err = pp.Start(s.Server) - if err != nil { - t.Fatal(err) - } - pp.Stop() - store.Close() - - // start the hive with an empty dbstore - persistedStore, err := state.NewDBStore(dir) - if err != nil { - t.Fatal(err) - } - - s1, pp := newHiveTester(t, params, 0, persistedStore) - - // start the hive and check that we know of all expected peers - pp.Start(s1.Server) - i := 0 - pp.Kademlia.EachAddr(nil, 256, func(addr *BzzAddr, po int) bool { - delete(peers, addr.String()) - i++ - return true - }) - // TODO remove this line when verified that test passes - time.Sleep(time.Second) - if i != 5 { - t.Fatalf("invalid number of entries: got %v, want %v", i, 5) - } - if len(peers) != 0 { - t.Fatalf("%d peers left over: %v", len(peers), peers) - } - -} diff --git a/swarm/network/kademlia.go b/swarm/network/kademlia.go deleted file mode 100644 index 146f39106769..000000000000 --- a/swarm/network/kademlia.go +++ /dev/null @@ -1,870 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "bytes" - "fmt" - "math/rand" - "strings" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/pot" - sv "github.com/ethereum/go-ethereum/swarm/version" -) - -/* - -Taking the proximity order relative to a fix point x classifies the points in -the space (n byte long byte sequences) into bins. Items in each are at -most half as distant from x as items in the previous bin. Given a sample of -uniformly distributed items (a hash function over arbitrary sequence) the -proximity scale maps onto series of subsets with cardinalities on a negative -exponential scale. - -It also has the property that any two item belonging to the same bin are at -most half as distant from each other as they are from x. - -If we think of random sample of items in the bins as connections in a network of -interconnected nodes then relative proximity can serve as the basis for local -decisions for graph traversal where the task is to find a route between two -points. Since in every hop, the finite distance halves, there is -a guaranteed constant maximum limit on the number of hops needed to reach one -node from the other. -*/ - -var Pof = pot.DefaultPof(256) - -// KadParams holds the config params for Kademlia -type KadParams struct { - // adjustable parameters - MaxProxDisplay int // number of rows the table shows - NeighbourhoodSize int // nearest neighbour core minimum cardinality - MinBinSize int // minimum number of peers in a row - MaxBinSize int // maximum number of peers in a row before pruning - RetryInterval int64 // initial interval before a peer is first redialed - RetryExponent int // exponent to multiply retry intervals with - MaxRetries int // maximum number of redial attempts - // function to sanction or prevent suggesting a peer - Reachable func(*BzzAddr) bool `json:"-"` -} - -// NewKadParams returns a params struct with default values -func NewKadParams() *KadParams { - return &KadParams{ - MaxProxDisplay: 16, - NeighbourhoodSize: 2, - MinBinSize: 2, - MaxBinSize: 4, - RetryInterval: 4200000000, // 4.2 sec - MaxRetries: 42, - RetryExponent: 2, - } -} - -// Kademlia is a table of live peers and a db of known peers (node records) -type Kademlia struct { - lock sync.RWMutex - *KadParams // Kademlia configuration parameters - base []byte // immutable baseaddress of the table - addrs *pot.Pot // pots container for known peer addresses - conns *pot.Pot // pots container for live peer connections - depth uint8 // stores the last current depth of saturation - nDepth int // stores the last neighbourhood depth - nDepthC chan int // returned by DepthC function to signal neighbourhood depth change - addrCountC chan int // returned by AddrCountC function to signal peer count change -} - -// NewKademlia creates a Kademlia table for base address addr -// with parameters as in params -// if params is nil, it uses default values -func NewKademlia(addr []byte, params *KadParams) *Kademlia { - if params == nil { - params = NewKadParams() - } - return &Kademlia{ - base: addr, - KadParams: params, - addrs: pot.NewPot(nil, 0), - conns: pot.NewPot(nil, 0), - } -} - -// entry represents a Kademlia table entry (an extension of BzzAddr) -type entry struct { - *BzzAddr - conn *Peer - seenAt time.Time - retries int -} - -// newEntry creates a kademlia peer from a *Peer -func newEntry(p *BzzAddr) *entry { - return &entry{ - BzzAddr: p, - seenAt: time.Now(), - } -} - -// Label is a short tag for the entry for debug -func Label(e *entry) string { - return fmt.Sprintf("%s (%d)", e.Hex()[:4], e.retries) -} - -// Hex is the hexadecimal serialisation of the entry address -func (e *entry) Hex() string { - return fmt.Sprintf("%x", e.Address()) -} - -// Register enters each address as kademlia peer record into the -// database of known peer addresses -func (k *Kademlia) Register(peers ...*BzzAddr) error { - k.lock.Lock() - defer k.lock.Unlock() - var known, size int - for _, p := range peers { - // error if self received, peer should know better - // and should be punished for this - if bytes.Equal(p.Address(), k.base) { - return fmt.Errorf("add peers: %x is self", k.base) - } - var found bool - k.addrs, _, found, _ = pot.Swap(k.addrs, p, Pof, func(v pot.Val) pot.Val { - // if not found - if v == nil { - // insert new offline peer into conns - return newEntry(p) - } - // found among known peers, do nothing - return v - }) - if found { - known++ - } - size++ - } - // send new address count value only if there are new addresses - if k.addrCountC != nil && size-known > 0 { - k.addrCountC <- k.addrs.Size() - } - - k.sendNeighbourhoodDepthChange() - return nil -} - -// SuggestPeer returns an unconnected peer address as a peer suggestion for connection -func (k *Kademlia) SuggestPeer() (suggestedPeer *BzzAddr, saturationDepth int, changed bool) { - k.lock.Lock() - defer k.lock.Unlock() - radius := neighbourhoodRadiusForPot(k.conns, k.NeighbourhoodSize, k.base) - // collect undersaturated bins in ascending order of number of connected peers - // and from shallow to deep (ascending order of PO) - // insert them in a map of bin arrays, keyed with the number of connected peers - saturation := make(map[int][]int) - var lastPO int // the last non-empty PO bin in the iteration - saturationDepth = -1 // the deepest PO such that all shallower bins have >= k.MinBinSize peers - var pastDepth bool // whether po of iteration >= depth - k.conns.EachBin(k.base, Pof, 0, func(po, size int, f func(func(val pot.Val) bool) bool) bool { - // process skipped empty bins - for ; lastPO < po; lastPO++ { - // find the lowest unsaturated bin - if saturationDepth == -1 { - saturationDepth = lastPO - } - // if there is an empty bin, depth is surely passed - pastDepth = true - saturation[0] = append(saturation[0], lastPO) - } - lastPO = po + 1 - // past radius, depth is surely passed - if po >= radius { - pastDepth = true - } - // beyond depth the bin is treated as unsaturated even if size >= k.MinBinSize - // in order to achieve full connectivity to all neighbours - if pastDepth && size >= k.MinBinSize { - size = k.MinBinSize - 1 - } - // process non-empty unsaturated bins - if size < k.MinBinSize { - // find the lowest unsaturated bin - if saturationDepth == -1 { - saturationDepth = po - } - saturation[size] = append(saturation[size], po) - } - return true - }) - // to trigger peer requests for peers closer than closest connection, include - // all bins from nearest connection upto nearest address as unsaturated - var nearestAddrAt int - k.addrs.EachNeighbour(k.base, Pof, func(_ pot.Val, po int) bool { - nearestAddrAt = po - return false - }) - // including bins as size 0 has the effect that requesting connection - // is prioritised over non-empty shallower bins - for ; lastPO <= nearestAddrAt; lastPO++ { - saturation[0] = append(saturation[0], lastPO) - } - // all PO bins are saturated, ie., minsize >= k.MinBinSize, no peer suggested - if len(saturation) == 0 { - return nil, 0, false - } - // find the first callable peer in the address book - // starting from the bins with smallest size proceeding from shallow to deep - // for each bin (up until neighbourhood radius) we find callable candidate peers - for size := 0; size < k.MinBinSize && suggestedPeer == nil; size++ { - bins, ok := saturation[size] - if !ok { - // no bin with this size - continue - } - cur := 0 - curPO := bins[0] - k.addrs.EachBin(k.base, Pof, curPO, func(po, _ int, f func(func(pot.Val) bool) bool) bool { - curPO = bins[cur] - // find the next bin that has size size - if curPO == po { - cur++ - } else { - // skip bins that have no addresses - for ; cur < len(bins) && curPO < po; cur++ { - curPO = bins[cur] - } - if po < curPO { - cur-- - return true - } - // stop if there are no addresses - if curPO < po { - return false - } - } - // curPO found - // find a callable peer out of the addresses in the unsaturated bin - // stop if found - f(func(val pot.Val) bool { - e := val.(*entry) - if k.callable(e) { - suggestedPeer = e.BzzAddr - return false - } - return true - }) - return cur < len(bins) && suggestedPeer == nil - }) - } - - if uint8(saturationDepth) < k.depth { - k.depth = uint8(saturationDepth) - return suggestedPeer, saturationDepth, true - } - return suggestedPeer, 0, false -} - -// On inserts the peer as a kademlia peer into the live peers -func (k *Kademlia) On(p *Peer) (uint8, bool) { - k.lock.Lock() - defer k.lock.Unlock() - var ins bool - k.conns, _, _, _ = pot.Swap(k.conns, p, Pof, func(v pot.Val) pot.Val { - // if not found live - if v == nil { - ins = true - // insert new online peer into conns - return p - } - // found among live peers, do nothing - return v - }) - if ins && !p.BzzPeer.LightNode { - a := newEntry(p.BzzAddr) - a.conn = p - // insert new online peer into addrs - k.addrs, _, _, _ = pot.Swap(k.addrs, p, Pof, func(v pot.Val) pot.Val { - return a - }) - // send new address count value only if the peer is inserted - if k.addrCountC != nil { - k.addrCountC <- k.addrs.Size() - } - } - log.Trace(k.string()) - // calculate if depth of saturation changed - depth := uint8(k.saturation()) - var changed bool - if depth != k.depth { - changed = true - k.depth = depth - } - k.sendNeighbourhoodDepthChange() - return k.depth, changed -} - -// NeighbourhoodDepthC returns the channel that sends a new kademlia -// neighbourhood depth on each change. -// Not receiving from the returned channel will block On function -// when the neighbourhood depth is changed. -// TODO: Why is this exported, and if it should be; why can't we have more subscribers than one? -func (k *Kademlia) NeighbourhoodDepthC() <-chan int { - k.lock.Lock() - defer k.lock.Unlock() - if k.nDepthC == nil { - k.nDepthC = make(chan int) - } - return k.nDepthC -} - -// sendNeighbourhoodDepthChange sends new neighbourhood depth to k.nDepth channel -// if it is initialized. -func (k *Kademlia) sendNeighbourhoodDepthChange() { - // nDepthC is initialized when NeighbourhoodDepthC is called and returned by it. - // It provides signaling of neighbourhood depth change. - // This part of the code is sending new neighbourhood depth to nDepthC if that condition is met. - if k.nDepthC != nil { - nDepth := depthForPot(k.conns, k.NeighbourhoodSize, k.base) - if nDepth != k.nDepth { - k.nDepth = nDepth - k.nDepthC <- nDepth - } - } -} - -// AddrCountC returns the channel that sends a new -// address count value on each change. -// Not receiving from the returned channel will block Register function -// when address count value changes. -func (k *Kademlia) AddrCountC() <-chan int { - k.lock.Lock() - defer k.lock.Unlock() - - if k.addrCountC == nil { - k.addrCountC = make(chan int) - } - return k.addrCountC -} - -// Off removes a peer from among live peers -func (k *Kademlia) Off(p *Peer) { - k.lock.Lock() - defer k.lock.Unlock() - var del bool - if !p.BzzPeer.LightNode { - k.addrs, _, _, _ = pot.Swap(k.addrs, p, Pof, func(v pot.Val) pot.Val { - // v cannot be nil, must check otherwise we overwrite entry - if v == nil { - panic(fmt.Sprintf("connected peer not found %v", p)) - } - del = true - return newEntry(p.BzzAddr) - }) - } else { - del = true - } - - if del { - k.conns, _, _, _ = pot.Swap(k.conns, p, Pof, func(_ pot.Val) pot.Val { - // v cannot be nil, but no need to check - return nil - }) - // send new address count value only if the peer is deleted - if k.addrCountC != nil { - k.addrCountC <- k.addrs.Size() - } - k.sendNeighbourhoodDepthChange() - } -} - -// EachConn is an iterator with args (base, po, f) applies f to each live peer -// that has proximity order po or less as measured from the base -// if base is nil, kademlia base address is used -func (k *Kademlia) EachConn(base []byte, o int, f func(*Peer, int) bool) { - k.lock.RLock() - defer k.lock.RUnlock() - k.eachConn(base, o, f) -} - -func (k *Kademlia) eachConn(base []byte, o int, f func(*Peer, int) bool) { - if len(base) == 0 { - base = k.base - } - k.conns.EachNeighbour(base, Pof, func(val pot.Val, po int) bool { - if po > o { - return true - } - return f(val.(*Peer), po) - }) -} - -// EachAddr called with (base, po, f) is an iterator applying f to each known peer -// that has proximity order o or less as measured from the base -// if base is nil, kademlia base address is used -func (k *Kademlia) EachAddr(base []byte, o int, f func(*BzzAddr, int) bool) { - k.lock.RLock() - defer k.lock.RUnlock() - k.eachAddr(base, o, f) -} - -func (k *Kademlia) eachAddr(base []byte, o int, f func(*BzzAddr, int) bool) { - if len(base) == 0 { - base = k.base - } - k.addrs.EachNeighbour(base, Pof, func(val pot.Val, po int) bool { - if po > o { - return true - } - return f(val.(*entry).BzzAddr, po) - }) -} - -// NeighbourhoodDepth returns the depth for the pot, see depthForPot -func (k *Kademlia) NeighbourhoodDepth() (depth int) { - k.lock.RLock() - defer k.lock.RUnlock() - return depthForPot(k.conns, k.NeighbourhoodSize, k.base) -} - -// neighbourhoodRadiusForPot returns the neighbourhood radius of the kademlia -// neighbourhood radius encloses the nearest neighbour set with size >= neighbourhoodSize -// i.e., neighbourhood radius is the deepest PO such that all bins not shallower altogether -// contain at least neighbourhoodSize connected peers -// if there is altogether less than neighbourhoodSize peers connected, it returns 0 -// caller must hold the lock -func neighbourhoodRadiusForPot(p *pot.Pot, neighbourhoodSize int, pivotAddr []byte) (depth int) { - if p.Size() <= neighbourhoodSize { - return 0 - } - // total number of peers in iteration - var size int - f := func(v pot.Val, i int) bool { - // po == 256 means that addr is the pivot address(self) - if i == 256 { - return true - } - size++ - - // this means we have all nn-peers. - // depth is by default set to the bin of the farthest nn-peer - if size == neighbourhoodSize { - depth = i - return false - } - - return true - } - p.EachNeighbour(pivotAddr, Pof, f) - return depth -} - -// depthForPot returns the depth for the pot -// depth is the radius of the minimal extension of nearest neighbourhood that -// includes all empty PO bins. I.e., depth is the deepest PO such that -// - it is not deeper than neighbourhood radius -// - all bins shallower than depth are not empty -// caller must hold the lock -func depthForPot(p *pot.Pot, neighbourhoodSize int, pivotAddr []byte) (depth int) { - if p.Size() <= neighbourhoodSize { - return 0 - } - // determining the depth is a two-step process - // first we find the proximity bin of the shallowest of the neighbourhoodSize peers - // the numeric value of depth cannot be higher than this - maxDepth := neighbourhoodRadiusForPot(p, neighbourhoodSize, pivotAddr) - - // the second step is to test for empty bins in order from shallowest to deepest - // if an empty bin is found, this will be the actual depth - // we stop iterating if we hit the maxDepth determined in the first step - p.EachBin(pivotAddr, Pof, 0, func(po int, _ int, f func(func(pot.Val) bool) bool) bool { - if po == depth { - if maxDepth == depth { - return false - } - depth++ - return true - } - return false - }) - - return depth -} - -// callable decides if an address entry represents a callable peer -func (k *Kademlia) callable(e *entry) bool { - // not callable if peer is live or exceeded maxRetries - if e.conn != nil || e.retries > k.MaxRetries { - return false - } - // calculate the allowed number of retries based on time lapsed since last seen - timeAgo := int64(time.Since(e.seenAt)) - div := int64(k.RetryExponent) - div += (150000 - rand.Int63n(300000)) * div / 1000000 - var retries int - for delta := timeAgo; delta > k.RetryInterval; delta /= div { - retries++ - } - // this is never called concurrently, so safe to increment - // peer can be retried again - if retries < e.retries { - log.Trace(fmt.Sprintf("%08x: %v long time since last try (at %v) needed before retry %v, wait only warrants %v", k.BaseAddr()[:4], e, timeAgo, e.retries, retries)) - return false - } - // function to sanction or prevent suggesting a peer - if k.Reachable != nil && !k.Reachable(e.BzzAddr) { - log.Trace(fmt.Sprintf("%08x: peer %v is temporarily not callable", k.BaseAddr()[:4], e)) - return false - } - e.retries++ - log.Trace(fmt.Sprintf("%08x: peer %v is callable", k.BaseAddr()[:4], e)) - - return true -} - -// BaseAddr return the kademlia base address -func (k *Kademlia) BaseAddr() []byte { - return k.base -} - -// String returns kademlia table + kaddb table displayed with ascii -func (k *Kademlia) String() string { - k.lock.RLock() - defer k.lock.RUnlock() - return k.string() -} - -// string returns kademlia table + kaddb table displayed with ascii -// caller must hold the lock -func (k *Kademlia) string() string { - wsrow := " " - var rows []string - - rows = append(rows, "=========================================================================") - if len(sv.GitCommit) > 0 { - rows = append(rows, fmt.Sprintf("commit hash: %s", sv.GitCommit)) - } - rows = append(rows, fmt.Sprintf("%v KΛÐΞMLIΛ hive: queen's address: %x", time.Now().UTC().Format(time.UnixDate), k.BaseAddr()[:3])) - rows = append(rows, fmt.Sprintf("population: %d (%d), NeighbourhoodSize: %d, MinBinSize: %d, MaxBinSize: %d", k.conns.Size(), k.addrs.Size(), k.NeighbourhoodSize, k.MinBinSize, k.MaxBinSize)) - - liverows := make([]string, k.MaxProxDisplay) - peersrows := make([]string, k.MaxProxDisplay) - - depth := depthForPot(k.conns, k.NeighbourhoodSize, k.base) - rest := k.conns.Size() - k.conns.EachBin(k.base, Pof, 0, func(po, size int, f func(func(val pot.Val) bool) bool) bool { - var rowlen int - if po >= k.MaxProxDisplay { - po = k.MaxProxDisplay - 1 - } - row := []string{fmt.Sprintf("%2d", size)} - rest -= size - f(func(val pot.Val) bool { - e := val.(*Peer) - row = append(row, fmt.Sprintf("%x", e.Address()[:2])) - rowlen++ - return rowlen < 4 - }) - r := strings.Join(row, " ") - r = r + wsrow - liverows[po] = r[:31] - return true - }) - - k.addrs.EachBin(k.base, Pof, 0, func(po, size int, f func(func(val pot.Val) bool) bool) bool { - var rowlen int - if po >= k.MaxProxDisplay { - po = k.MaxProxDisplay - 1 - } - if size < 0 { - panic("wtf") - } - row := []string{fmt.Sprintf("%2d", size)} - // we are displaying live peers too - f(func(val pot.Val) bool { - e := val.(*entry) - row = append(row, Label(e)) - rowlen++ - return rowlen < 4 - }) - peersrows[po] = strings.Join(row, " ") - return true - }) - - for i := 0; i < k.MaxProxDisplay; i++ { - if i == depth { - rows = append(rows, fmt.Sprintf("============ DEPTH: %d ==========================================", i)) - } - left := liverows[i] - right := peersrows[i] - if len(left) == 0 { - left = " 0 " - } - if len(right) == 0 { - right = " 0" - } - rows = append(rows, fmt.Sprintf("%03d %v | %v", i, left, right)) - } - rows = append(rows, "=========================================================================") - return "\n" + strings.Join(rows, "\n") -} - -// PeerPot keeps info about expected nearest neighbours -// used for testing only -// TODO move to separate testing tools file -type PeerPot struct { - NNSet [][]byte - PeersPerBin []int -} - -// NewPeerPotMap creates a map of pot record of *BzzAddr with keys -// as hexadecimal representations of the address. -// the NeighbourhoodSize of the passed kademlia is used -// used for testing only -// TODO move to separate testing tools file -func NewPeerPotMap(neighbourhoodSize int, addrs [][]byte) map[string]*PeerPot { - - // create a table of all nodes for health check - np := pot.NewPot(nil, 0) - for _, addr := range addrs { - np, _, _ = pot.Add(np, addr, Pof) - } - ppmap := make(map[string]*PeerPot) - - // generate an allknowing source of truth for connections - // for every kademlia passed - for i, a := range addrs { - - // actual kademlia depth - depth := depthForPot(np, neighbourhoodSize, a) - - // all nn-peers - var nns [][]byte - peersPerBin := make([]int, depth) - - // iterate through the neighbours, going from the deepest to the shallowest - np.EachNeighbour(a, Pof, func(val pot.Val, po int) bool { - addr := val.([]byte) - // po == 256 means that addr is the pivot address(self) - // we do not include self in the map - if po == 256 { - return true - } - // append any neighbors found - // a neighbor is any peer in or deeper than the depth - if po >= depth { - nns = append(nns, addr) - } else { - // for peers < depth, we just count the number in each bin - // the bin is the index of the slice - peersPerBin[po]++ - } - return true - }) - - log.Trace(fmt.Sprintf("%x PeerPotMap NNS: %s, peersPerBin", addrs[i][:4], LogAddrs(nns))) - ppmap[common.Bytes2Hex(a)] = &PeerPot{ - NNSet: nns, - PeersPerBin: peersPerBin, - } - } - return ppmap -} - -// saturation returns the smallest po value in which the node has less than MinBinSize peers -// if the iterator reaches neighbourhood radius, then the last bin + 1 is returned -func (k *Kademlia) saturation() int { - prev := -1 - radius := neighbourhoodRadiusForPot(k.conns, k.NeighbourhoodSize, k.base) - k.conns.EachBin(k.base, Pof, 0, func(po, size int, f func(func(val pot.Val) bool) bool) bool { - prev++ - if po >= radius { - return false - } - return prev == po && size >= k.MinBinSize - }) - if prev < 0 { - return 0 - } - return prev -} - -// isSaturated returns true if the kademlia is considered saturated, or false if not. -// It checks this by checking an array of ints called unsaturatedBins; each item in that array corresponds -// to the bin which is unsaturated (number of connections < k.MinBinSize). -// The bin is considered unsaturated only if there are actual peers in that PeerPot's bin (peersPerBin) -// (if there is no peer for a given bin, then no connection could ever be established; -// in a God's view this is relevant as no more peers will ever appear on that bin) -func (k *Kademlia) isSaturated(peersPerBin []int, depth int) bool { - // depth could be calculated from k but as this is called from `GetHealthInfo()`, - // the depth has already been calculated so we can require it as a parameter - - // early check for depth - if depth != len(peersPerBin) { - return false - } - unsaturatedBins := make([]int, 0) - k.conns.EachBin(k.base, Pof, 0, func(po, size int, f func(func(val pot.Val) bool) bool) bool { - - if po >= depth { - return false - } - log.Trace("peers per bin", "peersPerBin[po]", peersPerBin[po], "po", po) - // if there are actually peers in the PeerPot who can fulfill k.MinBinSize - if size < k.MinBinSize && size < peersPerBin[po] { - log.Trace("connections for po", "po", po, "size", size) - unsaturatedBins = append(unsaturatedBins, po) - } - return true - }) - - log.Trace("list of unsaturated bins", "unsaturatedBins", unsaturatedBins) - return len(unsaturatedBins) == 0 -} - -// knowNeighbours tests if all neighbours in the peerpot -// are found among the peers known to the kademlia -// It is used in Healthy function for testing only -// TODO move to separate testing tools file -func (k *Kademlia) knowNeighbours(addrs [][]byte) (got bool, n int, missing [][]byte) { - pm := make(map[string]bool) - depth := depthForPot(k.conns, k.NeighbourhoodSize, k.base) - // create a map with all peers at depth and deeper known in the kademlia - k.eachAddr(nil, 255, func(p *BzzAddr, po int) bool { - // in order deepest to shallowest compared to the kademlia base address - // all bins (except self) are included (0 <= bin <= 255) - if po < depth { - return false - } - pk := common.Bytes2Hex(p.Address()) - pm[pk] = true - return true - }) - - // iterate through nearest neighbors in the peerpot map - // if we can't find the neighbor in the map we created above - // then we don't know all our neighbors - // (which sadly is all too common in modern society) - var gots int - var culprits [][]byte - for _, p := range addrs { - pk := common.Bytes2Hex(p) - if pm[pk] { - gots++ - } else { - log.Trace(fmt.Sprintf("%08x: known nearest neighbour %s not found", k.base, pk)) - culprits = append(culprits, p) - } - } - return gots == len(addrs), gots, culprits -} - -// connectedNeighbours tests if all neighbours in the peerpot -// are currently connected in the kademlia -// It is used in Healthy function for testing only -func (k *Kademlia) connectedNeighbours(peers [][]byte) (got bool, n int, missing [][]byte) { - pm := make(map[string]bool) - - // create a map with all peers at depth and deeper that are connected in the kademlia - // in order deepest to shallowest compared to the kademlia base address - // all bins (except self) are included (0 <= bin <= 255) - depth := depthForPot(k.conns, k.NeighbourhoodSize, k.base) - k.eachConn(nil, 255, func(p *Peer, po int) bool { - if po < depth { - return false - } - pk := common.Bytes2Hex(p.Address()) - pm[pk] = true - return true - }) - - // iterate through nearest neighbors in the peerpot map - // if we can't find the neighbor in the map we created above - // then we don't know all our neighbors - var gots int - var culprits [][]byte - for _, p := range peers { - pk := common.Bytes2Hex(p) - if pm[pk] { - gots++ - } else { - log.Trace(fmt.Sprintf("%08x: ExpNN: %s not found", k.base, pk)) - culprits = append(culprits, p) - } - } - return gots == len(peers), gots, culprits -} - -// Health state of the Kademlia -// used for testing only -type Health struct { - KnowNN bool // whether node knows all its neighbours - CountKnowNN int // amount of neighbors known - MissingKnowNN [][]byte // which neighbours we should have known but we don't - ConnectNN bool // whether node is connected to all its neighbours - CountConnectNN int // amount of neighbours connected to - MissingConnectNN [][]byte // which neighbours we should have been connected to but we're not - // Saturated: if in all bins < depth number of connections >= MinBinsize or, - // if number of connections < MinBinSize, to the number of available peers in that bin - Saturated bool - Hive string -} - -// GetHealthInfo reports the health state of the kademlia connectivity -// -// The PeerPot argument provides an all-knowing view of the network -// The resulting Health object is a result of comparisons between -// what is the actual composition of the kademlia in question (the receiver), and -// what SHOULD it have been when we take all we know about the network into consideration. -// -// used for testing only -func (k *Kademlia) GetHealthInfo(pp *PeerPot) *Health { - k.lock.RLock() - defer k.lock.RUnlock() - if len(pp.NNSet) < k.NeighbourhoodSize { - log.Warn("peerpot NNSet < NeighbourhoodSize") - } - gotnn, countgotnn, culpritsgotnn := k.connectedNeighbours(pp.NNSet) - knownn, countknownn, culpritsknownn := k.knowNeighbours(pp.NNSet) - depth := depthForPot(k.conns, k.NeighbourhoodSize, k.base) - - // check saturation - saturated := k.isSaturated(pp.PeersPerBin, depth) - - log.Trace(fmt.Sprintf("%08x: healthy: knowNNs: %v, gotNNs: %v, saturated: %v\n", k.base, knownn, gotnn, saturated)) - return &Health{ - KnowNN: knownn, - CountKnowNN: countknownn, - MissingKnowNN: culpritsknownn, - ConnectNN: gotnn, - CountConnectNN: countgotnn, - MissingConnectNN: culpritsgotnn, - Saturated: saturated, - Hive: k.string(), - } -} - -// Healthy return the strict interpretation of `Healthy` given a `Health` struct -// definition of strict health: all conditions must be true: -// - we at least know one peer -// - we know all neighbors -// - we are connected to all known neighbors -// - it is saturated -func (h *Health) Healthy() bool { - return h.KnowNN && h.ConnectNN && h.CountKnowNN > 0 && h.Saturated -} diff --git a/swarm/network/kademlia_test.go b/swarm/network/kademlia_test.go deleted file mode 100644 index b4663eee5ef8..000000000000 --- a/swarm/network/kademlia_test.go +++ /dev/null @@ -1,562 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "fmt" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/swarm/pot" -) - -func init() { - h := log.LvlFilterHandler(log.LvlWarn, log.StreamHandler(os.Stderr, log.TerminalFormat(true))) - log.Root().SetHandler(h) -} - -func testKadPeerAddr(s string) *BzzAddr { - a := pot.NewAddressFromString(s) - return &BzzAddr{OAddr: a, UAddr: a} -} - -func newTestKademliaParams() *KadParams { - params := NewKadParams() - params.MinBinSize = 2 - params.NeighbourhoodSize = 2 - return params -} - -type testKademlia struct { - *Kademlia - t *testing.T -} - -func newTestKademlia(t *testing.T, b string) *testKademlia { - base := pot.NewAddressFromString(b) - return &testKademlia{ - Kademlia: NewKademlia(base, newTestKademliaParams()), - t: t, - } -} - -func (tk *testKademlia) newTestKadPeer(s string, lightNode bool) *Peer { - return NewPeer(&BzzPeer{BzzAddr: testKadPeerAddr(s), LightNode: lightNode}, tk.Kademlia) -} - -func (tk *testKademlia) On(ons ...string) { - for _, s := range ons { - tk.Kademlia.On(tk.newTestKadPeer(s, false)) - } -} - -func (tk *testKademlia) Off(offs ...string) { - for _, s := range offs { - tk.Kademlia.Off(tk.newTestKadPeer(s, false)) - } -} - -func (tk *testKademlia) Register(regs ...string) { - var as []*BzzAddr - for _, s := range regs { - as = append(as, testKadPeerAddr(s)) - } - err := tk.Kademlia.Register(as...) - if err != nil { - panic(err.Error()) - } -} - -// tests the validity of neighborhood depth calculations -// -// in particular, it tests that if there are one or more consecutive -// empty bins above the farthest "nearest neighbor-peer" then -// the depth should be set at the farthest of those empty bins -// -// TODO: Make test adapt to change in NeighbourhoodSize -func TestNeighbourhoodDepth(t *testing.T) { - baseAddressBytes := RandomAddr().OAddr - kad := NewKademlia(baseAddressBytes, NewKadParams()) - - baseAddress := pot.NewAddressFromBytes(baseAddressBytes) - - // generate the peers - var peers []*Peer - for i := 0; i < 7; i++ { - addr := pot.RandomAddressAt(baseAddress, i) - peers = append(peers, newTestDiscoveryPeer(addr, kad)) - } - var sevenPeers []*Peer - for i := 0; i < 2; i++ { - addr := pot.RandomAddressAt(baseAddress, 7) - sevenPeers = append(sevenPeers, newTestDiscoveryPeer(addr, kad)) - } - - testNum := 0 - // first try with empty kademlia - depth := kad.NeighbourhoodDepth() - if depth != 0 { - t.Fatalf("%d expected depth 0, was %d", testNum, depth) - } - testNum++ - - // add one peer on 7 - kad.On(sevenPeers[0]) - depth = kad.NeighbourhoodDepth() - if depth != 0 { - t.Fatalf("%d expected depth 0, was %d", testNum, depth) - } - testNum++ - - // add a second on 7 - kad.On(sevenPeers[1]) - depth = kad.NeighbourhoodDepth() - if depth != 0 { - t.Fatalf("%d expected depth 0, was %d", testNum, depth) - } - testNum++ - - // add from 0 to 6 - for i, p := range peers { - kad.On(p) - depth = kad.NeighbourhoodDepth() - if depth != i+1 { - t.Fatalf("%d.%d expected depth %d, was %d", i+1, testNum, i, depth) - } - } - testNum++ - - kad.Off(sevenPeers[1]) - depth = kad.NeighbourhoodDepth() - if depth != 6 { - t.Fatalf("%d expected depth 6, was %d", testNum, depth) - } - testNum++ - - kad.Off(peers[4]) - depth = kad.NeighbourhoodDepth() - if depth != 4 { - t.Fatalf("%d expected depth 4, was %d", testNum, depth) - } - testNum++ - - kad.Off(peers[3]) - depth = kad.NeighbourhoodDepth() - if depth != 3 { - t.Fatalf("%d expected depth 3, was %d", testNum, depth) - } - testNum++ -} - -// TestHighMinBinSize tests that the saturation function also works -// if MinBinSize is > 2, the connection count is < k.MinBinSize -// and there are more peers available than connected -func TestHighMinBinSize(t *testing.T) { - // a function to test for different MinBinSize values - testKad := func(minBinSize int) { - // create a test kademlia - tk := newTestKademlia(t, "11111111") - // set its MinBinSize to desired value - tk.KadParams.MinBinSize = minBinSize - - // add a couple of peers (so we have NN and depth) - tk.On("00000000") // bin 0 - tk.On("11100000") // bin 3 - tk.On("11110000") // bin 4 - - first := "10000000" // add a first peer at bin 1 - tk.Register(first) // register it - // we now have one registered peer at bin 1; - // iterate and connect one peer at each iteration; - // should be unhealthy until at minBinSize - 1 - // we connect the unconnected but registered peer - for i := 1; i < minBinSize; i++ { - peer := fmt.Sprintf("1000%b", 8|i) - tk.On(peer) - if i == minBinSize-1 { - tk.On(first) - tk.checkHealth(true) - return - } - tk.checkHealth(false) - } - } - // test MinBinSizes of 3 to 5 - testMinBinSizes := []int{3, 4, 5} - for _, k := range testMinBinSizes { - testKad(k) - } -} - -// TestHealthStrict tests the simplest definition of health -// Which means whether we are connected to all neighbors we know of -func TestHealthStrict(t *testing.T) { - - // base address is all zeros - // no peers - // unhealthy (and lonely) - tk := newTestKademlia(t, "11111111") - tk.checkHealth(false) - - // know one peer but not connected - // unhealthy - tk.Register("11100000") - tk.checkHealth(false) - - // know one peer and connected - // unhealthy: not saturated - tk.On("11100000") - tk.checkHealth(true) - - // know two peers, only one connected - // unhealthy - tk.Register("11111100") - tk.checkHealth(false) - - // know two peers and connected to both - // healthy - tk.On("11111100") - tk.checkHealth(true) - - // know three peers, connected to the two deepest - // healthy - tk.Register("00000000") - tk.checkHealth(false) - - // know three peers, connected to all three - // healthy - tk.On("00000000") - tk.checkHealth(true) - - // add fourth peer deeper than current depth - // unhealthy - tk.Register("11110000") - tk.checkHealth(false) - - // connected to three deepest peers - // healthy - tk.On("11110000") - tk.checkHealth(true) - - // add additional peer in same bin as deepest peer - // unhealthy - tk.Register("11111101") - tk.checkHealth(false) - - // four deepest of five peers connected - // healthy - tk.On("11111101") - tk.checkHealth(true) - - // add additional peer in bin 0 - // unhealthy: unsaturated bin 0, 2 known but 1 connected - tk.Register("00000001") - tk.checkHealth(false) - - // Connect second in bin 0 - // healthy - tk.On("00000001") - tk.checkHealth(true) - - // add peer in bin 1 - // unhealthy, as it is known but not connected - tk.Register("10000000") - tk.checkHealth(false) - - // connect peer in bin 1 - // depth change, is now 1 - // healthy, 1 peer in bin 1 known and connected - tk.On("10000000") - tk.checkHealth(true) - - // add second peer in bin 1 - // unhealthy, as it is known but not connected - tk.Register("10000001") - tk.checkHealth(false) - - // connect second peer in bin 1 - // healthy, - tk.On("10000001") - tk.checkHealth(true) - - // connect third peer in bin 1 - // healthy, - tk.On("10000011") - tk.checkHealth(true) - - // add peer in bin 2 - // unhealthy, no depth change - tk.Register("11000000") - tk.checkHealth(false) - - // connect peer in bin 2 - // depth change - as we already have peers in bin 3 and 4, - // we have contiguous bins, no bin < po 5 is empty -> depth 5 - // healthy, every bin < depth has the max available peers, - // even if they are < MinBinSize - tk.On("11000000") - tk.checkHealth(true) - - // add peer in bin 2 - // unhealthy, peer bin is below depth 5 but - // has more available peers (2) than connected ones (1) - // --> unsaturated - tk.Register("11000011") - tk.checkHealth(false) -} - -func (tk *testKademlia) checkHealth(expectHealthy bool) { - tk.t.Helper() - kid := common.Bytes2Hex(tk.BaseAddr()) - addrs := [][]byte{tk.BaseAddr()} - tk.EachAddr(nil, 255, func(addr *BzzAddr, po int) bool { - addrs = append(addrs, addr.Address()) - return true - }) - - pp := NewPeerPotMap(tk.NeighbourhoodSize, addrs) - healthParams := tk.GetHealthInfo(pp[kid]) - - // definition of health, all conditions but be true: - // - we at least know one peer - // - we know all neighbors - // - we are connected to all known neighbors - health := healthParams.Healthy() - if expectHealthy != health { - tk.t.Fatalf("expected kademlia health %v, is %v\n%v", expectHealthy, health, tk.String()) - } -} - -func (tk *testKademlia) checkSuggestPeer(expAddr string, expDepth int, expChanged bool) { - tk.t.Helper() - addr, depth, changed := tk.SuggestPeer() - log.Trace("suggestPeer return", "addr", addr, "depth", depth, "changed", changed) - if binStr(addr) != expAddr { - tk.t.Fatalf("incorrect peer address suggested. expected %v, got %v", expAddr, binStr(addr)) - } - if depth != expDepth { - tk.t.Fatalf("incorrect saturation depth suggested. expected %v, got %v", expDepth, depth) - } - if changed != expChanged { - tk.t.Fatalf("expected depth change = %v, got %v", expChanged, changed) - } -} - -func binStr(a *BzzAddr) string { - if a == nil { - return "" - } - return pot.ToBin(a.Address())[:8] -} - -func TestSuggestPeerFindPeers(t *testing.T) { - tk := newTestKademlia(t, "00000000") - tk.On("00100000") - tk.checkSuggestPeer("", 0, false) - - tk.On("00010000") - tk.checkSuggestPeer("", 0, false) - - tk.On("10000000", "10000001") - tk.checkSuggestPeer("", 0, false) - - tk.On("01000000") - tk.Off("10000001") - tk.checkSuggestPeer("10000001", 0, true) - - tk.On("00100001") - tk.Off("01000000") - tk.checkSuggestPeer("01000000", 0, false) - - // second time disconnected peer not callable - // with reasonably set Interval - tk.checkSuggestPeer("", 0, false) - - // on and off again, peer callable again - tk.On("01000000") - tk.Off("01000000") - tk.checkSuggestPeer("01000000", 0, false) - - tk.On("01000000", "10000001") - tk.checkSuggestPeer("", 0, false) - - tk.Register("00010001") - tk.checkSuggestPeer("00010001", 0, false) - - tk.On("00010001") - tk.Off("01000000") - tk.checkSuggestPeer("01000000", 0, false) - - tk.On("01000000") - tk.checkSuggestPeer("", 0, false) - - tk.Register("01000001") - tk.checkSuggestPeer("01000001", 0, false) - - tk.On("01000001") - tk.checkSuggestPeer("", 0, false) - - tk.Register("10000010", "01000010", "00100010") - tk.checkSuggestPeer("", 0, false) - - tk.Register("00010010") - tk.checkSuggestPeer("00010010", 0, false) - - tk.Off("00100001") - tk.checkSuggestPeer("00100010", 2, true) - - tk.Off("01000001") - tk.checkSuggestPeer("01000010", 1, true) - - tk.checkSuggestPeer("01000001", 0, false) - tk.checkSuggestPeer("00100001", 0, false) - tk.checkSuggestPeer("", 0, false) - - tk.On("01000001", "00100001") - tk.Register("10000100", "01000100", "00100100") - tk.Register("00000100", "00000101", "00000110") - tk.Register("00000010", "00000011", "00000001") - - tk.checkSuggestPeer("00000110", 0, false) - tk.checkSuggestPeer("00000101", 0, false) - tk.checkSuggestPeer("00000100", 0, false) - tk.checkSuggestPeer("00000011", 0, false) - tk.checkSuggestPeer("00000010", 0, false) - tk.checkSuggestPeer("00000001", 0, false) - tk.checkSuggestPeer("", 0, false) - -} - -// a node should stay in the address book if it's removed from the kademlia -func TestOffEffectingAddressBookNormalNode(t *testing.T) { - tk := newTestKademlia(t, "00000000") - // peer added to kademlia - tk.On("01000000") - // peer should be in the address book - if tk.addrs.Size() != 1 { - t.Fatal("known peer addresses should contain 1 entry") - } - // peer should be among live connections - if tk.conns.Size() != 1 { - t.Fatal("live peers should contain 1 entry") - } - // remove peer from kademlia - tk.Off("01000000") - // peer should be in the address book - if tk.addrs.Size() != 1 { - t.Fatal("known peer addresses should contain 1 entry") - } - // peer should not be among live connections - if tk.conns.Size() != 0 { - t.Fatal("live peers should contain 0 entry") - } -} - -// a light node should not be in the address book -func TestOffEffectingAddressBookLightNode(t *testing.T) { - tk := newTestKademlia(t, "00000000") - // light node peer added to kademlia - tk.Kademlia.On(tk.newTestKadPeer("01000000", true)) - // peer should not be in the address book - if tk.addrs.Size() != 0 { - t.Fatal("known peer addresses should contain 0 entry") - } - // peer should be among live connections - if tk.conns.Size() != 1 { - t.Fatal("live peers should contain 1 entry") - } - // remove peer from kademlia - tk.Kademlia.Off(tk.newTestKadPeer("01000000", true)) - // peer should not be in the address book - if tk.addrs.Size() != 0 { - t.Fatal("known peer addresses should contain 0 entry") - } - // peer should not be among live connections - if tk.conns.Size() != 0 { - t.Fatal("live peers should contain 0 entry") - } -} - -func TestSuggestPeerRetries(t *testing.T) { - tk := newTestKademlia(t, "00000000") - tk.RetryInterval = int64(300 * time.Millisecond) // cycle - tk.MaxRetries = 50 - tk.RetryExponent = 2 - sleep := func(n int) { - ts := tk.RetryInterval - for i := 1; i < n; i++ { - ts *= int64(tk.RetryExponent) - } - time.Sleep(time.Duration(ts)) - } - - tk.Register("01000000") - tk.On("00000001", "00000010") - tk.checkSuggestPeer("01000000", 0, false) - - tk.checkSuggestPeer("", 0, false) - - sleep(1) - tk.checkSuggestPeer("01000000", 0, false) - - tk.checkSuggestPeer("", 0, false) - - sleep(1) - tk.checkSuggestPeer("01000000", 0, false) - - tk.checkSuggestPeer("", 0, false) - - sleep(2) - tk.checkSuggestPeer("01000000", 0, false) - - tk.checkSuggestPeer("", 0, false) - - sleep(2) - tk.checkSuggestPeer("", 0, false) -} - -func TestKademliaHiveString(t *testing.T) { - tk := newTestKademlia(t, "00000000") - tk.On("01000000", "00100000") - tk.Register("10000000", "10000001") - tk.MaxProxDisplay = 8 - h := tk.String() - expH := "\n=========================================================================\nMon Feb 27 12:10:28 UTC 2017 KΛÐΞMLIΛ hive: queen's address: 000000\npopulation: 2 (4), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4\n============ DEPTH: 0 ==========================================\n000 0 | 2 8100 (0) 8000 (0)\n001 1 4000 | 1 4000 (0)\n002 1 2000 | 1 2000 (0)\n003 0 | 0\n004 0 | 0\n005 0 | 0\n006 0 | 0\n007 0 | 0\n=========================================================================" - if expH[104:] != h[104:] { - t.Fatalf("incorrect hive output. expected %v, got %v", expH, h) - } -} - -func newTestDiscoveryPeer(addr pot.Address, kad *Kademlia) *Peer { - rw := &p2p.MsgPipeRW{} - p := p2p.NewPeer(enode.ID{}, "foo", []p2p.Cap{}) - pp := protocols.NewPeer(p, rw, &protocols.Spec{}) - bp := &BzzPeer{ - Peer: pp, - BzzAddr: &BzzAddr{ - OAddr: addr.Bytes(), - UAddr: []byte(fmt.Sprintf("%x", addr[:])), - }, - } - return NewPeer(bp, kad) -} diff --git a/swarm/network/networkid_test.go b/swarm/network/networkid_test.go deleted file mode 100644 index 9d47cf9f6a35..000000000000 --- a/swarm/network/networkid_test.go +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "bytes" - "context" - "flag" - "fmt" - "math/rand" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rpc" -) - -var ( - currentNetworkID int - cnt int - nodeMap map[int][]enode.ID - kademlias map[enode.ID]*Kademlia -) - -const ( - NumberOfNets = 4 - MaxTimeout = 15 * time.Second -) - -func init() { - flag.Parse() - rand.Seed(time.Now().Unix()) -} - -/* -Run the network ID test. -The test creates one simulations.Network instance, -a number of nodes, then connects nodes with each other in this network. - -Each node gets a network ID assigned according to the number of networks. -Having more network IDs is just arbitrary in order to exclude -false positives. - -Nodes should only connect with other nodes with the same network ID. -After the setup phase, the test checks on each node if it has the -expected node connections (excluding those not sharing the network ID). -*/ -func TestNetworkID(t *testing.T) { - log.Debug("Start test") - //arbitrarily set the number of nodes. It could be any number - numNodes := 24 - //the nodeMap maps all nodes (slice value) with the same network ID (key) - nodeMap = make(map[int][]enode.ID) - //set up the network and connect nodes - net, err := setupNetwork(numNodes) - if err != nil { - t.Fatalf("Error setting up network: %v", err) - } - //let's sleep to ensure all nodes are connected - time.Sleep(1 * time.Second) - // shutdown the the network to avoid race conditions - // on accessing kademlias global map while network nodes - // are accepting messages - net.Shutdown() - //for each group sharing the same network ID... - for _, netIDGroup := range nodeMap { - log.Trace("netIDGroup size", "size", len(netIDGroup)) - //...check that their size of the kademlia is of the expected size - //the assumption is that it should be the size of the group minus 1 (the node itself) - for _, node := range netIDGroup { - if kademlias[node].addrs.Size() != len(netIDGroup)-1 { - t.Fatalf("Kademlia size has not expected peer size. Kademlia size: %d, expected size: %d", kademlias[node].addrs.Size(), len(netIDGroup)-1) - } - kademlias[node].EachAddr(nil, 0, func(addr *BzzAddr, _ int) bool { - found := false - for _, nd := range netIDGroup { - if bytes.Equal(kademlias[nd].BaseAddr(), addr.Address()) { - found = true - } - } - if !found { - t.Fatalf("Expected node not found for node %s", node.String()) - } - return true - }) - } - } - log.Info("Test terminated successfully") -} - -// setup simulated network with bzz/discovery and pss services. -// connects nodes in a circle -// if allowRaw is set, omission of builtin pss encryption is enabled (see PssParams) -func setupNetwork(numnodes int) (net *simulations.Network, err error) { - log.Debug("Setting up network") - quitC := make(chan struct{}) - errc := make(chan error) - nodes := make([]*simulations.Node, numnodes) - if numnodes < 16 { - return nil, fmt.Errorf("Minimum sixteen nodes in network") - } - adapter := adapters.NewSimAdapter(newServices()) - //create the network - net = simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "NetworkIdTestNet", - DefaultService: "bzz", - }) - log.Debug("Creating networks and nodes") - - var connCount int - - //create nodes and connect them to each other - for i := 0; i < numnodes; i++ { - log.Trace("iteration: ", "i", i) - nodeconf := adapters.RandomNodeConfig() - nodes[i], err = net.NewNodeWithConfig(nodeconf) - if err != nil { - return nil, fmt.Errorf("error creating node %d: %v", i, err) - } - err = net.Start(nodes[i].ID()) - if err != nil { - return nil, fmt.Errorf("error starting node %d: %v", i, err) - } - client, err := nodes[i].Client() - if err != nil { - return nil, fmt.Errorf("create node %d rpc client fail: %v", i, err) - } - //now setup and start event watching in order to know when we can upload - ctx, watchCancel := context.WithTimeout(context.Background(), MaxTimeout) - defer watchCancel() - watchSubscriptionEvents(ctx, nodes[i].ID(), client, errc, quitC) - //on every iteration we connect to all previous ones - for k := i - 1; k >= 0; k-- { - connCount++ - log.Debug(fmt.Sprintf("Connecting node %d with node %d; connection count is %d", i, k, connCount)) - err = net.Connect(nodes[i].ID(), nodes[k].ID()) - if err != nil { - if !strings.Contains(err.Error(), "already connected") { - return nil, fmt.Errorf("error connecting nodes: %v", err) - } - } - } - } - //now wait until the number of expected subscriptions has been finished - //`watchSubscriptionEvents` will write with a `nil` value to errc - for err := range errc { - if err != nil { - return nil, err - } - //`nil` received, decrement count - connCount-- - log.Trace("count down", "cnt", connCount) - //all subscriptions received - if connCount == 0 { - close(quitC) - break - } - } - log.Debug("Network setup phase terminated") - return net, nil -} - -func newServices() adapters.Services { - kademlias = make(map[enode.ID]*Kademlia) - kademlia := func(id enode.ID) *Kademlia { - if k, ok := kademlias[id]; ok { - return k - } - params := NewKadParams() - params.NeighbourhoodSize = 2 - params.MaxBinSize = 3 - params.MinBinSize = 1 - params.MaxRetries = 1000 - params.RetryExponent = 2 - params.RetryInterval = 1000000 - kademlias[id] = NewKademlia(id[:], params) - return kademlias[id] - } - return adapters.Services{ - "bzz": func(ctx *adapters.ServiceContext) (node.Service, error) { - addr := NewAddr(ctx.Config.Node()) - hp := NewHiveParams() - hp.Discovery = false - cnt++ - //assign the network ID - currentNetworkID = cnt % NumberOfNets - if ok := nodeMap[currentNetworkID]; ok == nil { - nodeMap[currentNetworkID] = make([]enode.ID, 0) - } - //add this node to the group sharing the same network ID - nodeMap[currentNetworkID] = append(nodeMap[currentNetworkID], ctx.Config.ID) - log.Debug("current network ID:", "id", currentNetworkID) - config := &BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - NetworkID: uint64(currentNetworkID), - } - return NewBzz(config, kademlia(ctx.Config.ID), nil, nil, nil), nil - }, - } -} - -func watchSubscriptionEvents(ctx context.Context, id enode.ID, client *rpc.Client, errc chan error, quitC chan struct{}) { - events := make(chan *p2p.PeerEvent) - sub, err := client.Subscribe(context.Background(), "admin", events, "peerEvents") - if err != nil { - log.Error(err.Error()) - errc <- fmt.Errorf("error getting peer events for node %v: %s", id, err) - return - } - go func() { - defer func() { - sub.Unsubscribe() - log.Trace("watch subscription events: unsubscribe", "id", id) - }() - - for { - select { - case <-quitC: - return - case <-ctx.Done(): - select { - case errc <- ctx.Err(): - case <-quitC: - } - return - case e := <-events: - if e.Type == p2p.PeerEventTypeAdd { - errc <- nil - } - case err := <-sub.Err(): - if err != nil { - select { - case errc <- fmt.Errorf("error getting peer events for node %v: %v", id, err): - case <-quitC: - } - return - } - } - } - }() -} diff --git a/swarm/network/priorityqueue/priorityqueue.go b/swarm/network/priorityqueue/priorityqueue.go deleted file mode 100644 index 5385026054ac..000000000000 --- a/swarm/network/priorityqueue/priorityqueue.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// package priority_queue implement a channel based priority queue -// over arbitrary types. It provides an -// an autopop loop applying a function to the items always respecting -// their priority. The structure is only quasi consistent ie., if a lower -// priority item is autopopped, it is guaranteed that there was a point -// when no higher priority item was present, ie. it is not guaranteed -// that there was any point where the lower priority item was present -// but the higher was not - -package priorityqueue - -import ( - "context" - "errors" - - "github.com/ethereum/go-ethereum/log" -) - -var ( - ErrContention = errors.New("contention") - - errBadPriority = errors.New("bad priority") - - wakey = struct{}{} -) - -// PriorityQueue is the basic structure -type PriorityQueue struct { - Queues []chan interface{} - wakeup chan struct{} -} - -// New is the constructor for PriorityQueue -func New(n int, l int) *PriorityQueue { - var queues = make([]chan interface{}, n) - for i := range queues { - queues[i] = make(chan interface{}, l) - } - return &PriorityQueue{ - Queues: queues, - wakeup: make(chan struct{}, 1), - } -} - -// Run is a forever loop popping items from the queues -func (pq *PriorityQueue) Run(ctx context.Context, f func(interface{})) { - top := len(pq.Queues) - 1 - p := top -READ: - for { - q := pq.Queues[p] - select { - case <-ctx.Done(): - return - case x := <-q: - log.Trace("priority.queue f(x)", "p", p, "len(Queues[p])", len(pq.Queues[p])) - f(x) - p = top - default: - if p > 0 { - p-- - log.Trace("priority.queue p > 0", "p", p) - continue READ - } - p = top - select { - case <-ctx.Done(): - return - case <-pq.wakeup: - log.Trace("priority.queue wakeup", "p", p) - } - } - } -} - -// Push pushes an item to the appropriate queue specified in the priority argument -// if context is given it waits until either the item is pushed or the Context aborts -func (pq *PriorityQueue) Push(x interface{}, p int) error { - if p < 0 || p >= len(pq.Queues) { - return errBadPriority - } - log.Trace("priority.queue push", "p", p, "len(Queues[p])", len(pq.Queues[p])) - select { - case pq.Queues[p] <- x: - default: - return ErrContention - } - select { - case pq.wakeup <- wakey: - default: - } - return nil -} diff --git a/swarm/network/priorityqueue/priorityqueue_test.go b/swarm/network/priorityqueue/priorityqueue_test.go deleted file mode 100644 index ed8b575c2013..000000000000 --- a/swarm/network/priorityqueue/priorityqueue_test.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package priorityqueue - -import ( - "context" - "sync" - "testing" -) - -func TestPriorityQueue(t *testing.T) { - var results []string - wg := sync.WaitGroup{} - pq := New(3, 2) - wg.Add(1) - go pq.Run(context.Background(), func(v interface{}) { - results = append(results, v.(string)) - wg.Done() - }) - pq.Push("2.0", 2) - wg.Wait() - if results[0] != "2.0" { - t.Errorf("expected first result %q, got %q", "2.0", results[0]) - } - -Loop: - for i, tc := range []struct { - priorities []int - values []string - results []string - errors []error - }{ - { - priorities: []int{0}, - values: []string{""}, - results: []string{""}, - }, - { - priorities: []int{0, 1}, - values: []string{"0.0", "1.0"}, - results: []string{"1.0", "0.0"}, - }, - { - priorities: []int{1, 0}, - values: []string{"1.0", "0.0"}, - results: []string{"1.0", "0.0"}, - }, - { - priorities: []int{0, 1, 1}, - values: []string{"0.0", "1.0", "1.1"}, - results: []string{"1.0", "1.1", "0.0"}, - }, - { - priorities: []int{0, 0, 0}, - values: []string{"0.0", "0.0", "0.1"}, - errors: []error{nil, nil, ErrContention}, - }, - } { - var results []string - wg := sync.WaitGroup{} - pq := New(3, 2) - wg.Add(len(tc.values)) - for j, value := range tc.values { - err := pq.Push(value, tc.priorities[j]) - if tc.errors != nil && err != tc.errors[j] { - t.Errorf("expected push error %v, got %v", tc.errors[j], err) - continue Loop - } - if err != nil { - continue Loop - } - } - go pq.Run(context.Background(), func(v interface{}) { - results = append(results, v.(string)) - wg.Done() - }) - wg.Wait() - for k, result := range tc.results { - if results[k] != result { - t.Errorf("test case %v: expected %v element %q, got %q", i, k, result, results[k]) - } - } - } -} diff --git a/swarm/network/protocol.go b/swarm/network/protocol.go deleted file mode 100644 index 6f8eadad2af0..000000000000 --- a/swarm/network/protocol.go +++ /dev/null @@ -1,389 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "context" - "errors" - "fmt" - "net" - "sync" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/state" -) - -const ( - DefaultNetworkID = 3 - // timeout for waiting - bzzHandshakeTimeout = 3000 * time.Millisecond -) - -// BzzSpec is the spec of the generic swarm handshake -var BzzSpec = &protocols.Spec{ - Name: "bzz", - Version: 8, - MaxMsgSize: 10 * 1024 * 1024, - Messages: []interface{}{ - HandshakeMsg{}, - }, -} - -// DiscoverySpec is the spec for the bzz discovery subprotocols -var DiscoverySpec = &protocols.Spec{ - Name: "hive", - Version: 8, - MaxMsgSize: 10 * 1024 * 1024, - Messages: []interface{}{ - peersMsg{}, - subPeersMsg{}, - }, -} - -// BzzConfig captures the config params used by the hive -type BzzConfig struct { - OverlayAddr []byte // base address of the overlay network - UnderlayAddr []byte // node's underlay address - HiveParams *HiveParams - NetworkID uint64 - LightNode bool - BootnodeMode bool -} - -// Bzz is the swarm protocol bundle -type Bzz struct { - *Hive - NetworkID uint64 - LightNode bool - localAddr *BzzAddr - mtx sync.Mutex - handshakes map[enode.ID]*HandshakeMsg - streamerSpec *protocols.Spec - streamerRun func(*BzzPeer) error -} - -// NewBzz is the swarm protocol constructor -// arguments -// * bzz config -// * overlay driver -// * peer store -func NewBzz(config *BzzConfig, kad *Kademlia, store state.Store, streamerSpec *protocols.Spec, streamerRun func(*BzzPeer) error) *Bzz { - bzz := &Bzz{ - Hive: NewHive(config.HiveParams, kad, store), - NetworkID: config.NetworkID, - LightNode: config.LightNode, - localAddr: &BzzAddr{config.OverlayAddr, config.UnderlayAddr}, - handshakes: make(map[enode.ID]*HandshakeMsg), - streamerRun: streamerRun, - streamerSpec: streamerSpec, - } - - if config.BootnodeMode { - bzz.streamerRun = nil - bzz.streamerSpec = nil - } - - return bzz -} - -// UpdateLocalAddr updates underlayaddress of the running node -func (b *Bzz) UpdateLocalAddr(byteaddr []byte) *BzzAddr { - b.localAddr = b.localAddr.Update(&BzzAddr{ - UAddr: byteaddr, - OAddr: b.localAddr.OAddr, - }) - return b.localAddr -} - -// NodeInfo returns the node's overlay address -func (b *Bzz) NodeInfo() interface{} { - return b.localAddr.Address() -} - -// Protocols return the protocols swarm offers -// Bzz implements the node.Service interface -// * handshake/hive -// * discovery -func (b *Bzz) Protocols() []p2p.Protocol { - protocol := []p2p.Protocol{ - { - Name: BzzSpec.Name, - Version: BzzSpec.Version, - Length: BzzSpec.Length(), - Run: b.runBzz, - NodeInfo: b.NodeInfo, - }, - { - Name: DiscoverySpec.Name, - Version: DiscoverySpec.Version, - Length: DiscoverySpec.Length(), - Run: b.RunProtocol(DiscoverySpec, b.Hive.Run), - NodeInfo: b.Hive.NodeInfo, - PeerInfo: b.Hive.PeerInfo, - }, - } - if b.streamerSpec != nil && b.streamerRun != nil { - protocol = append(protocol, p2p.Protocol{ - Name: b.streamerSpec.Name, - Version: b.streamerSpec.Version, - Length: b.streamerSpec.Length(), - Run: b.RunProtocol(b.streamerSpec, b.streamerRun), - }) - } - return protocol -} - -// APIs returns the APIs offered by bzz -// * hive -// Bzz implements the node.Service interface -func (b *Bzz) APIs() []rpc.API { - return []rpc.API{{ - Namespace: "hive", - Version: "3.0", - Service: b.Hive, - }} -} - -// RunProtocol is a wrapper for swarm subprotocols -// returns a p2p protocol run function that can be assigned to p2p.Protocol#Run field -// arguments: -// * p2p protocol spec -// * run function taking BzzPeer as argument -// this run function is meant to block for the duration of the protocol session -// on return the session is terminated and the peer is disconnected -// the protocol waits for the bzz handshake is negotiated -// the overlay address on the BzzPeer is set from the remote handshake -func (b *Bzz) RunProtocol(spec *protocols.Spec, run func(*BzzPeer) error) func(*p2p.Peer, p2p.MsgReadWriter) error { - return func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - // wait for the bzz protocol to perform the handshake - handshake, _ := b.GetOrCreateHandshake(p.ID()) - defer b.removeHandshake(p.ID()) - select { - case <-handshake.done: - case <-time.After(bzzHandshakeTimeout): - return fmt.Errorf("%08x: %s protocol timeout waiting for handshake on %08x", b.BaseAddr()[:4], spec.Name, p.ID().Bytes()[:4]) - } - if handshake.err != nil { - return fmt.Errorf("%08x: %s protocol closed: %v", b.BaseAddr()[:4], spec.Name, handshake.err) - } - // the handshake has succeeded so construct the BzzPeer and run the protocol - peer := &BzzPeer{ - Peer: protocols.NewPeer(p, rw, spec), - BzzAddr: handshake.peerAddr, - lastActive: time.Now(), - LightNode: handshake.LightNode, - } - - log.Debug("peer created", "addr", handshake.peerAddr.String()) - - return run(peer) - } -} - -// performHandshake implements the negotiation of the bzz handshake -// shared among swarm subprotocols -func (b *Bzz) performHandshake(p *protocols.Peer, handshake *HandshakeMsg) error { - ctx, cancel := context.WithTimeout(context.Background(), bzzHandshakeTimeout) - defer func() { - close(handshake.done) - cancel() - }() - rsh, err := p.Handshake(ctx, handshake, b.checkHandshake) - if err != nil { - handshake.err = err - return err - } - handshake.peerAddr = rsh.(*HandshakeMsg).Addr - handshake.LightNode = rsh.(*HandshakeMsg).LightNode - return nil -} - -// runBzz is the p2p protocol run function for the bzz base protocol -// that negotiates the bzz handshake -func (b *Bzz) runBzz(p *p2p.Peer, rw p2p.MsgReadWriter) error { - handshake, _ := b.GetOrCreateHandshake(p.ID()) - if !<-handshake.init { - return fmt.Errorf("%08x: bzz already started on peer %08x", b.localAddr.Over()[:4], p.ID().Bytes()[:4]) - } - close(handshake.init) - defer b.removeHandshake(p.ID()) - peer := protocols.NewPeer(p, rw, BzzSpec) - err := b.performHandshake(peer, handshake) - if err != nil { - log.Warn(fmt.Sprintf("%08x: handshake failed with remote peer %08x: %v", b.localAddr.Over()[:4], p.ID().Bytes()[:4], err)) - - return err - } - // fail if we get another handshake - msg, err := rw.ReadMsg() - if err != nil { - return err - } - msg.Discard() - return errors.New("received multiple handshakes") -} - -// BzzPeer is the bzz protocol view of a protocols.Peer (itself an extension of p2p.Peer) -// implements the Peer interface and all interfaces Peer implements: Addr, OverlayPeer -type BzzPeer struct { - *protocols.Peer // represents the connection for online peers - *BzzAddr // remote address -> implements Addr interface = protocols.Peer - lastActive time.Time // time is updated whenever mutexes are releasing - LightNode bool -} - -func NewBzzPeer(p *protocols.Peer) *BzzPeer { - return &BzzPeer{Peer: p, BzzAddr: NewAddr(p.Node())} -} - -// ID returns the peer's underlay node identifier. -func (p *BzzPeer) ID() enode.ID { - // This is here to resolve a method tie: both protocols.Peer and BzzAddr are embedded - // into the struct and provide ID(). The protocols.Peer version is faster, ensure it - // gets used. - return p.Peer.ID() -} - -/* - Handshake - -* Version: 8 byte integer version of the protocol -* NetworkID: 8 byte integer network identifier -* Addr: the address advertised by the node including underlay and overlay connecctions -*/ -type HandshakeMsg struct { - Version uint64 - NetworkID uint64 - Addr *BzzAddr - LightNode bool - - // peerAddr is the address received in the peer handshake - peerAddr *BzzAddr - - init chan bool - done chan struct{} - err error -} - -// String pretty prints the handshake -func (bh *HandshakeMsg) String() string { - return fmt.Sprintf("Handshake: Version: %v, NetworkID: %v, Addr: %v, LightNode: %v, peerAddr: %v", bh.Version, bh.NetworkID, bh.Addr, bh.LightNode, bh.peerAddr) -} - -// Perform initiates the handshake and validates the remote handshake message -func (b *Bzz) checkHandshake(hs interface{}) error { - rhs := hs.(*HandshakeMsg) - if rhs.NetworkID != b.NetworkID { - return fmt.Errorf("network id mismatch %d (!= %d)", rhs.NetworkID, b.NetworkID) - } - if rhs.Version != uint64(BzzSpec.Version) { - return fmt.Errorf("version mismatch %d (!= %d)", rhs.Version, BzzSpec.Version) - } - return nil -} - -// removeHandshake removes handshake for peer with peerID -// from the bzz handshake store -func (b *Bzz) removeHandshake(peerID enode.ID) { - b.mtx.Lock() - defer b.mtx.Unlock() - delete(b.handshakes, peerID) -} - -// GetHandshake returns the bzz handhake that the remote peer with peerID sent -func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool) { - b.mtx.Lock() - defer b.mtx.Unlock() - handshake, found := b.handshakes[peerID] - if !found { - handshake = &HandshakeMsg{ - Version: uint64(BzzSpec.Version), - NetworkID: b.NetworkID, - Addr: b.localAddr, - LightNode: b.LightNode, - init: make(chan bool, 1), - done: make(chan struct{}), - } - // when handhsake is first created for a remote peer - // it is initialised with the init - handshake.init <- true - b.handshakes[peerID] = handshake - } - - return handshake, found -} - -// BzzAddr implements the PeerAddr interface -type BzzAddr struct { - OAddr []byte - UAddr []byte -} - -// Address implements OverlayPeer interface to be used in Overlay. -func (a *BzzAddr) Address() []byte { - return a.OAddr -} - -// Over returns the overlay address. -func (a *BzzAddr) Over() []byte { - return a.OAddr -} - -// Under returns the underlay address. -func (a *BzzAddr) Under() []byte { - return a.UAddr -} - -// ID returns the node identifier in the underlay. -func (a *BzzAddr) ID() enode.ID { - n, err := enode.ParseV4(string(a.UAddr)) - if err != nil { - return enode.ID{} - } - return n.ID() -} - -// Update updates the underlay address of a peer record -func (a *BzzAddr) Update(na *BzzAddr) *BzzAddr { - return &BzzAddr{a.OAddr, na.UAddr} -} - -// String pretty prints the address -func (a *BzzAddr) String() string { - return fmt.Sprintf("%x <%s>", a.OAddr, a.UAddr) -} - -// RandomAddr is a utility method generating an address from a public key -func RandomAddr() *BzzAddr { - key, err := crypto.GenerateKey() - if err != nil { - panic("unable to generate key") - } - node := enode.NewV4(&key.PublicKey, net.IP{127, 0, 0, 1}, 30303, 30303) - return NewAddr(node) -} - -// NewAddr constucts a BzzAddr from a node record. -func NewAddr(node *enode.Node) *BzzAddr { - return &BzzAddr{OAddr: node.ID().Bytes(), UAddr: []byte(node.String())} -} diff --git a/swarm/network/protocol_test.go b/swarm/network/protocol_test.go deleted file mode 100644 index 64ce7ba4ab7f..000000000000 --- a/swarm/network/protocol_test.go +++ /dev/null @@ -1,253 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package network - -import ( - "flag" - "fmt" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" -) - -const ( - TestProtocolVersion = 8 - TestProtocolNetworkID = 3 -) - -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") -) - -func init() { - flag.Parse() - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(os.Stderr, log.TerminalFormat(true)))) -} - -func HandshakeMsgExchange(lhs, rhs *HandshakeMsg, id enode.ID) []p2ptest.Exchange { - return []p2ptest.Exchange{ - { - Expects: []p2ptest.Expect{ - { - Code: 0, - Msg: lhs, - Peer: id, - }, - }, - }, - { - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: rhs, - Peer: id, - }, - }, - }, - } -} - -func newBzzBaseTester(t *testing.T, n int, addr *BzzAddr, spec *protocols.Spec, run func(*BzzPeer) error) *bzzTester { - cs := make(map[string]chan bool) - - srv := func(p *BzzPeer) error { - defer func() { - if cs[p.ID().String()] != nil { - close(cs[p.ID().String()]) - } - }() - return run(p) - } - - protocol := func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - return srv(&BzzPeer{Peer: protocols.NewPeer(p, rw, spec), BzzAddr: NewAddr(p.Node())}) - } - - s := p2ptest.NewProtocolTester(addr.ID(), n, protocol) - - for _, node := range s.Nodes { - cs[node.ID().String()] = make(chan bool) - } - - return &bzzTester{ - addr: addr, - ProtocolTester: s, - cs: cs, - } -} - -type bzzTester struct { - *p2ptest.ProtocolTester - addr *BzzAddr - cs map[string]chan bool - bzz *Bzz -} - -func newBzz(addr *BzzAddr, lightNode bool) *Bzz { - config := &BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: NewHiveParams(), - NetworkID: DefaultNetworkID, - LightNode: lightNode, - } - kad := NewKademlia(addr.OAddr, NewKadParams()) - bzz := NewBzz(config, kad, nil, nil, nil) - return bzz -} - -func newBzzHandshakeTester(n int, addr *BzzAddr, lightNode bool) *bzzTester { - bzz := newBzz(addr, lightNode) - pt := p2ptest.NewProtocolTester(addr.ID(), n, bzz.runBzz) - - return &bzzTester{ - addr: addr, - ProtocolTester: pt, - bzz: bzz, - } -} - -// should test handshakes in one exchange? parallelisation -func (s *bzzTester) testHandshake(lhs, rhs *HandshakeMsg, disconnects ...*p2ptest.Disconnect) error { - if err := s.TestExchanges(HandshakeMsgExchange(lhs, rhs, rhs.Addr.ID())...); err != nil { - return err - } - - if len(disconnects) > 0 { - return s.TestDisconnected(disconnects...) - } - - // If we don't expect disconnect, ensure peers remain connected - err := s.TestDisconnected(&p2ptest.Disconnect{ - Peer: s.Nodes[0].ID(), - Error: nil, - }) - - if err == nil { - return fmt.Errorf("Unexpected peer disconnect") - } - - if err.Error() != "timed out waiting for peers to disconnect" { - return err - } - - return nil -} - -func correctBzzHandshake(addr *BzzAddr, lightNode bool) *HandshakeMsg { - return &HandshakeMsg{ - Version: TestProtocolVersion, - NetworkID: TestProtocolNetworkID, - Addr: addr, - LightNode: lightNode, - } -} - -func TestBzzHandshakeNetworkIDMismatch(t *testing.T) { - lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) - node := s.Nodes[0] - - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), - &HandshakeMsg{Version: TestProtocolVersion, NetworkID: 321, Addr: NewAddr(node)}, - &p2ptest.Disconnect{Peer: node.ID(), Error: fmt.Errorf("Handshake error: Message handler error: (msg code 0): network id mismatch 321 (!= 3)")}, - ) - - if err != nil { - t.Fatal(err) - } -} - -func TestBzzHandshakeVersionMismatch(t *testing.T) { - lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) - node := s.Nodes[0] - - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), - &HandshakeMsg{Version: 0, NetworkID: TestProtocolNetworkID, Addr: NewAddr(node)}, - &p2ptest.Disconnect{Peer: node.ID(), Error: fmt.Errorf("Handshake error: Message handler error: (msg code 0): version mismatch 0 (!= %d)", TestProtocolVersion)}, - ) - - if err != nil { - t.Fatal(err) - } -} - -func TestBzzHandshakeSuccess(t *testing.T) { - lightNode := false - addr := RandomAddr() - s := newBzzHandshakeTester(1, addr, lightNode) - node := s.Nodes[0] - - err := s.testHandshake( - correctBzzHandshake(addr, lightNode), - &HandshakeMsg{Version: TestProtocolVersion, NetworkID: TestProtocolNetworkID, Addr: NewAddr(node)}, - ) - - if err != nil { - t.Fatal(err) - } -} - -func TestBzzHandshakeLightNode(t *testing.T) { - var lightNodeTests = []struct { - name string - lightNode bool - }{ - {"on", true}, - {"off", false}, - } - - for _, test := range lightNodeTests { - t.Run(test.name, func(t *testing.T) { - randomAddr := RandomAddr() - pt := newBzzHandshakeTester(1, randomAddr, false) - - node := pt.Nodes[0] - addr := NewAddr(node) - - err := pt.testHandshake( - correctBzzHandshake(randomAddr, false), - &HandshakeMsg{Version: TestProtocolVersion, NetworkID: TestProtocolNetworkID, Addr: addr, LightNode: test.lightNode}, - ) - - if err != nil { - t.Fatal(err) - } - - select { - - case <-pt.bzz.handshakes[node.ID()].done: - if pt.bzz.handshakes[node.ID()].LightNode != test.lightNode { - t.Fatalf("peer LightNode flag is %v, should be %v", pt.bzz.handshakes[node.ID()].LightNode, test.lightNode) - } - case <-time.After(10 * time.Second): - t.Fatal("test timeout") - } - }) - } -} diff --git a/swarm/network/simulation/bucket.go b/swarm/network/simulation/bucket.go deleted file mode 100644 index 49a1f43091cd..000000000000 --- a/swarm/network/simulation/bucket.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import "github.com/ethereum/go-ethereum/p2p/enode" - -// BucketKey is the type that should be used for keys in simulation buckets. -type BucketKey string - -// NodeItem returns an item set in ServiceFunc function for a particular node. -func (s *Simulation) NodeItem(id enode.ID, key interface{}) (value interface{}, ok bool) { - s.mu.Lock() - defer s.mu.Unlock() - - if _, ok := s.buckets[id]; !ok { - return nil, false - } - return s.buckets[id].Load(key) -} - -// SetNodeItem sets a new item associated with the node with provided NodeID. -// Buckets should be used to avoid managing separate simulation global state. -func (s *Simulation) SetNodeItem(id enode.ID, key interface{}, value interface{}) { - s.mu.Lock() - defer s.mu.Unlock() - - s.buckets[id].Store(key, value) -} - -// NodesItems returns a map of items from all nodes that are all set under the -// same BucketKey. -func (s *Simulation) NodesItems(key interface{}) (values map[enode.ID]interface{}) { - s.mu.RLock() - defer s.mu.RUnlock() - - ids := s.NodeIDs() - values = make(map[enode.ID]interface{}, len(ids)) - for _, id := range ids { - if _, ok := s.buckets[id]; !ok { - continue - } - if v, ok := s.buckets[id].Load(key); ok { - values[id] = v - } - } - return values -} - -// UpNodesItems returns a map of items with the same BucketKey from all nodes that are up. -func (s *Simulation) UpNodesItems(key interface{}) (values map[enode.ID]interface{}) { - s.mu.RLock() - defer s.mu.RUnlock() - - ids := s.UpNodeIDs() - values = make(map[enode.ID]interface{}) - for _, id := range ids { - if _, ok := s.buckets[id]; !ok { - continue - } - if v, ok := s.buckets[id].Load(key); ok { - values[id] = v - } - } - return values -} diff --git a/swarm/network/simulation/bucket_test.go b/swarm/network/simulation/bucket_test.go deleted file mode 100644 index 2273d35a2986..000000000000 --- a/swarm/network/simulation/bucket_test.go +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "sync" - "testing" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" -) - -// TestServiceBucket tests all bucket functionality using subtests. -// It constructs a simulation of two nodes by adding items to their buckets -// in ServiceFunc constructor, then by SetNodeItem. Testing UpNodesItems -// is done by stopping one node and validating availability of its items. -func TestServiceBucket(t *testing.T) { - testKey := "Key" - testValue := "Value" - - sim := New(map[string]ServiceFunc{ - "noop": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - b.Store(testKey, testValue+ctx.Config.ID.String()) - return newNoopService(), nil, nil - }, - }) - defer sim.Close() - - id1, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - id2, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - t.Run("ServiceFunc bucket Store", func(t *testing.T) { - v, ok := sim.NodeItem(id1, testKey) - if !ok { - t.Fatal("bucket item not found") - } - s, ok := v.(string) - if !ok { - t.Fatal("bucket item value is not string") - } - if s != testValue+id1.String() { - t.Fatalf("expected %q, got %q", testValue+id1.String(), s) - } - - v, ok = sim.NodeItem(id2, testKey) - if !ok { - t.Fatal("bucket item not found") - } - s, ok = v.(string) - if !ok { - t.Fatal("bucket item value is not string") - } - if s != testValue+id2.String() { - t.Fatalf("expected %q, got %q", testValue+id2.String(), s) - } - }) - - customKey := "anotherKey" - customValue := "anotherValue" - - t.Run("SetNodeItem", func(t *testing.T) { - sim.SetNodeItem(id1, customKey, customValue) - - v, ok := sim.NodeItem(id1, customKey) - if !ok { - t.Fatal("bucket item not found") - } - s, ok := v.(string) - if !ok { - t.Fatal("bucket item value is not string") - } - if s != customValue { - t.Fatalf("expected %q, got %q", customValue, s) - } - - _, ok = sim.NodeItem(id2, customKey) - if ok { - t.Fatal("bucket item should not be found") - } - }) - - if err := sim.StopNode(id2); err != nil { - t.Fatal(err) - } - - t.Run("UpNodesItems", func(t *testing.T) { - items := sim.UpNodesItems(testKey) - - v, ok := items[id1] - if !ok { - t.Errorf("node 1 item not found") - } - s, ok := v.(string) - if !ok { - t.Fatal("node 1 item value is not string") - } - if s != testValue+id1.String() { - t.Fatalf("expected %q, got %q", testValue+id1.String(), s) - } - - _, ok = items[id2] - if ok { - t.Errorf("node 2 item should not be found") - } - }) - - t.Run("NodeItems", func(t *testing.T) { - items := sim.NodesItems(testKey) - - v, ok := items[id1] - if !ok { - t.Errorf("node 1 item not found") - } - s, ok := v.(string) - if !ok { - t.Fatal("node 1 item value is not string") - } - if s != testValue+id1.String() { - t.Fatalf("expected %q, got %q", testValue+id1.String(), s) - } - - v, ok = items[id2] - if !ok { - t.Errorf("node 2 item not found") - } - s, ok = v.(string) - if !ok { - t.Fatal("node 1 item value is not string") - } - if s != testValue+id2.String() { - t.Fatalf("expected %q, got %q", testValue+id2.String(), s) - } - }) -} diff --git a/swarm/network/simulation/events.go b/swarm/network/simulation/events.go deleted file mode 100644 index d73c3af4eeab..000000000000 --- a/swarm/network/simulation/events.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" -) - -// PeerEvent is the type of the channel returned by Simulation.PeerEvents. -type PeerEvent struct { - // NodeID is the ID of node that the event is caught on. - NodeID enode.ID - // PeerID is the ID of the peer node that the event is caught on. - PeerID enode.ID - // Event is the event that is caught. - Event *simulations.Event - // Error is the error that may have happened during event watching. - Error error -} - -// PeerEventsFilter defines a filter on PeerEvents to exclude messages with -// defined properties. Use PeerEventsFilter methods to set required options. -type PeerEventsFilter struct { - eventType simulations.EventType - - connUp *bool - - msgReceive *bool - protocol *string - msgCode *uint64 -} - -// NewPeerEventsFilter returns a new PeerEventsFilter instance. -func NewPeerEventsFilter() *PeerEventsFilter { - return &PeerEventsFilter{} -} - -// Connect sets the filter to events when two nodes connect. -func (f *PeerEventsFilter) Connect() *PeerEventsFilter { - f.eventType = simulations.EventTypeConn - b := true - f.connUp = &b - return f -} - -// Drop sets the filter to events when two nodes disconnect. -func (f *PeerEventsFilter) Drop() *PeerEventsFilter { - f.eventType = simulations.EventTypeConn - b := false - f.connUp = &b - return f -} - -// ReceivedMessages sets the filter to only messages that are received. -func (f *PeerEventsFilter) ReceivedMessages() *PeerEventsFilter { - f.eventType = simulations.EventTypeMsg - b := true - f.msgReceive = &b - return f -} - -// SentMessages sets the filter to only messages that are sent. -func (f *PeerEventsFilter) SentMessages() *PeerEventsFilter { - f.eventType = simulations.EventTypeMsg - b := false - f.msgReceive = &b - return f -} - -// Protocol sets the filter to only one message protocol. -func (f *PeerEventsFilter) Protocol(p string) *PeerEventsFilter { - f.eventType = simulations.EventTypeMsg - f.protocol = &p - return f -} - -// MsgCode sets the filter to only one msg code. -func (f *PeerEventsFilter) MsgCode(c uint64) *PeerEventsFilter { - f.eventType = simulations.EventTypeMsg - f.msgCode = &c - return f -} - -// PeerEvents returns a channel of events that are captured by admin peerEvents -// subscription nodes with provided NodeIDs. Additional filters can be set to ignore -// events that are not relevant. -func (s *Simulation) PeerEvents(ctx context.Context, ids []enode.ID, filters ...*PeerEventsFilter) <-chan PeerEvent { - eventC := make(chan PeerEvent) - - // wait group to make sure all subscriptions to admin peerEvents are established - // before this function returns. - var subsWG sync.WaitGroup - for _, id := range ids { - s.shutdownWG.Add(1) - subsWG.Add(1) - go func(id enode.ID) { - defer s.shutdownWG.Done() - - events := make(chan *simulations.Event) - sub := s.Net.Events().Subscribe(events) - defer sub.Unsubscribe() - - subsWG.Done() - - for { - select { - case <-ctx.Done(): - if err := ctx.Err(); err != nil { - select { - case eventC <- PeerEvent{NodeID: id, Error: err}: - case <-s.Done(): - } - } - return - case <-s.Done(): - return - case e := <-events: - // ignore control events - if e.Control { - continue - } - match := len(filters) == 0 // if there are no filters match all events - for _, f := range filters { - if f.eventType == simulations.EventTypeConn && e.Conn != nil { - if *f.connUp != e.Conn.Up { - continue - } - // all connection filter parameters matched, break the loop - match = true - break - } - if f.eventType == simulations.EventTypeMsg && e.Msg != nil { - if f.msgReceive != nil && *f.msgReceive != e.Msg.Received { - continue - } - if f.protocol != nil && *f.protocol != e.Msg.Protocol { - continue - } - if f.msgCode != nil && *f.msgCode != e.Msg.Code { - continue - } - // all message filter parameters matched, break the loop - match = true - break - } - } - var peerID enode.ID - switch e.Type { - case simulations.EventTypeConn: - peerID = e.Conn.One - if peerID == id { - peerID = e.Conn.Other - } - case simulations.EventTypeMsg: - peerID = e.Msg.One - if peerID == id { - peerID = e.Msg.Other - } - } - if match { - select { - case eventC <- PeerEvent{NodeID: id, PeerID: peerID, Event: e}: - case <-ctx.Done(): - if err := ctx.Err(); err != nil { - select { - case eventC <- PeerEvent{NodeID: id, PeerID: peerID, Error: err}: - case <-s.Done(): - } - } - return - case <-s.Done(): - return - } - } - case err := <-sub.Err(): - if err != nil { - select { - case eventC <- PeerEvent{NodeID: id, Error: err}: - case <-ctx.Done(): - if err := ctx.Err(); err != nil { - select { - case eventC <- PeerEvent{NodeID: id, Error: err}: - case <-s.Done(): - } - } - return - case <-s.Done(): - return - } - } - } - } - }(id) - } - - // wait all subscriptions - subsWG.Wait() - return eventC -} diff --git a/swarm/network/simulation/events_test.go b/swarm/network/simulation/events_test.go deleted file mode 100644 index 529844816f4a..000000000000 --- a/swarm/network/simulation/events_test.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "sync" - "testing" - "time" -) - -// TestPeerEvents creates simulation, adds two nodes, -// register for peer events, connects nodes in a chain -// and waits for the number of connection events to -// be received. -func TestPeerEvents(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - _, err := sim.AddNodes(2) - if err != nil { - t.Fatal(err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - events := sim.PeerEvents(ctx, sim.NodeIDs()) - - // two nodes -> two connection events - expectedEventCount := 2 - - var wg sync.WaitGroup - wg.Add(expectedEventCount) - - go func() { - for e := range events { - if e.Error != nil { - if e.Error == context.Canceled { - return - } - t.Error(e.Error) - continue - } - wg.Done() - } - }() - - err = sim.Net.ConnectNodesChain(sim.NodeIDs()) - if err != nil { - t.Fatal(err) - } - - wg.Wait() -} - -func TestPeerEventsTimeout(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - _, err := sim.AddNodes(2) - if err != nil { - t.Fatal(err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) - defer cancel() - events := sim.PeerEvents(ctx, sim.NodeIDs()) - - done := make(chan struct{}) - errC := make(chan error) - go func() { - for e := range events { - if e.Error == context.Canceled { - return - } - if e.Error == context.DeadlineExceeded { - close(done) - return - } else { - errC <- e.Error - } - } - }() - - select { - case <-time.After(time.Second): - t.Fatal("no context deadline received") - case err := <-errC: - t.Fatal(err) - case <-done: - // all good, context deadline detected - } -} diff --git a/swarm/network/simulation/example_test.go b/swarm/network/simulation/example_test.go deleted file mode 100644 index 9d1492979563..000000000000 --- a/swarm/network/simulation/example_test.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation_test - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/simulation" -) - -// Every node can have a Kademlia associated using the node bucket under -// BucketKeyKademlia key. This allows to use WaitTillHealthy to block until -// all nodes have the their Kademlias healthy. -func ExampleSimulation_WaitTillHealthy() { - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - hp.Discovery = false - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - kad := network.NewKademlia(addr.Over(), network.NewKadParams()) - // store kademlia in node's bucket under BucketKeyKademlia - // so that it can be found by WaitTillHealthy method. - b.Store(simulation.BucketKeyKademlia, kad) - return network.NewBzz(config, kad, nil, nil, nil), nil, nil - }, - }) - defer sim.Close() - - _, err := sim.AddNodesAndConnectRing(10) - if err != nil { - // handle error properly... - panic(err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) - defer cancel() - ill, err := sim.WaitTillHealthy(ctx) - if err != nil { - // inspect the latest detected not healthy kademlias - for id, kad := range ill { - fmt.Println("Node", id) - fmt.Println(kad.String()) - } - // handle error... - } - - // continue with the test - -} - -// Watch all peer events in the simulation network, buy receiving from a channel. -func ExampleSimulation_PeerEvents() { - sim := simulation.New(nil) - defer sim.Close() - - events := sim.PeerEvents(context.Background(), sim.NodeIDs()) - - go func() { - for e := range events { - if e.Error != nil { - log.Error("peer event", "err", e.Error) - continue - } - log.Info("peer event", "node", e.NodeID, "peer", e.PeerID, "type", e.Event.Type) - } - }() -} - -// Detect when a nodes drop a peer. -func ExampleSimulation_PeerEvents_disconnections() { - sim := simulation.New(nil) - defer sim.Close() - - disconnections := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - - go func() { - for d := range disconnections { - if d.Error != nil { - log.Error("peer drop", "err", d.Error) - continue - } - log.Warn("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - }() -} - -// Watch multiple types of events or messages. In this case, they differ only -// by MsgCode, but filters can be set for different types or protocols, too. -func ExampleSimulation_PeerEvents_multipleFilters() { - sim := simulation.New(nil) - defer sim.Close() - - msgs := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - // Watch when bzz messages 1 and 4 are received. - simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("bzz").MsgCode(1), - simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("bzz").MsgCode(4), - ) - - go func() { - for m := range msgs { - if m.Error != nil { - log.Error("bzz message", "err", m.Error) - continue - } - log.Info("bzz message", "node", m.NodeID, "peer", m.PeerID) - } - }() -} diff --git a/swarm/network/simulation/http.go b/swarm/network/simulation/http.go deleted file mode 100644 index 69ae3baec289..000000000000 --- a/swarm/network/simulation/http.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "fmt" - "net/http" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/simulations" -) - -// Package defaults. -var ( - DefaultHTTPSimAddr = ":8888" -) - -//WithServer implements the builder pattern constructor for Simulation to -//start with a HTTP server -func (s *Simulation) WithServer(addr string) *Simulation { - //assign default addr if nothing provided - if addr == "" { - addr = DefaultHTTPSimAddr - } - log.Info(fmt.Sprintf("Initializing simulation server on %s...", addr)) - //initialize the HTTP server - s.handler = simulations.NewServer(s.Net) - s.runC = make(chan struct{}) - //add swarm specific routes to the HTTP server - s.addSimulationRoutes() - s.httpSrv = &http.Server{ - Addr: addr, - Handler: s.handler, - } - go func() { - err := s.httpSrv.ListenAndServe() - if err != nil { - log.Error("Error starting the HTTP server", "error", err) - } - }() - return s -} - -//register additional HTTP routes -func (s *Simulation) addSimulationRoutes() { - s.handler.POST("/runsim", s.RunSimulation) -} - -// RunSimulation is the actual POST endpoint runner -func (s *Simulation) RunSimulation(w http.ResponseWriter, req *http.Request) { - log.Debug("RunSimulation endpoint running") - s.runC <- struct{}{} - w.WriteHeader(http.StatusOK) -} diff --git a/swarm/network/simulation/http_test.go b/swarm/network/simulation/http_test.go deleted file mode 100644 index dffd03a03279..000000000000 --- a/swarm/network/simulation/http_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "fmt" - "net/http" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" -) - -func TestSimulationWithHTTPServer(t *testing.T) { - log.Debug("Init simulation") - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - - sim := New( - map[string]ServiceFunc{ - "noop": func(_ *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - return newNoopService(), nil, nil - }, - }).WithServer(DefaultHTTPSimAddr) - defer sim.Close() - log.Debug("Done.") - - _, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - log.Debug("Starting sim round and let it time out...") - //first test that running without sending to the channel will actually - //block the simulation, so let it time out - result := sim.Run(ctx, func(ctx context.Context, sim *Simulation) error { - log.Debug("Just start the sim without any action and wait for the timeout") - //ensure with a Sleep that simulation doesn't terminate before the timeout - time.Sleep(2 * time.Second) - return nil - }) - - if result.Error != nil { - if result.Error.Error() == "context deadline exceeded" { - log.Debug("Expected timeout error received") - } else { - t.Fatal(result.Error) - } - } - - //now run it again and send the expected signal on the waiting channel, - //then close the simulation - log.Debug("Starting sim round and wait for frontend signal...") - //this time the timeout should be long enough so that it doesn't kick in too early - ctx, cancel2 := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel2() - errC := make(chan error, 1) - go triggerSimulationRun(t, errC) - result = sim.Run(ctx, func(ctx context.Context, sim *Simulation) error { - log.Debug("This run waits for the run signal from `frontend`...") - //ensure with a Sleep that simulation doesn't terminate before the signal is received - time.Sleep(2 * time.Second) - return nil - }) - if result.Error != nil { - t.Fatal(result.Error) - } - if err := <-errC; err != nil { - t.Fatal(err) - } - log.Debug("Test terminated successfully") -} - -func triggerSimulationRun(t *testing.T, errC chan error) { - //We need to first wait for the sim HTTP server to start running... - time.Sleep(2 * time.Second) - //then we can send the signal - - log.Debug("Sending run signal to simulation: POST /runsim...") - resp, err := http.Post(fmt.Sprintf("http://localhost%s/runsim", DefaultHTTPSimAddr), "application/json", nil) - if err != nil { - errC <- fmt.Errorf("Request failed: %v", err) - return - } - log.Debug("Signal sent") - if resp.StatusCode != http.StatusOK { - errC <- fmt.Errorf("err %s", resp.Status) - return - } - errC <- resp.Body.Close() -} diff --git a/swarm/network/simulation/kademlia.go b/swarm/network/simulation/kademlia.go deleted file mode 100644 index c58d402b0942..000000000000 --- a/swarm/network/simulation/kademlia.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "encoding/hex" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/network" -) - -// BucketKeyKademlia is the key to be used for storing the kademlia -// instance for particular node, usually inside the ServiceFunc function. -var BucketKeyKademlia BucketKey = "kademlia" - -// WaitTillHealthy is blocking until the health of all kademlias is true. -// If error is not nil, a map of kademlia that was found not healthy is returned. -// TODO: Check correctness since change in kademlia depth calculation logic -func (s *Simulation) WaitTillHealthy(ctx context.Context) (ill map[enode.ID]*network.Kademlia, err error) { - // Prepare PeerPot map for checking Kademlia health - var ppmap map[string]*network.PeerPot - kademlias := s.kademlias() - addrs := make([][]byte, 0, len(kademlias)) - // TODO verify that all kademlias have same params - for _, k := range kademlias { - addrs = append(addrs, k.BaseAddr()) - } - ppmap = network.NewPeerPotMap(s.neighbourhoodSize, addrs) - - // Wait for healthy Kademlia on every node before checking files - ticker := time.NewTicker(200 * time.Millisecond) - defer ticker.Stop() - - ill = make(map[enode.ID]*network.Kademlia) - for { - select { - case <-ctx.Done(): - return ill, ctx.Err() - case <-ticker.C: - for k := range ill { - delete(ill, k) - } - log.Debug("kademlia health check", "addr count", len(addrs)) - for id, k := range kademlias { - //PeerPot for this node - addr := common.Bytes2Hex(k.BaseAddr()) - pp := ppmap[addr] - //call Healthy RPC - h := k.GetHealthInfo(pp) - //print info - log.Debug(k.String()) - log.Debug("kademlia", "connectNN", h.ConnectNN, "knowNN", h.KnowNN) - log.Debug("kademlia", "health", h.ConnectNN && h.KnowNN, "addr", hex.EncodeToString(k.BaseAddr()), "node", id) - log.Debug("kademlia", "ill condition", !h.ConnectNN, "addr", hex.EncodeToString(k.BaseAddr()), "node", id) - if !h.ConnectNN { - ill[id] = k - } - } - if len(ill) == 0 { - return nil, nil - } - } - } -} - -// kademlias returns all Kademlia instances that are set -// in simulation bucket. -func (s *Simulation) kademlias() (ks map[enode.ID]*network.Kademlia) { - items := s.UpNodesItems(BucketKeyKademlia) - ks = make(map[enode.ID]*network.Kademlia, len(items)) - for id, v := range items { - k, ok := v.(*network.Kademlia) - if !ok { - continue - } - ks[id] = k - } - return ks -} diff --git a/swarm/network/simulation/kademlia_test.go b/swarm/network/simulation/kademlia_test.go deleted file mode 100644 index 36b244d3d0c4..000000000000 --- a/swarm/network/simulation/kademlia_test.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" -) - -func TestWaitTillHealthy(t *testing.T) { - t.Skip("WaitTillHealthy depends on discovery, which relies on a reliable SuggestPeer, which is not reliable") - - sim := New(map[string]ServiceFunc{ - "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - kad := network.NewKademlia(addr.Over(), network.NewKadParams()) - // store kademlia in node's bucket under BucketKeyKademlia - // so that it can be found by WaitTillHealthy method. - b.Store(BucketKeyKademlia, kad) - return network.NewBzz(config, kad, nil, nil, nil), nil, nil - }, - }) - defer sim.Close() - - _, err := sim.AddNodesAndConnectRing(10) - if err != nil { - t.Fatal(err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) - defer cancel() - ill, err := sim.WaitTillHealthy(ctx) - if err != nil { - for id, kad := range ill { - t.Log("Node", id) - t.Log(kad.String()) - } - if err != nil { - t.Fatal(err) - } - } -} diff --git a/swarm/network/simulation/node.go b/swarm/network/simulation/node.go deleted file mode 100644 index 24afe51a4151..000000000000 --- a/swarm/network/simulation/node.go +++ /dev/null @@ -1,309 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "encoding/json" - "errors" - "io/ioutil" - "math/rand" - "os" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" -) - -// NodeIDs returns NodeIDs for all nodes in the network. -func (s *Simulation) NodeIDs() (ids []enode.ID) { - nodes := s.Net.GetNodes() - ids = make([]enode.ID, len(nodes)) - for i, node := range nodes { - ids[i] = node.ID() - } - return ids -} - -// UpNodeIDs returns NodeIDs for nodes that are up in the network. -func (s *Simulation) UpNodeIDs() (ids []enode.ID) { - nodes := s.Net.GetNodes() - for _, node := range nodes { - if node.Up() { - ids = append(ids, node.ID()) - } - } - return ids -} - -// DownNodeIDs returns NodeIDs for nodes that are stopped in the network. -func (s *Simulation) DownNodeIDs() (ids []enode.ID) { - nodes := s.Net.GetNodes() - for _, node := range nodes { - if !node.Up() { - ids = append(ids, node.ID()) - } - } - return ids -} - -// AddNodeOption defines the option that can be passed -// to Simulation.AddNode method. -type AddNodeOption func(*adapters.NodeConfig) - -// AddNodeWithMsgEvents sets the EnableMsgEvents option -// to NodeConfig. -func AddNodeWithMsgEvents(enable bool) AddNodeOption { - return func(o *adapters.NodeConfig) { - o.EnableMsgEvents = enable - } -} - -// AddNodeWithService specifies a service that should be -// started on a node. This option can be repeated as variadic -// argument toe AddNode and other add node related methods. -// If AddNodeWithService is not specified, all services will be started. -func AddNodeWithService(serviceName string) AddNodeOption { - return func(o *adapters.NodeConfig) { - o.Services = append(o.Services, serviceName) - } -} - -// AddNode creates a new node with random configuration, -// applies provided options to the config and adds the node to network. -// By default all services will be started on a node. If one or more -// AddNodeWithService option are provided, only specified services will be started. -func (s *Simulation) AddNode(opts ...AddNodeOption) (id enode.ID, err error) { - conf := adapters.RandomNodeConfig() - for _, o := range opts { - o(conf) - } - if len(conf.Services) == 0 { - conf.Services = s.serviceNames - } - node, err := s.Net.NewNodeWithConfig(conf) - if err != nil { - return id, err - } - return node.ID(), s.Net.Start(node.ID()) -} - -// AddNodes creates new nodes with random configurations, -// applies provided options to the config and adds nodes to network. -func (s *Simulation) AddNodes(count int, opts ...AddNodeOption) (ids []enode.ID, err error) { - ids = make([]enode.ID, 0, count) - for i := 0; i < count; i++ { - id, err := s.AddNode(opts...) - if err != nil { - return nil, err - } - ids = append(ids, id) - } - return ids, nil -} - -// AddNodesAndConnectFull is a helpper method that combines -// AddNodes and ConnectNodesFull. Only new nodes will be connected. -func (s *Simulation) AddNodesAndConnectFull(count int, opts ...AddNodeOption) (ids []enode.ID, err error) { - if count < 2 { - return nil, errors.New("count of nodes must be at least 2") - } - ids, err = s.AddNodes(count, opts...) - if err != nil { - return nil, err - } - err = s.Net.ConnectNodesFull(ids) - if err != nil { - return nil, err - } - return ids, nil -} - -// AddNodesAndConnectChain is a helpper method that combines -// AddNodes and ConnectNodesChain. The chain will be continued from the last -// added node, if there is one in simulation using ConnectToLastNode method. -func (s *Simulation) AddNodesAndConnectChain(count int, opts ...AddNodeOption) (ids []enode.ID, err error) { - if count < 2 { - return nil, errors.New("count of nodes must be at least 2") - } - id, err := s.AddNode(opts...) - if err != nil { - return nil, err - } - err = s.Net.ConnectToLastNode(id) - if err != nil { - return nil, err - } - ids, err = s.AddNodes(count-1, opts...) - if err != nil { - return nil, err - } - ids = append([]enode.ID{id}, ids...) - err = s.Net.ConnectNodesChain(ids) - if err != nil { - return nil, err - } - return ids, nil -} - -// AddNodesAndConnectRing is a helpper method that combines -// AddNodes and ConnectNodesRing. -func (s *Simulation) AddNodesAndConnectRing(count int, opts ...AddNodeOption) (ids []enode.ID, err error) { - if count < 2 { - return nil, errors.New("count of nodes must be at least 2") - } - ids, err = s.AddNodes(count, opts...) - if err != nil { - return nil, err - } - err = s.Net.ConnectNodesRing(ids) - if err != nil { - return nil, err - } - return ids, nil -} - -// AddNodesAndConnectStar is a helpper method that combines -// AddNodes and ConnectNodesStar. -func (s *Simulation) AddNodesAndConnectStar(count int, opts ...AddNodeOption) (ids []enode.ID, err error) { - if count < 2 { - return nil, errors.New("count of nodes must be at least 2") - } - ids, err = s.AddNodes(count, opts...) - if err != nil { - return nil, err - } - err = s.Net.ConnectNodesStar(ids[1:], ids[0]) - if err != nil { - return nil, err - } - return ids, nil -} - -// UploadSnapshot uploads a snapshot to the simulation -// This method tries to open the json file provided, applies the config to all nodes -// and then loads the snapshot into the Simulation network -func (s *Simulation) UploadSnapshot(snapshotFile string, opts ...AddNodeOption) error { - f, err := os.Open(snapshotFile) - if err != nil { - return err - } - defer func() { - err := f.Close() - if err != nil { - log.Error("Error closing snapshot file", "err", err) - } - }() - jsonbyte, err := ioutil.ReadAll(f) - if err != nil { - return err - } - var snap simulations.Snapshot - err = json.Unmarshal(jsonbyte, &snap) - if err != nil { - return err - } - - //the snapshot probably has the property EnableMsgEvents not set - //just in case, set it to true! - //(we need this to wait for messages before uploading) - for _, n := range snap.Nodes { - n.Node.Config.EnableMsgEvents = true - n.Node.Config.Services = s.serviceNames - for _, o := range opts { - o(n.Node.Config) - } - } - - log.Info("Waiting for p2p connections to be established...") - - //now we can load the snapshot - err = s.Net.Load(&snap) - if err != nil { - return err - } - log.Info("Snapshot loaded") - return nil -} - -// StartNode starts a node by NodeID. -func (s *Simulation) StartNode(id enode.ID) (err error) { - return s.Net.Start(id) -} - -// StartRandomNode starts a random node. -func (s *Simulation) StartRandomNode() (id enode.ID, err error) { - n := s.Net.GetRandomDownNode() - if n == nil { - return id, ErrNodeNotFound - } - return n.ID(), s.Net.Start(n.ID()) -} - -// StartRandomNodes starts random nodes. -func (s *Simulation) StartRandomNodes(count int) (ids []enode.ID, err error) { - ids = make([]enode.ID, 0, count) - for i := 0; i < count; i++ { - n := s.Net.GetRandomDownNode() - if n == nil { - return nil, ErrNodeNotFound - } - err = s.Net.Start(n.ID()) - if err != nil { - return nil, err - } - ids = append(ids, n.ID()) - } - return ids, nil -} - -// StopNode stops a node by NodeID. -func (s *Simulation) StopNode(id enode.ID) (err error) { - return s.Net.Stop(id) -} - -// StopRandomNode stops a random node. -func (s *Simulation) StopRandomNode() (id enode.ID, err error) { - n := s.Net.GetRandomUpNode() - if n == nil { - return id, ErrNodeNotFound - } - return n.ID(), s.Net.Stop(n.ID()) -} - -// StopRandomNodes stops random nodes. -func (s *Simulation) StopRandomNodes(count int) (ids []enode.ID, err error) { - ids = make([]enode.ID, 0, count) - for i := 0; i < count; i++ { - n := s.Net.GetRandomUpNode() - if n == nil { - return nil, ErrNodeNotFound - } - err = s.Net.Stop(n.ID()) - if err != nil { - return nil, err - } - ids = append(ids, n.ID()) - } - return ids, nil -} - -// seed the random generator for Simulation.randomNode. -func init() { - rand.Seed(time.Now().UnixNano()) -} diff --git a/swarm/network/simulation/node_test.go b/swarm/network/simulation/node_test.go deleted file mode 100644 index bae5afb26081..000000000000 --- a/swarm/network/simulation/node_test.go +++ /dev/null @@ -1,444 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" -) - -func TestUpDownNodeIDs(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - ids, err := sim.AddNodes(10) - if err != nil { - t.Fatal(err) - } - - gotIDs := sim.NodeIDs() - - if !equalNodeIDs(ids, gotIDs) { - t.Error("returned nodes are not equal to added ones") - } - - stoppedIDs, err := sim.StopRandomNodes(3) - if err != nil { - t.Fatal(err) - } - - gotIDs = sim.UpNodeIDs() - - for _, id := range gotIDs { - if !sim.Net.GetNode(id).Up() { - t.Errorf("node %s should not be down", id) - } - } - - if !equalNodeIDs(ids, append(gotIDs, stoppedIDs...)) { - t.Error("returned nodes are not equal to added ones") - } - - gotIDs = sim.DownNodeIDs() - - for _, id := range gotIDs { - if sim.Net.GetNode(id).Up() { - t.Errorf("node %s should not be up", id) - } - } - - if !equalNodeIDs(stoppedIDs, gotIDs) { - t.Error("returned nodes are not equal to the stopped ones") - } -} - -func equalNodeIDs(one, other []enode.ID) bool { - if len(one) != len(other) { - return false - } - var count int - for _, a := range one { - var found bool - for _, b := range other { - if a == b { - found = true - break - } - } - if found { - count++ - } else { - return false - } - } - return count == len(one) -} - -func TestAddNode(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - id, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - n := sim.Net.GetNode(id) - if n == nil { - t.Fatal("node not found") - } - - if !n.Up() { - t.Error("node not started") - } -} - -func TestAddNodeWithMsgEvents(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - id, err := sim.AddNode(AddNodeWithMsgEvents(true)) - if err != nil { - t.Fatal(err) - } - - if !sim.Net.GetNode(id).Config.EnableMsgEvents { - t.Error("EnableMsgEvents is false") - } - - id, err = sim.AddNode(AddNodeWithMsgEvents(false)) - if err != nil { - t.Fatal(err) - } - - if sim.Net.GetNode(id).Config.EnableMsgEvents { - t.Error("EnableMsgEvents is true") - } -} - -func TestAddNodeWithService(t *testing.T) { - sim := New(map[string]ServiceFunc{ - "noop1": noopServiceFunc, - "noop2": noopServiceFunc, - }) - defer sim.Close() - - id, err := sim.AddNode(AddNodeWithService("noop1")) - if err != nil { - t.Fatal(err) - } - - n := sim.Net.GetNode(id).Node.(*adapters.SimNode) - if n.Service("noop1") == nil { - t.Error("service noop1 not found on node") - } - if n.Service("noop2") != nil { - t.Error("service noop2 should not be found on node") - } -} - -func TestAddNodeMultipleServices(t *testing.T) { - sim := New(map[string]ServiceFunc{ - "noop1": noopServiceFunc, - "noop2": noopService2Func, - }) - defer sim.Close() - - id, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - n := sim.Net.GetNode(id).Node.(*adapters.SimNode) - if n.Service("noop1") == nil { - t.Error("service noop1 not found on node") - } - if n.Service("noop2") == nil { - t.Error("service noop2 not found on node") - } -} - -func TestAddNodeDuplicateServiceError(t *testing.T) { - sim := New(map[string]ServiceFunc{ - "noop1": noopServiceFunc, - "noop2": noopServiceFunc, - }) - defer sim.Close() - - wantErr := "duplicate service: *simulation.noopService" - _, err := sim.AddNode() - if err.Error() != wantErr { - t.Errorf("got error %q, want %q", err, wantErr) - } -} - -func TestAddNodes(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - nodesCount := 12 - - ids, err := sim.AddNodes(nodesCount) - if err != nil { - t.Fatal(err) - } - - count := len(ids) - if count != nodesCount { - t.Errorf("expected %v nodes, got %v", nodesCount, count) - } - - count = len(sim.Net.GetNodes()) - if count != nodesCount { - t.Errorf("expected %v nodes, got %v", nodesCount, count) - } -} - -func TestAddNodesAndConnectFull(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - n := 12 - - ids, err := sim.AddNodesAndConnectFull(n) - if err != nil { - t.Fatal(err) - } - - simulations.VerifyFull(t, sim.Net, ids) -} - -func TestAddNodesAndConnectChain(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - _, err := sim.AddNodesAndConnectChain(12) - if err != nil { - t.Fatal(err) - } - - // add another set of nodes to test - // if two chains are connected - _, err = sim.AddNodesAndConnectChain(7) - if err != nil { - t.Fatal(err) - } - - simulations.VerifyChain(t, sim.Net, sim.UpNodeIDs()) -} - -func TestAddNodesAndConnectRing(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - ids, err := sim.AddNodesAndConnectRing(12) - if err != nil { - t.Fatal(err) - } - - simulations.VerifyRing(t, sim.Net, ids) -} - -func TestAddNodesAndConnectStar(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - ids, err := sim.AddNodesAndConnectStar(12) - if err != nil { - t.Fatal(err) - } - - simulations.VerifyStar(t, sim.Net, ids, 0) -} - -//To test that uploading a snapshot works -func TestUploadSnapshot(t *testing.T) { - log.Debug("Creating simulation") - s := New(map[string]ServiceFunc{ - "bzz": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - hp.Discovery = false - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - kad := network.NewKademlia(addr.Over(), network.NewKadParams()) - return network.NewBzz(config, kad, nil, nil, nil), nil, nil - }, - }) - defer s.Close() - - nodeCount := 16 - log.Debug("Uploading snapshot") - err := s.UploadSnapshot(fmt.Sprintf("../stream/testing/snapshot_%d.json", nodeCount)) - if err != nil { - t.Fatalf("Error uploading snapshot to simulation network: %v", err) - } - - ctx := context.Background() - log.Debug("Starting simulation...") - s.Run(ctx, func(ctx context.Context, sim *Simulation) error { - log.Debug("Checking") - nodes := sim.UpNodeIDs() - if len(nodes) != nodeCount { - t.Fatal("Simulation network node number doesn't match snapshot node number") - } - return nil - }) - log.Debug("Done.") -} - -func TestStartStopNode(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - id, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - n := sim.Net.GetNode(id) - if n == nil { - t.Fatal("node not found") - } - if !n.Up() { - t.Error("node not started") - } - - err = sim.StopNode(id) - if err != nil { - t.Fatal(err) - } - if n.Up() { - t.Error("node not stopped") - } - - waitForPeerEventPropagation() - - err = sim.StartNode(id) - if err != nil { - t.Fatal(err) - } - if !n.Up() { - t.Error("node not started") - } -} - -func TestStartStopRandomNode(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - _, err := sim.AddNodes(3) - if err != nil { - t.Fatal(err) - } - - id, err := sim.StopRandomNode() - if err != nil { - t.Fatal(err) - } - - n := sim.Net.GetNode(id) - if n == nil { - t.Fatal("node not found") - } - if n.Up() { - t.Error("node not stopped") - } - - id2, err := sim.StopRandomNode() - if err != nil { - t.Fatal(err) - } - - waitForPeerEventPropagation() - - idStarted, err := sim.StartRandomNode() - if err != nil { - t.Fatal(err) - } - - if idStarted != id && idStarted != id2 { - t.Error("unexpected started node ID") - } -} - -func TestStartStopRandomNodes(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - _, err := sim.AddNodes(10) - if err != nil { - t.Fatal(err) - } - - ids, err := sim.StopRandomNodes(3) - if err != nil { - t.Fatal(err) - } - - for _, id := range ids { - n := sim.Net.GetNode(id) - if n == nil { - t.Fatal("node not found") - } - if n.Up() { - t.Error("node not stopped") - } - } - - waitForPeerEventPropagation() - - ids, err = sim.StartRandomNodes(2) - if err != nil { - t.Fatal(err) - } - - for _, id := range ids { - n := sim.Net.GetNode(id) - if n == nil { - t.Fatal("node not found") - } - if !n.Up() { - t.Error("node not started") - } - } -} - -func waitForPeerEventPropagation() { - // Sleep here to ensure that Network.watchPeerEvents defer function - // has set the `node.Up() = false` before we start the node again. - // - // The same node is stopped and started again, and upon start - // watchPeerEvents is started in a goroutine. If the node is stopped - // and then very quickly started, that goroutine may be scheduled later - // then start and force `node.Up() = false` in its defer function. - // This will make this test unreliable. - time.Sleep(1 * time.Second) -} diff --git a/swarm/network/simulation/service.go b/swarm/network/simulation/service.go deleted file mode 100644 index 0ac8149a94be..000000000000 --- a/swarm/network/simulation/service.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" -) - -// Service returns a single Service by name on a particular node -// with provided id. -func (s *Simulation) Service(name string, id enode.ID) node.Service { - simNode, ok := s.Net.GetNode(id).Node.(*adapters.SimNode) - if !ok { - return nil - } - services := simNode.ServiceMap() - if len(services) == 0 { - return nil - } - return services[name] -} - -// RandomService returns a single Service by name on a -// randomly chosen node that is up. -func (s *Simulation) RandomService(name string) node.Service { - n := s.Net.GetRandomUpNode().Node.(*adapters.SimNode) - if n == nil { - return nil - } - return n.Service(name) -} - -// Services returns all services with a provided name -// from nodes that are up. -func (s *Simulation) Services(name string) (services map[enode.ID]node.Service) { - nodes := s.Net.GetNodes() - services = make(map[enode.ID]node.Service) - for _, node := range nodes { - if !node.Up() { - continue - } - simNode, ok := node.Node.(*adapters.SimNode) - if !ok { - continue - } - services[node.ID()] = simNode.Service(name) - } - return services -} diff --git a/swarm/network/simulation/service_test.go b/swarm/network/simulation/service_test.go deleted file mode 100644 index 23b0d86f243f..000000000000 --- a/swarm/network/simulation/service_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "testing" -) - -func TestService(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - id, err := sim.AddNode() - if err != nil { - t.Fatal(err) - } - - _, ok := sim.Service("noop", id).(*noopService) - if !ok { - t.Fatalf("service is not of %T type", &noopService{}) - } - - _, ok = sim.RandomService("noop").(*noopService) - if !ok { - t.Fatalf("service is not of %T type", &noopService{}) - } - - _, ok = sim.Services("noop")[id].(*noopService) - if !ok { - t.Fatalf("service is not of %T type", &noopService{}) - } -} diff --git a/swarm/network/simulation/simulation.go b/swarm/network/simulation/simulation.go deleted file mode 100644 index e18d19a67c22..000000000000 --- a/swarm/network/simulation/simulation.go +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "errors" - "net/http" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" -) - -// Common errors that are returned by functions in this package. -var ( - ErrNodeNotFound = errors.New("node not found") -) - -// Simulation provides methods on network, nodes and services -// to manage them. -type Simulation struct { - // Net is exposed as a way to access lower level functionalities - // of p2p/simulations.Network. - Net *simulations.Network - - serviceNames []string - cleanupFuncs []func() - buckets map[enode.ID]*sync.Map - shutdownWG sync.WaitGroup - done chan struct{} - mu sync.RWMutex - neighbourhoodSize int - - httpSrv *http.Server //attach a HTTP server via SimulationOptions - handler *simulations.Server //HTTP handler for the server - runC chan struct{} //channel where frontend signals it is ready -} - -// ServiceFunc is used in New to declare new service constructor. -// The first argument provides ServiceContext from the adapters package -// giving for example the access to NodeID. Second argument is the sync.Map -// where all "global" state related to the service should be kept. -// All cleanups needed for constructed service and any other constructed -// objects should ne provided in a single returned cleanup function. -// Returned cleanup function will be called by Close function -// after network shutdown. -type ServiceFunc func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) - -// New creates a new simulation instance -// Services map must have unique keys as service names and -// every ServiceFunc must return a node.Service of the unique type. -// This restriction is required by node.Node.Start() function -// which is used to start node.Service returned by ServiceFunc. -func New(services map[string]ServiceFunc) (s *Simulation) { - s = &Simulation{ - buckets: make(map[enode.ID]*sync.Map), - done: make(chan struct{}), - neighbourhoodSize: network.NewKadParams().NeighbourhoodSize, - } - - adapterServices := make(map[string]adapters.ServiceFunc, len(services)) - for name, serviceFunc := range services { - // Scope this variables correctly - // as they will be in the adapterServices[name] function accessed later. - name, serviceFunc := name, serviceFunc - s.serviceNames = append(s.serviceNames, name) - adapterServices[name] = func(ctx *adapters.ServiceContext) (node.Service, error) { - b := new(sync.Map) - service, cleanup, err := serviceFunc(ctx, b) - if err != nil { - return nil, err - } - s.mu.Lock() - defer s.mu.Unlock() - if cleanup != nil { - s.cleanupFuncs = append(s.cleanupFuncs, cleanup) - } - s.buckets[ctx.Config.ID] = b - return service, nil - } - } - - s.Net = simulations.NewNetwork( - adapters.NewTCPAdapter(adapterServices), - &simulations.NetworkConfig{ID: "0"}, - ) - - return s -} - -// RunFunc is the function that will be called -// on Simulation.Run method call. -type RunFunc func(context.Context, *Simulation) error - -// Result is the returned value of Simulation.Run method. -type Result struct { - Duration time.Duration - Error error -} - -// Run calls the RunFunc function while taking care of -// cancellation provided through the Context. -func (s *Simulation) Run(ctx context.Context, f RunFunc) (r Result) { - //if the option is set to run a HTTP server with the simulation, - //init the server and start it - start := time.Now() - if s.httpSrv != nil { - log.Info("Waiting for frontend to be ready...(send POST /runsim to HTTP server)") - //wait for the frontend to connect - select { - case <-s.runC: - case <-ctx.Done(): - return Result{ - Duration: time.Since(start), - Error: ctx.Err(), - } - } - log.Info("Received signal from frontend - starting simulation run.") - } - errc := make(chan error) - quit := make(chan struct{}) - defer close(quit) - go func() { - select { - case errc <- f(ctx, s): - case <-quit: - } - }() - var err error - select { - case <-ctx.Done(): - err = ctx.Err() - case err = <-errc: - } - return Result{ - Duration: time.Since(start), - Error: err, - } -} - -// Maximal number of parallel calls to cleanup functions on -// Simulation.Close. -var maxParallelCleanups = 10 - -// Close calls all cleanup functions that are returned by -// ServiceFunc, waits for all of them to finish and other -// functions that explicitly block shutdownWG -// (like Simulation.PeerEvents) and shuts down the network -// at the end. It is used to clean all resources from the -// simulation. -func (s *Simulation) Close() { - close(s.done) - - sem := make(chan struct{}, maxParallelCleanups) - s.mu.RLock() - cleanupFuncs := make([]func(), len(s.cleanupFuncs)) - for i, f := range s.cleanupFuncs { - if f != nil { - cleanupFuncs[i] = f - } - } - s.mu.RUnlock() - var cleanupWG sync.WaitGroup - for _, cleanup := range cleanupFuncs { - cleanupWG.Add(1) - sem <- struct{}{} - go func(cleanup func()) { - defer cleanupWG.Done() - defer func() { <-sem }() - - cleanup() - }(cleanup) - } - cleanupWG.Wait() - - if s.httpSrv != nil { - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) - defer cancel() - err := s.httpSrv.Shutdown(ctx) - if err != nil { - log.Error("Error shutting down HTTP server!", "err", err) - } - close(s.runC) - } - - s.shutdownWG.Wait() - s.Net.Shutdown() -} - -// Done returns a channel that is closed when the simulation -// is closed by Close method. It is useful for signaling termination -// of all possible goroutines that are created within the test. -func (s *Simulation) Done() <-chan struct{} { - return s.done -} diff --git a/swarm/network/simulation/simulation_test.go b/swarm/network/simulation/simulation_test.go deleted file mode 100644 index 1d0338f593fe..000000000000 --- a/swarm/network/simulation/simulation_test.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package simulation - -import ( - "context" - "errors" - "flag" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") -) - -func init() { - flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -// TestRun tests if Run method calls RunFunc and if it handles context properly. -func TestRun(t *testing.T) { - sim := New(noopServiceFuncMap) - defer sim.Close() - - t.Run("call", func(t *testing.T) { - expect := "something" - var got string - r := sim.Run(context.Background(), func(ctx context.Context, sim *Simulation) error { - got = expect - return nil - }) - - if r.Error != nil { - t.Errorf("unexpected error: %v", r.Error) - } - if got != expect { - t.Errorf("expected %q, got %q", expect, got) - } - }) - - t.Run("cancellation", func(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond) - defer cancel() - - r := sim.Run(ctx, func(ctx context.Context, sim *Simulation) error { - time.Sleep(time.Second) - return nil - }) - - if r.Error != context.DeadlineExceeded { - t.Errorf("unexpected error: %v", r.Error) - } - }) - - t.Run("context value and duration", func(t *testing.T) { - ctx := context.WithValue(context.Background(), "hey", "there") - sleep := 50 * time.Millisecond - - r := sim.Run(ctx, func(ctx context.Context, sim *Simulation) error { - if ctx.Value("hey") != "there" { - return errors.New("expected context value not passed") - } - time.Sleep(sleep) - return nil - }) - - if r.Error != nil { - t.Errorf("unexpected error: %v", r.Error) - } - if r.Duration < sleep { - t.Errorf("reported run duration less then expected: %s", r.Duration) - } - }) -} - -// TestClose tests are Close method triggers all close functions and are all nodes not up anymore. -func TestClose(t *testing.T) { - var mu sync.Mutex - var cleanupCount int - - sleep := 50 * time.Millisecond - - sim := New(map[string]ServiceFunc{ - "noop": func(ctx *adapters.ServiceContext, b *sync.Map) (node.Service, func(), error) { - return newNoopService(), func() { - time.Sleep(sleep) - mu.Lock() - defer mu.Unlock() - cleanupCount++ - }, nil - }, - }) - - nodeCount := 30 - - _, err := sim.AddNodes(nodeCount) - if err != nil { - t.Fatal(err) - } - - var upNodeCount int - for _, n := range sim.Net.GetNodes() { - if n.Up() { - upNodeCount++ - } - } - if upNodeCount != nodeCount { - t.Errorf("all nodes should be up, insted only %v are up", upNodeCount) - } - - sim.Close() - - if cleanupCount != nodeCount { - t.Errorf("number of cleanups expected %v, got %v", nodeCount, cleanupCount) - } - - upNodeCount = 0 - for _, n := range sim.Net.GetNodes() { - if n.Up() { - upNodeCount++ - } - } - if upNodeCount != 0 { - t.Errorf("all nodes should be down, insted %v are up", upNodeCount) - } -} - -// TestDone checks if Close method triggers the closing of done channel. -func TestDone(t *testing.T) { - sim := New(noopServiceFuncMap) - sleep := 50 * time.Millisecond - timeout := 2 * time.Second - - start := time.Now() - go func() { - time.Sleep(sleep) - sim.Close() - }() - - select { - case <-time.After(timeout): - t.Error("done channel closing timed out") - case <-sim.Done(): - if d := time.Since(start); d < sleep { - t.Errorf("done channel closed sooner then expected: %s", d) - } - } -} - -// a helper map for usual services that do not do anything -var noopServiceFuncMap = map[string]ServiceFunc{ - "noop": noopServiceFunc, -} - -// a helper function for most basic noop service -func noopServiceFunc(_ *adapters.ServiceContext, _ *sync.Map) (node.Service, func(), error) { - return newNoopService(), nil, nil -} - -func newNoopService() node.Service { - return &noopService{} -} - -// a helper function for most basic Noop service -// of a different type then NoopService to test -// multiple services on one node. -func noopService2Func(_ *adapters.ServiceContext, _ *sync.Map) (node.Service, func(), error) { - return new(noopService2), nil, nil -} - -// NoopService2 is the service that does not do anything -// but implements node.Service interface. -type noopService2 struct { - simulations.NoopService -} - -type noopService struct { - simulations.NoopService -} diff --git a/swarm/network/simulations/discovery/discovery.go b/swarm/network/simulations/discovery/discovery.go deleted file mode 100644 index a6ff5fd45e67..000000000000 --- a/swarm/network/simulations/discovery/discovery.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package discovery diff --git a/swarm/network/simulations/discovery/discovery_test.go b/swarm/network/simulations/discovery/discovery_test.go deleted file mode 100644 index 5227de3bb584..000000000000 --- a/swarm/network/simulations/discovery/discovery_test.go +++ /dev/null @@ -1,527 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package discovery - -import ( - "context" - "flag" - "fmt" - "io/ioutil" - "os" - "path" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/state" - colorable "github.com/mattn/go-colorable" -) - -// serviceName is used with the exec adapter so the exec'd binary knows which -// service to execute -const serviceName = "discovery" -const testNeighbourhoodSize = 2 -const discoveryPersistenceDatadir = "discovery_persistence_test_store" - -var discoveryPersistencePath = path.Join(os.TempDir(), discoveryPersistenceDatadir) -var discoveryEnabled = true -var persistenceEnabled = false - -var services = adapters.Services{ - serviceName: newService, -} - -func cleanDbStores() error { - entries, err := ioutil.ReadDir(os.TempDir()) - if err != nil { - return err - } - - for _, f := range entries { - if strings.HasPrefix(f.Name(), discoveryPersistenceDatadir) { - os.RemoveAll(path.Join(os.TempDir(), f.Name())) - } - } - return nil - -} - -func getDbStore(nodeID string) (*state.DBStore, error) { - if _, err := os.Stat(discoveryPersistencePath + "_" + nodeID); os.IsNotExist(err) { - log.Info(fmt.Sprintf("directory for nodeID %s does not exist. creating...", nodeID)) - ioutil.TempDir("", discoveryPersistencePath+"_"+nodeID) - } - log.Info(fmt.Sprintf("opening storage directory for nodeID %s", nodeID)) - store, err := state.NewDBStore(discoveryPersistencePath + "_" + nodeID) - if err != nil { - return nil, err - } - return store, nil -} - -var ( - nodeCount = flag.Int("nodes", 32, "number of nodes to create (default 32)") - initCount = flag.Int("conns", 1, "number of originally connected peers (default 1)") - loglevel = flag.Int("loglevel", 3, "verbosity of logs") - rawlog = flag.Bool("rawlog", false, "remove terminal formatting from logs") -) - -func init() { - flag.Parse() - // register the discovery service which will run as a devp2p - // protocol when using the exec adapter - adapters.RegisterServices(services) - - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(!*rawlog)))) -} - -// Benchmarks to test the average time it takes for an N-node ring -// to full a healthy kademlia topology -func BenchmarkDiscovery_8_1(b *testing.B) { benchmarkDiscovery(b, 8, 1) } -func BenchmarkDiscovery_16_1(b *testing.B) { benchmarkDiscovery(b, 16, 1) } -func BenchmarkDiscovery_32_1(b *testing.B) { benchmarkDiscovery(b, 32, 1) } -func BenchmarkDiscovery_64_1(b *testing.B) { benchmarkDiscovery(b, 64, 1) } -func BenchmarkDiscovery_128_1(b *testing.B) { benchmarkDiscovery(b, 128, 1) } -func BenchmarkDiscovery_256_1(b *testing.B) { benchmarkDiscovery(b, 256, 1) } - -func BenchmarkDiscovery_8_2(b *testing.B) { benchmarkDiscovery(b, 8, 2) } -func BenchmarkDiscovery_16_2(b *testing.B) { benchmarkDiscovery(b, 16, 2) } -func BenchmarkDiscovery_32_2(b *testing.B) { benchmarkDiscovery(b, 32, 2) } -func BenchmarkDiscovery_64_2(b *testing.B) { benchmarkDiscovery(b, 64, 2) } -func BenchmarkDiscovery_128_2(b *testing.B) { benchmarkDiscovery(b, 128, 2) } -func BenchmarkDiscovery_256_2(b *testing.B) { benchmarkDiscovery(b, 256, 2) } - -func BenchmarkDiscovery_8_4(b *testing.B) { benchmarkDiscovery(b, 8, 4) } -func BenchmarkDiscovery_16_4(b *testing.B) { benchmarkDiscovery(b, 16, 4) } -func BenchmarkDiscovery_32_4(b *testing.B) { benchmarkDiscovery(b, 32, 4) } -func BenchmarkDiscovery_64_4(b *testing.B) { benchmarkDiscovery(b, 64, 4) } -func BenchmarkDiscovery_128_4(b *testing.B) { benchmarkDiscovery(b, 128, 4) } -func BenchmarkDiscovery_256_4(b *testing.B) { benchmarkDiscovery(b, 256, 4) } - -func TestDiscoverySimulationExecAdapter(t *testing.T) { - testDiscoverySimulationExecAdapter(t, *nodeCount, *initCount) -} - -func testDiscoverySimulationExecAdapter(t *testing.T, nodes, conns int) { - baseDir, err := ioutil.TempDir("", "swarm-test") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(baseDir) - testDiscoverySimulation(t, nodes, conns, adapters.NewExecAdapter(baseDir)) -} - -func TestDiscoverySimulationSimAdapter(t *testing.T) { - testDiscoverySimulationSimAdapter(t, *nodeCount, *initCount) -} - -func TestDiscoveryPersistenceSimulationSimAdapter(t *testing.T) { - testDiscoveryPersistenceSimulationSimAdapter(t, *nodeCount, *initCount) -} - -func testDiscoveryPersistenceSimulationSimAdapter(t *testing.T, nodes, conns int) { - testDiscoveryPersistenceSimulation(t, nodes, conns, adapters.NewSimAdapter(services)) -} - -func testDiscoverySimulationSimAdapter(t *testing.T, nodes, conns int) { - testDiscoverySimulation(t, nodes, conns, adapters.NewSimAdapter(services)) -} - -func testDiscoverySimulation(t *testing.T, nodes, conns int, adapter adapters.NodeAdapter) { - startedAt := time.Now() - result, err := discoverySimulation(nodes, conns, adapter) - if err != nil { - t.Fatalf("Setting up simulation failed: %v", err) - } - if result.Error != nil { - t.Fatalf("Simulation failed: %s", result.Error) - } - t.Logf("Simulation with %d nodes passed in %s", nodes, result.FinishedAt.Sub(result.StartedAt)) - var min, max time.Duration - var sum int - for _, pass := range result.Passes { - duration := pass.Sub(result.StartedAt) - if sum == 0 || duration < min { - min = duration - } - if duration > max { - max = duration - } - sum += int(duration.Nanoseconds()) - } - t.Logf("Min: %s, Max: %s, Average: %s", min, max, time.Duration(sum/len(result.Passes))*time.Nanosecond) - finishedAt := time.Now() - t.Logf("Setup: %s, shutdown: %s", result.StartedAt.Sub(startedAt), finishedAt.Sub(result.FinishedAt)) -} - -func testDiscoveryPersistenceSimulation(t *testing.T, nodes, conns int, adapter adapters.NodeAdapter) map[int][]byte { - persistenceEnabled = true - discoveryEnabled = true - - result, err := discoveryPersistenceSimulation(nodes, conns, adapter) - - if err != nil { - t.Fatalf("Setting up simulation failed: %v", err) - } - if result.Error != nil { - t.Fatalf("Simulation failed: %s", result.Error) - } - t.Logf("Simulation with %d nodes passed in %s", nodes, result.FinishedAt.Sub(result.StartedAt)) - // set the discovery and persistence flags again to default so other - // tests will not be affected - discoveryEnabled = true - persistenceEnabled = false - return nil -} - -func benchmarkDiscovery(b *testing.B, nodes, conns int) { - for i := 0; i < b.N; i++ { - result, err := discoverySimulation(nodes, conns, adapters.NewSimAdapter(services)) - if err != nil { - b.Fatalf("setting up simulation failed: %v", err) - } - if result.Error != nil { - b.Logf("simulation failed: %s", result.Error) - } - } -} - -func discoverySimulation(nodes, conns int, adapter adapters.NodeAdapter) (*simulations.StepResult, error) { - // create network - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: serviceName, - }) - defer net.Shutdown() - trigger := make(chan enode.ID) - ids := make([]enode.ID, nodes) - for i := 0; i < nodes; i++ { - conf := adapters.RandomNodeConfig() - node, err := net.NewNodeWithConfig(conf) - if err != nil { - return nil, fmt.Errorf("error starting node: %s", err) - } - if err := net.Start(node.ID()); err != nil { - return nil, fmt.Errorf("error starting node %s: %s", node.ID().TerminalString(), err) - } - if err := triggerChecks(trigger, net, node.ID()); err != nil { - return nil, fmt.Errorf("error triggering checks for node %s: %s", node.ID().TerminalString(), err) - } - ids[i] = node.ID() - } - - // run a simulation which connects the 10 nodes in a ring and waits - // for full peer discovery - var addrs [][]byte - action := func(ctx context.Context) error { - return nil - } - for i := range ids { - // collect the overlay addresses, to - addrs = append(addrs, ids[i].Bytes()) - } - err := net.ConnectNodesChain(nil) - if err != nil { - return nil, err - } - log.Debug(fmt.Sprintf("nodes: %v", len(addrs))) - // construct the peer pot, so that kademlia health can be checked - ppmap := network.NewPeerPotMap(network.NewKadParams().NeighbourhoodSize, addrs) - check := func(ctx context.Context, id enode.ID) (bool, error) { - select { - case <-ctx.Done(): - return false, ctx.Err() - default: - } - - node := net.GetNode(id) - if node == nil { - return false, fmt.Errorf("unknown node: %s", id) - } - client, err := node.Client() - if err != nil { - return false, fmt.Errorf("error getting node client: %s", err) - } - - healthy := &network.Health{} - if err := client.Call(&healthy, "hive_getHealthInfo", ppmap[common.Bytes2Hex(id.Bytes())]); err != nil { - return false, fmt.Errorf("error getting node health: %s", err) - } - log.Debug(fmt.Sprintf("node %4s healthy: connected nearest neighbours: %v, know nearest neighbours: %v,\n\n%v", id, healthy.ConnectNN, healthy.KnowNN, healthy.Hive)) - return healthy.KnowNN && healthy.ConnectNN, nil - } - - // 64 nodes ~ 1min - // 128 nodes ~ - timeout := 300 * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - result := simulations.NewSimulation(net).Run(ctx, &simulations.Step{ - Action: action, - Trigger: trigger, - Expect: &simulations.Expectation{ - Nodes: ids, - Check: check, - }, - }) - if result.Error != nil { - return result, nil - } - return result, nil -} - -func discoveryPersistenceSimulation(nodes, conns int, adapter adapters.NodeAdapter) (*simulations.StepResult, error) { - cleanDbStores() - defer cleanDbStores() - - // create network - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: serviceName, - }) - defer net.Shutdown() - trigger := make(chan enode.ID) - ids := make([]enode.ID, nodes) - var addrs [][]byte - - for i := 0; i < nodes; i++ { - conf := adapters.RandomNodeConfig() - node, err := net.NewNodeWithConfig(conf) - if err != nil { - panic(err) - } - if err != nil { - return nil, fmt.Errorf("error starting node: %s", err) - } - if err := net.Start(node.ID()); err != nil { - return nil, fmt.Errorf("error starting node %s: %s", node.ID().TerminalString(), err) - } - if err := triggerChecks(trigger, net, node.ID()); err != nil { - return nil, fmt.Errorf("error triggering checks for node %s: %s", node.ID().TerminalString(), err) - } - // TODO we shouldn't be equating underaddr and overaddr like this, as they are not the same in production - ids[i] = node.ID() - a := ids[i].Bytes() - - addrs = append(addrs, a) - } - - // run a simulation which connects the 10 nodes in a ring and waits - // for full peer discovery - - var restartTime time.Time - - action := func(ctx context.Context) error { - ticker := time.NewTicker(500 * time.Millisecond) - - for range ticker.C { - isHealthy := true - for _, id := range ids { - //call Healthy RPC - node := net.GetNode(id) - if node == nil { - return fmt.Errorf("unknown node: %s", id) - } - client, err := node.Client() - if err != nil { - return fmt.Errorf("error getting node client: %s", err) - } - healthy := &network.Health{} - addr := id.String() - ppmap := network.NewPeerPotMap(network.NewKadParams().NeighbourhoodSize, addrs) - if err := client.Call(&healthy, "hive_getHealthInfo", ppmap[common.Bytes2Hex(id.Bytes())]); err != nil { - return fmt.Errorf("error getting node health: %s", err) - } - - log.Info(fmt.Sprintf("NODE: %s, IS HEALTHY: %t", addr, healthy.ConnectNN && healthy.KnowNN && healthy.CountKnowNN > 0)) - var nodeStr string - if err := client.Call(&nodeStr, "hive_string"); err != nil { - return fmt.Errorf("error getting node string %s", err) - } - log.Info(nodeStr) - if !healthy.ConnectNN || healthy.CountKnowNN == 0 { - isHealthy = false - break - } - } - if isHealthy { - break - } - } - ticker.Stop() - - log.Info("reached healthy kademlia. starting to shutdown nodes.") - shutdownStarted := time.Now() - // stop all ids, then start them again - for _, id := range ids { - node := net.GetNode(id) - - if err := net.Stop(node.ID()); err != nil { - return fmt.Errorf("error stopping node %s: %s", node.ID().TerminalString(), err) - } - } - log.Info(fmt.Sprintf("shutting down nodes took: %s", time.Since(shutdownStarted))) - persistenceEnabled = true - discoveryEnabled = false - restartTime = time.Now() - for _, id := range ids { - node := net.GetNode(id) - if err := net.Start(node.ID()); err != nil { - return fmt.Errorf("error starting node %s: %s", node.ID().TerminalString(), err) - } - if err := triggerChecks(trigger, net, node.ID()); err != nil { - return fmt.Errorf("error triggering checks for node %s: %s", node.ID().TerminalString(), err) - } - } - - log.Info(fmt.Sprintf("restarting nodes took: %s", time.Since(restartTime))) - - return nil - } - net.ConnectNodesChain(nil) - log.Debug(fmt.Sprintf("nodes: %v", len(addrs))) - // construct the peer pot, so that kademlia health can be checked - check := func(ctx context.Context, id enode.ID) (bool, error) { - select { - case <-ctx.Done(): - return false, ctx.Err() - default: - } - - node := net.GetNode(id) - if node == nil { - return false, fmt.Errorf("unknown node: %s", id) - } - client, err := node.Client() - if err != nil { - return false, fmt.Errorf("error getting node client: %s", err) - } - healthy := &network.Health{} - ppmap := network.NewPeerPotMap(network.NewKadParams().NeighbourhoodSize, addrs) - - if err := client.Call(&healthy, "hive_getHealthInfo", ppmap[common.Bytes2Hex(id.Bytes())]); err != nil { - return false, fmt.Errorf("error getting node health: %s", err) - } - log.Info(fmt.Sprintf("node %4s healthy: got nearest neighbours: %v, know nearest neighbours: %v", id, healthy.ConnectNN, healthy.KnowNN)) - - return healthy.KnowNN && healthy.ConnectNN, nil - } - - // 64 nodes ~ 1min - // 128 nodes ~ - timeout := 300 * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - result := simulations.NewSimulation(net).Run(ctx, &simulations.Step{ - Action: action, - Trigger: trigger, - Expect: &simulations.Expectation{ - Nodes: ids, - Check: check, - }, - }) - if result.Error != nil { - return result, nil - } - - return result, nil -} - -// triggerChecks triggers a simulation step check whenever a peer is added or -// removed from the given node, and also every second to avoid a race between -// peer events and kademlia becoming healthy -func triggerChecks(trigger chan enode.ID, net *simulations.Network, id enode.ID) error { - node := net.GetNode(id) - if node == nil { - return fmt.Errorf("unknown node: %s", id) - } - client, err := node.Client() - if err != nil { - return err - } - events := make(chan *p2p.PeerEvent) - sub, err := client.Subscribe(context.Background(), "admin", events, "peerEvents") - if err != nil { - return fmt.Errorf("error getting peer events for node %v: %s", id, err) - } - go func() { - defer sub.Unsubscribe() - - tick := time.NewTicker(time.Second) - defer tick.Stop() - - for { - select { - case <-events: - trigger <- id - case <-tick.C: - trigger <- id - case err := <-sub.Err(): - if err != nil { - log.Error(fmt.Sprintf("error getting peer events for node %v", id), "err", err) - } - return - } - } - }() - return nil -} - -func newService(ctx *adapters.ServiceContext) (node.Service, error) { - addr := network.NewAddr(ctx.Config.Node()) - - kp := network.NewKadParams() - kp.NeighbourhoodSize = testNeighbourhoodSize - - if ctx.Config.Reachable != nil { - kp.Reachable = func(o *network.BzzAddr) bool { - return ctx.Config.Reachable(o.ID()) - } - } - kad := network.NewKademlia(addr.Over(), kp) - hp := network.NewHiveParams() - hp.KeepAliveInterval = time.Duration(200) * time.Millisecond - hp.Discovery = discoveryEnabled - - log.Info(fmt.Sprintf("discovery for nodeID %s is %t", ctx.Config.ID.String(), hp.Discovery)) - - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - - if persistenceEnabled { - log.Info(fmt.Sprintf("persistence enabled for nodeID %s", ctx.Config.ID.String())) - store, err := getDbStore(ctx.Config.ID.String()) - if err != nil { - return nil, err - } - return network.NewBzz(config, kad, store, nil, nil), nil - } - - return network.NewBzz(config, kad, nil, nil, nil), nil -} diff --git a/swarm/network/simulations/discovery/snapshot.json b/swarm/network/simulations/discovery/snapshot.json deleted file mode 100755 index f7f400eb67a2..000000000000 --- a/swarm/network/simulations/discovery/snapshot.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}},{"node":{"config":null,"up":false}}],"conns":[{"one":"c04a0c47cb0c522ecf28d8841e93721e73f58790b30e92382816a4b453be2988","other":"d9283e5247a18d6564b3581217e9f4d9c93a4359944894c00bb2b22c690faadc","up":true},{"one":"dd99c11abe2abae112d64d902b96fe0c75243ea67eca759a2769058a30cc0e77","other":"c04a0c47cb0c522ecf28d8841e93721e73f58790b30e92382816a4b453be2988","up":true},{"one":"4f5dad2aa4f26ac5a23d4fbcc807296b474eab77761db6594debd60ef4287aed","other":"dd99c11abe2abae112d64d902b96fe0c75243ea67eca759a2769058a30cc0e77","up":true},{"one":"4f47f4e176d1c9f78d9a7e19723689ffe2a0603004a3d4506a2349e55a56fc17","other":"4f5dad2aa4f26ac5a23d4fbcc807296b474eab77761db6594debd60ef4287aed","up":true},{"one":"20b6a1be2cb8f966151682350e029d4f8da8ee92de10a2a1cb1727d110acebfa","other":"4f47f4e176d1c9f78d9a7e19723689ffe2a0603004a3d4506a2349e55a56fc17","up":true},{"one":"50cb92e77710582fa9cbee7a54cf25c95fd27d8d54b13ba5520a50139c309a22","other":"20b6a1be2cb8f966151682350e029d4f8da8ee92de10a2a1cb1727d110acebfa","up":true},{"one":"319dc901f99940f1339c540bc36fbabb10a96d326b13b9d7f53e7496980e2996","other":"50cb92e77710582fa9cbee7a54cf25c95fd27d8d54b13ba5520a50139c309a22","up":true},{"one":"dc285b6436a8bfd4d2e586d478b18d3fe7b705ce0b4fb27a651adcf6d27984f1","other":"319dc901f99940f1339c540bc36fbabb10a96d326b13b9d7f53e7496980e2996","up":true},{"one":"974dbe511377280f945a53a194b4bb397875b10b1ecb119a92425bbb16db68f1","other":"dc285b6436a8bfd4d2e586d478b18d3fe7b705ce0b4fb27a651adcf6d27984f1","up":true},{"one":"d9283e5247a18d6564b3581217e9f4d9c93a4359944894c00bb2b22c690faadc","other":"974dbe511377280f945a53a194b4bb397875b10b1ecb119a92425bbb16db68f1","up":true}]} \ No newline at end of file diff --git a/swarm/network/simulations/overlay.go b/swarm/network/simulations/overlay.go deleted file mode 100644 index 63938809e4f3..000000000000 --- a/swarm/network/simulations/overlay.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// You can run this simulation using -// -// go run ./swarm/network/simulations/overlay.go -package main - -import ( - "flag" - "fmt" - "net/http" - "runtime" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/state" - colorable "github.com/mattn/go-colorable" -) - -var ( - noDiscovery = flag.Bool("no-discovery", false, "disable discovery (useful if you want to load a snapshot)") - vmodule = flag.String("vmodule", "", "log filters for logger via Vmodule") - verbosity = flag.Int("verbosity", 0, "log filters for logger via Vmodule") - httpSimPort = 8888 -) - -func init() { - flag.Parse() - //initialize the logger - //this is a demonstration on how to use Vmodule for filtering logs - //provide -vmodule as param, and comma-separated values, e.g.: - //-vmodule overlay_test.go=4,simulations=3 - //above examples sets overlay_test.go logs to level 4, while packages ending with "simulations" to 3 - if *vmodule != "" { - //only enable the pattern matching handler if the flag has been provided - glogger := log.NewGlogHandler(log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true))) - if *verbosity > 0 { - glogger.Verbosity(log.Lvl(*verbosity)) - } - glogger.Vmodule(*vmodule) - log.Root().SetHandler(glogger) - } -} - -type Simulation struct { - mtx sync.Mutex - stores map[enode.ID]state.Store -} - -func NewSimulation() *Simulation { - return &Simulation{ - stores: make(map[enode.ID]state.Store), - } -} - -func (s *Simulation) NewService(ctx *adapters.ServiceContext) (node.Service, error) { - node := ctx.Config.Node() - s.mtx.Lock() - store, ok := s.stores[node.ID()] - if !ok { - store = state.NewInmemoryStore() - s.stores[node.ID()] = store - } - s.mtx.Unlock() - - addr := network.NewAddr(node) - - kp := network.NewKadParams() - kp.NeighbourhoodSize = 2 - kp.MaxBinSize = 4 - kp.MinBinSize = 1 - kp.MaxRetries = 1000 - kp.RetryExponent = 2 - kp.RetryInterval = 1000000 - kad := network.NewKademlia(addr.Over(), kp) - hp := network.NewHiveParams() - hp.Discovery = !*noDiscovery - hp.KeepAliveInterval = 300 * time.Millisecond - - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - - return network.NewBzz(config, kad, store, nil, nil), nil -} - -//create the simulation network -func newSimulationNetwork() *simulations.Network { - - s := NewSimulation() - services := adapters.Services{ - "overlay": s.NewService, - } - adapter := adapters.NewSimAdapter(services) - simNetwork := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - DefaultService: "overlay", - }) - return simNetwork -} - -//return a new http server -func newOverlaySim(sim *simulations.Network) *simulations.Server { - return simulations.NewServer(sim) -} - -// var server -func main() { - //cpu optimization - runtime.GOMAXPROCS(runtime.NumCPU()) - //run the sim - runOverlaySim() -} - -func runOverlaySim() { - //create the simulation network - net := newSimulationNetwork() - //create a http server with it - sim := newOverlaySim(net) - log.Info(fmt.Sprintf("starting simulation server on 0.0.0.0:%d...", httpSimPort)) - //start the HTTP server - http.ListenAndServe(fmt.Sprintf(":%d", httpSimPort), sim) -} diff --git a/swarm/network/simulations/overlay_test.go b/swarm/network/simulations/overlay_test.go deleted file mode 100644 index 41ed5ed265bd..000000000000 --- a/swarm/network/simulations/overlay_test.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package main - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "net/http/httptest" - "net/url" - "testing" - "time" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/swarm/log" -) - -var ( - nodeCount = 10 -) - -//This test is used to test the overlay simulation. -//As the simulation is executed via a main, it is easily missed on changes -//An automated test will prevent that -//The test just connects to the simulations, starts the network, -//starts the mocker, gets the number of nodes, and stops it again. -//It also provides a documentation on the steps needed by frontends -//to use the simulations -func TestOverlaySim(t *testing.T) { - t.Skip("Test is flaky, see: https://github.com/ethersphere/go-ethereum/issues/592") - //start the simulation - log.Info("Start simulation backend") - //get the simulation networ; needed to subscribe for up events - net := newSimulationNetwork() - //create the overlay simulation - sim := newOverlaySim(net) - //create a http test server with it - srv := httptest.NewServer(sim) - defer srv.Close() - - log.Debug("Http simulation server started. Start simulation network") - //start the simulation network (initialization of simulation) - resp, err := http.Post(srv.URL+"/start", "application/json", nil) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("Expected Status Code %d, got %d", http.StatusOK, resp.StatusCode) - } - - log.Debug("Start mocker") - //start the mocker, needs a node count and an ID - resp, err = http.PostForm(srv.URL+"/mocker/start", - url.Values{ - "node-count": {fmt.Sprintf("%d", nodeCount)}, - "mocker-type": {simulations.GetMockerList()[0]}, - }) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - reason, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - t.Fatalf("Expected Status Code %d, got %d, response body %s", http.StatusOK, resp.StatusCode, string(reason)) - } - - //variables needed to wait for nodes being up - var upCount int - trigger := make(chan enode.ID) - - //wait for all nodes to be up - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - //start watching node up events... - go watchSimEvents(net, ctx, trigger) - - //...and wait until all expected up events (nodeCount) have been received -LOOP: - for { - select { - case <-trigger: - //new node up event received, increase counter - upCount++ - //all expected node up events received - if upCount == nodeCount { - break LOOP - } - case <-ctx.Done(): - t.Fatalf("Timed out waiting for up events") - } - - } - - //at this point we can query the server - log.Info("Get number of nodes") - //get the number of nodes - resp, err = http.Get(srv.URL + "/nodes") - if err != nil { - t.Fatal(err) - } - - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatal(err) - } - - //unmarshal number of nodes from JSON response - var nodesArr []simulations.Node - err = json.Unmarshal(b, &nodesArr) - if err != nil { - t.Fatal(err) - } - - //check if number of nodes received is same as sent - if len(nodesArr) != nodeCount { - t.Fatal(fmt.Errorf("Expected %d number of nodes, got %d", nodeCount, len(nodesArr))) - } - - //need to let it run for a little while, otherwise stopping it immediately can crash due running nodes - //wanting to connect to already stopped nodes - time.Sleep(1 * time.Second) - - log.Info("Stop the network") - //stop the network - resp, err = http.Post(srv.URL+"/stop", "application/json", nil) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } - - log.Info("Reset the network") - //reset the network (removes all nodes and connections) - resp, err = http.Post(srv.URL+"/reset", "application/json", nil) - if err != nil { - t.Fatal(err) - } - defer resp.Body.Close() - if resp.StatusCode != http.StatusOK { - t.Fatalf("err %s", resp.Status) - } -} - -//watch for events so we know when all nodes are up -func watchSimEvents(net *simulations.Network, ctx context.Context, trigger chan enode.ID) { - events := make(chan *simulations.Event) - sub := net.Events().Subscribe(events) - defer sub.Unsubscribe() - - for { - select { - case ev := <-events: - //only catch node up events - if ev.Type == simulations.EventTypeNode { - if ev.Node.Up() { - log.Debug("got node up event", "event", ev, "node", ev.Node.Config.ID) - select { - case trigger <- ev.Node.Config.ID: - case <-ctx.Done(): - return - } - } - } - case <-ctx.Done(): - return - } - } -} diff --git a/swarm/network/stream/common_test.go b/swarm/network/stream/common_test.go deleted file mode 100644 index afd08d275498..000000000000 --- a/swarm/network/stream/common_test.go +++ /dev/null @@ -1,373 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "errors" - "flag" - "fmt" - "io" - "io/ioutil" - "math/rand" - "os" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - mockmem "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" - "github.com/ethereum/go-ethereum/swarm/testutil" - colorable "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") - nodes = flag.Int("nodes", 0, "number of nodes") - chunks = flag.Int("chunks", 0, "number of chunks") - useMockStore = flag.Bool("mockstore", false, "disabled mock store (default: enabled)") - longrunning = flag.Bool("longrunning", false, "do run long-running tests") - - bucketKeyDB = simulation.BucketKey("db") - bucketKeyStore = simulation.BucketKey("store") - bucketKeyFileStore = simulation.BucketKey("filestore") - bucketKeyNetStore = simulation.BucketKey("netstore") - bucketKeyDelivery = simulation.BucketKey("delivery") - bucketKeyRegistry = simulation.BucketKey("registry") - - chunkSize = 4096 - pof = network.Pof -) - -func init() { - flag.Parse() - rand.Seed(time.Now().UnixNano()) - - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -// newNetStoreAndDelivery is a default constructor for BzzAddr, NetStore and Delivery, used in Simulations -func newNetStoreAndDelivery(ctx *adapters.ServiceContext, bucket *sync.Map) (*network.BzzAddr, *storage.NetStore, *Delivery, func(), error) { - addr := network.NewAddr(ctx.Config.Node()) - - netStore, delivery, cleanup, err := netStoreAndDeliveryWithAddr(ctx, bucket, addr) - if err != nil { - return nil, nil, nil, nil, err - } - - netStore.NewNetFetcherFunc = network.NewFetcherFactory(delivery.RequestFromPeers, true).New - - return addr, netStore, delivery, cleanup, nil -} - -// newNetStoreAndDeliveryWithBzzAddr is a constructor for NetStore and Delivery, used in Simulations, accepting any BzzAddr -func newNetStoreAndDeliveryWithBzzAddr(ctx *adapters.ServiceContext, bucket *sync.Map, addr *network.BzzAddr) (*storage.NetStore, *Delivery, func(), error) { - netStore, delivery, cleanup, err := netStoreAndDeliveryWithAddr(ctx, bucket, addr) - if err != nil { - return nil, nil, nil, err - } - - netStore.NewNetFetcherFunc = network.NewFetcherFactory(delivery.RequestFromPeers, true).New - - return netStore, delivery, cleanup, nil -} - -// newNetStoreAndDeliveryWithRequestFunc is a constructor for NetStore and Delivery, used in Simulations, accepting any NetStore.RequestFunc -func newNetStoreAndDeliveryWithRequestFunc(ctx *adapters.ServiceContext, bucket *sync.Map, rf network.RequestFunc) (*network.BzzAddr, *storage.NetStore, *Delivery, func(), error) { - addr := network.NewAddr(ctx.Config.Node()) - - netStore, delivery, cleanup, err := netStoreAndDeliveryWithAddr(ctx, bucket, addr) - if err != nil { - return nil, nil, nil, nil, err - } - - netStore.NewNetFetcherFunc = network.NewFetcherFactory(rf, true).New - - return addr, netStore, delivery, cleanup, nil -} - -func netStoreAndDeliveryWithAddr(ctx *adapters.ServiceContext, bucket *sync.Map, addr *network.BzzAddr) (*storage.NetStore, *Delivery, func(), error) { - n := ctx.Config.Node() - - store, datadir, err := createTestLocalStorageForID(n.ID(), addr) - if *useMockStore { - store, datadir, err = createMockStore(mockmem.NewGlobalStore(), n.ID(), addr) - } - if err != nil { - return nil, nil, nil, err - } - localStore := store.(*storage.LocalStore) - netStore, err := storage.NewNetStore(localStore, nil) - if err != nil { - return nil, nil, nil, err - } - - fileStore := storage.NewFileStore(netStore, storage.NewFileStoreParams()) - - kad := network.NewKademlia(addr.Over(), network.NewKadParams()) - delivery := NewDelivery(kad, netStore) - - bucket.Store(bucketKeyStore, store) - bucket.Store(bucketKeyDB, netStore) - bucket.Store(bucketKeyDelivery, delivery) - bucket.Store(bucketKeyFileStore, fileStore) - - cleanup := func() { - netStore.Close() - os.RemoveAll(datadir) - } - - return netStore, delivery, cleanup, nil -} - -func newStreamerTester(registryOptions *RegistryOptions) (*p2ptest.ProtocolTester, *Registry, *storage.LocalStore, func(), error) { - // setup - addr := network.RandomAddr() // tested peers peer address - to := network.NewKademlia(addr.OAddr, network.NewKadParams()) - - // temp datadir - datadir, err := ioutil.TempDir("", "streamer") - if err != nil { - return nil, nil, nil, nil, err - } - removeDataDir := func() { - os.RemoveAll(datadir) - } - - params := storage.NewDefaultLocalStoreParams() - params.Init(datadir) - params.BaseKey = addr.Over() - - localStore, err := storage.NewTestLocalStoreForAddr(params) - if err != nil { - removeDataDir() - return nil, nil, nil, nil, err - } - - netStore, err := storage.NewNetStore(localStore, nil) - if err != nil { - removeDataDir() - return nil, nil, nil, nil, err - } - - delivery := NewDelivery(to, netStore) - netStore.NewNetFetcherFunc = network.NewFetcherFactory(delivery.RequestFromPeers, true).New - streamer := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), registryOptions, nil) - teardown := func() { - streamer.Close() - removeDataDir() - } - protocolTester := p2ptest.NewProtocolTester(addr.ID(), 1, streamer.runProtocol) - - err = waitForPeers(streamer, 10*time.Second, 1) - if err != nil { - teardown() - return nil, nil, nil, nil, errors.New("timeout: peer is not created") - } - - return protocolTester, streamer, localStore, teardown, nil -} - -func waitForPeers(streamer *Registry, timeout time.Duration, expectedPeers int) error { - ticker := time.NewTicker(10 * time.Millisecond) - timeoutTimer := time.NewTimer(timeout) - for { - select { - case <-ticker.C: - if streamer.peersCount() >= expectedPeers { - return nil - } - case <-timeoutTimer.C: - return errors.New("timeout") - } - } -} - -type roundRobinStore struct { - index uint32 - stores []storage.ChunkStore -} - -func newRoundRobinStore(stores ...storage.ChunkStore) *roundRobinStore { - return &roundRobinStore{ - stores: stores, - } -} - -// not used in this context, only to fulfill ChunkStore interface -func (rrs *roundRobinStore) Has(ctx context.Context, addr storage.Address) bool { - panic("RoundRobinStor doesn't support HasChunk") -} - -func (rrs *roundRobinStore) Get(ctx context.Context, addr storage.Address) (storage.Chunk, error) { - return nil, errors.New("get not well defined on round robin store") -} - -func (rrs *roundRobinStore) Put(ctx context.Context, chunk storage.Chunk) error { - i := atomic.AddUint32(&rrs.index, 1) - idx := int(i) % len(rrs.stores) - return rrs.stores[idx].Put(ctx, chunk) -} - -func (rrs *roundRobinStore) Close() { - for _, store := range rrs.stores { - store.Close() - } -} - -func readAll(fileStore *storage.FileStore, hash []byte) (int64, error) { - r, _ := fileStore.Retrieve(context.TODO(), hash) - buf := make([]byte, 1024) - var n int - var total int64 - var err error - for (total == 0 || n > 0) && err == nil { - n, err = r.ReadAt(buf, total) - total += int64(n) - } - if err != nil && err != io.EOF { - return total, err - } - return total, nil -} - -func uploadFilesToNodes(sim *simulation.Simulation) ([]storage.Address, []string, error) { - nodes := sim.UpNodeIDs() - nodeCnt := len(nodes) - log.Debug(fmt.Sprintf("Uploading %d files to nodes", nodeCnt)) - //array holding generated files - rfiles := make([]string, nodeCnt) - //array holding the root hashes of the files - rootAddrs := make([]storage.Address, nodeCnt) - - var err error - //for every node, generate a file and upload - for i, id := range nodes { - item, ok := sim.NodeItem(id, bucketKeyFileStore) - if !ok { - return nil, nil, fmt.Errorf("Error accessing localstore") - } - fileStore := item.(*storage.FileStore) - //generate a file - rfiles[i], err = generateRandomFile() - if err != nil { - return nil, nil, err - } - //store it (upload it) on the FileStore - ctx := context.TODO() - rk, wait, err := fileStore.Store(ctx, strings.NewReader(rfiles[i]), int64(len(rfiles[i])), false) - log.Debug("Uploaded random string file to node") - if err != nil { - return nil, nil, err - } - err = wait(ctx) - if err != nil { - return nil, nil, err - } - rootAddrs[i] = rk - } - return rootAddrs, rfiles, nil -} - -//generate a random file (string) -func generateRandomFile() (string, error) { - //generate a random file size between minFileSize and maxFileSize - fileSize := rand.Intn(maxFileSize-minFileSize) + minFileSize - log.Debug(fmt.Sprintf("Generated file with filesize %d kB", fileSize)) - b := testutil.RandomBytes(1, fileSize*1024) - return string(b), nil -} - -//create a local store for the given node -func createTestLocalStorageForID(id enode.ID, addr *network.BzzAddr) (storage.ChunkStore, string, error) { - var datadir string - var err error - datadir, err = ioutil.TempDir("", fmt.Sprintf("syncer-test-%s", id.TerminalString())) - if err != nil { - return nil, "", err - } - var store storage.ChunkStore - params := storage.NewDefaultLocalStoreParams() - params.ChunkDbPath = datadir - params.BaseKey = addr.Over() - store, err = storage.NewTestLocalStoreForAddr(params) - if err != nil { - os.RemoveAll(datadir) - return nil, "", err - } - return store, datadir, nil -} - -// watchDisconnections receives simulation peer events in a new goroutine and sets atomic value -// disconnected to true in case of a disconnect event. -func watchDisconnections(ctx context.Context, sim *simulation.Simulation) (disconnected *boolean) { - log.Debug("Watching for disconnections") - disconnections := sim.PeerEvents( - ctx, - sim.NodeIDs(), - simulation.NewPeerEventsFilter().Drop(), - ) - disconnected = new(boolean) - go func() { - for { - select { - case <-ctx.Done(): - return - case d := <-disconnections: - if d.Error != nil { - log.Error("peer drop event error", "node", d.NodeID, "peer", d.PeerID, "err", d.Error) - } else { - log.Error("peer drop", "node", d.NodeID, "peer", d.PeerID) - } - disconnected.set(true) - } - } - }() - return disconnected -} - -// boolean is used to concurrently set -// and read a boolean value. -type boolean struct { - v bool - mu sync.RWMutex -} - -// set sets the value. -func (b *boolean) set(v bool) { - b.mu.Lock() - defer b.mu.Unlock() - - b.v = v -} - -// bool reads the value. -func (b *boolean) bool() bool { - b.mu.RLock() - defer b.mu.RUnlock() - - return b.v -} diff --git a/swarm/network/stream/delivery.go b/swarm/network/stream/delivery.go deleted file mode 100644 index fae6994f0c01..000000000000 --- a/swarm/network/stream/delivery.go +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/storage" - opentracing "github.com/opentracing/opentracing-go" -) - -const ( - swarmChunkServerStreamName = "RETRIEVE_REQUEST" - deliveryCap = 32 -) - -var ( - processReceivedChunksCount = metrics.NewRegisteredCounter("network.stream.received_chunks.count", nil) - handleRetrieveRequestMsgCount = metrics.NewRegisteredCounter("network.stream.handle_retrieve_request_msg.count", nil) - retrieveChunkFail = metrics.NewRegisteredCounter("network.stream.retrieve_chunks_fail.count", nil) - - requestFromPeersCount = metrics.NewRegisteredCounter("network.stream.request_from_peers.count", nil) - requestFromPeersEachCount = metrics.NewRegisteredCounter("network.stream.request_from_peers_each.count", nil) -) - -type Delivery struct { - chunkStore storage.SyncChunkStore - kad *network.Kademlia - getPeer func(enode.ID) *Peer -} - -func NewDelivery(kad *network.Kademlia, chunkStore storage.SyncChunkStore) *Delivery { - return &Delivery{ - chunkStore: chunkStore, - kad: kad, - } -} - -// SwarmChunkServer implements Server -type SwarmChunkServer struct { - deliveryC chan []byte - batchC chan []byte - chunkStore storage.ChunkStore - currentLen uint64 - quit chan struct{} -} - -// NewSwarmChunkServer is SwarmChunkServer constructor -func NewSwarmChunkServer(chunkStore storage.ChunkStore) *SwarmChunkServer { - s := &SwarmChunkServer{ - deliveryC: make(chan []byte, deliveryCap), - batchC: make(chan []byte), - chunkStore: chunkStore, - quit: make(chan struct{}), - } - go s.processDeliveries() - return s -} - -// processDeliveries handles delivered chunk hashes -func (s *SwarmChunkServer) processDeliveries() { - var hashes []byte - var batchC chan []byte - for { - select { - case <-s.quit: - return - case hash := <-s.deliveryC: - hashes = append(hashes, hash...) - batchC = s.batchC - case batchC <- hashes: - hashes = nil - batchC = nil - } - } -} - -// SessionIndex returns zero in all cases for SwarmChunkServer. -func (s *SwarmChunkServer) SessionIndex() (uint64, error) { - return 0, nil -} - -// SetNextBatch -func (s *SwarmChunkServer) SetNextBatch(_, _ uint64) (hashes []byte, from uint64, to uint64, proof *HandoverProof, err error) { - select { - case hashes = <-s.batchC: - case <-s.quit: - return - } - - from = s.currentLen - s.currentLen += uint64(len(hashes)) - to = s.currentLen - return -} - -// Close needs to be called on a stream server -func (s *SwarmChunkServer) Close() { - close(s.quit) -} - -// GetData retrives chunk data from db store -func (s *SwarmChunkServer) GetData(ctx context.Context, key []byte) ([]byte, error) { - chunk, err := s.chunkStore.Get(ctx, storage.Address(key)) - if err != nil { - return nil, err - } - return chunk.Data(), nil -} - -// RetrieveRequestMsg is the protocol msg for chunk retrieve requests -type RetrieveRequestMsg struct { - Addr storage.Address - SkipCheck bool - HopCount uint8 -} - -func (d *Delivery) handleRetrieveRequestMsg(ctx context.Context, sp *Peer, req *RetrieveRequestMsg) error { - log.Trace("received request", "peer", sp.ID(), "hash", req.Addr) - handleRetrieveRequestMsgCount.Inc(1) - - var osp opentracing.Span - ctx, osp = spancontext.StartSpan( - ctx, - "retrieve.request") - - s, err := sp.getServer(NewStream(swarmChunkServerStreamName, "", true)) - if err != nil { - return err - } - streamer := s.Server.(*SwarmChunkServer) - - var cancel func() - // TODO: do something with this hardcoded timeout, maybe use TTL in the future - ctx = context.WithValue(ctx, "peer", sp.ID().String()) - ctx = context.WithValue(ctx, "hopcount", req.HopCount) - ctx, cancel = context.WithTimeout(ctx, network.RequestTimeout) - - go func() { - select { - case <-ctx.Done(): - case <-streamer.quit: - } - cancel() - }() - - go func() { - defer osp.Finish() - chunk, err := d.chunkStore.Get(ctx, req.Addr) - if err != nil { - retrieveChunkFail.Inc(1) - log.Debug("ChunkStore.Get can not retrieve chunk", "peer", sp.ID().String(), "addr", req.Addr, "hopcount", req.HopCount, "err", err) - return - } - if req.SkipCheck { - syncing := false - err = sp.Deliver(ctx, chunk, s.priority, syncing) - if err != nil { - log.Warn("ERROR in handleRetrieveRequestMsg", "err", err) - } - return - } - select { - case streamer.deliveryC <- chunk.Address()[:]: - case <-streamer.quit: - } - - }() - - return nil -} - -//Chunk delivery always uses the same message type.... -type ChunkDeliveryMsg struct { - Addr storage.Address - SData []byte // the stored chunk Data (incl size) - peer *Peer // set in handleChunkDeliveryMsg -} - -//...but swap accounting needs to disambiguate if it is a delivery for syncing or for retrieval -//as it decides based on message type if it needs to account for this message or not - -//defines a chunk delivery for retrieval (with accounting) -type ChunkDeliveryMsgRetrieval ChunkDeliveryMsg - -//defines a chunk delivery for syncing (without accounting) -type ChunkDeliveryMsgSyncing ChunkDeliveryMsg - -// TODO: Fix context SNAFU -func (d *Delivery) handleChunkDeliveryMsg(ctx context.Context, sp *Peer, req *ChunkDeliveryMsg) error { - var osp opentracing.Span - ctx, osp = spancontext.StartSpan( - ctx, - "chunk.delivery") - - processReceivedChunksCount.Inc(1) - - go func() { - defer osp.Finish() - - req.peer = sp - err := d.chunkStore.Put(ctx, storage.NewChunk(req.Addr, req.SData)) - if err != nil { - if err == storage.ErrChunkInvalid { - // we removed this log because it spams the logs - // TODO: Enable this log line - // log.Warn("invalid chunk delivered", "peer", sp.ID(), "chunk", req.Addr, ) - req.peer.Drop(err) - } - } - }() - return nil -} - -// RequestFromPeers sends a chunk retrieve request to -func (d *Delivery) RequestFromPeers(ctx context.Context, req *network.Request) (*enode.ID, chan struct{}, error) { - requestFromPeersCount.Inc(1) - var sp *Peer - spID := req.Source - - if spID != nil { - sp = d.getPeer(*spID) - if sp == nil { - return nil, nil, fmt.Errorf("source peer %v not found", spID.String()) - } - } else { - d.kad.EachConn(req.Addr[:], 255, func(p *network.Peer, po int) bool { - id := p.ID() - if p.LightNode { - // skip light nodes - return true - } - if req.SkipPeer(id.String()) { - log.Trace("Delivery.RequestFromPeers: skip peer", "peer id", id) - return true - } - sp = d.getPeer(id) - // sp is nil, when we encounter a peer that is not registered for delivery, i.e. doesn't support the `stream` protocol - if sp == nil { - return true - } - spID = &id - return false - }) - if sp == nil { - return nil, nil, errors.New("no peer found") - } - } - - err := sp.SendPriority(ctx, &RetrieveRequestMsg{ - Addr: req.Addr, - SkipCheck: req.SkipCheck, - HopCount: req.HopCount, - }, Top, "request.from.peers") - if err != nil { - return nil, nil, err - } - requestFromPeersEachCount.Inc(1) - - return spID, sp.quit, nil -} diff --git a/swarm/network/stream/delivery_test.go b/swarm/network/stream/delivery_test.go deleted file mode 100644 index 49e4a423a746..000000000000 --- a/swarm/network/stream/delivery_test.go +++ /dev/null @@ -1,734 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "bytes" - "context" - "errors" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - pq "github.com/ethereum/go-ethereum/swarm/network/priorityqueue" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -//Tests initializing a retrieve request -func TestStreamerRetrieveRequest(t *testing.T) { - regOpts := &RegistryOptions{ - Retrieval: RetrievalClientOnly, - Syncing: SyncingDisabled, - } - tester, streamer, _, teardown, err := newStreamerTester(regOpts) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - ctx := context.Background() - req := network.NewRequest( - storage.Address(hash0[:]), - true, - &sync.Map{}, - ) - streamer.delivery.RequestFromPeers(ctx, req) - - stream := NewStream(swarmChunkServerStreamName, "", true) - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "RetrieveRequestMsg", - Expects: []p2ptest.Expect{ - { //start expecting a subscription for RETRIEVE_REQUEST due to `RetrievalClientOnly` - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: nil, - Priority: Top, - }, - Peer: node.ID(), - }, - { //expect a retrieve request message for the given hash - Code: 5, - Msg: &RetrieveRequestMsg{ - Addr: hash0[:], - SkipCheck: true, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } -} - -//Test requesting a chunk from a peer then issuing a "empty" OfferedHashesMsg (no hashes available yet) -//Should time out as the peer does not have the chunk (no syncing happened previously) -func TestStreamerUpstreamRetrieveRequestMsgExchangeWithoutStore(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(&RegistryOptions{ - Retrieval: RetrievalEnabled, - Syncing: SyncingDisabled, //do no syncing - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - chunk := storage.NewChunk(storage.Address(hash0[:]), nil) - - peer := streamer.getPeer(node.ID()) - - stream := NewStream(swarmChunkServerStreamName, "", true) - //simulate pre-subscription to RETRIEVE_REQUEST stream on peer - peer.handleSubscribeMsg(context.TODO(), &SubscribeMsg{ - Stream: stream, - History: nil, - Priority: Top, - }) - - //test the exchange - err = tester.TestExchanges(p2ptest.Exchange{ - Expects: []p2ptest.Expect{ - { //first expect a subscription to the RETRIEVE_REQUEST stream - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: nil, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, p2ptest.Exchange{ - Label: "RetrieveRequestMsg", - Triggers: []p2ptest.Trigger{ - { //then the actual RETRIEVE_REQUEST.... - Code: 5, - Msg: &RetrieveRequestMsg{ - Addr: chunk.Address()[:], - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { //to which the peer responds with offered hashes - Code: 1, - Msg: &OfferedHashesMsg{ - HandoverProof: nil, - Hashes: nil, - From: 0, - To: 0, - }, - Peer: node.ID(), - }, - }, - }) - - //should fail with a timeout as the peer we are requesting - //the chunk from does not have the chunk - expectedError := `exchange #1 "RetrieveRequestMsg": timed out` - if err == nil || err.Error() != expectedError { - t.Fatalf("Expected error %v, got %v", expectedError, err) - } -} - -// upstream request server receives a retrieve Request and responds with -// offered hashes or delivery if skipHash is set to true -func TestStreamerUpstreamRetrieveRequestMsgExchange(t *testing.T) { - tester, streamer, localStore, teardown, err := newStreamerTester(&RegistryOptions{ - Retrieval: RetrievalEnabled, - Syncing: SyncingDisabled, - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - peer := streamer.getPeer(node.ID()) - - stream := NewStream(swarmChunkServerStreamName, "", true) - - peer.handleSubscribeMsg(context.TODO(), &SubscribeMsg{ - Stream: stream, - History: nil, - Priority: Top, - }) - - hash := storage.Address(hash0[:]) - chunk := storage.NewChunk(hash, hash) - err = localStore.Put(context.TODO(), chunk) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Expects: []p2ptest.Expect{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: nil, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, p2ptest.Exchange{ - Label: "RetrieveRequestMsg", - Triggers: []p2ptest.Trigger{ - { - Code: 5, - Msg: &RetrieveRequestMsg{ - Addr: hash, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: hash, - From: 0, - // TODO: why is this 32??? - To: 32, - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - hash = storage.Address(hash1[:]) - chunk = storage.NewChunk(hash, hash1[:]) - err = localStore.Put(context.TODO(), chunk) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "RetrieveRequestMsg", - Triggers: []p2ptest.Trigger{ - { - Code: 5, - Msg: &RetrieveRequestMsg{ - Addr: hash, - SkipCheck: true, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 6, - Msg: &ChunkDeliveryMsg{ - Addr: hash, - SData: hash, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -// if there is one peer in the Kademlia, RequestFromPeers should return it -func TestRequestFromPeers(t *testing.T) { - dummyPeerID := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8") - - addr := network.RandomAddr() - to := network.NewKademlia(addr.OAddr, network.NewKadParams()) - delivery := NewDelivery(to, nil) - protocolsPeer := protocols.NewPeer(p2p.NewPeer(dummyPeerID, "dummy", nil), nil, nil) - peer := network.NewPeer(&network.BzzPeer{ - BzzAddr: network.RandomAddr(), - LightNode: false, - Peer: protocolsPeer, - }, to) - to.On(peer) - r := NewRegistry(addr.ID(), delivery, nil, nil, nil, nil) - - // an empty priorityQueue has to be created to prevent a goroutine being called after the test has finished - sp := &Peer{ - Peer: protocolsPeer, - pq: pq.New(int(PriorityQueue), PriorityQueueCap), - streamer: r, - } - r.setPeer(sp) - req := network.NewRequest( - storage.Address(hash0[:]), - true, - &sync.Map{}, - ) - ctx := context.Background() - id, _, err := delivery.RequestFromPeers(ctx, req) - - if err != nil { - t.Fatal(err) - } - if *id != dummyPeerID { - t.Fatalf("Expected an id, got %v", id) - } -} - -// RequestFromPeers should not return light nodes -func TestRequestFromPeersWithLightNode(t *testing.T) { - dummyPeerID := enode.HexID("3431c3939e1ee2a6345e976a8234f9870152d64879f30bc272a074f6859e75e8") - - addr := network.RandomAddr() - to := network.NewKademlia(addr.OAddr, network.NewKadParams()) - delivery := NewDelivery(to, nil) - - protocolsPeer := protocols.NewPeer(p2p.NewPeer(dummyPeerID, "dummy", nil), nil, nil) - // setting up a lightnode - peer := network.NewPeer(&network.BzzPeer{ - BzzAddr: network.RandomAddr(), - LightNode: true, - Peer: protocolsPeer, - }, to) - to.On(peer) - r := NewRegistry(addr.ID(), delivery, nil, nil, nil, nil) - // an empty priorityQueue has to be created to prevent a goroutine being called after the test has finished - sp := &Peer{ - Peer: protocolsPeer, - pq: pq.New(int(PriorityQueue), PriorityQueueCap), - streamer: r, - } - r.setPeer(sp) - - req := network.NewRequest( - storage.Address(hash0[:]), - true, - &sync.Map{}, - ) - - ctx := context.Background() - // making a request which should return with "no peer found" - _, _, err := delivery.RequestFromPeers(ctx, req) - - expectedError := "no peer found" - if err.Error() != expectedError { - t.Fatalf("expected '%v', got %v", expectedError, err) - } -} - -func TestStreamerDownstreamChunkDeliveryMsgExchange(t *testing.T) { - tester, streamer, localStore, teardown, err := newStreamerTester(&RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingDisabled, - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterClientFunc("foo", func(p *Peer, t string, live bool) (Client, error) { - return &testClient{ - t: t, - }, nil - }) - - node := tester.Nodes[0] - - //subscribe to custom stream - stream := NewStream("foo", "", true) - err = streamer.Subscribe(node.ID(), stream, NewRange(5, 8), Top) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - chunkKey := hash0[:] - chunkData := hash1[:] - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Expects: []p2ptest.Expect{ - { //first expect subscription to the custom stream... - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, - p2ptest.Exchange{ - Label: "ChunkDelivery message", - Triggers: []p2ptest.Trigger{ - { //...then trigger a chunk delivery for the given chunk from peer in order for - //local node to get the chunk delivered - Code: 6, - Msg: &ChunkDeliveryMsg{ - Addr: chunkKey, - SData: chunkData, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) - defer cancel() - - // wait for the chunk to get stored - storedChunk, err := localStore.Get(ctx, chunkKey) - for err != nil { - select { - case <-ctx.Done(): - t.Fatalf("Chunk is not in localstore after timeout, err: %v", err) - default: - } - storedChunk, err = localStore.Get(ctx, chunkKey) - time.Sleep(50 * time.Millisecond) - } - - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - if !bytes.Equal(storedChunk.Data(), chunkData) { - t.Fatal("Retrieved chunk has different data than original") - } - -} - -func TestDeliveryFromNodes(t *testing.T) { - testDeliveryFromNodes(t, 2, dataChunkCount, true) - testDeliveryFromNodes(t, 2, dataChunkCount, false) - testDeliveryFromNodes(t, 4, dataChunkCount, true) - testDeliveryFromNodes(t, 4, dataChunkCount, false) - testDeliveryFromNodes(t, 8, dataChunkCount, true) - testDeliveryFromNodes(t, 8, dataChunkCount, false) - testDeliveryFromNodes(t, 16, dataChunkCount, true) - testDeliveryFromNodes(t, 16, dataChunkCount, false) -} - -func testDeliveryFromNodes(t *testing.T, nodes, chunkCount int, skipCheck bool) { - t.Helper() - t.Run(fmt.Sprintf("testDeliveryFromNodes_%d_%d_skipCheck_%t", nodes, chunkCount, skipCheck), func(t *testing.T) { - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - SkipCheck: skipCheck, - Syncing: SyncingDisabled, - Retrieval: RetrievalEnabled, - }, nil) - bucket.Store(bucketKeyRegistry, r) - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - log.Info("Adding nodes to simulation") - _, err := sim.AddNodesAndConnectChain(nodes) - if err != nil { - t.Fatal(err) - } - - log.Info("Starting simulation") - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - nodeIDs := sim.UpNodeIDs() - //determine the pivot node to be the first node of the simulation - pivot := nodeIDs[0] - - //distribute chunks of a random file into Stores of nodes 1 to nodes - //we will do this by creating a file store with an underlying round-robin store: - //the file store will create a hash for the uploaded file, but every chunk will be - //distributed to different nodes via round-robin scheduling - log.Debug("Writing file to round-robin file store") - //to do this, we create an array for chunkstores (length minus one, the pivot node) - stores := make([]storage.ChunkStore, len(nodeIDs)-1) - //we then need to get all stores from the sim.... - lStores := sim.NodesItems(bucketKeyStore) - i := 0 - //...iterate the buckets... - for id, bucketVal := range lStores { - //...and remove the one which is the pivot node - if id == pivot { - continue - } - //the other ones are added to the array... - stores[i] = bucketVal.(storage.ChunkStore) - i++ - } - //...which then gets passed to the round-robin file store - roundRobinFileStore := storage.NewFileStore(newRoundRobinStore(stores...), storage.NewFileStoreParams()) - //now we can actually upload a (random) file to the round-robin store - size := chunkCount * chunkSize - log.Debug("Storing data to file store") - fileHash, wait, err := roundRobinFileStore.Store(ctx, testutil.RandomReader(1, size), int64(size), false) - // wait until all chunks stored - if err != nil { - return err - } - err = wait(ctx) - if err != nil { - return err - } - - log.Debug("Waiting for kademlia") - // TODO this does not seem to be correct usage of the function, as the simulation may have no kademlias - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - - //get the pivot node's filestore - item, ok := sim.NodeItem(pivot, bucketKeyFileStore) - if !ok { - return fmt.Errorf("No filestore") - } - pivotFileStore := item.(*storage.FileStore) - log.Debug("Starting retrieval routine") - retErrC := make(chan error) - go func() { - // start the retrieval on the pivot node - this will spawn retrieve requests for missing chunks - // we must wait for the peer connections to have started before requesting - n, err := readAll(pivotFileStore, fileHash) - log.Info(fmt.Sprintf("retrieved %v", fileHash), "read", n, "err", err) - retErrC <- err - }() - - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil && disconnected.bool() { - err = errors.New("disconnect events received") - } - }() - - //finally check that the pivot node gets all chunks via the root hash - log.Debug("Check retrieval") - success := true - var total int64 - total, err = readAll(pivotFileStore, fileHash) - if err != nil { - return err - } - log.Info(fmt.Sprintf("check if %08x is available locally: number of bytes read %v/%v (error: %v)", fileHash, total, size, err)) - if err != nil || total != int64(size) { - success = false - } - - if !success { - return fmt.Errorf("Test failed, chunks not available on all nodes") - } - if err := <-retErrC; err != nil { - return fmt.Errorf("requesting chunks: %v", err) - } - log.Debug("Test terminated successfully") - return nil - }) - if result.Error != nil { - t.Fatal(result.Error) - } - }) -} - -func BenchmarkDeliveryFromNodesWithoutCheck(b *testing.B) { - for chunks := 32; chunks <= 128; chunks *= 2 { - for i := 2; i < 32; i *= 2 { - b.Run( - fmt.Sprintf("nodes=%v,chunks=%v", i, chunks), - func(b *testing.B) { - benchmarkDeliveryFromNodes(b, i, chunks, true) - }, - ) - } - } -} - -func BenchmarkDeliveryFromNodesWithCheck(b *testing.B) { - for chunks := 32; chunks <= 128; chunks *= 2 { - for i := 2; i < 32; i *= 2 { - b.Run( - fmt.Sprintf("nodes=%v,chunks=%v", i, chunks), - func(b *testing.B) { - benchmarkDeliveryFromNodes(b, i, chunks, false) - }, - ) - } - } -} - -func benchmarkDeliveryFromNodes(b *testing.B, nodes, chunkCount int, skipCheck bool) { - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - SkipCheck: skipCheck, - Syncing: SyncingDisabled, - Retrieval: RetrievalDisabled, - SyncUpdateDelay: 0, - }, nil) - bucket.Store(bucketKeyRegistry, r) - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - log.Info("Initializing test config") - _, err := sim.AddNodesAndConnectChain(nodes) - if err != nil { - b.Fatal(err) - } - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - nodeIDs := sim.UpNodeIDs() - node := nodeIDs[len(nodeIDs)-1] - - item, ok := sim.NodeItem(node, bucketKeyFileStore) - if !ok { - return errors.New("No filestore") - } - remoteFileStore := item.(*storage.FileStore) - - pivotNode := nodeIDs[0] - item, ok = sim.NodeItem(pivotNode, bucketKeyNetStore) - if !ok { - return errors.New("No filestore") - } - netStore := item.(*storage.NetStore) - - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil && disconnected.bool() { - err = errors.New("disconnect events received") - } - }() - // benchmark loop - b.ResetTimer() - b.StopTimer() - Loop: - for i := 0; i < b.N; i++ { - // uploading chunkCount random chunks to the last node - hashes := make([]storage.Address, chunkCount) - for i := 0; i < chunkCount; i++ { - // create actual size real chunks - ctx := context.TODO() - hash, wait, err := remoteFileStore.Store(ctx, testutil.RandomReader(i, chunkSize), int64(chunkSize), false) - if err != nil { - return fmt.Errorf("store: %v", err) - } - // wait until all chunks stored - err = wait(ctx) - if err != nil { - return fmt.Errorf("wait store: %v", err) - } - // collect the hashes - hashes[i] = hash - } - // now benchmark the actual retrieval - // netstore.Get is called for each hash in a go routine and errors are collected - b.StartTimer() - errs := make(chan error) - for _, hash := range hashes { - go func(h storage.Address) { - _, err := netStore.Get(ctx, h) - log.Warn("test check netstore get", "hash", h, "err", err) - errs <- err - }(hash) - } - // count and report retrieval errors - // if there are misses then chunk timeout is too low for the distance and volume (?) - var total, misses int - for err := range errs { - if err != nil { - log.Warn(err.Error()) - misses++ - } - total++ - if total == chunkCount { - break - } - } - b.StopTimer() - - if misses > 0 { - err = fmt.Errorf("%v chunk not found out of %v", misses, total) - break Loop - } - } - return err - }) - if result.Error != nil { - b.Fatal(result.Error) - } - -} diff --git a/swarm/network/stream/intervals/intervals.go b/swarm/network/stream/intervals/intervals.go deleted file mode 100644 index 562c3df9ae49..000000000000 --- a/swarm/network/stream/intervals/intervals.go +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package intervals - -import ( - "bytes" - "fmt" - "strconv" - "sync" -) - -// Intervals store a list of intervals. Its purpose is to provide -// methods to add new intervals and retrieve missing intervals that -// need to be added. -// It may be used in synchronization of streaming data to persist -// retrieved data ranges between sessions. -type Intervals struct { - start uint64 - ranges [][2]uint64 - mu sync.RWMutex -} - -// New creates a new instance of Intervals. -// Start argument limits the lower bound of intervals. -// No range bellow start bound will be added by Add method or -// returned by Next method. This limit may be used for -// tracking "live" synchronization, where the sync session -// starts from a specific value, and if "live" sync intervals -// need to be merged with historical ones, it can be safely done. -func NewIntervals(start uint64) *Intervals { - return &Intervals{ - start: start, - } -} - -// Add adds a new range to intervals. Range start and end are values -// are both inclusive. -func (i *Intervals) Add(start, end uint64) { - i.mu.Lock() - defer i.mu.Unlock() - - i.add(start, end) -} - -func (i *Intervals) add(start, end uint64) { - if start < i.start { - start = i.start - } - if end < i.start { - return - } - minStartJ := -1 - maxEndJ := -1 - j := 0 - for ; j < len(i.ranges); j++ { - if minStartJ < 0 { - if (start <= i.ranges[j][0] && end+1 >= i.ranges[j][0]) || (start <= i.ranges[j][1]+1 && end+1 >= i.ranges[j][1]) { - if i.ranges[j][0] < start { - start = i.ranges[j][0] - } - minStartJ = j - } - } - if (start <= i.ranges[j][1] && end+1 >= i.ranges[j][1]) || (start <= i.ranges[j][0] && end+1 >= i.ranges[j][0]) { - if i.ranges[j][1] > end { - end = i.ranges[j][1] - } - maxEndJ = j - } - if end+1 <= i.ranges[j][0] { - break - } - } - if minStartJ < 0 && maxEndJ < 0 { - i.ranges = append(i.ranges[:j], append([][2]uint64{{start, end}}, i.ranges[j:]...)...) - return - } - if minStartJ >= 0 { - i.ranges[minStartJ][0] = start - } - if maxEndJ >= 0 { - i.ranges[maxEndJ][1] = end - } - if minStartJ >= 0 && maxEndJ >= 0 && minStartJ != maxEndJ { - i.ranges[maxEndJ][0] = start - i.ranges = append(i.ranges[:minStartJ], i.ranges[maxEndJ:]...) - } -} - -// Merge adds all the intervals from the m Interval to current one. -func (i *Intervals) Merge(m *Intervals) { - m.mu.RLock() - defer m.mu.RUnlock() - i.mu.Lock() - defer i.mu.Unlock() - - for _, r := range m.ranges { - i.add(r[0], r[1]) - } -} - -// Next returns the first range interval that is not fulfilled. Returned -// start and end values are both inclusive, meaning that the whole range -// including start and end need to be added in order to full the gap -// in intervals. -// Returned value for end is 0 if the next interval is after the whole -// range that is stored in Intervals. Zero end value represents no limit -// on the next interval length. -func (i *Intervals) Next() (start, end uint64) { - i.mu.RLock() - defer i.mu.RUnlock() - - l := len(i.ranges) - if l == 0 { - return i.start, 0 - } - if i.ranges[0][0] != i.start { - return i.start, i.ranges[0][0] - 1 - } - if l == 1 { - return i.ranges[0][1] + 1, 0 - } - return i.ranges[0][1] + 1, i.ranges[1][0] - 1 -} - -// Last returns the value that is at the end of the last interval. -func (i *Intervals) Last() (end uint64) { - i.mu.RLock() - defer i.mu.RUnlock() - - l := len(i.ranges) - if l == 0 { - return 0 - } - return i.ranges[l-1][1] -} - -// String returns a descriptive representation of range intervals -// in [] notation, as a list of two element vectors. -func (i *Intervals) String() string { - return fmt.Sprint(i.ranges) -} - -// MarshalBinary encodes Intervals parameters into a semicolon separated list. -// The first element in the list is base36-encoded start value. The following -// elements are two base36-encoded value ranges separated by comma. -func (i *Intervals) MarshalBinary() (data []byte, err error) { - d := make([][]byte, len(i.ranges)+1) - d[0] = []byte(strconv.FormatUint(i.start, 36)) - for j := range i.ranges { - r := i.ranges[j] - d[j+1] = []byte(strconv.FormatUint(r[0], 36) + "," + strconv.FormatUint(r[1], 36)) - } - return bytes.Join(d, []byte(";")), nil -} - -// UnmarshalBinary decodes data according to the Intervals.MarshalBinary format. -func (i *Intervals) UnmarshalBinary(data []byte) (err error) { - d := bytes.Split(data, []byte(";")) - l := len(d) - if l == 0 { - return nil - } - if l >= 1 { - i.start, err = strconv.ParseUint(string(d[0]), 36, 64) - if err != nil { - return err - } - } - if l == 1 { - return nil - } - - i.ranges = make([][2]uint64, 0, l-1) - for j := 1; j < l; j++ { - r := bytes.SplitN(d[j], []byte(","), 2) - if len(r) < 2 { - return fmt.Errorf("range %d has less then 2 elements", j) - } - start, err := strconv.ParseUint(string(r[0]), 36, 64) - if err != nil { - return fmt.Errorf("parsing the first element in range %d: %v", j, err) - } - end, err := strconv.ParseUint(string(r[1]), 36, 64) - if err != nil { - return fmt.Errorf("parsing the second element in range %d: %v", j, err) - } - i.ranges = append(i.ranges, [2]uint64{start, end}) - } - - return nil -} diff --git a/swarm/network/stream/intervals/intervals_test.go b/swarm/network/stream/intervals/intervals_test.go deleted file mode 100644 index b5212f0d917f..000000000000 --- a/swarm/network/stream/intervals/intervals_test.go +++ /dev/null @@ -1,395 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package intervals - -import "testing" - -// Test tests Interval methods Add, Next and Last for various -// initial state. -func Test(t *testing.T) { - for i, tc := range []struct { - startLimit uint64 - initial [][2]uint64 - start uint64 - end uint64 - expected string - nextStart uint64 - nextEnd uint64 - last uint64 - }{ - { - initial: nil, - start: 0, - end: 0, - expected: "[[0 0]]", - nextStart: 1, - nextEnd: 0, - last: 0, - }, - { - initial: nil, - start: 0, - end: 10, - expected: "[[0 10]]", - nextStart: 11, - nextEnd: 0, - last: 10, - }, - { - initial: nil, - start: 5, - end: 15, - expected: "[[5 15]]", - nextStart: 0, - nextEnd: 4, - last: 15, - }, - { - initial: [][2]uint64{{0, 0}}, - start: 0, - end: 0, - expected: "[[0 0]]", - nextStart: 1, - nextEnd: 0, - last: 0, - }, - { - initial: [][2]uint64{{0, 0}}, - start: 5, - end: 15, - expected: "[[0 0] [5 15]]", - nextStart: 1, - nextEnd: 4, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 5, - end: 15, - expected: "[[5 15]]", - nextStart: 0, - nextEnd: 4, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 5, - end: 20, - expected: "[[5 20]]", - nextStart: 0, - nextEnd: 4, - last: 20, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 10, - end: 20, - expected: "[[5 20]]", - nextStart: 0, - nextEnd: 4, - last: 20, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 0, - end: 20, - expected: "[[0 20]]", - nextStart: 21, - nextEnd: 0, - last: 20, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 2, - end: 10, - expected: "[[2 15]]", - nextStart: 0, - nextEnd: 1, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 2, - end: 4, - expected: "[[2 15]]", - nextStart: 0, - nextEnd: 1, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 2, - end: 5, - expected: "[[2 15]]", - nextStart: 0, - nextEnd: 1, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 2, - end: 3, - expected: "[[2 3] [5 15]]", - nextStart: 0, - nextEnd: 1, - last: 15, - }, - { - initial: [][2]uint64{{5, 15}}, - start: 2, - end: 4, - expected: "[[2 15]]", - nextStart: 0, - nextEnd: 1, - last: 15, - }, - { - initial: [][2]uint64{{0, 1}, {5, 15}}, - start: 2, - end: 4, - expected: "[[0 15]]", - nextStart: 16, - nextEnd: 0, - last: 15, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 2, - end: 10, - expected: "[[0 10] [15 20]]", - nextStart: 11, - nextEnd: 14, - last: 20, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 8, - end: 18, - expected: "[[0 5] [8 20]]", - nextStart: 6, - nextEnd: 7, - last: 20, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 2, - end: 17, - expected: "[[0 20]]", - nextStart: 21, - nextEnd: 0, - last: 20, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 2, - end: 25, - expected: "[[0 25]]", - nextStart: 26, - nextEnd: 0, - last: 25, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 5, - end: 14, - expected: "[[0 20]]", - nextStart: 21, - nextEnd: 0, - last: 20, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}}, - start: 6, - end: 14, - expected: "[[0 20]]", - nextStart: 21, - nextEnd: 0, - last: 20, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}, {30, 40}}, - start: 6, - end: 29, - expected: "[[0 40]]", - nextStart: 41, - nextEnd: 0, - last: 40, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}, {30, 40}, {50, 60}}, - start: 3, - end: 55, - expected: "[[0 60]]", - nextStart: 61, - nextEnd: 0, - last: 60, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}, {30, 40}, {50, 60}}, - start: 21, - end: 49, - expected: "[[0 5] [15 60]]", - nextStart: 6, - nextEnd: 14, - last: 60, - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}, {30, 40}, {50, 60}}, - start: 0, - end: 100, - expected: "[[0 100]]", - nextStart: 101, - nextEnd: 0, - last: 100, - }, - { - startLimit: 100, - initial: nil, - start: 0, - end: 0, - expected: "[]", - nextStart: 100, - nextEnd: 0, - last: 0, - }, - { - startLimit: 100, - initial: nil, - start: 20, - end: 30, - expected: "[]", - nextStart: 100, - nextEnd: 0, - last: 0, - }, - { - startLimit: 100, - initial: nil, - start: 50, - end: 100, - expected: "[[100 100]]", - nextStart: 101, - nextEnd: 0, - last: 100, - }, - { - startLimit: 100, - initial: nil, - start: 50, - end: 110, - expected: "[[100 110]]", - nextStart: 111, - nextEnd: 0, - last: 110, - }, - { - startLimit: 100, - initial: nil, - start: 120, - end: 130, - expected: "[[120 130]]", - nextStart: 100, - nextEnd: 119, - last: 130, - }, - { - startLimit: 100, - initial: nil, - start: 120, - end: 130, - expected: "[[120 130]]", - nextStart: 100, - nextEnd: 119, - last: 130, - }, - } { - intervals := NewIntervals(tc.startLimit) - intervals.ranges = tc.initial - intervals.Add(tc.start, tc.end) - got := intervals.String() - if got != tc.expected { - t.Errorf("interval #%d: expected %s, got %s", i, tc.expected, got) - } - nextStart, nextEnd := intervals.Next() - if nextStart != tc.nextStart { - t.Errorf("interval #%d, expected next start %d, got %d", i, tc.nextStart, nextStart) - } - if nextEnd != tc.nextEnd { - t.Errorf("interval #%d, expected next end %d, got %d", i, tc.nextEnd, nextEnd) - } - last := intervals.Last() - if last != tc.last { - t.Errorf("interval #%d, expected last %d, got %d", i, tc.last, last) - } - } -} - -func TestMerge(t *testing.T) { - for i, tc := range []struct { - initial [][2]uint64 - merge [][2]uint64 - expected string - }{ - { - initial: nil, - merge: nil, - expected: "[]", - }, - { - initial: [][2]uint64{{10, 20}}, - merge: nil, - expected: "[[10 20]]", - }, - { - initial: nil, - merge: [][2]uint64{{15, 25}}, - expected: "[[15 25]]", - }, - { - initial: [][2]uint64{{0, 100}}, - merge: [][2]uint64{{150, 250}}, - expected: "[[0 100] [150 250]]", - }, - { - initial: [][2]uint64{{0, 100}}, - merge: [][2]uint64{{101, 250}}, - expected: "[[0 250]]", - }, - { - initial: [][2]uint64{{0, 10}, {30, 40}}, - merge: [][2]uint64{{20, 25}, {41, 50}}, - expected: "[[0 10] [20 25] [30 50]]", - }, - { - initial: [][2]uint64{{0, 5}, {15, 20}, {30, 40}, {50, 60}}, - merge: [][2]uint64{{6, 25}}, - expected: "[[0 25] [30 40] [50 60]]", - }, - } { - intervals := NewIntervals(0) - intervals.ranges = tc.initial - m := NewIntervals(0) - m.ranges = tc.merge - - intervals.Merge(m) - - got := intervals.String() - if got != tc.expected { - t.Errorf("interval #%d: expected %s, got %s", i, tc.expected, got) - } - } -} diff --git a/swarm/network/stream/intervals/store_test.go b/swarm/network/stream/intervals/store_test.go deleted file mode 100644 index a36814b71741..000000000000 --- a/swarm/network/stream/intervals/store_test.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package intervals - -import ( - "testing" - - "github.com/ethereum/go-ethereum/swarm/state" -) - -// TestInmemoryStore tests basic functionality of InmemoryStore. -func TestInmemoryStore(t *testing.T) { - testStore(t, state.NewInmemoryStore()) -} - -// testStore is a helper function to test various Store implementations. -func testStore(t *testing.T, s state.Store) { - key1 := "key1" - i1 := NewIntervals(0) - i1.Add(10, 20) - if err := s.Put(key1, i1); err != nil { - t.Fatal(err) - } - i := &Intervals{} - err := s.Get(key1, i) - if err != nil { - t.Fatal(err) - } - if i.String() != i1.String() { - t.Errorf("expected interval %s, got %s", i1, i) - } - - key2 := "key2" - i2 := NewIntervals(0) - i2.Add(10, 20) - if err := s.Put(key2, i2); err != nil { - t.Fatal(err) - } - err = s.Get(key2, i) - if err != nil { - t.Fatal(err) - } - if i.String() != i2.String() { - t.Errorf("expected interval %s, got %s", i2, i) - } - - if err := s.Delete(key1); err != nil { - t.Fatal(err) - } - if err := s.Get(key1, i); err != state.ErrNotFound { - t.Errorf("expected error %v, got %s", state.ErrNotFound, err) - } - if err := s.Get(key2, i); err != nil { - t.Errorf("expected error %v, got %s", nil, err) - } - - if err := s.Delete(key2); err != nil { - t.Fatal(err) - } - if err := s.Get(key2, i); err != state.ErrNotFound { - t.Errorf("expected error %v, got %s", state.ErrNotFound, err) - } -} diff --git a/swarm/network/stream/intervals_test.go b/swarm/network/stream/intervals_test.go deleted file mode 100644 index 009a941ef45f..000000000000 --- a/swarm/network/stream/intervals_test.go +++ /dev/null @@ -1,362 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "encoding/binary" - "errors" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -func TestIntervalsLive(t *testing.T) { - testIntervals(t, true, nil, false) - testIntervals(t, true, nil, true) -} - -func TestIntervalsHistory(t *testing.T) { - testIntervals(t, false, NewRange(9, 26), false) - testIntervals(t, false, NewRange(9, 26), true) -} - -func TestIntervalsLiveAndHistory(t *testing.T) { - testIntervals(t, true, NewRange(9, 26), false) - testIntervals(t, true, NewRange(9, 26), true) -} - -func testIntervals(t *testing.T, live bool, history *Range, skipCheck bool) { - - nodes := 2 - chunkCount := dataChunkCount - externalStreamName := "externalStream" - externalStreamSessionAt := uint64(50) - externalStreamMaxKeys := uint64(100) - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "intervalsStreamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (node.Service, func(), error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingRegisterOnly, - SkipCheck: skipCheck, - }, nil) - bucket.Store(bucketKeyRegistry, r) - - r.RegisterClientFunc(externalStreamName, func(p *Peer, t string, live bool) (Client, error) { - return newTestExternalClient(netStore), nil - }) - r.RegisterServerFunc(externalStreamName, func(p *Peer, t string, live bool) (Server, error) { - return newTestExternalServer(t, externalStreamSessionAt, externalStreamMaxKeys, nil), nil - }) - - cleanup := func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - log.Info("Adding nodes to simulation") - _, err := sim.AddNodesAndConnectChain(nodes) - if err != nil { - t.Fatal(err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) - defer cancel() - - if _, err := sim.WaitTillHealthy(ctx); err != nil { - t.Fatal(err) - } - - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - nodeIDs := sim.UpNodeIDs() - storer := nodeIDs[0] - checker := nodeIDs[1] - - item, ok := sim.NodeItem(storer, bucketKeyFileStore) - if !ok { - return fmt.Errorf("No filestore") - } - fileStore := item.(*storage.FileStore) - - size := chunkCount * chunkSize - - _, wait, err := fileStore.Store(ctx, testutil.RandomReader(1, size), int64(size), false) - if err != nil { - return fmt.Errorf("store: %v", err) - } - err = wait(ctx) - if err != nil { - return fmt.Errorf("wait store: %v", err) - } - - item, ok = sim.NodeItem(checker, bucketKeyRegistry) - if !ok { - return fmt.Errorf("No registry") - } - registry := item.(*Registry) - - liveErrC := make(chan error) - historyErrC := make(chan error) - - err = registry.Subscribe(storer, NewStream(externalStreamName, "", live), history, Top) - if err != nil { - return err - } - - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil && disconnected.bool() { - err = errors.New("disconnect events received") - } - }() - - go func() { - if !live { - close(liveErrC) - return - } - - var err error - defer func() { - liveErrC <- err - }() - - // live stream - var liveHashesChan chan []byte - liveHashesChan, err = getHashes(ctx, registry, storer, NewStream(externalStreamName, "", true)) - if err != nil { - log.Error("get hashes", "err", err) - return - } - i := externalStreamSessionAt - - // we have subscribed, enable notifications - err = enableNotifications(registry, storer, NewStream(externalStreamName, "", true)) - if err != nil { - return - } - - for { - select { - case hash := <-liveHashesChan: - h := binary.BigEndian.Uint64(hash) - if h != i { - err = fmt.Errorf("expected live hash %d, got %d", i, h) - return - } - i++ - if i > externalStreamMaxKeys { - return - } - case <-ctx.Done(): - return - } - } - }() - - go func() { - if live && history == nil { - close(historyErrC) - return - } - - var err error - defer func() { - historyErrC <- err - }() - - // history stream - var historyHashesChan chan []byte - historyHashesChan, err = getHashes(ctx, registry, storer, NewStream(externalStreamName, "", false)) - if err != nil { - log.Error("get hashes", "err", err) - return - } - - var i uint64 - historyTo := externalStreamMaxKeys - if history != nil { - i = history.From - if history.To != 0 { - historyTo = history.To - } - } - - // we have subscribed, enable notifications - err = enableNotifications(registry, storer, NewStream(externalStreamName, "", false)) - if err != nil { - return - } - - for { - select { - case hash := <-historyHashesChan: - h := binary.BigEndian.Uint64(hash) - if h != i { - err = fmt.Errorf("expected history hash %d, got %d", i, h) - return - } - i++ - if i > historyTo { - return - } - case <-ctx.Done(): - return - } - } - }() - - if err := <-liveErrC; err != nil { - return err - } - if err := <-historyErrC; err != nil { - return err - } - - return nil - }) - - if result.Error != nil { - t.Fatal(result.Error) - } -} - -func getHashes(ctx context.Context, r *Registry, peerID enode.ID, s Stream) (chan []byte, error) { - peer := r.getPeer(peerID) - - client, err := peer.getClient(ctx, s) - if err != nil { - return nil, err - } - - c := client.Client.(*testExternalClient) - - return c.hashes, nil -} - -func enableNotifications(r *Registry, peerID enode.ID, s Stream) error { - peer := r.getPeer(peerID) - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - client, err := peer.getClient(ctx, s) - if err != nil { - return err - } - - close(client.Client.(*testExternalClient).enableNotificationsC) - - return nil -} - -type testExternalClient struct { - hashes chan []byte - store storage.SyncChunkStore - enableNotificationsC chan struct{} -} - -func newTestExternalClient(store storage.SyncChunkStore) *testExternalClient { - return &testExternalClient{ - hashes: make(chan []byte), - store: store, - enableNotificationsC: make(chan struct{}), - } -} - -func (c *testExternalClient) NeedData(ctx context.Context, hash []byte) func(context.Context) error { - wait := c.store.FetchFunc(ctx, storage.Address(hash)) - if wait == nil { - return nil - } - select { - case c.hashes <- hash: - case <-ctx.Done(): - log.Warn("testExternalClient NeedData context", "err", ctx.Err()) - return func(_ context.Context) error { - return ctx.Err() - } - } - return wait -} - -func (c *testExternalClient) BatchDone(Stream, uint64, []byte, []byte) func() (*TakeoverProof, error) { - return nil -} - -func (c *testExternalClient) Close() {} - -type testExternalServer struct { - t string - keyFunc func(key []byte, index uint64) - sessionAt uint64 - maxKeys uint64 -} - -func newTestExternalServer(t string, sessionAt, maxKeys uint64, keyFunc func(key []byte, index uint64)) *testExternalServer { - if keyFunc == nil { - keyFunc = binary.BigEndian.PutUint64 - } - return &testExternalServer{ - t: t, - keyFunc: keyFunc, - sessionAt: sessionAt, - maxKeys: maxKeys, - } -} - -func (s *testExternalServer) SessionIndex() (uint64, error) { - return s.sessionAt, nil -} - -func (s *testExternalServer) SetNextBatch(from uint64, to uint64) ([]byte, uint64, uint64, *HandoverProof, error) { - if to > s.maxKeys { - to = s.maxKeys - } - b := make([]byte, HashSize*(to-from+1)) - for i := from; i <= to; i++ { - s.keyFunc(b[(i-from)*HashSize:(i-from+1)*HashSize], i) - } - return b, from, to, nil, nil -} - -func (s *testExternalServer) GetData(context.Context, []byte) ([]byte, error) { - return make([]byte, 4096), nil -} - -func (s *testExternalServer) Close() {} diff --git a/swarm/network/stream/lightnode_test.go b/swarm/network/stream/lightnode_test.go deleted file mode 100644 index 501660fab4b9..000000000000 --- a/swarm/network/stream/lightnode_test.go +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package stream - -import ( - "testing" - - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" -) - -// This test checks the default behavior of the server, that is -// when it is serving Retrieve requests. -func TestLigthnodeRetrieveRequestWithRetrieve(t *testing.T) { - registryOptions := &RegistryOptions{ - Retrieval: RetrievalClientOnly, - Syncing: SyncingDisabled, - } - tester, _, _, teardown, err := newStreamerTester(registryOptions) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - stream := NewStream(swarmChunkServerStreamName, "", false) - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "SubscribeMsg", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - if err != nil { - t.Fatalf("Got %v", err) - } - - err = tester.TestDisconnected(&p2ptest.Disconnect{Peer: node.ID()}) - if err == nil || err.Error() != "timed out waiting for peers to disconnect" { - t.Fatalf("Expected no disconnect, got %v", err) - } -} - -// This test checks the Lightnode behavior of server, when serving Retrieve -// requests are disabled -func TestLigthnodeRetrieveRequestWithoutRetrieve(t *testing.T) { - registryOptions := &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingDisabled, - } - tester, _, _, teardown, err := newStreamerTester(registryOptions) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - stream := NewStream(swarmChunkServerStreamName, "", false) - - err = tester.TestExchanges( - p2ptest.Exchange{ - Label: "SubscribeMsg", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 7, - Msg: &SubscribeErrorMsg{ - Error: "stream RETRIEVE_REQUEST not registered", - }, - Peer: node.ID(), - }, - }, - }) - if err != nil { - t.Fatalf("Got %v", err) - } -} - -// This test checks the default behavior of the server, that is -// when syncing is enabled. -func TestLigthnodeRequestSubscriptionWithSync(t *testing.T) { - registryOptions := &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingRegisterOnly, - } - tester, _, _, teardown, err := newStreamerTester(registryOptions) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - syncStream := NewStream("SYNC", FormatSyncBinKey(1), false) - - err = tester.TestExchanges( - p2ptest.Exchange{ - Label: "RequestSubscription", - Triggers: []p2ptest.Trigger{ - { - Code: 8, - Msg: &RequestSubscriptionMsg{ - Stream: syncStream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: syncStream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatalf("Got %v", err) - } -} - -// This test checks the Lightnode behavior of the server, that is -// when syncing is disabled. -func TestLigthnodeRequestSubscriptionWithoutSync(t *testing.T) { - registryOptions := &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingDisabled, - } - tester, _, _, teardown, err := newStreamerTester(registryOptions) - if err != nil { - t.Fatal(err) - } - defer teardown() - - node := tester.Nodes[0] - - syncStream := NewStream("SYNC", FormatSyncBinKey(1), false) - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "RequestSubscription", - Triggers: []p2ptest.Trigger{ - { - Code: 8, - Msg: &RequestSubscriptionMsg{ - Stream: syncStream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 7, - Msg: &SubscribeErrorMsg{ - Error: "stream SYNC not registered", - }, - Peer: node.ID(), - }, - }, - }, p2ptest.Exchange{ - Label: "RequestSubscription", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: syncStream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 7, - Msg: &SubscribeErrorMsg{ - Error: "stream SYNC not registered", - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatalf("Got %v", err) - } -} diff --git a/swarm/network/stream/messages.go b/swarm/network/stream/messages.go deleted file mode 100644 index de4e8a3bb4a1..000000000000 --- a/swarm/network/stream/messages.go +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "fmt" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - bv "github.com/ethereum/go-ethereum/swarm/network/bitvector" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/opentracing/opentracing-go" -) - -var syncBatchTimeout = 30 * time.Second - -// Stream defines a unique stream identifier. -type Stream struct { - // Name is used for Client and Server functions identification. - Name string - // Key is the name of specific stream data. - Key string - // Live defines whether the stream delivers only new data - // for the specific stream. - Live bool -} - -func NewStream(name string, key string, live bool) Stream { - return Stream{ - Name: name, - Key: key, - Live: live, - } -} - -// String return a stream id based on all Stream fields. -func (s Stream) String() string { - t := "h" - if s.Live { - t = "l" - } - return fmt.Sprintf("%s|%s|%s", s.Name, s.Key, t) -} - -// SubcribeMsg is the protocol msg for requesting a stream(section) -type SubscribeMsg struct { - Stream Stream - History *Range `rlp:"nil"` - Priority uint8 // delivered on priority channel -} - -// RequestSubscriptionMsg is the protocol msg for a node to request subscription to a -// specific stream -type RequestSubscriptionMsg struct { - Stream Stream - History *Range `rlp:"nil"` - Priority uint8 // delivered on priority channel -} - -func (p *Peer) handleRequestSubscription(ctx context.Context, req *RequestSubscriptionMsg) (err error) { - log.Debug(fmt.Sprintf("handleRequestSubscription: streamer %s to subscribe to %s with stream %s", p.streamer.addr, p.ID(), req.Stream)) - if err = p.streamer.Subscribe(p.ID(), req.Stream, req.History, req.Priority); err != nil { - // The error will be sent as a subscribe error message - // and will not be returned as it will prevent any new message - // exchange between peers over p2p. Instead, error will be returned - // only if there is one from sending subscribe error message. - err = p.Send(ctx, SubscribeErrorMsg{ - Error: err.Error(), - }) - } - return err -} - -func (p *Peer) handleSubscribeMsg(ctx context.Context, req *SubscribeMsg) (err error) { - metrics.GetOrRegisterCounter("peer.handlesubscribemsg", nil).Inc(1) - - defer func() { - if err != nil { - // The error will be sent as a subscribe error message - // and will not be returned as it will prevent any new message - // exchange between peers over p2p. Instead, error will be returned - // only if there is one from sending subscribe error message. - err = p.Send(context.TODO(), SubscribeErrorMsg{ - Error: err.Error(), - }) - } - }() - - log.Debug("received subscription", "from", p.streamer.addr, "peer", p.ID(), "stream", req.Stream, "history", req.History) - - f, err := p.streamer.GetServerFunc(req.Stream.Name) - if err != nil { - return err - } - - s, err := f(p, req.Stream.Key, req.Stream.Live) - if err != nil { - return err - } - os, err := p.setServer(req.Stream, s, req.Priority) - if err != nil { - return err - } - - var from uint64 - var to uint64 - if !req.Stream.Live && req.History != nil { - from = req.History.From - to = req.History.To - } - - go func() { - if err := p.SendOfferedHashes(os, from, to); err != nil { - log.Warn("SendOfferedHashes error", "peer", p.ID().TerminalString(), "err", err) - } - }() - - if req.Stream.Live && req.History != nil { - // subscribe to the history stream - s, err := f(p, req.Stream.Key, false) - if err != nil { - return err - } - - os, err := p.setServer(getHistoryStream(req.Stream), s, getHistoryPriority(req.Priority)) - if err != nil { - return err - } - go func() { - if err := p.SendOfferedHashes(os, req.History.From, req.History.To); err != nil { - log.Warn("SendOfferedHashes error", "peer", p.ID().TerminalString(), "err", err) - } - }() - } - - return nil -} - -type SubscribeErrorMsg struct { - Error string -} - -func (p *Peer) handleSubscribeErrorMsg(req *SubscribeErrorMsg) (err error) { - //TODO the error should be channeled to whoever calls the subscribe - return fmt.Errorf("subscribe to peer %s: %v", p.ID(), req.Error) -} - -type UnsubscribeMsg struct { - Stream Stream -} - -func (p *Peer) handleUnsubscribeMsg(req *UnsubscribeMsg) error { - return p.removeServer(req.Stream) -} - -type QuitMsg struct { - Stream Stream -} - -func (p *Peer) handleQuitMsg(req *QuitMsg) error { - return p.removeClient(req.Stream) -} - -// OfferedHashesMsg is the protocol msg for offering to hand over a -// stream section -type OfferedHashesMsg struct { - Stream Stream // name of Stream - From, To uint64 // peer and db-specific entry count - Hashes []byte // stream of hashes (128) - *HandoverProof // HandoverProof -} - -// String pretty prints OfferedHashesMsg -func (m OfferedHashesMsg) String() string { - return fmt.Sprintf("Stream '%v' [%v-%v] (%v)", m.Stream, m.From, m.To, len(m.Hashes)/HashSize) -} - -// handleOfferedHashesMsg protocol msg handler calls the incoming streamer interface -// Filter method -func (p *Peer) handleOfferedHashesMsg(ctx context.Context, req *OfferedHashesMsg) error { - metrics.GetOrRegisterCounter("peer.handleofferedhashes", nil).Inc(1) - - var sp opentracing.Span - ctx, sp = spancontext.StartSpan( - ctx, - "handle.offered.hashes") - defer sp.Finish() - - c, _, err := p.getOrSetClient(req.Stream, req.From, req.To) - if err != nil { - return err - } - - hashes := req.Hashes - lenHashes := len(hashes) - if lenHashes%HashSize != 0 { - return fmt.Errorf("error invalid hashes length (len: %v)", lenHashes) - } - - want, err := bv.New(lenHashes / HashSize) - if err != nil { - return fmt.Errorf("error initiaising bitvector of length %v: %v", lenHashes/HashSize, err) - } - - ctr := 0 - errC := make(chan error) - ctx, cancel := context.WithTimeout(ctx, syncBatchTimeout) - - ctx = context.WithValue(ctx, "source", p.ID().String()) - for i := 0; i < lenHashes; i += HashSize { - hash := hashes[i : i+HashSize] - - if wait := c.NeedData(ctx, hash); wait != nil { - ctr++ - want.Set(i/HashSize, true) - // create request and wait until the chunk data arrives and is stored - go func(w func(context.Context) error) { - select { - case errC <- w(ctx): - case <-ctx.Done(): - } - }(wait) - } - } - - go func() { - defer cancel() - for i := 0; i < ctr; i++ { - select { - case err := <-errC: - if err != nil { - log.Debug("client.handleOfferedHashesMsg() error waiting for chunk, dropping peer", "peer", p.ID(), "err", err) - p.Drop(err) - return - } - case <-ctx.Done(): - log.Debug("client.handleOfferedHashesMsg() context done", "ctx.Err()", ctx.Err()) - return - case <-c.quit: - log.Debug("client.handleOfferedHashesMsg() quit") - return - } - } - select { - case c.next <- c.batchDone(p, req, hashes): - case <-c.quit: - log.Debug("client.handleOfferedHashesMsg() quit") - case <-ctx.Done(): - log.Debug("client.handleOfferedHashesMsg() context done", "ctx.Err()", ctx.Err()) - } - }() - // only send wantedKeysMsg if all missing chunks of the previous batch arrived - // except - if c.stream.Live { - c.sessionAt = req.From - } - from, to := c.nextBatch(req.To + 1) - log.Trace("set next batch", "peer", p.ID(), "stream", req.Stream, "from", req.From, "to", req.To, "addr", p.streamer.addr) - if from == to { - return nil - } - - msg := &WantedHashesMsg{ - Stream: req.Stream, - Want: want.Bytes(), - From: from, - To: to, - } - go func() { - log.Trace("sending want batch", "peer", p.ID(), "stream", msg.Stream, "from", msg.From, "to", msg.To) - select { - case err := <-c.next: - if err != nil { - log.Warn("c.next error dropping peer", "err", err) - p.Drop(err) - return - } - case <-c.quit: - log.Debug("client.handleOfferedHashesMsg() quit") - return - case <-ctx.Done(): - log.Debug("client.handleOfferedHashesMsg() context done", "ctx.Err()", ctx.Err()) - return - } - log.Trace("sending want batch", "peer", p.ID(), "stream", msg.Stream, "from", msg.From, "to", msg.To) - err := p.SendPriority(ctx, msg, c.priority, "") - if err != nil { - log.Warn("SendPriority error", "err", err) - } - }() - return nil -} - -// WantedHashesMsg is the protocol msg data for signaling which hashes -// offered in OfferedHashesMsg downstream peer actually wants sent over -type WantedHashesMsg struct { - Stream Stream - Want []byte // bitvector indicating which keys of the batch needed - From, To uint64 // next interval offset - empty if not to be continued -} - -// String pretty prints WantedHashesMsg -func (m WantedHashesMsg) String() string { - return fmt.Sprintf("Stream '%v', Want: %x, Next: [%v-%v]", m.Stream, m.Want, m.From, m.To) -} - -// handleWantedHashesMsg protocol msg handler -// * sends the next batch of unsynced keys -// * sends the actual data chunks as per WantedHashesMsg -func (p *Peer) handleWantedHashesMsg(ctx context.Context, req *WantedHashesMsg) error { - metrics.GetOrRegisterCounter("peer.handlewantedhashesmsg", nil).Inc(1) - - log.Trace("received wanted batch", "peer", p.ID(), "stream", req.Stream, "from", req.From, "to", req.To) - s, err := p.getServer(req.Stream) - if err != nil { - return err - } - hashes := s.currentBatch - // launch in go routine since GetBatch blocks until new hashes arrive - go func() { - if err := p.SendOfferedHashes(s, req.From, req.To); err != nil { - log.Warn("SendOfferedHashes error", "peer", p.ID().TerminalString(), "err", err) - } - }() - // go p.SendOfferedHashes(s, req.From, req.To) - l := len(hashes) / HashSize - - log.Trace("wanted batch length", "peer", p.ID(), "stream", req.Stream, "from", req.From, "to", req.To, "lenhashes", len(hashes), "l", l) - want, err := bv.NewFromBytes(req.Want, l) - if err != nil { - return fmt.Errorf("error initiaising bitvector of length %v: %v", l, err) - } - for i := 0; i < l; i++ { - if want.Get(i) { - metrics.GetOrRegisterCounter("peer.handlewantedhashesmsg.actualget", nil).Inc(1) - - hash := hashes[i*HashSize : (i+1)*HashSize] - data, err := s.GetData(ctx, hash) - if err != nil { - return fmt.Errorf("handleWantedHashesMsg get data %x: %v", hash, err) - } - chunk := storage.NewChunk(hash, data) - syncing := true - if err := p.Deliver(ctx, chunk, s.priority, syncing); err != nil { - return err - } - } - } - return nil -} - -// Handover represents a statement that the upstream peer hands over the stream section -type Handover struct { - Stream Stream // name of stream - Start, End uint64 // index of hashes - Root []byte // Root hash for indexed segment inclusion proofs -} - -// HandoverProof represents a signed statement that the upstream peer handed over the stream section -type HandoverProof struct { - Sig []byte // Sign(Hash(Serialisation(Handover))) - *Handover -} - -// Takeover represents a statement that downstream peer took over (stored all data) -// handed over -type Takeover Handover - -// TakeoverProof represents a signed statement that the downstream peer took over -// the stream section -type TakeoverProof struct { - Sig []byte // Sign(Hash(Serialisation(Takeover))) - *Takeover -} - -// TakeoverProofMsg is the protocol msg sent by downstream peer -type TakeoverProofMsg TakeoverProof - -// String pretty prints TakeoverProofMsg -func (m TakeoverProofMsg) String() string { - return fmt.Sprintf("Stream: '%v' [%v-%v], Root: %x, Sig: %x", m.Stream, m.Start, m.End, m.Root, m.Sig) -} - -func (p *Peer) handleTakeoverProofMsg(ctx context.Context, req *TakeoverProofMsg) error { - _, err := p.getServer(req.Stream) - // store the strongest takeoverproof for the stream in streamer - return err -} diff --git a/swarm/network/stream/peer.go b/swarm/network/stream/peer.go deleted file mode 100644 index 68da8f44ad41..000000000000 --- a/swarm/network/stream/peer.go +++ /dev/null @@ -1,430 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/swarm/log" - pq "github.com/ethereum/go-ethereum/swarm/network/priorityqueue" - "github.com/ethereum/go-ethereum/swarm/network/stream/intervals" - "github.com/ethereum/go-ethereum/swarm/spancontext" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - opentracing "github.com/opentracing/opentracing-go" -) - -type notFoundError struct { - t string - s Stream -} - -func newNotFoundError(t string, s Stream) *notFoundError { - return ¬FoundError{t: t, s: s} -} - -func (e *notFoundError) Error() string { - return fmt.Sprintf("%s not found for stream %q", e.t, e.s) -} - -// ErrMaxPeerServers will be returned if peer server limit is reached. -// It will be sent in the SubscribeErrorMsg. -var ErrMaxPeerServers = errors.New("max peer servers") - -// Peer is the Peer extension for the streaming protocol -type Peer struct { - *protocols.Peer - streamer *Registry - pq *pq.PriorityQueue - serverMu sync.RWMutex - clientMu sync.RWMutex // protects both clients and clientParams - servers map[Stream]*server - clients map[Stream]*client - // clientParams map keeps required client arguments - // that are set on Registry.Subscribe and used - // on creating a new client in offered hashes handler. - clientParams map[Stream]*clientParams - quit chan struct{} - spans sync.Map -} - -type WrappedPriorityMsg struct { - Context context.Context - Msg interface{} -} - -// NewPeer is the constructor for Peer -func NewPeer(peer *protocols.Peer, streamer *Registry) *Peer { - p := &Peer{ - Peer: peer, - pq: pq.New(int(PriorityQueue), PriorityQueueCap), - streamer: streamer, - servers: make(map[Stream]*server), - clients: make(map[Stream]*client), - clientParams: make(map[Stream]*clientParams), - quit: make(chan struct{}), - spans: sync.Map{}, - } - ctx, cancel := context.WithCancel(context.Background()) - go p.pq.Run(ctx, func(i interface{}) { - wmsg := i.(WrappedPriorityMsg) - defer p.spans.Delete(wmsg.Context) - sp, ok := p.spans.Load(wmsg.Context) - if ok { - defer sp.(opentracing.Span).Finish() - } - err := p.Send(wmsg.Context, wmsg.Msg) - if err != nil { - log.Error("Message send error, dropping peer", "peer", p.ID(), "err", err) - p.Drop(err) - } - }) - - // basic monitoring for pq contention - go func(pq *pq.PriorityQueue) { - ticker := time.NewTicker(5 * time.Second) - defer ticker.Stop() - for { - select { - case <-ticker.C: - var len_maxi int - var cap_maxi int - for k := range pq.Queues { - if len_maxi < len(pq.Queues[k]) { - len_maxi = len(pq.Queues[k]) - } - - if cap_maxi < cap(pq.Queues[k]) { - cap_maxi = cap(pq.Queues[k]) - } - } - - metrics.GetOrRegisterGauge(fmt.Sprintf("pq_len_%s", p.ID().TerminalString()), nil).Update(int64(len_maxi)) - metrics.GetOrRegisterGauge(fmt.Sprintf("pq_cap_%s", p.ID().TerminalString()), nil).Update(int64(cap_maxi)) - case <-p.quit: - return - } - } - }(p.pq) - - go func() { - <-p.quit - cancel() - }() - return p -} - -// Deliver sends a storeRequestMsg protocol message to the peer -// Depending on the `syncing` parameter we send different message types -func (p *Peer) Deliver(ctx context.Context, chunk storage.Chunk, priority uint8, syncing bool) error { - var msg interface{} - - spanName := "send.chunk.delivery" - - //we send different types of messages if delivery is for syncing or retrievals, - //even if handling and content of the message are the same, - //because swap accounting decides which messages need accounting based on the message type - if syncing { - msg = &ChunkDeliveryMsgSyncing{ - Addr: chunk.Address(), - SData: chunk.Data(), - } - spanName += ".syncing" - } else { - msg = &ChunkDeliveryMsgRetrieval{ - Addr: chunk.Address(), - SData: chunk.Data(), - } - spanName += ".retrieval" - } - - return p.SendPriority(ctx, msg, priority, spanName) -} - -// SendPriority sends message to the peer using the outgoing priority queue -func (p *Peer) SendPriority(ctx context.Context, msg interface{}, priority uint8, traceId string) error { - defer metrics.GetOrRegisterResettingTimer(fmt.Sprintf("peer.sendpriority_t.%d", priority), nil).UpdateSince(time.Now()) - metrics.GetOrRegisterCounter(fmt.Sprintf("peer.sendpriority.%d", priority), nil).Inc(1) - if traceId != "" { - var sp opentracing.Span - ctx, sp = spancontext.StartSpan( - ctx, - traceId, - ) - p.spans.Store(ctx, sp) - } - wmsg := WrappedPriorityMsg{ - Context: ctx, - Msg: msg, - } - err := p.pq.Push(wmsg, int(priority)) - if err == pq.ErrContention { - log.Warn("dropping peer on priority queue contention", "peer", p.ID()) - p.Drop(err) - } - return err -} - -// SendOfferedHashes sends OfferedHashesMsg protocol msg -func (p *Peer) SendOfferedHashes(s *server, f, t uint64) error { - var sp opentracing.Span - ctx, sp := spancontext.StartSpan( - context.TODO(), - "send.offered.hashes") - defer sp.Finish() - - hashes, from, to, proof, err := s.setNextBatch(f, t) - if err != nil { - return err - } - // true only when quitting - if len(hashes) == 0 { - return nil - } - if proof == nil { - proof = &HandoverProof{ - Handover: &Handover{}, - } - } - s.currentBatch = hashes - msg := &OfferedHashesMsg{ - HandoverProof: proof, - Hashes: hashes, - From: from, - To: to, - Stream: s.stream, - } - log.Trace("Swarm syncer offer batch", "peer", p.ID(), "stream", s.stream, "len", len(hashes), "from", from, "to", to) - return p.SendPriority(ctx, msg, s.priority, "send.offered.hashes") -} - -func (p *Peer) getServer(s Stream) (*server, error) { - p.serverMu.RLock() - defer p.serverMu.RUnlock() - - server := p.servers[s] - if server == nil { - return nil, newNotFoundError("server", s) - } - return server, nil -} - -func (p *Peer) setServer(s Stream, o Server, priority uint8) (*server, error) { - p.serverMu.Lock() - defer p.serverMu.Unlock() - - if p.servers[s] != nil { - return nil, fmt.Errorf("server %s already registered", s) - } - - if p.streamer.maxPeerServers > 0 && len(p.servers) >= p.streamer.maxPeerServers { - return nil, ErrMaxPeerServers - } - - sessionIndex, err := o.SessionIndex() - if err != nil { - return nil, err - } - os := &server{ - Server: o, - stream: s, - priority: priority, - sessionIndex: sessionIndex, - } - p.servers[s] = os - return os, nil -} - -func (p *Peer) removeServer(s Stream) error { - p.serverMu.Lock() - defer p.serverMu.Unlock() - - server, ok := p.servers[s] - if !ok { - return newNotFoundError("server", s) - } - server.Close() - delete(p.servers, s) - return nil -} - -func (p *Peer) getClient(ctx context.Context, s Stream) (c *client, err error) { - var params *clientParams - func() { - p.clientMu.RLock() - defer p.clientMu.RUnlock() - - c = p.clients[s] - if c != nil { - return - } - params = p.clientParams[s] - }() - if c != nil { - return c, nil - } - - if params != nil { - //debug.PrintStack() - if err := params.waitClient(ctx); err != nil { - return nil, err - } - } - - p.clientMu.RLock() - defer p.clientMu.RUnlock() - - c = p.clients[s] - if c != nil { - return c, nil - } - return nil, newNotFoundError("client", s) -} - -func (p *Peer) getOrSetClient(s Stream, from, to uint64) (c *client, created bool, err error) { - p.clientMu.Lock() - defer p.clientMu.Unlock() - - c = p.clients[s] - if c != nil { - return c, false, nil - } - - f, err := p.streamer.GetClientFunc(s.Name) - if err != nil { - return nil, false, err - } - - is, err := f(p, s.Key, s.Live) - if err != nil { - return nil, false, err - } - - cp, err := p.getClientParams(s) - if err != nil { - return nil, false, err - } - defer func() { - if err == nil { - if err := p.removeClientParams(s); err != nil { - log.Error("stream set client: remove client params", "stream", s, "peer", p, "err", err) - } - } - }() - - intervalsKey := peerStreamIntervalsKey(p, s) - if s.Live { - // try to find previous history and live intervals and merge live into history - historyKey := peerStreamIntervalsKey(p, NewStream(s.Name, s.Key, false)) - historyIntervals := &intervals.Intervals{} - err := p.streamer.intervalsStore.Get(historyKey, historyIntervals) - switch err { - case nil: - liveIntervals := &intervals.Intervals{} - err := p.streamer.intervalsStore.Get(intervalsKey, liveIntervals) - switch err { - case nil: - historyIntervals.Merge(liveIntervals) - if err := p.streamer.intervalsStore.Put(historyKey, historyIntervals); err != nil { - log.Error("stream set client: put history intervals", "stream", s, "peer", p, "err", err) - } - case state.ErrNotFound: - default: - log.Error("stream set client: get live intervals", "stream", s, "peer", p, "err", err) - } - case state.ErrNotFound: - default: - log.Error("stream set client: get history intervals", "stream", s, "peer", p, "err", err) - } - } - - if err := p.streamer.intervalsStore.Put(intervalsKey, intervals.NewIntervals(from)); err != nil { - return nil, false, err - } - - next := make(chan error, 1) - c = &client{ - Client: is, - stream: s, - priority: cp.priority, - to: cp.to, - next: next, - quit: make(chan struct{}), - intervalsStore: p.streamer.intervalsStore, - intervalsKey: intervalsKey, - } - p.clients[s] = c - cp.clientCreated() // unblock all possible getClient calls that are waiting - next <- nil // this is to allow wantedKeysMsg before first batch arrives - return c, true, nil -} - -func (p *Peer) removeClient(s Stream) error { - p.clientMu.Lock() - defer p.clientMu.Unlock() - - client, ok := p.clients[s] - if !ok { - return newNotFoundError("client", s) - } - client.close() - delete(p.clients, s) - return nil -} - -func (p *Peer) setClientParams(s Stream, params *clientParams) error { - p.clientMu.Lock() - defer p.clientMu.Unlock() - - if p.clients[s] != nil { - return fmt.Errorf("client %s already exists", s) - } - if p.clientParams[s] != nil { - return fmt.Errorf("client params %s already set", s) - } - p.clientParams[s] = params - return nil -} - -func (p *Peer) getClientParams(s Stream) (*clientParams, error) { - params := p.clientParams[s] - if params == nil { - return nil, fmt.Errorf("client params '%v' not provided to peer %v", s, p.ID()) - } - return params, nil -} - -func (p *Peer) removeClientParams(s Stream) error { - _, ok := p.clientParams[s] - if !ok { - return newNotFoundError("client params", s) - } - delete(p.clientParams, s) - return nil -} - -func (p *Peer) close() { - for _, s := range p.servers { - s.Close() - } -} diff --git a/swarm/network/stream/snapshot_retrieval_test.go b/swarm/network/stream/snapshot_retrieval_test.go deleted file mode 100644 index afb023ae295d..000000000000 --- a/swarm/network/stream/snapshot_retrieval_test.go +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package stream - -import ( - "context" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -//constants for random file generation -const ( - minFileSize = 2 - maxFileSize = 40 -) - -//This test is a retrieval test for nodes. -//A configurable number of nodes can be -//provided to the test. -//Files are uploaded to nodes, other nodes try to retrieve the file -//Number of nodes can be provided via commandline too. -func TestFileRetrieval(t *testing.T) { - if *nodes != 0 { - err := runFileRetrievalTest(*nodes) - if err != nil { - t.Fatal(err) - } - } else { - nodeCnt := []int{16} - //if the `longrunning` flag has been provided - //run more test combinations - if *longrunning { - nodeCnt = append(nodeCnt, 32, 64, 128) - } - for _, n := range nodeCnt { - err := runFileRetrievalTest(n) - if err != nil { - t.Fatal(err) - } - } - } -} - -//This test is a retrieval test for nodes. -//One node is randomly selected to be the pivot node. -//A configurable number of chunks and nodes can be -//provided to the test, the number of chunks is uploaded -//to the pivot node and other nodes try to retrieve the chunk(s). -//Number of chunks and nodes can be provided via commandline too. -func TestRetrieval(t *testing.T) { - //if nodes/chunks have been provided via commandline, - //run the tests with these values - if *nodes != 0 && *chunks != 0 { - err := runRetrievalTest(t, *chunks, *nodes) - if err != nil { - t.Fatal(err) - } - } else { - var nodeCnt []int - var chnkCnt []int - //if the `longrunning` flag has been provided - //run more test combinations - if *longrunning { - nodeCnt = []int{16, 32, 128} - chnkCnt = []int{4, 32, 256} - } else { - //default test - nodeCnt = []int{16} - chnkCnt = []int{32} - } - for _, n := range nodeCnt { - for _, c := range chnkCnt { - t.Run(fmt.Sprintf("TestRetrieval_%d_%d", n, c), func(t *testing.T) { - err := runRetrievalTest(t, c, n) - if err != nil { - t.Fatal(err) - } - }) - } - } - } -} - -var retrievalSimServiceMap = map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalEnabled, - Syncing: SyncingAutoSubscribe, - SyncUpdateDelay: 3 * time.Second, - }, nil) - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, -} - -/* -The test loads a snapshot file to construct the swarm network, -assuming that the snapshot file identifies a healthy -kademlia network. Nevertheless a health check runs in the -simulation's `action` function. - -The snapshot should have 'streamer' in its service list. -*/ -func runFileRetrievalTest(nodeCount int) error { - sim := simulation.New(retrievalSimServiceMap) - defer sim.Close() - - log.Info("Initializing test config") - - conf := &synctestConfig{} - //map of discover ID to indexes of chunks expected at that ID - conf.idToChunksMap = make(map[enode.ID][]int) - //map of overlay address to discover ID - conf.addrToIDMap = make(map[string]enode.ID) - //array where the generated chunk hashes will be stored - conf.hashes = make([]storage.Address, 0) - - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - return err - } - - ctx, cancelSimRun := context.WithTimeout(context.Background(), 3*time.Minute) - defer cancelSimRun() - - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - nodeIDs := sim.UpNodeIDs() - for _, n := range nodeIDs { - //get the kademlia overlay address from this ID - a := n.Bytes() - //append it to the array of all overlay addresses - conf.addrs = append(conf.addrs, a) - //the proximity calculation is on overlay addr, - //the p2p/simulations check func triggers on enode.ID, - //so we need to know which overlay addr maps to which nodeID - conf.addrToIDMap[string(a)] = n - } - - //an array for the random files - var randomFiles []string - //channel to signal when the upload has finished - //uploadFinished := make(chan struct{}) - //channel to trigger new node checks - - conf.hashes, randomFiles, err = uploadFilesToNodes(sim) - if err != nil { - return err - } - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - - // File retrieval check is repeated until all uploaded files are retrieved from all nodes - // or until the timeout is reached. - REPEAT: - for { - for _, id := range nodeIDs { - //for each expected file, check if it is in the local store - item, ok := sim.NodeItem(id, bucketKeyFileStore) - if !ok { - return fmt.Errorf("No filestore") - } - fileStore := item.(*storage.FileStore) - //check all chunks - for i, hash := range conf.hashes { - reader, _ := fileStore.Retrieve(context.TODO(), hash) - //check that we can read the file size and that it corresponds to the generated file size - if s, err := reader.Size(ctx, nil); err != nil || s != int64(len(randomFiles[i])) { - log.Debug("Retrieve error", "err", err, "hash", hash, "nodeId", id) - time.Sleep(500 * time.Millisecond) - continue REPEAT - } - log.Debug(fmt.Sprintf("File with root hash %x successfully retrieved", hash)) - } - } - return nil - } - }) - - if result.Error != nil { - return result.Error - } - - return nil -} - -/* -The test generates the given number of chunks. - -The test loads a snapshot file to construct the swarm network, -assuming that the snapshot file identifies a healthy -kademlia network. Nevertheless a health check runs in the -simulation's `action` function. - -The snapshot should have 'streamer' in its service list. -*/ -func runRetrievalTest(t *testing.T, chunkCount int, nodeCount int) error { - t.Helper() - sim := simulation.New(retrievalSimServiceMap) - defer sim.Close() - - conf := &synctestConfig{} - //map of discover ID to indexes of chunks expected at that ID - conf.idToChunksMap = make(map[enode.ID][]int) - //map of overlay address to discover ID - conf.addrToIDMap = make(map[string]enode.ID) - //array where the generated chunk hashes will be stored - conf.hashes = make([]storage.Address, 0) - - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - return err - } - - ctx := context.Background() - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - nodeIDs := sim.UpNodeIDs() - for _, n := range nodeIDs { - //get the kademlia overlay address from this ID - a := n.Bytes() - //append it to the array of all overlay addresses - conf.addrs = append(conf.addrs, a) - //the proximity calculation is on overlay addr, - //the p2p/simulations check func triggers on enode.ID, - //so we need to know which overlay addr maps to which nodeID - conf.addrToIDMap[string(a)] = n - } - - //this is the node selected for upload - node := sim.Net.GetRandomUpNode() - item, ok := sim.NodeItem(node.ID(), bucketKeyStore) - if !ok { - return fmt.Errorf("No localstore") - } - lstore := item.(*storage.LocalStore) - conf.hashes, err = uploadFileToSingleNodeStore(node.ID(), chunkCount, lstore) - if err != nil { - return err - } - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - - // File retrieval check is repeated until all uploaded files are retrieved from all nodes - // or until the timeout is reached. - REPEAT: - for { - for _, id := range nodeIDs { - //for each expected chunk, check if it is in the local store - //check on the node's FileStore (netstore) - item, ok := sim.NodeItem(id, bucketKeyFileStore) - if !ok { - return fmt.Errorf("No filestore") - } - fileStore := item.(*storage.FileStore) - //check all chunks - for _, hash := range conf.hashes { - reader, _ := fileStore.Retrieve(context.TODO(), hash) - //check that we can read the chunk size and that it corresponds to the generated chunk size - if s, err := reader.Size(ctx, nil); err != nil || s != int64(chunkSize) { - log.Debug("Retrieve error", "err", err, "hash", hash, "nodeId", id, "size", s) - time.Sleep(500 * time.Millisecond) - continue REPEAT - } - log.Debug(fmt.Sprintf("Chunk with root hash %x successfully retrieved", hash)) - } - } - // all nodes and files found, exit loop and return without error - return nil - } - }) - - if result.Error != nil { - return result.Error - } - - return nil -} diff --git a/swarm/network/stream/snapshot_sync_test.go b/swarm/network/stream/snapshot_sync_test.go deleted file mode 100644 index b45d0aed5080..000000000000 --- a/swarm/network/stream/snapshot_sync_test.go +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package stream - -import ( - "context" - "errors" - "fmt" - "io/ioutil" - "os" - "runtime" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/pot" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/mock" - mockmem "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -const MaxTimeout = 600 - -type synctestConfig struct { - addrs [][]byte - hashes []storage.Address - idToChunksMap map[enode.ID][]int - //chunksToNodesMap map[string][]int - addrToIDMap map[string]enode.ID -} - -const ( - // EventTypeNode is the type of event emitted when a node is either - // created, started or stopped - EventTypeChunkCreated simulations.EventType = "chunkCreated" - EventTypeChunkOffered simulations.EventType = "chunkOffered" - EventTypeChunkWanted simulations.EventType = "chunkWanted" - EventTypeChunkDelivered simulations.EventType = "chunkDelivered" - EventTypeChunkArrived simulations.EventType = "chunkArrived" - EventTypeSimTerminated simulations.EventType = "simTerminated" -) - -// Tests in this file should not request chunks from peers. -// This function will panic indicating that there is a problem if request has been made. -func dummyRequestFromPeers(_ context.Context, req *network.Request) (*enode.ID, chan struct{}, error) { - panic(fmt.Sprintf("unexpected request: address %s, source %s", req.Addr.String(), req.Source.String())) -} - -//This test is a syncing test for nodes. -//One node is randomly selected to be the pivot node. -//A configurable number of chunks and nodes can be -//provided to the test, the number of chunks is uploaded -//to the pivot node, and we check that nodes get the chunks -//they are expected to store based on the syncing protocol. -//Number of chunks and nodes can be provided via commandline too. -func TestSyncingViaGlobalSync(t *testing.T) { - if runtime.GOOS == "darwin" && os.Getenv("TRAVIS") == "true" { - t.Skip("Flaky on mac on travis") - } - //if nodes/chunks have been provided via commandline, - //run the tests with these values - if *nodes != 0 && *chunks != 0 { - log.Info(fmt.Sprintf("Running test with %d chunks and %d nodes...", *chunks, *nodes)) - testSyncingViaGlobalSync(t, *chunks, *nodes) - } else { - var nodeCnt []int - var chnkCnt []int - //if the `longrunning` flag has been provided - //run more test combinations - if *longrunning { - chnkCnt = []int{1, 8, 32, 256, 1024} - nodeCnt = []int{16, 32, 64, 128, 256} - } else if raceTest { - // TestSyncingViaGlobalSync allocates a lot of memory - // with race detector. By reducing the number of chunks - // and nodes, memory consumption is lower and data races - // are still checked, while correctness of syncing is - // tested with more chunks and nodes in regular (!race) - // tests. - chnkCnt = []int{4} - nodeCnt = []int{16} - } else { - //default test - chnkCnt = []int{4, 32} - nodeCnt = []int{32, 16} - } - for _, chnk := range chnkCnt { - for _, n := range nodeCnt { - log.Info(fmt.Sprintf("Long running test with %d chunks and %d nodes...", chnk, n)) - testSyncingViaGlobalSync(t, chnk, n) - } - } - } -} - -var simServiceMap = map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDeliveryWithRequestFunc(ctx, bucket, dummyRequestFromPeers) - if err != nil { - return nil, nil, err - } - - var dir string - var store *state.DBStore - if raceTest { - // Use on-disk DBStore to reduce memory consumption in race tests. - dir, err = ioutil.TempDir("", "swarm-stream-") - if err != nil { - return nil, nil, err - } - store, err = state.NewDBStore(dir) - if err != nil { - return nil, nil, err - } - } else { - store = state.NewInmemoryStore() - } - - r := NewRegistry(addr.ID(), delivery, netStore, store, &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - SyncUpdateDelay: 3 * time.Second, - }, nil) - - bucket.Store(bucketKeyRegistry, r) - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, -} - -func testSyncingViaGlobalSync(t *testing.T, chunkCount int, nodeCount int) { - sim := simulation.New(simServiceMap) - defer sim.Close() - - log.Info("Initializing test config") - - conf := &synctestConfig{} - //map of discover ID to indexes of chunks expected at that ID - conf.idToChunksMap = make(map[enode.ID][]int) - //map of overlay address to discover ID - conf.addrToIDMap = make(map[string]enode.ID) - //array where the generated chunk hashes will be stored - conf.hashes = make([]storage.Address, 0) - - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - t.Fatal(err) - } - - ctx, cancelSimRun := context.WithTimeout(context.Background(), 2*time.Minute) - defer cancelSimRun() - - if _, err := sim.WaitTillHealthy(ctx); err != nil { - t.Fatal(err) - } - - result := runSim(conf, ctx, sim, chunkCount) - - if result.Error != nil { - t.Fatal(result.Error) - } - log.Info("Simulation ended") -} - -func runSim(conf *synctestConfig, ctx context.Context, sim *simulation.Simulation, chunkCount int) simulation.Result { - - return sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil && disconnected.bool() { - err = errors.New("disconnect events received") - } - }() - - nodeIDs := sim.UpNodeIDs() - for _, n := range nodeIDs { - //get the kademlia overlay address from this ID - a := n.Bytes() - //append it to the array of all overlay addresses - conf.addrs = append(conf.addrs, a) - //the proximity calculation is on overlay addr, - //the p2p/simulations check func triggers on enode.ID, - //so we need to know which overlay addr maps to which nodeID - conf.addrToIDMap[string(a)] = n - } - - //get the node at that index - //this is the node selected for upload - node := sim.Net.GetRandomUpNode() - item, ok := sim.NodeItem(node.ID(), bucketKeyStore) - if !ok { - return fmt.Errorf("No localstore") - } - lstore := item.(*storage.LocalStore) - hashes, err := uploadFileToSingleNodeStore(node.ID(), chunkCount, lstore) - if err != nil { - return err - } - for _, h := range hashes { - evt := &simulations.Event{ - Type: EventTypeChunkCreated, - Node: sim.Net.GetNode(node.ID()), - Data: h.String(), - } - sim.Net.Events().Send(evt) - } - conf.hashes = append(conf.hashes, hashes...) - mapKeysToNodes(conf) - - // File retrieval check is repeated until all uploaded files are retrieved from all nodes - // or until the timeout is reached. - var globalStore mock.GlobalStorer - if *useMockStore { - globalStore = mockmem.NewGlobalStore() - } - REPEAT: - for { - for _, id := range nodeIDs { - //for each expected chunk, check if it is in the local store - localChunks := conf.idToChunksMap[id] - for _, ch := range localChunks { - //get the real chunk by the index in the index array - chunk := conf.hashes[ch] - log.Trace(fmt.Sprintf("node has chunk: %s:", chunk)) - //check if the expected chunk is indeed in the localstore - var err error - if *useMockStore { - //use the globalStore if the mockStore should be used; in that case, - //the complete localStore stack is bypassed for getting the chunk - _, err = globalStore.Get(common.BytesToAddress(id.Bytes()), chunk) - } else { - //use the actual localstore - item, ok := sim.NodeItem(id, bucketKeyStore) - if !ok { - return fmt.Errorf("Error accessing localstore") - } - lstore := item.(*storage.LocalStore) - _, err = lstore.Get(ctx, chunk) - } - if err != nil { - log.Debug(fmt.Sprintf("Chunk %s NOT found for id %s", chunk, id)) - // Do not get crazy with logging the warn message - time.Sleep(500 * time.Millisecond) - continue REPEAT - } - evt := &simulations.Event{ - Type: EventTypeChunkArrived, - Node: sim.Net.GetNode(id), - Data: chunk.String(), - } - sim.Net.Events().Send(evt) - log.Debug(fmt.Sprintf("Chunk %s IS FOUND for id %s", chunk, id)) - } - } - return nil - } - }) -} - -//map chunk keys to addresses which are responsible -func mapKeysToNodes(conf *synctestConfig) { - nodemap := make(map[string][]int) - //build a pot for chunk hashes - np := pot.NewPot(nil, 0) - indexmap := make(map[string]int) - for i, a := range conf.addrs { - indexmap[string(a)] = i - np, _, _ = pot.Add(np, a, pof) - } - - ppmap := network.NewPeerPotMap(network.NewKadParams().NeighbourhoodSize, conf.addrs) - - //for each address, run EachNeighbour on the chunk hashes pot to identify closest nodes - log.Trace(fmt.Sprintf("Generated hash chunk(s): %v", conf.hashes)) - for i := 0; i < len(conf.hashes); i++ { - var a []byte - np.EachNeighbour([]byte(conf.hashes[i]), pof, func(val pot.Val, po int) bool { - // take the first address - a = val.([]byte) - return false - }) - - nns := ppmap[common.Bytes2Hex(a)].NNSet - nns = append(nns, a) - - for _, p := range nns { - nodemap[string(p)] = append(nodemap[string(p)], i) - } - } - for addr, chunks := range nodemap { - //this selects which chunks are expected to be found with the given node - conf.idToChunksMap[conf.addrToIDMap[addr]] = chunks - } - log.Debug(fmt.Sprintf("Map of expected chunks by ID: %v", conf.idToChunksMap)) -} - -//upload a file(chunks) to a single local node store -func uploadFileToSingleNodeStore(id enode.ID, chunkCount int, lstore *storage.LocalStore) ([]storage.Address, error) { - log.Debug(fmt.Sprintf("Uploading to node id: %s", id)) - fileStore := storage.NewFileStore(lstore, storage.NewFileStoreParams()) - size := chunkSize - var rootAddrs []storage.Address - for i := 0; i < chunkCount; i++ { - rk, wait, err := fileStore.Store(context.TODO(), testutil.RandomReader(i, size), int64(size), false) - if err != nil { - return nil, err - } - err = wait(context.TODO()) - if err != nil { - return nil, err - } - rootAddrs = append(rootAddrs, (rk)) - } - - return rootAddrs, nil -} diff --git a/swarm/network/stream/stream.go b/swarm/network/stream/stream.go deleted file mode 100644 index cb5912185002..000000000000 --- a/swarm/network/stream/stream.go +++ /dev/null @@ -1,967 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "errors" - "fmt" - "math" - "reflect" - "sync" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/stream/intervals" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - Low uint8 = iota - Mid - High - Top - PriorityQueue = 4 // number of priority queues - Low, Mid, High, Top - PriorityQueueCap = 4096 // queue capacity - HashSize = 32 -) - -// Enumerate options for syncing and retrieval -type SyncingOption int -type RetrievalOption int - -// Syncing options -const ( - // Syncing disabled - SyncingDisabled SyncingOption = iota - // Register the client and the server but not subscribe - SyncingRegisterOnly - // Both client and server funcs are registered, subscribe sent automatically - SyncingAutoSubscribe -) - -const ( - // Retrieval disabled. Used mostly for tests to isolate syncing features (i.e. syncing only) - RetrievalDisabled RetrievalOption = iota - // Only the client side of the retrieve request is registered. - // (light nodes do not serve retrieve requests) - // once the client is registered, subscription to retrieve request stream is always sent - RetrievalClientOnly - // Both client and server funcs are registered, subscribe sent automatically - RetrievalEnabled -) - -// subscriptionFunc is used to determine what to do in order to perform subscriptions -// usually we would start to really subscribe to nodes, but for tests other functionality may be needed -// (see TestRequestPeerSubscriptions in streamer_test.go) -var subscriptionFunc func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool = doRequestSubscription - -// Registry registry for outgoing and incoming streamer constructors -type Registry struct { - addr enode.ID - api *API - skipCheck bool - clientMu sync.RWMutex - serverMu sync.RWMutex - peersMu sync.RWMutex - serverFuncs map[string]func(*Peer, string, bool) (Server, error) - clientFuncs map[string]func(*Peer, string, bool) (Client, error) - peers map[enode.ID]*Peer - delivery *Delivery - intervalsStore state.Store - autoRetrieval bool // automatically subscribe to retrieve request stream - maxPeerServers int - spec *protocols.Spec //this protocol's spec - balance protocols.Balance //implements protocols.Balance, for accounting - prices protocols.Prices //implements protocols.Prices, provides prices to accounting -} - -// RegistryOptions holds optional values for NewRegistry constructor. -type RegistryOptions struct { - SkipCheck bool - Syncing SyncingOption // Defines syncing behavior - Retrieval RetrievalOption // Defines retrieval behavior - SyncUpdateDelay time.Duration - MaxPeerServers int // The limit of servers for each peer in registry -} - -// NewRegistry is Streamer constructor -func NewRegistry(localID enode.ID, delivery *Delivery, syncChunkStore storage.SyncChunkStore, intervalsStore state.Store, options *RegistryOptions, balance protocols.Balance) *Registry { - if options == nil { - options = &RegistryOptions{} - } - if options.SyncUpdateDelay <= 0 { - options.SyncUpdateDelay = 15 * time.Second - } - // check if retrieval has been disabled - retrieval := options.Retrieval != RetrievalDisabled - - streamer := &Registry{ - addr: localID, - skipCheck: options.SkipCheck, - serverFuncs: make(map[string]func(*Peer, string, bool) (Server, error)), - clientFuncs: make(map[string]func(*Peer, string, bool) (Client, error)), - peers: make(map[enode.ID]*Peer), - delivery: delivery, - intervalsStore: intervalsStore, - autoRetrieval: retrieval, - maxPeerServers: options.MaxPeerServers, - balance: balance, - } - - streamer.setupSpec() - - streamer.api = NewAPI(streamer) - delivery.getPeer = streamer.getPeer - - // if retrieval is enabled, register the server func, so that retrieve requests will be served (non-light nodes only) - if options.Retrieval == RetrievalEnabled { - streamer.RegisterServerFunc(swarmChunkServerStreamName, func(_ *Peer, _ string, live bool) (Server, error) { - if !live { - return nil, errors.New("only live retrieval requests supported") - } - return NewSwarmChunkServer(delivery.chunkStore), nil - }) - } - - // if retrieval is not disabled, register the client func (both light nodes and normal nodes can issue retrieve requests) - if options.Retrieval != RetrievalDisabled { - streamer.RegisterClientFunc(swarmChunkServerStreamName, func(p *Peer, t string, live bool) (Client, error) { - return NewSwarmSyncerClient(p, syncChunkStore, NewStream(swarmChunkServerStreamName, t, live)) - }) - } - - // If syncing is not disabled, the syncing functions are registered (both client and server) - if options.Syncing != SyncingDisabled { - RegisterSwarmSyncerServer(streamer, syncChunkStore) - RegisterSwarmSyncerClient(streamer, syncChunkStore) - } - - // if syncing is set to automatically subscribe to the syncing stream, start the subscription process - if options.Syncing == SyncingAutoSubscribe { - // latestIntC function ensures that - // - receiving from the in chan is not blocked by processing inside the for loop - // - the latest int value is delivered to the loop after the processing is done - // In context of NeighbourhoodDepthC: - // after the syncing is done updating inside the loop, we do not need to update on the intermediate - // depth changes, only to the latest one - latestIntC := func(in <-chan int) <-chan int { - out := make(chan int, 1) - - go func() { - defer close(out) - - for i := range in { - select { - case <-out: - default: - } - out <- i - } - }() - - return out - } - - go func() { - // wait for kademlia table to be healthy - time.Sleep(options.SyncUpdateDelay) - - kad := streamer.delivery.kad - depthC := latestIntC(kad.NeighbourhoodDepthC()) - addressBookSizeC := latestIntC(kad.AddrCountC()) - - // initial requests for syncing subscription to peers - streamer.updateSyncing() - - for depth := range depthC { - log.Debug("Kademlia neighbourhood depth change", "depth", depth) - - // Prevent too early sync subscriptions by waiting until there are no - // new peers connecting. Sync streams updating will be done after no - // peers are connected for at least SyncUpdateDelay period. - timer := time.NewTimer(options.SyncUpdateDelay) - // Hard limit to sync update delay, preventing long delays - // on a very dynamic network - maxTimer := time.NewTimer(3 * time.Minute) - loop: - for { - select { - case <-maxTimer.C: - // force syncing update when a hard timeout is reached - log.Trace("Sync subscriptions update on hard timeout") - // request for syncing subscription to new peers - streamer.updateSyncing() - break loop - case <-timer.C: - // start syncing as no new peers has been added to kademlia - // for some time - log.Trace("Sync subscriptions update") - // request for syncing subscription to new peers - streamer.updateSyncing() - break loop - case size := <-addressBookSizeC: - log.Trace("Kademlia address book size changed on depth change", "size", size) - // new peers has been added to kademlia, - // reset the timer to prevent early sync subscriptions - if !timer.Stop() { - <-timer.C - } - timer.Reset(options.SyncUpdateDelay) - } - } - timer.Stop() - maxTimer.Stop() - } - }() - } - - return streamer -} - -// This is an accounted protocol, therefore we need to provide a pricing Hook to the spec -// For simulations to be able to run multiple nodes and not override the hook's balance, -// we need to construct a spec instance per node instance -func (r *Registry) setupSpec() { - // first create the "bare" spec - r.createSpec() - // now create the pricing object - r.createPriceOracle() - // if balance is nil, this node has been started without swap support (swapEnabled flag is false) - if r.balance != nil && !reflect.ValueOf(r.balance).IsNil() { - // swap is enabled, so setup the hook - r.spec.Hook = protocols.NewAccounting(r.balance, r.prices) - } -} - -// RegisterClient registers an incoming streamer constructor -func (r *Registry) RegisterClientFunc(stream string, f func(*Peer, string, bool) (Client, error)) { - r.clientMu.Lock() - defer r.clientMu.Unlock() - - r.clientFuncs[stream] = f -} - -// RegisterServer registers an outgoing streamer constructor -func (r *Registry) RegisterServerFunc(stream string, f func(*Peer, string, bool) (Server, error)) { - r.serverMu.Lock() - defer r.serverMu.Unlock() - - r.serverFuncs[stream] = f -} - -// GetClient accessor for incoming streamer constructors -func (r *Registry) GetClientFunc(stream string) (func(*Peer, string, bool) (Client, error), error) { - r.clientMu.RLock() - defer r.clientMu.RUnlock() - - f := r.clientFuncs[stream] - if f == nil { - return nil, fmt.Errorf("stream %v not registered", stream) - } - return f, nil -} - -// GetServer accessor for incoming streamer constructors -func (r *Registry) GetServerFunc(stream string) (func(*Peer, string, bool) (Server, error), error) { - r.serverMu.RLock() - defer r.serverMu.RUnlock() - - f := r.serverFuncs[stream] - if f == nil { - return nil, fmt.Errorf("stream %v not registered", stream) - } - return f, nil -} - -func (r *Registry) RequestSubscription(peerId enode.ID, s Stream, h *Range, prio uint8) error { - // check if the stream is registered - if _, err := r.GetServerFunc(s.Name); err != nil { - return err - } - - peer := r.getPeer(peerId) - if peer == nil { - return fmt.Errorf("peer not found %v", peerId) - } - - if _, err := peer.getServer(s); err != nil { - if e, ok := err.(*notFoundError); ok && e.t == "server" { - // request subscription only if the server for this stream is not created - log.Debug("RequestSubscription ", "peer", peerId, "stream", s, "history", h) - return peer.Send(context.TODO(), &RequestSubscriptionMsg{ - Stream: s, - History: h, - Priority: prio, - }) - } - return err - } - log.Trace("RequestSubscription: already subscribed", "peer", peerId, "stream", s, "history", h) - return nil -} - -// Subscribe initiates the streamer -func (r *Registry) Subscribe(peerId enode.ID, s Stream, h *Range, priority uint8) error { - // check if the stream is registered - if _, err := r.GetClientFunc(s.Name); err != nil { - return err - } - - peer := r.getPeer(peerId) - if peer == nil { - return fmt.Errorf("peer not found %v", peerId) - } - - var to uint64 - if !s.Live && h != nil { - to = h.To - } - - err := peer.setClientParams(s, newClientParams(priority, to)) - if err != nil { - return err - } - if s.Live && h != nil { - if err := peer.setClientParams( - getHistoryStream(s), - newClientParams(getHistoryPriority(priority), h.To), - ); err != nil { - return err - } - } - - msg := &SubscribeMsg{ - Stream: s, - History: h, - Priority: priority, - } - log.Debug("Subscribe ", "peer", peerId, "stream", s, "history", h) - - return peer.SendPriority(context.TODO(), msg, priority, "") -} - -func (r *Registry) Unsubscribe(peerId enode.ID, s Stream) error { - peer := r.getPeer(peerId) - if peer == nil { - return fmt.Errorf("peer not found %v", peerId) - } - - msg := &UnsubscribeMsg{ - Stream: s, - } - log.Debug("Unsubscribe ", "peer", peerId, "stream", s) - - if err := peer.Send(context.TODO(), msg); err != nil { - return err - } - return peer.removeClient(s) -} - -// Quit sends the QuitMsg to the peer to remove the -// stream peer client and terminate the streaming. -func (r *Registry) Quit(peerId enode.ID, s Stream) error { - peer := r.getPeer(peerId) - if peer == nil { - log.Debug("stream quit: peer not found", "peer", peerId, "stream", s) - // if the peer is not found, abort the request - return nil - } - - msg := &QuitMsg{ - Stream: s, - } - log.Debug("Quit ", "peer", peerId, "stream", s) - - return peer.Send(context.TODO(), msg) -} - -func (r *Registry) Close() error { - return r.intervalsStore.Close() -} - -func (r *Registry) getPeer(peerId enode.ID) *Peer { - r.peersMu.RLock() - defer r.peersMu.RUnlock() - - return r.peers[peerId] -} - -func (r *Registry) setPeer(peer *Peer) { - r.peersMu.Lock() - r.peers[peer.ID()] = peer - metrics.GetOrRegisterGauge("registry.peers", nil).Update(int64(len(r.peers))) - r.peersMu.Unlock() -} - -func (r *Registry) deletePeer(peer *Peer) { - r.peersMu.Lock() - delete(r.peers, peer.ID()) - metrics.GetOrRegisterGauge("registry.peers", nil).Update(int64(len(r.peers))) - r.peersMu.Unlock() -} - -func (r *Registry) peersCount() (c int) { - r.peersMu.Lock() - c = len(r.peers) - r.peersMu.Unlock() - return -} - -// Run protocol run function -func (r *Registry) Run(p *network.BzzPeer) error { - sp := NewPeer(p.Peer, r) - r.setPeer(sp) - defer r.deletePeer(sp) - defer close(sp.quit) - defer sp.close() - - if r.autoRetrieval && !p.LightNode { - err := r.Subscribe(p.ID(), NewStream(swarmChunkServerStreamName, "", true), nil, Top) - if err != nil { - return err - } - } - - return sp.Run(sp.HandleMsg) -} - -// updateSyncing subscribes to SYNC streams by iterating over the -// kademlia connections and bins. If there are existing SYNC streams -// and they are no longer required after iteration, request to Quit -// them will be send to appropriate peers. -func (r *Registry) updateSyncing() { - kad := r.delivery.kad - // map of all SYNC streams for all peers - // used at the and of the function to remove servers - // that are not needed anymore - subs := make(map[enode.ID]map[Stream]struct{}) - r.peersMu.RLock() - for id, peer := range r.peers { - peer.serverMu.RLock() - for stream := range peer.servers { - if stream.Name == "SYNC" { - if _, ok := subs[id]; !ok { - subs[id] = make(map[Stream]struct{}) - } - subs[id][stream] = struct{}{} - } - } - peer.serverMu.RUnlock() - } - r.peersMu.RUnlock() - - // start requesting subscriptions from peers - r.requestPeerSubscriptions(kad, subs) - - // remove SYNC servers that do not need to be subscribed - for id, streams := range subs { - if len(streams) == 0 { - continue - } - peer := r.getPeer(id) - if peer == nil { - continue - } - for stream := range streams { - log.Debug("Remove sync server", "peer", id, "stream", stream) - err := r.Quit(peer.ID(), stream) - if err != nil && err != p2p.ErrShuttingDown { - log.Error("quit", "err", err, "peer", peer.ID(), "stream", stream) - } - } - } -} - -// requestPeerSubscriptions calls on each live peer in the kademlia table -// and sends a `RequestSubscription` to peers according to their bin -// and their relationship with kademlia's depth. -// Also check `TestRequestPeerSubscriptions` in order to understand the -// expected behavior. -// The function expects: -// * the kademlia -// * a map of subscriptions -// * the actual function to subscribe -// (in case of the test, it doesn't do real subscriptions) -func (r *Registry) requestPeerSubscriptions(kad *network.Kademlia, subs map[enode.ID]map[Stream]struct{}) { - - var startPo int - var endPo int - var ok bool - - // kademlia's depth - kadDepth := kad.NeighbourhoodDepth() - // request subscriptions for all nodes and bins - // nil as base takes the node's base; we need to pass 255 as `EachConn` runs - // from deepest bins backwards - kad.EachConn(nil, 255, func(p *network.Peer, po int) bool { - // nodes that do not provide stream protocol - // should not be subscribed, e.g. bootnodes - if !p.HasCap("stream") { - return true - } - //if the peer's bin is shallower than the kademlia depth, - //only the peer's bin should be subscribed - if po < kadDepth { - startPo = po - endPo = po - } else { - //if the peer's bin is equal or deeper than the kademlia depth, - //each bin from the depth up to k.MaxProxDisplay should be subscribed - startPo = kadDepth - endPo = kad.MaxProxDisplay - } - - for bin := startPo; bin <= endPo; bin++ { - //do the actual subscription - ok = subscriptionFunc(r, p, uint8(bin), subs) - } - return ok - }) -} - -// doRequestSubscription sends the actual RequestSubscription to the peer -func doRequestSubscription(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool { - log.Debug("Requesting subscription by registry:", "registry", r.addr, "peer", p.ID(), "bin", bin) - // bin is always less then 256 and it is safe to convert it to type uint8 - stream := NewStream("SYNC", FormatSyncBinKey(bin), true) - if streams, ok := subs[p.ID()]; ok { - // delete live and history streams from the map, so that it won't be removed with a Quit request - delete(streams, stream) - delete(streams, getHistoryStream(stream)) - } - err := r.RequestSubscription(p.ID(), stream, NewRange(0, 0), High) - if err != nil { - log.Debug("Request subscription", "err", err, "peer", p.ID(), "stream", stream) - return false - } - return true -} - -func (r *Registry) runProtocol(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := protocols.NewPeer(p, rw, r.spec) - bp := network.NewBzzPeer(peer) - np := network.NewPeer(bp, r.delivery.kad) - r.delivery.kad.On(np) - defer r.delivery.kad.Off(np) - return r.Run(bp) -} - -// HandleMsg is the message handler that delegates incoming messages -func (p *Peer) HandleMsg(ctx context.Context, msg interface{}) error { - switch msg := msg.(type) { - - case *SubscribeMsg: - return p.handleSubscribeMsg(ctx, msg) - - case *SubscribeErrorMsg: - return p.handleSubscribeErrorMsg(msg) - - case *UnsubscribeMsg: - return p.handleUnsubscribeMsg(msg) - - case *OfferedHashesMsg: - return p.handleOfferedHashesMsg(ctx, msg) - - case *TakeoverProofMsg: - return p.handleTakeoverProofMsg(ctx, msg) - - case *WantedHashesMsg: - return p.handleWantedHashesMsg(ctx, msg) - - case *ChunkDeliveryMsgRetrieval: - // handling chunk delivery is the same for retrieval and syncing, so let's cast the msg - return p.streamer.delivery.handleChunkDeliveryMsg(ctx, p, ((*ChunkDeliveryMsg)(msg))) - - case *ChunkDeliveryMsgSyncing: - // handling chunk delivery is the same for retrieval and syncing, so let's cast the msg - return p.streamer.delivery.handleChunkDeliveryMsg(ctx, p, ((*ChunkDeliveryMsg)(msg))) - - case *RetrieveRequestMsg: - return p.streamer.delivery.handleRetrieveRequestMsg(ctx, p, msg) - - case *RequestSubscriptionMsg: - return p.handleRequestSubscription(ctx, msg) - - case *QuitMsg: - return p.handleQuitMsg(msg) - - default: - return fmt.Errorf("unknown message type: %T", msg) - } -} - -type server struct { - Server - stream Stream - priority uint8 - currentBatch []byte - sessionIndex uint64 -} - -// setNextBatch adjusts passed interval based on session index and whether -// stream is live or history. It calls Server SetNextBatch with adjusted -// interval and returns batch hashes and their interval. -func (s *server) setNextBatch(from, to uint64) ([]byte, uint64, uint64, *HandoverProof, error) { - if s.stream.Live { - if from == 0 { - from = s.sessionIndex - } - if to <= from || from >= s.sessionIndex { - to = math.MaxUint64 - } - } else { - if (to < from && to != 0) || from > s.sessionIndex { - return nil, 0, 0, nil, nil - } - if to == 0 || to > s.sessionIndex { - to = s.sessionIndex - } - } - return s.SetNextBatch(from, to) -} - -// Server interface for outgoing peer Streamer -type Server interface { - // SessionIndex is called when a server is initialized - // to get the current cursor state of the stream data. - // Based on this index, live and history stream intervals - // will be adjusted before calling SetNextBatch. - SessionIndex() (uint64, error) - SetNextBatch(uint64, uint64) (hashes []byte, from uint64, to uint64, proof *HandoverProof, err error) - GetData(context.Context, []byte) ([]byte, error) - Close() -} - -type client struct { - Client - stream Stream - priority uint8 - sessionAt uint64 - to uint64 - next chan error - quit chan struct{} - - intervalsKey string - intervalsStore state.Store -} - -func peerStreamIntervalsKey(p *Peer, s Stream) string { - return p.ID().String() + s.String() -} - -func (c client) AddInterval(start, end uint64) (err error) { - i := &intervals.Intervals{} - err = c.intervalsStore.Get(c.intervalsKey, i) - if err != nil { - return err - } - i.Add(start, end) - return c.intervalsStore.Put(c.intervalsKey, i) -} - -func (c client) NextInterval() (start, end uint64, err error) { - i := &intervals.Intervals{} - err = c.intervalsStore.Get(c.intervalsKey, i) - if err != nil { - return 0, 0, err - } - start, end = i.Next() - return start, end, nil -} - -// Client interface for incoming peer Streamer -type Client interface { - NeedData(context.Context, []byte) func(context.Context) error - BatchDone(Stream, uint64, []byte, []byte) func() (*TakeoverProof, error) - Close() -} - -func (c *client) nextBatch(from uint64) (nextFrom uint64, nextTo uint64) { - if c.to > 0 && from >= c.to { - return 0, 0 - } - if c.stream.Live { - return from, 0 - } else if from >= c.sessionAt { - if c.to > 0 { - return from, c.to - } - return from, math.MaxUint64 - } - nextFrom, nextTo, err := c.NextInterval() - if err != nil { - log.Error("next intervals", "stream", c.stream) - return - } - if nextTo > c.to { - nextTo = c.to - } - if nextTo == 0 { - nextTo = c.sessionAt - } - return -} - -func (c *client) batchDone(p *Peer, req *OfferedHashesMsg, hashes []byte) error { - if tf := c.BatchDone(req.Stream, req.From, hashes, req.Root); tf != nil { - tp, err := tf() - if err != nil { - return err - } - - if err := p.SendPriority(context.TODO(), tp, c.priority, ""); err != nil { - return err - } - if c.to > 0 && tp.Takeover.End >= c.to { - return p.streamer.Unsubscribe(p.Peer.ID(), req.Stream) - } - return nil - } - // TODO: make a test case for testing if the interval is added when the batch is done - if err := c.AddInterval(req.From, req.To); err != nil { - return err - } - return nil -} - -func (c *client) close() { - select { - case <-c.quit: - default: - close(c.quit) - } - c.Close() -} - -// clientParams store parameters for the new client -// between a subscription and initial offered hashes request handling. -type clientParams struct { - priority uint8 - to uint64 - // signal when the client is created - clientCreatedC chan struct{} -} - -func newClientParams(priority uint8, to uint64) *clientParams { - return &clientParams{ - priority: priority, - to: to, - clientCreatedC: make(chan struct{}), - } -} - -func (c *clientParams) waitClient(ctx context.Context) error { - select { - case <-ctx.Done(): - return ctx.Err() - case <-c.clientCreatedC: - return nil - } -} - -func (c *clientParams) clientCreated() { - close(c.clientCreatedC) -} - -// GetSpec returns the streamer spec to callers -// This used to be a global variable but for simulations with -// multiple nodes its fields (notably the Hook) would be overwritten -func (r *Registry) GetSpec() *protocols.Spec { - return r.spec -} - -func (r *Registry) createSpec() { - // Spec is the spec of the streamer protocol - var spec = &protocols.Spec{ - Name: "stream", - Version: 8, - MaxMsgSize: 10 * 1024 * 1024, - Messages: []interface{}{ - UnsubscribeMsg{}, - OfferedHashesMsg{}, - WantedHashesMsg{}, - TakeoverProofMsg{}, - SubscribeMsg{}, - RetrieveRequestMsg{}, - ChunkDeliveryMsgRetrieval{}, - SubscribeErrorMsg{}, - RequestSubscriptionMsg{}, - QuitMsg{}, - ChunkDeliveryMsgSyncing{}, - }, - } - r.spec = spec -} - -// An accountable message needs some meta information attached to it -// in order to evaluate the correct price -type StreamerPrices struct { - priceMatrix map[reflect.Type]*protocols.Price - registry *Registry -} - -// Price implements the accounting interface and returns the price for a specific message -func (sp *StreamerPrices) Price(msg interface{}) *protocols.Price { - t := reflect.TypeOf(msg).Elem() - return sp.priceMatrix[t] -} - -// Instead of hardcoding the price, get it -// through a function - it could be quite complex in the future -func (sp *StreamerPrices) getRetrieveRequestMsgPrice() uint64 { - return uint64(1) -} - -// Instead of hardcoding the price, get it -// through a function - it could be quite complex in the future -func (sp *StreamerPrices) getChunkDeliveryMsgRetrievalPrice() uint64 { - return uint64(1) -} - -// createPriceOracle sets up a matrix which can be queried to get -// the price for a message via the Price method -func (r *Registry) createPriceOracle() { - sp := &StreamerPrices{ - registry: r, - } - sp.priceMatrix = map[reflect.Type]*protocols.Price{ - reflect.TypeOf(ChunkDeliveryMsgRetrieval{}): { - Value: sp.getChunkDeliveryMsgRetrievalPrice(), // arbitrary price for now - PerByte: true, - Payer: protocols.Receiver, - }, - reflect.TypeOf(RetrieveRequestMsg{}): { - Value: sp.getRetrieveRequestMsgPrice(), // arbitrary price for now - PerByte: false, - Payer: protocols.Sender, - }, - } - r.prices = sp -} - -func (r *Registry) Protocols() []p2p.Protocol { - return []p2p.Protocol{ - { - Name: r.spec.Name, - Version: r.spec.Version, - Length: r.spec.Length(), - Run: r.runProtocol, - }, - } -} - -func (r *Registry) APIs() []rpc.API { - return []rpc.API{ - { - Namespace: "stream", - Version: "3.0", - Service: r.api, - Public: true, - }, - } -} - -func (r *Registry) Start(server *p2p.Server) error { - log.Info("Streamer started") - return nil -} - -func (r *Registry) Stop() error { - return nil -} - -type Range struct { - From, To uint64 -} - -func NewRange(from, to uint64) *Range { - return &Range{ - From: from, - To: to, - } -} - -func (r *Range) String() string { - return fmt.Sprintf("%v-%v", r.From, r.To) -} - -func getHistoryPriority(priority uint8) uint8 { - if priority == 0 { - return 0 - } - return priority - 1 -} - -func getHistoryStream(s Stream) Stream { - return NewStream(s.Name, s.Key, false) -} - -type API struct { - streamer *Registry -} - -func NewAPI(r *Registry) *API { - return &API{ - streamer: r, - } -} - -func (api *API) SubscribeStream(peerId enode.ID, s Stream, history *Range, priority uint8) error { - return api.streamer.Subscribe(peerId, s, history, priority) -} - -func (api *API) UnsubscribeStream(peerId enode.ID, s Stream) error { - return api.streamer.Unsubscribe(peerId, s) -} - -/* -GetPeerSubscriptions is a API function which allows to query a peer for stream subscriptions it has. -It can be called via RPC. -It returns a map of node IDs with an array of string representations of Stream objects. -*/ -func (api *API) GetPeerSubscriptions() map[string][]string { - //create the empty map - pstreams := make(map[string][]string) - - //iterate all streamer peers - api.streamer.peersMu.RLock() - defer api.streamer.peersMu.RUnlock() - - for id, p := range api.streamer.peers { - var streams []string - //every peer has a map of stream servers - //every stream server represents a subscription - p.serverMu.RLock() - for s := range p.servers { - //append the string representation of the stream - //to the list for this peer - streams = append(streams, s.String()) - } - p.serverMu.RUnlock() - //set the array of stream servers to the map - pstreams[id.String()] = streams - } - return pstreams -} diff --git a/swarm/network/stream/streamer_test.go b/swarm/network/stream/streamer_test.go deleted file mode 100644 index e92ee378343f..000000000000 --- a/swarm/network/stream/streamer_test.go +++ /dev/null @@ -1,1357 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "bytes" - "context" - "errors" - "fmt" - "strconv" - "strings" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - p2ptest "github.com/ethereum/go-ethereum/p2p/testing" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "golang.org/x/crypto/sha3" -) - -func TestStreamerSubscribe(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", true) - err = streamer.Subscribe(tester.Nodes[0].ID(), stream, NewRange(0, 0), Top) - if err == nil || err.Error() != "stream foo not registered" { - t.Fatalf("Expected error %v, got %v", "stream foo not registered", err) - } -} - -func TestStreamerRequestSubscription(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", false) - err = streamer.RequestSubscription(tester.Nodes[0].ID(), stream, &Range{}, Top) - if err == nil || err.Error() != "stream foo not registered" { - t.Fatalf("Expected error %v, got %v", "stream foo not registered", err) - } -} - -var ( - hash0 = sha3.Sum256([]byte{0}) - hash1 = sha3.Sum256([]byte{1}) - hash2 = sha3.Sum256([]byte{2}) - hashesTmp = append(hash0[:], hash1[:]...) - hashes = append(hashesTmp, hash2[:]...) - corruptHashes = append(hashes[:40]) -) - -type testClient struct { - t string - wait0 chan bool - wait2 chan bool - batchDone chan bool - receivedHashes map[string][]byte -} - -func newTestClient(t string) *testClient { - return &testClient{ - t: t, - wait0: make(chan bool), - wait2: make(chan bool), - batchDone: make(chan bool), - receivedHashes: make(map[string][]byte), - } -} - -func (self *testClient) NeedData(ctx context.Context, hash []byte) func(context.Context) error { - self.receivedHashes[string(hash)] = hash - if bytes.Equal(hash, hash0[:]) { - return func(context.Context) error { - <-self.wait0 - return nil - } - } else if bytes.Equal(hash, hash2[:]) { - return func(context.Context) error { - <-self.wait2 - return nil - } - } - return nil -} - -func (self *testClient) BatchDone(Stream, uint64, []byte, []byte) func() (*TakeoverProof, error) { - close(self.batchDone) - return nil -} - -func (self *testClient) Close() {} - -type testServer struct { - t string - sessionIndex uint64 -} - -func newTestServer(t string, sessionIndex uint64) *testServer { - return &testServer{ - t: t, - sessionIndex: sessionIndex, - } -} - -func (s *testServer) SessionIndex() (uint64, error) { - return s.sessionIndex, nil -} - -func (self *testServer) SetNextBatch(from uint64, to uint64) ([]byte, uint64, uint64, *HandoverProof, error) { - return make([]byte, HashSize), from + 1, to + 1, nil, nil -} - -func (self *testServer) GetData(context.Context, []byte) ([]byte, error) { - return nil, nil -} - -func (self *testServer) Close() { -} - -func TestStreamerDownstreamSubscribeUnsubscribeMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterClientFunc("foo", func(p *Peer, t string, live bool) (Client, error) { - return newTestClient(t), nil - }) - - node := tester.Nodes[0] - - stream := NewStream("foo", "", true) - err = streamer.Subscribe(node.ID(), stream, NewRange(5, 8), Top) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges( - p2ptest.Exchange{ - Label: "Subscribe message", - Expects: []p2ptest.Expect{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, - // trigger OfferedHashesMsg to actually create the client - p2ptest.Exchange{ - Label: "OfferedHashes message", - Triggers: []p2ptest.Trigger{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: hashes, - From: 5, - To: 8, - Stream: stream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 2, - Msg: &WantedHashesMsg{ - Stream: stream, - Want: []byte{5}, - From: 9, - To: 0, - }, - Peer: node.ID(), - }, - }, - }, - ) - if err != nil { - t.Fatal(err) - } - - err = streamer.Unsubscribe(node.ID(), stream) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Unsubscribe message", - Expects: []p2ptest.Expect{ - { - Code: 0, - Msg: &UnsubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -func TestStreamerUpstreamSubscribeUnsubscribeMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", false) - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 10), nil - }) - - node := tester.Nodes[0] - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 6, - To: 9, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "unsubscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &UnsubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -func TestStreamerUpstreamSubscribeUnsubscribeMsgExchangeLive(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", true) - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 0), nil - }) - - node := tester.Nodes[0] - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 1, - To: 0, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "unsubscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &UnsubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -func TestStreamerUpstreamSubscribeErrorMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 0), nil - }) - - stream := NewStream("bar", "", true) - - node := tester.Nodes[0] - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 7, - Msg: &SubscribeErrorMsg{ - Error: "stream bar not registered", - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -func TestStreamerUpstreamSubscribeLiveAndHistory(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", true) - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 10), nil - }) - - node := tester.Nodes[0] - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: NewStream("foo", "", false), - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 6, - To: 9, - }, - Peer: node.ID(), - }, - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - From: 11, - To: 0, - Hashes: make([]byte, HashSize), - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -func TestStreamerDownstreamCorruptHashesMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", true) - - var tc *testClient - - streamer.RegisterClientFunc("foo", func(p *Peer, t string, live bool) (Client, error) { - tc = newTestClient(t) - return tc, nil - }) - - node := tester.Nodes[0] - - err = streamer.Subscribe(node.ID(), stream, NewRange(5, 8), Top) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Expects: []p2ptest.Expect{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, - p2ptest.Exchange{ - Label: "Corrupt offered hash message", - Triggers: []p2ptest.Trigger{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: corruptHashes, - From: 5, - To: 8, - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - if err != nil { - t.Fatal(err) - } - - expectedError := errors.New("Message handler error: (msg code 1): error invalid hashes length (len: 40)") - if err := tester.TestDisconnected(&p2ptest.Disconnect{Peer: node.ID(), Error: expectedError}); err != nil { - t.Fatal(err) - } -} - -func TestStreamerDownstreamOfferedHashesMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - stream := NewStream("foo", "", true) - - var tc *testClient - - streamer.RegisterClientFunc("foo", func(p *Peer, t string, live bool) (Client, error) { - tc = newTestClient(t) - return tc, nil - }) - - node := tester.Nodes[0] - - err = streamer.Subscribe(node.ID(), stream, NewRange(5, 8), Top) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Expects: []p2ptest.Expect{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, - p2ptest.Exchange{ - Label: "WantedHashes message", - Triggers: []p2ptest.Trigger{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: hashes, - From: 5, - To: 8, - Stream: stream, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 2, - Msg: &WantedHashesMsg{ - Stream: stream, - Want: []byte{5}, - From: 9, - To: 0, - }, - Peer: node.ID(), - }, - }, - }) - if err != nil { - t.Fatal(err) - } - - if len(tc.receivedHashes) != 3 { - t.Fatalf("Expected number of received hashes %v, got %v", 3, len(tc.receivedHashes)) - } - - close(tc.wait0) - - timeout := time.NewTimer(100 * time.Millisecond) - defer timeout.Stop() - - select { - case <-tc.batchDone: - t.Fatal("batch done early") - case <-timeout.C: - } - - close(tc.wait2) - - timeout2 := time.NewTimer(10000 * time.Millisecond) - defer timeout2.Stop() - - select { - case <-tc.batchDone: - case <-timeout2.C: - t.Fatal("timeout waiting batchdone call") - } - -} - -func TestStreamerRequestSubscriptionQuitMsgExchange(t *testing.T) { - tester, streamer, _, teardown, err := newStreamerTester(nil) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 10), nil - }) - - node := tester.Nodes[0] - - stream := NewStream("foo", "", true) - err = streamer.RequestSubscription(node.ID(), stream, NewRange(5, 8), Top) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges( - p2ptest.Exchange{ - Label: "RequestSubscription message", - Expects: []p2ptest.Expect{ - { - Code: 8, - Msg: &RequestSubscriptionMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - }, - p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - History: NewRange(5, 8), - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: NewStream("foo", "", false), - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 6, - To: 9, - }, - Peer: node.ID(), - }, - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - From: 11, - To: 0, - Hashes: make([]byte, HashSize), - }, - Peer: node.ID(), - }, - }, - }, - ) - if err != nil { - t.Fatal(err) - } - - err = streamer.Quit(node.ID(), stream) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Quit message", - Expects: []p2ptest.Expect{ - { - Code: 9, - Msg: &QuitMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - historyStream := getHistoryStream(stream) - - err = streamer.Quit(node.ID(), historyStream) - if err != nil { - t.Fatalf("Expected no error, got %v", err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Quit message", - Expects: []p2ptest.Expect{ - { - Code: 9, - Msg: &QuitMsg{ - Stream: historyStream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } -} - -// TestMaxPeerServersWithUnsubscribe creates a registry with a limited -// number of stream servers, and performs a test with subscriptions and -// unsubscriptions, checking if unsubscriptions will remove streams, -// leaving place for new streams. -func TestMaxPeerServersWithUnsubscribe(t *testing.T) { - var maxPeerServers = 6 - tester, streamer, _, teardown, err := newStreamerTester(&RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingDisabled, - MaxPeerServers: maxPeerServers, - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 0), nil - }) - - node := tester.Nodes[0] - - for i := 0; i < maxPeerServers+10; i++ { - stream := NewStream("foo", strconv.Itoa(i), true) - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 1, - To: 0, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "unsubscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 0, - Msg: &UnsubscribeMsg{ - Stream: stream, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - } -} - -// TestMaxPeerServersWithoutUnsubscribe creates a registry with a limited -// number of stream servers, and performs subscriptions to detect subscriptions -// error message exchange. -func TestMaxPeerServersWithoutUnsubscribe(t *testing.T) { - var maxPeerServers = 6 - tester, streamer, _, teardown, err := newStreamerTester(&RegistryOptions{ - MaxPeerServers: maxPeerServers, - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - streamer.RegisterServerFunc("foo", func(p *Peer, t string, live bool) (Server, error) { - return newTestServer(t, 0), nil - }) - - node := tester.Nodes[0] - - for i := 0; i < maxPeerServers+10; i++ { - stream := NewStream("foo", strconv.Itoa(i), true) - - if i >= maxPeerServers { - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 7, - Msg: &SubscribeErrorMsg{ - Error: ErrMaxPeerServers.Error(), - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - continue - } - - err = tester.TestExchanges(p2ptest.Exchange{ - Label: "Subscribe message", - Triggers: []p2ptest.Trigger{ - { - Code: 4, - Msg: &SubscribeMsg{ - Stream: stream, - Priority: Top, - }, - Peer: node.ID(), - }, - }, - Expects: []p2ptest.Expect{ - { - Code: 1, - Msg: &OfferedHashesMsg{ - Stream: stream, - HandoverProof: &HandoverProof{ - Handover: &Handover{}, - }, - Hashes: make([]byte, HashSize), - From: 1, - To: 0, - }, - Peer: node.ID(), - }, - }, - }) - - if err != nil { - t.Fatal(err) - } - } -} - -//TestHasPriceImplementation is to check that the Registry has a -//`Price` interface implementation -func TestHasPriceImplementation(t *testing.T) { - _, r, _, teardown, err := newStreamerTester(&RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingDisabled, - }) - if err != nil { - t.Fatal(err) - } - defer teardown() - - if r.prices == nil { - t.Fatal("No prices implementation available for the stream protocol") - } - - pricesInstance, ok := r.prices.(*StreamerPrices) - if !ok { - t.Fatal("`Registry` does not have the expected Prices instance") - } - price := pricesInstance.Price(&ChunkDeliveryMsgRetrieval{}) - if price == nil || price.Value == 0 || price.Value != pricesInstance.getChunkDeliveryMsgRetrievalPrice() { - t.Fatal("No prices set for chunk delivery msg") - } - - price = pricesInstance.Price(&RetrieveRequestMsg{}) - if price == nil || price.Value == 0 || price.Value != pricesInstance.getRetrieveRequestMsgPrice() { - t.Fatal("No prices set for chunk delivery msg") - } -} - -/* -TestRequestPeerSubscriptions is a unit test for stream's pull sync subscriptions. - -The test does: - * assign each connected peer to a bin map - * build up a known kademlia in advance - * run the EachConn function, which returns supposed subscription bins - * store all supposed bins per peer in a map - * check that all peers have the expected subscriptions - -This kad table and its peers are copied from network.TestKademliaCase1, -it represents an edge case but for the purpose of testing the -syncing subscriptions it is just fine. - -Addresses used in this test are discovered as part of the simulation network -in higher level tests for streaming. They were generated randomly. - -The resulting kademlia looks like this: -========================================================================= -Fri Dec 21 20:02:39 UTC 2018 KΛÐΞMLIΛ hive: queen's address: 7efef1 -population: 12 (12), MinProxBinSize: 2, MinBinSize: 2, MaxBinSize: 4 -000 2 8196 835f | 2 8196 (0) 835f (0) -001 2 2690 28f0 | 2 2690 (0) 28f0 (0) -002 2 4d72 4a45 | 2 4d72 (0) 4a45 (0) -003 1 646e | 1 646e (0) -004 3 769c 76d1 7656 | 3 769c (0) 76d1 (0) 7656 (0) -============ DEPTH: 5 ========================================== -005 1 7a48 | 1 7a48 (0) -006 1 7cbd | 1 7cbd (0) -007 0 | 0 -008 0 | 0 -009 0 | 0 -010 0 | 0 -011 0 | 0 -012 0 | 0 -013 0 | 0 -014 0 | 0 -015 0 | 0 -========================================================================= -*/ -func TestRequestPeerSubscriptions(t *testing.T) { - // the pivot address; this is the actual kademlia node - pivotAddr := "7efef1c41d77f843ad167be95f6660567eb8a4a59f39240000cce2e0d65baf8e" - - // a map of bin number to addresses from the given kademlia - binMap := make(map[int][]string) - binMap[0] = []string{ - "835fbbf1d16ba7347b6e2fc552d6e982148d29c624ea20383850df3c810fa8fc", - "81968a2d8fb39114342ee1da85254ec51e0608d7f0f6997c2a8354c260a71009", - } - binMap[1] = []string{ - "28f0bc1b44658548d6e05dd16d4c2fe77f1da5d48b6774bc4263b045725d0c19", - "2690a910c33ee37b91eb6c4e0731d1d345e2dc3b46d308503a6e85bbc242c69e", - } - binMap[2] = []string{ - "4a45f1fc63e1a9cb9dfa44c98da2f3d20c2923e5d75ff60b2db9d1bdb0c54d51", - "4d72a04ddeb851a68cd197ef9a92a3e2ff01fbbff638e64929dd1a9c2e150112", - } - binMap[3] = []string{ - "646e9540c84f6a2f9cf6585d45a4c219573b4fd1b64a3c9a1386fc5cf98c0d4d", - } - binMap[4] = []string{ - "7656caccdc79cd8d7ce66d415cc96a718e8271c62fb35746bfc2b49faf3eebf3", - "76d1e83c71ca246d042e37ff1db181f2776265fbcfdc890ce230bfa617c9c2f0", - "769ce86aa90b518b7ed382f9fdacfbed93574e18dc98fe6c342e4f9f409c2d5a", - } - binMap[5] = []string{ - "7a48f75f8ca60487ae42d6f92b785581b40b91f2da551ae73d5eae46640e02e8", - } - binMap[6] = []string{ - "7cbd42350bde8e18ae5b955b5450f8e2cef3419f92fbf5598160c60fd78619f0", - } - - // create the pivot's kademlia - addr := common.FromHex(pivotAddr) - k := network.NewKademlia(addr, network.NewKadParams()) - - // construct the peers and the kademlia - for _, binaddrs := range binMap { - for _, a := range binaddrs { - addr := common.FromHex(a) - k.On(network.NewPeer(&network.BzzPeer{BzzAddr: &network.BzzAddr{OAddr: addr}}, k)) - } - } - - // TODO: check kad table is same - // currently k.String() prints date so it will never be the same :) - // --> implement JSON representation of kad table - log.Debug(k.String()) - - // simulate that we would do subscriptions: just store the bin numbers - fakeSubscriptions := make(map[string][]int) - //after the test, we need to reset the subscriptionFunc to the default - defer func() { subscriptionFunc = doRequestSubscription }() - // define the function which should run for each connection - // instead of doing real subscriptions, we just store the bin numbers - subscriptionFunc = func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool { - // get the peer ID - peerstr := fmt.Sprintf("%x", p.Over()) - // create the array of bins per peer - if _, ok := fakeSubscriptions[peerstr]; !ok { - fakeSubscriptions[peerstr] = make([]int, 0) - } - // store the (fake) bin subscription - log.Debug(fmt.Sprintf("Adding fake subscription for peer %s with bin %d", peerstr, bin)) - fakeSubscriptions[peerstr] = append(fakeSubscriptions[peerstr], int(bin)) - return true - } - // create just a simple Registry object in order to be able to call... - r := &Registry{} - r.requestPeerSubscriptions(k, nil) - // calculate the kademlia depth - kdepth := k.NeighbourhoodDepth() - - // now, check that all peers have the expected (fake) subscriptions - // iterate the bin map - for bin, peers := range binMap { - // for every peer... - for _, peer := range peers { - // ...get its (fake) subscriptions - fakeSubsForPeer := fakeSubscriptions[peer] - // if the peer's bin is shallower than the kademlia depth... - if bin < kdepth { - // (iterate all (fake) subscriptions) - for _, subbin := range fakeSubsForPeer { - // ...only the peer's bin should be "subscribed" - // (and thus have only one subscription) - if subbin != bin || len(fakeSubsForPeer) != 1 { - t.Fatalf("Did not get expected subscription for bin < depth; bin of peer %s: %d, subscription: %d", peer, bin, subbin) - } - } - } else { //if the peer's bin is equal or higher than the kademlia depth... - // (iterate all (fake) subscriptions) - for i, subbin := range fakeSubsForPeer { - // ...each bin from the peer's bin number up to k.MaxProxDisplay should be "subscribed" - // as we start from depth we can use the iteration index to check - if subbin != i+kdepth { - t.Fatalf("Did not get expected subscription for bin > depth; bin of peer %s: %d, subscription: %d", peer, bin, subbin) - } - // the last "subscription" should be k.MaxProxDisplay - if i == len(fakeSubsForPeer)-1 && subbin != k.MaxProxDisplay { - t.Fatalf("Expected last subscription to be: %d, but is: %d", k.MaxProxDisplay, subbin) - } - } - } - } - } - // print some output - for p, subs := range fakeSubscriptions { - log.Debug(fmt.Sprintf("Peer %s has the following fake subscriptions: ", p)) - for _, bin := range subs { - log.Debug(fmt.Sprintf("%d,", bin)) - } - } -} - -// TestGetSubscriptions is a unit test for the api.GetPeerSubscriptions() function -func TestGetSubscriptions(t *testing.T) { - // create an amount of dummy peers - testPeerCount := 8 - // every peer will have this amount of dummy servers - testServerCount := 4 - // the peerMap which will store this data for the registry - peerMap := make(map[enode.ID]*Peer) - // create the registry - r := &Registry{} - api := NewAPI(r) - // call once, at this point should be empty - regs := api.GetPeerSubscriptions() - if len(regs) != 0 { - t.Fatal("Expected subscription count to be 0, but it is not") - } - - // now create a number of dummy servers for each node - for i := 0; i < testPeerCount; i++ { - addr := network.RandomAddr() - id := addr.ID() - p := &Peer{} - p.servers = make(map[Stream]*server) - for k := 0; k < testServerCount; k++ { - s := Stream{ - Name: strconv.Itoa(k), - Key: "", - Live: false, - } - p.servers[s] = &server{} - } - peerMap[id] = p - } - r.peers = peerMap - - // call the subscriptions again - regs = api.GetPeerSubscriptions() - // count how many (fake) subscriptions there are - cnt := 0 - for _, reg := range regs { - for range reg { - cnt++ - } - } - // check expected value - expectedCount := testPeerCount * testServerCount - if cnt != expectedCount { - t.Fatalf("Expected %d subscriptions, but got %d", expectedCount, cnt) - } -} - -/* -TestGetSubscriptionsRPC sets up a simulation network of `nodeCount` nodes, -starts the simulation, waits for SyncUpdateDelay in order to kick off -stream registration, then tests that there are subscriptions. -*/ -func TestGetSubscriptionsRPC(t *testing.T) { - - // arbitrarily set to 4 - nodeCount := 4 - // run with more nodes if `longrunning` flag is set - if *longrunning { - nodeCount = 64 - } - // set the syncUpdateDelay for sync registrations to start - syncUpdateDelay := 200 * time.Millisecond - // holds the msg code for SubscribeMsg - var subscribeMsgCode uint64 - var ok bool - var expectedMsgCount counter - - // this channel signalizes that the expected amount of subscriptiosn is done - allSubscriptionsDone := make(chan struct{}) - // after the test, we need to reset the subscriptionFunc to the default - defer func() { subscriptionFunc = doRequestSubscription }() - - // we use this subscriptionFunc for this test: just increases count and calls the actual subscription - subscriptionFunc = func(r *Registry, p *network.Peer, bin uint8, subs map[enode.ID]map[Stream]struct{}) bool { - expectedMsgCount.inc() - doRequestSubscription(r, p, bin, subs) - return true - } - // create a standard sim - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDeliveryWithRequestFunc(ctx, bucket, dummyRequestFromPeers) - if err != nil { - return nil, nil, err - } - - // configure so that sync registrations actually happen - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalEnabled, - Syncing: SyncingAutoSubscribe, //enable sync registrations - SyncUpdateDelay: syncUpdateDelay, - }, nil) - - // get the SubscribeMsg code - subscribeMsgCode, ok = r.GetSpec().GetCode(SubscribeMsg{}) - if !ok { - t.Fatal("Message code for SubscribeMsg not found") - } - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - ctx, cancelSimRun := context.WithTimeout(context.Background(), 1*time.Minute) - defer cancelSimRun() - - // upload a snapshot - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - t.Fatal(err) - } - - // setup the filter for SubscribeMsg - msgs := sim.PeerEvents( - context.Background(), - sim.NodeIDs(), - simulation.NewPeerEventsFilter().ReceivedMessages().Protocol("stream").MsgCode(subscribeMsgCode), - ) - - // strategy: listen to all SubscribeMsg events; after every event we wait - // if after `waitDuration` no more messages are being received, we assume the - // subscription phase has terminated! - - // the loop in this go routine will either wait for new message events - // or times out after 1 second, which signals that we are not receiving - // any new subscriptions any more - go func() { - //for long running sims, waiting 1 sec will not be enough - waitDuration := time.Duration(nodeCount/16) * time.Second - for { - select { - case <-ctx.Done(): - return - case m := <-msgs: // just reset the loop - if m.Error != nil { - log.Error("stream message", "err", m.Error) - continue - } - log.Trace("stream message", "node", m.NodeID, "peer", m.PeerID) - case <-time.After(waitDuration): - // one second passed, don't assume more subscriptions - allSubscriptionsDone <- struct{}{} - log.Info("All subscriptions received") - return - - } - } - }() - - //run the simulation - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - log.Info("Simulation running") - nodes := sim.Net.Nodes - - //wait until all subscriptions are done - select { - case <-allSubscriptionsDone: - case <-ctx.Done(): - return errors.New("Context timed out") - } - - log.Debug("Expected message count: ", "expectedMsgCount", expectedMsgCount.count()) - //now iterate again, this time we call each node via RPC to get its subscriptions - realCount := 0 - for _, node := range nodes { - //create rpc client - client, err := node.Client() - if err != nil { - return fmt.Errorf("create node 1 rpc client fail: %v", err) - } - - //ask it for subscriptions - pstreams := make(map[string][]string) - err = client.Call(&pstreams, "stream_getPeerSubscriptions") - if err != nil { - return fmt.Errorf("client call stream_getPeerSubscriptions: %v", err) - } - //length of the subscriptions can not be smaller than number of peers - log.Debug("node subscriptions", "node", node.String()) - for p, ps := range pstreams { - log.Debug("... with", "peer", p) - for _, s := range ps { - log.Debug(".......", "stream", s) - // each node also has subscriptions to RETRIEVE_REQUEST streams, - // we need to ignore those, we are only counting SYNC streams - if !strings.HasPrefix(s, "RETRIEVE_REQUEST") { - realCount++ - } - } - } - } - // every node is mutually subscribed to each other, so the actual count is half of it - emc := expectedMsgCount.count() - if realCount/2 != emc { - return fmt.Errorf("Real subscriptions and expected amount don't match; real: %d, expected: %d", realCount/2, emc) - } - return nil - }) - if result.Error != nil { - t.Fatal(result.Error) - } -} - -// counter is used to concurrently increment -// and read an integer value. -type counter struct { - v int - mu sync.RWMutex -} - -// Increment the counter. -func (c *counter) inc() { - c.mu.Lock() - defer c.mu.Unlock() - - c.v++ -} - -// Read the counter value. -func (c *counter) count() int { - c.mu.RLock() - defer c.mu.RUnlock() - - return c.v -} diff --git a/swarm/network/stream/syncer.go b/swarm/network/stream/syncer.go deleted file mode 100644 index 4fb8b9342b7c..000000000000 --- a/swarm/network/stream/syncer.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "strconv" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - BatchSize = 128 -) - -// SwarmSyncerServer implements an Server for history syncing on bins -// offered streams: -// * live request delivery with or without checkback -// * (live/non-live historical) chunk syncing per proximity bin -type SwarmSyncerServer struct { - po uint8 - store storage.SyncChunkStore - quit chan struct{} -} - -// NewSwarmSyncerServer is constructor for SwarmSyncerServer -func NewSwarmSyncerServer(po uint8, syncChunkStore storage.SyncChunkStore) (*SwarmSyncerServer, error) { - return &SwarmSyncerServer{ - po: po, - store: syncChunkStore, - quit: make(chan struct{}), - }, nil -} - -func RegisterSwarmSyncerServer(streamer *Registry, syncChunkStore storage.SyncChunkStore) { - streamer.RegisterServerFunc("SYNC", func(_ *Peer, t string, _ bool) (Server, error) { - po, err := ParseSyncBinKey(t) - if err != nil { - return nil, err - } - return NewSwarmSyncerServer(po, syncChunkStore) - }) - // streamer.RegisterServerFunc(stream, func(p *Peer) (Server, error) { - // return NewOutgoingProvableSwarmSyncer(po, db) - // }) -} - -// Close needs to be called on a stream server -func (s *SwarmSyncerServer) Close() { - close(s.quit) -} - -// GetData retrieves the actual chunk from netstore -func (s *SwarmSyncerServer) GetData(ctx context.Context, key []byte) ([]byte, error) { - chunk, err := s.store.Get(ctx, storage.Address(key)) - if err != nil { - return nil, err - } - return chunk.Data(), nil -} - -// SessionIndex returns current storage bin (po) index. -func (s *SwarmSyncerServer) SessionIndex() (uint64, error) { - return s.store.BinIndex(s.po), nil -} - -// GetBatch retrieves the next batch of hashes from the dbstore -func (s *SwarmSyncerServer) SetNextBatch(from, to uint64) ([]byte, uint64, uint64, *HandoverProof, error) { - var batch []byte - i := 0 - - var ticker *time.Ticker - defer func() { - if ticker != nil { - ticker.Stop() - } - }() - var wait bool - for { - if wait { - if ticker == nil { - ticker = time.NewTicker(1000 * time.Millisecond) - } - select { - case <-ticker.C: - case <-s.quit: - return nil, 0, 0, nil, nil - } - } - - metrics.GetOrRegisterCounter("syncer.setnextbatch.iterator", nil).Inc(1) - err := s.store.Iterator(from, to, s.po, func(key storage.Address, idx uint64) bool { - batch = append(batch, key[:]...) - i++ - to = idx - return i < BatchSize - }) - if err != nil { - return nil, 0, 0, nil, err - } - if len(batch) > 0 { - break - } - wait = true - } - - log.Trace("Swarm syncer offer batch", "po", s.po, "len", i, "from", from, "to", to, "current store count", s.store.BinIndex(s.po)) - return batch, from, to, nil, nil -} - -// SwarmSyncerClient -type SwarmSyncerClient struct { - store storage.SyncChunkStore - peer *Peer - stream Stream -} - -// NewSwarmSyncerClient is a contructor for provable data exchange syncer -func NewSwarmSyncerClient(p *Peer, store storage.SyncChunkStore, stream Stream) (*SwarmSyncerClient, error) { - return &SwarmSyncerClient{ - store: store, - peer: p, - stream: stream, - }, nil -} - -// // NewIncomingProvableSwarmSyncer is a contructor for provable data exchange syncer -// func NewIncomingProvableSwarmSyncer(po int, priority int, index uint64, sessionAt uint64, intervals []uint64, sessionRoot storage.Address, chunker *storage.PyramidChunker, store storage.ChunkStore, p Peer) *SwarmSyncerClient { -// retrieveC := make(storage.Chunk, chunksCap) -// RunChunkRequestor(p, retrieveC) -// storeC := make(storage.Chunk, chunksCap) -// RunChunkStorer(store, storeC) -// s := &SwarmSyncerClient{ -// po: po, -// priority: priority, -// sessionAt: sessionAt, -// start: index, -// end: index, -// nextC: make(chan struct{}, 1), -// intervals: intervals, -// sessionRoot: sessionRoot, -// sessionReader: chunker.Join(sessionRoot, retrieveC), -// retrieveC: retrieveC, -// storeC: storeC, -// } -// return s -// } - -// // StartSyncing is called on the Peer to start the syncing process -// // the idea is that it is called only after kademlia is close to healthy -// func StartSyncing(s *Streamer, peerId enode.ID, po uint8, nn bool) { -// lastPO := po -// if nn { -// lastPO = maxPO -// } -// -// for i := po; i <= lastPO; i++ { -// s.Subscribe(peerId, "SYNC", newSyncLabel("LIVE", po), 0, 0, High, true) -// s.Subscribe(peerId, "SYNC", newSyncLabel("HISTORY", po), 0, 0, Mid, false) -// } -// } - -// RegisterSwarmSyncerClient registers the client constructor function for -// to handle incoming sync streams -func RegisterSwarmSyncerClient(streamer *Registry, store storage.SyncChunkStore) { - streamer.RegisterClientFunc("SYNC", func(p *Peer, t string, live bool) (Client, error) { - return NewSwarmSyncerClient(p, store, NewStream("SYNC", t, live)) - }) -} - -// NeedData -func (s *SwarmSyncerClient) NeedData(ctx context.Context, key []byte) (wait func(context.Context) error) { - return s.store.FetchFunc(ctx, key) -} - -// BatchDone -func (s *SwarmSyncerClient) BatchDone(stream Stream, from uint64, hashes []byte, root []byte) func() (*TakeoverProof, error) { - // TODO: reenable this with putter/getter refactored code - // if s.chunker != nil { - // return func() (*TakeoverProof, error) { return s.TakeoverProof(stream, from, hashes, root) } - // } - return nil -} - -func (s *SwarmSyncerClient) Close() {} - -// base for parsing and formating sync bin key -// it must be 2 <= base <= 36 -const syncBinKeyBase = 36 - -// FormatSyncBinKey returns a string representation of -// Kademlia bin number to be used as key for SYNC stream. -func FormatSyncBinKey(bin uint8) string { - return strconv.FormatUint(uint64(bin), syncBinKeyBase) -} - -// ParseSyncBinKey parses the string representation -// and returns the Kademlia bin number. -func ParseSyncBinKey(s string) (uint8, error) { - bin, err := strconv.ParseUint(s, syncBinKeyBase, 8) - if err != nil { - return 0, err - } - return uint8(bin), nil -} diff --git a/swarm/network/stream/syncer_test.go b/swarm/network/stream/syncer_test.go deleted file mode 100644 index be0752a9d02e..000000000000 --- a/swarm/network/stream/syncer_test.go +++ /dev/null @@ -1,359 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package stream - -import ( - "context" - "errors" - "fmt" - "io/ioutil" - "math" - "os" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/mock" - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -const dataChunkCount = 200 - -func TestSyncerSimulation(t *testing.T) { - testSyncBetweenNodes(t, 2, dataChunkCount, true, 1) - // This test uses much more memory when running with - // race detector. Allow it to finish successfully by - // reducing its scope, and still check for data races - // with the smallest number of nodes. - if !raceTest { - testSyncBetweenNodes(t, 4, dataChunkCount, true, 1) - testSyncBetweenNodes(t, 8, dataChunkCount, true, 1) - testSyncBetweenNodes(t, 16, dataChunkCount, true, 1) - } -} - -func createMockStore(globalStore mock.GlobalStorer, id enode.ID, addr *network.BzzAddr) (lstore storage.ChunkStore, datadir string, err error) { - address := common.BytesToAddress(id.Bytes()) - mockStore := globalStore.NewNodeStore(address) - params := storage.NewDefaultLocalStoreParams() - - datadir, err = ioutil.TempDir("", "localMockStore-"+id.TerminalString()) - if err != nil { - return nil, "", err - } - params.Init(datadir) - params.BaseKey = addr.Over() - lstore, err = storage.NewLocalStore(params, mockStore) - if err != nil { - return nil, "", err - } - return lstore, datadir, nil -} - -func testSyncBetweenNodes(t *testing.T, nodes, chunkCount int, skipCheck bool, po uint8) { - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr := network.NewAddr(ctx.Config.Node()) - //hack to put addresses in same space - addr.OAddr[0] = byte(0) - - netStore, delivery, clean, err := newNetStoreAndDeliveryWithBzzAddr(ctx, bucket, addr) - if err != nil { - return nil, nil, err - } - - var dir string - var store *state.DBStore - if raceTest { - // Use on-disk DBStore to reduce memory consumption in race tests. - dir, err = ioutil.TempDir("", "swarm-stream-") - if err != nil { - return nil, nil, err - } - store, err = state.NewDBStore(dir) - if err != nil { - return nil, nil, err - } - } else { - store = state.NewInmemoryStore() - } - - r := NewRegistry(addr.ID(), delivery, netStore, store, &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - SkipCheck: skipCheck, - }, nil) - - cleanup = func() { - r.Close() - clean() - if dir != "" { - os.RemoveAll(dir) - } - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - // create context for simulation run - timeout := 30 * time.Second - ctx, cancel := context.WithTimeout(context.Background(), timeout) - // defer cancel should come before defer simulation teardown - defer cancel() - - _, err := sim.AddNodesAndConnectChain(nodes) - if err != nil { - t.Fatal(err) - } - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - nodeIDs := sim.UpNodeIDs() - - nodeIndex := make(map[enode.ID]int) - for i, id := range nodeIDs { - nodeIndex[id] = i - } - - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil && disconnected.bool() { - err = errors.New("disconnect events received") - } - }() - - // each node Subscribes to each other's swarmChunkServerStreamName - for j := 0; j < nodes-1; j++ { - id := nodeIDs[j] - client, err := sim.Net.GetNode(id).Client() - if err != nil { - return fmt.Errorf("node %s client: %v", id, err) - } - sid := nodeIDs[j+1] - client.CallContext(ctx, nil, "stream_subscribeStream", sid, NewStream("SYNC", FormatSyncBinKey(1), false), NewRange(0, 0), Top) - if err != nil { - return err - } - if j > 0 || nodes == 2 { - item, ok := sim.NodeItem(nodeIDs[j], bucketKeyFileStore) - if !ok { - return fmt.Errorf("No filestore") - } - fileStore := item.(*storage.FileStore) - size := chunkCount * chunkSize - _, wait, err := fileStore.Store(ctx, testutil.RandomReader(j, size), int64(size), false) - if err != nil { - return fmt.Errorf("fileStore.Store: %v", err) - } - wait(ctx) - } - } - // here we distribute chunks of a random file into stores 1...nodes - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - - // collect hashes in po 1 bin for each node - hashes := make([][]storage.Address, nodes) - totalHashes := 0 - hashCounts := make([]int, nodes) - for i := nodes - 1; i >= 0; i-- { - if i < nodes-1 { - hashCounts[i] = hashCounts[i+1] - } - item, ok := sim.NodeItem(nodeIDs[i], bucketKeyDB) - if !ok { - return fmt.Errorf("No DB") - } - netStore := item.(*storage.NetStore) - netStore.Iterator(0, math.MaxUint64, po, func(addr storage.Address, index uint64) bool { - hashes[i] = append(hashes[i], addr) - totalHashes++ - hashCounts[i]++ - return true - }) - } - var total, found int - for _, node := range nodeIDs { - i := nodeIndex[node] - - for j := i; j < nodes; j++ { - total += len(hashes[j]) - for _, key := range hashes[j] { - item, ok := sim.NodeItem(nodeIDs[j], bucketKeyDB) - if !ok { - return fmt.Errorf("No DB") - } - db := item.(*storage.NetStore) - _, err := db.Get(ctx, key) - if err == nil { - found++ - } - } - } - log.Debug("sync check", "node", node, "index", i, "bin", po, "found", found, "total", total) - } - if total == found && total > 0 { - return nil - } - return fmt.Errorf("Total not equallying found: total is %d", total) - }) - - if result.Error != nil { - t.Fatal(result.Error) - } -} - -//TestSameVersionID just checks that if the version is not changed, -//then streamer peers see each other -func TestSameVersionID(t *testing.T) { - //test version ID - v := uint(1) - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - }, nil) - bucket.Store(bucketKeyRegistry, r) - - //assign to each node the same version ID - r.spec.Version = v - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - //connect just two nodes - log.Info("Adding nodes to simulation") - _, err := sim.AddNodesAndConnectChain(2) - if err != nil { - t.Fatal(err) - } - - log.Info("Starting simulation") - ctx := context.Background() - //make sure they have time to connect - time.Sleep(200 * time.Millisecond) - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - //get the pivot node's filestore - nodes := sim.UpNodeIDs() - - item, ok := sim.NodeItem(nodes[0], bucketKeyRegistry) - if !ok { - return fmt.Errorf("No filestore") - } - registry := item.(*Registry) - - //the peers should connect, thus getting the peer should not return nil - if registry.getPeer(nodes[1]) == nil { - return errors.New("Expected the peer to not be nil, but it is") - } - return nil - }) - if result.Error != nil { - t.Fatal(result.Error) - } - log.Info("Simulation ended") -} - -//TestDifferentVersionID proves that if the streamer protocol version doesn't match, -//then the peers are not connected at streamer level -func TestDifferentVersionID(t *testing.T) { - //create a variable to hold the version ID - v := uint(0) - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDelivery(ctx, bucket) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - }, nil) - bucket.Store(bucketKeyRegistry, r) - - //increase the version ID for each node - v++ - r.spec.Version = v - - cleanup = func() { - r.Close() - clean() - } - - return r, cleanup, nil - }, - }) - defer sim.Close() - - //connect the nodes - log.Info("Adding nodes to simulation") - _, err := sim.AddNodesAndConnectChain(2) - if err != nil { - t.Fatal(err) - } - - log.Info("Starting simulation") - ctx := context.Background() - //make sure they have time to connect - time.Sleep(200 * time.Millisecond) - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - //get the pivot node's filestore - nodes := sim.UpNodeIDs() - - item, ok := sim.NodeItem(nodes[0], bucketKeyRegistry) - if !ok { - return fmt.Errorf("No filestore") - } - registry := item.(*Registry) - - //getting the other peer should fail due to the different version numbers - if registry.getPeer(nodes[1]) != nil { - return errors.New("Expected the peer to be nil, but it is not") - } - return nil - }) - if result.Error != nil { - t.Fatal(result.Error) - } - log.Info("Simulation ended") - -} diff --git a/swarm/network/stream/testing/snapshot_128.json b/swarm/network/stream/testing/snapshot_128.json deleted file mode 100644 index 9b5eb501d3ac..000000000000 --- a/swarm/network/stream/testing/snapshot_128.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","private_key":"73015943fd2c673001da6bf6658a12a22e057fc545ac0ebc78421f90f1370093","name":"node_a9e0b763852706722dc904b494293f9399c0fa32255890aa720285b8160335bb618f36b68a81b875a805384179f600defef474d486b4ea04b003ef6477ab7907","services":["streamer"],"enable_msg_events":true,"port":63042},"up":true}},{"node":{"config":{"id":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","private_key":"89cbfe6d806f2aeaee6a59667df3c3059ff7531bb33d64661586b004fcb6b831","name":"node_87e696a354d249493217dc4e0190082f30e09616873803efa376871d4b34f86f0eeb4643d4822d8a0fbcdedb27cd6ba5438e98943d358d960c4835e82261c93e","services":["streamer"],"enable_msg_events":true,"port":63043},"up":true}},{"node":{"config":{"id":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","private_key":"ff2ac479a33dc7fff5f87e4bb3078dfbcbb1567b76e35792faf104a383ebf896","name":"node_18bb6572965f4263c5a4d59a73027abc57a46122125ee58d871e95c993e6a1e8230438ce696a5f8880a08749837268b54319f7b0aa254c1a5bd453a8e9bcf84f","services":["streamer"],"enable_msg_events":true,"port":63044},"up":true}},{"node":{"config":{"id":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","private_key":"4800e21ac6431c61873444c525e207b48bb7a09ba2793b482ba6cf8cce81e353","name":"node_3103510e00a3f49a5e715719049fc8c9c67a2373a548f326458aeb6d9c75ed92b94373638fd075def0209113b4e85d972c23f064539f7b041596184e40d7f9a2","services":["streamer"],"enable_msg_events":true,"port":63045},"up":true}},{"node":{"config":{"id":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","private_key":"7e26b011ae2eabac951145e7840169b1f279577c06c40b4ba3a62da3ddb58de5","name":"node_077d2d032874e5ce70e9b928b7fe72c0326ba92394e16245e31d48b5731d3d32bfd86acf40825decff54bcd735e9ebfd94eba677c418ea7007baec9db4af676d","services":["streamer"],"enable_msg_events":true,"port":63046},"up":true}},{"node":{"config":{"id":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","private_key":"1fbf6b44eeb20ef012046cf8b7d3400ef3e586586aaf1cf6a2e5115ff5e3d868","name":"node_d90a81a583c82d626b92f27244f027da4a0ae76e6d3bdc1de0af7be01798f1fb04b34ce60c6d8651a39d7a70915438a4aa63e5adf844a9f7e38dbf0b1dba754d","services":["streamer"],"enable_msg_events":true,"port":63047},"up":true}},{"node":{"config":{"id":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","private_key":"f32eafbb366e4b7655d302a06aac2e62ff8f4b9c07bb18175e58e534193b8554","name":"node_31ac37862416c0e229c4a088ec179f23bdd1bf12dd464eb11c630ad531d7c3438671862e5458e2f6fbb32b857f857e6b8c17e5d93eb29a0e78bb5a65d7eb648c","services":["streamer"],"enable_msg_events":true,"port":63048},"up":true}},{"node":{"config":{"id":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","private_key":"6a809d9de0380db0b8bae8769cf41f9b05576137d0e2eefa69b7ddd921c6ac77","name":"node_1e3c83cabbe6852c987ae521b7fcb33185cf855c59b6235ebb8e57a6f860ccc159ddc01b4a21d251c8faca4559ceb271e046a51493ba148c0d3aed97ad208969","services":["streamer"],"enable_msg_events":true,"port":63049},"up":true}},{"node":{"config":{"id":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","private_key":"f23b80b698ec97210ddaa65807a07cee7b411018ddd96c9d700e92a83120cf9e","name":"node_2fdb4382c4bc2950948a8cff13a7df65627bc0b20661cae20fd29acab166c97701594ee3151d75c006ba86d1d68b624b1d1f78e3d1e2fc297844956ef82208a8","services":["streamer"],"enable_msg_events":true,"port":63050},"up":true}},{"node":{"config":{"id":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","private_key":"d2d74e454118a6e150810c74080ee7707b92b4575e7fe13c8887caf521cc734d","name":"node_87fce129511a1be2777052d24b606acdfe7067f4e874ab04674a68664b378ea208975f7269a72af889d3d23cd930b6a181afa2cdef3f9f9491f715bd96ad8dc0","services":["streamer"],"enable_msg_events":true,"port":63051},"up":true}},{"node":{"config":{"id":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","private_key":"cdc72a1d2e475117e77abccdee1816e4d84fb059d712b717e8bd063239b6fd58","name":"node_c773af3af01ee8ab9fa8d06987baf4f10c394fdd386d69b7a7362f4b68fd6fc082337d3b33a19d584c5801a3e9198225d7b61f6629e34ce823be70908339f4c7","services":["streamer"],"enable_msg_events":true,"port":63052},"up":true}},{"node":{"config":{"id":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","private_key":"b1b2452fe8ea070ff3b181fdc538144e1231f0c6f467713712662375dc6c4bb1","name":"node_56b25623ac935f3a8aac1e2603a6bd15ace1e5714671954b47f2cab960cf47922828f415105602408d0a732a893ebeea6f9afab7f889bb235c81589548d09391","services":["streamer"],"enable_msg_events":true,"port":63053},"up":true}},{"node":{"config":{"id":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","private_key":"e87535b0ec914ff93ea21f722eff61dd6cfea4f5542f68aab0af93c58e2afc25","name":"node_09b60de1e85bb6f7d2caf5b1ab58204d7d04531ece300dcd7bcc9157b8b3ef2a182758808a0eec6056034f29f52caadb7c690f498c1c8832ff7a6a9ecff308bd","services":["streamer"],"enable_msg_events":true,"port":63054},"up":true}},{"node":{"config":{"id":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","private_key":"3ae9a961f597c04b695a6d25fd0e6e47b131854f55f89d8ac25cce7411aa4107","name":"node_f2ea93f43be9d0c3fa21f1496dc13c778977a6afdcba24c8b146de7dca2cdde62a5b792aab969e5b4b6c56f63066b336580d911f206049cc24cac32a25fc4306","services":["streamer"],"enable_msg_events":true,"port":63055},"up":true}},{"node":{"config":{"id":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","private_key":"1676fda16b41e3ec275f0d30ad691055248be71252ad15422b9c0260671aaf4c","name":"node_872cdbb6d74fb55fd2d51877ef7804bdd2eeb6de0297eb2ce18b67e52379b147d54a46d2385ec9293eb21736bed4191d92c5c75e8e81fc5a6c691970e019f570","services":["streamer"],"enable_msg_events":true,"port":63056},"up":true}},{"node":{"config":{"id":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","private_key":"6c989b24f2387e5a639effc8cd15b6d60c587fd14615496c9463d1f1a7ff6ad5","name":"node_da3e0fd71eb96ba2cab7f920d32f5425d1aad41d00765fdffb0b215d9dd5b60e2bc5929eafebee5b2b5a11aec164e141beff19d828aac7d1fabd3ffb0bfb8450","services":["streamer"],"enable_msg_events":true,"port":63057},"up":true}},{"node":{"config":{"id":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","private_key":"a1befe78e67ca8b4972ba564c3bd03ad2ca6b996ded22166468d7a268a4c77d3","name":"node_489660042a8867d90a16ebb013968db26ca3edfc70f53320f511e35b3703eed09fbd787be5c06726a570a54aa15d129cd10db741523adf297929f909be4a0c71","services":["streamer"],"enable_msg_events":true,"port":63058},"up":true}},{"node":{"config":{"id":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","private_key":"6b9ad7d1da45cff60c3bdcac68f0af30e0a6e0e30e4ad73731c00368e9b0254a","name":"node_4448a59bde9edb93edcdb4a77f3e2277b9c01ffea45496ee0533eb5192955a08a0f982e25cf772e0dae68735a55b7acd221f6ba7b134f1e999087bee182330e8","services":["streamer"],"enable_msg_events":true,"port":63059},"up":true}},{"node":{"config":{"id":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","private_key":"157e46312708757a331443dd95e1a0c012502430f4a8f8756f0aeaf35bde1f6d","name":"node_73319a301ad3cf0ec09549d817c9523d61b74abb0cad87b737d41d900321e52722a84355f6f87bc7a5f848818c89a021bb0f3e5994f67c9a7b5bbfc98188a376","services":["streamer"],"enable_msg_events":true,"port":63060},"up":true}},{"node":{"config":{"id":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","private_key":"11148e1d9812b7bb8870b7960332ba4b32ea6aa43a57f9a27c30c2fafb609570","name":"node_caad8529d498a4a1e1ba7573689a913500bd409345ef8e3656abca748269eb73b919282f7f2eb0087f81f7bc52c367657ac8be0cdac65d2490c7c50c874444b7","services":["streamer"],"enable_msg_events":true,"port":63061},"up":true}},{"node":{"config":{"id":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","private_key":"896c3ee65d71ddcbf6030b920c0bf7748971170583e45fa2e33c19b3222e3945","name":"node_44462055ba68fdef337dd19d8123aace9a12284c13bc97687416b6b4ca0c94234ba7db6823651fc021d6ac1539e0c5321e763a7a12c9e7c8a583aac5369817d8","services":["streamer"],"enable_msg_events":true,"port":63062},"up":true}},{"node":{"config":{"id":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","private_key":"043c2adc5bdb3449b2f770e1207eac21128e77e89c9e1fe8876cecf1792f8b24","name":"node_ecbdca037cd7892752345b48b4219478b1b334f83ce7140fcc72eb71784436b690ce7a41b03e013cefc19d64a34a20cfef1b9e2b535d938bcdcb39fe63645a42","services":["streamer"],"enable_msg_events":true,"port":63063},"up":true}},{"node":{"config":{"id":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","private_key":"88f2cc06ba260e7c09cdd93e48c55c000d7a988ef65ccfc5331d1eac3c66d7b1","name":"node_51ba4faf0988717a37dcddc0a60a70ead33bde310184fc450f9ca73c67f931e6767ad5930bcf409e5aeb613a9ff7a03e47de6fc13b33d8af0b87b38822ae6888","services":["streamer"],"enable_msg_events":true,"port":63064},"up":true}},{"node":{"config":{"id":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","private_key":"8c64fc376a830b9237a1d1609a24e18396eb82cd6cd64b8ff572c9f946aaab2c","name":"node_750ca601f07d65f426f6ea5f34e06238f9d7a931f022f9b0ebc811943d3725500cb3c6f00c8d05eb8d5b353c6534136dff38b9a8d3d4dc5bf49cd96875704d07","services":["streamer"],"enable_msg_events":true,"port":63065},"up":true}},{"node":{"config":{"id":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","private_key":"545e42fc4dfd38b62f1481fe46895a3cb9c6632930c8df8358d66a3988e6fe72","name":"node_41994605708232b4ca7448c3bc0760a7b86bf26d442091e5ce6e92eac94925721d7e0eca04bdd03bb1bba1ef92deeccd4bf1b7c6c3318b7e8d031965c6646761","services":["streamer"],"enable_msg_events":true,"port":63066},"up":true}},{"node":{"config":{"id":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","private_key":"3e5b24d432307724a3e619c479ad5c87a93c6ee96d2b6ab0dad17da7e84eea55","name":"node_28afc20d8f4779b285bb14870062dbb54796ec77623302e51bc1bafed9e2c35751c8469ffc482718e059875dfa2226195ed10999e251498cba3a444896cb67db","services":["streamer"],"enable_msg_events":true,"port":63067},"up":true}},{"node":{"config":{"id":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","private_key":"cab0eaf666548a84a7ceb4a34a29b7079c66b0df29e7fd315e851e02a8c9a5ed","name":"node_805d784527be4e32e84ddf045baee1ccf348cdf8288de3aae1a5379f762576b957525ef358d9b42c68a93394017880adc09bb2b1b5e01102dc7e4240baf2af95","services":["streamer"],"enable_msg_events":true,"port":63068},"up":true}},{"node":{"config":{"id":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","private_key":"8c48ba58bc5ac8c0f3f0295c73df1572e80465f15a97f1c5537735474b11da89","name":"node_9c6dcfef0e128dbfeca58b8ac625b08fb447b0d579bd3f18bc0e2be60d1ec2274595d0554ddba0ca7eb660099d3ea146d8076792b46c93841d2ecf8cf608f5ba","services":["streamer"],"enable_msg_events":true,"port":63069},"up":true}},{"node":{"config":{"id":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","private_key":"0939af4a1ac3398bd818e5ac35e1003530a80a0abba5bf4c586664ab0b15a391","name":"node_6ce3a68cb1e2924ad97f22006094c709a3dd8b4ca1546fbb037f841a9e5ac62def242015dbf6221bda610153db064edcbb58a78a35a06077b8c02bf5b2a33c04","services":["streamer"],"enable_msg_events":true,"port":63070},"up":true}},{"node":{"config":{"id":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","private_key":"bfdc13ed4844405928ae3f67e209353779af203143a9f43fd8d1fc899ddd56a7","name":"node_178d5ce398a7114a63a0c953a59932e769891420f6b1544f08c082cd37b531b66757652d279b3036b03b04f8d46eceb0b46fb95646c6668e2921af75c06c3d97","services":["streamer"],"enable_msg_events":true,"port":63071},"up":true}},{"node":{"config":{"id":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","private_key":"d52f5bca67f434e20d72348971b791cb18def6182b002a3342c721ed06e9ad84","name":"node_59730132a01ba848a3c050bb6234bca9a72deba33716960fc3ec89b186bfcd313b9bbf049939d5805ff98db2c53a9421ce6ec97d8b4cdbaea53ba264d80d0734","services":["streamer"],"enable_msg_events":true,"port":63072},"up":true}},{"node":{"config":{"id":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","private_key":"7d5751c36a856dbc2403a058a432e1f2bd142ae438444db9febdaa22480dd404","name":"node_93987e431a0058f2e942ccf8d3486d249cd2734d6494131b343e2c3a8fdd86cfcb12d0aaaf8fcb911ad3cdd682cc82118198195a7fdc915ab7853223f012eab6","services":["streamer"],"enable_msg_events":true,"port":63073},"up":true}},{"node":{"config":{"id":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","private_key":"5cb8cc7f27d0f0e28e9ca55b592a38839058155cfce8528b5a464f98025eb54d","name":"node_665c3288c14dc1c17d85d17d634910f42183482c7e77c47e68f9b4f475b93e8c152246b9e34781606315ff6ef0f8360342500d15e4a2d67d9df6b72f30af64a7","services":["streamer"],"enable_msg_events":true,"port":63074},"up":true}},{"node":{"config":{"id":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","private_key":"3901f39cd02354a635723259be3a5e7c28de3f7406c889fc9353d3adb22b9d82","name":"node_562119edffe8270f6f7a5ad9b13d4c65d643e52a2331d1fee16f7e9b5567f44cfea62df3e8965a22cf08db8fa918f0a0bcae8da2936677e6d25bc88ed85ed2f1","services":["streamer"],"enable_msg_events":true,"port":63075},"up":true}},{"node":{"config":{"id":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","private_key":"4e740dfca715720a19f56d32d6b9783810e1d6da09425e01dfbe3b55714416c0","name":"node_2502fc8ee0ccda79ad1dbd9c7cec625da85980b9116bdd56dc367d508039e25e5f65183293006e5b0df72fa9037a48bd2b133a757940d3587ff77ae2392e3eaf","services":["streamer"],"enable_msg_events":true,"port":63076},"up":true}},{"node":{"config":{"id":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","private_key":"765219c4fea7ac80a0c5d26a096829226933310ad22d889ee19eb23915363fda","name":"node_e9f7e58fda4b504275441d51929fbc98214abdc9ed552c7aa94c600a85d4e791d60c032304b29ae028adccec94984fc9a3d705a81462632f50ef45024eb0f64e","services":["streamer"],"enable_msg_events":true,"port":63077},"up":true}},{"node":{"config":{"id":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","private_key":"edf1f1608ee4b7c320472a071f2d60d53c7b74e58fba190b5353e92056f30751","name":"node_9e6c1c6e871638182c4b54ac89352ef5c2bca0a99424a1369013e7c182883da0e8d7ab96b3c8254c31fa315b941d8ddee153157626821fc78c2cae951c1c9053","services":["streamer"],"enable_msg_events":true,"port":63078},"up":true}},{"node":{"config":{"id":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","private_key":"16e405179555f907062a85c408713f0fa46a5f1f6714c99272bb705ae226b2a5","name":"node_bfef26733f5196a11484bcc28d88776e747189ae7cec883ff39a27cfeee6d9d1efb34560c9f8e75eec43fc069a2ce5f0c78107a36cc8a569d37bd5306aecf23a","services":["streamer"],"enable_msg_events":true,"port":63079},"up":true}},{"node":{"config":{"id":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","private_key":"8337241aad3fa93ccc78bab1ff15a2aa218fbd7d026bffe74b7dadd8e6aa787f","name":"node_f6a07a1d361a4671e997d5eaadae61736291aff3896cb69f06bbc19bf7536dd152e0b15422b2fd9f8a9d2f9a251c9a07d0140319900e2cc9f25a59025c7dc91f","services":["streamer"],"enable_msg_events":true,"port":63080},"up":true}},{"node":{"config":{"id":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","private_key":"af0eb33b99b22cff74cc8137b4bb9477f8f47c895a61807279436daefaf9cac8","name":"node_08900197e74e285a5a8a9cc53fbd420bb35043ab27eb2d9eab22615e736a093abfa235c17f667dcc791cb50b9022082eafd9fba030194cc84f0358b769adc85b","services":["streamer"],"enable_msg_events":true,"port":63081},"up":true}},{"node":{"config":{"id":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","private_key":"3c9a377e5ae9212adee118e04b3cd9cead5b4830ee51492dffbec8f015b5b757","name":"node_afb5754b4748b7ac5628e32b242c90aab0e2fc7da58d8d5c8c775d13d8a6fd32240f1b89021587858168cbe7b3ea7ad07807728655eae0a9907060494a7c99ca","services":["streamer"],"enable_msg_events":true,"port":63082},"up":true}},{"node":{"config":{"id":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","private_key":"5ccc64d0c951c9f50f0f7053504f54f965e22a22fb06b0bd14f206d72d822fa6","name":"node_8f625a4e4f4fd980c796d3aa535e58a39722492480cf6982d43fab02de63a5b4c1b5c7cd8402171dd792bb5d9c3e2bdd38176c061dbe3e5b0592af1339e3fd82","services":["streamer"],"enable_msg_events":true,"port":63083},"up":true}},{"node":{"config":{"id":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","private_key":"f44a9e23990fd65de4da61711cb5a720a4474421ea0a653c7ce5ed76149b335d","name":"node_ab3814579882e9fd8d464f4f3c8a421be37822ba7f42c5f5e787e81125ec032f9ccf90a138c0b57f0a813b55b583f80d66284f795e2c82d80d2869e1fc770be5","services":["streamer"],"enable_msg_events":true,"port":63084},"up":true}},{"node":{"config":{"id":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","private_key":"4fd7ee5ba8003bb9b914612e6283cf5738550412c71e4475e07eb8bef32e96a4","name":"node_670949178a5fad22da03af1e206c814a797c0e9eb4e3371f83612f121e5b56e767706a3ae36628cd0c86dd7bd1586ca4df57e2de27b28a31284ecf9176d330e5","services":["streamer"],"enable_msg_events":true,"port":63085},"up":true}},{"node":{"config":{"id":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","private_key":"d0df7b482eb60b2f1ed4c2562768f60fe5ee8997e542bc9c7310db55391553d4","name":"node_fd12c5c96df6ee76dd7beb9e4e4768dda4d2c498851b6435f13ca0175980d0e4a4ff1c002e4daf41a995f118500604764f88496fb9b2c22e28308d8649b525ce","services":["streamer"],"enable_msg_events":true,"port":63086},"up":true}},{"node":{"config":{"id":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","private_key":"7771ce12670dba4c28198f6df284ad58c9ca877a25ceb912ec3af5ac83f6e143","name":"node_ed1ab28230ed533abf25633508d54f32bbff78a10c7a15fad5c2320cda9d9669c6d0e15689d8885400e64cbcd81730456f8f4bd5c98681d2cd8a8d4e1daec553","services":["streamer"],"enable_msg_events":true,"port":63087},"up":true}},{"node":{"config":{"id":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","private_key":"97cc28baaa8c94c905d348295eb19ef607599d22742989105d03eff39a5d6d51","name":"node_a05a18161c2d01a0f122548c66509dd1fcf3ee52975035bc79fb059e9613b743a16cd6f5ac54090e68f51bcf76ff21fb3805ba3197a96b4236afb80f791df802","services":["streamer"],"enable_msg_events":true,"port":63088},"up":true}},{"node":{"config":{"id":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","private_key":"9f191333ec4b20a2380317b819e71ffc234e63e85ec57548c407e1740c07f41f","name":"node_c89dbada7195464e732671ac6fff014cacfb4c879b63b6b84e7c1bce367522f759bd06e504b15f43a1735c6322356747fa5c4951882d4fd6cdf6f7cf13726719","services":["streamer"],"enable_msg_events":true,"port":63089},"up":true}},{"node":{"config":{"id":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","private_key":"9b597a8aa9ae03a20ec963fd3eeaca13823d7efd28a70c4c44ebfa6e147bb24a","name":"node_51302ef7b50922398ad802e917390bb4a3c24c877f2c2bcb7fcb34de9feca22673a2c594639914fe46a28837ffadfd03bb673afbc856aff5e59caf8e76082482","services":["streamer"],"enable_msg_events":true,"port":63090},"up":true}},{"node":{"config":{"id":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","private_key":"342dbb181da6045ae41eacef680b93f58765c7c5d65713f25f8b0627863c7983","name":"node_a40391285d1a97f1fb368b20c8e4d02be1bdebc0db41f00f99aac2f01893dc12256cd5a711117a981fbb3f9dfea18c19cf3603e925dbd67c4032b22b41eab8d5","services":["streamer"],"enable_msg_events":true,"port":63091},"up":true}},{"node":{"config":{"id":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","private_key":"af173c26c979843230716c1a7f4aade4f9a19a23e2ee665d0a0ecae0f793188e","name":"node_e0420ba2a293315d810928a0e09a507c6aaf93977ba2c7598e9b83723b4a66682398ea17542c26767c7ff0f4ca09c537d3cc10dad283f079f1de73e25e87cb5c","services":["streamer"],"enable_msg_events":true,"port":63092},"up":true}},{"node":{"config":{"id":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","private_key":"4598804bbccfa26a362afa9773f283bfbc0ab7660240791e38f7ba858e45280d","name":"node_33e3ab7108ced43102003c3b3192b194100f32b6bcb67bb772ea9696e35721196699cf01e443f7cdf8076ad83aaf7468b75c71d03efb95f4c07cf0742ea9af81","services":["streamer"],"enable_msg_events":true,"port":63093},"up":true}},{"node":{"config":{"id":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","private_key":"253935f834190e90b6bf0646618d2992233bf386ea31a58770e1926cb063050c","name":"node_cbed12dcab0aa04a96ec7e25bc2ee03b337c7b2006391baa7d2aff042c17ec70b82c5fb2dc916d085a7948541719d329f9b528b67ec6adb1ac2cc594d4ef1e42","services":["streamer"],"enable_msg_events":true,"port":63094},"up":true}},{"node":{"config":{"id":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","private_key":"f6d280904f13397798c441bffafc78ab98461c9d84f01f4b9b73de50d5595fd0","name":"node_03d2d77c008b5fa1063b1abc3152b879a529fe4fdb2dc174d6d85312264a38ee4cc49b342507a10fff1a4b0730f1ef8e008b0897d97bfd6f70050adb124d3596","services":["streamer"],"enable_msg_events":true,"port":63095},"up":true}},{"node":{"config":{"id":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","private_key":"5237d9097b72efee4e45c4d3d14e320e49ded470809478f3ccf6a9a7cf732d74","name":"node_f0299035cbddfdf7a78e5e3a400aaedf2d719d04e907ac0f9f067525e2f9bb913d985308a3a0d05467a64adf58c68a615c6327acf716c23631d0e829903f8b34","services":["streamer"],"enable_msg_events":true,"port":63096},"up":true}},{"node":{"config":{"id":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","private_key":"a8d169922df4dcd07e1f102e3eae5692eb87b1f368124cb5c65fcca22f9743aa","name":"node_276256790c9317d09ff7802f4ad0a85840fe62527390ce1790e1e3186e8b3f04acfaa41dcd02303d333423678a4037e4f4854676e79ced3232a3dbd772cc2680","services":["streamer"],"enable_msg_events":true,"port":63097},"up":true}},{"node":{"config":{"id":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","private_key":"8b927156a8aa7b6cc711c9c2ce3016cab2e9d1ce220e9792207cc5b40fca3047","name":"node_155805f787600f9f9518cf8836f491885b64868bfe0023975bcd12776925a424fb5aa3199dc178e83294e97f347a373d05d2422578a08eeeb2d15a178d28964f","services":["streamer"],"enable_msg_events":true,"port":63098},"up":true}},{"node":{"config":{"id":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","private_key":"d2b8d940f626faf3204dd38721f5528e1c9db4b5d0cc28d0d627c7d191c1f21f","name":"node_4de606aa7e722197b918c5f7f0db86a3081d48e89d21428b04f19c3ff3755eac0bddbff5fad8bda94b9e57f58fba2fecdbabbf710f7afb381bf4f1a4fe55cd93","services":["streamer"],"enable_msg_events":true,"port":63099},"up":true}},{"node":{"config":{"id":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","private_key":"1cd1a1e084096aa4f8f9933b0871657638dad24b3f47d18c9eb0007595ce46f1","name":"node_82a774be7146766585d2bec6b69b7803aa956f492a53d8ed5f071becdbbc617562885d8430f0afd505210aab7b032428fbea32c82dffbd12d9ccba776ef4729b","services":["streamer"],"enable_msg_events":true,"port":63100},"up":true}},{"node":{"config":{"id":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","private_key":"8ec23f2c16d923996d6bd74aa374cb6e5a69fab748ea8efa538d01a12ac62e16","name":"node_340420ee18d55913f790d0fcc2305b40b1e7bef2eddb79dda57801690aeeead693ebd1a9ff8557671f5ae136b3e65733306924bd00444cbc6e7c6235e5a2c77f","services":["streamer"],"enable_msg_events":true,"port":63101},"up":true}},{"node":{"config":{"id":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","private_key":"b7a9a55daea83c1d769fe68e820de46f4a8df4c425ea7ab98a44cb7ad3c7963e","name":"node_7a509686ebce91778fe22e834a94ab03f92457d41385099ba657fe62c7469a9669bddb9a3d7b0150efa1d2f40c69bc786c7f4ede1cf8b19411eea1d23cb7d56c","services":["streamer"],"enable_msg_events":true,"port":63102},"up":true}},{"node":{"config":{"id":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","private_key":"c1478fa3ebc5b2bd2a32567455e71e73a1787b1c8c6571fd94ee0d487d5fea4d","name":"node_816e91fa8ff68ba067a89390ef61e7f23211e5e05049daa103ad1ff84b94fbcf535a6f6b515fb571939f5656869767c608513808800baba7e5d2b5f3a17a9691","services":["streamer"],"enable_msg_events":true,"port":63103},"up":true}},{"node":{"config":{"id":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","private_key":"bb118c1ce93cddc4fb540863d575d6ae584ebc2f2e2f221c9622cc105e7fd7b9","name":"node_77327983685f39f006806170fe351063a58ff1bd8dedc222d538e86cfd18abdfefd548328f25fc5afde8170aa5c35311353019468f2b439c331837ddfbb25a52","services":["streamer"],"enable_msg_events":true,"port":63104},"up":true}},{"node":{"config":{"id":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","private_key":"7cbe501dc7bdd1bafc62c5c56af215559b06aef4ed398d4a3acdb78f3c84a735","name":"node_7a18392b8338108a996196ee190a93a1b9954c8e05a062c421da513a1828dfa739e7b224878c0670cf74bbc743c7ca7ee8cfee6b6a602fe1f4a82ecfbd38c2f4","services":["streamer"],"enable_msg_events":true,"port":63105},"up":true}},{"node":{"config":{"id":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","private_key":"e853260ddb20771587ed33007ef55b07368a08f79ea0a64cf9830ab69498238f","name":"node_e7bb63c5187ee85d965fed5cb33d1678c0e090b4e4c3f3d859755565db18046cb60025453bdebf136373c416a2e6e56be063bca6c9257b7b175dcf966e274205","services":["streamer"],"enable_msg_events":true,"port":63106},"up":true}},{"node":{"config":{"id":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","private_key":"23c3dd23f790b16480c58305ab528346a7046dddd1d9f5c699a4963bfb926fb3","name":"node_545850cb90787d49c579b1ed54a753ebd00eaafe3f1bd04d57266e4912fb1cdd654446ef054a973a583ce8dfc6cc130b6f90e63bcf75372fc21c445f8e1e6005","services":["streamer"],"enable_msg_events":true,"port":63107},"up":true}},{"node":{"config":{"id":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","private_key":"e0f2a273dc23035aaf88bb97d7f5ccf57ee6304b184e7d61183556b28040076b","name":"node_86b84ddf64d301f6a9c4504c59eb4031d3167fb74101abea3b694845a009dc522be7b2e2720097ceea9f36058e160f42a2a438a33034929a5c1a7793c7ccef7b","services":["streamer"],"enable_msg_events":true,"port":63108},"up":true}},{"node":{"config":{"id":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","private_key":"dacac1dfd252a4ad8878c023bd34aa1bc81b63d66d70c8ba9aafcfa8425bb253","name":"node_bf1e6eeb8b229f63b49213db499b71dcfe0ae45ee3f14685c7cbfa3f0a2150e52a89c853f4cd8c7a92e6e5f6083044efddfa17391662e3cff6290da679520404","services":["streamer"],"enable_msg_events":true,"port":63109},"up":true}},{"node":{"config":{"id":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","private_key":"57a2dcb70aa306ae204744fce4dd4b4ad9b02516e080dca195604406e240627c","name":"node_a58a2dd3f5ee2471f0ddd555ffcc45d86e2d8c325585e3fe55eee878b8a626faccce73679d32811fc5d068c153e671673f4cd020f3c7fb37bc6fd9646931646a","services":["streamer"],"enable_msg_events":true,"port":63110},"up":true}},{"node":{"config":{"id":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","private_key":"4314dbd43bea3cdbe75a24ef256ee0dca9008f5133f8b1d6c9adf9a84210c2e1","name":"node_896c74ca4cc4cbb9d2b6606d0ebfd6427952c2e16aedbf36933fa3d01f1c505fcd663f3d01c0cf096bef9cfd0bae4595ec7c221cfc362e19a5b7c60614a9658b","services":["streamer"],"enable_msg_events":true,"port":63111},"up":true}},{"node":{"config":{"id":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","private_key":"2b4bd5ee9da5de0932418460699900ba0e40139dc910b087c586210e52816b77","name":"node_1e0a46ff50fb6d9a2c218a851763ff86c42e4d61dddffb7188481febc0f3180bc8f31973d336b2a6e25802acd4fed6d905d89c6d4d7d8080fb12741f9c5ab7e6","services":["streamer"],"enable_msg_events":true,"port":63112},"up":true}},{"node":{"config":{"id":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","private_key":"dd2b5c2e466c7276ff4c6c1a641ac204a34ddcb145523ab175701ba31faf44de","name":"node_b2bea653b6ec9629c6f934be72fccf30acf836698e21e81dd8085f070ba8259ba43eee43c342738a4b782f5fbddd44caa28f56dffc08237ca7567c965ac3beca","services":["streamer"],"enable_msg_events":true,"port":63113},"up":true}},{"node":{"config":{"id":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","private_key":"17f5b5341d575c1cfe673efd9957ca29a50fa23c028c5f5f7561b23e7dc92e04","name":"node_5771bef7f50439f9b81d2a7bf7060b1ad4b38675d8f6abbac3cc4c215fb0cb5dd07f6873545b42218337556925566025476e2915b7b98e662a3dcd28bebf0eb4","services":["streamer"],"enable_msg_events":true,"port":63114},"up":true}},{"node":{"config":{"id":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","private_key":"eeb9367b7cabbd3e4076edb5fb97cc2fba7445cf37f523685f2b24e617d718c3","name":"node_0e8c1a6b70524c4fdc492c74348bac4ccd5d140bd41352607e8cfba45561afb1e6e12f3e2fcf03c1778c9ae5ae19cb9218ee2d613983768f54e3f54e69bb6600","services":["streamer"],"enable_msg_events":true,"port":63115},"up":true}},{"node":{"config":{"id":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","private_key":"a9a6414dc37916ed5794a644a51d6cc1c23c27d707b2dfb9957f9ee28af64e60","name":"node_d71c50805f284ed3a759e2e81f220fbc73d6d0a7a261b4c9e7878c3da143cfc07afa83e1635b6a45530f71a60b9f17c485a2fd6617c6c2bff82bacc71c208087","services":["streamer"],"enable_msg_events":true,"port":63116},"up":true}},{"node":{"config":{"id":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","private_key":"29c714e8c1983b179cad17ffaa617cfbdd50272b496803b4a602afdb05d78117","name":"node_06472c89def07fa73188d253cf1acddc2be984842f3a234edb3db95449ba74928ab1395eca1b8978987769863afffb488fc27c9ac723aa24837b66c12f38d735","services":["streamer"],"enable_msg_events":true,"port":63117},"up":true}},{"node":{"config":{"id":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","private_key":"f00cf99cd4b64e4242b7c878a4ce70044f1fe91966dd723b940e3a312f1b9f63","name":"node_eb097186ff58d96a7ead7a7f9c05a44075d84537bd4fd3f82857bf2c45bee1c6dece434a7707cde69e96f02366859cab4c991fdb7615e113a868d4b9c7524a45","services":["streamer"],"enable_msg_events":true,"port":63118},"up":true}},{"node":{"config":{"id":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","private_key":"d089b29e9ea18a2cf17256e0e06c907164f712564fbebce476b40f67e39bcc73","name":"node_57bfbde13c71e035c96513870aa8215198f78806e7cdb01c54fbdb392de2c40386d768d6fdc4c68534a67e531867ca74d8ca4dcf34ff7f7f64ec35edee3e5f68","services":["streamer"],"enable_msg_events":true,"port":63119},"up":true}},{"node":{"config":{"id":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","private_key":"219f34180d582584fdc64b9b7712bb15e490bcb2eaa2f4d2847f838196c6afe0","name":"node_5b4de68680c5d1a75cccd5e7a82319c031f5d61d79cbb6532e1254ab81c833c3fafb54390cca7a770e84690c490fcba90482b35321870f8506335a2f57cc052e","services":["streamer"],"enable_msg_events":true,"port":63120},"up":true}},{"node":{"config":{"id":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","private_key":"223faa782246247751eeb3191f8823874455005721e6738d5f5b5b631cda858b","name":"node_cd0e9a45b45f9a67417fcde29d9f92c45ca4db46eebbfe47dcf6999e23e549e4205f42ada8e3fcd00e2fb5f832bb92a27a59b43c4a5909148d81399c2e8ce492","services":["streamer"],"enable_msg_events":true,"port":63121},"up":true}},{"node":{"config":{"id":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","private_key":"2e3b422e1762ce5c22bc9cd6fa78cfb62f3ada7732d7e0b16d91ecc5f5ab9047","name":"node_5d917ffc9d70a38670941ce206aa7ea1b9ea65c1d783f14ebdf7c7afa6ca8b237112aaa9b1a3f757132093a604ef378280c5bdef02c2688049a91a412c399bfe","services":["streamer"],"enable_msg_events":true,"port":63122},"up":true}},{"node":{"config":{"id":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","private_key":"a3f487830e9fd87b5b404bc91d0f49d866cddfa869d32c08853273b9a2eaea7b","name":"node_26cf4ea45b9a76daab82a57126f9c6f8726d2eb973e205ab4ab69c8b8be11a32a7eb5c3807e952cd428ce5ddd88f143d4fc9ff8c3de3d159855675afce715615","services":["streamer"],"enable_msg_events":true,"port":63123},"up":true}},{"node":{"config":{"id":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","private_key":"9a3fe8b50af54e2b6ea84f05b832426f911dd557e1e874bb291075981a46baa7","name":"node_20f171ab01a814a2856a6cbe7929269f18f6329914289515e2cb9d078ac14ebdae457789dd638c6415b062799114570f556147d4bf9ac850f00b6d0762765ac1","services":["streamer"],"enable_msg_events":true,"port":63124},"up":true}},{"node":{"config":{"id":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","private_key":"8e83e239128a2ef402e58ceaffa0fe2d59d913588d12536ba4e7a88bac14ab5a","name":"node_f0b2f1e8d46be656109adb18c60677ac9eb8fce7f42e15d9dbb25f94b4e426064780eaf32b79954b9bb72ea89953175da8de35380aaba18931cca374a7de2b11","services":["streamer"],"enable_msg_events":true,"port":63125},"up":true}},{"node":{"config":{"id":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","private_key":"81b194e85dff3ff43272bbf73e58a6dac8a9e3ad125f7ba3e71cb5de5341a975","name":"node_a6ca1d5340f2d7021f541c81cf9aea519675462c8443bb6ddd93919962561b8f5a8431c3ec7e7e7d46c600b653e9a0638d2bb07cf4e29516bf9c4d3653f451b0","services":["streamer"],"enable_msg_events":true,"port":63126},"up":true}},{"node":{"config":{"id":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","private_key":"b4ec9b24f6a962422bb63d20e415a5dc2f85168297e8abed3cb20e3fc0d70e25","name":"node_d8cfadac10473b31a4560c711636a05615f13054388065344642ff1d04246fb62eafeec06805264eafead111ed8134e11a8e21f42a0eb950c23b142e627bd8cb","services":["streamer"],"enable_msg_events":true,"port":63127},"up":true}},{"node":{"config":{"id":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","private_key":"cd0667c4d17b56321858cceaca611f1c46758fa276d3d991f3a9fbb0c686af3a","name":"node_49eb706cd7e95ad78502a508487d88b818861d94334aee36b2acef5c25cfff5c0efc2df9dc5dbb18acd4003d5cc0c843d3b40363adf2f62a14c04d814268fdee","services":["streamer"],"enable_msg_events":true,"port":63128},"up":true}},{"node":{"config":{"id":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","private_key":"4556340931a4e95daa2043706f516eba3744d2ba4340bcb95358b58c95534090","name":"node_c93cb2df7ba6de8009872f5f7565891040d42e3b193ef1cdb321a0c167cc8fb8138900982bb8f6918fbaefac6e02dda01ee40f7a6beba1990dd44abe03cc3d01","services":["streamer"],"enable_msg_events":true,"port":63129},"up":true}},{"node":{"config":{"id":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","private_key":"f1b36e9da20cfc2416f02f9194a0522b426be8679b6478118962624b4963af27","name":"node_3e9c0bbd146d8b1040b4f379eecf802c27c4d0a70e64a9fb2e941a7edab9b00396b0b67fc5c891652743cdba3b342973ed49615b32da54b925954a799240431c","services":["streamer"],"enable_msg_events":true,"port":63130},"up":true}},{"node":{"config":{"id":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","private_key":"7f720ab5ccb4e3dbca347ff7104c677d8215261910d8e8e2ade703020d566842","name":"node_b38213eaa5b419de787b70073ad8c7c819e48c5f76dec1507b54f1d7cb027211facbe7a170ac50212abe130935e8947d5a19d6b13790114e71cc18357902a889","services":["streamer"],"enable_msg_events":true,"port":63131},"up":true}},{"node":{"config":{"id":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","private_key":"1a4d1e1d6e198ac61f91d9ccba4212fdd32e9075df2fda41caa11a0a25e694f0","name":"node_20bdc859d58d8bf419df64fd6ee1d4363c1d5f403af3abef2720d7d3933924672e12e23e5d76b28e0f6726acf58bdc5eb258cba635e327cbd0b564523305da75","services":["streamer"],"enable_msg_events":true,"port":63132},"up":true}},{"node":{"config":{"id":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","private_key":"9fc5b25f84b416e8224c296213b062e1dec7eb7074402a494a23cc1c70ef394b","name":"node_c6d1404873174254c0f15f25804da9a9d90db9c11c5cc895fab613b4deb7820f1733680b4ba9e4b61a664642ed6ee9ff012e13a0619c64ae067be6bab26962c6","services":["streamer"],"enable_msg_events":true,"port":63133},"up":true}},{"node":{"config":{"id":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","private_key":"43a6ff2fe67bdd16cdd0a4e7ba3eb8188632a796b90d34b477fcb5e0f5ba0b43","name":"node_f04c3ae9fe957a14c249acf3ea2e8407d04d108fc01e75f6d52aaf5073b3450025012d138a75b857473eea4d20e57c99b92bff9041f269d995543d7c67a92ec6","services":["streamer"],"enable_msg_events":true,"port":63134},"up":true}},{"node":{"config":{"id":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","private_key":"9202da3ce5dfea8df87f9f6145867414b45131634f70cd32dffffeb8975e0e86","name":"node_8e8de10fb3f53bd3a48455ebfa0a38ea5bd28c607e65506b263ece53a24d2361c2af7d7cd207e45b11bf71a3c33fa325fc8fd40a18b9c73019cce219c757c7ef","services":["streamer"],"enable_msg_events":true,"port":63135},"up":true}},{"node":{"config":{"id":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","private_key":"6f53e22eece8ebd80ce64720dacf85c36c8aa737fe54d05c884ae9ad693144fb","name":"node_cdd86dea7dde96ff7cc1e3248fd17d107c83f2cc7ce2111c41530448962763309e91a05b5dad4663d0e02db59ed4129ab0c3e1eedc42c654e39d29f99038063b","services":["streamer"],"enable_msg_events":true,"port":63136},"up":true}},{"node":{"config":{"id":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","private_key":"ba12a0d7056bd5d7f8b80a1e30c126d8641ec4a20b2e8c9b890764785350cb7f","name":"node_da15d60a4b9a8816ce24c20f6c941c51229c1fb5e070b8b29be2977c2f7b41f8f17e4b6efe75f465e7935ded1ba17472f046eac73393db7197018fa86d11c31f","services":["streamer"],"enable_msg_events":true,"port":63137},"up":true}},{"node":{"config":{"id":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","private_key":"f68a07d7241789486ffebae385ee73f2b9050d22612e9770a1aad1870e347556","name":"node_03e478a3aae82e06e215e40272a420037a61442d11c49c367a5ee6a21868d29a17ea8b9284f013d020c4740f296a6a22bc64d33d1c2807f9ab8dc48c0cfec18a","services":["streamer"],"enable_msg_events":true,"port":63138},"up":true}},{"node":{"config":{"id":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","private_key":"f9fa950ad709b5c36e36f5f49a4260ab81e08145d8c10611a2d46e1395ac87f6","name":"node_3df030a522a157e36f6b369aab048b9287792743a411a47073c4f9ef7686528f39bf7bf91c48e4d46afe180c8d08430b012bd216d50876baa3b1e7bc17cb55ef","services":["streamer"],"enable_msg_events":true,"port":63139},"up":true}},{"node":{"config":{"id":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","private_key":"27eb2337ccaec369a786c3e86e92bfc20b6bd03e70244b7d1266e783f087a16f","name":"node_4bd17847bdf60ea93a670a84a0ff8fe028d35228e814d6ebc0ae4fa586ddef03cd79390d541d28ca3c05a7241ffe92ac182e63c251176b40db8fe05fefaa82be","services":["streamer"],"enable_msg_events":true,"port":63140},"up":true}},{"node":{"config":{"id":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","private_key":"dc23bae09e0ef5811f615cd80fa3c264a5011f501f3fa6f91cf6772a408ba5b3","name":"node_f8052e328014f39157036f3dcecdb23419c0959473a88282605f10add681ef5cbfb1e926b522f98b8401272113b677a67225874d1afb0bff4b11140cc071de44","services":["streamer"],"enable_msg_events":true,"port":63141},"up":true}},{"node":{"config":{"id":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","private_key":"f37b323598ac406038a1fba2fb8acf1ac7899c6606f263470141e3d8f364c70a","name":"node_3274b5f48e6929e2305e980b558a4ca3c7cf800b75a6445ea2875cb379e127f3e793e9450a11e927682aa91b8af52e9560dece633833e0f207a8a8a38b7b9c54","services":["streamer"],"enable_msg_events":true,"port":63142},"up":true}},{"node":{"config":{"id":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","private_key":"fa14be3b746acd18c44299337f26807c3f0034349cc7eb6ad398a32061e68e12","name":"node_e59940a6dfe35a6214e2e3daba9ad94e630004cd8f029e13a6649a56dc528ff94bc09d8d21a2f14a56b4ff759b60ebf3d27c1029862c183b8416fa3e950bdb55","services":["streamer"],"enable_msg_events":true,"port":63143},"up":true}},{"node":{"config":{"id":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","private_key":"67c3621e70643b370db5377452ca3a8bfe78a01172983da0ba5fb979ce341bd1","name":"node_f7637cdd5ef26de40b9055c1df91a45725670c8df11ae934c0d99d2547c3eb4c42a16dbb2e75bcaf4b1b9347c48db65f549a0623179a08dd8cbad92f5bca08cf","services":["streamer"],"enable_msg_events":true,"port":63144},"up":true}},{"node":{"config":{"id":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","private_key":"e4e774ffb3fee42b1fb038f560cbb7ef3f4ec4f12d077fd90c38de877841eddd","name":"node_fa897ba112f34839064c6871a4c9504c5d709eff5095a137c6a42726d58eb623af976cb96cc30db67e6ac9347c769f032aa4ebda884285a057059040c008ad3e","services":["streamer"],"enable_msg_events":true,"port":63145},"up":true}},{"node":{"config":{"id":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","private_key":"9fdcb97101ee0351d72b1cb7b832fc95f339a434e9d1e146af4062d0d43a88c6","name":"node_5d96577324edf1b5a1626999925982af1e0ba7bed8edcc3f740ba434f4b003cbbe2d632cad327c76e5b490d08c091c4a7b473353ab59139493657eb9525b8be2","services":["streamer"],"enable_msg_events":true,"port":63146},"up":true}},{"node":{"config":{"id":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","private_key":"05ba41be88727fe8ceb3dd01ae6314f6eb66de9c223da829a6cb0fcb9633dbc7","name":"node_b09af9e5552e72f918174963dad58a4492d3afa120f78e43820df7bff7fae9f6b52bc6c8c73d3a9af91d20134f4ff1b037db2ef0bc3d8c495a771d63de678bc0","services":["streamer"],"enable_msg_events":true,"port":63147},"up":true}},{"node":{"config":{"id":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","private_key":"4f458de05e760aece8dffaa29333d3a51382cceb7bb8265be7a25ea65cfaf2d2","name":"node_1955bedf0bc9044b13a2c16158087123197c74147c86aa3b9389d308a364e80edbc573bcc836d8a262a77f3c9233ebddb1b82eca83cd0a0e4bda6564c443bb70","services":["streamer"],"enable_msg_events":true,"port":63148},"up":true}},{"node":{"config":{"id":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","private_key":"c2adb7237525d3d280b964361432cfe1d2863e3011b4b83167648da04a8b22fb","name":"node_5984a296b49bfba30315501ce2ae88ed0392ab2959ac4e7e6b9a29090f344b9dd13873ca137e8317c402cd2e14a61965d5707065b8ded46c41a054731933719f","services":["streamer"],"enable_msg_events":true,"port":63149},"up":true}},{"node":{"config":{"id":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","private_key":"43223de0a2e5b61580a85a150f19528acd484002efde9df5041f8b93b5d9f0e9","name":"node_9c3be147f9fe0fa34e553d9e4332969086ea7fa65294b61ca35c9f731f6b81d0b70cdcfe2ba52b6cea3c0de14b7ea40031b5cc40661c4bb821147894130d7bf5","services":["streamer"],"enable_msg_events":true,"port":63150},"up":true}},{"node":{"config":{"id":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","private_key":"863d1cfaeee0df7e89ff906a00c0165a9e579fda9f82bc3fd9b694a593e37139","name":"node_ce1309c8505b446363ae37cd3b1ee3e03ced537bed20aca5d8c4be2133917c408845ef5d0f65876974be2803dfb824827cf5c5a2d050d6ef26cdabcbf3a2dc31","services":["streamer"],"enable_msg_events":true,"port":63151},"up":true}},{"node":{"config":{"id":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","private_key":"f8f2976509e8c27362fc450e79db0e7b99ee036277d5a1c860f265be28b6525c","name":"node_3e7820bb15c07f515bd63791b66136723dcc9878b3145fe0f238f6b41e3f2f7565ae55ef24f08ae461950ce1ae0c8a80fe5e4fd4f2f88c4acf4a2c94640df239","services":["streamer"],"enable_msg_events":true,"port":63152},"up":true}},{"node":{"config":{"id":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","private_key":"eac78f03be8f9529f9c85dceadffbc6ff39de01456bab5c864f9ea5a4198ee23","name":"node_dafb58b2fc8a14f2b23b7df33d28aa7847a08f80e9c21a654d4c97d928e1afe6585644d27f22442cf70d229c32783be6a03c0920be153fc4d9f3b273dfa90ec3","services":["streamer"],"enable_msg_events":true,"port":63153},"up":true}},{"node":{"config":{"id":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","private_key":"6488421507de8fcdef9f2e89a73b5e9182ec8c0cb7d564e630dfe38ebcd732a1","name":"node_622646c74fdbae39ba191dbafff4906fb683fe0b0f2c303d080f5577a070876c41c8d3786ae7b953e5f682b8ec647727550d47302229ebb9f82bed24cea61132","services":["streamer"],"enable_msg_events":true,"port":63154},"up":true}},{"node":{"config":{"id":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","private_key":"7f547289aa8ba8dade535a2e50bfc2111536e7149162e360ea5e4db15c12d42a","name":"node_2d6d55edd34c0d9a0130b4806e409bbe18cdda5c2b221cf46136718ec20ffc9d8e92838d78aff92fbcc85f5d081da361dd1e3d7f3d4e1ea57877d6bb7aa0b6f7","services":["streamer"],"enable_msg_events":true,"port":63155},"up":true}},{"node":{"config":{"id":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","private_key":"f3d8d6aa0db8c604198cf9a317b45fb96b8407cb029951d7ef06042abedf5e1f","name":"node_f62bd19b0fd052207743ce53c3d48a3a71e9219b75e41a9497a43e6368e559d5487ff1ab644f2df4106b500583e4344515f73187eec773115deb977b4ebc3514","services":["streamer"],"enable_msg_events":true,"port":63156},"up":true}},{"node":{"config":{"id":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","private_key":"cc5627eea1858ac168bbf1e34a3bb3410ade5b379cde7f67601bbe359506e76d","name":"node_a1b2d0c6f24f5924c61e057fc65b994d9a6755560d740018b4c9ad0bb69212ec69974e22cb037dfeb7ea90a4493997f4c94029870bcc5fd47013b51ca0a26b5d","services":["streamer"],"enable_msg_events":true,"port":63157},"up":true}},{"node":{"config":{"id":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","private_key":"77d99b72e19bbe2da2d6d931653dc7b541dfe27092b944936562bafddd6114fa","name":"node_188bf77c9c1e45f009efe7aefdb040bdb47763980fe7eb0851295d657fa2a8978efbd2997c1dc30f4f0874eecf9ca9550487cf41da237b84d071963d35b6baff","services":["streamer"],"enable_msg_events":true,"port":63158},"up":true}},{"node":{"config":{"id":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","private_key":"e6874592c3f2d2fa94b126d565cec571767e64ef9067970a9f8d1f8ce7e88d0f","name":"node_f06ec3a90d34300f9fa2d48aea0c6b5f2f01f7833ffb0fad30e7f57e3916e344f3a4f9efe38e222443b8b00d3c7f5221c672491a129e4958e574afc283bd45b1","services":["streamer"],"enable_msg_events":true,"port":63159},"up":true}},{"node":{"config":{"id":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","private_key":"d733b22563798aae07facf0a489367c7cf0d6d3ebf786992b6ae98696d295cd2","name":"node_3c6faa2e75a1699ddadd0e21fd35d3d6215715cfdc2dc89961cfd66773d2541776e785f3ebc833a70e3d1017a4edc571a5d5d9f9fbfc3fa0a8588f6c5023c164","services":["streamer"],"enable_msg_events":true,"port":63160},"up":true}},{"node":{"config":{"id":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","private_key":"145ffd39a00647c0142f3bce7ba2f21f4e168663488e0683b4c8cc72afa7b02b","name":"node_56e8f792ec9a75ec9e91d472b8a4b023655dd68c2a448a33397b125fe3584a5efa1b492e47077b24acfe0396b73e1cb564a6a6b2aee1b457781dfaf6d43fcaed","services":["streamer"],"enable_msg_events":true,"port":63161},"up":true}},{"node":{"config":{"id":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","private_key":"83fa451e08386b0966a5b8ec4b56c861bc367f0cbaa7e6e3a8c20564dbc0f1af","name":"node_3572a22097a313b3adef95a7b6cc679f8d1201a156d764e61a9fbc63d123fb4826f7125402fb6569beed359e1c1e5e6cb6993a75975da6cd4ce15669a2eea758","services":["streamer"],"enable_msg_events":true,"port":63162},"up":true}},{"node":{"config":{"id":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","private_key":"2057ae928cb89d7759bda21739956c8527bf11bb02571ee2e9bda07702779aae","name":"node_e3f2e777a96b2137b3104b84d5d827d484eac9ee1b585430e09f790d7e26978da12802325927c3c483bc19973e09cd3f70c513c34798e5da650f8d2f0c8c5c47","services":["streamer"],"enable_msg_events":true,"port":63163},"up":true}},{"node":{"config":{"id":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","private_key":"4fb682db9263cc8ae4d32757a0837296654120fc17593b9d0c3219a307193655","name":"node_1480f62d85ea32226d9f77ccd31780b3e704fb60618a588ae85dcd1c0e84e878c5fc092adfb306e8ebc7abba9ec429cb2447754502ef847cf931467f31fa50b2","services":["streamer"],"enable_msg_events":true,"port":63164},"up":true}},{"node":{"config":{"id":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","private_key":"7f212e2fa6d29b93f32d27a27b02eab5b9aa946ba044f1a20bada9f7db133907","name":"node_3540d888c3207d6df233afd1164ff9dde2551730862772547e04f7311de364968e113f38a7dea1ab0916a7f8307017de5b49578fa4ebcc39651e541fde51be48","services":["streamer"],"enable_msg_events":true,"port":63165},"up":true}},{"node":{"config":{"id":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","private_key":"d209b8a302d27579c28dd86104e2eab3c74101ff06bb17200388b614ec3f05ff","name":"node_077bcadade93e0d361e94f76dff464d61912bc067ce2ce17ebcabd757cca201cd64624ea809d99dd8ecb749d40528db9b3eb503ef5ec05e8845044cfaef720dc","services":["streamer"],"enable_msg_events":true,"port":63166},"up":true}},{"node":{"config":{"id":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","private_key":"f0317274abc992d76728cf9a59b6dfd16b1422fea0c0089a47f0cbffbce53c34","name":"node_73be4d2291c68ca4554a86fa170f7595210e1b6bbbeef3c1d5623a2b5d03a8fd6e26caa26afc639c20c8a351a89dad1086f91734f09afab62d28ec17b700fa01","services":["streamer"],"enable_msg_events":true,"port":63167},"up":true}},{"node":{"config":{"id":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","private_key":"8d5bfe9aaf70d634b185efff991adfde6d80ee5d1c60e68eb1a105c17a4e03af","name":"node_a5cdff211813e17fadd43ec55a6cf4e97e6ca0c3b2cef0db58923b27d36207fd1a77146efb6093bd94d7eb89cc77d8c735fc64ab098839efc74a00b5e8687555","services":["streamer"],"enable_msg_events":true,"port":63168},"up":true}},{"node":{"config":{"id":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","private_key":"bd99f18955320e921a98f8103d8b4c1713d800d49c0a7bc946cb52fdf79e03d4","name":"node_27fb8fcda1986644f985d68430c399f0299644b00b234c355362721081d12f9eb7686eea8f92eabda1d342bf56255e51c07b200c6233f95ac009f15b874eee97","services":["streamer"],"enable_msg_events":true,"port":63169},"up":true}}],"conns":[{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","up":true},{"one":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","up":true},{"one":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"c35893ea35ab764005fd81ee10d1a9ab3f361e044aa53e28ee64effca928d09d","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"1385e97b879da9021aba65b2df36b91650aafb354a09c5be8a9532d1eb7d472b","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","other":"e39e8092c97b53dbeaf5ca73d95c71e8e41a2906aaa377fe0c1b23752c8c7423","up":true},{"one":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"c7fd88864731e6b79acf436a76908b91c61ba07680699c2cda316179c3719e8a","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"609958921d9107eaae6f3141e94f12b3a28fec203eb0e5b674ed8268934becc7","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","up":true},{"one":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"740bebf4546e2ed32b2bd277555685e3be071aca4b1990c7c095e12e24fa4699","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"30a0ef4bf1f66ab4d02a027a24ba1f9b288ea93e86a5ceab64e1985aa4efcbd0","up":true},{"one":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","other":"2feed66b03b7b057e1a64a3f877ad9c28ada96e30b98a78393b54ea31b98f4fa","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","other":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","other":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"87e0232acc7127ea47604a5bfe84d80e38292902502c2a714e0f96d8090eb4fe","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"1ea89c3f15b82385c5df8810ec7cbd30e8e4a4e05c1ddf5dbe7102edaa07afd2","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":true},{"one":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"11a60d43d627470df1c1ebdc404093f6ae83c75b3a95469316b89a0185eeaa86","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"6cf1d30b063cf8352795a92c6af26c154fc44be06c69ea9fd4d9f6dcc626eda1","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","up":true},{"one":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","other":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"b1bf7a0572c1efcf034bf42f54f7334743c59f77b67225aa3c7d93552074ab56","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"ca9721b51497c5d570738eadc37c79fc8d5525749defb98c252371793c2a6f5c","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","up":true},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"60ad041deb8cf72f0d2b29accb204a7e1838347b250e105ac72a0a4f17dc5f47","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"d79838c419be793292a24feaf1b9d26c67f0c5afe15bae85689420de3436ad95","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"40871cbc7eff896f15e558e2c638ac980fd89c718881cd110a086c3397b564c0","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"83bc840da4e1f9201f0e85db2c44364f06c188fedef30fd2f72cbde70f6cfdb9","other":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","up":true},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":true},{"one":"004710b2e2194a8cd11292efe8b6f81bec4c1b673a9c8a45b7b5391f5f049895","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":true},{"one":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"ea51459c5ac142391297bb73aa26501eae65bc6f661b534a91a344de8dba2f4f","up":true},{"one":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"b9e5006b90bffae809136ad57e36b784b18e35f7491c47319807f6869d624465","up":true},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"7692399f01177f2a8976d4c393a6813c53820e5f4edf54934414d1bcdfb8392c","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":true},{"one":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":true},{"one":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":true},{"one":"8230e499c9c01cb6e5717336f3a88b6a8c1010081712fbfab96c301e23044d14","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","up":true},{"one":"bf7b0b9825b9c878f7730014c7458fc52ee3490c98ee5ae2f647a8d73e4464f3","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":true},{"one":"3d3acee3657d98168e2f4e6463947646560b5ad1ca24b4a8a97e4284c39b02e1","other":"4124e83515480818c250a3ca2d8a7b159c890983c35165ee531d2e15066c7203","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"aa19fb3565a2677828b1384f483e3eb7ea112940d21d0aaa7b16139c753c69d7","up":true},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":true},{"one":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","other":"1943c1442da29872e77e4cfd282e9a81490c613e99cbe4503e470b7f23ce75fb","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"3e4fbab650cbd539383f7e26128c0aaa770f12c4a1fa44d553de9dda073f0cb2","other":"314e1e8a8d9ae18d0b5510341a6fab0f8654a7263a5db895480aca606b6a9859","up":true},{"one":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"f29ff736fb944f8f8339a4e10f69ee72f108ed1d68b5a80d06a814b0807e8686","up":true},{"one":"1ab1591431f8ba2a5aa1110ff97926cbf80d080ded09192dcae0c4bfeaea1ec0","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":true},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"d192c64e09879b5107507e193fea23b0244a574e0d66e444f7a325de32c123fd","up":true},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"6640a8343b810399525545ee1545a50e3c76548f776c83d55465071cb55a00b1","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":false},{"one":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f99503dc6a4ace3317320d8454b3ac1a5977f508ae810c4d506001ed0126838b","up":true},{"one":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":true},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"f80e1ce23869c7da4453f06521fa320632057194c9f9b3dcdd777cc1f06603eb","up":true},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"2aef8c4da4e38b6a885785e406912cef6087344b4be9e135e2c597468b003315","up":true},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"93868ef90fc89dff185d7e59dba34b3e9449ab0336fff12c64ff4ecc3f033b78","up":false},{"one":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","other":"83119770a801a40f0f4015ce8a8cc6cfa6dbc211deaee193c5db05130002f9a7","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":true},{"one":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","other":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":false},{"one":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":false},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"db596f4ff3f8c25835f9f10176e87a8823eaf1d39a513882f1ceab931dabfed9","up":true},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"d382e36db7f13180cca7b169e8511c9b920bb481a340d8a61dd9e4969a5605b6","up":false},{"one":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","other":"6c1f82c3a7bc3274cfdac710caec4fc814c9f5a6797674457414dd94be577a9b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"e3c3f763b77a0bb72932d5d3dfca016e28d27b1c377690d2b074881b1a2a3259","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7f620d306e05bac0f07838b7de6a2db69aa6494df3db09f26624ed167318a75a","up":false},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"a8ba308efec0ed318d68bd3561a41fbb0af84383e3f5333e2642ac9d60005ab9","up":true},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":true},{"one":"d3864c160e6d8fcb3f540b864e6ee11d91ca708f2cbe1e5fd04beb2b6c1d8930","other":"811d75e7ee506a20ed40f8451066f5d9f6d63c5774004aa26bd30540137ffd30","up":true},{"one":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","other":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","up":false},{"one":"0400b7958d9f0270dbe3146b80fa821dbae8b0cf70d11c9a3d3d14b14012fe4a","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":false},{"one":"f07c1ee0f9cadf2971a0cb0022d1c67fa82c79f63cb98769b31ccfb04d05c0a8","other":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"a12e73ee9cf7369825c1423608ce079cf70df75d0f0bbc56d07d484169fca26d","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":true},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"311fc84bce90b1bc1d1983c78e45b1e82a703cdb7cfbe54d51e9bc40cfe04103","up":true},{"one":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","other":"44540a152f9fc924f10fefc013059d9ad228e74f921a67866ef28758f1886320","up":true},{"one":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","other":"a60b45dbab9c1de18783fed9eed8af6dabafbc33fdc5b3fef1ef4569bc6c70d9","up":false},{"one":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","other":"6ac71d55e984abe323c74ea85ac1aed1b06e56632c07c389e780268274a23810","up":true},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d68e095e77246c3c08df2eaec294965bca2d01fa2819d9cd06c6ef8730c59ab4","up":false},{"one":"feb3455336b26365b81dfc8cba2a390690ce996e07fcb7f1226720d263205adf","other":"f3a1438cfc8b09a3a9c1fc8455ead9041e9532ef3e9a77ffee8e5ef62af2670c","up":false},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"7628bcf64532ca3ec293d26f60791a2a62542b2f5f3f1c782799075383ccde00","up":true},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"b22078d9b5f3d57dec3fb1796599d5f04fcb32d4288939431ecea8516be76b58","up":true},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"fba89f80c35e5f6ffbe6e5521f2011caec985d820fe42759ef1aaa36d4902f37","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"fa62b685ae8a9aac669d245102ce68b030f0f270d95d7c88969bfdc9978f9070","up":true},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":true},{"one":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":true},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"5d6da3260504f8063af24960ac901bdc0c54a126b82d415656a083c496c8b6b8","up":false},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":true},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":false},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"f836b3ca82f75bc0901d83b2c02e24174bee78c5eab9b55af9c492406942637a","up":true},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":true},{"one":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","other":"d7f956d0f6445202699bf63700da408237fdcecd27e2e8ad969e51d7e8e61483","up":false},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"c243003b111259b3cdfdd4acc3610ac8da65bf58288d51133d03e680a42d7034","up":true},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","up":true},{"one":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","other":"cac97c7026184a2d6ba2b17fcd0c5440bec538961af836a60f2fadb78a310a77","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":false},{"one":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":true},{"one":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":true},{"one":"97a5959b95662f6e820a1b011a7e87568e0efd2257a73bf91868c98c46e5a571","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":true},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"3f1ee2912d5446e4cdf7a42582f2e30a24bcddd6422a9b6a61f287da256d0bde","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","other":"981be0d21bdb11ac807dc29937c6a3ac2ae3c2f45269c0edc21172d5550f4da9","up":true},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":false},{"one":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":false},{"one":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","other":"57dfed651ba7f0ab6f9e1d5d2d4ae18fee51a200f50925a88c861982bb4769cb","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"8fe212fc9af12821f59b5f364f86f78b545be501933b926fc47b6d7deafca941","up":false},{"one":"8ec663c22eff8ed185b8194c1240ff58df131c5f310df0a91b9790ec166e4346","other":"8e317152297d5d048ca4512f733e63e48c3dc66910bad541d33f3cfc76828cb9","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","up":false},{"one":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d55213d3dc27542a780472564a4a8c1ce47668e05710be178baf3238ca8886b6","up":false},{"one":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","other":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"5b36b0ab4872865a4f86f2aa137ba8bb4273090e57fde30ec27a58acb158c22f","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d9169f80683a2552475d60e6982f70c6605f9b40300f2b60895aa21cdc42db89","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"f2b809e97d3c3a652c4ddce19ca12b01c1de25f2ce007d561fd5606e85540d64","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":false},{"one":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":false},{"one":"8bf59dc9ce97e6e2f2be364380aca38f98ddec248e730422f581f5bb56171e34","other":"8c5b95bf1743e2d8a97210c5b64b6732f3615c4369fa3a52e426f93e168ae16f","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","up":false},{"one":"d87f983aefd8f732c29718a95f4dfc54a10640d5c9fdd73b772c3c30df269d88","other":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e5cd769dbcc429587e3a92b192575965c0ac18e88c9a54b9f75936d929c43c62","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6838b88ff71c5419d3fd22a4c007a7b822405b1842d53427a9c075d093c13047","up":false},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"92e2f8ec301e5858f7168b785040955d28bffae0c98e5d3f59ff9fa8636fe423","up":false},{"one":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","other":"9cbc96aad8fbdde0c2f084f3cef79b56c150ec7fc30dcc2d8535efe9b337f4c2","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e4254cda903275296f17b47e5dcabbf16d1fa7432b64e0e6e0562fcd89de534d","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"4309c2d963d91e65f7e8e8ab42df52e75f8d377d4eb07d1a048c0082af4f501e","up":false},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"931a36980ca0788616cb1c9851f6069e44d94671a2a056e12a7d7cafe597dee5","up":false},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7e65067fa5db52d40c0a162432200ca6d0d3917b25cad15ce498fa6b5375bc8d","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6e8315dc552c8112dcb01e9302b5e47fef7fbdc81fbe7a1d0b27e0cf80a65ca4","up":false},{"one":"6632a8b23d42dfc55a103d625a3644f0067abaae554eb75a78b1094ad7b24c16","other":"61207f4fc13c899b88e9b727eb202a8bab00868bd07d945100b2e56dbcd67683","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"06db6e244213745e02175cca1101e72799c09236838affd8a020a05e5b88e2bd","up":false},{"one":"6a57cd355d641d1506957a988d93b2d3f9a613a7354c24130ad97dbc4c8296ce","other":"6aef7e94602e6e74ab4cdb57668fb751fa20807751f786d0232870da0ae32cfd","up":false},{"one":"96e99adfb8d8d5386d57334975f9525de0abd4418e528f2a8c1a61cc21871423","other":"96b723de0840f656c914674ad20204da830c04d4d6956c32e20154cbcc40f9ef","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"e0ac6b34d04bc036026767288a8f0f96720f4a3efa5b52b3b86439fba562bcf4","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"425959a8050805baa98c05ccd640261edd3f26e6cf3205b4a79d2b086c070339","up":false},{"one":"48a19dea03eb8068e8925407c582a0913fd24127a4f76b38360171c5b0b0c545","other":"500f2135db1adafe22d8a62af63f1659d6f4538f490ee8151e9db970fa24389b","up":false},{"one":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","other":"1f2a162a4e78c8935ed17eee206a8512ef37e126bb7ad9ff744f7b46c4b19aee","up":false},{"one":"78bfaf122d10ee5e5304fdd247434c02b32de577bb410dc04d8ffe1906294fdb","other":"7c766b57273777cc67f74870560449c9542cfec734b58b167aef99e09aeae962","up":false},{"one":"a3fcef8ff8bc702c6452b0c4a7b899dfc551bb8293b17f2f6133cc78d66581d8","other":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","up":false},{"one":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","other":"4ae614490d8739205773d16c8027c46b67d93bd336c33071d8707fea6ac1acf3","up":false},{"one":"7bcfc9285f6a2ce0d3c3cc4455c026a00e96ed6363016e09ed62ec03a2c9f681","other":"7f5f9f955e368c906746d42953e30e781a8eb73428af5aa608af96af9bf4f60a","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","other":"ebf9a6425b47a78df1c99fe4d62a48c26d2f4ef966a8592802d5b5e95e6c12eb","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"18f6cc40773a42ddad3e3e6c5fd865a652cbb42e9054f0e46dfaed17a41d4f4f","up":false},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"aec520f507eedd5d752b6ba8a0b509f14105e5e457eef0b6537015e39569762b","up":false},{"one":"954a22c6fd7d63fce47d8685d32bb892bcc0feab4209d5dc7c3601efc28e7d6d","other":"9f9700ca395f36c84a38838c11f6889d00015d97aac7943c27cf74393e3fc22f","up":false},{"one":"ea9490f17813e0e5f39e8065f4c3954163f3bca6e80afca7a2c76d5ca3116e53","other":"ec3b5ea0bc43c1ef1ae2744ea747887dc58ef3526ea8601856f1e18e7f01a197","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"4778cff42bfc5ecf6a87e7a4e5a632839d30b8fb10e62f81eb75d915e6f457ae","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"42365cb134e329e7205559838f924affea893c832ea9d86c4e1b19ec2c6ce5b1","up":false},{"one":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","other":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"237b54aa7ef077972fc65fb222ce70df0129f8c8d4d35505fcbdc281bb7d28ce","up":false},{"one":"dc2ae81b708a14f8b6e134986075835994c71d284b9bd9fa19d2efa73346f35e","other":"d80b59b187b7765439b0e4c940f766ae71a903f599ac41a84d972e8703f7c9ff","up":false},{"one":"059a2d0e5db2c0204c10b66ef04bacc96d64453073efeee81ba7e30d43061a61","other":"265040d12d0b79c8609232060b3ddd6ac16fb895b52bb7f3fee5c6e8b63a4d79","up":false},{"one":"a2504bc38c94b7912bfafc42c7a4531cd27775473071e7a26173c4db932bf9ec","other":"ac23190ee9ee30dd793bf3edef355450522d3f56973ab6b1acbb6dfd9d64137a","up":false},{"one":"2a2bcb40404a427a50538ad9d1bfff1c5b1a7673990cbd20d830787fd96a00e5","other":"2dc2914f76ec9b291b2085bea6d2e0f6d45beb55bba5e3a90059b96e83010318","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"53eaa90913134a5bdaa780d18bcd33e85b1932d9b15bcc1096fc4658ea5ea7f8","up":false},{"one":"48274a353dee6c042537c999f89ccdddd7a9c139fa8b824750496bd7cf2726b2","other":"436c8c2a56cbc03310237c646c7226f8e4bd672f68251ac8cc9678d3126e7aa8","up":false}]} \ No newline at end of file diff --git a/swarm/network/stream/testing/snapshot_16.json b/swarm/network/stream/testing/snapshot_16.json deleted file mode 100644 index e818da05257c..000000000000 --- a/swarm/network/stream/testing/snapshot_16.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","private_key":"3ff3a0c7dc8b63cac9255233d84cccad53d61f8c9e47539329c07e4f248fc6dd","name":"node_279f0a191892115b8db4e2689cc5e1bc19019e8f5228f4f093f35c48fa2f606fd00a2ec5cf0fa4657ad3606e14643c3be8d49350ad2673f2ad12e17c0174b0d8","services":["streamer"],"enable_msg_events":true,"port":62851},"up":true}},{"node":{"config":{"id":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","private_key":"1ab5fd3f1885661af1829b42683ca1379ca90b1b2c5a0132027346c74001a154","name":"node_2c3d17a3b019d9d32922f06aef03ac03f67777e382f0b86c6e4dac07e590f2dbf4cbd1cc7ed136b52bba897e7163dee926caa627111db6d948581ad1b2edbc3f","services":["streamer"],"enable_msg_events":true,"port":62852},"up":true}},{"node":{"config":{"id":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","private_key":"a90fea5197ac84a162db7a06ec739e075ee334026e792d83a3269526888c8b5d","name":"node_6e327c2d9d3ffdae707ed067d15b83ad0ea81b96bb2a07331436f01c1e194ed90f630ef0eb6511f4849ede30c403e3c4ff3c2cb8021317de97f3ed5b1d990f49","services":["streamer"],"enable_msg_events":true,"port":62853},"up":true}},{"node":{"config":{"id":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","private_key":"76b6f09c28f5568e7724e9850116bdbd6356152fefedc4b0a9747361d712964b","name":"node_9aa1df8ddddd035e81ffc950f063714c3b6be24013108f8b99c32c25fc3a8582904f68c73fe63ebfb96143a12ab398f36c4070a3055c039491ca2f20be6774c2","services":["streamer"],"enable_msg_events":true,"port":62854},"up":true}},{"node":{"config":{"id":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","private_key":"f7e7d60abb7d43d973131804e684ec99e77e81bf38165dda29f3ae026eb169f1","name":"node_a1226991909b92dd4f22150b798e2b6312ffc62bad7a47d250e811c7e60cf5ceb6a87998f295e0bd392c0f5c15213115000781e498dd7eae79b67c7e7e19cf81","services":["streamer"],"enable_msg_events":true,"port":62855},"up":true}},{"node":{"config":{"id":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","private_key":"f88cd88c2c219d13b699ba7c7cf9adf16fc10be5d8e1f35b2ea260e7987ab76e","name":"node_1dcbfc79418f9a665e3154e07663b296ce086e54c23458b7113a011dca62e635245cab144d392716e5e90b60336b60927270b72bb4a1c5c85fbf959060fb3ee4","services":["streamer"],"enable_msg_events":true,"port":62856},"up":true}},{"node":{"config":{"id":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","private_key":"8fa1673a72b2ab000a4a7c8ad4540484d5286b69c93a5c608ef0977f783b7c4c","name":"node_571afb6ce94d28cb7d5cd49b3af35d2b1e44c917a9d3d207ab6c7ae960eb625377334e62317f6c69b3004e2eef92682649df828f4a645a75309ee7014ee4a940","services":["streamer"],"enable_msg_events":true,"port":62857},"up":true}},{"node":{"config":{"id":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","private_key":"daa9c74fbb0b897acdf20f1b955a608b086ce5b45dc8e2b76a44f277d25e3377","name":"node_f1e669bb6e5b89c04e07e3dcdc445d498ac54c8ab2e9a62e622a492b6f9781bfa27f75ef7448d06caa28d9afa40c1c089066358cbcca40018bc0f903eab9508e","services":["streamer"],"enable_msg_events":true,"port":62858},"up":true}},{"node":{"config":{"id":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","private_key":"eb94b600be5949e3ca545e81b4d0a5fff3ae9f51f63c722d10f5098f9e1a883a","name":"node_526d25e0aa47e64d8f681255348a3d3c94fc68bedcb7111532f4ed50d47ef064b1e97e3a6bcd13ac8eaf44ce676b22d2b343a94dfa38b48cf964bfc3f338d4bd","services":["streamer"],"enable_msg_events":true,"port":62859},"up":true}},{"node":{"config":{"id":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","private_key":"4e5d074bc46efbd0d18310e6a74e72e98b92080329d9c4e2b5ae99eb2fcfaf89","name":"node_fa81c440829adcbb3eba9196dc8255e319a976e53db0aceedcda25c2605f21b8778bf8c89e08744f7455c909568855f2a5be7bc88646796d21598ddda810390a","services":["streamer"],"enable_msg_events":true,"port":62860},"up":true}},{"node":{"config":{"id":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","private_key":"73c752d26f3438acdc54e9eaae6b1194d3706c65932939a593f1c8c5d451daf6","name":"node_5702eeccd7cb8c18dd25e5700919a544fb5e15fd53c5d4b56226021a9031a2206a694eb3b7334e4bd24fc510f7c1ea4f7a98e17e3394b4bd8d356a4d048b47dc","services":["streamer"],"enable_msg_events":true,"port":62861},"up":true}},{"node":{"config":{"id":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","private_key":"2e6321d9dda81fc0f863f09868b280dea3300105cf9d224294aa138caf10b4a6","name":"node_6311f5a830849b47094d84129fd987fcd3d511d000bf0a8b888c9a457545950fdae6ae10a2a85b47721a1d1ece8c1c62d866a26577380048d30f205c4e7cd7e8","services":["streamer"],"enable_msg_events":true,"port":62862},"up":true}},{"node":{"config":{"id":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","private_key":"200b7caaf8a33b8ea47947eb842fb8d8aac90951c70bb2f555f902380eb7f1ee","name":"node_dbef367277df652c8d3380efcf5f9d445d77fa6e7957b50b2467f90b7190e70d4eb4febbbffa6b3fc2b04bbf74dc7191e2b98923c3a62ecb80ba5336195994c7","services":["streamer"],"enable_msg_events":true,"port":62863},"up":true}},{"node":{"config":{"id":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","private_key":"b58a24805bb0c417e5666f2bf3f3342b8359d3c0d30a631c0104fcdfb6d0809b","name":"node_a4cdf723b3d7ead36bcb1bba582c8758271d5f08651694e1def0ae2ceca079d4fca81730a84a14749a81bc3ea41a66f1320788310823de5d1ceecd608ed5b88e","services":["streamer"],"enable_msg_events":true,"port":62864},"up":true}},{"node":{"config":{"id":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","private_key":"422d3b2c1b37b851ad524c8f26700fb5eec0d9a2fff1cb157ae931baa52d9521","name":"node_67cc8be0fd092c82e53efc53c418db257eff1135ad0058fd10e3eb77b205cb3e6fa87dfed4ec008c371f77546d4c117d8c34734bfe594da4c96fc08e0d2ede32","services":["streamer"],"enable_msg_events":true,"port":62865},"up":true}},{"node":{"config":{"id":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","private_key":"7871010c8b88b9594c71b9f43aecfefdca39da348e31f47ef2645c20c100d072","name":"node_4da7d1c9577afb52a5fe1de9f99824ceff314828c581caed8a3a33168df699d7b3befb4e888419264a9eeb3c9e5e9dac468e01edd71eb6f0ef41d15f7651042d","services":["streamer"],"enable_msg_events":true,"port":62866},"up":true}}],"conns":[{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","up":true},{"one":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","other":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","other":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"a873e971042dfd5aaeb56d7d9089e35bc8dd410451a66740ebe7ea0752870120","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","up":true},{"one":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","up":true},{"one":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","other":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","up":true},{"one":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","other":"af99d46c187735ff037e1264f2dbca2985694d906de0e2c9e52d5513a6feb331","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"55cc9bd08390eec7bc050924e3011b251c6c4e088ac2adda27493064b75f0ab8","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"9121c3fea7ccc99775fb5ade460f7a0cb76003231d13d44ed3e4f3cca1947227","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"f64d3106d2bb99e69e26c07de168f7fceaf85672859f7c1c038fd4dd6b6d7588","up":true},{"one":"6d8b6881d36bc5f4a4a82f5d707807af2eef2eaf4527eb6b16f62cd75a92bb8c","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"fc373cf4e892501073ed87b98231f0d001e6db70a1a08148035fbdfa2dffb3d3","other":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","up":true},{"one":"3c4287b7722f71eb03a3d54fb6b18aeb0bf8495cffbe8c103fe90229f08392ca","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"615c7fcf7a80635e42719c0ae1fb924ba703ee39e021898be56b81ef0f575f62","other":"4ce65548fc8490c02e4c6c0549be7329a8a05c090d62870ad1075e52e204a3b5","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"9fcdef2b818e8a4fcc07fedb706d9f88cc59703230af4f52043c84f9bd37cc57","up":true},{"one":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","other":"a3790562c8209b7e96e7abef9ad28de2e470a01927234e4848966e0cd15652e9","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"91129c7135bff2b7cb1e1162bdd5399192790bdb4fc2eaa5b4cea53fe7a69d8c","up":true},{"one":"8bf97ec29b6b3ca638ed82fa30d03d0d8309c9e8f1db2071f4a37de805327108","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true},{"one":"84842bc52628c0bed88539ee40f211de307b3e728ab5c0ca78032b86028b49db","other":"fb555885b96d5742a10e688bd7c1bb842f0434c319bf076d07f545e4c0550601","up":true}]} \ No newline at end of file diff --git a/swarm/network/stream/testing/snapshot_256.json b/swarm/network/stream/testing/snapshot_256.json deleted file mode 100644 index df5f7f4e6e8e..000000000000 --- a/swarm/network/stream/testing/snapshot_256.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","private_key":"859f1f6b352bfdd6f8b7a7a80ef60a7fa41a514a091d5c19d0ea7ab44c24c614","name":"node_57fb1bb32bb2b1a87e44c6a7557e9c47c2032d107bcb0e34acd9ffd54d5d3df5701232db16f62f7549ba2721021898b03160b1dc5201e79606648c1dbc4a373b","services":["streamer"],"enable_msg_events":true,"port":63226},"up":true}},{"node":{"config":{"id":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","private_key":"681d7bb10f2022ae6f74a5afa7e0d42dfa6efd2e55abe22a395db640b6f5c70b","name":"node_7f357b8d81bc2e5c6fcb081f23a42b3e2439f050d45c45851994a268d1c71fcb1f39f8c3f75ce921d3fbf80fc0e73f0b9609d72001dc4a6b65b526d312a4f43a","services":["streamer"],"enable_msg_events":true,"port":63227},"up":true}},{"node":{"config":{"id":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","private_key":"fe0d4b827c015eddc1928a6f9691bb26ba2100a6232168890d11ebc7f7222891","name":"node_cb94a8270d0050378116b5815ff17dafbe20f5303839c4fd57b981d4687a4b145e4bccec7e9af9b9475005930148ffbfa97781a0762c8e9f352dc95565fc8732","services":["streamer"],"enable_msg_events":true,"port":63228},"up":true}},{"node":{"config":{"id":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","private_key":"0172e330c8b3ba8151689716c455034d43e9600eafceaffa6c9b162c36920109","name":"node_76cbf9fc0f3517fb615fa96104780218e85d064ee5a1d518f3b78f4dbebf144df38c427445fdd6c9b436489c00ff9497d747a8fd70f380f95601d59e52e021e8","services":["streamer"],"enable_msg_events":true,"port":63229},"up":true}},{"node":{"config":{"id":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","private_key":"2e9b4ad5021be5fdbcdd374c9569d467f370261662cb56e23b98ff5588c8d99d","name":"node_e023a51c5bd26e1754d6461345143e94baeac799947579ec7adeccd105de39f85afbceeb5037cfc0b820b9f4446433f034d9e7de7326d45df5a967a8099dbb10","services":["streamer"],"enable_msg_events":true,"port":63230},"up":true}},{"node":{"config":{"id":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","private_key":"059dc1a60c68b91d75f771391bae103fb3d7dc30c5dfdc9498980591bc09e0df","name":"node_68cc8b9a995eef6170abf88bd5fedca06ffcc8d75f247f6041c13e7dfd292727ebda1ff86b776e33b6634355c55e0f8c22fcdb5f9a6e2f22fe1af7854c3b4273","services":["streamer"],"enable_msg_events":true,"port":63231},"up":true}},{"node":{"config":{"id":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","private_key":"bf0aa2cb855d1702f8353aaf7cf03b846cbe1bdc6a0b66b18dfa8f03ab7dee43","name":"node_54b3c57a4adf4dbaf31b85ed1b8dccd6249faa16dd96dd230189f47f57970caeed36627cc8e1b0794707418d580f5bd6001c07be6a79216695f1253db24926bb","services":["streamer"],"enable_msg_events":true,"port":63232},"up":true}},{"node":{"config":{"id":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","private_key":"8b9685b4c43d0de26290fc8646737787fe8ff7e6c32c082060380b41fe2c5f3c","name":"node_df4c3505e09e1baa88470117b964e758c94f77a4546489ab5ab7f4aebfdce424729ace8867475715fb68f05c66c9674a5767549e266c4fadd1c703ddd735908f","services":["streamer"],"enable_msg_events":true,"port":63233},"up":true}},{"node":{"config":{"id":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","private_key":"a5bf3b5b166cc21128321759e5be62f691455e382d8ed35e48805cbb2d884a97","name":"node_24662a43944228e4ff74736bcf0a0a4f79c87ecfdb739225b2fc45110c11bfc38aaf2d09d98e5817477848e553f187ac5408bdb864518dfa7f5df542768828db","services":["streamer"],"enable_msg_events":true,"port":63234},"up":true}},{"node":{"config":{"id":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","private_key":"b64868a78b7e20e3914999f841765a445e99246e67a0d8706639a2e940c1dfef","name":"node_27d9048707a89f1a61e44fdae523c0128f2a7050308bd3cfefa6c3e03040a0e22f11ab41275f22b8706e6695ab93320e2af35179d772581db5f49f960750f2f7","services":["streamer"],"enable_msg_events":true,"port":63235},"up":true}},{"node":{"config":{"id":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","private_key":"f72fdd8aca59748c35831f451f405cbd0aa950ce62699f1f7c9c10d76cf1e588","name":"node_ea57884dd42aec5a76eab43483bf7c4ae2c19eebf365013731de64494d10a3b4cfe34c86c79437f9012bc8cf6bd761435eefadec17600f4b9e4bc234532d6282","services":["streamer"],"enable_msg_events":true,"port":63236},"up":true}},{"node":{"config":{"id":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","private_key":"9a8b5a154d6b376a8d8a1c5357272f164206a01554ae4fcdf479ffa3e80ec4a6","name":"node_3b570117addeec03c2694baf28e246f91907268fe665c6c90356120332794258ee57a60853c19e9fe25d042ca42a5be7fe0797d84199174de8132f1ef4a9349b","services":["streamer"],"enable_msg_events":true,"port":63237},"up":true}},{"node":{"config":{"id":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","private_key":"5007a8f6bdeaf7620240976e1d41aca23e841378ec3a157b199d5fea27b1e0c7","name":"node_0cacda5560faff9d20e29a0625d3cd340ec075f198a50ab8b79338cee0e0db84c7c7e71042fd8c8f73e507b570de5d26c39473136b575f0167625a1168309ec5","services":["streamer"],"enable_msg_events":true,"port":63238},"up":true}},{"node":{"config":{"id":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","private_key":"a7d2d7f12b632dd6c409c8e7cd5da6f2009d1ed9d27eff101c0e850934695ee6","name":"node_88d5c5fe61ee1e6fa5878e0eaa13bdabaa0ec3d38a5d25b95a467da7627424f25fb5d30535aa0a5ad01c16fe2598dbf570b78cc152a7f4ef66d46fc9ae43592f","services":["streamer"],"enable_msg_events":true,"port":63239},"up":true}},{"node":{"config":{"id":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","private_key":"9e7d9771bc8ee20b1bf0743ba1e8cf1501c54606fcf9e174930cf61de03ba696","name":"node_80d997b87856099d844187d3d1fa40846ded652a62c1611b35919c2543915b64ff62476636488556f678e436ea26fcc40db7c6b6bbcb78f590d61c1ff0e424b5","services":["streamer"],"enable_msg_events":true,"port":63240},"up":true}},{"node":{"config":{"id":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","private_key":"f28a26c4cb4589d2ffe6731d30ce96e197684de24e886f252b6cda9eb4bca962","name":"node_6bf9fb6a25521c16c2ebeb6203d046d7dd40f29cc2ddb067c0222ef56d7012d2ee5d037f71f6668ea56767610b2a54c144aed74b7f68d06993cbd52fa1dc7630","services":["streamer"],"enable_msg_events":true,"port":63241},"up":true}},{"node":{"config":{"id":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","private_key":"03c65c150995cc6ea4d0a925bbeb304f8b289d695855b69197bd9284c537e8e5","name":"node_23f9bdc82efbf57d3d40a1f2617d0311678fb4a3d6a50cb7e608c649bb618124a76c7ffd17387de963e1cd28d2bd5a61c98613f6e009a8a2a90d989827b35de0","services":["streamer"],"enable_msg_events":true,"port":63242},"up":true}},{"node":{"config":{"id":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","private_key":"0af9f76e6251f7612eb7fde7f20ebf9dc8334ae1139a6e2dd068a97a896860ba","name":"node_f6ca39b3ad803e99f4e4e9cf759fff6abdf06e6972bdbe524f6eb930c669d6f0e9b91f3de9df394b0d661b068273861391bdbac948ad911351c48cf02f874db6","services":["streamer"],"enable_msg_events":true,"port":63243},"up":true}},{"node":{"config":{"id":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","private_key":"1058a6e2e08d811ed1ab6b6eb927323ad28292591a70269330779d52491c6d64","name":"node_385168340139236a0e0f537fa693122db9fa02a377c96f31aae54718e92624fc0288164877e63616651565e055c53f7074ab2fdd18a837da6faf644941305bf0","services":["streamer"],"enable_msg_events":true,"port":63244},"up":true}},{"node":{"config":{"id":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","private_key":"85e1a2673b4ec4f876778b6fb175fae0e36e9e6456c8d8fa2a11bca2dcc8b376","name":"node_9194a3a4c8f3235203e48bdb10902d958d26c342805ea6365af9711213536509719d917c694f9a4fbdde6889a4c92299a5301f0275bda4dbcd2541b5bff5b271","services":["streamer"],"enable_msg_events":true,"port":63245},"up":true}},{"node":{"config":{"id":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","private_key":"54906c0600d9da9afc0e64bb94c7902ff60042840c9143900f2ae8fe9ba69c63","name":"node_c2705ee7238ef9305e4da196653cde707649435a1e8b5b797d164e5ca06184a77af5bd7fa938c995fdfcbce724fa7eca3d908ee34891ab62cc6dfd411c3fa1da","services":["streamer"],"enable_msg_events":true,"port":63246},"up":true}},{"node":{"config":{"id":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","private_key":"b798233dd61ca3bf4bcf5729b06de9bee5447b3c0c4f604eb12e856ff1363492","name":"node_bf4ff51cc3d9a9d8cefd7e346ce1384d06450228a6086fe12fb0c60fec54bb6478f090bb638fbdbf8f41f7bc6420cd8a5c8b1b8566229b6851167375ef412f46","services":["streamer"],"enable_msg_events":true,"port":63247},"up":true}},{"node":{"config":{"id":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","private_key":"529b3a0af71a5e49aeaa2a7ec622d5a1fb3a920fa64f8d200af8f96f0c2d5d21","name":"node_f33d1f3e460574706ac1c7fc9ebb4683b173496ce3e80017d1c3521bca03d5a41a9c7a6cde8347d2238917b7cc58cab000ce7ccf6bb408561015a2ecbe613408","services":["streamer"],"enable_msg_events":true,"port":63248},"up":true}},{"node":{"config":{"id":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","private_key":"d6dd6c5f414a03e6e909bb7447653cbdc2b5adf6bcb2a4643c2cc7572e574a11","name":"node_083e67bb19e30d14e4df6d2483367d6659d9b56744d53d9cf7fd15954c327e1bc88a5d0db8833634e1dad7209164451f8934b59f76b5990059261abfd650519a","services":["streamer"],"enable_msg_events":true,"port":63249},"up":true}},{"node":{"config":{"id":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","private_key":"ad02d38ce01c0291ad949b92338b10b0427a30de149df0a3c7457c2b2340a963","name":"node_0c14dd51a56130c51009e3ce47c96b2afef26b7e86cfca65d8a9bae1abef13b3a7a192b422d894c39e24ab00be412d166a3571cc259ff4462d4ad8925a153766","services":["streamer"],"enable_msg_events":true,"port":63250},"up":true}},{"node":{"config":{"id":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","private_key":"5f33ccc756728e5919332381312dc8eb9f6009e9a407654eb70b995c12338ee7","name":"node_855bdf057f4a6b095e2000ada199447b5b4f2f8d78d2ecbaa0ff1fbf761788870ee999266ad3b26efa02be1a46a4d92ac0debb85a2ceab3442394ee7d99e5355","services":["streamer"],"enable_msg_events":true,"port":63251},"up":true}},{"node":{"config":{"id":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","private_key":"7645086a0c4af854131d0ff4a95ef3a1d8ed9bb6620c934708a2b4f317c6f964","name":"node_b53078000796f1cdb04dfeac424d5e3e37e30f00bd5bebf9a9ea0525c62917612b3a8f508df6bea59e3c7e4cd1aa530841f9a8af54e44f5617a13dee2c6ff007","services":["streamer"],"enable_msg_events":true,"port":63252},"up":true}},{"node":{"config":{"id":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","private_key":"96bc72358e15d649f871e17f6fbb7ddec911aaeb3b5bbd55929512756cee6a67","name":"node_5526d86ba9df651091d88460a9bedb9cedb957d452a635e1db46b9fed78082022adec0047cd7485956a4ecbb0e18107595de0de3c35242527cd302bf74a19260","services":["streamer"],"enable_msg_events":true,"port":63253},"up":true}},{"node":{"config":{"id":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","private_key":"3348eec47933810a23d583715b1a18b2a8332e8cd45bdc57bcc5232c6b5c0164","name":"node_a7378ee34876af17c6cd94a69b6b741ec7891ff5375bc4241d48608d047455ed48e6baae80ee88d4710c69ae615cf195cee26c94b54de1bb935628ce1e3a723a","services":["streamer"],"enable_msg_events":true,"port":63254},"up":true}},{"node":{"config":{"id":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","private_key":"553bb09d30fcd504ead604d830aeb0e3d0a5edfa58c94ec3da1508184f7c059c","name":"node_3e488a7208ce0e097ce47fc6651a13e95cae137d1a054a09b04d2f59d45faa2594a8c3b395e77ad1a3c2edcd827dda73c0c97dbaa6d9519a79184a0aca01ac4b","services":["streamer"],"enable_msg_events":true,"port":63255},"up":true}},{"node":{"config":{"id":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","private_key":"60b600c6cca2712771a98d797a46fbeb7be68a054d94d8eaabb8ecac6d3520a2","name":"node_07f25fdeab2b44b2e92fc80fca7de9e4a8547d27a98a54593b3395c270a9ff3f2a5da62a2e8531ce86359f0cdc5b6513b773dfd64cce1b83e47065d9760a2c7e","services":["streamer"],"enable_msg_events":true,"port":63256},"up":true}},{"node":{"config":{"id":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","private_key":"4bb86dfcc439dc83032e6189165d986a8f315558aa7fe1b6bb2f91e521a837b8","name":"node_0f9f7e2dce4ca266c3ac0ec3a8854200b54487f5308e3db418461aeb5f67c81d332619b6441b468e480941e63100ed1b263e7adc20689dc3dcda578bfca538fa","services":["streamer"],"enable_msg_events":true,"port":63257},"up":true}},{"node":{"config":{"id":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","private_key":"ff9eae2bb1fe93a164f54d3ac907b4c4ec79fa41eece5a44aeb70c083ad80ce6","name":"node_a1560ce7c1f1d5972f027a8e9cff820611d84764aa067434a75b63887bc4268a259101486d34b7fe83dd735e799789986cd3e9b156c86ede598bd86af4454924","services":["streamer"],"enable_msg_events":true,"port":63258},"up":true}},{"node":{"config":{"id":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","private_key":"f23f43541bab9bd56083d663c140d382c5a9461060c285f1c1b1c6621d8e2e1b","name":"node_e06a789a7f6988e1ba5e8358b6cd4292555c7f9f7f0dda6fc01cc26d24e49a8c1ad694423ad74aec6d80f4b99e2bedc49b6a5f2670744cedee3a3e1848e6dd07","services":["streamer"],"enable_msg_events":true,"port":63259},"up":true}},{"node":{"config":{"id":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","private_key":"e3853d7bcb9111bc645eaaec38093b38a0b16e80774deb42bbf5431e78e9ae9a","name":"node_57b47f692f4d69a5d2c9c193680eb4ccb5a6c574662df0138504a549f3ea74f20c5b866ac4d9e76c4b49c83f5fd692ead928ea20dfcf643a11a1c1e841c0ec42","services":["streamer"],"enable_msg_events":true,"port":63260},"up":true}},{"node":{"config":{"id":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","private_key":"cf8c79a1a70472ac10e1dcd59e8a498cce13cc78f13a28a1b31ef8070e8201af","name":"node_2ddd49fae11d8bd2e7e75a481be267fa846f51cc1160bc326aeea51c542323ff444909de11e2731e835140bc0b1b32020e1e73fa652511a381222bf0aebc4081","services":["streamer"],"enable_msg_events":true,"port":63261},"up":true}},{"node":{"config":{"id":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","private_key":"872f89492c87094f84d4db636ac19e5c87ac57cce008931d2db6d7aca72dc552","name":"node_420b9c90584651c5a3fe3c16aa377444a321dca934f8a097d01a616554067feabebf2fdc8d2a25797f29a8fef30d5e2c82f8e85b20f509a880367b9b0ccdea47","services":["streamer"],"enable_msg_events":true,"port":63262},"up":true}},{"node":{"config":{"id":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","private_key":"9c7cd9b75a3b821c0ec74e08d8727fa6ce5aa184479038762b1ae4f3c07b3782","name":"node_5bf29c02f07faf7ae8e46389e1b98df4f5e88c9316b5151685e6ae7b4e622cf171ff09f996aaa8ad846643b3bfcbd1ad96cdc249afccce439bb5c55246b95801","services":["streamer"],"enable_msg_events":true,"port":63263},"up":true}},{"node":{"config":{"id":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","private_key":"ea03297fa8e550df89d0595b3026c5367bd7b0076c7a9fd5c6071f0944373202","name":"node_e3c8a97a2d95dd543f9e2b41d9dce6256e284296f866f4f92e9925f8c7519dea23fd6d1a11153b93c10d6a32295e7b9bcc16024e690e4a0dc84fd25ee0f31b2c","services":["streamer"],"enable_msg_events":true,"port":63264},"up":true}},{"node":{"config":{"id":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","private_key":"dc424f98922ec5d19a5a8d5ee2acaf077778ed0fd92db276f88bda3cc4fdb5a6","name":"node_7aaf7817b93aa6d2f50513791f9ad7629a901ed0dcb151189f44763f83423446b20ec79a48fa260cd9bc2907d5f0ad06b2c4c5e6d812f3d8876c8020ebe41019","services":["streamer"],"enable_msg_events":true,"port":63265},"up":true}},{"node":{"config":{"id":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","private_key":"baad13cad07e0edde7209f5e70451c82d07d1c4d4bd5ad6f85acefd48d14a253","name":"node_062e0ca43a1885c4a7ab2a5169790f9081e3e9a2dfa286b8cc592d5ccbf13d7a82b72d23361a19026d04fcf41b752ea320d98359d770aedfcee626e21c3494b3","services":["streamer"],"enable_msg_events":true,"port":63266},"up":true}},{"node":{"config":{"id":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","private_key":"613f528e83e5bfe55db16791b917891c139ea8ab7599058a204c7836f71feb95","name":"node_f9ffe87c52ff4c22bd9696af32e0a9d34bb81fb84d9d8bf5aafe2ef9696e7b3d6460bf2a93aecb066133f53416bde841a02d6967bd06e3d4a714f3b2c123a947","services":["streamer"],"enable_msg_events":true,"port":63267},"up":true}},{"node":{"config":{"id":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","private_key":"873d0f70715479bbed36c4b74c9391b723fce386d150bbbd613d33eaf08cf257","name":"node_bcf8e831821a5bca359fb824c7dc4d66906de82f3663a0a853d96880a8ca0bdddcceb1b66dd1f13f75ee20fde50fc9de545bc25767f228baee910e0dbfa8cc27","services":["streamer"],"enable_msg_events":true,"port":63268},"up":true}},{"node":{"config":{"id":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","private_key":"48e7cd643d45488597f25de324e8b7553c26e1cf8e8d44261d610ee9041c898d","name":"node_3d2df188704eeac09c8b291bf275a73888199a231c832c51dbc3d746968d4b51a7d5eae0c7c9b8c8e19f5e28d38c375e01abefa343f31dbe221deb837ab8a0df","services":["streamer"],"enable_msg_events":true,"port":63269},"up":true}},{"node":{"config":{"id":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","private_key":"f88a54bfc74bebed6bc8bf6d7b98aad4ea4f8b8aea6cb1514aecf398bee41960","name":"node_8f88c7ec044f758f29bd8d12a5170bd973aec8f6cddbf512b910c4b75a0fec09c5e198bcd65622037f897759db68da2328b4a7ca93585dc9cb62e46d2a6c0864","services":["streamer"],"enable_msg_events":true,"port":63270},"up":true}},{"node":{"config":{"id":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","private_key":"a5b02d5d5ff64f5330758019a5ba0583f2b74b423be4695b4ffd94231ffd58c8","name":"node_4314b0b04331973ed29a58843951f144ac3d09bd5d57b6cd9aaff9b73a7b2ec81e344a3e4ece462bd2081b837a06310e787ef3bb889dabad46fe7efd394c8342","services":["streamer"],"enable_msg_events":true,"port":63271},"up":true}},{"node":{"config":{"id":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","private_key":"9e96b56ea6abe86960b688d477b9c689309a7f304c5e4bd108459144e68448c4","name":"node_3612863ce0456c91785a829bf5c9d2b2fb97dda083a1847e5a4ebaa6fce1260faf4d1eb374c2225431a82774163835fb59c8cb0fa9fc0969eab5410c71109cc2","services":["streamer"],"enable_msg_events":true,"port":63272},"up":true}},{"node":{"config":{"id":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","private_key":"5bec215e5024e8ce65d46fbf9b69e1718c1173478f8654d2ef451b6217ac6db3","name":"node_2ac522ebfa49d37f86c6270ad4cdad0e766493f0e463b18c9906c70fbd2e5c6ff6b0d5879de6e3894418370636963a78b0c0cf087a8684c2ca30c9c736e49228","services":["streamer"],"enable_msg_events":true,"port":63273},"up":true}},{"node":{"config":{"id":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","private_key":"00dd6637412fc5209eeee1423b4eae49fbba97d8d5c37c9ae6819f7afc53569e","name":"node_62666b24d1026345349edb6a878cdc27d6fee8254e83f79a298ce2805260d97aa46423deae440f86ced5cd99b30e970c8e1ea1046752b17d8c80dc68d9a49b60","services":["streamer"],"enable_msg_events":true,"port":63274},"up":true}},{"node":{"config":{"id":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","private_key":"88ceb50dc965b4e3279c8e7729db14ea34238126f1ab694c621d5ab9183acb52","name":"node_9ce6b9decb69d66075993e903a0727ec109a04335634616097c0e60b08f94f764634fa00891b1070f6ea1ce896bc7d11d3aea92a00f281f902d960894cef296f","services":["streamer"],"enable_msg_events":true,"port":63275},"up":true}},{"node":{"config":{"id":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","private_key":"638176a3cb343c140131c887892f37f9ad69e9c87c0a256dbbf2fbf8dd2a6b08","name":"node_b870935867183bbfb84add16b9f56c02c834b7042fc24ce6bcb2a7f174e6d2239357a00be4272c1ef05c7f9baf5a9f16b53bc18328a9b7aca8540c2916805b57","services":["streamer"],"enable_msg_events":true,"port":63276},"up":true}},{"node":{"config":{"id":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","private_key":"4da9834c8665dcfed17ee5eb89c5bfa3c0d1cc4340088a4038f746dae4cc23e6","name":"node_c83985973a9564ade7d90aa54911ac57077600676a1d27292d98e058bf1315887bad84ccd708cb7f52a695a1405fb7d491d7ca2ae9caa3ff58a5ad78ce4dc9d9","services":["streamer"],"enable_msg_events":true,"port":63277},"up":true}},{"node":{"config":{"id":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","private_key":"05eb5751d81653e8ce409be43c9da42ff90f90c6e68981e69cd03a867d93b800","name":"node_acb4088c27ee2ee130ece3506596432afdb9e9757ec11ebdd35c5a6e87239545c48466913a646980104c8fd7a9a335e177f04efffe9dc952dfd7cd5c1bb9aac6","services":["streamer"],"enable_msg_events":true,"port":63278},"up":true}},{"node":{"config":{"id":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","private_key":"846035be661387d6163b5472ea225ecc9d3851349f480fb901d2e31bb8ffe858","name":"node_b4fd11306b1416a9bcf4719578976188e104b8c5028b9abd3214d257446b97b70a22e6c00934d80caddde15e8e4d16af03bb399583047983fba373d8313226b7","services":["streamer"],"enable_msg_events":true,"port":63279},"up":true}},{"node":{"config":{"id":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","private_key":"b34c69cee56a834b8a36ae964f1847d1825821a21d104396039175a8dce5ac73","name":"node_7b35c856916eb3fc1b1f451667e240b95aff8f4731cc0f6743740923081ff1ddf2eec81bdccf4691a7bcc053d23eacfc15809c384a73448f618317bf605bd1cd","services":["streamer"],"enable_msg_events":true,"port":63280},"up":true}},{"node":{"config":{"id":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","private_key":"3d1ea95ac16f7d903cb8630a8c06052560a974b0abd3410d9f8b2968e7cf653d","name":"node_2ab9513899c3c829b6284e56bf2b9862dd0156ec052b58615dba77d450dac642e534ec36ae5d3234262aff54e19f99856e908b9d8c1da660a7834a445610715b","services":["streamer"],"enable_msg_events":true,"port":63281},"up":true}},{"node":{"config":{"id":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","private_key":"70a577ae497edece947ef065da29014e45dcc1d942969597600a64b55e8bf718","name":"node_e087230634f556b818a416b66ba3f1d1dbe3e0dd0698bbb26fa86a2499acd169466f564dc18adf2f9be4d1ada0e86c11549754097601e10aff4f3a57ddffa24a","services":["streamer"],"enable_msg_events":true,"port":63282},"up":true}},{"node":{"config":{"id":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","private_key":"28ee397105a113c5c4e7d7cb1b3dd17b6db66c3cd8f3b621df0271e544fb446c","name":"node_66beee3968dbcf3addc6feaf070a4e3e82b5bb164fb72f40add89f732c12e8d0a31a7ee1f1e24a4674e4dfc9a4912b02c17ce3c224d257d78b7156544d6507dc","services":["streamer"],"enable_msg_events":true,"port":63283},"up":true}},{"node":{"config":{"id":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","private_key":"b6feae1f667895ada3116380a2cabb0c702b44b24d45415edd143d27dfe5643d","name":"node_a08e47137bf611dfbd20308a22bdd3ca00121386f121d6d712ade86e9a1601a4237766887cd91c8516e20b6e323d2ef49c1c7e177a0afb4c813f0f344daf779b","services":["streamer"],"enable_msg_events":true,"port":63284},"up":true}},{"node":{"config":{"id":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","private_key":"a643e845285aa039d6f84cb124b618bac45c970fe0b15fdbbbdef834300b4857","name":"node_990b1db3ab1390219e8866d39fa4441bb5bb89ad786b3e255771869fcd08906dcf63f34007481769c7462edbcc665acc0a552e3733360b8d8c310c9321a5550f","services":["streamer"],"enable_msg_events":true,"port":63285},"up":true}},{"node":{"config":{"id":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","private_key":"1b31bc34d4ea49b0c1df457ad06513d0f47c56ab106b0f0ac97c43ccdc64db31","name":"node_7865b82e44add2cea6ebcbaba9c152184331a2940fe73f6f9bb940bda8a59ab4cf4760894b9cadcaa54e36fbb712ad619346a49a85e32cdf2b53cda1ac1e0658","services":["streamer"],"enable_msg_events":true,"port":63286},"up":true}},{"node":{"config":{"id":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","private_key":"b380737ac46f320eb5884ca8a60e1693caba904545b68396e33fb92cd19aa18e","name":"node_292c78c8e41606e98428096bc6f4609a7aa48e5c4d17eecc64d65faae4a7270b0c15f0cd74274015688ea0a9aff34f215c29118222e362a29c8d637963973a55","services":["streamer"],"enable_msg_events":true,"port":63287},"up":true}},{"node":{"config":{"id":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","private_key":"d18c1536cd7d9771bc9b64595184285ed499519ef810b3f013fca2fc01018048","name":"node_ee36d1d5dd69fd30242d7da2e941b34ade5581c7164fcc43288ecfc52937a98f1b31ade5d1e4dbf611cbe1c7875b2840c89435081cde471c271d7bc60e9ef211","services":["streamer"],"enable_msg_events":true,"port":63288},"up":true}},{"node":{"config":{"id":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","private_key":"186743aa8dc07042c40bb95b2efe30149139f3c2ea4a4bd193d3be68e8f4485a","name":"node_bd1a7c63fca9e1fcc67d7fd62670beefe2bce483cf1dc1233ee85eb90db607917cd9a5d7170b10e80b925a20e2af2c54d286b01805ac34967410859f4f03da09","services":["streamer"],"enable_msg_events":true,"port":63289},"up":true}},{"node":{"config":{"id":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","private_key":"2e960819700f3330b00d2d58461403843026ffc7629b2514568c6b571fc99488","name":"node_9db1f94d74a00d1e5e2a391f1bcddf16b6d0670a2c6d91d946d38112c58634444b6fea8e8c05ab4b73bacdd62a0b575f6fb8729978edc216c7842b177b9f9cd9","services":["streamer"],"enable_msg_events":true,"port":63290},"up":true}},{"node":{"config":{"id":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","private_key":"50c27493a6d9ddee175040dafa1f40c6ad503b55590479001ec085212c5cc08b","name":"node_934a5fe1b91c1891ef4df7f67c027e0eb115d4c2ca4a1b76a135ebd4315c4fb835d6625223194e6a134407b38b0d3928fbc7bc924a3c6a538989a6cf200bf4bd","services":["streamer"],"enable_msg_events":true,"port":63291},"up":true}},{"node":{"config":{"id":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","private_key":"4c67752b215e2cfc06120964f06976fce2a1dba599c0f32c0f4393b9d77ef872","name":"node_485825745d97654cbb92a14e0cd1078691d3c28f4d82b1046284b676a42b44ca58eb43474e45e415d3bd3f3c383f9a1a3365821ed7ba6a9f2603b29d58031dc7","services":["streamer"],"enable_msg_events":true,"port":63292},"up":true}},{"node":{"config":{"id":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","private_key":"21acc46816414d3a1d76bca30d2c2e1e55d420e9ce704d0720696f7f7fa0bf33","name":"node_5bae82d4832092c17bd11474f7748015b8b69b896ab8f683a7c0024fc98740cecbb9e31c6275269f9000e5bfe51d7f45cd5dcd4433e0c87b5741685b40fe3983","services":["streamer"],"enable_msg_events":true,"port":63293},"up":true}},{"node":{"config":{"id":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","private_key":"4542e37f43858e396004d8d8801bae1905d2496a3ab44f75cc29bd2c2a472f94","name":"node_732393b99c490c76fa45e3e404ee095f2fa445fcc123af7ac8ab1d2fdd7cf2483f5b82bb818bd8a82b1a3b73e63bcc2c83d8f24d9aad9afe36503735e7967be7","services":["streamer"],"enable_msg_events":true,"port":63294},"up":true}},{"node":{"config":{"id":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","private_key":"a8e588af7acfd6024b3d71be7be630345ca80708a69214fd31e3b4485f039c90","name":"node_4de378164d77a28c90cf162dd1b465e0282ee17aa7d3bb3179252466f72da33a36c9f298f7c9498e38dba4018e7ce3e5fe631c83842cd9059e23a7fece366d87","services":["streamer"],"enable_msg_events":true,"port":63295},"up":true}},{"node":{"config":{"id":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","private_key":"e3d1a9d4621d7f77d9c2fa224f0d8c8211c2bf461554a1d50afa8f34a82a4754","name":"node_155e4879643a472420012e040a87dbff776fc1976814c0c6cd0d5e157f0d0baac04aa7f2535786c09acc2700547383d2119b64a6f62115f1aff1708738844d8c","services":["streamer"],"enable_msg_events":true,"port":63296},"up":true}},{"node":{"config":{"id":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","private_key":"6522d077629e8c313d832a7a87e5dce9e989618cd1eff1b1eb3c8b63756159e5","name":"node_81288bb0584b7ffc1546043e052e1df10fd5371b35dedd0bb42ec5b30ce69b741b2f7857af5984d4754b39d7253575fde9298504999b78380ef602d391c4bb1d","services":["streamer"],"enable_msg_events":true,"port":63297},"up":true}},{"node":{"config":{"id":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","private_key":"f90016392c8768d222055de5cd1c3a512d3c46b7c7be34a93cbd016aea9ce753","name":"node_109556abac422a912ecffec0d8796f8f16e92e8f95cecf72dc89e97a8bf1fd37aad3c66aa3cf134acade6d065c31821f977171d5c5463305b57ce3eee99a7ab4","services":["streamer"],"enable_msg_events":true,"port":63298},"up":true}},{"node":{"config":{"id":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","private_key":"49f3b1f88009b94bc7beef8d891816672e9075f3015f5954a9ae9d13c8c07290","name":"node_759f46661056bcbb30c7706c9fb87e22a30feb523bd53ae5d18db043efa45b49a2b8982abebdd598fe0912a05896390ec2eabe5e160cbafc0771990708ad8c28","services":["streamer"],"enable_msg_events":true,"port":63299},"up":true}},{"node":{"config":{"id":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","private_key":"65f5fa03f2989a02e37bb664102504038f14adb483b2116b07355296346912f7","name":"node_baa5924e1547c177011285d292aa161a15e5ff282da2cd0afb83c9caffb07bdbb3662c227fa7b26e6dc8be9b8863e647eb5f8ce81640532f8f5c9a7f36557e63","services":["streamer"],"enable_msg_events":true,"port":63300},"up":true}},{"node":{"config":{"id":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","private_key":"87514536801d0d46fcca5c10334c9a6a34ad982fbbcf65b2f881e99a0c8ab27e","name":"node_deb7af800cd20a647335f0feff5bfb3e182f99f4c2d1ade10da36ecfdbac3b5fba4e8f0a4595443fe395b44af3a95617669850944655def85d57cc81c5682a3b","services":["streamer"],"enable_msg_events":true,"port":63301},"up":true}},{"node":{"config":{"id":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","private_key":"c69b71039aa3f28c158e5e639d35069ee66cc88565ae886e75651d88fae8aacf","name":"node_17917fa4da06068b587c17899569dcc768b9cd2c27117a4ed67aab26a7e70cf8d32b881db258061ffd89a332a3b29bfd963d8e171a06c3e208ba0de1c42a2b39","services":["streamer"],"enable_msg_events":true,"port":63302},"up":true}},{"node":{"config":{"id":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","private_key":"76998bb1133735934b6d8cbebf029318feaf9b103165cd460a4a9ae04ad26c5d","name":"node_032b9bf2f59f15571821611d3ee541aa748c86d47fbe5f049fd0069be53e5d7c41991d82957e9c727654c3aa73ec94997c03d8a6c1d2007c9bb1a703f6215158","services":["streamer"],"enable_msg_events":true,"port":63303},"up":true}},{"node":{"config":{"id":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","private_key":"424a19356346001136b4df8a6119a510d526b508d0378eb5b67ffbc471757c08","name":"node_be026dfb24847cac2d00f483104edad06ca8ecb9e1229c479ef5650c7b427cd5dc34a1cf06172c17c9d0406ce17009712e82446394743d4cd9bbc41c537ebc14","services":["streamer"],"enable_msg_events":true,"port":63304},"up":true}},{"node":{"config":{"id":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","private_key":"06aade0419624ec355a3e8e47144b1efd1853293246628e0d3ce856bf3bb64be","name":"node_389b5c1a805f87427e6d647ec5488342a3f7d700615943d5ad98ca5c111f33c7ee007970b4d3e475892095c0d5a79b7ed52d12598398818159000d4b9b719126","services":["streamer"],"enable_msg_events":true,"port":63305},"up":true}},{"node":{"config":{"id":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","private_key":"903c726d393f3a34e861aee6a1b42ea078da78c23d1dcdbd0fd8c30e80b65bf1","name":"node_c57ea182bdb42ba9b0870b5c870e467f52693e5c0df752fb6eb0dfbacce7763f73caee10db40f4fd90f19f504ee586eaf9da41f5ee93ee515d885fec99374116","services":["streamer"],"enable_msg_events":true,"port":63306},"up":true}},{"node":{"config":{"id":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","private_key":"29f2f00196b61b834638899c2e440c57b99668fbd93d7eed220c4556a76cf89e","name":"node_2ac93c31937ca205d61cc5c2a1b9037871cac55e9b306b999b28e19566b3316f6539455e014840ea50c2db8a7c97d78804d3a2dcd7cd9c1f32ace0d36e5dd339","services":["streamer"],"enable_msg_events":true,"port":63307},"up":true}},{"node":{"config":{"id":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","private_key":"682a2f9130cdf75915282000edc627563ea4e9de499ddc8d55efad472a94091b","name":"node_ca1aff0d847c6fdacb623ad9078a0885b3208614fea20d5ff11779779b486bf5e9c794aacf848d3c2d58cfcc1eda8356df82f5fbdd0a5236beffe8e6042848c4","services":["streamer"],"enable_msg_events":true,"port":63308},"up":true}},{"node":{"config":{"id":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","private_key":"d1b4b3adc1b17a79626152a1c7362bddd7c47886990759955595a1de27f7b70b","name":"node_2e409baefbd821485a151993356730e5989810d581e68190fbaa142799c9335bcf98310ad188fed10ae6eb6e2e789730393e509962ec5c0fef0342d72ed088d9","services":["streamer"],"enable_msg_events":true,"port":63309},"up":true}},{"node":{"config":{"id":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","private_key":"34a5057b2a2c507010da7a091827d28ddba4f59c9b5f15f7cb7bf0578e4141c3","name":"node_7b5c0e81c7f4e3ae29d745f6028cfa10b29a16a9c261b65fb8dd05d6eccc634612ad5d3029c8e9f39863a2cdb2682c25f090139bf5c4950e25647e39dcb40e63","services":["streamer"],"enable_msg_events":true,"port":63310},"up":true}},{"node":{"config":{"id":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","private_key":"7b608c298477c4687c50adba466567e19c08492da2684417c129d730caef7594","name":"node_663535b22018a4ef0b151572ef286fa66c22c6e9b2913a69c4a735d4b0149bdf6c84bd83d710f8aa2627e8993b7f020750fbc6f56a3365ce4c840e2b3de1a6c1","services":["streamer"],"enable_msg_events":true,"port":63311},"up":true}},{"node":{"config":{"id":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","private_key":"d9d17f1baee1ccba3fea764f5f5797475ebb9f206d735105ba8fa2c32fe02f0d","name":"node_7b1e20217f594f87350542df31ff5ae8a635679bac7962d49c97e02190c644b673d03e7eba2626b45ca7ebf98d8a972dadbba02c18a8d2cbfc3e7a4cced5b4b7","services":["streamer"],"enable_msg_events":true,"port":63312},"up":true}},{"node":{"config":{"id":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","private_key":"cea9931b34475ad432aecae3d385d895f0ab3e93cdf1d9fdbb356753ec9c7a59","name":"node_84abcbc7b5598ecfd91ceace0927921a5a3404fdb274fc2a2549abbede5f8e4f62c15688a4dc9a2d80262c45970c88898da245c6eb779f327a81d53a17bbc74c","services":["streamer"],"enable_msg_events":true,"port":63313},"up":true}},{"node":{"config":{"id":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","private_key":"362c6622af8998cc3c5cf88ad71f308b632f8f7d0e8ea7ae341f8c8ad44cda5e","name":"node_eab86c521f8f1ac67c015ab713f1236a08b0200757a96bf87ab8301e7967ae62361f0e14da14ca294fc8cb3b4726b52f4773101e21b032977c6a647241b59c73","services":["streamer"],"enable_msg_events":true,"port":63314},"up":true}},{"node":{"config":{"id":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","private_key":"9b28fbe1dfa137bce975e179d3acfe046e5d148e1f9b1aeb16bdbc2cf7abd071","name":"node_e6779e3bbecf81dde8b27d652ed2726c45c205db0d0405c4580014a4c91d739830276f77079108c98ac516ffa00194e77a0795f7140bdf36069b6475e58213f9","services":["streamer"],"enable_msg_events":true,"port":63315},"up":true}},{"node":{"config":{"id":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","private_key":"85e559f97ba5553b0773479fed666bd92a928924af8164f41e92e8acfd51e896","name":"node_9133b0b3c8f680286eae90c3beebc3099a13de38775a3ff2abdeced62d05eb2ced5ac85eac0870156be03101024da5e1d9fbf3e1066ddb3f088221e64149acec","services":["streamer"],"enable_msg_events":true,"port":63316},"up":true}},{"node":{"config":{"id":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","private_key":"652705ca7c47c641c033e01212d96759539f317508df53dcf7397dcee0e20422","name":"node_e1ecad3beeb6c19dce551e4a603c7b440b4498c44e298dc67bfaf4ed2c75bbea95df48b1cd1318e2ccb962cbae7c30ff258e73f8c3fc6b7e9ae7a47f7cf8e53c","services":["streamer"],"enable_msg_events":true,"port":63317},"up":true}},{"node":{"config":{"id":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","private_key":"2578458d6da6ee18aceaf48f57a0f211f9b0a0a49149cc71356d1ccb989b55d8","name":"node_1d0244a13affe60996fe3cf51ba624adc746de0c7ea68ec5a31311a36077c5b5495e3d95c9642875db44c7ecae6ffed22e45f2e2d024d486760be2af9f4cf2cd","services":["streamer"],"enable_msg_events":true,"port":63318},"up":true}},{"node":{"config":{"id":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","private_key":"35b91179894d9195f220f768d849bcef7b2752c1d63a4d373be189c4e35b68a4","name":"node_d9bbcdfd949010e6b2cbf6d0f34b27593ae410bdc1838876aeca35679571fe431d040a5ab085c0a77f111688bebed891da3587277cd794702437cb20d6aa4256","services":["streamer"],"enable_msg_events":true,"port":63319},"up":true}},{"node":{"config":{"id":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","private_key":"62fbe89ba6bc5d8f608f65baf5a0a87c9cffd1f428ecacaadcc777a117a88fa2","name":"node_0a4eec7b0e05da799aca5b36d9e2530f2a89d1426b1fcb7d8f9a662df8a8b5b763767a20db3c9c63e0bd13c2a6e16d3ba8f03baf84f5e5d24917b3f211d9bcfc","services":["streamer"],"enable_msg_events":true,"port":63320},"up":true}},{"node":{"config":{"id":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","private_key":"85b477146d09b052deacbb0f7cc22f61fe3093095e7677ce89c086db68c8c939","name":"node_9bbbfac8be4a000f51a4ce8d024d2595b5d491afec0138922dddfde5ef62c664040c2e9304cc6b7bc688233b5d0c4644b8c8793227c078285a3ab894ef0497a3","services":["streamer"],"enable_msg_events":true,"port":63321},"up":true}},{"node":{"config":{"id":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","private_key":"b3caf8e1271504098be33349fd983395e57f6cc7f4c0d74df8dec7643c0cd09b","name":"node_016f8f4619a16a07fbde5a18e362158d696e4d9f104a77787f26e32a25cd7d278256f8e0db865c488a99511ec27a5eddd5ebbd1c1397fa7f8db111062e5fe959","services":["streamer"],"enable_msg_events":true,"port":63322},"up":true}},{"node":{"config":{"id":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","private_key":"a61a6a7469d5c9abf20daf3df75109b9139cf36c1194d9bc00046d1359c44823","name":"node_7acddc7fb6ac587b7e343804c768e4291cd28dd2b2b9207dea6ee82360d848a52d84f94e4c49e9c421f4f90e2d24f6291e2358783ab0230e6ecde82e69b4ac52","services":["streamer"],"enable_msg_events":true,"port":63323},"up":true}},{"node":{"config":{"id":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","private_key":"629bf1b9c1de816ee9d1abd91d2cef359ce96216dc1d798c7f246ecc5bba8ed4","name":"node_9b59b76dc61223c7b37083b0ebdda22d3599563b3e3986f5db9d5b12f8c806cbdeb2345454efe957cbfa11eea9c7896aefd9a461210524805452ca100a9ea431","services":["streamer"],"enable_msg_events":true,"port":63324},"up":true}},{"node":{"config":{"id":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","private_key":"880c61b8c84f87c55e85aa9b07944500eed52b76b64b6d15c93d8e7c23000042","name":"node_e2e0419a41bdfc5bd76deae2ddce6ac865f886d764c9bd18799b79fa3b2b6ba66d765d26da2037e98317e1d7e8232a61e63c1d0cfa98c9137424151b46e07171","services":["streamer"],"enable_msg_events":true,"port":63325},"up":true}},{"node":{"config":{"id":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","private_key":"dc74709b0972c1ec957a2c056059ce117c9291997ea47107228e80d28af70acd","name":"node_5df58ba12334a1b4f983d642fe435901261767cd81f8f37c43e359f5584664e4d287e8c2275995604a3b3a4823418e35cd899a3db2a7db31570e19512f375481","services":["streamer"],"enable_msg_events":true,"port":63326},"up":true}},{"node":{"config":{"id":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","private_key":"52e14edd67adc3154d0d5a91f91e042773a79af41c5cce9120e2dc03318a7fdd","name":"node_5e86f39cf8338ba098a85d41e601a303fde311662b216ad32a2b7bfaf2b2b6dd1af3775784b39f2d85ac5fac96f05f3abdd8a2bd28ba16d939725fd6a33ae1b6","services":["streamer"],"enable_msg_events":true,"port":63327},"up":true}},{"node":{"config":{"id":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","private_key":"ba201a301c109cac7dc4f762066312478f6a3b92b80495c19d238b8e728e3f63","name":"node_df54af3bae257d437c5657905484e0d72e9560c46f8ba6b3437730234e05259b404cca40b0831e911605ff8a68a19e8fd7e958069ec8b40595928892f4fa220c","services":["streamer"],"enable_msg_events":true,"port":63328},"up":true}},{"node":{"config":{"id":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","private_key":"4f8dbb09790674afc8ae90210897ff3196d82a7d8cacd67ab970ab02fd61136e","name":"node_4ee37acec2178ef120166265aaa2b64b09b315fb53861405ef46f2503c273eb9692e9cb4c2e67a8652254d430fd6e02dd3fe4cded20bb231a9fb834d292b0b24","services":["streamer"],"enable_msg_events":true,"port":63329},"up":true}},{"node":{"config":{"id":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","private_key":"fd9060fd74b7db28d5b02541febcaab4e1706cb1ae50b22d20a7f619fbc774cb","name":"node_abd8f5a4d700c06ec00684b23d2d25c4df1a9554fcfc57b0ddc3fa476e6a699ba75e1213449f900803f83ab8194c6746664b547202047f35b8b3e216c7147bf8","services":["streamer"],"enable_msg_events":true,"port":63330},"up":true}},{"node":{"config":{"id":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","private_key":"3034bb94560e7e8d146cf275664f91426fbeadbea78cc96662a0e762f5491d3c","name":"node_cb321c9b0fe2eb3617b8e2461aab170a9dad2c9b04a10eead4e37e551197ea0a7500eb1cb7b155efe1886486ef3d252d8ff0d309f2906a1126ca011d037da70a","services":["streamer"],"enable_msg_events":true,"port":63331},"up":true}},{"node":{"config":{"id":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","private_key":"1e3e9ddcbac955dd113066c5a41e5b3b16da5cd7bfa036ee1066ff3ceb69d7c9","name":"node_c665a6b1b7ad39b86bd4b1fe38b7ee95a0fbb1db15e91381ec9e5a235e33b69ffdc92c60dafd74b7b4dafca1b000e9274bf045abe5b93b1a9c2b31ae071a9898","services":["streamer"],"enable_msg_events":true,"port":63332},"up":true}},{"node":{"config":{"id":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","private_key":"9dcf01557c9cd252eba6d06bab3e12ad039e64f5d33b732bae4afdee4f4c63af","name":"node_53df9cce9b0169e58ced53a123d1d8f6e8fdcfb4c2d781ecbb91bb7c8eba36946dd9d21c749259769825d8a6b3faa6bb87c8c6085a522f8a3e376061f59144d9","services":["streamer"],"enable_msg_events":true,"port":63333},"up":true}},{"node":{"config":{"id":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","private_key":"290d07cdf29c35f369b7053b54ad174e4db589026d3d4b0553bcccc0a0e4145d","name":"node_d7a319f69013b8375e64d19f015547462c84565b882337998f9e669c5fadd3d2ecf6374109903003e09f5d453424b5c7fdf52163d2cc8084cf81f94844946b63","services":["streamer"],"enable_msg_events":true,"port":63334},"up":true}},{"node":{"config":{"id":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","private_key":"2a549958a13f2e346b477edf55e1056a1c7c1051b3cb277aba17bd7db522aba6","name":"node_f38a9d792173a29c61389f5d84c005d78eac6e750659aad42e2d6df883f04eb3126b2c38fac95076eeed455b2031aaf694143922aa93a2d50412a2454dc56e28","services":["streamer"],"enable_msg_events":true,"port":63335},"up":true}},{"node":{"config":{"id":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","private_key":"72cba007b6bddfa0e57451e0f28d74cd7936955babeefb16b4c3de62400c8ef2","name":"node_4f5ab12b9c5127c16739ad0d4f51adce90ba6736cd096eb185ea632789f4b26f1ebabdea4fd3b39dda5409ece6c2d92fd469cf4aecf9d29453e3e042c19b893b","services":["streamer"],"enable_msg_events":true,"port":63336},"up":true}},{"node":{"config":{"id":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","private_key":"5a603b46da0d4b5d7b48ca9ee9f08ca4cde411e8e279454ac25624f0a81580d5","name":"node_11d560045536e9d1b0b1b9e8944e00f0ca7f1e6788c9fdb51061820bbb3008ead92bb7836621bf58da7035c87a28328faecb4cb2e3cdb9d7fa4f45790e6bf352","services":["streamer"],"enable_msg_events":true,"port":63337},"up":true}},{"node":{"config":{"id":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","private_key":"955c0d00b5c9a641e3e9958a032163ac01fd30e25660ec50db255cf9349573cf","name":"node_94088fe273f76e62ca4e43c095ad12215b4ae4c59942328b3985416fb19bbda0cacc143a49eff3fb644ad53a19d3f043260e43dbb70a0aa9c15829c21cecd3c7","services":["streamer"],"enable_msg_events":true,"port":63338},"up":true}},{"node":{"config":{"id":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","private_key":"3a0fa647e1aa93088fd931cceb89e4426c10861ebbddde0f14a58e2a3969c252","name":"node_535f93057d46c4aae0902546550880be0b5ba67dca12350117d471d67f4f2b3f7bdff29bdc918767974c465df8fa1afa6bd6c29c0a36d51f71c4183673d906f3","services":["streamer"],"enable_msg_events":true,"port":63339},"up":true}},{"node":{"config":{"id":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","private_key":"22c2b405d07e440cdef6e1e9d93738f3bf3add71f54493b68b2fa368c3187755","name":"node_7ac5b07eb555af3bb4ca3f0f4b45204d43cc3798c244435909b97d9a32fc3abf0b50666e260e046bce826a7a102a92d389f8f39c5311e83bb34beddac29d50e3","services":["streamer"],"enable_msg_events":true,"port":63340},"up":true}},{"node":{"config":{"id":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","private_key":"98f9b63dc3d1c346c60957731df1731c8b5f7cbfa63ec1e4de06d1b9f70f7597","name":"node_1944f98d4db32c56a5efda5a79aa5f276bfab1e084d6611fec0e735b8bc0f45b457cdb74a23fc83b2377821fa8316123c9877acd6db7c41058ca5d3cfedaecf9","services":["streamer"],"enable_msg_events":true,"port":63341},"up":true}},{"node":{"config":{"id":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","private_key":"fef764b306a01b333cb965c1faf6970b6bf206dd19c10f666d0188e532d27a7c","name":"node_1c2f7ce55a6e38487f3b3fe6083a79f914cd6d7e4aee8f5d56b4a61b3eb584e128c56998db0e13e775edee3adacf54f09960a041dab3daa80a4f8a3b42760c1c","services":["streamer"],"enable_msg_events":true,"port":63342},"up":true}},{"node":{"config":{"id":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","private_key":"aa54e42fb6be9a738ce973816a814b29759c40f5ae5c57ef972c8957be9d1cdf","name":"node_6ab6ec15635b2fda22542c99df0a3313ad4583ba0fb3f31b8f314e3ecad446d3fb0fdfcd2be9b08374b1a7e049fb68e69e8dacdd13f1df5007a656f6b11adc5b","services":["streamer"],"enable_msg_events":true,"port":63343},"up":true}},{"node":{"config":{"id":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","private_key":"c0a44ebed32208583420c7444e83ac3526001946e4f7f6b561c24d98f96cc0a6","name":"node_74d84cfdaf32cd4cc67771f29878f1365120bd65cc14848008d5386a81f495bf88eb4132fa38a2cc109ae1e7f02c9b97597ab9d1a9c19c945e710ab9df07cdcd","services":["streamer"],"enable_msg_events":true,"port":63344},"up":true}},{"node":{"config":{"id":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","private_key":"d38eae2be9d262c3b37bbd8afb82bc0cd431e4c484ae92747ad064e4138e9f33","name":"node_6b4e376e9c94242b6d42688c22aa9ab418cb6dfb1cbca1c69de0feceec8d3af29fb005017aaa6e503cc0c03cf0dc5bcab55e01cd6f64b9efa02ed87c03020003","services":["streamer"],"enable_msg_events":true,"port":63345},"up":true}},{"node":{"config":{"id":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","private_key":"e345c696901db291ce988a19c0ad31ca0a38628ebc03c0bc87307d2c8f031346","name":"node_92d6ef729992f0de886076e5f8cdc42cbbd70b29e79c25e0b3d22b6575d3d2508d47b42f581e335455483d43625bce4e55f88cab9ff2073ee8dab746357864fd","services":["streamer"],"enable_msg_events":true,"port":63346},"up":true}},{"node":{"config":{"id":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","private_key":"7149ecac9f7173c182b233a94bfcf854714955592618e1d9500c622a08fc3faf","name":"node_57cd4c0048b459192ee46e19ec7df777e600f256e0dc8c3019431eb7bec3c020b9504ec7aea3dba8188658ca5b830ec40af6a8540ce10e04badc6c695d009271","services":["streamer"],"enable_msg_events":true,"port":63347},"up":true}},{"node":{"config":{"id":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","private_key":"cf6da8ba09884f084c279f1f25340712041f3c36c9b6be1c0fec270bdf17a875","name":"node_831cde5b651ba327b059da4c7f84b184bdd6bb99c6690ae816affe25d42c6c3dbe5b59e2b6bf23e9d0f6c485bd341ea57ba1a8220d18b0a40e156b77d84f79ef","services":["streamer"],"enable_msg_events":true,"port":63348},"up":true}},{"node":{"config":{"id":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","private_key":"2acdb11a79e469d5e7e20a391253ad6909ecab541c9931d5f7422de792574b6b","name":"node_71f89efcf939294bb94ac669c8afd00def58c8dfad519c226adfa068692d588ef797116d42aa146b9d34f3be35ec7c014022640ab3c0f1f9034e44ab1a26e246","services":["streamer"],"enable_msg_events":true,"port":63349},"up":true}},{"node":{"config":{"id":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","private_key":"63cfea5298455b0cf7952a47db686e5c91ca2f2e16610167e5c15337e67feeab","name":"node_4ff66e9b5d3fd345990bd7605bdc222b78946f0c13b72bf80352812b2426d8f1d36c93e6c8713566004615e8a78ecab12ab0cfba254c0967eeecf8875b25bdae","services":["streamer"],"enable_msg_events":true,"port":63350},"up":true}},{"node":{"config":{"id":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","private_key":"28315ffa74cadce008f22997503621aee7c6df8dd478536421715a17ebb97a74","name":"node_9bd4f0adb9a966cc5ba632f1b540fe9cd6c8e39fe1a041b315697679cfb04b735952062ce057d456677cc34a84301f26bb727a4ab2646fee734f80a22c620746","services":["streamer"],"enable_msg_events":true,"port":63351},"up":true}},{"node":{"config":{"id":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","private_key":"1177b8e7b7ed31f6a54030f8b4341593d3a1d72aae40f9156861650da1746f2e","name":"node_58cfb20d3da3641e0ad529b9edbd4b590a8d1dc9d1ed7b44ed3187dba9260bd7c732fc10981f5b9bffd31d362cb05150173618aa36138984431d94a323a9b313","services":["streamer"],"enable_msg_events":true,"port":63352},"up":true}},{"node":{"config":{"id":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","private_key":"d007b46d1a1f6a2d085b54b2073f46bebdad50a651920b7083908d388be5e5ef","name":"node_094f9d0fd3bacb17ac67a2edb8ed394fbbd1c8d478233d3269cf217e7b788e21042374936b885bf23ee4f9e03babbe4e08db283dfc2a6e052a8a5ba133717dd5","services":["streamer"],"enable_msg_events":true,"port":63353},"up":true}},{"node":{"config":{"id":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","private_key":"260581578bd37f4523054c95aee9f6b4beea4ed6b39edfb8b9506264d93337d7","name":"node_7646d08b3e24183e3814de130235c41eb88a5a2abff23eaff3c91954ad3ef55fe27da422dac5b894312276bf1a2f1aebb8b636a8d4a0c93d9b016d441df3fa19","services":["streamer"],"enable_msg_events":true,"port":63354},"up":true}},{"node":{"config":{"id":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","private_key":"49be559b16c8e23e2031acd1d93ffd182c0f09e54f7893335d04febec1b48e99","name":"node_9b618ad34d0dfe0fccbd5b8af365cbcdbb43e802df5f23e91c20d21f3ead6169d52bf0db7e5e111abef630c9853419fb33a88cf111d8507b8708208b5d65e35e","services":["streamer"],"enable_msg_events":true,"port":63355},"up":true}},{"node":{"config":{"id":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","private_key":"7b742610b213ed9b0492c97d62574eafc92dd73cb24ba74c4f1023fb4d8843ae","name":"node_4a030ebcb1a59230759d25a3c87daed22906b520d55a78eab2083bb52358ddc3a5d2d7c3265e6c54a990bf32d0dacb85905a4173d72ac18fcd74c43ecb8635c5","services":["streamer"],"enable_msg_events":true,"port":63356},"up":true}},{"node":{"config":{"id":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","private_key":"c90aa4ff988d9d5aa9ed033d3c8076c073ebcdcb0131604299ca721f38d363ad","name":"node_e0f78c59a61f2a953553cd5742c58f4a82e38e35ac7eaa237a6ffc9fb0a3a26a2d1d1afae249e611d1320f2cb25804bdbdfb6d77336449716b0f4beb3298b8aa","services":["streamer"],"enable_msg_events":true,"port":63357},"up":true}},{"node":{"config":{"id":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","private_key":"77bd908de80bb222465d000554b9467681aef696c9e1a81e51dba688310dc7af","name":"node_84dfd4e4d9f1204893f190eacc4c3999e175c433f70de86e335d27477c097a0552f211a21764f01a708da4c9e9e6552191a61d3e48f41d0e84f01e7ae3beb34e","services":["streamer"],"enable_msg_events":true,"port":63358},"up":true}},{"node":{"config":{"id":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","private_key":"529ac85f80c2ef25f0cca3417a1745d3573eef2b8cd611eab45c6bf857c87158","name":"node_ba21a373781966135d6225adae024a3f3e421b852f72f8b0569cb92fcff87c33f7e5b799a509b8eff6ec6dc46a9b17d5bae1e91ec7c54c0c712d893d54b140fa","services":["streamer"],"enable_msg_events":true,"port":63359},"up":true}},{"node":{"config":{"id":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","private_key":"46d69d2cb90a6ff16facb7994569557da8b0c76f74d238381a2a53cadbd1d8de","name":"node_fd4968df03d767a223bf7e4dbe26b5c27048298df40e81cad50b344fb3e6837965f2646dab7ffb2891a5c507343ed84bb8bbe403287b51dae538d58fcb6e7623","services":["streamer"],"enable_msg_events":true,"port":63360},"up":true}},{"node":{"config":{"id":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","private_key":"668577a2160c0a19ddd60a032636f42ef4b0f8d7f8b15129b39bc693b04951b3","name":"node_07c63ca5d0309e30d1ab12e7fc142e6d37904b552639cfa97850161491f28f20d87e0304be29357bcfc2ff52fc52fd0d4f6e6011ebb239cced8b5c8dad7abf45","services":["streamer"],"enable_msg_events":true,"port":63361},"up":true}},{"node":{"config":{"id":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","private_key":"ccd33f1981701e030d7880879453393ccb90b02d71fc85a89d82f903d1a81066","name":"node_920a301186bdf665a721676ece7c180413369ea6eff7537f42049d9eb409f28cc864099590116e885f57368959fb2cff7003697d9b1515e68bf3fa7aee0278ef","services":["streamer"],"enable_msg_events":true,"port":63362},"up":true}},{"node":{"config":{"id":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","private_key":"1859e8cc62440d9e1d1c35f842b8bab336798e87932bc4f2456c327fdc777a7d","name":"node_89a5b92a9ca045f12c35a70084e6f41f9775a25d6f105f8c9349c7b5e107179d8a96bdbb113b2680edf5183e9a42fd64bd7b29d0dc7797c583b833f869313699","services":["streamer"],"enable_msg_events":true,"port":63363},"up":true}},{"node":{"config":{"id":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","private_key":"45dad25ea664452913d4fb09debe8987c94b88ef752b058a7bf352f144a9c6ea","name":"node_beec648d79437a5d7b4140ced45d82d035c6f64f9c67c58386703811d97c3846787eaf274d2298df809475f0b7519df696563cb8e9a5fb0a9cc419ab13fa8d41","services":["streamer"],"enable_msg_events":true,"port":63364},"up":true}},{"node":{"config":{"id":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","private_key":"042b5ccd68b8dd6c125ecd889c304299fa18c22841c95b5fae01a22fa98ce96d","name":"node_c73d088ade8756c74832c73542bcdb3e52f670f7a74ad3a7eac2a9e3ece6bd081f782a8e1d3f9a40b9aa9201509110f37fc57fcb10ee1ef3ef07b7eab019782e","services":["streamer"],"enable_msg_events":true,"port":63365},"up":true}},{"node":{"config":{"id":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","private_key":"1a8c7f2f97bcaa5711578ec1de04829d7735f81ba5761087e79a977405ec1801","name":"node_62dab8b21640e1b44dea452dd7e7de93f27a44840da72d56b11aa96e8463f3a4bb15e75a954d19fc897ae0030b16181d271b79d8198b7cffcddaa9ffcfdcce73","services":["streamer"],"enable_msg_events":true,"port":63366},"up":true}},{"node":{"config":{"id":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","private_key":"d7a4980a0fc96842e8e570863a3b8e078baefe4ca8ab2ddf85c7c5d8f541fabb","name":"node_9e621c3eb534855ca292efa27a3fbc89b4f05c80a4bc65bcff2f14ff28ef43cbe14137d2fddc6fe2658bb06947d918476b479dde71469b8680e5d8a7a01619b5","services":["streamer"],"enable_msg_events":true,"port":63367},"up":true}},{"node":{"config":{"id":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","private_key":"d2e98b0004a9b7bdb030d5e729716e7065aa1a8c48efacf471718bc5da8ec990","name":"node_afe5b217dc512eee45575c189826ee5640d11a0ac9e8e4b03e9e62e6cf6df9de500bc8a36cb7d82a2280ce184409164f1772cc5c9e59ad04361522d2b8c364e0","services":["streamer"],"enable_msg_events":true,"port":63368},"up":true}},{"node":{"config":{"id":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","private_key":"bd3302dac250b294208d6ed14b0a14a6d60d75be1f68ce5cd1e250a47032fb3d","name":"node_db8ba71afeaea1f2964e8978a6eceeb9efa3958424424022213c8193443f8d5afd18490afa954c76360c681404809c7cfaf7e4ebd8bd1a42d403f7f1915b0d29","services":["streamer"],"enable_msg_events":true,"port":63369},"up":true}},{"node":{"config":{"id":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","private_key":"f5832a55177daebfda3bcaf8b5ebc11eb44f4d5207b8384fd35999944d2fcab0","name":"node_2f1967b4410ea2ea8fbaf46771ba82c2846d00aecdb6f873aceae33ab38f72d0a2c2dc6046d3034f514efd090d42011d48e9ab0cb4e3caa2b49a96ef732215a1","services":["streamer"],"enable_msg_events":true,"port":63370},"up":true}},{"node":{"config":{"id":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","private_key":"8285330088dc95f441c68f12765ee99f065fc41f665b54a257172d9b4ff6e017","name":"node_a99852c5bf08ea4713af9cade5343d1259bfb90401aca7fcff18c58cd56a98804dd16c61fea71039c0ac31b9bbbb9dc5aeaf0c2f074d3365e88d17031802d636","services":["streamer"],"enable_msg_events":true,"port":63371},"up":true}},{"node":{"config":{"id":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","private_key":"96a76a56912e05cbd480fde154743a65f4bdaba5395cf685c22681fa403807b3","name":"node_4e68553db7be307b8379e8bec383b5c92e4b23debcefca575d24504e2062618f74c26e60e0d9e47f096997a7f841e2c32c994124f495ef3352ef964b33fd3a51","services":["streamer"],"enable_msg_events":true,"port":63372},"up":true}},{"node":{"config":{"id":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","private_key":"bf0a6c406d390baa5a33fc469dd8b3ec25e406364bafa8ad3d9b422dd58b4a87","name":"node_a608a746f46d4b2e9267c65283380d6d6cb8885a64428fb77df9934bcf4dd1723587ee7c8f4a642dce266a12a6a4cf4e5c6db7fa1024158425a6753e7ab7264c","services":["streamer"],"enable_msg_events":true,"port":63373},"up":true}},{"node":{"config":{"id":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","private_key":"4010f083fe123b4e1e1091a054b7af104d76038c1313c71470b38aa16a05688b","name":"node_fde7705f5013c3b6b76a35505c1e3d57c033a337f2a71e912ec3a3d2da8e113bd7c36d94908357e9f7654660621f647ad8c66b0126dfe91dbfa3b8c7bd2183d3","services":["streamer"],"enable_msg_events":true,"port":63374},"up":true}},{"node":{"config":{"id":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","private_key":"e2894e5fef7fae6c4a6969fdf39bb99e8fb16849881a5a7d45cfde92ab16232f","name":"node_3dfd733dde9414af916625ab981777ff1ad7ca0f6d1e4e7d9e2739969e21182fd13d85e281868653e7325b20069356b11524b54143c47fd3955a911cf7325ad4","services":["streamer"],"enable_msg_events":true,"port":63375},"up":true}},{"node":{"config":{"id":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","private_key":"1273dc5cdf253e8042d52ca10f80d25481d40b5cc80b37b3e128edafde8fabec","name":"node_5142eea687de4248b2184e9896b245563117648e7a156255d9a7ae730313d5d383db3be1125b5accd7e743c2a5d8c3289ec559ef7cbb803b9e82cd49bb213d9f","services":["streamer"],"enable_msg_events":true,"port":63376},"up":true}},{"node":{"config":{"id":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","private_key":"082369e49a61588917d594d0a90c2d53968db7910a1fa9a978da33f53d8f5166","name":"node_b597c9ba4da20c49fc4ba019571321d2579588636cdaceb9f225706574970adbf4771dcf186b1decd4e14cd5d257e30a36ca829829598c1775902201ad9793e2","services":["streamer"],"enable_msg_events":true,"port":63377},"up":true}},{"node":{"config":{"id":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","private_key":"5ac4501287d61d0083f3143a6184fca450c07d149279fdb3a19ae3dbcf456732","name":"node_72e30d4562673c5c8fb03709d93f73322747858d723b7eb5ef2fbb88e0331252946b7e93ffe434fcb599c4fff57800afb29e6c60a719f18f49dba541c3591c6e","services":["streamer"],"enable_msg_events":true,"port":63378},"up":true}},{"node":{"config":{"id":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","private_key":"cbc289ddf69a20e78f479b1587fe2955c2ee7a0bc7a743ce61c13c07139b33c1","name":"node_eaca77d20c4ad6b87649eba21b750a4b1a2c575e06bc42679d18fce16fea15212e9a7408c16f3b24d8dfd1e397314637e72e292845d09534a39035bd9203ee9e","services":["streamer"],"enable_msg_events":true,"port":63379},"up":true}},{"node":{"config":{"id":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","private_key":"dce8d0367de94896d0c24049979fda6a48f77b8e98974d66472666a5a4365865","name":"node_d3105ede6c21bc643d523afcd1309a5dcf03f70797a92f167c3a19f86ae98882fe1a9d4094d7a3dee4a0833b8075b6c3e9aaa7f4879dc47bb388c3ae85522288","services":["streamer"],"enable_msg_events":true,"port":63380},"up":true}},{"node":{"config":{"id":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","private_key":"138e8952e22f78dbf4ea1aad84cc393a1553192402f5cb23a8d15459d9254240","name":"node_6f60ef501b41f9049419b033ae8d793a18067bdcd60347537b0dc3873bdd9a2d10d24909cca7c39781765746128c2165596f6537a94f58279523faee71f9c51d","services":["streamer"],"enable_msg_events":true,"port":63381},"up":true}},{"node":{"config":{"id":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","private_key":"b50b26bf10abf56d51a891c4449915de09ce392d6c5a8170ae5ea5eb3a082d8f","name":"node_453779010ed7c59761da47ccd8869d3fa8349795e57edb9eea416c0712301ea622c7683858e309d19ab137ddb0edef161d0d00a361abeecf0628c3ffabc629ea","services":["streamer"],"enable_msg_events":true,"port":63382},"up":true}},{"node":{"config":{"id":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","private_key":"269797dfe5cc0dab8d44b114878dd8ec081d6551214db901b361817184a58bcc","name":"node_e2a27dcdee1f89fa362a85c4397840cd8be4ad8d1b9ccb23188c303bcab7619f38772f71385922d090390973b62fb8249efc103f71bc761041bcb3880ec0b935","services":["streamer"],"enable_msg_events":true,"port":63383},"up":true}},{"node":{"config":{"id":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","private_key":"09082c0128f28346808a35b0b607d4e7d6c9ab7e894b5166958bb2eba5f4c0b3","name":"node_97981f4b825620985b746c85824d7a4d307ee25d60a72c2b7de4b1d4f3b1c002652adc3045842d350f849789e410a0357a0b42fa637a1b4fc9d39e44f8a674d7","services":["streamer"],"enable_msg_events":true,"port":63384},"up":true}},{"node":{"config":{"id":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","private_key":"ca130a8083cac47d964d46dbbded845892b326aa4fa12489d21578f9f018d45b","name":"node_fe62314839c93d2f6e3aee984d5f0b321897c6f39e66800d3de8b773baf6f19e0a03cae025df512aea8d5f1b667b6dbb15c192a90a76d3031c14e33e5c16c4f7","services":["streamer"],"enable_msg_events":true,"port":63385},"up":true}},{"node":{"config":{"id":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","private_key":"5d649fb189f6b462f678a083e7ad8d874c6bdeaafe0817cf4b361448024d9428","name":"node_c903c5ee3d9cd65bea3ea777e39282c33e1349d945411fb2f16321bf582c2f400956a98fbafe5873fc5f6f6a9a051df5da7e94cbd340f935abe80f91e79ef875","services":["streamer"],"enable_msg_events":true,"port":63386},"up":true}},{"node":{"config":{"id":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","private_key":"74fcb757f856401d62426a3e62cff6870099b0b261afb281d8d9e7dcf355a87b","name":"node_5420da16f7ed5de6b498dbc9a83b7e92e1f9900a6d04ef7351a0bfdfd442b98a5634f28fcea32ba3f3166d21c8ff5a39be70895b32acbdf7592d1d616a345a21","services":["streamer"],"enable_msg_events":true,"port":63387},"up":true}},{"node":{"config":{"id":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","private_key":"3e1263efdc899dcd32f1fd206de2370195ae82fccb81eb354dd9cb52fc5994e6","name":"node_f54335964d9b4eb9813eb05f40ef1c523bbf0faac5a04c4737467d590fb6b55c7fa1fc5d4d32c5491d8766b9be6fdfd3ebdb25c5ffe1719f36c86ddf87ae3a85","services":["streamer"],"enable_msg_events":true,"port":63388},"up":true}},{"node":{"config":{"id":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","private_key":"a7cb8f80391de65478acf12a59fd0a0e9c5f04f0e4bc1da34b9acd35c586fe98","name":"node_40bdac599b00e9c41ad6476ee415c33d9c17c5aa672692c2404e523b29dc315da929a86874bed87fd9009871805d1dbf3098e7a817193e3b08a6eee66346da79","services":["streamer"],"enable_msg_events":true,"port":63389},"up":true}},{"node":{"config":{"id":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","private_key":"dbbe33233150cc109e4ec1b6d6bf5f14bb573d87551440db2407ec75821b4ee6","name":"node_b26f7c0113a5ae885f7c0e608aea7022a9c8bfc40c5643e60b2ba7343ff09c5be0bc08be34dde3c6b85fea192a46d4764770c12cbaa233df4231a1b99627ef9d","services":["streamer"],"enable_msg_events":true,"port":63390},"up":true}},{"node":{"config":{"id":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","private_key":"1058ecb8bc4354469a7fbef819dd8efc60c72db3101ff2f4d3d8089876ae94d1","name":"node_829b074b70d757da6aa00f7bace3cf1b5d2d4eeadb7f370c1a85374a01a70b54ac53d747267e386f3b41e6d790fecdd6e74b8f89745501ee82439a66ea54443a","services":["streamer"],"enable_msg_events":true,"port":63391},"up":true}},{"node":{"config":{"id":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","private_key":"7a22f9270103c5214bec5fccac665913b7e9ba442667ca7ca7f1bead2d44e594","name":"node_302c37f28c69fdcf00b39ce0c0223de0d94cebc2c0b068315b95b76b5432573ead0656569441029ba9054d8d3d959fd8735e73913af5ce3f1132f8271fd437ef","services":["streamer"],"enable_msg_events":true,"port":63392},"up":true}},{"node":{"config":{"id":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","private_key":"32e05e400e6938d31aa93e7666905a5a12e2b4b706354eae5f34259cf6880e60","name":"node_4e95fb8943ef6502fa470870a7ace4ca11e18589bd2073167543a922317b35e40b5068934d07e56c8fdd23354dfad51fd2899db854f189841f02b5914cd97749","services":["streamer"],"enable_msg_events":true,"port":63393},"up":true}},{"node":{"config":{"id":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","private_key":"f6b0641261c3c0741d61572a591e72180deb8ba2c9922ea5db694c5b372aef6f","name":"node_807340e5fdf6c21a56ef2fd158c32e92201206ca85fcc147165a408f7a735964afd47c397e663610ac53870ae722c0317291732b0422f8aeedae783d9c730218","services":["streamer"],"enable_msg_events":true,"port":63394},"up":true}},{"node":{"config":{"id":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","private_key":"5809952239bc91701c49a3ca4362fe2f96294405e789a467c4899d1dc94f88ff","name":"node_c9cd9dfb9f90a7948ac5a42c7bd63263f2eef6e1d85547559f7d2ecbf5f9cd1eab051b8e9e661b573c275d84091a44e73f6fc6bcc91dcdb674bd5d939190fc01","services":["streamer"],"enable_msg_events":true,"port":63395},"up":true}},{"node":{"config":{"id":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","private_key":"284f36dbabbb181f068bce762670de591bac534570ddba3da4c91381188cc3a8","name":"node_1bc1d6155ba35d29ea16938994e08df76ebd8f16bd180bd6a9b9d8798d0745889fe72d641dd78bd8ec13526929f7eb5aaa6a388430fa69033d6db581e53c6422","services":["streamer"],"enable_msg_events":true,"port":63396},"up":true}},{"node":{"config":{"id":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","private_key":"c1b4e417ecbce61a39ecf4a30b86e303e82534bd890eea7c30b6ab4d0bdca861","name":"node_e267e71c2dcdbe5a500b23444d2d4037ea15afba8f4f2b1c0e54a274450404fbee6fa5439f7cddf4ba1aa28fa93e434b01c239add58e30a5423ca3a481584d6b","services":["streamer"],"enable_msg_events":true,"port":63397},"up":true}},{"node":{"config":{"id":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","private_key":"eda1f1637d46610c0a885d4e08d8d4e776868f98be4dca745ebfadda65f2a81b","name":"node_e98a08e8e3544727f5ee27f4465375a67ffba490fcdbfe7bfdc909f6b68bd279f776c65d38c2ccfc33079f852f76349c94d68fc6989c0d981f22333f036a4bb5","services":["streamer"],"enable_msg_events":true,"port":63398},"up":true}},{"node":{"config":{"id":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","private_key":"51d301cb37e7206eeee2847d753aa67cbf0513b6e7cd41022003c2e7b3ef5581","name":"node_cb310c0e86aa455d7c9af6394ae38561c901da30a51d7ccb7e66a09d9a8f192ae8caeff106043426d56397088f141c4e01e3b98f1ee583ffc7318b5f730f3ac7","services":["streamer"],"enable_msg_events":true,"port":63399},"up":true}},{"node":{"config":{"id":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","private_key":"30d23072d68ccfe357cba2b3294b9584b591e8c7898031f7c4dbaaadfdd05e1b","name":"node_1090e9d89cb278a30063a5396d9ba795d3bbc237c76915a6fb7d23aa1822c8535d2fccc44cc8cd2acec68444c0bf1bdf5195ebb9f3cad8dac3d94a4d9c0e5309","services":["streamer"],"enable_msg_events":true,"port":63400},"up":true}},{"node":{"config":{"id":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","private_key":"90d8283793c2eb15b76d7d9e492b3c3e7136115c74bf027ad9985179380a82b8","name":"node_4b784f072b7c96c30612767425f552e30e45157e70139dfbe0ae4ff86dc31601adec60f8a3ad9747b02b5219073d8813af9b09d59eaf7ddb7ee24856aff6fa8f","services":["streamer"],"enable_msg_events":true,"port":63401},"up":true}},{"node":{"config":{"id":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","private_key":"b9111f0cf5ecf0a5dd7683f07c58f581a175bfbdf307224db008d7792e30c6a3","name":"node_22010c9829626a6892258b09cb3f3edc3f21382fb487b5dbf0dd20e198e37e26134aab850e30337f398d1491b5126839aeb1953ec144bc19aeb889c832f67c6a","services":["streamer"],"enable_msg_events":true,"port":63402},"up":true}},{"node":{"config":{"id":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","private_key":"7652297b6b2c9a5339f9d375aac2c9b81f0274e3949b4033e513c02802f040bd","name":"node_043fe7085e8c90c18270f84dba5fab138e50216a1cf8d81a3794d156fad7fc81d1422aff169b244b13f91d73eebb5de464f97b1b93b3ad2a58959cff19238842","services":["streamer"],"enable_msg_events":true,"port":63403},"up":true}},{"node":{"config":{"id":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","private_key":"7971b1a36d0caacd64acbd61a149d41c05102d757fc313f2c49c6b2185bc22d9","name":"node_329145e75496cecb5f5c8f00313a52ddd8c0e8cd27ef1b2bc1b2b56e4d4089aaf5a7a3c4d9a40bdb92483fa05bd24d1cd0fd51883e30439dffa0fc855e1a7cd0","services":["streamer"],"enable_msg_events":true,"port":63404},"up":true}},{"node":{"config":{"id":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","private_key":"62692081cdf8e04e73d8942c5fb423f153ea6d32d16fc0e3b05c10927bcc42c3","name":"node_2a63d875e715c2a43302d32d86d30c7d7faed46c08a67bf488762637216b99dd87333a66df6d9f3a57df863b1f1a219ddbeebb9f3e92e523bd08540a195448ca","services":["streamer"],"enable_msg_events":true,"port":63405},"up":true}},{"node":{"config":{"id":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","private_key":"bff5d02d0e187260b2ac19e027a5a8c72d358aa420a1dd22dcc8d34a921a81f7","name":"node_0deda014fa3c0bc8f37d853e1448f95f56f97048c28797d72258fd3ba2f1f776ae11566197466596356cd172847ab02a89f4cf047e58383249fb2a4cd69b6206","services":["streamer"],"enable_msg_events":true,"port":63406},"up":true}},{"node":{"config":{"id":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","private_key":"e2478cb11c2e4c83e5be5962e0a2e9dd367bc4bed98c7bcd08c211f35010b4f8","name":"node_c332fe1f9b6e25f72c7150631ffa6e0929ff6eeab5d17aa45eaf669bdde869cf404505ae990a529aa3ca797cd0a96f31cc41431a5d4a163132be566f91623c08","services":["streamer"],"enable_msg_events":true,"port":63407},"up":true}},{"node":{"config":{"id":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","private_key":"c4dc5aeb69312070307af3c8a24d468a0284733f29b07b5407e0819cb054fbdf","name":"node_5566111b7f14d8ec83ba6456488f3fc5c7e2c86bf406dead33b814e1ee9b569d34015a4d88226b7e28fff7784395c086d106287cbbc80acfe75b05cd6e12903d","services":["streamer"],"enable_msg_events":true,"port":63408},"up":true}},{"node":{"config":{"id":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","private_key":"6832f6f7e27fc6e2c9745c44ea7004ffd4f6bd869b779e15ac0a4a2ffade7999","name":"node_b4a5efa9028b2d196855393892f79993c2812d02b758f98813ddf82c5d943faf6d66eff811cc5a51936c118f4c768c0d13b54902095e040c602761e63c08655e","services":["streamer"],"enable_msg_events":true,"port":63409},"up":true}},{"node":{"config":{"id":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","private_key":"3362a08daff495b41e00fcb4786a68fff7a58eda86b6f6cb61bef90aaa604daa","name":"node_adfba6d883cacbb141cd8c59ee04d7e5d520f1ce31a81e5db2d8b2380bf801c1fe4b265a66b71f9643d13a41cb1f6fb4b83399be786da4b6e171b6784bc56e49","services":["streamer"],"enable_msg_events":true,"port":63410},"up":true}},{"node":{"config":{"id":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","private_key":"1d18aaec8f9b90606b18283e8527016a8122999804aa11d280ab2bb37f14a948","name":"node_2bfba66ec9d63e928d77d455f2e10a14d6213e515099d5db14fa44a8bfc147eb0fa7afa9aaccdc86453c6903b55556059a2e13dd61fc494127d4a3ec173bf9ea","services":["streamer"],"enable_msg_events":true,"port":63411},"up":true}},{"node":{"config":{"id":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","private_key":"757285cfa33b746d1bf24044430d43f5ff7401cef2452217ac9fe5fbce629acb","name":"node_0b7e1e5acabcde503ad827e45724402406114a513f81040a379b0f82df2eab4456b348b27936369c49e3c264d971c6a9e2c2217fdbc5e5b93ac6fc219957834d","services":["streamer"],"enable_msg_events":true,"port":63412},"up":true}},{"node":{"config":{"id":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","private_key":"cc0bf84e41ddcab9146ec892653a911dce5007786d77ec7a32e490fea0a29687","name":"node_7554993f6efd8d9016ff525ae73c41ee2e0dbd4970c563ba9b61a99c1c8943b433c4b7d48450f6e0fbc9ac198d907698093de20e6c1f7755520fb1e1cbee4eb4","services":["streamer"],"enable_msg_events":true,"port":63413},"up":true}},{"node":{"config":{"id":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","private_key":"d1add26924dcfc37eefccd6271759a9b0a2052607f3698be305e1c9bcb47ea66","name":"node_4fe37f2dfb03707c90a6fe91dbcfd7497db70ffc20043091d50e1cee573210c144e8749340f2c3cb70fe8fc51b317d49e8734dc51ce64b3cdccdd639ae35d1ae","services":["streamer"],"enable_msg_events":true,"port":63414},"up":true}},{"node":{"config":{"id":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","private_key":"fb8563b48e2c07948cc2347d50c953b2b4bcd79a535c2ac597d8f8c7f1ffa8e6","name":"node_a7507aa5665e165ab2e2a07def272f0677f9d6d35bb82268a34214384e7d8ef7635a299368752e63cfd02d4e60231076baf23cfa10d17492e55181b391ecf335","services":["streamer"],"enable_msg_events":true,"port":63415},"up":true}},{"node":{"config":{"id":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","private_key":"f7b5d2c9faba98230f0e0bbd82106d1fb949413a7940eec52e71e9c5c7266d3e","name":"node_7e2b0b4f3b55e97bd7241b984ad117af33bf3baacd22b3ed503a8a59f75828df745fb3ce3be4276d83eb484e64d9aa251103fa994ef119eaddb97a3503b9f292","services":["streamer"],"enable_msg_events":true,"port":63416},"up":true}},{"node":{"config":{"id":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","private_key":"61a9bec441ae9ada2f3ed71874596db20f2807e921453ec39145770056e3cee5","name":"node_460531928a4b084686343c8464b37c3452bb3566045698d08a4692864de5581a9eb1dc632329e7d3ccb73ec31ee7693787d69df8458efaba9a7105d87ee2e053","services":["streamer"],"enable_msg_events":true,"port":63417},"up":true}},{"node":{"config":{"id":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","private_key":"56e11a31d85d33461e13dd635ea6c0d0be892feb3ccc9dadc327bbd855401d2c","name":"node_70ee3c7e02a123f78345d41c386e413f06b51f1ab346c2c472891eed7dd26a1f14e213a0f4f2d872859b9b535936a6d9b072d2604456f76221a422710411822f","services":["streamer"],"enable_msg_events":true,"port":63418},"up":true}},{"node":{"config":{"id":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","private_key":"6df50913c97d23ce9e4ed894465ae4eb0f562d595e46d694b47e72d31c8bc8fd","name":"node_049a2b0ab4d49789dbbe1837e2d2ee5220a9401729ea87ab29385b24d79cdce255c3d2b5de6484d49ca6ce07bd41832598260c0a8c290e01d133d77f066f2f99","services":["streamer"],"enable_msg_events":true,"port":63419},"up":true}},{"node":{"config":{"id":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","private_key":"164a5b537bdf9173b59b281a68d7da48819c2367e5b5faa1c94c74453a413015","name":"node_1f6d803a4ca186463772850ca0901fb920af7e74fdd2480c3c368fa707838ee91bbcfb57d5e3510c802b9b85f2d954f04c9b675414274bdaebae6488dcf94c10","services":["streamer"],"enable_msg_events":true,"port":63420},"up":true}},{"node":{"config":{"id":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","private_key":"0b14673d7790bcbb1b3f0d042dd9b22953002e6dd901486b6f203063bb8b5a79","name":"node_979838eaefcff456cf1cd9c47ea46854704f5757d8d7ab907019bc422b01af4d62252579bf045d143fab491b0bab823190e2782a457fbf51aa99ae17ec9e145f","services":["streamer"],"enable_msg_events":true,"port":63421},"up":true}},{"node":{"config":{"id":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","private_key":"5d6c015866ee2afba25f1435274fb61e0b11b93829309bccad6cb662e5a4c8fb","name":"node_ed6c793eb4565aa9d883a76fad6c97ad0b878b9ef0235e11e89db1af25a9653205f725c6ea258b84bde134f1a6437c6d109b859d17509e5016c4ab98be59032a","services":["streamer"],"enable_msg_events":true,"port":63422},"up":true}},{"node":{"config":{"id":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","private_key":"acbf964dfcd41c86715a5ecb9c03818b577cbb0755692cde879ff1e4b09e5df6","name":"node_6c143960dbe3ba4c95e8debc1fda5f420a2a673eb46f7ff7d9a30f4cd2067e67ef8926bf17f0c99b16c79b6dc066b52409a11d47117d4fda4211636b1b74f96c","services":["streamer"],"enable_msg_events":true,"port":63423},"up":true}},{"node":{"config":{"id":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","private_key":"0b325cafe8524b8c126e860a6295fdeff6cf26da5e8eb426b86b25ba049c942b","name":"node_7bbb3f3ed51cf84c077806fbd6d3578e105bc32aa6043da188793f066ad6df383a9f7cc0bd3124f4c887704bd188d480ce264fcdf178905bbda3b270927ea138","services":["streamer"],"enable_msg_events":true,"port":63424},"up":true}},{"node":{"config":{"id":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","private_key":"e03e1d397bdd121257b1cd781c14847cf220f23fa837a4ba7b48f7b0b51cdc3c","name":"node_2b70e5ffcc0bb1c4f8acc09dd1016e67c9c96c92d091ad481efbb71bd8b2a5a5869c6d668617a9b2cbfe91baf5edfe150c3824c84d90899a974099071d171441","services":["streamer"],"enable_msg_events":true,"port":63425},"up":true}},{"node":{"config":{"id":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","private_key":"8e1b0bcbebda90c6f0ba8edadd9133b28b77e49b584580e1219654aeeb9e3a2c","name":"node_f5c1215a84a56d52f92ca0dc3a32df98c98a9c2ea2e9a34560210c16de1b440d20d043c8c25955dda8c22e55e92ddb49fd82e8b9b84072aabaa755a229bb19f4","services":["streamer"],"enable_msg_events":true,"port":63426},"up":true}},{"node":{"config":{"id":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","private_key":"ec0e383740a40976e4b9195b6a89e9497e9562729d196b3febbfea319be5dbcb","name":"node_8c6d77833bf1a98beabe7a92d985d13d52fb2e50768719ffbc6fce21ea676802a074b6e620b3ef80e12fad04f94a3c288d91df9716a6cfae09ef073b9dc1f2cb","services":["streamer"],"enable_msg_events":true,"port":63427},"up":true}},{"node":{"config":{"id":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","private_key":"a8c69a5c41f2362bc5de8589f3686f3c59b02b58cb7139ba2325f1a7ff62c39e","name":"node_b3316f4fd7dec218a52331f25d17a2faf0f2a417808d7dbb80038154abfbcd2d78da074837b648cff28675f4aa0d65ddb7d15abf3d7e0391d401e313a3ef24a2","services":["streamer"],"enable_msg_events":true,"port":63428},"up":true}},{"node":{"config":{"id":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","private_key":"65ded6c2ad477ee077e81c1aa90fba5d4e0d794ea8dd5241a1545869c895185e","name":"node_60725e8d0e9333636e598dd666f459b4be898d9abc095ee2c1db289673e7e969b50e2093956fef5a2f1d23e2040159bbabaaeab17fc6dbbac3f6acab766e9e60","services":["streamer"],"enable_msg_events":true,"port":63429},"up":true}},{"node":{"config":{"id":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","private_key":"9e522b8e7f94aa50d51d7ac396a12701677f86d0f9ad7111b329ba8229880db1","name":"node_48a5e01e06e297dc1c640ac9601171495bd70fea461c60e7e6e2532695e45fcf68183c2e58b5e6931a6c1c094f5331efbd7f2d93d5f84efdec5a35afa2124438","services":["streamer"],"enable_msg_events":true,"port":63430},"up":true}},{"node":{"config":{"id":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","private_key":"2325b0e86e0abaef149e6063ff789995d1f6d863de595a5abcebffdad494ebb9","name":"node_5dc69635f6d573c824ea83b18593a47f9f21a6f91ce18d2bf977c97d21f8d2a8ce88829244d12a07d949bbd52fe8a2035bc89685fe1bdd4ee20d766d75d3deee","services":["streamer"],"enable_msg_events":true,"port":63431},"up":true}},{"node":{"config":{"id":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","private_key":"dbdf629720f7cd6d4a8e26a5bb6da882212d6cbf43ddcda4712539c3db89bbf5","name":"node_ae4e21e1587a8475afd299e00ca7085c7bf2a44c2c64a3068f12223d9202b0125094385319034691ec26b497ec9cf18fe8c0839224bac1b84279410241cef979","services":["streamer"],"enable_msg_events":true,"port":63432},"up":true}},{"node":{"config":{"id":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","private_key":"315e74a348a3f8e172319c29da33577435f6415466e8cc289af2dc7e142987d7","name":"node_0b30b36e155db04c448b662c4df695068b2331cdbe2772aae5fda84159e977515a5ff2e156bc225a9281fef2383926ba8cb11e9c1846fb40db241e524ac14e29","services":["streamer"],"enable_msg_events":true,"port":63433},"up":true}},{"node":{"config":{"id":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","private_key":"510061145b0b868f1fb7e83b850d0901227724f4559e912c0561ac310308ea80","name":"node_17a79cb279306b6bbd35219278f6bba03111079d6c4fadcd3c5e57b09678e111bda5f8e36ca3d223e51e255d6e857363b7741e438b32ec6e6c0dc1b224071081","services":["streamer"],"enable_msg_events":true,"port":63434},"up":true}},{"node":{"config":{"id":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","private_key":"b4c3b4d3b3fb735ed7f1b4dbfa53fb08ca505f7570d376ca8ff9ba10c108fea8","name":"node_617595a230e0a74a3db3b47cd27b941e02bdee9a84cdfa8eaa63a55941eb5caa79e20fb69726a4d46a0e5aeed24039f8c5a20679a692df0bc140f42558ca9a2b","services":["streamer"],"enable_msg_events":true,"port":63435},"up":true}},{"node":{"config":{"id":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","private_key":"0ceaf25d118fd30dfa73bfe157c4bfdbdd7bcdc44e699e71e2e397eff0988045","name":"node_7808fb798d22e78fb1d39b87ddf99a503f820993bc64149eca9e81d9d58fc1adea60d8de14a4f06cb89f3190c0ef0c5e182621a14c9361ccb7e0cee667599cc3","services":["streamer"],"enable_msg_events":true,"port":63436},"up":true}},{"node":{"config":{"id":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","private_key":"b8dcd04f9dd7c7d9522112f1d10c32738ce2283cb755c14b83b3e7d8d645c4f1","name":"node_f039df8a3206e6e17eee8e95010038c450cb4cc0b5580ed5795d4c21802e1e9d360f4528bdca794f457932b1d6a818862ec847357a861c488332ef6d9480daa6","services":["streamer"],"enable_msg_events":true,"port":63437},"up":true}},{"node":{"config":{"id":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","private_key":"e0f1d278d1346984b7b19789e39ae0ee607d17f0fc7538e8dc8537b44c09e142","name":"node_ce0a09bb6fe4c9c93c3dbd800ca9c9ac0714f26a8f8dac2149b6ce7a9011912a5621ea2e45de35c4d31dfe5add00558fdba5dd21acf2d81ba391e82b5b3a5804","services":["streamer"],"enable_msg_events":true,"port":63438},"up":true}},{"node":{"config":{"id":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","private_key":"6c9376463118cd8a2c68423af478150a6e0a1b811b922aa7d35974ec65943ad1","name":"node_b2538d4edfa736bfe2cc21326a44ce62f716b3480eac93584a2233b69c98883a2bb255f246218a58cecab1d0d176e6d1fbba9782fd70d4603e01742299b9ea9c","services":["streamer"],"enable_msg_events":true,"port":63439},"up":true}},{"node":{"config":{"id":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","private_key":"d391fbaa56954f68499674edef05d07d58c5512ae18166b141c961a4dea175fa","name":"node_aa9a94d6e4eaaed20113c21752c224e3a052abd3769bd6e832759dbaf5154a943cf094eacdcb0727c2fe51a11bd7fc0793d7d5e3312b0aba89d428a00e1fde0c","services":["streamer"],"enable_msg_events":true,"port":63440},"up":true}},{"node":{"config":{"id":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","private_key":"199542f222419c9f399da0655278169815321c4420c8e39a377faf1446b6da1f","name":"node_65e954e60837bda10654480b227fa3bcc6e63356c52079002a27e836cd82ae2934ba77da60080e4b9f2d9324b982b24959bfd9624302e6c330408381054b43e9","services":["streamer"],"enable_msg_events":true,"port":63441},"up":true}},{"node":{"config":{"id":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","private_key":"ff50f9bc8f6ce42cff12b697c1d4880461773518aaf5f25e5c8a03a8af128fa5","name":"node_8ca3b63cb84f1e9883d82809a9b6777ec1029ecda96fe93b4d494ee9cbefcad13f381b3e480136e542e01054fe1ede66c65db84a0009871ce49383db461c8438","services":["streamer"],"enable_msg_events":true,"port":63442},"up":true}},{"node":{"config":{"id":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","private_key":"2c15cd49d4a7fc8bf1acbb4f86987efe85c77ba2712f82531bf893084ef4654a","name":"node_caaf695c76cf7c047d3f3bfe019d01618e4871cee8ff3f347913da815bbcde145771486f916a44d03f59ea9bc217f169fd0c0765fda3f9b9b28d02a522e180b4","services":["streamer"],"enable_msg_events":true,"port":63443},"up":true}},{"node":{"config":{"id":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","private_key":"4c9c04de05a7a437923df855213efcc8c9489ba08352e267097b6bca9e840fba","name":"node_b080891d4ba6d3ab224984360597f9c555bd1367630f5420bfaf230419a05b2be58bebf1554e53eb4c0da81cfb66d4f7697dd65143f11841ff62d8a0d82b6b67","services":["streamer"],"enable_msg_events":true,"port":63444},"up":true}},{"node":{"config":{"id":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","private_key":"5b756c056cbcd8e0a9a926f6ebf3360d7587152f836459cd22eafd76c3984af8","name":"node_2ca05ffc0ad771e1e045a47f1c0a79ce374a25e3c0e53c2a80d67e7479677003f62880251a83a5074f1c9651d828f1ff7e352935a9df141c1eb75a0c59b00a8b","services":["streamer"],"enable_msg_events":true,"port":63445},"up":true}},{"node":{"config":{"id":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","private_key":"fd26d9072de53e5f0a3d88d7c32e80650d289f661906c9837a7a0a003f3520ac","name":"node_8d4920d6e3a6717699b5a3af068cbdfc16858d7e393d158d41b1b5f345b47129eef89e1d055386c518f400b134678c21590f0317dea3436d4cef60f45455cf12","services":["streamer"],"enable_msg_events":true,"port":63446},"up":true}},{"node":{"config":{"id":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","private_key":"3e2d345fa05f2ec2c8c4ae80fa808f0acaa098d08a2a0e7be1a2749f7d01f0e7","name":"node_b6a998dea59194cc60ce97c7c9702368411889cb6905516b23f41cc5116fba8d0f237d418318eb0c333cad18003c0e9a6bd8c99080520771f2bad640e2e5ec1c","services":["streamer"],"enable_msg_events":true,"port":63447},"up":true}},{"node":{"config":{"id":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","private_key":"69afb2f43d398d53995f3880ed20e91b1d92307e4f7b40cc63a785ebe01f5e9c","name":"node_ff6f94005d1df7677600069764855c1c2aa0543cbe9f480f8feefec76c49d9e2c7bb2d8e38c89e9430f53f8b593d93f143c45985a56a5a32c736128214c95eda","services":["streamer"],"enable_msg_events":true,"port":63448},"up":true}},{"node":{"config":{"id":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","private_key":"30cd694a144038e53930a6b5e32f95f2c9caa886829d241c282f385107d7b824","name":"node_315b8a1711f680c2eaa607e35ef7a9e19c2b61721af8a7e08f1325dde1fe33cf1f47b3cc4acf12d541631041cf1b42754875fd1c9b66ee32797b72b9f7711256","services":["streamer"],"enable_msg_events":true,"port":63449},"up":true}},{"node":{"config":{"id":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","private_key":"c1480926443179b2e410d0303830b51d36dcce107b45da1494d87d2bcfb4f2dc","name":"node_396c703d27bfdddf91761f134cbf665fe61e0b3a5d24036a4105a625f72e8c28b821e9200f20d6e8f8b3ed6b95bda6b8accdd840c2f786720b7431e3af2af981","services":["streamer"],"enable_msg_events":true,"port":63450},"up":true}},{"node":{"config":{"id":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","private_key":"e91e000d37d0a336fb7eaab8ca7baa4db177108f2140ee86f7bef5959b617e13","name":"node_cd8815d66aee8bd488d4e5e25f0cc9c71cc65349f701ea26b1d6cd9c039d16fcb473dbf270a3b33187720ccf4b0ce4f78a6d6edd05f4fe804772d5b6ec45bbd3","services":["streamer"],"enable_msg_events":true,"port":63451},"up":true}},{"node":{"config":{"id":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","private_key":"991b1ea8ca82edeaa0c2d410b9cc297064d8d6668b9c8fb3277a6e7a934bbdcc","name":"node_7174eca109a1f717653918224c8cfe1b7fbd666405196760913593401eb79f2c7e41003b01f5a458940695b27a4673443c7621a169db7fd968994e552995dbbb","services":["streamer"],"enable_msg_events":true,"port":63452},"up":true}},{"node":{"config":{"id":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","private_key":"0c19513041b301f0745e678aa627a44b7cc58099c6616d5fed0f4e4774c5378e","name":"node_59b53f8a562bee519276e0eeccfcf8c975d3102f5d0cccf5abcce291a8a5bb817c04604f123686177a50a03b9d7559ac469962d0159d1d93e4ce58a304d04b55","services":["streamer"],"enable_msg_events":true,"port":63453},"up":true}},{"node":{"config":{"id":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","private_key":"c4406e8f5a2cc5a62bb4c36a3c52cd7831b3a82f06cc18e2286589a6e76a68eb","name":"node_f915e2398aa5d4370de87504dd76c21a7d0be2581c2ab55b7a47743f1bbaef36384eaacec22760f1e914ceac9d96a10c3d66eb27475ef444e77fee979e6e88cb","services":["streamer"],"enable_msg_events":true,"port":63454},"up":true}},{"node":{"config":{"id":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","private_key":"770f973cf2fda14f46f1e91ae608e0b87e0f06b2f8935bba64a43c6998737b9d","name":"node_1b6cad4f9851cc584c5d1405f976bb51a52e27ef4525847df543dcca65ca5eb1ef229dcc68ccbaaf00ab1e044cb5990dd213c805bdb4adcceb6fa70b5c61fdb4","services":["streamer"],"enable_msg_events":true,"port":63455},"up":true}},{"node":{"config":{"id":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","private_key":"2e741e89b7e631818e4edeaee9d795f912805724f2eaaa83e73a3a9e660da435","name":"node_ae2a996d3b562cb47a564934037949da83b1bfe194c23754f3dbe2372ec27654f4f3b6cb7f394570f308025589c065870477667e5560dbe5a8ea1625740699cf","services":["streamer"],"enable_msg_events":true,"port":63456},"up":true}},{"node":{"config":{"id":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","private_key":"c8d2153c48467773449a0c055a3527062b7ed043e491b6a81c6285b5bea823fe","name":"node_ddaf3f8478501cda872c056c72063eb64d5b871fc5fff70704872802289dd2d348f73bc342b7f148a90cfaae2448ebf16fea196be9df891dc71a57fb410d59dd","services":["streamer"],"enable_msg_events":true,"port":63457},"up":true}},{"node":{"config":{"id":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","private_key":"784f624bd696dc1d6afb5bb977c5e6e76ab280e55c95949a68349a62fcc32c70","name":"node_5eccdbcb15ef42dc96abcbcd8b8db75d9230de10e3c650620737f6cc04ba4fdbf59ded5daa801901c191be186c329ebcd37ba83bcf794064ad4e11bf10d3f775","services":["streamer"],"enable_msg_events":true,"port":63458},"up":true}},{"node":{"config":{"id":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","private_key":"f4e049b715346f2e7ac1e31341d0df32e7ba9ae1ab6d9165b7407873add289cd","name":"node_8dd8ad560af84bec579cadb33d51711aa61b6ed22705010336df5a71a94591173b25e869457429c4a199b205fce8e73530e28203e18b971c2001715e610f152a","services":["streamer"],"enable_msg_events":true,"port":63459},"up":true}},{"node":{"config":{"id":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","private_key":"98e1264b7003ea79b1e799c87cb3c8e1aab2ea2e68531cf41f093c4b9f6a98a2","name":"node_28d3232c43de54ffdaf08f97b334c012738648b04e2876c7e751a2e352aaf4d550d6efa976c5a8edbfa8e88b9d04a0fca492b81c3756ef673ab74d34182ca711","services":["streamer"],"enable_msg_events":true,"port":63460},"up":true}},{"node":{"config":{"id":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","private_key":"357e1ab3ea555b0928cf10ec54d8842dc9c0b24a90fbe32ad1a819c018b0c26a","name":"node_be514f5f17f3177235acb24112b578edf0e373c469073226e547d18080905fd062d572be18e943f13bf9fcf5871e89ceb630a1b848a0e370ef8ef8c6d997a363","services":["streamer"],"enable_msg_events":true,"port":63461},"up":true}},{"node":{"config":{"id":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","private_key":"ad08dbea349545a36c8160aa460902c7d2744218b8ff5b8af229a17675560755","name":"node_66d0c5da973d9dd65350ae1ec63776872cdb7ded6afb6f51ae82259f6fd35e884375d15de290625f02ed2e5cdc3f591decb45e5fc64d5b0f835a216fd196f5a3","services":["streamer"],"enable_msg_events":true,"port":63462},"up":true}},{"node":{"config":{"id":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","private_key":"8e27f11572dc1832939cc80ada2ce9604fb91d0633410f87cd7bf68e4629b32d","name":"node_2f360209383d6de4ebd3b4abaf77796520b8654270b03f2151eac4a01b4417d7e0668c1f9ad30c20ff49aa8a0ab33dba5e6095619d1cf04b7af841722ab773da","services":["streamer"],"enable_msg_events":true,"port":63463},"up":true}},{"node":{"config":{"id":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","private_key":"4a7cb437d9c60831cf5e8c6d02e0f62205c1a2de83d9879d1d82ecb6e9b99031","name":"node_b35f418c7935cc54278e90978c3ef1521ab91daeaf9f1ebc1cd25211611ade091cac4e1f009d71059279d507322a4536501980ac0dd44caddc52fd4c593879f7","services":["streamer"],"enable_msg_events":true,"port":63464},"up":true}},{"node":{"config":{"id":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","private_key":"18216d0babc8a162ed03e1c866e0e90d0ea5fd5c2c2ea3f411886de38bf58640","name":"node_fe8ac5d33cd8ab6a1dad9567cdfb89b431a5c4f4a584fc608b92e7dfd06f70988e71e2f11f9fda9ee797c9ffba83bc085939fdf2522dde39f28202be92650566","services":["streamer"],"enable_msg_events":true,"port":63465},"up":true}},{"node":{"config":{"id":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","private_key":"bb317b572ed4481d33b6a67a267264366929dc0e2c12ade71a203b8b3159be03","name":"node_352407b42726dcd1aacc46a912ed8124b8b6a3da4e33dab742e40aa2452953d35dc8f42eddc76695ae2317e9f15dde2cd21be4ce826934695ad1847455661d1b","services":["streamer"],"enable_msg_events":true,"port":63466},"up":true}},{"node":{"config":{"id":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","private_key":"bd9c51ff7ece28d9a9808386358197110aa9a2a7d4715cd033a94c4d1d54ee76","name":"node_b137cf2291b530a39516d882200848e7f27a2710e0839b4d25b4f367bea6a0c3aaef8c7c7851c00a2945adcd819ea0508610afc1f453b8bc512b7b4d4faacdf3","services":["streamer"],"enable_msg_events":true,"port":63467},"up":true}},{"node":{"config":{"id":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","private_key":"6113b0494786bde04defd28e36030dad5b4368563b7b6b63c08475c18980a380","name":"node_1b063741c76fe65e62b4eae42751319d0cce66f22dde9f1cf83d6cca249a0e65bc7f6f22597697362fadd226222fb3847f8e146961969d1b4c9f7e475389cd8e","services":["streamer"],"enable_msg_events":true,"port":63468},"up":true}},{"node":{"config":{"id":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","private_key":"9875ab2bbcb806524e7fca84b6aba663cbbbec2d533a47e2df6f3fc85e1d8e55","name":"node_657d5370319128d24d925b41065eb619409d63ec6280975d78877a4028287463f6442f5206dd703569a05b2b542ad8bbb99803da265408208d6356a26d283d08","services":["streamer"],"enable_msg_events":true,"port":63469},"up":true}},{"node":{"config":{"id":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","private_key":"43de756eb52b963762bf62085de3293461cb2c53dd70baced6e3c86981545add","name":"node_a127faa19dcb7da585983d36a8e9d3e9a44a6db68507b60c70da71011f44ce377944802f39cd65f5a705cd8249ac1ef7ed8fd699349098f3f8e23b37592c80ae","services":["streamer"],"enable_msg_events":true,"port":63470},"up":true}},{"node":{"config":{"id":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","private_key":"af731618471023aff01cd45c69001d7fa95752c4d42c68df95eab820bb70bff5","name":"node_2e42f845d0393d1682add54ee30b60a953ed283e75d347bc6719ae0e91f6676282e7960f1fd52e5803d6b341fb3582c724b4f9cfd7bce9ce85f13ca480c7e72e","services":["streamer"],"enable_msg_events":true,"port":63471},"up":true}},{"node":{"config":{"id":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","private_key":"3444df2021104f7c577b25a23c3fc0231efb2cae1375cbae67db5602cbbe13d9","name":"node_6b01079463ec2f649db8634cb7a596261c79a8f714d954c772528e0547b017f8ce405e4a0ea9d32270848180e0f77b8c0b022cf95c85e777626edd4d24ea21d2","services":["streamer"],"enable_msg_events":true,"port":63472},"up":true}},{"node":{"config":{"id":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","private_key":"638383a2262ab3e1cb5a1cdf134fb5a0077f21e3bf90118cc03311db43b1cf0a","name":"node_2245f3bf1a3b4e92f912affc75f757cf648b20474c11ffe947884f216b8f24f9dcb6e6a0358a4061b8517478ec15027e185b2f05a777573b4940375bf4aaf2be","services":["streamer"],"enable_msg_events":true,"port":63473},"up":true}},{"node":{"config":{"id":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","private_key":"269f2cacd5854ad6634cd178738e910a093dbfb55bcf42ecd1f1d621f5829499","name":"node_d4b7c787981abec24353c7d496661692233797e3758189bf909a69fe87935bf6da0940daa4f12e81f20c5e88f70b472113688b71a0ae2f91a73ee0e6ff4c8591","services":["streamer"],"enable_msg_events":true,"port":63474},"up":true}},{"node":{"config":{"id":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","private_key":"1f5c7e0be8cb7bacb5c28bf9283884761fcbe8c6b353b5c821d204938da6aab3","name":"node_9c30ad8c85adc7bb52ddcfab2e661cc3a854a689eaa59128d35129d02cd5b0f8da4a44cdd33934a8e2c8fab1760c16d6f2e1c5eb227dc819e85624e63343c069","services":["streamer"],"enable_msg_events":true,"port":63475},"up":true}},{"node":{"config":{"id":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","private_key":"975ccce3cea6896e2dc7fb2fb8399b56deea3eac98f96dfe331602f06386ebe2","name":"node_c8b0dba45104fc7c7dff3ce078a0d3f5ade6198bb4656e2bee8076387929133e5ef2bd293b130a9d4f6a6974ca17e8b4a8f406d1219880f1e0f99c65c63af5a4","services":["streamer"],"enable_msg_events":true,"port":63476},"up":true}},{"node":{"config":{"id":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","private_key":"381480a705e57052adb222beb50053c41122d1c2c10b111a16abfc01e2314d28","name":"node_ff1e34fd51953ed641b431aa657da21cb4c81d23e4eaa13c9cce526f1f1b34593d41f9b87a0e10387fe400c623638677c0efab15dbd1014a0ccc11f9ec92c417","services":["streamer"],"enable_msg_events":true,"port":63477},"up":true}},{"node":{"config":{"id":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","private_key":"22c94340e76bf6f9d70e933f2b3cc96d24f64282bc3d4a61621712e78500fead","name":"node_a78f18691e0dbf3c08fe9d7dec188e6a05a93833432fb99eb2b3924ab0bde7a44db2a102a65544bbdc4fb61bc3a3d569230d9843a335bf619167fb045d78ab3c","services":["streamer"],"enable_msg_events":true,"port":63478},"up":true}},{"node":{"config":{"id":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","private_key":"9b0568309c2ef3f512d43d9016f801f55741346b5f56da355dfe5dc54d652821","name":"node_e67e495385e7cacfe659b40d1ba94d4b1ff55eada70a4d9740a9e452fbf221672bd0a897b940e2a6bed71e2a16867fe45bf0ea0015435ac6d815690e263b1899","services":["streamer"],"enable_msg_events":true,"port":63479},"up":true}},{"node":{"config":{"id":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","private_key":"8ee8a33f33bc96603d61297c73e11d545ac229d887345e12f9fe834c7532e648","name":"node_aacff366e601e072a2113add9020e19b6612f3e85b6e607fdc8cc1b6991f43be0b1f835ed3dc41d1f2b3e0caf7fac252c8eb4c150667d48207fa92ea5f0a7455","services":["streamer"],"enable_msg_events":true,"port":63480},"up":true}},{"node":{"config":{"id":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","private_key":"105fa3b2d400eefda08235ac7c0db7af48667dd5a51b8d001d39e06753e93872","name":"node_2f903b2fd4f9432b7d91b5c3e4c7ee3cb9c56fe7efc4baff0edd06fc75e4b7492f2c3c929755746df59c9f95d437a12ba40ac138d08f5bc7aa091f49f3b852c2","services":["streamer"],"enable_msg_events":true,"port":63481},"up":true}}],"conns":[{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":false},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":false},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":false},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":false},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":false},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":false},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":false},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":false},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":false},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":false},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":false},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","other":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","up":true},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":false},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":false},{"one":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":false},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":true},{"one":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":true},{"one":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","other":"00c83e87900972472e247a13acd65450a014a4edf0ab1548199699edeb50886c","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","up":true},{"one":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":false},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"b40da884b5e0ab429b3608ce6030c0f7f542d008713ed1a444c70d9c00989ecf","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":true},{"one":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":true},{"one":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":true},{"one":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":false},{"one":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","other":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","up":true},{"one":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"d2ac9af919a7bfea9d0acd11bc63874beb8c7213941128ba7e7741c7e79e871f","up":true},{"one":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":false},{"one":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":true},{"one":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","up":false},{"one":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":false},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"57ee6d3d13e021ae5bb1a7e82c4cbdfeb02164d4305c0b4619a5ea3184d19354","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":true},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b7aa334a49788734068ac73e4b11bc554776217500c24eb76a85fe02f55ef037","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"17a00226ac9b2bb0f83e9add9c0ca1bcc830a30e36b1462007fbe261090f7a9a","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":true},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"aa7876d43dd0ce40f421f68c0d13c8c718d7a7a5e7c567dd20d87d19934cdc05","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"91088ea79cd8f27da8879760dd21c363aa9be1135437c2b87464426874b597e5","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"69d8801f9f19fec51b636cc27fca2c93e67dac8f3650aea35259d01293d5c9e6","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":true},{"one":"bd39cdc673c4184193347f0efd74bb894f7f36a994c154ffe3dadcd456efe460","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":true},{"one":"c7fa3f5dd856ac0cd8fc3f2933180cfe1e605b31c630731f3e0a00d392f4097a","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":true},{"one":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":true},{"one":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","other":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","up":true},{"one":"0bc30a547e60dc358f1b431b8f44d46471c19de546723da15e5ec3d3afd2ddf8","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","up":true},{"one":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":false},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":true},{"one":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"2a7d1316da51fc5e1378366a543a73fc40db1eb7355b3e199ee237cc1db81abf","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":true},{"one":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"48ec978577e2dbf0448ab119a3821be5d25dbf5a295fd4f695b9311429538a26","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"8ea97f6abd40d70717688c5dd38daf6f6b12005df21ae397dfb700fbfe3447ac","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":true},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f1b97eeabc889cdb4f67c699fdb30ad896abe08e603b154abdf5e122bb1e49ce","up":true},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":true},{"one":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","other":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"208e648a32b59b77c2abbeac0402c8d009485a19dd4a04a216cd91d0c6713929","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"2224bdce114e9e87621ab44d1a54b11e7714f30ba695c8353a9573adfcf822fa","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":true},{"one":"510c70916948815cd32759c451515bb024e38e0db8bb128710396978dc705a67","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":true},{"one":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":true},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"802f9e88535e40c179cb5f7d2a16500696e2af2115d3f7ca0cac5c2f634109c2","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","other":"8a5439adf9987f8e0df052b5c32599dba0a25d3e45dce4cafdf2d2ddfdae2f42","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"89efed66fb192f1530bad978261c660cf18473bc2ad4dcb6c3336afefe8aebf2","other":"8d3c0c717a2ead135c414b69841ade94e126eb0a89132a2c6f531728c62a9180","up":true},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":false},{"one":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f0b803dcfec89e1d68739ca05cf0c9c04e80a2b1cd47496a83168a71184fd4cf","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":true},{"one":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"a9dfced37b98d1dfabb96e5c68f0744c615385328aa469af16fbcf8f28d2062d","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","other":"05a4778e1be7da949c1a7bffa3408020b66b4ee3c98e1f62e35d212c77e83ada","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":true},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":true},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3054ce9b542ef2af36ab2b5d4590f2b9794107bbbe55cac109ecd5dfe56d8c32","up":false},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":false},{"one":"3c5ae3bb462b109222b4a1ac1cf9b04508fcd53a2d13796880965e99e0216ee8","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":false},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","up":true},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":true},{"one":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d0443f24523af0eec6c20b21d84b2d54cb0ba8d4d1a205b41328bb22e8d3cd63","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d3bd76f9b178b34e0a97bd0130c61a8dfa2097fcbc667f6e4f4eb77227425693","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"fd44f2616755aad3efacba9ecf1d92d0ab986ba679007f735c8bcf3c6b94c150","other":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":true},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":true},{"one":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","other":"d90b75bd11ea3243e097f2318bd95a35590c9f113324ffa1f94cd701a5d3eb32","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e2554d1bf145ec0e7027ca8e8ba0c85fc697bc4b54e36a6cdc53f1efa37a6634","up":true},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e3d8cbd8840509034f081859422bc599750fa4f040d2f90302b9513b433847f8","up":true},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":true},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":true},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":true},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":true},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","up":true},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":true},{"one":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":true},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":false},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":true},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f1ad1843560ead294e9d60c9bfc99d8a827f2cfe557e0f9fe7ebf82aec56926d","up":true},{"one":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":true},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":true},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":true},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","other":"d96e430326c7fc91fcd19c4e85b472a41ba24317ff09e5bd8eb2bd7a306499be","up":true},{"one":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"56bbd975ff675f73b566b447e894d311b8631438163b625436685b019a15213b","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"3ff80089a2ef377b1844881300b3e85041b16f0e7508b01e59a0e76b63c8244e","up":true},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"baafd0d5d03e5072341e9e3e69b8c48041cd6a9ca3da56a1a4934084db6e22bd","up":true},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","up":true},{"one":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"4b8acc021ddea1fff036b4b0e5939c38507ef792490701f7b341e4ff10a78567","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":true},{"one":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","other":"f054c2c66725837bdf1d64602f9d1627d83a3c970d9bcabda7f4d390cd40a438","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":true},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":false},{"one":"0ad654954ad9b21c75831389c89574a7871a6ba8e1d54c92cf26c64c33148b42","other":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","up":true},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":true},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"14e40f9abe8b2c845f2fc62a8f4347ff3630918cd62a33af7788e4bf599cfb96","up":true},{"one":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":false},{"one":"43fbbefa7ed5fb3b496c126bf54a77b7cc65b40c67facbf9605fafbe4e0397ad","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":true},{"one":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"fd3fcb327e1988c4786dad45a6e325b2fa9ef07ee62721aa5cdafd5529bd125d","up":true},{"one":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","up":true},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","up":true},{"one":"d56025bb110210216fdc8f86ad205607c6fb4744d3d444931aa17512a854356a","other":"c4090ec37cddfca2dfae52d85993a635cf47547c917e5c69190e24a48db7cafd","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":true},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":true},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d60644fb69edf1d360a5b3d480030df97600a3d94a189da98b58c43758c98331","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"8ee7f2d5c359bd5c37ec03d4e02ef8084768e12d094a7cd27cb5def6738b61c5","up":true},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":false},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":true},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a105c9ec1789d99c59f23257f63e048c0c923e3748d35e6108c8c0a8d10e6ec1","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","up":true},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":true},{"one":"523768400c5056078f368a95723448fae6747917fb3a9c642930ebfd979d9e05","other":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":false},{"one":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","other":"cba44046d693629a872a22812ebcc9919ddd8148ec7085b23bbb828f258b48f2","up":true},{"one":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","other":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","up":true},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7e4585b52254f6081e19191e737fd1898528a0af77e3d752a081d29b92ac13a5","up":false},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","up":true},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":true},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":false},{"one":"cf771ee06f5ab9cfb00084a5ee8929d15e434f2ffbc4ba4289cb2471104146fb","other":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","up":false},{"one":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":true},{"one":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","other":"4b70964ce2916bb056cec6da31283f4eb3cdf774b86f3ba36b13f56fec18c6db","up":false},{"one":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bb3198bb61f3dc96365a99b7141c0b85720614de4640afa76458d27484e1353a","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":true},{"one":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":false},{"one":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","other":"f293658b2837cd41cfb4f9eaa18d0025fc5877bcec701a97df914882f4bfe43e","up":false},{"one":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","other":"853bc86aad69d6b5ae27f27b7979f504a3d1033000a4fa164f563357414f2fcd","up":false},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","up":true},{"one":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":false},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d66f440d86e43ad7e153ed9f101bd1632e64ddd2e75791fcd3fe819bd190e665","up":false},{"one":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"09d15d7dac32cbd6f9b5b292e6bcb5082d95d24edbb8ddef871890409aab60e7","other":"0d97827f6ea850c310c312598ebe1a92ceae08d1e055ca170f1e305f836ba398","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":true},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3ab20836f88aab49491e82cfd1f1e8a59b5794cf91644b663d40cb22c5460be4","up":false},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"f97e87f80e6db30609a0811bef5cc7a5884326abed5cc970f3ce580476d0935c","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":false},{"one":"cbd3dc416cd646687d2cc0373bdd79f44d77f5ee775e298a083d8c62be248f3c","other":"ca8c1a36e8c6998028b7cf45086f6478a622f00878bcd2643bcb021efc8cf50b","up":false},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"6923d78400f277fe29c35ba38a416edd7c960cc75d94c35aa3446b4d5e2f6c3b","up":true},{"one":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":false},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","up":false},{"one":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":true},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c95a481b19583fc85e9b079fa0b5cf51eb46e71b9f57fc6df2e3b78389d8de2f","up":false},{"one":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","other":"bbcbaf233465acdcce94920a2a643c20772074af094a33ffb96cc915e30ffd8a","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"03059077d3fadf62794756f6947fc32ed00d82162dbe3e6ebcd32952bd421321","up":false},{"one":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":false},{"one":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"574101500f64e9a1bfbf31f4f379a60a0ea9bee449af1cd29962214dd960b3c6","up":false},{"one":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":false},{"one":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","other":"d7c1b747ad01a39ca048916de03c0288d80aede0c968c392a9656f616903ffd3","up":true},{"one":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"398bb8a4dfcbf50a93de93688331fed42454d4941b367c569e9bc568d18fbc00","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":false},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"6caa4a84138eeb4cbe5573edf4c2381edf01bd386c57f527dde377983301a563","up":true},{"one":"bf6b5c5f8d8b6beab2d82c1ba9616309fa7a3052050e31e5f46ecac4636fd10e","other":"beb777c02dda420daeecd9fafbaadcd2592ed51e9a8a5c5dd7abe43743a88001","up":false},{"one":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":false},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d717377aed09d9b0d4f072abd13f49d3e4f64fd8ec40aa45a47d10fdc716e225","up":false},{"one":"85642219f8bb8ce048cfce5aecddc8acd035afa035a0137c354f5b6fc3e3889d","other":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","up":true},{"one":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"98aa8f9e3f434905222090453f2b0a97b7d60a252e0ecd519451645e0e685319","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"df52d5de0f5e69e7e4c9e0ffcec1f9df86d38044bb57e5a0cb18bde354ecb66d","up":false},{"one":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":true},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1af6b4d9b354555f37c5be62feb691dfa76a531404ed4de5ad2b905c84fc37fa","up":false},{"one":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"34e48bd6562a308ccf6a4a0257f253e908e97d16defe2f1a31e046d5558a4769","up":false},{"one":"0fa02bedceaa28618f48f319d38b657a356099ac98734f402c4c846a4c35b678","other":"0c728c174a25e11bc171d7d35eaaa3974859a4dbf7a64e1d9c9da6b3ad63b21a","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1587ed904df26ed711e2235fea41e5812a7d33ce5dab2ebb4e88515b18f43d6e","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":false},{"one":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","other":"e1909ff70b17f666d74c73e8d9803df1e6e20733e4aeecdc78e444b6632d92c9","up":false},{"one":"949386e823234d1afdf2a2134630a8028868bdcdf26443da4db22ece78871899","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","up":false},{"one":"41b2b713dba3a11683ad83d1cb4beb9ff4f5aaf49f2ad1ac2247c84a85d40a56","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"4bf8d8c5550940df9712d758be4711014366af3ea6b5988c5c8610f331f37042","up":false},{"one":"67ee67b8f4d3ee50d8cdd027ba96e4b2f8ef9017bac217bd5a2d9dca35325519","other":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"307c36a947f5c4c597075d8346a5db6133fbd2c14da099f85c1d2b7d6d8331f2","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"0c1956cad397c9cb93524cb23fbfab99df2a79780ae596b93c77fd9db06f7f7a","up":true},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"3388123bad3bf1debf51c5921c09d06f7627d05f6115af39d92dbe9b2f2313dc","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":false},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"d0b76e826a6eaeabdc060a0588bd1becc1901b60a8eb4e8adbe61107883a2987","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":false},{"one":"63de4cd08e00a3dbc071adafe1d1ca255cc6d672e3c5aa6596ab60ed5cc82c5e","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"308528d445007e189c31e695f2bc74af3debab473f57bffd866c601155ffc3d3","up":false},{"one":"8ae89e105f03ff1bacbf53e47ac7bd9af66e0fbc0decb1c11bc60778cf97476a","other":"ffb73c715498775efa3d82de417a4469c66a155ca1149fec7a1ca0a227eab4f3","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"1fabca181afff59bda173b8de38b04169f9b299880bf72674fdc8abd1f546e9c","up":false},{"one":"0f65210e727ede01a854c3c8d256adced79866c368d0d51fb3ade9c390b02318","other":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"37347d159418873210a3dcfa60c0f6ca50f9007ce6f0126eeea6918bda08b2de","up":false},{"one":"0ca9d19acb9c459358eb69ddaad98dca0b4c13b14cf1610716ed4f84dd972563","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":false},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":false},{"one":"5caea6ca046c5e2d3c9e2389600c36d3feba80a455944842c2eb55c5b144318a","other":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","up":false},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"2cab6becfcdafacbc9e5387c79bc70dcb9c16e1789b404edf57e05354f05679d","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","up":true},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","up":false},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"b45fd6b4ce2541816834066dcc1cee4bfb343ec965db53eda986e6b037513460","up":true},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"581ab9df0d109d94291331b68cbbf8bc700d969b2f9e43d0717f88f5409fb815","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"de1d3e466a171aef4bd47b6546d25c12a1f3120f0a5f68d377dc01362b408a2e","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"c914c96fb6c0ecd51e043f0395c7c63595ccd990c94d9ee241b14da352aa8773","up":false},{"one":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1953df7e29813b00b0137118623b6ce34113d17d4f9aaa608b81f2ee58ea3fe3","up":false},{"one":"d1bc26382a2c66d93f96f82baa6324a62a1a5574b7a7078b579c452429e61cae","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":false},{"one":"d07c2c3d684684a3178bac8f4578d1447117f604bc475efe108dce5621643846","other":"d35c12f352b5e8603b6e354434de8310e35f9901af563a3ec775bfa00b806f23","up":false},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":true},{"one":"5c9be78d69b28013fe73a16d07240b540f3399e041c92fc263a94632b1ed255d","other":"57657e7b7d2642c6e5daefd27000d0da41982491486fd1aee57d0f99f072a471","up":false},{"one":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","up":true},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"3799c5f3ebaad70130fcf00bb8131c78951a8f4bbd67ad2bdadfff4a8f667143","up":false},{"one":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","other":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","up":false},{"one":"f2f5e82cf81f07f8cf82c7171c5ee5a42b7963619fafd4295137357cea1b7bb0","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"5062d74876fdf425a8e576ed5e56d9719a2e506f45219fc10c48ed44d2f0360b","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","up":true},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":false},{"one":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","other":"dad35b937a6501fcd7483467d81296a6c8541def88d0ce45a702a1d1725bf567","up":false},{"one":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","other":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","up":false},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1a8ecbde88be22a9bbb5f3ef19be5377923d655fd9cd838f9d08a442614742c3","up":false},{"one":"a1f1f5ce0313b3f63ec10fd5c19aa91fc56309ff599e08e19ed15e43c115950e","other":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","up":false},{"one":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","other":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","up":false},{"one":"715b38eca0c630aad73e5f7d65453c6666f459994e3cc4bba586af75d78e8fe4","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":false},{"one":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","other":"36589cecb182e45d3e9f35e2405ed9a8bccc452028b903d30728ce099323fd5b","up":false},{"one":"3ef6bb1dcd37360fe4a463b70add6cd4ba112a293112911b2304ab05b4c1b543","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":false},{"one":"e56cd20d7e387065be2d52a5c3ea1682765c9378521709887c6e29cbf24b43e0","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"507060be030344850df6fc76719d503254b38d96d77eb25f49ca9d955944b10a","other":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":false},{"one":"c9114dc588a9d7ba73e41a943d08c528f3a4e811dc8b216cd4ab58171d0f642c","other":"af8fb611627063b408d2b96c1ab68fafb223a86d947de3dac3a59649cd13e0cf","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e5d23024ad9e5dc8915f8d31428e9b3d62f1c4843e276451f17ebb766d06b456","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":false},{"one":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","other":"2cb18a6dd5643091b3b41538bb32dc414785fcf180a5c51f10c8bbcdbc6a7847","up":false},{"one":"9a09aa168f7f4ebd90652d6900ace1ba88b8785290b2687783d4a23e9bdb90ee","other":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","up":false},{"one":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","other":"0daf815b74975070a8ef053b82b2f4fa7919d4888d472f7c57d7b60c7b56e056","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","up":false},{"one":"910da662d9444f160ff5d934ef667f1f3aaba1fc3275e6ba152f9aa7e85bb24d","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","up":false},{"one":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"99eb314acf9de2b6f7085da247a552125e61c97c6b54388a21c0474d717e3590","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","other":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e54d69f3bb061c62dede6e5a8704700bf9b8063edead7c755c9586f4d96754f1","up":false},{"one":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","other":"24f87fd89a8aabaee05033a0a3eefc01ccbb5bbc6a53d615ef34f646a46b0156","up":true},{"one":"eee15b5c5ffcbd0aa56877a6a45aaa323367614180d3e5cf7b4aeefa789d8317","other":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","up":false},{"one":"5a67bff220db75aa2266742614cf15025b9c06aa733c805d0372f10882c292a1","other":"539980a9bfc5ce74bc35d81cc264f4c0d529a75df0c870b9e0b9ce45650a9f29","up":false},{"one":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"0a3fe6516edff33cde6afc46c6174a8562f17454b6f3ad41be8c12ebf1b0a07d","other":"b04931ea8428258af41286377042ca4ef7b2f507ef3ba14512b36a043a184253","up":true},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"efbb3dd3b0fb3daf4a8a7091d400d834fd9532ce0c3dbebb60d391559d64acb1","up":true},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","up":true},{"one":"6f1c48453e1bfb9c474d7f888d8c437c75db569e2c900867c4eaf3e6504847aa","other":"7ec4083eca4749caa706ac08afc0c91cdcec42f18e4d360f18695a79de362115","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ec785af2fb66c0af4c7d6ac750e337a5a8a795a22022cafa8a43df7fba11d9e1","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":false},{"one":"4dc43c820a6c34797152a558339bf468aa48c64e1e54c6158d5ea333a8f3dce8","other":"48df69314a57a6ab2fc31108104aae2242ad2a941d2f87119a151250344aee02","up":false},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"992959c1dabb655a57cbadfeb18436f21226a56968ff0c9926a69b86692cf289","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"42d6afeae77ae9e99c6bb727126dde5e1338b5421cafe2787251bd19d2b54d3a","up":false},{"one":"e7243f48530c3f040827c02fdc67642c7a0569138337a498517d4fb4d38f10af","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"47a8e9918ad3b957a888540a497fe46dc4b64a1d1f1f8e1bacefdf6813d91d70","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"5e3efcd12d75bb47f842261d24f509018dfa5687e3195e1d1bb2bc602cc9c291","other":"5b308b25cfe30d0b68784dc73be464dfa85a8e49ddd6f6271ff0ee2b63798928","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":false},{"one":"ce7128ea0b68755aea6e2dd5d5da1100a1e29ebc2d34ce02c0d025a4a700ea15","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"c301dfd7e7510fa72b94531ead6c51cceeea230a004a91f9fb472fb19b39bc06","up":false},{"one":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","other":"ebc9b288de5534f762a4ab0e6522955a8f83ad15b662426e45956a820401d0a0","up":true},{"one":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","other":"1a85e13e2ad82c8ffa10ad52b382947e638036120188ae611fb1fb333cb5232b","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":true},{"one":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","other":"e4e95f8381568c1cba7e8f64dd710554b923241a1c988dddb42a2cd96434705f","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"36070b5229906c010f3d756c6b9501f80757fdba261e38ea2a294b5047f67739","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"1dfcaab676a9d9a83c7f076449aa0d8446770ec0960655e1202fd7ee426383eb","up":false},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":true},{"one":"44b7013bcd5e0bd36ed526602614f13a91c9fcfa8613312ae22d9c87377a5949","other":"413b15ae74e38b8610dd5edd52e05630f8acfa4139a1b361775afa8e748ebbfc","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"2737567dbc8dbfa2a23fbd4264d1bf7cd126b54f1bc3aefdf4170bb80bc4c5a7","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"efdd79da474a0784c7421ed246f6f8db721bd3551ad6e3793070c432181679f3","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"86113f8a7d4304ffe158ccc0e94af9194cddbb27604ccc08dd2adbea9878be2f","up":false},{"one":"96419a246f5ca44f2796d91ccc55b3ac477e1754e74d202cdd133e6b5b96051b","other":"9f4c2e7b1c80175a9d7d85c983d9ee406e5d7ba644b0f8e85196c8bc7cbcbf71","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b30eed51a958a822528b126471cf7088424a7913a5e89d6aaf989c968a0c4be9","up":true},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"6701b38360d0a72ddc355c17385af34b7ed9eeec00bc3867e162b5571af69e3f","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","up":true},{"one":"1ea1653a07ce2e07a40018f3a5e8dce0258177e95696a78c57ea3eecc26e6949","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":false},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"83d0ffd43e2469b9c3498862d0186e413cc4d205f7854bf9dd73c4d74379217c","up":false},{"one":"e4d6b7889d454cd01ee933f9ae28221702495d79acbd10458082ce90c09fb691","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":false},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"c60e0a8c32d6842453792124d495af30721e79f29947938135f35b341c433ef4","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d455034d04322ce766b48f825dcac69ea9b0f749bd5cb8ab2c4e3a18b1c70ef8","up":true},{"one":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","other":"c3d8b4ee532f606e460666e45569c7f54baf4acc69e1ed027af4d7f11e194dae","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a0c98f72caba5cb7a4009937ff949b745b2330ed8b1a71ce70f4e59d50459449","up":false},{"one":"b3910e693ef69c37cdfc9f831f04fa8549797edd16ac316a95fe5f9fde3ab3a2","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":true},{"one":"7299df5ce4d90e2e7bfae929fc3fca7175b8899681e626041d8e5721b2ce8e9f","other":"07a6873c7eadb651196a76ab30241cc1c984549c5086f1c3bb1be7bd493346be","up":false},{"one":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","other":"efc128ce65a388db303d97f1f1844f2050f8d0a95820e8859865490ee273b0ce","up":false},{"one":"1daa2b253dc95a37bc9d238e1ac71be213d6f725b3bbb84c5c93f512e2ee501a","other":"ecff394703253e8778a1501c97b3a6a170e3d9d2b3fd8aa83443dec0edf19896","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"4bbc289546fd7ade8b214daa4e8a23139a85d7e46d70a557025339f6fbbee87e","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"71bfc67cadc7f06e638f2c87b0e25a4cec35b6655adb27f72b37774125bd38d3","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","up":true},{"one":"9b87fdd4d96b82263003c90346fc097008ff681bd246227a35eff3b431d6342e","other":"9918da1c179414f75c8d27103c3297a3bf5ccc62ae0bb13859611046536a5959","up":false},{"one":"8434ffb624f336f300f8c4f3315edcaeb99b7f542c8b3c2c972aa6bc210d1302","other":"802e9fa524f1a6a27fdcebf7f25ab28a5c043439b7844b1fc34da8242b6017a0","up":false},{"one":"98bc7e8a4941b065b98f6611935fab096dd4e0bdfd38a9f2ca4b63f2851e2704","other":"940415ad0c47373416bdaea50ed36062a47feb2e09537401f86893f337824ad8","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ee3f23e7e62f9af2906703eb9a1dd51a8c2ab3a9ca79c460e08085e565806eb3","up":false},{"one":"8d853eca48be257b7444327d61cf588218da71c688be9847ee9987d54eaed1ab","other":"86d32fe2816f5523698b81c638eaeca28efb3bc4775cdfb4679e0f99bec8a703","up":false},{"one":"e9fa1a8529dddce276f66c78223ca06ceb02fac95ea6e18b5118a0417b370a09","other":"ee527dffd4bae1880e3c5ddcba2e2fb1706c4d40804e102c9f3d514137ab073e","up":false},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a3f2a0d3dff1914624ae113dd0dfef72175f03ded5cba89ebf75e350c4651525","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"384305aff56982a885d643f2b7289c5f35658ad5c36a76c1d97030af60ed975f","up":true},{"one":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f2b24713b8f8bcab21081bd17d11d859dd5ffb21c9baddd971fdf2d4b51c1ac6","up":false},{"one":"fc881a3a0da605c7781ba6b122f0507f303fa998185a351976aeae89f4ef8b8b","other":"f6a64941b0561dbbfb387a5d448e40eec0493f1c0c1fae4dcd314a1a51f6b02d","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"d777e45233aa4d8b723f6a6aa9cbf5de4c0b19f6fd00af6d538b67ec01b74ab5","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"3baa42389305677f589107a8ef58e129ab29d0e16820df4ce2195113eeb0f295","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"15ecfd0ece9d43df1cb05bf2cf319c9d954557f3c269f7b0cd7f3edb6c89e581","up":false},{"one":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","other":"60bc3e01e8aace7338d7a326ea7945b5b9d829ae83c5c70dc69fe919b9a31481","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"ebe8037a1344f9b599cca1aca404861c4194529ab7cb23b3f7a081f615427575","other":"a1b6a1a989455f9f1955276a0b3b5b4c19726acf8fa3f7218fab420036fa988f","up":false},{"one":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"a478f5caa8ae441d8e933f636ff6c1166753c0b443742e20434619044a85081d","other":"e850535d4bce69008b1ac52bfc95a9ed7cde04fbe849a5ade3dbb9fa13a67c9a","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a3174cb06f0ed08c640fc23d2840e002f537a07a93ad464beacd92c140a78a9e","up":true},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":true},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","up":true},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"0536088e14b81899b914cfcebd2a3c3ddbbbef905ffb69375613d4853667be18","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"e31eb44ccf3beb2579ad10ba30c0adb12deeccc54f9c477d30fe6fd8308c1010","up":true},{"one":"9bc3cc7ff18f1eccd36948e6831ce14d0223a27b233d5b839b8662e16f9fb435","other":"175873005cd8b0db7da431cc6cc077615a5c79a88c4698a1ae61f3bea212996f","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"4c97be06dae9d63322656fea7bf0de266346b61674f95d1eaff0f14618623b5b","up":false},{"one":"44c8c26204fe5a0a48c62466be8079a60b445b4381422242584d8e1918cde748","other":"464b80305ce1b2094c1294c41aa842aeee31680ac90230dfcf26a3606a07f9a6","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"294066bf056b1530308d096871b08a046086abcbc7ed7a0a97d9fb46cccd6003","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"b820b318a3a12a7a7f45d06fff7f5d7e3ca2ca8097c396c1d76c735e1c915cc0","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"11a0676648caea71425ae79a55acd71a0f2fdea70bb0dafbb53ac1b8e1249af0","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"10b16d53d16acc9fcc9d2321bec7cf6ab7600bf11da955dd4f628d0bb92d99ce","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"1d5b85468d868cec2f1be5f1c7dc89b33f61d27ab04e750a556b1e3aaf3f7c15","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"0020768d96fca0cf47a9632ca25ff794c996042f07a7242ec7c70fbc75e0e45e","up":false},{"one":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","other":"020f57c369b6521552f7498e444aed21ac57832ed3ffaa7b45f607793ea1a86c","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"e4697202e563f447c9c93f498365f4dc95d14633ed40387b934c485dc3aac575","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3a182b774ac0fa9d6ea04720cae972bae0cbb9d9673891abab8ae17e463e582f","up":true},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"1254b1e5c9e80b367520bfefc35cf32a60aff56c48315107c4b07aa1a7866af9","up":false},{"one":"a75dd3af0823e79d336f78762b8d12e55429736f363e540c2c99a8b7bbc535d6","other":"e40694edf0f70c242ad2058bd94fdac0676c19ef93043829e03f7c8a7a23f179","up":false},{"one":"caa321a50e80a5ab3d73f717008f4601f57a21efa873e4f1cc4d6f356fbafdae","other":"3227103897adafbe4fe3aad206bab8253bb802bd980a0c6188500be89e656edd","up":true},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"e6b7994917b34a1a760a48cca74f592aef94f8afd91686b5db8d0389ded09281","up":true},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"78109d560f529ec24cc69b69eef6055548225c2965e8c23cf8c0650d2d3dfd2e","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"7aef1625409f479ee1abad565f8d7e73b17714e77f54d1ac1b2fe80382a058cc","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"77bc5628edeafaced10f1f3727a4f579bc69e457720127686d2754bf9803a446","up":true},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"65a670260af4f38603757fba904cde5dc8f1d3240ad5ec6bca3153a4bebc147a","up":true},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2c4eb13e3d02c91e043130f04f9e248c3d1eb9ac7578b3825fabcb30884fd3b0","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2e3b4fb6298c357d2a4cfcdb2fcc0be2cbae0a11219e4cac2d0c01de3925dd52","up":false},{"one":"3d17891f506b4c968758f1d58eb35ca883fdd61ae9ad34ec2c076b506c124229","other":"293f6e407f98ce24090e5ed53fe606bbb272b61a3eec3859203ea54d16991e88","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2f1f2c4c25b97fcd8fbe79506e748b7c0df5b3bc15b884701df127e49548844e","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"ac62fbb8e18ecc4bb4e6f5d4a999bc86815803106d451200457b29730619353a","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"a9365c4cb8daf8bb018a6ec9bb03e9c75eb1955b26d8847b868db8e302a7aff5","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2c16611229217e96e69d3d4a06f7d44d7cc26e511a816db0362eb52bca1ce3e0","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"76a5d17fde4e1c671e0338548501da39332c8ef59329d999b0fb6ff704060591","up":false},{"one":"38d707dcfe1a9d09c03b606dd4db89e6ced004c12f61d8b573b5c9f742f512bb","other":"7239f6fcd537b5d59b85071c962d4958806800de127b172c167c2b814cec4d84","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a0e4e6ba6dda0b76cd43f93e7c7b3923e5223d3cb144715f2f38045e5923f99b","up":false},{"one":"1dfde87c7820c28cd673e6da6fa8c9b73542de6b5acfd99dd1316a22af5eb163","other":"167bc81f7d26f99ceeeda814de5bbfa75f8f2a61575570596bc5a3c618f5d230","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a011c924104e072ec415cf72255167582e5d3f189f541066ba88b3ae0041b508","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"92d565b13068e8b9af102af40e1112a00b91e398ef0c42a292e88d406c55b4f2","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"93f88beedce7f9581ecc05615ba15fb313006a32a159adf169f2e02ecc697598","up":false},{"one":"22206b3ddff20a245a900b7bfbf2f400709c2670f0c49713be25eb57136e9f1b","other":"2f230166de0362acabe4258a19fe19d493912e0e0613674a6cc963cf48b376f1","up":false},{"one":"a6bdbd75f03fa311700a17ff4054ebf2855f05ab3f2f4af82cad573d91417a83","other":"a077a6f8832a5d7d2146d9b08de0c9f4ae3515a3f87f2751592e1158adb04155","up":false},{"one":"985f1b6d642a9fb71302fe325b3f39aaaf3c1c7ecd3fedb308c3753f7dd4e235","other":"97474907a03344503279f1d86695233962b6d36e597b6e41b11c941c2ca2dc46","up":false}]} \ No newline at end of file diff --git a/swarm/network/stream/testing/snapshot_32.json b/swarm/network/stream/testing/snapshot_32.json deleted file mode 100644 index 55bd2f22d6e8..000000000000 --- a/swarm/network/stream/testing/snapshot_32.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","private_key":"b571efd8e722db149f98412648275074a828e5137b46722413039489eb617b36","name":"node_d2a392e9e7383b895587a7d6eea4a157de20caa9e2c62b4da5a8ff3186d129fee1330ddf3d180b1f59e1aa83686cd163222e38c84a84a0f60139968d6a56cbca","services":["streamer"],"enable_msg_events":true,"port":61468},"up":true}},{"node":{"config":{"id":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","private_key":"fbd2e7bb8b511ed0878fc14a5923105866ab2c3bdf5ee2c52c1a2bc7c00a185e","name":"node_6c0b3b7c1c08bb558d92f0172fb8bfabe52a4bf8348b2f82e50c6d492a595dd0677b4559d7d2cd5a6e51ecdaf9a0f898f154730b87a8d9b265c6a54f9f6802a7","services":["streamer"],"enable_msg_events":true,"port":61469},"up":true}},{"node":{"config":{"id":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","private_key":"60a362da222a74d3d81ed679549417d55a92c79b8e0aab1bf05eb2d01f82c0b2","name":"node_dc63b83b488b7b505d5b2a60680b7dc87b1c5b61509e8030ebc67512ba72c0f616c1594946878dfb29e79f351d7134306778a74d5f5b7d5e08dbdb6dd6ade359","services":["streamer"],"enable_msg_events":true,"port":61470},"up":true}},{"node":{"config":{"id":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","private_key":"00625fb0f90ed61656987faecdd0690f0a97c88e33f6e339fa3a8f4bfc1e640f","name":"node_eaa3ad48682b08d9c91907a79e82938c1b30108745b276788c830dfcb0c0e752134369d751230e95fb7ab9777c38dcd105ad123ec5cc86ef6dbdd11fe31aea93","services":["streamer"],"enable_msg_events":true,"port":61471},"up":true}},{"node":{"config":{"id":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","private_key":"fbb38d0ed3ef4726052fdec97ddd7eb3a3feb3d2fd5ea6cffe8ff97b621958ce","name":"node_331084cce2884ad912d5a20467c68fc261a02d6df0b60ff5b1427edc0885eab66a4f0f7e7fc9c676e994842f8126a3b34dbde91243f26bed6a0ba14babed56cc","services":["streamer"],"enable_msg_events":true,"port":61472},"up":true}},{"node":{"config":{"id":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","private_key":"b5c12698375aa5215df48003ed13c94e00e6bee1a0b05277237d40f0fcfc625e","name":"node_e00f9a5611008d54bbbfe6a1cf402e011c92f540b47a82b7795508d1b857eee4a522e26c8351ddf6e303d353ee35afecbf9f54d7aae36e6736174473ac4caf73","services":["streamer"],"enable_msg_events":true,"port":61473},"up":true}},{"node":{"config":{"id":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","private_key":"90e044c682c33ed90f5f5cac9b8181ee978d2cc9d3d3f545140858d324f1d7e1","name":"node_e4b7b3bbeda388842ecb3688c041fe58bbd7e4566818a58b679e96215553dbf8569032a3ae941b3f8bb3e75886852d245bda5abf0c3cf70f532c38235e1a2175","services":["streamer"],"enable_msg_events":true,"port":61474},"up":true}},{"node":{"config":{"id":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","private_key":"2371e6ff2ecc4144ee61efa958488eed6c1f739e81f27bf775db1e9b66e89054","name":"node_0679dbbb51fa0283bcba387daa2180955d402a0ed42155095fcaffb96dbfd6b4b1bb0ed2ccf11cd990dfed4a3b320ee3f64286116a7b617a35989a448c367119","services":["streamer"],"enable_msg_events":true,"port":61475},"up":true}},{"node":{"config":{"id":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","private_key":"87a3816c95159c72a7ad1b466ae9a095f12c7db210fcddd8dbaaa697220f88bb","name":"node_a197cd9e7e2d19287745f486582b7242c991f36183e8b2bf4983d7a9b9026e9884e3295183f376cd796b814fdf352b1c8c5c609a0e5f5d5155ab925d4b6fdeb9","services":["streamer"],"enable_msg_events":true,"port":61476},"up":true}},{"node":{"config":{"id":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","private_key":"6729988ebc04b9398883c068277630ff0de16f16e3f67114380acfdb0d1b530b","name":"node_eb11498b8cebc767d535481938c664359c6c84674da4d8fac729df64e288248bb020477ad4422cf1b7cea844db5ee12bb5cea82ac6e89a338d8ca1073e061f4c","services":["streamer"],"enable_msg_events":true,"port":61477},"up":true}},{"node":{"config":{"id":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","private_key":"208068d7a920e42db04340bf473f822d4d663f5139d664c4375294dd61b1dff3","name":"node_d3b5df108f35a82e569016a06fefadb52797dafb505de1981f6678e2156574893a169b0adcc595377267dec0b7d620b5b50c7e7696c39eecee2c3e5f7bf71d18","services":["streamer"],"enable_msg_events":true,"port":61478},"up":true}},{"node":{"config":{"id":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","private_key":"b3a7fa29c4cbf15e8fbbf289ab9876b438bc80092284efedde8e8d41ac76ad78","name":"node_1be1903b1104bfae07438fb888993cb3e812fc38c8f26af2e68bff9f1758e9a69b29be3636ee24060c09ce900bad2004681e1083792b2a6e532bbfc07a3a0459","services":["streamer"],"enable_msg_events":true,"port":61479},"up":true}},{"node":{"config":{"id":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","private_key":"91b7188a3178bda6cd2991a615801d744f4963a3de963adb8afb3f12d02cbc0d","name":"node_26a6b8d30e0a8954bd9a0424b817ff79fec2e0521c1313c8262be9a3b9a0d1ee7f109be78d65ca9eb811a1634a813f4ba609887fd3c0085628b2a8ebd3426031","services":["streamer"],"enable_msg_events":true,"port":61480},"up":true}},{"node":{"config":{"id":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","private_key":"235b967cd72cdb90b423f2b5604e9157f660b253cd2df62369f204f45c3c4d7e","name":"node_255c353a7585ab1bab41bcca409383dcdff5837bdcd7cebece1b6896fc06d0f65346ba618dc057c77734439612cb8cc3fd8aa068eb7569f0ad9e9e172daea678","services":["streamer"],"enable_msg_events":true,"port":61481},"up":true}},{"node":{"config":{"id":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","private_key":"f97bf73ba53833e4f4c44023e87cef8ef7aeae380553e4a5a4f3215748646a27","name":"node_c88ceea7f4d5148de8e2d71ffefc5c336cc62d322eb4371e457cbb97573b6323d200ff7678f94ef481c7b9daca3a9a7bab1e658d51fa279d433e19305df57814","services":["streamer"],"enable_msg_events":true,"port":61482},"up":true}},{"node":{"config":{"id":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","private_key":"c4c2ee3b5792dc5d86b51c4e13c813df452094ff2f6296403d801adb1f75a500","name":"node_4299205173b81c2822767a53cb4728fd5c0e1602d5976ee5db63b8118e489e4645ccdad399d9367e9b87b0a1f39e7988db86af687fe8cfff35d618b19d64b1a9","services":["streamer"],"enable_msg_events":true,"port":61483},"up":true}},{"node":{"config":{"id":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","private_key":"b39dd34865d2f02c1d4c5ef2ca635ef5be43c4b2318b133d281b02dacd8f5420","name":"node_5ed2923d11037da9799d933ea62cd23ce1aacec66a83a6d3a7e420ea0c66ec00af37977a78374df12dc0facb426d0c39cf306bea15abaf40f9072eacc4cf40fe","services":["streamer"],"enable_msg_events":true,"port":61484},"up":true}},{"node":{"config":{"id":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","private_key":"a93bc07ea3d259a03c75a6777e9401f062a8064f6837fda8a1abd518774a75ac","name":"node_66ce6e2c75f429c4bc7de6f1c785258686cfd66867336a1030830bbcc78bf642f4d1920ab5fc68953b70b7aca02ec518515d48d20397ed207ccbeb88c36e7057","services":["streamer"],"enable_msg_events":true,"port":61485},"up":true}},{"node":{"config":{"id":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","private_key":"787adc2aab8500ce6ca1768040b4c81511e7982f525c0280830f8c32486a6fa0","name":"node_cf7d1a8ec1c3e68e862ef18947098ccbf6238fa7f85ee0018b7ac63b5387d6a9dbf194e3aad7edd1fda63ea63f2f5b8692ff885084adfd1f7b6613593960afc4","services":["streamer"],"enable_msg_events":true,"port":61486},"up":true}},{"node":{"config":{"id":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","private_key":"6a830e44eac33e88e29c9119fef789abd89503a44ae8b8dd64c0a26046df4bf7","name":"node_a54b9c0cbc07e65b216f78bc0f56cd7003896641f1aa361fdc11e0bc208ee6bc876a455e89dee8abf67c259c7b6a82e7ac0d6d06cc304ee05fbc26783c09863a","services":["streamer"],"enable_msg_events":true,"port":61487},"up":true}},{"node":{"config":{"id":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","private_key":"71341041894a268f86cf62e8e80605911c19f38266bc49358c54f9955b4bd984","name":"node_82bd5207dec292f911ff7dbcd242bf8962ab256057b1173dba2d71cd8cc77d41f38bf8d9a4eed83edeeb0e6f5bfabe8c7cae9490cc17dca1f454b9ad1b76224b","services":["streamer"],"enable_msg_events":true,"port":61488},"up":true}},{"node":{"config":{"id":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","private_key":"1a7bf17688ee55a634ddbf081213180f5a6e171a4b04679f50a949e88287591f","name":"node_61cbdddf6163152f5f8bbe3c710eeb9afb22dbec78d8f7eb3fd45ba44493b9387765527f059a10e694842786959c501303b1e62d3454c84870c14e0f36a58b0a","services":["streamer"],"enable_msg_events":true,"port":61489},"up":true}},{"node":{"config":{"id":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","private_key":"87d1292398bace7bdd961dc2e1f028d405eeafebf90ef8d8f4b411fdfd74d767","name":"node_74d5d4ec7fdc749d9148b1a338b643e0a06abe03720b1d20b505da1ff1585b09d2cf7053293544fae1409cf26a27144870125787a473a73a1c4ca98509dc67ca","services":["streamer"],"enable_msg_events":true,"port":61490},"up":true}},{"node":{"config":{"id":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","private_key":"1d65bea3808741aeabc5293fcb863c594c7ec07c955b3f23e28d2ef4b0b6e578","name":"node_12934e06d8821c5e149d944ee7a831428dc6c9eee8705f3b21046fdadc2864a9ffe2bdad60a4ba5a34d7a79c22631d52b62d511e81971b6b98896acae9427e94","services":["streamer"],"enable_msg_events":true,"port":61491},"up":true}},{"node":{"config":{"id":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","private_key":"f067299a421cd124f8652427793dc41c8a5e6bf1dc2c4de59ef396ca08e80256","name":"node_e0e0e90fa669023a1a9c564727cc657ce564c23e05b1c2b61f6bfbd5eb03feb75d34b029886e3426e1bbe4a49398794dfefa0557b7db57c15700c69c0e038029","services":["streamer"],"enable_msg_events":true,"port":61492},"up":true}},{"node":{"config":{"id":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","private_key":"5f76a5630d4f1979d6d03dfb0c8836de7852e4ad14536f4b999e565b599027b8","name":"node_1149e4bcd71c75b14ba7492587fa77e4a4de14e5c580a165ad8835258d1afcb15e65d02257ad8884b0e47be061d3129d8e3af90cbe4a1a96f828a1f84e0d72c6","services":["streamer"],"enable_msg_events":true,"port":61493},"up":true}},{"node":{"config":{"id":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","private_key":"0e4febbd0bb937f5992d0e640d5b599a0dfc3b40740d7a0a5fd16423dfcc87fb","name":"node_695e5706cece9d923c19a147283b772dd1ffa79e8d08506d2ed897d89545ffbdac1a130bd7ceeb82a2a57f2b4a613aa6e7264911b909fb9bff27cd435b802687","services":["streamer"],"enable_msg_events":true,"port":61494},"up":true}},{"node":{"config":{"id":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","private_key":"54d714717b902eb733a693d473a4b4b243318a9fd68d1b8abe98eabcbaa8c015","name":"node_e28c769630f19e79966bc354bb38313522778e4f06cd0872db8bd3afd7651882eba7b0403d82701cd063cbaee4ba0ba4a97c0c488fb44e8c8b72368d6881fdcf","services":["streamer"],"enable_msg_events":true,"port":61495},"up":true}},{"node":{"config":{"id":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","private_key":"43e07e3593646f9ec6c3b630daa34ba80dc37bc0f5c57e3f3097f3503de413dc","name":"node_2b1d1ec3ee35fa63571f46a2781d5fb14379319da2d67e482c24b27bacc2b792cd61a2c1138b8ba27673b1c08588064fdf9c73c80f0278e4f0ba133d78127337","services":["streamer"],"enable_msg_events":true,"port":61496},"up":true}},{"node":{"config":{"id":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","private_key":"ef8ebfc1df0b19885db4b08df697c11a86c2442bce48d5f6f807b7e8dec70e04","name":"node_b5e3b3cc7ac15224ff10cf8974ceaf7ad2ebb18ab9505bbb342c42e6ca65fe3541c14e1ee10ac3a0e7a0d87c29e25114e0c0d957d5dbbadf6136805be3046b4c","services":["streamer"],"enable_msg_events":true,"port":61497},"up":true}},{"node":{"config":{"id":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","private_key":"1cb586254c20e9a6f4cc428f878dcfbcc8257f00c21efa88519de7a425cb5e4f","name":"node_fb6e36b9de5eef05780efcf16113fc9098a699ac525bd970dc5b6a92f596da6ffca044e434b97cd712a4035c38dd3ab08488042519f6269bc5057853b643bbcc","services":["streamer"],"enable_msg_events":true,"port":61498},"up":true}},{"node":{"config":{"id":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","private_key":"2621e61b3b896a37c2b4ee05a264bb685f4a70c3caf8a162eee28dd6e64fa2fd","name":"node_aca2af376ef1c983514f75cd717c0852e9d4321e705517196fab4fafe109c1f3581866e1865d41977f8c23a31ec7fa218c11db0c87eb4bb96390025a96386f9a","services":["streamer"],"enable_msg_events":true,"port":61499},"up":true}}],"conns":[{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","other":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"35b6e31caedb996b4a87a6b12b9a29eaacb4aba4c334543ba84b26d6bcbd65f0","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","other":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","up":true},{"one":"231cf4ad6466edcff849ba5f44069f51267dfda535d31a4d7241f5d83c1a521a","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"24a154986fbc308c5f2e3fba99f3263743b669ad88ffdd2252cce5fe0c02c279","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"59a3ef9ba5d0a0137eab9442657cbaaae5bfcd6e77f9678b1b2616d44e442caf","other":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","up":true},{"one":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"8e5f934e6d0f0bf34425c3db2db405d238f6512cf132926ebd0b596fc721fbe4","up":true},{"one":"d668b8cc215cdbc92be719a33623494090ae0fb1a80f53bde0315b1a8fb3d139","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","up":true},{"one":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"7514001adcdeb5c9a0e88fb54082e96a5c162430dfc56b6da858607880366ff5","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"484875287058e78ed92396e00f34e75f907a1f42d5597b9e8c30afcbe50c1810","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"5ec7e6ffb44f67eccc35adbf0923755cd5b6a8abcdd371db9b1be555780ca5a1","other":"391e49ed641480c2c40febdb23263264c83b2b6cdf3400f6526f7939c0245c17","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","up":true},{"one":"8f7dc84801ba8da80761fe1e0d2fe72a48e45fa753cc8bbe930bf9277a219432","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","up":true},{"one":"914839ec95b100922429a3616522daffc51c1a4c39b297d1d8cec591567b4ccc","other":"8d0984a32d4b044065588b4bbe48531a30881bb869399c81b90b349e57f07ffc","up":true},{"one":"d5355c5eced7ca0b210934d2e4f11ae09bec1c62246548ea092dc29e9987171f","other":"de95f5a58a8880b9e98f71c687afa472882244c012439719b6b066930355c993","up":true},{"one":"e7ac9c3a8ca80703b3499a376d57e2a9523b3bd3c5cf35b7a450f0af44680686","other":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","up":true},{"one":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","other":"7b889ec7b0674ca8f6508a35d920149f1826d410b796e52bfa72306b1fafbae4","up":true},{"one":"d514861e573828617604db5b88f407b152409308657454f99fc2820b44a45088","other":"dab5098cf929579a87e26d30f9a8b001ad3158afe0f6231c50e58f33c6d62207","up":true},{"one":"930de56c1ea44a1b39f2f99f6780ce284042d59238adb1047167c6329be4a291","other":"bfb02423df06888f87e8fbde52c2373020896f2a3dea69ecd2efa89c1aa298ac","up":true},{"one":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","other":"a1b5ab3013c0031a169e72847a4509e83b994086fdd82b07fb6ca0d7cfe9d537","up":true},{"one":"9756cdaac61a9ec4d346e352862ddbdb627f56b5bab132a31348359f62652824","other":"a82935d4ce212895fad97829cc8e04bd1ae1c53323af4e6d8e2c673b7dfaabb9","up":true},{"one":"c71983aed3779037757e433a4f916be40f5199e89861a3998ccdd7e5e76f69b4","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a4e6f50a17347a8475d6b704484b06869d9625993761acbde6a0ae5ac0b40762","other":"b412abec3dd5145d9236498056db35e50e0e90697016c757724c15a2e9b187af","up":true},{"one":"d81271c644a75f0bf9d785319aded8b7a0e9323f85e81e94ef951e8c66251e75","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"deeef9d38d9afb206ee7e6447e80befaf387c2af476a7e0c60c55c73dd36450d","other":"d19a0c646122e8d0b8148da1f64b3cb781fe974687a071e5a8522e9a22bc6646","up":true},{"one":"a0ca706ab2ba950ff9bb92123c66c95132a63b9c93975b9b6e0d485937dd8f65","other":"b17b568780b3a029d4292a742890d41be6a71031b15e6276792a77a9746f0699","up":true}]} \ No newline at end of file diff --git a/swarm/network/stream/testing/snapshot_4.json b/swarm/network/stream/testing/snapshot_4.json deleted file mode 100644 index a8b61740749a..000000000000 --- a/swarm/network/stream/testing/snapshot_4.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true}]} diff --git a/swarm/network/stream/testing/snapshot_64.json b/swarm/network/stream/testing/snapshot_64.json deleted file mode 100644 index 8785c9e087db..000000000000 --- a/swarm/network/stream/testing/snapshot_64.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","private_key":"0736b1ccd6a1d7c513e312d29a8afa6e1231954e17a66886d0bbcf0dc191b170","name":"node_a48a667469a1344cb70f269b21fb3ca9e83823226749fd9c232be1b86ab9427888f2ecb20ddfa56da361463a061e192570f2f8da3fa967c473320ca85e382c53","services":["streamer"],"enable_msg_events":true,"port":62976},"up":true}},{"node":{"config":{"id":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","private_key":"edcc0061564101058d0caf2a7dd7cd178a2fd7f5de93263f1b2abac25ce28360","name":"node_8f6fb4a5baf715e001b060ce72378829279ce06a3247bd4a6faa3c725ee1b949570373e4231de82981020563e704297e77172506101b1444fcacfcc5f211827e","services":["streamer"],"enable_msg_events":true,"port":62977},"up":true}},{"node":{"config":{"id":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","private_key":"911635b150029a2a56d4a5b647162774df1ff5e6946c727ba21e3e8cad2c41ce","name":"node_e7b1563d6e089e030983b075b590abb8a3205e9bce953f562b755ba150a3edc2dc3377259d96c05cc7363a23aed613711ca049e26253fd9273ac4c0483087015","services":["streamer"],"enable_msg_events":true,"port":62978},"up":true}},{"node":{"config":{"id":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","private_key":"4bd5083735663222c8e8948125c8f606952ef887a4a07888d39d8aa6af0568e8","name":"node_d0718ce0dafea66ee16c79626e020355273cdd062c0fceb122e391c4ca6e4e408a1b0e8230c4ade5bc95803916bdd6d98c99d2b6ea70c32e17fa1f2c98741a90","services":["streamer"],"enable_msg_events":true,"port":62979},"up":true}},{"node":{"config":{"id":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","private_key":"8cb2a950934e687c8aea0a72114b26989bccfcdf508f584a549d05091aef2c3f","name":"node_af3f9dc00ce3cc156000f16a06c55c123ccdfabed89c9aee4478ff439b6f52a89d0501cff626d36b7f1852737955f7a036b25cf259580e8f46a3e0e44340b539","services":["streamer"],"enable_msg_events":true,"port":62980},"up":true}},{"node":{"config":{"id":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","private_key":"3c147cdf4e85087a9c0e37ff5d96de7d977ce3d3711090f64d2c3bea39790167","name":"node_95c3ca2362de2eb0ac8efdd243918ed216f5d124bc6f5b9d83a6ee1aaf8a0fbdbd70ca1710d1ed825d6871f13a15954725f1aa1b27b48307844c0bc27baec0db","services":["streamer"],"enable_msg_events":true,"port":62981},"up":true}},{"node":{"config":{"id":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","private_key":"fb505af88aa3fc8134b3ad647d78f182e0aee007261c066024d9fdda0bd9d297","name":"node_c73f8fe9f54b89634cb0e8e332407a3a90cbbd347c0abc93823db13a7a39c46e7bd30d3f557316d92dd731cfc686afc308448682ff06c77246e3fb02b9a025ba","services":["streamer"],"enable_msg_events":true,"port":62982},"up":true}},{"node":{"config":{"id":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","private_key":"833d044f5a00d0018f8b2a7d4d825831f351dbe3f3e7074d96103c3597bb0a37","name":"node_9529ff2b0692ad2608b55ec8ec0d1c9ccb8ee300412d99d389009162a76f7eec28d1090cbfb571aa8396b365074770b17106bfa3354857878dff164f42686142","services":["streamer"],"enable_msg_events":true,"port":62983},"up":true}},{"node":{"config":{"id":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","private_key":"f08b159c68739d221adc0060225f8feb89dc3aa1f016cef59508d2787a4232a9","name":"node_5b456e429f7adae30366206e681ba46439a3372fec3806f666425cb3f12983c0b427e089fb163b70e6a56220b1529ee392ff701bc2f4621d51e23aa6305150e8","services":["streamer"],"enable_msg_events":true,"port":62984},"up":true}},{"node":{"config":{"id":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","private_key":"bbadcfc9e554aabf08f9cdea8f1174f4f47b85c5a615efa6f0d5a4db7e6e9f67","name":"node_5e92b025cc087c8823423c287f274a32a3dc0065afdf189475ba96b0da7b785cd493b7f2a7f3bb8195c73025bfbb402cbb4e0f6ae0d5e0caab223193cf6f2e5c","services":["streamer"],"enable_msg_events":true,"port":62985},"up":true}},{"node":{"config":{"id":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","private_key":"91980cc1a6aa75dabe27a4bed1a4a2299ed286387f066d12c1a05ab514245966","name":"node_f6e4b1dc1fa95ceae2b932b178afdc2dd515832a191e0f49c916d5a04548d58ef9f8c1dda3fbc93a45e6d82517e6a573310b7bfb14bc38c57000aec9ff010391","services":["streamer"],"enable_msg_events":true,"port":62986},"up":true}},{"node":{"config":{"id":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","private_key":"9f2513f57cafcbb35e549fae622387037b8da11772eef7bbb45d44f81712155b","name":"node_707a9ae4bc8b37fff43dc3ba83ecb735bd428b720a751a11112452eec1ca49c09139bc437666add2823dd205e45cc793f8657c66ccbc6911cc60771d4512e038","services":["streamer"],"enable_msg_events":true,"port":62987},"up":true}},{"node":{"config":{"id":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","private_key":"a198f5ac31e6bef23d8f266075f8363ce66698d0f8b1193072f813b2a1717236","name":"node_78216c6660fff0b96e38084941a2f237996732118033bf842e5f9e533b22b36c2da996df28e866424311b7b6414d4627db1f22a235ae777f7de34d9696043ecb","services":["streamer"],"enable_msg_events":true,"port":62988},"up":true}},{"node":{"config":{"id":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","private_key":"9f8eddf3160bc4b13285e9587f6736c82305632b55fe833a12f1f821c0f311e4","name":"node_d472383c453e6b0f1a632010bdd6c42a9668d328a8f8071e0407069f6fe413e2a0fd0551a09cc56ee5245d472e39a7b6295491dd256ae42e200a257f297743e3","services":["streamer"],"enable_msg_events":true,"port":62989},"up":true}},{"node":{"config":{"id":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","private_key":"601ed94a775c7129de2ddd82e23249e13176478817e5376a1c18389de0016283","name":"node_351ceaf2e95e098a8e15e81c82073b523f641848326d1bbd379f40f886b50ce2c377c4e3a2dfc2662d6f25ac04dede41063a075cf00be1cf36f95b0267717ab8","services":["streamer"],"enable_msg_events":true,"port":62990},"up":true}},{"node":{"config":{"id":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","private_key":"dd64b8659254425a4553501bcc275b1dc0a6c7bc79a538f780716cd64d46a8c2","name":"node_8da9cdb3c78776ed230497b21d4ac172f0ce73e921dfddd483da7bc6bbcd1951dd78fd5f70a0acbad855b2984e4c4bdb408c4bc25cab40684fe5a4408ec7ab9c","services":["streamer"],"enable_msg_events":true,"port":62991},"up":true}},{"node":{"config":{"id":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","private_key":"7216dc13943bfd0a8c2e93d621a44a2dd4baab7b68fa87be06f2e649f533f72c","name":"node_0a45a0aa4b4eee71b2828c794281d698019667288cf51311ffae7d8ea895f8ae29f7958dbfcda8763d9d8e9c097dccc5f92ac9d09fb4ccbde178d7f5ebda4d35","services":["streamer"],"enable_msg_events":true,"port":62992},"up":true}},{"node":{"config":{"id":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","private_key":"01a2779483d6e089da8b3943f81cff48c8bfd1bd7d0281bceb152e41a7f5acb7","name":"node_f70c92be150cb3f65f6bd904c8c161bfb0cea717bab0b24da63714de83e0872c8c369960ada1629607a1e166a19b6cfa887603e4868e7912ae5512744e8cc1c0","services":["streamer"],"enable_msg_events":true,"port":62993},"up":true}},{"node":{"config":{"id":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","private_key":"2954d35fce94938f074043b9f9dd87157a6730bdd8e3a1b6f19b8a55ad1505df","name":"node_d563716fbe2068cc940f7b12dc2bacb345c95f01e78e3b1f0105a441f300fdb00cc72e677aec102360fb904b63055d8581555f5b74b8f2392706569d8357c53f","services":["streamer"],"enable_msg_events":true,"port":62994},"up":true}},{"node":{"config":{"id":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","private_key":"6f87c529d5b17354bd3ba6b59d6ff3a0f71550a41d949d702e27f50957cfc3ba","name":"node_46bb2acc087482d40ab2ccbb387723158411ff4931423414e4d09891be8a31d11929e939e4be94b0cc355c49883e1835785ba1955d865f78748c2a0a2f6eee0a","services":["streamer"],"enable_msg_events":true,"port":62995},"up":true}},{"node":{"config":{"id":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","private_key":"ea386dc625e681a5d5d7c4e8ede4b3ffb8f2f13061c65acdde2750e2a19ef417","name":"node_8da75cb4e63d968a7999ca4b49572b5ae592a91fa442d44bb7c42fb4b174a365e1affa1dbc45b2a0406444505f178100768e7783831f2886d53e7d1b8a3a7291","services":["streamer"],"enable_msg_events":true,"port":62996},"up":true}},{"node":{"config":{"id":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","private_key":"e9b9261c569da5418d3aeabf28dff1faada23ae1a3a1552035aefe56bdf3136d","name":"node_6d1af44ab259cc080a14c07bf5efabfd70cb847fe338f016c00138c84bddf6a6ce94047d1bffcfc7e9bc772dd7a080468a84655d5351d0056f97f13358b91547","services":["streamer"],"enable_msg_events":true,"port":62997},"up":true}},{"node":{"config":{"id":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","private_key":"19334395c71250dd3eeeef4eb4032e2769839d57cd6080f2f51e1de3630789fe","name":"node_0dcef49b94fdcff024d706030fd4f513d0c6ad5f00b06a8b67abc454bbe5c2c74e939d491c0700e47ecee5cd7c7084603f62e626c34b454868b8f22d8c2dfb10","services":["streamer"],"enable_msg_events":true,"port":62998},"up":true}},{"node":{"config":{"id":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","private_key":"d587a8503da404e7a74e24d731daf63b9585ae41b555035979da013ab723b4b8","name":"node_e7d4478b412ef497741943736946a3b0679d21ae0c4cbdde6809c7236dcf1a40291088d872e469f06da19ed4ef77b9844aee7066c40fcd45b0931aff847de1d7","services":["streamer"],"enable_msg_events":true,"port":62999},"up":true}},{"node":{"config":{"id":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","private_key":"724511e7e57416a6b4627079b0b9079fb4fd5649dd018d7f3a64dbf6a1dd9adc","name":"node_7722d7d06c66afb0642d5f9ae0b22ed812c632f2d62ce64315da40eb003feb3fae1b337c10df21d297beabe51b3879f2c0a725f08ee78a8e09c75f86bd0e2092","services":["streamer"],"enable_msg_events":true,"port":63000},"up":true}},{"node":{"config":{"id":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","private_key":"922f3ca85ccc577429654b566f1561a301bbad054e4f3a8f312db841329899c9","name":"node_e479930845e1dac2d5908894548cc06c132fc5820810c6f46d9adc2bc252dd40b64642a3b2005ad3688d2637c43967f570bd153db9ee6742e1b23dbfb72537fa","services":["streamer"],"enable_msg_events":true,"port":63001},"up":true}},{"node":{"config":{"id":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","private_key":"c94a8e8e535d7431b0610ebfaa70d76c37bf6fbcaaa83ec4be0bed5527780670","name":"node_61b32cded1b5ea3e2ca545a55c84251daaaacf51e6fed98fbdf4c5b6b91a554081e1e577aaaaaa4f911780f92703c1d715695d86c1be641b0bd1794f4107c2be","services":["streamer"],"enable_msg_events":true,"port":63002},"up":true}},{"node":{"config":{"id":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","private_key":"7a1378d2cad0ac18e37694b3ec5c08580aa1887916e98030c66accf6197f615b","name":"node_9e51eb48f59886e70eb8d02e1c0c4423de3f0ce79c7a62bfd91bc2048cf643f40a91e2d2a1a8a19a9e4ba4a96aed0965aefcd941c068208abe8bf5029eb27d55","services":["streamer"],"enable_msg_events":true,"port":63003},"up":true}},{"node":{"config":{"id":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","private_key":"6e834fb9046bc38179a4c8be1cd4c2c540df1f73aa208e9794701234202211ca","name":"node_7a1f97c41c9efd7a2903af78f72d02cfff3631dc6260d3ceb2364c2a8e06965710e8feae6aa9f99b48b2475da10b2f9581c76d47b4cd2bfee09c43dcb5e3e5d9","services":["streamer"],"enable_msg_events":true,"port":63004},"up":true}},{"node":{"config":{"id":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","private_key":"819e80fcd487bf15502fff3d31651efcd9b5e7d5e18ca4d836ce53736bf23d11","name":"node_7a45fa46f161fae3ef9013e9ab81145f4a76fa6ae22160424d6dc111acbd477ce43d4c10db89cb7451c97ea1fbd78428997d01fd17e1851f8b559b404ede6da7","services":["streamer"],"enable_msg_events":true,"port":63005},"up":true}},{"node":{"config":{"id":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","private_key":"c2fff99bd9d70ab2149a1ace8ad0dc26b4b78cbfd60fe9215e0f69885e0cede6","name":"node_07138ce506125910af81bd1bae11c22bfab9a81e1e057cc3d84769475c5da9873eb3f11edc6aca83ef486bfb63eba15a6233676d29d93ac9e774f10cd42c8cbd","services":["streamer"],"enable_msg_events":true,"port":63006},"up":true}},{"node":{"config":{"id":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","private_key":"5d8862df181e186646d6fa8accaceed89b18a384ce5e63de34ecd1bd80d7f0c9","name":"node_f360c6599a0911337c7b96365fda1b2f64890bdb4483bb7e86bca15484f24c4efc0d1f6f56aa0c4fa5c205e6c1dbbf20d2ca3c2f8734f703fe6d672fa76a0d45","services":["streamer"],"enable_msg_events":true,"port":63007},"up":true}},{"node":{"config":{"id":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","private_key":"411b4485e7f793c1db7387d9e8f179d02d939de2702166248953f8f0813cb5f0","name":"node_f5272b71c228eb14b9e0e221deefc0a91353a5f17d01475f57fad54bb8e50e375f58019c7200a9ca45b0f1da6538708c61242e478d917499871df7a9d5857f1a","services":["streamer"],"enable_msg_events":true,"port":63008},"up":true}},{"node":{"config":{"id":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","private_key":"9b1297e565c13eeb81e2b19c31f635253081d34a65eb1ebf889f30635e4eccea","name":"node_e53cfad611bc38a1090d28e4cc58e4738ccaa83a00bf5447cd30ec70e492dea5811b67e79b9ca8856e79801741a675c6f54eb7a1c39e95ab735164855eae0fb7","services":["streamer"],"enable_msg_events":true,"port":63009},"up":true}},{"node":{"config":{"id":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","private_key":"eb698ae5696bf1cef4f4e6cb8ef2eb5e79cd298fcb55e0449bbaab6d048e09b6","name":"node_4f1a219f31e135208bf4caa314a14d8d48a5682941793431539efb5666b06bb5e3e9cb29b019ca414fb32961460556f2d99a04b12dc8ecbf05f43efe108803f5","services":["streamer"],"enable_msg_events":true,"port":63010},"up":true}},{"node":{"config":{"id":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","private_key":"cc474d341e32e674a1c1d607789df8bb6097ab392eace2d366da2496c5413cef","name":"node_25c64a52c298035be2184243082b5eba8a3a5d55c5334cea76e177d722945c8bf014a4ce9ef2ed76dc17a44234c97697337c6e001261533e72cc8266ee0e2fe4","services":["streamer"],"enable_msg_events":true,"port":63011},"up":true}},{"node":{"config":{"id":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","private_key":"4ec4a7d75323558dd822f09ab9f992afd016604bc77aec05f89cfdae6f50611b","name":"node_1691538e4cc41441c18fc92969c0c59f51da063814e8c45311605405284293503ee1570722cc7ae12f9cd63b899afaf5b3e66ca012115996074e8aaa71fda48c","services":["streamer"],"enable_msg_events":true,"port":63012},"up":true}},{"node":{"config":{"id":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","private_key":"b049d01349524a669db50fd817ef70811ea5cb5517adaa016f4ae426184188e8","name":"node_8e1a66c9029330c25b9abe95a11878f41cef1a32b567a931ffa781c2f70a1336efa03ba1a66dac0080304803c1239be443991a251f24d0e9c2e26aebeb5437f8","services":["streamer"],"enable_msg_events":true,"port":63013},"up":true}},{"node":{"config":{"id":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","private_key":"9eb7b1e41bd77e46a9746723ab4367fcdb9950d5f99c32bb1efddc9b5c60daf7","name":"node_c8e9cc707ce2a278371d1b4f64714cdae425b7c3606d18af6588dacaca35c7a171a07629247af351e667d2ddd9e71598f862125c827cc869c463cf87e4daeed0","services":["streamer"],"enable_msg_events":true,"port":63014},"up":true}},{"node":{"config":{"id":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","private_key":"229b6c150e858a0e81d1c720a9697bda4c9f26e531d85db8837ca5d1a24ff8dd","name":"node_43b91c24dd7fd217a76f00ab97920e4223bd2ee085abe7ac34e915e8676400e1643d3bbb4a864c8a6df1298bf229cabd1bdc9879eafdcbcab064708e8266e88d","services":["streamer"],"enable_msg_events":true,"port":63015},"up":true}},{"node":{"config":{"id":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","private_key":"ab42d800bd5b0bcaedd3009d4805e827ca6c41f54fb7fd38cc021f9c72bf3aed","name":"node_14136fa967f2d4825845ba4a43a5921d8fcf03f9c71c5595037e000b2ef6ff0a5eaad0980aea0a170cafda3529f982aea1107f58aa42485550c9480e86f5e9f3","services":["streamer"],"enable_msg_events":true,"port":63016},"up":true}},{"node":{"config":{"id":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","private_key":"15e0330ce9f82833faa08bbacae92d3eff516eeb4bfd1be0b7d8ecc8a311d8a8","name":"node_39d0aa13a6d7e709c9b914cb16f007c3f16af40532afa47c8cf9abf6d604d4380883103c995ec696ca593c4dc9bf0290979b965c9c6ade7c616d3973c5f0b1f0","services":["streamer"],"enable_msg_events":true,"port":63017},"up":true}},{"node":{"config":{"id":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","private_key":"a2ffbdb8b486d91c6d2b579b5ae3f1a8f09feaf0451b375d8985f0ddea952926","name":"node_e73af1e2a834ee132564dd2e983c877b3ae230808d2b42da2ec91472eee6ee6595c439800ce980186b4b0d9a56b96babf747006c07b07513543eead8e102fff7","services":["streamer"],"enable_msg_events":true,"port":63018},"up":true}},{"node":{"config":{"id":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","private_key":"48bdb744f1c9b25e7b2170b88fb956619976670186b82382029c84f3ef780930","name":"node_c0f2f1409cf83d7a777f6af95931181eb5a36b14a156f444075071c896fc5b435638ead23c65a242105db527c809e2c46f7805c862c0eb5d444749ddf22a5060","services":["streamer"],"enable_msg_events":true,"port":63019},"up":true}},{"node":{"config":{"id":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","private_key":"49376794edff5cc56583fc3ce9e6987e0210c537f798bfc00cd523927052bbf2","name":"node_e021950ce89ce2bd79649aad2ed504789636b09870d0652fefa5e16631cb32a5d41c6cc4a540b7a0fca6bc3d5adf9b372a22cf714adc7b3e9b968d4c840017d4","services":["streamer"],"enable_msg_events":true,"port":63020},"up":true}},{"node":{"config":{"id":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","private_key":"b59aef84a0b7166aab7dc4edd8bfc66f56b77097cbbb4e937277ecd23c051473","name":"node_16bd57b6590df0c69c440d178da8359b0a3e00b9c5362155eae42709bdc4d0488e437fa7e8396d5b429cebe356ebd1407039b21eefa8d9164b357845132edb28","services":["streamer"],"enable_msg_events":true,"port":63021},"up":true}},{"node":{"config":{"id":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","private_key":"961cb451a05a1f043539e0417e0c612286d8a86116a4bd3ac4f301444bc0abc7","name":"node_393eb8d2acf9244f1cdc220711c00d8fa7619394893643bc32e1ee0f821e5a2afed07badbdf97d710843c4ea6de3f74c113ad4c548afd23534d6dea5c37c6d9d","services":["streamer"],"enable_msg_events":true,"port":63022},"up":true}},{"node":{"config":{"id":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","private_key":"a56a9d4ff921fba9e03ecffbd71d75f97cc9b7c5f389cf54b9bf66e689bb60b5","name":"node_62b8e67a4ca956c1cf2ba7a538d39bfe8bccf747fe65be48c88270ad44ee7711c0e9a43bb3821feffc492dba9b58397768c755810121add9c980c9a2c696feb0","services":["streamer"],"enable_msg_events":true,"port":63023},"up":true}},{"node":{"config":{"id":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","private_key":"f80db180b4c58031447688bd4b5f9d32cfee3dc85506153782a0368873110317","name":"node_17c7eb5833687a98087daadda564e54b1c770f946efb7efd69370a9caf6e6939e408f04a3fa1aa042d9463992a711786e504072fae56d007d696851696fc5643","services":["streamer"],"enable_msg_events":true,"port":63024},"up":true}},{"node":{"config":{"id":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","private_key":"5750e8b20da0147e055f965d6ba4ee434812f658663383ebfe7e88f13fdf59ab","name":"node_f5efffc8e894cecc065f6892ad2a846c8fc4982d1c8c7fc729421d5108d519c501cc9f2f7a0046ec08d47cf2369753aaf287dfc3ef7ecd34d24d294efb933658","services":["streamer"],"enable_msg_events":true,"port":63025},"up":true}},{"node":{"config":{"id":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","private_key":"f841751579683b856a59eb75f3493a4b3e39183d8818a2638559100bb6f5e66a","name":"node_7c273dd4218e9e5b92e19d250832a424ff2ac5482ad70953746de780100669eb143247e15ccfca14cce9a49a003c82be71ca034a2900bed4c89fb10bdbfcc7c3","services":["streamer"],"enable_msg_events":true,"port":63026},"up":true}},{"node":{"config":{"id":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","private_key":"be9f2207e4e7a93758129c0d6fa34877b685210cf0e8f8d233e5425d8fa461f9","name":"node_8959c5cf825ebab14efeacf2807ad9498256a9e89a2ef00690c9ee23a3e934e111c52a5ddcc791b93f49424ac008095d8cb0da6905dfdeb62309fc4f6672e59e","services":["streamer"],"enable_msg_events":true,"port":63027},"up":true}},{"node":{"config":{"id":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","private_key":"4a245ec64e442d4cad2468d96914df5728633c568ed3d063990ac8932be63222","name":"node_dcf2401cbc26f3db27bb85c24984b1d755b3503fe400c139a0bedbe5de24db3f27c8f4f40adc1880b6142d20e67a40f3d45d36ba7fce122ffa44703e65622198","services":["streamer"],"enable_msg_events":true,"port":63028},"up":true}},{"node":{"config":{"id":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","private_key":"1771927f1f06912915f5498e857816fd8f73b2bde10f88ba4a856684bcc2a6fa","name":"node_38b3adde25c6407f29c2a721f1f5c082cc94ddad09fc5afda2bbb2309212a9b54b1553731a65ec8b58769fc11d488169c8000ee15fe8966bd44a3879e0c9e534","services":["streamer"],"enable_msg_events":true,"port":63029},"up":true}},{"node":{"config":{"id":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","private_key":"986bc0252067c4c3ace80099cbc843d6f16f7483719e9ecf7a3a0f876a461ee8","name":"node_6593097e880701f3d0573df7bff9ba7af40f4f83b828bfc11bdabea62fb94ed39c8233d8d40275c2af9ceddae44514e029a546fe9df73abbd3821d37933aba49","services":["streamer"],"enable_msg_events":true,"port":63030},"up":true}},{"node":{"config":{"id":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","private_key":"39848c3aa21a67751f95ffc8938b36264eeee342816d41b37816f2164e59858e","name":"node_578666c4113e196a7c738fdbae0bd68ade450283eb835efd06591798f1893f7f7d9cde0691faff670b5ae24e58cbc2f549d2196f244dddc00e82852c38e8539e","services":["streamer"],"enable_msg_events":true,"port":63031},"up":true}},{"node":{"config":{"id":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","private_key":"d5dee04f1435fa7ab6d65e89de8c4c6bf156111bfb9ee5de0ab617cc3be19681","name":"node_e1082b4577aa370a5171b7602282208697dcead854f0c82acb5628d179fa5990a0fc85c5343a47177aab81c7fa6c1be8a27a3484acddc353582ddeb61892ef94","services":["streamer"],"enable_msg_events":true,"port":63032},"up":true}},{"node":{"config":{"id":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","private_key":"044a1acc0d565f7080db7b625baefe8a5f7aef9009a7bcd338fc31a02d704d8c","name":"node_a4fbd2ffc25d2c3bd37beecd637dda5983cb5817ecb6da62aec16ea59aaf7e71966649211461564ba808174361898a1d2265f1a42e94434bc00d5d3e04b67a8a","services":["streamer"],"enable_msg_events":true,"port":63033},"up":true}},{"node":{"config":{"id":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","private_key":"8be74288552caed392476d39780f806f2c21b50a9990c5a3a5ed37397b218a6d","name":"node_eb08a7774ca5252237d059a8bbad68044c83b2c332024be98bdc0c58508867a80cd34cb4162bd55a47fecc93301c8b2a7a1edbfd807ebb5623499cac80ea42de","services":["streamer"],"enable_msg_events":true,"port":63034},"up":true}},{"node":{"config":{"id":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","private_key":"e644c54ce52ddb2788fc683264f175a24485082eb88ebe0a83c94ecce77d7175","name":"node_6eeb951b8f6d5ac519132910222777d5a409325e6c64d89708a00e55cb0fe85889aac1baa724e29fa7f064323b164a9c40c5114a65736e3dd16f0336283d9c7b","services":["streamer"],"enable_msg_events":true,"port":63035},"up":true}},{"node":{"config":{"id":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","private_key":"77445377572b915c2e3802f70fc9eae8d29e767f54f80a29701ae5d1fe0c8677","name":"node_6419279b600da3e2ee8d0b2a5b0319bc6cd496086955b49a8d2168fd4c35d5688291bc9313076b1b8e070f25dc593788d72b8f8c1d2ad828741a45deea35e58d","services":["streamer"],"enable_msg_events":true,"port":63036},"up":true}},{"node":{"config":{"id":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","private_key":"f6b20f29a1cdcad8f8bd88acc4f6ffba7b3027e46ab60784e2c2b77edb3d3630","name":"node_032b1ce6881413b7ade1918e56691c7acd9f24111f47792ca50c33e570afba433caa132ad2326d03f9c0544fdc09fa0ca65f61de9fe61d6dd92c5d25a8df69af","services":["streamer"],"enable_msg_events":true,"port":63037},"up":true}},{"node":{"config":{"id":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","private_key":"25bb03224302b9c89585681c4bb30dc9d95fe417e5c0f13627154083cda7492b","name":"node_86d55ece15e6bb4da7601f6587654505f760ee2b87abdb115091eefa93f61cf29fd695601bb8c6ae2c76400de24b8bca9ca32b50e4b849ae76f5320b03276bfc","services":["streamer"],"enable_msg_events":true,"port":63038},"up":true}},{"node":{"config":{"id":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","private_key":"a4eb160b838f392946a844b9fbc36006c459ff6f9ef46a832d000f17f2aa834c","name":"node_31cbd7c029d69715e59f31bccf362cd76e0a87839f1f63c6623be437d2af227a38f12c5fb9c659cc543976833caf22a52f5191c7c465a9ba36ac4235c12add72","services":["streamer"],"enable_msg_events":true,"port":63039},"up":true}}],"conns":[{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","other":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","other":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"9f2d72c6e30ec363bdcf9ecf28fcf5553f98357680d8530581fcd815389005ec","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"66230e0bec41cfcf3667d7ddc7312888ae4887e8430c57dedafcdbadb6c12364","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","up":true},{"one":"72f779e91460990aee45e99b0565246a2620d4939cc3ab0fe021fefe71aae761","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","up":true},{"one":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"634c2562544e0979530cc4dba918c849f24f85c87813e592c54e1f6d8d73bb6f","up":true},{"one":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","up":true},{"one":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"83870b048b374ed527d4b25256900d4b53fad11d900b54e366f9e3fe7ae50079","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"56ac3ac4cc04e94c93d986a0ed9da8b68d97f13c8b5ec35d56703592fc05bc43","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"d8d872ef5b1632eabca51f1d2755fa5a3f16dc487d4d8be960930ee4462a2633","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","other":"dbc536e11d371786bf8c61eec755d2cb22242c27e8edd7985dae612a9d2cac05","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","up":true},{"one":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"3c93b64143bf1bf130545806917472f3ca16ad6f223f0388f445ddc353140042","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"1087495bf04e6967257f84b8e5de084e2000b9d748216e31c9f33fc9caedb715","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","up":true},{"one":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","other":"b4bee8054b3b7bc3ef0748937602699173983a764814e85f173916fd70f1e3ed","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"9ecf217e2076c229f6d15bfe29df85aa129f1fb12d2a8307907327b5fe2f80c5","up":true},{"one":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","other":"544ad921e03de7d1d656038e23452dd3a9c7ef041520f17f8318326ecc58683b","up":true},{"one":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","other":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","up":true},{"one":"29077dd2f4869b69ffc3ed40e82e4ef051292c3461888b5faf7b4c4b14d4928f","other":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","up":true},{"one":"c0f0bec8a3506280df599d57abc414d007696967381b9690bcf63a093586307c","other":"df9ad5c2cd2375a5a227841841a47876765f6552a8b2cb9fa8cdedaeca2371ed","up":true},{"one":"a070c42951b523531f065cb8376eb8ca0c431b473ce9ebc44a3fc383f1f878b3","other":"be6906254ba2d3748ff8ce2ebbabaa03bad1c92d2eadc1ab6470548cb8d7c524","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"d10e58907f84eef0dfcfd3c81457b60eef9b1ea5b9a462e22f0c4e643a6e7140","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"f03f47bf8f6241cbda878f301783e30cac333e8cea3d6bf9bc2be3b7fc2cf1c3","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"6c4bdfe4650525d5efc1a4ca8d92ebbea33b1877bfac69656e81adbbad4f286a","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"30d80772ad22d78f8a4e948a06677b5676aadb8a9c040f3ffb59a7e608e0929e","other":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"61c24980b9ef4ee7fc33c51310f981a8e74e4276509a545a3f471370082dab4b","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"51db0d8fefeedfab3394f8f398b6d8f4540b24bc6cbd8e66bc5a7480db0228f5","other":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"f066d5d314253a872ab27df90d85ba5824da06032f92ce8bf20020b61971e199","up":true},{"one":"ada8540c63062347d3162850cf2a4820a20ed96514fb01b95d995bbfff97a212","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"be9f880ccfd8dd0f5fde587c4e9fbdcb2d3551df0c4504d9938d4301a9276e72","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"9dc2c4166fa9410d7be67cbb5ac572aa42a9a78c2efe5ea601ddd37c356196da","up":true},{"one":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","other":"1abcab4e898966c42c11d1a92b1c1911fc779089c5a20ea1ddf005f76632b171","up":true},{"one":"de9eff7b7b80323f544746b9596e7da6b43b91e6c6d0660ad38df1e877ab8f99","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","other":"f0ee0274e24a7cc3d1b0d38cd46d205ccbf791d0cc038d022f2a0c50ae6a5cd5","up":true},{"one":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","other":"1be4ba2f068e060a0aabac445094f1dc8b22fe1e5575c98df8d8783aa3d95177","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","up":true},{"one":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5d056a38c3a7c3bfcd431b767662903454f41429d2e03b9b30273e5b1b8e5c97","up":true},{"one":"ce614a2fd326ce57b0ead5750d0a08f3c7dd94e1d2935861697e3df4652a22b6","other":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","up":true},{"one":"358eef3cf9964bf89e056afe0f4b46ce85bcb079bab922a4ae9dfa555001abfc","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"14645ab9b2ebbf4436466df07ff28e68b92774c6b5a0d311a174765e350c7089","up":true},{"one":"dfe389ee7fe03c809d7a4afa1f04dde9ab9a50d8c6ca5bf2489debb2e8329541","other":"fbbe14109dc4fa8251e852a181f3663b4245c93b737fa9c4921a53ed9949019d","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"36c28c0237be6b2131280452c3113affcae28f6c7066811a8e1ee1a0a01decc3","up":true},{"one":"3ff43d13b6ee84b128db4215c47c73909f6616039b87ca70abdd2108e29dddfb","other":"3ea2554db02021f0413529426d7a7b0ac9abe80643993f6d80fdfff93a765c40","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"e3c20117761e1b3c3d7c3d133e1bf68e594ee25950cd4311a8d964923c4164da","up":true},{"one":"332f7b60a1fbb6cd1e251dc68d1093b7f0bb05c1eefce5e61f124dff9445f14d","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"77687d9e478a52555674f12aa654ad931a3ee83920b9cdc8fecc03653ed7e386","up":true},{"one":"68d45eec895b91f081026e86ed164092dad8d4087918cd50c6f77767d9577f6d","other":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"23e4f18d302b6a545530b89eca007c141c751cdcde471bc3378bf72fd68b91c6","up":true},{"one":"cfa6cfc1f856e69430370d5c52130519502c7a9e4fb14c7c8d9b309612a3c1bb","other":"c678643c5249eb90385aad201d6756f9f364024938d4c9f59f4aa51d64d48bd7","up":true},{"one":"37debce0cbe19a2ab88f15dffa390df392938e7060970b93eae968a8c2497650","other":"2f4492429ab2ecd080a36451153990587de2458ebd9421fb989d8e27d4a88422","up":true},{"one":"c6c479f1c83f5158eb77d57e6321d5ed062964870775f51254461010c8882c10","other":"e5eea2a0ac0175a0ad41239d8e36e537ce7d428d6b44e23e8e33ff0be11bac72","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5cdc4493f01d6ebec3070b028275bd94ede61db21a4f5d3b282a366d1d3484b8","up":true},{"one":"44b1544b5795a1c77094832bae47c84eb38482b1e1aaefbaecacbc7ef9d10e3e","other":"577b9ea47bc00cde25b11ca03861df0ccfaad8ce281500efede88d25e012b1e3","up":true},{"one":"7a56b4203ee1cad781b23d2a78694f63eb7dfe6d9ac24fc181e6a63516c9efa5","other":"0d48477e33d7cfc4a7660048e4b1ece9f37e9759e96e6f1f47a86de091b0ee97","up":true},{"one":"3c38aba43a15a61b680fa767353cce7e4165cbc996968f990001d7595ff243c8","other":"2d831f78c7d670e4e1f19a47c80ec2df144da210ff3aaa00ca6c4990e4da0922","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"5c3ca7f91551934bbfa4020433d7b19e40d04d9291c2b26686ef85225f872bbf","up":true},{"one":"43900b2a084097a0ddf8bf4d0375624f731bd14c85300007c87269986a12eb3b","other":"bfa0a02816da29b40215fb3c26de9360505e4c69fca55086324f0e35de7486a5","up":false},{"one":"7a1f03dc26ef21a5bd1673eb8418af7a7cbcb2ab1654882ebdcda2d1e6ad4836","other":"76933265c3d872b2d20e7a961f3f4e858afe11aee773b5caf678553e56ad3537","up":true}]} \ No newline at end of file diff --git a/swarm/network/stream/visualized_snapshot_sync_sim_test.go b/swarm/network/stream/visualized_snapshot_sync_sim_test.go deleted file mode 100644 index cf4405ec1a31..000000000000 --- a/swarm/network/stream/visualized_snapshot_sync_sim_test.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build withserver - -package stream - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -/* -The tests in this file need to be executed with - - -tags=withserver - -Also, they will stall if executed stand-alone, because they wait -for the visualization frontend to send a POST /runsim message. -*/ - -//setup the sim, evaluate nodeCount and chunkCount and create the sim -func setupSim(serviceMap map[string]simulation.ServiceFunc) (int, int, *simulation.Simulation) { - nodeCount := *nodes - chunkCount := *chunks - - if nodeCount == 0 || chunkCount == 0 { - nodeCount = 32 - chunkCount = 1 - } - - //setup the simulation with server, which means the sim won't run - //until it receives a POST /runsim from the frontend - sim := simulation.New(serviceMap).WithServer(":8888") - return nodeCount, chunkCount, sim -} - -//This test requests bogus hashes into the network -func TestNonExistingHashesWithServer(t *testing.T) { - - nodeCount, _, sim := setupSim(retrievalSimServiceMap) - defer sim.Close() - - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - panic(err) - } - - //in order to get some meaningful visualization, it is beneficial - //to define a minimum duration of this test - testDuration := 20 * time.Second - - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) (err error) { - disconnected := watchDisconnections(ctx, sim) - defer func() { - if err != nil { - if yes, ok := disconnected.Load().(bool); ok && yes { - err = errors.New("disconnect events received") - } - } - }() - - //check on the node's FileStore (netstore) - id := sim.Net.GetRandomUpNode().ID() - item, ok := sim.NodeItem(id, bucketKeyFileStore) - if !ok { - return errors.New("No filestore") - } - fileStore := item.(*storage.FileStore) - //create a bogus hash - fakeHash := storage.GenerateRandomChunk(1000).Address() - //try to retrieve it - will propagate RetrieveRequestMsg into the network - reader, _ := fileStore.Retrieve(context.TODO(), fakeHash) - if _, err := reader.Size(ctx, nil); err != nil { - log.Debug("expected error for non-existing chunk") - } - //sleep so that the frontend can have something to display - time.Sleep(testDuration) - - return nil - }) - if result.Error != nil { - sendSimTerminatedEvent(sim) - t.Fatal(result.Error) - } - - sendSimTerminatedEvent(sim) - -} - -//send a termination event to the frontend -func sendSimTerminatedEvent(sim *simulation.Simulation) { - evt := &simulations.Event{ - Type: EventTypeSimTerminated, - Control: false, - } - sim.Net.Events().Send(evt) -} - -//This test is the same as the snapshot sync test, -//but with a HTTP server -//It also sends some custom events so that the frontend -//can visualize messages like SendOfferedMsg, WantedHashesMsg, DeliveryMsg -func TestSnapshotSyncWithServer(t *testing.T) { - //t.Skip("temporarily disabled as simulations.WaitTillHealthy cannot be trusted") - - //define a wrapper object to be able to pass around data - wrapper := &netWrapper{} - - nodeCount := *nodes - chunkCount := *chunks - - if nodeCount == 0 || chunkCount == 0 { - nodeCount = 32 - chunkCount = 1 - } - - log.Info(fmt.Sprintf("Running the simulation with %d nodes and %d chunks", nodeCount, chunkCount)) - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "streamer": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - addr, netStore, delivery, clean, err := newNetStoreAndDeliveryWithRequestFunc(ctx, bucket, dummyRequestFromPeers) - if err != nil { - return nil, nil, err - } - - r := NewRegistry(addr.ID(), delivery, netStore, state.NewInmemoryStore(), &RegistryOptions{ - Retrieval: RetrievalDisabled, - Syncing: SyncingAutoSubscribe, - SyncUpdateDelay: 3 * time.Second, - }, nil) - - tr := &testRegistry{ - Registry: r, - w: wrapper, - } - - bucket.Store(bucketKeyRegistry, tr) - - cleanup = func() { - tr.Close() - clean() - } - - return tr, cleanup, nil - }, - }).WithServer(":8888") //start with the HTTP server - - nodeCount, chunkCount, sim := setupSim(simServiceMap) - defer sim.Close() - - log.Info("Initializing test config") - - conf := &synctestConfig{} - //map of discover ID to indexes of chunks expected at that ID - conf.idToChunksMap = make(map[enode.ID][]int) - //map of overlay address to discover ID - conf.addrToIDMap = make(map[string]enode.ID) - //array where the generated chunk hashes will be stored - conf.hashes = make([]storage.Address, 0) - //pass the network to the wrapper object - wrapper.setNetwork(sim.Net) - err := sim.UploadSnapshot(fmt.Sprintf("testing/snapshot_%d.json", nodeCount)) - if err != nil { - panic(err) - } - - //run the sim - result := runSim(conf, ctx, sim, chunkCount) - - //send terminated event - evt := &simulations.Event{ - Type: EventTypeSimTerminated, - Control: false, - } - go sim.Net.Events().Send(evt) - - if result.Error != nil { - panic(result.Error) - } - log.Info("Simulation ended") -} - -//testRegistry embeds registry -//it allows to replace the protocol run function -type testRegistry struct { - *Registry - w *netWrapper -} - -//Protocols replaces the protocol's run function -func (tr *testRegistry) Protocols() []p2p.Protocol { - regProto := tr.Registry.Protocols() - //set the `stream` protocol's run function with the testRegistry's one - regProto[0].Run = tr.runProto - return regProto -} - -//runProto is the new overwritten protocol's run function for this test -func (tr *testRegistry) runProto(p *p2p.Peer, rw p2p.MsgReadWriter) error { - //create a custom rw message ReadWriter - testRw := &testMsgReadWriter{ - MsgReadWriter: rw, - Peer: p, - w: tr.w, - Registry: tr.Registry, - } - //now run the actual upper layer `Registry`'s protocol function - return tr.runProtocol(p, testRw) -} - -//testMsgReadWriter is a custom rw -//it will allow us to re-use the message twice -type testMsgReadWriter struct { - *Registry - p2p.MsgReadWriter - *p2p.Peer - w *netWrapper -} - -//netWrapper wrapper object so we can pass data around -type netWrapper struct { - net *simulations.Network -} - -//set the network to the wrapper for later use (used inside the custom rw) -func (w *netWrapper) setNetwork(n *simulations.Network) { - w.net = n -} - -//get he network from the wrapper (used inside the custom rw) -func (w *netWrapper) getNetwork() *simulations.Network { - return w.net -} - -// ReadMsg reads a message from the underlying MsgReadWriter and emits a -// "message received" event -//we do this because we are interested in the Payload of the message for custom use -//in this test, but messages can only be consumed once (stream io.Reader) -func (ev *testMsgReadWriter) ReadMsg() (p2p.Msg, error) { - //read the message from the underlying rw - msg, err := ev.MsgReadWriter.ReadMsg() - if err != nil { - return msg, err - } - - //don't do anything with message codes we actually are not needing/reading - subCodes := []uint64{1, 2, 10} - found := false - for _, c := range subCodes { - if c == msg.Code { - found = true - } - } - //just return if not a msg code we are interested in - if !found { - return msg, nil - } - - //we use a io.TeeReader so that we can read the message twice - //the Payload is a io.Reader, so if we read from it, the actual protocol handler - //cannot access it anymore. - //But we need that handler to be able to consume the message as normal, - //as if we would not do anything here with that message - var buf bytes.Buffer - tee := io.TeeReader(msg.Payload, &buf) - - mcp := &p2p.Msg{ - Code: msg.Code, - Size: msg.Size, - ReceivedAt: msg.ReceivedAt, - Payload: tee, - } - //assign the copy for later use - msg.Payload = &buf - - //now let's look into the message - var wmsg protocols.WrappedMsg - err = mcp.Decode(&wmsg) - if err != nil { - log.Error(err.Error()) - return msg, err - } - //create a new message from the code - val, ok := ev.Registry.GetSpec().NewMsg(mcp.Code) - if !ok { - return msg, errors.New(fmt.Sprintf("Invalid message code: %v", msg.Code)) - } - //decode it - if err := rlp.DecodeBytes(wmsg.Payload, val); err != nil { - return msg, errors.New(fmt.Sprintf("Decoding error <= %v: %v", msg, err)) - } - //now for every message type we are interested in, create a custom event and send it - var evt *simulations.Event - switch val := val.(type) { - case *OfferedHashesMsg: - evt = &simulations.Event{ - Type: EventTypeChunkOffered, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - Data: val.Hashes, - } - case *WantedHashesMsg: - evt = &simulations.Event{ - Type: EventTypeChunkWanted, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - } - case *ChunkDeliveryMsgSyncing: - evt = &simulations.Event{ - Type: EventTypeChunkDelivered, - Node: ev.w.getNetwork().GetNode(ev.ID()), - Control: false, - Data: val.Addr.String(), - } - } - if evt != nil { - //send custom event to feed; frontend will listen to it and display - ev.w.getNetwork().Events().Send(evt) - } - return msg, nil -} diff --git a/swarm/network_test.go b/swarm/network_test.go deleted file mode 100644 index 71d4b8f16a1a..000000000000 --- a/swarm/network_test.go +++ /dev/null @@ -1,502 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swarm - -import ( - "context" - "flag" - "fmt" - "io/ioutil" - "math/rand" - "os" - "sync" - "sync/atomic" - "testing" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/api" - "github.com/ethereum/go-ethereum/swarm/network/simulation" - "github.com/ethereum/go-ethereum/swarm/storage" - colorable "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") - longrunning = flag.Bool("longrunning", false, "do run long-running tests") - waitKademlia = flag.Bool("waitkademlia", false, "wait for healthy kademlia before checking files availability") -) - -func init() { - rand.Seed(time.Now().UnixNano()) - - flag.Parse() - - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -// TestSwarmNetwork runs a series of test simulations with -// static and dynamic Swarm nodes in network simulation, by -// uploading files to every node and retrieving them. -func TestSwarmNetwork(t *testing.T) { - for _, tc := range []struct { - name string - steps []testSwarmNetworkStep - options *testSwarmNetworkOptions - disabled bool - }{ - { - name: "10_nodes", - steps: []testSwarmNetworkStep{ - { - nodeCount: 10, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 45 * time.Second, - }, - }, - { - name: "10_nodes_skip_check", - steps: []testSwarmNetworkStep{ - { - nodeCount: 10, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 45 * time.Second, - SkipCheck: true, - }, - }, - { - name: "50_nodes", - steps: []testSwarmNetworkStep{ - { - nodeCount: 50, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 3 * time.Minute, - }, - disabled: !*longrunning, - }, - { - name: "50_nodes_skip_check", - steps: []testSwarmNetworkStep{ - { - nodeCount: 50, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 3 * time.Minute, - SkipCheck: true, - }, - disabled: !*longrunning, - }, - { - name: "inc_node_count", - steps: []testSwarmNetworkStep{ - { - nodeCount: 2, - }, - { - nodeCount: 5, - }, - { - nodeCount: 10, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 90 * time.Second, - }, - disabled: !*longrunning, - }, - { - name: "dec_node_count", - steps: []testSwarmNetworkStep{ - { - nodeCount: 10, - }, - { - nodeCount: 6, - }, - { - nodeCount: 3, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 90 * time.Second, - }, - disabled: !*longrunning, - }, - { - name: "dec_inc_node_count", - steps: []testSwarmNetworkStep{ - { - nodeCount: 3, - }, - { - nodeCount: 1, - }, - { - nodeCount: 5, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 90 * time.Second, - }, - }, - { - name: "inc_dec_node_count", - steps: []testSwarmNetworkStep{ - { - nodeCount: 3, - }, - { - nodeCount: 5, - }, - { - nodeCount: 25, - }, - { - nodeCount: 10, - }, - { - nodeCount: 4, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 5 * time.Minute, - }, - disabled: !*longrunning, - }, - { - name: "inc_dec_node_count_skip_check", - steps: []testSwarmNetworkStep{ - { - nodeCount: 3, - }, - { - nodeCount: 5, - }, - { - nodeCount: 25, - }, - { - nodeCount: 10, - }, - { - nodeCount: 4, - }, - }, - options: &testSwarmNetworkOptions{ - Timeout: 5 * time.Minute, - SkipCheck: true, - }, - disabled: !*longrunning, - }, - } { - if tc.disabled { - continue - } - t.Run(tc.name, func(t *testing.T) { - testSwarmNetwork(t, tc.options, tc.steps...) - }) - } -} - -// testSwarmNetworkStep is the configuration -// for the state of the simulation network. -type testSwarmNetworkStep struct { - // number of swarm nodes that must be in the Up state - nodeCount int -} - -// file represents the file uploaded on a particular node. -type file struct { - addr storage.Address - data string - nodeID enode.ID -} - -// check represents a reference to a file that is retrieved -// from a particular node. -type check struct { - key string - nodeID enode.ID -} - -// testSwarmNetworkOptions contains optional parameters for running -// testSwarmNetwork. -type testSwarmNetworkOptions struct { - Timeout time.Duration - SkipCheck bool -} - -// testSwarmNetwork is a helper function used for testing different -// static and dynamic Swarm network simulations. -// It is responsible for: -// - Setting up a Swarm network simulation, and updates the number of nodes within the network on every step according to steps. -// - Uploading a unique file to every node on every step. -// - May wait for Kademlia on every node to be healthy. -// - Checking if a file is retrievable from all nodes. -func testSwarmNetwork(t *testing.T, o *testSwarmNetworkOptions, steps ...testSwarmNetworkStep) { - - if o == nil { - o = new(testSwarmNetworkOptions) - } - - sim := simulation.New(map[string]simulation.ServiceFunc{ - "swarm": func(ctx *adapters.ServiceContext, bucket *sync.Map) (s node.Service, cleanup func(), err error) { - config := api.NewConfig() - - dir, err := ioutil.TempDir("", "swarm-network-test-node") - if err != nil { - return nil, nil, err - } - cleanup = func() { - err := os.RemoveAll(dir) - if err != nil { - log.Error("cleaning up swarm temp dir", "err", err) - } - } - - config.Path = dir - - privkey, err := crypto.GenerateKey() - if err != nil { - return nil, cleanup, err - } - - config.Init(privkey) - config.DeliverySkipCheck = o.SkipCheck - config.Port = "" - - swarm, err := NewSwarm(config, nil) - if err != nil { - return nil, cleanup, err - } - bucket.Store(simulation.BucketKeyKademlia, swarm.bzz.Hive.Kademlia) - log.Info("new swarm", "bzzKey", config.BzzKey, "baseAddr", fmt.Sprintf("%x", swarm.bzz.BaseAddr())) - return swarm, cleanup, nil - }, - }) - defer sim.Close() - - ctx := context.Background() - if o.Timeout > 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithTimeout(ctx, o.Timeout) - defer cancel() - } - - files := make([]file, 0) - - for i, step := range steps { - log.Debug("test sync step", "n", i+1, "nodes", step.nodeCount) - - change := step.nodeCount - len(sim.UpNodeIDs()) - - if change > 0 { - _, err := sim.AddNodesAndConnectChain(change) - if err != nil { - t.Fatal(err) - } - } else if change < 0 { - _, err := sim.StopRandomNodes(-change) - if err != nil { - t.Fatal(err) - } - } else { - t.Logf("step %v: no change in nodes", i) - continue - } - - var checkStatusM sync.Map - var nodeStatusM sync.Map - var totalFoundCount uint64 - - result := sim.Run(ctx, func(ctx context.Context, sim *simulation.Simulation) error { - nodeIDs := sim.UpNodeIDs() - rand.Shuffle(len(nodeIDs), func(i, j int) { - nodeIDs[i], nodeIDs[j] = nodeIDs[j], nodeIDs[i] - }) - for _, id := range nodeIDs { - key, data, err := uploadFile(sim.Service("swarm", id).(*Swarm)) - if err != nil { - return err - } - log.Trace("file uploaded", "node", id, "key", key.String()) - files = append(files, file{ - addr: key, - data: data, - nodeID: id, - }) - } - - if *waitKademlia { - if _, err := sim.WaitTillHealthy(ctx); err != nil { - return err - } - } - - // File retrieval check is repeated until all uploaded files are retrieved from all nodes - // or until the timeout is reached. - for { - if retrieve(sim, files, &checkStatusM, &nodeStatusM, &totalFoundCount) == 0 { - return nil - } - } - }) - - if result.Error != nil { - t.Fatal(result.Error) - } - log.Debug("done: test sync step", "n", i+1, "nodes", step.nodeCount) - } -} - -// uploadFile, uploads a short file to the swarm instance -// using the api.Put method. -func uploadFile(swarm *Swarm) (storage.Address, string, error) { - b := make([]byte, 8) - _, err := rand.Read(b) - if err != nil { - return nil, "", err - } - // File data is very short, but it is ensured that its - // uniqueness is very certain. - data := fmt.Sprintf("test content %s %x", time.Now().Round(0), b) - ctx := context.TODO() - k, wait, err := swarm.api.Put(ctx, data, "text/plain", false) - if err != nil { - return nil, "", err - } - if wait != nil { - err = wait(ctx) - } - return k, data, err -} - -// retrieve is the function that is used for checking the availability of -// uploaded files in testSwarmNetwork test helper function. -func retrieve( - sim *simulation.Simulation, - files []file, - checkStatusM *sync.Map, - nodeStatusM *sync.Map, - totalFoundCount *uint64, -) (missing uint64) { - rand.Shuffle(len(files), func(i, j int) { - files[i], files[j] = files[j], files[i] - }) - - var totalWg sync.WaitGroup - errc := make(chan error) - - nodeIDs := sim.UpNodeIDs() - - totalCheckCount := len(nodeIDs) * len(files) - - for _, id := range nodeIDs { - if _, ok := nodeStatusM.Load(id); ok { - continue - } - start := time.Now() - var checkCount uint64 - var foundCount uint64 - - totalWg.Add(1) - - var wg sync.WaitGroup - - swarm := sim.Service("swarm", id).(*Swarm) - for _, f := range files { - - checkKey := check{ - key: f.addr.String(), - nodeID: id, - } - if n, ok := checkStatusM.Load(checkKey); ok && n.(int) == 0 { - continue - } - - checkCount++ - wg.Add(1) - go func(f file, id enode.ID) { - defer wg.Done() - - log.Debug("api get: check file", "node", id.String(), "key", f.addr.String(), "total files found", atomic.LoadUint64(totalFoundCount)) - - r, _, _, _, err := swarm.api.Get(context.TODO(), api.NOOPDecrypt, f.addr, "/") - if err != nil { - errc <- fmt.Errorf("api get: node %s, key %s, kademlia %s: %v", id, f.addr, swarm.bzz.Hive, err) - return - } - d, err := ioutil.ReadAll(r) - if err != nil { - errc <- fmt.Errorf("api get: read response: node %s, key %s: kademlia %s: %v", id, f.addr, swarm.bzz.Hive, err) - return - } - data := string(d) - if data != f.data { - errc <- fmt.Errorf("file contend missmatch: node %s, key %s, expected %q, got %q", id, f.addr, f.data, data) - return - } - checkStatusM.Store(checkKey, 0) - atomic.AddUint64(&foundCount, 1) - log.Info("api get: file found", "node", id.String(), "key", f.addr.String(), "content", data, "files found", atomic.LoadUint64(&foundCount)) - }(f, id) - } - - go func(id enode.ID) { - defer totalWg.Done() - wg.Wait() - - atomic.AddUint64(totalFoundCount, foundCount) - - if foundCount == checkCount { - log.Info("all files are found for node", "id", id.String(), "duration", time.Since(start)) - nodeStatusM.Store(id, 0) - return - } - log.Debug("files missing for node", "id", id.String(), "check", checkCount, "found", foundCount) - }(id) - - } - - go func() { - totalWg.Wait() - close(errc) - }() - - var errCount int - for err := range errc { - if err != nil { - errCount++ - } - log.Warn(err.Error()) - } - - log.Info("check stats", "total check count", totalCheckCount, "total files found", atomic.LoadUint64(totalFoundCount), "total errors", errCount) - - return uint64(totalCheckCount) - atomic.LoadUint64(totalFoundCount) -} diff --git a/swarm/pot/address.go b/swarm/pot/address.go deleted file mode 100644 index 91cada2e8873..000000000000 --- a/swarm/pot/address.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package pot see doc.go -package pot - -import ( - "encoding/binary" - "fmt" - "math/rand" - "strconv" - "strings" - - "github.com/ethereum/go-ethereum/common" -) - -var ( - zerosBin = Address{}.Bin() -) - -// Address is an alias for common.Hash -type Address common.Hash - -// NewAddressFromBytes constructs an Address from a byte slice -func NewAddressFromBytes(b []byte) Address { - h := common.Hash{} - copy(h[:], b) - return Address(h) -} - -func (a Address) String() string { - return fmt.Sprintf("%x", a[:]) -} - -// MarshalJSON Address serialisation -func (a *Address) MarshalJSON() (out []byte, err error) { - return []byte(`"` + a.String() + `"`), nil -} - -// UnmarshalJSON Address deserialisation -func (a *Address) UnmarshalJSON(value []byte) error { - *a = Address(common.HexToHash(string(value[1 : len(value)-1]))) - return nil -} - -// Bin returns the string form of the binary representation of an address (only first 8 bits) -func (a Address) Bin() string { - return ToBin(a[:]) -} - -// ToBin converts a byteslice to the string binary representation -func ToBin(a []byte) string { - var bs []string - for _, b := range a { - bs = append(bs, fmt.Sprintf("%08b", b)) - } - return strings.Join(bs, "") -} - -// Bytes returns the Address as a byte slice -func (a Address) Bytes() []byte { - return a[:] -} - -// ProxCmp compares the distances a->target and b->target. -// Returns -1 if a is closer to target, 1 if b is closer to target -// and 0 if they are equal. -func ProxCmp(a, x, y interface{}) int { - return proxCmp(ToBytes(a), ToBytes(x), ToBytes(y)) -} - -func proxCmp(a, x, y []byte) int { - for i := range a { - dx := x[i] ^ a[i] - dy := y[i] ^ a[i] - if dx > dy { - return 1 - } else if dx < dy { - return -1 - } - } - return 0 -} - -// RandomAddressAt (address, prox) generates a random address -// at proximity order prox relative to address -// if prox is negative a random address is generated -func RandomAddressAt(self Address, prox int) (addr Address) { - addr = self - pos := -1 - if prox >= 0 { - pos = prox / 8 - trans := prox % 8 - transbytea := byte(0) - for j := 0; j <= trans; j++ { - transbytea |= 1 << uint8(7-j) - } - flipbyte := byte(1 << uint8(7-trans)) - transbyteb := transbytea ^ byte(255) - randbyte := byte(rand.Intn(255)) - addr[pos] = ((addr[pos] & transbytea) ^ flipbyte) | randbyte&transbyteb - } - for i := pos + 1; i < len(addr); i++ { - addr[i] = byte(rand.Intn(255)) - } - - return -} - -// RandomAddress generates a random address -func RandomAddress() Address { - return RandomAddressAt(Address{}, -1) -} - -// NewAddressFromString creates a byte slice from a string in binary representation -func NewAddressFromString(s string) []byte { - ha := [32]byte{} - - t := s + zerosBin[:len(zerosBin)-len(s)] - for i := 0; i < 4; i++ { - n, err := strconv.ParseUint(t[i*64:(i+1)*64], 2, 64) - if err != nil { - panic("wrong format: " + err.Error()) - } - binary.BigEndian.PutUint64(ha[i*8:(i+1)*8], n) - } - return ha[:] -} - -// BytesAddress is an interface for elements addressable by a byte slice -type BytesAddress interface { - Address() []byte -} - -// ToBytes turns the Val into bytes -func ToBytes(v Val) []byte { - if v == nil { - return nil - } - b, ok := v.([]byte) - if !ok { - ba, ok := v.(BytesAddress) - if !ok { - panic(fmt.Sprintf("unsupported value type %T", v)) - } - b = ba.Address() - } - return b -} - -// DefaultPof returns a proximity order comparison operator function -func DefaultPof(max int) func(one, other Val, pos int) (int, bool) { - return func(one, other Val, pos int) (int, bool) { - po, eq := proximityOrder(ToBytes(one), ToBytes(other), pos) - if po >= max { - eq = true - po = max - } - return po, eq - } -} - -// proximityOrder returns two parameters: -// 1. relative proximity order of the arguments one & other; -// 2. boolean indicating whether the full match occurred (one == other). -func proximityOrder(one, other []byte, pos int) (int, bool) { - for i := pos / 8; i < len(one); i++ { - if one[i] == other[i] { - continue - } - oxo := one[i] ^ other[i] - start := 0 - if i == pos/8 { - start = pos % 8 - } - for j := start; j < 8; j++ { - if (oxo>>uint8(7-j))&0x01 != 0 { - return i*8 + j, false - } - } - } - return len(one) * 8, true -} - -// Label displays the node's key in binary format -func Label(v Val) string { - if v == nil { - return "" - } - if s, ok := v.(fmt.Stringer); ok { - return s.String() - } - if b, ok := v.([]byte); ok { - return ToBin(b) - } - panic(fmt.Sprintf("unsupported value type %T", v)) -} diff --git a/swarm/pot/doc.go b/swarm/pot/doc.go deleted file mode 100644 index cb6faea57b3f..000000000000 --- a/swarm/pot/doc.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Package pot (proximity order tree) implements a container similar to a binary tree. -The elements are generic Val interface types. - -Each fork in the trie is itself a value. Values of the subtree contained under -a node all share the same order when compared to other elements in the tree. - -Example of proximity order is the length of the common prefix over bitvectors. -(which is equivalent to the reverse rank of order of magnitude of the MSB first X -OR distance over finite set of integers). - -Methods take a comparison operator (pof, proximity order function) to compare two -value types. The default pof assumes Val to be or project to a byte slice using -the reverse rank on the MSB first XOR logarithmic distance. - -If the address space if limited, equality is defined as the maximum proximity order. - -The container offers applicative (functional) style methods on PO trees: -* adding/removing en element -* swap (value based add/remove) -* merging two PO trees (union) - -as well as iterator accessors that respect proximity order - -When synchronicity of membership if not 100% requirement (e.g. used as a database -of network connections), applicative structures have the advantage that nodes -are immutable therefore manipulation does not need locking allowing for -concurrent retrievals. -For the use case where the entire container is supposed to allow changes by -concurrent routines, - -Pot -* retrieval, insertion and deletion by key involves log(n) pointer lookups -* for any item retrieval (defined as common prefix on the binary key) -* provide synchronous iterators respecting proximity ordering wrt any item -* provide asynchronous iterator (for parallel execution of operations) over n items -* allows cheap iteration over ranges -* asymmetric concurrent merge (union) - -Note: -* as is, union only makes sense for set representations since which of two values -with equal keys survives is random -* intersection is not implemented -* simple get accessor is not implemented (but derivable from EachNeighbour) - -Pinned value on the node implies no need to copy keys of the item type. - -Note that -* the same set of values allows for a large number of alternative -POT representations. -* values on the top are accessed faster than lower ones and the steps needed to -retrieve items has a logarithmic distribution. - -As a consequence one can organise the tree so that items that need faster access -are torwards the top. In particular for any subset where popularity has a power -distriution that is independent of proximity order (content addressed storage of -chunks), it is in principle possible to create a pot where the steps needed to -access an item is inversely proportional to its popularity. -Such organisation is not implemented as yet. - -TODO: -* overwrite-style merge -* intersection -* access frequency based optimisations - -*/ -package pot diff --git a/swarm/pot/pot.go b/swarm/pot/pot.go deleted file mode 100644 index 7e3967f3f974..000000000000 --- a/swarm/pot/pot.go +++ /dev/null @@ -1,787 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package pot see doc.go -package pot - -import ( - "fmt" - "sync" -) - -const ( - maxkeylen = 256 -) - -// Pot is the node type (same for root, branching node and leaf) -type Pot struct { - pin Val - bins []*Pot - size int - po int -} - -// Val is the element type for Pots -type Val interface{} - -// Pof is the proximity order comparison operator function -type Pof func(Val, Val, int) (int, bool) - -// NewPot constructor. Requires a value of type Val to pin -// and po to point to a span in the Val key -// The pinned item counts towards the size -func NewPot(v Val, po int) *Pot { - var size int - if v != nil { - size++ - } - return &Pot{ - pin: v, - po: po, - size: size, - } -} - -// Pin returns the pinned element (key) of the Pot -func (t *Pot) Pin() Val { - return t.pin -} - -// Size returns the number of values in the Pot -func (t *Pot) Size() int { - if t == nil { - return 0 - } - return t.size -} - -// Add inserts a new value into the Pot and -// returns the proximity order of v and a boolean -// indicating if the item was found -// Add called on (t, v) returns a new Pot that contains all the elements of t -// plus the value v, using the applicative add -// the second return value is the proximity order of the inserted element -// the third is boolean indicating if the item was found -func Add(t *Pot, val Val, pof Pof) (*Pot, int, bool) { - return add(t, val, pof) -} - -func (t *Pot) clone() *Pot { - return &Pot{ - pin: t.pin, - size: t.size, - po: t.po, - bins: t.bins, - } -} - -func add(t *Pot, val Val, pof Pof) (*Pot, int, bool) { - var r *Pot - if t == nil || t.pin == nil { - r = t.clone() - r.pin = val - r.size++ - return r, 0, false - } - po, found := pof(t.pin, val, t.po) - if found { - r = t.clone() - r.pin = val - return r, po, true - } - - var p *Pot - var i, j int - size := t.size - for i < len(t.bins) { - n := t.bins[i] - if n.po == po { - p, _, found = add(n, val, pof) - if !found { - size++ - } - j++ - break - } - if n.po > po { - break - } - i++ - j++ - } - if p == nil { - size++ - p = &Pot{ - pin: val, - size: 1, - po: po, - } - } - - bins := append([]*Pot{}, t.bins[:i]...) - bins = append(bins, p) - bins = append(bins, t.bins[j:]...) - r = &Pot{ - pin: t.pin, - size: size, - po: t.po, - bins: bins, - } - - return r, po, found -} - -// Remove deletes element v from the Pot t and returns three parameters: -// 1. new Pot that contains all the elements of t minus the element v; -// 2. proximity order of the removed element v; -// 3. boolean indicating whether the item was found. -func Remove(t *Pot, v Val, pof Pof) (*Pot, int, bool) { - return remove(t, v, pof) -} - -func remove(t *Pot, val Val, pof Pof) (r *Pot, po int, found bool) { - size := t.size - po, found = pof(t.pin, val, t.po) - if found { - size-- - if size == 0 { - return &Pot{}, po, true - } - i := len(t.bins) - 1 - last := t.bins[i] - r = &Pot{ - pin: last.pin, - bins: append(t.bins[:i], last.bins...), - size: size, - po: t.po, - } - return r, t.po, true - } - - var p *Pot - var i, j int - for i < len(t.bins) { - n := t.bins[i] - if n.po == po { - p, po, found = remove(n, val, pof) - if found { - size-- - } - j++ - break - } - if n.po > po { - return t, po, false - } - i++ - j++ - } - bins := t.bins[:i] - if p != nil && p.pin != nil { - bins = append(bins, p) - } - bins = append(bins, t.bins[j:]...) - r = &Pot{ - pin: t.pin, - size: size, - po: t.po, - bins: bins, - } - return r, po, found -} - -// Swap called on (k, f) looks up the item at k -// and applies the function f to the value v at k or to nil if the item is not found -// if f(v) returns nil, the element is removed -// if f(v) returns v' <> v then v' is inserted into the Pot -// if (v) == v the Pot is not changed -// it panics if Pof(f(v), k) show that v' and v are not key-equal -func Swap(t *Pot, k Val, pof Pof, f func(v Val) Val) (r *Pot, po int, found bool, change bool) { - var val Val - if t.pin == nil { - val = f(nil) - if val == nil { - return nil, 0, false, false - } - return NewPot(val, t.po), 0, false, true - } - size := t.size - po, found = pof(k, t.pin, t.po) - if found { - val = f(t.pin) - // remove element - if val == nil { - size-- - if size == 0 { - r = &Pot{ - po: t.po, - } - // return empty pot - return r, po, true, true - } - // actually remove pin, by merging last bin - i := len(t.bins) - 1 - last := t.bins[i] - r = &Pot{ - pin: last.pin, - bins: append(t.bins[:i], last.bins...), - size: size, - po: t.po, - } - return r, po, true, true - } - // element found but no change - if val == t.pin { - return t, po, true, false - } - // actually modify the pinned element, but no change in structure - r = t.clone() - r.pin = val - return r, po, true, true - } - - // recursive step - var p *Pot - n, i := t.getPos(po) - if n != nil { - p, po, found, change = Swap(n, k, pof, f) - // recursive no change - if !change { - return t, po, found, false - } - // recursive change - bins := append([]*Pot{}, t.bins[:i]...) - if p.size == 0 { - size-- - } else { - size += p.size - n.size - bins = append(bins, p) - } - i++ - if i < len(t.bins) { - bins = append(bins, t.bins[i:]...) - } - r = t.clone() - r.bins = bins - r.size = size - return r, po, found, true - } - // key does not exist - val = f(nil) - if val == nil { - // and it should not be created - return t, po, false, false - } - // otherwise check val if equal to k - if _, eq := pof(val, k, po); !eq { - panic("invalid value") - } - /// - size++ - p = &Pot{ - pin: val, - size: 1, - po: po, - } - - bins := append([]*Pot{}, t.bins[:i]...) - bins = append(bins, p) - if i < len(t.bins) { - bins = append(bins, t.bins[i:]...) - } - r = t.clone() - r.bins = bins - r.size = size - return r, po, found, true -} - -// Union called on (t0, t1, pof) returns the union of t0 and t1 -// calculates the union using the applicative union -// the second return value is the number of common elements -func Union(t0, t1 *Pot, pof Pof) (*Pot, int) { - return union(t0, t1, pof) -} - -func union(t0, t1 *Pot, pof Pof) (*Pot, int) { - if t0 == nil || t0.size == 0 { - return t1, 0 - } - if t1 == nil || t1.size == 0 { - return t0, 0 - } - var pin Val - var bins []*Pot - var mis []int - wg := &sync.WaitGroup{} - wg.Add(1) - pin0 := t0.pin - pin1 := t1.pin - bins0 := t0.bins - bins1 := t1.bins - var i0, i1 int - var common int - - po, eq := pof(pin0, pin1, 0) - - for { - l0 := len(bins0) - l1 := len(bins1) - var n0, n1 *Pot - var p0, p1 int - var a0, a1 bool - - for { - - if !a0 && i0 < l0 && bins0[i0] != nil && bins0[i0].po <= po { - n0 = bins0[i0] - p0 = n0.po - a0 = p0 == po - } else { - a0 = true - } - - if !a1 && i1 < l1 && bins1[i1] != nil && bins1[i1].po <= po { - n1 = bins1[i1] - p1 = n1.po - a1 = p1 == po - } else { - a1 = true - } - if a0 && a1 { - break - } - - switch { - case (p0 < p1 || a1) && !a0: - bins = append(bins, n0) - i0++ - n0 = nil - case (p1 < p0 || a0) && !a1: - bins = append(bins, n1) - i1++ - n1 = nil - case p1 < po: - bl := len(bins) - bins = append(bins, nil) - ml := len(mis) - mis = append(mis, 0) - // wg.Add(1) - // go func(b, m int, m0, m1 *Pot) { - // defer wg.Done() - // bins[b], mis[m] = union(m0, m1, pof) - // }(bl, ml, n0, n1) - bins[bl], mis[ml] = union(n0, n1, pof) - i0++ - i1++ - n0 = nil - n1 = nil - } - } - - if eq { - common++ - pin = pin1 - break - } - - i := i0 - if len(bins0) > i && bins0[i].po == po { - i++ - } - var size0 int - for _, n := range bins0[i:] { - size0 += n.size - } - np := &Pot{ - pin: pin0, - bins: bins0[i:], - size: size0 + 1, - po: po, - } - - bins2 := []*Pot{np} - if n0 == nil { - pin0 = pin1 - po = maxkeylen + 1 - eq = true - common-- - - } else { - bins2 = append(bins2, n0.bins...) - pin0 = pin1 - pin1 = n0.pin - po, eq = pof(pin0, pin1, n0.po) - - } - bins0 = bins1 - bins1 = bins2 - i0 = i1 - i1 = 0 - - } - - wg.Done() - wg.Wait() - for _, c := range mis { - common += c - } - n := &Pot{ - pin: pin, - bins: bins, - size: t0.size + t1.size - common, - po: t0.po, - } - return n, common -} - -// Each is a synchronous iterator over the elements of pot with function f. -func (t *Pot) Each(f func(Val) bool) bool { - return t.each(f) -} - -// each is a synchronous iterator over the elements of pot with function f. -// the iteration ends if the function return false or there are no more elements. -func (t *Pot) each(f func(Val) bool) bool { - if t == nil || t.size == 0 { - return false - } - for _, n := range t.bins { - if !n.each(f) { - return false - } - } - return f(t.pin) -} - -// eachFrom is a synchronous iterator over the elements of pot with function f, -// starting from certain proximity order po, which is passed as a second parameter. -// the iteration ends if the function return false or there are no more elements. -func (t *Pot) eachFrom(f func(Val) bool, po int) bool { - if t == nil || t.size == 0 { - return false - } - _, beg := t.getPos(po) - for i := beg; i < len(t.bins); i++ { - if !t.bins[i].each(f) { - return false - } - } - return f(t.pin) -} - -// EachBin iterates over bins of the pivot node and offers iterators to the caller on each -// subtree passing the proximity order and the size -// the iteration continues until the function's return value is false -// or there are no more subtries -func (t *Pot) EachBin(val Val, pof Pof, po int, f func(int, int, func(func(val Val) bool) bool) bool) { - t.eachBin(val, pof, po, f) -} - -func (t *Pot) eachBin(val Val, pof Pof, po int, f func(int, int, func(func(val Val) bool) bool) bool) { - if t == nil || t.size == 0 { - return - } - spr, _ := pof(t.pin, val, t.po) - _, lim := t.getPos(spr) - var size int - var n *Pot - for i := 0; i < lim; i++ { - n = t.bins[i] - size += n.size - if n.po < po { - continue - } - if !f(n.po, n.size, n.each) { - return - } - } - if lim == len(t.bins) { - if spr >= po { - f(spr, 1, func(g func(Val) bool) bool { - return g(t.pin) - }) - } - return - } - - n = t.bins[lim] - - spo := spr - if n.po == spr { - spo++ - size += n.size - } - if spr >= po { - if !f(spr, t.size-size, func(g func(Val) bool) bool { - return t.eachFrom(func(v Val) bool { - return g(v) - }, spo) - }) { - return - } - } - if n.po == spr { - n.eachBin(val, pof, po, f) - } - -} - -// EachNeighbour is a synchronous iterator over neighbours of any target val -// the order of elements retrieved reflect proximity order to the target -// TODO: add maximum proxbin to start range of iteration -func (t *Pot) EachNeighbour(val Val, pof Pof, f func(Val, int) bool) bool { - return t.eachNeighbour(val, pof, f) -} - -func (t *Pot) eachNeighbour(val Val, pof Pof, f func(Val, int) bool) bool { - if t == nil || t.size == 0 { - return false - } - var next bool - l := len(t.bins) - var n *Pot - ir := l - il := l - po, eq := pof(t.pin, val, t.po) - if !eq { - n, il = t.getPos(po) - if n != nil { - next = n.eachNeighbour(val, pof, f) - if !next { - return false - } - ir = il - } else { - ir = il - 1 - } - } - - next = f(t.pin, po) - if !next { - return false - } - - for i := l - 1; i > ir; i-- { - next = t.bins[i].each(func(v Val) bool { - return f(v, po) - }) - if !next { - return false - } - } - - for i := il - 1; i >= 0; i-- { - n := t.bins[i] - next = n.each(func(v Val) bool { - return f(v, n.po) - }) - if !next { - return false - } - } - return true -} - -// EachNeighbourAsync called on (val, max, maxPos, f, wait) is an asynchronous iterator -// over elements not closer than maxPos wrt val. -// val does not need to be match an element of the Pot, but if it does, and -// maxPos is keylength than it is included in the iteration -// Calls to f are parallelised, the order of calls is undefined. -// proximity order is respected in that there is no element in the Pot that -// is not visited if a closer node is visited. -// The iteration is finished when max number of nearest nodes is visited -// or if the entire there are no nodes not closer than maxPos that is not visited -// if wait is true, the iterator returns only if all calls to f are finished -// TODO: implement minPos for proper prox range iteration -func (t *Pot) EachNeighbourAsync(val Val, pof Pof, max int, maxPos int, f func(Val, int), wait bool) { - if max > t.size { - max = t.size - } - var wg *sync.WaitGroup - if wait { - wg = &sync.WaitGroup{} - } - t.eachNeighbourAsync(val, pof, max, maxPos, f, wg) - if wait { - wg.Wait() - } -} - -func (t *Pot) eachNeighbourAsync(val Val, pof Pof, max int, maxPos int, f func(Val, int), wg *sync.WaitGroup) (extra int) { - l := len(t.bins) - - po, eq := pof(t.pin, val, t.po) - - // if po is too close, set the pivot branch (pom) to maxPos - pom := po - if pom > maxPos { - pom = maxPos - } - n, il := t.getPos(pom) - ir := il - // if pivot branch exists and po is not too close, iterate on the pivot branch - if pom == po { - if n != nil { - - m := n.size - if max < m { - m = max - } - max -= m - - extra = n.eachNeighbourAsync(val, pof, m, maxPos, f, wg) - - } else { - if !eq { - ir-- - } - } - } else { - extra++ - max-- - if n != nil { - il++ - } - // before checking max, add up the extra elements - // on the close branches that are skipped (if po is too close) - for i := l - 1; i >= il; i-- { - s := t.bins[i] - m := s.size - if max < m { - m = max - } - max -= m - extra += m - } - } - - var m int - if pom == po { - - m, max, extra = need(1, max, extra) - if m <= 0 { - return - } - - if wg != nil { - wg.Add(1) - } - go func() { - if wg != nil { - defer wg.Done() - } - f(t.pin, po) - }() - - // otherwise iterats - for i := l - 1; i > ir; i-- { - n := t.bins[i] - - m, max, extra = need(n.size, max, extra) - if m <= 0 { - return - } - - if wg != nil { - wg.Add(m) - } - go func(pn *Pot, pm int) { - pn.each(func(v Val) bool { - if wg != nil { - defer wg.Done() - } - f(v, po) - pm-- - return pm > 0 - }) - }(n, m) - - } - } - - // iterate branches that are farther tham pom with their own po - for i := il - 1; i >= 0; i-- { - n := t.bins[i] - // the first time max is less than the size of the entire branch - // wait for the pivot thread to release extra elements - m, max, extra = need(n.size, max, extra) - if m <= 0 { - return - } - - if wg != nil { - wg.Add(m) - } - go func(pn *Pot, pm int) { - pn.each(func(v Val) bool { - if wg != nil { - defer wg.Done() - } - f(v, pn.po) - pm-- - return pm > 0 - }) - }(n, m) - - } - return max + extra -} - -// getPos called on (n) returns the forking node at PO n and its index if it exists -// otherwise nil -// caller is supposed to hold the lock -func (t *Pot) getPos(po int) (n *Pot, i int) { - for i, n = range t.bins { - if po > n.po { - continue - } - if po < n.po { - return nil, i - } - return n, i - } - return nil, len(t.bins) -} - -// need called on (m, max, extra) uses max m out of extra, and then max -// if needed, returns the adjusted counts -func need(m, max, extra int) (int, int, int) { - if m <= extra { - return m, max, extra - m - } - max += extra - m - if max <= 0 { - return m + max, 0, 0 - } - return m, max, 0 -} - -func (t *Pot) String() string { - return t.sstring("") -} - -func (t *Pot) sstring(indent string) string { - if t == nil { - return "" - } - var s string - indent += " " - s += fmt.Sprintf("%v%v (%v) %v \n", indent, t.pin, t.po, t.size) - for _, n := range t.bins { - s += fmt.Sprintf("%v%v\n", indent, n.sstring(indent)) - } - return s -} diff --git a/swarm/pot/pot_test.go b/swarm/pot/pot_test.go deleted file mode 100644 index 83d604919fc5..000000000000 --- a/swarm/pot/pot_test.go +++ /dev/null @@ -1,741 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package pot - -import ( - "errors" - "fmt" - "math/rand" - "runtime" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -const ( - maxEachNeighbourTests = 420 - maxEachNeighbour = 420 - maxSwap = 420 - maxSwapTests = 420 -) - -// func init() { -// log.Root().SetHandler(log.LvlFilterHandler(log.LvlTrace, log.StreamHandler(os.Stderr, log.TerminalFormat(false)))) -// } - -type testAddr struct { - a []byte - i int -} - -func newTestAddr(s string, i int) *testAddr { - return &testAddr{NewAddressFromString(s), i} -} - -func (a *testAddr) Address() []byte { - return a.a -} - -func (a *testAddr) String() string { - return Label(a.a) -} - -func randomTestAddr(n int, i int) *testAddr { - v := RandomAddress().Bin()[:n] - return newTestAddr(v, i) -} - -func randomtestAddr(n int, i int) *testAddr { - v := RandomAddress().Bin()[:n] - return newTestAddr(v, i) -} - -func indexes(t *Pot) (i []int) { - t.Each(func(v Val) bool { - a := v.(*testAddr) - i = append(i, a.i) - return true - }) - return i -} - -func testAdd(t *Pot, pof Pof, j int, values ...string) (_ *Pot, n int, f bool) { - for i, val := range values { - t, n, f = Add(t, newTestAddr(val, i+j), pof) - } - return t, n, f -} - -// removing non-existing element from pot -func TestPotRemoveNonExisting(t *testing.T) { - pof := DefaultPof(8) - n := NewPot(newTestAddr("00111100", 0), 0) - n, _, _ = Remove(n, newTestAddr("00000101", 0), pof) - exp := "00111100" - got := Label(n.Pin()) - if got[:8] != exp { - t.Fatalf("incorrect pinned value. Expected %v, got %v", exp, got[:8]) - } -} - -// this test creates hierarchical pot tree, and therefore any child node will have -// child_po = parent_po + 1. -// then removes a node from the middle of the tree. -func TestPotRemoveSameBin(t *testing.T) { - pof := DefaultPof(8) - n := NewPot(newTestAddr("11111111", 0), 0) - n, _, _ = testAdd(n, pof, 1, "00000000", "01000000", "01100000", "01110000", "01111000") - n, _, _ = Remove(n, newTestAddr("01110000", 0), pof) - inds := indexes(n) - goti := n.Size() - expi := 5 - if goti != expi { - t.Fatalf("incorrect number of elements in Pot. Expected %v, got %v", expi, goti) - } - inds = indexes(n) - got := fmt.Sprintf("%v", inds) - exp := "[5 3 2 1 0]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } -} - -// this test creates a flat pot tree (all the elements are leafs of one root), -// and therefore they all have the same po. -// then removes an arbitrary element from the pot. -func TestPotRemoveDifferentBins(t *testing.T) { - pof := DefaultPof(8) - n := NewPot(newTestAddr("11111111", 0), 0) - n, _, _ = testAdd(n, pof, 1, "00000000", "10000000", "11000000", "11100000", "11110000") - n, _, _ = Remove(n, newTestAddr("11100000", 0), pof) - inds := indexes(n) - goti := n.Size() - expi := 5 - if goti != expi { - t.Fatalf("incorrect number of elements in Pot. Expected %v, got %v", expi, goti) - } - inds = indexes(n) - got := fmt.Sprintf("%v", inds) - exp := "[1 2 3 5 0]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } - n, _, _ = testAdd(n, pof, 4, "11100000") - inds = indexes(n) - got = fmt.Sprintf("%v", inds) - exp = "[1 2 3 4 5 0]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } -} - -func TestPotAdd(t *testing.T) { - pof := DefaultPof(8) - n := NewPot(newTestAddr("00111100", 0), 0) - // Pin set correctly - exp := "00111100" - got := Label(n.Pin())[:8] - if got != exp { - t.Fatalf("incorrect pinned value. Expected %v, got %v", exp, got) - } - // check size - goti := n.Size() - expi := 1 - if goti != expi { - t.Fatalf("incorrect number of elements in Pot. Expected %v, got %v", expi, goti) - } - - n, _, _ = testAdd(n, pof, 1, "01111100", "00111100", "01111100", "00011100") - // check size - goti = n.Size() - expi = 3 - if goti != expi { - t.Fatalf("incorrect number of elements in Pot. Expected %v, got %v", expi, goti) - } - inds := indexes(n) - got = fmt.Sprintf("%v", inds) - exp = "[3 4 2]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } -} - -func TestPotRemove(t *testing.T) { - pof := DefaultPof(8) - n := NewPot(newTestAddr("00111100", 0), 0) - n, _, _ = Remove(n, newTestAddr("00111100", 0), pof) - exp := "" - got := Label(n.Pin()) - if got != exp { - t.Fatalf("incorrect pinned value. Expected %v, got %v", exp, got) - } - n, _, _ = testAdd(n, pof, 1, "00000000", "01111100", "00111100", "00011100") - n, _, _ = Remove(n, newTestAddr("00111100", 0), pof) - goti := n.Size() - expi := 3 - if goti != expi { - t.Fatalf("incorrect number of elements in Pot. Expected %v, got %v", expi, goti) - } - inds := indexes(n) - got = fmt.Sprintf("%v", inds) - exp = "[2 4 1]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } - n, _, _ = Remove(n, newTestAddr("00111100", 0), pof) // remove again same element - inds = indexes(n) - got = fmt.Sprintf("%v", inds) - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } - n, _, _ = Remove(n, newTestAddr("00000000", 0), pof) // remove the first element - inds = indexes(n) - got = fmt.Sprintf("%v", inds) - exp = "[2 4]" - if got != exp { - t.Fatalf("incorrect indexes in iteration over Pot. Expected %v, got %v", exp, got) - } -} - -func TestPotSwap(t *testing.T) { - for i := 0; i < maxSwapTests; i++ { - alen := maxkeylen - pof := DefaultPof(alen) - max := rand.Intn(maxSwap) - - n := NewPot(nil, 0) - var m []*testAddr - var found bool - for j := 0; j < 2*max; { - v := randomtestAddr(alen, j) - n, _, found = Add(n, v, pof) - if !found { - m = append(m, v) - j++ - } - } - k := make(map[string]*testAddr) - for j := 0; j < max; { - v := randomtestAddr(alen, 1) - _, found := k[Label(v)] - if !found { - k[Label(v)] = v - j++ - } - } - for _, v := range k { - m = append(m, v) - } - f := func(v Val) Val { - tv := v.(*testAddr) - if tv.i < max { - return nil - } - tv.i = 0 - return v - } - for _, val := range m { - n, _, _, _ = Swap(n, val, pof, func(v Val) Val { - if v == nil { - return val - } - return f(v) - }) - } - sum := 0 - n.Each(func(v Val) bool { - if v == nil { - return true - } - sum++ - tv := v.(*testAddr) - if tv.i > 1 { - t.Fatalf("item value incorrect, expected 0, got %v", tv.i) - } - return true - }) - if sum != 2*max { - t.Fatalf("incorrect number of elements. expected %v, got %v", 2*max, sum) - } - if sum != n.Size() { - t.Fatalf("incorrect size. expected %v, got %v", sum, n.Size()) - } - } -} - -func checkPo(val Val, pof Pof) func(Val, int) error { - return func(v Val, po int) error { - // check the po - exp, _ := pof(val, v, 0) - if po != exp { - return fmt.Errorf("incorrect prox order for item %v in neighbour iteration for %v. Expected %v, got %v", v, val, exp, po) - } - return nil - } -} - -func checkOrder(val Val) func(Val, int) error { - po := maxkeylen - return func(v Val, p int) error { - if po < p { - return fmt.Errorf("incorrect order for item %v in neighbour iteration for %v. PO %v > %v (previous max)", v, val, p, po) - } - po = p - return nil - } -} - -func checkValues(m map[string]bool, val Val) func(Val, int) error { - return func(v Val, po int) error { - duplicate, ok := m[Label(v)] - if !ok { - return fmt.Errorf("alien value %v", v) - } - if duplicate { - return fmt.Errorf("duplicate value returned: %v", v) - } - m[Label(v)] = true - return nil - } -} - -var errNoCount = errors.New("not count") - -func testPotEachNeighbour(n *Pot, pof Pof, val Val, expCount int, fs ...func(Val, int) error) error { - var err error - var count int - n.EachNeighbour(val, pof, func(v Val, po int) bool { - for _, f := range fs { - err = f(v, po) - if err != nil { - return err.Error() == errNoCount.Error() - } - } - count++ - return count != expCount - }) - if err == nil && count < expCount { - return fmt.Errorf("not enough neighbours returned, expected %v, got %v", expCount, count) - } - return err -} - -const ( - mergeTestCount = 5 - mergeTestChoose = 5 -) - -func TestPotMergeCommon(t *testing.T) { - vs := make([]*testAddr, mergeTestCount) - for i := 0; i < maxEachNeighbourTests; i++ { - alen := maxkeylen - pof := DefaultPof(alen) - - for j := 0; j < len(vs); j++ { - vs[j] = randomtestAddr(alen, j) - } - max0 := rand.Intn(mergeTestChoose) + 1 - max1 := rand.Intn(mergeTestChoose) + 1 - n0 := NewPot(nil, 0) - n1 := NewPot(nil, 0) - log.Trace(fmt.Sprintf("round %v: %v - %v", i, max0, max1)) - m := make(map[string]bool) - var found bool - for j := 0; j < max0; { - r := rand.Intn(max0) - v := vs[r] - n0, _, found = Add(n0, v, pof) - if !found { - m[Label(v)] = false - j++ - } - } - expAdded := 0 - - for j := 0; j < max1; { - r := rand.Intn(max1) - v := vs[r] - n1, _, found = Add(n1, v, pof) - if !found { - j++ - } - _, found = m[Label(v)] - if !found { - expAdded++ - m[Label(v)] = false - } - } - if i < 6 { - continue - } - expSize := len(m) - log.Trace(fmt.Sprintf("%v-0: pin: %v, size: %v", i, n0.Pin(), max0)) - log.Trace(fmt.Sprintf("%v-1: pin: %v, size: %v", i, n1.Pin(), max1)) - log.Trace(fmt.Sprintf("%v: merged tree size: %v, newly added: %v", i, expSize, expAdded)) - n, common := Union(n0, n1, pof) - added := n1.Size() - common - size := n.Size() - - if expSize != size { - t.Fatalf("%v: incorrect number of elements in merged pot, expected %v, got %v\n%v", i, expSize, size, n) - } - if expAdded != added { - t.Fatalf("%v: incorrect number of added elements in merged pot, expected %v, got %v", i, expAdded, added) - } - if !checkDuplicates(n) { - t.Fatalf("%v: merged pot contains duplicates: \n%v", i, n) - } - for k := range m { - _, _, found = Add(n, newTestAddr(k, 0), pof) - if !found { - t.Fatalf("%v: merged pot (size:%v, added: %v) missing element %v", i, size, added, k) - } - } - } -} - -func TestPotMergeScale(t *testing.T) { - for i := 0; i < maxEachNeighbourTests; i++ { - alen := maxkeylen - pof := DefaultPof(alen) - max0 := rand.Intn(maxEachNeighbour) + 1 - max1 := rand.Intn(maxEachNeighbour) + 1 - n0 := NewPot(nil, 0) - n1 := NewPot(nil, 0) - log.Trace(fmt.Sprintf("round %v: %v - %v", i, max0, max1)) - m := make(map[string]bool) - var found bool - for j := 0; j < max0; { - v := randomtestAddr(alen, j) - n0, _, found = Add(n0, v, pof) - if !found { - m[Label(v)] = false - j++ - } - } - expAdded := 0 - - for j := 0; j < max1; { - v := randomtestAddr(alen, j) - n1, _, found = Add(n1, v, pof) - if !found { - j++ - } - _, found = m[Label(v)] - if !found { - expAdded++ - m[Label(v)] = false - } - } - if i < 6 { - continue - } - expSize := len(m) - log.Trace(fmt.Sprintf("%v-0: pin: %v, size: %v", i, n0.Pin(), max0)) - log.Trace(fmt.Sprintf("%v-1: pin: %v, size: %v", i, n1.Pin(), max1)) - log.Trace(fmt.Sprintf("%v: merged tree size: %v, newly added: %v", i, expSize, expAdded)) - n, common := Union(n0, n1, pof) - added := n1.Size() - common - size := n.Size() - - if expSize != size { - t.Fatalf("%v: incorrect number of elements in merged pot, expected %v, got %v", i, expSize, size) - } - if expAdded != added { - t.Fatalf("%v: incorrect number of added elements in merged pot, expected %v, got %v", i, expAdded, added) - } - if !checkDuplicates(n) { - t.Fatalf("%v: merged pot contains duplicates", i) - } - for k := range m { - _, _, found = Add(n, newTestAddr(k, 0), pof) - if !found { - t.Fatalf("%v: merged pot (size:%v, added: %v) missing element %v", i, size, added, k) - } - } - } -} - -func checkDuplicates(t *Pot) bool { - po := -1 - for _, c := range t.bins { - if c == nil { - return false - } - if c.po <= po || !checkDuplicates(c) { - return false - } - po = c.po - } - return true -} - -func TestPotEachNeighbourSync(t *testing.T) { - for i := 0; i < maxEachNeighbourTests; i++ { - alen := maxkeylen - pof := DefaultPof(maxkeylen) - max := rand.Intn(maxEachNeighbour/2) + maxEachNeighbour/2 - pin := randomTestAddr(alen, 0) - n := NewPot(pin, 0) - m := make(map[string]bool) - m[Label(pin)] = false - for j := 1; j <= max; j++ { - v := randomTestAddr(alen, j) - n, _, _ = Add(n, v, pof) - m[Label(v)] = false - } - - size := n.Size() - if size < 2 { - continue - } - count := rand.Intn(size/2) + size/2 - val := randomTestAddr(alen, max+1) - log.Trace(fmt.Sprintf("%v: pin: %v, size: %v, val: %v, count: %v", i, n.Pin(), size, val, count)) - err := testPotEachNeighbour(n, pof, val, count, checkPo(val, pof), checkOrder(val), checkValues(m, val)) - if err != nil { - t.Fatal(err) - } - minPoFound := alen - maxPoNotFound := 0 - for k, found := range m { - po, _ := pof(val, newTestAddr(k, 0), 0) - if found { - if po < minPoFound { - minPoFound = po - } - } else { - if po > maxPoNotFound { - maxPoNotFound = po - } - } - } - if minPoFound < maxPoNotFound { - t.Fatalf("incorrect neighbours returned: found one with PO %v < there was one not found with PO %v", minPoFound, maxPoNotFound) - } - } -} - -func TestPotEachNeighbourAsync(t *testing.T) { - for i := 0; i < maxEachNeighbourTests; i++ { - max := rand.Intn(maxEachNeighbour/2) + maxEachNeighbour/2 - alen := maxkeylen - pof := DefaultPof(alen) - n := NewPot(randomTestAddr(alen, 0), 0) - size := 1 - var found bool - for j := 1; j <= max; j++ { - v := randomTestAddr(alen, j) - n, _, found = Add(n, v, pof) - if !found { - size++ - } - } - if size != n.Size() { - t.Fatal(n) - } - if size < 2 { - continue - } - count := rand.Intn(size/2) + size/2 - val := randomTestAddr(alen, max+1) - - mu := sync.Mutex{} - m := make(map[string]bool) - maxPos := rand.Intn(alen) - log.Trace(fmt.Sprintf("%v: pin: %v, size: %v, val: %v, count: %v, maxPos: %v", i, n.Pin(), size, val, count, maxPos)) - msize := 0 - remember := func(v Val, po int) error { - if po > maxPos { - return errNoCount - } - m[Label(v)] = true - msize++ - return nil - } - if i == 0 { - continue - } - testPotEachNeighbour(n, pof, val, count, remember) - d := 0 - forget := func(v Val, po int) { - mu.Lock() - defer mu.Unlock() - d++ - delete(m, Label(v)) - } - - n.EachNeighbourAsync(val, pof, count, maxPos, forget, true) - if d != msize { - t.Fatalf("incorrect number of neighbour calls in async iterator. expected %v, got %v", msize, d) - } - if len(m) != 0 { - t.Fatalf("incorrect neighbour calls in async iterator. %v items missed:\n%v", len(m), n) - } - } -} - -func benchmarkEachNeighbourSync(t *testing.B, max, count int, d time.Duration) { - t.ReportAllocs() - alen := maxkeylen - pof := DefaultPof(alen) - pin := randomTestAddr(alen, 0) - n := NewPot(pin, 0) - var found bool - for j := 1; j <= max; { - v := randomTestAddr(alen, j) - n, _, found = Add(n, v, pof) - if !found { - j++ - } - } - t.ResetTimer() - for i := 0; i < t.N; i++ { - val := randomTestAddr(alen, max+1) - m := 0 - n.EachNeighbour(val, pof, func(v Val, po int) bool { - time.Sleep(d) - m++ - return m != count - }) - } - t.StopTimer() - stats := new(runtime.MemStats) - runtime.ReadMemStats(stats) -} - -func benchmarkEachNeighbourAsync(t *testing.B, max, count int, d time.Duration) { - t.ReportAllocs() - alen := maxkeylen - pof := DefaultPof(alen) - pin := randomTestAddr(alen, 0) - n := NewPot(pin, 0) - var found bool - for j := 1; j <= max; { - v := randomTestAddr(alen, j) - n, _, found = Add(n, v, pof) - if !found { - j++ - } - } - t.ResetTimer() - for i := 0; i < t.N; i++ { - val := randomTestAddr(alen, max+1) - n.EachNeighbourAsync(val, pof, count, alen, func(v Val, po int) { - time.Sleep(d) - }, true) - } - t.StopTimer() - stats := new(runtime.MemStats) - runtime.ReadMemStats(stats) -} - -func BenchmarkEachNeighbourSync_3_1_0(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 10, 1*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_1_0(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 10, 1*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_2_0(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 100, 1*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_2_0(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 100, 1*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_3_0(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 1000, 1*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_3_0(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 1000, 1*time.Microsecond) -} - -func BenchmarkEachNeighbourSync_3_1_1(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 10, 2*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_1_1(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 10, 2*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_2_1(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 100, 2*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_2_1(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 100, 2*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_3_1(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 1000, 2*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_3_1(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 1000, 2*time.Microsecond) -} - -func BenchmarkEachNeighbourSync_3_1_2(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 10, 4*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_1_2(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 10, 4*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_2_2(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 100, 4*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_2_2(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 100, 4*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_3_2(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 1000, 4*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_3_2(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 1000, 4*time.Microsecond) -} - -func BenchmarkEachNeighbourSync_3_1_3(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 10, 8*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_1_3(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 10, 8*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_2_3(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 100, 8*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_2_3(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 100, 8*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_3_3(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 1000, 8*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_3_3(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 1000, 8*time.Microsecond) -} - -func BenchmarkEachNeighbourSync_3_1_4(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 10, 16*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_1_4(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 10, 16*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_2_4(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 100, 16*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_2_4(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 100, 16*time.Microsecond) -} -func BenchmarkEachNeighbourSync_3_3_4(t *testing.B) { - benchmarkEachNeighbourSync(t, 1000, 1000, 16*time.Microsecond) -} -func BenchmarkEachNeighboursAsync_3_3_4(t *testing.B) { - benchmarkEachNeighbourAsync(t, 1000, 1000, 16*time.Microsecond) -} diff --git a/swarm/pss/ARCHITECTURE.md b/swarm/pss/ARCHITECTURE.md deleted file mode 100644 index 279e895ab798..000000000000 --- a/swarm/pss/ARCHITECTURE.md +++ /dev/null @@ -1,144 +0,0 @@ -# Postal Service over Swarm - -Pss provides devp2p functionality for swarm nodes without the need for a direct tcp connection between them. - -Messages are encapsulated in a devp2p message structure `PssMsg`. These capsules are forwarded from node to node using ordinary tcp devp2p until they reach their destination: The node or nodes who can successfully decrypt the message. - -| Layer | Contents | -|-----------|-----------------| -| PssMsg: | Address, Expiry | -| Envelope: | Topic | -| Payload: | e(data) | - -Routing of messages is done using swarm's own kademlia routing. Optionally routing can be turned off, forcing the message to be sent to all peers, similar to the behavior of the whisper protocol. - -Pss is intended for messages of limited size, typically a couple of Kbytes at most. The messages themselves can be anything at all; complex data structures or non-descript byte sequences. - -For the current state and roadmap of pss development please see https://github.com/ethersphere/swarm/wiki/swarm-dev-progress. - -Please report issues on https://github.com/ethersphere/go-ethereum - -Feel free to ask questions in https://gitter.im/ethersphere/pss - -## STATUS OF THIS DOCUMENT - -`pss` is under active development, and the first implementation is yet to be merged to the Ethereum main branch. Expect things to change. - -## CORE INTERFACES - -The pss core provides low level control of key handling and message exchange. - -### TOPICS - -An encrypted envelope of a pss message always contains a Topic. This is pss' way of determining which message handlers to dispatch messages to. The topic of a message is only visible for the node(s) who can decrypt the message. - -This "topic" is not like the subject of an email message, but a hash-like arbitrary 4 byte value. A valid topic can be generated using the `pss_*ToTopic` API methods. - -### IDENTITY AND ENCRYPTION - -Pss aims to achieve perfect darkness. That means that the minimum requirement for two nodes to communicate using pss is a shared secret. This secret can be an arbitrary byte slice, or a ECDSA keypair. The end recipient of a message is defined as the node that can successfully decrypt that message using stored keys. - -A node's public key is derived from the private key passed to the `pss` constructor. Pss (currently) has no PKI. - -Peer keys can manually be added to the pss node through its API calls `pss_setPeerPublicKey` and `pss_setSymmetricKey`. Keys are always coupled with a topic, and the keys will only be valid for these topics. - -### CONNECTIONS - -A "connection" in pss is a purely virtual construct. There is no mechanisms in place to ensure that the remote peer actually is there. In fact, "adding" a peer involves merely the node's opinion that the peer is there. It may issue messages to that remote peer to a directly connected peer, which in turn passes it on. But if it is not present on the network - or if there is no route to it - the message will never reach its destination through mere forwarding. - -Since pss itself never requires a confirmation from a peer of whether a message is received or not, one could argue that pss shows `UDP`-like behavior. - -It is also important to note that if the wrong (partial) address is set for a particular key/topic combination, the message may never reach that peer. The further left in the address byte slice the error lies, the less likely it is that delivery will occur. - - -### EXCHANGE - -Message exchange in `pss` *requires* end-to-end encryption. - -The API methods `pss_sendSym` and `pss_sendAsym` sends an arbitrary byte slice with a specific topic to a pss peer using the respective encryption scheme. The key passed to the send method must be associated with a topic in the pss key store prior to sending, or the send method will fail. - -Return values from the send methods do *not* indicate whether the message was successfully delivered to the pss peer. It *only* indicates whether or not the message could be passed on to the network. If the message could not be forwarded to any peers, the method will fail. - -Keep in mind that symmetric encryption is less resource-intensive than asymmetric encryption. The former should be used for nodes with high message volumes. - -## EXTENSIONS - -### HANDSHAKE - -Pss offers an optional Diffie-Hellman handshake mechanism. Handshake functionality is activated per topic, and can be deactivated per topic even while the node is running. - -Handshakes are activated in the code implementation of the node by running `SetHandshakeController()` on the pss node instance BEFORE starting the node service. The methods exposed by the HandshakeController's API gives the possibility to initiate, remove and check the state of handshakes and associated keys. - -See the `HandshakeAPI` section in `godoc` for details. - -### DEVP2P PROTOCOLS - -The `Protocol` convenience structure is provided to mimic devp2p-type protocols over pss. In theory this makes it possible to reuse protocol code written for devp2p with a minimum of effort. - -#### OUTGOING CONNECTIONS - -In order to message a peer using this layer, a `Protocol` object must first be instantiated. When this is done, peers can be added using the protocol's `AddPeer()` method. The peer's key/topic combination must be in the pss key store before the peer can be aded. - -Adding a peer in effect "runs" the protocol on that peer, and adds an internal mapping between a topic and that peer, and enables sending and receiving messages using the usual io-construct of devp2p. It does not actually *transmit* anything to the peer, it merely represents the node's opinion that a connection with the peer exists. (See CONNECTION above). - -#### INCOMING CONNECTIONS - -An incoming connection is nothing more than an actual PssMsg appearing with a certain Topic. If a Handler has been registered to that Topic, the message will be passed to it. This constitutes a "new" connection if: - -- The pss node never called AddPeer with this combination of remote peer address and topic, and - -- The pss node never received a PssMsg from this remote peer with this specific Topic before. - -If it is a "new" connection, the protocol will be "run" on the remote peer, as if the peer was added via the API. - -As with the `AddPeer()` method, the key/topic of the originating peer must exist in the pss key store. - -#### TOPICS IN DEVP2P - -The `ProtocolTopic()` method should be used to determine the correct topic to use for a pss `Protocol` instance. - -## EXAMPLES - -Coming. Please refer to the tests for now. - -## PSS INTERNALS - -Pss implements the node.Service interface. It depends on a working kademlia overlay for routing. - -### DECRYPTION - -When processing an incoming message, `pss` detects whether it is encrypted symmetrically or asymmetrically. - -When decrypting symmetrically, `pss` iterates through all stored keys, and attempts to decrypt with each key in order. - -pss keeps a *cache* of these keys. The cache will only store a certain amount of keys, and the iterator will return keys in the order of most recently used key first. Abandoned keys will be garbage collected. - -### ROUTING - -(please refer to swarm kademlia routing for an explanation of the routing algorithm used for pss) - -`pss` uses *address hinting* for routing. The address hint is an arbitrary-length MSB byte slice of the peer's swarm overlay address. It can be the whole address, part of the address, or even an empty byte slice. The slice will be matched to the MSB slice of the same length of all devp2p peers in the routing stage. - -If an empty byte slice is passed, all devp2p peers will match the address hint, and the message will be forwarded to everyone. This is equivalent to `whisper` routing, and makes it difficult to perform traffic analysis based on who messages are forwarded to. - -A node will also forward to everyone if the address hint provided is in its proximity bin, both to provide saturation to increase chances of delivery, and also for recipient obfuscation to thwart traffic analysis attacks. The recipient node(s) will always forward to all its peers. - -### CACHING - -pss implements a simple caching mechanism for messages, using the swarm FileStore for storage of the messages and generation of the digest keys used in the cache table. The caching is intended to alleviate the following: - -- save messages so that they can be delivered later if the recipient was not online at the time of sending. - -- drop an identical message to the same recipient if received within a given time interval - -- prevent backwards routing of messages - -the latter may occur if only one entry is in the receiving node's kademlia, or if the proximity of the current node recipient hinted by the address is so close that the message will be forwarded to everyone. In these cases the forwarder will be provided as the "nearest node" to the final recipient. The cache keeps the address of who the message was forwarded from, and if the cache lookup matches, the message will be dropped. - -### DEVP2P PROTOCOLS - -When implementing devp2p protocols, topics are derived from protocols' name and version. The Protocol provides a generic Handler that be passed to Pss.Register. This makes it possible to use the same message handler code for pss that is used for directly connected peers in devp2p. - -Under the hood, pss implements its own MsgReadWriter, which bridges MsgReadWriter.WriteMsg with Pss.SendRaw, and deftly adds an InjectMsg method which pipes incoming messages to appear on the MsgReadWriter.ReadMsg channel. - - diff --git a/swarm/pss/README.md b/swarm/pss/README.md deleted file mode 100644 index aea871251fe0..000000000000 --- a/swarm/pss/README.md +++ /dev/null @@ -1,318 +0,0 @@ -# Postal Services over Swarm - -`pss` enables message relay over swarm. This means nodes can send messages to each other without being directly connected with each other, while taking advantage of the efficient routing algorithms that swarm uses for transporting and storing data. - -### CONTENTS - -* Status of this document -* Core concepts -* Caveat -* Examples -* API - * Retrieve node information - * Receive messages - * Send messages using public key encryption - * Send messages using symmetric encryption - * Querying peer keys - * Handshakes - -### STATUS OF THIS DOCUMENT - -`pss` is under active development, and the first implementation is yet to be merged to the Ethereum main branch. Expect things to change. - -Details on swarm routing and encryption schemes out of scope of this document. - -Please refer to [ARCHITECTURE.md](ARCHITECTURE.md) for in-depth topics concerning `pss`. - -## CORE CONCEPTS - -Three things are required to send a `pss` message: - -1. Encryption key -2. Topic -3. Message payload - -Encryption key can be a public key or a 32 byte symmetric key. It must be coupled with a peer address in the node prior to sending. - -Topic is the initial 4 bytes of a hash value. - -Message payload is an arbitrary byte slice of data. - -Upon sending the message it is encrypted and passed on from peer to peer. Any node along the route that can successfully decrypt the message is regarded as a recipient. Recipients continue to pass on the message to their peers, to make traffic analysis attacks more difficult. - -The Address that is coupled with the encryption keys are used for routing the message. This does *not* need to be a full addresses; the network will route the message to the best of its ability with the information that is available. If *no* address is given (zero-length byte slice), routing is effectively deactivated, and the message is passed to all peers by all peers. - -## CAVEAT - -`pss` connectivity resembles UDP. This means there is no delivery guarantee for a message. Furthermore there is no strict definition of what a connection between two nodes communicating via `pss` is. Reception acknowledgements and keepalive-schemes is the responsibility of the application. - -Due to the inherent properties of the `swarm` routing algorithm, a node may receive the same message more than once. Message deduplication *cannot be guaranteed* by `pss`, and must be handled in the application layer to ensure predictable results. - -## EXAMPLES - -The code tutorial [p2p programming in go-ethereum](https://github.com/nolash/go-ethereum-p2p-demo) by [@nolash](https://github.com/nolash) provides step-by-step code examples for usage of `pss` API with `go-ethereum` nodes. - -A quite unpolished example using `javascript` is available here: [https://github.com/nolash/pss-js/tree/withcrypt](https://github.com/nolash/pss-js/tree/withcrypt) - -## API - -The `pss` API is available through IPC and Websockets. There is currently no `web3.js` implementation, as this does not support message subscription. - -For `golang` clients, please use the `rpc.Client` provided by the `go-ethereum` repository. The return values may have special types in `golang`. Please refer to `godoc` for details. - -### RETRIEVE NODE INFORMATION - -#### pss_getPublicKey - -Retrieves the public key of the node, in hex format - -``` -parameters: -none - -returns: -1. publickey (hex) -``` - -#### pss_baseAddr - -Retrieves the swarm overlay address of the node, in hex format - -``` -parameters: -none - -returns: -1. swarm overlay address (hex) -``` - -#### pss_stringToTopic - -Creates a deterministic 4 byte topic value from input, returned in hex format - -``` -parameters: -1. topic string (string) - -returns: -1. pss topic (hex) -``` - -### RECEIVE MESSAGES - -#### pss_subscribe - -Creates a subscription. Received messages with matching topic will be passed to subscription client. - -``` -parameters: -1. string("receive") -2. topic (4 bytes in hex) - -returns: -1. subscription handle `base64(byte)` `rpc.ClientSubscription` -``` - -In `golang` as special method is used: - -`rpc.Client.Subscribe(context.Context, "pss", chan pss.APIMsg, "receive", pss.Topic)` - -Incoming messages are encapsulated in an object (`pss.APIMsg` in `golang`) with the following members: - -``` -1. Msg (hex) - the message payload -2. Asymmetric (bool) - true if message used public key encryption -3. Key (string) - the encryption key used -``` - -### SEND MESSAGE USING PUBLIC KEY ENCRYPTION - -#### pss_setPeerPublicKey - -Register a peer's public key. This is done once for every topic that will be used with the peer. Address can be anything from 0 to 32 bytes inclusive of the peer's swarm overlay address. - -``` -parameters: -1. public key of peer (hex) -2. topic (4 bytes in hex) -3. address of peer (hex) - -returns: -none -``` - -#### pss_sendAsym - -Encrypts the message using the provided public key, and signs it using the node's private key. It then wraps it in an envelope containing the topic, and sends it to the network. - -``` -parameters: -1. public key of peer (hex) -2. topic (4 bytes in hex) -3. message (hex) - -returns: -none -``` - -### SEND MESSAGE USING SYMMETRIC ENCRYPTION - -#### pss_setSymmetricKey - -Register a symmetric key shared with a peer. This is done once for every topic that will be used with the peer. Address can be anything from 0 to 32 bytes inclusive of the peer's swarm overlay address. - -If the fourth parameter is false, the key will *not* be added to the list of symmetric keys used for decryption attempts. - -``` -parameters: -1. symmetric key (hex) -2. topic (4 bytes in hex) -3. address of peer (hex) -4. use for decryption (bool) - -returns: -1. symmetric key id (string) -``` - -#### pss_sendSym - -Encrypts the message using the provided symmetric key, wraps it in an envelope containing the topic, and sends it to the network. - -``` -parameters: -1. symmetric key id (string) -2. topic (4 bytes in hex) -3. message (hex) - -returns: -none -``` - -### QUERY PEER KEYS - -#### pss_GetSymmetricAddressHint - -Return the swarm overlay address associated with the peer registered with the given symmetric key and topic combination. - -``` -parameters: -1. topic (4 bytes in hex) -2. symmetric key id (string) - -returns: -1. peer address (hex) -``` - -#### pss_GetAsymmetricAddressHint - -Return the swarm overlay address associated with the peer registered with the given symmetric key and topic combination. - -``` -parameters: -1. topic (4 bytes in hex) -2. public key in hex form (string) - -returns: -1. peer address (hex) -``` - -### HANDSHAKES - -Convenience implementation of Diffie-Hellman handshakes using ephemeral symmetric keys. Peers keep separate sets of keys for incoming and outgoing communications. - -*This functionality is an optional feature in `pss`. It is compiled in by default, but can be omitted by providing the `nopsshandshake` build tag.* - -#### pss_addHandshake - -Activate handshake functionality on the specified topic. - -``` -parameters: -1. topic (4 bytes in hex) - -returns: -none -``` - -#### pss_removeHandshake - -Remove handshake functionality on the specified topic. - -``` -parameters: -1. topic (4 bytes in hex) - -returns: -none -``` - -#### pss_handshake - -Instantiate handshake with peer, refreshing symmetric encryption keys. - -If parameter 3 is false, the returned array will be empty. - -``` -parameters: -1. public key of peer in hex format (string) -2. topic (4 bytes in hex) -3. block calls until keys are received (bool) -4. flush existing incoming keys (bool) - -returns: -1. list of symmetric keys (string[]) -``` - -#### pss_getHandshakeKeys - -Get valid symmetric encryption keys for a specified peer and topic. - -parameters: -1. public key of peer in hex format (string) -2. topic (4 bytes in hex) -3. include keys for incoming messages (bool) -4. include keys for outgoing messages (bool) - -returns: -1. list of symmetric keys (string[]) - -#### pss_getHandshakeKeyCapacity - -Get amount of remaining messages the specified key is valid for. - -``` -parameters: -1. symmetric key id (string) - -returns: -1. number of messages (uint16) -``` - -#### pss_getHandshakePublicKey - -Get the peer's public key associated with the specified symmetric key. - -``` -parameters: -1. symmetric key id (string) - -returns: -1. Associated public key in hex format (string) -``` - -#### pss_releaseHandshakeKey - -Invalidate the specified key. - -Normally, the key will be kept for a grace period to allow for decryption of delayed messages. If instant removal is set, this grace period is omitted, and the key removed instantaneously. - -``` -parameters: -1. public key of peer in hex format (string) -2. topic (4 bytes in hex) -3. symmetric key id to release (string) -4. remove keys instantly (bool) - -returns: -1. whether key was successfully removed (bool) -``` diff --git a/swarm/pss/api.go b/swarm/pss/api.go deleted file mode 100644 index 4556d7b7c4a4..000000000000 --- a/swarm/pss/api.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "context" - "errors" - "fmt" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" -) - -// Wrapper for receiving pss messages when using the pss API -// providing access to sender of message -type APIMsg struct { - Msg hexutil.Bytes - Asymmetric bool - Key string -} - -// Additional public methods accessible through API for pss -type API struct { - *Pss -} - -func NewAPI(ps *Pss) *API { - return &API{Pss: ps} -} - -// Creates a new subscription for the caller. Enables external handling of incoming messages. -// -// A new handler is registered in pss for the supplied topic -// -// All incoming messages to the node matching this topic will be encapsulated in the APIMsg -// struct and sent to the subscriber -func (pssapi *API) Receive(ctx context.Context, topic Topic, raw bool, prox bool) (*rpc.Subscription, error) { - notifier, supported := rpc.NotifierFromContext(ctx) - if !supported { - return nil, fmt.Errorf("Subscribe not supported") - } - - psssub := notifier.CreateSubscription() - - hndlr := NewHandler(func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - apimsg := &APIMsg{ - Msg: hexutil.Bytes(msg), - Asymmetric: asymmetric, - Key: keyid, - } - if err := notifier.Notify(psssub.ID, apimsg); err != nil { - log.Warn(fmt.Sprintf("notification on pss sub topic rpc (sub %v) msg %v failed!", psssub.ID, msg)) - } - return nil - }) - if raw { - hndlr.caps.raw = true - } - if prox { - hndlr.caps.prox = true - } - - deregf := pssapi.Register(&topic, hndlr) - go func() { - defer deregf() - select { - case err := <-psssub.Err(): - log.Warn(fmt.Sprintf("caught subscription error in pss sub topic %x: %v", topic, err)) - case <-notifier.Closed(): - log.Warn(fmt.Sprintf("rpc sub notifier closed")) - } - }() - - return psssub, nil -} - -func (pssapi *API) GetAddress(topic Topic, asymmetric bool, key string) (PssAddress, error) { - var addr PssAddress - if asymmetric { - peer, ok := pssapi.Pss.pubKeyPool[key][topic] - if !ok { - return nil, fmt.Errorf("pubkey/topic pair %x/%x doesn't exist", key, topic) - } - addr = peer.address - } else { - peer, ok := pssapi.Pss.symKeyPool[key][topic] - if !ok { - return nil, fmt.Errorf("symkey/topic pair %x/%x doesn't exist", key, topic) - } - addr = peer.address - - } - return addr, nil -} - -// Retrieves the node's base address in hex form -func (pssapi *API) BaseAddr() (PssAddress, error) { - return PssAddress(pssapi.Pss.BaseAddr()), nil -} - -// Retrieves the node's public key in hex form -func (pssapi *API) GetPublicKey() (keybytes hexutil.Bytes) { - key := pssapi.Pss.PublicKey() - keybytes = crypto.FromECDSAPub(key) - return keybytes -} - -// Set Public key to associate with a particular Pss peer -func (pssapi *API) SetPeerPublicKey(pubkey hexutil.Bytes, topic Topic, addr PssAddress) error { - pk, err := crypto.UnmarshalPubkey(pubkey) - if err != nil { - return fmt.Errorf("Cannot unmarshal pubkey: %x", pubkey) - } - err = pssapi.Pss.SetPeerPublicKey(pk, topic, addr) - if err != nil { - return fmt.Errorf("Invalid key: %x", pk) - } - return nil -} - -func (pssapi *API) GetSymmetricKey(symkeyid string) (hexutil.Bytes, error) { - symkey, err := pssapi.Pss.GetSymmetricKey(symkeyid) - return hexutil.Bytes(symkey), err -} - -func (pssapi *API) GetSymmetricAddressHint(topic Topic, symkeyid string) (PssAddress, error) { - return pssapi.Pss.symKeyPool[symkeyid][topic].address, nil -} - -func (pssapi *API) GetAsymmetricAddressHint(topic Topic, pubkeyid string) (PssAddress, error) { - return pssapi.Pss.pubKeyPool[pubkeyid][topic].address, nil -} - -func (pssapi *API) StringToTopic(topicstring string) (Topic, error) { - topicbytes := BytesToTopic([]byte(topicstring)) - if topicbytes == rawTopic { - return rawTopic, errors.New("Topic string hashes to 0x00000000 and cannot be used") - } - return topicbytes, nil -} - -func (pssapi *API) SendAsym(pubkeyhex string, topic Topic, msg hexutil.Bytes) error { - if err := validateMsg(msg); err != nil { - return err - } - return pssapi.Pss.SendAsym(pubkeyhex, topic, msg[:]) -} - -func (pssapi *API) SendSym(symkeyhex string, topic Topic, msg hexutil.Bytes) error { - if err := validateMsg(msg); err != nil { - return err - } - return pssapi.Pss.SendSym(symkeyhex, topic, msg[:]) -} - -func (pssapi *API) SendRaw(addr hexutil.Bytes, topic Topic, msg hexutil.Bytes) error { - if err := validateMsg(msg); err != nil { - return err - } - return pssapi.Pss.SendRaw(PssAddress(addr), topic, msg[:]) -} - -func (pssapi *API) GetPeerTopics(pubkeyhex string) ([]Topic, error) { - topics, _, err := pssapi.Pss.GetPublickeyPeers(pubkeyhex) - return topics, err - -} - -func (pssapi *API) GetPeerAddress(pubkeyhex string, topic Topic) (PssAddress, error) { - return pssapi.Pss.getPeerAddress(pubkeyhex, topic) -} - -func validateMsg(msg []byte) error { - if len(msg) == 0 { - return errors.New("invalid message length") - } - return nil -} diff --git a/swarm/pss/client/client.go b/swarm/pss/client/client.go deleted file mode 100644 index 5ee387aa7918..000000000000 --- a/swarm/pss/client/client.go +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !noclient,!noprotocol - -package client - -import ( - "context" - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/pss" -) - -const ( - handshakeRetryTimeout = 1000 - handshakeRetryCount = 3 -) - -// The pss client provides devp2p emulation over pss RPC API, -// giving access to pss methods from a different process -type Client struct { - BaseAddrHex string - - // peers - peerPool map[pss.Topic]map[string]*pssRPCRW - protos map[pss.Topic]*p2p.Protocol - - // rpc connections - rpc *rpc.Client - subs []*rpc.ClientSubscription - - // channels - topicsC chan []byte - quitC chan struct{} - - poolMu sync.Mutex -} - -// implements p2p.MsgReadWriter -type pssRPCRW struct { - *Client - topic string - msgC chan []byte - addr pss.PssAddress - pubKeyId string - lastSeen time.Time - closed bool -} - -func (c *Client) newpssRPCRW(pubkeyid string, addr pss.PssAddress, topicobj pss.Topic) (*pssRPCRW, error) { - topic := topicobj.String() - err := c.rpc.Call(nil, "pss_setPeerPublicKey", pubkeyid, topic, hexutil.Encode(addr[:])) - if err != nil { - return nil, fmt.Errorf("setpeer %s %s: %v", topic, pubkeyid, err) - } - return &pssRPCRW{ - Client: c, - topic: topic, - msgC: make(chan []byte), - addr: addr, - pubKeyId: pubkeyid, - }, nil -} - -func (rw *pssRPCRW) ReadMsg() (p2p.Msg, error) { - msg := <-rw.msgC - log.Trace("pssrpcrw read", "msg", msg) - pmsg, err := pss.ToP2pMsg(msg) - if err != nil { - return p2p.Msg{}, err - } - - return pmsg, nil -} - -// If only one message slot left -// then new is requested through handshake -// if buffer is empty, handshake request blocks until return -// after which pointer is changed to first new key in buffer -// will fail if: -// - any api calls fail -// - handshake retries are exhausted without reply, -// - send fails -func (rw *pssRPCRW) WriteMsg(msg p2p.Msg) error { - log.Trace("got writemsg pssclient", "msg", msg) - if rw.closed { - return fmt.Errorf("connection closed") - } - rlpdata := make([]byte, msg.Size) - msg.Payload.Read(rlpdata) - pmsg, err := rlp.EncodeToBytes(pss.ProtocolMsg{ - Code: msg.Code, - Size: msg.Size, - Payload: rlpdata, - }) - if err != nil { - return err - } - - // Get the keys we have - var symkeyids []string - err = rw.Client.rpc.Call(&symkeyids, "pss_getHandshakeKeys", rw.pubKeyId, rw.topic, false, true) - if err != nil { - return err - } - - // Check the capacity of the first key - var symkeycap uint16 - if len(symkeyids) > 0 { - err = rw.Client.rpc.Call(&symkeycap, "pss_getHandshakeKeyCapacity", symkeyids[0]) - if err != nil { - return err - } - } - - err = rw.Client.rpc.Call(nil, "pss_sendSym", symkeyids[0], rw.topic, hexutil.Encode(pmsg)) - if err != nil { - return err - } - - // If this is the last message it is valid for, initiate new handshake - if symkeycap == 1 { - var retries int - var sync bool - // if it's the only remaining key, make sure we don't continue until we have new ones for further writes - if len(symkeyids) == 1 { - sync = true - } - // initiate handshake - _, err := rw.handshake(retries, sync, false) - if err != nil { - log.Warn("failing", "err", err) - return err - } - } - return nil -} - -// retry and synchronicity wrapper for handshake api call -// returns first new symkeyid upon successful execution -func (rw *pssRPCRW) handshake(retries int, sync bool, flush bool) (string, error) { - - var symkeyids []string - var i int - // request new keys - // if the key buffer was depleted, make this as a blocking call and try several times before giving up - for i = 0; i < 1+retries; i++ { - log.Debug("handshake attempt pssrpcrw", "pubkeyid", rw.pubKeyId, "topic", rw.topic, "sync", sync) - err := rw.Client.rpc.Call(&symkeyids, "pss_handshake", rw.pubKeyId, rw.topic, sync, flush) - if err == nil { - var keyid string - if sync { - keyid = symkeyids[0] - } - return keyid, nil - } - if i-1+retries > 1 { - time.Sleep(time.Millisecond * handshakeRetryTimeout) - } - } - - return "", fmt.Errorf("handshake failed after %d attempts", i) -} - -// Custom constructor -// -// Provides direct access to the rpc object -func NewClient(rpcurl string) (*Client, error) { - rpcclient, err := rpc.Dial(rpcurl) - if err != nil { - return nil, err - } - - client, err := NewClientWithRPC(rpcclient) - if err != nil { - return nil, err - } - return client, nil -} - -// Main constructor -// -// The 'rpcclient' parameter allows passing a in-memory rpc client to act as the remote websocket RPC. -func NewClientWithRPC(rpcclient *rpc.Client) (*Client, error) { - client := newClient() - client.rpc = rpcclient - err := client.rpc.Call(&client.BaseAddrHex, "pss_baseAddr") - if err != nil { - return nil, fmt.Errorf("cannot get pss node baseaddress: %v", err) - } - return client, nil -} - -func newClient() (client *Client) { - client = &Client{ - quitC: make(chan struct{}), - peerPool: make(map[pss.Topic]map[string]*pssRPCRW), - protos: make(map[pss.Topic]*p2p.Protocol), - } - return -} - -// Mounts a new devp2p protcool on the pss connection -// -// the protocol is aliased as a "pss topic" -// uses normal devp2p send and incoming message handler routines from the p2p/protocols package -// -// when an incoming message is received from a peer that is not yet known to the client, -// this peer object is instantiated, and the protocol is run on it. -func (c *Client) RunProtocol(ctx context.Context, proto *p2p.Protocol) error { - topicobj := pss.BytesToTopic([]byte(fmt.Sprintf("%s:%d", proto.Name, proto.Version))) - topichex := topicobj.String() - msgC := make(chan pss.APIMsg) - c.peerPool[topicobj] = make(map[string]*pssRPCRW) - sub, err := c.rpc.Subscribe(ctx, "pss", msgC, "receive", topichex, false, false) - if err != nil { - return fmt.Errorf("pss event subscription failed: %v", err) - } - c.subs = append(c.subs, sub) - err = c.rpc.Call(nil, "pss_addHandshake", topichex) - if err != nil { - return fmt.Errorf("pss handshake activation failed: %v", err) - } - - // dispatch incoming messages - go func() { - for { - select { - case msg := <-msgC: - // we only allow sym msgs here - if msg.Asymmetric { - continue - } - // we get passed the symkeyid - // need the symkey itself to resolve to peer's pubkey - var pubkeyid string - err = c.rpc.Call(&pubkeyid, "pss_getHandshakePublicKey", msg.Key) - if err != nil || pubkeyid == "" { - log.Trace("proto err or no pubkey", "err", err, "symkeyid", msg.Key) - continue - } - // if we don't have the peer on this protocol already, create it - // this is more or less the same as AddPssPeer, less the handshake initiation - if c.peerPool[topicobj][pubkeyid] == nil { - var addrhex string - err := c.rpc.Call(&addrhex, "pss_getAddress", topichex, false, msg.Key) - if err != nil { - log.Trace(err.Error()) - continue - } - addrbytes, err := hexutil.Decode(addrhex) - if err != nil { - log.Trace(err.Error()) - break - } - addr := pss.PssAddress(addrbytes) - rw, err := c.newpssRPCRW(pubkeyid, addr, topicobj) - if err != nil { - break - } - c.peerPool[topicobj][pubkeyid] = rw - p := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%v", addr), []p2p.Cap{}) - go proto.Run(p, c.peerPool[topicobj][pubkeyid]) - } - go func() { - c.peerPool[topicobj][pubkeyid].msgC <- msg.Msg - }() - case <-c.quitC: - return - } - } - }() - - c.protos[topicobj] = proto - return nil -} - -// Always call this to ensure that we exit cleanly -func (c *Client) Close() error { - for _, s := range c.subs { - s.Unsubscribe() - } - return nil -} - -// Add a pss peer (public key) and run the protocol on it -// -// client.RunProtocol with matching topic must have been -// run prior to adding the peer, or this method will -// return an error. -// -// The key must exist in the key store of the pss node -// before the peer is added. The method will return an error -// if it is not. -func (c *Client) AddPssPeer(pubkeyid string, addr []byte, spec *protocols.Spec) error { - topic := pss.ProtocolTopic(spec) - if c.peerPool[topic] == nil { - return errors.New("addpeer on unset topic") - } - if c.peerPool[topic][pubkeyid] == nil { - rw, err := c.newpssRPCRW(pubkeyid, addr, topic) - if err != nil { - return err - } - _, err = rw.handshake(handshakeRetryCount, true, true) - if err != nil { - return err - } - c.poolMu.Lock() - c.peerPool[topic][pubkeyid] = rw - c.poolMu.Unlock() - p := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%v", addr), []p2p.Cap{}) - go c.protos[topic].Run(p, c.peerPool[topic][pubkeyid]) - } - return nil -} - -// Remove a pss peer -// -// TODO: underlying cleanup -func (c *Client) RemovePssPeer(pubkeyid string, spec *protocols.Spec) { - log.Debug("closing pss client peer", "pubkey", pubkeyid, "protoname", spec.Name, "protoversion", spec.Version) - c.poolMu.Lock() - defer c.poolMu.Unlock() - topic := pss.ProtocolTopic(spec) - c.peerPool[topic][pubkeyid].closed = true - delete(c.peerPool[topic], pubkeyid) -} diff --git a/swarm/pss/client/client_test.go b/swarm/pss/client/client_test.go deleted file mode 100644 index 1c6f2e522dc2..000000000000 --- a/swarm/pss/client/client_test.go +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package client - -import ( - "bytes" - "context" - "flag" - "fmt" - "math/rand" - "os" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pss" - "github.com/ethereum/go-ethereum/swarm/state" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -type protoCtrl struct { - C chan bool - protocol *pss.Protocol - run func(*p2p.Peer, p2p.MsgReadWriter) error -} - -var ( - debugdebugflag = flag.Bool("vv", false, "veryverbose") - debugflag = flag.Bool("v", false, "verbose") - w *whisper.Whisper - wapi *whisper.PublicWhisperAPI - // custom logging - psslogmain log.Logger - pssprotocols map[string]*protoCtrl - sendLimit = uint16(256) -) - -var services = newServices() - -func init() { - flag.Parse() - rand.Seed(time.Now().Unix()) - - adapters.RegisterServices(services) - - loglevel := log.LvlInfo - if *debugflag { - loglevel = log.LvlDebug - } else if *debugdebugflag { - loglevel = log.LvlTrace - } - - psslogmain = log.New("psslog", "*") - hs := log.StreamHandler(os.Stderr, log.TerminalFormat(true)) - hf := log.LvlFilterHandler(loglevel, hs) - h := log.CallerFileHandler(hf) - log.Root().SetHandler(h) - - w = whisper.New(&whisper.DefaultConfig) - wapi = whisper.NewPublicWhisperAPI(w) - - pssprotocols = make(map[string]*protoCtrl) -} - -// ping pong exchange across one expired symkey -func TestClientHandshake(t *testing.T) { - sendLimit = 3 - - clients, err := setupNetwork(2) - if err != nil { - t.Fatal(err) - } - - lpsc, err := NewClientWithRPC(clients[0]) - if err != nil { - t.Fatal(err) - } - rpsc, err := NewClientWithRPC(clients[1]) - if err != nil { - t.Fatal(err) - } - lpssping := &pss.Ping{ - OutC: make(chan bool), - InC: make(chan bool), - Pong: false, - } - rpssping := &pss.Ping{ - OutC: make(chan bool), - InC: make(chan bool), - Pong: false, - } - lproto := pss.NewPingProtocol(lpssping) - rproto := pss.NewPingProtocol(rpssping) - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - err = lpsc.RunProtocol(ctx, lproto) - if err != nil { - t.Fatal(err) - } - err = rpsc.RunProtocol(ctx, rproto) - if err != nil { - t.Fatal(err) - } - topic := pss.PingTopic.String() - - var loaddr string - err = clients[0].Call(&loaddr, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - var roaddr string - err = clients[1].Call(&roaddr, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - - var lpubkey string - err = clients[0].Call(&lpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 1 pubkey fail: %v", err) - } - var rpubkey string - err = clients[1].Call(&rpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 2 pubkey fail: %v", err) - } - - err = clients[0].Call(nil, "pss_setPeerPublicKey", rpubkey, topic, roaddr) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(nil, "pss_setPeerPublicKey", lpubkey, topic, loaddr) - if err != nil { - t.Fatal(err) - } - - time.Sleep(time.Second) - - roaddrbytes, err := hexutil.Decode(roaddr) - if err != nil { - t.Fatal(err) - } - err = lpsc.AddPssPeer(rpubkey, roaddrbytes, pss.PingProtocol) - if err != nil { - t.Fatal(err) - } - - time.Sleep(time.Second) - - for i := uint16(0); i <= sendLimit; i++ { - lpssping.OutC <- false - got := <-rpssping.InC - log.Warn("ok", "idx", i, "got", got) - time.Sleep(time.Second) - } - - rw := lpsc.peerPool[pss.PingTopic][rpubkey] - lpsc.RemovePssPeer(rpubkey, pss.PingProtocol) - if err := rw.WriteMsg(p2p.Msg{ - Size: 3, - Payload: bytes.NewReader([]byte("foo")), - }); err == nil { - t.Fatalf("expected error on write") - } -} - -func setupNetwork(numnodes int) (clients []*rpc.Client, err error) { - nodes := make([]*simulations.Node, numnodes) - clients = make([]*rpc.Client, numnodes) - if numnodes < 2 { - return nil, fmt.Errorf("Minimum two nodes in network") - } - adapter := adapters.NewSimAdapter(services) - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: "bzz", - }) - for i := 0; i < numnodes; i++ { - nodeconf := adapters.RandomNodeConfig() - nodeconf.Services = []string{"bzz", "pss"} - nodes[i], err = net.NewNodeWithConfig(nodeconf) - if err != nil { - return nil, fmt.Errorf("error creating node 1: %v", err) - } - err = net.Start(nodes[i].ID()) - if err != nil { - return nil, fmt.Errorf("error starting node 1: %v", err) - } - if i > 0 { - err = net.Connect(nodes[i].ID(), nodes[i-1].ID()) - if err != nil { - return nil, fmt.Errorf("error connecting nodes: %v", err) - } - } - clients[i], err = nodes[i].Client() - if err != nil { - return nil, fmt.Errorf("create node 1 rpc client fail: %v", err) - } - } - if numnodes > 2 { - err = net.Connect(nodes[0].ID(), nodes[len(nodes)-1].ID()) - if err != nil { - return nil, fmt.Errorf("error connecting first and last nodes") - } - } - return clients, nil -} - -func newServices() adapters.Services { - stateStore := state.NewInmemoryStore() - kademlias := make(map[enode.ID]*network.Kademlia) - kademlia := func(id enode.ID) *network.Kademlia { - if k, ok := kademlias[id]; ok { - return k - } - params := network.NewKadParams() - params.NeighbourhoodSize = 2 - params.MaxBinSize = 3 - params.MinBinSize = 1 - params.MaxRetries = 1000 - params.RetryExponent = 2 - params.RetryInterval = 1000000 - kademlias[id] = network.NewKademlia(id[:], params) - return kademlias[id] - } - return adapters.Services{ - "pss": func(ctx *adapters.ServiceContext) (node.Service, error) { - ctxlocal, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctxlocal) - if err != nil { - return nil, err - } - privkey, err := w.GetPrivateKey(keys) - if err != nil { - return nil, err - } - psparams := pss.NewPssParams().WithPrivateKey(privkey) - pskad := kademlia(ctx.Config.ID) - ps, err := pss.NewPss(pskad, psparams) - if err != nil { - return nil, err - } - pshparams := pss.NewHandshakeParams() - pshparams.SymKeySendLimit = sendLimit - err = pss.SetHandshakeController(ps, pshparams) - if err != nil { - return nil, fmt.Errorf("handshake controller fail: %v", err) - } - return ps, nil - }, - "bzz": func(ctx *adapters.ServiceContext) (node.Service, error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - hp.Discovery = false - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - return network.NewBzz(config, kademlia(ctx.Config.ID), stateStore, nil, nil), nil - }, - } -} - -// copied from swarm/network/protocol_test_go -type testStore struct { - sync.Mutex - - values map[string][]byte -} - -func (t *testStore) Load(key string) ([]byte, error) { - return nil, nil -} - -func (t *testStore) Save(key string, v []byte) error { - return nil -} diff --git a/swarm/pss/client/doc.go b/swarm/pss/client/doc.go deleted file mode 100644 index 080af45a9a22..000000000000 --- a/swarm/pss/client/doc.go +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// simple abstraction for implementing pss functionality -// -// the pss client library aims to simplify usage of the p2p.protocols package over pss -// -// IO is performed using the ordinary p2p.MsgReadWriter interface, which transparently communicates with a pss node via RPC using websockets as transport layer, using methods in the PssAPI class in the swarm/pss package -// -// -// Minimal-ish usage example (requires a running pss node with websocket RPC): -// -// -// import ( -// "context" -// "fmt" -// "os" -// pss "github.com/ethereum/go-ethereum/swarm/pss/client" -// "github.com/ethereum/go-ethereum/p2p/protocols" -// "github.com/ethereum/go-ethereum/p2p" -// "github.com/ethereum/go-ethereum/swarm/pot" -// "github.com/ethereum/go-ethereum/swarm/log" -// ) -// -// type FooMsg struct { -// Bar int -// } -// -// -// func fooHandler (msg interface{}) error { -// foomsg, ok := msg.(*FooMsg) -// if ok { -// log.Debug("Yay, just got a message", "msg", foomsg) -// } -// return errors.New(fmt.Sprintf("Unknown message")) -// } -// -// spec := &protocols.Spec{ -// Name: "foo", -// Version: 1, -// MaxMsgSize: 1024, -// Messages: []interface{}{ -// FooMsg{}, -// }, -// } -// -// proto := &p2p.Protocol{ -// Name: spec.Name, -// Version: spec.Version, -// Length: uint64(len(spec.Messages)), -// Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { -// pp := protocols.NewPeer(p, rw, spec) -// return pp.Run(fooHandler) -// }, -// } -// -// func implementation() { -// cfg := pss.NewClientConfig() -// psc := pss.NewClient(context.Background(), nil, cfg) -// err := psc.Start() -// if err != nil { -// log.Crit("can't start pss client") -// os.Exit(1) -// } -// -// log.Debug("connected to pss node", "bzz addr", psc.BaseAddr) -// -// err = psc.RunProtocol(proto) -// if err != nil { -// log.Crit("can't start protocol on pss websocket") -// os.Exit(1) -// } -// -// addr := pot.RandomAddress() // should be a real address, of course -// psc.AddPssPeer(addr, spec) -// -// // use the protocol for something -// -// psc.Stop() -// } -// -// BUG(test): TestIncoming test times out due to deadlock issues in the swarm hive -package client diff --git a/swarm/pss/doc.go b/swarm/pss/doc.go deleted file mode 100644 index 462c82aaad3d..000000000000 --- a/swarm/pss/doc.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Pss provides devp2p functionality for swarm nodes without the need for a direct tcp connection between them. -// -// Messages are encapsulated in a devp2p message structure `PssMsg`. These capsules are forwarded from node to node using ordinary tcp devp2p until it reaches its destination: The node or nodes who can successfully decrypt the message. -// -// Routing of messages is done using swarm's own kademlia routing. Optionally routing can be turned off, forcing the message to be sent to all peers, similar to the behavior of the whisper protocol. -// -// Pss is intended for messages of limited size, typically a couple of Kbytes at most. The messages themselves can be anything at all; complex data structures or non-descript byte sequences. -// -// Documentation can be found in the README file. -// -// For the current state and roadmap of pss development please see https://github.com/ethersphere/swarm/wiki/swarm-dev-progress. -// -// Please report issues on https://github.com/ethersphere/go-ethereum -// -// Feel free to ask questions in https://gitter.im/ethersphere/pss -// -// TOPICS -// -// An encrypted envelope of a pss messages always contains a Topic. This is pss' way of determining what action to take on the message. The topic is only visible for the node(s) who can decrypt the message. -// -// This "topic" is not like the subject of an email message, but a hash-like arbitrary 4 byte value. A valid topic can be generated using the `pss_*ToTopic` API methods. -// -// IDENTITY IN PSS -// -// Pss aims to achieve perfect darkness. That means that the minimum requirement for two nodes to communicate using pss is a shared secret. This secret can be an arbitrary byte slice, or a ECDSA keypair. -// -// Peer keys can manually be added to the pss node through its API calls `pss_setPeerPublicKey` and `pss_setSymmetricKey`. Keys are always coupled with a topic, and the keys will only be valid for these topics. -// -// CONNECTIONS -// -// A "connection" in pss is a purely virtual construct. There is no mechanisms in place to ensure that the remote peer actually is there. In fact, "adding" a peer involves merely the node's opinion that the peer is there. It may issue messages to that remote peer to a directly connected peer, which in turn passes it on. But if it is not present on the network - or if there is no route to it - the message will never reach its destination through mere forwarding. -// -// When implementing the devp2p protocol stack, the "adding" of a remote peer is a prerequisite for the side actually initiating the protocol communication. Adding a peer in effect "runs" the protocol on that peer, and adds an internal mapping between a topic and that peer. It also enables sending and receiving messages using the main io-construct in devp2p - the p2p.MsgReadWriter. -// -// Under the hood, pss implements its own MsgReadWriter, which bridges MsgReadWriter.WriteMsg with Pss.SendRaw, and deftly adds an InjectMsg method which pipes incoming messages to appear on the MsgReadWriter.ReadMsg channel. -// -// An incoming connection is nothing more than an actual PssMsg appearing with a certain Topic. If a Handler har been registered to that Topic, the message will be passed to it. This constitutes a "new" connection if: -// -// - The pss node never called AddPeer with this combination of remote peer address and topic, and -// -// - The pss node never received a PssMsg from this remote peer with this specific Topic before. -// -// If it is a "new" connection, the protocol will be "run" on the remote peer, in the same manner as if it was pre-emptively added. -// -package pss diff --git a/swarm/pss/forwarding_test.go b/swarm/pss/forwarding_test.go deleted file mode 100644 index 746d4dc40451..000000000000 --- a/swarm/pss/forwarding_test.go +++ /dev/null @@ -1,357 +0,0 @@ -package pss - -import ( - "fmt" - "math/rand" - "testing" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pot" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -type testCase struct { - name string - recipient []byte - peers []pot.Address - expected []int - exclusive bool - nFails int - success bool - errors string -} - -var testCases []testCase - -// the purpose of this test is to see that pss.forward() function correctly -// selects the peers for message forwarding, depending on the message address -// and kademlia constellation. -func TestForwardBasic(t *testing.T) { - baseAddrBytes := make([]byte, 32) - for i := 0; i < len(baseAddrBytes); i++ { - baseAddrBytes[i] = 0xFF - } - var c testCase - base := pot.NewAddressFromBytes(baseAddrBytes) - var peerAddresses []pot.Address - const depth = 10 - for i := 0; i <= depth; i++ { - // add two peers for each proximity order - a := pot.RandomAddressAt(base, i) - peerAddresses = append(peerAddresses, a) - a = pot.RandomAddressAt(base, i) - peerAddresses = append(peerAddresses, a) - } - - // skip one level, add one peer at one level deeper. - // as a result, we will have an edge case of three peers in nearest neighbours' bin. - peerAddresses = append(peerAddresses, pot.RandomAddressAt(base, depth+2)) - - kad := network.NewKademlia(base[:], network.NewKadParams()) - ps := createPss(t, kad) - defer ps.Stop() - addPeers(kad, peerAddresses) - - const firstNearest = depth * 2 // shallowest peer in the nearest neighbours' bin - nearestNeighbours := []int{firstNearest, firstNearest + 1, firstNearest + 2} - var all []int // indices of all the peers - for i := 0; i < len(peerAddresses); i++ { - all = append(all, i) - } - - for i := 0; i < len(peerAddresses); i++ { - // send msg directly to the known peers (recipient address == peer address) - c = testCase{ - name: fmt.Sprintf("Send direct to known, id: [%d]", i), - recipient: peerAddresses[i][:], - peers: peerAddresses, - expected: []int{i}, - exclusive: false, - } - testCases = append(testCases, c) - } - - for i := 0; i < firstNearest; i++ { - // send random messages with proximity orders, corresponding to PO of each bin, - // with one peer being closer to the recipient address - a := pot.RandomAddressAt(peerAddresses[i], 64) - c = testCase{ - name: fmt.Sprintf("Send random to each PO, id: [%d]", i), - recipient: a[:], - peers: peerAddresses, - expected: []int{i}, - exclusive: false, - } - testCases = append(testCases, c) - } - - for i := 0; i < firstNearest; i++ { - // send random messages with proximity orders, corresponding to PO of each bin, - // with random proximity relative to the recipient address - po := i / 2 - a := pot.RandomAddressAt(base, po) - c = testCase{ - name: fmt.Sprintf("Send direct to known, id: [%d]", i), - recipient: a[:], - peers: peerAddresses, - expected: []int{po * 2, po*2 + 1}, - exclusive: true, - } - testCases = append(testCases, c) - } - - for i := firstNearest; i < len(peerAddresses); i++ { - // recipient address falls into the nearest neighbours' bin - a := pot.RandomAddressAt(base, i) - c = testCase{ - name: fmt.Sprintf("recipient address falls into the nearest neighbours' bin, id: [%d]", i), - recipient: a[:], - peers: peerAddresses, - expected: nearestNeighbours, - exclusive: false, - } - testCases = append(testCases, c) - } - - // send msg with proximity order much deeper than the deepest nearest neighbour - a2 := pot.RandomAddressAt(base, 77) - c = testCase{ - name: "proximity order much deeper than the deepest nearest neighbour", - recipient: a2[:], - peers: peerAddresses, - expected: nearestNeighbours, - exclusive: false, - } - testCases = append(testCases, c) - - // test with partial addresses - const part = 12 - - for i := 0; i < firstNearest; i++ { - // send messages with partial address falling into different proximity orders - po := i / 2 - if i%8 != 0 { - c = testCase{ - name: fmt.Sprintf("partial address falling into different proximity orders, id: [%d]", i), - recipient: peerAddresses[i][:i], - peers: peerAddresses, - expected: []int{po * 2, po*2 + 1}, - exclusive: true, - } - testCases = append(testCases, c) - } - c = testCase{ - name: fmt.Sprintf("extended partial address falling into different proximity orders, id: [%d]", i), - recipient: peerAddresses[i][:part], - peers: peerAddresses, - expected: []int{po * 2, po*2 + 1}, - exclusive: true, - } - testCases = append(testCases, c) - } - - for i := firstNearest; i < len(peerAddresses); i++ { - // partial address falls into the nearest neighbours' bin - c = testCase{ - name: fmt.Sprintf("partial address falls into the nearest neighbours' bin, id: [%d]", i), - recipient: peerAddresses[i][:part], - peers: peerAddresses, - expected: nearestNeighbours, - exclusive: false, - } - testCases = append(testCases, c) - } - - // partial address with proximity order deeper than any of the nearest neighbour - a3 := pot.RandomAddressAt(base, part) - c = testCase{ - name: "partial address with proximity order deeper than any of the nearest neighbour", - recipient: a3[:part], - peers: peerAddresses, - expected: nearestNeighbours, - exclusive: false, - } - testCases = append(testCases, c) - - // special cases where partial address matches a large group of peers - - // zero bytes of address is given, msg should be delivered to all the peers - c = testCase{ - name: "zero bytes of address is given", - recipient: []byte{}, - peers: peerAddresses, - expected: all, - exclusive: false, - } - testCases = append(testCases, c) - - // luminous radius of 8 bits, proximity order 8 - indexAtPo8 := 16 - c = testCase{ - name: "luminous radius of 8 bits", - recipient: []byte{0xFF}, - peers: peerAddresses, - expected: all[indexAtPo8:], - exclusive: false, - } - testCases = append(testCases, c) - - // luminous radius of 256 bits, proximity order 8 - a4 := pot.Address{} - a4[0] = 0xFF - c = testCase{ - name: "luminous radius of 256 bits", - recipient: a4[:], - peers: peerAddresses, - expected: []int{indexAtPo8, indexAtPo8 + 1}, - exclusive: true, - } - testCases = append(testCases, c) - - // check correct behaviour in case send fails - for i := 2; i < firstNearest-3; i += 2 { - po := i / 2 - // send random messages with proximity orders, corresponding to PO of each bin, - // with different numbers of failed attempts. - // msg should be received by only one of the deeper peers. - a := pot.RandomAddressAt(base, po) - c = testCase{ - name: fmt.Sprintf("Send direct to known, id: [%d]", i), - recipient: a[:], - peers: peerAddresses, - expected: all[i+1:], - exclusive: true, - nFails: rand.Int()%3 + 2, - } - testCases = append(testCases, c) - } - - for _, c := range testCases { - testForwardMsg(t, ps, &c) - } -} - -// this function tests the forwarding of a single message. the recipient address is passed as param, -// along with addresses of all peers, and indices of those peers which are expected to receive the message. -func testForwardMsg(t *testing.T, ps *Pss, c *testCase) { - recipientAddr := c.recipient - peers := c.peers - expected := c.expected - exclusive := c.exclusive - nFails := c.nFails - tries := 0 // number of previous failed tries - - resultMap := make(map[pot.Address]int) - - defer func() { sendFunc = sendMsg }() - sendFunc = func(_ *Pss, sp *network.Peer, _ *PssMsg) bool { - if tries < nFails { - tries++ - return false - } - a := pot.NewAddressFromBytes(sp.Address()) - resultMap[a]++ - return true - } - - msg := newTestMsg(recipientAddr) - ps.forward(msg) - - // check test results - var fail bool - precision := len(recipientAddr) - if precision > 4 { - precision = 4 - } - s := fmt.Sprintf("test [%s]\nmsg address: %x..., radius: %d", c.name, recipientAddr[:precision], 8*len(recipientAddr)) - - // false negatives (expected message didn't reach peer) - if exclusive { - var cnt int - for _, i := range expected { - a := peers[i] - cnt += resultMap[a] - resultMap[a] = 0 - } - if cnt != 1 { - s += fmt.Sprintf("\n%d messages received by %d peers with indices: [%v]", cnt, len(expected), expected) - fail = true - } - } else { - for _, i := range expected { - a := peers[i] - received := resultMap[a] - if received != 1 { - s += fmt.Sprintf("\npeer number %d [%x...] received %d messages", i, a[:4], received) - fail = true - } - resultMap[a] = 0 - } - } - - // false positives (unexpected message reached peer) - for k, v := range resultMap { - if v != 0 { - // find the index of the false positive peer - var j int - for j = 0; j < len(peers); j++ { - if peers[j] == k { - break - } - } - s += fmt.Sprintf("\npeer number %d [%x...] received %d messages", j, k[:4], v) - fail = true - } - } - - if fail { - t.Fatal(s) - } -} - -func addPeers(kad *network.Kademlia, addresses []pot.Address) { - for _, a := range addresses { - p := newTestDiscoveryPeer(a, kad) - kad.On(p) - } -} - -func createPss(t *testing.T, kad *network.Kademlia) *Pss { - privKey, err := crypto.GenerateKey() - pssp := NewPssParams().WithPrivateKey(privKey) - ps, err := NewPss(kad, pssp) - if err != nil { - t.Fatal(err.Error()) - } - return ps -} - -func newTestDiscoveryPeer(addr pot.Address, kad *network.Kademlia) *network.Peer { - rw := &p2p.MsgPipeRW{} - p := p2p.NewPeer(enode.ID{}, "test", []p2p.Cap{}) - pp := protocols.NewPeer(p, rw, &protocols.Spec{}) - bp := &network.BzzPeer{ - Peer: pp, - BzzAddr: &network.BzzAddr{ - OAddr: addr.Bytes(), - UAddr: []byte(fmt.Sprintf("%x", addr[:])), - }, - } - return network.NewPeer(bp, kad) -} - -func newTestMsg(addr []byte) *PssMsg { - msg := newPssMsg(&msgParams{}) - msg.To = addr[:] - msg.Expire = uint32(time.Now().Add(time.Second * 60).Unix()) - msg.Payload = &whisper.Envelope{ - Topic: [4]byte{}, - Data: []byte("i have nothing to hide"), - } - return msg -} diff --git a/swarm/pss/handshake.go b/swarm/pss/handshake.go deleted file mode 100644 index bb67b51563f2..000000000000 --- a/swarm/pss/handshake.go +++ /dev/null @@ -1,566 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !nopsshandshake - -package pss - -import ( - "context" - "errors" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" -) - -const ( - IsActiveHandshake = true -) - -var ( - ctrlSingleton *HandshakeController -) - -const ( - defaultSymKeyRequestTimeout = 1000 * 8 // max wait ms to receive a response to a handshake symkey request - defaultSymKeyExpiryTimeout = 1000 * 10 // ms to wait before allowing garbage collection of an expired symkey - defaultSymKeySendLimit = 256 // amount of messages a symkey is valid for - defaultSymKeyCapacity = 4 // max number of symkeys to store/send simultaneously -) - -// symmetric key exchange message payload -type handshakeMsg struct { - From []byte - Limit uint16 - Keys [][]byte - Request uint8 - Topic Topic -} - -// internal representation of an individual symmetric key -type handshakeKey struct { - symKeyID *string - pubKeyID *string - limit uint16 - count uint16 - expiredAt time.Time -} - -// container for all in- and outgoing keys -// for one particular peer (public key) and topic -type handshake struct { - outKeys []handshakeKey - inKeys []handshakeKey -} - -// Initialization parameters for the HandshakeController -// -// SymKeyRequestExpiry: Timeout for waiting for a handshake reply -// (default 8000 ms) -// -// SymKeySendLimit: Amount of messages symmetric keys issues by -// this node is valid for (default 256) -// -// SymKeyCapacity: Ideal (and maximum) amount of symmetric keys -// held per direction per peer (default 4) -type HandshakeParams struct { - SymKeyRequestTimeout time.Duration - SymKeyExpiryTimeout time.Duration - SymKeySendLimit uint16 - SymKeyCapacity uint8 -} - -// Sane defaults for HandshakeController initialization -func NewHandshakeParams() *HandshakeParams { - return &HandshakeParams{ - SymKeyRequestTimeout: defaultSymKeyRequestTimeout * time.Millisecond, - SymKeyExpiryTimeout: defaultSymKeyExpiryTimeout * time.Millisecond, - SymKeySendLimit: defaultSymKeySendLimit, - SymKeyCapacity: defaultSymKeyCapacity, - } -} - -// Singleton object enabling semi-automatic Diffie-Hellman -// exchange of ephemeral symmetric keys -type HandshakeController struct { - pss *Pss - keyC map[string]chan []string // adds a channel to report when a handshake succeeds - lock sync.Mutex - symKeyRequestTimeout time.Duration - symKeyExpiryTimeout time.Duration - symKeySendLimit uint16 - symKeyCapacity uint8 - symKeyIndex map[string]*handshakeKey - handshakes map[string]map[Topic]*handshake - deregisterFuncs map[Topic]func() -} - -// Attach HandshakeController to pss node -// -// Must be called before starting the pss node service -func SetHandshakeController(pss *Pss, params *HandshakeParams) error { - ctrl := &HandshakeController{ - pss: pss, - keyC: make(map[string]chan []string), - symKeyRequestTimeout: params.SymKeyRequestTimeout, - symKeyExpiryTimeout: params.SymKeyExpiryTimeout, - symKeySendLimit: params.SymKeySendLimit, - symKeyCapacity: params.SymKeyCapacity, - symKeyIndex: make(map[string]*handshakeKey), - handshakes: make(map[string]map[Topic]*handshake), - deregisterFuncs: make(map[Topic]func()), - } - api := &HandshakeAPI{ - namespace: "pss", - ctrl: ctrl, - } - pss.addAPI(rpc.API{ - Namespace: api.namespace, - Version: "0.2", - Service: api, - Public: true, - }) - ctrlSingleton = ctrl - return nil -} - -// Return all unexpired symmetric keys from store by -// peer (public key), topic and specified direction -func (ctl *HandshakeController) validKeys(pubkeyid string, topic *Topic, in bool) (validkeys []*string) { - ctl.lock.Lock() - defer ctl.lock.Unlock() - now := time.Now() - if _, ok := ctl.handshakes[pubkeyid]; !ok { - return []*string{} - } else if _, ok := ctl.handshakes[pubkeyid][*topic]; !ok { - return []*string{} - } - var keystore *[]handshakeKey - if in { - keystore = &(ctl.handshakes[pubkeyid][*topic].inKeys) - } else { - keystore = &(ctl.handshakes[pubkeyid][*topic].outKeys) - } - - for _, key := range *keystore { - if key.limit <= key.count { - ctl.releaseKey(*key.symKeyID, topic) - } else if !key.expiredAt.IsZero() && key.expiredAt.Before(now) { - ctl.releaseKey(*key.symKeyID, topic) - } else { - validkeys = append(validkeys, key.symKeyID) - } - } - return -} - -// Add all given symmetric keys with validity limits to store by -// peer (public key), topic and specified direction -func (ctl *HandshakeController) updateKeys(pubkeyid string, topic *Topic, in bool, symkeyids []string, limit uint16) { - ctl.lock.Lock() - defer ctl.lock.Unlock() - if _, ok := ctl.handshakes[pubkeyid]; !ok { - ctl.handshakes[pubkeyid] = make(map[Topic]*handshake) - - } - if ctl.handshakes[pubkeyid][*topic] == nil { - ctl.handshakes[pubkeyid][*topic] = &handshake{} - } - var keystore *[]handshakeKey - expire := time.Now() - if in { - keystore = &(ctl.handshakes[pubkeyid][*topic].inKeys) - } else { - keystore = &(ctl.handshakes[pubkeyid][*topic].outKeys) - expire = expire.Add(time.Millisecond * ctl.symKeyExpiryTimeout) - } - for _, storekey := range *keystore { - storekey.expiredAt = expire - } - for i := 0; i < len(symkeyids); i++ { - storekey := handshakeKey{ - symKeyID: &symkeyids[i], - pubKeyID: &pubkeyid, - limit: limit, - } - *keystore = append(*keystore, storekey) - ctl.pss.symKeyPool[*storekey.symKeyID][*topic].protected = true - } - for i := 0; i < len(*keystore); i++ { - ctl.symKeyIndex[*(*keystore)[i].symKeyID] = &((*keystore)[i]) - } -} - -// Expire a symmetric key, making it elegible for garbage collection -func (ctl *HandshakeController) releaseKey(symkeyid string, topic *Topic) bool { - if ctl.symKeyIndex[symkeyid] == nil { - log.Debug("no symkey", "symkeyid", symkeyid) - return false - } - ctl.symKeyIndex[symkeyid].expiredAt = time.Now() - log.Debug("handshake release", "symkeyid", symkeyid) - return true -} - -// Checks all symmetric keys in given direction(s) by -// specified peer (public key) and topic for expiry. -// Expired means: -// - expiry timestamp is set, and grace period is exceeded -// - message validity limit is reached -func (ctl *HandshakeController) cleanHandshake(pubkeyid string, topic *Topic, in bool, out bool) int { - ctl.lock.Lock() - defer ctl.lock.Unlock() - var deletecount int - var deletes []string - now := time.Now() - handshake := ctl.handshakes[pubkeyid][*topic] - log.Debug("handshake clean", "pubkey", pubkeyid, "topic", topic) - if in { - for i, key := range handshake.inKeys { - if key.expiredAt.Before(now) || (key.expiredAt.IsZero() && key.limit <= key.count) { - log.Trace("handshake in clean remove", "symkeyid", *key.symKeyID) - deletes = append(deletes, *key.symKeyID) - handshake.inKeys[deletecount] = handshake.inKeys[i] - deletecount++ - } - } - handshake.inKeys = handshake.inKeys[:len(handshake.inKeys)-deletecount] - } - if out { - deletecount = 0 - for i, key := range handshake.outKeys { - if key.expiredAt.Before(now) && (key.expiredAt.IsZero() && key.limit <= key.count) { - log.Trace("handshake out clean remove", "symkeyid", *key.symKeyID) - deletes = append(deletes, *key.symKeyID) - handshake.outKeys[deletecount] = handshake.outKeys[i] - deletecount++ - } - } - handshake.outKeys = handshake.outKeys[:len(handshake.outKeys)-deletecount] - } - for _, keyid := range deletes { - delete(ctl.symKeyIndex, keyid) - ctl.pss.symKeyPool[keyid][*topic].protected = false - } - return len(deletes) -} - -// Runs cleanHandshake() on all peers and topics -func (ctl *HandshakeController) clean() { - peerpubkeys := ctl.handshakes - for pubkeyid, peertopics := range peerpubkeys { - for topic := range peertopics { - ctl.cleanHandshake(pubkeyid, &topic, true, true) - } - } -} - -// Passed as a PssMsg handler for the topic handshake is activated on -// Handles incoming key exchange messages and -// ccunts message usage by symmetric key (expiry limit control) -// Only returns error if key handler fails -func (ctl *HandshakeController) handler(msg []byte, p *p2p.Peer, asymmetric bool, symkeyid string) error { - if !asymmetric { - if ctl.symKeyIndex[symkeyid] != nil { - if ctl.symKeyIndex[symkeyid].count >= ctl.symKeyIndex[symkeyid].limit { - return fmt.Errorf("discarding message using expired key: %s", symkeyid) - } - ctl.symKeyIndex[symkeyid].count++ - log.Trace("increment symkey recv use", "symsymkeyid", symkeyid, "count", ctl.symKeyIndex[symkeyid].count, "limit", ctl.symKeyIndex[symkeyid].limit, "receiver", common.ToHex(crypto.FromECDSAPub(ctl.pss.PublicKey()))) - } - return nil - } - keymsg := &handshakeMsg{} - err := rlp.DecodeBytes(msg, keymsg) - if err == nil { - err := ctl.handleKeys(symkeyid, keymsg) - if err != nil { - log.Error("handlekeys fail", "error", err) - } - return err - } - return nil -} - -// Handle incoming key exchange message -// Add keys received from peer to store -// and enerate and send the amount of keys requested by peer -// -// TODO: -// - flood guard -// - keylength check -// - update address hint if: -// 1) leftmost bytes in new address do not match stored -// 2) else, if new address is longer -func (ctl *HandshakeController) handleKeys(pubkeyid string, keymsg *handshakeMsg) error { - // new keys from peer - if len(keymsg.Keys) > 0 { - log.Debug("received handshake keys", "pubkeyid", pubkeyid, "from", keymsg.From, "count", len(keymsg.Keys)) - var sendsymkeyids []string - for _, key := range keymsg.Keys { - sendsymkey := make([]byte, len(key)) - copy(sendsymkey, key) - sendsymkeyid, err := ctl.pss.setSymmetricKey(sendsymkey, keymsg.Topic, PssAddress(keymsg.From), false, false) - if err != nil { - return err - } - sendsymkeyids = append(sendsymkeyids, sendsymkeyid) - } - if len(sendsymkeyids) > 0 { - ctl.updateKeys(pubkeyid, &keymsg.Topic, false, sendsymkeyids, keymsg.Limit) - - ctl.alertHandshake(pubkeyid, sendsymkeyids) - } - } - - // peer request for keys - if keymsg.Request > 0 { - _, err := ctl.sendKey(pubkeyid, &keymsg.Topic, keymsg.Request) - if err != nil { - return err - } - } - - return nil -} - -// Send key exchange to peer (public key) valid for `topic` -// Will send number of keys specified by `keycount` with -// validity limits specified in `msglimit` -// If number of valid outgoing keys is less than the ideal/max -// amount, a request is sent for the amount of keys to make up -// the difference -func (ctl *HandshakeController) sendKey(pubkeyid string, topic *Topic, keycount uint8) ([]string, error) { - - var requestcount uint8 - to := PssAddress{} - if _, ok := ctl.pss.pubKeyPool[pubkeyid]; !ok { - return []string{}, errors.New("Invalid public key") - } else if psp, ok := ctl.pss.pubKeyPool[pubkeyid][*topic]; ok { - to = psp.address - } - - recvkeys := make([][]byte, keycount) - recvkeyids := make([]string, keycount) - ctl.lock.Lock() - if _, ok := ctl.handshakes[pubkeyid]; !ok { - ctl.handshakes[pubkeyid] = make(map[Topic]*handshake) - } - ctl.lock.Unlock() - - // check if buffer is not full - outkeys := ctl.validKeys(pubkeyid, topic, false) - if len(outkeys) < int(ctl.symKeyCapacity) { - //requestcount = uint8(self.symKeyCapacity - uint8(len(outkeys))) - requestcount = ctl.symKeyCapacity - } - // return if there's nothing to be accomplished - if requestcount == 0 && keycount == 0 { - return []string{}, nil - } - - // generate new keys to send - for i := 0; i < len(recvkeyids); i++ { - var err error - recvkeyids[i], err = ctl.pss.GenerateSymmetricKey(*topic, to, true) - if err != nil { - return []string{}, fmt.Errorf("set receive symkey fail (pubkey %x topic %x): %v", pubkeyid, topic, err) - } - recvkeys[i], err = ctl.pss.GetSymmetricKey(recvkeyids[i]) - if err != nil { - return []string{}, fmt.Errorf("GET Generated outgoing symkey fail (pubkey %x topic %x): %v", pubkeyid, topic, err) - } - } - ctl.updateKeys(pubkeyid, topic, true, recvkeyids, ctl.symKeySendLimit) - - // encode and send the message - recvkeymsg := &handshakeMsg{ - From: ctl.pss.BaseAddr(), - Keys: recvkeys, - Request: requestcount, - Limit: ctl.symKeySendLimit, - Topic: *topic, - } - log.Debug("sending our symkeys", "pubkey", pubkeyid, "symkeys", recvkeyids, "limit", ctl.symKeySendLimit, "requestcount", requestcount, "keycount", len(recvkeys)) - recvkeybytes, err := rlp.EncodeToBytes(recvkeymsg) - if err != nil { - return []string{}, fmt.Errorf("rlp keymsg encode fail: %v", err) - } - // if the send fails it means this public key is not registered for this particular address AND topic - err = ctl.pss.SendAsym(pubkeyid, *topic, recvkeybytes) - if err != nil { - return []string{}, fmt.Errorf("Send symkey failed: %v", err) - } - return recvkeyids, nil -} - -// Enables callback for keys received from a key exchange request -func (ctl *HandshakeController) alertHandshake(pubkeyid string, symkeys []string) chan []string { - if len(symkeys) > 0 { - if _, ok := ctl.keyC[pubkeyid]; ok { - ctl.keyC[pubkeyid] <- symkeys - close(ctl.keyC[pubkeyid]) - delete(ctl.keyC, pubkeyid) - } - return nil - } - if _, ok := ctl.keyC[pubkeyid]; !ok { - ctl.keyC[pubkeyid] = make(chan []string) - } - return ctl.keyC[pubkeyid] -} - -type HandshakeAPI struct { - namespace string - ctrl *HandshakeController -} - -// Initiate a handshake session for a peer (public key) and topic -// combination. -// -// If `sync` is set, the call will block until keys are received from peer, -// or if the handshake request times out -// -// If `flush` is set, the max amount of keys will be sent to the peer -// regardless of how many valid keys that currently exist in the store. -// -// Returns list of symmetric key ids that can be passed to pss.GetSymmetricKey() -// for retrieval of the symmetric key bytes themselves. -// -// Fails if the incoming symmetric key store is already full (and `flush` is false), -// or if the underlying key dispatcher fails -func (api *HandshakeAPI) Handshake(pubkeyid string, topic Topic, sync bool, flush bool) (keys []string, err error) { - var hsc chan []string - var keycount uint8 - if flush { - keycount = api.ctrl.symKeyCapacity - } else { - validkeys := api.ctrl.validKeys(pubkeyid, &topic, false) - keycount = api.ctrl.symKeyCapacity - uint8(len(validkeys)) - } - if keycount == 0 { - return keys, errors.New("Incoming symmetric key store is already full") - } - if sync { - hsc = api.ctrl.alertHandshake(pubkeyid, []string{}) - } - _, err = api.ctrl.sendKey(pubkeyid, &topic, keycount) - if err != nil { - return keys, err - } - if sync { - ctx, cancel := context.WithTimeout(context.Background(), api.ctrl.symKeyRequestTimeout) - defer cancel() - select { - case keys = <-hsc: - log.Trace("sync handshake response receive", "key", keys) - case <-ctx.Done(): - return []string{}, errors.New("timeout") - } - } - return keys, nil -} - -// Activate handshake functionality on a topic -func (api *HandshakeAPI) AddHandshake(topic Topic) error { - api.ctrl.deregisterFuncs[topic] = api.ctrl.pss.Register(&topic, NewHandler(api.ctrl.handler)) - return nil -} - -// Deactivate handshake functionality on a topic -func (api *HandshakeAPI) RemoveHandshake(topic *Topic) error { - if _, ok := api.ctrl.deregisterFuncs[*topic]; ok { - api.ctrl.deregisterFuncs[*topic]() - } - return nil -} - -// Returns all valid symmetric keys in store per peer (public key) -// and topic. -// -// The `in` and `out` parameters indicate for which direction(s) -// symmetric keys will be returned. -// If both are false, no keys (and no error) will be returned. -func (api *HandshakeAPI) GetHandshakeKeys(pubkeyid string, topic Topic, in bool, out bool) (keys []string, err error) { - if in { - for _, inkey := range api.ctrl.validKeys(pubkeyid, &topic, true) { - keys = append(keys, *inkey) - } - } - if out { - for _, outkey := range api.ctrl.validKeys(pubkeyid, &topic, false) { - keys = append(keys, *outkey) - } - } - return keys, nil -} - -// Returns the amount of messages the specified symmetric key -// is still valid for under the handshake scheme -func (api *HandshakeAPI) GetHandshakeKeyCapacity(symkeyid string) (uint16, error) { - storekey := api.ctrl.symKeyIndex[symkeyid] - if storekey == nil { - return 0, fmt.Errorf("invalid symkey id %s", symkeyid) - } - return storekey.limit - storekey.count, nil -} - -// Returns the byte representation of the public key in ascii hex -// associated with the given symmetric key -func (api *HandshakeAPI) GetHandshakePublicKey(symkeyid string) (string, error) { - storekey := api.ctrl.symKeyIndex[symkeyid] - if storekey == nil { - return "", fmt.Errorf("invalid symkey id %s", symkeyid) - } - return *storekey.pubKeyID, nil -} - -// Manually expire the given symkey -// -// If `flush` is set, garbage collection will be performed before returning. -// -// Returns true on successful removal, false otherwise -func (api *HandshakeAPI) ReleaseHandshakeKey(pubkeyid string, topic Topic, symkeyid string, flush bool) (removed bool, err error) { - removed = api.ctrl.releaseKey(symkeyid, &topic) - if removed && flush { - api.ctrl.cleanHandshake(pubkeyid, &topic, true, true) - } - return -} - -// Send symmetric message under the handshake scheme -// -// Overloads the pss.SendSym() API call, adding symmetric key usage count -// for message expiry control -func (api *HandshakeAPI) SendSym(symkeyid string, topic Topic, msg hexutil.Bytes) (err error) { - err = api.ctrl.pss.SendSym(symkeyid, topic, msg[:]) - if api.ctrl.symKeyIndex[symkeyid] != nil { - if api.ctrl.symKeyIndex[symkeyid].count >= api.ctrl.symKeyIndex[symkeyid].limit { - return errors.New("attempted send with expired key") - } - api.ctrl.symKeyIndex[symkeyid].count++ - log.Trace("increment symkey send use", "symkeyid", symkeyid, "count", api.ctrl.symKeyIndex[symkeyid].count, "limit", api.ctrl.symKeyIndex[symkeyid].limit, "receiver", common.ToHex(crypto.FromECDSAPub(api.ctrl.pss.PublicKey()))) - } - return err -} diff --git a/swarm/pss/handshake_test.go b/swarm/pss/handshake_test.go deleted file mode 100644 index 895163f301bf..000000000000 --- a/swarm/pss/handshake_test.go +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build foo - -package pss - -import ( - "strconv" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -// asymmetrical key exchange between two directly connected peers -// full address, partial address (8 bytes) and empty address -func TestHandshake(t *testing.T) { - t.Skip("handshakes are not adapted to current pss core code") - t.Run("32", testHandshake) - t.Run("8", testHandshake) - t.Run("0", testHandshake) -} - -func testHandshake(t *testing.T) { - - // how much of the address we will use - useHandshake = true - var addrsize int64 - var err error - addrsizestring := strings.Split(t.Name(), "/") - addrsize, _ = strconv.ParseInt(addrsizestring[1], 10, 0) - - // set up two nodes directly connected - // (we are not testing pss routing here) - clients, err := setupNetwork(2) - if err != nil { - t.Fatal(err) - } - - var topic string - err = clients[0].Call(&topic, "pss_stringToTopic", "foo:42") - if err != nil { - t.Fatal(err) - } - - var loaddr string - err = clients[0].Call(&loaddr, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - // "0x" = 2 bytes + addrsize address bytes which in hex is 2x length - loaddr = loaddr[:2+(addrsize*2)] - var roaddr string - err = clients[1].Call(&roaddr, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddr = roaddr[:2+(addrsize*2)] - log.Debug("addresses", "left", loaddr, "right", roaddr) - - // retrieve public key from pss instance - // set this public key reciprocally - var lpubkey string - err = clients[0].Call(&lpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 1 pubkey fail: %v", err) - } - var rpubkey string - err = clients[1].Call(&rpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 2 pubkey fail: %v", err) - } - - time.Sleep(time.Millisecond * 1000) // replace with hive healthy code - - // give each node its peer's public key - err = clients[0].Call(nil, "pss_setPeerPublicKey", rpubkey, topic, roaddr) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(nil, "pss_setPeerPublicKey", lpubkey, topic, loaddr) - if err != nil { - t.Fatal(err) - } - - // perform the handshake - // after this each side will have defaultSymKeyBufferCapacity symkeys each for in- and outgoing messages: - // L -> request 4 keys -> R - // L <- send 4 keys, request 4 keys <- R - // L -> send 4 keys -> R - // the call will fill the array with symkeys L needs for sending to R - err = clients[0].Call(nil, "pss_addHandshake", topic) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(nil, "pss_addHandshake", topic) - if err != nil { - t.Fatal(err) - } - - var lhsendsymkeyids []string - err = clients[0].Call(&lhsendsymkeyids, "pss_handshake", rpubkey, topic, true, true) - if err != nil { - t.Fatal(err) - } - - // make sure the r-node gets its keys - time.Sleep(time.Second) - - // check if we have 6 outgoing keys stored, and they match what was received from R - var lsendsymkeyids []string - err = clients[0].Call(&lsendsymkeyids, "pss_getHandshakeKeys", rpubkey, topic, false, true) - if err != nil { - t.Fatal(err) - } - m := 0 - for _, hid := range lhsendsymkeyids { - for _, lid := range lsendsymkeyids { - if lid == hid { - m++ - } - } - } - if m != defaultSymKeyCapacity { - t.Fatalf("buffer size mismatch, expected %d, have %d: %v", defaultSymKeyCapacity, m, lsendsymkeyids) - } - - // check if in- and outgoing keys on l-node and r-node match up and are in opposite categories (l recv = r send, l send = r recv) - var rsendsymkeyids []string - err = clients[1].Call(&rsendsymkeyids, "pss_getHandshakeKeys", lpubkey, topic, false, true) - if err != nil { - t.Fatal(err) - } - var lrecvsymkeyids []string - err = clients[0].Call(&lrecvsymkeyids, "pss_getHandshakeKeys", rpubkey, topic, true, false) - if err != nil { - t.Fatal(err) - } - var rrecvsymkeyids []string - err = clients[1].Call(&rrecvsymkeyids, "pss_getHandshakeKeys", lpubkey, topic, true, false) - if err != nil { - t.Fatal(err) - } - - // get outgoing symkeys in byte form from both sides - var lsendsymkeys []string - for _, id := range lsendsymkeyids { - var key string - err = clients[0].Call(&key, "pss_getSymmetricKey", id) - if err != nil { - t.Fatal(err) - } - lsendsymkeys = append(lsendsymkeys, key) - } - var rsendsymkeys []string - for _, id := range rsendsymkeyids { - var key string - err = clients[1].Call(&key, "pss_getSymmetricKey", id) - if err != nil { - t.Fatal(err) - } - rsendsymkeys = append(rsendsymkeys, key) - } - - // get incoming symkeys in byte form from both sides and compare - var lrecvsymkeys []string - for _, id := range lrecvsymkeyids { - var key string - err = clients[0].Call(&key, "pss_getSymmetricKey", id) - if err != nil { - t.Fatal(err) - } - match := false - for _, otherkey := range rsendsymkeys { - if otherkey == key { - match = true - } - } - if !match { - t.Fatalf("no match right send for left recv key %s", id) - } - lrecvsymkeys = append(lrecvsymkeys, key) - } - var rrecvsymkeys []string - for _, id := range rrecvsymkeyids { - var key string - err = clients[1].Call(&key, "pss_getSymmetricKey", id) - if err != nil { - t.Fatal(err) - } - match := false - for _, otherkey := range lsendsymkeys { - if otherkey == key { - match = true - } - } - if !match { - t.Fatalf("no match left send for right recv key %s", id) - } - rrecvsymkeys = append(rrecvsymkeys, key) - } - - // send new handshake request, should send no keys - err = clients[0].Call(nil, "pss_handshake", rpubkey, topic, false) - if err == nil { - t.Fatal("expected full symkey buffer error") - } - - // expire one key, send new handshake request - err = clients[0].Call(nil, "pss_releaseHandshakeKey", rpubkey, topic, lsendsymkeyids[0], true) - if err != nil { - t.Fatalf("release left send key %s fail: %v", lsendsymkeyids[0], err) - } - - var newlhsendkeyids []string - - // send new handshake request, should now receive one key - // check that it is not in previous right recv key array - err = clients[0].Call(&newlhsendkeyids, "pss_handshake", rpubkey, topic, true, false) - if err != nil { - t.Fatalf("handshake send fail: %v", err) - } else if len(newlhsendkeyids) != defaultSymKeyCapacity { - t.Fatalf("wrong receive count, expected 1, got %d", len(newlhsendkeyids)) - } - - var newlrecvsymkey string - err = clients[0].Call(&newlrecvsymkey, "pss_getSymmetricKey", newlhsendkeyids[0]) - if err != nil { - t.Fatal(err) - } - var rmatchsymkeyid *string - for i, id := range rrecvsymkeyids { - var key string - err = clients[1].Call(&key, "pss_getSymmetricKey", id) - if err != nil { - t.Fatal(err) - } - if newlrecvsymkey == key { - rmatchsymkeyid = &rrecvsymkeyids[i] - } - } - if rmatchsymkeyid != nil { - t.Fatalf("right sent old key id %s in second handshake", *rmatchsymkeyid) - } - - // clean the pss core keystore. Should clean the key released earlier - var cleancount int - clients[0].Call(&cleancount, "psstest_clean") - if cleancount > 1 { - t.Fatalf("pss clean count mismatch; expected 1, got %d", cleancount) - } -} diff --git a/swarm/pss/keystore.go b/swarm/pss/keystore.go deleted file mode 100644 index 510d21bcfdc6..000000000000 --- a/swarm/pss/keystore.go +++ /dev/null @@ -1,281 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "crypto/ecdsa" - "errors" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -type KeyStore struct { - w *whisper.Whisper // key and encryption backend - - mx sync.RWMutex - pubKeyPool map[string]map[Topic]*pssPeer // mapping of hex public keys to peer address by topic. - symKeyPool map[string]map[Topic]*pssPeer // mapping of symkeyids to peer address by topic. - symKeyDecryptCache []*string // fast lookup of symkeys recently used for decryption; last used is on top of stack - symKeyDecryptCacheCursor int // modular cursor pointing to last used, wraps on symKeyDecryptCache array -} - -func loadKeyStore() *KeyStore { - return &KeyStore{ - w: whisper.New(&whisper.DefaultConfig), - - pubKeyPool: make(map[string]map[Topic]*pssPeer), - symKeyPool: make(map[string]map[Topic]*pssPeer), - symKeyDecryptCache: make([]*string, defaultSymKeyCacheCapacity), - } -} - -func (ks *KeyStore) isSymKeyStored(key string) bool { - ks.mx.RLock() - defer ks.mx.RUnlock() - var ok bool - _, ok = ks.symKeyPool[key] - return ok -} - -func (ks *KeyStore) isPubKeyStored(key string) bool { - ks.mx.RLock() - defer ks.mx.RUnlock() - var ok bool - _, ok = ks.pubKeyPool[key] - return ok -} - -func (ks *KeyStore) getPeerSym(symkeyid string, topic Topic) (*pssPeer, bool) { - ks.mx.RLock() - defer ks.mx.RUnlock() - psp, ok := ks.symKeyPool[symkeyid][topic] - return psp, ok -} - -func (ks *KeyStore) getPeerPub(pubkeyid string, topic Topic) (*pssPeer, bool) { - ks.mx.RLock() - defer ks.mx.RUnlock() - psp, ok := ks.pubKeyPool[pubkeyid][topic] - return psp, ok -} - -// Links a peer ECDSA public key to a topic. -// This is required for asymmetric message exchange on the given topic. -// The value in `address` will be used as a routing hint for the public key / topic association. -func (ks *KeyStore) SetPeerPublicKey(pubkey *ecdsa.PublicKey, topic Topic, address PssAddress) error { - if err := validateAddress(address); err != nil { - return err - } - pubkeybytes := crypto.FromECDSAPub(pubkey) - if len(pubkeybytes) == 0 { - return fmt.Errorf("invalid public key: %v", pubkey) - } - pubkeyid := common.ToHex(pubkeybytes) - psp := &pssPeer{ - address: address, - } - ks.mx.Lock() - if _, ok := ks.pubKeyPool[pubkeyid]; !ok { - ks.pubKeyPool[pubkeyid] = make(map[Topic]*pssPeer) - } - ks.pubKeyPool[pubkeyid][topic] = psp - ks.mx.Unlock() - log.Trace("added pubkey", "pubkeyid", pubkeyid, "topic", topic, "address", address) - return nil -} - -// adds a symmetric key to the pss key pool, and optionally adds the key to the -// collection of keys used to attempt symmetric decryption of incoming messages -func (ks *KeyStore) addSymmetricKeyToPool(keyid string, topic Topic, address PssAddress, addtocache bool, protected bool) { - psp := &pssPeer{ - address: address, - protected: protected, - } - ks.mx.Lock() - if _, ok := ks.symKeyPool[keyid]; !ok { - ks.symKeyPool[keyid] = make(map[Topic]*pssPeer) - } - ks.symKeyPool[keyid][topic] = psp - ks.mx.Unlock() - if addtocache { - ks.symKeyDecryptCacheCursor++ - ks.symKeyDecryptCache[ks.symKeyDecryptCacheCursor%cap(ks.symKeyDecryptCache)] = &keyid - } -} - -// Returns all recorded topic and address combination for a specific public key -func (ks *KeyStore) GetPublickeyPeers(keyid string) (topic []Topic, address []PssAddress, err error) { - ks.mx.RLock() - defer ks.mx.RUnlock() - for t, peer := range ks.pubKeyPool[keyid] { - topic = append(topic, t) - address = append(address, peer.address) - } - return topic, address, nil -} - -func (ks *KeyStore) getPeerAddress(keyid string, topic Topic) (PssAddress, error) { - ks.mx.RLock() - defer ks.mx.RUnlock() - if peers, ok := ks.pubKeyPool[keyid]; ok { - if t, ok := peers[topic]; ok { - return t.address, nil - } - } - return nil, fmt.Errorf("peer with pubkey %s, topic %x not found", keyid, topic) -} - -// Attempt to decrypt, validate and unpack a symmetrically encrypted message. -// If successful, returns the unpacked whisper ReceivedMessage struct -// encapsulating the decrypted message, and the whisper backend id -// of the symmetric key used to decrypt the message. -// It fails if decryption of the message fails or if the message is corrupted. -func (ks *KeyStore) processSym(envelope *whisper.Envelope) (*whisper.ReceivedMessage, string, PssAddress, error) { - metrics.GetOrRegisterCounter("pss.process.sym", nil).Inc(1) - - for i := ks.symKeyDecryptCacheCursor; i > ks.symKeyDecryptCacheCursor-cap(ks.symKeyDecryptCache) && i > 0; i-- { - symkeyid := ks.symKeyDecryptCache[i%cap(ks.symKeyDecryptCache)] - symkey, err := ks.w.GetSymKey(*symkeyid) - if err != nil { - continue - } - recvmsg, err := envelope.OpenSymmetric(symkey) - if err != nil { - continue - } - if !recvmsg.ValidateAndParse() { - return nil, "", nil, errors.New("symmetrically encrypted message has invalid signature or is corrupt") - } - var from PssAddress - ks.mx.RLock() - if ks.symKeyPool[*symkeyid][Topic(envelope.Topic)] != nil { - from = ks.symKeyPool[*symkeyid][Topic(envelope.Topic)].address - } - ks.mx.RUnlock() - ks.symKeyDecryptCacheCursor++ - ks.symKeyDecryptCache[ks.symKeyDecryptCacheCursor%cap(ks.symKeyDecryptCache)] = symkeyid - return recvmsg, *symkeyid, from, nil - } - return nil, "", nil, errors.New("could not decrypt message") -} - -// Attempt to decrypt, validate and unpack an asymmetrically encrypted message. -// If successful, returns the unpacked whisper ReceivedMessage struct -// encapsulating the decrypted message, and the byte representation of -// the public key used to decrypt the message. -// It fails if decryption of message fails, or if the message is corrupted. -func (ks *Pss) processAsym(envelope *whisper.Envelope) (*whisper.ReceivedMessage, string, PssAddress, error) { - metrics.GetOrRegisterCounter("pss.process.asym", nil).Inc(1) - - recvmsg, err := envelope.OpenAsymmetric(ks.privateKey) - if err != nil { - return nil, "", nil, fmt.Errorf("could not decrypt message: %s", err) - } - // check signature (if signed), strip padding - if !recvmsg.ValidateAndParse() { - return nil, "", nil, errors.New("invalid message") - } - pubkeyid := common.ToHex(crypto.FromECDSAPub(recvmsg.Src)) - var from PssAddress - ks.mx.RLock() - if ks.pubKeyPool[pubkeyid][Topic(envelope.Topic)] != nil { - from = ks.pubKeyPool[pubkeyid][Topic(envelope.Topic)].address - } - ks.mx.RUnlock() - return recvmsg, pubkeyid, from, nil -} - -// Symkey garbage collection -// a key is removed if: -// - it is not marked as protected -// - it is not in the incoming decryption cache -func (ks *Pss) cleanKeys() (count int) { - for keyid, peertopics := range ks.symKeyPool { - var expiredtopics []Topic - for topic, psp := range peertopics { - if psp.protected { - continue - } - - var match bool - for i := ks.symKeyDecryptCacheCursor; i > ks.symKeyDecryptCacheCursor-cap(ks.symKeyDecryptCache) && i > 0; i-- { - cacheid := ks.symKeyDecryptCache[i%cap(ks.symKeyDecryptCache)] - if *cacheid == keyid { - match = true - } - } - if !match { - expiredtopics = append(expiredtopics, topic) - } - } - for _, topic := range expiredtopics { - ks.mx.Lock() - delete(ks.symKeyPool[keyid], topic) - log.Trace("symkey cleanup deletion", "symkeyid", keyid, "topic", topic, "val", ks.symKeyPool[keyid]) - ks.mx.Unlock() - count++ - } - } - return count -} - -// Automatically generate a new symkey for a topic and address hint -func (ks *KeyStore) GenerateSymmetricKey(topic Topic, address PssAddress, addToCache bool) (string, error) { - keyid, err := ks.w.GenerateSymKey() - if err == nil { - ks.addSymmetricKeyToPool(keyid, topic, address, addToCache, false) - } - return keyid, err -} - -// Returns a symmetric key byte sequence stored in the whisper backend by its unique id. -// Passes on the error value from the whisper backend. -func (ks *KeyStore) GetSymmetricKey(symkeyid string) ([]byte, error) { - return ks.w.GetSymKey(symkeyid) -} - -// Links a peer symmetric key (arbitrary byte sequence) to a topic. -// -// This is required for symmetrically encrypted message exchange on the given topic. -// -// The key is stored in the whisper backend. -// -// If addtocache is set to true, the key will be added to the cache of keys -// used to attempt symmetric decryption of incoming messages. -// -// Returns a string id that can be used to retrieve the key bytes -// from the whisper backend (see pss.GetSymmetricKey()) -func (ks *KeyStore) SetSymmetricKey(key []byte, topic Topic, address PssAddress, addtocache bool) (string, error) { - if err := validateAddress(address); err != nil { - return "", err - } - return ks.setSymmetricKey(key, topic, address, addtocache, true) -} - -func (ks *KeyStore) setSymmetricKey(key []byte, topic Topic, address PssAddress, addtocache bool, protected bool) (string, error) { - keyid, err := ks.w.AddSymKeyDirect(key) - if err == nil { - ks.addSymmetricKeyToPool(keyid, topic, address, addtocache, protected) - } - return keyid, err -} diff --git a/swarm/pss/notify/notify.go b/swarm/pss/notify/notify.go deleted file mode 100644 index e9d40dc321e1..000000000000 --- a/swarm/pss/notify/notify.go +++ /dev/null @@ -1,394 +0,0 @@ -package notify - -import ( - "crypto/ecdsa" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/pss" -) - -const ( - // sent from requester to updater to request start of notifications - MsgCodeStart = iota - - // sent from updater to requester, contains a notification plus a new symkey to replace the old - MsgCodeNotifyWithKey - - // sent from updater to requester, contains a notification - MsgCodeNotify - - // sent from requester to updater to request stop of notifications (currently unused) - MsgCodeStop - MsgCodeMax -) - -const ( - DefaultAddressLength = 1 - symKeyLength = 32 // this should be gotten from source -) - -var ( - // control topic is used before symmetric key issuance completes - controlTopic = pss.Topic{0x00, 0x00, 0x00, 0x01} -) - -// when code is MsgCodeStart, Payload is address -// when code is MsgCodeNotifyWithKey, Payload is notification | symkey -// when code is MsgCodeNotify, Payload is notification -// when code is MsgCodeStop, Payload is address -type Msg struct { - Code byte - Name []byte - Payload []byte - namestring string -} - -// NewMsg creates a new notification message object -func NewMsg(code byte, name string, payload []byte) *Msg { - return &Msg{ - Code: code, - Name: []byte(name), - Payload: payload, - namestring: name, - } -} - -// NewMsgFromPayload decodes a serialized message payload into a new notification message object -func NewMsgFromPayload(payload []byte) (*Msg, error) { - msg := &Msg{} - err := rlp.DecodeBytes(payload, msg) - if err != nil { - return nil, err - } - msg.namestring = string(msg.Name) - return msg, nil -} - -// a notifier has one sendBin entry for each address space it sends messages to -type sendBin struct { - address pss.PssAddress - symKeyId string - count int -} - -// represents a single notification service -// only subscription address bins that match the address of a notification client have entries. -type notifier struct { - bins map[string]*sendBin - topic pss.Topic // identifies the resource for pss receiver - threshold int // amount of address bytes used in bins - updateC <-chan []byte - quitC chan struct{} -} - -func (n *notifier) removeSubscription() { - n.quitC <- struct{}{} -} - -// represents an individual subscription made by a public key at a specific address/neighborhood -type subscription struct { - pubkeyId string - address pss.PssAddress - handler func(string, []byte) error -} - -// Controller is the interface to control, add and remove notification services and subscriptions -type Controller struct { - pss *pss.Pss - notifiers map[string]*notifier - subscriptions map[string]*subscription - mu sync.Mutex -} - -// NewController creates a new Controller object -func NewController(ps *pss.Pss) *Controller { - ctrl := &Controller{ - pss: ps, - notifiers: make(map[string]*notifier), - subscriptions: make(map[string]*subscription), - } - ctrl.pss.Register(&controlTopic, pss.NewHandler(ctrl.Handler)) - return ctrl -} - -// IsActive is used to check if a notification service exists for a specified id string -// Returns true if exists, false if not -func (c *Controller) IsActive(name string) bool { - c.mu.Lock() - defer c.mu.Unlock() - return c.isActive(name) -} - -func (c *Controller) isActive(name string) bool { - _, ok := c.notifiers[name] - return ok -} - -// Subscribe is used by a client to request notifications from a notification service provider -// It will create a MsgCodeStart message and send asymmetrically to the provider using its public key and routing address -// The handler function is a callback that will be called when notifications are received -// Fails if the request pss cannot be sent or if the update message could not be serialized -func (c *Controller) Subscribe(name string, pubkey *ecdsa.PublicKey, address pss.PssAddress, handler func(string, []byte) error) error { - c.mu.Lock() - defer c.mu.Unlock() - msg := NewMsg(MsgCodeStart, name, c.pss.BaseAddr()) - c.pss.SetPeerPublicKey(pubkey, controlTopic, address) - pubkeyId := hexutil.Encode(crypto.FromECDSAPub(pubkey)) - smsg, err := rlp.EncodeToBytes(msg) - if err != nil { - return err - } - err = c.pss.SendAsym(pubkeyId, controlTopic, smsg) - if err != nil { - return err - } - c.subscriptions[name] = &subscription{ - pubkeyId: pubkeyId, - address: address, - handler: handler, - } - return nil -} - -// Unsubscribe, perhaps unsurprisingly, undoes the effects of Subscribe -// Fails if the subscription does not exist, if the request pss cannot be sent or if the update message could not be serialized -func (c *Controller) Unsubscribe(name string) error { - c.mu.Lock() - defer c.mu.Unlock() - sub, ok := c.subscriptions[name] - if !ok { - return fmt.Errorf("Unknown subscription '%s'", name) - } - msg := NewMsg(MsgCodeStop, name, sub.address) - smsg, err := rlp.EncodeToBytes(msg) - if err != nil { - return err - } - err = c.pss.SendAsym(sub.pubkeyId, controlTopic, smsg) - if err != nil { - return err - } - delete(c.subscriptions, name) - return nil -} - -// NewNotifier is used by a notification service provider to create a new notification service -// It takes a name as identifier for the resource, a threshold indicating the granularity of the subscription address bin -// It then starts an event loop which listens to the supplied update channel and executes notifications on channel receives -// Fails if a notifier already is registered on the name -//func (c *Controller) NewNotifier(name string, threshold int, contentFunc func(string) ([]byte, error)) error { -func (c *Controller) NewNotifier(name string, threshold int, updateC <-chan []byte) (func(), error) { - c.mu.Lock() - if c.isActive(name) { - c.mu.Unlock() - return nil, fmt.Errorf("Notification service %s already exists in controller", name) - } - quitC := make(chan struct{}) - c.notifiers[name] = ¬ifier{ - bins: make(map[string]*sendBin), - topic: pss.BytesToTopic([]byte(name)), - threshold: threshold, - updateC: updateC, - quitC: quitC, - //contentFunc: contentFunc, - } - c.mu.Unlock() - go func() { - for { - select { - case <-quitC: - return - case data := <-updateC: - c.notify(name, data) - } - } - }() - - return c.notifiers[name].removeSubscription, nil -} - -// RemoveNotifier is used to stop a notification service. -// It cancels the event loop listening to the notification provider's update channel -func (c *Controller) RemoveNotifier(name string) error { - c.mu.Lock() - defer c.mu.Unlock() - currentNotifier, ok := c.notifiers[name] - if !ok { - return fmt.Errorf("Unknown notification service %s", name) - } - currentNotifier.removeSubscription() - delete(c.notifiers, name) - return nil -} - -// Notify is called by a notification service provider to issue a new notification -// It takes the name of the notification service and the data to be sent. -// It fails if a notifier with this name does not exist or if data could not be serialized -// Note that it does NOT fail on failure to send a message -func (c *Controller) notify(name string, data []byte) error { - c.mu.Lock() - defer c.mu.Unlock() - if !c.isActive(name) { - return fmt.Errorf("Notification service %s doesn't exist", name) - } - msg := NewMsg(MsgCodeNotify, name, data) - smsg, err := rlp.EncodeToBytes(msg) - if err != nil { - return err - } - for _, m := range c.notifiers[name].bins { - log.Debug("sending pss notify", "name", name, "addr", fmt.Sprintf("%x", m.address), "topic", fmt.Sprintf("%x", c.notifiers[name].topic), "data", data) - go func(m *sendBin) { - err = c.pss.SendSym(m.symKeyId, c.notifiers[name].topic, smsg) - if err != nil { - log.Warn("Failed to send notify to addr %x: %v", m.address, err) - } - }(m) - } - return nil -} - -// check if we already have the bin -// if we do, retrieve the symkey from it and increment the count -// if we dont make a new symkey and a new bin entry -func (c *Controller) addToBin(ntfr *notifier, address []byte) (symKeyId string, pssAddress pss.PssAddress, err error) { - - // parse the address from the message and truncate if longer than our bins threshold - if len(address) > ntfr.threshold { - address = address[:ntfr.threshold] - } - - pssAddress = pss.PssAddress(address) - hexAddress := fmt.Sprintf("%x", address) - currentBin, ok := ntfr.bins[hexAddress] - if ok { - currentBin.count++ - symKeyId = currentBin.symKeyId - } else { - symKeyId, err = c.pss.GenerateSymmetricKey(ntfr.topic, pssAddress, false) - if err != nil { - return "", nil, err - } - ntfr.bins[hexAddress] = &sendBin{ - address: address, - symKeyId: symKeyId, - count: 1, - } - } - return symKeyId, pssAddress, nil -} - -func (c *Controller) handleStartMsg(msg *Msg, keyid string) (err error) { - - keyidbytes, err := hexutil.Decode(keyid) - if err != nil { - return err - } - pubkey, err := crypto.UnmarshalPubkey(keyidbytes) - if err != nil { - return err - } - - // if name is not registered for notifications we will not react - currentNotifier, ok := c.notifiers[msg.namestring] - if !ok { - return fmt.Errorf("Subscribe attempted on unknown resource '%s'", msg.namestring) - } - - // add to or open new bin - symKeyId, pssAddress, err := c.addToBin(currentNotifier, msg.Payload) - if err != nil { - return err - } - - // add to address book for send initial notify - symkey, err := c.pss.GetSymmetricKey(symKeyId) - if err != nil { - return err - } - err = c.pss.SetPeerPublicKey(pubkey, controlTopic, pssAddress) - if err != nil { - return err - } - - // TODO this is set to zero-length byte pending decision on protocol for initial message, whether it should include message or not, and how to trigger the initial message so that current state of Swarm feed is sent upon subscription - notify := []byte{} - replyMsg := NewMsg(MsgCodeNotifyWithKey, msg.namestring, make([]byte, len(notify)+symKeyLength)) - copy(replyMsg.Payload, notify) - copy(replyMsg.Payload[len(notify):], symkey) - sReplyMsg, err := rlp.EncodeToBytes(replyMsg) - if err != nil { - return err - } - return c.pss.SendAsym(keyid, controlTopic, sReplyMsg) -} - -func (c *Controller) handleNotifyWithKeyMsg(msg *Msg) error { - symkey := msg.Payload[len(msg.Payload)-symKeyLength:] - topic := pss.BytesToTopic(msg.Name) - - // \TODO keep track of and add actual address - updaterAddr := pss.PssAddress([]byte{}) - c.pss.SetSymmetricKey(symkey, topic, updaterAddr, true) - c.pss.Register(&topic, pss.NewHandler(c.Handler)) - return c.subscriptions[msg.namestring].handler(msg.namestring, msg.Payload[:len(msg.Payload)-symKeyLength]) -} - -func (c *Controller) handleStopMsg(msg *Msg) error { - // if name is not registered for notifications we will not react - currentNotifier, ok := c.notifiers[msg.namestring] - if !ok { - return fmt.Errorf("Unsubscribe attempted on unknown resource '%s'", msg.namestring) - } - - // parse the address from the message and truncate if longer than our bins' address length threshold - address := msg.Payload - if len(msg.Payload) > currentNotifier.threshold { - address = address[:currentNotifier.threshold] - } - - // remove the entry from the bin if it exists, and remove the bin if it's the last remaining one - hexAddress := fmt.Sprintf("%x", address) - currentBin, ok := currentNotifier.bins[hexAddress] - if !ok { - return fmt.Errorf("found no active bin for address %s", hexAddress) - } - currentBin.count-- - if currentBin.count == 0 { // if no more clients in this bin, remove it - delete(currentNotifier.bins, hexAddress) - } - return nil -} - -// Handler is the pss topic handler to be used to process notification service messages -// It should be registered in the pss of both to any notification service provides and clients using the service -func (c *Controller) Handler(smsg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - c.mu.Lock() - defer c.mu.Unlock() - log.Debug("notify controller handler", "keyid", keyid) - - // see if the message is valid - msg, err := NewMsgFromPayload(smsg) - if err != nil { - return err - } - - switch msg.Code { - case MsgCodeStart: - return c.handleStartMsg(msg, keyid) - case MsgCodeNotifyWithKey: - return c.handleNotifyWithKeyMsg(msg) - case MsgCodeNotify: - return c.subscriptions[msg.namestring].handler(msg.namestring, msg.Payload) - case MsgCodeStop: - return c.handleStopMsg(msg) - } - - return fmt.Errorf("Invalid message code: %d", msg.Code) -} diff --git a/swarm/pss/notify/notify_test.go b/swarm/pss/notify/notify_test.go deleted file mode 100644 index bd9b2a4c1bc4..000000000000 --- a/swarm/pss/notify/notify_test.go +++ /dev/null @@ -1,257 +0,0 @@ -package notify - -import ( - "bytes" - "context" - "flag" - "fmt" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pss" - "github.com/ethereum/go-ethereum/swarm/state" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -var ( - loglevel = flag.Int("l", 3, "loglevel") - psses map[string]*pss.Pss - w *whisper.Whisper - wapi *whisper.PublicWhisperAPI -) - -func init() { - flag.Parse() - hs := log.StreamHandler(os.Stderr, log.TerminalFormat(true)) - hf := log.LvlFilterHandler(log.Lvl(*loglevel), hs) - h := log.CallerFileHandler(hf) - log.Root().SetHandler(h) - - w = whisper.New(&whisper.DefaultConfig) - wapi = whisper.NewPublicWhisperAPI(w) - psses = make(map[string]*pss.Pss) -} - -// Creates a client node and notifier node -// Client sends pss notifications requests -// notifier sends initial notification with symmetric key, and -// second notification symmetrically encrypted -func TestStart(t *testing.T) { - adapter := adapters.NewSimAdapter(newServices(false)) - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: "bzz", - }) - leftNodeConf := adapters.RandomNodeConfig() - leftNodeConf.Services = []string{"bzz", "pss"} - leftNode, err := net.NewNodeWithConfig(leftNodeConf) - if err != nil { - t.Fatal(err) - } - err = net.Start(leftNode.ID()) - if err != nil { - t.Fatal(err) - } - - rightNodeConf := adapters.RandomNodeConfig() - rightNodeConf.Services = []string{"bzz", "pss"} - rightNode, err := net.NewNodeWithConfig(rightNodeConf) - if err != nil { - t.Fatal(err) - } - err = net.Start(rightNode.ID()) - if err != nil { - t.Fatal(err) - } - - err = net.Connect(rightNode.ID(), leftNode.ID()) - if err != nil { - t.Fatal(err) - } - - leftRpc, err := leftNode.Client() - if err != nil { - t.Fatal(err) - } - - rightRpc, err := rightNode.Client() - if err != nil { - t.Fatal(err) - } - - var leftAddr string - err = leftRpc.Call(&leftAddr, "pss_baseAddr") - if err != nil { - t.Fatal(err) - } - - var rightAddr string - err = rightRpc.Call(&rightAddr, "pss_baseAddr") - if err != nil { - t.Fatal(err) - } - - var leftPub string - err = leftRpc.Call(&leftPub, "pss_getPublicKey") - if err != nil { - t.Fatal(err) - } - - var rightPub string - err = rightRpc.Call(&rightPub, "pss_getPublicKey") - if err != nil { - t.Fatal(err) - } - - rsrcName := "foo.eth" - rsrcTopic := pss.BytesToTopic([]byte(rsrcName)) - - // wait for kademlia table to populate - time.Sleep(time.Second) - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) - defer cancel() - rmsgC := make(chan *pss.APIMsg) - rightSub, err := rightRpc.Subscribe(ctx, "pss", rmsgC, "receive", controlTopic, false, false) - if err != nil { - t.Fatal(err) - } - defer rightSub.Unsubscribe() - - updateC := make(chan []byte) - updateMsg := []byte{} - ctrlClient := NewController(psses[rightPub]) - ctrlNotifier := NewController(psses[leftPub]) - ctrlNotifier.NewNotifier("foo.eth", 2, updateC) - - pubkeybytes, err := hexutil.Decode(leftPub) - if err != nil { - t.Fatal(err) - } - pubkey, err := crypto.UnmarshalPubkey(pubkeybytes) - if err != nil { - t.Fatal(err) - } - addrbytes, err := hexutil.Decode(leftAddr) - if err != nil { - t.Fatal(err) - } - ctrlClient.Subscribe(rsrcName, pubkey, addrbytes, func(s string, b []byte) error { - if s != "foo.eth" || !bytes.Equal(updateMsg, b) { - t.Fatalf("unexpected result in client handler: '%s':'%x'", s, b) - } - log.Info("client handler receive", "s", s, "b", b) - return nil - }) - - var inMsg *pss.APIMsg - select { - case inMsg = <-rmsgC: - case <-ctx.Done(): - t.Fatal(ctx.Err()) - } - - dMsg, err := NewMsgFromPayload(inMsg.Msg) - if err != nil { - t.Fatal(err) - } - if dMsg.namestring != rsrcName { - t.Fatalf("expected name '%s', got '%s'", rsrcName, dMsg.namestring) - } - if !bytes.Equal(dMsg.Payload[:len(updateMsg)], updateMsg) { - t.Fatalf("expected payload first %d bytes '%x', got '%x'", len(updateMsg), updateMsg, dMsg.Payload[:len(updateMsg)]) - } - if len(updateMsg)+symKeyLength != len(dMsg.Payload) { - t.Fatalf("expected payload length %d, have %d", len(updateMsg)+symKeyLength, len(dMsg.Payload)) - } - - rightSubUpdate, err := rightRpc.Subscribe(ctx, "pss", rmsgC, "receive", rsrcTopic, false, false) - if err != nil { - t.Fatal(err) - } - defer rightSubUpdate.Unsubscribe() - - updateMsg = []byte("plugh") - updateC <- updateMsg - select { - case inMsg = <-rmsgC: - case <-ctx.Done(): - log.Error("timed out waiting for msg", "topic", fmt.Sprintf("%x", rsrcTopic)) - t.Fatal(ctx.Err()) - } - dMsg, err = NewMsgFromPayload(inMsg.Msg) - if err != nil { - t.Fatal(err) - } - if dMsg.namestring != rsrcName { - t.Fatalf("expected name %s, got %s", rsrcName, dMsg.namestring) - } - if !bytes.Equal(dMsg.Payload, updateMsg) { - t.Fatalf("expected payload '%x', got '%x'", updateMsg, dMsg.Payload) - } - -} - -func newServices(allowRaw bool) adapters.Services { - stateStore := state.NewInmemoryStore() - kademlias := make(map[enode.ID]*network.Kademlia) - kademlia := func(id enode.ID) *network.Kademlia { - if k, ok := kademlias[id]; ok { - return k - } - params := network.NewKadParams() - params.NeighbourhoodSize = 2 - params.MaxBinSize = 3 - params.MinBinSize = 1 - params.MaxRetries = 1000 - params.RetryExponent = 2 - params.RetryInterval = 1000000 - kademlias[id] = network.NewKademlia(id[:], params) - return kademlias[id] - } - return adapters.Services{ - "pss": func(ctx *adapters.ServiceContext) (node.Service, error) { - ctxlocal, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctxlocal) - if err != nil { - return nil, err - } - privkey, err := w.GetPrivateKey(keys) - if err != nil { - return nil, err - } - pssp := pss.NewPssParams().WithPrivateKey(privkey) - pssp.MsgTTL = time.Second * 30 - pssp.AllowRaw = allowRaw - pskad := kademlia(ctx.Config.ID) - ps, err := pss.NewPss(pskad, pssp) - if err != nil { - return nil, err - } - //psses[common.ToHex(crypto.FromECDSAPub(&privkey.PublicKey))] = ps - psses[hexutil.Encode(crypto.FromECDSAPub(&privkey.PublicKey))] = ps - return ps, nil - }, - "bzz": func(ctx *adapters.ServiceContext) (node.Service, error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - hp.Discovery = false - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - return network.NewBzz(config, kademlia(ctx.Config.ID), stateStore, nil, nil), nil - }, - } -} diff --git a/swarm/pss/ping.go b/swarm/pss/ping.go deleted file mode 100644 index ff635f40a444..000000000000 --- a/swarm/pss/ping.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !nopssprotocol,!nopssping - -package pss - -import ( - "context" - "errors" - "time" - - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/swarm/log" -) - -// Generic ping protocol implementation for -// pss devp2p protocol emulation -type PingMsg struct { - Created time.Time - Pong bool // set if message is pong reply -} - -type Ping struct { - Pong bool // toggle pong reply upon ping receive - OutC chan bool // trigger ping - InC chan bool // optional, report back to calling code -} - -func (p *Ping) pingHandler(ctx context.Context, msg interface{}) error { - var pingmsg *PingMsg - var ok bool - if pingmsg, ok = msg.(*PingMsg); !ok { - return errors.New("invalid msg") - } - log.Debug("ping handler", "msg", pingmsg, "outc", p.OutC) - if p.InC != nil { - p.InC <- pingmsg.Pong - } - if p.Pong && !pingmsg.Pong { - p.OutC <- true - } - return nil -} - -var PingProtocol = &protocols.Spec{ - Name: "psstest", - Version: 1, - MaxMsgSize: 1024, - Messages: []interface{}{ - PingMsg{}, - }, -} - -var PingTopic = ProtocolTopic(PingProtocol) - -func NewPingProtocol(ping *Ping) *p2p.Protocol { - return &p2p.Protocol{ - Name: PingProtocol.Name, - Version: PingProtocol.Version, - Length: uint64(PingProtocol.MaxMsgSize), - Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - quitC := make(chan struct{}) - pp := protocols.NewPeer(p, rw, PingProtocol) - log.Trace("running pss vprotocol", "peer", p, "outc", ping.OutC) - go func() { - for { - select { - case ispong := <-ping.OutC: - pp.Send(context.TODO(), &PingMsg{ - Created: time.Now(), - Pong: ispong, - }) - case <-quitC: - } - } - }() - err := pp.Run(ping.pingHandler) - quitC <- struct{}{} - return err - }, - } -} diff --git a/swarm/pss/protocol.go b/swarm/pss/protocol.go deleted file mode 100644 index 7f186f615325..000000000000 --- a/swarm/pss/protocol.go +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// +build !nopssprotocol - -package pss - -import ( - "bytes" - "fmt" - "sync" - "time" - - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/log" -) - -const ( - IsActiveProtocol = true -) - -// Convenience wrapper for devp2p protocol messages for transport over pss -type ProtocolMsg struct { - Code uint64 - Size uint32 - Payload []byte - ReceivedAt time.Time -} - -// Creates a ProtocolMsg -func NewProtocolMsg(code uint64, msg interface{}) ([]byte, error) { - - rlpdata, err := rlp.EncodeToBytes(msg) - if err != nil { - return nil, err - } - - // TODO verify that nested structs cannot be used in rlp - smsg := &ProtocolMsg{ - Code: code, - Size: uint32(len(rlpdata)), - Payload: rlpdata, - } - - return rlp.EncodeToBytes(smsg) -} - -// Protocol options to be passed to a new Protocol instance -// -// The parameters specify which encryption schemes to allow -type ProtocolParams struct { - Asymmetric bool - Symmetric bool -} - -// PssReadWriter bridges pss send/receive with devp2p protocol send/receive -// -// Implements p2p.MsgReadWriter -type PssReadWriter struct { - *Pss - LastActive time.Time - rw chan p2p.Msg - spec *protocols.Spec - topic *Topic - sendFunc func(string, Topic, []byte) error - key string - closed bool -} - -// Implements p2p.MsgReader -func (prw *PssReadWriter) ReadMsg() (p2p.Msg, error) { - msg := <-prw.rw - log.Trace(fmt.Sprintf("pssrw readmsg: %v", msg)) - return msg, nil -} - -// Implements p2p.MsgWriter -func (prw *PssReadWriter) WriteMsg(msg p2p.Msg) error { - log.Trace("pssrw writemsg", "msg", msg) - if prw.closed { - return fmt.Errorf("connection closed") - } - rlpdata := make([]byte, msg.Size) - msg.Payload.Read(rlpdata) - pmsg, err := rlp.EncodeToBytes(ProtocolMsg{ - Code: msg.Code, - Size: msg.Size, - Payload: rlpdata, - }) - if err != nil { - return err - } - return prw.sendFunc(prw.key, *prw.topic, pmsg) -} - -// Injects a p2p.Msg into the MsgReadWriter, so that it appears on the associated p2p.MsgReader -func (prw *PssReadWriter) injectMsg(msg p2p.Msg) error { - log.Trace(fmt.Sprintf("pssrw injectmsg: %v", msg)) - prw.rw <- msg - return nil -} - -// Convenience object for emulation devp2p over pss -type Protocol struct { - *Pss - proto *p2p.Protocol - topic *Topic - spec *protocols.Spec - pubKeyRWPool map[string]p2p.MsgReadWriter - symKeyRWPool map[string]p2p.MsgReadWriter - Asymmetric bool - Symmetric bool - RWPoolMu sync.Mutex -} - -// Activates devp2p emulation over a specific pss topic -// -// One or both encryption schemes must be specified. If -// only one is specified, the protocol will not be valid -// for the other, and will make the message handler -// return errors -func RegisterProtocol(ps *Pss, topic *Topic, spec *protocols.Spec, targetprotocol *p2p.Protocol, options *ProtocolParams) (*Protocol, error) { - if !options.Asymmetric && !options.Symmetric { - return nil, fmt.Errorf("specify at least one of asymmetric or symmetric messaging mode") - } - pp := &Protocol{ - Pss: ps, - proto: targetprotocol, - topic: topic, - spec: spec, - pubKeyRWPool: make(map[string]p2p.MsgReadWriter), - symKeyRWPool: make(map[string]p2p.MsgReadWriter), - Asymmetric: options.Asymmetric, - Symmetric: options.Symmetric, - } - return pp, nil -} - -// Generic handler for incoming messages over devp2p emulation -// -// To be passed to pss.Register() -// -// Will run the protocol on a new incoming peer, provided that -// the encryption key of the message has a match in the internal -// pss keypool -// -// Fails if protocol is not valid for the message encryption scheme, -// if adding a new peer fails, or if the message is not a serialized -// p2p.Msg (which it always will be if it is sent from this object). -func (p *Protocol) Handle(msg []byte, peer *p2p.Peer, asymmetric bool, keyid string) error { - var vrw *PssReadWriter - if p.Asymmetric != asymmetric && p.Symmetric == !asymmetric { - return fmt.Errorf("invalid protocol encryption") - } else if (!p.isActiveSymKey(keyid, *p.topic) && !asymmetric) || - (!p.isActiveAsymKey(keyid, *p.topic) && asymmetric) { - - rw, err := p.AddPeer(peer, *p.topic, asymmetric, keyid) - if err != nil { - return err - } else if rw == nil { - return fmt.Errorf("handle called on nil MsgReadWriter for new key " + keyid) - } - vrw = rw.(*PssReadWriter) - } - - pmsg, err := ToP2pMsg(msg) - if err != nil { - return fmt.Errorf("could not decode pssmsg") - } - if asymmetric { - if p.pubKeyRWPool[keyid] == nil { - return fmt.Errorf("handle called on nil MsgReadWriter for key " + keyid) - } - vrw = p.pubKeyRWPool[keyid].(*PssReadWriter) - } else { - if p.symKeyRWPool[keyid] == nil { - return fmt.Errorf("handle called on nil MsgReadWriter for key " + keyid) - } - vrw = p.symKeyRWPool[keyid].(*PssReadWriter) - } - vrw.injectMsg(pmsg) - return nil -} - -// check if (peer) symmetric key is currently registered with this topic -func (p *Protocol) isActiveSymKey(key string, topic Topic) bool { - return p.symKeyRWPool[key] != nil -} - -// check if (peer) asymmetric key is currently registered with this topic -func (p *Protocol) isActiveAsymKey(key string, topic Topic) bool { - return p.pubKeyRWPool[key] != nil -} - -// Creates a serialized (non-buffered) version of a p2p.Msg, used in the specialized internal p2p.MsgReadwriter implementations -func ToP2pMsg(msg []byte) (p2p.Msg, error) { - payload := &ProtocolMsg{} - if err := rlp.DecodeBytes(msg, payload); err != nil { - return p2p.Msg{}, fmt.Errorf("pss protocol handler unable to decode payload as p2p message: %v", err) - } - - return p2p.Msg{ - Code: payload.Code, - Size: uint32(len(payload.Payload)), - ReceivedAt: time.Now(), - Payload: bytes.NewBuffer(payload.Payload), - }, nil -} - -// Runs an emulated pss Protocol on the specified peer, -// linked to a specific topic -// `key` and `asymmetric` specifies what encryption key -// to link the peer to. -// The key must exist in the pss store prior to adding the peer. -func (p *Protocol) AddPeer(peer *p2p.Peer, topic Topic, asymmetric bool, key string) (p2p.MsgReadWriter, error) { - rw := &PssReadWriter{ - Pss: p.Pss, - rw: make(chan p2p.Msg), - spec: p.spec, - topic: p.topic, - key: key, - } - if asymmetric { - rw.sendFunc = p.Pss.SendAsym - } else { - rw.sendFunc = p.Pss.SendSym - } - if asymmetric { - if !p.Pss.isPubKeyStored(key) { - return nil, fmt.Errorf("asym key does not exist: %s", key) - } - p.RWPoolMu.Lock() - p.pubKeyRWPool[key] = rw - p.RWPoolMu.Unlock() - } else { - if !p.Pss.isSymKeyStored(key) { - return nil, fmt.Errorf("symkey does not exist: %s", key) - } - p.RWPoolMu.Lock() - p.symKeyRWPool[key] = rw - p.RWPoolMu.Unlock() - } - go func() { - err := p.proto.Run(peer, rw) - log.Warn(fmt.Sprintf("pss vprotocol quit on %v topic %v: %v", peer, topic, err)) - }() - return rw, nil -} - -func (p *Protocol) RemovePeer(asymmetric bool, key string) { - log.Debug("closing pss peer", "asym", asymmetric, "key", key) - p.RWPoolMu.Lock() - defer p.RWPoolMu.Unlock() - if asymmetric { - rw := p.pubKeyRWPool[key].(*PssReadWriter) - rw.closed = true - delete(p.pubKeyRWPool, key) - } else { - rw := p.symKeyRWPool[key].(*PssReadWriter) - rw.closed = true - delete(p.symKeyRWPool, key) - } -} - -// Uniform translation of protocol specifiers to topic -func ProtocolTopic(spec *protocols.Spec) Topic { - return BytesToTopic([]byte(fmt.Sprintf("%s:%d", spec.Name, spec.Version))) -} diff --git a/swarm/pss/protocol_test.go b/swarm/pss/protocol_test.go deleted file mode 100644 index 520c48a2024c..000000000000 --- a/swarm/pss/protocol_test.go +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "bytes" - "context" - "fmt" - "strconv" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" -) - -type protoCtrl struct { - C chan bool - protocol *Protocol - run func(*p2p.Peer, p2p.MsgReadWriter) error -} - -// simple ping pong protocol test for the pss devp2p emulation -func TestProtocol(t *testing.T) { - t.Run("32", testProtocol) - t.Run("8", testProtocol) - t.Run("0", testProtocol) -} - -func testProtocol(t *testing.T) { - - // address hint size - var addrsize int64 - paramstring := strings.Split(t.Name(), "/") - addrsize, _ = strconv.ParseInt(paramstring[1], 10, 0) - log.Info("protocol test", "addrsize", addrsize) - - topic := PingTopic.String() - - clients, err := setupNetwork(2, false) - if err != nil { - t.Fatal(err) - } - var loaddrhex string - err = clients[0].Call(&loaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - loaddrhex = loaddrhex[:2+(addrsize*2)] - var roaddrhex string - err = clients[1].Call(&roaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddrhex = roaddrhex[:2+(addrsize*2)] - lnodeinfo := &p2p.NodeInfo{} - err = clients[0].Call(&lnodeinfo, "admin_nodeInfo") - if err != nil { - t.Fatalf("rpc nodeinfo node 11 fail: %v", err) - } - - var lpubkey string - err = clients[0].Call(&lpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 1 pubkey fail: %v", err) - } - var rpubkey string - err = clients[1].Call(&rpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 2 pubkey fail: %v", err) - } - - time.Sleep(time.Millisecond * 1000) // replace with hive healthy code - - lmsgC := make(chan APIMsg) - lctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - lsub, err := clients[0].Subscribe(lctx, "pss", lmsgC, "receive", topic, false, false) - if err != nil { - t.Fatal(err) - } - defer lsub.Unsubscribe() - rmsgC := make(chan APIMsg) - rctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - rsub, err := clients[1].Subscribe(rctx, "pss", rmsgC, "receive", topic, false, false) - if err != nil { - t.Fatal(err) - } - defer rsub.Unsubscribe() - - // set reciprocal public keys - err = clients[0].Call(nil, "pss_setPeerPublicKey", rpubkey, topic, roaddrhex) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(nil, "pss_setPeerPublicKey", lpubkey, topic, loaddrhex) - if err != nil { - t.Fatal(err) - } - - // add right peer's public key as protocol peer on left - p := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%x", common.FromHex(loaddrhex)), []p2p.Cap{}) - _, err = pssprotocols[lnodeinfo.ID].protocol.AddPeer(p, PingTopic, true, rpubkey) - if err != nil { - t.Fatal(err) - } - - // sends ping asym, checks delivery - pssprotocols[lnodeinfo.ID].C <- false - select { - case <-lmsgC: - log.Debug("lnode ok") - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - return - } - select { - case <-rmsgC: - log.Debug("rnode ok") - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } - - // sends ping asym, checks delivery - pssprotocols[lnodeinfo.ID].C <- false - select { - case <-lmsgC: - log.Debug("lnode ok") - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } - select { - case <-rmsgC: - log.Debug("rnode ok") - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } - rw := pssprotocols[lnodeinfo.ID].protocol.pubKeyRWPool[rpubkey] - pssprotocols[lnodeinfo.ID].protocol.RemovePeer(true, rpubkey) - if err := rw.WriteMsg(p2p.Msg{ - Size: 3, - Payload: bytes.NewReader([]byte("foo")), - }); err == nil { - t.Fatalf("expected error on write") - } -} diff --git a/swarm/pss/pss.go b/swarm/pss/pss.go deleted file mode 100644 index 183aab04d2c4..000000000000 --- a/swarm/pss/pss.go +++ /dev/null @@ -1,840 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "bytes" - "context" - "crypto/ecdsa" - "crypto/rand" - "errors" - "fmt" - "hash" - "sync" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pot" - "github.com/ethereum/go-ethereum/swarm/storage" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" - "golang.org/x/crypto/sha3" -) - -const ( - defaultPaddingByteSize = 16 - DefaultMsgTTL = time.Second * 120 - defaultDigestCacheTTL = time.Second * 10 - defaultSymKeyCacheCapacity = 512 - digestLength = 32 // byte length of digest used for pss cache (currently same as swarm chunk hash) - defaultWhisperWorkTime = 3 - defaultWhisperPoW = 0.0000000001 - defaultMaxMsgSize = 1024 * 1024 - defaultCleanInterval = time.Second * 60 * 10 - defaultOutboxCapacity = 100000 - pssProtocolName = "pss" - pssVersion = 2 - hasherCount = 8 -) - -var ( - addressLength = len(pot.Address{}) -) - -// cache is used for preventing backwards routing -// will also be instrumental in flood guard mechanism -// and mailbox implementation -type pssCacheEntry struct { - expiresAt time.Time -} - -// abstraction to enable access to p2p.protocols.Peer.Send -type senderPeer interface { - Info() *p2p.PeerInfo - ID() enode.ID - Address() []byte - Send(context.Context, interface{}) error -} - -// per-key peer related information -// member `protected` prevents garbage collection of the instance -type pssPeer struct { - lastSeen time.Time - address PssAddress - protected bool -} - -// Pss configuration parameters -type PssParams struct { - MsgTTL time.Duration - CacheTTL time.Duration - privateKey *ecdsa.PrivateKey - SymKeyCacheCapacity int - AllowRaw bool // If true, enables sending and receiving messages without builtin pss encryption -} - -// Sane defaults for Pss -func NewPssParams() *PssParams { - return &PssParams{ - MsgTTL: DefaultMsgTTL, - CacheTTL: defaultDigestCacheTTL, - SymKeyCacheCapacity: defaultSymKeyCacheCapacity, - } -} - -func (params *PssParams) WithPrivateKey(privatekey *ecdsa.PrivateKey) *PssParams { - params.privateKey = privatekey - return params -} - -// Toplevel pss object, takes care of message sending, receiving, decryption and encryption, message handler dispatchers and message forwarding. -// -// Implements node.Service -type Pss struct { - *network.Kademlia // we can get the Kademlia address from this - *KeyStore - - privateKey *ecdsa.PrivateKey // pss can have it's own independent key - auxAPIs []rpc.API // builtins (handshake, test) can add APIs - - // sending and forwarding - fwdPool map[string]*protocols.Peer // keep track of all peers sitting on the pssmsg routing layer - fwdPoolMu sync.RWMutex - fwdCache map[pssDigest]pssCacheEntry // checksum of unique fields from pssmsg mapped to expiry, cache to determine whether to drop msg - fwdCacheMu sync.RWMutex - cacheTTL time.Duration // how long to keep messages in fwdCache (not implemented) - msgTTL time.Duration - paddingByteSize int - capstring string - outbox chan *PssMsg - - // message handling - handlers map[Topic]map[*handler]bool // topic and version based pss payload handlers. See pss.Handle() - handlersMu sync.RWMutex - hashPool sync.Pool - topicHandlerCaps map[Topic]*handlerCaps // caches capabilities of each topic's handlers (see handlerCap* consts in types.go) - - // process - quitC chan struct{} -} - -func (p *Pss) String() string { - return fmt.Sprintf("pss: addr %x, pubkey %v", p.BaseAddr(), common.ToHex(crypto.FromECDSAPub(&p.privateKey.PublicKey))) -} - -// Creates a new Pss instance. -// -// In addition to params, it takes a swarm network Kademlia -// and a FileStore storage for message cache storage. -func NewPss(k *network.Kademlia, params *PssParams) (*Pss, error) { - if params.privateKey == nil { - return nil, errors.New("missing private key for pss") - } - cap := p2p.Cap{ - Name: pssProtocolName, - Version: pssVersion, - } - ps := &Pss{ - Kademlia: k, - KeyStore: loadKeyStore(), - - privateKey: params.privateKey, - quitC: make(chan struct{}), - - fwdPool: make(map[string]*protocols.Peer), - fwdCache: make(map[pssDigest]pssCacheEntry), - cacheTTL: params.CacheTTL, - msgTTL: params.MsgTTL, - paddingByteSize: defaultPaddingByteSize, - capstring: cap.String(), - outbox: make(chan *PssMsg, defaultOutboxCapacity), - - handlers: make(map[Topic]map[*handler]bool), - topicHandlerCaps: make(map[Topic]*handlerCaps), - - hashPool: sync.Pool{ - New: func() interface{} { - return sha3.NewLegacyKeccak256() - }, - }, - } - - for i := 0; i < hasherCount; i++ { - hashfunc := storage.MakeHashFunc(storage.DefaultHash)() - ps.hashPool.Put(hashfunc) - } - - return ps, nil -} - -///////////////////////////////////////////////////////////////////// -// SECTION: node.Service interface -///////////////////////////////////////////////////////////////////// - -func (p *Pss) Start(srv *p2p.Server) error { - go func() { - ticker := time.NewTicker(defaultCleanInterval) - cacheTicker := time.NewTicker(p.cacheTTL) - defer ticker.Stop() - defer cacheTicker.Stop() - for { - select { - case <-cacheTicker.C: - p.cleanFwdCache() - case <-ticker.C: - p.cleanKeys() - case <-p.quitC: - return - } - } - }() - go func() { - for { - select { - case msg := <-p.outbox: - err := p.forward(msg) - if err != nil { - log.Error(err.Error()) - metrics.GetOrRegisterCounter("pss.forward.err", nil).Inc(1) - } - case <-p.quitC: - return - } - } - }() - log.Info("Started Pss") - log.Info("Loaded EC keys", "pubkey", common.ToHex(crypto.FromECDSAPub(p.PublicKey())), "secp256", common.ToHex(crypto.CompressPubkey(p.PublicKey()))) - return nil -} - -func (p *Pss) Stop() error { - log.Info("Pss shutting down") - close(p.quitC) - return nil -} - -var pssSpec = &protocols.Spec{ - Name: pssProtocolName, - Version: pssVersion, - MaxMsgSize: defaultMaxMsgSize, - Messages: []interface{}{ - PssMsg{}, - }, -} - -func (p *Pss) Protocols() []p2p.Protocol { - return []p2p.Protocol{ - { - Name: pssSpec.Name, - Version: pssSpec.Version, - Length: pssSpec.Length(), - Run: p.Run, - }, - } -} - -func (p *Pss) Run(peer *p2p.Peer, rw p2p.MsgReadWriter) error { - pp := protocols.NewPeer(peer, rw, pssSpec) - p.fwdPoolMu.Lock() - p.fwdPool[peer.Info().ID] = pp - p.fwdPoolMu.Unlock() - return pp.Run(p.handlePssMsg) -} - -func (p *Pss) APIs() []rpc.API { - apis := []rpc.API{ - { - Namespace: "pss", - Version: "1.0", - Service: NewAPI(p), - Public: true, - }, - } - apis = append(apis, p.auxAPIs...) - return apis -} - -// add API methods to the pss API -// must be run before node is started -func (p *Pss) addAPI(api rpc.API) { - p.auxAPIs = append(p.auxAPIs, api) -} - -// Returns the swarm Kademlia address of the pss node -func (p *Pss) BaseAddr() []byte { - return p.Kademlia.BaseAddr() -} - -// Returns the pss node's public key -func (p *Pss) PublicKey() *ecdsa.PublicKey { - return &p.privateKey.PublicKey -} - -///////////////////////////////////////////////////////////////////// -// SECTION: Message handling -///////////////////////////////////////////////////////////////////// - -// Links a handler function to a Topic -// -// All incoming messages with an envelope Topic matching the -// topic specified will be passed to the given Handler function. -// -// There may be an arbitrary number of handler functions per topic. -// -// Returns a deregister function which needs to be called to -// deregister the handler, -func (p *Pss) Register(topic *Topic, hndlr *handler) func() { - p.handlersMu.Lock() - defer p.handlersMu.Unlock() - handlers := p.handlers[*topic] - if handlers == nil { - handlers = make(map[*handler]bool) - p.handlers[*topic] = handlers - log.Debug("registered handler", "caps", hndlr.caps) - } - if hndlr.caps == nil { - hndlr.caps = &handlerCaps{} - } - handlers[hndlr] = true - if _, ok := p.topicHandlerCaps[*topic]; !ok { - p.topicHandlerCaps[*topic] = &handlerCaps{} - } - if hndlr.caps.raw { - p.topicHandlerCaps[*topic].raw = true - } - if hndlr.caps.prox { - p.topicHandlerCaps[*topic].prox = true - } - return func() { p.deregister(topic, hndlr) } -} -func (p *Pss) deregister(topic *Topic, hndlr *handler) { - p.handlersMu.Lock() - defer p.handlersMu.Unlock() - handlers := p.handlers[*topic] - if len(handlers) > 1 { - delete(p.handlers, *topic) - // topic caps might have changed now that a handler is gone - caps := &handlerCaps{} - for h := range handlers { - if h.caps.raw { - caps.raw = true - } - if h.caps.prox { - caps.prox = true - } - } - p.topicHandlerCaps[*topic] = caps - return - } - delete(handlers, hndlr) -} - -// get all registered handlers for respective topics -func (p *Pss) getHandlers(topic Topic) map[*handler]bool { - p.handlersMu.RLock() - defer p.handlersMu.RUnlock() - return p.handlers[topic] -} - -// Filters incoming messages for processing or forwarding. -// Check if address partially matches -// If yes, it CAN be for us, and we process it -// Only passes error to pss protocol handler if payload is not valid pssmsg -func (p *Pss) handlePssMsg(ctx context.Context, msg interface{}) error { - metrics.GetOrRegisterCounter("pss.handlepssmsg", nil).Inc(1) - pssmsg, ok := msg.(*PssMsg) - if !ok { - return fmt.Errorf("invalid message type. Expected *PssMsg, got %T ", msg) - } - log.Trace("handler", "self", label(p.Kademlia.BaseAddr()), "topic", label(pssmsg.Payload.Topic[:])) - if int64(pssmsg.Expire) < time.Now().Unix() { - metrics.GetOrRegisterCounter("pss.expire", nil).Inc(1) - log.Warn("pss filtered expired message", "from", common.ToHex(p.Kademlia.BaseAddr()), "to", common.ToHex(pssmsg.To)) - return nil - } - if p.checkFwdCache(pssmsg) { - log.Trace("pss relay block-cache match (process)", "from", common.ToHex(p.Kademlia.BaseAddr()), "to", (common.ToHex(pssmsg.To))) - return nil - } - p.addFwdCache(pssmsg) - - psstopic := Topic(pssmsg.Payload.Topic) - - // raw is simplest handler contingency to check, so check that first - var isRaw bool - if pssmsg.isRaw() { - if _, ok := p.topicHandlerCaps[psstopic]; ok { - if !p.topicHandlerCaps[psstopic].raw { - log.Debug("No handler for raw message", "topic", psstopic) - return nil - } - } - isRaw = true - } - - // check if we can be recipient: - // - no prox handler on message and partial address matches - // - prox handler on message and we are in prox regardless of partial address match - // store this result so we don't calculate again on every handler - var isProx bool - if _, ok := p.topicHandlerCaps[psstopic]; ok { - isProx = p.topicHandlerCaps[psstopic].prox - } - isRecipient := p.isSelfPossibleRecipient(pssmsg, isProx) - if !isRecipient { - log.Trace("pss was for someone else :'( ... forwarding", "pss", common.ToHex(p.BaseAddr()), "prox", isProx) - return p.enqueue(pssmsg) - } - - log.Trace("pss for us, yay! ... let's process!", "pss", common.ToHex(p.BaseAddr()), "prox", isProx, "raw", isRaw, "topic", label(pssmsg.Payload.Topic[:])) - if err := p.process(pssmsg, isRaw, isProx); err != nil { - qerr := p.enqueue(pssmsg) - if qerr != nil { - return fmt.Errorf("process fail: processerr %v, queueerr: %v", err, qerr) - } - } - return nil - -} - -// Entry point to processing a message for which the current node can be the intended recipient. -// Attempts symmetric and asymmetric decryption with stored keys. -// Dispatches message to all handlers matching the message topic -func (p *Pss) process(pssmsg *PssMsg, raw bool, prox bool) error { - metrics.GetOrRegisterCounter("pss.process", nil).Inc(1) - - var err error - var recvmsg *whisper.ReceivedMessage - var payload []byte - var from PssAddress - var asymmetric bool - var keyid string - var keyFunc func(envelope *whisper.Envelope) (*whisper.ReceivedMessage, string, PssAddress, error) - - envelope := pssmsg.Payload - psstopic := Topic(envelope.Topic) - - if raw { - payload = pssmsg.Payload.Data - } else { - if pssmsg.isSym() { - keyFunc = p.processSym - } else { - asymmetric = true - keyFunc = p.processAsym - } - - recvmsg, keyid, from, err = keyFunc(envelope) - if err != nil { - return errors.New("Decryption failed") - } - payload = recvmsg.Payload - } - - if len(pssmsg.To) < addressLength { - if err := p.enqueue(pssmsg); err != nil { - return err - } - } - p.executeHandlers(psstopic, payload, from, raw, prox, asymmetric, keyid) - - return nil - -} - -func (p *Pss) executeHandlers(topic Topic, payload []byte, from PssAddress, raw bool, prox bool, asymmetric bool, keyid string) { - handlers := p.getHandlers(topic) - peer := p2p.NewPeer(enode.ID{}, fmt.Sprintf("%x", from), []p2p.Cap{}) - for h := range handlers { - if !h.caps.raw && raw { - log.Warn("norawhandler") - continue - } - if !h.caps.prox && prox { - log.Warn("noproxhandler") - continue - } - err := (h.f)(payload, peer, asymmetric, keyid) - if err != nil { - log.Warn("Pss handler failed", "err", err) - } - } -} - -// will return false if using partial address -func (p *Pss) isSelfRecipient(msg *PssMsg) bool { - return bytes.Equal(msg.To, p.Kademlia.BaseAddr()) -} - -// test match of leftmost bytes in given message to node's Kademlia address -func (p *Pss) isSelfPossibleRecipient(msg *PssMsg, prox bool) bool { - local := p.Kademlia.BaseAddr() - - // if a partial address matches we are possible recipient regardless of prox - // if not and prox is not set, we are surely not - if bytes.Equal(msg.To, local[:len(msg.To)]) { - - return true - } else if !prox { - return false - } - - depth := p.Kademlia.NeighbourhoodDepth() - po, _ := network.Pof(p.Kademlia.BaseAddr(), msg.To, 0) - log.Trace("selfpossible", "po", po, "depth", depth) - - return depth <= po -} - -///////////////////////////////////////////////////////////////////// -// SECTION: Message sending -///////////////////////////////////////////////////////////////////// - -func (p *Pss) enqueue(msg *PssMsg) error { - select { - case p.outbox <- msg: - return nil - default: - } - - metrics.GetOrRegisterCounter("pss.enqueue.outbox.full", nil).Inc(1) - return errors.New("outbox full") -} - -// Send a raw message (any encryption is responsibility of calling client) -// -// Will fail if raw messages are disallowed -func (p *Pss) SendRaw(address PssAddress, topic Topic, msg []byte) error { - if err := validateAddress(address); err != nil { - return err - } - pssMsgParams := &msgParams{ - raw: true, - } - payload := &whisper.Envelope{ - Data: msg, - Topic: whisper.TopicType(topic), - } - pssMsg := newPssMsg(pssMsgParams) - pssMsg.To = address - pssMsg.Expire = uint32(time.Now().Add(p.msgTTL).Unix()) - pssMsg.Payload = payload - p.addFwdCache(pssMsg) - err := p.enqueue(pssMsg) - if err != nil { - return err - } - - // if we have a proxhandler on this topic - // also deliver message to ourselves - if _, ok := p.topicHandlerCaps[topic]; ok { - if p.isSelfPossibleRecipient(pssMsg, true) && p.topicHandlerCaps[topic].prox { - return p.process(pssMsg, true, true) - } - } - return nil -} - -// Send a message using symmetric encryption -// -// Fails if the key id does not match any of the stored symmetric keys -func (p *Pss) SendSym(symkeyid string, topic Topic, msg []byte) error { - symkey, err := p.GetSymmetricKey(symkeyid) - if err != nil { - return fmt.Errorf("missing valid send symkey %s: %v", symkeyid, err) - } - psp, ok := p.getPeerSym(symkeyid, topic) - if !ok { - return fmt.Errorf("invalid topic '%s' for symkey '%s'", topic.String(), symkeyid) - } - return p.send(psp.address, topic, msg, false, symkey) -} - -// Send a message using asymmetric encryption -// -// Fails if the key id does not match any in of the stored public keys -func (p *Pss) SendAsym(pubkeyid string, topic Topic, msg []byte) error { - if _, err := crypto.UnmarshalPubkey(common.FromHex(pubkeyid)); err != nil { - return fmt.Errorf("Cannot unmarshal pubkey: %x", pubkeyid) - } - psp, ok := p.getPeerPub(pubkeyid, topic) - if !ok { - return fmt.Errorf("invalid topic '%s' for pubkey '%s'", topic.String(), pubkeyid) - } - return p.send(psp.address, topic, msg, true, common.FromHex(pubkeyid)) -} - -// Send is payload agnostic, and will accept any byte slice as payload -// It generates an whisper envelope for the specified recipient and topic, -// and wraps the message payload in it. -// TODO: Implement proper message padding -func (p *Pss) send(to []byte, topic Topic, msg []byte, asymmetric bool, key []byte) error { - metrics.GetOrRegisterCounter("pss.send", nil).Inc(1) - - if key == nil || bytes.Equal(key, []byte{}) { - return fmt.Errorf("Zero length key passed to pss send") - } - padding := make([]byte, p.paddingByteSize) - c, err := rand.Read(padding) - if err != nil { - return err - } else if c < p.paddingByteSize { - return fmt.Errorf("invalid padding length: %d", c) - } - wparams := &whisper.MessageParams{ - TTL: defaultWhisperTTL, - Src: p.privateKey, - Topic: whisper.TopicType(topic), - WorkTime: defaultWhisperWorkTime, - PoW: defaultWhisperPoW, - Payload: msg, - Padding: padding, - } - if asymmetric { - pk, err := crypto.UnmarshalPubkey(key) - if err != nil { - return fmt.Errorf("Cannot unmarshal pubkey: %x", key) - } - wparams.Dst = pk - } else { - wparams.KeySym = key - } - // set up outgoing message container, which does encryption and envelope wrapping - woutmsg, err := whisper.NewSentMessage(wparams) - if err != nil { - return fmt.Errorf("failed to generate whisper message encapsulation: %v", err) - } - // performs encryption. - // Does NOT perform / performs negligible PoW due to very low difficulty setting - // after this the message is ready for sending - envelope, err := woutmsg.Wrap(wparams) - if err != nil { - return fmt.Errorf("failed to perform whisper encryption: %v", err) - } - log.Trace("pssmsg whisper done", "env", envelope, "wparams payload", common.ToHex(wparams.Payload), "to", common.ToHex(to), "asym", asymmetric, "key", common.ToHex(key)) - - // prepare for devp2p transport - pssMsgParams := &msgParams{ - sym: !asymmetric, - } - pssMsg := newPssMsg(pssMsgParams) - pssMsg.To = to - pssMsg.Expire = uint32(time.Now().Add(p.msgTTL).Unix()) - pssMsg.Payload = envelope - err = p.enqueue(pssMsg) - if err != nil { - return err - } - if _, ok := p.topicHandlerCaps[topic]; ok { - if p.isSelfPossibleRecipient(pssMsg, true) && p.topicHandlerCaps[topic].prox { - return p.process(pssMsg, true, true) - } - } - return nil -} - -// sendFunc is a helper function that tries to send a message and returns true on success. -// It is set here for usage in production, and optionally overridden in tests. -var sendFunc func(p *Pss, sp *network.Peer, msg *PssMsg) bool = sendMsg - -// tries to send a message, returns true if successful -func sendMsg(p *Pss, sp *network.Peer, msg *PssMsg) bool { - var isPssEnabled bool - info := sp.Info() - for _, capability := range info.Caps { - if capability == p.capstring { - isPssEnabled = true - break - } - } - if !isPssEnabled { - log.Error("peer doesn't have matching pss capabilities, skipping", "peer", info.Name, "caps", info.Caps) - return false - } - - // get the protocol peer from the forwarding peer cache - p.fwdPoolMu.RLock() - pp := p.fwdPool[sp.Info().ID] - p.fwdPoolMu.RUnlock() - - err := pp.Send(context.TODO(), msg) - if err != nil { - metrics.GetOrRegisterCounter("pss.pp.send.error", nil).Inc(1) - log.Error(err.Error()) - } - - return err == nil -} - -// Forwards a pss message to the peer(s) based on recipient address according to the algorithm -// described below. The recipient address can be of any length, and the byte slice will be matched -// to the MSB slice of the peer address of the equivalent length. -// -// If the recipient address (or partial address) is within the neighbourhood depth of the forwarding -// node, then it will be forwarded to all the nearest neighbours of the forwarding node. In case of -// partial address, it should be forwarded to all the peers matching the partial address, if there -// are any; otherwise only to one peer, closest to the recipient address. In any case, if the message -// forwarding fails, the node should try to forward it to the next best peer, until the message is -// successfully forwarded to at least one peer. -func (p *Pss) forward(msg *PssMsg) error { - metrics.GetOrRegisterCounter("pss.forward", nil).Inc(1) - sent := 0 // number of successful sends - to := make([]byte, addressLength) - copy(to[:len(msg.To)], msg.To) - neighbourhoodDepth := p.Kademlia.NeighbourhoodDepth() - - // luminosity is the opposite of darkness. the more bytes are removed from the address, the higher is darkness, - // but the luminosity is less. here luminosity equals the number of bits given in the destination address. - luminosityRadius := len(msg.To) * 8 - - // proximity order function matching up to neighbourhoodDepth bits (po <= neighbourhoodDepth) - pof := pot.DefaultPof(neighbourhoodDepth) - - // soft threshold for msg broadcast - broadcastThreshold, _ := pof(to, p.BaseAddr(), 0) - if broadcastThreshold > luminosityRadius { - broadcastThreshold = luminosityRadius - } - - var onlySendOnce bool // indicates if the message should only be sent to one peer with closest address - - // if measured from the recipient address as opposed to the base address (see Kademlia.EachConn - // call below), then peers that fall in the same proximity bin as recipient address will appear - // [at least] one bit closer, but only if these additional bits are given in the recipient address. - if broadcastThreshold < luminosityRadius && broadcastThreshold < neighbourhoodDepth { - broadcastThreshold++ - onlySendOnce = true - } - - p.Kademlia.EachConn(to, addressLength*8, func(sp *network.Peer, po int) bool { - if po < broadcastThreshold && sent > 0 { - return false // stop iterating - } - if sendFunc(p, sp, msg) { - sent++ - if onlySendOnce { - return false - } - if po == addressLength*8 { - // stop iterating if successfully sent to the exact recipient (perfect match of full address) - return false - } - } - return true - }) - - // if we failed to send to anyone, re-insert message in the send-queue - if sent == 0 { - log.Debug("unable to forward to any peers") - if err := p.enqueue(msg); err != nil { - metrics.GetOrRegisterCounter("pss.forward.enqueue.error", nil).Inc(1) - log.Error(err.Error()) - return err - } - } - - // cache the message - p.addFwdCache(msg) - return nil -} - -///////////////////////////////////////////////////////////////////// -// SECTION: Caching -///////////////////////////////////////////////////////////////////// - -// cleanFwdCache is used to periodically remove expired entries from the forward cache -func (p *Pss) cleanFwdCache() { - metrics.GetOrRegisterCounter("pss.cleanfwdcache", nil).Inc(1) - p.fwdCacheMu.Lock() - defer p.fwdCacheMu.Unlock() - for k, v := range p.fwdCache { - if v.expiresAt.Before(time.Now()) { - delete(p.fwdCache, k) - } - } -} - -func label(b []byte) string { - return fmt.Sprintf("%04x", b[:2]) -} - -// add a message to the cache -func (p *Pss) addFwdCache(msg *PssMsg) error { - metrics.GetOrRegisterCounter("pss.addfwdcache", nil).Inc(1) - - var entry pssCacheEntry - var ok bool - - p.fwdCacheMu.Lock() - defer p.fwdCacheMu.Unlock() - - digest := p.digest(msg) - if entry, ok = p.fwdCache[digest]; !ok { - entry = pssCacheEntry{} - } - entry.expiresAt = time.Now().Add(p.cacheTTL) - p.fwdCache[digest] = entry - return nil -} - -// check if message is in the cache -func (p *Pss) checkFwdCache(msg *PssMsg) bool { - p.fwdCacheMu.Lock() - defer p.fwdCacheMu.Unlock() - - digest := p.digest(msg) - entry, ok := p.fwdCache[digest] - if ok { - if entry.expiresAt.After(time.Now()) { - log.Trace("unexpired cache", "digest", fmt.Sprintf("%x", digest)) - metrics.GetOrRegisterCounter("pss.checkfwdcache.unexpired", nil).Inc(1) - return true - } - metrics.GetOrRegisterCounter("pss.checkfwdcache.expired", nil).Inc(1) - } - return false -} - -// Digest of message -func (p *Pss) digest(msg *PssMsg) pssDigest { - return p.digestBytes(msg.serialize()) -} - -func (p *Pss) digestBytes(msg []byte) pssDigest { - hasher := p.hashPool.Get().(hash.Hash) - defer p.hashPool.Put(hasher) - hasher.Reset() - hasher.Write(msg) - digest := pssDigest{} - key := hasher.Sum(nil) - copy(digest[:], key[:digestLength]) - return digest -} - -func validateAddress(addr PssAddress) error { - if len(addr) > addressLength { - return errors.New("address too long") - } - return nil -} diff --git a/swarm/pss/pss_test.go b/swarm/pss/pss_test.go deleted file mode 100644 index 675b4cfcd649..000000000000 --- a/swarm/pss/pss_test.go +++ /dev/null @@ -1,2108 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "bytes" - "context" - "crypto/ecdsa" - "encoding/binary" - "encoding/hex" - "encoding/json" - "flag" - "fmt" - "io/ioutil" - "math/rand" - "os" - "strconv" - "strings" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/metrics/influxdb" - "github.com/ethereum/go-ethereum/node" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/p2p/simulations" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/pot" - "github.com/ethereum/go-ethereum/swarm/state" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -var ( - initOnce = sync.Once{} - loglevel = flag.Int("loglevel", 2, "logging verbosity") - longrunning = flag.Bool("longrunning", false, "do run long-running tests") - w *whisper.Whisper - wapi *whisper.PublicWhisperAPI - psslogmain log.Logger - pssprotocols map[string]*protoCtrl - useHandshake bool - noopHandlerFunc = func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - return nil - } -) - -func init() { - flag.Parse() - rand.Seed(time.Now().Unix()) - - adapters.RegisterServices(newServices(false)) - initTest() -} - -func initTest() { - initOnce.Do( - func() { - psslogmain = log.New("psslog", "*") - hs := log.StreamHandler(os.Stderr, log.TerminalFormat(true)) - hf := log.LvlFilterHandler(log.Lvl(*loglevel), hs) - h := log.CallerFileHandler(hf) - log.Root().SetHandler(h) - - w = whisper.New(&whisper.DefaultConfig) - wapi = whisper.NewPublicWhisperAPI(w) - - pssprotocols = make(map[string]*protoCtrl) - }, - ) -} - -// test that topic conversion functions give predictable results -func TestTopic(t *testing.T) { - - api := &API{} - - topicstr := strings.Join([]string{PingProtocol.Name, strconv.Itoa(int(PingProtocol.Version))}, ":") - - // bytestotopic is the authoritative topic conversion source - topicobj := BytesToTopic([]byte(topicstr)) - - // string to topic and bytes to topic must match - topicapiobj, _ := api.StringToTopic(topicstr) - if topicobj != topicapiobj { - t.Fatalf("bytes and string topic conversion mismatch; %s != %s", topicobj, topicapiobj) - } - - // string representation of topichex - topichex := topicobj.String() - - // protocoltopic wrapper on pingtopic should be same as topicstring - // check that it matches - pingtopichex := PingTopic.String() - if topichex != pingtopichex { - t.Fatalf("protocol topic conversion mismatch; %s != %s", topichex, pingtopichex) - } - - // json marshal of topic - topicjsonout, err := topicobj.MarshalJSON() - if err != nil { - t.Fatal(err) - } - if string(topicjsonout)[1:len(topicjsonout)-1] != topichex { - t.Fatalf("topic json marshal mismatch; %s != \"%s\"", topicjsonout, topichex) - } - - // json unmarshal of topic - var topicjsonin Topic - topicjsonin.UnmarshalJSON(topicjsonout) - if topicjsonin != topicobj { - t.Fatalf("topic json unmarshal mismatch: %x != %x", topicjsonin, topicobj) - } -} - -// test bit packing of message control flags -func TestMsgParams(t *testing.T) { - var ctrl byte - ctrl |= pssControlRaw - p := newMsgParamsFromBytes([]byte{ctrl}) - m := newPssMsg(p) - if !m.isRaw() || m.isSym() { - t.Fatal("expected raw=true and sym=false") - } - ctrl |= pssControlSym - p = newMsgParamsFromBytes([]byte{ctrl}) - m = newPssMsg(p) - if !m.isRaw() || !m.isSym() { - t.Fatal("expected raw=true and sym=true") - } - ctrl &= 0xff &^ pssControlRaw - p = newMsgParamsFromBytes([]byte{ctrl}) - m = newPssMsg(p) - if m.isRaw() || !m.isSym() { - t.Fatal("expected raw=false and sym=true") - } -} - -// test if we can insert into cache, match items with cache and cache expiry -func TestCache(t *testing.T) { - var err error - to, _ := hex.DecodeString("08090a0b0c0d0e0f1011121314150001020304050607161718191a1b1c1d1e1f") - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - privkey, err := w.GetPrivateKey(keys) - if err != nil { - t.Fatal(err) - } - ps := newTestPss(privkey, nil, nil) - defer ps.Stop() - pp := NewPssParams().WithPrivateKey(privkey) - data := []byte("foo") - datatwo := []byte("bar") - datathree := []byte("baz") - wparams := &whisper.MessageParams{ - TTL: defaultWhisperTTL, - Src: privkey, - Dst: &privkey.PublicKey, - Topic: whisper.TopicType(PingTopic), - WorkTime: defaultWhisperWorkTime, - PoW: defaultWhisperPoW, - Payload: data, - } - woutmsg, err := whisper.NewSentMessage(wparams) - env, err := woutmsg.Wrap(wparams) - msg := &PssMsg{ - Payload: env, - To: to, - } - wparams.Payload = datatwo - woutmsg, err = whisper.NewSentMessage(wparams) - envtwo, err := woutmsg.Wrap(wparams) - msgtwo := &PssMsg{ - Payload: envtwo, - To: to, - } - wparams.Payload = datathree - woutmsg, err = whisper.NewSentMessage(wparams) - envthree, err := woutmsg.Wrap(wparams) - msgthree := &PssMsg{ - Payload: envthree, - To: to, - } - - digest := ps.digest(msg) - if err != nil { - t.Fatalf("could not store cache msgone: %v", err) - } - digesttwo := ps.digest(msgtwo) - if err != nil { - t.Fatalf("could not store cache msgtwo: %v", err) - } - digestthree := ps.digest(msgthree) - if err != nil { - t.Fatalf("could not store cache msgthree: %v", err) - } - - if digest == digesttwo { - t.Fatalf("different msgs return same hash: %d", digesttwo) - } - - // check the cache - err = ps.addFwdCache(msg) - if err != nil { - t.Fatalf("write to pss expire cache failed: %v", err) - } - - if !ps.checkFwdCache(msg) { - t.Fatalf("message %v should have EXPIRE record in cache but checkCache returned false", msg) - } - - if ps.checkFwdCache(msgtwo) { - t.Fatalf("message %v should NOT have EXPIRE record in cache but checkCache returned true", msgtwo) - } - - time.Sleep(pp.CacheTTL + 1*time.Second) - err = ps.addFwdCache(msgthree) - if err != nil { - t.Fatalf("write to pss expire cache failed: %v", err) - } - - if ps.checkFwdCache(msg) { - t.Fatalf("message %v should have expired from cache but checkCache returned true", msg) - } - - if _, ok := ps.fwdCache[digestthree]; !ok { - t.Fatalf("unexpired message should be in the cache: %v", digestthree) - } - - if _, ok := ps.fwdCache[digesttwo]; ok { - t.Fatalf("expired message should have been cleared from the cache: %v", digesttwo) - } -} - -// matching of address hints; whether a message could be or is for the node -func TestAddressMatch(t *testing.T) { - - localaddr := network.RandomAddr().Over() - copy(localaddr[:8], []byte("deadbeef")) - remoteaddr := []byte("feedbeef") - kadparams := network.NewKadParams() - kad := network.NewKademlia(localaddr, kadparams) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - if err != nil { - t.Fatalf("Could not generate private key: %v", err) - } - privkey, err := w.GetPrivateKey(keys) - pssp := NewPssParams().WithPrivateKey(privkey) - ps, err := NewPss(kad, pssp) - if err != nil { - t.Fatal(err.Error()) - } - - pssmsg := &PssMsg{ - To: remoteaddr, - } - - // differ from first byte - if ps.isSelfRecipient(pssmsg) { - t.Fatalf("isSelfRecipient true but %x != %x", remoteaddr, localaddr) - } - if ps.isSelfPossibleRecipient(pssmsg, false) { - t.Fatalf("isSelfPossibleRecipient true but %x != %x", remoteaddr[:8], localaddr[:8]) - } - - // 8 first bytes same - copy(remoteaddr[:4], localaddr[:4]) - if ps.isSelfRecipient(pssmsg) { - t.Fatalf("isSelfRecipient true but %x != %x", remoteaddr, localaddr) - } - if !ps.isSelfPossibleRecipient(pssmsg, false) { - t.Fatalf("isSelfPossibleRecipient false but %x == %x", remoteaddr[:8], localaddr[:8]) - } - - // all bytes same - pssmsg.To = localaddr - if !ps.isSelfRecipient(pssmsg) { - t.Fatalf("isSelfRecipient false but %x == %x", remoteaddr, localaddr) - } - if !ps.isSelfPossibleRecipient(pssmsg, false) { - t.Fatalf("isSelfPossibleRecipient false but %x == %x", remoteaddr[:8], localaddr[:8]) - } - -} - -// test that message is handled by sender if a prox handler exists and sender is in prox of message -func TestProxShortCircuit(t *testing.T) { - - // sender node address - localAddr := network.RandomAddr().Over() - localPotAddr := pot.NewAddressFromBytes(localAddr) - - // set up kademlia - kadParams := network.NewKadParams() - kad := network.NewKademlia(localAddr, kadParams) - peerCount := kad.MinBinSize + 1 - - // set up pss - privKey, err := crypto.GenerateKey() - pssp := NewPssParams().WithPrivateKey(privKey) - ps, err := NewPss(kad, pssp) - if err != nil { - t.Fatal(err.Error()) - } - - // create kademlia peers, so we have peers both inside and outside minproxlimit - var peers []*network.Peer - proxMessageAddress := pot.RandomAddressAt(localPotAddr, peerCount).Bytes() - distantMessageAddress := pot.RandomAddressAt(localPotAddr, 0).Bytes() - - for i := 0; i < peerCount; i++ { - rw := &p2p.MsgPipeRW{} - ptpPeer := p2p.NewPeer(enode.ID{}, "wanna be with me? [ ] yes [ ] no", []p2p.Cap{}) - protoPeer := protocols.NewPeer(ptpPeer, rw, &protocols.Spec{}) - peerAddr := pot.RandomAddressAt(localPotAddr, i) - bzzPeer := &network.BzzPeer{ - Peer: protoPeer, - BzzAddr: &network.BzzAddr{ - OAddr: peerAddr.Bytes(), - UAddr: []byte(fmt.Sprintf("%x", peerAddr[:])), - }, - } - peer := network.NewPeer(bzzPeer, kad) - kad.On(peer) - peers = append(peers, peer) - } - - // register it marking prox capability - delivered := make(chan struct{}) - rawHandlerFunc := func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - log.Trace("in allowraw handler") - delivered <- struct{}{} - return nil - } - topic := BytesToTopic([]byte{0x2a}) - hndlrProxDereg := ps.Register(&topic, &handler{ - f: rawHandlerFunc, - caps: &handlerCaps{ - raw: true, - prox: true, - }, - }) - defer hndlrProxDereg() - - // send message too far away for sender to be in prox - // reception of this message should time out - errC := make(chan error) - go func() { - err := ps.SendRaw(distantMessageAddress, topic, []byte("foo")) - if err != nil { - errC <- err - } - }() - - ctx, cancel := context.WithTimeout(context.TODO(), time.Second) - defer cancel() - select { - case <-delivered: - t.Fatal("raw distant message delivered") - case err := <-errC: - t.Fatal(err) - case <-ctx.Done(): - } - - // send message that should be within sender prox - // this message should be delivered - go func() { - err := ps.SendRaw(proxMessageAddress, topic, []byte("bar")) - if err != nil { - errC <- err - } - }() - - ctx, cancel = context.WithTimeout(context.TODO(), time.Second) - defer cancel() - select { - case <-delivered: - case err := <-errC: - t.Fatal(err) - case <-ctx.Done(): - t.Fatal("raw timeout") - } - - // try the same prox message with sym and asym send - proxAddrPss := PssAddress(proxMessageAddress) - symKeyId, err := ps.GenerateSymmetricKey(topic, proxAddrPss, true) - go func() { - err := ps.SendSym(symKeyId, topic, []byte("baz")) - if err != nil { - errC <- err - } - }() - ctx, cancel = context.WithTimeout(context.TODO(), time.Second) - defer cancel() - select { - case <-delivered: - case err := <-errC: - t.Fatal(err) - case <-ctx.Done(): - t.Fatal("sym timeout") - } - - err = ps.SetPeerPublicKey(&privKey.PublicKey, topic, proxAddrPss) - if err != nil { - t.Fatal(err) - } - pubKeyId := hexutil.Encode(crypto.FromECDSAPub(&privKey.PublicKey)) - go func() { - err := ps.SendAsym(pubKeyId, topic, []byte("xyzzy")) - if err != nil { - errC <- err - } - }() - ctx, cancel = context.WithTimeout(context.TODO(), time.Second) - defer cancel() - select { - case <-delivered: - case err := <-errC: - t.Fatal(err) - case <-ctx.Done(): - t.Fatal("asym timeout") - } -} - -// verify that node can be set as recipient regardless of explicit message address match if minimum one handler of a topic is explicitly set to allow it -// note that in these tests we use the raw capability on handlers for convenience -func TestAddressMatchProx(t *testing.T) { - - // recipient node address - localAddr := network.RandomAddr().Over() - localPotAddr := pot.NewAddressFromBytes(localAddr) - - // set up kademlia - kadparams := network.NewKadParams() - kad := network.NewKademlia(localAddr, kadparams) - nnPeerCount := kad.MinBinSize - peerCount := nnPeerCount + 2 - - // set up pss - privKey, err := crypto.GenerateKey() - pssp := NewPssParams().WithPrivateKey(privKey) - ps, err := NewPss(kad, pssp) - if err != nil { - t.Fatal(err.Error()) - } - - // create kademlia peers, so we have peers both inside and outside minproxlimit - var peers []*network.Peer - for i := 0; i < peerCount; i++ { - rw := &p2p.MsgPipeRW{} - ptpPeer := p2p.NewPeer(enode.ID{}, "362436 call me anytime", []p2p.Cap{}) - protoPeer := protocols.NewPeer(ptpPeer, rw, &protocols.Spec{}) - peerAddr := pot.RandomAddressAt(localPotAddr, i) - bzzPeer := &network.BzzPeer{ - Peer: protoPeer, - BzzAddr: &network.BzzAddr{ - OAddr: peerAddr.Bytes(), - UAddr: []byte(fmt.Sprintf("%x", peerAddr[:])), - }, - } - peer := network.NewPeer(bzzPeer, kad) - kad.On(peer) - peers = append(peers, peer) - } - - // TODO: create a test in the network package to make a table with n peers where n-m are proxpeers - // meanwhile test regression for kademlia since we are compiling the test parameters from different packages - var proxes int - var conns int - depth := kad.NeighbourhoodDepth() - kad.EachConn(nil, peerCount, func(p *network.Peer, po int) bool { - conns++ - if po >= depth { - proxes++ - } - return true - }) - if proxes != nnPeerCount { - t.Fatalf("expected %d proxpeers, have %d", nnPeerCount, proxes) - } else if conns != peerCount { - t.Fatalf("expected %d peers total, have %d", peerCount, proxes) - } - - // remote address distances from localAddr to try and the expected outcomes if we use prox handler - remoteDistances := []int{ - 255, - nnPeerCount + 1, - nnPeerCount, - nnPeerCount - 1, - 0, - } - expects := []bool{ - true, - true, - true, - false, - false, - } - - // first the unit test on the method that calculates possible receipient using prox - for i, distance := range remoteDistances { - pssMsg := newPssMsg(&msgParams{}) - pssMsg.To = make([]byte, len(localAddr)) - copy(pssMsg.To, localAddr) - var byteIdx = distance / 8 - pssMsg.To[byteIdx] ^= 1 << uint(7-(distance%8)) - log.Trace(fmt.Sprintf("addrmatch %v", bytes.Equal(pssMsg.To, localAddr))) - if ps.isSelfPossibleRecipient(pssMsg, true) != expects[i] { - t.Fatalf("expected distance %d to be %v", distance, expects[i]) - } - } - - // we move up to higher level and test the actual message handler - // for each distance check if we are possible recipient when prox variant is used is set - - // this handler will increment a counter for every message that gets passed to the handler - var receives int - rawHandlerFunc := func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - log.Trace("in allowraw handler") - receives++ - return nil - } - - // register it marking prox capability - topic := BytesToTopic([]byte{0x2a}) - hndlrProxDereg := ps.Register(&topic, &handler{ - f: rawHandlerFunc, - caps: &handlerCaps{ - raw: true, - prox: true, - }, - }) - - // test the distances - var prevReceive int - for i, distance := range remoteDistances { - remotePotAddr := pot.RandomAddressAt(localPotAddr, distance) - remoteAddr := remotePotAddr.Bytes() - - var data [32]byte - rand.Read(data[:]) - pssMsg := newPssMsg(&msgParams{raw: true}) - pssMsg.To = remoteAddr - pssMsg.Expire = uint32(time.Now().Unix() + 4200) - pssMsg.Payload = &whisper.Envelope{ - Topic: whisper.TopicType(topic), - Data: data[:], - } - - log.Trace("withprox addrs", "local", localAddr, "remote", remoteAddr) - ps.handlePssMsg(context.TODO(), pssMsg) - if (!expects[i] && prevReceive != receives) || (expects[i] && prevReceive == receives) { - t.Fatalf("expected distance %d recipient %v when prox is set for handler", distance, expects[i]) - } - prevReceive = receives - } - - // now add a non prox-capable handler and test - ps.Register(&topic, &handler{ - f: rawHandlerFunc, - caps: &handlerCaps{ - raw: true, - }, - }) - receives = 0 - prevReceive = 0 - for i, distance := range remoteDistances { - remotePotAddr := pot.RandomAddressAt(localPotAddr, distance) - remoteAddr := remotePotAddr.Bytes() - - var data [32]byte - rand.Read(data[:]) - pssMsg := newPssMsg(&msgParams{raw: true}) - pssMsg.To = remoteAddr - pssMsg.Expire = uint32(time.Now().Unix() + 4200) - pssMsg.Payload = &whisper.Envelope{ - Topic: whisper.TopicType(topic), - Data: data[:], - } - - log.Trace("withprox addrs", "local", localAddr, "remote", remoteAddr) - ps.handlePssMsg(context.TODO(), pssMsg) - if (!expects[i] && prevReceive != receives) || (expects[i] && prevReceive == receives) { - t.Fatalf("expected distance %d recipient %v when prox is set for handler", distance, expects[i]) - } - prevReceive = receives - } - - // now deregister the prox capable handler, now none of the messages will be handled - hndlrProxDereg() - receives = 0 - - for _, distance := range remoteDistances { - remotePotAddr := pot.RandomAddressAt(localPotAddr, distance) - remoteAddr := remotePotAddr.Bytes() - - pssMsg := newPssMsg(&msgParams{raw: true}) - pssMsg.To = remoteAddr - pssMsg.Expire = uint32(time.Now().Unix() + 4200) - pssMsg.Payload = &whisper.Envelope{ - Topic: whisper.TopicType(topic), - Data: []byte(remotePotAddr.String()), - } - - log.Trace("noprox addrs", "local", localAddr, "remote", remoteAddr) - ps.handlePssMsg(context.TODO(), pssMsg) - if receives != 0 { - t.Fatalf("expected distance %d to not be recipient when prox is not set for handler", distance) - } - - } -} - -// verify that message queueing happens when it should, and that expired and corrupt messages are dropped -func TestMessageProcessing(t *testing.T) { - - t.Skip("Disabled due to probable faulty logic for outbox expectations") - // setup - privkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err.Error()) - } - - addr := make([]byte, 32) - addr[0] = 0x01 - ps := newTestPss(privkey, network.NewKademlia(addr, network.NewKadParams()), NewPssParams()) - defer ps.Stop() - - // message should pass - msg := newPssMsg(&msgParams{}) - msg.To = addr - msg.Expire = uint32(time.Now().Add(time.Second * 60).Unix()) - msg.Payload = &whisper.Envelope{ - Topic: [4]byte{}, - Data: []byte{0x66, 0x6f, 0x6f}, - } - if err := ps.handlePssMsg(context.TODO(), msg); err != nil { - t.Fatal(err.Error()) - } - tmr := time.NewTimer(time.Millisecond * 100) - var outmsg *PssMsg - select { - case outmsg = <-ps.outbox: - case <-tmr.C: - default: - } - if outmsg != nil { - t.Fatalf("expected outbox empty after full address on msg, but had message %s", msg) - } - - // message should pass and queue due to partial length - msg.To = addr[0:1] - msg.Payload.Data = []byte{0x78, 0x79, 0x80, 0x80, 0x79} - if err := ps.handlePssMsg(context.TODO(), msg); err != nil { - t.Fatal(err.Error()) - } - tmr.Reset(time.Millisecond * 100) - outmsg = nil - select { - case outmsg = <-ps.outbox: - case <-tmr.C: - } - if outmsg == nil { - t.Fatal("expected message in outbox on encrypt fail, but empty") - } - outmsg = nil - select { - case outmsg = <-ps.outbox: - default: - } - if outmsg != nil { - t.Fatalf("expected only one queued message but also had message %v", msg) - } - - // full address mismatch should put message in queue - msg.To[0] = 0xff - if err := ps.handlePssMsg(context.TODO(), msg); err != nil { - t.Fatal(err.Error()) - } - tmr.Reset(time.Millisecond * 10) - outmsg = nil - select { - case outmsg = <-ps.outbox: - case <-tmr.C: - } - if outmsg == nil { - t.Fatal("expected message in outbox on address mismatch, but empty") - } - outmsg = nil - select { - case outmsg = <-ps.outbox: - default: - } - if outmsg != nil { - t.Fatalf("expected only one queued message but also had message %v", msg) - } - - // expired message should be dropped - msg.Expire = uint32(time.Now().Add(-time.Second).Unix()) - if err := ps.handlePssMsg(context.TODO(), msg); err != nil { - t.Fatal(err.Error()) - } - tmr.Reset(time.Millisecond * 10) - outmsg = nil - select { - case outmsg = <-ps.outbox: - case <-tmr.C: - default: - } - if outmsg != nil { - t.Fatalf("expected empty queue but have message %v", msg) - } - - // invalid message should return error - fckedupmsg := &struct { - pssMsg *PssMsg - }{ - pssMsg: &PssMsg{}, - } - if err := ps.handlePssMsg(context.TODO(), fckedupmsg); err == nil { - t.Fatalf("expected error from processMsg but error nil") - } - - // outbox full should return error - msg.Expire = uint32(time.Now().Add(time.Second * 60).Unix()) - for i := 0; i < defaultOutboxCapacity; i++ { - ps.outbox <- msg - } - msg.Payload.Data = []byte{0x62, 0x61, 0x72} - err = ps.handlePssMsg(context.TODO(), msg) - if err == nil { - t.Fatal("expected error when mailbox full, but was nil") - } -} - -// set and generate pubkeys and symkeys -func TestKeys(t *testing.T) { - // make our key and init pss with it - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - ourkeys, err := wapi.NewKeyPair(ctx) - if err != nil { - t.Fatalf("create 'our' key fail") - } - ctx, cancel2 := context.WithTimeout(context.Background(), time.Second) - defer cancel2() - theirkeys, err := wapi.NewKeyPair(ctx) - if err != nil { - t.Fatalf("create 'their' key fail") - } - ourprivkey, err := w.GetPrivateKey(ourkeys) - if err != nil { - t.Fatalf("failed to retrieve 'our' private key") - } - theirprivkey, err := w.GetPrivateKey(theirkeys) - if err != nil { - t.Fatalf("failed to retrieve 'their' private key") - } - ps := newTestPss(ourprivkey, nil, nil) - defer ps.Stop() - - // set up peer with mock address, mapped to mocked publicaddress and with mocked symkey - addr := make(PssAddress, 32) - copy(addr, network.RandomAddr().Over()) - outkey := network.RandomAddr().Over() - topicobj := BytesToTopic([]byte("foo:42")) - ps.SetPeerPublicKey(&theirprivkey.PublicKey, topicobj, addr) - outkeyid, err := ps.SetSymmetricKey(outkey, topicobj, addr, false) - if err != nil { - t.Fatalf("failed to set 'our' outgoing symmetric key") - } - - // make a symmetric key that we will send to peer for encrypting messages to us - inkeyid, err := ps.GenerateSymmetricKey(topicobj, addr, true) - if err != nil { - t.Fatalf("failed to set 'our' incoming symmetric key") - } - - // get the key back from whisper, check that it's still the same - outkeyback, err := ps.w.GetSymKey(outkeyid) - if err != nil { - t.Fatalf(err.Error()) - } - inkey, err := ps.w.GetSymKey(inkeyid) - if err != nil { - t.Fatalf(err.Error()) - } - if !bytes.Equal(outkeyback, outkey) { - t.Fatalf("passed outgoing symkey doesnt equal stored: %x / %x", outkey, outkeyback) - } - - t.Logf("symout: %v", outkeyback) - t.Logf("symin: %v", inkey) - - // check that the key is stored in the peerpool - psp := ps.symKeyPool[inkeyid][topicobj] - if !bytes.Equal(psp.address, addr) { - t.Fatalf("inkey address does not match; %p != %p", psp.address, addr) - } -} - -// check that we can retrieve previously added public key entires per topic and peer -func TestGetPublickeyEntries(t *testing.T) { - - privkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - ps := newTestPss(privkey, nil, nil) - defer ps.Stop() - - peeraddr := network.RandomAddr().Over() - topicaddr := make(map[Topic]PssAddress) - topicaddr[Topic{0x13}] = peeraddr - topicaddr[Topic{0x2a}] = peeraddr[:16] - topicaddr[Topic{0x02, 0x9a}] = []byte{} - - remoteprivkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - remotepubkeybytes := crypto.FromECDSAPub(&remoteprivkey.PublicKey) - remotepubkeyhex := common.ToHex(remotepubkeybytes) - - pssapi := NewAPI(ps) - - for to, a := range topicaddr { - err = pssapi.SetPeerPublicKey(remotepubkeybytes, to, a) - if err != nil { - t.Fatal(err) - } - } - - intopic, err := pssapi.GetPeerTopics(remotepubkeyhex) - if err != nil { - t.Fatal(err) - } - -OUTER: - for _, tnew := range intopic { - for torig, addr := range topicaddr { - if bytes.Equal(torig[:], tnew[:]) { - inaddr, err := pssapi.GetPeerAddress(remotepubkeyhex, torig) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(addr, inaddr) { - t.Fatalf("Address mismatch for topic %x; got %x, expected %x", torig, inaddr, addr) - } - delete(topicaddr, torig) - continue OUTER - } - } - t.Fatalf("received topic %x did not match any existing topics", tnew) - } - - if len(topicaddr) != 0 { - t.Fatalf("%d topics were not matched", len(topicaddr)) - } -} - -// forwarding should skip peers that do not have matching pss capabilities -func TestPeerCapabilityMismatch(t *testing.T) { - - // create privkey for forwarder node - privkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - - // initialize kad - baseaddr := network.RandomAddr() - kad := network.NewKademlia((baseaddr).Over(), network.NewKadParams()) - rw := &p2p.MsgPipeRW{} - - // one peer has a mismatching version of pss - wrongpssaddr := network.RandomAddr() - wrongpsscap := p2p.Cap{ - Name: pssProtocolName, - Version: 0, - } - nid := enode.ID{0x01} - wrongpsspeer := network.NewPeer(&network.BzzPeer{ - Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(wrongpssaddr.Over()), []p2p.Cap{wrongpsscap}), rw, nil), - BzzAddr: &network.BzzAddr{OAddr: wrongpssaddr.Over(), UAddr: nil}, - }, kad) - - // one peer doesn't even have pss (boo!) - nopssaddr := network.RandomAddr() - nopsscap := p2p.Cap{ - Name: "nopss", - Version: 1, - } - nid = enode.ID{0x02} - nopsspeer := network.NewPeer(&network.BzzPeer{ - Peer: protocols.NewPeer(p2p.NewPeer(nid, common.ToHex(nopssaddr.Over()), []p2p.Cap{nopsscap}), rw, nil), - BzzAddr: &network.BzzAddr{OAddr: nopssaddr.Over(), UAddr: nil}, - }, kad) - - // add peers to kademlia and activate them - // it's safe so don't check errors - kad.Register(wrongpsspeer.BzzAddr) - kad.On(wrongpsspeer) - kad.Register(nopsspeer.BzzAddr) - kad.On(nopsspeer) - - // create pss - pssmsg := &PssMsg{ - To: []byte{}, - Expire: uint32(time.Now().Add(time.Second).Unix()), - Payload: &whisper.Envelope{}, - } - ps := newTestPss(privkey, kad, nil) - defer ps.Stop() - - // run the forward - // it is enough that it completes; trying to send to incapable peers would create segfault - ps.forward(pssmsg) - -} - -// verifies that message handlers for raw messages only are invoked when minimum one handler for the topic exists in which raw messages are explicitly allowed -func TestRawAllow(t *testing.T) { - - // set up pss like so many times before - privKey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - baseAddr := network.RandomAddr() - kad := network.NewKademlia((baseAddr).Over(), network.NewKadParams()) - ps := newTestPss(privKey, kad, nil) - defer ps.Stop() - topic := BytesToTopic([]byte{0x2a}) - - // create handler innards that increments every time a message hits it - var receives int - rawHandlerFunc := func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error { - log.Trace("in allowraw handler") - receives++ - return nil - } - - // wrap this handler function with a handler without raw capability and register it - hndlrNoRaw := &handler{ - f: rawHandlerFunc, - } - ps.Register(&topic, hndlrNoRaw) - - // test it with a raw message, should be poo-poo - pssMsg := newPssMsg(&msgParams{ - raw: true, - }) - pssMsg.To = baseAddr.OAddr - pssMsg.Expire = uint32(time.Now().Unix() + 4200) - pssMsg.Payload = &whisper.Envelope{ - Topic: whisper.TopicType(topic), - } - ps.handlePssMsg(context.TODO(), pssMsg) - if receives > 0 { - t.Fatalf("Expected handler not to be executed with raw cap off") - } - - // now wrap the same handler function with raw capabilities and register it - hndlrRaw := &handler{ - f: rawHandlerFunc, - caps: &handlerCaps{ - raw: true, - }, - } - deregRawHandler := ps.Register(&topic, hndlrRaw) - - // should work now - pssMsg.Payload.Data = []byte("Raw Deal") - ps.handlePssMsg(context.TODO(), pssMsg) - if receives == 0 { - t.Fatalf("Expected handler to be executed with raw cap on") - } - - // now deregister the raw capable handler - prevReceives := receives - deregRawHandler() - - // check that raw messages fail again - pssMsg.Payload.Data = []byte("Raw Trump") - ps.handlePssMsg(context.TODO(), pssMsg) - if receives != prevReceives { - t.Fatalf("Expected handler not to be executed when raw handler is retracted") - } -} - -// BELOW HERE ARE TESTS USING THE SIMULATION FRAMEWORK - -// tests that the API layer can handle edge case values -func TestApi(t *testing.T) { - clients, err := setupNetwork(2, true) - if err != nil { - t.Fatal(err) - } - - topic := "0xdeadbeef" - - err = clients[0].Call(nil, "pss_sendRaw", "0x", topic, "0x666f6f") - if err != nil { - t.Fatal(err) - } - - err = clients[0].Call(nil, "pss_sendRaw", "0xabcdef", topic, "0x") - if err == nil { - t.Fatal("expected error on empty msg") - } - - overflowAddr := [33]byte{} - err = clients[0].Call(nil, "pss_sendRaw", hexutil.Encode(overflowAddr[:]), topic, "0x666f6f") - if err == nil { - t.Fatal("expected error on send too big address") - } -} - -// verifies that nodes can send and receive raw (verbatim) messages -func TestSendRaw(t *testing.T) { - t.Run("32", testSendRaw) - t.Run("8", testSendRaw) - t.Run("0", testSendRaw) -} - -func testSendRaw(t *testing.T) { - - var addrsize int64 - var err error - - paramstring := strings.Split(t.Name(), "/") - - addrsize, _ = strconv.ParseInt(paramstring[1], 10, 0) - log.Info("raw send test", "addrsize", addrsize) - - clients, err := setupNetwork(2, true) - if err != nil { - t.Fatal(err) - } - - topic := "0xdeadbeef" - - var loaddrhex string - err = clients[0].Call(&loaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - loaddrhex = loaddrhex[:2+(addrsize*2)] - var roaddrhex string - err = clients[1].Call(&roaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddrhex = roaddrhex[:2+(addrsize*2)] - - time.Sleep(time.Millisecond * 500) - - // at this point we've verified that symkeys are saved and match on each peer - // now try sending symmetrically encrypted message, both directions - lmsgC := make(chan APIMsg) - lctx, lcancel := context.WithTimeout(context.Background(), time.Second*10) - defer lcancel() - lsub, err := clients[0].Subscribe(lctx, "pss", lmsgC, "receive", topic, true, false) - log.Trace("lsub", "id", lsub) - defer lsub.Unsubscribe() - rmsgC := make(chan APIMsg) - rctx, rcancel := context.WithTimeout(context.Background(), time.Second*10) - defer rcancel() - rsub, err := clients[1].Subscribe(rctx, "pss", rmsgC, "receive", topic, true, false) - log.Trace("rsub", "id", rsub) - defer rsub.Unsubscribe() - - // send and verify delivery - lmsg := []byte("plugh") - err = clients[1].Call(nil, "pss_sendRaw", loaddrhex, topic, hexutil.Encode(lmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-lmsgC: - if !bytes.Equal(recvmsg.Msg, lmsg) { - t.Fatalf("node 1 received payload mismatch: expected %v, got %v", lmsg, recvmsg) - } - case cerr := <-lctx.Done(): - t.Fatalf("test message (left) timed out: %v", cerr) - } - rmsg := []byte("xyzzy") - err = clients[0].Call(nil, "pss_sendRaw", roaddrhex, topic, hexutil.Encode(rmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-rmsgC: - if !bytes.Equal(recvmsg.Msg, rmsg) { - t.Fatalf("node 2 received payload mismatch: expected %x, got %v", rmsg, recvmsg.Msg) - } - case cerr := <-rctx.Done(): - t.Fatalf("test message (right) timed out: %v", cerr) - } -} - -// send symmetrically encrypted message between two directly connected peers -func TestSendSym(t *testing.T) { - t.Run("32", testSendSym) - t.Run("8", testSendSym) - t.Run("0", testSendSym) -} - -func testSendSym(t *testing.T) { - - // address hint size - var addrsize int64 - var err error - paramstring := strings.Split(t.Name(), "/") - addrsize, _ = strconv.ParseInt(paramstring[1], 10, 0) - log.Info("sym send test", "addrsize", addrsize) - - clients, err := setupNetwork(2, false) - if err != nil { - t.Fatal(err) - } - - var topic string - err = clients[0].Call(&topic, "pss_stringToTopic", "foo:42") - if err != nil { - t.Fatal(err) - } - - var loaddrhex string - err = clients[0].Call(&loaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - loaddrhex = loaddrhex[:2+(addrsize*2)] - var roaddrhex string - err = clients[1].Call(&roaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddrhex = roaddrhex[:2+(addrsize*2)] - - // retrieve public key from pss instance - // set this public key reciprocally - var lpubkeyhex string - err = clients[0].Call(&lpubkeyhex, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 1 pubkey fail: %v", err) - } - var rpubkeyhex string - err = clients[1].Call(&rpubkeyhex, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 2 pubkey fail: %v", err) - } - - time.Sleep(time.Millisecond * 500) - - // at this point we've verified that symkeys are saved and match on each peer - // now try sending symmetrically encrypted message, both directions - lmsgC := make(chan APIMsg) - lctx, lcancel := context.WithTimeout(context.Background(), time.Second*10) - defer lcancel() - lsub, err := clients[0].Subscribe(lctx, "pss", lmsgC, "receive", topic, false, false) - log.Trace("lsub", "id", lsub) - defer lsub.Unsubscribe() - rmsgC := make(chan APIMsg) - rctx, rcancel := context.WithTimeout(context.Background(), time.Second*10) - defer rcancel() - rsub, err := clients[1].Subscribe(rctx, "pss", rmsgC, "receive", topic, false, false) - log.Trace("rsub", "id", rsub) - defer rsub.Unsubscribe() - - lrecvkey := network.RandomAddr().Over() - rrecvkey := network.RandomAddr().Over() - - var lkeyids [2]string - var rkeyids [2]string - - // manually set reciprocal symkeys - err = clients[0].Call(&lkeyids, "psstest_setSymKeys", rpubkeyhex, lrecvkey, rrecvkey, defaultSymKeySendLimit, topic, roaddrhex) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(&rkeyids, "psstest_setSymKeys", lpubkeyhex, rrecvkey, lrecvkey, defaultSymKeySendLimit, topic, loaddrhex) - if err != nil { - t.Fatal(err) - } - - // send and verify delivery - lmsg := []byte("plugh") - err = clients[1].Call(nil, "pss_sendSym", rkeyids[1], topic, hexutil.Encode(lmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-lmsgC: - if !bytes.Equal(recvmsg.Msg, lmsg) { - t.Fatalf("node 1 received payload mismatch: expected %v, got %v", lmsg, recvmsg) - } - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } - rmsg := []byte("xyzzy") - err = clients[0].Call(nil, "pss_sendSym", lkeyids[1], topic, hexutil.Encode(rmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-rmsgC: - if !bytes.Equal(recvmsg.Msg, rmsg) { - t.Fatalf("node 2 received payload mismatch: expected %x, got %v", rmsg, recvmsg.Msg) - } - case cerr := <-rctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } -} - -// send asymmetrically encrypted message between two directly connected peers -func TestSendAsym(t *testing.T) { - t.Run("32", testSendAsym) - t.Run("8", testSendAsym) - t.Run("0", testSendAsym) -} - -func testSendAsym(t *testing.T) { - - // address hint size - var addrsize int64 - var err error - paramstring := strings.Split(t.Name(), "/") - addrsize, _ = strconv.ParseInt(paramstring[1], 10, 0) - log.Info("asym send test", "addrsize", addrsize) - - clients, err := setupNetwork(2, false) - if err != nil { - t.Fatal(err) - } - - var topic string - err = clients[0].Call(&topic, "pss_stringToTopic", "foo:42") - if err != nil { - t.Fatal(err) - } - - time.Sleep(time.Millisecond * 250) - - var loaddrhex string - err = clients[0].Call(&loaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - loaddrhex = loaddrhex[:2+(addrsize*2)] - var roaddrhex string - err = clients[1].Call(&roaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddrhex = roaddrhex[:2+(addrsize*2)] - - // retrieve public key from pss instance - // set this public key reciprocally - var lpubkey string - err = clients[0].Call(&lpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 1 pubkey fail: %v", err) - } - var rpubkey string - err = clients[1].Call(&rpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get node 2 pubkey fail: %v", err) - } - - time.Sleep(time.Millisecond * 500) // replace with hive healthy code - - lmsgC := make(chan APIMsg) - lctx, lcancel := context.WithTimeout(context.Background(), time.Second*10) - defer lcancel() - lsub, err := clients[0].Subscribe(lctx, "pss", lmsgC, "receive", topic, false, false) - log.Trace("lsub", "id", lsub) - defer lsub.Unsubscribe() - rmsgC := make(chan APIMsg) - rctx, rcancel := context.WithTimeout(context.Background(), time.Second*10) - defer rcancel() - rsub, err := clients[1].Subscribe(rctx, "pss", rmsgC, "receive", topic, false, false) - log.Trace("rsub", "id", rsub) - defer rsub.Unsubscribe() - - // store reciprocal public keys - err = clients[0].Call(nil, "pss_setPeerPublicKey", rpubkey, topic, roaddrhex) - if err != nil { - t.Fatal(err) - } - err = clients[1].Call(nil, "pss_setPeerPublicKey", lpubkey, topic, loaddrhex) - if err != nil { - t.Fatal(err) - } - - // send and verify delivery - rmsg := []byte("xyzzy") - err = clients[0].Call(nil, "pss_sendAsym", rpubkey, topic, hexutil.Encode(rmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-rmsgC: - if !bytes.Equal(recvmsg.Msg, rmsg) { - t.Fatalf("node 2 received payload mismatch: expected %v, got %v", rmsg, recvmsg.Msg) - } - case cerr := <-rctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } - lmsg := []byte("plugh") - err = clients[1].Call(nil, "pss_sendAsym", lpubkey, topic, hexutil.Encode(lmsg)) - if err != nil { - t.Fatal(err) - } - select { - case recvmsg := <-lmsgC: - if !bytes.Equal(recvmsg.Msg, lmsg) { - t.Fatalf("node 1 received payload mismatch: expected %v, got %v", lmsg, recvmsg.Msg) - } - case cerr := <-lctx.Done(): - t.Fatalf("test message timed out: %v", cerr) - } -} - -type Job struct { - Msg []byte - SendNode enode.ID - RecvNode enode.ID -} - -func worker(id int, jobs <-chan Job, rpcs map[enode.ID]*rpc.Client, pubkeys map[enode.ID]string, topic string) { - for j := range jobs { - rpcs[j.SendNode].Call(nil, "pss_sendAsym", pubkeys[j.RecvNode], topic, hexutil.Encode(j.Msg)) - } -} - -func TestNetwork(t *testing.T) { - t.Run("16/1000/4/sim", testNetwork) -} - -// params in run name: -// nodes/msgs/addrbytes/adaptertype -// if adaptertype is exec uses execadapter, simadapter otherwise -func TestNetwork2000(t *testing.T) { - //enableMetrics() - - if !*longrunning { - t.Skip("run with --longrunning flag to run extensive network tests") - } - t.Run("3/2000/4/sim", testNetwork) - t.Run("4/2000/4/sim", testNetwork) - t.Run("8/2000/4/sim", testNetwork) - t.Run("16/2000/4/sim", testNetwork) -} - -func TestNetwork5000(t *testing.T) { - //enableMetrics() - - if !*longrunning { - t.Skip("run with --longrunning flag to run extensive network tests") - } - t.Run("3/5000/4/sim", testNetwork) - t.Run("4/5000/4/sim", testNetwork) - t.Run("8/5000/4/sim", testNetwork) - t.Run("16/5000/4/sim", testNetwork) -} - -func TestNetwork10000(t *testing.T) { - //enableMetrics() - - if !*longrunning { - t.Skip("run with --longrunning flag to run extensive network tests") - } - t.Run("3/10000/4/sim", testNetwork) - t.Run("4/10000/4/sim", testNetwork) - t.Run("8/10000/4/sim", testNetwork) -} - -func testNetwork(t *testing.T) { - paramstring := strings.Split(t.Name(), "/") - nodecount, _ := strconv.ParseInt(paramstring[1], 10, 0) - msgcount, _ := strconv.ParseInt(paramstring[2], 10, 0) - addrsize, _ := strconv.ParseInt(paramstring[3], 10, 0) - adapter := paramstring[4] - - log.Info("network test", "nodecount", nodecount, "msgcount", msgcount, "addrhintsize", addrsize) - - nodes := make([]enode.ID, nodecount) - bzzaddrs := make(map[enode.ID]string, nodecount) - rpcs := make(map[enode.ID]*rpc.Client, nodecount) - pubkeys := make(map[enode.ID]string, nodecount) - - sentmsgs := make([][]byte, msgcount) - recvmsgs := make([]bool, msgcount) - nodemsgcount := make(map[enode.ID]int, nodecount) - - trigger := make(chan enode.ID) - - var a adapters.NodeAdapter - if adapter == "exec" { - dirname, err := ioutil.TempDir(".", "") - if err != nil { - t.Fatal(err) - } - a = adapters.NewExecAdapter(dirname) - } else if adapter == "tcp" { - a = adapters.NewTCPAdapter(newServices(false)) - } else if adapter == "sim" { - a = adapters.NewSimAdapter(newServices(false)) - } - net := simulations.NewNetwork(a, &simulations.NetworkConfig{ - ID: "0", - }) - defer net.Shutdown() - - f, err := os.Open(fmt.Sprintf("testdata/snapshot_%d.json", nodecount)) - if err != nil { - t.Fatal(err) - } - jsonbyte, err := ioutil.ReadAll(f) - if err != nil { - t.Fatal(err) - } - var snap simulations.Snapshot - err = json.Unmarshal(jsonbyte, &snap) - if err != nil { - t.Fatal(err) - } - err = net.Load(&snap) - if err != nil { - //TODO: Fix p2p simulation framework to not crash when loading 32-nodes - //t.Fatal(err) - } - - time.Sleep(1 * time.Second) - - triggerChecks := func(trigger chan enode.ID, id enode.ID, rpcclient *rpc.Client, topic string) error { - msgC := make(chan APIMsg) - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - sub, err := rpcclient.Subscribe(ctx, "pss", msgC, "receive", topic, false, false) - if err != nil { - t.Fatal(err) - } - go func() { - defer sub.Unsubscribe() - for { - select { - case recvmsg := <-msgC: - idx, _ := binary.Uvarint(recvmsg.Msg) - if !recvmsgs[idx] { - log.Debug("msg recv", "idx", idx, "id", id) - recvmsgs[idx] = true - trigger <- id - } - case <-sub.Err(): - return - } - } - }() - return nil - } - - var topic string - for i, nod := range net.GetNodes() { - nodes[i] = nod.ID() - rpcs[nodes[i]], err = nod.Client() - if err != nil { - t.Fatal(err) - } - if topic == "" { - err = rpcs[nodes[i]].Call(&topic, "pss_stringToTopic", "foo:42") - if err != nil { - t.Fatal(err) - } - } - var pubkey string - err = rpcs[nodes[i]].Call(&pubkey, "pss_getPublicKey") - if err != nil { - t.Fatal(err) - } - pubkeys[nod.ID()] = pubkey - var addrhex string - err = rpcs[nodes[i]].Call(&addrhex, "pss_baseAddr") - if err != nil { - t.Fatal(err) - } - bzzaddrs[nodes[i]] = addrhex - err = triggerChecks(trigger, nodes[i], rpcs[nodes[i]], topic) - if err != nil { - t.Fatal(err) - } - } - - time.Sleep(1 * time.Second) - - // setup workers - jobs := make(chan Job, 10) - for w := 1; w <= 10; w++ { - go worker(w, jobs, rpcs, pubkeys, topic) - } - - time.Sleep(1 * time.Second) - - for i := 0; i < int(msgcount); i++ { - sendnodeidx := rand.Intn(int(nodecount)) - recvnodeidx := rand.Intn(int(nodecount - 1)) - if recvnodeidx >= sendnodeidx { - recvnodeidx++ - } - nodemsgcount[nodes[recvnodeidx]]++ - sentmsgs[i] = make([]byte, 8) - c := binary.PutUvarint(sentmsgs[i], uint64(i)) - if c == 0 { - t.Fatal("0 byte message") - } - if err != nil { - t.Fatal(err) - } - err = rpcs[nodes[sendnodeidx]].Call(nil, "pss_setPeerPublicKey", pubkeys[nodes[recvnodeidx]], topic, bzzaddrs[nodes[recvnodeidx]]) - if err != nil { - t.Fatal(err) - } - - jobs <- Job{ - Msg: sentmsgs[i], - SendNode: nodes[sendnodeidx], - RecvNode: nodes[recvnodeidx], - } - } - - finalmsgcount := 0 - ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) - defer cancel() -outer: - for i := 0; i < int(msgcount); i++ { - select { - case id := <-trigger: - nodemsgcount[id]-- - finalmsgcount++ - case <-ctx.Done(): - log.Warn("timeout") - break outer - } - } - - for i, msg := range recvmsgs { - if !msg { - log.Debug("missing message", "idx", i) - } - } - t.Logf("%d of %d messages received", finalmsgcount, msgcount) - - if finalmsgcount != int(msgcount) { - t.Fatalf("%d messages were not received", int(msgcount)-finalmsgcount) - } - -} - -// check that in a network of a -> b -> c -> a -// a doesn't receive a sent message twice -func TestDeduplication(t *testing.T) { - var err error - - clients, err := setupNetwork(3, false) - if err != nil { - t.Fatal(err) - } - - var addrsize = 32 - var loaddrhex string - err = clients[0].Call(&loaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 1 baseaddr fail: %v", err) - } - loaddrhex = loaddrhex[:2+(addrsize*2)] - var roaddrhex string - err = clients[1].Call(&roaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 2 baseaddr fail: %v", err) - } - roaddrhex = roaddrhex[:2+(addrsize*2)] - var xoaddrhex string - err = clients[2].Call(&xoaddrhex, "pss_baseAddr") - if err != nil { - t.Fatalf("rpc get node 3 baseaddr fail: %v", err) - } - xoaddrhex = xoaddrhex[:2+(addrsize*2)] - - log.Info("peer", "l", loaddrhex, "r", roaddrhex, "x", xoaddrhex) - - var topic string - err = clients[0].Call(&topic, "pss_stringToTopic", "foo:42") - if err != nil { - t.Fatal(err) - } - - time.Sleep(time.Millisecond * 250) - - // retrieve public key from pss instance - // set this public key reciprocally - var rpubkey string - err = clients[1].Call(&rpubkey, "pss_getPublicKey") - if err != nil { - t.Fatalf("rpc get receivenode pubkey fail: %v", err) - } - - time.Sleep(time.Millisecond * 500) // replace with hive healthy code - - rmsgC := make(chan APIMsg) - rctx, cancel := context.WithTimeout(context.Background(), time.Second*1) - defer cancel() - rsub, err := clients[1].Subscribe(rctx, "pss", rmsgC, "receive", topic, false, false) - log.Trace("rsub", "id", rsub) - defer rsub.Unsubscribe() - - // store public key for recipient - // zero-length address means forward to all - // we have just two peers, they will be in proxbin, and will both receive - err = clients[0].Call(nil, "pss_setPeerPublicKey", rpubkey, topic, "0x") - if err != nil { - t.Fatal(err) - } - - // send and verify delivery - rmsg := []byte("xyzzy") - err = clients[0].Call(nil, "pss_sendAsym", rpubkey, topic, hexutil.Encode(rmsg)) - if err != nil { - t.Fatal(err) - } - - var receivedok bool -OUTER: - for { - select { - case <-rmsgC: - if receivedok { - t.Fatalf("duplicate message received") - } - receivedok = true - case <-rctx.Done(): - break OUTER - } - } - if !receivedok { - t.Fatalf("message did not arrive") - } -} - -// symmetric send performance with varying message sizes -func BenchmarkSymkeySend(b *testing.B) { - b.Run(fmt.Sprintf("%d", 256), benchmarkSymKeySend) - b.Run(fmt.Sprintf("%d", 1024), benchmarkSymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024), benchmarkSymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024*10), benchmarkSymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024*100), benchmarkSymKeySend) -} - -func benchmarkSymKeySend(b *testing.B) { - msgsizestring := strings.Split(b.Name(), "/") - if len(msgsizestring) != 2 { - b.Fatalf("benchmark called without msgsize param") - } - msgsize, err := strconv.ParseInt(msgsizestring[1], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid msgsize param '%s': %v", msgsizestring[1], err) - } - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - privkey, err := w.GetPrivateKey(keys) - ps := newTestPss(privkey, nil, nil) - defer ps.Stop() - msg := make([]byte, msgsize) - rand.Read(msg) - topic := BytesToTopic([]byte("foo")) - to := make(PssAddress, 32) - copy(to[:], network.RandomAddr().Over()) - symkeyid, err := ps.GenerateSymmetricKey(topic, to, true) - if err != nil { - b.Fatalf("could not generate symkey: %v", err) - } - symkey, err := ps.w.GetSymKey(symkeyid) - if err != nil { - b.Fatalf("could not retrieve symkey: %v", err) - } - ps.SetSymmetricKey(symkey, topic, to, false) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - ps.SendSym(symkeyid, topic, msg) - } -} - -// asymmetric send performance with varying message sizes -func BenchmarkAsymkeySend(b *testing.B) { - b.Run(fmt.Sprintf("%d", 256), benchmarkAsymKeySend) - b.Run(fmt.Sprintf("%d", 1024), benchmarkAsymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024), benchmarkAsymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024*10), benchmarkAsymKeySend) - b.Run(fmt.Sprintf("%d", 1024*1024*100), benchmarkAsymKeySend) -} - -func benchmarkAsymKeySend(b *testing.B) { - msgsizestring := strings.Split(b.Name(), "/") - if len(msgsizestring) != 2 { - b.Fatalf("benchmark called without msgsize param") - } - msgsize, err := strconv.ParseInt(msgsizestring[1], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid msgsize param '%s': %v", msgsizestring[1], err) - } - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - privkey, err := w.GetPrivateKey(keys) - ps := newTestPss(privkey, nil, nil) - defer ps.Stop() - msg := make([]byte, msgsize) - rand.Read(msg) - topic := BytesToTopic([]byte("foo")) - to := make(PssAddress, 32) - copy(to[:], network.RandomAddr().Over()) - ps.SetPeerPublicKey(&privkey.PublicKey, topic, to) - b.ResetTimer() - for i := 0; i < b.N; i++ { - ps.SendAsym(common.ToHex(crypto.FromECDSAPub(&privkey.PublicKey)), topic, msg) - } -} -func BenchmarkSymkeyBruteforceChangeaddr(b *testing.B) { - for i := 100; i < 100000; i = i * 10 { - for j := 32; j < 10000; j = j * 8 { - b.Run(fmt.Sprintf("%d/%d", i, j), benchmarkSymkeyBruteforceChangeaddr) - } - //b.Run(fmt.Sprintf("%d", i), benchmarkSymkeyBruteforceChangeaddr) - } -} - -// decrypt performance using symkey cache, worst case -// (decrypt key always last in cache) -func benchmarkSymkeyBruteforceChangeaddr(b *testing.B) { - keycountstring := strings.Split(b.Name(), "/") - cachesize := int64(0) - var ps *Pss - if len(keycountstring) < 2 { - b.Fatalf("benchmark called without count param") - } - keycount, err := strconv.ParseInt(keycountstring[1], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid count param '%s': %v", keycountstring[1], err) - } - if len(keycountstring) == 3 { - cachesize, err = strconv.ParseInt(keycountstring[2], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid cachesize '%s': %v", keycountstring[2], err) - } - } - pssmsgs := make([]*PssMsg, 0, keycount) - var keyid string - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - privkey, err := w.GetPrivateKey(keys) - if cachesize > 0 { - ps = newTestPss(privkey, nil, &PssParams{SymKeyCacheCapacity: int(cachesize)}) - } else { - ps = newTestPss(privkey, nil, nil) - } - defer ps.Stop() - topic := BytesToTopic([]byte("foo")) - for i := 0; i < int(keycount); i++ { - to := make(PssAddress, 32) - copy(to[:], network.RandomAddr().Over()) - keyid, err = ps.GenerateSymmetricKey(topic, to, true) - if err != nil { - b.Fatalf("cant generate symkey #%d: %v", i, err) - } - symkey, err := ps.w.GetSymKey(keyid) - if err != nil { - b.Fatalf("could not retrieve symkey %s: %v", keyid, err) - } - wparams := &whisper.MessageParams{ - TTL: defaultWhisperTTL, - KeySym: symkey, - Topic: whisper.TopicType(topic), - WorkTime: defaultWhisperWorkTime, - PoW: defaultWhisperPoW, - Payload: []byte("xyzzy"), - Padding: []byte("1234567890abcdef"), - } - woutmsg, err := whisper.NewSentMessage(wparams) - if err != nil { - b.Fatalf("could not create whisper message: %v", err) - } - env, err := woutmsg.Wrap(wparams) - if err != nil { - b.Fatalf("could not generate whisper envelope: %v", err) - } - ps.Register(&topic, &handler{ - f: noopHandlerFunc, - }) - pssmsgs = append(pssmsgs, &PssMsg{ - To: to, - Payload: env, - }) - } - b.ResetTimer() - for i := 0; i < b.N; i++ { - if err := ps.process(pssmsgs[len(pssmsgs)-(i%len(pssmsgs))-1], false, false); err != nil { - b.Fatalf("pss processing failed: %v", err) - } - } -} - -func BenchmarkSymkeyBruteforceSameaddr(b *testing.B) { - for i := 100; i < 100000; i = i * 10 { - for j := 32; j < 10000; j = j * 8 { - b.Run(fmt.Sprintf("%d/%d", i, j), benchmarkSymkeyBruteforceSameaddr) - } - } -} - -// decrypt performance using symkey cache, best case -// (decrypt key always first in cache) -func benchmarkSymkeyBruteforceSameaddr(b *testing.B) { - var keyid string - var ps *Pss - cachesize := int64(0) - keycountstring := strings.Split(b.Name(), "/") - if len(keycountstring) < 2 { - b.Fatalf("benchmark called without count param") - } - keycount, err := strconv.ParseInt(keycountstring[1], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid count param '%s': %v", keycountstring[1], err) - } - if len(keycountstring) == 3 { - cachesize, err = strconv.ParseInt(keycountstring[2], 10, 0) - if err != nil { - b.Fatalf("benchmark called with invalid cachesize '%s': %v", keycountstring[2], err) - } - } - addr := make([]PssAddress, keycount) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctx) - privkey, err := w.GetPrivateKey(keys) - if cachesize > 0 { - ps = newTestPss(privkey, nil, &PssParams{SymKeyCacheCapacity: int(cachesize)}) - } else { - ps = newTestPss(privkey, nil, nil) - } - defer ps.Stop() - topic := BytesToTopic([]byte("foo")) - for i := 0; i < int(keycount); i++ { - copy(addr[i], network.RandomAddr().Over()) - keyid, err = ps.GenerateSymmetricKey(topic, addr[i], true) - if err != nil { - b.Fatalf("cant generate symkey #%d: %v", i, err) - } - - } - symkey, err := ps.w.GetSymKey(keyid) - if err != nil { - b.Fatalf("could not retrieve symkey %s: %v", keyid, err) - } - wparams := &whisper.MessageParams{ - TTL: defaultWhisperTTL, - KeySym: symkey, - Topic: whisper.TopicType(topic), - WorkTime: defaultWhisperWorkTime, - PoW: defaultWhisperPoW, - Payload: []byte("xyzzy"), - Padding: []byte("1234567890abcdef"), - } - woutmsg, err := whisper.NewSentMessage(wparams) - if err != nil { - b.Fatalf("could not create whisper message: %v", err) - } - env, err := woutmsg.Wrap(wparams) - if err != nil { - b.Fatalf("could not generate whisper envelope: %v", err) - } - ps.Register(&topic, &handler{ - f: noopHandlerFunc, - }) - pssmsg := &PssMsg{ - To: addr[len(addr)-1][:], - Payload: env, - } - for i := 0; i < b.N; i++ { - if err := ps.process(pssmsg, false, false); err != nil { - b.Fatalf("pss processing failed: %v", err) - } - } -} - -// setup simulated network with bzz/discovery and pss services. -// connects nodes in a circle -// if allowRaw is set, omission of builtin pss encryption is enabled (see PssParams) -func setupNetwork(numnodes int, allowRaw bool) (clients []*rpc.Client, err error) { - nodes := make([]*simulations.Node, numnodes) - clients = make([]*rpc.Client, numnodes) - if numnodes < 2 { - return nil, fmt.Errorf("Minimum two nodes in network") - } - adapter := adapters.NewSimAdapter(newServices(allowRaw)) - net := simulations.NewNetwork(adapter, &simulations.NetworkConfig{ - ID: "0", - DefaultService: "bzz", - }) - for i := 0; i < numnodes; i++ { - nodeconf := adapters.RandomNodeConfig() - nodeconf.Services = []string{"bzz", pssProtocolName} - nodes[i], err = net.NewNodeWithConfig(nodeconf) - if err != nil { - return nil, fmt.Errorf("error creating node 1: %v", err) - } - err = net.Start(nodes[i].ID()) - if err != nil { - return nil, fmt.Errorf("error starting node 1: %v", err) - } - if i > 0 { - err = net.Connect(nodes[i].ID(), nodes[i-1].ID()) - if err != nil { - return nil, fmt.Errorf("error connecting nodes: %v", err) - } - } - clients[i], err = nodes[i].Client() - if err != nil { - return nil, fmt.Errorf("create node 1 rpc client fail: %v", err) - } - } - if numnodes > 2 { - err = net.Connect(nodes[0].ID(), nodes[len(nodes)-1].ID()) - if err != nil { - return nil, fmt.Errorf("error connecting first and last nodes") - } - } - return clients, nil -} - -func newServices(allowRaw bool) adapters.Services { - stateStore := state.NewInmemoryStore() - kademlias := make(map[enode.ID]*network.Kademlia) - kademlia := func(id enode.ID) *network.Kademlia { - if k, ok := kademlias[id]; ok { - return k - } - params := network.NewKadParams() - params.NeighbourhoodSize = 2 - params.MaxBinSize = 3 - params.MinBinSize = 1 - params.MaxRetries = 1000 - params.RetryExponent = 2 - params.RetryInterval = 1000000 - kademlias[id] = network.NewKademlia(id[:], params) - return kademlias[id] - } - return adapters.Services{ - pssProtocolName: func(ctx *adapters.ServiceContext) (node.Service, error) { - // execadapter does not exec init() - initTest() - - ctxlocal, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - keys, err := wapi.NewKeyPair(ctxlocal) - privkey, err := w.GetPrivateKey(keys) - pssp := NewPssParams().WithPrivateKey(privkey) - pssp.AllowRaw = allowRaw - pskad := kademlia(ctx.Config.ID) - ps, err := NewPss(pskad, pssp) - if err != nil { - return nil, err - } - - ping := &Ping{ - OutC: make(chan bool), - Pong: true, - } - p2pp := NewPingProtocol(ping) - pp, err := RegisterProtocol(ps, &PingTopic, PingProtocol, p2pp, &ProtocolParams{Asymmetric: true}) - if err != nil { - return nil, err - } - if useHandshake { - SetHandshakeController(ps, NewHandshakeParams()) - } - ps.Register(&PingTopic, &handler{ - f: pp.Handle, - caps: &handlerCaps{ - raw: true, - }, - }) - ps.addAPI(rpc.API{ - Namespace: "psstest", - Version: "0.3", - Service: NewAPITest(ps), - Public: false, - }) - if err != nil { - log.Error("Couldnt register pss protocol", "err", err) - os.Exit(1) - } - pssprotocols[ctx.Config.ID.String()] = &protoCtrl{ - C: ping.OutC, - protocol: pp, - run: p2pp.Run, - } - return ps, nil - }, - "bzz": func(ctx *adapters.ServiceContext) (node.Service, error) { - addr := network.NewAddr(ctx.Config.Node()) - hp := network.NewHiveParams() - hp.Discovery = false - config := &network.BzzConfig{ - OverlayAddr: addr.Over(), - UnderlayAddr: addr.Under(), - HiveParams: hp, - } - return network.NewBzz(config, kademlia(ctx.Config.ID), stateStore, nil, nil), nil - }, - } -} - -func newTestPss(privkey *ecdsa.PrivateKey, kad *network.Kademlia, ppextra *PssParams) *Pss { - nid := enode.PubkeyToIDV4(&privkey.PublicKey) - // set up routing if kademlia is not passed to us - if kad == nil { - kp := network.NewKadParams() - kp.NeighbourhoodSize = 3 - kad = network.NewKademlia(nid[:], kp) - } - - // create pss - pp := NewPssParams().WithPrivateKey(privkey) - if ppextra != nil { - pp.SymKeyCacheCapacity = ppextra.SymKeyCacheCapacity - } - ps, err := NewPss(kad, pp) - if err != nil { - return nil - } - ps.Start(nil) - - return ps -} - -// API calls for test/development use -type APITest struct { - *Pss -} - -func NewAPITest(ps *Pss) *APITest { - return &APITest{Pss: ps} -} - -func (apitest *APITest) SetSymKeys(pubkeyid string, recvsymkey []byte, sendsymkey []byte, limit uint16, topic Topic, to hexutil.Bytes) ([2]string, error) { - - recvsymkeyid, err := apitest.SetSymmetricKey(recvsymkey, topic, PssAddress(to), true) - if err != nil { - return [2]string{}, err - } - sendsymkeyid, err := apitest.SetSymmetricKey(sendsymkey, topic, PssAddress(to), false) - if err != nil { - return [2]string{}, err - } - return [2]string{recvsymkeyid, sendsymkeyid}, nil -} - -func (apitest *APITest) Clean() (int, error) { - return apitest.Pss.cleanKeys(), nil -} - -// enableMetrics is starting InfluxDB reporter so that we collect stats when running tests locally -func enableMetrics() { - metrics.Enabled = true - go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 1*time.Second, "http://localhost:8086", "metrics", "admin", "admin", "swarm.", map[string]string{ - "host": "test", - }) -} diff --git a/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl b/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl deleted file mode 100644 index b75cc9894add..000000000000 --- a/swarm/pss/testdata/addpsstodiscoverytestsnapshot.pl +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/perl - -use JSON; - -my $f; -my $jsontext; -my $nodelist; -my $network; - -open($f, "<", $ARGV[0]) || die "cant open " . $ARGV[0]; -while (<$f>) { - $jsontext .= $_; -} -close($f); - -$network = decode_json($jsontext); -$nodelist = $network->{'nodes'}; - -for ($i = 0; $i < 0+@$nodelist; $i++) { - #my $protocollist = $$nodelist[$i]{'node'}{'info'}{'protocols'}; - #$$protocollist{'pss'} = "pss"; - my $svc = $$nodelist[$i]{'node'}{'config'}{'services'}; - pop(@$svc); - push(@$svc, "pss"); - push(@$svc, "bzz"); -} - -print encode_json($network); diff --git a/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh b/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh deleted file mode 100644 index 7d3c2849169d..000000000000 --- a/swarm/pss/testdata/addpsstodiscoverytestsnapshot.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -sed -e 's/\(\"services\"\):\["discovery\"]/\1:["pss","bzz"]/' diff --git a/swarm/pss/testdata/snapshot_128.json b/swarm/pss/testdata/snapshot_128.json deleted file mode 100644 index 7bafd358fb22..000000000000 --- a/swarm/pss/testdata/snapshot_128.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","private_key":"79eaaa1c3a9339a90cf54c511649caf683f2910588a872d2c12919355b7d5d28","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","private_key":"b067839f81534251ade8651e682dbd8324dfb83c7034aff4a48909e9310c990a","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","private_key":"4233e4c480ae197c265975cc7c83cc7b0cf1a8d67e4728bac4bcecaee63ad935","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","private_key":"ca0c9f1baad4f60ddeaafe287d43b4ef8ec4b96c4ef12da194074325ca6cc4ef","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","private_key":"b6c09a581c2a6d85a63c11e586391346fe9d9d24292de15333ae230a33c52c1e","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","private_key":"378e3e11e738557d2eea27e070d52c8355f8abe0c5f8607ac0792455a1d50bae","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","private_key":"e6710b29bb9b7f00ee1e921bd548fc7622d73a0aae3f25de7a3f3650191147a8","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","private_key":"2bed1cf9737dbf8239f560ab8b4e57dc47cf57a28ebd203e6fb159093fbe52c0","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","private_key":"3f63c3dd3bf2b5be6e9af3ce596eb65cb58a36749d0baff1759d8dc6f4da8993","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","private_key":"38ffbfff1b5ab2f905daabcbbc12a5e28aad826a80d0a40988a04d6653942a50","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","private_key":"aa2cc30f2f6e589ca122890fc95845f4a81ad7e57f2661343ff6af3d401c46f3","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","private_key":"5b4a4da121c72f3d0d453394e6f09fc9ddaa5a13e44acb1ef6684867b4cac14c","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","private_key":"98f5b9f4be5d997b66834ae619c58f54d941623dfcb9a6783bfce77fdb3f3d4b","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","private_key":"cbbe3c5ab5aafd2dae03deda6db9a3e7e58ffaad5c1edd37d7a13951aa733590","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","private_key":"62a83d45655860933bf8a2348695dd695176f3225f4ba72e70284b648130d330","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","private_key":"8c72a0c564073065c5300e822a476fe3dd8b373cfd0dabaf0cdb056ca0ece2f9","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","private_key":"b6eb72555f9952a32406b7576ac85ead5cbe9004f37b6ebe8f7c3b6e17973104","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","private_key":"e9bdb2a275f0f2fd6ef4266bca55fad475c5d9e4ee0db2951ae91fd629cb2029","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","private_key":"d9a2bcdb02288fd5844d0be689ea4286f27991bfc82c76f6050a3e3d2f0858a1","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","private_key":"8ee0c4634570903c3d7383adb12cd35a82bb1c9be593755bd77c90a1bd6bbdfe","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","private_key":"16df12116ebc93bdc671ba1351bf03b763d3e67b2c9c468e56177c80b0dcbf84","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","private_key":"1a78b7fedaab9310b17675717481b1331eed3fa3c77cd96addf6bf9abd778aae","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","private_key":"3d37e996f181b4f57d5c5a61a07f86f1869c760604dfe9166d5b3552acf1a43b","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","private_key":"5895ce723440eaa77daf0a8779cc52992427524e420e3ce71ce1b24f3bd4658c","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","private_key":"cf20ef905d7d3d1141c472afefd12332bff10edecc695e409af38086c7a1a5d1","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","private_key":"1a7c744024c7baee8c43425861a5a4ff2ea80533fe6549a58e61b50c93059fed","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","private_key":"7399aa5562abb3ca2add08c810d607ad6fed7a036622eaea561da8a5aa51c0af","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","private_key":"ded7b34b0c8218bfba59e8d061b50cea365a9f137b9a66064e2287ef660dc789","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","private_key":"39ac5498c92329fc18c4eb0ec36cca3c5270f322084a1fc42fad1be0b5f32081","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","private_key":"add3ad2926ebf0b30f111796475cf160bcd1f1756866dfaa19e048c6954975c9","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","private_key":"d5290ae40b68ae7b51fe7ce7d83ab96841aa97a3457fc1bcf70065a2d2b60c20","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","private_key":"ba7abd532b10496c6363f35e231ff80aef25246315302fd138dd977d5ece20e5","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","private_key":"e58bb287592c2b89814ed3475004f5c9b2eb226483fcb8235619b6b42747d10c","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","private_key":"53e9afc6c039fee226bd9a0b537355f23e93457dc0eabbdce75e4d1ad7a473e6","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","private_key":"079cf6730627562bbbff031d22ab1ae9e65b7747497adc327830e5d6768d6b04","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","private_key":"c3157fe034d3a477f697b756cd9ae1de532b0ae42bb5039f6d2bf399bb2ddbbd","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","private_key":"d4472d7bc821536231d70dbdb3f0a5e3fdd104dcbf5a97c9521b0778d9491680","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","private_key":"23c79a6a5af06f9e9cdb6f4b4e40e25eca8793ac91db22cde17e0a3851c1f48e","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","private_key":"0295fa1706ccdcbdc8d7943b8d2011c6f46225d85b574d2d02b4a8dec66f9a29","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","private_key":"34d1685a48b56e62b30247fffb44ba2b41f2d806344fe52f7dc9049a778c667f","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","private_key":"b6273af6a94c07db54566d0d2f93121d0ddf239921e8e46af19babd2fa9930a7","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","private_key":"362244251a7f1bf4bc855ff3b272b1c7c7fe5d8338af0c581fee2f49e2939ed8","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","private_key":"bf6cd10025d018c0abfae2c88aa7c46c3d12d612580e6b4aacdc51fd52476270","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","private_key":"0659e3a41adc716b493c6ad765c5b26d35c95a1edb254efc8ab967e71e3e0a16","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","private_key":"f6d48b4c10f3257bba2f626d48192d94a1b1de3ab1480b618a0bff07eb20396e","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","private_key":"4a487eb7a3b924414d988104fce6f87a70502db2d5d71dcbc1a115b37212cb06","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","private_key":"9e2309fa485ace73ce907035f5113e7b13e5719c819479b10fd9386a3ad5236f","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","private_key":"e511c730e803371042c631512a12d74b1c31a53caab237719b8fa007e4cef9ea","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","private_key":"bb4c6b3c0931311ef5e31087f74a1a95aa39da470737c4c1a2a730ea2cac1c76","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","private_key":"88c0abdb64c6dee8117b7b720d5782321ce583fcc76e6eed2ee1f6279a82ea39","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","private_key":"e6eef1e846329e10e247843f7cee455af8ad3579e5a1e6360aea0ecc51982759","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","private_key":"ffd961376b67cbfafd47d89610291ec8fc2af2c16bc31e6851f804e15b2e9cd7","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","private_key":"db9ca337fd3ecf30fa6c217606072c214028b8d723ce82de57cfb4f0266a653d","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","private_key":"40e9de0543bd2c35509ebfcf51aa5a543d9616831505b5644e982144f4971f3a","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","private_key":"f2806927e5ba924b002b05116a66bdd62d4eed7900e91f3e31892288bd06ebd1","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","private_key":"f38a84e8d30f9c12d52071b696ff7fbd355dc875cbf937d2f491f4f3e193fc8e","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","private_key":"a3895eb5276ca39ba15c02895c3537a6c3a7be75de7b2ee2bee1fc5b9a313240","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","private_key":"8135cdd3f1b3d517b1f4a11407dfcdf6a31b3dc087ddfe2224999f16ee7ca9de","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","private_key":"29e270aecc8603f2224bee7f11039231b7a28efc5b29deeb9d98d0af388a87d0","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","private_key":"04d1ab0b03908f14773c60464c51526f925e192645efc3781a7117f22bdc4835","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","private_key":"f7320ebd494ac4fd8d6871123b7531dee97fba428ff30994f4d3ecc3f9312001","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","private_key":"b71a899f42faf2bdf9824d145f6f5959178f61f05e460e888c862ba8b03b5448","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","private_key":"43ea846524b82ef37cdaa1546b555e1a8d7510fc0cc7f11a6e040b79a5fcf054","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","private_key":"0f863dee7eca46274fc2ec03645bf96424ffebbe6f5c26631051127cf730e223","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","private_key":"a70d3a2696371a3cdee8702bbc4b008a564f36a8570b3bef778d00e5c4bc7da6","name":"node65","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","private_key":"24cc61b4c4e59317c2927bd635bd3ad2863c0598321f0e5d60c3b534ed151558","name":"node66","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","private_key":"36459a9e26fc4c00dd4c89bdf4c86c717b9701169ad7154228b8fbfff55661d9","name":"node67","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","private_key":"b947082437b645032dfff6e9d20e2eed52aace2d5e29cc268b06898cededdabd","name":"node68","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","private_key":"5ac248334fa8c619d900ac284274784dc99fe0ae517e749c989a15bad1652ccf","name":"node69","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","private_key":"7c46fa70253c48efad70d0b3da97e5c5680b1fb430147ac6f821729a836c667d","name":"node70","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","private_key":"2d39f1bc0c0b3b7bdd1b9ef4fdfd54dd5b7db9743a16baa7c5f8b50948062e8d","name":"node71","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","private_key":"d4e45cb0946161c0f4333c4db19bdeabceb81b4db44982a776556e8da0bf3928","name":"node72","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","private_key":"df8fd4bcf5cb62281500f76bc0b09d7ac1576ffd0edadbb8d39301406ac8e0fd","name":"node73","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","private_key":"5ec7e6e237997309e30846fed2a2074e5a150ae82804f581cb4a69ea69fe0118","name":"node74","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","private_key":"06d5dc287feafe3797b6302002258d7ea058679dc501e7a05f64fabd41b1b701","name":"node75","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","private_key":"a06a77e7469d86991954524d4a1495b5aeb80bb413c0b1293479dcc8ce511108","name":"node76","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","private_key":"9e6c3d21c05d371fd69225b2eef1d1eabedad577ae026b6d8ad8f728a53d657b","name":"node77","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","private_key":"cd8b5f4a6c0d361bc118318b1f1c5e69ef7b546e5ded44742e97124cfb80c52e","name":"node78","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","private_key":"04ed808eb12d991a68104f16e8965f3e6d60ba0b0dabff4fe33b3878c63d25f7","name":"node79","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","private_key":"175d97bb42b8f0effb21274a929a499f0e49e8e6ecad97b853a164464ad20bde","name":"node80","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","private_key":"34dbf4adc051f2ab18ea18c1faaec6726857cc5e0fcb3181fb296a723d2971c7","name":"node81","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","private_key":"21c776bf36961c727b36ff521a7527764077944b7932dfb901ca6489b2e123e7","name":"node82","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","private_key":"db4ace065dad27967a83ad918dedd4b4d7b1aaa331057ca1a2033fcba3e16df6","name":"node83","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","private_key":"2642ed9d36375a48a74d6aee878a935a15e7bd219d39bbdf455b0a168c98a8b5","name":"node84","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","private_key":"c1c1f7cd104f6f7163fe144041570269558b335ae6ddbdb80c79687faf55f5bb","name":"node85","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","private_key":"89501ac0b58fa2ee82ba6ef2b45a3c0ab6d8f54f4b92da1111d97ecfedbf5fc3","name":"node86","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","private_key":"cf649d632a25375b28cc6f7821de3e0df16b52ad9e0ff8978b231e20d6ed37ee","name":"node87","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","private_key":"bceddc4ac81042ad71089e4c861518f8d018601263d1faa17238f1c326e4b317","name":"node88","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","private_key":"a870aecb16e345ef241f69348d08489eb250b113f2072ab6371dda815d799f3f","name":"node89","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","private_key":"07af0af8e7e43f2822c2c0c3d34a1742faf6e11328b6194a760e9acefb5dedc8","name":"node90","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","private_key":"683b9cd98aab26ece4c2e53dd44a1fde3ae2303f80f99dc7e7e5d4b80e5a40e2","name":"node91","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","private_key":"31b3da34d338fb902b718378f7b5ebbdcdff30e4e3d3deff8b021e3979a7c6de","name":"node92","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","private_key":"997bcdc19c47350a268aa991a33d767bb6fc29de16593e0b099e793aa1db638d","name":"node93","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","private_key":"393e54787cdfec2d8d987f785700170fbcb31fd541c9c05199cd77d3a16a6dc4","name":"node94","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","private_key":"0cd4a911f2b1193b22efc0823fc2ed9beddafb7705f5597ce6d7335aadae0e1a","name":"node95","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","private_key":"fb0590eb4eb2624363f0740cbc794f9adb8356ccbaf6650c8baca183edfde3b8","name":"node96","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","private_key":"40d4caee240073f0bfc9307eed26d4286f944f467837b7250ee206f40d2880d4","name":"node97","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","private_key":"207c5a4e99506c7afdfff66611cf0baefe929f7c8a1a7a802cb44df3fa650618","name":"node98","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","private_key":"fa964e311f099e564ffa3ff9820a9ad3a8723f738fce6da11be604636f275831","name":"node99","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","private_key":"23f2913103e5295ddfdc6485c2ea3c33bfda3e0ceea62cac5401ceabdda0668a","name":"node100","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","private_key":"f3c37d7a8e80e1e71fba834055bf934536fd9e117f496b156d46bca96632ba5c","name":"node101","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","private_key":"f4151729479b0ae76a7b853aa9d3460ee67adcedc364ac97248fb383478ba113","name":"node102","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","private_key":"482aa546e8e665988c7329424342961c10084e439d562aed129d21a8c212d007","name":"node103","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","private_key":"2641708c3c6101db41db1a7eba5ed6b54e7ebc3014cb575ed71d291a6aacfc28","name":"node104","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","private_key":"9b9c1c2253292c4de58f82fd6bba15922acfa246fa0717a869c0d651ce19e826","name":"node105","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","private_key":"7cc79c34ac4847aaba7f1e2de8d23910301dbfe606d052cce33ad0340a1f82fb","name":"node106","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","private_key":"4047502d07951bf2380ef595036f9e99db3b0f7e1229040e21da5fbc49e7d820","name":"node107","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","private_key":"02a6713184cf6e413a6ed6a6839150cad9c72d40951b265a754e56b5bdb74cbf","name":"node108","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","private_key":"12d74d71de5166524deeed2ba475f9ad46c296668af272f0ade12162bed0f50f","name":"node109","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","private_key":"4fff513c0f905a42d6d18a90ae6a78c60757490480579162c9e0760361baf184","name":"node110","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","private_key":"5db638bd9bfaf4c2e1af1f3f1dc1e89382a6a2982f303fc80504b44aac1a6264","name":"node111","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","private_key":"6caa9dcb10b84a658d4ef791909b6532395f0793f9f8bce99a3a1b985ce619b9","name":"node112","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","private_key":"63375740be7dc5d3a76a7b3249786a4c7382eaf8b648e5a39a7a850722bad29a","name":"node113","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","private_key":"110a610c6c2f1720584929baf4ab9c8490923fc7b421bd251e444b752f8f8957","name":"node114","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","private_key":"7a8380aa7312fe4859408a51876e9f44b56151086e4bc36569a8f55bfb3a007b","name":"node115","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","private_key":"1e498dce32dcdfdf4b6c691fa203e3809fddf1b19b1b1da0b1162b9037ecc303","name":"node116","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","private_key":"03de0803048f078de61e3eef039a9ecb0e761216573392a6692630f3f291cc25","name":"node117","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","private_key":"934aa39349989614a1b0a71785880e61c60bb2579a9d52b832887849de94ec24","name":"node118","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","private_key":"011d6fce7eed10fc8c5a7a9ca21769efc6581023c2c857c28d97a6ebb1c43a53","name":"node119","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","private_key":"76d98f9c684d01fe8121cf715f01457e9fc38146a717958c8bb325a3b4ea44ce","name":"node120","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","private_key":"7aa614585809bea3b748e6df2e1a8da2b201a9ae84f11c819b5669234a10f76d","name":"node121","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","private_key":"71857ed16ee507ae0dd576370348a196d43274a3895f26fb8659ec79c1ecb79c","name":"node122","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","private_key":"3e5c543d406054ba1338ea28c37198eb8153a157eb5a0aecc186dceb04e10632","name":"node123","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","private_key":"3771d716bd74a4be3b8e154d3aa3b2302700b5ca1607923f7414c147a7cf67b7","name":"node124","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","private_key":"25dc939bff90ac541a61b59e0d2b4d3b9891379de3893645f06891c5be0d5695","name":"node125","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","private_key":"e6ad803abcef9554bdff08a4f4b6a7a65dc574bf92d32ee882413c9269fd31f3","name":"node126","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","private_key":"a482a87960aae2e446cd2aeb304e7baeff9a24d2bace4d5f919b5bda00a5f0eb","name":"node127","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","private_key":"214126811a121d6fc0443ce66e59372bc72dea9e220ab6e7d6da961741590d47","name":"node128","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","up":true},{"one":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":true},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":true},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"45cdaac4c087e6b737507fa29936d09f2fbea14f49ef0ce91c18080456a7459b","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","up":true},{"one":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","other":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"88a9b808cabfadb31c1a01b5a09eb4dc6cb7e011348f095920dd12e330ba9c0a","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","up":true},{"one":"aff775d47ebe35fbaaad26c627470abb8481558cb5a08c42a44597a98408a919","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","up":true},{"one":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"247dcb2c787abfa845b39cb9d7f9a6d59ea915006f250a4d760cdd8e16b3a5a6","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","up":true},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","up":true},{"one":"d6e3d3ffd3858b8284bc9495b2d90b4b1124009a4a7d7394182977a8ae39df55","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"20c4c3a3523960ad74538e726e1caaeda987cbc16dcd3beeb63fca6eebd31405","up":false},{"one":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"07c79aaa7fa759f797b88d8c495c5bfaa12f15289c6a567bbc363fd070227830","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"0066352177d6c225842362ab424a632f569980b02ac55a13a71593af94cb8c2d","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":true},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":true},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","other":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":true},{"one":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":false},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":true},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"0104c3fa3f6b9237565759debed3f1fcebfa75efba7f01e81f06a53274cdf619","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":true},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":true},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","up":true},{"one":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"6c29a1bc0f1025207b4524fadd7c8cd3dd956816fdfc57bb525c4ad3bcca9169","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":true},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":true},{"one":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":true},{"one":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":true},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","up":true},{"one":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":true},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":false},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":true},{"one":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":true},{"one":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","other":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","up":true},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","other":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","up":false},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":true},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"adfde69b7633188d7c5a44e51e856d023c946d4cd8fd16bf539e6d1764dd7e04","up":false},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"051c8d430b54d843feb325c2b56e36524566d64f48f6c770739748409af44364","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","other":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","up":true},{"one":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","other":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"22b84df73059c92bf59fdad51fe574e027c7cc555dddbf363d745c1c422a89fd","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","up":true},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","up":true},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"ac3887308a4c3591293c43f5d5f312874b30e0dc19faa57626fdc6b830d3e433","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":true},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"776fdbabbca42ecb49cc5451b860305ec3020889b47adaa2add6ea359afe379f","up":false},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":true},{"one":"78db863d7f60eda6a275cc9f4d1696cb32f5d46de747d278aa17ecd06c791135","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","other":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","up":true},{"one":"1d531b5c8dd7bbbbf8c2db8f6984d2c9b23d5fee33876379e9d3e62a920e04b9","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":true},{"one":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"e884bd666b0215cfe88ee19457c67c747fb1c6815855160f1c243c149b24e923","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":true},{"one":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"6b7da636e8eccac658c0abf6aa8ddd74be6d4cf9c5e0333bd28d9a6d1fe43ab3","up":false},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":true},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":true},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","other":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","up":false},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":true},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":true},{"one":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":true},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"a93b2360b87425860185535aca8fbf3225e0c141d27690d60144689ae0f28534","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":false},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"960eb6f745966f47aadb13d488aee1187486c99e6bc78c679a6d9b3d421d8eb0","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":false},{"one":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","other":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","up":false},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"6b1f3a9b65ce3a168fc98dee2b14b1de6912fd02ee2609b047b2c56f6c3b53e9","up":true},{"one":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","up":true},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"6ad608f1087b8af40359db45e7d78e43c3465fdae5cc01a9a9ab6c149cb6fdf3","other":"69baf7ee43b360a3238ad3b175e0ad9c24967dae60c7e91d1ca7ee55167b2bdb","up":true},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":true},{"one":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","other":"e8d0bd04fa5b56fcd50cb4b1d550855c21192f1294f2954401348c8a28b455ab","up":true},{"one":"60cbf513366da3f6ee288d3572dc3971ae256b02e5492595e63c31a7b1b0d5a8","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"c42f36bf6728b24721ce5ac1272a1058e202a236d276af1265a1eaa675f8fd85","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"a20d591ea15722712e83fcc6c17732f2370034ef870234a0fa0b2f4aea572fd5","other":"a6cad8da6a7949d7624b7ea636fd2d72de6a9b14f899df6263ccb4b3e5351c6a","up":false},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":true},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":true},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":true},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"351d1ed5c4012f8870ef2acadc7c0fea2cb697f5688b92e0150c5f670661c617","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":true},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":false},{"one":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":false},{"one":"58207fc8d92e44a8274398d6105b90d763981afba7021b57be98591e7b739272","other":"6c2fd129c8493cea7634a91aae559ceb64f01cebc45ec59aebd7e709b65941be","up":true},{"one":"1030a5d27a502aeb868e7158373c48af6a85e829ee3a84f4a0b78f9a30bd5a6a","other":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","up":false},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":true},{"one":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","up":true},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"1a696462de3d83ff271f30f6d66de968325e37a36877dd67b45d9cdd7e644b5b","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":true},{"one":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","up":true},{"one":"f9e4dbb28099af8ca5f28c641a51672f4c6ab54b7037f765a7172a399acb8edc","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"766b61b773ad34c6cfd30b9c2e94840d151c31ab8cbcf546943eb5821d5a8f36","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"944e8231f9f661435f1f94abfaa17862a005877487df5c5d3a566c4dbe46be3f","up":true},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":true},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"c6edfd613f216f48a1ea05be84faa5b9a69dd97c6e5d72e0bd339ea62c1b19e1","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":true},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"9dc8a0545acfdd12cb985532b9625d8860b8c87aa871f07f9c91f1599860831e","up":true},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":false},{"one":"d6a203c341b618c47ae53b339563b22c31dfc12d89dea7ba0c33e1812829684c","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","up":false},{"one":"7d14fd0b6c554f218249fed7709df51946baf91a3045ed99fb662c32cc97541b","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"5f8eb6ff0f6ed720eaae86390757833f4b9cdfa52564457ed90c3de260ab6c30","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","other":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","up":true},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"62d5162001253b3964e6772d35bc31aa372a42e87ce450d48dbb84f5d3c9e8f2","up":false},{"one":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"212479d1ab813951780af2bc09a8119dbf62e603c05c0ea26329625036f6708a","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","up":true},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"39b5d09d1227a776f8d65b7239cd03e04499e7d519e5d1ff4c4870a1a949dd91","up":false},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"ede2568d60ce7a12b4380818a31d2895fcb9b815cfb5526d28b2a82ff62e0381","other":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","up":false},{"one":"57d3361ee59d006e1dba3e1ae9ea624444ee09f70410dff492d624d7e7786d2d","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":true},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"7c992ceefe03187bce1edbf8f80ccd1cab80b3908e625a61fef21ec6d35d04a3","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4e6eab6eb3d49b20e2f3dee169d4647ebf26d07044698ff93d51c5fc30fb4ae0","up":false},{"one":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","other":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","up":false},{"one":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"8357eeaa65808f09b9a83362cb07508878becee9f843a5e1e70d025167b198ea","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"f7cd1cc174a21f190a715dad84857f563908db960f2a5943ef015caf6220a8d3","up":false},{"one":"0561b40886edc84497731c7b64acdabb63a22abe573847b78f74887afd86d71e","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":false},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"1b6168d6a369029690e836d26ffe017e26769ce504c142abf2a4a65774ecb66d","up":false},{"one":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","other":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","up":false},{"one":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","other":"0ef0bf53ddadd2c942f21e7e09d5a902d166f13920aabb2aa6652b70c423f575","up":false},{"one":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","other":"893773caa8e126430f189186956f3e80b49107ce52777972f5e8c11027c072d6","up":false},{"one":"4f7abbc51265dfe22d58f3ac5cde2c05ec56053efe79e3ebb6ece96183dcc17a","other":"5258fdc94d78bb45d6634f2672bc2eacdbc896fc5a39784ecc9d8a7dd52cb1e7","up":false},{"one":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","other":"795d813cab67300b8c59c78b6b99403c8111920ca47c1e56edfb513bc4999f3f","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":false},{"one":"2742110997dcb690946885e5a4aaa039f72c9f92025e62f1d371922acf5e27a7","other":"1a16e158f1d35f2573d20b05ba51a2c9cc196547038e3b7be97ddc7598e81257","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","up":false},{"one":"1f1580f6bf3df2ce7a50ec53be2511d22149fede99ca6194b611471adabfafaa","other":"746898d197934d17cd93b958ab20aaa85dba99057495048d2cabc8a996926e05","up":false},{"one":"ce12d7b26736d08eaa424a5f972a5a1fd50d05aab330340f3605dbab8007bf28","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"c1c13885e3f543804e62e3b34c0d9762778866e5b8fe9d9df0caa6a64ec41428","other":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","up":false},{"one":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","other":"b26eff0d882918a40b909b2fc79489a671a9f990cc0dd3d835493bcb52a468ea","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"bb9c9f07ee2f8bc2bb0f011309f8314de7c1777a6f683f90506b180ef6f5aab4","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fcf3ccf76c4699752670103e9cb98ac1294339a357876c71673f7e486d02f08b","up":false},{"one":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","other":"567206d70bc58993b08719afd9c007c562aad99437599356763b74cd4707083c","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"171f8d32719c1c3a330cdec42e47f0a5876bb2cc1cac8f13579f9cd19887c531","up":false},{"one":"816609d5b9bdb0c7bad6cbe9400fd506df8662b14ad0e0a61bc7b49482548e39","other":"a3e87b083776e34d10941832ec078fe9a7b8bae8cefe6fecdd5561549561a7f3","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"e22c1f74c4b480fdd2fbe84ad321a98230efb98fb1cdec4f79e4e50b2b0d5cc4","up":false},{"one":"66f6ff5fbc2526c1db5db491e49138362bef23032c6344ed4ead7dcb58bd1e6c","other":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","up":false},{"one":"41f407b92b1462b93400819a6af8815797b9dbc505afaf0162bbaea795205716","other":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"016e174a29dc18857107fbebc876689b401c1174964ac6cacb31a4cb847a4d30","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"869fc21fff150ce9e1bc4512b183559433767cfc1cb7b6baae6d2a1313245ae8","up":false},{"one":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","other":"88dc5f31a2b295e8b43bc6e7abaae130061c2d44c49c95bcca3d9dd0a268324c","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"85845413850f5e38cce69548e20179b477bf383dd2b22428358715d9d72421ac","up":false},{"one":"ef40fdb37f2f89ec77833e48b1bd210b2241949b9ef8f6dca6bf6189503abb2c","other":"efdee7c9bab75e85302e3cac95ca2434af63ccb731ed24e0bda419e7a471cdde","up":false},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"74a4ffb0d717a523ec72e07cc5efe3e98d55932d6e0592ef45fe54b378e4e952","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"2c3d7e056f87daf540821a31ea8fe9377d00ed3a55ffba67b8bb716cdd9b7303","up":false},{"one":"fb211f405a7dc3a07b6d4f18522c6273ffa4e18325958eea159e33f768eae846","other":"fd54f34d1deead333014c472182bf5cb2db1d1b1ab55caa70f5dc70108622f17","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"fe9d68b6f0d0add106d4a9e132308cf5caa867624784d652f071f5d1fe87ff8b","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"6421894e25e421d16eccd8858aed3354fce2d04c9d5c46d4005ee1f16944ccfd","other":"7a46bf03f327b100dc00140c97828a3b607280b6cd57220703be393ae4fdddbc","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":false},{"one":"b87c0ee719d0656cd325300b756f203310675021f3c508b30542deb1114ec7ac","other":"81748a1a38162f9e8613ffa562add1b75893b66199840e74c0774db92bfd7ca0","up":false},{"one":"6d307f348cc71e8a471ba662c1b5bd9d6e6930c22024f350465cccc7f2208a59","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"30c022df9209b4515213fe3fa67135c05d960afbd76f8455caa9c83ab5e493b6","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"12df4927ff743d4dd9dfb0a7d13d39012b172f6a35921aaef1547d5d02ad38fe","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"580a650c2c3e95d35e66264df6f48e28a091bacd20dc2c9828a5b563353d2052","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"d48642f8008e8aa791ba89c9b3a5b8d2d7aeb7e9078caee8813777679608075c","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"cd944ad4c50c4357005ff26ef26369ba3375a1205eec532b6e51b22bf25510bc","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"0d90040b9d0cd742149654262198aa8dc4fc96cfdf9b84cfe833277c3e23831f","up":false},{"one":"1263f18bf8cb4f5a3335f545cdd5d42f1b84da9edf4fa7346572c2bc38c87eb3","other":"089fe22a0bd48d3120cc8171eb9d698532c17f36768dbc25f554f2c53de11ab0","up":false},{"one":"43d797cb7fced78dd7141ef452ea367d7484d5c0fec2431caebe1317c4aa6340","other":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","up":false},{"one":"4a2d15b867a620653f099d66839b80c2dd32aec95caf906f0d5c8146192edf62","other":"4067997c26042749c16f17169caac66e647b71e3557f7581dbec739d0baa2ef0","up":false},{"one":"00b98e790fb954975837ff95abb1bdc2673dd8a0ce315986cc0dda5b0cefb05d","other":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","up":false},{"one":"165d670ad20922226e1f3275abd153b6fe8d9ffe3e45e6c1fcae3f5a3d2ec35a","other":"0f19fb4d0c6cfe36f7f59c8fe54d2e169687603e1bde0fe6b3a5e864fa51f2f0","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"160c0401bcd1b38db7b4ae82470244ac9a9923755fc475aa67eb6dedc703c223","other":"24263ec4b92f390e07193d00e5a032ea2649f560027be02878da656e37d4a1b1","up":false},{"one":"11b53fa40926ac84d75d9d698f46b9611b90194857c1397e117931a890447078","other":"13165fffc318dd5f182601384e1ac69dd591236a03e88dfd1c637ea21a01b2dd","up":false},{"one":"18b0fcbba2350241088129e8f6a07742857c3edaacd6ef1ec0861cc8e48492ce","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"f84317ef488d8c1495b429b7a1fa21ea53a73e737b3c1aa890c20e38658ab148","other":"f9265e3c23cd931ad51faec142636a6a8c8bd90a23e77f5327861c81cf4dfe17","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"3547871df541d0734c374e4c42f610f235f0c923d8b2bdc88c17fadb2c8e25ea","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9a8c60732ff0d0b7403b181cdc5bb9e6db0aa4cf5c7158c40e548fcb76726f87","up":false},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"459a945c8d6e67437bdfa0e067962b3591dfa0aa7c1177f8327ba1557bbf1569","up":false},{"one":"cb704e26ceff5b613d8211423375fe0ded4d867bc892894a70d71289f1a9c1c1","other":"d24a8781af0c8ff19eca66388e308569bcce48144e559dc4c543f5a2ab0fe7c3","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"b77832f3f26323f09b37f31d208361d77ca08cec3ff829b9451fa3f00ff61fd0","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9835fa9db1ce53ad2a526d36050eefd2c593121df4036c269cd09e1be4746a15","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"958e075a7f22c092360d325dd0c0449e9442c398b2882009c5c3720cbcd3584f","up":false},{"one":"5f1c751641e1727871c44f0d5779b278871c77f5e05324dc91a8620bed72e627","other":"5958a4ccd5333e8bfed5f18c78d365b201ffc2b9af3afd31748adb8e4f8118bc","up":false},{"one":"9d60b67d731aee2e6ac86d17c9e6a6aa5aaeec6b6803bae5c5fbc02643f7358c","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"9265383ecf776ce1da66e99e5f0a9c1af593d8e56ceef21f42aad4be7e34bc45","other":"b270e0d21a173f4717882b1c6dc942d703fe11cd6adf997b3ecd0944fcea6c7b","up":false},{"one":"8ff601de9537c9e5d79a3707a312fe893383bef000d00acee3d4552068ef6030","other":"9b240fbf12d9de7975803b09aacdbab94cd978130de62bc89497bb1056e462c0","up":false},{"one":"41cd903abdaf445bfbcc3d5f28c10aba473be8a3ddc614c7f124b0ed7f91fd1d","other":"4610c06c8f5e1e24a75d9e46a432f4c1a6b9da6c3dbd122d3d3881752d930736","up":false}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_16.json b/swarm/pss/testdata/snapshot_16.json deleted file mode 100644 index d35df9fc9b55..000000000000 --- a/swarm/pss/testdata/snapshot_16.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","private_key":"2c268d9cf0ca43f4b0ad80f8980f4fe019e0294819f881d505e02382b472b98b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","private_key":"69ac59cce230e49f10c769fc8f2b717bdadc5ffa5dcf7fae19d8cb15315fa177","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","private_key":"b793f9ace49ecce16c0c86b49495093f7f4c5fa0003675c9eb6efa802c8daafe","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","private_key":"9fecef44b474621ce2ddd57cf67df319bd0e13c27f0f6e9d060c34ef813675ea","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","private_key":"c8f4336f88c90242744e9c04fba1a55027d9ad4295b7a2b0ad99e8dae12463d3","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","private_key":"0ca52c3e4781fc413a13448abaae042dae52e2bab5772c52440bc4b2c6a5bda3","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","private_key":"447c97a6c211160f0fb7990812c637bd346003a484cf05c3d92816007ab3745a","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","private_key":"8fa6ac35409a6df21ee32da8c36f61cd007a3515d23bb350351c263c241b851a","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","private_key":"e4143bd79f4a55f463b623afc397fe0166a144f45c41fd8b58f816e208212819","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","private_key":"6a2a32adb2b5cbc66adf29d5da1123b6e345e73ed42916e9535df3058801cb92","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","private_key":"ae486490233b1b16e6a35461a3b90573f59362b9bbf0b8c46b65c715b0506bd7","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","private_key":"cbf9da4b4f44f44c0bcf69bb2134e33ddfdda7742d7f5609db74bdf4fb683cfb","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","private_key":"180ee0110d87d330dd416568e300cacfd4d52f8c08875ada1a6d5b4a11142b1d","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","private_key":"d7a364b77d55a53453e94e10d235edf4ceb248653247bded6c1df31fc88ecbca","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","private_key":"7eaec2f68f3b0e562a5438324aa30b9c22746af6e8139b05b21e89103f508c5a","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","private_key":"b130fa04ab1f60d0713b9260156457f9139e819cb2f70bd87a2ea409f135f881","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"6e8c4a5d6e54dda7c633ff469e8f935935250f4d0034c9058048dc643a4f811e","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"88621610b5fdbf3e584724e2268a24dc41562da5cdba92357b97edc42d79ec4e","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","other":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","up":true},{"one":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"6629ec867229b28221a6118eb0e097861eb784b624578f55c3811cdf5026c1c7","up":true},{"one":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","up":true},{"one":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","other":"4b6e068e84fecde2bb6a48698233f0c2ae5e66b15a8bad2e0b5d499c31d48b98","up":true},{"one":"c7a2bf651f59149716235fa7bfb4cee835aa4bdd402ccab8c52959aa74dc6af4","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"5989492b2703336b42f59b2be1653a0bce76e801ef262121f627a476581af5e1","up":true},{"one":"d9b0b57a237a8386cf6cf611779d8df3f5b0f9c01719e97230c3b23bf0ab04ae","other":"55ce5ea5772c31de27b337f1e2cf767663c03a61b2f47b71921def1cfc3270ea","up":true},{"one":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","other":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","up":true},{"one":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","other":"8c92cb1fcda5b67a4b928c200e2e5e324599c997202d9ea98f703239ee3fc3b1","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"69d329853a0624dba12949e6be7db093143976d9a5d514b80d72a9bf7fbc568c","other":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","up":true},{"one":"d33e4e6af5ba13ae448a16a4a8183ab1050fa3f983cdbf03dec5c21a5e9dd146","other":"c651a0c924fc01e9d6cd30aba6864cd93631d5d4e21ceeda7db1922f105c5ca8","up":true},{"one":"1ffdd4692bd4fd272ac6b5c2e039354869df92c0d4247abedcd8a8932b057574","other":"9cd2b6b17d2954c0a0d4a340707c71215a08c3c27b5b5b294e96ad20263ba600","up":true},{"one":"c0f23df25018045ddc4035268a9e7468f386ecad306b9ed9053cf66e2f1ab0a2","other":"c553ca20b4f7f1b1e3b71b261829c27eb1cfe6710aa0999f655a42670e6d8813","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_2.json b/swarm/pss/testdata/snapshot_2.json deleted file mode 100644 index b01ce303802a..000000000000 --- a/swarm/pss/testdata/snapshot_2.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_256.json b/swarm/pss/testdata/snapshot_256.json deleted file mode 100644 index 4397a7ea7d51..000000000000 --- a/swarm/pss/testdata/snapshot_256.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","private_key":"c4e98d074abce07e849be2810e5522bdacf2489125ed7577e02b4809f9619700","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","private_key":"d607b8638fa33ef417d88597579e00a2f93e76881193a8692b57d03b27a60ba7","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","private_key":"c4501aa97316685b3e707bd881c1d805e96430723fa88ffc60e1703485eff5b2","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","private_key":"f1fceda785676921048d116f40e4d331ab32873f4b0343fddbd372c836808f2a","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","private_key":"a5baeb4f2e35eedde63d573bbec157e61f0c0ba6ecc7b6cb6a42759bbc165e5b","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","private_key":"1b7e31744236baa89eaadd57ec870b5415111685fda883490b5a0e1dbc321210","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","private_key":"344f9ff7d68ca6a04e3141646044db06e5761248c64a01bb6cc2813fb7745ae4","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","private_key":"869c03072d8108be18544c579cca53ffe17682e3898f44baff9cc37507fc62ed","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","private_key":"1fe668699f54728124bbf993215de07682f072d145dd8acc428f04abd4a46f08","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","private_key":"a3af1294d727198fb3282659a35ae5b27f4b23b28d76e528809b68a6263fd673","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","private_key":"f7ad4635d864376fa4536bf23df764278d30805556cbf13e794e0ebacf389172","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","private_key":"237183f9e7834a03859c43be2a49bb8e4f1c9c7a5c334958f74d4ed36dfbd5a7","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","private_key":"7f7c361b6989c77419ac69848c9a4b06255aeb0f6115454566cde4ca544af085","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","private_key":"00133d03c85e03bcd54ddefc03d9060009ea78ee5ba1f6f335111f47ab8f433f","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","private_key":"ee3f0e3cca3720aa0727efa92a11ea9252c7fe72fe64c8814de2accbb91d049d","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","private_key":"470d12a7459f9fa9f1adf18e94b60340c5c442eadb1329fa871073e64d6bd7aa","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","private_key":"3450c9c68339a76f1f75fb1f770914dac1cfc5e0cb23d6fd703480beb3ddfd4a","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","private_key":"1df10df7cb050098e9713c3773a47962a6cfea944b53b12fd84563c98dc46e7a","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","private_key":"e699fe1e14d46a5a72d5696e397df71ac0d17abf136dc84d850b658e56881c75","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","private_key":"0974ab51554372614954b68ffb0fdde4a82efdc0bf4e6f802dbc3728cb4b5e47","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","private_key":"14ce7db5594270c24ed48fd5881d6f02b9cc6267731612c5117e4d273d3920ca","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","private_key":"32fa52ca7b60e6953e97635659e4a5153688636594be7f560fc5f8468fdf7022","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","private_key":"d28563bbfb6db23928a66e837cdfa794230537066eeb93063ebeff3f531b12ca","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","private_key":"137533f5c2f9257d2a60c22d205407f3cc14c52ec60fc34666b05dcb935178c7","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","private_key":"1dbab5393fba98797db2a32f7d2ee6ad019bbd9e26ee051313e566bb1e21a1b4","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","private_key":"87a7b7028ee1140af69055fb641d23473c44f238544e3cc23e2909a959d1e091","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","private_key":"102d3a405cf636abf7d0b4e4a1fc0a698dc0d4033c288762ce9cc975b91db032","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","private_key":"d8ecd7e813dbc7683f773cf38cd0e344ee9b4e308f12f557b6642eda2ef88ea1","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","private_key":"225f43e03ffb8a97b760538a5cb9cddb61e7a387a3e56e82160300ed8c53e073","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","private_key":"75acc8059053d23505c4513dbfd60777918db43c9713b3577c36836f066e31af","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","private_key":"d6bd6c72597f6ec178becb6cdf6520d7de3f1278f77aa42095d287f45513b1f2","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","private_key":"b329bd7d93dbc0fef82737292076fb91e323da4f34d22a5ee6fe311018203992","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","private_key":"f62b2e6c0ace2c204b4efdf62d3a9e4e41740aaa2a7aee72aa67272b08f65388","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","private_key":"5083c0504c95867fc5a924311192eeb35e80105fb25720516a8af8053516b87d","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","private_key":"52454a2b364cf029dbd0bd0f6880fd3c4a3eea2ef593277ca45c363888b025dc","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","private_key":"822f8bae08da0af5c00b04adc4653e9b425648c538f482224cc7406ed46694b4","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","private_key":"1e41a399b1b77f559bce8b0db22cabd26152fde5eab7c91576e4a2e00cbf3061","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","private_key":"f39163a2c0a70f6eb02436a58c6029082e040ee88271fb27deb0e9c61af2a409","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","private_key":"30358622050808cb05e6c497e4ab00bc0baa126282c0f0bd38a279f15161ebfa","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","private_key":"e96ccd329e3ce59cca1c371e0d97e891c8755d8285c414d227fe2d8dde438ada","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","private_key":"a8af10b8118821f3f7a1c456f857e4ddf50526337a38eddaffe15bbbb383ac32","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","private_key":"aea855db0ccd147bccfb6969c37e5ceb12623a95cde33c7725d51418c2a58e56","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","private_key":"14f5b342ec3c67c89537fc4dbaa64da24b8d7d02242eff9642b680d1923a000a","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","private_key":"b56fd7d35ab0d1f76d30c898f6794ff5399b2d6982c4d5afadacaf72aa535bd4","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","private_key":"59db345b1123f497ab8804ffed255e26dc028f68d9010314f9eebee243ee74cb","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","private_key":"87b0f18d2c52b3f0f6934c09421248a6d0457eab81b8dbd93840877ba7c25006","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","private_key":"86f6a5532361ee4f4511ef6ced21fe2e8d4e12b10d61b8d16f6805d5d6ff869c","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","private_key":"604cbd4183a23b452f0c9add6181effac6084e4411051850ed0bc4f1ae9a33d8","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","private_key":"ada9db22cbb971526fb9a1e050a039ae3bc1b898086642c093f9d2fd1b4a2e30","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","private_key":"c3e1cd6edffbca6121b114763c7cc8d8fce9b4444747af55b56cb111f3803b5e","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","private_key":"e74e4c545f1d04c35176065ee8e6610e9847ba30aa0b4ff9df3d574a9cd04bc5","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","private_key":"d44b65dad6f0fc7d3868207b4d13aa646925f53eef21981d7898ca8eef1f47f3","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","private_key":"5c0b688fe7738cf3e06e8f932ca1986d88f6c00a9f705d50335632433ad7d52a","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","private_key":"8d78762191955f66c6881143b2fbf367eb02b6182eb49c5f11d22381f8e34152","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","private_key":"296788d95df4ddf6af02ab317a50c417d36515453b5cebdae7c71f55a657c7f9","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","private_key":"b229e6aab9cd866a0aecbc7358eeb2986cdf2ff1bcd25ae6d3dc33ad282a03ee","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","private_key":"016f837cc16dfa3e8ed3519599b40bf8ee03872dbe01509e3928f5459be708d9","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","private_key":"fb9bd6643165414424261aa1dfdab87ad7b83e52d9bfcbaa69e1bb116f84b19a","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","private_key":"c761dd84c3923763ca0acfc07e4939b146d57bd6b42efd6c5e8e5c0b63dc1518","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","private_key":"4503d268231fe7b4f60290da3c7f7f67bc51e123b65b7fb48f8ababc2eccbf6a","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","private_key":"c643d7712e7aeffa425505349e837da25e2cae551f446e56a96e5b2df48f2bfe","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","private_key":"cc7a5a2b92089562a184b024a3782da10d925002ca1dac6c95d902ed4df95998","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","private_key":"31d2f152a7b173892132dcb790d697cb779cc886a67355b5907e803ec734a1e0","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","private_key":"f0045a14d36d5d17d8859c51edce3fd7afd083b6722cf6a3668dbd4f1db69e17","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","private_key":"f00404704ec4c556b0ee4cbbc1b8fec0b741d8a587b0baffa9a0ce79648f6560","name":"node65","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","private_key":"5998a146afa95186e2ecf2d1daa4376812bbcbbf22809ba0807dc5e34e5d1e9c","name":"node66","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","private_key":"542904a26056c4d86aafe32a8dbbb30ef4a31b36c81563f47a8ce22145e5da4d","name":"node67","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","private_key":"4feddb131b7fb4c20144641fd72951bf356b4ec190a8a8cb322f2d0819aaf317","name":"node68","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","private_key":"1fa8a1ef0703e81a32dd0faf6d25447a183ecb90d6994f45921c3db0e8dc3d06","name":"node69","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","private_key":"dffd7a3c7cb1c3a0d129522290be15481d609d4d268daa13364cb16e13213398","name":"node70","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","private_key":"c5ab7f8e52d35ba6f3aae971d7215e9dd234f82a3331ca904c2b6b526d2a59db","name":"node71","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","private_key":"07c9b7896ed7f5c9763b72ab6631797941cd615c3ecd431de30169fdbe89cc2a","name":"node72","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","private_key":"da65f19428056c9c512efa6c1e97a409861ab28956b2c9ed0b8a72bba67c010e","name":"node73","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","private_key":"3ea7d8647b5a7f04bdae56288940cc9dc8289c49fcc4a1a79e9d3fd9a6ceab2a","name":"node74","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","private_key":"86dd972691e02a4562fde8ab7cfa9ceb75201e42e506cf2d51c16d9d474bad2d","name":"node75","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","private_key":"cb578a8fabe87c91b214032286af35c973b3f27880dd80fcd1efb929d1dd4756","name":"node76","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","private_key":"d4921582200b69793cc182b16d32031dd9559865007b31b1011d35512379ae8a","name":"node77","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","private_key":"286143c4711912830a900f8a45b11baa1bef2b6b96e9a918484cb95aafd2164f","name":"node78","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","private_key":"48d763e65d8c5b6a83609844cf203d410e1afa134af6eb6ed22a42bbfd55ccb9","name":"node79","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","private_key":"98a9e2aaeb4c53a781d4150faa14cc0ff5f066e7be28098cbc25a0c379be18a4","name":"node80","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","private_key":"97df41163f6dfeb248b196fff24b95edb55e2b6c48c551480226459fde0ce62a","name":"node81","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","private_key":"887a82d3553c5107cd8d6220f2ac36ca2d6d499b8c82b765a17bd6295e9861d4","name":"node82","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","private_key":"b067efa25d200683b69e2fa485be6ac0a6bbc34a18796bc0b0e794d4dadf83b1","name":"node83","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","private_key":"f2b10950651367c628d1675c7a07962c0af4062b2c3c8154075cf61f9635cd67","name":"node84","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","private_key":"55f59b8404f62f76682812c128cde0b37da46140d69661f3de90af132daa04c8","name":"node85","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","private_key":"bc5bbbdd85ae3b09a493f0b43542448acf2976654a249f32bf92eff0d414866c","name":"node86","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","private_key":"f342c7683da21156a1f53ce673f78414f580cdd86eda879596d087439e4475f9","name":"node87","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","private_key":"f9550b9a11e9aece642e0e863b82852f4c5c8cb6044144627d678ce3988cda39","name":"node88","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","private_key":"111dc027f4345175a5a141eff93a8d04d82ec6d67a15d0ed0c53ae7fe954868c","name":"node89","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","private_key":"30caccc4af13ac896656ca1add341299bb51773c44f91f3105a1564abbe84f5b","name":"node90","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","private_key":"ca298279e19e3d8437a361debb136898e8bf05c7946dd3ffdef8d267f1c79049","name":"node91","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","private_key":"d513af6f8087302defbc40f0f03c63b144c07a636b7c5c970e962d445232a6f9","name":"node92","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","private_key":"e5808b0004f64868225ce7362aa1b0d787d6c8bafbf5d08aadf4a804bfa4519a","name":"node93","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","private_key":"68c381bcacc6c4396824a929cd7124a13b8032185de88ce2cc3cb75badc6a5d5","name":"node94","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","private_key":"0d0d4c6da032e6ceb496ec71883cff52efa41a9383d2b83b747d1bc6f8269a17","name":"node95","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","private_key":"53c79eca1a5cc6b186db543273722c0168564d7cecceb76d1433330101f8e62a","name":"node96","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","private_key":"cd3e3585e9c28d16a0a5c11e8efd66671e8cac68915eb6b7bae228e10e867fd8","name":"node97","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","private_key":"60f513f00eb15da948e892d69bec82991bfb0747c9d5879c6c26c2a5a6095365","name":"node98","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","private_key":"94b0c348b1ec7288d57eb195f114f38da5a6fc3f604e8f1ed76135ef26f50c6d","name":"node99","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","private_key":"a6e6ca4e3f494adc69bb1aaa01dfc3dd625d9923fa4c979ec80ee221b83a589b","name":"node100","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","private_key":"2c11691d22adc7bee004f61ad67b543d9ca22c7c65125427e310fc5c8784091f","name":"node101","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","private_key":"1ebabfc78e1b9d17e6fe38508bc354ab54be2a8bf57483b0afe7dc3530533e0f","name":"node102","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","private_key":"9b22a93b1dd1ac5ad34771c2cf183292f9ca7133b4ed8a1d0fceb889d6017170","name":"node103","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","private_key":"b4d7978eed053b73224b969ad03abd7503081764e86f7815f8b650b7ba9a34b0","name":"node104","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","private_key":"18bbd14788534b3f7490b55c2243e84c1ed1d158bd769a47fdc2d8550098ba97","name":"node105","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","private_key":"ff55b25abe67052213c916a734949cb6a98d1ad2f240183bfa1fe694cfa0937a","name":"node106","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","private_key":"406c029264f74f39f2ad851342bc311d4800fe07db744f69557ad9e3e5899aeb","name":"node107","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","private_key":"9f9be5e82bec360e52170374b35e26ab30480bf5effa10bc43527c191d1efc84","name":"node108","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","private_key":"01c46dd80b68bfbc5916277ab36142ff3033b126df71354bc7b21993be4f27b4","name":"node109","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","private_key":"d4ea8e3d466c3fadc709252e0b35240e831250311a3023363aaa2de0d4068efe","name":"node110","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","private_key":"ff786dd6bdf5a54dfd71c73ab93427d94008f2854eec2a87c96223aeaf5a2357","name":"node111","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","private_key":"81d2fd2b16f53fcb3749b3c8575a00ddf39ee32f760cc7e8365c046e364ec849","name":"node112","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","private_key":"5017533627afd71f2684b9ef264ac79ff826f1cbbfedd788d969d9ae1bb87b20","name":"node113","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","private_key":"92a91e558f70fffacaea7b5c86540ae940da57dcb660d8c3e6eb5c7b38f015f0","name":"node114","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","private_key":"91f18de340c4916711d69fea368a4248eca8a13910d576e24ff9125fbccae3a3","name":"node115","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","private_key":"f1e5638e4912ca0ccd446a27531942b75039807eea70118fad6880f5b1ad5ee7","name":"node116","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","private_key":"83bcea8f8c409f9470bca240d19fb29d9fea6cf94435ebbdf0a8faf5f1cb5ca0","name":"node117","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","private_key":"33c3e295cfb9706d4d5e081ec3c220d8c35415d7c256de99511e76474e8c906b","name":"node118","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","private_key":"af0dcfc78e50f0893cd504a3567a8515538bd85a1d3eb72809dd503690d0d274","name":"node119","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","private_key":"8c806f6fed9bc74fb07341b080bc3067c953b5d6093ef5779221924d4ead4bb8","name":"node120","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","private_key":"a1a11eedc4fe78f42dd23b093d9fbcbf1643899eca875296b0374ec0e8ab619c","name":"node121","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","private_key":"15d8362248798e68c5eda882717ee691573e5477b7f0444222fabaaf1a025a8a","name":"node122","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","private_key":"c1d6cf53ce48953f5b6bb0e0b644aaebd16b84a3910894f93c157140c88988a5","name":"node123","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","private_key":"a67b1d8e2abb33c866d215b81af3a23fe0657a9155a8e17754bc0028dcf87852","name":"node124","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","private_key":"b9da682c3a119f650ebbaccf2974166f3162ce600afd50152f95e9be3f688bd4","name":"node125","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","private_key":"a6ca067c4be7a67d6c5b14fe7e0b62a964d844462a6b26a981cb73ffcbb48e46","name":"node126","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","private_key":"08926af18a3a13a1bf786aa6946ab5bde52c531026a8561524925f1d9f0d665c","name":"node127","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","private_key":"793a4b0ec03ee3d4c1cc8fc8084366fc20e5852ecc3aa96ba2882babd7b8ff37","name":"node128","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","private_key":"9d2fd418a2966f748dd746ca5b5f0c3a82496a0a6274355c059d5f48be6870b8","name":"node129","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","private_key":"7c7cfd0cdb3cede7dc5d152c6f5a8d89941656a3e9e560cf993a319c9012f074","name":"node130","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","private_key":"457954e43019a3f3e510a0f818996c28e372410ba50490b5042068ff63f3e17d","name":"node131","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","private_key":"d45a6d15ff3a2073f6d31d9df7fe6778cac0ca1d62aeacec44341aef19924624","name":"node132","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","private_key":"c1e5c2bc35a1030f8bd3ffd9099376d32ca3029eff92b5c79055ae2454a6fd6a","name":"node133","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","private_key":"89da1a80c7122d19de9b63637b1f1675ee7e009a5ecf1f6c51cb29b2a09cc908","name":"node134","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","private_key":"e5596012d345aff602e83361bc5fb1f7e3feee7b23782a8c7f0a1c7933ab928c","name":"node135","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","private_key":"91af9b7387bad90d696b549270c0302fbe3805efb01f311e801b317217b92cca","name":"node136","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","private_key":"af83c717380c5132acd3357ec3e29daaacfc4e4a65fd1f5b14479b78e5fb01f6","name":"node137","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","private_key":"2645348387e283c7f69d634a71ee38a65d4fc6928ecc383fb25cea4525fcdad9","name":"node138","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","private_key":"bc25724231b7bb54d17219feff13e1fe8e0486cace91c0cc6f3731a986f4a8ae","name":"node139","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","private_key":"1b90feec9d475fc13f1394c4b39d837fbd09f4c329ef5747d988b17b84967ccc","name":"node140","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","private_key":"392b881dddc671e72fc89ef71b340f19840650943cae22682d6cb6f97570c1ac","name":"node141","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","private_key":"f6541fa1eb8508dbcfde0259a988d0564c192cd25b2051e1299c32cad9ceb149","name":"node142","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","private_key":"59014852ab4f95ef336b10bb7c05d22e54eb0ea453d0f1c56638852ffac3aab0","name":"node143","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","private_key":"45d467a8320183e6e9f9fb0219c71ee08f43352c83c0b2d84da4ae4241b0173c","name":"node144","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","private_key":"3c564ae34741afc14a8ea217a734d5a8bc6d8dfcce3f4943acff14036edbf1c0","name":"node145","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","private_key":"43f552096880ddd297dd590b83f738fa13826e6120ec3d6311ac565b78a252c7","name":"node146","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","private_key":"177c7e7e8e870ff8b4b606ee3bc6f94d6fa57fd6deabefdabb250776939ef9f9","name":"node147","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","private_key":"26c019de3883a787fafed3839e768c71553ec8fe6cf607725f0e2acc80711cee","name":"node148","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","private_key":"943fd9910b9fa6cdb47ec68ec64b2faecd9a56de487fba1b7773a6dd54f94664","name":"node149","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","private_key":"f75e19af5d5e340e6a07d85042608f0500511042eb2e1ccbae8fe8569b9cbc8c","name":"node150","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","private_key":"e400c8293b9474c5aa84b48e37e1f435a53c910af98fd4e1b23ff9bd670bb51f","name":"node151","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","private_key":"f5a6a565c7c14cba96a75712373743d09ba804a9b8332a667492617dd5211abb","name":"node152","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","private_key":"4f592401cb57bcdc263bb96492ca66258130460b5fcb1a1cfafdedef3cee99f7","name":"node153","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","private_key":"97486d2d37010143a830ed6a0be6528a5611fc42962ae80e44a12c9b3399502c","name":"node154","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","private_key":"d93efde40fe67c2f412577aefbc6af1e876bde81b53c22ef6da4a5a23c8c13ad","name":"node155","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","private_key":"eaab112f5381b5b84ac9920fede88f2e04b725398e37a0b1b003442c281e32a1","name":"node156","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","private_key":"f79356978056456eb8f10bcf3c06b107a4afb4d5a8c2fc9380011a7420d59c81","name":"node157","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","private_key":"f0c66841f0adf1a9af04982fcce0c38c5012595de449dd0a8ea97ba06d5e43e9","name":"node158","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","private_key":"cc124633e255f1c6ba0beb16fb978958ed79be0e0f6ebd7968ef82b6d439fcda","name":"node159","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","private_key":"223b2c119cccb5059319a4a0305aec9c1bace6e731215f699cbd4d9a056ec777","name":"node160","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","private_key":"158d4468a6b4e7413f8b1d4112ef2b2c562e6dd26101b022ece2fa57801e6b03","name":"node161","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","private_key":"9b9249eb2418f61bc1e6a582b28e46c0d25eecf549e98414e2ca5ab1d3f5b1f7","name":"node162","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","private_key":"92f63cfcb2341c43aee585f9b965979e49d307de204dcc09b8e869f4e67640b4","name":"node163","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","private_key":"81e7d25a3c5700b592d3ea4cd85440f914f919e65f0a6e55c99ba619a519c70a","name":"node164","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","private_key":"09ab58931e7729bf23cdcb2772b3869d1aacece96070df5790f8343b70ef5e3b","name":"node165","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","private_key":"c330a5f7858f47d6653c52c88207fd10c6c87d8e77c87b9be95165f094918210","name":"node166","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","private_key":"7bbb910a655225eccc1fa6ab5abd3696725591448d5b628656692c1170f1f095","name":"node167","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","private_key":"9a0adb03a36d31dc716a280bc0b0ccdb5a891c5242f507aed5f6c370ea6bca05","name":"node168","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","private_key":"c9271845738bb80612a262956270b72e5152311e2e80fe21b3c7238f394911a7","name":"node169","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","private_key":"1710672c4d27d5363877ec9be4202445a3404d3e16ff221611f0c2d82c34af1c","name":"node170","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","private_key":"fe3ddcd5732357d3e602b35b79a21afd716fadbe7b569e44eb014dd4b944ad49","name":"node171","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","private_key":"85d961e31726c6d75913c901b5db7e115dd67338d9d89584e0c73df8f673a01c","name":"node172","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","private_key":"ded7d4f338d0e906b79482b6a79c0a2224820bac1893e3ee083a66eaaebea363","name":"node173","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","private_key":"f2b75f511327f380d86989fed2d67129f32bb0aeafb3aba0250c8e9e5b581d16","name":"node174","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","private_key":"a9bc40abaa967e683f994c9d053b90fa4daa9602fc810cd974a8f6a3629dbd28","name":"node175","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","private_key":"fa312311679e17f36872e8c75b78bd3b730d7423c613f5d7cbcaf653d847419e","name":"node176","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","private_key":"3532d20f2d6b03b910ef2d4dc968b71d89bd0fa3c9a758fd355ec3f8c9b6b62b","name":"node177","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","private_key":"d491504fcc40f961febbbf2089616ac2a2b7cc79e5dc9c01b632ab9d226bca86","name":"node178","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","private_key":"9653af0c5c528f1079ce38ba8e44273a7eed8efe91036d0219e08121fc62ca06","name":"node179","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","private_key":"09d927a912f0daefdca0fdb594feea4e25c384ac07efb663ea46ba893d0f32f9","name":"node180","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","private_key":"b5c4da646e3485b765e530ff19f36c4753764dda9d4aa308fb8d5c3d52d9b04f","name":"node181","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","private_key":"cf80dfc2e5888e69aa7c570430d76fb7a11991c8f8bd4c8dec3e2303085624ad","name":"node182","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","private_key":"33a68fc227f5f745114937915a4678fbcd985ff8c589698f241091a32fd901b2","name":"node183","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","private_key":"ff80b3d224dd48711a8b71840a9762289dbcac4d27cb6c24878fb4dd01b7c55f","name":"node184","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","private_key":"9b8f03ec5acc438bfb8ef1d604066899d9108b46efa0136298d820aad5752cf6","name":"node185","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","private_key":"b3496c97ca4de82c4133936c457c24ece46c36d35193ff6a5cd269701841cfd4","name":"node186","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","private_key":"65f6b15bed8bfb72144314f9aa2a7364bcb356e60cdb0212a7d04a3eb9e2d3af","name":"node187","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","private_key":"fe832e4f1c7485f3906f1807544431a825ca6ff8ea89d3d87a14aba92ba4d995","name":"node188","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","private_key":"50f4adfdd5287853b06a93a0214c09ee109edc00698de65c0c0523e10e7d828b","name":"node189","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","private_key":"e40b799e72dc611e2a8f64d5b8c7ca95535499887a0eb36f5f4f3690097e0ce0","name":"node190","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","private_key":"11535d8be8b31e5bf636e9671c7be140d596984e31eb44adeb0002976fa05b97","name":"node191","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","private_key":"9870e0dfa67e07bbfca9e8eb065c1085adc82bf75d9d75fab9909f3681b654ed","name":"node192","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","private_key":"01d68cdd16950c65e5781ece848e201a6ebbd5097f74dadfd7a5fb007bbcc11d","name":"node193","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","private_key":"7d7d75371a52b4d22411fc3dec135a945466d9fcce8615dbb959ebaf62bcebac","name":"node194","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","private_key":"cdcb88f25a626c1434db6d9ee8ae5934f466813535a8b9425572a888ade1bd98","name":"node195","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","private_key":"70186f9ea20bd1f26270c4a3cc72d7fd6997f6ff1e81fa580ac396cfb8a53d96","name":"node196","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","private_key":"23e586de5f3e3d888e4b5afccbc7bbe9bc569233c4133cf8b4b6a6f722bcbcf4","name":"node197","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","private_key":"fa2860804ef40cd74e911bae08fd20f7fef5ee4d34f163dd456f566b899f18fd","name":"node198","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","private_key":"1552e3359f865f955336c9e44aa94278481ebc3fba1bbac62a7e6c95d3348d6b","name":"node199","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","private_key":"da57c89729140a0f359ddf902197cddcb6b13a00c226d1a8a0975bda02f3a495","name":"node200","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","private_key":"a71ad1e471863026826e723cb60ef8221c29ef9c115f59ec22dccfdbf13724cb","name":"node201","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","private_key":"66b7f7a02087e6dda466b0fb6d05311ce95e179b4baf6cb7dd1fc1052f066367","name":"node202","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","private_key":"f4efac8f64908b896f893bb4b4113b00734dfcbf9aa87245f1aa8e9f65b644ce","name":"node203","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","private_key":"f15da5ee626bdec9e7b303afaff488d87aff1815668f878ea6b1f270c6300ec2","name":"node204","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","private_key":"ec037812b58da37d27db08df00018a39dc06d096116acf7f56921452cf7cfc0b","name":"node205","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","private_key":"9a037c145472a92a10b90fce8fe35501e93af7b73b026641d66a53ccfd3930dd","name":"node206","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","private_key":"14480f714ca25c522c067b4bce766945c9c2e8d0b697eacf9ff286fb0c26dac9","name":"node207","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","private_key":"c756a2bbb4c7b536c169fea0b09c7834ce6ce6f687c4968e598b72606163b8f3","name":"node208","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","private_key":"a837afe73ba3598ea681339261b12f5b9f02f1ce5243d6f7d18c735562b5a485","name":"node209","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","private_key":"6dab6d6b30b7515d850f1f4e7d6fffc75064eafafd86b8754a4000153113b1de","name":"node210","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","private_key":"431d8e4e06f15988a4ea9b3c077ca2b2bfc5b8b04135fea5ad7dee050940422b","name":"node211","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","private_key":"adf12e35cb550ed5a52fb5fa25fe7a6298e71b77a2dae474ebefbf2f9b8aac69","name":"node212","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","private_key":"7a94e705247608b3fe77122138a93f8477964e4a1a5d068091ff655f6ff0acd9","name":"node213","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","private_key":"c121bd7298c0130e294b88e6bb3b99fa0db790e9760b605448356e1fd89a3e5b","name":"node214","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","private_key":"562bd811ced052733cf87caf5888571e4482ae46e14ae1585debfb6b10298249","name":"node215","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","private_key":"8ebd5353e11b993fd7941ca1a936fc21799344607325c2879687b5e90adee6db","name":"node216","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","private_key":"8234acebca52619acf23d978bbc19bf2d8cbbc933bc7e18c7903d4b047471348","name":"node217","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","private_key":"1a4a47a0b83da4f2ccd94ee24a3657f777cc93c6a58b8ec0145586ba2c161429","name":"node218","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","private_key":"5b5aede47f05e99b807a7451cec469c1f77786d45d9f55b5a797b82d76db93af","name":"node219","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","private_key":"96ada7ff2fc583b6dd41941edfff92a81778c698d3b1f9fbf4130c2f7cbbec84","name":"node220","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","private_key":"1616cc42cae550c0104204c1c7f6ed0b3f65da627bd834a2d1239d70cc5b1e77","name":"node221","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","private_key":"1d029cbabb2eaef44889598c8fa2297996a69661d29c14035424dce781deb15e","name":"node222","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","private_key":"83c0403796648d484818f74b9de3c755c56b24f69e3394e062dd55a9d7cecbc3","name":"node223","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","private_key":"3f64513ae7746b16fa9ef3978d1bdf3c87ab4842c75aa3b946385dcdb23a3430","name":"node224","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","private_key":"a9db544f2fa00dc2d658a531934db6efeec93208b76d5b6859e6f0c4abac116d","name":"node225","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","private_key":"d53b2fef355d63448b93647458df0ba5b73bc42492d376377401a568eeb4d81f","name":"node226","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","private_key":"a04acf8d5198d0e7da1a6e9228c8ac6a74542a8d91906d5e83f1db219ae25350","name":"node227","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","private_key":"d5ad27697670f66cacf3e0ffb4473ab4912ed96fba311ddc8af12ad7663adeda","name":"node228","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","private_key":"dd217caf701902c94b57e1eeccbeaeddc4a7837b56d82ae2f034935d2828d222","name":"node229","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","private_key":"69b9f99ba6c47542a17c63be200102194fe3ab24084ea1e684033e68d580b5af","name":"node230","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","private_key":"ead9e2c8c0b3993304cb0a4a0dcb3ebe7c4331a87fee7c70194a3b3690413f43","name":"node231","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","private_key":"96cf35a39c0753abb6cc71c2a23e92fc936169a0600e936611216fd8ec31e310","name":"node232","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","private_key":"12ecde7517662f6d425f22ce7ecde84688ab9ed7fd443de2f309f095857faca9","name":"node233","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","private_key":"bc558cb24210cea0443678c5a9a412b3512b5b965b14df80818039b6fe28fe06","name":"node234","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","private_key":"1f2ab03e6921c321f5f783a3105d69bb69a4c031d50195fb94324c3280d52310","name":"node235","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","private_key":"8f1333ea7bd671c671ba94c4c7c59d6b0687a5c475b21712c6a49600e71f78b5","name":"node236","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","private_key":"e7fceaf57233e8a351a5a97e433d38131867965c883d53430f8f635f0563a168","name":"node237","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","private_key":"c5c6440cb8356bd270d8ce8d543b85c784f5c049b80e951c26fbcc92cfd1669e","name":"node238","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":false}},{"node":{"config":{"id":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","private_key":"64939e66b20f857b3b5c94f6e5f72f15ae524ce46058ebf20c98e796bcc608c8","name":"node239","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","private_key":"9fa335b0c4f3fed78cb6aa4c0137589fe77d15b2127788adbca0633ef881b61c","name":"node240","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","private_key":"a36da338278d776a57dad648f8c5627834918fcaa86367e4aeaccefbb4142c1c","name":"node241","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","private_key":"dfbcc9238ce614f0a4711f04948064ddbd5b2997a19f1e62c8f9636e9961fd5d","name":"node242","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","private_key":"ea0d5ec78fdcca32a257905b595a0c7bc8f2934d088b0f4c695a76927fa9e791","name":"node243","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","private_key":"01bbc4df92bfd5efca325ff653fcab3ac6aca83696f57927d3313fdf03dadafb","name":"node244","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","private_key":"2e16fcbc5651872d962bf9cbbd32cccbef2adac9e86006e4b4e9abbe6c22d7cc","name":"node245","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","private_key":"a26a19f61e9c2c83a632e779651442713ae7026ff3889b0c2ba690ad206500cf","name":"node246","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","private_key":"fd1c4ea6d2c07317eeaebbcd485aaf9267d81f2dc547b2136eba8ed02ae2c635","name":"node247","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","private_key":"a655a637ca80f8c5354e51e46d31d79b36a8a8b44d50e2838a118ea8b33512ee","name":"node248","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","private_key":"02d1f6c1a867e9dd9cf7bff6121f3eb99e7c75866f8fb00d83782e69de6dacc5","name":"node249","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","private_key":"e0f98f6ae876455342403d6cd7ee64b21f5e5d691ed720d81e0db64529d8cd19","name":"node250","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","private_key":"53adafcbccccca52e7bbf9524234d7c6c5874e3a328d3ded48c93c7b07f34428","name":"node251","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","private_key":"b91ef086d245c3849c46234765c2d479c053b5974568062618a768ebb7014b64","name":"node252","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","private_key":"438a2cd1d35d995ba9e35fe1b4086196934e0a6087ca2ae18543512299224b1e","name":"node253","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","private_key":"1945283cb814bb48cbb80a03a2660606e5c5e023e3b8ac887baf7cc912ec5be7","name":"node254","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","private_key":"be6f375f22929e615c683dc9b07e4e2c609a06e07a849a718617c2a0c2ad49f6","name":"node255","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","private_key":"9775c9bb0b01e8a605866b96d386a1f8c3dbba2605cb9f8089c4f85fecfb6c62","name":"node256","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"c0d1ac430a1466a1a28cb1aa3d29573ccedb13641ac19e6e615f2a96e8f0950b","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"29ffd73eb3b36593482208f5bf1b9c82b7f1a92b06173c769db0999d924c8969","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","other":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"29fd4473f1b6c37f8268d73dd5f683a0f7eb64bd793dab2c450c10d8ab0b666d","other":"290fca7596740129fd1a3075bbf56885d8c83381f981adb0fb283799375a3bd5","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","other":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","up":true},{"one":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","other":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"12b9aa0addf45c714ec95fa915294c997f9d73ee4d6ac7832d18d19554ec49a5","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","other":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","other":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","up":true},{"one":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"4a670fe61711307f7781b3b5a8014fc0e63866efe356a25e61b2e768a7389980","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","up":true},{"one":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","other":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"2f2284537629514837d5c2296d2871d8c4c147719f0ddc28ef7c629efd44dd61","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"2a69e3897d30e0cbe9b6179a55e30eb13c658b284e1dfcfe4dca08a69434df3c","other":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2af02e62ff3e40be25d22c2f745a505b895b3804a80663cb53db4edd5365c568","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"3a4a300de1009d694bebce2362ca429086ade2f551989d55ba459a68efea15af","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"5fa8a5a29a47694653a5e55fd9b76e9c4f717ecc9b7088a6ec7ee273b291d49e","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"2f9f266a3b660fe685de2932de82979bd221706db1e2b954a93edc6609c378d9","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"72acf53ab7dbda90ea70e78d001fe21e7ab88e4054ff0453212e33a26fbbf7f1","other":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","up":true},{"one":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","up":true},{"one":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"72fae969e2888f7cefa40a544ea66b8c2fd161b1af3ea1f0b8a7012a36188aa1","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","other":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"4af7ccb5c14efcb279502de37f436576eede95efbe5641f12f47e99b2bd9a172","other":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"52881f1fe0b8e9044a3bc035edbbd6343b9c41d49c0f2c2ca799c2e764489b91","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"5f056f9593be46d3eba4dc8d9e0b93262cd3f00e007c13c4c011d53e7c199628","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"15f6bb0640c3ac8ae8ecf10d0d46cc739bb6f86b0c0cf706103aad9f3785219b","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"74062d9dd73e26066fd44e4f6c696f271c9dc6860bdc5ba3fcf447f455c8cafa","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","other":"14c81fb2fb8fa5a6b47288356ab486012046d09959b9ef4814a09dc3facb4853","up":true},{"one":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"3345e03880c377fc1fe7b6205011ce3e32525cefee5e03161105f1512893f9fb","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c9f391b1c008fbac89791d7135d4d23c245ef6f28258d6ba4f826619da9a54d8","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"52619a523050aa8caa32448e59721a76dc3321dc92cfcb1b05f1cec5b79d424a","other":"50932e2c1f03cbc41d8d9600ce2457f3eacd82c36b61fa09bef512b104eaf8dc","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","other":"5fd02ea98977d976f5d47a4005300b9865b1dcdac77bf8a98a8920a89b57825c","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","up":true},{"one":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","other":"34fce2b8208c6c8ed005943b3f2cb9f8923739ce262e2040f7ffc048093ef910","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","other":"004e812995bc04f22993466df9889ca1b650bba242cf80bb070ce9564e7bedd8","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"7854fb9f0d2f016653994b9e23033f27e21a2ef186a352c8d068b75ea20beec2","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"6dbd2dd8f11adebfbd3ec41289e35e4a8930da1bef5212b152deed8a8ab2f1bc","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","up":true},{"one":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","other":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","up":true},{"one":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"0ea201515867c6793cbe48350f209e69acd3829b9b16b6016d965d84fb6379c5","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","other":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e8392bdce92a7dcfa5e3196a6e1d4e5dc4814c72e104d3e2aa1f1ab99e2a47a6","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","other":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","up":true},{"one":"458a31b8fdbc42f5e80f01118c9dc041740212c09ddfb4b137c9e7e93ae9ec51","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":true},{"one":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","other":"36485615576c68702382f614054494cc4a40b90fd66db86b9d86a6a131dcc6ac","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","other":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"13d8107c669cc27f6cbc64cef6b2bd11f72db297f2857c2de7323b92632b8231","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"2013ce63483af2990b35f9ecbe5a7653c34b24ded173753575b24451787ed8b9","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"353875d4ae2b9c5cc6cb14059bdfb9540647100c7c3334bc60db2ca2b4ddf3f5","other":"32dd86f3f5c3abe55d6b1fe352e9d1d0cc63d61cfa60b8e70b2ee9db2e28e1aa","up":true},{"one":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","up":true},{"one":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"18f9292fbe6e94ec3df4d0a896c71ed2b1771437e42d8475a7aae63c7992834d","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","other":"b79fd26ce97e98e7432029dea6bf11e48ea9e8f2385dec5c60be0cbd51bbef54","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b5c764a29cd142acbd83b74989e7d2232eeb2413b74c99ad5769e8e7bec568f6","up":true},{"one":"211a516fb95d093eb43f4716edeb1e6f76ed79d2aeee3393740e244970187840","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","up":true},{"one":"fed15b57e749c5f8f5fdb382eb95abe2ce0dee184c817e557122207f3729b05c","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"2279d612454ff034032a5acf5a039477a11479b9b9a93edc26b61312e8d9b156","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d5644a72a9adef667fe33fbf5af45214d1dd09331165b24e504e8f5eefb6195e","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"5110c7e54a18df6963919866e7f6c0c3a483045d5ac20fc0dfa5e1926681be7f","up":true},{"one":"1da34e756912c1f9290970e2b60d5d8a88407923c0eac8c409b75f0f470ebc36","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","other":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","up":true},{"one":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"79bd78e5e219d35b8c6f1847c4c77c99e6486db80ec19196e391d7b76232e0c0","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","up":true},{"one":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"21682cd736edfb8b451dfd9c55eb9ea3b7cf2e35cad32537f1f4800644fbf9a7","up":true},{"one":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"0210146e650132dd0ceb8cea779cafc5485822eeeb9fcc17f292af5cef6e9632","up":true},{"one":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","other":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3e4470c3278bb723d01e1f058cf355bec8d3beca8f589cca6e835d59437591a6","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"7294223c0ab27851df8c25418acf09a28efa95fc238252af8a68390db07b77e4","other":"730749922ce3dcd8e249b988dbfb950c15473a2f6fd5cfe2a8126995fb1dc186","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","other":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"f048e37427d68c4134a115cc7df6a8924ea95f24e7f2435372ae331e24b5b7fd","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","other":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","up":true},{"one":"194ad126c41c487d95c83b19ed2bb053e4d2ec0605952d3a396dd4304e8e363c","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"aa504681c991c69015c7ef0469902c44fc4e900356b181aa252a1280ffbd2e3b","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"61431b36dd5e311475fd2263650f90731c07b728c1052aedf5bb98d414f07e8f","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":true},{"one":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","other":"396b256b223f346a490844895b9f1046b4790d624af1c43ecae1de318c7214a8","up":true},{"one":"f156942ef74790d1b1b5522f83d7099a4b16bc33f6f4ab2f3e1d7dc5bc6b0529","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"63304df8e9960f7a91a6185ce0fb69e7061f2647b9e21cce1237f087ce34a78a","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","up":true},{"one":"3d6baa9da17c330fd34a40cecf331877d4a561f6b4f711cd5adf41bd77d68748","other":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","up":true},{"one":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f0e209f5d6f69f510986085461dde294750cf0e7c2918f01a5c1419ac629de22","up":true},{"one":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"1b1eca7b35086d8b217431c1d6a01fc07dc8bc816196a80015c9e163bed676ff","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","up":true},{"one":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"d3d254a3024a7aac01e97a5f0aff13756741867e599bc94c068f0d1d19ca8176","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","other":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","other":"79abd33d150fdbcbce6f55f3d101608b80e03ede7e4627bc06ba5c1b001538a4","up":true},{"one":"193e52ce29062ceca4f468b49655a06e7d41f6d26ff0cab42c1d896b70bb9218","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"7fa47192bef70d34223a0dad181da09b55e99a1d940e8c48863aefb63c9fb733","other":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"df5ea72c0c257bbea9b43901a1e406bf6055a307d083367e7f1d944e65c2b3cd","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c4844b8046d1c47f699ee1c232d945829105d45af26fba722ce4d0a937c99631","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"4b00ab74395ab00e25470c744b8d32f44152f5419b43540fec1fbbaf491f52c0","up":true},{"one":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","other":"f915fbbce2ef58a4378f62b9c749764e968da46df7bed494b35a422d0359a5dd","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"de827c6af1d3423fa60bf50ca6e12172d21a9fc39a6360e2804f83003710b534","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a80b39cf280fa80b323370cfc37e8e3ff38de47d5de445c500f36c8cf2390b53","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"259d3874697a0c3192f973c620880b2a86567289f5222d07eb91a51867352559","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"f9243ad864859edd351592d24abdf5c9c4e37f4ffe2ae1201c45f26576ee5725","up":true},{"one":"1e4441309404b0dd8dd9e8b1fe78708b015a0b0278ce86bcdaabc7d2d691791a","other":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"31edba65e539a9a3c7107a131c4fb4b5a8e2c2d4e2db7874a0116c173961e27c","up":true},{"one":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","other":"4d447ea80bc126e57b9fc91203a310c5f4b242df5ad70d5087d16697a626e601","up":true},{"one":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"275c93677aefd92ab38f9e5b5b4d29f90e809ccaf77b088102071aba26421f3e","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"a749372cccb7001a480b9416c41305bd1d3bc417e15669ae587d4375f2bbcbf7","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","up":true},{"one":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"ed6570e63fc0e2e2d6290645c4339b70a0f1c14064d286b4e0ba143607bd70c8","up":true},{"one":"7851f67196b812fd6cab7d577b90e254c6f9ea33259c60b5efd91654bd8db44c","other":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","up":true},{"one":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3f3e66f7c8fc7daae8a7a84a9c90f1ea64faa43930f36fc8f11e2d7b751f8ee9","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"def4f0b988942a8699f6b500cc2531c7dea065e3dc5bdcbeb26bca8f00e1d3a6","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","up":true},{"one":"265d7fc553fb8dc016d7c6ccc31fc372912a11e9e8da0e5822e371a91d82e857","other":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","up":true},{"one":"a485db6ec1929aaf695a84294f52905aa602584954e9ef71b4e18f7b847da31d","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","other":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","up":true},{"one":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","other":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"b8a7578a22a1e9963deaeb7e414137bee0f4590bcb93d327e9525d6dc03b81a2","up":true},{"one":"0f5e34b25f6851d0f3b572c64420de0aec01754bea0854bd7e9910b4b1cc66c3","other":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"604c6bfab4f5d16d5b786318cf8f9e0197fc18e5d8a8e6f4fd345e653d2abe17","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1d942c85568f640497c46a9bd5a9825bc6fb05571203a3f0f14a3032602d81fc","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"167306fb0e24ddd775c2ac0722103ce5db98bb0ef60159b91f584475d34cb5bf","other":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","up":true},{"one":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"9390ef61753fcf9dae5e585a85650287fe1f792538721a2cf767adc44c5e7ce0","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b45d1aee940e5d2c71db22e2afbe908d5967e437fbb5bd051edea86ea4ac9d30","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"88da9dccda89c111dde40318fd1e5239e77b670f5a1b88a3e9320b7350885e31","up":true},{"one":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","up":true},{"one":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"4fd6a4b99b1ba76775594673421c8eea175c114519c8554798c2c364175bbaae","other":"4cf655b03778bcb41c32664f13168dc32968354468c8aa699de52b43a2e0dc7d","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d7abbad732948b66476e1833f0af6bb6250dbbf4ac71b9c75b4fc634b617e8d7","up":true},{"one":"9a82d22b29c88eaca2f20a62e9e63675904065e72c70ce2fbbefc0c9d2e53e90","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"42d403f4ee649ebcb94753e065391afd0b4da995a2628696afdb4b851e9f3774","other":"46c5a266dd46041a62f21946290aad736d2298277bbbb16b1efb4490d9d31fa8","up":false},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"4f90f53754ee50357491dbab7c3e6748b40133e3339920b32f4c3457f4258477","up":true},{"one":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"daa2c427e8ecc566e634908fb0d47077d8e79854bf884342c06c4bcb355e80e6","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"c98d389a6d8e6eb5a1eb5a6f235857d5d939d30e51c16d80c039c9e0eb2f7eca","other":"c883e2850f0a901af58130e87c4f81d898b03be8b88b580ae7075e6c40b33d8e","up":false},{"one":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"89ee628583b6e0345ceb312c2e2cbf5ac410eb00531be903a4b94b60b639993b","up":true},{"one":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"b4c7555a38d1d4e3bd1d01bcc47a84efd6128e8cc0fd803362da8b341f984a4d","up":true},{"one":"95e0529227286d442cdeeed428614f99c19f9223426e6f6cefbef2d9d47ce96f","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":true},{"one":"8c615fbce8dd93846d810857d03235291732e4307cad0e66ffb23f053d2f0ceb","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"ca81f50b5b4921ef7f584972609e1774da124233ebde0bf8f2ca8383017c8a13","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"cb69f673a54a75de300d1d1ab989caa04579504cbcaf78f03bc192c9578ec5a0","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"9c01d016aaf11f9e7b048ba10cea3c351d9ab5c8c66e8605f78c06772708985c","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"b310299bef4f4e84a1ecc960143e4b1bbe98cd4eb8352458c477569ca9994c20","other":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","up":true},{"one":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"4019ce1dc667d90a85021b5fbf49ad77c1de7fd3443a40a17bdfaf5175efa1e1","other":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","up":true},{"one":"9c0c7b6da33520440b181a5fcc30aa8a7576ec9c6f64acef0c9525d05a2ee393","other":"9eec5d5357732a7acd26cc8aa0bc65f6c6069aedf4f3ab4a6790c7fff6bc2695","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"670d1c31407b4f34bb955031e9a3ab7980273155080b459a082687d53a3b42a6","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"569567603f057518a9dade31f2d12c57c5dde05ee50586ef0f0a6f98f4f63660","other":"571638637156bdaf92d9c715647a1cf64e91877c2d998658b7c6cd27522271bd","up":true},{"one":"abfabc2964ce2f7b8b3702e897a8cc83fb0c009d5af9670b889db582e57ef7c1","other":"aa889f0faaec1a5b7033151ce9d3d68466b128ff81dcb7befc2ce885d9236c77","up":true},{"one":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","other":"1d9364dcc19e9c94459be42a8474207806813d55ac768ea8e74228fbd73be591","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"05e8f826e49722ce09edda07f9016688df5032bc0183589e3c94afda6dd63074","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"67831469d7f9b779df4318cda9d4310c53fdd66332af3740e654233ceb3fbcbc","up":true},{"one":"0eeed90814e9408c94e81296f7b681ac18edacda5eb611af7f69306524f188b8","other":"06aa2f43956f978abe7b8f8f78a5a8cd59decb66ec54b7c81ae50c3752798c5e","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","up":true},{"one":"043f24ce87fbd01f6f663f323ac6c156810a67b12efbec2f219ae9a882a4bd16","other":"05ec2c85c83bbb8edeeba98fd2ef4b765114f5dc36a88175f5017c09e43b7a5a","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"dc3ec6529cec19709403e473d4546ba07f7aaaaec5be7cb0618246a4c0458944","up":false},{"one":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","other":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"237459ba37141f18b3cd40f5ec9cdaf6789fb87aa4511d489fdd98a960ef2883","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"245495250d38095106022d3fc905eb7eb6f54adb2cb0bacdda0b305974eaa50a","other":"2e4c8c371968f3a3cea2e2c1c9bc45f8a0cbed49a7a1fbade17ea34a6e5749cb","up":false},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"ddf8ffe61fdd1440ff2d50d42619d52eb125ab8aa1e8e5ce16274cc4f4728b19","up":true},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f5dd00d94488f3387d64ccc2115cd91e5073c06de36d195a5c1a95db23cd5c68","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"759eacbb4bc23d8f6826d5ff3d38343e4143c973488525ca747e66e6002e2364","up":true},{"one":"86f71d23eb4efeeed4679be7a3d0f58f98b83d23b3e0a8b73f60f1535b51f25c","other":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af5fcb3714f6da5fe576fed6312f59042cbaa54ac8bd86e7afcd0753743487db","up":true},{"one":"4a81ee929074bd6d9932fb4d970f5207db8680bda0e951aa72a6bd64df45108d","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","up":true},{"one":"d8b0425e4cb5134ddb2de5c05e0ae9b861bd67409c1446ca228318f79f5dd1f6","other":"dae3ea40e4e6e040a4740a614c99ec6b9e644302135cf347ea6ec9ebc87a9f21","up":true},{"one":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"99aaaa7c98113955ecc0163943317f6ec08ae755e96c25c9f79ca1f529c60587","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"99dbf361b67d6c370fd4f201b059e93da50dd88cde2e25d0bcf3c73afbf13535","other":"985c14910d922bbd1556c30620e3ab72170da6553e658dd3806d773a734a1c93","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ecd2b502d4e9bf77369c62d1142a9fb4ab1071e751cc6971e9e381e953b0fc12","up":true},{"one":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c64f6bca15d4ef21a37b69c8f8bdbbbfc34e2ce0fc612cbc6a937339c0ccbbdb","up":true},{"one":"5fab772fff883d04cf7e4713266fb1e98fa1746e12faeb04e87bcb37b8b61187","other":"5c5d90a825221bafb2ab726f90422c9a59f9bf97f181c0a2887db2a531798048","up":true},{"one":"bf5ac6f9b651895c8d75ab3ae7994f91981dbbcdce25a7cd718fc996da96946d","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"7ffed78e11c71eccfdddf6a8e5e367831b26a6b11e4d3b60c5b9fc50f4bcdf33","other":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","up":true},{"one":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","other":"14418557af44e33fc8d46369426c3e2fc91622cb08779b3fefce706969ec2163","up":false},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"fb93417c597050f8deeb3098475f6cf0d213926332b59c25a538c1b4e6af89c0","up":true},{"one":"e4c3fa0700516da5650f794067eb1c90ba7eaab2b65019bf34552c26f8c1d9a6","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","other":"47f95708475c9d61ff2016e7707c4a3796f6c87313bd1d2bf91aa620113ba5f8","up":false},{"one":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","other":"c7703c4697637f40a50a5d0b656c4e54010ef1277b64d251ccd0752512e246e9","up":true},{"one":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","other":"566eb2e022a83d49380a94cf17c45955f47faeede4b23f97d357e6e7d7152dae","up":true},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"ed1348b4037004b61bd4d6f9be1648112f835943a3b997b91ac931301311e007","up":true},{"one":"c3f356325eb1e61f2cfd8d80d085fb144c6887e1d710c9d133109b84b823425d","other":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"1a833a4918d6f4ebc0c39ba3bfd4e9de16bb732cbacb963ff58ad3d3198f1336","other":"1b7250dae1f2b07504b381d28084b751a26ac791a1ed842ea5746826ab85ba22","up":true},{"one":"7829673eec0b413d62bb06184e740042e252d3b68b3d1cc174bf01e32f87736f","other":"7a4118d2ce16e8258cc2cdf31c5891945e3787c46c0836fc916601584609b7db","up":true},{"one":"1e42fcbd6735744e505f12f6b0858a9fd17c0a7736a69ab0b969245a3cb1d6e4","other":"1d07520f0ace85fd72f14c881f3d6a5511902b20b6e0f78d2a261191c072ba5d","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"1d5fc65b4121cccaff0d2a853c6bbff0c10b4ec28cfc5ef5cbea8bc28bc4cbec","other":"1c982d886cbac7e6ac5e786a27ad2f8bd42908fca94358cd2838acbc20b5fd31","up":true},{"one":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":true},{"one":"1a02108d9149739be6ba85ddd1e8a3961adeec38f77fcef95ab57f8f2f39f4bb","other":"1b869ca5aec1ff0c9980b06b79084019752fd4557054e251c0091ee5d2c7d478","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"86128689b03706f9a86baf4753154afbb0c535f84089039ef5610d82fb969a6e","up":true},{"one":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"7de7eb0b73f3b02b998e592e0fc51b26c0c3ae6695d41897874d2a3d8ce3554b","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b71052b072cb98fb79151fd0c6044828e535a0547cace931183c7e4e7f227698","up":true},{"one":"9fee945c89d6bb59e77a24183c2855f4eece0b5d3266f750ea95483eae1e1871","other":"99fba7334f47bfcf21331d6179bfb2eee2ecebd1ea23fd829c542844b10ed974","up":true},{"one":"b60deba7c8676305b67af41d2de866bddd72edc0667d427e51fc3f2e91412b45","other":"b4639751d67db0b32ad1846996fed0d5c59be76b77efaec5f66e64df35eefae8","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"ceee9ac63786ad68d884f5d018248ae1b7b60f0ad434776d29bd4dfcdc0f04c1","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"c8fe626c60d6cd15912a22d2c5872f10a8f8aef5b6f6b2f1070edec6670bf8b1","up":true},{"one":"94aa6cadb94dfc04e2ae3150aeeaeb73b6fc483482156fcabdca4c6596eaa098","other":"96b6ec2cda7c9e962bbc97e7916b92d69b112265c4456d30dade806e09fea62e","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2fd800d224f124e47038bf140ebd486f1d0ab93169c998d2dfabfd1d3ced96ed","up":true},{"one":"2a2253ec638947fe40b97489b2e2ec0df26ebc77d202276c1d208a3c802c336e","other":"2e9f7d37106b59d6f411dfa0392325d1fa279fe45c18a101e32ece6716e88946","up":false},{"one":"f3d3ba20652827b58c605a137e2f07daa5d139804eb4a9c4270129de3a0de759","other":"f1fcfc064446a432ac7a21efc386fa3d053d0ca4540fd4ddbbb253ec11f9ce94","up":true},{"one":"42c019ddad2fde0f0c7f5041eb584996976844f8b2e08e20458437578d0257ef","other":"43afd835930eac91c0c8947001dd60d8da9112c19cf3f1356589b58b48962166","up":true},{"one":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","other":"6544c4a403d9809697420ff9840ea9de0c9ba6491de28dac288db6257f2dc218","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"887482890b190505bec49838e400f3f1ecb261039ace70bd60c368be94131ee3","up":true},{"one":"388d46d6ea3fd92aa959b04d597ff1096d6133f171181c8fb54e52935b62d33c","other":"3af3bb6c4343a19e3c0f9a89697cd70a3c79c64b1e40afa59b188c5553eed567","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d6d2d35b3819e03b39d7146c4dd1b53fb7b70681c8860464650d5eb2d09dda2c","up":true},{"one":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","other":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"0592048ae4e6a3000f36e8e1c0e1328c26c0d4bb6369d6cd867a08d847dacb9e","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"03f5f1be5c1ae35469333a5b08622372f65ef8f233746afde56d2647c5273630","up":true},{"one":"1566e3c8e2873d2fbe0f1e9eedbd2cbd5c69161a461e37a48fdfb11d448601e8","other":"0f81caba7d2f752fc670829f74565114bcf10c5b97d7f93252b467d0eee278b3","up":true},{"one":"c8f9cc1fb3ec871e2ce03157f90cfe1c3b01a503c30afdc71d0e8b27ba3a8e19","other":"c99c6a2a2fe7f4613c8d918404c956eae0a00fce544c9eeba5da640e5e958874","up":false},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"4a828523731caf47f9aa2dfa20f8a8895e9a6562b3a034574639a229a733b4a6","other":"487edf32027381256a864bc2e9bca175f7216cc1234731bd4dc90d2cbad6975d","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"77ec3a73ce1d597d307e87ea8d026baae2a7df4d288a657f240eaaaae7fdb456","up":true},{"one":"a6720426faa1ea7e2d55c1c5ad05ba2e8c534d120ebb5e1375cf769d73191708","other":"a03380e51f365445107b59009eaa9040873968cae477be5602efbbdf4a6414ec","up":true},{"one":"57d57ea21e4635857370be02618b158a2b6ed0a8236c67c47070ef41410b3cc4","other":"5571c936426702553d64564d56a909c628a8233ed436acc2a3b9f850c5c6b6f0","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"92325e52babbf2b8ae3c37beec7e440d11efed2d103befa2c4a969315a2eab56","up":true},{"one":"7dc63c8146ed092aa4c9539abd112dc3a703631e364a62fd74b192eee5778123","other":"7471be56a2f617783d5a1ae4390794ad24f453259b7c1f8f65be8f71c8bf8bf7","up":true},{"one":"ad36b802e9b01727e516879c0055e3c46b810845794f7772ad85e8062111b167","other":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"ae715a40e9bf50b4eb954c6b87efbf1a6e7abc3da6d84055e4591aadf5bad5c8","up":true},{"one":"1835f62fe3889f43ba7b4b577869ec764e96fa9a051f1301fb96795daa8b0755","other":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","up":true},{"one":"c15d13aff7f5694fb8fc2a2154846ac703064133feb632e28830777bbfc7c016","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":false},{"one":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","other":"edca23c0fccfd1ec66f4d39bb129462776b9091c2337f6afbfe8737a0ebc0d7d","up":true},{"one":"bfeca898b1755a001eb0bcf8f5ad5713a550d0597f99ef7967ea4e7add8d3e81","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true},{"one":"f644c73e2c7e29dd45506736ca4a0c2cab3f8294c01a6d5decc193cb2d19a473","other":"f5cc76a5a77d79b8f9d3dc2eb53af5f643583aa9392b361aa9578cdad81fd4a5","up":true},{"one":"185a7952985b8efef8ac8ee37283921a458a6a107cba0f7fa33da7480b05c4cf","other":"123fe1d442c7dc905a7206e712fbd9cea640295a6823b39b1945629ffa89e895","up":true},{"one":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","other":"af303f61e91621224d5968e387946d4e1dbf76d1e7ee6f8f2ae60991154d3734","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c7230d8d56b65a66ab721a8268ed436af78210aae7d068cc2b8afe39b6e61c81","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"bc08af284ab661dcc1cb23859271590e50a09ff8af8073769c812901ea0b9080","up":true},{"one":"8163eebe696123817a6d998d7781612931df6fa2fd0293c0d0dd395d031c53f6","other":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","up":false},{"one":"7d941474f90981a03c95af4cf68be163d01a317e202ac0db82e25f46fc3db8aa","other":"7d45f1e91bcd683d870422b2f591c76f6ab07ff4b079f35c280ce46f7fc364e1","up":true},{"one":"3dca1ae488cc497fe738c630465f987b419a5bb259fdfa17fe7130e238ca3022","other":"3e85d2d3d6750f84500fcf523743e0c242943e69188cb83114adad1787e6c089","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":true},{"one":"e67d72c8c72bbc7bec1d4e936d65adbeab75d1b6cafdf2c39e38bfc723cceebf","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","other":"67a246540c1fa19a0856cf5a99480a3826fc91e125b3bf5ec1e47a2c5aff54be","up":false},{"one":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"df25c443ce1a7b63fe5d89bffcfeb49366a623525660fde8ea509a1934aa050c","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"fd2df4df8f5f7c7cce198cdff07f2adc0e68b646fcc046363d284635c68bbb93","other":"fa7483c3b8652029a3c8599ec3cc1cec5a75181c564a7f6c50094370d43036ff","up":true},{"one":"e44b5f4a563a36e50e57253dfddac4cb5a92137f615f46f638995b4b18863f3b","other":"e76a40477e69f637ff70f1bf393b1dc96a946384340b341d0be97ba01dc12660","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e6491ee529119721d2c1ce16d220f5d055ba35978f4d7c66c4ec2e3ac36183fa","up":true},{"one":"e3c95a82f373da4522533252549c1d68b6f7621a887feb66199cfd4b7a35b6fc","other":"e787fd35b438dbae3d0283f7181fc4afbeb6f333201ad4cd1b46bf7094a6a85f","up":true},{"one":"c4632e164170d35e91fce46f660265f73795f1d840effce5ab2aae18c73003d7","other":"c63e796efdc44712403199c11c3e5ff28e5d6a4d9ecdf3e95620fbd6afb1bc2d","up":true},{"one":"ae6578693ed933e36a7f499adde340c79bdca0f5f57334dba5646bc1e4d7b717","other":"af358f626738d2e5d17060abbaf24cb0124a48c5edb8f3baeda30bea7b403dfa","up":true},{"one":"d8222a2c177f0cd17baae28327af5c13f2fb551dd01298d17855ce7f6f4f6189","other":"dc86cf92a9640712455824fc7e1eabb939f60370d1be8fff55586c4aaa8b3331","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d68f504755b48f8d41570169dd3544ef1caea2ab1bb334f8d8c5fb27fe816f01","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"8ac85afde0c46f53269dc42863e9599cfe7ed0ca3222e3718d83ea6481947ab3","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"6d219b0ea4a1620a7ba051cc478da6df9ea443e87dde79e963ec789a5bad7459","up":true},{"one":"8c89e181c6fb18078b404d47b10c70d57d6643393505ed8ac88e63236ea224a0","other":"8ae6a3d0cc665664aed35acd396ef18f642afd2b1e1e23817174b96bedf26793","up":true},{"one":"d3fd74e6049dbeceb5b78ff4681b000da5ad8a3860d4a1070541b5f527d2cc84","other":"d6f37555e9f35a3ef3b8b4d5c18cf0702ed99c1c8b5b0a8554deddcbe542b88c","up":true},{"one":"9461928ad83c196e6a018ea2af138488346fd9c64147b544287e4473ba95ed90","other":"9294e5b39a1cd4230400e033da1ac1f79a4025adab41ce8c0e0e47dda2418cb5","up":false},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f4e0d91ca58ed616918bf268565c2edb4176293e851b8d29cbbda55bdc608534","up":true},{"one":"6ea59b849a9754c022219146efc27fa6561e5aca8338a111847259695198267b","other":"66100e4f9d103d935164f39ea3f0332708f3825ebcf31ac6f8c9714c75a50860","up":false},{"one":"f78a54ba4b3fa75cdb542bdcd6da0d49986a5f7e7939959a51b3b48a87605654","other":"f4eee71a143722ea8288279876bf5687c1ed65eede0129e987e53f5ec76d8543","up":true},{"one":"aca1a0237ccef04bbfff4359cf12945880e485eaad810fe1bc2f2569cc42fea3","other":"adfc03118406bc5af4e3f3c6c89c3448c3fe4f9df20b15bcca9bbacf58ee5457","up":true},{"one":"baf32cface953bd22141970b691567ed375f06043fe31de354598fb4230fb0a3","other":"be0ab3ddc656568900d8e1f42394cc942464596b7565db40f6c5a0c24ee942f2","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_3.json b/swarm/pss/testdata/snapshot_3.json deleted file mode 100644 index 38ce68f34012..000000000000 --- a/swarm/pss/testdata/snapshot_3.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_32.json b/swarm/pss/testdata/snapshot_32.json deleted file mode 100644 index c33cc6e1bbcc..000000000000 --- a/swarm/pss/testdata/snapshot_32.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","private_key":"294c55925f084f4af87c7e09716c6334a538bac3e6b7157844c0c96a9dd02b4a","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","private_key":"010dbe172f1240848fae9639e029301ebd297b29ad2d6936c67669d23470cee4","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","private_key":"7f974cee5ec96d070bf88898c24035988667ea21242a02822bccbe4ec487d126","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","private_key":"d7e181b51ba95fd1475314470468045205d7ddefb1bbecfda3340267062489d1","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","private_key":"87ed3ffe3111baec0adfd92068b47ed9e1efb642d0ff3115d7d76338f25eea76","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","private_key":"7dbb4fe973c714c4291ce5a8aedce9c3425a25cdecfd5fe0c7f14b55e91d6a03","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","private_key":"6f8900888d42ea5340f13634776acfd4a261837cdb772b9a059b23c7d425da1d","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","private_key":"a94698db3c1a809d255fedabcb4f3314be27cad7be63cda59bb71724d24ca0d9","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","private_key":"37f683b58015f6a7ce73f814fc3860318bb2048052356a215f9eff00aa6ed34b","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","private_key":"b27bdea692559a2a77d497ee567e972e033d4e6e5dfb7c35948a9d231c25b0e0","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","private_key":"0a75e7e7dfabf4ee693bfe127221c97eb9b2f4e19d32f7bc836ba253445358d7","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","private_key":"1557c4754c71e6468fae0c7d0e1b5af2cf70511ed2d5d9b0bc276315a4c8f922","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","private_key":"d2b18f4edef23f629bc5624a36ac1d58f59207bf7de0b19220f90fc3c64b5a61","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","private_key":"48fe56dfc63a454ab004e7a5dc7938e29694377b6bcc27d1c19d8a72349a8c2d","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","private_key":"9155d38d2a2bbe1e5239f9993d96a350182e3840813436e23e1f2a4a9a32b7d9","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","private_key":"e60772916c9d248e3a3819de52aacdd4008412aab20a457e88e764752679b8f8","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","private_key":"e7f27ccf343d2124211ba980dfe8ee7e774a5956268a25522347bb3be99bf38e","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","private_key":"0e9cb88a7d70a04f0780ea51e001aabda0830f504e29e31c69d859acce0a9019","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","private_key":"cf8362e06e18a783f7e20baf956d40e2ea4a204ec868f8d34909802af222e997","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","private_key":"9a63fae9e77f9cfdc30f4747a939ba44e85824560d98b49047bfa8f4156d426c","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","private_key":"748efd85864661c429fd70a74bc32f1d81685bd81927c1499dbd93993dc27cad","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","private_key":"fed7bc6fd67e331e642253e604215ba088daa48a1b84979699ad770c09b909dd","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","private_key":"c61c4e9235825e60f2d8c57169e7d1913f45b057f298ba8fb05d51515e92a902","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","private_key":"53704ffbabad329a9032a58cd7ec012499b0a521bb0300e1d7160d4e5d1220fd","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","private_key":"7098a0386bb10a213728ea65f3ca98fd25a31daf3917190f6a1889d350e09674","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","private_key":"e967b2c9db78764c1ce024423c48e170b68fb6232c313a32133faf4936e2c114","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","private_key":"f8cf717ad5b26578e58a97eddc6074cebb814cdaf3f4144acbafcce51ccbd249","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","private_key":"e6573973825826d193b5093ec610c34368630376e4e13843e5f2203c3ca88fa9","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","private_key":"0ff9df0f439480bc31f8a3ae593af2662bad0f5bd4e0c3e87839af326929de07","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","private_key":"1daf1094602b9234a1651a8ba6013a807d9c0d56339c784d618e2c6705b65e23","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","private_key":"376cc1c769c48c4a04f3f1447fe31112cdbc8d898266a338f6675906511bc9c6","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","private_key":"6a9a93cae21630926926ece339463ca165823f499f47d45632dbe1a49a84257c","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","up":true},{"one":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","other":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"0c14562578ab9796c635d1e5b713bc966341f6e742acd4a8a93a524cadd669eb","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","up":true},{"one":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","other":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","other":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"3efb0d9530c931c9e47c6ff622c8ad695cbfad216cd9a2b4268c8c3763ffaff0","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"461dc187c3911fd12829fb3168b68135e3208771d385324434e8ca7ecf72b2e2","other":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"ea5ae8b639fa80db684c774d814b7e9cff0cf9622427dae35239cc84c1b7dabc","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"59b214370ca7c60bcda95a18d2b668519ef8ee53af9e4a677f1981defe79d4a7","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","up":true},{"one":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","other":"9ea072155528aaca8fef7a25af26134898b65aed2464dbaa397235cb96f7cd15","up":true},{"one":"3efa59309f968ab20e053836f01e0d8b4c9e777063a73e871cab86c1fe6a0159","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","up":true},{"one":"0a5cc796e733b06866b67ec3652e41a03a0c03707fed56b767ca5cbfe3828b35","other":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","up":true},{"one":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"81449fb850a7c2713784bc938da3e1573d92e93dfd88199e8d877746b6c260af","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"8b72d2a8665d545aae43b317a20f51af80357b290e826822309d9a1dc67a4470","other":"e9bcffd8355af43dfe4ec4415e77a92f6f6897f9c6bc78f31281346cd460cd34","up":true},{"one":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","other":"46599aa9671556263a5e5818575b8a12e7c755a44f9dac7873c1c48f33c1465e","up":true},{"one":"58ebac47c884e77049a6c9c851ffb1e74622d27be8e30117f1f775391ac27717","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"fbe2f731b4bcdbf8490ba7599a011f561ec6a46c95bc9a34effaf29c91085c09","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true},{"one":"f1e3713691f9088c72295658b7e887d83058c668495830c63c0241716c9cae80","other":"8939636008ec2eec222bd490ab86b42f9ef1fee7e41a32c70deb676920c3454a","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"c3863946fb7d43a75cbe2503fa301a4a20cf65caac1dfcbe5fafa2d873a5c6e5","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"c6b69d856ec8ac1822b4a1d54f8d3bc44831bcd20fbb5c8f8c67b68b33541fe9","up":true},{"one":"0b07a13f12316594013fb220a14910c9aec9446274b6e9f89da3bf1f5732624b","other":"3a268a0db7e8b31d4b362ecb598f3e549a2aa59392591b4d2f2ba37e6ceb72b3","up":true},{"one":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","other":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","up":true},{"one":"0688bd16330526285a532b2ee34a92075487d93938e2789e324ccb583af7956a","other":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","up":true},{"one":"211b73ccd445df519b8afabb07b3b590f3594f01715abca8f9cc7fade33f75ba","other":"7f25ae980b4aeac041d8bd17a8a4140f762aca78710cfd2fb41f8d91d713e4df","up":true},{"one":"55b8a5f2d199cc115b9d0978458444983137888591b0e91016cc2f75ce593a41","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"175e3bbbfc70b443adf887386485a4c0171df26edaf7b44c32e430fc37b830d3","other":"02f7b6240d3c3990559d296355bb86f40162fee7a45c2e092eb90277266ecbd8","up":true},{"one":"5e883de2318b4355140edb00a60db79ddc16e0dabec47cd34e2a2b175e198711","other":"41de70b44e7b0b0670d42f0ae348bc6501cef8b4174a6c6d9986645cd5e47aaf","up":true},{"one":"de8f114621b53a5a68dfc1870600c60bf9912ad4d36458e52606ab27a6d7c3fa","other":"8564a53752aa3e7edb8e09c3ad61b765ce5abd2ad9c5cb63bfa036930d6de244","up":true},{"one":"dcf5d113ddf39e516a3871a31843da3cd7740daa2a8f4827265a3d9bfaa3b402","other":"cd92d92973dc25f623e4492a165f8a8b043e9dd959ca498aa7c6e82ec8038d54","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_4.json b/swarm/pss/testdata/snapshot_4.json deleted file mode 100644 index a64f31375ae1..000000000000 --- a/swarm/pss/testdata/snapshot_4.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["bzz","pss"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_64.json b/swarm/pss/testdata/snapshot_64.json deleted file mode 100644 index d8031614e93b..000000000000 --- a/swarm/pss/testdata/snapshot_64.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","private_key":"8f572fa1cb0643b3413cd0dfceac00a4dac9ec09af0c2d134809b6385dad35d7","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","private_key":"a66e079664952b1fb1028e959dd8a05a21477e2f298ea89592adc522d38e511b","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","private_key":"072e1cf99b52c2f1d40560809048fea86f39ae1db94bec2c9b71b0bfe092910a","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","private_key":"003ec9cb18f157360d7a3eb506b37ec69dbbd141bbeb7b8fae5f470b1a0768db","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","private_key":"fd6fc50368fbc7e848635726291264cf6ad682fb4fe785b724c8b22ea31e1e24","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","private_key":"da156f269cb01e7fbea5efd5f7ab6283ef0994a1ca139768f49c68e027ca76b0","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","private_key":"ae570046bebe22a2cd095ca2b2282cab29b2501c6f217ae3e19d96bace36c199","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","private_key":"dee3b946981d4b7bd055941cd6722b166efc24f28f6b26da9cd52a8f91f3a411","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","private_key":"b7e566b24a7c97f714c9920c4e426dd462ee171bb8fd91a3efee9bd1d28dd060","name":"node09","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","private_key":"070b030d06605c46eafadabb979d38f9d4f48cf55e24a96378f4f0bbe2806887","name":"node10","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","private_key":"4ad1a65bb55e2f6d41cc3383b1de11c79bab13723c02d4f5abaf725d6aaea3e4","name":"node11","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","private_key":"bbe3351a79ad82f8b832dc16567dd1bcc24b1897bc9bfec930f3461a61f7d652","name":"node12","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","private_key":"26e548a577ae1fcc718256e75d48d70ed406dda8798f84c967d7dfe45c6aceb5","name":"node13","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","private_key":"97ca855261319532dfa74bf6194b4302c3d2f971adbd462e3437408df6dcbe47","name":"node14","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","private_key":"a762e1b25bed356f9a9e3aed01c7a38e8f57441b6caa18874712ef1159616b57","name":"node15","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","private_key":"53407f7862d16cdfd7beb23612d5d57dda1963cf729766feb046966e15850b32","name":"node16","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","private_key":"f3ffbcce6a7f7bfe25c3ab3ba95dd0574944bb5a09eabda3da69f187c48ea747","name":"node17","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","private_key":"0fc26e702e6bf4755536ef14b178df72099f9d2e818b53ce85f5b5ff3ea6c9c8","name":"node18","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","private_key":"6f1be181439476148e13cd2c39dd8983588047ef5f966091688ce37a01f78441","name":"node19","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","private_key":"b2732f7493e1101eb17248f6a6d83b5811c49cfc13f1aa41a624d1bb3e85368f","name":"node20","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","private_key":"b573a79bddda3cee3997d5c1210e33810dfce4f43a9a47d3f41ad02352d0515e","name":"node21","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","private_key":"3e8547c0320dad0457a7c6d576c1700ac4af59504cae9178faafcd60c9830e99","name":"node22","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","private_key":"dcee5e2db10836dcd5e3bbe14845a6203eebb791ae82200732e6b21d453e0642","name":"node23","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","private_key":"e895b2d5bfbd538d231463563cec8889c8aef0fbeb77acfd3ab9bb75504d39cd","name":"node24","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","private_key":"199b03688e42fbdcdd00b6230f59bf7a0b6ac22f6088c7d398535121f867b30a","name":"node25","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","private_key":"04a50f62b3bd30de9b6a4ca7c72d0fe81f6c111ab99bbbf4bb9c21b6c8983639","name":"node26","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","private_key":"dee1658338c1840984753b1121833d17232db7a62a8ed1b4fc1268e99138385e","name":"node27","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","private_key":"9fa3a527ec0ce68f936c2dadcc080238cfd5a3a462c20462567976eaf1d52810","name":"node28","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","private_key":"26df6d28e33e4da3390df260d9bbad739c31cc494a632239633485872b1ead29","name":"node29","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","private_key":"d7549640c8223b3b3e55195e3b519a85b7af1f1fc26ebbd56c9117a639544593","name":"node30","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","private_key":"16ea03e396aba3e56e9e2d89e53b68e46e51408b090fe2b99e65591ae6cd02c0","name":"node31","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","private_key":"2f111d17fef6870e109950bfd76e7e6db0913a06d14f8f5a311a39f447e65aea","name":"node32","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","private_key":"b20e729862ae141e3134c9eb2ed703957c0fd006f041df213946d66bfe06a3a7","name":"node33","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","private_key":"d35682e43d6382cb9508e5479fc2d09bec82166746bd406cc249f655715ae986","name":"node34","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","private_key":"9d7b2568317659ec35ed53c64f5c1aa0813dde36f1f492139ffefdd91ae0717e","name":"node35","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","private_key":"1177e7fa4a1e785fc30996682cf9ecd265d86943f65d7e3cf4c25cefcd861479","name":"node36","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","private_key":"29e2a9ddf2c5b8914fcf8d3782d464b0be6252d589b2a7daa1ea6b93b205c4f4","name":"node37","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","private_key":"de7a36b57175c1b9dd9686884f73048ea29215a01fdee9f2cf5068218efdc9d6","name":"node38","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","private_key":"209fa24e0d0a335e74967ae3ca2914ea6fb1ac99b9495820e9680855fab3081f","name":"node39","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","private_key":"225e538725db916b0e7be129cbda4da08e6be4ccaef64cf870551466d2658834","name":"node40","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","private_key":"1cf5c454ae9746fb367557d4f4a4a9d22157508dd1b19223b4640a3fa9c1dce8","name":"node41","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","private_key":"e4f81e7a844611f55194d22f62b681f479dadd58596a292cbbf6ef794df1c99a","name":"node42","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","private_key":"cfea4812067444b8816b5d70ed03fe5491d28ca6012a871bcb8aebbd100f9489","name":"node43","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","private_key":"384043ea1944918b9fac6bbbd88341254533ae49e3b2ce16c1df0941b1118303","name":"node44","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","private_key":"2de5004aa7337bd0819c88121cb0e708bc072c153bf94e274d7e786288996630","name":"node45","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","private_key":"aeb73b9ba035e0d3569e9dd5780dea2994151e2b43cb74e0e297fa285ba3d794","name":"node46","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","private_key":"6f192dda3ba98c5d13e94cc2e64ed95478ee64e97b230f224237977bf04cd724","name":"node47","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","private_key":"5c3a125bd1eca6243b28fcbd20a0811d7e09ce602ca98ba5f253435d76e0e4a9","name":"node48","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","private_key":"e4c7dec3dd327bfaa41b91fb8ccdbb96156d1fe464da973445a35f61e5bc6814","name":"node49","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","private_key":"07853d60907494e01f54f879c85c5f3fec6d4d615f9553d12b3da9ea1ad7a4ec","name":"node50","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","private_key":"6de081218acdb9ac4c4b8fbf1fde5f2be3c601cbf9104c970de43c2512c5e4c3","name":"node51","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","private_key":"7b7cb0ca071a27ee059bda50862b7fed343122d2546f5ac5a49dd5b47910530a","name":"node52","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","private_key":"542108cf09fe9447bb772d25802153811dd504943271556789165c6742636520","name":"node53","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","private_key":"87ab72e1c606a3b799ef3f34d3aa14549953c570f569a7b7952bb8f460b05a56","name":"node54","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","private_key":"a568b1f02f9c9129fd2924f704b8948351325edea81e43132c857be97dc7216d","name":"node55","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","private_key":"885083158aab574e1ab94645ea978b0e98a06605b1cbbfc48450f46522476b22","name":"node56","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","private_key":"5ee85ab61759ce457c89801346b14f68f1f16d6c59b2c034a2aef87242488041","name":"node57","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","private_key":"0bc8227f073c115b1ecd2add3e0ce8f58974528279de040eeaf189abfa6bc506","name":"node58","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","private_key":"a548a32f98cf950d6811b01fd764cd17b51d7012b18e944b3bb90dc660e35817","name":"node59","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","private_key":"55c9fd7b7ce7d50376a51050ac0a0a61b4657f9392ad14509bf432758a02b102","name":"node60","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","private_key":"daa4e758bca88df487bb1bcd41e59643256d23f237f96d654010801c07240435","name":"node61","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","private_key":"0090eced227d4fcb0e639349e4164040aa3c9d858531c2df416023c416753a5d","name":"node62","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","private_key":"96f0c30375428cd6184d43806adfbc9a4600e0180b50afa6ce06bfb1581cf1e0","name":"node63","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","private_key":"4738e28b9e3f0920f9c89ac195862299c670e5b354e5bbd644395336a446166f","name":"node64","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","up":true},{"one":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","other":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"9bb12f66006f3347790c2c4e74e5463fd6ab651768296ee41de51757b9f40b89","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","other":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"74117e299fffce1ef7f323ea1d6fb1c509cd5581f6c53e0f5e9af8d0b83748f2","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"7f4198ddcfb55e9f690024cc19ce4f32d5bbc8d56cfb43f806513a74e52dc277","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","up":true},{"one":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"cec77f188351d24d5067de2e0cc57b48a9a5455d78bda6b7632d14a679070c3d","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"292bb75a5407dda2ad7b642b1b790264e7ce16bbd8cd22e512eeec3d600ea520","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","up":true},{"one":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","up":true},{"one":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"b52335dfb9367471204dfba231ba274815b859164e19ee872e20326d0575b88a","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"0f5c44c74d4cc9b10d283a0099fba5f925c3455f5308d2044c377f8a5181703a","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"3bc8d405359a665d3f6d64cf9ba194b7e614c2050add0a1205be7f6c3c984e1d","up":true},{"one":"0b45cb8af78fb1af7ab55d022ed00da66393b7eea1b7a3a2f802ffeba4c79dd3","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"ab1c8bbfea9434576e15465cfbd66e8c6565345d83e248d6fcd3748e82806c95","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","up":true},{"one":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"8c5f07bdc96c7bbd8fc7bcf5e3ba841cabfc47f910acbf416730f5e67f847b34","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"e75238135f0c071ca541fb0a9569e38036c51af350a16bf4a1526f1752318059","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e0463c87b0b7deefbd521721430e0fd24683aa8b41c65f259d678d9844bd800f","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cf69e5f8effee000dc16109a7e0d04e4e13aeb2f6c089999e555946a46e548f6","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"9e9451cb84ec10881e16a87d84b0e4e1aa78f5e9bc49ca5244a3da414b5210da","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5e64f329525e17129b3f51580b399a5f09d7652a663bbaac83c8173dd9fded41","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"39e710327f4176b5ed7ebc921db592a6b9197b237029faab4525a00d18470e8a","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"7fe48790180ab38e7687009847285f7af5e73b21b60cfad9d844ba8b2e7576e4","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"6a5cd611a5a8a94c82d6d3b40912909f326d4111c82983c3f719cfa3f621312f","other":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","up":true},{"one":"cee0b72bcb0a112c9aa33eb80166d279c2cc0216782a19454a086c0147b8126d","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"1f17c9223987ccf4d9683df0664cd568164c69d2f62bad2a79ef4636623ba87a","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"aa655b48b225d692184a21a2f7162950851a914f89671cc1af3e87a21b37c5e3","up":true},{"one":"5c197e623ab40c0de2c83a4ffd16930cf791e60357f162f5b2a2e865ff0cea73","other":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"34ad9431b71cdeae0c1941b3ae680387b3cedd815f39d65034892920aa869f38","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"e45d7b4870acb8a984c065cce7bd17acaf79c5ad4d477f810563315aebacd8e3","up":true},{"one":"2597463214ea0faa3db781fa8cb336da59aff43553f045a0f704ab10f5f54cf2","other":"0f988a170fdc7761b8d9814a1a7ac0cc0e98483b91841046b9948783befeed88","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","other":"903561af2459b0e46d8188121e66d8b999ad39341944eb099eff70213244c813","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","up":true},{"one":"6b336cfff0d431edce4cee0cf35ffb1e50b7a5c6e15d3d816fb1bb1cf6488f22","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"9e384d8e6d319016c2807884e0b46da4ce9fcb426efb76224ce41b5d4dae5632","other":"88b4c3d6ae6a1d4c39caef84d56f308b58e2ca0477cc5197f3f5be41c890bd7c","up":true},{"one":"b45f23d6ac8824b480f71f25abf5aa2c9db4c3a904660d391768168430355827","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"647ccb25b23a917f611a46a72b12fd457610f07143155e1f828b41fd2d3e0b58","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"cfc872fe7f213f4ada5ec413037450ae2b141157c83998b9520ac2ddb51707bd","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"e0205da225e77fa15332864eaef1c437be306090b0489faf3f6725cb3c5b4712","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","up":true},{"one":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","other":"461c7f8f8948693dea717679ffc4bbf0eb573f4597543993e3be39d3594fdd47","up":true},{"one":"5a4fa4f4482dbaf7bbe6c3d2ae28c35187fbd0f00d1293be41719aa8e5e4a388","other":"6d29dbed992f0f0008a72978045df08a4ae1753571fdefbb676f52b5ff843433","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5fd664467fac65594c3dd6f89bf2a5398e28aa95d248c3a3d21abaecfebfde5d","up":true},{"one":"66d586d2f06e0b26d051d3fed949bf8f36ca3ba4c64b8230987ae0c7d29c2dfd","other":"71fe0f225ee23106cb6d6c57cdeb49ecc4ffb2b13441956eca6d94505aa2a72c","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"85d645e3738c441f508671f52cde0aa7ae2032c082c86b7ca6af92598d7174d5","up":true},{"one":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"9045e912dc0acaf9d86ec75d98e93bc90832dbca1119641f8569a98040be940c","other":"80d0a541f041fbab580164228d09af6be9e3beec5301e998398231362298835e","up":true},{"one":"cc708e47196a6435b13b18f213f50bf075f3f97100d52d18d70052efc301c91a","other":"b2a236a2acf5cf675c521a3e87ef847933e1736c220a54cf66db4ba03f369483","up":true},{"one":"bece4d99fafdcebd22f03a4640026c55f7155ff814b295a2aec7a98d3973595a","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"b04c7f907691ac51adab6fe657dd4592044ca4222ee60eb86c7851c855057a8e","other":"a416fa852bb425e00b805ffabb525ae45024403685a0e8a67815617fd1d078da","up":true},{"one":"bd5b11dfb3bf903c4cb8ce44756e41fefb5582deb79055ccc65fe7b47b2a1a41","other":"a365bf427dc109429657033f4b7b22575b6a8d955d6eaf44288725e5e47b0a86","up":true},{"one":"f0517f6a1187d0f454aaf98506fdc830e14d31259fbf195f1694078dcaa5582f","other":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","up":true},{"one":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","other":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","up":true},{"one":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","other":"eebe8082b0f6efbade062eb49f2592519524a8c3f22975ba901ed9755a9d0ead","up":true},{"one":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"113d7850e8169761d357e0ad5a262560fe6137fc6a992b3b2cedcebbe5d5f6a2","up":true},{"one":"4ff286f9e1f7d2d0a8e14a5547e03580d67dbedd1e2ca0c88ad01a2e56c0f45c","other":"5205bbd1c298864045f08fe7cc4c2409055db3ee4d790d2587c9ca3366acd977","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"1102d287c72becf1bfa8567cf43cc2051aed16a79196f9109cdedf829a2a5a2d","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"c85b39668486c5eb3ea9f312d9897bda5688c4995318e4e64a0be2ac0cb47692","up":true},{"one":"d79a1e6f3dc0e3382eaccdc1fb0f49cd66f483addcc52d767fc12f4b6754e206","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true},{"one":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","other":"2218170def9962d400bf932ced91f3c14595062b50ef86eb4d2f7fd384fc8597","up":true},{"one":"cab41b44229682f11d6aca3d3136597524e9eb4e1640147b87f3f8c7227959f1","other":"f3a57f887ddcf1793207948374ce67da9f6a1227f253e3a90acc5b36a48ee645","up":true},{"one":"df45befed47eec3248ce3b55e9cc56f8d718fc13dcb1a03755cdc0cda89e4dcb","other":"c0d6b4950771888e9770051d341f2071fecdb09e28c289e251668327eb8ccf66","up":true}]} \ No newline at end of file diff --git a/swarm/pss/testdata/snapshot_8.json b/swarm/pss/testdata/snapshot_8.json deleted file mode 100644 index 307afe5a137b..000000000000 --- a/swarm/pss/testdata/snapshot_8.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"node":{"config":{"id":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","private_key":"e567b7d9c554e5102cdc99b6523bace02dbb8951415c8816d82ba2d2e97fa23b","name":"node01","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","private_key":"c7526db70acd02f36d3b201ef3e1d85e38c52bee6931453213dbc5edec4d0976","name":"node02","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","private_key":"61b5728f59bc43080c3b8eb0458fb30d7723e2747355b6dc980f35f3ed431199","name":"node03","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","private_key":"075b07c29ceac4ffa2a114afd67b21dfc438126bc169bf7c154be6d81d86ed38","name":"node04","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","private_key":"4882fdd34676c2158f7bfc761bf824fcf693736a8df294cc7e79ef1848c7bae6","name":"node05","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","private_key":"0470652ac57af40a43bc67b1b49699219fc35a805da167244f505d27858334c7","name":"node06","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","private_key":"2cbf6256e92736e1b54279b79addbb830a607a71488cdd3462a44fcaa68c018e","name":"node07","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}},{"node":{"config":{"id":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","private_key":"e659774a5ff4f76b021bf4884ad359eadeb8ff33e843a3f76fcf4a38b0d82b35","name":"node08","services":["pss","bzz"],"enable_msg_events":false,"port":0},"up":true}}],"conns":[{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","up":true},{"one":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","up":true},{"one":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","other":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","up":true},{"one":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","other":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","up":true},{"one":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true},{"one":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","other":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","up":true},{"one":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","other":"d7768334f79d626adb433f44b703a818555e3331056036ef3f8d1282586bf044","up":true},{"one":"8a1eb78ff13df318e7f8116dffee98cd7d9905650fa53f16766b754a63f387ac","other":"dfd47d54492eac09708641a7115b1fda328e2dd8f75ced9026212d3699722f94","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"73d6ad4a75069dced660fa4cb98143ee5573df7cb15d9a295acf1655e9683384","other":"05dacbe069e452448fb7bee09b8270a0218089a6d441c461fc45d338d2b59492","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"159c0bdb3c1638e66de52ec0c476282eb5a7b1fcf763dc33b938c5381ef5a149","up":true},{"one":"6e8da86abb894ab35044c8c455147225df96cab498da067a118f1fb9a417f9e3","other":"3451df808a9e122ebbc6306f159ae90ccd34e5ef3e0457c501f54ac08457238a","up":true}]} \ No newline at end of file diff --git a/swarm/pss/types.go b/swarm/pss/types.go deleted file mode 100644 index 2ce1f5cfb06e..000000000000 --- a/swarm/pss/types.go +++ /dev/null @@ -1,217 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package pss - -import ( - "encoding/json" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/storage" - whisper "github.com/ethereum/go-ethereum/whisper/whisperv6" -) - -const ( - defaultWhisperTTL = 6000 -) - -const ( - pssControlSym = 1 - pssControlRaw = 1 << 1 -) - -var ( - topicHashMutex = sync.Mutex{} - topicHashFunc = storage.MakeHashFunc("SHA256")() - rawTopic = Topic{} -) - -// Topic is the PSS encapsulation of the Whisper topic type -type Topic whisper.TopicType - -func (t *Topic) String() string { - return hexutil.Encode(t[:]) -} - -// MarshalJSON implements the json.Marshaler interface -func (t Topic) MarshalJSON() (b []byte, err error) { - return json.Marshal(t.String()) -} - -// MarshalJSON implements the json.Marshaler interface -func (t *Topic) UnmarshalJSON(input []byte) error { - topicbytes, err := hexutil.Decode(string(input[1 : len(input)-1])) - if err != nil { - return err - } - copy(t[:], topicbytes) - return nil -} - -// PssAddress is an alias for []byte. It represents a variable length address -type PssAddress []byte - -// MarshalJSON implements the json.Marshaler interface -func (a PssAddress) MarshalJSON() ([]byte, error) { - return json.Marshal(hexutil.Encode(a[:])) -} - -// UnmarshalJSON implements the json.Marshaler interface -func (a *PssAddress) UnmarshalJSON(input []byte) error { - b, err := hexutil.Decode(string(input[1 : len(input)-1])) - if err != nil { - return err - } - for _, bb := range b { - *a = append(*a, bb) - } - return nil -} - -// holds the digest of a message used for caching -type pssDigest [digestLength]byte - -// conceals bitwise operations on the control flags byte -type msgParams struct { - raw bool - sym bool -} - -func newMsgParamsFromBytes(paramBytes []byte) *msgParams { - if len(paramBytes) != 1 { - return nil - } - return &msgParams{ - raw: paramBytes[0]&pssControlRaw > 0, - sym: paramBytes[0]&pssControlSym > 0, - } -} - -func (m *msgParams) Bytes() (paramBytes []byte) { - var b byte - if m.raw { - b |= pssControlRaw - } - if m.sym { - b |= pssControlSym - } - paramBytes = append(paramBytes, b) - return paramBytes -} - -// PssMsg encapsulates messages transported over pss. -type PssMsg struct { - To []byte - Control []byte - Expire uint32 - Payload *whisper.Envelope -} - -func newPssMsg(param *msgParams) *PssMsg { - return &PssMsg{ - Control: param.Bytes(), - } -} - -// message is flagged as raw / external encryption -func (msg *PssMsg) isRaw() bool { - return msg.Control[0]&pssControlRaw > 0 -} - -// message is flagged as symmetrically encrypted -func (msg *PssMsg) isSym() bool { - return msg.Control[0]&pssControlSym > 0 -} - -// serializes the message for use in cache -func (msg *PssMsg) serialize() []byte { - rlpdata, _ := rlp.EncodeToBytes(struct { - To []byte - Payload *whisper.Envelope - }{ - To: msg.To, - Payload: msg.Payload, - }) - return rlpdata -} - -// String representation of PssMsg -func (msg *PssMsg) String() string { - return fmt.Sprintf("PssMsg: Recipient: %x", common.ToHex(msg.To)) -} - -// Signature for a message handler function for a PssMsg -// Implementations of this type are passed to Pss.Register together with a topic, -type HandlerFunc func(msg []byte, p *p2p.Peer, asymmetric bool, keyid string) error - -type handlerCaps struct { - raw bool - prox bool -} - -// Handler defines code to be executed upon reception of content. -type handler struct { - f HandlerFunc - caps *handlerCaps -} - -// NewHandler returns a new message handler -func NewHandler(f HandlerFunc) *handler { - return &handler{ - f: f, - caps: &handlerCaps{}, - } -} - -// WithRaw is a chainable method that allows raw messages to be handled. -func (h *handler) WithRaw() *handler { - h.caps.raw = true - return h -} - -// WithProxBin is a chainable method that allows sending messages with full addresses to neighbourhoods using the kademlia depth as reference -func (h *handler) WithProxBin() *handler { - h.caps.prox = true - return h -} - -// the stateStore handles saving and loading PSS peers and their corresponding keys -// it is currently unimplemented -type stateStore struct { - values map[string][]byte -} - -func (store *stateStore) Load(key string) ([]byte, error) { - return nil, nil -} - -func (store *stateStore) Save(key string, v []byte) error { - return nil -} - -// BytesToTopic hashes an arbitrary length byte slice and truncates it to the length of a topic, using only the first bytes of the digest -func BytesToTopic(b []byte) Topic { - topicHashMutex.Lock() - defer topicHashMutex.Unlock() - topicHashFunc.Reset() - topicHashFunc.Write(b) - return Topic(whisper.BytesToTopic(topicHashFunc.Sum(nil))) -} diff --git a/swarm/pss/writeup.md b/swarm/pss/writeup.md deleted file mode 100644 index af731fe7fdbb..000000000000 --- a/swarm/pss/writeup.md +++ /dev/null @@ -1,125 +0,0 @@ -## PSS tests failures explanation - -This document aims to explain the changes in https://github.com/ethersphere/go-ethereum/pull/126 and how those changes affect the pss_test.go TestNetwork tests. - -### Problem - -When running the TestNetwork test, execution sometimes: - -* deadlocks -* panics -* failures with wrong result, such as: - -``` -$ go test -v ./swarm/pss -cpu 4 -run TestNetwork -``` - -``` ---- FAIL: TestNetwork (68.13s) - --- FAIL: TestNetwork/3/10/4/sim (68.13s) - pss_test.go:697: 7 of 10 messages received - pss_test.go:700: 3 messages were not received -FAIL -``` - -Moreover execution almost always deadlocks with `sim` adapter, and `sock` adapter (when buffer is low), but is mostly stable with `exec` and `tcp` adapters. - -### Findings and Fixes - -#### 1. Addressing panics - -Panics were caused due to concurrent map read/writes and unsynchronised access to shared memory by multiple goroutines. This is visible when running the test with the `-race` flag. - -``` -go test -race -v ./swarm/pss -cpu 4 -run TestNetwork - - 1 ================== - 2 WARNING: DATA RACE - 3 Read at 0x00c424d456a0 by goroutine 1089: - 4 github.com/ethereum/go-ethereum/swarm/pss.(*Pss).forward.func1() - 5 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/swarm/pss/pss.go:654 +0x44f - 6 github.com/ethereum/go-ethereum/swarm/network.(*Kademlia).eachConn.func1() - 7 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/swarm/network/kademlia.go:350 +0xc9 - 8 github.com/ethereum/go-ethereum/pot.(*Pot).eachNeighbour.func1() - 9 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/pot/pot.go:599 +0x59 - ... - - 28 - 29 Previous write at 0x00c424d456a0 by goroutine 829: - 30 github.com/ethereum/go-ethereum/swarm/pss.(*Pss).Run() - 31 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/swarm/pss/pss.go:192 +0x16a - 32 github.com/ethereum/go-ethereum/swarm/pss.(*Pss).Run-fm() - 33 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/swarm/pss/pss.go:185 +0x63 - 34 github.com/ethereum/go-ethereum/p2p.(*Peer).startProtocols.func1() - 35 /Users/nonsense/code/src/github.com/ethereum/go-ethereum/p2p/peer.go:347 +0x8b - ... -``` - -##### Current solution - -Adding a mutex around all shared data. - -#### 2. Failures with wrong result - -The validation phase of the TestNetwork test is done using an RPC subscription: - -``` - ... - triggerChecks := func(trigger chan enode.ID, id enode.ID, rpcclient *rpc.Client) error { - msgC := make(chan APIMsg) - ctx, cancel := context.WithTimeout(context.Background(), time.Second) - defer cancel() - sub, err := rpcclient.Subscribe(ctx, "pss", msgC, "receive", hextopic) - ... -``` - -By design the RPC uses a subscription buffer with a max length. When this length is reached, the subscription is dropped. The current config value is not suitable for stress tests. - -##### Current solution - -Increase the max length of the RPC subscription buffer. - -``` -const ( - // Subscriptions are removed when the subscriber cannot keep up. - // - // This can be worked around by supplying a channel with sufficiently sized buffer, - // but this can be inconvenient and hard to explain in the docs. Another issue with - // buffered channels is that the buffer is static even though it might not be needed - // most of the time. - // - // The approach taken here is to maintain a per-subscription linked list buffer - // shrinks on demand. If the buffer reaches the size below, the subscription is - // dropped. - maxClientSubscriptionBuffer = 20000 -) -``` - -#### 3. Deadlocks - -Deadlocks are triggered when using: -* `sim` adapter - synchronous, unbuffered channel -* `sock` adapter - asynchronous, buffered channel (when using a 1K buffer) - -No deadlocks were triggered when using: -* `tcp` adapter - asynchronous, buffered channel -* `exec` adapter - asynchronous, buffered channel - -Ultimately the deadlocks happen due to blocking `pp.Send()` call at: - - // attempt to send the message - err := pp.Send(msg) - if err != nil { - log.Debug(fmt.Sprintf("%v: failed forwarding: %v", sendMsg, err)) - return true - } - - `p2p` request handling is synchronous (as discussed at https://github.com/ethersphere/go-ethereum/issues/130), `pss` is also synchronous, therefore if two nodes happen to be processing a request, while at the same time waiting for response on `pp.Send(msg)`, deadlock occurs. - - `pp.Send(msg)` is only blocking when the underlying adapter is blocking (read `sim` or `sock`) or the buffer of the connection is full. - -##### Current solution - -Make no assumption on the undelying connection, and call `pp.Send` asynchronously in a go-routine. - -Alternatively, get rid of the `sim` and `sock` adapters, and use `tcp` adapter for testing. diff --git a/swarm/sctx/sctx.go b/swarm/sctx/sctx.go deleted file mode 100644 index fb7d35b0005b..000000000000 --- a/swarm/sctx/sctx.go +++ /dev/null @@ -1,20 +0,0 @@ -package sctx - -import "context" - -type ( - HTTPRequestIDKey struct{} - requestHostKey struct{} -) - -func SetHost(ctx context.Context, domain string) context.Context { - return context.WithValue(ctx, requestHostKey{}, domain) -} - -func GetHost(ctx context.Context) string { - v, ok := ctx.Value(requestHostKey{}).(string) - if ok { - return v - } - return "" -} diff --git a/swarm/services/swap/swap.go b/swarm/services/swap/swap.go deleted file mode 100644 index 91fa54fcf034..000000000000 --- a/swarm/services/swap/swap.go +++ /dev/null @@ -1,301 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swap - -import ( - "context" - "crypto/ecdsa" - "errors" - "fmt" - "math/big" - "os" - "path/filepath" - "sync" - "time" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/chequebook" - "github.com/ethereum/go-ethereum/contracts/chequebook/contract" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/services/swap/swap" -) - -// SwAP Swarm Accounting Protocol with -// SWAP^2 Strategies of Withholding Automatic Payments -// SWAP^3 Accreditation: payment via credit SWAP -// using chequebook pkg for delayed payments -// default parameters - -var ( - autoCashInterval = 300 * time.Second // default interval for autocash - autoCashThreshold = big.NewInt(50000000000000) // threshold that triggers autocash (wei) - autoDepositInterval = 300 * time.Second // default interval for autocash - autoDepositThreshold = big.NewInt(50000000000000) // threshold that triggers autodeposit (wei) - autoDepositBuffer = big.NewInt(100000000000000) // buffer that is surplus for fork protection etc (wei) - buyAt = big.NewInt(20000000000) // maximum chunk price host is willing to pay (wei) - sellAt = big.NewInt(20000000000) // minimum chunk price host requires (wei) - payAt = 100 // threshold that triggers payment {request} (units) - dropAt = 10000 // threshold that triggers disconnect (units) -) - -const ( - chequebookDeployRetries = 5 - chequebookDeployDelay = 1 * time.Second // delay between retries -) - -// LocalProfile combines a PayProfile with *swap.Params -type LocalProfile struct { - *swap.Params - *PayProfile -} - -// RemoteProfile combines a PayProfile with *swap.Profile -type RemoteProfile struct { - *swap.Profile - *PayProfile -} - -// PayProfile is a container for relevant chequebook and beneficiary options -type PayProfile struct { - PublicKey string // check against signature of promise - Contract common.Address // address of chequebook contract - Beneficiary common.Address // recipient address for swarm sales revenue - privateKey *ecdsa.PrivateKey - publicKey *ecdsa.PublicKey - owner common.Address - chbook *chequebook.Chequebook - lock sync.RWMutex -} - -// NewDefaultSwapParams create params with default values -func NewDefaultSwapParams() *LocalProfile { - return &LocalProfile{ - PayProfile: &PayProfile{}, - Params: &swap.Params{ - Profile: &swap.Profile{ - BuyAt: buyAt, - SellAt: sellAt, - PayAt: uint(payAt), - DropAt: uint(dropAt), - }, - Strategy: &swap.Strategy{ - AutoCashInterval: autoCashInterval, - AutoCashThreshold: autoCashThreshold, - AutoDepositInterval: autoDepositInterval, - AutoDepositThreshold: autoDepositThreshold, - AutoDepositBuffer: autoDepositBuffer, - }, - }, - } -} - -// Init this can only finally be set after all config options (file, cmd line, env vars) -// have been evaluated -func (lp *LocalProfile) Init(contract common.Address, prvkey *ecdsa.PrivateKey) { - pubkey := &prvkey.PublicKey - - lp.PayProfile = &PayProfile{ - PublicKey: common.ToHex(crypto.FromECDSAPub(pubkey)), - Contract: contract, - Beneficiary: crypto.PubkeyToAddress(*pubkey), - privateKey: prvkey, - publicKey: pubkey, - owner: crypto.PubkeyToAddress(*pubkey), - } -} - -// NewSwap constructor, parameters -// * global chequebook, assume deployed service and -// * the balance is at buffer. -// swap.Add(n) called in netstore -// n > 0 called when sending chunks = receiving retrieve requests -// OR sending cheques. -// n < 0 called when receiving chunks = receiving delivery responses -// OR receiving cheques. -func NewSwap(localProfile *LocalProfile, remoteProfile *RemoteProfile, backend chequebook.Backend, proto swap.Protocol) (swapInstance *swap.Swap, err error) { - var ( - ctx = context.TODO() - ok bool - in *chequebook.Inbox - out *chequebook.Outbox - ) - - remotekey, err := crypto.UnmarshalPubkey(common.FromHex(remoteProfile.PublicKey)) - if err != nil { - return nil, errors.New("invalid remote public key") - } - - // check if remoteProfile chequebook is valid - // insolvent chequebooks suicide so will signal as invalid - // TODO: monitoring a chequebooks events - ok, err = chequebook.ValidateCode(ctx, backend, remoteProfile.Contract) - if !ok { - log.Info(fmt.Sprintf("invalid contract %v for peer %v: %v)", remoteProfile.Contract.Hex()[:8], proto, err)) - } else { - // remoteProfile contract valid, create inbox - in, err = chequebook.NewInbox(localProfile.privateKey, remoteProfile.Contract, localProfile.Beneficiary, remotekey, backend) - if err != nil { - log.Warn(fmt.Sprintf("unable to set up inbox for chequebook contract %v for peer %v: %v)", remoteProfile.Contract.Hex()[:8], proto, err)) - } - } - - // check if localProfile chequebook contract is valid - ok, err = chequebook.ValidateCode(ctx, backend, localProfile.Contract) - if !ok { - log.Warn(fmt.Sprintf("unable to set up outbox for peer %v: chequebook contract (owner: %v): %v)", proto, localProfile.owner.Hex(), err)) - } else { - out = chequebook.NewOutbox(localProfile.Chequebook(), remoteProfile.Beneficiary) - } - - pm := swap.Payment{ - In: in, - Out: out, - Buys: out != nil, - Sells: in != nil, - } - swapInstance, err = swap.New(localProfile.Params, pm, proto) - if err != nil { - return - } - // remoteProfile profile given (first) in handshake - swapInstance.SetRemote(remoteProfile.Profile) - var buy, sell string - if swapInstance.Buys { - buy = "purchase from peer enabled at " + remoteProfile.SellAt.String() + " wei/chunk" - } else { - buy = "purchase from peer disabled" - } - if swapInstance.Sells { - sell = "selling to peer enabled at " + localProfile.SellAt.String() + " wei/chunk" - } else { - sell = "selling to peer disabled" - } - log.Warn(fmt.Sprintf("SWAP arrangement with <%v>: %v; %v)", proto, buy, sell)) - - return -} - -// Chequebook get's chequebook from the localProfile -func (lp *LocalProfile) Chequebook() *chequebook.Chequebook { - defer lp.lock.Unlock() - lp.lock.Lock() - return lp.chbook -} - -// PrivateKey accessor -func (lp *LocalProfile) PrivateKey() *ecdsa.PrivateKey { - return lp.privateKey -} - -// func (self *LocalProfile) PublicKey() *ecdsa.PublicKey { -// return self.publicKey -// } - -// SetKey set's private and public key on localProfile -func (lp *LocalProfile) SetKey(prvkey *ecdsa.PrivateKey) { - lp.privateKey = prvkey - lp.publicKey = &prvkey.PublicKey -} - -// SetChequebook wraps the chequebook initialiser and sets up autoDeposit to cover spending. -func (lp *LocalProfile) SetChequebook(ctx context.Context, backend chequebook.Backend, path string) error { - lp.lock.Lock() - swapContract := lp.Contract - lp.lock.Unlock() - - valid, err := chequebook.ValidateCode(ctx, backend, swapContract) - if err != nil { - return err - } else if valid { - return lp.newChequebookFromContract(path, backend) - } - return lp.deployChequebook(ctx, backend, path) -} - -// deployChequebook deploys the localProfile Chequebook -func (lp *LocalProfile) deployChequebook(ctx context.Context, backend chequebook.Backend, path string) error { - opts := bind.NewKeyedTransactor(lp.privateKey) - opts.Value = lp.AutoDepositBuffer - opts.Context = ctx - - log.Info(fmt.Sprintf("Deploying new chequebook (owner: %v)", opts.From.Hex())) - address, err := deployChequebookLoop(opts, backend) - if err != nil { - log.Error(fmt.Sprintf("unable to deploy new chequebook: %v", err)) - return err - } - log.Info(fmt.Sprintf("new chequebook deployed at %v (owner: %v)", address.Hex(), opts.From.Hex())) - - // need to save config at this point - lp.lock.Lock() - lp.Contract = address - err = lp.newChequebookFromContract(path, backend) - lp.lock.Unlock() - if err != nil { - log.Warn(fmt.Sprintf("error initialising cheque book (owner: %v): %v", opts.From.Hex(), err)) - } - return err -} - -// deployChequebookLoop repeatedly tries to deploy a chequebook. -func deployChequebookLoop(opts *bind.TransactOpts, backend chequebook.Backend) (addr common.Address, err error) { - var tx *types.Transaction - for try := 0; try < chequebookDeployRetries; try++ { - if try > 0 { - time.Sleep(chequebookDeployDelay) - } - if _, tx, _, err = contract.DeployChequebook(opts, backend); err != nil { - log.Warn(fmt.Sprintf("can't send chequebook deploy tx (try %d): %v", try, err)) - continue - } - if addr, err = bind.WaitDeployed(opts.Context, backend, tx); err != nil { - log.Warn(fmt.Sprintf("chequebook deploy error (try %d): %v", try, err)) - continue - } - return addr, nil - } - return addr, err -} - -// newChequebookFromContract - initialise the chequebook from a persisted json file or create a new one -// caller holds the lock -func (lp *LocalProfile) newChequebookFromContract(path string, backend chequebook.Backend) error { - hexkey := common.Bytes2Hex(lp.Contract.Bytes()) - err := os.MkdirAll(filepath.Join(path, "chequebooks"), os.ModePerm) - if err != nil { - return fmt.Errorf("unable to create directory for chequebooks: %v", err) - } - - chbookpath := filepath.Join(path, "chequebooks", hexkey+".json") - lp.chbook, err = chequebook.LoadChequebook(chbookpath, lp.privateKey, backend, true) - - if err != nil { - lp.chbook, err = chequebook.NewChequebook(chbookpath, lp.Contract, lp.privateKey, backend) - if err != nil { - log.Warn(fmt.Sprintf("unable to initialise chequebook (owner: %v): %v", lp.owner.Hex(), err)) - return fmt.Errorf("unable to initialise chequebook (owner: %v): %v", lp.owner.Hex(), err) - } - } - - lp.chbook.AutoDeposit(lp.AutoDepositInterval, lp.AutoDepositThreshold, lp.AutoDepositBuffer) - log.Info(fmt.Sprintf("auto deposit ON for %v -> %v: interval = %v, threshold = %v, buffer = %v)", crypto.PubkeyToAddress(*(lp.publicKey)).Hex()[:8], lp.Contract.Hex()[:8], lp.AutoDepositInterval, lp.AutoDepositThreshold, lp.AutoDepositBuffer)) - - return nil -} diff --git a/swarm/services/swap/swap/swap.go b/swarm/services/swap/swap/swap.go deleted file mode 100644 index 0afca9ab30a8..000000000000 --- a/swarm/services/swap/swap/swap.go +++ /dev/null @@ -1,252 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swap - -import ( - "fmt" - "math/big" - "sync" - "time" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -// SwAP Swarm Accounting Protocol with -// Swift Automatic Payments -// a peer to peer micropayment system - -// Profile - public swap profile -// public parameters for SWAP, serializable config struct passed in handshake -type Profile struct { - BuyAt *big.Int // accepted max price for chunk - SellAt *big.Int // offered sale price for chunk - PayAt uint // threshold that triggers payment request - DropAt uint // threshold that triggers disconnect -} - -// Strategy encapsulates parameters relating to -// automatic deposit and automatic cashing -type Strategy struct { - AutoCashInterval time.Duration // default interval for autocash - AutoCashThreshold *big.Int // threshold that triggers autocash (wei) - AutoDepositInterval time.Duration // default interval for autocash - AutoDepositThreshold *big.Int // threshold that triggers autodeposit (wei) - AutoDepositBuffer *big.Int // buffer that is surplus for fork protection etc (wei) -} - -// Params extends the public profile with private parameters relating to -// automatic deposit and automatic cashing -type Params struct { - *Profile - *Strategy -} - -// Promise - 3rd party Provable Promise of Payment -// issued by outPayment -// serializable to send with Protocol -type Promise interface{} - -// Protocol interface for the peer protocol for testing or external alternative payment -type Protocol interface { - Pay(int, Promise) // units, payment proof - Drop() - String() string -} - -// OutPayment interface for the (delayed) outgoing payment system with auto-deposit -type OutPayment interface { - Issue(amount *big.Int) (promise Promise, err error) - AutoDeposit(interval time.Duration, threshold, buffer *big.Int) - Stop() -} - -// InPayment interface for the (delayed) incoming payment system with autocash -type InPayment interface { - Receive(promise Promise) (*big.Int, error) - AutoCash(cashInterval time.Duration, maxUncashed *big.Int) - Stop() -} - -// Swap is the swarm accounting protocol instance -// * pairwise accounting and payments -type Swap struct { - lock sync.Mutex // mutex for balance access - balance int // units of chunk/retrieval request - local *Params // local peer's swap parameters - remote *Profile // remote peer's swap profile - proto Protocol // peer communication protocol - Payment -} - -// Payment handlers -type Payment struct { - Out OutPayment // outgoing payment handler - In InPayment // incoming payment handler - Buys, Sells bool -} - -// New - swap constructor -func New(local *Params, pm Payment, proto Protocol) (swap *Swap, err error) { - - swap = &Swap{ - local: local, - Payment: pm, - proto: proto, - } - - swap.SetParams(local) - - return -} - -// SetRemote - entry point for setting remote swap profile (e.g from handshake or other message) -func (swap *Swap) SetRemote(remote *Profile) { - defer swap.lock.Unlock() - swap.lock.Lock() - - swap.remote = remote - if swap.Sells && (remote.BuyAt.Sign() <= 0 || swap.local.SellAt.Sign() <= 0 || remote.BuyAt.Cmp(swap.local.SellAt) < 0) { - swap.Out.Stop() - swap.Sells = false - } - if swap.Buys && (remote.SellAt.Sign() <= 0 || swap.local.BuyAt.Sign() <= 0 || swap.local.BuyAt.Cmp(swap.remote.SellAt) < 0) { - swap.In.Stop() - swap.Buys = false - } - - log.Debug(fmt.Sprintf("<%v> remote profile set: pay at: %v, drop at: %v, buy at: %v, sell at: %v", swap.proto, remote.PayAt, remote.DropAt, remote.BuyAt, remote.SellAt)) - -} - -// SetParams - to set strategy dynamically -func (swap *Swap) SetParams(local *Params) { - defer swap.lock.Unlock() - swap.lock.Lock() - swap.local = local - swap.setParams(local) -} - -// setParams - caller holds the lock -func (swap *Swap) setParams(local *Params) { - - if swap.Sells { - swap.In.AutoCash(local.AutoCashInterval, local.AutoCashThreshold) - log.Info(fmt.Sprintf("<%v> set autocash to every %v, max uncashed limit: %v", swap.proto, local.AutoCashInterval, local.AutoCashThreshold)) - } else { - log.Info(fmt.Sprintf("<%v> autocash off (not selling)", swap.proto)) - } - if swap.Buys { - swap.Out.AutoDeposit(local.AutoDepositInterval, local.AutoDepositThreshold, local.AutoDepositBuffer) - log.Info(fmt.Sprintf("<%v> set autodeposit to every %v, pay at: %v, buffer: %v", swap.proto, local.AutoDepositInterval, local.AutoDepositThreshold, local.AutoDepositBuffer)) - } else { - log.Info(fmt.Sprintf("<%v> autodeposit off (not buying)", swap.proto)) - } -} - -// Add (n) -// n > 0 called when promised/provided n units of service -// n < 0 called when used/requested n units of service -func (swap *Swap) Add(n int) error { - defer swap.lock.Unlock() - swap.lock.Lock() - swap.balance += n - if !swap.Sells && swap.balance > 0 { - log.Trace(fmt.Sprintf("<%v> remote peer cannot have debt (balance: %v)", swap.proto, swap.balance)) - swap.proto.Drop() - return fmt.Errorf("[SWAP] <%v> remote peer cannot have debt (balance: %v)", swap.proto, swap.balance) - } - if !swap.Buys && swap.balance < 0 { - log.Trace(fmt.Sprintf("<%v> we cannot have debt (balance: %v)", swap.proto, swap.balance)) - return fmt.Errorf("[SWAP] <%v> we cannot have debt (balance: %v)", swap.proto, swap.balance) - } - if swap.balance >= int(swap.local.DropAt) { - log.Trace(fmt.Sprintf("<%v> remote peer has too much debt (balance: %v, disconnect threshold: %v)", swap.proto, swap.balance, swap.local.DropAt)) - swap.proto.Drop() - return fmt.Errorf("[SWAP] <%v> remote peer has too much debt (balance: %v, disconnect threshold: %v)", swap.proto, swap.balance, swap.local.DropAt) - } else if swap.balance <= -int(swap.remote.PayAt) { - swap.send() - } - return nil -} - -// Balance accessor -func (swap *Swap) Balance() int { - defer swap.lock.Unlock() - swap.lock.Lock() - return swap.balance -} - -// send (units) is called when payment is due -// In case of insolvency no promise is issued and sent, safe against fraud -// No return value: no error = payment is opportunistic = hang in till dropped -func (swap *Swap) send() { - if swap.local.BuyAt != nil && swap.balance < 0 { - amount := big.NewInt(int64(-swap.balance)) - amount.Mul(amount, swap.remote.SellAt) - promise, err := swap.Out.Issue(amount) - if err != nil { - log.Warn(fmt.Sprintf("<%v> cannot issue cheque (amount: %v, channel: %v): %v", swap.proto, amount, swap.Out, err)) - } else { - log.Warn(fmt.Sprintf("<%v> cheque issued (amount: %v, channel: %v)", swap.proto, amount, swap.Out)) - swap.proto.Pay(-swap.balance, promise) - swap.balance = 0 - } - } -} - -// Receive (units, promise) is called by the protocol when a payment msg is received -// returns error if promise is invalid. -func (swap *Swap) Receive(units int, promise Promise) error { - if units <= 0 { - return fmt.Errorf("invalid units: %v <= 0", units) - } - - price := new(big.Int).SetInt64(int64(units)) - price.Mul(price, swap.local.SellAt) - - amount, err := swap.In.Receive(promise) - - if err != nil { - err = fmt.Errorf("invalid promise: %v", err) - } else if price.Cmp(amount) != 0 { - // verify amount = units * unit sale price - return fmt.Errorf("invalid amount: %v = %v * %v (units sent in msg * agreed sale unit price) != %v (signed in cheque)", price, units, swap.local.SellAt, amount) - } - if err != nil { - log.Trace(fmt.Sprintf("<%v> invalid promise (amount: %v, channel: %v): %v", swap.proto, amount, swap.In, err)) - return err - } - - // credit remote peer with units - swap.Add(-units) - log.Trace(fmt.Sprintf("<%v> received promise (amount: %v, channel: %v): %v", swap.proto, amount, swap.In, promise)) - - return nil -} - -// Stop causes autocash loop to terminate. -// Called after protocol handle loop terminates. -func (swap *Swap) Stop() { - defer swap.lock.Unlock() - swap.lock.Lock() - if swap.Buys { - swap.Out.Stop() - } - if swap.Sells { - swap.In.Stop() - } -} diff --git a/swarm/services/swap/swap/swap_test.go b/swarm/services/swap/swap/swap_test.go deleted file mode 100644 index d0e34f8a54cb..000000000000 --- a/swarm/services/swap/swap/swap_test.go +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swap - -import ( - "math/big" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" -) - -type testInPayment struct { - received []*testPromise - autocashInterval time.Duration - autocashLimit *big.Int -} - -type testPromise struct { - amount *big.Int -} - -func (test *testInPayment) Receive(promise Promise) (*big.Int, error) { - p := promise.(*testPromise) - test.received = append(test.received, p) - return p.amount, nil -} - -func (test *testInPayment) AutoCash(interval time.Duration, limit *big.Int) { - test.autocashInterval = interval - test.autocashLimit = limit -} - -func (test *testInPayment) Cash() (string, error) { return "", nil } - -func (test *testInPayment) Stop() {} - -type testOutPayment struct { - deposits []*big.Int - autodepositInterval time.Duration - autodepositThreshold *big.Int - autodepositBuffer *big.Int -} - -func (test *testOutPayment) Issue(amount *big.Int) (promise Promise, err error) { - return &testPromise{amount}, nil -} - -func (test *testOutPayment) Deposit(amount *big.Int) (string, error) { - test.deposits = append(test.deposits, amount) - return "", nil -} - -func (test *testOutPayment) AutoDeposit(interval time.Duration, threshold, buffer *big.Int) { - test.autodepositInterval = interval - test.autodepositThreshold = threshold - test.autodepositBuffer = buffer -} - -func (test *testOutPayment) Stop() {} - -type testProtocol struct { - drop bool - amounts []int - promises []*testPromise -} - -func (test *testProtocol) Drop() { - test.drop = true -} - -func (test *testProtocol) String() string { - return "" -} - -func (test *testProtocol) Pay(amount int, promise Promise) { - p := promise.(*testPromise) - test.promises = append(test.promises, p) - test.amounts = append(test.amounts, amount) -} - -func TestSwap(t *testing.T) { - - strategy := &Strategy{ - AutoCashInterval: 1 * time.Second, - AutoCashThreshold: big.NewInt(20), - AutoDepositInterval: 1 * time.Second, - AutoDepositThreshold: big.NewInt(20), - AutoDepositBuffer: big.NewInt(40), - } - - local := &Params{ - Profile: &Profile{ - PayAt: 5, - DropAt: 10, - BuyAt: common.Big3, - SellAt: common.Big2, - }, - Strategy: strategy, - } - - in := &testInPayment{} - out := &testOutPayment{} - proto := &testProtocol{} - - swap, _ := New(local, Payment{In: in, Out: out, Buys: true, Sells: true}, proto) - - if in.autocashInterval != strategy.AutoCashInterval { - t.Fatalf("autocash interval not properly set, expect %v, got %v", strategy.AutoCashInterval, in.autocashInterval) - } - if out.autodepositInterval != strategy.AutoDepositInterval { - t.Fatalf("autodeposit interval not properly set, expect %v, got %v", strategy.AutoDepositInterval, out.autodepositInterval) - } - - remote := &Profile{ - PayAt: 3, - DropAt: 10, - BuyAt: common.Big2, - SellAt: common.Big3, - } - swap.SetRemote(remote) - - swap.Add(9) - if proto.drop { - t.Fatalf("not expected peer to be dropped") - } - swap.Add(1) - if !proto.drop { - t.Fatalf("expected peer to be dropped") - } - if !proto.drop { - t.Fatalf("expected peer to be dropped") - } - proto.drop = false - - swap.Receive(10, &testPromise{big.NewInt(20)}) - if swap.balance != 0 { - t.Fatalf("expected zero balance, got %v", swap.balance) - } - - if len(proto.amounts) != 0 { - t.Fatalf("expected zero balance, got %v", swap.balance) - } - - swap.Add(-2) - if len(proto.amounts) > 0 { - t.Fatalf("expected no payments yet, got %v", proto.amounts) - } - - swap.Add(-1) - if len(proto.amounts) != 1 { - t.Fatalf("expected one payment, got %v", len(proto.amounts)) - } - - if proto.amounts[0] != 3 { - t.Fatalf("expected payment for %v units, got %v", proto.amounts[0], 3) - } - - exp := new(big.Int).Mul(big.NewInt(int64(proto.amounts[0])), remote.SellAt) - if proto.promises[0].amount.Cmp(exp) != 0 { - t.Fatalf("expected payment amount %v, got %v", exp, proto.promises[0].amount) - } - - swap.SetParams(&Params{ - Profile: &Profile{ - PayAt: 5, - DropAt: 10, - BuyAt: common.Big3, - SellAt: common.Big2, - }, - Strategy: &Strategy{ - AutoCashInterval: 2 * time.Second, - AutoCashThreshold: big.NewInt(40), - AutoDepositInterval: 2 * time.Second, - AutoDepositThreshold: big.NewInt(40), - AutoDepositBuffer: big.NewInt(60), - }, - }) - -} diff --git a/swarm/shed/db.go b/swarm/shed/db.go deleted file mode 100644 index d4e5d1b2313b..000000000000 --- a/swarm/shed/db.go +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package shed provides a simple abstraction components to compose -// more complex operations on storage data organized in fields and indexes. -// -// Only type which holds logical information about swarm storage chunks data -// and metadata is Item. This part is not generalized mostly for -// performance reasons. -package shed - -import ( - "errors" - "fmt" - "strconv" - "strings" - "time" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" -) - -const ( - openFileLimit = 128 // The limit for LevelDB OpenFilesCacheCapacity. - writePauseWarningThrottler = 1 * time.Minute -) - -// DB provides abstractions over LevelDB in order to -// implement complex structures using fields and ordered indexes. -// It provides a schema functionality to store fields and indexes -// information about naming and types. -type DB struct { - ldb *leveldb.DB - - compTimeMeter metrics.Meter // Meter for measuring the total time spent in database compaction - compReadMeter metrics.Meter // Meter for measuring the data read during compaction - compWriteMeter metrics.Meter // Meter for measuring the data written during compaction - writeDelayNMeter metrics.Meter // Meter for measuring the write delay number due to database compaction - writeDelayMeter metrics.Meter // Meter for measuring the write delay duration due to database compaction - diskReadMeter metrics.Meter // Meter for measuring the effective amount of data read - diskWriteMeter metrics.Meter // Meter for measuring the effective amount of data written - - quitChan chan chan error // Quit channel to stop the metrics collection before closing the database -} - -// NewDB constructs a new DB and validates the schema -// if it exists in database on the given path. -// metricsPrefix is used for metrics collection for the given DB. -func NewDB(path string, metricsPrefix string) (db *DB, err error) { - ldb, err := leveldb.OpenFile(path, &opt.Options{ - OpenFilesCacheCapacity: openFileLimit, - }) - if err != nil { - return nil, err - } - db = &DB{ - ldb: ldb, - } - - if _, err = db.getSchema(); err != nil { - if err == leveldb.ErrNotFound { - // save schema with initialized default fields - if err = db.putSchema(schema{ - Fields: make(map[string]fieldSpec), - Indexes: make(map[byte]indexSpec), - }); err != nil { - return nil, err - } - } else { - return nil, err - } - } - - // Configure meters for DB - db.configure(metricsPrefix) - - // Create a quit channel for the periodic metrics collector and run it - db.quitChan = make(chan chan error) - - go db.meter(10 * time.Second) - - return db, nil -} - -// Put wraps LevelDB Put method to increment metrics counter. -func (db *DB) Put(key []byte, value []byte) (err error) { - err = db.ldb.Put(key, value, nil) - if err != nil { - metrics.GetOrRegisterCounter("DB.putFail", nil).Inc(1) - return err - } - metrics.GetOrRegisterCounter("DB.put", nil).Inc(1) - return nil -} - -// Get wraps LevelDB Get method to increment metrics counter. -func (db *DB) Get(key []byte) (value []byte, err error) { - value, err = db.ldb.Get(key, nil) - if err != nil { - if err == leveldb.ErrNotFound { - metrics.GetOrRegisterCounter("DB.getNotFound", nil).Inc(1) - } else { - metrics.GetOrRegisterCounter("DB.getFail", nil).Inc(1) - } - return nil, err - } - metrics.GetOrRegisterCounter("DB.get", nil).Inc(1) - return value, nil -} - -// Delete wraps LevelDB Delete method to increment metrics counter. -func (db *DB) Delete(key []byte) (err error) { - err = db.ldb.Delete(key, nil) - if err != nil { - metrics.GetOrRegisterCounter("DB.deleteFail", nil).Inc(1) - return err - } - metrics.GetOrRegisterCounter("DB.delete", nil).Inc(1) - return nil -} - -// NewIterator wraps LevelDB NewIterator method to increment metrics counter. -func (db *DB) NewIterator() iterator.Iterator { - metrics.GetOrRegisterCounter("DB.newiterator", nil).Inc(1) - - return db.ldb.NewIterator(nil, nil) -} - -// WriteBatch wraps LevelDB Write method to increment metrics counter. -func (db *DB) WriteBatch(batch *leveldb.Batch) (err error) { - err = db.ldb.Write(batch, nil) - if err != nil { - metrics.GetOrRegisterCounter("DB.writebatchFail", nil).Inc(1) - return err - } - metrics.GetOrRegisterCounter("DB.writebatch", nil).Inc(1) - return nil -} - -// Close closes LevelDB database. -func (db *DB) Close() (err error) { - close(db.quitChan) - return db.ldb.Close() -} - -// Configure configures the database metrics collectors -func (db *DB) configure(prefix string) { - // Initialize all the metrics collector at the requested prefix - db.compTimeMeter = metrics.NewRegisteredMeter(prefix+"compact/time", nil) - db.compReadMeter = metrics.NewRegisteredMeter(prefix+"compact/input", nil) - db.compWriteMeter = metrics.NewRegisteredMeter(prefix+"compact/output", nil) - db.diskReadMeter = metrics.NewRegisteredMeter(prefix+"disk/read", nil) - db.diskWriteMeter = metrics.NewRegisteredMeter(prefix+"disk/write", nil) - db.writeDelayMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/duration", nil) - db.writeDelayNMeter = metrics.NewRegisteredMeter(prefix+"compact/writedelay/counter", nil) -} - -func (db *DB) meter(refresh time.Duration) { - // Create the counters to store current and previous compaction values - compactions := make([][]float64, 2) - for i := 0; i < 2; i++ { - compactions[i] = make([]float64, 3) - } - // Create storage for iostats. - var iostats [2]float64 - - // Create storage and warning log tracer for write delay. - var ( - delaystats [2]int64 - lastWritePaused time.Time - ) - - var ( - errc chan error - merr error - ) - - // Iterate ad infinitum and collect the stats - for i := 1; errc == nil && merr == nil; i++ { - // Retrieve the database stats - stats, err := db.ldb.GetProperty("leveldb.stats") - if err != nil { - log.Error("Failed to read database stats", "err", err) - merr = err - continue - } - // Find the compaction table, skip the header - lines := strings.Split(stats, "\n") - for len(lines) > 0 && strings.TrimSpace(lines[0]) != "Compactions" { - lines = lines[1:] - } - if len(lines) <= 3 { - log.Error("Compaction table not found") - merr = errors.New("compaction table not found") - continue - } - lines = lines[3:] - - // Iterate over all the table rows, and accumulate the entries - for j := 0; j < len(compactions[i%2]); j++ { - compactions[i%2][j] = 0 - } - for _, line := range lines { - parts := strings.Split(line, "|") - if len(parts) != 6 { - break - } - for idx, counter := range parts[3:] { - value, err := strconv.ParseFloat(strings.TrimSpace(counter), 64) - if err != nil { - log.Error("Compaction entry parsing failed", "err", err) - merr = err - continue - } - compactions[i%2][idx] += value - } - } - // Update all the requested meters - if db.compTimeMeter != nil { - db.compTimeMeter.Mark(int64((compactions[i%2][0] - compactions[(i-1)%2][0]) * 1000 * 1000 * 1000)) - } - if db.compReadMeter != nil { - db.compReadMeter.Mark(int64((compactions[i%2][1] - compactions[(i-1)%2][1]) * 1024 * 1024)) - } - if db.compWriteMeter != nil { - db.compWriteMeter.Mark(int64((compactions[i%2][2] - compactions[(i-1)%2][2]) * 1024 * 1024)) - } - - // Retrieve the write delay statistic - writedelay, err := db.ldb.GetProperty("leveldb.writedelay") - if err != nil { - log.Error("Failed to read database write delay statistic", "err", err) - merr = err - continue - } - var ( - delayN int64 - delayDuration string - duration time.Duration - paused bool - ) - if n, err := fmt.Sscanf(writedelay, "DelayN:%d Delay:%s Paused:%t", &delayN, &delayDuration, &paused); n != 3 || err != nil { - log.Error("Write delay statistic not found") - merr = err - continue - } - duration, err = time.ParseDuration(delayDuration) - if err != nil { - log.Error("Failed to parse delay duration", "err", err) - merr = err - continue - } - if db.writeDelayNMeter != nil { - db.writeDelayNMeter.Mark(delayN - delaystats[0]) - } - if db.writeDelayMeter != nil { - db.writeDelayMeter.Mark(duration.Nanoseconds() - delaystats[1]) - } - // If a warning that db is performing compaction has been displayed, any subsequent - // warnings will be withheld for one minute not to overwhelm the user. - if paused && delayN-delaystats[0] == 0 && duration.Nanoseconds()-delaystats[1] == 0 && - time.Now().After(lastWritePaused.Add(writePauseWarningThrottler)) { - log.Warn("Database compacting, degraded performance") - lastWritePaused = time.Now() - } - delaystats[0], delaystats[1] = delayN, duration.Nanoseconds() - - // Retrieve the database iostats. - ioStats, err := db.ldb.GetProperty("leveldb.iostats") - if err != nil { - log.Error("Failed to read database iostats", "err", err) - merr = err - continue - } - var nRead, nWrite float64 - parts := strings.Split(ioStats, " ") - if len(parts) < 2 { - log.Error("Bad syntax of ioStats", "ioStats", ioStats) - merr = fmt.Errorf("bad syntax of ioStats %s", ioStats) - continue - } - if n, err := fmt.Sscanf(parts[0], "Read(MB):%f", &nRead); n != 1 || err != nil { - log.Error("Bad syntax of read entry", "entry", parts[0]) - merr = err - continue - } - if n, err := fmt.Sscanf(parts[1], "Write(MB):%f", &nWrite); n != 1 || err != nil { - log.Error("Bad syntax of write entry", "entry", parts[1]) - merr = err - continue - } - if db.diskReadMeter != nil { - db.diskReadMeter.Mark(int64((nRead - iostats[0]) * 1024 * 1024)) - } - if db.diskWriteMeter != nil { - db.diskWriteMeter.Mark(int64((nWrite - iostats[1]) * 1024 * 1024)) - } - iostats[0], iostats[1] = nRead, nWrite - - // Sleep a bit, then repeat the stats collection - select { - case errc = <-db.quitChan: - // Quit requesting, stop hammering the database - case <-time.After(refresh): - // Timeout, gather a new set of stats - } - } - - if errc == nil { - errc = <-db.quitChan - } - errc <- merr -} diff --git a/swarm/shed/db_test.go b/swarm/shed/db_test.go deleted file mode 100644 index 65fdac4a6186..000000000000 --- a/swarm/shed/db_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "io/ioutil" - "os" - "testing" -) - -// TestNewDB constructs a new DB -// and validates if the schema is initialized properly. -func TestNewDB(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - s, err := db.getSchema() - if err != nil { - t.Fatal(err) - } - if s.Fields == nil { - t.Error("schema fields are empty") - } - if len(s.Fields) != 0 { - t.Errorf("got schema fields length %v, want %v", len(s.Fields), 0) - } - if s.Indexes == nil { - t.Error("schema indexes are empty") - } - if len(s.Indexes) != 0 { - t.Errorf("got schema indexes length %v, want %v", len(s.Indexes), 0) - } -} - -// TestDB_persistence creates one DB, saves a field and closes that DB. -// Then, it constructs another DB and trues to retrieve the saved value. -func TestDB_persistence(t *testing.T) { - dir, err := ioutil.TempDir("", "shed-test-persistence") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - db, err := NewDB(dir, "") - if err != nil { - t.Fatal(err) - } - stringField, err := db.NewStringField("preserve-me") - if err != nil { - t.Fatal(err) - } - want := "persistent value" - err = stringField.Put(want) - if err != nil { - t.Fatal(err) - } - err = db.Close() - if err != nil { - t.Fatal(err) - } - - db2, err := NewDB(dir, "") - if err != nil { - t.Fatal(err) - } - stringField2, err := db2.NewStringField("preserve-me") - if err != nil { - t.Fatal(err) - } - got, err := stringField2.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got string %q, want %q", got, want) - } -} - -// newTestDB is a helper function that constructs a -// temporary database and returns a cleanup function that must -// be called to remove the data. -func newTestDB(t *testing.T) (db *DB, cleanupFunc func()) { - t.Helper() - - dir, err := ioutil.TempDir("", "shed-test") - if err != nil { - t.Fatal(err) - } - cleanupFunc = func() { os.RemoveAll(dir) } - db, err = NewDB(dir, "") - if err != nil { - cleanupFunc() - t.Fatal(err) - } - return db, cleanupFunc -} diff --git a/swarm/shed/example_store_test.go b/swarm/shed/example_store_test.go deleted file mode 100644 index 9a83855e70c1..000000000000 --- a/swarm/shed/example_store_test.go +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed_test - -import ( - "bytes" - "context" - "encoding/binary" - "fmt" - "io/ioutil" - "log" - "os" - "time" - - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/syndtr/goleveldb/leveldb" -) - -// Store holds fields and indexes (including their encoding functions) -// and defines operations on them by composing data from them. -// It implements storage.ChunkStore interface. -// It is just an example without any support for parallel operations -// or real world implementation. -type Store struct { - db *shed.DB - - // fields and indexes - schemaName shed.StringField - sizeCounter shed.Uint64Field - accessCounter shed.Uint64Field - retrievalIndex shed.Index - accessIndex shed.Index - gcIndex shed.Index -} - -// New returns new Store. All fields and indexes are initialized -// and possible conflicts with schema from existing database is checked -// automatically. -func New(path string) (s *Store, err error) { - db, err := shed.NewDB(path, "") - if err != nil { - return nil, err - } - s = &Store{ - db: db, - } - // Identify current storage schema by arbitrary name. - s.schemaName, err = db.NewStringField("schema-name") - if err != nil { - return nil, err - } - // Global ever incrementing index of chunk accesses. - s.accessCounter, err = db.NewUint64Field("access-counter") - if err != nil { - return nil, err - } - // Index storing actual chunk address, data and store timestamp. - s.retrievalIndex, err = db.NewIndex("Address->StoreTimestamp|Data", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.StoreTimestamp)) - value = append(b, fields.Data...) - return value, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - e.StoreTimestamp = int64(binary.BigEndian.Uint64(value[:8])) - e.Data = value[8:] - return e, nil - }, - }) - if err != nil { - return nil, err - } - // Index storing access timestamp for a particular address. - // It is needed in order to update gc index keys for iteration order. - s.accessIndex, err = db.NewIndex("Address->AccessTimestamp", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.AccessTimestamp)) - return b, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - e.AccessTimestamp = int64(binary.BigEndian.Uint64(value)) - return e, nil - }, - }) - if err != nil { - return nil, err - } - // Index with keys ordered by access timestamp for garbage collection prioritization. - s.gcIndex, err = db.NewIndex("AccessTimestamp|StoredTimestamp|Address->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - b := make([]byte, 16, 16+len(fields.Address)) - binary.BigEndian.PutUint64(b[:8], uint64(fields.AccessTimestamp)) - binary.BigEndian.PutUint64(b[8:16], uint64(fields.StoreTimestamp)) - key = append(b, fields.Address...) - return key, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.AccessTimestamp = int64(binary.BigEndian.Uint64(key[:8])) - e.StoreTimestamp = int64(binary.BigEndian.Uint64(key[8:16])) - e.Address = key[16:] - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - return s, nil -} - -// Put stores the chunk and sets it store timestamp. -func (s *Store) Put(_ context.Context, ch storage.Chunk) (err error) { - return s.retrievalIndex.Put(shed.Item{ - Address: ch.Address(), - Data: ch.Data(), - StoreTimestamp: time.Now().UTC().UnixNano(), - }) -} - -// Get retrieves a chunk with the provided address. -// It updates access and gc indexes by removing the previous -// items from them and adding new items as keys of index entries -// are changed. -func (s *Store) Get(_ context.Context, addr storage.Address) (c storage.Chunk, err error) { - batch := new(leveldb.Batch) - - // Get the chunk data and storage timestamp. - item, err := s.retrievalIndex.Get(shed.Item{ - Address: addr, - }) - if err != nil { - if err == leveldb.ErrNotFound { - return nil, storage.ErrChunkNotFound - } - return nil, err - } - - // Get the chunk access timestamp. - accessItem, err := s.accessIndex.Get(shed.Item{ - Address: addr, - }) - switch err { - case nil: - // Remove gc index entry if access timestamp is found. - err = s.gcIndex.DeleteInBatch(batch, shed.Item{ - Address: item.Address, - StoreTimestamp: accessItem.AccessTimestamp, - AccessTimestamp: item.StoreTimestamp, - }) - if err != nil { - return nil, err - } - case leveldb.ErrNotFound: - // Access timestamp is not found. Do not do anything. - // This is the firs get request. - default: - return nil, err - } - - // Specify new access timestamp - accessTimestamp := time.Now().UTC().UnixNano() - - // Put new access timestamp in access index. - err = s.accessIndex.PutInBatch(batch, shed.Item{ - Address: addr, - AccessTimestamp: accessTimestamp, - }) - if err != nil { - return nil, err - } - - // Put new access timestamp in gc index. - err = s.gcIndex.PutInBatch(batch, shed.Item{ - Address: item.Address, - AccessTimestamp: accessTimestamp, - StoreTimestamp: item.StoreTimestamp, - }) - if err != nil { - return nil, err - } - - // Increment access counter. - // Currently this information is not used anywhere. - _, err = s.accessCounter.IncInBatch(batch) - if err != nil { - return nil, err - } - - // Write the batch. - err = s.db.WriteBatch(batch) - if err != nil { - return nil, err - } - - // Return the chunk. - return storage.NewChunk(item.Address, item.Data), nil -} - -// CollectGarbage is an example of index iteration. -// It provides no reliable garbage collection functionality. -func (s *Store) CollectGarbage() (err error) { - const maxTrashSize = 100 - maxRounds := 10 // arbitrary number, needs to be calculated - - // Run a few gc rounds. - for roundCount := 0; roundCount < maxRounds; roundCount++ { - var garbageCount int - // New batch for a new cg round. - trash := new(leveldb.Batch) - // Iterate through all index items and break when needed. - err = s.gcIndex.Iterate(func(item shed.Item) (stop bool, err error) { - // Remove the chunk. - err = s.retrievalIndex.DeleteInBatch(trash, item) - if err != nil { - return false, err - } - // Remove the element in gc index. - err = s.gcIndex.DeleteInBatch(trash, item) - if err != nil { - return false, err - } - // Remove the relation in access index. - err = s.accessIndex.DeleteInBatch(trash, item) - if err != nil { - return false, err - } - garbageCount++ - if garbageCount >= maxTrashSize { - return true, nil - } - return false, nil - }, nil) - if err != nil { - return err - } - if garbageCount == 0 { - return nil - } - err = s.db.WriteBatch(trash) - if err != nil { - return err - } - } - return nil -} - -// GetSchema is an example of retrieveing the most simple -// string from a database field. -func (s *Store) GetSchema() (name string, err error) { - name, err = s.schemaName.Get() - if err == leveldb.ErrNotFound { - return "", nil - } - return name, err -} - -// GetSchema is an example of storing the most simple -// string in a database field. -func (s *Store) PutSchema(name string) (err error) { - return s.schemaName.Put(name) -} - -// Close closes the underlying database. -func (s *Store) Close() error { - return s.db.Close() -} - -// Example_store constructs a simple storage implementation using shed package. -func Example_store() { - dir, err := ioutil.TempDir("", "ephemeral") - if err != nil { - log.Fatal(err) - } - defer os.RemoveAll(dir) - - s, err := New(dir) - if err != nil { - log.Fatal(err) - } - defer s.Close() - - ch := storage.GenerateRandomChunk(1024) - err = s.Put(context.Background(), ch) - if err != nil { - log.Fatal(err) - } - - got, err := s.Get(context.Background(), ch.Address()) - if err != nil { - log.Fatal(err) - } - - fmt.Println(bytes.Equal(got.Data(), ch.Data())) - - //Output: true -} diff --git a/swarm/shed/field_string.go b/swarm/shed/field_string.go deleted file mode 100644 index a7e8f0c75474..000000000000 --- a/swarm/shed/field_string.go +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "github.com/syndtr/goleveldb/leveldb" -) - -// StringField is the most simple field implementation -// that stores an arbitrary string under a specific LevelDB key. -type StringField struct { - db *DB - key []byte -} - -// NewStringField retruns a new Instance of StringField. -// It validates its name and type against the database schema. -func (db *DB) NewStringField(name string) (f StringField, err error) { - key, err := db.schemaFieldKey(name, "string") - if err != nil { - return f, err - } - return StringField{ - db: db, - key: key, - }, nil -} - -// Get returns a string value from database. -// If the value is not found, an empty string is returned -// an no error. -func (f StringField) Get() (val string, err error) { - b, err := f.db.Get(f.key) - if err != nil { - if err == leveldb.ErrNotFound { - return "", nil - } - return "", err - } - return string(b), nil -} - -// Put stores a string in the database. -func (f StringField) Put(val string) (err error) { - return f.db.Put(f.key, []byte(val)) -} - -// PutInBatch stores a string in a batch that can be -// saved later in database. -func (f StringField) PutInBatch(batch *leveldb.Batch, val string) { - batch.Put(f.key, []byte(val)) -} diff --git a/swarm/shed/field_string_test.go b/swarm/shed/field_string_test.go deleted file mode 100644 index 4215075bca64..000000000000 --- a/swarm/shed/field_string_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "testing" - - "github.com/syndtr/goleveldb/leveldb" -) - -// TestStringField validates put and get operations -// of the StringField. -func TestStringField(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - simpleString, err := db.NewStringField("simple-string") - if err != nil { - t.Fatal(err) - } - - t.Run("get empty", func(t *testing.T) { - got, err := simpleString.Get() - if err != nil { - t.Fatal(err) - } - want := "" - if got != want { - t.Errorf("got string %q, want %q", got, want) - } - }) - - t.Run("put", func(t *testing.T) { - want := "simple string value" - err = simpleString.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := simpleString.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got string %q, want %q", got, want) - } - - t.Run("overwrite", func(t *testing.T) { - want := "overwritten string value" - err = simpleString.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := simpleString.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got string %q, want %q", got, want) - } - }) - }) - - t.Run("put in batch", func(t *testing.T) { - batch := new(leveldb.Batch) - want := "simple string batch value" - simpleString.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := simpleString.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got string %q, want %q", got, want) - } - - t.Run("overwrite", func(t *testing.T) { - batch := new(leveldb.Batch) - want := "overwritten string batch value" - simpleString.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := simpleString.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got string %q, want %q", got, want) - } - }) - }) -} diff --git a/swarm/shed/field_struct.go b/swarm/shed/field_struct.go deleted file mode 100644 index 90daee7fc4f7..000000000000 --- a/swarm/shed/field_struct.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "github.com/ethereum/go-ethereum/rlp" - "github.com/syndtr/goleveldb/leveldb" -) - -// StructField is a helper to store complex structure by -// encoding it in RLP format. -type StructField struct { - db *DB - key []byte -} - -// NewStructField returns a new StructField. -// It validates its name and type against the database schema. -func (db *DB) NewStructField(name string) (f StructField, err error) { - key, err := db.schemaFieldKey(name, "struct-rlp") - if err != nil { - return f, err - } - return StructField{ - db: db, - key: key, - }, nil -} - -// Get unmarshals data from the database to a provided val. -// If the data is not found leveldb.ErrNotFound is returned. -func (f StructField) Get(val interface{}) (err error) { - b, err := f.db.Get(f.key) - if err != nil { - return err - } - return rlp.DecodeBytes(b, val) -} - -// Put marshals provided val and saves it to the database. -func (f StructField) Put(val interface{}) (err error) { - b, err := rlp.EncodeToBytes(val) - if err != nil { - return err - } - return f.db.Put(f.key, b) -} - -// PutInBatch marshals provided val and puts it into the batch. -func (f StructField) PutInBatch(batch *leveldb.Batch, val interface{}) (err error) { - b, err := rlp.EncodeToBytes(val) - if err != nil { - return err - } - batch.Put(f.key, b) - return nil -} diff --git a/swarm/shed/field_struct_test.go b/swarm/shed/field_struct_test.go deleted file mode 100644 index cc0be01863fc..000000000000 --- a/swarm/shed/field_struct_test.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "testing" - - "github.com/syndtr/goleveldb/leveldb" -) - -// TestStructField validates put and get operations -// of the StructField. -func TestStructField(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - complexField, err := db.NewStructField("complex-field") - if err != nil { - t.Fatal(err) - } - - type complexStructure struct { - A string - } - - t.Run("get empty", func(t *testing.T) { - var s complexStructure - err := complexField.Get(&s) - if err != leveldb.ErrNotFound { - t.Fatalf("got error %v, want %v", err, leveldb.ErrNotFound) - } - want := "" - if s.A != want { - t.Errorf("got string %q, want %q", s.A, want) - } - }) - - t.Run("put", func(t *testing.T) { - want := complexStructure{ - A: "simple string value", - } - err = complexField.Put(want) - if err != nil { - t.Fatal(err) - } - var got complexStructure - err = complexField.Get(&got) - if err != nil { - t.Fatal(err) - } - if got.A != want.A { - t.Errorf("got string %q, want %q", got.A, want.A) - } - - t.Run("overwrite", func(t *testing.T) { - want := complexStructure{ - A: "overwritten string value", - } - err = complexField.Put(want) - if err != nil { - t.Fatal(err) - } - var got complexStructure - err = complexField.Get(&got) - if err != nil { - t.Fatal(err) - } - if got.A != want.A { - t.Errorf("got string %q, want %q", got.A, want.A) - } - }) - }) - - t.Run("put in batch", func(t *testing.T) { - batch := new(leveldb.Batch) - want := complexStructure{ - A: "simple string batch value", - } - complexField.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - var got complexStructure - err := complexField.Get(&got) - if err != nil { - t.Fatal(err) - } - if got.A != want.A { - t.Errorf("got string %q, want %q", got, want) - } - - t.Run("overwrite", func(t *testing.T) { - batch := new(leveldb.Batch) - want := complexStructure{ - A: "overwritten string batch value", - } - complexField.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - var got complexStructure - err := complexField.Get(&got) - if err != nil { - t.Fatal(err) - } - if got.A != want.A { - t.Errorf("got string %q, want %q", got, want) - } - }) - }) -} diff --git a/swarm/shed/field_uint64.go b/swarm/shed/field_uint64.go deleted file mode 100644 index 0417583ac315..000000000000 --- a/swarm/shed/field_uint64.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "encoding/binary" - - "github.com/syndtr/goleveldb/leveldb" -) - -// Uint64Field provides a way to have a simple counter in the database. -// It transparently encodes uint64 type value to bytes. -type Uint64Field struct { - db *DB - key []byte -} - -// NewUint64Field returns a new Uint64Field. -// It validates its name and type against the database schema. -func (db *DB) NewUint64Field(name string) (f Uint64Field, err error) { - key, err := db.schemaFieldKey(name, "uint64") - if err != nil { - return f, err - } - return Uint64Field{ - db: db, - key: key, - }, nil -} - -// Get retrieves a uint64 value from the database. -// If the value is not found in the database a 0 value -// is returned and no error. -func (f Uint64Field) Get() (val uint64, err error) { - b, err := f.db.Get(f.key) - if err != nil { - if err == leveldb.ErrNotFound { - return 0, nil - } - return 0, err - } - return binary.BigEndian.Uint64(b), nil -} - -// Put encodes uin64 value and stores it in the database. -func (f Uint64Field) Put(val uint64) (err error) { - return f.db.Put(f.key, encodeUint64(val)) -} - -// PutInBatch stores a uint64 value in a batch -// that can be saved later in the database. -func (f Uint64Field) PutInBatch(batch *leveldb.Batch, val uint64) { - batch.Put(f.key, encodeUint64(val)) -} - -// Inc increments a uint64 value in the database. -// This operation is not goroutine save. -func (f Uint64Field) Inc() (val uint64, err error) { - val, err = f.Get() - if err != nil { - if err == leveldb.ErrNotFound { - val = 0 - } else { - return 0, err - } - } - val++ - return val, f.Put(val) -} - -// IncInBatch increments a uint64 value in the batch -// by retreiving a value from the database, not the same batch. -// This operation is not goroutine save. -func (f Uint64Field) IncInBatch(batch *leveldb.Batch) (val uint64, err error) { - val, err = f.Get() - if err != nil { - if err == leveldb.ErrNotFound { - val = 0 - } else { - return 0, err - } - } - val++ - f.PutInBatch(batch, val) - return val, nil -} - -// Dec decrements a uint64 value in the database. -// This operation is not goroutine save. -// The field is protected from overflow to a negative value. -func (f Uint64Field) Dec() (val uint64, err error) { - val, err = f.Get() - if err != nil { - if err == leveldb.ErrNotFound { - val = 0 - } else { - return 0, err - } - } - if val != 0 { - val-- - } - return val, f.Put(val) -} - -// DecInBatch decrements a uint64 value in the batch -// by retreiving a value from the database, not the same batch. -// This operation is not goroutine save. -// The field is protected from overflow to a negative value. -func (f Uint64Field) DecInBatch(batch *leveldb.Batch) (val uint64, err error) { - val, err = f.Get() - if err != nil { - if err == leveldb.ErrNotFound { - val = 0 - } else { - return 0, err - } - } - if val != 0 { - val-- - } - f.PutInBatch(batch, val) - return val, nil -} - -// encode transforms uint64 to 8 byte long -// slice in big endian encoding. -func encodeUint64(val uint64) (b []byte) { - b = make([]byte, 8) - binary.BigEndian.PutUint64(b, val) - return b -} diff --git a/swarm/shed/field_uint64_test.go b/swarm/shed/field_uint64_test.go deleted file mode 100644 index 9462b56dd184..000000000000 --- a/swarm/shed/field_uint64_test.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "testing" - - "github.com/syndtr/goleveldb/leveldb" -) - -// TestUint64Field validates put and get operations -// of the Uint64Field. -func TestUint64Field(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - counter, err := db.NewUint64Field("counter") - if err != nil { - t.Fatal(err) - } - - t.Run("get empty", func(t *testing.T) { - got, err := counter.Get() - if err != nil { - t.Fatal(err) - } - var want uint64 - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - }) - - t.Run("put", func(t *testing.T) { - var want uint64 = 42 - err = counter.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - t.Run("overwrite", func(t *testing.T) { - var want uint64 = 84 - err = counter.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - }) - }) - - t.Run("put in batch", func(t *testing.T) { - batch := new(leveldb.Batch) - var want uint64 = 42 - counter.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - t.Run("overwrite", func(t *testing.T) { - batch := new(leveldb.Batch) - var want uint64 = 84 - counter.PutInBatch(batch, want) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - }) - }) -} - -// TestUint64Field_Inc validates Inc operation -// of the Uint64Field. -func TestUint64Field_Inc(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - counter, err := db.NewUint64Field("counter") - if err != nil { - t.Fatal(err) - } - - var want uint64 = 1 - got, err := counter.Inc() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - want = 2 - got, err = counter.Inc() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } -} - -// TestUint64Field_IncInBatch validates IncInBatch operation -// of the Uint64Field. -func TestUint64Field_IncInBatch(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - counter, err := db.NewUint64Field("counter") - if err != nil { - t.Fatal(err) - } - - batch := new(leveldb.Batch) - var want uint64 = 1 - got, err := counter.IncInBatch(batch) - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err = counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - batch2 := new(leveldb.Batch) - want = 2 - got, err = counter.IncInBatch(batch2) - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - err = db.WriteBatch(batch2) - if err != nil { - t.Fatal(err) - } - got, err = counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } -} - -// TestUint64Field_Dec validates Dec operation -// of the Uint64Field. -func TestUint64Field_Dec(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - counter, err := db.NewUint64Field("counter") - if err != nil { - t.Fatal(err) - } - - // test overflow protection - var want uint64 - got, err := counter.Dec() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - want = 32 - err = counter.Put(want) - if err != nil { - t.Fatal(err) - } - - want = 31 - got, err = counter.Dec() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } -} - -// TestUint64Field_DecInBatch validates DecInBatch operation -// of the Uint64Field. -func TestUint64Field_DecInBatch(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - counter, err := db.NewUint64Field("counter") - if err != nil { - t.Fatal(err) - } - - batch := new(leveldb.Batch) - var want uint64 - got, err := counter.DecInBatch(batch) - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err = counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - batch2 := new(leveldb.Batch) - want = 42 - counter.PutInBatch(batch2, want) - err = db.WriteBatch(batch2) - if err != nil { - t.Fatal(err) - } - got, err = counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - - batch3 := new(leveldb.Batch) - want = 41 - got, err = counter.DecInBatch(batch3) - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } - err = db.WriteBatch(batch3) - if err != nil { - t.Fatal(err) - } - got, err = counter.Get() - if err != nil { - t.Fatal(err) - } - if got != want { - t.Errorf("got uint64 %v, want %v", got, want) - } -} diff --git a/swarm/shed/index.go b/swarm/shed/index.go deleted file mode 100644 index df88b1b62dc3..000000000000 --- a/swarm/shed/index.go +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "bytes" - - "github.com/syndtr/goleveldb/leveldb" -) - -// Item holds fields relevant to Swarm Chunk data and metadata. -// All information required for swarm storage and operations -// on that storage must be defined here. -// This structure is logically connected to swarm storage, -// the only part of this package that is not generalized, -// mostly for performance reasons. -// -// Item is a type that is used for retrieving, storing and encoding -// chunk data and metadata. It is passed as an argument to Index encoding -// functions, get function and put function. -// But it is also returned with additional data from get function call -// and as the argument in iterator function definition. -type Item struct { - Address []byte - Data []byte - AccessTimestamp int64 - StoreTimestamp int64 - // UseMockStore is a pointer to identify - // an unset state of the field in Join function. - UseMockStore *bool -} - -// Merge is a helper method to construct a new -// Item by filling up fields with default values -// of a particular Item with values from another one. -func (i Item) Merge(i2 Item) (new Item) { - if i.Address == nil { - i.Address = i2.Address - } - if i.Data == nil { - i.Data = i2.Data - } - if i.AccessTimestamp == 0 { - i.AccessTimestamp = i2.AccessTimestamp - } - if i.StoreTimestamp == 0 { - i.StoreTimestamp = i2.StoreTimestamp - } - if i.UseMockStore == nil { - i.UseMockStore = i2.UseMockStore - } - return i -} - -// Index represents a set of LevelDB key value pairs that have common -// prefix. It holds functions for encoding and decoding keys and values -// to provide transparent actions on saved data which inclide: -// - getting a particular Item -// - saving a particular Item -// - iterating over a sorted LevelDB keys -// It implements IndexIteratorInterface interface. -type Index struct { - db *DB - prefix []byte - encodeKeyFunc func(fields Item) (key []byte, err error) - decodeKeyFunc func(key []byte) (e Item, err error) - encodeValueFunc func(fields Item) (value []byte, err error) - decodeValueFunc func(keyFields Item, value []byte) (e Item, err error) -} - -// IndexFuncs structure defines functions for encoding and decoding -// LevelDB keys and values for a specific index. -type IndexFuncs struct { - EncodeKey func(fields Item) (key []byte, err error) - DecodeKey func(key []byte) (e Item, err error) - EncodeValue func(fields Item) (value []byte, err error) - DecodeValue func(keyFields Item, value []byte) (e Item, err error) -} - -// NewIndex returns a new Index instance with defined name and -// encoding functions. The name must be unique and will be validated -// on database schema for a key prefix byte. -func (db *DB) NewIndex(name string, funcs IndexFuncs) (f Index, err error) { - id, err := db.schemaIndexPrefix(name) - if err != nil { - return f, err - } - prefix := []byte{id} - return Index{ - db: db, - prefix: prefix, - // This function adjusts Index LevelDB key - // by appending the provided index id byte. - // This is needed to avoid collisions between keys of different - // indexes as all index ids are unique. - encodeKeyFunc: func(e Item) (key []byte, err error) { - key, err = funcs.EncodeKey(e) - if err != nil { - return nil, err - } - return append(append(make([]byte, 0, len(key)+1), prefix...), key...), nil - }, - // This function reverses the encodeKeyFunc constructed key - // to transparently work with index keys without their index ids. - // It assumes that index keys are prefixed with only one byte. - decodeKeyFunc: func(key []byte) (e Item, err error) { - return funcs.DecodeKey(key[1:]) - }, - encodeValueFunc: funcs.EncodeValue, - decodeValueFunc: funcs.DecodeValue, - }, nil -} - -// Get accepts key fields represented as Item to retrieve a -// value from the index and return maximum available information -// from the index represented as another Item. -func (f Index) Get(keyFields Item) (out Item, err error) { - key, err := f.encodeKeyFunc(keyFields) - if err != nil { - return out, err - } - value, err := f.db.Get(key) - if err != nil { - return out, err - } - out, err = f.decodeValueFunc(keyFields, value) - if err != nil { - return out, err - } - return out.Merge(keyFields), nil -} - -// Put accepts Item to encode information from it -// and save it to the database. -func (f Index) Put(i Item) (err error) { - key, err := f.encodeKeyFunc(i) - if err != nil { - return err - } - value, err := f.encodeValueFunc(i) - if err != nil { - return err - } - return f.db.Put(key, value) -} - -// PutInBatch is the same as Put method, but it just -// saves the key/value pair to the batch instead -// directly to the database. -func (f Index) PutInBatch(batch *leveldb.Batch, i Item) (err error) { - key, err := f.encodeKeyFunc(i) - if err != nil { - return err - } - value, err := f.encodeValueFunc(i) - if err != nil { - return err - } - batch.Put(key, value) - return nil -} - -// Delete accepts Item to remove a key/value pair -// from the database based on its fields. -func (f Index) Delete(keyFields Item) (err error) { - key, err := f.encodeKeyFunc(keyFields) - if err != nil { - return err - } - return f.db.Delete(key) -} - -// DeleteInBatch is the same as Delete just the operation -// is performed on the batch instead on the database. -func (f Index) DeleteInBatch(batch *leveldb.Batch, keyFields Item) (err error) { - key, err := f.encodeKeyFunc(keyFields) - if err != nil { - return err - } - batch.Delete(key) - return nil -} - -// IndexIterFunc is a callback on every Item that is decoded -// by iterating on an Index keys. -// By returning a true for stop variable, iteration will -// stop, and by returning the error, that error will be -// propagated to the called iterator method on Index. -type IndexIterFunc func(item Item) (stop bool, err error) - -// IterateOptions defines optional parameters for Iterate function. -type IterateOptions struct { - // StartFrom is the Item to start the iteration from. - StartFrom *Item - // If SkipStartFromItem is true, StartFrom item will not - // be iterated on. - SkipStartFromItem bool - // Iterate over items which keys have a common prefix. - Prefix []byte -} - -// Iterate function iterates over keys of the Index. -// If IterateOptions is nil, the iterations is over all keys. -func (f Index) Iterate(fn IndexIterFunc, options *IterateOptions) (err error) { - if options == nil { - options = new(IterateOptions) - } - // construct a prefix with Index prefix and optional common key prefix - prefix := append(f.prefix, options.Prefix...) - // start from the prefix - startKey := prefix - if options.StartFrom != nil { - // start from the provided StartFrom Item key value - startKey, err = f.encodeKeyFunc(*options.StartFrom) - if err != nil { - return err - } - } - it := f.db.NewIterator() - defer it.Release() - - // move the cursor to the start key - ok := it.Seek(startKey) - if !ok { - // stop iterator if seek has failed - return it.Error() - } - if options.SkipStartFromItem && bytes.Equal(startKey, it.Key()) { - // skip the start from Item if it is the first key - // and it is explicitly configured to skip it - ok = it.Next() - } - for ; ok; ok = it.Next() { - key := it.Key() - if !bytes.HasPrefix(key, prefix) { - break - } - // create a copy of key byte slice not to share leveldb underlaying slice array - keyItem, err := f.decodeKeyFunc(append([]byte(nil), key...)) - if err != nil { - return err - } - // create a copy of value byte slice not to share leveldb underlaying slice array - valueItem, err := f.decodeValueFunc(keyItem, append([]byte(nil), it.Value()...)) - if err != nil { - return err - } - stop, err := fn(keyItem.Merge(valueItem)) - if err != nil { - return err - } - if stop { - break - } - } - return it.Error() -} - -// Count returns the number of items in index. -func (f Index) Count() (count int, err error) { - it := f.db.NewIterator() - defer it.Release() - - for ok := it.Seek(f.prefix); ok; ok = it.Next() { - key := it.Key() - if key[0] != f.prefix[0] { - break - } - count++ - } - return count, it.Error() -} - -// CountFrom returns the number of items in index keys -// starting from the key encoded from the provided Item. -func (f Index) CountFrom(start Item) (count int, err error) { - startKey, err := f.encodeKeyFunc(start) - if err != nil { - return 0, err - } - it := f.db.NewIterator() - defer it.Release() - - for ok := it.Seek(startKey); ok; ok = it.Next() { - key := it.Key() - if key[0] != f.prefix[0] { - break - } - count++ - } - return count, it.Error() -} diff --git a/swarm/shed/index_test.go b/swarm/shed/index_test.go deleted file mode 100644 index 97d7c91f439f..000000000000 --- a/swarm/shed/index_test.go +++ /dev/null @@ -1,781 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "bytes" - "encoding/binary" - "fmt" - "sort" - "testing" - "time" - - "github.com/syndtr/goleveldb/leveldb" -) - -// Index functions for the index that is used in tests in this file. -var retrievalIndexFuncs = IndexFuncs{ - EncodeKey: func(fields Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.StoreTimestamp)) - value = append(b, fields.Data...) - return value, nil - }, - DecodeValue: func(keyItem Item, value []byte) (e Item, err error) { - e.StoreTimestamp = int64(binary.BigEndian.Uint64(value[:8])) - e.Data = value[8:] - return e, nil - }, -} - -// TestIndex validates put, get and delete functions of the Index implementation. -func TestIndex(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - index, err := db.NewIndex("retrieval", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - t.Run("put", func(t *testing.T) { - want := Item{ - Address: []byte("put-hash"), - Data: []byte("DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - err := index.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - - t.Run("overwrite", func(t *testing.T) { - want := Item{ - Address: []byte("put-hash"), - Data: []byte("New DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - err = index.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - }) - }) - - t.Run("put in batch", func(t *testing.T) { - want := Item{ - Address: []byte("put-in-batch-hash"), - Data: []byte("DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - batch := new(leveldb.Batch) - index.PutInBatch(batch, want) - err := db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - - t.Run("overwrite", func(t *testing.T) { - want := Item{ - Address: []byte("put-in-batch-hash"), - Data: []byte("New DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - batch := new(leveldb.Batch) - index.PutInBatch(batch, want) - db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - }) - }) - - t.Run("put in batch twice", func(t *testing.T) { - // ensure that the last item of items with the same db keys - // is actually saved - batch := new(leveldb.Batch) - address := []byte("put-in-batch-twice-hash") - - // put the first item - index.PutInBatch(batch, Item{ - Address: address, - Data: []byte("DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - }) - - want := Item{ - Address: address, - Data: []byte("New DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - // then put the item that will produce the same key - // but different value in the database - index.PutInBatch(batch, want) - db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - }) - - t.Run("delete", func(t *testing.T) { - want := Item{ - Address: []byte("delete-hash"), - Data: []byte("DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - err := index.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - - err = index.Delete(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - - wantErr := leveldb.ErrNotFound - got, err = index.Get(Item{ - Address: want.Address, - }) - if err != wantErr { - t.Fatalf("got error %v, want %v", err, wantErr) - } - }) - - t.Run("delete in batch", func(t *testing.T) { - want := Item{ - Address: []byte("delete-in-batch-hash"), - Data: []byte("DATA"), - StoreTimestamp: time.Now().UTC().UnixNano(), - } - - err := index.Put(want) - if err != nil { - t.Fatal(err) - } - got, err := index.Get(Item{ - Address: want.Address, - }) - if err != nil { - t.Fatal(err) - } - checkItem(t, got, want) - - batch := new(leveldb.Batch) - index.DeleteInBatch(batch, Item{ - Address: want.Address, - }) - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - - wantErr := leveldb.ErrNotFound - got, err = index.Get(Item{ - Address: want.Address, - }) - if err != wantErr { - t.Fatalf("got error %v, want %v", err, wantErr) - } - }) -} - -// TestIndex_Iterate validates index Iterate -// functions for correctness. -func TestIndex_Iterate(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - index, err := db.NewIndex("retrieval", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - items := []Item{ - { - Address: []byte("iterate-hash-01"), - Data: []byte("data80"), - }, - { - Address: []byte("iterate-hash-03"), - Data: []byte("data22"), - }, - { - Address: []byte("iterate-hash-05"), - Data: []byte("data41"), - }, - { - Address: []byte("iterate-hash-02"), - Data: []byte("data84"), - }, - { - Address: []byte("iterate-hash-06"), - Data: []byte("data1"), - }, - } - batch := new(leveldb.Batch) - for _, i := range items { - index.PutInBatch(batch, i) - } - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - item04 := Item{ - Address: []byte("iterate-hash-04"), - Data: []byte("data0"), - } - err = index.Put(item04) - if err != nil { - t.Fatal(err) - } - items = append(items, item04) - - sort.SliceStable(items, func(i, j int) bool { - return bytes.Compare(items[i].Address, items[j].Address) < 0 - }) - - t.Run("all", func(t *testing.T) { - var i int - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, nil) - if err != nil { - t.Fatal(err) - } - }) - - t.Run("start from", func(t *testing.T) { - startIndex := 2 - i := startIndex - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, &IterateOptions{ - StartFrom: &items[startIndex], - }) - if err != nil { - t.Fatal(err) - } - }) - - t.Run("skip start from", func(t *testing.T) { - startIndex := 2 - i := startIndex + 1 - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, &IterateOptions{ - StartFrom: &items[startIndex], - SkipStartFromItem: true, - }) - if err != nil { - t.Fatal(err) - } - }) - - t.Run("stop", func(t *testing.T) { - var i int - stopIndex := 3 - var count int - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - count++ - if i == stopIndex { - return true, nil - } - i++ - return false, nil - }, nil) - if err != nil { - t.Fatal(err) - } - wantItemsCount := stopIndex + 1 - if count != wantItemsCount { - t.Errorf("got %v items, expected %v", count, wantItemsCount) - } - }) - - t.Run("no overflow", func(t *testing.T) { - secondIndex, err := db.NewIndex("second-index", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - secondItem := Item{ - Address: []byte("iterate-hash-10"), - Data: []byte("data-second"), - } - err = secondIndex.Put(secondItem) - if err != nil { - t.Fatal(err) - } - - var i int - err = index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, nil) - if err != nil { - t.Fatal(err) - } - - i = 0 - err = secondIndex.Iterate(func(item Item) (stop bool, err error) { - if i > 1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - checkItem(t, item, secondItem) - i++ - return false, nil - }, nil) - if err != nil { - t.Fatal(err) - } - }) -} - -// TestIndex_Iterate_withPrefix validates index Iterate -// function for correctness. -func TestIndex_Iterate_withPrefix(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - index, err := db.NewIndex("retrieval", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - allItems := []Item{ - {Address: []byte("want-hash-00"), Data: []byte("data80")}, - {Address: []byte("skip-hash-01"), Data: []byte("data81")}, - {Address: []byte("skip-hash-02"), Data: []byte("data82")}, - {Address: []byte("skip-hash-03"), Data: []byte("data83")}, - {Address: []byte("want-hash-04"), Data: []byte("data84")}, - {Address: []byte("want-hash-05"), Data: []byte("data85")}, - {Address: []byte("want-hash-06"), Data: []byte("data86")}, - {Address: []byte("want-hash-07"), Data: []byte("data87")}, - {Address: []byte("want-hash-08"), Data: []byte("data88")}, - {Address: []byte("want-hash-09"), Data: []byte("data89")}, - {Address: []byte("skip-hash-10"), Data: []byte("data90")}, - } - batch := new(leveldb.Batch) - for _, i := range allItems { - index.PutInBatch(batch, i) - } - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - - prefix := []byte("want") - - items := make([]Item, 0) - for _, item := range allItems { - if bytes.HasPrefix(item.Address, prefix) { - items = append(items, item) - } - } - sort.SliceStable(items, func(i, j int) bool { - return bytes.Compare(items[i].Address, items[j].Address) < 0 - }) - - t.Run("with prefix", func(t *testing.T) { - var i int - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, &IterateOptions{ - Prefix: prefix, - }) - if err != nil { - t.Fatal(err) - } - if i != len(items) { - t.Errorf("got %v items, want %v", i, len(items)) - } - }) - - t.Run("with prefix and start from", func(t *testing.T) { - startIndex := 2 - var count int - i := startIndex - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - count++ - return false, nil - }, &IterateOptions{ - StartFrom: &items[startIndex], - Prefix: prefix, - }) - if err != nil { - t.Fatal(err) - } - wantCount := len(items) - startIndex - if count != wantCount { - t.Errorf("got %v items, want %v", count, wantCount) - } - }) - - t.Run("with prefix and skip start from", func(t *testing.T) { - startIndex := 2 - var count int - i := startIndex + 1 - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - count++ - return false, nil - }, &IterateOptions{ - StartFrom: &items[startIndex], - SkipStartFromItem: true, - Prefix: prefix, - }) - if err != nil { - t.Fatal(err) - } - wantCount := len(items) - startIndex - 1 - if count != wantCount { - t.Errorf("got %v items, want %v", count, wantCount) - } - }) - - t.Run("stop", func(t *testing.T) { - var i int - stopIndex := 3 - var count int - err := index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - count++ - if i == stopIndex { - return true, nil - } - i++ - return false, nil - }, &IterateOptions{ - Prefix: prefix, - }) - if err != nil { - t.Fatal(err) - } - wantItemsCount := stopIndex + 1 - if count != wantItemsCount { - t.Errorf("got %v items, expected %v", count, wantItemsCount) - } - }) - - t.Run("no overflow", func(t *testing.T) { - secondIndex, err := db.NewIndex("second-index", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - secondItem := Item{ - Address: []byte("iterate-hash-10"), - Data: []byte("data-second"), - } - err = secondIndex.Put(secondItem) - if err != nil { - t.Fatal(err) - } - - var i int - err = index.Iterate(func(item Item) (stop bool, err error) { - if i > len(items)-1 { - return true, fmt.Errorf("got unexpected index item: %#v", item) - } - want := items[i] - checkItem(t, item, want) - i++ - return false, nil - }, &IterateOptions{ - Prefix: prefix, - }) - if err != nil { - t.Fatal(err) - } - if i != len(items) { - t.Errorf("got %v items, want %v", i, len(items)) - } - }) -} - -// TestIndex_count tests if Index.Count and Index.CountFrom -// returns the correct number of items. -func TestIndex_count(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - index, err := db.NewIndex("retrieval", retrievalIndexFuncs) - if err != nil { - t.Fatal(err) - } - - items := []Item{ - { - Address: []byte("iterate-hash-01"), - Data: []byte("data80"), - }, - { - Address: []byte("iterate-hash-02"), - Data: []byte("data84"), - }, - { - Address: []byte("iterate-hash-03"), - Data: []byte("data22"), - }, - { - Address: []byte("iterate-hash-04"), - Data: []byte("data41"), - }, - { - Address: []byte("iterate-hash-05"), - Data: []byte("data1"), - }, - } - batch := new(leveldb.Batch) - for _, i := range items { - index.PutInBatch(batch, i) - } - err = db.WriteBatch(batch) - if err != nil { - t.Fatal(err) - } - - t.Run("Count", func(t *testing.T) { - got, err := index.Count() - if err != nil { - t.Fatal(err) - } - - want := len(items) - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - - t.Run("CountFrom", func(t *testing.T) { - got, err := index.CountFrom(Item{ - Address: items[1].Address, - }) - if err != nil { - t.Fatal(err) - } - - want := len(items) - 1 - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - - // update the index with another item - t.Run("add item", func(t *testing.T) { - item04 := Item{ - Address: []byte("iterate-hash-06"), - Data: []byte("data0"), - } - err = index.Put(item04) - if err != nil { - t.Fatal(err) - } - - count := len(items) + 1 - - t.Run("Count", func(t *testing.T) { - got, err := index.Count() - if err != nil { - t.Fatal(err) - } - - want := count - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - - t.Run("CountFrom", func(t *testing.T) { - got, err := index.CountFrom(Item{ - Address: items[1].Address, - }) - if err != nil { - t.Fatal(err) - } - - want := count - 1 - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - }) - - // delete some items - t.Run("delete items", func(t *testing.T) { - deleteCount := 3 - - for _, item := range items[:deleteCount] { - err := index.Delete(item) - if err != nil { - t.Fatal(err) - } - } - - count := len(items) + 1 - deleteCount - - t.Run("Count", func(t *testing.T) { - got, err := index.Count() - if err != nil { - t.Fatal(err) - } - - want := count - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - - t.Run("CountFrom", func(t *testing.T) { - got, err := index.CountFrom(Item{ - Address: items[deleteCount+1].Address, - }) - if err != nil { - t.Fatal(err) - } - - want := count - 1 - if got != want { - t.Errorf("got %v items count, want %v", got, want) - } - }) - }) -} - -// checkItem is a test helper function that compares if two Index items are the same. -func checkItem(t *testing.T, got, want Item) { - t.Helper() - - if !bytes.Equal(got.Address, want.Address) { - t.Errorf("got hash %q, expected %q", string(got.Address), string(want.Address)) - } - if !bytes.Equal(got.Data, want.Data) { - t.Errorf("got data %q, expected %q", string(got.Data), string(want.Data)) - } - if got.StoreTimestamp != want.StoreTimestamp { - t.Errorf("got store timestamp %v, expected %v", got.StoreTimestamp, want.StoreTimestamp) - } - if got.AccessTimestamp != want.AccessTimestamp { - t.Errorf("got access timestamp %v, expected %v", got.AccessTimestamp, want.AccessTimestamp) - } -} diff --git a/swarm/shed/schema.go b/swarm/shed/schema.go deleted file mode 100644 index cfb7c6d64269..000000000000 --- a/swarm/shed/schema.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "encoding/json" - "errors" - "fmt" -) - -var ( - // LevelDB key value for storing the schema. - keySchema = []byte{0} - // LevelDB key prefix for all field type. - // LevelDB keys will be constructed by appending name values to this prefix. - keyPrefixFields byte = 1 - // LevelDB key prefix from which indexing keys start. - // Every index has its own key prefix and this value defines the first one. - keyPrefixIndexStart byte = 2 // Q: or maybe a higher number like 7, to have more space for potential specific perfixes -) - -// schema is used to serialize known database structure information. -type schema struct { - Fields map[string]fieldSpec `json:"fields"` // keys are field names - Indexes map[byte]indexSpec `json:"indexes"` // keys are index prefix bytes -} - -// fieldSpec holds information about a particular field. -// It does not need Name field as it is contained in the -// schema.Field map key. -type fieldSpec struct { - Type string `json:"type"` -} - -// indxSpec holds information about a particular index. -// It does not contain index type, as indexes do not have type. -type indexSpec struct { - Name string `json:"name"` -} - -// schemaFieldKey retrives the complete LevelDB key for -// a particular field form the schema definition. -func (db *DB) schemaFieldKey(name, fieldType string) (key []byte, err error) { - if name == "" { - return nil, errors.New("field name can not be blank") - } - if fieldType == "" { - return nil, errors.New("field type can not be blank") - } - s, err := db.getSchema() - if err != nil { - return nil, err - } - var found bool - for n, f := range s.Fields { - if n == name { - if f.Type != fieldType { - return nil, fmt.Errorf("field %q of type %q stored as %q in db", name, fieldType, f.Type) - } - break - } - } - if !found { - s.Fields[name] = fieldSpec{ - Type: fieldType, - } - err := db.putSchema(s) - if err != nil { - return nil, err - } - } - return append([]byte{keyPrefixFields}, []byte(name)...), nil -} - -// schemaIndexID retrieves the complete LevelDB prefix for -// a particular index. -func (db *DB) schemaIndexPrefix(name string) (id byte, err error) { - if name == "" { - return 0, errors.New("index name can not be blank") - } - s, err := db.getSchema() - if err != nil { - return 0, err - } - nextID := keyPrefixIndexStart - for i, f := range s.Indexes { - if i >= nextID { - nextID = i + 1 - } - if f.Name == name { - return i, nil - } - } - id = nextID - s.Indexes[id] = indexSpec{ - Name: name, - } - return id, db.putSchema(s) -} - -// getSchema retrieves the complete schema from -// the database. -func (db *DB) getSchema() (s schema, err error) { - b, err := db.Get(keySchema) - if err != nil { - return s, err - } - err = json.Unmarshal(b, &s) - return s, err -} - -// putSchema stores the complete schema to -// the database. -func (db *DB) putSchema(s schema) (err error) { - b, err := json.Marshal(s) - if err != nil { - return err - } - return db.Put(keySchema, b) -} diff --git a/swarm/shed/schema_test.go b/swarm/shed/schema_test.go deleted file mode 100644 index a0c1838c8bc8..000000000000 --- a/swarm/shed/schema_test.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package shed - -import ( - "bytes" - "testing" -) - -// TestDB_schemaFieldKey validates correctness of schemaFieldKey. -func TestDB_schemaFieldKey(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - t.Run("empty name or type", func(t *testing.T) { - _, err := db.schemaFieldKey("", "") - if err == nil { - t.Errorf("error not returned, but expected") - } - _, err = db.schemaFieldKey("", "type") - if err == nil { - t.Errorf("error not returned, but expected") - } - - _, err = db.schemaFieldKey("test", "") - if err == nil { - t.Errorf("error not returned, but expected") - } - }) - - t.Run("same field", func(t *testing.T) { - key1, err := db.schemaFieldKey("test", "undefined") - if err != nil { - t.Fatal(err) - } - - key2, err := db.schemaFieldKey("test", "undefined") - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(key1, key2) { - t.Errorf("schema keys for the same field name are not the same: %q, %q", string(key1), string(key2)) - } - }) - - t.Run("different fields", func(t *testing.T) { - key1, err := db.schemaFieldKey("test1", "undefined") - if err != nil { - t.Fatal(err) - } - - key2, err := db.schemaFieldKey("test2", "undefined") - if err != nil { - t.Fatal(err) - } - - if bytes.Equal(key1, key2) { - t.Error("schema keys for the same field name are the same, but must not be") - } - }) - - t.Run("same field name different types", func(t *testing.T) { - _, err := db.schemaFieldKey("the-field", "one-type") - if err != nil { - t.Fatal(err) - } - - _, err = db.schemaFieldKey("the-field", "another-type") - if err == nil { - t.Errorf("error not returned, but expected") - } - }) -} - -// TestDB_schemaIndexPrefix validates correctness of schemaIndexPrefix. -func TestDB_schemaIndexPrefix(t *testing.T) { - db, cleanupFunc := newTestDB(t) - defer cleanupFunc() - - t.Run("same name", func(t *testing.T) { - id1, err := db.schemaIndexPrefix("test") - if err != nil { - t.Fatal(err) - } - - id2, err := db.schemaIndexPrefix("test") - if err != nil { - t.Fatal(err) - } - - if id1 != id2 { - t.Errorf("schema keys for the same field name are not the same: %v, %v", id1, id2) - } - }) - - t.Run("different names", func(t *testing.T) { - id1, err := db.schemaIndexPrefix("test1") - if err != nil { - t.Fatal(err) - } - - id2, err := db.schemaIndexPrefix("test2") - if err != nil { - t.Fatal(err) - } - - if id1 == id2 { - t.Error("schema ids for the same index name are the same, but must not be") - } - }) -} diff --git a/swarm/spancontext/spancontext.go b/swarm/spancontext/spancontext.go deleted file mode 100644 index 2cb9f82f7c9e..000000000000 --- a/swarm/spancontext/spancontext.go +++ /dev/null @@ -1,49 +0,0 @@ -package spancontext - -import ( - "context" - - opentracing "github.com/opentracing/opentracing-go" -) - -func WithContext(ctx context.Context, sctx opentracing.SpanContext) context.Context { - return context.WithValue(ctx, "span_context", sctx) -} - -func FromContext(ctx context.Context) opentracing.SpanContext { - sctx, ok := ctx.Value("span_context").(opentracing.SpanContext) - if ok { - return sctx - } - - return nil -} - -func StartSpan(ctx context.Context, name string) (context.Context, opentracing.Span) { - tracer := opentracing.GlobalTracer() - - sctx := FromContext(ctx) - - var sp opentracing.Span - if sctx != nil { - sp = tracer.StartSpan( - name, - opentracing.ChildOf(sctx)) - } else { - sp = tracer.StartSpan(name) - } - - nctx := context.WithValue(ctx, "span_context", sp.Context()) - - return nctx, sp -} - -func StartSpanFrom(name string, sctx opentracing.SpanContext) opentracing.Span { - tracer := opentracing.GlobalTracer() - - sp := tracer.StartSpan( - name, - opentracing.ChildOf(sctx)) - - return sp -} diff --git a/swarm/state/dbstore.go b/swarm/state/dbstore.go deleted file mode 100644 index 1b541e78547b..000000000000 --- a/swarm/state/dbstore.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package state - -import ( - "encoding" - "encoding/json" - "errors" - - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/storage" -) - -// ErrNotFound is returned when no results are returned from the database -var ErrNotFound = errors.New("ErrorNotFound") - -// Store defines methods required to get, set, delete values for different keys -// and close the underlying resources. -type Store interface { - Get(key string, i interface{}) (err error) - Put(key string, i interface{}) (err error) - Delete(key string) (err error) - Close() error -} - -// DBStore uses LevelDB to store values. -type DBStore struct { - db *leveldb.DB -} - -// NewDBStore creates a new instance of DBStore. -func NewDBStore(path string) (s *DBStore, err error) { - db, err := leveldb.OpenFile(path, nil) - if err != nil { - return nil, err - } - return &DBStore{ - db: db, - }, nil -} - -// NewInmemoryStore returns a new instance of DBStore. To be used only in tests and simulations. -func NewInmemoryStore() *DBStore { - db, err := leveldb.Open(storage.NewMemStorage(), nil) - if err != nil { - panic(err) - } - return &DBStore{ - db: db, - } -} - -// Get retrieves a persisted value for a specific key. If there is no results -// ErrNotFound is returned. The provided parameter should be either a byte slice or -// a struct that implements the encoding.BinaryUnmarshaler interface -func (s *DBStore) Get(key string, i interface{}) (err error) { - has, err := s.db.Has([]byte(key), nil) - if err != nil || !has { - return ErrNotFound - } - - data, err := s.db.Get([]byte(key), nil) - if err == leveldb.ErrNotFound { - return ErrNotFound - } - - unmarshaler, ok := i.(encoding.BinaryUnmarshaler) - if !ok { - return json.Unmarshal(data, i) - } - return unmarshaler.UnmarshalBinary(data) -} - -// Put stores an object that implements Binary for a specific key. -func (s *DBStore) Put(key string, i interface{}) (err error) { - var bytes []byte - if marshaler, ok := i.(encoding.BinaryMarshaler); ok { - if bytes, err = marshaler.MarshalBinary(); err != nil { - return err - } - } else { - if bytes, err = json.Marshal(i); err != nil { - return err - } - } - return s.db.Put([]byte(key), bytes, nil) -} - -// Delete removes entries stored under a specific key. -func (s *DBStore) Delete(key string) (err error) { - return s.db.Delete([]byte(key), nil) -} - -// Close releases the resources used by the underlying LevelDB. -func (s *DBStore) Close() error { - return s.db.Close() -} diff --git a/swarm/state/dbstore_test.go b/swarm/state/dbstore_test.go deleted file mode 100644 index f7098956d038..000000000000 --- a/swarm/state/dbstore_test.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package state - -import ( - "bytes" - "errors" - "io/ioutil" - "os" - "strings" - "testing" -) - -var ErrInvalidArraySize = errors.New("invalid byte array size") -var ErrInvalidValuePersisted = errors.New("invalid value was persisted to the db") - -type SerializingType struct { - key string - value string -} - -func (st *SerializingType) MarshalBinary() (data []byte, err error) { - d := []byte(strings.Join([]string{st.key, st.value}, ";")) - - return d, nil -} - -func (st *SerializingType) UnmarshalBinary(data []byte) (err error) { - d := bytes.Split(data, []byte(";")) - l := len(d) - if l == 0 { - return ErrInvalidArraySize - } - if l == 2 { - keyLen := len(d[0]) - st.key = string(d[0][:keyLen]) - - valLen := len(d[1]) - st.value = string(d[1][:valLen]) - } - - return nil -} - -// TestDBStore tests basic functionality of DBStore. -func TestDBStore(t *testing.T) { - dir, err := ioutil.TempDir("", "db_store_test") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir) - - store, err := NewDBStore(dir) - if err != nil { - t.Fatal(err) - } - - testStore(t, store) - - store.Close() - - persistedStore, err := NewDBStore(dir) - if err != nil { - t.Fatal(err) - } - defer persistedStore.Close() - - testPersistedStore(t, persistedStore) -} - -func testStore(t *testing.T, store Store) { - ser := &SerializingType{key: "key1", value: "value1"} - jsonify := []string{"a", "b", "c"} - - err := store.Put(ser.key, ser) - if err != nil { - t.Fatal(err) - } - - err = store.Put("key2", jsonify) - if err != nil { - t.Fatal(err) - } - -} - -func testPersistedStore(t *testing.T, store Store) { - ser := &SerializingType{} - - err := store.Get("key1", ser) - if err != nil { - t.Fatal(err) - } - - if ser.key != "key1" || ser.value != "value1" { - t.Fatal(ErrInvalidValuePersisted) - } - - as := []string{} - err = store.Get("key2", &as) - if err != nil { - t.Fatal(err) - } - - if len(as) != 3 { - t.Fatalf("serialized array did not match expectation") - } - if as[0] != "a" || as[1] != "b" || as[2] != "c" { - t.Fatalf("elements serialized did not match expected values") - } -} diff --git a/swarm/storage/chunker.go b/swarm/storage/chunker.go deleted file mode 100644 index 0fa5026dcd65..000000000000 --- a/swarm/storage/chunker.go +++ /dev/null @@ -1,613 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package storage - -import ( - "context" - "encoding/binary" - "errors" - "fmt" - "io" - "sync" - "time" - - "github.com/ethereum/go-ethereum/metrics" - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/spancontext" - opentracing "github.com/opentracing/opentracing-go" - olog "github.com/opentracing/opentracing-go/log" -) - -/* -The distributed storage implemented in this package requires fix sized chunks of content. - -Chunker is the interface to a component that is responsible for disassembling and assembling larger data. - -TreeChunker implements a Chunker based on a tree structure defined as follows: - -1 each node in the tree including the root and other branching nodes are stored as a chunk. - -2 branching nodes encode data contents that includes the size of the dataslice covered by its entire subtree under the node as well as the hash keys of all its children : -data_{i} := size(subtree_{i}) || key_{j} || key_{j+1} .... || key_{j+n-1} - -3 Leaf nodes encode an actual subslice of the input data. - -4 if data size is not more than maximum chunksize, the data is stored in a single chunk - key = hash(int64(size) + data) - -5 if data size is more than chunksize*branches^l, but no more than chunksize* - branches^(l+1), the data vector is split into slices of chunksize* - branches^l length (except the last one). - key = hash(int64(size) + key(slice0) + key(slice1) + ...) - - The underlying hash function is configurable -*/ - -/* -Tree chunker is a concrete implementation of data chunking. -This chunker works in a simple way, it builds a tree out of the document so that each node either represents a chunk of real data or a chunk of data representing an branching non-leaf node of the tree. In particular each such non-leaf chunk will represent is a concatenation of the hash of its respective children. This scheme simultaneously guarantees data integrity as well as self addressing. Abstract nodes are transparent since their represented size component is strictly greater than their maximum data size, since they encode a subtree. - -If all is well it is possible to implement this by simply composing readers so that no extra allocation or buffering is necessary for the data splitting and joining. This means that in principle there can be direct IO between : memory, file system, network socket (bzz peers storage request is read from the socket). In practice there may be need for several stages of internal buffering. -The hashing itself does use extra copies and allocation though, since it does need it. -*/ - -type ChunkerParams struct { - chunkSize int64 - hashSize int64 -} - -type SplitterParams struct { - ChunkerParams - reader io.Reader - putter Putter - addr Address -} - -type TreeSplitterParams struct { - SplitterParams - size int64 -} - -type JoinerParams struct { - ChunkerParams - addr Address - getter Getter - // TODO: there is a bug, so depth can only be 0 today, see: https://github.com/ethersphere/go-ethereum/issues/344 - depth int - ctx context.Context -} - -type TreeChunker struct { - ctx context.Context - - branches int64 - dataSize int64 - data io.Reader - // calculated - addr Address - depth int - hashSize int64 // self.hashFunc.New().Size() - chunkSize int64 // hashSize* branches - workerCount int64 // the number of worker routines used - workerLock sync.RWMutex // lock for the worker count - jobC chan *hashJob - wg *sync.WaitGroup - putter Putter - getter Getter - errC chan error - quitC chan bool -} - -/* - Join reconstructs original content based on a root key. - When joining, the caller gets returned a Lazy SectionReader, which is - seekable and implements on-demand fetching of chunks as and where it is read. - New chunks to retrieve are coming from the getter, which the caller provides. - If an error is encountered during joining, it appears as a reader error. - The SectionReader. - As a result, partial reads from a document are possible even if other parts - are corrupt or lost. - The chunks are not meant to be validated by the chunker when joining. This - is because it is left to the DPA to decide which sources are trusted. -*/ -func TreeJoin(ctx context.Context, addr Address, getter Getter, depth int) *LazyChunkReader { - jp := &JoinerParams{ - ChunkerParams: ChunkerParams{ - chunkSize: ch.DefaultSize, - hashSize: int64(len(addr)), - }, - addr: addr, - getter: getter, - depth: depth, - ctx: ctx, - } - - return NewTreeJoiner(jp).Join(ctx) -} - -/* - When splitting, data is given as a SectionReader, and the key is a hashSize long byte slice (Key), the root hash of the entire content will fill this once processing finishes. - New chunks to store are store using the putter which the caller provides. -*/ -func TreeSplit(ctx context.Context, data io.Reader, size int64, putter Putter) (k Address, wait func(context.Context) error, err error) { - tsp := &TreeSplitterParams{ - SplitterParams: SplitterParams{ - ChunkerParams: ChunkerParams{ - chunkSize: ch.DefaultSize, - hashSize: putter.RefSize(), - }, - reader: data, - putter: putter, - }, - size: size, - } - return NewTreeSplitter(tsp).Split(ctx) -} - -func NewTreeJoiner(params *JoinerParams) *TreeChunker { - tc := &TreeChunker{} - tc.hashSize = params.hashSize - tc.branches = params.chunkSize / params.hashSize - tc.addr = params.addr - tc.getter = params.getter - tc.depth = params.depth - tc.chunkSize = params.chunkSize - tc.workerCount = 0 - tc.jobC = make(chan *hashJob, 2*ChunkProcessors) - tc.wg = &sync.WaitGroup{} - tc.errC = make(chan error) - tc.quitC = make(chan bool) - - tc.ctx = params.ctx - - return tc -} - -func NewTreeSplitter(params *TreeSplitterParams) *TreeChunker { - tc := &TreeChunker{} - tc.data = params.reader - tc.dataSize = params.size - tc.hashSize = params.hashSize - tc.branches = params.chunkSize / params.hashSize - tc.addr = params.addr - tc.chunkSize = params.chunkSize - tc.putter = params.putter - tc.workerCount = 0 - tc.jobC = make(chan *hashJob, 2*ChunkProcessors) - tc.wg = &sync.WaitGroup{} - tc.errC = make(chan error) - tc.quitC = make(chan bool) - - return tc -} - -type hashJob struct { - key Address - chunk []byte - size int64 - parentWg *sync.WaitGroup -} - -func (tc *TreeChunker) incrementWorkerCount() { - tc.workerLock.Lock() - defer tc.workerLock.Unlock() - tc.workerCount += 1 -} - -func (tc *TreeChunker) getWorkerCount() int64 { - tc.workerLock.RLock() - defer tc.workerLock.RUnlock() - return tc.workerCount -} - -func (tc *TreeChunker) decrementWorkerCount() { - tc.workerLock.Lock() - defer tc.workerLock.Unlock() - tc.workerCount -= 1 -} - -func (tc *TreeChunker) Split(ctx context.Context) (k Address, wait func(context.Context) error, err error) { - if tc.chunkSize <= 0 { - panic("chunker must be initialised") - } - - tc.runWorker(ctx) - - depth := 0 - treeSize := tc.chunkSize - - // takes lowest depth such that chunksize*HashCount^(depth+1) > size - // power series, will find the order of magnitude of the data size in base hashCount or numbers of levels of branching in the resulting tree. - for ; treeSize < tc.dataSize; treeSize *= tc.branches { - depth++ - } - - key := make([]byte, tc.hashSize) - // this waitgroup member is released after the root hash is calculated - tc.wg.Add(1) - //launch actual recursive function passing the waitgroups - go tc.split(ctx, depth, treeSize/tc.branches, key, tc.dataSize, tc.wg) - - // closes internal error channel if all subprocesses in the workgroup finished - go func() { - // waiting for all threads to finish - tc.wg.Wait() - close(tc.errC) - }() - - defer close(tc.quitC) - defer tc.putter.Close() - select { - case err := <-tc.errC: - if err != nil { - return nil, nil, err - } - case <-ctx.Done(): - return nil, nil, ctx.Err() - } - - return key, tc.putter.Wait, nil -} - -func (tc *TreeChunker) split(ctx context.Context, depth int, treeSize int64, addr Address, size int64, parentWg *sync.WaitGroup) { - - // - - for depth > 0 && size < treeSize { - treeSize /= tc.branches - depth-- - } - - if depth == 0 { - // leaf nodes -> content chunks - chunkData := make([]byte, size+8) - binary.LittleEndian.PutUint64(chunkData[0:8], uint64(size)) - var readBytes int64 - for readBytes < size { - n, err := tc.data.Read(chunkData[8+readBytes:]) - readBytes += int64(n) - if err != nil && !(err == io.EOF && readBytes == size) { - tc.errC <- err - return - } - } - select { - case tc.jobC <- &hashJob{addr, chunkData, size, parentWg}: - case <-tc.quitC: - } - return - } - // dept > 0 - // intermediate chunk containing child nodes hashes - branchCnt := (size + treeSize - 1) / treeSize - - var chunk = make([]byte, branchCnt*tc.hashSize+8) - var pos, i int64 - - binary.LittleEndian.PutUint64(chunk[0:8], uint64(size)) - - childrenWg := &sync.WaitGroup{} - var secSize int64 - for i < branchCnt { - // the last item can have shorter data - if size-pos < treeSize { - secSize = size - pos - } else { - secSize = treeSize - } - // the hash of that data - subTreeAddress := chunk[8+i*tc.hashSize : 8+(i+1)*tc.hashSize] - - childrenWg.Add(1) - tc.split(ctx, depth-1, treeSize/tc.branches, subTreeAddress, secSize, childrenWg) - - i++ - pos += treeSize - } - // wait for all the children to complete calculating their hashes and copying them onto sections of the chunk - // parentWg.Add(1) - // go func() { - childrenWg.Wait() - - worker := tc.getWorkerCount() - if int64(len(tc.jobC)) > worker && worker < ChunkProcessors { - tc.runWorker(ctx) - - } - select { - case tc.jobC <- &hashJob{addr, chunk, size, parentWg}: - case <-tc.quitC: - } -} - -func (tc *TreeChunker) runWorker(ctx context.Context) { - tc.incrementWorkerCount() - go func() { - defer tc.decrementWorkerCount() - for { - select { - - case job, ok := <-tc.jobC: - if !ok { - return - } - - h, err := tc.putter.Put(ctx, job.chunk) - if err != nil { - tc.errC <- err - return - } - copy(job.key, h) - job.parentWg.Done() - case <-tc.quitC: - return - } - } - }() -} - -// LazyChunkReader implements LazySectionReader -type LazyChunkReader struct { - ctx context.Context - addr Address // root address - chunkData ChunkData - off int64 // offset - chunkSize int64 // inherit from chunker - branches int64 // inherit from chunker - hashSize int64 // inherit from chunker - depth int - getter Getter -} - -func (tc *TreeChunker) Join(ctx context.Context) *LazyChunkReader { - return &LazyChunkReader{ - addr: tc.addr, - chunkSize: tc.chunkSize, - branches: tc.branches, - hashSize: tc.hashSize, - depth: tc.depth, - getter: tc.getter, - ctx: tc.ctx, - } -} - -func (r *LazyChunkReader) Context() context.Context { - return r.ctx -} - -// Size is meant to be called on the LazySectionReader -func (r *LazyChunkReader) Size(ctx context.Context, quitC chan bool) (n int64, err error) { - metrics.GetOrRegisterCounter("lazychunkreader.size", nil).Inc(1) - - var sp opentracing.Span - var cctx context.Context - cctx, sp = spancontext.StartSpan( - ctx, - "lcr.size") - defer sp.Finish() - - log.Debug("lazychunkreader.size", "addr", r.addr) - if r.chunkData == nil { - startTime := time.Now() - chunkData, err := r.getter.Get(cctx, Reference(r.addr)) - if err != nil { - metrics.GetOrRegisterResettingTimer("lcr.getter.get.err", nil).UpdateSince(startTime) - return 0, err - } - metrics.GetOrRegisterResettingTimer("lcr.getter.get", nil).UpdateSince(startTime) - r.chunkData = chunkData - } - - s := r.chunkData.Size() - log.Debug("lazychunkreader.size", "key", r.addr, "size", s) - - return int64(s), nil -} - -// read at can be called numerous times -// concurrent reads are allowed -// Size() needs to be called synchronously on the LazyChunkReader first -func (r *LazyChunkReader) ReadAt(b []byte, off int64) (read int, err error) { - metrics.GetOrRegisterCounter("lazychunkreader.readat", nil).Inc(1) - - var sp opentracing.Span - var cctx context.Context - cctx, sp = spancontext.StartSpan( - r.ctx, - "lcr.read") - defer sp.Finish() - - defer func() { - sp.LogFields( - olog.Int("off", int(off)), - olog.Int("read", read)) - }() - - // this is correct, a swarm doc cannot be zero length, so no EOF is expected - if len(b) == 0 { - return 0, nil - } - quitC := make(chan bool) - size, err := r.Size(cctx, quitC) - if err != nil { - log.Debug("lazychunkreader.readat.size", "size", size, "err", err) - return 0, err - } - - errC := make(chan error) - - // } - var treeSize int64 - var depth int - // calculate depth and max treeSize - treeSize = r.chunkSize - for ; treeSize < size; treeSize *= r.branches { - depth++ - } - wg := sync.WaitGroup{} - length := int64(len(b)) - for d := 0; d < r.depth; d++ { - off *= r.chunkSize - length *= r.chunkSize - } - wg.Add(1) - go r.join(cctx, b, off, off+length, depth, treeSize/r.branches, r.chunkData, &wg, errC, quitC) - go func() { - wg.Wait() - close(errC) - }() - - err = <-errC - if err != nil { - log.Debug("lazychunkreader.readat.errc", "err", err) - close(quitC) - return 0, err - } - if off+int64(len(b)) >= size { - log.Debug("lazychunkreader.readat.return at end", "size", size, "off", off) - return int(size - off), io.EOF - } - log.Debug("lazychunkreader.readat.errc", "buff", len(b)) - return len(b), nil -} - -func (r *LazyChunkReader) join(ctx context.Context, b []byte, off int64, eoff int64, depth int, treeSize int64, chunkData ChunkData, parentWg *sync.WaitGroup, errC chan error, quitC chan bool) { - defer parentWg.Done() - // find appropriate block level - for chunkData.Size() < uint64(treeSize) && depth > r.depth { - treeSize /= r.branches - depth-- - } - - // leaf chunk found - if depth == r.depth { - extra := 8 + eoff - int64(len(chunkData)) - if extra > 0 { - eoff -= extra - } - copy(b, chunkData[8+off:8+eoff]) - return // simply give back the chunks reader for content chunks - } - - // subtree - start := off / treeSize - end := (eoff + treeSize - 1) / treeSize - - // last non-leaf chunk can be shorter than default chunk size, let's not read it further then its end - currentBranches := int64(len(chunkData)-8) / r.hashSize - if end > currentBranches { - end = currentBranches - } - - wg := &sync.WaitGroup{} - defer wg.Wait() - for i := start; i < end; i++ { - soff := i * treeSize - roff := soff - seoff := soff + treeSize - - if soff < off { - soff = off - } - if seoff > eoff { - seoff = eoff - } - if depth > 1 { - wg.Wait() - } - wg.Add(1) - go func(j int64) { - childAddress := chunkData[8+j*r.hashSize : 8+(j+1)*r.hashSize] - startTime := time.Now() - chunkData, err := r.getter.Get(ctx, Reference(childAddress)) - if err != nil { - metrics.GetOrRegisterResettingTimer("lcr.getter.get.err", nil).UpdateSince(startTime) - log.Debug("lazychunkreader.join", "key", fmt.Sprintf("%x", childAddress), "err", err) - select { - case errC <- fmt.Errorf("chunk %v-%v not found; key: %s", off, off+treeSize, fmt.Sprintf("%x", childAddress)): - case <-quitC: - } - return - } - metrics.GetOrRegisterResettingTimer("lcr.getter.get", nil).UpdateSince(startTime) - if l := len(chunkData); l < 9 { - select { - case errC <- fmt.Errorf("chunk %v-%v incomplete; key: %s, data length %v", off, off+treeSize, fmt.Sprintf("%x", childAddress), l): - case <-quitC: - } - return - } - if soff < off { - soff = off - } - r.join(ctx, b[soff-off:seoff-off], soff-roff, seoff-roff, depth-1, treeSize/r.branches, chunkData, wg, errC, quitC) - }(i) - } //for -} - -// Read keeps a cursor so cannot be called simulateously, see ReadAt -func (r *LazyChunkReader) Read(b []byte) (read int, err error) { - log.Debug("lazychunkreader.read", "key", r.addr) - metrics.GetOrRegisterCounter("lazychunkreader.read", nil).Inc(1) - - read, err = r.ReadAt(b, r.off) - if err != nil && err != io.EOF { - log.Debug("lazychunkreader.readat", "read", read, "err", err) - metrics.GetOrRegisterCounter("lazychunkreader.read.err", nil).Inc(1) - } - - metrics.GetOrRegisterCounter("lazychunkreader.read.bytes", nil).Inc(int64(read)) - - r.off += int64(read) - return read, err -} - -// completely analogous to standard SectionReader implementation -var errWhence = errors.New("Seek: invalid whence") -var errOffset = errors.New("Seek: invalid offset") - -func (r *LazyChunkReader) Seek(offset int64, whence int) (int64, error) { - cctx, sp := spancontext.StartSpan( - r.ctx, - "lcr.seek") - defer sp.Finish() - - log.Debug("lazychunkreader.seek", "key", r.addr, "offset", offset) - switch whence { - default: - return 0, errWhence - case 0: - offset += 0 - case 1: - offset += r.off - case 2: - - if r.chunkData == nil { //seek from the end requires rootchunk for size. call Size first - _, err := r.Size(cctx, nil) - if err != nil { - return 0, fmt.Errorf("can't get size: %v", err) - } - } - offset += int64(r.chunkData.Size()) - } - - if offset < 0 { - return 0, errOffset - } - r.off = offset - return offset, nil -} diff --git a/swarm/storage/chunker_test.go b/swarm/storage/chunker_test.go deleted file mode 100644 index 9a1259444354..000000000000 --- a/swarm/storage/chunker_test.go +++ /dev/null @@ -1,467 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "encoding/binary" - "fmt" - "io" - "testing" - - "github.com/ethereum/go-ethereum/swarm/testutil" - "golang.org/x/crypto/sha3" -) - -/* -Tests TreeChunker by splitting and joining a random byte slice -*/ - -type test interface { - Fatalf(string, ...interface{}) - Logf(string, ...interface{}) -} - -type chunkerTester struct { - inputs map[uint64][]byte - t test -} - -func newTestHasherStore(store ChunkStore, hash string) *hasherStore { - return NewHasherStore(store, MakeHashFunc(hash), false) -} - -func testRandomBrokenData(n int, tester *chunkerTester) { - data := testutil.RandomReader(1, n) - brokendata := brokenLimitReader(data, n, n/2) - - buf := make([]byte, n) - _, err := brokendata.Read(buf) - if err == nil || err.Error() != "Broken reader" { - tester.t.Fatalf("Broken reader is not broken, hence broken. Returns: %v", err) - } - - data = testutil.RandomReader(2, n) - brokendata = brokenLimitReader(data, n, n/2) - - putGetter := newTestHasherStore(NewMapChunkStore(), SHA3Hash) - - expectedError := fmt.Errorf("Broken reader") - ctx := context.Background() - key, _, err := TreeSplit(ctx, brokendata, int64(n), putGetter) - if err == nil || err.Error() != expectedError.Error() { - tester.t.Fatalf("Not receiving the correct error! Expected %v, received %v", expectedError, err) - } - tester.t.Logf(" Address = %v\n", key) -} - -func testRandomData(usePyramid bool, hash string, n int, tester *chunkerTester) Address { - if tester.inputs == nil { - tester.inputs = make(map[uint64][]byte) - } - input, found := tester.inputs[uint64(n)] - var data io.Reader - if !found { - input = testutil.RandomBytes(1, n) - data = bytes.NewReader(input) - tester.inputs[uint64(n)] = input - } else { - data = io.LimitReader(bytes.NewReader(input), int64(n)) - } - - putGetter := newTestHasherStore(NewMapChunkStore(), hash) - - var addr Address - var wait func(context.Context) error - var err error - ctx := context.TODO() - if usePyramid { - addr, wait, err = PyramidSplit(ctx, data, putGetter, putGetter) - } else { - addr, wait, err = TreeSplit(ctx, data, int64(n), putGetter) - } - if err != nil { - tester.t.Fatalf(err.Error()) - } - tester.t.Logf(" Address = %v\n", addr) - err = wait(ctx) - if err != nil { - tester.t.Fatalf(err.Error()) - } - - reader := TreeJoin(ctx, addr, putGetter, 0) - output := make([]byte, n) - r, err := reader.Read(output) - if r != n || err != io.EOF { - tester.t.Fatalf("read error read: %v n = %v err = %v\n", r, n, err) - } - if input != nil { - if !bytes.Equal(output, input) { - tester.t.Fatalf("input and output mismatch\n IN: %v\nOUT: %v\n", input, output) - } - } - - // testing partial read - for i := 1; i < n; i += 10000 { - readableLength := n - i - r, err := reader.ReadAt(output, int64(i)) - if r != readableLength || err != io.EOF { - tester.t.Fatalf("readAt error with offset %v read: %v n = %v err = %v\n", i, r, readableLength, err) - } - if input != nil { - if !bytes.Equal(output[:readableLength], input[i:]) { - tester.t.Fatalf("input and output mismatch\n IN: %v\nOUT: %v\n", input[i:], output[:readableLength]) - } - } - } - - return addr -} - -func TestSha3ForCorrectness(t *testing.T) { - tester := &chunkerTester{t: t} - - size := 4096 - input := make([]byte, size+8) - binary.LittleEndian.PutUint64(input[:8], uint64(size)) - - io.LimitReader(bytes.NewReader(input[8:]), int64(size)) - - rawSha3 := sha3.NewLegacyKeccak256() - rawSha3.Reset() - rawSha3.Write(input) - rawSha3Output := rawSha3.Sum(nil) - - sha3FromMakeFunc := MakeHashFunc(SHA3Hash)() - sha3FromMakeFunc.ResetWithLength(input[:8]) - sha3FromMakeFunc.Write(input[8:]) - sha3FromMakeFuncOutput := sha3FromMakeFunc.Sum(nil) - - if len(rawSha3Output) != len(sha3FromMakeFuncOutput) { - tester.t.Fatalf("Original SHA3 and abstracted Sha3 has different length %v:%v\n", len(rawSha3Output), len(sha3FromMakeFuncOutput)) - } - - if !bytes.Equal(rawSha3Output, sha3FromMakeFuncOutput) { - tester.t.Fatalf("Original SHA3 and abstracted Sha3 mismatch %v:%v\n", rawSha3Output, sha3FromMakeFuncOutput) - } - -} - -func TestDataAppend(t *testing.T) { - sizes := []int{1, 1, 1, 4095, 4096, 4097, 1, 1, 1, 123456, 2345678, 2345678} - appendSizes := []int{4095, 4096, 4097, 1, 1, 1, 8191, 8192, 8193, 9000, 3000, 5000} - - tester := &chunkerTester{t: t} - for i := range sizes { - n := sizes[i] - m := appendSizes[i] - - if tester.inputs == nil { - tester.inputs = make(map[uint64][]byte) - } - input, found := tester.inputs[uint64(n)] - var data io.Reader - if !found { - input = testutil.RandomBytes(i, n) - data = bytes.NewReader(input) - tester.inputs[uint64(n)] = input - } else { - data = io.LimitReader(bytes.NewReader(input), int64(n)) - } - - store := NewMapChunkStore() - putGetter := newTestHasherStore(store, SHA3Hash) - - ctx := context.TODO() - addr, wait, err := PyramidSplit(ctx, data, putGetter, putGetter) - if err != nil { - tester.t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - tester.t.Fatalf(err.Error()) - } - //create a append data stream - appendInput, found := tester.inputs[uint64(m)] - var appendData io.Reader - if !found { - appendInput = testutil.RandomBytes(i, m) - appendData = bytes.NewReader(appendInput) - tester.inputs[uint64(m)] = appendInput - } else { - appendData = io.LimitReader(bytes.NewReader(appendInput), int64(m)) - } - - putGetter = newTestHasherStore(store, SHA3Hash) - newAddr, wait, err := PyramidAppend(ctx, addr, appendData, putGetter, putGetter) - if err != nil { - tester.t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - tester.t.Fatalf(err.Error()) - } - - reader := TreeJoin(ctx, newAddr, putGetter, 0) - newOutput := make([]byte, n+m) - r, err := reader.Read(newOutput) - if r != (n + m) { - tester.t.Fatalf("read error read: %v n = %v m = %v err = %v\n", r, n, m, err) - } - - newInput := append(input, appendInput...) - if !bytes.Equal(newOutput, newInput) { - tester.t.Fatalf("input and output mismatch\n IN: %v\nOUT: %v\n", newInput, newOutput) - } - } -} - -func TestRandomData(t *testing.T) { - // This test can validate files up to a relatively short length, as tree chunker slows down drastically. - // Validation of longer files is done by TestLocalStoreAndRetrieve in swarm package. - //sizes := []int{1, 60, 83, 179, 253, 1024, 4095, 4096, 4097, 8191, 8192, 8193, 12287, 12288, 12289, 524288, 524288 + 1, 524288 + 4097, 7 * 524288, 7*524288 + 1, 7*524288 + 4097} - sizes := []int{1, 60, 83, 179, 253, 1024, 4095, 4097, 8191, 8192, 12288, 12289, 524288} - tester := &chunkerTester{t: t} - - for _, s := range sizes { - treeChunkerAddress := testRandomData(false, SHA3Hash, s, tester) - pyramidChunkerAddress := testRandomData(true, SHA3Hash, s, tester) - if treeChunkerAddress.String() != pyramidChunkerAddress.String() { - tester.t.Fatalf("tree chunker and pyramid chunker key mismatch for size %v\n TC: %v\n PC: %v\n", s, treeChunkerAddress.String(), pyramidChunkerAddress.String()) - } - } - - for _, s := range sizes { - treeChunkerAddress := testRandomData(false, BMTHash, s, tester) - pyramidChunkerAddress := testRandomData(true, BMTHash, s, tester) - if treeChunkerAddress.String() != pyramidChunkerAddress.String() { - tester.t.Fatalf("tree chunker and pyramid chunker key mismatch for size %v\n TC: %v\n PC: %v\n", s, treeChunkerAddress.String(), pyramidChunkerAddress.String()) - } - } -} - -func TestRandomBrokenData(t *testing.T) { - sizes := []int{1, 60, 83, 179, 253, 1024, 4095, 4096, 4097, 8191, 8192, 8193, 12287, 12288, 12289, 123456, 2345678} - tester := &chunkerTester{t: t} - for _, s := range sizes { - testRandomBrokenData(s, tester) - } -} - -func benchReadAll(reader LazySectionReader) { - size, _ := reader.Size(context.TODO(), nil) - output := make([]byte, 1000) - for pos := int64(0); pos < size; pos += 1000 { - reader.ReadAt(output, pos) - } -} - -func benchmarkSplitJoin(n int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - - putGetter := newTestHasherStore(NewMapChunkStore(), SHA3Hash) - ctx := context.TODO() - key, wait, err := PyramidSplit(ctx, data, putGetter, putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - reader := TreeJoin(ctx, key, putGetter, 0) - benchReadAll(reader) - } -} - -func benchmarkSplitTreeSHA3(n int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - putGetter := newTestHasherStore(&FakeChunkStore{}, SHA3Hash) - - ctx := context.Background() - _, wait, err := TreeSplit(ctx, data, int64(n), putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - - } -} - -func benchmarkSplitTreeBMT(n int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - putGetter := newTestHasherStore(&FakeChunkStore{}, BMTHash) - - ctx := context.Background() - _, wait, err := TreeSplit(ctx, data, int64(n), putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - } -} - -func benchmarkSplitPyramidBMT(n int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - putGetter := newTestHasherStore(&FakeChunkStore{}, BMTHash) - - ctx := context.Background() - _, wait, err := PyramidSplit(ctx, data, putGetter, putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - } -} - -func benchmarkSplitPyramidSHA3(n int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - putGetter := newTestHasherStore(&FakeChunkStore{}, SHA3Hash) - - ctx := context.Background() - _, wait, err := PyramidSplit(ctx, data, putGetter, putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - } -} - -func benchmarkSplitAppendPyramid(n, m int, t *testing.B) { - t.ReportAllocs() - for i := 0; i < t.N; i++ { - data := testutil.RandomReader(i, n) - data1 := testutil.RandomReader(t.N+i, m) - - store := NewMapChunkStore() - putGetter := newTestHasherStore(store, SHA3Hash) - - ctx := context.Background() - key, wait, err := PyramidSplit(ctx, data, putGetter, putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - - putGetter = newTestHasherStore(store, SHA3Hash) - _, wait, err = PyramidAppend(ctx, key, data1, putGetter, putGetter) - if err != nil { - t.Fatalf(err.Error()) - } - err = wait(ctx) - if err != nil { - t.Fatalf(err.Error()) - } - } -} - -func BenchmarkSplitJoin_2(t *testing.B) { benchmarkSplitJoin(100, t) } -func BenchmarkSplitJoin_3(t *testing.B) { benchmarkSplitJoin(1000, t) } -func BenchmarkSplitJoin_4(t *testing.B) { benchmarkSplitJoin(10000, t) } -func BenchmarkSplitJoin_5(t *testing.B) { benchmarkSplitJoin(100000, t) } -func BenchmarkSplitJoin_6(t *testing.B) { benchmarkSplitJoin(1000000, t) } -func BenchmarkSplitJoin_7(t *testing.B) { benchmarkSplitJoin(10000000, t) } - -// func BenchmarkSplitJoin_8(t *testing.B) { benchmarkJoin(100000000, t) } - -func BenchmarkSplitTreeSHA3_2(t *testing.B) { benchmarkSplitTreeSHA3(100, t) } -func BenchmarkSplitTreeSHA3_2h(t *testing.B) { benchmarkSplitTreeSHA3(500, t) } -func BenchmarkSplitTreeSHA3_3(t *testing.B) { benchmarkSplitTreeSHA3(1000, t) } -func BenchmarkSplitTreeSHA3_3h(t *testing.B) { benchmarkSplitTreeSHA3(5000, t) } -func BenchmarkSplitTreeSHA3_4(t *testing.B) { benchmarkSplitTreeSHA3(10000, t) } -func BenchmarkSplitTreeSHA3_4h(t *testing.B) { benchmarkSplitTreeSHA3(50000, t) } -func BenchmarkSplitTreeSHA3_5(t *testing.B) { benchmarkSplitTreeSHA3(100000, t) } -func BenchmarkSplitTreeSHA3_6(t *testing.B) { benchmarkSplitTreeSHA3(1000000, t) } -func BenchmarkSplitTreeSHA3_7(t *testing.B) { benchmarkSplitTreeSHA3(10000000, t) } - -// func BenchmarkSplitTreeSHA3_8(t *testing.B) { benchmarkSplitTreeSHA3(100000000, t) } - -func BenchmarkSplitTreeBMT_2(t *testing.B) { benchmarkSplitTreeBMT(100, t) } -func BenchmarkSplitTreeBMT_2h(t *testing.B) { benchmarkSplitTreeBMT(500, t) } -func BenchmarkSplitTreeBMT_3(t *testing.B) { benchmarkSplitTreeBMT(1000, t) } -func BenchmarkSplitTreeBMT_3h(t *testing.B) { benchmarkSplitTreeBMT(5000, t) } -func BenchmarkSplitTreeBMT_4(t *testing.B) { benchmarkSplitTreeBMT(10000, t) } -func BenchmarkSplitTreeBMT_4h(t *testing.B) { benchmarkSplitTreeBMT(50000, t) } -func BenchmarkSplitTreeBMT_5(t *testing.B) { benchmarkSplitTreeBMT(100000, t) } -func BenchmarkSplitTreeBMT_6(t *testing.B) { benchmarkSplitTreeBMT(1000000, t) } -func BenchmarkSplitTreeBMT_7(t *testing.B) { benchmarkSplitTreeBMT(10000000, t) } - -// func BenchmarkSplitTreeBMT_8(t *testing.B) { benchmarkSplitTreeBMT(100000000, t) } - -func BenchmarkSplitPyramidSHA3_2(t *testing.B) { benchmarkSplitPyramidSHA3(100, t) } -func BenchmarkSplitPyramidSHA3_2h(t *testing.B) { benchmarkSplitPyramidSHA3(500, t) } -func BenchmarkSplitPyramidSHA3_3(t *testing.B) { benchmarkSplitPyramidSHA3(1000, t) } -func BenchmarkSplitPyramidSHA3_3h(t *testing.B) { benchmarkSplitPyramidSHA3(5000, t) } -func BenchmarkSplitPyramidSHA3_4(t *testing.B) { benchmarkSplitPyramidSHA3(10000, t) } -func BenchmarkSplitPyramidSHA3_4h(t *testing.B) { benchmarkSplitPyramidSHA3(50000, t) } -func BenchmarkSplitPyramidSHA3_5(t *testing.B) { benchmarkSplitPyramidSHA3(100000, t) } -func BenchmarkSplitPyramidSHA3_6(t *testing.B) { benchmarkSplitPyramidSHA3(1000000, t) } -func BenchmarkSplitPyramidSHA3_7(t *testing.B) { benchmarkSplitPyramidSHA3(10000000, t) } - -// func BenchmarkSplitPyramidSHA3_8(t *testing.B) { benchmarkSplitPyramidSHA3(100000000, t) } - -func BenchmarkSplitPyramidBMT_2(t *testing.B) { benchmarkSplitPyramidBMT(100, t) } -func BenchmarkSplitPyramidBMT_2h(t *testing.B) { benchmarkSplitPyramidBMT(500, t) } -func BenchmarkSplitPyramidBMT_3(t *testing.B) { benchmarkSplitPyramidBMT(1000, t) } -func BenchmarkSplitPyramidBMT_3h(t *testing.B) { benchmarkSplitPyramidBMT(5000, t) } -func BenchmarkSplitPyramidBMT_4(t *testing.B) { benchmarkSplitPyramidBMT(10000, t) } -func BenchmarkSplitPyramidBMT_4h(t *testing.B) { benchmarkSplitPyramidBMT(50000, t) } -func BenchmarkSplitPyramidBMT_5(t *testing.B) { benchmarkSplitPyramidBMT(100000, t) } -func BenchmarkSplitPyramidBMT_6(t *testing.B) { benchmarkSplitPyramidBMT(1000000, t) } -func BenchmarkSplitPyramidBMT_7(t *testing.B) { benchmarkSplitPyramidBMT(10000000, t) } - -// func BenchmarkSplitPyramidBMT_8(t *testing.B) { benchmarkSplitPyramidBMT(100000000, t) } - -func BenchmarkSplitAppendPyramid_2(t *testing.B) { benchmarkSplitAppendPyramid(100, 1000, t) } -func BenchmarkSplitAppendPyramid_2h(t *testing.B) { benchmarkSplitAppendPyramid(500, 1000, t) } -func BenchmarkSplitAppendPyramid_3(t *testing.B) { benchmarkSplitAppendPyramid(1000, 1000, t) } -func BenchmarkSplitAppendPyramid_4(t *testing.B) { benchmarkSplitAppendPyramid(10000, 1000, t) } -func BenchmarkSplitAppendPyramid_4h(t *testing.B) { benchmarkSplitAppendPyramid(50000, 1000, t) } -func BenchmarkSplitAppendPyramid_5(t *testing.B) { benchmarkSplitAppendPyramid(1000000, 1000, t) } -func BenchmarkSplitAppendPyramid_6(t *testing.B) { benchmarkSplitAppendPyramid(1000000, 1000, t) } -func BenchmarkSplitAppendPyramid_7(t *testing.B) { benchmarkSplitAppendPyramid(10000000, 1000, t) } - -// func BenchmarkAppendPyramid_8(t *testing.B) { benchmarkAppendPyramid(100000000, 1000, t) } - -// go test -timeout 20m -cpu 4 -bench=./swarm/storage -run no -// If you dont add the timeout argument above .. the benchmark will timeout and dump diff --git a/swarm/storage/common_test.go b/swarm/storage/common_test.go deleted file mode 100644 index 6955ee8279c6..000000000000 --- a/swarm/storage/common_test.go +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "flag" - "fmt" - "io" - "io/ioutil" - "os" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 3, "verbosity of logs") - getTimeout = 30 * time.Second -) - -func init() { - flag.Parse() - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -type brokenLimitedReader struct { - lr io.Reader - errAt int - off int - size int -} - -func brokenLimitReader(data io.Reader, size int, errAt int) *brokenLimitedReader { - return &brokenLimitedReader{ - lr: data, - errAt: errAt, - size: size, - } -} - -func newLDBStore(t *testing.T) (*LDBStore, func()) { - dir, err := ioutil.TempDir("", "bzz-storage-test") - if err != nil { - t.Fatal(err) - } - log.Trace("memstore.tempdir", "dir", dir) - - ldbparams := NewLDBStoreParams(NewDefaultStoreParams(), dir) - db, err := NewLDBStore(ldbparams) - if err != nil { - t.Fatal(err) - } - - cleanup := func() { - db.Close() - err := os.RemoveAll(dir) - if err != nil { - t.Fatal(err) - } - } - - return db, cleanup -} - -func mputRandomChunks(store ChunkStore, n int) ([]Chunk, error) { - return mput(store, n, GenerateRandomChunk) -} - -func mput(store ChunkStore, n int, f func(i int64) Chunk) (hs []Chunk, err error) { - // put to localstore and wait for stored channel - // does not check delivery error state - errc := make(chan error) - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Minute) - defer cancel() - for i := int64(0); i < int64(n); i++ { - chunk := f(ch.DefaultSize) - go func() { - select { - case errc <- store.Put(ctx, chunk): - case <-ctx.Done(): - } - }() - hs = append(hs, chunk) - } - - // wait for all chunks to be stored - for i := 0; i < n; i++ { - err := <-errc - if err != nil { - return nil, err - } - } - return hs, nil -} - -func mget(store ChunkStore, hs []Address, f func(h Address, chunk Chunk) error) error { - wg := sync.WaitGroup{} - wg.Add(len(hs)) - errc := make(chan error) - - for _, k := range hs { - go func(h Address) { - defer wg.Done() - // TODO: write timeout with context - chunk, err := store.Get(context.TODO(), h) - if err != nil { - errc <- err - return - } - if f != nil { - err = f(h, chunk) - if err != nil { - errc <- err - return - } - } - }(k) - } - go func() { - wg.Wait() - close(errc) - }() - var err error - timeout := 10 * time.Second - select { - case err = <-errc: - case <-time.NewTimer(timeout).C: - err = fmt.Errorf("timed out after %v", timeout) - } - return err -} - -func (r *brokenLimitedReader) Read(buf []byte) (int, error) { - if r.off+len(buf) > r.errAt { - return 0, fmt.Errorf("Broken reader") - } - r.off += len(buf) - return r.lr.Read(buf) -} - -func testStoreRandom(m ChunkStore, n int, t *testing.T) { - chunks, err := mputRandomChunks(m, n) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - err = mget(m, chunkAddresses(chunks), nil) - if err != nil { - t.Fatalf("testStore failed: %v", err) - } -} - -func testStoreCorrect(m ChunkStore, n int, t *testing.T) { - chunks, err := mputRandomChunks(m, n) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - f := func(h Address, chunk Chunk) error { - if !bytes.Equal(h, chunk.Address()) { - return fmt.Errorf("key does not match retrieved chunk Address") - } - hasher := MakeHashFunc(DefaultHash)() - data := chunk.Data() - hasher.ResetWithLength(data[:8]) - hasher.Write(data[8:]) - exp := hasher.Sum(nil) - if !bytes.Equal(h, exp) { - return fmt.Errorf("key is not hash of chunk data") - } - return nil - } - err = mget(m, chunkAddresses(chunks), f) - if err != nil { - t.Fatalf("testStore failed: %v", err) - } -} - -func benchmarkStorePut(store ChunkStore, n int, b *testing.B) { - chunks := make([]Chunk, n) - i := 0 - f := func(dataSize int64) Chunk { - chunk := GenerateRandomChunk(dataSize) - chunks[i] = chunk - i++ - return chunk - } - - mput(store, n, f) - - f = func(dataSize int64) Chunk { - chunk := chunks[i] - i++ - return chunk - } - - b.ReportAllocs() - b.ResetTimer() - - for j := 0; j < b.N; j++ { - i = 0 - mput(store, n, f) - } -} - -func benchmarkStoreGet(store ChunkStore, n int, b *testing.B) { - chunks, err := mputRandomChunks(store, n) - if err != nil { - b.Fatalf("expected no error, got %v", err) - } - b.ReportAllocs() - b.ResetTimer() - addrs := chunkAddresses(chunks) - for i := 0; i < b.N; i++ { - err := mget(store, addrs, nil) - if err != nil { - b.Fatalf("mget failed: %v", err) - } - } -} - -// MapChunkStore is a very simple ChunkStore implementation to store chunks in a map in memory. -type MapChunkStore struct { - chunks map[string]Chunk - mu sync.RWMutex -} - -func NewMapChunkStore() *MapChunkStore { - return &MapChunkStore{ - chunks: make(map[string]Chunk), - } -} - -func (m *MapChunkStore) Put(_ context.Context, ch Chunk) error { - m.mu.Lock() - defer m.mu.Unlock() - m.chunks[ch.Address().Hex()] = ch - return nil -} - -func (m *MapChunkStore) Get(_ context.Context, ref Address) (Chunk, error) { - m.mu.RLock() - defer m.mu.RUnlock() - chunk := m.chunks[ref.Hex()] - if chunk == nil { - return nil, ErrChunkNotFound - } - return chunk, nil -} - -// Need to implement Has from SyncChunkStore -func (m *MapChunkStore) Has(ctx context.Context, ref Address) bool { - m.mu.RLock() - defer m.mu.RUnlock() - - _, has := m.chunks[ref.Hex()] - return has -} - -func (m *MapChunkStore) Close() { -} - -func chunkAddresses(chunks []Chunk) []Address { - addrs := make([]Address, len(chunks)) - for i, ch := range chunks { - addrs[i] = ch.Address() - } - return addrs -} diff --git a/swarm/storage/database.go b/swarm/storage/database.go deleted file mode 100644 index 12367b905108..000000000000 --- a/swarm/storage/database.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -// this is a clone of an earlier state of the ethereum ethdb/database -// no need for queueing/caching - -import ( - "github.com/ethereum/go-ethereum/metrics" - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/iterator" - "github.com/syndtr/goleveldb/leveldb/opt" -) - -const openFileLimit = 128 - -type LDBDatabase struct { - db *leveldb.DB -} - -func NewLDBDatabase(file string) (*LDBDatabase, error) { - // Open the db - db, err := leveldb.OpenFile(file, &opt.Options{OpenFilesCacheCapacity: openFileLimit}) - if err != nil { - return nil, err - } - - database := &LDBDatabase{db: db} - - return database, nil -} - -func (db *LDBDatabase) Put(key []byte, value []byte) error { - metrics.GetOrRegisterCounter("ldbdatabase.put", nil).Inc(1) - - return db.db.Put(key, value, nil) -} - -func (db *LDBDatabase) Get(key []byte) ([]byte, error) { - metrics.GetOrRegisterCounter("ldbdatabase.get", nil).Inc(1) - - dat, err := db.db.Get(key, nil) - if err != nil { - return nil, err - } - return dat, nil -} - -func (db *LDBDatabase) Delete(key []byte) error { - return db.db.Delete(key, nil) -} - -func (db *LDBDatabase) NewIterator() iterator.Iterator { - metrics.GetOrRegisterCounter("ldbdatabase.newiterator", nil).Inc(1) - - return db.db.NewIterator(nil, nil) -} - -func (db *LDBDatabase) Write(batch *leveldb.Batch) error { - metrics.GetOrRegisterCounter("ldbdatabase.write", nil).Inc(1) - - return db.db.Write(batch, nil) -} - -func (db *LDBDatabase) Close() { - // Close the leveldb database - db.db.Close() -} diff --git a/swarm/storage/encryption/encryption.go b/swarm/storage/encryption/encryption.go deleted file mode 100644 index 6fbdab062b33..000000000000 --- a/swarm/storage/encryption/encryption.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package encryption - -import ( - "crypto/rand" - "encoding/binary" - "fmt" - "hash" - "sync" -) - -const KeyLength = 32 - -type Key []byte - -type Encryption interface { - Encrypt(data []byte) ([]byte, error) - Decrypt(data []byte) ([]byte, error) -} - -type encryption struct { - key Key // the encryption key (hashSize bytes long) - keyLen int // length of the key = length of blockcipher block - padding int // encryption will pad the data upto this if > 0 - initCtr uint32 // initial counter used for counter mode blockcipher - hashFunc func() hash.Hash // hasher constructor function -} - -// New constructs a new encryptor/decryptor -func New(key Key, padding int, initCtr uint32, hashFunc func() hash.Hash) *encryption { - return &encryption{ - key: key, - keyLen: len(key), - padding: padding, - initCtr: initCtr, - hashFunc: hashFunc, - } -} - -// Encrypt encrypts the data and does padding if specified -func (e *encryption) Encrypt(data []byte) ([]byte, error) { - length := len(data) - outLength := length - isFixedPadding := e.padding > 0 - if isFixedPadding { - if length > e.padding { - return nil, fmt.Errorf("Data length longer than padding, data length %v padding %v", length, e.padding) - } - outLength = e.padding - } - out := make([]byte, outLength) - e.transform(data, out) - return out, nil -} - -// Decrypt decrypts the data, if padding was used caller must know original length and truncate -func (e *encryption) Decrypt(data []byte) ([]byte, error) { - length := len(data) - if e.padding > 0 && length != e.padding { - return nil, fmt.Errorf("Data length different than padding, data length %v padding %v", length, e.padding) - } - out := make([]byte, length) - e.transform(data, out) - return out, nil -} - -// -func (e *encryption) transform(in, out []byte) { - inLength := len(in) - wg := sync.WaitGroup{} - wg.Add((inLength-1)/e.keyLen + 1) - for i := 0; i < inLength; i += e.keyLen { - l := min(e.keyLen, inLength-i) - // call transformations per segment (asyncronously) - go func(i int, x, y []byte) { - defer wg.Done() - e.Transcrypt(i, x, y) - }(i/e.keyLen, in[i:i+l], out[i:i+l]) - } - // pad the rest if out is longer - pad(out[inLength:]) - wg.Wait() -} - -// used for segmentwise transformation -// if in is shorter than out, padding is used -func (e *encryption) Transcrypt(i int, in []byte, out []byte) { - // first hash key with counter (initial counter + i) - hasher := e.hashFunc() - hasher.Write(e.key) - - ctrBytes := make([]byte, 4) - binary.LittleEndian.PutUint32(ctrBytes, uint32(i)+e.initCtr) - hasher.Write(ctrBytes) - - ctrHash := hasher.Sum(nil) - hasher.Reset() - - // second round of hashing for selective disclosure - hasher.Write(ctrHash) - segmentKey := hasher.Sum(nil) - hasher.Reset() - - // XOR bytes uptil length of in (out must be at least as long) - inLength := len(in) - for j := 0; j < inLength; j++ { - out[j] = in[j] ^ segmentKey[j] - } - // insert padding if out is longer - pad(out[inLength:]) -} - -func pad(b []byte) { - l := len(b) - for total := 0; total < l; { - read, _ := rand.Read(b[total:]) - total += read - } -} - -// GenerateRandomKey generates a random key of length l -func GenerateRandomKey(l int) Key { - key := make([]byte, l) - var total int - for total < l { - read, _ := rand.Read(key[total:]) - total += read - } - return key -} - -func min(x, y int) int { - if x < y { - return x - } - return y -} diff --git a/swarm/storage/encryption/encryption_test.go b/swarm/storage/encryption/encryption_test.go deleted file mode 100644 index 3b4f8a4e3693..000000000000 --- a/swarm/storage/encryption/encryption_test.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package encryption - -import ( - "bytes" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/swarm/testutil" - "golang.org/x/crypto/sha3" -) - -var expectedTransformedHex = "352187af3a843decc63ceca6cb01ea39dbcf77caf0a8f705f5c30d557044ceec9392b94a79376f1e5c10cd0c0f2a98e5353bf22b3ea4fdac6677ee553dec192e3db64e179d0474e96088fb4abd2babd67de123fb398bdf84d818f7bda2c1ab60b3ea0e0569ae54aa969658eb4844e6960d2ff44d7c087ee3aaffa1c0ee5df7e50b615f7ad90190f022934ad5300c7d1809bfe71a11cc04cece5274eb97a5f20350630522c1dbb7cebaf4f97f84e03f5cfd88f2b48880b25d12f4d5e75c150f704ef6b46c72e07db2b705ac3644569dccd22fd8f964f6ef787fda63c46759af334e6f665f70eac775a7017acea49f3c7696151cb1b9434fa4ac27fb803921ffb5ec58dafa168098d7d5b97e384be3384cf5bc235c3d887fef89fe76c0065f9b8d6ad837b442340d9e797b46ef5709ea3358bc415df11e4830de986ef0f1c418ffdcc80e9a3cda9bea0ab5676c0d4240465c43ba527e3b4ea50b4f6255b510e5d25774a75449b0bd71e56c537ade4fcf0f4d63c99ae1dbb5a844971e2c19941b8facfcfc8ee3056e7cb3c7114c5357e845b52f7103cb6e00d2308c37b12baa5b769e1cc7b00fc06f2d16e70cc27a82cb9c1a4e40cb0d43907f73df2c9db44f1b51a6b0bc6d09f77ac3be14041fae3f9df2da42df43ae110904f9ecee278030185254d7c6e918a5512024d047f77a992088cb3190a6587aa54d0c7231c1cd2e455e0d4c07f74bece68e29cd8ba0190c0bcfb26d24634af5d91a81ef5d4dd3d614836ce942ddbf7bb1399317f4c03faa675f325f18324bf9433844bfe5c4cc04130c8d5c329562b7cd66e72f7355de8f5375a72202971613c32bd7f3fcdcd51080758cd1d0a46dbe8f0374381dbc359f5864250c63dde8131cbd7c98ae2b0147d6ea4bf65d1443d511b18e6d608bbb46ac036353b4c51df306a10a6f6939c38629a5c18aaf89cac04bd3ad5156e6b92011c88341cb08551bab0a89e6a46538f5af33b86121dba17e3a434c273f385cd2e8cb90bdd32747d8425d929ccbd9b0815c73325988855549a8489dfd047daf777aaa3099e54cf997175a5d9e1edfe363e3b68c70e02f6bf4fcde6a0f3f7d0e7e98bde1a72ae8b6cd27b32990680cc4a04fc467f41c5adcaddabfc71928a3f6872c360c1d765260690dd28b269864c8e380d9c92ef6b89b0094c8f9bb22608b4156381b19b920e9583c9616ce5693b4d2a6c689f02e6a91584a8e501e107403d2689dd0045269dd9946c0e969fb656a3b39d84a798831f5f9290f163eb2f97d3ae25071324e95e2256d9c1e56eb83c26397855323edc202d56ad05894333b7f0ed3c1e4734782eb8bd5477242fd80d7a89b12866f85cfae476322f032465d6b1253993033fccd4723530630ab97a1566460af9c90c9da843c229406e65f3fa578bd6bf04dee9b6153807ddadb8ceefc5c601a8ab26023c67b1ab1e8e0f29ce94c78c308005a781853e7a2e0e51738939a657c987b5e611f32f47b5ff461c52e63e0ea390515a8e1f5393dae54ea526934b5f310b76e3fa050e40718cb4c8a20e58946d6ee1879f08c52764422fe542b3240e75eccb7aa75b1f8a651e37a3bc56b0932cdae0e985948468db1f98eb4b77b82081ea25d8a762db00f7898864984bd80e2f3f35f236bf57291dec28f550769943bcfb6f884b7687589b673642ef7fe5d7d5a87d3eca5017f83ccb9a3310520474479464cb3f433440e7e2f1e28c0aef700a45848573409e7ab66e0cfd4fe5d2147ace81bc65fd8891f6245cd69246bbf5c27830e5ab882dd1d02aba34ff6ca9af88df00fd602892f02fedbdc65dedec203faf3f8ff4a97314e0ddb58b9ab756a61a562597f4088b445fcc3b28a708ca7b1485dcd791b779fbf2b3ef1ec5c6205f595fbe45a02105034147e5a146089c200a49dae33ae051a08ea5f974a21540aaeffa7f9d9e3d35478016fb27b871036eb27217a5b834b461f535752fb5f1c8dded3ae14ce3a2ef6639e2fe41939e3509e46e347a95d50b2080f1ba42c804b290ddc912c952d1cec3f2661369f738feacc0dbf1ea27429c644e45f9e26f30c341acd34c7519b2a1663e334621691e810767e9918c2c547b2e23cce915f97d26aac8d0d2fcd3edb7986ad4e2b8a852edebad534cb6c0e9f0797d3563e5409d7e068e48356c67ce519246cd9c560e881453df97cbba562018811e6cf8c327f399d1d1253ab47a19f4a0ccc7c6d86a9603e0551da310ea595d71305c4aad96819120a92cdbaf1f77ec8df9cc7c838c0d4de1e8692dd81da38268d1d71324bcffdafbe5122e4b81828e021e936d83ae8021eac592aa52cd296b5ce392c7173d622f8e07d18f59bb1b08ba15211af6703463b09b593af3c37735296816d9f2e7a369354a5374ea3955e14ca8ac56d5bfe4aef7a21bd825d6ae85530bee5d2aaaa4914981b3dfdb2e92ec2a27c83d74b59e84ff5c056f7d8945745f2efc3dcf28f288c6cd8383700fb2312f7001f24dd40015e436ae23e052fe9070ea9535b9c989898a9bda3d5382cf10e432fae6ccf0c825b3e6436edd3a9f8846e5606f8563931b5f29ba407c5236e5730225dda211a8504ec1817bc935e1fd9a532b648c502df302ed2063aed008fd5676131ac9e95998e9447b02bd29d77e38fcfd2959f2de929b31970335eb2a74348cc6918bc35b9bf749eab0fe304c946cd9e1ca284e6853c42646e60b6b39e0d3fb3c260abfc5c1b4ca3c3770f344118ca7c7f5c1ad1f123f8f369cd60afc3cdb3e9e81968c5c9fa7c8b014ffe0508dd4f0a2a976d5d1ca8fc9ad7a237d92cfe7b41413d934d6e142824b252699397e48e4bac4e91ebc10602720684bd0863773c548f9a2f9724245e47b129ecf65afd7252aac48c8a8d6fd3d888af592a01fb02dc71ed7538a700d3d16243e4621e0fcf9f8ed2b4e11c9fa9a95338bb1dac74a7d9bc4eb8cbf900b634a2a56469c00f5994e4f0934bdb947640e6d67e47d0b621aacd632bfd3c800bd7d93bd329f494a90e06ed51535831bd6e07ac1b4b11434ef3918fa9511813a002913f33f836454798b8d1787fea9a4c4743ba091ed192ed92f4d33e43a226bf9503e1a83a16dd340b3cbbf38af6db0d99201da8de529b4225f3d2fa2aad6621afc6c79ef3537720591edfc681ae6d00ede53ed724fc71b23b90d2e9b7158aaee98d626a4fe029107df2cb5f90147e07ebe423b1519d848af18af365c71bfd0665db46be493bbe99b79a188de0cf3594aef2299f0324075bdce9eb0b87bc29d62401ba4fd6ae48b1ba33261b5b845279becf38ee03e3dc5c45303321c5fac96fd02a3ad8c9e3b02127b320501333c9e6360440d1ad5e64a6239501502dde1a49c9abe33b66098458eee3d611bb06ffcd234a1b9aef4af5021cd61f0de6789f822ee116b5078aae8c129e8391d8987500d322b58edd1595dc570b57341f2df221b94a96ab7fbcf32a8ca9684196455694024623d7ed49f7d66e8dd453c0bae50e0d8b34377b22d0ece059e2c385dfc70b9089fcd27577c51f4d870b5738ee2b68c361a67809c105c7848b68860a829f29930857a9f9d40b14fd2384ac43bafdf43c0661103794c4bd07d1cfdd4681b6aeaefad53d4c1473359bcc5a83b09189352e5bb9a7498dd0effb89c35aad26954551f8b0621374b449bf515630bd3974dca982279733470fdd059aa9c3df403d8f22b38c4709c82d8f12b888e22990350490e16179caf406293cc9e65f116bafcbe96af132f679877061107a2f690a82a8cb46eea57a90abd23798c5937c6fe6b17be3f9bfa01ce117d2c268181b9095bf49f395fea07ca03838de0588c5e2db633e836d64488c1421e653ea52d810d096048c092d0da6e02fa6613890219f51a76148c8588c2487b171a28f17b7a299204874af0131725d793481333be5f08e86ca837a226850b0c1060891603bfecf9e55cddd22c0dbb28d495342d9cc3de8409f72e52a0115141cffe755c74f061c1a770428ccb0ae59536ee6fc074fbfc6cacb51a549d327527e20f8407477e60355863f1153f9ce95641198663c968874e7fdb29407bd771d94fdda8180cbb0358f5874738db705924b8cbe0cd5e1484aeb64542fe8f38667b7c34baf818c63b1e18440e9fba575254d063fd49f24ef26432f4eb323f3836972dca87473e3e9bb26dc3be236c3aae6bc8a6da567442309da0e8450e242fc9db836e2964f2c76a3b80a2c677979882dda7d7ebf62c93664018bcf4ec431fe6b403d49b3b36618b9c07c2d0d4569cb8d52223903debc72ec113955b206c34f1ae5300990ccfc0180f47d91afdb542b6312d12aeff7e19c645dc0b9fe6e3288e9539f6d5870f99882df187bfa6d24d179dfd1dac22212c8b5339f7171a3efc15b760fed8f68538bc5cbd845c2d1ab41f3a6c692820653eaef7930c02fbe6061d93805d73decdbb945572a7c44ed0241982a6e4d2d730898f82b3d9877cb7bca41cc6dcee67aa0c3d6db76f0b0a708ace0031113e48429de5d886c10e9200f68f32263a2fbf44a5992c2459fda7b8796ba796e3a0804fc25992ed2c9a5fe0580a6b809200ecde6caa0364b58be11564dcb9a616766dd7906db5636ee708b0204f38d309466d8d4a162965dd727e29f5a6c133e9b4ed5bafe803e479f9b2a7640c942c4a40b14ac7dc9828546052761a070f6404008f1ec3605836339c3da95a00b4fd81b2cabf88b51d2087d5b83e8c5b69bf96d8c72cbd278dad3bbb42b404b436f84ad688a22948adf60a81090f1e904291503c16e9f54b05fc76c881a5f95f0e732949e95d3f1bae2d3652a14fe0dda2d68879604657171856ef72637def2a96ac47d7b3fe86eb3198f5e0e626f06be86232305f2ae79ffcd2725e48208f9d8d63523f81915acc957563ab627cd6bc68c2a37d59fb0ed77a90aa9d085d6914a8ebada22a2c2d471b5163aeddd799d90fbb10ed6851ace2c4af504b7d572686700a59d6db46d5e42bb83f8e0c0ffe1dfa6582cc0b34c921ff6e85e83188d24906d5c08bb90069639e713051b3102b53e6f703e8210017878add5df68e6f2b108de279c5490e9eef5590185c4a1c744d4e00d244e1245a8805bd30407b1bc488db44870ccfd75a8af104df78efa2fb7ba31f048a263efdb3b63271fff4922bece9a71187108f65744a24f4947dc556b7440cb4fa45d296bb7f724588d1f245125b21ea063500029bd49650237f53899daf1312809552c81c5827341263cc807a29fe84746170cdfa1ff3838399a5645319bcaff674bb70efccdd88b3d3bb2f2d98111413585dc5d5bd5168f43b3f55e58972a5b2b9b3733febf02f931bd436648cb617c3794841aab961fe41277ab07812e1d3bc4ff6f4350a3e615bfba08c3b9480ef57904d3a16f7e916345202e3f93d11f7a7305170cb8c4eb9ac88ace8bbd1f377bdd5855d3162d6723d4435e84ce529b8f276a8927915ac759a0d04e5ca4a9d3da6291f0333b475df527e99fe38f7a4082662e8125936640c26dd1d17cf284ce6e2b17777a05aa0574f7793a6a062cc6f7263f7ab126b4528a17becfdec49ac0f7d8705aa1704af97fb861faa8a466161b2b5c08a5bacc79fe8500b913d65c8d3c52d1fd52d2ab2c9f52196e712455619c1cd3e0f391b274487944240e2ed8858dd0823c801094310024ae3fe4dd1cf5a2b6487b42cc5937bbafb193ee331d87e378258963d49b9da90899bbb4b88e79f78e866b0213f4719f67da7bcc2fce073c01e87c62ea3cdbcd589cfc41281f2f4c757c742d6d1e" - -var hashFunc = sha3.NewLegacyKeccak256 -var testKey Key - -func init() { - var err error - testKey, err = hexutil.Decode("0x8abf1502f557f15026716030fb6384792583daf39608a3cd02ff2f47e9bc6e49") - if err != nil { - panic(err.Error()) - } -} - -func TestEncryptDataLongerThanPadding(t *testing.T) { - enc := New(testKey, 4095, uint32(0), hashFunc) - - data := make([]byte, 4096) - - expectedError := "Data length longer than padding, data length 4096 padding 4095" - - _, err := enc.Encrypt(data) - if err == nil || err.Error() != expectedError { - t.Fatalf("Expected error \"%v\" got \"%v\"", expectedError, err) - } -} - -func TestEncryptDataZeroPadding(t *testing.T) { - enc := New(testKey, 0, uint32(0), hashFunc) - - data := make([]byte, 2048) - - encrypted, err := enc.Encrypt(data) - if err != nil { - t.Fatalf("Expected no error got %v", err) - } - if len(encrypted) != 2048 { - t.Fatalf("Encrypted data length expected \"%v\" got %v", 2048, len(encrypted)) - } -} - -func TestEncryptDataLengthEqualsPadding(t *testing.T) { - enc := New(testKey, 4096, uint32(0), hashFunc) - - data := make([]byte, 4096) - - encrypted, err := enc.Encrypt(data) - if err != nil { - t.Fatalf("Expected no error got %v", err) - } - encryptedHex := common.Bytes2Hex(encrypted) - expectedTransformed := common.Hex2Bytes(expectedTransformedHex) - - if !bytes.Equal(encrypted, expectedTransformed) { - t.Fatalf("Expected %v got %v", expectedTransformedHex, encryptedHex) - } -} - -func TestEncryptDataLengthSmallerThanPadding(t *testing.T) { - enc := New(testKey, 4096, uint32(0), hashFunc) - - data := make([]byte, 4080) - - encrypted, err := enc.Encrypt(data) - if err != nil { - t.Fatalf("Expected no error got %v", err) - } - if len(encrypted) != 4096 { - t.Fatalf("Encrypted data length expected %v got %v", 4096, len(encrypted)) - } -} - -func TestEncryptDataCounterNonZero(t *testing.T) { - // TODO -} - -func TestDecryptDataLengthNotEqualsPadding(t *testing.T) { - enc := New(testKey, 4096, uint32(0), hashFunc) - - data := make([]byte, 4097) - - expectedError := "Data length different than padding, data length 4097 padding 4096" - - _, err := enc.Decrypt(data) - if err == nil || err.Error() != expectedError { - t.Fatalf("Expected error \"%v\" got \"%v\"", expectedError, err) - } -} - -func TestEncryptDecryptIsIdentity(t *testing.T) { - testEncryptDecryptIsIdentity(t, 2048, 0, 2048, 32) - testEncryptDecryptIsIdentity(t, 4096, 0, 4096, 32) - testEncryptDecryptIsIdentity(t, 4096, 0, 1000, 32) - testEncryptDecryptIsIdentity(t, 32, 10, 32, 32) -} - -func testEncryptDecryptIsIdentity(t *testing.T, padding int, initCtr uint32, dataLength int, keyLength int) { - key := GenerateRandomKey(keyLength) - enc := New(key, padding, initCtr, hashFunc) - - data := testutil.RandomBytes(1, dataLength) - - encrypted, err := enc.Encrypt(data) - if err != nil { - t.Fatalf("Expected no error got %v", err) - } - - decrypted, err := enc.Decrypt(encrypted) - if err != nil { - t.Fatalf("Expected no error got %v", err) - } - if len(decrypted) != padding { - t.Fatalf("Expected decrypted data length %v got %v", padding, len(decrypted)) - } - - // we have to remove the extra bytes which were randomly added to fill until padding - if len(data) < padding { - decrypted = decrypted[:len(data)] - } - - if !bytes.Equal(data, decrypted) { - t.Fatalf("Expected decrypted %v got %v", common.Bytes2Hex(data), common.Bytes2Hex(decrypted)) - } -} diff --git a/swarm/storage/feed/binaryserializer_test.go b/swarm/storage/feed/binaryserializer_test.go deleted file mode 100644 index 37828d1c9422..000000000000 --- a/swarm/storage/feed/binaryserializer_test.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "encoding/json" - "reflect" - "testing" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -// KV mocks a key value store -type KV map[string]string - -func (kv KV) Get(key string) string { - return kv[key] -} -func (kv KV) Set(key, value string) { - kv[key] = value -} - -func compareByteSliceToExpectedHex(t *testing.T, variableName string, actualValue []byte, expectedHex string) { - if hexutil.Encode(actualValue) != expectedHex { - t.Fatalf("%s: Expected %s to be %s, got %s", t.Name(), variableName, expectedHex, hexutil.Encode(actualValue)) - } -} - -func testBinarySerializerRecovery(t *testing.T, bin binarySerializer, expectedHex string) { - name := reflect.TypeOf(bin).Elem().Name() - serialized := make([]byte, bin.binaryLength()) - if err := bin.binaryPut(serialized); err != nil { - t.Fatalf("%s.binaryPut error when trying to serialize structure: %s", name, err) - } - - compareByteSliceToExpectedHex(t, name, serialized, expectedHex) - - recovered := reflect.New(reflect.TypeOf(bin).Elem()).Interface().(binarySerializer) - if err := recovered.binaryGet(serialized); err != nil { - t.Fatalf("%s.binaryGet error when trying to deserialize structure: %s", name, err) - } - - if !reflect.DeepEqual(bin, recovered) { - t.Fatalf("Expected that the recovered %s equals the marshalled %s", name, name) - } - - serializedWrongLength := make([]byte, 1) - copy(serializedWrongLength[:], serialized) - if err := recovered.binaryGet(serializedWrongLength); err == nil { - t.Fatalf("Expected %s.binaryGet to fail since data is too small", name) - } -} - -func testBinarySerializerLengthCheck(t *testing.T, bin binarySerializer) { - name := reflect.TypeOf(bin).Elem().Name() - // make a slice that is too small to contain the metadata - serialized := make([]byte, bin.binaryLength()-1) - - if err := bin.binaryPut(serialized); err == nil { - t.Fatalf("Expected %s.binaryPut to fail, since target slice is too small", name) - } -} - -func testValueSerializer(t *testing.T, v valueSerializer, expected KV) { - name := reflect.TypeOf(v).Elem().Name() - kv := make(KV) - - v.AppendValues(kv) - if !reflect.DeepEqual(expected, kv) { - expj, _ := json.Marshal(expected) - gotj, _ := json.Marshal(kv) - t.Fatalf("Expected %s.AppendValues to return %s, got %s", name, string(expj), string(gotj)) - } - - recovered := reflect.New(reflect.TypeOf(v).Elem()).Interface().(valueSerializer) - err := recovered.FromValues(kv) - if err != nil { - t.Fatal(err) - } - - if !reflect.DeepEqual(recovered, v) { - t.Fatalf("Expected recovered %s to be the same", name) - } -} diff --git a/swarm/storage/feed/cacheentry.go b/swarm/storage/feed/cacheentry.go deleted file mode 100644 index be42008e99c1..000000000000 --- a/swarm/storage/feed/cacheentry.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "bytes" - "context" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - hasherCount = 8 - feedsHashAlgorithm = storage.SHA3Hash - defaultRetrieveTimeout = 100 * time.Millisecond -) - -// cacheEntry caches the last known update of a specific Swarm feed. -type cacheEntry struct { - Update - *bytes.Reader - lastKey storage.Address -} - -// implements storage.LazySectionReader -func (r *cacheEntry) Size(ctx context.Context, _ chan bool) (int64, error) { - return int64(len(r.Update.data)), nil -} - -//returns the feed's topic -func (r *cacheEntry) Topic() Topic { - return r.Feed.Topic -} diff --git a/swarm/storage/feed/doc.go b/swarm/storage/feed/doc.go deleted file mode 100644 index 1f07948f2119..000000000000 --- a/swarm/storage/feed/doc.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Package feeds defines Swarm Feeds. - -Swarm Feeds allows a user to build an update feed about a particular topic -without resorting to ENS on each update. -The update scheme is built on swarm chunks with chunk keys following -a predictable, versionable pattern. - -A Feed is tied to a unique identifier that is deterministically generated out of -the chosen topic. - -A Feed is defined as the series of updates of a specific user about a particular topic - -Actual data updates are also made in the form of swarm chunks. The keys -of the updates are the hash of a concatenation of properties as follows: - -updateAddr = H(Feed, Epoch ID) -where H is the SHA3 hash function -Feed is the combination of Topic and the user address -Epoch ID is a time slot. See the lookup package for more information. - -A user looking up a the latest update in a Feed only needs to know the Topic -and the other user's address. - -The Feed Update data is: -updatedata = Feed|Epoch|data - -The full update data that goes in the chunk payload is: -updatedata|sign(updatedata) - -Structure Summary: - -Request: Feed Update with signature - Update: headers + data - Header: Protocol version and reserved for future use placeholders - ID: Information about how to locate a specific update - Feed: Represents a user's series of publications about a specific Topic - Topic: Item that the updates are about - User: User who updates the Feed - Epoch: time slot where the update is stored - -*/ -package feed diff --git a/swarm/storage/feed/error.go b/swarm/storage/feed/error.go deleted file mode 100644 index 206ba3316fa1..000000000000 --- a/swarm/storage/feed/error.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "fmt" -) - -const ( - ErrInit = iota - ErrNotFound - ErrIO - ErrUnauthorized - ErrInvalidValue - ErrDataOverflow - ErrNothingToReturn - ErrCorruptData - ErrInvalidSignature - ErrNotSynced - ErrPeriodDepth - ErrCnt -) - -// Error is a the typed error object used for Swarm feeds -type Error struct { - code int - err string -} - -// Error implements the error interface -func (e *Error) Error() string { - return e.err -} - -// Code returns the error code -// Error codes are enumerated in the error.go file within the feeds package -func (e *Error) Code() int { - return e.code -} - -// NewError creates a new Swarm feeds Error object with the specified code and custom error message -func NewError(code int, s string) error { - if code < 0 || code >= ErrCnt { - panic("no such error code!") - } - r := &Error{ - err: s, - } - switch code { - case ErrNotFound, ErrIO, ErrUnauthorized, ErrInvalidValue, ErrDataOverflow, ErrNothingToReturn, ErrInvalidSignature, ErrNotSynced, ErrPeriodDepth, ErrCorruptData: - r.code = code - } - return r -} - -// NewErrorf is a convenience version of NewError that incorporates printf-style formatting -func NewErrorf(code int, format string, args ...interface{}) error { - return NewError(code, fmt.Sprintf(format, args...)) -} diff --git a/swarm/storage/feed/feed.go b/swarm/storage/feed/feed.go deleted file mode 100644 index b6ea665a6fce..000000000000 --- a/swarm/storage/feed/feed.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "hash" - "unsafe" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// Feed represents a particular user's stream of updates on a topic -type Feed struct { - Topic Topic `json:"topic"` - User common.Address `json:"user"` -} - -// Feed layout: -// TopicLength bytes -// userAddr common.AddressLength bytes -const feedLength = TopicLength + common.AddressLength - -// mapKey calculates a unique id for this feed. Used by the cache map in `Handler` -func (f *Feed) mapKey() uint64 { - serializedData := make([]byte, feedLength) - f.binaryPut(serializedData) - hasher := hashPool.Get().(hash.Hash) - defer hashPool.Put(hasher) - hasher.Reset() - hasher.Write(serializedData) - hash := hasher.Sum(nil) - return *(*uint64)(unsafe.Pointer(&hash[0])) -} - -// binaryPut serializes this feed instance into the provided slice -func (f *Feed) binaryPut(serializedData []byte) error { - if len(serializedData) != feedLength { - return NewErrorf(ErrInvalidValue, "Incorrect slice size to serialize feed. Expected %d, got %d", feedLength, len(serializedData)) - } - var cursor int - copy(serializedData[cursor:cursor+TopicLength], f.Topic[:TopicLength]) - cursor += TopicLength - - copy(serializedData[cursor:cursor+common.AddressLength], f.User[:]) - cursor += common.AddressLength - - return nil -} - -// binaryLength returns the expected size of this structure when serialized -func (f *Feed) binaryLength() int { - return feedLength -} - -// binaryGet restores the current instance from the information contained in the passed slice -func (f *Feed) binaryGet(serializedData []byte) error { - if len(serializedData) != feedLength { - return NewErrorf(ErrInvalidValue, "Incorrect slice size to read feed. Expected %d, got %d", feedLength, len(serializedData)) - } - - var cursor int - copy(f.Topic[:], serializedData[cursor:cursor+TopicLength]) - cursor += TopicLength - - copy(f.User[:], serializedData[cursor:cursor+common.AddressLength]) - cursor += common.AddressLength - - return nil -} - -// Hex serializes the feed to a hex string -func (f *Feed) Hex() string { - serializedData := make([]byte, feedLength) - f.binaryPut(serializedData) - return hexutil.Encode(serializedData) -} - -// FromValues deserializes this instance from a string key-value store -// useful to parse query strings -func (f *Feed) FromValues(values Values) (err error) { - topic := values.Get("topic") - if topic != "" { - if err := f.Topic.FromHex(values.Get("topic")); err != nil { - return err - } - } else { // see if the user set name and relatedcontent - name := values.Get("name") - relatedContent, _ := hexutil.Decode(values.Get("relatedcontent")) - if len(relatedContent) > 0 { - if len(relatedContent) < storage.AddressLength { - return NewErrorf(ErrInvalidValue, "relatedcontent field must be a hex-encoded byte array exactly %d bytes long", storage.AddressLength) - } - relatedContent = relatedContent[:storage.AddressLength] - } - f.Topic, err = NewTopic(name, relatedContent) - if err != nil { - return err - } - } - f.User = common.HexToAddress(values.Get("user")) - return nil -} - -// AppendValues serializes this structure into the provided string key-value store -// useful to build query strings -func (f *Feed) AppendValues(values Values) { - values.Set("topic", f.Topic.Hex()) - values.Set("user", f.User.Hex()) -} diff --git a/swarm/storage/feed/feed_test.go b/swarm/storage/feed/feed_test.go deleted file mode 100644 index 6a575594f4c4..000000000000 --- a/swarm/storage/feed/feed_test.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . -package feed - -import ( - "testing" -) - -func getTestFeed() *Feed { - topic, _ := NewTopic("world news report, every hour", nil) - return &Feed{ - Topic: topic, - User: newCharlieSigner().Address(), - } -} - -func TestFeedSerializerDeserializer(t *testing.T) { - testBinarySerializerRecovery(t, getTestFeed(), "0x776f726c64206e657773207265706f72742c20657665727920686f7572000000876a8936a7cd0b79ef0735ad0896c1afe278781c") -} - -func TestFeedSerializerLengthCheck(t *testing.T) { - testBinarySerializerLengthCheck(t, getTestFeed()) -} diff --git a/swarm/storage/feed/handler.go b/swarm/storage/feed/handler.go deleted file mode 100644 index 063d3e92a3c5..000000000000 --- a/swarm/storage/feed/handler.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Handler is the API for feeds -// It enables creating, updating, syncing and retrieving feed updates and their data -package feed - -import ( - "bytes" - "context" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -type Handler struct { - chunkStore *storage.NetStore - HashSize int - cache map[uint64]*cacheEntry - cacheLock sync.RWMutex -} - -// HandlerParams pass parameters to the Handler constructor NewHandler -// Signer and TimestampProvider are mandatory parameters -type HandlerParams struct { -} - -// hashPool contains a pool of ready hashers -var hashPool sync.Pool - -// init initializes the package and hashPool -func init() { - hashPool = sync.Pool{ - New: func() interface{} { - return storage.MakeHashFunc(feedsHashAlgorithm)() - }, - } -} - -// NewHandler creates a new Swarm feeds API -func NewHandler(params *HandlerParams) *Handler { - fh := &Handler{ - cache: make(map[uint64]*cacheEntry), - } - - for i := 0; i < hasherCount; i++ { - hashfunc := storage.MakeHashFunc(feedsHashAlgorithm)() - if fh.HashSize == 0 { - fh.HashSize = hashfunc.Size() - } - hashPool.Put(hashfunc) - } - - return fh -} - -// SetStore sets the store backend for the Swarm feeds API -func (h *Handler) SetStore(store *storage.NetStore) { - h.chunkStore = store -} - -// Validate is a chunk validation method -// If it looks like a feed update, the chunk address is checked against the userAddr of the update's signature -// It implements the storage.ChunkValidator interface -func (h *Handler) Validate(chunk storage.Chunk) bool { - if len(chunk.Data()) < minimumSignedUpdateLength { - return false - } - - // check if it is a properly formatted update chunk with - // valid signature and proof of ownership of the feed it is trying - // to update - - // First, deserialize the chunk - var r Request - if err := r.fromChunk(chunk); err != nil { - log.Debug("Invalid feed update chunk", "addr", chunk.Address(), "err", err) - return false - } - - // Verify signatures and that the signer actually owns the feed - // If it fails, it means either the signature is not valid, data is corrupted - // or someone is trying to update someone else's feed. - if err := r.Verify(); err != nil { - log.Debug("Invalid feed update signature", "err", err) - return false - } - - return true -} - -// GetContent retrieves the data payload of the last synced update of the feed -func (h *Handler) GetContent(feed *Feed) (storage.Address, []byte, error) { - if feed == nil { - return nil, nil, NewError(ErrInvalidValue, "feed is nil") - } - feedUpdate := h.get(feed) - if feedUpdate == nil { - return nil, nil, NewError(ErrNotFound, "feed update not cached") - } - return feedUpdate.lastKey, feedUpdate.data, nil -} - -// NewRequest prepares a Request structure with all the necessary information to -// just add the desired data and sign it. -// The resulting structure can then be signed and passed to Handler.Update to be verified and sent -func (h *Handler) NewRequest(ctx context.Context, feed *Feed) (request *Request, err error) { - if feed == nil { - return nil, NewError(ErrInvalidValue, "feed cannot be nil") - } - - now := TimestampProvider.Now().Time - request = new(Request) - request.Header.Version = ProtocolVersion - - query := NewQueryLatest(feed, lookup.NoClue) - - feedUpdate, err := h.Lookup(ctx, query) - if err != nil { - if err.(*Error).code != ErrNotFound { - return nil, err - } - // not finding updates means that there is a network error - // or that the feed really does not have updates - } - - request.Feed = *feed - - // if we already have an update, then find next epoch - if feedUpdate != nil { - request.Epoch = lookup.GetNextEpoch(feedUpdate.Epoch, now) - } else { - request.Epoch = lookup.GetFirstEpoch(now) - } - - return request, nil -} - -// Lookup retrieves a specific or latest feed update -// Lookup works differently depending on the configuration of `query` -// See the `query` documentation and helper functions: -// `NewQueryLatest` and `NewQuery` -func (h *Handler) Lookup(ctx context.Context, query *Query) (*cacheEntry, error) { - - timeLimit := query.TimeLimit - if timeLimit == 0 { // if time limit is set to zero, the user wants to get the latest update - timeLimit = TimestampProvider.Now().Time - } - - if query.Hint == lookup.NoClue { // try to use our cache - entry := h.get(&query.Feed) - if entry != nil && entry.Epoch.Time <= timeLimit { // avoid bad hints - query.Hint = entry.Epoch - } - } - - // we can't look for anything without a store - if h.chunkStore == nil { - return nil, NewError(ErrInit, "Call Handler.SetStore() before performing lookups") - } - - var id ID - id.Feed = query.Feed - var readCount int - - // Invoke the lookup engine. - // The callback will be called every time the lookup algorithm needs to guess - requestPtr, err := lookup.Lookup(timeLimit, query.Hint, func(epoch lookup.Epoch, now uint64) (interface{}, error) { - readCount++ - id.Epoch = epoch - ctx, cancel := context.WithTimeout(ctx, defaultRetrieveTimeout) - defer cancel() - - chunk, err := h.chunkStore.Get(ctx, id.Addr()) - if err != nil { // TODO: check for catastrophic errors other than chunk not found - return nil, nil - } - - var request Request - if err := request.fromChunk(chunk); err != nil { - return nil, nil - } - if request.Time <= timeLimit { - return &request, nil - } - return nil, nil - }) - if err != nil { - return nil, err - } - - log.Info(fmt.Sprintf("Feed lookup finished in %d lookups", readCount)) - - request, _ := requestPtr.(*Request) - if request == nil { - return nil, NewError(ErrNotFound, "no feed updates found") - } - return h.updateCache(request) - -} - -// update feed updates cache with specified content -func (h *Handler) updateCache(request *Request) (*cacheEntry, error) { - - updateAddr := request.Addr() - log.Trace("feed cache update", "topic", request.Topic.Hex(), "updateaddr", updateAddr, "epoch time", request.Epoch.Time, "epoch level", request.Epoch.Level) - - feedUpdate := h.get(&request.Feed) - if feedUpdate == nil { - feedUpdate = &cacheEntry{} - h.set(&request.Feed, feedUpdate) - } - - // update our rsrcs entry map - feedUpdate.lastKey = updateAddr - feedUpdate.Update = request.Update - feedUpdate.Reader = bytes.NewReader(feedUpdate.data) - return feedUpdate, nil -} - -// Update publishes a feed update -// Note that a feed update cannot span chunks, and thus has a MAX NET LENGTH 4096, INCLUDING update header data and signature. -// This results in a max payload of `maxUpdateDataLength` (check update.go for more details) -// An error will be returned if the total length of the chunk payload will exceed this limit. -// Update can only check if the caller is trying to overwrite the very last known version, otherwise it just puts the update -// on the network. -func (h *Handler) Update(ctx context.Context, r *Request) (updateAddr storage.Address, err error) { - - // we can't update anything without a store - if h.chunkStore == nil { - return nil, NewError(ErrInit, "Call Handler.SetStore() before updating") - } - - feedUpdate := h.get(&r.Feed) - if feedUpdate != nil && feedUpdate.Epoch.Equals(r.Epoch) { // This is the only cheap check we can do for sure - return nil, NewError(ErrInvalidValue, "A former update in this epoch is already known to exist") - } - - chunk, err := r.toChunk() // Serialize the update into a chunk. Fails if data is too big - if err != nil { - return nil, err - } - - // send the chunk - h.chunkStore.Put(ctx, chunk) - log.Trace("feed update", "updateAddr", r.idAddr, "epoch time", r.Epoch.Time, "epoch level", r.Epoch.Level, "data", chunk.Data()) - // update our feed updates map cache entry if the new update is older than the one we have, if we have it. - if feedUpdate != nil && r.Epoch.After(feedUpdate.Epoch) { - feedUpdate.Epoch = r.Epoch - feedUpdate.data = make([]byte, len(r.data)) - feedUpdate.lastKey = r.idAddr - copy(feedUpdate.data, r.data) - feedUpdate.Reader = bytes.NewReader(feedUpdate.data) - } - - return r.idAddr, nil -} - -// Retrieves the feed update cache value for the given nameHash -func (h *Handler) get(feed *Feed) *cacheEntry { - mapKey := feed.mapKey() - h.cacheLock.RLock() - defer h.cacheLock.RUnlock() - feedUpdate := h.cache[mapKey] - return feedUpdate -} - -// Sets the feed update cache value for the given feed -func (h *Handler) set(feed *Feed, feedUpdate *cacheEntry) { - mapKey := feed.mapKey() - h.cacheLock.Lock() - defer h.cacheLock.Unlock() - h.cache[mapKey] = feedUpdate -} diff --git a/swarm/storage/feed/handler_test.go b/swarm/storage/feed/handler_test.go deleted file mode 100644 index 2f8a52453549..000000000000 --- a/swarm/storage/feed/handler_test.go +++ /dev/null @@ -1,506 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "bytes" - "context" - "flag" - "fmt" - "io/ioutil" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -var ( - loglevel = flag.Int("loglevel", 3, "loglevel") - startTime = Timestamp{ - Time: uint64(4200), - } - cleanF func() - subtopicName = "føø.bar" -) - -func init() { - flag.Parse() - log.Root().SetHandler(log.CallerFileHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(os.Stderr, log.TerminalFormat(true))))) -} - -// simulated timeProvider -type fakeTimeProvider struct { - currentTime uint64 -} - -func (f *fakeTimeProvider) Tick() { - f.currentTime++ -} - -func (f *fakeTimeProvider) Set(time uint64) { - f.currentTime = time -} - -func (f *fakeTimeProvider) FastForward(offset uint64) { - f.currentTime += offset -} - -func (f *fakeTimeProvider) Now() Timestamp { - return Timestamp{ - Time: f.currentTime, - } -} - -// make updates and retrieve them based on periods and versions -func TestFeedsHandler(t *testing.T) { - - // make fake timeProvider - clock := &fakeTimeProvider{ - currentTime: startTime.Time, // clock starts at t=4200 - } - - // signer containing private key - signer := newAliceSigner() - - feedsHandler, datadir, teardownTest, err := setupTest(clock, signer) - if err != nil { - t.Fatal(err) - } - defer teardownTest() - - // create a new feed - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - topic, _ := NewTopic("Mess with Swarm feeds code and see what ghost catches you", nil) - fd := Feed{ - Topic: topic, - User: signer.Address(), - } - - // data for updates: - updates := []string{ - "blinky", // t=4200 - "pinky", // t=4242 - "inky", // t=4284 - "clyde", // t=4285 - } - - request := NewFirstRequest(fd.Topic) // this timestamps the update at t = 4200 (start time) - chunkAddress := make(map[string]storage.Address) - data := []byte(updates[0]) - request.SetData(data) - if err := request.Sign(signer); err != nil { - t.Fatal(err) - } - chunkAddress[updates[0]], err = feedsHandler.Update(ctx, request) - if err != nil { - t.Fatal(err) - } - - // move the clock ahead 21 seconds - clock.FastForward(21) // t=4221 - - request, err = feedsHandler.NewRequest(ctx, &request.Feed) // this timestamps the update at t = 4221 - if err != nil { - t.Fatal(err) - } - if request.Epoch.Base() != 0 || request.Epoch.Level != lookup.HighestLevel-1 { - t.Fatalf("Suggested epoch BaseTime should be 0 and Epoch level should be %d", lookup.HighestLevel-1) - } - - request.Epoch.Level = lookup.HighestLevel // force level 25 instead of 24 to make it fail - data = []byte(updates[1]) - request.SetData(data) - if err := request.Sign(signer); err != nil { - t.Fatal(err) - } - chunkAddress[updates[1]], err = feedsHandler.Update(ctx, request) - if err == nil { - t.Fatal("Expected update to fail since an update in this epoch already exists") - } - - // move the clock ahead 21 seconds - clock.FastForward(21) // t=4242 - request, err = feedsHandler.NewRequest(ctx, &request.Feed) - if err != nil { - t.Fatal(err) - } - request.SetData(data) - if err := request.Sign(signer); err != nil { - t.Fatal(err) - } - chunkAddress[updates[1]], err = feedsHandler.Update(ctx, request) - if err != nil { - t.Fatal(err) - } - - // move the clock ahead 42 seconds - clock.FastForward(42) // t=4284 - request, err = feedsHandler.NewRequest(ctx, &request.Feed) - if err != nil { - t.Fatal(err) - } - data = []byte(updates[2]) - request.SetData(data) - if err := request.Sign(signer); err != nil { - t.Fatal(err) - } - chunkAddress[updates[2]], err = feedsHandler.Update(ctx, request) - if err != nil { - t.Fatal(err) - } - - // move the clock ahead 1 second - clock.FastForward(1) // t=4285 - request, err = feedsHandler.NewRequest(ctx, &request.Feed) - if err != nil { - t.Fatal(err) - } - if request.Epoch.Base() != 0 || request.Epoch.Level != 22 { - t.Fatalf("Expected epoch base time to be %d, got %d. Expected epoch level to be %d, got %d", 0, request.Epoch.Base(), 22, request.Epoch.Level) - } - data = []byte(updates[3]) - request.SetData(data) - - if err := request.Sign(signer); err != nil { - t.Fatal(err) - } - chunkAddress[updates[3]], err = feedsHandler.Update(ctx, request) - if err != nil { - t.Fatal(err) - } - - time.Sleep(time.Second) - feedsHandler.Close() - - // check we can retrieve the updates after close - clock.FastForward(2000) // t=6285 - - feedParams := &HandlerParams{} - - feedsHandler2, err := NewTestHandler(datadir, feedParams) - if err != nil { - t.Fatal(err) - } - - update2, err := feedsHandler2.Lookup(ctx, NewQueryLatest(&request.Feed, lookup.NoClue)) - if err != nil { - t.Fatal(err) - } - - // last update should be "clyde" - if !bytes.Equal(update2.data, []byte(updates[len(updates)-1])) { - t.Fatalf("feed update data was %v, expected %v", string(update2.data), updates[len(updates)-1]) - } - if update2.Level != 22 { - t.Fatalf("feed update epoch level was %d, expected 22", update2.Level) - } - if update2.Base() != 0 { - t.Fatalf("feed update epoch base time was %d, expected 0", update2.Base()) - } - log.Debug("Latest lookup", "epoch base time", update2.Base(), "epoch level", update2.Level, "data", update2.data) - - // specific point in time - update, err := feedsHandler2.Lookup(ctx, NewQuery(&request.Feed, 4284, lookup.NoClue)) - if err != nil { - t.Fatal(err) - } - // check data - if !bytes.Equal(update.data, []byte(updates[2])) { - t.Fatalf("feed update data (historical) was %v, expected %v", string(update2.data), updates[2]) - } - log.Debug("Historical lookup", "epoch base time", update2.Base(), "epoch level", update2.Level, "data", update2.data) - - // beyond the first should yield an error - update, err = feedsHandler2.Lookup(ctx, NewQuery(&request.Feed, startTime.Time-1, lookup.NoClue)) - if err == nil { - t.Fatalf("expected previous to fail, returned epoch %s data %v", update.Epoch.String(), update.data) - } - -} - -const Day = 60 * 60 * 24 -const Year = Day * 365 -const Month = Day * 30 - -func generateData(x uint64) []byte { - return []byte(fmt.Sprintf("%d", x)) -} - -func TestSparseUpdates(t *testing.T) { - - // make fake timeProvider - timeProvider := &fakeTimeProvider{ - currentTime: startTime.Time, - } - - // signer containing private key - signer := newAliceSigner() - - rh, datadir, teardownTest, err := setupTest(timeProvider, signer) - if err != nil { - t.Fatal(err) - } - defer teardownTest() - defer os.RemoveAll(datadir) - - // create a new feed - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - topic, _ := NewTopic("Very slow updates", nil) - fd := Feed{ - Topic: topic, - User: signer.Address(), - } - - // publish one update every 5 years since Unix 0 until today - today := uint64(1533799046) - var epoch lookup.Epoch - var lastUpdateTime uint64 - for T := uint64(0); T < today; T += 5 * Year { - request := NewFirstRequest(fd.Topic) - request.Epoch = lookup.GetNextEpoch(epoch, T) - request.data = generateData(T) // this generates some data that depends on T, so we can check later - request.Sign(signer) - if err != nil { - t.Fatal(err) - } - - if _, err := rh.Update(ctx, request); err != nil { - t.Fatal(err) - } - epoch = request.Epoch - lastUpdateTime = T - } - - query := NewQuery(&fd, today, lookup.NoClue) - - _, err = rh.Lookup(ctx, query) - if err != nil { - t.Fatal(err) - } - - _, content, err := rh.GetContent(&fd) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(generateData(lastUpdateTime), content) { - t.Fatalf("Expected to recover last written value %d, got %s", lastUpdateTime, string(content)) - } - - // lookup the closest update to 35*Year + 6* Month (~ June 2005): - // it should find the update we put on 35*Year, since we were updating every 5 years. - - query.TimeLimit = 35*Year + 6*Month - - _, err = rh.Lookup(ctx, query) - if err != nil { - t.Fatal(err) - } - - _, content, err = rh.GetContent(&fd) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(generateData(35*Year), content) { - t.Fatalf("Expected to recover %d, got %s", 35*Year, string(content)) - } -} - -func TestValidator(t *testing.T) { - - // make fake timeProvider - timeProvider := &fakeTimeProvider{ - currentTime: startTime.Time, - } - - // signer containing private key. Alice will be the good girl - signer := newAliceSigner() - - // set up sim timeProvider - rh, _, teardownTest, err := setupTest(timeProvider, signer) - if err != nil { - t.Fatal(err) - } - defer teardownTest() - - // create new feed - topic, _ := NewTopic(subtopicName, nil) - fd := Feed{ - Topic: topic, - User: signer.Address(), - } - mr := NewFirstRequest(fd.Topic) - - // chunk with address - data := []byte("foo") - mr.SetData(data) - if err := mr.Sign(signer); err != nil { - t.Fatalf("sign fail: %v", err) - } - - chunk, err := mr.toChunk() - if err != nil { - t.Fatal(err) - } - if !rh.Validate(chunk) { - t.Fatal("Chunk validator fail on update chunk") - } - - address := chunk.Address() - // mess with the address - address[0] = 11 - address[15] = 99 - - if rh.Validate(storage.NewChunk(address, chunk.Data())) { - t.Fatal("Expected Validate to fail with false chunk address") - } -} - -// tests that the content address validator correctly checks the data -// tests that feed update chunks are passed through content address validator -// there is some redundancy in this test as it also tests content addressed chunks, -// which should be evaluated as invalid chunks by this validator -func TestValidatorInStore(t *testing.T) { - - // make fake timeProvider - TimestampProvider = &fakeTimeProvider{ - currentTime: startTime.Time, - } - - // signer containing private key - signer := newAliceSigner() - - // set up localstore - datadir, err := ioutil.TempDir("", "storage-testfeedsvalidator") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(datadir) - - handlerParams := storage.NewDefaultLocalStoreParams() - handlerParams.Init(datadir) - store, err := storage.NewLocalStore(handlerParams, nil) - if err != nil { - t.Fatal(err) - } - - // set up Swarm feeds handler and add is as a validator to the localstore - fhParams := &HandlerParams{} - fh := NewHandler(fhParams) - store.Validators = append(store.Validators, fh) - - // create content addressed chunks, one good, one faulty - chunks := storage.GenerateRandomChunks(chunk.DefaultSize, 2) - goodChunk := chunks[0] - badChunk := storage.NewChunk(chunks[1].Address(), goodChunk.Data()) - - topic, _ := NewTopic("xyzzy", nil) - fd := Feed{ - Topic: topic, - User: signer.Address(), - } - - // create a feed update chunk with correct publickey - id := ID{ - Epoch: lookup.Epoch{Time: 42, - Level: 1, - }, - Feed: fd, - } - - updateAddr := id.Addr() - data := []byte("bar") - - r := new(Request) - r.idAddr = updateAddr - r.Update.ID = id - r.data = data - - r.Sign(signer) - - uglyChunk, err := r.toChunk() - if err != nil { - t.Fatal(err) - } - - // put the chunks in the store and check their error status - err = store.Put(context.Background(), goodChunk) - if err == nil { - t.Fatal("expected error on good content address chunk with feed update validator only, but got nil") - } - err = store.Put(context.Background(), badChunk) - if err == nil { - t.Fatal("expected error on bad content address chunk with feed update validator only, but got nil") - } - err = store.Put(context.Background(), uglyChunk) - if err != nil { - t.Fatalf("expected no error on feed update chunk with feed update validator only, but got: %s", err) - } -} - -// create rpc and feeds Handler -func setupTest(timeProvider timestampProvider, signer Signer) (fh *TestHandler, datadir string, teardown func(), err error) { - - var fsClean func() - var rpcClean func() - cleanF = func() { - if fsClean != nil { - fsClean() - } - if rpcClean != nil { - rpcClean() - } - } - - // temp datadir - datadir, err = ioutil.TempDir("", "fh") - if err != nil { - return nil, "", nil, err - } - fsClean = func() { - os.RemoveAll(datadir) - } - - TimestampProvider = timeProvider - fhParams := &HandlerParams{} - fh, err = NewTestHandler(datadir, fhParams) - return fh, datadir, cleanF, err -} - -func newAliceSigner() *GenericSigner { - privKey, _ := crypto.HexToECDSA("deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef") - return NewGenericSigner(privKey) -} - -func newBobSigner() *GenericSigner { - privKey, _ := crypto.HexToECDSA("accedeaccedeaccedeaccedeaccedeaccedeaccedeaccedeaccedeaccedecaca") - return NewGenericSigner(privKey) -} - -func newCharlieSigner() *GenericSigner { - privKey, _ := crypto.HexToECDSA("facadefacadefacadefacadefacadefacadefacadefacadefacadefacadefaca") - return NewGenericSigner(privKey) -} diff --git a/swarm/storage/feed/id.go b/swarm/storage/feed/id.go deleted file mode 100644 index 7e17743c117e..000000000000 --- a/swarm/storage/feed/id.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "fmt" - "hash" - "strconv" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// ID uniquely identifies an update on the network. -type ID struct { - Feed `json:"feed"` - lookup.Epoch `json:"epoch"` -} - -// ID layout: -// Feed feedLength bytes -// Epoch EpochLength -const idLength = feedLength + lookup.EpochLength - -// Addr calculates the feed update chunk address corresponding to this ID -func (u *ID) Addr() (updateAddr storage.Address) { - serializedData := make([]byte, idLength) - var cursor int - u.Feed.binaryPut(serializedData[cursor : cursor+feedLength]) - cursor += feedLength - - eid := u.Epoch.ID() - copy(serializedData[cursor:cursor+lookup.EpochLength], eid[:]) - - hasher := hashPool.Get().(hash.Hash) - defer hashPool.Put(hasher) - hasher.Reset() - hasher.Write(serializedData) - return hasher.Sum(nil) -} - -// binaryPut serializes this instance into the provided slice -func (u *ID) binaryPut(serializedData []byte) error { - if len(serializedData) != idLength { - return NewErrorf(ErrInvalidValue, "Incorrect slice size to serialize ID. Expected %d, got %d", idLength, len(serializedData)) - } - var cursor int - if err := u.Feed.binaryPut(serializedData[cursor : cursor+feedLength]); err != nil { - return err - } - cursor += feedLength - - epochBytes, err := u.Epoch.MarshalBinary() - if err != nil { - return err - } - copy(serializedData[cursor:cursor+lookup.EpochLength], epochBytes[:]) - cursor += lookup.EpochLength - - return nil -} - -// binaryLength returns the expected size of this structure when serialized -func (u *ID) binaryLength() int { - return idLength -} - -// binaryGet restores the current instance from the information contained in the passed slice -func (u *ID) binaryGet(serializedData []byte) error { - if len(serializedData) != idLength { - return NewErrorf(ErrInvalidValue, "Incorrect slice size to read ID. Expected %d, got %d", idLength, len(serializedData)) - } - - var cursor int - if err := u.Feed.binaryGet(serializedData[cursor : cursor+feedLength]); err != nil { - return err - } - cursor += feedLength - - if err := u.Epoch.UnmarshalBinary(serializedData[cursor : cursor+lookup.EpochLength]); err != nil { - return err - } - cursor += lookup.EpochLength - - return nil -} - -// FromValues deserializes this instance from a string key-value store -// useful to parse query strings -func (u *ID) FromValues(values Values) error { - level, _ := strconv.ParseUint(values.Get("level"), 10, 32) - u.Epoch.Level = uint8(level) - u.Epoch.Time, _ = strconv.ParseUint(values.Get("time"), 10, 64) - - if u.Feed.User == (common.Address{}) { - return u.Feed.FromValues(values) - } - return nil -} - -// AppendValues serializes this structure into the provided string key-value store -// useful to build query strings -func (u *ID) AppendValues(values Values) { - values.Set("level", fmt.Sprintf("%d", u.Epoch.Level)) - values.Set("time", fmt.Sprintf("%d", u.Epoch.Time)) - u.Feed.AppendValues(values) -} diff --git a/swarm/storage/feed/id_test.go b/swarm/storage/feed/id_test.go deleted file mode 100644 index e561ff9b46d1..000000000000 --- a/swarm/storage/feed/id_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package feed - -import ( - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -func getTestID() *ID { - return &ID{ - Feed: *getTestFeed(), - Epoch: lookup.GetFirstEpoch(1000), - } -} - -func TestIDAddr(t *testing.T) { - id := getTestID() - updateAddr := id.Addr() - compareByteSliceToExpectedHex(t, "updateAddr", updateAddr, "0x8b24583ec293e085f4c78aaee66d1bc5abfb8b4233304d14a349afa57af2a783") -} - -func TestIDSerializer(t *testing.T) { - testBinarySerializerRecovery(t, getTestID(), "0x776f726c64206e657773207265706f72742c20657665727920686f7572000000876a8936a7cd0b79ef0735ad0896c1afe278781ce803000000000019") -} - -func TestIDLengthCheck(t *testing.T) { - testBinarySerializerLengthCheck(t, getTestID()) -} diff --git a/swarm/storage/feed/lookup/epoch.go b/swarm/storage/feed/lookup/epoch.go deleted file mode 100644 index bafe9547798e..000000000000 --- a/swarm/storage/feed/lookup/epoch.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package lookup - -import ( - "encoding/binary" - "errors" - "fmt" -) - -// Epoch represents a time slot at a particular frequency level -type Epoch struct { - Time uint64 `json:"time"` // Time stores the time at which the update or lookup takes place - Level uint8 `json:"level"` // Level indicates the frequency level as the exponent of a power of 2 -} - -// EpochID is a unique identifier for an Epoch, based on its level and base time. -type EpochID [8]byte - -// EpochLength stores the serialized binary length of an Epoch -const EpochLength = 8 - -// MaxTime contains the highest possible time value an Epoch can handle -const MaxTime uint64 = (1 << 56) - 1 - -// Base returns the base time of the Epoch -func (e *Epoch) Base() uint64 { - return getBaseTime(e.Time, e.Level) -} - -// ID Returns the unique identifier of this epoch -func (e *Epoch) ID() EpochID { - base := e.Base() - var id EpochID - binary.LittleEndian.PutUint64(id[:], base) - id[7] = e.Level - return id -} - -// MarshalBinary implements the encoding.BinaryMarshaller interface -func (e *Epoch) MarshalBinary() (data []byte, err error) { - b := make([]byte, 8) - binary.LittleEndian.PutUint64(b[:], e.Time) - b[7] = e.Level - return b, nil -} - -// UnmarshalBinary implements the encoding.BinaryUnmarshaller interface -func (e *Epoch) UnmarshalBinary(data []byte) error { - if len(data) != EpochLength { - return errors.New("Invalid data unmarshalling Epoch") - } - b := make([]byte, 8) - copy(b, data) - e.Level = b[7] - b[7] = 0 - e.Time = binary.LittleEndian.Uint64(b) - return nil -} - -// After returns true if this epoch occurs later or exactly at the other epoch. -func (e *Epoch) After(epoch Epoch) bool { - if e.Time == epoch.Time { - return e.Level < epoch.Level - } - return e.Time >= epoch.Time -} - -// Equals compares two epochs and returns true if they refer to the same time period. -func (e *Epoch) Equals(epoch Epoch) bool { - return e.Level == epoch.Level && e.Base() == epoch.Base() -} - -// String implements the Stringer interface. -func (e *Epoch) String() string { - return fmt.Sprintf("Epoch{Time:%d, Level:%d}", e.Time, e.Level) -} diff --git a/swarm/storage/feed/lookup/epoch_test.go b/swarm/storage/feed/lookup/epoch_test.go deleted file mode 100644 index 0629f3d1dfcd..000000000000 --- a/swarm/storage/feed/lookup/epoch_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package lookup_test - -import ( - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -func TestMarshallers(t *testing.T) { - - for i := uint64(1); i < lookup.MaxTime; i *= 3 { - e := lookup.Epoch{ - Time: i, - Level: uint8(i % 20), - } - b, err := e.MarshalBinary() - if err != nil { - t.Fatal(err) - } - var e2 lookup.Epoch - if err := e2.UnmarshalBinary(b); err != nil { - t.Fatal(err) - } - if e != e2 { - t.Fatal("Expected unmarshalled epoch to be equal to marshalled onet.Fatal(err)") - } - } - -} - -func TestAfter(t *testing.T) { - a := lookup.Epoch{ - Time: 5, - Level: 3, - } - b := lookup.Epoch{ - Time: 6, - Level: 3, - } - c := lookup.Epoch{ - Time: 6, - Level: 4, - } - - if !b.After(a) { - t.Fatal("Expected 'after' to be true, got false") - } - - if b.After(b) { - t.Fatal("Expected 'after' to be false when both epochs are identical, got true") - } - - if !b.After(c) { - t.Fatal("Expected 'after' to be true when both epochs have the same time but the level is lower in the first one, but got false") - } - -} diff --git a/swarm/storage/feed/lookup/lookup.go b/swarm/storage/feed/lookup/lookup.go deleted file mode 100644 index 2f862d81c470..000000000000 --- a/swarm/storage/feed/lookup/lookup.go +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Package lookup defines feed lookup algorithms and provides tools to place updates -so they can be found -*/ -package lookup - -const maxuint64 = ^uint64(0) - -// LowestLevel establishes the frequency resolution of the lookup algorithm as a power of 2. -const LowestLevel uint8 = 0 // default is 0 (1 second) - -// HighestLevel sets the lowest frequency the algorithm will operate at, as a power of 2. -// 25 -> 2^25 equals to roughly one year. -const HighestLevel = 25 // default is 25 (~1 year) - -// DefaultLevel sets what level will be chosen to search when there is no hint -const DefaultLevel = HighestLevel - -//Algorithm is the function signature of a lookup algorithm -type Algorithm func(now uint64, hint Epoch, read ReadFunc) (value interface{}, err error) - -// Lookup finds the update with the highest timestamp that is smaller or equal than 'now' -// It takes a hint which should be the epoch where the last known update was -// If you don't know in what epoch the last update happened, simply submit lookup.NoClue -// read() will be called on each lookup attempt -// Returns an error only if read() returns an error -// Returns nil if an update was not found -var Lookup Algorithm = FluzCapacitorAlgorithm - -// ReadFunc is a handler called by Lookup each time it attempts to find a value -// It should return if a value is not found -// It should return if a value is found, but its timestamp is higher than "now" -// It should only return an error in case the handler wants to stop the -// lookup process entirely. -type ReadFunc func(epoch Epoch, now uint64) (interface{}, error) - -// NoClue is a hint that can be provided when the Lookup caller does not have -// a clue about where the last update may be -var NoClue = Epoch{} - -// getBaseTime returns the epoch base time of the given -// time and level -func getBaseTime(t uint64, level uint8) uint64 { - return t & (maxuint64 << level) -} - -// Hint creates a hint based only on the last known update time -func Hint(last uint64) Epoch { - return Epoch{ - Time: last, - Level: DefaultLevel, - } -} - -// GetNextLevel returns the frequency level a next update should be placed at, provided where -// the last update was and what time it is now. -// This is the first nonzero bit of the XOR of 'last' and 'now', counting from the highest significant bit -// but limited to not return a level that is smaller than the last-1 -func GetNextLevel(last Epoch, now uint64) uint8 { - // First XOR the last epoch base time with the current clock. - // This will set all the common most significant bits to zero. - mix := (last.Base() ^ now) - - // Then, make sure we stop the below loop before one level below the current, by setting - // that level's bit to 1. - // If the next level is lower than the current one, it must be exactly level-1 and not lower. - mix |= (1 << (last.Level - 1)) - - // if the last update was more than 2^highestLevel seconds ago, choose the highest level - if mix > (maxuint64 >> (64 - HighestLevel - 1)) { - return HighestLevel - } - - // set up a mask to scan for nonzero bits, starting at the highest level - mask := uint64(1 << (HighestLevel)) - - for i := uint8(HighestLevel); i > LowestLevel; i-- { - if mix&mask != 0 { // if we find a nonzero bit, this is the level the next update should be at. - return i - } - mask = mask >> 1 // move our bit one position to the right - } - return 0 -} - -// GetNextEpoch returns the epoch where the next update should be located -// according to where the previous update was -// and what time it is now. -func GetNextEpoch(last Epoch, now uint64) Epoch { - if last == NoClue { - return GetFirstEpoch(now) - } - level := GetNextLevel(last, now) - return Epoch{ - Level: level, - Time: now, - } -} - -// GetFirstEpoch returns the epoch where the first update should be located -// based on what time it is now. -func GetFirstEpoch(now uint64) Epoch { - return Epoch{Level: HighestLevel, Time: now} -} - -var worstHint = Epoch{Time: 0, Level: 63} - -// FluzCapacitorAlgorithm works by narrowing the epoch search area if an update is found -// going back and forth in time -// First, it will attempt to find an update where it should be now if the hint was -// really the last update. If that lookup fails, then the last update must be either the hint itself -// or the epochs right below. If however, that lookup succeeds, then the update must be -// that one or within the epochs right below. -// see the guide for a more graphical representation -func FluzCapacitorAlgorithm(now uint64, hint Epoch, read ReadFunc) (value interface{}, err error) { - var lastFound interface{} - var epoch Epoch - if hint == NoClue { - hint = worstHint - } - - t := now - - for { - epoch = GetNextEpoch(hint, t) - value, err = read(epoch, now) - if err != nil { - return nil, err - } - if value != nil { - lastFound = value - if epoch.Level == LowestLevel || epoch.Equals(hint) { - return value, nil - } - hint = epoch - continue - } - if epoch.Base() == hint.Base() { - if lastFound != nil { - return lastFound, nil - } - // we have reached the hint itself - if hint == worstHint { - return nil, nil - } - // check it out - value, err = read(hint, now) - if err != nil { - return nil, err - } - if value != nil { - return value, nil - } - // bad hint. - epoch = hint - hint = worstHint - } - base := epoch.Base() - if base == 0 { - return nil, nil - } - t = base - 1 - } -} diff --git a/swarm/storage/feed/lookup/lookup_test.go b/swarm/storage/feed/lookup/lookup_test.go deleted file mode 100644 index d71e81e95f2a..000000000000 --- a/swarm/storage/feed/lookup/lookup_test.go +++ /dev/null @@ -1,414 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package lookup_test - -import ( - "fmt" - "math/rand" - "testing" - - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -type Data struct { - Payload uint64 - Time uint64 -} - -type Store map[lookup.EpochID]*Data - -func write(store Store, epoch lookup.Epoch, value *Data) { - log.Debug("Write: %d-%d, value='%d'\n", epoch.Base(), epoch.Level, value.Payload) - store[epoch.ID()] = value -} - -func update(store Store, last lookup.Epoch, now uint64, value *Data) lookup.Epoch { - epoch := lookup.GetNextEpoch(last, now) - - write(store, epoch, value) - - return epoch -} - -const Day = 60 * 60 * 24 -const Year = Day * 365 -const Month = Day * 30 - -func makeReadFunc(store Store, counter *int) lookup.ReadFunc { - return func(epoch lookup.Epoch, now uint64) (interface{}, error) { - *counter++ - data := store[epoch.ID()] - var valueStr string - if data != nil { - valueStr = fmt.Sprintf("%d", data.Payload) - } - log.Debug("Read: %d-%d, value='%s'\n", epoch.Base(), epoch.Level, valueStr) - if data != nil && data.Time <= now { - return data, nil - } - return nil, nil - } -} - -func TestLookup(t *testing.T) { - - store := make(Store) - readCount := 0 - readFunc := makeReadFunc(store, &readCount) - - // write an update every month for 12 months 3 years ago and then silence for two years - now := uint64(1533799046) - var epoch lookup.Epoch - - var lastData *Data - for i := uint64(0); i < 12; i++ { - t := uint64(now - Year*3 + i*Month) - data := Data{ - Payload: t, //our "payload" will be the timestamp itself. - Time: t, - } - epoch = update(store, epoch, t, &data) - lastData = &data - } - - // try to get the last value - - value, err := lookup.Lookup(now, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - - readCountWithoutHint := readCount - - if value != lastData { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", lastData, value) - } - - // reset the read count for the next test - readCount = 0 - // Provide a hint to get a faster lookup. In particular, we give the exact location of the last update - value, err = lookup.Lookup(now, epoch, readFunc) - if err != nil { - t.Fatal(err) - } - - if value != lastData { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", lastData, value) - } - - if readCount > readCountWithoutHint { - t.Fatalf("Expected lookup to complete with fewer or same reads than %d since we provided a hint. Did %d reads.", readCountWithoutHint, readCount) - } - - // try to get an intermediate value - // if we look for a value in now - Year*3 + 6*Month, we should get that value - // Since the "payload" is the timestamp itself, we can check this. - - expectedTime := now - Year*3 + 6*Month - - value, err = lookup.Lookup(expectedTime, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - - data, ok := value.(*Data) - - if !ok { - t.Fatal("Expected value to contain data") - } - - if data.Time != expectedTime { - t.Fatalf("Expected value timestamp to be %d, got %d", data.Time, expectedTime) - } - -} - -func TestOneUpdateAt0(t *testing.T) { - - store := make(Store) - readCount := 0 - - readFunc := makeReadFunc(store, &readCount) - now := uint64(1533903729) - - var epoch lookup.Epoch - data := Data{ - Payload: 79, - Time: 0, - } - update(store, epoch, 0, &data) - - value, err := lookup.Lookup(now, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - if value != &data { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", data, value) - } -} - -// Tests the update is found even when a bad hint is given -func TestBadHint(t *testing.T) { - - store := make(Store) - readCount := 0 - - readFunc := makeReadFunc(store, &readCount) - now := uint64(1533903729) - - var epoch lookup.Epoch - data := Data{ - Payload: 79, - Time: 0, - } - - // place an update for t=1200 - update(store, epoch, 1200, &data) - - // come up with some evil hint - badHint := lookup.Epoch{ - Level: 18, - Time: 1200000000, - } - - value, err := lookup.Lookup(now, badHint, readFunc) - if err != nil { - t.Fatal(err) - } - if value != &data { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", data, value) - } -} - -func TestLookupFail(t *testing.T) { - - store := make(Store) - readCount := 0 - - readFunc := makeReadFunc(store, &readCount) - now := uint64(1533903729) - - // don't write anything and try to look up. - // we're testing we don't get stuck in a loop - - value, err := lookup.Lookup(now, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - if value != nil { - t.Fatal("Expected value to be nil, since the update should've failed") - } - - expectedReads := now/(1< readCountWithoutHint { - t.Fatalf("Expected lookup to complete with fewer or equal reads than %d since we provided a hint. Did %d reads.", readCountWithoutHint, readCount) - } - - for i := uint64(0); i <= 994; i++ { - T := uint64(now - 1000 + i) // update every second for the last 1000 seconds - value, err := lookup.Lookup(T, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - data, _ := value.(*Data) - if data == nil { - t.Fatalf("Expected lookup to return %d, got nil", T) - } - if data.Payload != T { - t.Fatalf("Expected lookup to return %d, got %d", T, data.Time) - } - } -} - -func TestSparseUpdates(t *testing.T) { - - store := make(Store) - readCount := 0 - readFunc := makeReadFunc(store, &readCount) - - // write an update every 5 years 3 times starting in Jan 1st 1970 and then silence - - now := uint64(1533799046) - var epoch lookup.Epoch - - var lastData *Data - for i := uint64(0); i < 5; i++ { - T := uint64(Year * 5 * i) // write an update every 5 years 3 times starting in Jan 1st 1970 and then silence - data := Data{ - Payload: T, //our "payload" will be the timestamp itself. - Time: T, - } - epoch = update(store, epoch, T, &data) - lastData = &data - } - - // try to get the last value - - value, err := lookup.Lookup(now, lookup.NoClue, readFunc) - if err != nil { - t.Fatal(err) - } - - readCountWithoutHint := readCount - - if value != lastData { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", lastData, value) - } - - // reset the read count for the next test - readCount = 0 - // Provide a hint to get a faster lookup. In particular, we give the exact location of the last update - value, err = lookup.Lookup(now, epoch, readFunc) - if err != nil { - t.Fatal(err) - } - - if value != lastData { - t.Fatalf("Expected lookup to return the last written value: %v. Got %v", lastData, value) - } - - if readCount > readCountWithoutHint { - t.Fatalf("Expected lookup to complete with fewer reads than %d since we provided a hint. Did %d reads.", readCountWithoutHint, readCount) - } - -} - -// testG will hold precooked test results -// fields are abbreviated to reduce the size of the literal below -type testG struct { - e lookup.Epoch // last - n uint64 // next level - x uint8 // expected result -} - -// test cases -var testGetNextLevelCases []testG = []testG{{e: lookup.Epoch{Time: 989875233, Level: 12}, n: 989875233, x: 11}, {e: lookup.Epoch{Time: 995807650, Level: 18}, n: 995598156, x: 19}, {e: lookup.Epoch{Time: 969167082, Level: 0}, n: 968990357, x: 18}, {e: lookup.Epoch{Time: 993087628, Level: 14}, n: 992987044, x: 20}, {e: lookup.Epoch{Time: 963364631, Level: 20}, n: 963364630, x: 19}, {e: lookup.Epoch{Time: 963497510, Level: 16}, n: 963370732, x: 18}, {e: lookup.Epoch{Time: 955421349, Level: 22}, n: 955421348, x: 21}, {e: lookup.Epoch{Time: 968220379, Level: 15}, n: 968220378, x: 14}, {e: lookup.Epoch{Time: 939129014, Level: 6}, n: 939128771, x: 11}, {e: lookup.Epoch{Time: 907847903, Level: 6}, n: 907791833, x: 18}, {e: lookup.Epoch{Time: 910835564, Level: 15}, n: 910835564, x: 14}, {e: lookup.Epoch{Time: 913578333, Level: 22}, n: 881808431, x: 25}, {e: lookup.Epoch{Time: 895818460, Level: 3}, n: 895818132, x: 9}, {e: lookup.Epoch{Time: 903843025, Level: 24}, n: 895609561, x: 23}, {e: lookup.Epoch{Time: 877889433, Level: 13}, n: 877877093, x: 15}, {e: lookup.Epoch{Time: 901450396, Level: 10}, n: 901450058, x: 9}, {e: lookup.Epoch{Time: 925179910, Level: 3}, n: 925168393, x: 16}, {e: lookup.Epoch{Time: 913485477, Level: 21}, n: 913485476, x: 20}, {e: lookup.Epoch{Time: 924462991, Level: 18}, n: 924462990, x: 17}, {e: lookup.Epoch{Time: 941175128, Level: 13}, n: 941175127, x: 12}, {e: lookup.Epoch{Time: 920126583, Level: 3}, n: 920100782, x: 19}, {e: lookup.Epoch{Time: 932403200, Level: 9}, n: 932279891, x: 17}, {e: lookup.Epoch{Time: 948284931, Level: 2}, n: 948284921, x: 9}, {e: lookup.Epoch{Time: 953540997, Level: 7}, n: 950547986, x: 22}, {e: lookup.Epoch{Time: 926639837, Level: 18}, n: 918608882, x: 24}, {e: lookup.Epoch{Time: 954637598, Level: 1}, n: 954578761, x: 17}, {e: lookup.Epoch{Time: 943482981, Level: 10}, n: 942924151, x: 19}, {e: lookup.Epoch{Time: 963580771, Level: 7}, n: 963580771, x: 6}, {e: lookup.Epoch{Time: 993744930, Level: 7}, n: 993690858, x: 16}, {e: lookup.Epoch{Time: 1018890213, Level: 12}, n: 1018890212, x: 11}, {e: lookup.Epoch{Time: 1030309411, Level: 2}, n: 1030309227, x: 9}, {e: lookup.Epoch{Time: 1063204997, Level: 20}, n: 1063204996, x: 19}, {e: lookup.Epoch{Time: 1094340832, Level: 6}, n: 1094340633, x: 7}, {e: lookup.Epoch{Time: 1077880597, Level: 10}, n: 1075914292, x: 20}, {e: lookup.Epoch{Time: 1051114957, Level: 18}, n: 1051114957, x: 17}, {e: lookup.Epoch{Time: 1045649701, Level: 22}, n: 1045649700, x: 21}, {e: lookup.Epoch{Time: 1066198885, Level: 14}, n: 1066198884, x: 13}, {e: lookup.Epoch{Time: 1053231952, Level: 1}, n: 1053210845, x: 16}, {e: lookup.Epoch{Time: 1068763404, Level: 14}, n: 1068675428, x: 18}, {e: lookup.Epoch{Time: 1039042173, Level: 15}, n: 1038973110, x: 17}, {e: lookup.Epoch{Time: 1050747636, Level: 6}, n: 1050747364, x: 9}, {e: lookup.Epoch{Time: 1030034434, Level: 23}, n: 1030034433, x: 22}, {e: lookup.Epoch{Time: 1003783425, Level: 18}, n: 1003783424, x: 17}, {e: lookup.Epoch{Time: 988163976, Level: 15}, n: 988084064, x: 17}, {e: lookup.Epoch{Time: 1007222377, Level: 15}, n: 1007222377, x: 14}, {e: lookup.Epoch{Time: 1001211375, Level: 13}, n: 1001208178, x: 14}, {e: lookup.Epoch{Time: 997623199, Level: 8}, n: 997623198, x: 7}, {e: lookup.Epoch{Time: 1026283830, Level: 10}, n: 1006681704, x: 24}, {e: lookup.Epoch{Time: 1019421907, Level: 20}, n: 1019421906, x: 19}, {e: lookup.Epoch{Time: 1043154306, Level: 16}, n: 1043108343, x: 16}, {e: lookup.Epoch{Time: 1075643767, Level: 17}, n: 1075325898, x: 18}, {e: lookup.Epoch{Time: 1043726309, Level: 20}, n: 1043726308, x: 19}, {e: lookup.Epoch{Time: 1056415324, Level: 17}, n: 1056415324, x: 16}, {e: lookup.Epoch{Time: 1088650219, Level: 13}, n: 1088650218, x: 12}, {e: lookup.Epoch{Time: 1088551662, Level: 7}, n: 1088543355, x: 13}, {e: lookup.Epoch{Time: 1069667265, Level: 6}, n: 1069667075, x: 7}, {e: lookup.Epoch{Time: 1079145970, Level: 18}, n: 1079145969, x: 17}, {e: lookup.Epoch{Time: 1083338876, Level: 7}, n: 1083338875, x: 6}, {e: lookup.Epoch{Time: 1051581086, Level: 4}, n: 1051568869, x: 14}, {e: lookup.Epoch{Time: 1028430882, Level: 4}, n: 1028430864, x: 5}, {e: lookup.Epoch{Time: 1057356462, Level: 1}, n: 1057356417, x: 5}, {e: lookup.Epoch{Time: 1033104266, Level: 0}, n: 1033097479, x: 13}, {e: lookup.Epoch{Time: 1031391367, Level: 11}, n: 1031387304, x: 14}, {e: lookup.Epoch{Time: 1049781164, Level: 15}, n: 1049781163, x: 14}, {e: lookup.Epoch{Time: 1027271628, Level: 12}, n: 1027271627, x: 11}, {e: lookup.Epoch{Time: 1057270560, Level: 23}, n: 1057270560, x: 22}, {e: lookup.Epoch{Time: 1047501317, Level: 15}, n: 1047501317, x: 14}, {e: lookup.Epoch{Time: 1058349035, Level: 11}, n: 1045175573, x: 24}, {e: lookup.Epoch{Time: 1057396147, Level: 20}, n: 1057396147, x: 19}, {e: lookup.Epoch{Time: 1048906375, Level: 18}, n: 1039616919, x: 25}, {e: lookup.Epoch{Time: 1074294831, Level: 20}, n: 1074294831, x: 19}, {e: lookup.Epoch{Time: 1088946052, Level: 1}, n: 1088917364, x: 14}, {e: lookup.Epoch{Time: 1112337595, Level: 17}, n: 1111008110, x: 22}, {e: lookup.Epoch{Time: 1099990284, Level: 5}, n: 1099968370, x: 15}, {e: lookup.Epoch{Time: 1087036441, Level: 16}, n: 1053967855, x: 25}, {e: lookup.Epoch{Time: 1069225185, Level: 8}, n: 1069224660, x: 10}, {e: lookup.Epoch{Time: 1057505479, Level: 9}, n: 1057505170, x: 14}, {e: lookup.Epoch{Time: 1072381377, Level: 12}, n: 1065950959, x: 22}, {e: lookup.Epoch{Time: 1093887139, Level: 8}, n: 1093863305, x: 14}, {e: lookup.Epoch{Time: 1082366510, Level: 24}, n: 1082366510, x: 23}, {e: lookup.Epoch{Time: 1103231132, Level: 14}, n: 1102292201, x: 22}, {e: lookup.Epoch{Time: 1094502355, Level: 3}, n: 1094324652, x: 18}, {e: lookup.Epoch{Time: 1068488344, Level: 12}, n: 1067577330, x: 19}, {e: lookup.Epoch{Time: 1050278233, Level: 12}, n: 1050278232, x: 11}, {e: lookup.Epoch{Time: 1047660768, Level: 5}, n: 1047652137, x: 17}, {e: lookup.Epoch{Time: 1060116167, Level: 11}, n: 1060114091, x: 12}, {e: lookup.Epoch{Time: 1068149392, Level: 21}, n: 1052074801, x: 24}, {e: lookup.Epoch{Time: 1081934120, Level: 6}, n: 1081933847, x: 8}, {e: lookup.Epoch{Time: 1107943693, Level: 16}, n: 1107096139, x: 25}, {e: lookup.Epoch{Time: 1131571649, Level: 9}, n: 1131570428, x: 11}, {e: lookup.Epoch{Time: 1123139367, Level: 0}, n: 1122912198, x: 20}, {e: lookup.Epoch{Time: 1121144423, Level: 6}, n: 1120568289, x: 20}, {e: lookup.Epoch{Time: 1089932411, Level: 17}, n: 1089932410, x: 16}, {e: lookup.Epoch{Time: 1104899012, Level: 22}, n: 1098978789, x: 22}, {e: lookup.Epoch{Time: 1094588059, Level: 21}, n: 1094588059, x: 20}, {e: lookup.Epoch{Time: 1114987438, Level: 24}, n: 1114987437, x: 23}, {e: lookup.Epoch{Time: 1084186305, Level: 7}, n: 1084186241, x: 6}, {e: lookup.Epoch{Time: 1058827111, Level: 8}, n: 1058826504, x: 9}, {e: lookup.Epoch{Time: 1090679810, Level: 12}, n: 1090616539, x: 17}, {e: lookup.Epoch{Time: 1084299475, Level: 23}, n: 1084299475, x: 22}} - -func TestGetNextLevel(t *testing.T) { - - // First, test well-known cases - last := lookup.Epoch{ - Time: 1533799046, - Level: 5, - } - - level := lookup.GetNextLevel(last, last.Time) - expected := uint8(4) - if level != expected { - t.Fatalf("Expected GetNextLevel to return %d for same-time updates at a nonzero level, got %d", expected, level) - } - - level = lookup.GetNextLevel(last, last.Time+(1< lookup.HighestLevel { - v = 0 - } - now = last.Time + uint64(rand.Intn(1<. - -package feed - -import ( - "fmt" - "strconv" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -// Query is used to specify constraints when performing an update lookup -// TimeLimit indicates an upper bound for the search. Set to 0 for "now" -type Query struct { - Feed - Hint lookup.Epoch - TimeLimit uint64 -} - -// FromValues deserializes this instance from a string key-value store -// useful to parse query strings -func (q *Query) FromValues(values Values) error { - time, _ := strconv.ParseUint(values.Get("time"), 10, 64) - q.TimeLimit = time - - level, _ := strconv.ParseUint(values.Get("hint.level"), 10, 32) - q.Hint.Level = uint8(level) - q.Hint.Time, _ = strconv.ParseUint(values.Get("hint.time"), 10, 64) - if q.Feed.User == (common.Address{}) { - return q.Feed.FromValues(values) - } - return nil -} - -// AppendValues serializes this structure into the provided string key-value store -// useful to build query strings -func (q *Query) AppendValues(values Values) { - if q.TimeLimit != 0 { - values.Set("time", fmt.Sprintf("%d", q.TimeLimit)) - } - if q.Hint.Level != 0 { - values.Set("hint.level", fmt.Sprintf("%d", q.Hint.Level)) - } - if q.Hint.Time != 0 { - values.Set("hint.time", fmt.Sprintf("%d", q.Hint.Time)) - } - q.Feed.AppendValues(values) -} - -// NewQuery constructs an Query structure to find updates on or before `time` -// if time == 0, the latest update will be looked up -func NewQuery(feed *Feed, time uint64, hint lookup.Epoch) *Query { - return &Query{ - TimeLimit: time, - Feed: *feed, - Hint: hint, - } -} - -// NewQueryLatest generates lookup parameters that look for the latest update to a feed -func NewQueryLatest(feed *Feed, hint lookup.Epoch) *Query { - return NewQuery(feed, 0, hint) -} diff --git a/swarm/storage/feed/request.go b/swarm/storage/feed/request.go deleted file mode 100644 index dd91a7cf4597..000000000000 --- a/swarm/storage/feed/request.go +++ /dev/null @@ -1,286 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "bytes" - "encoding/json" - "hash" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -// Request represents a request to sign or signed feed update message -type Request struct { - Update // actual content that will be put on the chunk, less signature - Signature *Signature - idAddr storage.Address // cached chunk address for the update (not serialized, for internal use) - binaryData []byte // cached serialized data (does not get serialized again!, for efficiency/internal use) -} - -// updateRequestJSON represents a JSON-serialized UpdateRequest -type updateRequestJSON struct { - ID - ProtocolVersion uint8 `json:"protocolVersion"` - Data string `json:"data,omitempty"` - Signature string `json:"signature,omitempty"` -} - -// Request layout -// Update bytes -// SignatureLength bytes -const minimumSignedUpdateLength = minimumUpdateDataLength + signatureLength - -// NewFirstRequest returns a ready to sign request to publish a first feed update -func NewFirstRequest(topic Topic) *Request { - - request := new(Request) - - // get the current time - now := TimestampProvider.Now().Time - request.Epoch = lookup.GetFirstEpoch(now) - request.Feed.Topic = topic - request.Header.Version = ProtocolVersion - - return request -} - -// SetData stores the payload data the feed update will be updated with -func (r *Request) SetData(data []byte) { - r.data = data - r.Signature = nil -} - -// IsUpdate returns true if this request models a signed update or otherwise it is a signature request -func (r *Request) IsUpdate() bool { - return r.Signature != nil -} - -// Verify checks that signatures are valid -func (r *Request) Verify() (err error) { - if len(r.data) == 0 { - return NewError(ErrInvalidValue, "Update does not contain data") - } - if r.Signature == nil { - return NewError(ErrInvalidSignature, "Missing signature field") - } - - digest, err := r.GetDigest() - if err != nil { - return err - } - - // get the address of the signer (which also checks that it's a valid signature) - r.Feed.User, err = getUserAddr(digest, *r.Signature) - if err != nil { - return err - } - - // check that the lookup information contained in the chunk matches the updateAddr (chunk search key) - // that was used to retrieve this chunk - // if this validation fails, someone forged a chunk. - if !bytes.Equal(r.idAddr, r.Addr()) { - return NewError(ErrInvalidSignature, "Signature address does not match with update user address") - } - - return nil -} - -// Sign executes the signature to validate the update message -func (r *Request) Sign(signer Signer) error { - r.Feed.User = signer.Address() - r.binaryData = nil //invalidate serialized data - digest, err := r.GetDigest() // computes digest and serializes into .binaryData - if err != nil { - return err - } - - signature, err := signer.Sign(digest) - if err != nil { - return err - } - - // Although the Signer interface returns the public address of the signer, - // recover it from the signature to see if they match - userAddr, err := getUserAddr(digest, signature) - if err != nil { - return NewError(ErrInvalidSignature, "Error verifying signature") - } - - if userAddr != signer.Address() { // sanity check to make sure the Signer is declaring the same address used to sign! - return NewError(ErrInvalidSignature, "Signer address does not match update user address") - } - - r.Signature = &signature - r.idAddr = r.Addr() - return nil -} - -// GetDigest creates the feed update digest used in signatures -// the serialized payload is cached in .binaryData -func (r *Request) GetDigest() (result common.Hash, err error) { - hasher := hashPool.Get().(hash.Hash) - defer hashPool.Put(hasher) - hasher.Reset() - dataLength := r.Update.binaryLength() - if r.binaryData == nil { - r.binaryData = make([]byte, dataLength+signatureLength) - if err := r.Update.binaryPut(r.binaryData[:dataLength]); err != nil { - return result, err - } - } - hasher.Write(r.binaryData[:dataLength]) //everything except the signature. - - return common.BytesToHash(hasher.Sum(nil)), nil -} - -// create an update chunk. -func (r *Request) toChunk() (storage.Chunk, error) { - - // Check that the update is signed and serialized - // For efficiency, data is serialized during signature and cached in - // the binaryData field when computing the signature digest in .getDigest() - if r.Signature == nil || r.binaryData == nil { - return nil, NewError(ErrInvalidSignature, "toChunk called without a valid signature or payload data. Call .Sign() first.") - } - - updateLength := r.Update.binaryLength() - - // signature is the last item in the chunk data - copy(r.binaryData[updateLength:], r.Signature[:]) - - chunk := storage.NewChunk(r.idAddr, r.binaryData) - return chunk, nil -} - -// fromChunk populates this structure from chunk data. It does not verify the signature is valid. -func (r *Request) fromChunk(chunk storage.Chunk) error { - // for update chunk layout see Request definition - - chunkdata := chunk.Data() - - //deserialize the feed update portion - if err := r.Update.binaryGet(chunkdata[:len(chunkdata)-signatureLength]); err != nil { - return err - } - - // Extract the signature - var signature *Signature - cursor := r.Update.binaryLength() - sigdata := chunkdata[cursor : cursor+signatureLength] - if len(sigdata) > 0 { - signature = &Signature{} - copy(signature[:], sigdata) - } - - r.Signature = signature - r.idAddr = chunk.Address() - r.binaryData = chunkdata - - return nil - -} - -// FromValues deserializes this instance from a string key-value store -// useful to parse query strings -func (r *Request) FromValues(values Values, data []byte) error { - signatureBytes, err := hexutil.Decode(values.Get("signature")) - if err != nil { - r.Signature = nil - } else { - if len(signatureBytes) != signatureLength { - return NewError(ErrInvalidSignature, "Incorrect signature length") - } - r.Signature = new(Signature) - copy(r.Signature[:], signatureBytes) - } - err = r.Update.FromValues(values, data) - if err != nil { - return err - } - r.idAddr = r.Addr() - return err -} - -// AppendValues serializes this structure into the provided string key-value store -// useful to build query strings -func (r *Request) AppendValues(values Values) []byte { - if r.Signature != nil { - values.Set("signature", hexutil.Encode(r.Signature[:])) - } - return r.Update.AppendValues(values) -} - -// fromJSON takes an update request JSON and populates an UpdateRequest -func (r *Request) fromJSON(j *updateRequestJSON) error { - - r.ID = j.ID - r.Header.Version = j.ProtocolVersion - - var err error - if j.Data != "" { - r.data, err = hexutil.Decode(j.Data) - if err != nil { - return NewError(ErrInvalidValue, "Cannot decode data") - } - } - - if j.Signature != "" { - sigBytes, err := hexutil.Decode(j.Signature) - if err != nil || len(sigBytes) != signatureLength { - return NewError(ErrInvalidSignature, "Cannot decode signature") - } - r.Signature = new(Signature) - r.idAddr = r.Addr() - copy(r.Signature[:], sigBytes) - } - return nil -} - -// UnmarshalJSON takes a JSON structure stored in a byte array and populates the Request object -// Implements json.Unmarshaler interface -func (r *Request) UnmarshalJSON(rawData []byte) error { - var requestJSON updateRequestJSON - if err := json.Unmarshal(rawData, &requestJSON); err != nil { - return err - } - return r.fromJSON(&requestJSON) -} - -// MarshalJSON takes an update request and encodes it as a JSON structure into a byte array -// Implements json.Marshaler interface -func (r *Request) MarshalJSON() (rawData []byte, err error) { - var signatureString, dataString string - if r.Signature != nil { - signatureString = hexutil.Encode(r.Signature[:]) - } - if r.data != nil { - dataString = hexutil.Encode(r.data) - } - - requestJSON := &updateRequestJSON{ - ID: r.ID, - ProtocolVersion: r.Header.Version, - Data: dataString, - Signature: signatureString, - } - - return json.Marshal(requestJSON) -} diff --git a/swarm/storage/feed/request_test.go b/swarm/storage/feed/request_test.go deleted file mode 100644 index c30158fddf17..000000000000 --- a/swarm/storage/feed/request_test.go +++ /dev/null @@ -1,312 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "bytes" - "encoding/binary" - "encoding/json" - "fmt" - "reflect" - "testing" - - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" -) - -func areEqualJSON(s1, s2 string) (bool, error) { - //credit for the trick: turtlemonvh https://gist.github.com/turtlemonvh/e4f7404e28387fadb8ad275a99596f67 - var o1 interface{} - var o2 interface{} - - err := json.Unmarshal([]byte(s1), &o1) - if err != nil { - return false, fmt.Errorf("Error mashalling string 1 :: %s", err.Error()) - } - err = json.Unmarshal([]byte(s2), &o2) - if err != nil { - return false, fmt.Errorf("Error mashalling string 2 :: %s", err.Error()) - } - - return reflect.DeepEqual(o1, o2), nil -} - -// TestEncodingDecodingUpdateRequests ensures that requests are serialized properly -// while also checking cryptographically that only the owner of a feed can update it. -func TestEncodingDecodingUpdateRequests(t *testing.T) { - - charlie := newCharlieSigner() //Charlie - bob := newBobSigner() //Bob - - // Create a feed to our good guy Charlie's name - topic, _ := NewTopic("a good topic name", nil) - firstRequest := NewFirstRequest(topic) - firstRequest.User = charlie.Address() - - // We now encode the create message to simulate we send it over the wire - messageRawData, err := firstRequest.MarshalJSON() - if err != nil { - t.Fatalf("Error encoding first feed update request: %s", err) - } - - // ... the message arrives and is decoded... - var recoveredFirstRequest Request - if err := recoveredFirstRequest.UnmarshalJSON(messageRawData); err != nil { - t.Fatalf("Error decoding first feed update request: %s", err) - } - - // ... but verification should fail because it is not signed! - if err := recoveredFirstRequest.Verify(); err == nil { - t.Fatal("Expected Verify to fail since the message is not signed") - } - - // We now assume that the feed ypdate was created and propagated. - - const expectedSignature = "0x7235b27a68372ddebcf78eba48543fa460864b0b0e99cb533fcd3664820e603312d29426dd00fb39628f5299480a69bf6e462838d78de49ce0704c754c9deb2601" - const expectedJSON = `{"feed":{"topic":"0x6120676f6f6420746f706963206e616d65000000000000000000000000000000","user":"0x876a8936a7cd0b79ef0735ad0896c1afe278781c"},"epoch":{"time":1000,"level":1},"protocolVersion":0,"data":"0x5468697320686f75722773207570646174653a20537761726d2039392e3020686173206265656e2072656c656173656421"}` - - //Put together an unsigned update request that we will serialize to send it to the signer. - data := []byte("This hour's update: Swarm 99.0 has been released!") - request := &Request{ - Update: Update{ - ID: ID{ - Epoch: lookup.Epoch{ - Time: 1000, - Level: 1, - }, - Feed: firstRequest.Update.Feed, - }, - data: data, - }, - } - - messageRawData, err = request.MarshalJSON() - if err != nil { - t.Fatalf("Error encoding update request: %s", err) - } - - equalJSON, err := areEqualJSON(string(messageRawData), expectedJSON) - if err != nil { - t.Fatalf("Error decoding update request JSON: %s", err) - } - if !equalJSON { - t.Fatalf("Received a different JSON message. Expected %s, got %s", expectedJSON, string(messageRawData)) - } - - // now the encoded message messageRawData is sent over the wire and arrives to the signer - - //Attempt to extract an UpdateRequest out of the encoded message - var recoveredRequest Request - if err := recoveredRequest.UnmarshalJSON(messageRawData); err != nil { - t.Fatalf("Error decoding update request: %s", err) - } - - //sign the request and see if it matches our predefined signature above. - if err := recoveredRequest.Sign(charlie); err != nil { - t.Fatalf("Error signing request: %s", err) - } - - compareByteSliceToExpectedHex(t, "signature", recoveredRequest.Signature[:], expectedSignature) - - // mess with the signature and see what happens. To alter the signature, we briefly decode it as JSON - // to alter the signature field. - var j updateRequestJSON - if err := json.Unmarshal([]byte(expectedJSON), &j); err != nil { - t.Fatal("Error unmarshalling test json, check expectedJSON constant") - } - j.Signature = "Certainly not a signature" - corruptMessage, _ := json.Marshal(j) // encode the message with the bad signature - var corruptRequest Request - if err = corruptRequest.UnmarshalJSON(corruptMessage); err == nil { - t.Fatal("Expected DecodeUpdateRequest to fail when trying to interpret a corrupt message with an invalid signature") - } - - // Now imagine Bob wants to create an update of his own about the same feed, - // signing a message with his private key - if err := request.Sign(bob); err != nil { - t.Fatalf("Error signing: %s", err) - } - - // Now Bob encodes the message to send it over the wire... - messageRawData, err = request.MarshalJSON() - if err != nil { - t.Fatalf("Error encoding message:%s", err) - } - - // ... the message arrives to our Swarm node and it is decoded. - recoveredRequest = Request{} - if err := recoveredRequest.UnmarshalJSON(messageRawData); err != nil { - t.Fatalf("Error decoding message:%s", err) - } - - // Before checking what happened with Bob's update, let's see what would happen if we mess - // with the signature big time to see if Verify catches it - savedSignature := *recoveredRequest.Signature // save the signature for later - binary.LittleEndian.PutUint64(recoveredRequest.Signature[5:], 556845463424) // write some random data to break the signature - if err = recoveredRequest.Verify(); err == nil { - t.Fatal("Expected Verify to fail on corrupt signature") - } - - // restore the Bob's signature from corruption - *recoveredRequest.Signature = savedSignature - - // Now the signature is not corrupt - if err = recoveredRequest.Verify(); err != nil { - t.Fatal(err) - } - - // Reuse object and sign with our friend Charlie's private key - if err := recoveredRequest.Sign(charlie); err != nil { - t.Fatalf("Error signing with the correct private key: %s", err) - } - - // And now, Verify should work since this update now belongs to Charlie - if err = recoveredRequest.Verify(); err != nil { - t.Fatalf("Error verifying that Charlie, can sign a reused request object:%s", err) - } - - // mess with the lookup key to make sure Verify fails: - recoveredRequest.Time = 77999 // this will alter the lookup key - if err = recoveredRequest.Verify(); err == nil { - t.Fatalf("Expected Verify to fail since the lookup key has been altered") - } -} - -func getTestRequest() *Request { - return &Request{ - Update: *getTestFeedUpdate(), - } -} - -func TestUpdateChunkSerializationErrorChecking(t *testing.T) { - - // Test that parseUpdate fails if the chunk is too small - var r Request - if err := r.fromChunk(storage.NewChunk(storage.ZeroAddr, make([]byte, minimumUpdateDataLength-1+signatureLength))); err == nil { - t.Fatalf("Expected request.fromChunk to fail when chunkData contains less than %d bytes", minimumUpdateDataLength) - } - - r = *getTestRequest() - - _, err := r.toChunk() - if err == nil { - t.Fatal("Expected request.toChunk to fail when there is no data") - } - r.data = []byte("Al bien hacer jamás le falta premio") // put some arbitrary length data - _, err = r.toChunk() - if err == nil { - t.Fatal("expected request.toChunk to fail when there is no signature") - } - - charlie := newCharlieSigner() - if err := r.Sign(charlie); err != nil { - t.Fatalf("error signing:%s", err) - } - - chunk, err := r.toChunk() - if err != nil { - t.Fatalf("error creating update chunk:%s", err) - } - - compareByteSliceToExpectedHex(t, "chunk", chunk.Data(), "0x0000000000000000776f726c64206e657773207265706f72742c20657665727920686f7572000000876a8936a7cd0b79ef0735ad0896c1afe278781ce803000000000019416c206269656e206861636572206a616dc3a173206c652066616c7461207072656d696f5a0ffe0bc27f207cd5b00944c8b9cee93e08b89b5ada777f123ac535189333f174a6a4ca2f43a92c4a477a49d774813c36ce8288552c58e6205b0ac35d0507eb00") - - var recovered Request - recovered.fromChunk(chunk) - if !reflect.DeepEqual(recovered, r) { - t.Fatal("Expected recovered feed update request to equal the original one") - } -} - -// check that signature address matches update signer address -func TestReverse(t *testing.T) { - - epoch := lookup.Epoch{ - Time: 7888, - Level: 6, - } - - // make fake timeProvider - timeProvider := &fakeTimeProvider{ - currentTime: startTime.Time, - } - - // signer containing private key - signer := newAliceSigner() - - // set up rpc and create feeds handler - _, _, teardownTest, err := setupTest(timeProvider, signer) - if err != nil { - t.Fatal(err) - } - defer teardownTest() - - topic, _ := NewTopic("Cervantes quotes", nil) - fd := Feed{ - Topic: topic, - User: signer.Address(), - } - - data := []byte("Donde una puerta se cierra, otra se abre") - - request := new(Request) - request.Feed = fd - request.Epoch = epoch - request.data = data - - // generate a chunk key for this request - key := request.Addr() - - if err = request.Sign(signer); err != nil { - t.Fatal(err) - } - - chunk, err := request.toChunk() - if err != nil { - t.Fatal(err) - } - - // check that we can recover the owner account from the update chunk's signature - var checkUpdate Request - if err := checkUpdate.fromChunk(chunk); err != nil { - t.Fatal(err) - } - checkdigest, err := checkUpdate.GetDigest() - if err != nil { - t.Fatal(err) - } - recoveredAddr, err := getUserAddr(checkdigest, *checkUpdate.Signature) - if err != nil { - t.Fatalf("Retrieve address from signature fail: %v", err) - } - originalAddr := crypto.PubkeyToAddress(signer.PrivKey.PublicKey) - - // check that the metadata retrieved from the chunk matches what we gave it - if recoveredAddr != originalAddr { - t.Fatalf("addresses dont match: %x != %x", originalAddr, recoveredAddr) - } - - if !bytes.Equal(key[:], chunk.Address()[:]) { - t.Fatalf("Expected chunk key '%x', was '%x'", key, chunk.Address()) - } - if epoch != checkUpdate.Epoch { - t.Fatalf("Expected epoch to be '%s', was '%s'", epoch.String(), checkUpdate.Epoch.String()) - } - if !bytes.Equal(data, checkUpdate.data) { - t.Fatalf("Expected data '%x', was '%x'", data, checkUpdate.data) - } -} diff --git a/swarm/storage/feed/sign.go b/swarm/storage/feed/sign.go deleted file mode 100644 index 5f0ea0b33c90..000000000000 --- a/swarm/storage/feed/sign.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "crypto/ecdsa" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" -) - -const signatureLength = 65 - -// Signature is an alias for a static byte array with the size of a signature -type Signature [signatureLength]byte - -// Signer signs feed update payloads -type Signer interface { - Sign(common.Hash) (Signature, error) - Address() common.Address -} - -// GenericSigner implements the Signer interface -// It is the vanilla signer that probably should be used in most cases -type GenericSigner struct { - PrivKey *ecdsa.PrivateKey - address common.Address -} - -// NewGenericSigner builds a signer that will sign everything with the provided private key -func NewGenericSigner(privKey *ecdsa.PrivateKey) *GenericSigner { - return &GenericSigner{ - PrivKey: privKey, - address: crypto.PubkeyToAddress(privKey.PublicKey), - } -} - -// Sign signs the supplied data -// It wraps the ethereum crypto.Sign() method -func (s *GenericSigner) Sign(data common.Hash) (signature Signature, err error) { - signaturebytes, err := crypto.Sign(data.Bytes(), s.PrivKey) - if err != nil { - return - } - copy(signature[:], signaturebytes) - return -} - -// Address returns the public key of the signer's private key -func (s *GenericSigner) Address() common.Address { - return s.address -} - -// getUserAddr extracts the address of the feed update signer -func getUserAddr(digest common.Hash, signature Signature) (common.Address, error) { - pub, err := crypto.SigToPub(digest.Bytes(), signature[:]) - if err != nil { - return common.Address{}, err - } - return crypto.PubkeyToAddress(*pub), nil -} diff --git a/swarm/storage/feed/testutil.go b/swarm/storage/feed/testutil.go deleted file mode 100644 index caa39d9ffc2e..000000000000 --- a/swarm/storage/feed/testutil.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "context" - "fmt" - "path/filepath" - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -const ( - testDbDirName = "feeds" -) - -type TestHandler struct { - *Handler -} - -func (t *TestHandler) Close() { - t.chunkStore.Close() -} - -type mockNetFetcher struct{} - -func (m *mockNetFetcher) Request(hopCount uint8) { -} -func (m *mockNetFetcher) Offer(source *enode.ID) { -} - -func newFakeNetFetcher(context.Context, storage.Address, *sync.Map) storage.NetFetcher { - return &mockNetFetcher{} -} - -// NewTestHandler creates Handler object to be used for testing purposes. -func NewTestHandler(datadir string, params *HandlerParams) (*TestHandler, error) { - path := filepath.Join(datadir, testDbDirName) - fh := NewHandler(params) - localstoreparams := storage.NewDefaultLocalStoreParams() - localstoreparams.Init(path) - localStore, err := storage.NewLocalStore(localstoreparams, nil) - if err != nil { - return nil, fmt.Errorf("localstore create fail, path %s: %v", path, err) - } - localStore.Validators = append(localStore.Validators, storage.NewContentAddressValidator(storage.MakeHashFunc(feedsHashAlgorithm))) - localStore.Validators = append(localStore.Validators, fh) - netStore, err := storage.NewNetStore(localStore, nil) - if err != nil { - return nil, err - } - netStore.NewNetFetcherFunc = newFakeNetFetcher - fh.SetStore(netStore) - return &TestHandler{fh}, nil -} diff --git a/swarm/storage/feed/timestampprovider.go b/swarm/storage/feed/timestampprovider.go deleted file mode 100644 index fb60cea9c3d6..000000000000 --- a/swarm/storage/feed/timestampprovider.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "encoding/json" - "time" -) - -// TimestampProvider sets the time source of the feeds package -var TimestampProvider timestampProvider = NewDefaultTimestampProvider() - -// Timestamp encodes a point in time as a Unix epoch -type Timestamp struct { - Time uint64 `json:"time"` // Unix epoch timestamp, in seconds -} - -// timestampProvider interface describes a source of timestamp information -type timestampProvider interface { - Now() Timestamp // returns the current timestamp information -} - -// UnmarshalJSON implements the json.Unmarshaller interface -func (t *Timestamp) UnmarshalJSON(data []byte) error { - return json.Unmarshal(data, &t.Time) -} - -// MarshalJSON implements the json.Marshaller interface -func (t *Timestamp) MarshalJSON() ([]byte, error) { - return json.Marshal(t.Time) -} - -// DefaultTimestampProvider is a TimestampProvider that uses system time -// as time source -type DefaultTimestampProvider struct { -} - -// NewDefaultTimestampProvider creates a system clock based timestamp provider -func NewDefaultTimestampProvider() *DefaultTimestampProvider { - return &DefaultTimestampProvider{} -} - -// Now returns the current time according to this provider -func (dtp *DefaultTimestampProvider) Now() Timestamp { - return Timestamp{ - Time: uint64(time.Now().Unix()), - } -} diff --git a/swarm/storage/feed/topic.go b/swarm/storage/feed/topic.go deleted file mode 100644 index 43a7b4ba4c33..000000000000 --- a/swarm/storage/feed/topic.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/ethereum/go-ethereum/common/bitutil" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TopicLength establishes the max length of a topic string -const TopicLength = storage.AddressLength - -// Topic represents what a feed is about -type Topic [TopicLength]byte - -// ErrTopicTooLong is returned when creating a topic with a name/related content too long -var ErrTopicTooLong = fmt.Errorf("Topic is too long. Max length is %d", TopicLength) - -// NewTopic creates a new topic from a provided name and "related content" byte array, -// merging the two together. -// If relatedContent or name are longer than TopicLength, they will be truncated and an error returned -// name can be an empty string -// relatedContent can be nil -func NewTopic(name string, relatedContent []byte) (topic Topic, err error) { - if relatedContent != nil { - contentLength := len(relatedContent) - if contentLength > TopicLength { - contentLength = TopicLength - err = ErrTopicTooLong - } - copy(topic[:], relatedContent[:contentLength]) - } - nameBytes := []byte(name) - nameLength := len(nameBytes) - if nameLength > TopicLength { - nameLength = TopicLength - err = ErrTopicTooLong - } - bitutil.XORBytes(topic[:], topic[:], nameBytes[:nameLength]) - return topic, err -} - -// Hex will return the topic encoded as an hex string -func (t *Topic) Hex() string { - return hexutil.Encode(t[:]) -} - -// FromHex will parse a hex string into this Topic instance -func (t *Topic) FromHex(hex string) error { - bytes, err := hexutil.Decode(hex) - if err != nil || len(bytes) != len(t) { - return NewErrorf(ErrInvalidValue, "Cannot decode topic") - } - copy(t[:], bytes) - return nil -} - -// Name will try to extract the topic name out of the Topic -func (t *Topic) Name(relatedContent []byte) string { - nameBytes := *t - if relatedContent != nil { - contentLength := len(relatedContent) - if contentLength > TopicLength { - contentLength = TopicLength - } - bitutil.XORBytes(nameBytes[:], t[:], relatedContent[:contentLength]) - } - z := bytes.IndexByte(nameBytes[:], 0) - if z < 0 { - z = TopicLength - } - return string(nameBytes[:z]) - -} - -// UnmarshalJSON implements the json.Unmarshaller interface -func (t *Topic) UnmarshalJSON(data []byte) error { - var hex string - json.Unmarshal(data, &hex) - return t.FromHex(hex) -} - -// MarshalJSON implements the json.Marshaller interface -func (t *Topic) MarshalJSON() ([]byte, error) { - return json.Marshal(t.Hex()) -} diff --git a/swarm/storage/feed/topic_test.go b/swarm/storage/feed/topic_test.go deleted file mode 100644 index 0403204f7f0e..000000000000 --- a/swarm/storage/feed/topic_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package feed - -import ( - "testing" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -func TestTopic(t *testing.T) { - related, _ := hexutil.Decode("0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789") - topicName := "test-topic" - topic, _ := NewTopic(topicName, related) - hex := topic.Hex() - expectedHex := "0xdfa89c750e3108f9c2aeef0123456789abcdef0123456789abcdef0123456789" - if hex != expectedHex { - t.Fatalf("Expected %s, got %s", expectedHex, hex) - } - - var topic2 Topic - topic2.FromHex(hex) - if topic2 != topic { - t.Fatal("Expected recovered topic to be equal to original one") - } - - if topic2.Name(related) != topicName { - t.Fatal("Retrieved name does not match") - } - - bytes, err := topic2.MarshalJSON() - if err != nil { - t.Fatal(err) - } - expectedJSON := `"0xdfa89c750e3108f9c2aeef0123456789abcdef0123456789abcdef0123456789"` - equal, err := areEqualJSON(expectedJSON, string(bytes)) - if err != nil { - t.Fatal(err) - } - if !equal { - t.Fatalf("Expected JSON to be %s, got %s", expectedJSON, string(bytes)) - } - - err = topic2.UnmarshalJSON(bytes) - if err != nil { - t.Fatal(err) - } - if topic2 != topic { - t.Fatal("Expected recovered topic to be equal to original one") - } - -} diff --git a/swarm/storage/feed/update.go b/swarm/storage/feed/update.go deleted file mode 100644 index 21c004ca422d..000000000000 --- a/swarm/storage/feed/update.go +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "fmt" - "strconv" - - "github.com/ethereum/go-ethereum/swarm/chunk" -) - -// ProtocolVersion defines the current version of the protocol that will be included in each update message -const ProtocolVersion uint8 = 0 - -const headerLength = 8 - -// Header defines a update message header including a protocol version byte -type Header struct { - Version uint8 // Protocol version - Padding [headerLength - 1]uint8 // reserved for future use -} - -// Update encapsulates the information sent as part of a feed update -type Update struct { - Header Header // - ID // Feed Update identifying information - data []byte // actual data payload -} - -const minimumUpdateDataLength = idLength + headerLength + 1 - -//MaxUpdateDataLength indicates the maximum payload size for a feed update -const MaxUpdateDataLength = chunk.DefaultSize - signatureLength - idLength - headerLength - -// binaryPut serializes the feed update information into the given slice -func (r *Update) binaryPut(serializedData []byte) error { - datalength := len(r.data) - if datalength == 0 { - return NewError(ErrInvalidValue, "a feed update must contain data") - } - - if datalength > MaxUpdateDataLength { - return NewErrorf(ErrInvalidValue, "feed update data is too big (length=%d). Max length=%d", datalength, MaxUpdateDataLength) - } - - if len(serializedData) != r.binaryLength() { - return NewErrorf(ErrInvalidValue, "slice passed to putBinary must be of exact size. Expected %d bytes", r.binaryLength()) - } - - var cursor int - // serialize Header - serializedData[cursor] = r.Header.Version - copy(serializedData[cursor+1:headerLength], r.Header.Padding[:headerLength-1]) - cursor += headerLength - - // serialize ID - if err := r.ID.binaryPut(serializedData[cursor : cursor+idLength]); err != nil { - return err - } - cursor += idLength - - // add the data - copy(serializedData[cursor:], r.data) - cursor += datalength - - return nil -} - -// binaryLength returns the expected number of bytes this structure will take to encode -func (r *Update) binaryLength() int { - return idLength + headerLength + len(r.data) -} - -// binaryGet populates this instance from the information contained in the passed byte slice -func (r *Update) binaryGet(serializedData []byte) error { - if len(serializedData) < minimumUpdateDataLength { - return NewErrorf(ErrNothingToReturn, "chunk less than %d bytes cannot be a feed update chunk", minimumUpdateDataLength) - } - dataLength := len(serializedData) - idLength - headerLength - // at this point we can be satisfied that we have the correct data length to read - - var cursor int - - // deserialize Header - r.Header.Version = serializedData[cursor] // extract the protocol version - copy(r.Header.Padding[:headerLength-1], serializedData[cursor+1:headerLength]) // extract the padding - cursor += headerLength - - if err := r.ID.binaryGet(serializedData[cursor : cursor+idLength]); err != nil { - return err - } - cursor += idLength - - data := serializedData[cursor : cursor+dataLength] - cursor += dataLength - - // now that all checks have passed, copy data into structure - r.data = make([]byte, dataLength) - copy(r.data, data) - - return nil - -} - -// FromValues deserializes this instance from a string key-value store -// useful to parse query strings -func (r *Update) FromValues(values Values, data []byte) error { - r.data = data - version, _ := strconv.ParseUint(values.Get("protocolVersion"), 10, 32) - r.Header.Version = uint8(version) - return r.ID.FromValues(values) -} - -// AppendValues serializes this structure into the provided string key-value store -// useful to build query strings -func (r *Update) AppendValues(values Values) []byte { - r.ID.AppendValues(values) - values.Set("protocolVersion", fmt.Sprintf("%d", r.Header.Version)) - return r.data -} diff --git a/swarm/storage/feed/update_test.go b/swarm/storage/feed/update_test.go deleted file mode 100644 index 24c09b361741..000000000000 --- a/swarm/storage/feed/update_test.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package feed - -import ( - "testing" -) - -func getTestFeedUpdate() *Update { - return &Update{ - ID: *getTestID(), - data: []byte("El que lee mucho y anda mucho, ve mucho y sabe mucho"), - } -} - -func TestUpdateSerializer(t *testing.T) { - testBinarySerializerRecovery(t, getTestFeedUpdate(), "0x0000000000000000776f726c64206e657773207265706f72742c20657665727920686f7572000000876a8936a7cd0b79ef0735ad0896c1afe278781ce803000000000019456c20717565206c6565206d7563686f207920616e6461206d7563686f2c207665206d7563686f20792073616265206d7563686f") -} - -func TestUpdateLengthCheck(t *testing.T) { - testBinarySerializerLengthCheck(t, getTestFeedUpdate()) - // Test fail if update is too big - update := getTestFeedUpdate() - update.data = make([]byte, MaxUpdateDataLength+100) - serialized := make([]byte, update.binaryLength()) - if err := update.binaryPut(serialized); err == nil { - t.Fatal("Expected update.binaryPut to fail since update is too big") - } - - // test fail if data is empty or nil - update.data = nil - serialized = make([]byte, update.binaryLength()) - if err := update.binaryPut(serialized); err == nil { - t.Fatal("Expected update.binaryPut to fail since data is empty") - } -} diff --git a/swarm/storage/filestore.go b/swarm/storage/filestore.go deleted file mode 100644 index 0bad944ee91e..000000000000 --- a/swarm/storage/filestore.go +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "io" - "sort" - "sync" -) - -/* -FileStore provides the client API entrypoints Store and Retrieve to store and retrieve -It can store anything that has a byte slice representation, so files or serialised objects etc. - -Storage: FileStore calls the Chunker to segment the input datastream of any size to a merkle hashed tree of chunks. The key of the root block is returned to the client. - -Retrieval: given the key of the root block, the FileStore retrieves the block chunks and reconstructs the original data and passes it back as a lazy reader. A lazy reader is a reader with on-demand delayed processing, i.e. the chunks needed to reconstruct a large file are only fetched and processed if that particular part of the document is actually read. - -As the chunker produces chunks, FileStore dispatches them to its own chunk store -implementation for storage or retrieval. -*/ - -const ( - defaultLDBCapacity = 5000000 // capacity for LevelDB, by default 5*10^6*4096 bytes == 20GB - defaultCacheCapacity = 10000 // capacity for in-memory chunks' cache - defaultChunkRequestsCacheCapacity = 5000000 // capacity for container holding outgoing requests for chunks. should be set to LevelDB capacity -) - -type FileStore struct { - ChunkStore - hashFunc SwarmHasher -} - -type FileStoreParams struct { - Hash string -} - -func NewFileStoreParams() *FileStoreParams { - return &FileStoreParams{ - Hash: DefaultHash, - } -} - -// for testing locally -func NewLocalFileStore(datadir string, basekey []byte) (*FileStore, error) { - params := NewDefaultLocalStoreParams() - params.Init(datadir) - localStore, err := NewLocalStore(params, nil) - if err != nil { - return nil, err - } - localStore.Validators = append(localStore.Validators, NewContentAddressValidator(MakeHashFunc(DefaultHash))) - return NewFileStore(localStore, NewFileStoreParams()), nil -} - -func NewFileStore(store ChunkStore, params *FileStoreParams) *FileStore { - hashFunc := MakeHashFunc(params.Hash) - return &FileStore{ - ChunkStore: store, - hashFunc: hashFunc, - } -} - -// Retrieve is a public API. Main entry point for document retrieval directly. Used by the -// FS-aware API and httpaccess -// Chunk retrieval blocks on netStore requests with a timeout so reader will -// report error if retrieval of chunks within requested range time out. -// It returns a reader with the chunk data and whether the content was encrypted -func (f *FileStore) Retrieve(ctx context.Context, addr Address) (reader *LazyChunkReader, isEncrypted bool) { - isEncrypted = len(addr) > f.hashFunc().Size() - getter := NewHasherStore(f.ChunkStore, f.hashFunc, isEncrypted) - reader = TreeJoin(ctx, addr, getter, 0) - return -} - -// Store is a public API. Main entry point for document storage directly. Used by the -// FS-aware API and httpaccess -func (f *FileStore) Store(ctx context.Context, data io.Reader, size int64, toEncrypt bool) (addr Address, wait func(context.Context) error, err error) { - putter := NewHasherStore(f.ChunkStore, f.hashFunc, toEncrypt) - return PyramidSplit(ctx, data, putter, putter) -} - -func (f *FileStore) HashSize() int { - return f.hashFunc().Size() -} - -// GetAllReferences is a public API. This endpoint returns all chunk hashes (only) for a given file -func (f *FileStore) GetAllReferences(ctx context.Context, data io.Reader, toEncrypt bool) (addrs AddressCollection, err error) { - // create a special kind of putter, which only will store the references - putter := &hashExplorer{ - hasherStore: NewHasherStore(f.ChunkStore, f.hashFunc, toEncrypt), - } - // do the actual splitting anyway, no way around it - _, wait, err := PyramidSplit(ctx, data, putter, putter) - if err != nil { - return nil, err - } - // wait for splitting to be complete and all chunks processed - err = wait(ctx) - if err != nil { - return nil, err - } - // collect all references - addrs = NewAddressCollection(0) - for _, ref := range putter.references { - addrs = append(addrs, Address(ref)) - } - sort.Sort(addrs) - return addrs, nil -} - -// hashExplorer is a special kind of putter which will only store chunk references -type hashExplorer struct { - *hasherStore - references []Reference - lock sync.Mutex -} - -// HashExplorer's Put will add just the chunk hashes to its `References` -func (he *hashExplorer) Put(ctx context.Context, chunkData ChunkData) (Reference, error) { - // Need to do the actual Put, which returns the references - ref, err := he.hasherStore.Put(ctx, chunkData) - if err != nil { - return nil, err - } - // internally store the reference - he.lock.Lock() - he.references = append(he.references, ref) - he.lock.Unlock() - return ref, nil -} diff --git a/swarm/storage/filestore_test.go b/swarm/storage/filestore_test.go deleted file mode 100644 index 06c4be1d78bb..000000000000 --- a/swarm/storage/filestore_test.go +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "io" - "io/ioutil" - "os" - "testing" - - "github.com/ethereum/go-ethereum/swarm/testutil" -) - -const testDataSize = 0x0001000 - -func TestFileStorerandom(t *testing.T) { - testFileStoreRandom(false, t) - testFileStoreRandom(true, t) -} - -func testFileStoreRandom(toEncrypt bool, t *testing.T) { - tdb, cleanup, err := newTestDbStore(false, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - db := tdb.LDBStore - db.setCapacity(50000) - memStore := NewMemStore(NewDefaultStoreParams(), db) - localStore := &LocalStore{ - memStore: memStore, - DbStore: db, - } - - fileStore := NewFileStore(localStore, NewFileStoreParams()) - defer os.RemoveAll("/tmp/bzz") - - slice := testutil.RandomBytes(1, testDataSize) - ctx := context.TODO() - key, wait, err := fileStore.Store(ctx, bytes.NewReader(slice), testDataSize, toEncrypt) - if err != nil { - t.Fatalf("Store error: %v", err) - } - err = wait(ctx) - if err != nil { - t.Fatalf("Store waitt error: %v", err.Error()) - } - resultReader, isEncrypted := fileStore.Retrieve(context.TODO(), key) - if isEncrypted != toEncrypt { - t.Fatalf("isEncrypted expected %v got %v", toEncrypt, isEncrypted) - } - resultSlice := make([]byte, testDataSize) - n, err := resultReader.ReadAt(resultSlice, 0) - if err != io.EOF { - t.Fatalf("Retrieve error: %v", err) - } - if n != testDataSize { - t.Fatalf("Slice size error got %d, expected %d.", n, testDataSize) - } - if !bytes.Equal(slice, resultSlice) { - t.Fatalf("Comparison error.") - } - ioutil.WriteFile("/tmp/slice.bzz.16M", slice, 0666) - ioutil.WriteFile("/tmp/result.bzz.16M", resultSlice, 0666) - localStore.memStore = NewMemStore(NewDefaultStoreParams(), db) - resultReader, isEncrypted = fileStore.Retrieve(context.TODO(), key) - if isEncrypted != toEncrypt { - t.Fatalf("isEncrypted expected %v got %v", toEncrypt, isEncrypted) - } - for i := range resultSlice { - resultSlice[i] = 0 - } - n, err = resultReader.ReadAt(resultSlice, 0) - if err != io.EOF { - t.Fatalf("Retrieve error after removing memStore: %v", err) - } - if n != len(slice) { - t.Fatalf("Slice size error after removing memStore got %d, expected %d.", n, len(slice)) - } - if !bytes.Equal(slice, resultSlice) { - t.Fatalf("Comparison error after removing memStore.") - } -} - -func TestFileStoreCapacity(t *testing.T) { - testFileStoreCapacity(false, t) - testFileStoreCapacity(true, t) -} - -func testFileStoreCapacity(toEncrypt bool, t *testing.T) { - tdb, cleanup, err := newTestDbStore(false, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - db := tdb.LDBStore - memStore := NewMemStore(NewDefaultStoreParams(), db) - localStore := &LocalStore{ - memStore: memStore, - DbStore: db, - } - fileStore := NewFileStore(localStore, NewFileStoreParams()) - slice := testutil.RandomBytes(1, testDataSize) - ctx := context.TODO() - key, wait, err := fileStore.Store(ctx, bytes.NewReader(slice), testDataSize, toEncrypt) - if err != nil { - t.Errorf("Store error: %v", err) - } - err = wait(ctx) - if err != nil { - t.Fatalf("Store error: %v", err) - } - resultReader, isEncrypted := fileStore.Retrieve(context.TODO(), key) - if isEncrypted != toEncrypt { - t.Fatalf("isEncrypted expected %v got %v", toEncrypt, isEncrypted) - } - resultSlice := make([]byte, len(slice)) - n, err := resultReader.ReadAt(resultSlice, 0) - if err != io.EOF { - t.Fatalf("Retrieve error: %v", err) - } - if n != len(slice) { - t.Fatalf("Slice size error got %d, expected %d.", n, len(slice)) - } - if !bytes.Equal(slice, resultSlice) { - t.Fatalf("Comparison error.") - } - // Clear memStore - memStore.setCapacity(0) - // check whether it is, indeed, empty - fileStore.ChunkStore = memStore - resultReader, isEncrypted = fileStore.Retrieve(context.TODO(), key) - if isEncrypted != toEncrypt { - t.Fatalf("isEncrypted expected %v got %v", toEncrypt, isEncrypted) - } - if _, err = resultReader.ReadAt(resultSlice, 0); err == nil { - t.Fatalf("Was able to read %d bytes from an empty memStore.", len(slice)) - } - // check how it works with localStore - fileStore.ChunkStore = localStore - // localStore.dbStore.setCapacity(0) - resultReader, isEncrypted = fileStore.Retrieve(context.TODO(), key) - if isEncrypted != toEncrypt { - t.Fatalf("isEncrypted expected %v got %v", toEncrypt, isEncrypted) - } - for i := range resultSlice { - resultSlice[i] = 0 - } - n, err = resultReader.ReadAt(resultSlice, 0) - if err != io.EOF { - t.Fatalf("Retrieve error after clearing memStore: %v", err) - } - if n != len(slice) { - t.Fatalf("Slice size error after clearing memStore got %d, expected %d.", n, len(slice)) - } - if !bytes.Equal(slice, resultSlice) { - t.Fatalf("Comparison error after clearing memStore.") - } -} - -// TestGetAllReferences only tests that GetAllReferences returns an expected -// number of references for a given file -func TestGetAllReferences(t *testing.T) { - tdb, cleanup, err := newTestDbStore(false, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - db := tdb.LDBStore - memStore := NewMemStore(NewDefaultStoreParams(), db) - localStore := &LocalStore{ - memStore: memStore, - DbStore: db, - } - fileStore := NewFileStore(localStore, NewFileStoreParams()) - - // testRuns[i] and expectedLen[i] are dataSize and expected length respectively - testRuns := []int{1024, 8192, 16000, 30000, 1000000} - expectedLens := []int{1, 3, 5, 9, 248} - for i, r := range testRuns { - slice := testutil.RandomBytes(1, r) - - addrs, err := fileStore.GetAllReferences(context.Background(), bytes.NewReader(slice), false) - if err != nil { - t.Fatal(err) - } - if len(addrs) != expectedLens[i] { - t.Fatalf("Expected reference array length to be %d, but is %d", expectedLens[i], len(addrs)) - } - } -} diff --git a/swarm/storage/hasherstore.go b/swarm/storage/hasherstore.go deleted file mode 100644 index 23b52ee0d8b4..000000000000 --- a/swarm/storage/hasherstore.go +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "fmt" - "sync/atomic" - - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/storage/encryption" - "golang.org/x/crypto/sha3" -) - -type hasherStore struct { - store ChunkStore - toEncrypt bool - hashFunc SwarmHasher - hashSize int // content hash size - refSize int64 // reference size (content hash + possibly encryption key) - errC chan error // global error channel - doneC chan struct{} // closed by Close() call to indicate that count is the final number of chunks - quitC chan struct{} // closed to quit unterminated routines - // nrChunks is used with atomic functions - // it is required to be at the end of the struct to ensure 64bit alignment for arm architecture - // see: https://golang.org/pkg/sync/atomic/#pkg-note-BUG - nrChunks uint64 // number of chunks to store -} - -// NewHasherStore creates a hasherStore object, which implements Putter and Getter interfaces. -// With the HasherStore you can put and get chunk data (which is just []byte) into a ChunkStore -// and the hasherStore will take core of encryption/decryption of data if necessary -func NewHasherStore(store ChunkStore, hashFunc SwarmHasher, toEncrypt bool) *hasherStore { - hashSize := hashFunc().Size() - refSize := int64(hashSize) - if toEncrypt { - refSize += encryption.KeyLength - } - - h := &hasherStore{ - store: store, - toEncrypt: toEncrypt, - hashFunc: hashFunc, - hashSize: hashSize, - refSize: refSize, - errC: make(chan error), - doneC: make(chan struct{}), - quitC: make(chan struct{}), - } - - return h -} - -// Put stores the chunkData into the ChunkStore of the hasherStore and returns the reference. -// If hasherStore has a chunkEncryption object, the data will be encrypted. -// Asynchronous function, the data will not necessarily be stored when it returns. -func (h *hasherStore) Put(ctx context.Context, chunkData ChunkData) (Reference, error) { - c := chunkData - var encryptionKey encryption.Key - if h.toEncrypt { - var err error - c, encryptionKey, err = h.encryptChunkData(chunkData) - if err != nil { - return nil, err - } - } - chunk := h.createChunk(c) - h.storeChunk(ctx, chunk) - - return Reference(append(chunk.Address(), encryptionKey...)), nil -} - -// Get returns data of the chunk with the given reference (retrieved from the ChunkStore of hasherStore). -// If the data is encrypted and the reference contains an encryption key, it will be decrypted before -// return. -func (h *hasherStore) Get(ctx context.Context, ref Reference) (ChunkData, error) { - addr, encryptionKey, err := parseReference(ref, h.hashSize) - if err != nil { - return nil, err - } - - chunk, err := h.store.Get(ctx, addr) - if err != nil { - return nil, err - } - - chunkData := ChunkData(chunk.Data()) - toDecrypt := (encryptionKey != nil) - if toDecrypt { - var err error - chunkData, err = h.decryptChunkData(chunkData, encryptionKey) - if err != nil { - return nil, err - } - } - return chunkData, nil -} - -// Close indicates that no more chunks will be put with the hasherStore, so the Wait -// function can return when all the previously put chunks has been stored. -func (h *hasherStore) Close() { - close(h.doneC) -} - -// Wait returns when -// 1) the Close() function has been called and -// 2) all the chunks which has been Put has been stored -func (h *hasherStore) Wait(ctx context.Context) error { - defer close(h.quitC) - var nrStoredChunks uint64 // number of stored chunks - var done bool - doneC := h.doneC - for { - select { - // if context is done earlier, just return with the error - case <-ctx.Done(): - return ctx.Err() - // doneC is closed if all chunks have been submitted, from then we just wait until all of them are also stored - case <-doneC: - done = true - doneC = nil - // a chunk has been stored, if err is nil, then successfully, so increase the stored chunk counter - case err := <-h.errC: - if err != nil { - return err - } - nrStoredChunks++ - } - // if all the chunks have been submitted and all of them are stored, then we can return - if done { - if nrStoredChunks >= atomic.LoadUint64(&h.nrChunks) { - return nil - } - } - } -} - -func (h *hasherStore) createHash(chunkData ChunkData) Address { - hasher := h.hashFunc() - hasher.ResetWithLength(chunkData[:8]) // 8 bytes of length - hasher.Write(chunkData[8:]) // minus 8 []byte length - return hasher.Sum(nil) -} - -func (h *hasherStore) createChunk(chunkData ChunkData) *chunk { - hash := h.createHash(chunkData) - chunk := NewChunk(hash, chunkData) - return chunk -} - -func (h *hasherStore) encryptChunkData(chunkData ChunkData) (ChunkData, encryption.Key, error) { - if len(chunkData) < 8 { - return nil, nil, fmt.Errorf("Invalid ChunkData, min length 8 got %v", len(chunkData)) - } - - key, encryptedSpan, encryptedData, err := h.encrypt(chunkData) - if err != nil { - return nil, nil, err - } - c := make(ChunkData, len(encryptedSpan)+len(encryptedData)) - copy(c[:8], encryptedSpan) - copy(c[8:], encryptedData) - return c, key, nil -} - -func (h *hasherStore) decryptChunkData(chunkData ChunkData, encryptionKey encryption.Key) (ChunkData, error) { - if len(chunkData) < 8 { - return nil, fmt.Errorf("Invalid ChunkData, min length 8 got %v", len(chunkData)) - } - - decryptedSpan, decryptedData, err := h.decrypt(chunkData, encryptionKey) - if err != nil { - return nil, err - } - - // removing extra bytes which were just added for padding - length := ChunkData(decryptedSpan).Size() - for length > ch.DefaultSize { - length = length + (ch.DefaultSize - 1) - length = length / ch.DefaultSize - length *= uint64(h.refSize) - } - - c := make(ChunkData, length+8) - copy(c[:8], decryptedSpan) - copy(c[8:], decryptedData[:length]) - - return c, nil -} - -func (h *hasherStore) RefSize() int64 { - return h.refSize -} - -func (h *hasherStore) encrypt(chunkData ChunkData) (encryption.Key, []byte, []byte, error) { - key := encryption.GenerateRandomKey(encryption.KeyLength) - encryptedSpan, err := h.newSpanEncryption(key).Encrypt(chunkData[:8]) - if err != nil { - return nil, nil, nil, err - } - encryptedData, err := h.newDataEncryption(key).Encrypt(chunkData[8:]) - if err != nil { - return nil, nil, nil, err - } - return key, encryptedSpan, encryptedData, nil -} - -func (h *hasherStore) decrypt(chunkData ChunkData, key encryption.Key) ([]byte, []byte, error) { - encryptedSpan, err := h.newSpanEncryption(key).Encrypt(chunkData[:8]) - if err != nil { - return nil, nil, err - } - encryptedData, err := h.newDataEncryption(key).Encrypt(chunkData[8:]) - if err != nil { - return nil, nil, err - } - return encryptedSpan, encryptedData, nil -} - -func (h *hasherStore) newSpanEncryption(key encryption.Key) encryption.Encryption { - return encryption.New(key, 0, uint32(ch.DefaultSize/h.refSize), sha3.NewLegacyKeccak256) -} - -func (h *hasherStore) newDataEncryption(key encryption.Key) encryption.Encryption { - return encryption.New(key, int(ch.DefaultSize), 0, sha3.NewLegacyKeccak256) -} - -func (h *hasherStore) storeChunk(ctx context.Context, chunk *chunk) { - atomic.AddUint64(&h.nrChunks, 1) - go func() { - select { - case h.errC <- h.store.Put(ctx, chunk): - case <-h.quitC: - } - }() -} - -func parseReference(ref Reference, hashSize int) (Address, encryption.Key, error) { - encryptedRefLength := hashSize + encryption.KeyLength - switch len(ref) { - case AddressLength: - return Address(ref), nil, nil - case encryptedRefLength: - encKeyIdx := len(ref) - encryption.KeyLength - return Address(ref[:encKeyIdx]), encryption.Key(ref[encKeyIdx:]), nil - default: - return nil, nil, fmt.Errorf("Invalid reference length, expected %v or %v got %v", hashSize, encryptedRefLength, len(ref)) - } -} diff --git a/swarm/storage/hasherstore_test.go b/swarm/storage/hasherstore_test.go deleted file mode 100644 index 22cf98d0e882..000000000000 --- a/swarm/storage/hasherstore_test.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage/encryption" - - "github.com/ethereum/go-ethereum/common" -) - -func TestHasherStore(t *testing.T) { - var tests = []struct { - chunkLength int - toEncrypt bool - }{ - {10, false}, - {100, false}, - {1000, false}, - {4096, false}, - {10, true}, - {100, true}, - {1000, true}, - {4096, true}, - } - - for _, tt := range tests { - chunkStore := NewMapChunkStore() - hasherStore := NewHasherStore(chunkStore, MakeHashFunc(DefaultHash), tt.toEncrypt) - - // Put two random chunks into the hasherStore - chunkData1 := GenerateRandomChunk(int64(tt.chunkLength)).Data() - ctx, cancel := context.WithTimeout(context.Background(), getTimeout) - defer cancel() - key1, err := hasherStore.Put(ctx, chunkData1) - if err != nil { - t.Fatalf("Expected no error got \"%v\"", err) - } - - chunkData2 := GenerateRandomChunk(int64(tt.chunkLength)).Data() - key2, err := hasherStore.Put(ctx, chunkData2) - if err != nil { - t.Fatalf("Expected no error got \"%v\"", err) - } - - hasherStore.Close() - - // Wait until chunks are really stored - err = hasherStore.Wait(ctx) - if err != nil { - t.Fatalf("Expected no error got \"%v\"", err) - } - - // Get the first chunk - retrievedChunkData1, err := hasherStore.Get(ctx, key1) - if err != nil { - t.Fatalf("Expected no error, got \"%v\"", err) - } - - // Retrieved data should be same as the original - if !bytes.Equal(chunkData1, retrievedChunkData1) { - t.Fatalf("Expected retrieved chunk data %v, got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(retrievedChunkData1)) - } - - // Get the second chunk - retrievedChunkData2, err := hasherStore.Get(ctx, key2) - if err != nil { - t.Fatalf("Expected no error, got \"%v\"", err) - } - - // Retrieved data should be same as the original - if !bytes.Equal(chunkData2, retrievedChunkData2) { - t.Fatalf("Expected retrieved chunk data %v, got %v", common.Bytes2Hex(chunkData2), common.Bytes2Hex(retrievedChunkData2)) - } - - hash1, encryptionKey1, err := parseReference(key1, hasherStore.hashSize) - if err != nil { - t.Fatalf("Expected no error, got \"%v\"", err) - } - - if tt.toEncrypt { - if encryptionKey1 == nil { - t.Fatal("Expected non-nil encryption key, got nil") - } else if len(encryptionKey1) != encryption.KeyLength { - t.Fatalf("Expected encryption key length %v, got %v", encryption.KeyLength, len(encryptionKey1)) - } - } - if !tt.toEncrypt && encryptionKey1 != nil { - t.Fatalf("Expected nil encryption key, got key with length %v", len(encryptionKey1)) - } - - // Check if chunk data in store is encrypted or not - chunkInStore, err := chunkStore.Get(ctx, hash1) - if err != nil { - t.Fatalf("Expected no error got \"%v\"", err) - } - - chunkDataInStore := chunkInStore.Data() - - if tt.toEncrypt && bytes.Equal(chunkData1, chunkDataInStore) { - t.Fatalf("Chunk expected to be encrypted but it is stored without encryption") - } - if !tt.toEncrypt && !bytes.Equal(chunkData1, chunkDataInStore) { - t.Fatalf("Chunk expected to be not encrypted but stored content is different. Expected %v got %v", common.Bytes2Hex(chunkData1), common.Bytes2Hex(chunkDataInStore)) - } - } -} diff --git a/swarm/storage/ldbstore.go b/swarm/storage/ldbstore.go deleted file mode 100644 index 9e4d63841044..000000000000 --- a/swarm/storage/ldbstore.go +++ /dev/null @@ -1,1077 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// disk storage layer for the package bzz -// DbStore implements the ChunkStore interface and is used by the FileStore as -// persistent storage of chunks -// it implements purging based on access count allowing for external control of -// max capacity - -package storage - -import ( - "archive/tar" - "bytes" - "context" - "encoding/binary" - "encoding/hex" - "errors" - "fmt" - "io" - "io/ioutil" - "sync" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/rlp" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage/mock" - "github.com/syndtr/goleveldb/leveldb" -) - -const ( - defaultGCRatio = 10 - defaultMaxGCRound = 10000 - defaultMaxGCBatch = 5000 - - wEntryCnt = 1 << 0 - wIndexCnt = 1 << 1 - wAccessCnt = 1 << 2 -) - -var ( - dbEntryCount = metrics.NewRegisteredCounter("ldbstore.entryCnt", nil) -) - -var ( - keyIndex = byte(0) - keyAccessCnt = []byte{2} - keyEntryCnt = []byte{3} - keyDataIdx = []byte{4} - keyData = byte(6) - keyDistanceCnt = byte(7) - keySchema = []byte{8} - keyGCIdx = byte(9) // access to chunk data index, used by garbage collection in ascending order from first entry -) - -var ( - ErrDBClosed = errors.New("LDBStore closed") -) - -type LDBStoreParams struct { - *StoreParams - Path string - Po func(Address) uint8 -} - -// NewLDBStoreParams constructs LDBStoreParams with the specified values. -func NewLDBStoreParams(storeparams *StoreParams, path string) *LDBStoreParams { - return &LDBStoreParams{ - StoreParams: storeparams, - Path: path, - Po: func(k Address) (ret uint8) { return uint8(Proximity(storeparams.BaseKey, k[:])) }, - } -} - -type garbage struct { - maxRound int // maximum number of chunks to delete in one garbage collection round - maxBatch int // maximum number of chunks to delete in one db request batch - ratio int // 1/x ratio to calculate the number of chunks to gc on a low capacity db - count int // number of chunks deleted in running round - target int // number of chunks to delete in running round - batch *dbBatch // the delete batch - runC chan struct{} // struct in chan means gc is NOT running -} - -type LDBStore struct { - db *LDBDatabase - - // this should be stored in db, accessed transactionally - entryCnt uint64 // number of items in the LevelDB - accessCnt uint64 // ever-accumulating number increased every time we read/access an entry - dataIdx uint64 // similar to entryCnt, but we only increment it - capacity uint64 - bucketCnt []uint64 - - hashfunc SwarmHasher - po func(Address) uint8 - - batchesC chan struct{} - closed bool - batch *dbBatch - lock sync.RWMutex - quit chan struct{} - gc *garbage - - // Functions encodeDataFunc is used to bypass - // the default functionality of DbStore with - // mock.NodeStore for testing purposes. - encodeDataFunc func(chunk Chunk) []byte - // If getDataFunc is defined, it will be used for - // retrieving the chunk data instead from the local - // LevelDB database. - getDataFunc func(key Address) (data []byte, err error) -} - -type dbBatch struct { - *leveldb.Batch - err error - c chan struct{} -} - -func newBatch() *dbBatch { - return &dbBatch{Batch: new(leveldb.Batch), c: make(chan struct{})} -} - -// TODO: Instead of passing the distance function, just pass the address from which distances are calculated -// to avoid the appearance of a pluggable distance metric and opportunities of bugs associated with providing -// a function different from the one that is actually used. -func NewLDBStore(params *LDBStoreParams) (s *LDBStore, err error) { - s = new(LDBStore) - s.hashfunc = params.Hash - s.quit = make(chan struct{}) - - s.batchesC = make(chan struct{}, 1) - go s.writeBatches() - s.batch = newBatch() - // associate encodeData with default functionality - s.encodeDataFunc = encodeData - - s.db, err = NewLDBDatabase(params.Path) - if err != nil { - return nil, err - } - - s.po = params.Po - s.setCapacity(params.DbCapacity) - - s.bucketCnt = make([]uint64, 0x100) - for i := 0; i < 0x100; i++ { - k := make([]byte, 2) - k[0] = keyDistanceCnt - k[1] = uint8(i) - cnt, _ := s.db.Get(k) - s.bucketCnt[i] = BytesToU64(cnt) - } - data, _ := s.db.Get(keyEntryCnt) - s.entryCnt = BytesToU64(data) - data, _ = s.db.Get(keyAccessCnt) - s.accessCnt = BytesToU64(data) - data, _ = s.db.Get(keyDataIdx) - s.dataIdx = BytesToU64(data) - - // set up garbage collection - s.gc = &garbage{ - maxBatch: defaultMaxGCBatch, - maxRound: defaultMaxGCRound, - ratio: defaultGCRatio, - } - - s.gc.runC = make(chan struct{}, 1) - s.gc.runC <- struct{}{} - - return s, nil -} - -// MarkAccessed increments the access counter as a best effort for a chunk, so -// the chunk won't get garbage collected. -func (s *LDBStore) MarkAccessed(addr Address) { - s.lock.Lock() - defer s.lock.Unlock() - - if s.closed { - return - } - - proximity := s.po(addr) - s.tryAccessIdx(addr, proximity) -} - -// initialize and set values for processing of gc round -func (s *LDBStore) startGC(c int) { - - s.gc.count = 0 - // calculate the target number of deletions - if c >= s.gc.maxRound { - s.gc.target = s.gc.maxRound - } else { - s.gc.target = c / s.gc.ratio - } - s.gc.batch = newBatch() - log.Debug("startgc", "requested", c, "target", s.gc.target) -} - -// NewMockDbStore creates a new instance of DbStore with -// mockStore set to a provided value. If mockStore argument is nil, -// this function behaves exactly as NewDbStore. -func NewMockDbStore(params *LDBStoreParams, mockStore *mock.NodeStore) (s *LDBStore, err error) { - s, err = NewLDBStore(params) - if err != nil { - return nil, err - } - - // replace put and get with mock store functionality - if mockStore != nil { - s.encodeDataFunc = newMockEncodeDataFunc(mockStore) - s.getDataFunc = newMockGetDataFunc(mockStore) - } - return -} - -type dpaDBIndex struct { - Idx uint64 - Access uint64 -} - -func BytesToU64(data []byte) uint64 { - if len(data) < 8 { - return 0 - } - return binary.BigEndian.Uint64(data) -} - -func U64ToBytes(val uint64) []byte { - data := make([]byte, 8) - binary.BigEndian.PutUint64(data, val) - return data -} - -func getIndexKey(hash Address) []byte { - hashSize := len(hash) - key := make([]byte, hashSize+1) - key[0] = keyIndex - copy(key[1:], hash[:]) - return key -} - -func getDataKey(idx uint64, po uint8) []byte { - key := make([]byte, 10) - key[0] = keyData - key[1] = po - binary.BigEndian.PutUint64(key[2:], idx) - - return key -} - -func getGCIdxKey(index *dpaDBIndex) []byte { - key := make([]byte, 9) - key[0] = keyGCIdx - binary.BigEndian.PutUint64(key[1:], index.Access) - return key -} - -func getGCIdxValue(index *dpaDBIndex, po uint8, addr Address) []byte { - val := make([]byte, 41) // po = 1, index.Index = 8, Address = 32 - val[0] = po - binary.BigEndian.PutUint64(val[1:], index.Idx) - copy(val[9:], addr) - return val -} - -func parseIdxKey(key []byte) (byte, []byte) { - return key[0], key[1:] -} - -func parseGCIdxEntry(accessCnt []byte, val []byte) (index *dpaDBIndex, po uint8, addr Address) { - index = &dpaDBIndex{ - Idx: binary.BigEndian.Uint64(val[1:]), - Access: binary.BigEndian.Uint64(accessCnt), - } - po = val[0] - addr = val[9:] - return -} - -func encodeIndex(index *dpaDBIndex) []byte { - data, _ := rlp.EncodeToBytes(index) - return data -} - -func encodeData(chunk Chunk) []byte { - // Always create a new underlying array for the returned byte slice. - // The chunk.Address array may be used in the returned slice which - // may be changed later in the code or by the LevelDB, resulting - // that the Address is changed as well. - return append(append([]byte{}, chunk.Address()[:]...), chunk.Data()...) -} - -func decodeIndex(data []byte, index *dpaDBIndex) error { - dec := rlp.NewStream(bytes.NewReader(data), 0) - return dec.Decode(index) -} - -func decodeData(addr Address, data []byte) (*chunk, error) { - return NewChunk(addr, data[32:]), nil -} - -func (s *LDBStore) collectGarbage() error { - // prevent duplicate gc from starting when one is already running - select { - case <-s.gc.runC: - default: - return nil - } - - s.lock.Lock() - entryCnt := s.entryCnt - s.lock.Unlock() - - metrics.GetOrRegisterCounter("ldbstore.collectgarbage", nil).Inc(1) - - // calculate the amount of chunks to collect and reset counter - s.startGC(int(entryCnt)) - log.Debug("collectGarbage", "target", s.gc.target, "entryCnt", entryCnt) - - for s.gc.count < s.gc.target { - it := s.db.NewIterator() - ok := it.Seek([]byte{keyGCIdx}) - var singleIterationCount int - - // every batch needs a lock so we avoid entries changing accessidx in the meantime - s.lock.Lock() - for ; ok && (singleIterationCount < s.gc.maxBatch); ok = it.Next() { - - // quit if no more access index keys - itkey := it.Key() - if (itkey == nil) || (itkey[0] != keyGCIdx) { - break - } - - // get chunk data entry from access index - val := it.Value() - index, po, hash := parseGCIdxEntry(itkey[1:], val) - keyIdx := make([]byte, 33) - keyIdx[0] = keyIndex - copy(keyIdx[1:], hash) - - // add delete operation to batch - s.delete(s.gc.batch.Batch, index, keyIdx, po) - singleIterationCount++ - s.gc.count++ - log.Trace("garbage collect enqueued chunk for deletion", "key", hash) - - // break if target is not on max garbage batch boundary - if s.gc.count >= s.gc.target { - break - } - } - - s.writeBatch(s.gc.batch, wEntryCnt) - log.Trace("garbage collect batch done", "batch", singleIterationCount, "total", s.gc.count) - s.lock.Unlock() - it.Release() - } - - metrics.GetOrRegisterCounter("ldbstore.collectgarbage.delete", nil).Inc(int64(s.gc.count)) - log.Debug("garbage collect done", "c", s.gc.count) - s.gc.runC <- struct{}{} - - return nil -} - -// Export writes all chunks from the store to a tar archive, returning the -// number of chunks written. -func (s *LDBStore) Export(out io.Writer) (int64, error) { - tw := tar.NewWriter(out) - defer tw.Close() - - it := s.db.NewIterator() - defer it.Release() - var count int64 - for ok := it.Seek([]byte{keyIndex}); ok; ok = it.Next() { - key := it.Key() - if (key == nil) || (key[0] != keyIndex) { - break - } - - var index dpaDBIndex - - hash := key[1:] - decodeIndex(it.Value(), &index) - po := s.po(hash) - datakey := getDataKey(index.Idx, po) - log.Trace("store.export", "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po) - data, err := s.db.Get(datakey) - if err != nil { - log.Warn(fmt.Sprintf("Chunk %x found but could not be accessed: %v", key, err)) - continue - } - - hdr := &tar.Header{ - Name: hex.EncodeToString(hash), - Mode: 0644, - Size: int64(len(data)), - } - if err := tw.WriteHeader(hdr); err != nil { - return count, err - } - if _, err := tw.Write(data); err != nil { - return count, err - } - count++ - } - - return count, nil -} - -// of chunks read. -func (s *LDBStore) Import(in io.Reader) (int64, error) { - tr := tar.NewReader(in) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - countC := make(chan int64) - errC := make(chan error) - var count int64 - go func() { - for { - hdr, err := tr.Next() - if err == io.EOF { - break - } else if err != nil { - select { - case errC <- err: - case <-ctx.Done(): - } - } - - if len(hdr.Name) != 64 { - log.Warn("ignoring non-chunk file", "name", hdr.Name) - continue - } - - keybytes, err := hex.DecodeString(hdr.Name) - if err != nil { - log.Warn("ignoring invalid chunk file", "name", hdr.Name, "err", err) - continue - } - - data, err := ioutil.ReadAll(tr) - if err != nil { - select { - case errC <- err: - case <-ctx.Done(): - } - } - key := Address(keybytes) - chunk := NewChunk(key, data[32:]) - - go func() { - select { - case errC <- s.Put(ctx, chunk): - case <-ctx.Done(): - } - }() - - count++ - } - countC <- count - }() - - // wait for all chunks to be stored - i := int64(0) - var total int64 - for { - select { - case err := <-errC: - if err != nil { - return count, err - } - i++ - case total = <-countC: - case <-ctx.Done(): - return i, ctx.Err() - } - if total > 0 && i == total { - return total, nil - } - } -} - -// Cleanup iterates over the database and deletes chunks if they pass the `f` condition -func (s *LDBStore) Cleanup(f func(*chunk) bool) { - var errorsFound, removed, total int - - it := s.db.NewIterator() - defer it.Release() - for ok := it.Seek([]byte{keyIndex}); ok; ok = it.Next() { - key := it.Key() - if (key == nil) || (key[0] != keyIndex) { - break - } - total++ - var index dpaDBIndex - err := decodeIndex(it.Value(), &index) - if err != nil { - log.Warn("Cannot decode") - errorsFound++ - continue - } - hash := key[1:] - po := s.po(hash) - datakey := getDataKey(index.Idx, po) - data, err := s.db.Get(datakey) - if err != nil { - found := false - - // highest possible proximity is 255 - for po = 1; po <= 255; po++ { - datakey = getDataKey(index.Idx, po) - data, err = s.db.Get(datakey) - if err == nil { - found = true - break - } - } - - if !found { - log.Warn(fmt.Sprintf("Chunk %x found but count not be accessed with any po", key)) - errorsFound++ - continue - } - } - - ck := data[:32] - c, err := decodeData(ck, data) - if err != nil { - log.Error("decodeData error", "err", err) - continue - } - - cs := int64(binary.LittleEndian.Uint64(c.sdata[:8])) - log.Trace("chunk", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(c.sdata), "size", cs) - - // if chunk is to be removed - if f(c) { - log.Warn("chunk for cleanup", "key", fmt.Sprintf("%x", key), "ck", fmt.Sprintf("%x", ck), "dkey", fmt.Sprintf("%x", datakey), "dataidx", index.Idx, "po", po, "len data", len(data), "len sdata", len(c.sdata), "size", cs) - s.deleteNow(&index, getIndexKey(key[1:]), po) - removed++ - errorsFound++ - } - } - - log.Warn(fmt.Sprintf("Found %v errors out of %v entries. Removed %v chunks.", errorsFound, total, removed)) -} - -// CleanGCIndex rebuilds the garbage collector index from scratch, while -// removing inconsistent elements, e.g., indices with missing data chunks. -// WARN: it's a pretty heavy, long running function. -func (s *LDBStore) CleanGCIndex() error { - s.lock.Lock() - defer s.lock.Unlock() - - batch := leveldb.Batch{} - - var okEntryCount uint64 - var totalEntryCount uint64 - - // throw out all gc indices, we will rebuild from cleaned index - it := s.db.NewIterator() - it.Seek([]byte{keyGCIdx}) - var gcDeletes int - for it.Valid() { - rowType, _ := parseIdxKey(it.Key()) - if rowType != keyGCIdx { - break - } - batch.Delete(it.Key()) - gcDeletes++ - it.Next() - } - log.Debug("gc", "deletes", gcDeletes) - if err := s.db.Write(&batch); err != nil { - return err - } - batch.Reset() - - it.Release() - - // corrected po index pointer values - var poPtrs [256]uint64 - - // set to true if chunk count not on 4096 iteration boundary - var doneIterating bool - - // last key index in previous iteration - lastIdxKey := []byte{keyIndex} - - // counter for debug output - var cleanBatchCount int - - // go through all key index entries - for !doneIterating { - cleanBatchCount++ - var idxs []dpaDBIndex - var chunkHashes [][]byte - var pos []uint8 - it := s.db.NewIterator() - - it.Seek(lastIdxKey) - - // 4096 is just a nice number, don't look for any hidden meaning here... - var i int - for i = 0; i < 4096; i++ { - - // this really shouldn't happen unless database is empty - // but let's keep it to be safe - if !it.Valid() { - doneIterating = true - break - } - - // if it's not keyindex anymore we're done iterating - rowType, chunkHash := parseIdxKey(it.Key()) - if rowType != keyIndex { - doneIterating = true - break - } - - // decode the retrieved index - var idx dpaDBIndex - err := decodeIndex(it.Value(), &idx) - if err != nil { - return fmt.Errorf("corrupt index: %v", err) - } - po := s.po(chunkHash) - lastIdxKey = it.Key() - - // if we don't find the data key, remove the entry - // if we find it, add to the array of new gc indices to create - dataKey := getDataKey(idx.Idx, po) - _, err = s.db.Get(dataKey) - if err != nil { - log.Warn("deleting inconsistent index (missing data)", "key", chunkHash) - batch.Delete(it.Key()) - } else { - idxs = append(idxs, idx) - chunkHashes = append(chunkHashes, chunkHash) - pos = append(pos, po) - okEntryCount++ - if idx.Idx > poPtrs[po] { - poPtrs[po] = idx.Idx - } - } - totalEntryCount++ - it.Next() - } - it.Release() - - // flush the key index corrections - err := s.db.Write(&batch) - if err != nil { - return err - } - batch.Reset() - - // add correct gc indices - for i, okIdx := range idxs { - gcIdxKey := getGCIdxKey(&okIdx) - gcIdxData := getGCIdxValue(&okIdx, pos[i], chunkHashes[i]) - batch.Put(gcIdxKey, gcIdxData) - log.Trace("clean ok", "key", chunkHashes[i], "gcKey", gcIdxKey, "gcData", gcIdxData) - } - - // flush them - err = s.db.Write(&batch) - if err != nil { - return err - } - batch.Reset() - - log.Debug("clean gc index pass", "batch", cleanBatchCount, "checked", i, "kept", len(idxs)) - } - - log.Debug("gc cleanup entries", "ok", okEntryCount, "total", totalEntryCount, "batchlen", batch.Len()) - - // lastly add updated entry count - var entryCount [8]byte - binary.BigEndian.PutUint64(entryCount[:], okEntryCount) - batch.Put(keyEntryCnt, entryCount[:]) - - // and add the new po index pointers - var poKey [2]byte - poKey[0] = keyDistanceCnt - for i, poPtr := range poPtrs { - poKey[1] = uint8(i) - if poPtr == 0 { - batch.Delete(poKey[:]) - } else { - var idxCount [8]byte - binary.BigEndian.PutUint64(idxCount[:], poPtr) - batch.Put(poKey[:], idxCount[:]) - } - } - - // if you made it this far your harddisk has survived. Congratulations - return s.db.Write(&batch) -} - -// Delete is removes a chunk and updates indices. -// Is thread safe -func (s *LDBStore) Delete(addr Address) error { - s.lock.Lock() - defer s.lock.Unlock() - - ikey := getIndexKey(addr) - - idata, err := s.db.Get(ikey) - if err != nil { - return err - } - - var idx dpaDBIndex - decodeIndex(idata, &idx) - proximity := s.po(addr) - return s.deleteNow(&idx, ikey, proximity) -} - -// executes one delete operation immediately -// see *LDBStore.delete -func (s *LDBStore) deleteNow(idx *dpaDBIndex, idxKey []byte, po uint8) error { - batch := new(leveldb.Batch) - s.delete(batch, idx, idxKey, po) - return s.db.Write(batch) -} - -// adds a delete chunk operation to the provided batch -// if called directly, decrements entrycount regardless if the chunk exists upon deletion. Risk of wrap to max uint64 -func (s *LDBStore) delete(batch *leveldb.Batch, idx *dpaDBIndex, idxKey []byte, po uint8) { - metrics.GetOrRegisterCounter("ldbstore.delete", nil).Inc(1) - - gcIdxKey := getGCIdxKey(idx) - batch.Delete(gcIdxKey) - dataKey := getDataKey(idx.Idx, po) - batch.Delete(dataKey) - batch.Delete(idxKey) - s.entryCnt-- - dbEntryCount.Dec(1) - cntKey := make([]byte, 2) - cntKey[0] = keyDistanceCnt - cntKey[1] = po - batch.Put(keyEntryCnt, U64ToBytes(s.entryCnt)) - batch.Put(cntKey, U64ToBytes(s.bucketCnt[po])) -} - -func (s *LDBStore) BinIndex(po uint8) uint64 { - s.lock.RLock() - defer s.lock.RUnlock() - return s.bucketCnt[po] -} - -// Put adds a chunk to the database, adding indices and incrementing global counters. -// If it already exists, it merely increments the access count of the existing entry. -// Is thread safe -func (s *LDBStore) Put(ctx context.Context, chunk Chunk) error { - metrics.GetOrRegisterCounter("ldbstore.put", nil).Inc(1) - log.Trace("ldbstore.put", "key", chunk.Address()) - - ikey := getIndexKey(chunk.Address()) - var index dpaDBIndex - - po := s.po(chunk.Address()) - - s.lock.Lock() - - if s.closed { - s.lock.Unlock() - return ErrDBClosed - } - batch := s.batch - - log.Trace("ldbstore.put: s.db.Get", "key", chunk.Address(), "ikey", fmt.Sprintf("%x", ikey)) - _, err := s.db.Get(ikey) - if err != nil { - s.doPut(chunk, &index, po) - } - idata := encodeIndex(&index) - s.batch.Put(ikey, idata) - - // add the access-chunkindex index for garbage collection - gcIdxKey := getGCIdxKey(&index) - gcIdxData := getGCIdxValue(&index, po, chunk.Address()) - s.batch.Put(gcIdxKey, gcIdxData) - s.lock.Unlock() - - select { - case s.batchesC <- struct{}{}: - default: - } - - select { - case <-batch.c: - return batch.err - case <-ctx.Done(): - return ctx.Err() - } -} - -// force putting into db, does not check or update necessary indices -func (s *LDBStore) doPut(chunk Chunk, index *dpaDBIndex, po uint8) { - data := s.encodeDataFunc(chunk) - dkey := getDataKey(s.dataIdx, po) - s.batch.Put(dkey, data) - index.Idx = s.dataIdx - s.bucketCnt[po] = s.dataIdx - s.entryCnt++ - dbEntryCount.Inc(1) - s.dataIdx++ - index.Access = s.accessCnt - s.accessCnt++ - cntKey := make([]byte, 2) - cntKey[0] = keyDistanceCnt - cntKey[1] = po - s.batch.Put(cntKey, U64ToBytes(s.bucketCnt[po])) -} - -func (s *LDBStore) writeBatches() { - for { - select { - case <-s.quit: - log.Debug("DbStore: quit batch write loop") - return - case <-s.batchesC: - err := s.writeCurrentBatch() - if err != nil { - log.Debug("DbStore: quit batch write loop", "err", err.Error()) - return - } - } - } - -} - -func (s *LDBStore) writeCurrentBatch() error { - s.lock.Lock() - defer s.lock.Unlock() - b := s.batch - l := b.Len() - if l == 0 { - return nil - } - s.batch = newBatch() - b.err = s.writeBatch(b, wEntryCnt|wAccessCnt|wIndexCnt) - close(b.c) - if s.entryCnt >= s.capacity { - go s.collectGarbage() - } - return nil -} - -// must be called non concurrently -func (s *LDBStore) writeBatch(b *dbBatch, wFlag uint8) error { - if wFlag&wEntryCnt > 0 { - b.Put(keyEntryCnt, U64ToBytes(s.entryCnt)) - } - if wFlag&wIndexCnt > 0 { - b.Put(keyDataIdx, U64ToBytes(s.dataIdx)) - } - if wFlag&wAccessCnt > 0 { - b.Put(keyAccessCnt, U64ToBytes(s.accessCnt)) - } - l := b.Len() - if err := s.db.Write(b.Batch); err != nil { - return fmt.Errorf("unable to write batch: %v", err) - } - log.Trace(fmt.Sprintf("batch write (%d entries)", l)) - return nil -} - -// newMockEncodeDataFunc returns a function that stores the chunk data -// to a mock store to bypass the default functionality encodeData. -// The constructed function always returns the nil data, as DbStore does -// not need to store the data, but still need to create the index. -func newMockEncodeDataFunc(mockStore *mock.NodeStore) func(chunk Chunk) []byte { - return func(chunk Chunk) []byte { - if err := mockStore.Put(chunk.Address(), encodeData(chunk)); err != nil { - log.Error(fmt.Sprintf("%T: Chunk %v put: %v", mockStore, chunk.Address().Log(), err)) - } - return chunk.Address()[:] - } -} - -// tryAccessIdx tries to find index entry. If found then increments the access -// count for garbage collection and returns the index entry and true for found, -// otherwise returns nil and false. -func (s *LDBStore) tryAccessIdx(addr Address, po uint8) (*dpaDBIndex, bool) { - ikey := getIndexKey(addr) - idata, err := s.db.Get(ikey) - if err != nil { - return nil, false - } - - index := new(dpaDBIndex) - decodeIndex(idata, index) - oldGCIdxKey := getGCIdxKey(index) - s.batch.Put(keyAccessCnt, U64ToBytes(s.accessCnt)) - index.Access = s.accessCnt - idata = encodeIndex(index) - s.accessCnt++ - s.batch.Put(ikey, idata) - newGCIdxKey := getGCIdxKey(index) - newGCIdxData := getGCIdxValue(index, po, ikey[1:]) - s.batch.Delete(oldGCIdxKey) - s.batch.Put(newGCIdxKey, newGCIdxData) - select { - case s.batchesC <- struct{}{}: - default: - } - return index, true -} - -// GetSchema is returning the current named schema of the datastore as read from LevelDB -func (s *LDBStore) GetSchema() (string, error) { - s.lock.Lock() - defer s.lock.Unlock() - - data, err := s.db.Get(keySchema) - if err != nil { - if err == leveldb.ErrNotFound { - return DbSchemaNone, nil - } - return "", err - } - - return string(data), nil -} - -// PutSchema is saving a named schema to the LevelDB datastore -func (s *LDBStore) PutSchema(schema string) error { - s.lock.Lock() - defer s.lock.Unlock() - - return s.db.Put(keySchema, []byte(schema)) -} - -// Get retrieves the chunk matching the provided key from the database. -// If the chunk entry does not exist, it returns an error -// Updates access count and is thread safe -func (s *LDBStore) Get(_ context.Context, addr Address) (chunk Chunk, err error) { - metrics.GetOrRegisterCounter("ldbstore.get", nil).Inc(1) - log.Trace("ldbstore.get", "key", addr) - - s.lock.Lock() - defer s.lock.Unlock() - return s.get(addr) -} - -// Has queries the underlying DB if a chunk with the given address is stored -// Returns true if the chunk is found, false if not -func (s *LDBStore) Has(_ context.Context, addr Address) bool { - s.lock.RLock() - defer s.lock.RUnlock() - - ikey := getIndexKey(addr) - _, err := s.db.Get(ikey) - - return err == nil -} - -// TODO: To conform with other private methods of this object indices should not be updated -func (s *LDBStore) get(addr Address) (chunk *chunk, err error) { - if s.closed { - return nil, ErrDBClosed - } - proximity := s.po(addr) - index, found := s.tryAccessIdx(addr, proximity) - if found { - var data []byte - if s.getDataFunc != nil { - // if getDataFunc is defined, use it to retrieve the chunk data - log.Trace("ldbstore.get retrieve with getDataFunc", "key", addr) - data, err = s.getDataFunc(addr) - if err != nil { - return - } - } else { - // default DbStore functionality to retrieve chunk data - datakey := getDataKey(index.Idx, proximity) - data, err = s.db.Get(datakey) - log.Trace("ldbstore.get retrieve", "key", addr, "indexkey", index.Idx, "datakey", fmt.Sprintf("%x", datakey), "proximity", proximity) - if err != nil { - log.Trace("ldbstore.get chunk found but could not be accessed", "key", addr, "err", err) - s.deleteNow(index, getIndexKey(addr), s.po(addr)) - return - } - } - - return decodeData(addr, data) - } else { - err = ErrChunkNotFound - } - - return -} - -// newMockGetFunc returns a function that reads chunk data from -// the mock database, which is used as the value for DbStore.getFunc -// to bypass the default functionality of DbStore with a mock store. -func newMockGetDataFunc(mockStore *mock.NodeStore) func(addr Address) (data []byte, err error) { - return func(addr Address) (data []byte, err error) { - data, err = mockStore.Get(addr) - if err == mock.ErrNotFound { - // preserve ErrChunkNotFound error - err = ErrChunkNotFound - } - return data, err - } -} - -func (s *LDBStore) setCapacity(c uint64) { - s.lock.Lock() - defer s.lock.Unlock() - - s.capacity = c - - for s.entryCnt > c { - s.collectGarbage() - } -} - -func (s *LDBStore) Close() { - close(s.quit) - s.lock.Lock() - s.closed = true - s.lock.Unlock() - // force writing out current batch - s.writeCurrentBatch() - s.db.Close() -} - -// SyncIterator(start, stop, po, f) calls f on each hash of a bin po from start to stop -func (s *LDBStore) SyncIterator(since uint64, until uint64, po uint8, f func(Address, uint64) bool) error { - metrics.GetOrRegisterCounter("ldbstore.synciterator", nil).Inc(1) - - sincekey := getDataKey(since, po) - untilkey := getDataKey(until, po) - it := s.db.NewIterator() - defer it.Release() - - for ok := it.Seek(sincekey); ok; ok = it.Next() { - metrics.GetOrRegisterCounter("ldbstore.synciterator.seek", nil).Inc(1) - - dbkey := it.Key() - if dbkey[0] != keyData || dbkey[1] != po || bytes.Compare(untilkey, dbkey) < 0 { - break - } - key := make([]byte, 32) - val := it.Value() - copy(key, val[:32]) - if !f(Address(key), binary.BigEndian.Uint64(dbkey[2:])) { - break - } - } - return it.Error() -} diff --git a/swarm/storage/ldbstore_test.go b/swarm/storage/ldbstore_test.go deleted file mode 100644 index 45ae09b2cbbd..000000000000 --- a/swarm/storage/ldbstore_test.go +++ /dev/null @@ -1,778 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "encoding/binary" - "fmt" - "io/ioutil" - "os" - "strconv" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" - ldberrors "github.com/syndtr/goleveldb/leveldb/errors" -) - -type testDbStore struct { - *LDBStore - dir string -} - -func newTestDbStore(mock bool, trusted bool) (*testDbStore, func(), error) { - dir, err := ioutil.TempDir("", "bzz-storage-test") - if err != nil { - return nil, func() {}, err - } - - var db *LDBStore - storeparams := NewDefaultStoreParams() - params := NewLDBStoreParams(storeparams, dir) - params.Po = testPoFunc - - if mock { - globalStore := mem.NewGlobalStore() - addr := common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed") - mockStore := globalStore.NewNodeStore(addr) - - db, err = NewMockDbStore(params, mockStore) - } else { - db, err = NewLDBStore(params) - } - - cleanup := func() { - if db != nil { - db.Close() - } - err = os.RemoveAll(dir) - if err != nil { - panic(fmt.Sprintf("db cleanup failed: %v", err)) - } - } - - return &testDbStore{db, dir}, cleanup, err -} - -func testPoFunc(k Address) (ret uint8) { - basekey := make([]byte, 32) - return uint8(Proximity(basekey, k[:])) -} - -func testDbStoreRandom(n int, mock bool, t *testing.T) { - db, cleanup, err := newTestDbStore(mock, true) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - testStoreRandom(db, n, t) -} - -func testDbStoreCorrect(n int, mock bool, t *testing.T) { - db, cleanup, err := newTestDbStore(mock, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - testStoreCorrect(db, n, t) -} - -func TestMarkAccessed(t *testing.T) { - db, cleanup, err := newTestDbStore(false, true) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - - h := GenerateRandomChunk(ch.DefaultSize) - - db.Put(context.Background(), h) - - var index dpaDBIndex - addr := h.Address() - idxk := getIndexKey(addr) - - idata, err := db.db.Get(idxk) - if err != nil { - t.Fatal(err) - } - decodeIndex(idata, &index) - - if index.Access != 0 { - t.Fatalf("Expected the access index to be %d, but it is %d", 0, index.Access) - } - - db.MarkAccessed(addr) - db.writeCurrentBatch() - - idata, err = db.db.Get(idxk) - if err != nil { - t.Fatal(err) - } - decodeIndex(idata, &index) - - if index.Access != 1 { - t.Fatalf("Expected the access index to be %d, but it is %d", 1, index.Access) - } - -} - -func TestDbStoreRandom_1(t *testing.T) { - testDbStoreRandom(1, false, t) -} - -func TestDbStoreCorrect_1(t *testing.T) { - testDbStoreCorrect(1, false, t) -} - -func TestDbStoreRandom_1k(t *testing.T) { - testDbStoreRandom(1000, false, t) -} - -func TestDbStoreCorrect_1k(t *testing.T) { - testDbStoreCorrect(1000, false, t) -} - -func TestMockDbStoreRandom_1(t *testing.T) { - testDbStoreRandom(1, true, t) -} - -func TestMockDbStoreCorrect_1(t *testing.T) { - testDbStoreCorrect(1, true, t) -} - -func TestMockDbStoreRandom_1k(t *testing.T) { - testDbStoreRandom(1000, true, t) -} - -func TestMockDbStoreCorrect_1k(t *testing.T) { - testDbStoreCorrect(1000, true, t) -} - -func testDbStoreNotFound(t *testing.T, mock bool) { - db, cleanup, err := newTestDbStore(mock, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - - _, err = db.Get(context.TODO(), ZeroAddr) - if err != ErrChunkNotFound { - t.Errorf("Expected ErrChunkNotFound, got %v", err) - } -} - -func TestDbStoreNotFound(t *testing.T) { - testDbStoreNotFound(t, false) -} -func TestMockDbStoreNotFound(t *testing.T) { - testDbStoreNotFound(t, true) -} - -func testIterator(t *testing.T, mock bool) { - var chunkcount int = 32 - var i int - var poc uint - chunkkeys := NewAddressCollection(chunkcount) - chunkkeys_results := NewAddressCollection(chunkcount) - - db, cleanup, err := newTestDbStore(mock, false) - defer cleanup() - if err != nil { - t.Fatalf("init dbStore failed: %v", err) - } - - chunks := GenerateRandomChunks(ch.DefaultSize, chunkcount) - - for i = 0; i < len(chunks); i++ { - chunkkeys[i] = chunks[i].Address() - err := db.Put(context.TODO(), chunks[i]) - if err != nil { - t.Fatalf("dbStore.Put failed: %v", err) - } - } - - for i = 0; i < len(chunkkeys); i++ { - log.Trace(fmt.Sprintf("Chunk array pos %d/%d: '%v'", i, chunkcount, chunkkeys[i])) - } - i = 0 - for poc = 0; poc <= 255; poc++ { - err := db.SyncIterator(0, uint64(chunkkeys.Len()), uint8(poc), func(k Address, n uint64) bool { - log.Trace(fmt.Sprintf("Got key %v number %d poc %d", k, n, uint8(poc))) - chunkkeys_results[n] = k - i++ - return true - }) - if err != nil { - t.Fatalf("Iterator call failed: %v", err) - } - } - - for i = 0; i < chunkcount; i++ { - if !bytes.Equal(chunkkeys[i], chunkkeys_results[i]) { - t.Fatalf("Chunk put #%d key '%v' does not match iterator's key '%v'", i, chunkkeys[i], chunkkeys_results[i]) - } - } - -} - -func TestIterator(t *testing.T) { - testIterator(t, false) -} -func TestMockIterator(t *testing.T) { - testIterator(t, true) -} - -func benchmarkDbStorePut(n int, mock bool, b *testing.B) { - db, cleanup, err := newTestDbStore(mock, true) - defer cleanup() - if err != nil { - b.Fatalf("init dbStore failed: %v", err) - } - benchmarkStorePut(db, n, b) -} - -func benchmarkDbStoreGet(n int, mock bool, b *testing.B) { - db, cleanup, err := newTestDbStore(mock, true) - defer cleanup() - if err != nil { - b.Fatalf("init dbStore failed: %v", err) - } - benchmarkStoreGet(db, n, b) -} - -func BenchmarkDbStorePut_500(b *testing.B) { - benchmarkDbStorePut(500, false, b) -} - -func BenchmarkDbStoreGet_500(b *testing.B) { - benchmarkDbStoreGet(500, false, b) -} - -func BenchmarkMockDbStorePut_500(b *testing.B) { - benchmarkDbStorePut(500, true, b) -} - -func BenchmarkMockDbStoreGet_500(b *testing.B) { - benchmarkDbStoreGet(500, true, b) -} - -// TestLDBStoreWithoutCollectGarbage tests that we can put a number of random chunks in the LevelDB store, and -// retrieve them, provided we don't hit the garbage collection -func TestLDBStoreWithoutCollectGarbage(t *testing.T) { - capacity := 50 - n := 10 - - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(uint64(capacity)) - defer cleanup() - - chunks, err := mputRandomChunks(ldb, n) - if err != nil { - t.Fatal(err.Error()) - } - - log.Info("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) - - for _, ch := range chunks { - ret, err := ldb.Get(context.TODO(), ch.Address()) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(ret.Data(), ch.Data()) { - t.Fatal("expected to get the same data back, but got smth else") - } - } - - if ldb.entryCnt != uint64(n) { - t.Fatalf("expected entryCnt to be equal to %v, but got %v", n, ldb.entryCnt) - } - - if ldb.accessCnt != uint64(2*n) { - t.Fatalf("expected accessCnt to be equal to %v, but got %v", 2*n, ldb.accessCnt) - } -} - -// TestLDBStoreCollectGarbage tests that we can put more chunks than LevelDB's capacity, and -// retrieve only some of them, because garbage collection must have partially cleared the store -// Also tests that we can delete chunks and that we can trigger garbage collection -func TestLDBStoreCollectGarbage(t *testing.T) { - - // below max ronud - initialCap := defaultMaxGCRound / 100 - cap := initialCap / 2 - t.Run(fmt.Sprintf("A/%d/%d", cap, cap*4), testLDBStoreCollectGarbage) - t.Run(fmt.Sprintf("B/%d/%d", cap, cap*4), testLDBStoreRemoveThenCollectGarbage) - - // at max round - cap = initialCap - t.Run(fmt.Sprintf("A/%d/%d", cap, cap*4), testLDBStoreCollectGarbage) - t.Run(fmt.Sprintf("B/%d/%d", cap, cap*4), testLDBStoreRemoveThenCollectGarbage) - - // more than max around, not on threshold - cap = initialCap + 500 - t.Run(fmt.Sprintf("A/%d/%d", cap, cap*4), testLDBStoreCollectGarbage) - t.Run(fmt.Sprintf("B/%d/%d", cap, cap*4), testLDBStoreRemoveThenCollectGarbage) - -} - -func testLDBStoreCollectGarbage(t *testing.T) { - params := strings.Split(t.Name(), "/") - capacity, err := strconv.Atoi(params[2]) - if err != nil { - t.Fatal(err) - } - n, err := strconv.Atoi(params[3]) - if err != nil { - t.Fatal(err) - } - - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(uint64(capacity)) - defer cleanup() - - // retrieve the gc round target count for the db capacity - ldb.startGC(capacity) - roundTarget := ldb.gc.target - - // split put counts to gc target count threshold, and wait for gc to finish in between - var allChunks []Chunk - remaining := n - for remaining > 0 { - var putCount int - if remaining < roundTarget { - putCount = remaining - } else { - putCount = roundTarget - } - remaining -= putCount - chunks, err := mputRandomChunks(ldb, putCount) - if err != nil { - t.Fatal(err.Error()) - } - allChunks = append(allChunks, chunks...) - log.Debug("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt, "cap", capacity, "n", n) - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) - } - - // attempt gets on all put chunks - var missing int - for _, ch := range allChunks { - ret, err := ldb.Get(context.TODO(), ch.Address()) - if err == ErrChunkNotFound || err == ldberrors.ErrNotFound { - missing++ - continue - } - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(ret.Data(), ch.Data()) { - t.Fatal("expected to get the same data back, but got smth else") - } - - log.Trace("got back chunk", "chunk", ret) - } - - // all surplus chunks should be missing - expectMissing := roundTarget + (((n - capacity) / roundTarget) * roundTarget) - if missing != expectMissing { - t.Fatalf("gc failure: expected to miss %v chunks, but only %v are actually missing", expectMissing, missing) - } - - log.Info("ldbstore", "total", n, "missing", missing, "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) -} - -// TestLDBStoreAddRemove tests that we can put and then delete a given chunk -func TestLDBStoreAddRemove(t *testing.T) { - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(200) - defer cleanup() - - n := 100 - chunks, err := mputRandomChunks(ldb, n) - if err != nil { - t.Fatalf(err.Error()) - } - - for i := 0; i < n; i++ { - // delete all even index chunks - if i%2 == 0 { - ldb.Delete(chunks[i].Address()) - } - } - - log.Info("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) - - for i := 0; i < n; i++ { - ret, err := ldb.Get(context.TODO(), chunks[i].Address()) - - if i%2 == 0 { - // expect even chunks to be missing - if err == nil { - t.Fatal("expected chunk to be missing, but got no error") - } - } else { - // expect odd chunks to be retrieved successfully - if err != nil { - t.Fatalf("expected no error, but got %s", err) - } - - if !bytes.Equal(ret.Data(), chunks[i].Data()) { - t.Fatal("expected to get the same data back, but got smth else") - } - } - } -} - -func testLDBStoreRemoveThenCollectGarbage(t *testing.T) { - - params := strings.Split(t.Name(), "/") - capacity, err := strconv.Atoi(params[2]) - if err != nil { - t.Fatal(err) - } - n, err := strconv.Atoi(params[3]) - if err != nil { - t.Fatal(err) - } - - ldb, cleanup := newLDBStore(t) - defer cleanup() - ldb.setCapacity(uint64(capacity)) - - // put capacity count number of chunks - chunks := make([]Chunk, n) - for i := 0; i < n; i++ { - c := GenerateRandomChunk(ch.DefaultSize) - chunks[i] = c - log.Trace("generate random chunk", "idx", i, "chunk", c) - } - - for i := 0; i < n; i++ { - err := ldb.Put(context.TODO(), chunks[i]) - if err != nil { - t.Fatal(err) - } - } - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) - - // delete all chunks - // (only count the ones actually deleted, the rest will have been gc'd) - deletes := 0 - for i := 0; i < n; i++ { - if ldb.Delete(chunks[i].Address()) == nil { - deletes++ - } - } - - log.Info("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) - - if ldb.entryCnt != 0 { - t.Fatalf("ldb.entrCnt expected 0 got %v", ldb.entryCnt) - } - - // the manual deletes will have increased accesscnt, so we need to add this when we verify the current count - expAccessCnt := uint64(n) - if ldb.accessCnt != expAccessCnt { - t.Fatalf("ldb.accessCnt expected %v got %v", expAccessCnt, ldb.accessCnt) - } - - // retrieve the gc round target count for the db capacity - ldb.startGC(capacity) - roundTarget := ldb.gc.target - - remaining := n - var puts int - for remaining > 0 { - var putCount int - if remaining < roundTarget { - putCount = remaining - } else { - putCount = roundTarget - } - remaining -= putCount - for putCount > 0 { - ldb.Put(context.TODO(), chunks[puts]) - log.Debug("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt, "cap", capacity, "n", n, "puts", puts, "remaining", remaining, "roundtarget", roundTarget) - puts++ - putCount-- - } - - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) - } - - // expect first surplus chunks to be missing, because they have the smallest access value - expectMissing := roundTarget + (((n - capacity) / roundTarget) * roundTarget) - for i := 0; i < expectMissing; i++ { - _, err := ldb.Get(context.TODO(), chunks[i].Address()) - if err == nil { - t.Fatalf("expected surplus chunk %d to be missing, but got no error", i) - } - } - - // expect last chunks to be present, as they have the largest access value - for i := expectMissing; i < n; i++ { - ret, err := ldb.Get(context.TODO(), chunks[i].Address()) - if err != nil { - t.Fatalf("chunk %v: expected no error, but got %s", i, err) - } - if !bytes.Equal(ret.Data(), chunks[i].Data()) { - t.Fatal("expected to get the same data back, but got smth else") - } - } -} - -// TestLDBStoreCollectGarbageAccessUnlikeIndex tests garbage collection where accesscount differs from indexcount -func TestLDBStoreCollectGarbageAccessUnlikeIndex(t *testing.T) { - - capacity := defaultMaxGCRound / 100 * 2 - n := capacity - 1 - - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(uint64(capacity)) - defer cleanup() - - chunks, err := mputRandomChunks(ldb, n) - if err != nil { - t.Fatal(err.Error()) - } - log.Info("ldbstore", "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) - - // set first added capacity/2 chunks to highest accesscount - for i := 0; i < capacity/2; i++ { - _, err := ldb.Get(context.TODO(), chunks[i].Address()) - if err != nil { - t.Fatalf("fail add chunk #%d - %s: %v", i, chunks[i].Address(), err) - } - } - _, err = mputRandomChunks(ldb, 2) - if err != nil { - t.Fatal(err.Error()) - } - - // wait for garbage collection to kick in on the responsible actor - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - waitGc(ctx, ldb) - - var missing int - for i, ch := range chunks[2 : capacity/2] { - ret, err := ldb.Get(context.TODO(), ch.Address()) - if err == ErrChunkNotFound || err == ldberrors.ErrNotFound { - t.Fatalf("fail find chunk #%d - %s: %v", i, ch.Address(), err) - } - - if !bytes.Equal(ret.Data(), ch.Data()) { - t.Fatal("expected to get the same data back, but got smth else") - } - log.Trace("got back chunk", "chunk", ret) - } - - log.Info("ldbstore", "total", n, "missing", missing, "entrycnt", ldb.entryCnt, "accesscnt", ldb.accessCnt) -} - -func TestCleanIndex(t *testing.T) { - capacity := 5000 - n := 3 - - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(uint64(capacity)) - defer cleanup() - - chunks, err := mputRandomChunks(ldb, n) - if err != nil { - t.Fatal(err) - } - - // remove the data of the first chunk - po := ldb.po(chunks[0].Address()[:]) - dataKey := make([]byte, 10) - dataKey[0] = keyData - dataKey[1] = byte(po) - // dataKey[2:10] = first chunk has storageIdx 0 on [2:10] - if _, err := ldb.db.Get(dataKey); err != nil { - t.Fatal(err) - } - if err := ldb.db.Delete(dataKey); err != nil { - t.Fatal(err) - } - - // remove the gc index row for the first chunk - gcFirstCorrectKey := make([]byte, 9) - gcFirstCorrectKey[0] = keyGCIdx - if err := ldb.db.Delete(gcFirstCorrectKey); err != nil { - t.Fatal(err) - } - - // warp the gc data of the second chunk - // this data should be correct again after the clean - gcSecondCorrectKey := make([]byte, 9) - gcSecondCorrectKey[0] = keyGCIdx - binary.BigEndian.PutUint64(gcSecondCorrectKey[1:], uint64(1)) - gcSecondCorrectVal, err := ldb.db.Get(gcSecondCorrectKey) - if err != nil { - t.Fatal(err) - } - warpedGCVal := make([]byte, len(gcSecondCorrectVal)+1) - copy(warpedGCVal[1:], gcSecondCorrectVal) - if err := ldb.db.Delete(gcSecondCorrectKey); err != nil { - t.Fatal(err) - } - if err := ldb.db.Put(gcSecondCorrectKey, warpedGCVal); err != nil { - t.Fatal(err) - } - - if err := ldb.CleanGCIndex(); err != nil { - t.Fatal(err) - } - - // the index without corresponding data should have been deleted - idxKey := make([]byte, 33) - idxKey[0] = keyIndex - copy(idxKey[1:], chunks[0].Address()) - if _, err := ldb.db.Get(idxKey); err == nil { - t.Fatalf("expected chunk 0 idx to be pruned: %v", idxKey) - } - - // the two other indices should be present - copy(idxKey[1:], chunks[1].Address()) - if _, err := ldb.db.Get(idxKey); err != nil { - t.Fatalf("expected chunk 1 idx to be present: %v", idxKey) - } - - copy(idxKey[1:], chunks[2].Address()) - if _, err := ldb.db.Get(idxKey); err != nil { - t.Fatalf("expected chunk 2 idx to be present: %v", idxKey) - } - - // first gc index should still be gone - if _, err := ldb.db.Get(gcFirstCorrectKey); err == nil { - t.Fatalf("expected gc 0 idx to be pruned: %v", idxKey) - } - - // second gc index should still be fixed - if _, err := ldb.db.Get(gcSecondCorrectKey); err != nil { - t.Fatalf("expected gc 1 idx to be present: %v", idxKey) - } - - // third gc index should be unchanged - binary.BigEndian.PutUint64(gcSecondCorrectKey[1:], uint64(2)) - if _, err := ldb.db.Get(gcSecondCorrectKey); err != nil { - t.Fatalf("expected gc 2 idx to be present: %v", idxKey) - } - - c, err := ldb.db.Get(keyEntryCnt) - if err != nil { - t.Fatalf("expected gc 2 idx to be present: %v", idxKey) - } - - // entrycount should now be one less - entryCount := binary.BigEndian.Uint64(c) - if entryCount != 2 { - t.Fatalf("expected entrycnt to be 2, was %d", c) - } - - // the chunks might accidentally be in the same bin - // if so that bin counter will now be 2 - the highest added index. - // if not, the total of them will be 3 - poBins := []uint8{ldb.po(chunks[1].Address()), ldb.po(chunks[2].Address())} - if poBins[0] == poBins[1] { - poBins = poBins[:1] - } - - var binTotal uint64 - var currentBin [2]byte - currentBin[0] = keyDistanceCnt - if len(poBins) == 1 { - currentBin[1] = poBins[0] - c, err := ldb.db.Get(currentBin[:]) - if err != nil { - t.Fatalf("expected gc 2 idx to be present: %v", idxKey) - } - binCount := binary.BigEndian.Uint64(c) - if binCount != 2 { - t.Fatalf("expected entrycnt to be 2, was %d", binCount) - } - } else { - for _, bin := range poBins { - currentBin[1] = bin - c, err := ldb.db.Get(currentBin[:]) - if err != nil { - t.Fatalf("expected gc 2 idx to be present: %v", idxKey) - } - binCount := binary.BigEndian.Uint64(c) - binTotal += binCount - - } - if binTotal != 3 { - t.Fatalf("expected sum of bin indices to be 3, was %d", binTotal) - } - } - - // check that the iterator quits properly - chunks, err = mputRandomChunks(ldb, 4100) - if err != nil { - t.Fatal(err) - } - - po = ldb.po(chunks[4099].Address()[:]) - dataKey = make([]byte, 10) - dataKey[0] = keyData - dataKey[1] = byte(po) - binary.BigEndian.PutUint64(dataKey[2:], 4099+3) - if _, err := ldb.db.Get(dataKey); err != nil { - t.Fatal(err) - } - if err := ldb.db.Delete(dataKey); err != nil { - t.Fatal(err) - } - - if err := ldb.CleanGCIndex(); err != nil { - t.Fatal(err) - } - - // entrycount should now be one less of added chunks - c, err = ldb.db.Get(keyEntryCnt) - if err != nil { - t.Fatalf("expected gc 2 idx to be present: %v", idxKey) - } - entryCount = binary.BigEndian.Uint64(c) - if entryCount != 4099+2 { - t.Fatalf("expected entrycnt to be 2, was %d", c) - } -} - -func waitGc(ctx context.Context, ldb *LDBStore) { - <-ldb.gc.runC - ldb.gc.runC <- struct{}{} -} diff --git a/swarm/storage/localstore.go b/swarm/storage/localstore.go deleted file mode 100644 index eefb7565a59d..000000000000 --- a/swarm/storage/localstore.go +++ /dev/null @@ -1,251 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "path/filepath" - "sync" - - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -type LocalStoreParams struct { - *StoreParams - ChunkDbPath string - Validators []ChunkValidator `toml:"-"` -} - -func NewDefaultLocalStoreParams() *LocalStoreParams { - return &LocalStoreParams{ - StoreParams: NewDefaultStoreParams(), - } -} - -//this can only finally be set after all config options (file, cmd line, env vars) -//have been evaluated -func (p *LocalStoreParams) Init(path string) { - if p.ChunkDbPath == "" { - p.ChunkDbPath = filepath.Join(path, "chunks") - } -} - -// LocalStore is a combination of inmemory db over a disk persisted db -// implements a Get/Put with fallback (caching) logic using any 2 ChunkStores -type LocalStore struct { - Validators []ChunkValidator - memStore *MemStore - DbStore *LDBStore - mu sync.Mutex -} - -// This constructor uses MemStore and DbStore as components -func NewLocalStore(params *LocalStoreParams, mockStore *mock.NodeStore) (*LocalStore, error) { - ldbparams := NewLDBStoreParams(params.StoreParams, params.ChunkDbPath) - dbStore, err := NewMockDbStore(ldbparams, mockStore) - if err != nil { - return nil, err - } - return &LocalStore{ - memStore: NewMemStore(params.StoreParams, dbStore), - DbStore: dbStore, - Validators: params.Validators, - }, nil -} - -func NewTestLocalStoreForAddr(params *LocalStoreParams) (*LocalStore, error) { - ldbparams := NewLDBStoreParams(params.StoreParams, params.ChunkDbPath) - dbStore, err := NewLDBStore(ldbparams) - if err != nil { - return nil, err - } - localStore := &LocalStore{ - memStore: NewMemStore(params.StoreParams, dbStore), - DbStore: dbStore, - Validators: params.Validators, - } - return localStore, nil -} - -// isValid returns true if chunk passes any of the LocalStore Validators. -// isValid also returns true if LocalStore has no Validators. -func (ls *LocalStore) isValid(chunk Chunk) bool { - // by default chunks are valid. if we have 0 validators, then all chunks are valid. - valid := true - - // ls.Validators contains a list of one validator per chunk type. - // if one validator succeeds, then the chunk is valid - for _, v := range ls.Validators { - if valid = v.Validate(chunk); valid { - break - } - } - return valid -} - -// Put is responsible for doing validation and storage of the chunk -// by using configured ChunkValidators, MemStore and LDBStore. -// If the chunk is not valid, its GetErrored function will -// return ErrChunkInvalid. -// This method will check if the chunk is already in the MemStore -// and it will return it if it is. If there is an error from -// the MemStore.Get, it will be returned by calling GetErrored -// on the chunk. -// This method is responsible for closing Chunk.ReqC channel -// when the chunk is stored in memstore. -// After the LDBStore.Put, it is ensured that the MemStore -// contains the chunk with the same data, but nil ReqC channel. -func (ls *LocalStore) Put(ctx context.Context, chunk Chunk) error { - if !ls.isValid(chunk) { - return ErrChunkInvalid - } - - log.Trace("localstore.put", "key", chunk.Address()) - ls.mu.Lock() - defer ls.mu.Unlock() - - _, err := ls.memStore.Get(ctx, chunk.Address()) - if err == nil { - return nil - } - if err != nil && err != ErrChunkNotFound { - return err - } - ls.memStore.Put(ctx, chunk) - err = ls.DbStore.Put(ctx, chunk) - return err -} - -// Has queries the underlying DbStore if a chunk with the given address -// is being stored there. -// Returns true if it is stored, false if not -func (ls *LocalStore) Has(ctx context.Context, addr Address) bool { - return ls.DbStore.Has(ctx, addr) -} - -// Get(chunk *Chunk) looks up a chunk in the local stores -// This method is blocking until the chunk is retrieved -// so additional timeout may be needed to wrap this call if -// ChunkStores are remote and can have long latency -func (ls *LocalStore) Get(ctx context.Context, addr Address) (chunk Chunk, err error) { - ls.mu.Lock() - defer ls.mu.Unlock() - - return ls.get(ctx, addr) -} - -func (ls *LocalStore) get(ctx context.Context, addr Address) (chunk Chunk, err error) { - chunk, err = ls.memStore.Get(ctx, addr) - - if err != nil && err != ErrChunkNotFound { - metrics.GetOrRegisterCounter("localstore.get.error", nil).Inc(1) - return nil, err - } - - if err == nil { - metrics.GetOrRegisterCounter("localstore.get.cachehit", nil).Inc(1) - go ls.DbStore.MarkAccessed(addr) - return chunk, nil - } - - metrics.GetOrRegisterCounter("localstore.get.cachemiss", nil).Inc(1) - chunk, err = ls.DbStore.Get(ctx, addr) - if err != nil { - metrics.GetOrRegisterCounter("localstore.get.error", nil).Inc(1) - return nil, err - } - - ls.memStore.Put(ctx, chunk) - return chunk, nil -} - -func (ls *LocalStore) FetchFunc(ctx context.Context, addr Address) func(context.Context) error { - ls.mu.Lock() - defer ls.mu.Unlock() - - _, err := ls.get(ctx, addr) - if err == nil { - return nil - } - return func(context.Context) error { - return err - } -} - -func (ls *LocalStore) BinIndex(po uint8) uint64 { - return ls.DbStore.BinIndex(po) -} - -func (ls *LocalStore) Iterator(from uint64, to uint64, po uint8, f func(Address, uint64) bool) error { - return ls.DbStore.SyncIterator(from, to, po, f) -} - -// Close the local store -func (ls *LocalStore) Close() { - ls.DbStore.Close() -} - -// Migrate checks the datastore schema vs the runtime schema and runs -// migrations if they don't match -func (ls *LocalStore) Migrate() error { - actualDbSchema, err := ls.DbStore.GetSchema() - if err != nil { - log.Error(err.Error()) - return err - } - - if actualDbSchema == CurrentDbSchema { - return nil - } - - log.Debug("running migrations for", "schema", actualDbSchema, "runtime-schema", CurrentDbSchema) - - if actualDbSchema == DbSchemaNone { - ls.migrateFromNoneToPurity() - actualDbSchema = DbSchemaPurity - } - - if err := ls.DbStore.PutSchema(actualDbSchema); err != nil { - return err - } - - if actualDbSchema == DbSchemaPurity { - if err := ls.migrateFromPurityToHalloween(); err != nil { - return err - } - actualDbSchema = DbSchemaHalloween - } - - if err := ls.DbStore.PutSchema(actualDbSchema); err != nil { - return err - } - return nil -} - -func (ls *LocalStore) migrateFromNoneToPurity() { - // delete chunks that are not valid, i.e. chunks that do not pass - // any of the ls.Validators - ls.DbStore.Cleanup(func(c *chunk) bool { - return !ls.isValid(c) - }) -} - -func (ls *LocalStore) migrateFromPurityToHalloween() error { - return ls.DbStore.CleanGCIndex() -} diff --git a/swarm/storage/localstore/doc.go b/swarm/storage/localstore/doc.go deleted file mode 100644 index 98f6fc40aa91..000000000000 --- a/swarm/storage/localstore/doc.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Package localstore provides disk storage layer for Swarm Chunk persistence. -It uses swarm/shed abstractions on top of github.com/syndtr/goleveldb LevelDB -implementation. - -The main type is DB which manages the storage by providing methods to -access and add Chunks and to manage their status. - -Modes are abstractions that do specific changes to Chunks. There are three -mode types: - - - ModeGet, for Chunk access - - ModePut, for adding Chunks to the database - - ModeSet, for changing Chunk statuses - -Every mode type has a corresponding type (Getter, Putter and Setter) -that provides adequate method to perform the opperation and that type -should be injected into localstore consumers instead the whole DB. -This provides more clear insight which operations consumer is performing -on the database. - -Getters, Putters and Setters accept different get, put and set modes -to perform different actions. For example, ModeGet has two different -variables ModeGetRequest and ModeGetSync and two different Getters -can be constructed with them that are used when the chunk is requested -or when the chunk is synced as this two events are differently changing -the database. - -Subscription methods are implemented for a specific purpose of -continuous iterations over Chunks that should be provided to -Push and Pull syncing. - -DB implements an internal garbage collector that removes only synced -Chunks from the database based on their most recent access time. - -Internally, DB stores Chunk data and any required information, such as -store and access timestamps in different shed indexes that can be -iterated on by garbage collector or subscriptions. -*/ -package localstore diff --git a/swarm/storage/localstore/gc.go b/swarm/storage/localstore/gc.go deleted file mode 100644 index 7718d1e589a4..000000000000 --- a/swarm/storage/localstore/gc.go +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -/* -Counting number of items in garbage collection index - -The number of items in garbage collection index is not the same as the number of -chunks in retrieval index (total number of stored chunks). Chunk can be garbage -collected only when it is set to a synced state by ModSetSync, and only then can -be counted into garbage collection size, which determines whether a number of -chunk should be removed from the storage by the garbage collection. This opens a -possibility that the storage size exceeds the limit if files are locally -uploaded and the node is not connected to other nodes or there is a problem with -syncing. - -Tracking of garbage collection size (gcSize) is focused on performance. Key -points: - - 1. counting the number of key/value pairs in LevelDB takes around 0.7s for 1e6 - on a very fast ssd (unacceptable long time in reality) - 2. locking leveldb batch writes with a global mutex (serial batch writes) is - not acceptable, we should use locking per chunk address - -Because of point 1. we cannot count the number of items in garbage collection -index in New constructor as it could last very long for realistic scenarios -where limit is 5e6 and nodes are running on slower hdd disks or cloud providers -with low IOPS. - -Point 2. is a performance optimization to allow parallel batch writes with -getters, putters and setters. Every single batch that they create contain only -information related to a single chunk, no relations with other chunks or shared -statistical data (like gcSize). This approach avoids race conditions on writing -batches in parallel, but creates a problem of synchronizing statistical data -values like gcSize. With global mutex lock, any data could be written by any -batch, but would not use utilize the full potential of leveldb parallel writes. - -To mitigate this two problems, the implementation of counting and persisting -gcSize is split into two parts. One is the in-memory value (gcSize) that is fast -to read and write with a dedicated mutex (gcSizeMu) if the batch which adds or -removes items from garbage collection index is successful. The second part is -the reliable persistence of this value to leveldb database, as storedGCSize -field. This database field is saved by writeGCSizeWorker and writeGCSize -functions when in-memory gcSize variable is changed, but no too often to avoid -very frequent database writes. This database writes are triggered by -writeGCSizeTrigger when a call is made to function incGCSize. Trigger ensures -that no database writes are done only when gcSize is changed (contrary to a -simpler periodic writes or checks). A backoff of 10s in writeGCSizeWorker -ensures that no frequent batch writes are made. Saving the storedGCSize on -database Close function ensures that in-memory gcSize is persisted when database -is closed. - -This persistence must be resilient to failures like panics. For this purpose, a -collection of hashes that are added to the garbage collection index, but still -not persisted to storedGCSize, must be tracked to count them in when DB is -constructed again with New function after the failure (swarm node restarts). On -every batch write that adds a new item to garbage collection index, the same -hash is added to gcUncountedHashesIndex. This ensures that there is a persisted -information which hashes were added to the garbage collection index. But, when -the storedGCSize is saved by writeGCSize function, this values are removed in -the same batch in which storedGCSize is changed to ensure consistency. When the -panic happen, or database Close method is not saved. The database storage -contains all information to reliably and efficiently get the correct number of -items in garbage collection index. This is performed in the New function when -all hashes in gcUncountedHashesIndex are counted, added to the storedGCSize and -saved to the disk before the database is constructed again. Index -gcUncountedHashesIndex is acting as dirty bit for recovery that provides -information what needs to be corrected. With a simple dirty bit, the whole -garbage collection index should me counted on recovery instead only the items in -gcUncountedHashesIndex. Because of the triggering mechanizm of writeGCSizeWorker -and relatively short backoff time, the number of hashes in -gcUncountedHashesIndex should be low and it should take a very short time to -recover from the previous failure. If there was no failure and -gcUncountedHashesIndex is empty, which is the usual case, New function will take -the minimal time to return. -*/ - -package localstore - -import ( - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/syndtr/goleveldb/leveldb" -) - -var ( - // gcTargetRatio defines the target number of items - // in garbage collection index that will not be removed - // on garbage collection. The target number of items - // is calculated by gcTarget function. This value must be - // in range (0,1]. For example, with 0.9 value, - // garbage collection will leave 90% of defined capacity - // in database after its run. This prevents frequent - // garbage collection runs. - gcTargetRatio = 0.9 - // gcBatchSize limits the number of chunks in a single - // leveldb batch on garbage collection. - gcBatchSize int64 = 1000 -) - -// collectGarbageWorker is a long running function that waits for -// collectGarbageTrigger channel to signal a garbage collection -// run. GC run iterates on gcIndex and removes older items -// form retrieval and other indexes. -func (db *DB) collectGarbageWorker() { - for { - select { - case <-db.collectGarbageTrigger: - // run a single collect garbage run and - // if done is false, gcBatchSize is reached and - // another collect garbage run is needed - collectedCount, done, err := db.collectGarbage() - if err != nil { - log.Error("localstore collect garbage", "err", err) - } - // check if another gc run is needed - if !done { - db.triggerGarbageCollection() - } - - if testHookCollectGarbage != nil { - testHookCollectGarbage(collectedCount) - } - case <-db.close: - return - } - } -} - -// collectGarbage removes chunks from retrieval and other -// indexes if maximal number of chunks in database is reached. -// This function returns the number of removed chunks. If done -// is false, another call to this function is needed to collect -// the rest of the garbage as the batch size limit is reached. -// This function is called in collectGarbageWorker. -func (db *DB) collectGarbage() (collectedCount int64, done bool, err error) { - batch := new(leveldb.Batch) - target := db.gcTarget() - - done = true - err = db.gcIndex.Iterate(func(item shed.Item) (stop bool, err error) { - // protect parallel updates - unlock, err := db.lockAddr(item.Address) - if err != nil { - return false, err - } - defer unlock() - - gcSize := db.getGCSize() - if gcSize-collectedCount <= target { - return true, nil - } - // delete from retrieve, pull, gc - db.retrievalDataIndex.DeleteInBatch(batch, item) - db.retrievalAccessIndex.DeleteInBatch(batch, item) - db.pullIndex.DeleteInBatch(batch, item) - db.gcIndex.DeleteInBatch(batch, item) - collectedCount++ - if collectedCount >= gcBatchSize { - // bach size limit reached, - // another gc run is needed - done = false - return true, nil - } - return false, nil - }, nil) - if err != nil { - return 0, false, err - } - - err = db.shed.WriteBatch(batch) - if err != nil { - return 0, false, err - } - // batch is written, decrement gcSize - db.incGCSize(-collectedCount) - return collectedCount, done, nil -} - -// gcTrigger retruns the absolute value for garbage collection -// target value, calculated from db.capacity and gcTargetRatio. -func (db *DB) gcTarget() (target int64) { - return int64(float64(db.capacity) * gcTargetRatio) -} - -// incGCSize increments gcSize by the provided number. -// If count is negative, it will decrement gcSize. -func (db *DB) incGCSize(count int64) { - if count == 0 { - return - } - - db.gcSizeMu.Lock() - new := db.gcSize + count - db.gcSize = new - db.gcSizeMu.Unlock() - - select { - case db.writeGCSizeTrigger <- struct{}{}: - default: - } - if new >= db.capacity { - db.triggerGarbageCollection() - } -} - -// getGCSize returns gcSize value by locking it -// with gcSizeMu mutex. -func (db *DB) getGCSize() (count int64) { - db.gcSizeMu.RLock() - count = db.gcSize - db.gcSizeMu.RUnlock() - return count -} - -// triggerGarbageCollection signals collectGarbageWorker -// to call collectGarbage. -func (db *DB) triggerGarbageCollection() { - select { - case db.collectGarbageTrigger <- struct{}{}: - case <-db.close: - default: - } -} - -// writeGCSizeWorker writes gcSize on trigger event -// and waits writeGCSizeDelay after each write. -// It implements a linear backoff with delay of -// writeGCSizeDelay duration to avoid very frequent -// database operations. -func (db *DB) writeGCSizeWorker() { - for { - select { - case <-db.writeGCSizeTrigger: - err := db.writeGCSize(db.getGCSize()) - if err != nil { - log.Error("localstore write gc size", "err", err) - } - // Wait some time before writing gc size in the next - // iteration. This prevents frequent I/O operations. - select { - case <-time.After(10 * time.Second): - case <-db.close: - return - } - case <-db.close: - return - } - } -} - -// writeGCSize stores the number of items in gcIndex. -// It removes all hashes from gcUncountedHashesIndex -// not to include them on the next DB initialization -// (New function) when gcSize is counted. -func (db *DB) writeGCSize(gcSize int64) (err error) { - const maxBatchSize = 1000 - - batch := new(leveldb.Batch) - db.storedGCSize.PutInBatch(batch, uint64(gcSize)) - batchSize := 1 - - // use only one iterator as it acquires its snapshot - // not to remove hashes from index that are added - // after stored gc size is written - err = db.gcUncountedHashesIndex.Iterate(func(item shed.Item) (stop bool, err error) { - db.gcUncountedHashesIndex.DeleteInBatch(batch, item) - batchSize++ - if batchSize >= maxBatchSize { - err = db.shed.WriteBatch(batch) - if err != nil { - return false, err - } - batch.Reset() - batchSize = 0 - } - return false, nil - }, nil) - if err != nil { - return err - } - return db.shed.WriteBatch(batch) -} - -// testHookCollectGarbage is a hook that can provide -// information when a garbage collection run is done -// and how many items it removed. -var testHookCollectGarbage func(collectedCount int64) diff --git a/swarm/storage/localstore/gc_test.go b/swarm/storage/localstore/gc_test.go deleted file mode 100644 index eb039a554a11..000000000000 --- a/swarm/storage/localstore/gc_test.go +++ /dev/null @@ -1,358 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "io/ioutil" - "math/rand" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TestDB_collectGarbageWorker tests garbage collection runs -// by uploading and syncing a number of chunks. -func TestDB_collectGarbageWorker(t *testing.T) { - testDB_collectGarbageWorker(t) -} - -// TestDB_collectGarbageWorker_multipleBatches tests garbage -// collection runs by uploading and syncing a number of -// chunks by having multiple smaller batches. -func TestDB_collectGarbageWorker_multipleBatches(t *testing.T) { - // lower the maximal number of chunks in a single - // gc batch to ensure multiple batches. - defer func(s int64) { gcBatchSize = s }(gcBatchSize) - gcBatchSize = 2 - - testDB_collectGarbageWorker(t) -} - -// testDB_collectGarbageWorker is a helper test function to test -// garbage collection runs by uploading and syncing a number of chunks. -func testDB_collectGarbageWorker(t *testing.T) { - chunkCount := 150 - - testHookCollectGarbageChan := make(chan int64) - defer setTestHookCollectGarbage(func(collectedCount int64) { - testHookCollectGarbageChan <- collectedCount - })() - - db, cleanupFunc := newTestDB(t, &Options{ - Capacity: 100, - }) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - - addrs := make([]storage.Address, 0) - - // upload random chunks - for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - err = syncer.Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - addrs = append(addrs, chunk.Address()) - } - - gcTarget := db.gcTarget() - - for { - select { - case <-testHookCollectGarbageChan: - case <-time.After(10 * time.Second): - t.Error("collect garbage timeout") - } - gcSize := db.getGCSize() - if gcSize == gcTarget { - break - } - } - - t.Run("pull index count", newItemsCountTest(db.pullIndex, int(gcTarget))) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, int(gcTarget))) - - t.Run("gc size", newIndexGCSizeTest(db)) - - // the first synced chunk should be removed - t.Run("get the first synced chunk", func(t *testing.T) { - _, err := db.NewGetter(ModeGetRequest).Get(addrs[0]) - if err != storage.ErrChunkNotFound { - t.Errorf("got error %v, want %v", err, storage.ErrChunkNotFound) - } - }) - - // last synced chunk should not be removed - t.Run("get most recent synced chunk", func(t *testing.T) { - _, err := db.NewGetter(ModeGetRequest).Get(addrs[len(addrs)-1]) - if err != nil { - t.Fatal(err) - } - }) - - // cleanup: drain the last testHookCollectGarbageChan - // element before calling deferred functions not to block - // collectGarbageWorker loop, preventing the race in - // setting testHookCollectGarbage function - select { - case <-testHookCollectGarbageChan: - default: - } -} - -// TestDB_collectGarbageWorker_withRequests is a helper test function -// to test garbage collection runs by uploading, syncing and -// requesting a number of chunks. -func TestDB_collectGarbageWorker_withRequests(t *testing.T) { - db, cleanupFunc := newTestDB(t, &Options{ - Capacity: 100, - }) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - - testHookCollectGarbageChan := make(chan int64) - defer setTestHookCollectGarbage(func(collectedCount int64) { - testHookCollectGarbageChan <- collectedCount - })() - - addrs := make([]storage.Address, 0) - - // upload random chunks just up to the capacity - for i := 0; i < int(db.capacity)-1; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - err = syncer.Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - addrs = append(addrs, chunk.Address()) - } - - // request the latest synced chunk - // to prioritize it in the gc index - // not to be collected - _, err := db.NewGetter(ModeGetRequest).Get(addrs[0]) - if err != nil { - t.Fatal(err) - } - - // upload and sync another chunk to trigger - // garbage collection - chunk := generateRandomChunk() - err = uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - err = syncer.Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - addrs = append(addrs, chunk.Address()) - - // wait for garbage collection - - gcTarget := db.gcTarget() - - var totalCollectedCount int64 - for { - select { - case c := <-testHookCollectGarbageChan: - totalCollectedCount += c - case <-time.After(10 * time.Second): - t.Error("collect garbage timeout") - } - gcSize := db.getGCSize() - if gcSize == gcTarget { - break - } - } - - wantTotalCollectedCount := int64(len(addrs)) - gcTarget - if totalCollectedCount != wantTotalCollectedCount { - t.Errorf("total collected chunks %v, want %v", totalCollectedCount, wantTotalCollectedCount) - } - - t.Run("pull index count", newItemsCountTest(db.pullIndex, int(gcTarget))) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, int(gcTarget))) - - t.Run("gc size", newIndexGCSizeTest(db)) - - // requested chunk should not be removed - t.Run("get requested chunk", func(t *testing.T) { - _, err := db.NewGetter(ModeGetRequest).Get(addrs[0]) - if err != nil { - t.Fatal(err) - } - }) - - // the second synced chunk should be removed - t.Run("get gc-ed chunk", func(t *testing.T) { - _, err := db.NewGetter(ModeGetRequest).Get(addrs[1]) - if err != storage.ErrChunkNotFound { - t.Errorf("got error %v, want %v", err, storage.ErrChunkNotFound) - } - }) - - // last synced chunk should not be removed - t.Run("get most recent synced chunk", func(t *testing.T) { - _, err := db.NewGetter(ModeGetRequest).Get(addrs[len(addrs)-1]) - if err != nil { - t.Fatal(err) - } - }) -} - -// TestDB_gcSize checks if gcSize has a correct value after -// database is initialized with existing data. -func TestDB_gcSize(t *testing.T) { - dir, err := ioutil.TempDir("", "localstore-stored-gc-size") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - baseKey := make([]byte, 32) - if _, err := rand.Read(baseKey); err != nil { - t.Fatal(err) - } - db, err := New(dir, baseKey, nil) - if err != nil { - t.Fatal(err) - } - - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - - count := 100 - - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - err = syncer.Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - } - - // DB.Close writes gc size to disk, so - // Instead calling Close, simulate database shutdown - // without it. - close(db.close) - db.updateGCWG.Wait() - err = db.shed.Close() - if err != nil { - t.Fatal(err) - } - - db, err = New(dir, baseKey, nil) - if err != nil { - t.Fatal(err) - } - - t.Run("gc index size", newIndexGCSizeTest(db)) - - t.Run("gc uncounted hashes index count", newItemsCountTest(db.gcUncountedHashesIndex, 0)) -} - -// setTestHookCollectGarbage sets testHookCollectGarbage and -// returns a function that will reset it to the -// value before the change. -func setTestHookCollectGarbage(h func(collectedCount int64)) (reset func()) { - current := testHookCollectGarbage - reset = func() { testHookCollectGarbage = current } - testHookCollectGarbage = h - return reset -} - -// TestSetTestHookCollectGarbage tests if setTestHookCollectGarbage changes -// testHookCollectGarbage function correctly and if its reset function -// resets the original function. -func TestSetTestHookCollectGarbage(t *testing.T) { - // Set the current function after the test finishes. - defer func(h func(collectedCount int64)) { testHookCollectGarbage = h }(testHookCollectGarbage) - - // expected value for the unchanged function - original := 1 - // expected value for the changed function - changed := 2 - - // this variable will be set with two different functions - var got int - - // define the original (unchanged) functions - testHookCollectGarbage = func(_ int64) { - got = original - } - - // set got variable - testHookCollectGarbage(0) - - // test if got variable is set correctly - if got != original { - t.Errorf("got hook value %v, want %v", got, original) - } - - // set the new function - reset := setTestHookCollectGarbage(func(_ int64) { - got = changed - }) - - // set got variable - testHookCollectGarbage(0) - - // test if got variable is set correctly to changed value - if got != changed { - t.Errorf("got hook value %v, want %v", got, changed) - } - - // set the function to the original one - reset() - - // set got variable - testHookCollectGarbage(0) - - // test if got variable is set correctly to original value - if got != original { - t.Errorf("got hook value %v, want %v", got, original) - } -} diff --git a/swarm/storage/localstore/index_test.go b/swarm/storage/localstore/index_test.go deleted file mode 100644 index d9abf440f1e5..000000000000 --- a/swarm/storage/localstore/index_test.go +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "math/rand" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TestDB_pullIndex validates the ordering of keys in pull index. -// Pull index key contains PO prefix which is calculated from -// DB base key and chunk address. This is not an Item field -// which are checked in Mode tests. -// This test uploads chunks, sorts them in expected order and -// validates that pull index iterator will iterate it the same -// order. -func TestDB_pullIndex(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - chunkCount := 50 - - chunks := make([]testIndexChunk, chunkCount) - - // upload random chunks - for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - chunks[i] = testIndexChunk{ - Chunk: chunk, - // this timestamp is not the same as in - // the index, but given that uploads - // are sequential and that only ordering - // of events matter, this information is - // sufficient - storeTimestamp: now(), - } - } - - testItemsOrder(t, db.pullIndex, chunks, func(i, j int) (less bool) { - poi := storage.Proximity(db.baseKey, chunks[i].Address()) - poj := storage.Proximity(db.baseKey, chunks[j].Address()) - if poi < poj { - return true - } - if poi > poj { - return false - } - if chunks[i].storeTimestamp < chunks[j].storeTimestamp { - return true - } - if chunks[i].storeTimestamp > chunks[j].storeTimestamp { - return false - } - return bytes.Compare(chunks[i].Address(), chunks[j].Address()) == -1 - }) -} - -// TestDB_gcIndex validates garbage collection index by uploading -// a chunk with and performing operations using synced, access and -// request modes. -func TestDB_gcIndex(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - chunkCount := 50 - - chunks := make([]testIndexChunk, chunkCount) - - // upload random chunks - for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - chunks[i] = testIndexChunk{ - Chunk: chunk, - } - } - - // check if all chunks are stored - newItemsCountTest(db.pullIndex, chunkCount)(t) - - // check that chunks are not collectable for garbage - newItemsCountTest(db.gcIndex, 0)(t) - - // set update gc test hook to signal when - // update gc goroutine is done by sending to - // testHookUpdateGCChan channel, which is - // used to wait for indexes change verifications - testHookUpdateGCChan := make(chan struct{}) - defer setTestHookUpdateGC(func() { - testHookUpdateGCChan <- struct{}{} - })() - - t.Run("request unsynced", func(t *testing.T) { - chunk := chunks[1] - - _, err := db.NewGetter(ModeGetRequest).Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - - // the chunk is not synced - // should not be in the garbace collection index - newItemsCountTest(db.gcIndex, 0)(t) - - newIndexGCSizeTest(db)(t) - }) - - t.Run("sync one chunk", func(t *testing.T) { - chunk := chunks[0] - - err := db.NewSetter(ModeSetSync).Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - // the chunk is synced and should be in gc index - newItemsCountTest(db.gcIndex, 1)(t) - - newIndexGCSizeTest(db)(t) - }) - - t.Run("sync all chunks", func(t *testing.T) { - setter := db.NewSetter(ModeSetSync) - - for i := range chunks { - err := setter.Set(chunks[i].Address()) - if err != nil { - t.Fatal(err) - } - } - - testItemsOrder(t, db.gcIndex, chunks, nil) - - newIndexGCSizeTest(db)(t) - }) - - t.Run("request one chunk", func(t *testing.T) { - i := 6 - - _, err := db.NewGetter(ModeGetRequest).Get(chunks[i].Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - - // move the chunk to the end of the expected gc - c := chunks[i] - chunks = append(chunks[:i], chunks[i+1:]...) - chunks = append(chunks, c) - - testItemsOrder(t, db.gcIndex, chunks, nil) - - newIndexGCSizeTest(db)(t) - }) - - t.Run("random chunk request", func(t *testing.T) { - requester := db.NewGetter(ModeGetRequest) - - rand.Shuffle(len(chunks), func(i, j int) { - chunks[i], chunks[j] = chunks[j], chunks[i] - }) - - for _, chunk := range chunks { - _, err := requester.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - } - - testItemsOrder(t, db.gcIndex, chunks, nil) - - newIndexGCSizeTest(db)(t) - }) - - t.Run("remove one chunk", func(t *testing.T) { - i := 3 - - err := db.NewSetter(modeSetRemove).Set(chunks[i].Address()) - if err != nil { - t.Fatal(err) - } - - // remove the chunk from the expected chunks in gc index - chunks = append(chunks[:i], chunks[i+1:]...) - - testItemsOrder(t, db.gcIndex, chunks, nil) - - newIndexGCSizeTest(db)(t) - }) -} diff --git a/swarm/storage/localstore/localstore.go b/swarm/storage/localstore/localstore.go deleted file mode 100644 index 7a9fb54f553d..000000000000 --- a/swarm/storage/localstore/localstore.go +++ /dev/null @@ -1,431 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "encoding/binary" - "encoding/hex" - "errors" - "sync" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -var ( - // ErrInvalidMode is retuned when an unknown Mode - // is provided to the function. - ErrInvalidMode = errors.New("invalid mode") - // ErrAddressLockTimeout is returned when the same chunk - // is updated in parallel and one of the updates - // takes longer then the configured timeout duration. - ErrAddressLockTimeout = errors.New("address lock timeout") -) - -var ( - // Default value for Capacity DB option. - defaultCapacity int64 = 5000000 - // Limit the number of goroutines created by Getters - // that call updateGC function. Value 0 sets no limit. - maxParallelUpdateGC = 1000 -) - -// DB is the local store implementation and holds -// database related objects. -type DB struct { - shed *shed.DB - - // schema name of loaded data - schemaName shed.StringField - // field that stores number of intems in gc index - storedGCSize shed.Uint64Field - - // retrieval indexes - retrievalDataIndex shed.Index - retrievalAccessIndex shed.Index - // push syncing index - pushIndex shed.Index - // push syncing subscriptions triggers - pushTriggers []chan struct{} - pushTriggersMu sync.RWMutex - - // pull syncing index - pullIndex shed.Index - // pull syncing subscriptions triggers per bin - pullTriggers map[uint8][]chan struct{} - pullTriggersMu sync.RWMutex - - // garbage collection index - gcIndex shed.Index - // index that stores hashes that are not - // counted in and saved to storedGCSize - gcUncountedHashesIndex shed.Index - - // number of elements in garbage collection index - // it must be always read by getGCSize and - // set with incGCSize which are locking gcSizeMu - gcSize int64 - gcSizeMu sync.RWMutex - // garbage collection is triggered when gcSize exceeds - // the capacity value - capacity int64 - - // triggers garbage collection event loop - collectGarbageTrigger chan struct{} - // triggers write gc size event loop - writeGCSizeTrigger chan struct{} - - // a buffered channel acting as a semaphore - // to limit the maximal number of goroutines - // created by Getters to call updateGC function - updateGCSem chan struct{} - // a wait group to ensure all updateGC goroutines - // are done before closing the database - updateGCWG sync.WaitGroup - - baseKey []byte - - addressLocks sync.Map - - // this channel is closed when close function is called - // to terminate other goroutines - close chan struct{} -} - -// Options struct holds optional parameters for configuring DB. -type Options struct { - // MockStore is a mock node store that is used to store - // chunk data in a central store. It can be used to reduce - // total storage space requirements in testing large number - // of swarm nodes with chunk data deduplication provided by - // the mock global store. - MockStore *mock.NodeStore - // Capacity is a limit that triggers garbage collection when - // number of items in gcIndex equals or exceeds it. - Capacity int64 - // MetricsPrefix defines a prefix for metrics names. - MetricsPrefix string -} - -// New returns a new DB. All fields and indexes are initialized -// and possible conflicts with schema from existing database is checked. -// One goroutine for writing batches is created. -func New(path string, baseKey []byte, o *Options) (db *DB, err error) { - if o == nil { - o = new(Options) - } - db = &DB{ - capacity: o.Capacity, - baseKey: baseKey, - // channels collectGarbageTrigger and writeGCSizeTrigger - // need to be buffered with the size of 1 - // to signal another event if it - // is triggered during already running function - collectGarbageTrigger: make(chan struct{}, 1), - writeGCSizeTrigger: make(chan struct{}, 1), - close: make(chan struct{}), - } - if db.capacity <= 0 { - db.capacity = defaultCapacity - } - if maxParallelUpdateGC > 0 { - db.updateGCSem = make(chan struct{}, maxParallelUpdateGC) - } - - db.shed, err = shed.NewDB(path, o.MetricsPrefix) - if err != nil { - return nil, err - } - // Identify current storage schema by arbitrary name. - db.schemaName, err = db.shed.NewStringField("schema-name") - if err != nil { - return nil, err - } - // Persist gc size. - db.storedGCSize, err = db.shed.NewUint64Field("gc-size") - if err != nil { - return nil, err - } - // Functions for retrieval data index. - var ( - encodeValueFunc func(fields shed.Item) (value []byte, err error) - decodeValueFunc func(keyItem shed.Item, value []byte) (e shed.Item, err error) - ) - if o.MockStore != nil { - encodeValueFunc = func(fields shed.Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.StoreTimestamp)) - err = o.MockStore.Put(fields.Address, fields.Data) - if err != nil { - return nil, err - } - return b, nil - } - decodeValueFunc = func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - e.StoreTimestamp = int64(binary.BigEndian.Uint64(value[:8])) - e.Data, err = o.MockStore.Get(keyItem.Address) - return e, err - } - } else { - encodeValueFunc = func(fields shed.Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.StoreTimestamp)) - value = append(b, fields.Data...) - return value, nil - } - decodeValueFunc = func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - e.StoreTimestamp = int64(binary.BigEndian.Uint64(value[:8])) - e.Data = value[8:] - return e, nil - } - } - // Index storing actual chunk address, data and store timestamp. - db.retrievalDataIndex, err = db.shed.NewIndex("Address->StoreTimestamp|Data", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: encodeValueFunc, - DecodeValue: decodeValueFunc, - }) - if err != nil { - return nil, err - } - // Index storing access timestamp for a particular address. - // It is needed in order to update gc index keys for iteration order. - db.retrievalAccessIndex, err = db.shed.NewIndex("Address->AccessTimestamp", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - b := make([]byte, 8) - binary.BigEndian.PutUint64(b, uint64(fields.AccessTimestamp)) - return b, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - e.AccessTimestamp = int64(binary.BigEndian.Uint64(value)) - return e, nil - }, - }) - if err != nil { - return nil, err - } - // pull index allows history and live syncing per po bin - db.pullIndex, err = db.shed.NewIndex("PO|StoredTimestamp|Hash->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - key = make([]byte, 41) - key[0] = db.po(fields.Address) - binary.BigEndian.PutUint64(key[1:9], uint64(fields.StoreTimestamp)) - copy(key[9:], fields.Address[:]) - return key, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key[9:] - e.StoreTimestamp = int64(binary.BigEndian.Uint64(key[1:9])) - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - // create a pull syncing triggers used by SubscribePull function - db.pullTriggers = make(map[uint8][]chan struct{}) - // push index contains as yet unsynced chunks - db.pushIndex, err = db.shed.NewIndex("StoredTimestamp|Hash->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - key = make([]byte, 40) - binary.BigEndian.PutUint64(key[:8], uint64(fields.StoreTimestamp)) - copy(key[8:], fields.Address[:]) - return key, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key[8:] - e.StoreTimestamp = int64(binary.BigEndian.Uint64(key[:8])) - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - // create a push syncing triggers used by SubscribePush function - db.pushTriggers = make([]chan struct{}, 0) - // gc index for removable chunk ordered by ascending last access time - db.gcIndex, err = db.shed.NewIndex("AccessTimestamp|StoredTimestamp|Hash->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - b := make([]byte, 16, 16+len(fields.Address)) - binary.BigEndian.PutUint64(b[:8], uint64(fields.AccessTimestamp)) - binary.BigEndian.PutUint64(b[8:16], uint64(fields.StoreTimestamp)) - key = append(b, fields.Address...) - return key, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.AccessTimestamp = int64(binary.BigEndian.Uint64(key[:8])) - e.StoreTimestamp = int64(binary.BigEndian.Uint64(key[8:16])) - e.Address = key[16:] - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - // gc uncounted hashes index keeps hashes that are in gc index - // but not counted in and saved to storedGCSize - db.gcUncountedHashesIndex, err = db.shed.NewIndex("Hash->nil", shed.IndexFuncs{ - EncodeKey: func(fields shed.Item) (key []byte, err error) { - return fields.Address, nil - }, - DecodeKey: func(key []byte) (e shed.Item, err error) { - e.Address = key - return e, nil - }, - EncodeValue: func(fields shed.Item) (value []byte, err error) { - return nil, nil - }, - DecodeValue: func(keyItem shed.Item, value []byte) (e shed.Item, err error) { - return e, nil - }, - }) - if err != nil { - return nil, err - } - - // count number of elements in garbage collection index - gcSize, err := db.storedGCSize.Get() - if err != nil { - return nil, err - } - // get number of uncounted hashes - gcUncountedSize, err := db.gcUncountedHashesIndex.Count() - if err != nil { - return nil, err - } - gcSize += uint64(gcUncountedSize) - // remove uncounted hashes from the index and - // save the total gcSize after uncounted hashes are removed - err = db.writeGCSize(int64(gcSize)) - if err != nil { - return nil, err - } - db.incGCSize(int64(gcSize)) - - // start worker to write gc size - go db.writeGCSizeWorker() - // start garbage collection worker - go db.collectGarbageWorker() - return db, nil -} - -// Close closes the underlying database. -func (db *DB) Close() (err error) { - close(db.close) - db.updateGCWG.Wait() - if err := db.writeGCSize(db.getGCSize()); err != nil { - log.Error("localstore: write gc size", "err", err) - } - return db.shed.Close() -} - -// po computes the proximity order between the address -// and database base key. -func (db *DB) po(addr storage.Address) (bin uint8) { - return uint8(storage.Proximity(db.baseKey, addr)) -} - -var ( - // Maximal time for lockAddr to wait until it - // returns error. - addressLockTimeout = 3 * time.Second - // duration between two lock checks in lockAddr. - addressLockCheckDelay = 30 * time.Microsecond -) - -// lockAddr sets the lock on a particular address -// using addressLocks sync.Map and returns unlock function. -// If the address is locked this function will check it -// in a for loop for addressLockTimeout time, after which -// it will return ErrAddressLockTimeout error. -func (db *DB) lockAddr(addr storage.Address) (unlock func(), err error) { - start := time.Now() - lockKey := hex.EncodeToString(addr) - for { - _, loaded := db.addressLocks.LoadOrStore(lockKey, struct{}{}) - if !loaded { - break - } - time.Sleep(addressLockCheckDelay) - if time.Since(start) > addressLockTimeout { - return nil, ErrAddressLockTimeout - } - } - return func() { db.addressLocks.Delete(lockKey) }, nil -} - -// chunkToItem creates new Item with data provided by the Chunk. -func chunkToItem(ch storage.Chunk) shed.Item { - return shed.Item{ - Address: ch.Address(), - Data: ch.Data(), - } -} - -// addressToItem creates new Item with a provided address. -func addressToItem(addr storage.Address) shed.Item { - return shed.Item{ - Address: addr, - } -} - -// now is a helper function that returns a current unix timestamp -// in UTC timezone. -// It is set in the init function for usage in production, and -// optionally overridden in tests for data validation. -var now func() int64 - -func init() { - // set the now function - now = func() (t int64) { - return time.Now().UTC().UnixNano() - } -} diff --git a/swarm/storage/localstore/localstore_test.go b/swarm/storage/localstore/localstore_test.go deleted file mode 100644 index c7309d3cd887..000000000000 --- a/swarm/storage/localstore/localstore_test.go +++ /dev/null @@ -1,520 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "fmt" - "io/ioutil" - "math/rand" - "os" - "sort" - "strconv" - "sync" - "testing" - "time" - - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/syndtr/goleveldb/leveldb" -) - -// TestDB validates if the chunk can be uploaded and -// correctly retrieved. -func TestDB(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - got, err := db.NewGetter(ModeGetRequest).Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(got.Address(), chunk.Address()) { - t.Errorf("got address %x, want %x", got.Address(), chunk.Address()) - } - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Errorf("got data %x, want %x", got.Data(), chunk.Data()) - } -} - -// TestDB_updateGCSem tests maxParallelUpdateGC limit. -// This test temporary sets the limit to a low number, -// makes updateGC function execution time longer by -// setting a custom testHookUpdateGC function with a sleep -// and a count current and maximal number of goroutines. -func TestDB_updateGCSem(t *testing.T) { - updateGCSleep := time.Second - var count int - var max int - var mu sync.Mutex - defer setTestHookUpdateGC(func() { - mu.Lock() - // add to the count of current goroutines - count++ - if count > max { - // set maximal detected numbers of goroutines - max = count - } - mu.Unlock() - - // wait for some time to ensure multiple parallel goroutines - time.Sleep(updateGCSleep) - - mu.Lock() - count-- - mu.Unlock() - })() - - defer func(m int) { maxParallelUpdateGC = m }(maxParallelUpdateGC) - maxParallelUpdateGC = 3 - - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - getter := db.NewGetter(ModeGetRequest) - - // get more chunks then maxParallelUpdateGC - // in time shorter then updateGCSleep - for i := 0; i < 5; i++ { - _, err = getter.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - } - - if max != maxParallelUpdateGC { - t.Errorf("got max %v, want %v", max, maxParallelUpdateGC) - } -} - -// BenchmarkNew measures the time that New function -// needs to initialize and count the number of key/value -// pairs in GC index. -// This benchmark generates a number of chunks, uploads them, -// sets them to synced state for them to enter the GC index, -// and measures the execution time of New function by creating -// new databases with the same data directory. -// -// This benchmark takes significant amount of time. -// -// Measurements on MacBook Pro (Retina, 15-inch, Mid 2014) show -// that New function executes around 1s for database with 1M chunks. -// -// # go test -benchmem -run=none github.com/ethereum/go-ethereum/swarm/storage/localstore -bench BenchmarkNew -v -timeout 20m -// goos: darwin -// goarch: amd64 -// pkg: github.com/ethereum/go-ethereum/swarm/storage/localstore -// BenchmarkNew/1000-8 200 11672414 ns/op 9570960 B/op 10008 allocs/op -// BenchmarkNew/10000-8 100 14890609 ns/op 10490118 B/op 7759 allocs/op -// BenchmarkNew/100000-8 20 58334080 ns/op 17763157 B/op 22978 allocs/op -// BenchmarkNew/1000000-8 2 748595153 ns/op 45297404 B/op 253242 allocs/op -// PASS -func BenchmarkNew(b *testing.B) { - if testing.Short() { - b.Skip("skipping benchmark in short mode") - } - for _, count := range []int{ - 1000, - 10000, - 100000, - 1000000, - } { - b.Run(strconv.Itoa(count), func(b *testing.B) { - dir, err := ioutil.TempDir("", "localstore-new-benchmark") - if err != nil { - b.Fatal(err) - } - defer os.RemoveAll(dir) - baseKey := make([]byte, 32) - if _, err := rand.Read(baseKey); err != nil { - b.Fatal(err) - } - db, err := New(dir, baseKey, nil) - if err != nil { - b.Fatal(err) - } - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() - err := uploader.Put(chunk) - if err != nil { - b.Fatal(err) - } - err = syncer.Set(chunk.Address()) - if err != nil { - b.Fatal(err) - } - } - err = db.Close() - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - - for n := 0; n < b.N; n++ { - b.StartTimer() - db, err := New(dir, baseKey, nil) - b.StopTimer() - - if err != nil { - b.Fatal(err) - } - err = db.Close() - if err != nil { - b.Fatal(err) - } - } - }) - } -} - -// newTestDB is a helper function that constructs a -// temporary database and returns a cleanup function that must -// be called to remove the data. -func newTestDB(t testing.TB, o *Options) (db *DB, cleanupFunc func()) { - t.Helper() - - dir, err := ioutil.TempDir("", "localstore-test") - if err != nil { - t.Fatal(err) - } - cleanupFunc = func() { os.RemoveAll(dir) } - baseKey := make([]byte, 32) - if _, err := rand.Read(baseKey); err != nil { - t.Fatal(err) - } - db, err = New(dir, baseKey, o) - if err != nil { - cleanupFunc() - t.Fatal(err) - } - cleanupFunc = func() { - err := db.Close() - if err != nil { - t.Error(err) - } - os.RemoveAll(dir) - } - return db, cleanupFunc -} - -// generateRandomChunk generates a valid Chunk with -// data size of default chunk size. -func generateRandomChunk() storage.Chunk { - return storage.GenerateRandomChunk(ch.DefaultSize) -} - -func init() { - // needed for generateFakeRandomChunk - rand.Seed(time.Now().UnixNano()) -} - -// generateFakeRandomChunk generates a Chunk that is not -// valid, but it contains a random key and a random value. -// This function is faster then storage.GenerateRandomChunk -// which generates a valid chunk. -// Some tests in this package do not need valid chunks, just -// random data, and their execution time can be decreased -// using this function. -func generateFakeRandomChunk() storage.Chunk { - data := make([]byte, ch.DefaultSize) - rand.Read(data) - key := make([]byte, 32) - rand.Read(key) - return storage.NewChunk(key, data) -} - -// TestGenerateFakeRandomChunk validates that -// generateFakeRandomChunk returns random data by comparing -// two generated chunks. -func TestGenerateFakeRandomChunk(t *testing.T) { - c1 := generateFakeRandomChunk() - c2 := generateFakeRandomChunk() - addrLen := len(c1.Address()) - if addrLen != 32 { - t.Errorf("first chunk address length %v, want %v", addrLen, 32) - } - dataLen := len(c1.Data()) - if dataLen != ch.DefaultSize { - t.Errorf("first chunk data length %v, want %v", dataLen, ch.DefaultSize) - } - addrLen = len(c2.Address()) - if addrLen != 32 { - t.Errorf("second chunk address length %v, want %v", addrLen, 32) - } - dataLen = len(c2.Data()) - if dataLen != ch.DefaultSize { - t.Errorf("second chunk data length %v, want %v", dataLen, ch.DefaultSize) - } - if bytes.Equal(c1.Address(), c2.Address()) { - t.Error("fake chunks addresses do not differ") - } - if bytes.Equal(c1.Data(), c2.Data()) { - t.Error("fake chunks data bytes do not differ") - } -} - -// newRetrieveIndexesTest returns a test function that validates if the right -// chunk values are in the retrieval indexes. -func newRetrieveIndexesTest(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { - return func(t *testing.T) { - item, err := db.retrievalDataIndex.Get(addressToItem(chunk.Address())) - if err != nil { - t.Fatal(err) - } - validateItem(t, item, chunk.Address(), chunk.Data(), storeTimestamp, 0) - - // access index should not be set - wantErr := leveldb.ErrNotFound - item, err = db.retrievalAccessIndex.Get(addressToItem(chunk.Address())) - if err != wantErr { - t.Errorf("got error %v, want %v", err, wantErr) - } - } -} - -// newRetrieveIndexesTestWithAccess returns a test function that validates if the right -// chunk values are in the retrieval indexes when access time must be stored. -func newRetrieveIndexesTestWithAccess(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { - return func(t *testing.T) { - item, err := db.retrievalDataIndex.Get(addressToItem(chunk.Address())) - if err != nil { - t.Fatal(err) - } - validateItem(t, item, chunk.Address(), chunk.Data(), storeTimestamp, 0) - - if accessTimestamp > 0 { - item, err = db.retrievalAccessIndex.Get(addressToItem(chunk.Address())) - if err != nil { - t.Fatal(err) - } - validateItem(t, item, chunk.Address(), nil, 0, accessTimestamp) - } - } -} - -// newPullIndexTest returns a test function that validates if the right -// chunk values are in the pull index. -func newPullIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { - return func(t *testing.T) { - item, err := db.pullIndex.Get(shed.Item{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - }) - if err != wantError { - t.Errorf("got error %v, want %v", err, wantError) - } - if err == nil { - validateItem(t, item, chunk.Address(), nil, storeTimestamp, 0) - } - } -} - -// newPushIndexTest returns a test function that validates if the right -// chunk values are in the push index. -func newPushIndexTest(db *DB, chunk storage.Chunk, storeTimestamp int64, wantError error) func(t *testing.T) { - return func(t *testing.T) { - item, err := db.pushIndex.Get(shed.Item{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - }) - if err != wantError { - t.Errorf("got error %v, want %v", err, wantError) - } - if err == nil { - validateItem(t, item, chunk.Address(), nil, storeTimestamp, 0) - } - } -} - -// newGCIndexTest returns a test function that validates if the right -// chunk values are in the push index. -func newGCIndexTest(db *DB, chunk storage.Chunk, storeTimestamp, accessTimestamp int64) func(t *testing.T) { - return func(t *testing.T) { - item, err := db.gcIndex.Get(shed.Item{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - AccessTimestamp: accessTimestamp, - }) - if err != nil { - t.Fatal(err) - } - validateItem(t, item, chunk.Address(), nil, storeTimestamp, accessTimestamp) - } -} - -// newItemsCountTest returns a test function that validates if -// an index contains expected number of key/value pairs. -func newItemsCountTest(i shed.Index, want int) func(t *testing.T) { - return func(t *testing.T) { - var c int - err := i.Iterate(func(item shed.Item) (stop bool, err error) { - c++ - return - }, nil) - if err != nil { - t.Fatal(err) - } - if c != want { - t.Errorf("got %v items in index, want %v", c, want) - } - } -} - -// newIndexGCSizeTest retruns a test function that validates if DB.gcSize -// value is the same as the number of items in DB.gcIndex. -func newIndexGCSizeTest(db *DB) func(t *testing.T) { - return func(t *testing.T) { - var want int64 - err := db.gcIndex.Iterate(func(item shed.Item) (stop bool, err error) { - want++ - return - }, nil) - if err != nil { - t.Fatal(err) - } - got := db.getGCSize() - if got != want { - t.Errorf("got gc size %v, want %v", got, want) - } - } -} - -// testIndexChunk embeds storageChunk with additional data that is stored -// in database. It is used for index values validations. -type testIndexChunk struct { - storage.Chunk - storeTimestamp int64 -} - -// testItemsOrder tests the order of chunks in the index. If sortFunc is not nil, -// chunks will be sorted with it before validation. -func testItemsOrder(t *testing.T, i shed.Index, chunks []testIndexChunk, sortFunc func(i, j int) (less bool)) { - newItemsCountTest(i, len(chunks))(t) - - if sortFunc != nil { - sort.Slice(chunks, sortFunc) - } - - var cursor int - err := i.Iterate(func(item shed.Item) (stop bool, err error) { - want := chunks[cursor].Address() - got := item.Address - if !bytes.Equal(got, want) { - return true, fmt.Errorf("got address %x at position %v, want %x", got, cursor, want) - } - cursor++ - return false, nil - }, nil) - if err != nil { - t.Fatal(err) - } -} - -// validateItem is a helper function that checks Item values. -func validateItem(t *testing.T, item shed.Item, address, data []byte, storeTimestamp, accessTimestamp int64) { - t.Helper() - - if !bytes.Equal(item.Address, address) { - t.Errorf("got item address %x, want %x", item.Address, address) - } - if !bytes.Equal(item.Data, data) { - t.Errorf("got item data %x, want %x", item.Data, data) - } - if item.StoreTimestamp != storeTimestamp { - t.Errorf("got item store timestamp %v, want %v", item.StoreTimestamp, storeTimestamp) - } - if item.AccessTimestamp != accessTimestamp { - t.Errorf("got item access timestamp %v, want %v", item.AccessTimestamp, accessTimestamp) - } -} - -// setNow replaces now function and -// returns a function that will reset it to the -// value before the change. -func setNow(f func() int64) (reset func()) { - current := now - reset = func() { now = current } - now = f - return reset -} - -// TestSetNow tests if setNow function changes now function -// correctly and if its reset function resets the original function. -func TestSetNow(t *testing.T) { - // set the current function after the test finishes - defer func(f func() int64) { now = f }(now) - - // expected value for the unchanged function - var original int64 = 1 - // expected value for the changed function - var changed int64 = 2 - - // define the original (unchanged) functions - now = func() int64 { - return original - } - - // get the time - got := now() - - // test if got variable is set correctly - if got != original { - t.Errorf("got now value %v, want %v", got, original) - } - - // set the new function - reset := setNow(func() int64 { - return changed - }) - - // get the time - got = now() - - // test if got variable is set correctly to changed value - if got != changed { - t.Errorf("got hook value %v, want %v", got, changed) - } - - // set the function to the original one - reset() - - // get the time - got = now() - - // test if got variable is set correctly to original value - if got != original { - t.Errorf("got hook value %v, want %v", got, original) - } -} diff --git a/swarm/storage/localstore/mode_get.go b/swarm/storage/localstore/mode_get.go deleted file mode 100644 index 3a69f6e9d4e2..000000000000 --- a/swarm/storage/localstore/mode_get.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/syndtr/goleveldb/leveldb" -) - -// ModeGet enumerates different Getter modes. -type ModeGet int - -// Getter modes. -const ( - // ModeGetRequest: when accessed for retrieval - ModeGetRequest ModeGet = iota - // ModeGetSync: when accessed for syncing or proof of custody request - ModeGetSync -) - -// Getter provides Get method to retrieve Chunks -// from database. -type Getter struct { - db *DB - mode ModeGet -} - -// NewGetter returns a new Getter on database -// with a specific Mode. -func (db *DB) NewGetter(mode ModeGet) *Getter { - return &Getter{ - mode: mode, - db: db, - } -} - -// Get returns a chunk from the database. If the chunk is -// not found storage.ErrChunkNotFound will be returned. -// All required indexes will be updated required by the -// Getter Mode. -func (g *Getter) Get(addr storage.Address) (chunk storage.Chunk, err error) { - out, err := g.db.get(g.mode, addr) - if err != nil { - if err == leveldb.ErrNotFound { - return nil, storage.ErrChunkNotFound - } - return nil, err - } - return storage.NewChunk(out.Address, out.Data), nil -} - -// get returns Item from the retrieval index -// and updates other indexes. -func (db *DB) get(mode ModeGet, addr storage.Address) (out shed.Item, err error) { - item := addressToItem(addr) - - out, err = db.retrievalDataIndex.Get(item) - if err != nil { - return out, err - } - switch mode { - // update the access timestamp and gc index - case ModeGetRequest: - if db.updateGCSem != nil { - // wait before creating new goroutines - // if updateGCSem buffer id full - db.updateGCSem <- struct{}{} - } - db.updateGCWG.Add(1) - go func() { - defer db.updateGCWG.Done() - if db.updateGCSem != nil { - // free a spot in updateGCSem buffer - // for a new goroutine - defer func() { <-db.updateGCSem }() - } - err := db.updateGC(out) - if err != nil { - log.Error("localstore update gc", "err", err) - } - // if gc update hook is defined, call it - if testHookUpdateGC != nil { - testHookUpdateGC() - } - }() - - // no updates to indexes - case ModeGetSync: - default: - return out, ErrInvalidMode - } - return out, nil -} - -// updateGC updates garbage collection index for -// a single item. Provided item is expected to have -// only Address and Data fields with non zero values, -// which is ensured by the get function. -func (db *DB) updateGC(item shed.Item) (err error) { - unlock, err := db.lockAddr(item.Address) - if err != nil { - return err - } - defer unlock() - - batch := new(leveldb.Batch) - - // update accessTimeStamp in retrieve, gc - - i, err := db.retrievalAccessIndex.Get(item) - switch err { - case nil: - item.AccessTimestamp = i.AccessTimestamp - case leveldb.ErrNotFound: - // no chunk accesses - default: - return err - } - if item.AccessTimestamp == 0 { - // chunk is not yet synced - // do not add it to the gc index - return nil - } - // delete current entry from the gc index - db.gcIndex.DeleteInBatch(batch, item) - // update access timestamp - item.AccessTimestamp = now() - // update retrieve access index - db.retrievalAccessIndex.PutInBatch(batch, item) - // add new entry to gc index - db.gcIndex.PutInBatch(batch, item) - - return db.shed.WriteBatch(batch) -} - -// testHookUpdateGC is a hook that can provide -// information when a garbage collection index is updated. -var testHookUpdateGC func() diff --git a/swarm/storage/localstore/mode_get_test.go b/swarm/storage/localstore/mode_get_test.go deleted file mode 100644 index 6615a3b8896e..000000000000 --- a/swarm/storage/localstore/mode_get_test.go +++ /dev/null @@ -1,237 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "testing" - "time" -) - -// TestModeGetRequest validates ModeGetRequest index values on the provided DB. -func TestModeGetRequest(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploadTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return uploadTimestamp - })() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - requester := db.NewGetter(ModeGetRequest) - - // set update gc test hook to signal when - // update gc goroutine is done by sending to - // testHookUpdateGCChan channel, which is - // used to wait for garbage colletion index - // changes - testHookUpdateGCChan := make(chan struct{}) - defer setTestHookUpdateGC(func() { - testHookUpdateGCChan <- struct{}{} - })() - - t.Run("get unsynced", func(t *testing.T) { - got, err := requester.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - - if !bytes.Equal(got.Address(), chunk.Address()) { - t.Errorf("got chunk address %x, want %x", got.Address(), chunk.Address()) - } - - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Errorf("got chunk data %x, want %x", got.Data(), chunk.Data()) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, uploadTimestamp, 0)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 0)) - - t.Run("gc size", newIndexGCSizeTest(db)) - }) - - // set chunk to synced state - err = db.NewSetter(ModeSetSync).Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - t.Run("first get", func(t *testing.T) { - got, err := requester.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - - if !bytes.Equal(got.Address(), chunk.Address()) { - t.Errorf("got chunk address %x, want %x", got.Address(), chunk.Address()) - } - - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Errorf("got chunk data %x, want %x", got.Data(), chunk.Data()) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, uploadTimestamp, uploadTimestamp)) - - t.Run("gc index", newGCIndexTest(db, chunk, uploadTimestamp, uploadTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) - }) - - t.Run("second get", func(t *testing.T) { - accessTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return accessTimestamp - })() - - got, err := requester.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - - if !bytes.Equal(got.Address(), chunk.Address()) { - t.Errorf("got chunk address %x, want %x", got.Address(), chunk.Address()) - } - - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Errorf("got chunk data %x, want %x", got.Data(), chunk.Data()) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, uploadTimestamp, accessTimestamp)) - - t.Run("gc index", newGCIndexTest(db, chunk, uploadTimestamp, accessTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) - }) -} - -// TestModeGetSync validates ModeGetSync index values on the provided DB. -func TestModeGetSync(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploadTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return uploadTimestamp - })() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - got, err := db.NewGetter(ModeGetSync).Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(got.Address(), chunk.Address()) { - t.Errorf("got chunk address %x, want %x", got.Address(), chunk.Address()) - } - - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Errorf("got chunk data %x, want %x", got.Data(), chunk.Data()) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, uploadTimestamp, 0)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 0)) - - t.Run("gc size", newIndexGCSizeTest(db)) -} - -// setTestHookUpdateGC sets testHookUpdateGC and -// returns a function that will reset it to the -// value before the change. -func setTestHookUpdateGC(h func()) (reset func()) { - current := testHookUpdateGC - reset = func() { testHookUpdateGC = current } - testHookUpdateGC = h - return reset -} - -// TestSetTestHookUpdateGC tests if setTestHookUpdateGC changes -// testHookUpdateGC function correctly and if its reset function -// resets the original function. -func TestSetTestHookUpdateGC(t *testing.T) { - // Set the current function after the test finishes. - defer func(h func()) { testHookUpdateGC = h }(testHookUpdateGC) - - // expected value for the unchanged function - original := 1 - // expected value for the changed function - changed := 2 - - // this variable will be set with two different functions - var got int - - // define the original (unchanged) functions - testHookUpdateGC = func() { - got = original - } - - // set got variable - testHookUpdateGC() - - // test if got variable is set correctly - if got != original { - t.Errorf("got hook value %v, want %v", got, original) - } - - // set the new function - reset := setTestHookUpdateGC(func() { - got = changed - }) - - // set got variable - testHookUpdateGC() - - // test if got variable is set correctly to changed value - if got != changed { - t.Errorf("got hook value %v, want %v", got, changed) - } - - // set the function to the original one - reset() - - // set got variable - testHookUpdateGC() - - // test if got variable is set correctly to original value - if got != original { - t.Errorf("got hook value %v, want %v", got, original) - } -} diff --git a/swarm/storage/localstore/mode_put.go b/swarm/storage/localstore/mode_put.go deleted file mode 100644 index 1a5a3d1b10c9..000000000000 --- a/swarm/storage/localstore/mode_put.go +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/syndtr/goleveldb/leveldb" -) - -// ModePut enumerates different Putter modes. -type ModePut int - -// Putter modes. -const ( - // ModePutRequest: when a chunk is received as a result of retrieve request and delivery - ModePutRequest ModePut = iota - // ModePutSync: when a chunk is received via syncing - ModePutSync - // ModePutUpload: when a chunk is created by local upload - ModePutUpload -) - -// Putter provides Put method to store Chunks -// to database. -type Putter struct { - db *DB - mode ModePut -} - -// NewPutter returns a new Putter on database -// with a specific Mode. -func (db *DB) NewPutter(mode ModePut) *Putter { - return &Putter{ - mode: mode, - db: db, - } -} - -// Put stores the Chunk to database and depending -// on the Putter mode, it updates required indexes. -func (p *Putter) Put(ch storage.Chunk) (err error) { - return p.db.put(p.mode, chunkToItem(ch)) -} - -// put stores Item to database and updates other -// indexes. It acquires lockAddr to protect two calls -// of this function for the same address in parallel. -// Item fields Address and Data must not be -// with their nil values. -func (db *DB) put(mode ModePut, item shed.Item) (err error) { - // protect parallel updates - unlock, err := db.lockAddr(item.Address) - if err != nil { - return err - } - defer unlock() - - batch := new(leveldb.Batch) - - // variables that provide information for operations - // to be done after write batch function successfully executes - var gcSizeChange int64 // number to add or subtract from gcSize - var triggerPullFeed bool // signal pull feed subscriptions to iterate - var triggerPushFeed bool // signal push feed subscriptions to iterate - - switch mode { - case ModePutRequest: - // put to indexes: retrieve, gc; it does not enter the syncpool - - // check if the chunk already is in the database - // as gc index is updated - i, err := db.retrievalAccessIndex.Get(item) - switch err { - case nil: - item.AccessTimestamp = i.AccessTimestamp - case leveldb.ErrNotFound: - // no chunk accesses - default: - return err - } - i, err = db.retrievalDataIndex.Get(item) - switch err { - case nil: - item.StoreTimestamp = i.StoreTimestamp - case leveldb.ErrNotFound: - // no chunk accesses - default: - return err - } - if item.AccessTimestamp != 0 { - // delete current entry from the gc index - db.gcIndex.DeleteInBatch(batch, item) - gcSizeChange-- - } - if item.StoreTimestamp == 0 { - item.StoreTimestamp = now() - } - // update access timestamp - item.AccessTimestamp = now() - // update retrieve access index - db.retrievalAccessIndex.PutInBatch(batch, item) - // add new entry to gc index - db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) - gcSizeChange++ - - db.retrievalDataIndex.PutInBatch(batch, item) - - case ModePutUpload: - // put to indexes: retrieve, push, pull - - item.StoreTimestamp = now() - db.retrievalDataIndex.PutInBatch(batch, item) - db.pullIndex.PutInBatch(batch, item) - triggerPullFeed = true - db.pushIndex.PutInBatch(batch, item) - triggerPushFeed = true - - case ModePutSync: - // put to indexes: retrieve, pull - - item.StoreTimestamp = now() - db.retrievalDataIndex.PutInBatch(batch, item) - db.pullIndex.PutInBatch(batch, item) - triggerPullFeed = true - - default: - return ErrInvalidMode - } - - err = db.shed.WriteBatch(batch) - if err != nil { - return err - } - if gcSizeChange != 0 { - db.incGCSize(gcSizeChange) - } - if triggerPullFeed { - db.triggerPullSubscriptions(db.po(item.Address)) - } - if triggerPushFeed { - db.triggerPushSubscriptions() - } - return nil -} diff --git a/swarm/storage/localstore/mode_put_test.go b/swarm/storage/localstore/mode_put_test.go deleted file mode 100644 index ffe6a4cb4e55..000000000000 --- a/swarm/storage/localstore/mode_put_test.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TestModePutRequest validates ModePutRequest index values on the provided DB. -func TestModePutRequest(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - putter := db.NewPutter(ModePutRequest) - - chunk := generateRandomChunk() - - // keep the record when the chunk is stored - var storeTimestamp int64 - - t.Run("first put", func(t *testing.T) { - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - storeTimestamp = wantTimestamp - - err := putter.Put(chunk) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, wantTimestamp, wantTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) - }) - - t.Run("second put", func(t *testing.T) { - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - err := putter.Put(chunk) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, storeTimestamp, wantTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) - }) -} - -// TestModePutSync validates ModePutSync index values on the provided DB. -func TestModePutSync(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutSync).Put(chunk) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", newRetrieveIndexesTest(db, chunk, wantTimestamp, 0)) - - t.Run("pull index", newPullIndexTest(db, chunk, wantTimestamp, nil)) -} - -// TestModePutUpload validates ModePutUpload index values on the provided DB. -func TestModePutUpload(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", newRetrieveIndexesTest(db, chunk, wantTimestamp, 0)) - - t.Run("pull index", newPullIndexTest(db, chunk, wantTimestamp, nil)) - - t.Run("push index", newPushIndexTest(db, chunk, wantTimestamp, nil)) -} - -// TestModePutUpload_parallel uploads chunks in parallel -// and validates if all chunks can be retrieved with correct data. -func TestModePutUpload_parallel(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunkCount := 1000 - workerCount := 100 - - chunkChan := make(chan storage.Chunk) - errChan := make(chan error) - doneChan := make(chan struct{}) - defer close(doneChan) - - // start uploader workers - for i := 0; i < workerCount; i++ { - go func(i int) { - uploader := db.NewPutter(ModePutUpload) - for { - select { - case chunk, ok := <-chunkChan: - if !ok { - return - } - err := uploader.Put(chunk) - select { - case errChan <- err: - case <-doneChan: - } - case <-doneChan: - return - } - } - }(i) - } - - chunks := make([]storage.Chunk, 0) - var chunksMu sync.Mutex - - // send chunks to workers - go func() { - for i := 0; i < chunkCount; i++ { - chunk := generateRandomChunk() - select { - case chunkChan <- chunk: - case <-doneChan: - return - } - chunksMu.Lock() - chunks = append(chunks, chunk) - chunksMu.Unlock() - } - - close(chunkChan) - }() - - // validate every error from workers - for i := 0; i < chunkCount; i++ { - err := <-errChan - if err != nil { - t.Fatal(err) - } - } - - // get every chunk and validate its data - getter := db.NewGetter(ModeGetRequest) - - chunksMu.Lock() - defer chunksMu.Unlock() - for _, chunk := range chunks { - got, err := getter.Get(chunk.Address()) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(got.Data(), chunk.Data()) { - t.Fatalf("got chunk %s data %x, want %x", chunk.Address().Hex(), got.Data(), chunk.Data()) - } - } -} - -// BenchmarkPutUpload runs a series of benchmarks that upload -// a specific number of chunks in parallel. -// -// Measurements on MacBook Pro (Retina, 15-inch, Mid 2014) -// -// # go test -benchmem -run=none github.com/ethereum/go-ethereum/swarm/storage/localstore -bench BenchmarkPutUpload -v -// -// goos: darwin -// goarch: amd64 -// pkg: github.com/ethereum/go-ethereum/swarm/storage/localstore -// BenchmarkPutUpload/count_100_parallel_1-8 300 5107704 ns/op 2081461 B/op 2374 allocs/op -// BenchmarkPutUpload/count_100_parallel_2-8 300 5411742 ns/op 2081608 B/op 2364 allocs/op -// BenchmarkPutUpload/count_100_parallel_4-8 500 3704964 ns/op 2081696 B/op 2324 allocs/op -// BenchmarkPutUpload/count_100_parallel_8-8 500 2932663 ns/op 2082594 B/op 2295 allocs/op -// BenchmarkPutUpload/count_100_parallel_16-8 500 3117157 ns/op 2085438 B/op 2282 allocs/op -// BenchmarkPutUpload/count_100_parallel_32-8 500 3449122 ns/op 2089721 B/op 2286 allocs/op -// BenchmarkPutUpload/count_1000_parallel_1-8 20 79784470 ns/op 25211240 B/op 23225 allocs/op -// BenchmarkPutUpload/count_1000_parallel_2-8 20 75422164 ns/op 25210730 B/op 23187 allocs/op -// BenchmarkPutUpload/count_1000_parallel_4-8 20 70698378 ns/op 25206522 B/op 22692 allocs/op -// BenchmarkPutUpload/count_1000_parallel_8-8 20 71285528 ns/op 25213436 B/op 22345 allocs/op -// BenchmarkPutUpload/count_1000_parallel_16-8 20 71301826 ns/op 25205040 B/op 22090 allocs/op -// BenchmarkPutUpload/count_1000_parallel_32-8 30 57713506 ns/op 25219781 B/op 21848 allocs/op -// BenchmarkPutUpload/count_10000_parallel_1-8 2 656719345 ns/op 216792908 B/op 248940 allocs/op -// BenchmarkPutUpload/count_10000_parallel_2-8 2 646301962 ns/op 216730800 B/op 248270 allocs/op -// BenchmarkPutUpload/count_10000_parallel_4-8 2 532784228 ns/op 216667080 B/op 241910 allocs/op -// BenchmarkPutUpload/count_10000_parallel_8-8 3 494290188 ns/op 216297749 B/op 236247 allocs/op -// BenchmarkPutUpload/count_10000_parallel_16-8 3 483485315 ns/op 216060384 B/op 231090 allocs/op -// BenchmarkPutUpload/count_10000_parallel_32-8 3 434461294 ns/op 215371280 B/op 224800 allocs/op -// BenchmarkPutUpload/count_100000_parallel_1-8 1 22767894338 ns/op 2331372088 B/op 4049876 allocs/op -// BenchmarkPutUpload/count_100000_parallel_2-8 1 25347872677 ns/op 2344140160 B/op 4106763 allocs/op -// BenchmarkPutUpload/count_100000_parallel_4-8 1 23580460174 ns/op 2338582576 B/op 4027452 allocs/op -// BenchmarkPutUpload/count_100000_parallel_8-8 1 22197559193 ns/op 2321803496 B/op 3877553 allocs/op -// BenchmarkPutUpload/count_100000_parallel_16-8 1 22527046476 ns/op 2327854800 B/op 3885455 allocs/op -// BenchmarkPutUpload/count_100000_parallel_32-8 1 21332243613 ns/op 2299654568 B/op 3697181 allocs/op -// PASS -func BenchmarkPutUpload(b *testing.B) { - for _, count := range []int{ - 100, - 1000, - 10000, - 100000, - } { - for _, maxParallelUploads := range []int{ - 1, - 2, - 4, - 8, - 16, - 32, - } { - name := fmt.Sprintf("count %v parallel %v", count, maxParallelUploads) - b.Run(name, func(b *testing.B) { - for n := 0; n < b.N; n++ { - benchmarkPutUpload(b, nil, count, maxParallelUploads) - } - }) - } - } -} - -// benchmarkPutUpload runs a benchmark by uploading a specific number -// of chunks with specified max parallel uploads. -func benchmarkPutUpload(b *testing.B, o *Options, count, maxParallelUploads int) { - b.StopTimer() - db, cleanupFunc := newTestDB(b, o) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - chunks := make([]storage.Chunk, count) - for i := 0; i < count; i++ { - chunks[i] = generateFakeRandomChunk() - } - errs := make(chan error) - b.StartTimer() - - go func() { - sem := make(chan struct{}, maxParallelUploads) - for i := 0; i < count; i++ { - sem <- struct{}{} - - go func(i int) { - defer func() { <-sem }() - - errs <- uploader.Put(chunks[i]) - }(i) - } - }() - - for i := 0; i < count; i++ { - err := <-errs - if err != nil { - b.Fatal(err) - } - } -} diff --git a/swarm/storage/localstore/mode_set.go b/swarm/storage/localstore/mode_set.go deleted file mode 100644 index a522f4447c92..000000000000 --- a/swarm/storage/localstore/mode_set.go +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/syndtr/goleveldb/leveldb" -) - -// ModeSet enumerates different Setter modes. -type ModeSet int - -// Setter modes. -const ( - // ModeSetAccess: when an update request is received for a chunk or chunk is retrieved for delivery - ModeSetAccess ModeSet = iota - // ModeSetSync: when push sync receipt is received - ModeSetSync - // modeSetRemove: when GC-d - // unexported as no external packages should remove chunks from database - modeSetRemove -) - -// Setter sets the state of a particular -// Chunk in database by changing indexes. -type Setter struct { - db *DB - mode ModeSet -} - -// NewSetter returns a new Setter on database -// with a specific Mode. -func (db *DB) NewSetter(mode ModeSet) *Setter { - return &Setter{ - mode: mode, - db: db, - } -} - -// Set updates database indexes for a specific -// chunk represented by the address. -func (s *Setter) Set(addr storage.Address) (err error) { - return s.db.set(s.mode, addr) -} - -// set updates database indexes for a specific -// chunk represented by the address. -// It acquires lockAddr to protect two calls -// of this function for the same address in parallel. -func (db *DB) set(mode ModeSet, addr storage.Address) (err error) { - // protect parallel updates - unlock, err := db.lockAddr(addr) - if err != nil { - return err - } - defer unlock() - - batch := new(leveldb.Batch) - - // variables that provide information for operations - // to be done after write batch function successfully executes - var gcSizeChange int64 // number to add or subtract from gcSize - var triggerPullFeed bool // signal pull feed subscriptions to iterate - - item := addressToItem(addr) - - switch mode { - case ModeSetAccess: - // add to pull, insert to gc - - // need to get access timestamp here as it is not - // provided by the access function, and it is not - // a property of a chunk provided to Accessor.Put. - - i, err := db.retrievalDataIndex.Get(item) - switch err { - case nil: - item.StoreTimestamp = i.StoreTimestamp - case leveldb.ErrNotFound: - db.pushIndex.DeleteInBatch(batch, item) - item.StoreTimestamp = now() - default: - return err - } - - i, err = db.retrievalAccessIndex.Get(item) - switch err { - case nil: - item.AccessTimestamp = i.AccessTimestamp - db.gcIndex.DeleteInBatch(batch, item) - gcSizeChange-- - case leveldb.ErrNotFound: - // the chunk is not accessed before - default: - return err - } - item.AccessTimestamp = now() - db.retrievalAccessIndex.PutInBatch(batch, item) - db.pullIndex.PutInBatch(batch, item) - triggerPullFeed = true - db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) - gcSizeChange++ - - case ModeSetSync: - // delete from push, insert to gc - - // need to get access timestamp here as it is not - // provided by the access function, and it is not - // a property of a chunk provided to Accessor.Put. - i, err := db.retrievalDataIndex.Get(item) - if err != nil { - if err == leveldb.ErrNotFound { - // chunk is not found, - // no need to update gc index - // just delete from the push index - // if it is there - db.pushIndex.DeleteInBatch(batch, item) - return nil - } - return err - } - item.StoreTimestamp = i.StoreTimestamp - - i, err = db.retrievalAccessIndex.Get(item) - switch err { - case nil: - item.AccessTimestamp = i.AccessTimestamp - db.gcIndex.DeleteInBatch(batch, item) - gcSizeChange-- - case leveldb.ErrNotFound: - // the chunk is not accessed before - default: - return err - } - item.AccessTimestamp = now() - db.retrievalAccessIndex.PutInBatch(batch, item) - db.pushIndex.DeleteInBatch(batch, item) - db.gcIndex.PutInBatch(batch, item) - db.gcUncountedHashesIndex.PutInBatch(batch, item) - gcSizeChange++ - - case modeSetRemove: - // delete from retrieve, pull, gc - - // need to get access timestamp here as it is not - // provided by the access function, and it is not - // a property of a chunk provided to Accessor.Put. - - i, err := db.retrievalAccessIndex.Get(item) - switch err { - case nil: - item.AccessTimestamp = i.AccessTimestamp - case leveldb.ErrNotFound: - default: - return err - } - i, err = db.retrievalDataIndex.Get(item) - if err != nil { - return err - } - item.StoreTimestamp = i.StoreTimestamp - - db.retrievalDataIndex.DeleteInBatch(batch, item) - db.retrievalAccessIndex.DeleteInBatch(batch, item) - db.pullIndex.DeleteInBatch(batch, item) - db.gcIndex.DeleteInBatch(batch, item) - db.gcUncountedHashesIndex.DeleteInBatch(batch, item) - // a check is needed for decrementing gcSize - // as delete is not reporting if the key/value pair - // is deleted or not - if _, err := db.gcIndex.Get(item); err == nil { - gcSizeChange = -1 - } - - default: - return ErrInvalidMode - } - - err = db.shed.WriteBatch(batch) - if err != nil { - return err - } - if gcSizeChange != 0 { - db.incGCSize(gcSizeChange) - } - if triggerPullFeed { - db.triggerPullSubscriptions(db.po(item.Address)) - } - return nil -} diff --git a/swarm/storage/localstore/mode_set_test.go b/swarm/storage/localstore/mode_set_test.go deleted file mode 100644 index 94cd0a3e2c9d..000000000000 --- a/swarm/storage/localstore/mode_set_test.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "testing" - "time" - - "github.com/syndtr/goleveldb/leveldb" -) - -// TestModeSetAccess validates ModeSetAccess index values on the provided DB. -func TestModeSetAccess(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunk := generateRandomChunk() - - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - err := db.NewSetter(ModeSetAccess).Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - t.Run("pull index", newPullIndexTest(db, chunk, wantTimestamp, nil)) - - t.Run("pull index count", newItemsCountTest(db.pullIndex, 1)) - - t.Run("gc index", newGCIndexTest(db, chunk, wantTimestamp, wantTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) -} - -// TestModeSetSync validates ModeSetSync index values on the provided DB. -func TestModeSetSync(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunk := generateRandomChunk() - - wantTimestamp := time.Now().UTC().UnixNano() - defer setNow(func() (t int64) { - return wantTimestamp - })() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - err = db.NewSetter(ModeSetSync).Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", newRetrieveIndexesTestWithAccess(db, chunk, wantTimestamp, wantTimestamp)) - - t.Run("push index", newPushIndexTest(db, chunk, wantTimestamp, leveldb.ErrNotFound)) - - t.Run("gc index", newGCIndexTest(db, chunk, wantTimestamp, wantTimestamp)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 1)) - - t.Run("gc size", newIndexGCSizeTest(db)) -} - -// TestModeSetRemove validates ModeSetRemove index values on the provided DB. -func TestModeSetRemove(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - chunk := generateRandomChunk() - - err := db.NewPutter(ModePutUpload).Put(chunk) - if err != nil { - t.Fatal(err) - } - - err = db.NewSetter(modeSetRemove).Set(chunk.Address()) - if err != nil { - t.Fatal(err) - } - - t.Run("retrieve indexes", func(t *testing.T) { - wantErr := leveldb.ErrNotFound - _, err := db.retrievalDataIndex.Get(addressToItem(chunk.Address())) - if err != wantErr { - t.Errorf("got error %v, want %v", err, wantErr) - } - t.Run("retrieve data index count", newItemsCountTest(db.retrievalDataIndex, 0)) - - // access index should not be set - _, err = db.retrievalAccessIndex.Get(addressToItem(chunk.Address())) - if err != wantErr { - t.Errorf("got error %v, want %v", err, wantErr) - } - t.Run("retrieve access index count", newItemsCountTest(db.retrievalAccessIndex, 0)) - }) - - t.Run("pull index", newPullIndexTest(db, chunk, 0, leveldb.ErrNotFound)) - - t.Run("pull index count", newItemsCountTest(db.pullIndex, 0)) - - t.Run("gc index count", newItemsCountTest(db.gcIndex, 0)) - - t.Run("gc size", newIndexGCSizeTest(db)) - -} diff --git a/swarm/storage/localstore/retrieval_index_test.go b/swarm/storage/localstore/retrieval_index_test.go deleted file mode 100644 index 9f5b452c5cdb..000000000000 --- a/swarm/storage/localstore/retrieval_index_test.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "strconv" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// BenchmarkRetrievalIndexes uploads a number of chunks in order to measure -// total time of updating their retrieval indexes by setting them -// to synced state and requesting them. -// -// This benchmark takes significant amount of time. -// -// Measurements on MacBook Pro (Retina, 15-inch, Mid 2014) show -// that two separated indexes perform better. -// -// # go test -benchmem -run=none github.com/ethereum/go-ethereum/swarm/storage/localstore -bench BenchmarkRetrievalIndexes -v -// goos: darwin -// goarch: amd64 -// pkg: github.com/ethereum/go-ethereum/swarm/storage/localstore -// BenchmarkRetrievalIndexes/1000-8 20 75556686 ns/op 19033493 B/op 84500 allocs/op -// BenchmarkRetrievalIndexes/10000-8 1 1079084922 ns/op 382792064 B/op 1429644 allocs/op -// BenchmarkRetrievalIndexes/100000-8 1 16891305737 ns/op 2629165304 B/op 12465019 allocs/op -// PASS -func BenchmarkRetrievalIndexes(b *testing.B) { - for _, count := range []int{ - 1000, - 10000, - 100000, - } { - b.Run(strconv.Itoa(count)+"-split", func(b *testing.B) { - for n := 0; n < b.N; n++ { - benchmarkRetrievalIndexes(b, nil, count) - } - }) - } -} - -// benchmarkRetrievalIndexes is used in BenchmarkRetrievalIndexes -// to do benchmarks with a specific number of chunks and different -// database options. -func benchmarkRetrievalIndexes(b *testing.B, o *Options, count int) { - b.StopTimer() - db, cleanupFunc := newTestDB(b, o) - defer cleanupFunc() - uploader := db.NewPutter(ModePutUpload) - syncer := db.NewSetter(ModeSetSync) - requester := db.NewGetter(ModeGetRequest) - addrs := make([]storage.Address, count) - for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() - err := uploader.Put(chunk) - if err != nil { - b.Fatal(err) - } - addrs[i] = chunk.Address() - } - // set update gc test hook to signal when - // update gc goroutine is done by sending to - // testHookUpdateGCChan channel, which is - // used to wait for gc index updates to be - // included in the benchmark time - testHookUpdateGCChan := make(chan struct{}) - defer setTestHookUpdateGC(func() { - testHookUpdateGCChan <- struct{}{} - })() - b.StartTimer() - - for i := 0; i < count; i++ { - err := syncer.Set(addrs[i]) - if err != nil { - b.Fatal(err) - } - - _, err = requester.Get(addrs[i]) - if err != nil { - b.Fatal(err) - } - // wait for update gc goroutine to be done - <-testHookUpdateGCChan - } -} - -// BenchmarkUpload compares uploading speed for different -// retrieval indexes and various number of chunks. -// -// Measurements on MacBook Pro (Retina, 15-inch, Mid 2014). -// -// go test -benchmem -run=none github.com/ethereum/go-ethereum/swarm/storage/localstore -bench BenchmarkUpload -v -// goos: darwin -// goarch: amd64 -// pkg: github.com/ethereum/go-ethereum/swarm/storage/localstore -// BenchmarkUpload/1000-8 20 59437463 ns/op 25205193 B/op 23208 allocs/op -// BenchmarkUpload/10000-8 2 580646362 ns/op 216532932 B/op 248090 allocs/op -// BenchmarkUpload/100000-8 1 22373390892 ns/op 2323055312 B/op 3995903 allocs/op -// PASS -func BenchmarkUpload(b *testing.B) { - for _, count := range []int{ - 1000, - 10000, - 100000, - } { - b.Run(strconv.Itoa(count), func(b *testing.B) { - for n := 0; n < b.N; n++ { - benchmarkUpload(b, nil, count) - } - }) - } -} - -// benchmarkUpload is used in BenchmarkUpload -// to do benchmarks with a specific number of chunks and different -// database options. -func benchmarkUpload(b *testing.B, o *Options, count int) { - b.StopTimer() - db, cleanupFunc := newTestDB(b, o) - defer cleanupFunc() - uploader := db.NewPutter(ModePutUpload) - chunks := make([]storage.Chunk, count) - for i := 0; i < count; i++ { - chunk := generateFakeRandomChunk() - chunks[i] = chunk - } - b.StartTimer() - - for i := 0; i < count; i++ { - err := uploader.Put(chunks[i]) - if err != nil { - b.Fatal(err) - } - } -} diff --git a/swarm/storage/localstore/subscription_pull.go b/swarm/storage/localstore/subscription_pull.go deleted file mode 100644 index a18f0915d938..000000000000 --- a/swarm/storage/localstore/subscription_pull.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "context" - "errors" - "fmt" - "sync" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// SubscribePull returns a channel that provides chunk addresses and stored times from pull syncing index. -// Pull syncing index can be only subscribed to a particular proximity order bin. If since -// is not nil, the iteration will start from the first item stored after that timestamp. If until is not nil, -// only chunks stored up to this timestamp will be send to the channel, and the returned channel will be -// closed. The since-until interval is open on the left and closed on the right (since,until]. Returned stop -// function will terminate current and further iterations without errors, and also close the returned channel. -// Make sure that you check the second returned parameter from the channel to stop iteration when its value -// is false. -func (db *DB) SubscribePull(ctx context.Context, bin uint8, since, until *ChunkDescriptor) (c <-chan ChunkDescriptor, stop func()) { - chunkDescriptors := make(chan ChunkDescriptor) - trigger := make(chan struct{}, 1) - - db.pullTriggersMu.Lock() - if _, ok := db.pullTriggers[bin]; !ok { - db.pullTriggers[bin] = make([]chan struct{}, 0) - } - db.pullTriggers[bin] = append(db.pullTriggers[bin], trigger) - db.pullTriggersMu.Unlock() - - // send signal for the initial iteration - trigger <- struct{}{} - - stopChan := make(chan struct{}) - var stopChanOnce sync.Once - - // used to provide information from the iterator to - // stop subscription when until chunk descriptor is reached - var errStopSubscription = errors.New("stop subscription") - - go func() { - // close the returned ChunkDescriptor channel at the end to - // signal that the subscription is done - defer close(chunkDescriptors) - // sinceItem is the Item from which the next iteration - // should start. The first iteration starts from the first Item. - var sinceItem *shed.Item - if since != nil { - sinceItem = &shed.Item{ - Address: since.Address, - StoreTimestamp: since.StoreTimestamp, - } - } - for { - select { - case <-trigger: - // iterate until: - // - last index Item is reached - // - subscription stop is called - // - context is done - err := db.pullIndex.Iterate(func(item shed.Item) (stop bool, err error) { - select { - case chunkDescriptors <- ChunkDescriptor{ - Address: item.Address, - StoreTimestamp: item.StoreTimestamp, - }: - // until chunk descriptor is sent - // break the iteration - if until != nil && - (item.StoreTimestamp >= until.StoreTimestamp || - bytes.Equal(item.Address, until.Address)) { - return true, errStopSubscription - } - // set next iteration start item - // when its chunk is successfully sent to channel - sinceItem = &item - return false, nil - case <-stopChan: - // gracefully stop the iteration - // on stop - return true, nil - case <-db.close: - // gracefully stop the iteration - // on database close - return true, nil - case <-ctx.Done(): - return true, ctx.Err() - } - }, &shed.IterateOptions{ - StartFrom: sinceItem, - // sinceItem was sent as the last Address in the previous - // iterator call, skip it in this one - SkipStartFromItem: true, - Prefix: []byte{bin}, - }) - if err != nil { - if err == errStopSubscription { - // stop subscription without any errors - // if until is reached - return - } - log.Error("localstore pull subscription iteration", "bin", bin, "since", since, "until", until, "err", err) - return - } - case <-stopChan: - // terminate the subscription - // on stop - return - case <-db.close: - // terminate the subscription - // on database close - return - case <-ctx.Done(): - err := ctx.Err() - if err != nil { - log.Error("localstore pull subscription", "bin", bin, "since", since, "until", until, "err", err) - } - return - } - } - }() - - stop = func() { - stopChanOnce.Do(func() { - close(stopChan) - }) - - db.pullTriggersMu.Lock() - defer db.pullTriggersMu.Unlock() - - for i, t := range db.pullTriggers[bin] { - if t == trigger { - db.pullTriggers[bin] = append(db.pullTriggers[bin][:i], db.pullTriggers[bin][i+1:]...) - break - } - } - } - - return chunkDescriptors, stop -} - -// ChunkDescriptor holds information required for Pull syncing. This struct -// is provided by subscribing to pull index. -type ChunkDescriptor struct { - Address storage.Address - StoreTimestamp int64 -} - -func (c *ChunkDescriptor) String() string { - if c == nil { - return "none" - } - return fmt.Sprintf("%s stored at %v", c.Address.Hex(), c.StoreTimestamp) -} - -// triggerPullSubscriptions is used internally for starting iterations -// on Pull subscriptions for a particular bin. When new item with address -// that is in particular bin for DB's baseKey is added to pull index -// this function should be called. -func (db *DB) triggerPullSubscriptions(bin uint8) { - db.pullTriggersMu.RLock() - triggers, ok := db.pullTriggers[bin] - db.pullTriggersMu.RUnlock() - if !ok { - return - } - - for _, t := range triggers { - select { - case t <- struct{}{}: - default: - } - } -} diff --git a/swarm/storage/localstore/subscription_pull_test.go b/swarm/storage/localstore/subscription_pull_test.go deleted file mode 100644 index 5c99e0dec285..000000000000 --- a/swarm/storage/localstore/subscription_pull_test.go +++ /dev/null @@ -1,478 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "context" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TestDB_SubscribePull uploads some chunks before and after -// pull syncing subscription is created and validates if -// all addresses are received in the right order -// for expected proximity order bins. -func TestDB_SubscribePull(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make(map[uint8][]storage.Address) - var addrsMu sync.Mutex - var wantedChunksCount int - - // prepopulate database with some chunks - // before the subscription - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 10) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { - ch, stop := db.SubscribePull(ctx, bin, nil, nil) - defer stop() - - // receive and validate addresses from the subscription - go readPullSubscriptionBin(ctx, bin, ch, addrs, &addrsMu, errChan) - } - - // upload some chunks just after subscribe - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 5) - - time.Sleep(200 * time.Millisecond) - - // upload some chunks after some short time - // to ensure that subscription will include them - // in a dynamic environment - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 3) - - checkErrChan(ctx, t, errChan, wantedChunksCount) -} - -// TestDB_SubscribePull_multiple uploads chunks before and after -// multiple pull syncing subscriptions are created and -// validates if all addresses are received in the right order -// for expected proximity order bins. -func TestDB_SubscribePull_multiple(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make(map[uint8][]storage.Address) - var addrsMu sync.Mutex - var wantedChunksCount int - - // prepopulate database with some chunks - // before the subscription - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 10) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - subsCount := 10 - - // start a number of subscriptions - // that all of them will write every address error to errChan - for j := 0; j < subsCount; j++ { - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { - ch, stop := db.SubscribePull(ctx, bin, nil, nil) - defer stop() - - // receive and validate addresses from the subscription - go readPullSubscriptionBin(ctx, bin, ch, addrs, &addrsMu, errChan) - } - } - - // upload some chunks just after subscribe - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 5) - - time.Sleep(200 * time.Millisecond) - - // upload some chunks after some short time - // to ensure that subscription will include them - // in a dynamic environment - uploadRandomChunksBin(t, db, uploader, addrs, &addrsMu, &wantedChunksCount, 3) - - checkErrChan(ctx, t, errChan, wantedChunksCount*subsCount) -} - -// TestDB_SubscribePull_since uploads chunks before and after -// pull syncing subscriptions are created with a since argument -// and validates if all expected addresses are received in the -// right order for expected proximity order bins. -func TestDB_SubscribePull_since(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make(map[uint8][]storage.Address) - var addrsMu sync.Mutex - var wantedChunksCount int - - lastTimestamp := time.Now().UTC().UnixNano() - var lastTimestampMu sync.RWMutex - defer setNow(func() (t int64) { - lastTimestampMu.Lock() - defer lastTimestampMu.Unlock() - lastTimestamp++ - return lastTimestamp - })() - - uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { - last = make(map[uint8]ChunkDescriptor) - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - bin := db.po(chunk.Address()) - - addrsMu.Lock() - if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) - } - if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) - wantedChunksCount++ - } - addrsMu.Unlock() - - lastTimestampMu.RLock() - storeTimestamp := lastTimestamp - lastTimestampMu.RUnlock() - - last[bin] = ChunkDescriptor{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - } - } - return last - } - - // prepopulate database with some chunks - // before the subscription - last := uploadRandomChunks(30, false) - - uploadRandomChunks(25, true) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { - var since *ChunkDescriptor - if c, ok := last[bin]; ok { - since = &c - } - ch, stop := db.SubscribePull(ctx, bin, since, nil) - defer stop() - - // receive and validate addresses from the subscription - go readPullSubscriptionBin(ctx, bin, ch, addrs, &addrsMu, errChan) - - } - - // upload some chunks just after subscribe - uploadRandomChunks(15, true) - - checkErrChan(ctx, t, errChan, wantedChunksCount) -} - -// TestDB_SubscribePull_until uploads chunks before and after -// pull syncing subscriptions are created with an until argument -// and validates if all expected addresses are received in the -// right order for expected proximity order bins. -func TestDB_SubscribePull_until(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make(map[uint8][]storage.Address) - var addrsMu sync.Mutex - var wantedChunksCount int - - lastTimestamp := time.Now().UTC().UnixNano() - var lastTimestampMu sync.RWMutex - defer setNow(func() (t int64) { - lastTimestampMu.Lock() - defer lastTimestampMu.Unlock() - lastTimestamp++ - return lastTimestamp - })() - - uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { - last = make(map[uint8]ChunkDescriptor) - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - bin := db.po(chunk.Address()) - - addrsMu.Lock() - if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) - } - if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) - wantedChunksCount++ - } - addrsMu.Unlock() - - lastTimestampMu.RLock() - storeTimestamp := lastTimestamp - lastTimestampMu.RUnlock() - - last[bin] = ChunkDescriptor{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - } - } - return last - } - - // prepopulate database with some chunks - // before the subscription - last := uploadRandomChunks(30, true) - - uploadRandomChunks(25, false) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { - until, ok := last[bin] - if !ok { - continue - } - ch, stop := db.SubscribePull(ctx, bin, nil, &until) - defer stop() - - // receive and validate addresses from the subscription - go readPullSubscriptionBin(ctx, bin, ch, addrs, &addrsMu, errChan) - } - - // upload some chunks just after subscribe - uploadRandomChunks(15, false) - - checkErrChan(ctx, t, errChan, wantedChunksCount) -} - -// TestDB_SubscribePull_sinceAndUntil uploads chunks before and -// after pull syncing subscriptions are created with since -// and until arguments, and validates if all expected addresses -// are received in the right order for expected proximity order bins. -func TestDB_SubscribePull_sinceAndUntil(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make(map[uint8][]storage.Address) - var addrsMu sync.Mutex - var wantedChunksCount int - - lastTimestamp := time.Now().UTC().UnixNano() - var lastTimestampMu sync.RWMutex - defer setNow(func() (t int64) { - lastTimestampMu.Lock() - defer lastTimestampMu.Unlock() - lastTimestamp++ - return lastTimestamp - })() - - uploadRandomChunks := func(count int, wanted bool) (last map[uint8]ChunkDescriptor) { - last = make(map[uint8]ChunkDescriptor) - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - bin := db.po(chunk.Address()) - - addrsMu.Lock() - if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) - } - if wanted { - addrs[bin] = append(addrs[bin], chunk.Address()) - wantedChunksCount++ - } - addrsMu.Unlock() - - lastTimestampMu.RLock() - storeTimestamp := lastTimestamp - lastTimestampMu.RUnlock() - - last[bin] = ChunkDescriptor{ - Address: chunk.Address(), - StoreTimestamp: storeTimestamp, - } - } - return last - } - - // all chunks from upload1 are not expected - // as upload1 chunk is used as since for subscriptions - upload1 := uploadRandomChunks(100, false) - - // all chunks from upload2 are expected - // as upload2 chunk is used as until for subscriptions - upload2 := uploadRandomChunks(100, true) - - // upload some chunks before subscribe but after - // wanted chunks - uploadRandomChunks(8, false) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - for bin := uint8(0); bin <= uint8(storage.MaxPO); bin++ { - var since *ChunkDescriptor - if c, ok := upload1[bin]; ok { - since = &c - } - until, ok := upload2[bin] - if !ok { - // no chunks un this bin uploaded in the upload2 - // skip this bin from testing - continue - } - ch, stop := db.SubscribePull(ctx, bin, since, &until) - defer stop() - - // receive and validate addresses from the subscription - go readPullSubscriptionBin(ctx, bin, ch, addrs, &addrsMu, errChan) - } - - // upload some chunks just after subscribe - uploadRandomChunks(15, false) - - checkErrChan(ctx, t, errChan, wantedChunksCount) -} - -// uploadRandomChunksBin uploads random chunks to database and adds them to -// the map of addresses ber bin. -func uploadRandomChunksBin(t *testing.T, db *DB, uploader *Putter, addrs map[uint8][]storage.Address, addrsMu *sync.Mutex, wantedChunksCount *int, count int) { - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - addrsMu.Lock() - bin := db.po(chunk.Address()) - if _, ok := addrs[bin]; !ok { - addrs[bin] = make([]storage.Address, 0) - } - addrs[bin] = append(addrs[bin], chunk.Address()) - addrsMu.Unlock() - - *wantedChunksCount++ - } -} - -// readPullSubscriptionBin is a helper function that reads all ChunkDescriptors from a channel and -// sends error to errChan, even if it is nil, to count the number of ChunkDescriptors -// returned by the channel. -func readPullSubscriptionBin(ctx context.Context, bin uint8, ch <-chan ChunkDescriptor, addrs map[uint8][]storage.Address, addrsMu *sync.Mutex, errChan chan error) { - var i int // address index - for { - select { - case got, ok := <-ch: - if !ok { - return - } - addrsMu.Lock() - if i+1 > len(addrs[bin]) { - errChan <- fmt.Errorf("got more chunk addresses %v, then expected %v, for bin %v", i+1, len(addrs[bin]), bin) - } - want := addrs[bin][i] - addrsMu.Unlock() - var err error - if !bytes.Equal(got.Address, want) { - err = fmt.Errorf("got chunk address %v in bin %v %s, want %s", i, bin, got.Address.Hex(), want) - } - i++ - // send one and only one error per received address - errChan <- err - case <-ctx.Done(): - return - } - } -} - -// checkErrChan expects the number of wantedChunksCount errors from errChan -// and calls t.Error for the ones that are not nil. -func checkErrChan(ctx context.Context, t *testing.T, errChan chan error, wantedChunksCount int) { - t.Helper() - - for i := 0; i < wantedChunksCount; i++ { - select { - case err := <-errChan: - if err != nil { - t.Error(err) - } - case <-ctx.Done(): - t.Fatal(ctx.Err()) - } - } -} diff --git a/swarm/storage/localstore/subscription_push.go b/swarm/storage/localstore/subscription_push.go deleted file mode 100644 index b13f293998f6..000000000000 --- a/swarm/storage/localstore/subscription_push.go +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "context" - "sync" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/swarm/shed" - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// SubscribePush returns a channel that provides storage chunks with ordering from push syncing index. -// Returned stop function will terminate current and further iterations, and also it will close -// the returned channel without any errors. Make sure that you check the second returned parameter -// from the channel to stop iteration when its value is false. -func (db *DB) SubscribePush(ctx context.Context) (c <-chan storage.Chunk, stop func()) { - chunks := make(chan storage.Chunk) - trigger := make(chan struct{}, 1) - - db.pushTriggersMu.Lock() - db.pushTriggers = append(db.pushTriggers, trigger) - db.pushTriggersMu.Unlock() - - // send signal for the initial iteration - trigger <- struct{}{} - - stopChan := make(chan struct{}) - var stopChanOnce sync.Once - - go func() { - // close the returned chunkInfo channel at the end to - // signal that the subscription is done - defer close(chunks) - // sinceItem is the Item from which the next iteration - // should start. The first iteration starts from the first Item. - var sinceItem *shed.Item - for { - select { - case <-trigger: - // iterate until: - // - last index Item is reached - // - subscription stop is called - // - context is done - err := db.pushIndex.Iterate(func(item shed.Item) (stop bool, err error) { - // get chunk data - dataItem, err := db.retrievalDataIndex.Get(item) - if err != nil { - return true, err - } - - select { - case chunks <- storage.NewChunk(dataItem.Address, dataItem.Data): - // set next iteration start item - // when its chunk is successfully sent to channel - sinceItem = &item - return false, nil - case <-stopChan: - // gracefully stop the iteration - // on stop - return true, nil - case <-db.close: - // gracefully stop the iteration - // on database close - return true, nil - case <-ctx.Done(): - return true, ctx.Err() - } - }, &shed.IterateOptions{ - StartFrom: sinceItem, - // sinceItem was sent as the last Address in the previous - // iterator call, skip it in this one - SkipStartFromItem: true, - }) - if err != nil { - log.Error("localstore push subscription iteration", "err", err) - return - } - case <-stopChan: - // terminate the subscription - // on stop - return - case <-db.close: - // terminate the subscription - // on database close - return - case <-ctx.Done(): - err := ctx.Err() - if err != nil { - log.Error("localstore push subscription", "err", err) - } - return - } - } - }() - - stop = func() { - stopChanOnce.Do(func() { - close(stopChan) - }) - - db.pushTriggersMu.Lock() - defer db.pushTriggersMu.Unlock() - - for i, t := range db.pushTriggers { - if t == trigger { - db.pushTriggers = append(db.pushTriggers[:i], db.pushTriggers[i+1:]...) - break - } - } - } - - return chunks, stop -} - -// triggerPushSubscriptions is used internally for starting iterations -// on Push subscriptions. Whenever new item is added to the push index, -// this function should be called. -func (db *DB) triggerPushSubscriptions() { - db.pushTriggersMu.RLock() - triggers := db.pushTriggers - db.pushTriggersMu.RUnlock() - - for _, t := range triggers { - select { - case t <- struct{}{}: - default: - } - } -} diff --git a/swarm/storage/localstore/subscription_push_test.go b/swarm/storage/localstore/subscription_push_test.go deleted file mode 100644 index 73e7c25f72de..000000000000 --- a/swarm/storage/localstore/subscription_push_test.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2019 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package localstore - -import ( - "bytes" - "context" - "fmt" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/swarm/storage" -) - -// TestDB_SubscribePush uploads some chunks before and after -// push syncing subscription is created and validates if -// all addresses are received in the right order. -func TestDB_SubscribePush(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - chunks := make([]storage.Chunk, 0) - var chunksMu sync.Mutex - - uploadRandomChunks := func(count int) { - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - chunksMu.Lock() - chunks = append(chunks, chunk) - chunksMu.Unlock() - } - } - - // prepopulate database with some chunks - // before the subscription - uploadRandomChunks(10) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - ch, stop := db.SubscribePush(ctx) - defer stop() - - // receive and validate addresses from the subscription - go func() { - var i int // address index - for { - select { - case got, ok := <-ch: - if !ok { - return - } - chunksMu.Lock() - want := chunks[i] - chunksMu.Unlock() - var err error - if !bytes.Equal(got.Data(), want.Data()) { - err = fmt.Errorf("got chunk %v data %x, want %x", i, got.Data(), want.Data()) - } - if !bytes.Equal(got.Address(), want.Address()) { - err = fmt.Errorf("got chunk %v address %s, want %s", i, got.Address().Hex(), want.Address().Hex()) - } - i++ - // send one and only one error per received address - errChan <- err - case <-ctx.Done(): - return - } - } - }() - - // upload some chunks just after subscribe - uploadRandomChunks(5) - - time.Sleep(200 * time.Millisecond) - - // upload some chunks after some short time - // to ensure that subscription will include them - // in a dynamic environment - uploadRandomChunks(3) - - checkErrChan(ctx, t, errChan, len(chunks)) -} - -// TestDB_SubscribePush_multiple uploads chunks before and after -// multiple push syncing subscriptions are created and -// validates if all addresses are received in the right order. -func TestDB_SubscribePush_multiple(t *testing.T) { - db, cleanupFunc := newTestDB(t, nil) - defer cleanupFunc() - - uploader := db.NewPutter(ModePutUpload) - - addrs := make([]storage.Address, 0) - var addrsMu sync.Mutex - - uploadRandomChunks := func(count int) { - for i := 0; i < count; i++ { - chunk := generateRandomChunk() - - err := uploader.Put(chunk) - if err != nil { - t.Fatal(err) - } - - addrsMu.Lock() - addrs = append(addrs, chunk.Address()) - addrsMu.Unlock() - } - } - - // prepopulate database with some chunks - // before the subscription - uploadRandomChunks(10) - - // set a timeout on subscription - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - // collect all errors from validating addresses, even nil ones - // to validate the number of addresses received by the subscription - errChan := make(chan error) - - subsCount := 10 - - // start a number of subscriptions - // that all of them will write every addresses error to errChan - for j := 0; j < subsCount; j++ { - ch, stop := db.SubscribePush(ctx) - defer stop() - - // receive and validate addresses from the subscription - go func(j int) { - var i int // address index - for { - select { - case got, ok := <-ch: - if !ok { - return - } - addrsMu.Lock() - want := addrs[i] - addrsMu.Unlock() - var err error - if !bytes.Equal(got.Address(), want) { - err = fmt.Errorf("got chunk %v address on subscription %v %s, want %s", i, j, got, want) - } - i++ - // send one and only one error per received address - errChan <- err - case <-ctx.Done(): - return - } - } - }(j) - } - - // upload some chunks just after subscribe - uploadRandomChunks(5) - - time.Sleep(200 * time.Millisecond) - - // upload some chunks after some short time - // to ensure that subscription will include them - // in a dynamic environment - uploadRandomChunks(3) - - // number of addresses received by all subscriptions - wantedChunksCount := len(addrs) * subsCount - - checkErrChan(ctx, t, errChan, wantedChunksCount) -} diff --git a/swarm/storage/localstore_test.go b/swarm/storage/localstore_test.go deleted file mode 100644 index ec69951c4fa1..000000000000 --- a/swarm/storage/localstore_test.go +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "io/ioutil" - "os" - "testing" - "time" - - ch "github.com/ethereum/go-ethereum/swarm/chunk" -) - -var ( - hashfunc = MakeHashFunc(DefaultHash) -) - -// tests that the content address validator correctly checks the data -// tests that feed update chunks are passed through content address validator -// the test checking the resouce update validator internal correctness is found in storage/feeds/handler_test.go -func TestValidator(t *testing.T) { - // set up localstore - datadir, err := ioutil.TempDir("", "storage-testvalidator") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(datadir) - - params := NewDefaultLocalStoreParams() - params.Init(datadir) - store, err := NewLocalStore(params, nil) - if err != nil { - t.Fatal(err) - } - - // check puts with no validators, both succeed - chunks := GenerateRandomChunks(259, 2) - goodChunk := chunks[0] - badChunk := chunks[1] - copy(badChunk.Data(), goodChunk.Data()) - - errs := putChunks(store, goodChunk, badChunk) - if errs[0] != nil { - t.Fatalf("expected no error on good content address chunk in spite of no validation, but got: %s", err) - } - if errs[1] != nil { - t.Fatalf("expected no error on bad content address chunk in spite of no validation, but got: %s", err) - } - - // add content address validator and check puts - // bad should fail, good should pass - store.Validators = append(store.Validators, NewContentAddressValidator(hashfunc)) - chunks = GenerateRandomChunks(ch.DefaultSize, 2) - goodChunk = chunks[0] - badChunk = chunks[1] - copy(badChunk.Data(), goodChunk.Data()) - - errs = putChunks(store, goodChunk, badChunk) - if errs[0] != nil { - t.Fatalf("expected no error on good content address chunk with content address validator only, but got: %s", err) - } - if errs[1] == nil { - t.Fatal("expected error on bad content address chunk with content address validator only, but got nil") - } - - // append a validator that always denies - // bad should fail, good should pass, - var negV boolTestValidator - store.Validators = append(store.Validators, negV) - - chunks = GenerateRandomChunks(ch.DefaultSize, 2) - goodChunk = chunks[0] - badChunk = chunks[1] - copy(badChunk.Data(), goodChunk.Data()) - - errs = putChunks(store, goodChunk, badChunk) - if errs[0] != nil { - t.Fatalf("expected no error on good content address chunk with content address validator only, but got: %s", err) - } - if errs[1] == nil { - t.Fatal("expected error on bad content address chunk with content address validator only, but got nil") - } - - // append a validator that always approves - // all shall pass - var posV boolTestValidator = true - store.Validators = append(store.Validators, posV) - - chunks = GenerateRandomChunks(ch.DefaultSize, 2) - goodChunk = chunks[0] - badChunk = chunks[1] - copy(badChunk.Data(), goodChunk.Data()) - - errs = putChunks(store, goodChunk, badChunk) - if errs[0] != nil { - t.Fatalf("expected no error on good content address chunk with content address validator only, but got: %s", err) - } - if errs[1] != nil { - t.Fatalf("expected no error on bad content address chunk in spite of no validation, but got: %s", err) - } - -} - -type boolTestValidator bool - -func (self boolTestValidator) Validate(chunk Chunk) bool { - return bool(self) -} - -// putChunks adds chunks to localstore -// It waits for receive on the stored channel -// It logs but does not fail on delivery error -func putChunks(store *LocalStore, chunks ...Chunk) []error { - i := 0 - f := func(n int64) Chunk { - chunk := chunks[i] - i++ - return chunk - } - _, errs := put(store, len(chunks), f) - return errs -} - -func put(store *LocalStore, n int, f func(i int64) Chunk) (hs []Address, errs []error) { - for i := int64(0); i < int64(n); i++ { - chunk := f(ch.DefaultSize) - err := store.Put(context.TODO(), chunk) - errs = append(errs, err) - hs = append(hs, chunk.Address()) - } - return hs, errs -} - -// TestGetFrequentlyAccessedChunkWontGetGarbageCollected tests that the most -// frequently accessed chunk is not garbage collected from LDBStore, i.e., -// from disk when we are at the capacity and garbage collector runs. For that -// we start putting random chunks into the DB while continuously accessing the -// chunk we care about then check if we can still retrieve it from disk. -func TestGetFrequentlyAccessedChunkWontGetGarbageCollected(t *testing.T) { - ldbCap := defaultGCRatio - store, cleanup := setupLocalStore(t, ldbCap) - defer cleanup() - - var chunks []Chunk - for i := 0; i < ldbCap; i++ { - chunks = append(chunks, GenerateRandomChunk(ch.DefaultSize)) - } - - mostAccessed := chunks[0].Address() - for _, chunk := range chunks { - if err := store.Put(context.Background(), chunk); err != nil { - t.Fatal(err) - } - - if _, err := store.Get(context.Background(), mostAccessed); err != nil { - t.Fatal(err) - } - // Add time for MarkAccessed() to be able to finish in a separate Goroutine - time.Sleep(1 * time.Millisecond) - } - - store.DbStore.collectGarbage() - if _, err := store.DbStore.Get(context.Background(), mostAccessed); err != nil { - t.Logf("most frequntly accessed chunk not found on disk (key: %v)", mostAccessed) - t.Fatal(err) - } - -} - -func setupLocalStore(t *testing.T, ldbCap int) (ls *LocalStore, cleanup func()) { - t.Helper() - - var err error - datadir, err := ioutil.TempDir("", "storage") - if err != nil { - t.Fatal(err) - } - - params := &LocalStoreParams{ - StoreParams: NewStoreParams(uint64(ldbCap), uint(ldbCap), nil, nil), - } - params.Init(datadir) - - store, err := NewLocalStore(params, nil) - if err != nil { - _ = os.RemoveAll(datadir) - t.Fatal(err) - } - - cleanup = func() { - store.Close() - _ = os.RemoveAll(datadir) - } - - return store, cleanup -} - -func TestHas(t *testing.T) { - ldbCap := defaultGCRatio - store, cleanup := setupLocalStore(t, ldbCap) - defer cleanup() - - nonStoredAddr := GenerateRandomChunk(128).Address() - - has := store.Has(context.Background(), nonStoredAddr) - if has { - t.Fatal("Expected Has() to return false, but returned true!") - } - - storeChunks := GenerateRandomChunks(128, 3) - for _, ch := range storeChunks { - err := store.Put(context.Background(), ch) - if err != nil { - t.Fatalf("Expected store to store chunk, but it failed: %v", err) - } - - has := store.Has(context.Background(), ch.Address()) - if !has { - t.Fatal("Expected Has() to return true, but returned false!") - } - } - - //let's be paranoic and test again that the non-existent chunk returns false - has = store.Has(context.Background(), nonStoredAddr) - if has { - t.Fatal("Expected Has() to return false, but returned true!") - } - -} diff --git a/swarm/storage/memstore.go b/swarm/storage/memstore.go deleted file mode 100644 index 611ac3bc51da..000000000000 --- a/swarm/storage/memstore.go +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// memory storage layer for the package blockhash - -package storage - -import ( - "context" - - lru "github.com/hashicorp/golang-lru" -) - -type MemStore struct { - cache *lru.Cache - disabled bool -} - -//NewMemStore is instantiating a MemStore cache keeping all frequently requested -//chunks in the `cache` LRU cache. -func NewMemStore(params *StoreParams, _ *LDBStore) (m *MemStore) { - if params.CacheCapacity == 0 { - return &MemStore{ - disabled: true, - } - } - - c, err := lru.New(int(params.CacheCapacity)) - if err != nil { - panic(err) - } - - return &MemStore{ - cache: c, - } -} - -// Has needed to implement SyncChunkStore -func (m *MemStore) Has(_ context.Context, addr Address) bool { - return m.cache.Contains(addr) -} - -func (m *MemStore) Get(_ context.Context, addr Address) (Chunk, error) { - if m.disabled { - return nil, ErrChunkNotFound - } - - c, ok := m.cache.Get(string(addr)) - if !ok { - return nil, ErrChunkNotFound - } - return c.(Chunk), nil -} - -func (m *MemStore) Put(_ context.Context, c Chunk) error { - if m.disabled { - return nil - } - - m.cache.Add(string(c.Address()), c) - return nil -} - -func (m *MemStore) setCapacity(n int) { - if n <= 0 { - m.disabled = true - } else { - c, err := lru.New(n) - if err != nil { - panic(err) - } - - *m = MemStore{ - cache: c, - } - } -} - -func (s *MemStore) Close() {} diff --git a/swarm/storage/memstore_test.go b/swarm/storage/memstore_test.go deleted file mode 100644 index 8aaf486a7bf4..000000000000 --- a/swarm/storage/memstore_test.go +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "testing" - - "github.com/ethereum/go-ethereum/swarm/log" -) - -func newTestMemStore() *MemStore { - storeparams := NewDefaultStoreParams() - return NewMemStore(storeparams, nil) -} - -func testMemStoreRandom(n int, t *testing.T) { - m := newTestMemStore() - defer m.Close() - testStoreRandom(m, n, t) -} - -func testMemStoreCorrect(n int, t *testing.T) { - m := newTestMemStore() - defer m.Close() - testStoreCorrect(m, n, t) -} - -func TestMemStoreRandom_1(t *testing.T) { - testMemStoreRandom(1, t) -} - -func TestMemStoreCorrect_1(t *testing.T) { - testMemStoreCorrect(1, t) -} - -func TestMemStoreRandom_1k(t *testing.T) { - testMemStoreRandom(1000, t) -} - -func TestMemStoreCorrect_1k(t *testing.T) { - testMemStoreCorrect(100, t) -} - -func TestMemStoreNotFound(t *testing.T) { - m := newTestMemStore() - defer m.Close() - - _, err := m.Get(context.TODO(), ZeroAddr) - if err != ErrChunkNotFound { - t.Errorf("Expected ErrChunkNotFound, got %v", err) - } -} - -func benchmarkMemStorePut(n int, b *testing.B) { - m := newTestMemStore() - defer m.Close() - benchmarkStorePut(m, n, b) -} - -func benchmarkMemStoreGet(n int, b *testing.B) { - m := newTestMemStore() - defer m.Close() - benchmarkStoreGet(m, n, b) -} - -func BenchmarkMemStorePut_500(b *testing.B) { - benchmarkMemStorePut(500, b) -} - -func BenchmarkMemStoreGet_500(b *testing.B) { - benchmarkMemStoreGet(500, b) -} - -func TestMemStoreAndLDBStore(t *testing.T) { - ldb, cleanup := newLDBStore(t) - ldb.setCapacity(4000) - defer cleanup() - - cacheCap := 200 - memStore := NewMemStore(NewStoreParams(4000, 200, nil, nil), nil) - - tests := []struct { - n int // number of chunks to push to memStore - chunkSize int64 // size of chunk (by default in Swarm - 4096) - }{ - { - n: 1, - chunkSize: 4096, - }, - { - n: 101, - chunkSize: 4096, - }, - { - n: 501, - chunkSize: 4096, - }, - { - n: 1100, - chunkSize: 4096, - }, - } - - for i, tt := range tests { - log.Info("running test", "idx", i, "tt", tt) - var chunks []Chunk - - for i := 0; i < tt.n; i++ { - c := GenerateRandomChunk(tt.chunkSize) - chunks = append(chunks, c) - } - - for i := 0; i < tt.n; i++ { - err := ldb.Put(context.TODO(), chunks[i]) - if err != nil { - t.Fatal(err) - } - err = memStore.Put(context.TODO(), chunks[i]) - if err != nil { - t.Fatal(err) - } - - if got := memStore.cache.Len(); got > cacheCap { - t.Fatalf("expected to get cache capacity less than %v, but got %v", cacheCap, got) - } - - } - - for i := 0; i < tt.n; i++ { - _, err := memStore.Get(context.TODO(), chunks[i].Address()) - if err != nil { - if err == ErrChunkNotFound { - _, err := ldb.Get(context.TODO(), chunks[i].Address()) - if err != nil { - t.Fatalf("couldn't get chunk %v from ldb, got error: %v", i, err) - } - } else { - t.Fatalf("got error from memstore: %v", err) - } - } - } - } -} diff --git a/swarm/storage/mock/db/db.go b/swarm/storage/mock/db/db.go deleted file mode 100644 index 73ae199e8b0c..000000000000 --- a/swarm/storage/mock/db/db.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package db implements a mock store that keeps all chunk data in LevelDB database. -package db - -import ( - "archive/tar" - "bytes" - "encoding/json" - "io" - "io/ioutil" - - "github.com/syndtr/goleveldb/leveldb" - "github.com/syndtr/goleveldb/leveldb/util" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -// GlobalStore contains the LevelDB database that is storing -// chunk data for all swarm nodes. -// Closing the GlobalStore with Close method is required to -// release resources used by the database. -type GlobalStore struct { - db *leveldb.DB -} - -// NewGlobalStore creates a new instance of GlobalStore. -func NewGlobalStore(path string) (s *GlobalStore, err error) { - db, err := leveldb.OpenFile(path, nil) - if err != nil { - return nil, err - } - return &GlobalStore{ - db: db, - }, nil -} - -// Close releases the resources used by the underlying LevelDB. -func (s *GlobalStore) Close() error { - return s.db.Close() -} - -// NewNodeStore returns a new instance of NodeStore that retrieves and stores -// chunk data only for a node with address addr. -func (s *GlobalStore) NewNodeStore(addr common.Address) *mock.NodeStore { - return mock.NewNodeStore(addr, s) -} - -// Get returns chunk data if the chunk with key exists for node -// on address addr. -func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err error) { - has, err := s.db.Has(nodeDBKey(addr, key), nil) - if err != nil { - return nil, mock.ErrNotFound - } - if !has { - return nil, mock.ErrNotFound - } - data, err = s.db.Get(dataDBKey(key), nil) - if err == leveldb.ErrNotFound { - err = mock.ErrNotFound - } - return -} - -// Put saves the chunk data for node with address addr. -func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error { - batch := new(leveldb.Batch) - batch.Put(nodeDBKey(addr, key), nil) - batch.Put(dataDBKey(key), data) - return s.db.Write(batch, nil) -} - -// Delete removes the chunk reference to node with address addr. -func (s *GlobalStore) Delete(addr common.Address, key []byte) error { - batch := new(leveldb.Batch) - batch.Delete(nodeDBKey(addr, key)) - return s.db.Write(batch, nil) -} - -// HasKey returns whether a node with addr contains the key. -func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { - has, err := s.db.Has(nodeDBKey(addr, key), nil) - if err != nil { - has = false - } - return has -} - -// Import reads tar archive from a reader that contains exported chunk data. -// It returns the number of chunks imported and an error. -func (s *GlobalStore) Import(r io.Reader) (n int, err error) { - tr := tar.NewReader(r) - - for { - hdr, err := tr.Next() - if err != nil { - if err == io.EOF { - break - } - return n, err - } - - data, err := ioutil.ReadAll(tr) - if err != nil { - return n, err - } - - var c mock.ExportedChunk - if err = json.Unmarshal(data, &c); err != nil { - return n, err - } - - batch := new(leveldb.Batch) - for _, addr := range c.Addrs { - batch.Put(nodeDBKeyHex(addr, hdr.Name), nil) - } - - batch.Put(dataDBKey(common.Hex2Bytes(hdr.Name)), c.Data) - if err = s.db.Write(batch, nil); err != nil { - return n, err - } - - n++ - } - return n, err -} - -// Export writes to a writer a tar archive with all chunk data from -// the store. It returns the number fo chunks exported and an error. -func (s *GlobalStore) Export(w io.Writer) (n int, err error) { - tw := tar.NewWriter(w) - defer tw.Close() - - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - encoder := json.NewEncoder(buf) - - iter := s.db.NewIterator(util.BytesPrefix(nodeKeyPrefix), nil) - defer iter.Release() - - var currentKey string - var addrs []common.Address - - saveChunk := func(hexKey string) error { - key := common.Hex2Bytes(hexKey) - - data, err := s.db.Get(dataDBKey(key), nil) - if err != nil { - return err - } - - buf.Reset() - if err = encoder.Encode(mock.ExportedChunk{ - Addrs: addrs, - Data: data, - }); err != nil { - return err - } - - d := buf.Bytes() - hdr := &tar.Header{ - Name: hexKey, - Mode: 0644, - Size: int64(len(d)), - } - if err := tw.WriteHeader(hdr); err != nil { - return err - } - if _, err := tw.Write(d); err != nil { - return err - } - n++ - return nil - } - - for iter.Next() { - k := bytes.TrimPrefix(iter.Key(), nodeKeyPrefix) - i := bytes.Index(k, []byte("-")) - if i < 0 { - continue - } - hexKey := string(k[:i]) - - if currentKey == "" { - currentKey = hexKey - } - - if hexKey != currentKey { - if err = saveChunk(currentKey); err != nil { - return n, err - } - - addrs = addrs[:0] - } - - currentKey = hexKey - addrs = append(addrs, common.BytesToAddress(k[i:])) - } - - if len(addrs) > 0 { - if err = saveChunk(currentKey); err != nil { - return n, err - } - } - - return n, err -} - -var ( - nodeKeyPrefix = []byte("node-") - dataKeyPrefix = []byte("data-") -) - -// nodeDBKey constructs a database key for key/node mappings. -func nodeDBKey(addr common.Address, key []byte) []byte { - return nodeDBKeyHex(addr, common.Bytes2Hex(key)) -} - -// nodeDBKeyHex constructs a database key for key/node mappings -// using the hexadecimal string representation of the key. -func nodeDBKeyHex(addr common.Address, hexKey string) []byte { - return append(append(nodeKeyPrefix, []byte(hexKey+"-")...), addr[:]...) -} - -// dataDBkey constructs a database key for key/data storage. -func dataDBKey(key []byte) []byte { - return append(dataKeyPrefix, key...) -} diff --git a/swarm/storage/mock/db/db_test.go b/swarm/storage/mock/db/db_test.go deleted file mode 100644 index 782faaf35c86..000000000000 --- a/swarm/storage/mock/db/db_test.go +++ /dev/null @@ -1,75 +0,0 @@ -// +build go1.8 -// -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package db - -import ( - "io/ioutil" - "os" - "testing" - - "github.com/ethereum/go-ethereum/swarm/storage/mock/test" -) - -// TestDBStore is running a test.MockStore tests -// using test.MockStore function. -func TestDBStore(t *testing.T) { - dir, err := ioutil.TempDir("", "mock_"+t.Name()) - if err != nil { - panic(err) - } - defer os.RemoveAll(dir) - - store, err := NewGlobalStore(dir) - if err != nil { - t.Fatal(err) - } - defer store.Close() - - test.MockStore(t, store, 100) -} - -// TestImportExport is running a test.ImportExport tests -// using test.MockStore function. -func TestImportExport(t *testing.T) { - dir1, err := ioutil.TempDir("", "mock_"+t.Name()+"_exporter") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir1) - - store1, err := NewGlobalStore(dir1) - if err != nil { - t.Fatal(err) - } - defer store1.Close() - - dir2, err := ioutil.TempDir("", "mock_"+t.Name()+"_importer") - if err != nil { - panic(err) - } - defer os.RemoveAll(dir2) - - store2, err := NewGlobalStore(dir2) - if err != nil { - t.Fatal(err) - } - defer store2.Close() - - test.ImportExport(t, store1, store2, 100) -} diff --git a/swarm/storage/mock/mem/mem.go b/swarm/storage/mock/mem/mem.go deleted file mode 100644 index 3a0a2beb8d50..000000000000 --- a/swarm/storage/mock/mem/mem.go +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package mem implements a mock store that keeps all chunk data in memory. -// While it can be used for testing on smaller scales, the main purpose of this -// package is to provide the simplest reference implementation of a mock store. -package mem - -import ( - "archive/tar" - "bytes" - "encoding/json" - "io" - "io/ioutil" - "sync" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -// GlobalStore stores all chunk data and also keys and node addresses relations. -// It implements mock.GlobalStore interface. -type GlobalStore struct { - nodes map[string]map[common.Address]struct{} - data map[string][]byte - mu sync.Mutex -} - -// NewGlobalStore creates a new instance of GlobalStore. -func NewGlobalStore() *GlobalStore { - return &GlobalStore{ - nodes: make(map[string]map[common.Address]struct{}), - data: make(map[string][]byte), - } -} - -// NewNodeStore returns a new instance of NodeStore that retrieves and stores -// chunk data only for a node with address addr. -func (s *GlobalStore) NewNodeStore(addr common.Address) *mock.NodeStore { - return mock.NewNodeStore(addr, s) -} - -// Get returns chunk data if the chunk with key exists for node -// on address addr. -func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err error) { - s.mu.Lock() - defer s.mu.Unlock() - - if _, ok := s.nodes[string(key)][addr]; !ok { - return nil, mock.ErrNotFound - } - - data, ok := s.data[string(key)] - if !ok { - return nil, mock.ErrNotFound - } - return data, nil -} - -// Put saves the chunk data for node with address addr. -func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error { - s.mu.Lock() - defer s.mu.Unlock() - - if _, ok := s.nodes[string(key)]; !ok { - s.nodes[string(key)] = make(map[common.Address]struct{}) - } - s.nodes[string(key)][addr] = struct{}{} - s.data[string(key)] = data - return nil -} - -// Delete removes the chunk data for node with address addr. -func (s *GlobalStore) Delete(addr common.Address, key []byte) error { - s.mu.Lock() - defer s.mu.Unlock() - - var count int - if _, ok := s.nodes[string(key)]; ok { - delete(s.nodes[string(key)], addr) - count = len(s.nodes[string(key)]) - } - if count == 0 { - delete(s.data, string(key)) - } - return nil -} - -// HasKey returns whether a node with addr contains the key. -func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { - s.mu.Lock() - defer s.mu.Unlock() - - _, ok := s.nodes[string(key)][addr] - return ok -} - -// Import reads tar archive from a reader that contains exported chunk data. -// It returns the number of chunks imported and an error. -func (s *GlobalStore) Import(r io.Reader) (n int, err error) { - s.mu.Lock() - defer s.mu.Unlock() - - tr := tar.NewReader(r) - - for { - hdr, err := tr.Next() - if err != nil { - if err == io.EOF { - break - } - return n, err - } - - data, err := ioutil.ReadAll(tr) - if err != nil { - return n, err - } - - var c mock.ExportedChunk - if err = json.Unmarshal(data, &c); err != nil { - return n, err - } - - addrs := make(map[common.Address]struct{}) - for _, a := range c.Addrs { - addrs[a] = struct{}{} - } - - key := string(common.Hex2Bytes(hdr.Name)) - s.nodes[key] = addrs - s.data[key] = c.Data - n++ - } - return n, err -} - -// Export writes to a writer a tar archive with all chunk data from -// the store. It returns the number of chunks exported and an error. -func (s *GlobalStore) Export(w io.Writer) (n int, err error) { - s.mu.Lock() - defer s.mu.Unlock() - - tw := tar.NewWriter(w) - defer tw.Close() - - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - encoder := json.NewEncoder(buf) - for key, addrs := range s.nodes { - al := make([]common.Address, 0, len(addrs)) - for a := range addrs { - al = append(al, a) - } - - buf.Reset() - if err = encoder.Encode(mock.ExportedChunk{ - Addrs: al, - Data: s.data[key], - }); err != nil { - return n, err - } - - data := buf.Bytes() - hdr := &tar.Header{ - Name: common.Bytes2Hex([]byte(key)), - Mode: 0644, - Size: int64(len(data)), - } - if err := tw.WriteHeader(hdr); err != nil { - return n, err - } - if _, err := tw.Write(data); err != nil { - return n, err - } - n++ - } - return n, err -} diff --git a/swarm/storage/mock/mock.go b/swarm/storage/mock/mock.go deleted file mode 100644 index 626ba3fe1b67..000000000000 --- a/swarm/storage/mock/mock.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package mock defines types that are used by different implementations -// of mock storages. -// -// Implementations of mock storages are located in directories -// under this package: -// -// - db - LevelDB backend -// - mem - in memory map backend -// - rpc - RPC client that can connect to other backends -// -// Mock storages can implement Importer and Exporter interfaces -// for importing and exporting all chunk data that they contain. -// The exported file is a tar archive with all files named by -// hexadecimal representations of chunk keys and with content -// with JSON-encoded ExportedChunk structure. Exported format -// should be preserved across all mock store implementations. -package mock - -import ( - "errors" - "io" - - "github.com/ethereum/go-ethereum/common" -) - -// ErrNotFound indicates that the chunk is not found. -var ErrNotFound = errors.New("not found") - -// NodeStore holds the node address and a reference to the GlobalStore -// in order to access and store chunk data only for one node. -type NodeStore struct { - store GlobalStorer - addr common.Address -} - -// NewNodeStore creates a new instance of NodeStore that keeps -// chunk data using GlobalStorer with a provided address. -func NewNodeStore(addr common.Address, store GlobalStorer) *NodeStore { - return &NodeStore{ - store: store, - addr: addr, - } -} - -// Get returns chunk data for a key for a node that has the address -// provided on NodeStore initialization. -func (n *NodeStore) Get(key []byte) (data []byte, err error) { - return n.store.Get(n.addr, key) -} - -// Put saves chunk data for a key for a node that has the address -// provided on NodeStore initialization. -func (n *NodeStore) Put(key []byte, data []byte) error { - return n.store.Put(n.addr, key, data) -} - -// Delete removes chunk data for a key for a node that has the address -// provided on NodeStore initialization. -func (n *NodeStore) Delete(key []byte) error { - return n.store.Delete(n.addr, key) -} - -// GlobalStorer defines methods for mock db store -// that stores chunk data for all swarm nodes. -// It is used in tests to construct mock NodeStores -// for swarm nodes and to track and validate chunks. -type GlobalStorer interface { - Get(addr common.Address, key []byte) (data []byte, err error) - Put(addr common.Address, key []byte, data []byte) error - Delete(addr common.Address, key []byte) error - HasKey(addr common.Address, key []byte) bool - // NewNodeStore creates an instance of NodeStore - // to be used by a single swarm node with - // address addr. - NewNodeStore(addr common.Address) *NodeStore -} - -// Importer defines method for importing mock store data -// from an exported tar archive. -type Importer interface { - Import(r io.Reader) (n int, err error) -} - -// Exporter defines method for exporting mock store data -// to a tar archive. -type Exporter interface { - Export(w io.Writer) (n int, err error) -} - -// ExportedChunk is the structure that is saved in tar archive for -// each chunk as JSON-encoded bytes. -type ExportedChunk struct { - Data []byte `json:"d"` - Addrs []common.Address `json:"a"` -} diff --git a/swarm/storage/mock/rpc/rpc.go b/swarm/storage/mock/rpc/rpc.go deleted file mode 100644 index 8cd6c83a7a40..000000000000 --- a/swarm/storage/mock/rpc/rpc.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package rpc implements an RPC client that connect to a centralized mock store. -// Centralazied mock store can be any other mock store implementation that is -// registered to Ethereum RPC server under mockStore name. Methods that defines -// mock.GlobalStore are the same that are used by RPC. Example: -// -// server := rpc.NewServer() -// server.RegisterName("mockStore", mem.NewGlobalStore()) -package rpc - -import ( - "fmt" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -// GlobalStore is rpc.Client that connects to a centralized mock store. -// Closing GlobalStore instance is required to release RPC client resources. -type GlobalStore struct { - client *rpc.Client -} - -// NewGlobalStore creates a new instance of GlobalStore. -func NewGlobalStore(client *rpc.Client) *GlobalStore { - return &GlobalStore{ - client: client, - } -} - -// Close closes RPC client. -func (s *GlobalStore) Close() error { - s.client.Close() - return nil -} - -// NewNodeStore returns a new instance of NodeStore that retrieves and stores -// chunk data only for a node with address addr. -func (s *GlobalStore) NewNodeStore(addr common.Address) *mock.NodeStore { - return mock.NewNodeStore(addr, s) -} - -// Get calls a Get method to RPC server. -func (s *GlobalStore) Get(addr common.Address, key []byte) (data []byte, err error) { - err = s.client.Call(&data, "mockStore_get", addr, key) - if err != nil && err.Error() == "not found" { - // pass the mock package value of error instead an rpc error - return data, mock.ErrNotFound - } - return data, err -} - -// Put calls a Put method to RPC server. -func (s *GlobalStore) Put(addr common.Address, key []byte, data []byte) error { - err := s.client.Call(nil, "mockStore_put", addr, key, data) - return err -} - -// Delete calls a Delete method to RPC server. -func (s *GlobalStore) Delete(addr common.Address, key []byte) error { - err := s.client.Call(nil, "mockStore_delete", addr, key) - return err -} - -// HasKey calls a HasKey method to RPC server. -func (s *GlobalStore) HasKey(addr common.Address, key []byte) bool { - var has bool - if err := s.client.Call(&has, "mockStore_hasKey", addr, key); err != nil { - log.Error(fmt.Sprintf("mock store HasKey: addr %s, key %064x: %v", addr, key, err)) - return false - } - return has -} diff --git a/swarm/storage/mock/rpc/rpc_test.go b/swarm/storage/mock/rpc/rpc_test.go deleted file mode 100644 index f62340edecbf..000000000000 --- a/swarm/storage/mock/rpc/rpc_test.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package rpc - -import ( - "testing" - - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/storage/mock/mem" - "github.com/ethereum/go-ethereum/swarm/storage/mock/test" -) - -// TestDBStore is running test for a GlobalStore -// using test.MockStore function. -func TestRPCStore(t *testing.T) { - serverStore := mem.NewGlobalStore() - - server := rpc.NewServer() - if err := server.RegisterName("mockStore", serverStore); err != nil { - t.Fatal(err) - } - - store := NewGlobalStore(rpc.DialInProc(server)) - defer store.Close() - - test.MockStore(t, store, 30) -} diff --git a/swarm/storage/mock/test/test.go b/swarm/storage/mock/test/test.go deleted file mode 100644 index 69828b144f35..000000000000 --- a/swarm/storage/mock/test/test.go +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -// Package test provides functions that are used for testing -// GlobalStorer implementations. -package test - -import ( - "bytes" - "fmt" - "io" - "strconv" - "testing" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/mock" -) - -// MockStore creates NodeStore instances from provided GlobalStorer, -// each one with a unique address, stores different chunks on them -// and checks if they are retrievable or not on all nodes. -// Attribute n defines the number of NodeStores that will be created. -func MockStore(t *testing.T, globalStore mock.GlobalStorer, n int) { - t.Run("GlobalStore", func(t *testing.T) { - addrs := make([]common.Address, n) - for i := 0; i < n; i++ { - addrs[i] = common.HexToAddress(strconv.FormatInt(int64(i)+1, 16)) - } - - for i, addr := range addrs { - chunkAddr := storage.Address(append(addr[:], []byte(strconv.FormatInt(int64(i)+1, 16))...)) - data := []byte(strconv.FormatInt(int64(i)+1, 16)) - data = append(data, make([]byte, 4096-len(data))...) - globalStore.Put(addr, chunkAddr, data) - - for _, cAddr := range addrs { - cData, err := globalStore.Get(cAddr, chunkAddr) - if cAddr == addr { - if err != nil { - t.Fatalf("get data from store %s key %s: %v", cAddr.Hex(), chunkAddr.Hex(), err) - } - if !bytes.Equal(data, cData) { - t.Fatalf("data on store %s: expected %x, got %x", cAddr.Hex(), data, cData) - } - if !globalStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("expected key %s on global store for node %s, but it was not found", chunkAddr.Hex(), cAddr.Hex()) - } - } else { - if err != mock.ErrNotFound { - t.Fatalf("expected error from store %s: %v, got %v", cAddr.Hex(), mock.ErrNotFound, err) - } - if len(cData) > 0 { - t.Fatalf("data on store %s: expected nil, got %x", cAddr.Hex(), cData) - } - if globalStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("not expected key %s on global store for node %s, but it was found", chunkAddr.Hex(), cAddr.Hex()) - } - } - } - } - t.Run("delete", func(t *testing.T) { - chunkAddr := storage.Address([]byte("1234567890abcd")) - for _, addr := range addrs { - err := globalStore.Put(addr, chunkAddr, []byte("data")) - if err != nil { - t.Fatalf("put data to store %s key %s: %v", addr.Hex(), chunkAddr.Hex(), err) - } - } - firstNodeAddr := addrs[0] - if err := globalStore.Delete(firstNodeAddr, chunkAddr); err != nil { - t.Fatalf("delete from store %s key %s: %v", firstNodeAddr.Hex(), chunkAddr.Hex(), err) - } - for i, addr := range addrs { - _, err := globalStore.Get(addr, chunkAddr) - if i == 0 { - if err != mock.ErrNotFound { - t.Errorf("get data from store %s key %s: expected mock.ErrNotFound error, got %v", addr.Hex(), chunkAddr.Hex(), err) - } - } else { - if err != nil { - t.Errorf("get data from store %s key %s: %v", addr.Hex(), chunkAddr.Hex(), err) - } - } - } - }) - }) - - t.Run("NodeStore", func(t *testing.T) { - nodes := make(map[common.Address]*mock.NodeStore) - for i := 0; i < n; i++ { - addr := common.HexToAddress(strconv.FormatInt(int64(i)+1, 16)) - nodes[addr] = globalStore.NewNodeStore(addr) - } - - i := 0 - for addr, store := range nodes { - i++ - chunkAddr := storage.Address(append(addr[:], []byte(fmt.Sprintf("%x", i))...)) - data := []byte(strconv.FormatInt(int64(i)+1, 16)) - data = append(data, make([]byte, 4096-len(data))...) - store.Put(chunkAddr, data) - - for cAddr, cStore := range nodes { - cData, err := cStore.Get(chunkAddr) - if cAddr == addr { - if err != nil { - t.Fatalf("get data from store %s key %s: %v", cAddr.Hex(), chunkAddr.Hex(), err) - } - if !bytes.Equal(data, cData) { - t.Fatalf("data on store %s: expected %x, got %x", cAddr.Hex(), data, cData) - } - if !globalStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("expected key %s on global store for node %s, but it was not found", chunkAddr.Hex(), cAddr.Hex()) - } - } else { - if err != mock.ErrNotFound { - t.Fatalf("expected error from store %s: %v, got %v", cAddr.Hex(), mock.ErrNotFound, err) - } - if len(cData) > 0 { - t.Fatalf("data on store %s: expected nil, got %x", cAddr.Hex(), cData) - } - if globalStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("not expected key %s on global store for node %s, but it was found", chunkAddr.Hex(), cAddr.Hex()) - } - } - } - } - t.Run("delete", func(t *testing.T) { - chunkAddr := storage.Address([]byte("1234567890abcd")) - var chosenStore *mock.NodeStore - for addr, store := range nodes { - if chosenStore == nil { - chosenStore = store - } - err := store.Put(chunkAddr, []byte("data")) - if err != nil { - t.Fatalf("put data to store %s key %s: %v", addr.Hex(), chunkAddr.Hex(), err) - } - } - if err := chosenStore.Delete(chunkAddr); err != nil { - t.Fatalf("delete key %s: %v", chunkAddr.Hex(), err) - } - for addr, store := range nodes { - _, err := store.Get(chunkAddr) - if store == chosenStore { - if err != mock.ErrNotFound { - t.Errorf("get data from store %s key %s: expected mock.ErrNotFound error, got %v", addr.Hex(), chunkAddr.Hex(), err) - } - } else { - if err != nil { - t.Errorf("get data from store %s key %s: %v", addr.Hex(), chunkAddr.Hex(), err) - } - } - } - }) - }) -} - -// ImportExport saves chunks to the outStore, exports them to the tar archive, -// imports tar archive to the inStore and checks if all chunks are imported correctly. -func ImportExport(t *testing.T, outStore, inStore mock.GlobalStorer, n int) { - exporter, ok := outStore.(mock.Exporter) - if !ok { - t.Fatal("outStore does not implement mock.Exporter") - } - importer, ok := inStore.(mock.Importer) - if !ok { - t.Fatal("inStore does not implement mock.Importer") - } - addrs := make([]common.Address, n) - for i := 0; i < n; i++ { - addrs[i] = common.HexToAddress(strconv.FormatInt(int64(i)+1, 16)) - } - - for i, addr := range addrs { - chunkAddr := storage.Address(append(addr[:], []byte(strconv.FormatInt(int64(i)+1, 16))...)) - data := []byte(strconv.FormatInt(int64(i)+1, 16)) - data = append(data, make([]byte, 4096-len(data))...) - outStore.Put(addr, chunkAddr, data) - } - - r, w := io.Pipe() - defer r.Close() - - exportErrChan := make(chan error) - go func() { - defer w.Close() - - _, err := exporter.Export(w) - exportErrChan <- err - }() - - if _, err := importer.Import(r); err != nil { - t.Fatalf("import: %v", err) - } - - if err := <-exportErrChan; err != nil { - t.Fatalf("export: %v", err) - } - - for i, addr := range addrs { - chunkAddr := storage.Address(append(addr[:], []byte(strconv.FormatInt(int64(i)+1, 16))...)) - data := []byte(strconv.FormatInt(int64(i)+1, 16)) - data = append(data, make([]byte, 4096-len(data))...) - for _, cAddr := range addrs { - cData, err := inStore.Get(cAddr, chunkAddr) - if cAddr == addr { - if err != nil { - t.Fatalf("get data from store %s key %s: %v", cAddr.Hex(), chunkAddr.Hex(), err) - } - if !bytes.Equal(data, cData) { - t.Fatalf("data on store %s: expected %x, got %x", cAddr.Hex(), data, cData) - } - if !inStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("expected key %s on global store for node %s, but it was not found", chunkAddr.Hex(), cAddr.Hex()) - } - } else { - if err != mock.ErrNotFound { - t.Fatalf("expected error from store %s: %v, got %v", cAddr.Hex(), mock.ErrNotFound, err) - } - if len(cData) > 0 { - t.Fatalf("data on store %s: expected nil, got %x", cAddr.Hex(), cData) - } - if inStore.HasKey(cAddr, chunkAddr) { - t.Fatalf("not expected key %s on global store for node %s, but it was found", chunkAddr.Hex(), cAddr.Hex()) - } - } - } - } -} diff --git a/swarm/storage/netstore.go b/swarm/storage/netstore.go deleted file mode 100644 index 202af2bf58a9..000000000000 --- a/swarm/storage/netstore.go +++ /dev/null @@ -1,322 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "encoding/hex" - "fmt" - "sync" - "sync/atomic" - "time" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/swarm/log" - lru "github.com/hashicorp/golang-lru" -) - -type ( - NewNetFetcherFunc func(ctx context.Context, addr Address, peers *sync.Map) NetFetcher -) - -type NetFetcher interface { - Request(hopCount uint8) - Offer(source *enode.ID) -} - -// NetStore is an extension of local storage -// it implements the ChunkStore interface -// on request it initiates remote cloud retrieval using a fetcher -// fetchers are unique to a chunk and are stored in fetchers LRU memory cache -// fetchFuncFactory is a factory object to create a fetch function for a specific chunk address -type NetStore struct { - mu sync.Mutex - store SyncChunkStore - fetchers *lru.Cache - NewNetFetcherFunc NewNetFetcherFunc - closeC chan struct{} -} - -var fetcherTimeout = 2 * time.Minute // timeout to cancel the fetcher even if requests are coming in - -// NewNetStore creates a new NetStore object using the given local store. newFetchFunc is a -// constructor function that can create a fetch function for a specific chunk address. -func NewNetStore(store SyncChunkStore, nnf NewNetFetcherFunc) (*NetStore, error) { - fetchers, err := lru.New(defaultChunkRequestsCacheCapacity) - if err != nil { - return nil, err - } - return &NetStore{ - store: store, - fetchers: fetchers, - NewNetFetcherFunc: nnf, - closeC: make(chan struct{}), - }, nil -} - -// Put stores a chunk in localstore, and delivers to all requestor peers using the fetcher stored in -// the fetchers cache -func (n *NetStore) Put(ctx context.Context, ch Chunk) error { - n.mu.Lock() - defer n.mu.Unlock() - - // put to the chunk to the store, there should be no error - err := n.store.Put(ctx, ch) - if err != nil { - return err - } - - // if chunk is now put in the store, check if there was an active fetcher and call deliver on it - // (this delivers the chunk to requestors via the fetcher) - if f := n.getFetcher(ch.Address()); f != nil { - f.deliver(ctx, ch) - } - return nil -} - -// Get retrieves the chunk from the NetStore DPA synchronously. -// It calls NetStore.get, and if the chunk is not in local Storage -// it calls fetch with the request, which blocks until the chunk -// arrived or context is done -func (n *NetStore) Get(rctx context.Context, ref Address) (Chunk, error) { - chunk, fetch, err := n.get(rctx, ref) - if err != nil { - return nil, err - } - if chunk != nil { - return chunk, nil - } - return fetch(rctx) -} - -func (n *NetStore) BinIndex(po uint8) uint64 { - return n.store.BinIndex(po) -} - -func (n *NetStore) Iterator(from uint64, to uint64, po uint8, f func(Address, uint64) bool) error { - return n.store.Iterator(from, to, po, f) -} - -// FetchFunc returns nil if the store contains the given address. Otherwise it returns a wait function, -// which returns after the chunk is available or the context is done -func (n *NetStore) FetchFunc(ctx context.Context, ref Address) func(context.Context) error { - chunk, fetch, _ := n.get(ctx, ref) - if chunk != nil { - return nil - } - return func(ctx context.Context) error { - _, err := fetch(ctx) - return err - } -} - -// Close chunk store -func (n *NetStore) Close() { - close(n.closeC) - n.store.Close() - - wg := sync.WaitGroup{} - for _, key := range n.fetchers.Keys() { - if f, ok := n.fetchers.Get(key); ok { - if fetch, ok := f.(*fetcher); ok { - wg.Add(1) - go func(fetch *fetcher) { - defer wg.Done() - fetch.cancel() - - select { - case <-fetch.deliveredC: - case <-fetch.cancelledC: - } - }(fetch) - } - } - } - wg.Wait() -} - -// get attempts at retrieving the chunk from LocalStore -// If it is not found then using getOrCreateFetcher: -// 1. Either there is already a fetcher to retrieve it -// 2. A new fetcher is created and saved in the fetchers cache -// From here on, all Get will hit on this fetcher until the chunk is delivered -// or all fetcher contexts are done. -// It returns a chunk, a fetcher function and an error -// If chunk is nil, the returned fetch function needs to be called with a context to return the chunk. -func (n *NetStore) get(ctx context.Context, ref Address) (Chunk, func(context.Context) (Chunk, error), error) { - n.mu.Lock() - defer n.mu.Unlock() - - chunk, err := n.store.Get(ctx, ref) - if err != nil { - if err != ErrChunkNotFound { - log.Debug("Received error from LocalStore other than ErrNotFound", "err", err) - } - // The chunk is not available in the LocalStore, let's get the fetcher for it, or create a new one - // if it doesn't exist yet - f := n.getOrCreateFetcher(ctx, ref) - // If the caller needs the chunk, it has to use the returned fetch function to get it - return nil, f.Fetch, nil - } - - return chunk, nil, nil -} - -// Has is the storage layer entry point to query the underlying -// database to return if it has a chunk or not. -// Called from the DebugAPI -func (n *NetStore) Has(ctx context.Context, ref Address) bool { - return n.store.Has(ctx, ref) -} - -// getOrCreateFetcher attempts at retrieving an existing fetchers -// if none exists, creates one and saves it in the fetchers cache -// caller must hold the lock -func (n *NetStore) getOrCreateFetcher(ctx context.Context, ref Address) *fetcher { - if f := n.getFetcher(ref); f != nil { - return f - } - - // no fetcher for the given address, we have to create a new one - key := hex.EncodeToString(ref) - // create the context during which fetching is kept alive - cctx, cancel := context.WithTimeout(ctx, fetcherTimeout) - // destroy is called when all requests finish - destroy := func() { - // remove fetcher from fetchers - n.fetchers.Remove(key) - // stop fetcher by cancelling context called when - // all requests cancelled/timedout or chunk is delivered - cancel() - } - // peers always stores all the peers which have an active request for the chunk. It is shared - // between fetcher and the NewFetchFunc function. It is needed by the NewFetchFunc because - // the peers which requested the chunk should not be requested to deliver it. - peers := &sync.Map{} - - fetcher := newFetcher(ref, n.NewNetFetcherFunc(cctx, ref, peers), destroy, peers, n.closeC) - n.fetchers.Add(key, fetcher) - - return fetcher -} - -// getFetcher retrieves the fetcher for the given address from the fetchers cache if it exists, -// otherwise it returns nil -func (n *NetStore) getFetcher(ref Address) *fetcher { - key := hex.EncodeToString(ref) - f, ok := n.fetchers.Get(key) - if ok { - return f.(*fetcher) - } - return nil -} - -// RequestsCacheLen returns the current number of outgoing requests stored in the cache -func (n *NetStore) RequestsCacheLen() int { - return n.fetchers.Len() -} - -// One fetcher object is responsible to fetch one chunk for one address, and keep track of all the -// peers who have requested it and did not receive it yet. -type fetcher struct { - addr Address // address of chunk - chunk Chunk // fetcher can set the chunk on the fetcher - deliveredC chan struct{} // chan signalling chunk delivery to requests - cancelledC chan struct{} // chan signalling the fetcher has been cancelled (removed from fetchers in NetStore) - netFetcher NetFetcher // remote fetch function to be called with a request source taken from the context - cancel func() // cleanup function for the remote fetcher to call when all upstream contexts are called - peers *sync.Map // the peers which asked for the chunk - requestCnt int32 // number of requests on this chunk. If all the requests are done (delivered or context is done) the cancel function is called - deliverOnce *sync.Once // guarantees that we only close deliveredC once -} - -// newFetcher creates a new fetcher object for the fiven addr. fetch is the function which actually -// does the retrieval (in non-test cases this is coming from the network package). cancel function is -// called either -// 1. when the chunk has been fetched all peers have been either notified or their context has been done -// 2. the chunk has not been fetched but all context from all the requests has been done -// The peers map stores all the peers which have requested chunk. -func newFetcher(addr Address, nf NetFetcher, cancel func(), peers *sync.Map, closeC chan struct{}) *fetcher { - cancelOnce := &sync.Once{} // cancel should only be called once - return &fetcher{ - addr: addr, - deliveredC: make(chan struct{}), - deliverOnce: &sync.Once{}, - cancelledC: closeC, - netFetcher: nf, - cancel: func() { - cancelOnce.Do(func() { - cancel() - }) - }, - peers: peers, - } -} - -// Fetch fetches the chunk synchronously, it is called by NetStore.Get is the chunk is not available -// locally. -func (f *fetcher) Fetch(rctx context.Context) (Chunk, error) { - atomic.AddInt32(&f.requestCnt, 1) - defer func() { - // if all the requests are done the fetcher can be cancelled - if atomic.AddInt32(&f.requestCnt, -1) == 0 { - f.cancel() - } - }() - - // The peer asking for the chunk. Store in the shared peers map, but delete after the request - // has been delivered - peer := rctx.Value("peer") - if peer != nil { - f.peers.Store(peer, time.Now()) - defer f.peers.Delete(peer) - } - - // If there is a source in the context then it is an offer, otherwise a request - sourceIF := rctx.Value("source") - - hopCount, _ := rctx.Value("hopcount").(uint8) - - if sourceIF != nil { - var source enode.ID - if err := source.UnmarshalText([]byte(sourceIF.(string))); err != nil { - return nil, err - } - f.netFetcher.Offer(&source) - } else { - f.netFetcher.Request(hopCount) - } - - // wait until either the chunk is delivered or the context is done - select { - case <-rctx.Done(): - return nil, rctx.Err() - case <-f.deliveredC: - return f.chunk, nil - case <-f.cancelledC: - return nil, fmt.Errorf("fetcher cancelled") - } -} - -// deliver is called by NetStore.Put to notify all pending requests -func (f *fetcher) deliver(ctx context.Context, ch Chunk) { - f.deliverOnce.Do(func() { - f.chunk = ch - // closing the deliveredC channel will terminate ongoing requests - close(f.deliveredC) - }) -} diff --git a/swarm/storage/netstore_test.go b/swarm/storage/netstore_test.go deleted file mode 100644 index 88ec6c28f446..000000000000 --- a/swarm/storage/netstore_test.go +++ /dev/null @@ -1,692 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "crypto/rand" - "errors" - "fmt" - "io/ioutil" - "sync" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/p2p/enode" - ch "github.com/ethereum/go-ethereum/swarm/chunk" -) - -var sourcePeerID = enode.HexID("99d8594b52298567d2ca3f4c441a5ba0140ee9245e26460d01102a52773c73b9") - -type mockNetFetcher struct { - peers *sync.Map - sources []*enode.ID - peersPerRequest [][]Address - requestCalled bool - offerCalled bool - quit <-chan struct{} - ctx context.Context - hopCounts []uint8 - mu sync.Mutex -} - -func (m *mockNetFetcher) Offer(source *enode.ID) { - m.offerCalled = true - m.sources = append(m.sources, source) -} - -func (m *mockNetFetcher) Request(hopCount uint8) { - m.mu.Lock() - defer m.mu.Unlock() - - m.requestCalled = true - var peers []Address - m.peers.Range(func(key interface{}, _ interface{}) bool { - peers = append(peers, common.FromHex(key.(string))) - return true - }) - m.peersPerRequest = append(m.peersPerRequest, peers) - m.hopCounts = append(m.hopCounts, hopCount) -} - -type mockNetFetchFuncFactory struct { - fetcher *mockNetFetcher -} - -func (m *mockNetFetchFuncFactory) newMockNetFetcher(ctx context.Context, _ Address, peers *sync.Map) NetFetcher { - m.fetcher.peers = peers - m.fetcher.quit = ctx.Done() - m.fetcher.ctx = ctx - return m.fetcher -} - -func mustNewNetStore(t *testing.T) *NetStore { - netStore, _ := mustNewNetStoreWithFetcher(t) - return netStore -} - -func mustNewNetStoreWithFetcher(t *testing.T) (*NetStore, *mockNetFetcher) { - t.Helper() - - datadir, err := ioutil.TempDir("", "netstore") - if err != nil { - t.Fatal(err) - } - naddr := make([]byte, 32) - params := NewDefaultLocalStoreParams() - params.Init(datadir) - params.BaseKey = naddr - localStore, err := NewTestLocalStoreForAddr(params) - if err != nil { - t.Fatal(err) - } - - fetcher := &mockNetFetcher{} - mockNetFetchFuncFactory := &mockNetFetchFuncFactory{ - fetcher: fetcher, - } - netStore, err := NewNetStore(localStore, mockNetFetchFuncFactory.newMockNetFetcher) - if err != nil { - t.Fatal(err) - } - return netStore, fetcher -} - -// TestNetStoreGetAndPut tests calling NetStore.Get which is blocked until the same chunk is Put. -// After the Put there should no active fetchers, and the context created for the fetcher should -// be cancelled. -func TestNetStoreGetAndPut(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - defer cancel() - - c := make(chan struct{}) // this channel ensures that the gouroutine with the Put does not run earlier than the Get - putErrC := make(chan error) - go func() { - <-c // wait for the Get to be called - time.Sleep(200 * time.Millisecond) // and a little more so it is surely called - - // check if netStore created a fetcher in the Get call for the unavailable chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - putErrC <- errors.New("Expected netStore to use a fetcher for the Get call") - return - } - - err := netStore.Put(ctx, chunk) - if err != nil { - putErrC <- fmt.Errorf("Expected no err got %v", err) - return - } - - putErrC <- nil - }() - - close(c) - recChunk, err := netStore.Get(ctx, chunk.Address()) // this is blocked until the Put above is done - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - if err := <-putErrC; err != nil { - t.Fatal(err) - } - // the retrieved chunk should be the same as what we Put - if !bytes.Equal(recChunk.Address(), chunk.Address()) || !bytes.Equal(recChunk.Data(), chunk.Data()) { - t.Fatalf("Different chunk received than what was put") - } - // the chunk is already available locally, so there should be no active fetchers waiting for it - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after delivery") - } - - // A fetcher was created when the Get was called (and the chunk was not available). The chunk - // was delivered with the Put call, so the fetcher should be cancelled now. - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } - -} - -// TestNetStoreGetAndPut tests calling NetStore.Put and then NetStore.Get. -// After the Put the chunk is available locally, so the Get can just retrieve it from LocalStore, -// there is no need to create fetchers. -func TestNetStoreGetAfterPut(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) - defer cancel() - - // First we Put the chunk, so the chunk will be available locally - err := netStore.Put(ctx, chunk) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - // Get should retrieve the chunk from LocalStore, without creating fetcher - recChunk, err := netStore.Get(ctx, chunk.Address()) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - // the retrieved chunk should be the same as what we Put - if !bytes.Equal(recChunk.Address(), chunk.Address()) || !bytes.Equal(recChunk.Data(), chunk.Data()) { - t.Fatalf("Different chunk received than what was put") - } - // no fetcher offer or request should be created for a locally available chunk - if fetcher.offerCalled || fetcher.requestCalled { - t.Fatal("NetFetcher.offerCalled or requestCalled not expected to be called") - } - // no fetchers should be created for a locally available chunk - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to not have fetcher") - } - -} - -// TestNetStoreGetTimeout tests a Get call for an unavailable chunk and waits for timeout -func TestNetStoreGetTimeout(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) - defer cancel() - - c := make(chan struct{}) // this channel ensures that the gouroutine does not run earlier than the Get - fetcherErrC := make(chan error) - go func() { - <-c // wait for the Get to be called - time.Sleep(200 * time.Millisecond) // and a little more so it is surely called - - // check if netStore created a fetcher in the Get call for the unavailable chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - fetcherErrC <- errors.New("Expected netStore to use a fetcher for the Get call") - return - } - - fetcherErrC <- nil - }() - - close(c) - // We call Get on this chunk, which is not in LocalStore. We don't Put it at all, so there will - // be a timeout - _, err := netStore.Get(ctx, chunk.Address()) - - // Check if the timeout happened - if err != context.DeadlineExceeded { - t.Fatalf("Expected context.DeadLineExceeded err got %v", err) - } - - if err := <-fetcherErrC; err != nil { - t.Fatal(err) - } - - // A fetcher was created, check if it has been removed after timeout - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after timeout") - } - - // Check if the fetcher context has been cancelled after the timeout - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } -} - -// TestNetStoreGetCancel tests a Get call for an unavailable chunk, then cancels the context and checks -// the errors -func TestNetStoreGetCancel(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - - c := make(chan struct{}) // this channel ensures that the gouroutine with the cancel does not run earlier than the Get - fetcherErrC := make(chan error, 1) - go func() { - <-c // wait for the Get to be called - time.Sleep(200 * time.Millisecond) // and a little more so it is surely called - // check if netStore created a fetcher in the Get call for the unavailable chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - fetcherErrC <- errors.New("Expected netStore to use a fetcher for the Get call") - return - } - - fetcherErrC <- nil - cancel() - }() - - close(c) - - // We call Get with an unavailable chunk, so it will create a fetcher and wait for delivery - _, err := netStore.Get(ctx, chunk.Address()) - - if err := <-fetcherErrC; err != nil { - t.Fatal(err) - } - - // After the context is cancelled above Get should return with an error - if err != context.Canceled { - t.Fatalf("Expected context.Canceled err got %v", err) - } - - // A fetcher was created, check if it has been removed after cancel - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after cancel") - } - - // Check if the fetcher context has been cancelled after the request context cancel - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } -} - -// TestNetStoreMultipleGetAndPut tests four Get calls for the same unavailable chunk. The chunk is -// delivered with a Put, we have to make sure all Get calls return, and they use a single fetcher -// for the chunk retrieval -func TestNetStoreMultipleGetAndPut(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - defer cancel() - - putErrC := make(chan error) - go func() { - // sleep to make sure Put is called after all the Get - time.Sleep(500 * time.Millisecond) - // check if netStore created exactly one fetcher for all Get calls - if netStore.fetchers.Len() != 1 { - putErrC <- errors.New("Expected netStore to use one fetcher for all Get calls") - return - } - err := netStore.Put(ctx, chunk) - if err != nil { - putErrC <- fmt.Errorf("Expected no err got %v", err) - return - } - putErrC <- nil - }() - - count := 4 - // call Get 4 times for the same unavailable chunk. The calls will be blocked until the Put above. - errC := make(chan error) - for i := 0; i < count; i++ { - go func() { - recChunk, err := netStore.Get(ctx, chunk.Address()) - if err != nil { - errC <- fmt.Errorf("Expected no err got %v", err) - } - if !bytes.Equal(recChunk.Address(), chunk.Address()) || !bytes.Equal(recChunk.Data(), chunk.Data()) { - errC <- errors.New("Different chunk received than what was put") - } - errC <- nil - }() - } - - if err := <-putErrC; err != nil { - t.Fatal(err) - } - - timeout := time.After(1 * time.Second) - - // The Get calls should return after Put, so no timeout expected - for i := 0; i < count; i++ { - select { - case err := <-errC: - if err != nil { - t.Fatal(err) - } - case <-timeout: - t.Fatalf("Timeout waiting for Get calls to return") - } - } - - // A fetcher was created, check if it has been removed after cancel - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after delivery") - } - - // A fetcher was created, check if it has been removed after delivery - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } - -} - -// TestNetStoreFetchFuncTimeout tests a FetchFunc call for an unavailable chunk and waits for timeout -func TestNetStoreFetchFuncTimeout(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) - defer cancel() - - // FetchFunc is called for an unavaible chunk, so the returned wait function should not be nil - wait := netStore.FetchFunc(ctx, chunk.Address()) - if wait == nil { - t.Fatal("Expected wait function to be not nil") - } - - // There should an active fetcher for the chunk after the FetchFunc call - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - t.Fatalf("Expected netStore to have one fetcher for the requested chunk") - } - - // wait function should timeout because we don't deliver the chunk with a Put - err := wait(ctx) - if err != context.DeadlineExceeded { - t.Fatalf("Expected context.DeadLineExceeded err got %v", err) - } - - // the fetcher should be removed after timeout - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after timeout") - } - - // the fetcher context should be cancelled after timeout - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } -} - -// TestNetStoreFetchFuncAfterPut tests that the FetchFunc should return nil for a locally available chunk -func TestNetStoreFetchFuncAfterPut(t *testing.T) { - netStore := mustNewNetStore(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - - // We deliver the created the chunk with a Put - err := netStore.Put(ctx, chunk) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - // FetchFunc should return nil, because the chunk is available locally, no need to fetch it - wait := netStore.FetchFunc(ctx, chunk.Address()) - if wait != nil { - t.Fatal("Expected wait to be nil") - } - - // No fetchers should be created at all - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to not have fetcher") - } -} - -// TestNetStoreGetCallsRequest tests if Get created a request on the NetFetcher for an unavailable chunk -func TestNetStoreGetCallsRequest(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx := context.WithValue(context.Background(), "hopcount", uint8(5)) - ctx, cancel := context.WithTimeout(ctx, 200*time.Millisecond) - defer cancel() - - // We call get for a not available chunk, it will timeout because the chunk is not delivered - _, err := netStore.Get(ctx, chunk.Address()) - - if err != context.DeadlineExceeded { - t.Fatalf("Expected context.DeadlineExceeded err got %v", err) - } - - // NetStore should call NetFetcher.Request and wait for the chunk - if !fetcher.requestCalled { - t.Fatal("Expected NetFetcher.Request to be called") - } - - if fetcher.hopCounts[0] != 5 { - t.Fatalf("Expected NetFetcher.Request be called with hopCount 5, got %v", fetcher.hopCounts[0]) - } -} - -// TestNetStoreGetCallsOffer tests if Get created a request on the NetFetcher for an unavailable chunk -// in case of a source peer provided in the context. -func TestNetStoreGetCallsOffer(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - // If a source peer is added to the context, NetStore will handle it as an offer - ctx := context.WithValue(context.Background(), "source", sourcePeerID.String()) - ctx, cancel := context.WithTimeout(ctx, 200*time.Millisecond) - defer cancel() - - // We call get for a not available chunk, it will timeout because the chunk is not delivered - _, err := netStore.Get(ctx, chunk.Address()) - - if err != context.DeadlineExceeded { - t.Fatalf("Expect error %v got %v", context.DeadlineExceeded, err) - } - - // NetStore should call NetFetcher.Offer with the source peer - if !fetcher.offerCalled { - t.Fatal("Expected NetFetcher.Request to be called") - } - - if len(fetcher.sources) != 1 { - t.Fatalf("Expected fetcher sources length 1 got %v", len(fetcher.sources)) - } - - if fetcher.sources[0].String() != sourcePeerID.String() { - t.Fatalf("Expected fetcher source %v got %v", sourcePeerID, fetcher.sources[0]) - } - -} - -// TestNetStoreFetcherCountPeers tests multiple NetStore.Get calls with peer in the context. -// There is no Put call, so the Get calls timeout -func TestNetStoreFetcherCountPeers(t *testing.T) { - - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - addr := randomAddr() - peers := []string{randomAddr().Hex(), randomAddr().Hex(), randomAddr().Hex()} - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - errC := make(chan error) - nrGets := 3 - - // Call Get 3 times with a peer in context - for i := 0; i < nrGets; i++ { - peer := peers[i] - go func() { - ctx := context.WithValue(ctx, "peer", peer) - _, err := netStore.Get(ctx, addr) - errC <- err - }() - } - - // All 3 Get calls should timeout - for i := 0; i < nrGets; i++ { - err := <-errC - if err != context.DeadlineExceeded { - t.Fatalf("Expected \"%v\" error got \"%v\"", context.DeadlineExceeded, err) - } - } - - // fetcher should be closed after timeout - select { - case <-fetcher.quit: - case <-time.After(3 * time.Second): - t.Fatalf("mockNetFetcher not closed after timeout") - } - - // All 3 peers should be given to NetFetcher after the 3 Get calls - if len(fetcher.peersPerRequest) != nrGets { - t.Fatalf("Expected 3 got %v", len(fetcher.peersPerRequest)) - } - - for i, peers := range fetcher.peersPerRequest { - if len(peers) < i+1 { - t.Fatalf("Expected at least %v got %v", i+1, len(peers)) - } - } -} - -// TestNetStoreFetchFuncCalledMultipleTimes calls the wait function given by FetchFunc three times, -// and checks there is still exactly one fetcher for one chunk. Afthe chunk is delivered, it checks -// if the fetcher is closed. -func TestNetStoreFetchFuncCalledMultipleTimes(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond) - defer cancel() - - // FetchFunc should return a non-nil wait function, because the chunk is not available - wait := netStore.FetchFunc(ctx, chunk.Address()) - if wait == nil { - t.Fatal("Expected wait function to be not nil") - } - - // There should be exactly one fetcher for the chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - t.Fatalf("Expected netStore to have one fetcher for the requested chunk") - } - - // Call wait three times in parallel - count := 3 - errC := make(chan error) - for i := 0; i < count; i++ { - go func() { - errC <- wait(ctx) - }() - } - - // sleep a little so the wait functions are called above - time.Sleep(100 * time.Millisecond) - - // there should be still only one fetcher, because all wait calls are for the same chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - t.Fatal("Expected netStore to have one fetcher for the requested chunk") - } - - // Deliver the chunk with a Put - err := netStore.Put(ctx, chunk) - if err != nil { - t.Fatalf("Expected no err got %v", err) - } - - // wait until all wait calls return (because the chunk is delivered) - for i := 0; i < count; i++ { - err := <-errC - if err != nil { - t.Fatal(err) - } - } - - // There should be no more fetchers for the delivered chunk - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after delivery") - } - - // The context for the fetcher should be cancelled after delivery - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } -} - -// TestNetStoreFetcherLifeCycleWithTimeout is similar to TestNetStoreFetchFuncCalledMultipleTimes, -// the only difference is that we don't deilver the chunk, just wait for timeout -func TestNetStoreFetcherLifeCycleWithTimeout(t *testing.T) { - netStore, fetcher := mustNewNetStoreWithFetcher(t) - - chunk := GenerateRandomChunk(ch.DefaultSize) - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - defer cancel() - - // FetchFunc should return a non-nil wait function, because the chunk is not available - wait := netStore.FetchFunc(ctx, chunk.Address()) - if wait == nil { - t.Fatal("Expected wait function to be not nil") - } - - // There should be exactly one fetcher for the chunk - if netStore.fetchers.Len() != 1 || netStore.getFetcher(chunk.Address()) == nil { - t.Fatalf("Expected netStore to have one fetcher for the requested chunk") - } - - // Call wait three times in parallel - count := 3 - errC := make(chan error) - for i := 0; i < count; i++ { - go func() { - rctx, rcancel := context.WithTimeout(context.Background(), 100*time.Millisecond) - defer rcancel() - err := wait(rctx) - if err != context.DeadlineExceeded { - errC <- fmt.Errorf("Expected err %v got %v", context.DeadlineExceeded, err) - return - } - errC <- nil - }() - } - - // wait until all wait calls timeout - for i := 0; i < count; i++ { - err := <-errC - if err != nil { - t.Fatal(err) - } - } - - // There should be no more fetchers after timeout - if netStore.fetchers.Len() != 0 { - t.Fatal("Expected netStore to remove the fetcher after delivery") - } - - // The context for the fetcher should be cancelled after timeout - select { - case <-fetcher.ctx.Done(): - default: - t.Fatal("Expected fetcher context to be cancelled") - } -} - -func randomAddr() Address { - addr := make([]byte, 32) - rand.Read(addr) - return Address(addr) -} diff --git a/swarm/storage/pyramid.go b/swarm/storage/pyramid.go deleted file mode 100644 index ed0f843b937e..000000000000 --- a/swarm/storage/pyramid.go +++ /dev/null @@ -1,694 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "context" - "encoding/binary" - "errors" - "io" - "io/ioutil" - "sync" - "time" - - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "github.com/ethereum/go-ethereum/swarm/log" -) - -/* - The main idea of a pyramid chunker is to process the input data without knowing the entire size apriori. - For this to be achieved, the chunker tree is built from the ground up until the data is exhausted. - This opens up new aveneus such as easy append and other sort of modifications to the tree thereby avoiding - duplication of data chunks. - - - Below is an example of a two level chunks tree. The leaf chunks are called data chunks and all the above - chunks are called tree chunks. The tree chunk above data chunks is level 0 and so on until it reaches - the root tree chunk. - - - - T10 <- Tree chunk lvl1 - | - __________________________|_____________________________ - / | | \ - / | \ \ - __T00__ ___T01__ ___T02__ ___T03__ <- Tree chunks lvl 0 - / / \ / / \ / / \ / / \ - / / \ / / \ / / \ / / \ - D1 D2 ... D128 D1 D2 ... D128 D1 D2 ... D128 D1 D2 ... D128 <- Data Chunks - - - The split function continuously read the data and creates data chunks and send them to storage. - When certain no of data chunks are created (defaultBranches), a signal is sent to create a tree - entry. When the level 0 tree entries reaches certain threshold (defaultBranches), another signal - is sent to a tree entry one level up.. and so on... until only the data is exhausted AND only one - tree entry is present in certain level. The key of tree entry is given out as the rootAddress of the file. - -*/ - -var ( - errLoadingTreeRootChunk = errors.New("LoadTree Error: Could not load root chunk") - errLoadingTreeChunk = errors.New("LoadTree Error: Could not load chunk") -) - -const ( - ChunkProcessors = 8 - splitTimeout = time.Minute * 5 -) - -type PyramidSplitterParams struct { - SplitterParams - getter Getter -} - -func NewPyramidSplitterParams(addr Address, reader io.Reader, putter Putter, getter Getter, chunkSize int64) *PyramidSplitterParams { - hashSize := putter.RefSize() - return &PyramidSplitterParams{ - SplitterParams: SplitterParams{ - ChunkerParams: ChunkerParams{ - chunkSize: chunkSize, - hashSize: hashSize, - }, - reader: reader, - putter: putter, - addr: addr, - }, - getter: getter, - } -} - -/* - When splitting, data is given as a SectionReader, and the key is a hashSize long byte slice (Address), the root hash of the entire content will fill this once processing finishes. - New chunks to store are store using the putter which the caller provides. -*/ -func PyramidSplit(ctx context.Context, reader io.Reader, putter Putter, getter Getter) (Address, func(context.Context) error, error) { - return NewPyramidSplitter(NewPyramidSplitterParams(nil, reader, putter, getter, ch.DefaultSize)).Split(ctx) -} - -func PyramidAppend(ctx context.Context, addr Address, reader io.Reader, putter Putter, getter Getter) (Address, func(context.Context) error, error) { - return NewPyramidSplitter(NewPyramidSplitterParams(addr, reader, putter, getter, ch.DefaultSize)).Append(ctx) -} - -// Entry to create a tree node -type TreeEntry struct { - level int - branchCount int64 - subtreeSize uint64 - chunk []byte - key []byte - index int // used in append to indicate the index of existing tree entry - updatePending bool // indicates if the entry is loaded from existing tree -} - -func NewTreeEntry(pyramid *PyramidChunker) *TreeEntry { - return &TreeEntry{ - level: 0, - branchCount: 0, - subtreeSize: 0, - chunk: make([]byte, pyramid.chunkSize+8), - key: make([]byte, pyramid.hashSize), - index: 0, - updatePending: false, - } -} - -// Used by the hash processor to create a data/tree chunk and send to storage -type chunkJob struct { - key Address - chunk []byte - parentWg *sync.WaitGroup -} - -type PyramidChunker struct { - chunkSize int64 - hashSize int64 - branches int64 - reader io.Reader - putter Putter - getter Getter - key Address - workerCount int64 - workerLock sync.RWMutex - jobC chan *chunkJob - wg *sync.WaitGroup - errC chan error - quitC chan bool - rootAddress []byte - chunkLevel [][]*TreeEntry -} - -func NewPyramidSplitter(params *PyramidSplitterParams) (pc *PyramidChunker) { - pc = &PyramidChunker{} - pc.reader = params.reader - pc.hashSize = params.hashSize - pc.branches = params.chunkSize / pc.hashSize - pc.chunkSize = pc.hashSize * pc.branches - pc.putter = params.putter - pc.getter = params.getter - pc.key = params.addr - pc.workerCount = 0 - pc.jobC = make(chan *chunkJob, 2*ChunkProcessors) - pc.wg = &sync.WaitGroup{} - pc.errC = make(chan error) - pc.quitC = make(chan bool) - pc.rootAddress = make([]byte, pc.hashSize) - pc.chunkLevel = make([][]*TreeEntry, pc.branches) - return -} - -func (pc *PyramidChunker) Join(addr Address, getter Getter, depth int) LazySectionReader { - return &LazyChunkReader{ - addr: addr, - depth: depth, - chunkSize: pc.chunkSize, - branches: pc.branches, - hashSize: pc.hashSize, - getter: getter, - } -} - -func (pc *PyramidChunker) incrementWorkerCount() { - pc.workerLock.Lock() - defer pc.workerLock.Unlock() - pc.workerCount += 1 -} - -func (pc *PyramidChunker) getWorkerCount() int64 { - pc.workerLock.Lock() - defer pc.workerLock.Unlock() - return pc.workerCount -} - -func (pc *PyramidChunker) decrementWorkerCount() { - pc.workerLock.Lock() - defer pc.workerLock.Unlock() - pc.workerCount -= 1 -} - -func (pc *PyramidChunker) Split(ctx context.Context) (k Address, wait func(context.Context) error, err error) { - pc.wg.Add(1) - pc.prepareChunks(ctx, false) - - // closes internal error channel if all subprocesses in the workgroup finished - go func() { - - // waiting for all chunks to finish - pc.wg.Wait() - - //We close errC here because this is passed down to 8 parallel routines underneath. - // if a error happens in one of them.. that particular routine raises error... - // once they all complete successfully, the control comes back and we can safely close this here. - close(pc.errC) - }() - - defer close(pc.quitC) - defer pc.putter.Close() - - select { - case err := <-pc.errC: - if err != nil { - return nil, nil, err - } - case <-ctx.Done(): - _ = pc.putter.Wait(ctx) //??? - return nil, nil, ctx.Err() - } - return pc.rootAddress, pc.putter.Wait, nil - -} - -func (pc *PyramidChunker) Append(ctx context.Context) (k Address, wait func(context.Context) error, err error) { - // Load the right most unfinished tree chunks in every level - pc.loadTree(ctx) - - pc.wg.Add(1) - pc.prepareChunks(ctx, true) - - // closes internal error channel if all subprocesses in the workgroup finished - go func() { - - // waiting for all chunks to finish - pc.wg.Wait() - - close(pc.errC) - }() - - defer close(pc.quitC) - defer pc.putter.Close() - - select { - case err := <-pc.errC: - if err != nil { - return nil, nil, err - } - case <-time.NewTimer(splitTimeout).C: - } - - return pc.rootAddress, pc.putter.Wait, nil - -} - -func (pc *PyramidChunker) processor(ctx context.Context, id int64) { - defer pc.decrementWorkerCount() - for { - select { - - case job, ok := <-pc.jobC: - if !ok { - return - } - pc.processChunk(ctx, id, job) - case <-pc.quitC: - return - } - } -} - -func (pc *PyramidChunker) processChunk(ctx context.Context, id int64, job *chunkJob) { - ref, err := pc.putter.Put(ctx, job.chunk) - if err != nil { - select { - case pc.errC <- err: - case <-pc.quitC: - } - } - - // report hash of this chunk one level up (keys corresponds to the proper subslice of the parent chunk) - copy(job.key, ref) - - // send off new chunk to storage - job.parentWg.Done() -} - -func (pc *PyramidChunker) loadTree(ctx context.Context) error { - // Get the root chunk to get the total size - chunkData, err := pc.getter.Get(ctx, Reference(pc.key)) - if err != nil { - return errLoadingTreeRootChunk - } - chunkSize := int64(chunkData.Size()) - log.Trace("pyramid.chunker: root chunk", "chunk.Size", chunkSize, "pc.chunkSize", pc.chunkSize) - - //if data size is less than a chunk... add a parent with update as pending - if chunkSize <= pc.chunkSize { - newEntry := &TreeEntry{ - level: 0, - branchCount: 1, - subtreeSize: uint64(chunkSize), - chunk: make([]byte, pc.chunkSize+8), - key: make([]byte, pc.hashSize), - index: 0, - updatePending: true, - } - copy(newEntry.chunk[8:], pc.key) - pc.chunkLevel[0] = append(pc.chunkLevel[0], newEntry) - return nil - } - - var treeSize int64 - var depth int - treeSize = pc.chunkSize - for ; treeSize < chunkSize; treeSize *= pc.branches { - depth++ - } - log.Trace("pyramid.chunker", "depth", depth) - - // Add the root chunk entry - branchCount := int64(len(chunkData)-8) / pc.hashSize - newEntry := &TreeEntry{ - level: depth - 1, - branchCount: branchCount, - subtreeSize: uint64(chunkSize), - chunk: chunkData, - key: pc.key, - index: 0, - updatePending: true, - } - pc.chunkLevel[depth-1] = append(pc.chunkLevel[depth-1], newEntry) - - // Add the rest of the tree - for lvl := depth - 1; lvl >= 1; lvl-- { - - //TODO(jmozah): instead of loading finished branches and then trim in the end, - //avoid loading them in the first place - for _, ent := range pc.chunkLevel[lvl] { - branchCount = int64(len(ent.chunk)-8) / pc.hashSize - for i := int64(0); i < branchCount; i++ { - key := ent.chunk[8+(i*pc.hashSize) : 8+((i+1)*pc.hashSize)] - newChunkData, err := pc.getter.Get(ctx, Reference(key)) - if err != nil { - return errLoadingTreeChunk - } - newChunkSize := newChunkData.Size() - bewBranchCount := int64(len(newChunkData)-8) / pc.hashSize - newEntry := &TreeEntry{ - level: lvl - 1, - branchCount: bewBranchCount, - subtreeSize: newChunkSize, - chunk: newChunkData, - key: key, - index: 0, - updatePending: true, - } - pc.chunkLevel[lvl-1] = append(pc.chunkLevel[lvl-1], newEntry) - - } - - // We need to get only the right most unfinished branch.. so trim all finished branches - if int64(len(pc.chunkLevel[lvl-1])) >= pc.branches { - pc.chunkLevel[lvl-1] = nil - } - } - } - - return nil -} - -func (pc *PyramidChunker) prepareChunks(ctx context.Context, isAppend bool) { - defer pc.wg.Done() - - chunkWG := &sync.WaitGroup{} - - pc.incrementWorkerCount() - - go pc.processor(ctx, pc.workerCount) - - parent := NewTreeEntry(pc) - var unfinishedChunkData ChunkData - var unfinishedChunkSize uint64 - - if isAppend && len(pc.chunkLevel[0]) != 0 { - lastIndex := len(pc.chunkLevel[0]) - 1 - ent := pc.chunkLevel[0][lastIndex] - - if ent.branchCount < pc.branches { - parent = &TreeEntry{ - level: 0, - branchCount: ent.branchCount, - subtreeSize: ent.subtreeSize, - chunk: ent.chunk, - key: ent.key, - index: lastIndex, - updatePending: true, - } - - lastBranch := parent.branchCount - 1 - lastAddress := parent.chunk[8+lastBranch*pc.hashSize : 8+(lastBranch+1)*pc.hashSize] - - var err error - unfinishedChunkData, err = pc.getter.Get(ctx, lastAddress) - if err != nil { - pc.errC <- err - } - unfinishedChunkSize = unfinishedChunkData.Size() - if unfinishedChunkSize < uint64(pc.chunkSize) { - parent.subtreeSize = parent.subtreeSize - unfinishedChunkSize - parent.branchCount = parent.branchCount - 1 - } else { - unfinishedChunkData = nil - } - } - } - - for index := 0; ; index++ { - var err error - chunkData := make([]byte, pc.chunkSize+8) - - var readBytes int - - if unfinishedChunkData != nil { - copy(chunkData, unfinishedChunkData) - readBytes += int(unfinishedChunkSize) - unfinishedChunkData = nil - log.Trace("pyramid.chunker: found unfinished chunk", "readBytes", readBytes) - } - - var res []byte - res, err = ioutil.ReadAll(io.LimitReader(pc.reader, int64(len(chunkData)-(8+readBytes)))) - - // hack for ioutil.ReadAll: - // a successful call to ioutil.ReadAll returns err == nil, not err == EOF, whereas we - // want to propagate the io.EOF error - if len(res) == 0 && err == nil { - err = io.EOF - } - copy(chunkData[8+readBytes:], res) - - readBytes += len(res) - log.Trace("pyramid.chunker: copied all data", "readBytes", readBytes) - - if err != nil { - if err == io.EOF || err == io.ErrUnexpectedEOF { - - pc.cleanChunkLevels() - - // Check if we are appending or the chunk is the only one. - if parent.branchCount == 1 && (pc.depth() == 0 || isAppend) { - // Data is exactly one chunk.. pick the last chunk key as root - chunkWG.Wait() - lastChunksAddress := parent.chunk[8 : 8+pc.hashSize] - copy(pc.rootAddress, lastChunksAddress) - break - } - } else { - close(pc.quitC) - break - } - } - - // Data ended in chunk boundary.. just signal to start bulding tree - if readBytes == 0 { - pc.buildTree(isAppend, parent, chunkWG, true, nil) - break - } else { - pkey := pc.enqueueDataChunk(chunkData, uint64(readBytes), parent, chunkWG) - - // update tree related parent data structures - parent.subtreeSize += uint64(readBytes) - parent.branchCount++ - - // Data got exhausted... signal to send any parent tree related chunks - if int64(readBytes) < pc.chunkSize { - - pc.cleanChunkLevels() - - // only one data chunk .. so dont add any parent chunk - if parent.branchCount <= 1 { - chunkWG.Wait() - - if isAppend || pc.depth() == 0 { - // No need to build the tree if the depth is 0 - // or we are appending. - // Just use the last key. - copy(pc.rootAddress, pkey) - } else { - // We need to build the tree and and provide the lonely - // chunk key to replace the last tree chunk key. - pc.buildTree(isAppend, parent, chunkWG, true, pkey) - } - break - } - - pc.buildTree(isAppend, parent, chunkWG, true, nil) - break - } - - if parent.branchCount == pc.branches { - pc.buildTree(isAppend, parent, chunkWG, false, nil) - parent = NewTreeEntry(pc) - } - - } - - workers := pc.getWorkerCount() - if int64(len(pc.jobC)) > workers && workers < ChunkProcessors { - pc.incrementWorkerCount() - go pc.processor(ctx, pc.workerCount) - } - - } - -} - -func (pc *PyramidChunker) buildTree(isAppend bool, ent *TreeEntry, chunkWG *sync.WaitGroup, last bool, lonelyChunkKey []byte) { - chunkWG.Wait() - pc.enqueueTreeChunk(ent, chunkWG, last) - - compress := false - endLvl := pc.branches - for lvl := int64(0); lvl < pc.branches; lvl++ { - lvlCount := int64(len(pc.chunkLevel[lvl])) - if lvlCount >= pc.branches { - endLvl = lvl + 1 - compress = true - break - } - } - - if !compress && !last { - return - } - - // Wait for all the keys to be processed before compressing the tree - chunkWG.Wait() - - for lvl := int64(ent.level); lvl < endLvl; lvl++ { - - lvlCount := int64(len(pc.chunkLevel[lvl])) - if lvlCount == 1 && last { - copy(pc.rootAddress, pc.chunkLevel[lvl][0].key) - return - } - - for startCount := int64(0); startCount < lvlCount; startCount += pc.branches { - - endCount := startCount + pc.branches - if endCount > lvlCount { - endCount = lvlCount - } - - var nextLvlCount int64 - var tempEntry *TreeEntry - if len(pc.chunkLevel[lvl+1]) > 0 { - nextLvlCount = int64(len(pc.chunkLevel[lvl+1]) - 1) - tempEntry = pc.chunkLevel[lvl+1][nextLvlCount] - } - if isAppend && tempEntry != nil && tempEntry.updatePending { - updateEntry := &TreeEntry{ - level: int(lvl + 1), - branchCount: 0, - subtreeSize: 0, - chunk: make([]byte, pc.chunkSize+8), - key: make([]byte, pc.hashSize), - index: int(nextLvlCount), - updatePending: true, - } - for index := int64(0); index < lvlCount; index++ { - updateEntry.branchCount++ - updateEntry.subtreeSize += pc.chunkLevel[lvl][index].subtreeSize - copy(updateEntry.chunk[8+(index*pc.hashSize):8+((index+1)*pc.hashSize)], pc.chunkLevel[lvl][index].key[:pc.hashSize]) - } - - pc.enqueueTreeChunk(updateEntry, chunkWG, last) - - } else { - - noOfBranches := endCount - startCount - newEntry := &TreeEntry{ - level: int(lvl + 1), - branchCount: noOfBranches, - subtreeSize: 0, - chunk: make([]byte, (noOfBranches*pc.hashSize)+8), - key: make([]byte, pc.hashSize), - index: int(nextLvlCount), - updatePending: false, - } - - index := int64(0) - for i := startCount; i < endCount; i++ { - entry := pc.chunkLevel[lvl][i] - newEntry.subtreeSize += entry.subtreeSize - copy(newEntry.chunk[8+(index*pc.hashSize):8+((index+1)*pc.hashSize)], entry.key[:pc.hashSize]) - index++ - } - // Lonely chunk key is the key of the last chunk that is only one on the last branch. - // In this case, ignore the its tree chunk key and replace it with the lonely chunk key. - if lonelyChunkKey != nil { - // Overwrite the last tree chunk key with the lonely data chunk key. - copy(newEntry.chunk[int64(len(newEntry.chunk))-pc.hashSize:], lonelyChunkKey[:pc.hashSize]) - } - - pc.enqueueTreeChunk(newEntry, chunkWG, last) - - } - - } - - if !isAppend { - chunkWG.Wait() - if compress { - pc.chunkLevel[lvl] = nil - } - } - } - -} - -func (pc *PyramidChunker) enqueueTreeChunk(ent *TreeEntry, chunkWG *sync.WaitGroup, last bool) { - if ent != nil && ent.branchCount > 0 { - - // wait for data chunks to get over before processing the tree chunk - if last { - chunkWG.Wait() - } - - binary.LittleEndian.PutUint64(ent.chunk[:8], ent.subtreeSize) - ent.key = make([]byte, pc.hashSize) - chunkWG.Add(1) - select { - case pc.jobC <- &chunkJob{ent.key, ent.chunk[:ent.branchCount*pc.hashSize+8], chunkWG}: - case <-pc.quitC: - } - - // Update or append based on weather it is a new entry or being reused - if ent.updatePending { - chunkWG.Wait() - pc.chunkLevel[ent.level][ent.index] = ent - } else { - pc.chunkLevel[ent.level] = append(pc.chunkLevel[ent.level], ent) - } - - } -} - -func (pc *PyramidChunker) enqueueDataChunk(chunkData []byte, size uint64, parent *TreeEntry, chunkWG *sync.WaitGroup) Address { - binary.LittleEndian.PutUint64(chunkData[:8], size) - pkey := parent.chunk[8+parent.branchCount*pc.hashSize : 8+(parent.branchCount+1)*pc.hashSize] - - chunkWG.Add(1) - select { - case pc.jobC <- &chunkJob{pkey, chunkData[:size+8], chunkWG}: - case <-pc.quitC: - } - - return pkey - -} - -// depth returns the number of chunk levels. -// It is used to detect if there is only one data chunk -// left for the last branch. -func (pc *PyramidChunker) depth() (d int) { - for _, l := range pc.chunkLevel { - if l == nil { - return - } - d++ - } - return -} - -// cleanChunkLevels removes gaps (nil levels) between chunk levels -// that are not nil. -func (pc *PyramidChunker) cleanChunkLevels() { - for i, l := range pc.chunkLevel { - if l == nil { - pc.chunkLevel = append(pc.chunkLevel[:i], append(pc.chunkLevel[i+1:], nil)...) - } - } -} diff --git a/swarm/storage/schema.go b/swarm/storage/schema.go deleted file mode 100644 index 91847ca0f9a4..000000000000 --- a/swarm/storage/schema.go +++ /dev/null @@ -1,17 +0,0 @@ -package storage - -// The DB schema we want to use. The actual/current DB schema might differ -// until migrations are run. -const CurrentDbSchema = DbSchemaHalloween - -// There was a time when we had no schema at all. -const DbSchemaNone = "" - -// "purity" is the first formal schema of LevelDB we release together with Swarm 0.3.5 -const DbSchemaPurity = "purity" - -// "halloween" is here because we had a screw in the garbage collector index. -// Because of that we had to rebuild the GC index to get rid of erroneous -// entries and that takes a long time. This schema is used for bookkeeping, -// so rebuild index will run just once. -const DbSchemaHalloween = "halloween" diff --git a/swarm/storage/swarmhasher.go b/swarm/storage/swarmhasher.go deleted file mode 100644 index fae03f0c72fe..000000000000 --- a/swarm/storage/swarmhasher.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "hash" -) - -const ( - BMTHash = "BMT" - SHA3Hash = "SHA3" // http://golang.org/pkg/hash/#Hash - DefaultHash = BMTHash -) - -type SwarmHash interface { - hash.Hash - ResetWithLength([]byte) -} - -type HashWithLength struct { - hash.Hash -} - -func (h *HashWithLength) ResetWithLength(length []byte) { - h.Reset() - h.Write(length) -} diff --git a/swarm/storage/types.go b/swarm/storage/types.go deleted file mode 100644 index 7ec21328e2bb..000000000000 --- a/swarm/storage/types.go +++ /dev/null @@ -1,330 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "bytes" - "context" - "crypto" - "crypto/rand" - "encoding/binary" - "fmt" - "io" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/swarm/bmt" - ch "github.com/ethereum/go-ethereum/swarm/chunk" - "golang.org/x/crypto/sha3" -) - -const MaxPO = 16 -const AddressLength = 32 - -type SwarmHasher func() SwarmHash - -type Address []byte - -// Proximity(x, y) returns the proximity order of the MSB distance between x and y -// -// The distance metric MSB(x, y) of two equal length byte sequences x an y is the -// value of the binary integer cast of the x^y, ie., x and y bitwise xor-ed. -// the binary cast is big endian: most significant bit first (=MSB). -// -// Proximity(x, y) is a discrete logarithmic scaling of the MSB distance. -// It is defined as the reverse rank of the integer part of the base 2 -// logarithm of the distance. -// It is calculated by counting the number of common leading zeros in the (MSB) -// binary representation of the x^y. -// -// (0 farthest, 255 closest, 256 self) -func Proximity(one, other []byte) (ret int) { - b := (MaxPO-1)/8 + 1 - if b > len(one) { - b = len(one) - } - m := 8 - for i := 0; i < b; i++ { - oxo := one[i] ^ other[i] - for j := 0; j < m; j++ { - if (oxo>>uint8(7-j))&0x01 != 0 { - return i*8 + j - } - } - } - return MaxPO -} - -var ZeroAddr = Address(common.Hash{}.Bytes()) - -func MakeHashFunc(hash string) SwarmHasher { - switch hash { - case "SHA256": - return func() SwarmHash { return &HashWithLength{crypto.SHA256.New()} } - case "SHA3": - return func() SwarmHash { return &HashWithLength{sha3.NewLegacyKeccak256()} } - case "BMT": - return func() SwarmHash { - hasher := sha3.NewLegacyKeccak256 - hasherSize := hasher().Size() - segmentCount := ch.DefaultSize / hasherSize - pool := bmt.NewTreePool(hasher, segmentCount, bmt.PoolSize) - return bmt.New(pool) - } - } - return nil -} - -func (a Address) Hex() string { - return fmt.Sprintf("%064x", []byte(a[:])) -} - -func (a Address) Log() string { - if len(a[:]) < 8 { - return fmt.Sprintf("%x", []byte(a[:])) - } - return fmt.Sprintf("%016x", []byte(a[:8])) -} - -func (a Address) String() string { - return fmt.Sprintf("%064x", []byte(a)) -} - -func (a Address) MarshalJSON() (out []byte, err error) { - return []byte(`"` + a.String() + `"`), nil -} - -func (a *Address) UnmarshalJSON(value []byte) error { - s := string(value) - *a = make([]byte, 32) - h := common.Hex2Bytes(s[1 : len(s)-1]) - copy(*a, h) - return nil -} - -type AddressCollection []Address - -func NewAddressCollection(l int) AddressCollection { - return make(AddressCollection, l) -} - -func (c AddressCollection) Len() int { - return len(c) -} - -func (c AddressCollection) Less(i, j int) bool { - return bytes.Compare(c[i], c[j]) == -1 -} - -func (c AddressCollection) Swap(i, j int) { - c[i], c[j] = c[j], c[i] -} - -// Chunk interface implemented by context.Contexts and data chunks -type Chunk interface { - Address() Address - Data() []byte -} - -type chunk struct { - addr Address - sdata []byte - span int64 -} - -func NewChunk(addr Address, data []byte) *chunk { - return &chunk{ - addr: addr, - sdata: data, - span: -1, - } -} - -func (c *chunk) Address() Address { - return c.addr -} - -func (c *chunk) Data() []byte { - return c.sdata -} - -// String() for pretty printing -func (self *chunk) String() string { - return fmt.Sprintf("Address: %v TreeSize: %v Chunksize: %v", self.addr.Log(), self.span, len(self.sdata)) -} - -func GenerateRandomChunk(dataSize int64) Chunk { - hasher := MakeHashFunc(DefaultHash)() - sdata := make([]byte, dataSize+8) - rand.Read(sdata[8:]) - binary.LittleEndian.PutUint64(sdata[:8], uint64(dataSize)) - hasher.ResetWithLength(sdata[:8]) - hasher.Write(sdata[8:]) - return NewChunk(hasher.Sum(nil), sdata) -} - -func GenerateRandomChunks(dataSize int64, count int) (chunks []Chunk) { - for i := 0; i < count; i++ { - ch := GenerateRandomChunk(dataSize) - chunks = append(chunks, ch) - } - return chunks -} - -// Size, Seek, Read, ReadAt -type LazySectionReader interface { - Context() context.Context - Size(context.Context, chan bool) (int64, error) - io.Seeker - io.Reader - io.ReaderAt -} - -type LazyTestSectionReader struct { - *io.SectionReader -} - -func (r *LazyTestSectionReader) Size(context.Context, chan bool) (int64, error) { - return r.SectionReader.Size(), nil -} - -func (r *LazyTestSectionReader) Context() context.Context { - return context.TODO() -} - -type StoreParams struct { - Hash SwarmHasher `toml:"-"` - DbCapacity uint64 - CacheCapacity uint - BaseKey []byte -} - -func NewDefaultStoreParams() *StoreParams { - return NewStoreParams(defaultLDBCapacity, defaultCacheCapacity, nil, nil) -} - -func NewStoreParams(ldbCap uint64, cacheCap uint, hash SwarmHasher, basekey []byte) *StoreParams { - if basekey == nil { - basekey = make([]byte, 32) - } - if hash == nil { - hash = MakeHashFunc(DefaultHash) - } - return &StoreParams{ - Hash: hash, - DbCapacity: ldbCap, - CacheCapacity: cacheCap, - BaseKey: basekey, - } -} - -type ChunkData []byte - -type Reference []byte - -// Putter is responsible to store data and create a reference for it -type Putter interface { - Put(context.Context, ChunkData) (Reference, error) - // RefSize returns the length of the Reference created by this Putter - RefSize() int64 - // Close is to indicate that no more chunk data will be Put on this Putter - Close() - // Wait returns if all data has been store and the Close() was called. - Wait(context.Context) error -} - -// Getter is an interface to retrieve a chunk's data by its reference -type Getter interface { - Get(context.Context, Reference) (ChunkData, error) -} - -// NOTE: this returns invalid data if chunk is encrypted -func (c ChunkData) Size() uint64 { - return binary.LittleEndian.Uint64(c[:8]) -} - -type ChunkValidator interface { - Validate(chunk Chunk) bool -} - -// Provides method for validation of content address in chunks -// Holds the corresponding hasher to create the address -type ContentAddressValidator struct { - Hasher SwarmHasher -} - -// Constructor -func NewContentAddressValidator(hasher SwarmHasher) *ContentAddressValidator { - return &ContentAddressValidator{ - Hasher: hasher, - } -} - -// Validate that the given key is a valid content address for the given data -func (v *ContentAddressValidator) Validate(chunk Chunk) bool { - data := chunk.Data() - if l := len(data); l < 9 || l > ch.DefaultSize+8 { - // log.Error("invalid chunk size", "chunk", addr.Hex(), "size", l) - return false - } - - hasher := v.Hasher() - hasher.ResetWithLength(data[:8]) - hasher.Write(data[8:]) - hash := hasher.Sum(nil) - - return bytes.Equal(hash, chunk.Address()) -} - -type ChunkStore interface { - Put(ctx context.Context, ch Chunk) (err error) - Get(rctx context.Context, ref Address) (ch Chunk, err error) - Has(rctx context.Context, ref Address) bool - Close() -} - -// SyncChunkStore is a ChunkStore which supports syncing -type SyncChunkStore interface { - ChunkStore - BinIndex(po uint8) uint64 - Iterator(from uint64, to uint64, po uint8, f func(Address, uint64) bool) error - FetchFunc(ctx context.Context, ref Address) func(context.Context) error -} - -// FakeChunkStore doesn't store anything, just implements the ChunkStore interface -// It can be used to inject into a hasherStore if you don't want to actually store data just do the -// hashing -type FakeChunkStore struct { -} - -// Put doesn't store anything it is just here to implement ChunkStore -func (f *FakeChunkStore) Put(_ context.Context, ch Chunk) error { - return nil -} - -// Has doesn't do anything it is just here to implement ChunkStore -func (f *FakeChunkStore) Has(_ context.Context, ref Address) bool { - panic("FakeChunkStore doesn't support HasChunk") -} - -// Get doesn't store anything it is just here to implement ChunkStore -func (f *FakeChunkStore) Get(_ context.Context, ref Address) (Chunk, error) { - panic("FakeChunkStore doesn't support Get") -} - -// Close doesn't store anything it is just here to implement ChunkStore -func (f *FakeChunkStore) Close() { -} diff --git a/swarm/storage/types_test.go b/swarm/storage/types_test.go deleted file mode 100644 index 32907bbf4903..000000000000 --- a/swarm/storage/types_test.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package storage - -import ( - "strconv" - "testing" -) - -// TestProximity validates Proximity function with explicit -// values in a table-driven test. It is highly dependant on -// MaxPO constant and it validates cases up to MaxPO=32. -func TestProximity(t *testing.T) { - // integer from base2 encoded string - bx := func(s string) uint8 { - i, err := strconv.ParseUint(s, 2, 8) - if err != nil { - t.Fatal(err) - } - return uint8(i) - } - // adjust expected bins in respect to MaxPO - limitPO := func(po uint8) uint8 { - if po > MaxPO { - return MaxPO - } - return po - } - base := []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000000")} - for _, tc := range []struct { - addr []byte - po uint8 - }{ - { - addr: base, - po: MaxPO, - }, - { - addr: []byte{bx("10000000"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(0), - }, - { - addr: []byte{bx("01000000"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(1), - }, - { - addr: []byte{bx("00100000"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(2), - }, - { - addr: []byte{bx("00010000"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(3), - }, - { - addr: []byte{bx("00001000"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(4), - }, - { - addr: []byte{bx("00000100"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(5), - }, - { - addr: []byte{bx("00000010"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(6), - }, - { - addr: []byte{bx("00000001"), bx("00000000"), bx("00000000"), bx("00000000")}, - po: limitPO(7), - }, - { - addr: []byte{bx("00000000"), bx("10000000"), bx("00000000"), bx("00000000")}, - po: limitPO(8), - }, - { - addr: []byte{bx("00000000"), bx("01000000"), bx("00000000"), bx("00000000")}, - po: limitPO(9), - }, - { - addr: []byte{bx("00000000"), bx("00100000"), bx("00000000"), bx("00000000")}, - po: limitPO(10), - }, - { - addr: []byte{bx("00000000"), bx("00010000"), bx("00000000"), bx("00000000")}, - po: limitPO(11), - }, - { - addr: []byte{bx("00000000"), bx("00001000"), bx("00000000"), bx("00000000")}, - po: limitPO(12), - }, - { - addr: []byte{bx("00000000"), bx("00000100"), bx("00000000"), bx("00000000")}, - po: limitPO(13), - }, - { - addr: []byte{bx("00000000"), bx("00000010"), bx("00000000"), bx("00000000")}, - po: limitPO(14), - }, - { - addr: []byte{bx("00000000"), bx("00000001"), bx("00000000"), bx("00000000")}, - po: limitPO(15), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("10000000"), bx("00000000")}, - po: limitPO(16), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("01000000"), bx("00000000")}, - po: limitPO(17), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00100000"), bx("00000000")}, - po: limitPO(18), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00010000"), bx("00000000")}, - po: limitPO(19), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00001000"), bx("00000000")}, - po: limitPO(20), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000100"), bx("00000000")}, - po: limitPO(21), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000010"), bx("00000000")}, - po: limitPO(22), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000001"), bx("00000000")}, - po: limitPO(23), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("10000000")}, - po: limitPO(24), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("01000000")}, - po: limitPO(25), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00100000")}, - po: limitPO(26), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00010000")}, - po: limitPO(27), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00001000")}, - po: limitPO(28), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000100")}, - po: limitPO(29), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000010")}, - po: limitPO(30), - }, - { - addr: []byte{bx("00000000"), bx("00000000"), bx("00000000"), bx("00000001")}, - po: limitPO(31), - }, - } { - got := uint8(Proximity(base, tc.addr)) - if got != tc.po { - t.Errorf("got %v bin, want %v", got, tc.po) - } - } -} diff --git a/swarm/swap/swap.go b/swarm/swap/swap.go deleted file mode 100644 index 5d636dc205fb..000000000000 --- a/swarm/swap/swap.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swap - -import ( - "errors" - "fmt" - "strconv" - "sync" - - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/state" -) - -// SwAP Swarm Accounting Protocol -// a peer to peer micropayment system -// A node maintains an individual balance with every peer -// Only messages which have a price will be accounted for -type Swap struct { - stateStore state.Store //stateStore is needed in order to keep balances across sessions - lock sync.RWMutex //lock the balances - balances map[enode.ID]int64 //map of balances for each peer -} - -// New - swap constructor -func New(stateStore state.Store) (swap *Swap) { - swap = &Swap{ - stateStore: stateStore, - balances: make(map[enode.ID]int64), - } - return -} - -//Swap implements the protocols.Balance interface -//Add is the (sole) accounting function -func (s *Swap) Add(amount int64, peer *protocols.Peer) (err error) { - s.lock.Lock() - defer s.lock.Unlock() - - //load existing balances from the state store - err = s.loadState(peer) - if err != nil && err != state.ErrNotFound { - return - } - //adjust the balance - //if amount is negative, it will decrease, otherwise increase - s.balances[peer.ID()] += amount - //save the new balance to the state store - peerBalance := s.balances[peer.ID()] - err = s.stateStore.Put(peer.ID().String(), &peerBalance) - - log.Debug(fmt.Sprintf("balance for peer %s: %s", peer.ID().String(), strconv.FormatInt(peerBalance, 10))) - return err -} - -//GetPeerBalance returns the balance for a given peer -func (swap *Swap) GetPeerBalance(peer enode.ID) (int64, error) { - swap.lock.RLock() - defer swap.lock.RUnlock() - if p, ok := swap.balances[peer]; ok { - return p, nil - } - return 0, errors.New("Peer not found") -} - -//load balances from the state store (persisted) -func (s *Swap) loadState(peer *protocols.Peer) (err error) { - var peerBalance int64 - peerID := peer.ID() - //only load if the current instance doesn't already have this peer's - //balance in memory - if _, ok := s.balances[peerID]; !ok { - err = s.stateStore.Get(peerID.String(), &peerBalance) - s.balances[peerID] = peerBalance - } - return -} - -//Clean up Swap -func (swap *Swap) Close() { - swap.stateStore.Close() -} diff --git a/swarm/swap/swap_test.go b/swarm/swap/swap_test.go deleted file mode 100644 index f2e3ba168a4f..000000000000 --- a/swarm/swap/swap_test.go +++ /dev/null @@ -1,184 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swap - -import ( - "flag" - "fmt" - "io/ioutil" - mrand "math/rand" - "os" - "testing" - "time" - - "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/p2p/simulations/adapters" - "github.com/ethereum/go-ethereum/swarm/state" - colorable "github.com/mattn/go-colorable" -) - -var ( - loglevel = flag.Int("loglevel", 2, "verbosity of logs") -) - -func init() { - flag.Parse() - mrand.Seed(time.Now().UnixNano()) - - log.PrintOrigins(true) - log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) -} - -//Test getting a peer's balance -func TestGetPeerBalance(t *testing.T) { - //create a test swap account - swap, testDir := createTestSwap(t) - defer os.RemoveAll(testDir) - - //test for correct value - testPeer := newDummyPeer() - swap.balances[testPeer.ID()] = 888 - b, err := swap.GetPeerBalance(testPeer.ID()) - if err != nil { - t.Fatal(err) - } - if b != 888 { - t.Fatalf("Expected peer's balance to be %d, but is %d", 888, b) - } - - //test for inexistent node - id := adapters.RandomNodeConfig().ID - _, err = swap.GetPeerBalance(id) - if err == nil { - t.Fatal("Expected call to fail, but it didn't!") - } - if err.Error() != "Peer not found" { - t.Fatalf("Expected test to fail with %s, but is %s", "Peer not found", err.Error()) - } -} - -//Test that repeated bookings do correct accounting -func TestRepeatedBookings(t *testing.T) { - //create a test swap account - swap, testDir := createTestSwap(t) - defer os.RemoveAll(testDir) - - testPeer := newDummyPeer() - amount := mrand.Intn(100) - cnt := 1 + mrand.Intn(10) - for i := 0; i < cnt; i++ { - swap.Add(int64(amount), testPeer.Peer) - } - expectedBalance := int64(cnt * amount) - realBalance := swap.balances[testPeer.ID()] - if expectedBalance != realBalance { - t.Fatal(fmt.Sprintf("After %d credits of %d, expected balance to be: %d, but is: %d", cnt, amount, expectedBalance, realBalance)) - } - - testPeer2 := newDummyPeer() - amount = mrand.Intn(100) - cnt = 1 + mrand.Intn(10) - for i := 0; i < cnt; i++ { - swap.Add(0-int64(amount), testPeer2.Peer) - } - expectedBalance = int64(0 - (cnt * amount)) - realBalance = swap.balances[testPeer2.ID()] - if expectedBalance != realBalance { - t.Fatal(fmt.Sprintf("After %d debits of %d, expected balance to be: %d, but is: %d", cnt, amount, expectedBalance, realBalance)) - } - - //mixed debits and credits - amount1 := mrand.Intn(100) - amount2 := mrand.Intn(55) - amount3 := mrand.Intn(999) - swap.Add(int64(amount1), testPeer2.Peer) - swap.Add(int64(0-amount2), testPeer2.Peer) - swap.Add(int64(0-amount3), testPeer2.Peer) - - expectedBalance = expectedBalance + int64(amount1-amount2-amount3) - realBalance = swap.balances[testPeer2.ID()] - - if expectedBalance != realBalance { - t.Fatal(fmt.Sprintf("After mixed debits and credits, expected balance to be: %d, but is: %d", expectedBalance, realBalance)) - } -} - -//try restoring a balance from state store -//this is simulated by creating a node, -//assigning it an arbitrary balance, -//then closing the state store. -//Then we re-open the state store and check that -//the balance is still the same -func TestRestoreBalanceFromStateStore(t *testing.T) { - //create a test swap account - swap, testDir := createTestSwap(t) - defer os.RemoveAll(testDir) - - testPeer := newDummyPeer() - swap.balances[testPeer.ID()] = -8888 - - tmpBalance := swap.balances[testPeer.ID()] - swap.stateStore.Put(testPeer.ID().String(), &tmpBalance) - - swap.stateStore.Close() - swap.stateStore = nil - - stateStore, err := state.NewDBStore(testDir) - if err != nil { - t.Fatal(err) - } - - var newBalance int64 - stateStore.Get(testPeer.ID().String(), &newBalance) - - //compare the balances - if tmpBalance != newBalance { - t.Fatal(fmt.Sprintf("Unexpected balance value after sending cheap message test. Expected balance: %d, balance is: %d", - tmpBalance, newBalance)) - } -} - -//create a test swap account -//creates a stateStore for persistence and a Swap account -func createTestSwap(t *testing.T) (*Swap, string) { - dir, err := ioutil.TempDir("", "swap_test_store") - if err != nil { - t.Fatal(err) - } - stateStore, err2 := state.NewDBStore(dir) - if err2 != nil { - t.Fatal(err2) - } - swap := New(stateStore) - return swap, dir -} - -type dummyPeer struct { - *protocols.Peer -} - -//creates a dummy protocols.Peer with dummy MsgReadWriter -func newDummyPeer() *dummyPeer { - id := adapters.RandomNodeConfig().ID - protoPeer := protocols.NewPeer(p2p.NewPeer(id, "testPeer", nil), nil, nil) - dummy := &dummyPeer{ - Peer: protoPeer, - } - return dummy -} diff --git a/swarm/swarm.go b/swarm/swarm.go deleted file mode 100644 index 3ab98b3ab55a..000000000000 --- a/swarm/swarm.go +++ /dev/null @@ -1,554 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swarm - -import ( - "bytes" - "context" - "crypto/ecdsa" - "fmt" - "io" - "math/big" - "net" - "path/filepath" - "strings" - "time" - "unicode" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/contracts/chequebook" - "github.com/ethereum/go-ethereum/contracts/ens" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/p2p" - "github.com/ethereum/go-ethereum/p2p/enode" - "github.com/ethereum/go-ethereum/p2p/protocols" - "github.com/ethereum/go-ethereum/params" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/api" - httpapi "github.com/ethereum/go-ethereum/swarm/api/http" - "github.com/ethereum/go-ethereum/swarm/fuse" - "github.com/ethereum/go-ethereum/swarm/log" - "github.com/ethereum/go-ethereum/swarm/network" - "github.com/ethereum/go-ethereum/swarm/network/stream" - "github.com/ethereum/go-ethereum/swarm/pss" - "github.com/ethereum/go-ethereum/swarm/state" - "github.com/ethereum/go-ethereum/swarm/storage" - "github.com/ethereum/go-ethereum/swarm/storage/feed" - "github.com/ethereum/go-ethereum/swarm/storage/mock" - "github.com/ethereum/go-ethereum/swarm/swap" - "github.com/ethereum/go-ethereum/swarm/tracing" -) - -var ( - updateGaugesPeriod = 5 * time.Second - startCounter = metrics.NewRegisteredCounter("stack,start", nil) - stopCounter = metrics.NewRegisteredCounter("stack,stop", nil) - uptimeGauge = metrics.NewRegisteredGauge("stack.uptime", nil) - requestsCacheGauge = metrics.NewRegisteredGauge("storage.cache.requests.size", nil) -) - -// the swarm stack -type Swarm struct { - config *api.Config // swarm configuration - api *api.API // high level api layer (fs/manifest) - dns api.Resolver // DNS registrar - fileStore *storage.FileStore // distributed preimage archive, the local API to the storage with document level storage/retrieval support - streamer *stream.Registry - bzz *network.Bzz // the logistic manager - backend chequebook.Backend // simple blockchain Backend - privateKey *ecdsa.PrivateKey - netStore *storage.NetStore - sfs *fuse.SwarmFS // need this to cleanup all the active mounts on node exit - ps *pss.Pss - swap *swap.Swap - stateStore *state.DBStore - accountingMetrics *protocols.AccountingMetrics - cleanupFuncs []func() error - - tracerClose io.Closer -} - -// NewSwarm creates a new swarm service instance -// implements node.Service -// If mockStore is not nil, it will be used as the storage for chunk data. -// MockStore should be used only for testing. -func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err error) { - if bytes.Equal(common.FromHex(config.PublicKey), storage.ZeroAddr) { - return nil, fmt.Errorf("empty public key") - } - if bytes.Equal(common.FromHex(config.BzzKey), storage.ZeroAddr) { - return nil, fmt.Errorf("empty bzz key") - } - - var backend chequebook.Backend - if config.SwapAPI != "" && config.SwapEnabled { - log.Info("connecting to SWAP API", "url", config.SwapAPI) - backend, err = ethclient.Dial(config.SwapAPI) - if err != nil { - return nil, fmt.Errorf("error connecting to SWAP API %s: %s", config.SwapAPI, err) - } - } - - self = &Swarm{ - config: config, - backend: backend, - privateKey: config.ShiftPrivateKey(), - cleanupFuncs: []func() error{}, - } - log.Debug("Setting up Swarm service components") - - config.HiveParams.Discovery = true - - bzzconfig := &network.BzzConfig{ - NetworkID: config.NetworkID, - OverlayAddr: common.FromHex(config.BzzKey), - HiveParams: config.HiveParams, - LightNode: config.LightNodeEnabled, - BootnodeMode: config.BootnodeMode, - } - - self.stateStore, err = state.NewDBStore(filepath.Join(config.Path, "state-store.db")) - if err != nil { - return - } - - // set up high level api - var resolver *api.MultiResolver - if len(config.EnsAPIs) > 0 { - opts := []api.MultiResolverOption{} - for _, c := range config.EnsAPIs { - tld, endpoint, addr := parseEnsAPIAddress(c) - r, err := newEnsClient(endpoint, addr, config, self.privateKey) - if err != nil { - return nil, err - } - opts = append(opts, api.MultiResolverOptionWithResolver(r, tld)) - - } - resolver = api.NewMultiResolver(opts...) - self.dns = resolver - } - - lstore, err := storage.NewLocalStore(config.LocalStoreParams, mockStore) - if err != nil { - return nil, err - } - - self.netStore, err = storage.NewNetStore(lstore, nil) - if err != nil { - return nil, err - } - - to := network.NewKademlia( - common.FromHex(config.BzzKey), - network.NewKadParams(), - ) - delivery := stream.NewDelivery(to, self.netStore) - self.netStore.NewNetFetcherFunc = network.NewFetcherFactory(delivery.RequestFromPeers, config.DeliverySkipCheck).New - - if config.SwapEnabled { - balancesStore, err := state.NewDBStore(filepath.Join(config.Path, "balances.db")) - if err != nil { - return nil, err - } - self.swap = swap.New(balancesStore) - self.accountingMetrics = protocols.SetupAccountingMetrics(10*time.Second, filepath.Join(config.Path, "metrics.db")) - } - - var nodeID enode.ID - if err := nodeID.UnmarshalText([]byte(config.NodeID)); err != nil { - return nil, err - } - - syncing := stream.SyncingAutoSubscribe - if !config.SyncEnabled || config.LightNodeEnabled { - syncing = stream.SyncingDisabled - } - - retrieval := stream.RetrievalEnabled - if config.LightNodeEnabled { - retrieval = stream.RetrievalClientOnly - } - - registryOptions := &stream.RegistryOptions{ - SkipCheck: config.DeliverySkipCheck, - Syncing: syncing, - Retrieval: retrieval, - SyncUpdateDelay: config.SyncUpdateDelay, - MaxPeerServers: config.MaxStreamPeerServers, - } - self.streamer = stream.NewRegistry(nodeID, delivery, self.netStore, self.stateStore, registryOptions, self.swap) - - // Swarm Hash Merklised Chunking for Arbitrary-length Document/File storage - self.fileStore = storage.NewFileStore(self.netStore, self.config.FileStoreParams) - - var feedsHandler *feed.Handler - fhParams := &feed.HandlerParams{} - - feedsHandler = feed.NewHandler(fhParams) - feedsHandler.SetStore(self.netStore) - - lstore.Validators = []storage.ChunkValidator{ - storage.NewContentAddressValidator(storage.MakeHashFunc(storage.DefaultHash)), - feedsHandler, - } - - err = lstore.Migrate() - if err != nil { - return nil, err - } - - log.Debug("Setup local storage") - - self.bzz = network.NewBzz(bzzconfig, to, self.stateStore, self.streamer.GetSpec(), self.streamer.Run) - - // Pss = postal service over swarm (devp2p over bzz) - self.ps, err = pss.NewPss(to, config.Pss) - if err != nil { - return nil, err - } - if pss.IsActiveHandshake { - pss.SetHandshakeController(self.ps, pss.NewHandshakeParams()) - } - - self.api = api.NewAPI(self.fileStore, self.dns, feedsHandler, self.privateKey) - - self.sfs = fuse.NewSwarmFS(self.api) - log.Debug("Initialized FUSE filesystem") - - return self, nil -} - -// parseEnsAPIAddress parses string according to format -// [tld:][contract-addr@]url and returns ENSClientConfig structure -// with endpoint, contract address and TLD. -func parseEnsAPIAddress(s string) (tld, endpoint string, addr common.Address) { - isAllLetterString := func(s string) bool { - for _, r := range s { - if !unicode.IsLetter(r) { - return false - } - } - return true - } - endpoint = s - if i := strings.Index(endpoint, ":"); i > 0 { - if isAllLetterString(endpoint[:i]) && len(endpoint) > i+2 && endpoint[i+1:i+3] != "//" { - tld = endpoint[:i] - endpoint = endpoint[i+1:] - } - } - if i := strings.Index(endpoint, "@"); i > 0 { - addr = common.HexToAddress(endpoint[:i]) - endpoint = endpoint[i+1:] - } - return -} - -// ensClient provides functionality for api.ResolveValidator -type ensClient struct { - *ens.ENS - *ethclient.Client -} - -// newEnsClient creates a new ENS client for that is a consumer of -// a ENS API on a specific endpoint. It is used as a helper function -// for creating multiple resolvers in NewSwarm function. -func newEnsClient(endpoint string, addr common.Address, config *api.Config, privkey *ecdsa.PrivateKey) (*ensClient, error) { - log.Info("connecting to ENS API", "url", endpoint) - client, err := rpc.Dial(endpoint) - if err != nil { - return nil, fmt.Errorf("error connecting to ENS API %s: %s", endpoint, err) - } - ethClient := ethclient.NewClient(client) - - ensRoot := config.EnsRoot - if addr != (common.Address{}) { - ensRoot = addr - } else { - a, err := detectEnsAddr(client) - if err == nil { - ensRoot = a - } else { - log.Warn(fmt.Sprintf("could not determine ENS contract address, using default %s", ensRoot), "err", err) - } - } - transactOpts := bind.NewKeyedTransactor(privkey) - dns, err := ens.NewENS(transactOpts, ensRoot, ethClient) - if err != nil { - return nil, err - } - log.Debug(fmt.Sprintf("-> Swarm Domain Name Registrar %v @ address %v", endpoint, ensRoot.Hex())) - return &ensClient{ - ENS: dns, - Client: ethClient, - }, err -} - -// detectEnsAddr determines the ENS contract address by getting both the -// version and genesis hash using the client and matching them to either -// mainnet or testnet addresses -func detectEnsAddr(client *rpc.Client) (common.Address, error) { - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - var version string - if err := client.CallContext(ctx, &version, "net_version"); err != nil { - return common.Address{}, err - } - - block, err := ethclient.NewClient(client).BlockByNumber(ctx, big.NewInt(0)) - if err != nil { - return common.Address{}, err - } - - switch { - - case version == "1" && block.Hash() == params.MainnetGenesisHash: - log.Info("using Mainnet ENS contract address", "addr", ens.MainNetAddress) - return ens.MainNetAddress, nil - - case version == "3" && block.Hash() == params.TestnetGenesisHash: - log.Info("using Testnet ENS contract address", "addr", ens.TestNetAddress) - return ens.TestNetAddress, nil - - default: - return common.Address{}, fmt.Errorf("unknown version and genesis hash: %s %s", version, block.Hash()) - } -} - -/* -Start is called when the stack is started -* starts the network kademlia hive peer management -* (starts netStore level 0 api) -* starts DPA level 1 api (chunking -> store/retrieve requests) -* (starts level 2 api) -* starts http proxy server -* registers url scheme handlers for bzz, etc -* TODO: start subservices like sword, swear, swarmdns -*/ -// implements the node.Service interface -func (s *Swarm) Start(srv *p2p.Server) error { - startTime := time.Now() - - s.tracerClose = tracing.Closer - - // update uaddr to correct enode - newaddr := s.bzz.UpdateLocalAddr([]byte(srv.Self().String())) - log.Info("Updated bzz local addr", "oaddr", fmt.Sprintf("%x", newaddr.OAddr), "uaddr", fmt.Sprintf("%s", newaddr.UAddr)) - // set chequebook - //TODO: Currently if swap is enabled and no chequebook (or inexistent) contract is provided, the node would crash. - //Once we integrate back the contracts, this check MUST be revisited - if s.config.SwapEnabled && s.config.SwapAPI != "" { - ctx := context.Background() // The initial setup has no deadline. - err := s.SetChequebook(ctx) - if err != nil { - return fmt.Errorf("Unable to set chequebook for SWAP: %v", err) - } - log.Debug(fmt.Sprintf("-> cheque book for SWAP: %v", s.config.Swap.Chequebook())) - } else { - log.Debug(fmt.Sprintf("SWAP disabled: no cheque book set")) - } - - log.Info("Starting bzz service") - - err := s.bzz.Start(srv) - if err != nil { - log.Error("bzz failed", "err", err) - return err - } - log.Info("Swarm network started", "bzzaddr", fmt.Sprintf("%x", s.bzz.Hive.BaseAddr())) - - if s.ps != nil { - s.ps.Start(srv) - } - - // start swarm http proxy server - if s.config.Port != "" { - addr := net.JoinHostPort(s.config.ListenAddr, s.config.Port) - server := httpapi.NewServer(s.api, s.config.Cors) - - if s.config.Cors != "" { - log.Debug("Swarm HTTP proxy CORS headers", "allowedOrigins", s.config.Cors) - } - - log.Debug("Starting Swarm HTTP proxy", "port", s.config.Port) - go func() { - err := server.ListenAndServe(addr) - if err != nil { - log.Error("Could not start Swarm HTTP proxy", "err", err.Error()) - } - }() - } - - doneC := make(chan struct{}) - - s.cleanupFuncs = append(s.cleanupFuncs, func() error { - close(doneC) - return nil - }) - - go func(time.Time) { - for { - select { - case <-time.After(updateGaugesPeriod): - uptimeGauge.Update(time.Since(startTime).Nanoseconds()) - requestsCacheGauge.Update(int64(s.netStore.RequestsCacheLen())) - case <-doneC: - return - } - } - }(startTime) - - startCounter.Inc(1) - s.streamer.Start(srv) - return nil -} - -// implements the node.Service interface -// stops all component services. -func (s *Swarm) Stop() error { - if s.tracerClose != nil { - err := s.tracerClose.Close() - if err != nil { - return err - } - } - - if s.ps != nil { - s.ps.Stop() - } - if ch := s.config.Swap.Chequebook(); ch != nil { - ch.Stop() - ch.Save() - } - if s.swap != nil { - s.swap.Close() - } - if s.accountingMetrics != nil { - s.accountingMetrics.Close() - } - if s.netStore != nil { - s.netStore.Close() - } - s.sfs.Stop() - stopCounter.Inc(1) - s.streamer.Stop() - - err := s.bzz.Stop() - if s.stateStore != nil { - s.stateStore.Close() - } - - for _, cleanF := range s.cleanupFuncs { - err = cleanF() - if err != nil { - log.Error("encountered an error while running cleanup function", "err", err) - break - } - } - return err -} - -// Protocols implements the node.Service interface -func (s *Swarm) Protocols() (protos []p2p.Protocol) { - if s.config.BootnodeMode { - protos = append(protos, s.bzz.Protocols()...) - } else { - protos = append(protos, s.bzz.Protocols()...) - - if s.ps != nil { - protos = append(protos, s.ps.Protocols()...) - } - } - return -} - -// implements node.Service -// APIs returns the RPC API descriptors the Swarm implementation offers -func (s *Swarm) APIs() []rpc.API { - - apis := []rpc.API{ - // public APIs - { - Namespace: "bzz", - Version: "3.0", - Service: &Info{s.config, chequebook.ContractParams}, - Public: true, - }, - // admin APIs - { - Namespace: "bzz", - Version: "3.0", - Service: api.NewInspector(s.api, s.bzz.Hive, s.netStore), - Public: false, - }, - { - Namespace: "chequebook", - Version: chequebook.Version, - Service: chequebook.NewAPI(s.config.Swap.Chequebook), - Public: false, - }, - { - Namespace: "swarmfs", - Version: fuse.Swarmfs_Version, - Service: s.sfs, - Public: false, - }, - { - Namespace: "accounting", - Version: protocols.AccountingVersion, - Service: protocols.NewAccountingApi(s.accountingMetrics), - Public: false, - }, - } - - apis = append(apis, s.bzz.APIs()...) - - if s.ps != nil { - apis = append(apis, s.ps.APIs()...) - } - - return apis -} - -// SetChequebook ensures that the local checquebook is set up on chain. -func (s *Swarm) SetChequebook(ctx context.Context) error { - err := s.config.Swap.SetChequebook(ctx, s.backend, s.config.Path) - if err != nil { - return err - } - log.Info(fmt.Sprintf("new chequebook set (%v): saving config file, resetting all connections in the hive", s.config.Swap.Contract.Hex())) - return nil -} - -// RegisterPssProtocol adds a devp2p protocol to the swarm node's Pss instance -func (s *Swarm) RegisterPssProtocol(topic *pss.Topic, spec *protocols.Spec, targetprotocol *p2p.Protocol, options *pss.ProtocolParams) (*pss.Protocol, error) { - return pss.RegisterProtocol(s.ps, topic, spec, targetprotocol, options) -} - -// serialisable info about swarm -type Info struct { - *api.Config - *chequebook.Params -} - -func (s *Info) Info() *Info { - return s -} diff --git a/swarm/swarm_test.go b/swarm/swarm_test.go deleted file mode 100644 index d85eb9118577..000000000000 --- a/swarm/swarm_test.go +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package swarm - -import ( - "context" - "encoding/hex" - "io/ioutil" - "math/rand" - "os" - "path" - "runtime" - "strings" - "testing" - "time" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/rpc" - "github.com/ethereum/go-ethereum/swarm/api" -) - -// TestNewSwarm validates Swarm fields in repsect to the provided configuration. -func TestNewSwarm(t *testing.T) { - dir, err := ioutil.TempDir("", "swarm") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - // a simple rpc endpoint for testing dialing - ipcEndpoint := path.Join(dir, "TestSwarm.ipc") - - // windows namedpipes are not on filesystem but on NPFS - if runtime.GOOS == "windows" { - b := make([]byte, 8) - rand.Read(b) - ipcEndpoint = `\\.\pipe\TestSwarm-` + hex.EncodeToString(b) - } - - _, server, err := rpc.StartIPCEndpoint(ipcEndpoint, nil) - if err != nil { - t.Error(err) - } - defer server.Stop() - - for _, tc := range []struct { - name string - configure func(*api.Config) - check func(*testing.T, *Swarm, *api.Config) - }{ - { - name: "defaults", - configure: nil, - check: func(t *testing.T, s *Swarm, config *api.Config) { - if s.config != config { - t.Error("config is not the same object") - } - if s.backend != nil { - t.Error("backend is not nil") - } - if s.privateKey == nil { - t.Error("private key is not set") - } - if !s.config.HiveParams.Discovery { - t.Error("config.HiveParams.Discovery is false, must be true regardless the configuration") - } - if s.dns != nil { - t.Error("dns initialized, but it should not be") - } - if s.netStore == nil { - t.Error("netStore not initialized") - } - if s.streamer == nil { - t.Error("streamer not initialized") - } - if s.fileStore == nil { - t.Error("fileStore not initialized") - } - if s.bzz == nil { - t.Error("bzz not initialized") - } - if s.ps == nil { - t.Error("pss not initialized") - } - if s.api == nil { - t.Error("api not initialized") - } - if s.sfs == nil { - t.Error("swarm filesystem not initialized") - } - }, - }, - { - name: "with swap", - configure: func(config *api.Config) { - config.SwapAPI = ipcEndpoint - config.SwapEnabled = true - }, - check: func(t *testing.T, s *Swarm, _ *api.Config) { - if s.backend == nil { - t.Error("backend is nil") - } - }, - }, - { - name: "with swap disabled", - configure: func(config *api.Config) { - config.SwapAPI = ipcEndpoint - config.SwapEnabled = false - }, - check: func(t *testing.T, s *Swarm, _ *api.Config) { - if s.backend != nil { - t.Error("backend is not nil") - } - }, - }, - { - name: "with swap enabled and api endpoint blank", - configure: func(config *api.Config) { - config.SwapAPI = "" - config.SwapEnabled = true - }, - check: func(t *testing.T, s *Swarm, _ *api.Config) { - if s.backend != nil { - t.Error("backend is not nil") - } - }, - }, - { - name: "ens", - configure: func(config *api.Config) { - config.EnsAPIs = []string{ - "http://127.0.0.1:8888", - } - }, - check: func(t *testing.T, s *Swarm, _ *api.Config) { - if s.dns == nil { - t.Error("dns is not initialized") - } - }, - }, - } { - t.Run(tc.name, func(t *testing.T) { - config := api.NewConfig() - - dir, err := ioutil.TempDir("", "swarm") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - config.Path = dir - - privkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - - config.Init(privkey) - - if tc.configure != nil { - tc.configure(config) - } - - s, err := NewSwarm(config, nil) - if err != nil { - t.Fatal(err) - } - - if tc.check != nil { - tc.check(t, s, config) - } - }) - } -} - -func TestParseEnsAPIAddress(t *testing.T) { - for _, x := range []struct { - description string - value string - tld string - endpoint string - addr common.Address - }{ - { - description: "IPC endpoint", - value: "/data/testnet/geth.ipc", - endpoint: "/data/testnet/geth.ipc", - }, - { - description: "HTTP endpoint", - value: "http://127.0.0.1:1234", - endpoint: "http://127.0.0.1:1234", - }, - { - description: "WS endpoint", - value: "ws://127.0.0.1:1234", - endpoint: "ws://127.0.0.1:1234", - }, - { - description: "IPC Endpoint and TLD", - value: "test:/data/testnet/geth.ipc", - endpoint: "/data/testnet/geth.ipc", - tld: "test", - }, - { - description: "HTTP endpoint and TLD", - value: "test:http://127.0.0.1:1234", - endpoint: "http://127.0.0.1:1234", - tld: "test", - }, - { - description: "WS endpoint and TLD", - value: "test:ws://127.0.0.1:1234", - endpoint: "ws://127.0.0.1:1234", - tld: "test", - }, - { - description: "IPC Endpoint and contract address", - value: "314159265dD8dbb310642f98f50C066173C1259b@/data/testnet/geth.ipc", - endpoint: "/data/testnet/geth.ipc", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - }, - { - description: "HTTP endpoint and contract address", - value: "314159265dD8dbb310642f98f50C066173C1259b@http://127.0.0.1:1234", - endpoint: "http://127.0.0.1:1234", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - }, - { - description: "WS endpoint and contract address", - value: "314159265dD8dbb310642f98f50C066173C1259b@ws://127.0.0.1:1234", - endpoint: "ws://127.0.0.1:1234", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - }, - { - description: "IPC Endpoint, TLD and contract address", - value: "test:314159265dD8dbb310642f98f50C066173C1259b@/data/testnet/geth.ipc", - endpoint: "/data/testnet/geth.ipc", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - tld: "test", - }, - { - description: "HTTP endpoint, TLD and contract address", - value: "eth:314159265dD8dbb310642f98f50C066173C1259b@http://127.0.0.1:1234", - endpoint: "http://127.0.0.1:1234", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - tld: "eth", - }, - { - description: "WS endpoint, TLD and contract address", - value: "eth:314159265dD8dbb310642f98f50C066173C1259b@ws://127.0.0.1:1234", - endpoint: "ws://127.0.0.1:1234", - addr: common.HexToAddress("314159265dD8dbb310642f98f50C066173C1259b"), - tld: "eth", - }, - } { - t.Run(x.description, func(t *testing.T) { - tld, endpoint, addr := parseEnsAPIAddress(x.value) - if endpoint != x.endpoint { - t.Errorf("expected Endpoint %q, got %q", x.endpoint, endpoint) - } - if addr != x.addr { - t.Errorf("expected ContractAddress %q, got %q", x.addr.String(), addr.String()) - } - if tld != x.tld { - t.Errorf("expected TLD %q, got %q", x.tld, tld) - } - }) - } -} - -// TestLocalStoreAndRetrieve runs multiple tests where different size files are uploaded -// to a single Swarm instance using API Store and checked against the content returned -// by API Retrieve function. -// -// This test is intended to validate functionality of chunker store and join functions -// and their intergartion into Swarm, without comparing results with ones produced by -// another chunker implementation, as it is done in swarm/storage tests. -func TestLocalStoreAndRetrieve(t *testing.T) { - config := api.NewConfig() - - dir, err := ioutil.TempDir("", "node") - if err != nil { - t.Fatal(err) - } - defer os.RemoveAll(dir) - - config.Path = dir - - privkey, err := crypto.GenerateKey() - if err != nil { - t.Fatal(err) - } - - config.Init(privkey) - - swarm, err := NewSwarm(config, nil) - if err != nil { - t.Fatal(err) - } - - // by default, test only the lonely chunk cases - sizes := []int{1, 60, 4097, 524288 + 1, 7*524288 + 1} - - if *longrunning { - // test broader set of cases if -longruning flag is set - sizes = append(sizes, 83, 179, 253, 1024, 4095, 4096, 8191, 8192, 8193, 12287, 12288, 12289, 123456, 2345678, 67298391, 524288, 524288+4096, 524288+4097, 7*524288, 7*524288+4096, 7*524288+4097, 128*524288+1, 128*524288, 128*524288+4096, 128*524288+4097, 816778334) - } - for _, n := range sizes { - testLocalStoreAndRetrieve(t, swarm, n, true) - testLocalStoreAndRetrieve(t, swarm, n, false) - } -} - -// testLocalStoreAndRetrieve is using a single Swarm instance, to upload -// a file of length n with optional random data using API Store function, -// and checks the output of API Retrieve function on the same instance. -// This is a regression test for issue -// https://github.com/ethersphere/go-ethereum/issues/639 -// where pyramid chunker did not split correctly files with lengths that -// are edge cases for chunk and tree parameters, depending whether there -// is a tree chunk with only one data chunk and how the compress functionality -// changed the tree. -func testLocalStoreAndRetrieve(t *testing.T, swarm *Swarm, n int, randomData bool) { - slice := make([]byte, n) - if randomData { - rand.Seed(time.Now().UnixNano()) - rand.Read(slice) - } - dataPut := string(slice) - - ctx := context.TODO() - k, wait, err := swarm.api.Store(ctx, strings.NewReader(dataPut), int64(len(dataPut)), false) - if err != nil { - t.Fatal(err) - } - if wait != nil { - err = wait(ctx) - if err != nil { - t.Fatal(err) - } - } - - r, _ := swarm.api.Retrieve(context.TODO(), k) - - d, err := ioutil.ReadAll(r) - if err != nil { - t.Fatal(err) - } - dataGet := string(d) - - if len(dataPut) != len(dataGet) { - t.Fatalf("data not matched: length expected %v, got %v", len(dataPut), len(dataGet)) - } else { - if dataPut != dataGet { - t.Fatal("data not matched") - } - } -} diff --git a/swarm/testutil/file.go b/swarm/testutil/file.go deleted file mode 100644 index 70732aa92efe..000000000000 --- a/swarm/testutil/file.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2017 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package testutil - -import ( - "bytes" - "io" - "io/ioutil" - "math/rand" - "os" - "strings" - "testing" -) - -// TempFileWithContent is a helper function that creates a temp file that contains the following string content then closes the file handle -// it returns the complete file path -func TempFileWithContent(t *testing.T, content string) string { - tempFile, err := ioutil.TempFile("", "swarm-temp-file") - if err != nil { - t.Fatal(err) - } - - _, err = io.Copy(tempFile, strings.NewReader(content)) - if err != nil { - os.RemoveAll(tempFile.Name()) - t.Fatal(err) - } - if err = tempFile.Close(); err != nil { - t.Fatal(err) - } - return tempFile.Name() -} - -// RandomBytes returns pseudo-random deterministic result -// because test fails must be reproducible -func RandomBytes(seed, length int) []byte { - b := make([]byte, length) - reader := rand.New(rand.NewSource(int64(seed))) - for n := 0; n < length; { - read, err := reader.Read(b[n:]) - if err != nil { - panic(err) - } - n += read - } - return b -} - -func RandomReader(seed, length int) *bytes.Reader { - return bytes.NewReader(RandomBytes(seed, length)) -} diff --git a/swarm/tracing/tracing.go b/swarm/tracing/tracing.go deleted file mode 100644 index f95fa41b8f43..000000000000 --- a/swarm/tracing/tracing.go +++ /dev/null @@ -1,102 +0,0 @@ -package tracing - -import ( - "io" - "os" - "strings" - "time" - - "github.com/ethereum/go-ethereum/log" - jaeger "github.com/uber/jaeger-client-go" - jaegercfg "github.com/uber/jaeger-client-go/config" - cli "gopkg.in/urfave/cli.v1" -) - -var Enabled bool = false - -// TracingEnabledFlag is the CLI flag name to use to enable trace collections. -const TracingEnabledFlag = "tracing" - -var ( - Closer io.Closer -) - -var ( - TracingFlag = cli.BoolFlag{ - Name: TracingEnabledFlag, - Usage: "Enable tracing", - } - TracingEndpointFlag = cli.StringFlag{ - Name: "tracing.endpoint", - Usage: "Tracing endpoint", - Value: "0.0.0.0:6831", - } - TracingSvcFlag = cli.StringFlag{ - Name: "tracing.svc", - Usage: "Tracing service name", - Value: "swarm", - } -) - -// Flags holds all command-line flags required for tracing collection. -var Flags = []cli.Flag{ - TracingFlag, - TracingEndpointFlag, - TracingSvcFlag, -} - -// Init enables or disables the open tracing system. -func init() { - for _, arg := range os.Args { - if flag := strings.TrimLeft(arg, "-"); flag == TracingEnabledFlag { - Enabled = true - } - } -} - -func Setup(ctx *cli.Context) { - if Enabled { - log.Info("Enabling opentracing") - var ( - endpoint = ctx.GlobalString(TracingEndpointFlag.Name) - svc = ctx.GlobalString(TracingSvcFlag.Name) - ) - - Closer = initTracer(endpoint, svc) - } -} - -func initTracer(endpoint, svc string) (closer io.Closer) { - // Sample configuration for testing. Use constant sampling to sample every trace - // and enable LogSpan to log every span via configured Logger. - cfg := jaegercfg.Configuration{ - Sampler: &jaegercfg.SamplerConfig{ - Type: jaeger.SamplerTypeConst, - Param: 1, - }, - Reporter: &jaegercfg.ReporterConfig{ - LogSpans: true, - BufferFlushInterval: 1 * time.Second, - LocalAgentHostPort: endpoint, - }, - } - - // Example logger and metrics factory. Use github.com/uber/jaeger-client-go/log - // and github.com/uber/jaeger-lib/metrics respectively to bind to real logging and metrics - // frameworks. - //jLogger := jaegerlog.StdLogger - //jMetricsFactory := metrics.NullFactory - - // Initialize tracer with a logger and a metrics factory - closer, err := cfg.InitGlobalTracer( - svc, - //jaegercfg.Logger(jLogger), - //jaegercfg.Metrics(jMetricsFactory), - //jaegercfg.Observer(rpcmetrics.NewObserver(jMetricsFactory, rpcmetrics.DefaultNameNormalizer)), - ) - if err != nil { - log.Error("Could not initialize Jaeger tracer", "err", err) - } - - return closer -} diff --git a/swarm/version/version.go b/swarm/version/version.go deleted file mode 100644 index 820aec2c051f..000000000000 --- a/swarm/version/version.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package version - -import ( - "fmt" -) - -const ( - VersionMajor = 0 // Major version component of the current release - VersionMinor = 3 // Minor version component of the current release - VersionPatch = 11 // Patch version component of the current release - VersionMeta = "stable" // Version metadata to append to the version string -) - -// Version holds the textual version string. -var Version = func() string { - return fmt.Sprintf("%d.%d.%d", VersionMajor, VersionMinor, VersionPatch) -}() - -// VersionWithMeta holds the textual version string including the metadata. -var VersionWithMeta = func() string { - v := Version - if VersionMeta != "" { - v += "-" + VersionMeta - } - return v -}() - -// Git SHA1 commit hash of the release, will be set by main.init() function -var GitCommit string - -// ArchiveVersion holds the textual version string used for Swarm archives. -// e.g. "0.3.0-dea1ce05" for stable releases, or -// "0.3.1-unstable-21c059b6" for unstable releases -func ArchiveVersion(gitCommit string) string { - vsn := Version - if VersionMeta != "stable" { - vsn += "-" + VersionMeta - } - if len(gitCommit) >= 8 { - vsn += "-" + gitCommit[:8] - } - return vsn -} - -func VersionWithCommit(gitCommit string) string { - vsn := Version - if len(gitCommit) >= 8 { - vsn += "-" + gitCommit[:8] - } - return vsn -} diff --git a/tests/block_test.go b/tests/block_test.go index 711a3f8695b7..3a55e4c34fba 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -26,27 +26,31 @@ func TestBlockchain(t *testing.T) { bt := new(testMatcher) // General state tests are 'exported' as blockchain tests, but we can run them natively. bt.skipLoad(`^GeneralStateTests/`) - // Skip random failures due to selfish mining test. - bt.skipLoad(`^bcForgedTest/bcForkUncle\.json`) - bt.skipLoad(`^bcMultiChainTest/(ChainAtoChainB_blockorder|CallContractFromNotBestBlock)`) - bt.skipLoad(`^bcTotalDifficultyTest/(lotsOfLeafs|lotsOfBranches|sideChainWithMoreTransactions)`) + // Skip random failures due to selfish mining test + bt.skipLoad(`.*bcForgedTest/bcForkUncle\.json`) + // Slow tests - bt.slow(`^bcExploitTest/DelegateCallSpam.json`) - bt.slow(`^bcExploitTest/ShanghaiLove.json`) - bt.slow(`^bcExploitTest/SuicideIssue.json`) - bt.slow(`^bcForkStressTest/`) - bt.slow(`^bcGasPricerTest/RPC_API_Test.json`) - bt.slow(`^bcWalletTest/`) - - // Still failing tests that we need to look into - //bt.fails(`^bcStateTests/suicideThenCheckBalance.json/suicideThenCheckBalance_Constantinople`, "TODO: investigate") - //bt.fails(`^bcStateTests/suicideStorageCheckVCreate2.json/suicideStorageCheckVCreate2_Constantinople`, "TODO: investigate") - //bt.fails(`^bcStateTests/suicideStorageCheckVCreate.json/suicideStorageCheckVCreate_Constantinople`, "TODO: investigate") - //bt.fails(`^bcStateTests/suicideStorageCheck.json/suicideStorageCheck_Constantinople`, "TODO: investigate") + bt.slow(`.*bcExploitTest/DelegateCallSpam.json`) + bt.slow(`.*bcExploitTest/ShanghaiLove.json`) + bt.slow(`.*bcExploitTest/SuicideIssue.json`) + bt.slow(`.*/bcForkStressTest/`) + bt.slow(`.*/bcGasPricerTest/RPC_API_Test.json`) + bt.slow(`.*/bcWalletTest/`) + + // Very slow test + bt.skipLoad(`.*/stTimeConsuming/.*`) + + // test takes a lot for time and goes easily OOM because of sha3 calculation on a huge range, + // using 4.6 TGas + bt.skipLoad(`.*randomStatetest94.json.*`) bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) { if err := bt.checkFailure(t, name, test.Run()); err != nil { t.Error(err) } }) + + // There is also a LegacyTests folder, containing blockchain tests generated + // prior to Istanbul. However, they are all derived from GeneralStateTests, + // which run natively, so there's no reason to run them here. } diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 9fa69bf4ed7e..81dd7b1d042a 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -30,10 +30,10 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -82,7 +82,7 @@ type btHeader struct { Difficulty *big.Int GasLimit uint64 GasUsed uint64 - Timestamp *big.Int + Timestamp uint64 } type btHeaderMarshaling struct { @@ -91,7 +91,7 @@ type btHeaderMarshaling struct { Difficulty *math.HexOrDecimal256 GasLimit math.HexOrDecimal64 GasUsed math.HexOrDecimal64 - Timestamp *math.HexOrDecimal256 + Timestamp math.HexOrDecimal64 } func (t *BlockTest) Run() error { @@ -101,7 +101,7 @@ func (t *BlockTest) Run() error { } // import pre accounts & construct test genesis block & state root - db := ethdb.NewMemDatabase() + db := rawdb.NewMemoryDatabase() gblock, err := t.genesis(config).Commit(db) if err != nil { return err @@ -146,7 +146,7 @@ func (t *BlockTest) genesis(config *params.ChainConfig) *core.Genesis { return &core.Genesis{ Config: config, Nonce: t.json.Genesis.Nonce.Uint64(), - Timestamp: t.json.Genesis.Timestamp.Uint64(), + Timestamp: t.json.Genesis.Timestamp, ParentHash: t.json.Genesis.ParentHash, ExtraData: t.json.Genesis.ExtraData, GasLimit: t.json.Genesis.GasLimit, @@ -248,7 +248,7 @@ func validateHeader(h *btHeader, h2 *types.Header) error { if h.GasUsed != h2.GasUsed { return fmt.Errorf("GasUsed: want: %d have: %d", h.GasUsed, h2.GasUsed) } - if h.Timestamp.Cmp(h2.Time) != 0 { + if h.Timestamp != h2.Time { return fmt.Errorf("Timestamp: want: %v have: %v", h.Timestamp, h2.Time) } return nil diff --git a/tests/difficulty_test_util.go b/tests/difficulty_test_util.go index 00d699cf759f..fe6e90b027f2 100644 --- a/tests/difficulty_test_util.go +++ b/tests/difficulty_test_util.go @@ -30,18 +30,18 @@ import ( //go:generate gencodec -type DifficultyTest -field-override difficultyTestMarshaling -out gen_difficultytest.go type DifficultyTest struct { - ParentTimestamp *big.Int `json:"parentTimestamp"` + ParentTimestamp uint64 `json:"parentTimestamp"` ParentDifficulty *big.Int `json:"parentDifficulty"` UncleHash common.Hash `json:"parentUncles"` - CurrentTimestamp *big.Int `json:"currentTimestamp"` + CurrentTimestamp uint64 `json:"currentTimestamp"` CurrentBlockNumber uint64 `json:"currentBlockNumber"` CurrentDifficulty *big.Int `json:"currentDifficulty"` } type difficultyTestMarshaling struct { - ParentTimestamp *math.HexOrDecimal256 + ParentTimestamp math.HexOrDecimal64 ParentDifficulty *math.HexOrDecimal256 - CurrentTimestamp *math.HexOrDecimal256 + CurrentTimestamp math.HexOrDecimal64 CurrentDifficulty *math.HexOrDecimal256 UncleHash common.Hash CurrentBlockNumber math.HexOrDecimal64 @@ -56,7 +56,7 @@ func (test *DifficultyTest) Run(config *params.ChainConfig) error { UncleHash: test.UncleHash, } - actual := ethash.CalcDifficulty(config, test.CurrentTimestamp.Uint64(), parent) + actual := ethash.CalcDifficulty(config, test.CurrentTimestamp, parent) exp := test.CurrentDifficulty if actual.Cmp(exp) != 0 { diff --git a/tests/gen_btheader.go b/tests/gen_btheader.go index 5cfd4bd0aec0..f2e086a7b3be 100644 --- a/tests/gen_btheader.go +++ b/tests/gen_btheader.go @@ -14,6 +14,7 @@ import ( var _ = (*btHeaderMarshaling)(nil) +// MarshalJSON marshals as JSON. func (b btHeader) MarshalJSON() ([]byte, error) { type btHeader struct { Bloom types.Bloom @@ -31,7 +32,7 @@ func (b btHeader) MarshalJSON() ([]byte, error) { Difficulty *math.HexOrDecimal256 GasLimit math.HexOrDecimal64 GasUsed math.HexOrDecimal64 - Timestamp *math.HexOrDecimal256 + Timestamp math.HexOrDecimal64 } var enc btHeader enc.Bloom = b.Bloom @@ -49,10 +50,11 @@ func (b btHeader) MarshalJSON() ([]byte, error) { enc.Difficulty = (*math.HexOrDecimal256)(b.Difficulty) enc.GasLimit = math.HexOrDecimal64(b.GasLimit) enc.GasUsed = math.HexOrDecimal64(b.GasUsed) - enc.Timestamp = (*math.HexOrDecimal256)(b.Timestamp) + enc.Timestamp = math.HexOrDecimal64(b.Timestamp) return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (b *btHeader) UnmarshalJSON(input []byte) error { type btHeader struct { Bloom *types.Bloom @@ -70,7 +72,7 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { Difficulty *math.HexOrDecimal256 GasLimit *math.HexOrDecimal64 GasUsed *math.HexOrDecimal64 - Timestamp *math.HexOrDecimal256 + Timestamp *math.HexOrDecimal64 } var dec btHeader if err := json.Unmarshal(input, &dec); err != nil { @@ -122,7 +124,7 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { b.GasUsed = uint64(*dec.GasUsed) } if dec.Timestamp != nil { - b.Timestamp = (*big.Int)(dec.Timestamp) + b.Timestamp = uint64(*dec.Timestamp) } return nil } diff --git a/tests/gen_difficultytest.go b/tests/gen_difficultytest.go index 88f36ce99957..cd15ae31b5d3 100644 --- a/tests/gen_difficultytest.go +++ b/tests/gen_difficultytest.go @@ -12,31 +12,33 @@ import ( var _ = (*difficultyTestMarshaling)(nil) +// MarshalJSON marshals as JSON. func (d DifficultyTest) MarshalJSON() ([]byte, error) { type DifficultyTest struct { - ParentTimestamp *math.HexOrDecimal256 `json:"parentTimestamp"` + ParentTimestamp math.HexOrDecimal64 `json:"parentTimestamp"` ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"` UncleHash common.Hash `json:"parentUncles"` - CurrentTimestamp *math.HexOrDecimal256 `json:"currentTimestamp"` + CurrentTimestamp math.HexOrDecimal64 `json:"currentTimestamp"` CurrentBlockNumber math.HexOrDecimal64 `json:"currentBlockNumber"` CurrentDifficulty *math.HexOrDecimal256 `json:"currentDifficulty"` } var enc DifficultyTest - enc.ParentTimestamp = (*math.HexOrDecimal256)(d.ParentTimestamp) + enc.ParentTimestamp = math.HexOrDecimal64(d.ParentTimestamp) enc.ParentDifficulty = (*math.HexOrDecimal256)(d.ParentDifficulty) enc.UncleHash = d.UncleHash - enc.CurrentTimestamp = (*math.HexOrDecimal256)(d.CurrentTimestamp) + enc.CurrentTimestamp = math.HexOrDecimal64(d.CurrentTimestamp) enc.CurrentBlockNumber = math.HexOrDecimal64(d.CurrentBlockNumber) enc.CurrentDifficulty = (*math.HexOrDecimal256)(d.CurrentDifficulty) return json.Marshal(&enc) } +// UnmarshalJSON unmarshals from JSON. func (d *DifficultyTest) UnmarshalJSON(input []byte) error { type DifficultyTest struct { - ParentTimestamp *math.HexOrDecimal256 `json:"parentTimestamp"` + ParentTimestamp *math.HexOrDecimal64 `json:"parentTimestamp"` ParentDifficulty *math.HexOrDecimal256 `json:"parentDifficulty"` UncleHash *common.Hash `json:"parentUncles"` - CurrentTimestamp *math.HexOrDecimal256 `json:"currentTimestamp"` + CurrentTimestamp *math.HexOrDecimal64 `json:"currentTimestamp"` CurrentBlockNumber *math.HexOrDecimal64 `json:"currentBlockNumber"` CurrentDifficulty *math.HexOrDecimal256 `json:"currentDifficulty"` } @@ -45,7 +47,7 @@ func (d *DifficultyTest) UnmarshalJSON(input []byte) error { return err } if dec.ParentTimestamp != nil { - d.ParentTimestamp = (*big.Int)(dec.ParentTimestamp) + d.ParentTimestamp = uint64(*dec.ParentTimestamp) } if dec.ParentDifficulty != nil { d.ParentDifficulty = (*big.Int)(dec.ParentDifficulty) @@ -54,7 +56,7 @@ func (d *DifficultyTest) UnmarshalJSON(input []byte) error { d.UncleHash = *dec.UncleHash } if dec.CurrentTimestamp != nil { - d.CurrentTimestamp = (*big.Int)(dec.CurrentTimestamp) + d.CurrentTimestamp = uint64(*dec.CurrentTimestamp) } if dec.CurrentBlockNumber != nil { d.CurrentBlockNumber = uint64(*dec.CurrentBlockNumber) diff --git a/tests/gen_tttransaction.go b/tests/gen_tttransaction.go deleted file mode 100644 index 2948842d972a..000000000000 --- a/tests/gen_tttransaction.go +++ /dev/null @@ -1,95 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package tests - -import ( - "encoding/json" - "errors" - "math/big" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/math" -) - -var _ = (*ttTransactionMarshaling)(nil) - -func (t ttTransaction) MarshalJSON() ([]byte, error) { - type ttTransaction struct { - Data hexutil.Bytes `gencodec:"required"` - GasLimit math.HexOrDecimal64 `gencodec:"required"` - GasPrice *math.HexOrDecimal256 `gencodec:"required"` - Nonce math.HexOrDecimal64 `gencodec:"required"` - Value *math.HexOrDecimal256 `gencodec:"required"` - R *math.HexOrDecimal256 `gencodec:"required"` - S *math.HexOrDecimal256 `gencodec:"required"` - V *math.HexOrDecimal256 `gencodec:"required"` - To common.Address `gencodec:"required"` - } - var enc ttTransaction - enc.Data = t.Data - enc.GasLimit = math.HexOrDecimal64(t.GasLimit) - enc.GasPrice = (*math.HexOrDecimal256)(t.GasPrice) - enc.Nonce = math.HexOrDecimal64(t.Nonce) - enc.Value = (*math.HexOrDecimal256)(t.Value) - enc.R = (*math.HexOrDecimal256)(t.R) - enc.S = (*math.HexOrDecimal256)(t.S) - enc.V = (*math.HexOrDecimal256)(t.V) - enc.To = t.To - return json.Marshal(&enc) -} - -func (t *ttTransaction) UnmarshalJSON(input []byte) error { - type ttTransaction struct { - Data *hexutil.Bytes `gencodec:"required"` - GasLimit *math.HexOrDecimal64 `gencodec:"required"` - GasPrice *math.HexOrDecimal256 `gencodec:"required"` - Nonce *math.HexOrDecimal64 `gencodec:"required"` - Value *math.HexOrDecimal256 `gencodec:"required"` - R *math.HexOrDecimal256 `gencodec:"required"` - S *math.HexOrDecimal256 `gencodec:"required"` - V *math.HexOrDecimal256 `gencodec:"required"` - To *common.Address `gencodec:"required"` - } - var dec ttTransaction - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.Data == nil { - return errors.New("missing required field 'data' for ttTransaction") - } - t.Data = *dec.Data - if dec.GasLimit == nil { - return errors.New("missing required field 'gasLimit' for ttTransaction") - } - t.GasLimit = uint64(*dec.GasLimit) - if dec.GasPrice == nil { - return errors.New("missing required field 'gasPrice' for ttTransaction") - } - t.GasPrice = (*big.Int)(dec.GasPrice) - if dec.Nonce == nil { - return errors.New("missing required field 'nonce' for ttTransaction") - } - t.Nonce = uint64(*dec.Nonce) - if dec.Value == nil { - return errors.New("missing required field 'value' for ttTransaction") - } - t.Value = (*big.Int)(dec.Value) - if dec.R == nil { - return errors.New("missing required field 'r' for ttTransaction") - } - t.R = (*big.Int)(dec.R) - if dec.S == nil { - return errors.New("missing required field 's' for ttTransaction") - } - t.S = (*big.Int)(dec.S) - if dec.V == nil { - return errors.New("missing required field 'v' for ttTransaction") - } - t.V = (*big.Int)(dec.V) - if dec.To == nil { - return errors.New("missing required field 'to' for ttTransaction") - } - t.To = *dec.To - return nil -} diff --git a/tests/init.go b/tests/init.go index 188cdffe9d73..a18e12bdd2d0 100644 --- a/tests/init.go +++ b/tests/init.go @@ -75,6 +75,18 @@ var Forks = map[string]*params.ChainConfig{ ConstantinopleBlock: big.NewInt(0), PetersburgBlock: big.NewInt(0), }, + "Istanbul": { + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + DAOForkBlock: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(0), + }, "FrontierToHomesteadAt5": { ChainID: big.NewInt(1), HomesteadBlock: big.NewInt(5), @@ -107,6 +119,27 @@ var Forks = map[string]*params.ChainConfig{ ByzantiumBlock: big.NewInt(0), ConstantinopleBlock: big.NewInt(5), }, + "ByzantiumToConstantinopleFixAt5": { + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(5), + PetersburgBlock: big.NewInt(5), + }, + "ConstantinopleFixToIstanbulAt5": { + ChainID: big.NewInt(1), + HomesteadBlock: big.NewInt(0), + EIP150Block: big.NewInt(0), + EIP155Block: big.NewInt(0), + EIP158Block: big.NewInt(0), + ByzantiumBlock: big.NewInt(0), + ConstantinopleBlock: big.NewInt(0), + PetersburgBlock: big.NewInt(0), + IstanbulBlock: big.NewInt(5), + }, } // UnsupportedForkError is returned when a test requests a fork that isn't implemented. diff --git a/tests/init_test.go b/tests/init_test.go index 053cbd6fcd39..622318adb988 100644 --- a/tests/init_test.go +++ b/tests/init_test.go @@ -18,6 +18,7 @@ package tests import ( "encoding/json" + "flag" "fmt" "io" "io/ioutil" @@ -33,10 +34,22 @@ import ( "github.com/ethereum/go-ethereum/params" ) +// Command line flags to configure the interpreters. +var ( + testEVM = flag.String("vm.evm", "", "EVM configuration") + testEWASM = flag.String("vm.ewasm", "", "EWASM configuration") +) + +func TestMain(m *testing.M) { + flag.Parse() + os.Exit(m.Run()) +} + var ( baseDir = filepath.Join(".", "testdata") blockTestDir = filepath.Join(baseDir, "BlockchainTests") stateTestDir = filepath.Join(baseDir, "GeneralStateTests") + legacyStateTestDir = filepath.Join(baseDir, "LegacyTests", "Constantinople", "GeneralStateTests") transactionTestDir = filepath.Join(baseDir, "TransactionTests") vmTestDir = filepath.Join(baseDir, "VMTests") rlpTestDir = filepath.Join(baseDir, "RLPTests") diff --git a/tests/solidity/bytecode.js b/tests/solidity/bytecode.js new file mode 100644 index 000000000000..8796aabfa32b --- /dev/null +++ b/tests/solidity/bytecode.js @@ -0,0 +1,6 @@ +{ + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5061001961007a565b604051809103906000f080158015610035573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061008a565b60405161015f8061055c83390190565b6104c3806100996000396000f3fe60806040526004361061005c576000357c01000000000000000000000000000000000000000000000000000000009004806355313dea146100615780636d3d141614610078578063b9d1e5aa1461008f578063f8a8fd6d146100a6575b600080fd5b34801561006d57600080fd5b506100766100bd565b005b34801561008457600080fd5b5061008d6100bf565b005b34801561009b57600080fd5b506100a46100c4565b005b3480156100b257600080fd5b506100bb6100c6565b005b005b600080fd5bfe5b600160021a6002f35b60058110156100e3576001810190506100cf565b5060065b60058111156100fb576001810190506100e7565b5060015b6005811215610113576001810190506100ff565b5060065b600581131561012b57600181019050610117565b5060021561013857600051505b60405160208101602060048337505060405160208101602060048339505060405160208101602060048360003c50503660005b81811015610182576002815260018101905061016b565b505060008020506000602060403e6010608060106040610123612710fa506020610123600af05060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600060405180807f697353616d654164647265737328616464726573732c61646472657373290000815250601e01905060405180910390209050600033905060405182815281600482015281602482015260648101604052602081604483600088611388f1505060405182815281600482015281602482015260648101604052602081604483600088611388f250506040518281528160048201528160248201526064810160405260208160448387611388f4505060006242004290507f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001026040518082815260200191505060405180910390a07f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001026040518082815260200191505060405180910390a13373ffffffffffffffffffffffffffffffffffffffff166001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001026040518082815260200191505060405180910390a2806001023373ffffffffffffffffffffffffffffffffffffffff166001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001026040518082815260200191505060405180910390a380600102816001023373ffffffffffffffffffffffffffffffffffffffff166001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001027f50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb206001026040518082815260200191505060405180910390a46002fffea165627a7a723058200e51baa2b454b47fdf0ef596fa24aff8ed3a3727b7481ebd25349182ce7152a30029608060405234801561001057600080fd5b5061013f806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063161e715014610040575b600080fd5b34801561004c57600080fd5b506100af6004803603604081101561006357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100c9565b604051808215151515815260200191505060405180910390f35b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610108576001905061010d565b600090505b9291505056fea165627a7a72305820358f67a58c115ea636b0b8e5c4ca7a52b8192d0f3fa98a4434d6ea04596b5d0d0029", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x19 PUSH2 0x7A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0x35 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x8A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x15F DUP1 PUSH2 0x55C DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH2 0x4C3 DUP1 PUSH2 0x99 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x5C JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x55313DEA EQ PUSH2 0x61 JUMPI DUP1 PUSH4 0x6D3D1416 EQ PUSH2 0x78 JUMPI DUP1 PUSH4 0xB9D1E5AA EQ PUSH2 0x8F JUMPI DUP1 PUSH4 0xF8A8FD6D EQ PUSH2 0xA6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x76 PUSH2 0xBD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x84 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8D PUSH2 0xBF JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA4 PUSH2 0xC4 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB PUSH2 0xC6 JUMP JUMPDEST STOP JUMPDEST STOP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST INVALID JUMPDEST PUSH1 0x1 PUSH1 0x2 BYTE PUSH1 0x2 RETURN JUMPDEST PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xE3 JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xCF JUMP JUMPDEST POP PUSH1 0x6 JUMPDEST PUSH1 0x5 DUP2 GT ISZERO PUSH2 0xFB JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xE7 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST PUSH1 0x5 DUP2 SLT ISZERO PUSH2 0x113 JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xFF JUMP JUMPDEST POP PUSH1 0x6 JUMPDEST PUSH1 0x5 DUP2 SGT ISZERO PUSH2 0x12B JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x117 JUMP JUMPDEST POP PUSH1 0x2 ISZERO PUSH2 0x138 JUMPI PUSH1 0x0 MLOAD POP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH1 0x20 PUSH1 0x4 DUP4 CALLDATACOPY POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH1 0x20 PUSH1 0x4 DUP4 CODECOPY POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD PUSH1 0x20 PUSH1 0x4 DUP4 PUSH1 0x0 EXTCODECOPY POP POP CALLDATASIZE PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x182 JUMPI PUSH1 0x2 DUP2 MSTORE PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x16B JUMP JUMPDEST POP POP PUSH1 0x0 DUP1 KECCAK256 POP PUSH1 0x0 PUSH1 0x20 PUSH1 0x40 RETURNDATACOPY PUSH1 0x10 PUSH1 0x80 PUSH1 0x10 PUSH1 0x40 PUSH2 0x123 PUSH2 0x2710 STATICCALL POP PUSH1 0x20 PUSH2 0x123 PUSH1 0xA CREATE POP PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP1 PUSH32 0x697353616D654164647265737328616464726573732C61646472657373290000 DUP2 MSTORE POP PUSH1 0x1E ADD SWAP1 POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 KECCAK256 SWAP1 POP PUSH1 0x0 CALLER SWAP1 POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP2 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP4 PUSH1 0x0 DUP9 PUSH2 0x1388 CALL POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP2 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP4 PUSH1 0x0 DUP9 PUSH2 0x1388 CALLCODE POP POP PUSH1 0x40 MLOAD DUP3 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP2 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x64 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP4 DUP8 PUSH2 0x1388 DELEGATECALL POP POP PUSH1 0x0 PUSH3 0x420042 SWAP1 POP PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG0 PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 DUP1 PUSH1 0x1 MUL CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH1 0x1 MUL DUP2 PUSH1 0x1 MUL CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH32 0x50CB9FE53DAA9737B786AB3646F04D0150DC50EF4E75F59509D83667AD5ADB20 PUSH1 0x1 MUL PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 PUSH1 0x2 SELFDESTRUCT INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 0xe MLOAD 0xba LOG2 0xb4 SLOAD 0xb4 PUSH32 0xDF0EF596FA24AFF8ED3A3727B7481EBD25349182CE7152A30029608060405234 DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x13F DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3B JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV DUP1 PUSH4 0x161E7150 EQ PUSH2 0x40 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAF PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x108 JUMPI PUSH1 0x1 SWAP1 POP PUSH2 0x10D JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP INVALID LOG1 PUSH6 0x627A7A723058 KECCAK256 CALLDATALOAD DUP16 PUSH8 0xA58C115EA636B0B8 0xe5 0xc4 0xca PUSH27 0x52B8192D0F3FA98A4434D6EA04596B5D0D00290000000000000000 ", + "sourceMap": "221:8828:0:-;;;263:110;8:9:-1;5:2;;;30:1;27;20:12;5:2;263:110:0;324:11;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;324:11:0;316:5;;:19;;;;;;;;;;;;;;;;;;221:8828;;;;;;;;;;;;:::o;:::-;;;;;;;" +} diff --git a/tests/solidity/contracts/Migrations.sol b/tests/solidity/contracts/Migrations.sol new file mode 100644 index 000000000000..c378ffb02841 --- /dev/null +++ b/tests/solidity/contracts/Migrations.sol @@ -0,0 +1,23 @@ +pragma solidity >=0.4.21 <0.6.0; + +contract Migrations { + address public owner; + uint public last_completed_migration; + + constructor() public { + owner = msg.sender; + } + + modifier restricted() { + if (msg.sender == owner) _; + } + + function setCompleted(uint completed) public restricted { + last_completed_migration = completed; + } + + function upgrade(address new_address) public restricted { + Migrations upgraded = Migrations(new_address); + upgraded.setCompleted(last_completed_migration); + } +} diff --git a/tests/solidity/contracts/OpCodes.sol b/tests/solidity/contracts/OpCodes.sol new file mode 100644 index 000000000000..9e3a0ebb0202 --- /dev/null +++ b/tests/solidity/contracts/OpCodes.sol @@ -0,0 +1,322 @@ +pragma solidity >=0.4.21 <0.6.0; + +contract Test1 { + function isSameAddress(address a, address b) public returns(bool){ //Simply add the two arguments and return + if (a == b) return true; + return false; + } +} + +contract OpCodes { + + Test1 test1; + + constructor() public { //Constructor function + test1 = new Test1(); //Create new "Test1" function + } + + modifier onlyOwner(address _owner) { + require(msg.sender == _owner); + _; + } + // Add a todo to the list + function test() public { + + //simple_instructions + /*assembly { pop(sub(dup1, mul(dup1, dup1))) }*/ + + //keywords + assembly { pop(address) return(2, byte(2,1)) } + + //label_complex + /*assembly { 7 abc: 8 eq jump(abc) jumpi(eq(7, 8), abc) pop } + assembly { pop(jumpi(eq(7, 8), abc)) jump(abc) }*/ + + //functional + /*assembly { let x := 2 add(7, mul(6, x)) mul(7, 8) add =: x }*/ + + //for_statement + assembly { for { let i := 1 } lt(i, 5) { i := add(i, 1) } {} } + assembly { for { let i := 6 } gt(i, 5) { i := add(i, 1) } {} } + assembly { for { let i := 1 } slt(i, 5) { i := add(i, 1) } {} } + assembly { for { let i := 6 } sgt(i, 5) { i := add(i, 1) } {} } + + //no_opcodes_in_strict + assembly { pop(callvalue()) } + + //no_dup_swap_in_strict + /*assembly { swap1() }*/ + + //print_functional + assembly { let x := mul(sload(0x12), 7) } + + //print_if + assembly { if 2 { pop(mload(0)) }} + + //function_definitions_multiple_args + assembly { function f(a, d){ mstore(a, d) } function g(a, d) -> x, y {}} + + //sstore + assembly { function f(a, d){ sstore(a, d) } function g(a, d) -> x, y {}} + + //mstore8 + assembly { function f(a, d){ mstore8(a, d) } function g(a, d) -> x, y {}} + + //calldatacopy + assembly { + let a := mload(0x40) + let b := add(a, 32) + calldatacopy(a, 4, 32) + /*calldatacopy(b, add(4, 32), 32)*/ + /*result := add(mload(a), mload(b))*/ + } + + //codecopy + assembly { + let a := mload(0x40) + let b := add(a, 32) + codecopy(a, 4, 32) + } + + //codecopy + assembly { + let a := mload(0x40) + let b := add(a, 32) + extcodecopy(0, a, 4, 32) + } + + //for_statement + assembly { let x := calldatasize() for { let i := 0} lt(i, x) { i := add(i, 1) } { mstore(i, 2) } } + + //keccak256 + assembly { pop(keccak256(0,0)) } + + //returndatasize + assembly { let r := returndatasize } + + //returndatacopy + assembly { returndatacopy(64, 32, 0) } + //byzantium vs const Constantinople + //staticcall + assembly { pop(staticcall(10000, 0x123, 64, 0x10, 128, 0x10)) } + + /*//create2 Constantinople + assembly { pop(create2(10, 0x123, 32, 64)) }*/ + + //create Constantinople + assembly { pop(create(10, 0x123, 32)) } + + //shift Constantinople + /*assembly { pop(shl(10, 32)) } + assembly { pop(shr(10, 32)) } + assembly { pop(sar(10, 32)) }*/ + + + //not + assembly { pop( not(0x1f)) } + + //exp + assembly { pop( exp(2, 226)) } + + //mod + assembly { pop( mod(3, 9)) } + + //smod + assembly { pop( smod(3, 9)) } + + //div + assembly { pop( div(4, 2)) } + + //sdiv + assembly { pop( sdiv(4, 2)) } + + //iszero + assembly { pop(iszero(1)) } + + //and + assembly { pop(and(2,3)) } + + //or + assembly { pop(or(3,3)) } + + //xor + assembly { pop(xor(3,3)) } + + //addmod + assembly { pop(addmod(3,3,6)) } + + //mulmod + assembly { pop(mulmod(3,3,3)) } + + //signextend + assembly { pop(signextend(1, 10)) } + + //sha3 + assembly { pop(calldataload(0)) } + + //blockhash + assembly { pop(blockhash(sub(number(), 1))) } + + //balance + assembly { pop(balance(0x0)) } + + //caller + assembly { pop(caller()) } + + //codesize + assembly { pop(codesize()) } + + //extcodesize + assembly { pop(extcodesize(0x1)) } + + //origin + assembly { pop(origin()) } + + //gas + assembly { pop(gas())} + + //msize + assembly { pop(msize())} + + //pc + assembly { pop(pc())} + + //gasprice + assembly { pop(gasprice())} + + //coinbase + assembly { pop(coinbase())} + + //timestamp + assembly { pop(timestamp())} + + //number + assembly { pop(number())} + + //difficulty + assembly { pop(difficulty())} + + //gaslimit + assembly { pop(gaslimit())} + + //call + address contractAddr = address(test1); + bytes4 sig = bytes4(keccak256("isSameAddress(address,address)")); //Function signature + address a = msg.sender; + + assembly { + let x := mload(0x40) //Find empty storage location using "free memory pointer" + mstore(x,sig) //Place signature at begining of empty storage + mstore(add(x,0x04),a) // first address parameter. just after signature + mstore(add(x,0x24),a) // 2nd address parameter - first padded. add 32 bytes (not 20 bytes) + mstore(0x40,add(x,0x64)) // this is missing in other examples. Set free pointer before function call. so it is used by called function. + // new free pointer position after the output values of the called function. + + let success := call( + 5000, //5k gas + contractAddr, //To addr + 0, //No wei passed + x, // Inputs are at location x + 0x44, //Inputs size two padded, so 68 bytes + x, //Store output over input + 0x20) //Output is 32 bytes long + } + + //callcode + assembly { + let x := mload(0x40) //Find empty storage location using "free memory pointer" + mstore(x,sig) //Place signature at begining of empty storage + mstore(add(x,0x04),a) // first address parameter. just after signature + mstore(add(x,0x24),a) // 2nd address parameter - first padded. add 32 bytes (not 20 bytes) + mstore(0x40,add(x,0x64)) // this is missing in other examples. Set free pointer before function call. so it is used by called function. + // new free pointer position after the output values of the called function. + + let success := callcode( + 5000, //5k gas + contractAddr, //To addr + 0, //No wei passed + x, // Inputs are at location x + 0x44, //Inputs size two padded, so 68 bytes + x, //Store output over input + 0x20) //Output is 32 bytes long + } + + //delegatecall + assembly { + let x := mload(0x40) //Find empty storage location using "free memory pointer" + mstore(x,sig) //Place signature at begining of empty storage + mstore(add(x,0x04),a) // first address parameter. just after signature + mstore(add(x,0x24),a) // 2nd address parameter - first padded. add 32 bytes (not 20 bytes) + mstore(0x40,add(x,0x64)) // this is missing in other examples. Set free pointer before function call. so it is used by called function. + // new free pointer position after the output values of the called function. + + let success := delegatecall( + 5000, //5k gas + contractAddr, //To addr + x, // Inputs are at location x + 0x44, //Inputs size two padded, so 68 bytes + x, //Store output over input + 0x20) //Output is 32 bytes long + } + + uint256 _id = 0x420042; + + //log0 + log0( + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20) + ); + + //log1 + log1( + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20) + ); + + //log2 + log2( + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(uint256(msg.sender)) + ); + + //log3 + log3( + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(uint256(msg.sender)), + bytes32(_id) + ); + + //log4 + log4( + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20), + bytes32(uint256(msg.sender)), + bytes32(_id), + bytes32(_id) + + ); + + //selfdestruct + assembly { selfdestruct(0x02) } + } + + function test_revert() public { + + //revert + assembly{ revert(0, 0) } + } + + function test_invalid() public { + + //revert + assembly{ invalid() } + } + + function test_stop() public { + + //revert + assembly{ stop() } + } + +} diff --git a/tests/solidity/migrations/1_initial_migration.js b/tests/solidity/migrations/1_initial_migration.js new file mode 100644 index 000000000000..ee2135d2952e --- /dev/null +++ b/tests/solidity/migrations/1_initial_migration.js @@ -0,0 +1,5 @@ +const Migrations = artifacts.require("Migrations"); + +module.exports = function(deployer) { + deployer.deploy(Migrations); +}; diff --git a/tests/solidity/migrations/2_opCodes_migration.js b/tests/solidity/migrations/2_opCodes_migration.js new file mode 100644 index 000000000000..65c6b6dc1434 --- /dev/null +++ b/tests/solidity/migrations/2_opCodes_migration.js @@ -0,0 +1,5 @@ +var OpCodes = artifacts.require("./OpCodes.sol"); + +module.exports = function(deployer) { + deployer.deploy(OpCodes); +}; diff --git a/tests/solidity/test/opCodes.js b/tests/solidity/test/opCodes.js new file mode 100644 index 000000000000..80abacef251f --- /dev/null +++ b/tests/solidity/test/opCodes.js @@ -0,0 +1,34 @@ +const TodoList = artifacts.require('./OpCodes.sol') +const assert = require('assert') +let contractInstance +const Web3 = require('web3'); +const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); +// const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:9545')); + +contract('OpCodes', (accounts) => { + beforeEach(async () => { + contractInstance = await TodoList.deployed() + }) + it('Should run without errors the majorit of opcodes', async () => { + await contractInstance.test() + await contractInstance.test_stop() + + }) + + it('Should throw invalid op code', async () => { + try{ + await contractInstance.test_invalid() + } + catch(error) { + console.error(error); + } + }) + + it('Should revert', async () => { + try{ + await contractInstance.test_revert() } + catch(error) { + console.error(error); + } + }) +}) diff --git a/tests/solidity/truffle-config.js b/tests/solidity/truffle-config.js new file mode 100644 index 000000000000..c06d8316ff8a --- /dev/null +++ b/tests/solidity/truffle-config.js @@ -0,0 +1,108 @@ +/** + * Use this file to configure your truffle project. It's seeded with some + * common settings for different networks and features like migrations, + * compilation and testing. Uncomment the ones you need or modify + * them to suit your project as necessary. + * + * More information about configuration can be found at: + * + * truffleframework.com/docs/advanced/configuration + * + * To deploy via Infura you'll need a wallet provider (like truffle-hdwallet-provider) + * to sign your transactions before they're sent to a remote public node. Infura API + * keys are available for free at: infura.io/register + * + * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate + * public/private key pairs. If you're publishing your code to GitHub make sure you load this + * phrase from a file you've .gitignored so it doesn't accidentally become public. + * + */ + +// const HDWalletProvider = require('truffle-hdwallet-provider'); +// const infuraKey = "fj4jll3k....."; +// +// const fs = require('fs'); +// const mnemonic = fs.readFileSync(".secret").toString().trim(); + +// module.exports = { +// /** +// * Networks define how you connect to your ethereum client and let you set the +// * defaults web3 uses to send transactions. If you don't specify one truffle +// * will spin up a development blockchain for you on port 9545 when you +// * run `develop` or `test`. You can ask a truffle command to use a specific +// * network from the command line, e.g +// * +// * $ truffle test --network +// */ +// +// networks: { +// // Useful for testing. The `development` name is special - truffle uses it by default +// // if it's defined here and no other network is specified at the command line. +// // You should run a client (like ganache-cli, geth or parity) in a separate terminal +// // tab if you use this network and you must also set the `host`, `port` and `network_id` +// // options below to some value. +// // +// // development: { +// // host: "127.0.0.1", // Localhost (default: none) +// // port: 8545, // Standard Ethereum port (default: none) +// // network_id: "*", // Any network (default: none) +// // }, +// +// // Another network with more advanced options... +// // advanced: { +// // port: 8777, // Custom port +// // network_id: 1342, // Custom network +// // gas: 8500000, // Gas sent with each transaction (default: ~6700000) +// // gasPrice: 20000000000, // 20 gwei (in wei) (default: 100 gwei) +// // from:
    , // Account to send txs from (default: accounts[0]) +// // websockets: true // Enable EventEmitter interface for web3 (default: false) +// // }, +// +// // Useful for deploying to a public network. +// // NB: It's important to wrap the provider as a function. +// // ropsten: { +// // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/${infuraKey}`), +// // network_id: 3, // Ropsten's id +// // gas: 5500000, // Ropsten has a lower block limit than mainnet +// // confirmations: 2, // # of confs to wait between deployments. (default: 0) +// // timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50) +// // skipDryRun: true // Skip dry run before migrations? (default: false for public nets ) +// // }, +// +// // Useful for private networks +// // private: { +// // provider: () => new HDWalletProvider(mnemonic, `https://network.io`), +// // network_id: 2111, // This network is yours, in the cloud. +// // production: true // Treats this network as if it was a public net. (default: false) +// // } +// }, +// +// // Set default mocha options here, use special reporters etc. +// mocha: { +// // timeout: 100000 +// }, +// +// // Configure your compilers +// compilers: { +// solc: { +// // version: "0.5.1", // Fetch exact version from solc-bin (default: truffle's version) +// // docker: true, // Use "0.5.1" you've installed locally with docker (default: false) +// // settings: { // See the solidity docs for advice about optimization and evmVersion +// // optimizer: { +// // enabled: false, +// // runs: 200 +// // }, +// // evmVersion: "byzantium" +// // } +// } +// } +// } +module.exports = { + networks: { + development: { + host: 'localhost', + port: 8545, + network_id: '*' + } + } +} diff --git a/tests/state_test.go b/tests/state_test.go index 8b69da91f263..c6a6947bcea3 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -19,12 +19,10 @@ package tests import ( "bufio" "bytes" - "flag" "fmt" "reflect" "testing" - "github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/core/vm" ) @@ -42,16 +40,18 @@ func TestState(t *testing.T) { st.slow(`^stStaticCall/static_Call1MB`) st.slow(`^stSystemOperationsTest/CallRecursiveBomb`) st.slow(`^stTransactionTest/Opcodes_TransactionInit`) + + // Very time consuming + st.skipLoad(`^stTimeConsuming/`) + // Broken tests: - st.skipLoad(`^stTransactionTest/OverflowGasRequire\.json`) // gasLimit > 256 bits - st.skipLoad(`^stTransactionTest/zeroSigTransa[^/]*\.json`) // EIP-86 is not supported yet // Expected failures: - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/0`, "bug in test") - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/3`, "bug in test") - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Constantinople/0`, "bug in test") - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Constantinople/3`, "bug in test") - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/ConstantinopleFix/0`, "bug in test") - st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/ConstantinopleFix/3`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/0`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Byzantium/3`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Constantinople/0`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/Constantinople/3`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/ConstantinopleFix/0`, "bug in test") + //st.fails(`^stRevertTest/RevertPrecompiledTouch(_storage)?\.json/ConstantinopleFix/3`, "bug in test") st.walk(t, stateTestDir, func(t *testing.T, name string, test *StateTest) { for _, subtest := range test.Subtests() { @@ -66,25 +66,34 @@ func TestState(t *testing.T) { }) } }) + // For Istanbul, older tests were moved into LegacyTests + st.walk(t, legacyStateTestDir, func(t *testing.T, name string, test *StateTest) { + for _, subtest := range test.Subtests() { + subtest := subtest + key := fmt.Sprintf("%s/%d", subtest.Fork, subtest.Index) + name := name + "/" + key + t.Run(key, func(t *testing.T) { + withTrace(t, test.gasLimit(subtest), func(vmconfig vm.Config) error { + _, err := test.Run(subtest, vmconfig) + return st.checkFailure(t, name, err) + }) + }) + } + }) } // Transactions with gasLimit above this value will not get a VM trace on failure. const traceErrorLimit = 400000 -// The VM config for state tests that accepts --vm.* command line arguments. -var testVMConfig = func() vm.Config { - vmconfig := vm.Config{} - flag.StringVar(&vmconfig.EVMInterpreter, utils.EVMInterpreterFlag.Name, utils.EVMInterpreterFlag.Value, utils.EVMInterpreterFlag.Usage) - flag.StringVar(&vmconfig.EWASMInterpreter, utils.EWASMInterpreterFlag.Name, utils.EWASMInterpreterFlag.Value, utils.EWASMInterpreterFlag.Usage) - flag.Parse() - return vmconfig -}() - func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) { - err := test(testVMConfig) + // Use config from command line arguments. + config := vm.Config{EVMInterpreter: *testEVM, EWASMInterpreter: *testEWASM} + err := test(config) if err == nil { return } + + // Test failed, re-run with tracing enabled. t.Error(err) if gasLimit > traceErrorLimit { t.Log("gas limit too high for EVM trace") @@ -93,7 +102,8 @@ func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) { buf := new(bytes.Buffer) w := bufio.NewWriter(buf) tracer := vm.NewJSONLogger(&vm.LogConfig{DisableMemory: true}, w) - err2 := test(vm.Config{Debug: true, Tracer: tracer}) + config.Debug, config.Tracer = true, tracer + err2 := test(config) if !reflect.DeepEqual(err, err2) { t.Errorf("different error for second run: %v", err2) } diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 436284196d9b..59ebcb6e1ec2 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -21,12 +21,14 @@ import ( "encoding/json" "fmt" "math/big" + "strconv" "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -108,6 +110,29 @@ type stTransactionMarshaling struct { PrivateKey hexutil.Bytes } +// getVMConfig takes a fork definition and returns a chain config. +// The fork definition can be +// - a plain forkname, e.g. `Byzantium`, +// - a fork basename, and a list of EIPs to enable; e.g. `Byzantium+1884+1283`. +func getVMConfig(forkString string) (baseConfig *params.ChainConfig, eips []int, err error) { + var ( + splitForks = strings.Split(forkString, "+") + ok bool + baseName, eipsStrings = splitForks[0], splitForks[1:] + ) + if baseConfig, ok = Forks[baseName]; !ok { + return nil, nil, UnsupportedForkError{baseName} + } + for _, eip := range eipsStrings { + if eipNum, err := strconv.Atoi(eip); err != nil { + return nil, nil, fmt.Errorf("syntax error, invalid eip number %v", eipNum) + } else { + eips = append(eips, eipNum) + } + } + return baseConfig, eips, nil +} + // Subtests returns all valid subtests of the test. func (t *StateTest) Subtests() []StateSubtest { var sub []StateSubtest @@ -119,19 +144,38 @@ func (t *StateTest) Subtests() []StateSubtest { return sub } -// Run executes a specific subtest. +// Run executes a specific subtest and verifies the post-state and logs func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config) (*state.StateDB, error) { - config, ok := Forks[subtest.Fork] - if !ok { - return nil, UnsupportedForkError{subtest.Fork} + statedb, root, err := t.RunNoVerify(subtest, vmconfig) + if err != nil { + return statedb, err + } + post := t.json.Post[subtest.Fork][subtest.Index] + // N.B: We need to do this in a two-step process, because the first Commit takes care + // of suicides, and we need to touch the coinbase _after_ it has potentially suicided. + if root != common.Hash(post.Root) { + return statedb, fmt.Errorf("post state root mismatch: got %x, want %x", root, post.Root) + } + if logs := rlpHash(statedb.Logs()); logs != common.Hash(post.Logs) { + return statedb, fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, post.Logs) } + return statedb, nil +} + +// RunNoVerify runs a specific subtest and returns the statedb and post-state root +func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config) (*state.StateDB, common.Hash, error) { + config, eips, err := getVMConfig(subtest.Fork) + if err != nil { + return nil, common.Hash{}, UnsupportedForkError{subtest.Fork} + } + vmconfig.ExtraEips = eips block := t.genesis(config).ToBlock(nil) - statedb := MakePreState(ethdb.NewMemDatabase(), t.json.Pre) + statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) post := t.json.Post[subtest.Fork][subtest.Index] msg, err := t.json.Tx.toMessage(post) if err != nil { - return nil, err + return nil, common.Hash{}, err } context := core.NewEVMContext(msg, block.Header(), nil, &t.json.Env.Coinbase) context.GetHash = vmTestBlockHash @@ -153,15 +197,7 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config) (*state.StateD statedb.AddBalance(block.Coinbase(), new(big.Int)) // And _now_ get the state root root := statedb.IntermediateRoot(config.IsEIP158(block.Number())) - // N.B: We need to do this in a two-step process, because the first Commit takes care - // of suicides, and we need to touch the coinbase _after_ it has potentially suicided. - if root != common.Hash(post.Root) { - return statedb, fmt.Errorf("post state root mismatch: got %x, want %x", root, post.Root) - } - if logs := rlpHash(statedb.Logs()); logs != common.Hash(post.Logs) { - return statedb, fmt.Errorf("post state logs hash mismatch: got %x, want %x", logs, post.Logs) - } - return statedb, nil + return statedb, root, nil } func (t *StateTest) gasLimit(subtest StateSubtest) uint64 { diff --git a/tests/transaction_test.go b/tests/transaction_test.go index 42ad81877e97..0e3670d04bf7 100644 --- a/tests/transaction_test.go +++ b/tests/transaction_test.go @@ -17,7 +17,6 @@ package tests import ( - "math/big" "testing" "github.com/ethereum/go-ethereum/params" @@ -27,26 +26,27 @@ func TestTransaction(t *testing.T) { t.Parallel() txt := new(testMatcher) - txt.config(`^Homestead/`, params.ChainConfig{ - HomesteadBlock: big.NewInt(0), - }) - txt.config(`^EIP155/`, params.ChainConfig{ - HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ChainID: big.NewInt(1), - }) - txt.config(`^Byzantium/`, params.ChainConfig{ - HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - }) + // These can't be parsed, invalid hex in RLP + txt.skipLoad("^ttWrongRLP/.*") + // We don't allow more than uint64 in gas amount + // This is a pseudo-consensus vulnerability, but not in practice + // because of the gas limit + txt.skipLoad("^ttGasLimit/TransactionWithGasLimitxPriceOverflow.json") + // We _do_ allow more than uint64 in gas price, as opposed to the tests + // This is also not a concern, as long as tx.Cost() uses big.Int for + // calculating the final cozt + txt.skipLoad(".*TransactionWithGasPriceOverflow.*") + + // The nonce is too large for uint64. Not a concern, it means geth won't + // accept transactions at a certain point in the distant future + txt.skipLoad("^ttNonce/TransactionWithHighNonce256.json") + // The value is larger than uint64, which according to the test is invalid. + // Geth accepts it, which is not a consensus issue since we use big.Int's + // internally to calculate the cost + txt.skipLoad("^ttValue/TransactionWithHighValueOverflow.json") txt.walk(t, transactionTestDir, func(t *testing.T, name string, test *TransactionTest) { - cfg := txt.findConfig(name) + cfg := params.MainnetChainConfig if err := txt.checkFailure(t, name, test.Run(cfg)); err != nil { t.Error(err) } diff --git a/tests/transaction_test_util.go b/tests/transaction_test_util.go index 8c3dac088c22..85bf1fb0bd0d 100644 --- a/tests/transaction_test_util.go +++ b/tests/transaction_test_util.go @@ -17,14 +17,11 @@ package tests import ( - "bytes" - "errors" "fmt" - "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/common/math" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" @@ -32,101 +29,84 @@ import ( // TransactionTest checks RLP decoding and sender derivation of transactions. type TransactionTest struct { - json ttJSON + RLP hexutil.Bytes `json:"rlp"` + Byzantium ttFork + Constantinople ttFork + Istanbul ttFork + EIP150 ttFork + EIP158 ttFork + Frontier ttFork + Homestead ttFork } -type ttJSON struct { - BlockNumber math.HexOrDecimal64 `json:"blockNumber"` - RLP hexutil.Bytes `json:"rlp"` - Sender hexutil.Bytes `json:"sender"` - Transaction *ttTransaction `json:"transaction"` -} - -//go:generate gencodec -type ttTransaction -field-override ttTransactionMarshaling -out gen_tttransaction.go - -type ttTransaction struct { - Data []byte `gencodec:"required"` - GasLimit uint64 `gencodec:"required"` - GasPrice *big.Int `gencodec:"required"` - Nonce uint64 `gencodec:"required"` - Value *big.Int `gencodec:"required"` - R *big.Int `gencodec:"required"` - S *big.Int `gencodec:"required"` - V *big.Int `gencodec:"required"` - To common.Address `gencodec:"required"` -} - -type ttTransactionMarshaling struct { - Data hexutil.Bytes - GasLimit math.HexOrDecimal64 - GasPrice *math.HexOrDecimal256 - Nonce math.HexOrDecimal64 - Value *math.HexOrDecimal256 - R *math.HexOrDecimal256 - S *math.HexOrDecimal256 - V *math.HexOrDecimal256 +type ttFork struct { + Sender common.UnprefixedAddress `json:"sender"` + Hash common.UnprefixedHash `json:"hash"` } func (tt *TransactionTest) Run(config *params.ChainConfig) error { - tx := new(types.Transaction) - if err := rlp.DecodeBytes(tt.json.RLP, tx); err != nil { - if tt.json.Transaction == nil { - return nil + + validateTx := func(rlpData hexutil.Bytes, signer types.Signer, isHomestead bool, isIstanbul bool) (*common.Address, *common.Hash, error) { + tx := new(types.Transaction) + if err := rlp.DecodeBytes(rlpData, tx); err != nil { + return nil, nil, err } - return fmt.Errorf("RLP decoding failed: %v", err) - } - // Check sender derivation. - signer := types.MakeSigner(config, new(big.Int).SetUint64(uint64(tt.json.BlockNumber))) - sender, err := types.Sender(signer, tx) - if err != nil { - return err - } - if sender != common.BytesToAddress(tt.json.Sender) { - return fmt.Errorf("Sender mismatch: got %x, want %x", sender, tt.json.Sender) - } - // Check decoded fields. - err = tt.json.Transaction.verify(signer, tx) - if tt.json.Sender == nil && err == nil { - return errors.New("field validations succeeded but should fail") - } - if tt.json.Sender != nil && err != nil { - return fmt.Errorf("field validations failed after RLP decoding: %s", err) + sender, err := types.Sender(signer, tx) + if err != nil { + return nil, nil, err + } + // Intrinsic gas + requiredGas, err := core.IntrinsicGas(tx.Data(), tx.To() == nil, isHomestead, isIstanbul) + if err != nil { + return nil, nil, err + } + if requiredGas > tx.Gas() { + return nil, nil, fmt.Errorf("insufficient gas ( %d < %d )", tx.Gas(), requiredGas) + } + h := tx.Hash() + return &sender, &h, nil } - return nil -} -func (tt *ttTransaction) verify(signer types.Signer, tx *types.Transaction) error { - if !bytes.Equal(tx.Data(), tt.Data) { - return fmt.Errorf("Tx input data mismatch: got %x want %x", tx.Data(), tt.Data) - } - if tx.Gas() != tt.GasLimit { - return fmt.Errorf("GasLimit mismatch: got %d, want %d", tx.Gas(), tt.GasLimit) - } - if tx.GasPrice().Cmp(tt.GasPrice) != 0 { - return fmt.Errorf("GasPrice mismatch: got %v, want %v", tx.GasPrice(), tt.GasPrice) - } - if tx.Nonce() != tt.Nonce { - return fmt.Errorf("Nonce mismatch: got %v, want %v", tx.Nonce(), tt.Nonce) - } - v, r, s := tx.RawSignatureValues() - if r.Cmp(tt.R) != 0 { - return fmt.Errorf("R mismatch: got %v, want %v", r, tt.R) - } - if s.Cmp(tt.S) != 0 { - return fmt.Errorf("S mismatch: got %v, want %v", s, tt.S) - } - if v.Cmp(tt.V) != 0 { - return fmt.Errorf("V mismatch: got %v, want %v", v, tt.V) - } - if tx.To() == nil { - if tt.To != (common.Address{}) { - return fmt.Errorf("To mismatch when recipient is nil (contract creation): %x", tt.To) + for _, testcase := range []struct { + name string + signer types.Signer + fork ttFork + isHomestead bool + isIstanbul bool + }{ + {"Frontier", types.FrontierSigner{}, tt.Frontier, false, false}, + {"Homestead", types.HomesteadSigner{}, tt.Homestead, true, false}, + {"EIP150", types.HomesteadSigner{}, tt.EIP150, true, false}, + {"EIP158", types.NewEIP155Signer(config.ChainID), tt.EIP158, true, false}, + {"Byzantium", types.NewEIP155Signer(config.ChainID), tt.Byzantium, true, false}, + {"Constantinople", types.NewEIP155Signer(config.ChainID), tt.Constantinople, true, false}, + //TODO! @holiman or @rjl493456442 : enable this after tests have been updated for Istanbul + //{"Istanbul", types.NewEIP155Signer(config.ChainID), tt.Istanbul, true, true}, + } { + sender, txhash, err := validateTx(tt.RLP, testcase.signer, testcase.isHomestead, testcase.isIstanbul) + + if testcase.fork.Sender == (common.UnprefixedAddress{}) { + if err == nil { + return fmt.Errorf("Expected error, got none (address %v)[%v]", sender.String(), testcase.name) + } + continue + } + // Should resolve the right address + if err != nil { + return fmt.Errorf("Got error, expected none: %v", err) + } + if sender == nil { + return fmt.Errorf("sender was nil, should be %x", common.Address(testcase.fork.Sender)) + } + if *sender != common.Address(testcase.fork.Sender) { + return fmt.Errorf("Sender mismatch: got %x, want %x", sender, testcase.fork.Sender) + } + if txhash == nil { + return fmt.Errorf("txhash was nil, should be %x", common.Hash(testcase.fork.Hash)) + } + if *txhash != common.Hash(testcase.fork.Hash) { + return fmt.Errorf("Hash mismatch: got %x, want %x", *txhash, testcase.fork.Hash) } - } else if *tx.To() != tt.To { - return fmt.Errorf("To mismatch: got %x, want %x", *tx.To(), tt.To) - } - if tx.Value().Cmp(tt.Value) != 0 { - return fmt.Errorf("Value mismatch: got %x, want %x", tx.Value(), tt.Value) } return nil } diff --git a/tests/vm_test_util.go b/tests/vm_test_util.go index cb81c5b94e39..91566c47e347 100644 --- a/tests/vm_test_util.go +++ b/tests/vm_test_util.go @@ -26,10 +26,10 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" ) @@ -79,7 +79,7 @@ type vmExecMarshaling struct { } func (t *VMTest) Run(vmconfig vm.Config) error { - statedb := MakePreState(ethdb.NewMemDatabase(), t.json.Pre) + statedb := MakePreState(rawdb.NewMemoryDatabase(), t.json.Pre) ret, gasRemaining, err := t.exec(statedb, vmconfig) if t.json.GasRemaining == nil { diff --git a/trie/database.go b/trie/database.go index 739a98addbd1..d8a0fa9c5342 100644 --- a/trie/database.go +++ b/trie/database.go @@ -17,8 +17,11 @@ package trie import ( + "encoding/binary" + "errors" "fmt" "io" + "reflect" "sync" "time" @@ -55,20 +58,16 @@ var secureKeyPrefix = []byte("secure-key-") // secureKeyLength is the length of the above prefix + 32byte hash. const secureKeyLength = 11 + 32 -// DatabaseReader wraps the Get and Has method of a backing store for the trie. -type DatabaseReader interface { - // Get retrieves the value associated with key from the database. - Get(key []byte) (value []byte, err error) - - // Has retrieves whether a key is present in the database. - Has(key []byte) (bool, error) -} - // Database is an intermediate write layer between the trie data structures and // the disk database. The aim is to accumulate trie writes in-memory and only // periodically flush a couple tries to disk, garbage collecting the remainder. +// +// Note, the trie Database is **not** thread safe in its mutations, but it **is** +// thread safe in providing individual, independent node access. The rationale +// behind this split design is to provide read access to RPC handlers and sync +// servers even while the trie is executing expensive garbage collection. type Database struct { - diskdb ethdb.Database // Persistent storage for matured trie nodes + diskdb ethdb.KeyValueStore // Persistent storage for matured trie nodes cleans *bigcache.BigCache // GC friendly memory cache of clean node RLPs dirties map[common.Hash]*cachedNode // Data and references relationships of dirty nodes @@ -86,7 +85,8 @@ type Database struct { flushnodes uint64 // Nodes flushed since last commit flushsize common.StorageSize // Data storage flushed since last commit - dirtiesSize common.StorageSize // Storage size of the dirty node cache (exc. flushlist) + dirtiesSize common.StorageSize // Storage size of the dirty node cache (exc. metadata) + childrenSize common.StorageSize // Storage size of the external children tracking preimagesSize common.StorageSize // Storage size of the preimages cache lock sync.RWMutex @@ -148,6 +148,15 @@ type cachedNode struct { flushNext common.Hash // Next node in the flush-list } +// cachedNodeSize is the raw size of a cachedNode data structure without any +// node data included. It's an approximate size, but should be a lot better +// than not counting them. +var cachedNodeSize = int(reflect.TypeOf(cachedNode{}).Size()) + +// cachedNodeChildrenSize is the raw size of an initialized but empty external +// reference map. +const cachedNodeChildrenSize = 48 + // rlp returns the raw rlp encoded blob of the cached node, either directly from // the cache, or by regenerating it from the collapsed node. func (n *cachedNode) rlp() []byte { @@ -163,11 +172,11 @@ func (n *cachedNode) rlp() []byte { // obj returns the decoded and expanded trie node, either directly from the cache, // or by regenerating it from the rlp encoded blob. -func (n *cachedNode) obj(hash common.Hash, cachegen uint16) node { +func (n *cachedNode) obj(hash common.Hash) node { if node, ok := n.node.(rawNode); ok { - return mustDecodeNode(hash[:], node, cachegen) + return mustDecodeNode(hash[:], node) } - return expandNode(hash[:], n.node, cachegen) + return expandNode(hash[:], n.node) } // childs returns all the tracked children of this node, both the implicit ones @@ -232,16 +241,15 @@ func simplifyNode(n node) node { // expandNode traverses the node hierarchy of a collapsed storage node and converts // all fields and keys into expanded memory form. -func expandNode(hash hashNode, n node, cachegen uint16) node { +func expandNode(hash hashNode, n node) node { switch n := n.(type) { case *rawShortNode: // Short nodes need key and child expansion return &shortNode{ Key: compactToHex(n.Key), - Val: expandNode(nil, n.Val, cachegen), + Val: expandNode(nil, n.Val), flags: nodeFlag{ hash: hash, - gen: cachegen, }, } @@ -250,12 +258,11 @@ func expandNode(hash hashNode, n node, cachegen uint16) node { node := &fullNode{ flags: nodeFlag{ hash: hash, - gen: cachegen, }, } for i := 0; i < len(node.Children); i++ { if n[i] != nil { - node.Children[i] = expandNode(nil, n[i], cachegen) + node.Children[i] = expandNode(nil, n[i]) } } return node @@ -268,17 +275,30 @@ func expandNode(hash hashNode, n node, cachegen uint16) node { } } +// trienodeHasher is a struct to be used with BigCache, which uses a Hasher to +// determine which shard to place an entry into. It's not a cryptographic hash, +// just to provide a bit of anti-collision (default is FNV64a). +// +// Since trie keys are already hashes, we can just use the key directly to +// map shard id. +type trienodeHasher struct{} + +// Sum64 implements the bigcache.Hasher interface. +func (t trienodeHasher) Sum64(key string) uint64 { + return binary.BigEndian.Uint64([]byte(key)) +} + // NewDatabase creates a new trie database to store ephemeral trie content before // its written out to disk or garbage collected. No read cache is created, so all // data retrievals will hit the underlying disk database. -func NewDatabase(diskdb ethdb.Database) *Database { +func NewDatabase(diskdb ethdb.KeyValueStore) *Database { return NewDatabaseWithCache(diskdb, 0) } // NewDatabaseWithCache creates a new trie database to store ephemeral trie content // before its written out to disk or garbage collected. It also acts as a read cache // for nodes loaded from disk. -func NewDatabaseWithCache(diskdb ethdb.Database, cache int) *Database { +func NewDatabaseWithCache(diskdb ethdb.KeyValueStore, cache int) *Database { var cleans *bigcache.BigCache if cache > 0 { cleans, _ = bigcache.NewBigCache(bigcache.Config{ @@ -287,18 +307,21 @@ func NewDatabaseWithCache(diskdb ethdb.Database, cache int) *Database { MaxEntriesInWindow: cache * 1024, MaxEntrySize: 512, HardMaxCacheSize: cache, + Hasher: trienodeHasher{}, }) } return &Database{ - diskdb: diskdb, - cleans: cleans, - dirties: map[common.Hash]*cachedNode{{}: {}}, + diskdb: diskdb, + cleans: cleans, + dirties: map[common.Hash]*cachedNode{{}: { + children: make(map[common.Hash]uint16), + }}, preimages: make(map[common.Hash][]byte), } } // DiskDB retrieves the persistent storage backing the trie database. -func (db *Database) DiskDB() DatabaseReader { +func (db *Database) DiskDB() ethdb.KeyValueReader { return db.diskdb } @@ -358,13 +381,13 @@ func (db *Database) insertPreimage(hash common.Hash, preimage []byte) { // node retrieves a cached trie node from memory, or returns nil if none can be // found in the memory cache. -func (db *Database) node(hash common.Hash, cachegen uint16) node { +func (db *Database) node(hash common.Hash) node { // Retrieve the node from the clean cache if available if db.cleans != nil { if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil { memcacheCleanHitMeter.Mark(1) memcacheCleanReadMeter.Mark(int64(len(enc))) - return mustDecodeNode(hash[:], enc, cachegen) + return mustDecodeNode(hash[:], enc) } } // Retrieve the node from the dirty cache if available @@ -373,7 +396,7 @@ func (db *Database) node(hash common.Hash, cachegen uint16) node { db.lock.RUnlock() if dirty != nil { - return dirty.obj(hash, cachegen) + return dirty.obj(hash) } // Content unavailable in memory, attempt to retrieve from disk enc, err := db.diskdb.Get(hash[:]) @@ -385,12 +408,16 @@ func (db *Database) node(hash common.Hash, cachegen uint16) node { memcacheCleanMissMeter.Mark(1) memcacheCleanWriteMeter.Mark(int64(len(enc))) } - return mustDecodeNode(hash[:], enc, cachegen) + return mustDecodeNode(hash[:], enc) } // Node retrieves an encoded cached trie node from memory. If it cannot be found // cached, the method queries the persistent database for the content. func (db *Database) Node(hash common.Hash) ([]byte, error) { + // It doens't make sense to retrieve the metaroot + if hash == (common.Hash{}) { + return nil, errors.New("not found") + } // Retrieve the node from the clean cache if available if db.cleans != nil { if enc, err := db.cleans.Get(string(hash[:])); err == nil && enc != nil { @@ -461,8 +488,8 @@ func (db *Database) Nodes() []common.Hash { // Reference adds a new reference from a parent node to a child node. func (db *Database) Reference(child common.Hash, parent common.Hash) { - db.lock.RLock() - defer db.lock.RUnlock() + db.lock.Lock() + defer db.lock.Unlock() db.reference(child, parent) } @@ -477,11 +504,15 @@ func (db *Database) reference(child common.Hash, parent common.Hash) { // If the reference already exists, only duplicate for roots if db.dirties[parent].children == nil { db.dirties[parent].children = make(map[common.Hash]uint16) + db.childrenSize += cachedNodeChildrenSize } else if _, ok = db.dirties[parent].children[child]; ok && parent != (common.Hash{}) { return } node.parents++ db.dirties[parent].children[child]++ + if db.dirties[parent].children[child] == 1 { + db.childrenSize += common.HashLength + 2 // uint16 counter + } } // Dereference removes an existing reference from a root node. @@ -518,6 +549,7 @@ func (db *Database) dereference(child common.Hash, parent common.Hash) { node.children[child]-- if node.children[child] == 0 { delete(node.children, child) + db.childrenSize -= (common.HashLength + 2) // uint16 counter } } // If the child does not exist, it's a previously committed node. @@ -552,25 +584,30 @@ func (db *Database) dereference(child common.Hash, parent common.Hash) { } delete(db.dirties, child) db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + if node.children != nil { + db.childrenSize -= cachedNodeChildrenSize + } } } // Cap iteratively flushes old but still referenced trie nodes until the total // memory usage goes below the given threshold. +// +// Note, this method is a non-synchronized mutator. It is unsafe to call this +// concurrently with other mutators. func (db *Database) Cap(limit common.StorageSize) error { // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured // by only uncaching existing data when the database write finalizes. - db.lock.RLock() - nodes, storage, start := len(db.dirties), db.dirtiesSize, time.Now() batch := db.diskdb.NewBatch() // db.dirtiesSize only contains the useful data in the cache, but when reporting // the total memory consumption, the maintenance metadata is also needed to be - // counted. For every useful node, we track 2 extra hashes as the flushlist. - size := db.dirtiesSize + common.StorageSize((len(db.dirties)-1)*2*common.HashLength) + // counted. + size := db.dirtiesSize + common.StorageSize((len(db.dirties)-1)*cachedNodeSize) + size += db.childrenSize - common.StorageSize(len(db.dirties[common.Hash{}].children)*(common.HashLength+2)) // If the preimage cache got large enough, push to disk. If it's still small // leave for later to deduplicate writes. @@ -579,12 +616,10 @@ func (db *Database) Cap(limit common.StorageSize) error { for hash, preimage := range db.preimages { if err := batch.Put(db.secureKey(hash[:]), preimage); err != nil { log.Error("Failed to commit preimage from trie database", "err", err) - db.lock.RUnlock() return err } if batch.ValueSize() > ethdb.IdealBatchSize { if err := batch.Write(); err != nil { - db.lock.RUnlock() return err } batch.Reset() @@ -597,33 +632,30 @@ func (db *Database) Cap(limit common.StorageSize) error { // Fetch the oldest referenced node and push into the batch node := db.dirties[oldest] if err := batch.Put(oldest[:], node.rlp()); err != nil { - db.lock.RUnlock() return err } // If we exceeded the ideal batch size, commit and reset if batch.ValueSize() >= ethdb.IdealBatchSize { if err := batch.Write(); err != nil { log.Error("Failed to write flush list to disk", "err", err) - db.lock.RUnlock() return err } batch.Reset() } // Iterate to the next flush item, or abort if the size cap was achieved. Size - // is the total size, including both the useful cached data (hash -> blob), as - // well as the flushlist metadata (2*hash). When flushing items from the cache, - // we need to reduce both. - size -= common.StorageSize(3*common.HashLength + int(node.size)) + // is the total size, including the useful cached data (hash -> blob), the + // cache item metadata, as well as external children mappings. + size -= common.StorageSize(common.HashLength + int(node.size) + cachedNodeSize) + if node.children != nil { + size -= common.StorageSize(cachedNodeChildrenSize + len(node.children)*(common.HashLength+2)) + } oldest = node.flushNext } // Flush out any remainder data from the last batch if err := batch.Write(); err != nil { log.Error("Failed to write flush list to disk", "err", err) - db.lock.RUnlock() return err } - db.lock.RUnlock() - // Write successful, clear out the flushed data db.lock.Lock() defer db.lock.Unlock() @@ -638,6 +670,9 @@ func (db *Database) Cap(limit common.StorageSize) error { db.oldest = node.flushNext db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + if node.children != nil { + db.childrenSize -= common.StorageSize(cachedNodeChildrenSize + len(node.children)*(common.HashLength+2)) + } } if db.oldest != (common.Hash{}) { db.dirties[db.oldest].flushPrev = common.Hash{} @@ -657,16 +692,16 @@ func (db *Database) Cap(limit common.StorageSize) error { } // Commit iterates over all the children of a particular node, writes them out -// to disk, forcefully tearing down all references in both directions. +// to disk, forcefully tearing down all references in both directions. As a side +// effect, all pre-images accumulated up to this point are also written. // -// As a side effect, all pre-images accumulated up to this point are also written. +// Note, this method is a non-synchronized mutator. It is unsafe to call this +// concurrently with other mutators. func (db *Database) Commit(node common.Hash, report bool) error { // Create a database batch to flush persistent data out. It is important that // outside code doesn't see an inconsistent state (referenced data removed from // memory cache during commit but not yet in persistent storage). This is ensured // by only uncaching existing data when the database write finalizes. - db.lock.RLock() - start := time.Now() batch := db.diskdb.NewBatch() @@ -674,9 +709,9 @@ func (db *Database) Commit(node common.Hash, report bool) error { for hash, preimage := range db.preimages { if err := batch.Put(db.secureKey(hash[:]), preimage); err != nil { log.Error("Failed to commit preimage from trie database", "err", err) - db.lock.RUnlock() return err } + // If the batch is too large, flush to disk if batch.ValueSize() > ethdb.IdealBatchSize { if err := batch.Write(); err != nil { return err @@ -684,30 +719,37 @@ func (db *Database) Commit(node common.Hash, report bool) error { batch.Reset() } } + // Since we're going to replay trie node writes into the clean cache, flush out + // any batched pre-images before continuing. + if err := batch.Write(); err != nil { + return err + } + batch.Reset() + // Move the trie itself into the batch, flushing if enough data is accumulated nodes, storage := len(db.dirties), db.dirtiesSize - if err := db.commit(node, batch); err != nil { + + uncacher := &cleaner{db} + if err := db.commit(node, batch, uncacher); err != nil { log.Error("Failed to commit trie from trie database", "err", err) - db.lock.RUnlock() return err } - // Write batch ready, unlock for readers during persistence + // Trie mostly committed to disk, flush any batch leftovers if err := batch.Write(); err != nil { log.Error("Failed to write trie to disk", "err", err) - db.lock.RUnlock() return err } - db.lock.RUnlock() - - // Write successful, clear out the flushed data + // Uncache any leftovers in the last batch db.lock.Lock() defer db.lock.Unlock() + batch.Replay(uncacher) + batch.Reset() + + // Reset the storage counters and bumpd metrics db.preimages = make(map[common.Hash][]byte) db.preimagesSize = 0 - db.uncache(node) - memcacheCommitTimeTimer.Update(time.Since(start)) memcacheCommitSizeMeter.Mark(int64(storage - db.dirtiesSize)) memcacheCommitNodesMeter.Mark(int64(nodes - len(db.dirties))) @@ -727,14 +769,14 @@ func (db *Database) Commit(node common.Hash, report bool) error { } // commit is the private locked version of Commit. -func (db *Database) commit(hash common.Hash, batch ethdb.Batch) error { +func (db *Database) commit(hash common.Hash, batch ethdb.Batch, uncacher *cleaner) error { // If the node does not exist, it's a previously committed node node, ok := db.dirties[hash] if !ok { return nil } for _, child := range node.childs() { - if err := db.commit(child, batch); err != nil { + if err := db.commit(child, batch, uncacher); err != nil { return err } } @@ -746,39 +788,60 @@ func (db *Database) commit(hash common.Hash, batch ethdb.Batch) error { if err := batch.Write(); err != nil { return err } + db.lock.Lock() + batch.Replay(uncacher) batch.Reset() + db.lock.Unlock() } return nil } -// uncache is the post-processing step of a commit operation where the already -// persisted trie is removed from the cache. The reason behind the two-phase -// commit is to ensure consistent data availability while moving from memory -// to disk. -func (db *Database) uncache(hash common.Hash) { +// cleaner is a database batch replayer that takes a batch of write operations +// and cleans up the trie database from anything written to disk. +type cleaner struct { + db *Database +} + +// Put reacts to database writes and implements dirty data uncaching. This is the +// post-processing step of a commit operation where the already persisted trie is +// removed from the dirty cache and moved into the clean cache. The reason behind +// the two-phase commit is to ensure ensure data availability while moving from +// memory to disk. +func (c *cleaner) Put(key []byte, rlp []byte) error { + hash := common.BytesToHash(key) + // If the node does not exist, we're done on this path - node, ok := db.dirties[hash] + node, ok := c.db.dirties[hash] if !ok { - return + return nil } // Node still exists, remove it from the flush-list switch hash { - case db.oldest: - db.oldest = node.flushNext - db.dirties[node.flushNext].flushPrev = common.Hash{} - case db.newest: - db.newest = node.flushPrev - db.dirties[node.flushPrev].flushNext = common.Hash{} + case c.db.oldest: + c.db.oldest = node.flushNext + c.db.dirties[node.flushNext].flushPrev = common.Hash{} + case c.db.newest: + c.db.newest = node.flushPrev + c.db.dirties[node.flushPrev].flushNext = common.Hash{} default: - db.dirties[node.flushPrev].flushNext = node.flushNext - db.dirties[node.flushNext].flushPrev = node.flushPrev + c.db.dirties[node.flushPrev].flushNext = node.flushNext + c.db.dirties[node.flushNext].flushPrev = node.flushPrev } - // Uncache the node's subtries and remove the node itself too - for _, child := range node.childs() { - db.uncache(child) + // Remove the node from the dirty cache + delete(c.db.dirties, hash) + c.db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + if node.children != nil { + c.db.dirtiesSize -= common.StorageSize(cachedNodeChildrenSize + len(node.children)*(common.HashLength+2)) + } + // Move the flushed node into the clean cache to prevent insta-reloads + if c.db.cleans != nil { + c.db.cleans.Set(string(hash[:]), rlp) } - delete(db.dirties, hash) - db.dirtiesSize -= common.StorageSize(common.HashLength + int(node.size)) + return nil +} + +func (c *cleaner) Delete(key []byte) error { + panic("Not implemented") } // Size returns the current storage size of the memory cache in front of the @@ -789,9 +852,10 @@ func (db *Database) Size() (common.StorageSize, common.StorageSize) { // db.dirtiesSize only contains the useful data in the cache, but when reporting // the total memory consumption, the maintenance metadata is also needed to be - // counted. For every useful node, we track 2 extra hashes as the flushlist. - var flushlistSize = common.StorageSize((len(db.dirties) - 1) * 2 * common.HashLength) - return db.dirtiesSize + flushlistSize, db.preimagesSize + // counted. + var metadataSize = common.StorageSize((len(db.dirties) - 1) * cachedNodeSize) + var metarootRefs = common.StorageSize(len(db.dirties[common.Hash{}].children) * (common.HashLength + 2)) + return db.dirtiesSize + db.childrenSize + metadataSize - metarootRefs, db.preimagesSize } // verifyIntegrity is a debug method to iterate over the entire trie stored in @@ -808,7 +872,7 @@ func (db *Database) verifyIntegrity() { db.accumulate(child, reachable) } // Find any unreachable but cached nodes - unreachable := []string{} + var unreachable []string for hash, node := range db.dirties { if _, ok := reachable[hash]; !ok { unreachable = append(unreachable, fmt.Sprintf("%x: {Node: %v, Parents: %d, Prev: %x, Next: %x}", diff --git a/swarm/network/stream/intervals/dbstore_test.go b/trie/database_test.go similarity index 63% rename from swarm/network/stream/intervals/dbstore_test.go rename to trie/database_test.go index 6716e593ab00..81c469500f98 100644 --- a/swarm/network/stream/intervals/dbstore_test.go +++ b/trie/database_test.go @@ -1,4 +1,4 @@ -// Copyright 2018 The go-ethereum Authors +// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -14,29 +14,20 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package intervals +package trie import ( - "io/ioutil" - "os" "testing" - "github.com/ethereum/go-ethereum/swarm/state" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) -// TestDBStore tests basic functionality of DBStore. -func TestDBStore(t *testing.T) { - dir, err := ioutil.TempDir("", "intervals_test_db_store") - if err != nil { - panic(err) +// Tests that the trie database returns a missing trie node error if attempting +// to retrieve the meta root. +func TestDatabaseMetarootFetch(t *testing.T) { + db := NewDatabase(memorydb.New()) + if _, err := db.Node(common.Hash{}); err == nil { + t.Fatalf("metaroot retrieval succeeded") } - defer os.RemoveAll(dir) - - store, err := state.NewDBStore(dir) - if err != nil { - t.Fatal(err) - } - defer store.Close() - - testStore(t, store) } diff --git a/trie/hasher.go b/trie/hasher.go index 9d6756b6f4e8..54f6a9de2b6a 100644 --- a/trie/hasher.go +++ b/trie/hasher.go @@ -26,11 +26,9 @@ import ( ) type hasher struct { - tmp sliceBuffer - sha keccakState - cachegen uint16 - cachelimit uint16 - onleaf LeafCallback + tmp sliceBuffer + sha keccakState + onleaf LeafCallback } // keccakState wraps sha3.state. In addition to the usual hash methods, it also supports @@ -62,9 +60,9 @@ var hasherPool = sync.Pool{ }, } -func newHasher(cachegen, cachelimit uint16, onleaf LeafCallback) *hasher { +func newHasher(onleaf LeafCallback) *hasher { h := hasherPool.Get().(*hasher) - h.cachegen, h.cachelimit, h.onleaf = cachegen, cachelimit, onleaf + h.onleaf = onleaf return h } @@ -80,14 +78,13 @@ func (h *hasher) hash(n node, db *Database, force bool) (node, node, error) { if db == nil { return hash, n, nil } - if n.canUnload(h.cachegen, h.cachelimit) { - // Unload the node from cache. All of its subnodes will have a lower or equal - // cache generation number. - cacheUnloadCounter.Inc(1) - return hash, hash, nil - } if !dirty { - return hash, n, nil + switch n.(type) { + case *fullNode, *shortNode: + return hash, hash, nil + default: + return hash, n, nil + } } } // Trie not processed yet or needs storage, walk the children diff --git a/trie/iterator.go b/trie/iterator.go index 77f168166522..8e84dee3b617 100644 --- a/trie/iterator.go +++ b/trie/iterator.go @@ -34,7 +34,9 @@ type Iterator struct { Err error } -// NewIterator creates a new key-value iterator from a node iterator +// NewIterator creates a new key-value iterator from a node iterator. +// Note that the value returned by the iterator is raw. If the content is encoded +// (e.g. storage value is RLP-encoded), it's caller's duty to decode it. func NewIterator(it NodeIterator) *Iterator { return &Iterator{ nodeIt: it, @@ -180,7 +182,7 @@ func (it *nodeIterator) LeafBlob() []byte { func (it *nodeIterator) LeafProof() [][]byte { if len(it.stack) > 0 { if _, ok := it.stack[len(it.stack)-1].node.(valueNode); ok { - hasher := newHasher(0, 0, nil) + hasher := newHasher(nil) defer returnHasherToPool(hasher) proofs := make([][]byte, 0, len(it.stack)) diff --git a/trie/iterator_test.go b/trie/iterator_test.go index 4f633b195fa9..88b8103fb3f2 100644 --- a/trie/iterator_test.go +++ b/trie/iterator_test.go @@ -23,7 +23,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func TestIterator(t *testing.T) { @@ -120,11 +120,14 @@ func TestNodeIteratorCoverage(t *testing.T) { } } } - for _, key := range db.diskdb.(*ethdb.MemDatabase).Keys() { + it := db.diskdb.NewIterator() + for it.Next() { + key := it.Key() if _, ok := hashes[common.BytesToHash(key)]; !ok { t.Errorf("state entry not reported %x", key) } } + it.Release() } type kvs struct{ k, v string } @@ -289,7 +292,7 @@ func TestIteratorContinueAfterErrorDisk(t *testing.T) { testIteratorContinueA func TestIteratorContinueAfterErrorMemonly(t *testing.T) { testIteratorContinueAfterError(t, true) } func testIteratorContinueAfterError(t *testing.T, memonly bool) { - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) tr, _ := New(common.Hash{}, triedb) @@ -309,7 +312,11 @@ func testIteratorContinueAfterError(t *testing.T, memonly bool) { if memonly { memKeys = triedb.Nodes() } else { - diskKeys = diskdb.Keys() + it := diskdb.NewIterator() + for it.Next() { + diskKeys = append(diskKeys, it.Key()) + } + it.Release() } for i := 0; i < 20; i++ { // Create trie that will load all nodes from DB. @@ -376,7 +383,7 @@ func TestIteratorContinueAfterSeekErrorMemonly(t *testing.T) { func testIteratorContinueAfterSeekError(t *testing.T, memonly bool) { // Commit test trie to db, then remove the node containing "bars". - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) ctr, _ := New(common.Hash{}, triedb) diff --git a/trie/node.go b/trie/node.go index 1fafb7a53825..f4055e779a1b 100644 --- a/trie/node.go +++ b/trie/node.go @@ -30,7 +30,6 @@ var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b type node interface { fstring(string) string cache() (hashNode, bool) - canUnload(cachegen, cachelimit uint16) bool } type ( @@ -71,20 +70,9 @@ func (n *shortNode) copy() *shortNode { copy := *n; return © } // nodeFlag contains caching-related metadata about a node. type nodeFlag struct { hash hashNode // cached hash of the node (may be nil) - gen uint16 // cache generation counter dirty bool // whether the node has changes that must be written to the database } -// canUnload tells whether a node can be unloaded. -func (n *nodeFlag) canUnload(cachegen, cachelimit uint16) bool { - return !n.dirty && cachegen-n.gen >= cachelimit -} - -func (n *fullNode) canUnload(gen, limit uint16) bool { return n.flags.canUnload(gen, limit) } -func (n *shortNode) canUnload(gen, limit uint16) bool { return n.flags.canUnload(gen, limit) } -func (n hashNode) canUnload(uint16, uint16) bool { return false } -func (n valueNode) canUnload(uint16, uint16) bool { return false } - func (n *fullNode) cache() (hashNode, bool) { return n.flags.hash, n.flags.dirty } func (n *shortNode) cache() (hashNode, bool) { return n.flags.hash, n.flags.dirty } func (n hashNode) cache() (hashNode, bool) { return nil, true } @@ -117,8 +105,8 @@ func (n valueNode) fstring(ind string) string { return fmt.Sprintf("%x ", []byte(n)) } -func mustDecodeNode(hash, buf []byte, cachegen uint16) node { - n, err := decodeNode(hash, buf, cachegen) +func mustDecodeNode(hash, buf []byte) node { + n, err := decodeNode(hash, buf) if err != nil { panic(fmt.Sprintf("node %x: %v", hash, err)) } @@ -126,7 +114,7 @@ func mustDecodeNode(hash, buf []byte, cachegen uint16) node { } // decodeNode parses the RLP encoding of a trie node. -func decodeNode(hash, buf []byte, cachegen uint16) (node, error) { +func decodeNode(hash, buf []byte) (node, error) { if len(buf) == 0 { return nil, io.ErrUnexpectedEOF } @@ -136,22 +124,22 @@ func decodeNode(hash, buf []byte, cachegen uint16) (node, error) { } switch c, _ := rlp.CountValues(elems); c { case 2: - n, err := decodeShort(hash, elems, cachegen) + n, err := decodeShort(hash, elems) return n, wrapError(err, "short") case 17: - n, err := decodeFull(hash, elems, cachegen) + n, err := decodeFull(hash, elems) return n, wrapError(err, "full") default: return nil, fmt.Errorf("invalid number of list elements: %v", c) } } -func decodeShort(hash, elems []byte, cachegen uint16) (node, error) { +func decodeShort(hash, elems []byte) (node, error) { kbuf, rest, err := rlp.SplitString(elems) if err != nil { return nil, err } - flag := nodeFlag{hash: hash, gen: cachegen} + flag := nodeFlag{hash: hash} key := compactToHex(kbuf) if hasTerm(key) { // value node @@ -161,17 +149,17 @@ func decodeShort(hash, elems []byte, cachegen uint16) (node, error) { } return &shortNode{key, append(valueNode{}, val...), flag}, nil } - r, _, err := decodeRef(rest, cachegen) + r, _, err := decodeRef(rest) if err != nil { return nil, wrapError(err, "val") } return &shortNode{key, r, flag}, nil } -func decodeFull(hash, elems []byte, cachegen uint16) (*fullNode, error) { - n := &fullNode{flags: nodeFlag{hash: hash, gen: cachegen}} +func decodeFull(hash, elems []byte) (*fullNode, error) { + n := &fullNode{flags: nodeFlag{hash: hash}} for i := 0; i < 16; i++ { - cld, rest, err := decodeRef(elems, cachegen) + cld, rest, err := decodeRef(elems) if err != nil { return n, wrapError(err, fmt.Sprintf("[%d]", i)) } @@ -189,7 +177,7 @@ func decodeFull(hash, elems []byte, cachegen uint16) (*fullNode, error) { const hashLen = len(common.Hash{}) -func decodeRef(buf []byte, cachegen uint16) (node, []byte, error) { +func decodeRef(buf []byte) (node, []byte, error) { kind, val, rest, err := rlp.Split(buf) if err != nil { return nil, buf, err @@ -202,7 +190,7 @@ func decodeRef(buf []byte, cachegen uint16) (node, []byte, error) { err := fmt.Errorf("oversized embedded node (size is %d bytes, want size < %d)", size, hashLen) return nil, buf, err } - n, err := decodeNode(nil, buf, cachegen) + n, err := decodeNode(nil, buf) return n, rest, err case kind == rlp.String && len(val) == 0: // empty node diff --git a/trie/node_test.go b/trie/node_test.go deleted file mode 100644 index 7ad1ff9e7bd3..000000000000 --- a/trie/node_test.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package trie - -import "testing" - -func TestCanUnload(t *testing.T) { - tests := []struct { - flag nodeFlag - cachegen, cachelimit uint16 - want bool - }{ - { - flag: nodeFlag{dirty: true, gen: 0}, - want: false, - }, - { - flag: nodeFlag{dirty: false, gen: 0}, - cachegen: 0, cachelimit: 0, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 65534}, - cachegen: 65535, cachelimit: 1, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 65534}, - cachegen: 0, cachelimit: 1, - want: true, - }, - { - flag: nodeFlag{dirty: false, gen: 1}, - cachegen: 65535, cachelimit: 1, - want: true, - }, - } - - for _, test := range tests { - if got := test.flag.canUnload(test.cachegen, test.cachelimit); got != test.want { - t.Errorf("%+v\n got %t, want %t", test, got, test.want) - } - } -} diff --git a/trie/proof.go b/trie/proof.go index f90ecd7d88be..9985e730dd37 100644 --- a/trie/proof.go +++ b/trie/proof.go @@ -21,7 +21,6 @@ import ( "fmt" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" @@ -34,10 +33,10 @@ import ( // If the trie does not contain a value for key, the returned proof contains all // nodes of the longest existing prefix of the key (at least the root node), ending // with the node that proves the absence of the key. -func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) error { // Collect all nodes on the path to key. key = keybytesToHex(key) - nodes := []node{} + var nodes []node tn := t.root for len(key) > 0 && tn != nil { switch n := tn.(type) { @@ -65,7 +64,7 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { panic(fmt.Sprintf("%T: invalid node: %v", tn, tn)) } } - hasher := newHasher(0, 0, nil) + hasher := newHasher(nil) defer returnHasherToPool(hasher) for i, n := range nodes { @@ -81,7 +80,7 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { } else { enc, _ := rlp.EncodeToBytes(n) if !ok { - hash = crypto.Keccak256(enc) + hash = hasher.makeHashNode(enc) } proofDb.Put(hash, enc) } @@ -97,14 +96,14 @@ func (t *Trie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { // If the trie does not contain a value for key, the returned proof contains all // nodes of the longest existing prefix of the key (at least the root node), ending // with the node that proves the absence of the key. -func (t *SecureTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error { +func (t *SecureTrie) Prove(key []byte, fromLevel uint, proofDb ethdb.KeyValueWriter) error { return t.trie.Prove(key, fromLevel, proofDb) } // VerifyProof checks merkle proofs. The given proof must contain the value for // key in a trie with the given root hash. VerifyProof returns an error if the // proof contains invalid trie nodes or the wrong value. -func VerifyProof(rootHash common.Hash, key []byte, proofDb DatabaseReader) (value []byte, nodes int, err error) { +func VerifyProof(rootHash common.Hash, key []byte, proofDb ethdb.KeyValueReader) (value []byte, nodes int, err error) { key = keybytesToHex(key) wantHash := rootHash for i := 0; ; i++ { @@ -112,7 +111,7 @@ func VerifyProof(rootHash common.Hash, key []byte, proofDb DatabaseReader) (valu if buf == nil { return nil, i, fmt.Errorf("proof node %d (hash %064x) missing", i, wantHash) } - n, err := decodeNode(wantHash[:], buf, 0) + n, err := decodeNode(wantHash[:], buf) if err != nil { return nil, i, fmt.Errorf("bad proof node %d: %v", i, err) } diff --git a/trie/proof_test.go b/trie/proof_test.go index 996f87478143..c488f342c872 100644 --- a/trie/proof_test.go +++ b/trie/proof_test.go @@ -25,7 +25,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func init() { @@ -34,18 +34,18 @@ func init() { // makeProvers creates Merkle trie provers based on different implementations to // test all variations. -func makeProvers(trie *Trie) []func(key []byte) *ethdb.MemDatabase { - var provers []func(key []byte) *ethdb.MemDatabase +func makeProvers(trie *Trie) []func(key []byte) *memorydb.Database { + var provers []func(key []byte) *memorydb.Database // Create a direct trie based Merkle prover - provers = append(provers, func(key []byte) *ethdb.MemDatabase { - proof := ethdb.NewMemDatabase() + provers = append(provers, func(key []byte) *memorydb.Database { + proof := memorydb.New() trie.Prove(key, 0, proof) return proof }) // Create a leaf iterator based Merkle prover - provers = append(provers, func(key []byte) *ethdb.MemDatabase { - proof := ethdb.NewMemDatabase() + provers = append(provers, func(key []byte) *memorydb.Database { + proof := memorydb.New() if it := NewIterator(trie.NodeIterator(key)); it.Next() && bytes.Equal(key, it.Key) { for _, p := range it.Prove() { proof.Put(crypto.Keccak256(p), p) @@ -106,9 +106,14 @@ func TestBadProof(t *testing.T) { if proof == nil { t.Fatalf("prover %d: nil proof", i) } - key := proof.Keys()[mrand.Intn(proof.Len())] + it := proof.NewIterator() + for i, d := 0, mrand.Intn(proof.Len()); i <= d; i++ { + it.Next() + } + key := it.Key() val, _ := proof.Get(key) proof.Delete(key) + it.Release() mutateByte(val) proof.Put(crypto.Keccak256(val), val) @@ -127,7 +132,7 @@ func TestMissingKeyProof(t *testing.T) { updateString(trie, "k", "v") for i, key := range []string{"a", "j", "l", "z"} { - proof := ethdb.NewMemDatabase() + proof := memorydb.New() trie.Prove([]byte(key), 0, proof) if proof.Len() != 1 { @@ -164,8 +169,8 @@ func BenchmarkProve(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { kv := vals[keys[i%len(keys)]] - proofs := ethdb.NewMemDatabase() - if trie.Prove(kv.k, 0, proofs); len(proofs.Keys()) == 0 { + proofs := memorydb.New() + if trie.Prove(kv.k, 0, proofs); proofs.Len() == 0 { b.Fatalf("zero length proof for %x", kv.k) } } @@ -175,10 +180,10 @@ func BenchmarkVerifyProof(b *testing.B) { trie, vals := randomTrie(100) root := trie.Hash() var keys []string - var proofs []*ethdb.MemDatabase + var proofs []*memorydb.Database for k := range vals { keys = append(keys, k) - proof := ethdb.NewMemDatabase() + proof := memorydb.New() trie.Prove([]byte(k), 0, proof) proofs = append(proofs, proof) } diff --git a/trie/secure_trie.go b/trie/secure_trie.go index 6a50cfd5a65f..fbc591ed108a 100644 --- a/trie/secure_trie.go +++ b/trie/secure_trie.go @@ -51,7 +51,7 @@ type SecureTrie struct { // Loaded nodes are kept around until their 'cache generation' expires. // A new cache generation is created by each call to Commit. // cachelimit sets the number of past cache generations to keep. -func NewSecure(root common.Hash, db *Database, cachelimit uint16) (*SecureTrie, error) { +func NewSecure(root common.Hash, db *Database) (*SecureTrie, error) { if db == nil { panic("trie.NewSecure called without a database") } @@ -59,7 +59,6 @@ func NewSecure(root common.Hash, db *Database, cachelimit uint16) (*SecureTrie, if err != nil { return nil, err } - trie.SetCacheLimit(cachelimit) return &SecureTrie{trie: *trie}, nil } @@ -161,12 +160,6 @@ func (t *SecureTrie) Hash() common.Hash { return t.trie.Hash() } -// Root returns the root hash of SecureTrie. -// Deprecated: use Hash instead. -func (t *SecureTrie) Root() []byte { - return t.trie.Root() -} - // Copy returns a copy of SecureTrie. func (t *SecureTrie) Copy() *SecureTrie { cpy := *t @@ -183,7 +176,7 @@ func (t *SecureTrie) NodeIterator(start []byte) NodeIterator { // The caller must not hold onto the return value because it will become // invalid on the next call to hashKey or secKey. func (t *SecureTrie) hashKey(key []byte) []byte { - h := newHasher(0, 0, nil) + h := newHasher(nil) h.sha.Reset() h.sha.Write(key) buf := h.sha.Sum(t.hashKeyBuf[:0]) diff --git a/trie/secure_trie_test.go b/trie/secure_trie_test.go index d16d999684a3..fb6c38ee222b 100644 --- a/trie/secure_trie_test.go +++ b/trie/secure_trie_test.go @@ -24,20 +24,19 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) func newEmptySecure() *SecureTrie { - trie, _ := NewSecure(common.Hash{}, NewDatabase(ethdb.NewMemDatabase()), 0) + trie, _ := NewSecure(common.Hash{}, NewDatabase(memorydb.New())) return trie } // makeTestSecureTrie creates a large enough secure trie for testing. func makeTestSecureTrie() (*Database, *SecureTrie, map[string][]byte) { // Create an empty trie - triedb := NewDatabase(ethdb.NewMemDatabase()) - - trie, _ := NewSecure(common.Hash{}, triedb, 0) + triedb := NewDatabase(memorydb.New()) + trie, _ := NewSecure(common.Hash{}, triedb) // Fill it with some arbitrary data content := make(map[string][]byte) diff --git a/trie/sync.go b/trie/sync.go index 67dff5a8b6bc..6f40b45a1ebb 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -72,19 +72,21 @@ func newSyncMemBatch() *syncMemBatch { // unknown trie hashes to retrieve, accepts node data associated with said hashes // and reconstructs the trie step by step until all is done. type Sync struct { - database DatabaseReader // Persistent database to check for existing entries + database ethdb.KeyValueReader // Persistent database to check for existing entries membatch *syncMemBatch // Memory buffer to avoid frequent database writes requests map[common.Hash]*request // Pending requests pertaining to a key hash queue *prque.Prque // Priority queue with the pending requests + bloom *SyncBloom // Bloom filter for fast node existence checks } // NewSync creates a new trie data download scheduler. -func NewSync(root common.Hash, database DatabaseReader, callback LeafCallback) *Sync { +func NewSync(root common.Hash, database ethdb.KeyValueReader, callback LeafCallback, bloom *SyncBloom) *Sync { ts := &Sync{ database: database, membatch: newSyncMemBatch(), requests: make(map[common.Hash]*request), queue: prque.New(nil), + bloom: bloom, } ts.AddSubTrie(root, 0, common.Hash{}, callback) return ts @@ -99,10 +101,14 @@ func (s *Sync) AddSubTrie(root common.Hash, depth int, parent common.Hash, callb if _, ok := s.membatch.batch[root]; ok { return } - key := root.Bytes() - blob, _ := s.database.Get(key) - if local, err := decodeNode(key, blob, 0); local != nil && err == nil { - return + if s.bloom.Contains(root[:]) { + // Bloom filter says this might be a duplicate, double check + blob, _ := s.database.Get(root[:]) + if local, err := decodeNode(root[:], blob); local != nil && err == nil { + return + } + // False positive, bump fault meter + bloomFaultMeter.Mark(1) } // Assemble the new sub-trie sync request req := &request{ @@ -134,8 +140,13 @@ func (s *Sync) AddRawEntry(hash common.Hash, depth int, parent common.Hash) { if _, ok := s.membatch.batch[hash]; ok { return } - if ok, _ := s.database.Has(hash.Bytes()); ok { - return + if s.bloom.Contains(hash[:]) { + // Bloom filter says this might be a duplicate, double check + if ok, _ := s.database.Has(hash[:]); ok { + return + } + // False positive, bump fault meter + bloomFaultMeter.Mark(1) } // Assemble the new sub-trie sync request req := &request{ @@ -157,7 +168,7 @@ func (s *Sync) AddRawEntry(hash common.Hash, depth int, parent common.Hash) { // Missing retrieves the known missing nodes from the trie for retrieval. func (s *Sync) Missing(max int) []common.Hash { - requests := []common.Hash{} + var requests []common.Hash for !s.queue.Empty() && (max == 0 || len(requests) < max) { requests = append(requests, s.queue.PopItem().(common.Hash)) } @@ -187,7 +198,7 @@ func (s *Sync) Process(results []SyncResult) (bool, int, error) { continue } // Decode the node data content and update the request - node, err := decodeNode(item.Hash[:], item.Data, 0) + node, err := decodeNode(item.Hash[:], item.Data) if err != nil { return committed, i, err } @@ -213,14 +224,15 @@ func (s *Sync) Process(results []SyncResult) (bool, int, error) { // Commit flushes the data stored in the internal membatch out to persistent // storage, returning the number of items written and any occurred error. -func (s *Sync) Commit(dbw ethdb.Putter) (int, error) { +func (s *Sync) Commit(dbw ethdb.KeyValueWriter) (int, error) { // Dump the membatch into a database dbw for i, key := range s.membatch.order { if err := dbw.Put(key[:], s.membatch.batch[key]); err != nil { return i, err } + s.bloom.Add(key[:]) } - written := len(s.membatch.order) + written := len(s.membatch.order) // TODO(karalabe): could an order change improve write performance? // Drop the membatch data and return s.membatch = newSyncMemBatch() @@ -254,7 +266,7 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { node node depth int } - children := []child{} + var children []child switch node := (object).(type) { case *shortNode: @@ -292,8 +304,13 @@ func (s *Sync) children(req *request, object node) ([]*request, error) { if _, ok := s.membatch.batch[hash]; ok { continue } - if ok, _ := s.database.Has(node); ok { - continue + if s.bloom.Contains(node) { + // Bloom filter says this might be a duplicate, double check + if ok, _ := s.database.Has(node); ok { + continue + } + // False positive, bump fault meter + bloomFaultMeter.Mark(1) } // Locally unknown node, schedule for retrieval requests = append(requests, &request{ diff --git a/trie/sync_bloom.go b/trie/sync_bloom.go new file mode 100644 index 000000000000..2182d1c43772 --- /dev/null +++ b/trie/sync_bloom.go @@ -0,0 +1,207 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "encoding/binary" + "fmt" + "math" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/metrics" + "github.com/steakknife/bloomfilter" +) + +var ( + bloomAddMeter = metrics.NewRegisteredMeter("trie/bloom/add", nil) + bloomLoadMeter = metrics.NewRegisteredMeter("trie/bloom/load", nil) + bloomTestMeter = metrics.NewRegisteredMeter("trie/bloom/test", nil) + bloomMissMeter = metrics.NewRegisteredMeter("trie/bloom/miss", nil) + bloomFaultMeter = metrics.NewRegisteredMeter("trie/bloom/fault", nil) + bloomErrorGauge = metrics.NewRegisteredGauge("trie/bloom/error", nil) +) + +// syncBloomHasher is a wrapper around a byte blob to satisfy the interface API +// requirements of the bloom library used. It's used to convert a trie hash into +// a 64 bit mini hash. +type syncBloomHasher []byte + +func (f syncBloomHasher) Write(p []byte) (n int, err error) { panic("not implemented") } +func (f syncBloomHasher) Sum(b []byte) []byte { panic("not implemented") } +func (f syncBloomHasher) Reset() { panic("not implemented") } +func (f syncBloomHasher) BlockSize() int { panic("not implemented") } +func (f syncBloomHasher) Size() int { return 8 } +func (f syncBloomHasher) Sum64() uint64 { return binary.BigEndian.Uint64(f) } + +// SyncBloom is a bloom filter used during fast sync to quickly decide if a trie +// node already exists on disk or not. It self populates from the provided disk +// database on creation in a background thread and will only start returning live +// results once that's finished. +type SyncBloom struct { + bloom *bloomfilter.Filter + inited uint32 + closer sync.Once + closed uint32 + pend sync.WaitGroup +} + +// NewSyncBloom creates a new bloom filter of the given size (in megabytes) and +// initializes it from the database. The bloom is hard coded to use 3 filters. +func NewSyncBloom(memory uint64, database ethdb.Iteratee) *SyncBloom { + // Create the bloom filter to track known trie nodes + bloom, err := bloomfilter.New(memory*1024*1024*8, 3) + if err != nil { + panic(fmt.Sprintf("failed to create bloom: %v", err)) + } + log.Info("Allocated fast sync bloom", "size", common.StorageSize(memory*1024*1024)) + + // Assemble the fast sync bloom and init it from previous sessions + b := &SyncBloom{ + bloom: bloom, + } + b.pend.Add(2) + go func() { + defer b.pend.Done() + b.init(database) + }() + go func() { + defer b.pend.Done() + b.meter() + }() + return b +} + +// init iterates over the database, pushing every trie hash into the bloom filter. +func (b *SyncBloom) init(database ethdb.Iteratee) { + // Iterate over the database, but restart every now and again to avoid holding + // a persistent snapshot since fast sync can push a ton of data concurrently, + // bloating the disk. + // + // Note, this is fine, because everything inserted into leveldb by fast sync is + // also pushed into the bloom directly, so we're not missing anything when the + // iterator is swapped out for a new one. + it := database.NewIterator() + + var ( + start = time.Now() + swap = time.Now() + ) + for it.Next() && atomic.LoadUint32(&b.closed) == 0 { + // If the database entry is a trie node, add it to the bloom + if key := it.Key(); len(key) == common.HashLength { + b.bloom.Add(syncBloomHasher(key)) + bloomLoadMeter.Mark(1) + } + // If enough time elapsed since the last iterator swap, restart + if time.Since(swap) > 8*time.Second { + key := common.CopyBytes(it.Key()) + + it.Release() + it = database.NewIteratorWithStart(key) + + log.Info("Initializing fast sync bloom", "items", b.bloom.N(), "errorrate", b.errorRate(), "elapsed", common.PrettyDuration(time.Since(start))) + swap = time.Now() + } + } + it.Release() + + // Mark the bloom filter inited and return + log.Info("Initialized fast sync bloom", "items", b.bloom.N(), "errorrate", b.errorRate(), "elapsed", common.PrettyDuration(time.Since(start))) + atomic.StoreUint32(&b.inited, 1) +} + +// meter periodically recalculates the false positive error rate of the bloom +// filter and reports it in a metric. +func (b *SyncBloom) meter() { + for { + // Report the current error ration. No floats, lame, scale it up. + bloomErrorGauge.Update(int64(b.errorRate() * 100000)) + + // Wait one second, but check termination more frequently + for i := 0; i < 10; i++ { + if atomic.LoadUint32(&b.closed) == 1 { + return + } + time.Sleep(100 * time.Millisecond) + } + } +} + +// Close terminates any background initializer still running and releases all the +// memory allocated for the bloom. +func (b *SyncBloom) Close() error { + b.closer.Do(func() { + // Ensure the initializer is stopped + atomic.StoreUint32(&b.closed, 1) + b.pend.Wait() + + // Wipe the bloom, but mark it "uninited" just in case someone attempts an access + log.Info("Deallocated fast sync bloom", "items", b.bloom.N(), "errorrate", b.errorRate()) + + atomic.StoreUint32(&b.inited, 0) + b.bloom = nil + }) + return nil +} + +// Add inserts a new trie node hash into the bloom filter. +func (b *SyncBloom) Add(hash []byte) { + if atomic.LoadUint32(&b.closed) == 1 { + return + } + b.bloom.Add(syncBloomHasher(hash)) + bloomAddMeter.Mark(1) +} + +// Contains tests if the bloom filter contains the given hash: +// - false: the bloom definitely does not contain hash +// - true: the bloom maybe contains hash +// +// While the bloom is being initialized, any query will return true. +func (b *SyncBloom) Contains(hash []byte) bool { + bloomTestMeter.Mark(1) + if atomic.LoadUint32(&b.inited) == 0 { + // We didn't load all the trie nodes from the previous run of Geth yet. As + // such, we can't say for sure if a hash is not present for anything. Until + // the init is done, we're faking "possible presence" for everything. + return true + } + // Bloom initialized, check the real one and report any successful misses + maybe := b.bloom.Contains(syncBloomHasher(hash)) + if !maybe { + bloomMissMeter.Mark(1) + } + return maybe +} + +// errorRate calculates the probability of a random containment test returning a +// false positive. +// +// We're calculating it ourselves because the bloom library we used missed a +// parentheses in the formula and calculates it wrong. And it's discontinued... +func (b *SyncBloom) errorRate() float64 { + k := float64(b.bloom.K()) + n := float64(b.bloom.N()) + m := float64(b.bloom.M()) + + return math.Pow(1.0-math.Exp((-k)*(n+0.5)/(m-1)), k) +} diff --git a/trie/sync_test.go b/trie/sync_test.go index c76779e5c73d..0621bb43570e 100644 --- a/trie/sync_test.go +++ b/trie/sync_test.go @@ -21,13 +21,13 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" ) // makeTestTrie create a sample test trie to test node-wise reconstruction. func makeTestTrie() (*Database, *Trie, map[string][]byte) { // Create an empty trie - triedb := NewDatabase(ethdb.NewMemDatabase()) + triedb := NewDatabase(memorydb.New()) trie, _ := New(common.Hash{}, triedb) // Fill it with some arbitrary data @@ -88,13 +88,13 @@ func checkTrieConsistency(db *Database, root common.Hash) error { // Tests that an empty trie is not scheduled for syncing. func TestEmptySync(t *testing.T) { - dbA := NewDatabase(ethdb.NewMemDatabase()) - dbB := NewDatabase(ethdb.NewMemDatabase()) + dbA := NewDatabase(memorydb.New()) + dbB := NewDatabase(memorydb.New()) emptyA, _ := New(common.Hash{}, dbA) emptyB, _ := New(emptyRoot, dbB) for i, trie := range []*Trie{emptyA, emptyB} { - if req := NewSync(trie.Hash(), ethdb.NewMemDatabase(), nil).Missing(1); len(req) != 0 { + if req := NewSync(trie.Hash(), memorydb.New(), nil, NewSyncBloom(1, memorydb.New())).Missing(1); len(req) != 0 { t.Errorf("test %d: content requested for empty trie: %v", i, req) } } @@ -110,9 +110,9 @@ func testIterativeSync(t *testing.T, batch int) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) queue := append([]common.Hash{}, sched.Missing(batch)...) for len(queue) > 0 { @@ -133,7 +133,7 @@ func testIterativeSync(t *testing.T, batch int) { queue = append(queue[:0], sched.Missing(batch)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that the trie scheduler can correctly reconstruct the state even if only @@ -143,9 +143,9 @@ func TestIterativeDelayedSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) queue := append([]common.Hash{}, sched.Missing(10000)...) for len(queue) > 0 { @@ -167,7 +167,7 @@ func TestIterativeDelayedSync(t *testing.T) { queue = append(queue[len(results):], sched.Missing(10000)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that given a root hash, a trie can sync iteratively on a single thread, @@ -181,9 +181,9 @@ func testIterativeRandomSync(t *testing.T, batch int) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) queue := make(map[common.Hash]struct{}) for _, hash := range sched.Missing(batch) { @@ -212,7 +212,7 @@ func testIterativeRandomSync(t *testing.T, batch int) { } } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that the trie scheduler can correctly reconstruct the state even if only @@ -222,9 +222,9 @@ func TestIterativeRandomDelayedSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) queue := make(map[common.Hash]struct{}) for _, hash := range sched.Missing(10000) { @@ -259,7 +259,7 @@ func TestIterativeRandomDelayedSync(t *testing.T) { } } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that a trie sync will not request nodes multiple times, even if they @@ -269,9 +269,9 @@ func TestDuplicateAvoidanceSync(t *testing.T) { srcDb, srcTrie, srcData := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) queue := append([]common.Hash{}, sched.Missing(0)...) requested := make(map[common.Hash]struct{}) @@ -299,7 +299,7 @@ func TestDuplicateAvoidanceSync(t *testing.T) { queue = append(queue[:0], sched.Missing(0)...) } // Cross check that the two tries are in sync - checkTrieContents(t, triedb, srcTrie.Root(), srcData) + checkTrieContents(t, triedb, srcTrie.Hash().Bytes(), srcData) } // Tests that at any point in time during a sync, only complete sub-tries are in @@ -309,11 +309,11 @@ func TestIncompleteSync(t *testing.T) { srcDb, srcTrie, _ := makeTestTrie() // Create a destination trie and sync with the scheduler - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) - sched := NewSync(srcTrie.Hash(), diskdb, nil) + sched := NewSync(srcTrie.Hash(), diskdb, nil, NewSyncBloom(1, diskdb)) - added := []common.Hash{} + var added []common.Hash queue := append([]common.Hash{}, sched.Missing(1)...) for len(queue) > 0 { // Fetch a batch of trie nodes diff --git a/trie/trie.go b/trie/trie.go index af424d4ac676..920e331fd62f 100644 --- a/trie/trie.go +++ b/trie/trie.go @@ -24,7 +24,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" - "github.com/ethereum/go-ethereum/metrics" ) var ( @@ -35,25 +34,6 @@ var ( emptyState = crypto.Keccak256Hash(nil) ) -var ( - cacheMissCounter = metrics.NewRegisteredCounter("trie/cachemiss", nil) - cacheUnloadCounter = metrics.NewRegisteredCounter("trie/cacheunload", nil) -) - -// CacheMisses retrieves a global counter measuring the number of cache misses -// the trie had since process startup. This isn't useful for anything apart from -// trie debugging purposes. -func CacheMisses() int64 { - return cacheMissCounter.Count() -} - -// CacheUnloads retrieves a global counter measuring the number of cache unloads -// the trie did since process startup. This isn't useful for anything apart from -// trie debugging purposes. -func CacheUnloads() int64 { - return cacheUnloadCounter.Count() -} - // LeafCallback is a callback type invoked when a trie operation reaches a leaf // node. It's used by state sync and commit to allow handling external references // between account and storage tries. @@ -67,23 +47,11 @@ type LeafCallback func(leaf []byte, parent common.Hash) error type Trie struct { db *Database root node - - // Cache generation values. - // cachegen increases by one with each commit operation. - // new nodes are tagged with the current generation and unloaded - // when their generation is older than than cachegen-cachelimit. - cachegen, cachelimit uint16 -} - -// SetCacheLimit sets the number of 'cache generations' to keep. -// A cache generation is created by a call to Commit. -func (t *Trie) SetCacheLimit(l uint16) { - t.cachelimit = l } // newFlag returns the cache flag value for a newly created node. func (t *Trie) newFlag() nodeFlag { - return nodeFlag{dirty: true, gen: t.cachegen} + return nodeFlag{dirty: true} } // New creates a trie with an existing root node from db. @@ -152,14 +120,12 @@ func (t *Trie) tryGet(origNode node, key []byte, pos int) (value []byte, newnode if err == nil && didResolve { n = n.copy() n.Val = newnode - n.flags.gen = t.cachegen } return value, n, didResolve, err case *fullNode: value, newnode, didResolve, err = t.tryGet(n.Children[key[pos]], key, pos+1) if err == nil && didResolve { n = n.copy() - n.flags.gen = t.cachegen n.Children[key[pos]] = newnode } return value, n, didResolve, err @@ -428,19 +394,13 @@ func (t *Trie) resolve(n node, prefix []byte) (node, error) { } func (t *Trie) resolveHash(n hashNode, prefix []byte) (node, error) { - cacheMissCounter.Inc(1) - hash := common.BytesToHash(n) - if node := t.db.node(hash, t.cachegen); node != nil { + if node := t.db.node(hash); node != nil { return node, nil } return nil, &MissingNodeError{NodeHash: hash, Path: prefix} } -// Root returns the root hash of the trie. -// Deprecated: use Hash instead. -func (t *Trie) Root() []byte { return t.Hash().Bytes() } - // Hash returns the root hash of the trie. It does not write to the // database and can be used even if the trie doesn't have one. func (t *Trie) Hash() common.Hash { @@ -460,7 +420,6 @@ func (t *Trie) Commit(onleaf LeafCallback) (root common.Hash, err error) { return common.Hash{}, err } t.root = cached - t.cachegen++ return common.BytesToHash(hash.(hashNode)), nil } @@ -468,7 +427,7 @@ func (t *Trie) hashRoot(db *Database, onleaf LeafCallback) (node, node, error) { if t.root == nil { return hashNode(emptyRoot.Bytes()), nil, nil } - h := newHasher(t.cachegen, t.cachelimit, onleaf) + h := newHasher(onleaf) defer returnHasherToPool(h) return h.hash(t.root, db, true) } diff --git a/trie/trie_test.go b/trie/trie_test.go index 4d84aa96cf45..2a9d53d0ad6b 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -19,7 +19,6 @@ package trie import ( "bytes" "encoding/binary" - "errors" "fmt" "io/ioutil" "math/big" @@ -33,6 +32,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/ethdb/leveldb" + "github.com/ethereum/go-ethereum/ethdb/memorydb" "github.com/ethereum/go-ethereum/rlp" ) @@ -43,7 +44,7 @@ func init() { // Used for testing func newEmpty() *Trie { - trie, _ := New(common.Hash{}, NewDatabase(ethdb.NewMemDatabase())) + trie, _ := New(common.Hash{}, NewDatabase(memorydb.New())) return trie } @@ -51,7 +52,7 @@ func TestEmptyTrie(t *testing.T) { var trie Trie res := trie.Hash() exp := emptyRoot - if res != common.Hash(exp) { + if res != exp { t.Errorf("expected %x got %x", exp, res) } } @@ -67,7 +68,7 @@ func TestNull(t *testing.T) { } func TestMissingRoot(t *testing.T) { - trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(ethdb.NewMemDatabase())) + trie, err := New(common.HexToHash("0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"), NewDatabase(memorydb.New())) if trie != nil { t.Error("New returned non-nil trie for invalid root") } @@ -80,7 +81,7 @@ func TestMissingNodeDisk(t *testing.T) { testMissingNode(t, false) } func TestMissingNodeMemonly(t *testing.T) { testMissingNode(t, true) } func testMissingNode(t *testing.T, memonly bool) { - diskdb := ethdb.NewMemDatabase() + diskdb := memorydb.New() triedb := NewDatabase(diskdb) trie, _ := New(common.Hash{}, triedb) @@ -317,45 +318,13 @@ func TestLargeValue(t *testing.T) { } type countingDB struct { - ethdb.Database + ethdb.KeyValueStore gets map[string]int } func (db *countingDB) Get(key []byte) ([]byte, error) { db.gets[string(key)]++ - return db.Database.Get(key) -} - -// TestCacheUnload checks that decoded nodes are unloaded after a -// certain number of commit operations. -func TestCacheUnload(t *testing.T) { - // Create test trie with two branches. - trie := newEmpty() - key1 := "---------------------------------" - key2 := "---some other branch" - updateString(trie, key1, "this is the branch of key1.") - updateString(trie, key2, "this is the branch of key2.") - - root, _ := trie.Commit(nil) - trie.db.Commit(root, true) - - // Commit the trie repeatedly and access key1. - // The branch containing it is loaded from DB exactly two times: - // in the 0th and 6th iteration. - diskdb := &countingDB{Database: trie.db.diskdb, gets: make(map[string]int)} - triedb := NewDatabase(diskdb) - trie, _ = New(root, triedb) - trie.SetCacheLimit(5) - for i := 0; i < 12; i++ { - getString(trie, key1) - trie.Commit(nil) - } - // Check that it got loaded two times. - for dbkey, count := range diskdb.gets { - if count != 2 { - t.Errorf("db key %x loaded %d times, want %d times", []byte(dbkey), count, 2) - } - } + return db.KeyValueStore.Get(key) } // randTest performs random trie operations. @@ -377,7 +346,6 @@ const ( opHash opReset opItercheckhash - opCheckCacheInvariant opMax // boundary value, not an actual op ) @@ -412,7 +380,7 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value { } func runRandTest(rt randTest) bool { - triedb := NewDatabase(ethdb.NewMemDatabase()) + triedb := NewDatabase(memorydb.New()) tr, _ := New(common.Hash{}, triedb) values := make(map[string]string) // tracks content of the trie @@ -456,8 +424,6 @@ func runRandTest(rt randTest) bool { if tr.Hash() != checktr.Hash() { rt[i].err = fmt.Errorf("hash mismatch in opItercheckhash") } - case opCheckCacheInvariant: - rt[i].err = checkCacheInvariant(tr.root, nil, tr.cachegen, false, 0) } // Abort the test on error. if rt[i].err != nil { @@ -467,40 +433,6 @@ func runRandTest(rt randTest) bool { return true } -func checkCacheInvariant(n, parent node, parentCachegen uint16, parentDirty bool, depth int) error { - var children []node - var flag nodeFlag - switch n := n.(type) { - case *shortNode: - flag = n.flags - children = []node{n.Val} - case *fullNode: - flag = n.flags - children = n.Children[:] - default: - return nil - } - - errorf := func(format string, args ...interface{}) error { - msg := fmt.Sprintf(format, args...) - msg += fmt.Sprintf("\nat depth %d node %s", depth, spew.Sdump(n)) - msg += fmt.Sprintf("parent: %s", spew.Sdump(parent)) - return errors.New(msg) - } - if flag.gen > parentCachegen { - return errorf("cache invariant violation: %d > %d\n", flag.gen, parentCachegen) - } - if depth > 0 && !parentDirty && flag.dirty { - return errorf("cache invariant violation: %d > %d\n", flag.gen, parentCachegen) - } - for _, child := range children { - if err := checkCacheInvariant(child, n, flag.gen, flag.dirty, depth+1); err != nil { - return err - } - } - return nil -} - func TestRandom(t *testing.T) { if err := quick.Check(runRandTest, nil); err != nil { if cerr, ok := err.(*quick.CheckError); ok { @@ -540,7 +472,7 @@ func benchGet(b *testing.B, commit bool) { b.StopTimer() if commit { - ldb := trie.db.diskdb.(*ethdb.LDBDatabase) + ldb := trie.db.diskdb.(*leveldb.Database) ldb.Close() os.RemoveAll(ldb.Path()) } @@ -596,7 +528,7 @@ func tempDB() (string, *Database) { if err != nil { panic(fmt.Sprintf("can't create temporary directory: %v", err)) } - diskdb, err := ethdb.NewLDBDatabase(dir, 256, 0) + diskdb, err := leveldb.New(dir, 256, 0, "") if err != nil { panic(fmt.Sprintf("can't create temporary database: %v", err)) } @@ -624,6 +556,6 @@ func TestDecodeNode(t *testing.T) { for i := 0; i < 5000000; i++ { rand.Read(hash) rand.Read(elems) - decodeNode(hash, elems, 1) + decodeNode(hash, elems) } } diff --git a/vendor/bazil.org/fuse/LICENSE b/vendor/bazil.org/fuse/LICENSE deleted file mode 100644 index 4ac7cd838960..000000000000 --- a/vendor/bazil.org/fuse/LICENSE +++ /dev/null @@ -1,93 +0,0 @@ -Copyright (c) 2013-2015 Tommi Virtanen. -Copyright (c) 2009, 2011, 2012 The Go Authors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -The following included software components have additional copyright -notices and license terms that may differ from the above. - - -File fuse.go: - -// Adapted from Plan 9 from User Space's src/cmd/9pfuse/fuse.c, -// which carries this notice: -// -// The files in this directory are subject to the following license. -// -// The author of this software is Russ Cox. -// -// Copyright (c) 2006 Russ Cox -// -// Permission to use, copy, modify, and distribute this software for any -// purpose without fee is hereby granted, provided that this entire notice -// is included in all copies of any software which is or includes a copy -// or modification of this software and in all copies of the supporting -// documentation for such software. -// -// THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED -// WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION OR WARRANTY -// OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS SOFTWARE OR ITS -// FITNESS FOR ANY PARTICULAR PURPOSE. - - -File fuse_kernel.go: - -// Derived from FUSE's fuse_kernel.h -/* - This file defines the kernel interface of FUSE - Copyright (C) 2001-2007 Miklos Szeredi - - - This -- and only this -- header file may also be distributed under - the terms of the BSD Licence as follows: - - Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. -*/ diff --git a/vendor/bazil.org/fuse/README.md b/vendor/bazil.org/fuse/README.md deleted file mode 100644 index 8c6d556ee38d..000000000000 --- a/vendor/bazil.org/fuse/README.md +++ /dev/null @@ -1,23 +0,0 @@ -bazil.org/fuse -- Filesystems in Go -=================================== - -`bazil.org/fuse` is a Go library for writing FUSE userspace -filesystems. - -It is a from-scratch implementation of the kernel-userspace -communication protocol, and does not use the C library from the -project called FUSE. `bazil.org/fuse` embraces Go fully for safety and -ease of programming. - -Here’s how to get going: - - go get bazil.org/fuse - -Website: http://bazil.org/fuse/ - -Github repository: https://github.com/bazil/fuse - -API docs: http://godoc.org/bazil.org/fuse - -Our thanks to Russ Cox for his fuse library, which this project is -based on. diff --git a/vendor/bazil.org/fuse/buffer.go b/vendor/bazil.org/fuse/buffer.go deleted file mode 100644 index bb1d2b77696a..000000000000 --- a/vendor/bazil.org/fuse/buffer.go +++ /dev/null @@ -1,35 +0,0 @@ -package fuse - -import "unsafe" - -// buffer provides a mechanism for constructing a message from -// multiple segments. -type buffer []byte - -// alloc allocates size bytes and returns a pointer to the new -// segment. -func (w *buffer) alloc(size uintptr) unsafe.Pointer { - s := int(size) - if len(*w)+s > cap(*w) { - old := *w - *w = make([]byte, len(*w), 2*cap(*w)+s) - copy(*w, old) - } - l := len(*w) - *w = (*w)[:l+s] - return unsafe.Pointer(&(*w)[l]) -} - -// reset clears out the contents of the buffer. -func (w *buffer) reset() { - for i := range (*w)[:cap(*w)] { - (*w)[i] = 0 - } - *w = (*w)[:0] -} - -func newBuffer(extra uintptr) buffer { - const hdrSize = unsafe.Sizeof(outHeader{}) - buf := make(buffer, hdrSize, hdrSize+extra) - return buf -} diff --git a/vendor/bazil.org/fuse/debug.go b/vendor/bazil.org/fuse/debug.go deleted file mode 100644 index be9f900d5e1a..000000000000 --- a/vendor/bazil.org/fuse/debug.go +++ /dev/null @@ -1,21 +0,0 @@ -package fuse - -import ( - "runtime" -) - -func stack() string { - buf := make([]byte, 1024) - return string(buf[:runtime.Stack(buf, false)]) -} - -func nop(msg interface{}) {} - -// Debug is called to output debug messages, including protocol -// traces. The default behavior is to do nothing. -// -// The messages have human-friendly string representations and are -// safe to marshal to JSON. -// -// Implementations must not retain msg. -var Debug func(msg interface{}) = nop diff --git a/vendor/bazil.org/fuse/error_darwin.go b/vendor/bazil.org/fuse/error_darwin.go deleted file mode 100644 index a3fb89ca29f4..000000000000 --- a/vendor/bazil.org/fuse/error_darwin.go +++ /dev/null @@ -1,17 +0,0 @@ -package fuse - -import ( - "syscall" -) - -const ( - ENOATTR = Errno(syscall.ENOATTR) -) - -const ( - errNoXattr = ENOATTR -) - -func init() { - errnoNames[errNoXattr] = "ENOATTR" -} diff --git a/vendor/bazil.org/fuse/error_freebsd.go b/vendor/bazil.org/fuse/error_freebsd.go deleted file mode 100644 index c6ea6d6e71ff..000000000000 --- a/vendor/bazil.org/fuse/error_freebsd.go +++ /dev/null @@ -1,15 +0,0 @@ -package fuse - -import "syscall" - -const ( - ENOATTR = Errno(syscall.ENOATTR) -) - -const ( - errNoXattr = ENOATTR -) - -func init() { - errnoNames[errNoXattr] = "ENOATTR" -} diff --git a/vendor/bazil.org/fuse/error_linux.go b/vendor/bazil.org/fuse/error_linux.go deleted file mode 100644 index 6f113e71ed23..000000000000 --- a/vendor/bazil.org/fuse/error_linux.go +++ /dev/null @@ -1,17 +0,0 @@ -package fuse - -import ( - "syscall" -) - -const ( - ENODATA = Errno(syscall.ENODATA) -) - -const ( - errNoXattr = ENODATA -) - -func init() { - errnoNames[errNoXattr] = "ENODATA" -} diff --git a/vendor/bazil.org/fuse/error_std.go b/vendor/bazil.org/fuse/error_std.go deleted file mode 100644 index 398f43fbf694..000000000000 --- a/vendor/bazil.org/fuse/error_std.go +++ /dev/null @@ -1,31 +0,0 @@ -package fuse - -// There is very little commonality in extended attribute errors -// across platforms. -// -// getxattr return value for "extended attribute does not exist" is -// ENOATTR on OS X, and ENODATA on Linux and apparently at least -// NetBSD. There may be a #define ENOATTR on Linux too, but the value -// is ENODATA in the actual syscalls. FreeBSD and OpenBSD have no -// ENODATA, only ENOATTR. ENOATTR is not in any of the standards, -// ENODATA exists but is only used for STREAMs. -// -// Each platform will define it a errNoXattr constant, and this file -// will enforce that it implements the right interfaces and hide the -// implementation. -// -// https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/getxattr.2.html -// http://mail-index.netbsd.org/tech-kern/2012/04/30/msg013090.html -// http://mail-index.netbsd.org/tech-kern/2012/04/30/msg013097.html -// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html -// http://www.freebsd.org/cgi/man.cgi?query=extattr_get_file&sektion=2 -// http://nixdoc.net/man-pages/openbsd/man2/extattr_get_file.2.html - -// ErrNoXattr is a platform-independent error value meaning the -// extended attribute was not found. It can be used to respond to -// GetxattrRequest and such. -const ErrNoXattr = errNoXattr - -var _ error = ErrNoXattr -var _ Errno = ErrNoXattr -var _ ErrorNumber = ErrNoXattr diff --git a/vendor/bazil.org/fuse/fs/serve.go b/vendor/bazil.org/fuse/fs/serve.go deleted file mode 100644 index e9fc56590fd8..000000000000 --- a/vendor/bazil.org/fuse/fs/serve.go +++ /dev/null @@ -1,1568 +0,0 @@ -// FUSE service loop, for servers that wish to use it. - -package fs // import "bazil.org/fuse/fs" - -import ( - "encoding/binary" - "fmt" - "hash/fnv" - "io" - "log" - "reflect" - "runtime" - "strings" - "sync" - "time" - - "golang.org/x/net/context" -) - -import ( - "bytes" - - "bazil.org/fuse" - "bazil.org/fuse/fuseutil" -) - -const ( - attrValidTime = 1 * time.Minute - entryValidTime = 1 * time.Minute -) - -// TODO: FINISH DOCS - -// An FS is the interface required of a file system. -// -// Other FUSE requests can be handled by implementing methods from the -// FS* interfaces, for example FSStatfser. -type FS interface { - // Root is called to obtain the Node for the file system root. - Root() (Node, error) -} - -type FSStatfser interface { - // Statfs is called to obtain file system metadata. - // It should write that data to resp. - Statfs(ctx context.Context, req *fuse.StatfsRequest, resp *fuse.StatfsResponse) error -} - -type FSDestroyer interface { - // Destroy is called when the file system is shutting down. - // - // Linux only sends this request for block device backed (fuseblk) - // filesystems, to allow them to flush writes to disk before the - // unmount completes. - Destroy() -} - -type FSInodeGenerator interface { - // GenerateInode is called to pick a dynamic inode number when it - // would otherwise be 0. - // - // Not all filesystems bother tracking inodes, but FUSE requires - // the inode to be set, and fewer duplicates in general makes UNIX - // tools work better. - // - // Operations where the nodes may return 0 inodes include Getattr, - // Setattr and ReadDir. - // - // If FS does not implement FSInodeGenerator, GenerateDynamicInode - // is used. - // - // Implementing this is useful to e.g. constrain the range of - // inode values used for dynamic inodes. - GenerateInode(parentInode uint64, name string) uint64 -} - -// A Node is the interface required of a file or directory. -// See the documentation for type FS for general information -// pertaining to all methods. -// -// A Node must be usable as a map key, that is, it cannot be a -// function, map or slice. -// -// Other FUSE requests can be handled by implementing methods from the -// Node* interfaces, for example NodeOpener. -// -// Methods returning Node should take care to return the same Node -// when the result is logically the same instance. Without this, each -// Node will get a new NodeID, causing spurious cache invalidations, -// extra lookups and aliasing anomalies. This may not matter for a -// simple, read-only filesystem. -type Node interface { - // Attr fills attr with the standard metadata for the node. - // - // Fields with reasonable defaults are prepopulated. For example, - // all times are set to a fixed moment when the program started. - // - // If Inode is left as 0, a dynamic inode number is chosen. - // - // The result may be cached for the duration set in Valid. - Attr(ctx context.Context, attr *fuse.Attr) error -} - -type NodeGetattrer interface { - // Getattr obtains the standard metadata for the receiver. - // It should store that metadata in resp. - // - // If this method is not implemented, the attributes will be - // generated based on Attr(), with zero values filled in. - Getattr(ctx context.Context, req *fuse.GetattrRequest, resp *fuse.GetattrResponse) error -} - -type NodeSetattrer interface { - // Setattr sets the standard metadata for the receiver. - // - // Note, this is also used to communicate changes in the size of - // the file, outside of Writes. - // - // req.Valid is a bitmask of what fields are actually being set. - // For example, the method should not change the mode of the file - // unless req.Valid.Mode() is true. - Setattr(ctx context.Context, req *fuse.SetattrRequest, resp *fuse.SetattrResponse) error -} - -type NodeSymlinker interface { - // Symlink creates a new symbolic link in the receiver, which must be a directory. - // - // TODO is the above true about directories? - Symlink(ctx context.Context, req *fuse.SymlinkRequest) (Node, error) -} - -// This optional request will be called only for symbolic link nodes. -type NodeReadlinker interface { - // Readlink reads a symbolic link. - Readlink(ctx context.Context, req *fuse.ReadlinkRequest) (string, error) -} - -type NodeLinker interface { - // Link creates a new directory entry in the receiver based on an - // existing Node. Receiver must be a directory. - Link(ctx context.Context, req *fuse.LinkRequest, old Node) (Node, error) -} - -type NodeRemover interface { - // Remove removes the entry with the given name from - // the receiver, which must be a directory. The entry to be removed - // may correspond to a file (unlink) or to a directory (rmdir). - Remove(ctx context.Context, req *fuse.RemoveRequest) error -} - -type NodeAccesser interface { - // Access checks whether the calling context has permission for - // the given operations on the receiver. If so, Access should - // return nil. If not, Access should return EPERM. - // - // Note that this call affects the result of the access(2) system - // call but not the open(2) system call. If Access is not - // implemented, the Node behaves as if it always returns nil - // (permission granted), relying on checks in Open instead. - Access(ctx context.Context, req *fuse.AccessRequest) error -} - -type NodeStringLookuper interface { - // Lookup looks up a specific entry in the receiver, - // which must be a directory. Lookup should return a Node - // corresponding to the entry. If the name does not exist in - // the directory, Lookup should return ENOENT. - // - // Lookup need not to handle the names "." and "..". - Lookup(ctx context.Context, name string) (Node, error) -} - -type NodeRequestLookuper interface { - // Lookup looks up a specific entry in the receiver. - // See NodeStringLookuper for more. - Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (Node, error) -} - -type NodeMkdirer interface { - Mkdir(ctx context.Context, req *fuse.MkdirRequest) (Node, error) -} - -type NodeOpener interface { - // Open opens the receiver. After a successful open, a client - // process has a file descriptor referring to this Handle. - // - // Open can also be also called on non-files. For example, - // directories are Opened for ReadDir or fchdir(2). - // - // If this method is not implemented, the open will always - // succeed, and the Node itself will be used as the Handle. - // - // XXX note about access. XXX OpenFlags. - Open(ctx context.Context, req *fuse.OpenRequest, resp *fuse.OpenResponse) (Handle, error) -} - -type NodeCreater interface { - // Create creates a new directory entry in the receiver, which - // must be a directory. - Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (Node, Handle, error) -} - -type NodeForgetter interface { - // Forget about this node. This node will not receive further - // method calls. - // - // Forget is not necessarily seen on unmount, as all nodes are - // implicitly forgotten as part part of the unmount. - Forget() -} - -type NodeRenamer interface { - Rename(ctx context.Context, req *fuse.RenameRequest, newDir Node) error -} - -type NodeMknoder interface { - Mknod(ctx context.Context, req *fuse.MknodRequest) (Node, error) -} - -// TODO this should be on Handle not Node -type NodeFsyncer interface { - Fsync(ctx context.Context, req *fuse.FsyncRequest) error -} - -type NodeGetxattrer interface { - // Getxattr gets an extended attribute by the given name from the - // node. - // - // If there is no xattr by that name, returns fuse.ErrNoXattr. - Getxattr(ctx context.Context, req *fuse.GetxattrRequest, resp *fuse.GetxattrResponse) error -} - -type NodeListxattrer interface { - // Listxattr lists the extended attributes recorded for the node. - Listxattr(ctx context.Context, req *fuse.ListxattrRequest, resp *fuse.ListxattrResponse) error -} - -type NodeSetxattrer interface { - // Setxattr sets an extended attribute with the given name and - // value for the node. - Setxattr(ctx context.Context, req *fuse.SetxattrRequest) error -} - -type NodeRemovexattrer interface { - // Removexattr removes an extended attribute for the name. - // - // If there is no xattr by that name, returns fuse.ErrNoXattr. - Removexattr(ctx context.Context, req *fuse.RemovexattrRequest) error -} - -var startTime = time.Now() - -func nodeAttr(ctx context.Context, n Node, attr *fuse.Attr) error { - attr.Valid = attrValidTime - attr.Nlink = 1 - attr.Atime = startTime - attr.Mtime = startTime - attr.Ctime = startTime - attr.Crtime = startTime - if err := n.Attr(ctx, attr); err != nil { - return err - } - return nil -} - -// A Handle is the interface required of an opened file or directory. -// See the documentation for type FS for general information -// pertaining to all methods. -// -// Other FUSE requests can be handled by implementing methods from the -// Handle* interfaces. The most common to implement are HandleReader, -// HandleReadDirer, and HandleWriter. -// -// TODO implement methods: Getlk, Setlk, Setlkw -type Handle interface { -} - -type HandleFlusher interface { - // Flush is called each time the file or directory is closed. - // Because there can be multiple file descriptors referring to a - // single opened file, Flush can be called multiple times. - Flush(ctx context.Context, req *fuse.FlushRequest) error -} - -type HandleReadAller interface { - ReadAll(ctx context.Context) ([]byte, error) -} - -type HandleReadDirAller interface { - ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) -} - -type HandleReader interface { - // Read requests to read data from the handle. - // - // There is a page cache in the kernel that normally submits only - // page-aligned reads spanning one or more pages. However, you - // should not rely on this. To see individual requests as - // submitted by the file system clients, set OpenDirectIO. - // - // Note that reads beyond the size of the file as reported by Attr - // are not even attempted (except in OpenDirectIO mode). - Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error -} - -type HandleWriter interface { - // Write requests to write data into the handle at the given offset. - // Store the amount of data written in resp.Size. - // - // There is a writeback page cache in the kernel that normally submits - // only page-aligned writes spanning one or more pages. However, - // you should not rely on this. To see individual requests as - // submitted by the file system clients, set OpenDirectIO. - // - // Writes that grow the file are expected to update the file size - // (as seen through Attr). Note that file size changes are - // communicated also through Setattr. - Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) error -} - -type HandleReleaser interface { - Release(ctx context.Context, req *fuse.ReleaseRequest) error -} - -type Config struct { - // Function to send debug log messages to. If nil, use fuse.Debug. - // Note that changing this or fuse.Debug may not affect existing - // calls to Serve. - // - // See fuse.Debug for the rules that log functions must follow. - Debug func(msg interface{}) - - // Function to put things into context for processing the request. - // The returned context must have ctx as its parent. - // - // Note that changing this may not affect existing calls to Serve. - // - // Must not retain req. - WithContext func(ctx context.Context, req fuse.Request) context.Context -} - -// New returns a new FUSE server ready to serve this kernel FUSE -// connection. -// -// Config may be nil. -func New(conn *fuse.Conn, config *Config) *Server { - s := &Server{ - conn: conn, - req: map[fuse.RequestID]*serveRequest{}, - nodeRef: map[Node]fuse.NodeID{}, - dynamicInode: GenerateDynamicInode, - } - if config != nil { - s.debug = config.Debug - s.context = config.WithContext - } - if s.debug == nil { - s.debug = fuse.Debug - } - return s -} - -type Server struct { - // set in New - conn *fuse.Conn - debug func(msg interface{}) - context func(ctx context.Context, req fuse.Request) context.Context - - // set once at Serve time - fs FS - dynamicInode func(parent uint64, name string) uint64 - - // state, protected by meta - meta sync.Mutex - req map[fuse.RequestID]*serveRequest - node []*serveNode - nodeRef map[Node]fuse.NodeID - handle []*serveHandle - freeNode []fuse.NodeID - freeHandle []fuse.HandleID - nodeGen uint64 - - // Used to ensure worker goroutines finish before Serve returns - wg sync.WaitGroup -} - -// Serve serves the FUSE connection by making calls to the methods -// of fs and the Nodes and Handles it makes available. It returns only -// when the connection has been closed or an unexpected error occurs. -func (s *Server) Serve(fs FS) error { - defer s.wg.Wait() // Wait for worker goroutines to complete before return - - s.fs = fs - if dyn, ok := fs.(FSInodeGenerator); ok { - s.dynamicInode = dyn.GenerateInode - } - - root, err := fs.Root() - if err != nil { - return fmt.Errorf("cannot obtain root node: %v", err) - } - // Recognize the root node if it's ever returned from Lookup, - // passed to Invalidate, etc. - s.nodeRef[root] = 1 - s.node = append(s.node, nil, &serveNode{ - inode: 1, - generation: s.nodeGen, - node: root, - refs: 1, - }) - s.handle = append(s.handle, nil) - - for { - req, err := s.conn.ReadRequest() - if err != nil { - if err == io.EOF { - break - } - return err - } - - s.wg.Add(1) - go func() { - defer s.wg.Done() - s.serve(req) - }() - } - return nil -} - -// Serve serves a FUSE connection with the default settings. See -// Server.Serve. -func Serve(c *fuse.Conn, fs FS) error { - server := New(c, nil) - return server.Serve(fs) -} - -type nothing struct{} - -type serveRequest struct { - Request fuse.Request - cancel func() -} - -type serveNode struct { - inode uint64 - generation uint64 - node Node - refs uint64 - - // Delay freeing the NodeID until waitgroup is done. This allows - // using the NodeID for short periods of time without holding the - // Server.meta lock. - // - // Rules: - // - // - hold Server.meta while calling wg.Add, then unlock - // - do NOT try to reacquire Server.meta - wg sync.WaitGroup -} - -func (sn *serveNode) attr(ctx context.Context, attr *fuse.Attr) error { - err := nodeAttr(ctx, sn.node, attr) - if attr.Inode == 0 { - attr.Inode = sn.inode - } - return err -} - -type serveHandle struct { - handle Handle - readData []byte - nodeID fuse.NodeID -} - -// NodeRef is deprecated. It remains here to decrease code churn on -// FUSE library users. You may remove it from your program now; -// returning the same Node values are now recognized automatically, -// without needing NodeRef. -type NodeRef struct{} - -func (c *Server) saveNode(inode uint64, node Node) (id fuse.NodeID, gen uint64) { - c.meta.Lock() - defer c.meta.Unlock() - - if id, ok := c.nodeRef[node]; ok { - sn := c.node[id] - sn.refs++ - return id, sn.generation - } - - sn := &serveNode{inode: inode, node: node, refs: 1} - if n := len(c.freeNode); n > 0 { - id = c.freeNode[n-1] - c.freeNode = c.freeNode[:n-1] - c.node[id] = sn - c.nodeGen++ - } else { - id = fuse.NodeID(len(c.node)) - c.node = append(c.node, sn) - } - sn.generation = c.nodeGen - c.nodeRef[node] = id - return id, sn.generation -} - -func (c *Server) saveHandle(handle Handle, nodeID fuse.NodeID) (id fuse.HandleID) { - c.meta.Lock() - shandle := &serveHandle{handle: handle, nodeID: nodeID} - if n := len(c.freeHandle); n > 0 { - id = c.freeHandle[n-1] - c.freeHandle = c.freeHandle[:n-1] - c.handle[id] = shandle - } else { - id = fuse.HandleID(len(c.handle)) - c.handle = append(c.handle, shandle) - } - c.meta.Unlock() - return -} - -type nodeRefcountDropBug struct { - N uint64 - Refs uint64 - Node fuse.NodeID -} - -func (n *nodeRefcountDropBug) String() string { - return fmt.Sprintf("bug: trying to drop %d of %d references to %v", n.N, n.Refs, n.Node) -} - -func (c *Server) dropNode(id fuse.NodeID, n uint64) (forget bool) { - c.meta.Lock() - defer c.meta.Unlock() - snode := c.node[id] - - if snode == nil { - // this should only happen if refcounts kernel<->us disagree - // *and* two ForgetRequests for the same node race each other; - // this indicates a bug somewhere - c.debug(nodeRefcountDropBug{N: n, Node: id}) - - // we may end up triggering Forget twice, but that's better - // than not even once, and that's the best we can do - return true - } - - if n > snode.refs { - c.debug(nodeRefcountDropBug{N: n, Refs: snode.refs, Node: id}) - n = snode.refs - } - - snode.refs -= n - if snode.refs == 0 { - snode.wg.Wait() - c.node[id] = nil - delete(c.nodeRef, snode.node) - c.freeNode = append(c.freeNode, id) - return true - } - return false -} - -func (c *Server) dropHandle(id fuse.HandleID) { - c.meta.Lock() - c.handle[id] = nil - c.freeHandle = append(c.freeHandle, id) - c.meta.Unlock() -} - -type missingHandle struct { - Handle fuse.HandleID - MaxHandle fuse.HandleID -} - -func (m missingHandle) String() string { - return fmt.Sprint("missing handle: ", m.Handle, m.MaxHandle) -} - -// Returns nil for invalid handles. -func (c *Server) getHandle(id fuse.HandleID) (shandle *serveHandle) { - c.meta.Lock() - defer c.meta.Unlock() - if id < fuse.HandleID(len(c.handle)) { - shandle = c.handle[uint(id)] - } - if shandle == nil { - c.debug(missingHandle{ - Handle: id, - MaxHandle: fuse.HandleID(len(c.handle)), - }) - } - return -} - -type request struct { - Op string - Request *fuse.Header - In interface{} `json:",omitempty"` -} - -func (r request) String() string { - return fmt.Sprintf("<- %s", r.In) -} - -type logResponseHeader struct { - ID fuse.RequestID -} - -func (m logResponseHeader) String() string { - return fmt.Sprintf("ID=%v", m.ID) -} - -type response struct { - Op string - Request logResponseHeader - Out interface{} `json:",omitempty"` - // Errno contains the errno value as a string, for example "EPERM". - Errno string `json:",omitempty"` - // Error may contain a free form error message. - Error string `json:",omitempty"` -} - -func (r response) errstr() string { - s := r.Errno - if r.Error != "" { - // prefix the errno constant to the long form message - s = s + ": " + r.Error - } - return s -} - -func (r response) String() string { - switch { - case r.Errno != "" && r.Out != nil: - return fmt.Sprintf("-> [%v] %v error=%s", r.Request, r.Out, r.errstr()) - case r.Errno != "": - return fmt.Sprintf("-> [%v] %s error=%s", r.Request, r.Op, r.errstr()) - case r.Out != nil: - // make sure (seemingly) empty values are readable - switch r.Out.(type) { - case string: - return fmt.Sprintf("-> [%v] %s %q", r.Request, r.Op, r.Out) - case []byte: - return fmt.Sprintf("-> [%v] %s [% x]", r.Request, r.Op, r.Out) - default: - return fmt.Sprintf("-> [%v] %v", r.Request, r.Out) - } - default: - return fmt.Sprintf("-> [%v] %s", r.Request, r.Op) - } -} - -type notification struct { - Op string - Node fuse.NodeID - Out interface{} `json:",omitempty"` - Err string `json:",omitempty"` -} - -func (n notification) String() string { - var buf bytes.Buffer - fmt.Fprintf(&buf, "=> %s %v", n.Op, n.Node) - if n.Out != nil { - // make sure (seemingly) empty values are readable - switch n.Out.(type) { - case string: - fmt.Fprintf(&buf, " %q", n.Out) - case []byte: - fmt.Fprintf(&buf, " [% x]", n.Out) - default: - fmt.Fprintf(&buf, " %s", n.Out) - } - } - if n.Err != "" { - fmt.Fprintf(&buf, " Err:%v", n.Err) - } - return buf.String() -} - -type logMissingNode struct { - MaxNode fuse.NodeID -} - -func opName(req fuse.Request) string { - t := reflect.Indirect(reflect.ValueOf(req)).Type() - s := t.Name() - s = strings.TrimSuffix(s, "Request") - return s -} - -type logLinkRequestOldNodeNotFound struct { - Request *fuse.Header - In *fuse.LinkRequest -} - -func (m *logLinkRequestOldNodeNotFound) String() string { - return fmt.Sprintf("In LinkRequest (request %v), node %d not found", m.Request.Hdr().ID, m.In.OldNode) -} - -type renameNewDirNodeNotFound struct { - Request *fuse.Header - In *fuse.RenameRequest -} - -func (m *renameNewDirNodeNotFound) String() string { - return fmt.Sprintf("In RenameRequest (request %v), node %d not found", m.Request.Hdr().ID, m.In.NewDir) -} - -type handlerPanickedError struct { - Request interface{} - Err interface{} -} - -var _ error = handlerPanickedError{} - -func (h handlerPanickedError) Error() string { - return fmt.Sprintf("handler panicked: %v", h.Err) -} - -var _ fuse.ErrorNumber = handlerPanickedError{} - -func (h handlerPanickedError) Errno() fuse.Errno { - if err, ok := h.Err.(fuse.ErrorNumber); ok { - return err.Errno() - } - return fuse.DefaultErrno -} - -// handlerTerminatedError happens when a handler terminates itself -// with runtime.Goexit. This is most commonly because of incorrect use -// of testing.TB.FailNow, typically via t.Fatal. -type handlerTerminatedError struct { - Request interface{} -} - -var _ error = handlerTerminatedError{} - -func (h handlerTerminatedError) Error() string { - return fmt.Sprintf("handler terminated (called runtime.Goexit)") -} - -var _ fuse.ErrorNumber = handlerTerminatedError{} - -func (h handlerTerminatedError) Errno() fuse.Errno { - return fuse.DefaultErrno -} - -type handleNotReaderError struct { - handle Handle -} - -var _ error = handleNotReaderError{} - -func (e handleNotReaderError) Error() string { - return fmt.Sprintf("handle has no Read: %T", e.handle) -} - -var _ fuse.ErrorNumber = handleNotReaderError{} - -func (e handleNotReaderError) Errno() fuse.Errno { - return fuse.ENOTSUP -} - -func initLookupResponse(s *fuse.LookupResponse) { - s.EntryValid = entryValidTime -} - -func (c *Server) serve(r fuse.Request) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - parentCtx := ctx - if c.context != nil { - ctx = c.context(ctx, r) - } - - req := &serveRequest{Request: r, cancel: cancel} - - c.debug(request{ - Op: opName(r), - Request: r.Hdr(), - In: r, - }) - var node Node - var snode *serveNode - c.meta.Lock() - hdr := r.Hdr() - if id := hdr.Node; id != 0 { - if id < fuse.NodeID(len(c.node)) { - snode = c.node[uint(id)] - } - if snode == nil { - c.meta.Unlock() - c.debug(response{ - Op: opName(r), - Request: logResponseHeader{ID: hdr.ID}, - Error: fuse.ESTALE.ErrnoName(), - // this is the only place that sets both Error and - // Out; not sure if i want to do that; might get rid - // of len(c.node) things altogether - Out: logMissingNode{ - MaxNode: fuse.NodeID(len(c.node)), - }, - }) - r.RespondError(fuse.ESTALE) - return - } - node = snode.node - } - if c.req[hdr.ID] != nil { - // This happens with OSXFUSE. Assume it's okay and - // that we'll never see an interrupt for this one. - // Otherwise everything wedges. TODO: Report to OSXFUSE? - // - // TODO this might have been because of missing done() calls - } else { - c.req[hdr.ID] = req - } - c.meta.Unlock() - - // Call this before responding. - // After responding is too late: we might get another request - // with the same ID and be very confused. - done := func(resp interface{}) { - msg := response{ - Op: opName(r), - Request: logResponseHeader{ID: hdr.ID}, - } - if err, ok := resp.(error); ok { - msg.Error = err.Error() - if ferr, ok := err.(fuse.ErrorNumber); ok { - errno := ferr.Errno() - msg.Errno = errno.ErrnoName() - if errno == err { - // it's just a fuse.Errno with no extra detail; - // skip the textual message for log readability - msg.Error = "" - } - } else { - msg.Errno = fuse.DefaultErrno.ErrnoName() - } - } else { - msg.Out = resp - } - c.debug(msg) - - c.meta.Lock() - delete(c.req, hdr.ID) - c.meta.Unlock() - } - - var responded bool - defer func() { - if rec := recover(); rec != nil { - const size = 1 << 16 - buf := make([]byte, size) - n := runtime.Stack(buf, false) - buf = buf[:n] - log.Printf("fuse: panic in handler for %v: %v\n%s", r, rec, buf) - err := handlerPanickedError{ - Request: r, - Err: rec, - } - done(err) - r.RespondError(err) - return - } - - if !responded { - err := handlerTerminatedError{ - Request: r, - } - done(err) - r.RespondError(err) - } - }() - - if err := c.handleRequest(ctx, node, snode, r, done); err != nil { - if err == context.Canceled { - select { - case <-parentCtx.Done(): - // We canceled the parent context because of an - // incoming interrupt request, so return EINTR - // to trigger the right behavior in the client app. - // - // Only do this when it's the parent context that was - // canceled, not a context controlled by the program - // using this library, so we don't return EINTR too - // eagerly -- it might cause busy loops. - // - // Decent write-up on role of EINTR: - // http://250bpm.com/blog:12 - err = fuse.EINTR - default: - // nothing - } - } - done(err) - r.RespondError(err) - } - - // disarm runtime.Goexit protection - responded = true -} - -// handleRequest will either a) call done(s) and r.Respond(s) OR b) return an error. -func (c *Server) handleRequest(ctx context.Context, node Node, snode *serveNode, r fuse.Request, done func(resp interface{})) error { - switch r := r.(type) { - default: - // Note: To FUSE, ENOSYS means "this server never implements this request." - // It would be inappropriate to return ENOSYS for other operations in this - // switch that might only be unavailable in some contexts, not all. - return fuse.ENOSYS - - case *fuse.StatfsRequest: - s := &fuse.StatfsResponse{} - if fs, ok := c.fs.(FSStatfser); ok { - if err := fs.Statfs(ctx, r, s); err != nil { - return err - } - } - done(s) - r.Respond(s) - return nil - - // Node operations. - case *fuse.GetattrRequest: - s := &fuse.GetattrResponse{} - if n, ok := node.(NodeGetattrer); ok { - if err := n.Getattr(ctx, r, s); err != nil { - return err - } - } else { - if err := snode.attr(ctx, &s.Attr); err != nil { - return err - } - } - done(s) - r.Respond(s) - return nil - - case *fuse.SetattrRequest: - s := &fuse.SetattrResponse{} - if n, ok := node.(NodeSetattrer); ok { - if err := n.Setattr(ctx, r, s); err != nil { - return err - } - } - - if err := snode.attr(ctx, &s.Attr); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.SymlinkRequest: - s := &fuse.SymlinkResponse{} - initLookupResponse(&s.LookupResponse) - n, ok := node.(NodeSymlinker) - if !ok { - return fuse.EIO // XXX or EPERM like Mkdir? - } - n2, err := n.Symlink(ctx, r) - if err != nil { - return err - } - if err := c.saveLookup(ctx, &s.LookupResponse, snode, r.NewName, n2); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.ReadlinkRequest: - n, ok := node.(NodeReadlinker) - if !ok { - return fuse.EIO /// XXX or EPERM? - } - target, err := n.Readlink(ctx, r) - if err != nil { - return err - } - done(target) - r.Respond(target) - return nil - - case *fuse.LinkRequest: - n, ok := node.(NodeLinker) - if !ok { - return fuse.EIO /// XXX or EPERM? - } - c.meta.Lock() - var oldNode *serveNode - if int(r.OldNode) < len(c.node) { - oldNode = c.node[r.OldNode] - } - c.meta.Unlock() - if oldNode == nil { - c.debug(logLinkRequestOldNodeNotFound{ - Request: r.Hdr(), - In: r, - }) - return fuse.EIO - } - n2, err := n.Link(ctx, r, oldNode.node) - if err != nil { - return err - } - s := &fuse.LookupResponse{} - initLookupResponse(s) - if err := c.saveLookup(ctx, s, snode, r.NewName, n2); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.RemoveRequest: - n, ok := node.(NodeRemover) - if !ok { - return fuse.EIO /// XXX or EPERM? - } - err := n.Remove(ctx, r) - if err != nil { - return err - } - done(nil) - r.Respond() - return nil - - case *fuse.AccessRequest: - if n, ok := node.(NodeAccesser); ok { - if err := n.Access(ctx, r); err != nil { - return err - } - } - done(nil) - r.Respond() - return nil - - case *fuse.LookupRequest: - var n2 Node - var err error - s := &fuse.LookupResponse{} - initLookupResponse(s) - if n, ok := node.(NodeStringLookuper); ok { - n2, err = n.Lookup(ctx, r.Name) - } else if n, ok := node.(NodeRequestLookuper); ok { - n2, err = n.Lookup(ctx, r, s) - } else { - return fuse.ENOENT - } - if err != nil { - return err - } - if err := c.saveLookup(ctx, s, snode, r.Name, n2); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.MkdirRequest: - s := &fuse.MkdirResponse{} - initLookupResponse(&s.LookupResponse) - n, ok := node.(NodeMkdirer) - if !ok { - return fuse.EPERM - } - n2, err := n.Mkdir(ctx, r) - if err != nil { - return err - } - if err := c.saveLookup(ctx, &s.LookupResponse, snode, r.Name, n2); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.OpenRequest: - s := &fuse.OpenResponse{} - var h2 Handle - if n, ok := node.(NodeOpener); ok { - hh, err := n.Open(ctx, r, s) - if err != nil { - return err - } - h2 = hh - } else { - h2 = node - } - s.Handle = c.saveHandle(h2, r.Hdr().Node) - done(s) - r.Respond(s) - return nil - - case *fuse.CreateRequest: - n, ok := node.(NodeCreater) - if !ok { - // If we send back ENOSYS, FUSE will try mknod+open. - return fuse.EPERM - } - s := &fuse.CreateResponse{OpenResponse: fuse.OpenResponse{}} - initLookupResponse(&s.LookupResponse) - n2, h2, err := n.Create(ctx, r, s) - if err != nil { - return err - } - if err := c.saveLookup(ctx, &s.LookupResponse, snode, r.Name, n2); err != nil { - return err - } - s.Handle = c.saveHandle(h2, r.Hdr().Node) - done(s) - r.Respond(s) - return nil - - case *fuse.GetxattrRequest: - n, ok := node.(NodeGetxattrer) - if !ok { - return fuse.ENOTSUP - } - s := &fuse.GetxattrResponse{} - err := n.Getxattr(ctx, r, s) - if err != nil { - return err - } - if r.Size != 0 && uint64(len(s.Xattr)) > uint64(r.Size) { - return fuse.ERANGE - } - done(s) - r.Respond(s) - return nil - - case *fuse.ListxattrRequest: - n, ok := node.(NodeListxattrer) - if !ok { - return fuse.ENOTSUP - } - s := &fuse.ListxattrResponse{} - err := n.Listxattr(ctx, r, s) - if err != nil { - return err - } - if r.Size != 0 && uint64(len(s.Xattr)) > uint64(r.Size) { - return fuse.ERANGE - } - done(s) - r.Respond(s) - return nil - - case *fuse.SetxattrRequest: - n, ok := node.(NodeSetxattrer) - if !ok { - return fuse.ENOTSUP - } - err := n.Setxattr(ctx, r) - if err != nil { - return err - } - done(nil) - r.Respond() - return nil - - case *fuse.RemovexattrRequest: - n, ok := node.(NodeRemovexattrer) - if !ok { - return fuse.ENOTSUP - } - err := n.Removexattr(ctx, r) - if err != nil { - return err - } - done(nil) - r.Respond() - return nil - - case *fuse.ForgetRequest: - forget := c.dropNode(r.Hdr().Node, r.N) - if forget { - n, ok := node.(NodeForgetter) - if ok { - n.Forget() - } - } - done(nil) - r.Respond() - return nil - - // Handle operations. - case *fuse.ReadRequest: - shandle := c.getHandle(r.Handle) - if shandle == nil { - return fuse.ESTALE - } - handle := shandle.handle - - s := &fuse.ReadResponse{Data: make([]byte, 0, r.Size)} - if r.Dir { - if h, ok := handle.(HandleReadDirAller); ok { - // detect rewinddir(3) or similar seek and refresh - // contents - if r.Offset == 0 { - shandle.readData = nil - } - - if shandle.readData == nil { - dirs, err := h.ReadDirAll(ctx) - if err != nil { - return err - } - var data []byte - for _, dir := range dirs { - if dir.Inode == 0 { - dir.Inode = c.dynamicInode(snode.inode, dir.Name) - } - data = fuse.AppendDirent(data, dir) - } - shandle.readData = data - } - fuseutil.HandleRead(r, s, shandle.readData) - done(s) - r.Respond(s) - return nil - } - } else { - if h, ok := handle.(HandleReadAller); ok { - if shandle.readData == nil { - data, err := h.ReadAll(ctx) - if err != nil { - return err - } - if data == nil { - data = []byte{} - } - shandle.readData = data - } - fuseutil.HandleRead(r, s, shandle.readData) - done(s) - r.Respond(s) - return nil - } - h, ok := handle.(HandleReader) - if !ok { - err := handleNotReaderError{handle: handle} - return err - } - if err := h.Read(ctx, r, s); err != nil { - return err - } - } - done(s) - r.Respond(s) - return nil - - case *fuse.WriteRequest: - shandle := c.getHandle(r.Handle) - if shandle == nil { - return fuse.ESTALE - } - - s := &fuse.WriteResponse{} - if h, ok := shandle.handle.(HandleWriter); ok { - if err := h.Write(ctx, r, s); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - } - return fuse.EIO - - case *fuse.FlushRequest: - shandle := c.getHandle(r.Handle) - if shandle == nil { - return fuse.ESTALE - } - handle := shandle.handle - - if h, ok := handle.(HandleFlusher); ok { - if err := h.Flush(ctx, r); err != nil { - return err - } - } - done(nil) - r.Respond() - return nil - - case *fuse.ReleaseRequest: - shandle := c.getHandle(r.Handle) - if shandle == nil { - return fuse.ESTALE - } - handle := shandle.handle - - // No matter what, release the handle. - c.dropHandle(r.Handle) - - if h, ok := handle.(HandleReleaser); ok { - if err := h.Release(ctx, r); err != nil { - return err - } - } - done(nil) - r.Respond() - return nil - - case *fuse.DestroyRequest: - if fs, ok := c.fs.(FSDestroyer); ok { - fs.Destroy() - } - done(nil) - r.Respond() - return nil - - case *fuse.RenameRequest: - c.meta.Lock() - var newDirNode *serveNode - if int(r.NewDir) < len(c.node) { - newDirNode = c.node[r.NewDir] - } - c.meta.Unlock() - if newDirNode == nil { - c.debug(renameNewDirNodeNotFound{ - Request: r.Hdr(), - In: r, - }) - return fuse.EIO - } - n, ok := node.(NodeRenamer) - if !ok { - return fuse.EIO // XXX or EPERM like Mkdir? - } - err := n.Rename(ctx, r, newDirNode.node) - if err != nil { - return err - } - done(nil) - r.Respond() - return nil - - case *fuse.MknodRequest: - n, ok := node.(NodeMknoder) - if !ok { - return fuse.EIO - } - n2, err := n.Mknod(ctx, r) - if err != nil { - return err - } - s := &fuse.LookupResponse{} - initLookupResponse(s) - if err := c.saveLookup(ctx, s, snode, r.Name, n2); err != nil { - return err - } - done(s) - r.Respond(s) - return nil - - case *fuse.FsyncRequest: - n, ok := node.(NodeFsyncer) - if !ok { - return fuse.EIO - } - err := n.Fsync(ctx, r) - if err != nil { - return err - } - done(nil) - r.Respond() - return nil - - case *fuse.InterruptRequest: - c.meta.Lock() - ireq := c.req[r.IntrID] - if ireq != nil && ireq.cancel != nil { - ireq.cancel() - ireq.cancel = nil - } - c.meta.Unlock() - done(nil) - r.Respond() - return nil - - /* case *FsyncdirRequest: - return ENOSYS - - case *GetlkRequest, *SetlkRequest, *SetlkwRequest: - return ENOSYS - - case *BmapRequest: - return ENOSYS - - case *SetvolnameRequest, *GetxtimesRequest, *ExchangeRequest: - return ENOSYS - */ - } - - panic("not reached") -} - -func (c *Server) saveLookup(ctx context.Context, s *fuse.LookupResponse, snode *serveNode, elem string, n2 Node) error { - if err := nodeAttr(ctx, n2, &s.Attr); err != nil { - return err - } - if s.Attr.Inode == 0 { - s.Attr.Inode = c.dynamicInode(snode.inode, elem) - } - - s.Node, s.Generation = c.saveNode(s.Attr.Inode, n2) - return nil -} - -type invalidateNodeDetail struct { - Off int64 - Size int64 -} - -func (i invalidateNodeDetail) String() string { - return fmt.Sprintf("Off:%d Size:%d", i.Off, i.Size) -} - -func errstr(err error) string { - if err == nil { - return "" - } - return err.Error() -} - -func (s *Server) invalidateNode(node Node, off int64, size int64) error { - s.meta.Lock() - id, ok := s.nodeRef[node] - if ok { - snode := s.node[id] - snode.wg.Add(1) - defer snode.wg.Done() - } - s.meta.Unlock() - if !ok { - // This is what the kernel would have said, if we had been - // able to send this message; it's not cached. - return fuse.ErrNotCached - } - // Delay logging until after we can record the error too. We - // consider a /dev/fuse write to be instantaneous enough to not - // need separate before and after messages. - err := s.conn.InvalidateNode(id, off, size) - s.debug(notification{ - Op: "InvalidateNode", - Node: id, - Out: invalidateNodeDetail{ - Off: off, - Size: size, - }, - Err: errstr(err), - }) - return err -} - -// InvalidateNodeAttr invalidates the kernel cache of the attributes -// of node. -// -// Returns fuse.ErrNotCached if the kernel is not currently caching -// the node. -func (s *Server) InvalidateNodeAttr(node Node) error { - return s.invalidateNode(node, 0, 0) -} - -// InvalidateNodeData invalidates the kernel cache of the attributes -// and data of node. -// -// Returns fuse.ErrNotCached if the kernel is not currently caching -// the node. -func (s *Server) InvalidateNodeData(node Node) error { - return s.invalidateNode(node, 0, -1) -} - -// InvalidateNodeDataRange invalidates the kernel cache of the -// attributes and a range of the data of node. -// -// Returns fuse.ErrNotCached if the kernel is not currently caching -// the node. -func (s *Server) InvalidateNodeDataRange(node Node, off int64, size int64) error { - return s.invalidateNode(node, off, size) -} - -type invalidateEntryDetail struct { - Name string -} - -func (i invalidateEntryDetail) String() string { - return fmt.Sprintf("%q", i.Name) -} - -// InvalidateEntry invalidates the kernel cache of the directory entry -// identified by parent node and entry basename. -// -// Kernel may or may not cache directory listings. To invalidate -// those, use InvalidateNode to invalidate all of the data for a -// directory. (As of 2015-06, Linux FUSE does not cache directory -// listings.) -// -// Returns ErrNotCached if the kernel is not currently caching the -// node. -func (s *Server) InvalidateEntry(parent Node, name string) error { - s.meta.Lock() - id, ok := s.nodeRef[parent] - if ok { - snode := s.node[id] - snode.wg.Add(1) - defer snode.wg.Done() - } - s.meta.Unlock() - if !ok { - // This is what the kernel would have said, if we had been - // able to send this message; it's not cached. - return fuse.ErrNotCached - } - err := s.conn.InvalidateEntry(id, name) - s.debug(notification{ - Op: "InvalidateEntry", - Node: id, - Out: invalidateEntryDetail{ - Name: name, - }, - Err: errstr(err), - }) - return err -} - -// DataHandle returns a read-only Handle that satisfies reads -// using the given data. -func DataHandle(data []byte) Handle { - return &dataHandle{data} -} - -type dataHandle struct { - data []byte -} - -func (d *dataHandle) ReadAll(ctx context.Context) ([]byte, error) { - return d.data, nil -} - -// GenerateDynamicInode returns a dynamic inode. -// -// The parent inode and current entry name are used as the criteria -// for choosing a pseudorandom inode. This makes it likely the same -// entry will get the same inode on multiple runs. -func GenerateDynamicInode(parent uint64, name string) uint64 { - h := fnv.New64a() - var buf [8]byte - binary.LittleEndian.PutUint64(buf[:], parent) - _, _ = h.Write(buf[:]) - _, _ = h.Write([]byte(name)) - var inode uint64 - for { - inode = h.Sum64() - if inode != 0 { - break - } - // there's a tiny probability that result is zero; change the - // input a little and try again - _, _ = h.Write([]byte{'x'}) - } - return inode -} diff --git a/vendor/bazil.org/fuse/fs/tree.go b/vendor/bazil.org/fuse/fs/tree.go deleted file mode 100644 index 7e078045a5a0..000000000000 --- a/vendor/bazil.org/fuse/fs/tree.go +++ /dev/null @@ -1,99 +0,0 @@ -// FUSE directory tree, for servers that wish to use it with the service loop. - -package fs - -import ( - "os" - pathpkg "path" - "strings" - - "golang.org/x/net/context" -) - -import ( - "bazil.org/fuse" -) - -// A Tree implements a basic read-only directory tree for FUSE. -// The Nodes contained in it may still be writable. -type Tree struct { - tree -} - -func (t *Tree) Root() (Node, error) { - return &t.tree, nil -} - -// Add adds the path to the tree, resolving to the given node. -// If path or a prefix of path has already been added to the tree, -// Add panics. -// -// Add is only safe to call before starting to serve requests. -func (t *Tree) Add(path string, node Node) { - path = pathpkg.Clean("/" + path)[1:] - elems := strings.Split(path, "/") - dir := Node(&t.tree) - for i, elem := range elems { - dt, ok := dir.(*tree) - if !ok { - panic("fuse: Tree.Add for " + strings.Join(elems[:i], "/") + " and " + path) - } - n := dt.lookup(elem) - if n != nil { - if i+1 == len(elems) { - panic("fuse: Tree.Add for " + path + " conflicts with " + elem) - } - dir = n - } else { - if i+1 == len(elems) { - dt.add(elem, node) - } else { - dir = &tree{} - dt.add(elem, dir) - } - } - } -} - -type treeDir struct { - name string - node Node -} - -type tree struct { - dir []treeDir -} - -func (t *tree) lookup(name string) Node { - for _, d := range t.dir { - if d.name == name { - return d.node - } - } - return nil -} - -func (t *tree) add(name string, n Node) { - t.dir = append(t.dir, treeDir{name, n}) -} - -func (t *tree) Attr(ctx context.Context, a *fuse.Attr) error { - a.Mode = os.ModeDir | 0555 - return nil -} - -func (t *tree) Lookup(ctx context.Context, name string) (Node, error) { - n := t.lookup(name) - if n != nil { - return n, nil - } - return nil, fuse.ENOENT -} - -func (t *tree) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { - var out []fuse.Dirent - for _, d := range t.dir { - out = append(out, fuse.Dirent{Name: d.name}) - } - return out, nil -} diff --git a/vendor/bazil.org/fuse/fuse.go b/vendor/bazil.org/fuse/fuse.go deleted file mode 100644 index 6db0ef2935f4..000000000000 --- a/vendor/bazil.org/fuse/fuse.go +++ /dev/null @@ -1,2303 +0,0 @@ -// See the file LICENSE for copyright and licensing information. - -// Adapted from Plan 9 from User Space's src/cmd/9pfuse/fuse.c, -// which carries this notice: -// -// The files in this directory are subject to the following license. -// -// The author of this software is Russ Cox. -// -// Copyright (c) 2006 Russ Cox -// -// Permission to use, copy, modify, and distribute this software for any -// purpose without fee is hereby granted, provided that this entire notice -// is included in all copies of any software which is or includes a copy -// or modification of this software and in all copies of the supporting -// documentation for such software. -// -// THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED -// WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION OR WARRANTY -// OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS SOFTWARE OR ITS -// FITNESS FOR ANY PARTICULAR PURPOSE. - -// Package fuse enables writing FUSE file systems on Linux, OS X, and FreeBSD. -// -// On OS X, it requires OSXFUSE (http://osxfuse.github.com/). -// -// There are two approaches to writing a FUSE file system. The first is to speak -// the low-level message protocol, reading from a Conn using ReadRequest and -// writing using the various Respond methods. This approach is closest to -// the actual interaction with the kernel and can be the simplest one in contexts -// such as protocol translators. -// -// Servers of synthesized file systems tend to share common -// bookkeeping abstracted away by the second approach, which is to -// call fs.Serve to serve the FUSE protocol using an implementation of -// the service methods in the interfaces FS* (file system), Node* (file -// or directory), and Handle* (opened file or directory). -// There are a daunting number of such methods that can be written, -// but few are required. -// The specific methods are described in the documentation for those interfaces. -// -// The hellofs subdirectory contains a simple illustration of the fs.Serve approach. -// -// Service Methods -// -// The required and optional methods for the FS, Node, and Handle interfaces -// have the general form -// -// Op(ctx context.Context, req *OpRequest, resp *OpResponse) error -// -// where Op is the name of a FUSE operation. Op reads request -// parameters from req and writes results to resp. An operation whose -// only result is the error result omits the resp parameter. -// -// Multiple goroutines may call service methods simultaneously; the -// methods being called are responsible for appropriate -// synchronization. -// -// The operation must not hold on to the request or response, -// including any []byte fields such as WriteRequest.Data or -// SetxattrRequest.Xattr. -// -// Errors -// -// Operations can return errors. The FUSE interface can only -// communicate POSIX errno error numbers to file system clients, the -// message is not visible to file system clients. The returned error -// can implement ErrorNumber to control the errno returned. Without -// ErrorNumber, a generic errno (EIO) is returned. -// -// Error messages will be visible in the debug log as part of the -// response. -// -// Interrupted Operations -// -// In some file systems, some operations -// may take an undetermined amount of time. For example, a Read waiting for -// a network message or a matching Write might wait indefinitely. If the request -// is cancelled and no longer needed, the context will be cancelled. -// Blocking operations should select on a receive from ctx.Done() and attempt to -// abort the operation early if the receive succeeds (meaning the channel is closed). -// To indicate that the operation failed because it was aborted, return fuse.EINTR. -// -// If an operation does not block for an indefinite amount of time, supporting -// cancellation is not necessary. -// -// Authentication -// -// All requests types embed a Header, meaning that the method can -// inspect req.Pid, req.Uid, and req.Gid as necessary to implement -// permission checking. The kernel FUSE layer normally prevents other -// users from accessing the FUSE file system (to change this, see -// AllowOther, AllowRoot), but does not enforce access modes (to -// change this, see DefaultPermissions). -// -// Mount Options -// -// Behavior and metadata of the mounted file system can be changed by -// passing MountOption values to Mount. -// -package fuse // import "bazil.org/fuse" - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "io" - "os" - "sync" - "syscall" - "time" - "unsafe" -) - -// A Conn represents a connection to a mounted FUSE file system. -type Conn struct { - // Ready is closed when the mount is complete or has failed. - Ready <-chan struct{} - - // MountError stores any error from the mount process. Only valid - // after Ready is closed. - MountError error - - // File handle for kernel communication. Only safe to access if - // rio or wio is held. - dev *os.File - wio sync.RWMutex - rio sync.RWMutex - - // Protocol version negotiated with InitRequest/InitResponse. - proto Protocol -} - -// MountpointDoesNotExistError is an error returned when the -// mountpoint does not exist. -type MountpointDoesNotExistError struct { - Path string -} - -var _ error = (*MountpointDoesNotExistError)(nil) - -func (e *MountpointDoesNotExistError) Error() string { - return fmt.Sprintf("mountpoint does not exist: %v", e.Path) -} - -// Mount mounts a new FUSE connection on the named directory -// and returns a connection for reading and writing FUSE messages. -// -// After a successful return, caller must call Close to free -// resources. -// -// Even on successful return, the new mount is not guaranteed to be -// visible until after Conn.Ready is closed. See Conn.MountError for -// possible errors. Incoming requests on Conn must be served to make -// progress. -func Mount(dir string, options ...MountOption) (*Conn, error) { - conf := mountConfig{ - options: make(map[string]string), - } - for _, option := range options { - if err := option(&conf); err != nil { - return nil, err - } - } - - ready := make(chan struct{}, 1) - c := &Conn{ - Ready: ready, - } - f, err := mount(dir, &conf, ready, &c.MountError) - if err != nil { - return nil, err - } - c.dev = f - - if err := initMount(c, &conf); err != nil { - c.Close() - if err == ErrClosedWithoutInit { - // see if we can provide a better error - <-c.Ready - if err := c.MountError; err != nil { - return nil, err - } - } - return nil, err - } - - return c, nil -} - -type OldVersionError struct { - Kernel Protocol - LibraryMin Protocol -} - -func (e *OldVersionError) Error() string { - return fmt.Sprintf("kernel FUSE version is too old: %v < %v", e.Kernel, e.LibraryMin) -} - -var ( - ErrClosedWithoutInit = errors.New("fuse connection closed without init") -) - -func initMount(c *Conn, conf *mountConfig) error { - req, err := c.ReadRequest() - if err != nil { - if err == io.EOF { - return ErrClosedWithoutInit - } - return err - } - r, ok := req.(*InitRequest) - if !ok { - return fmt.Errorf("missing init, got: %T", req) - } - - min := Protocol{protoVersionMinMajor, protoVersionMinMinor} - if r.Kernel.LT(min) { - req.RespondError(Errno(syscall.EPROTO)) - c.Close() - return &OldVersionError{ - Kernel: r.Kernel, - LibraryMin: min, - } - } - - proto := Protocol{protoVersionMaxMajor, protoVersionMaxMinor} - if r.Kernel.LT(proto) { - // Kernel doesn't support the latest version we have. - proto = r.Kernel - } - c.proto = proto - - s := &InitResponse{ - Library: proto, - MaxReadahead: conf.maxReadahead, - MaxWrite: maxWrite, - Flags: InitBigWrites | conf.initFlags, - } - r.Respond(s) - return nil -} - -// A Request represents a single FUSE request received from the kernel. -// Use a type switch to determine the specific kind. -// A request of unrecognized type will have concrete type *Header. -type Request interface { - // Hdr returns the Header associated with this request. - Hdr() *Header - - // RespondError responds to the request with the given error. - RespondError(error) - - String() string -} - -// A RequestID identifies an active FUSE request. -type RequestID uint64 - -func (r RequestID) String() string { - return fmt.Sprintf("%#x", uint64(r)) -} - -// A NodeID is a number identifying a directory or file. -// It must be unique among IDs returned in LookupResponses -// that have not yet been forgotten by ForgetRequests. -type NodeID uint64 - -func (n NodeID) String() string { - return fmt.Sprintf("%#x", uint64(n)) -} - -// A HandleID is a number identifying an open directory or file. -// It only needs to be unique while the directory or file is open. -type HandleID uint64 - -func (h HandleID) String() string { - return fmt.Sprintf("%#x", uint64(h)) -} - -// The RootID identifies the root directory of a FUSE file system. -const RootID NodeID = rootID - -// A Header describes the basic information sent in every request. -type Header struct { - Conn *Conn `json:"-"` // connection this request was received on - ID RequestID // unique ID for request - Node NodeID // file or directory the request is about - Uid uint32 // user ID of process making request - Gid uint32 // group ID of process making request - Pid uint32 // process ID of process making request - - // for returning to reqPool - msg *message -} - -func (h *Header) String() string { - return fmt.Sprintf("ID=%v Node=%v Uid=%d Gid=%d Pid=%d", h.ID, h.Node, h.Uid, h.Gid, h.Pid) -} - -func (h *Header) Hdr() *Header { - return h -} - -func (h *Header) noResponse() { - putMessage(h.msg) -} - -func (h *Header) respond(msg []byte) { - out := (*outHeader)(unsafe.Pointer(&msg[0])) - out.Unique = uint64(h.ID) - h.Conn.respond(msg) - putMessage(h.msg) -} - -// An ErrorNumber is an error with a specific error number. -// -// Operations may return an error value that implements ErrorNumber to -// control what specific error number (errno) to return. -type ErrorNumber interface { - // Errno returns the the error number (errno) for this error. - Errno() Errno -} - -const ( - // ENOSYS indicates that the call is not supported. - ENOSYS = Errno(syscall.ENOSYS) - - // ESTALE is used by Serve to respond to violations of the FUSE protocol. - ESTALE = Errno(syscall.ESTALE) - - ENOENT = Errno(syscall.ENOENT) - EIO = Errno(syscall.EIO) - EPERM = Errno(syscall.EPERM) - - // EINTR indicates request was interrupted by an InterruptRequest. - // See also fs.Intr. - EINTR = Errno(syscall.EINTR) - - ERANGE = Errno(syscall.ERANGE) - ENOTSUP = Errno(syscall.ENOTSUP) - EEXIST = Errno(syscall.EEXIST) -) - -// DefaultErrno is the errno used when error returned does not -// implement ErrorNumber. -const DefaultErrno = EIO - -var errnoNames = map[Errno]string{ - ENOSYS: "ENOSYS", - ESTALE: "ESTALE", - ENOENT: "ENOENT", - EIO: "EIO", - EPERM: "EPERM", - EINTR: "EINTR", - EEXIST: "EEXIST", -} - -// Errno implements Error and ErrorNumber using a syscall.Errno. -type Errno syscall.Errno - -var _ = ErrorNumber(Errno(0)) -var _ = error(Errno(0)) - -func (e Errno) Errno() Errno { - return e -} - -func (e Errno) String() string { - return syscall.Errno(e).Error() -} - -func (e Errno) Error() string { - return syscall.Errno(e).Error() -} - -// ErrnoName returns the short non-numeric identifier for this errno. -// For example, "EIO". -func (e Errno) ErrnoName() string { - s := errnoNames[e] - if s == "" { - s = fmt.Sprint(e.Errno()) - } - return s -} - -func (e Errno) MarshalText() ([]byte, error) { - s := e.ErrnoName() - return []byte(s), nil -} - -func (h *Header) RespondError(err error) { - errno := DefaultErrno - if ferr, ok := err.(ErrorNumber); ok { - errno = ferr.Errno() - } - // FUSE uses negative errors! - // TODO: File bug report against OSXFUSE: positive error causes kernel panic. - buf := newBuffer(0) - hOut := (*outHeader)(unsafe.Pointer(&buf[0])) - hOut.Error = -int32(errno) - h.respond(buf) -} - -// All requests read from the kernel, without data, are shorter than -// this. -var maxRequestSize = syscall.Getpagesize() -var bufSize = maxRequestSize + maxWrite - -// reqPool is a pool of messages. -// -// Lifetime of a logical message is from getMessage to putMessage. -// getMessage is called by ReadRequest. putMessage is called by -// Conn.ReadRequest, Request.Respond, or Request.RespondError. -// -// Messages in the pool are guaranteed to have conn and off zeroed, -// buf allocated and len==bufSize, and hdr set. -var reqPool = sync.Pool{ - New: allocMessage, -} - -func allocMessage() interface{} { - m := &message{buf: make([]byte, bufSize)} - m.hdr = (*inHeader)(unsafe.Pointer(&m.buf[0])) - return m -} - -func getMessage(c *Conn) *message { - m := reqPool.Get().(*message) - m.conn = c - return m -} - -func putMessage(m *message) { - m.buf = m.buf[:bufSize] - m.conn = nil - m.off = 0 - reqPool.Put(m) -} - -// a message represents the bytes of a single FUSE message -type message struct { - conn *Conn - buf []byte // all bytes - hdr *inHeader // header - off int // offset for reading additional fields -} - -func (m *message) len() uintptr { - return uintptr(len(m.buf) - m.off) -} - -func (m *message) data() unsafe.Pointer { - var p unsafe.Pointer - if m.off < len(m.buf) { - p = unsafe.Pointer(&m.buf[m.off]) - } - return p -} - -func (m *message) bytes() []byte { - return m.buf[m.off:] -} - -func (m *message) Header() Header { - h := m.hdr - return Header{ - Conn: m.conn, - ID: RequestID(h.Unique), - Node: NodeID(h.Nodeid), - Uid: h.Uid, - Gid: h.Gid, - Pid: h.Pid, - - msg: m, - } -} - -// fileMode returns a Go os.FileMode from a Unix mode. -func fileMode(unixMode uint32) os.FileMode { - mode := os.FileMode(unixMode & 0777) - switch unixMode & syscall.S_IFMT { - case syscall.S_IFREG: - // nothing - case syscall.S_IFDIR: - mode |= os.ModeDir - case syscall.S_IFCHR: - mode |= os.ModeCharDevice | os.ModeDevice - case syscall.S_IFBLK: - mode |= os.ModeDevice - case syscall.S_IFIFO: - mode |= os.ModeNamedPipe - case syscall.S_IFLNK: - mode |= os.ModeSymlink - case syscall.S_IFSOCK: - mode |= os.ModeSocket - default: - // no idea - mode |= os.ModeDevice - } - if unixMode&syscall.S_ISUID != 0 { - mode |= os.ModeSetuid - } - if unixMode&syscall.S_ISGID != 0 { - mode |= os.ModeSetgid - } - return mode -} - -type noOpcode struct { - Opcode uint32 -} - -func (m noOpcode) String() string { - return fmt.Sprintf("No opcode %v", m.Opcode) -} - -type malformedMessage struct { -} - -func (malformedMessage) String() string { - return "malformed message" -} - -// Close closes the FUSE connection. -func (c *Conn) Close() error { - c.wio.Lock() - defer c.wio.Unlock() - c.rio.Lock() - defer c.rio.Unlock() - return c.dev.Close() -} - -// caller must hold wio or rio -func (c *Conn) fd() int { - return int(c.dev.Fd()) -} - -func (c *Conn) Protocol() Protocol { - return c.proto -} - -// ReadRequest returns the next FUSE request from the kernel. -// -// Caller must call either Request.Respond or Request.RespondError in -// a reasonable time. Caller must not retain Request after that call. -func (c *Conn) ReadRequest() (Request, error) { - m := getMessage(c) -loop: - c.rio.RLock() - n, err := syscall.Read(c.fd(), m.buf) - c.rio.RUnlock() - if err == syscall.EINTR { - // OSXFUSE sends EINTR to userspace when a request interrupt - // completed before it got sent to userspace? - goto loop - } - if err != nil && err != syscall.ENODEV { - putMessage(m) - return nil, err - } - if n <= 0 { - putMessage(m) - return nil, io.EOF - } - m.buf = m.buf[:n] - - if n < inHeaderSize { - putMessage(m) - return nil, errors.New("fuse: message too short") - } - - // FreeBSD FUSE sends a short length in the header - // for FUSE_INIT even though the actual read length is correct. - if n == inHeaderSize+initInSize && m.hdr.Opcode == opInit && m.hdr.Len < uint32(n) { - m.hdr.Len = uint32(n) - } - - // OSXFUSE sometimes sends the wrong m.hdr.Len in a FUSE_WRITE message. - if m.hdr.Len < uint32(n) && m.hdr.Len >= uint32(unsafe.Sizeof(writeIn{})) && m.hdr.Opcode == opWrite { - m.hdr.Len = uint32(n) - } - - if m.hdr.Len != uint32(n) { - // prepare error message before returning m to pool - err := fmt.Errorf("fuse: read %d opcode %d but expected %d", n, m.hdr.Opcode, m.hdr.Len) - putMessage(m) - return nil, err - } - - m.off = inHeaderSize - - // Convert to data structures. - // Do not trust kernel to hand us well-formed data. - var req Request - switch m.hdr.Opcode { - default: - Debug(noOpcode{Opcode: m.hdr.Opcode}) - goto unrecognized - - case opLookup: - buf := m.bytes() - n := len(buf) - if n == 0 || buf[n-1] != '\x00' { - goto corrupt - } - req = &LookupRequest{ - Header: m.Header(), - Name: string(buf[:n-1]), - } - - case opForget: - in := (*forgetIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &ForgetRequest{ - Header: m.Header(), - N: in.Nlookup, - } - - case opGetattr: - switch { - case c.proto.LT(Protocol{7, 9}): - req = &GetattrRequest{ - Header: m.Header(), - } - - default: - in := (*getattrIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &GetattrRequest{ - Header: m.Header(), - Flags: GetattrFlags(in.GetattrFlags), - Handle: HandleID(in.Fh), - } - } - - case opSetattr: - in := (*setattrIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &SetattrRequest{ - Header: m.Header(), - Valid: SetattrValid(in.Valid), - Handle: HandleID(in.Fh), - Size: in.Size, - Atime: time.Unix(int64(in.Atime), int64(in.AtimeNsec)), - Mtime: time.Unix(int64(in.Mtime), int64(in.MtimeNsec)), - Mode: fileMode(in.Mode), - Uid: in.Uid, - Gid: in.Gid, - Bkuptime: in.BkupTime(), - Chgtime: in.Chgtime(), - Flags: in.Flags(), - } - - case opReadlink: - if len(m.bytes()) > 0 { - goto corrupt - } - req = &ReadlinkRequest{ - Header: m.Header(), - } - - case opSymlink: - // m.bytes() is "newName\0target\0" - names := m.bytes() - if len(names) == 0 || names[len(names)-1] != 0 { - goto corrupt - } - i := bytes.IndexByte(names, '\x00') - if i < 0 { - goto corrupt - } - newName, target := names[0:i], names[i+1:len(names)-1] - req = &SymlinkRequest{ - Header: m.Header(), - NewName: string(newName), - Target: string(target), - } - - case opLink: - in := (*linkIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - newName := m.bytes()[unsafe.Sizeof(*in):] - if len(newName) < 2 || newName[len(newName)-1] != 0 { - goto corrupt - } - newName = newName[:len(newName)-1] - req = &LinkRequest{ - Header: m.Header(), - OldNode: NodeID(in.Oldnodeid), - NewName: string(newName), - } - - case opMknod: - size := mknodInSize(c.proto) - if m.len() < size { - goto corrupt - } - in := (*mknodIn)(m.data()) - name := m.bytes()[size:] - if len(name) < 2 || name[len(name)-1] != '\x00' { - goto corrupt - } - name = name[:len(name)-1] - r := &MknodRequest{ - Header: m.Header(), - Mode: fileMode(in.Mode), - Rdev: in.Rdev, - Name: string(name), - } - if c.proto.GE(Protocol{7, 12}) { - r.Umask = fileMode(in.Umask) & os.ModePerm - } - req = r - - case opMkdir: - size := mkdirInSize(c.proto) - if m.len() < size { - goto corrupt - } - in := (*mkdirIn)(m.data()) - name := m.bytes()[size:] - i := bytes.IndexByte(name, '\x00') - if i < 0 { - goto corrupt - } - r := &MkdirRequest{ - Header: m.Header(), - Name: string(name[:i]), - // observed on Linux: mkdirIn.Mode & syscall.S_IFMT == 0, - // and this causes fileMode to go into it's "no idea" - // code branch; enforce type to directory - Mode: fileMode((in.Mode &^ syscall.S_IFMT) | syscall.S_IFDIR), - } - if c.proto.GE(Protocol{7, 12}) { - r.Umask = fileMode(in.Umask) & os.ModePerm - } - req = r - - case opUnlink, opRmdir: - buf := m.bytes() - n := len(buf) - if n == 0 || buf[n-1] != '\x00' { - goto corrupt - } - req = &RemoveRequest{ - Header: m.Header(), - Name: string(buf[:n-1]), - Dir: m.hdr.Opcode == opRmdir, - } - - case opRename: - in := (*renameIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - newDirNodeID := NodeID(in.Newdir) - oldNew := m.bytes()[unsafe.Sizeof(*in):] - // oldNew should be "old\x00new\x00" - if len(oldNew) < 4 { - goto corrupt - } - if oldNew[len(oldNew)-1] != '\x00' { - goto corrupt - } - i := bytes.IndexByte(oldNew, '\x00') - if i < 0 { - goto corrupt - } - oldName, newName := string(oldNew[:i]), string(oldNew[i+1:len(oldNew)-1]) - req = &RenameRequest{ - Header: m.Header(), - NewDir: newDirNodeID, - OldName: oldName, - NewName: newName, - } - - case opOpendir, opOpen: - in := (*openIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &OpenRequest{ - Header: m.Header(), - Dir: m.hdr.Opcode == opOpendir, - Flags: openFlags(in.Flags), - } - - case opRead, opReaddir: - in := (*readIn)(m.data()) - if m.len() < readInSize(c.proto) { - goto corrupt - } - r := &ReadRequest{ - Header: m.Header(), - Dir: m.hdr.Opcode == opReaddir, - Handle: HandleID(in.Fh), - Offset: int64(in.Offset), - Size: int(in.Size), - } - if c.proto.GE(Protocol{7, 9}) { - r.Flags = ReadFlags(in.ReadFlags) - r.LockOwner = in.LockOwner - r.FileFlags = openFlags(in.Flags) - } - req = r - - case opWrite: - in := (*writeIn)(m.data()) - if m.len() < writeInSize(c.proto) { - goto corrupt - } - r := &WriteRequest{ - Header: m.Header(), - Handle: HandleID(in.Fh), - Offset: int64(in.Offset), - Flags: WriteFlags(in.WriteFlags), - } - if c.proto.GE(Protocol{7, 9}) { - r.LockOwner = in.LockOwner - r.FileFlags = openFlags(in.Flags) - } - buf := m.bytes()[writeInSize(c.proto):] - if uint32(len(buf)) < in.Size { - goto corrupt - } - r.Data = buf - req = r - - case opStatfs: - req = &StatfsRequest{ - Header: m.Header(), - } - - case opRelease, opReleasedir: - in := (*releaseIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &ReleaseRequest{ - Header: m.Header(), - Dir: m.hdr.Opcode == opReleasedir, - Handle: HandleID(in.Fh), - Flags: openFlags(in.Flags), - ReleaseFlags: ReleaseFlags(in.ReleaseFlags), - LockOwner: in.LockOwner, - } - - case opFsync, opFsyncdir: - in := (*fsyncIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &FsyncRequest{ - Dir: m.hdr.Opcode == opFsyncdir, - Header: m.Header(), - Handle: HandleID(in.Fh), - Flags: in.FsyncFlags, - } - - case opSetxattr: - in := (*setxattrIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - m.off += int(unsafe.Sizeof(*in)) - name := m.bytes() - i := bytes.IndexByte(name, '\x00') - if i < 0 { - goto corrupt - } - xattr := name[i+1:] - if uint32(len(xattr)) < in.Size { - goto corrupt - } - xattr = xattr[:in.Size] - req = &SetxattrRequest{ - Header: m.Header(), - Flags: in.Flags, - Position: in.position(), - Name: string(name[:i]), - Xattr: xattr, - } - - case opGetxattr: - in := (*getxattrIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - name := m.bytes()[unsafe.Sizeof(*in):] - i := bytes.IndexByte(name, '\x00') - if i < 0 { - goto corrupt - } - req = &GetxattrRequest{ - Header: m.Header(), - Name: string(name[:i]), - Size: in.Size, - Position: in.position(), - } - - case opListxattr: - in := (*getxattrIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &ListxattrRequest{ - Header: m.Header(), - Size: in.Size, - Position: in.position(), - } - - case opRemovexattr: - buf := m.bytes() - n := len(buf) - if n == 0 || buf[n-1] != '\x00' { - goto corrupt - } - req = &RemovexattrRequest{ - Header: m.Header(), - Name: string(buf[:n-1]), - } - - case opFlush: - in := (*flushIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &FlushRequest{ - Header: m.Header(), - Handle: HandleID(in.Fh), - Flags: in.FlushFlags, - LockOwner: in.LockOwner, - } - - case opInit: - in := (*initIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &InitRequest{ - Header: m.Header(), - Kernel: Protocol{in.Major, in.Minor}, - MaxReadahead: in.MaxReadahead, - Flags: InitFlags(in.Flags), - } - - case opGetlk: - panic("opGetlk") - case opSetlk: - panic("opSetlk") - case opSetlkw: - panic("opSetlkw") - - case opAccess: - in := (*accessIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &AccessRequest{ - Header: m.Header(), - Mask: in.Mask, - } - - case opCreate: - size := createInSize(c.proto) - if m.len() < size { - goto corrupt - } - in := (*createIn)(m.data()) - name := m.bytes()[size:] - i := bytes.IndexByte(name, '\x00') - if i < 0 { - goto corrupt - } - r := &CreateRequest{ - Header: m.Header(), - Flags: openFlags(in.Flags), - Mode: fileMode(in.Mode), - Name: string(name[:i]), - } - if c.proto.GE(Protocol{7, 12}) { - r.Umask = fileMode(in.Umask) & os.ModePerm - } - req = r - - case opInterrupt: - in := (*interruptIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - req = &InterruptRequest{ - Header: m.Header(), - IntrID: RequestID(in.Unique), - } - - case opBmap: - panic("opBmap") - - case opDestroy: - req = &DestroyRequest{ - Header: m.Header(), - } - - // OS X - case opSetvolname: - panic("opSetvolname") - case opGetxtimes: - panic("opGetxtimes") - case opExchange: - in := (*exchangeIn)(m.data()) - if m.len() < unsafe.Sizeof(*in) { - goto corrupt - } - oldDirNodeID := NodeID(in.Olddir) - newDirNodeID := NodeID(in.Newdir) - oldNew := m.bytes()[unsafe.Sizeof(*in):] - // oldNew should be "oldname\x00newname\x00" - if len(oldNew) < 4 { - goto corrupt - } - if oldNew[len(oldNew)-1] != '\x00' { - goto corrupt - } - i := bytes.IndexByte(oldNew, '\x00') - if i < 0 { - goto corrupt - } - oldName, newName := string(oldNew[:i]), string(oldNew[i+1:len(oldNew)-1]) - req = &ExchangeDataRequest{ - Header: m.Header(), - OldDir: oldDirNodeID, - NewDir: newDirNodeID, - OldName: oldName, - NewName: newName, - // TODO options - } - } - - return req, nil - -corrupt: - Debug(malformedMessage{}) - putMessage(m) - return nil, fmt.Errorf("fuse: malformed message") - -unrecognized: - // Unrecognized message. - // Assume higher-level code will send a "no idea what you mean" error. - h := m.Header() - return &h, nil -} - -type bugShortKernelWrite struct { - Written int64 - Length int64 - Error string - Stack string -} - -func (b bugShortKernelWrite) String() string { - return fmt.Sprintf("short kernel write: written=%d/%d error=%q stack=\n%s", b.Written, b.Length, b.Error, b.Stack) -} - -type bugKernelWriteError struct { - Error string - Stack string -} - -func (b bugKernelWriteError) String() string { - return fmt.Sprintf("kernel write error: error=%q stack=\n%s", b.Error, b.Stack) -} - -// safe to call even with nil error -func errorString(err error) string { - if err == nil { - return "" - } - return err.Error() -} - -func (c *Conn) writeToKernel(msg []byte) error { - out := (*outHeader)(unsafe.Pointer(&msg[0])) - out.Len = uint32(len(msg)) - - c.wio.RLock() - defer c.wio.RUnlock() - nn, err := syscall.Write(c.fd(), msg) - if err == nil && nn != len(msg) { - Debug(bugShortKernelWrite{ - Written: int64(nn), - Length: int64(len(msg)), - Error: errorString(err), - Stack: stack(), - }) - } - return err -} - -func (c *Conn) respond(msg []byte) { - if err := c.writeToKernel(msg); err != nil { - Debug(bugKernelWriteError{ - Error: errorString(err), - Stack: stack(), - }) - } -} - -type notCachedError struct{} - -func (notCachedError) Error() string { - return "node not cached" -} - -var _ ErrorNumber = notCachedError{} - -func (notCachedError) Errno() Errno { - // Behave just like if the original syscall.ENOENT had been passed - // straight through. - return ENOENT -} - -var ( - ErrNotCached = notCachedError{} -) - -// sendInvalidate sends an invalidate notification to kernel. -// -// A returned ENOENT is translated to a friendlier error. -func (c *Conn) sendInvalidate(msg []byte) error { - switch err := c.writeToKernel(msg); err { - case syscall.ENOENT: - return ErrNotCached - default: - return err - } -} - -// InvalidateNode invalidates the kernel cache of the attributes and a -// range of the data of a node. -// -// Giving offset 0 and size -1 means all data. To invalidate just the -// attributes, give offset 0 and size 0. -// -// Returns ErrNotCached if the kernel is not currently caching the -// node. -func (c *Conn) InvalidateNode(nodeID NodeID, off int64, size int64) error { - buf := newBuffer(unsafe.Sizeof(notifyInvalInodeOut{})) - h := (*outHeader)(unsafe.Pointer(&buf[0])) - // h.Unique is 0 - h.Error = notifyCodeInvalInode - out := (*notifyInvalInodeOut)(buf.alloc(unsafe.Sizeof(notifyInvalInodeOut{}))) - out.Ino = uint64(nodeID) - out.Off = off - out.Len = size - return c.sendInvalidate(buf) -} - -// InvalidateEntry invalidates the kernel cache of the directory entry -// identified by parent directory node ID and entry basename. -// -// Kernel may or may not cache directory listings. To invalidate -// those, use InvalidateNode to invalidate all of the data for a -// directory. (As of 2015-06, Linux FUSE does not cache directory -// listings.) -// -// Returns ErrNotCached if the kernel is not currently caching the -// node. -func (c *Conn) InvalidateEntry(parent NodeID, name string) error { - const maxUint32 = ^uint32(0) - if uint64(len(name)) > uint64(maxUint32) { - // very unlikely, but we don't want to silently truncate - return syscall.ENAMETOOLONG - } - buf := newBuffer(unsafe.Sizeof(notifyInvalEntryOut{}) + uintptr(len(name)) + 1) - h := (*outHeader)(unsafe.Pointer(&buf[0])) - // h.Unique is 0 - h.Error = notifyCodeInvalEntry - out := (*notifyInvalEntryOut)(buf.alloc(unsafe.Sizeof(notifyInvalEntryOut{}))) - out.Parent = uint64(parent) - out.Namelen = uint32(len(name)) - buf = append(buf, name...) - buf = append(buf, '\x00') - return c.sendInvalidate(buf) -} - -// An InitRequest is the first request sent on a FUSE file system. -type InitRequest struct { - Header `json:"-"` - Kernel Protocol - // Maximum readahead in bytes that the kernel plans to use. - MaxReadahead uint32 - Flags InitFlags -} - -var _ = Request(&InitRequest{}) - -func (r *InitRequest) String() string { - return fmt.Sprintf("Init [%v] %v ra=%d fl=%v", &r.Header, r.Kernel, r.MaxReadahead, r.Flags) -} - -// An InitResponse is the response to an InitRequest. -type InitResponse struct { - Library Protocol - // Maximum readahead in bytes that the kernel can use. Ignored if - // greater than InitRequest.MaxReadahead. - MaxReadahead uint32 - Flags InitFlags - // Maximum size of a single write operation. - // Linux enforces a minimum of 4 KiB. - MaxWrite uint32 -} - -func (r *InitResponse) String() string { - return fmt.Sprintf("Init %v ra=%d fl=%v w=%d", r.Library, r.MaxReadahead, r.Flags, r.MaxWrite) -} - -// Respond replies to the request with the given response. -func (r *InitRequest) Respond(resp *InitResponse) { - buf := newBuffer(unsafe.Sizeof(initOut{})) - out := (*initOut)(buf.alloc(unsafe.Sizeof(initOut{}))) - out.Major = resp.Library.Major - out.Minor = resp.Library.Minor - out.MaxReadahead = resp.MaxReadahead - out.Flags = uint32(resp.Flags) - out.MaxWrite = resp.MaxWrite - - // MaxWrite larger than our receive buffer would just lead to - // errors on large writes. - if out.MaxWrite > maxWrite { - out.MaxWrite = maxWrite - } - r.respond(buf) -} - -// A StatfsRequest requests information about the mounted file system. -type StatfsRequest struct { - Header `json:"-"` -} - -var _ = Request(&StatfsRequest{}) - -func (r *StatfsRequest) String() string { - return fmt.Sprintf("Statfs [%s]", &r.Header) -} - -// Respond replies to the request with the given response. -func (r *StatfsRequest) Respond(resp *StatfsResponse) { - buf := newBuffer(unsafe.Sizeof(statfsOut{})) - out := (*statfsOut)(buf.alloc(unsafe.Sizeof(statfsOut{}))) - out.St = kstatfs{ - Blocks: resp.Blocks, - Bfree: resp.Bfree, - Bavail: resp.Bavail, - Files: resp.Files, - Bsize: resp.Bsize, - Namelen: resp.Namelen, - Frsize: resp.Frsize, - } - r.respond(buf) -} - -// A StatfsResponse is the response to a StatfsRequest. -type StatfsResponse struct { - Blocks uint64 // Total data blocks in file system. - Bfree uint64 // Free blocks in file system. - Bavail uint64 // Free blocks in file system if you're not root. - Files uint64 // Total files in file system. - Ffree uint64 // Free files in file system. - Bsize uint32 // Block size - Namelen uint32 // Maximum file name length? - Frsize uint32 // Fragment size, smallest addressable data size in the file system. -} - -func (r *StatfsResponse) String() string { - return fmt.Sprintf("Statfs blocks=%d/%d/%d files=%d/%d bsize=%d frsize=%d namelen=%d", - r.Bavail, r.Bfree, r.Blocks, - r.Ffree, r.Files, - r.Bsize, - r.Frsize, - r.Namelen, - ) -} - -// An AccessRequest asks whether the file can be accessed -// for the purpose specified by the mask. -type AccessRequest struct { - Header `json:"-"` - Mask uint32 -} - -var _ = Request(&AccessRequest{}) - -func (r *AccessRequest) String() string { - return fmt.Sprintf("Access [%s] mask=%#x", &r.Header, r.Mask) -} - -// Respond replies to the request indicating that access is allowed. -// To deny access, use RespondError. -func (r *AccessRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// An Attr is the metadata for a single file or directory. -type Attr struct { - Valid time.Duration // how long Attr can be cached - - Inode uint64 // inode number - Size uint64 // size in bytes - Blocks uint64 // size in 512-byte units - Atime time.Time // time of last access - Mtime time.Time // time of last modification - Ctime time.Time // time of last inode change - Crtime time.Time // time of creation (OS X only) - Mode os.FileMode // file mode - Nlink uint32 // number of links (usually 1) - Uid uint32 // owner uid - Gid uint32 // group gid - Rdev uint32 // device numbers - Flags uint32 // chflags(2) flags (OS X only) - BlockSize uint32 // preferred blocksize for filesystem I/O -} - -func (a Attr) String() string { - return fmt.Sprintf("valid=%v ino=%v size=%d mode=%v", a.Valid, a.Inode, a.Size, a.Mode) -} - -func unix(t time.Time) (sec uint64, nsec uint32) { - nano := t.UnixNano() - sec = uint64(nano / 1e9) - nsec = uint32(nano % 1e9) - return -} - -func (a *Attr) attr(out *attr, proto Protocol) { - out.Ino = a.Inode - out.Size = a.Size - out.Blocks = a.Blocks - out.Atime, out.AtimeNsec = unix(a.Atime) - out.Mtime, out.MtimeNsec = unix(a.Mtime) - out.Ctime, out.CtimeNsec = unix(a.Ctime) - out.SetCrtime(unix(a.Crtime)) - out.Mode = uint32(a.Mode) & 0777 - switch { - default: - out.Mode |= syscall.S_IFREG - case a.Mode&os.ModeDir != 0: - out.Mode |= syscall.S_IFDIR - case a.Mode&os.ModeDevice != 0: - if a.Mode&os.ModeCharDevice != 0 { - out.Mode |= syscall.S_IFCHR - } else { - out.Mode |= syscall.S_IFBLK - } - case a.Mode&os.ModeNamedPipe != 0: - out.Mode |= syscall.S_IFIFO - case a.Mode&os.ModeSymlink != 0: - out.Mode |= syscall.S_IFLNK - case a.Mode&os.ModeSocket != 0: - out.Mode |= syscall.S_IFSOCK - } - if a.Mode&os.ModeSetuid != 0 { - out.Mode |= syscall.S_ISUID - } - if a.Mode&os.ModeSetgid != 0 { - out.Mode |= syscall.S_ISGID - } - out.Nlink = a.Nlink - out.Uid = a.Uid - out.Gid = a.Gid - out.Rdev = a.Rdev - out.SetFlags(a.Flags) - if proto.GE(Protocol{7, 9}) { - out.Blksize = a.BlockSize - } - - return -} - -// A GetattrRequest asks for the metadata for the file denoted by r.Node. -type GetattrRequest struct { - Header `json:"-"` - Flags GetattrFlags - Handle HandleID -} - -var _ = Request(&GetattrRequest{}) - -func (r *GetattrRequest) String() string { - return fmt.Sprintf("Getattr [%s] %v fl=%v", &r.Header, r.Handle, r.Flags) -} - -// Respond replies to the request with the given response. -func (r *GetattrRequest) Respond(resp *GetattrResponse) { - size := attrOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*attrOut)(buf.alloc(size)) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A GetattrResponse is the response to a GetattrRequest. -type GetattrResponse struct { - Attr Attr // file attributes -} - -func (r *GetattrResponse) String() string { - return fmt.Sprintf("Getattr %v", r.Attr) -} - -// A GetxattrRequest asks for the extended attributes associated with r.Node. -type GetxattrRequest struct { - Header `json:"-"` - - // Maximum size to return. - Size uint32 - - // Name of the attribute requested. - Name string - - // Offset within extended attributes. - // - // Only valid for OS X, and then only with the resource fork - // attribute. - Position uint32 -} - -var _ = Request(&GetxattrRequest{}) - -func (r *GetxattrRequest) String() string { - return fmt.Sprintf("Getxattr [%s] %q %d @%d", &r.Header, r.Name, r.Size, r.Position) -} - -// Respond replies to the request with the given response. -func (r *GetxattrRequest) Respond(resp *GetxattrResponse) { - if r.Size == 0 { - buf := newBuffer(unsafe.Sizeof(getxattrOut{})) - out := (*getxattrOut)(buf.alloc(unsafe.Sizeof(getxattrOut{}))) - out.Size = uint32(len(resp.Xattr)) - r.respond(buf) - } else { - buf := newBuffer(uintptr(len(resp.Xattr))) - buf = append(buf, resp.Xattr...) - r.respond(buf) - } -} - -// A GetxattrResponse is the response to a GetxattrRequest. -type GetxattrResponse struct { - Xattr []byte -} - -func (r *GetxattrResponse) String() string { - return fmt.Sprintf("Getxattr %x", r.Xattr) -} - -// A ListxattrRequest asks to list the extended attributes associated with r.Node. -type ListxattrRequest struct { - Header `json:"-"` - Size uint32 // maximum size to return - Position uint32 // offset within attribute list -} - -var _ = Request(&ListxattrRequest{}) - -func (r *ListxattrRequest) String() string { - return fmt.Sprintf("Listxattr [%s] %d @%d", &r.Header, r.Size, r.Position) -} - -// Respond replies to the request with the given response. -func (r *ListxattrRequest) Respond(resp *ListxattrResponse) { - if r.Size == 0 { - buf := newBuffer(unsafe.Sizeof(getxattrOut{})) - out := (*getxattrOut)(buf.alloc(unsafe.Sizeof(getxattrOut{}))) - out.Size = uint32(len(resp.Xattr)) - r.respond(buf) - } else { - buf := newBuffer(uintptr(len(resp.Xattr))) - buf = append(buf, resp.Xattr...) - r.respond(buf) - } -} - -// A ListxattrResponse is the response to a ListxattrRequest. -type ListxattrResponse struct { - Xattr []byte -} - -func (r *ListxattrResponse) String() string { - return fmt.Sprintf("Listxattr %x", r.Xattr) -} - -// Append adds an extended attribute name to the response. -func (r *ListxattrResponse) Append(names ...string) { - for _, name := range names { - r.Xattr = append(r.Xattr, name...) - r.Xattr = append(r.Xattr, '\x00') - } -} - -// A RemovexattrRequest asks to remove an extended attribute associated with r.Node. -type RemovexattrRequest struct { - Header `json:"-"` - Name string // name of extended attribute -} - -var _ = Request(&RemovexattrRequest{}) - -func (r *RemovexattrRequest) String() string { - return fmt.Sprintf("Removexattr [%s] %q", &r.Header, r.Name) -} - -// Respond replies to the request, indicating that the attribute was removed. -func (r *RemovexattrRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A SetxattrRequest asks to set an extended attribute associated with a file. -type SetxattrRequest struct { - Header `json:"-"` - - // Flags can make the request fail if attribute does/not already - // exist. Unfortunately, the constants are platform-specific and - // not exposed by Go1.2. Look for XATTR_CREATE, XATTR_REPLACE. - // - // TODO improve this later - // - // TODO XATTR_CREATE and exist -> EEXIST - // - // TODO XATTR_REPLACE and not exist -> ENODATA - Flags uint32 - - // Offset within extended attributes. - // - // Only valid for OS X, and then only with the resource fork - // attribute. - Position uint32 - - Name string - Xattr []byte -} - -var _ = Request(&SetxattrRequest{}) - -func trunc(b []byte, max int) ([]byte, string) { - if len(b) > max { - return b[:max], "..." - } - return b, "" -} - -func (r *SetxattrRequest) String() string { - xattr, tail := trunc(r.Xattr, 16) - return fmt.Sprintf("Setxattr [%s] %q %x%s fl=%v @%#x", &r.Header, r.Name, xattr, tail, r.Flags, r.Position) -} - -// Respond replies to the request, indicating that the extended attribute was set. -func (r *SetxattrRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A LookupRequest asks to look up the given name in the directory named by r.Node. -type LookupRequest struct { - Header `json:"-"` - Name string -} - -var _ = Request(&LookupRequest{}) - -func (r *LookupRequest) String() string { - return fmt.Sprintf("Lookup [%s] %q", &r.Header, r.Name) -} - -// Respond replies to the request with the given response. -func (r *LookupRequest) Respond(resp *LookupResponse) { - size := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*entryOut)(buf.alloc(size)) - out.Nodeid = uint64(resp.Node) - out.Generation = resp.Generation - out.EntryValid = uint64(resp.EntryValid / time.Second) - out.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A LookupResponse is the response to a LookupRequest. -type LookupResponse struct { - Node NodeID - Generation uint64 - EntryValid time.Duration - Attr Attr -} - -func (r *LookupResponse) string() string { - return fmt.Sprintf("%v gen=%d valid=%v attr={%v}", r.Node, r.Generation, r.EntryValid, r.Attr) -} - -func (r *LookupResponse) String() string { - return fmt.Sprintf("Lookup %s", r.string()) -} - -// An OpenRequest asks to open a file or directory -type OpenRequest struct { - Header `json:"-"` - Dir bool // is this Opendir? - Flags OpenFlags -} - -var _ = Request(&OpenRequest{}) - -func (r *OpenRequest) String() string { - return fmt.Sprintf("Open [%s] dir=%v fl=%v", &r.Header, r.Dir, r.Flags) -} - -// Respond replies to the request with the given response. -func (r *OpenRequest) Respond(resp *OpenResponse) { - buf := newBuffer(unsafe.Sizeof(openOut{})) - out := (*openOut)(buf.alloc(unsafe.Sizeof(openOut{}))) - out.Fh = uint64(resp.Handle) - out.OpenFlags = uint32(resp.Flags) - r.respond(buf) -} - -// A OpenResponse is the response to a OpenRequest. -type OpenResponse struct { - Handle HandleID - Flags OpenResponseFlags -} - -func (r *OpenResponse) string() string { - return fmt.Sprintf("%v fl=%v", r.Handle, r.Flags) -} - -func (r *OpenResponse) String() string { - return fmt.Sprintf("Open %s", r.string()) -} - -// A CreateRequest asks to create and open a file (not a directory). -type CreateRequest struct { - Header `json:"-"` - Name string - Flags OpenFlags - Mode os.FileMode - // Umask of the request. Not supported on OS X. - Umask os.FileMode -} - -var _ = Request(&CreateRequest{}) - -func (r *CreateRequest) String() string { - return fmt.Sprintf("Create [%s] %q fl=%v mode=%v umask=%v", &r.Header, r.Name, r.Flags, r.Mode, r.Umask) -} - -// Respond replies to the request with the given response. -func (r *CreateRequest) Respond(resp *CreateResponse) { - eSize := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(eSize + unsafe.Sizeof(openOut{})) - - e := (*entryOut)(buf.alloc(eSize)) - e.Nodeid = uint64(resp.Node) - e.Generation = resp.Generation - e.EntryValid = uint64(resp.EntryValid / time.Second) - e.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - e.AttrValid = uint64(resp.Attr.Valid / time.Second) - e.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&e.Attr, r.Header.Conn.proto) - - o := (*openOut)(buf.alloc(unsafe.Sizeof(openOut{}))) - o.Fh = uint64(resp.Handle) - o.OpenFlags = uint32(resp.Flags) - - r.respond(buf) -} - -// A CreateResponse is the response to a CreateRequest. -// It describes the created node and opened handle. -type CreateResponse struct { - LookupResponse - OpenResponse -} - -func (r *CreateResponse) String() string { - return fmt.Sprintf("Create {%s} {%s}", r.LookupResponse.string(), r.OpenResponse.string()) -} - -// A MkdirRequest asks to create (but not open) a directory. -type MkdirRequest struct { - Header `json:"-"` - Name string - Mode os.FileMode - // Umask of the request. Not supported on OS X. - Umask os.FileMode -} - -var _ = Request(&MkdirRequest{}) - -func (r *MkdirRequest) String() string { - return fmt.Sprintf("Mkdir [%s] %q mode=%v umask=%v", &r.Header, r.Name, r.Mode, r.Umask) -} - -// Respond replies to the request with the given response. -func (r *MkdirRequest) Respond(resp *MkdirResponse) { - size := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*entryOut)(buf.alloc(size)) - out.Nodeid = uint64(resp.Node) - out.Generation = resp.Generation - out.EntryValid = uint64(resp.EntryValid / time.Second) - out.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A MkdirResponse is the response to a MkdirRequest. -type MkdirResponse struct { - LookupResponse -} - -func (r *MkdirResponse) String() string { - return fmt.Sprintf("Mkdir %v", r.LookupResponse.string()) -} - -// A ReadRequest asks to read from an open file. -type ReadRequest struct { - Header `json:"-"` - Dir bool // is this Readdir? - Handle HandleID - Offset int64 - Size int - Flags ReadFlags - LockOwner uint64 - FileFlags OpenFlags -} - -var _ = Request(&ReadRequest{}) - -func (r *ReadRequest) String() string { - return fmt.Sprintf("Read [%s] %v %d @%#x dir=%v fl=%v lock=%d ffl=%v", &r.Header, r.Handle, r.Size, r.Offset, r.Dir, r.Flags, r.LockOwner, r.FileFlags) -} - -// Respond replies to the request with the given response. -func (r *ReadRequest) Respond(resp *ReadResponse) { - buf := newBuffer(uintptr(len(resp.Data))) - buf = append(buf, resp.Data...) - r.respond(buf) -} - -// A ReadResponse is the response to a ReadRequest. -type ReadResponse struct { - Data []byte -} - -func (r *ReadResponse) String() string { - return fmt.Sprintf("Read %d", len(r.Data)) -} - -type jsonReadResponse struct { - Len uint64 -} - -func (r *ReadResponse) MarshalJSON() ([]byte, error) { - j := jsonReadResponse{ - Len: uint64(len(r.Data)), - } - return json.Marshal(j) -} - -// A ReleaseRequest asks to release (close) an open file handle. -type ReleaseRequest struct { - Header `json:"-"` - Dir bool // is this Releasedir? - Handle HandleID - Flags OpenFlags // flags from OpenRequest - ReleaseFlags ReleaseFlags - LockOwner uint32 -} - -var _ = Request(&ReleaseRequest{}) - -func (r *ReleaseRequest) String() string { - return fmt.Sprintf("Release [%s] %v fl=%v rfl=%v owner=%#x", &r.Header, r.Handle, r.Flags, r.ReleaseFlags, r.LockOwner) -} - -// Respond replies to the request, indicating that the handle has been released. -func (r *ReleaseRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A DestroyRequest is sent by the kernel when unmounting the file system. -// No more requests will be received after this one, but it should still be -// responded to. -type DestroyRequest struct { - Header `json:"-"` -} - -var _ = Request(&DestroyRequest{}) - -func (r *DestroyRequest) String() string { - return fmt.Sprintf("Destroy [%s]", &r.Header) -} - -// Respond replies to the request. -func (r *DestroyRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A ForgetRequest is sent by the kernel when forgetting about r.Node -// as returned by r.N lookup requests. -type ForgetRequest struct { - Header `json:"-"` - N uint64 -} - -var _ = Request(&ForgetRequest{}) - -func (r *ForgetRequest) String() string { - return fmt.Sprintf("Forget [%s] %d", &r.Header, r.N) -} - -// Respond replies to the request, indicating that the forgetfulness has been recorded. -func (r *ForgetRequest) Respond() { - // Don't reply to forget messages. - r.noResponse() -} - -// A Dirent represents a single directory entry. -type Dirent struct { - // Inode this entry names. - Inode uint64 - - // Type of the entry, for example DT_File. - // - // Setting this is optional. The zero value (DT_Unknown) means - // callers will just need to do a Getattr when the type is - // needed. Providing a type can speed up operations - // significantly. - Type DirentType - - // Name of the entry - Name string -} - -// Type of an entry in a directory listing. -type DirentType uint32 - -const ( - // These don't quite match os.FileMode; especially there's an - // explicit unknown, instead of zero value meaning file. They - // are also not quite syscall.DT_*; nothing says the FUSE - // protocol follows those, and even if they were, we don't - // want each fs to fiddle with syscall. - - // The shift by 12 is hardcoded in the FUSE userspace - // low-level C library, so it's safe here. - - DT_Unknown DirentType = 0 - DT_Socket DirentType = syscall.S_IFSOCK >> 12 - DT_Link DirentType = syscall.S_IFLNK >> 12 - DT_File DirentType = syscall.S_IFREG >> 12 - DT_Block DirentType = syscall.S_IFBLK >> 12 - DT_Dir DirentType = syscall.S_IFDIR >> 12 - DT_Char DirentType = syscall.S_IFCHR >> 12 - DT_FIFO DirentType = syscall.S_IFIFO >> 12 -) - -func (t DirentType) String() string { - switch t { - case DT_Unknown: - return "unknown" - case DT_Socket: - return "socket" - case DT_Link: - return "link" - case DT_File: - return "file" - case DT_Block: - return "block" - case DT_Dir: - return "dir" - case DT_Char: - return "char" - case DT_FIFO: - return "fifo" - } - return "invalid" -} - -// AppendDirent appends the encoded form of a directory entry to data -// and returns the resulting slice. -func AppendDirent(data []byte, dir Dirent) []byte { - de := dirent{ - Ino: dir.Inode, - Namelen: uint32(len(dir.Name)), - Type: uint32(dir.Type), - } - de.Off = uint64(len(data) + direntSize + (len(dir.Name)+7)&^7) - data = append(data, (*[direntSize]byte)(unsafe.Pointer(&de))[:]...) - data = append(data, dir.Name...) - n := direntSize + uintptr(len(dir.Name)) - if n%8 != 0 { - var pad [8]byte - data = append(data, pad[:8-n%8]...) - } - return data -} - -// A WriteRequest asks to write to an open file. -type WriteRequest struct { - Header - Handle HandleID - Offset int64 - Data []byte - Flags WriteFlags - LockOwner uint64 - FileFlags OpenFlags -} - -var _ = Request(&WriteRequest{}) - -func (r *WriteRequest) String() string { - return fmt.Sprintf("Write [%s] %v %d @%d fl=%v lock=%d ffl=%v", &r.Header, r.Handle, len(r.Data), r.Offset, r.Flags, r.LockOwner, r.FileFlags) -} - -type jsonWriteRequest struct { - Handle HandleID - Offset int64 - Len uint64 - Flags WriteFlags -} - -func (r *WriteRequest) MarshalJSON() ([]byte, error) { - j := jsonWriteRequest{ - Handle: r.Handle, - Offset: r.Offset, - Len: uint64(len(r.Data)), - Flags: r.Flags, - } - return json.Marshal(j) -} - -// Respond replies to the request with the given response. -func (r *WriteRequest) Respond(resp *WriteResponse) { - buf := newBuffer(unsafe.Sizeof(writeOut{})) - out := (*writeOut)(buf.alloc(unsafe.Sizeof(writeOut{}))) - out.Size = uint32(resp.Size) - r.respond(buf) -} - -// A WriteResponse replies to a write indicating how many bytes were written. -type WriteResponse struct { - Size int -} - -func (r *WriteResponse) String() string { - return fmt.Sprintf("Write %d", r.Size) -} - -// A SetattrRequest asks to change one or more attributes associated with a file, -// as indicated by Valid. -type SetattrRequest struct { - Header `json:"-"` - Valid SetattrValid - Handle HandleID - Size uint64 - Atime time.Time - Mtime time.Time - Mode os.FileMode - Uid uint32 - Gid uint32 - - // OS X only - Bkuptime time.Time - Chgtime time.Time - Crtime time.Time - Flags uint32 // see chflags(2) -} - -var _ = Request(&SetattrRequest{}) - -func (r *SetattrRequest) String() string { - var buf bytes.Buffer - fmt.Fprintf(&buf, "Setattr [%s]", &r.Header) - if r.Valid.Mode() { - fmt.Fprintf(&buf, " mode=%v", r.Mode) - } - if r.Valid.Uid() { - fmt.Fprintf(&buf, " uid=%d", r.Uid) - } - if r.Valid.Gid() { - fmt.Fprintf(&buf, " gid=%d", r.Gid) - } - if r.Valid.Size() { - fmt.Fprintf(&buf, " size=%d", r.Size) - } - if r.Valid.Atime() { - fmt.Fprintf(&buf, " atime=%v", r.Atime) - } - if r.Valid.AtimeNow() { - fmt.Fprintf(&buf, " atime=now") - } - if r.Valid.Mtime() { - fmt.Fprintf(&buf, " mtime=%v", r.Mtime) - } - if r.Valid.MtimeNow() { - fmt.Fprintf(&buf, " mtime=now") - } - if r.Valid.Handle() { - fmt.Fprintf(&buf, " handle=%v", r.Handle) - } else { - fmt.Fprintf(&buf, " handle=INVALID-%v", r.Handle) - } - if r.Valid.LockOwner() { - fmt.Fprintf(&buf, " lockowner") - } - if r.Valid.Crtime() { - fmt.Fprintf(&buf, " crtime=%v", r.Crtime) - } - if r.Valid.Chgtime() { - fmt.Fprintf(&buf, " chgtime=%v", r.Chgtime) - } - if r.Valid.Bkuptime() { - fmt.Fprintf(&buf, " bkuptime=%v", r.Bkuptime) - } - if r.Valid.Flags() { - fmt.Fprintf(&buf, " flags=%v", r.Flags) - } - return buf.String() -} - -// Respond replies to the request with the given response, -// giving the updated attributes. -func (r *SetattrRequest) Respond(resp *SetattrResponse) { - size := attrOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*attrOut)(buf.alloc(size)) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A SetattrResponse is the response to a SetattrRequest. -type SetattrResponse struct { - Attr Attr // file attributes -} - -func (r *SetattrResponse) String() string { - return fmt.Sprintf("Setattr %v", r.Attr) -} - -// A FlushRequest asks for the current state of an open file to be flushed -// to storage, as when a file descriptor is being closed. A single opened Handle -// may receive multiple FlushRequests over its lifetime. -type FlushRequest struct { - Header `json:"-"` - Handle HandleID - Flags uint32 - LockOwner uint64 -} - -var _ = Request(&FlushRequest{}) - -func (r *FlushRequest) String() string { - return fmt.Sprintf("Flush [%s] %v fl=%#x lk=%#x", &r.Header, r.Handle, r.Flags, r.LockOwner) -} - -// Respond replies to the request, indicating that the flush succeeded. -func (r *FlushRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A RemoveRequest asks to remove a file or directory from the -// directory r.Node. -type RemoveRequest struct { - Header `json:"-"` - Name string // name of the entry to remove - Dir bool // is this rmdir? -} - -var _ = Request(&RemoveRequest{}) - -func (r *RemoveRequest) String() string { - return fmt.Sprintf("Remove [%s] %q dir=%v", &r.Header, r.Name, r.Dir) -} - -// Respond replies to the request, indicating that the file was removed. -func (r *RemoveRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// A SymlinkRequest is a request to create a symlink making NewName point to Target. -type SymlinkRequest struct { - Header `json:"-"` - NewName, Target string -} - -var _ = Request(&SymlinkRequest{}) - -func (r *SymlinkRequest) String() string { - return fmt.Sprintf("Symlink [%s] from %q to target %q", &r.Header, r.NewName, r.Target) -} - -// Respond replies to the request, indicating that the symlink was created. -func (r *SymlinkRequest) Respond(resp *SymlinkResponse) { - size := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*entryOut)(buf.alloc(size)) - out.Nodeid = uint64(resp.Node) - out.Generation = resp.Generation - out.EntryValid = uint64(resp.EntryValid / time.Second) - out.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A SymlinkResponse is the response to a SymlinkRequest. -type SymlinkResponse struct { - LookupResponse -} - -func (r *SymlinkResponse) String() string { - return fmt.Sprintf("Symlink %v", r.LookupResponse.string()) -} - -// A ReadlinkRequest is a request to read a symlink's target. -type ReadlinkRequest struct { - Header `json:"-"` -} - -var _ = Request(&ReadlinkRequest{}) - -func (r *ReadlinkRequest) String() string { - return fmt.Sprintf("Readlink [%s]", &r.Header) -} - -func (r *ReadlinkRequest) Respond(target string) { - buf := newBuffer(uintptr(len(target))) - buf = append(buf, target...) - r.respond(buf) -} - -// A LinkRequest is a request to create a hard link. -type LinkRequest struct { - Header `json:"-"` - OldNode NodeID - NewName string -} - -var _ = Request(&LinkRequest{}) - -func (r *LinkRequest) String() string { - return fmt.Sprintf("Link [%s] node %d to %q", &r.Header, r.OldNode, r.NewName) -} - -func (r *LinkRequest) Respond(resp *LookupResponse) { - size := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*entryOut)(buf.alloc(size)) - out.Nodeid = uint64(resp.Node) - out.Generation = resp.Generation - out.EntryValid = uint64(resp.EntryValid / time.Second) - out.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -// A RenameRequest is a request to rename a file. -type RenameRequest struct { - Header `json:"-"` - NewDir NodeID - OldName, NewName string -} - -var _ = Request(&RenameRequest{}) - -func (r *RenameRequest) String() string { - return fmt.Sprintf("Rename [%s] from %q to dirnode %v %q", &r.Header, r.OldName, r.NewDir, r.NewName) -} - -func (r *RenameRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -type MknodRequest struct { - Header `json:"-"` - Name string - Mode os.FileMode - Rdev uint32 - // Umask of the request. Not supported on OS X. - Umask os.FileMode -} - -var _ = Request(&MknodRequest{}) - -func (r *MknodRequest) String() string { - return fmt.Sprintf("Mknod [%s] Name %q mode=%v umask=%v rdev=%d", &r.Header, r.Name, r.Mode, r.Umask, r.Rdev) -} - -func (r *MknodRequest) Respond(resp *LookupResponse) { - size := entryOutSize(r.Header.Conn.proto) - buf := newBuffer(size) - out := (*entryOut)(buf.alloc(size)) - out.Nodeid = uint64(resp.Node) - out.Generation = resp.Generation - out.EntryValid = uint64(resp.EntryValid / time.Second) - out.EntryValidNsec = uint32(resp.EntryValid % time.Second / time.Nanosecond) - out.AttrValid = uint64(resp.Attr.Valid / time.Second) - out.AttrValidNsec = uint32(resp.Attr.Valid % time.Second / time.Nanosecond) - resp.Attr.attr(&out.Attr, r.Header.Conn.proto) - r.respond(buf) -} - -type FsyncRequest struct { - Header `json:"-"` - Handle HandleID - // TODO bit 1 is datasync, not well documented upstream - Flags uint32 - Dir bool -} - -var _ = Request(&FsyncRequest{}) - -func (r *FsyncRequest) String() string { - return fmt.Sprintf("Fsync [%s] Handle %v Flags %v", &r.Header, r.Handle, r.Flags) -} - -func (r *FsyncRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} - -// An InterruptRequest is a request to interrupt another pending request. The -// response to that request should return an error status of EINTR. -type InterruptRequest struct { - Header `json:"-"` - IntrID RequestID // ID of the request to be interrupt. -} - -var _ = Request(&InterruptRequest{}) - -func (r *InterruptRequest) Respond() { - // nothing to do here - r.noResponse() -} - -func (r *InterruptRequest) String() string { - return fmt.Sprintf("Interrupt [%s] ID %v", &r.Header, r.IntrID) -} - -// An ExchangeDataRequest is a request to exchange the contents of two -// files, while leaving most metadata untouched. -// -// This request comes from OS X exchangedata(2) and represents its -// specific semantics. Crucially, it is very different from Linux -// renameat(2) RENAME_EXCHANGE. -// -// https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/exchangedata.2.html -type ExchangeDataRequest struct { - Header `json:"-"` - OldDir, NewDir NodeID - OldName, NewName string - // TODO options -} - -var _ = Request(&ExchangeDataRequest{}) - -func (r *ExchangeDataRequest) String() string { - // TODO options - return fmt.Sprintf("ExchangeData [%s] %v %q and %v %q", &r.Header, r.OldDir, r.OldName, r.NewDir, r.NewName) -} - -func (r *ExchangeDataRequest) Respond() { - buf := newBuffer(0) - r.respond(buf) -} diff --git a/vendor/bazil.org/fuse/fuse.iml b/vendor/bazil.org/fuse/fuse.iml deleted file mode 100644 index 792ad4c30c83..000000000000 --- a/vendor/bazil.org/fuse/fuse.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/vendor/bazil.org/fuse/fuse_darwin.go b/vendor/bazil.org/fuse/fuse_darwin.go deleted file mode 100644 index b58dca97d648..000000000000 --- a/vendor/bazil.org/fuse/fuse_darwin.go +++ /dev/null @@ -1,9 +0,0 @@ -package fuse - -// Maximum file write size we are prepared to receive from the kernel. -// -// This value has to be >=16MB or OSXFUSE (3.4.0 observed) will -// forcibly close the /dev/fuse file descriptor on a Setxattr with a -// 16MB value. See TestSetxattr16MB and -// https://github.com/bazil/fuse/issues/42 -const maxWrite = 16 * 1024 * 1024 diff --git a/vendor/bazil.org/fuse/fuse_freebsd.go b/vendor/bazil.org/fuse/fuse_freebsd.go deleted file mode 100644 index 4aa83a0d4104..000000000000 --- a/vendor/bazil.org/fuse/fuse_freebsd.go +++ /dev/null @@ -1,6 +0,0 @@ -package fuse - -// Maximum file write size we are prepared to receive from the kernel. -// -// This number is just a guess. -const maxWrite = 128 * 1024 diff --git a/vendor/bazil.org/fuse/fuse_kernel.go b/vendor/bazil.org/fuse/fuse_kernel.go deleted file mode 100644 index 87c5ca1dc675..000000000000 --- a/vendor/bazil.org/fuse/fuse_kernel.go +++ /dev/null @@ -1,774 +0,0 @@ -// See the file LICENSE for copyright and licensing information. - -// Derived from FUSE's fuse_kernel.h, which carries this notice: -/* - This file defines the kernel interface of FUSE - Copyright (C) 2001-2007 Miklos Szeredi - - - This -- and only this -- header file may also be distributed under - the terms of the BSD Licence as follows: - - Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - SUCH DAMAGE. -*/ - -package fuse - -import ( - "fmt" - "syscall" - "unsafe" -) - -// The FUSE version implemented by the package. -const ( - protoVersionMinMajor = 7 - protoVersionMinMinor = 8 - protoVersionMaxMajor = 7 - protoVersionMaxMinor = 12 -) - -const ( - rootID = 1 -) - -type kstatfs struct { - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Bsize uint32 - Namelen uint32 - Frsize uint32 - _ uint32 - Spare [6]uint32 -} - -type fileLock struct { - Start uint64 - End uint64 - Type uint32 - Pid uint32 -} - -// GetattrFlags are bit flags that can be seen in GetattrRequest. -type GetattrFlags uint32 - -const ( - // Indicates the handle is valid. - GetattrFh GetattrFlags = 1 << 0 -) - -var getattrFlagsNames = []flagName{ - {uint32(GetattrFh), "GetattrFh"}, -} - -func (fl GetattrFlags) String() string { - return flagString(uint32(fl), getattrFlagsNames) -} - -// The SetattrValid are bit flags describing which fields in the SetattrRequest -// are included in the change. -type SetattrValid uint32 - -const ( - SetattrMode SetattrValid = 1 << 0 - SetattrUid SetattrValid = 1 << 1 - SetattrGid SetattrValid = 1 << 2 - SetattrSize SetattrValid = 1 << 3 - SetattrAtime SetattrValid = 1 << 4 - SetattrMtime SetattrValid = 1 << 5 - SetattrHandle SetattrValid = 1 << 6 - - // Linux only(?) - SetattrAtimeNow SetattrValid = 1 << 7 - SetattrMtimeNow SetattrValid = 1 << 8 - SetattrLockOwner SetattrValid = 1 << 9 // http://www.mail-archive.com/git-commits-head@vger.kernel.org/msg27852.html - - // OS X only - SetattrCrtime SetattrValid = 1 << 28 - SetattrChgtime SetattrValid = 1 << 29 - SetattrBkuptime SetattrValid = 1 << 30 - SetattrFlags SetattrValid = 1 << 31 -) - -func (fl SetattrValid) Mode() bool { return fl&SetattrMode != 0 } -func (fl SetattrValid) Uid() bool { return fl&SetattrUid != 0 } -func (fl SetattrValid) Gid() bool { return fl&SetattrGid != 0 } -func (fl SetattrValid) Size() bool { return fl&SetattrSize != 0 } -func (fl SetattrValid) Atime() bool { return fl&SetattrAtime != 0 } -func (fl SetattrValid) Mtime() bool { return fl&SetattrMtime != 0 } -func (fl SetattrValid) Handle() bool { return fl&SetattrHandle != 0 } -func (fl SetattrValid) AtimeNow() bool { return fl&SetattrAtimeNow != 0 } -func (fl SetattrValid) MtimeNow() bool { return fl&SetattrMtimeNow != 0 } -func (fl SetattrValid) LockOwner() bool { return fl&SetattrLockOwner != 0 } -func (fl SetattrValid) Crtime() bool { return fl&SetattrCrtime != 0 } -func (fl SetattrValid) Chgtime() bool { return fl&SetattrChgtime != 0 } -func (fl SetattrValid) Bkuptime() bool { return fl&SetattrBkuptime != 0 } -func (fl SetattrValid) Flags() bool { return fl&SetattrFlags != 0 } - -func (fl SetattrValid) String() string { - return flagString(uint32(fl), setattrValidNames) -} - -var setattrValidNames = []flagName{ - {uint32(SetattrMode), "SetattrMode"}, - {uint32(SetattrUid), "SetattrUid"}, - {uint32(SetattrGid), "SetattrGid"}, - {uint32(SetattrSize), "SetattrSize"}, - {uint32(SetattrAtime), "SetattrAtime"}, - {uint32(SetattrMtime), "SetattrMtime"}, - {uint32(SetattrHandle), "SetattrHandle"}, - {uint32(SetattrAtimeNow), "SetattrAtimeNow"}, - {uint32(SetattrMtimeNow), "SetattrMtimeNow"}, - {uint32(SetattrLockOwner), "SetattrLockOwner"}, - {uint32(SetattrCrtime), "SetattrCrtime"}, - {uint32(SetattrChgtime), "SetattrChgtime"}, - {uint32(SetattrBkuptime), "SetattrBkuptime"}, - {uint32(SetattrFlags), "SetattrFlags"}, -} - -// Flags that can be seen in OpenRequest.Flags. -const ( - // Access modes. These are not 1-bit flags, but alternatives where - // only one can be chosen. See the IsReadOnly etc convenience - // methods. - OpenReadOnly OpenFlags = syscall.O_RDONLY - OpenWriteOnly OpenFlags = syscall.O_WRONLY - OpenReadWrite OpenFlags = syscall.O_RDWR - - // File was opened in append-only mode, all writes will go to end - // of file. OS X does not provide this information. - OpenAppend OpenFlags = syscall.O_APPEND - OpenCreate OpenFlags = syscall.O_CREAT - OpenDirectory OpenFlags = syscall.O_DIRECTORY - OpenExclusive OpenFlags = syscall.O_EXCL - OpenNonblock OpenFlags = syscall.O_NONBLOCK - OpenSync OpenFlags = syscall.O_SYNC - OpenTruncate OpenFlags = syscall.O_TRUNC -) - -// OpenAccessModeMask is a bitmask that separates the access mode -// from the other flags in OpenFlags. -const OpenAccessModeMask OpenFlags = syscall.O_ACCMODE - -// OpenFlags are the O_FOO flags passed to open/create/etc calls. For -// example, os.O_WRONLY | os.O_APPEND. -type OpenFlags uint32 - -func (fl OpenFlags) String() string { - // O_RDONLY, O_RWONLY, O_RDWR are not flags - s := accModeName(fl & OpenAccessModeMask) - flags := uint32(fl &^ OpenAccessModeMask) - if flags != 0 { - s = s + "+" + flagString(flags, openFlagNames) - } - return s -} - -// Return true if OpenReadOnly is set. -func (fl OpenFlags) IsReadOnly() bool { - return fl&OpenAccessModeMask == OpenReadOnly -} - -// Return true if OpenWriteOnly is set. -func (fl OpenFlags) IsWriteOnly() bool { - return fl&OpenAccessModeMask == OpenWriteOnly -} - -// Return true if OpenReadWrite is set. -func (fl OpenFlags) IsReadWrite() bool { - return fl&OpenAccessModeMask == OpenReadWrite -} - -func accModeName(flags OpenFlags) string { - switch flags { - case OpenReadOnly: - return "OpenReadOnly" - case OpenWriteOnly: - return "OpenWriteOnly" - case OpenReadWrite: - return "OpenReadWrite" - default: - return "" - } -} - -var openFlagNames = []flagName{ - {uint32(OpenAppend), "OpenAppend"}, - {uint32(OpenCreate), "OpenCreate"}, - {uint32(OpenDirectory), "OpenDirectory"}, - {uint32(OpenExclusive), "OpenExclusive"}, - {uint32(OpenNonblock), "OpenNonblock"}, - {uint32(OpenSync), "OpenSync"}, - {uint32(OpenTruncate), "OpenTruncate"}, -} - -// The OpenResponseFlags are returned in the OpenResponse. -type OpenResponseFlags uint32 - -const ( - OpenDirectIO OpenResponseFlags = 1 << 0 // bypass page cache for this open file - OpenKeepCache OpenResponseFlags = 1 << 1 // don't invalidate the data cache on open - OpenNonSeekable OpenResponseFlags = 1 << 2 // mark the file as non-seekable (not supported on OS X) - - OpenPurgeAttr OpenResponseFlags = 1 << 30 // OS X - OpenPurgeUBC OpenResponseFlags = 1 << 31 // OS X -) - -func (fl OpenResponseFlags) String() string { - return flagString(uint32(fl), openResponseFlagNames) -} - -var openResponseFlagNames = []flagName{ - {uint32(OpenDirectIO), "OpenDirectIO"}, - {uint32(OpenKeepCache), "OpenKeepCache"}, - {uint32(OpenNonSeekable), "OpenNonSeekable"}, - {uint32(OpenPurgeAttr), "OpenPurgeAttr"}, - {uint32(OpenPurgeUBC), "OpenPurgeUBC"}, -} - -// The InitFlags are used in the Init exchange. -type InitFlags uint32 - -const ( - InitAsyncRead InitFlags = 1 << 0 - InitPosixLocks InitFlags = 1 << 1 - InitFileOps InitFlags = 1 << 2 - InitAtomicTrunc InitFlags = 1 << 3 - InitExportSupport InitFlags = 1 << 4 - InitBigWrites InitFlags = 1 << 5 - // Do not mask file access modes with umask. Not supported on OS X. - InitDontMask InitFlags = 1 << 6 - InitSpliceWrite InitFlags = 1 << 7 - InitSpliceMove InitFlags = 1 << 8 - InitSpliceRead InitFlags = 1 << 9 - InitFlockLocks InitFlags = 1 << 10 - InitHasIoctlDir InitFlags = 1 << 11 - InitAutoInvalData InitFlags = 1 << 12 - InitDoReaddirplus InitFlags = 1 << 13 - InitReaddirplusAuto InitFlags = 1 << 14 - InitAsyncDIO InitFlags = 1 << 15 - InitWritebackCache InitFlags = 1 << 16 - InitNoOpenSupport InitFlags = 1 << 17 - - InitCaseSensitive InitFlags = 1 << 29 // OS X only - InitVolRename InitFlags = 1 << 30 // OS X only - InitXtimes InitFlags = 1 << 31 // OS X only -) - -type flagName struct { - bit uint32 - name string -} - -var initFlagNames = []flagName{ - {uint32(InitAsyncRead), "InitAsyncRead"}, - {uint32(InitPosixLocks), "InitPosixLocks"}, - {uint32(InitFileOps), "InitFileOps"}, - {uint32(InitAtomicTrunc), "InitAtomicTrunc"}, - {uint32(InitExportSupport), "InitExportSupport"}, - {uint32(InitBigWrites), "InitBigWrites"}, - {uint32(InitDontMask), "InitDontMask"}, - {uint32(InitSpliceWrite), "InitSpliceWrite"}, - {uint32(InitSpliceMove), "InitSpliceMove"}, - {uint32(InitSpliceRead), "InitSpliceRead"}, - {uint32(InitFlockLocks), "InitFlockLocks"}, - {uint32(InitHasIoctlDir), "InitHasIoctlDir"}, - {uint32(InitAutoInvalData), "InitAutoInvalData"}, - {uint32(InitDoReaddirplus), "InitDoReaddirplus"}, - {uint32(InitReaddirplusAuto), "InitReaddirplusAuto"}, - {uint32(InitAsyncDIO), "InitAsyncDIO"}, - {uint32(InitWritebackCache), "InitWritebackCache"}, - {uint32(InitNoOpenSupport), "InitNoOpenSupport"}, - - {uint32(InitCaseSensitive), "InitCaseSensitive"}, - {uint32(InitVolRename), "InitVolRename"}, - {uint32(InitXtimes), "InitXtimes"}, -} - -func (fl InitFlags) String() string { - return flagString(uint32(fl), initFlagNames) -} - -func flagString(f uint32, names []flagName) string { - var s string - - if f == 0 { - return "0" - } - - for _, n := range names { - if f&n.bit != 0 { - s += "+" + n.name - f &^= n.bit - } - } - if f != 0 { - s += fmt.Sprintf("%+#x", f) - } - return s[1:] -} - -// The ReleaseFlags are used in the Release exchange. -type ReleaseFlags uint32 - -const ( - ReleaseFlush ReleaseFlags = 1 << 0 -) - -func (fl ReleaseFlags) String() string { - return flagString(uint32(fl), releaseFlagNames) -} - -var releaseFlagNames = []flagName{ - {uint32(ReleaseFlush), "ReleaseFlush"}, -} - -// Opcodes -const ( - opLookup = 1 - opForget = 2 // no reply - opGetattr = 3 - opSetattr = 4 - opReadlink = 5 - opSymlink = 6 - opMknod = 8 - opMkdir = 9 - opUnlink = 10 - opRmdir = 11 - opRename = 12 - opLink = 13 - opOpen = 14 - opRead = 15 - opWrite = 16 - opStatfs = 17 - opRelease = 18 - opFsync = 20 - opSetxattr = 21 - opGetxattr = 22 - opListxattr = 23 - opRemovexattr = 24 - opFlush = 25 - opInit = 26 - opOpendir = 27 - opReaddir = 28 - opReleasedir = 29 - opFsyncdir = 30 - opGetlk = 31 - opSetlk = 32 - opSetlkw = 33 - opAccess = 34 - opCreate = 35 - opInterrupt = 36 - opBmap = 37 - opDestroy = 38 - opIoctl = 39 // Linux? - opPoll = 40 // Linux? - - // OS X - opSetvolname = 61 - opGetxtimes = 62 - opExchange = 63 -) - -type entryOut struct { - Nodeid uint64 // Inode ID - Generation uint64 // Inode generation - EntryValid uint64 // Cache timeout for the name - AttrValid uint64 // Cache timeout for the attributes - EntryValidNsec uint32 - AttrValidNsec uint32 - Attr attr -} - -func entryOutSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 9}): - return unsafe.Offsetof(entryOut{}.Attr) + unsafe.Offsetof(entryOut{}.Attr.Blksize) - default: - return unsafe.Sizeof(entryOut{}) - } -} - -type forgetIn struct { - Nlookup uint64 -} - -type getattrIn struct { - GetattrFlags uint32 - _ uint32 - Fh uint64 -} - -type attrOut struct { - AttrValid uint64 // Cache timeout for the attributes - AttrValidNsec uint32 - _ uint32 - Attr attr -} - -func attrOutSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 9}): - return unsafe.Offsetof(attrOut{}.Attr) + unsafe.Offsetof(attrOut{}.Attr.Blksize) - default: - return unsafe.Sizeof(attrOut{}) - } -} - -// OS X -type getxtimesOut struct { - Bkuptime uint64 - Crtime uint64 - BkuptimeNsec uint32 - CrtimeNsec uint32 -} - -type mknodIn struct { - Mode uint32 - Rdev uint32 - Umask uint32 - _ uint32 - // "filename\x00" follows. -} - -func mknodInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 12}): - return unsafe.Offsetof(mknodIn{}.Umask) - default: - return unsafe.Sizeof(mknodIn{}) - } -} - -type mkdirIn struct { - Mode uint32 - Umask uint32 - // filename follows -} - -func mkdirInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 12}): - return unsafe.Offsetof(mkdirIn{}.Umask) + 4 - default: - return unsafe.Sizeof(mkdirIn{}) - } -} - -type renameIn struct { - Newdir uint64 - // "oldname\x00newname\x00" follows -} - -// OS X -type exchangeIn struct { - Olddir uint64 - Newdir uint64 - Options uint64 - // "oldname\x00newname\x00" follows -} - -type linkIn struct { - Oldnodeid uint64 -} - -type setattrInCommon struct { - Valid uint32 - _ uint32 - Fh uint64 - Size uint64 - LockOwner uint64 // unused on OS X? - Atime uint64 - Mtime uint64 - Unused2 uint64 - AtimeNsec uint32 - MtimeNsec uint32 - Unused3 uint32 - Mode uint32 - Unused4 uint32 - Uid uint32 - Gid uint32 - Unused5 uint32 -} - -type openIn struct { - Flags uint32 - Unused uint32 -} - -type openOut struct { - Fh uint64 - OpenFlags uint32 - _ uint32 -} - -type createIn struct { - Flags uint32 - Mode uint32 - Umask uint32 - _ uint32 -} - -func createInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 12}): - return unsafe.Offsetof(createIn{}.Umask) - default: - return unsafe.Sizeof(createIn{}) - } -} - -type releaseIn struct { - Fh uint64 - Flags uint32 - ReleaseFlags uint32 - LockOwner uint32 -} - -type flushIn struct { - Fh uint64 - FlushFlags uint32 - _ uint32 - LockOwner uint64 -} - -type readIn struct { - Fh uint64 - Offset uint64 - Size uint32 - ReadFlags uint32 - LockOwner uint64 - Flags uint32 - _ uint32 -} - -func readInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 9}): - return unsafe.Offsetof(readIn{}.ReadFlags) + 4 - default: - return unsafe.Sizeof(readIn{}) - } -} - -// The ReadFlags are passed in ReadRequest. -type ReadFlags uint32 - -const ( - // LockOwner field is valid. - ReadLockOwner ReadFlags = 1 << 1 -) - -var readFlagNames = []flagName{ - {uint32(ReadLockOwner), "ReadLockOwner"}, -} - -func (fl ReadFlags) String() string { - return flagString(uint32(fl), readFlagNames) -} - -type writeIn struct { - Fh uint64 - Offset uint64 - Size uint32 - WriteFlags uint32 - LockOwner uint64 - Flags uint32 - _ uint32 -} - -func writeInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 9}): - return unsafe.Offsetof(writeIn{}.LockOwner) - default: - return unsafe.Sizeof(writeIn{}) - } -} - -type writeOut struct { - Size uint32 - _ uint32 -} - -// The WriteFlags are passed in WriteRequest. -type WriteFlags uint32 - -const ( - WriteCache WriteFlags = 1 << 0 - // LockOwner field is valid. - WriteLockOwner WriteFlags = 1 << 1 -) - -var writeFlagNames = []flagName{ - {uint32(WriteCache), "WriteCache"}, - {uint32(WriteLockOwner), "WriteLockOwner"}, -} - -func (fl WriteFlags) String() string { - return flagString(uint32(fl), writeFlagNames) -} - -const compatStatfsSize = 48 - -type statfsOut struct { - St kstatfs -} - -type fsyncIn struct { - Fh uint64 - FsyncFlags uint32 - _ uint32 -} - -type setxattrInCommon struct { - Size uint32 - Flags uint32 -} - -func (setxattrInCommon) position() uint32 { - return 0 -} - -type getxattrInCommon struct { - Size uint32 - _ uint32 -} - -func (getxattrInCommon) position() uint32 { - return 0 -} - -type getxattrOut struct { - Size uint32 - _ uint32 -} - -type lkIn struct { - Fh uint64 - Owner uint64 - Lk fileLock - LkFlags uint32 - _ uint32 -} - -func lkInSize(p Protocol) uintptr { - switch { - case p.LT(Protocol{7, 9}): - return unsafe.Offsetof(lkIn{}.LkFlags) - default: - return unsafe.Sizeof(lkIn{}) - } -} - -type lkOut struct { - Lk fileLock -} - -type accessIn struct { - Mask uint32 - _ uint32 -} - -type initIn struct { - Major uint32 - Minor uint32 - MaxReadahead uint32 - Flags uint32 -} - -const initInSize = int(unsafe.Sizeof(initIn{})) - -type initOut struct { - Major uint32 - Minor uint32 - MaxReadahead uint32 - Flags uint32 - Unused uint32 - MaxWrite uint32 -} - -type interruptIn struct { - Unique uint64 -} - -type bmapIn struct { - Block uint64 - BlockSize uint32 - _ uint32 -} - -type bmapOut struct { - Block uint64 -} - -type inHeader struct { - Len uint32 - Opcode uint32 - Unique uint64 - Nodeid uint64 - Uid uint32 - Gid uint32 - Pid uint32 - _ uint32 -} - -const inHeaderSize = int(unsafe.Sizeof(inHeader{})) - -type outHeader struct { - Len uint32 - Error int32 - Unique uint64 -} - -type dirent struct { - Ino uint64 - Off uint64 - Namelen uint32 - Type uint32 - Name [0]byte -} - -const direntSize = 8 + 8 + 4 + 4 - -const ( - notifyCodePoll int32 = 1 - notifyCodeInvalInode int32 = 2 - notifyCodeInvalEntry int32 = 3 -) - -type notifyInvalInodeOut struct { - Ino uint64 - Off int64 - Len int64 -} - -type notifyInvalEntryOut struct { - Parent uint64 - Namelen uint32 - _ uint32 -} diff --git a/vendor/bazil.org/fuse/fuse_kernel_darwin.go b/vendor/bazil.org/fuse/fuse_kernel_darwin.go deleted file mode 100644 index b9873fdf3910..000000000000 --- a/vendor/bazil.org/fuse/fuse_kernel_darwin.go +++ /dev/null @@ -1,88 +0,0 @@ -package fuse - -import ( - "time" -) - -type attr struct { - Ino uint64 - Size uint64 - Blocks uint64 - Atime uint64 - Mtime uint64 - Ctime uint64 - Crtime_ uint64 // OS X only - AtimeNsec uint32 - MtimeNsec uint32 - CtimeNsec uint32 - CrtimeNsec uint32 // OS X only - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Flags_ uint32 // OS X only; see chflags(2) - Blksize uint32 - padding uint32 -} - -func (a *attr) SetCrtime(s uint64, ns uint32) { - a.Crtime_, a.CrtimeNsec = s, ns -} - -func (a *attr) SetFlags(f uint32) { - a.Flags_ = f -} - -type setattrIn struct { - setattrInCommon - - // OS X only - Bkuptime_ uint64 - Chgtime_ uint64 - Crtime uint64 - BkuptimeNsec uint32 - ChgtimeNsec uint32 - CrtimeNsec uint32 - Flags_ uint32 // see chflags(2) -} - -func (in *setattrIn) BkupTime() time.Time { - return time.Unix(int64(in.Bkuptime_), int64(in.BkuptimeNsec)) -} - -func (in *setattrIn) Chgtime() time.Time { - return time.Unix(int64(in.Chgtime_), int64(in.ChgtimeNsec)) -} - -func (in *setattrIn) Flags() uint32 { - return in.Flags_ -} - -func openFlags(flags uint32) OpenFlags { - return OpenFlags(flags) -} - -type getxattrIn struct { - getxattrInCommon - - // OS X only - Position uint32 - Padding uint32 -} - -func (g *getxattrIn) position() uint32 { - return g.Position -} - -type setxattrIn struct { - setxattrInCommon - - // OS X only - Position uint32 - Padding uint32 -} - -func (s *setxattrIn) position() uint32 { - return s.Position -} diff --git a/vendor/bazil.org/fuse/fuse_kernel_freebsd.go b/vendor/bazil.org/fuse/fuse_kernel_freebsd.go deleted file mode 100644 index b1141e41dc96..000000000000 --- a/vendor/bazil.org/fuse/fuse_kernel_freebsd.go +++ /dev/null @@ -1,62 +0,0 @@ -package fuse - -import "time" - -type attr struct { - Ino uint64 - Size uint64 - Blocks uint64 - Atime uint64 - Mtime uint64 - Ctime uint64 - AtimeNsec uint32 - MtimeNsec uint32 - CtimeNsec uint32 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Blksize uint32 - padding uint32 -} - -func (a *attr) Crtime() time.Time { - return time.Time{} -} - -func (a *attr) SetCrtime(s uint64, ns uint32) { - // ignored on freebsd -} - -func (a *attr) SetFlags(f uint32) { - // ignored on freebsd -} - -type setattrIn struct { - setattrInCommon -} - -func (in *setattrIn) BkupTime() time.Time { - return time.Time{} -} - -func (in *setattrIn) Chgtime() time.Time { - return time.Time{} -} - -func (in *setattrIn) Flags() uint32 { - return 0 -} - -func openFlags(flags uint32) OpenFlags { - return OpenFlags(flags) -} - -type getxattrIn struct { - getxattrInCommon -} - -type setxattrIn struct { - setxattrInCommon -} diff --git a/vendor/bazil.org/fuse/fuse_kernel_linux.go b/vendor/bazil.org/fuse/fuse_kernel_linux.go deleted file mode 100644 index d3ba86617802..000000000000 --- a/vendor/bazil.org/fuse/fuse_kernel_linux.go +++ /dev/null @@ -1,70 +0,0 @@ -package fuse - -import "time" - -type attr struct { - Ino uint64 - Size uint64 - Blocks uint64 - Atime uint64 - Mtime uint64 - Ctime uint64 - AtimeNsec uint32 - MtimeNsec uint32 - CtimeNsec uint32 - Mode uint32 - Nlink uint32 - Uid uint32 - Gid uint32 - Rdev uint32 - Blksize uint32 - padding uint32 -} - -func (a *attr) Crtime() time.Time { - return time.Time{} -} - -func (a *attr) SetCrtime(s uint64, ns uint32) { - // Ignored on Linux. -} - -func (a *attr) SetFlags(f uint32) { - // Ignored on Linux. -} - -type setattrIn struct { - setattrInCommon -} - -func (in *setattrIn) BkupTime() time.Time { - return time.Time{} -} - -func (in *setattrIn) Chgtime() time.Time { - return time.Time{} -} - -func (in *setattrIn) Flags() uint32 { - return 0 -} - -func openFlags(flags uint32) OpenFlags { - // on amd64, the 32-bit O_LARGEFILE flag is always seen; - // on i386, the flag probably depends on the app - // requesting, but in any case should be utterly - // uninteresting to us here; our kernel protocol messages - // are not directly related to the client app's kernel - // API/ABI - flags &^= 0x8000 - - return OpenFlags(flags) -} - -type getxattrIn struct { - getxattrInCommon -} - -type setxattrIn struct { - setxattrInCommon -} diff --git a/vendor/bazil.org/fuse/fuse_kernel_std.go b/vendor/bazil.org/fuse/fuse_kernel_std.go deleted file mode 100644 index 074cfd322887..000000000000 --- a/vendor/bazil.org/fuse/fuse_kernel_std.go +++ /dev/null @@ -1 +0,0 @@ -package fuse diff --git a/vendor/bazil.org/fuse/fuse_linux.go b/vendor/bazil.org/fuse/fuse_linux.go deleted file mode 100644 index 5fb96f9ae942..000000000000 --- a/vendor/bazil.org/fuse/fuse_linux.go +++ /dev/null @@ -1,7 +0,0 @@ -package fuse - -// Maximum file write size we are prepared to receive from the kernel. -// -// Linux 4.2.0 has been observed to cap this value at 128kB -// (FUSE_MAX_PAGES_PER_REQ=32, 4kB pages). -const maxWrite = 128 * 1024 diff --git a/vendor/bazil.org/fuse/fuseutil/fuseutil.go b/vendor/bazil.org/fuse/fuseutil/fuseutil.go deleted file mode 100644 index b3f52b73b257..000000000000 --- a/vendor/bazil.org/fuse/fuseutil/fuseutil.go +++ /dev/null @@ -1,20 +0,0 @@ -package fuseutil // import "bazil.org/fuse/fuseutil" - -import ( - "bazil.org/fuse" -) - -// HandleRead handles a read request assuming that data is the entire file content. -// It adjusts the amount returned in resp according to req.Offset and req.Size. -func HandleRead(req *fuse.ReadRequest, resp *fuse.ReadResponse, data []byte) { - if req.Offset >= int64(len(data)) { - data = nil - } else { - data = data[req.Offset:] - } - if len(data) > req.Size { - data = data[:req.Size] - } - n := copy(resp.Data[:req.Size], data) - resp.Data = resp.Data[:n] -} diff --git a/vendor/bazil.org/fuse/mount.go b/vendor/bazil.org/fuse/mount.go deleted file mode 100644 index 8054e9021c4e..000000000000 --- a/vendor/bazil.org/fuse/mount.go +++ /dev/null @@ -1,38 +0,0 @@ -package fuse - -import ( - "bufio" - "errors" - "io" - "log" - "sync" -) - -var ( - // ErrOSXFUSENotFound is returned from Mount when the OSXFUSE - // installation is not detected. - // - // Only happens on OS X. Make sure OSXFUSE is installed, or see - // OSXFUSELocations for customization. - ErrOSXFUSENotFound = errors.New("cannot locate OSXFUSE") -) - -func neverIgnoreLine(line string) bool { - return false -} - -func lineLogger(wg *sync.WaitGroup, prefix string, ignore func(line string) bool, r io.ReadCloser) { - defer wg.Done() - - scanner := bufio.NewScanner(r) - for scanner.Scan() { - line := scanner.Text() - if ignore(line) { - continue - } - log.Printf("%s: %s", prefix, line) - } - if err := scanner.Err(); err != nil { - log.Printf("%s, error reading: %v", prefix, err) - } -} diff --git a/vendor/bazil.org/fuse/mount_darwin.go b/vendor/bazil.org/fuse/mount_darwin.go deleted file mode 100644 index c1c36e62b5f3..000000000000 --- a/vendor/bazil.org/fuse/mount_darwin.go +++ /dev/null @@ -1,208 +0,0 @@ -package fuse - -import ( - "errors" - "fmt" - "log" - "os" - "os/exec" - "path" - "strconv" - "strings" - "sync" - "syscall" -) - -var ( - errNoAvail = errors.New("no available fuse devices") - errNotLoaded = errors.New("osxfuse is not loaded") -) - -func loadOSXFUSE(bin string) error { - cmd := exec.Command(bin) - cmd.Dir = "/" - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err := cmd.Run() - return err -} - -func openOSXFUSEDev(devPrefix string) (*os.File, error) { - var f *os.File - var err error - for i := uint64(0); ; i++ { - path := devPrefix + strconv.FormatUint(i, 10) - f, err = os.OpenFile(path, os.O_RDWR, 0000) - if os.IsNotExist(err) { - if i == 0 { - // not even the first device was found -> fuse is not loaded - return nil, errNotLoaded - } - - // we've run out of kernel-provided devices - return nil, errNoAvail - } - - if err2, ok := err.(*os.PathError); ok && err2.Err == syscall.EBUSY { - // try the next one - continue - } - - if err != nil { - return nil, err - } - return f, nil - } -} - -func handleMountOSXFUSE(helperName string, errCh chan<- error) func(line string) (ignore bool) { - var noMountpointPrefix = helperName + `: ` - const noMountpointSuffix = `: No such file or directory` - return func(line string) (ignore bool) { - if strings.HasPrefix(line, noMountpointPrefix) && strings.HasSuffix(line, noMountpointSuffix) { - // re-extract it from the error message in case some layer - // changed the path - mountpoint := line[len(noMountpointPrefix) : len(line)-len(noMountpointSuffix)] - err := &MountpointDoesNotExistError{ - Path: mountpoint, - } - select { - case errCh <- err: - return true - default: - // not the first error; fall back to logging it - return false - } - } - - return false - } -} - -// isBoringMountOSXFUSEError returns whether the Wait error is -// uninteresting; exit status 64 is. -func isBoringMountOSXFUSEError(err error) bool { - if err, ok := err.(*exec.ExitError); ok && err.Exited() { - if status, ok := err.Sys().(syscall.WaitStatus); ok && status.ExitStatus() == 64 { - return true - } - } - return false -} - -func callMount(bin string, daemonVar string, dir string, conf *mountConfig, f *os.File, ready chan<- struct{}, errp *error) error { - for k, v := range conf.options { - if strings.Contains(k, ",") || strings.Contains(v, ",") { - // Silly limitation but the mount helper does not - // understand any escaping. See TestMountOptionCommaError. - return fmt.Errorf("mount options cannot contain commas on darwin: %q=%q", k, v) - } - } - cmd := exec.Command( - bin, - "-o", conf.getOptions(), - // Tell osxfuse-kext how large our buffer is. It must split - // writes larger than this into multiple writes. - // - // OSXFUSE seems to ignore InitResponse.MaxWrite, and uses - // this instead. - "-o", "iosize="+strconv.FormatUint(maxWrite, 10), - // refers to fd passed in cmd.ExtraFiles - "3", - dir, - ) - cmd.ExtraFiles = []*os.File{f} - cmd.Env = os.Environ() - // OSXFUSE <3.3.0 - cmd.Env = append(cmd.Env, "MOUNT_FUSEFS_CALL_BY_LIB=") - // OSXFUSE >=3.3.0 - cmd.Env = append(cmd.Env, "MOUNT_OSXFUSE_CALL_BY_LIB=") - - daemon := os.Args[0] - if daemonVar != "" { - cmd.Env = append(cmd.Env, daemonVar+"="+daemon) - } - - stdout, err := cmd.StdoutPipe() - if err != nil { - return fmt.Errorf("setting up mount_osxfusefs stderr: %v", err) - } - stderr, err := cmd.StderrPipe() - if err != nil { - return fmt.Errorf("setting up mount_osxfusefs stderr: %v", err) - } - - if err := cmd.Start(); err != nil { - return fmt.Errorf("mount_osxfusefs: %v", err) - } - helperErrCh := make(chan error, 1) - go func() { - var wg sync.WaitGroup - wg.Add(2) - go lineLogger(&wg, "mount helper output", neverIgnoreLine, stdout) - helperName := path.Base(bin) - go lineLogger(&wg, "mount helper error", handleMountOSXFUSE(helperName, helperErrCh), stderr) - wg.Wait() - if err := cmd.Wait(); err != nil { - // see if we have a better error to report - select { - case helperErr := <-helperErrCh: - // log the Wait error if it's not what we expected - if !isBoringMountOSXFUSEError(err) { - log.Printf("mount helper failed: %v", err) - } - // and now return what we grabbed from stderr as the real - // error - *errp = helperErr - close(ready) - return - default: - // nope, fall back to generic message - } - - *errp = fmt.Errorf("mount_osxfusefs: %v", err) - close(ready) - return - } - - *errp = nil - close(ready) - }() - return nil -} - -func mount(dir string, conf *mountConfig, ready chan<- struct{}, errp *error) (*os.File, error) { - locations := conf.osxfuseLocations - if locations == nil { - locations = []OSXFUSEPaths{ - OSXFUSELocationV3, - OSXFUSELocationV2, - } - } - for _, loc := range locations { - if _, err := os.Stat(loc.Mount); os.IsNotExist(err) { - // try the other locations - continue - } - - f, err := openOSXFUSEDev(loc.DevicePrefix) - if err == errNotLoaded { - err = loadOSXFUSE(loc.Load) - if err != nil { - return nil, err - } - // try again - f, err = openOSXFUSEDev(loc.DevicePrefix) - } - if err != nil { - return nil, err - } - err = callMount(loc.Mount, loc.DaemonVar, dir, conf, f, ready, errp) - if err != nil { - f.Close() - return nil, err - } - return f, nil - } - return nil, ErrOSXFUSENotFound -} diff --git a/vendor/bazil.org/fuse/mount_freebsd.go b/vendor/bazil.org/fuse/mount_freebsd.go deleted file mode 100644 index 70bb41024978..000000000000 --- a/vendor/bazil.org/fuse/mount_freebsd.go +++ /dev/null @@ -1,111 +0,0 @@ -package fuse - -import ( - "fmt" - "log" - "os" - "os/exec" - "strings" - "sync" - "syscall" -) - -func handleMountFusefsStderr(errCh chan<- error) func(line string) (ignore bool) { - return func(line string) (ignore bool) { - const ( - noMountpointPrefix = `mount_fusefs: ` - noMountpointSuffix = `: No such file or directory` - ) - if strings.HasPrefix(line, noMountpointPrefix) && strings.HasSuffix(line, noMountpointSuffix) { - // re-extract it from the error message in case some layer - // changed the path - mountpoint := line[len(noMountpointPrefix) : len(line)-len(noMountpointSuffix)] - err := &MountpointDoesNotExistError{ - Path: mountpoint, - } - select { - case errCh <- err: - return true - default: - // not the first error; fall back to logging it - return false - } - } - - return false - } -} - -// isBoringMountFusefsError returns whether the Wait error is -// uninteresting; exit status 1 is. -func isBoringMountFusefsError(err error) bool { - if err, ok := err.(*exec.ExitError); ok && err.Exited() { - if status, ok := err.Sys().(syscall.WaitStatus); ok && status.ExitStatus() == 1 { - return true - } - } - return false -} - -func mount(dir string, conf *mountConfig, ready chan<- struct{}, errp *error) (*os.File, error) { - for k, v := range conf.options { - if strings.Contains(k, ",") || strings.Contains(v, ",") { - // Silly limitation but the mount helper does not - // understand any escaping. See TestMountOptionCommaError. - return nil, fmt.Errorf("mount options cannot contain commas on FreeBSD: %q=%q", k, v) - } - } - - f, err := os.OpenFile("/dev/fuse", os.O_RDWR, 0000) - if err != nil { - *errp = err - return nil, err - } - - cmd := exec.Command( - "/sbin/mount_fusefs", - "--safe", - "-o", conf.getOptions(), - "3", - dir, - ) - cmd.ExtraFiles = []*os.File{f} - - stdout, err := cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("setting up mount_fusefs stderr: %v", err) - } - stderr, err := cmd.StderrPipe() - if err != nil { - return nil, fmt.Errorf("setting up mount_fusefs stderr: %v", err) - } - - if err := cmd.Start(); err != nil { - return nil, fmt.Errorf("mount_fusefs: %v", err) - } - helperErrCh := make(chan error, 1) - var wg sync.WaitGroup - wg.Add(2) - go lineLogger(&wg, "mount helper output", neverIgnoreLine, stdout) - go lineLogger(&wg, "mount helper error", handleMountFusefsStderr(helperErrCh), stderr) - wg.Wait() - if err := cmd.Wait(); err != nil { - // see if we have a better error to report - select { - case helperErr := <-helperErrCh: - // log the Wait error if it's not what we expected - if !isBoringMountFusefsError(err) { - log.Printf("mount helper failed: %v", err) - } - // and now return what we grabbed from stderr as the real - // error - return nil, helperErr - default: - // nope, fall back to generic message - } - return nil, fmt.Errorf("mount_fusefs: %v", err) - } - - close(ready) - return f, nil -} diff --git a/vendor/bazil.org/fuse/mount_linux.go b/vendor/bazil.org/fuse/mount_linux.go deleted file mode 100644 index 197d1044e926..000000000000 --- a/vendor/bazil.org/fuse/mount_linux.go +++ /dev/null @@ -1,150 +0,0 @@ -package fuse - -import ( - "fmt" - "log" - "net" - "os" - "os/exec" - "strings" - "sync" - "syscall" -) - -func handleFusermountStderr(errCh chan<- error) func(line string) (ignore bool) { - return func(line string) (ignore bool) { - if line == `fusermount: failed to open /etc/fuse.conf: Permission denied` { - // Silence this particular message, it occurs way too - // commonly and isn't very relevant to whether the mount - // succeeds or not. - return true - } - - const ( - noMountpointPrefix = `fusermount: failed to access mountpoint ` - noMountpointSuffix = `: No such file or directory` - ) - if strings.HasPrefix(line, noMountpointPrefix) && strings.HasSuffix(line, noMountpointSuffix) { - // re-extract it from the error message in case some layer - // changed the path - mountpoint := line[len(noMountpointPrefix) : len(line)-len(noMountpointSuffix)] - err := &MountpointDoesNotExistError{ - Path: mountpoint, - } - select { - case errCh <- err: - return true - default: - // not the first error; fall back to logging it - return false - } - } - - return false - } -} - -// isBoringFusermountError returns whether the Wait error is -// uninteresting; exit status 1 is. -func isBoringFusermountError(err error) bool { - if err, ok := err.(*exec.ExitError); ok && err.Exited() { - if status, ok := err.Sys().(syscall.WaitStatus); ok && status.ExitStatus() == 1 { - return true - } - } - return false -} - -func mount(dir string, conf *mountConfig, ready chan<- struct{}, errp *error) (fusefd *os.File, err error) { - // linux mount is never delayed - close(ready) - - fds, err := syscall.Socketpair(syscall.AF_FILE, syscall.SOCK_STREAM, 0) - if err != nil { - return nil, fmt.Errorf("socketpair error: %v", err) - } - - writeFile := os.NewFile(uintptr(fds[0]), "fusermount-child-writes") - defer writeFile.Close() - - readFile := os.NewFile(uintptr(fds[1]), "fusermount-parent-reads") - defer readFile.Close() - - cmd := exec.Command( - "fusermount", - "-o", conf.getOptions(), - "--", - dir, - ) - cmd.Env = append(os.Environ(), "_FUSE_COMMFD=3") - - cmd.ExtraFiles = []*os.File{writeFile} - - var wg sync.WaitGroup - stdout, err := cmd.StdoutPipe() - if err != nil { - return nil, fmt.Errorf("setting up fusermount stderr: %v", err) - } - stderr, err := cmd.StderrPipe() - if err != nil { - return nil, fmt.Errorf("setting up fusermount stderr: %v", err) - } - - if err := cmd.Start(); err != nil { - return nil, fmt.Errorf("fusermount: %v", err) - } - helperErrCh := make(chan error, 1) - wg.Add(2) - go lineLogger(&wg, "mount helper output", neverIgnoreLine, stdout) - go lineLogger(&wg, "mount helper error", handleFusermountStderr(helperErrCh), stderr) - wg.Wait() - if err := cmd.Wait(); err != nil { - // see if we have a better error to report - select { - case helperErr := <-helperErrCh: - // log the Wait error if it's not what we expected - if !isBoringFusermountError(err) { - log.Printf("mount helper failed: %v", err) - } - // and now return what we grabbed from stderr as the real - // error - return nil, helperErr - default: - // nope, fall back to generic message - } - - return nil, fmt.Errorf("fusermount: %v", err) - } - - c, err := net.FileConn(readFile) - if err != nil { - return nil, fmt.Errorf("FileConn from fusermount socket: %v", err) - } - defer c.Close() - - uc, ok := c.(*net.UnixConn) - if !ok { - return nil, fmt.Errorf("unexpected FileConn type; expected UnixConn, got %T", c) - } - - buf := make([]byte, 32) // expect 1 byte - oob := make([]byte, 32) // expect 24 bytes - _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) - scms, err := syscall.ParseSocketControlMessage(oob[:oobn]) - if err != nil { - return nil, fmt.Errorf("ParseSocketControlMessage: %v", err) - } - if len(scms) != 1 { - return nil, fmt.Errorf("expected 1 SocketControlMessage; got scms = %#v", scms) - } - scm := scms[0] - gotFds, err := syscall.ParseUnixRights(&scm) - if err != nil { - return nil, fmt.Errorf("syscall.ParseUnixRights: %v", err) - } - if len(gotFds) != 1 { - return nil, fmt.Errorf("wanted 1 fd; got %#v", gotFds) - } - f := os.NewFile(uintptr(gotFds[0]), "/dev/fuse") - return f, nil -} diff --git a/vendor/bazil.org/fuse/options.go b/vendor/bazil.org/fuse/options.go deleted file mode 100644 index 65ce8a5410d2..000000000000 --- a/vendor/bazil.org/fuse/options.go +++ /dev/null @@ -1,310 +0,0 @@ -package fuse - -import ( - "errors" - "strings" -) - -func dummyOption(conf *mountConfig) error { - return nil -} - -// mountConfig holds the configuration for a mount operation. -// Use it by passing MountOption values to Mount. -type mountConfig struct { - options map[string]string - maxReadahead uint32 - initFlags InitFlags - osxfuseLocations []OSXFUSEPaths -} - -func escapeComma(s string) string { - s = strings.Replace(s, `\`, `\\`, -1) - s = strings.Replace(s, `,`, `\,`, -1) - return s -} - -// getOptions makes a string of options suitable for passing to FUSE -// mount flag `-o`. Returns an empty string if no options were set. -// Any platform specific adjustments should happen before the call. -func (m *mountConfig) getOptions() string { - var opts []string - for k, v := range m.options { - k = escapeComma(k) - if v != "" { - k += "=" + escapeComma(v) - } - opts = append(opts, k) - } - return strings.Join(opts, ",") -} - -type mountOption func(*mountConfig) error - -// MountOption is passed to Mount to change the behavior of the mount. -type MountOption mountOption - -// FSName sets the file system name (also called source) that is -// visible in the list of mounted file systems. -// -// FreeBSD ignores this option. -func FSName(name string) MountOption { - return func(conf *mountConfig) error { - conf.options["fsname"] = name - return nil - } -} - -// Subtype sets the subtype of the mount. The main type is always -// `fuse`. The type in a list of mounted file systems will look like -// `fuse.foo`. -// -// OS X ignores this option. -// FreeBSD ignores this option. -func Subtype(fstype string) MountOption { - return func(conf *mountConfig) error { - conf.options["subtype"] = fstype - return nil - } -} - -// LocalVolume sets the volume to be local (instead of network), -// changing the behavior of Finder, Spotlight, and such. -// -// OS X only. Others ignore this option. -func LocalVolume() MountOption { - return localVolume -} - -// VolumeName sets the volume name shown in Finder. -// -// OS X only. Others ignore this option. -func VolumeName(name string) MountOption { - return volumeName(name) -} - -// NoAppleDouble makes OSXFUSE disallow files with names used by OS X -// to store extended attributes on file systems that do not support -// them natively. -// -// Such file names are: -// -// ._* -// .DS_Store -// -// OS X only. Others ignore this option. -func NoAppleDouble() MountOption { - return noAppleDouble -} - -// NoAppleXattr makes OSXFUSE disallow extended attributes with the -// prefix "com.apple.". This disables persistent Finder state and -// other such information. -// -// OS X only. Others ignore this option. -func NoAppleXattr() MountOption { - return noAppleXattr -} - -// ExclCreate causes O_EXCL flag to be set for only "truly" exclusive creates, -// i.e. create calls for which the initiator explicitly set the O_EXCL flag. -// -// OSXFUSE expects all create calls to return EEXIST in case the file -// already exists, regardless of whether O_EXCL was specified or not. -// To ensure this behavior, it normally sets OpenExclusive for all -// Create calls, regardless of whether the original call had it set. -// For distributed filesystems, that may force every file create to be -// a distributed consensus action, causing undesirable delays. -// -// This option makes the FUSE filesystem see the original flag value, -// and better decide when to ensure global consensus. -// -// Note that returning EEXIST on existing file create is still -// expected with OSXFUSE, regardless of the presence of the -// OpenExclusive flag. -// -// For more information, see -// https://github.com/osxfuse/osxfuse/issues/209 -// -// OS X only. Others ignore this options. -// Requires OSXFUSE 3.4.1 or newer. -func ExclCreate() MountOption { - return exclCreate -} - -// DaemonTimeout sets the time in seconds between a request and a reply before -// the FUSE mount is declared dead. -// -// OS X and FreeBSD only. Others ignore this option. -func DaemonTimeout(name string) MountOption { - return daemonTimeout(name) -} - -var ErrCannotCombineAllowOtherAndAllowRoot = errors.New("cannot combine AllowOther and AllowRoot") - -// AllowOther allows other users to access the file system. -// -// Only one of AllowOther or AllowRoot can be used. -func AllowOther() MountOption { - return func(conf *mountConfig) error { - if _, ok := conf.options["allow_root"]; ok { - return ErrCannotCombineAllowOtherAndAllowRoot - } - conf.options["allow_other"] = "" - return nil - } -} - -// AllowRoot allows other users to access the file system. -// -// Only one of AllowOther or AllowRoot can be used. -// -// FreeBSD ignores this option. -func AllowRoot() MountOption { - return func(conf *mountConfig) error { - if _, ok := conf.options["allow_other"]; ok { - return ErrCannotCombineAllowOtherAndAllowRoot - } - conf.options["allow_root"] = "" - return nil - } -} - -// AllowDev enables interpreting character or block special devices on the -// filesystem. -func AllowDev() MountOption { - return func(conf *mountConfig) error { - conf.options["dev"] = "" - return nil - } -} - -// AllowSUID allows set-user-identifier or set-group-identifier bits to take -// effect. -func AllowSUID() MountOption { - return func(conf *mountConfig) error { - conf.options["suid"] = "" - return nil - } -} - -// DefaultPermissions makes the kernel enforce access control based on -// the file mode (as in chmod). -// -// Without this option, the Node itself decides what is and is not -// allowed. This is normally ok because FUSE file systems cannot be -// accessed by other users without AllowOther/AllowRoot. -// -// FreeBSD ignores this option. -func DefaultPermissions() MountOption { - return func(conf *mountConfig) error { - conf.options["default_permissions"] = "" - return nil - } -} - -// ReadOnly makes the mount read-only. -func ReadOnly() MountOption { - return func(conf *mountConfig) error { - conf.options["ro"] = "" - return nil - } -} - -// MaxReadahead sets the number of bytes that can be prefetched for -// sequential reads. The kernel can enforce a maximum value lower than -// this. -// -// This setting makes the kernel perform speculative reads that do not -// originate from any client process. This usually tremendously -// improves read performance. -func MaxReadahead(n uint32) MountOption { - return func(conf *mountConfig) error { - conf.maxReadahead = n - return nil - } -} - -// AsyncRead enables multiple outstanding read requests for the same -// handle. Without this, there is at most one request in flight at a -// time. -func AsyncRead() MountOption { - return func(conf *mountConfig) error { - conf.initFlags |= InitAsyncRead - return nil - } -} - -// WritebackCache enables the kernel to buffer writes before sending -// them to the FUSE server. Without this, writethrough caching is -// used. -func WritebackCache() MountOption { - return func(conf *mountConfig) error { - conf.initFlags |= InitWritebackCache - return nil - } -} - -// OSXFUSEPaths describes the paths used by an installed OSXFUSE -// version. See OSXFUSELocationV3 for typical values. -type OSXFUSEPaths struct { - // Prefix for the device file. At mount time, an incrementing - // number is suffixed until a free FUSE device is found. - DevicePrefix string - // Path of the load helper, used to load the kernel extension if - // no device files are found. - Load string - // Path of the mount helper, used for the actual mount operation. - Mount string - // Environment variable used to pass the path to the executable - // calling the mount helper. - DaemonVar string -} - -// Default paths for OSXFUSE. See OSXFUSELocations. -var ( - OSXFUSELocationV3 = OSXFUSEPaths{ - DevicePrefix: "/dev/osxfuse", - Load: "/Library/Filesystems/osxfuse.fs/Contents/Resources/load_osxfuse", - Mount: "/Library/Filesystems/osxfuse.fs/Contents/Resources/mount_osxfuse", - DaemonVar: "MOUNT_OSXFUSE_DAEMON_PATH", - } - OSXFUSELocationV2 = OSXFUSEPaths{ - DevicePrefix: "/dev/osxfuse", - Load: "/Library/Filesystems/osxfusefs.fs/Support/load_osxfusefs", - Mount: "/Library/Filesystems/osxfusefs.fs/Support/mount_osxfusefs", - DaemonVar: "MOUNT_FUSEFS_DAEMON_PATH", - } -) - -// OSXFUSELocations sets where to look for OSXFUSE files. The -// arguments are all the possible locations. The previous locations -// are replaced. -// -// Without this option, OSXFUSELocationV3 and OSXFUSELocationV2 are -// used. -// -// OS X only. Others ignore this option. -func OSXFUSELocations(paths ...OSXFUSEPaths) MountOption { - return func(conf *mountConfig) error { - if len(paths) == 0 { - return errors.New("must specify at least one location for OSXFUSELocations") - } - // replace previous values, but make a copy so there's no - // worries about caller mutating their slice - conf.osxfuseLocations = append(conf.osxfuseLocations[:0], paths...) - return nil - } -} - -// AllowNonEmptyMount allows the mounting over a non-empty directory. -// -// The files in it will be shadowed by the freshly created mount. By -// default these mounts are rejected to prevent accidental covering up -// of data, which could for example prevent automatic backup. -func AllowNonEmptyMount() MountOption { - return func(conf *mountConfig) error { - conf.options["nonempty"] = "" - return nil - } -} diff --git a/vendor/bazil.org/fuse/options_darwin.go b/vendor/bazil.org/fuse/options_darwin.go deleted file mode 100644 index faa9d78e7429..000000000000 --- a/vendor/bazil.org/fuse/options_darwin.go +++ /dev/null @@ -1,35 +0,0 @@ -package fuse - -func localVolume(conf *mountConfig) error { - conf.options["local"] = "" - return nil -} - -func volumeName(name string) MountOption { - return func(conf *mountConfig) error { - conf.options["volname"] = name - return nil - } -} - -func daemonTimeout(name string) MountOption { - return func(conf *mountConfig) error { - conf.options["daemon_timeout"] = name - return nil - } -} - -func noAppleXattr(conf *mountConfig) error { - conf.options["noapplexattr"] = "" - return nil -} - -func noAppleDouble(conf *mountConfig) error { - conf.options["noappledouble"] = "" - return nil -} - -func exclCreate(conf *mountConfig) error { - conf.options["excl_create"] = "" - return nil -} diff --git a/vendor/bazil.org/fuse/options_freebsd.go b/vendor/bazil.org/fuse/options_freebsd.go deleted file mode 100644 index 7c164b13687d..000000000000 --- a/vendor/bazil.org/fuse/options_freebsd.go +++ /dev/null @@ -1,28 +0,0 @@ -package fuse - -func localVolume(conf *mountConfig) error { - return nil -} - -func volumeName(name string) MountOption { - return dummyOption -} - -func daemonTimeout(name string) MountOption { - return func(conf *mountConfig) error { - conf.options["timeout"] = name - return nil - } -} - -func noAppleXattr(conf *mountConfig) error { - return nil -} - -func noAppleDouble(conf *mountConfig) error { - return nil -} - -func exclCreate(conf *mountConfig) error { - return nil -} diff --git a/vendor/bazil.org/fuse/options_linux.go b/vendor/bazil.org/fuse/options_linux.go deleted file mode 100644 index 13f0896d5844..000000000000 --- a/vendor/bazil.org/fuse/options_linux.go +++ /dev/null @@ -1,25 +0,0 @@ -package fuse - -func localVolume(conf *mountConfig) error { - return nil -} - -func volumeName(name string) MountOption { - return dummyOption -} - -func daemonTimeout(name string) MountOption { - return dummyOption -} - -func noAppleXattr(conf *mountConfig) error { - return nil -} - -func noAppleDouble(conf *mountConfig) error { - return nil -} - -func exclCreate(conf *mountConfig) error { - return nil -} diff --git a/vendor/bazil.org/fuse/protocol.go b/vendor/bazil.org/fuse/protocol.go deleted file mode 100644 index a77bbf72f1ad..000000000000 --- a/vendor/bazil.org/fuse/protocol.go +++ /dev/null @@ -1,75 +0,0 @@ -package fuse - -import ( - "fmt" -) - -// Protocol is a FUSE protocol version number. -type Protocol struct { - Major uint32 - Minor uint32 -} - -func (p Protocol) String() string { - return fmt.Sprintf("%d.%d", p.Major, p.Minor) -} - -// LT returns whether a is less than b. -func (a Protocol) LT(b Protocol) bool { - return a.Major < b.Major || - (a.Major == b.Major && a.Minor < b.Minor) -} - -// GE returns whether a is greater than or equal to b. -func (a Protocol) GE(b Protocol) bool { - return a.Major > b.Major || - (a.Major == b.Major && a.Minor >= b.Minor) -} - -func (a Protocol) is79() bool { - return a.GE(Protocol{7, 9}) -} - -// HasAttrBlockSize returns whether Attr.BlockSize is respected by the -// kernel. -func (a Protocol) HasAttrBlockSize() bool { - return a.is79() -} - -// HasReadWriteFlags returns whether ReadRequest/WriteRequest -// fields Flags and FileFlags are valid. -func (a Protocol) HasReadWriteFlags() bool { - return a.is79() -} - -// HasGetattrFlags returns whether GetattrRequest field Flags is -// valid. -func (a Protocol) HasGetattrFlags() bool { - return a.is79() -} - -func (a Protocol) is710() bool { - return a.GE(Protocol{7, 10}) -} - -// HasOpenNonSeekable returns whether OpenResponse field Flags flag -// OpenNonSeekable is supported. -func (a Protocol) HasOpenNonSeekable() bool { - return a.is710() -} - -func (a Protocol) is712() bool { - return a.GE(Protocol{7, 12}) -} - -// HasUmask returns whether CreateRequest/MkdirRequest/MknodRequest -// field Umask is valid. -func (a Protocol) HasUmask() bool { - return a.is712() -} - -// HasInvalidate returns whether InvalidateNode/InvalidateEntry are -// supported. -func (a Protocol) HasInvalidate() bool { - return a.is712() -} diff --git a/vendor/bazil.org/fuse/unmount.go b/vendor/bazil.org/fuse/unmount.go deleted file mode 100644 index ffe3f155c484..000000000000 --- a/vendor/bazil.org/fuse/unmount.go +++ /dev/null @@ -1,6 +0,0 @@ -package fuse - -// Unmount tries to unmount the filesystem mounted at dir. -func Unmount(dir string) error { - return unmount(dir) -} diff --git a/vendor/bazil.org/fuse/unmount_linux.go b/vendor/bazil.org/fuse/unmount_linux.go deleted file mode 100644 index 088f0cfeeec4..000000000000 --- a/vendor/bazil.org/fuse/unmount_linux.go +++ /dev/null @@ -1,21 +0,0 @@ -package fuse - -import ( - "bytes" - "errors" - "os/exec" -) - -func unmount(dir string) error { - cmd := exec.Command("fusermount", "-u", dir) - output, err := cmd.CombinedOutput() - if err != nil { - if len(output) > 0 { - output = bytes.TrimRight(output, "\n") - msg := err.Error() + ": " + string(output) - err = errors.New(msg) - } - return err - } - return nil -} diff --git a/vendor/bazil.org/fuse/unmount_std.go b/vendor/bazil.org/fuse/unmount_std.go deleted file mode 100644 index d6efe276f6cb..000000000000 --- a/vendor/bazil.org/fuse/unmount_std.go +++ /dev/null @@ -1,17 +0,0 @@ -// +build !linux - -package fuse - -import ( - "os" - "syscall" -) - -func unmount(dir string) error { - err := syscall.Unmount(dir, 0) - if err != nil { - err = &os.PathError{Op: "unmount", Path: dir, Err: err} - return err - } - return nil -} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go index 0dde81d728c9..d7b866cdf959 100755 --- a/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go @@ -2,6 +2,7 @@ package pipeline import ( "context" + "github.com/mattn/go-ieproxy" "net" "net/http" "os" @@ -204,7 +205,7 @@ func newDefaultHTTPClient() *http.Client { // We want the Transport to have a large connection pool return &http.Client{ Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, + Proxy: ieproxy.GetProxyFunc(), // We use Dial instead of DialContext as DialContext has been reported to cause slower performance. Dial /*Context*/ : (&net.Dialer{ Timeout: 30 * time.Second, @@ -253,3 +254,31 @@ type methodFactoryMarker struct { func (methodFactoryMarker) New(next Policy, po *PolicyOptions) Policy { panic("methodFactoryMarker policy should have been replaced with a method policy") } + +// LogSanitizer can be implemented to clean secrets from lines logged by ForceLog +// By default no implemetation is provided here, because pipeline may be used in many different +// contexts, so the correct implementation is context-dependent +type LogSanitizer interface { + SanitizeLogMessage(raw string) string +} + +var sanitizer LogSanitizer +var enableForceLog bool = true + +// SetLogSanitizer can be called to supply a custom LogSanitizer. +// There is no threadsafety or locking on the underlying variable, +// so call this function just once at startup of your application +// (Don't later try to change the sanitizer on the fly). +func SetLogSanitizer(s LogSanitizer)(){ + sanitizer = s +} + +// SetForceLogEnabled can be used to disable ForceLog +// There is no threadsafety or locking on the underlying variable, +// so call this function just once at startup of your application +// (Don't later try to change the setting on the fly). +func SetForceLogEnabled(enable bool)() { + enableForceLog = enable +} + + diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go new file mode 100644 index 000000000000..e7ce4970b8b3 --- /dev/null +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go @@ -0,0 +1,14 @@ +package pipeline + + +// ForceLog should rarely be used. It forceable logs an entry to the +// Windows Event Log (on Windows) or to the SysLog (on Linux) +func ForceLog(level LogLevel, msg string) { + if !enableForceLog { + return + } + if sanitizer != nil { + msg = sanitizer.SanitizeLogMessage(msg) + } + forceLog(level, msg) +} diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go index d0bb7740769c..819509a1e54a 100755 --- a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go @@ -7,9 +7,9 @@ import ( "log/syslog" ) -// ForceLog should rarely be used. It forceable logs an entry to the +// forceLog should rarely be used. It forceable logs an entry to the // Windows Event Log (on Windows) or to the SysLog (on Linux) -func ForceLog(level LogLevel, msg string) { +func forceLog(level LogLevel, msg string) { if defaultLogger == nil { return // Return fast if we failed to create the logger. } diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go index cb67398995af..5fcf40014aab 100755 --- a/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go @@ -6,9 +6,9 @@ import ( "unsafe" ) -// ForceLog should rarely be used. It forceable logs an entry to the +// forceLog should rarely be used. It forceable logs an entry to the // Windows Event Log (on Windows) or to the SysLog (on Linux) -func ForceLog(level LogLevel, msg string) { +func forceLog(level LogLevel, msg string) { var el eventType switch level { case LogError, LogFatal, LogPanic: @@ -35,7 +35,7 @@ const ( ) var reportEvent = func() func(eventType eventType, eventID int32, msg string) { - advAPI32 := syscall.MustLoadDLL("AdvAPI32.dll") + advAPI32 := syscall.MustLoadDLL("advapi32.dll") // lower case to tie in with Go's sysdll registration registerEventSource := advAPI32.MustFindProc("RegisterEventSourceW") sourceName, _ := os.Executable() diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go index fd008364d633..4aaf066501ef 100755 --- a/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go @@ -9,6 +9,23 @@ type causer interface { Cause() error } +func errorWithPC(msg string, pc uintptr) string { + s := "" + if fn := runtime.FuncForPC(pc); fn != nil { + file, line := fn.FileLine(pc) + s = fmt.Sprintf("-> %v, %v:%v\n", fn.Name(), file, line) + } + s += msg + "\n\n" + return s +} + +func getPC(callersToSkip int) uintptr { + // Get the PC of Initialize method's caller. + pc := [1]uintptr{} + _ = runtime.Callers(callersToSkip, pc[:]) + return pc[0] +} + // ErrorNode can be an embedded field in a private error object. This field // adds Program Counter support and a 'cause' (reference to a preceding error). // When initializing a error type with this embedded field, initialize the @@ -22,12 +39,7 @@ type ErrorNode struct { // When defining a new error type, have its Error method call this one passing // it the string representation of the error. func (e *ErrorNode) Error(msg string) string { - s := "" - if fn := runtime.FuncForPC(e.pc); fn != nil { - file, line := fn.FileLine(e.pc) - s = fmt.Sprintf("-> %v, %v:%v\n", fn.Name(), file, line) - } - s += msg + "\n\n" + s := errorWithPC(msg, e.pc) if e.cause != nil { s += e.cause.Error() + "\n" } @@ -83,10 +95,8 @@ func (e ErrorNode) Timeout() bool { // value of 3 is very common; but, depending on your code nesting, you may need // a different value. func (ErrorNode) Initialize(cause error, callersToSkip int) ErrorNode { - // Get the PC of Initialize method's caller. - pc := [1]uintptr{} - _ = runtime.Callers(callersToSkip, pc[:]) - return ErrorNode{pc: pc[0], cause: cause} + pc := getPC(callersToSkip) + return ErrorNode{pc: pc, cause: cause} } // Cause walks all the preceding errors and return the originating error. @@ -101,12 +111,53 @@ func Cause(err error) error { return err } +// ErrorNodeNoCause can be an embedded field in a private error object. This field +// adds Program Counter support. +// When initializing a error type with this embedded field, initialize the +// ErrorNodeNoCause field by calling ErrorNodeNoCause{}.Initialize(). +type ErrorNodeNoCause struct { + pc uintptr // Represents a Program Counter that you can get symbols for. +} + +// Error returns a string with the PC's symbols or "" if the PC is invalid. +// When defining a new error type, have its Error method call this one passing +// it the string representation of the error. +func (e *ErrorNodeNoCause) Error(msg string) string { + return errorWithPC(msg, e.pc) +} + +// Temporary returns true if the error occurred due to a temporary condition. +func (e ErrorNodeNoCause) Temporary() bool { + return false +} + +// Timeout returns true if the error occurred due to time expiring. +func (e ErrorNodeNoCause) Timeout() bool { + return false +} + +// Initialize is used to initialize an embedded ErrorNode field. +// It captures the caller's program counter. +// To initialize the field, use "ErrorNodeNoCause{}.Initialize(3)". A callersToSkip +// value of 3 is very common; but, depending on your code nesting, you may need +// a different value. +func (ErrorNodeNoCause) Initialize(callersToSkip int) ErrorNodeNoCause { + pc := getPC(callersToSkip) + return ErrorNodeNoCause{pc: pc} +} + // NewError creates a simple string error (like Error.New). But, this -// error also captures the caller's Program Counter and the preceding error. +// error also captures the caller's Program Counter and the preceding error (if provided). func NewError(cause error, msg string) error { - return &pcError{ - ErrorNode: ErrorNode{}.Initialize(cause, 3), - msg: msg, + if cause != nil { + return &pcError{ + ErrorNode: ErrorNode{}.Initialize(cause, 3), + msg: msg, + } + } + return &pcErrorNoCause{ + ErrorNodeNoCause: ErrorNodeNoCause{}.Initialize(3), + msg: msg, } } @@ -119,3 +170,12 @@ type pcError struct { // Error satisfies the error interface. It shows the error with Program Counter // symbols and calls Error on the preceding error so you can see the full error chain. func (e *pcError) Error() string { return e.ErrorNode.Error(e.msg) } + +// pcErrorNoCause is a simple string error (like error.New) with an ErrorNode (PC). +type pcErrorNoCause struct { + ErrorNodeNoCause + msg string +} + +// Error satisfies the error interface. It shows the error with Program Counter symbols. +func (e *pcErrorNoCause) Error() string { return e.ErrorNodeNoCause.Error(e.msg) } diff --git a/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go b/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go index c4bb62d810b2..899f996b542d 100644 --- a/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go +++ b/vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go @@ -5,5 +5,5 @@ const ( UserAgent = "azure-pipeline-go/" + Version // Version is the semantic version (see http://semver.org) of the pipeline package. - Version = "0.1.0" + Version = "0.2.1" ) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go deleted file mode 100644 index 8a8926bd33cc..000000000000 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/version.go +++ /dev/null @@ -1,3 +0,0 @@ -package azblob - -const serviceLibVersion = "0.1" diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go b/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go deleted file mode 100644 index 42724efa52c3..000000000000 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_retry_reader.go +++ /dev/null @@ -1,122 +0,0 @@ -package azblob - -import ( - "context" - "io" - "net" - "net/http" -) - -const CountToEnd = 0 - -// HTTPGetter is a function type that refers to a method that performs an HTTP GET operation. -type HTTPGetter func(ctx context.Context, i HTTPGetterInfo) (*http.Response, error) - -// HTTPGetterInfo is passed to an HTTPGetter function passing it parameters -// that should be used to make an HTTP GET request. -type HTTPGetterInfo struct { - // Offset specifies the start offset that should be used when - // creating the HTTP GET request's Range header - Offset int64 - - // Count specifies the count of bytes that should be used to calculate - // the end offset when creating the HTTP GET request's Range header - Count int64 - - // ETag specifies the resource's etag that should be used when creating - // the HTTP GET request's If-Match header - ETag ETag -} - -// RetryReaderOptions contains properties which can help to decide when to do retry. -type RetryReaderOptions struct { - // MaxRetryRequests specifies the maximum number of HTTP GET requests that will be made - // while reading from a RetryReader. A value of zero means that no additional HTTP - // GET requests will be made. - MaxRetryRequests int - doInjectError bool - doInjectErrorRound int -} - -// retryReader implements io.ReaderCloser methods. -// retryReader tries to read from response, and if there is retriable network error -// returned during reading, it will retry according to retry reader option through executing -// user defined action with provided data to get a new response, and continue the overall reading process -// through reading from the new response. -type retryReader struct { - ctx context.Context - response *http.Response - info HTTPGetterInfo - countWasBounded bool - o RetryReaderOptions - getter HTTPGetter -} - -// NewRetryReader creates a retry reader. -func NewRetryReader(ctx context.Context, initialResponse *http.Response, - info HTTPGetterInfo, o RetryReaderOptions, getter HTTPGetter) io.ReadCloser { - if getter == nil { - panic("getter must not be nil") - } - if info.Count < 0 { - panic("info.Count must be >= 0") - } - if o.MaxRetryRequests < 0 { - panic("o.MaxRetryRequests must be >= 0") - } - return &retryReader{ctx: ctx, getter: getter, info: info, countWasBounded: info.Count != CountToEnd, response: initialResponse, o: o} -} - -func (s *retryReader) Read(p []byte) (n int, err error) { - for try := 0; ; try++ { - //fmt.Println(try) // Comment out for debugging. - if s.countWasBounded && s.info.Count == CountToEnd { - // User specified an original count and the remaining bytes are 0, return 0, EOF - return 0, io.EOF - } - - if s.response == nil { // We don't have a response stream to read from, try to get one. - response, err := s.getter(s.ctx, s.info) - if err != nil { - return 0, err - } - // Successful GET; this is the network stream we'll read from. - s.response = response - } - n, err := s.response.Body.Read(p) // Read from the stream - - // Injection mechanism for testing. - if s.o.doInjectError && try == s.o.doInjectErrorRound { - err = &net.DNSError{IsTemporary: true} - } - - // We successfully read data or end EOF. - if err == nil || err == io.EOF { - s.info.Offset += int64(n) // Increments the start offset in case we need to make a new HTTP request in the future - if s.info.Count != CountToEnd { - s.info.Count -= int64(n) // Decrement the count in case we need to make a new HTTP request in the future - } - return n, err // Return the return to the caller - } - s.Close() // Error, close stream - s.response = nil // Our stream is no longer good - - // Check the retry count and error code, and decide whether to retry. - if try >= s.o.MaxRetryRequests { - return n, err // All retries exhausted - } - - if netErr, ok := err.(net.Error); ok && (netErr.Timeout() || netErr.Temporary()) { - continue - // Loop around and try to get and read from new stream. - } - return n, err // Not retryable, just return - } -} - -func (s *retryReader) Close() error { - if s.response != nil && s.response.Body != nil { - return s.response.Body.Close() - } - return nil -} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go similarity index 83% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go index c7432e41c323..25fe68422157 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/access_conditions.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/access_conditions.go @@ -4,8 +4,8 @@ import ( "time" ) -// HTTPAccessConditions identifies standard HTTP access conditions which you optionally set. -type HTTPAccessConditions struct { +// ModifiedAccessConditions identifies standard HTTP access conditions which you optionally set. +type ModifiedAccessConditions struct { IfModifiedSince time.Time IfUnmodifiedSince time.Time IfMatch ETag @@ -13,7 +13,7 @@ type HTTPAccessConditions struct { } // pointers is for internal infrastructure. It returns the fields as pointers. -func (ac HTTPAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *ETag, inme *ETag) { +func (ac ModifiedAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime *ETag, inme *ETag) { if !ac.IfModifiedSince.IsZero() { ims = &ac.IfModifiedSince } @@ -31,16 +31,14 @@ func (ac HTTPAccessConditions) pointers() (ims *time.Time, ius *time.Time, ime * // ContainerAccessConditions identifies container-specific access conditions which you optionally set. type ContainerAccessConditions struct { - HTTPAccessConditions + ModifiedAccessConditions LeaseAccessConditions } // BlobAccessConditions identifies blob-specific access conditions which you optionally set. type BlobAccessConditions struct { - HTTPAccessConditions + ModifiedAccessConditions LeaseAccessConditions - AppendBlobAccessConditions - PageBlobAccessConditions } // LeaseAccessConditions identifies lease access conditions for a container or blob which you optionally set. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go similarity index 75% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go index 385b0458b3d7..9e18a79436b0 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/atomicmorph.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/atomicmorph.go @@ -5,13 +5,12 @@ import "sync/atomic" // AtomicMorpherInt32 identifies a method passed to and invoked by the AtomicMorphInt32 function. // The AtomicMorpher callback is passed a startValue and based on this value it returns // what the new value should be and the result that AtomicMorph should return to its caller. -type AtomicMorpherInt32 func(startVal int32) (val int32, morphResult interface{}) +type atomicMorpherInt32 func(startVal int32) (val int32, morphResult interface{}) + +const targetAndMorpherMustNotBeNil = "target and morpher must not be nil" // AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. -func AtomicMorphInt32(target *int32, morpher AtomicMorpherInt32) interface{} { - if target == nil || morpher == nil { - panic("target and morpher mut not be nil") - } +func atomicMorphInt32(target *int32, morpher atomicMorpherInt32) interface{} { for { currentVal := atomic.LoadInt32(target) desiredVal, morphResult := morpher(currentVal) @@ -24,13 +23,10 @@ func AtomicMorphInt32(target *int32, morpher AtomicMorpherInt32) interface{} { // AtomicMorpherUint32 identifies a method passed to and invoked by the AtomicMorph function. // The AtomicMorpher callback is passed a startValue and based on this value it returns // what the new value should be and the result that AtomicMorph should return to its caller. -type AtomicMorpherUint32 func(startVal uint32) (val uint32, morphResult interface{}) +type atomicMorpherUint32 func(startVal uint32) (val uint32, morphResult interface{}) // AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. -func AtomicMorphUint32(target *uint32, morpher AtomicMorpherUint32) interface{} { - if target == nil || morpher == nil { - panic("target and morpher mut not be nil") - } +func atomicMorphUint32(target *uint32, morpher atomicMorpherUint32) interface{} { for { currentVal := atomic.LoadUint32(target) desiredVal, morphResult := morpher(currentVal) @@ -43,13 +39,10 @@ func AtomicMorphUint32(target *uint32, morpher AtomicMorpherUint32) interface{} // AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function. // The AtomicMorpher callback is passed a startValue and based on this value it returns // what the new value should be and the result that AtomicMorph should return to its caller. -type AtomicMorpherInt64 func(startVal int64) (val int64, morphResult interface{}) +type atomicMorpherInt64 func(startVal int64) (val int64, morphResult interface{}) // AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. -func AtomicMorphInt64(target *int64, morpher AtomicMorpherInt64) interface{} { - if target == nil || morpher == nil { - panic("target and morpher mut not be nil") - } +func atomicMorphInt64(target *int64, morpher atomicMorpherInt64) interface{} { for { currentVal := atomic.LoadInt64(target) desiredVal, morphResult := morpher(currentVal) @@ -62,13 +55,10 @@ func AtomicMorphInt64(target *int64, morpher AtomicMorpherInt64) interface{} { // AtomicMorpherUint64 identifies a method passed to and invoked by the AtomicMorphUint64 function. // The AtomicMorpher callback is passed a startValue and based on this value it returns // what the new value should be and the result that AtomicMorph should return to its caller. -type AtomicMorpherUint64 func(startVal uint64) (val uint64, morphResult interface{}) +type atomicMorpherUint64 func(startVal uint64) (val uint64, morphResult interface{}) // AtomicMorph atomically morphs target in to new value (and result) as indicated bythe AtomicMorpher callback function. -func AtomicMorphUint64(target *uint64, morpher AtomicMorpherUint64) interface{} { - if target == nil || morpher == nil { - panic("target and morpher mut not be nil") - } +func atomicMorphUint64(target *uint64, morpher atomicMorpherUint64) interface{} { for { currentVal := atomic.LoadUint64(target) desiredVal, morphResult := morpher(currentVal) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/blob.json b/vendor/github.com/Azure/azure-storage-blob-go/azblob/blob.json new file mode 100644 index 000000000000..09addf083972 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/blob.json @@ -0,0 +1,8009 @@ +{ + "swagger": "2.0", + "info": { + "title": "Azure Blob Storage", + "version": "2018-11-09", + "x-ms-code-generation-settings": { + "header": "MIT", + "strictSpecAdherence": false + } + }, + "x-ms-parameterized-host": { + "hostTemplate": "{url}", + "useSchemePrefix": false, + "positionInOperation": "first", + "parameters": [ + { + "$ref": "#/parameters/Url" + } + ] + }, + "securityDefinitions": { + "blob_shared_key": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "schemes": [ + "https" + ], + "consumes": [ + "application/xml" + ], + "produces": [ + "application/xml" + ], + "paths": {}, + "x-ms-paths": { + "/?restype=service&comp=properties": { + "put": { + "tags": [ + "service" + ], + "operationId": "Service_SetProperties", + "description": "Sets properties for a storage account's Blob service endpoint, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules", + "parameters": [ + { + "$ref": "#/parameters/StorageServiceProperties" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "Success (Accepted)", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "get": { + "tags": [ + "service" + ], + "operationId": "Service_GetProperties", + "description": "gets the properties of a storage account's Blob service, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + } + }, + "schema": { + "$ref": "#/definitions/StorageServiceProperties" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "service" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/?restype=service&comp=stats": { + "get": { + "tags": [ + "service" + ], + "operationId": "Service_GetStatistics", + "description": "Retrieves statistics related to replication for the Blob service. It is only available on the secondary location endpoint when read-access geo-redundant replication is enabled for the storage account.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/StorageServiceStats" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "service" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "stats" + ] + } + ] + }, + "/?comp=list": { + "get": { + "tags": [ + "service" + ], + "operationId": "Service_ListContainersSegment", + "description": "The List Containers Segment operation returns a list of the containers under the specified account", + "parameters": [ + { + "$ref": "#/parameters/Prefix" + }, + { + "$ref": "#/parameters/Marker" + }, + { + "$ref": "#/parameters/MaxResults" + }, + { + "$ref": "#/parameters/ListContainersInclude" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + } + }, + "schema": { + "$ref": "#/definitions/ListContainersSegmentResponse" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + }, + "x-ms-pageable": { + "nextLinkName": "NextMarker" + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "list" + ] + } + ] + }, + "/?restype=service&comp=userdelegationkey": { + "post": { + "tags": [ + "service" + ], + "operationId": "Service_GetUserDelegationKey", + "description": "Retrieves a user delgation key for the Blob service. This is only a valid operation when using bearer token authentication.", + "parameters": [ + { + "$ref": "#/parameters/KeyInfo" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/UserDelegationKey" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "service" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "userdelegationkey" + ] + } + ] + }, + "/?restype=account&comp=properties": { + "get": { + "tags": [ + "service" + ], + "operationId": "Service_GetAccountInfo", + "description": "Returns the sku name and account kind ", + "parameters": [ + { + "$ref": "#/parameters/ApiVersionParameter" + } + ], + "responses": { + "200": { + "description": "Success (OK)", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-sku-name": { + "x-ms-client-name": "SkuName", + "type": "string", + "enum": [ + "Standard_LRS", + "Standard_GRS", + "Standard_RAGRS", + "Standard_ZRS", + "Premium_LRS" + ], + "x-ms-enum": { + "name": "SkuName", + "modelAsString": false + }, + "description": "Identifies the sku name of the account" + }, + "x-ms-account-kind": { + "x-ms-client-name": "AccountKind", + "type": "string", + "enum": [ + "Storage", + "BlobStorage", + "StorageV2" + ], + "x-ms-enum": { + "name": "AccountKind", + "modelAsString": false + }, + "description": "Identifies the account kind" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "account" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}?restype=container": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_Create", + "description": "creates a new container under the specified account. If the container with the same name already exists, the operation fails", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/BlobPublicAccess" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "Success, Container created.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "get": { + "tags": [ + "container" + ], + "operationId": "Container_GetProperties", + "description": "returns all user-defined metadata and system properties for the specified container. The data returned does not include the container's list of blobs", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "x-ms-meta": { + "type": "string", + "x-ms-client-name": "Metadata", + "x-ms-header-collection-prefix": "x-ms-meta-" + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-duration": { + "x-ms-client-name": "LeaseDuration", + "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.", + "type": "string", + "enum": [ + "infinite", + "fixed" + ], + "x-ms-enum": { + "name": "LeaseDurationType", + "modelAsString": false + } + }, + "x-ms-lease-state": { + "x-ms-client-name": "LeaseState", + "description": "Lease state of the blob.", + "type": "string", + "enum": [ + "available", + "leased", + "expired", + "breaking", + "broken" + ], + "x-ms-enum": { + "name": "LeaseStateType", + "modelAsString": false + } + }, + "x-ms-lease-status": { + "x-ms-client-name": "LeaseStatus", + "description": "The current lease status of the blob.", + "type": "string", + "enum": [ + "locked", + "unlocked" + ], + "x-ms-enum": { + "name": "LeaseStatusType", + "modelAsString": false + } + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-blob-public-access": { + "x-ms-client-name": "BlobPublicAccess", + "description": "Indicated whether data in the container may be accessed publicly and the level of access", + "type": "string", + "enum": [ + "container", + "blob" + ], + "x-ms-enum": { + "name": "PublicAccessType", + "modelAsString": true + } + }, + "x-ms-has-immutability-policy": { + "x-ms-client-name": "HasImmutabilityPolicy", + "description": "Indicates whether the container has an immutability policy set on it.", + "type": "boolean" + }, + "x-ms-has-legal-hold": { + "x-ms-client-name": "HasLegalHold", + "description": "Indicates whether the container has a legal hold.", + "type": "boolean" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "delete": { + "tags": [ + "container" + ], + "operationId": "Container_Delete", + "description": "operation marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "Accepted", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + } + ] + }, + "/{containerName}?restype=container&comp=metadata": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_SetMetadata", + "description": "operation sets one or more user-defined name-value pairs for the specified container.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "metadata" + ] + } + ] + }, + "/{containerName}?restype=container&comp=acl": { + "get": { + "tags": [ + "container" + ], + "operationId": "Container_GetAccessPolicy", + "description": "gets the permissions for the specified container. The permissions indicate whether container data may be accessed publicly.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "x-ms-blob-public-access": { + "x-ms-client-name": "BlobPublicAccess", + "description": "Indicated whether data in the container may be accessed publicly and the level of access", + "type": "string", + "enum": [ + "container", + "blob" + ], + "x-ms-enum": { + "name": "PublicAccessType", + "modelAsString": true + } + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/SignedIdentifiers" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "put": { + "tags": [ + "container" + ], + "operationId": "Container_SetAccessPolicy", + "description": "sets the permissions for the specified container. The permissions indicate whether blobs in a container may be accessed publicly.", + "parameters": [ + { + "$ref": "#/parameters/ContainerAcl" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobPublicAccess" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "acl" + ] + } + ] + }, + "/{containerName}?comp=lease&restype=container&acquire": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_AcquireLease", + "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseDuration" + }, + { + "$ref": "#/parameters/ProposedLeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The Acquire operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a container's lease" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "acquire" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}?comp=lease&restype=container&release": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_ReleaseLease", + "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Release operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "release" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}?comp=lease&restype=container&renew": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_RenewLease", + "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Renew operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a container's lease" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "renew" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}?comp=lease&restype=container&break": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_BreakLease", + "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseBreakPeriod" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The Break operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-time": { + "x-ms-client-name": "LeaseTime", + "type": "integer", + "description": "Approximate time remaining in the lease period, in seconds." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "break" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}?comp=lease&restype=container&change": { + "put": { + "tags": [ + "container" + ], + "operationId": "Container_ChangeLease", + "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/ProposedLeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Change operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a container's lease" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "change" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}?restype=container&comp=list&flat": { + "get": { + "tags": [ + "containers" + ], + "operationId": "Container_ListBlobFlatSegment", + "description": "[Update] The List Blobs operation returns a list of the blobs under the specified container", + "parameters": [ + { + "$ref": "#/parameters/Prefix" + }, + { + "$ref": "#/parameters/Marker" + }, + { + "$ref": "#/parameters/MaxResults" + }, + { + "$ref": "#/parameters/ListBlobsInclude" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The media type of the body of the response. For List Blobs this is 'application/xml'" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/ListBlobsFlatSegmentResponse" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + }, + "x-ms-pageable": { + "nextLinkName": "NextMarker" + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "list" + ] + } + ] + }, + "/{containerName}?restype=container&comp=list&hierarchy": { + "get": { + "tags": [ + "containers" + ], + "operationId": "Container_ListBlobHierarchySegment", + "description": "[Update] The List Blobs operation returns a list of the blobs under the specified container", + "parameters": [ + { + "$ref": "#/parameters/Prefix" + }, + { + "$ref": "#/parameters/Delimiter" + }, + { + "$ref": "#/parameters/Marker" + }, + { + "$ref": "#/parameters/MaxResults" + }, + { + "$ref": "#/parameters/ListBlobsInclude" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Success.", + "headers": { + "Content-Type": { + "type": "string", + "description": "The media type of the body of the response. For List Blobs this is 'application/xml'" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/ListBlobsHierarchySegmentResponse" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + }, + "x-ms-pageable": { + "nextLinkName": "NextMarker" + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "container" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "list" + ] + } + ] + }, + "/{containerName}?restype=account&comp=properties": { + "get": { + "tags": [ + "container" + ], + "operationId": "Container_GetAccountInfo", + "description": "Returns the sku name and account kind ", + "parameters": [ + { + "$ref": "#/parameters/ApiVersionParameter" + } + ], + "responses": { + "200": { + "description": "Success (OK)", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-sku-name": { + "x-ms-client-name": "SkuName", + "type": "string", + "enum": [ + "Standard_LRS", + "Standard_GRS", + "Standard_RAGRS", + "Standard_ZRS", + "Premium_LRS" + ], + "x-ms-enum": { + "name": "SkuName", + "modelAsString": false + }, + "description": "Identifies the sku name of the account" + }, + "x-ms-account-kind": { + "x-ms-client-name": "AccountKind", + "type": "string", + "enum": [ + "Storage", + "BlobStorage", + "StorageV2" + ], + "x-ms-enum": { + "name": "AccountKind", + "modelAsString": false + }, + "description": "Identifies the account kind" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "account" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}/{blob}": { + "get": { + "tags": [ + "blob" + ], + "operationId": "Blob_Download", + "description": "The Download operation reads or downloads a blob from the system, including its metadata and properties. You can also call Download to read a snapshot.", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Range" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/GetRangeContentMD5" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Returns the content of the entire blob.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-meta": { + "type": "string", + "x-ms-client-name": "Metadata", + "x-ms-header-collection-prefix": "x-ms-meta-" + }, + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The number of bytes present in the response body." + }, + "Content-Type": { + "type": "string", + "description": "The media type of the body of the response. For Download Blob this is 'application/octet-stream'" + }, + "Content-Range": { + "type": "string", + "description": "Indicates the range of bytes returned in the event that the client requested a subset of the blob by setting the 'Range' request header." + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "Content-Encoding": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Encoding request header" + }, + "Cache-Control": { + "type": "string", + "description": "This header is returned if it was previously specified for the blob." + }, + "Content-Disposition": { + "type": "string", + "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified." + }, + "Content-Language": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Language request header." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-blob-type": { + "x-ms-client-name": "BlobType", + "description": "The blob's type.", + "type": "string", + "enum": [ + "BlockBlob", + "PageBlob", + "AppendBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + }, + "x-ms-copy-completion-time": { + "x-ms-client-name": "CopyCompletionTime", + "type": "string", + "format": "date-time-rfc1123", + "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status-description": { + "x-ms-client-name": "CopyStatusDescription", + "type": "string", + "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy." + }, + "x-ms-copy-progress": { + "x-ms-client-name": "CopyProgress", + "type": "string", + "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-source": { + "x-ms-client-name": "CopySource", + "type": "string", + "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + }, + "x-ms-lease-duration": { + "x-ms-client-name": "LeaseDuration", + "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.", + "type": "string", + "enum": [ + "infinite", + "fixed" + ], + "x-ms-enum": { + "name": "LeaseDurationType", + "modelAsString": false + } + }, + "x-ms-lease-state": { + "x-ms-client-name": "LeaseState", + "description": "Lease state of the blob.", + "type": "string", + "enum": [ + "available", + "leased", + "expired", + "breaking", + "broken" + ], + "x-ms-enum": { + "name": "LeaseStateType", + "modelAsString": false + } + }, + "x-ms-lease-status": { + "x-ms-client-name": "LeaseStatus", + "description": "The current lease status of the blob.", + "type": "string", + "enum": [ + "locked", + "unlocked" + ], + "x-ms-enum": { + "name": "LeaseStatusType", + "modelAsString": false + } + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Accept-Ranges": { + "type": "string", + "description": "Indicates that the service supports requests for partial blob content." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-blob-committed-block-count": { + "x-ms-client-name": "BlobCommittedBlockCount", + "type": "integer", + "description": "The number of committed blocks present in the blob. This header is returned only for append blobs." + }, + "x-ms-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)." + }, + "x-ms-blob-content-md5": { + "x-ms-client-name": "BlobContentMD5", + "type": "string", + "format": "byte", + "description": "If the blob has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole blob's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range" + } + }, + "schema": { + "type": "object", + "format": "file" + } + }, + "206": { + "description": "Returns the content of a specified range of the blob.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-meta": { + "type": "string", + "x-ms-client-name": "Metadata", + "x-ms-header-collection-prefix": "x-ms-meta-" + }, + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The number of bytes present in the response body." + }, + "Content-Type": { + "type": "string", + "description": "The media type of the body of the response. For Download Blob this is 'application/octet-stream'" + }, + "Content-Range": { + "type": "string", + "description": "Indicates the range of bytes returned in the event that the client requested a subset of the blob by setting the 'Range' request header." + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "Content-Encoding": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Encoding request header" + }, + "Cache-Control": { + "type": "string", + "description": "This header is returned if it was previously specified for the blob." + }, + "Content-Disposition": { + "type": "string", + "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified." + }, + "Content-Language": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Language request header." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-blob-type": { + "x-ms-client-name": "BlobType", + "description": "The blob's type.", + "type": "string", + "enum": [ + "BlockBlob", + "PageBlob", + "AppendBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + }, + "x-ms-copy-completion-time": { + "x-ms-client-name": "CopyCompletionTime", + "type": "string", + "format": "date-time-rfc1123", + "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status-description": { + "x-ms-client-name": "CopyStatusDescription", + "type": "string", + "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy." + }, + "x-ms-copy-progress": { + "x-ms-client-name": "CopyProgress", + "type": "string", + "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-source": { + "x-ms-client-name": "CopySource", + "type": "string", + "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + }, + "x-ms-lease-duration": { + "x-ms-client-name": "LeaseDuration", + "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.", + "type": "string", + "enum": [ + "infinite", + "fixed" + ], + "x-ms-enum": { + "name": "LeaseDurationType", + "modelAsString": false + } + }, + "x-ms-lease-state": { + "x-ms-client-name": "LeaseState", + "description": "Lease state of the blob.", + "type": "string", + "enum": [ + "available", + "leased", + "expired", + "breaking", + "broken" + ], + "x-ms-enum": { + "name": "LeaseStateType", + "modelAsString": false + } + }, + "x-ms-lease-status": { + "x-ms-client-name": "LeaseStatus", + "description": "The current lease status of the blob.", + "type": "string", + "enum": [ + "locked", + "unlocked" + ], + "x-ms-enum": { + "name": "LeaseStatusType", + "modelAsString": false + } + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Accept-Ranges": { + "type": "string", + "description": "Indicates that the service supports requests for partial blob content." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-blob-committed-block-count": { + "x-ms-client-name": "BlobCommittedBlockCount", + "type": "integer", + "description": "The number of committed blocks present in the blob. This header is returned only for append blobs." + }, + "x-ms-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)." + }, + "x-ms-blob-content-md5": { + "x-ms-client-name": "BlobContentMD5", + "type": "string", + "format": "byte", + "description": "If the blob has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole blob's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range" + } + }, + "schema": { + "type": "object", + "format": "file" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "head": { + "tags": [ + "blob" + ], + "operationId": "Blob_GetProperties", + "description": "The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system properties for the blob. It does not return the content of the blob.", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Returns the properties of the blob.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-creation-time": { + "x-ms-client-name": "CreationTime", + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was created." + }, + "x-ms-meta": { + "type": "string", + "x-ms-client-name": "Metadata", + "x-ms-header-collection-prefix": "x-ms-meta-" + }, + "x-ms-blob-type": { + "x-ms-client-name": "BlobType", + "description": "The blob's type.", + "type": "string", + "enum": [ + "BlockBlob", + "PageBlob", + "AppendBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + }, + "x-ms-copy-completion-time": { + "x-ms-client-name": "CopyCompletionTime", + "type": "string", + "format": "date-time-rfc1123", + "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status-description": { + "x-ms-client-name": "CopyStatusDescription", + "type": "string", + "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy." + }, + "x-ms-copy-progress": { + "x-ms-client-name": "CopyProgress", + "type": "string", + "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List" + }, + "x-ms-copy-source": { + "x-ms-client-name": "CopySource", + "type": "string", + "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + }, + "x-ms-incremental-copy": { + "x-ms-client-name": "IsIncrementalCopy", + "type": "boolean", + "description": "Included if the blob is incremental copy blob." + }, + "x-ms-copy-destination-snapshot": { + "x-ms-client-name": "DestinationSnapshot", + "type": "string", + "description": "Included if the blob is incremental copy blob or incremental copy snapshot, if x-ms-copy-status is success. Snapshot time of the last successful incremental copy snapshot for this blob." + }, + "x-ms-lease-duration": { + "x-ms-client-name": "LeaseDuration", + "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.", + "type": "string", + "enum": [ + "infinite", + "fixed" + ], + "x-ms-enum": { + "name": "LeaseDurationType", + "modelAsString": false + } + }, + "x-ms-lease-state": { + "x-ms-client-name": "LeaseState", + "description": "Lease state of the blob.", + "type": "string", + "enum": [ + "available", + "leased", + "expired", + "breaking", + "broken" + ], + "x-ms-enum": { + "name": "LeaseStateType", + "modelAsString": false + } + }, + "x-ms-lease-status": { + "x-ms-client-name": "LeaseStatus", + "description": "The current lease status of the blob.", + "type": "string", + "enum": [ + "locked", + "unlocked" + ], + "x-ms-enum": { + "name": "LeaseStatusType", + "modelAsString": false + } + }, + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "The number of bytes present in the response body." + }, + "Content-Type": { + "type": "string", + "description": "The content type specified for the blob. The default content type is 'application/octet-stream'" + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "Content-Encoding": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Encoding request header" + }, + "Content-Disposition": { + "type": "string", + "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified." + }, + "Content-Language": { + "type": "string", + "description": "This header returns the value that was specified for the Content-Language request header." + }, + "Cache-Control": { + "type": "string", + "description": "This header is returned if it was previously specified for the blob." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "Accept-Ranges": { + "type": "string", + "description": "Indicates that the service supports requests for partial blob content." + }, + "x-ms-blob-committed-block-count": { + "x-ms-client-name": "BlobCommittedBlockCount", + "type": "integer", + "description": "The number of committed blocks present in the blob. This header is returned only for append blobs." + }, + "x-ms-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)." + }, + "x-ms-access-tier": { + "x-ms-client-name": "AccessTier", + "type": "string", + "description": "The tier of page blob on a premium storage account or tier of block blob on blob storage LRS accounts. For a list of allowed premium page blob tiers, see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/premium-storage#features. For blob storage LRS accounts, valid values are Hot/Cool/Archive." + }, + "x-ms-access-tier-inferred": { + "x-ms-client-name": "AccessTierInferred", + "type": "boolean", + "description": "For page blobs on a premium storage account only. If the access tier is not explicitly set on the blob, the tier is inferred based on its content length and this header will be returned with true value." + }, + "x-ms-archive-status": { + "x-ms-client-name": "ArchiveStatus", + "type": "string", + "description": "For blob storage LRS accounts, valid values are rehydrate-pending-to-hot/rehydrate-pending-to-cool. If the blob is being rehydrated and is not complete then this header is returned indicating that rehydrate is pending and also tells the destination tier." + }, + "x-ms-access-tier-change-time": { + "x-ms-client-name": "AccessTierChangeTime", + "type": "string", + "format": "date-time-rfc1123", + "description": "The time the tier was changed on the object. This is only returned if the tier on the block blob was ever set." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "delete": { + "tags": [ + "blob" + ], + "operationId": "Blob_Delete", + "description": "If the storage account's soft delete feature is disabled then, when a blob is deleted, it is permanently removed from the storage account. If the storage account's soft delete feature is enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible immediately. However, the blob service retains the blob or snapshot for the number of days specified by the DeleteRetentionPolicy section of [Storage service properties] (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is permanently removed from the storage account. Note that you continue to be charged for the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the \"include=deleted\" query parameter to discover which blobs and snapshots have been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code of 404 (ResourceNotFound).", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/DeleteSnapshots" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The delete request was accepted and the blob will be deleted.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + } + }, + "/{containerName}/{blob}?PageBlob": { + "put": { + "tags": [ + "blob" + ], + "operationId": "PageBlob_Create", + "description": "The Create operation creates a new page blob.", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/BlobContentType" + }, + { + "$ref": "#/parameters/BlobContentEncoding" + }, + { + "$ref": "#/parameters/BlobContentLanguage" + }, + { + "$ref": "#/parameters/BlobContentMD5" + }, + { + "$ref": "#/parameters/BlobCacheControl" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobContentDisposition" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/BlobContentLengthRequired" + }, + { + "$ref": "#/parameters/BlobSequenceNumber" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The blob was created.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "x-ms-blob-type", + "x-ms-client-name": "blobType", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Specifies the type of blob to create: block blob, page blob, or append blob.", + "type": "string", + "enum": [ + "PageBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?AppendBlob": { + "put": { + "tags": [ + "blob" + ], + "operationId": "AppendBlob_Create", + "description": "The Create Append Blob operation creates a new append blob.", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/BlobContentType" + }, + { + "$ref": "#/parameters/BlobContentEncoding" + }, + { + "$ref": "#/parameters/BlobContentLanguage" + }, + { + "$ref": "#/parameters/BlobContentMD5" + }, + { + "$ref": "#/parameters/BlobCacheControl" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobContentDisposition" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The blob was created.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "x-ms-blob-type", + "x-ms-client-name": "blobType", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Specifies the type of blob to create: block blob, page blob, or append blob.", + "type": "string", + "enum": [ + "AppendBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?BlockBlob": { + "put": { + "tags": [ + "blob" + ], + "operationId": "BlockBlob_Upload", + "description": "The Upload Block Blob operation updates the content of an existing block blob. Updating an existing block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a partial update of the content of a block blob, use the Put Block List operation.", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/Body" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/BlobContentType" + }, + { + "$ref": "#/parameters/BlobContentEncoding" + }, + { + "$ref": "#/parameters/BlobContentLanguage" + }, + { + "$ref": "#/parameters/BlobContentMD5" + }, + { + "$ref": "#/parameters/BlobCacheControl" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobContentDisposition" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The blob was updated.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "x-ms-blob-type", + "x-ms-client-name": "blobType", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Specifies the type of blob to create: block blob, page blob, or append blob.", + "type": "string", + "enum": [ + "BlockBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?comp=undelete": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_Undelete", + "description": "Undelete a blob that was previously soft deleted", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The blob was undeleted successfully.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "undelete" + ] + } + ] + }, + "/{containerName}/{blob}?comp=properties&SetHTTPHeaders": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_SetHTTPHeaders", + "description": "The Set HTTP Headers operation sets system properties on the blob", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/BlobCacheControl" + }, + { + "$ref": "#/parameters/BlobContentType" + }, + { + "$ref": "#/parameters/BlobContentMD5" + }, + { + "$ref": "#/parameters/BlobContentEncoding" + }, + { + "$ref": "#/parameters/BlobContentLanguage" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/BlobContentDisposition" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The properties were set successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}/{blob}?comp=metadata": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_SetMetadata", + "description": "The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more name-value pairs", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The metadata was set successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "metadata" + ] + } + ] + }, + "/{containerName}/{blob}?comp=lease&acquire": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_AcquireLease", + "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseDuration" + }, + { + "$ref": "#/parameters/ProposedLeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The Acquire operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a blobs's lease" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "acquire" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}/{blob}?comp=lease&release": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_ReleaseLease", + "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Release operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "release" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}/{blob}?comp=lease&renew": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_RenewLease", + "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Renew operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a blobs's lease" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "renew" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}/{blob}?comp=lease&change": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_ChangeLease", + "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdRequired" + }, + { + "$ref": "#/parameters/ProposedLeaseIdRequired" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Change operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-lease-id": { + "x-ms-client-name": "LeaseId", + "type": "string", + "description": "Uniquely identifies a blobs's lease" + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "change" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}/{blob}?comp=lease&break": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_BreakLease", + "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseBreakPeriod" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The Break operation completed successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-lease-time": { + "x-ms-client-name": "LeaseTime", + "type": "integer", + "description": "Approximate time remaining in the lease period, in seconds." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "lease" + ] + }, + { + "name": "x-ms-lease-action", + "x-ms-client-name": "action", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "break" + ], + "x-ms-enum": { + "name": "LeaseAction", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Describes what lease action to take." + } + ] + }, + "/{containerName}/{blob}?comp=snapshot": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_CreateSnapshot", + "description": "The Create Snapshot operation creates a read-only snapshot of a blob", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The snaptshot was taken successfully.", + "headers": { + "x-ms-snapshot": { + "x-ms-client-name": "Snapshot", + "type": "string", + "description": "Uniquely identifies the snapshot and indicates the snapshot version. It may be used in subsequent requests to access the snapshot" + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "snapshot" + ] + } + ] + }, + "/{containerName}/{blob}?comp=copy": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_StartCopyFromURL", + "description": "The Start Copy From URL operation copies a blob or an internet resource to a new blob.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/SourceIfModifiedSince" + }, + { + "$ref": "#/parameters/SourceIfUnmodifiedSince" + }, + { + "$ref": "#/parameters/SourceIfMatch" + }, + { + "$ref": "#/parameters/SourceIfNoneMatch" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/CopySource" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The copy blob has been accepted with the specified copy status.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [] + }, + "/{containerName}/{blob}?comp=copy&sync": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_CopyFromURL", + "description": "The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return a response until the copy is complete.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/SourceIfModifiedSince" + }, + { + "$ref": "#/parameters/SourceIfUnmodifiedSince" + }, + { + "$ref": "#/parameters/SourceIfMatch" + }, + { + "$ref": "#/parameters/SourceIfNoneMatch" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/CopySource" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The copy has completed.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "success" + ], + "x-ms-enum": { + "name": "SyncCopyStatusType", + "modelAsString": false + } + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "x-ms-requires-sync", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "true" + ] + } + ] + }, + "/{containerName}/{blob}?comp=copy©id={CopyId}": { + "put": { + "tags": [ + "blob" + ], + "operationId": "Blob_AbortCopyFromURL", + "description": "The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination blob with zero length and full metadata.", + "parameters": [ + { + "$ref": "#/parameters/CopyId" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "204": { + "description": "The delete request was accepted and the blob will be deleted.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "copy" + ] + }, + { + "name": "x-ms-copy-action", + "x-ms-client-name": "copyActionAbortConstant", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "abort" + ], + "x-ms-parameter-location": "method" + } + ] + }, + "/{containerName}/{blob}?comp=tier": { + "put": { + "tags": [ + "blobs" + ], + "operationId": "Blob_SetTier", + "description": "The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium storage account and on a block blob in a blob storage account (locally redundant storage only). A premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's ETag.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/AccessTier" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + } + ], + "responses": { + "200": { + "description": "The new tier will take effect immediately.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and newer." + } + } + }, + "202": { + "description": "The transition to the new tier is pending.", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and newer." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "tier" + ] + } + ] + }, + "/{containerName}/{blob}?restype=account&comp=properties": { + "get": { + "tags": [ + "blob" + ], + "operationId": "Blob_GetAccountInfo", + "description": "Returns the sku name and account kind ", + "parameters": [ + { + "$ref": "#/parameters/ApiVersionParameter" + } + ], + "responses": { + "200": { + "description": "Success (OK)", + "headers": { + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-sku-name": { + "x-ms-client-name": "SkuName", + "type": "string", + "enum": [ + "Standard_LRS", + "Standard_GRS", + "Standard_RAGRS", + "Standard_ZRS", + "Premium_LRS" + ], + "x-ms-enum": { + "name": "SkuName", + "modelAsString": false + }, + "description": "Identifies the sku name of the account" + }, + "x-ms-account-kind": { + "x-ms-client-name": "AccountKind", + "type": "string", + "enum": [ + "Storage", + "BlobStorage", + "StorageV2" + ], + "x-ms-enum": { + "name": "AccountKind", + "modelAsString": false + }, + "description": "Identifies the account kind" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "restype", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "account" + ] + }, + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}/{blob}?comp=block": { + "put": { + "tags": [ + "blockblob" + ], + "operationId": "BlockBlob_StageBlock", + "description": "The Stage Block operation creates a new block to be committed as part of a blob", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/BlockId" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/ContentMD5" + }, + { + "$ref": "#/parameters/Body" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The block was created.", + "headers": { + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "block" + ] + } + ] + }, + "/{containerName}/{blob}?comp=block&fromURL": { + "put": { + "tags": [ + "blockblob" + ], + "operationId": "BlockBlob_StageBlockFromURL", + "description": "The Stage Block operation creates a new block to be committed as part of a blob where the contents are read from a URL.", + "parameters": [ + { + "$ref": "#/parameters/BlockId" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/SourceUrl" + }, + { + "$ref": "#/parameters/SourceRange" + }, + { + "$ref": "#/parameters/SourceContentMD5" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/SourceIfModifiedSince" + }, + { + "$ref": "#/parameters/SourceIfUnmodifiedSince" + }, + { + "$ref": "#/parameters/SourceIfMatch" + }, + { + "$ref": "#/parameters/SourceIfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The block was created.", + "headers": { + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "block" + ] + } + ] + }, + "/{containerName}/{blob}?comp=blocklist": { + "put": { + "tags": [ + "blockblob" + ], + "operationId": "BlockBlob_CommitBlockList", + "description": "The Commit Block List operation writes a blob by specifying the list of block IDs that make up the blob. In order to be written as part of a blob, a block must have been successfully written to the server in a prior Put Block operation. You can call Put Block List to update a blob by uploading only those blocks that have changed, then committing the new and existing blocks together. You can do this by specifying whether to commit a block from the committed block list or from the uncommitted block list, or to commit the most recently uploaded version of the block, whichever list it may belong to.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/BlobCacheControl" + }, + { + "$ref": "#/parameters/BlobContentType" + }, + { + "$ref": "#/parameters/BlobContentEncoding" + }, + { + "$ref": "#/parameters/BlobContentLanguage" + }, + { + "$ref": "#/parameters/BlobContentMD5" + }, + { + "$ref": "#/parameters/Metadata" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobContentDisposition" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "name": "blocks", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/BlockLookupList" + } + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The block list was recorded.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "get": { + "tags": [ + "blockblob" + ], + "operationId": "BlockBlob_GetBlockList", + "description": "The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block blob", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/BlockListType" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The page range was written.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Content-Type": { + "type": "string", + "description": "The media type of the body of the response. For Get Block List this is 'application/xml'" + }, + "x-ms-blob-content-length": { + "x-ms-client-name": "BlobContentLength", + "type": "integer", + "format": "int64", + "description": "The size of the blob in bytes." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/BlockList" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "blocklist" + ] + } + ] + }, + "/{containerName}/{blob}?comp=page&update": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_UploadPages", + "description": "The Upload Pages operation writes a range of pages to a page blob", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/Body" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/ContentMD5" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Range" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThan" + }, + { + "$ref": "#/parameters/IfSequenceNumberEqualTo" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The page range was written.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for the page blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "page" + ] + }, + { + "name": "x-ms-page-write", + "x-ms-client-name": "pageWrite", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Required. You may specify one of the following options:\n - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.", + "type": "string", + "enum": [ + "update" + ], + "x-ms-enum": { + "name": "PageWriteType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?comp=page&clear": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_ClearPages", + "description": "The Clear Pages operation clears a set of pages from a page blob", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Range" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThan" + }, + { + "$ref": "#/parameters/IfSequenceNumberEqualTo" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The page range was cleared.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for the page blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "page" + ] + }, + { + "name": "x-ms-page-write", + "x-ms-client-name": "pageWrite", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Required. You may specify one of the following options:\n - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.", + "type": "string", + "enum": [ + "clear" + ], + "x-ms-enum": { + "name": "PageWriteType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?comp=page&update&fromUrl": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_UploadPagesFromURL", + "description": "The Upload Pages operation writes a range of pages to a page blob where the contents are read from a URL", + "consumes": [ + "application/octet-stream" + ], + "parameters": [ + { + "$ref": "#/parameters/SourceUrl" + }, + { + "$ref": "#/parameters/SourceRangeRequiredPutPageFromUrl" + }, + { + "$ref": "#/parameters/SourceContentMD5" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/RangeRequiredPutPageFromUrl" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo" + }, + { + "$ref": "#/parameters/IfSequenceNumberLessThan" + }, + { + "$ref": "#/parameters/IfSequenceNumberEqualTo" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/SourceIfModifiedSince" + }, + { + "$ref": "#/parameters/SourceIfUnmodifiedSince" + }, + { + "$ref": "#/parameters/SourceIfMatch" + }, + { + "$ref": "#/parameters/SourceIfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The page range was written.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for the page blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "page" + ] + }, + { + "name": "x-ms-page-write", + "x-ms-client-name": "pageWrite", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Required. You may specify one of the following options:\n - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.", + "type": "string", + "enum": [ + "update" + ], + "x-ms-enum": { + "name": "PageWriteType", + "modelAsString": false + } + } + ] + }, + "/{containerName}/{blob}?comp=pagelist": { + "get": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_GetPageRanges", + "description": "The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a page blob", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/Range" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Information on the page blob was found.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "x-ms-blob-content-length": { + "x-ms-client-name": "BlobContentLength", + "type": "integer", + "format": "int64", + "description": "The size of the blob in bytes." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/PageList" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "pagelist" + ] + } + ] + }, + "/{containerName}/{blob}?comp=pagelist&diff": { + "get": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_GetPageRangesDiff", + "description": "The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were changed between target blob and previous snapshot.", + "parameters": [ + { + "$ref": "#/parameters/Snapshot" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/PrevSnapshot" + }, + { + "$ref": "#/parameters/Range" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "Information on the page blob was found.", + "headers": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "x-ms-blob-content-length": { + "x-ms-client-name": "BlobContentLength", + "type": "integer", + "format": "int64", + "description": "The size of the blob in bytes." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + }, + "schema": { + "$ref": "#/definitions/PageList" + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "pagelist" + ] + } + ] + }, + "/{containerName}/{blob}?comp=properties&Resize": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_Resize", + "description": "Resize the Blob", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/BlobContentLengthRequired" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The Blob was resized successfully", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}/{blob}?comp=properties&UpdateSequenceNumber": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_UpdateSequenceNumber", + "description": "Update the sequence number of the blob", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/SequenceNumberAction" + }, + { + "$ref": "#/parameters/BlobSequenceNumber" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "200": { + "description": "The sequence numbers were updated successfully.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "BlobSequenceNumber", + "type": "integer", + "format": "int64", + "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs" + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "properties" + ] + } + ] + }, + "/{containerName}/{blob}?comp=incrementalcopy": { + "put": { + "tags": [ + "pageblob" + ], + "operationId": "PageBlob_CopyIncremental", + "description": "The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob. The snapshot is copied such that only the differential changes between the previously copied snapshot are transferred to the destination. The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual. This API is supported since REST version 2016-05-31.", + "parameters": [ + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/CopySource" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "202": { + "description": "The blob was copied.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-copy-id": { + "x-ms-client-name": "CopyId", + "type": "string", + "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy." + }, + "x-ms-copy-status": { + "x-ms-client-name": "CopyStatus", + "description": "State of the copy operation identified by x-ms-copy-id.", + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "incrementalcopy" + ] + } + ] + }, + "/{containerName}/{blob}?comp=appendblock": { + "put": { + "tags": [ + "appendblob" + ], + "consumes": [ + "application/octet-stream" + ], + "operationId": "AppendBlob_AppendBlock", + "description": "The Append Block operation commits a new block of data to the end of an existing append blob. The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later.", + "parameters": [ + { + "$ref": "#/parameters/Body" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/ContentMD5" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobConditionMaxSize" + }, + { + "$ref": "#/parameters/BlobConditionAppendPos" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The block was created.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-blob-append-offset": { + "x-ms-client-name": "BlobAppendOffset", + "type": "string", + "description": "This response header is returned only for append operations. It returns the offset at which the block was committed, in bytes." + }, + "x-ms-blob-committed-block-count": { + "x-ms-client-name": "BlobCommittedBlockCount", + "type": "integer", + "description": "The number of committed blocks present in the blob. This header is returned only for append blobs." + }, + "x-ms-request-server-encrypted": { + "x-ms-client-name": "IsServerEncrypted", + "type": "boolean", + "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "appendblock" + ] + } + ] + }, + "/{containerName}/{blob}?comp=appendblock&fromUrl": { + "put": { + "tags": [ + "appendblob" + ], + "operationId": "AppendBlob_AppendBlockFromUrl", + "description": "The Append Block operation commits a new block of data to the end of an existing append blob where the contents are read from a source url. The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later.", + "parameters": [ + { + "$ref": "#/parameters/SourceUrl" + }, + { + "$ref": "#/parameters/SourceRange" + }, + { + "$ref": "#/parameters/SourceContentMD5" + }, + { + "$ref": "#/parameters/Timeout" + }, + { + "$ref": "#/parameters/ContentLength" + }, + { + "$ref": "#/parameters/LeaseIdOptional" + }, + { + "$ref": "#/parameters/BlobConditionMaxSize" + }, + { + "$ref": "#/parameters/BlobConditionAppendPos" + }, + { + "$ref": "#/parameters/IfModifiedSince" + }, + { + "$ref": "#/parameters/IfUnmodifiedSince" + }, + { + "$ref": "#/parameters/IfMatch" + }, + { + "$ref": "#/parameters/IfNoneMatch" + }, + { + "$ref": "#/parameters/SourceIfModifiedSince" + }, + { + "$ref": "#/parameters/SourceIfUnmodifiedSince" + }, + { + "$ref": "#/parameters/SourceIfMatch" + }, + { + "$ref": "#/parameters/SourceIfNoneMatch" + }, + { + "$ref": "#/parameters/ApiVersionParameter" + }, + { + "$ref": "#/parameters/ClientRequestId" + } + ], + "responses": { + "201": { + "description": "The block was created.", + "headers": { + "ETag": { + "type": "string", + "format": "etag", + "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes." + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123", + "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob." + }, + "Content-MD5": { + "type": "string", + "format": "byte", + "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity." + }, + "x-ms-request-id": { + "x-ms-client-name": "RequestId", + "type": "string", + "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request." + }, + "x-ms-version": { + "x-ms-client-name": "Version", + "type": "string", + "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above." + }, + "Date": { + "type": "string", + "format": "date-time-rfc1123", + "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated" + }, + "x-ms-blob-append-offset": { + "x-ms-client-name": "BlobAppendOffset", + "type": "string", + "description": "This response header is returned only for append operations. It returns the offset at which the block was committed, in bytes." + }, + "x-ms-blob-committed-block-count": { + "x-ms-client-name": "BlobCommittedBlockCount", + "type": "integer", + "description": "The number of committed blocks present in the blob. This header is returned only for append blobs." + } + } + }, + "default": { + "description": "Failure", + "headers": { + "x-ms-error-code": { + "x-ms-client-name": "ErrorCode", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/StorageError" + } + } + } + }, + "parameters": [ + { + "name": "comp", + "in": "query", + "required": true, + "type": "string", + "enum": [ + "appendblock" + ] + } + ] + } + }, + "definitions": { + "KeyInfo": { + "type": "object", + "required": [ + "Start", + "Expiry" + ], + "description": "Key information", + "properties": { + "Start": { + "description": "The date-time the key is active in ISO 8601 UTC time", + "type": "string" + }, + "Expiry": { + "description": "The date-time the key expires in ISO 8601 UTC time", + "type": "string" + } + } + }, + "UserDelegationKey": { + "type": "object", + "required": [ + "SignedOid", + "SignedTid", + "SignedStart", + "SignedExpiry", + "SignedService", + "SignedVersion", + "Value" + ], + "description": "A user delegation key", + "properties": { + "SignedOid": { + "description": "The Azure Active Directory object ID in GUID format.", + "type": "string" + }, + "SignedTid": { + "description": "The Azure Active Directory tenant ID in GUID format", + "type": "string" + }, + "SignedStart": { + "description": "The date-time the key is active", + "type": "string", + "format": "date-time" + }, + "SignedExpiry": { + "description": "The date-time the key expires", + "type": "string", + "format": "date-time" + }, + "SignedService": { + "description": "Abbreviation of the Azure Storage service that accepts the key", + "type": "string" + }, + "SignedVersion": { + "description": "The service version that created the key", + "type": "string" + }, + "Value": { + "description": "The key as a base64 string", + "type": "string" + } + } + }, + "PublicAccessType": { + "type": "string", + "enum": [ + "container", + "blob" + ], + "x-ms-enum": { + "name": "PublicAccessType", + "modelAsString": true + } + }, + "CopyStatus": { + "type": "string", + "enum": [ + "pending", + "success", + "aborted", + "failed" + ], + "x-ms-enum": { + "name": "CopyStatusType", + "modelAsString": false + } + }, + "LeaseDuration": { + "type": "string", + "enum": [ + "infinite", + "fixed" + ], + "x-ms-enum": { + "name": "LeaseDurationType", + "modelAsString": false + } + }, + "LeaseState": { + "type": "string", + "enum": [ + "available", + "leased", + "expired", + "breaking", + "broken" + ], + "x-ms-enum": { + "name": "LeaseStateType", + "modelAsString": false + } + }, + "LeaseStatus": { + "type": "string", + "enum": [ + "locked", + "unlocked" + ], + "x-ms-enum": { + "name": "LeaseStatusType", + "modelAsString": false + } + }, + "StorageError": { + "type": "object", + "properties": { + "Code": { + "type": "string" + }, + "Message": { + "type": "string" + } + } + }, + "AccessPolicy": { + "type": "object", + "required": [ + "Start", + "Expiry", + "Permission" + ], + "description": "An Access policy", + "properties": { + "Start": { + "description": "the date-time the policy is active", + "type": "string", + "format": "date-time" + }, + "Expiry": { + "description": "the date-time the policy expires", + "type": "string", + "format": "date-time" + }, + "Permission": { + "description": "the permissions for the acl policy", + "type": "string" + } + } + }, + "AccessTier": { + "type": "string", + "enum": [ + "P4", + "P6", + "P10", + "P20", + "P30", + "P40", + "P50", + "Hot", + "Cool", + "Archive" + ], + "x-ms-enum": { + "name": "AccessTier", + "modelAsString": true + } + }, + "ArchiveStatus": { + "type": "string", + "enum": [ + "rehydrate-pending-to-hot", + "rehydrate-pending-to-cool" + ], + "x-ms-enum": { + "name": "ArchiveStatus", + "modelAsString": true + } + }, + "BlobItem": { + "xml": { + "name": "Blob" + }, + "description": "An Azure Storage blob", + "type": "object", + "required": [ + "Name", + "Deleted", + "Snapshot", + "Properties" + ], + "properties": { + "Name": { + "type": "string" + }, + "Deleted": { + "type": "boolean" + }, + "Snapshot": { + "type": "string" + }, + "Properties": { + "$ref": "#/definitions/BlobProperties" + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + } + } + }, + "BlobProperties": { + "xml": { + "name": "Properties" + }, + "description": "Properties of a blob", + "type": "object", + "required": [ + "Etag", + "Last-Modified" + ], + "properties": { + "Creation-Time": { + "type": "string", + "format": "date-time-rfc1123" + }, + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123" + }, + "Etag": { + "type": "string", + "format": "etag" + }, + "Content-Length": { + "type": "integer", + "format": "int64", + "description": "Size in bytes" + }, + "Content-Type": { + "type": "string" + }, + "Content-Encoding": { + "type": "string" + }, + "Content-Language": { + "type": "string" + }, + "Content-MD5": { + "type": "string", + "format": "byte" + }, + "Content-Disposition": { + "type": "string" + }, + "Cache-Control": { + "type": "string" + }, + "x-ms-blob-sequence-number": { + "x-ms-client-name": "blobSequenceNumber", + "type": "integer", + "format": "int64" + }, + "BlobType": { + "type": "string", + "enum": [ + "BlockBlob", + "PageBlob", + "AppendBlob" + ], + "x-ms-enum": { + "name": "BlobType", + "modelAsString": false + } + }, + "LeaseStatus": { + "$ref": "#/definitions/LeaseStatus" + }, + "LeaseState": { + "$ref": "#/definitions/LeaseState" + }, + "LeaseDuration": { + "$ref": "#/definitions/LeaseDuration" + }, + "CopyId": { + "type": "string" + }, + "CopyStatus": { + "$ref": "#/definitions/CopyStatus" + }, + "CopySource": { + "type": "string" + }, + "CopyProgress": { + "type": "string" + }, + "CopyCompletionTime": { + "type": "string", + "format": "date-time-rfc1123" + }, + "CopyStatusDescription": { + "type": "string" + }, + "ServerEncrypted": { + "type": "boolean" + }, + "IncrementalCopy": { + "type": "boolean" + }, + "DestinationSnapshot": { + "type": "string" + }, + "DeletedTime": { + "type": "string", + "format": "date-time-rfc1123" + }, + "RemainingRetentionDays": { + "type": "integer" + }, + "AccessTier": { + "$ref": "#/definitions/AccessTier" + }, + "AccessTierInferred": { + "type": "boolean" + }, + "ArchiveStatus": { + "$ref": "#/definitions/ArchiveStatus" + }, + "AccessTierChangeTime": { + "type": "string", + "format": "date-time-rfc1123" + } + } + }, + "ListBlobsFlatSegmentResponse": { + "xml": { + "name": "EnumerationResults" + }, + "description": "An enumeration of blobs", + "type": "object", + "required": [ + "ServiceEndpoint", + "ContainerName", + "Segment" + ], + "properties": { + "ServiceEndpoint": { + "type": "string", + "xml": { + "attribute": true + } + }, + "ContainerName": { + "type": "string", + "xml": { + "attribute": true + } + }, + "Prefix": { + "type": "string" + }, + "Marker": { + "type": "string" + }, + "MaxResults": { + "type": "integer" + }, + "Delimiter": { + "type": "string" + }, + "Segment": { + "$ref": "#/definitions/BlobFlatListSegment" + }, + "NextMarker": { + "type": "string" + } + } + }, + "ListBlobsHierarchySegmentResponse": { + "xml": { + "name": "EnumerationResults" + }, + "description": "An enumeration of blobs", + "type": "object", + "required": [ + "ServiceEndpoint", + "ContainerName", + "Segment" + ], + "properties": { + "ServiceEndpoint": { + "type": "string", + "xml": { + "attribute": true + } + }, + "ContainerName": { + "type": "string", + "xml": { + "attribute": true + } + }, + "Prefix": { + "type": "string" + }, + "Marker": { + "type": "string" + }, + "MaxResults": { + "type": "integer" + }, + "Delimiter": { + "type": "string" + }, + "Segment": { + "$ref": "#/definitions/BlobHierarchyListSegment" + }, + "NextMarker": { + "type": "string" + } + } + }, + "BlobFlatListSegment": { + "xml": { + "name": "Blobs" + }, + "required": [ + "BlobItems" + ], + "type": "object", + "properties": { + "BlobItems": { + "type": "array", + "items": { + "$ref": "#/definitions/BlobItem" + } + } + } + }, + "BlobHierarchyListSegment": { + "xml": { + "name": "Blobs" + }, + "type": "object", + "required": [ + "BlobItems" + ], + "properties": { + "BlobPrefixes": { + "type": "array", + "items": { + "$ref": "#/definitions/BlobPrefix" + } + }, + "BlobItems": { + "type": "array", + "items": { + "$ref": "#/definitions/BlobItem" + } + } + } + }, + "BlobPrefix": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Block": { + "type": "object", + "required": [ + "Name", + "Size" + ], + "description": "Represents a single block in a block blob. It describes the block's ID and size.", + "properties": { + "Name": { + "description": "The base64 encoded block ID.", + "type": "string" + }, + "Size": { + "description": "The block size in bytes.", + "type": "integer" + } + } + }, + "BlockList": { + "type": "object", + "properties": { + "CommittedBlocks": { + "xml": { + "wrapped": true + }, + "type": "array", + "items": { + "$ref": "#/definitions/Block" + } + }, + "UncommittedBlocks": { + "xml": { + "wrapped": true + }, + "type": "array", + "items": { + "$ref": "#/definitions/Block" + } + } + } + }, + "BlockLookupList": { + "type": "object", + "properties": { + "Committed": { + "type": "array", + "items": { + "type": "string", + "xml": { + "name": "Committed" + } + } + }, + "Uncommitted": { + "type": "array", + "items": { + "type": "string", + "xml": { + "name": "Uncommitted" + } + } + }, + "Latest": { + "type": "array", + "items": { + "type": "string", + "xml": { + "name": "Latest" + } + } + } + }, + "xml": { + "name": "BlockList" + } + }, + "ContainerItem": { + "xml": { + "name": "Container" + }, + "type": "object", + "required": [ + "Name", + "Properties" + ], + "description": "An Azure Storage container", + "properties": { + "Name": { + "type": "string" + }, + "Properties": { + "$ref": "#/definitions/ContainerProperties" + }, + "Metadata": { + "$ref": "#/definitions/Metadata" + } + } + }, + "ContainerProperties": { + "type": "object", + "required": [ + "Last-Modified", + "Etag" + ], + "description": "Properties of a container", + "properties": { + "Last-Modified": { + "type": "string", + "format": "date-time-rfc1123" + }, + "Etag": { + "type": "string", + "format": "etag" + }, + "LeaseStatus": { + "$ref": "#/definitions/LeaseStatus" + }, + "LeaseState": { + "$ref": "#/definitions/LeaseState" + }, + "LeaseDuration": { + "$ref": "#/definitions/LeaseDuration" + }, + "PublicAccess": { + "$ref": "#/definitions/PublicAccessType" + }, + "HasImmutabilityPolicy": { + "type": "boolean" + }, + "HasLegalHold": { + "type": "boolean" + } + } + }, + "ListContainersSegmentResponse": { + "xml": { + "name": "EnumerationResults" + }, + "description": "An enumeration of containers", + "type": "object", + "required": [ + "ServiceEndpoint", + "ContainerItems" + ], + "properties": { + "ServiceEndpoint": { + "type": "string", + "xml": { + "attribute": true + } + }, + "Prefix": { + "type": "string" + }, + "Marker": { + "type": "string" + }, + "MaxResults": { + "type": "integer" + }, + "ContainerItems": { + "xml": { + "wrapped": true, + "name": "Containers" + }, + "type": "array", + "items": { + "$ref": "#/definitions/ContainerItem" + } + }, + "NextMarker": { + "type": "string" + } + } + }, + "CorsRule": { + "description": "CORS is an HTTP feature that enables a web application running under one domain to access resources in another domain. Web browsers implement a security restriction known as same-origin policy that prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain (the origin domain) to call APIs in another domain", + "type": "object", + "required": [ + "AllowedOrigins", + "AllowedMethods", + "AllowedHeaders", + "ExposedHeaders", + "MaxAgeInSeconds" + ], + "properties": { + "AllowedOrigins": { + "description": "The origin domains that are permitted to make a request against the storage service via CORS. The origin domain is the domain from which the request originates. Note that the origin must be an exact case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' to allow all origin domains to make requests via CORS.", + "type": "string" + }, + "AllowedMethods": { + "description": "The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated)", + "type": "string" + }, + "AllowedHeaders": { + "description": "the request headers that the origin domain may specify on the CORS request.", + "type": "string" + }, + "ExposedHeaders": { + "description": "The response headers that may be sent in the response to the CORS request and exposed by the browser to the request issuer", + "type": "string" + }, + "MaxAgeInSeconds": { + "description": "The maximum amount time that a browser should cache the preflight OPTIONS request.", + "type": "integer", + "minimum": 0 + } + } + }, + "ErrorCode": { + "description": "Error codes returned by the service", + "type": "string", + "enum": [ + "AccountAlreadyExists", + "AccountBeingCreated", + "AccountIsDisabled", + "AuthenticationFailed", + "AuthorizationFailure", + "ConditionHeadersNotSupported", + "ConditionNotMet", + "EmptyMetadataKey", + "InsufficientAccountPermissions", + "InternalError", + "InvalidAuthenticationInfo", + "InvalidHeaderValue", + "InvalidHttpVerb", + "InvalidInput", + "InvalidMd5", + "InvalidMetadata", + "InvalidQueryParameterValue", + "InvalidRange", + "InvalidResourceName", + "InvalidUri", + "InvalidXmlDocument", + "InvalidXmlNodeValue", + "Md5Mismatch", + "MetadataTooLarge", + "MissingContentLengthHeader", + "MissingRequiredQueryParameter", + "MissingRequiredHeader", + "MissingRequiredXmlNode", + "MultipleConditionHeadersNotSupported", + "OperationTimedOut", + "OutOfRangeInput", + "OutOfRangeQueryParameterValue", + "RequestBodyTooLarge", + "ResourceTypeMismatch", + "RequestUrlFailedToParse", + "ResourceAlreadyExists", + "ResourceNotFound", + "ServerBusy", + "UnsupportedHeader", + "UnsupportedXmlNode", + "UnsupportedQueryParameter", + "UnsupportedHttpVerb", + "AppendPositionConditionNotMet", + "BlobAlreadyExists", + "BlobNotFound", + "BlobOverwritten", + "BlobTierInadequateForContentLength", + "BlockCountExceedsLimit", + "BlockListTooLong", + "CannotChangeToLowerTier", + "CannotVerifyCopySource", + "ContainerAlreadyExists", + "ContainerBeingDeleted", + "ContainerDisabled", + "ContainerNotFound", + "ContentLengthLargerThanTierLimit", + "CopyAcrossAccountsNotSupported", + "CopyIdMismatch", + "FeatureVersionMismatch", + "IncrementalCopyBlobMismatch", + "IncrementalCopyOfEralierVersionSnapshotNotAllowed", + "IncrementalCopySourceMustBeSnapshot", + "InfiniteLeaseDurationRequired", + "InvalidBlobOrBlock", + "InvalidBlobTier", + "InvalidBlobType", + "InvalidBlockId", + "InvalidBlockList", + "InvalidOperation", + "InvalidPageRange", + "InvalidSourceBlobType", + "InvalidSourceBlobUrl", + "InvalidVersionForPageBlobOperation", + "LeaseAlreadyPresent", + "LeaseAlreadyBroken", + "LeaseIdMismatchWithBlobOperation", + "LeaseIdMismatchWithContainerOperation", + "LeaseIdMismatchWithLeaseOperation", + "LeaseIdMissing", + "LeaseIsBreakingAndCannotBeAcquired", + "LeaseIsBreakingAndCannotBeChanged", + "LeaseIsBrokenAndCannotBeRenewed", + "LeaseLost", + "LeaseNotPresentWithBlobOperation", + "LeaseNotPresentWithContainerOperation", + "LeaseNotPresentWithLeaseOperation", + "MaxBlobSizeConditionNotMet", + "NoPendingCopyOperation", + "OperationNotAllowedOnIncrementalCopyBlob", + "PendingCopyOperation", + "PreviousSnapshotCannotBeNewer", + "PreviousSnapshotNotFound", + "PreviousSnapshotOperationNotSupported", + "SequenceNumberConditionNotMet", + "SequenceNumberIncrementTooLarge", + "SnapshotCountExceeded", + "SnaphotOperationRateExceeded", + "SnapshotsPresent", + "SourceConditionNotMet", + "SystemInUse", + "TargetConditionNotMet", + "UnauthorizedBlobOverwrite", + "BlobBeingRehydrated", + "BlobArchived", + "BlobNotArchived" + ], + "x-ms-enum": { + "name": "StorageErrorCode", + "modelAsString": true + } + }, + "GeoReplication": { + "description": "Geo-Replication information for the Secondary Storage Service", + "type": "object", + "required": [ + "Status", + "LastSyncTime" + ], + "properties": { + "Status": { + "description": "The status of the secondary location", + "type": "string", + "enum": [ + "live", + "bootstrap", + "unavailable" + ], + "x-ms-enum": { + "name": "GeoReplicationStatusType", + "modelAsString": true + } + }, + "LastSyncTime": { + "description": "A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to be available for read operations at the secondary. Primary writes after this point in time may or may not be available for reads.", + "type": "string", + "format": "date-time-rfc1123" + } + } + }, + "Logging": { + "description": "Azure Analytics Logging settings.", + "type": "object", + "required": [ + "Version", + "Delete", + "Read", + "Write", + "RetentionPolicy" + ], + "properties": { + "Version": { + "description": "The version of Storage Analytics to configure.", + "type": "string" + }, + "Delete": { + "description": "Indicates whether all delete requests should be logged.", + "type": "boolean" + }, + "Read": { + "description": "Indicates whether all read requests should be logged.", + "type": "boolean" + }, + "Write": { + "description": "Indicates whether all write requests should be logged.", + "type": "boolean" + }, + "RetentionPolicy": { + "$ref": "#/definitions/RetentionPolicy" + } + } + }, + "Metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Metrics": { + "description": "a summary of request statistics grouped by API in hour or minute aggregates for blobs", + "required": [ + "Enabled" + ], + "properties": { + "Version": { + "description": "The version of Storage Analytics to configure.", + "type": "string" + }, + "Enabled": { + "description": "Indicates whether metrics are enabled for the Blob service.", + "type": "boolean" + }, + "IncludeAPIs": { + "description": "Indicates whether metrics should generate summary statistics for called API operations.", + "type": "boolean" + }, + "RetentionPolicy": { + "$ref": "#/definitions/RetentionPolicy" + } + } + }, + "PageList": { + "description": "the list of pages", + "type": "object", + "properties": { + "PageRange": { + "type": "array", + "items": { + "$ref": "#/definitions/PageRange" + } + }, + "ClearRange": { + "type": "array", + "items": { + "$ref": "#/definitions/ClearRange" + } + } + } + }, + "PageRange": { + "type": "object", + "required": [ + "Start", + "End" + ], + "properties": { + "Start": { + "type": "integer", + "format": "int64", + "xml": { + "name": "Start" + } + }, + "End": { + "type": "integer", + "format": "int64", + "xml": { + "name": "End" + } + } + }, + "xml": { + "name": "PageRange" + } + }, + "ClearRange": { + "type": "object", + "required": [ + "Start", + "End" + ], + "properties": { + "Start": { + "type": "integer", + "format": "int64", + "xml": { + "name": "Start" + } + }, + "End": { + "type": "integer", + "format": "int64", + "xml": { + "name": "End" + } + } + }, + "xml": { + "name": "ClearRange" + } + }, + "RetentionPolicy": { + "description": "the retention policy which determines how long the associated data should persist", + "type": "object", + "required": [ + "Enabled" + ], + "properties": { + "Enabled": { + "description": "Indicates whether a retention policy is enabled for the storage service", + "type": "boolean" + }, + "Days": { + "description": "Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this value will be deleted", + "type": "integer", + "minimum": 1 + } + } + }, + "SignedIdentifier": { + "xml": { + "name": "SignedIdentifier" + }, + "description": "signed identifier", + "type": "object", + "required": [ + "Id", + "AccessPolicy" + ], + "properties": { + "Id": { + "type": "string", + "description": "a unique id" + }, + "AccessPolicy": { + "$ref": "#/definitions/AccessPolicy" + } + } + }, + "SignedIdentifiers": { + "description": "a collection of signed identifiers", + "type": "array", + "items": { + "$ref": "#/definitions/SignedIdentifier" + }, + "xml": { + "wrapped": true, + "name": "SignedIdentifiers" + } + }, + "StaticWebsite": { + "description": "The properties that enable an account to host a static website", + "type": "object", + "required": [ + "Enabled" + ], + "properties": { + "Enabled": { + "description": "Indicates whether this account is hosting a static website", + "type": "boolean" + }, + "IndexDocument": { + "description": "The default name of the index page under each directory", + "type": "string" + }, + "ErrorDocument404Path": { + "description": "The absolute path of the custom 404 page", + "type": "string" + } + } + }, + "StorageServiceProperties": { + "description": "Storage Service Properties.", + "type": "object", + "properties": { + "Logging": { + "$ref": "#/definitions/Logging" + }, + "HourMetrics": { + "$ref": "#/definitions/Metrics" + }, + "MinuteMetrics": { + "$ref": "#/definitions/Metrics" + }, + "Cors": { + "description": "The set of CORS rules.", + "type": "array", + "items": { + "$ref": "#/definitions/CorsRule" + }, + "xml": { + "wrapped": true + } + }, + "DefaultServiceVersion": { + "description": "The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible values include version 2008-10-27 and all more recent versions", + "type": "string" + }, + "DeleteRetentionPolicy": { + "$ref": "#/definitions/RetentionPolicy" + }, + "StaticWebsite": { + "$ref": "#/definitions/StaticWebsite" + } + } + }, + "StorageServiceStats": { + "description": "Stats for the storage service.", + "type": "object", + "properties": { + "GeoReplication": { + "$ref": "#/definitions/GeoReplication" + } + } + } + }, + "parameters": { + "Url": { + "name": "url", + "description": "The URL of the service account, container, or blob that is the targe of the desired operation.", + "required": true, + "type": "string", + "in": "path", + "x-ms-skip-url-encoding": true + }, + "ApiVersionParameter": { + "name": "x-ms-version", + "x-ms-client-name": "version", + "in": "header", + "required": true, + "type": "string", + "description": "Specifies the version of the operation to use for this request.", + "enum": [ + "2018-11-09" + ] + }, + "Blob": { + "name": "blob", + "in": "path", + "required": true, + "type": "string", + "pattern": "^[a-zA-Z0-9]+(?:/[a-zA-Z0-9]+)*(?:\\.[a-zA-Z0-9]+){0,1}$", + "minLength": 1, + "maxLength": 1024, + "x-ms-parameter-location": "method", + "description": "The blob name." + }, + "BlobCacheControl": { + "name": "x-ms-blob-cache-control", + "x-ms-client-name": "blobCacheControl", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. Sets the blob's cache control. If specified, this property is stored with the blob and returned with a read request." + }, + "BlobConditionAppendPos": { + "name": "x-ms-blob-condition-appendpos", + "x-ms-client-name": "appendPosition", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "append-position-access-conditions" + }, + "description": "Optional conditional header, used only for the Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed)." + }, + "BlobConditionMaxSize": { + "name": "x-ms-blob-condition-maxsize", + "x-ms-client-name": "maxSize", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "append-position-access-conditions" + }, + "description": "Optional conditional header. The max length in bytes permitted for the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed)." + }, + "BlobPublicAccess": { + "name": "x-ms-blob-public-access", + "x-ms-client-name": "access", + "in": "header", + "required": false, + "x-ms-parameter-location": "method", + "description": "Specifies whether data in the container may be accessed publicly and the level of access", + "type": "string", + "enum": [ + "container", + "blob" + ], + "x-ms-enum": { + "name": "PublicAccessType", + "modelAsString": true + } + }, + "AccessTier": { + "name": "x-ms-access-tier", + "x-ms-client-name": "tier", + "in": "header", + "required": true, + "type": "string", + "enum": [ + "P4", + "P6", + "P10", + "P20", + "P30", + "P40", + "P50", + "Hot", + "Cool", + "Archive" + ], + "x-ms-enum": { + "name": "AccessTier", + "modelAsString": true + }, + "x-ms-parameter-location": "method", + "description": "Indicates the tier to be set on the blob." + }, + "BlobContentDisposition": { + "name": "x-ms-blob-content-disposition", + "x-ms-client-name": "blobContentDisposition", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. Sets the blob's Content-Disposition header." + }, + "BlobContentEncoding": { + "name": "x-ms-blob-content-encoding", + "x-ms-client-name": "blobContentEncoding", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. Sets the blob's content encoding. If specified, this property is stored with the blob and returned with a read request." + }, + "BlobContentLanguage": { + "name": "x-ms-blob-content-language", + "x-ms-client-name": "blobContentLanguage", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. Set the blob's content language. If specified, this property is stored with the blob and returned with a read request." + }, + "BlobContentLengthOptional": { + "name": "x-ms-blob-content-length", + "x-ms-client-name": "blobContentLength", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "description": "This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte boundary." + }, + "BlobContentLengthRequired": { + "name": "x-ms-blob-content-length", + "x-ms-client-name": "blobContentLength", + "in": "header", + "required": true, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "description": "This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte boundary." + }, + "BlobContentMD5": { + "name": "x-ms-blob-content-md5", + "x-ms-client-name": "blobContentMD5", + "in": "header", + "required": false, + "type": "string", + "format": "byte", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. An MD5 hash of the blob content. Note that this hash is not validated, as the hashes for the individual blocks were validated when each was uploaded." + }, + "BlobContentType": { + "name": "x-ms-blob-content-type", + "x-ms-client-name": "blobContentType", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "blob-HTTP-headers" + }, + "description": "Optional. Sets the blob's content type. If specified, this property is stored with the blob and returned with a read request." + }, + "BlobSequenceNumber": { + "name": "x-ms-blob-sequence-number", + "x-ms-client-name": "blobSequenceNumber", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "default": 0, + "x-ms-parameter-location": "method", + "description": "Set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of the sequence number must be between 0 and 2^63 - 1." + }, + "BlockId": { + "name": "blockid", + "x-ms-client-name": "blockId", + "in": "query", + "type": "string", + "required": true, + "x-ms-parameter-location": "method", + "description": "A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the same size for each block." + }, + "BlockListType": { + "name": "blocklisttype", + "x-ms-client-name": "listType", + "in": "query", + "required": true, + "default": "committed", + "x-ms-parameter-location": "method", + "description": "Specifies whether to return the list of committed blocks, the list of uncommitted blocks, or both lists together.", + "type": "string", + "enum": [ + "committed", + "uncommitted", + "all" + ], + "x-ms-enum": { + "name": "BlockListType", + "modelAsString": false + } + }, + "Body": { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "format": "file" + }, + "x-ms-parameter-location": "method", + "description": "Initial data" + }, + "ContainerAcl": { + "name": "containerAcl", + "in": "body", + "schema": { + "$ref": "#/definitions/SignedIdentifiers" + }, + "x-ms-parameter-location": "method", + "description": "the acls for the container" + }, + "CopyId": { + "name": "copyid", + "x-ms-client-name": "copyId", + "in": "query", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "The copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation." + }, + "ClientRequestId": { + "name": "x-ms-client-request-id", + "x-ms-client-name": "requestId", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled." + }, + "ContainerName": { + "name": "containerName", + "in": "path", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "The container name." + }, + + "ContentLength": { + "name": "Content-Length", + "in": "header", + "required": true, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "description": "The length of the request." + }, + "ContentMD5": { + "name": "Content-MD5", + "x-ms-client-name": "transactionalContentMD5", + "in": "header", + "required": false, + "type": "string", + "format": "byte", + "x-ms-parameter-location": "method", + "description": "Specify the transactional md5 for the body, to be validated by the service." + }, + "CopySource": { + "name": "x-ms-copy-source", + "x-ms-client-name": "copySource", + "in": "header", + "required": true, + "type": "string", + "format": "url", + "x-ms-parameter-location": "method", + "description": "Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob must either be public or must be authenticated via a shared access signature." + }, + "DeleteSnapshots": { + "name": "x-ms-delete-snapshots", + "x-ms-client-name": "deleteSnapshots", + "description": "Required if the blob has associated snapshots. Specify one of the following two options: include: Delete the base blob and all of its snapshots. only: Delete only the blob's snapshots and not the blob itself", + "x-ms-parameter-location": "method", + "in": "header", + "required": false, + "type": "string", + "enum": [ + "include", + "only" + ], + "x-ms-enum": { + "name": "DeleteSnapshotsOptionType", + "modelAsString": false + } + }, + "Delimiter": { + "name": "delimiter", + "description": "When the request includes this parameter, the operation returns a BlobPrefix element in the response body that acts as a placeholder for all blobs whose names begin with the same substring up to the appearance of the delimiter character. The delimiter may be a single character or a string.", + "type": "string", + "x-ms-parameter-location": "method", + "in": "query", + "required": true + }, + "GetRangeContentMD5": { + "name": "x-ms-range-get-content-md5", + "x-ms-client-name": "rangeGetContentMD5", + "in": "header", + "required": false, + "type": "boolean", + "x-ms-parameter-location": "method", + "description": "When set to true and specified together with the Range, the service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB in size." + }, + "IfMatch": { + "name": "If-Match", + "x-ms-client-name": "ifMatch", + "in": "header", + "required": false, + "type": "string", + "format": "etag", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "modified-access-conditions" + }, + "description": "Specify an ETag value to operate only on blobs with a matching value." + }, + "IfModifiedSince": { + "name": "If-Modified-Since", + "x-ms-client-name": "ifModifiedSince", + "in": "header", + "required": false, + "type": "string", + "format": "date-time-rfc1123", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "modified-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has been modified since the specified date/time." + }, + "IfNoneMatch": { + "name": "If-None-Match", + "x-ms-client-name": "ifNoneMatch", + "in": "header", + "required": false, + "type": "string", + "format": "etag", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "modified-access-conditions" + }, + "description": "Specify an ETag value to operate only on blobs without a matching value." + }, + "IfUnmodifiedSince": { + "name": "If-Unmodified-Since", + "x-ms-client-name": "ifUnmodifiedSince", + "in": "header", + "required": false, + "type": "string", + "format": "date-time-rfc1123", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "modified-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has not been modified since the specified date/time." + }, + "IfSequenceNumberEqualTo": { + "name": "x-ms-if-sequence-number-eq", + "x-ms-client-name": "ifSequenceNumberEqualTo", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "sequence-number-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has the specified sequence number." + }, + "IfSequenceNumberLessThan": { + "name": "x-ms-if-sequence-number-lt", + "x-ms-client-name": "ifSequenceNumberLessThan", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "sequence-number-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has a sequence number less than the specified." + }, + "IfSequenceNumberLessThanOrEqualTo": { + "name": "x-ms-if-sequence-number-le", + "x-ms-client-name": "ifSequenceNumberLessThanOrEqualTo", + "in": "header", + "required": false, + "type": "integer", + "format": "int64", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "sequence-number-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has a sequence number less than or equal to the specified." + }, + "KeyInfo": { + "name": "KeyInfo", + "in": "body", + "x-ms-parameter-location": "method", + "required": true, + "schema": { + "$ref": "#/definitions/KeyInfo" + } + }, + "ListBlobsInclude": { + "name": "include", + "in": "query", + "required": false, + "type": "array", + "collectionFormat": "csv", + "items": { + "type": "string", + "enum": [ + "copy", + "deleted", + "metadata", + "snapshots", + "uncommittedblobs" + ], + "x-ms-enum": { + "name": "ListBlobsIncludeItem", + "modelAsString": false + } + }, + "x-ms-parameter-location": "method", + "description": "Include this parameter to specify one or more datasets to include in the response." + }, + "ListContainersInclude": { + "name": "include", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "metadata" + ], + "x-ms-enum": { + "name": "ListContainersIncludeType", + "modelAsString": false + }, + "x-ms-parameter-location": "method", + "description": "Include this parameter to specify that the container's metadata be returned as part of the response body." + }, + "LeaseBreakPeriod": { + "name": "x-ms-lease-break-period", + "x-ms-client-name": "breakPeriod", + "in": "header", + "required": false, + "type": "integer", + "x-ms-parameter-location": "method", + "description": "For a break operation, proposed duration the lease should continue before it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter than the time remaining on the lease. If longer, the time remaining on the lease is used. A new lease will not be available before the break period has expired, but the lease may be held for longer than the break period. If this header does not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease breaks immediately." + }, + "LeaseDuration": { + "name": "x-ms-lease-duration", + "x-ms-client-name": "duration", + "in": "header", + "required": false, + "type": "integer", + "x-ms-parameter-location": "method", + "description": "Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration cannot be changed using renew or change." + }, + "LeaseIdOptional": { + "name": "x-ms-lease-id", + "x-ms-client-name": "leaseId", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "lease-access-conditions" + }, + "description": "If specified, the operation only succeeds if the resource's lease is active and matches this ID." + }, + "LeaseIdRequired": { + "name": "x-ms-lease-id", + "x-ms-client-name": "leaseId", + "in": "header", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Specifies the current lease ID on the resource." + }, + "Marker": { + "name": "marker", + "in": "query", + "required": false, + "type": "string", + "description": "A string value that identifies the portion of the list of containers to be returned with the next listing operation. The operation returns the NextMarker value within the response body if the listing operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used as the value for the marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the client.", + "x-ms-parameter-location": "method" + }, + "MaxResults": { + "name": "maxresults", + "in": "query", + "required": false, + "type": "integer", + "minimum": 1, + "x-ms-parameter-location": "method", + "description": "Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value greater than 5000, the server will return up to 5000 items. Note that if the listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder of the results. For this reason, it is possible that the service will return fewer results than specified by maxresults, or than the default of 5000." + }, + "Metadata": { + "name": "x-ms-meta", + "x-ms-client-name": "metadata", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more information.", + "x-ms-header-collection-prefix": "x-ms-meta-" + }, + "Prefix": { + "name": "prefix", + "in": "query", + "required": false, + "type": "string", + "description": "Filters the results to return only containers whose name begins with the specified prefix.", + "x-ms-parameter-location": "method" + }, + "PrevSnapshot": { + "name": "prevsnapshot", + "in": "query", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a DateTime value that specifies that the response will contain only pages that were changed between target blob and previous snapshot. Changed pages include both updated and cleared pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is the older of the two. Note that incremental snapshots are currently supported only for blobs created on or after January 1, 2016." + }, + "ProposedLeaseIdOptional": { + "name": "x-ms-proposed-lease-id", + "x-ms-client-name": "proposedLeaseId", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string formats." + }, + "ProposedLeaseIdRequired": { + "name": "x-ms-proposed-lease-id", + "x-ms-client-name": "proposedLeaseId", + "in": "header", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string formats." + }, + "Range": { + "name": "x-ms-range", + "x-ms-client-name": "range", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Return only the bytes of the blob in the specified range." + }, + "RangeRequiredPutPageFromUrl": { + "name": "x-ms-range", + "x-ms-client-name": "range", + "in": "header", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "The range of bytes to which the source range would be written. The range should be 512 aligned and range-end is required." + }, + "SequenceNumberAction": { + "name": "x-ms-sequence-number-action", + "x-ms-client-name": "sequenceNumberAction", + "in": "header", + "required": true, + "x-ms-parameter-location": "method", + "description": "Required if the x-ms-blob-sequence-number header is set for the request. This property applies to page blobs only. This property indicates how the service should modify the blob's sequence number", + "type": "string", + "enum": [ + "max", + "update", + "increment" + ], + "x-ms-enum": { + "name": "SequenceNumberActionType", + "modelAsString": false + } + }, + "Snapshot": { + "name": "snapshot", + "in": "query", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more information on working with blob snapshots, see Creating a Snapshot of a Blob." + }, + "SourceContentMD5": { + "name": "x-ms-source-content-md5", + "x-ms-client-name": "sourceContentMD5", + "in": "header", + "required": false, + "type": "string", + "format": "byte", + "x-ms-parameter-location": "method", + "description": "Specify the md5 calculated for the range of bytes that must be read from the copy source." + }, + "SourceRange": { + "name": "x-ms-source-range", + "x-ms-client-name": "sourceRange", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Bytes of source data in the specified range." + }, + "SourceRangeRequiredPutPageFromUrl": { + "name": "x-ms-source-range", + "x-ms-client-name": "sourceRange", + "in": "header", + "required": true, + "type": "string", + "x-ms-parameter-location": "method", + "description": "Bytes of source data in the specified range. The length of this range should match the ContentLength header and x-ms-range/Range destination range header." + }, + "SourceIfMatch": { + "name": "x-ms-source-if-match", + "x-ms-client-name": "sourceIfMatch", + "in": "header", + "required": false, + "type": "string", + "format": "etag", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "source-modified-access-conditions" + }, + "description": "Specify an ETag value to operate only on blobs with a matching value." + }, + "SourceIfModifiedSince": { + "name": "x-ms-source-if-modified-since", + "x-ms-client-name": "sourceIfModifiedSince", + "in": "header", + "required": false, + "type": "string", + "format": "date-time-rfc1123", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "source-modified-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has been modified since the specified date/time." + }, + "SourceIfNoneMatch": { + "name": "x-ms-source-if-none-match", + "x-ms-client-name": "sourceIfNoneMatch", + "in": "header", + "required": false, + "type": "string", + "format": "etag", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "source-modified-access-conditions" + }, + "description": "Specify an ETag value to operate only on blobs without a matching value." + }, + "SourceIfUnmodifiedSince": { + "name": "x-ms-source-if-unmodified-since", + "x-ms-client-name": "sourceIfUnmodifiedSince", + "in": "header", + "required": false, + "type": "string", + "format": "date-time-rfc1123", + "x-ms-parameter-location": "method", + "x-ms-parameter-grouping": { + "name": "source-modified-access-conditions" + }, + "description": "Specify this header value to operate only on a blob if it has not been modified since the specified date/time." + }, + "SourceLeaseId": { + "name": "x-ms-source-lease-id", + "x-ms-client-name": "sourceLeaseId", + "in": "header", + "required": false, + "type": "string", + "x-ms-parameter-location": "method", + "description": "A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match." + }, + "SourceUrl": { + "name": "x-ms-copy-source", + "x-ms-client-name": "sourceUrl", + "in": "header", + "required": true, + "type": "string", + "format": "url", + "x-ms-parameter-location": "method", + "description": "Specify a URL to the copy source." + }, + "StorageServiceProperties": { + "name": "StorageServiceProperties", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/StorageServiceProperties" + }, + "x-ms-parameter-location": "method", + "description": "The StorageService properties." + }, + "Timeout": { + "name": "timeout", + "in": "query", + "required": false, + "type": "integer", + "minimum": 0, + "x-ms-parameter-location": "method", + "description": "The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations." + } + } +} \ No newline at end of file diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go similarity index 78% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go index aa022826bb18..18f9e54a836d 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/highlevel.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/highlevel.go @@ -3,7 +3,6 @@ package azblob import ( "context" "encoding/base64" - "fmt" "io" "net/http" @@ -12,10 +11,12 @@ import ( "sync" "time" + "errors" + "github.com/Azure/azure-pipeline-go/pipeline" ) -// CommonResponseHeaders returns the headers common to all blob REST API responses. +// CommonResponse returns the headers common to all blob REST API responses. type CommonResponse interface { // ETag returns the value for header ETag. ETag() ETag @@ -42,6 +43,7 @@ type UploadToBlockBlobOptions struct { BlockSize int64 // Progress is a function that is invoked periodically as bytes are sent to the BlockBlobURL. + // Note that the progress reporting is not always increasing; it can go down when retrying a request. Progress pipeline.ProgressReceiver // BlobHTTPHeaders indicates the HTTP headers to be associated with the blob. @@ -60,17 +62,25 @@ type UploadToBlockBlobOptions struct { // UploadBufferToBlockBlob uploads a buffer in blocks to a block blob. func UploadBufferToBlockBlob(ctx context.Context, b []byte, blockBlobURL BlockBlobURL, o UploadToBlockBlobOptions) (CommonResponse, error) { - - // Validate parameters and set defaults - if o.BlockSize < 0 || o.BlockSize > BlockBlobMaxUploadBlobBytes { - panic(fmt.Sprintf("BlockSize option must be > 0 and <= %d", BlockBlobMaxUploadBlobBytes)) - } + bufferSize := int64(len(b)) if o.BlockSize == 0 { - o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified + // If bufferSize > (BlockBlobMaxStageBlockBytes * BlockBlobMaxBlocks), then error + if bufferSize > BlockBlobMaxStageBlockBytes*BlockBlobMaxBlocks { + return nil, errors.New("Buffer is too large to upload to a block blob") + } + // If bufferSize <= BlockBlobMaxUploadBlobBytes, then Upload should be used with just 1 I/O request + if bufferSize <= BlockBlobMaxUploadBlobBytes { + o.BlockSize = BlockBlobMaxUploadBlobBytes // Default if unspecified + } else { + o.BlockSize = bufferSize / BlockBlobMaxBlocks // buffer / max blocks = block size to use all 50,000 blocks + if o.BlockSize < BlobDefaultDownloadBlockSize { // If the block size is smaller than 4MB, round up to 4MB + o.BlockSize = BlobDefaultDownloadBlockSize + } + // StageBlock will be called with blockSize blocks and a parallelism of (BufferSize / BlockSize). + } } - size := int64(len(b)) - if size <= BlockBlobMaxUploadBlobBytes { + if bufferSize <= BlockBlobMaxUploadBlobBytes { // If the size can fit in 1 Upload call, do it this way var body io.ReadSeeker = bytes.NewReader(b) if o.Progress != nil { @@ -79,10 +89,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte, return blockBlobURL.Upload(ctx, body, o.BlobHTTPHeaders, o.Metadata, o.AccessConditions) } - var numBlocks = uint16(((size - 1) / o.BlockSize) + 1) - if numBlocks > BlockBlobMaxBlocks { - panic(fmt.Sprintf("The buffer's size is too big or the BlockSize is too small; the number of blocks must be <= %d", BlockBlobMaxBlocks)) - } + var numBlocks = uint16(((bufferSize - 1) / o.BlockSize) + 1) blockIDList := make([]string, numBlocks) // Base-64 encoded block IDs progress := int64(0) @@ -90,7 +97,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte, err := doBatchTransfer(ctx, batchTransferOptions{ operationName: "UploadBufferToBlockBlob", - transferSize: size, + transferSize: bufferSize, chunkSize: o.BlockSize, parallelism: o.Parallelism, operation: func(offset int64, count int64) error { @@ -115,7 +122,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte, // Block IDs are unique values to avoid issue if 2+ clients are uploading blocks // at the same time causing PutBlockList to get a mix of blocks from all the clients. blockIDList[blockNum] = base64.StdEncoding.EncodeToString(newUUID().bytes()) - _, err := blockBlobURL.StageBlock(ctx, blockIDList[blockNum], body, o.AccessConditions.LeaseAccessConditions) + _, err := blockBlobURL.StageBlock(ctx, blockIDList[blockNum], body, o.AccessConditions.LeaseAccessConditions, nil) return err }, }) @@ -147,10 +154,9 @@ func UploadFileToBlockBlob(ctx context.Context, file *os.File, /////////////////////////////////////////////////////////////////////////////// - const BlobDefaultDownloadBlockSize = int64(4 * 1024 * 1024) // 4MB -// DownloadFromAzureFileOptions identifies options used by the DownloadAzureFileToBuffer and DownloadAzureFileToFile functions. +// DownloadFromBlobOptions identifies options used by the DownloadBlobToBuffer and DownloadBlobToFile functions. type DownloadFromBlobOptions struct { // BlockSize specifies the block size to use for each parallel download; the default size is BlobDefaultDownloadBlockSize. BlockSize int64 @@ -168,32 +174,19 @@ type DownloadFromBlobOptions struct { RetryReaderOptionsPerBlock RetryReaderOptions } -// downloadAzureFileToBuffer downloads an Azure file to a buffer with parallel. +// downloadBlobToBuffer downloads an Azure blob to a buffer with parallel. func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64, - ac BlobAccessConditions, b []byte, o DownloadFromBlobOptions, - initialDownloadResponse *DownloadResponse) error { - // Validate parameters, and set defaults. - if o.BlockSize < 0 { - panic("BlockSize option must be >= 0") - } + b []byte, o DownloadFromBlobOptions, initialDownloadResponse *DownloadResponse) error { if o.BlockSize == 0 { o.BlockSize = BlobDefaultDownloadBlockSize } - if offset < 0 { - panic("offset option must be >= 0") - } - - if count < 0 { - panic("count option must be >= 0") - } - if count == CountToEnd { // If size not specified, calculate it if initialDownloadResponse != nil { count = initialDownloadResponse.ContentLength() - offset // if we have the length, use it } else { // If we don't have the length at all, get it - dr, err := blobURL.Download(ctx, 0, CountToEnd, ac, false) + dr, err := blobURL.Download(ctx, 0, CountToEnd, o.AccessConditions, false) if err != nil { return err } @@ -201,21 +194,20 @@ func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, co } } - if int64(len(b)) < count { - panic(fmt.Errorf("the buffer's size should be equal to or larger than the request count of bytes: %d", count)) - } - // Prepare and do parallel download. progress := int64(0) progressLock := &sync.Mutex{} err := doBatchTransfer(ctx, batchTransferOptions{ operationName: "downloadBlobToBuffer", - transferSize: count, + transferSize: count, chunkSize: o.BlockSize, parallelism: o.Parallelism, operation: func(chunkStart int64, count int64) error { - dr, err := blobURL.Download(ctx, chunkStart+ offset, count, ac, false) + dr, err := blobURL.Download(ctx, chunkStart+offset, count, o.AccessConditions, false) + if err != nil { + return err + } body := dr.Body(o.RetryReaderOptionsPerBlock) if o.Progress != nil { rangeProgress := int64(0) @@ -241,29 +233,24 @@ func downloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, co return nil } -// DownloadAzureFileToBuffer downloads an Azure file to a buffer with parallel. +// DownloadBlobToBuffer downloads an Azure blob to a buffer with parallel. // Offset and count are optional, pass 0 for both to download the entire blob. func DownloadBlobToBuffer(ctx context.Context, blobURL BlobURL, offset int64, count int64, - ac BlobAccessConditions, b []byte, o DownloadFromBlobOptions) error { - return downloadBlobToBuffer(ctx, blobURL, offset, count, ac, b, o, nil) + b []byte, o DownloadFromBlobOptions) error { + return downloadBlobToBuffer(ctx, blobURL, offset, count, b, o, nil) } -// DownloadBlobToFile downloads an Azure file to a local file. +// DownloadBlobToFile downloads an Azure blob to a local file. // The file would be truncated if the size doesn't match. // Offset and count are optional, pass 0 for both to download the entire blob. func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, count int64, - ac BlobAccessConditions, file *os.File, o DownloadFromBlobOptions) error { - // 1. Validate parameters. - if file == nil { - panic("file must not be nil") - } - - // 2. Calculate the size of the destination file + file *os.File, o DownloadFromBlobOptions) error { + // 1. Calculate the size of the destination file var size int64 if count == CountToEnd { - // Try to get Azure file's size - props, err := blobURL.GetProperties(ctx, ac) + // Try to get Azure blob's size + props, err := blobURL.GetProperties(ctx, o.AccessConditions) if err != nil { return err } @@ -272,7 +259,7 @@ func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, coun size = count } - // 3. Compare and try to resize local file's size if it doesn't match Azure file's size. + // 2. Compare and try to resize local file's size if it doesn't match Azure blob's size. stat, err := file.Stat() if err != nil { return err @@ -284,19 +271,18 @@ func DownloadBlobToFile(ctx context.Context, blobURL BlobURL, offset int64, coun } if size > 0 { - // 4. Set mmap and call DownloadAzureFileToBuffer. + // 3. Set mmap and call downloadBlobToBuffer. m, err := newMMF(file, true, 0, int(size)) if err != nil { return err } defer m.unmap() - return downloadBlobToBuffer(ctx, blobURL, offset, size, ac, m, o, nil) + return downloadBlobToBuffer(ctx, blobURL, offset, size, m, o, nil) } else { // if the blob's size is 0, there is no need in downloading it return nil } } - /////////////////////////////////////////////////////////////////////////////// // BatchTransferOptions identifies options used by doBatchTransfer. @@ -374,7 +360,10 @@ func UploadStreamToBlockBlob(ctx context.Context, reader io.Reader, blockBlobURL result, err := uploadStream(ctx, reader, UploadStreamOptions{BufferSize: o.BufferSize, MaxBuffers: o.MaxBuffers}, &uploadStreamToBlockBlobOptions{b: blockBlobURL, o: o, blockIDPrefix: newUUID()}) - return result.(CommonResponse), err + if err != nil { + return nil, err + } + return result.(CommonResponse), nil } type uploadStreamToBlockBlobOptions struct { @@ -390,13 +379,17 @@ func (t *uploadStreamToBlockBlobOptions) start(ctx context.Context) (interface{} } func (t *uploadStreamToBlockBlobOptions) chunk(ctx context.Context, num uint32, buffer []byte) error { - if num == 0 && len(buffer) < t.o.BufferSize { - // If whole payload fits in 1 block, don't stage it; End will upload it with 1 I/O operation + if num == 0 { t.firstBlock = buffer - return nil + + // If whole payload fits in 1 block, don't stage it; End will upload it with 1 I/O operation + // If the payload is exactly the same size as the buffer, there may be more content coming in. + if len(buffer) < t.o.BufferSize { + return nil + } } // Else, upload a staged block... - AtomicMorphUint32(&t.maxBlockNum, func(startVal uint32) (val uint32, morphResult interface{}) { + atomicMorphUint32(&t.maxBlockNum, func(startVal uint32) (val uint32, morphResult interface{}) { // Atomically remember (in t.numBlocks) the maximum block num we've ever seen if startVal < num { return num, nil @@ -404,19 +397,21 @@ func (t *uploadStreamToBlockBlobOptions) chunk(ctx context.Context, num uint32, return startVal, nil }) blockID := newUuidBlockID(t.blockIDPrefix).WithBlockNumber(num).ToBase64() - _, err := t.b.StageBlock(ctx, blockID, bytes.NewReader(buffer), LeaseAccessConditions{}) + _, err := t.b.StageBlock(ctx, blockID, bytes.NewReader(buffer), LeaseAccessConditions{}, nil) return err } func (t *uploadStreamToBlockBlobOptions) end(ctx context.Context) (interface{}, error) { - if t.maxBlockNum == 0 { + // If the first block had the exact same size as the buffer + // we would have staged it as a block thinking that there might be more data coming + if t.maxBlockNum == 0 && len(t.firstBlock) != t.o.BufferSize { // If whole payload fits in 1 block (block #0), upload it with 1 I/O operation return t.b.Upload(ctx, bytes.NewReader(t.firstBlock), t.o.BlobHTTPHeaders, t.o.Metadata, t.o.AccessConditions) } // Multiple blocks staged, commit them all now blockID := newUuidBlockID(t.blockIDPrefix) - blockIDs := make([]string, t.maxBlockNum + 1) + blockIDs := make([]string, t.maxBlockNum+1) for bn := uint32(0); bn <= t.maxBlockNum; bn++ { blockIDs[bn] = blockID.WithBlockNumber(bn).ToBase64() } @@ -436,7 +431,28 @@ type UploadStreamOptions struct { BufferSize int } +type firstErr struct { + lock sync.Mutex + finalError error +} + +func (fe *firstErr) set(err error) { + fe.lock.Lock() + if fe.finalError == nil { + fe.finalError = err + } + fe.lock.Unlock() +} + +func (fe *firstErr) get() (err error) { + fe.lock.Lock() + err = fe.finalError + fe.lock.Unlock() + return +} + func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, t iTransfer) (interface{}, error) { + firstErr := firstErr{} ctx, cancel := context.WithCancel(ctx) // New context so that any failure cancels everything defer cancel() wg := sync.WaitGroup{} // Used to know when all outgoing messages have finished processing @@ -463,9 +479,12 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, err := t.chunk(ctx, outgoingMsg.chunkNum, outgoingMsg.buffer) wg.Done() // Indicate this buffer was sent if nil != err { + // NOTE: finalErr could be assigned to multiple times here which is OK, + // some error will be returned. + firstErr.set(err) cancel() } - incoming <- outgoingMsg.buffer // The goroutine reading from the stream can use reuse this buffer now + incoming <- outgoingMsg.buffer // The goroutine reading from the stream can reuse this buffer now } }() } @@ -490,7 +509,7 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, buffer = <-incoming } n, err := io.ReadFull(reader, buffer) - if err != nil { + if err != nil { // Less than len(buffer) bytes were read buffer = buffer[:n] // Make slice match the # of read bytes } if len(buffer) > 0 { @@ -499,12 +518,21 @@ func uploadStream(ctx context.Context, reader io.Reader, o UploadStreamOptions, outgoing <- OutgoingMsg{chunkNum: c, buffer: buffer} } if err != nil { // The reader is done, no more outgoing buffers + if err == io.EOF || err == io.ErrUnexpectedEOF { + err = nil // This function does NOT return an error if io.ReadFull returns io.EOF or io.ErrUnexpectedEOF + } else { + firstErr.set(err) + } break } } // NOTE: Don't close the incoming channel because the outgoing goroutines post buffers into it when they are done close(outgoing) // Make all the outgoing goroutines terminate when this channel is empty wg.Wait() // Wait for all pending outgoing messages to complete - // After all blocks uploaded, commit them to the blob & return the result - return t.end(ctx) + err := firstErr.get() + if err == nil { + // If no error, after all blocks uploaded, commit them to the blob & return the result + return t.end(ctx) + } + return nil, err } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go similarity index 53% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go index e797a59c0b97..067939b1a42f 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/parsing_urls.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/parsing_urls.go @@ -1,6 +1,7 @@ package azblob import ( + "net" "net/url" "strings" ) @@ -14,13 +15,39 @@ const ( // existing URL into its parts by calling NewBlobURLParts(). You construct a URL from parts by calling URL(). // NOTE: Changing any SAS-related field requires computing a new SAS signature. type BlobURLParts struct { - Scheme string // Ex: "https://" - Host string // Ex: "account.blob.core.windows.net" - ContainerName string // "" if no container - BlobName string // "" if no blob - Snapshot string // "" if not a snapshot - SAS SASQueryParameters - UnparsedParams string + Scheme string // Ex: "https://" + Host string // Ex: "account.blob.core.windows.net", "10.132.141.33", "10.132.141.33:80" + IPEndpointStyleInfo IPEndpointStyleInfo + ContainerName string // "" if no container + BlobName string // "" if no blob + Snapshot string // "" if not a snapshot + SAS SASQueryParameters + UnparsedParams string +} + +// IPEndpointStyleInfo is used for IP endpoint style URL when working with Azure storage emulator. +// Ex: "https://10.132.141.33/accountname/containername" +type IPEndpointStyleInfo struct { + AccountName string // "" if not using IP endpoint style +} + +// isIPEndpointStyle checkes if URL's host is IP, in this case the storage account endpoint will be composed as: +// http(s)://IP(:port)/storageaccount/container/... +// As url's Host property, host could be both host or host:port +func isIPEndpointStyle(host string) bool { + if host == "" { + return false + } + if h, _, err := net.SplitHostPort(host); err == nil { + host = h + } + // For IPv6, there could be case where SplitHostPort fails for cannot finding port. + // In this case, eliminate the '[' and ']' in the URL. + // For details about IPv6 URL, please refer to https://tools.ietf.org/html/rfc2732 + if host[0] == '[' && host[len(host)-1] == ']' { + host = host[1 : len(host)-1] + } + return net.ParseIP(host) != nil } // NewBlobURLParts parses a URL initializing BlobURLParts' fields including any SAS-related & snapshot query parameters. Any other @@ -37,10 +64,17 @@ func NewBlobURLParts(u url.URL) BlobURLParts { if path[0] == '/' { path = path[1:] // If path starts with a slash, remove it } + if isIPEndpointStyle(up.Host) { + if accountEndIndex := strings.Index(path, "/"); accountEndIndex == -1 { // Slash not found; path has account name & no container name or blob + up.IPEndpointStyleInfo.AccountName = path + } else { + up.IPEndpointStyleInfo.AccountName = path[:accountEndIndex] // The account name is the part between the slashes + path = path[accountEndIndex+1:] // path refers to portion after the account name now (container & blob names) + } + } - // Find the next slash (if it exists) - containerEndIndex := strings.Index(path, "/") - if containerEndIndex == -1 { // Slash not found; path has container name & no blob name + containerEndIndex := strings.Index(path, "/") // Find the next slash (if it exists) + if containerEndIndex == -1 { // Slash not found; path has container name & no blob name up.ContainerName = path } else { up.ContainerName = path[:containerEndIndex] // The container name is the part between the slashes @@ -77,6 +111,9 @@ func (values caseInsensitiveValues) Get(key string) ([]string, bool) { // field contains the SAS, snapshot, and unparsed query parameters. func (up BlobURLParts) URL() url.URL { path := "" + if isIPEndpointStyle(up.Host) && up.IPEndpointStyleInfo.AccountName != "" { + path += "/" + up.IPEndpointStyleInfo.AccountName + } // Concatenate container & blob names (if they exist) if up.ContainerName != "" { path += "/" + up.ContainerName @@ -87,6 +124,11 @@ func (up BlobURLParts) URL() url.URL { rawQuery := up.UnparsedParams + //If no snapshot is initially provided, fill it in from the SAS query properties to help the user + if up.Snapshot == "" && !up.SAS.snapshotTime.IsZero() { + up.Snapshot = up.SAS.snapshotTime.Format(SnapshotTimeFormat) + } + // Concatenate blob snapshot query parameter (if it exists) if up.Snapshot != "" { if len(rawQuery) > 0 { diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go similarity index 65% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go index d0b12bc17a89..4d45d3ec7775 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/sas_service.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/sas_service.go @@ -8,14 +8,16 @@ import ( ) // BlobSASSignatureValues is used to generate a Shared Access Signature (SAS) for an Azure Storage container or blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/constructing-a-service-sas type BlobSASSignatureValues struct { Version string `param:"sv"` // If not specified, this defaults to SASVersion Protocol SASProtocol `param:"spr"` // See the SASProtocol* constants StartTime time.Time `param:"st"` // Not specified if IsZero ExpiryTime time.Time `param:"se"` // Not specified if IsZero - Permissions string `param:"sp"` // Create by initializing a ContainerSASPermissions or BlobSASPermissions and then call String() - IPRange IPRange `param:"sip"` - Identifier string `param:"si"` + SnapshotTime time.Time + Permissions string `param:"sp"` // Create by initializing a ContainerSASPermissions or BlobSASPermissions and then call String() + IPRange IPRange `param:"sip"` + Identifier string `param:"si"` ContainerName string BlobName string // Use "" to create a Container SAS CacheControl string // rscc @@ -25,19 +27,28 @@ type BlobSASSignatureValues struct { ContentType string // rsct } -// NewSASQueryParameters uses an account's shared key credential to sign this signature values to produce +// NewSASQueryParameters uses an account's StorageAccountCredential to sign this signature values to produce // the proper SAS query parameters. -func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) SASQueryParameters { - if sharedKeyCredential == nil { - panic("sharedKeyCredential can't be nil") +// See: StorageAccountCredential. Compatible with both UserDelegationCredential and SharedKeyCredential +func (v BlobSASSignatureValues) NewSASQueryParameters(credential StorageAccountCredential) (SASQueryParameters, error) { + resource := "c" + if credential == nil { + return SASQueryParameters{}, fmt.Errorf("cannot sign SAS query without StorageAccountCredential") } - resource := "c" - if v.BlobName == "" { + if !v.SnapshotTime.IsZero() { + resource = "bs" + //Make sure the permission characters are in the correct order + perms := &BlobSASPermissions{} + if err := perms.Parse(v.Permissions); err != nil { + return SASQueryParameters{}, err + } + v.Permissions = perms.String() + } else if v.BlobName == "" { // Make sure the permission characters are in the correct order perms := &ContainerSASPermissions{} if err := perms.Parse(v.Permissions); err != nil { - panic(err) + return SASQueryParameters{}, err } v.Permissions = perms.String() } else { @@ -45,32 +56,54 @@ func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Share // Make sure the permission characters are in the correct order perms := &BlobSASPermissions{} if err := perms.Parse(v.Permissions); err != nil { - panic(err) + return SASQueryParameters{}, err } v.Permissions = perms.String() } if v.Version == "" { v.Version = SASVersion } - startTime, expiryTime := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime) + startTime, expiryTime, snapshotTime := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, v.SnapshotTime) + + signedIdentifier := v.Identifier + + udk := credential.getUDKParams() + + if udk != nil { + udkStart, udkExpiry, _ := FormatTimesForSASSigning(udk.SignedStart, udk.SignedExpiry, time.Time{}) + //I don't like this answer to combining the functions + //But because signedIdentifier and the user delegation key strings share a place, this is an _OK_ way to do it. + signedIdentifier = strings.Join([]string{ + udk.SignedOid, + udk.SignedTid, + udkStart, + udkExpiry, + udk.SignedService, + udk.SignedVersion, + }, "\n") + } // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx stringToSign := strings.Join([]string{ v.Permissions, startTime, expiryTime, - getCanonicalName(sharedKeyCredential.AccountName(), v.ContainerName, v.BlobName), - v.Identifier, + getCanonicalName(credential.AccountName(), v.ContainerName, v.BlobName), + signedIdentifier, v.IPRange.String(), string(v.Protocol), v.Version, + resource, + snapshotTime, // signed timestamp v.CacheControl, // rscc v.ContentDisposition, // rscd v.ContentEncoding, // rsce v.ContentLanguage, // rscl v.ContentType}, // rsct "\n") - signature := sharedKeyCredential.ComputeHMACSHA256(stringToSign) + + signature := "" + signature = credential.ComputeHMACSHA256(stringToSign) p := SASQueryParameters{ // Common SAS parameters @@ -82,13 +115,30 @@ func (v BlobSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Share ipRange: v.IPRange, // Container/Blob-specific SAS parameters - resource: resource, - identifier: v.Identifier, + resource: resource, + identifier: v.Identifier, + cacheControl: v.CacheControl, + contentDisposition: v.ContentDisposition, + contentEncoding: v.ContentEncoding, + contentLanguage: v.ContentLanguage, + contentType: v.ContentType, + snapshotTime: v.SnapshotTime, // Calculated SAS signature signature: signature, } - return p + + //User delegation SAS specific parameters + if udk != nil { + p.signedOid = udk.SignedOid + p.signedTid = udk.SignedTid + p.signedStart = udk.SignedStart + p.signedExpiry = udk.SignedExpiry + p.signedService = udk.SignedService + p.signedVersion = udk.SignedVersion + } + + return p, nil } // getCanonicalName computes the canonical name for a container or blob resource for SAS signing. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/service_codes_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/service_codes_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/service_codes_blob.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go new file mode 100644 index 000000000000..b89b18bb4112 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/storage_account_credential.go @@ -0,0 +1,8 @@ +package azblob + +// StorageAccountCredential is a wrapper interface for SharedKeyCredential and UserDelegationCredential +type StorageAccountCredential interface { + AccountName() string + ComputeHMACSHA256(message string) (base64String string) + getUDKParams() *UserDelegationKey +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go similarity index 65% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go index b8711f5a1c43..b6bd6af112bc 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_append_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_append_blob.go @@ -45,7 +45,7 @@ func (ab AppendBlobURL) WithSnapshot(snapshot string) AppendBlobURL { // Create creates a 0-length append blob. Call AppendBlock to append data to an append blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. func (ab AppendBlobURL) Create(ctx context.Context, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*AppendBlobCreateResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers() return ab.abClient.Create(ctx, 0, nil, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, &h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition, @@ -56,17 +56,39 @@ func (ab AppendBlobURL) Create(ctx context.Context, h BlobHTTPHeaders, metadata // This method panics if the stream is not at position 0. // Note that the http client closes the body stream after the request is sent to the service. // For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block. -func (ab AppendBlobURL) AppendBlock(ctx context.Context, body io.ReadSeeker, ac BlobAccessConditions) (*AppendBlobAppendBlockResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() - ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := ac.AppendBlobAccessConditions.pointers() - return ab.abClient.AppendBlock(ctx, body, validateSeekableStreamAt0AndGetCount(body), nil, - ac.LeaseAccessConditions.pointers(), +func (ab AppendBlobURL) AppendBlock(ctx context.Context, body io.ReadSeeker, ac AppendBlobAccessConditions, transactionalMD5 []byte) (*AppendBlobAppendBlockResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := ac.AppendPositionAccessConditions.pointers() + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return ab.abClient.AppendBlock(ctx, body, count, nil, + transactionalMD5, ac.LeaseAccessConditions.pointers(), ifMaxSizeLessThanOrEqual, ifAppendPositionEqual, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } -// AppendBlobAccessConditions identifies append blob-specific access conditions which you optionally set. +// AppendBlockFromURL copies a new block of data from source URL to the end of the existing append blob. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/append-block-from-url. +func (ab AppendBlobURL) AppendBlockFromURL(ctx context.Context, sourceURL url.URL, offset int64, count int64, destinationAccessConditions AppendBlobAccessConditions, sourceAccessConditions ModifiedAccessConditions, transactionalMD5 []byte) (*AppendBlobAppendBlockFromURLResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := destinationAccessConditions.ModifiedAccessConditions.pointers() + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + ifAppendPositionEqual, ifMaxSizeLessThanOrEqual := destinationAccessConditions.AppendPositionAccessConditions.pointers() + return ab.abClient.AppendBlockFromURL(ctx, sourceURL.String(), 0, httpRange{offset: offset, count: count}.pointers(), + transactionalMD5, nil, destinationAccessConditions.LeaseAccessConditions.pointers(), + ifMaxSizeLessThanOrEqual, ifAppendPositionEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) +} + type AppendBlobAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions + AppendPositionAccessConditions +} + +// AppendPositionAccessConditions identifies append blob-specific access conditions which you optionally set. +type AppendPositionAccessConditions struct { // IfAppendPositionEqual ensures that the AppendBlock operation succeeds // only if the append position is equal to a value. // IfAppendPositionEqual=0 means no 'IfAppendPositionEqual' header specified. @@ -83,13 +105,7 @@ type AppendBlobAccessConditions struct { } // pointers is for internal infrastructure. It returns the fields as pointers. -func (ac AppendBlobAccessConditions) pointers() (iape *int64, imsltoe *int64) { - if ac.IfAppendPositionEqual < -1 { - panic("IfAppendPositionEqual can't be less than -1") - } - if ac.IfMaxSizeLessThanOrEqual < -1 { - panic("IfMaxSizeLessThanOrEqual can't be less than -1") - } +func (ac AppendPositionAccessConditions) pointers() (iape *int64, imsltoe *int64) { var zero int64 // defaults to 0 switch ac.IfAppendPositionEqual { case -1: diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go similarity index 90% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go index 96d85cbfd8d3..41d13402c99d 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go @@ -14,9 +14,6 @@ type BlobURL struct { // NewBlobURL creates a BlobURL object using the specified URL and request policy pipeline. func NewBlobURL(url url.URL, p pipeline.Pipeline) BlobURL { - if p == nil { - panic("p can't be nil") - } blobClient := newBlobClient(url, p) return BlobURL{blobClient: blobClient} } @@ -34,9 +31,6 @@ func (b BlobURL) String() string { // WithPipeline creates a new BlobURL object identical to the source but with the specified request policy pipeline. func (b BlobURL) WithPipeline(p pipeline.Pipeline) BlobURL { - if p == nil { - panic("p can't be nil") - } return NewBlobURL(b.blobClient.URL(), p) } @@ -64,13 +58,14 @@ func (b BlobURL) ToPageBlobURL() PageBlobURL { } // DownloadBlob reads a range of bytes from a blob. The response also includes the blob's properties and metadata. +// Passing azblob.CountToEnd (0) for count will download the blob from the offset to the end. // For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob. func (b BlobURL) Download(ctx context.Context, offset int64, count int64, ac BlobAccessConditions, rangeGetContentMD5 bool) (*DownloadResponse, error) { var xRangeGetContentMD5 *bool if rangeGetContentMD5 { xRangeGetContentMD5 = &rangeGetContentMD5 } - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() dr, err := b.blobClient.Download(ctx, nil, nil, httpRange{offset: offset, count: count}.pointers(), ac.LeaseAccessConditions.pointers(), xRangeGetContentMD5, @@ -90,7 +85,7 @@ func (b BlobURL) Download(ctx context.Context, offset int64, count int64, ac Blo // Note that deleting a blob also deletes all its snapshots. // For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-blob. func (b BlobURL) Delete(ctx context.Context, deleteOptions DeleteSnapshotsOptionType, ac BlobAccessConditions) (*BlobDeleteResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return b.blobClient.Delete(ctx, nil, nil, ac.LeaseAccessConditions.pointers(), deleteOptions, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } @@ -107,14 +102,14 @@ func (b BlobURL) Undelete(ctx context.Context) (*BlobUndeleteResponse, error) { // bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation // does not update the blob's ETag. // For detailed information about block blob level tiering see https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-storage-tiers. -func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType) (*BlobSetTierResponse, error) { - return b.blobClient.SetTier(ctx, tier, nil, nil) +func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType, lac LeaseAccessConditions) (*BlobSetTierResponse, error) { + return b.blobClient.SetTier(ctx, tier, nil, nil, lac.pointers()) } // GetBlobProperties returns the blob's properties. // For more information, see https://docs.microsoft.com/rest/api/storageservices/get-blob-properties. func (b BlobURL) GetProperties(ctx context.Context, ac BlobAccessConditions) (*BlobGetPropertiesResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return b.blobClient.GetProperties(ctx, nil, nil, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } @@ -122,7 +117,7 @@ func (b BlobURL) GetProperties(ctx context.Context, ac BlobAccessConditions) (*B // SetBlobHTTPHeaders changes a blob's HTTP headers. // For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. func (b BlobURL) SetHTTPHeaders(ctx context.Context, h BlobHTTPHeaders, ac BlobAccessConditions) (*BlobSetHTTPHeadersResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return b.blobClient.SetHTTPHeaders(ctx, nil, &h.CacheControl, &h.ContentType, h.ContentMD5, &h.ContentEncoding, &h.ContentLanguage, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, @@ -132,7 +127,7 @@ func (b BlobURL) SetHTTPHeaders(ctx context.Context, h BlobHTTPHeaders, ac BlobA // SetBlobMetadata changes a blob's metadata. // https://docs.microsoft.com/rest/api/storageservices/set-blob-metadata. func (b BlobURL) SetMetadata(ctx context.Context, metadata Metadata, ac BlobAccessConditions) (*BlobSetMetadataResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return b.blobClient.SetMetadata(ctx, nil, metadata, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } @@ -143,14 +138,14 @@ func (b BlobURL) CreateSnapshot(ctx context.Context, metadata Metadata, ac BlobA // CreateSnapshot does NOT panic if the user tries to create a snapshot using a URL that already has a snapshot query parameter // because checking this would be a performance hit for a VERY unusual path and I don't think the common case should suffer this // performance hit. - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return b.blobClient.CreateSnapshot(ctx, nil, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, ac.LeaseAccessConditions.pointers(), nil) } // AcquireLease acquires a lease on the blob for write and delete operations. The lease duration must be between // 15 to 60 seconds, or infinite (-1). // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac HTTPAccessConditions) (*BlobAcquireLeaseResponse, error) { +func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*BlobAcquireLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() return b.blobClient.AcquireLease(ctx, nil, &duration, &proposedID, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) @@ -158,7 +153,7 @@ func (b BlobURL) AcquireLease(ctx context.Context, proposedID string, duration i // RenewLease renews the blob's previously-acquired lease. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*BlobRenewLeaseResponse, error) { +func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobRenewLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() return b.blobClient.RenewLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) @@ -166,7 +161,7 @@ func (b BlobURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessCo // ReleaseLease releases the blob's previously-acquired lease. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*BlobReleaseLeaseResponse, error) { +func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*BlobReleaseLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() return b.blobClient.ReleaseLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) @@ -175,7 +170,7 @@ func (b BlobURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccess // BreakLease breaks the blob's previously-acquired lease (if it exists). Pass the LeaseBreakDefault (-1) // constant to break a fixed-duration lease when it expires or an infinite lease immediately. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac HTTPAccessConditions) (*BlobBreakLeaseResponse, error) { +func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac ModifiedAccessConditions) (*BlobBreakLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() return b.blobClient.BreakLease(ctx, nil, leasePeriodPointer(breakPeriodInSeconds), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) @@ -183,7 +178,7 @@ func (b BlobURL) BreakLease(ctx context.Context, breakPeriodInSeconds int32, ac // ChangeLease changes the blob's lease ID. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-blob. -func (b BlobURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac HTTPAccessConditions) (*BlobChangeLeaseResponse, error) { +func (b BlobURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*BlobChangeLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.pointers() return b.blobClient.ChangeLease(ctx, leaseID, proposedID, nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) @@ -201,10 +196,9 @@ func leasePeriodPointer(period int32) (p *int32) { // StartCopyFromURL copies the data at the source URL to a blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/copy-blob. -func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata Metadata, srcac BlobAccessConditions, dstac BlobAccessConditions) (*BlobStartCopyFromURLResponse, error) { - srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.HTTPAccessConditions.pointers() - dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.HTTPAccessConditions.pointers() - srcLeaseID := srcac.LeaseAccessConditions.pointers() +func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata Metadata, srcac ModifiedAccessConditions, dstac BlobAccessConditions) (*BlobStartCopyFromURLResponse, error) { + srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.pointers() + dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.ModifiedAccessConditions.pointers() dstLeaseID := dstac.LeaseAccessConditions.pointers() return b.blobClient.StartCopyFromURL(ctx, source.String(), nil, metadata, @@ -212,7 +206,7 @@ func (b BlobURL) StartCopyFromURL(ctx context.Context, source url.URL, metadata srcIfMatchETag, srcIfNoneMatchETag, dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag, - dstLeaseID, srcLeaseID, nil) + dstLeaseID, nil) } // AbortCopyFromURL stops a pending copy that was previously started and leaves a destination blob with 0 length and metadata. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go similarity index 84% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go index ec7028558763..25a9b324fc8c 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_block_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go @@ -12,7 +12,7 @@ import ( ) const ( - // BlockBlobMaxPutBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload. + // BlockBlobMaxUploadBlobBytes indicates the maximum number of bytes that can be sent in a call to Upload. BlockBlobMaxUploadBlobBytes = 256 * 1024 * 1024 // 256MB // BlockBlobMaxStageBlockBytes indicates the maximum number of bytes that can be sent in a call to StageBlock. @@ -30,9 +30,6 @@ type BlockBlobURL struct { // NewBlockBlobURL creates a BlockBlobURL object using the specified URL and request policy pipeline. func NewBlockBlobURL(url url.URL, p pipeline.Pipeline) BlockBlobURL { - if p == nil { - panic("p can't be nil") - } blobClient := newBlobClient(url, p) bbClient := newBlockBlobClient(url, p) return BlockBlobURL{BlobURL: BlobURL{blobClient: blobClient}, bbClient: bbClient} @@ -59,8 +56,12 @@ func (bb BlockBlobURL) WithSnapshot(snapshot string) BlockBlobURL { // Note that the http client closes the body stream after the request is sent to the service. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. func (bb BlockBlobURL) Upload(ctx context.Context, body io.ReadSeeker, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*BlockBlobUploadResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() - return bb.bbClient.Upload(ctx, body, validateSeekableStreamAt0AndGetCount(body), nil, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return bb.bbClient.Upload(ctx, body, count, nil, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, &h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, @@ -70,16 +71,20 @@ func (bb BlockBlobURL) Upload(ctx context.Context, body io.ReadSeeker, h BlobHTT // StageBlock uploads the specified block to the block blob's "staging area" to be later committed by a call to CommitBlockList. // Note that the http client closes the body stream after the request is sent to the service. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block. -func (bb BlockBlobURL) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeeker, ac LeaseAccessConditions) (*BlockBlobStageBlockResponse, error) { - return bb.bbClient.StageBlock(ctx, base64BlockID, validateSeekableStreamAt0AndGetCount(body), body, nil, ac.pointers(), nil) +func (bb BlockBlobURL) StageBlock(ctx context.Context, base64BlockID string, body io.ReadSeeker, ac LeaseAccessConditions, transactionalMD5 []byte) (*BlockBlobStageBlockResponse, error) { + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + return bb.bbClient.StageBlock(ctx, base64BlockID, count, body, transactionalMD5, nil, ac.pointers(), nil) } // StageBlockFromURL copies the specified block from a source URL to the block blob's "staging area" to be later committed by a call to CommitBlockList. // If count is CountToEnd (0), then data is read from specified offset to the end. // For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url. -func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID string, sourceURL url.URL, offset int64, count int64, ac LeaseAccessConditions) (*BlockBlobStageBlockFromURLResponse, error) { - sourceURLStr := sourceURL.String() - return bb.bbClient.StageBlockFromURL(ctx, base64BlockID, 0, &sourceURLStr, httpRange{offset: offset, count: count}.pointers(), nil, nil, ac.pointers(), nil) +func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID string, sourceURL url.URL, offset int64, count int64, destinationAccessConditions LeaseAccessConditions, sourceAccessConditions ModifiedAccessConditions) (*BlockBlobStageBlockFromURLResponse, error) { + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + return bb.bbClient.StageBlockFromURL(ctx, base64BlockID, 0, sourceURL.String(), httpRange{offset: offset, count: count}.pointers(), nil, nil, destinationAccessConditions.pointers(), sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) } // CommitBlockList writes a blob by specifying the list of block IDs that make up the blob. @@ -90,7 +95,7 @@ func (bb BlockBlobURL) StageBlockFromURL(ctx context.Context, base64BlockID stri // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-block-list. func (bb BlockBlobURL) CommitBlockList(ctx context.Context, base64BlockIDs []string, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*BlockBlobCommitBlockListResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return bb.bbClient.CommitBlockList(ctx, BlockLookupList{Latest: base64BlockIDs}, nil, &h.CacheControl, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, metadata, ac.LeaseAccessConditions.pointers(), &h.ContentDisposition, diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go similarity index 90% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go index 0fad9f07674e..48adf0804209 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_container.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_container.go @@ -3,6 +3,7 @@ package azblob import ( "bytes" "context" + "errors" "fmt" "net/url" @@ -16,9 +17,6 @@ type ContainerURL struct { // NewContainerURL creates a ContainerURL object using the specified URL and request policy pipeline. func NewContainerURL(url url.URL, p pipeline.Pipeline) ContainerURL { - if p == nil { - panic("p can't be nil") - } client := newContainerClient(url, p) return ContainerURL{client: client} } @@ -89,10 +87,10 @@ func (c ContainerURL) Create(ctx context.Context, metadata Metadata, publicAcces // For more information, see https://docs.microsoft.com/rest/api/storageservices/delete-container. func (c ContainerURL) Delete(ctx context.Context, ac ContainerAccessConditions) (*ContainerDeleteResponse, error) { if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { - panic("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") + return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") } - ifModifiedSince, ifUnmodifiedSince, _, _ := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers() return c.client.Delete(ctx, nil, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, nil) } @@ -109,9 +107,9 @@ func (c ContainerURL) GetProperties(ctx context.Context, ac LeaseAccessCondition // For more information, see https://docs.microsoft.com/rest/api/storageservices/set-container-metadata. func (c ContainerURL) SetMetadata(ctx context.Context, metadata Metadata, ac ContainerAccessConditions) (*ContainerSetMetadataResponse, error) { if !ac.IfUnmodifiedSince.IsZero() || ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { - panic("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values because they are ignored by the blob service") + return nil, errors.New("the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values because they are ignored by the blob service") } - ifModifiedSince, _, _, _ := ac.HTTPAccessConditions.pointers() + ifModifiedSince, _, _, _ := ac.ModifiedAccessConditions.pointers() return c.client.SetMetadata(ctx, nil, ac.LeaseAccessConditions.pointers(), metadata, ifModifiedSince, nil) } @@ -181,16 +179,16 @@ func (p *AccessPolicyPermission) Parse(s string) error { func (c ContainerURL) SetAccessPolicy(ctx context.Context, accessType PublicAccessType, si []SignedIdentifier, ac ContainerAccessConditions) (*ContainerSetAccessPolicyResponse, error) { if ac.IfMatch != ETagNone || ac.IfNoneMatch != ETagNone { - panic("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") + return nil, errors.New("the IfMatch and IfNoneMatch access conditions must have their default values because they are ignored by the service") } - ifModifiedSince, ifUnmodifiedSince, _, _ := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, _, _ := ac.ModifiedAccessConditions.pointers() return c.client.SetAccessPolicy(ctx, si, nil, ac.LeaseAccessConditions.pointers(), accessType, ifModifiedSince, ifUnmodifiedSince, nil) } // AcquireLease acquires a lease on the container for delete operations. The lease duration must be between 15 to 60 seconds, or infinite (-1). // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac HTTPAccessConditions) (*ContainerAcquireLeaseResponse, error) { +func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, duration int32, ac ModifiedAccessConditions) (*ContainerAcquireLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() return c.client.AcquireLease(ctx, nil, &duration, &proposedID, ifModifiedSince, ifUnmodifiedSince, nil) @@ -198,28 +196,28 @@ func (c ContainerURL) AcquireLease(ctx context.Context, proposedID string, durat // RenewLease renews the container's previously-acquired lease. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (c ContainerURL) RenewLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*ContainerRenewLeaseResponse, error) { +func (c ContainerURL) RenewLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerRenewLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() return c.client.RenewLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil) } // ReleaseLease releases the container's previously-acquired lease. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (c ContainerURL) ReleaseLease(ctx context.Context, leaseID string, ac HTTPAccessConditions) (*ContainerReleaseLeaseResponse, error) { +func (c ContainerURL) ReleaseLease(ctx context.Context, leaseID string, ac ModifiedAccessConditions) (*ContainerReleaseLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() return c.client.ReleaseLease(ctx, leaseID, nil, ifModifiedSince, ifUnmodifiedSince, nil) } // BreakLease breaks the container's previously-acquired lease (if it exists). // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (c ContainerURL) BreakLease(ctx context.Context, period int32, ac HTTPAccessConditions) (*ContainerBreakLeaseResponse, error) { +func (c ContainerURL) BreakLease(ctx context.Context, period int32, ac ModifiedAccessConditions) (*ContainerBreakLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() return c.client.BreakLease(ctx, nil, leasePeriodPointer(period), ifModifiedSince, ifUnmodifiedSince, nil) } // ChangeLease changes the container's lease ID. // For more information, see https://docs.microsoft.com/rest/api/storageservices/lease-container. -func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac HTTPAccessConditions) (*ContainerChangeLeaseResponse, error) { +func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedID string, ac ModifiedAccessConditions) (*ContainerChangeLeaseResponse, error) { ifModifiedSince, ifUnmodifiedSince, _, _ := ac.pointers() return c.client.ChangeLease(ctx, leaseID, proposedID, nil, ifModifiedSince, ifUnmodifiedSince, nil) } @@ -231,7 +229,7 @@ func (c ContainerURL) ChangeLease(ctx context.Context, leaseID string, proposedI // For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. func (c ContainerURL) ListBlobsFlatSegment(ctx context.Context, marker Marker, o ListBlobsSegmentOptions) (*ListBlobsFlatSegmentResponse, error) { prefix, include, maxResults := o.pointers() - return c.client.ListBlobFlatSegment(ctx, prefix, marker.val, maxResults, include, nil, nil) + return c.client.ListBlobFlatSegment(ctx, prefix, marker.Val, maxResults, include, nil, nil) } // ListBlobsHierarchySegment returns a single segment of blobs starting from the specified Marker. Use an empty @@ -241,10 +239,10 @@ func (c ContainerURL) ListBlobsFlatSegment(ctx context.Context, marker Marker, o // For more information, see https://docs.microsoft.com/rest/api/storageservices/list-blobs. func (c ContainerURL) ListBlobsHierarchySegment(ctx context.Context, marker Marker, delimiter string, o ListBlobsSegmentOptions) (*ListBlobsHierarchySegmentResponse, error) { if o.Details.Snapshots { - panic("snapshots are not supported in this listing operation") + return nil, errors.New("snapshots are not supported in this listing operation") } prefix, include, maxResults := o.pointers() - return c.client.ListBlobHierarchySegment(ctx, delimiter, prefix, marker.val, maxResults, include, nil, nil) + return c.client.ListBlobHierarchySegment(ctx, delimiter, prefix, marker.Val, maxResults, include, nil, nil) } // ListBlobsSegmentOptions defines options available when calling ListBlobs. @@ -264,9 +262,6 @@ func (o *ListBlobsSegmentOptions) pointers() (prefix *string, include []ListBlob } include = o.Details.slice() if o.MaxResults != 0 { - if o.MaxResults < 0 { - panic("MaxResults must be >= 0") - } maxResults = &o.MaxResults } return diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go similarity index 74% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go index fa87ef8527e2..8ee34c05a645 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_page_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go @@ -26,9 +26,6 @@ type PageBlobURL struct { // NewPageBlobURL creates a PageBlobURL object using the specified URL and request policy pipeline. func NewPageBlobURL(url url.URL, p pipeline.Pipeline) PageBlobURL { - if p == nil { - panic("p can't be nil") - } blobClient := newBlobClient(url, p) pbClient := newPageBlobClient(url, p) return PageBlobURL{BlobURL: BlobURL{blobClient: blobClient}, pbClient: pbClient} @@ -47,39 +44,54 @@ func (pb PageBlobURL) WithSnapshot(snapshot string) PageBlobURL { return NewPageBlobURL(p.URL(), pb.blobClient.Pipeline()) } -// CreatePageBlob creates a page blob of the specified length. Call PutPage to upload data data to a page blob. +// Create creates a page blob of the specified length. Call PutPage to upload data data to a page blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-blob. func (pb PageBlobURL) Create(ctx context.Context, size int64, sequenceNumber int64, h BlobHTTPHeaders, metadata Metadata, ac BlobAccessConditions) (*PageBlobCreateResponse, error) { - if sequenceNumber < 0 { - panic("sequenceNumber must be greater than or equal to 0") - } - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() - return pb.pbClient.Create(ctx, 0, nil, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + return pb.pbClient.Create(ctx, 0, size, nil, &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, h.ContentMD5, &h.CacheControl, metadata, ac.LeaseAccessConditions.pointers(), - &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, &size, &sequenceNumber, nil) + &h.ContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, &sequenceNumber, nil) } // UploadPages writes 1 or more pages to the page blob. The start offset and the stream size must be a multiple of 512 bytes. // This method panics if the stream is not at position 0. // Note that the http client closes the body stream after the request is sent to the service. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. -func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.ReadSeeker, ac BlobAccessConditions) (*PageBlobUploadPagesResponse, error) { - count := validateSeekableStreamAt0AndGetCount(body) - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() - ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.PageBlobAccessConditions.pointers() - return pb.pbClient.UploadPages(ctx, body, count, nil, +func (pb PageBlobURL) UploadPages(ctx context.Context, offset int64, body io.ReadSeeker, ac PageBlobAccessConditions, transactionalMD5 []byte) (*PageBlobUploadPagesResponse, error) { + count, err := validateSeekableStreamAt0AndGetCount(body) + if err != nil { + return nil, err + } + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers() + return pb.pbClient.UploadPages(ctx, body, count, transactionalMD5, nil, PageRange{Start: offset, End: offset + count - 1}.pointers(), ac.LeaseAccessConditions.pointers(), ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } +// UploadPagesFromURL copies 1 or more pages from a source URL to the page blob. +// The sourceOffset specifies the start offset of source data to copy from. +// The destOffset specifies the start offset of data in page blob will be written to. +// The count must be a multiple of 512 bytes. +// For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page-from-url. +func (pb PageBlobURL) UploadPagesFromURL(ctx context.Context, sourceURL url.URL, sourceOffset int64, destOffset int64, count int64, transactionalMD5 []byte, destinationAccessConditions PageBlobAccessConditions, sourceAccessConditions ModifiedAccessConditions) (*PageBlobUploadPagesFromURLResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := destinationAccessConditions.ModifiedAccessConditions.pointers() + sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag := sourceAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := destinationAccessConditions.SequenceNumberAccessConditions.pointers() + return pb.pbClient.UploadPagesFromURL(ctx, sourceURL.String(), *PageRange{Start: sourceOffset, End: sourceOffset + count - 1}.pointers(), 0, + *PageRange{Start: destOffset, End: destOffset + count - 1}.pointers(), transactionalMD5, nil, destinationAccessConditions.LeaseAccessConditions.pointers(), + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual, + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatchETag, sourceIfNoneMatchETag, nil) +} + // ClearPages frees the specified pages from the page blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/put-page. -func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, ac BlobAccessConditions) (*PageBlobClearPagesResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() - ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.PageBlobAccessConditions.pointers() +func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, ac PageBlobAccessConditions) (*PageBlobClearPagesResponse, error) { + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() + ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, ifSequenceNumberEqual := ac.SequenceNumberAccessConditions.pointers() return pb.pbClient.ClearPages(ctx, 0, nil, PageRange{Start: offset, End: offset + count - 1}.pointers(), ac.LeaseAccessConditions.pointers(), @@ -90,7 +102,7 @@ func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, // GetPageRanges returns the list of valid page ranges for a page blob or snapshot of a page blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. func (pb PageBlobURL) GetPageRanges(ctx context.Context, offset int64, count int64, ac BlobAccessConditions) (*PageList, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return pb.pbClient.GetPageRanges(ctx, nil, nil, httpRange{offset: offset, count: count}.pointers(), ac.LeaseAccessConditions.pointers(), @@ -100,7 +112,7 @@ func (pb PageBlobURL) GetPageRanges(ctx context.Context, offset int64, count int // GetPageRangesDiff gets the collection of page ranges that differ between a specified snapshot and this page blob. // For more information, see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges. func (pb PageBlobURL) GetPageRangesDiff(ctx context.Context, offset int64, count int64, prevSnapshot string, ac BlobAccessConditions) (*PageList, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return pb.pbClient.GetPageRangesDiff(ctx, nil, nil, &prevSnapshot, httpRange{offset: offset, count: count}.pointers(), ac.LeaseAccessConditions.pointers(), @@ -111,10 +123,7 @@ func (pb PageBlobURL) GetPageRangesDiff(ctx context.Context, offset int64, count // Resize resizes the page blob to the specified size (which must be a multiple of 512). // For more information, see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties. func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessConditions) (*PageBlobResizeResponse, error) { - if size%PageBlobPageBytes != 0 { - panic("Size must be a multiple of PageBlobPageBytes (512)") - } - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() return pb.pbClient.Resize(ctx, size, nil, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } @@ -122,14 +131,11 @@ func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessCondi // SetSequenceNumber sets the page blob's sequence number. func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceNumberActionType, sequenceNumber int64, ac BlobAccessConditions) (*PageBlobUpdateSequenceNumberResponse, error) { - if sequenceNumber < 0 { - panic("sequenceNumber must be greater than or equal to 0") - } sn := &sequenceNumber if action == SequenceNumberActionIncrement { sn = nil } - ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers() return pb.pbClient.UpdateSequenceNumber(ctx, action, nil, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sn, nil) @@ -141,37 +147,28 @@ func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceN // For more information, see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob and // https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots. func (pb PageBlobURL) StartCopyIncremental(ctx context.Context, source url.URL, snapshot string, ac BlobAccessConditions) (*PageBlobCopyIncrementalResponse, error) { - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.HTTPAccessConditions.pointers() + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag := ac.ModifiedAccessConditions.pointers() qp := source.Query() qp.Set("snapshot", snapshot) source.RawQuery = qp.Encode() - return pb.pbClient.CopyIncremental(ctx, source.String(), nil, nil, + return pb.pbClient.CopyIncremental(ctx, source.String(), nil, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } func (pr PageRange) pointers() *string { - if pr.Start < 0 { - panic("PageRange's Start value must be greater than or equal to 0") - } - if pr.End <= 0 { - panic("PageRange's End value must be greater than 0") - } - if pr.Start%PageBlobPageBytes != 0 { - panic("PageRange's Start value must be a multiple of 512") - } - if pr.End%PageBlobPageBytes != (PageBlobPageBytes - 1) { - panic("PageRange's End value must be 1 less than a multiple of 512") - } - if pr.End <= pr.Start { - panic("PageRange's End value must be after the start") - } endOffset := strconv.FormatInt(int64(pr.End), 10) asString := fmt.Sprintf("bytes=%v-%s", pr.Start, endOffset) return &asString } -// PageBlobAccessConditions identifies page blob-specific access conditions which you optionally set. type PageBlobAccessConditions struct { + ModifiedAccessConditions + LeaseAccessConditions + SequenceNumberAccessConditions +} + +// SequenceNumberAccessConditions identifies page blob-specific access conditions which you optionally set. +type SequenceNumberAccessConditions struct { // IfSequenceNumberLessThan ensures that the page blob operation succeeds // only if the blob's sequence number is less than a value. // IfSequenceNumberLessThan=0 means no 'IfSequenceNumberLessThan' header specified. @@ -195,17 +192,7 @@ type PageBlobAccessConditions struct { } // pointers is for internal infrastructure. It returns the fields as pointers. -func (ac PageBlobAccessConditions) pointers() (snltoe *int64, snlt *int64, sne *int64) { - if ac.IfSequenceNumberLessThan < -1 { - panic("Ifsequencenumberlessthan can't be less than -1") - } - if ac.IfSequenceNumberLessThanOrEqual < -1 { - panic("IfSequenceNumberLessThanOrEqual can't be less than -1") - } - if ac.IfSequenceNumberEqual < -1 { - panic("IfSequenceNumberEqual can't be less than -1") - } - +func (ac SequenceNumberAccessConditions) pointers() (snltoe *int64, snlt *int64, sne *int64) { var zero int64 // Defaults to 0 switch ac.IfSequenceNumberLessThan { case -1: diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go similarity index 84% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go index d49a20846b3e..5974bc3a4225 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/url_service.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_service.go @@ -23,13 +23,21 @@ type ServiceURL struct { // NewServiceURL creates a ServiceURL object using the specified URL and request policy pipeline. func NewServiceURL(primaryURL url.URL, p pipeline.Pipeline) ServiceURL { - if p == nil { - panic("p can't be nil") - } client := newServiceClient(primaryURL, p) return ServiceURL{client: client} } +//GetUserDelegationCredential obtains a UserDelegationKey object using the base ServiceURL object. +//OAuth is required for this call, as well as any role that can delegate access to the storage account. +func (s ServiceURL) GetUserDelegationCredential(ctx context.Context, info KeyInfo, timeout *int32, requestID *string) (UserDelegationCredential, error) { + sc := newServiceClient(s.client.url, s.client.p) + udk, err := sc.GetUserDelegationKey(ctx, info, timeout, requestID) + if err != nil { + return UserDelegationCredential{}, err + } + return NewUserDelegationCredential(strings.Split(s.client.url.Host, ".")[0], *udk), nil +} + // URL returns the URL endpoint used by the ServiceURL object. func (s ServiceURL) URL() url.URL { return s.client.URL() @@ -81,16 +89,16 @@ func appendToURLPath(u url.URL, name string) url.URL { // After getting a segment, process it, and then call ListContainersFlatSegment again (passing the the // previously-returned Marker) to get the next segment. For more information, see // https://docs.microsoft.com/rest/api/storageservices/list-containers2. -func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o ListContainersSegmentOptions) (*ListContainersResponse, error) { +func (s ServiceURL) ListContainersSegment(ctx context.Context, marker Marker, o ListContainersSegmentOptions) (*ListContainersSegmentResponse, error) { prefix, include, maxResults := o.pointers() - return s.client.ListContainersSegment(ctx, prefix, marker.val, maxResults, include, nil, nil) + return s.client.ListContainersSegment(ctx, prefix, marker.Val, maxResults, include, nil, nil) } // ListContainersOptions defines options available when calling ListContainers. type ListContainersSegmentOptions struct { Detail ListContainersDetail // No IncludeType header is produced if "" - Prefix string // No Prefix header is produced if "" - MaxResults int32 // 0 means unspecified + Prefix string // No Prefix header is produced if "" + MaxResults int32 // 0 means unspecified // TODO: update swagger to generate this type? } @@ -99,9 +107,6 @@ func (o *ListContainersSegmentOptions) pointers() (prefix *string, include ListC prefix = &o.Prefix } if o.MaxResults != 0 { - if o.MaxResults < 0 { - panic("MaxResults must be >= 0") - } maxResults = &o.MaxResults } include = ListContainersIncludeType(o.Detail.string()) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go new file mode 100644 index 000000000000..9fcbbc4092cc --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/user_delegation_credential.go @@ -0,0 +1,38 @@ +package azblob + +import ( + "crypto/hmac" + "crypto/sha256" + "encoding/base64" +) + +// NewUserDelegationCredential creates a new UserDelegationCredential using a Storage account's name and a user delegation key from it +func NewUserDelegationCredential(accountName string, key UserDelegationKey) UserDelegationCredential { + return UserDelegationCredential{ + accountName: accountName, + accountKey: key, + } +} + +type UserDelegationCredential struct { + accountName string + accountKey UserDelegationKey +} + +// AccountName returns the Storage account's name +func (f UserDelegationCredential) AccountName() string { + return f.accountName +} + +// ComputeHMAC +func (f UserDelegationCredential) ComputeHMACSHA256(message string) (base64String string) { + bytes, _ := base64.StdEncoding.DecodeString(f.accountKey.Value) + h := hmac.New(sha256.New, bytes) + h.Write([]byte(message)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +// Private method to return important parameters for NewSASQueryParameters +func (f UserDelegationCredential) getUDKParams() *UserDelegationKey { + return &f.accountKey +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go new file mode 100644 index 000000000000..bcc7b956c5e7 --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go @@ -0,0 +1,3 @@ +package azblob + +const serviceLibVersion = "0.7" diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_anonymous.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_anonymous.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_anonymous.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go similarity index 86% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go index 51da1627797a..3e27552f24ee 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_shared_key.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_shared_key.go @@ -6,6 +6,7 @@ import ( "crypto/hmac" "crypto/sha256" "encoding/base64" + "errors" "net/http" "net/url" "sort" @@ -17,12 +18,12 @@ import ( // NewSharedKeyCredential creates an immutable SharedKeyCredential containing the // storage account's name and either its primary or secondary key. -func NewSharedKeyCredential(accountName, accountKey string) *SharedKeyCredential { +func NewSharedKeyCredential(accountName, accountKey string) (*SharedKeyCredential, error) { bytes, err := base64.StdEncoding.DecodeString(accountKey) if err != nil { - panic(err) + return &SharedKeyCredential{}, err } - return &SharedKeyCredential{accountName: accountName, accountKey: bytes} + return &SharedKeyCredential{accountName: accountName, accountKey: bytes}, nil } // SharedKeyCredential contains an account's name and its primary or secondary key. @@ -38,6 +39,15 @@ func (f SharedKeyCredential) AccountName() string { return f.accountName } +func (f SharedKeyCredential) getAccountKey() []byte { + return f.accountKey +} + +// noop function to satisfy StorageAccountCredential interface +func (f SharedKeyCredential) getUDKParams() *UserDelegationKey { + return nil +} + // New creates a credential policy object. func (f *SharedKeyCredential) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { return pipeline.PolicyFunc(func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { @@ -45,7 +55,10 @@ func (f *SharedKeyCredential) New(next pipeline.Policy, po *pipeline.PolicyOptio if d := request.Header.Get(headerXmsDate); d == "" { request.Header[headerXmsDate] = []string{time.Now().UTC().Format(http.TimeFormat)} } - stringToSign := f.buildStringToSign(request) + stringToSign, err := f.buildStringToSign(request) + if err != nil { + return nil, err + } signature := f.ComputeHMACSHA256(stringToSign) authHeader := strings.Join([]string{"SharedKey ", f.accountName, ":", signature}, "") request.Header[headerAuthorization] = []string{authHeader} @@ -84,13 +97,13 @@ const ( ) // ComputeHMACSHA256 generates a hash signature for an HTTP request or for a SAS. -func (f *SharedKeyCredential) ComputeHMACSHA256(message string) (base64String string) { +func (f SharedKeyCredential) ComputeHMACSHA256(message string) (base64String string) { h := hmac.New(sha256.New, f.accountKey) h.Write([]byte(message)) return base64.StdEncoding.EncodeToString(h.Sum(nil)) } -func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string { +func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) (string, error) { // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services headers := request.Header contentLength := headers.Get(headerContentLength) @@ -98,6 +111,11 @@ func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string contentLength = "" } + canonicalizedResource, err := f.buildCanonicalizedResource(request.URL) + if err != nil { + return "", err + } + stringToSign := strings.Join([]string{ request.Method, headers.Get(headerContentEncoding), @@ -112,9 +130,9 @@ func (f *SharedKeyCredential) buildStringToSign(request pipeline.Request) string headers.Get(headerIfUnmodifiedSince), headers.Get(headerRange), buildCanonicalizedHeader(headers), - f.buildCanonicalizedResource(request.URL), + canonicalizedResource, }, "\n") - return stringToSign + return stringToSign, nil } func buildCanonicalizedHeader(headers http.Header) string { @@ -146,7 +164,7 @@ func buildCanonicalizedHeader(headers http.Header) string { return string(ch.Bytes()) } -func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string { +func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) (string, error) { // https://docs.microsoft.com/en-us/rest/api/storageservices/authentication-for-the-azure-storage-services cr := bytes.NewBufferString("/") cr.WriteString(f.accountName) @@ -164,7 +182,7 @@ func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string { // params is a map[string][]string; param name is key; params values is []string params, err := url.ParseQuery(u.RawQuery) // Returns URL decoded values if err != nil { - panic(err) + return "", errors.New("parsing query parameters must succeed, otherwise there might be serious problems in the SDK/generated code") } if len(params) > 0 { // There is at least 1 query parameter @@ -183,5 +201,5 @@ func (f *SharedKeyCredential) buildCanonicalizedResource(u *url.URL) string { cr.WriteString("\n" + paramName + ":" + strings.Join(paramValues, ",")) } } - return string(cr.Bytes()) + return string(cr.Bytes()), nil } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go similarity index 76% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go index d7f925d39818..7e78d25f15ac 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_credential_token.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_credential_token.go @@ -2,6 +2,7 @@ package azblob import ( "context" + "errors" "sync/atomic" "runtime" @@ -11,6 +12,10 @@ import ( "github.com/Azure/azure-pipeline-go/pipeline" ) +// TokenRefresher represents a callback method that you write; this method is called periodically +// so you can refresh the token credential's value. +type TokenRefresher func(credential TokenCredential) time.Duration + // TokenCredential represents a token credential (which is also a pipeline.Factory). type TokenCredential interface { Credential @@ -20,12 +25,15 @@ type TokenCredential interface { // NewTokenCredential creates a token credential for use with role-based access control (RBAC) access to Azure Storage // resources. You initialize the TokenCredential with an initial token value. If you pass a non-nil value for -// tokenRefresher, then the function you pass will be called immediately (so it can refresh and change the -// TokenCredential's token value by calling SetToken; your tokenRefresher function must return a time.Duration +// tokenRefresher, then the function you pass will be called immediately so it can refresh and change the +// TokenCredential's token value by calling SetToken. Your tokenRefresher function must return a time.Duration // indicating how long the TokenCredential object should wait before calling your tokenRefresher function again. -func NewTokenCredential(initialToken string, tokenRefresher func(credential TokenCredential) time.Duration) TokenCredential { +// If your tokenRefresher callback fails to refresh the token, you can return a duration of 0 to stop your +// TokenCredential object from ever invoking tokenRefresher again. Also, oen way to deal with failing to refresh a +// token is to cancel a context.Context object used by requests that have the TokenCredential object in their pipeline. +func NewTokenCredential(initialToken string, tokenRefresher TokenRefresher) TokenCredential { tc := &tokenCredential{} - tc.SetToken(initialToken) // We dont' set it above to guarantee atomicity + tc.SetToken(initialToken) // We don't set it above to guarantee atomicity if tokenRefresher == nil { return tc // If no callback specified, return the simple tokenCredential } @@ -68,7 +76,7 @@ type tokenCredential struct { // The members below are only used if the user specified a tokenRefresher callback function. timer *time.Timer - tokenRefresher func(c TokenCredential) time.Duration + tokenRefresher TokenRefresher lock sync.Mutex stopped bool } @@ -84,7 +92,7 @@ func (f *tokenCredential) SetToken(token string) { f.token.Store(token) } // startRefresh calls refresh which immediately calls tokenRefresher // and then starts a timer to call tokenRefresher in the future. -func (f *tokenCredential) startRefresh(tokenRefresher func(c TokenCredential) time.Duration) { +func (f *tokenCredential) startRefresh(tokenRefresher TokenRefresher) { f.tokenRefresher = tokenRefresher f.stopped = false // In case user calls StartRefresh, StopRefresh, & then StartRefresh again f.refresh() @@ -95,11 +103,13 @@ func (f *tokenCredential) startRefresh(tokenRefresher func(c TokenCredential) ti // in order to refresh the token again in the future. func (f *tokenCredential) refresh() { d := f.tokenRefresher(f) // Invoke the user's refresh callback outside of the lock - f.lock.Lock() - if !f.stopped { - f.timer = time.AfterFunc(d, f.refresh) + if d > 0 { // If duration is 0 or negative, refresher wants to not be called again + f.lock.Lock() + if !f.stopped { + f.timer = time.AfterFunc(d, f.refresh) + } + f.lock.Unlock() } - f.lock.Unlock() } // stopRefresh stops any pending timer and sets stopped field to true to prevent @@ -118,7 +128,8 @@ func (f *tokenCredential) stopRefresh() { func (f *tokenCredential) New(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.Policy { return pipeline.PolicyFunc(func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) { if request.URL.Scheme != "https" { - panic("Token credentials require a URL using the https protocol scheme.") + // HTTPS must be used, otherwise the tokens are at the risk of being exposed + return nil, errors.New("token credentials require a URL using the https protocol scheme") } request.Header[headerAuthorization] = []string{"Bearer " + f.Token()} return next.Do(ctx, request) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go similarity index 75% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go index b6c668ac6480..3e8c7cba3dd6 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_unix.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_unix.go @@ -1,4 +1,4 @@ -// +build linux darwin freebsd +// +build linux darwin freebsd openbsd netbsd dragonfly package azblob @@ -22,6 +22,6 @@ func (m *mmf) unmap() { err := syscall.Munmap(*m) *m = nil if err != nil { - panic(err) + panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption") } } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go similarity index 90% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go index 1a6e83dad9b2..2743644e16dc 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_mmf_windows.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_mmf_windows.go @@ -33,6 +33,6 @@ func (m *mmf) unmap() { *m = mmf{} err := syscall.UnmapViewOfFile(addr) if err != nil { - panic(err) + panic("if we are unable to unmap the memory-mapped file, there is serious concern for memory corruption") } } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go similarity index 82% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go index af5fcd6c7f88..7c249a298d4d 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_pipeline.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_pipeline.go @@ -17,14 +17,13 @@ type PipelineOptions struct { // Telemetry configures the built-in telemetry policy behavior. Telemetry TelemetryOptions + + // HTTPSender configures the sender of HTTP requests + HTTPSender pipeline.Factory } // NewPipeline creates a Pipeline using the specified credentials and options. func NewPipeline(c Credential, o PipelineOptions) pipeline.Pipeline { - if c == nil { - panic("c can't be nil") - } - // Closest to API goes first; closest to the wire goes last f := []pipeline.Factory{ NewTelemetryPolicyFactory(o.Telemetry), @@ -39,8 +38,9 @@ func NewPipeline(c Credential, o PipelineOptions) pipeline.Pipeline { f = append(f, c) } f = append(f, - pipeline.MethodFactoryMarker(), // indicates at what stage in the pipeline the method factory is invoked - NewRequestLogPolicyFactory(o.RequestLog)) + NewRequestLogPolicyFactory(o.RequestLog), + pipeline.MethodFactoryMarker()) // indicates at what stage in the pipeline the method factory is invoked + - return pipeline.NewPipeline(f, pipeline.Options{HTTPSender: nil, Log: o.Log}) + return pipeline.NewPipeline(f, pipeline.Options{HTTPSender: o.HTTPSender, Log: o.Log}) } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go similarity index 80% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go index 23d559eb7c43..0a362ea8b684 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_request_log.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go @@ -109,7 +109,8 @@ func NewRequestLogPolicyFactory(o RequestLogOptions) pipeline.Factory { }) } -func redactSigQueryParam(rawQuery string) (bool, string) { +// RedactSigQueryParam redacts the 'sig' query parameter in URL's raw query to protect secret. +func RedactSigQueryParam(rawQuery string) (bool, string) { rawQuery = strings.ToLower(rawQuery) // lowercase the string so we can look for ?sig= and &sig= sigFound := strings.Contains(rawQuery, "?sig=") if !sigFound { @@ -130,12 +131,13 @@ func redactSigQueryParam(rawQuery string) (bool, string) { func prepareRequestForLogging(request pipeline.Request) *http.Request { req := request - if sigFound, rawQuery := redactSigQueryParam(req.URL.RawQuery); sigFound { + if sigFound, rawQuery := RedactSigQueryParam(req.URL.RawQuery); sigFound { // Make copy so we don't destroy the query parameters we actually need to send in the request req = request.Copy() req.Request.URL.RawQuery = rawQuery } - return req.Request + + return prepareRequestForServiceLogging(req) } func stack() []byte { @@ -148,3 +150,33 @@ func stack() []byte { buf = make([]byte, 2*len(buf)) } } + +/////////////////////////////////////////////////////////////////////////////////////// +// Redact phase useful for blob and file service only. For other services, +// this method can directly return request.Request. +/////////////////////////////////////////////////////////////////////////////////////// +func prepareRequestForServiceLogging(request pipeline.Request) *http.Request { + req := request + if exist, key := doesHeaderExistCaseInsensitive(req.Header, xMsCopySourceHeader); exist { + req = request.Copy() + url, err := url.Parse(req.Header.Get(key)) + if err == nil { + if sigFound, rawQuery := RedactSigQueryParam(url.RawQuery); sigFound { + url.RawQuery = rawQuery + req.Header.Set(xMsCopySourceHeader, url.String()) + } + } + } + return req.Request +} + +const xMsCopySourceHeader = "x-ms-copy-source" + +func doesHeaderExistCaseInsensitive(header http.Header, key string) (bool, string) { + for keyInHeader := range header { + if strings.EqualFold(keyInHeader, key) { + return true, keyInHeader + } + } + return false, "" +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go similarity index 69% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go index 4c885ea1aa35..00531fee0b26 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_retry.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_retry.go @@ -2,15 +2,17 @@ package azblob import ( "context" + "errors" + "io" + "io/ioutil" "math/rand" "net" "net/http" "strconv" + "strings" "time" "github.com/Azure/azure-pipeline-go/pipeline" - "io/ioutil" - "io" ) // RetryPolicy tells the pipeline what kind of retry policy to use. See the RetryPolicy* constants. @@ -57,30 +59,21 @@ type RetryOptions struct { // If RetryReadsFromSecondaryHost is "" (the default) then operations are not retried against another host. // NOTE: Before setting this field, make sure you understand the issues around reading stale & potentially-inconsistent // data at this webpage: https://docs.microsoft.com/en-us/azure/storage/common/storage-designing-ha-apps-with-ragrs - RetryReadsFromSecondaryHost string // Comment this our for non-Blob SDKs + RetryReadsFromSecondaryHost string // Comment this our for non-Blob SDKs } func (o RetryOptions) retryReadsFromSecondaryHost() string { - return o.RetryReadsFromSecondaryHost // This is for the Blob SDK only + return o.RetryReadsFromSecondaryHost // This is for the Blob SDK only //return "" // This is for non-blob SDKs } func (o RetryOptions) defaults() RetryOptions { - if o.Policy != RetryPolicyExponential && o.Policy != RetryPolicyFixed { - panic("RetryPolicy must be RetryPolicyExponential or RetryPolicyFixed") - } - if o.MaxTries < 0 { - panic("MaxTries must be >= 0") - } - if o.TryTimeout < 0 || o.RetryDelay < 0 || o.MaxRetryDelay < 0 { - panic("TryTimeout, RetryDelay, and MaxRetryDelay must all be >= 0") - } - if o.RetryDelay > o.MaxRetryDelay { - panic("RetryDelay must be <= MaxRetryDelay") - } - if (o.RetryDelay == 0 && o.MaxRetryDelay != 0) || (o.RetryDelay != 0 && o.MaxRetryDelay == 0) { - panic("Both RetryDelay and MaxRetryDelay must be 0 or neither can be 0") - } + // We assume the following: + // 1. o.Policy should either be RetryPolicyExponential or RetryPolicyFixed + // 2. o.MaxTries >= 0 + // 3. o.TryTimeout, o.RetryDelay, and o.MaxRetryDelay >=0 + // 4. o.RetryDelay <= o.MaxRetryDelay + // 5. Both o.RetryDelay and o.MaxRetryDelay must be 0 or neither can be 0 IfDefault := func(current *time.Duration, desired time.Duration) { if *current == time.Duration(0) { @@ -127,7 +120,8 @@ func (o RetryOptions) calcDelay(try int32) time.Duration { // try is >=1; never } // Introduce some jitter: [0.0, 1.0) / 2 = [0.0, 0.5) + 0.8 = [0.8, 1.3) - delay = time.Duration(delay.Seconds() * (rand.Float64()/2 + 0.8) * float64(time.Second)) // NOTE: We want math/rand; not crypto/rand + // For casts and rounding - be careful, as per https://github.com/golang/go/issues/20757 + delay = time.Duration(float32(delay) * (rand.Float32()/2 + 0.8)) // NOTE: We want math/rand; not crypto/rand if delay > o.MaxRetryDelay { delay = o.MaxRetryDelay } @@ -164,7 +158,8 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { logf("Primary try=%d, Delay=%v\n", primaryTry, delay) time.Sleep(delay) // The 1st try returns 0 delay } else { - delay := time.Second * time.Duration(rand.Float32()/2+0.8) + // For casts and rounding - be careful, as per https://github.com/golang/go/issues/20757 + delay := time.Duration(float32(time.Second) * (rand.Float32()/2 + 0.8)) logf("Secondary try=%d, Delay=%v\n", try-primaryTry, delay) time.Sleep(delay) // Delay with some jitter before trying secondary } @@ -175,11 +170,14 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { // For each try, seek to the beginning of the Body stream. We do this even for the 1st try because // the stream may not be at offset 0 when we first get it and we want the same behavior for the // 1st try as for additional tries. - if err = requestCopy.RewindBody(); err != nil { - panic(err) + err = requestCopy.RewindBody() + if err != nil { + return nil, errors.New("we must be able to seek on the Body Stream, otherwise retries would cause data corruption") } + if !tryingPrimary { - requestCopy.Request.URL.Host = o.retryReadsFromSecondaryHost() + requestCopy.URL.Host = o.retryReadsFromSecondaryHost() + requestCopy.Host = o.retryReadsFromSecondaryHost() } // Set the server-side timeout query parameter "timeout=[seconds]" @@ -214,16 +212,34 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { switch { case ctx.Err() != nil: action = "NoRetry: Op timeout" - case !tryingPrimary && response != nil && response.Response().StatusCode == http.StatusNotFound: + case !tryingPrimary && response != nil && response.Response() != nil && response.Response().StatusCode == http.StatusNotFound: // If attempt was against the secondary & it returned a StatusNotFound (404), then // the resource was not found. This may be due to replication delay. So, in this // case, we'll never try the secondary again for this operation. considerSecondary = false action = "Retry: Secondary URL returned 404" case err != nil: - // NOTE: Protocol Responder returns non-nil if REST API returns invalid status code for the invoked operation - if netErr, ok := err.(net.Error); ok && (netErr.Temporary() || netErr.Timeout()) { - action = "Retry: net.Error and Temporary() or Timeout()" + // NOTE: Protocol Responder returns non-nil if REST API returns invalid status code for the invoked operation. + // Use ServiceCode to verify if the error is related to storage service-side, + // ServiceCode is set only when error related to storage service happened. + if stErr, ok := err.(StorageError); ok { + if stErr.Temporary() { + action = "Retry: StorageError with error service code and Temporary()" + } else if stErr.Response() != nil && isSuccessStatusCode(stErr.Response()) { // TODO: This is a temporarily work around, remove this after protocol layer fix the issue that net.Error is wrapped as storageError + action = "Retry: StorageError with success status code" + } else { + action = "NoRetry: StorageError not Temporary() and without retriable status code" + } + } else if netErr, ok := err.(net.Error); ok { + // Use non-retriable net.Error list, but not retriable list. + // As there are errors without Temporary() implementation, + // while need be retried, like 'connection reset by peer', 'transport connection broken' and etc. + // So the SDK do retry for most of the case, unless the error should not be retried for sure. + if !isNotRetriable(netErr) { + action = "Retry: net.Error and not in the non-retriable list" + } else { + action = "NoRetry: net.Error and in the non-retriable list" + } } else { action = "NoRetry: unrecognized error" } @@ -237,11 +253,17 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { if err != nil { tryCancel() // If we're returning an error, cancel this current/last per-retry timeout context } else { - // TODO: Right now, we've decided to leak the per-try Context until the user's Context is canceled. - // Another option is that we wrap the last per-try context in a body and overwrite the Response's Body field with our wrapper. + // We wrap the last per-try context in a body and overwrite the Response's Body field with our wrapper. // So, when the user closes the Body, the our per-try context gets closed too. // Another option, is that the Last Policy do this wrapping for a per-retry context (not for the user's context) - _ = tryCancel // So, for now, we don't call cancel: cancel() + if response == nil || response.Response() == nil { + // We do panic in the case response or response.Response() is nil, + // as for client, the response should not be nil if request is sent and the operations is executed successfully. + // Another option, is that execute the cancel function when response or response.Response() is nil, + // as in this case, current per-try has nothing to do in future. + return nil, errors.New("invalid state, response should not be nil when the operation is executed successfully") + } + response.Response().Body = &contextCancelReadCloser{cf: tryCancel, body: response.Response().Body} } break // Don't retry } @@ -259,6 +281,78 @@ func NewRetryPolicyFactory(o RetryOptions) pipeline.Factory { }) } +// contextCancelReadCloser helps to invoke context's cancelFunc properly when the ReadCloser is closed. +type contextCancelReadCloser struct { + cf context.CancelFunc + body io.ReadCloser +} + +func (rc *contextCancelReadCloser) Read(p []byte) (n int, err error) { + return rc.body.Read(p) +} + +func (rc *contextCancelReadCloser) Close() error { + err := rc.body.Close() + if rc.cf != nil { + rc.cf() + } + return err +} + +// isNotRetriable checks if the provided net.Error isn't retriable. +func isNotRetriable(errToParse net.Error) bool { + // No error, so this is NOT retriable. + if errToParse == nil { + return true + } + + // The error is either temporary or a timeout so it IS retriable (not not retriable). + if errToParse.Temporary() || errToParse.Timeout() { + return false + } + + genericErr := error(errToParse) + + // From here all the error are neither Temporary() nor Timeout(). + switch err := errToParse.(type) { + case *net.OpError: + // The net.Error is also a net.OpError but the inner error is nil, so this is not retriable. + if err.Err == nil { + return true + } + genericErr = err.Err + } + + switch genericErr.(type) { + case *net.AddrError, net.UnknownNetworkError, *net.DNSError, net.InvalidAddrError, *net.ParseError, *net.DNSConfigError: + // If the error is one of the ones listed, then it is NOT retriable. + return true + } + + // If it's invalid header field name/value error thrown by http module, then it is NOT retriable. + // This could happen when metadata's key or value is invalid. (RoundTrip in transport.go) + if strings.Contains(genericErr.Error(), "invalid header field") { + return true + } + + // Assume the error is retriable. + return false +} + +var successStatusCodes = []int{http.StatusOK, http.StatusCreated, http.StatusAccepted, http.StatusNoContent, http.StatusPartialContent} + +func isSuccessStatusCode(resp *http.Response) bool { + if resp == nil { + return false + } + for _, i := range successStatusCodes { + if i == resp.StatusCode { + return true + } + } + return false +} + // According to https://github.com/golang/go/wiki/CompilerOptimizations, the compiler will inline this method and hopefully optimize all calls to it away var logf = func(format string, a ...interface{}) {} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_telemetry.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_telemetry.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_telemetry.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_unique_request_id.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_policy_unique_request_id.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go new file mode 100644 index 000000000000..3247aca6621f --- /dev/null +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_retry_reader.go @@ -0,0 +1,178 @@ +package azblob + +import ( + "context" + "io" + "net" + "net/http" + "strings" + "sync" +) + +const CountToEnd = 0 + +// HTTPGetter is a function type that refers to a method that performs an HTTP GET operation. +type HTTPGetter func(ctx context.Context, i HTTPGetterInfo) (*http.Response, error) + +// HTTPGetterInfo is passed to an HTTPGetter function passing it parameters +// that should be used to make an HTTP GET request. +type HTTPGetterInfo struct { + // Offset specifies the start offset that should be used when + // creating the HTTP GET request's Range header + Offset int64 + + // Count specifies the count of bytes that should be used to calculate + // the end offset when creating the HTTP GET request's Range header + Count int64 + + // ETag specifies the resource's etag that should be used when creating + // the HTTP GET request's If-Match header + ETag ETag +} + +// FailedReadNotifier is a function type that represents the notification function called when a read fails +type FailedReadNotifier func(failureCount int, lastError error, offset int64, count int64, willRetry bool) + +// RetryReaderOptions contains properties which can help to decide when to do retry. +type RetryReaderOptions struct { + // MaxRetryRequests specifies the maximum number of HTTP GET requests that will be made + // while reading from a RetryReader. A value of zero means that no additional HTTP + // GET requests will be made. + MaxRetryRequests int + doInjectError bool + doInjectErrorRound int + + // NotifyFailedRead is called, if non-nil, after any failure to read. Expected usage is diagnostic logging. + NotifyFailedRead FailedReadNotifier + + // TreatEarlyCloseAsError can be set to true to prevent retries after "read on closed response body". By default, + // retryReader has the following special behaviour: closing the response body before it is all read is treated as a + // retryable error. This is to allow callers to force a retry by closing the body from another goroutine (e.g. if the = + // read is too slow, caller may want to force a retry in the hope that the retry will be quicker). If + // TreatEarlyCloseAsError is true, then retryReader's special behaviour is suppressed, and "read on closed body" is instead + // treated as a fatal (non-retryable) error. + // Note that setting TreatEarlyCloseAsError only guarantees that Closing will produce a fatal error if the Close happens + // from the same "thread" (goroutine) as Read. Concurrent Close calls from other goroutines may instead produce network errors + // which will be retried. + TreatEarlyCloseAsError bool +} + +// retryReader implements io.ReaderCloser methods. +// retryReader tries to read from response, and if there is retriable network error +// returned during reading, it will retry according to retry reader option through executing +// user defined action with provided data to get a new response, and continue the overall reading process +// through reading from the new response. +type retryReader struct { + ctx context.Context + info HTTPGetterInfo + countWasBounded bool + o RetryReaderOptions + getter HTTPGetter + + // we support Close-ing during Reads (from other goroutines), so we protect the shared state, which is response + responseMu *sync.Mutex + response *http.Response +} + +// NewRetryReader creates a retry reader. +func NewRetryReader(ctx context.Context, initialResponse *http.Response, + info HTTPGetterInfo, o RetryReaderOptions, getter HTTPGetter) io.ReadCloser { + return &retryReader{ + ctx: ctx, + getter: getter, + info: info, + countWasBounded: info.Count != CountToEnd, + response: initialResponse, + responseMu: &sync.Mutex{}, + o: o} +} + +func (s *retryReader) setResponse(r *http.Response) { + s.responseMu.Lock() + defer s.responseMu.Unlock() + s.response = r +} + +func (s *retryReader) Read(p []byte) (n int, err error) { + for try := 0; ; try++ { + //fmt.Println(try) // Comment out for debugging. + if s.countWasBounded && s.info.Count == CountToEnd { + // User specified an original count and the remaining bytes are 0, return 0, EOF + return 0, io.EOF + } + + s.responseMu.Lock() + resp := s.response + s.responseMu.Unlock() + if resp == nil { // We don't have a response stream to read from, try to get one. + newResponse, err := s.getter(s.ctx, s.info) + if err != nil { + return 0, err + } + // Successful GET; this is the network stream we'll read from. + s.setResponse(newResponse) + resp = newResponse + } + n, err := resp.Body.Read(p) // Read from the stream (this will return non-nil err if forceRetry is called, from another goroutine, while it is running) + + // Injection mechanism for testing. + if s.o.doInjectError && try == s.o.doInjectErrorRound { + err = &net.DNSError{IsTemporary: true} + } + + // We successfully read data or end EOF. + if err == nil || err == io.EOF { + s.info.Offset += int64(n) // Increments the start offset in case we need to make a new HTTP request in the future + if s.info.Count != CountToEnd { + s.info.Count -= int64(n) // Decrement the count in case we need to make a new HTTP request in the future + } + return n, err // Return the return to the caller + } + s.Close() // Error, close stream + s.setResponse(nil) // Our stream is no longer good + + // Check the retry count and error code, and decide whether to retry. + retriesExhausted := try >= s.o.MaxRetryRequests + _, isNetError := err.(net.Error) + willRetry := (isNetError || s.wasRetryableEarlyClose(err)) && !retriesExhausted + + // Notify, for logging purposes, of any failures + if s.o.NotifyFailedRead != nil { + failureCount := try + 1 // because try is zero-based + s.o.NotifyFailedRead(failureCount, err, s.info.Offset, s.info.Count, willRetry) + } + + if willRetry { + continue + // Loop around and try to get and read from new stream. + } + return n, err // Not retryable, or retries exhausted, so just return + } +} + +// By default, we allow early Closing, from another concurrent goroutine, to be used to force a retry +// Is this safe, to close early from another goroutine? Early close ultimately ends up calling +// net.Conn.Close, and that is documented as "Any blocked Read or Write operations will be unblocked and return errors" +// which is exactly the behaviour we want. +// NOTE: that if caller has forced an early Close from a separate goroutine (separate from the Read) +// then there are two different types of error that may happen - either the one one we check for here, +// or a net.Error (due to closure of connection). Which one happens depends on timing. We only need this routine +// to check for one, since the other is a net.Error, which our main Read retry loop is already handing. +func (s *retryReader) wasRetryableEarlyClose(err error) bool { + if s.o.TreatEarlyCloseAsError { + return false // user wants all early closes to be errors, and so not retryable + } + // unfortunately, http.errReadOnClosedResBody is private, so the best we can do here is to check for its text + return strings.HasSuffix(err.Error(), ReadOnClosedBodyMessage) +} + +const ReadOnClosedBodyMessage = "read on closed response body" + +func (s *retryReader) Close() error { + s.responseMu.Lock() + defer s.responseMu.Unlock() + if s.response != nil && s.response.Body != nil { + return s.response.Body.Close() + } + return nil +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go similarity index 94% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go index 8b51193f6a07..c000c48ec828 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_account.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_account.go @@ -2,6 +2,7 @@ package azblob import ( "bytes" + "errors" "fmt" "strings" "time" @@ -22,21 +23,21 @@ type AccountSASSignatureValues struct { // NewSASQueryParameters uses an account's shared key credential to sign this signature values to produce // the proper SAS query parameters. -func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) SASQueryParameters { +func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *SharedKeyCredential) (SASQueryParameters, error) { // https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS if v.ExpiryTime.IsZero() || v.Permissions == "" || v.ResourceTypes == "" || v.Services == "" { - panic("Account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType") + return SASQueryParameters{}, errors.New("account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType") } if v.Version == "" { v.Version = SASVersion } perms := &AccountSASPermissions{} if err := perms.Parse(v.Permissions); err != nil { - panic(err) + return SASQueryParameters{}, err } v.Permissions = perms.String() - startTime, expiryTime := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime) + startTime, expiryTime, _ := FormatTimesForSASSigning(v.StartTime, v.ExpiryTime, time.Time{}) stringToSign := strings.Join([]string{ sharedKeyCredential.AccountName(), @@ -68,7 +69,8 @@ func (v AccountSASSignatureValues) NewSASQueryParameters(sharedKeyCredential *Sh // Calculated SAS signature signature: signature, } - return p + + return p, nil } // The AccountSASPermissions type simplifies creating the permissions string for an Azure Storage Account SAS. @@ -205,7 +207,7 @@ func (rt *AccountSASResourceTypes) Parse(s string) error { switch r { case 's': rt.Service = true - case 'q': + case 'c': rt.Container = true case 'o': rt.Object = true diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_query_params.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go similarity index 60% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_query_params.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go index db10171e7535..11b1b2ba0bb5 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_sas_query_params.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_sas_query_params.go @@ -22,7 +22,7 @@ const ( // FormatTimesForSASSigning converts a time.Time to a snapshotTimeFormat string suitable for a // SASField's StartTime or ExpiryTime fields. Returns "" if value.IsZero(). -func FormatTimesForSASSigning(startTime, expiryTime time.Time) (string, string) { +func FormatTimesForSASSigning(startTime, expiryTime, snapshotTime time.Time) (string, string, string) { ss := "" if !startTime.IsZero() { ss = startTime.Format(SASTimeFormat) // "yyyy-MM-ddTHH:mm:ssZ" @@ -31,7 +31,11 @@ func FormatTimesForSASSigning(startTime, expiryTime time.Time) (string, string) if !expiryTime.IsZero() { se = expiryTime.Format(SASTimeFormat) // "yyyy-MM-ddTHH:mm:ssZ" } - return ss, se + sh := "" + if !snapshotTime.IsZero() { + sh = snapshotTime.Format(SnapshotTimeFormat) + } + return ss, se, sh } // SASTimeFormat represents the format of a SAS start or expiry time. Use it when formatting/parsing a time.Time. @@ -47,17 +51,57 @@ const SASTimeFormat = "2006-01-02T15:04:05Z" //"2017-07-27T00:00:00Z" // ISO 860 // This type defines the components used by all Azure Storage resources (Containers, Blobs, Files, & Queues). type SASQueryParameters struct { // All members are immutable or values so copies of this struct are goroutine-safe. - version string `param:"sv"` - services string `param:"ss"` - resourceTypes string `param:"srt"` - protocol SASProtocol `param:"spr"` - startTime time.Time `param:"st"` - expiryTime time.Time `param:"se"` - ipRange IPRange `param:"sip"` - identifier string `param:"si"` - resource string `param:"sr"` - permissions string `param:"sp"` - signature string `param:"sig"` + version string `param:"sv"` + services string `param:"ss"` + resourceTypes string `param:"srt"` + protocol SASProtocol `param:"spr"` + startTime time.Time `param:"st"` + expiryTime time.Time `param:"se"` + snapshotTime time.Time `param:"snapshot"` + ipRange IPRange `param:"sip"` + identifier string `param:"si"` + resource string `param:"sr"` + permissions string `param:"sp"` + signature string `param:"sig"` + cacheControl string `param:"rscc"` + contentDisposition string `param:"rscd"` + contentEncoding string `param:"rsce"` + contentLanguage string `param:"rscl"` + contentType string `param:"rsct"` + signedOid string `param:"skoid"` + signedTid string `param:"sktid"` + signedStart time.Time `param:"skt"` + signedExpiry time.Time `param:"ske"` + signedService string `param:"sks"` + signedVersion string `param:"skv"` +} + +func (p *SASQueryParameters) SignedOid() string { + return p.signedOid +} + +func (p *SASQueryParameters) SignedTid() string { + return p.signedTid +} + +func (p *SASQueryParameters) SignedStart() time.Time { + return p.signedStart +} + +func (p *SASQueryParameters) SignedExpiry() time.Time { + return p.signedExpiry +} + +func (p *SASQueryParameters) SignedService() string { + return p.signedService +} + +func (p *SASQueryParameters) SignedVersion() string { + return p.signedVersion +} + +func (p *SASQueryParameters) SnapshotTime() time.Time { + return p.snapshotTime } func (p *SASQueryParameters) Version() string { @@ -99,6 +143,26 @@ func (p *SASQueryParameters) Signature() string { return p.signature } +func (p *SASQueryParameters) CacheControl() string { + return p.cacheControl +} + +func (p *SASQueryParameters) ContentDisposition() string { + return p.contentDisposition +} + +func (p *SASQueryParameters) ContentEncoding() string { + return p.contentEncoding +} + +func (p *SASQueryParameters) ContentLanguage() string { + return p.contentLanguage +} + +func (p *SASQueryParameters) ContentType() string { + return p.contentType +} + // IPRange represents a SAS IP range's start IP and (optionally) end IP. type IPRange struct { Start net.IP // Not specified if length = 0 @@ -135,6 +199,8 @@ func newSASQueryParameters(values url.Values, deleteSASParametersFromValues bool p.resourceTypes = val case "spr": p.protocol = SASProtocol(val) + case "snapshot": + p.snapshotTime, _ = time.Parse(SnapshotTimeFormat, val) case "st": p.startTime, _ = time.Parse(SASTimeFormat, val) case "se": @@ -155,6 +221,28 @@ func newSASQueryParameters(values url.Values, deleteSASParametersFromValues bool p.permissions = val case "sig": p.signature = val + case "rscc": + p.cacheControl = val + case "rscd": + p.contentDisposition = val + case "rsce": + p.contentEncoding = val + case "rscl": + p.contentLanguage = val + case "rsct": + p.contentType = val + case "skoid": + p.signedOid = val + case "sktid": + p.signedTid = val + case "skt": + p.signedStart, _ = time.Parse(SASTimeFormat, val) + case "ske": + p.signedExpiry, _ = time.Parse(SASTimeFormat, val) + case "sks": + p.signedService = val + case "skv": + p.signedVersion = val default: isSASKey = false // We didn't recognize the query parameter } @@ -197,9 +285,32 @@ func (p *SASQueryParameters) addToValues(v url.Values) url.Values { if p.permissions != "" { v.Add("sp", p.permissions) } + if p.signedOid != "" { + v.Add("skoid", p.signedOid) + v.Add("sktid", p.signedTid) + v.Add("skt", p.signedStart.Format(SASTimeFormat)) + v.Add("ske", p.signedExpiry.Format(SASTimeFormat)) + v.Add("sks", p.signedService) + v.Add("skv", p.signedVersion) + } if p.signature != "" { v.Add("sig", p.signature) } + if p.cacheControl != "" { + v.Add("rscc", p.cacheControl) + } + if p.contentDisposition != "" { + v.Add("rscd", p.contentDisposition) + } + if p.contentEncoding != "" { + v.Add("rsce", p.contentEncoding) + } + if p.contentLanguage != "" { + v.Add("rscl", p.contentLanguage) + } + if p.contentType != "" { + v.Add("rsct", p.contentType) + } return v } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_service_codes_common.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_service_codes_common.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_service_codes_common.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go similarity index 95% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go index 03178b247abd..e7872a8a3f26 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_storage_error.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_storage_error.go @@ -43,11 +43,14 @@ func newStorageError(cause error, response *http.Response, description string) e response: response, description: description, }, + serviceCode: ServiceCodeType(response.Header.Get("x-ms-error-code")), } } // ServiceCode returns service-error information. The caller may examine these values but should not modify any of them. -func (e *storageError) ServiceCode() ServiceCodeType { return e.serviceCode } +func (e *storageError) ServiceCode() ServiceCodeType { + return e.serviceCode +} // Error implements the error interface's Error method to return a string representation of the error. func (e *storageError) Error() string { @@ -94,8 +97,6 @@ func (e *storageError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) (err break case xml.CharData: switch tokName { - case "Code": - e.serviceCode = ServiceCodeType(tt) case "Message": e.description = string(tt) default: diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go similarity index 60% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go index 001a21c69651..d7b2507e43f4 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_util_validate.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_util_validate.go @@ -16,16 +16,10 @@ type httpRange struct { } func (r httpRange) pointers() *string { - if r.offset == 0 && r.count == 0 { // Do common case first for performance - return nil // No specified range + if r.offset == 0 && r.count == CountToEnd { // Do common case first for performance + return nil // No specified range } - if r.offset < 0 { - panic("The range offset must be >= 0") - } - if r.count < 0 { - panic("The range count must be >= 0") - } - endOffset := "" // if count == 0 + endOffset := "" // if count == CountToEnd (0) if r.count > 0 { endOffset = strconv.FormatInt((r.offset+r.count)-1, 10) } @@ -35,27 +29,36 @@ func (r httpRange) pointers() *string { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) int64 { +func validateSeekableStreamAt0AndGetCount(body io.ReadSeeker) (int64, error) { if body == nil { // nil body's are "logically" seekable to 0 and are 0 bytes long - return 0 + return 0, nil } - validateSeekableStreamAt0(body) + + err := validateSeekableStreamAt0(body) + if err != nil { + return 0, err + } + count, err := body.Seek(0, io.SeekEnd) if err != nil { - panic("failed to seek stream") + return 0, errors.New("body stream must be seekable") } + body.Seek(0, io.SeekStart) - return count + return count, nil } -func validateSeekableStreamAt0(body io.ReadSeeker) { +// return an error if body is not a valid seekable stream at 0 +func validateSeekableStreamAt0(body io.ReadSeeker) error { if body == nil { // nil body's are "logically" seekable to 0 - return + return nil } if pos, err := body.Seek(0, io.SeekCurrent); pos != 0 || err != nil { + // Help detect programmer error if err != nil { - panic(err) + return errors.New("body stream must be seekable") } - panic(errors.New("stream must be set to position 0")) + return errors.New("body stream must be set to position 0") } + return nil } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go similarity index 96% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go index 1fc7e89cf29e..66799f9cb65b 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zc_uuid.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_uuid.go @@ -21,10 +21,7 @@ type uuid [16]byte func newUUID() (u uuid) { u = uuid{} // Set all bits to randomly (or pseudo-randomly) chosen values. - _, err := rand.Read(u[:]) - if err != nil { - panic("ran.Read failed") - } + rand.Read(u[:]) u[8] = (u[8] | reservedRFC4122) & 0x7F // u.setVariant(ReservedRFC4122) var version byte = 4 diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zt_doc.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zt_doc.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zt_doc.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go similarity index 55% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go index 8f3dc9934973..719bcb624e8e 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_append_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_append_blob.go @@ -33,20 +33,21 @@ func newAppendBlobClient(url url.URL, p pipeline.Pipeline) appendBlobClient { // error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more // information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's -// lease is active and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for -// the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is -// already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error -// (HTTP status code 412 - Precondition Failed). appendPosition is optional conditional header, used only for the -// Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append -// position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error -// (HTTP status code 412 - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob -// if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate -// only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to -// operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a -// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded -// in the analytics logs when storage analytics logging is enabled. -func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockResponse, error) { +// Timeouts for Blob Service Operations. transactionalContentMD5 is specify the transactional md5 for the body, to +// be validated by the service. leaseID is if specified, the operation only succeeds if the resource's lease is active +// and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for the append blob. +// If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than +// the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code +// 412 - Precondition Failed). appendPosition is optional conditional header, used only for the Append Block operation. +// A number indicating the byte offset to compare. Append Block will succeed only if the append position is equal to +// this number. If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 +// - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob if it has been +// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if +// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs +// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockResponse, error) { if err := validate([]validation{ {targetValue: body, constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, @@ -55,7 +56,7 @@ func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeek chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.appendBlockPreparer(body, contentLength, timeout, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.appendBlockPreparer(body, contentLength, timeout, transactionalContentMD5, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -67,7 +68,7 @@ func (client appendBlobClient) AppendBlock(ctx context.Context, body io.ReadSeek } // appendBlockPreparer prepares the AppendBlock request. -func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, transactionalContentMD5 []byte, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, body) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -79,6 +80,9 @@ func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLe params.Set("comp", "appendblock") req.URL.RawQuery = params.Encode() req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) } @@ -94,8 +98,8 @@ func (client appendBlobClient) appendBlockPreparer(body io.ReadSeeker, contentLe if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -118,6 +122,120 @@ func (client appendBlobClient) appendBlockResponder(resp pipeline.Response) (pip return &AppendBlobAppendBlockResponse{rawResponse: resp.Response()}, err } +// AppendBlockFromURL the Append Block operation commits a new block of data to the end of an existing append blob +// where the contents are read from a source url. The Append Block operation is permitted only if the blob was created +// with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later. +// +// sourceURL is specify a URL to the copy source. contentLength is the length of the request. sourceRange is bytes of +// source data in the specified range. sourceContentMD5 is specify the md5 calculated for the range of bytes that must +// be read from the copy source. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. maxSize is optional conditional header. The max length in bytes permitted for +// the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is +// already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error +// (HTTP status code 412 - Precondition Failed). appendPosition is optional conditional header, used only for the +// Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append +// position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error +// (HTTP status code 412 - Precondition Failed). ifModifiedSince is specify this header value to operate only on a blob +// if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate +// only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to +// operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. sourceIfModifiedSince is specify this header value to operate only on a blob if it has been modified +// since the specified date/time. sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it +// has not been modified since the specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs +// with a matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client appendBlobClient) AppendBlockFromURL(ctx context.Context, sourceURL string, contentLength int64, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*AppendBlobAppendBlockFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.appendBlockFromURLPreparer(sourceURL, contentLength, sourceRange, sourceContentMD5, timeout, leaseID, maxSize, appendPosition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.appendBlockFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*AppendBlobAppendBlockFromURLResponse), err +} + +// appendBlockFromURLPreparer prepares the AppendBlockFromURL request. +func (client appendBlobClient) appendBlockFromURLPreparer(sourceURL string, contentLength int64, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, maxSize *int64, appendPosition *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "appendblock") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-copy-source", sourceURL) + if sourceRange != nil { + req.Header.Set("x-ms-source-range", *sourceRange) + } + if sourceContentMD5 != nil { + req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) + } + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if maxSize != nil { + req.Header.Set("x-ms-blob-condition-maxsize", strconv.FormatInt(*maxSize, 10)) + } + if appendPosition != nil { + req.Header.Set("x-ms-blob-condition-appendpos", strconv.FormatInt(*appendPosition, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + return req, nil +} + +// appendBlockFromURLResponder handles the response to the AppendBlockFromURL request. +func (client appendBlobClient) appendBlockFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &AppendBlobAppendBlockFromURLResponse{rawResponse: resp.Response()}, err +} + // Create the Create Append Blob operation creates a new append blob. // // contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more @@ -135,25 +253,22 @@ func (client appendBlobClient) appendBlockResponder(resp pipeline.Response) (pip // destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified // metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, // metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and -// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is // active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. // ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified // date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified -// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value. +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. // ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a // client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client appendBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobCreateResponse, error) { +func (client appendBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*AppendBlobCreateResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -165,7 +280,7 @@ func (client appendBlobClient) Create(ctx context.Context, contentLength int64, } // createPreparer prepares the Create request. -func (client appendBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client appendBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -208,8 +323,8 @@ func (client appendBlobClient) createPreparer(contentLength int64, timeout *int3 if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go similarity index 75% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go index b2f8eac665b7..5e30263a0bff 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go @@ -6,14 +6,13 @@ package azblob import ( "context" "encoding/base64" + "github.com/Azure/azure-pipeline-go/pipeline" "io" "io/ioutil" "net/http" "net/url" "strconv" "time" - - "github.com/Azure/azure-pipeline-go/pipeline" ) // blobClient is the client for the Blob methods of the Azblob service. @@ -32,7 +31,7 @@ func newBlobClient(url url.URL, p pipeline.Pipeline) blobClient { // copyID is the copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation. timeout is // the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character // limit that is recorded in the analytics logs when storage analytics logging is enabled. func (client blobClient) AbortCopyFromURL(ctx context.Context, copyID string, timeout *int32, leaseID *string, requestID *string) (*BlobAbortCopyFromURLResponse, error) { @@ -99,18 +98,18 @@ func (client blobClient) abortCopyFromURLResponder(resp pipeline.Response) (pipe // service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor // (String) for a list of valid GUID string formats. ifModifiedSince is specify this header value to operate only on a // blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs // without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is // recorded in the analytics logs when storage analytics logging is enabled. -func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobAcquireLeaseResponse, error) { +func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobAcquireLeaseResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.acquireLeasePreparer(timeout, duration, proposedLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -122,7 +121,7 @@ func (client blobClient) AcquireLease(ctx context.Context, timeout *int32, durat } // acquireLeasePreparer prepares the AcquireLease request. -func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, proposedLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -145,8 +144,8 @@ func (client blobClient) acquireLeasePreparer(timeout *int32, duration *int32, p if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -182,18 +181,18 @@ func (client blobClient) acquireLeaseResponder(resp pipeline.Response) (pipeline // not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an // infinite lease breaks immediately. ifModifiedSince is specify this header value to operate only on a blob if it has // been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a -// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only -// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching -// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// analytics logs when storage analytics logging is enabled. -func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobBreakLeaseResponse, error) { +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobBreakLeaseResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.breakLeasePreparer(timeout, breakPeriod, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -205,7 +204,7 @@ func (client blobClient) BreakLease(ctx context.Context, timeout *int32, breakPe } // breakLeasePreparer prepares the BreakLease request. -func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -225,8 +224,8 @@ func (client blobClient) breakLeasePreparer(timeout *int32, breakPeriod *int32, if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -253,25 +252,25 @@ func (client blobClient) breakLeaseResponder(resp pipeline.Response) (pipeline.R // ChangeLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete // operations // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. -// proposedLeaseID is proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the -// proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string -// formats. timeout is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only -// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate // only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a // matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded // in the analytics logs when storage analytics logging is enabled. -func (client blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobChangeLeaseResponse, error) { +func (client blobClient) ChangeLease(ctx context.Context, leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobChangeLeaseResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.changeLeasePreparer(leaseID, proposedLeaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -283,7 +282,7 @@ func (client blobClient) ChangeLease(ctx context.Context, leaseID string, propos } // changeLeasePreparer prepares the ChangeLease request. -func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -302,8 +301,8 @@ func (client blobClient) changeLeasePreparer(leaseID string, proposedLeaseID str if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -327,6 +326,111 @@ func (client blobClient) changeLeaseResponder(resp pipeline.Response) (pipeline. return &BlobChangeLeaseResponse{rawResponse: resp.Response()}, err } +// CopyFromURL the Copy From URL operation copies a blob or an internet resource to a new blob. It will not return a +// response until the copy is complete. +// +// copySource is specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that +// specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob +// must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is +// expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated +// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or +// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with +// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version +// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing +// Containers, Blobs, and Metadata for more information. sourceIfModifiedSince is specify this header value to operate +// only on a blob if it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header +// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify +// an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate +// only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) CopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobCopyFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.copyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.copyFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobCopyFromURLResponse), err +} + +// copyFromURLPreparer prepares the CopyFromURL request. +func (client blobClient) copyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + req.URL.RawQuery = params.Encode() + if metadata != nil { + for k, v := range metadata { + req.Header.Set("x-ms-meta-"+k, v) + } + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + req.Header.Set("x-ms-copy-source", copySource) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-requires-sync", "true") + return req, nil +} + +// copyFromURLResponder handles the response to the CopyFromURL request. +func (client blobClient) copyFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusAccepted) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobCopyFromURLResponse{rawResponse: resp.Response()}, err +} + // CreateSnapshot the Create Snapshot operation creates a read-only snapshot of a blob // // timeout is the timeout parameter is expressed in seconds. For more information, see Creating // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. deleteSnapshots is required if the blob has associated snapshots. Specify one // of the following two options: include: Delete the base blob and all of its snapshots. only: Delete only the blob's // snapshots and not the blob itself ifModifiedSince is specify this header value to operate only on a blob if it has // been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a -// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only -// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching -// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// analytics logs when storage analytics logging is enabled. -func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobDeleteResponse, error) { +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobDeleteResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.deletePreparer(snapshot, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.deletePreparer(snapshot, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -458,7 +559,7 @@ func (client blobClient) Delete(ctx context.Context, snapshot *string, timeout * } // deletePreparer prepares the Delete request. -func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("DELETE", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -483,8 +584,8 @@ func (client blobClient) deletePreparer(snapshot *string, timeout *int32, leaseI if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -516,22 +617,22 @@ func (client blobClient) deleteResponder(resp pipeline.Response) (pipeline.Respo // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified -// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. // rangeGetContentMD5 is when set to true and specified together with the Range, the service returns the MD5 hash for // the range, as long as the range is less than or equal to 4 MB in size. ifModifiedSince is specify this header value // to operate only on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this -// header value to operate only on a blob if it has not been modified since the specified date/time. ifMatches is -// specify an ETag value to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to -// operate only on blobs without a matching value. requestID is provides a client-generated, opaque value with a 1 KB -// character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client blobClient) Download(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*downloadResponse, error) { +// header value to operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify +// an ETag value to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only +// on blobs without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character +// limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) Download(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*downloadResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.downloadPreparer(snapshot, timeout, rangeParameter, leaseID, rangeGetContentMD5, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.downloadPreparer(snapshot, timeout, rangeParameter, leaseID, rangeGetContentMD5, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -543,7 +644,7 @@ func (client blobClient) Download(ctx context.Context, snapshot *string, timeout } // downloadPreparer prepares the Download request. -func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, rangeGetContentMD5 *bool, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("GET", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -571,8 +672,8 @@ func (client blobClient) downloadPreparer(snapshot *string, timeout *int32, rang if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -593,6 +694,44 @@ func (client blobClient) downloadResponder(resp pipeline.Response) (pipeline.Res return &downloadResponse{rawResponse: resp.Response()}, err } +// GetAccountInfo returns the sku name and account kind +func (client blobClient) GetAccountInfo(ctx context.Context) (*BlobGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*BlobGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client blobClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client blobClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &BlobGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + // GetProperties the Get Properties operation returns all user-defined metadata, standard HTTP properties, and system // properties for the blob. It does not return the content of the blob. // @@ -601,21 +740,21 @@ func (client blobClient) downloadResponder(resp pipeline.Response) (pipeline.Res // href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it // has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a -// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only -// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching -// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// analytics logs when storage analytics logging is enabled. -func (client blobClient) GetProperties(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobGetPropertiesResponse, error) { +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) GetProperties(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobGetPropertiesResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.getPropertiesPreparer(snapshot, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.getPropertiesPreparer(snapshot, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -627,7 +766,7 @@ func (client blobClient) GetProperties(ctx context.Context, snapshot *string, ti } // getPropertiesPreparer prepares the GetProperties request. -func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("HEAD", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -649,8 +788,8 @@ func (client blobClient) getPropertiesPreparer(snapshot *string, timeout *int32, if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -676,23 +815,23 @@ func (client blobClient) getPropertiesResponder(resp pipeline.Response) (pipelin // ReleaseLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete // operations // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout -// is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only -// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate // only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a // matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded // in the analytics logs when storage analytics logging is enabled. -func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobReleaseLeaseResponse, error) { +func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobReleaseLeaseResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.releaseLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -704,7 +843,7 @@ func (client blobClient) ReleaseLease(ctx context.Context, leaseID string, timeo } // releaseLeasePreparer prepares the ReleaseLease request. -func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -722,8 +861,8 @@ func (client blobClient) releaseLeasePreparer(leaseID string, timeout *int32, if if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -750,23 +889,23 @@ func (client blobClient) releaseLeaseResponder(resp pipeline.Response) (pipeline // RenewLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete // operations // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout -// is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only -// on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate // only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a // matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded // in the analytics logs when storage analytics logging is enabled. -func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobRenewLeaseResponse, error) { +func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobRenewLeaseResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.renewLeasePreparer(leaseID, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -778,7 +917,7 @@ func (client blobClient) RenewLease(ctx context.Context, leaseID string, timeout } // renewLeasePreparer prepares the RenewLease request. -func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -796,8 +935,8 @@ func (client blobClient) renewLeasePreparer(leaseID string, timeout *int32, ifMo if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -832,22 +971,21 @@ func (client blobClient) renewLeaseResponder(resp pipeline.Response) (pipeline.R // blocks were validated when each was uploaded. blobContentEncoding is optional. Sets the blob's content encoding. If // specified, this property is stored with the blob and returned with a read request. blobContentLanguage is optional. // Set the blob's content language. If specified, this property is stored with the blob and returned with a read -// request. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this -// ID. ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the -// specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been -// modified since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching -// value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. -// blobContentDisposition is optional. Sets the blob's Content-Disposition header. requestID is provides a -// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage -// analytics logging is enabled. -func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (*BlobSetHTTPHeadersResponse, error) { +// request. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified +// date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobContentDisposition is +// optional. Sets the blob's Content-Disposition header. requestID is provides a client-generated, opaque value with a +// 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (*BlobSetHTTPHeadersResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.setHTTPHeadersPreparer(timeout, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobContentDisposition, requestID) + req, err := client.setHTTPHeadersPreparer(timeout, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobContentDisposition, requestID) if err != nil { return nil, err } @@ -859,7 +997,7 @@ func (client blobClient) SetHTTPHeaders(ctx context.Context, timeout *int32, blo } // setHTTPHeadersPreparer prepares the SetHTTPHeaders request. -func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (pipeline.Request, error) { +func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl *string, blobContentType *string, blobContentMD5 []byte, blobContentEncoding *string, blobContentLanguage *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobContentDisposition *string, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -894,8 +1032,8 @@ func (client blobClient) setHTTPHeadersPreparer(timeout *int32, blobCacheControl if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -932,23 +1070,20 @@ func (client blobClient) setHTTPHeadersResponder(resp pipeline.Response) (pipeli // the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version // 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing // Containers, Blobs, and Metadata for more information. leaseID is if specified, the operation only succeeds if the -// container's lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a +// resource's lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a // blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs // without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is // recorded in the analytics logs when storage analytics logging is enabled. -func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlobSetMetadataResponse, error) { +func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlobSetMetadataResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.setMetadataPreparer(timeout, metadata, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.setMetadataPreparer(timeout, metadata, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -960,7 +1095,7 @@ func (client blobClient) SetMetadata(ctx context.Context, timeout *int32, metada } // setMetadataPreparer prepares the SetMetadata request. -func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string]string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -985,8 +1120,8 @@ func (client blobClient) setMetadataPreparer(timeout *int32, metadata map[string if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -1018,15 +1153,16 @@ func (client blobClient) setMetadataResponder(resp pipeline.Response) (pipeline. // information, see Setting // Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB -// character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeout *int32, requestID *string) (*BlobSetTierResponse, error) { +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. leaseID is if +// specified, the operation only succeeds if the resource's lease is active and matches this ID. +func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (*BlobSetTierResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.setTierPreparer(tier, timeout, requestID) + req, err := client.setTierPreparer(tier, timeout, requestID, leaseID) if err != nil { return nil, err } @@ -1038,7 +1174,7 @@ func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, timeo } // setTierPreparer prepares the SetTier request. -func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, requestID *string) (pipeline.Request, error) { +func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, requestID *string, leaseID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -1054,6 +1190,9 @@ func (client blobClient) setTierPreparer(tier AccessTierType, timeout *int32, re if requestID != nil { req.Header.Set("x-ms-client-request-id", *requestID) } + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } return req, nil } @@ -1082,27 +1221,23 @@ func (client blobClient) setTierResponder(resp pipeline.Response) (pipeline.Resp // 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing // Containers, Blobs, and Metadata for more information. sourceIfModifiedSince is specify this header value to operate // only on a blob if it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header -// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatches is -// specify an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to -// operate only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a -// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value -// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs -// without a matching value. leaseID is if specified, the operation only succeeds if the container's lease is active -// and matches this ID. sourceLeaseID is specify this header to perform the operation only if the lease ID given -// matches the active lease ID of the source blob. requestID is provides a client-generated, opaque value with a 1 KB -// character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatches *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, sourceLeaseID *string, requestID *string) (*BlobStartCopyFromURLResponse, error) { +// value to operate only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify +// an ETag value to operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate +// only on blobs without a matching value. ifModifiedSince is specify this header value to operate only on a blob if it +// has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (*BlobStartCopyFromURLResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.startCopyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatches, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, leaseID, sourceLeaseID, requestID) + req, err := client.startCopyFromURLPreparer(copySource, timeout, metadata, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, leaseID, requestID) if err != nil { return nil, err } @@ -1114,7 +1249,7 @@ func (client blobClient) StartCopyFromURL(ctx context.Context, copySource string } // startCopyFromURLPreparer prepares the StartCopyFromURL request. -func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatches *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, leaseID *string, sourceLeaseID *string, requestID *string) (pipeline.Request, error) { +func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, leaseID *string, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -1135,8 +1270,8 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in if sourceIfUnmodifiedSince != nil { req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if sourceIfMatches != nil { - req.Header.Set("x-ms-source-if-match", string(*sourceIfMatches)) + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) } if sourceIfNoneMatch != nil { req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) @@ -1147,8 +1282,8 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -1157,9 +1292,6 @@ func (client blobClient) startCopyFromURLPreparer(copySource string, timeout *in if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) } - if sourceLeaseID != nil { - req.Header.Set("x-ms-source-lease-id", *sourceLeaseID) - } req.Header.Set("x-ms-version", ServiceVersion) if requestID != nil { req.Header.Set("x-ms-client-request-id", *requestID) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go similarity index 84% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go index 4e75dcea337e..955f7d1903c7 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_block_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go @@ -48,25 +48,22 @@ func newBlockBlobClient(url url.URL, p pipeline.Pipeline) blockBlobClient { // destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified // metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, // metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and -// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is // active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. // ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified // date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified -// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value. +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. // ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a // client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobCommitBlockListResponse, error) { +func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobCommitBlockListResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.commitBlockListPreparer(blocks, timeout, blobCacheControl, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.commitBlockListPreparer(blocks, timeout, blobCacheControl, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -78,7 +75,7 @@ func (client blockBlobClient) CommitBlockList(ctx context.Context, blocks BlockL } // commitBlockListPreparer prepares the CommitBlockList request. -func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, timeout *int32, blobCacheControl *string, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -121,8 +118,8 @@ func (client blockBlobClient) commitBlockListPreparer(blocks BlockLookupList, ti if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -163,7 +160,7 @@ func (client blockBlobClient) commitBlockListResponder(resp pipeline.Response) ( // href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character // limit that is recorded in the analytics logs when storage analytics logging is enabled. func (client blockBlobClient) GetBlockList(ctx context.Context, listType BlockListType, snapshot *string, timeout *int32, leaseID *string, requestID *string) (*BlockList, error) { @@ -223,7 +220,7 @@ func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pip defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -240,13 +237,14 @@ func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pip // blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or // equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the // same size for each block. contentLength is the length of the request. body is initial data body will be closed upon -// successful return. Callers should ensure closure when receiving an error.timeout is the timeout parameter is -// expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character // limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeeker, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockResponse, error) { +func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockResponse, error) { if err := validate([]validation{ {targetValue: body, constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, @@ -255,7 +253,7 @@ func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, co chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.stageBlockPreparer(blockID, contentLength, body, timeout, leaseID, requestID) + req, err := client.stageBlockPreparer(blockID, contentLength, body, transactionalContentMD5, timeout, leaseID, requestID) if err != nil { return nil, err } @@ -267,7 +265,7 @@ func (client blockBlobClient) StageBlock(ctx context.Context, blockID string, co } // stageBlockPreparer prepares the StageBlock request. -func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength int64, body io.ReadSeeker, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { +func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength int64, body io.ReadSeeker, transactionalContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, body) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -280,6 +278,9 @@ func (client blockBlobClient) stageBlockPreparer(blockID string, contentLength i params.Set("comp", "block") req.URL.RawQuery = params.Encode() req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) } @@ -306,22 +307,26 @@ func (client blockBlobClient) stageBlockResponder(resp pipeline.Response) (pipel // // blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or // equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the -// same size for each block. contentLength is the length of the request. sourceURL is specifiy an URL to the copy -// source. sourceRange is bytes of source data in the specified range. sourceContentMD5 is specify the md5 calculated -// for the range of bytes that must be read from the copy source. timeout is the timeout parameter is expressed in -// seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's -// lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character -// limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL *string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (*BlockBlobStageBlockFromURLResponse, error) { +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. sourceIfModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. sourceIfUnmodifiedSince is specify this header value to operate +// only on a blob if it has not been modified since the specified date/time. sourceIfMatch is specify an ETag value to +// operate only on blobs with a matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*BlockBlobStageBlockFromURLResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.stageBlockFromURLPreparer(blockID, contentLength, sourceURL, sourceRange, sourceContentMD5, timeout, leaseID, requestID) + req, err := client.stageBlockFromURLPreparer(blockID, contentLength, sourceURL, sourceRange, sourceContentMD5, timeout, leaseID, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) if err != nil { return nil, err } @@ -333,7 +338,7 @@ func (client blockBlobClient) StageBlockFromURL(ctx context.Context, blockID str } // stageBlockFromURLPreparer prepares the StageBlockFromURL request. -func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentLength int64, sourceURL *string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, requestID *string) (pipeline.Request, error) { +func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentLength int64, sourceURL string, sourceRange *string, sourceContentMD5 []byte, timeout *int32, leaseID *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -346,9 +351,7 @@ func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentL params.Set("comp", "block") req.URL.RawQuery = params.Encode() req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if sourceURL != nil { - req.Header.Set("x-ms-copy-source", *sourceURL) - } + req.Header.Set("x-ms-copy-source", sourceURL) if sourceRange != nil { req.Header.Set("x-ms-source-range", *sourceRange) } @@ -358,6 +361,18 @@ func (client blockBlobClient) stageBlockFromURLPreparer(blockID string, contentL if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } req.Header.Set("x-ms-version", ServiceVersion) if requestID != nil { req.Header.Set("x-ms-client-request-id", *requestID) @@ -397,27 +412,24 @@ func (client blockBlobClient) stageBlockFromURLResponder(resp pipeline.Response) // destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified // metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, // metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and -// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is // active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. // ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified // date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified -// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value. +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. // ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a // client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobUploadResponse, error) { +func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*BlockBlobUploadResponse, error) { if err := validate([]validation{ {targetValue: body, constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.uploadPreparer(body, contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.uploadPreparer(body, contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -429,7 +441,7 @@ func (client blockBlobClient) Upload(ctx context.Context, body io.ReadSeeker, co } // uploadPreparer prepares the Upload request. -func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, body) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -472,8 +484,8 @@ func (client blockBlobClient) uploadPreparer(body io.ReadSeeker, contentLength i if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_client.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go similarity index 96% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_client.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go index b42a79b1571c..1b3ea2e4b4fc 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_client.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go @@ -10,7 +10,7 @@ import ( const ( // ServiceVersion specifies the version of the operations used in this package. - ServiceVersion = "2018-03-28" + ServiceVersion = "2018-11-09" ) // managementClient is the base client for Azblob. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go similarity index 94% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go index 3e744fcbedb9..599e8118cc57 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_container.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go @@ -7,14 +7,13 @@ import ( "bytes" "context" "encoding/xml" + "github.com/Azure/azure-pipeline-go/pipeline" "io" "io/ioutil" "net/http" "net/url" "strconv" "time" - - "github.com/Azure/azure-pipeline-go/pipeline" ) // containerClient is the client for the Container methods of the Azblob service. @@ -179,10 +178,10 @@ func (client containerClient) breakLeaseResponder(resp pipeline.Response) (pipel // ChangeLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be // 15 to 60 seconds, or can be infinite // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. -// proposedLeaseID is proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the -// proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string -// formats. timeout is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only @@ -264,10 +263,7 @@ func (client containerClient) Create(ctx context.Context, timeout *int32, metada if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } req, err := client.createPreparer(timeout, metadata, access, requestID) @@ -324,7 +320,7 @@ func (client containerClient) createResponder(resp pipeline.Response) (pipeline. // // timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it // has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a // blob if it has not been modified since the specified date/time. requestID is provides a client-generated, opaque @@ -391,7 +387,7 @@ func (client containerClient) deleteResponder(resp pipeline.Response) (pipeline. // // timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character // limit that is recorded in the analytics logs when storage analytics logging is enabled. func (client containerClient) GetAccessPolicy(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*SignedIdentifiers, error) { @@ -448,7 +444,7 @@ func (client containerClient) getAccessPolicyResponder(resp pipeline.Response) ( defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -460,12 +456,50 @@ func (client containerClient) getAccessPolicyResponder(resp pipeline.Response) ( return result, nil } +// GetAccountInfo returns the sku name and account kind +func (client containerClient) GetAccountInfo(ctx context.Context) (*ContainerGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ContainerGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client containerClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client containerClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ContainerGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + // GetProperties returns all user-defined metadata and system properties for the specified container. The data returned // does not include the container's list of blobs // // timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. requestID is provides a client-generated, opaque value with a 1 KB character // limit that is recorded in the analytics logs when storage analytics logging is enabled. func (client containerClient) GetProperties(ctx context.Context, timeout *int32, leaseID *string, requestID *string) (*ContainerGetPropertiesResponse, error) { @@ -601,7 +635,7 @@ func (client containerClient) listBlobFlatSegmentResponder(resp pipeline.Respons defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -699,7 +733,7 @@ func (client containerClient) listBlobHierarchySegmentResponder(resp pipeline.Re defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -714,8 +748,8 @@ func (client containerClient) listBlobHierarchySegmentResponder(resp pipeline.Re // ReleaseLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be // 15 to 60 seconds, or can be infinite // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout -// is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only @@ -782,8 +816,8 @@ func (client containerClient) releaseLeaseResponder(resp pipeline.Response) (pip // RenewLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 // to 60 seconds, or can be infinite // -// leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. timeout -// is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only @@ -853,7 +887,7 @@ func (client containerClient) renewLeaseResponder(resp pipeline.Response) (pipel // containerACL is the acls for the container timeout is the timeout parameter is expressed in seconds. For more // information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. access is specifies whether data in the container may be accessed publicly and // the level of access ifModifiedSince is specify this header value to operate only on a blob if it has been modified // since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has @@ -933,7 +967,7 @@ func (client containerClient) setAccessPolicyResponder(resp pipeline.Response) ( // // timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. metadata is optional. Specifies a user-defined name-value pair associated with // the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to // the destination blob. If one or more name-value pairs are specified, the destination blob is created with the @@ -946,10 +980,7 @@ func (client containerClient) SetMetadata(ctx context.Context, timeout *int32, l if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } req, err := client.setMetadataPreparer(timeout, leaseID, metadata, ifModifiedSince, requestID) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go similarity index 81% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go index 3d8114ae6b5e..391584969afb 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_models.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go @@ -4,8 +4,11 @@ package azblob // Changes may cause incorrect behavior and will be lost if the code is regenerated. import ( + "crypto/hmac" + "crypto/sha256" "encoding/base64" "encoding/xml" + "errors" "io" "net/http" "reflect" @@ -54,7 +57,7 @@ func (md *Metadata) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { // Marker represents an opaque value used in paged responses. type Marker struct { - val *string + Val *string } // NotDone returns true if the list enumeration should be started or is not yet complete. Specifically, NotDone returns true @@ -62,14 +65,14 @@ type Marker struct { // the service. NotDone also returns true whenever the service returns an interim result portion. NotDone returns false only // after the service has returned the final result portion. func (m Marker) NotDone() bool { - return m.val == nil || *m.val != "" + return m.Val == nil || *m.Val != "" } // UnmarshalXML implements the xml.Unmarshaler interface for Marker. func (m *Marker) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { var out string err := d.DecodeElement(&out, &start) - m.val = &out + m.Val = &out return err } @@ -86,6 +89,12 @@ func joinConst(s interface{}, sep string) string { return strings.Join(ss, sep) } +func validateError(err error) { + if err != nil { + panic(err) + } +} + // AccessTierType enumerates the values for access tier type. type AccessTierType string @@ -119,6 +128,25 @@ func PossibleAccessTierTypeValues() []AccessTierType { return []AccessTierType{AccessTierArchive, AccessTierCool, AccessTierHot, AccessTierNone, AccessTierP10, AccessTierP20, AccessTierP30, AccessTierP4, AccessTierP40, AccessTierP50, AccessTierP6} } +// AccountKindType enumerates the values for account kind type. +type AccountKindType string + +const ( + // AccountKindBlobStorage ... + AccountKindBlobStorage AccountKindType = "BlobStorage" + // AccountKindNone represents an empty AccountKindType. + AccountKindNone AccountKindType = "" + // AccountKindStorage ... + AccountKindStorage AccountKindType = "Storage" + // AccountKindStorageV2 ... + AccountKindStorageV2 AccountKindType = "StorageV2" +) + +// PossibleAccountKindTypeValues returns an array of possible values for the AccountKindType const type. +func PossibleAccountKindTypeValues() []AccountKindType { + return []AccountKindType{AccountKindBlobStorage, AccountKindNone, AccountKindStorage, AccountKindStorageV2} +} + // ArchiveStatusType enumerates the values for archive status type. type ArchiveStatusType string @@ -362,6 +390,29 @@ func PossibleSequenceNumberActionTypeValues() []SequenceNumberActionType { return []SequenceNumberActionType{SequenceNumberActionIncrement, SequenceNumberActionMax, SequenceNumberActionNone, SequenceNumberActionUpdate} } +// SkuNameType enumerates the values for sku name type. +type SkuNameType string + +const ( + // SkuNameNone represents an empty SkuNameType. + SkuNameNone SkuNameType = "" + // SkuNamePremiumLRS ... + SkuNamePremiumLRS SkuNameType = "Premium_LRS" + // SkuNameStandardGRS ... + SkuNameStandardGRS SkuNameType = "Standard_GRS" + // SkuNameStandardLRS ... + SkuNameStandardLRS SkuNameType = "Standard_LRS" + // SkuNameStandardRAGRS ... + SkuNameStandardRAGRS SkuNameType = "Standard_RAGRS" + // SkuNameStandardZRS ... + SkuNameStandardZRS SkuNameType = "Standard_ZRS" +) + +// PossibleSkuNameTypeValues returns an array of possible values for the SkuNameType const type. +func PossibleSkuNameTypeValues() []SkuNameType { + return []SkuNameType{SkuNameNone, SkuNamePremiumLRS, SkuNameStandardGRS, SkuNameStandardLRS, SkuNameStandardRAGRS, SkuNameStandardZRS} +} + // StorageErrorCodeType enumerates the values for storage error code type. type StorageErrorCodeType string @@ -376,6 +427,8 @@ const ( StorageErrorCodeAppendPositionConditionNotMet StorageErrorCodeType = "AppendPositionConditionNotMet" // StorageErrorCodeAuthenticationFailed ... StorageErrorCodeAuthenticationFailed StorageErrorCodeType = "AuthenticationFailed" + // StorageErrorCodeAuthorizationFailure ... + StorageErrorCodeAuthorizationFailure StorageErrorCodeType = "AuthorizationFailure" // StorageErrorCodeBlobAlreadyExists ... StorageErrorCodeBlobAlreadyExists StorageErrorCodeType = "BlobAlreadyExists" // StorageErrorCodeBlobArchived ... @@ -580,7 +633,22 @@ const ( // PossibleStorageErrorCodeTypeValues returns an array of possible values for the StorageErrorCodeType const type. func PossibleStorageErrorCodeTypeValues() []StorageErrorCodeType { - return []StorageErrorCodeType{StorageErrorCodeAccountAlreadyExists, StorageErrorCodeAccountBeingCreated, StorageErrorCodeAccountIsDisabled, StorageErrorCodeAppendPositionConditionNotMet, StorageErrorCodeAuthenticationFailed, StorageErrorCodeBlobAlreadyExists, StorageErrorCodeBlobArchived, StorageErrorCodeBlobBeingRehydrated, StorageErrorCodeBlobNotArchived, StorageErrorCodeBlobNotFound, StorageErrorCodeBlobOverwritten, StorageErrorCodeBlobTierInadequateForContentLength, StorageErrorCodeBlockCountExceedsLimit, StorageErrorCodeBlockListTooLong, StorageErrorCodeCannotChangeToLowerTier, StorageErrorCodeCannotVerifyCopySource, StorageErrorCodeConditionHeadersNotSupported, StorageErrorCodeConditionNotMet, StorageErrorCodeContainerAlreadyExists, StorageErrorCodeContainerBeingDeleted, StorageErrorCodeContainerDisabled, StorageErrorCodeContainerNotFound, StorageErrorCodeContentLengthLargerThanTierLimit, StorageErrorCodeCopyAcrossAccountsNotSupported, StorageErrorCodeCopyIDMismatch, StorageErrorCodeEmptyMetadataKey, StorageErrorCodeFeatureVersionMismatch, StorageErrorCodeIncrementalCopyBlobMismatch, StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, StorageErrorCodeIncrementalCopySourceMustBeSnapshot, StorageErrorCodeInfiniteLeaseDurationRequired, StorageErrorCodeInsufficientAccountPermissions, StorageErrorCodeInternalError, StorageErrorCodeInvalidAuthenticationInfo, StorageErrorCodeInvalidBlobOrBlock, StorageErrorCodeInvalidBlobTier, StorageErrorCodeInvalidBlobType, StorageErrorCodeInvalidBlockID, StorageErrorCodeInvalidBlockList, StorageErrorCodeInvalidHeaderValue, StorageErrorCodeInvalidHTTPVerb, StorageErrorCodeInvalidInput, StorageErrorCodeInvalidMd5, StorageErrorCodeInvalidMetadata, StorageErrorCodeInvalidOperation, StorageErrorCodeInvalidPageRange, StorageErrorCodeInvalidQueryParameterValue, StorageErrorCodeInvalidRange, StorageErrorCodeInvalidResourceName, StorageErrorCodeInvalidSourceBlobType, StorageErrorCodeInvalidSourceBlobURL, StorageErrorCodeInvalidURI, StorageErrorCodeInvalidVersionForPageBlobOperation, StorageErrorCodeInvalidXMLDocument, StorageErrorCodeInvalidXMLNodeValue, StorageErrorCodeLeaseAlreadyBroken, StorageErrorCodeLeaseAlreadyPresent, StorageErrorCodeLeaseIDMismatchWithBlobOperation, StorageErrorCodeLeaseIDMismatchWithContainerOperation, StorageErrorCodeLeaseIDMismatchWithLeaseOperation, StorageErrorCodeLeaseIDMissing, StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, StorageErrorCodeLeaseLost, StorageErrorCodeLeaseNotPresentWithBlobOperation, StorageErrorCodeLeaseNotPresentWithContainerOperation, StorageErrorCodeLeaseNotPresentWithLeaseOperation, StorageErrorCodeMaxBlobSizeConditionNotMet, StorageErrorCodeMd5Mismatch, StorageErrorCodeMetadataTooLarge, StorageErrorCodeMissingContentLengthHeader, StorageErrorCodeMissingRequiredHeader, StorageErrorCodeMissingRequiredQueryParameter, StorageErrorCodeMissingRequiredXMLNode, StorageErrorCodeMultipleConditionHeadersNotSupported, StorageErrorCodeNone, StorageErrorCodeNoPendingCopyOperation, StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, StorageErrorCodeOperationTimedOut, StorageErrorCodeOutOfRangeInput, StorageErrorCodeOutOfRangeQueryParameterValue, StorageErrorCodePendingCopyOperation, StorageErrorCodePreviousSnapshotCannotBeNewer, StorageErrorCodePreviousSnapshotNotFound, StorageErrorCodePreviousSnapshotOperationNotSupported, StorageErrorCodeRequestBodyTooLarge, StorageErrorCodeRequestURLFailedToParse, StorageErrorCodeResourceAlreadyExists, StorageErrorCodeResourceNotFound, StorageErrorCodeResourceTypeMismatch, StorageErrorCodeSequenceNumberConditionNotMet, StorageErrorCodeSequenceNumberIncrementTooLarge, StorageErrorCodeServerBusy, StorageErrorCodeSnaphotOperationRateExceeded, StorageErrorCodeSnapshotCountExceeded, StorageErrorCodeSnapshotsPresent, StorageErrorCodeSourceConditionNotMet, StorageErrorCodeSystemInUse, StorageErrorCodeTargetConditionNotMet, StorageErrorCodeUnauthorizedBlobOverwrite, StorageErrorCodeUnsupportedHeader, StorageErrorCodeUnsupportedHTTPVerb, StorageErrorCodeUnsupportedQueryParameter, StorageErrorCodeUnsupportedXMLNode} + return []StorageErrorCodeType{StorageErrorCodeAccountAlreadyExists, StorageErrorCodeAccountBeingCreated, StorageErrorCodeAccountIsDisabled, StorageErrorCodeAppendPositionConditionNotMet, StorageErrorCodeAuthenticationFailed, StorageErrorCodeAuthorizationFailure, StorageErrorCodeBlobAlreadyExists, StorageErrorCodeBlobArchived, StorageErrorCodeBlobBeingRehydrated, StorageErrorCodeBlobNotArchived, StorageErrorCodeBlobNotFound, StorageErrorCodeBlobOverwritten, StorageErrorCodeBlobTierInadequateForContentLength, StorageErrorCodeBlockCountExceedsLimit, StorageErrorCodeBlockListTooLong, StorageErrorCodeCannotChangeToLowerTier, StorageErrorCodeCannotVerifyCopySource, StorageErrorCodeConditionHeadersNotSupported, StorageErrorCodeConditionNotMet, StorageErrorCodeContainerAlreadyExists, StorageErrorCodeContainerBeingDeleted, StorageErrorCodeContainerDisabled, StorageErrorCodeContainerNotFound, StorageErrorCodeContentLengthLargerThanTierLimit, StorageErrorCodeCopyAcrossAccountsNotSupported, StorageErrorCodeCopyIDMismatch, StorageErrorCodeEmptyMetadataKey, StorageErrorCodeFeatureVersionMismatch, StorageErrorCodeIncrementalCopyBlobMismatch, StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, StorageErrorCodeIncrementalCopySourceMustBeSnapshot, StorageErrorCodeInfiniteLeaseDurationRequired, StorageErrorCodeInsufficientAccountPermissions, StorageErrorCodeInternalError, StorageErrorCodeInvalidAuthenticationInfo, StorageErrorCodeInvalidBlobOrBlock, StorageErrorCodeInvalidBlobTier, StorageErrorCodeInvalidBlobType, StorageErrorCodeInvalidBlockID, StorageErrorCodeInvalidBlockList, StorageErrorCodeInvalidHeaderValue, StorageErrorCodeInvalidHTTPVerb, StorageErrorCodeInvalidInput, StorageErrorCodeInvalidMd5, StorageErrorCodeInvalidMetadata, StorageErrorCodeInvalidOperation, StorageErrorCodeInvalidPageRange, StorageErrorCodeInvalidQueryParameterValue, StorageErrorCodeInvalidRange, StorageErrorCodeInvalidResourceName, StorageErrorCodeInvalidSourceBlobType, StorageErrorCodeInvalidSourceBlobURL, StorageErrorCodeInvalidURI, StorageErrorCodeInvalidVersionForPageBlobOperation, StorageErrorCodeInvalidXMLDocument, StorageErrorCodeInvalidXMLNodeValue, StorageErrorCodeLeaseAlreadyBroken, StorageErrorCodeLeaseAlreadyPresent, StorageErrorCodeLeaseIDMismatchWithBlobOperation, StorageErrorCodeLeaseIDMismatchWithContainerOperation, StorageErrorCodeLeaseIDMismatchWithLeaseOperation, StorageErrorCodeLeaseIDMissing, StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, StorageErrorCodeLeaseLost, StorageErrorCodeLeaseNotPresentWithBlobOperation, StorageErrorCodeLeaseNotPresentWithContainerOperation, StorageErrorCodeLeaseNotPresentWithLeaseOperation, StorageErrorCodeMaxBlobSizeConditionNotMet, StorageErrorCodeMd5Mismatch, StorageErrorCodeMetadataTooLarge, StorageErrorCodeMissingContentLengthHeader, StorageErrorCodeMissingRequiredHeader, StorageErrorCodeMissingRequiredQueryParameter, StorageErrorCodeMissingRequiredXMLNode, StorageErrorCodeMultipleConditionHeadersNotSupported, StorageErrorCodeNone, StorageErrorCodeNoPendingCopyOperation, StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, StorageErrorCodeOperationTimedOut, StorageErrorCodeOutOfRangeInput, StorageErrorCodeOutOfRangeQueryParameterValue, StorageErrorCodePendingCopyOperation, StorageErrorCodePreviousSnapshotCannotBeNewer, StorageErrorCodePreviousSnapshotNotFound, StorageErrorCodePreviousSnapshotOperationNotSupported, StorageErrorCodeRequestBodyTooLarge, StorageErrorCodeRequestURLFailedToParse, StorageErrorCodeResourceAlreadyExists, StorageErrorCodeResourceNotFound, StorageErrorCodeResourceTypeMismatch, StorageErrorCodeSequenceNumberConditionNotMet, StorageErrorCodeSequenceNumberIncrementTooLarge, StorageErrorCodeServerBusy, StorageErrorCodeSnaphotOperationRateExceeded, StorageErrorCodeSnapshotCountExceeded, StorageErrorCodeSnapshotsPresent, StorageErrorCodeSourceConditionNotMet, StorageErrorCodeSystemInUse, StorageErrorCodeTargetConditionNotMet, StorageErrorCodeUnauthorizedBlobOverwrite, StorageErrorCodeUnsupportedHeader, StorageErrorCodeUnsupportedHTTPVerb, StorageErrorCodeUnsupportedQueryParameter, StorageErrorCodeUnsupportedXMLNode} +} + +// SyncCopyStatusType enumerates the values for sync copy status type. +type SyncCopyStatusType string + +const ( + // SyncCopyStatusNone represents an empty SyncCopyStatusType. + SyncCopyStatusNone SyncCopyStatusType = "" + // SyncCopyStatusSuccess ... + SyncCopyStatusSuccess SyncCopyStatusType = "success" +) + +// PossibleSyncCopyStatusTypeValues returns an array of possible values for the SyncCopyStatusType const type. +func PossibleSyncCopyStatusTypeValues() []SyncCopyStatusType { + return []SyncCopyStatusType{SyncCopyStatusNone, SyncCopyStatusSuccess} } // AccessPolicy - An Access policy @@ -595,22 +663,113 @@ type AccessPolicy struct { // MarshalXML implements the xml.Marshaler interface for AccessPolicy. func (ap AccessPolicy) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() { - panic("size mismatch between AccessPolicy and accessPolicy") - } ap2 := (*accessPolicy)(unsafe.Pointer(&ap)) return e.EncodeElement(*ap2, start) } // UnmarshalXML implements the xml.Unmarshaler interface for AccessPolicy. func (ap *AccessPolicy) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() { - panic("size mismatch between AccessPolicy and accessPolicy") - } ap2 := (*accessPolicy)(unsafe.Pointer(ap)) return d.DecodeElement(ap2, &start) } +// AppendBlobAppendBlockFromURLResponse ... +type AppendBlobAppendBlockFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (ababfur AppendBlobAppendBlockFromURLResponse) Response() *http.Response { + return ababfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (ababfur AppendBlobAppendBlockFromURLResponse) StatusCode() int { + return ababfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (ababfur AppendBlobAppendBlockFromURLResponse) Status() string { + return ababfur.rawResponse.Status +} + +// BlobAppendOffset returns the value for header x-ms-blob-append-offset. +func (ababfur AppendBlobAppendBlockFromURLResponse) BlobAppendOffset() string { + return ababfur.rawResponse.Header.Get("x-ms-blob-append-offset") +} + +// BlobCommittedBlockCount returns the value for header x-ms-blob-committed-block-count. +func (ababfur AppendBlobAppendBlockFromURLResponse) BlobCommittedBlockCount() int32 { + s := ababfur.rawResponse.Header.Get("x-ms-blob-committed-block-count") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + i = 0 + } + return int32(i) +} + +// ContentMD5 returns the value for header Content-MD5. +func (ababfur AppendBlobAppendBlockFromURLResponse) ContentMD5() []byte { + s := ababfur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (ababfur AppendBlobAppendBlockFromURLResponse) Date() time.Time { + s := ababfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (ababfur AppendBlobAppendBlockFromURLResponse) ErrorCode() string { + return ababfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (ababfur AppendBlobAppendBlockFromURLResponse) ETag() ETag { + return ETag(ababfur.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (ababfur AppendBlobAppendBlockFromURLResponse) LastModified() time.Time { + s := ababfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (ababfur AppendBlobAppendBlockFromURLResponse) RequestID() string { + return ababfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (ababfur AppendBlobAppendBlockFromURLResponse) Version() string { + return ababfur.rawResponse.Header.Get("x-ms-version") +} + // AppendBlobAppendBlockResponse ... type AppendBlobAppendBlockResponse struct { rawResponse *http.Response @@ -644,7 +803,7 @@ func (ababr AppendBlobAppendBlockResponse) BlobCommittedBlockCount() int32 { } i, err := strconv.ParseInt(s, 10, 32) if err != nil { - panic(err) + i = 0 } return int32(i) } @@ -657,7 +816,7 @@ func (ababr AppendBlobAppendBlockResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -670,7 +829,7 @@ func (ababr AppendBlobAppendBlockResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -685,6 +844,11 @@ func (ababr AppendBlobAppendBlockResponse) ETag() ETag { return ETag(ababr.rawResponse.Header.Get("ETag")) } +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (ababr AppendBlobAppendBlockResponse) IsServerEncrypted() string { + return ababr.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + // LastModified returns the value for header Last-Modified. func (ababr AppendBlobAppendBlockResponse) LastModified() time.Time { s := ababr.rawResponse.Header.Get("Last-Modified") @@ -693,7 +857,7 @@ func (ababr AppendBlobAppendBlockResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -736,7 +900,7 @@ func (abcr AppendBlobCreateResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -749,7 +913,7 @@ func (abcr AppendBlobCreateResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -777,7 +941,7 @@ func (abcr AppendBlobCreateResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -820,7 +984,7 @@ func (bacfur BlobAbortCopyFromURLResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -868,7 +1032,7 @@ func (balr BlobAcquireLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -891,7 +1055,7 @@ func (balr BlobAcquireLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -939,7 +1103,7 @@ func (bblr BlobBreakLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -962,7 +1126,7 @@ func (bblr BlobBreakLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -975,7 +1139,7 @@ func (bblr BlobBreakLeaseResponse) LeaseTime() int32 { } i, err := strconv.ParseInt(s, 10, 32) if err != nil { - panic(err) + i = 0 } return int32(i) } @@ -1018,7 +1182,7 @@ func (bclr BlobChangeLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1041,7 +1205,7 @@ func (bclr BlobChangeLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1061,6 +1225,82 @@ func (bclr BlobChangeLeaseResponse) Version() string { return bclr.rawResponse.Header.Get("x-ms-version") } +// BlobCopyFromURLResponse ... +type BlobCopyFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bcfur BlobCopyFromURLResponse) Response() *http.Response { + return bcfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bcfur BlobCopyFromURLResponse) StatusCode() int { + return bcfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bcfur BlobCopyFromURLResponse) Status() string { + return bcfur.rawResponse.Status +} + +// CopyID returns the value for header x-ms-copy-id. +func (bcfur BlobCopyFromURLResponse) CopyID() string { + return bcfur.rawResponse.Header.Get("x-ms-copy-id") +} + +// CopyStatus returns the value for header x-ms-copy-status. +func (bcfur BlobCopyFromURLResponse) CopyStatus() SyncCopyStatusType { + return SyncCopyStatusType(bcfur.rawResponse.Header.Get("x-ms-copy-status")) +} + +// Date returns the value for header Date. +func (bcfur BlobCopyFromURLResponse) Date() time.Time { + s := bcfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bcfur BlobCopyFromURLResponse) ErrorCode() string { + return bcfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (bcfur BlobCopyFromURLResponse) ETag() ETag { + return ETag(bcfur.rawResponse.Header.Get("ETag")) +} + +// LastModified returns the value for header Last-Modified. +func (bcfur BlobCopyFromURLResponse) LastModified() time.Time { + s := bcfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (bcfur BlobCopyFromURLResponse) RequestID() string { + return bcfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (bcfur BlobCopyFromURLResponse) Version() string { + return bcfur.rawResponse.Header.Get("x-ms-version") +} + // BlobCreateSnapshotResponse ... type BlobCreateSnapshotResponse struct { rawResponse *http.Response @@ -1089,7 +1329,7 @@ func (bcsr BlobCreateSnapshotResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1112,7 +1352,7 @@ func (bcsr BlobCreateSnapshotResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1160,7 +1400,7 @@ func (bdr BlobDeleteResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1180,11 +1420,71 @@ func (bdr BlobDeleteResponse) Version() string { return bdr.rawResponse.Header.Get("x-ms-version") } -// BlobFlatList ... -type BlobFlatList struct { +// BlobFlatListSegment ... +type BlobFlatListSegment struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blobs"` BlobItems []BlobItem `xml:"Blob"` } +// BlobGetAccountInfoResponse ... +type BlobGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (bgair BlobGetAccountInfoResponse) Response() *http.Response { + return bgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (bgair BlobGetAccountInfoResponse) StatusCode() int { + return bgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (bgair BlobGetAccountInfoResponse) Status() string { + return bgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (bgair BlobGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(bgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (bgair BlobGetAccountInfoResponse) Date() time.Time { + s := bgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (bgair BlobGetAccountInfoResponse) ErrorCode() string { + return bgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (bgair BlobGetAccountInfoResponse) RequestID() string { + return bgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (bgair BlobGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(bgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (bgair BlobGetAccountInfoResponse) Version() string { + return bgair.rawResponse.Header.Get("x-ms-version") +} + // BlobGetPropertiesResponse ... type BlobGetPropertiesResponse struct { rawResponse *http.Response @@ -1228,6 +1528,19 @@ func (bgpr BlobGetPropertiesResponse) AccessTier() string { return bgpr.rawResponse.Header.Get("x-ms-access-tier") } +// AccessTierChangeTime returns the value for header x-ms-access-tier-change-time. +func (bgpr BlobGetPropertiesResponse) AccessTierChangeTime() time.Time { + s := bgpr.rawResponse.Header.Get("x-ms-access-tier-change-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + // AccessTierInferred returns the value for header x-ms-access-tier-inferred. func (bgpr BlobGetPropertiesResponse) AccessTierInferred() string { return bgpr.rawResponse.Header.Get("x-ms-access-tier-inferred") @@ -1246,7 +1559,7 @@ func (bgpr BlobGetPropertiesResponse) BlobCommittedBlockCount() int32 { } i, err := strconv.ParseInt(s, 10, 32) if err != nil { - panic(err) + i = 0 } return int32(i) } @@ -1259,7 +1572,7 @@ func (bgpr BlobGetPropertiesResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -1297,7 +1610,7 @@ func (bgpr BlobGetPropertiesResponse) ContentLength() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -1310,7 +1623,7 @@ func (bgpr BlobGetPropertiesResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -1328,7 +1641,7 @@ func (bgpr BlobGetPropertiesResponse) CopyCompletionTime() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1358,6 +1671,19 @@ func (bgpr BlobGetPropertiesResponse) CopyStatusDescription() string { return bgpr.rawResponse.Header.Get("x-ms-copy-status-description") } +// CreationTime returns the value for header x-ms-creation-time. +func (bgpr BlobGetPropertiesResponse) CreationTime() time.Time { + s := bgpr.rawResponse.Header.Get("x-ms-creation-time") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + // Date returns the value for header Date. func (bgpr BlobGetPropertiesResponse) Date() time.Time { s := bgpr.rawResponse.Header.Get("Date") @@ -1366,7 +1692,7 @@ func (bgpr BlobGetPropertiesResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1404,7 +1730,7 @@ func (bgpr BlobGetPropertiesResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1434,14 +1760,18 @@ func (bgpr BlobGetPropertiesResponse) Version() string { return bgpr.rawResponse.Header.Get("x-ms-version") } -// BlobHierarchyList ... -type BlobHierarchyList struct { +// BlobHierarchyListSegment ... +type BlobHierarchyListSegment struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blobs"` BlobPrefixes []BlobPrefix `xml:"BlobPrefix"` BlobItems []BlobItem `xml:"Blob"` } // BlobItem - An Azure Storage blob type BlobItem struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Blob"` Name string `xml:"Name"` Deleted bool `xml:"Deleted"` Snapshot string `xml:"Snapshot"` @@ -1456,8 +1786,11 @@ type BlobPrefix struct { // BlobProperties - Properties of a blob type BlobProperties struct { - LastModified time.Time `xml:"Last-Modified"` - Etag ETag `xml:"Etag"` + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Properties"` + CreationTime *time.Time `xml:"Creation-Time"` + LastModified time.Time `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` // ContentLength - Size in bytes ContentLength *int64 `xml:"Content-Length"` ContentType *string `xml:"Content-Type"` @@ -1491,23 +1824,18 @@ type BlobProperties struct { AccessTier AccessTierType `xml:"AccessTier"` AccessTierInferred *bool `xml:"AccessTierInferred"` // ArchiveStatus - Possible values include: 'ArchiveStatusRehydratePendingToHot', 'ArchiveStatusRehydratePendingToCool', 'ArchiveStatusNone' - ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"` + ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"` + AccessTierChangeTime *time.Time `xml:"AccessTierChangeTime"` } // MarshalXML implements the xml.Marshaler interface for BlobProperties. func (bp BlobProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() { - panic("size mismatch between BlobProperties and blobProperties") - } bp2 := (*blobProperties)(unsafe.Pointer(&bp)) return e.EncodeElement(*bp2, start) } // UnmarshalXML implements the xml.Unmarshaler interface for BlobProperties. func (bp *BlobProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() { - panic("size mismatch between BlobProperties and blobProperties") - } bp2 := (*blobProperties)(unsafe.Pointer(bp)) return d.DecodeElement(bp2, &start) } @@ -1540,7 +1868,7 @@ func (brlr BlobReleaseLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1563,7 +1891,7 @@ func (brlr BlobReleaseLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1606,7 +1934,7 @@ func (brlr BlobRenewLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1629,7 +1957,7 @@ func (brlr BlobRenewLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1677,7 +2005,7 @@ func (bshhr BlobSetHTTPHeadersResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -1690,7 +2018,7 @@ func (bshhr BlobSetHTTPHeadersResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1713,7 +2041,7 @@ func (bshhr BlobSetHTTPHeadersResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1756,7 +2084,7 @@ func (bsmr BlobSetMetadataResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1784,7 +2112,7 @@ func (bsmr BlobSetMetadataResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1872,7 +2200,7 @@ func (bscfur BlobStartCopyFromURLResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1895,7 +2223,7 @@ func (bscfur BlobStartCopyFromURLResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1938,7 +2266,7 @@ func (bur BlobUndeleteResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -1994,7 +2322,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -2007,7 +2335,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2035,7 +2363,7 @@ func (bbcblr BlockBlobCommitBlockListResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2078,7 +2406,7 @@ func (bbsbfur BlockBlobStageBlockFromURLResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -2091,7 +2419,7 @@ func (bbsbfur BlockBlobStageBlockFromURLResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2144,7 +2472,7 @@ func (bbsbr BlockBlobStageBlockResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -2157,7 +2485,7 @@ func (bbsbr BlockBlobStageBlockResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2210,7 +2538,7 @@ func (bbur BlockBlobUploadResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -2223,7 +2551,7 @@ func (bbur BlockBlobUploadResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2251,7 +2579,7 @@ func (bbur BlockBlobUploadResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2296,7 +2624,7 @@ func (bl BlockList) BlobContentLength() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -2314,7 +2642,7 @@ func (bl BlockList) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2337,7 +2665,7 @@ func (bl BlockList) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2395,7 +2723,7 @@ func (calr ContainerAcquireLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2418,7 +2746,7 @@ func (calr ContainerAcquireLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2466,7 +2794,7 @@ func (cblr ContainerBreakLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2489,7 +2817,7 @@ func (cblr ContainerBreakLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2502,7 +2830,7 @@ func (cblr ContainerBreakLeaseResponse) LeaseTime() int32 { } i, err := strconv.ParseInt(s, 10, 32) if err != nil { - panic(err) + i = 0 } return int32(i) } @@ -2545,7 +2873,7 @@ func (cclr ContainerChangeLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2568,7 +2896,7 @@ func (cclr ContainerChangeLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2616,7 +2944,7 @@ func (ccr ContainerCreateResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2639,7 +2967,7 @@ func (ccr ContainerCreateResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2682,7 +3010,7 @@ func (cdr ContainerDeleteResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2702,6 +3030,64 @@ func (cdr ContainerDeleteResponse) Version() string { return cdr.rawResponse.Header.Get("x-ms-version") } +// ContainerGetAccountInfoResponse ... +type ContainerGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (cgair ContainerGetAccountInfoResponse) Response() *http.Response { + return cgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (cgair ContainerGetAccountInfoResponse) StatusCode() int { + return cgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (cgair ContainerGetAccountInfoResponse) Status() string { + return cgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (cgair ContainerGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(cgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (cgair ContainerGetAccountInfoResponse) Date() time.Time { + s := cgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (cgair ContainerGetAccountInfoResponse) ErrorCode() string { + return cgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (cgair ContainerGetAccountInfoResponse) RequestID() string { + return cgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (cgair ContainerGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(cgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (cgair ContainerGetAccountInfoResponse) Version() string { + return cgair.rawResponse.Header.Get("x-ms-version") +} + // ContainerGetPropertiesResponse ... type ContainerGetPropertiesResponse struct { rawResponse *http.Response @@ -2748,7 +3134,7 @@ func (cgpr ContainerGetPropertiesResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2763,6 +3149,16 @@ func (cgpr ContainerGetPropertiesResponse) ETag() ETag { return ETag(cgpr.rawResponse.Header.Get("ETag")) } +// HasImmutabilityPolicy returns the value for header x-ms-has-immutability-policy. +func (cgpr ContainerGetPropertiesResponse) HasImmutabilityPolicy() string { + return cgpr.rawResponse.Header.Get("x-ms-has-immutability-policy") +} + +// HasLegalHold returns the value for header x-ms-has-legal-hold. +func (cgpr ContainerGetPropertiesResponse) HasLegalHold() string { + return cgpr.rawResponse.Header.Get("x-ms-has-legal-hold") +} + // LastModified returns the value for header Last-Modified. func (cgpr ContainerGetPropertiesResponse) LastModified() time.Time { s := cgpr.rawResponse.Header.Get("Last-Modified") @@ -2771,7 +3167,7 @@ func (cgpr ContainerGetPropertiesResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2803,6 +3199,8 @@ func (cgpr ContainerGetPropertiesResponse) Version() string { // ContainerItem - An Azure Storage container type ContainerItem struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Container"` Name string `xml:"Name"` Properties ContainerProperties `xml:"Properties"` Metadata Metadata `xml:"Metadata"` @@ -2819,23 +3217,19 @@ type ContainerProperties struct { // LeaseDuration - Possible values include: 'LeaseDurationInfinite', 'LeaseDurationFixed', 'LeaseDurationNone' LeaseDuration LeaseDurationType `xml:"LeaseDuration"` // PublicAccess - Possible values include: 'PublicAccessContainer', 'PublicAccessBlob', 'PublicAccessNone' - PublicAccess PublicAccessType `xml:"PublicAccess"` + PublicAccess PublicAccessType `xml:"PublicAccess"` + HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"` + HasLegalHold *bool `xml:"HasLegalHold"` } // MarshalXML implements the xml.Marshaler interface for ContainerProperties. func (cp ContainerProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() { - panic("size mismatch between ContainerProperties and containerProperties") - } cp2 := (*containerProperties)(unsafe.Pointer(&cp)) return e.EncodeElement(*cp2, start) } // UnmarshalXML implements the xml.Unmarshaler interface for ContainerProperties. func (cp *ContainerProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() { - panic("size mismatch between ContainerProperties and containerProperties") - } cp2 := (*containerProperties)(unsafe.Pointer(cp)) return d.DecodeElement(cp2, &start) } @@ -2868,7 +3262,7 @@ func (crlr ContainerReleaseLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2891,7 +3285,7 @@ func (crlr ContainerReleaseLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2934,7 +3328,7 @@ func (crlr ContainerRenewLeaseResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -2957,7 +3351,7 @@ func (crlr ContainerRenewLeaseResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3005,7 +3399,7 @@ func (csapr ContainerSetAccessPolicyResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3028,7 +3422,7 @@ func (csapr ContainerSetAccessPolicyResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3071,7 +3465,7 @@ func (csmr ContainerSetMetadataResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3094,7 +3488,7 @@ func (csmr ContainerSetMetadataResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3126,7 +3520,7 @@ type CorsRule struct { MaxAgeInSeconds int32 `xml:"MaxAgeInSeconds"` } -// downloadResponse ... +// downloadResponse - Wraps the response from the blobClient.Download method. type downloadResponse struct { rawResponse *http.Response } @@ -3177,7 +3571,7 @@ func (dr downloadResponse) BlobCommittedBlockCount() int32 { } i, err := strconv.ParseInt(s, 10, 32) if err != nil { - panic(err) + i = 0 } return int32(i) } @@ -3190,7 +3584,7 @@ func (dr downloadResponse) BlobContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -3203,7 +3597,7 @@ func (dr downloadResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -3241,7 +3635,7 @@ func (dr downloadResponse) ContentLength() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -3254,7 +3648,7 @@ func (dr downloadResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -3277,7 +3671,7 @@ func (dr downloadResponse) CopyCompletionTime() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3315,7 +3709,7 @@ func (dr downloadResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3343,7 +3737,7 @@ func (dr downloadResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3373,7 +3767,7 @@ func (dr downloadResponse) Version() string { return dr.rawResponse.Header.Get("x-ms-version") } -// GeoReplication ... +// GeoReplication - Geo-Replication information for the Secondary Storage Service type GeoReplication struct { // Status - The status of the secondary location. Possible values include: 'GeoReplicationStatusLive', 'GeoReplicationStatusBootstrap', 'GeoReplicationStatusUnavailable', 'GeoReplicationStatusNone' Status GeoReplicationStatusType `xml:"Status"` @@ -3383,35 +3777,45 @@ type GeoReplication struct { // MarshalXML implements the xml.Marshaler interface for GeoReplication. func (gr GeoReplication) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() { - panic("size mismatch between GeoReplication and geoReplication") - } gr2 := (*geoReplication)(unsafe.Pointer(&gr)) return e.EncodeElement(*gr2, start) } // UnmarshalXML implements the xml.Unmarshaler interface for GeoReplication. func (gr *GeoReplication) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { - if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() { - panic("size mismatch between GeoReplication and geoReplication") - } gr2 := (*geoReplication)(unsafe.Pointer(gr)) return d.DecodeElement(gr2, &start) } +// KeyInfo - Key information +type KeyInfo struct { + // Start - The date-time the key is active in ISO 8601 UTC time + Start string `xml:"Start"` + // Expiry - The date-time the key expires in ISO 8601 UTC time + Expiry string `xml:"Expiry"` +} + +//NewKeyInfo creates a new KeyInfo struct with the correct time formatting & conversion +func NewKeyInfo(Start, Expiry time.Time) KeyInfo { + return KeyInfo{ + Start: Start.UTC().Format(SASTimeFormat), + Expiry: Expiry.UTC().Format(SASTimeFormat), + } +} + // ListBlobsFlatSegmentResponse - An enumeration of blobs type ListBlobsFlatSegmentResponse struct { rawResponse *http.Response // XMLName is used for marshalling and is subject to removal in a future release. - XMLName xml.Name `xml:"EnumerationResults"` - ServiceEndpoint string `xml:"ServiceEndpoint,attr"` - ContainerName string `xml:"ContainerName,attr"` - Prefix string `xml:"Prefix"` - Marker string `xml:"Marker"` - MaxResults int32 `xml:"MaxResults"` - Delimiter string `xml:"Delimiter"` - Segment BlobFlatList `xml:"Blobs"` - NextMarker Marker `xml:"NextMarker"` + XMLName xml.Name `xml:"EnumerationResults"` + ServiceEndpoint string `xml:"ServiceEndpoint,attr"` + ContainerName string `xml:"ContainerName,attr"` + Prefix *string `xml:"Prefix"` + Marker *string `xml:"Marker"` + MaxResults *int32 `xml:"MaxResults"` + Delimiter *string `xml:"Delimiter"` + Segment BlobFlatListSegment `xml:"Blobs"` + NextMarker Marker `xml:"NextMarker"` } // Response returns the raw HTTP response object. @@ -3442,7 +3846,7 @@ func (lbfsr ListBlobsFlatSegmentResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3466,15 +3870,15 @@ func (lbfsr ListBlobsFlatSegmentResponse) Version() string { type ListBlobsHierarchySegmentResponse struct { rawResponse *http.Response // XMLName is used for marshalling and is subject to removal in a future release. - XMLName xml.Name `xml:"EnumerationResults"` - ServiceEndpoint string `xml:"ServiceEndpoint,attr"` - ContainerName string `xml:"ContainerName,attr"` - Prefix string `xml:"Prefix"` - Marker string `xml:"Marker"` - MaxResults int32 `xml:"MaxResults"` - Delimiter string `xml:"Delimiter"` - Segment BlobHierarchyList `xml:"Blobs"` - NextMarker Marker `xml:"NextMarker"` + XMLName xml.Name `xml:"EnumerationResults"` + ServiceEndpoint string `xml:"ServiceEndpoint,attr"` + ContainerName string `xml:"ContainerName,attr"` + Prefix *string `xml:"Prefix"` + Marker *string `xml:"Marker"` + MaxResults *int32 `xml:"MaxResults"` + Delimiter *string `xml:"Delimiter"` + Segment BlobHierarchyListSegment `xml:"Blobs"` + NextMarker Marker `xml:"NextMarker"` } // Response returns the raw HTTP response object. @@ -3505,7 +3909,7 @@ func (lbhsr ListBlobsHierarchySegmentResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3525,47 +3929,47 @@ func (lbhsr ListBlobsHierarchySegmentResponse) Version() string { return lbhsr.rawResponse.Header.Get("x-ms-version") } -// ListContainersResponse - An enumeration of containers -type ListContainersResponse struct { +// ListContainersSegmentResponse - An enumeration of containers +type ListContainersSegmentResponse struct { rawResponse *http.Response // XMLName is used for marshalling and is subject to removal in a future release. XMLName xml.Name `xml:"EnumerationResults"` ServiceEndpoint string `xml:"ServiceEndpoint,attr"` - Prefix string `xml:"Prefix"` + Prefix *string `xml:"Prefix"` Marker *string `xml:"Marker"` - MaxResults int32 `xml:"MaxResults"` + MaxResults *int32 `xml:"MaxResults"` ContainerItems []ContainerItem `xml:"Containers>Container"` NextMarker Marker `xml:"NextMarker"` } // Response returns the raw HTTP response object. -func (lcr ListContainersResponse) Response() *http.Response { - return lcr.rawResponse +func (lcsr ListContainersSegmentResponse) Response() *http.Response { + return lcsr.rawResponse } // StatusCode returns the HTTP status code of the response, e.g. 200. -func (lcr ListContainersResponse) StatusCode() int { - return lcr.rawResponse.StatusCode +func (lcsr ListContainersSegmentResponse) StatusCode() int { + return lcsr.rawResponse.StatusCode } // Status returns the HTTP status message of the response, e.g. "200 OK". -func (lcr ListContainersResponse) Status() string { - return lcr.rawResponse.Status +func (lcsr ListContainersSegmentResponse) Status() string { + return lcsr.rawResponse.Status } // ErrorCode returns the value for header x-ms-error-code. -func (lcr ListContainersResponse) ErrorCode() string { - return lcr.rawResponse.Header.Get("x-ms-error-code") +func (lcsr ListContainersSegmentResponse) ErrorCode() string { + return lcsr.rawResponse.Header.Get("x-ms-error-code") } // RequestID returns the value for header x-ms-request-id. -func (lcr ListContainersResponse) RequestID() string { - return lcr.rawResponse.Header.Get("x-ms-request-id") +func (lcsr ListContainersSegmentResponse) RequestID() string { + return lcsr.rawResponse.Header.Get("x-ms-request-id") } // Version returns the value for header x-ms-version. -func (lcr ListContainersResponse) Version() string { - return lcr.rawResponse.Header.Get("x-ms-version") +func (lcsr ListContainersSegmentResponse) Version() string { + return lcsr.rawResponse.Header.Get("x-ms-version") } // Logging - Azure Analytics Logging settings. @@ -3581,7 +3985,7 @@ type Logging struct { RetentionPolicy RetentionPolicy `xml:"RetentionPolicy"` } -// Metrics ... +// Metrics - a summary of request statistics grouped by API in hour or minute aggregates for blobs type Metrics struct { // Version - The version of Storage Analytics to configure. Version *string `xml:"Version"` @@ -3620,7 +4024,7 @@ func (pbcpr PageBlobClearPagesResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -3633,7 +4037,7 @@ func (pbcpr PageBlobClearPagesResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -3646,7 +4050,7 @@ func (pbcpr PageBlobClearPagesResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3669,7 +4073,7 @@ func (pbcpr PageBlobClearPagesResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3722,7 +4126,7 @@ func (pbcir PageBlobCopyIncrementalResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3745,7 +4149,7 @@ func (pbcir PageBlobCopyIncrementalResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3788,7 +4192,7 @@ func (pbcr PageBlobCreateResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -3801,7 +4205,7 @@ func (pbcr PageBlobCreateResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3829,7 +4233,7 @@ func (pbcr PageBlobCreateResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3872,7 +4276,7 @@ func (pbrr PageBlobResizeResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -3885,7 +4289,7 @@ func (pbrr PageBlobResizeResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3908,7 +4312,7 @@ func (pbrr PageBlobResizeResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3951,7 +4355,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -3964,7 +4368,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -3987,7 +4391,7 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4002,6 +4406,103 @@ func (pbusnr PageBlobUpdateSequenceNumberResponse) Version() string { return pbusnr.rawResponse.Header.Get("x-ms-version") } +// PageBlobUploadPagesFromURLResponse ... +type PageBlobUploadPagesFromURLResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (pbupfur PageBlobUploadPagesFromURLResponse) Response() *http.Response { + return pbupfur.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (pbupfur PageBlobUploadPagesFromURLResponse) StatusCode() int { + return pbupfur.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (pbupfur PageBlobUploadPagesFromURLResponse) Status() string { + return pbupfur.rawResponse.Status +} + +// BlobSequenceNumber returns the value for header x-ms-blob-sequence-number. +func (pbupfur PageBlobUploadPagesFromURLResponse) BlobSequenceNumber() int64 { + s := pbupfur.rawResponse.Header.Get("x-ms-blob-sequence-number") + if s == "" { + return -1 + } + i, err := strconv.ParseInt(s, 10, 64) + if err != nil { + i = 0 + } + return i +} + +// ContentMD5 returns the value for header Content-MD5. +func (pbupfur PageBlobUploadPagesFromURLResponse) ContentMD5() []byte { + s := pbupfur.rawResponse.Header.Get("Content-MD5") + if s == "" { + return nil + } + b, err := base64.StdEncoding.DecodeString(s) + if err != nil { + b = nil + } + return b +} + +// Date returns the value for header Date. +func (pbupfur PageBlobUploadPagesFromURLResponse) Date() time.Time { + s := pbupfur.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (pbupfur PageBlobUploadPagesFromURLResponse) ErrorCode() string { + return pbupfur.rawResponse.Header.Get("x-ms-error-code") +} + +// ETag returns the value for header ETag. +func (pbupfur PageBlobUploadPagesFromURLResponse) ETag() ETag { + return ETag(pbupfur.rawResponse.Header.Get("ETag")) +} + +// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. +func (pbupfur PageBlobUploadPagesFromURLResponse) IsServerEncrypted() string { + return pbupfur.rawResponse.Header.Get("x-ms-request-server-encrypted") +} + +// LastModified returns the value for header Last-Modified. +func (pbupfur PageBlobUploadPagesFromURLResponse) LastModified() time.Time { + s := pbupfur.rawResponse.Header.Get("Last-Modified") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// RequestID returns the value for header x-ms-request-id. +func (pbupfur PageBlobUploadPagesFromURLResponse) RequestID() string { + return pbupfur.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (pbupfur PageBlobUploadPagesFromURLResponse) Version() string { + return pbupfur.rawResponse.Header.Get("x-ms-version") +} + // PageBlobUploadPagesResponse ... type PageBlobUploadPagesResponse struct { rawResponse *http.Response @@ -4030,7 +4531,7 @@ func (pbupr PageBlobUploadPagesResponse) BlobSequenceNumber() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -4043,7 +4544,7 @@ func (pbupr PageBlobUploadPagesResponse) ContentMD5() []byte { } b, err := base64.StdEncoding.DecodeString(s) if err != nil { - panic(err) + b = nil } return b } @@ -4056,7 +4557,7 @@ func (pbupr PageBlobUploadPagesResponse) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4084,7 +4585,7 @@ func (pbupr PageBlobUploadPagesResponse) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4129,7 +4630,7 @@ func (pl PageList) BlobContentLength() int64 { } i, err := strconv.ParseInt(s, 10, 64) if err != nil { - panic(err) + i = 0 } return i } @@ -4142,7 +4643,7 @@ func (pl PageList) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4165,7 +4666,7 @@ func (pl PageList) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4186,7 +4687,7 @@ type PageRange struct { End int64 `xml:"End"` } -// RetentionPolicy - the retention policy +// RetentionPolicy - the retention policy which determines how long the associated data should persist type RetentionPolicy struct { // Enabled - Indicates whether a retention policy is enabled for the storage service Enabled bool `xml:"Enabled"` @@ -4194,6 +4695,64 @@ type RetentionPolicy struct { Days *int32 `xml:"Days"` } +// ServiceGetAccountInfoResponse ... +type ServiceGetAccountInfoResponse struct { + rawResponse *http.Response +} + +// Response returns the raw HTTP response object. +func (sgair ServiceGetAccountInfoResponse) Response() *http.Response { + return sgair.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (sgair ServiceGetAccountInfoResponse) StatusCode() int { + return sgair.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (sgair ServiceGetAccountInfoResponse) Status() string { + return sgair.rawResponse.Status +} + +// AccountKind returns the value for header x-ms-account-kind. +func (sgair ServiceGetAccountInfoResponse) AccountKind() AccountKindType { + return AccountKindType(sgair.rawResponse.Header.Get("x-ms-account-kind")) +} + +// Date returns the value for header Date. +func (sgair ServiceGetAccountInfoResponse) Date() time.Time { + s := sgair.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (sgair ServiceGetAccountInfoResponse) ErrorCode() string { + return sgair.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (sgair ServiceGetAccountInfoResponse) RequestID() string { + return sgair.rawResponse.Header.Get("x-ms-request-id") +} + +// SkuName returns the value for header x-ms-sku-name. +func (sgair ServiceGetAccountInfoResponse) SkuName() SkuNameType { + return SkuNameType(sgair.rawResponse.Header.Get("x-ms-sku-name")) +} + +// Version returns the value for header x-ms-version. +func (sgair ServiceGetAccountInfoResponse) Version() string { + return sgair.rawResponse.Header.Get("x-ms-version") +} + // ServiceSetPropertiesResponse ... type ServiceSetPropertiesResponse struct { rawResponse *http.Response @@ -4232,12 +4791,11 @@ func (sspr ServiceSetPropertiesResponse) Version() string { // SignedIdentifier - signed identifier type SignedIdentifier struct { // ID - a unique id - ID string `xml:"Id"` - // AccessPolicy - The access policy + ID string `xml:"Id"` AccessPolicy AccessPolicy `xml:"AccessPolicy"` } -// SignedIdentifiers ... +// SignedIdentifiers - Wraps the response from the containerClient.GetAccessPolicy method. type SignedIdentifiers struct { rawResponse *http.Response Items []SignedIdentifier `xml:"SignedIdentifier"` @@ -4271,7 +4829,7 @@ func (si SignedIdentifiers) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4294,7 +4852,7 @@ func (si SignedIdentifiers) LastModified() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4309,21 +4867,28 @@ func (si SignedIdentifiers) Version() string { return si.rawResponse.Header.Get("x-ms-version") } +// StaticWebsite - The properties that enable an account to host a static website +type StaticWebsite struct { + // Enabled - Indicates whether this account is hosting a static website + Enabled bool `xml:"Enabled"` + // IndexDocument - The default name of the index page under each directory + IndexDocument *string `xml:"IndexDocument"` + // ErrorDocument404Path - The absolute path of the custom 404 page + ErrorDocument404Path *string `xml:"ErrorDocument404Path"` +} + // StorageServiceProperties - Storage Service Properties. type StorageServiceProperties struct { - rawResponse *http.Response - // Logging - Azure Analytics Logging settings - Logging *Logging `xml:"Logging"` - // HourMetrics - A summary of request statistics grouped by API in hourly aggregates for blobs - HourMetrics *Metrics `xml:"HourMetrics"` - // MinuteMetrics - a summary of request statistics grouped by API in minute aggregates for blobs + rawResponse *http.Response + Logging *Logging `xml:"Logging"` + HourMetrics *Metrics `xml:"HourMetrics"` MinuteMetrics *Metrics `xml:"MinuteMetrics"` // Cors - The set of CORS rules. Cors []CorsRule `xml:"Cors>CorsRule"` // DefaultServiceVersion - The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible values include version 2008-10-27 and all more recent versions - DefaultServiceVersion *string `xml:"DefaultServiceVersion"` - // DeleteRetentionPolicy - The Delete Retention Policy for the service + DefaultServiceVersion *string `xml:"DefaultServiceVersion"` DeleteRetentionPolicy *RetentionPolicy `xml:"DeleteRetentionPolicy"` + StaticWebsite *StaticWebsite `xml:"StaticWebsite"` } // Response returns the raw HTTP response object. @@ -4358,8 +4923,7 @@ func (ssp StorageServiceProperties) Version() string { // StorageServiceStats - Stats for the storage service. type StorageServiceStats struct { - rawResponse *http.Response - // GeoReplication - Geo-Replication information for the Secondary Storage Service + rawResponse *http.Response GeoReplication *GeoReplication `xml:"GeoReplication"` } @@ -4386,7 +4950,7 @@ func (sss StorageServiceStats) Date() time.Time { } t, err := time.Parse(time.RFC1123, s) if err != nil { - panic(err) + t = time.Time{} } return t } @@ -4406,8 +4970,107 @@ func (sss StorageServiceStats) Version() string { return sss.rawResponse.Header.Get("x-ms-version") } +// UserDelegationKey - A user delegation key +type UserDelegationKey struct { + rawResponse *http.Response + // SignedOid - The Azure Active Directory object ID in GUID format. + SignedOid string `xml:"SignedOid"` + // SignedTid - The Azure Active Directory tenant ID in GUID format + SignedTid string `xml:"SignedTid"` + // SignedStart - The date-time the key is active + SignedStart time.Time `xml:"SignedStart"` + // SignedExpiry - The date-time the key expires + SignedExpiry time.Time `xml:"SignedExpiry"` + // SignedService - Abbreviation of the Azure Storage service that accepts the key + SignedService string `xml:"SignedService"` + // SignedVersion - The service version that created the key + SignedVersion string `xml:"SignedVersion"` + // Value - The key as a base64 string + Value string `xml:"Value"` +} + +func (udk UserDelegationKey) ComputeHMACSHA256(message string) (base64String string) { + bytes, _ := base64.StdEncoding.DecodeString(udk.Value) + h := hmac.New(sha256.New, bytes) + h.Write([]byte(message)) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +// MarshalXML implements the xml.Marshaler interface for UserDelegationKey. +func (udk UserDelegationKey) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + udk2 := (*userDelegationKey)(unsafe.Pointer(&udk)) + return e.EncodeElement(*udk2, start) +} + +// UnmarshalXML implements the xml.Unmarshaler interface for UserDelegationKey. +func (udk *UserDelegationKey) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + udk2 := (*userDelegationKey)(unsafe.Pointer(udk)) + return d.DecodeElement(udk2, &start) +} + +// Response returns the raw HTTP response object. +func (udk UserDelegationKey) Response() *http.Response { + return udk.rawResponse +} + +// StatusCode returns the HTTP status code of the response, e.g. 200. +func (udk UserDelegationKey) StatusCode() int { + return udk.rawResponse.StatusCode +} + +// Status returns the HTTP status message of the response, e.g. "200 OK". +func (udk UserDelegationKey) Status() string { + return udk.rawResponse.Status +} + +// Date returns the value for header Date. +func (udk UserDelegationKey) Date() time.Time { + s := udk.rawResponse.Header.Get("Date") + if s == "" { + return time.Time{} + } + t, err := time.Parse(time.RFC1123, s) + if err != nil { + t = time.Time{} + } + return t +} + +// ErrorCode returns the value for header x-ms-error-code. +func (udk UserDelegationKey) ErrorCode() string { + return udk.rawResponse.Header.Get("x-ms-error-code") +} + +// RequestID returns the value for header x-ms-request-id. +func (udk UserDelegationKey) RequestID() string { + return udk.rawResponse.Header.Get("x-ms-request-id") +} + +// Version returns the value for header x-ms-version. +func (udk UserDelegationKey) Version() string { + return udk.rawResponse.Header.Get("x-ms-version") +} + +func init() { + if reflect.TypeOf((*UserDelegationKey)(nil)).Elem().Size() != reflect.TypeOf((*userDelegationKey)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between UserDelegationKey and userDelegationKey")) + } + if reflect.TypeOf((*AccessPolicy)(nil)).Elem().Size() != reflect.TypeOf((*accessPolicy)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between AccessPolicy and accessPolicy")) + } + if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between BlobProperties and blobProperties")) + } + if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between ContainerProperties and containerProperties")) + } + if reflect.TypeOf((*GeoReplication)(nil)).Elem().Size() != reflect.TypeOf((*geoReplication)(nil)).Elem().Size() { + validateError(errors.New("size mismatch between GeoReplication and geoReplication")) + } +} + const ( - rfc3339Format = "2006-01-02T15:04:05.0000000Z07:00" + rfc3339Format = "2006-01-02T15:04:05Z" //This was wrong in the generated code, FYI ) // used to convert times from UTC to GMT before sending across the wire @@ -4445,6 +5108,38 @@ func (t *timeRFC3339) UnmarshalText(data []byte) (err error) { return } +// internal type used for marshalling base64 encoded strings +type base64Encoded struct { + b []byte +} + +// MarshalText implements the encoding.TextMarshaler interface for base64Encoded. +func (c base64Encoded) MarshalText() ([]byte, error) { + return []byte(base64.StdEncoding.EncodeToString(c.b)), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for base64Encoded. +func (c *base64Encoded) UnmarshalText(data []byte) error { + b, err := base64.StdEncoding.DecodeString(string(data)) + if err != nil { + return err + } + c.b = b + return nil +} + +// internal type used for marshalling +type userDelegationKey struct { + rawResponse *http.Response + SignedOid string `xml:"SignedOid"` + SignedTid string `xml:"SignedTid"` + SignedStart timeRFC3339 `xml:"SignedStart"` + SignedExpiry timeRFC3339 `xml:"SignedExpiry"` + SignedService string `xml:"SignedService"` + SignedVersion string `xml:"SignedVersion"` + Value string `xml:"Value"` +} + // internal type used for marshalling type accessPolicy struct { Start timeRFC3339 `xml:"Start"` @@ -4454,13 +5149,16 @@ type accessPolicy struct { // internal type used for marshalling type blobProperties struct { + // XMLName is used for marshalling and is subject to removal in a future release. + XMLName xml.Name `xml:"Properties"` + CreationTime *timeRFC1123 `xml:"Creation-Time"` LastModified timeRFC1123 `xml:"Last-Modified"` Etag ETag `xml:"Etag"` ContentLength *int64 `xml:"Content-Length"` ContentType *string `xml:"Content-Type"` ContentEncoding *string `xml:"Content-Encoding"` ContentLanguage *string `xml:"Content-Language"` - ContentMD5 []byte `xml:"Content-MD5"` + ContentMD5 base64Encoded `xml:"Content-MD5"` ContentDisposition *string `xml:"Content-Disposition"` CacheControl *string `xml:"Cache-Control"` BlobSequenceNumber *int64 `xml:"x-ms-blob-sequence-number"` @@ -4482,16 +5180,19 @@ type blobProperties struct { AccessTier AccessTierType `xml:"AccessTier"` AccessTierInferred *bool `xml:"AccessTierInferred"` ArchiveStatus ArchiveStatusType `xml:"ArchiveStatus"` + AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"` } // internal type used for marshalling type containerProperties struct { - LastModified timeRFC1123 `xml:"Last-Modified"` - Etag ETag `xml:"Etag"` - LeaseStatus LeaseStatusType `xml:"LeaseStatus"` - LeaseState LeaseStateType `xml:"LeaseState"` - LeaseDuration LeaseDurationType `xml:"LeaseDuration"` - PublicAccess PublicAccessType `xml:"PublicAccess"` + LastModified timeRFC1123 `xml:"Last-Modified"` + Etag ETag `xml:"Etag"` + LeaseStatus LeaseStatusType `xml:"LeaseStatus"` + LeaseState LeaseStateType `xml:"LeaseState"` + LeaseDuration LeaseDurationType `xml:"LeaseDuration"` + PublicAccess PublicAccessType `xml:"PublicAccess"` + HasImmutabilityPolicy *bool `xml:"HasImmutabilityPolicy"` + HasLegalHold *bool `xml:"HasLegalHold"` } // internal type used for marshalling diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go similarity index 68% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go index ce6507080e79..42e27da4c4c6 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_page_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go @@ -32,24 +32,24 @@ func newPageBlobClient(url url.URL, p pipeline.Pipeline) pageBlobClient { // information, see Setting // Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified -// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. // ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number // less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob // if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate // only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only // on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs // without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is // recorded in the analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) { +func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -61,7 +61,7 @@ func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64 } // clearPagesPreparer prepares the ClearPages request. -func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -94,8 +94,8 @@ func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *in if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -129,28 +129,20 @@ func (client pageBlobClient) clearPagesResponder(resp pipeline.Response) (pipeli // must either be public or must be authenticated via a shared access signature. timeout is the timeout parameter is // expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. metadata is optional. Specifies a user-defined name-value pair associated -// with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or -// file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with -// the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version -// 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing -// Containers, Blobs, and Metadata for more information. ifModifiedSince is specify this header value to operate only -// on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value -// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs -// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is -// recorded in the analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) { +// Timeouts for Blob Service Operations. ifModifiedSince is specify this header value to operate only on a blob if +// it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only +// on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate +// only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.copyIncrementalPreparer(copySource, timeout, metadata, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.copyIncrementalPreparer(copySource, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -162,7 +154,7 @@ func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource str } // copyIncrementalPreparer prepares the CopyIncremental request. -func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, metadata map[string]string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -173,19 +165,14 @@ func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout } params.Set("comp", "incrementalcopy") req.URL.RawQuery = params.Encode() - if metadata != nil { - for k, v := range metadata { - req.Header.Set("x-ms-meta-"+k, v) - } - } if ifModifiedSince != nil { req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) } if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -211,8 +198,9 @@ func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (p // Create the Create operation creates a new page blob. // -// contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more -// information, see Setting // Timeouts for Blob Service Operations. blobContentType is optional. Sets the blob's content type. If specified, // this property is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the @@ -226,28 +214,23 @@ func (client pageBlobClient) copyIncrementalResponder(resp pipeline.Response) (p // destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified // metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, // metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and -// Metadata for more information. leaseID is if specified, the operation only succeeds if the container's lease is +// Metadata for more information. leaseID is if specified, the operation only succeeds if the resource's lease is // active and matches this ID. blobContentDisposition is optional. Sets the blob's Content-Disposition header. // ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified // date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified -// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value. -// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobContentLength is this -// header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte -// boundary. blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can -// use to track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a -// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage -// analytics logging is enabled. -func (client pageBlobClient) Create(ctx context.Context, contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentLength *int64, blobSequenceNumber *int64, requestID *string) (*PageBlobCreateResponse, error) { +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. +// ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. blobSequenceNumber is set +// for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of +// the sequence number must be between 0 and 2^63 - 1. requestID is provides a client-generated, opaque value with a 1 +// KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) Create(ctx context.Context, contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobCreateResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}, - {targetValue: metadata, - constraints: []constraint{{target: "metadata", name: null, rule: false, - chain: []constraint{{target: "metadata", name: pattern, rule: `^[a-zA-Z]+$`, chain: nil}}}}}}); err != nil { + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.createPreparer(contentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobContentLength, blobSequenceNumber, requestID) + req, err := client.createPreparer(contentLength, blobContentLength, timeout, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID) if err != nil { return nil, err } @@ -259,7 +242,7 @@ func (client pageBlobClient) Create(ctx context.Context, contentLength int64, ti } // createPreparer prepares the Create request. -func (client pageBlobClient) createPreparer(contentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobContentLength *int64, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) createPreparer(contentLength int64, blobContentLength int64, timeout *int32, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -302,15 +285,13 @@ func (client pageBlobClient) createPreparer(contentLength int64, timeout *int32, if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) } - if blobContentLength != nil { - req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(*blobContentLength, 10)) - } + req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) if blobSequenceNumber != nil { req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10)) } @@ -342,21 +323,21 @@ func (client pageBlobClient) createResponder(resp pipeline.Response) (pipeline.R // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting // Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified -// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. // ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the specified // date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified -// since the specified date/time. ifMatches is specify an ETag value to operate only on blobs with a matching value. +// since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. // ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides a // client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) { +func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageList, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.getPageRangesPreparer(snapshot, timeout, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.getPageRangesPreparer(snapshot, timeout, rangeParameter, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -368,7 +349,7 @@ func (client pageBlobClient) GetPageRanges(ctx context.Context, snapshot *string } // getPageRangesPreparer prepares the GetPageRanges request. -func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *int32, rangeParameter *string, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("GET", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -394,8 +375,8 @@ func (client pageBlobClient) getPageRangesPreparer(snapshot *string, timeout *in if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -420,7 +401,7 @@ func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pip defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -432,8 +413,8 @@ func (client pageBlobClient) getPageRangesResponder(resp pipeline.Response) (pip return result, nil } -// GetPageRangesDiff [Update] The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob -// that were changed between target blob and previous snapshot. +// GetPageRangesDiff the Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were +// changed between target blob and previous snapshot. // // snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to // retrieve. For more information on working with blob snapshots, see 0 { b = removeBOM(b) @@ -544,21 +525,21 @@ func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response) // be aligned to a 512-byte boundary. timeout is the timeout parameter is expressed in seconds. For more information, // see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it // has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a -// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only -// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching -// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) { +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +// logs when storage analytics logging is enabled. +func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.resizePreparer(blobContentLength, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.resizePreparer(blobContentLength, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -570,7 +551,7 @@ func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64 } // resizePreparer prepares the Resize request. -func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -590,8 +571,8 @@ func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *in if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -621,23 +602,23 @@ func (client pageBlobClient) resizeResponder(resp pipeline.Response) (pipeline.R // applies to page blobs only. This property indicates how the service should modify the blob's sequence number timeout // is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the container's +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's // lease is active and matches this ID. ifModifiedSince is specify this header value to operate only on a blob if it // has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a -// blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value to operate only -// on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching -// value. blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can -// use to track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a +// blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on +// blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +// blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can use to +// track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a // client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) { +func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, blobSequenceNumber, requestID) + req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID) if err != nil { return nil, err } @@ -649,7 +630,7 @@ func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceN } // updateSequenceNumberPreparer prepares the UpdateSequenceNumber request. -func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -669,8 +650,8 @@ func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction S if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -700,21 +681,22 @@ func (client pageBlobClient) updateSequenceNumberResponder(resp pipeline.Respons // UploadPages the Upload Pages operation writes a range of pages to a page blob // // body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an -// error.contentLength is the length of the request. timeout is the timeout parameter is expressed in seconds. For more +// error.contentLength is the length of the request. transactionalContentMD5 is specify the transactional md5 for the +// body, to be validated by the service. timeout is the timeout parameter is expressed in seconds. For more // information, see Setting // Timeouts for Blob Service Operations. rangeParameter is return only the bytes of the blob in the specified -// range. leaseID is if specified, the operation only succeeds if the container's lease is active and matches this ID. +// range. leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. // ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only on a blob if it has a sequence number // less than or equal to the specified. ifSequenceNumberLessThan is specify this header value to operate only on a blob // if it has a sequence number less than the specified. ifSequenceNumberEqualTo is specify this header value to operate // only on a blob if it has the specified sequence number. ifModifiedSince is specify this header value to operate only // on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// operate only on a blob if it has not been modified since the specified date/time. ifMatches is specify an ETag value +// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs // without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is // recorded in the analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesResponse, error) { +func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesResponse, error) { if err := validate([]validation{ {targetValue: body, constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, @@ -723,7 +705,7 @@ func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.uploadPagesPreparer(body, contentLength, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatches, ifNoneMatch, requestID) + req, err := client.uploadPagesPreparer(body, contentLength, transactionalContentMD5, timeout, rangeParameter, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -735,7 +717,7 @@ func (client pageBlobClient) UploadPages(ctx context.Context, body io.ReadSeeker } // uploadPagesPreparer prepares the UploadPages request. -func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatches *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLength int64, transactionalContentMD5 []byte, timeout *int32, rangeParameter *string, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, body) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -747,6 +729,9 @@ func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLeng params.Set("comp", "page") req.URL.RawQuery = params.Encode() req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + if transactionalContentMD5 != nil { + req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) + } if rangeParameter != nil { req.Header.Set("x-ms-range", *rangeParameter) } @@ -768,8 +753,8 @@ func (client pageBlobClient) uploadPagesPreparer(body io.ReadSeeker, contentLeng if ifUnmodifiedSince != nil { req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) } - if ifMatches != nil { - req.Header.Set("If-Match", string(*ifMatches)) + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) } if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) @@ -792,3 +777,120 @@ func (client pageBlobClient) uploadPagesResponder(resp pipeline.Response) (pipel resp.Response().Body.Close() return &PageBlobUploadPagesResponse{rawResponse: resp.Response()}, err } + +// UploadPagesFromURL the Upload Pages operation writes a range of pages to a page blob where the contents are read +// from a URL +// +// sourceURL is specify a URL to the copy source. sourceRange is bytes of source data in the specified range. The +// length of this range should match the ContentLength header and x-ms-range/Range destination range header. +// contentLength is the length of the request. rangeParameter is the range of bytes to which the source range would be +// written. The range should be 512 aligned and range-end is required. sourceContentMD5 is specify the md5 calculated +// for the range of bytes that must be read from the copy source. timeout is the timeout parameter is expressed in +// seconds. For more information, see Setting +// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +// lease is active and matches this ID. ifSequenceNumberLessThanOrEqualTo is specify this header value to operate only +// on a blob if it has a sequence number less than or equal to the specified. ifSequenceNumberLessThan is specify this +// header value to operate only on a blob if it has a sequence number less than the specified. ifSequenceNumberEqualTo +// is specify this header value to operate only on a blob if it has the specified sequence number. ifModifiedSince is +// specify this header value to operate only on a blob if it has been modified since the specified date/time. +// ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified since the +// specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching value. ifNoneMatch is +// specify an ETag value to operate only on blobs without a matching value. sourceIfModifiedSince is specify this +// header value to operate only on a blob if it has been modified since the specified date/time. +// sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified since the +// specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs with a matching value. +// sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides +// a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client pageBlobClient) UploadPagesFromURL(ctx context.Context, sourceURL string, sourceRange string, contentLength int64, rangeParameter string, sourceContentMD5 []byte, timeout *int32, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*PageBlobUploadPagesFromURLResponse, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.uploadPagesFromURLPreparer(sourceURL, sourceRange, contentLength, rangeParameter, sourceContentMD5, timeout, leaseID, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.uploadPagesFromURLResponder}, req) + if err != nil { + return nil, err + } + return resp.(*PageBlobUploadPagesFromURLResponse), err +} + +// uploadPagesFromURLPreparer prepares the UploadPagesFromURL request. +func (client pageBlobClient) uploadPagesFromURLPreparer(sourceURL string, sourceRange string, contentLength int64, rangeParameter string, sourceContentMD5 []byte, timeout *int32, leaseID *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("PUT", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("comp", "page") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-copy-source", sourceURL) + req.Header.Set("x-ms-source-range", sourceRange) + if sourceContentMD5 != nil { + req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) + } + req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) + req.Header.Set("x-ms-range", rangeParameter) + if leaseID != nil { + req.Header.Set("x-ms-lease-id", *leaseID) + } + if ifSequenceNumberLessThanOrEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-le", strconv.FormatInt(*ifSequenceNumberLessThanOrEqualTo, 10)) + } + if ifSequenceNumberLessThan != nil { + req.Header.Set("x-ms-if-sequence-number-lt", strconv.FormatInt(*ifSequenceNumberLessThan, 10)) + } + if ifSequenceNumberEqualTo != nil { + req.Header.Set("x-ms-if-sequence-number-eq", strconv.FormatInt(*ifSequenceNumberEqualTo, 10)) + } + if ifModifiedSince != nil { + req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifUnmodifiedSince != nil { + req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if ifMatch != nil { + req.Header.Set("If-Match", string(*ifMatch)) + } + if ifNoneMatch != nil { + req.Header.Set("If-None-Match", string(*ifNoneMatch)) + } + if sourceIfModifiedSince != nil { + req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfUnmodifiedSince != nil { + req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) + } + if sourceIfMatch != nil { + req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) + } + if sourceIfNoneMatch != nil { + req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) + } + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + req.Header.Set("x-ms-page-write", "update") + return req, nil +} + +// uploadPagesFromURLResponder handles the response to the UploadPagesFromURL request. +func (client pageBlobClient) uploadPagesFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK, http.StatusCreated) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &PageBlobUploadPagesFromURLResponse{rawResponse: resp.Response()}, err +} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go similarity index 96% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go index 2f391d731258..8a023d0a02ce 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_responder_policy.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_responder_policy.go @@ -55,7 +55,7 @@ func validateResponse(resp pipeline.Response, successStatusCodes ...int) error { defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return NewResponseError(err, resp.Response(), "failed to read response body") + return err } // the service code, description and details will be populated during unmarshalling responseError := NewResponseError(nil, resp.Response(), resp.Response().Status) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_response_error.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_response_error.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_response_error.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go similarity index 76% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go index 76f235e1595b..6c896b729abf 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_service.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_service.go @@ -25,6 +25,44 @@ func newServiceClient(url url.URL, p pipeline.Pipeline) serviceClient { return serviceClient{newManagementClient(url, p)} } +// GetAccountInfo returns the sku name and account kind +func (client serviceClient) GetAccountInfo(ctx context.Context) (*ServiceGetAccountInfoResponse, error) { + req, err := client.getAccountInfoPreparer() + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getAccountInfoResponder}, req) + if err != nil { + return nil, err + } + return resp.(*ServiceGetAccountInfoResponse), err +} + +// getAccountInfoPreparer prepares the GetAccountInfo request. +func (client serviceClient) getAccountInfoPreparer() (pipeline.Request, error) { + req, err := pipeline.NewRequest("GET", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + params.Set("restype", "account") + params.Set("comp", "properties") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + return req, nil +} + +// getAccountInfoResponder handles the response to the GetAccountInfo request. +func (client serviceClient) getAccountInfoResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + io.Copy(ioutil.Discard, resp.Response().Body) + resp.Response().Body.Close() + return &ServiceGetAccountInfoResponse{rawResponse: resp.Response()}, err +} + // GetProperties gets the properties of a storage account's Blob service, including properties for Storage Analytics // and CORS (Cross-Origin Resource Sharing) rules. // @@ -83,7 +121,7 @@ func (client serviceClient) getPropertiesResponder(resp pipeline.Response) (pipe defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -153,7 +191,86 @@ func (client serviceClient) getStatisticsResponder(resp pipeline.Response) (pipe defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err + } + if len(b) > 0 { + b = removeBOM(b) + err = xml.Unmarshal(b, result) + if err != nil { + return result, NewResponseError(err, resp.Response(), "failed to unmarshal response body") + } + } + return result, nil +} + +// GetUserDelegationKey retrieves a user delgation key for the Blob service. This is only a valid operation when using +// bearer token authentication. +// +// timeout is the timeout parameter is expressed in seconds. For more information, see Setting +// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB +// character limit that is recorded in the analytics logs when storage analytics logging is enabled. +func (client serviceClient) GetUserDelegationKey(ctx context.Context, keyInfo KeyInfo, timeout *int32, requestID *string) (*UserDelegationKey, error) { + if err := validate([]validation{ + {targetValue: timeout, + constraints: []constraint{{target: "timeout", name: null, rule: false, + chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { + return nil, err + } + req, err := client.getUserDelegationKeyPreparer(keyInfo, timeout, requestID) + if err != nil { + return nil, err + } + resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.getUserDelegationKeyResponder}, req) + if err != nil { + return nil, err + } + return resp.(*UserDelegationKey), err +} + +// getUserDelegationKeyPreparer prepares the GetUserDelegationKey request. +func (client serviceClient) getUserDelegationKeyPreparer(keyInfo KeyInfo, timeout *int32, requestID *string) (pipeline.Request, error) { + req, err := pipeline.NewRequest("POST", client.url, nil) + if err != nil { + return req, pipeline.NewError(err, "failed to create request") + } + params := req.URL.Query() + if timeout != nil { + params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) + } + params.Set("restype", "service") + params.Set("comp", "userdelegationkey") + req.URL.RawQuery = params.Encode() + req.Header.Set("x-ms-version", ServiceVersion) + if requestID != nil { + req.Header.Set("x-ms-client-request-id", *requestID) + } + b, err := xml.Marshal(keyInfo) + if err != nil { + return req, pipeline.NewError(err, "failed to marshal request body") + } + req.Header.Set("Content-Type", "application/xml") + err = req.SetBody(bytes.NewReader(b)) + if err != nil { + return req, pipeline.NewError(err, "failed to set request body") + } + return req, nil +} + +// getUserDelegationKeyResponder handles the response to the GetUserDelegationKey request. +func (client serviceClient) getUserDelegationKeyResponder(resp pipeline.Response) (pipeline.Response, error) { + err := validateResponse(resp, http.StatusOK) + if resp == nil { + return nil, err + } + result := &UserDelegationKey{rawResponse: resp.Response()} + if err != nil { + return result, err + } + defer resp.Response().Body.Close() + b, err := ioutil.ReadAll(resp.Response().Body) + if err != nil { + return result, err } if len(b) > 0 { b = removeBOM(b) @@ -183,7 +300,7 @@ func (client serviceClient) getStatisticsResponder(resp pipeline.Response) (pipe // href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting // Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB // character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (*ListContainersResponse, error) { +func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *string, marker *string, maxresults *int32, include ListContainersIncludeType, timeout *int32, requestID *string) (*ListContainersSegmentResponse, error) { if err := validate([]validation{ {targetValue: maxresults, constraints: []constraint{{target: "maxresults", name: null, rule: false, @@ -201,7 +318,7 @@ func (client serviceClient) ListContainersSegment(ctx context.Context, prefix *s if err != nil { return nil, err } - return resp.(*ListContainersResponse), err + return resp.(*ListContainersSegmentResponse), err } // listContainersSegmentPreparer prepares the ListContainersSegment request. @@ -241,14 +358,14 @@ func (client serviceClient) listContainersSegmentResponder(resp pipeline.Respons if resp == nil { return nil, err } - result := &ListContainersResponse{rawResponse: resp.Response()} + result := &ListContainersSegmentResponse{rawResponse: resp.Response()} if err != nil { return result, err } defer resp.Response().Body.Close() b, err := ioutil.ReadAll(resp.Response().Body) if err != nil { - return result, NewResponseError(err, resp.Response(), "failed to read response body") + return result, err } if len(b) > 0 { b = removeBOM(b) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_validation.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go similarity index 100% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_validation.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_validation.go diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go similarity index 88% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_version.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go index 760271a42159..4b49c18662ce 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_generated_version.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go @@ -5,7 +5,7 @@ package azblob // UserAgent returns the UserAgent string to use when sending http.Requests. func UserAgent() string { - return "Azure-SDK-For-Go/0.0.0 azblob/2018-03-28" + return "Azure-SDK-For-Go/0.0.0 azblob/2018-11-09" } // Version returns the semantic version (see http://semver.org) of the client. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go similarity index 98% rename from vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go rename to vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go index b4f058b6748c..8c7f5945329c 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/2018-03-28/azblob/zz_response_helpers.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go @@ -65,7 +65,7 @@ func (r *DownloadResponse) Body(o RetryReaderOptions) io.ReadCloser { func(ctx context.Context, getInfo HTTPGetterInfo) (*http.Response, error) { resp, err := r.b.Download(ctx, getInfo.Offset, getInfo.Count, BlobAccessConditions{ - HTTPAccessConditions: HTTPAccessConditions{IfMatch: getInfo.ETag}, + ModifiedAccessConditions: ModifiedAccessConditions{IfMatch: getInfo.ETag}, }, false) if err != nil { diff --git a/vendor/github.com/apilayer/freegeoip/AUTHORS b/vendor/github.com/apilayer/freegeoip/AUTHORS new file mode 100644 index 000000000000..7d80c4d211c7 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/AUTHORS @@ -0,0 +1,11 @@ +# This is the official list of freegeoip authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS file. +# +# Names should be added to this file as +# Name or Organization +# +# The email address is not required for organizations. +# +# Please keep the list sorted. + +Alexandre Fiori diff --git a/vendor/github.com/apilayer/freegeoip/CONTRIBUTORS b/vendor/github.com/apilayer/freegeoip/CONTRIBUTORS new file mode 100644 index 000000000000..a460460e4e05 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/CONTRIBUTORS @@ -0,0 +1,22 @@ +# This is the official list of freegeoip contributors for copyright purposes. +# This file is distinct from the AUTHORS file. +# +# Names should be added to this file as +# Name or Organization +# +# Please keep the list sorted. +# +# Use the following command to generate the list: +# +# git shortlog -se | awk '{print $2 " " $3 " " $4}' +# +# The email address is not required for organizations. + +Alex Goretoy +Gleicon Moraes +Leandro Pereira +Lucas Fontes +Matthias Nehlsen +Melchi +Nick Muerdter +Vladimir Agafonkin diff --git a/vendor/github.com/apilayer/freegeoip/Dockerfile b/vendor/github.com/apilayer/freegeoip/Dockerfile new file mode 100644 index 000000000000..ac3b5e5a2efd --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/Dockerfile @@ -0,0 +1,25 @@ +FROM golang:1.9 + +COPY cmd/freegeoip/public /var/www + +ADD . /go/src/github.com/apilayer/freegeoip +RUN \ + cd /go/src/github.com/apilayer/freegeoip/cmd/freegeoip && \ + go get -d && go install && \ + apt-get update && apt-get install -y libcap2-bin && \ + setcap cap_net_bind_service=+ep /go/bin/freegeoip && \ + apt-get clean && rm -rf /var/lib/apt/lists/* && \ + useradd -ms /bin/bash freegeoip + +USER freegeoip +ENTRYPOINT ["/go/bin/freegeoip"] + +EXPOSE 8080 + +# CMD instructions: +# Add "-use-x-forwarded-for" if your server is behind a reverse proxy +# Add "-public", "/var/www" to enable the web front-end +# Add "-internal-server", "8888" to enable the pprof+metrics server +# +# Example: +# CMD ["-use-x-forwarded-for", "-public", "/var/www", "-internal-server", "8888"] diff --git a/vendor/github.com/apilayer/freegeoip/HISTORY.md b/vendor/github.com/apilayer/freegeoip/HISTORY.md new file mode 100644 index 000000000000..1a8e68db7676 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/HISTORY.md @@ -0,0 +1,55 @@ +# History of freegeoip.net + +The freegeoip software is the result of a web server research project that +started in 2009, written in Python and hosted on +[Google App Engine](http://appengine.google.com). It was rapidly adopted by +many developers around the world due to its simplistic and straightforward +HTTP API, causing the free account on GAE to exceed its quota every day +after few hours of operation. + +A year later freegeoip 1.0 was released, and the freegeoip.net domain +moved over to its own server infrastructure. The software was rewritten +using the [Cyclone](http://cyclone.io) web framework, backed by +[Twisted](http://twistedmatrix.com) and [PyPy](http://pypy.org) in +production. That's when the first database management tool was created, +a script that would download many pieces of information from the Internet +to create the IP database, an sqlite flat file used by the server. + +This version of the Python server shipped with a much better front-end as +well, but still as a server-side rendered template inherited from the GAE +version. It was only circa 2011 that freegeoip got its first standalone +front-end based on jQuery, and is when Twitter bootstrap was first used. + +Python played an important role in the early life of freegeoip and +allowed the service to grow and evolve fast. It provided a lot of +flexibility in building and maintaining the IP database using multiple +sources of data. This version of the server lasted until 2013, when +it was once again rewritten from scratch, this time in Go. The database +tool, however, remained intact. + +In 2013 the Go version was released as freegeoip 2.0 and this version +had many iterations. The first versions of the server written in Go were +very rustic, practically a verbatim transcription of the Python server. +Took a while until it started looking more like common Go code, and to +have tests. + +Another important change that shipped with v2 was a front-end based on +AngularJS, but still mixed with some jQuery. The Google map in the front +page was made optional to put more focus on the HTTP API. The popularity +of freegeoip has increased considerably over the years of 2013 and 2014, +calling for more. + +Enter freegeoip 3.0, an evolution of the Go server. The foundation of +freegeoip, which is the IP database and HTTP API, now lives in a Go +package that other developers can leverage. The freegeoip web server is +built on this package making its code cleaner, the server faster, +and requires zero maintenance for the IP database. The server downloads +the file from MaxMind and keep it up to date in background. + +This and other changes make it very Docker friendly. + +The front-end has been trimmed down to a single index.html file that loads +CSS and JS from CDNs on the internet. The JS part is based on AngularJS +and handles the search request and response of the public site. The +optional map has become a link to Google Maps following the lat/long +of the query results. diff --git a/vendor/github.com/apilayer/freegeoip/LICENSE b/vendor/github.com/apilayer/freegeoip/LICENSE new file mode 100644 index 000000000000..12d6a5cd539d --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The freegeoip authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * The names of authors or contributors may NOT be used to endorse or +promote products derived from this software without specific prior +written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/apilayer/freegeoip/Procfile b/vendor/github.com/apilayer/freegeoip/Procfile new file mode 100644 index 000000000000..de810e15d969 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/Procfile @@ -0,0 +1 @@ +web: freegeoip -http :${PORT} -use-x-forwarded-for -public /app/cmd/freegeoip/public -quota-backend map -quota-max 10000 diff --git a/vendor/github.com/apilayer/freegeoip/README.md b/vendor/github.com/apilayer/freegeoip/README.md new file mode 100644 index 000000000000..d89310d8c110 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/README.md @@ -0,0 +1,259 @@ +![freegeoip ipstack](https://raw.githubusercontent.com/apilayer/freegeoip/master/freegeo-warning.png) + +# freegeoip - Important Announcement + +*[The old freegeoip API is now deprecated and will be discontinued on July 1st, 2018]* + +Launched more than 6 years ago, the freegeoip.net API has grown into one of the biggest and most widely used APIs for IP to location services worldwide. The API is used by thousands of developers, SMBs and large corporations around the globe and is currently handling more than 2 billion requests per day. After years of operation and the API remaining almost unchanged, today we announce the complete re-launch of freegeoip into a faster, more advanced and more scalable API service called ipstack (https://ipstack.com). All users that wish to continue using our IP to location service will be required to sign up to obtain a free API access key and perform a few simple changes to their integration. While the new API offers the ability to return data in the same structure as the old freegeoip API, the new API structure offers various options of delivering much more advanced data for IP Addresses. + +## Required Changes to Legacy Integrations (freegeoip.net/json/xml) + +As of March 31 2018 the old freegeoip API is deprecated and a completely re-designed API is now accessible at http://api.ipstack.com. While the new API offers the same capabilities as the old one and also has the option of returning data in the legacy format, the API URL has now changed and all users are required to sign up for a free API Access Key to use the service. + +1. Get a free ipstack Account and Access Key + +Head over to https://ipstack.com and follow the instructions to create your account and obtain your access token. If you only need basic IP to Geolocation data and do not require more than 10,000 requests per month, you can use the free account. If you'd like more advanced features or more requests than included in the free account you will need to choose one of the paid options. You can find an overview of all available plans at https://ipstack.com/product + +2. Integrate the new API URL + +The new API comes with a completely new endpoint (api.ipstack.com) and requires you to append your API Access Key to the URL as a GET parameter. For complete integration instructions, please head over to the API Documentation at https://ipstack.com/documentation. While the new API offers a completely reworked response structure with many additional data points, we also offer the option to receive results in the old freegeoip.net format in JSON or XML. + +To receive your API results in the old freegeoip format, please simply append &legacy=1 to the new API URL. + +JSON Example: http://api.ipstack.com/186.116.207.169?access_key=YOUR_ACCESS_KEY&output=json&legacy=1 + +XML Example: http://api.ipstack.com/186.116.207.169?access_key=YOUR_ACCESS_KEY&output=xml&legacy=1 + +## New features with ipstack +While the new ipstack service now runs on a commercial/freemium model, we have worked hard at building a faster, more scalable, and more advanced IP to location API product. You can read more about all the new features by navigating to https://ipstack.com, but here's a list of the most important changes and additions: + +- We're still free for basic usage + +While we now offer paid / premium options for our more advanced users, our core product and IP to Country/Region/City product is still completely free of charge for up to 10,000 requests per month. If you need more advanced data or more requests, you can choose one of the paid plans listed at https://ipstack.com/product + +- Batch Requests + +Need to validate more than 1 IP Address in a single API Call? Our new Bulk Lookup Feature (available on our paid plans) allows you to geolocate up to 50 IP Addresses in a single API Call. + +- Much more Data + +While the old freegeoip API was limited to provide only the most basic IP to location data, our new API provides more than 20 additional data points including Language, Time Zone, Current Time, Currencies, Connection & ASN Information, and much more. To learn more about all the data points available, please head over to the ipstack website. + +- Security & Fraud Prevention Tools + +Do you want to prevent fraudulent traffic from arriving at your website or from abusing your service? Easily spot malicious / proxy / VPN traffic by using our new Security Module, which outputs a lot of valuable security information about an IP Address. + +Next Steps + +- Deprecation of the old API + +While we want to keep the disruption to our current users as minimal as possible, we are planning to shut the old API down on July 1st, 2018. This should give all users enough time to adapt to changes, and should we still see high volumes of traffic going to the old API by that date, we may decide to extend it further. In any case, we highly recommend you switch to the new API as soon as possible. We will keep you posted here about any changes to the planned shutdown date. + +- Any Questions? Please get in touch! + +It's very important to ensure a smooth transition to ipstack for all freegeoip API users. If you are a developer that has published a plugin/addon that includes the legacy API, we recommend you get in touch with us and also share this announcement with your users. If you have any questions about the transition or the new API, please get in touch with us at support@ipstack.com + + + + + + + + + + + +# freegeoip - Deprecated Documentation + +[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) + +This is the source code of the freegeoip software. It contains both the web server that empowers freegeoip.net, and a package for the [Go](http://golang.org) programming language that enables any web server to support IP geolocation with a simple and clean API. + +See http://en.wikipedia.org/wiki/Geolocation for details about geolocation. + +Developers looking for the Go API can skip to the [Package freegeoip](#packagefreegeoip) section below. + +## Running + +This section is for people who desire to run the freegeoip web server on their own infrastructure. The easiest and most generic way of doing this is by using Docker. All examples below use Docker. + +### Docker + +#### Install Docker + +Docker has [install instructions for many platforms](https://docs.docker.com/engine/installation/), +including +- [Ubuntu](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/) +- [CentOS](https://docs.docker.com/engine/installation/linux/docker-ce/centos/) +- [Mac](https://docs.docker.com/docker-for-mac/install/) + +#### Run the API in a container + +```bash +docker run --restart=always -p 8080:8080 -d apilayer/freegeoip +``` + +#### Test + +```bash +curl localhost:8080/json/1.2.3.4 +# => {"ip":"1.2.3.4","country_code":"US","country_name":"United States", # ... +``` + +### Other Linux, OS X, FreeBSD, and Windows + +There are [pre-compiled binaries](https://github.com/apilayer/freegeoip/releases) available. + +### Production configuration + +For production workloads you may want to use different configuration for the freegeoip web server, for example: + +* Enabling the "internal server" for collecting metrics and profiling/tracing the freegeoip web server on demand +* Monitoring the internal server using [Prometheus](https://prometheus.io), or exporting your metrics to [New Relic](https://newrelic.com) +* Serving the freegeoip API over HTTPS (TLS) using your own certificates, or provisioned automatically using [LetsEncrypt.org](https://letsencrypt.org) +* Configuring [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) to restrict your browser clients to always use HTTPS +* Configuring the read and write timeouts to avoid stale clients consuming server resources +* Configuring the freegeoip web server to read the client IP (for logs, etc) from the X-Forwarded-For header when running behind a reverse proxy +* Configuring [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) to restrict access to your API to specific domains +* Configuring a specific endpoint path prefix other than the default "/" (thus /json, /xml, /csv) to serve the API alongside other APIs on the same host +* Optimizing your round trips by enabling [TCP Fast Open](https://en.wikipedia.org/wiki/TCP_Fast_Open) on your OS and the freegeoip web server +* Setting up usage limits (quotas) for your clients (per client IP) based on requests per time interval; we support various backends such as in-memory map (for single instance), or redis or memcache for distributed deployments +* Serve the default [GeoLite2 City](http://dev.maxmind.com/geoip/geoip2/geolite2/) free database that is downloaded and updated automatically in background on a configurable schedule, or +* Serve the commercial [GeoIP2 City](https://www.maxmind.com/en/geoip2-city) database from MaxMind, either as a local file that you provide and update periodically (so the server can reload it), or configured to be downloaded periodically using your API key + +See the [Server Options](#serveroptions) section below for more information on configuring the server. + +For automation, check out the [freegeoip chef cookbook](https://supermarket.chef.io/cookbooks/freegeoip) or the (legacy) [Ansible Playbook](./cmd/freegeoip/ansible-playbook) for Ubuntu 14.04 LTS. + + + +### Server Options + +To see all the available options, use the `-help` option: + +```bash +docker run --rm -it apilayer/freegeoip -help +``` + +If you're using LetsEncrypt.org to provision your TLS certificates, you have to listen for HTTPS on port 443. Following is an example of the server listening on 3 different ports: metrics + pprof (8888), http (80), and https (443): + +```bash +docker run -p 8888:8888 -p 80:8080 -p 443:8443 -d apilayer/freegeoip \ + -internal-server=:8888 \ + -http=:8080 \ + -https=:8443 \ + -hsts=max-age=31536000 \ + -letsencrypt \ + -letsencrypt-hosts=myfancydomain.io +``` + + You can configure the freegeiop web server via command line flags or environment variables. The names of environment variables are the same for command line flags, but prefixed with FREEGEOIP, all upperscase, separated by underscores. If you want to use environment variables instead: + +```bash +$ cat prod.env +FREEGEOIP_INTERNAL_SERVER=:8888 +FREEGEOIP_HTTP=:8080 +FREEGEOIP_HTTPS=:8443 +FREEGEOIP_HSTS=max-age=31536000 +FREEGEOIP_LETSENCRYPT=true +FREEGEOIP_LETSENCRYPT_HOSTS=myfancydomain.io + +$ docker run --env-file=prod.env -p 8888:8888 -p 80:8080 -p 443:8443 -d apilayer/freegeoip +``` + +By default, HTTP/2 is enabled over HTTPS. You can disable by passing the `-http2=false` flag. + +Also, the Docker image of freegeoip does not provide the web page from freegeiop.net, it only provides the API. If you want to serve that page, you can pass the `-public=/var/www` parameter in the command line. You can also tell Docker to mount that directory as a volume on the host machine and have it serve your own page, using Docker's `-v` parameter. + +If the freegeoip web server is running behind a reverse proxy or load balancer, you have to run it passing the `-use-x-forwarded-for` parameter and provide the `X-Forwarded-For` HTTP header in all requests. This is for the freegeoip web server be able to log the client IP, and to perform geolocation lookups when an IP is not provided to the API, e.g. `/json/` (uses client IP) vs `/json/1.2.3.4`. + +## Database + +The current implementation uses the free [GeoLite2 City](http://dev.maxmind.com/geoip/geoip2/geolite2/) database from MaxMind. + +In the past we had databases from other providers, and at some point even our own database comprised of data from different sources. This means it might change in the future. + +If you have purchased the commercial database from MaxMind, you can point the freegeoip web server or (Go API, for dev) to the URL containing the file, or local file, and the server will use it. + +In case of files on disk, you can replace the file with a newer version and the freegeoip web server will reload it automatically in background. If instead of a file you use a URL (the default), we periodically check the URL in background to see if there's a new database version available, then download the reload it automatically. + +All responses from the freegeiop API contain the date that the database was downloaded in the X-Database-Date HTTP header. + +## API + +The freegeoip API is served by endpoints that encode the response in different formats. + +Example: + +```bash +curl freegeoip.net/json/ +``` + +Returns the geolocation information of your own IP address, the source IP address of the connection. + +You can pass a different IP or hostname. For example, to lookup the geolocation of `github.com` the server resolves the name first, then uses the first IP address available, which might be IPv4 or IPv6: + +```bash +curl freegeoip.net/json/github.com +``` + +Same semantics are available for the `/xml/{ip}` and `/csv/{ip}` endpoints. + +JSON responses can be encoded as JSONP, by adding the `callback` parameter: + +```bash +curl freegeoip.net/json/?callback=foobar +``` + +The callback parameter is ignored on all other endpoints. + +## Metrics and profiling + +The freegeoip web server can provide metrics about its usage, and also supports runtime profiling and tracing. + +Both are disabled by default, but can be enabled by passing the `-internal-server` parameter in the command line. Metrics are generated for [Prometheus](http://prometheus.io) and can be queried at `/metrics` even with curl. + +HTTP pprof is available at `/debug/pprof` and the examples from the [pprof](https://golang.org/pkg/net/http/pprof/) package documentation should work on the freegeiop web server. + + + +## Package freegeoip + +The freegeoip package for the Go programming language provides two APIs: + +- A database API that requires zero maintenance of the IP database; +- A geolocation `http.Handler` that can be used/served by any http server. + +tl;dr if all you want is code then see the `example_test.go` file. + +Otherwise check out the godoc reference. + +[![GoDoc](https://godoc.org/github.com/apilayer/freegeoip?status.svg)](https://godoc.org/github.com/apilayer/freegeoip) +[![Build Status](https://secure.travis-ci.org/apilayer/freegeoip.png)](http://travis-ci.org/apilayer/freegeoip) +[![GoReportCard](https://goreportcard.com/badge/github.com/apilayer/freegeoip)](https://goreportcard.com/report/github.com/apilayer/freegeoip) + +### Features + +- Zero maintenance + +The DB object alone can download an IP database file from the internet and service lookups to your program right away. It will auto-update the file in background and always magically work. + +- DevOps friendly + +If you do care about the database and have the commercial version of the MaxMind database, you can update the database file with your program running and the DB object will load it in background. You can focus on your stuff. + +- Extensible + +Besides the database part, the package provides an `http.Handler` object that you can add to your HTTP server to service IP geolocation lookups with the same simplistic API of freegeoip.net. There's also an interface for crafting your own HTTP responses encoded in any format. + +### Install + +Download the package: + + go get -d github.com/apilayer/freegeoip/... + +Install the web server: + + go install github.com/apilayer/freegeoip/cmd/freegeoip + +Test coverage is quite good, and test code may help you find the stuff you need. diff --git a/vendor/github.com/apilayer/freegeoip/app.json b/vendor/github.com/apilayer/freegeoip/app.json new file mode 100644 index 000000000000..99495bc8e6a7 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/app.json @@ -0,0 +1,7 @@ +{ + "name": "freegeoip", + "description": "IP geolocation web server", + "website": "https://github.com/apilayer/freegeoip", + "success_url": "/", + "keywords": ["golang", "geoip", "api"] +} diff --git a/vendor/github.com/apilayer/freegeoip/db.go b/vendor/github.com/apilayer/freegeoip/db.go new file mode 100644 index 000000000000..2810a7ed5012 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/db.go @@ -0,0 +1,453 @@ +// Copyright 2009 The freegeoip authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package freegeoip + +import ( + "compress/gzip" + "crypto/md5" + "encoding/hex" + "errors" + "fmt" + "io" + "io/ioutil" + "math" + "net" + "net/http" + "net/url" + "os" + "path/filepath" + "sync" + "time" + + "github.com/howeyc/fsnotify" + "github.com/oschwald/maxminddb-golang" +) + +var ( + // ErrUnavailable may be returned by DB.Lookup when the database + // points to a URL and is not yet available because it's being + // downloaded in background. + ErrUnavailable = errors.New("no database available") + + // Local cached copy of a database downloaded from a URL. + defaultDB = filepath.Join(os.TempDir(), "freegeoip", "db.gz") + + // MaxMindDB is the URL of the free MaxMind GeoLite2 database. + MaxMindDB = "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz" +) + +// DB is the IP geolocation database. +type DB struct { + file string // Database file name. + checksum string // MD5 of the unzipped database file + reader *maxminddb.Reader // Actual db object. + notifyQuit chan struct{} // Stop auto-update and watch goroutines. + notifyOpen chan string // Notify when a db file is open. + notifyError chan error // Notify when an error occurs. + notifyInfo chan string // Notify random actions for logging + closed bool // Mark this db as closed. + lastUpdated time.Time // Last time the db was updated. + mu sync.RWMutex // Protects all the above. + + updateInterval time.Duration // Update interval. + maxRetryInterval time.Duration // Max retry interval in case of failure. +} + +// Open creates and initializes a DB from a local file. +// +// The database file is monitored by fsnotify and automatically +// reloads when the file is updated or overwritten. +func Open(dsn string) (*DB, error) { + db := &DB{ + file: dsn, + notifyQuit: make(chan struct{}), + notifyOpen: make(chan string, 1), + notifyError: make(chan error, 1), + notifyInfo: make(chan string, 1), + } + err := db.openFile() + if err != nil { + db.Close() + return nil, err + } + err = db.watchFile() + if err != nil { + db.Close() + return nil, fmt.Errorf("fsnotify failed for %s: %s", dsn, err) + } + return db, nil +} + +// MaxMindUpdateURL generates the URL for MaxMind paid databases. +func MaxMindUpdateURL(hostname, productID, userID, licenseKey string) (string, error) { + limiter := func(r io.Reader) *io.LimitedReader { + return &io.LimitedReader{R: r, N: 1 << 30} + } + baseurl := "https://" + hostname + "/app/" + // Get the file name for the product ID. + u := baseurl + "update_getfilename?product_id=" + productID + resp, err := http.Get(u) + if err != nil { + return "", err + } + defer resp.Body.Close() + md5hash := md5.New() + _, err = io.Copy(md5hash, limiter(resp.Body)) + if err != nil { + return "", err + } + sum := md5hash.Sum(nil) + hexdigest1 := hex.EncodeToString(sum[:]) + // Get our client IP address. + resp, err = http.Get(baseurl + "update_getipaddr") + if err != nil { + return "", err + } + defer resp.Body.Close() + md5hash = md5.New() + io.WriteString(md5hash, licenseKey) + _, err = io.Copy(md5hash, limiter(resp.Body)) + if err != nil { + return "", err + } + sum = md5hash.Sum(nil) + hexdigest2 := hex.EncodeToString(sum[:]) + // Generate the URL. + params := url.Values{ + "db_md5": {hexdigest1}, + "challenge_md5": {hexdigest2}, + "user_id": {userID}, + "edition_id": {productID}, + } + u = baseurl + "update_secure?" + params.Encode() + return u, nil +} + +// OpenURL creates and initializes a DB from a URL. +// It automatically downloads and updates the file in background, and +// keeps a local copy on $TMPDIR. +func OpenURL(url string, updateInterval, maxRetryInterval time.Duration) (*DB, error) { + db := &DB{ + file: defaultDB, + notifyQuit: make(chan struct{}), + notifyOpen: make(chan string, 1), + notifyError: make(chan error, 1), + notifyInfo: make(chan string, 1), + updateInterval: updateInterval, + maxRetryInterval: maxRetryInterval, + } + db.openFile() // Optional, might fail. + go db.autoUpdate(url) + err := db.watchFile() + if err != nil { + db.Close() + return nil, fmt.Errorf("fsnotify failed for %s: %s", db.file, err) + } + return db, nil +} + +func (db *DB) watchFile() error { + watcher, err := fsnotify.NewWatcher() + if err != nil { + return err + } + dbdir, err := db.makeDir() + if err != nil { + return err + } + go db.watchEvents(watcher) + return watcher.Watch(dbdir) +} + +func (db *DB) watchEvents(watcher *fsnotify.Watcher) { + for { + select { + case ev := <-watcher.Event: + if ev.Name == db.file && (ev.IsCreate() || ev.IsModify()) { + db.openFile() + } + case <-watcher.Error: + case <-db.notifyQuit: + watcher.Close() + return + } + time.Sleep(time.Second) // Suppress high-rate events. + } +} + +func (db *DB) openFile() error { + reader, checksum, err := db.newReader(db.file) + if err != nil { + return err + } + stat, err := os.Stat(db.file) + if err != nil { + return err + } + db.setReader(reader, stat.ModTime(), checksum) + return nil +} + +func (db *DB) newReader(dbfile string) (*maxminddb.Reader, string, error) { + f, err := os.Open(dbfile) + if err != nil { + return nil, "", err + } + defer f.Close() + gzf, err := gzip.NewReader(f) + if err != nil { + return nil, "", err + } + defer gzf.Close() + b, err := ioutil.ReadAll(gzf) + if err != nil { + return nil, "", err + } + checksum := fmt.Sprintf("%x", md5.Sum(b)) + mmdb, err := maxminddb.FromBytes(b) + return mmdb, checksum, err +} + +func (db *DB) setReader(reader *maxminddb.Reader, modtime time.Time, checksum string) { + db.mu.Lock() + defer db.mu.Unlock() + if db.closed { + reader.Close() + return + } + if db.reader != nil { + db.reader.Close() + } + db.reader = reader + db.lastUpdated = modtime.UTC() + db.checksum = checksum + select { + case db.notifyOpen <- db.file: + default: + } +} + +func (db *DB) autoUpdate(url string) { + backoff := time.Second + for { + db.sendInfo("starting update") + err := db.runUpdate(url) + if err != nil { + bs := backoff.Seconds() + ms := db.maxRetryInterval.Seconds() + backoff = time.Duration(math.Min(bs*math.E, ms)) * time.Second + db.sendError(fmt.Errorf("download failed (will retry in %s): %s", backoff, err)) + } else { + backoff = db.updateInterval + } + db.sendInfo("finished update") + select { + case <-db.notifyQuit: + return + case <-time.After(backoff): + // Sleep till time for the next update attempt. + } + } +} + +func (db *DB) runUpdate(url string) error { + yes, err := db.needUpdate(url) + if err != nil { + return err + } + if !yes { + return nil + } + tmpfile, err := db.download(url) + if err != nil { + return err + } + err = db.renameFile(tmpfile) + if err != nil { + // Cleanup the tempfile if renaming failed. + os.RemoveAll(tmpfile) + } + return err +} + +func (db *DB) needUpdate(url string) (bool, error) { + stat, err := os.Stat(db.file) + if err != nil { + return true, nil // Local db is missing, must be downloaded. + } + + resp, err := http.Head(url) + if err != nil { + return false, err + } + defer resp.Body.Close() + + // Check X-Database-MD5 if it exists + headerMd5 := resp.Header.Get("X-Database-MD5") + if len(headerMd5) > 0 && db.checksum != headerMd5 { + return true, nil + } + + if stat.Size() != resp.ContentLength { + return true, nil + } + return false, nil +} + +func (db *DB) download(url string) (tmpfile string, err error) { + resp, err := http.Get(url) + if err != nil { + return "", err + } + defer resp.Body.Close() + tmpfile = filepath.Join(os.TempDir(), + fmt.Sprintf("_freegeoip.%d.db.gz", time.Now().UnixNano())) + f, err := os.Create(tmpfile) + if err != nil { + return "", err + } + defer f.Close() + _, err = io.Copy(f, resp.Body) + if err != nil { + return "", err + } + return tmpfile, nil +} + +func (db *DB) makeDir() (dbdir string, err error) { + dbdir = filepath.Dir(db.file) + _, err = os.Stat(dbdir) + if err != nil { + err = os.MkdirAll(dbdir, 0755) + if err != nil { + return "", err + } + } + return dbdir, nil +} + +func (db *DB) renameFile(name string) error { + os.Rename(db.file, db.file+".bak") // Optional, might fail. + _, err := db.makeDir() + if err != nil { + return err + } + return os.Rename(name, db.file) +} + +// Date returns the UTC date the database file was last modified. +// If no database file has been opened the behaviour of Date is undefined. +func (db *DB) Date() time.Time { + db.mu.RLock() + defer db.mu.RUnlock() + return db.lastUpdated +} + +// NotifyClose returns a channel that is closed when the database is closed. +func (db *DB) NotifyClose() <-chan struct{} { + return db.notifyQuit +} + +// NotifyOpen returns a channel that notifies when a new database is +// loaded or reloaded. This can be used to monitor background updates +// when the DB points to a URL. +func (db *DB) NotifyOpen() (filename <-chan string) { + return db.notifyOpen +} + +// NotifyError returns a channel that notifies when an error occurs +// while downloading or reloading a DB that points to a URL. +func (db *DB) NotifyError() (errChan <-chan error) { + return db.notifyError +} + +// NotifyInfo returns a channel that notifies informational messages +// while downloading or reloading. +func (db *DB) NotifyInfo() <-chan string { + return db.notifyInfo +} + +func (db *DB) sendError(err error) { + db.mu.RLock() + defer db.mu.RUnlock() + if db.closed { + return + } + select { + case db.notifyError <- err: + default: + } +} + +func (db *DB) sendInfo(message string) { + db.mu.RLock() + defer db.mu.RUnlock() + if db.closed { + return + } + select { + case db.notifyInfo <- message: + default: + } +} + +// Lookup performs a database lookup of the given IP address, and stores +// the response into the result value. The result value must be a struct +// with specific fields and tags as described here: +// https://godoc.org/github.com/oschwald/maxminddb-golang#Reader.Lookup +// +// See the DefaultQuery for an example of the result struct. +func (db *DB) Lookup(addr net.IP, result interface{}) error { + db.mu.RLock() + defer db.mu.RUnlock() + if db.reader != nil { + return db.reader.Lookup(addr, result) + } + return ErrUnavailable +} + +// DefaultQuery is the default query used for database lookups. +type DefaultQuery struct { + Continent struct { + Names map[string]string `maxminddb:"names"` + } `maxminddb:"continent"` + Country struct { + ISOCode string `maxminddb:"iso_code"` + Names map[string]string `maxminddb:"names"` + } `maxminddb:"country"` + Region []struct { + ISOCode string `maxminddb:"iso_code"` + Names map[string]string `maxminddb:"names"` + } `maxminddb:"subdivisions"` + City struct { + Names map[string]string `maxminddb:"names"` + } `maxminddb:"city"` + Location struct { + Latitude float64 `maxminddb:"latitude"` + Longitude float64 `maxminddb:"longitude"` + MetroCode uint `maxminddb:"metro_code"` + TimeZone string `maxminddb:"time_zone"` + } `maxminddb:"location"` + Postal struct { + Code string `maxminddb:"code"` + } `maxminddb:"postal"` +} + +// Close closes the database. +func (db *DB) Close() { + db.mu.Lock() + defer db.mu.Unlock() + if !db.closed { + db.closed = true + close(db.notifyQuit) + close(db.notifyOpen) + close(db.notifyError) + close(db.notifyInfo) + } + if db.reader != nil { + db.reader.Close() + db.reader = nil + } +} diff --git a/vendor/github.com/apilayer/freegeoip/doc.go b/vendor/github.com/apilayer/freegeoip/doc.go new file mode 100644 index 000000000000..65903477df52 --- /dev/null +++ b/vendor/github.com/apilayer/freegeoip/doc.go @@ -0,0 +1,14 @@ +// Copyright 2009 The freegeoip authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Package freegeoip provides an API for searching the geolocation of IP +// addresses. It uses a database that can be either a local file or a +// remote resource from a URL. +// +// Local databases are monitored by fsnotify and reloaded when the file is +// either updated or overwritten. +// +// Remote databases are automatically downloaded and updated in background +// so you can focus on using the API and not managing the database. +package freegeoip diff --git a/vendor/github.com/apilayer/freegeoip/freegeo-warning.png b/vendor/github.com/apilayer/freegeoip/freegeo-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..0e142cb4020bb466d0435112a172f4cac2333705 GIT binary patch literal 14752 zcmb`uWmH^C*EI^k-60U%-CY9#8Yg&g_uw=H4Yb7M0PrvYB=rkFITH1C2C1P2R$!3>vD6om*5Q#X73`4EVOc|~!k7!qOo zgA>-V>^ri=_%68zY|NR$N4gFf1a5D-_wTS}BxEGw9$$7(PF7|#b~AK$!H;gcue$En zO+F_A*NwJw<$@Xz9h)Fb2}FvYn3G2}m zK>Tlj=Kl8&OCbIWtQv6sY58x^mH7_~iT?sbCj#@fY%bF(J8UnV#GXZ|+yfD04vUM! zLZ>N;>BEb)JH>^=gNZxmeIra2zk~iEv+vU7GyMK?Ksl{?jJJ=}_GY=dW8?#G3V@6U z1wSSGRhV<{pAO}$uM*Hc!V#qS-63#!IPX{*e(Uf)^|DwMPCNY{6L=+NI0ZG{=v=uiE&si}@J6S+Z8gK);Hd)QmU?}dhjcw>$S35UM)7Hw)GOurmJf$6 zZFcq!VBgp?oMpG_9nS;!o2FGma`)q^rSAof%U0~k_3_dORdh-qN*>M8n5ZqUeFXD2 z=(@)gjtS?qwkLU)hy9(q&5^V9lg+m0vil>;JcNI{V32^}JHG4^?Q!bmrN3O&^K=$G z@#8v?Dd64y9=qS`t;LQ4myLSGAzO=?lF$gV;phX^-{iTMQN~y8eedPxZ2Zo|xokCy z2JE@a!&15WG8}){Lb6>|xA^1!9+#Mv?-bhzjkl{iQ9_>D$8X(as^F%}O0lXPLQVw% zkG~ykl0{35J!9k6D|wd_oc-F|xL;tPH7Yc= z?53+>M?00t$=P@@h>CH8h9Np{9_V*unzP_9LLdu}x3;!g>?Bn9sl^=;C*VR^sQgZ$ zN#thUX9z8j7ia@2VC1pWxKK-jVwM7JeTSj+Qu!GC+>JBgOVPF~O|!wPr>ye3p9u8s zBQ-xSSltd?(z_Nl6RNTEi#faOQ2Pk(qarrjdm7)Hg~FSSaGrETyR-7NZ6iz$TW#y|Pk>728Q+<&S;weWXyC%nK&})~e>|T* z{`+k6@g*dt}yI{<<;YFIJJTn<_g;g-zLd#(y?4Z=zRQ!bzmt%HEe zOccH*4R2q77@8;Cr(+y-;NvV_4ri6mdVzd!j>s(VdOuOisR$IzIw_4{hP$Pc8LFJ zkZA-#6!WxqVkFhy-{j7k9)t9jOq1LI&WmKIcc zMy!xZNgZ|3Jm|f{Wl_=M`I0HN_B7|m<9iTDu*^h3$0YLdtzy+S+b4G(iGrfvp3c=& z^1HToFCm`W!SCt5=;$C>PKz%0%1y5P&$A75nG%XJ+M8c$0>$fcJwIE7jXSdWx4j%@ zoi5d-zRmAng;^fGEmanZ;{kljn2Pg#y>BsjB%n0jV=t%w4*&77VUrVq5^QTWF7;PT z_o7%_8c_jUKRvd??6|j~c%EVSIaWNKM~h>;yxdL@d2W9q;|wO5mE87x*q>-h(_wj7 z_Hm!vfXzPN%+uN(N_JlfWlOby8xJ4LcF6K#^>phBqR&m`s?Nuu_`@I!t|ZWd3+clO z*^-G%u($b{040YJ$Z(kObY@D&cKo>1L0GPa(B@8d7fwOaI1r9R(Be7F3aB2C=6z3mV3~nk01HL zr;n%g)fM~aQ~N?Np(9vf{pYe9-wQtzDLp)=4N{;o1dfkmNPBV)GS*OYoPim56@DXX_RKF%2<_5EgdIGbg;J8FmAMS?8z0J9tv zP1F$;H=`NZR`PrNb3Qa!e}3GiFVh6`Peln`AxgyYpW}2IXqmV?Xs$#I(&X+rlxx5ar0GnXUXcv6iE~xD8^_Mu4=&pD%~XJt0F1m0Q#XJZ_n03943$NEF_U_Ctxs zNGgh7&gB@~DZPcuSH66`#mBB%4%OQOLW14W9OLePJYq#nx2iG7Ce^=Up&984v zVwU^y&IF;{rkhong|aXlH5ng-AZDFSZ-YjL7lhlT-{-LZ4Akrr(R*K|i7ED!V9~JV z=NBE*awcInT{Mmmj8P%->^fF$J2%@KiQ?mSwYPXVb}Jmt%^k3QGS*w%V_~ROmcYH4 zxZ$L!wxLYb)4T0{w&)=6oXSNNH>Oo?IzEqs;fsN#`tBy8Rt!ub0?xCH-!ajUe~>Dq zV%;5WCm^rX4#^b0+@@=$SGB;befn^-Et@HRE}>?8xjmSTgI9d!Vh0hvWeJFhnc2E9 z)Rg&=S-gOI*^@mzeJ=eg*dcU+wF$Jp9+PZ38p5&ccxxFlb7#A^tW!3u5acijjir<> zSCV|@*`4@h1x#B(B|jN;M4W#&eJlTE=Bs$%&U8pp$xiOK>ut3mH>beqTG2#K=Wr5l zLA$|OYVCZQ?YmgqE|K4Dqc#n}D4%ALH-fXBQE!dAY?MV8rcg4D2asq^25BS*RpwBSLoLd_p$>s+CS^`NS4`yYg~xUlHm; z2PS_PkZYMM6#cR%Fj7nBf31Y)RCvMeUQDg;5q zIvgr;k%UDC`9v-WPhQj>;_hs(r8M#zIJsqkzE>d8$5*`;I`BPnf}qGl{E z;%Q62U7KqRwMKrxR*91$wZ-g9DqO5!gh~a`)UT7y8(Q)#cLh?|!ku?13#6+Bqw{R` zUOz#6ed_v-^O|Aw2kHG@T*hu=sYYTbp4+TH*8LI)(Xv=+{=rs7M|(qz?<9ZgkHI~E z=yq6k-ZprB_3ToY9^TH(y}ZRJ5T=-zJ>pGscGhL>|Cl8hBi^UcxEznopi1*Nzon#y zdW#*RkV9PFkZZ|hc%<1+DHW@F-EYm%hl0z%z3@3Oyj9PdBh2jJWO&}_IcyZmxwOrt z<$Xg3cb!bFKlk!S+7CM!W?+P8>a{5PVaVyp;`vRagXHVROE{bTpJx%U!DJ~7USP%p ztOq{Oc&HkA;OXAOZQ?%hgpSr$L=OJATc(Oao>D0d#S-EuSV>tpmirNOZei0C*FQhs zBMUa95-4E{)=|6nGdf&?#H2{BpXu=*?;;6|8j{PzkEOlI zGOcmjL3Fi2wZ4J6qxqCTY$9i*0oYYjH$ zV2JJyORD8@O?BOypw$*IhA|?u*q&=@IVq~z+kkrt$V~Dy3rribouu0qh&QM(;193o z02dM6dpT{qF>X(=Ug+B2pZ&*5wI{5n%+c7ZX7dyxw`W^yl>I3 zogS#+nAl2bwF7euruUC|+92&8PSi?r3nN7(`T~Q9zw)IukMB|XJu?1Rqa0ZSBkUaR z63i6rPptVs5CSDvYeQdsr%D#*dYG3H86SoW-Xy#%I!A{JNjx1u`#T|BMYGWrnTOe{ z6}IfyaOwoHFsh;@$FRt)q!>kPf11MN?ib9IxbJ70rS7>u5ypjWvuA)@?z#ce`SH+7 zgyEg_4t$5R*F^SpwdUWvx8*Lk;wO^nve@O5ExtK+Bf7Lhi@Xl*qr$waJ#$7KIo1lR z+*2LJ6;kybbn-UsB8FrA#-jR86uY>smx{qa_v_@4Kud_xMn54Lfnmm!&6ql_HcI32 zAQ}UA@sAk6MD}>ji*omE4DHn(y1)oVl;k8=4|xZZ0xu*X1?m2{%MK|IUh7n^HmGU^ zx%X6&j*mzl{%B!NnZ?TUyZpK(rJgm(jp0PoJ?t0pdI=wpS;^hZ$N@|z0UisJJknqF z`HtcwxJ$wm?WF`UA8%h&_usPGpDo?yYd#~skLKUprf4s<{LDq~WnC@?S}aaJT%5S4 z%f@@Y_#71b&;70@b+r-8n%)kFS2#_Y{u<`vliHOsPP`!0jw_aaFGtSnICDoarG@R# zbq#UD%BMHfAKEK*>z}3xCV>0O5K3Q1yv5=M+#oWrqF|WFFRyI8iEKNInHu8qQTr+* zcXXkQC7_*R97k|{Kzp&{QE4EVb#13`{`{lyaKd1R6>P#y<(#g7H^dYOLgQ-nCuO>6 zn&AwVIIQN-)vP5BQJW)@_l%n4DFOX1CAsktfV~*v)qBraLN3uIf|$xl&>P7GAW1wv zPd4Cuz0Xc{FYw*_WbrmFxw!>CD_1pI&Xx*4FE2OhKgYMZietbed&P~59KB4=EL5A~ zGBvRZL@u-$dU>iejPoc(os}MKFdDq8^p}t0hNh4zROV@(a%CfxDe3z%M9X^yO6S50 z)bVOna!AQr{z*VIOjQ}II{MS$8y#pdxm{Hvsd~0&6**%*VDF)De28}CswD*tfauv$ z%5b216~~rac{~S@XBa29mx=OJuf|Xu_?9IIYTqtYm^ChqODHH&F|+BJ{AKh`(=PRG z4e{rH3xoh>1_9MbK|fyw(^!NlNEz{@uE|u)u!*CIylE*TIzdnvV+g9};5n1W)kKTZ za`SdltD}X-VOb01^I33uXS7%8kjC0(m5%`tsmffPS|P9K_i<65E>Tf6{q>+buevc@ z*HMG(=Z4^h3yrp+8|y9S;T&S0-RumaFYj)k6|fr`PDfnvEskO<(?|rCaRUht-+y_s zISkE_`7T=2Cno!@2A|qi>0Jg+CU^N+?syk~+7Su5Ue->|8ux0`;P<#mbb8{Uv)R|9 zg^w5Uq)3EbaUZ|+Glt!Srhk)U8glxTwK1|NFwe7}&_^w{whzQ|-jetP*!1^ZHmyza zdzWva{Sy-|AL0Fie?K(XEia~x-~^N&!=9ru7&W)mUX)MFP7SnL%_x zf`6Jo9b%KhAlRdLlUgsw&avtIeP}^ZrES`k;+9yS;ldxTy*qPABQHF9@2`lzwXNpc z7I!+1sax5sJn;MXt%iEVJsh3IsIXPK_v(1UK^EEl9DkC+oL`zZ!O4>f`zAQ)rNvX6@0OijjWd zmdGrz!v|_g-zwvi`NkKxMG`If`VW=_cB@=5S3VZ}_kx z9YAXR^d}Y|T@e-~G)nCHxu$*RsCs0hXJjZ+mE(~ z8TwQA<%xDYnA~?^^?h{k9d6qEOmyofs7;-<`)3`w-;} zwR1lvu^!j5jJ4rFueuv12z$7MNp8T$qIr-+zmpV~^~Fli-?>|zoZRjw6l2kyjlXa- zZqJn2t+Si3lfmv3_rzp4&@bo5BVjEv$0H&Iq)GKk)|@e&h{MN{K#u$0YPxtv3?fbf z!G)kEm!A>XpE@y1xiJ|Oa3}6}`%1UZxLA?cukF&}Y$bz#Il}x9+0B4Qk(eH%n#`^m z!kJ-Vlxk+B<(WzNLbRGuUi%b5MX!$VmRkfieY7}d+UVT8lRc3<4=a^p0o6!ahK6(N zzBZ(STrElf)+BN2lIsnEn9(tJC|Jnaj8r}0>1tOXGA|>h-s%RN4x%Yw^#T4Cx^{ef zwWgudKTh%Jkz5ygMDEDKBple>FOmx%YtD_+ChQ`Ef=nnusi+|*Jt)juRQg` zy~t88xlOJl6N^RnkJnIxYQ#SR0Cq!3SsfeMF9|oJ>SDLcn^BwutY4p|w+3o~hn}Ph z%>rq4yZoh1(Zj^lEjC3DQ)l`JVgW}~E*btfV;bJ77LRx9!DPO7>xHkPpX5G3ySk;3 zy*BI`qAGmw^dS|Ptf_|(V2ISrB~5`yOdn5{E>D$xClBv5R9OXm`lnW8*2t?@GR!F7 z>aU($pyBrNmf5e%^OvU{yF6zY*EdTOVMM`vt5$z-Cy{PO_(p(pm6S~Nx!vw;6g1d} zWYW(>i9kv8zv}s2B0(Bpy)o^zXM32oA-?552B~~($1j9j%K%JMOFE`1i7Y=+L077k zdlCw5e_*S(N3^AgnqNJapKmgHtV{S`1#T0yi;Z-ZJRAAs8=dNx18{A$FZXfmm{0l5 zFjsB;T6vka8e}gQ-Zs-tne)#Cz?KT&+%ZM|>KOU>>xtR}95ZvgKZ@VjoB5YHg2|c! zn0H<7)?+K}tDQ`bGhB#L9v@E)KM3(2XH}1t+bvEr&0ind9v_!>cD$wv@>Fe2U$cn? z>~OhQY|W@=7ObPZC<-wBV#A@O>=WGh$Hb|kEVYaU=gI;-%fMtp-qN`qvZr=Ew^Z#m zQ5P$(Q@irUUOh+gitwd+z)PI(IZ7+nKPm_WhUVVM{jQ5_m}^XO$II4stS2vu)9Q_YVnClwCO#xEzQ!(+a^ga6j-nn_18;*KV<>=?ezct0-X41N7aJ9&#dsa@z?$p$u~qC!=h)m1=n<7U*JYhhuQ zNg&qW0uIs1j7vYoj>Ai@_rp{{UKgsh>y26&e&(L*n8;4B7--<1u39zR3Umbnf*t{) zCIt!{r+#er*T*Ag8M=k z@{&(q)O#_mf8>P!=u`g<{uQeJqgee1{Fh=y@o&rjg<|!;k*-vW*IyihGlo^k|7HtX zK)XeK$Pn&!Gy*ohIN%_x%|6%$c@GrstF#QksZ_58^`B!B7-%$R4 zQ``PAH73!?{{#GA*xbyWeYxI#t;}8FEdhLE zEk1B?Ou7{Ejj4F@0y_+-rI@JXRN_A7m-^vabZDFuksP21lRvq10>a0o>}WhxZ+2qy>XD9riq2-xvm$ z8k7A=t@&K;38J!It4AGHuil%7aO3S}FFL(2klg)1rz$R-5VxoZzn)+?s$=u9bt>e6 zCNx?82xrK5`2Jq$gB5wzpEPC3o4$yE=$1c9Nxk;AwbgjLp9`({We;$bJ7j*7ZNX+k zp~y*xe&)~ET+>H&5582gC*vzPZX5G3dlV81#;|4a84>Coxja2iI6aQ1`^Ax0mMda9 z{cT{G1~>2J`0HrNSV+d@_2UXoj zgg=`5$=vDTaMd>`CjmnloUn&0Dq0Em4p55c$&Y!WqrL-qSzU2T$U#Oi;{9Z!Jb%mF zX<0*4*oiw(@HPr>NYf2zJ`@NHD>P&7_W!)!StnF~m=i!tXG#3p>Kv0`uBhjW!{x1?h_9mv4`mOklbX#c{mZ0pTGwV09*5B8>(G%b9^XUy<^IF2AJBI8Q)z_UA zc@~zi#&xu(MaFO=O;UB%>FQ+P4J?XF1j`}BUyEPa{eBv!&w$G``vnya`>ECy@)Om5 zK5R&%kY1WYxi8Ybx_$s_-}aZ|&TDDBRBV8=#oIJoYBb#~7nSGUAe!Lio<-T32tI}U zIf(XqNyiYb-a%Vv(aDVZ;AXdKd(g zPOUusn}mVGKK$U1(@s!BiC0b%gWCNdFNoBf46li>vR%U9v8w8+KhYOChAn5yhINK>XJeya_55I@ zX)XuP>f`O-Q+6_IqnDaDHX^U+{t!HF^;k@JI^d3nf~|vilV}#4H2mTP*Hl^#`bw3Q zW~1F^3faEeEqX-@yPlE=J@mV+)q;6#x_^W6Ro)!4-R*Uw9-qzcVWu)Ki02bSw!r3} zOXcHnmffP4x0#bN^<%3lF2q9 zG!M%$`bbuAuSPe+h=z)uTOYy<$Ex)iF$5Rs@~}tCMRjvy5NZ(pmDjsPSJNgvj;zGiBVvzi$$Q1$!2+gAPCu?$#B6J8=C=_{9yyaTBUfxyB zwjjf~bqeo{b%Rvn}a6!c*lb%otjXQ*Of$CgsnZ~lNSQ2%L$(80UhI~9Gv ztvBgh135GJvJLH%G&M3X^mG2+S+=ev1kU>V8Go2a-6!1G@5_{!)T((ds3{7^i{kV~(?xi2)ieW@2z~qBZuX9pl9%HL{>ANDG z{-=buU0|h$$$B!qDwE@R6^-NSg^E=Pq9{0Xo@Q;LQag*7_1T1A%(W{cKYk8Egzlike3Bxsd~W#y(*RA@R%-UH_vS2rv9Fxp zgIHgu0~l#~h$DQkn?qqjOIaOP3nBfoV!Yp~ph`kHpHu5N4qI9Oi=%ILSD;{KhPC_C zmUzi~0&}Wlb#Z$Rc_IOM4ob8A?^5lO*iTUiPV01vDPQM%GAAiyi53s1*iC-%=f*Jz zJ~5)rB0m&zI_Y-NP>0CI1ZHW zDOcS{^I0rcWHNK}y$A!H%Eg?E61;&V*jPjf>NPk+vez@|oP}1&5hBjzN@KQ)vdmVr z7mJM4$UJvf+Qo=Zz_gU4=&+y5*`%$DKcY5E52lN6>@&w&vugJP<#oP6hNe*-@tdc^ z_iS)!T_Idn3Fz_%J@`<18KUMUzvwUsbC)(bCI)W4aqhxSC0N}VD?5T}t}tinUElmu z#3S_xF*+g96b?9YRl%GP+sSppGc`Fm$y>TVJ9sK&JYA-h@ol0OW99acpjVy!RJ3I^ zlkaOxk^26=%9LtF42HGoo%O^dfd-}%Ntw*+41Caz@e;>|7O9Q`0;DR05)hG3zNsQ4 zvgk^2TbKGHh>p@0L&}wSqs=%$fK)>;4sPPJ38uVOGN&5Kcn<#!EJ;j`pAHESVfIE+NMR2+i$j5BG|c67S2eCbL+%g;FW+ii!a7~1i4%`OeMNUc=9NnW6 z?(!=tgh|X!&c`tz$#|XWlUW#I@B9Se0vTOIj5MU_^tEYNey^Ax1maOk!_*^8(yLwt z5k-L%;XmAraCWg+$cEr3a5x{$h32YISaVjA%$J**x8rXnB#{<9s0-(El+n~;;d#%Dz5_|D+a9C1lnn72Y)uLlS!o+H>xqXxrrc}=KvkCT@ zz!zPadsjT^!!mV9rLX2E?%=Le*B;pSMUw)6UzbSg;a4^VmF8R-oPj6wjr|6gZnkz} z6yvLsY?+B!6RW4^#tL>gt`B%tUC~Cyjt6bjnhF)))|p-pf%lVhlWu#`)V=zt`Eb2; z!^S0fiORJTa93xJ-%HMIWfE$d= zikV*b;g9Cx_=D=pT(%Rl;OI4HjTiG_1|MB}0Of&DCl(a-{<7y9gF_7pBgYc8RDZJD zlAv3a3pk+^Nb+7~?7%Z*)v#bPZCnrZMOeQ zCe5^xCUu$d^e=w`a8{QV`tS)&ex6r8{DNuW9H1s%T4H9}kG3$8&z+i5@ z6ZM?(8CCZtFZgST@oIQ0utbPHum2ieEO572thqw_)l%LR_Wm-5^u+Ey$qn2ROYf?! zJbQM2_0Af@wrMhX`3R1b#9LSEgyH17i3phgQiGGpq1hZ;f1$KbsO+&;!QQn2n=;q! ztCQ0quQ=~5JQ#bSMQGDy5pB`Vvec68b zssYx_tW&q_j-&us^b7lN;0o$<)*SDvJ zzKaX6gU@SW8`ujHTcy2y=(MDkMc{NrvWo6lsMptQIfeJQ$ZX)K z`QZo9((g;_dz5z*5iGEJ+1#5(`s^$hL_*_V_kp9 z&|P-!V5S-(Y&5?atiYiuH%DKm+W?FQ(5~2>#*R%ae6VfvC~zK!j(fm7OD+hNQ`BiJ z5(vyXeRq%o&F0H zmhhnyn6{xwt5D`!e)>Ku>@Spd+ALaq+e#6_u5AX0M~c%t3%(utvi87|smc$04(_uk zJOQBXy}(byw)>kzvnXjc{mxasbl`*dj^E9;Gvb`xPzN%w%6-mF){wiG%FZCK@C6O9 z-BN4yf}G#X8CwVK-tB(?hy*e@v z^66(QBxE8KqmGj|M-eo`ONCauC1Prw&bQCxbOb^$pzWOX*?y&8UqOOS$>J57R<@qP zuUhDbG|NAXPb{F*@2o8`z_9n35;24?GvT8X{q3`DZrY};3;Pxv8z;2?2mpgx>W7t$dJhg zGwb-$xpo5WNjE=2yWd6YtAZf&p(UZ0zGWH!akHi2gAO-NA*W}cxQ?)nR6p|w7%`k?`^M`O0RVkBl|cAY~rQUPhtQNkb|ZWO1V zRTgJgMO1Ad{b91jJ5RUfbgfOUnDU5!nUA3&H}vK6L^llZW+x(2}2g?>4b-P>^a)NRd{O0EMRhNz{`0 zuo!r^gnk8{Z9AwDlzmGD5j0zFoCK3(7*n4g$x4gy$MTT2vgrQg+#_E>`N+z*I^ z*=*l+iBzrV>XN=3FG@wX%uj03K;HJgExpmgw>ZJQL?_YAhA80Y$dM)K$i3abj~8+@ zW_7=YSg-27b91ld^n4}LSm&^?nKzA3_ncIo@~ohaoinRMx`dduuz0VP7+w&mx4Pw` zugox1O&yEtW(suOwa#ZSTOnEbZL;-}=zfV8JUq?x)juU{xIFYX*{LpB3Q&yY8DGD0 za_x0S^}cK|*DSw-iL9G+V;djVxuC%>w!c@bs+7Aj(8-i5rl)j5W_XJn1fPM^+n(No zk}9H7-r8GM-#54bQId!Yar7F5huR&q1JH(p?Y+}{fI$$1zd|87=|!V(Mpmc5puzZ9 z$Y+_6X~DN;Zyw@cQT6cUdjG{5C=J4+d!%IlW}tp>4&MHjNXXF)TrR4s^tmJCsn9rBV*y_9KFYcc?&D`5O?)9~zGM33g6;WixbWnEa( z`KmVsNv_(ziF%C3*%2xje_jzl?wF6$1k$58Q^F{58>XG5U=S ztE)?awrcNB6g#8wpVx=h44Q$Dqw98MwX`xA2MQ%F2DilsQF6{T=`OBo=BufQf{-2e zF;00bQd3Vd>(l;948bU=DE8l8Q>U)kn?=3ltqKjLtuNi0&o3urBneA!&K4`5BvkwU z2$8D=M^xGfN^Z(usqddl(aAH7Hql^|Xyk@pz>JUIN( z%J7(s$q_D9Vm-T{X6pVmxm63&v}YpKvYYY&e3)pOV@RLU`WtuBc`zyPeUcNeR?DUTeBI7w3%X+$f)rg=N`1$qy_5Ccm zcu?3$O%&=}c=GKDn>yzVth=wGy8t=37pSN-RWcPu&7#J(JT%O2lIubnssraX75@xV zLUz=u+o|=MW4@qeuBeKu2UI{?nRk_9>*!MTSK=j9A4JuOw-!!iqV-~(fGSA6YDvyErBTk9WdlUu@R z*n2@iEEeWlYdb#!u2T$a>fbJRYbaPHslh7dy`4_ZYyb(FxyQFOjfO}vYGEp1+fF?B z*VgClNMOa6i`DULV7&cDx7!VP5n?av=ThRz67$TaCjIzLx=(rm6q!{>{Ii>3t-eyN zqk`*3B0GxD5TR4=SkifyJ3N}-C6Hu^6HNJz0B3~*FGnX4WB3c3)Q=qUlbu!L_%pEQ zv->eoCzqT{e+sTx)E>t3$uaukYBMHuq$lYv3FQB^iii3X-BDU{&2bt(Ja@ zDmdrPpdQpv{uM=qXsf<*&K6s7$Y}3j=#vc{zb(MTSlL97RS;SCY6l#;G@shC4E@@1d{& zAI^61&Kjscol5d1&pgsid8IbsXIf}J!%G%i4g#_BObIKH(`!CPQzA87`p?Mr&?pHX z*9OS0j;kn6-T`ScaMiu?s>RgCyIfB_jeud8CGJDeZ-2fF*Jh?0Yt_=j7I27H;8|5+ z3S*U>KCf@_l|ljNX;yr3EZ=Vt)o??T3&%uI+-J21jSR992~klLe%bn*C~N%*PyW*< za3vhnBFq3H78D@+W9ru7pKx#jBc-a^(Cvbi4I zc*_YPS7Kc4q)|>=fkrib@PeR#2vxG1@>dGVwQdK}{|Q8iU}GqSHACs|H^K?0xqw3{ zrira2%U)<~ zS8yFV!4WGytLBDbj`gKRwU`+ zq0LvgID;X^8rhc@wJ>_Ul=w-DS0cr$DC?nhI*4st>q}|gtcgpe0lBt@Tx%10G`%cG z!7Hw6sP>0nE2p60@3a~7?}zGTTDWLJ@BL)!akYfU7KxfV1yazhBp zQQ%B|>D_%Ln6~H4@c_;`>ROLf7oA~IXuojYEwh+_spuiY(FA8rpqb z$zJEH&mhHP^lSF(&7L3g5wVELUJM0G&=p0L1etd~*qAX0cCGJlzcCBaiP7C}%~>*r%zc1@dY`2`i@^#XYwq8N zzu>Fam1LwsW=J8nS${nZYI`4(u7*^c@U{=+dR-kI-8HaO`TGRdzXB;W%%?A~|6g+I zzYqOKiTn@v-$;`Gr9}S!EJ^-HiR4CkHT(_@rO>&NN$7ht_;%zHN>)lqvRuOG$NvGM CrpJ*0 literal 0 HcmV?d00001 diff --git a/vendor/github.com/cloudflare/cloudflare-go/CODE_OF_CONDUCT.md b/vendor/github.com/cloudflare/cloudflare-go/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..bfbc69d229dd --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/CODE_OF_CONDUCT.md @@ -0,0 +1,77 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at ggalow@cloudflare.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq + diff --git a/vendor/github.com/cloudflare/cloudflare-go/LICENSE b/vendor/github.com/cloudflare/cloudflare-go/LICENSE new file mode 100644 index 000000000000..33865c30fb31 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2015-2019, Cloudflare. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cloudflare/cloudflare-go/README.md b/vendor/github.com/cloudflare/cloudflare-go/README.md new file mode 100644 index 000000000000..8f5d77b74091 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/README.md @@ -0,0 +1,107 @@ +# cloudflare-go + +[![GoDoc](https://img.shields.io/badge/godoc-reference-5673AF.svg?style=flat-square)](https://godoc.org/github.com/cloudflare/cloudflare-go) +[![Build Status](https://img.shields.io/travis/cloudflare/cloudflare-go/master.svg?style=flat-square)](https://travis-ci.org/cloudflare/cloudflare-go) +[![Go Report Card](https://goreportcard.com/badge/github.com/cloudflare/cloudflare-go?style=flat-square)](https://goreportcard.com/report/github.com/cloudflare/cloudflare-go) + +> **Note**: This library is under active development as we expand it to cover +> our (expanding!) API. Consider the public API of this package a little +> unstable as we work towards a v1.0. + +A Go library for interacting with +[Cloudflare's API v4](https://api.cloudflare.com/). This library allows you to: + +* Manage and automate changes to your DNS records within Cloudflare +* Manage and automate changes to your zones (domains) on Cloudflare, including + adding new zones to your account +* List and modify the status of WAF (Web Application Firewall) rules for your + zones +* Fetch Cloudflare's IP ranges for automating your firewall whitelisting + +A command-line client, [flarectl](cmd/flarectl), is also available as part of +this project. + +## Features + +The current feature list includes: + +* [x] Cache purging +* [x] Cloudflare IPs +* [x] Custom hostnames +* [x] DNS Records +* [x] Firewall (partial) +* [ ] [Keyless SSL](https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/) +* [x] [Load Balancing](https://blog.cloudflare.com/introducing-load-balancing-intelligent-failover-with-cloudflare/) +* [x] [Logpush Jobs](https://developers.cloudflare.com/logs/logpush/) +* [ ] Organization Administration +* [x] [Origin CA](https://blog.cloudflare.com/universal-ssl-encryption-all-the-way-to-the-origin-for-free/) +* [x] [Railgun](https://www.cloudflare.com/railgun/) administration +* [x] Rate Limiting +* [x] User Administration (partial) +* [x] Virtual DNS Management +* [x] Web Application Firewall (WAF) +* [x] Zone Lockdown and User-Agent Block rules +* [x] Zones + +Pull Requests are welcome, but please open an issue (or comment in an existing +issue) to discuss any non-trivial changes before submitting code. + +## Installation + +You need a working Go environment. + +``` +go get github.com/cloudflare/cloudflare-go +``` + +## Getting Started + +```go +package main + +import ( + "fmt" + "log" + "os" + + "github.com/cloudflare/cloudflare-go" +) + +func main() { + // Construct a new API object + api, err := cloudflare.New(os.Getenv("CF_API_KEY"), os.Getenv("CF_API_EMAIL")) + if err != nil { + log.Fatal(err) + } + + // Fetch user details on the account + u, err := api.UserDetails() + if err != nil { + log.Fatal(err) + } + // Print user details + fmt.Println(u) + + // Fetch the zone ID + id, err := api.ZoneIDByName("example.com") // Assuming example.com exists in your Cloudflare account already + if err != nil { + log.Fatal(err) + } + + // Fetch zone details + zone, err := api.ZoneDetails(id) + if err != nil { + log.Fatal(err) + } + // Print zone details + fmt.Println(zone) +} +``` + +Also refer to the +[API documentation](https://godoc.org/github.com/cloudflare/cloudflare-go) for +how to use this package in-depth. + +# License + +BSD licensed. See the [LICENSE](LICENSE) file for details. diff --git a/vendor/github.com/cloudflare/cloudflare-go/access_application.go b/vendor/github.com/cloudflare/cloudflare-go/access_application.go new file mode 100644 index 000000000000..0893c56812e1 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/access_application.go @@ -0,0 +1,180 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + "time" + + "github.com/pkg/errors" +) + +// AccessApplication represents an Access application. +type AccessApplication struct { + ID string `json:"id,omitempty"` + CreatedAt *time.Time `json:"created_at,omitempty"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` + AUD string `json:"aud,omitempty"` + Name string `json:"name"` + Domain string `json:"domain"` + SessionDuration string `json:"session_duration,omitempty"` +} + +// AccessApplicationListResponse represents the response from the list +// access applications endpoint. +type AccessApplicationListResponse struct { + Result []AccessApplication `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccessApplicationDetailResponse is the API response, containing a single +// access application. +type AccessApplicationDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessApplication `json:"result"` +} + +// AccessApplications returns all applications within a zone. +// +// API reference: https://api.cloudflare.com/#access-applications-list-access-applications +func (api *API) AccessApplications(zoneID string, pageOpts PaginationOptions) ([]AccessApplication, ResultInfo, error) { + v := url.Values{} + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + uri := "/zones/" + zoneID + "/access/apps" + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccessApplication{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accessApplicationListResponse AccessApplicationListResponse + err = json.Unmarshal(res, &accessApplicationListResponse) + if err != nil { + return []AccessApplication{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accessApplicationListResponse.Result, accessApplicationListResponse.ResultInfo, nil +} + +// AccessApplication returns a single application based on the +// application ID. +// +// API reference: https://api.cloudflare.com/#access-applications-access-applications-details +func (api *API) AccessApplication(zoneID, applicationID string) (AccessApplication, error) { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s", + zoneID, + applicationID, + ) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var accessApplicationDetailResponse AccessApplicationDetailResponse + err = json.Unmarshal(res, &accessApplicationDetailResponse) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return accessApplicationDetailResponse.Result, nil +} + +// CreateAccessApplication creates a new access application. +// +// API reference: https://api.cloudflare.com/#access-applications-create-access-application +func (api *API) CreateAccessApplication(zoneID string, accessApplication AccessApplication) (AccessApplication, error) { + uri := "/zones/" + zoneID + "/access/apps" + + res, err := api.makeRequest("POST", uri, accessApplication) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var accessApplicationDetailResponse AccessApplicationDetailResponse + err = json.Unmarshal(res, &accessApplicationDetailResponse) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return accessApplicationDetailResponse.Result, nil +} + +// UpdateAccessApplication updates an existing access application. +// +// API reference: https://api.cloudflare.com/#access-applications-update-access-application +func (api *API) UpdateAccessApplication(zoneID string, accessApplication AccessApplication) (AccessApplication, error) { + if accessApplication.ID == "" { + return AccessApplication{}, errors.Errorf("access application ID cannot be empty") + } + + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s", + zoneID, + accessApplication.ID, + ) + + res, err := api.makeRequest("PUT", uri, accessApplication) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var accessApplicationDetailResponse AccessApplicationDetailResponse + err = json.Unmarshal(res, &accessApplicationDetailResponse) + if err != nil { + return AccessApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return accessApplicationDetailResponse.Result, nil +} + +// DeleteAccessApplication deletes an access application. +// +// API reference: https://api.cloudflare.com/#access-applications-delete-access-application +func (api *API) DeleteAccessApplication(zoneID, applicationID string) error { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s", + zoneID, + applicationID, + ) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} + +// RevokeAccessApplicationTokens revokes tokens associated with an +// access application. +// +// API reference: https://api.cloudflare.com/#access-applications-revoke-access-tokens +func (api *API) RevokeAccessApplicationTokens(zoneID, applicationID string) error { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/revoke-tokens", + zoneID, + applicationID, + ) + + _, err := api.makeRequest("POST", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/access_identity_provider.go b/vendor/github.com/cloudflare/cloudflare-go/access_identity_provider.go new file mode 100644 index 000000000000..b41ed8ff0c60 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/access_identity_provider.go @@ -0,0 +1,331 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + + "github.com/pkg/errors" +) + +// AccessIdentityProvider is the structure of the provider object. +type AccessIdentityProvider struct { + ID string `json:"id,omitemtpy"` + Name string `json:"name"` + Type string `json:"type"` + Config interface{} `json:"config"` +} + +// AccessAzureADConfiguration is the representation of the Azure AD identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/azuread/ +type AccessAzureADConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + DirectoryID string `json:"directory_id"` + SupportGroups bool `json:"support_groups"` +} + +// AccessCentrifyConfiguration is the representation of the Centrify identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/centrify/ +type AccessCentrifyConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + CentrifyAccount string `json:"centrify_account"` + CentrifyAppID string `json:"centrify_app_id"` +} + +// AccessCentrifySAMLConfiguration is the representation of the Centrify +// identity provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/saml-centrify/ +type AccessCentrifySAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessFacebookConfiguration is the representation of the Facebook identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/facebook-login/ +type AccessFacebookConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// AccessGSuiteConfiguration is the representation of the GSuite identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/gsuite/ +type AccessGSuiteConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + AppsDomain string `json:"apps_domain"` +} + +// AccessGenericOIDCConfiguration is the representation of the generic OpenID +// Connect (OIDC) connector. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/generic-oidc/ +type AccessGenericOIDCConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + AuthURL string `json:"auth_url"` + TokenURL string `json:"token_url"` + CertsURL string `json:"certs_url"` +} + +// AccessGitHubConfiguration is the representation of the GitHub identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/github/ +type AccessGitHubConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// AccessGoogleConfiguration is the representation of the Google identity +// provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/google/ +type AccessGoogleConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// AccessJumpCloudSAMLConfiguration is the representation of the Jump Cloud +// identity provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/jumpcloud-saml/ +type AccessJumpCloudSAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessOktaConfiguration is the representation of the Okta identity provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/okta/ +type AccessOktaConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + OktaAccount string `json:"okta_account"` +} + +// AccessOktaSAMLConfiguration is the representation of the Okta identity +// provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/saml-okta/ +type AccessOktaSAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessOneTimePinConfiguration is the representation of the default One Time +// Pin identity provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/one-time-pin/ +type AccessOneTimePinConfiguration struct{} + +// AccessOneLoginOIDCConfiguration is the representation of the OneLogin +// OpenID connector as an identity provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/onelogin-oidc/ +type AccessOneLoginOIDCConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` + OneloginAccount string `json:"onelogin_account"` +} + +// AccessOneLoginSAMLConfiguration is the representation of the OneLogin +// identity provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/onelogin-saml/ +type AccessOneLoginSAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessPingSAMLConfiguration is the representation of the Ping identity +// provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/ping-saml/ +type AccessPingSAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessYandexConfiguration is the representation of the Yandex identity provider. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/yandex/ +type AccessYandexConfiguration struct { + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// AccessADSAMLConfiguration is the representation of the Active Directory +// identity provider using SAML. +// +// API reference: https://developers.cloudflare.com/access/configuring-identity-providers/adfs/ +type AccessADSAMLConfiguration struct { + IssuerURL string `json:"issuer_url"` + SsoTargetURL string `json:"sso_target_url"` + Attributes []string `json:"attributes"` + EmailAttributeName string `json:"email_attribute_name"` + SignRequest bool `json:"sign_request"` + IdpPublicCert string `json:"idp_public_cert"` +} + +// AccessIdentityProvidersListResponse is the API response for multiple +// Access Identity Providers. +type AccessIdentityProvidersListResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result []AccessIdentityProvider `json:"result"` +} + +// AccessIdentityProviderListResponse is the API response for a single +// Access Identity Provider. +type AccessIdentityProviderListResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessIdentityProvider `json:"result"` +} + +// AccessIdentityProviders returns all Access Identity Providers for an +// account. +// +// API reference: https://api.cloudflare.com/#access-identity-providers-list-access-identity-providers +func (api *API) AccessIdentityProviders(accountID string) ([]AccessIdentityProvider, error) { + uri := "/accounts/" + accountID + "/access/identity_providers" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccessIdentityProvider{}, errors.Wrap(err, errMakeRequestError) + } + + var accessIdentityProviderResponse AccessIdentityProvidersListResponse + err = json.Unmarshal(res, &accessIdentityProviderResponse) + if err != nil { + return []AccessIdentityProvider{}, errors.Wrap(err, errUnmarshalError) + } + + return accessIdentityProviderResponse.Result, nil +} + +// AccessIdentityProviderDetails returns a single Access Identity +// Provider for an account. +// +// API reference: https://api.cloudflare.com/#access-identity-providers-access-identity-providers-details +func (api *API) AccessIdentityProviderDetails(accountID, identityProviderID string) (AccessIdentityProvider, error) { + uri := fmt.Sprintf( + "/accounts/%s/access/identity_providers/%s", + accountID, + identityProviderID, + ) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errMakeRequestError) + } + + var accessIdentityProviderResponse AccessIdentityProviderListResponse + err = json.Unmarshal(res, &accessIdentityProviderResponse) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errUnmarshalError) + } + + return accessIdentityProviderResponse.Result, nil +} + +// CreateAccessIdentityProvider creates a new Access Identity Provider. +// +// API reference: https://api.cloudflare.com/#access-identity-providers-create-access-identity-provider +func (api *API) CreateAccessIdentityProvider(accountID string, identityProviderConfiguration AccessIdentityProvider) (AccessIdentityProvider, error) { + uri := "/accounts/" + accountID + "/access/identity_providers" + + res, err := api.makeRequest("POST", uri, identityProviderConfiguration) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errMakeRequestError) + } + + var accessIdentityProviderResponse AccessIdentityProviderListResponse + err = json.Unmarshal(res, &accessIdentityProviderResponse) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errUnmarshalError) + } + + return accessIdentityProviderResponse.Result, nil +} + +// UpdateAccessIdentityProvider updates an existing Access Identity +// Provider. +// +// API reference: https://api.cloudflare.com/#access-identity-providers-create-access-identity-provider +func (api *API) UpdateAccessIdentityProvider(accountID, identityProviderUUID string, identityProviderConfiguration AccessIdentityProvider) (AccessIdentityProvider, error) { + uri := fmt.Sprintf( + "/accounts/%s/access/identity_providers/%s", + accountID, + identityProviderUUID, + ) + + res, err := api.makeRequest("PUT", uri, identityProviderConfiguration) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errMakeRequestError) + } + + var accessIdentityProviderResponse AccessIdentityProviderListResponse + err = json.Unmarshal(res, &accessIdentityProviderResponse) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errUnmarshalError) + } + + return accessIdentityProviderResponse.Result, nil +} + +// DeleteAccessIdentityProvider deletes an Access Identity Provider. +// +// API reference: https://api.cloudflare.com/#access-identity-providers-create-access-identity-provider +func (api *API) DeleteAccessIdentityProvider(accountID, identityProviderUUID string) (AccessIdentityProvider, error) { + uri := fmt.Sprintf( + "/accounts/%s/access/identity_providers/%s", + accountID, + identityProviderUUID, + ) + + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errMakeRequestError) + } + + var accessIdentityProviderResponse AccessIdentityProviderListResponse + err = json.Unmarshal(res, &accessIdentityProviderResponse) + if err != nil { + return AccessIdentityProvider{}, errors.Wrap(err, errUnmarshalError) + } + + return accessIdentityProviderResponse.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/access_organization.go b/vendor/github.com/cloudflare/cloudflare-go/access_organization.go new file mode 100644 index 000000000000..5bc4a16aa694 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/access_organization.go @@ -0,0 +1,101 @@ +package cloudflare + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" +) + +// AccessOrganization represents an Access organization. +type AccessOrganization struct { + CreatedAt *time.Time `json:"created_at"` + UpdatedAt *time.Time `json:"updated_at"` + Name string `json:"name"` + AuthDomain string `json:"auth_domain"` + LoginDesign AccessOrganizationLoginDesign `json:"login_design"` +} + +// AccessOrganizationLoginDesign represents the login design options. +type AccessOrganizationLoginDesign struct { + BackgroundColor string `json:"background_color"` + TextColor string `json:"text_color"` + LogoPath string `json:"logo_path"` +} + +// AccessOrganizationListResponse represents the response from the list +// access organization endpoint. +type AccessOrganizationListResponse struct { + Result AccessOrganization `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccessOrganizationDetailResponse is the API response, containing a +// single access organization. +type AccessOrganizationDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessOrganization `json:"result"` +} + +// AccessOrganization returns the Access organisation details. +// +// API reference: https://api.cloudflare.com/#access-organizations-access-organization-details +func (api *API) AccessOrganization(accountID string) (AccessOrganization, ResultInfo, error) { + uri := "/accounts/" + accountID + "/access/organizations" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccessOrganization{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accessOrganizationListResponse AccessOrganizationListResponse + err = json.Unmarshal(res, &accessOrganizationListResponse) + if err != nil { + return AccessOrganization{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accessOrganizationListResponse.Result, accessOrganizationListResponse.ResultInfo, nil +} + +// CreateAccessOrganization creates the Access organisation details. +// +// API reference: https://api.cloudflare.com/#access-organizations-create-access-organization +func (api *API) CreateAccessOrganization(accountID string, accessOrganization AccessOrganization) (AccessOrganization, error) { + uri := "/accounts/" + accountID + "/access/organizations" + + res, err := api.makeRequest("POST", uri, accessOrganization) + if err != nil { + return AccessOrganization{}, errors.Wrap(err, errMakeRequestError) + } + + var accessOrganizationDetailResponse AccessOrganizationDetailResponse + err = json.Unmarshal(res, &accessOrganizationDetailResponse) + if err != nil { + return AccessOrganization{}, errors.Wrap(err, errUnmarshalError) + } + + return accessOrganizationDetailResponse.Result, nil +} + +// UpdateAccessOrganization creates the Access organisation details. +// +// API reference: https://api.cloudflare.com/#access-organizations-update-access-organization +func (api *API) UpdateAccessOrganization(accountID string, accessOrganization AccessOrganization) (AccessOrganization, error) { + uri := "/accounts/" + accountID + "/access/organizations" + + res, err := api.makeRequest("PUT", uri, accessOrganization) + if err != nil { + return AccessOrganization{}, errors.Wrap(err, errMakeRequestError) + } + + var accessOrganizationDetailResponse AccessOrganizationDetailResponse + err = json.Unmarshal(res, &accessOrganizationDetailResponse) + if err != nil { + return AccessOrganization{}, errors.Wrap(err, errUnmarshalError) + } + + return accessOrganizationDetailResponse.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/access_policy.go b/vendor/github.com/cloudflare/cloudflare-go/access_policy.go new file mode 100644 index 000000000000..dbf63e49fa2a --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/access_policy.go @@ -0,0 +1,221 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + "time" + + "github.com/pkg/errors" +) + +// AccessPolicy defines a policy for allowing or disallowing access to +// one or more Access applications. +type AccessPolicy struct { + ID string `json:"id,omitempty"` + Precedence int `json:"precedence"` + Decision string `json:"decision"` + CreatedAt *time.Time `json:"created_at"` + UpdatedAt *time.Time `json:"updated_at"` + Name string `json:"name"` + + // The include policy works like an OR logical operator. The user must + // satisfy one of the rules. + Include []interface{} `json:"include"` + + // The exclude policy works like a NOT logical operator. The user must + // not satisfy all of the rules in exclude. + Exclude []interface{} `json:"exclude"` + + // The require policy works like a AND logical operator. The user must + // satisfy all of the rules in require. + Require []interface{} `json:"require"` +} + +// AccessPolicyEmail is used for managing access based on the email. +// For example, restrict access to users with the email addresses +// `test@example.com` or `someone@example.com`. +type AccessPolicyEmail struct { + Email struct { + Email string `json:"email"` + } `json:"email"` +} + +// AccessPolicyEmailDomain is used for managing access based on an email +// domain domain such as `example.com` instead of individual addresses. +type AccessPolicyEmailDomain struct { + EmailDomain struct { + Domain string `json:"domain"` + } `json:"email_domain"` +} + +// AccessPolicyIP is used for managing access based in the IP. It +// accepts individual IPs or CIDRs. +type AccessPolicyIP struct { + IP struct { + IP string `json:"ip"` + } `json:"ip"` +} + +// AccessPolicyEveryone is used for managing access to everyone. +type AccessPolicyEveryone struct { + Everyone struct{} `json:"everyone"` +} + +// AccessPolicyAccessGroup is used for managing access based on an +// access group. +type AccessPolicyAccessGroup struct { + Group struct { + ID string `json:"id"` + } `json:"group"` +} + +// AccessPolicyListResponse represents the response from the list +// access polciies endpoint. +type AccessPolicyListResponse struct { + Result []AccessPolicy `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccessPolicyDetailResponse is the API response, containing a single +// access policy. +type AccessPolicyDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessPolicy `json:"result"` +} + +// AccessPolicies returns all access policies for an access application. +// +// API reference: https://api.cloudflare.com/#access-policy-list-access-policies +func (api *API) AccessPolicies(zoneID, applicationID string, pageOpts PaginationOptions) ([]AccessPolicy, ResultInfo, error) { + v := url.Values{} + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/policies", + zoneID, + applicationID, + ) + + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccessPolicy{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accessPolicyListResponse AccessPolicyListResponse + err = json.Unmarshal(res, &accessPolicyListResponse) + if err != nil { + return []AccessPolicy{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accessPolicyListResponse.Result, accessPolicyListResponse.ResultInfo, nil +} + +// AccessPolicy returns a single policy based on the policy ID. +// +// API reference: https://api.cloudflare.com/#access-policy-access-policy-details +func (api *API) AccessPolicy(zoneID, applicationID, policyID string) (AccessPolicy, error) { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/policies/%s", + zoneID, + applicationID, + policyID, + ) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errMakeRequestError) + } + + var accessPolicyDetailResponse AccessPolicyDetailResponse + err = json.Unmarshal(res, &accessPolicyDetailResponse) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errUnmarshalError) + } + + return accessPolicyDetailResponse.Result, nil +} + +// CreateAccessPolicy creates a new access policy. +// +// API reference: https://api.cloudflare.com/#access-policy-create-access-policy +func (api *API) CreateAccessPolicy(zoneID, applicationID string, accessPolicy AccessPolicy) (AccessPolicy, error) { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/policies", + zoneID, + applicationID, + ) + + res, err := api.makeRequest("POST", uri, accessPolicy) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errMakeRequestError) + } + + var accessPolicyDetailResponse AccessPolicyDetailResponse + err = json.Unmarshal(res, &accessPolicyDetailResponse) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errUnmarshalError) + } + + return accessPolicyDetailResponse.Result, nil +} + +// UpdateAccessPolicy updates an existing access policy. +// +// API reference: https://api.cloudflare.com/#access-policy-update-access-policy +func (api *API) UpdateAccessPolicy(zoneID, applicationID string, accessPolicy AccessPolicy) (AccessPolicy, error) { + if accessPolicy.ID == "" { + return AccessPolicy{}, errors.Errorf("access policy ID cannot be empty") + } + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/policies/%s", + zoneID, + applicationID, + accessPolicy.ID, + ) + + res, err := api.makeRequest("PUT", uri, accessPolicy) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errMakeRequestError) + } + + var accessPolicyDetailResponse AccessPolicyDetailResponse + err = json.Unmarshal(res, &accessPolicyDetailResponse) + if err != nil { + return AccessPolicy{}, errors.Wrap(err, errUnmarshalError) + } + + return accessPolicyDetailResponse.Result, nil +} + +// DeleteAccessPolicy deletes an access policy. +// +// API reference: https://api.cloudflare.com/#access-policy-update-access-policy +func (api *API) DeleteAccessPolicy(zoneID, applicationID, accessPolicyID string) error { + uri := fmt.Sprintf( + "/zones/%s/access/apps/%s/policies/%s", + zoneID, + applicationID, + accessPolicyID, + ) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/access_service_tokens.go b/vendor/github.com/cloudflare/cloudflare-go/access_service_tokens.go new file mode 100644 index 000000000000..66a2bb794695 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/access_service_tokens.go @@ -0,0 +1,167 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/pkg/errors" +) + +// AccessServiceToken represents an Access Service Token. +type AccessServiceToken struct { + ClientID string `json:"client_id"` + CreatedAt *time.Time `json:"created_at"` + ExpiresAt *time.Time `json:"expires_at"` + ID string `json:"id"` + Name string `json:"name"` + UpdatedAt *time.Time `json:"updated_at"` +} + +// AccessServiceTokenUpdateResponse represents the response from the API +// when a new Service Token is updated. This base struct is also used in the +// Create as they are very similar responses. +type AccessServiceTokenUpdateResponse struct { + CreatedAt *time.Time `json:"created_at"` + UpdatedAt *time.Time `json:"updated_at"` + ID string `json:"id"` + Name string `json:"name"` + ClientID string `json:"client_id"` +} + +// AccessServiceTokenCreateResponse is the same API response as the Update +// operation with the exception that the `ClientSecret` is present in a +// Create operation. +type AccessServiceTokenCreateResponse struct { + CreatedAt *time.Time `json:"created_at"` + UpdatedAt *time.Time `json:"updated_at"` + ID string `json:"id"` + Name string `json:"name"` + ClientID string `json:"client_id"` + ClientSecret string `json:"client_secret"` +} + +// AccessServiceTokensListResponse represents the response from the list +// Access Service Tokens endpoint. +type AccessServiceTokensListResponse struct { + Result []AccessServiceToken `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccessServiceTokensDetailResponse is the API response, containing a single +// Access Service Token. +type AccessServiceTokensDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessServiceToken `json:"result"` +} + +// AccessServiceTokensCreationDetailResponse is the API response, containing a +// single Access Service Token. +type AccessServiceTokensCreationDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessServiceTokenCreateResponse `json:"result"` +} + +// AccessServiceTokensUpdateDetailResponse is the API response, containing a +// single Access Service Token. +type AccessServiceTokensUpdateDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccessServiceTokenUpdateResponse `json:"result"` +} + +// AccessServiceTokens returns all Access Service Tokens for an account. +// +// API reference: https://api.cloudflare.com/#access-service-tokens-list-access-service-tokens +func (api *API) AccessServiceTokens(accountID string) ([]AccessServiceToken, ResultInfo, error) { + uri := "/accounts/" + accountID + "/access/service_tokens" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccessServiceToken{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accessServiceTokensListResponse AccessServiceTokensListResponse + err = json.Unmarshal(res, &accessServiceTokensListResponse) + if err != nil { + return []AccessServiceToken{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accessServiceTokensListResponse.Result, accessServiceTokensListResponse.ResultInfo, nil +} + +// CreateAccessServiceToken creates a new Access Service Token for an account. +// +// API reference: https://api.cloudflare.com/#access-service-tokens-create-access-service-token +func (api *API) CreateAccessServiceToken(accountID, name string) (AccessServiceTokenCreateResponse, error) { + uri := "/accounts/" + accountID + "/access/service_tokens" + marshalledName, _ := json.Marshal(struct { + Name string `json:"name"` + }{name}) + + res, err := api.makeRequest("POST", uri, marshalledName) + + if err != nil { + return AccessServiceTokenCreateResponse{}, errors.Wrap(err, errMakeRequestError) + } + + var accessServiceTokenCreation AccessServiceTokensCreationDetailResponse + err = json.Unmarshal(res, &accessServiceTokenCreation) + if err != nil { + return AccessServiceTokenCreateResponse{}, errors.Wrap(err, errUnmarshalError) + } + + return accessServiceTokenCreation.Result, nil +} + +// UpdateAccessServiceToken updates an existing Access Service Token for an +// account. +// +// API reference: https://api.cloudflare.com/#access-service-tokens-update-access-service-token +func (api *API) UpdateAccessServiceToken(accountID, uuid, name string) (AccessServiceTokenUpdateResponse, error) { + uri := fmt.Sprintf("/accounts/%s/access/service_tokens/%s", accountID, uuid) + + marshalledName, _ := json.Marshal(struct { + Name string `json:"name"` + }{name}) + + res, err := api.makeRequest("PUT", uri, marshalledName) + if err != nil { + return AccessServiceTokenUpdateResponse{}, errors.Wrap(err, errMakeRequestError) + } + + var accessServiceTokenUpdate AccessServiceTokensUpdateDetailResponse + err = json.Unmarshal(res, &accessServiceTokenUpdate) + if err != nil { + return AccessServiceTokenUpdateResponse{}, errors.Wrap(err, errUnmarshalError) + } + + return accessServiceTokenUpdate.Result, nil +} + +// DeleteAccessServiceToken removes an existing Access Service Token for an +// account. +// +// API reference: https://api.cloudflare.com/#access-service-tokens-delete-access-service-token +func (api *API) DeleteAccessServiceToken(accountID, uuid string) (AccessServiceTokenUpdateResponse, error) { + uri := fmt.Sprintf("/accounts/%s/access/service_tokens/%s", accountID, uuid) + + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return AccessServiceTokenUpdateResponse{}, errors.Wrap(err, errMakeRequestError) + } + + var accessServiceTokenUpdate AccessServiceTokensUpdateDetailResponse + err = json.Unmarshal(res, &accessServiceTokenUpdate) + if err != nil { + return AccessServiceTokenUpdateResponse{}, errors.Wrap(err, errUnmarshalError) + } + + return accessServiceTokenUpdate.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/account_members.go b/vendor/github.com/cloudflare/cloudflare-go/account_members.go new file mode 100644 index 000000000000..42166e922f62 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/account_members.go @@ -0,0 +1,186 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// AccountMember is the definition of a member of an account. +type AccountMember struct { + ID string `json:"id"` + Code string `json:"code"` + User AccountMemberUserDetails `json:"user"` + Status string `json:"status"` + Roles []AccountRole `json:"roles"` +} + +// AccountMemberUserDetails outlines all the personal information about +// a member. +type AccountMemberUserDetails struct { + ID string `json:"id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Email string `json:"email"` + TwoFactorAuthenticationEnabled bool +} + +// AccountMembersListResponse represents the response from the list +// account members endpoint. +type AccountMembersListResponse struct { + Result []AccountMember `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccountMemberDetailResponse is the API response, containing a single +// account member. +type AccountMemberDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccountMember `json:"result"` +} + +// AccountMemberInvitation represents the invitation for a new member to +// the account. +type AccountMemberInvitation struct { + Email string `json:"email"` + Roles []string `json:"roles"` +} + +// AccountMembers returns all members of an account. +// +// API reference: https://api.cloudflare.com/#accounts-list-accounts +func (api *API) AccountMembers(accountID string, pageOpts PaginationOptions) ([]AccountMember, ResultInfo, error) { + if accountID == "" { + return []AccountMember{}, ResultInfo{}, errors.New(errMissingAccountID) + } + + v := url.Values{} + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + uri := "/accounts/" + accountID + "/members" + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccountMember{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accountMemberListresponse AccountMembersListResponse + err = json.Unmarshal(res, &accountMemberListresponse) + if err != nil { + return []AccountMember{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accountMemberListresponse.Result, accountMemberListresponse.ResultInfo, nil +} + +// CreateAccountMember invites a new member to join an account. +// +// API reference: https://api.cloudflare.com/#account-members-add-member +func (api *API) CreateAccountMember(accountID string, emailAddress string, roles []string) (AccountMember, error) { + if accountID == "" { + return AccountMember{}, errors.New(errMissingAccountID) + } + + uri := "/accounts/" + accountID + "/members" + + var newMember = AccountMemberInvitation{ + Email: emailAddress, + Roles: roles, + } + res, err := api.makeRequest("POST", uri, newMember) + if err != nil { + return AccountMember{}, errors.Wrap(err, errMakeRequestError) + } + + var accountMemberListResponse AccountMemberDetailResponse + err = json.Unmarshal(res, &accountMemberListResponse) + if err != nil { + return AccountMember{}, errors.Wrap(err, errUnmarshalError) + } + + return accountMemberListResponse.Result, nil +} + +// DeleteAccountMember removes a member from an account. +// +// API reference: https://api.cloudflare.com/#account-members-remove-member +func (api *API) DeleteAccountMember(accountID string, userID string) error { + if accountID == "" { + return errors.New(errMissingAccountID) + } + + uri := fmt.Sprintf("/accounts/%s/members/%s", accountID, userID) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} + +// UpdateAccountMember modifies an existing account member. +// +// API reference: https://api.cloudflare.com/#account-members-update-member +func (api *API) UpdateAccountMember(accountID string, userID string, member AccountMember) (AccountMember, error) { + if accountID == "" { + return AccountMember{}, errors.New(errMissingAccountID) + } + + uri := fmt.Sprintf("/accounts/%s/members/%s", accountID, userID) + + res, err := api.makeRequest("PUT", uri, member) + if err != nil { + return AccountMember{}, errors.Wrap(err, errMakeRequestError) + } + + var accountMemberListResponse AccountMemberDetailResponse + err = json.Unmarshal(res, &accountMemberListResponse) + if err != nil { + return AccountMember{}, errors.Wrap(err, errUnmarshalError) + } + + return accountMemberListResponse.Result, nil +} + +// AccountMember returns details of a single account member. +// +// API reference: https://api.cloudflare.com/#account-members-member-details +func (api *API) AccountMember(accountID string, memberID string) (AccountMember, error) { + if accountID == "" { + return AccountMember{}, errors.New(errMissingAccountID) + } + + uri := fmt.Sprintf( + "/accounts/%s/members/%s", + accountID, + memberID, + ) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccountMember{}, errors.Wrap(err, errMakeRequestError) + } + + var accountMemberResponse AccountMemberDetailResponse + err = json.Unmarshal(res, &accountMemberResponse) + if err != nil { + return AccountMember{}, errors.Wrap(err, errUnmarshalError) + } + + return accountMemberResponse.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/account_roles.go b/vendor/github.com/cloudflare/cloudflare-go/account_roles.go new file mode 100644 index 000000000000..3704313b5ee9 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/account_roles.go @@ -0,0 +1,80 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + + "github.com/pkg/errors" +) + +// AccountRole defines the roles that a member can have attached. +type AccountRole struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Permissions map[string]AccountRolePermission `json:"permissions"` +} + +// AccountRolePermission is the shared structure for all permissions +// that can be assigned to a member. +type AccountRolePermission struct { + Read bool `json:"read"` + Edit bool `json:"edit"` +} + +// AccountRolesListResponse represents the list response from the +// account roles. +type AccountRolesListResponse struct { + Result []AccountRole `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccountRoleDetailResponse is the API response, containing a single +// account role. +type AccountRoleDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result AccountRole `json:"result"` +} + +// AccountRoles returns all roles of an account. +// +// API reference: https://api.cloudflare.com/#account-roles-list-roles +func (api *API) AccountRoles(accountID string) ([]AccountRole, error) { + uri := "/accounts/" + accountID + "/roles" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []AccountRole{}, errors.Wrap(err, errMakeRequestError) + } + + var accountRolesListResponse AccountRolesListResponse + err = json.Unmarshal(res, &accountRolesListResponse) + if err != nil { + return []AccountRole{}, errors.Wrap(err, errUnmarshalError) + } + + return accountRolesListResponse.Result, nil +} + +// AccountRole returns the details of a single account role. +// +// API reference: https://api.cloudflare.com/#account-roles-role-details +func (api *API) AccountRole(accountID string, roleID string) (AccountRole, error) { + uri := fmt.Sprintf("/accounts/%s/roles/%s", accountID, roleID) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AccountRole{}, errors.Wrap(err, errMakeRequestError) + } + + var accountRole AccountRoleDetailResponse + err = json.Unmarshal(res, &accountRole) + if err != nil { + return AccountRole{}, errors.Wrap(err, errUnmarshalError) + } + + return accountRole.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/accounts.go b/vendor/github.com/cloudflare/cloudflare-go/accounts.go new file mode 100644 index 000000000000..7d34b7b8fcea --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/accounts.go @@ -0,0 +1,114 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// AccountSettings outlines the available options for an account. +type AccountSettings struct { + EnforceTwoFactor bool `json:"enforce_twofactor"` +} + +// Account represents the root object that owns resources. +type Account struct { + ID string `json:"id,omitempty"` + Name string `json:"name,omitempty"` + Settings *AccountSettings `json:"settings"` +} + +// AccountResponse represents the response from the accounts endpoint for a +// single account ID. +type AccountResponse struct { + Result Account `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccountListResponse represents the response from the list accounts endpoint. +type AccountListResponse struct { + Result []Account `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccountDetailResponse is the API response, containing a single Account. +type AccountDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result Account `json:"result"` +} + +// Accounts returns all accounts the logged in user has access to. +// +// API reference: https://api.cloudflare.com/#accounts-list-accounts +func (api *API) Accounts(pageOpts PaginationOptions) ([]Account, ResultInfo, error) { + v := url.Values{} + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + uri := "/accounts" + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []Account{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accListResponse AccountListResponse + err = json.Unmarshal(res, &accListResponse) + if err != nil { + return []Account{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + return accListResponse.Result, accListResponse.ResultInfo, nil +} + +// Account returns a single account based on the ID. +// +// API reference: https://api.cloudflare.com/#accounts-account-details +func (api *API) Account(accountID string) (Account, ResultInfo, error) { + uri := "/accounts/" + accountID + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return Account{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var accResponse AccountResponse + err = json.Unmarshal(res, &accResponse) + if err != nil { + return Account{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + + return accResponse.Result, accResponse.ResultInfo, nil +} + +// UpdateAccount allows management of an account using the account ID. +// +// API reference: https://api.cloudflare.com/#accounts-update-account +func (api *API) UpdateAccount(accountID string, account Account) (Account, error) { + uri := "/accounts/" + accountID + + res, err := api.makeRequest("PUT", uri, account) + if err != nil { + return Account{}, errors.Wrap(err, errMakeRequestError) + } + + var a AccountDetailResponse + err = json.Unmarshal(res, &a) + if err != nil { + return Account{}, errors.Wrap(err, errUnmarshalError) + } + + return a.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/argo.go b/vendor/github.com/cloudflare/cloudflare-go/argo.go new file mode 100644 index 000000000000..320c7fc25c0e --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/argo.go @@ -0,0 +1,120 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/pkg/errors" +) + +var validSettingValues = []string{"on", "off"} + +// ArgoFeatureSetting is the structure of the API object for the +// argo smart routing and tiered caching settings. +type ArgoFeatureSetting struct { + Editable bool `json:"editable,omitempty"` + ID string `json:"id,omitempty"` + ModifiedOn time.Time `json:"modified_on,omitempty"` + Value string `json:"value"` +} + +// ArgoDetailsResponse is the API response for the argo smart routing +// and tiered caching response. +type ArgoDetailsResponse struct { + Result ArgoFeatureSetting `json:"result"` + Response +} + +// ArgoSmartRouting returns the current settings for smart routing. +// +// API reference: https://api.cloudflare.com/#argo-smart-routing-get-argo-smart-routing-setting +func (api *API) ArgoSmartRouting(zoneID string) (ArgoFeatureSetting, error) { + uri := "/zones/" + zoneID + "/argo/smart_routing" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError) + } + + var argoDetailsResponse ArgoDetailsResponse + err = json.Unmarshal(res, &argoDetailsResponse) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError) + } + return argoDetailsResponse.Result, nil +} + +// UpdateArgoSmartRouting updates the setting for smart routing. +// +// API reference: https://api.cloudflare.com/#argo-smart-routing-patch-argo-smart-routing-setting +func (api *API) UpdateArgoSmartRouting(zoneID, settingValue string) (ArgoFeatureSetting, error) { + if !contains(validSettingValues, settingValue) { + return ArgoFeatureSetting{}, errors.New(fmt.Sprintf("invalid setting value '%s'. must be 'on' or 'off'", settingValue)) + } + + uri := "/zones/" + zoneID + "/argo/smart_routing" + + res, err := api.makeRequest("PATCH", uri, ArgoFeatureSetting{Value: settingValue}) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError) + } + + var argoDetailsResponse ArgoDetailsResponse + err = json.Unmarshal(res, &argoDetailsResponse) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError) + } + return argoDetailsResponse.Result, nil +} + +// ArgoTieredCaching returns the current settings for tiered caching. +// +// API reference: TBA +func (api *API) ArgoTieredCaching(zoneID string) (ArgoFeatureSetting, error) { + uri := "/zones/" + zoneID + "/argo/tiered_caching" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError) + } + + var argoDetailsResponse ArgoDetailsResponse + err = json.Unmarshal(res, &argoDetailsResponse) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError) + } + return argoDetailsResponse.Result, nil +} + +// UpdateArgoTieredCaching updates the setting for tiered caching. +// +// API reference: TBA +func (api *API) UpdateArgoTieredCaching(zoneID, settingValue string) (ArgoFeatureSetting, error) { + if !contains(validSettingValues, settingValue) { + return ArgoFeatureSetting{}, errors.New(fmt.Sprintf("invalid setting value '%s'. must be 'on' or 'off'", settingValue)) + } + + uri := "/zones/" + zoneID + "/argo/tiered_caching" + + res, err := api.makeRequest("PATCH", uri, ArgoFeatureSetting{Value: settingValue}) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errMakeRequestError) + } + + var argoDetailsResponse ArgoDetailsResponse + err = json.Unmarshal(res, &argoDetailsResponse) + if err != nil { + return ArgoFeatureSetting{}, errors.Wrap(err, errUnmarshalError) + } + return argoDetailsResponse.Result, nil +} + +func contains(s []string, e string) bool { + for _, a := range s { + if a == e { + return true + } + } + return false +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/auditlogs.go b/vendor/github.com/cloudflare/cloudflare-go/auditlogs.go new file mode 100644 index 000000000000..8cb8eab69101 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/auditlogs.go @@ -0,0 +1,143 @@ +package cloudflare + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "time" +) + +// AuditLogAction is a member of AuditLog, the action that was taken. +type AuditLogAction struct { + Result bool `json:"result"` + Type string `json:"type"` +} + +// AuditLogActor is a member of AuditLog, who performed the action. +type AuditLogActor struct { + Email string `json:"email"` + ID string `json:"id"` + IP string `json:"ip"` + Type string `json:"type"` +} + +// AuditLogOwner is a member of AuditLog, who owns this audit log. +type AuditLogOwner struct { + ID string `json:"id"` +} + +// AuditLogResource is a member of AuditLog, what was the action performed on. +type AuditLogResource struct { + ID string `json:"id"` + Type string `json:"type"` +} + +// AuditLog is an resource that represents an update in the cloudflare dash +type AuditLog struct { + Action AuditLogAction `json:"action"` + Actor AuditLogActor `json:"actor"` + ID string `json:"id"` + Metadata map[string]interface{} `json:"metadata"` + NewValue string `json:"newValue"` + OldValue string `json:"oldValue"` + Owner AuditLogOwner `json:"owner"` + Resource AuditLogResource `json:"resource"` + When time.Time `json:"when"` +} + +// AuditLogResponse is the response returned from the cloudflare v4 api +type AuditLogResponse struct { + Response Response + Result []AuditLog `json:"result"` + ResultInfo `json:"result_info"` +} + +// AuditLogFilter is an object for filtering the audit log response from the api. +type AuditLogFilter struct { + ID string + ActorIP string + ActorEmail string + Direction string + ZoneName string + Since string + Before string + PerPage int + Page int +} + +// String turns an audit log filter in to an HTTP Query Param +// list. It will not inclue empty members of the struct in the +// query parameters. +func (a AuditLogFilter) String() string { + params := "?" + if a.ID != "" { + params += "&id=" + a.ID + } + if a.ActorIP != "" { + params += "&actor.ip=" + a.ActorIP + } + if a.ActorEmail != "" { + params += "&actor.email=" + a.ActorEmail + } + if a.ZoneName != "" { + params += "&zone.name=" + a.ZoneName + } + if a.Direction != "" { + params += "&direction=" + a.Direction + } + if a.Since != "" { + params += "&since=" + a.Since + } + if a.Before != "" { + params += "&before=" + a.Before + } + if a.PerPage > 0 { + params += "&per_page=" + fmt.Sprintf("%d", a.PerPage) + } + if a.Page > 0 { + params += "&page=" + fmt.Sprintf("%d", a.Page) + } + return params +} + +// GetOrganizationAuditLogs will return the audit logs of a specific +// organization, based on the ID passed in. The audit logs can be +// filtered based on any argument in the AuditLogFilter +// +// API Reference: https://api.cloudflare.com/#audit-logs-list-organization-audit-logs +func (api *API) GetOrganizationAuditLogs(organizationID string, a AuditLogFilter) (AuditLogResponse, error) { + uri := "/organizations/" + organizationID + "/audit_logs" + fmt.Sprintf("%s", a) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AuditLogResponse{}, err + } + buf, err := base64.RawStdEncoding.DecodeString(string(res)) + if err != nil { + return AuditLogResponse{}, err + } + return unmarshalReturn(buf) +} + +// unmarshalReturn will unmarshal bytes and return an auditlogresponse +func unmarshalReturn(res []byte) (AuditLogResponse, error) { + var auditResponse AuditLogResponse + err := json.Unmarshal(res, &auditResponse) + if err != nil { + return auditResponse, err + } + return auditResponse, nil +} + +// GetUserAuditLogs will return your user's audit logs. The audit logs can be +// filtered based on any argument in the AuditLogFilter +// +// API Reference: https://api.cloudflare.com/#audit-logs-list-user-audit-logs +func (api *API) GetUserAuditLogs(a AuditLogFilter) (AuditLogResponse, error) { + uri := "/user/audit_logs" + fmt.Sprintf("%s", a) + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return AuditLogResponse{}, err + } + return unmarshalReturn(res) +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/cloudflare.go b/vendor/github.com/cloudflare/cloudflare-go/cloudflare.go new file mode 100644 index 000000000000..498b9f468ddd --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/cloudflare.go @@ -0,0 +1,435 @@ +// Package cloudflare implements the Cloudflare v4 API. +package cloudflare + +import ( + "bytes" + "context" + "encoding/json" + "io" + "io/ioutil" + "log" + "math" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "github.com/pkg/errors" + "golang.org/x/time/rate" +) + +const apiURL = "https://api.cloudflare.com/client/v4" + +const ( + // AuthKeyEmail specifies that we should authenticate with API key and email address + AuthKeyEmail = 1 << iota + // AuthUserService specifies that we should authenticate with a User-Service key + AuthUserService + // AuthToken specifies that we should authenticate with an API Token + AuthToken +) + +// API holds the configuration for the current API client. A client should not +// be modified concurrently. +type API struct { + APIKey string + APIEmail string + APIUserServiceKey string + APIToken string + BaseURL string + AccountID string + UserAgent string + headers http.Header + httpClient *http.Client + authType int + rateLimiter *rate.Limiter + retryPolicy RetryPolicy + logger Logger +} + +// newClient provides shared logic for New and NewWithUserServiceKey +func newClient(opts ...Option) (*API, error) { + silentLogger := log.New(ioutil.Discard, "", log.LstdFlags) + + api := &API{ + BaseURL: apiURL, + headers: make(http.Header), + rateLimiter: rate.NewLimiter(rate.Limit(4), 1), // 4rps equates to default api limit (1200 req/5 min) + retryPolicy: RetryPolicy{ + MaxRetries: 3, + MinRetryDelay: time.Duration(1) * time.Second, + MaxRetryDelay: time.Duration(30) * time.Second, + }, + logger: silentLogger, + } + + err := api.parseOptions(opts...) + if err != nil { + return nil, errors.Wrap(err, "options parsing failed") + } + + // Fall back to http.DefaultClient if the package user does not provide + // their own. + if api.httpClient == nil { + api.httpClient = http.DefaultClient + } + + return api, nil +} + +// New creates a new Cloudflare v4 API client. +func New(key, email string, opts ...Option) (*API, error) { + if key == "" || email == "" { + return nil, errors.New(errEmptyCredentials) + } + + api, err := newClient(opts...) + if err != nil { + return nil, err + } + + api.APIKey = key + api.APIEmail = email + api.authType = AuthKeyEmail + + return api, nil +} + +// NewWithAPIToken creates a new Cloudflare v4 API client using API Tokens +func NewWithAPIToken(token string, opts ...Option) (*API, error) { + if token == "" { + return nil, errors.New(errEmptyAPIToken) + } + + api, err := newClient(opts...) + if err != nil { + return nil, err + } + + api.APIToken = token + api.authType = AuthToken + + return api, nil +} + +// NewWithUserServiceKey creates a new Cloudflare v4 API client using service key authentication. +func NewWithUserServiceKey(key string, opts ...Option) (*API, error) { + if key == "" { + return nil, errors.New(errEmptyCredentials) + } + + api, err := newClient(opts...) + if err != nil { + return nil, err + } + + api.APIUserServiceKey = key + api.authType = AuthUserService + + return api, nil +} + +// SetAuthType sets the authentication method (AuthKeyEmail, AuthToken, or AuthUserService). +func (api *API) SetAuthType(authType int) { + api.authType = authType +} + +// ZoneIDByName retrieves a zone's ID from the name. +func (api *API) ZoneIDByName(zoneName string) (string, error) { + res, err := api.ListZonesContext(context.TODO(), WithZoneFilter(zoneName)) + if err != nil { + return "", errors.Wrap(err, "ListZonesContext command failed") + } + + if len(res.Result) > 1 && api.AccountID == "" { + return "", errors.New("ambiguous zone name used without an account ID") + } + + for _, zone := range res.Result { + if api.AccountID != "" { + if zone.Name == zoneName && api.AccountID == zone.Account.ID { + return zone.ID, nil + } + } else { + if zone.Name == zoneName { + return zone.ID, nil + } + } + } + + return "", errors.New("Zone could not be found") +} + +// makeRequest makes a HTTP request and returns the body as a byte slice, +// closing it before returning. params will be serialized to JSON. +func (api *API) makeRequest(method, uri string, params interface{}) ([]byte, error) { + return api.makeRequestWithAuthType(context.TODO(), method, uri, params, api.authType) +} + +func (api *API) makeRequestContext(ctx context.Context, method, uri string, params interface{}) ([]byte, error) { + return api.makeRequestWithAuthType(ctx, method, uri, params, api.authType) +} + +func (api *API) makeRequestWithHeaders(method, uri string, params interface{}, headers http.Header) ([]byte, error) { + return api.makeRequestWithAuthTypeAndHeaders(context.TODO(), method, uri, params, api.authType, headers) +} + +func (api *API) makeRequestWithAuthType(ctx context.Context, method, uri string, params interface{}, authType int) ([]byte, error) { + return api.makeRequestWithAuthTypeAndHeaders(ctx, method, uri, params, authType, nil) +} + +func (api *API) makeRequestWithAuthTypeAndHeaders(ctx context.Context, method, uri string, params interface{}, authType int, headers http.Header) ([]byte, error) { + // Replace nil with a JSON object if needed + var jsonBody []byte + var err error + + if params != nil { + if paramBytes, ok := params.([]byte); ok { + jsonBody = paramBytes + } else { + jsonBody, err = json.Marshal(params) + if err != nil { + return nil, errors.Wrap(err, "error marshalling params to JSON") + } + } + } else { + jsonBody = nil + } + + var resp *http.Response + var respErr error + var reqBody io.Reader + var respBody []byte + for i := 0; i <= api.retryPolicy.MaxRetries; i++ { + if jsonBody != nil { + reqBody = bytes.NewReader(jsonBody) + } + if i > 0 { + // expect the backoff introduced here on errored requests to dominate the effect of rate limiting + // don't need a random component here as the rate limiter should do something similar + // nb time duration could truncate an arbitrary float. Since our inputs are all ints, we should be ok + sleepDuration := time.Duration(math.Pow(2, float64(i-1)) * float64(api.retryPolicy.MinRetryDelay)) + + if sleepDuration > api.retryPolicy.MaxRetryDelay { + sleepDuration = api.retryPolicy.MaxRetryDelay + } + // useful to do some simple logging here, maybe introduce levels later + api.logger.Printf("Sleeping %s before retry attempt number %d for request %s %s", sleepDuration.String(), i, method, uri) + time.Sleep(sleepDuration) + + } + err = api.rateLimiter.Wait(context.TODO()) + if err != nil { + return nil, errors.Wrap(err, "Error caused by request rate limiting") + } + resp, respErr = api.request(ctx, method, uri, reqBody, authType, headers) + + // retry if the server is rate limiting us or if it failed + // assumes server operations are rolled back on failure + if respErr != nil || resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode >= 500 { + // if we got a valid http response, try to read body so we can reuse the connection + // see https://golang.org/pkg/net/http/#Client.Do + if respErr == nil { + respBody, err = ioutil.ReadAll(resp.Body) + resp.Body.Close() + + respErr = errors.Wrap(err, "could not read response body") + + api.logger.Printf("Request: %s %s got an error response %d: %s\n", method, uri, resp.StatusCode, + strings.Replace(strings.Replace(string(respBody), "\n", "", -1), "\t", "", -1)) + } else { + api.logger.Printf("Error performing request: %s %s : %s \n", method, uri, respErr.Error()) + } + continue + } else { + respBody, err = ioutil.ReadAll(resp.Body) + defer resp.Body.Close() + if err != nil { + return nil, errors.Wrap(err, "could not read response body") + } + break + } + } + if respErr != nil { + return nil, respErr + } + + switch { + case resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices: + case resp.StatusCode == http.StatusUnauthorized: + return nil, errors.Errorf("HTTP status %d: invalid credentials", resp.StatusCode) + case resp.StatusCode == http.StatusForbidden: + return nil, errors.Errorf("HTTP status %d: insufficient permissions", resp.StatusCode) + case resp.StatusCode == http.StatusServiceUnavailable, + resp.StatusCode == http.StatusBadGateway, + resp.StatusCode == http.StatusGatewayTimeout, + resp.StatusCode == 522, + resp.StatusCode == 523, + resp.StatusCode == 524: + return nil, errors.Errorf("HTTP status %d: service failure", resp.StatusCode) + // This isn't a great solution due to the way the `default` case is + // a catch all and that the `filters/validate-expr` returns a HTTP 400 + // yet the clients need to use the HTTP body as a JSON string. + case resp.StatusCode == 400 && strings.HasSuffix(resp.Request.URL.Path, "/filters/validate-expr"): + return nil, errors.Errorf("%s", respBody) + default: + var s string + if respBody != nil { + s = string(respBody) + } + return nil, errors.Errorf("HTTP status %d: content %q", resp.StatusCode, s) + } + + return respBody, nil +} + +// request makes a HTTP request to the given API endpoint, returning the raw +// *http.Response, or an error if one occurred. The caller is responsible for +// closing the response body. +func (api *API) request(ctx context.Context, method, uri string, reqBody io.Reader, authType int, headers http.Header) (*http.Response, error) { + req, err := http.NewRequest(method, api.BaseURL+uri, reqBody) + if err != nil { + return nil, errors.Wrap(err, "HTTP request creation failed") + } + req.WithContext(ctx) + + combinedHeaders := make(http.Header) + copyHeader(combinedHeaders, api.headers) + copyHeader(combinedHeaders, headers) + req.Header = combinedHeaders + + if authType&AuthKeyEmail != 0 { + req.Header.Set("X-Auth-Key", api.APIKey) + req.Header.Set("X-Auth-Email", api.APIEmail) + } + if authType&AuthUserService != 0 { + req.Header.Set("X-Auth-User-Service-Key", api.APIUserServiceKey) + } + if authType&AuthToken != 0 { + req.Header.Set("Authorization", "Bearer "+api.APIToken) + } + + if api.UserAgent != "" { + req.Header.Set("User-Agent", api.UserAgent) + } + + if req.Header.Get("Content-Type") == "" { + req.Header.Set("Content-Type", "application/json") + } + + resp, err := api.httpClient.Do(req) + if err != nil { + return nil, errors.Wrap(err, "HTTP request failed") + } + + return resp, nil +} + +// Returns the base URL to use for API endpoints that exist for accounts. +// If an account option was used when creating the API instance, returns +// the account URL. +// +// accountBase is the base URL for endpoints referring to the current user. +// It exists as a parameter because it is not consistent across APIs. +func (api *API) userBaseURL(accountBase string) string { + if api.AccountID != "" { + return "/accounts/" + api.AccountID + } + return accountBase +} + +// copyHeader copies all headers for `source` and sets them on `target`. +// based on https://godoc.org/github.com/golang/gddo/httputil/header#Copy +func copyHeader(target, source http.Header) { + for k, vs := range source { + target[k] = vs + } +} + +// ResponseInfo contains a code and message returned by the API as errors or +// informational messages inside the response. +type ResponseInfo struct { + Code int `json:"code"` + Message string `json:"message"` +} + +// Response is a template. There will also be a result struct. There will be a +// unique response type for each response, which will include this type. +type Response struct { + Success bool `json:"success"` + Errors []ResponseInfo `json:"errors"` + Messages []ResponseInfo `json:"messages"` +} + +// ResultInfo contains metadata about the Response. +type ResultInfo struct { + Page int `json:"page"` + PerPage int `json:"per_page"` + TotalPages int `json:"total_pages"` + Count int `json:"count"` + Total int `json:"total_count"` +} + +// RawResponse keeps the result as JSON form +type RawResponse struct { + Response + Result json.RawMessage `json:"result"` +} + +// Raw makes a HTTP request with user provided params and returns the +// result as untouched JSON. +func (api *API) Raw(method, endpoint string, data interface{}) (json.RawMessage, error) { + res, err := api.makeRequest(method, endpoint, data) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var r RawResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// PaginationOptions can be passed to a list request to configure paging +// These values will be defaulted if omitted, and PerPage has min/max limits set by resource +type PaginationOptions struct { + Page int `json:"page,omitempty"` + PerPage int `json:"per_page,omitempty"` +} + +// RetryPolicy specifies number of retries and min/max retry delays +// This config is used when the client exponentially backs off after errored requests +type RetryPolicy struct { + MaxRetries int + MinRetryDelay time.Duration + MaxRetryDelay time.Duration +} + +// Logger defines the interface this library needs to use logging +// This is a subset of the methods implemented in the log package +type Logger interface { + Printf(format string, v ...interface{}) +} + +// ReqOption is a functional option for configuring API requests +type ReqOption func(opt *reqOption) +type reqOption struct { + params url.Values +} + +// WithZoneFilter applies a filter based on zone name. +func WithZoneFilter(zone string) ReqOption { + return func(opt *reqOption) { + opt.params.Set("name", zone) + } +} + +// WithPagination configures the pagination for a response. +func WithPagination(opts PaginationOptions) ReqOption { + return func(opt *reqOption) { + opt.params.Set("page", strconv.Itoa(opts.Page)) + opt.params.Set("per_page", strconv.Itoa(opts.PerPage)) + } +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/custom_hostname.go b/vendor/github.com/cloudflare/cloudflare-go/custom_hostname.go new file mode 100644 index 000000000000..d982c5b507e2 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/custom_hostname.go @@ -0,0 +1,161 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// CustomHostnameSSLSettings represents the SSL settings for a custom hostname. +type CustomHostnameSSLSettings struct { + HTTP2 string `json:"http2,omitempty"` + TLS13 string `json:"tls_1_3,omitempty"` + MinTLSVersion string `json:"min_tls_version,omitempty"` + Ciphers []string `json:"ciphers,omitempty"` +} + +// CustomHostnameSSL represents the SSL section in a given custom hostname. +type CustomHostnameSSL struct { + Status string `json:"status,omitempty"` + Method string `json:"method,omitempty"` + Type string `json:"type,omitempty"` + CnameTarget string `json:"cname_target,omitempty"` + CnameName string `json:"cname,omitempty"` + Settings CustomHostnameSSLSettings `json:"settings,omitempty"` +} + +// CustomMetadata defines custom metadata for the hostname. This requires logic to be implemented by Cloudflare to act on the data provided. +type CustomMetadata map[string]interface{} + +// CustomHostname represents a custom hostname in a zone. +type CustomHostname struct { + ID string `json:"id,omitempty"` + Hostname string `json:"hostname,omitempty"` + CustomOriginServer string `json:"custom_origin_server,omitempty"` + SSL CustomHostnameSSL `json:"ssl,omitempty"` + CustomMetadata CustomMetadata `json:"custom_metadata,omitempty"` +} + +// CustomHostnameResponse represents a response from the Custom Hostnames endpoints. +type CustomHostnameResponse struct { + Result CustomHostname `json:"result"` + Response +} + +// CustomHostnameListResponse represents a response from the Custom Hostnames endpoints. +type CustomHostnameListResponse struct { + Result []CustomHostname `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// UpdateCustomHostnameSSL modifies SSL configuration for the given custom +// hostname in the given zone. +// +// API reference: https://api.cloudflare.com/#custom-hostname-for-a-zone-update-custom-hostname-configuration +func (api *API) UpdateCustomHostnameSSL(zoneID string, customHostnameID string, ssl CustomHostnameSSL) (CustomHostname, error) { + return CustomHostname{}, errors.New("Not implemented") +} + +// DeleteCustomHostname deletes a custom hostname (and any issued SSL +// certificates). +// +// API reference: https://api.cloudflare.com/#custom-hostname-for-a-zone-delete-a-custom-hostname-and-any-issued-ssl-certificates- +func (api *API) DeleteCustomHostname(zoneID string, customHostnameID string) error { + uri := "/zones/" + zoneID + "/custom_hostnames/" + customHostnameID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + var response *CustomHostnameResponse + err = json.Unmarshal(res, &response) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + + return nil +} + +// CreateCustomHostname creates a new custom hostname and requests that an SSL certificate be issued for it. +// +// API reference: https://api.cloudflare.com/#custom-hostname-for-a-zone-create-custom-hostname +func (api *API) CreateCustomHostname(zoneID string, ch CustomHostname) (*CustomHostnameResponse, error) { + uri := "/zones/" + zoneID + "/custom_hostnames" + res, err := api.makeRequest("POST", uri, ch) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var response *CustomHostnameResponse + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// CustomHostnames fetches custom hostnames for the given zone, +// by applying filter.Hostname if not empty and scoping the result to page'th 50 items. +// +// The returned ResultInfo can be used to implement pagination. +// +// API reference: https://api.cloudflare.com/#custom-hostname-for-a-zone-list-custom-hostnames +func (api *API) CustomHostnames(zoneID string, page int, filter CustomHostname) ([]CustomHostname, ResultInfo, error) { + v := url.Values{} + v.Set("per_page", "50") + v.Set("page", strconv.Itoa(page)) + if filter.Hostname != "" { + v.Set("hostname", filter.Hostname) + } + query := "?" + v.Encode() + + uri := "/zones/" + zoneID + "/custom_hostnames" + query + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []CustomHostname{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + var customHostnameListResponse CustomHostnameListResponse + err = json.Unmarshal(res, &customHostnameListResponse) + if err != nil { + return []CustomHostname{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + return customHostnameListResponse.Result, customHostnameListResponse.ResultInfo, nil +} + +// CustomHostname inspects the given custom hostname in the given zone. +// +// API reference: https://api.cloudflare.com/#custom-hostname-for-a-zone-custom-hostname-configuration-details +func (api *API) CustomHostname(zoneID string, customHostnameID string) (CustomHostname, error) { + uri := "/zones/" + zoneID + "/custom_hostnames/" + customHostnameID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return CustomHostname{}, errors.Wrap(err, errMakeRequestError) + } + + var response CustomHostnameResponse + err = json.Unmarshal(res, &response) + if err != nil { + return CustomHostname{}, errors.Wrap(err, errUnmarshalError) + } + + return response.Result, nil +} + +// CustomHostnameIDByName retrieves the ID for the given hostname in the given zone. +func (api *API) CustomHostnameIDByName(zoneID string, hostname string) (string, error) { + customHostnames, _, err := api.CustomHostnames(zoneID, 1, CustomHostname{Hostname: hostname}) + if err != nil { + return "", errors.Wrap(err, "CustomHostnames command failed") + } + for _, ch := range customHostnames { + if ch.Hostname == hostname { + return ch.ID, nil + } + } + return "", errors.New("CustomHostname could not be found") +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/custom_pages.go b/vendor/github.com/cloudflare/cloudflare-go/custom_pages.go new file mode 100644 index 000000000000..d96788fc8606 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/custom_pages.go @@ -0,0 +1,176 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/pkg/errors" +) + +// CustomPage represents a custom page configuration. +type CustomPage struct { + CreatedOn time.Time `json:"created_on"` + ModifiedOn time.Time `json:"modified_on"` + URL interface{} `json:"url"` + State string `json:"state"` + RequiredTokens []string `json:"required_tokens"` + PreviewTarget string `json:"preview_target"` + Description string `json:"description"` + ID string `json:"id"` +} + +// CustomPageResponse represents the response from the custom pages endpoint. +type CustomPageResponse struct { + Response + Result []CustomPage `json:"result"` +} + +// CustomPageDetailResponse represents the response from the custom page endpoint. +type CustomPageDetailResponse struct { + Response + Result CustomPage `json:"result"` +} + +// CustomPageOptions is used to determine whether or not the operation +// should take place on an account or zone level based on which is +// provided to the function. +// +// A non-empty value denotes desired use. +type CustomPageOptions struct { + AccountID string + ZoneID string +} + +// CustomPageParameters is used to update a particular custom page with +// the values provided. +type CustomPageParameters struct { + URL interface{} `json:"url"` + State string `json:"state"` +} + +// CustomPages lists custom pages for a zone or account. +// +// Zone API reference: https://api.cloudflare.com/#custom-pages-for-a-zone-list-available-custom-pages +// Account API reference: https://api.cloudflare.com/#custom-pages-account--list-custom-pages +func (api *API) CustomPages(options *CustomPageOptions) ([]CustomPage, error) { + var ( + pageType, identifier string + ) + + if options.AccountID == "" && options.ZoneID == "" { + return nil, errors.New("either account ID or zone ID must be provided") + } + + if options.AccountID != "" && options.ZoneID != "" { + return nil, errors.New("account ID and zone ID are mutually exclusive") + } + + // Should the account ID be defined, treat this as an account level operation. + if options.AccountID != "" { + pageType = "accounts" + identifier = options.AccountID + } else { + pageType = "zones" + identifier = options.ZoneID + } + + uri := fmt.Sprintf("/%s/%s/custom_pages", pageType, identifier) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var customPageResponse CustomPageResponse + err = json.Unmarshal(res, &customPageResponse) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return customPageResponse.Result, nil +} + +// CustomPage lists a single custom page based on the ID. +// +// Zone API reference: https://api.cloudflare.com/#custom-pages-for-a-zone-custom-page-details +// Account API reference: https://api.cloudflare.com/#custom-pages-account--custom-page-details +func (api *API) CustomPage(options *CustomPageOptions, customPageID string) (CustomPage, error) { + var ( + pageType, identifier string + ) + + if options.AccountID == "" && options.ZoneID == "" { + return CustomPage{}, errors.New("either account ID or zone ID must be provided") + } + + if options.AccountID != "" && options.ZoneID != "" { + return CustomPage{}, errors.New("account ID and zone ID are mutually exclusive") + } + + // Should the account ID be defined, treat this as an account level operation. + if options.AccountID != "" { + pageType = "accounts" + identifier = options.AccountID + } else { + pageType = "zones" + identifier = options.ZoneID + } + + uri := fmt.Sprintf("/%s/%s/custom_pages/%s", pageType, identifier, customPageID) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return CustomPage{}, errors.Wrap(err, errMakeRequestError) + } + + var customPageResponse CustomPageDetailResponse + err = json.Unmarshal(res, &customPageResponse) + if err != nil { + return CustomPage{}, errors.Wrap(err, errUnmarshalError) + } + + return customPageResponse.Result, nil +} + +// UpdateCustomPage updates a single custom page setting. +// +// Zone API reference: https://api.cloudflare.com/#custom-pages-for-a-zone-update-custom-page-url +// Account API reference: https://api.cloudflare.com/#custom-pages-account--update-custom-page +func (api *API) UpdateCustomPage(options *CustomPageOptions, customPageID string, pageParameters CustomPageParameters) (CustomPage, error) { + var ( + pageType, identifier string + ) + + if options.AccountID == "" && options.ZoneID == "" { + return CustomPage{}, errors.New("either account ID or zone ID must be provided") + } + + if options.AccountID != "" && options.ZoneID != "" { + return CustomPage{}, errors.New("account ID and zone ID are mutually exclusive") + } + + // Should the account ID be defined, treat this as an account level operation. + if options.AccountID != "" { + pageType = "accounts" + identifier = options.AccountID + } else { + pageType = "zones" + identifier = options.ZoneID + } + + uri := fmt.Sprintf("/%s/%s/custom_pages/%s", pageType, identifier, customPageID) + + res, err := api.makeRequest("PUT", uri, pageParameters) + if err != nil { + return CustomPage{}, errors.Wrap(err, errMakeRequestError) + } + + var customPageResponse CustomPageDetailResponse + err = json.Unmarshal(res, &customPageResponse) + if err != nil { + return CustomPage{}, errors.Wrap(err, errUnmarshalError) + } + + return customPageResponse.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/dns.go b/vendor/github.com/cloudflare/cloudflare-go/dns.go new file mode 100644 index 000000000000..6bcac2480e92 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/dns.go @@ -0,0 +1,174 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + "time" + + "github.com/pkg/errors" +) + +// DNSRecord represents a DNS record in a zone. +type DNSRecord struct { + ID string `json:"id,omitempty"` + Type string `json:"type,omitempty"` + Name string `json:"name,omitempty"` + Content string `json:"content,omitempty"` + Proxiable bool `json:"proxiable,omitempty"` + Proxied bool `json:"proxied"` + TTL int `json:"ttl,omitempty"` + Locked bool `json:"locked,omitempty"` + ZoneID string `json:"zone_id,omitempty"` + ZoneName string `json:"zone_name,omitempty"` + CreatedOn time.Time `json:"created_on,omitempty"` + ModifiedOn time.Time `json:"modified_on,omitempty"` + Data interface{} `json:"data,omitempty"` // data returned by: SRV, LOC + Meta interface{} `json:"meta,omitempty"` + Priority int `json:"priority"` +} + +// DNSRecordResponse represents the response from the DNS endpoint. +type DNSRecordResponse struct { + Result DNSRecord `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// DNSListResponse represents the response from the list DNS records endpoint. +type DNSListResponse struct { + Result []DNSRecord `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// CreateDNSRecord creates a DNS record for the zone identifier. +// +// API reference: https://api.cloudflare.com/#dns-records-for-a-zone-create-dns-record +func (api *API) CreateDNSRecord(zoneID string, rr DNSRecord) (*DNSRecordResponse, error) { + uri := "/zones/" + zoneID + "/dns_records" + res, err := api.makeRequest("POST", uri, rr) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var recordResp *DNSRecordResponse + err = json.Unmarshal(res, &recordResp) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return recordResp, nil +} + +// DNSRecords returns a slice of DNS records for the given zone identifier. +// +// This takes a DNSRecord to allow filtering of the results returned. +// +// API reference: https://api.cloudflare.com/#dns-records-for-a-zone-list-dns-records +func (api *API) DNSRecords(zoneID string, rr DNSRecord) ([]DNSRecord, error) { + // Construct a query string + v := url.Values{} + // Request as many records as possible per page - API max is 50 + v.Set("per_page", "50") + if rr.Name != "" { + v.Set("name", rr.Name) + } + if rr.Type != "" { + v.Set("type", rr.Type) + } + if rr.Content != "" { + v.Set("content", rr.Content) + } + + var query string + var records []DNSRecord + page := 1 + + // Loop over makeRequest until what we've fetched all records + for { + v.Set("page", strconv.Itoa(page)) + query = "?" + v.Encode() + uri := "/zones/" + zoneID + "/dns_records" + query + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []DNSRecord{}, errors.Wrap(err, errMakeRequestError) + } + var r DNSListResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []DNSRecord{}, errors.Wrap(err, errUnmarshalError) + } + records = append(records, r.Result...) + if r.ResultInfo.Page >= r.ResultInfo.TotalPages { + break + } + // Loop around and fetch the next page + page++ + } + return records, nil +} + +// DNSRecord returns a single DNS record for the given zone & record +// identifiers. +// +// API reference: https://api.cloudflare.com/#dns-records-for-a-zone-dns-record-details +func (api *API) DNSRecord(zoneID, recordID string) (DNSRecord, error) { + uri := "/zones/" + zoneID + "/dns_records/" + recordID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return DNSRecord{}, errors.Wrap(err, errMakeRequestError) + } + var r DNSRecordResponse + err = json.Unmarshal(res, &r) + if err != nil { + return DNSRecord{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// UpdateDNSRecord updates a single DNS record for the given zone & record +// identifiers. +// +// API reference: https://api.cloudflare.com/#dns-records-for-a-zone-update-dns-record +func (api *API) UpdateDNSRecord(zoneID, recordID string, rr DNSRecord) error { + rec, err := api.DNSRecord(zoneID, recordID) + if err != nil { + return err + } + // Populate the record name from the existing one if the update didn't + // specify it. + if rr.Name == "" { + rr.Name = rec.Name + } + rr.Type = rec.Type + uri := "/zones/" + zoneID + "/dns_records/" + recordID + res, err := api.makeRequest("PATCH", uri, rr) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r DNSRecordResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} + +// DeleteDNSRecord deletes a single DNS record for the given zone & record +// identifiers. +// +// API reference: https://api.cloudflare.com/#dns-records-for-a-zone-delete-dns-record +func (api *API) DeleteDNSRecord(zoneID, recordID string) error { + uri := "/zones/" + zoneID + "/dns_records/" + recordID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r DNSRecordResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/duration.go b/vendor/github.com/cloudflare/cloudflare-go/duration.go new file mode 100644 index 000000000000..ba2418acda61 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/duration.go @@ -0,0 +1,40 @@ +package cloudflare + +import ( + "encoding/json" + "time" +) + +// Duration implements json.Marshaler and json.Unmarshaler for time.Duration +// using the fmt.Stringer interface of time.Duration and time.ParseDuration. +type Duration struct { + time.Duration +} + +// MarshalJSON encodes a Duration as a JSON string formatted using String. +func (d Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(d.Duration.String()) +} + +// UnmarshalJSON decodes a Duration from a JSON string parsed using time.ParseDuration. +func (d *Duration) UnmarshalJSON(buf []byte) error { + var str string + + err := json.Unmarshal(buf, &str) + if err != nil { + return err + } + + dur, err := time.ParseDuration(str) + if err != nil { + return err + } + + d.Duration = dur + return nil +} + +var ( + _ = json.Marshaler((*Duration)(nil)) + _ = json.Unmarshaler((*Duration)(nil)) +) diff --git a/vendor/github.com/cloudflare/cloudflare-go/errors.go b/vendor/github.com/cloudflare/cloudflare-go/errors.go new file mode 100644 index 000000000000..21c38b168011 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/errors.go @@ -0,0 +1,50 @@ +package cloudflare + +// Error messages +const ( + errEmptyCredentials = "invalid credentials: key & email must not be empty" + errEmptyAPIToken = "invalid credentials: API Token must not be empty" + errMakeRequestError = "error from makeRequest" + errUnmarshalError = "error unmarshalling the JSON response" + errRequestNotSuccessful = "error reported by API" + errMissingAccountID = "account ID is empty and must be provided" +) + +var _ Error = &UserError{} + +// Error represents an error returned from this library. +type Error interface { + error + // Raised when user credentials or configuration is invalid. + User() bool + // Raised when a parsing error (e.g. JSON) occurs. + Parse() bool + // Raised when a network error occurs. + Network() bool + // Contains the most recent error. +} + +// UserError represents a user-generated error. +type UserError struct { + Err error +} + +// User is a user-caused error. +func (e *UserError) User() bool { + return true +} + +// Network error. +func (e *UserError) Network() bool { + return false +} + +// Parse error. +func (e *UserError) Parse() bool { + return true +} + +// Error wraps the underlying error. +func (e *UserError) Error() string { + return e.Err.Error() +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/filter.go b/vendor/github.com/cloudflare/cloudflare-go/filter.go new file mode 100644 index 000000000000..cf3ef1c20d16 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/filter.go @@ -0,0 +1,241 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + "strings" + + "github.com/pkg/errors" +) + +// Filter holds the structure of the filter type. +type Filter struct { + ID string `json:"id,omitempty"` + Expression string `json:"expression"` + Paused bool `json:"paused"` + Description string `json:"description"` + + // Property is mentioned in documentation however isn't populated in + // any of the API requests. For now, let's just omit it unless it's + // provided. + Ref string `json:"ref,omitempty"` +} + +// FiltersDetailResponse is the API response that is returned +// for requesting all filters on a zone. +type FiltersDetailResponse struct { + Result []Filter `json:"result"` + ResultInfo `json:"result_info"` + Response +} + +// FilterDetailResponse is the API response that is returned +// for requesting a single filter on a zone. +type FilterDetailResponse struct { + Result Filter `json:"result"` + ResultInfo `json:"result_info"` + Response +} + +// FilterValidateExpression represents the JSON payload for checking +// an expression. +type FilterValidateExpression struct { + Expression string `json:"expression"` +} + +// FilterValidateExpressionResponse represents the API response for +// checking the expression. It conforms to the JSON API approach however +// we don't need all of the fields exposed. +type FilterValidateExpressionResponse struct { + Success bool `json:"success"` + Errors []FilterValidationExpressionMessage `json:"errors"` +} + +// FilterValidationExpressionMessage represents the API error message. +type FilterValidationExpressionMessage struct { + Message string `json:"message"` +} + +// Filter returns a single filter in a zone based on the filter ID. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/get/#get-by-filter-id +func (api *API) Filter(zoneID, filterID string) (Filter, error) { + uri := fmt.Sprintf("/zones/%s/filters/%s", zoneID, filterID) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return Filter{}, errors.Wrap(err, errMakeRequestError) + } + + var filterResponse FilterDetailResponse + err = json.Unmarshal(res, &filterResponse) + if err != nil { + return Filter{}, errors.Wrap(err, errUnmarshalError) + } + + return filterResponse.Result, nil +} + +// Filters returns all filters for a zone. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/get/#get-all-filters +func (api *API) Filters(zoneID string, pageOpts PaginationOptions) ([]Filter, error) { + uri := "/zones/" + zoneID + "/filters" + v := url.Values{} + + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []Filter{}, errors.Wrap(err, errMakeRequestError) + } + + var filtersResponse FiltersDetailResponse + err = json.Unmarshal(res, &filtersResponse) + if err != nil { + return []Filter{}, errors.Wrap(err, errUnmarshalError) + } + + return filtersResponse.Result, nil +} + +// CreateFilters creates new filters. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/post/ +func (api *API) CreateFilters(zoneID string, filters []Filter) ([]Filter, error) { + uri := "/zones/" + zoneID + "/filters" + + res, err := api.makeRequest("POST", uri, filters) + if err != nil { + return []Filter{}, errors.Wrap(err, errMakeRequestError) + } + + var filtersResponse FiltersDetailResponse + err = json.Unmarshal(res, &filtersResponse) + if err != nil { + return []Filter{}, errors.Wrap(err, errUnmarshalError) + } + + return filtersResponse.Result, nil +} + +// UpdateFilter updates a single filter. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/put/#update-a-single-filter +func (api *API) UpdateFilter(zoneID string, filter Filter) (Filter, error) { + if filter.ID == "" { + return Filter{}, errors.Errorf("filter ID cannot be empty") + } + + uri := fmt.Sprintf("/zones/%s/filters/%s", zoneID, filter.ID) + + res, err := api.makeRequest("PUT", uri, filter) + if err != nil { + return Filter{}, errors.Wrap(err, errMakeRequestError) + } + + var filterResponse FilterDetailResponse + err = json.Unmarshal(res, &filterResponse) + if err != nil { + return Filter{}, errors.Wrap(err, errUnmarshalError) + } + + return filterResponse.Result, nil +} + +// UpdateFilters updates many filters at once. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/put/#update-multiple-filters +func (api *API) UpdateFilters(zoneID string, filters []Filter) ([]Filter, error) { + for _, filter := range filters { + if filter.ID == "" { + return []Filter{}, errors.Errorf("filter ID cannot be empty") + } + } + + uri := "/zones/" + zoneID + "/filters" + + res, err := api.makeRequest("PUT", uri, filters) + if err != nil { + return []Filter{}, errors.Wrap(err, errMakeRequestError) + } + + var filtersResponse FiltersDetailResponse + err = json.Unmarshal(res, &filtersResponse) + if err != nil { + return []Filter{}, errors.Wrap(err, errUnmarshalError) + } + + return filtersResponse.Result, nil +} + +// DeleteFilter deletes a single filter. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/delete/#delete-a-single-filter +func (api *API) DeleteFilter(zoneID, filterID string) error { + if filterID == "" { + return errors.Errorf("filter ID cannot be empty") + } + + uri := fmt.Sprintf("/zones/%s/filters/%s", zoneID, filterID) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} + +// DeleteFilters deletes multiple filters. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/delete/#delete-multiple-filters +func (api *API) DeleteFilters(zoneID string, filterIDs []string) error { + ids := strings.Join(filterIDs, ",") + uri := fmt.Sprintf("/zones/%s/filters?id=%s", zoneID, ids) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} + +// ValidateFilterExpression checks correctness of a filter expression. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-filters/validation/ +func (api *API) ValidateFilterExpression(expression string) error { + uri := fmt.Sprintf("/filters/validate-expr") + expressionPayload := FilterValidateExpression{Expression: expression} + + _, err := api.makeRequest("POST", uri, expressionPayload) + if err != nil { + var filterValidationResponse FilterValidateExpressionResponse + + jsonErr := json.Unmarshal([]byte(err.Error()), &filterValidationResponse) + if jsonErr != nil { + return errors.Wrap(jsonErr, errUnmarshalError) + } + + if filterValidationResponse.Success != true { + // Unsure why but the API returns `errors` as an array but it only + // ever shows the issue with one problem at a time ¯\_(ツ)_/¯ + return errors.Errorf(filterValidationResponse.Errors[0].Message) + } + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/firewall.go b/vendor/github.com/cloudflare/cloudflare-go/firewall.go new file mode 100644 index 000000000000..4b61a7ca5167 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/firewall.go @@ -0,0 +1,280 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + "time" + + "github.com/pkg/errors" +) + +// AccessRule represents a firewall access rule. +type AccessRule struct { + ID string `json:"id,omitempty"` + Notes string `json:"notes,omitempty"` + AllowedModes []string `json:"allowed_modes,omitempty"` + Mode string `json:"mode,omitempty"` + Configuration AccessRuleConfiguration `json:"configuration,omitempty"` + Scope AccessRuleScope `json:"scope,omitempty"` + CreatedOn time.Time `json:"created_on,omitempty"` + ModifiedOn time.Time `json:"modified_on,omitempty"` +} + +// AccessRuleConfiguration represents the configuration of a firewall +// access rule. +type AccessRuleConfiguration struct { + Target string `json:"target,omitempty"` + Value string `json:"value,omitempty"` +} + +// AccessRuleScope represents the scope of a firewall access rule. +type AccessRuleScope struct { + ID string `json:"id,omitempty"` + Email string `json:"email,omitempty"` + Name string `json:"name,omitempty"` + Type string `json:"type,omitempty"` +} + +// AccessRuleResponse represents the response from the firewall access +// rule endpoint. +type AccessRuleResponse struct { + Result AccessRule `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// AccessRuleListResponse represents the response from the list access rules +// endpoint. +type AccessRuleListResponse struct { + Result []AccessRule `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// ListUserAccessRules returns a slice of access rules for the logged-in user. +// +// This takes an AccessRule to allow filtering of the results returned. +// +// API reference: https://api.cloudflare.com/#user-level-firewall-access-rule-list-access-rules +func (api *API) ListUserAccessRules(accessRule AccessRule, page int) (*AccessRuleListResponse, error) { + return api.listAccessRules("/user", accessRule, page) +} + +// CreateUserAccessRule creates a firewall access rule for the logged-in user. +// +// API reference: https://api.cloudflare.com/#user-level-firewall-access-rule-create-access-rule +func (api *API) CreateUserAccessRule(accessRule AccessRule) (*AccessRuleResponse, error) { + return api.createAccessRule("/user", accessRule) +} + +// UserAccessRule returns the details of a user's account access rule. +// +// API reference: https://api.cloudflare.com/#user-level-firewall-access-rule-list-access-rules +func (api *API) UserAccessRule(accessRuleID string) (*AccessRuleResponse, error) { + return api.retrieveAccessRule("/user", accessRuleID) +} + +// UpdateUserAccessRule updates a single access rule for the logged-in user & +// given access rule identifier. +// +// API reference: https://api.cloudflare.com/#user-level-firewall-access-rule-update-access-rule +func (api *API) UpdateUserAccessRule(accessRuleID string, accessRule AccessRule) (*AccessRuleResponse, error) { + return api.updateAccessRule("/user", accessRuleID, accessRule) +} + +// DeleteUserAccessRule deletes a single access rule for the logged-in user and +// access rule identifiers. +// +// API reference: https://api.cloudflare.com/#user-level-firewall-access-rule-update-access-rule +func (api *API) DeleteUserAccessRule(accessRuleID string) (*AccessRuleResponse, error) { + return api.deleteAccessRule("/user", accessRuleID) +} + +// ListZoneAccessRules returns a slice of access rules for the given zone +// identifier. +// +// This takes an AccessRule to allow filtering of the results returned. +// +// API reference: https://api.cloudflare.com/#firewall-access-rule-for-a-zone-list-access-rules +func (api *API) ListZoneAccessRules(zoneID string, accessRule AccessRule, page int) (*AccessRuleListResponse, error) { + return api.listAccessRules("/zones/"+zoneID, accessRule, page) +} + +// CreateZoneAccessRule creates a firewall access rule for the given zone +// identifier. +// +// API reference: https://api.cloudflare.com/#firewall-access-rule-for-a-zone-create-access-rule +func (api *API) CreateZoneAccessRule(zoneID string, accessRule AccessRule) (*AccessRuleResponse, error) { + return api.createAccessRule("/zones/"+zoneID, accessRule) +} + +// ZoneAccessRule returns the details of a zone's access rule. +// +// API reference: https://api.cloudflare.com/#firewall-access-rule-for-a-zone-list-access-rules +func (api *API) ZoneAccessRule(zoneID string, accessRuleID string) (*AccessRuleResponse, error) { + return api.retrieveAccessRule("/zones/"+zoneID, accessRuleID) +} + +// UpdateZoneAccessRule updates a single access rule for the given zone & +// access rule identifiers. +// +// API reference: https://api.cloudflare.com/#firewall-access-rule-for-a-zone-update-access-rule +func (api *API) UpdateZoneAccessRule(zoneID, accessRuleID string, accessRule AccessRule) (*AccessRuleResponse, error) { + return api.updateAccessRule("/zones/"+zoneID, accessRuleID, accessRule) +} + +// DeleteZoneAccessRule deletes a single access rule for the given zone and +// access rule identifiers. +// +// API reference: https://api.cloudflare.com/#firewall-access-rule-for-a-zone-delete-access-rule +func (api *API) DeleteZoneAccessRule(zoneID, accessRuleID string) (*AccessRuleResponse, error) { + return api.deleteAccessRule("/zones/"+zoneID, accessRuleID) +} + +// ListAccountAccessRules returns a slice of access rules for the given +// account identifier. +// +// This takes an AccessRule to allow filtering of the results returned. +// +// API reference: https://api.cloudflare.com/#account-level-firewall-access-rule-list-access-rules +func (api *API) ListAccountAccessRules(accountID string, accessRule AccessRule, page int) (*AccessRuleListResponse, error) { + return api.listAccessRules("/accounts/"+accountID, accessRule, page) +} + +// CreateAccountAccessRule creates a firewall access rule for the given +// account identifier. +// +// API reference: https://api.cloudflare.com/#account-level-firewall-access-rule-create-access-rule +func (api *API) CreateAccountAccessRule(accountID string, accessRule AccessRule) (*AccessRuleResponse, error) { + return api.createAccessRule("/accounts/"+accountID, accessRule) +} + +// AccountAccessRule returns the details of an account's access rule. +// +// API reference: https://api.cloudflare.com/#account-level-firewall-access-rule-access-rule-details +func (api *API) AccountAccessRule(accountID string, accessRuleID string) (*AccessRuleResponse, error) { + return api.retrieveAccessRule("/accounts/"+accountID, accessRuleID) +} + +// UpdateAccountAccessRule updates a single access rule for the given +// account & access rule identifiers. +// +// API reference: https://api.cloudflare.com/#account-level-firewall-access-rule-update-access-rule +func (api *API) UpdateAccountAccessRule(accountID, accessRuleID string, accessRule AccessRule) (*AccessRuleResponse, error) { + return api.updateAccessRule("/accounts/"+accountID, accessRuleID, accessRule) +} + +// DeleteAccountAccessRule deletes a single access rule for the given +// account and access rule identifiers. +// +// API reference: https://api.cloudflare.com/#account-level-firewall-access-rule-delete-access-rule +func (api *API) DeleteAccountAccessRule(accountID, accessRuleID string) (*AccessRuleResponse, error) { + return api.deleteAccessRule("/accounts/"+accountID, accessRuleID) +} + +func (api *API) listAccessRules(prefix string, accessRule AccessRule, page int) (*AccessRuleListResponse, error) { + // Construct a query string + v := url.Values{} + if page <= 0 { + page = 1 + } + v.Set("page", strconv.Itoa(page)) + // Request as many rules as possible per page - API max is 100 + v.Set("per_page", "100") + if accessRule.Notes != "" { + v.Set("notes", accessRule.Notes) + } + if accessRule.Mode != "" { + v.Set("mode", accessRule.Mode) + } + if accessRule.Scope.Type != "" { + v.Set("scope_type", accessRule.Scope.Type) + } + if accessRule.Configuration.Value != "" { + v.Set("configuration_value", accessRule.Configuration.Value) + } + if accessRule.Configuration.Target != "" { + v.Set("configuration_target", accessRule.Configuration.Target) + } + v.Set("page", strconv.Itoa(page)) + query := "?" + v.Encode() + + uri := prefix + "/firewall/access_rules/rules" + query + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &AccessRuleListResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return response, nil +} + +func (api *API) createAccessRule(prefix string, accessRule AccessRule) (*AccessRuleResponse, error) { + uri := prefix + "/firewall/access_rules/rules" + res, err := api.makeRequest("POST", uri, accessRule) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &AccessRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +func (api *API) retrieveAccessRule(prefix, accessRuleID string) (*AccessRuleResponse, error) { + uri := prefix + "/firewall/access_rules/rules/" + accessRuleID + + res, err := api.makeRequest("GET", uri, nil) + + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &AccessRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +func (api *API) updateAccessRule(prefix, accessRuleID string, accessRule AccessRule) (*AccessRuleResponse, error) { + uri := prefix + "/firewall/access_rules/rules/" + accessRuleID + res, err := api.makeRequest("PATCH", uri, accessRule) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &AccessRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return response, nil +} + +func (api *API) deleteAccessRule(prefix, accessRuleID string) (*AccessRuleResponse, error) { + uri := prefix + "/firewall/access_rules/rules/" + accessRuleID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &AccessRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/firewall_rules.go b/vendor/github.com/cloudflare/cloudflare-go/firewall_rules.go new file mode 100644 index 000000000000..7a6ce5c70a96 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/firewall_rules.go @@ -0,0 +1,196 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "net/url" + "strconv" + "strings" + "time" + + "github.com/pkg/errors" +) + +// FirewallRule is the struct of the firewall rule. +type FirewallRule struct { + ID string `json:"id,omitempty"` + Paused bool `json:"paused"` + Description string `json:"description"` + Action string `json:"action"` + Priority interface{} `json:"priority"` + Filter Filter `json:"filter"` + CreatedOn time.Time `json:"created_on,omitempty"` + ModifiedOn time.Time `json:"modified_on,omitempty"` +} + +// FirewallRulesDetailResponse is the API response for the firewall +// rules. +type FirewallRulesDetailResponse struct { + Result []FirewallRule `json:"result"` + ResultInfo `json:"result_info"` + Response +} + +// FirewallRuleResponse is the API response that is returned +// for requesting a single firewall rule on a zone. +type FirewallRuleResponse struct { + Result FirewallRule `json:"result"` + ResultInfo `json:"result_info"` + Response +} + +// FirewallRules returns all firewall rules. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/get/#get-all-rules +func (api *API) FirewallRules(zoneID string, pageOpts PaginationOptions) ([]FirewallRule, error) { + uri := fmt.Sprintf("/zones/%s/firewall/rules", zoneID) + v := url.Values{} + + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errMakeRequestError) + } + + var firewallDetailResponse FirewallRulesDetailResponse + err = json.Unmarshal(res, &firewallDetailResponse) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errUnmarshalError) + } + + return firewallDetailResponse.Result, nil +} + +// FirewallRule returns a single firewall rule based on the ID. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/get/#get-by-rule-id +func (api *API) FirewallRule(zoneID, firewallRuleID string) (FirewallRule, error) { + uri := fmt.Sprintf("/zones/%s/firewall/rules/%s", zoneID, firewallRuleID) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return FirewallRule{}, errors.Wrap(err, errMakeRequestError) + } + + var firewallRuleResponse FirewallRuleResponse + err = json.Unmarshal(res, &firewallRuleResponse) + if err != nil { + return FirewallRule{}, errors.Wrap(err, errUnmarshalError) + } + + return firewallRuleResponse.Result, nil +} + +// CreateFirewallRules creates new firewall rules. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/post/ +func (api *API) CreateFirewallRules(zoneID string, firewallRules []FirewallRule) ([]FirewallRule, error) { + uri := fmt.Sprintf("/zones/%s/firewall/rules", zoneID) + + res, err := api.makeRequest("POST", uri, firewallRules) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errMakeRequestError) + } + + var firewallRulesDetailResponse FirewallRulesDetailResponse + err = json.Unmarshal(res, &firewallRulesDetailResponse) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errUnmarshalError) + } + + return firewallRulesDetailResponse.Result, nil +} + +// UpdateFirewallRule updates a single firewall rule. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/put/#update-a-single-rule +func (api *API) UpdateFirewallRule(zoneID string, firewallRule FirewallRule) (FirewallRule, error) { + if firewallRule.ID == "" { + return FirewallRule{}, errors.Errorf("firewall rule ID cannot be empty") + } + + uri := fmt.Sprintf("/zones/%s/firewall/rules/%s", zoneID, firewallRule.ID) + + res, err := api.makeRequest("PUT", uri, firewallRule) + if err != nil { + return FirewallRule{}, errors.Wrap(err, errMakeRequestError) + } + + var firewallRuleResponse FirewallRuleResponse + err = json.Unmarshal(res, &firewallRuleResponse) + if err != nil { + return FirewallRule{}, errors.Wrap(err, errUnmarshalError) + } + + return firewallRuleResponse.Result, nil +} + +// UpdateFirewallRules updates a single firewall rule. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/put/#update-multiple-rules +func (api *API) UpdateFirewallRules(zoneID string, firewallRules []FirewallRule) ([]FirewallRule, error) { + for _, firewallRule := range firewallRules { + if firewallRule.ID == "" { + return []FirewallRule{}, errors.Errorf("firewall ID cannot be empty") + } + } + + uri := fmt.Sprintf("/zones/%s/firewall/rules", zoneID) + + res, err := api.makeRequest("PUT", uri, firewallRules) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errMakeRequestError) + } + + var firewallRulesDetailResponse FirewallRulesDetailResponse + err = json.Unmarshal(res, &firewallRulesDetailResponse) + if err != nil { + return []FirewallRule{}, errors.Wrap(err, errUnmarshalError) + } + + return firewallRulesDetailResponse.Result, nil +} + +// DeleteFirewallRule updates a single firewall rule. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/delete/#delete-a-single-rule +func (api *API) DeleteFirewallRule(zoneID, firewallRuleID string) error { + if firewallRuleID == "" { + return errors.Errorf("firewall rule ID cannot be empty") + } + + uri := fmt.Sprintf("/zones/%s/firewall/rules/%s", zoneID, firewallRuleID) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} + +// DeleteFirewallRules updates a single firewall rule. +// +// API reference: https://developers.cloudflare.com/firewall/api/cf-firewall-rules/delete/#delete-multiple-rules +func (api *API) DeleteFirewallRules(zoneID string, firewallRuleIDs []string) error { + ids := strings.Join(firewallRuleIDs, ",") + uri := fmt.Sprintf("/zones/%s/firewall/rules?id=%s", zoneID, ids) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/go.mod b/vendor/github.com/cloudflare/cloudflare-go/go.mod new file mode 100644 index 000000000000..77e9223387b7 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/go.mod @@ -0,0 +1,13 @@ +module github.com/cloudflare/cloudflare-go + +go 1.11 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/mattn/go-runewidth v0.0.4 // indirect + github.com/olekukonko/tablewriter v0.0.1 + github.com/pkg/errors v0.8.1 + github.com/stretchr/testify v1.4.0 + github.com/urfave/cli v1.22.1 + golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 +) diff --git a/vendor/github.com/cloudflare/cloudflare-go/go.sum b/vendor/github.com/cloudflare/cloudflare-go/go.sum new file mode 100644 index 000000000000..65391c2b15b2 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/go.sum @@ -0,0 +1,26 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/urfave/cli v1.21.0 h1:wYSSj06510qPIzGSua9ZqsncMmWE3Zr55KBERygyrxE= +github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/cloudflare/cloudflare-go/ips.go b/vendor/github.com/cloudflare/cloudflare-go/ips.go new file mode 100644 index 000000000000..72b5fcfbc501 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/ips.go @@ -0,0 +1,44 @@ +package cloudflare + +import ( + "encoding/json" + "io/ioutil" + "net/http" + + "github.com/pkg/errors" +) + +// IPRanges contains lists of IPv4 and IPv6 CIDRs. +type IPRanges struct { + IPv4CIDRs []string `json:"ipv4_cidrs"` + IPv6CIDRs []string `json:"ipv6_cidrs"` +} + +// IPsResponse is the API response containing a list of IPs. +type IPsResponse struct { + Response + Result IPRanges `json:"result"` +} + +// IPs gets a list of Cloudflare's IP ranges. +// +// This does not require logging in to the API. +// +// API reference: https://api.cloudflare.com/#cloudflare-ips +func IPs() (IPRanges, error) { + resp, err := http.Get(apiURL + "/ips") + if err != nil { + return IPRanges{}, errors.Wrap(err, "HTTP request failed") + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return IPRanges{}, errors.Wrap(err, "Response body could not be read") + } + var r IPsResponse + err = json.Unmarshal(body, &r) + if err != nil { + return IPRanges{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/keyless.go b/vendor/github.com/cloudflare/cloudflare-go/keyless.go new file mode 100644 index 000000000000..c5cc83914154 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/keyless.go @@ -0,0 +1,52 @@ +package cloudflare + +import "time" + +// KeylessSSL represents Keyless SSL configuration. +type KeylessSSL struct { + ID string `json:"id"` + Name string `json:"name"` + Host string `json:"host"` + Port int `json:"port"` + Status string `json:"success"` + Enabled bool `json:"enabled"` + Permissions []string `json:"permissions"` + CreatedOn time.Time `json:"created_on"` + ModifiedOn time.Time `json:"modifed_on"` +} + +// KeylessSSLResponse represents the response from the Keyless SSL endpoint. +type KeylessSSLResponse struct { + Response + Result []KeylessSSL `json:"result"` +} + +// CreateKeyless creates a new Keyless SSL configuration for the zone. +// +// API reference: https://api.cloudflare.com/#keyless-ssl-for-a-zone-create-a-keyless-ssl-configuration +func (api *API) CreateKeyless() { +} + +// ListKeyless lists Keyless SSL configurations for a zone. +// +// API reference: https://api.cloudflare.com/#keyless-ssl-for-a-zone-list-keyless-ssls +func (api *API) ListKeyless() { +} + +// Keyless provides the configuration for a given Keyless SSL identifier. +// +// API reference: https://api.cloudflare.com/#keyless-ssl-for-a-zone-keyless-ssl-details +func (api *API) Keyless() { +} + +// UpdateKeyless updates an existing Keyless SSL configuration. +// +// API reference: https://api.cloudflare.com/#keyless-ssl-for-a-zone-update-keyless-configuration +func (api *API) UpdateKeyless() { +} + +// DeleteKeyless deletes an existing Keyless SSL configuration. +// +// API reference: https://api.cloudflare.com/#keyless-ssl-for-a-zone-delete-keyless-configuration +func (api *API) DeleteKeyless() { +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/load_balancing.go b/vendor/github.com/cloudflare/cloudflare-go/load_balancing.go new file mode 100644 index 000000000000..8b2f89a6506a --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/load_balancing.go @@ -0,0 +1,387 @@ +package cloudflare + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" +) + +// LoadBalancerPool represents a load balancer pool's properties. +type LoadBalancerPool struct { + ID string `json:"id,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + ModifiedOn *time.Time `json:"modified_on,omitempty"` + Description string `json:"description"` + Name string `json:"name"` + Enabled bool `json:"enabled"` + MinimumOrigins int `json:"minimum_origins,omitempty"` + Monitor string `json:"monitor,omitempty"` + Origins []LoadBalancerOrigin `json:"origins"` + NotificationEmail string `json:"notification_email,omitempty"` + + // CheckRegions defines the geographic region(s) from where to run health-checks from - e.g. "WNAM", "WEU", "SAF", "SAM". + // Providing a null/empty value means "all regions", which may not be available to all plan types. + CheckRegions []string `json:"check_regions"` +} + +// LoadBalancerOrigin represents a Load Balancer origin's properties. +type LoadBalancerOrigin struct { + Name string `json:"name"` + Address string `json:"address"` + Enabled bool `json:"enabled"` + Weight float64 `json:"weight"` +} + +// LoadBalancerMonitor represents a load balancer monitor's properties. +type LoadBalancerMonitor struct { + ID string `json:"id,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + ModifiedOn *time.Time `json:"modified_on,omitempty"` + Type string `json:"type"` + Description string `json:"description"` + Method string `json:"method"` + Path string `json:"path"` + Header map[string][]string `json:"header"` + Timeout int `json:"timeout"` + Retries int `json:"retries"` + Interval int `json:"interval"` + Port uint16 `json:"port,omitempty"` + ExpectedBody string `json:"expected_body"` + ExpectedCodes string `json:"expected_codes"` + FollowRedirects bool `json:"follow_redirects"` + AllowInsecure bool `json:"allow_insecure"` + ProbeZone string `json:"probe_zone"` +} + +// LoadBalancer represents a load balancer's properties. +type LoadBalancer struct { + ID string `json:"id,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + ModifiedOn *time.Time `json:"modified_on,omitempty"` + Description string `json:"description"` + Name string `json:"name"` + TTL int `json:"ttl,omitempty"` + FallbackPool string `json:"fallback_pool"` + DefaultPools []string `json:"default_pools"` + RegionPools map[string][]string `json:"region_pools"` + PopPools map[string][]string `json:"pop_pools"` + Proxied bool `json:"proxied"` + Enabled *bool `json:"enabled,omitempty"` + Persistence string `json:"session_affinity,omitempty"` + PersistenceTTL int `json:"session_affinity_ttl,omitempty"` + + // SteeringPolicy controls pool selection logic. + // "off" select pools in DefaultPools order + // "geo" select pools based on RegionPools/PopPools + // "dynamic_latency" select pools based on RTT (requires health checks) + // "random" selects pools in a random order + // "" maps to "geo" if RegionPools or PopPools have entries otherwise "off" + SteeringPolicy string `json:"steering_policy,omitempty"` +} + +// LoadBalancerOriginHealth represents the health of the origin. +type LoadBalancerOriginHealth struct { + Healthy bool `json:"healthy,omitempty"` + RTT Duration `json:"rtt,omitempty"` + FailureReason string `json:"failure_reason,omitempty"` + ResponseCode int `json:"response_code,omitempty"` +} + +// LoadBalancerPoolPopHealth represents the health of the pool for given PoP. +type LoadBalancerPoolPopHealth struct { + Healthy bool `json:"healthy,omitempty"` + Origins []map[string]LoadBalancerOriginHealth `json:"origins,omitempty"` +} + +// LoadBalancerPoolHealth represents the healthchecks from different PoPs for a pool. +type LoadBalancerPoolHealth struct { + ID string `json:"pool_id,omitempty"` + PopHealth map[string]LoadBalancerPoolPopHealth `json:"pop_health,omitempty"` +} + +// loadBalancerPoolResponse represents the response from the load balancer pool endpoints. +type loadBalancerPoolResponse struct { + Response + Result LoadBalancerPool `json:"result"` +} + +// loadBalancerPoolListResponse represents the response from the List Pools endpoint. +type loadBalancerPoolListResponse struct { + Response + Result []LoadBalancerPool `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// loadBalancerMonitorResponse represents the response from the load balancer monitor endpoints. +type loadBalancerMonitorResponse struct { + Response + Result LoadBalancerMonitor `json:"result"` +} + +// loadBalancerMonitorListResponse represents the response from the List Monitors endpoint. +type loadBalancerMonitorListResponse struct { + Response + Result []LoadBalancerMonitor `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// loadBalancerResponse represents the response from the load balancer endpoints. +type loadBalancerResponse struct { + Response + Result LoadBalancer `json:"result"` +} + +// loadBalancerListResponse represents the response from the List Load Balancers endpoint. +type loadBalancerListResponse struct { + Response + Result []LoadBalancer `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// loadBalancerPoolHealthResponse represents the response from the Pool Health Details endpoint. +type loadBalancerPoolHealthResponse struct { + Response + Result LoadBalancerPoolHealth `json:"result"` +} + +// CreateLoadBalancerPool creates a new load balancer pool. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-create-a-pool +func (api *API) CreateLoadBalancerPool(pool LoadBalancerPool) (LoadBalancerPool, error) { + uri := api.userBaseURL("/user") + "/load_balancers/pools" + res, err := api.makeRequest("POST", uri, pool) + if err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerPoolResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListLoadBalancerPools lists load balancer pools connected to an account. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-list-pools +func (api *API) ListLoadBalancerPools() ([]LoadBalancerPool, error) { + uri := api.userBaseURL("/user") + "/load_balancers/pools" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerPoolListResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// LoadBalancerPoolDetails returns the details for a load balancer pool. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-pool-details +func (api *API) LoadBalancerPoolDetails(poolID string) (LoadBalancerPool, error) { + uri := api.userBaseURL("/user") + "/load_balancers/pools/" + poolID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerPoolResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// DeleteLoadBalancerPool disables and deletes a load balancer pool. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-delete-a-pool +func (api *API) DeleteLoadBalancerPool(poolID string) error { + uri := api.userBaseURL("/user") + "/load_balancers/pools/" + poolID + if _, err := api.makeRequest("DELETE", uri, nil); err != nil { + return errors.Wrap(err, errMakeRequestError) + } + return nil +} + +// ModifyLoadBalancerPool modifies a configured load balancer pool. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-modify-a-pool +func (api *API) ModifyLoadBalancerPool(pool LoadBalancerPool) (LoadBalancerPool, error) { + uri := api.userBaseURL("/user") + "/load_balancers/pools/" + pool.ID + res, err := api.makeRequest("PUT", uri, pool) + if err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerPoolResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerPool{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// CreateLoadBalancerMonitor creates a new load balancer monitor. +// +// API reference: https://api.cloudflare.com/#load-balancer-monitors-create-a-monitor +func (api *API) CreateLoadBalancerMonitor(monitor LoadBalancerMonitor) (LoadBalancerMonitor, error) { + uri := api.userBaseURL("/user") + "/load_balancers/monitors" + res, err := api.makeRequest("POST", uri, monitor) + if err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerMonitorResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListLoadBalancerMonitors lists load balancer monitors connected to an account. +// +// API reference: https://api.cloudflare.com/#load-balancer-monitors-list-monitors +func (api *API) ListLoadBalancerMonitors() ([]LoadBalancerMonitor, error) { + uri := api.userBaseURL("/user") + "/load_balancers/monitors" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerMonitorListResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// LoadBalancerMonitorDetails returns the details for a load balancer monitor. +// +// API reference: https://api.cloudflare.com/#load-balancer-monitors-monitor-details +func (api *API) LoadBalancerMonitorDetails(monitorID string) (LoadBalancerMonitor, error) { + uri := api.userBaseURL("/user") + "/load_balancers/monitors/" + monitorID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerMonitorResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// DeleteLoadBalancerMonitor disables and deletes a load balancer monitor. +// +// API reference: https://api.cloudflare.com/#load-balancer-monitors-delete-a-monitor +func (api *API) DeleteLoadBalancerMonitor(monitorID string) error { + uri := api.userBaseURL("/user") + "/load_balancers/monitors/" + monitorID + if _, err := api.makeRequest("DELETE", uri, nil); err != nil { + return errors.Wrap(err, errMakeRequestError) + } + return nil +} + +// ModifyLoadBalancerMonitor modifies a configured load balancer monitor. +// +// API reference: https://api.cloudflare.com/#load-balancer-monitors-modify-a-monitor +func (api *API) ModifyLoadBalancerMonitor(monitor LoadBalancerMonitor) (LoadBalancerMonitor, error) { + uri := api.userBaseURL("/user") + "/load_balancers/monitors/" + monitor.ID + res, err := api.makeRequest("PUT", uri, monitor) + if err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerMonitorResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerMonitor{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// CreateLoadBalancer creates a new load balancer. +// +// API reference: https://api.cloudflare.com/#load-balancers-create-a-load-balancer +func (api *API) CreateLoadBalancer(zoneID string, lb LoadBalancer) (LoadBalancer, error) { + uri := "/zones/" + zoneID + "/load_balancers" + res, err := api.makeRequest("POST", uri, lb) + if err != nil { + return LoadBalancer{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancer{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListLoadBalancers lists load balancers configured on a zone. +// +// API reference: https://api.cloudflare.com/#load-balancers-list-load-balancers +func (api *API) ListLoadBalancers(zoneID string) ([]LoadBalancer, error) { + uri := "/zones/" + zoneID + "/load_balancers" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerListResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// LoadBalancerDetails returns the details for a load balancer. +// +// API reference: https://api.cloudflare.com/#load-balancers-load-balancer-details +func (api *API) LoadBalancerDetails(zoneID, lbID string) (LoadBalancer, error) { + uri := "/zones/" + zoneID + "/load_balancers/" + lbID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return LoadBalancer{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancer{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// DeleteLoadBalancer disables and deletes a load balancer. +// +// API reference: https://api.cloudflare.com/#load-balancers-delete-a-load-balancer +func (api *API) DeleteLoadBalancer(zoneID, lbID string) error { + uri := "/zones/" + zoneID + "/load_balancers/" + lbID + if _, err := api.makeRequest("DELETE", uri, nil); err != nil { + return errors.Wrap(err, errMakeRequestError) + } + return nil +} + +// ModifyLoadBalancer modifies a configured load balancer. +// +// API reference: https://api.cloudflare.com/#load-balancers-modify-a-load-balancer +func (api *API) ModifyLoadBalancer(zoneID string, lb LoadBalancer) (LoadBalancer, error) { + uri := "/zones/" + zoneID + "/load_balancers/" + lb.ID + res, err := api.makeRequest("PUT", uri, lb) + if err != nil { + return LoadBalancer{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancer{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// PoolHealthDetails fetches the latest healtcheck details for a single pool. +// +// API reference: https://api.cloudflare.com/#load-balancer-pools-pool-health-details +func (api *API) PoolHealthDetails(poolID string) (LoadBalancerPoolHealth, error) { + uri := api.userBaseURL("/user") + "/load_balancers/pools/" + poolID + "/health" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return LoadBalancerPoolHealth{}, errors.Wrap(err, errMakeRequestError) + } + var r loadBalancerPoolHealthResponse + if err := json.Unmarshal(res, &r); err != nil { + return LoadBalancerPoolHealth{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/lockdown.go b/vendor/github.com/cloudflare/cloudflare-go/lockdown.go new file mode 100644 index 000000000000..164129bc544f --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/lockdown.go @@ -0,0 +1,151 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// ZoneLockdown represents a Zone Lockdown rule. A rule only permits access to +// the provided URL pattern(s) from the given IP address(es) or subnet(s). +type ZoneLockdown struct { + ID string `json:"id"` + Description string `json:"description"` + URLs []string `json:"urls"` + Configurations []ZoneLockdownConfig `json:"configurations"` + Paused bool `json:"paused"` + Priority int `json:"priority,omitempty"` +} + +// ZoneLockdownConfig represents a Zone Lockdown config, which comprises +// a Target ("ip" or "ip_range") and a Value (an IP address or IP+mask, +// respectively.) +type ZoneLockdownConfig struct { + Target string `json:"target"` + Value string `json:"value"` +} + +// ZoneLockdownResponse represents a response from the Zone Lockdown endpoint. +type ZoneLockdownResponse struct { + Result ZoneLockdown `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// ZoneLockdownListResponse represents a response from the List Zone Lockdown +// endpoint. +type ZoneLockdownListResponse struct { + Result []ZoneLockdown `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// CreateZoneLockdown creates a Zone ZoneLockdown rule for the given zone ID. +// +// API reference: https://api.cloudflare.com/#zone-ZoneLockdown-create-a-ZoneLockdown-rule +func (api *API) CreateZoneLockdown(zoneID string, ld ZoneLockdown) (*ZoneLockdownResponse, error) { + uri := "/zones/" + zoneID + "/firewall/lockdowns" + res, err := api.makeRequest("POST", uri, ld) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneLockdownResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// UpdateZoneLockdown updates a Zone ZoneLockdown rule (based on the ID) for the +// given zone ID. +// +// API reference: https://api.cloudflare.com/#zone-ZoneLockdown-update-ZoneLockdown-rule +func (api *API) UpdateZoneLockdown(zoneID string, id string, ld ZoneLockdown) (*ZoneLockdownResponse, error) { + uri := "/zones/" + zoneID + "/firewall/lockdowns/" + id + res, err := api.makeRequest("PUT", uri, ld) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneLockdownResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// DeleteZoneLockdown deletes a Zone ZoneLockdown rule (based on the ID) for the +// given zone ID. +// +// API reference: https://api.cloudflare.com/#zone-ZoneLockdown-delete-ZoneLockdown-rule +func (api *API) DeleteZoneLockdown(zoneID string, id string) (*ZoneLockdownResponse, error) { + uri := "/zones/" + zoneID + "/firewall/lockdowns/" + id + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneLockdownResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// ZoneLockdown retrieves a Zone ZoneLockdown rule (based on the ID) for the +// given zone ID. +// +// API reference: https://api.cloudflare.com/#zone-ZoneLockdown-ZoneLockdown-rule-details +func (api *API) ZoneLockdown(zoneID string, id string) (*ZoneLockdownResponse, error) { + uri := "/zones/" + zoneID + "/firewall/lockdowns/" + id + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneLockdownResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// ListZoneLockdowns retrieves a list of Zone ZoneLockdown rules for a given +// zone ID by page number. +// +// API reference: https://api.cloudflare.com/#zone-ZoneLockdown-list-ZoneLockdown-rules +func (api *API) ListZoneLockdowns(zoneID string, page int) (*ZoneLockdownListResponse, error) { + v := url.Values{} + if page <= 0 { + page = 1 + } + + v.Set("page", strconv.Itoa(page)) + v.Set("per_page", strconv.Itoa(100)) + query := "?" + v.Encode() + + uri := "/zones/" + zoneID + "/firewall/lockdowns" + query + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneLockdownListResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/logpush.go b/vendor/github.com/cloudflare/cloudflare-go/logpush.go new file mode 100644 index 000000000000..a0134adeddd9 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/logpush.go @@ -0,0 +1,224 @@ +package cloudflare + +import ( + "encoding/json" + "strconv" + "time" + + "github.com/pkg/errors" +) + +// LogpushJob describes a Logpush job. +type LogpushJob struct { + ID int `json:"id,omitempty"` + Enabled bool `json:"enabled"` + Name string `json:"name"` + LogpullOptions string `json:"logpull_options"` + DestinationConf string `json:"destination_conf"` + OwnershipChallenge string `json:"ownership_challenge,omitempty"` + LastComplete *time.Time `json:"last_complete,omitempty"` + LastError *time.Time `json:"last_error,omitempty"` + ErrorMessage string `json:"error_message,omitempty"` +} + +// LogpushJobsResponse is the API response, containing an array of Logpush Jobs. +type LogpushJobsResponse struct { + Response + Result []LogpushJob `json:"result"` +} + +// LogpushJobDetailsResponse is the API response, containing a single Logpush Job. +type LogpushJobDetailsResponse struct { + Response + Result LogpushJob `json:"result"` +} + +// LogpushGetOwnershipChallenge describes a ownership validation. +type LogpushGetOwnershipChallenge struct { + Filename string `json:"filename"` + Valid bool `json:"valid"` + Message string `json:"message"` +} + +// LogpushGetOwnershipChallengeResponse is the API response, containing a ownership challenge. +type LogpushGetOwnershipChallengeResponse struct { + Response + Result LogpushGetOwnershipChallenge `json:"result"` +} + +// LogpushGetOwnershipChallengeRequest is the API request for get ownership challenge. +type LogpushGetOwnershipChallengeRequest struct { + DestinationConf string `json:"destination_conf"` +} + +// LogpushOwnershipChallangeValidationResponse is the API response, +// containing a ownership challenge validation result. +type LogpushOwnershipChallangeValidationResponse struct { + Response + Result struct { + Valid bool `json:"valid"` + } +} + +// LogpushValidateOwnershipChallengeRequest is the API request for validate ownership challenge. +type LogpushValidateOwnershipChallengeRequest struct { + DestinationConf string `json:"destination_conf"` + OwnershipChallenge string `json:"ownership_challenge"` +} + +// LogpushDestinationExistsResponse is the API response, +// containing a destination exists check result. +type LogpushDestinationExistsResponse struct { + Response + Result struct { + Exists bool `json:"exists"` + } +} + +// LogpushDestinationExistsRequest is the API request for check destination exists. +type LogpushDestinationExistsRequest struct { + DestinationConf string `json:"destination_conf"` +} + +// CreateLogpushJob creates a new LogpushJob for a zone. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-create-logpush-job +func (api *API) CreateLogpushJob(zoneID string, job LogpushJob) (*LogpushJob, error) { + uri := "/zones/" + zoneID + "/logpush/jobs" + res, err := api.makeRequest("POST", uri, job) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r LogpushJobDetailsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return &r.Result, nil +} + +// LogpushJobs returns all Logpush Jobs for a zone. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-list-logpush-jobs +func (api *API) LogpushJobs(zoneID string) ([]LogpushJob, error) { + uri := "/zones/" + zoneID + "/logpush/jobs" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []LogpushJob{}, errors.Wrap(err, errMakeRequestError) + } + var r LogpushJobsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []LogpushJob{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// LogpushJob fetches detail about one Logpush Job for a zone. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-logpush-job-details +func (api *API) LogpushJob(zoneID string, jobID int) (LogpushJob, error) { + uri := "/zones/" + zoneID + "/logpush/jobs/" + strconv.Itoa(jobID) + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return LogpushJob{}, errors.Wrap(err, errMakeRequestError) + } + var r LogpushJobDetailsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return LogpushJob{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// UpdateLogpushJob lets you update a Logpush Job. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-update-logpush-job +func (api *API) UpdateLogpushJob(zoneID string, jobID int, job LogpushJob) error { + uri := "/zones/" + zoneID + "/logpush/jobs/" + strconv.Itoa(jobID) + res, err := api.makeRequest("PUT", uri, job) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r LogpushJobDetailsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} + +// DeleteLogpushJob deletes a Logpush Job for a zone. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-delete-logpush-job +func (api *API) DeleteLogpushJob(zoneID string, jobID int) error { + uri := "/zones/" + zoneID + "/logpush/jobs/" + strconv.Itoa(jobID) + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r LogpushJobDetailsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} + +// GetLogpushOwnershipChallenge returns ownership challenge. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-get-ownership-challenge +func (api *API) GetLogpushOwnershipChallenge(zoneID, destinationConf string) (*LogpushGetOwnershipChallenge, error) { + uri := "/zones/" + zoneID + "/logpush/ownership" + res, err := api.makeRequest("POST", uri, LogpushGetOwnershipChallengeRequest{ + DestinationConf: destinationConf, + }) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r LogpushGetOwnershipChallengeResponse + err = json.Unmarshal(res, &r) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return &r.Result, nil +} + +// ValidateLogpushOwnershipChallenge returns ownership challenge validation result. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-validate-ownership-challenge +func (api *API) ValidateLogpushOwnershipChallenge(zoneID, destinationConf, ownershipChallenge string) (bool, error) { + uri := "/zones/" + zoneID + "/logpush/ownership/validate" + res, err := api.makeRequest("POST", uri, LogpushValidateOwnershipChallengeRequest{ + DestinationConf: destinationConf, + OwnershipChallenge: ownershipChallenge, + }) + if err != nil { + return false, errors.Wrap(err, errMakeRequestError) + } + var r LogpushGetOwnershipChallengeResponse + err = json.Unmarshal(res, &r) + if err != nil { + return false, errors.Wrap(err, errUnmarshalError) + } + return r.Result.Valid, nil +} + +// CheckLogpushDestinationExists returns destination exists check result. +// +// API reference: https://api.cloudflare.com/#logpush-jobs-check-destination-exists +func (api *API) CheckLogpushDestinationExists(zoneID, destinationConf string) (bool, error) { + uri := "/zones/" + zoneID + "/logpush/validate/destination/exists" + res, err := api.makeRequest("POST", uri, LogpushDestinationExistsRequest{ + DestinationConf: destinationConf, + }) + if err != nil { + return false, errors.Wrap(err, errMakeRequestError) + } + var r LogpushDestinationExistsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return false, errors.Wrap(err, errUnmarshalError) + } + return r.Result.Exists, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/options.go b/vendor/github.com/cloudflare/cloudflare-go/options.go new file mode 100644 index 000000000000..1bf4f60bd9d9 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/options.go @@ -0,0 +1,101 @@ +package cloudflare + +import ( + "net/http" + + "time" + + "golang.org/x/time/rate" +) + +// Option is a functional option for configuring the API client. +type Option func(*API) error + +// HTTPClient accepts a custom *http.Client for making API calls. +func HTTPClient(client *http.Client) Option { + return func(api *API) error { + api.httpClient = client + return nil + } +} + +// Headers allows you to set custom HTTP headers when making API calls (e.g. for +// satisfying HTTP proxies, or for debugging). +func Headers(headers http.Header) Option { + return func(api *API) error { + api.headers = headers + return nil + } +} + +// UsingAccount allows you to apply account-level changes (Load Balancing, +// Railguns) to an account instead. +func UsingAccount(accountID string) Option { + return func(api *API) error { + api.AccountID = accountID + return nil + } +} + +// UsingRateLimit applies a non-default rate limit to client API requests +// If not specified the default of 4rps will be applied +func UsingRateLimit(rps float64) Option { + return func(api *API) error { + // because ratelimiter doesnt do any windowing + // setting burst makes it difficult to enforce a fixed rate + // so setting it equal to 1 this effectively disables bursting + // this doesn't check for sensible values, ultimately the api will enforce that the value is ok + api.rateLimiter = rate.NewLimiter(rate.Limit(rps), 1) + return nil + } +} + +// UsingRetryPolicy applies a non-default number of retries and min/max retry delays +// This will be used when the client exponentially backs off after errored requests +func UsingRetryPolicy(maxRetries int, minRetryDelaySecs int, maxRetryDelaySecs int) Option { + // seconds is very granular for a minimum delay - but this is only in case of failure + return func(api *API) error { + api.retryPolicy = RetryPolicy{ + MaxRetries: maxRetries, + MinRetryDelay: time.Duration(minRetryDelaySecs) * time.Second, + MaxRetryDelay: time.Duration(maxRetryDelaySecs) * time.Second, + } + return nil + } +} + +// UsingLogger can be set if you want to get log output from this API instance +// By default no log output is emitted +func UsingLogger(logger Logger) Option { + return func(api *API) error { + api.logger = logger + return nil + } +} + +// UserAgent can be set if you want to send a software name and version for HTTP access logs. +// It is recommended to set it in order to help future Customer Support diagnostics +// and prevent collateral damage by sharing generic User-Agent string with abusive users. +// E.g. "my-software/1.2.3". By default generic Go User-Agent is used. +func UserAgent(userAgent string) Option { + return func(api *API) error { + api.UserAgent = userAgent + return nil + } +} + +// parseOptions parses the supplied options functions and returns a configured +// *API instance. +func (api *API) parseOptions(opts ...Option) error { + // Range over each options function and apply it to our API type to + // configure it. Options functions are applied in order, with any + // conflicting options overriding earlier calls. + for _, option := range opts { + err := option(api) + if err != nil { + return err + } + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/origin_ca.go b/vendor/github.com/cloudflare/cloudflare-go/origin_ca.go new file mode 100644 index 000000000000..fdd8c4273d71 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/origin_ca.go @@ -0,0 +1,169 @@ +package cloudflare + +import ( + "context" + "encoding/json" + "net/url" + "time" + + "github.com/pkg/errors" +) + +// OriginCACertificate represents a Cloudflare-issued certificate. +// +// API reference: https://api.cloudflare.com/#cloudflare-ca +type OriginCACertificate struct { + ID string `json:"id"` + Certificate string `json:"certificate"` + Hostnames []string `json:"hostnames"` + ExpiresOn time.Time `json:"expires_on"` + RequestType string `json:"request_type"` + RequestValidity int `json:"requested_validity"` + CSR string `json:"csr"` +} + +// OriginCACertificateListOptions represents the parameters used to list Cloudflare-issued certificates. +type OriginCACertificateListOptions struct { + ZoneID string +} + +// OriginCACertificateID represents the ID of the revoked certificate from the Revoke Certificate endpoint. +type OriginCACertificateID struct { + ID string `json:"id"` +} + +// originCACertificateResponse represents the response from the Create Certificate and the Certificate Details endpoints. +type originCACertificateResponse struct { + Response + Result OriginCACertificate `json:"result"` +} + +// originCACertificateResponseList represents the response from the List Certificates endpoint. +type originCACertificateResponseList struct { + Response + Result []OriginCACertificate `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// originCACertificateResponseRevoke represents the response from the Revoke Certificate endpoint. +type originCACertificateResponseRevoke struct { + Response + Result OriginCACertificateID `json:"result"` +} + +// CreateOriginCertificate creates a Cloudflare-signed certificate. +// +// This function requires api.APIUserServiceKey be set to your Certificates API key. +// +// API reference: https://api.cloudflare.com/#cloudflare-ca-create-certificate +func (api *API) CreateOriginCertificate(certificate OriginCACertificate) (*OriginCACertificate, error) { + uri := "/certificates" + res, err := api.makeRequestWithAuthType(context.TODO(), "POST", uri, certificate, AuthUserService) + + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var originResponse *originCACertificateResponse + + err = json.Unmarshal(res, &originResponse) + + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + if !originResponse.Success { + return nil, errors.New(errRequestNotSuccessful) + } + + return &originResponse.Result, nil +} + +// OriginCertificates lists all Cloudflare-issued certificates. +// +// This function requires api.APIUserServiceKey be set to your Certificates API key. +// +// API reference: https://api.cloudflare.com/#cloudflare-ca-list-certificates +func (api *API) OriginCertificates(options OriginCACertificateListOptions) ([]OriginCACertificate, error) { + v := url.Values{} + if options.ZoneID != "" { + v.Set("zone_id", options.ZoneID) + } + uri := "/certificates" + "?" + v.Encode() + res, err := api.makeRequestWithAuthType(context.TODO(), "GET", uri, nil, AuthUserService) + + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var originResponse *originCACertificateResponseList + + err = json.Unmarshal(res, &originResponse) + + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + if !originResponse.Success { + return nil, errors.New(errRequestNotSuccessful) + } + + return originResponse.Result, nil +} + +// OriginCertificate returns the details for a Cloudflare-issued certificate. +// +// This function requires api.APIUserServiceKey be set to your Certificates API key. +// +// API reference: https://api.cloudflare.com/#cloudflare-ca-certificate-details +func (api *API) OriginCertificate(certificateID string) (*OriginCACertificate, error) { + uri := "/certificates/" + certificateID + res, err := api.makeRequestWithAuthType(context.TODO(), "GET", uri, nil, AuthUserService) + + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var originResponse *originCACertificateResponse + + err = json.Unmarshal(res, &originResponse) + + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + if !originResponse.Success { + return nil, errors.New(errRequestNotSuccessful) + } + + return &originResponse.Result, nil +} + +// RevokeOriginCertificate revokes a created certificate for a zone. +// +// This function requires api.APIUserServiceKey be set to your Certificates API key. +// +// API reference: https://api.cloudflare.com/#cloudflare-ca-revoke-certificate +func (api *API) RevokeOriginCertificate(certificateID string) (*OriginCACertificateID, error) { + uri := "/certificates/" + certificateID + res, err := api.makeRequestWithAuthType(context.TODO(), "DELETE", uri, nil, AuthUserService) + + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + var originResponse *originCACertificateResponseRevoke + + err = json.Unmarshal(res, &originResponse) + + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + if !originResponse.Success { + return nil, errors.New(errRequestNotSuccessful) + } + + return &originResponse.Result, nil + +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/page_rules.go b/vendor/github.com/cloudflare/cloudflare-go/page_rules.go new file mode 100644 index 000000000000..36f62e62f0ae --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/page_rules.go @@ -0,0 +1,235 @@ +package cloudflare + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" +) + +// PageRuleTarget is the target to evaluate on a request. +// +// Currently Target must always be "url" and Operator must be "matches". Value +// is the URL pattern to match against. +type PageRuleTarget struct { + Target string `json:"target"` + Constraint struct { + Operator string `json:"operator"` + Value string `json:"value"` + } `json:"constraint"` +} + +/* +PageRuleAction is the action to take when the target is matched. + +Valid IDs are: + always_online + always_use_https + automatic_https_rewrites + browser_cache_ttl + browser_check + bypass_cache_on_cookie + cache_by_device_type + cache_deception_armor + cache_level + cache_on_cookie + disable_apps + disable_performance + disable_railgun + disable_security + edge_cache_ttl + email_obfuscation + explicit_cache_control + forwarding_url + host_header_override + ip_geolocation + minify + mirage + opportunistic_encryption + origin_error_page_pass_thru + polish + resolve_override + respect_strong_etag + response_buffering + rocket_loader + security_level + server_side_exclude + sort_query_string_for_cache + ssl + true_client_ip_header + waf +*/ +type PageRuleAction struct { + ID string `json:"id"` + Value interface{} `json:"value"` +} + +// PageRuleActions maps API action IDs to human-readable strings. +var PageRuleActions = map[string]string{ + "always_online": "Always Online", // Value of type string + "always_use_https": "Always Use HTTPS", // Value of type interface{} + "automatic_https_rewrites": "Automatic HTTPS Rewrites", // Value of type string + "browser_cache_ttl": "Browser Cache TTL", // Value of type int + "browser_check": "Browser Integrity Check", // Value of type string + "bypass_cache_on_cookie": "Bypass Cache on Cookie", // Value of type string + "cache_by_device_type": "Cache By Device Type", // Value of type string + "cache_deception_armor": "Cache Deception Armor", // Value of type string + "cache_level": "Cache Level", // Value of type string + "cache_on_cookie": "Cache On Cookie", // Value of type string + "disable_apps": "Disable Apps", // Value of type interface{} + "disable_performance": "Disable Performance", // Value of type interface{} + "disable_railgun": "Disable Railgun", // Value of type string + "disable_security": "Disable Security", // Value of type interface{} + "edge_cache_ttl": "Edge Cache TTL", // Value of type int + "email_obfuscation": "Email Obfuscation", // Value of type string + "explicit_cache_control": "Origin Cache Control", // Value of type string + "forwarding_url": "Forwarding URL", // Value of type map[string]interface + "host_header_override": "Host Header Override", // Value of type string + "ip_geolocation": "IP Geolocation Header", // Value of type string + "minify": "Minify", // Value of type map[string]interface + "mirage": "Mirage", // Value of type string + "opportunistic_encryption": "Opportunistic Encryption", // Value of type string + "origin_error_page_pass_thru": "Origin Error Page Pass-thru", // Value of type string + "polish": "Polish", // Value of type string + "resolve_override": "Resolve Override", // Value of type string + "respect_strong_etag": "Respect Strong ETags", // Value of type string + "response_buffering": "Response Buffering", // Value of type string + "rocket_loader": "Rocker Loader", // Value of type string + "security_level": "Security Level", // Value of type string + "server_side_exclude": "Server Side Excludes", // Value of type string + "sort_query_string_for_cache": "Query String Sort", // Value of type string + "ssl": "SSL", // Value of type string + "true_client_ip_header": "True Client IP Header", // Value of type string + "waf": "Web Application Firewall", // Value of type string +} + +// PageRule describes a Page Rule. +type PageRule struct { + ID string `json:"id,omitempty"` + Targets []PageRuleTarget `json:"targets"` + Actions []PageRuleAction `json:"actions"` + Priority int `json:"priority"` + Status string `json:"status"` // can be: active, paused + ModifiedOn time.Time `json:"modified_on,omitempty"` + CreatedOn time.Time `json:"created_on,omitempty"` +} + +// PageRuleDetailResponse is the API response, containing a single PageRule. +type PageRuleDetailResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result PageRule `json:"result"` +} + +// PageRulesResponse is the API response, containing an array of PageRules. +type PageRulesResponse struct { + Success bool `json:"success"` + Errors []string `json:"errors"` + Messages []string `json:"messages"` + Result []PageRule `json:"result"` +} + +// CreatePageRule creates a new Page Rule for a zone. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-create-a-page-rule +func (api *API) CreatePageRule(zoneID string, rule PageRule) (*PageRule, error) { + uri := "/zones/" + zoneID + "/pagerules" + res, err := api.makeRequest("POST", uri, rule) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r PageRuleDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return &r.Result, nil +} + +// ListPageRules returns all Page Rules for a zone. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-list-page-rules +func (api *API) ListPageRules(zoneID string) ([]PageRule, error) { + uri := "/zones/" + zoneID + "/pagerules" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []PageRule{}, errors.Wrap(err, errMakeRequestError) + } + var r PageRulesResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []PageRule{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// PageRule fetches detail about one Page Rule for a zone. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-page-rule-details +func (api *API) PageRule(zoneID, ruleID string) (PageRule, error) { + uri := "/zones/" + zoneID + "/pagerules/" + ruleID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return PageRule{}, errors.Wrap(err, errMakeRequestError) + } + var r PageRuleDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return PageRule{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ChangePageRule lets you change individual settings for a Page Rule. This is +// in contrast to UpdatePageRule which replaces the entire Page Rule. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-change-a-page-rule +func (api *API) ChangePageRule(zoneID, ruleID string, rule PageRule) error { + uri := "/zones/" + zoneID + "/pagerules/" + ruleID + res, err := api.makeRequest("PATCH", uri, rule) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r PageRuleDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} + +// UpdatePageRule lets you replace a Page Rule. This is in contrast to +// ChangePageRule which lets you change individual settings. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-update-a-page-rule +func (api *API) UpdatePageRule(zoneID, ruleID string, rule PageRule) error { + uri := "/zones/" + zoneID + "/pagerules/" + ruleID + res, err := api.makeRequest("PUT", uri, rule) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r PageRuleDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} + +// DeletePageRule deletes a Page Rule for a zone. +// +// API reference: https://api.cloudflare.com/#page-rules-for-a-zone-delete-a-page-rule +func (api *API) DeletePageRule(zoneID, ruleID string) error { + uri := "/zones/" + zoneID + "/pagerules/" + ruleID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r PageRuleDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/railgun.go b/vendor/github.com/cloudflare/cloudflare-go/railgun.go new file mode 100644 index 000000000000..72d228691989 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/railgun.go @@ -0,0 +1,297 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "time" + + "github.com/pkg/errors" +) + +// Railgun represents a Railgun's properties. +type Railgun struct { + ID string `json:"id"` + Name string `json:"name"` + Status string `json:"status"` + Enabled bool `json:"enabled"` + ZonesConnected int `json:"zones_connected"` + Build string `json:"build"` + Version string `json:"version"` + Revision string `json:"revision"` + ActivationKey string `json:"activation_key"` + ActivatedOn time.Time `json:"activated_on"` + CreatedOn time.Time `json:"created_on"` + ModifiedOn time.Time `json:"modified_on"` + UpgradeInfo struct { + LatestVersion string `json:"latest_version"` + DownloadLink string `json:"download_link"` + } `json:"upgrade_info"` +} + +// RailgunListOptions represents the parameters used to list railguns. +type RailgunListOptions struct { + Direction string +} + +// railgunResponse represents the response from the Create Railgun and the Railgun Details endpoints. +type railgunResponse struct { + Response + Result Railgun `json:"result"` +} + +// railgunsResponse represents the response from the List Railguns endpoint. +type railgunsResponse struct { + Response + Result []Railgun `json:"result"` +} + +// CreateRailgun creates a new Railgun. +// +// API reference: https://api.cloudflare.com/#railgun-create-railgun +func (api *API) CreateRailgun(name string) (Railgun, error) { + uri := api.userBaseURL("") + "/railguns" + params := struct { + Name string `json:"name"` + }{ + Name: name, + } + res, err := api.makeRequest("POST", uri, params) + if err != nil { + return Railgun{}, errors.Wrap(err, errMakeRequestError) + } + var r railgunResponse + if err := json.Unmarshal(res, &r); err != nil { + return Railgun{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListRailguns lists Railguns connected to an account. +// +// API reference: https://api.cloudflare.com/#railgun-list-railguns +func (api *API) ListRailguns(options RailgunListOptions) ([]Railgun, error) { + v := url.Values{} + if options.Direction != "" { + v.Set("direction", options.Direction) + } + uri := api.userBaseURL("") + "/railguns" + "?" + v.Encode() + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r railgunsResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// RailgunDetails returns the details for a Railgun. +// +// API reference: https://api.cloudflare.com/#railgun-railgun-details +func (api *API) RailgunDetails(railgunID string) (Railgun, error) { + uri := api.userBaseURL("") + "/railguns/" + railgunID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return Railgun{}, errors.Wrap(err, errMakeRequestError) + } + var r railgunResponse + if err := json.Unmarshal(res, &r); err != nil { + return Railgun{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// RailgunZones returns the zones that are currently using a Railgun. +// +// API reference: https://api.cloudflare.com/#railgun-get-zones-connected-to-a-railgun +func (api *API) RailgunZones(railgunID string) ([]Zone, error) { + uri := api.userBaseURL("") + "/railguns/" + railgunID + "/zones" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r ZonesResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// enableRailgun enables (true) or disables (false) a Railgun for all zones connected to it. +// +// API reference: https://api.cloudflare.com/#railgun-enable-or-disable-a-railgun +func (api *API) enableRailgun(railgunID string, enable bool) (Railgun, error) { + uri := api.userBaseURL("") + "/railguns/" + railgunID + params := struct { + Enabled bool `json:"enabled"` + }{ + Enabled: enable, + } + res, err := api.makeRequest("PATCH", uri, params) + if err != nil { + return Railgun{}, errors.Wrap(err, errMakeRequestError) + } + var r railgunResponse + if err := json.Unmarshal(res, &r); err != nil { + return Railgun{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// EnableRailgun enables a Railgun for all zones connected to it. +// +// API reference: https://api.cloudflare.com/#railgun-enable-or-disable-a-railgun +func (api *API) EnableRailgun(railgunID string) (Railgun, error) { + return api.enableRailgun(railgunID, true) +} + +// DisableRailgun enables a Railgun for all zones connected to it. +// +// API reference: https://api.cloudflare.com/#railgun-enable-or-disable-a-railgun +func (api *API) DisableRailgun(railgunID string) (Railgun, error) { + return api.enableRailgun(railgunID, false) +} + +// DeleteRailgun disables and deletes a Railgun. +// +// API reference: https://api.cloudflare.com/#railgun-delete-railgun +func (api *API) DeleteRailgun(railgunID string) error { + uri := api.userBaseURL("") + "/railguns/" + railgunID + if _, err := api.makeRequest("DELETE", uri, nil); err != nil { + return errors.Wrap(err, errMakeRequestError) + } + return nil +} + +// ZoneRailgun represents the status of a Railgun on a zone. +type ZoneRailgun struct { + ID string `json:"id"` + Name string `json:"name"` + Enabled bool `json:"enabled"` + Connected bool `json:"connected"` +} + +// zoneRailgunResponse represents the response from the Zone Railgun Details endpoint. +type zoneRailgunResponse struct { + Response + Result ZoneRailgun `json:"result"` +} + +// zoneRailgunsResponse represents the response from the Zone Railgun endpoint. +type zoneRailgunsResponse struct { + Response + Result []ZoneRailgun `json:"result"` +} + +// RailgunDiagnosis represents the test results from testing railgun connections +// to a zone. +type RailgunDiagnosis struct { + Method string `json:"method"` + HostName string `json:"host_name"` + HTTPStatus int `json:"http_status"` + Railgun string `json:"railgun"` + URL string `json:"url"` + ResponseStatus string `json:"response_status"` + Protocol string `json:"protocol"` + ElapsedTime string `json:"elapsed_time"` + BodySize string `json:"body_size"` + BodyHash string `json:"body_hash"` + MissingHeaders string `json:"missing_headers"` + ConnectionClose bool `json:"connection_close"` + Cloudflare string `json:"cloudflare"` + CFRay string `json:"cf-ray"` + // NOTE: Cloudflare's online API documentation does not yet have definitions + // for the following fields. See: https://api.cloudflare.com/#railgun-connections-for-a-zone-test-railgun-connection/ + CFWANError string `json:"cf-wan-error"` + CFCacheStatus string `json:"cf-cache-status"` +} + +// railgunDiagnosisResponse represents the response from the Test Railgun Connection enpoint. +type railgunDiagnosisResponse struct { + Response + Result RailgunDiagnosis `json:"result"` +} + +// ZoneRailguns returns the available Railguns for a zone. +// +// API reference: https://api.cloudflare.com/#railguns-for-a-zone-get-available-railguns +func (api *API) ZoneRailguns(zoneID string) ([]ZoneRailgun, error) { + uri := "/zones/" + zoneID + "/railguns" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r zoneRailgunsResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ZoneRailgunDetails returns the configuration for a given Railgun. +// +// API reference: https://api.cloudflare.com/#railguns-for-a-zone-get-railgun-details +func (api *API) ZoneRailgunDetails(zoneID, railgunID string) (ZoneRailgun, error) { + uri := "/zones/" + zoneID + "/railguns/" + railgunID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ZoneRailgun{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneRailgunResponse + if err := json.Unmarshal(res, &r); err != nil { + return ZoneRailgun{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// TestRailgunConnection tests a Railgun connection for a given zone. +// +// API reference: https://api.cloudflare.com/#railgun-connections-for-a-zone-test-railgun-connection +func (api *API) TestRailgunConnection(zoneID, railgunID string) (RailgunDiagnosis, error) { + uri := "/zones/" + zoneID + "/railguns/" + railgunID + "/diagnose" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return RailgunDiagnosis{}, errors.Wrap(err, errMakeRequestError) + } + var r railgunDiagnosisResponse + if err := json.Unmarshal(res, &r); err != nil { + return RailgunDiagnosis{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// connectZoneRailgun connects (true) or disconnects (false) a Railgun for a given zone. +// +// API reference: https://api.cloudflare.com/#railguns-for-a-zone-connect-or-disconnect-a-railgun +func (api *API) connectZoneRailgun(zoneID, railgunID string, connect bool) (ZoneRailgun, error) { + uri := "/zones/" + zoneID + "/railguns/" + railgunID + params := struct { + Connected bool `json:"connected"` + }{ + Connected: connect, + } + res, err := api.makeRequest("PATCH", uri, params) + if err != nil { + return ZoneRailgun{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneRailgunResponse + if err := json.Unmarshal(res, &r); err != nil { + return ZoneRailgun{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ConnectZoneRailgun connects a Railgun for a given zone. +// +// API reference: https://api.cloudflare.com/#railguns-for-a-zone-connect-or-disconnect-a-railgun +func (api *API) ConnectZoneRailgun(zoneID, railgunID string) (ZoneRailgun, error) { + return api.connectZoneRailgun(zoneID, railgunID, true) +} + +// DisconnectZoneRailgun disconnects a Railgun for a given zone. +// +// API reference: https://api.cloudflare.com/#railguns-for-a-zone-connect-or-disconnect-a-railgun +func (api *API) DisconnectZoneRailgun(zoneID, railgunID string) (ZoneRailgun, error) { + return api.connectZoneRailgun(zoneID, railgunID, false) +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/rate_limiting.go b/vendor/github.com/cloudflare/cloudflare-go/rate_limiting.go new file mode 100644 index 000000000000..e3eb3e2e7bf6 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/rate_limiting.go @@ -0,0 +1,210 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// RateLimit is a policy than can be applied to limit traffic within a customer domain +type RateLimit struct { + ID string `json:"id,omitempty"` + Disabled bool `json:"disabled,omitempty"` + Description string `json:"description,omitempty"` + Match RateLimitTrafficMatcher `json:"match"` + Bypass []RateLimitKeyValue `json:"bypass,omitempty"` + Threshold int `json:"threshold"` + Period int `json:"period"` + Action RateLimitAction `json:"action"` + Correlate *RateLimitCorrelate `json:"correlate,omitempty"` +} + +// RateLimitTrafficMatcher contains the rules that will be used to apply a rate limit to traffic +type RateLimitTrafficMatcher struct { + Request RateLimitRequestMatcher `json:"request"` + Response RateLimitResponseMatcher `json:"response"` +} + +// RateLimitRequestMatcher contains the matching rules pertaining to requests +type RateLimitRequestMatcher struct { + Methods []string `json:"methods,omitempty"` + Schemes []string `json:"schemes,omitempty"` + URLPattern string `json:"url,omitempty"` +} + +// RateLimitResponseMatcher contains the matching rules pertaining to responses +type RateLimitResponseMatcher struct { + Statuses []int `json:"status,omitempty"` + OriginTraffic *bool `json:"origin_traffic,omitempty"` // api defaults to true so we need an explicit empty value + Headers []RateLimitResponseMatcherHeader `json:"headers,omitempty"` +} + +// RateLimitResponseMatcherHeader contains the structure of the origin +// HTTP headers used in request matcher checks. +type RateLimitResponseMatcherHeader struct { + Name string `json:"name"` + Op string `json:"op"` + Value string `json:"value"` +} + +// RateLimitKeyValue is k-v formatted as expected in the rate limit description +type RateLimitKeyValue struct { + Name string `json:"name"` + Value string `json:"value"` +} + +// RateLimitAction is the action that will be taken when the rate limit threshold is reached +type RateLimitAction struct { + Mode string `json:"mode"` + Timeout int `json:"timeout"` + Response *RateLimitActionResponse `json:"response"` +} + +// RateLimitActionResponse is the response that will be returned when rate limit action is triggered +type RateLimitActionResponse struct { + ContentType string `json:"content_type"` + Body string `json:"body"` +} + +// RateLimitCorrelate pertainings to NAT support +type RateLimitCorrelate struct { + By string `json:"by"` +} + +type rateLimitResponse struct { + Response + Result RateLimit `json:"result"` +} + +type rateLimitListResponse struct { + Response + Result []RateLimit `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// CreateRateLimit creates a new rate limit for a zone. +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-create-a-ratelimit +func (api *API) CreateRateLimit(zoneID string, limit RateLimit) (RateLimit, error) { + uri := "/zones/" + zoneID + "/rate_limits" + res, err := api.makeRequest("POST", uri, limit) + if err != nil { + return RateLimit{}, errors.Wrap(err, errMakeRequestError) + } + var r rateLimitResponse + if err := json.Unmarshal(res, &r); err != nil { + return RateLimit{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListRateLimits returns Rate Limits for a zone, paginated according to the provided options +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-list-rate-limits +func (api *API) ListRateLimits(zoneID string, pageOpts PaginationOptions) ([]RateLimit, ResultInfo, error) { + v := url.Values{} + if pageOpts.PerPage > 0 { + v.Set("per_page", strconv.Itoa(pageOpts.PerPage)) + } + if pageOpts.Page > 0 { + v.Set("page", strconv.Itoa(pageOpts.Page)) + } + + uri := "/zones/" + zoneID + "/rate_limits" + if len(v) > 0 { + uri = uri + "?" + v.Encode() + } + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []RateLimit{}, ResultInfo{}, errors.Wrap(err, errMakeRequestError) + } + + var r rateLimitListResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []RateLimit{}, ResultInfo{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, r.ResultInfo, nil +} + +// ListAllRateLimits returns all Rate Limits for a zone. +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-list-rate-limits +func (api *API) ListAllRateLimits(zoneID string) ([]RateLimit, error) { + pageOpts := PaginationOptions{ + PerPage: 100, // this is the max page size allowed + Page: 1, + } + + allRateLimits := make([]RateLimit, 0) + for { + rateLimits, resultInfo, err := api.ListRateLimits(zoneID, pageOpts) + if err != nil { + return []RateLimit{}, err + } + allRateLimits = append(allRateLimits, rateLimits...) + // total pages is not returned on this call + // if number of records is less than the max, this must be the last page + // in case TotalCount % PerPage = 0, the last request will return an empty list + if resultInfo.Count < resultInfo.PerPage { + break + } + // continue with the next page + pageOpts.Page = pageOpts.Page + 1 + } + + return allRateLimits, nil +} + +// RateLimit fetches detail about one Rate Limit for a zone. +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-rate-limit-details +func (api *API) RateLimit(zoneID, limitID string) (RateLimit, error) { + uri := "/zones/" + zoneID + "/rate_limits/" + limitID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return RateLimit{}, errors.Wrap(err, errMakeRequestError) + } + var r rateLimitResponse + err = json.Unmarshal(res, &r) + if err != nil { + return RateLimit{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// UpdateRateLimit lets you replace a Rate Limit for a zone. +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-update-rate-limit +func (api *API) UpdateRateLimit(zoneID, limitID string, limit RateLimit) (RateLimit, error) { + uri := "/zones/" + zoneID + "/rate_limits/" + limitID + res, err := api.makeRequest("PUT", uri, limit) + if err != nil { + return RateLimit{}, errors.Wrap(err, errMakeRequestError) + } + var r rateLimitResponse + if err := json.Unmarshal(res, &r); err != nil { + return RateLimit{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// DeleteRateLimit deletes a Rate Limit for a zone. +// +// API reference: https://api.cloudflare.com/#rate-limits-for-a-zone-delete-rate-limit +func (api *API) DeleteRateLimit(zoneID, limitID string) error { + uri := "/zones/" + zoneID + "/rate_limits/" + limitID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + var r rateLimitResponse + err = json.Unmarshal(res, &r) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/registrar.go b/vendor/github.com/cloudflare/cloudflare-go/registrar.go new file mode 100644 index 000000000000..51eacf173a38 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/registrar.go @@ -0,0 +1,175 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/pkg/errors" +) + +// RegistrarDomain is the structure of the API response for a new +// Cloudflare Registrar domain. +type RegistrarDomain struct { + ID string `json:"id"` + Available bool `json:"available"` + SupportedTLD bool `json:"supported_tld"` + CanRegister bool `json:"can_register"` + TransferIn RegistrarTransferIn `json:"transfer_in"` + CurrentRegistrar string `json:"current_registrar"` + ExpiresAt time.Time `json:"expires_at"` + RegistryStatuses string `json:"registry_statuses"` + Locked bool `json:"locked"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + RegistrantContact RegistrantContact `json:"registrant_contact"` +} + +// RegistrarTransferIn contains the structure for a domain transfer in +// request. +type RegistrarTransferIn struct { + UnlockDomain string `json:"unlock_domain"` + DisablePrivacy string `json:"disable_privacy"` + EnterAuthCode string `json:"enter_auth_code"` + ApproveTransfer string `json:"approve_transfer"` + AcceptFoa string `json:"accept_foa"` + CanCancelTransfer bool `json:"can_cancel_transfer"` +} + +// RegistrantContact is the contact details for the domain registration. +type RegistrantContact struct { + ID string `json:"id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Organization string `json:"organization"` + Address string `json:"address"` + Address2 string `json:"address2"` + City string `json:"city"` + State string `json:"state"` + Zip string `json:"zip"` + Country string `json:"country"` + Phone string `json:"phone"` + Email string `json:"email"` + Fax string `json:"fax"` +} + +// RegistrarDomainConfiguration is the structure for making updates to +// and existing domain. +type RegistrarDomainConfiguration struct { + NameServers []string `json:"name_servers"` + Privacy bool `json:"privacy"` + Locked bool `json:"locked"` + AutoRenew bool `json:"auto_renew"` +} + +// RegistrarDomainDetailResponse is the structure of the detailed +// response from the API for a single domain. +type RegistrarDomainDetailResponse struct { + Response + Result RegistrarDomain `json:"result"` +} + +// RegistrarDomainsDetailResponse is the structure of the detailed +// response from the API. +type RegistrarDomainsDetailResponse struct { + Response + Result []RegistrarDomain `json:"result"` +} + +// RegistrarDomain returns a single domain based on the account ID and +// domain name. +// +// API reference: https://api.cloudflare.com/#registrar-domains-get-domain +func (api *API) RegistrarDomain(accountID, domainName string) (RegistrarDomain, error) { + uri := fmt.Sprintf("/accounts/%s/registrar/domains/%s", accountID, domainName) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return RegistrarDomain{}, errors.Wrap(err, errMakeRequestError) + } + + var r RegistrarDomainDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return RegistrarDomain{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// RegistrarDomains returns all registrar domains based on the account +// ID. +// +// API reference: https://api.cloudflare.com/#registrar-domains-list-domains +func (api *API) RegistrarDomains(accountID string) ([]RegistrarDomain, error) { + uri := "/accounts/" + accountID + "/registrar/domains" + + res, err := api.makeRequest("POST", uri, nil) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errMakeRequestError) + } + + var r RegistrarDomainsDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// TransferRegistrarDomain initiates the transfer from another registrar +// to Cloudflare Registrar. +// +// API reference: https://api.cloudflare.com/#registrar-domains-transfer-domain +func (api *API) TransferRegistrarDomain(accountID, domainName string) ([]RegistrarDomain, error) { + uri := fmt.Sprintf("/accounts/%s/registrar/domains/%s/transfer", accountID, domainName) + + res, err := api.makeRequest("POST", uri, nil) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errMakeRequestError) + } + + var r RegistrarDomainsDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// CancelRegistrarDomainTransfer cancels a pending domain transfer. +// +// API reference: https://api.cloudflare.com/#registrar-domains-cancel-transfer +func (api *API) CancelRegistrarDomainTransfer(accountID, domainName string) ([]RegistrarDomain, error) { + uri := fmt.Sprintf("/accounts/%s/registrar/domains/%s/cancel_transfer", accountID, domainName) + + res, err := api.makeRequest("POST", uri, nil) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errMakeRequestError) + } + + var r RegistrarDomainsDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []RegistrarDomain{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// UpdateRegistrarDomain updates an existing Registrar Domain configuration. +// +// API reference: https://api.cloudflare.com/#registrar-domains-update-domain +func (api *API) UpdateRegistrarDomain(accountID, domainName string, domainConfiguration RegistrarDomainConfiguration) (RegistrarDomain, error) { + uri := fmt.Sprintf("/accounts/%s/registrar/domains/%s", accountID, domainName) + + res, err := api.makeRequest("PUT", uri, domainConfiguration) + if err != nil { + return RegistrarDomain{}, errors.Wrap(err, errMakeRequestError) + } + + var r RegistrarDomainDetailResponse + err = json.Unmarshal(res, &r) + if err != nil { + return RegistrarDomain{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/renovate.json b/vendor/github.com/cloudflare/cloudflare-go/renovate.json new file mode 100644 index 000000000000..f45d8f110c30 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/renovate.json @@ -0,0 +1,5 @@ +{ + "extends": [ + "config:base" + ] +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/spectrum.go b/vendor/github.com/cloudflare/cloudflare-go/spectrum.go new file mode 100644 index 000000000000..a95a2cd7f9f2 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/spectrum.go @@ -0,0 +1,158 @@ +package cloudflare + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/pkg/errors" +) + +// SpectrumApplication defines a single Spectrum Application. +type SpectrumApplication struct { + ID string `json:"id,omitempty"` + Protocol string `json:"protocol,omitempty"` + IPv4 bool `json:"ipv4,omitempty"` + DNS SpectrumApplicationDNS `json:"dns,omitempty"` + OriginDirect []string `json:"origin_direct,omitempty"` + OriginPort int `json:"origin_port,omitempty"` + OriginDNS *SpectrumApplicationOriginDNS `json:"origin_dns,omitempty"` + IPFirewall bool `json:"ip_firewall,omitempty"` + ProxyProtocol bool `json:"proxy_protocol,omitempty"` + TLS string `json:"tls,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + ModifiedOn *time.Time `json:"modified_on,omitempty"` +} + +// SpectrumApplicationDNS holds the external DNS configuration for a Spectrum +// Application. +type SpectrumApplicationDNS struct { + Type string `json:"type"` + Name string `json:"name"` +} + +// SpectrumApplicationOriginDNS holds the origin DNS configuration for a Spectrum +// Application. +type SpectrumApplicationOriginDNS struct { + Name string `json:"name"` +} + +// SpectrumApplicationDetailResponse is the structure of the detailed response +// from the API. +type SpectrumApplicationDetailResponse struct { + Response + Result SpectrumApplication `json:"result"` +} + +// SpectrumApplicationsDetailResponse is the structure of the detailed response +// from the API. +type SpectrumApplicationsDetailResponse struct { + Response + Result []SpectrumApplication `json:"result"` +} + +// SpectrumApplications fetches all of the Spectrum applications for a zone. +// +// API reference: https://developers.cloudflare.com/spectrum/api-reference/#list-spectrum-applications +func (api *API) SpectrumApplications(zoneID string) ([]SpectrumApplication, error) { + uri := "/zones/" + zoneID + "/spectrum/apps" + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []SpectrumApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var spectrumApplications SpectrumApplicationsDetailResponse + err = json.Unmarshal(res, &spectrumApplications) + if err != nil { + return []SpectrumApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return spectrumApplications.Result, nil +} + +// SpectrumApplication fetches a single Spectrum application based on the ID. +// +// API reference: https://developers.cloudflare.com/spectrum/api-reference/#list-spectrum-applications +func (api *API) SpectrumApplication(zoneID string, applicationID string) (SpectrumApplication, error) { + uri := fmt.Sprintf( + "/zones/%s/spectrum/apps/%s", + zoneID, + applicationID, + ) + + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var spectrumApplication SpectrumApplicationDetailResponse + err = json.Unmarshal(res, &spectrumApplication) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return spectrumApplication.Result, nil +} + +// CreateSpectrumApplication creates a new Spectrum application. +// +// API reference: https://developers.cloudflare.com/spectrum/api-reference/#create-a-spectrum-application +func (api *API) CreateSpectrumApplication(zoneID string, appDetails SpectrumApplication) (SpectrumApplication, error) { + uri := "/zones/" + zoneID + "/spectrum/apps" + + res, err := api.makeRequest("POST", uri, appDetails) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var spectrumApplication SpectrumApplicationDetailResponse + err = json.Unmarshal(res, &spectrumApplication) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return spectrumApplication.Result, nil +} + +// UpdateSpectrumApplication updates an existing Spectrum application. +// +// API reference: https://developers.cloudflare.com/spectrum/api-reference/#update-a-spectrum-application +func (api *API) UpdateSpectrumApplication(zoneID, appID string, appDetails SpectrumApplication) (SpectrumApplication, error) { + uri := fmt.Sprintf( + "/zones/%s/spectrum/apps/%s", + zoneID, + appID, + ) + + res, err := api.makeRequest("PUT", uri, appDetails) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errMakeRequestError) + } + + var spectrumApplication SpectrumApplicationDetailResponse + err = json.Unmarshal(res, &spectrumApplication) + if err != nil { + return SpectrumApplication{}, errors.Wrap(err, errUnmarshalError) + } + + return spectrumApplication.Result, nil +} + +// DeleteSpectrumApplication removes a Spectrum application based on the ID. +// +// API reference: https://developers.cloudflare.com/spectrum/api-reference/#delete-a-spectrum-application +func (api *API) DeleteSpectrumApplication(zoneID string, applicationID string) error { + uri := fmt.Sprintf( + "/zones/%s/spectrum/apps/%s", + zoneID, + applicationID, + ) + + _, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/ssl.go b/vendor/github.com/cloudflare/cloudflare-go/ssl.go new file mode 100644 index 000000000000..505dfa650e43 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/ssl.go @@ -0,0 +1,157 @@ +package cloudflare + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" +) + +// ZoneCustomSSL represents custom SSL certificate metadata. +type ZoneCustomSSL struct { + ID string `json:"id"` + Hosts []string `json:"hosts"` + Issuer string `json:"issuer"` + Signature string `json:"signature"` + Status string `json:"status"` + BundleMethod string `json:"bundle_method"` + GeoRestrictions ZoneCustomSSLGeoRestrictions `json:"geo_restrictions"` + ZoneID string `json:"zone_id"` + UploadedOn time.Time `json:"uploaded_on"` + ModifiedOn time.Time `json:"modified_on"` + ExpiresOn time.Time `json:"expires_on"` + Priority int `json:"priority"` + KeylessServer KeylessSSL `json:"keyless_server"` +} + +// ZoneCustomSSLGeoRestrictions represents the parameter to create or update +// geographic restrictions on a custom ssl certificate. +type ZoneCustomSSLGeoRestrictions struct { + Label string `json:"label"` +} + +// zoneCustomSSLResponse represents the response from the zone SSL details endpoint. +type zoneCustomSSLResponse struct { + Response + Result ZoneCustomSSL `json:"result"` +} + +// zoneCustomSSLsResponse represents the response from the zone SSL list endpoint. +type zoneCustomSSLsResponse struct { + Response + Result []ZoneCustomSSL `json:"result"` +} + +// ZoneCustomSSLOptions represents the parameters to create or update an existing +// custom SSL configuration. +type ZoneCustomSSLOptions struct { + Certificate string `json:"certificate"` + PrivateKey string `json:"private_key"` + BundleMethod string `json:"bundle_method,omitempty"` + GeoRestrictions ZoneCustomSSLGeoRestrictions `json:"geo_restrictions,omitempty"` + Type string `json:"type,omitempty"` +} + +// ZoneCustomSSLPriority represents a certificate's ID and priority. It is a +// subset of ZoneCustomSSL used for patch requests. +type ZoneCustomSSLPriority struct { + ID string `json:"ID"` + Priority int `json:"priority"` +} + +// CreateSSL allows you to add a custom SSL certificate to the given zone. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-create-ssl-configuration +func (api *API) CreateSSL(zoneID string, options ZoneCustomSSLOptions) (ZoneCustomSSL, error) { + uri := "/zones/" + zoneID + "/custom_certificates" + res, err := api.makeRequest("POST", uri, options) + if err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneCustomSSLResponse + if err := json.Unmarshal(res, &r); err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListSSL lists the custom certificates for the given zone. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-list-ssl-configurations +func (api *API) ListSSL(zoneID string) ([]ZoneCustomSSL, error) { + uri := "/zones/" + zoneID + "/custom_certificates" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r zoneCustomSSLsResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// SSLDetails returns the configuration details for a custom SSL certificate. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-ssl-configuration-details +func (api *API) SSLDetails(zoneID, certificateID string) (ZoneCustomSSL, error) { + uri := "/zones/" + zoneID + "/custom_certificates/" + certificateID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneCustomSSLResponse + if err := json.Unmarshal(res, &r); err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// UpdateSSL updates (replaces) a custom SSL certificate. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-update-ssl-configuration +func (api *API) UpdateSSL(zoneID, certificateID string, options ZoneCustomSSLOptions) (ZoneCustomSSL, error) { + uri := "/zones/" + zoneID + "/custom_certificates/" + certificateID + res, err := api.makeRequest("PATCH", uri, options) + if err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneCustomSSLResponse + if err := json.Unmarshal(res, &r); err != nil { + return ZoneCustomSSL{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ReprioritizeSSL allows you to change the priority (which is served for a given +// request) of custom SSL certificates associated with the given zone. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-re-prioritize-ssl-certificates +func (api *API) ReprioritizeSSL(zoneID string, p []ZoneCustomSSLPriority) ([]ZoneCustomSSL, error) { + uri := "/zones/" + zoneID + "/custom_certificates/prioritize" + params := struct { + Certificates []ZoneCustomSSLPriority `json:"certificates"` + }{ + Certificates: p, + } + res, err := api.makeRequest("PUT", uri, params) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r zoneCustomSSLsResponse + if err := json.Unmarshal(res, &r); err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// DeleteSSL deletes a custom SSL certificate from the given zone. +// +// API reference: https://api.cloudflare.com/#custom-ssl-for-a-zone-delete-an-ssl-certificate +func (api *API) DeleteSSL(zoneID, certificateID string) error { + uri := "/zones/" + zoneID + "/custom_certificates/" + certificateID + if _, err := api.makeRequest("DELETE", uri, nil); err != nil { + return errors.Wrap(err, errMakeRequestError) + } + return nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/universal_ssl.go b/vendor/github.com/cloudflare/cloudflare-go/universal_ssl.go new file mode 100644 index 000000000000..4bf8ffde71e7 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/universal_ssl.go @@ -0,0 +1,88 @@ +package cloudflare + +import ( + "encoding/json" + + "github.com/pkg/errors" +) + +// UniversalSSLSetting represents a universal ssl setting's properties. +type UniversalSSLSetting struct { + Enabled bool `json:"enabled"` +} + +type universalSSLSettingResponse struct { + Response + Result UniversalSSLSetting `json:"result"` +} + +// UniversalSSLVerificationDetails represents a universal ssl verifcation's properties. +type UniversalSSLVerificationDetails struct { + CertificateStatus string `json:"certificate_status"` + VerificationType string `json:"verification_type"` + ValidationMethod string `json:"validation_method"` + CertPackUUID string `json:"cert_pack_uuid"` + VerificationStatus bool `json:"verification_status"` + BrandCheck bool `json:"brand_check"` + VerificationInfo UniversalSSLVerificationInfo `json:"verification_info"` +} + +// UniversalSSLVerificationInfo represents DCV record. +type UniversalSSLVerificationInfo struct { + RecordName string `json:"record_name"` + RecordTarget string `json:"record_target"` +} + +type universalSSLVerificationResponse struct { + Response + Result []UniversalSSLVerificationDetails `json:"result"` +} + +// UniversalSSLSettingDetails returns the details for a universal ssl setting +// +// API reference: https://api.cloudflare.com/#universal-ssl-settings-for-a-zone-universal-ssl-settings-details +func (api *API) UniversalSSLSettingDetails(zoneID string) (UniversalSSLSetting, error) { + uri := "/zones/" + zoneID + "/ssl/universal/settings" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return UniversalSSLSetting{}, errors.Wrap(err, errMakeRequestError) + } + var r universalSSLSettingResponse + if err := json.Unmarshal(res, &r); err != nil { + return UniversalSSLSetting{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// EditUniversalSSLSetting edits the uniersal ssl setting for a zone +// +// API reference: https://api.cloudflare.com/#universal-ssl-settings-for-a-zone-edit-universal-ssl-settings +func (api *API) EditUniversalSSLSetting(zoneID string, setting UniversalSSLSetting) (UniversalSSLSetting, error) { + uri := "/zones/" + zoneID + "/ssl/universal/settings" + res, err := api.makeRequest("PATCH", uri, setting) + if err != nil { + return UniversalSSLSetting{}, errors.Wrap(err, errMakeRequestError) + } + var r universalSSLSettingResponse + if err := json.Unmarshal(res, &r); err != nil { + return UniversalSSLSetting{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil + +} + +// UniversalSSLVerificationDetails returns the details for a universal ssl verifcation +// +// API reference: https://api.cloudflare.com/#ssl-verification-ssl-verification-details +func (api *API) UniversalSSLVerificationDetails(zoneID string) ([]UniversalSSLVerificationDetails, error) { + uri := "/zones/" + zoneID + "/ssl/verification" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []UniversalSSLVerificationDetails{}, errors.Wrap(err, errMakeRequestError) + } + var r universalSSLVerificationResponse + if err := json.Unmarshal(res, &r); err != nil { + return []UniversalSSLVerificationDetails{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/user.go b/vendor/github.com/cloudflare/cloudflare-go/user.go new file mode 100644 index 000000000000..bf2f47a57860 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/user.go @@ -0,0 +1,113 @@ +package cloudflare + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" +) + +// User describes a user account. +type User struct { + ID string `json:"id,omitempty"` + Email string `json:"email,omitempty"` + FirstName string `json:"first_name,omitempty"` + LastName string `json:"last_name,omitempty"` + Username string `json:"username,omitempty"` + Telephone string `json:"telephone,omitempty"` + Country string `json:"country,omitempty"` + Zipcode string `json:"zipcode,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + ModifiedOn *time.Time `json:"modified_on,omitempty"` + APIKey string `json:"api_key,omitempty"` + TwoFA bool `json:"two_factor_authentication_enabled,omitempty"` + Betas []string `json:"betas,omitempty"` + Accounts []Account `json:"organizations,omitempty"` +} + +// UserResponse wraps a response containing User accounts. +type UserResponse struct { + Response + Result User `json:"result"` +} + +// userBillingProfileResponse wraps a response containing Billing Profile information. +type userBillingProfileResponse struct { + Response + Result UserBillingProfile +} + +// UserBillingProfile contains Billing Profile information. +type UserBillingProfile struct { + ID string `json:"id,omitempty"` + FirstName string `json:"first_name,omitempty"` + LastName string `json:"last_name,omitempty"` + Address string `json:"address,omitempty"` + Address2 string `json:"address2,omitempty"` + Company string `json:"company,omitempty"` + City string `json:"city,omitempty"` + State string `json:"state,omitempty"` + ZipCode string `json:"zipcode,omitempty"` + Country string `json:"country,omitempty"` + Telephone string `json:"telephone,omitempty"` + CardNumber string `json:"card_number,omitempty"` + CardExpiryYear int `json:"card_expiry_year,omitempty"` + CardExpiryMonth int `json:"card_expiry_month,omitempty"` + VAT string `json:"vat,omitempty"` + CreatedOn *time.Time `json:"created_on,omitempty"` + EditedOn *time.Time `json:"edited_on,omitempty"` +} + +// UserDetails provides information about the logged-in user. +// +// API reference: https://api.cloudflare.com/#user-user-details +func (api *API) UserDetails() (User, error) { + var r UserResponse + res, err := api.makeRequest("GET", "/user", nil) + if err != nil { + return User{}, errors.Wrap(err, errMakeRequestError) + } + + err = json.Unmarshal(res, &r) + if err != nil { + return User{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UpdateUser updates the properties of the given user. +// +// API reference: https://api.cloudflare.com/#user-update-user +func (api *API) UpdateUser(user *User) (User, error) { + var r UserResponse + res, err := api.makeRequest("PATCH", "/user", user) + if err != nil { + return User{}, errors.Wrap(err, errMakeRequestError) + } + + err = json.Unmarshal(res, &r) + if err != nil { + return User{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UserBillingProfile returns the billing profile of the user. +// +// API reference: https://api.cloudflare.com/#user-billing-profile +func (api *API) UserBillingProfile() (UserBillingProfile, error) { + var r userBillingProfileResponse + res, err := api.makeRequest("GET", "/user/billing/profile", nil) + if err != nil { + return UserBillingProfile{}, errors.Wrap(err, errMakeRequestError) + } + + err = json.Unmarshal(res, &r) + if err != nil { + return UserBillingProfile{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/user_agent.go b/vendor/github.com/cloudflare/cloudflare-go/user_agent.go new file mode 100644 index 000000000000..6d75f3a1d73d --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/user_agent.go @@ -0,0 +1,149 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strconv" + + "github.com/pkg/errors" +) + +// UserAgentRule represents a User-Agent Block. These rules can be used to +// challenge, block or whitelist specific User-Agents for a given zone. +type UserAgentRule struct { + ID string `json:"id"` + Description string `json:"description"` + Mode string `json:"mode"` + Configuration UserAgentRuleConfig `json:"configuration"` + Paused bool `json:"paused"` +} + +// UserAgentRuleConfig represents a Zone Lockdown config, which comprises +// a Target ("ip" or "ip_range") and a Value (an IP address or IP+mask, +// respectively.) +type UserAgentRuleConfig ZoneLockdownConfig + +// UserAgentRuleResponse represents a response from the Zone Lockdown endpoint. +type UserAgentRuleResponse struct { + Result UserAgentRule `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// UserAgentRuleListResponse represents a response from the List Zone Lockdown endpoint. +type UserAgentRuleListResponse struct { + Result []UserAgentRule `json:"result"` + Response + ResultInfo `json:"result_info"` +} + +// CreateUserAgentRule creates a User-Agent Block rule for the given zone ID. +// +// API reference: https://api.cloudflare.com/#user-agent-blocking-rules-create-a-useragent-rule +func (api *API) CreateUserAgentRule(zoneID string, ld UserAgentRule) (*UserAgentRuleResponse, error) { + switch ld.Mode { + case "block", "challenge", "js_challenge", "whitelist": + break + default: + return nil, errors.New(`the User-Agent Block rule mode must be one of "block", "challenge", "js_challenge", "whitelist"`) + } + + uri := "/zones/" + zoneID + "/firewall/ua_rules" + res, err := api.makeRequest("POST", uri, ld) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &UserAgentRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// UpdateUserAgentRule updates a User-Agent Block rule (based on the ID) for the given zone ID. +// +// API reference: https://api.cloudflare.com/#user-agent-blocking-rules-update-useragent-rule +func (api *API) UpdateUserAgentRule(zoneID string, id string, ld UserAgentRule) (*UserAgentRuleResponse, error) { + uri := "/zones/" + zoneID + "/firewall/ua_rules/" + id + res, err := api.makeRequest("PUT", uri, ld) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &UserAgentRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// DeleteUserAgentRule deletes a User-Agent Block rule (based on the ID) for the given zone ID. +// +// API reference: https://api.cloudflare.com/#user-agent-blocking-rules-delete-useragent-rule +func (api *API) DeleteUserAgentRule(zoneID string, id string) (*UserAgentRuleResponse, error) { + uri := "/zones/" + zoneID + "/firewall/ua_rules/" + id + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &UserAgentRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// UserAgentRule retrieves a User-Agent Block rule (based on the ID) for the given zone ID. +// +// API reference: https://api.cloudflare.com/#user-agent-blocking-rules-useragent-rule-details +func (api *API) UserAgentRule(zoneID string, id string) (*UserAgentRuleResponse, error) { + uri := "/zones/" + zoneID + "/firewall/ua_rules/" + id + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &UserAgentRuleResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// ListUserAgentRules retrieves a list of User-Agent Block rules for a given zone ID by page number. +// +// API reference: https://api.cloudflare.com/#user-agent-blocking-rules-list-useragent-rules +func (api *API) ListUserAgentRules(zoneID string, page int) (*UserAgentRuleListResponse, error) { + v := url.Values{} + if page <= 0 { + page = 1 + } + + v.Set("page", strconv.Itoa(page)) + v.Set("per_page", strconv.Itoa(100)) + query := "?" + v.Encode() + + uri := "/zones/" + zoneID + "/firewall/ua_rules" + query + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &UserAgentRuleListResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/virtualdns.go b/vendor/github.com/cloudflare/cloudflare-go/virtualdns.go new file mode 100644 index 000000000000..f8082e1f02c8 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/virtualdns.go @@ -0,0 +1,192 @@ +package cloudflare + +import ( + "encoding/json" + "net/url" + "strings" + "time" + + "github.com/pkg/errors" +) + +// VirtualDNS represents a Virtual DNS configuration. +type VirtualDNS struct { + ID string `json:"id"` + Name string `json:"name"` + OriginIPs []string `json:"origin_ips"` + VirtualDNSIPs []string `json:"virtual_dns_ips"` + MinimumCacheTTL uint `json:"minimum_cache_ttl"` + MaximumCacheTTL uint `json:"maximum_cache_ttl"` + DeprecateAnyRequests bool `json:"deprecate_any_requests"` + ModifiedOn string `json:"modified_on"` +} + +// VirtualDNSAnalyticsMetrics respresents a group of aggregated Virtual DNS metrics. +type VirtualDNSAnalyticsMetrics struct { + QueryCount *int64 `json:"queryCount"` + UncachedCount *int64 `json:"uncachedCount"` + StaleCount *int64 `json:"staleCount"` + ResponseTimeAvg *float64 `json:"responseTimeAvg"` + ResponseTimeMedian *float64 `json:"responseTimeMedian"` + ResponseTime90th *float64 `json:"responseTime90th"` + ResponseTime99th *float64 `json:"responseTime99th"` +} + +// VirtualDNSAnalytics represents a set of aggregated Virtual DNS metrics. +// TODO: Add the queried data and not only the aggregated values. +type VirtualDNSAnalytics struct { + Totals VirtualDNSAnalyticsMetrics `json:"totals"` + Min VirtualDNSAnalyticsMetrics `json:"min"` + Max VirtualDNSAnalyticsMetrics `json:"max"` +} + +// VirtualDNSUserAnalyticsOptions represents range and dimension selection on analytics endpoint +type VirtualDNSUserAnalyticsOptions struct { + Metrics []string + Since *time.Time + Until *time.Time +} + +// VirtualDNSResponse represents a Virtual DNS response. +type VirtualDNSResponse struct { + Response + Result *VirtualDNS `json:"result"` +} + +// VirtualDNSListResponse represents an array of Virtual DNS responses. +type VirtualDNSListResponse struct { + Response + Result []*VirtualDNS `json:"result"` +} + +// VirtualDNSAnalyticsResponse represents a Virtual DNS analytics response. +type VirtualDNSAnalyticsResponse struct { + Response + Result VirtualDNSAnalytics `json:"result"` +} + +// CreateVirtualDNS creates a new Virtual DNS cluster. +// +// API reference: https://api.cloudflare.com/#virtual-dns-users--create-a-virtual-dns-cluster +func (api *API) CreateVirtualDNS(v *VirtualDNS) (*VirtualDNS, error) { + res, err := api.makeRequest("POST", "/user/virtual_dns", v) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &VirtualDNSResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response.Result, nil +} + +// VirtualDNS fetches a single virtual DNS cluster. +// +// API reference: https://api.cloudflare.com/#virtual-dns-users--get-a-virtual-dns-cluster +func (api *API) VirtualDNS(virtualDNSID string) (*VirtualDNS, error) { + uri := "/user/virtual_dns/" + virtualDNSID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &VirtualDNSResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response.Result, nil +} + +// ListVirtualDNS lists the virtual DNS clusters associated with an account. +// +// API reference: https://api.cloudflare.com/#virtual-dns-users--get-virtual-dns-clusters +func (api *API) ListVirtualDNS() ([]*VirtualDNS, error) { + res, err := api.makeRequest("GET", "/user/virtual_dns", nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &VirtualDNSListResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response.Result, nil +} + +// UpdateVirtualDNS updates a Virtual DNS cluster. +// +// API reference: https://api.cloudflare.com/#virtual-dns-users--modify-a-virtual-dns-cluster +func (api *API) UpdateVirtualDNS(virtualDNSID string, vv VirtualDNS) error { + uri := "/user/virtual_dns/" + virtualDNSID + res, err := api.makeRequest("PUT", uri, vv) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + response := &VirtualDNSResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + + return nil +} + +// DeleteVirtualDNS deletes a Virtual DNS cluster. Note that this cannot be +// undone, and will stop all traffic to that cluster. +// +// API reference: https://api.cloudflare.com/#virtual-dns-users--delete-a-virtual-dns-cluster +func (api *API) DeleteVirtualDNS(virtualDNSID string) error { + uri := "/user/virtual_dns/" + virtualDNSID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return errors.Wrap(err, errMakeRequestError) + } + + response := &VirtualDNSResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return errors.Wrap(err, errUnmarshalError) + } + + return nil +} + +// encode encodes non-nil fields into URL encoded form. +func (o VirtualDNSUserAnalyticsOptions) encode() string { + v := url.Values{} + if o.Since != nil { + v.Set("since", (*o.Since).UTC().Format(time.RFC3339)) + } + if o.Until != nil { + v.Set("until", (*o.Until).UTC().Format(time.RFC3339)) + } + if o.Metrics != nil { + v.Set("metrics", strings.Join(o.Metrics, ",")) + } + return v.Encode() +} + +// VirtualDNSUserAnalytics retrieves analytics report for a specified dimension and time range +func (api *API) VirtualDNSUserAnalytics(virtualDNSID string, o VirtualDNSUserAnalyticsOptions) (VirtualDNSAnalytics, error) { + uri := "/user/virtual_dns/" + virtualDNSID + "/dns_analytics/report?" + o.encode() + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return VirtualDNSAnalytics{}, errors.Wrap(err, errMakeRequestError) + } + + response := VirtualDNSAnalyticsResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return VirtualDNSAnalytics{}, errors.Wrap(err, errUnmarshalError) + } + + return response.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/waf.go b/vendor/github.com/cloudflare/cloudflare-go/waf.go new file mode 100644 index 000000000000..9b67f79a7ad5 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/waf.go @@ -0,0 +1,300 @@ +package cloudflare + +import ( + "encoding/json" + + "github.com/pkg/errors" +) + +// WAFPackage represents a WAF package configuration. +type WAFPackage struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + ZoneID string `json:"zone_id"` + DetectionMode string `json:"detection_mode"` + Sensitivity string `json:"sensitivity"` + ActionMode string `json:"action_mode"` +} + +// WAFPackagesResponse represents the response from the WAF packages endpoint. +type WAFPackagesResponse struct { + Response + Result []WAFPackage `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFPackageResponse represents the response from the WAF package endpoint. +type WAFPackageResponse struct { + Response + Result WAFPackage `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFPackageOptions represents options to edit a WAF package. +type WAFPackageOptions struct { + Sensitivity string `json:"sensitivity,omitempty"` + ActionMode string `json:"action_mode,omitempty"` +} + +// WAFGroup represents a WAF rule group. +type WAFGroup struct { + ID string `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + RulesCount int `json:"rules_count"` + ModifiedRulesCount int `json:"modified_rules_count"` + PackageID string `json:"package_id"` + Mode string `json:"mode"` + AllowedModes []string `json:"allowed_modes"` +} + +// WAFGroupsResponse represents the response from the WAF groups endpoint. +type WAFGroupsResponse struct { + Response + Result []WAFGroup `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFGroupResponse represents the response from the WAF group endpoint. +type WAFGroupResponse struct { + Response + Result WAFGroup `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFRule represents a WAF rule. +type WAFRule struct { + ID string `json:"id"` + Description string `json:"description"` + Priority string `json:"priority"` + PackageID string `json:"package_id"` + Group struct { + ID string `json:"id"` + Name string `json:"name"` + } `json:"group"` + Mode string `json:"mode"` + DefaultMode string `json:"default_mode"` + AllowedModes []string `json:"allowed_modes"` +} + +// WAFRulesResponse represents the response from the WAF rules endpoint. +type WAFRulesResponse struct { + Response + Result []WAFRule `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFRuleResponse represents the response from the WAF rule endpoint. +type WAFRuleResponse struct { + Response + Result WAFRule `json:"result"` + ResultInfo ResultInfo `json:"result_info"` +} + +// WAFRuleOptions is a subset of WAFRule, for editable options. +type WAFRuleOptions struct { + Mode string `json:"mode"` +} + +// ListWAFPackages returns a slice of the WAF packages for the given zone. +// +// API Reference: https://api.cloudflare.com/#waf-rule-packages-list-firewall-packages +func (api *API) ListWAFPackages(zoneID string) ([]WAFPackage, error) { + var p WAFPackagesResponse + var packages []WAFPackage + var res []byte + var err error + uri := "/zones/" + zoneID + "/firewall/waf/packages" + res, err = api.makeRequest("GET", uri, nil) + if err != nil { + return []WAFPackage{}, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &p) + if err != nil { + return []WAFPackage{}, errors.Wrap(err, errUnmarshalError) + } + if !p.Success { + // TODO: Provide an actual error message instead of always returning nil + return []WAFPackage{}, err + } + for pi := range p.Result { + packages = append(packages, p.Result[pi]) + } + return packages, nil +} + +// WAFPackage returns a WAF package for the given zone. +// +// API Reference: https://api.cloudflare.com/#waf-rule-packages-firewall-package-details +func (api *API) WAFPackage(zoneID, packageID string) (WAFPackage, error) { + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return WAFPackage{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFPackageResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFPackage{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UpdateWAFPackage lets you update the a WAF Package. +// +// API Reference: https://api.cloudflare.com/#waf-rule-packages-edit-firewall-package +func (api *API) UpdateWAFPackage(zoneID, packageID string, opts WAFPackageOptions) (WAFPackage, error) { + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + res, err := api.makeRequest("PATCH", uri, opts) + if err != nil { + return WAFPackage{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFPackageResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFPackage{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListWAFGroups returns a slice of the WAF groups for the given WAF package. +// +// API Reference: https://api.cloudflare.com/#waf-rule-groups-list-rule-groups +func (api *API) ListWAFGroups(zoneID, packageID string) ([]WAFGroup, error) { + var groups []WAFGroup + var res []byte + var err error + + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/groups" + res, err = api.makeRequest("GET", uri, nil) + if err != nil { + return []WAFGroup{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFGroupsResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []WAFGroup{}, errors.Wrap(err, errUnmarshalError) + } + + if !r.Success { + // TODO: Provide an actual error message instead of always returning nil + return []WAFGroup{}, err + } + + for gi := range r.Result { + groups = append(groups, r.Result[gi]) + } + return groups, nil +} + +// WAFGroup returns a WAF rule group from the given WAF package. +// +// API Reference: https://api.cloudflare.com/#waf-rule-groups-rule-group-details +func (api *API) WAFGroup(zoneID, packageID, groupID string) (WAFGroup, error) { + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/groups/" + groupID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return WAFGroup{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFGroupResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFGroup{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UpdateWAFGroup lets you update the mode of a WAF Group. +// +// API Reference: https://api.cloudflare.com/#waf-rule-groups-edit-rule-group +func (api *API) UpdateWAFGroup(zoneID, packageID, groupID, mode string) (WAFGroup, error) { + opts := WAFRuleOptions{Mode: mode} + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/groups/" + groupID + res, err := api.makeRequest("PATCH", uri, opts) + if err != nil { + return WAFGroup{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFGroupResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFGroup{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ListWAFRules returns a slice of the WAF rules for the given WAF package. +// +// API Reference: https://api.cloudflare.com/#waf-rules-list-rules +func (api *API) ListWAFRules(zoneID, packageID string) ([]WAFRule, error) { + var rules []WAFRule + var res []byte + var err error + + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/rules" + res, err = api.makeRequest("GET", uri, nil) + if err != nil { + return []WAFRule{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFRulesResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []WAFRule{}, errors.Wrap(err, errUnmarshalError) + } + + if !r.Success { + // TODO: Provide an actual error message instead of always returning nil + return []WAFRule{}, err + } + + for ri := range r.Result { + rules = append(rules, r.Result[ri]) + } + return rules, nil +} + +// WAFRule returns a WAF rule from the given WAF package. +// +// API Reference: https://api.cloudflare.com/#waf-rules-rule-details +func (api *API) WAFRule(zoneID, packageID, ruleID string) (WAFRule, error) { + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/rules/" + ruleID + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return WAFRule{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFRuleResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFRule{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UpdateWAFRule lets you update the mode of a WAF Rule. +// +// API Reference: https://api.cloudflare.com/#waf-rules-edit-rule +func (api *API) UpdateWAFRule(zoneID, packageID, ruleID, mode string) (WAFRule, error) { + opts := WAFRuleOptions{Mode: mode} + uri := "/zones/" + zoneID + "/firewall/waf/packages/" + packageID + "/rules/" + ruleID + res, err := api.makeRequest("PATCH", uri, opts) + if err != nil { + return WAFRule{}, errors.Wrap(err, errMakeRequestError) + } + + var r WAFRuleResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WAFRule{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/workers.go b/vendor/github.com/cloudflare/cloudflare-go/workers.go new file mode 100644 index 000000000000..1ab795ec4ef8 --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/workers.go @@ -0,0 +1,314 @@ +package cloudflare + +import ( + "encoding/json" + "net/http" + "time" + + "github.com/pkg/errors" +) + +// WorkerRequestParams provides parameters for worker requests for both enterprise and standard requests +type WorkerRequestParams struct { + ZoneID string + ScriptName string +} + +// WorkerRoute aka filters are patterns used to enable or disable workers that match requests. +// +// API reference: https://api.cloudflare.com/#worker-filters-properties +type WorkerRoute struct { + ID string `json:"id,omitempty"` + Pattern string `json:"pattern"` + Enabled bool `json:"enabled"` + Script string `json:"script,omitempty"` +} + +// WorkerRoutesResponse embeds Response struct and slice of WorkerRoutes +type WorkerRoutesResponse struct { + Response + Routes []WorkerRoute `json:"result"` +} + +// WorkerRouteResponse embeds Response struct and a single WorkerRoute +type WorkerRouteResponse struct { + Response + WorkerRoute `json:"result"` +} + +// WorkerScript Cloudflare Worker struct with metadata +type WorkerScript struct { + WorkerMetaData + Script string `json:"script"` +} + +// WorkerMetaData contains worker script information such as size, creation & modification dates +type WorkerMetaData struct { + ID string `json:"id,omitempty"` + ETAG string `json:"etag,omitempty"` + Size int `json:"size,omitempty"` + CreatedOn time.Time `json:"created_on,omitempty"` + ModifiedOn time.Time `json:"modified_on,omitempty"` +} + +// WorkerListResponse wrapper struct for API response to worker script list API call +type WorkerListResponse struct { + Response + WorkerList []WorkerMetaData `json:"result"` +} + +// WorkerScriptResponse wrapper struct for API response to worker script calls +type WorkerScriptResponse struct { + Response + WorkerScript `json:"result"` +} + +// DeleteWorker deletes worker for a zone. +// +// API reference: https://api.cloudflare.com/#worker-script-delete-worker +func (api *API) DeleteWorker(requestParams *WorkerRequestParams) (WorkerScriptResponse, error) { + // if ScriptName is provided we will treat as org request + if requestParams.ScriptName != "" { + return api.deleteWorkerWithName(requestParams.ScriptName) + } + uri := "/zones/" + requestParams.ZoneID + "/workers/script" + res, err := api.makeRequest("DELETE", uri, nil) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return r, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// DeleteWorkerWithName deletes worker for a zone. +// This is an enterprise only feature https://developers.cloudflare.com/workers/api/config-api-for-enterprise +// account must be specified as api option https://godoc.org/github.com/cloudflare/cloudflare-go#UsingAccount +// +// API reference: https://api.cloudflare.com/#worker-script-delete-worker +func (api *API) deleteWorkerWithName(scriptName string) (WorkerScriptResponse, error) { + if api.AccountID == "" { + return WorkerScriptResponse{}, errors.New("account ID required for enterprise only request") + } + uri := "/accounts/" + api.AccountID + "/workers/scripts/" + scriptName + res, err := api.makeRequest("DELETE", uri, nil) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return r, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// DownloadWorker fetch raw script content for your worker returns []byte containing worker code js +// +// API reference: https://api.cloudflare.com/#worker-script-download-worker +func (api *API) DownloadWorker(requestParams *WorkerRequestParams) (WorkerScriptResponse, error) { + if requestParams.ScriptName != "" { + return api.downloadWorkerWithName(requestParams.ScriptName) + } + uri := "/zones/" + requestParams.ZoneID + "/workers/script" + res, err := api.makeRequest("GET", uri, nil) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + r.Script = string(res) + r.Success = true + return r, nil +} + +// DownloadWorkerWithName fetch raw script content for your worker returns string containing worker code js +// This is an enterprise only feature https://developers.cloudflare.com/workers/api/config-api-for-enterprise/ +// +// API reference: https://api.cloudflare.com/#worker-script-download-worker +func (api *API) downloadWorkerWithName(scriptName string) (WorkerScriptResponse, error) { + if api.AccountID == "" { + return WorkerScriptResponse{}, errors.New("account ID required for enterprise only request") + } + uri := "/accounts/" + api.AccountID + "/workers/scripts/" + scriptName + res, err := api.makeRequest("GET", uri, nil) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + r.Script = string(res) + r.Success = true + return r, nil +} + +// ListWorkerScripts returns list of worker scripts for given account. +// +// This is an enterprise only feature https://developers.cloudflare.com/workers/api/config-api-for-enterprise +// +// API reference: https://developers.cloudflare.com/workers/api/config-api-for-enterprise/ +func (api *API) ListWorkerScripts() (WorkerListResponse, error) { + if api.AccountID == "" { + return WorkerListResponse{}, errors.New("account ID required for enterprise only request") + } + uri := "/accounts/" + api.AccountID + "/workers/scripts" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return WorkerListResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r WorkerListResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WorkerListResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// UploadWorker push raw script content for your worker. +// +// API reference: https://api.cloudflare.com/#worker-script-upload-worker +func (api *API) UploadWorker(requestParams *WorkerRequestParams, data string) (WorkerScriptResponse, error) { + if requestParams.ScriptName != "" { + return api.uploadWorkerWithName(requestParams.ScriptName, data) + } + uri := "/zones/" + requestParams.ZoneID + "/workers/script" + headers := make(http.Header) + headers.Set("Content-Type", "application/javascript") + res, err := api.makeRequestWithHeaders("PUT", uri, []byte(data), headers) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return r, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// UploadWorkerWithName push raw script content for your worker. +// +// This is an enterprise only feature https://developers.cloudflare.com/workers/api/config-api-for-enterprise/ +// +// API reference: https://api.cloudflare.com/#worker-script-upload-worker +func (api *API) uploadWorkerWithName(scriptName string, data string) (WorkerScriptResponse, error) { + if api.AccountID == "" { + return WorkerScriptResponse{}, errors.New("account ID required for enterprise only request") + } + uri := "/accounts/" + api.AccountID + "/workers/scripts/" + scriptName + headers := make(http.Header) + headers.Set("Content-Type", "application/javascript") + res, err := api.makeRequestWithHeaders("PUT", uri, []byte(data), headers) + var r WorkerScriptResponse + if err != nil { + return r, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return r, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// CreateWorkerRoute creates worker route for a zone +// +// API reference: https://api.cloudflare.com/#worker-filters-create-filter +func (api *API) CreateWorkerRoute(zoneID string, route WorkerRoute) (WorkerRouteResponse, error) { + // Check whether a script name is defined in order to determine whether + // to use the single-script or multi-script endpoint. + pathComponent := "filters" + if route.Script != "" { + if api.AccountID == "" { + return WorkerRouteResponse{}, errors.New("account ID required for enterprise only request") + } + pathComponent = "routes" + } + + uri := "/zones/" + zoneID + "/workers/" + pathComponent + res, err := api.makeRequest("POST", uri, route) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r WorkerRouteResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// DeleteWorkerRoute deletes worker route for a zone +// +// API reference: https://api.cloudflare.com/#worker-filters-delete-filter +func (api *API) DeleteWorkerRoute(zoneID string, routeID string) (WorkerRouteResponse, error) { + // For deleting a route, it doesn't matter whether we use the + // single-script or multi-script endpoint + uri := "/zones/" + zoneID + "/workers/filters/" + routeID + res, err := api.makeRequest("DELETE", uri, nil) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r WorkerRouteResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// ListWorkerRoutes returns list of worker routes +// +// API reference: https://api.cloudflare.com/#worker-filters-list-filters +func (api *API) ListWorkerRoutes(zoneID string) (WorkerRoutesResponse, error) { + pathComponent := "filters" + if api.AccountID != "" { + pathComponent = "routes" + } + uri := "/zones/" + zoneID + "/workers/" + pathComponent + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return WorkerRoutesResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r WorkerRoutesResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WorkerRoutesResponse{}, errors.Wrap(err, errUnmarshalError) + } + for i := range r.Routes { + route := &r.Routes[i] + // The Enabled flag will not be set in the multi-script API response + // so we manually set it to true if the script name is not empty + // in case any multi-script customers rely on the Enabled field + if route.Script != "" { + route.Enabled = true + } + } + return r, nil +} + +// UpdateWorkerRoute updates worker route for a zone. +// +// API reference: https://api.cloudflare.com/#worker-filters-update-filter +func (api *API) UpdateWorkerRoute(zoneID string, routeID string, route WorkerRoute) (WorkerRouteResponse, error) { + // Check whether a script name is defined in order to determine whether + // to use the single-script or multi-script endpoint. + pathComponent := "filters" + if route.Script != "" { + if api.AccountID == "" { + return WorkerRouteResponse{}, errors.New("account ID required for enterprise only request") + } + pathComponent = "routes" + } + uri := "/zones/" + zoneID + "/workers/" + pathComponent + "/" + routeID + res, err := api.makeRequest("PUT", uri, route) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r WorkerRouteResponse + err = json.Unmarshal(res, &r) + if err != nil { + return WorkerRouteResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/workers_kv.go b/vendor/github.com/cloudflare/cloudflare-go/workers_kv.go new file mode 100644 index 000000000000..92197af0861a --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/workers_kv.go @@ -0,0 +1,192 @@ +package cloudflare + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + "net/url" + + "github.com/pkg/errors" +) + +// WorkersKVNamespaceRequest provides parameters for creating and updating storage namespaces +type WorkersKVNamespaceRequest struct { + Title string `json:"title"` +} + +// WorkersKVNamespaceResponse is the response received when creating storage namespaces +type WorkersKVNamespaceResponse struct { + Response + Result WorkersKVNamespace `json:"result"` +} + +// WorkersKVNamespace contains the unique identifier and title of a storage namespace +type WorkersKVNamespace struct { + ID string `json:"id"` + Title string `json:"title"` +} + +// ListWorkersKVNamespacesResponse contains a slice of storage namespaces associated with an +// account, pagination information, and an embedded response struct +type ListWorkersKVNamespacesResponse struct { + Response + Result []WorkersKVNamespace `json:"result"` + ResultInfo `json:"result_info"` +} + +// StorageKey is a key name used to identify a storage value +type StorageKey struct { + Name string `json:"name"` +} + +// ListStorageKeysResponse contains a slice of keys belonging to a storage namespace, +// pagination information, and an embedded response struct +type ListStorageKeysResponse struct { + Response + Result []StorageKey `json:"result"` + ResultInfo `json:"result_info"` +} + +// CreateWorkersKVNamespace creates a namespace under the given title. +// A 400 is returned if the account already owns a namespace with this title. +// A namespace must be explicitly deleted to be replaced. +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-create-a-namespace +func (api *API) CreateWorkersKVNamespace(ctx context.Context, req *WorkersKVNamespaceRequest) (WorkersKVNamespaceResponse, error) { + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces", api.AccountID) + res, err := api.makeRequestContext(ctx, http.MethodPost, uri, req) + if err != nil { + return WorkersKVNamespaceResponse{}, errors.Wrap(err, errMakeRequestError) + } + + result := WorkersKVNamespaceResponse{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + + return result, err +} + +// ListWorkersKVNamespaces lists storage namespaces +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-list-namespaces +func (api *API) ListWorkersKVNamespaces(ctx context.Context) (ListWorkersKVNamespacesResponse, error) { + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces", api.AccountID) + res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) + if err != nil { + return ListWorkersKVNamespacesResponse{}, errors.Wrap(err, errMakeRequestError) + } + + result := ListWorkersKVNamespacesResponse{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + + return result, err +} + +// DeleteWorkersKVNamespace deletes the namespace corresponding to the given ID +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-remove-a-namespace +func (api *API) DeleteWorkersKVNamespace(ctx context.Context, namespaceID string) (Response, error) { + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s", api.AccountID, namespaceID) + res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil) + if err != nil { + return Response{}, errors.Wrap(err, errMakeRequestError) + } + + result := Response{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + + return result, err +} + +// UpdateWorkersKVNamespace modifies a namespace's title +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-rename-a-namespace +func (api *API) UpdateWorkersKVNamespace(ctx context.Context, namespaceID string, req *WorkersKVNamespaceRequest) (Response, error) { + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s", api.AccountID, namespaceID) + res, err := api.makeRequestContext(ctx, http.MethodPut, uri, req) + if err != nil { + return Response{}, errors.Wrap(err, errMakeRequestError) + } + + result := Response{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + + return result, err +} + +// WriteWorkersKV writes a value identified by a key. +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-write-key-value-pair +func (api *API) WriteWorkersKV(ctx context.Context, namespaceID, key string, value []byte) (Response, error) { + key = url.PathEscape(key) + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s/values/%s", api.AccountID, namespaceID, key) + res, err := api.makeRequestWithAuthTypeAndHeaders( + ctx, http.MethodPut, uri, value, api.authType, http.Header{"Content-Type": []string{"application/octet-stream"}}, + ) + if err != nil { + return Response{}, errors.Wrap(err, errMakeRequestError) + } + + result := Response{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + + return result, err +} + +// ReadWorkersKV returns the value associated with the given key in the given namespace +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-read-key-value-pair +func (api API) ReadWorkersKV(ctx context.Context, namespaceID, key string) ([]byte, error) { + key = url.PathEscape(key) + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s/values/%s", api.AccountID, namespaceID, key) + res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + return res, nil +} + +// DeleteWorkersKV deletes a key and value for a provided storage namespace +// +// API reference: https://api.cloudflare.com/#workers-kv-namespace-delete-key-value-pair +func (api API) DeleteWorkersKV(ctx context.Context, namespaceID, key string) (Response, error) { + key = url.PathEscape(key) + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s/values/%s", api.AccountID, namespaceID, key) + res, err := api.makeRequestContext(ctx, http.MethodDelete, uri, nil) + if err != nil { + return Response{}, errors.Wrap(err, errMakeRequestError) + } + + result := Response{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + return result, err +} + +// ListWorkersKVs lists a namespace's keys +// +// API Reference: https://api.cloudflare.com/#workers-kv-namespace-list-a-namespace-s-keys +func (api API) ListWorkersKVs(ctx context.Context, namespaceID string) (ListStorageKeysResponse, error) { + uri := fmt.Sprintf("/accounts/%s/storage/kv/namespaces/%s/keys", api.AccountID, namespaceID) + res, err := api.makeRequestContext(ctx, http.MethodGet, uri, nil) + if err != nil { + return ListStorageKeysResponse{}, errors.Wrap(err, errMakeRequestError) + } + + result := ListStorageKeysResponse{} + if err := json.Unmarshal(res, &result); err != nil { + return result, errors.Wrap(err, errUnmarshalError) + } + return result, err +} diff --git a/vendor/github.com/cloudflare/cloudflare-go/zone.go b/vendor/github.com/cloudflare/cloudflare-go/zone.go new file mode 100644 index 000000000000..28f54a5da36d --- /dev/null +++ b/vendor/github.com/cloudflare/cloudflare-go/zone.go @@ -0,0 +1,740 @@ +package cloudflare + +import ( + "context" + "encoding/json" + "fmt" + "net/url" + "sync" + "time" + + "github.com/pkg/errors" +) + +// Owner describes the resource owner. +type Owner struct { + ID string `json:"id"` + Email string `json:"email"` + Name string `json:"name"` + OwnerType string `json:"type"` +} + +// Zone describes a Cloudflare zone. +type Zone struct { + ID string `json:"id"` + Name string `json:"name"` + // DevMode contains the time in seconds until development expires (if + // positive) or since it expired (if negative). It will be 0 if never used. + DevMode int `json:"development_mode"` + OriginalNS []string `json:"original_name_servers"` + OriginalRegistrar string `json:"original_registrar"` + OriginalDNSHost string `json:"original_dnshost"` + CreatedOn time.Time `json:"created_on"` + ModifiedOn time.Time `json:"modified_on"` + NameServers []string `json:"name_servers"` + Owner Owner `json:"owner"` + Permissions []string `json:"permissions"` + Plan ZonePlan `json:"plan"` + PlanPending ZonePlan `json:"plan_pending,omitempty"` + Status string `json:"status"` + Paused bool `json:"paused"` + Type string `json:"type"` + Host struct { + Name string + Website string + } `json:"host"` + VanityNS []string `json:"vanity_name_servers"` + Betas []string `json:"betas"` + DeactReason string `json:"deactivation_reason"` + Meta ZoneMeta `json:"meta"` + Account Account `json:"account"` +} + +// ZoneMeta describes metadata about a zone. +type ZoneMeta struct { + // custom_certificate_quota is broken - sometimes it's a string, sometimes a number! + // CustCertQuota int `json:"custom_certificate_quota"` + PageRuleQuota int `json:"page_rule_quota"` + WildcardProxiable bool `json:"wildcard_proxiable"` + PhishingDetected bool `json:"phishing_detected"` +} + +// ZonePlan contains the plan information for a zone. +type ZonePlan struct { + ZonePlanCommon + IsSubscribed bool `json:"is_subscribed"` + CanSubscribe bool `json:"can_subscribe"` + LegacyID string `json:"legacy_id"` + LegacyDiscount bool `json:"legacy_discount"` + ExternallyManaged bool `json:"externally_managed"` +} + +// ZoneRatePlan contains the plan information for a zone. +type ZoneRatePlan struct { + ZonePlanCommon + Components []zoneRatePlanComponents `json:"components,omitempty"` +} + +// ZonePlanCommon contains fields used by various Plan endpoints +type ZonePlanCommon struct { + ID string `json:"id"` + Name string `json:"name,omitempty"` + Price int `json:"price,omitempty"` + Currency string `json:"currency,omitempty"` + Frequency string `json:"frequency,omitempty"` +} + +type zoneRatePlanComponents struct { + Name string `json:"name"` + Default int `json:"Default"` + UnitPrice int `json:"unit_price"` +} + +// ZoneID contains only the zone ID. +type ZoneID struct { + ID string `json:"id"` +} + +// ZoneResponse represents the response from the Zone endpoint containing a single zone. +type ZoneResponse struct { + Response + Result Zone `json:"result"` +} + +// ZonesResponse represents the response from the Zone endpoint containing an array of zones. +type ZonesResponse struct { + Response + Result []Zone `json:"result"` + ResultInfo `json:"result_info"` +} + +// ZoneIDResponse represents the response from the Zone endpoint, containing only a zone ID. +type ZoneIDResponse struct { + Response + Result ZoneID `json:"result"` +} + +// AvailableZoneRatePlansResponse represents the response from the Available Rate Plans endpoint. +type AvailableZoneRatePlansResponse struct { + Response + Result []ZoneRatePlan `json:"result"` + ResultInfo `json:"result_info"` +} + +// AvailableZonePlansResponse represents the response from the Available Plans endpoint. +type AvailableZonePlansResponse struct { + Response + Result []ZonePlan `json:"result"` + ResultInfo +} + +// ZoneRatePlanResponse represents the response from the Plan Details endpoint. +type ZoneRatePlanResponse struct { + Response + Result ZoneRatePlan `json:"result"` +} + +// ZoneSetting contains settings for a zone. +type ZoneSetting struct { + ID string `json:"id"` + Editable bool `json:"editable"` + ModifiedOn string `json:"modified_on"` + Value interface{} `json:"value"` + TimeRemaining int `json:"time_remaining"` +} + +// ZoneSettingResponse represents the response from the Zone Setting endpoint. +type ZoneSettingResponse struct { + Response + Result []ZoneSetting `json:"result"` +} + +// ZoneSSLSetting contains ssl setting for a zone. +type ZoneSSLSetting struct { + ID string `json:"id"` + Editable bool `json:"editable"` + ModifiedOn string `json:"modified_on"` + Value string `json:"value"` + CertificateStatus string `json:"certificate_status"` +} + +// ZoneSSLSettingResponse represents the response from the Zone SSL Setting +// endpoint. +type ZoneSSLSettingResponse struct { + Response + Result ZoneSSLSetting `json:"result"` +} + +// ZoneAnalyticsData contains totals and timeseries analytics data for a zone. +type ZoneAnalyticsData struct { + Totals ZoneAnalytics `json:"totals"` + Timeseries []ZoneAnalytics `json:"timeseries"` +} + +// zoneAnalyticsDataResponse represents the response from the Zone Analytics Dashboard endpoint. +type zoneAnalyticsDataResponse struct { + Response + Result ZoneAnalyticsData `json:"result"` +} + +// ZoneAnalyticsColocation contains analytics data by datacenter. +type ZoneAnalyticsColocation struct { + ColocationID string `json:"colo_id"` + Timeseries []ZoneAnalytics `json:"timeseries"` +} + +// zoneAnalyticsColocationResponse represents the response from the Zone Analytics By Co-location endpoint. +type zoneAnalyticsColocationResponse struct { + Response + Result []ZoneAnalyticsColocation `json:"result"` +} + +// ZoneAnalytics contains analytics data for a zone. +type ZoneAnalytics struct { + Since time.Time `json:"since"` + Until time.Time `json:"until"` + Requests struct { + All int `json:"all"` + Cached int `json:"cached"` + Uncached int `json:"uncached"` + ContentType map[string]int `json:"content_type"` + Country map[string]int `json:"country"` + SSL struct { + Encrypted int `json:"encrypted"` + Unencrypted int `json:"unencrypted"` + } `json:"ssl"` + HTTPStatus map[string]int `json:"http_status"` + } `json:"requests"` + Bandwidth struct { + All int `json:"all"` + Cached int `json:"cached"` + Uncached int `json:"uncached"` + ContentType map[string]int `json:"content_type"` + Country map[string]int `json:"country"` + SSL struct { + Encrypted int `json:"encrypted"` + Unencrypted int `json:"unencrypted"` + } `json:"ssl"` + } `json:"bandwidth"` + Threats struct { + All int `json:"all"` + Country map[string]int `json:"country"` + Type map[string]int `json:"type"` + } `json:"threats"` + Pageviews struct { + All int `json:"all"` + SearchEngines map[string]int `json:"search_engines"` + } `json:"pageviews"` + Uniques struct { + All int `json:"all"` + } +} + +// ZoneAnalyticsOptions represents the optional parameters in Zone Analytics +// endpoint requests. +type ZoneAnalyticsOptions struct { + Since *time.Time + Until *time.Time + Continuous *bool +} + +// PurgeCacheRequest represents the request format made to the purge endpoint. +type PurgeCacheRequest struct { + Everything bool `json:"purge_everything,omitempty"` + // Purge by filepath (exact match). Limit of 30 + Files []string `json:"files,omitempty"` + // Purge by Tag (Enterprise only): + // https://support.cloudflare.com/hc/en-us/articles/206596608-How-to-Purge-Cache-Using-Cache-Tags-Enterprise-only- + Tags []string `json:"tags,omitempty"` + // Purge by hostname - e.g. "assets.example.com" + Hosts []string `json:"hosts,omitempty"` +} + +// PurgeCacheResponse represents the response from the purge endpoint. +type PurgeCacheResponse struct { + Response + Result struct { + ID string `json:"id"` + } `json:"result"` +} + +// newZone describes a new zone. +type newZone struct { + Name string `json:"name"` + JumpStart bool `json:"jump_start"` + Type string `json:"type"` + // We use a pointer to get a nil type when the field is empty. + // This allows us to completely omit this with json.Marshal(). + Account *Account `json:"organization,omitempty"` +} + +// FallbackOrigin describes a fallback origin +type FallbackOrigin struct { + Value string `json:"value"` + ID string `json:"id,omitempty"` +} + +// FallbackOriginResponse represents the response from the fallback_origin endpoint +type FallbackOriginResponse struct { + Response + Result FallbackOrigin `json:"result"` +} + +// CreateZone creates a zone on an account. +// +// Setting jumpstart to true will attempt to automatically scan for existing +// DNS records. Setting this to false will create the zone with no DNS records. +// +// If account is non-empty, it must have at least the ID field populated. +// This will add the new zone to the specified multi-user account. +// +// API reference: https://api.cloudflare.com/#zone-create-a-zone +func (api *API) CreateZone(name string, jumpstart bool, account Account, zoneType string) (Zone, error) { + var newzone newZone + newzone.Name = name + newzone.JumpStart = jumpstart + if account.ID != "" { + newzone.Account = &account + } + + if zoneType == "partial" { + newzone.Type = "partial" + } else { + newzone.Type = "full" + } + + res, err := api.makeRequest("POST", "/zones", newzone) + if err != nil { + return Zone{}, errors.Wrap(err, errMakeRequestError) + } + + var r ZoneResponse + err = json.Unmarshal(res, &r) + if err != nil { + return Zone{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ZoneActivationCheck initiates another zone activation check for newly-created zones. +// +// API reference: https://api.cloudflare.com/#zone-initiate-another-zone-activation-check +func (api *API) ZoneActivationCheck(zoneID string) (Response, error) { + res, err := api.makeRequest("PUT", "/zones/"+zoneID+"/activation_check", nil) + if err != nil { + return Response{}, errors.Wrap(err, errMakeRequestError) + } + var r Response + err = json.Unmarshal(res, &r) + if err != nil { + return Response{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// ListZones lists zones on an account. Optionally takes a list of zone names +// to filter against. +// +// API reference: https://api.cloudflare.com/#zone-list-zones +func (api *API) ListZones(z ...string) ([]Zone, error) { + v := url.Values{} + var res []byte + var r ZonesResponse + var zones []Zone + var err error + if len(z) > 0 { + for _, zone := range z { + v.Set("name", zone) + res, err = api.makeRequest("GET", "/zones?"+v.Encode(), nil) + if err != nil { + return []Zone{}, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return []Zone{}, errors.Wrap(err, errUnmarshalError) + } + if !r.Success { + // TODO: Provide an actual error message instead of always returning nil + return []Zone{}, err + } + for zi := range r.Result { + zones = append(zones, r.Result[zi]) + } + } + } else { + res, err = api.makeRequest("GET", "/zones?per_page=50", nil) + if err != nil { + return []Zone{}, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return []Zone{}, errors.Wrap(err, errUnmarshalError) + } + + totalPageCount := r.TotalPages + var wg sync.WaitGroup + wg.Add(totalPageCount) + errc := make(chan error) + + for i := 1; i <= totalPageCount; i++ { + go func(pageNumber int) error { + res, err = api.makeRequest("GET", fmt.Sprintf("/zones?per_page=50&page=%d", pageNumber), nil) + if err != nil { + errc <- err + } + + err = json.Unmarshal(res, &r) + if err != nil { + errc <- err + } + + for _, zone := range r.Result { + zones = append(zones, zone) + } + + select { + case err := <-errc: + return err + default: + wg.Done() + } + + return nil + }(i) + } + + wg.Wait() + } + + return zones, nil +} + +// ListZonesContext lists zones on an account. Optionally takes a list of ReqOptions. +func (api *API) ListZonesContext(ctx context.Context, opts ...ReqOption) (r ZonesResponse, err error) { + var res []byte + opt := reqOption{ + params: url.Values{}, + } + for _, of := range opts { + of(&opt) + } + + res, err = api.makeRequestContext(ctx, "GET", "/zones?"+opt.params.Encode(), nil) + if err != nil { + return ZonesResponse{}, errors.Wrap(err, errMakeRequestError) + } + err = json.Unmarshal(res, &r) + if err != nil { + return ZonesResponse{}, errors.Wrap(err, errUnmarshalError) + } + + return r, nil +} + +// ZoneDetails fetches information about a zone. +// +// API reference: https://api.cloudflare.com/#zone-zone-details +func (api *API) ZoneDetails(zoneID string) (Zone, error) { + res, err := api.makeRequest("GET", "/zones/"+zoneID, nil) + if err != nil { + return Zone{}, errors.Wrap(err, errMakeRequestError) + } + var r ZoneResponse + err = json.Unmarshal(res, &r) + if err != nil { + return Zone{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ZoneOptions is a subset of Zone, for editable options. +type ZoneOptions struct { + Paused *bool `json:"paused,omitempty"` + VanityNS []string `json:"vanity_name_servers,omitempty"` + Plan *ZonePlan `json:"plan,omitempty"` +} + +// ZoneSetPaused pauses Cloudflare service for the entire zone, sending all +// traffic direct to the origin. +func (api *API) ZoneSetPaused(zoneID string, paused bool) (Zone, error) { + zoneopts := ZoneOptions{Paused: &paused} + zone, err := api.EditZone(zoneID, zoneopts) + if err != nil { + return Zone{}, err + } + + return zone, nil +} + +// ZoneSetVanityNS sets custom nameservers for the zone. +// These names must be within the same zone. +func (api *API) ZoneSetVanityNS(zoneID string, ns []string) (Zone, error) { + zoneopts := ZoneOptions{VanityNS: ns} + zone, err := api.EditZone(zoneID, zoneopts) + if err != nil { + return Zone{}, err + } + + return zone, nil +} + +// ZoneSetPlan changes the zone plan. +func (api *API) ZoneSetPlan(zoneID string, plan ZonePlan) (Zone, error) { + zoneopts := ZoneOptions{Plan: &plan} + zone, err := api.EditZone(zoneID, zoneopts) + if err != nil { + return Zone{}, err + } + + return zone, nil +} + +// EditZone edits the given zone. +// +// This is usually called by ZoneSetPaused, ZoneSetVanityNS or ZoneSetPlan. +// +// API reference: https://api.cloudflare.com/#zone-edit-zone-properties +func (api *API) EditZone(zoneID string, zoneOpts ZoneOptions) (Zone, error) { + res, err := api.makeRequest("PATCH", "/zones/"+zoneID, zoneOpts) + if err != nil { + return Zone{}, errors.Wrap(err, errMakeRequestError) + } + var r ZoneResponse + err = json.Unmarshal(res, &r) + if err != nil { + return Zone{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// PurgeEverything purges the cache for the given zone. +// +// Note: this will substantially increase load on the origin server for that +// zone if there is a high cached vs. uncached request ratio. +// +// API reference: https://api.cloudflare.com/#zone-purge-all-files +func (api *API) PurgeEverything(zoneID string) (PurgeCacheResponse, error) { + uri := "/zones/" + zoneID + "/purge_cache" + res, err := api.makeRequest("POST", uri, PurgeCacheRequest{true, nil, nil, nil}) + if err != nil { + return PurgeCacheResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r PurgeCacheResponse + err = json.Unmarshal(res, &r) + if err != nil { + return PurgeCacheResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// PurgeCache purges the cache using the given PurgeCacheRequest (zone/url/tag). +// +// API reference: https://api.cloudflare.com/#zone-purge-individual-files-by-url-and-cache-tags +func (api *API) PurgeCache(zoneID string, pcr PurgeCacheRequest) (PurgeCacheResponse, error) { + uri := "/zones/" + zoneID + "/purge_cache" + res, err := api.makeRequest("POST", uri, pcr) + if err != nil { + return PurgeCacheResponse{}, errors.Wrap(err, errMakeRequestError) + } + var r PurgeCacheResponse + err = json.Unmarshal(res, &r) + if err != nil { + return PurgeCacheResponse{}, errors.Wrap(err, errUnmarshalError) + } + return r, nil +} + +// DeleteZone deletes the given zone. +// +// API reference: https://api.cloudflare.com/#zone-delete-a-zone +func (api *API) DeleteZone(zoneID string) (ZoneID, error) { + res, err := api.makeRequest("DELETE", "/zones/"+zoneID, nil) + if err != nil { + return ZoneID{}, errors.Wrap(err, errMakeRequestError) + } + var r ZoneIDResponse + err = json.Unmarshal(res, &r) + if err != nil { + return ZoneID{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// AvailableZoneRatePlans returns information about all plans available to the specified zone. +// +// API reference: https://api.cloudflare.com/#zone-plan-available-plans +func (api *API) AvailableZoneRatePlans(zoneID string) ([]ZoneRatePlan, error) { + uri := "/zones/" + zoneID + "/available_rate_plans" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []ZoneRatePlan{}, errors.Wrap(err, errMakeRequestError) + } + var r AvailableZoneRatePlansResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []ZoneRatePlan{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// AvailableZonePlans returns information about all plans available to the specified zone. +// +// API reference: https://api.cloudflare.com/#zone-rate-plan-list-available-plans +func (api *API) AvailableZonePlans(zoneID string) ([]ZonePlan, error) { + uri := "/zones/" + zoneID + "/available_plans" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return []ZonePlan{}, errors.Wrap(err, errMakeRequestError) + } + var r AvailableZonePlansResponse + err = json.Unmarshal(res, &r) + if err != nil { + return []ZonePlan{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// encode encodes non-nil fields into URL encoded form. +func (o ZoneAnalyticsOptions) encode() string { + v := url.Values{} + if o.Since != nil { + v.Set("since", (*o.Since).Format(time.RFC3339)) + } + if o.Until != nil { + v.Set("until", (*o.Until).Format(time.RFC3339)) + } + if o.Continuous != nil { + v.Set("continuous", fmt.Sprintf("%t", *o.Continuous)) + } + return v.Encode() +} + +// ZoneAnalyticsDashboard returns zone analytics information. +// +// API reference: https://api.cloudflare.com/#zone-analytics-dashboard +func (api *API) ZoneAnalyticsDashboard(zoneID string, options ZoneAnalyticsOptions) (ZoneAnalyticsData, error) { + uri := "/zones/" + zoneID + "/analytics/dashboard" + "?" + options.encode() + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ZoneAnalyticsData{}, errors.Wrap(err, errMakeRequestError) + } + var r zoneAnalyticsDataResponse + err = json.Unmarshal(res, &r) + if err != nil { + return ZoneAnalyticsData{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ZoneAnalyticsByColocation returns zone analytics information by datacenter. +// +// API reference: https://api.cloudflare.com/#zone-analytics-analytics-by-co-locations +func (api *API) ZoneAnalyticsByColocation(zoneID string, options ZoneAnalyticsOptions) ([]ZoneAnalyticsColocation, error) { + uri := "/zones/" + zoneID + "/analytics/colos" + "?" + options.encode() + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + var r zoneAnalyticsColocationResponse + err = json.Unmarshal(res, &r) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// ZoneSettings returns all of the settings for a given zone. +// +// API reference: https://api.cloudflare.com/#zone-settings-get-all-zone-settings +func (api *API) ZoneSettings(zoneID string) (*ZoneSettingResponse, error) { + uri := "/zones/" + zoneID + "/settings" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneSettingResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// UpdateZoneSettings updates the settings for a given zone. +// +// API reference: https://api.cloudflare.com/#zone-settings-edit-zone-settings-info +func (api *API) UpdateZoneSettings(zoneID string, settings []ZoneSetting) (*ZoneSettingResponse, error) { + uri := "/zones/" + zoneID + "/settings" + res, err := api.makeRequest("PATCH", uri, struct { + Items []ZoneSetting `json:"items"` + }{settings}) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &ZoneSettingResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} + +// ZoneSSLSettings returns information about SSL setting to the specified zone. +// +// API reference: https://api.cloudflare.com/#zone-settings-get-ssl-setting +func (api *API) ZoneSSLSettings(zoneID string) (ZoneSSLSetting, error) { + uri := "/zones/" + zoneID + "/settings/ssl" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return ZoneSSLSetting{}, errors.Wrap(err, errMakeRequestError) + } + var r ZoneSSLSettingResponse + err = json.Unmarshal(res, &r) + if err != nil { + return ZoneSSLSetting{}, errors.Wrap(err, errUnmarshalError) + } + return r.Result, nil +} + +// FallbackOrigin returns information about the fallback origin for the specified zone. +// +// API reference: https://developers.cloudflare.com/ssl/ssl-for-saas/api-calls/#fallback-origin-configuration +func (api *API) FallbackOrigin(zoneID string) (FallbackOrigin, error) { + uri := "/zones/" + zoneID + "/fallback_origin" + res, err := api.makeRequest("GET", uri, nil) + if err != nil { + return FallbackOrigin{}, errors.Wrap(err, errMakeRequestError) + } + + var r FallbackOriginResponse + err = json.Unmarshal(res, &r) + if err != nil { + return FallbackOrigin{}, errors.Wrap(err, errUnmarshalError) + } + + return r.Result, nil +} + +// UpdateFallbackOrigin updates the fallback origin for a given zone. +// +// API reference: https://developers.cloudflare.com/ssl/ssl-for-saas/api-calls/#4-example-patch-to-change-fallback-origin +func (api *API) UpdateFallbackOrigin(zoneID string, fbo FallbackOrigin) (*FallbackOriginResponse, error) { + uri := "/zones/" + zoneID + "/fallback_origin" + res, err := api.makeRequest("PATCH", uri, fbo) + if err != nil { + return nil, errors.Wrap(err, errMakeRequestError) + } + + response := &FallbackOriginResponse{} + err = json.Unmarshal(res, &response) + if err != nil { + return nil, errors.Wrap(err, errUnmarshalError) + } + + return response, nil +} diff --git a/vendor/github.com/codahale/hdrhistogram/README.md b/vendor/github.com/codahale/hdrhistogram/README.md deleted file mode 100644 index 614b197c3dd3..000000000000 --- a/vendor/github.com/codahale/hdrhistogram/README.md +++ /dev/null @@ -1,15 +0,0 @@ -hdrhistogram -============ - -[![Build Status](https://travis-ci.org/codahale/hdrhistogram.png?branch=master)](https://travis-ci.org/codahale/hdrhistogram) - -A pure Go implementation of the [HDR Histogram](https://github.com/HdrHistogram/HdrHistogram). - -> A Histogram that supports recording and analyzing sampled data value counts -> across a configurable integer value range with configurable value precision -> within the range. Value precision is expressed as the number of significant -> digits in the value recording, and provides control over value quantization -> behavior across the value range and the subsequent value resolution at any -> given level. - -For documentation, check [godoc](http://godoc.org/github.com/codahale/hdrhistogram). diff --git a/vendor/github.com/codahale/hdrhistogram/hdr.go b/vendor/github.com/codahale/hdrhistogram/hdr.go deleted file mode 100644 index c97842926d67..000000000000 --- a/vendor/github.com/codahale/hdrhistogram/hdr.go +++ /dev/null @@ -1,564 +0,0 @@ -// Package hdrhistogram provides an implementation of Gil Tene's HDR Histogram -// data structure. The HDR Histogram allows for fast and accurate analysis of -// the extreme ranges of data with non-normal distributions, like latency. -package hdrhistogram - -import ( - "fmt" - "math" -) - -// A Bracket is a part of a cumulative distribution. -type Bracket struct { - Quantile float64 - Count, ValueAt int64 -} - -// A Snapshot is an exported view of a Histogram, useful for serializing them. -// A Histogram can be constructed from it by passing it to Import. -type Snapshot struct { - LowestTrackableValue int64 - HighestTrackableValue int64 - SignificantFigures int64 - Counts []int64 -} - -// A Histogram is a lossy data structure used to record the distribution of -// non-normally distributed data (like latency) with a high degree of accuracy -// and a bounded degree of precision. -type Histogram struct { - lowestTrackableValue int64 - highestTrackableValue int64 - unitMagnitude int64 - significantFigures int64 - subBucketHalfCountMagnitude int32 - subBucketHalfCount int32 - subBucketMask int64 - subBucketCount int32 - bucketCount int32 - countsLen int32 - totalCount int64 - counts []int64 -} - -// New returns a new Histogram instance capable of tracking values in the given -// range and with the given amount of precision. -func New(minValue, maxValue int64, sigfigs int) *Histogram { - if sigfigs < 1 || 5 < sigfigs { - panic(fmt.Errorf("sigfigs must be [1,5] (was %d)", sigfigs)) - } - - largestValueWithSingleUnitResolution := 2 * math.Pow10(sigfigs) - subBucketCountMagnitude := int32(math.Ceil(math.Log2(float64(largestValueWithSingleUnitResolution)))) - - subBucketHalfCountMagnitude := subBucketCountMagnitude - if subBucketHalfCountMagnitude < 1 { - subBucketHalfCountMagnitude = 1 - } - subBucketHalfCountMagnitude-- - - unitMagnitude := int32(math.Floor(math.Log2(float64(minValue)))) - if unitMagnitude < 0 { - unitMagnitude = 0 - } - - subBucketCount := int32(math.Pow(2, float64(subBucketHalfCountMagnitude)+1)) - - subBucketHalfCount := subBucketCount / 2 - subBucketMask := int64(subBucketCount-1) << uint(unitMagnitude) - - // determine exponent range needed to support the trackable value with no - // overflow: - smallestUntrackableValue := int64(subBucketCount) << uint(unitMagnitude) - bucketsNeeded := int32(1) - for smallestUntrackableValue < maxValue { - smallestUntrackableValue <<= 1 - bucketsNeeded++ - } - - bucketCount := bucketsNeeded - countsLen := (bucketCount + 1) * (subBucketCount / 2) - - return &Histogram{ - lowestTrackableValue: minValue, - highestTrackableValue: maxValue, - unitMagnitude: int64(unitMagnitude), - significantFigures: int64(sigfigs), - subBucketHalfCountMagnitude: subBucketHalfCountMagnitude, - subBucketHalfCount: subBucketHalfCount, - subBucketMask: subBucketMask, - subBucketCount: subBucketCount, - bucketCount: bucketCount, - countsLen: countsLen, - totalCount: 0, - counts: make([]int64, countsLen), - } -} - -// ByteSize returns an estimate of the amount of memory allocated to the -// histogram in bytes. -// -// N.B.: This does not take into account the overhead for slices, which are -// small, constant, and specific to the compiler version. -func (h *Histogram) ByteSize() int { - return 6*8 + 5*4 + len(h.counts)*8 -} - -// Merge merges the data stored in the given histogram with the receiver, -// returning the number of recorded values which had to be dropped. -func (h *Histogram) Merge(from *Histogram) (dropped int64) { - i := from.rIterator() - for i.next() { - v := i.valueFromIdx - c := i.countAtIdx - - if h.RecordValues(v, c) != nil { - dropped += c - } - } - - return -} - -// TotalCount returns total number of values recorded. -func (h *Histogram) TotalCount() int64 { - return h.totalCount -} - -// Max returns the approximate maximum recorded value. -func (h *Histogram) Max() int64 { - var max int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - max = i.highestEquivalentValue - } - } - return h.highestEquivalentValue(max) -} - -// Min returns the approximate minimum recorded value. -func (h *Histogram) Min() int64 { - var min int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 && min == 0 { - min = i.highestEquivalentValue - break - } - } - return h.lowestEquivalentValue(min) -} - -// Mean returns the approximate arithmetic mean of the recorded values. -func (h *Histogram) Mean() float64 { - if h.totalCount == 0 { - return 0 - } - var total int64 - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - total += i.countAtIdx * h.medianEquivalentValue(i.valueFromIdx) - } - } - return float64(total) / float64(h.totalCount) -} - -// StdDev returns the approximate standard deviation of the recorded values. -func (h *Histogram) StdDev() float64 { - if h.totalCount == 0 { - return 0 - } - - mean := h.Mean() - geometricDevTotal := 0.0 - - i := h.iterator() - for i.next() { - if i.countAtIdx != 0 { - dev := float64(h.medianEquivalentValue(i.valueFromIdx)) - mean - geometricDevTotal += (dev * dev) * float64(i.countAtIdx) - } - } - - return math.Sqrt(geometricDevTotal / float64(h.totalCount)) -} - -// Reset deletes all recorded values and restores the histogram to its original -// state. -func (h *Histogram) Reset() { - h.totalCount = 0 - for i := range h.counts { - h.counts[i] = 0 - } -} - -// RecordValue records the given value, returning an error if the value is out -// of range. -func (h *Histogram) RecordValue(v int64) error { - return h.RecordValues(v, 1) -} - -// RecordCorrectedValue records the given value, correcting for stalls in the -// recording process. This only works for processes which are recording values -// at an expected interval (e.g., doing jitter analysis). Processes which are -// recording ad-hoc values (e.g., latency for incoming requests) can't take -// advantage of this. -func (h *Histogram) RecordCorrectedValue(v, expectedInterval int64) error { - if err := h.RecordValue(v); err != nil { - return err - } - - if expectedInterval <= 0 || v <= expectedInterval { - return nil - } - - missingValue := v - expectedInterval - for missingValue >= expectedInterval { - if err := h.RecordValue(missingValue); err != nil { - return err - } - missingValue -= expectedInterval - } - - return nil -} - -// RecordValues records n occurrences of the given value, returning an error if -// the value is out of range. -func (h *Histogram) RecordValues(v, n int64) error { - idx := h.countsIndexFor(v) - if idx < 0 || int(h.countsLen) <= idx { - return fmt.Errorf("value %d is too large to be recorded", v) - } - h.counts[idx] += n - h.totalCount += n - - return nil -} - -// ValueAtQuantile returns the recorded value at the given quantile (0..100). -func (h *Histogram) ValueAtQuantile(q float64) int64 { - if q > 100 { - q = 100 - } - - total := int64(0) - countAtPercentile := int64(((q / 100) * float64(h.totalCount)) + 0.5) - - i := h.iterator() - for i.next() { - total += i.countAtIdx - if total >= countAtPercentile { - return h.highestEquivalentValue(i.valueFromIdx) - } - } - - return 0 -} - -// CumulativeDistribution returns an ordered list of brackets of the -// distribution of recorded values. -func (h *Histogram) CumulativeDistribution() []Bracket { - var result []Bracket - - i := h.pIterator(1) - for i.next() { - result = append(result, Bracket{ - Quantile: i.percentile, - Count: i.countToIdx, - ValueAt: i.highestEquivalentValue, - }) - } - - return result -} - -// SignificantFigures returns the significant figures used to create the -// histogram -func (h *Histogram) SignificantFigures() int64 { - return h.significantFigures -} - -// LowestTrackableValue returns the lower bound on values that will be added -// to the histogram -func (h *Histogram) LowestTrackableValue() int64 { - return h.lowestTrackableValue -} - -// HighestTrackableValue returns the upper bound on values that will be added -// to the histogram -func (h *Histogram) HighestTrackableValue() int64 { - return h.highestTrackableValue -} - -// Histogram bar for plotting -type Bar struct { - From, To, Count int64 -} - -// Pretty print as csv for easy plotting -func (b Bar) String() string { - return fmt.Sprintf("%v, %v, %v\n", b.From, b.To, b.Count) -} - -// Distribution returns an ordered list of bars of the -// distribution of recorded values, counts can be normalized to a probability -func (h *Histogram) Distribution() (result []Bar) { - i := h.iterator() - for i.next() { - result = append(result, Bar{ - Count: i.countAtIdx, - From: h.lowestEquivalentValue(i.valueFromIdx), - To: i.highestEquivalentValue, - }) - } - - return result -} - -// Equals returns true if the two Histograms are equivalent, false if not. -func (h *Histogram) Equals(other *Histogram) bool { - switch { - case - h.lowestTrackableValue != other.lowestTrackableValue, - h.highestTrackableValue != other.highestTrackableValue, - h.unitMagnitude != other.unitMagnitude, - h.significantFigures != other.significantFigures, - h.subBucketHalfCountMagnitude != other.subBucketHalfCountMagnitude, - h.subBucketHalfCount != other.subBucketHalfCount, - h.subBucketMask != other.subBucketMask, - h.subBucketCount != other.subBucketCount, - h.bucketCount != other.bucketCount, - h.countsLen != other.countsLen, - h.totalCount != other.totalCount: - return false - default: - for i, c := range h.counts { - if c != other.counts[i] { - return false - } - } - } - return true -} - -// Export returns a snapshot view of the Histogram. This can be later passed to -// Import to construct a new Histogram with the same state. -func (h *Histogram) Export() *Snapshot { - return &Snapshot{ - LowestTrackableValue: h.lowestTrackableValue, - HighestTrackableValue: h.highestTrackableValue, - SignificantFigures: h.significantFigures, - Counts: append([]int64(nil), h.counts...), // copy - } -} - -// Import returns a new Histogram populated from the Snapshot data (which the -// caller must stop accessing). -func Import(s *Snapshot) *Histogram { - h := New(s.LowestTrackableValue, s.HighestTrackableValue, int(s.SignificantFigures)) - h.counts = s.Counts - totalCount := int64(0) - for i := int32(0); i < h.countsLen; i++ { - countAtIndex := h.counts[i] - if countAtIndex > 0 { - totalCount += countAtIndex - } - } - h.totalCount = totalCount - return h -} - -func (h *Histogram) iterator() *iterator { - return &iterator{ - h: h, - subBucketIdx: -1, - } -} - -func (h *Histogram) rIterator() *rIterator { - return &rIterator{ - iterator: iterator{ - h: h, - subBucketIdx: -1, - }, - } -} - -func (h *Histogram) pIterator(ticksPerHalfDistance int32) *pIterator { - return &pIterator{ - iterator: iterator{ - h: h, - subBucketIdx: -1, - }, - ticksPerHalfDistance: ticksPerHalfDistance, - } -} - -func (h *Histogram) sizeOfEquivalentValueRange(v int64) int64 { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - adjustedBucket := bucketIdx - if subBucketIdx >= h.subBucketCount { - adjustedBucket++ - } - return int64(1) << uint(h.unitMagnitude+int64(adjustedBucket)) -} - -func (h *Histogram) valueFromIndex(bucketIdx, subBucketIdx int32) int64 { - return int64(subBucketIdx) << uint(int64(bucketIdx)+h.unitMagnitude) -} - -func (h *Histogram) lowestEquivalentValue(v int64) int64 { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - return h.valueFromIndex(bucketIdx, subBucketIdx) -} - -func (h *Histogram) nextNonEquivalentValue(v int64) int64 { - return h.lowestEquivalentValue(v) + h.sizeOfEquivalentValueRange(v) -} - -func (h *Histogram) highestEquivalentValue(v int64) int64 { - return h.nextNonEquivalentValue(v) - 1 -} - -func (h *Histogram) medianEquivalentValue(v int64) int64 { - return h.lowestEquivalentValue(v) + (h.sizeOfEquivalentValueRange(v) >> 1) -} - -func (h *Histogram) getCountAtIndex(bucketIdx, subBucketIdx int32) int64 { - return h.counts[h.countsIndex(bucketIdx, subBucketIdx)] -} - -func (h *Histogram) countsIndex(bucketIdx, subBucketIdx int32) int32 { - bucketBaseIdx := (bucketIdx + 1) << uint(h.subBucketHalfCountMagnitude) - offsetInBucket := subBucketIdx - h.subBucketHalfCount - return bucketBaseIdx + offsetInBucket -} - -func (h *Histogram) getBucketIndex(v int64) int32 { - pow2Ceiling := bitLen(v | h.subBucketMask) - return int32(pow2Ceiling - int64(h.unitMagnitude) - - int64(h.subBucketHalfCountMagnitude+1)) -} - -func (h *Histogram) getSubBucketIdx(v int64, idx int32) int32 { - return int32(v >> uint(int64(idx)+int64(h.unitMagnitude))) -} - -func (h *Histogram) countsIndexFor(v int64) int { - bucketIdx := h.getBucketIndex(v) - subBucketIdx := h.getSubBucketIdx(v, bucketIdx) - return int(h.countsIndex(bucketIdx, subBucketIdx)) -} - -type iterator struct { - h *Histogram - bucketIdx, subBucketIdx int32 - countAtIdx, countToIdx, valueFromIdx int64 - highestEquivalentValue int64 -} - -func (i *iterator) next() bool { - if i.countToIdx >= i.h.totalCount { - return false - } - - // increment bucket - i.subBucketIdx++ - if i.subBucketIdx >= i.h.subBucketCount { - i.subBucketIdx = i.h.subBucketHalfCount - i.bucketIdx++ - } - - if i.bucketIdx >= i.h.bucketCount { - return false - } - - i.countAtIdx = i.h.getCountAtIndex(i.bucketIdx, i.subBucketIdx) - i.countToIdx += i.countAtIdx - i.valueFromIdx = i.h.valueFromIndex(i.bucketIdx, i.subBucketIdx) - i.highestEquivalentValue = i.h.highestEquivalentValue(i.valueFromIdx) - - return true -} - -type rIterator struct { - iterator - countAddedThisStep int64 -} - -func (r *rIterator) next() bool { - for r.iterator.next() { - if r.countAtIdx != 0 { - r.countAddedThisStep = r.countAtIdx - return true - } - } - return false -} - -type pIterator struct { - iterator - seenLastValue bool - ticksPerHalfDistance int32 - percentileToIteratorTo float64 - percentile float64 -} - -func (p *pIterator) next() bool { - if !(p.countToIdx < p.h.totalCount) { - if p.seenLastValue { - return false - } - - p.seenLastValue = true - p.percentile = 100 - - return true - } - - if p.subBucketIdx == -1 && !p.iterator.next() { - return false - } - - var done = false - for !done { - currentPercentile := (100.0 * float64(p.countToIdx)) / float64(p.h.totalCount) - if p.countAtIdx != 0 && p.percentileToIteratorTo <= currentPercentile { - p.percentile = p.percentileToIteratorTo - halfDistance := math.Trunc(math.Pow(2, math.Trunc(math.Log2(100.0/(100.0-p.percentileToIteratorTo)))+1)) - percentileReportingTicks := float64(p.ticksPerHalfDistance) * halfDistance - p.percentileToIteratorTo += 100.0 / percentileReportingTicks - return true - } - done = !p.iterator.next() - } - - return true -} - -func bitLen(x int64) (n int64) { - for ; x >= 0x8000; x >>= 16 { - n += 16 - } - if x >= 0x80 { - x >>= 8 - n += 8 - } - if x >= 0x8 { - x >>= 4 - n += 4 - } - if x >= 0x2 { - x >>= 2 - n += 2 - } - if x >= 0x1 { - n++ - } - return -} diff --git a/vendor/github.com/codahale/hdrhistogram/window.go b/vendor/github.com/codahale/hdrhistogram/window.go deleted file mode 100644 index dc43612a4b60..000000000000 --- a/vendor/github.com/codahale/hdrhistogram/window.go +++ /dev/null @@ -1,45 +0,0 @@ -package hdrhistogram - -// A WindowedHistogram combines histograms to provide windowed statistics. -type WindowedHistogram struct { - idx int - h []Histogram - m *Histogram - - Current *Histogram -} - -// NewWindowed creates a new WindowedHistogram with N underlying histograms with -// the given parameters. -func NewWindowed(n int, minValue, maxValue int64, sigfigs int) *WindowedHistogram { - w := WindowedHistogram{ - idx: -1, - h: make([]Histogram, n), - m: New(minValue, maxValue, sigfigs), - } - - for i := range w.h { - w.h[i] = *New(minValue, maxValue, sigfigs) - } - w.Rotate() - - return &w -} - -// Merge returns a histogram which includes the recorded values from all the -// sections of the window. -func (w *WindowedHistogram) Merge() *Histogram { - w.m.Reset() - for _, h := range w.h { - w.m.Merge(&h) - } - return w.m -} - -// Rotate resets the oldest histogram and rotates it to be used as the current -// histogram. -func (w *WindowedHistogram) Rotate() { - w.idx++ - w.Current = &w.h[w.idx%len(w.h)] - w.Current.Reset() -} diff --git a/vendor/github.com/dgrijalva/jwt-go/LICENSE b/vendor/github.com/dgrijalva/jwt-go/LICENSE deleted file mode 100644 index df83a9c2f019..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -Copyright (c) 2012 Dave Grijalva - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md deleted file mode 100644 index 7fc1f793cbc4..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md +++ /dev/null @@ -1,97 +0,0 @@ -## Migration Guide from v2 -> v3 - -Version 3 adds several new, frequently requested features. To do so, it introduces a few breaking changes. We've worked to keep these as minimal as possible. This guide explains the breaking changes and how you can quickly update your code. - -### `Token.Claims` is now an interface type - -The most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`. We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`. - -`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior. It is the default claims type when using `Parse`. The usage is unchanged except you must type cast the claims property. - -The old example for parsing a token looked like this.. - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is now directly mapped to... - -```go - if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -`StandardClaims` is designed to be embedded in your custom type. You can supply a custom claims type with the new `ParseWithClaims` function. Here's an example of using a custom claims type. - -```go - type MyCustomClaims struct { - User string - *StandardClaims - } - - if token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil { - claims := token.Claims.(*MyCustomClaims) - fmt.Printf("Token for user %v expires %v", claims.User, claims.StandardClaims.ExpiresAt) - } -``` - -### `ParseFromRequest` has been moved - -To keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`. The method signatues have also been augmented to receive a new argument: `Extractor`. - -`Extractors` do the work of picking the token string out of a request. The interface is simple and composable. - -This simple parsing example: - -```go - if token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil { - fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) - } -``` - -is directly mapped to: - -```go - if token, err := request.ParseFromRequest(req, request.OAuth2Extractor, keyLookupFunc); err == nil { - claims := token.Claims.(jwt.MapClaims) - fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) - } -``` - -There are several concrete `Extractor` types provided for your convenience: - -* `HeaderExtractor` will search a list of headers until one contains content. -* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content. -* `MultiExtractor` will try a list of `Extractors` in order until one returns content. -* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token. -* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument -* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed. A simple example is stripping the `Bearer ` text from a header - - -### RSA signing methods no longer accept `[]byte` keys - -Due to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse. - -To replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`. These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types. - -```go - func keyLookupFunc(*Token) (interface{}, error) { - // Don't forget to validate the alg is what you expect: - if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - - // Look up key - key, err := lookupPublicKey(token.Header["kid"]) - if err != nil { - return nil, err - } - - // Unpack key from PEM encoded PKCS8 - return jwt.ParseRSAPublicKeyFromPEM(key) - } -``` diff --git a/vendor/github.com/dgrijalva/jwt-go/README.md b/vendor/github.com/dgrijalva/jwt-go/README.md deleted file mode 100644 index f48365fafbfd..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/README.md +++ /dev/null @@ -1,85 +0,0 @@ -A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) - -[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) - -**BREAKING CHANGES:*** Version 3.0.0 is here. It includes _a lot_ of changes including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. - -**NOTICE:** A vulnerability in JWT was [recently published](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). As this library doesn't force users to validate the `alg` is what they expected, it's possible your usage is effected. There will be an update soon to remedy this, and it will likey require backwards-incompatible changes to the API. In the short term, please make sure your implementation verifies the `alg` is what you expect. - - -## What the heck is a JWT? - -JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens. - -In short, it's a signed JSON object that does something useful (for example, authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is made of three parts, separated by `.`'s. The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded. The last part is the signature, encoded the same way. - -The first part is called the header. It contains the necessary information for verifying the last part, the signature. For example, which encryption method was used for signing and what key was used. - -The part in the middle is the interesting bit. It's called the Claims and contains the actual stuff you care about. Refer to [the RFC](http://self-issued.info/docs/draft-jones-json-web-token.html) for information about reserved keys and the proper way to add your own. - -## What's in the box? - -This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. - -## Examples - -See [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage: - -* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-Parse--Hmac) -* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac) -* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples) - -## Extensions - -This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. - -Here's an example of an extension that integrates with the Google App Engine signing tools: https://github.com/someone1/gcp-jwt-go - -## Compliance - -This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: - -* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. - -## Project Status & Versioning - -This library is considered production ready. Feedback and feature requests are appreciated. The API should be considered stable. There should be very few backwards-incompatible changes outside of major version updates (and only with good reason). - -This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull requests will land on `master`. Periodically, versions will be tagged from `master`. You can find all the releases on [the project releases page](https://github.com/dgrijalva/jwt-go/releases). - -While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v2`. It will do the right thing WRT semantic versioning. - -## Usage Tips - -### Signing vs Encryption - -A token is simply a JSON object that is signed by its author. this tells you exactly two things about the data: - -* The author of the token was in the possession of the signing secret -* The data has not been modified since it was signed - -It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. - -### Choosing a Signing Method - -There are several signing methods available, and you should probably take the time to learn about the various options before choosing one. The principal design decision is most likely going to be symmetric vs asymmetric. - -Symmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation. - -Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. - -### JWT and OAuth - -It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. - -Without going too far down the rabbit hole, here's a description of the interaction of these technologies: - -* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. -* OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. -* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. - -## More - -Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). - -The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in to documentation. diff --git a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md deleted file mode 100644 index b605b4509309..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md +++ /dev/null @@ -1,105 +0,0 @@ -## `jwt-go` Version History - -#### 3.0.0 - -* **Compatibility Breaking Changes**: See MIGRATION_GUIDE.md for tips on updating your code - * Dropped support for `[]byte` keys when using RSA signing methods. This convenience feature could contribute to security vulnerabilities involving mismatched key types with signing methods. - * `ParseFromRequest` has been moved to `request` subpackage and usage has changed - * The `Claims` property on `Token` is now type `Claims` instead of `map[string]interface{}`. The default value is type `MapClaims`, which is an alias to `map[string]interface{}`. This makes it possible to use a custom type when decoding claims. -* Other Additions and Changes - * Added `Claims` interface type to allow users to decode the claims into a custom type - * Added `ParseWithClaims`, which takes a third argument of type `Claims`. Use this function instead of `Parse` if you have a custom type you'd like to decode into. - * Dramatically improved the functionality and flexibility of `ParseFromRequest`, which is now in the `request` subpackage - * Added `ParseFromRequestWithClaims` which is the `FromRequest` equivalent of `ParseWithClaims` - * Added new interface type `Extractor`, which is used for extracting JWT strings from http requests. Used with `ParseFromRequest` and `ParseFromRequestWithClaims`. - * Added several new, more specific, validation errors to error type bitmask - * Moved examples from README to executable example files - * Signing method registry is now thread safe - * Added new property to `ValidationError`, which contains the raw error returned by calls made by parse/verify (such as those returned by keyfunc or json parser) - -#### 2.7.0 - -This will likely be the last backwards compatible release before 3.0.0, excluding essential bug fixes. - -* Added new option `-show` to the `jwt` command that will just output the decoded token without verifying -* Error text for expired tokens includes how long it's been expired -* Fixed incorrect error returned from `ParseRSAPublicKeyFromPEM` -* Documentation updates - -#### 2.6.0 - -* Exposed inner error within ValidationError -* Fixed validation errors when using UseJSONNumber flag -* Added several unit tests - -#### 2.5.0 - -* Added support for signing method none. You shouldn't use this. The API tries to make this clear. -* Updated/fixed some documentation -* Added more helpful error message when trying to parse tokens that begin with `BEARER ` - -#### 2.4.0 - -* Added new type, Parser, to allow for configuration of various parsing parameters - * You can now specify a list of valid signing methods. Anything outside this set will be rejected. - * You can now opt to use the `json.Number` type instead of `float64` when parsing token JSON -* Added support for [Travis CI](https://travis-ci.org/dgrijalva/jwt-go) -* Fixed some bugs with ECDSA parsing - -#### 2.3.0 - -* Added support for ECDSA signing methods -* Added support for RSA PSS signing methods (requires go v1.4) - -#### 2.2.0 - -* Gracefully handle a `nil` `Keyfunc` being passed to `Parse`. Result will now be the parsed token and an error, instead of a panic. - -#### 2.1.0 - -Backwards compatible API change that was missed in 2.0.0. - -* The `SignedString` method on `Token` now takes `interface{}` instead of `[]byte` - -#### 2.0.0 - -There were two major reasons for breaking backwards compatibility with this update. The first was a refactor required to expand the width of the RSA and HMAC-SHA signing implementations. There will likely be no required code changes to support this change. - -The second update, while unfortunately requiring a small change in integration, is required to open up this library to other signing methods. Not all keys used for all signing methods have a single standard on-disk representation. Requiring `[]byte` as the type for all keys proved too limiting. Additionally, this implementation allows for pre-parsed tokens to be reused, which might matter in an application that parses a high volume of tokens with a small set of keys. Backwards compatibilty has been maintained for passing `[]byte` to the RSA signing methods, but they will also accept `*rsa.PublicKey` and `*rsa.PrivateKey`. - -It is likely the only integration change required here will be to change `func(t *jwt.Token) ([]byte, error)` to `func(t *jwt.Token) (interface{}, error)` when calling `Parse`. - -* **Compatibility Breaking Changes** - * `SigningMethodHS256` is now `*SigningMethodHMAC` instead of `type struct` - * `SigningMethodRS256` is now `*SigningMethodRSA` instead of `type struct` - * `KeyFunc` now returns `interface{}` instead of `[]byte` - * `SigningMethod.Sign` now takes `interface{}` instead of `[]byte` for the key - * `SigningMethod.Verify` now takes `interface{}` instead of `[]byte` for the key -* Renamed type `SigningMethodHS256` to `SigningMethodHMAC`. Specific sizes are now just instances of this type. - * Added public package global `SigningMethodHS256` - * Added public package global `SigningMethodHS384` - * Added public package global `SigningMethodHS512` -* Renamed type `SigningMethodRS256` to `SigningMethodRSA`. Specific sizes are now just instances of this type. - * Added public package global `SigningMethodRS256` - * Added public package global `SigningMethodRS384` - * Added public package global `SigningMethodRS512` -* Moved sample private key for HMAC tests from an inline value to a file on disk. Value is unchanged. -* Refactored the RSA implementation to be easier to read -* Exposed helper methods `ParseRSAPrivateKeyFromPEM` and `ParseRSAPublicKeyFromPEM` - -#### 1.0.2 - -* Fixed bug in parsing public keys from certificates -* Added more tests around the parsing of keys for RS256 -* Code refactoring in RS256 implementation. No functional changes - -#### 1.0.1 - -* Fixed panic if RS256 signing method was passed an invalid key - -#### 1.0.0 - -* First versioned release -* API stabilized -* Supports creating, signing, parsing, and validating JWT tokens -* Supports RS256 and HS256 signing methods \ No newline at end of file diff --git a/vendor/github.com/dgrijalva/jwt-go/claims.go b/vendor/github.com/dgrijalva/jwt-go/claims.go deleted file mode 100644 index f0228f02e033..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/claims.go +++ /dev/null @@ -1,134 +0,0 @@ -package jwt - -import ( - "crypto/subtle" - "fmt" - "time" -) - -// For a type to be a Claims object, it must just have a Valid method that determines -// if the token is invalid for any supported reason -type Claims interface { - Valid() error -} - -// Structured version of Claims Section, as referenced at -// https://tools.ietf.org/html/rfc7519#section-4.1 -// See examples for how to use this with your own claim types -type StandardClaims struct { - Audience string `json:"aud,omitempty"` - ExpiresAt int64 `json:"exp,omitempty"` - Id string `json:"jti,omitempty"` - IssuedAt int64 `json:"iat,omitempty"` - Issuer string `json:"iss,omitempty"` - NotBefore int64 `json:"nbf,omitempty"` - Subject string `json:"sub,omitempty"` -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (c StandardClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - // The claims below are optional, by default, so if they are set to the - // default value in Go, let's not fail the verification for them. - if c.VerifyExpiresAt(now, false) == false { - delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) - vErr.Inner = fmt.Errorf("token is expired by %v", delta) - vErr.Errors |= ValidationErrorExpired - } - - if c.VerifyIssuedAt(now, false) == false { - vErr.Inner = fmt.Errorf("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if c.VerifyNotBefore(now, false) == false { - vErr.Inner = fmt.Errorf("token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyAudience(cmp string, req bool) bool { - return verifyAud(c.Audience, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool { - return verifyExp(c.ExpiresAt, cmp, req) -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool { - return verifyIat(c.IssuedAt, cmp, req) -} - -// Compares the iss claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool { - return verifyIss(c.Issuer, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool { - return verifyNbf(c.NotBefore, cmp, req) -} - -// ----- helpers - -func verifyAud(aud string, cmp string, required bool) bool { - if aud == "" { - return !required - } - if subtle.ConstantTimeCompare([]byte(aud), []byte(cmp)) != 0 { - return true - } else { - return false - } -} - -func verifyExp(exp int64, now int64, required bool) bool { - if exp == 0 { - return !required - } - return now <= exp -} - -func verifyIat(iat int64, now int64, required bool) bool { - if iat == 0 { - return !required - } - return now >= iat -} - -func verifyIss(iss string, cmp string, required bool) bool { - if iss == "" { - return !required - } - if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { - return true - } else { - return false - } -} - -func verifyNbf(nbf int64, now int64, required bool) bool { - if nbf == 0 { - return !required - } - return now >= nbf -} diff --git a/vendor/github.com/dgrijalva/jwt-go/doc.go b/vendor/github.com/dgrijalva/jwt-go/doc.go deleted file mode 100644 index a86dc1a3b348..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// Package jwt is a Go implementation of JSON Web Tokens: http://self-issued.info/docs/draft-jones-json-web-token.html -// -// See README.md for more info. -package jwt diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go deleted file mode 100644 index 2f59a2223638..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go +++ /dev/null @@ -1,147 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/ecdsa" - "crypto/rand" - "errors" - "math/big" -) - -var ( - // Sadly this is missing from crypto/ecdsa compared to crypto/rsa - ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") -) - -// Implements the ECDSA family of signing methods signing methods -type SigningMethodECDSA struct { - Name string - Hash crypto.Hash - KeySize int - CurveBits int -} - -// Specific instances for EC256 and company -var ( - SigningMethodES256 *SigningMethodECDSA - SigningMethodES384 *SigningMethodECDSA - SigningMethodES512 *SigningMethodECDSA -) - -func init() { - // ES256 - SigningMethodES256 = &SigningMethodECDSA{"ES256", crypto.SHA256, 32, 256} - RegisterSigningMethod(SigningMethodES256.Alg(), func() SigningMethod { - return SigningMethodES256 - }) - - // ES384 - SigningMethodES384 = &SigningMethodECDSA{"ES384", crypto.SHA384, 48, 384} - RegisterSigningMethod(SigningMethodES384.Alg(), func() SigningMethod { - return SigningMethodES384 - }) - - // ES512 - SigningMethodES512 = &SigningMethodECDSA{"ES512", crypto.SHA512, 66, 521} - RegisterSigningMethod(SigningMethodES512.Alg(), func() SigningMethod { - return SigningMethodES512 - }) -} - -func (m *SigningMethodECDSA) Alg() string { - return m.Name -} - -// Implements the Verify method from SigningMethod -// For this verify method, key must be an ecdsa.PublicKey struct -func (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - // Get the key - var ecdsaKey *ecdsa.PublicKey - switch k := key.(type) { - case *ecdsa.PublicKey: - ecdsaKey = k - default: - return ErrInvalidKeyType - } - - if len(sig) != 2*m.KeySize { - return ErrECDSAVerification - } - - r := big.NewInt(0).SetBytes(sig[:m.KeySize]) - s := big.NewInt(0).SetBytes(sig[m.KeySize:]) - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Verify the signature - if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true { - return nil - } else { - return ErrECDSAVerification - } -} - -// Implements the Sign method from SigningMethod -// For this signing method, key must be an ecdsa.PrivateKey struct -func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) { - // Get the key - var ecdsaKey *ecdsa.PrivateKey - switch k := key.(type) { - case *ecdsa.PrivateKey: - ecdsaKey = k - default: - return "", ErrInvalidKeyType - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return r, s - if r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, hasher.Sum(nil)); err == nil { - curveBits := ecdsaKey.Curve.Params().BitSize - - if m.CurveBits != curveBits { - return "", ErrInvalidKey - } - - keyBytes := curveBits / 8 - if curveBits%8 > 0 { - keyBytes += 1 - } - - // We serialize the outpus (r and s) into big-endian byte arrays and pad - // them with zeros on the left to make sure the sizes work out. Both arrays - // must be keyBytes long, and the output must be 2*keyBytes long. - rBytes := r.Bytes() - rBytesPadded := make([]byte, keyBytes) - copy(rBytesPadded[keyBytes-len(rBytes):], rBytes) - - sBytes := s.Bytes() - sBytesPadded := make([]byte, keyBytes) - copy(sBytesPadded[keyBytes-len(sBytes):], sBytes) - - out := append(rBytesPadded, sBytesPadded...) - - return EncodeSegment(out), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go deleted file mode 100644 index d19624b7264f..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go +++ /dev/null @@ -1,67 +0,0 @@ -package jwt - -import ( - "crypto/ecdsa" - "crypto/x509" - "encoding/pem" - "errors" -) - -var ( - ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") - ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") -) - -// Parse PEM encoded Elliptic Curve Private Key Structure -func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil { - return nil, err - } - - var pkey *ecdsa.PrivateKey - var ok bool - if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { - return nil, ErrNotECPrivateKey - } - - return pkey, nil -} - -// Parse PEM encoded PKCS1 or PKCS8 public key -func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { - if cert, err := x509.ParseCertificate(block.Bytes); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - var pkey *ecdsa.PublicKey - var ok bool - if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok { - return nil, ErrNotECPublicKey - } - - return pkey, nil -} diff --git a/vendor/github.com/dgrijalva/jwt-go/errors.go b/vendor/github.com/dgrijalva/jwt-go/errors.go deleted file mode 100644 index 1c93024aad2e..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/errors.go +++ /dev/null @@ -1,59 +0,0 @@ -package jwt - -import ( - "errors" -) - -// Error constants -var ( - ErrInvalidKey = errors.New("key is invalid") - ErrInvalidKeyType = errors.New("key is of invalid type") - ErrHashUnavailable = errors.New("the requested hash function is unavailable") -) - -// The errors that might occur when parsing and validating a token -const ( - ValidationErrorMalformed uint32 = 1 << iota // Token is malformed - ValidationErrorUnverifiable // Token could not be verified because of signing problems - ValidationErrorSignatureInvalid // Signature validation failed - - // Standard Claim validation errors - ValidationErrorAudience // AUD validation failed - ValidationErrorExpired // EXP validation failed - ValidationErrorIssuedAt // IAT validation failed - ValidationErrorIssuer // ISS validation failed - ValidationErrorNotValidYet // NBF validation failed - ValidationErrorId // JTI validation failed - ValidationErrorClaimsInvalid // Generic claims validation error -) - -// Helper for constructing a ValidationError with a string error message -func NewValidationError(errorText string, errorFlags uint32) *ValidationError { - return &ValidationError{ - text: errorText, - Errors: errorFlags, - } -} - -// The error from Parse if token is not valid -type ValidationError struct { - Inner error // stores the error returned by external dependencies, i.e.: KeyFunc - Errors uint32 // bitfield. see ValidationError... constants - text string // errors that do not have a valid error just have text -} - -// Validation error is an error type -func (e ValidationError) Error() string { - if e.Inner != nil { - return e.Inner.Error() - } else if e.text != "" { - return e.text - } else { - return "token is invalid" - } -} - -// No errors -func (e *ValidationError) valid() bool { - return e.Errors == 0 -} diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac.go b/vendor/github.com/dgrijalva/jwt-go/hmac.go deleted file mode 100644 index c22991925455..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/hmac.go +++ /dev/null @@ -1,94 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/hmac" - "errors" -) - -// Implements the HMAC-SHA family of signing methods signing methods -type SigningMethodHMAC struct { - Name string - Hash crypto.Hash -} - -// Specific instances for HS256 and company -var ( - SigningMethodHS256 *SigningMethodHMAC - SigningMethodHS384 *SigningMethodHMAC - SigningMethodHS512 *SigningMethodHMAC - ErrSignatureInvalid = errors.New("signature is invalid") -) - -func init() { - // HS256 - SigningMethodHS256 = &SigningMethodHMAC{"HS256", crypto.SHA256} - RegisterSigningMethod(SigningMethodHS256.Alg(), func() SigningMethod { - return SigningMethodHS256 - }) - - // HS384 - SigningMethodHS384 = &SigningMethodHMAC{"HS384", crypto.SHA384} - RegisterSigningMethod(SigningMethodHS384.Alg(), func() SigningMethod { - return SigningMethodHS384 - }) - - // HS512 - SigningMethodHS512 = &SigningMethodHMAC{"HS512", crypto.SHA512} - RegisterSigningMethod(SigningMethodHS512.Alg(), func() SigningMethod { - return SigningMethodHS512 - }) -} - -func (m *SigningMethodHMAC) Alg() string { - return m.Name -} - -// Verify the signature of HSXXX tokens. Returns nil if the signature is valid. -func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error { - // Verify the key is the right type - keyBytes, ok := key.([]byte) - if !ok { - return ErrInvalidKeyType - } - - // Decode signature, for comparison - sig, err := DecodeSegment(signature) - if err != nil { - return err - } - - // Can we use the specified hashing method? - if !m.Hash.Available() { - return ErrHashUnavailable - } - - // This signing method is symmetric, so we validate the signature - // by reproducing the signature from the signing string and key, then - // comparing that against the provided signature. - hasher := hmac.New(m.Hash.New, keyBytes) - hasher.Write([]byte(signingString)) - if !hmac.Equal(sig, hasher.Sum(nil)) { - return ErrSignatureInvalid - } - - // No validation errors. Signature is good. - return nil -} - -// Implements the Sign method from SigningMethod for this signing method. -// Key must be []byte -func (m *SigningMethodHMAC) Sign(signingString string, key interface{}) (string, error) { - if keyBytes, ok := key.([]byte); ok { - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := hmac.New(m.Hash.New, keyBytes) - hasher.Write([]byte(signingString)) - - return EncodeSegment(hasher.Sum(nil)), nil - } - - return "", ErrInvalidKey -} diff --git a/vendor/github.com/dgrijalva/jwt-go/map_claims.go b/vendor/github.com/dgrijalva/jwt-go/map_claims.go deleted file mode 100644 index 291213c460d4..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/map_claims.go +++ /dev/null @@ -1,94 +0,0 @@ -package jwt - -import ( - "encoding/json" - "errors" - // "fmt" -) - -// Claims type that uses the map[string]interface{} for JSON decoding -// This is the default claims type if you don't supply one -type MapClaims map[string]interface{} - -// Compares the aud claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyAudience(cmp string, req bool) bool { - aud, _ := m["aud"].(string) - return verifyAud(aud, cmp, req) -} - -// Compares the exp claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool { - switch exp := m["exp"].(type) { - case float64: - return verifyExp(int64(exp), cmp, req) - case json.Number: - v, _ := exp.Int64() - return verifyExp(v, cmp, req) - } - return req == false -} - -// Compares the iat claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool { - switch iat := m["iat"].(type) { - case float64: - return verifyIat(int64(iat), cmp, req) - case json.Number: - v, _ := iat.Int64() - return verifyIat(v, cmp, req) - } - return req == false -} - -// Compares the iss claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyIssuer(cmp string, req bool) bool { - iss, _ := m["iss"].(string) - return verifyIss(iss, cmp, req) -} - -// Compares the nbf claim against cmp. -// If required is false, this method will return true if the value matches or is unset -func (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool { - switch nbf := m["nbf"].(type) { - case float64: - return verifyNbf(int64(nbf), cmp, req) - case json.Number: - v, _ := nbf.Int64() - return verifyNbf(v, cmp, req) - } - return req == false -} - -// Validates time based claims "exp, iat, nbf". -// There is no accounting for clock skew. -// As well, if any of the above claims are not in the token, it will still -// be considered a valid claim. -func (m MapClaims) Valid() error { - vErr := new(ValidationError) - now := TimeFunc().Unix() - - if m.VerifyExpiresAt(now, false) == false { - vErr.Inner = errors.New("Token is expired") - vErr.Errors |= ValidationErrorExpired - } - - if m.VerifyIssuedAt(now, false) == false { - vErr.Inner = errors.New("Token used before issued") - vErr.Errors |= ValidationErrorIssuedAt - } - - if m.VerifyNotBefore(now, false) == false { - vErr.Inner = errors.New("Token is not valid yet") - vErr.Errors |= ValidationErrorNotValidYet - } - - if vErr.valid() { - return nil - } - - return vErr -} diff --git a/vendor/github.com/dgrijalva/jwt-go/none.go b/vendor/github.com/dgrijalva/jwt-go/none.go deleted file mode 100644 index f04d189d067b..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/none.go +++ /dev/null @@ -1,52 +0,0 @@ -package jwt - -// Implements the none signing method. This is required by the spec -// but you probably should never use it. -var SigningMethodNone *signingMethodNone - -const UnsafeAllowNoneSignatureType unsafeNoneMagicConstant = "none signing method allowed" - -var NoneSignatureTypeDisallowedError error - -type signingMethodNone struct{} -type unsafeNoneMagicConstant string - -func init() { - SigningMethodNone = &signingMethodNone{} - NoneSignatureTypeDisallowedError = NewValidationError("'none' signature type is not allowed", ValidationErrorSignatureInvalid) - - RegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod { - return SigningMethodNone - }) -} - -func (m *signingMethodNone) Alg() string { - return "none" -} - -// Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) { - // Key must be UnsafeAllowNoneSignatureType to prevent accidentally - // accepting 'none' signing method - if _, ok := key.(unsafeNoneMagicConstant); !ok { - return NoneSignatureTypeDisallowedError - } - // If signing method is none, signature must be an empty string - if signature != "" { - return NewValidationError( - "'none' signing method with non-empty signature", - ValidationErrorSignatureInvalid, - ) - } - - // Accept 'none' signing method. - return nil -} - -// Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key -func (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) { - if _, ok := key.(unsafeNoneMagicConstant); ok { - return "", nil - } - return "", NoneSignatureTypeDisallowedError -} diff --git a/vendor/github.com/dgrijalva/jwt-go/parser.go b/vendor/github.com/dgrijalva/jwt-go/parser.go deleted file mode 100644 index 7bf1c4ea0842..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/parser.go +++ /dev/null @@ -1,131 +0,0 @@ -package jwt - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" -) - -type Parser struct { - ValidMethods []string // If populated, only these methods will be considered valid - UseJSONNumber bool // Use JSON Number format in JSON decoder - SkipClaimsValidation bool // Skip claims validation during token parsing -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) -} - -func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - parts := strings.Split(tokenString, ".") - if len(parts) != 3 { - return nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) - } - - var err error - token := &Token{Raw: tokenString} - - // parse Header - var headerBytes []byte - if headerBytes, err = DecodeSegment(parts[0]); err != nil { - if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { - return token, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) - } - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(headerBytes, &token.Header); err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // parse Claims - var claimBytes []byte - token.Claims = claims - - if claimBytes, err = DecodeSegment(parts[1]); err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) - if p.UseJSONNumber { - dec.UseNumber() - } - // JSON Decode. Special case for map type to avoid weird pointer behavior - if c, ok := token.Claims.(MapClaims); ok { - err = dec.Decode(&c) - } else { - err = dec.Decode(&claims) - } - // Handle decode error - if err != nil { - return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} - } - - // Lookup signature method - if method, ok := token.Header["alg"].(string); ok { - if token.Method = GetSigningMethod(method); token.Method == nil { - return token, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) - } - } else { - return token, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) - } - - // Verify signing method is in the required set - if p.ValidMethods != nil { - var signingMethodValid = false - var alg = token.Method.Alg() - for _, m := range p.ValidMethods { - if m == alg { - signingMethodValid = true - break - } - } - if !signingMethodValid { - // signing method is not in the listed set - return token, NewValidationError(fmt.Sprintf("signing method %v is invalid", alg), ValidationErrorSignatureInvalid) - } - } - - // Lookup key - var key interface{} - if keyFunc == nil { - // keyFunc was not provided. short circuiting validation - return token, NewValidationError("no Keyfunc was provided.", ValidationErrorUnverifiable) - } - if key, err = keyFunc(token); err != nil { - // keyFunc returned an error - return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} - } - - vErr := &ValidationError{} - - // Validate Claims - if !p.SkipClaimsValidation { - if err := token.Claims.Valid(); err != nil { - - // If the Claims Valid returned an error, check if it is a validation error, - // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set - if e, ok := err.(*ValidationError); !ok { - vErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid} - } else { - vErr = e - } - } - } - - // Perform validation - token.Signature = parts[2] - if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { - vErr.Inner = err - vErr.Errors |= ValidationErrorSignatureInvalid - } - - if vErr.valid() { - token.Valid = true - return token, nil - } - - return token, vErr -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa.go b/vendor/github.com/dgrijalva/jwt-go/rsa.go deleted file mode 100644 index 0ae0b1984e5a..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa.go +++ /dev/null @@ -1,100 +0,0 @@ -package jwt - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" -) - -// Implements the RSA family of signing methods signing methods -type SigningMethodRSA struct { - Name string - Hash crypto.Hash -} - -// Specific instances for RS256 and company -var ( - SigningMethodRS256 *SigningMethodRSA - SigningMethodRS384 *SigningMethodRSA - SigningMethodRS512 *SigningMethodRSA -) - -func init() { - // RS256 - SigningMethodRS256 = &SigningMethodRSA{"RS256", crypto.SHA256} - RegisterSigningMethod(SigningMethodRS256.Alg(), func() SigningMethod { - return SigningMethodRS256 - }) - - // RS384 - SigningMethodRS384 = &SigningMethodRSA{"RS384", crypto.SHA384} - RegisterSigningMethod(SigningMethodRS384.Alg(), func() SigningMethod { - return SigningMethodRS384 - }) - - // RS512 - SigningMethodRS512 = &SigningMethodRSA{"RS512", crypto.SHA512} - RegisterSigningMethod(SigningMethodRS512.Alg(), func() SigningMethod { - return SigningMethodRS512 - }) -} - -func (m *SigningMethodRSA) Alg() string { - return m.Name -} - -// Implements the Verify method from SigningMethod -// For this signing method, must be an rsa.PublicKey structure. -func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - var rsaKey *rsa.PublicKey - var ok bool - - if rsaKey, ok = key.(*rsa.PublicKey); !ok { - return ErrInvalidKeyType - } - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Verify the signature - return rsa.VerifyPKCS1v15(rsaKey, m.Hash, hasher.Sum(nil), sig) -} - -// Implements the Sign method from SigningMethod -// For this signing method, must be an rsa.PrivateKey structure. -func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { - var rsaKey *rsa.PrivateKey - var ok bool - - // Validate type of key - if rsaKey, ok = key.(*rsa.PrivateKey); !ok { - return "", ErrInvalidKey - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return the encoded bytes - if sigBytes, err := rsa.SignPKCS1v15(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil)); err == nil { - return EncodeSegment(sigBytes), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go deleted file mode 100644 index 10ee9db8a4ed..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go +++ /dev/null @@ -1,126 +0,0 @@ -// +build go1.4 - -package jwt - -import ( - "crypto" - "crypto/rand" - "crypto/rsa" -) - -// Implements the RSAPSS family of signing methods signing methods -type SigningMethodRSAPSS struct { - *SigningMethodRSA - Options *rsa.PSSOptions -} - -// Specific instances for RS/PS and company -var ( - SigningMethodPS256 *SigningMethodRSAPSS - SigningMethodPS384 *SigningMethodRSAPSS - SigningMethodPS512 *SigningMethodRSAPSS -) - -func init() { - // PS256 - SigningMethodPS256 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS256", - Hash: crypto.SHA256, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA256, - }, - } - RegisterSigningMethod(SigningMethodPS256.Alg(), func() SigningMethod { - return SigningMethodPS256 - }) - - // PS384 - SigningMethodPS384 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS384", - Hash: crypto.SHA384, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA384, - }, - } - RegisterSigningMethod(SigningMethodPS384.Alg(), func() SigningMethod { - return SigningMethodPS384 - }) - - // PS512 - SigningMethodPS512 = &SigningMethodRSAPSS{ - &SigningMethodRSA{ - Name: "PS512", - Hash: crypto.SHA512, - }, - &rsa.PSSOptions{ - SaltLength: rsa.PSSSaltLengthAuto, - Hash: crypto.SHA512, - }, - } - RegisterSigningMethod(SigningMethodPS512.Alg(), func() SigningMethod { - return SigningMethodPS512 - }) -} - -// Implements the Verify method from SigningMethod -// For this verify method, key must be an rsa.PublicKey struct -func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error { - var err error - - // Decode the signature - var sig []byte - if sig, err = DecodeSegment(signature); err != nil { - return err - } - - var rsaKey *rsa.PublicKey - switch k := key.(type) { - case *rsa.PublicKey: - rsaKey = k - default: - return ErrInvalidKey - } - - // Create hasher - if !m.Hash.Available() { - return ErrHashUnavailable - } - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - return rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, m.Options) -} - -// Implements the Sign method from SigningMethod -// For this signing method, key must be an rsa.PrivateKey struct -func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) { - var rsaKey *rsa.PrivateKey - - switch k := key.(type) { - case *rsa.PrivateKey: - rsaKey = k - default: - return "", ErrInvalidKeyType - } - - // Create the hasher - if !m.Hash.Available() { - return "", ErrHashUnavailable - } - - hasher := m.Hash.New() - hasher.Write([]byte(signingString)) - - // Sign the string and return the encoded bytes - if sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil { - return EncodeSegment(sigBytes), nil - } else { - return "", err - } -} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go deleted file mode 100644 index 213a90dbbf8d..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go +++ /dev/null @@ -1,69 +0,0 @@ -package jwt - -import ( - "crypto/rsa" - "crypto/x509" - "encoding/pem" - "errors" -) - -var ( - ErrKeyMustBePEMEncoded = errors.New("Invalid Key: Key must be PEM encoded PKCS1 or PKCS8 private key") - ErrNotRSAPrivateKey = errors.New("Key is not a valid RSA private key") - ErrNotRSAPublicKey = errors.New("Key is not a valid RSA public key") -) - -// Parse PEM encoded PKCS1 or PKCS8 private key -func ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - var parsedKey interface{} - if parsedKey, err = x509.ParsePKCS1PrivateKey(block.Bytes); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil { - return nil, err - } - } - - var pkey *rsa.PrivateKey - var ok bool - if pkey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, ErrNotRSAPrivateKey - } - - return pkey, nil -} - -// Parse PEM encoded PKCS1 or PKCS8 public key -func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { - var err error - - // Parse PEM block - var block *pem.Block - if block, _ = pem.Decode(key); block == nil { - return nil, ErrKeyMustBePEMEncoded - } - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { - if cert, err := x509.ParseCertificate(block.Bytes); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - var pkey *rsa.PublicKey - var ok bool - if pkey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, ErrNotRSAPublicKey - } - - return pkey, nil -} diff --git a/vendor/github.com/dgrijalva/jwt-go/signing_method.go b/vendor/github.com/dgrijalva/jwt-go/signing_method.go deleted file mode 100644 index ed1f212b21e1..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/signing_method.go +++ /dev/null @@ -1,35 +0,0 @@ -package jwt - -import ( - "sync" -) - -var signingMethods = map[string]func() SigningMethod{} -var signingMethodLock = new(sync.RWMutex) - -// Implement SigningMethod to add new methods for signing or verifying tokens. -type SigningMethod interface { - Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid - Sign(signingString string, key interface{}) (string, error) // Returns encoded signature or error - Alg() string // returns the alg identifier for this method (example: 'HS256') -} - -// Register the "alg" name and a factory function for signing method. -// This is typically done during init() in the method's implementation -func RegisterSigningMethod(alg string, f func() SigningMethod) { - signingMethodLock.Lock() - defer signingMethodLock.Unlock() - - signingMethods[alg] = f -} - -// Get a signing method from an "alg" string -func GetSigningMethod(alg string) (method SigningMethod) { - signingMethodLock.RLock() - defer signingMethodLock.RUnlock() - - if methodF, ok := signingMethods[alg]; ok { - method = methodF() - } - return -} diff --git a/vendor/github.com/dgrijalva/jwt-go/token.go b/vendor/github.com/dgrijalva/jwt-go/token.go deleted file mode 100644 index d637e0867c65..000000000000 --- a/vendor/github.com/dgrijalva/jwt-go/token.go +++ /dev/null @@ -1,108 +0,0 @@ -package jwt - -import ( - "encoding/base64" - "encoding/json" - "strings" - "time" -) - -// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). -// You can override it to use another time value. This is useful for testing or if your -// server uses a different time zone than your tokens. -var TimeFunc = time.Now - -// Parse methods use this callback function to supply -// the key for verification. The function receives the parsed, -// but unverified Token. This allows you to use properties in the -// Header of the token (such as `kid`) to identify which key to use. -type Keyfunc func(*Token) (interface{}, error) - -// A JWT Token. Different fields will be used depending on whether you're -// creating or parsing/verifying a token. -type Token struct { - Raw string // The raw token. Populated when you Parse a token - Method SigningMethod // The signing method used or to be used - Header map[string]interface{} // The first segment of the token - Claims Claims // The second segment of the token - Signature string // The third segment of the token. Populated when you Parse a token - Valid bool // Is the token valid? Populated when you Parse/Verify a token -} - -// Create a new Token. Takes a signing method -func New(method SigningMethod) *Token { - return NewWithClaims(method, MapClaims{}) -} - -func NewWithClaims(method SigningMethod, claims Claims) *Token { - return &Token{ - Header: map[string]interface{}{ - "typ": "JWT", - "alg": method.Alg(), - }, - Claims: claims, - Method: method, - } -} - -// Get the complete, signed token -func (t *Token) SignedString(key interface{}) (string, error) { - var sig, sstr string - var err error - if sstr, err = t.SigningString(); err != nil { - return "", err - } - if sig, err = t.Method.Sign(sstr, key); err != nil { - return "", err - } - return strings.Join([]string{sstr, sig}, "."), nil -} - -// Generate the signing string. This is the -// most expensive part of the whole deal. Unless you -// need this for something special, just go straight for -// the SignedString. -func (t *Token) SigningString() (string, error) { - var err error - parts := make([]string, 2) - for i, _ := range parts { - var jsonValue []byte - if i == 0 { - if jsonValue, err = json.Marshal(t.Header); err != nil { - return "", err - } - } else { - if jsonValue, err = json.Marshal(t.Claims); err != nil { - return "", err - } - } - - parts[i] = EncodeSegment(jsonValue) - } - return strings.Join(parts, "."), nil -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - return new(Parser).Parse(tokenString, keyFunc) -} - -func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { - return new(Parser).ParseWithClaims(tokenString, claims, keyFunc) -} - -// Encode JWT specific base64url encoding with padding stripped -func EncodeSegment(seg []byte) string { - return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") -} - -// Decode JWT specific base64url encoding with padding stripped -func DecodeSegment(seg string) ([]byte, error) { - if l := len(seg) % 4; l > 0 { - seg += strings.Repeat("=", 4-l) - } - - return base64.URLEncoding.DecodeString(seg) -} diff --git a/vendor/github.com/gballet/go-libpcsclite/LICENSE b/vendor/github.com/gballet/go-libpcsclite/LICENSE new file mode 100644 index 000000000000..52d9e62b07bb --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, Guillaume Ballet +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/gballet/go-libpcsclite/README.md b/vendor/github.com/gballet/go-libpcsclite/README.md new file mode 100644 index 000000000000..182398e39df4 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/README.md @@ -0,0 +1,73 @@ +# go-libpcsclite + +A golang implementation of the [libpcpsclite](http://github.com/LudovicRousseau/PCSC) client. It connects to the `pcscd` daemon over sockets. + +## Purpose + +The goal is for major open source projects to distribute a single binary that doesn't depend on `libpcsclite`. It provides an extra function `CheckPCSCDaemon` that will tell the user if `pcscd` is running. + +## Example + +```golang +func main() { + client, err := EstablishContext(2) + if err != nil { + fmt.Printf("Error establishing context: %v\n", err) + os.Exit(1) + } + + _, err = client.ListReaders() + if err != nil { + fmt.Printf("Error getting the list of readers: %v\n", err) + os.Exit(1) + } + + card, err := client.Connect(client.readerStateDescriptors[0].Name, ShareShared, ProtocolT0|ProtocolT1) + if err != nil { + fmt.Printf("Error connecting: %v\n", err) + os.Exit(1) + } + + resp, _, err := card.Transmit([]byte{0, 0xa4, 4, 0, 0xA0, 0, 0, 8, 4, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}) + + card.Disconnect(LeaveCard) +} +``` + +## TODO + + - [x] Finish this README + - [x] Lock context + - [ ] implement missing functions + +## License + +BSD 3-Clause License + +Copyright (c) 2019, Guillaume Ballet +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/gballet/go-libpcsclite/doc.go b/vendor/github.com/gballet/go-libpcsclite/doc.go new file mode 100644 index 000000000000..0f28c0c9c4f7 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/doc.go @@ -0,0 +1,95 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package pcsc + +const ( + AutoAllocate = -1 /* see SCardFreeMemory() */ + ScopeUser = 0x0000 /* Scope in user space */ + ScopeTerminal = 0x0001 /* Scope in terminal */ + ScopeSystem = 0x0002 /* Scope in system */ + ScopeGlobal = 0x0003 /* Scope is global */ + + ProtocolUndefined = 0x0000 /* protocol not set */ + ProtocolUnSet = ProtocolUndefined /* backward compat */ + ProtocolT0 = 0x0001 /* T=0 active protocol. */ + ProtocolT1 = 0x0002 /* T=1 active protocol. */ + ProtocolRaw = 0x0004 /* Raw active protocol. */ + ProtocolT15 = 0x0008 /* T=15 protocol. */ + ProtocolAny = (ProtocolT0 | ProtocolT1) /* IFD determines prot. */ + + ShareExclusive = 0x0001 /* Exclusive mode only */ + ShareShared = 0x0002 /* Shared mode only */ + ShareDirect = 0x0003 /* Raw mode only */ + + LeaveCard = 0x0000 /* Do nothing on close */ + ResetCard = 0x0001 /* Reset on close */ + UnpowerCard = 0x0002 /* Power down on close */ + EjectCard = 0x0003 /* Eject on close */ + + SCardUnknown = 0x0001 /* Unknown state */ + SCardAbsent = 0x0002 /* Card is absent */ + SCardPresent = 0x0004 /* Card is present */ + SCardSwallowed = 0x0008 /* Card not powered */ + SCardPowever = 0x0010 /* Card is powered */ + SCardNegotiable = 0x0020 /* Ready for PTS */ + SCardSpecific = 0x0040 /* PTS has been set */ +) + +// List of commands to send to the daemon +const ( + _ = iota + SCardEstablishContext /* used by SCardEstablishContext() */ + SCardReleaseContext /* used by SCardReleaseContext() */ + SCardListReaders /* used by SCardListReaders() */ + SCardConnect /* used by SCardConnect() */ + SCardReConnect /* used by SCardReconnect() */ + SCardDisConnect /* used by SCardDisconnect() */ + SCardBeginTransaction /* used by SCardBeginTransaction() */ + SCardEndTransaction /* used by SCardEndTransaction() */ + SCardTransmit /* used by SCardTransmit() */ + SCardControl /* used by SCardControl() */ + SCardStatus /* used by SCardStatus() */ + SCardGetStatusChange /* not used */ + SCardCancel /* used by SCardCancel() */ + SCardCancelTransaction /* not used */ + SCardGetAttrib /* used by SCardGetAttrib() */ + SCardSetAttrib /* used by SCardSetAttrib() */ + CommandVersion /* get the client/server protocol version */ + CommandGetReaderState /* get the readers state */ + CommandWaitReaderStateChange /* wait for a reader state change */ + CommandStopWaitingReaderStateChange /* stop waiting for a reader state change */ +) + +// Protocol information +const ( + ProtocolVersionMajor = uint32(4) /* IPC major */ + ProtocolVersionMinor = uint32(3) /* IPC minor */ +) diff --git a/vendor/github.com/gballet/go-libpcsclite/doc_bsd.go b/vendor/github.com/gballet/go-libpcsclite/doc_bsd.go new file mode 100644 index 000000000000..672c672e4f69 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/doc_bsd.go @@ -0,0 +1,35 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build dragonfly freebsd netbsd openbsd solaris + +package pcsc + +const PCSCDSockName string = "/var/run/pcscd/pcscd.comm" diff --git a/vendor/github.com/gballet/go-libpcsclite/doc_darwin.go b/vendor/github.com/gballet/go-libpcsclite/doc_darwin.go new file mode 100644 index 000000000000..3dec7c79b414 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/doc_darwin.go @@ -0,0 +1,35 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build darwin + +package pcsc + +const PCSCDSockName string = "" diff --git a/vendor/github.com/gballet/go-libpcsclite/doc_linux.go b/vendor/github.com/gballet/go-libpcsclite/doc_linux.go new file mode 100644 index 000000000000..becbf1677594 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/doc_linux.go @@ -0,0 +1,35 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build linux + +package pcsc + +const PCSCDSockName string = "/run/pcscd/pcscd.comm" \ No newline at end of file diff --git a/vendor/github.com/gballet/go-libpcsclite/doc_windows.go b/vendor/github.com/gballet/go-libpcsclite/doc_windows.go new file mode 100644 index 000000000000..9bd6bd333f22 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/doc_windows.go @@ -0,0 +1,35 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build windows + +package pcsc + +const PCSCDSockName string = "" diff --git a/vendor/github.com/gballet/go-libpcsclite/error.go b/vendor/github.com/gballet/go-libpcsclite/error.go new file mode 100644 index 000000000000..4710de5e6029 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/error.go @@ -0,0 +1,246 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package pcsc + +import "fmt" + +type ErrorCode uint32 + +const ( + SCardSuccess ErrorCode = 0x00000000 /* No error was encountered. */ + ErrSCardInternal = 0x80100001 /* An internal consistency check failed. */ + ErrSCardCancelled = 0x80100002 /* The action was cancelled by an SCardCancel request. */ + ErrSCardInvalidHandle = 0x80100003 /* The supplied handle was invalid. */ + ErrSCardInvalidParameter = 0x80100004 /* One or more of the supplied parameters could not be properly interpreted. */ + ErrSCardInvalidTarget = 0x80100005 /* Registry startup information is missing or invalid. */ + ErrSCardNoMemory = 0x80100006 /* Not enough memory available to complete this command. */ + ErrSCardWaitedTooLong = 0x80100007 /* An internal consistency timer has expired. */ + ErrSCardInsufficientBuffer = 0x80100008 /* The data buffer to receive returned data is too small for the returned data. */ + ErrScardUnknownReader = 0x80100009 /* The specified reader name is not recognized. */ + ErrSCardTimeout = 0x8010000A /* The user-specified timeout value has expired. */ + ErrSCardSharingViolation = 0x8010000B /* The smart card cannot be accessed because of other connections outstanding. */ + ErrSCardNoSmartCard = 0x8010000C /* The operation requires a Smart Card, but no Smart Card is currently in the device. */ + ErrSCardUnknownCard = 0x8010000D /* The specified smart card name is not recognized. */ + ErrSCardCannotDispose = 0x8010000E /* The system could not dispose of the media in the requested manner. */ + ErrSCardProtoMismatch = 0x8010000F /* The requested protocols are incompatible with the protocol currently in use with the smart card. */ + ErrSCardNotReady = 0x80100010 /* The reader or smart card is not ready to accept commands. */ + ErrSCardInvalidValue = 0x80100011 /* One or more of the supplied parameters values could not be properly interpreted. */ + ErrSCardSystemCancelled = 0x80100012 /* The action was cancelled by the system, presumably to log off or shut down. */ + ErrSCardCommError = 0x80100013 /* An internal communications error has been detected. */ + ErrScardUnknownError = 0x80100014 /* An internal error has been detected, but the source is unknown. */ + ErrSCardInvalidATR = 0x80100015 /* An ATR obtained from the registry is not a valid ATR string. */ + ErrSCardNotTransacted = 0x80100016 /* An attempt was made to end a non-existent transaction. */ + ErrSCardReaderUnavailable = 0x80100017 /* The specified reader is not currently available for use. */ + ErrSCardShutdown = 0x80100018 /* The operation has been aborted to allow the server application to exit. */ + ErrSCardPCITooSmall = 0x80100019 /* The PCI Receive buffer was too small. */ + ErrSCardReaderUnsupported = 0x8010001A /* The reader driver does not meet minimal requirements for support. */ + ErrSCardDuplicateReader = 0x8010001B /* The reader driver did not produce a unique reader name. */ + ErrSCardCardUnsupported = 0x8010001C /* The smart card does not meet minimal requirements for support. */ + ErrScardNoService = 0x8010001D /* The Smart card resource manager is not running. */ + ErrSCardServiceStopped = 0x8010001E /* The Smart card resource manager has shut down. */ + ErrSCardUnexpected = 0x8010001F /* An unexpected card error has occurred. */ + ErrSCardUnsupportedFeature = 0x8010001F /* This smart card does not support the requested feature. */ + ErrSCardICCInstallation = 0x80100020 /* No primary provider can be found for the smart card. */ + ErrSCardICCCreateOrder = 0x80100021 /* The requested order of object creation is not supported. */ + ErrSCardDirNotFound = 0x80100023 /* The identified directory does not exist in the smart card. */ + ErrSCardFileNotFound = 0x80100024 /* The identified file does not exist in the smart card. */ + ErrSCardNoDir = 0x80100025 /* The supplied path does not represent a smart card directory. */ + ErrSCardNoFile = 0x80100026 /* The supplied path does not represent a smart card file. */ + ErrScardNoAccess = 0x80100027 /* Access is denied to this file. */ + ErrSCardWriteTooMany = 0x80100028 /* The smart card does not have enough memory to store the information. */ + ErrSCardBadSeek = 0x80100029 /* There was an error trying to set the smart card file object pointer. */ + ErrSCardInvalidCHV = 0x8010002A /* The supplied PIN is incorrect. */ + ErrSCardUnknownResMNG = 0x8010002B /* An unrecognized error code was returned from a layered component. */ + ErrSCardNoSuchCertificate = 0x8010002C /* The requested certificate does not exist. */ + ErrSCardCertificateUnavailable = 0x8010002D /* The requested certificate could not be obtained. */ + ErrSCardNoReadersAvailable = 0x8010002E /* Cannot find a smart card reader. */ + ErrSCardCommDataLost = 0x8010002F /* A communications error with the smart card has been detected. Retry the operation. */ + ErrScardNoKeyContainer = 0x80100030 /* The requested key container does not exist on the smart card. */ + ErrSCardServerTooBusy = 0x80100031 /* The Smart Card Resource Manager is too busy to complete this operation. */ + ErrSCardUnsupportedCard = 0x80100065 /* The reader cannot communicate with the card, due to ATR string configuration conflicts. */ + ErrSCardUnresponsiveCard = 0x80100066 /* The smart card is not responding to a reset. */ + ErrSCardUnpoweredCard = 0x80100067 /* Power has been removed from the smart card, so that further communication is not possible. */ + ErrSCardResetCard = 0x80100068 /* The smart card has been reset, so any shared state information is invalid. */ + ErrSCardRemovedCard = 0x80100069 /* The smart card has been removed, so further communication is not possible. */ + ErrSCardSecurityViolation = 0x8010006A /* Access was denied because of a security violation. */ + ErrSCardWrongCHV = 0x8010006B /* The card cannot be accessed because the wrong PIN was presented. */ + ErrSCardCHVBlocked = 0x8010006C /* The card cannot be accessed because the maximum number of PIN entry attempts has been reached. */ + ErrSCardEOF = 0x8010006D /* The end of the smart card file has been reached. */ + ErrSCardCancelledByUser = 0x8010006E /* The user pressed "Cancel" on a Smart Card Selection Dialog. */ + ErrSCardCardNotAuthenticated = 0x8010006F /* No PIN was presented to the smart card. */ +) + +// Code returns the error code, with an uint32 type to be used in PutUInt32 +func (code ErrorCode) Code() uint32 { + return uint32(code) +} + +func (code ErrorCode) Error() error { + switch code { + case SCardSuccess: + return fmt.Errorf("Command successful") + + case ErrSCardInternal: + return fmt.Errorf("Internal error") + + case ErrSCardCancelled: + return fmt.Errorf("Command cancelled") + + case ErrSCardInvalidHandle: + return fmt.Errorf("Invalid handle") + + case ErrSCardInvalidParameter: + return fmt.Errorf("Invalid parameter given") + + case ErrSCardInvalidTarget: + return fmt.Errorf("Invalid target given") + + case ErrSCardNoMemory: + return fmt.Errorf("Not enough memory") + + case ErrSCardWaitedTooLong: + return fmt.Errorf("Waited too long") + + case ErrSCardInsufficientBuffer: + return fmt.Errorf("Insufficient buffer") + + case ErrScardUnknownReader: + return fmt.Errorf("Unknown reader specified") + + case ErrSCardTimeout: + return fmt.Errorf("Command timeout") + + case ErrSCardSharingViolation: + return fmt.Errorf("Sharing violation") + + case ErrSCardNoSmartCard: + return fmt.Errorf("No smart card inserted") + + case ErrSCardUnknownCard: + return fmt.Errorf("Unknown card") + + case ErrSCardCannotDispose: + return fmt.Errorf("Cannot dispose handle") + + case ErrSCardProtoMismatch: + return fmt.Errorf("Card protocol mismatch") + + case ErrSCardNotReady: + return fmt.Errorf("Subsystem not ready") + + case ErrSCardInvalidValue: + return fmt.Errorf("Invalid value given") + + case ErrSCardSystemCancelled: + return fmt.Errorf("System cancelled") + + case ErrSCardCommError: + return fmt.Errorf("RPC transport error") + + case ErrScardUnknownError: + return fmt.Errorf("Unknown error") + + case ErrSCardInvalidATR: + return fmt.Errorf("Invalid ATR") + + case ErrSCardNotTransacted: + return fmt.Errorf("Transaction failed") + + case ErrSCardReaderUnavailable: + return fmt.Errorf("Reader is unavailable") + + /* case SCARD_P_SHUTDOWN: */ + case ErrSCardPCITooSmall: + return fmt.Errorf("PCI struct too small") + + case ErrSCardReaderUnsupported: + return fmt.Errorf("Reader is unsupported") + + case ErrSCardDuplicateReader: + return fmt.Errorf("Reader already exists") + + case ErrSCardCardUnsupported: + return fmt.Errorf("Card is unsupported") + + case ErrScardNoService: + return fmt.Errorf("Service not available") + + case ErrSCardServiceStopped: + return fmt.Errorf("Service was stopped") + + /* case SCARD_E_UNEXPECTED: */ + /* case SCARD_E_ICC_CREATEORDER: */ + /* case SCARD_E_UNSUPPORTED_FEATURE: */ + /* case SCARD_E_DIR_NOT_FOUND: */ + /* case SCARD_E_NO_DIR: */ + /* case SCARD_E_NO_FILE: */ + /* case SCARD_E_NO_ACCESS: */ + /* case SCARD_E_WRITE_TOO_MANY: */ + /* case SCARD_E_BAD_SEEK: */ + /* case SCARD_E_INVALID_CHV: */ + /* case SCARD_E_UNKNOWN_RES_MNG: */ + /* case SCARD_E_NO_SUCH_CERTIFICATE: */ + /* case SCARD_E_CERTIFICATE_UNAVAILABLE: */ + case ErrSCardNoReadersAvailable: + return fmt.Errorf("Cannot find a smart card reader") + + /* case SCARD_E_COMM_DATA_LOST: */ + /* case SCARD_E_NO_KEY_CONTAINER: */ + /* case SCARD_E_SERVER_TOO_BUSY: */ + case ErrSCardUnsupportedCard: + return fmt.Errorf("Card is not supported") + + case ErrSCardUnresponsiveCard: + return fmt.Errorf("Card is unresponsive") + + case ErrSCardUnpoweredCard: + return fmt.Errorf("Card is unpowered") + + case ErrSCardResetCard: + return fmt.Errorf("Card was reset") + + case ErrSCardRemovedCard: + return fmt.Errorf("Card was removed") + + /* case SCARD_W_SECURITY_VIOLATION: */ + /* case SCARD_W_WRONG_CHV: */ + /* case SCARD_W_CHV_BLOCKED: */ + /* case SCARD_W_EOF: */ + /* case SCARD_W_CANCELLED_BY_USER: */ + /* case SCARD_W_CARD_NOT_AUTHENTICATED: */ + + case ErrSCardUnsupportedFeature: + return fmt.Errorf("Feature not supported") + + default: + return fmt.Errorf("unknown error: %08x", code) + } +} diff --git a/vendor/github.com/gballet/go-libpcsclite/go.mod b/vendor/github.com/gballet/go-libpcsclite/go.mod new file mode 100644 index 000000000000..e97f46b7fe86 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/go.mod @@ -0,0 +1 @@ +module github.com/gballet/go-libpcsclite diff --git a/vendor/github.com/gballet/go-libpcsclite/msg.go b/vendor/github.com/gballet/go-libpcsclite/msg.go new file mode 100644 index 000000000000..1377082b14fa --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/msg.go @@ -0,0 +1,82 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package pcsc + +import ( + "encoding/binary" + "net" +) + +/** + * @brief Wrapper for the MessageSend() function. + * + * Called by clients to send messages to the server. + * The parameters \p command and \p data are set in the \c sharedSegmentMsg + * struct in order to be sent. + * + * @param[in] command Command to be sent. + * @param[in] dwClientID Client socket handle. + * @param[in] size Size of the message (\p data). + * @param[in] data_void Data to be sent. + * + * @return Same error codes as MessageSend(). + */ +func messageSendWithHeader(command uint32, conn net.Conn, data []byte) error { + /* Translate header into bytes */ + msgData := make([]byte, 8+len(data)) + binary.LittleEndian.PutUint32(msgData[4:], command) + binary.LittleEndian.PutUint32(msgData, uint32(len(data))) + + /* Copy payload */ + copy(msgData[8:], data) + + _, err := conn.Write(msgData) + return err +} + +// clientSetupSession prepares a communication channel for the client to talk to the server. +// This is called by the application to create a socket for local IPC with the +// server. The socket is associated to the file \c PCSCLITE_CSOCK_NAME. +/* + * @param[out] pdwClientID Client Connection ID. + * + * @retval 0 Success. + * @retval -1 Can not create the socket. + * @retval -1 The socket can not open a connection. + * @retval -1 Can not set the socket to non-blocking. + */ +func clientSetupSession(daemonPath string) (net.Conn, error) { + path := PCSCDSockName + if len(daemonPath) > 0 { + path = daemonPath + } + return net.Dial("unix", path) +} diff --git a/vendor/github.com/gballet/go-libpcsclite/winscard.go b/vendor/github.com/gballet/go-libpcsclite/winscard.go new file mode 100644 index 000000000000..b916db1621e7 --- /dev/null +++ b/vendor/github.com/gballet/go-libpcsclite/winscard.go @@ -0,0 +1,402 @@ +// BSD 3-Clause License +// +// Copyright (c) 2019, Guillaume Ballet +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the name of the copyright holder nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package pcsc + +import ( + "encoding/binary" + "fmt" + "net" + "sync" + "unsafe" +) + +// Client contains all the information needed to establish +// and maintain a connection to the deamon/card. +type Client struct { + conn net.Conn + + minor uint32 + major uint32 + + ctx uint32 + + mutex sync.Mutex + + readerStateDescriptors [MaxReaderStateDescriptors]ReaderState +} + +// EstablishContext asks the PCSC daemon to create a context +// handle for further communication with connected cards and +// readers. +func EstablishContext(path string, scope uint32) (*Client, error) { + client := &Client{} + + conn, err := clientSetupSession(path) + if err != nil { + return nil, err + } + client.conn = conn + + payload := make([]byte, 12) + response := make([]byte, 12) + + var code uint32 + var minor uint32 + for minor = ProtocolVersionMinor; minor <= ProtocolVersionMinor+1; minor++ { + /* Exchange version information */ + binary.LittleEndian.PutUint32(payload, ProtocolVersionMajor) + binary.LittleEndian.PutUint32(payload[4:], minor) + binary.LittleEndian.PutUint32(payload[8:], SCardSuccess.Code()) + err = messageSendWithHeader(CommandVersion, conn, payload) + if err != nil { + return nil, err + } + n, err := conn.Read(response) + if err != nil { + return nil, err + } + if n != len(response) { + return nil, fmt.Errorf("invalid response length: expected %d, got %d", len(response), n) + } + code = binary.LittleEndian.Uint32(response[8:]) + if code != SCardSuccess.Code() { + continue + } + client.major = binary.LittleEndian.Uint32(response) + client.minor = binary.LittleEndian.Uint32(response[4:]) + if client.major != ProtocolVersionMajor || client.minor != minor { + continue + } + break + } + + if code != SCardSuccess.Code() { + return nil, fmt.Errorf("invalid response code: expected %d, got %d (%v)", SCardSuccess, code, ErrorCode(code).Error()) + } + if client.major != ProtocolVersionMajor || (client.minor != minor && client.minor+1 != minor) { + return nil, fmt.Errorf("invalid version found: expected %d.%d, got %d.%d", ProtocolVersionMajor, ProtocolVersionMinor, client.major, client.minor) + } + + /* Establish the context proper */ + binary.LittleEndian.PutUint32(payload, scope) + binary.LittleEndian.PutUint32(payload[4:], 0) + binary.LittleEndian.PutUint32(payload[8:], SCardSuccess.Code()) + err = messageSendWithHeader(SCardEstablishContext, conn, payload) + if err != nil { + return nil, err + } + response = make([]byte, 12) + n, err := conn.Read(response) + if err != nil { + return nil, err + } + if n != len(response) { + return nil, fmt.Errorf("invalid response length: expected %d, got %d", len(response), n) + } + code = binary.LittleEndian.Uint32(response[8:]) + if code != SCardSuccess.Code() { + return nil, fmt.Errorf("invalid response code: expected %d, got %d (%v)", SCardSuccess, code, ErrorCode(code).Error()) + } + client.ctx = binary.LittleEndian.Uint32(response[4:]) + + return client, nil +} + +// ReleaseContext tells the daemon that the client will no longer +// need the context. +func (client *Client) ReleaseContext() error { + client.mutex.Lock() + defer client.mutex.Unlock() + + data := [8]byte{} + binary.LittleEndian.PutUint32(data[:], client.ctx) + binary.LittleEndian.PutUint32(data[4:], SCardSuccess.Code()) + err := messageSendWithHeader(SCardReleaseContext, client.conn, data[:]) + if err != nil { + return err + } + total := 0 + for total < len(data) { + n, err := client.conn.Read(data[total:]) + if err != nil { + return err + } + total += n + } + code := binary.LittleEndian.Uint32(data[4:]) + if code != SCardSuccess.Code() { + return fmt.Errorf("invalid return code: %x, %v", code, ErrorCode(code).Error()) + } + + return nil +} + +// Constants related to the reader state structure +const ( + ReaderStateNameLength = 128 + ReaderStateMaxAtrSizeLength = 33 + // NOTE: ATR is 32-byte aligned in the C version, which means it's + // actually 36 byte long and not 33. + ReaderStateDescriptorLength = ReaderStateNameLength + ReaderStateMaxAtrSizeLength + 5*4 + 3 + + MaxReaderStateDescriptors = 16 +) + +// ReaderState represent the state of a single reader, as reported +// by the PCSC daemon. +type ReaderState struct { + Name string /* reader name */ + eventCounter uint32 /* number of card events */ + readerState uint32 /* SCARD_* bit field */ + readerSharing uint32 /* PCSCLITE_SHARING_* sharing status */ + + cardAtr [ReaderStateMaxAtrSizeLength]byte /* ATR */ + cardAtrLength uint32 /* ATR length */ + cardProtocol uint32 /* SCARD_PROTOCOL_* value */ +} + +func getReaderState(data []byte) (ReaderState, error) { + ret := ReaderState{} + if len(data) < ReaderStateDescriptorLength { + return ret, fmt.Errorf("could not unmarshall data of length %d < %d", len(data), ReaderStateDescriptorLength) + } + + ret.Name = string(data[:ReaderStateNameLength]) + ret.eventCounter = binary.LittleEndian.Uint32(data[unsafe.Offsetof(ret.eventCounter):]) + ret.readerState = binary.LittleEndian.Uint32(data[unsafe.Offsetof(ret.readerState):]) + ret.readerSharing = binary.LittleEndian.Uint32(data[unsafe.Offsetof(ret.readerSharing):]) + copy(ret.cardAtr[:], data[unsafe.Offsetof(ret.cardAtr):unsafe.Offsetof(ret.cardAtr)+ReaderStateMaxAtrSizeLength]) + ret.cardAtrLength = binary.LittleEndian.Uint32(data[unsafe.Offsetof(ret.cardAtrLength):]) + ret.cardProtocol = binary.LittleEndian.Uint32(data[unsafe.Offsetof(ret.cardProtocol):]) + + return ret, nil +} + +// ListReaders gets the list of readers from the daemon +func (client *Client) ListReaders() ([]string, error) { + client.mutex.Lock() + defer client.mutex.Unlock() + + err := messageSendWithHeader(CommandGetReaderState, client.conn, []byte{}) + if err != nil { + return nil, err + } + response := make([]byte, ReaderStateDescriptorLength*MaxReaderStateDescriptors) + total := 0 + for total < len(response) { + n, err := client.conn.Read(response[total:]) + if err != nil { + return nil, err + } + total += n + } + + var names []string + for i := range client.readerStateDescriptors { + desc, err := getReaderState(response[i*ReaderStateDescriptorLength:]) + if err != nil { + return nil, err + } + client.readerStateDescriptors[i] = desc + if desc.Name[0] == 0 { + break + } + names = append(names, desc.Name) + } + + return names, nil +} + +// Offsets into the Connect request/response packet +const ( + SCardConnectReaderNameOffset = 4 + SCardConnectShareModeOffset = SCardConnectReaderNameOffset + ReaderStateNameLength + SCardConnectPreferredProtocolOffset = SCardConnectShareModeOffset + 4 + SCardConnectReturnValueOffset = SCardConnectPreferredProtocolOffset + 12 +) + +// Card represents the connection to a card +type Card struct { + handle uint32 + activeProto uint32 + client *Client +} + +// Connect asks the daemon to connect to the card +func (client *Client) Connect(name string, shareMode uint32, preferredProtocol uint32) (*Card, error) { + client.mutex.Lock() + defer client.mutex.Unlock() + + request := make([]byte, ReaderStateNameLength+4*6) + binary.LittleEndian.PutUint32(request, client.ctx) + copy(request[SCardConnectReaderNameOffset:], []byte(name)) + binary.LittleEndian.PutUint32(request[SCardConnectShareModeOffset:], shareMode) + binary.LittleEndian.PutUint32(request[SCardConnectPreferredProtocolOffset:], preferredProtocol) + binary.LittleEndian.PutUint32(request[SCardConnectReturnValueOffset:], SCardSuccess.Code()) + + err := messageSendWithHeader(SCardConnect, client.conn, request) + if err != nil { + return nil, err + } + response := make([]byte, ReaderStateNameLength+4*6) + total := 0 + for total < len(response) { + n, err := client.conn.Read(response[total:]) + if err != nil { + return nil, err + } + // fmt.Println("total, n", total, n, response) + total += n + } + code := binary.LittleEndian.Uint32(response[148:]) + if code != SCardSuccess.Code() { + return nil, fmt.Errorf("invalid return code: %x (%v)", code, ErrorCode(code).Error()) + } + handle := binary.LittleEndian.Uint32(response[140:]) + active := binary.LittleEndian.Uint32(response[SCardConnectPreferredProtocolOffset:]) + + return &Card{handle: handle, activeProto: active, client: client}, nil +} + +/** +* @brief contained in \ref SCARD_TRANSMIT Messages. +* +* These data are passed throw the field \c sharedSegmentMsg.data. + */ +type transmit struct { + hCard uint32 + ioSendPciProtocol uint32 + ioSendPciLength uint32 + cbSendLength uint32 + ioRecvPciProtocol uint32 + ioRecvPciLength uint32 + pcbRecvLength uint32 + rv uint32 +} + +// SCardIoRequest contains the info needed for performing an IO request +type SCardIoRequest struct { + proto uint32 + length uint32 +} + +const ( + TransmitRequestLength = 32 +) + +// Transmit sends request data to a card and returns the response +func (card *Card) Transmit(adpu []byte) ([]byte, *SCardIoRequest, error) { + card.client.mutex.Lock() + defer card.client.mutex.Unlock() + + request := [TransmitRequestLength]byte{} + binary.LittleEndian.PutUint32(request[:], card.handle) + binary.LittleEndian.PutUint32(request[4:] /*card.activeProto*/, 2) + binary.LittleEndian.PutUint32(request[8:], 8) + binary.LittleEndian.PutUint32(request[12:], uint32(len(adpu))) + binary.LittleEndian.PutUint32(request[16:], 0) + binary.LittleEndian.PutUint32(request[20:], 0) + binary.LittleEndian.PutUint32(request[24:], 0x10000) + binary.LittleEndian.PutUint32(request[28:], SCardSuccess.Code()) + err := messageSendWithHeader(SCardTransmit, card.client.conn, request[:]) + if err != nil { + return nil, nil, err + } + // Add the ADPU payload after the transmit descriptor + n, err := card.client.conn.Write(adpu) + if err != nil { + return nil, nil, err + } + if n != len(adpu) { + return nil, nil, fmt.Errorf("Invalid number of bytes written: expected %d, got %d", len(adpu), n) + } + response := [TransmitRequestLength]byte{} + total := 0 + for total < len(response) { + n, err = card.client.conn.Read(response[total:]) + if err != nil { + return nil, nil, err + } + total += n + } + + code := binary.LittleEndian.Uint32(response[28:]) + if code != SCardSuccess.Code() { + return nil, nil, fmt.Errorf("invalid return code: %x (%v)", code, ErrorCode(code).Error()) + } + + // Recover the response data + recvProto := binary.LittleEndian.Uint32(response[16:]) + recvLength := binary.LittleEndian.Uint32(response[20:]) + recv := &SCardIoRequest{proto: recvProto, length: recvLength} + recvLength = binary.LittleEndian.Uint32(response[24:]) + recvData := make([]byte, recvLength) + total = 0 + for uint32(total) < recvLength { + n, err := card.client.conn.Read(recvData[total:]) + if err != nil { + return nil, nil, err + } + total += n + } + + return recvData, recv, nil +} + +// Disconnect tells the PCSC daemon that the client is no longer +// interested in communicating with the card. +func (card *Card) Disconnect(disposition uint32) error { + card.client.mutex.Lock() + defer card.client.mutex.Unlock() + + data := [12]byte{} + binary.LittleEndian.PutUint32(data[:], card.handle) + binary.LittleEndian.PutUint32(data[4:], disposition) + binary.LittleEndian.PutUint32(data[8:], SCardSuccess.Code()) + err := messageSendWithHeader(SCardDisConnect, card.client.conn, data[:]) + if err != nil { + return err + } + total := 0 + for total < len(data) { + n, err := card.client.conn.Read(data[total:]) + if err != nil { + return err + } + total += n + } + code := binary.LittleEndian.Uint32(data[8:]) + if code != SCardSuccess.Code() { + return fmt.Errorf("invalid return code: %x (%v)", code, ErrorCode(code).Error()) + } + + return nil +} diff --git a/vendor/github.com/gizak/termui/README.md b/vendor/github.com/gizak/termui/README.md deleted file mode 100644 index d5f3d9a8f117..000000000000 --- a/vendor/github.com/gizak/termui/README.md +++ /dev/null @@ -1,151 +0,0 @@ -# termui [![Build Status](https://travis-ci.org/gizak/termui.svg?branch=master)](https://travis-ci.org/gizak/termui) [![Doc Status](https://godoc.org/github.com/gizak/termui?status.png)](https://godoc.org/github.com/gizak/termui) - -demo cast under osx 10.10; Terminal.app; Menlo Regular 12pt.) - -`termui` is a cross-platform, easy-to-compile, and fully-customizable terminal dashboard. It is inspired by [blessed-contrib](https://github.com/yaronn/blessed-contrib), but purely in Go. - -Now version v2 has arrived! It brings new event system, new theme system, new `Buffer` interface and specific colour text rendering. (some docs are missing, but it will be completed soon!) - -## Installation - -`master` mirrors v2 branch, to install: - - go get -u github.com/gizak/termui - -It is recommanded to use locked deps by using [glide](https://glide.sh): move to `termui` src directory then run `glide up`. - -For the compatible reason, you can choose to install the legacy version of `termui`: - - go get gopkg.in/gizak/termui.v1 - -## Usage - -### Layout - -To use `termui`, the very first thing you may want to know is how to manage layout. `termui` offers two ways of doing this, known as absolute layout and grid layout. - -__Absolute layout__ - -Each widget has an underlying block structure which basically is a box model. It has border, label and padding properties. A border of a widget can be chosen to hide or display (with its border label), you can pick a different front/back colour for the border as well. To display such a widget at a specific location in terminal window, you need to assign `.X`, `.Y`, `.Height`, `.Width` values for each widget before sending it to `.Render`. Let's demonstrate these by a code snippet: - -`````go - import ui "github.com/gizak/termui" // <- ui shortcut, optional - - func main() { - err := ui.Init() - if err != nil { - panic(err) - } - defer ui.Close() - - p := ui.NewPar(":PRESS q TO QUIT DEMO") - p.Height = 3 - p.Width = 50 - p.TextFgColor = ui.ColorWhite - p.BorderLabel = "Text Box" - p.BorderFg = ui.ColorCyan - - g := ui.NewGauge() - g.Percent = 50 - g.Width = 50 - g.Height = 3 - g.Y = 11 - g.BorderLabel = "Gauge" - g.BarColor = ui.ColorRed - g.BorderFg = ui.ColorWhite - g.BorderLabelFg = ui.ColorCyan - - ui.Render(p, g) // feel free to call Render, it's async and non-block - - // event handler... - } -````` - -Note that components can be overlapped (I'd rather call this a feature...), `Render(rs ...Renderer)` renders its args from left to right (i.e. each component's weight is arising from left to right). - -__Grid layout:__ - -grid - -Grid layout uses [12 columns grid system](http://www.w3schools.com/bootstrap/bootstrap_grid_system.asp) with expressive syntax. To use `Grid`, all we need to do is build a widget tree consisting of `Row`s and `Col`s (Actually a `Col` is also a `Row` but with a widget endpoint attached). - -```go - import ui "github.com/gizak/termui" - // init and create widgets... - - // build - ui.Body.AddRows( - ui.NewRow( - ui.NewCol(6, 0, widget0), - ui.NewCol(6, 0, widget1)), - ui.NewRow( - ui.NewCol(3, 0, widget2), - ui.NewCol(3, 0, widget30, widget31, widget32), - ui.NewCol(6, 0, widget4))) - - // calculate layout - ui.Body.Align() - - ui.Render(ui.Body) -``` - -### Events - -`termui` ships with a http-like event mux handling system. All events are channeled up from different sources (typing, click, windows resize, custom event) and then encoded as universal `Event` object. `Event.Path` indicates the event type and `Event.Data` stores the event data struct. Add a handler to a certain event is easy as below: - -```go - // handle key q pressing - ui.Handle("/sys/kbd/q", func(ui.Event) { - // press q to quit - ui.StopLoop() - }) - - ui.Handle("/sys/kbd/C-x", func(ui.Event) { - // handle Ctrl + x combination - }) - - ui.Handle("/sys/kbd", func(ui.Event) { - // handle all other key pressing - }) - - // handle a 1s timer - ui.Handle("/timer/1s", func(e ui.Event) { - t := e.Data.(ui.EvtTimer) - // t is a EvtTimer - if t.Count%2 ==0 { - // do something - } - }) - - ui.Loop() // block until StopLoop is called -``` - -### Widgets - -Click image to see the corresponding demo codes. - -[par](https://github.com/gizak/termui/blob/master/_example/par.go) -[list](https://github.com/gizak/termui/blob/master/_example/list.go) -[gauge](https://github.com/gizak/termui/blob/master/_example/gauge.go) -[linechart](https://github.com/gizak/termui/blob/master/_example/linechart.go) -[barchart](https://github.com/gizak/termui/blob/master/_example/barchart.go) -[barchart](https://github.com/gizak/termui/blob/master/_example/mbarchart.go) -[sparklines](https://github.com/gizak/termui/blob/master/_example/sparklines.go) -[table](https://github.com/gizak/termui/blob/master/_example/table.go) - -## GoDoc - -[godoc](https://godoc.org/github.com/gizak/termui) - -## TODO - -- [x] Grid layout -- [x] Event system -- [x] Canvas widget -- [x] Refine APIs -- [ ] Focusable widgets - -## Changelog - -## License -This library is under the [MIT License](http://opensource.org/licenses/MIT) diff --git a/vendor/github.com/gizak/termui/barchart.go b/vendor/github.com/gizak/termui/barchart.go deleted file mode 100644 index 6560c8b14e46..000000000000 --- a/vendor/github.com/gizak/termui/barchart.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "fmt" - -// BarChart creates multiple bars in a widget: -/* - bc := termui.NewBarChart() - data := []int{3, 2, 5, 3, 9, 5} - bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} - bc.BorderLabel = "Bar Chart" - bc.Data = data - bc.Width = 26 - bc.Height = 10 - bc.DataLabels = bclabels - bc.TextColor = termui.ColorGreen - bc.BarColor = termui.ColorRed - bc.NumColor = termui.ColorYellow -*/ -type BarChart struct { - Block - BarColor Attribute - TextColor Attribute - NumColor Attribute - Data []int - DataLabels []string - BarWidth int - BarGap int - CellChar rune - labels [][]rune - dataNum [][]rune - numBar int - scale float64 - max int -} - -// NewBarChart returns a new *BarChart with current theme. -func NewBarChart() *BarChart { - bc := &BarChart{Block: *NewBlock()} - bc.BarColor = ThemeAttr("barchart.bar.bg") - bc.NumColor = ThemeAttr("barchart.num.fg") - bc.TextColor = ThemeAttr("barchart.text.fg") - bc.BarGap = 1 - bc.BarWidth = 3 - bc.CellChar = ' ' - return bc -} - -func (bc *BarChart) layout() { - bc.numBar = bc.innerArea.Dx() / (bc.BarGap + bc.BarWidth) - bc.labels = make([][]rune, bc.numBar) - bc.dataNum = make([][]rune, len(bc.Data)) - - for i := 0; i < bc.numBar && i < len(bc.DataLabels) && i < len(bc.Data); i++ { - bc.labels[i] = trimStr2Runes(bc.DataLabels[i], bc.BarWidth) - n := bc.Data[i] - s := fmt.Sprint(n) - bc.dataNum[i] = trimStr2Runes(s, bc.BarWidth) - } - - //bc.max = bc.Data[0] // what if Data is nil? Sometimes when bar graph is nill it produces panic with panic: runtime error: index out of range - // Asign a negative value to get maxvalue auto-populates - if bc.max == 0 { - bc.max = -1 - } - for i := 0; i < len(bc.Data); i++ { - if bc.max < bc.Data[i] { - bc.max = bc.Data[i] - } - } - bc.scale = float64(bc.max) / float64(bc.innerArea.Dy()-1) -} - -func (bc *BarChart) SetMax(max int) { - - if max > 0 { - bc.max = max - } -} - -// Buffer implements Bufferer interface. -func (bc *BarChart) Buffer() Buffer { - buf := bc.Block.Buffer() - bc.layout() - - for i := 0; i < bc.numBar && i < len(bc.Data) && i < len(bc.DataLabels); i++ { - h := int(float64(bc.Data[i]) / bc.scale) - oftX := i * (bc.BarWidth + bc.BarGap) - - barBg := bc.Bg - barFg := bc.BarColor - - if bc.CellChar == ' ' { - barBg = bc.BarColor - barFg = ColorDefault - if bc.BarColor == ColorDefault { // the same as above - barBg |= AttrReverse - } - } - - // plot bar - for j := 0; j < bc.BarWidth; j++ { - for k := 0; k < h; k++ { - c := Cell{ - Ch: bc.CellChar, - Bg: barBg, - Fg: barFg, - } - - x := bc.innerArea.Min.X + i*(bc.BarWidth+bc.BarGap) + j - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 2 - k - buf.Set(x, y, c) - } - } - // plot text - for j, k := 0, 0; j < len(bc.labels[i]); j++ { - w := charWidth(bc.labels[i][j]) - c := Cell{ - Ch: bc.labels[i][j], - Bg: bc.Bg, - Fg: bc.TextColor, - } - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 1 - x := bc.innerArea.Min.X + oftX + k - buf.Set(x, y, c) - k += w - } - // plot num - for j := 0; j < len(bc.dataNum[i]); j++ { - c := Cell{ - Ch: bc.dataNum[i][j], - Fg: bc.NumColor, - Bg: barBg, - } - - if h == 0 { - c.Bg = bc.Bg - } - x := bc.innerArea.Min.X + oftX + (bc.BarWidth-len(bc.dataNum[i]))/2 + j - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 2 - buf.Set(x, y, c) - } - } - - return buf -} diff --git a/vendor/github.com/gizak/termui/block.go b/vendor/github.com/gizak/termui/block.go deleted file mode 100644 index 3e8571bc2326..000000000000 --- a/vendor/github.com/gizak/termui/block.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "image" - -// Hline is a horizontal line. -type Hline struct { - X int - Y int - Len int - Fg Attribute - Bg Attribute -} - -// Vline is a vertical line. -type Vline struct { - X int - Y int - Len int - Fg Attribute - Bg Attribute -} - -// Buffer draws a horizontal line. -func (l Hline) Buffer() Buffer { - if l.Len <= 0 { - return NewBuffer() - } - return NewFilledBuffer(l.X, l.Y, l.X+l.Len, l.Y+1, HORIZONTAL_LINE, l.Fg, l.Bg) -} - -// Buffer draws a vertical line. -func (l Vline) Buffer() Buffer { - if l.Len <= 0 { - return NewBuffer() - } - return NewFilledBuffer(l.X, l.Y, l.X+1, l.Y+l.Len, VERTICAL_LINE, l.Fg, l.Bg) -} - -// Buffer draws a box border. -func (b Block) drawBorder(buf Buffer) { - if !b.Border { - return - } - - min := b.area.Min - max := b.area.Max - - x0 := min.X - y0 := min.Y - x1 := max.X - 1 - y1 := max.Y - 1 - - // draw lines - if b.BorderTop { - buf.Merge(Hline{x0, y0, x1 - x0, b.BorderFg, b.BorderBg}.Buffer()) - } - if b.BorderBottom { - buf.Merge(Hline{x0, y1, x1 - x0, b.BorderFg, b.BorderBg}.Buffer()) - } - if b.BorderLeft { - buf.Merge(Vline{x0, y0, y1 - y0, b.BorderFg, b.BorderBg}.Buffer()) - } - if b.BorderRight { - buf.Merge(Vline{x1, y0, y1 - y0, b.BorderFg, b.BorderBg}.Buffer()) - } - - // draw corners - if b.BorderTop && b.BorderLeft && b.area.Dx() > 0 && b.area.Dy() > 0 { - buf.Set(x0, y0, Cell{TOP_LEFT, b.BorderFg, b.BorderBg}) - } - if b.BorderTop && b.BorderRight && b.area.Dx() > 1 && b.area.Dy() > 0 { - buf.Set(x1, y0, Cell{TOP_RIGHT, b.BorderFg, b.BorderBg}) - } - if b.BorderBottom && b.BorderLeft && b.area.Dx() > 0 && b.area.Dy() > 1 { - buf.Set(x0, y1, Cell{BOTTOM_LEFT, b.BorderFg, b.BorderBg}) - } - if b.BorderBottom && b.BorderRight && b.area.Dx() > 1 && b.area.Dy() > 1 { - buf.Set(x1, y1, Cell{BOTTOM_RIGHT, b.BorderFg, b.BorderBg}) - } -} - -func (b Block) drawBorderLabel(buf Buffer) { - maxTxtW := b.area.Dx() - 2 - tx := DTrimTxCls(DefaultTxBuilder.Build(b.BorderLabel, b.BorderLabelFg, b.BorderLabelBg), maxTxtW) - - for i, w := 0, 0; i < len(tx); i++ { - buf.Set(b.area.Min.X+1+w, b.area.Min.Y, tx[i]) - w += tx[i].Width() - } -} - -// Block is a base struct for all other upper level widgets, -// consider it as css: display:block. -// Normally you do not need to create it manually. -type Block struct { - area image.Rectangle - innerArea image.Rectangle - X int - Y int - Border bool - BorderFg Attribute - BorderBg Attribute - BorderLeft bool - BorderRight bool - BorderTop bool - BorderBottom bool - BorderLabel string - BorderLabelFg Attribute - BorderLabelBg Attribute - Display bool - Bg Attribute - Width int - Height int - PaddingTop int - PaddingBottom int - PaddingLeft int - PaddingRight int - id string - Float Align -} - -// NewBlock returns a *Block which inherits styles from current theme. -func NewBlock() *Block { - b := Block{} - b.Display = true - b.Border = true - b.BorderLeft = true - b.BorderRight = true - b.BorderTop = true - b.BorderBottom = true - b.BorderBg = ThemeAttr("border.bg") - b.BorderFg = ThemeAttr("border.fg") - b.BorderLabelBg = ThemeAttr("label.bg") - b.BorderLabelFg = ThemeAttr("label.fg") - b.Bg = ThemeAttr("block.bg") - b.Width = 2 - b.Height = 2 - b.id = GenId() - b.Float = AlignNone - return &b -} - -func (b Block) Id() string { - return b.id -} - -// Align computes box model -func (b *Block) Align() { - // outer - b.area.Min.X = 0 - b.area.Min.Y = 0 - b.area.Max.X = b.Width - b.area.Max.Y = b.Height - - // float - b.area = AlignArea(TermRect(), b.area, b.Float) - b.area = MoveArea(b.area, b.X, b.Y) - - // inner - b.innerArea.Min.X = b.area.Min.X + b.PaddingLeft - b.innerArea.Min.Y = b.area.Min.Y + b.PaddingTop - b.innerArea.Max.X = b.area.Max.X - b.PaddingRight - b.innerArea.Max.Y = b.area.Max.Y - b.PaddingBottom - - if b.Border { - if b.BorderLeft { - b.innerArea.Min.X++ - } - if b.BorderRight { - b.innerArea.Max.X-- - } - if b.BorderTop { - b.innerArea.Min.Y++ - } - if b.BorderBottom { - b.innerArea.Max.Y-- - } - } -} - -// InnerBounds returns the internal bounds of the block after aligning and -// calculating the padding and border, if any. -func (b *Block) InnerBounds() image.Rectangle { - b.Align() - return b.innerArea -} - -// Buffer implements Bufferer interface. -// Draw background and border (if any). -func (b *Block) Buffer() Buffer { - b.Align() - - buf := NewBuffer() - buf.SetArea(b.area) - buf.Fill(' ', ColorDefault, b.Bg) - - b.drawBorder(buf) - b.drawBorderLabel(buf) - - return buf -} - -// GetHeight implements GridBufferer. -// It returns current height of the block. -func (b Block) GetHeight() int { - return b.Height -} - -// SetX implements GridBufferer interface, which sets block's x position. -func (b *Block) SetX(x int) { - b.X = x -} - -// SetY implements GridBufferer interface, it sets y position for block. -func (b *Block) SetY(y int) { - b.Y = y -} - -// SetWidth implements GridBuffer interface, it sets block's width. -func (b *Block) SetWidth(w int) { - b.Width = w -} - -func (b Block) InnerWidth() int { - return b.innerArea.Dx() -} - -func (b Block) InnerHeight() int { - return b.innerArea.Dy() -} - -func (b Block) InnerX() int { - return b.innerArea.Min.X -} - -func (b Block) InnerY() int { return b.innerArea.Min.Y } diff --git a/vendor/github.com/gizak/termui/block_common.go b/vendor/github.com/gizak/termui/block_common.go deleted file mode 100644 index 6438bf217dd7..000000000000 --- a/vendor/github.com/gizak/termui/block_common.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -// +build !windows - -package termui - -const TOP_RIGHT = '┐' -const VERTICAL_LINE = '│' -const HORIZONTAL_LINE = '─' -const TOP_LEFT = '┌' -const BOTTOM_RIGHT = '┘' -const BOTTOM_LEFT = '└' -const VERTICAL_LEFT = '┤' -const VERTICAL_RIGHT = '├' -const HORIZONTAL_DOWN = '┬' -const HORIZONTAL_UP = '┴' -const QUOTA_LEFT = '«' -const QUOTA_RIGHT = '»' diff --git a/vendor/github.com/gizak/termui/block_windows.go b/vendor/github.com/gizak/termui/block_windows.go deleted file mode 100644 index a4fba77d7c31..000000000000 --- a/vendor/github.com/gizak/termui/block_windows.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -// +build windows - -package termui - -const TOP_RIGHT = '+' -const VERTICAL_LINE = '|' -const HORIZONTAL_LINE = '-' -const TOP_LEFT = '+' -const BOTTOM_RIGHT = '+' -const BOTTOM_LEFT = '+' diff --git a/vendor/github.com/gizak/termui/buffer.go b/vendor/github.com/gizak/termui/buffer.go deleted file mode 100644 index 9e3a97345d25..000000000000 --- a/vendor/github.com/gizak/termui/buffer.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "image" - -// Cell is a rune with assigned Fg and Bg -type Cell struct { - Ch rune - Fg Attribute - Bg Attribute -} - -// Buffer is a renderable rectangle cell data container. -type Buffer struct { - Area image.Rectangle // selected drawing area - CellMap map[image.Point]Cell -} - -// At returns the cell at (x,y). -func (b Buffer) At(x, y int) Cell { - return b.CellMap[image.Pt(x, y)] -} - -// Set assigns a char to (x,y) -func (b Buffer) Set(x, y int, c Cell) { - b.CellMap[image.Pt(x, y)] = c -} - -// Bounds returns the domain for which At can return non-zero color. -func (b Buffer) Bounds() image.Rectangle { - x0, y0, x1, y1 := 0, 0, 0, 0 - for p := range b.CellMap { - if p.X > x1 { - x1 = p.X - } - if p.X < x0 { - x0 = p.X - } - if p.Y > y1 { - y1 = p.Y - } - if p.Y < y0 { - y0 = p.Y - } - } - return image.Rect(x0, y0, x1+1, y1+1) -} - -// SetArea assigns a new rect area to Buffer b. -func (b *Buffer) SetArea(r image.Rectangle) { - b.Area.Max = r.Max - b.Area.Min = r.Min -} - -// Sync sets drawing area to the buffer's bound -func (b *Buffer) Sync() { - b.SetArea(b.Bounds()) -} - -// NewCell returns a new cell -func NewCell(ch rune, fg, bg Attribute) Cell { - return Cell{ch, fg, bg} -} - -// Merge merges bs Buffers onto b -func (b *Buffer) Merge(bs ...Buffer) { - for _, buf := range bs { - for p, v := range buf.CellMap { - b.Set(p.X, p.Y, v) - } - b.SetArea(b.Area.Union(buf.Area)) - } -} - -// NewBuffer returns a new Buffer -func NewBuffer() Buffer { - return Buffer{ - CellMap: make(map[image.Point]Cell), - Area: image.Rectangle{}} -} - -// Fill fills the Buffer b with ch,fg and bg. -func (b Buffer) Fill(ch rune, fg, bg Attribute) { - for x := b.Area.Min.X; x < b.Area.Max.X; x++ { - for y := b.Area.Min.Y; y < b.Area.Max.Y; y++ { - b.Set(x, y, Cell{ch, fg, bg}) - } - } -} - -// NewFilledBuffer returns a new Buffer filled with ch, fb and bg. -func NewFilledBuffer(x0, y0, x1, y1 int, ch rune, fg, bg Attribute) Buffer { - buf := NewBuffer() - buf.Area.Min = image.Pt(x0, y0) - buf.Area.Max = image.Pt(x1, y1) - - for x := buf.Area.Min.X; x < buf.Area.Max.X; x++ { - for y := buf.Area.Min.Y; y < buf.Area.Max.Y; y++ { - buf.Set(x, y, Cell{ch, fg, bg}) - } - } - return buf -} diff --git a/vendor/github.com/gizak/termui/canvas.go b/vendor/github.com/gizak/termui/canvas.go deleted file mode 100644 index 6d2513ebd4f1..000000000000 --- a/vendor/github.com/gizak/termui/canvas.go +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -/* -dots: - ,___, - |1 4| - |2 5| - |3 6| - |7 8| - ````` -*/ - -var brailleBase = '\u2800' - -var brailleOftMap = [4][2]rune{ - {'\u0001', '\u0008'}, - {'\u0002', '\u0010'}, - {'\u0004', '\u0020'}, - {'\u0040', '\u0080'}} - -// Canvas contains drawing map: i,j -> rune -type Canvas map[[2]int]rune - -// NewCanvas returns an empty Canvas -func NewCanvas() Canvas { - return make(map[[2]int]rune) -} - -func chOft(x, y int) rune { - return brailleOftMap[y%4][x%2] -} - -func (c Canvas) rawCh(x, y int) rune { - if ch, ok := c[[2]int{x, y}]; ok { - return ch - } - return '\u0000' //brailleOffset -} - -// return coordinate in terminal -func chPos(x, y int) (int, int) { - return y / 4, x / 2 -} - -// Set sets a point (x,y) in the virtual coordinate -func (c Canvas) Set(x, y int) { - i, j := chPos(x, y) - ch := c.rawCh(i, j) - ch |= chOft(x, y) - c[[2]int{i, j}] = ch -} - -// Unset removes point (x,y) -func (c Canvas) Unset(x, y int) { - i, j := chPos(x, y) - ch := c.rawCh(i, j) - ch &= ^chOft(x, y) - c[[2]int{i, j}] = ch -} - -// Buffer returns un-styled points -func (c Canvas) Buffer() Buffer { - buf := NewBuffer() - for k, v := range c { - buf.Set(k[0], k[1], Cell{Ch: v + brailleBase}) - } - return buf -} diff --git a/vendor/github.com/gizak/termui/config.py b/vendor/github.com/gizak/termui/config.py deleted file mode 100644 index 30fadcf86897..000000000000 --- a/vendor/github.com/gizak/termui/config.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env python3 - -import re -import os -import io - -copyright = """// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -""" - -exclude_dirs = [".git", "_docs"] -exclude_files = [] -include_dirs = [".", "debug", "extra", "test", "_example"] - - -def is_target(fpath): - if os.path.splitext(fpath)[-1] == ".go": - return True - return False - - -def update_copyright(fpath): - print("processing " + fpath) - f = io.open(fpath, 'r', encoding='utf-8') - fstr = f.read() - f.close() - - # remove old - m = re.search('^// Copyright .+?\r?\n\r?\n', fstr, re.MULTILINE|re.DOTALL) - if m: - fstr = fstr[m.end():] - - # add new - fstr = copyright + fstr - f = io.open(fpath, 'w',encoding='utf-8') - f.write(fstr) - f.close() - - -def main(): - for d in include_dirs: - files = [ - os.path.join(d, f) for f in os.listdir(d) - if os.path.isfile(os.path.join(d, f)) - ] - for f in files: - if is_target(f): - update_copyright(f) - - -if __name__ == '__main__': - main() diff --git a/vendor/github.com/gizak/termui/doc.go b/vendor/github.com/gizak/termui/doc.go deleted file mode 100644 index 13924eb1f7d7..000000000000 --- a/vendor/github.com/gizak/termui/doc.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -/* -Package termui is a library designed for creating command line UI. For more info, goto http://github.com/gizak/termui - -A simplest example: - package main - - import ui "github.com/gizak/termui" - - func main() { - if err:=ui.Init(); err != nil { - panic(err) - } - defer ui.Close() - - g := ui.NewGauge() - g.Percent = 50 - g.Width = 50 - g.BorderLabel = "Gauge" - - ui.Render(g) - - ui.Loop() - } -*/ -package termui diff --git a/vendor/github.com/gizak/termui/events.go b/vendor/github.com/gizak/termui/events.go deleted file mode 100644 index 16d9bd9cc34a..000000000000 --- a/vendor/github.com/gizak/termui/events.go +++ /dev/null @@ -1,324 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "path" - "strconv" - "sync" - "time" - - "github.com/nsf/termbox-go" -) - -type Event struct { - Type string - Path string - From string - To string - Data interface{} - Time int64 -} - -var sysEvtChs []chan Event - -type EvtKbd struct { - KeyStr string -} - -func evtKbd(e termbox.Event) EvtKbd { - ek := EvtKbd{} - - k := string(e.Ch) - pre := "" - mod := "" - - if e.Mod == termbox.ModAlt { - mod = "M-" - } - if e.Ch == 0 { - if e.Key > 0xFFFF-12 { - k = "" - } else if e.Key > 0xFFFF-25 { - ks := []string{"", "", "", "", "", "", "", "", "", ""} - k = ks[0xFFFF-int(e.Key)-12] - } - - if e.Key <= 0x7F { - pre = "C-" - k = string('a' - 1 + int(e.Key)) - kmap := map[termbox.Key][2]string{ - termbox.KeyCtrlSpace: {"C-", ""}, - termbox.KeyBackspace: {"", ""}, - termbox.KeyTab: {"", ""}, - termbox.KeyEnter: {"", ""}, - termbox.KeyEsc: {"", ""}, - termbox.KeyCtrlBackslash: {"C-", "\\"}, - termbox.KeyCtrlSlash: {"C-", "/"}, - termbox.KeySpace: {"", ""}, - termbox.KeyCtrl8: {"C-", "8"}, - } - if sk, ok := kmap[e.Key]; ok { - pre = sk[0] - k = sk[1] - } - } - } - - ek.KeyStr = pre + mod + k - return ek -} - -func crtTermboxEvt(e termbox.Event) Event { - systypemap := map[termbox.EventType]string{ - termbox.EventKey: "keyboard", - termbox.EventResize: "window", - termbox.EventMouse: "mouse", - termbox.EventError: "error", - termbox.EventInterrupt: "interrupt", - } - ne := Event{From: "/sys", Time: time.Now().Unix()} - typ := e.Type - ne.Type = systypemap[typ] - - switch typ { - case termbox.EventKey: - kbd := evtKbd(e) - ne.Path = "/sys/kbd/" + kbd.KeyStr - ne.Data = kbd - case termbox.EventResize: - wnd := EvtWnd{} - wnd.Width = e.Width - wnd.Height = e.Height - ne.Path = "/sys/wnd/resize" - ne.Data = wnd - case termbox.EventError: - err := EvtErr(e.Err) - ne.Path = "/sys/err" - ne.Data = err - case termbox.EventMouse: - m := EvtMouse{} - m.X = e.MouseX - m.Y = e.MouseY - ne.Path = "/sys/mouse" - ne.Data = m - } - return ne -} - -type EvtWnd struct { - Width int - Height int -} - -type EvtMouse struct { - X int - Y int - Press string -} - -type EvtErr error - -func hookTermboxEvt() { - for { - e := termbox.PollEvent() - - for _, c := range sysEvtChs { - go func(ch chan Event) { - ch <- crtTermboxEvt(e) - }(c) - } - } -} - -func NewSysEvtCh() chan Event { - ec := make(chan Event) - sysEvtChs = append(sysEvtChs, ec) - return ec -} - -var DefaultEvtStream = NewEvtStream() - -type EvtStream struct { - sync.RWMutex - srcMap map[string]chan Event - stream chan Event - wg sync.WaitGroup - sigStopLoop chan Event - Handlers map[string]func(Event) - hook func(Event) -} - -func NewEvtStream() *EvtStream { - return &EvtStream{ - srcMap: make(map[string]chan Event), - stream: make(chan Event), - Handlers: make(map[string]func(Event)), - sigStopLoop: make(chan Event), - } -} - -func (es *EvtStream) Init() { - es.Merge("internal", es.sigStopLoop) - go func() { - es.wg.Wait() - close(es.stream) - }() -} - -func cleanPath(p string) string { - if p == "" { - return "/" - } - if p[0] != '/' { - p = "/" + p - } - return path.Clean(p) -} - -func isPathMatch(pattern, path string) bool { - if len(pattern) == 0 { - return false - } - n := len(pattern) - return len(path) >= n && path[0:n] == pattern -} - -func (es *EvtStream) Merge(name string, ec chan Event) { - es.Lock() - defer es.Unlock() - - es.wg.Add(1) - es.srcMap[name] = ec - - go func(a chan Event) { - for n := range a { - n.From = name - es.stream <- n - } - es.wg.Done() - }(ec) -} - -func (es *EvtStream) Handle(path string, handler func(Event)) { - es.Handlers[cleanPath(path)] = handler -} - -func findMatch(mux map[string]func(Event), path string) string { - n := -1 - pattern := "" - for m := range mux { - if !isPathMatch(m, path) { - continue - } - if len(m) > n { - pattern = m - n = len(m) - } - } - return pattern - -} - -// Remove all existing defined Handlers from the map -func (es *EvtStream) ResetHandlers() { - for Path, _ := range es.Handlers { - delete(es.Handlers, Path) - } - return -} - -func (es *EvtStream) match(path string) string { - return findMatch(es.Handlers, path) -} - -func (es *EvtStream) Hook(f func(Event)) { - es.hook = f -} - -func (es *EvtStream) Loop() { - for e := range es.stream { - switch e.Path { - case "/sig/stoploop": - return - } - go func(a Event) { - es.RLock() - defer es.RUnlock() - if pattern := es.match(a.Path); pattern != "" { - es.Handlers[pattern](a) - } - }(e) - if es.hook != nil { - es.hook(e) - } - } -} - -func (es *EvtStream) StopLoop() { - go func() { - e := Event{ - Path: "/sig/stoploop", - } - es.sigStopLoop <- e - }() -} - -func Merge(name string, ec chan Event) { - DefaultEvtStream.Merge(name, ec) -} - -func Handle(path string, handler func(Event)) { - DefaultEvtStream.Handle(path, handler) -} - -func Loop() { - DefaultEvtStream.Loop() -} - -func StopLoop() { - DefaultEvtStream.StopLoop() -} - -type EvtTimer struct { - Duration time.Duration - Count uint64 -} - -func NewTimerCh(du time.Duration) chan Event { - t := make(chan Event) - - go func(a chan Event) { - n := uint64(0) - for { - n++ - time.Sleep(du) - e := Event{} - e.Type = "timer" - e.Path = "/timer/" + du.String() - e.Time = time.Now().Unix() - e.Data = EvtTimer{ - Duration: du, - Count: n, - } - t <- e - - } - }(t) - return t -} - -var DefaultHandler = func(e Event) { -} - -var usrEvtCh = make(chan Event) - -func SendCustomEvt(path string, data interface{}) { - e := Event{} - e.Path = path - e.Data = data - e.Time = time.Now().Unix() - usrEvtCh <- e -} diff --git a/vendor/github.com/gizak/termui/gauge.go b/vendor/github.com/gizak/termui/gauge.go deleted file mode 100644 index 9f6ce3a706c2..000000000000 --- a/vendor/github.com/gizak/termui/gauge.go +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "strconv" - "strings" -) - -// Gauge is a progress bar like widget. -// A simple example: -/* - g := termui.NewGauge() - g.Percent = 40 - g.Width = 50 - g.Height = 3 - g.BorderLabel = "Slim Gauge" - g.BarColor = termui.ColorRed - g.PercentColor = termui.ColorBlue -*/ - -const ColorUndef Attribute = Attribute(^uint16(0)) - -type Gauge struct { - Block - Percent int - BarColor Attribute - PercentColor Attribute - PercentColorHighlighted Attribute - Label string - LabelAlign Align -} - -// NewGauge return a new gauge with current theme. -func NewGauge() *Gauge { - g := &Gauge{ - Block: *NewBlock(), - PercentColor: ThemeAttr("gauge.percent.fg"), - BarColor: ThemeAttr("gauge.bar.bg"), - Label: "{{percent}}%", - LabelAlign: AlignCenter, - PercentColorHighlighted: ColorUndef, - } - - g.Width = 12 - g.Height = 5 - return g -} - -// Buffer implements Bufferer interface. -func (g *Gauge) Buffer() Buffer { - buf := g.Block.Buffer() - - // plot bar - w := g.Percent * g.innerArea.Dx() / 100 - for i := 0; i < g.innerArea.Dy(); i++ { - for j := 0; j < w; j++ { - c := Cell{} - c.Ch = ' ' - c.Bg = g.BarColor - if c.Bg == ColorDefault { - c.Bg |= AttrReverse - } - buf.Set(g.innerArea.Min.X+j, g.innerArea.Min.Y+i, c) - } - } - - // plot percentage - s := strings.Replace(g.Label, "{{percent}}", strconv.Itoa(g.Percent), -1) - pry := g.innerArea.Min.Y + g.innerArea.Dy()/2 - rs := str2runes(s) - var pos int - switch g.LabelAlign { - case AlignLeft: - pos = 0 - - case AlignCenter: - pos = (g.innerArea.Dx() - strWidth(s)) / 2 - - case AlignRight: - pos = g.innerArea.Dx() - strWidth(s) - 1 - } - pos += g.innerArea.Min.X - - for i, v := range rs { - c := Cell{ - Ch: v, - Fg: g.PercentColor, - } - - if w+g.innerArea.Min.X > pos+i { - c.Bg = g.BarColor - if c.Bg == ColorDefault { - c.Bg |= AttrReverse - } - - if g.PercentColorHighlighted != ColorUndef { - c.Fg = g.PercentColorHighlighted - } - } else { - c.Bg = g.Block.Bg - } - - buf.Set(1+pos+i, pry, c) - } - return buf -} diff --git a/vendor/github.com/gizak/termui/glide.lock b/vendor/github.com/gizak/termui/glide.lock deleted file mode 100644 index be5952d4666d..000000000000 --- a/vendor/github.com/gizak/termui/glide.lock +++ /dev/null @@ -1,30 +0,0 @@ -hash: 7a754ba100256404a978b2fc8738aee337beb822458e4b6060399fb89ebd215c -updated: 2016-11-03T17:39:24.323773674-04:00 -imports: -- name: github.com/maruel/panicparse - version: ad661195ed0e88491e0f14be6613304e3b1141d6 - subpackages: - - stack -- name: github.com/mattn/go-runewidth - version: 737072b4e32b7a5018b4a7125da8d12de90e8045 -- name: github.com/mitchellh/go-wordwrap - version: ad45545899c7b13c020ea92b2072220eefad42b8 -- name: github.com/nsf/termbox-go - version: b6acae516ace002cb8105a89024544a1480655a5 -- name: golang.org/x/net - version: 569280fa63be4e201b975e5411e30a92178f0118 - subpackages: - - websocket -testImports: -- name: github.com/davecgh/go-spew - version: 346938d642f2ec3594ed81d874461961cd0faa76 - subpackages: - - spew -- name: github.com/pmezard/go-difflib - version: d8ed2627bdf02c080bf22230dbb337003b7aba2d - subpackages: - - difflib -- name: github.com/stretchr/testify - version: 976c720a22c8eb4eb6a0b4348ad85ad12491a506 - subpackages: - - assert diff --git a/vendor/github.com/gizak/termui/glide.yaml b/vendor/github.com/gizak/termui/glide.yaml deleted file mode 100644 index a6812317f7a6..000000000000 --- a/vendor/github.com/gizak/termui/glide.yaml +++ /dev/null @@ -1,9 +0,0 @@ -package: github.com/gizak/termui -import: -- package: github.com/mattn/go-runewidth -- package: github.com/mitchellh/go-wordwrap -- package: github.com/nsf/termbox-go -- package: golang.org/x/net - subpackages: - - websocket -- package: github.com/maruel/panicparse diff --git a/vendor/github.com/gizak/termui/grid.go b/vendor/github.com/gizak/termui/grid.go deleted file mode 100644 index a9502322535a..000000000000 --- a/vendor/github.com/gizak/termui/grid.go +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -// GridBufferer introduces a Bufferer that can be manipulated by Grid. -type GridBufferer interface { - Bufferer - GetHeight() int - SetWidth(int) - SetX(int) - SetY(int) -} - -// Row builds a layout tree -type Row struct { - Cols []*Row //children - Widget GridBufferer // root - X int - Y int - Width int - Height int - Span int - Offset int -} - -// calculate and set the underlying layout tree's x, y, height and width. -func (r *Row) calcLayout() { - r.assignWidth(r.Width) - r.Height = r.solveHeight() - r.assignX(r.X) - r.assignY(r.Y) -} - -// tell if the node is leaf in the tree. -func (r *Row) isLeaf() bool { - return r.Cols == nil || len(r.Cols) == 0 -} - -func (r *Row) isRenderableLeaf() bool { - return r.isLeaf() && r.Widget != nil -} - -// assign widgets' (and their parent rows') width recursively. -func (r *Row) assignWidth(w int) { - r.SetWidth(w) - - accW := 0 // acc span and offset - calcW := make([]int, len(r.Cols)) // calculated width - calcOftX := make([]int, len(r.Cols)) // computated start position of x - - for i, c := range r.Cols { - accW += c.Span + c.Offset - cw := int(float64(c.Span*r.Width) / 12.0) - - if i >= 1 { - calcOftX[i] = calcOftX[i-1] + - calcW[i-1] + - int(float64(r.Cols[i-1].Offset*r.Width)/12.0) - } - - // use up the space if it is the last col - if i == len(r.Cols)-1 && accW == 12 { - cw = r.Width - calcOftX[i] - } - calcW[i] = cw - r.Cols[i].assignWidth(cw) - } -} - -// bottom up calc and set rows' (and their widgets') height, -// return r's total height. -func (r *Row) solveHeight() int { - if r.isRenderableLeaf() { - r.Height = r.Widget.GetHeight() - return r.Widget.GetHeight() - } - - maxh := 0 - if !r.isLeaf() { - for _, c := range r.Cols { - nh := c.solveHeight() - // when embed rows in Cols, row widgets stack up - if r.Widget != nil { - nh += r.Widget.GetHeight() - } - if nh > maxh { - maxh = nh - } - } - } - - r.Height = maxh - return maxh -} - -// recursively assign x position for r tree. -func (r *Row) assignX(x int) { - r.SetX(x) - - if !r.isLeaf() { - acc := 0 - for i, c := range r.Cols { - if c.Offset != 0 { - acc += int(float64(c.Offset*r.Width) / 12.0) - } - r.Cols[i].assignX(x + acc) - acc += c.Width - } - } -} - -// recursively assign y position to r. -func (r *Row) assignY(y int) { - r.SetY(y) - - if r.isLeaf() { - return - } - - for i := range r.Cols { - acc := 0 - if r.Widget != nil { - acc = r.Widget.GetHeight() - } - r.Cols[i].assignY(y + acc) - } - -} - -// GetHeight implements GridBufferer interface. -func (r Row) GetHeight() int { - return r.Height -} - -// SetX implements GridBufferer interface. -func (r *Row) SetX(x int) { - r.X = x - if r.Widget != nil { - r.Widget.SetX(x) - } -} - -// SetY implements GridBufferer interface. -func (r *Row) SetY(y int) { - r.Y = y - if r.Widget != nil { - r.Widget.SetY(y) - } -} - -// SetWidth implements GridBufferer interface. -func (r *Row) SetWidth(w int) { - r.Width = w - if r.Widget != nil { - r.Widget.SetWidth(w) - } -} - -// Buffer implements Bufferer interface, -// recursively merge all widgets buffer -func (r *Row) Buffer() Buffer { - merged := NewBuffer() - - if r.isRenderableLeaf() { - return r.Widget.Buffer() - } - - // for those are not leaves but have a renderable widget - if r.Widget != nil { - merged.Merge(r.Widget.Buffer()) - } - - // collect buffer from children - if !r.isLeaf() { - for _, c := range r.Cols { - merged.Merge(c.Buffer()) - } - } - - return merged -} - -// Grid implements 12 columns system. -// A simple example: -/* - import ui "github.com/gizak/termui" - // init and create widgets... - - // build - ui.Body.AddRows( - ui.NewRow( - ui.NewCol(6, 0, widget0), - ui.NewCol(6, 0, widget1)), - ui.NewRow( - ui.NewCol(3, 0, widget2), - ui.NewCol(3, 0, widget30, widget31, widget32), - ui.NewCol(6, 0, widget4))) - - // calculate layout - ui.Body.Align() - - ui.Render(ui.Body) -*/ -type Grid struct { - Rows []*Row - Width int - X int - Y int - BgColor Attribute -} - -// NewGrid returns *Grid with given rows. -func NewGrid(rows ...*Row) *Grid { - return &Grid{Rows: rows} -} - -// AddRows appends given rows to Grid. -func (g *Grid) AddRows(rs ...*Row) { - g.Rows = append(g.Rows, rs...) -} - -// NewRow creates a new row out of given columns. -func NewRow(cols ...*Row) *Row { - rs := &Row{Span: 12, Cols: cols} - return rs -} - -// NewCol accepts: widgets are LayoutBufferer or widgets is A NewRow. -// Note that if multiple widgets are provided, they will stack up in the col. -func NewCol(span, offset int, widgets ...GridBufferer) *Row { - r := &Row{Span: span, Offset: offset} - - if widgets != nil && len(widgets) == 1 { - wgt := widgets[0] - nw, isRow := wgt.(*Row) - if isRow { - r.Cols = nw.Cols - } else { - r.Widget = wgt - } - return r - } - - r.Cols = []*Row{} - ir := r - for _, w := range widgets { - nr := &Row{Span: 12, Widget: w} - ir.Cols = []*Row{nr} - ir = nr - } - - return r -} - -// Align calculate each rows' layout. -func (g *Grid) Align() { - h := 0 - for _, r := range g.Rows { - r.SetWidth(g.Width) - r.SetX(g.X) - r.SetY(g.Y + h) - r.calcLayout() - h += r.GetHeight() - } -} - -// Buffer implments Bufferer interface. -func (g Grid) Buffer() Buffer { - buf := NewBuffer() - - for _, r := range g.Rows { - buf.Merge(r.Buffer()) - } - return buf -} - -var Body *Grid diff --git a/vendor/github.com/gizak/termui/helper.go b/vendor/github.com/gizak/termui/helper.go deleted file mode 100644 index 18a677043577..000000000000 --- a/vendor/github.com/gizak/termui/helper.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "regexp" - "strings" - - tm "github.com/nsf/termbox-go" -) -import rw "github.com/mattn/go-runewidth" - -/* ---------------Port from termbox-go --------------------- */ - -// Attribute is printable cell's color and style. -type Attribute uint16 - -// 8 basic clolrs -const ( - ColorDefault Attribute = iota - ColorBlack - ColorRed - ColorGreen - ColorYellow - ColorBlue - ColorMagenta - ColorCyan - ColorWhite -) - -//Have a constant that defines number of colors -const NumberofColors = 8 - -// Text style -const ( - AttrBold Attribute = 1 << (iota + 9) - AttrUnderline - AttrReverse -) - -var ( - dot = "…" - dotw = rw.StringWidth(dot) -) - -/* ----------------------- End ----------------------------- */ - -func toTmAttr(x Attribute) tm.Attribute { - return tm.Attribute(x) -} - -func str2runes(s string) []rune { - return []rune(s) -} - -// Here for backwards-compatibility. -func trimStr2Runes(s string, w int) []rune { - return TrimStr2Runes(s, w) -} - -// TrimStr2Runes trims string to w[-1 rune], appends …, and returns the runes -// of that string if string is grather then n. If string is small then w, -// return the runes. -func TrimStr2Runes(s string, w int) []rune { - if w <= 0 { - return []rune{} - } - - sw := rw.StringWidth(s) - if sw > w { - return []rune(rw.Truncate(s, w, dot)) - } - return str2runes(s) -} - -// TrimStrIfAppropriate trim string to "s[:-1] + …" -// if string > width otherwise return string -func TrimStrIfAppropriate(s string, w int) string { - if w <= 0 { - return "" - } - - sw := rw.StringWidth(s) - if sw > w { - return rw.Truncate(s, w, dot) - } - - return s -} - -func strWidth(s string) int { - return rw.StringWidth(s) -} - -func charWidth(ch rune) int { - return rw.RuneWidth(ch) -} - -var whiteSpaceRegex = regexp.MustCompile(`\s`) - -// StringToAttribute converts text to a termui attribute. You may specifiy more -// then one attribute like that: "BLACK, BOLD, ...". All whitespaces -// are ignored. -func StringToAttribute(text string) Attribute { - text = whiteSpaceRegex.ReplaceAllString(strings.ToLower(text), "") - attributes := strings.Split(text, ",") - result := Attribute(0) - - for _, theAttribute := range attributes { - var match Attribute - switch theAttribute { - case "reset", "default": - match = ColorDefault - - case "black": - match = ColorBlack - - case "red": - match = ColorRed - - case "green": - match = ColorGreen - - case "yellow": - match = ColorYellow - - case "blue": - match = ColorBlue - - case "magenta": - match = ColorMagenta - - case "cyan": - match = ColorCyan - - case "white": - match = ColorWhite - - case "bold": - match = AttrBold - - case "underline": - match = AttrUnderline - - case "reverse": - match = AttrReverse - } - - result |= match - } - - return result -} - -// TextCells returns a coloured text cells []Cell -func TextCells(s string, fg, bg Attribute) []Cell { - cs := make([]Cell, 0, len(s)) - - // sequence := MarkdownTextRendererFactory{}.TextRenderer(s).Render(fg, bg) - // runes := []rune(sequence.NormalizedText) - runes := str2runes(s) - - for n := range runes { - // point, _ := sequence.PointAt(n, 0, 0) - // cs = append(cs, Cell{point.Ch, point.Fg, point.Bg}) - cs = append(cs, Cell{runes[n], fg, bg}) - } - return cs -} - -// Width returns the actual screen space the cell takes (usually 1 or 2). -func (c Cell) Width() int { - return charWidth(c.Ch) -} - -// Copy return a copy of c -func (c Cell) Copy() Cell { - return c -} - -// TrimTxCells trims the overflowed text cells sequence. -func TrimTxCells(cs []Cell, w int) []Cell { - if len(cs) <= w { - return cs - } - return cs[:w] -} - -// DTrimTxCls trims the overflowed text cells sequence and append dots at the end. -func DTrimTxCls(cs []Cell, w int) []Cell { - l := len(cs) - if l <= 0 { - return []Cell{} - } - - rt := make([]Cell, 0, w) - csw := 0 - for i := 0; i < l && csw <= w; i++ { - c := cs[i] - cw := c.Width() - - if cw+csw < w { - rt = append(rt, c) - csw += cw - } else { - rt = append(rt, Cell{'…', c.Fg, c.Bg}) - break - } - } - - return rt -} - -func CellsToStr(cs []Cell) string { - str := "" - for _, c := range cs { - str += string(c.Ch) - } - return str -} diff --git a/vendor/github.com/gizak/termui/linechart.go b/vendor/github.com/gizak/termui/linechart.go deleted file mode 100644 index f7eea28bbe45..000000000000 --- a/vendor/github.com/gizak/termui/linechart.go +++ /dev/null @@ -1,331 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "fmt" - "math" -) - -// only 16 possible combinations, why bother -var braillePatterns = map[[2]int]rune{ - [2]int{0, 0}: '⣀', - [2]int{0, 1}: '⡠', - [2]int{0, 2}: '⡐', - [2]int{0, 3}: '⡈', - - [2]int{1, 0}: '⢄', - [2]int{1, 1}: '⠤', - [2]int{1, 2}: '⠔', - [2]int{1, 3}: '⠌', - - [2]int{2, 0}: '⢂', - [2]int{2, 1}: '⠢', - [2]int{2, 2}: '⠒', - [2]int{2, 3}: '⠊', - - [2]int{3, 0}: '⢁', - [2]int{3, 1}: '⠡', - [2]int{3, 2}: '⠑', - [2]int{3, 3}: '⠉', -} - -var lSingleBraille = [4]rune{'\u2840', '⠄', '⠂', '⠁'} -var rSingleBraille = [4]rune{'\u2880', '⠠', '⠐', '⠈'} - -// LineChart has two modes: braille(default) and dot. Using braille gives 2x capicity as dot mode, -// because one braille char can represent two data points. -/* - lc := termui.NewLineChart() - lc.BorderLabel = "braille-mode Line Chart" - lc.Data = [1.2, 1.3, 1.5, 1.7, 1.5, 1.6, 1.8, 2.0] - lc.Width = 50 - lc.Height = 12 - lc.AxesColor = termui.ColorWhite - lc.LineColor = termui.ColorGreen | termui.AttrBold - // termui.Render(lc)... -*/ -type LineChart struct { - Block - Data []float64 - DataLabels []string // if unset, the data indices will be used - Mode string // braille | dot - DotStyle rune - LineColor Attribute - scale float64 // data span per cell on y-axis - AxesColor Attribute - drawingX int - drawingY int - axisYHeight int - axisXWidth int - axisYLabelGap int - axisXLabelGap int - topValue float64 - bottomValue float64 - labelX [][]rune - labelY [][]rune - labelYSpace int - maxY float64 - minY float64 - autoLabels bool -} - -// NewLineChart returns a new LineChart with current theme. -func NewLineChart() *LineChart { - lc := &LineChart{Block: *NewBlock()} - lc.AxesColor = ThemeAttr("linechart.axes.fg") - lc.LineColor = ThemeAttr("linechart.line.fg") - lc.Mode = "braille" - lc.DotStyle = '•' - lc.axisXLabelGap = 2 - lc.axisYLabelGap = 1 - lc.bottomValue = math.Inf(1) - lc.topValue = math.Inf(-1) - return lc -} - -// one cell contains two data points -// so the capicity is 2x as dot-mode -func (lc *LineChart) renderBraille() Buffer { - buf := NewBuffer() - - // return: b -> which cell should the point be in - // m -> in the cell, divided into 4 equal height levels, which subcell? - getPos := func(d float64) (b, m int) { - cnt4 := int((d-lc.bottomValue)/(lc.scale/4) + 0.5) - b = cnt4 / 4 - m = cnt4 % 4 - return - } - // plot points - for i := 0; 2*i+1 < len(lc.Data) && i < lc.axisXWidth; i++ { - b0, m0 := getPos(lc.Data[2*i]) - b1, m1 := getPos(lc.Data[2*i+1]) - - if b0 == b1 { - c := Cell{ - Ch: braillePatterns[[2]int{m0, m1}], - Bg: lc.Bg, - Fg: lc.LineColor, - } - y := lc.innerArea.Min.Y + lc.innerArea.Dy() - 3 - b0 - x := lc.innerArea.Min.X + lc.labelYSpace + 1 + i - buf.Set(x, y, c) - } else { - c0 := Cell{Ch: lSingleBraille[m0], - Fg: lc.LineColor, - Bg: lc.Bg} - x0 := lc.innerArea.Min.X + lc.labelYSpace + 1 + i - y0 := lc.innerArea.Min.Y + lc.innerArea.Dy() - 3 - b0 - buf.Set(x0, y0, c0) - - c1 := Cell{Ch: rSingleBraille[m1], - Fg: lc.LineColor, - Bg: lc.Bg} - x1 := lc.innerArea.Min.X + lc.labelYSpace + 1 + i - y1 := lc.innerArea.Min.Y + lc.innerArea.Dy() - 3 - b1 - buf.Set(x1, y1, c1) - } - - } - return buf -} - -func (lc *LineChart) renderDot() Buffer { - buf := NewBuffer() - for i := 0; i < len(lc.Data) && i < lc.axisXWidth; i++ { - c := Cell{ - Ch: lc.DotStyle, - Fg: lc.LineColor, - Bg: lc.Bg, - } - x := lc.innerArea.Min.X + lc.labelYSpace + 1 + i - y := lc.innerArea.Min.Y + lc.innerArea.Dy() - 3 - int((lc.Data[i]-lc.bottomValue)/lc.scale+0.5) - buf.Set(x, y, c) - } - - return buf -} - -func (lc *LineChart) calcLabelX() { - lc.labelX = [][]rune{} - - for i, l := 0, 0; i < len(lc.DataLabels) && l < lc.axisXWidth; i++ { - if lc.Mode == "dot" { - if l >= len(lc.DataLabels) { - break - } - - s := str2runes(lc.DataLabels[l]) - w := strWidth(lc.DataLabels[l]) - if l+w <= lc.axisXWidth { - lc.labelX = append(lc.labelX, s) - } - l += w + lc.axisXLabelGap - } else { // braille - if 2*l >= len(lc.DataLabels) { - break - } - - s := str2runes(lc.DataLabels[2*l]) - w := strWidth(lc.DataLabels[2*l]) - if l+w <= lc.axisXWidth { - lc.labelX = append(lc.labelX, s) - } - l += w + lc.axisXLabelGap - - } - } -} - -func shortenFloatVal(x float64) string { - s := fmt.Sprintf("%.2f", x) - if len(s)-3 > 3 { - s = fmt.Sprintf("%.2e", x) - } - - if x < 0 { - s = fmt.Sprintf("%.2f", x) - } - return s -} - -func (lc *LineChart) calcLabelY() { - span := lc.topValue - lc.bottomValue - lc.scale = span / float64(lc.axisYHeight) - - n := (1 + lc.axisYHeight) / (lc.axisYLabelGap + 1) - lc.labelY = make([][]rune, n) - maxLen := 0 - for i := 0; i < n; i++ { - s := str2runes(shortenFloatVal(lc.bottomValue + float64(i)*span/float64(n))) - if len(s) > maxLen { - maxLen = len(s) - } - lc.labelY[i] = s - } - - lc.labelYSpace = maxLen -} - -func (lc *LineChart) calcLayout() { - // set datalabels if it is not provided - if (lc.DataLabels == nil || len(lc.DataLabels) == 0) || lc.autoLabels { - lc.autoLabels = true - lc.DataLabels = make([]string, len(lc.Data)) - for i := range lc.Data { - lc.DataLabels[i] = fmt.Sprint(i) - } - } - - // lazy increase, to avoid y shaking frequently - // update bound Y when drawing is gonna overflow - lc.minY = lc.Data[0] - lc.maxY = lc.Data[0] - - // valid visible range - vrange := lc.innerArea.Dx() - if lc.Mode == "braille" { - vrange = 2 * lc.innerArea.Dx() - } - if vrange > len(lc.Data) { - vrange = len(lc.Data) - } - - for _, v := range lc.Data[:vrange] { - if v > lc.maxY { - lc.maxY = v - } - if v < lc.minY { - lc.minY = v - } - } - - span := lc.maxY - lc.minY - - if lc.minY < lc.bottomValue { - lc.bottomValue = lc.minY - 0.2*span - } - - if lc.maxY > lc.topValue { - lc.topValue = lc.maxY + 0.2*span - } - - lc.axisYHeight = lc.innerArea.Dy() - 2 - lc.calcLabelY() - - lc.axisXWidth = lc.innerArea.Dx() - 1 - lc.labelYSpace - lc.calcLabelX() - - lc.drawingX = lc.innerArea.Min.X + 1 + lc.labelYSpace - lc.drawingY = lc.innerArea.Min.Y -} - -func (lc *LineChart) plotAxes() Buffer { - buf := NewBuffer() - - origY := lc.innerArea.Min.Y + lc.innerArea.Dy() - 2 - origX := lc.innerArea.Min.X + lc.labelYSpace - - buf.Set(origX, origY, Cell{Ch: ORIGIN, Fg: lc.AxesColor, Bg: lc.Bg}) - - for x := origX + 1; x < origX+lc.axisXWidth; x++ { - buf.Set(x, origY, Cell{Ch: HDASH, Fg: lc.AxesColor, Bg: lc.Bg}) - } - - for dy := 1; dy <= lc.axisYHeight; dy++ { - buf.Set(origX, origY-dy, Cell{Ch: VDASH, Fg: lc.AxesColor, Bg: lc.Bg}) - } - - // x label - oft := 0 - for _, rs := range lc.labelX { - if oft+len(rs) > lc.axisXWidth { - break - } - for j, r := range rs { - c := Cell{ - Ch: r, - Fg: lc.AxesColor, - Bg: lc.Bg, - } - x := origX + oft + j - y := lc.innerArea.Min.Y + lc.innerArea.Dy() - 1 - buf.Set(x, y, c) - } - oft += len(rs) + lc.axisXLabelGap - } - - // y labels - for i, rs := range lc.labelY { - for j, r := range rs { - buf.Set( - lc.innerArea.Min.X+j, - origY-i*(lc.axisYLabelGap+1), - Cell{Ch: r, Fg: lc.AxesColor, Bg: lc.Bg}) - } - } - - return buf -} - -// Buffer implements Bufferer interface. -func (lc *LineChart) Buffer() Buffer { - buf := lc.Block.Buffer() - - if lc.Data == nil || len(lc.Data) == 0 { - return buf - } - lc.calcLayout() - buf.Merge(lc.plotAxes()) - - if lc.Mode == "dot" { - buf.Merge(lc.renderDot()) - } else { - buf.Merge(lc.renderBraille()) - } - - return buf -} diff --git a/vendor/github.com/gizak/termui/linechart_others.go b/vendor/github.com/gizak/termui/linechart_others.go deleted file mode 100644 index 14897ea0f838..000000000000 --- a/vendor/github.com/gizak/termui/linechart_others.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -// +build !windows - -package termui - -const VDASH = '┊' -const HDASH = '┈' -const ORIGIN = '└' diff --git a/vendor/github.com/gizak/termui/linechart_windows.go b/vendor/github.com/gizak/termui/linechart_windows.go deleted file mode 100644 index 994d3e590045..000000000000 --- a/vendor/github.com/gizak/termui/linechart_windows.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -// +build windows - -package termui - -const VDASH = '|' -const HDASH = '-' -const ORIGIN = '+' diff --git a/vendor/github.com/gizak/termui/list.go b/vendor/github.com/gizak/termui/list.go deleted file mode 100644 index ea6635eccc00..000000000000 --- a/vendor/github.com/gizak/termui/list.go +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "strings" - -// List displays []string as its items, -// it has a Overflow option (default is "hidden"), when set to "hidden", -// the item exceeding List's width is truncated, but when set to "wrap", -// the overflowed text breaks into next line. -/* - strs := []string{ - "[0] github.com/gizak/termui", - "[1] editbox.go", - "[2] iterrupt.go", - "[3] keyboard.go", - "[4] output.go", - "[5] random_out.go", - "[6] dashboard.go", - "[7] nsf/termbox-go"} - - ls := termui.NewList() - ls.Items = strs - ls.ItemFgColor = termui.ColorYellow - ls.BorderLabel = "List" - ls.Height = 7 - ls.Width = 25 - ls.Y = 0 -*/ -type List struct { - Block - Items []string - Overflow string - ItemFgColor Attribute - ItemBgColor Attribute -} - -// NewList returns a new *List with current theme. -func NewList() *List { - l := &List{Block: *NewBlock()} - l.Overflow = "hidden" - l.ItemFgColor = ThemeAttr("list.item.fg") - l.ItemBgColor = ThemeAttr("list.item.bg") - return l -} - -// Buffer implements Bufferer interface. -func (l *List) Buffer() Buffer { - buf := l.Block.Buffer() - - switch l.Overflow { - case "wrap": - cs := DefaultTxBuilder.Build(strings.Join(l.Items, "\n"), l.ItemFgColor, l.ItemBgColor) - i, j, k := 0, 0, 0 - for i < l.innerArea.Dy() && k < len(cs) { - w := cs[k].Width() - if cs[k].Ch == '\n' || j+w > l.innerArea.Dx() { - i++ - j = 0 - if cs[k].Ch == '\n' { - k++ - } - continue - } - buf.Set(l.innerArea.Min.X+j, l.innerArea.Min.Y+i, cs[k]) - - k++ - j++ - } - - case "hidden": - trimItems := l.Items - if len(trimItems) > l.innerArea.Dy() { - trimItems = trimItems[:l.innerArea.Dy()] - } - for i, v := range trimItems { - cs := DTrimTxCls(DefaultTxBuilder.Build(v, l.ItemFgColor, l.ItemBgColor), l.innerArea.Dx()) - j := 0 - for _, vv := range cs { - w := vv.Width() - buf.Set(l.innerArea.Min.X+j, l.innerArea.Min.Y+i, vv) - j += w - } - } - } - return buf -} diff --git a/vendor/github.com/gizak/termui/mbarchart.go b/vendor/github.com/gizak/termui/mbarchart.go deleted file mode 100644 index 0f91e9713f34..000000000000 --- a/vendor/github.com/gizak/termui/mbarchart.go +++ /dev/null @@ -1,242 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "fmt" -) - -// This is the implemetation of multi-colored or stacked bar graph. This is different from default barGraph which is implemented in bar.go -// Multi-Colored-BarChart creates multiple bars in a widget: -/* - bc := termui.NewMBarChart() - data := make([][]int, 2) - data[0] := []int{3, 2, 5, 7, 9, 4} - data[1] := []int{7, 8, 5, 3, 1, 6} - bclabels := []string{"S0", "S1", "S2", "S3", "S4", "S5"} - bc.BorderLabel = "Bar Chart" - bc.Data = data - bc.Width = 26 - bc.Height = 10 - bc.DataLabels = bclabels - bc.TextColor = termui.ColorGreen - bc.BarColor = termui.ColorRed - bc.NumColor = termui.ColorYellow -*/ -type MBarChart struct { - Block - BarColor [NumberofColors]Attribute - TextColor Attribute - NumColor [NumberofColors]Attribute - Data [NumberofColors][]int - DataLabels []string - BarWidth int - BarGap int - labels [][]rune - dataNum [NumberofColors][][]rune - numBar int - scale float64 - max int - minDataLen int - numStack int - ShowScale bool - maxScale []rune -} - -// NewBarChart returns a new *BarChart with current theme. -func NewMBarChart() *MBarChart { - bc := &MBarChart{Block: *NewBlock()} - bc.BarColor[0] = ThemeAttr("mbarchart.bar.bg") - bc.NumColor[0] = ThemeAttr("mbarchart.num.fg") - bc.TextColor = ThemeAttr("mbarchart.text.fg") - bc.BarGap = 1 - bc.BarWidth = 3 - return bc -} - -func (bc *MBarChart) layout() { - bc.numBar = bc.innerArea.Dx() / (bc.BarGap + bc.BarWidth) - bc.labels = make([][]rune, bc.numBar) - DataLen := 0 - LabelLen := len(bc.DataLabels) - bc.minDataLen = 9999 //Set this to some very hight value so that we find the minimum one We want to know which array among data[][] has got the least length - - // We need to know how many stack/data array data[0] , data[1] are there - for i := 0; i < len(bc.Data); i++ { - if bc.Data[i] == nil { - break - } - DataLen++ - } - bc.numStack = DataLen - - //We need to know what is the mimimum size of data array data[0] could have 10 elements data[1] could have only 5, so we plot only 5 bar graphs - - for i := 0; i < DataLen; i++ { - if bc.minDataLen > len(bc.Data[i]) { - bc.minDataLen = len(bc.Data[i]) - } - } - - if LabelLen > bc.minDataLen { - LabelLen = bc.minDataLen - } - - for i := 0; i < LabelLen && i < bc.numBar; i++ { - bc.labels[i] = trimStr2Runes(bc.DataLabels[i], bc.BarWidth) - } - - for i := 0; i < bc.numStack; i++ { - bc.dataNum[i] = make([][]rune, len(bc.Data[i])) - //For each stack of bar calcualte the rune - for j := 0; j < LabelLen && i < bc.numBar; j++ { - n := bc.Data[i][j] - s := fmt.Sprint(n) - bc.dataNum[i][j] = trimStr2Runes(s, bc.BarWidth) - } - //If color is not defined by default then populate a color that is different from the prevous bar - if bc.BarColor[i] == ColorDefault && bc.NumColor[i] == ColorDefault { - if i == 0 { - bc.BarColor[i] = ColorBlack - } else { - bc.BarColor[i] = bc.BarColor[i-1] + 1 - if bc.BarColor[i] > NumberofColors { - bc.BarColor[i] = ColorBlack - } - } - bc.NumColor[i] = (NumberofColors + 1) - bc.BarColor[i] //Make NumColor opposite of barColor for visibility - } - } - - //If Max value is not set then we have to populate, this time the max value will be max(sum(d1[0],d2[0],d3[0]) .... sum(d1[n], d2[n], d3[n])) - - if bc.max == 0 { - bc.max = -1 - } - for i := 0; i < bc.minDataLen && i < LabelLen; i++ { - var dsum int - for j := 0; j < bc.numStack; j++ { - dsum += bc.Data[j][i] - } - if dsum > bc.max { - bc.max = dsum - } - } - - //Finally Calculate max sale - if bc.ShowScale { - s := fmt.Sprintf("%d", bc.max) - bc.maxScale = trimStr2Runes(s, len(s)) - bc.scale = float64(bc.max) / float64(bc.innerArea.Dy()-2) - } else { - bc.scale = float64(bc.max) / float64(bc.innerArea.Dy()-1) - } - -} - -func (bc *MBarChart) SetMax(max int) { - - if max > 0 { - bc.max = max - } -} - -// Buffer implements Bufferer interface. -func (bc *MBarChart) Buffer() Buffer { - buf := bc.Block.Buffer() - bc.layout() - var oftX int - - for i := 0; i < bc.numBar && i < bc.minDataLen && i < len(bc.DataLabels); i++ { - ph := 0 //Previous Height to stack up - oftX = i * (bc.BarWidth + bc.BarGap) - for i1 := 0; i1 < bc.numStack; i1++ { - h := int(float64(bc.Data[i1][i]) / bc.scale) - // plot bars - for j := 0; j < bc.BarWidth; j++ { - for k := 0; k < h; k++ { - c := Cell{ - Ch: ' ', - Bg: bc.BarColor[i1], - } - if bc.BarColor[i1] == ColorDefault { // when color is default, space char treated as transparent! - c.Bg |= AttrReverse - } - x := bc.innerArea.Min.X + i*(bc.BarWidth+bc.BarGap) + j - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 2 - k - ph - buf.Set(x, y, c) - - } - } - ph += h - } - // plot text - for j, k := 0, 0; j < len(bc.labels[i]); j++ { - w := charWidth(bc.labels[i][j]) - c := Cell{ - Ch: bc.labels[i][j], - Bg: bc.Bg, - Fg: bc.TextColor, - } - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 1 - x := bc.innerArea.Max.X + oftX + ((bc.BarWidth - len(bc.labels[i])) / 2) + k - buf.Set(x, y, c) - k += w - } - // plot num - ph = 0 //re-initialize previous height - for i1 := 0; i1 < bc.numStack; i1++ { - h := int(float64(bc.Data[i1][i]) / bc.scale) - for j := 0; j < len(bc.dataNum[i1][i]) && h > 0; j++ { - c := Cell{ - Ch: bc.dataNum[i1][i][j], - Fg: bc.NumColor[i1], - Bg: bc.BarColor[i1], - } - if bc.BarColor[i1] == ColorDefault { // the same as above - c.Bg |= AttrReverse - } - if h == 0 { - c.Bg = bc.Bg - } - x := bc.innerArea.Min.X + oftX + (bc.BarWidth-len(bc.dataNum[i1][i]))/2 + j - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 2 - ph - buf.Set(x, y, c) - } - ph += h - } - } - - if bc.ShowScale { - //Currently bar graph only supprts data range from 0 to MAX - //Plot 0 - c := Cell{ - Ch: '0', - Bg: bc.Bg, - Fg: bc.TextColor, - } - - y := bc.innerArea.Min.Y + bc.innerArea.Dy() - 2 - x := bc.X - buf.Set(x, y, c) - - //Plot the maximum sacle value - for i := 0; i < len(bc.maxScale); i++ { - c := Cell{ - Ch: bc.maxScale[i], - Bg: bc.Bg, - Fg: bc.TextColor, - } - - y := bc.innerArea.Min.Y - x := bc.X + i - - buf.Set(x, y, c) - } - - } - - return buf -} diff --git a/vendor/github.com/gizak/termui/mkdocs.yml b/vendor/github.com/gizak/termui/mkdocs.yml deleted file mode 100644 index 2ab45f064b15..000000000000 --- a/vendor/github.com/gizak/termui/mkdocs.yml +++ /dev/null @@ -1,28 +0,0 @@ -pages: -- Home: 'index.md' -- Quickstart: 'quickstart.md' -- Recipes: 'recipes.md' -- References: - - Layouts: 'layouts.md' - - Components: 'components.md' - - Events: 'events.md' - - Themes: 'themes.md' -- Versions: 'versions.md' -- About: 'about.md' - -site_name: termui -repo_url: https://github.com/gizak/termui/ -site_description: 'termui user guide' -site_author: gizak - -docs_dir: '_docs' - -theme: readthedocs - -markdown_extensions: - - smarty - - admonition - - toc - -extra: - version: 1.0 diff --git a/vendor/github.com/gizak/termui/par.go b/vendor/github.com/gizak/termui/par.go deleted file mode 100644 index 29b6d462f91b..000000000000 --- a/vendor/github.com/gizak/termui/par.go +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -// Par displays a paragraph. -/* - par := termui.NewPar("Simple Text") - par.Height = 3 - par.Width = 17 - par.BorderLabel = "Label" -*/ -type Par struct { - Block - Text string - TextFgColor Attribute - TextBgColor Attribute - WrapLength int // words wrap limit. Note it may not work properly with multi-width char -} - -// NewPar returns a new *Par with given text as its content. -func NewPar(s string) *Par { - return &Par{ - Block: *NewBlock(), - Text: s, - TextFgColor: ThemeAttr("par.text.fg"), - TextBgColor: ThemeAttr("par.text.bg"), - WrapLength: 0, - } -} - -// Buffer implements Bufferer interface. -func (p *Par) Buffer() Buffer { - buf := p.Block.Buffer() - - fg, bg := p.TextFgColor, p.TextBgColor - cs := DefaultTxBuilder.Build(p.Text, fg, bg) - - // wrap if WrapLength set - if p.WrapLength < 0 { - cs = wrapTx(cs, p.Width-2) - } else if p.WrapLength > 0 { - cs = wrapTx(cs, p.WrapLength) - } - - y, x, n := 0, 0, 0 - for y < p.innerArea.Dy() && n < len(cs) { - w := cs[n].Width() - if cs[n].Ch == '\n' || x+w > p.innerArea.Dx() { - y++ - x = 0 // set x = 0 - if cs[n].Ch == '\n' { - n++ - } - - if y >= p.innerArea.Dy() { - buf.Set(p.innerArea.Min.X+p.innerArea.Dx()-1, - p.innerArea.Min.Y+p.innerArea.Dy()-1, - Cell{Ch: '…', Fg: p.TextFgColor, Bg: p.TextBgColor}) - break - } - continue - } - - buf.Set(p.innerArea.Min.X+x, p.innerArea.Min.Y+y, cs[n]) - - n++ - x += w - } - - return buf -} diff --git a/vendor/github.com/gizak/termui/pos.go b/vendor/github.com/gizak/termui/pos.go deleted file mode 100644 index c7d647f31b78..000000000000 --- a/vendor/github.com/gizak/termui/pos.go +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "image" - -// Align is the position of the gauge's label. -type Align uint - -// All supported positions. -const ( - AlignNone Align = 0 - AlignLeft Align = 1 << iota - AlignRight - AlignBottom - AlignTop - AlignCenterVertical - AlignCenterHorizontal - AlignCenter = AlignCenterVertical | AlignCenterHorizontal -) - -func AlignArea(parent, child image.Rectangle, a Align) image.Rectangle { - w, h := child.Dx(), child.Dy() - - // parent center - pcx, pcy := parent.Min.X+parent.Dx()/2, parent.Min.Y+parent.Dy()/2 - // child center - ccx, ccy := child.Min.X+child.Dx()/2, child.Min.Y+child.Dy()/2 - - if a&AlignLeft == AlignLeft { - child.Min.X = parent.Min.X - child.Max.X = child.Min.X + w - } - - if a&AlignRight == AlignRight { - child.Max.X = parent.Max.X - child.Min.X = child.Max.X - w - } - - if a&AlignBottom == AlignBottom { - child.Max.Y = parent.Max.Y - child.Min.Y = child.Max.Y - h - } - - if a&AlignTop == AlignRight { - child.Min.Y = parent.Min.Y - child.Max.Y = child.Min.Y + h - } - - if a&AlignCenterHorizontal == AlignCenterHorizontal { - child.Min.X += pcx - ccx - child.Max.X = child.Min.X + w - } - - if a&AlignCenterVertical == AlignCenterVertical { - child.Min.Y += pcy - ccy - child.Max.Y = child.Min.Y + h - } - - return child -} - -func MoveArea(a image.Rectangle, dx, dy int) image.Rectangle { - a.Min.X += dx - a.Max.X += dx - a.Min.Y += dy - a.Max.Y += dy - return a -} - -var termWidth int -var termHeight int - -func TermRect() image.Rectangle { - return image.Rect(0, 0, termWidth, termHeight) -} diff --git a/vendor/github.com/gizak/termui/render.go b/vendor/github.com/gizak/termui/render.go deleted file mode 100644 index b9d37d93867f..000000000000 --- a/vendor/github.com/gizak/termui/render.go +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "image" - "io" - "sync" - "time" - - "fmt" - - "os" - - "runtime/debug" - - "bytes" - - "github.com/maruel/panicparse/stack" - tm "github.com/nsf/termbox-go" -) - -// Bufferer should be implemented by all renderable components. -type Bufferer interface { - Buffer() Buffer -} - -// Init initializes termui library. This function should be called before any others. -// After initialization, the library must be finalized by 'Close' function. -func Init() error { - if err := tm.Init(); err != nil { - return err - } - - sysEvtChs = make([]chan Event, 0) - go hookTermboxEvt() - - renderJobs = make(chan []Bufferer) - //renderLock = new(sync.RWMutex) - - Body = NewGrid() - Body.X = 0 - Body.Y = 0 - Body.BgColor = ThemeAttr("bg") - Body.Width = TermWidth() - - DefaultEvtStream.Init() - DefaultEvtStream.Merge("termbox", NewSysEvtCh()) - DefaultEvtStream.Merge("timer", NewTimerCh(time.Second)) - DefaultEvtStream.Merge("custom", usrEvtCh) - - DefaultEvtStream.Handle("/", DefaultHandler) - DefaultEvtStream.Handle("/sys/wnd/resize", func(e Event) { - w := e.Data.(EvtWnd) - Body.Width = w.Width - }) - - DefaultWgtMgr = NewWgtMgr() - DefaultEvtStream.Hook(DefaultWgtMgr.WgtHandlersHook()) - - go func() { - for bs := range renderJobs { - render(bs...) - } - }() - - return nil -} - -// Close finalizes termui library, -// should be called after successful initialization when termui's functionality isn't required anymore. -func Close() { - tm.Close() -} - -var renderLock sync.Mutex - -func termSync() { - renderLock.Lock() - tm.Sync() - termWidth, termHeight = tm.Size() - renderLock.Unlock() -} - -// TermWidth returns the current terminal's width. -func TermWidth() int { - termSync() - return termWidth -} - -// TermHeight returns the current terminal's height. -func TermHeight() int { - termSync() - return termHeight -} - -// Render renders all Bufferer in the given order from left to right, -// right could overlap on left ones. -func render(bs ...Bufferer) { - defer func() { - if e := recover(); e != nil { - Close() - fmt.Fprintf(os.Stderr, "Captured a panic(value=%v) when rendering Bufferer. Exit termui and clean terminal...\nPrint stack trace:\n\n", e) - //debug.PrintStack() - gs, err := stack.ParseDump(bytes.NewReader(debug.Stack()), os.Stderr) - if err != nil { - debug.PrintStack() - os.Exit(1) - } - p := &stack.Palette{} - buckets := stack.SortBuckets(stack.Bucketize(gs, stack.AnyValue)) - srcLen, pkgLen := stack.CalcLengths(buckets, false) - for _, bucket := range buckets { - io.WriteString(os.Stdout, p.BucketHeader(&bucket, false, len(buckets) > 1)) - io.WriteString(os.Stdout, p.StackLines(&bucket.Signature, srcLen, pkgLen, false)) - } - os.Exit(1) - } - }() - for _, b := range bs { - - buf := b.Buffer() - // set cels in buf - for p, c := range buf.CellMap { - if p.In(buf.Area) { - - tm.SetCell(p.X, p.Y, c.Ch, toTmAttr(c.Fg), toTmAttr(c.Bg)) - - } - } - - } - - renderLock.Lock() - // render - tm.Flush() - renderLock.Unlock() -} - -func Clear() { - tm.Clear(tm.ColorDefault, toTmAttr(ThemeAttr("bg"))) -} - -func clearArea(r image.Rectangle, bg Attribute) { - for i := r.Min.X; i < r.Max.X; i++ { - for j := r.Min.Y; j < r.Max.Y; j++ { - tm.SetCell(i, j, ' ', tm.ColorDefault, toTmAttr(bg)) - } - } -} - -func ClearArea(r image.Rectangle, bg Attribute) { - clearArea(r, bg) - tm.Flush() -} - -var renderJobs chan []Bufferer - -func Render(bs ...Bufferer) { - //go func() { renderJobs <- bs }() - renderJobs <- bs -} diff --git a/vendor/github.com/gizak/termui/sparkline.go b/vendor/github.com/gizak/termui/sparkline.go deleted file mode 100644 index d906e49dfca2..000000000000 --- a/vendor/github.com/gizak/termui/sparkline.go +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -// Sparkline is like: ▅▆▂▂▅▇▂▂▃▆▆▆▅▃. The data points should be non-negative integers. -/* - data := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1} - spl := termui.NewSparkline() - spl.Data = data - spl.Title = "Sparkline 0" - spl.LineColor = termui.ColorGreen -*/ -type Sparkline struct { - Data []int - Height int - Title string - TitleColor Attribute - LineColor Attribute - displayHeight int - scale float32 - max int -} - -// Sparklines is a renderable widget which groups together the given sparklines. -/* - spls := termui.NewSparklines(spl0,spl1,spl2) //... - spls.Height = 2 - spls.Width = 20 -*/ -type Sparklines struct { - Block - Lines []Sparkline - displayLines int - displayWidth int -} - -var sparks = []rune{'▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'} - -// Add appends a given Sparkline to s *Sparklines. -func (s *Sparklines) Add(sl Sparkline) { - s.Lines = append(s.Lines, sl) -} - -// NewSparkline returns a unrenderable single sparkline that intended to be added into Sparklines. -func NewSparkline() Sparkline { - return Sparkline{ - Height: 1, - TitleColor: ThemeAttr("sparkline.title.fg"), - LineColor: ThemeAttr("sparkline.line.fg")} -} - -// NewSparklines return a new *Spaklines with given Sparkline(s), you can always add a new Sparkline later. -func NewSparklines(ss ...Sparkline) *Sparklines { - s := &Sparklines{Block: *NewBlock(), Lines: ss} - return s -} - -func (sl *Sparklines) update() { - for i, v := range sl.Lines { - if v.Title == "" { - sl.Lines[i].displayHeight = v.Height - } else { - sl.Lines[i].displayHeight = v.Height + 1 - } - } - sl.displayWidth = sl.innerArea.Dx() - - // get how many lines gotta display - h := 0 - sl.displayLines = 0 - for _, v := range sl.Lines { - if h+v.displayHeight <= sl.innerArea.Dy() { - sl.displayLines++ - } else { - break - } - h += v.displayHeight - } - - for i := 0; i < sl.displayLines; i++ { - data := sl.Lines[i].Data - - max := 0 - for _, v := range data { - if max < v { - max = v - } - } - sl.Lines[i].max = max - if max != 0 { - sl.Lines[i].scale = float32(8*sl.Lines[i].Height) / float32(max) - } else { // when all negative - sl.Lines[i].scale = 0 - } - } -} - -// Buffer implements Bufferer interface. -func (sl *Sparklines) Buffer() Buffer { - buf := sl.Block.Buffer() - sl.update() - - oftY := 0 - for i := 0; i < sl.displayLines; i++ { - l := sl.Lines[i] - data := l.Data - - if len(data) > sl.innerArea.Dx() { - data = data[len(data)-sl.innerArea.Dx():] - } - - if l.Title != "" { - rs := trimStr2Runes(l.Title, sl.innerArea.Dx()) - oftX := 0 - for _, v := range rs { - w := charWidth(v) - c := Cell{ - Ch: v, - Fg: l.TitleColor, - Bg: sl.Bg, - } - x := sl.innerArea.Min.X + oftX - y := sl.innerArea.Min.Y + oftY - buf.Set(x, y, c) - oftX += w - } - } - - for j, v := range data { - // display height of the data point, zero when data is negative - h := int(float32(v)*l.scale + 0.5) - if v < 0 { - h = 0 - } - - barCnt := h / 8 - barMod := h % 8 - for jj := 0; jj < barCnt; jj++ { - c := Cell{ - Ch: ' ', // => sparks[7] - Bg: l.LineColor, - } - x := sl.innerArea.Min.X + j - y := sl.innerArea.Min.Y + oftY + l.Height - jj - - //p.Bg = sl.BgColor - buf.Set(x, y, c) - } - if barMod != 0 { - c := Cell{ - Ch: sparks[barMod-1], - Fg: l.LineColor, - Bg: sl.Bg, - } - x := sl.innerArea.Min.X + j - y := sl.innerArea.Min.Y + oftY + l.Height - barCnt - buf.Set(x, y, c) - } - } - - oftY += l.displayHeight - } - - return buf -} diff --git a/vendor/github.com/gizak/termui/table.go b/vendor/github.com/gizak/termui/table.go deleted file mode 100644 index e3d1bbf309a2..000000000000 --- a/vendor/github.com/gizak/termui/table.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "strings" - -/* Table is like: - -┌Awesome Table ────────────────────────────────────────────────┐ -│ Col0 | Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | -│──────────────────────────────────────────────────────────────│ -│ Some Item #1 | AAA | 123 | CCCCC | EEEEE | GGGGG | IIIII | -│──────────────────────────────────────────────────────────────│ -│ Some Item #2 | BBB | 456 | DDDDD | FFFFF | HHHHH | JJJJJ | -└──────────────────────────────────────────────────────────────┘ - -Datapoints are a two dimensional array of strings: [][]string - -Example: - data := [][]string{ - {"Col0", "Col1", "Col3", "Col4", "Col5", "Col6"}, - {"Some Item #1", "AAA", "123", "CCCCC", "EEEEE", "GGGGG", "IIIII"}, - {"Some Item #2", "BBB", "456", "DDDDD", "FFFFF", "HHHHH", "JJJJJ"}, - } - - table := termui.NewTable() - table.Rows = data // type [][]string - table.FgColor = termui.ColorWhite - table.BgColor = termui.ColorDefault - table.Height = 7 - table.Width = 62 - table.Y = 0 - table.X = 0 - table.Border = true -*/ - -// Table tracks all the attributes of a Table instance -type Table struct { - Block - Rows [][]string - CellWidth []int - FgColor Attribute - BgColor Attribute - FgColors []Attribute - BgColors []Attribute - Separator bool - TextAlign Align -} - -// NewTable returns a new Table instance -func NewTable() *Table { - table := &Table{Block: *NewBlock()} - table.FgColor = ColorWhite - table.BgColor = ColorDefault - table.Separator = true - return table -} - -// CellsWidth calculates the width of a cell array and returns an int -func cellsWidth(cells []Cell) int { - width := 0 - for _, c := range cells { - width += c.Width() - } - return width -} - -// Analysis generates and returns an array of []Cell that represent all columns in the Table -func (table *Table) Analysis() [][]Cell { - var rowCells [][]Cell - length := len(table.Rows) - if length < 1 { - return rowCells - } - - if len(table.FgColors) == 0 { - table.FgColors = make([]Attribute, len(table.Rows)) - } - if len(table.BgColors) == 0 { - table.BgColors = make([]Attribute, len(table.Rows)) - } - - cellWidths := make([]int, len(table.Rows[0])) - - for y, row := range table.Rows { - if table.FgColors[y] == 0 { - table.FgColors[y] = table.FgColor - } - if table.BgColors[y] == 0 { - table.BgColors[y] = table.BgColor - } - for x, str := range row { - cells := DefaultTxBuilder.Build(str, table.FgColors[y], table.BgColors[y]) - cw := cellsWidth(cells) - if cellWidths[x] < cw { - cellWidths[x] = cw - } - rowCells = append(rowCells, cells) - } - } - table.CellWidth = cellWidths - return rowCells -} - -// SetSize calculates the table size and sets the internal value -func (table *Table) SetSize() { - length := len(table.Rows) - if table.Separator { - table.Height = length*2 + 1 - } else { - table.Height = length + 2 - } - table.Width = 2 - if length != 0 { - for _, cellWidth := range table.CellWidth { - table.Width += cellWidth + 3 - } - } -} - -// CalculatePosition ... -func (table *Table) CalculatePosition(x int, y int, coordinateX *int, coordinateY *int, cellStart *int) { - if table.Separator { - *coordinateY = table.innerArea.Min.Y + y*2 - } else { - *coordinateY = table.innerArea.Min.Y + y - } - if x == 0 { - *cellStart = table.innerArea.Min.X - } else { - *cellStart += table.CellWidth[x-1] + 3 - } - - switch table.TextAlign { - case AlignRight: - *coordinateX = *cellStart + (table.CellWidth[x] - len(table.Rows[y][x])) + 2 - case AlignCenter: - *coordinateX = *cellStart + (table.CellWidth[x]-len(table.Rows[y][x]))/2 + 2 - default: - *coordinateX = *cellStart + 2 - } -} - -// Buffer ... -func (table *Table) Buffer() Buffer { - buffer := table.Block.Buffer() - rowCells := table.Analysis() - pointerX := table.innerArea.Min.X + 2 - pointerY := table.innerArea.Min.Y - borderPointerX := table.innerArea.Min.X - for y, row := range table.Rows { - for x := range row { - table.CalculatePosition(x, y, &pointerX, &pointerY, &borderPointerX) - background := DefaultTxBuilder.Build(strings.Repeat(" ", table.CellWidth[x]+3), table.BgColors[y], table.BgColors[y]) - cells := rowCells[y*len(row)+x] - for i, back := range background { - buffer.Set(borderPointerX+i, pointerY, back) - } - - coordinateX := pointerX - for _, printer := range cells { - buffer.Set(coordinateX, pointerY, printer) - coordinateX += printer.Width() - } - - if x != 0 { - dividors := DefaultTxBuilder.Build("|", table.FgColors[y], table.BgColors[y]) - for _, dividor := range dividors { - buffer.Set(borderPointerX, pointerY, dividor) - } - } - } - - if table.Separator { - border := DefaultTxBuilder.Build(strings.Repeat("─", table.Width-2), table.FgColor, table.BgColor) - for i, cell := range border { - buffer.Set(i+1, pointerY+1, cell) - } - } - } - - return buffer -} diff --git a/vendor/github.com/gizak/termui/textbuilder.go b/vendor/github.com/gizak/termui/textbuilder.go deleted file mode 100644 index 12e2055b5095..000000000000 --- a/vendor/github.com/gizak/termui/textbuilder.go +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "regexp" - "strings" - - "github.com/mitchellh/go-wordwrap" -) - -// TextBuilder is a minimal interface to produce text []Cell using specific syntax (markdown). -type TextBuilder interface { - Build(s string, fg, bg Attribute) []Cell -} - -// DefaultTxBuilder is set to be MarkdownTxBuilder. -var DefaultTxBuilder = NewMarkdownTxBuilder() - -// MarkdownTxBuilder implements TextBuilder interface, using markdown syntax. -type MarkdownTxBuilder struct { - baseFg Attribute - baseBg Attribute - plainTx []rune - markers []marker -} - -type marker struct { - st int - ed int - fg Attribute - bg Attribute -} - -var colorMap = map[string]Attribute{ - "red": ColorRed, - "blue": ColorBlue, - "black": ColorBlack, - "cyan": ColorCyan, - "yellow": ColorYellow, - "white": ColorWhite, - "default": ColorDefault, - "green": ColorGreen, - "magenta": ColorMagenta, -} - -var attrMap = map[string]Attribute{ - "bold": AttrBold, - "underline": AttrUnderline, - "reverse": AttrReverse, -} - -func rmSpc(s string) string { - reg := regexp.MustCompile(`\s+`) - return reg.ReplaceAllString(s, "") -} - -// readAttr translates strings like `fg-red,fg-bold,bg-white` to fg and bg Attribute -func (mtb MarkdownTxBuilder) readAttr(s string) (Attribute, Attribute) { - fg := mtb.baseFg - bg := mtb.baseBg - - updateAttr := func(a Attribute, attrs []string) Attribute { - for _, s := range attrs { - // replace the color - if c, ok := colorMap[s]; ok { - a &= 0xFF00 // erase clr 0 ~ 8 bits - a |= c // set clr - } - // add attrs - if c, ok := attrMap[s]; ok { - a |= c - } - } - return a - } - - ss := strings.Split(s, ",") - fgs := []string{} - bgs := []string{} - for _, v := range ss { - subs := strings.Split(v, "-") - if len(subs) > 1 { - if subs[0] == "fg" { - fgs = append(fgs, subs[1]) - } - if subs[0] == "bg" { - bgs = append(bgs, subs[1]) - } - } - } - - fg = updateAttr(fg, fgs) - bg = updateAttr(bg, bgs) - return fg, bg -} - -func (mtb *MarkdownTxBuilder) reset() { - mtb.plainTx = []rune{} - mtb.markers = []marker{} -} - -// parse streams and parses text into normalized text and render sequence. -func (mtb *MarkdownTxBuilder) parse(str string) { - rs := str2runes(str) - normTx := []rune{} - square := []rune{} - brackt := []rune{} - accSquare := false - accBrackt := false - cntSquare := 0 - - reset := func() { - square = []rune{} - brackt = []rune{} - accSquare = false - accBrackt = false - cntSquare = 0 - } - // pipe stacks into normTx and clear - rollback := func() { - normTx = append(normTx, square...) - normTx = append(normTx, brackt...) - reset() - } - // chop first and last - chop := func(s []rune) []rune { - return s[1 : len(s)-1] - } - - for i, r := range rs { - switch { - // stacking brackt - case accBrackt: - brackt = append(brackt, r) - if ')' == r { - fg, bg := mtb.readAttr(string(chop(brackt))) - st := len(normTx) - ed := len(normTx) + len(square) - 2 - mtb.markers = append(mtb.markers, marker{st, ed, fg, bg}) - normTx = append(normTx, chop(square)...) - reset() - } else if i+1 == len(rs) { - rollback() - } - // stacking square - case accSquare: - switch { - // squares closed and followed by a '(' - case cntSquare == 0 && '(' == r: - accBrackt = true - brackt = append(brackt, '(') - // squares closed but not followed by a '(' - case cntSquare == 0: - rollback() - if '[' == r { - accSquare = true - cntSquare = 1 - brackt = append(brackt, '[') - } else { - normTx = append(normTx, r) - } - // hit the end - case i+1 == len(rs): - square = append(square, r) - rollback() - case '[' == r: - cntSquare++ - square = append(square, '[') - case ']' == r: - cntSquare-- - square = append(square, ']') - // normal char - default: - square = append(square, r) - } - // stacking normTx - default: - if '[' == r { - accSquare = true - cntSquare = 1 - square = append(square, '[') - } else { - normTx = append(normTx, r) - } - } - } - - mtb.plainTx = normTx -} - -func wrapTx(cs []Cell, wl int) []Cell { - tmpCell := make([]Cell, len(cs)) - copy(tmpCell, cs) - - // get the plaintext - plain := CellsToStr(cs) - - // wrap - plainWrapped := wordwrap.WrapString(plain, uint(wl)) - - // find differences and insert - finalCell := tmpCell // finalcell will get the inserts and is what is returned - - plainRune := []rune(plain) - plainWrappedRune := []rune(plainWrapped) - trigger := "go" - plainRuneNew := plainRune - - for trigger != "stop" { - plainRune = plainRuneNew - for i := range plainRune { - if plainRune[i] == plainWrappedRune[i] { - trigger = "stop" - } else if plainRune[i] != plainWrappedRune[i] && plainWrappedRune[i] == 10 { - trigger = "go" - cell := Cell{10, 0, 0} - j := i - 0 - - // insert a cell into the []Cell in correct position - tmpCell[i] = cell - - // insert the newline into plain so we avoid indexing errors - plainRuneNew = append(plainRune, 10) - copy(plainRuneNew[j+1:], plainRuneNew[j:]) - plainRuneNew[j] = plainWrappedRune[j] - - // restart the inner for loop until plain and plain wrapped are - // the same; yeah, it's inefficient, but the text amounts - // should be small - break - - } else if plainRune[i] != plainWrappedRune[i] && - plainWrappedRune[i-1] == 10 && // if the prior rune is a newline - plainRune[i] == 32 { // and this rune is a space - trigger = "go" - // need to delete plainRune[i] because it gets rid of an extra - // space - plainRuneNew = append(plainRune[:i], plainRune[i+1:]...) - break - - } else { - trigger = "stop" // stops the outer for loop - } - } - } - - finalCell = tmpCell - - return finalCell -} - -// Build implements TextBuilder interface. -func (mtb MarkdownTxBuilder) Build(s string, fg, bg Attribute) []Cell { - mtb.baseFg = fg - mtb.baseBg = bg - mtb.reset() - mtb.parse(s) - cs := make([]Cell, len(mtb.plainTx)) - for i := range cs { - cs[i] = Cell{Ch: mtb.plainTx[i], Fg: fg, Bg: bg} - } - for _, mrk := range mtb.markers { - for i := mrk.st; i < mrk.ed; i++ { - cs[i].Fg = mrk.fg - cs[i].Bg = mrk.bg - } - } - - return cs -} - -// NewMarkdownTxBuilder returns a TextBuilder employing markdown syntax. -func NewMarkdownTxBuilder() TextBuilder { - return MarkdownTxBuilder{} -} diff --git a/vendor/github.com/gizak/termui/theme.go b/vendor/github.com/gizak/termui/theme.go deleted file mode 100644 index 21fb3bfb751a..000000000000 --- a/vendor/github.com/gizak/termui/theme.go +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import "strings" - -/* -// A ColorScheme represents the current look-and-feel of the dashboard. -type ColorScheme struct { - BodyBg Attribute - BlockBg Attribute - HasBorder bool - BorderFg Attribute - BorderBg Attribute - BorderLabelTextFg Attribute - BorderLabelTextBg Attribute - ParTextFg Attribute - ParTextBg Attribute - SparklineLine Attribute - SparklineTitle Attribute - GaugeBar Attribute - GaugePercent Attribute - LineChartLine Attribute - LineChartAxes Attribute - ListItemFg Attribute - ListItemBg Attribute - BarChartBar Attribute - BarChartText Attribute - BarChartNum Attribute - MBarChartBar Attribute - MBarChartText Attribute - MBarChartNum Attribute - TabActiveBg Attribute -} - -// default color scheme depends on the user's terminal setting. -var themeDefault = ColorScheme{HasBorder: true} - -var themeHelloWorld = ColorScheme{ - BodyBg: ColorBlack, - BlockBg: ColorBlack, - HasBorder: true, - BorderFg: ColorWhite, - BorderBg: ColorBlack, - BorderLabelTextBg: ColorBlack, - BorderLabelTextFg: ColorGreen, - ParTextBg: ColorBlack, - ParTextFg: ColorWhite, - SparklineLine: ColorMagenta, - SparklineTitle: ColorWhite, - GaugeBar: ColorRed, - GaugePercent: ColorWhite, - LineChartLine: ColorYellow | AttrBold, - LineChartAxes: ColorWhite, - ListItemBg: ColorBlack, - ListItemFg: ColorYellow, - BarChartBar: ColorRed, - BarChartNum: ColorWhite, - BarChartText: ColorCyan, - MBarChartBar: ColorRed, - MBarChartNum: ColorWhite, - MBarChartText: ColorCyan, - TabActiveBg: ColorMagenta, -} - -var theme = themeDefault // global dep - -// Theme returns the currently used theme. -func Theme() ColorScheme { - return theme -} - -// SetTheme sets a new, custom theme. -func SetTheme(newTheme ColorScheme) { - theme = newTheme -} - -// UseTheme sets a predefined scheme. Currently available: "hello-world" and -// "black-and-white". -func UseTheme(th string) { - switch th { - case "helloworld": - theme = themeHelloWorld - default: - theme = themeDefault - } -} -*/ - -var ColorMap = map[string]Attribute{ - "fg": ColorWhite, - "bg": ColorDefault, - "border.fg": ColorWhite, - "label.fg": ColorGreen, - "par.fg": ColorYellow, - "par.label.bg": ColorWhite, -} - -func ThemeAttr(name string) Attribute { - return lookUpAttr(ColorMap, name) -} - -func lookUpAttr(clrmap map[string]Attribute, name string) Attribute { - - a, ok := clrmap[name] - if ok { - return a - } - - ns := strings.Split(name, ".") - for i := range ns { - nn := strings.Join(ns[i:len(ns)], ".") - a, ok = ColorMap[nn] - if ok { - break - } - } - - return a -} - -// 0<=r,g,b <= 5 -func ColorRGB(r, g, b int) Attribute { - within := func(n int) int { - if n < 0 { - return 0 - } - - if n > 5 { - return 5 - } - - return n - } - - r, b, g = within(r), within(b), within(g) - return Attribute(0x0f + 36*r + 6*g + b) -} diff --git a/vendor/github.com/gizak/termui/widget.go b/vendor/github.com/gizak/termui/widget.go deleted file mode 100644 index 80276bf1f181..000000000000 --- a/vendor/github.com/gizak/termui/widget.go +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2017 Zack Guo . All rights reserved. -// Use of this source code is governed by a MIT license that can -// be found in the LICENSE file. - -package termui - -import ( - "fmt" - "sync" -) - -// event mixins -type WgtMgr map[string]WgtInfo - -type WgtInfo struct { - Handlers map[string]func(Event) - WgtRef Widget - Id string -} - -type Widget interface { - Id() string -} - -func NewWgtInfo(wgt Widget) WgtInfo { - return WgtInfo{ - Handlers: make(map[string]func(Event)), - WgtRef: wgt, - Id: wgt.Id(), - } -} - -func NewWgtMgr() WgtMgr { - wm := WgtMgr(make(map[string]WgtInfo)) - return wm - -} - -func (wm WgtMgr) AddWgt(wgt Widget) { - wm[wgt.Id()] = NewWgtInfo(wgt) -} - -func (wm WgtMgr) RmWgt(wgt Widget) { - wm.RmWgtById(wgt.Id()) -} - -func (wm WgtMgr) RmWgtById(id string) { - delete(wm, id) -} - -func (wm WgtMgr) AddWgtHandler(id, path string, h func(Event)) { - if w, ok := wm[id]; ok { - w.Handlers[path] = h - } -} - -func (wm WgtMgr) RmWgtHandler(id, path string) { - if w, ok := wm[id]; ok { - delete(w.Handlers, path) - } -} - -var counter struct { - sync.RWMutex - count int -} - -func GenId() string { - counter.Lock() - defer counter.Unlock() - - counter.count += 1 - return fmt.Sprintf("%d", counter.count) -} - -func (wm WgtMgr) WgtHandlersHook() func(Event) { - return func(e Event) { - for _, v := range wm { - if k := findMatch(v.Handlers, e.Path); k != "" { - v.Handlers[k](e) - } - } - } -} - -var DefaultWgtMgr WgtMgr - -func (b *Block) Handle(path string, handler func(Event)) { - if _, ok := DefaultWgtMgr[b.Id()]; !ok { - DefaultWgtMgr.AddWgt(b) - } - - DefaultWgtMgr.AddWgtHandler(b.Id(), path, handler) -} diff --git a/vendor/github.com/golang/protobuf/proto/Makefile b/vendor/github.com/golang/protobuf/proto/Makefile deleted file mode 100644 index e2e0651a934d..000000000000 --- a/vendor/github.com/golang/protobuf/proto/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -# Go support for Protocol Buffers - Google's data interchange format -# -# Copyright 2010 The Go Authors. All rights reserved. -# https://github.com/golang/protobuf -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -install: - go install - -test: install generate-test-pbs - go test - - -generate-test-pbs: - make install - make -C testdata - protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto - make diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go index e392575b353a..3cd3249f7062 100644 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ b/vendor/github.com/golang/protobuf/proto/clone.go @@ -35,22 +35,39 @@ package proto import ( + "fmt" "log" "reflect" "strings" ) // Clone returns a deep copy of a protocol buffer. -func Clone(pb Message) Message { - in := reflect.ValueOf(pb) +func Clone(src Message) Message { + in := reflect.ValueOf(src) if in.IsNil() { - return pb + return src } - out := reflect.New(in.Type().Elem()) - // out is empty so a merge is a deep copy. - mergeStruct(out.Elem(), in.Elem()) - return out.Interface().(Message) + dst := out.Interface().(Message) + Merge(dst, src) + return dst +} + +// Merger is the interface representing objects that can merge messages of the same type. +type Merger interface { + // Merge merges src into this message. + // Required and optional fields that are set in src will be set to that value in dst. + // Elements of repeated fields will be appended. + // + // Merge may panic if called with a different argument type than the receiver. + Merge(src Message) +} + +// generatedMerger is the custom merge method that generated protos will have. +// We must add this method since a generate Merge method will conflict with +// many existing protos that have a Merge data field already defined. +type generatedMerger interface { + XXX_Merge(src Message) } // Merge merges src into dst. @@ -58,17 +75,24 @@ func Clone(pb Message) Message { // Elements of repeated fields will be appended. // Merge panics if src and dst are not the same type, or if dst is nil. func Merge(dst, src Message) { + if m, ok := dst.(Merger); ok { + m.Merge(src) + return + } + in := reflect.ValueOf(src) out := reflect.ValueOf(dst) if out.IsNil() { panic("proto: nil destination") } if in.Type() != out.Type() { - // Explicit test prior to mergeStruct so that mistyped nils will fail - panic("proto: type mismatch") + panic(fmt.Sprintf("proto.Merge(%T, %T) type mismatch", dst, src)) } if in.IsNil() { - // Merging nil into non-nil is a quiet no-op + return // Merge from nil src is a noop + } + if m, ok := dst.(generatedMerger); ok { + m.XXX_Merge(src) return } mergeStruct(out.Elem(), in.Elem()) @@ -84,7 +108,7 @@ func mergeStruct(out, in reflect.Value) { mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) } - if emIn, ok := extendable(in.Addr().Interface()); ok { + if emIn, err := extendable(in.Addr().Interface()); err == nil { emOut, _ := extendable(out.Addr().Interface()) mIn, muIn := emIn.extensionsRead() if mIn != nil { diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go index aa207298f997..63b0f08bef2a 100644 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ b/vendor/github.com/golang/protobuf/proto/decode.go @@ -39,8 +39,6 @@ import ( "errors" "fmt" "io" - "os" - "reflect" ) // errOverflow is returned when an integer is too large to be represented. @@ -50,10 +48,6 @@ var errOverflow = errors.New("proto: integer overflow") // wire type is encountered. It does not get returned to user code. var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") -// The fundamental decoders that interpret bytes on the wire. -// Those that take integer types all return uint64 and are -// therefore of type valueDecoder. - // DecodeVarint reads a varint-encoded integer from the slice. // It returns the integer and the number of bytes consumed, or // zero if there is not enough. @@ -192,7 +186,6 @@ func (p *Buffer) DecodeVarint() (x uint64, err error) { if b&0x80 == 0 { goto done } - // x -= 0x80 << 63 // Always zero. return 0, errOverflow @@ -267,9 +260,6 @@ func (p *Buffer) DecodeZigzag32() (x uint64, err error) { return } -// These are not ValueDecoders: they produce an array of bytes or a string. -// bytes, embedded messages - // DecodeRawBytes reads a count-delimited byte buffer from the Buffer. // This is the format used for the bytes protocol buffer // type and for embedded messages. @@ -311,81 +301,29 @@ func (p *Buffer) DecodeStringBytes() (s string, err error) { return string(buf), nil } -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. -// If the protocol buffer has extensions, and the field matches, add it as an extension. -// Otherwise, if the XXX_unrecognized field exists, append the skipped data there. -func (o *Buffer) skipAndSave(t reflect.Type, tag, wire int, base structPointer, unrecField field) error { - oi := o.index - - err := o.skip(t, tag, wire) - if err != nil { - return err - } - - if !unrecField.IsValid() { - return nil - } - - ptr := structPointer_Bytes(base, unrecField) - - // Add the skipped field to struct field - obuf := o.buf - - o.buf = *ptr - o.EncodeVarint(uint64(tag<<3 | wire)) - *ptr = append(o.buf, obuf[oi:o.index]...) - - o.buf = obuf - - return nil -} - -// Skip the next item in the buffer. Its wire type is decoded and presented as an argument. -func (o *Buffer) skip(t reflect.Type, tag, wire int) error { - - var u uint64 - var err error - - switch wire { - case WireVarint: - _, err = o.DecodeVarint() - case WireFixed64: - _, err = o.DecodeFixed64() - case WireBytes: - _, err = o.DecodeRawBytes(false) - case WireFixed32: - _, err = o.DecodeFixed32() - case WireStartGroup: - for { - u, err = o.DecodeVarint() - if err != nil { - break - } - fwire := int(u & 0x7) - if fwire == WireEndGroup { - break - } - ftag := int(u >> 3) - err = o.skip(t, ftag, fwire) - if err != nil { - break - } - } - default: - err = fmt.Errorf("proto: can't skip unknown wire type %d for %s", wire, t) - } - return err -} - // Unmarshaler is the interface representing objects that can -// unmarshal themselves. The method should reset the receiver before -// decoding starts. The argument points to data that may be +// unmarshal themselves. The argument points to data that may be // overwritten, so implementations should not keep references to the // buffer. +// Unmarshal implementations should not clear the receiver. +// Any unmarshaled data should be merged into the receiver. +// Callers of Unmarshal that do not want to retain existing data +// should Reset the receiver before calling Unmarshal. type Unmarshaler interface { Unmarshal([]byte) error } +// newUnmarshaler is the interface representing objects that can +// unmarshal themselves. The semantics are identical to Unmarshaler. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newUnmarshaler interface { + XXX_Unmarshal([]byte) error +} + // Unmarshal parses the protocol buffer representation in buf and places the // decoded result in pb. If the struct underlying pb does not match // the data in buf, the results can be unpredictable. @@ -395,7 +333,13 @@ type Unmarshaler interface { // to preserve and append to existing data. func Unmarshal(buf []byte, pb Message) error { pb.Reset() - return UnmarshalMerge(buf, pb) + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } + if u, ok := pb.(Unmarshaler); ok { + return u.Unmarshal(buf) + } + return NewBuffer(buf).Unmarshal(pb) } // UnmarshalMerge parses the protocol buffer representation in buf and @@ -405,8 +349,16 @@ func Unmarshal(buf []byte, pb Message) error { // UnmarshalMerge merges into existing data in pb. // Most code should use Unmarshal instead. func UnmarshalMerge(buf []byte, pb Message) error { - // If the object can unmarshal itself, let it. + if u, ok := pb.(newUnmarshaler); ok { + return u.XXX_Unmarshal(buf) + } if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 return u.Unmarshal(buf) } return NewBuffer(buf).Unmarshal(pb) @@ -422,12 +374,17 @@ func (p *Buffer) DecodeMessage(pb Message) error { } // DecodeGroup reads a tag-delimited group from the Buffer. +// StartGroup tag is already consumed. This function consumes +// EndGroup tag. func (p *Buffer) DecodeGroup(pb Message) error { - typ, base, err := getbase(pb) - if err != nil { - return err + b := p.buf[p.index:] + x, y := findEndGroup(b) + if x < 0 { + return io.ErrUnexpectedEOF } - return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base) + err := Unmarshal(b[:x], pb) + p.index += y + return err } // Unmarshal parses the protocol buffer representation in the @@ -438,533 +395,33 @@ func (p *Buffer) DecodeGroup(pb Message) error { // Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. func (p *Buffer) Unmarshal(pb Message) error { // If the object can unmarshal itself, let it. - if u, ok := pb.(Unmarshaler); ok { - err := u.Unmarshal(p.buf[p.index:]) + if u, ok := pb.(newUnmarshaler); ok { + err := u.XXX_Unmarshal(p.buf[p.index:]) p.index = len(p.buf) return err } - - typ, base, err := getbase(pb) - if err != nil { - return err - } - - err = p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), false, base) - - if collectStats { - stats.Decode++ - } - - return err -} - -// unmarshalType does the work of unmarshaling a structure. -func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group bool, base structPointer) error { - var state errorState - required, reqFields := prop.reqCount, uint64(0) - - var err error - for err == nil && o.index < len(o.buf) { - oi := o.index - var u uint64 - u, err = o.DecodeVarint() - if err != nil { - break - } - wire := int(u & 0x7) - if wire == WireEndGroup { - if is_group { - if required > 0 { - // Not enough information to determine the exact field. - // (See below.) - return &RequiredNotSetError{"{Unknown}"} - } - return nil // input is satisfied - } - return fmt.Errorf("proto: %s: wiretype end group for non-group", st) - } - tag := int(u >> 3) - if tag <= 0 { - return fmt.Errorf("proto: %s: illegal tag %d (wire type %d)", st, tag, wire) - } - fieldnum, ok := prop.decoderTags.get(tag) - if !ok { - // Maybe it's an extension? - if prop.extendable { - if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) { - if err = o.skip(st, tag, wire); err == nil { - extmap := e.extensionsWrite() - ext := extmap[int32(tag)] // may be missing - ext.enc = append(ext.enc, o.buf[oi:o.index]...) - extmap[int32(tag)] = ext - } - continue - } - } - // Maybe it's a oneof? - if prop.oneofUnmarshaler != nil { - m := structPointer_Interface(base, st).(Message) - // First return value indicates whether tag is a oneof field. - ok, err = prop.oneofUnmarshaler(m, tag, wire, o) - if err == ErrInternalBadWireType { - // Map the error to something more descriptive. - // Do the formatting here to save generated code space. - err = fmt.Errorf("bad wiretype for oneof field in %T", m) - } - if ok { - continue - } - } - err = o.skipAndSave(st, tag, wire, base, prop.unrecField) - continue - } - p := prop.Prop[fieldnum] - - if p.dec == nil { - fmt.Fprintf(os.Stderr, "proto: no protobuf decoder for %s.%s\n", st, st.Field(fieldnum).Name) - continue - } - dec := p.dec - if wire != WireStartGroup && wire != p.WireType { - if wire == WireBytes && p.packedDec != nil { - // a packable field - dec = p.packedDec - } else { - err = fmt.Errorf("proto: bad wiretype for field %s.%s: got wiretype %d, want %d", st, st.Field(fieldnum).Name, wire, p.WireType) - continue - } - } - decErr := dec(o, p, base) - if decErr != nil && !state.shouldContinue(decErr, p) { - err = decErr - } - if err == nil && p.Required { - // Successfully decoded a required field. - if tag <= 64 { - // use bitmap for fields 1-64 to catch field reuse. - var mask uint64 = 1 << uint64(tag-1) - if reqFields&mask == 0 { - // new required field - reqFields |= mask - required-- - } - } else { - // This is imprecise. It can be fooled by a required field - // with a tag > 64 that is encoded twice; that's very rare. - // A fully correct implementation would require allocating - // a data structure, which we would like to avoid. - required-- - } - } - } - if err == nil { - if is_group { - return io.ErrUnexpectedEOF - } - if state.err != nil { - return state.err - } - if required > 0 { - // Not enough information to determine the exact field. If we use extra - // CPU, we could determine the field only if the missing required field - // has a tag <= 64 and we check reqFields. - return &RequiredNotSetError{"{Unknown}"} - } - } - return err -} - -// Individual type decoders -// For each, -// u is the decoded value, -// v is a pointer to the field (pointer) in the struct - -// Sizes of the pools to allocate inside the Buffer. -// The goal is modest amortization and allocation -// on at least 16-byte boundaries. -const ( - boolPoolSize = 16 - uint32PoolSize = 8 - uint64PoolSize = 4 -) - -// Decode a bool. -func (o *Buffer) dec_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - if len(o.bools) == 0 { - o.bools = make([]bool, boolPoolSize) - } - o.bools[0] = u != 0 - *structPointer_Bool(base, p.field) = &o.bools[0] - o.bools = o.bools[1:] - return nil -} - -func (o *Buffer) dec_proto3_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - *structPointer_BoolVal(base, p.field) = u != 0 - return nil -} - -// Decode an int32. -func (o *Buffer) dec_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word32_Set(structPointer_Word32(base, p.field), o, uint32(u)) - return nil -} - -func (o *Buffer) dec_proto3_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word32Val_Set(structPointer_Word32Val(base, p.field), uint32(u)) - return nil -} - -// Decode an int64. -func (o *Buffer) dec_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word64_Set(structPointer_Word64(base, p.field), o, u) - return nil -} - -func (o *Buffer) dec_proto3_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - word64Val_Set(structPointer_Word64Val(base, p.field), o, u) - return nil -} - -// Decode a string. -func (o *Buffer) dec_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - *structPointer_String(base, p.field) = &s - return nil -} - -func (o *Buffer) dec_proto3_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - *structPointer_StringVal(base, p.field) = s - return nil -} - -// Decode a slice of bytes ([]byte). -func (o *Buffer) dec_slice_byte(p *Properties, base structPointer) error { - b, err := o.DecodeRawBytes(true) - if err != nil { - return err - } - *structPointer_Bytes(base, p.field) = b - return nil -} - -// Decode a slice of bools ([]bool). -func (o *Buffer) dec_slice_bool(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - v := structPointer_BoolSlice(base, p.field) - *v = append(*v, u != 0) - return nil -} - -// Decode a slice of bools ([]bool) in packed format. -func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error { - v := structPointer_BoolSlice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded bools - fin := o.index + nb - if fin < o.index { - return errOverflow - } - - y := *v - for o.index < fin { - u, err := p.valDec(o) - if err != nil { - return err - } - y = append(y, u != 0) - } - - *v = y - return nil -} - -// Decode a slice of int32s ([]int32). -func (o *Buffer) dec_slice_int32(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - structPointer_Word32Slice(base, p.field).Append(uint32(u)) - return nil -} - -// Decode a slice of int32s ([]int32) in packed format. -func (o *Buffer) dec_slice_packed_int32(p *Properties, base structPointer) error { - v := structPointer_Word32Slice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded int32s - - fin := o.index + nb - if fin < o.index { - return errOverflow - } - for o.index < fin { - u, err := p.valDec(o) - if err != nil { - return err - } - v.Append(uint32(u)) - } - return nil -} - -// Decode a slice of int64s ([]int64). -func (o *Buffer) dec_slice_int64(p *Properties, base structPointer) error { - u, err := p.valDec(o) - if err != nil { - return err - } - - structPointer_Word64Slice(base, p.field).Append(u) - return nil -} - -// Decode a slice of int64s ([]int64) in packed format. -func (o *Buffer) dec_slice_packed_int64(p *Properties, base structPointer) error { - v := structPointer_Word64Slice(base, p.field) - - nn, err := o.DecodeVarint() - if err != nil { - return err - } - nb := int(nn) // number of bytes of encoded int64s - - fin := o.index + nb - if fin < o.index { - return errOverflow - } - for o.index < fin { - u, err := p.valDec(o) - if err != nil { - return err - } - v.Append(u) - } - return nil -} - -// Decode a slice of strings ([]string). -func (o *Buffer) dec_slice_string(p *Properties, base structPointer) error { - s, err := o.DecodeStringBytes() - if err != nil { - return err - } - v := structPointer_StringSlice(base, p.field) - *v = append(*v, s) - return nil -} - -// Decode a slice of slice of bytes ([][]byte). -func (o *Buffer) dec_slice_slice_byte(p *Properties, base structPointer) error { - b, err := o.DecodeRawBytes(true) - if err != nil { - return err - } - v := structPointer_BytesSlice(base, p.field) - *v = append(*v, b) - return nil -} - -// Decode a map field. -func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { - raw, err := o.DecodeRawBytes(false) - if err != nil { - return err - } - oi := o.index // index at the end of this map entry - o.index -= len(raw) // move buffer back to start of map entry - - mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V - if mptr.Elem().IsNil() { - mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem())) - } - v := mptr.Elem() // map[K]V - - // Prepare addressable doubly-indirect placeholders for the key and value types. - // See enc_new_map for why. - keyptr := reflect.New(reflect.PtrTo(p.mtype.Key())).Elem() // addressable *K - keybase := toStructPointer(keyptr.Addr()) // **K - - var valbase structPointer - var valptr reflect.Value - switch p.mtype.Elem().Kind() { - case reflect.Slice: - // []byte - var dummy []byte - valptr = reflect.ValueOf(&dummy) // *[]byte - valbase = toStructPointer(valptr) // *[]byte - case reflect.Ptr: - // message; valptr is **Msg; need to allocate the intermediate pointer - valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V - valptr.Set(reflect.New(valptr.Type().Elem())) - valbase = toStructPointer(valptr) - default: - // everything else - valptr = reflect.New(reflect.PtrTo(p.mtype.Elem())).Elem() // addressable *V - valbase = toStructPointer(valptr.Addr()) // **V - } - - // Decode. - // This parses a restricted wire format, namely the encoding of a message - // with two fields. See enc_new_map for the format. - for o.index < oi { - // tagcode for key and value properties are always a single byte - // because they have tags 1 and 2. - tagcode := o.buf[o.index] - o.index++ - switch tagcode { - case p.mkeyprop.tagcode[0]: - if err := p.mkeyprop.dec(o, p.mkeyprop, keybase); err != nil { - return err - } - case p.mvalprop.tagcode[0]: - if err := p.mvalprop.dec(o, p.mvalprop, valbase); err != nil { - return err - } - default: - // TODO: Should we silently skip this instead? - return fmt.Errorf("proto: bad map data tag %d", raw[0]) - } - } - keyelem, valelem := keyptr.Elem(), valptr.Elem() - if !keyelem.IsValid() { - keyelem = reflect.Zero(p.mtype.Key()) - } - if !valelem.IsValid() { - valelem = reflect.Zero(p.mtype.Elem()) - } - - v.SetMapIndex(keyelem, valelem) - return nil -} - -// Decode a group. -func (o *Buffer) dec_struct_group(p *Properties, base structPointer) error { - bas := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(bas) { - // allocate new nested message - bas = toStructPointer(reflect.New(p.stype)) - structPointer_SetStructPointer(base, p.field, bas) - } - return o.unmarshalType(p.stype, p.sprop, true, bas) -} - -// Decode an embedded message. -func (o *Buffer) dec_struct_message(p *Properties, base structPointer) (err error) { - raw, e := o.DecodeRawBytes(false) - if e != nil { - return e - } - - bas := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(bas) { - // allocate new nested message - bas = toStructPointer(reflect.New(p.stype)) - structPointer_SetStructPointer(base, p.field, bas) - } - - // If the object can unmarshal itself, let it. - if p.isUnmarshaler { - iv := structPointer_Interface(bas, p.stype) - return iv.(Unmarshaler).Unmarshal(raw) - } - - obuf := o.buf - oi := o.index - o.buf = raw - o.index = 0 - - err = o.unmarshalType(p.stype, p.sprop, false, bas) - o.buf = obuf - o.index = oi - - return err -} - -// Decode a slice of embedded messages. -func (o *Buffer) dec_slice_struct_message(p *Properties, base structPointer) error { - return o.dec_slice_struct(p, false, base) -} - -// Decode a slice of embedded groups. -func (o *Buffer) dec_slice_struct_group(p *Properties, base structPointer) error { - return o.dec_slice_struct(p, true, base) -} - -// Decode a slice of structs ([]*struct). -func (o *Buffer) dec_slice_struct(p *Properties, is_group bool, base structPointer) error { - v := reflect.New(p.stype) - bas := toStructPointer(v) - structPointer_StructPointerSlice(base, p.field).Append(bas) - - if is_group { - err := o.unmarshalType(p.stype, p.sprop, is_group, bas) - return err - } - - raw, err := o.DecodeRawBytes(false) - if err != nil { + if u, ok := pb.(Unmarshaler); ok { + // NOTE: The history of proto have unfortunately been inconsistent + // whether Unmarshaler should or should not implicitly clear itself. + // Some implementations do, most do not. + // Thus, calling this here may or may not do what people want. + // + // See https://github.com/golang/protobuf/issues/424 + err := u.Unmarshal(p.buf[p.index:]) + p.index = len(p.buf) return err } - // If the object can unmarshal itself, let it. - if p.isUnmarshaler { - iv := v.Interface() - return iv.(Unmarshaler).Unmarshal(raw) - } - - obuf := o.buf - oi := o.index - o.buf = raw - o.index = 0 - - err = o.unmarshalType(p.stype, p.sprop, is_group, bas) - - o.buf = obuf - o.index = oi - + // Slow workaround for messages that aren't Unmarshalers. + // This includes some hand-coded .pb.go files and + // bootstrap protos. + // TODO: fix all of those and then add Unmarshal to + // the Message interface. Then: + // The cast above and code below can be deleted. + // The old unmarshaler can be deleted. + // Clients can call Unmarshal directly (can already do that, actually). + var info InternalMessageInfo + err := info.Unmarshal(pb, p.buf[p.index:]) + p.index = len(p.buf) return err } diff --git a/vendor/github.com/golang/protobuf/proto/deprecated.go b/vendor/github.com/golang/protobuf/proto/deprecated.go new file mode 100644 index 000000000000..35b882c09aaf --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/deprecated.go @@ -0,0 +1,63 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2018 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import "errors" + +// Deprecated: do not use. +type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } + +// Deprecated: do not use. +func GetStats() Stats { return Stats{} } + +// Deprecated: do not use. +func MarshalMessageSet(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSet([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func MarshalMessageSetJSON(interface{}) ([]byte, error) { + return nil, errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func UnmarshalMessageSetJSON([]byte, interface{}) error { + return errors.New("proto: not implemented") +} + +// Deprecated: do not use. +func RegisterMessageSetType(Message, int32, string) {} diff --git a/vendor/github.com/golang/protobuf/proto/discard.go b/vendor/github.com/golang/protobuf/proto/discard.go new file mode 100644 index 000000000000..dea2617ced34 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/discard.go @@ -0,0 +1,350 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2017 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +type generatedDiscarder interface { + XXX_DiscardUnknown() +} + +// DiscardUnknown recursively discards all unknown fields from this message +// and all embedded messages. +// +// When unmarshaling a message with unrecognized fields, the tags and values +// of such fields are preserved in the Message. This allows a later call to +// marshal to be able to produce a message that continues to have those +// unrecognized fields. To avoid this, DiscardUnknown is used to +// explicitly clear the unknown fields after unmarshaling. +// +// For proto2 messages, the unknown fields of message extensions are only +// discarded from messages that have been accessed via GetExtension. +func DiscardUnknown(m Message) { + if m, ok := m.(generatedDiscarder); ok { + m.XXX_DiscardUnknown() + return + } + // TODO: Dynamically populate a InternalMessageInfo for legacy messages, + // but the master branch has no implementation for InternalMessageInfo, + // so it would be more work to replicate that approach. + discardLegacy(m) +} + +// DiscardUnknown recursively discards all unknown fields. +func (a *InternalMessageInfo) DiscardUnknown(m Message) { + di := atomicLoadDiscardInfo(&a.discard) + if di == nil { + di = getDiscardInfo(reflect.TypeOf(m).Elem()) + atomicStoreDiscardInfo(&a.discard, di) + } + di.discard(toPointer(&m)) +} + +type discardInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []discardFieldInfo + unrecognized field +} + +type discardFieldInfo struct { + field field // Offset of field, guaranteed to be valid + discard func(src pointer) +} + +var ( + discardInfoMap = map[reflect.Type]*discardInfo{} + discardInfoLock sync.Mutex +) + +func getDiscardInfo(t reflect.Type) *discardInfo { + discardInfoLock.Lock() + defer discardInfoLock.Unlock() + di := discardInfoMap[t] + if di == nil { + di = &discardInfo{typ: t} + discardInfoMap[t] = di + } + return di +} + +func (di *discardInfo) discard(src pointer) { + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&di.initialized) == 0 { + di.computeDiscardInfo() + } + + for _, fi := range di.fields { + sfp := src.offset(fi.field) + fi.discard(sfp) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { + // Ignore lock since DiscardUnknown is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + DiscardUnknown(m) + } + } + } + + if di.unrecognized.IsValid() { + *src.offset(di.unrecognized).toBytes() = nil + } +} + +func (di *discardInfo) computeDiscardInfo() { + di.lock.Lock() + defer di.lock.Unlock() + if di.initialized != 0 { + return + } + t := di.typ + n := t.NumField() + + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + dfi := discardFieldInfo{field: toField(&f)} + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) + case isSlice: // E.g., []*pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sps := src.getPointerSlice() + for _, sp := range sps { + if !sp.isNil() { + di.discard(sp) + } + } + } + default: // E.g., *pb.T + di := getDiscardInfo(tf) + dfi.discard = func(src pointer) { + sp := src.getPointer() + if !sp.isNil() { + di.discard(sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) + default: // E.g., map[K]V + if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T) + dfi.discard = func(src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + DiscardUnknown(val.Interface().(Message)) + } + } + } else { + dfi.discard = func(pointer) {} // Noop + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) + default: // E.g., interface{} + // TODO: Make this faster? + dfi.discard = func(src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + DiscardUnknown(sv.Interface().(Message)) + } + } + } + } + default: + continue + } + di.fields = append(di.fields, dfi) + } + + di.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + di.unrecognized = toField(&f) + } + + atomic.StoreInt32(&di.initialized, 1) +} + +func discardLegacy(m Message) { + v := reflect.ValueOf(m) + if v.Kind() != reflect.Ptr || v.IsNil() { + return + } + v = v.Elem() + if v.Kind() != reflect.Struct { + return + } + t := v.Type() + + for i := 0; i < v.NumField(); i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + vf := v.Field(i) + tf := f.Type + + // Unwrap tf to get its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) + } + + switch tf.Kind() { + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) + case isSlice: // E.g., []*pb.T + for j := 0; j < vf.Len(); j++ { + discardLegacy(vf.Index(j).Interface().(Message)) + } + default: // E.g., *pb.T + discardLegacy(vf.Interface().(Message)) + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) + default: // E.g., map[K]V + tv := vf.Type().Elem() + if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T) + for _, key := range vf.MapKeys() { + val := vf.MapIndex(key) + discardLegacy(val.Interface().(Message)) + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) + default: // E.g., test_proto.isCommunique_Union interface + if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { + vf = vf.Elem() // E.g., *test_proto.Communique_Msg + if !vf.IsNil() { + vf = vf.Elem() // E.g., test_proto.Communique_Msg + vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value + if vf.Kind() == reflect.Ptr { + discardLegacy(vf.Interface().(Message)) + } + } + } + } + } + } + + if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { + if vf.Type() != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + vf.Set(reflect.ValueOf([]byte(nil))) + } + + // For proto2 messages, only discard unknown fields in message extensions + // that have been accessed via GetExtension. + if em, err := extendable(m); err == nil { + // Ignore lock since discardLegacy is not concurrency safe. + emm, _ := em.extensionsRead() + for _, mx := range emm { + if m, ok := mx.value.(Message); ok { + discardLegacy(m) + } + } + } +} diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go index 8b84d1b22d4c..3abfed2cff04 100644 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -37,28 +37,9 @@ package proto import ( "errors" - "fmt" "reflect" - "sort" ) -// RequiredNotSetError is the error returned if Marshal is called with -// a protocol buffer struct whose required fields have not -// all been initialized. It is also the error returned if Unmarshal is -// called with an encoded protocol buffer that does not include all the -// required fields. -// -// When printed, RequiredNotSetError reports the first unset required field in a -// message. If the field cannot be precisely determined, it is reported as -// "{Unknown}". -type RequiredNotSetError struct { - field string -} - -func (e *RequiredNotSetError) Error() string { - return fmt.Sprintf("proto: required field %q not set", e.field) -} - var ( // errRepeatedHasNil is the error returned if Marshal is called with // a struct with a repeated field containing a nil element. @@ -82,10 +63,6 @@ var ( const maxVarintBytes = 10 // maximum length of a varint -// maxMarshalSize is the largest allowed size of an encoded protobuf, -// since C++ and Java use signed int32s for the size. -const maxMarshalSize = 1<<31 - 1 - // EncodeVarint returns the varint encoding of x. // This is the format for the // int32, int64, uint32, uint64, bool, and enum @@ -119,18 +96,27 @@ func (p *Buffer) EncodeVarint(x uint64) error { // SizeVarint returns the varint encoding size of an integer. func SizeVarint(x uint64) int { - return sizeVarint(x) -} - -func sizeVarint(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + switch { + case x < 1<<7: + return 1 + case x < 1<<14: + return 2 + case x < 1<<21: + return 3 + case x < 1<<28: + return 4 + case x < 1<<35: + return 5 + case x < 1<<42: + return 6 + case x < 1<<49: + return 7 + case x < 1<<56: + return 8 + case x < 1<<63: + return 9 + } + return 10 } // EncodeFixed64 writes a 64-bit integer to the Buffer. @@ -149,10 +135,6 @@ func (p *Buffer) EncodeFixed64(x uint64) error { return nil } -func sizeFixed64(x uint64) int { - return 8 -} - // EncodeFixed32 writes a 32-bit integer to the Buffer. // This is the format for the // fixed32, sfixed32, and float protocol buffer types. @@ -165,20 +147,12 @@ func (p *Buffer) EncodeFixed32(x uint64) error { return nil } -func sizeFixed32(x uint64) int { - return 4 -} - // EncodeZigzag64 writes a zigzag-encoded 64-bit integer // to the Buffer. // This is the format used for the sint64 protocol buffer type. func (p *Buffer) EncodeZigzag64(x uint64) error { // use signed number to get arithmetic right shift. - return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63))) -} - -func sizeZigzag64(x uint64) int { - return sizeVarint((x << 1) ^ uint64((int64(x) >> 63))) + return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } // EncodeZigzag32 writes a zigzag-encoded 32-bit integer @@ -189,10 +163,6 @@ func (p *Buffer) EncodeZigzag32(x uint64) error { return p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) } -func sizeZigzag32(x uint64) int { - return sizeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31)))) -} - // EncodeRawBytes writes a count-delimited byte buffer to the Buffer. // This is the format used for the bytes protocol buffer // type and for embedded messages. @@ -202,11 +172,6 @@ func (p *Buffer) EncodeRawBytes(b []byte) error { return nil } -func sizeRawBytes(b []byte) int { - return sizeVarint(uint64(len(b))) + - len(b) -} - // EncodeStringBytes writes an encoded string to the Buffer. // This is the format used for the proto2 string type. func (p *Buffer) EncodeStringBytes(s string) error { @@ -215,319 +180,17 @@ func (p *Buffer) EncodeStringBytes(s string) error { return nil } -func sizeStringBytes(s string) int { - return sizeVarint(uint64(len(s))) + - len(s) -} - // Marshaler is the interface representing objects that can marshal themselves. type Marshaler interface { Marshal() ([]byte, error) } -// Marshal takes the protocol buffer -// and encodes it into the wire format, returning the data. -func Marshal(pb Message) ([]byte, error) { - // Can the object marshal itself? - if m, ok := pb.(Marshaler); ok { - return m.Marshal() - } - p := NewBuffer(nil) - err := p.Marshal(pb) - if p.buf == nil && err == nil { - // Return a non-nil slice on success. - return []byte{}, nil - } - return p.buf, err -} - // EncodeMessage writes the protocol buffer to the Buffer, // prefixed by a varint-encoded length. func (p *Buffer) EncodeMessage(pb Message) error { - t, base, err := getbase(pb) - if structPointer_IsNil(base) { - return ErrNil - } - if err == nil { - var state errorState - err = p.enc_len_struct(GetProperties(t.Elem()), base, &state) - } - return err -} - -// Marshal takes the protocol buffer -// and encodes it into the wire format, writing the result to the -// Buffer. -func (p *Buffer) Marshal(pb Message) error { - // Can the object marshal itself? - if m, ok := pb.(Marshaler); ok { - data, err := m.Marshal() - p.buf = append(p.buf, data...) - return err - } - - t, base, err := getbase(pb) - if structPointer_IsNil(base) { - return ErrNil - } - if err == nil { - err = p.enc_struct(GetProperties(t.Elem()), base) - } - - if collectStats { - (stats).Encode++ // Parens are to work around a goimports bug. - } - - if len(p.buf) > maxMarshalSize { - return ErrTooLarge - } - return err -} - -// Size returns the encoded size of a protocol buffer. -func Size(pb Message) (n int) { - // Can the object marshal itself? If so, Size is slow. - // TODO: add Size to Marshaler, or add a Sizer interface. - if m, ok := pb.(Marshaler); ok { - b, _ := m.Marshal() - return len(b) - } - - t, base, err := getbase(pb) - if structPointer_IsNil(base) { - return 0 - } - if err == nil { - n = size_struct(GetProperties(t.Elem()), base) - } - - if collectStats { - (stats).Size++ // Parens are to work around a goimports bug. - } - - return -} - -// Individual type encoders. - -// Encode a bool. -func (o *Buffer) enc_bool(p *Properties, base structPointer) error { - v := *structPointer_Bool(base, p.field) - if v == nil { - return ErrNil - } - x := 0 - if *v { - x = 1 - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_bool(p *Properties, base structPointer) error { - v := *structPointer_BoolVal(base, p.field) - if !v { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, 1) - return nil -} - -func size_bool(p *Properties, base structPointer) int { - v := *structPointer_Bool(base, p.field) - if v == nil { - return 0 - } - return len(p.tagcode) + 1 // each bool takes exactly one byte -} - -func size_proto3_bool(p *Properties, base structPointer) int { - v := *structPointer_BoolVal(base, p.field) - if !v && !p.oneof { - return 0 - } - return len(p.tagcode) + 1 // each bool takes exactly one byte -} - -// Encode an int32. -func (o *Buffer) enc_int32(p *Properties, base structPointer) error { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return ErrNil - } - x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_int32(p *Properties, base structPointer) error { - v := structPointer_Word32Val(base, p.field) - x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func size_int32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return 0 - } - x := int32(word32_Get(v)) // permit sign extension to use full 64-bit range - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -func size_proto3_int32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32Val(base, p.field) - x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range - if x == 0 && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -// Encode a uint32. -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_uint32(p *Properties, base structPointer) error { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return ErrNil - } - x := word32_Get(v) - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func (o *Buffer) enc_proto3_uint32(p *Properties, base structPointer) error { - v := structPointer_Word32Val(base, p.field) - x := word32Val_Get(v) - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, uint64(x)) - return nil -} - -func size_uint32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32(base, p.field) - if word32_IsNil(v) { - return 0 - } - x := word32_Get(v) - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -func size_proto3_uint32(p *Properties, base structPointer) (n int) { - v := structPointer_Word32Val(base, p.field) - x := word32Val_Get(v) - if x == 0 && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += p.valSize(uint64(x)) - return -} - -// Encode an int64. -func (o *Buffer) enc_int64(p *Properties, base structPointer) error { - v := structPointer_Word64(base, p.field) - if word64_IsNil(v) { - return ErrNil - } - x := word64_Get(v) - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, x) - return nil -} - -func (o *Buffer) enc_proto3_int64(p *Properties, base structPointer) error { - v := structPointer_Word64Val(base, p.field) - x := word64Val_Get(v) - if x == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, x) - return nil -} - -func size_int64(p *Properties, base structPointer) (n int) { - v := structPointer_Word64(base, p.field) - if word64_IsNil(v) { - return 0 - } - x := word64_Get(v) - n += len(p.tagcode) - n += p.valSize(x) - return -} - -func size_proto3_int64(p *Properties, base structPointer) (n int) { - v := structPointer_Word64Val(base, p.field) - x := word64Val_Get(v) - if x == 0 && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += p.valSize(x) - return -} - -// Encode a string. -func (o *Buffer) enc_string(p *Properties, base structPointer) error { - v := *structPointer_String(base, p.field) - if v == nil { - return ErrNil - } - x := *v - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(x) - return nil -} - -func (o *Buffer) enc_proto3_string(p *Properties, base structPointer) error { - v := *structPointer_StringVal(base, p.field) - if v == "" { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(v) - return nil -} - -func size_string(p *Properties, base structPointer) (n int) { - v := *structPointer_String(base, p.field) - if v == nil { - return 0 - } - x := *v - n += len(p.tagcode) - n += sizeStringBytes(x) - return -} - -func size_proto3_string(p *Properties, base structPointer) (n int) { - v := *structPointer_StringVal(base, p.field) - if v == "" && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += sizeStringBytes(v) - return + siz := Size(pb) + p.EncodeVarint(uint64(siz)) + return p.Marshal(pb) } // All protocol buffer fields are nillable, but be careful. @@ -538,825 +201,3 @@ func isNil(v reflect.Value) bool { } return false } - -// Encode a message struct. -func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error { - var state errorState - structp := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(structp) { - return ErrNil - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, err := m.Marshal() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(data) - return state.err - } - - o.buf = append(o.buf, p.tagcode...) - return o.enc_len_struct(p.sprop, structp, &state) -} - -func size_struct_message(p *Properties, base structPointer) int { - structp := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(structp) { - return 0 - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, _ := m.Marshal() - n0 := len(p.tagcode) - n1 := sizeRawBytes(data) - return n0 + n1 - } - - n0 := len(p.tagcode) - n1 := size_struct(p.sprop, structp) - n2 := sizeVarint(uint64(n1)) // size of encoded length - return n0 + n1 + n2 -} - -// Encode a group struct. -func (o *Buffer) enc_struct_group(p *Properties, base structPointer) error { - var state errorState - b := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(b) { - return ErrNil - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) - err := o.enc_struct(p.sprop, b) - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) - return state.err -} - -func size_struct_group(p *Properties, base structPointer) (n int) { - b := structPointer_GetStructPointer(base, p.field) - if structPointer_IsNil(b) { - return 0 - } - - n += sizeVarint(uint64((p.Tag << 3) | WireStartGroup)) - n += size_struct(p.sprop, b) - n += sizeVarint(uint64((p.Tag << 3) | WireEndGroup)) - return -} - -// Encode a slice of bools ([]bool). -func (o *Buffer) enc_slice_bool(p *Properties, base structPointer) error { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return ErrNil - } - for _, x := range s { - o.buf = append(o.buf, p.tagcode...) - v := uint64(0) - if x { - v = 1 - } - p.valEnc(o, v) - } - return nil -} - -func size_slice_bool(p *Properties, base structPointer) int { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return 0 - } - return l * (len(p.tagcode) + 1) // each bool takes exactly one byte -} - -// Encode a slice of bools ([]bool) in packed format. -func (o *Buffer) enc_slice_packed_bool(p *Properties, base structPointer) error { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(l)) // each bool takes exactly one byte - for _, x := range s { - v := uint64(0) - if x { - v = 1 - } - p.valEnc(o, v) - } - return nil -} - -func size_slice_packed_bool(p *Properties, base structPointer) (n int) { - s := *structPointer_BoolSlice(base, p.field) - l := len(s) - if l == 0 { - return 0 - } - n += len(p.tagcode) - n += sizeVarint(uint64(l)) - n += l // each bool takes exactly one byte - return -} - -// Encode a slice of bytes ([]byte). -func (o *Buffer) enc_slice_byte(p *Properties, base structPointer) error { - s := *structPointer_Bytes(base, p.field) - if s == nil { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(s) - return nil -} - -func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error { - s := *structPointer_Bytes(base, p.field) - if len(s) == 0 { - return ErrNil - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(s) - return nil -} - -func size_slice_byte(p *Properties, base structPointer) (n int) { - s := *structPointer_Bytes(base, p.field) - if s == nil && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += sizeRawBytes(s) - return -} - -func size_proto3_slice_byte(p *Properties, base structPointer) (n int) { - s := *structPointer_Bytes(base, p.field) - if len(s) == 0 && !p.oneof { - return 0 - } - n += len(p.tagcode) - n += sizeRawBytes(s) - return -} - -// Encode a slice of int32s ([]int32). -func (o *Buffer) enc_slice_int32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - p.valEnc(o, uint64(x)) - } - return nil -} - -func size_slice_int32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - n += p.valSize(uint64(x)) - } - return -} - -// Encode a slice of int32s ([]int32) in packed format. -func (o *Buffer) enc_slice_packed_int32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - p.valEnc(buf, uint64(x)) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_int32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - x := int32(s.Index(i)) // permit sign extension to use full 64-bit range - bufSize += p.valSize(uint64(x)) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of uint32s ([]uint32). -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_slice_uint32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - x := s.Index(i) - p.valEnc(o, uint64(x)) - } - return nil -} - -func size_slice_uint32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - x := s.Index(i) - n += p.valSize(uint64(x)) - } - return -} - -// Encode a slice of uint32s ([]uint32) in packed format. -// Exactly the same as int32, except for no sign extension. -func (o *Buffer) enc_slice_packed_uint32(p *Properties, base structPointer) error { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - p.valEnc(buf, uint64(s.Index(i))) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_uint32(p *Properties, base structPointer) (n int) { - s := structPointer_Word32Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - bufSize += p.valSize(uint64(s.Index(i))) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of int64s ([]int64). -func (o *Buffer) enc_slice_int64(p *Properties, base structPointer) error { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - p.valEnc(o, s.Index(i)) - } - return nil -} - -func size_slice_int64(p *Properties, base structPointer) (n int) { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - for i := 0; i < l; i++ { - n += len(p.tagcode) - n += p.valSize(s.Index(i)) - } - return -} - -// Encode a slice of int64s ([]int64) in packed format. -func (o *Buffer) enc_slice_packed_int64(p *Properties, base structPointer) error { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return ErrNil - } - // TODO: Reuse a Buffer. - buf := NewBuffer(nil) - for i := 0; i < l; i++ { - p.valEnc(buf, s.Index(i)) - } - - o.buf = append(o.buf, p.tagcode...) - o.EncodeVarint(uint64(len(buf.buf))) - o.buf = append(o.buf, buf.buf...) - return nil -} - -func size_slice_packed_int64(p *Properties, base structPointer) (n int) { - s := structPointer_Word64Slice(base, p.field) - l := s.Len() - if l == 0 { - return 0 - } - var bufSize int - for i := 0; i < l; i++ { - bufSize += p.valSize(s.Index(i)) - } - - n += len(p.tagcode) - n += sizeVarint(uint64(bufSize)) - n += bufSize - return -} - -// Encode a slice of slice of bytes ([][]byte). -func (o *Buffer) enc_slice_slice_byte(p *Properties, base structPointer) error { - ss := *structPointer_BytesSlice(base, p.field) - l := len(ss) - if l == 0 { - return ErrNil - } - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(ss[i]) - } - return nil -} - -func size_slice_slice_byte(p *Properties, base structPointer) (n int) { - ss := *structPointer_BytesSlice(base, p.field) - l := len(ss) - if l == 0 { - return 0 - } - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - n += sizeRawBytes(ss[i]) - } - return -} - -// Encode a slice of strings ([]string). -func (o *Buffer) enc_slice_string(p *Properties, base structPointer) error { - ss := *structPointer_StringSlice(base, p.field) - l := len(ss) - for i := 0; i < l; i++ { - o.buf = append(o.buf, p.tagcode...) - o.EncodeStringBytes(ss[i]) - } - return nil -} - -func size_slice_string(p *Properties, base structPointer) (n int) { - ss := *structPointer_StringSlice(base, p.field) - l := len(ss) - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - n += sizeStringBytes(ss[i]) - } - return -} - -// Encode a slice of message structs ([]*struct). -func (o *Buffer) enc_slice_struct_message(p *Properties, base structPointer) error { - var state errorState - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - for i := 0; i < l; i++ { - structp := s.Index(i) - if structPointer_IsNil(structp) { - return errRepeatedHasNil - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, err := m.Marshal() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - o.buf = append(o.buf, p.tagcode...) - o.EncodeRawBytes(data) - continue - } - - o.buf = append(o.buf, p.tagcode...) - err := o.enc_len_struct(p.sprop, structp, &state) - if err != nil && !state.shouldContinue(err, nil) { - if err == ErrNil { - return errRepeatedHasNil - } - return err - } - } - return state.err -} - -func size_slice_struct_message(p *Properties, base structPointer) (n int) { - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - n += l * len(p.tagcode) - for i := 0; i < l; i++ { - structp := s.Index(i) - if structPointer_IsNil(structp) { - return // return the size up to this point - } - - // Can the object marshal itself? - if p.isMarshaler { - m := structPointer_Interface(structp, p.stype).(Marshaler) - data, _ := m.Marshal() - n += sizeRawBytes(data) - continue - } - - n0 := size_struct(p.sprop, structp) - n1 := sizeVarint(uint64(n0)) // size of encoded length - n += n0 + n1 - } - return -} - -// Encode a slice of group structs ([]*struct). -func (o *Buffer) enc_slice_struct_group(p *Properties, base structPointer) error { - var state errorState - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - for i := 0; i < l; i++ { - b := s.Index(i) - if structPointer_IsNil(b) { - return errRepeatedHasNil - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireStartGroup)) - - err := o.enc_struct(p.sprop, b) - - if err != nil && !state.shouldContinue(err, nil) { - if err == ErrNil { - return errRepeatedHasNil - } - return err - } - - o.EncodeVarint(uint64((p.Tag << 3) | WireEndGroup)) - } - return state.err -} - -func size_slice_struct_group(p *Properties, base structPointer) (n int) { - s := structPointer_StructPointerSlice(base, p.field) - l := s.Len() - - n += l * sizeVarint(uint64((p.Tag<<3)|WireStartGroup)) - n += l * sizeVarint(uint64((p.Tag<<3)|WireEndGroup)) - for i := 0; i < l; i++ { - b := s.Index(i) - if structPointer_IsNil(b) { - return // return size up to this point - } - - n += size_struct(p.sprop, b) - } - return -} - -// Encode an extension map. -func (o *Buffer) enc_map(p *Properties, base structPointer) error { - exts := structPointer_ExtMap(base, p.field) - if err := encodeExtensionsMap(*exts); err != nil { - return err - } - - return o.enc_map_body(*exts) -} - -func (o *Buffer) enc_exts(p *Properties, base structPointer) error { - exts := structPointer_Extensions(base, p.field) - - v, mu := exts.extensionsRead() - if v == nil { - return nil - } - - mu.Lock() - defer mu.Unlock() - if err := encodeExtensionsMap(v); err != nil { - return err - } - - return o.enc_map_body(v) -} - -func (o *Buffer) enc_map_body(v map[int32]Extension) error { - // Fast-path for common cases: zero or one extensions. - if len(v) <= 1 { - for _, e := range v { - o.buf = append(o.buf, e.enc...) - } - return nil - } - - // Sort keys to provide a deterministic encoding. - keys := make([]int, 0, len(v)) - for k := range v { - keys = append(keys, int(k)) - } - sort.Ints(keys) - - for _, k := range keys { - o.buf = append(o.buf, v[int32(k)].enc...) - } - return nil -} - -func size_map(p *Properties, base structPointer) int { - v := structPointer_ExtMap(base, p.field) - return extensionsMapSize(*v) -} - -func size_exts(p *Properties, base structPointer) int { - v := structPointer_Extensions(base, p.field) - return extensionsSize(v) -} - -// Encode a map field. -func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { - var state errorState // XXX: or do we need to plumb this through? - - /* - A map defined as - map map_field = N; - is encoded in the same way as - message MapFieldEntry { - key_type key = 1; - value_type value = 2; - } - repeated MapFieldEntry map_field = N; - */ - - v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V - if v.Len() == 0 { - return nil - } - - keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) - - enc := func() error { - if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { - return err - } - if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil { - return err - } - return nil - } - - // Don't sort map keys. It is not required by the spec, and C++ doesn't do it. - for _, key := range v.MapKeys() { - val := v.MapIndex(key) - - keycopy.Set(key) - valcopy.Set(val) - - o.buf = append(o.buf, p.tagcode...) - if err := o.enc_len_thing(enc, &state); err != nil { - return err - } - } - return nil -} - -func size_new_map(p *Properties, base structPointer) int { - v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V - - keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) - - n := 0 - for _, key := range v.MapKeys() { - val := v.MapIndex(key) - keycopy.Set(key) - valcopy.Set(val) - - // Tag codes for key and val are the responsibility of the sub-sizer. - keysize := p.mkeyprop.size(p.mkeyprop, keybase) - valsize := p.mvalprop.size(p.mvalprop, valbase) - entry := keysize + valsize - // Add on tag code and length of map entry itself. - n += len(p.tagcode) + sizeVarint(uint64(entry)) + entry - } - return n -} - -// mapEncodeScratch returns a new reflect.Value matching the map's value type, -// and a structPointer suitable for passing to an encoder or sizer. -func mapEncodeScratch(mapType reflect.Type) (keycopy, valcopy reflect.Value, keybase, valbase structPointer) { - // Prepare addressable doubly-indirect placeholders for the key and value types. - // This is needed because the element-type encoders expect **T, but the map iteration produces T. - - keycopy = reflect.New(mapType.Key()).Elem() // addressable K - keyptr := reflect.New(reflect.PtrTo(keycopy.Type())).Elem() // addressable *K - keyptr.Set(keycopy.Addr()) // - keybase = toStructPointer(keyptr.Addr()) // **K - - // Value types are more varied and require special handling. - switch mapType.Elem().Kind() { - case reflect.Slice: - // []byte - var dummy []byte - valcopy = reflect.ValueOf(&dummy).Elem() // addressable []byte - valbase = toStructPointer(valcopy.Addr()) - case reflect.Ptr: - // message; the generated field type is map[K]*Msg (so V is *Msg), - // so we only need one level of indirection. - valcopy = reflect.New(mapType.Elem()).Elem() // addressable V - valbase = toStructPointer(valcopy.Addr()) - default: - // everything else - valcopy = reflect.New(mapType.Elem()).Elem() // addressable V - valptr := reflect.New(reflect.PtrTo(valcopy.Type())).Elem() // addressable *V - valptr.Set(valcopy.Addr()) // - valbase = toStructPointer(valptr.Addr()) // **V - } - return -} - -// Encode a struct. -func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { - var state errorState - // Encode fields in tag order so that decoders may use optimizations - // that depend on the ordering. - // https://developers.google.com/protocol-buffers/docs/encoding#order - for _, i := range prop.order { - p := prop.Prop[i] - if p.enc != nil { - err := p.enc(o, p, base) - if err != nil { - if err == ErrNil { - if p.Required && state.err == nil { - state.err = &RequiredNotSetError{p.Name} - } - } else if err == errRepeatedHasNil { - // Give more context to nil values in repeated fields. - return errors.New("repeated field " + p.OrigName + " has nil element") - } else if !state.shouldContinue(err, p) { - return err - } - } - if len(o.buf) > maxMarshalSize { - return ErrTooLarge - } - } - } - - // Do oneof fields. - if prop.oneofMarshaler != nil { - m := structPointer_Interface(base, prop.stype).(Message) - if err := prop.oneofMarshaler(m, o); err == ErrNil { - return errOneofHasNil - } else if err != nil { - return err - } - } - - // Add unrecognized fields at the end. - if prop.unrecField.IsValid() { - v := *structPointer_Bytes(base, prop.unrecField) - if len(o.buf)+len(v) > maxMarshalSize { - return ErrTooLarge - } - if len(v) > 0 { - o.buf = append(o.buf, v...) - } - } - - return state.err -} - -func size_struct(prop *StructProperties, base structPointer) (n int) { - for _, i := range prop.order { - p := prop.Prop[i] - if p.size != nil { - n += p.size(p, base) - } - } - - // Add unrecognized fields at the end. - if prop.unrecField.IsValid() { - v := *structPointer_Bytes(base, prop.unrecField) - n += len(v) - } - - // Factor in any oneof fields. - if prop.oneofSizer != nil { - m := structPointer_Interface(base, prop.stype).(Message) - n += prop.oneofSizer(m) - } - - return -} - -var zeroes [20]byte // longer than any conceivable sizeVarint - -// Encode a struct, preceded by its encoded length (as a varint). -func (o *Buffer) enc_len_struct(prop *StructProperties, base structPointer, state *errorState) error { - return o.enc_len_thing(func() error { return o.enc_struct(prop, base) }, state) -} - -// Encode something, preceded by its encoded length (as a varint). -func (o *Buffer) enc_len_thing(enc func() error, state *errorState) error { - iLen := len(o.buf) - o.buf = append(o.buf, 0, 0, 0, 0) // reserve four bytes for length - iMsg := len(o.buf) - err := enc() - if err != nil && !state.shouldContinue(err, nil) { - return err - } - lMsg := len(o.buf) - iMsg - lLen := sizeVarint(uint64(lMsg)) - switch x := lLen - (iMsg - iLen); { - case x > 0: // actual length is x bytes larger than the space we reserved - // Move msg x bytes right. - o.buf = append(o.buf, zeroes[:x]...) - copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) - case x < 0: // actual length is x bytes smaller than the space we reserved - // Move msg x bytes left. - copy(o.buf[iMsg+x:], o.buf[iMsg:iMsg+lMsg]) - o.buf = o.buf[:len(o.buf)+x] // x is negative - } - // Encode the length in the reserved space. - o.buf = o.buf[:iLen] - o.EncodeVarint(uint64(lMsg)) - o.buf = o.buf[:len(o.buf)+lMsg] - return state.err -} - -// errorState maintains the first error that occurs and updates that error -// with additional context. -type errorState struct { - err error -} - -// shouldContinue reports whether encoding should continue upon encountering the -// given error. If the error is RequiredNotSetError, shouldContinue returns true -// and, if this is the first appearance of that error, remembers it for future -// reporting. -// -// If prop is not nil, it may update any error with additional context about the -// field with the error. -func (s *errorState) shouldContinue(err error, prop *Properties) bool { - // Ignore unset required fields. - reqNotSet, ok := err.(*RequiredNotSetError) - if !ok { - return false - } - if s.err == nil { - if prop != nil { - err = &RequiredNotSetError{prop.Name + "." + reqNotSet.field} - } - s.err = err - } - return true -} diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go index 2ed1cf596664..f9b6e41b3c10 100644 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ b/vendor/github.com/golang/protobuf/proto/equal.go @@ -109,15 +109,6 @@ func equalStruct(v1, v2 reflect.Value) bool { // set/unset mismatch return false } - b1, ok := f1.Interface().(raw) - if ok { - b2 := f2.Interface().(raw) - // RawMessage - if !bytes.Equal(b1.Bytes(), b2.Bytes()) { - return false - } - continue - } f1, f2 = f1.Elem(), f2.Elem() } if !equalAny(f1, f2, sprop.Prop[i]) { @@ -146,11 +137,7 @@ func equalStruct(v1, v2 reflect.Value) bool { u1 := uf.Bytes() u2 := v2.FieldByName("XXX_unrecognized").Bytes() - if !bytes.Equal(u1, u2) { - return false - } - - return true + return bytes.Equal(u1, u2) } // v1 and v2 are known to have the same type. @@ -259,7 +246,17 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { return false } - m1, m2 := e1.value, e2.value + m1 := extensionAsLegacyType(e1.value) + m2 := extensionAsLegacyType(e2.value) + + if m1 == nil && m2 == nil { + // Both have only encoded form. + if bytes.Equal(e1.enc, e2.enc) { + continue + } + // The bytes are different, but the extensions might still be + // equal. We need to decode them to compare. + } if m1 != nil && m2 != nil { // Both are unencoded. @@ -276,8 +273,12 @@ func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { desc = m[extNum] } if desc == nil { + // If both have only encoded form and the bytes are the same, + // it is handled above. We get here when the bytes are different. + // We don't know how to decode it, so just compare them as byte + // slices. log.Printf("proto: don't know how to compare extension %d of %v", extNum, base) - continue + return false } var err error if m1 == nil { diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go index eaad21831263..fa88add30a41 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -38,6 +38,7 @@ package proto import ( "errors" "fmt" + "io" "reflect" "strconv" "sync" @@ -91,14 +92,29 @@ func (n notLocker) Unlock() {} // extendable returns the extendableProto interface for the given generated proto message. // If the proto message has the old extension format, it returns a wrapper that implements // the extendableProto interface. -func extendable(p interface{}) (extendableProto, bool) { - if ep, ok := p.(extendableProto); ok { - return ep, ok - } - if ep, ok := p.(extendableProtoV1); ok { - return extensionAdapter{ep}, ok +func extendable(p interface{}) (extendableProto, error) { + switch p := p.(type) { + case extendableProto: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return p, nil + case extendableProtoV1: + if isNilPtr(p) { + return nil, fmt.Errorf("proto: nil %T is not extendable", p) + } + return extensionAdapter{p}, nil } - return nil, false + // Don't allocate a specific error containing %T: + // this is the hot path for Clone and MarshalText. + return nil, errNotExtendable +} + +var errNotExtendable = errors.New("proto: not an extendable proto.Message") + +func isNilPtr(x interface{}) bool { + v := reflect.ValueOf(x) + return v.Kind() == reflect.Ptr && v.IsNil() } // XXX_InternalExtensions is an internal representation of proto extensions. @@ -143,9 +159,6 @@ func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Loc return e.p.extensionMap, &e.p.mu } -var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem() -var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem() - // ExtensionDesc represents an extension specification. // Used in generated code from the protocol compiler. type ExtensionDesc struct { @@ -172,15 +185,31 @@ type Extension struct { // extension will have only enc set. When such an extension is // accessed using GetExtension (or GetExtensions) desc and value // will be set. - desc *ExtensionDesc + desc *ExtensionDesc + + // value is a concrete value for the extension field. Let the type of + // desc.ExtensionType be the "API type" and the type of Extension.value + // be the "storage type". The API type and storage type are the same except: + // * For scalars (except []byte), the API type uses *T, + // while the storage type uses T. + // * For repeated fields, the API type uses []T, while the storage type + // uses *[]T. + // + // The reason for the divergence is so that the storage type more naturally + // matches what is expected of when retrieving the values through the + // protobuf reflection APIs. + // + // The value may only be populated if desc is also populated. value interface{} - enc []byte + + // enc is the raw bytes for the extension field. + enc []byte } // SetRawExtension is for testing only. func SetRawExtension(base Message, id int32, b []byte) { - epb, ok := extendable(base) - if !ok { + epb, err := extendable(base) + if err != nil { return } extmap := epb.extensionsWrite() @@ -205,7 +234,7 @@ func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { pbi = ea.extendableProtoV1 } if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { - return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String()) + return fmt.Errorf("proto: bad extended type; %v does not extend %v", b, a) } // Check the range. if !isExtensionField(pb, extension.Field) { @@ -250,85 +279,11 @@ func extensionProperties(ed *ExtensionDesc) *Properties { return prop } -// encode encodes any unmarshaled (unencoded) extensions in e. -func encodeExtensions(e *XXX_InternalExtensions) error { - m, mu := e.extensionsRead() - if m == nil { - return nil // fast path - } - mu.Lock() - defer mu.Unlock() - return encodeExtensionsMap(m) -} - -// encode encodes any unmarshaled (unencoded) extensions in e. -func encodeExtensionsMap(m map[int32]Extension) error { - for k, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - et := reflect.TypeOf(e.desc.ExtensionType) - props := extensionProperties(e.desc) - - p := NewBuffer(nil) - // If e.value has type T, the encoder expects a *struct{ X T }. - // Pass a *T with a zero field and hope it all works out. - x := reflect.New(et) - x.Elem().Set(reflect.ValueOf(e.value)) - if err := props.enc(p, props, toStructPointer(x)); err != nil { - return err - } - e.enc = p.buf - m[k] = e - } - return nil -} - -func extensionsSize(e *XXX_InternalExtensions) (n int) { - m, mu := e.extensionsRead() - if m == nil { - return 0 - } - mu.Lock() - defer mu.Unlock() - return extensionsMapSize(m) -} - -func extensionsMapSize(m map[int32]Extension) (n int) { - for _, e := range m { - if e.value == nil || e.desc == nil { - // Extension is only in its encoded form. - n += len(e.enc) - continue - } - - // We don't skip extensions that have an encoded form set, - // because the extension value may have been mutated after - // the last time this function was called. - - et := reflect.TypeOf(e.desc.ExtensionType) - props := extensionProperties(e.desc) - - // If e.value has type T, the encoder expects a *struct{ X T }. - // Pass a *T with a zero field and hope it all works out. - x := reflect.New(et) - x.Elem().Set(reflect.ValueOf(e.value)) - n += props.size(props, toStructPointer(x)) - } - return -} - // HasExtension returns whether the given extension is present in pb. func HasExtension(pb Message, extension *ExtensionDesc) bool { // TODO: Check types, field numbers, etc.? - epb, ok := extendable(pb) - if !ok { + epb, err := extendable(pb) + if err != nil { return false } extmap, mu := epb.extensionsRead() @@ -336,15 +291,15 @@ func HasExtension(pb Message, extension *ExtensionDesc) bool { return false } mu.Lock() - _, ok = extmap[extension.Field] + _, ok := extmap[extension.Field] mu.Unlock() return ok } // ClearExtension removes the given extension from pb. func ClearExtension(pb Message, extension *ExtensionDesc) { - epb, ok := extendable(pb) - if !ok { + epb, err := extendable(pb) + if err != nil { return } // TODO: Check types, field numbers, etc.? @@ -352,16 +307,26 @@ func ClearExtension(pb Message, extension *ExtensionDesc) { delete(extmap, extension.Field) } -// GetExtension parses and returns the given extension of pb. -// If the extension is not present and has no default value it returns ErrMissingExtension. +// GetExtension retrieves a proto2 extended field from pb. +// +// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil), +// then GetExtension parses the encoded field and returns a Go value of the specified type. +// If the field is not present, then the default value is returned (if one is specified), +// otherwise ErrMissingExtension is reported. +// +// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil), +// then GetExtension returns the raw encoded bytes of the field extension. func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { - epb, ok := extendable(pb) - if !ok { - return nil, errors.New("proto: not an extendable proto") + epb, err := extendable(pb) + if err != nil { + return nil, err } - if err := checkExtensionTypes(epb, extension); err != nil { - return nil, err + if extension.ExtendedType != nil { + // can only check type if this is a complete descriptor + if err := checkExtensionTypes(epb, extension); err != nil { + return nil, err + } } emap, mu := epb.extensionsRead() @@ -385,7 +350,12 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { // descriptors with the same field number. return nil, errors.New("proto: descriptor conflict") } - return e.value, nil + return extensionAsLegacyType(e.value), nil + } + + if extension.ExtensionType == nil { + // incomplete descriptor + return e.enc, nil } v, err := decodeExtension(e.enc, extension) @@ -395,16 +365,21 @@ func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { // Remember the decoded version and drop the encoded version. // That way it is safe to mutate what we return. - e.value = v + e.value = extensionAsStorageType(v) e.desc = extension e.enc = nil emap[extension.Field] = e - return e.value, nil + return extensionAsLegacyType(e.value), nil } // defaultExtensionValue returns the default value for extension. // If no default for an extension is defined ErrMissingExtension is returned. func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { + if extension.ExtensionType == nil { + // incomplete descriptor, so no default + return nil, ErrMissingExtension + } + t := reflect.TypeOf(extension.ExtensionType) props := extensionProperties(extension) @@ -439,31 +414,28 @@ func defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) { // decodeExtension decodes an extension encoded in b. func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { - o := NewBuffer(b) - t := reflect.TypeOf(extension.ExtensionType) - - props := extensionProperties(extension) + unmarshal := typeUnmarshaler(t, extension.Tag) // t is a pointer to a struct, pointer to basic type or a slice. - // Allocate a "field" to store the pointer/slice itself; the - // pointer/slice will be stored here. We pass - // the address of this field to props.dec. - // This passes a zero field and a *t and lets props.dec - // interpret it as a *struct{ x t }. + // Allocate space to store the pointer/slice. value := reflect.New(t).Elem() + var err error for { - // Discard wire type and field number varint. It isn't needed. - if _, err := o.DecodeVarint(); err != nil { - return nil, err + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF } + b = b[n:] + wire := int(x) & 7 - if err := props.dec(o, props, toStructPointer(value.Addr())); err != nil { + b, err = unmarshal(b, valToPointer(value.Addr()), wire) + if err != nil { return nil, err } - if o.index >= len(o.buf) { + if len(b) == 0 { break } } @@ -473,9 +445,9 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { // GetExtensions returns a slice of the extensions present in pb that are also listed in es. // The returned slice has the same length as es; missing extensions will appear as nil elements. func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, ok := extendable(pb) - if !ok { - return nil, errors.New("proto: not an extendable proto") + epb, err := extendable(pb) + if err != nil { + return nil, err } extensions = make([]interface{}, len(es)) for i, e := range es { @@ -494,9 +466,9 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e // For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing // just the Field field, which defines the extension's field number. func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { - epb, ok := extendable(pb) - if !ok { - return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb) + epb, err := extendable(pb) + if err != nil { + return nil, err } registeredExtensions := RegisteredExtensions(pb) @@ -523,16 +495,16 @@ func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { // SetExtension sets the specified extension of pb to the specified value. func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { - epb, ok := extendable(pb) - if !ok { - return errors.New("proto: not an extendable proto") + epb, err := extendable(pb) + if err != nil { + return err } if err := checkExtensionTypes(epb, extension); err != nil { return err } typ := reflect.TypeOf(extension.ExtensionType) if typ != reflect.TypeOf(value) { - return errors.New("proto: bad extension value type") + return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType) } // nil extension values need to be caught early, because the // encoder can't distinguish an ErrNil due to a nil extension @@ -544,14 +516,14 @@ func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error } extmap := epb.extensionsWrite() - extmap[extension.Field] = Extension{desc: extension, value: value} + extmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)} return nil } // ClearAllExtensions clears all extensions from pb. func ClearAllExtensions(pb Message) { - epb, ok := extendable(pb) - if !ok { + epb, err := extendable(pb) + if err != nil { return } m := epb.extensionsWrite() @@ -585,3 +557,51 @@ func RegisterExtension(desc *ExtensionDesc) { func RegisteredExtensions(pb Message) map[int32]*ExtensionDesc { return extensionMaps[reflect.TypeOf(pb).Elem()] } + +// extensionAsLegacyType converts an value in the storage type as the API type. +// See Extension.value. +func extensionAsLegacyType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + // Represent primitive types as a pointer to the value. + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Slice: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + } + return v +} + +// extensionAsStorageType converts an value in the API type as the storage type. +// See Extension.value. +func extensionAsStorageType(v interface{}) interface{} { + switch rv := reflect.ValueOf(v); rv.Kind() { + case reflect.Ptr: + // Represent slice types as the value itself. + switch rv.Type().Elem().Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + if rv.IsNil() { + v = reflect.Zero(rv.Type().Elem()).Interface() + } else { + v = rv.Elem().Interface() + } + } + case reflect.Slice: + // Represent slice types as a pointer to the value. + if rv.Type().Elem().Kind() != reflect.Uint8 { + rv2 := reflect.New(rv.Type()) + rv2.Elem().Set(rv) + v = rv2.Interface() + } + } + return v +} diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index 1c225504a013..fdd328bb7f54 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -273,32 +273,73 @@ import ( "sync" ) -// Message is implemented by generated protocol buffer messages. -type Message interface { - Reset() - String() string - ProtoMessage() +// RequiredNotSetError is an error type returned by either Marshal or Unmarshal. +// Marshal reports this when a required field is not initialized. +// Unmarshal reports this when a required field is missing from the wire data. +type RequiredNotSetError struct{ field string } + +func (e *RequiredNotSetError) Error() string { + if e.field == "" { + return fmt.Sprintf("proto: required field not set") + } + return fmt.Sprintf("proto: required field %q not set", e.field) +} +func (e *RequiredNotSetError) RequiredNotSet() bool { + return true } -// Stats records allocation details about the protocol buffer encoders -// and decoders. Useful for tuning the library itself. -type Stats struct { - Emalloc uint64 // mallocs in encode - Dmalloc uint64 // mallocs in decode - Encode uint64 // number of encodes - Decode uint64 // number of decodes - Chit uint64 // number of cache hits - Cmiss uint64 // number of cache misses - Size uint64 // number of sizes +type invalidUTF8Error struct{ field string } + +func (e *invalidUTF8Error) Error() string { + if e.field == "" { + return "proto: invalid UTF-8 detected" + } + return fmt.Sprintf("proto: field %q contains invalid UTF-8", e.field) +} +func (e *invalidUTF8Error) InvalidUTF8() bool { + return true } -// Set to true to enable stats collection. -const collectStats = false +// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8. +// This error should not be exposed to the external API as such errors should +// be recreated with the field information. +var errInvalidUTF8 = &invalidUTF8Error{} -var stats Stats +// isNonFatal reports whether the error is either a RequiredNotSet error +// or a InvalidUTF8 error. +func isNonFatal(err error) bool { + if re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() { + return true + } + if re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() { + return true + } + return false +} -// GetStats returns a copy of the global Stats structure. -func GetStats() Stats { return stats } +type nonFatal struct{ E error } + +// Merge merges err into nf and reports whether it was successful. +// Otherwise it returns false for any fatal non-nil errors. +func (nf *nonFatal) Merge(err error) (ok bool) { + if err == nil { + return true // not an error + } + if !isNonFatal(err) { + return false // fatal error + } + if nf.E == nil { + nf.E = err // store first instance of non-fatal error + } + return true +} + +// Message is implemented by generated protocol buffer messages. +type Message interface { + Reset() + String() string + ProtoMessage() +} // A Buffer is a buffer manager for marshaling and unmarshaling // protocol buffers. It may be reused between invocations to @@ -309,16 +350,7 @@ type Buffer struct { buf []byte // encode/decode byte stream index int // read point - // pools of basic types to amortize allocation. - bools []bool - uint32s []uint32 - uint64s []uint64 - - // extra pools, only used with pointer_reflect.go - int32s []int32 - int64s []int64 - float32s []float32 - float64s []float64 + deterministic bool } // NewBuffer allocates a new Buffer and initializes its internal data to @@ -343,6 +375,30 @@ func (p *Buffer) SetBuf(s []byte) { // Bytes returns the contents of the Buffer. func (p *Buffer) Bytes() []byte { return p.buf } +// SetDeterministic sets whether to use deterministic serialization. +// +// Deterministic serialization guarantees that for a given binary, equal +// messages will always be serialized to the same bytes. This implies: +// +// - Repeated serialization of a message will return the same bytes. +// - Different processes of the same binary (which may be executing on +// different machines) will serialize equal messages to the same bytes. +// +// Note that the deterministic serialization is NOT canonical across +// languages. It is not guaranteed to remain stable over time. It is unstable +// across different builds with schema changes due to unknown fields. +// Users who need canonical serialization (e.g., persistent storage in a +// canonical form, fingerprinting, etc.) should define their own +// canonicalization specification and implement their own serializer rather +// than relying on this API. +// +// If deterministic serialization is requested, map entries will be sorted +// by keys in lexographical order. This is an implementation detail and +// subject to change. +func (p *Buffer) SetDeterministic(deterministic bool) { + p.deterministic = deterministic +} + /* * Helper routines for simplifying the creation of optional fields of basic type. */ @@ -831,22 +887,12 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes return sf, false, nil } +// mapKeys returns a sort.Interface to be used for sorting the map keys. // Map fields may have key types of non-float scalars, strings and enums. -// The easiest way to sort them in some deterministic order is to use fmt. -// If this turns out to be inefficient we can always consider other options, -// such as doing a Schwartzian transform. - func mapKeys(vs []reflect.Value) sort.Interface { - s := mapKeySorter{ - vs: vs, - // default Less function: textual comparison - less: func(a, b reflect.Value) bool { - return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface()) - }, - } + s := mapKeySorter{vs: vs} - // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps; - // numeric keys are sorted numerically. + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps. if len(vs) == 0 { return s } @@ -855,6 +901,12 @@ func mapKeys(vs []reflect.Value) sort.Interface { s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } case reflect.Uint32, reflect.Uint64: s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + case reflect.Bool: + s.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true + case reflect.String: + s.less = func(a, b reflect.Value) bool { return a.String() < b.String() } + default: + panic(fmt.Sprintf("unsupported map key type: %v", vs[0].Kind())) } return s @@ -888,10 +940,26 @@ func isProto3Zero(v reflect.Value) bool { return false } -// ProtoPackageIsVersion2 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion2 = true +const ( + // ProtoPackageIsVersion3 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion3 = true + + // ProtoPackageIsVersion2 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion2 = true -// ProtoPackageIsVersion1 is referenced from generated protocol buffer files -// to assert that that code is compatible with this version of the proto package. -const ProtoPackageIsVersion1 = true + // ProtoPackageIsVersion1 is referenced from generated protocol buffer files + // to assert that that code is compatible with this version of the proto package. + ProtoPackageIsVersion1 = true +) + +// InternalMessageInfo is a type used internally by generated .pb.go files. +// This type is not intended to be used by non-generated code. +// This type is not subject to any compatibility guarantee. +type InternalMessageInfo struct { + marshal *marshalInfo + unmarshal *unmarshalInfo + merge *mergeInfo + discard *discardInfo +} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go index fd982decd66e..f48a756761ea 100644 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ b/vendor/github.com/golang/protobuf/proto/message_set.go @@ -36,12 +36,7 @@ package proto */ import ( - "bytes" - "encoding/json" "errors" - "fmt" - "reflect" - "sort" ) // errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. @@ -94,10 +89,7 @@ func (ms *messageSet) find(pb Message) *_MessageSet_Item { } func (ms *messageSet) Has(pb Message) bool { - if ms.find(pb) != nil { - return true - } - return false + return ms.find(pb) != nil } func (ms *messageSet) Unmarshal(pb Message) error { @@ -147,50 +139,9 @@ func skipVarint(buf []byte) []byte { return buf[i+1:] } -// MarshalMessageSet encodes the extension map represented by m in the message set wire format. -// It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - if err := encodeExtensions(exts); err != nil { - return nil, err - } - m, _ = exts.extensionsRead() - case map[int32]Extension: - if err := encodeExtensionsMap(exts); err != nil { - return nil, err - } - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - - // Sort extension IDs to provide a deterministic encoding. - // See also enc_map in encode.go. - ids := make([]int, 0, len(m)) - for id := range m { - ids = append(ids, int(id)) - } - sort.Ints(ids) - - ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))} - for _, id := range ids { - e := m[int32(id)] - // Remove the wire type and field number varint, as well as the length varint. - msg := skipVarint(skipVarint(e.enc)) - - ms.Item = append(ms.Item, &_MessageSet_Item{ - TypeId: Int32(int32(id)), - Message: msg, - }) - } - return Marshal(ms) -} - -// UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. -// It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, exts interface{}) error { +// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. +// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option. +func unmarshalMessageSet(buf []byte, exts interface{}) error { var m map[int32]Extension switch exts := exts.(type) { case *XXX_InternalExtensions: @@ -228,84 +179,3 @@ func UnmarshalMessageSet(buf []byte, exts interface{}) error { } return nil } - -// MarshalMessageSetJSON encodes the extension map represented by m in JSON format. -// It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { - var m map[int32]Extension - switch exts := exts.(type) { - case *XXX_InternalExtensions: - m, _ = exts.extensionsRead() - case map[int32]Extension: - m = exts - default: - return nil, errors.New("proto: not an extension map") - } - var b bytes.Buffer - b.WriteByte('{') - - // Process the map in key order for deterministic output. - ids := make([]int32, 0, len(m)) - for id := range m { - ids = append(ids, id) - } - sort.Sort(int32Slice(ids)) // int32Slice defined in text.go - - for i, id := range ids { - ext := m[id] - if i > 0 { - b.WriteByte(',') - } - - msd, ok := messageSetMap[id] - if !ok { - // Unknown type; we can't render it, so skip it. - continue - } - fmt.Fprintf(&b, `"[%s]":`, msd.name) - - x := ext.value - if x == nil { - x = reflect.New(msd.t.Elem()).Interface() - if err := Unmarshal(ext.enc, x.(Message)); err != nil { - return nil, err - } - } - d, err := json.Marshal(x) - if err != nil { - return nil, err - } - b.Write(d) - } - b.WriteByte('}') - return b.Bytes(), nil -} - -// UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. -// It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { - // Common-case fast path. - if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { - return nil - } - - // This is fairly tricky, and it's not clear that it is needed. - return errors.New("TODO: UnmarshalMessageSetJSON not yet implemented") -} - -// A global registry of types that can be used in a MessageSet. - -var messageSetMap = make(map[int32]messageSetDesc) - -type messageSetDesc struct { - t reflect.Type // pointer to struct - name string -} - -// RegisterMessageSetType is called from the generated code. -func RegisterMessageSetType(m Message, fieldNum int32, name string) { - messageSetMap[fieldNum] = messageSetDesc{ - t: reflect.TypeOf(m), - name: name, - } -} diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go index fb512e2e16dc..94fa9194a882 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build appengine js +// +build purego appengine js // This file contains an implementation of proto field accesses using package reflect. // It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can @@ -38,32 +38,13 @@ package proto import ( - "math" "reflect" + "sync" ) -// A structPointer is a pointer to a struct. -type structPointer struct { - v reflect.Value -} - -// toStructPointer returns a structPointer equivalent to the given reflect value. -// The reflect value must itself be a pointer to a struct. -func toStructPointer(v reflect.Value) structPointer { - return structPointer{v} -} - -// IsNil reports whether p is nil. -func structPointer_IsNil(p structPointer) bool { - return p.v.IsNil() -} +const unsafeAllowed = false -// Interface returns the struct pointer as an interface value. -func structPointer_Interface(p structPointer, _ reflect.Type) interface{} { - return p.v.Interface() -} - -// A field identifies a field in a struct, accessible from a structPointer. +// A field identifies a field in a struct, accessible from a pointer. // In this implementation, a field is identified by the sequence of field indices // passed to reflect's FieldByIndex. type field []int @@ -76,409 +57,304 @@ func toField(f *reflect.StructField) field { // invalidField is an invalid field identifier. var invalidField = field(nil) +// zeroField is a noop when calling pointer.offset. +var zeroField = field([]int{}) + // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { return f != nil } -// field returns the given field in the struct as a reflect value. -func structPointer_field(p structPointer, f field) reflect.Value { - // Special case: an extension map entry with a value of type T - // passes a *T to the struct-handling code with a zero field, - // expecting that it will be treated as equivalent to *struct{ X T }, - // which has the same memory layout. We have to handle that case - // specially, because reflect will panic if we call FieldByIndex on a - // non-struct. - if f == nil { - return p.v.Elem() - } - - return p.v.Elem().FieldByIndex(f) +// The pointer type is for the table-driven decoder. +// The implementation here uses a reflect.Value of pointer type to +// create a generic pointer. In pointer_unsafe.go we use unsafe +// instead of reflect to implement the same (but faster) interface. +type pointer struct { + v reflect.Value } -// ifield returns the given field in the struct as an interface value. -func structPointer_ifield(p structPointer, f field) interface{} { - return structPointer_field(p, f).Addr().Interface() +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + return pointer{v: reflect.ValueOf(*i)} } -// Bytes returns the address of a []byte field in the struct. -func structPointer_Bytes(p structPointer, f field) *[]byte { - return structPointer_ifield(p, f).(*[]byte) +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr, deref bool) pointer { + v := reflect.ValueOf(*i) + u := reflect.New(v.Type()) + u.Elem().Set(v) + if deref { + u = u.Elem() + } + return pointer{v: u} } -// BytesSlice returns the address of a [][]byte field in the struct. -func structPointer_BytesSlice(p structPointer, f field) *[][]byte { - return structPointer_ifield(p, f).(*[][]byte) +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{v: v} } -// Bool returns the address of a *bool field in the struct. -func structPointer_Bool(p structPointer, f field) **bool { - return structPointer_ifield(p, f).(**bool) +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + return pointer{v: p.v.Elem().FieldByIndex(f).Addr()} } -// BoolVal returns the address of a bool field in the struct. -func structPointer_BoolVal(p structPointer, f field) *bool { - return structPointer_ifield(p, f).(*bool) +func (p pointer) isNil() bool { + return p.v.IsNil() } -// BoolSlice returns the address of a []bool field in the struct. -func structPointer_BoolSlice(p structPointer, f field) *[]bool { - return structPointer_ifield(p, f).(*[]bool) +// grow updates the slice s in place to make it one element longer. +// s must be addressable. +// Returns the (addressable) new element. +func grow(s reflect.Value) reflect.Value { + n, m := s.Len(), s.Cap() + if n < m { + s.SetLen(n + 1) + } else { + s.Set(reflect.Append(s, reflect.Zero(s.Type().Elem()))) + } + return s.Index(n) } -// String returns the address of a *string field in the struct. -func structPointer_String(p structPointer, f field) **string { - return structPointer_ifield(p, f).(**string) +func (p pointer) toInt64() *int64 { + return p.v.Interface().(*int64) } - -// StringVal returns the address of a string field in the struct. -func structPointer_StringVal(p structPointer, f field) *string { - return structPointer_ifield(p, f).(*string) +func (p pointer) toInt64Ptr() **int64 { + return p.v.Interface().(**int64) } - -// StringSlice returns the address of a []string field in the struct. -func structPointer_StringSlice(p structPointer, f field) *[]string { - return structPointer_ifield(p, f).(*[]string) +func (p pointer) toInt64Slice() *[]int64 { + return p.v.Interface().(*[]int64) } -// Extensions returns the address of an extension map field in the struct. -func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { - return structPointer_ifield(p, f).(*XXX_InternalExtensions) -} +var int32ptr = reflect.TypeOf((*int32)(nil)) -// ExtMap returns the address of an extension map field in the struct. -func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { - return structPointer_ifield(p, f).(*map[int32]Extension) +func (p pointer) toInt32() *int32 { + return p.v.Convert(int32ptr).Interface().(*int32) } -// NewAt returns the reflect.Value for a pointer to a field in the struct. -func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { - return structPointer_field(p, f).Addr() +// The toInt32Ptr/Slice methods don't work because of enums. +// Instead, we must use set/get methods for the int32ptr/slice case. +/* + func (p pointer) toInt32Ptr() **int32 { + return p.v.Interface().(**int32) } - -// SetStructPointer writes a *struct field in the struct. -func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { - structPointer_field(p, f).Set(q.v) + func (p pointer) toInt32Slice() *[]int32 { + return p.v.Interface().(*[]int32) } - -// GetStructPointer reads a *struct field in the struct. -func structPointer_GetStructPointer(p structPointer, f field) structPointer { - return structPointer{structPointer_field(p, f)} +*/ +func (p pointer) getInt32Ptr() *int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().(*int32) + } + // an enum + return p.v.Elem().Convert(int32PtrType).Interface().(*int32) +} +func (p pointer) setInt32Ptr(v int32) { + // Allocate value in a *int32. Possibly convert that to a *enum. + // Then assign it to a **int32 or **enum. + // Note: we can convert *int32 to *enum, but we can't convert + // **int32 to **enum! + p.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem())) +} + +// getInt32Slice copies []int32 from p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getInt32Slice() []int32 { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + return p.v.Elem().Interface().([]int32) + } + // an enum + // Allocate a []int32, then assign []enum's values into it. + // Note: we can't convert []enum to []int32. + slice := p.v.Elem() + s := make([]int32, slice.Len()) + for i := 0; i < slice.Len(); i++ { + s[i] = int32(slice.Index(i).Int()) + } + return s } -// StructPointerSlice the address of a []*struct field in the struct. -func structPointer_StructPointerSlice(p structPointer, f field) structPointerSlice { - return structPointerSlice{structPointer_field(p, f)} +// setInt32Slice copies []int32 into p as a new slice. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setInt32Slice(v []int32) { + if p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) { + // raw int32 type + p.v.Elem().Set(reflect.ValueOf(v)) + return + } + // an enum + // Allocate a []enum, then assign []int32's values into it. + // Note: we can't convert []enum to []int32. + slice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v)) + for i, x := range v { + slice.Index(i).SetInt(int64(x)) + } + p.v.Elem().Set(slice) } - -// A structPointerSlice represents the address of a slice of pointers to structs -// (themselves messages or groups). That is, v.Type() is *[]*struct{...}. -type structPointerSlice struct { - v reflect.Value +func (p pointer) appendInt32Slice(v int32) { + grow(p.v.Elem()).SetInt(int64(v)) } -func (p structPointerSlice) Len() int { return p.v.Len() } -func (p structPointerSlice) Index(i int) structPointer { return structPointer{p.v.Index(i)} } -func (p structPointerSlice) Append(q structPointer) { - p.v.Set(reflect.Append(p.v, q.v)) +func (p pointer) toUint64() *uint64 { + return p.v.Interface().(*uint64) } - -var ( - int32Type = reflect.TypeOf(int32(0)) - uint32Type = reflect.TypeOf(uint32(0)) - float32Type = reflect.TypeOf(float32(0)) - int64Type = reflect.TypeOf(int64(0)) - uint64Type = reflect.TypeOf(uint64(0)) - float64Type = reflect.TypeOf(float64(0)) -) - -// A word32 represents a field of type *int32, *uint32, *float32, or *enum. -// That is, v.Type() is *int32, *uint32, *float32, or *enum and v is assignable. -type word32 struct { - v reflect.Value +func (p pointer) toUint64Ptr() **uint64 { + return p.v.Interface().(**uint64) } - -// IsNil reports whether p is nil. -func word32_IsNil(p word32) bool { - return p.v.IsNil() +func (p pointer) toUint64Slice() *[]uint64 { + return p.v.Interface().(*[]uint64) } - -// Set sets p to point at a newly allocated word with bits set to x. -func word32_Set(p word32, o *Buffer, x uint32) { - t := p.v.Type().Elem() - switch t { - case int32Type: - if len(o.int32s) == 0 { - o.int32s = make([]int32, uint32PoolSize) - } - o.int32s[0] = int32(x) - p.v.Set(reflect.ValueOf(&o.int32s[0])) - o.int32s = o.int32s[1:] - return - case uint32Type: - if len(o.uint32s) == 0 { - o.uint32s = make([]uint32, uint32PoolSize) - } - o.uint32s[0] = x - p.v.Set(reflect.ValueOf(&o.uint32s[0])) - o.uint32s = o.uint32s[1:] - return - case float32Type: - if len(o.float32s) == 0 { - o.float32s = make([]float32, uint32PoolSize) - } - o.float32s[0] = math.Float32frombits(x) - p.v.Set(reflect.ValueOf(&o.float32s[0])) - o.float32s = o.float32s[1:] - return - } - - // must be enum - p.v.Set(reflect.New(t)) - p.v.Elem().SetInt(int64(int32(x))) +func (p pointer) toUint32() *uint32 { + return p.v.Interface().(*uint32) } - -// Get gets the bits pointed at by p, as a uint32. -func word32_Get(p word32) uint32 { - elem := p.v.Elem() - switch elem.Kind() { - case reflect.Int32: - return uint32(elem.Int()) - case reflect.Uint32: - return uint32(elem.Uint()) - case reflect.Float32: - return math.Float32bits(float32(elem.Float())) - } - panic("unreachable") +func (p pointer) toUint32Ptr() **uint32 { + return p.v.Interface().(**uint32) } - -// Word32 returns a reference to a *int32, *uint32, *float32, or *enum field in the struct. -func structPointer_Word32(p structPointer, f field) word32 { - return word32{structPointer_field(p, f)} +func (p pointer) toUint32Slice() *[]uint32 { + return p.v.Interface().(*[]uint32) } - -// A word32Val represents a field of type int32, uint32, float32, or enum. -// That is, v.Type() is int32, uint32, float32, or enum and v is assignable. -type word32Val struct { - v reflect.Value +func (p pointer) toBool() *bool { + return p.v.Interface().(*bool) } - -// Set sets *p to x. -func word32Val_Set(p word32Val, x uint32) { - switch p.v.Type() { - case int32Type: - p.v.SetInt(int64(x)) - return - case uint32Type: - p.v.SetUint(uint64(x)) - return - case float32Type: - p.v.SetFloat(float64(math.Float32frombits(x))) - return - } - - // must be enum - p.v.SetInt(int64(int32(x))) +func (p pointer) toBoolPtr() **bool { + return p.v.Interface().(**bool) } - -// Get gets the bits pointed at by p, as a uint32. -func word32Val_Get(p word32Val) uint32 { - elem := p.v - switch elem.Kind() { - case reflect.Int32: - return uint32(elem.Int()) - case reflect.Uint32: - return uint32(elem.Uint()) - case reflect.Float32: - return math.Float32bits(float32(elem.Float())) - } - panic("unreachable") +func (p pointer) toBoolSlice() *[]bool { + return p.v.Interface().(*[]bool) } - -// Word32Val returns a reference to a int32, uint32, float32, or enum field in the struct. -func structPointer_Word32Val(p structPointer, f field) word32Val { - return word32Val{structPointer_field(p, f)} +func (p pointer) toFloat64() *float64 { + return p.v.Interface().(*float64) } - -// A word32Slice is a slice of 32-bit values. -// That is, v.Type() is []int32, []uint32, []float32, or []enum. -type word32Slice struct { - v reflect.Value +func (p pointer) toFloat64Ptr() **float64 { + return p.v.Interface().(**float64) } - -func (p word32Slice) Append(x uint32) { - n, m := p.v.Len(), p.v.Cap() - if n < m { - p.v.SetLen(n + 1) - } else { - t := p.v.Type().Elem() - p.v.Set(reflect.Append(p.v, reflect.Zero(t))) - } - elem := p.v.Index(n) - switch elem.Kind() { - case reflect.Int32: - elem.SetInt(int64(int32(x))) - case reflect.Uint32: - elem.SetUint(uint64(x)) - case reflect.Float32: - elem.SetFloat(float64(math.Float32frombits(x))) - } +func (p pointer) toFloat64Slice() *[]float64 { + return p.v.Interface().(*[]float64) } - -func (p word32Slice) Len() int { - return p.v.Len() +func (p pointer) toFloat32() *float32 { + return p.v.Interface().(*float32) } - -func (p word32Slice) Index(i int) uint32 { - elem := p.v.Index(i) - switch elem.Kind() { - case reflect.Int32: - return uint32(elem.Int()) - case reflect.Uint32: - return uint32(elem.Uint()) - case reflect.Float32: - return math.Float32bits(float32(elem.Float())) - } - panic("unreachable") +func (p pointer) toFloat32Ptr() **float32 { + return p.v.Interface().(**float32) } - -// Word32Slice returns a reference to a []int32, []uint32, []float32, or []enum field in the struct. -func structPointer_Word32Slice(p structPointer, f field) word32Slice { - return word32Slice{structPointer_field(p, f)} +func (p pointer) toFloat32Slice() *[]float32 { + return p.v.Interface().(*[]float32) } - -// word64 is like word32 but for 64-bit values. -type word64 struct { - v reflect.Value +func (p pointer) toString() *string { + return p.v.Interface().(*string) } - -func word64_Set(p word64, o *Buffer, x uint64) { - t := p.v.Type().Elem() - switch t { - case int64Type: - if len(o.int64s) == 0 { - o.int64s = make([]int64, uint64PoolSize) - } - o.int64s[0] = int64(x) - p.v.Set(reflect.ValueOf(&o.int64s[0])) - o.int64s = o.int64s[1:] - return - case uint64Type: - if len(o.uint64s) == 0 { - o.uint64s = make([]uint64, uint64PoolSize) - } - o.uint64s[0] = x - p.v.Set(reflect.ValueOf(&o.uint64s[0])) - o.uint64s = o.uint64s[1:] - return - case float64Type: - if len(o.float64s) == 0 { - o.float64s = make([]float64, uint64PoolSize) - } - o.float64s[0] = math.Float64frombits(x) - p.v.Set(reflect.ValueOf(&o.float64s[0])) - o.float64s = o.float64s[1:] - return - } - panic("unreachable") +func (p pointer) toStringPtr() **string { + return p.v.Interface().(**string) } - -func word64_IsNil(p word64) bool { - return p.v.IsNil() +func (p pointer) toStringSlice() *[]string { + return p.v.Interface().(*[]string) } - -func word64_Get(p word64) uint64 { - elem := p.v.Elem() - switch elem.Kind() { - case reflect.Int64: - return uint64(elem.Int()) - case reflect.Uint64: - return elem.Uint() - case reflect.Float64: - return math.Float64bits(elem.Float()) - } - panic("unreachable") +func (p pointer) toBytes() *[]byte { + return p.v.Interface().(*[]byte) } - -func structPointer_Word64(p structPointer, f field) word64 { - return word64{structPointer_field(p, f)} +func (p pointer) toBytesSlice() *[][]byte { + return p.v.Interface().(*[][]byte) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return p.v.Interface().(*XXX_InternalExtensions) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return p.v.Interface().(*map[int32]Extension) +} +func (p pointer) getPointer() pointer { + return pointer{v: p.v.Elem()} +} +func (p pointer) setPointer(q pointer) { + p.v.Elem().Set(q.v) +} +func (p pointer) appendPointer(q pointer) { + grow(p.v.Elem()).Set(q.v) } -// word64Val is like word32Val but for 64-bit values. -type word64Val struct { - v reflect.Value +// getPointerSlice copies []*T from p as a new []pointer. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) getPointerSlice() []pointer { + if p.v.IsNil() { + return nil + } + n := p.v.Elem().Len() + s := make([]pointer, n) + for i := 0; i < n; i++ { + s[i] = pointer{v: p.v.Elem().Index(i)} + } + return s } -func word64Val_Set(p word64Val, o *Buffer, x uint64) { - switch p.v.Type() { - case int64Type: - p.v.SetInt(int64(x)) - return - case uint64Type: - p.v.SetUint(x) - return - case float64Type: - p.v.SetFloat(math.Float64frombits(x)) +// setPointerSlice copies []pointer into p as a new []*T. +// This behavior differs from the implementation in pointer_unsafe.go. +func (p pointer) setPointerSlice(v []pointer) { + if v == nil { + p.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem()) return } - panic("unreachable") + s := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v)) + for _, p := range v { + s = reflect.Append(s, p.v) + } + p.v.Elem().Set(s) } -func word64Val_Get(p word64Val) uint64 { - elem := p.v - switch elem.Kind() { - case reflect.Int64: - return uint64(elem.Int()) - case reflect.Uint64: - return elem.Uint() - case reflect.Float64: - return math.Float64bits(elem.Float()) +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + if p.v.Elem().IsNil() { + return pointer{v: p.v.Elem()} } - panic("unreachable") + return pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct } -func structPointer_Word64Val(p structPointer, f field) word64Val { - return word64Val{structPointer_field(p, f)} +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + // TODO: check that p.v.Type().Elem() == t? + return p.v } -type word64Slice struct { - v reflect.Value +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p } - -func (p word64Slice) Append(x uint64) { - n, m := p.v.Len(), p.v.Cap() - if n < m { - p.v.SetLen(n + 1) - } else { - t := p.v.Type().Elem() - p.v.Set(reflect.Append(p.v, reflect.Zero(t))) - } - elem := p.v.Index(n) - switch elem.Kind() { - case reflect.Int64: - elem.SetInt(int64(int64(x))) - case reflect.Uint64: - elem.SetUint(uint64(x)) - case reflect.Float64: - elem.SetFloat(float64(math.Float64frombits(x))) - } +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v } - -func (p word64Slice) Len() int { - return p.v.Len() +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p } - -func (p word64Slice) Index(i int) uint64 { - elem := p.v.Index(i) - switch elem.Kind() { - case reflect.Int64: - return uint64(elem.Int()) - case reflect.Uint64: - return uint64(elem.Uint()) - case reflect.Float64: - return math.Float64bits(float64(elem.Float())) - } - panic("unreachable") +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v } - -func structPointer_Word64Slice(p structPointer, f field) word64Slice { - return word64Slice{structPointer_field(p, f)} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v } +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + atomicLock.Lock() + defer atomicLock.Unlock() + return *p +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomicLock.Lock() + defer atomicLock.Unlock() + *p = v +} + +var atomicLock sync.Mutex diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go index 6b5567d47cd3..dbfffe071b82 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !appengine,!js +// +build !purego,!appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -37,38 +37,13 @@ package proto import ( "reflect" + "sync/atomic" "unsafe" ) -// NOTE: These type_Foo functions would more idiomatically be methods, -// but Go does not allow methods on pointer types, and we must preserve -// some pointer type for the garbage collector. We use these -// funcs with clunky names as our poor approximation to methods. -// -// An alternative would be -// type structPointer struct { p unsafe.Pointer } -// but that does not registerize as well. - -// A structPointer is a pointer to a struct. -type structPointer unsafe.Pointer - -// toStructPointer returns a structPointer equivalent to the given reflect value. -func toStructPointer(v reflect.Value) structPointer { - return structPointer(unsafe.Pointer(v.Pointer())) -} - -// IsNil reports whether p is nil. -func structPointer_IsNil(p structPointer) bool { - return p == nil -} - -// Interface returns the struct pointer, assumed to have element type t, -// as an interface value. -func structPointer_Interface(p structPointer, t reflect.Type) interface{} { - return reflect.NewAt(t, unsafe.Pointer(p)).Interface() -} +const unsafeAllowed = true -// A field identifies a field in a struct, accessible from a structPointer. +// A field identifies a field in a struct, accessible from a pointer. // In this implementation, a field is identified by its byte offset from the start of the struct. type field uintptr @@ -80,191 +55,259 @@ func toField(f *reflect.StructField) field { // invalidField is an invalid field identifier. const invalidField = ^field(0) +// zeroField is a noop when calling pointer.offset. +const zeroField = field(0) + // IsValid reports whether the field identifier is valid. func (f field) IsValid() bool { - return f != ^field(0) + return f != invalidField +} + +// The pointer type below is for the new table-driven encoder/decoder. +// The implementation here uses unsafe.Pointer to create a generic pointer. +// In pointer_reflect.go we use reflect instead of unsafe to implement +// the same (but slower) interface. +type pointer struct { + p unsafe.Pointer +} + +// size of pointer +var ptrSize = unsafe.Sizeof(uintptr(0)) + +// toPointer converts an interface of pointer type to a pointer +// that points to the same target. +func toPointer(i *Message) pointer { + // Super-tricky - read pointer out of data word of interface value. + // Saves ~25ns over the equivalent: + // return valToPointer(reflect.ValueOf(*i)) + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +// toAddrPointer converts an interface to a pointer that points to +// the interface data. +func toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) { + // Super-tricky - read or get the address of data word of interface value. + if isptr { + // The interface is of pointer type, thus it is a direct interface. + // The data word is the pointer data itself. We take its address. + p = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)} + } else { + // The interface is not of pointer type. The data word is the pointer + // to the data. + p = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} + } + if deref { + p.p = *(*unsafe.Pointer)(p.p) + } + return p } -// Bytes returns the address of a []byte field in the struct. -func structPointer_Bytes(p structPointer, f field) *[]byte { - return (*[]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) +// valToPointer converts v to a pointer. v must be of pointer type. +func valToPointer(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} } -// BytesSlice returns the address of a [][]byte field in the struct. -func structPointer_BytesSlice(p structPointer, f field) *[][]byte { - return (*[][]byte)(unsafe.Pointer(uintptr(p) + uintptr(f))) +// offset converts from a pointer to a structure to a pointer to +// one of its fields. +func (p pointer) offset(f field) pointer { + // For safety, we should panic if !f.IsValid, however calling panic causes + // this to no longer be inlineable, which is a serious performance cost. + /* + if !f.IsValid() { + panic("invalid field") + } + */ + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} } -// Bool returns the address of a *bool field in the struct. -func structPointer_Bool(p structPointer, f field) **bool { - return (**bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) isNil() bool { + return p.p == nil } -// BoolVal returns the address of a bool field in the struct. -func structPointer_BoolVal(p structPointer, f field) *bool { - return (*bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toInt64() *int64 { + return (*int64)(p.p) } - -// BoolSlice returns the address of a []bool field in the struct. -func structPointer_BoolSlice(p structPointer, f field) *[]bool { - return (*[]bool)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toInt64Ptr() **int64 { + return (**int64)(p.p) } - -// String returns the address of a *string field in the struct. -func structPointer_String(p structPointer, f field) **string { - return (**string)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toInt64Slice() *[]int64 { + return (*[]int64)(p.p) } - -// StringVal returns the address of a string field in the struct. -func structPointer_StringVal(p structPointer, f field) *string { - return (*string)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toInt32() *int32 { + return (*int32)(p.p) } -// StringSlice returns the address of a []string field in the struct. -func structPointer_StringSlice(p structPointer, f field) *[]string { - return (*[]string)(unsafe.Pointer(uintptr(p) + uintptr(f))) +// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist. +/* + func (p pointer) toInt32Ptr() **int32 { + return (**int32)(p.p) + } + func (p pointer) toInt32Slice() *[]int32 { + return (*[]int32)(p.p) + } +*/ +func (p pointer) getInt32Ptr() *int32 { + return *(**int32)(p.p) } - -// ExtMap returns the address of an extension map field in the struct. -func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { - return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) setInt32Ptr(v int32) { + *(**int32)(p.p) = &v } -func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { - return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f))) +// getInt32Slice loads a []int32 from p. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getInt32Slice() []int32 { + return *(*[]int32)(p.p) } -// NewAt returns the reflect.Value for a pointer to a field in the struct. -func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { - return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f))) +// setInt32Slice stores a []int32 to p. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setInt32Slice(v []int32) { + *(*[]int32)(p.p) = v } -// SetStructPointer writes a *struct field in the struct. -func structPointer_SetStructPointer(p structPointer, f field, q structPointer) { - *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) = q +// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead? +func (p pointer) appendInt32Slice(v int32) { + s := (*[]int32)(p.p) + *s = append(*s, v) } -// GetStructPointer reads a *struct field in the struct. -func structPointer_GetStructPointer(p structPointer, f field) structPointer { - return *(*structPointer)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toUint64() *uint64 { + return (*uint64)(p.p) } - -// StructPointerSlice the address of a []*struct field in the struct. -func structPointer_StructPointerSlice(p structPointer, f field) *structPointerSlice { - return (*structPointerSlice)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toUint64Ptr() **uint64 { + return (**uint64)(p.p) } - -// A structPointerSlice represents a slice of pointers to structs (themselves submessages or groups). -type structPointerSlice []structPointer - -func (v *structPointerSlice) Len() int { return len(*v) } -func (v *structPointerSlice) Index(i int) structPointer { return (*v)[i] } -func (v *structPointerSlice) Append(p structPointer) { *v = append(*v, p) } - -// A word32 is the address of a "pointer to 32-bit value" field. -type word32 **uint32 - -// IsNil reports whether *v is nil. -func word32_IsNil(p word32) bool { - return *p == nil +func (p pointer) toUint64Slice() *[]uint64 { + return (*[]uint64)(p.p) } - -// Set sets *v to point at a newly allocated word set to x. -func word32_Set(p word32, o *Buffer, x uint32) { - if len(o.uint32s) == 0 { - o.uint32s = make([]uint32, uint32PoolSize) - } - o.uint32s[0] = x - *p = &o.uint32s[0] - o.uint32s = o.uint32s[1:] +func (p pointer) toUint32() *uint32 { + return (*uint32)(p.p) } - -// Get gets the value pointed at by *v. -func word32_Get(p word32) uint32 { - return **p +func (p pointer) toUint32Ptr() **uint32 { + return (**uint32)(p.p) } - -// Word32 returns the address of a *int32, *uint32, *float32, or *enum field in the struct. -func structPointer_Word32(p structPointer, f field) word32 { - return word32((**uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) +func (p pointer) toUint32Slice() *[]uint32 { + return (*[]uint32)(p.p) } - -// A word32Val is the address of a 32-bit value field. -type word32Val *uint32 - -// Set sets *p to x. -func word32Val_Set(p word32Val, x uint32) { - *p = x +func (p pointer) toBool() *bool { + return (*bool)(p.p) } - -// Get gets the value pointed at by p. -func word32Val_Get(p word32Val) uint32 { - return *p +func (p pointer) toBoolPtr() **bool { + return (**bool)(p.p) } - -// Word32Val returns the address of a *int32, *uint32, *float32, or *enum field in the struct. -func structPointer_Word32Val(p structPointer, f field) word32Val { - return word32Val((*uint32)(unsafe.Pointer(uintptr(p) + uintptr(f)))) +func (p pointer) toBoolSlice() *[]bool { + return (*[]bool)(p.p) } - -// A word32Slice is a slice of 32-bit values. -type word32Slice []uint32 - -func (v *word32Slice) Append(x uint32) { *v = append(*v, x) } -func (v *word32Slice) Len() int { return len(*v) } -func (v *word32Slice) Index(i int) uint32 { return (*v)[i] } - -// Word32Slice returns the address of a []int32, []uint32, []float32, or []enum field in the struct. -func structPointer_Word32Slice(p structPointer, f field) *word32Slice { - return (*word32Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func (p pointer) toFloat64() *float64 { + return (*float64)(p.p) } - -// word64 is like word32 but for 64-bit values. -type word64 **uint64 - -func word64_Set(p word64, o *Buffer, x uint64) { - if len(o.uint64s) == 0 { - o.uint64s = make([]uint64, uint64PoolSize) - } - o.uint64s[0] = x - *p = &o.uint64s[0] - o.uint64s = o.uint64s[1:] +func (p pointer) toFloat64Ptr() **float64 { + return (**float64)(p.p) } - -func word64_IsNil(p word64) bool { - return *p == nil +func (p pointer) toFloat64Slice() *[]float64 { + return (*[]float64)(p.p) } - -func word64_Get(p word64) uint64 { - return **p +func (p pointer) toFloat32() *float32 { + return (*float32)(p.p) +} +func (p pointer) toFloat32Ptr() **float32 { + return (**float32)(p.p) +} +func (p pointer) toFloat32Slice() *[]float32 { + return (*[]float32)(p.p) +} +func (p pointer) toString() *string { + return (*string)(p.p) +} +func (p pointer) toStringPtr() **string { + return (**string)(p.p) +} +func (p pointer) toStringSlice() *[]string { + return (*[]string)(p.p) +} +func (p pointer) toBytes() *[]byte { + return (*[]byte)(p.p) +} +func (p pointer) toBytesSlice() *[][]byte { + return (*[][]byte)(p.p) +} +func (p pointer) toExtensions() *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(p.p) +} +func (p pointer) toOldExtensions() *map[int32]Extension { + return (*map[int32]Extension)(p.p) } -func structPointer_Word64(p structPointer, f field) word64 { - return word64((**uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) +// getPointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) getPointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) } -// word64Val is like word32Val but for 64-bit values. -type word64Val *uint64 +// setPointerSlice stores []pointer into p as a []*T. +// The value set is aliased with the input slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) setPointerSlice(v []pointer) { + // Super-tricky - p should point to a []*T where T is a + // message type. We store it as []pointer. + *(*[]pointer)(p.p) = v +} -func word64Val_Set(p word64Val, o *Buffer, x uint64) { - *p = x +// getPointer loads the pointer at p and returns it. +func (p pointer) getPointer() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} } -func word64Val_Get(p word64Val) uint64 { - return *p +// setPointer stores the pointer q at p. +func (p pointer) setPointer(q pointer) { + *(*unsafe.Pointer)(p.p) = q.p } -func structPointer_Word64Val(p structPointer, f field) word64Val { - return word64Val((*uint64)(unsafe.Pointer(uintptr(p) + uintptr(f)))) +// append q to the slice pointed to by p. +func (p pointer) appendPointer(q pointer) { + s := (*[]unsafe.Pointer)(p.p) + *s = append(*s, q.p) } -// word64Slice is like word32Slice but for 64-bit values. -type word64Slice []uint64 +// getInterfacePointer returns a pointer that points to the +// interface data of the interface pointed by p. +func (p pointer) getInterfacePointer() pointer { + // Super-tricky - read pointer out of data word of interface value. + return pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]} +} -func (v *word64Slice) Append(x uint64) { *v = append(*v, x) } -func (v *word64Slice) Len() int { return len(*v) } -func (v *word64Slice) Index(i int) uint64 { return (*v)[i] } +// asPointerTo returns a reflect.Value that is a pointer to an +// object of type t stored at p. +func (p pointer) asPointerTo(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} -func structPointer_Word64Slice(p structPointer, f field) *word64Slice { - return (*word64Slice)(unsafe.Pointer(uintptr(p) + uintptr(f))) +func atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo { + return (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo { + return (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadMergeInfo(p **mergeInfo) *mergeInfo { + return (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} +func atomicLoadDiscardInfo(p **discardInfo) *discardInfo { + return (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) } diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index ec2289c0058e..a4b8c0cd3a86 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -38,7 +38,6 @@ package proto import ( "fmt" "log" - "os" "reflect" "sort" "strconv" @@ -58,42 +57,6 @@ const ( WireFixed32 = 5 ) -const startSize = 10 // initial slice/string sizes - -// Encoders are defined in encode.go -// An encoder outputs the full representation of a field, including its -// tag and encoder type. -type encoder func(p *Buffer, prop *Properties, base structPointer) error - -// A valueEncoder encodes a single integer in a particular encoding. -type valueEncoder func(o *Buffer, x uint64) error - -// Sizers are defined in encode.go -// A sizer returns the encoded size of a field, including its tag and encoder -// type. -type sizer func(prop *Properties, base structPointer) int - -// A valueSizer returns the encoded size of a single integer in a particular -// encoding. -type valueSizer func(x uint64) int - -// Decoders are defined in decode.go -// A decoder creates a value from its wire representation. -// Unrecognized subelements are saved in unrec. -type decoder func(p *Buffer, prop *Properties, base structPointer) error - -// A valueDecoder decodes a single integer in a particular encoding. -type valueDecoder func(o *Buffer) (x uint64, err error) - -// A oneofMarshaler does the marshaling for all oneof fields in a message. -type oneofMarshaler func(Message, *Buffer) error - -// A oneofUnmarshaler does the unmarshaling for a oneof field in a message. -type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error) - -// A oneofSizer does the sizing for all oneof fields in a message. -type oneofSizer func(Message) int - // tagMap is an optimization over map[int]int for typical protocol buffer // use-cases. Encoded protocol buffers are often in tag order with small tag // numbers. @@ -140,13 +103,6 @@ type StructProperties struct { decoderTags tagMap // map from proto tag to struct field number decoderOrigNames map[string]int // map from original name to struct field number order []int // list of struct field numbers in tag order - unrecField field // field id of the XXX_unrecognized []byte field - extendable bool // is this an extendable proto - - oneofMarshaler oneofMarshaler - oneofUnmarshaler oneofUnmarshaler - oneofSizer oneofSizer - stype reflect.Type // OneofTypes contains information about the oneof fields in this message. // It is keyed by the original name of a field. @@ -182,41 +138,24 @@ type Properties struct { Repeated bool Packed bool // relevant for repeated primitives only Enum string // set for enum types only - proto3 bool // whether this is known to be a proto3 field; set for []byte only + proto3 bool // whether this is known to be a proto3 field oneof bool // whether this is a oneof field Default string // default value HasDefault bool // whether an explicit default was provided - def_uint64 uint64 - - enc encoder - valEnc valueEncoder // set for bool and numeric types only - field field - tagcode []byte // encoding of EncodeVarint((Tag<<3)|WireType) - tagbuf [8]byte - stype reflect.Type // set for struct types only - sprop *StructProperties // set for struct types only - isMarshaler bool - isUnmarshaler bool - - mtype reflect.Type // set for map types only - mkeyprop *Properties // set for map types only - mvalprop *Properties // set for map types only - - size sizer - valSize valueSizer // set for bool and numeric types only - - dec decoder - valDec valueDecoder // set for bool and numeric types only - - // If this is a packable field, this will be the decoder for the packed version of the field. - packedDec decoder + + stype reflect.Type // set for struct types only + sprop *StructProperties // set for struct types only + + mtype reflect.Type // set for map types only + MapKeyProp *Properties // set for map types only + MapValProp *Properties // set for map types only } // String formats the properties in the protobuf struct field tag style. func (p *Properties) String() string { s := p.Wire - s = "," + s += "," s += strconv.Itoa(p.Tag) if p.Required { s += ",req" @@ -254,7 +193,7 @@ func (p *Properties) Parse(s string) { // "bytes,49,opt,name=foo,def=hello!" fields := strings.Split(s, ",") // breaks def=, but handled below. if len(fields) < 2 { - fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s) + log.Printf("proto: tag has too few fields: %q", s) return } @@ -262,34 +201,19 @@ func (p *Properties) Parse(s string) { switch p.Wire { case "varint": p.WireType = WireVarint - p.valEnc = (*Buffer).EncodeVarint - p.valDec = (*Buffer).DecodeVarint - p.valSize = sizeVarint case "fixed32": p.WireType = WireFixed32 - p.valEnc = (*Buffer).EncodeFixed32 - p.valDec = (*Buffer).DecodeFixed32 - p.valSize = sizeFixed32 case "fixed64": p.WireType = WireFixed64 - p.valEnc = (*Buffer).EncodeFixed64 - p.valDec = (*Buffer).DecodeFixed64 - p.valSize = sizeFixed64 case "zigzag32": p.WireType = WireVarint - p.valEnc = (*Buffer).EncodeZigzag32 - p.valDec = (*Buffer).DecodeZigzag32 - p.valSize = sizeZigzag32 case "zigzag64": p.WireType = WireVarint - p.valEnc = (*Buffer).EncodeZigzag64 - p.valDec = (*Buffer).DecodeZigzag64 - p.valSize = sizeZigzag64 case "bytes", "group": p.WireType = WireBytes // no numeric converter for non-numeric types default: - fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s) + log.Printf("proto: tag has unknown wire type: %q", s) return } @@ -299,6 +223,7 @@ func (p *Properties) Parse(s string) { return } +outer: for i := 2; i < len(fields); i++ { f := fields[i] switch { @@ -326,255 +251,40 @@ func (p *Properties) Parse(s string) { if i+1 < len(fields) { // Commas aren't escaped, and def is always last. p.Default += "," + strings.Join(fields[i+1:], ",") - break + break outer } } } } -func logNoSliceEnc(t1, t2 reflect.Type) { - fmt.Fprintf(os.Stderr, "proto: no slice oenc for %T = []%T\n", t1, t2) -} - var protoMessageType = reflect.TypeOf((*Message)(nil)).Elem() -// Initialize the fields for encoding and decoding. -func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { - p.enc = nil - p.dec = nil - p.size = nil - +// setFieldProps initializes the field properties for submessages and maps. +func (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) { switch t1 := typ; t1.Kind() { - default: - fmt.Fprintf(os.Stderr, "proto: no coders for %v\n", t1) - - // proto3 scalar types - - case reflect.Bool: - p.enc = (*Buffer).enc_proto3_bool - p.dec = (*Buffer).dec_proto3_bool - p.size = size_proto3_bool - case reflect.Int32: - p.enc = (*Buffer).enc_proto3_int32 - p.dec = (*Buffer).dec_proto3_int32 - p.size = size_proto3_int32 - case reflect.Uint32: - p.enc = (*Buffer).enc_proto3_uint32 - p.dec = (*Buffer).dec_proto3_int32 // can reuse - p.size = size_proto3_uint32 - case reflect.Int64, reflect.Uint64: - p.enc = (*Buffer).enc_proto3_int64 - p.dec = (*Buffer).dec_proto3_int64 - p.size = size_proto3_int64 - case reflect.Float32: - p.enc = (*Buffer).enc_proto3_uint32 // can just treat them as bits - p.dec = (*Buffer).dec_proto3_int32 - p.size = size_proto3_uint32 - case reflect.Float64: - p.enc = (*Buffer).enc_proto3_int64 // can just treat them as bits - p.dec = (*Buffer).dec_proto3_int64 - p.size = size_proto3_int64 - case reflect.String: - p.enc = (*Buffer).enc_proto3_string - p.dec = (*Buffer).dec_proto3_string - p.size = size_proto3_string - case reflect.Ptr: - switch t2 := t1.Elem(); t2.Kind() { - default: - fmt.Fprintf(os.Stderr, "proto: no encoder function for %v -> %v\n", t1, t2) - break - case reflect.Bool: - p.enc = (*Buffer).enc_bool - p.dec = (*Buffer).dec_bool - p.size = size_bool - case reflect.Int32: - p.enc = (*Buffer).enc_int32 - p.dec = (*Buffer).dec_int32 - p.size = size_int32 - case reflect.Uint32: - p.enc = (*Buffer).enc_uint32 - p.dec = (*Buffer).dec_int32 // can reuse - p.size = size_uint32 - case reflect.Int64, reflect.Uint64: - p.enc = (*Buffer).enc_int64 - p.dec = (*Buffer).dec_int64 - p.size = size_int64 - case reflect.Float32: - p.enc = (*Buffer).enc_uint32 // can just treat them as bits - p.dec = (*Buffer).dec_int32 - p.size = size_uint32 - case reflect.Float64: - p.enc = (*Buffer).enc_int64 // can just treat them as bits - p.dec = (*Buffer).dec_int64 - p.size = size_int64 - case reflect.String: - p.enc = (*Buffer).enc_string - p.dec = (*Buffer).dec_string - p.size = size_string - case reflect.Struct: + if t1.Elem().Kind() == reflect.Struct { p.stype = t1.Elem() - p.isMarshaler = isMarshaler(t1) - p.isUnmarshaler = isUnmarshaler(t1) - if p.Wire == "bytes" { - p.enc = (*Buffer).enc_struct_message - p.dec = (*Buffer).dec_struct_message - p.size = size_struct_message - } else { - p.enc = (*Buffer).enc_struct_group - p.dec = (*Buffer).dec_struct_group - p.size = size_struct_group - } } case reflect.Slice: - switch t2 := t1.Elem(); t2.Kind() { - default: - logNoSliceEnc(t1, t2) - break - case reflect.Bool: - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_bool - p.size = size_slice_packed_bool - } else { - p.enc = (*Buffer).enc_slice_bool - p.size = size_slice_bool - } - p.dec = (*Buffer).dec_slice_bool - p.packedDec = (*Buffer).dec_slice_packed_bool - case reflect.Int32: - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_int32 - p.size = size_slice_packed_int32 - } else { - p.enc = (*Buffer).enc_slice_int32 - p.size = size_slice_int32 - } - p.dec = (*Buffer).dec_slice_int32 - p.packedDec = (*Buffer).dec_slice_packed_int32 - case reflect.Uint32: - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_uint32 - p.size = size_slice_packed_uint32 - } else { - p.enc = (*Buffer).enc_slice_uint32 - p.size = size_slice_uint32 - } - p.dec = (*Buffer).dec_slice_int32 - p.packedDec = (*Buffer).dec_slice_packed_int32 - case reflect.Int64, reflect.Uint64: - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_int64 - p.size = size_slice_packed_int64 - } else { - p.enc = (*Buffer).enc_slice_int64 - p.size = size_slice_int64 - } - p.dec = (*Buffer).dec_slice_int64 - p.packedDec = (*Buffer).dec_slice_packed_int64 - case reflect.Uint8: - p.dec = (*Buffer).dec_slice_byte - if p.proto3 { - p.enc = (*Buffer).enc_proto3_slice_byte - p.size = size_proto3_slice_byte - } else { - p.enc = (*Buffer).enc_slice_byte - p.size = size_slice_byte - } - case reflect.Float32, reflect.Float64: - switch t2.Bits() { - case 32: - // can just treat them as bits - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_uint32 - p.size = size_slice_packed_uint32 - } else { - p.enc = (*Buffer).enc_slice_uint32 - p.size = size_slice_uint32 - } - p.dec = (*Buffer).dec_slice_int32 - p.packedDec = (*Buffer).dec_slice_packed_int32 - case 64: - // can just treat them as bits - if p.Packed { - p.enc = (*Buffer).enc_slice_packed_int64 - p.size = size_slice_packed_int64 - } else { - p.enc = (*Buffer).enc_slice_int64 - p.size = size_slice_int64 - } - p.dec = (*Buffer).dec_slice_int64 - p.packedDec = (*Buffer).dec_slice_packed_int64 - default: - logNoSliceEnc(t1, t2) - break - } - case reflect.String: - p.enc = (*Buffer).enc_slice_string - p.dec = (*Buffer).dec_slice_string - p.size = size_slice_string - case reflect.Ptr: - switch t3 := t2.Elem(); t3.Kind() { - default: - fmt.Fprintf(os.Stderr, "proto: no ptr oenc for %T -> %T -> %T\n", t1, t2, t3) - break - case reflect.Struct: - p.stype = t2.Elem() - p.isMarshaler = isMarshaler(t2) - p.isUnmarshaler = isUnmarshaler(t2) - if p.Wire == "bytes" { - p.enc = (*Buffer).enc_slice_struct_message - p.dec = (*Buffer).dec_slice_struct_message - p.size = size_slice_struct_message - } else { - p.enc = (*Buffer).enc_slice_struct_group - p.dec = (*Buffer).dec_slice_struct_group - p.size = size_slice_struct_group - } - } - case reflect.Slice: - switch t2.Elem().Kind() { - default: - fmt.Fprintf(os.Stderr, "proto: no slice elem oenc for %T -> %T -> %T\n", t1, t2, t2.Elem()) - break - case reflect.Uint8: - p.enc = (*Buffer).enc_slice_slice_byte - p.dec = (*Buffer).dec_slice_slice_byte - p.size = size_slice_slice_byte - } + if t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct { + p.stype = t2.Elem() } case reflect.Map: - p.enc = (*Buffer).enc_new_map - p.dec = (*Buffer).dec_new_map - p.size = size_new_map - p.mtype = t1 - p.mkeyprop = &Properties{} - p.mkeyprop.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) - p.mvalprop = &Properties{} + p.MapKeyProp = &Properties{} + p.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), "Key", f.Tag.Get("protobuf_key"), nil, lockGetProp) + p.MapValProp = &Properties{} vtype := p.mtype.Elem() if vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice { // The value type is not a message (*T) or bytes ([]byte), // so we need encoders for the pointer to this type. vtype = reflect.PtrTo(vtype) } - p.mvalprop.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) - } - - // precalculate tag code - wire := p.WireType - if p.Packed { - wire = WireBytes + p.MapValProp.init(vtype, "Value", f.Tag.Get("protobuf_val"), nil, lockGetProp) } - x := uint32(p.Tag)<<3 | uint32(wire) - i := 0 - for i = 0; x > 127; i++ { - p.tagbuf[i] = 0x80 | uint8(x&0x7F) - x >>= 7 - } - p.tagbuf[i] = uint8(x) - p.tagcode = p.tagbuf[0 : i+1] if p.stype != nil { if lockGetProp { @@ -586,32 +296,9 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock } var ( - marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() - unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem() + marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem() ) -// isMarshaler reports whether type t implements Marshaler. -func isMarshaler(t reflect.Type) bool { - // We're checking for (likely) pointer-receiver methods - // so if t is not a pointer, something is very wrong. - // The calls above only invoke isMarshaler on pointer types. - if t.Kind() != reflect.Ptr { - panic("proto: misuse of isMarshaler") - } - return t.Implements(marshalerType) -} - -// isUnmarshaler reports whether type t implements Unmarshaler. -func isUnmarshaler(t reflect.Type) bool { - // We're checking for (likely) pointer-receiver methods - // so if t is not a pointer, something is very wrong. - // The calls above only invoke isUnmarshaler on pointer types. - if t.Kind() != reflect.Ptr { - panic("proto: misuse of isUnmarshaler") - } - return t.Implements(unmarshalerType) -} - // Init populates the properties from a protocol buffer struct tag. func (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) { p.init(typ, name, tag, f, true) @@ -621,14 +308,11 @@ func (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructF // "bytes,49,opt,def=hello!" p.Name = name p.OrigName = name - if f != nil { - p.field = toField(f) - } if tag == "" { return } p.Parse(tag) - p.setEncAndDec(typ, f, lockGetProp) + p.setFieldProps(typ, f, lockGetProp) } var ( @@ -649,9 +333,6 @@ func GetProperties(t reflect.Type) *StructProperties { sprop, ok := propertiesMap[t] propertiesMu.RUnlock() if ok { - if collectStats { - stats.Chit++ - } return sprop } @@ -661,26 +342,26 @@ func GetProperties(t reflect.Type) *StructProperties { return sprop } +type ( + oneofFuncsIface interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + oneofWrappersIface interface { + XXX_OneofWrappers() []interface{} + } +) + // getPropertiesLocked requires that propertiesMu is held. func getPropertiesLocked(t reflect.Type) *StructProperties { if prop, ok := propertiesMap[t]; ok { - if collectStats { - stats.Chit++ - } return prop } - if collectStats { - stats.Cmiss++ - } prop := new(StructProperties) // in case of recursive protos, fill this in now. propertiesMap[t] = prop // build properties - prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || - reflect.PtrTo(t).Implements(extendableProtoV1Type) - prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) @@ -690,17 +371,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { name := f.Name p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - if f.Name == "XXX_InternalExtensions" { // special case - p.enc = (*Buffer).enc_exts - p.dec = nil // not needed - p.size = size_exts - } else if f.Name == "XXX_extensions" { // special case - p.enc = (*Buffer).enc_map - p.dec = nil // not needed - p.size = size_map - } else if f.Name == "XXX_unrecognized" { // special case - prop.unrecField = toField(&f) - } oneof := f.Tag.Get("protobuf_oneof") // special case if oneof != "" { // Oneof fields don't use the traditional protobuf tag. @@ -715,22 +385,19 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } print("\n") } - if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { - fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") - } } // Re-order prop.order. sort.Sort(prop) - type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + var oots []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oots = m.XXX_OneofFuncs() + case oneofWrappersIface: + oots = m.XXX_OneofWrappers() } - if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { - var oots []interface{} - prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs() - prop.stype = t - + if len(oots) > 0 { // Interpret oneof metadata. prop.OneofTypes = make(map[string]*OneofProperties) for _, oot := range oots { @@ -779,30 +446,6 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { return prop } -// Return the Properties object for the x[0]'th field of the structure. -func propByIndex(t reflect.Type, x []int) *Properties { - if len(x) != 1 { - fmt.Fprintf(os.Stderr, "proto: field index dimension %d (not 1) for type %s\n", len(x), t) - return nil - } - prop := GetProperties(t) - return prop.Prop[x[0]] -} - -// Get the address and type of a pointer to a struct from an interface. -func getbase(pb Message) (t reflect.Type, b structPointer, err error) { - if pb == nil { - err = ErrNil - return - } - // get the reflect type of the pointer to the struct. - t = reflect.TypeOf(pb) - // get the address of the struct. - value := reflect.ValueOf(pb) - b = toStructPointer(value) - return -} - // A global registry of enum types. // The generated code will register the generated maps by calling RegisterEnum. @@ -826,20 +469,42 @@ func EnumValueMap(enumType string) map[string]int32 { // A registry of all linked message types. // The string is a fully-qualified proto name ("pkg.Message"). var ( - protoTypes = make(map[string]reflect.Type) - revProtoTypes = make(map[reflect.Type]string) + protoTypedNils = make(map[string]Message) // a map from proto names to typed nil pointers + protoMapTypes = make(map[string]reflect.Type) // a map from proto names to map types + revProtoTypes = make(map[reflect.Type]string) ) // RegisterType is called from generated code and maps from the fully qualified // proto name to the type (pointer to struct) of the protocol buffer. func RegisterType(x Message, name string) { - if _, ok := protoTypes[name]; ok { + if _, ok := protoTypedNils[name]; ok { // TODO: Some day, make this a panic. log.Printf("proto: duplicate proto type registered: %s", name) return } t := reflect.TypeOf(x) - protoTypes[name] = t + if v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 { + // Generated code always calls RegisterType with nil x. + // This check is just for extra safety. + protoTypedNils[name] = x + } else { + protoTypedNils[name] = reflect.Zero(t).Interface().(Message) + } + revProtoTypes[t] = name +} + +// RegisterMapType is called from generated code and maps from the fully qualified +// proto name to the native map type of the proto map definition. +func RegisterMapType(x interface{}, name string) { + if reflect.TypeOf(x).Kind() != reflect.Map { + panic(fmt.Sprintf("RegisterMapType(%T, %q); want map", x, name)) + } + if _, ok := protoMapTypes[name]; ok { + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoMapTypes[name] = t revProtoTypes[t] = name } @@ -855,7 +520,14 @@ func MessageName(x Message) string { } // MessageType returns the message type (pointer to struct) for a named message. -func MessageType(name string) reflect.Type { return protoTypes[name] } +// The type is not guaranteed to implement proto.Message if the name refers to a +// map entry. +func MessageType(name string) reflect.Type { + if t, ok := protoTypedNils[name]; ok { + return reflect.TypeOf(t) + } + return protoMapTypes[name] +} // A registry of all linked proto files. var ( diff --git a/vendor/github.com/golang/protobuf/proto/table_marshal.go b/vendor/github.com/golang/protobuf/proto/table_marshal.go new file mode 100644 index 000000000000..5cb11fa955e4 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_marshal.go @@ -0,0 +1,2776 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "math" + "reflect" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// a sizer takes a pointer to a field and the size of its tag, computes the size of +// the encoded data. +type sizer func(pointer, int) int + +// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format), +// marshals the field to the end of the slice, returns the slice and error (if any). +type marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) + +// marshalInfo is the information used for marshaling a message. +type marshalInfo struct { + typ reflect.Type + fields []*marshalFieldInfo + unrecognized field // offset of XXX_unrecognized + extensions field // offset of XXX_InternalExtensions + v1extensions field // offset of XXX_extensions + sizecache field // offset of XXX_sizecache + initialized int32 // 0 -- only typ is set, 1 -- fully initialized + messageset bool // uses message set wire format + hasmarshaler bool // has custom marshaler + sync.RWMutex // protect extElems map, also for initialization + extElems map[int32]*marshalElemInfo // info of extension elements +} + +// marshalFieldInfo is the information used for marshaling a field of a message. +type marshalFieldInfo struct { + field field + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isPointer bool + required bool // field is required + name string // name of the field, for error reporting + oneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements +} + +// marshalElemInfo is the information used for marshaling an extension or oneof element. +type marshalElemInfo struct { + wiretag uint64 // tag in wire format + tagsize int // size of tag in wire format + sizer sizer + marshaler marshaler + isptr bool // elem is pointer typed, thus interface of this type is a direct interface (extension only) + deref bool // dereference the pointer before operating on it; implies isptr +} + +var ( + marshalInfoMap = map[reflect.Type]*marshalInfo{} + marshalInfoLock sync.Mutex +) + +// getMarshalInfo returns the information to marshal a given type of message. +// The info it returns may not necessarily initialized. +// t is the type of the message (NOT the pointer to it). +func getMarshalInfo(t reflect.Type) *marshalInfo { + marshalInfoLock.Lock() + u, ok := marshalInfoMap[t] + if !ok { + u = &marshalInfo{typ: t} + marshalInfoMap[t] = u + } + marshalInfoLock.Unlock() + return u +} + +// Size is the entry point from generated code, +// and should be ONLY called by generated code. +// It computes the size of encoded data of msg. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Size(msg Message) int { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return 0 + } + return u.size(ptr) +} + +// Marshal is the entry point from generated code, +// and should be ONLY called by generated code. +// It marshals msg to the end of b. +// a is a pointer to a place to store cached marshal info. +func (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) { + u := getMessageMarshalInfo(msg, a) + ptr := toPointer(&msg) + if ptr.isNil() { + // We get here if msg is a typed nil ((*SomeMessage)(nil)), + // so it satisfies the interface, and msg == nil wouldn't + // catch it. We don't want crash in this case. + return b, ErrNil + } + return u.marshal(b, ptr, deterministic) +} + +func getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo { + // u := a.marshal, but atomically. + // We use an atomic here to ensure memory consistency. + u := atomicLoadMarshalInfo(&a.marshal) + if u == nil { + // Get marshal information from type of message. + t := reflect.ValueOf(msg).Type() + if t.Kind() != reflect.Ptr { + panic(fmt.Sprintf("cannot handle non-pointer message type %v", t)) + } + u = getMarshalInfo(t.Elem()) + // Store it in the cache for later users. + // a.marshal = u, but atomically. + atomicStoreMarshalInfo(&a.marshal, u) + } + return u +} + +// size is the main function to compute the size of the encoded data of a message. +// ptr is the pointer to the message. +func (u *marshalInfo) size(ptr pointer) int { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b, _ := m.Marshal() + return len(b) + } + + n := 0 + for _, f := range u.fields { + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + n += f.sizer(ptr.offset(f.field), f.tagsize) + } + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + n += u.sizeMessageSet(e) + } else { + n += u.sizeExtensions(e) + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + n += u.sizeV1Extensions(m) + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + n += len(s) + } + // cache the result for use in marshal + if u.sizecache.IsValid() { + atomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n)) + } + return n +} + +// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated), +// fall back to compute the size. +func (u *marshalInfo) cachedsize(ptr pointer) int { + if u.sizecache.IsValid() { + return int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32())) + } + return u.size(ptr) +} + +// marshal is the main function to marshal a message. It takes a byte slice and appends +// the encoded data to the end of the slice, returns the slice and error (if any). +// ptr is the pointer to the message. +// If deterministic is true, map is marshaled in deterministic order. +func (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) { + if atomic.LoadInt32(&u.initialized) == 0 { + u.computeMarshalInfo() + } + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if u.hasmarshaler { + m := ptr.asPointerTo(u.typ).Interface().(Marshaler) + b1, err := m.Marshal() + b = append(b, b1...) + return b, err + } + + var err, errLater error + // The old marshaler encodes extensions at beginning. + if u.extensions.IsValid() { + e := ptr.offset(u.extensions).toExtensions() + if u.messageset { + b, err = u.appendMessageSet(b, e, deterministic) + } else { + b, err = u.appendExtensions(b, e, deterministic) + } + if err != nil { + return b, err + } + } + if u.v1extensions.IsValid() { + m := *ptr.offset(u.v1extensions).toOldExtensions() + b, err = u.appendV1Extensions(b, m, deterministic) + if err != nil { + return b, err + } + } + for _, f := range u.fields { + if f.required { + if ptr.offset(f.field).getPointer().isNil() { + // Required field is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name} + } + continue + } + } + if f.isPointer && ptr.offset(f.field).getPointer().isNil() { + // nil pointer always marshals to nothing + continue + } + b, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic) + if err != nil { + if err1, ok := err.(*RequiredNotSetError); ok { + // Required field in submessage is not set. + // We record the error but keep going, to give a complete marshaling. + if errLater == nil { + errLater = &RequiredNotSetError{f.name + "." + err1.field} + } + continue + } + if err == errRepeatedHasNil { + err = errors.New("proto: repeated field " + f.name + " has nil element") + } + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return b, err + } + } + if u.unrecognized.IsValid() { + s := *ptr.offset(u.unrecognized).toBytes() + b = append(b, s...) + } + return b, errLater +} + +// computeMarshalInfo initializes the marshal info. +func (u *marshalInfo) computeMarshalInfo() { + u.Lock() + defer u.Unlock() + if u.initialized != 0 { // non-atomic read is ok as it is protected by the lock + return + } + + t := u.typ + u.unrecognized = invalidField + u.extensions = invalidField + u.v1extensions = invalidField + u.sizecache = invalidField + + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + if reflect.PtrTo(t).Implements(marshalerType) { + u.hasmarshaler = true + atomic.StoreInt32(&u.initialized, 1) + return + } + + // get oneof implementers + var oneofImplementers []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + case oneofWrappersIface: + oneofImplementers = m.XXX_OneofWrappers() + } + + n := t.NumField() + + // deal with XXX fields first + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if !strings.HasPrefix(f.Name, "XXX_") { + continue + } + switch f.Name { + case "XXX_sizecache": + u.sizecache = toField(&f) + case "XXX_unrecognized": + u.unrecognized = toField(&f) + case "XXX_InternalExtensions": + u.extensions = toField(&f) + u.messageset = f.Tag.Get("protobuf_messageset") == "1" + case "XXX_extensions": + u.v1extensions = toField(&f) + case "XXX_NoUnkeyedLiteral": + // nothing to do + default: + panic("unknown XXX field: " + f.Name) + } + n-- + } + + // normal fields + fields := make([]marshalFieldInfo, n) // batch allocation + u.fields = make([]*marshalFieldInfo, 0, n) + for i, j := 0, 0; i < t.NumField(); i++ { + f := t.Field(i) + + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + field := &fields[j] + j++ + field.name = f.Name + u.fields = append(u.fields, field) + if f.Tag.Get("protobuf_oneof") != "" { + field.computeOneofFieldInfo(&f, oneofImplementers) + continue + } + if f.Tag.Get("protobuf") == "" { + // field has no tag (not in generated message), ignore it + u.fields = u.fields[:len(u.fields)-1] + j-- + continue + } + field.computeMarshalFieldInfo(&f) + } + + // fields are marshaled in tag order on the wire. + sort.Sort(byTag(u.fields)) + + atomic.StoreInt32(&u.initialized, 1) +} + +// helper for sorting fields by tag +type byTag []*marshalFieldInfo + +func (a byTag) Len() int { return len(a) } +func (a byTag) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag } + +// getExtElemInfo returns the information to marshal an extension element. +// The info it returns is initialized. +func (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo { + // get from cache first + u.RLock() + e, ok := u.extElems[desc.Field] + u.RUnlock() + if ok { + return e + } + + t := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct + tags := strings.Split(desc.Tag, ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct { + t = t.Elem() + } + sizer, marshaler := typeMarshaler(t, tags, false, false) + var deref bool + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + t = reflect.PtrTo(t) + deref = true + } + e = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + isptr: t.Kind() == reflect.Ptr, + deref: deref, + } + + // update cache + u.Lock() + if u.extElems == nil { + u.extElems = make(map[int32]*marshalElemInfo) + } + u.extElems[desc.Field] = e + u.Unlock() + return e +} + +// computeMarshalFieldInfo fills up the information to marshal a field. +func (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) { + // parse protobuf tag of the field. + // tag has format of "bytes,49,opt,name=foo,def=hello!" + tags := strings.Split(f.Tag.Get("protobuf"), ",") + if tags[0] == "" { + return + } + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + if tags[2] == "req" { + fi.required = true + } + fi.setTag(f, tag, wt) + fi.setMarshaler(f, tags) +} + +func (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) { + fi.field = toField(f) + fi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire. + fi.isPointer = true + fi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f) + fi.oneofElems = make(map[reflect.Type]*marshalElemInfo) + + ityp := f.Type // interface type + for _, o := range oneofImplementers { + t := reflect.TypeOf(o) + if !t.Implements(ityp) { + continue + } + sf := t.Elem().Field(0) // oneof implementer is a struct with a single field + tags := strings.Split(sf.Tag.Get("protobuf"), ",") + tag, err := strconv.Atoi(tags[1]) + if err != nil { + panic("tag is not an integer") + } + wt := wiretype(tags[0]) + sizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value + fi.oneofElems[t.Elem()] = &marshalElemInfo{ + wiretag: uint64(tag)<<3 | wt, + tagsize: SizeVarint(uint64(tag) << 3), + sizer: sizer, + marshaler: marshaler, + } + } +} + +// wiretype returns the wire encoding of the type. +func wiretype(encoding string) uint64 { + switch encoding { + case "fixed32": + return WireFixed32 + case "fixed64": + return WireFixed64 + case "varint", "zigzag32", "zigzag64": + return WireVarint + case "bytes": + return WireBytes + case "group": + return WireStartGroup + } + panic("unknown wire type " + encoding) +} + +// setTag fills up the tag (in wire format) and its size in the info of a field. +func (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) { + fi.field = toField(f) + fi.wiretag = uint64(tag)<<3 | wt + fi.tagsize = SizeVarint(uint64(tag) << 3) +} + +// setMarshaler fills up the sizer and marshaler in the info of a field. +func (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) { + switch f.Type.Kind() { + case reflect.Map: + // map field + fi.isPointer = true + fi.sizer, fi.marshaler = makeMapMarshaler(f) + return + case reflect.Ptr, reflect.Slice: + fi.isPointer = true + } + fi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false) +} + +// typeMarshaler returns the sizer and marshaler of a given field. +// t is the type of the field. +// tags is the generated "protobuf" tag of the field. +// If nozero is true, zero value is not marshaled to the wire. +// If oneof is true, it is a oneof field. +func typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) { + encoding := tags[0] + + pointer := false + slice := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + packed := false + proto3 := false + validateUTF8 := true + for i := 2; i < len(tags); i++ { + if tags[i] == "packed" { + packed = true + } + if tags[i] == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + switch t.Kind() { + case reflect.Bool: + if pointer { + return sizeBoolPtr, appendBoolPtr + } + if slice { + if packed { + return sizeBoolPackedSlice, appendBoolPackedSlice + } + return sizeBoolSlice, appendBoolSlice + } + if nozero { + return sizeBoolValueNoZero, appendBoolValueNoZero + } + return sizeBoolValue, appendBoolValue + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixed32Ptr, appendFixed32Ptr + } + if slice { + if packed { + return sizeFixed32PackedSlice, appendFixed32PackedSlice + } + return sizeFixed32Slice, appendFixed32Slice + } + if nozero { + return sizeFixed32ValueNoZero, appendFixed32ValueNoZero + } + return sizeFixed32Value, appendFixed32Value + case "varint": + if pointer { + return sizeVarint32Ptr, appendVarint32Ptr + } + if slice { + if packed { + return sizeVarint32PackedSlice, appendVarint32PackedSlice + } + return sizeVarint32Slice, appendVarint32Slice + } + if nozero { + return sizeVarint32ValueNoZero, appendVarint32ValueNoZero + } + return sizeVarint32Value, appendVarint32Value + } + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return sizeFixedS32Ptr, appendFixedS32Ptr + } + if slice { + if packed { + return sizeFixedS32PackedSlice, appendFixedS32PackedSlice + } + return sizeFixedS32Slice, appendFixedS32Slice + } + if nozero { + return sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero + } + return sizeFixedS32Value, appendFixedS32Value + case "varint": + if pointer { + return sizeVarintS32Ptr, appendVarintS32Ptr + } + if slice { + if packed { + return sizeVarintS32PackedSlice, appendVarintS32PackedSlice + } + return sizeVarintS32Slice, appendVarintS32Slice + } + if nozero { + return sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero + } + return sizeVarintS32Value, appendVarintS32Value + case "zigzag32": + if pointer { + return sizeZigzag32Ptr, appendZigzag32Ptr + } + if slice { + if packed { + return sizeZigzag32PackedSlice, appendZigzag32PackedSlice + } + return sizeZigzag32Slice, appendZigzag32Slice + } + if nozero { + return sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero + } + return sizeZigzag32Value, appendZigzag32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixed64Ptr, appendFixed64Ptr + } + if slice { + if packed { + return sizeFixed64PackedSlice, appendFixed64PackedSlice + } + return sizeFixed64Slice, appendFixed64Slice + } + if nozero { + return sizeFixed64ValueNoZero, appendFixed64ValueNoZero + } + return sizeFixed64Value, appendFixed64Value + case "varint": + if pointer { + return sizeVarint64Ptr, appendVarint64Ptr + } + if slice { + if packed { + return sizeVarint64PackedSlice, appendVarint64PackedSlice + } + return sizeVarint64Slice, appendVarint64Slice + } + if nozero { + return sizeVarint64ValueNoZero, appendVarint64ValueNoZero + } + return sizeVarint64Value, appendVarint64Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return sizeFixedS64Ptr, appendFixedS64Ptr + } + if slice { + if packed { + return sizeFixedS64PackedSlice, appendFixedS64PackedSlice + } + return sizeFixedS64Slice, appendFixedS64Slice + } + if nozero { + return sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero + } + return sizeFixedS64Value, appendFixedS64Value + case "varint": + if pointer { + return sizeVarintS64Ptr, appendVarintS64Ptr + } + if slice { + if packed { + return sizeVarintS64PackedSlice, appendVarintS64PackedSlice + } + return sizeVarintS64Slice, appendVarintS64Slice + } + if nozero { + return sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero + } + return sizeVarintS64Value, appendVarintS64Value + case "zigzag64": + if pointer { + return sizeZigzag64Ptr, appendZigzag64Ptr + } + if slice { + if packed { + return sizeZigzag64PackedSlice, appendZigzag64PackedSlice + } + return sizeZigzag64Slice, appendZigzag64Slice + } + if nozero { + return sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero + } + return sizeZigzag64Value, appendZigzag64Value + } + case reflect.Float32: + if pointer { + return sizeFloat32Ptr, appendFloat32Ptr + } + if slice { + if packed { + return sizeFloat32PackedSlice, appendFloat32PackedSlice + } + return sizeFloat32Slice, appendFloat32Slice + } + if nozero { + return sizeFloat32ValueNoZero, appendFloat32ValueNoZero + } + return sizeFloat32Value, appendFloat32Value + case reflect.Float64: + if pointer { + return sizeFloat64Ptr, appendFloat64Ptr + } + if slice { + if packed { + return sizeFloat64PackedSlice, appendFloat64PackedSlice + } + return sizeFloat64Slice, appendFloat64Slice + } + if nozero { + return sizeFloat64ValueNoZero, appendFloat64ValueNoZero + } + return sizeFloat64Value, appendFloat64Value + case reflect.String: + if validateUTF8 { + if pointer { + return sizeStringPtr, appendUTF8StringPtr + } + if slice { + return sizeStringSlice, appendUTF8StringSlice + } + if nozero { + return sizeStringValueNoZero, appendUTF8StringValueNoZero + } + return sizeStringValue, appendUTF8StringValue + } + if pointer { + return sizeStringPtr, appendStringPtr + } + if slice { + return sizeStringSlice, appendStringSlice + } + if nozero { + return sizeStringValueNoZero, appendStringValueNoZero + } + return sizeStringValue, appendStringValue + case reflect.Slice: + if slice { + return sizeBytesSlice, appendBytesSlice + } + if oneof { + // Oneof bytes field may also have "proto3" tag. + // We want to marshal it as a oneof field. Do this + // check before the proto3 check. + return sizeBytesOneof, appendBytesOneof + } + if proto3 { + return sizeBytes3, appendBytes3 + } + return sizeBytes, appendBytes + case reflect.Struct: + switch encoding { + case "group": + if slice { + return makeGroupSliceMarshaler(getMarshalInfo(t)) + } + return makeGroupMarshaler(getMarshalInfo(t)) + case "bytes": + if slice { + return makeMessageSliceMarshaler(getMarshalInfo(t)) + } + return makeMessageMarshaler(getMarshalInfo(t)) + } + } + panic(fmt.Sprintf("unknown or mismatched type: type: %v, wire type: %v", t, encoding)) +} + +// Below are functions to size/marshal a specific type of a field. +// They are stored in the field's info, and called by function pointers. +// They have type sizer or marshaler. + +func sizeFixed32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixed32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixed32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixed32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixedS32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFixedS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + return (4 + tagsize) * len(s) +} +func sizeFixedS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFloat32Value(_ pointer, tagsize int) int { + return 4 + tagsize +} +func sizeFloat32ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat32Ptr() + if p == nil { + return 0 + } + return 4 + tagsize +} +func sizeFloat32Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + return (4 + tagsize) * len(s) +} +func sizeFloat32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return 0 + } + return 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize +} +func sizeFixed64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixed64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixed64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixed64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFixedS64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFixedS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + return (8 + tagsize) * len(s) +} +func sizeFixedS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeFloat64Value(_ pointer, tagsize int) int { + return 8 + tagsize +} +func sizeFloat64ValueNoZero(ptr pointer, tagsize int) int { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toFloat64Ptr() + if p == nil { + return 0 + } + return 8 + tagsize +} +func sizeFloat64Slice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + return (8 + tagsize) * len(s) +} +func sizeFloat64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return 0 + } + return 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize +} +func sizeVarint32Value(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarint32Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarint32Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarint32PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarint64Value(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + return SizeVarint(v) + tagsize +} +func sizeVarint64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toUint64() + if v == 0 { + return 0 + } + return SizeVarint(v) + tagsize +} +func sizeVarint64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toUint64Ptr() + if p == nil { + return 0 + } + return SizeVarint(*p) + tagsize +} +func sizeVarint64Slice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(v) + tagsize + } + return n +} +func sizeVarint64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeVarintS64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v)) + tagsize +} +func sizeVarintS64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + return SizeVarint(uint64(*p)) + tagsize +} +func sizeVarintS64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + tagsize + } + return n +} +func sizeVarintS64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag32Value(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt32() + if v == 0 { + return 0 + } + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Ptr(ptr pointer, tagsize int) int { + p := ptr.getInt32Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize +} +func sizeZigzag32Slice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize + } + return n +} +func sizeZigzag32PackedSlice(ptr pointer, tagsize int) int { + s := ptr.getInt32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeZigzag64Value(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toInt64() + if v == 0 { + return 0 + } + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Ptr(ptr pointer, tagsize int) int { + p := *ptr.toInt64Ptr() + if p == nil { + return 0 + } + v := *p + return SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize +} +func sizeZigzag64Slice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize + } + return n +} +func sizeZigzag64PackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + return n + SizeVarint(uint64(n)) + tagsize +} +func sizeBoolValue(_ pointer, tagsize int) int { + return 1 + tagsize +} +func sizeBoolValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toBool() + if !v { + return 0 + } + return 1 + tagsize +} +func sizeBoolPtr(ptr pointer, tagsize int) int { + p := *ptr.toBoolPtr() + if p == nil { + return 0 + } + return 1 + tagsize +} +func sizeBoolSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + return (1 + tagsize) * len(s) +} +func sizeBoolPackedSlice(ptr pointer, tagsize int) int { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return 0 + } + return len(s) + SizeVarint(uint64(len(s))) + tagsize +} +func sizeStringValue(ptr pointer, tagsize int) int { + v := *ptr.toString() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringValueNoZero(ptr pointer, tagsize int) int { + v := *ptr.toString() + if v == "" { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringPtr(ptr pointer, tagsize int) int { + p := *ptr.toStringPtr() + if p == nil { + return 0 + } + v := *p + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeStringSlice(ptr pointer, tagsize int) int { + s := *ptr.toStringSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} +func sizeBytes(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if v == nil { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytes3(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + if len(v) == 0 { + return 0 + } + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesOneof(ptr pointer, tagsize int) int { + v := *ptr.toBytes() + return len(v) + SizeVarint(uint64(len(v))) + tagsize +} +func sizeBytesSlice(ptr pointer, tagsize int) int { + s := *ptr.toBytesSlice() + n := 0 + for _, v := range s { + n += len(v) + SizeVarint(uint64(len(v))) + tagsize + } + return n +} + +// appendFixed32 appends an encoded fixed32 to b. +func appendFixed32(b []byte, v uint32) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24)) + return b +} + +// appendFixed64 appends an encoded fixed64 to b. +func appendFixed64(b []byte, v uint64) []byte { + b = append(b, + byte(v), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) + return b +} + +// appendVarint appends an encoded varint to b. +func appendVarint(b []byte, v uint64) []byte { + // TODO: make 1-byte (maybe 2-byte) case inline-able, once we + // have non-leaf inliner. + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte(v&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte(v&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +func appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, *p) + return b, nil +} +func appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, v) + } + return b, nil +} +func appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + return b, nil +} +func appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(*p)) + return b, nil +} +func appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, uint32(v)) + } + return b, nil +} +func appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float32bits(*ptr.toFloat32()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, v) + return b, nil +} +func appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(*p)) + return b, nil +} +func appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(4*len(s))) + for _, v := range s { + b = appendFixed32(b, math.Float32bits(v)) + } + return b, nil +} +func appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, *p) + return b, nil +} +func appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, v) + } + return b, nil +} +func appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + return b, nil +} +func appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(*p)) + return b, nil +} +func appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, uint64(v)) + } + return b, nil +} +func appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := math.Float64bits(*ptr.toFloat64()) + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, v) + return b, nil +} +func appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toFloat64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(*p)) + return b, nil +} +func appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toFloat64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(8*len(s))) + for _, v := range s { + b = appendFixed64(b, math.Float64bits(v)) + } + return b, nil +} +func appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toUint64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + return b, nil +} +func appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toUint64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, *p) + return b, nil +} +func appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, v) + } + return b, nil +} +func appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toUint64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(v) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, v) + } + return b, nil +} +func appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + return b, nil +} +func appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(*p)) + return b, nil +} +func appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v)) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v)) + } + return b, nil +} +func appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt32() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := ptr.getInt32Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + return b, nil +} +func appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := ptr.getInt32Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31)))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + } + return b, nil +} +func appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toInt64() + if v == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toInt64Ptr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + v := *p + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + return b, nil +} +func appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toInt64Slice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + // compute size + n := 0 + for _, v := range s { + n += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63))) + } + b = appendVarint(b, uint64(n)) + for _, v := range s { + b = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63))) + } + return b, nil +} +func appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBool() + if !v { + return b, nil + } + b = appendVarint(b, wiretag) + b = append(b, 1) + return b, nil +} + +func appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toBoolPtr() + if p == nil { + return b, nil + } + b = appendVarint(b, wiretag) + if *p { + b = append(b, 1) + } else { + b = append(b, 0) + } + return b, nil +} +func appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBoolSlice() + if len(s) == 0 { + return b, nil + } + b = appendVarint(b, wiretag&^7|WireBytes) + b = appendVarint(b, uint64(len(s))) + for _, v := range s { + if v { + b = append(b, 1) + } else { + b = append(b, 0) + } + } + return b, nil +} +func appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toString() + if v == "" { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toStringSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} +func appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + v := *ptr.toString() + if v == "" { + return b, nil + } + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + p := *ptr.toStringPtr() + if p == nil { + return b, nil + } + v := *p + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + var invalidUTF8 bool + s := *ptr.toStringSlice() + for _, v := range s { + if !utf8.ValidString(v) { + invalidUTF8 = true + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + if invalidUTF8 { + return b, errInvalidUTF8 + } + return b, nil +} +func appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if v == nil { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + if len(v) == 0 { + return b, nil + } + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + v := *ptr.toBytes() + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + return b, nil +} +func appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) { + s := *ptr.toBytesSlice() + for _, v := range s { + b = appendVarint(b, wiretag) + b = appendVarint(b, uint64(len(v))) + b = append(b, v...) + } + return b, nil +} + +// makeGroupMarshaler returns the sizer and marshaler for a group. +// u is the marshal info of the underlying message. +func makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + return u.size(p) + 2*tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + var err error + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, p, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + return b, err + } +} + +// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice. +// u is the marshal info of the underlying message. +func makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + n += u.size(v) + 2*tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) // start group + b, err = u.marshal(b, v, deterministic) + b = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMessageMarshaler returns the sizer and marshaler for a message field. +// u is the marshal info of the message. +func makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.size(p) + return siz + SizeVarint(uint64(siz)) + tagsize + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + p := ptr.getPointer() + if p.isNil() { + return b, nil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(p) + b = appendVarint(b, uint64(siz)) + return u.marshal(b, p, deterministic) + } +} + +// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice. +// u is the marshal info of the message. +func makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) { + return func(ptr pointer, tagsize int) int { + s := ptr.getPointerSlice() + n := 0 + for _, v := range s { + if v.isNil() { + continue + } + siz := u.size(v) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) { + s := ptr.getPointerSlice() + var err error + var nerr nonFatal + for _, v := range s { + if v.isNil() { + return b, errRepeatedHasNil + } + b = appendVarint(b, wiretag) + siz := u.cachedsize(v) + b = appendVarint(b, uint64(siz)) + b, err = u.marshal(b, v, deterministic) + + if !nerr.Merge(err) { + if err == ErrNil { + err = errRepeatedHasNil + } + return b, err + } + } + return b, nerr.E + } +} + +// makeMapMarshaler returns the sizer and marshaler for a map field. +// f is the pointer to the reflect data structure of the field. +func makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) { + // figure out key and value type + t := f.Type + keyType := t.Key() + valType := t.Elem() + keyTags := strings.Split(f.Tag.Get("protobuf_key"), ",") + valTags := strings.Split(f.Tag.Get("protobuf_val"), ",") + keySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map + valSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map + keyWireTag := 1<<3 | wiretype(keyTags[0]) + valWireTag := 2<<3 | wiretype(valTags[0]) + + // We create an interface to get the addresses of the map key and value. + // If value is pointer-typed, the interface is a direct interface, the + // idata itself is the value. Otherwise, the idata is the pointer to the + // value. + // Key cannot be pointer-typed. + valIsPtr := valType.Kind() == reflect.Ptr + + // If value is a message with nested maps, calling + // valSizer in marshal may be quadratic. We should use + // cached version in marshal (but not in size). + // If value is not message type, we don't have size cache, + // but it cannot be nested either. Just use valSizer. + valCachedSizer := valSizer + if valIsPtr && valType.Elem().Kind() == reflect.Struct { + u := getMarshalInfo(valType.Elem()) + valCachedSizer = func(ptr pointer, tagsize int) int { + // Same as message sizer, but use cache. + p := ptr.getPointer() + if p.isNil() { + return 0 + } + siz := u.cachedsize(p) + return siz + SizeVarint(uint64(siz)) + tagsize + } + } + return func(ptr pointer, tagsize int) int { + m := ptr.asPointerTo(t).Elem() // the map + n := 0 + for _, k := range m.MapKeys() { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value + siz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + n += siz + SizeVarint(uint64(siz)) + tagsize + } + return n + }, + func(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) { + m := ptr.asPointerTo(t).Elem() // the map + var err error + keys := m.MapKeys() + if len(keys) > 1 && deterministic { + sort.Sort(mapKeys(keys)) + } + + var nerr nonFatal + for _, k := range keys { + ki := k.Interface() + vi := m.MapIndex(k).Interface() + kaddr := toAddrPointer(&ki, false, false) // pointer to key + vaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value + b = appendVarint(b, tag) + siz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1) + b = appendVarint(b, uint64(siz)) + b, err = keyMarshaler(b, kaddr, keyWireTag, deterministic) + if !nerr.Merge(err) { + return b, err + } + b, err = valMarshaler(b, vaddr, valWireTag, deterministic) + if err != ErrNil && !nerr.Merge(err) { // allow nil value in map + return b, err + } + } + return b, nerr.E + } +} + +// makeOneOfMarshaler returns the sizer and marshaler for a oneof field. +// fi is the marshal info of the field. +// f is the pointer to the reflect data structure of the field. +func makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) { + // Oneof field is an interface. We need to get the actual data type on the fly. + t := f.Type + return func(ptr pointer, _ int) int { + p := ptr.getInterfacePointer() + if p.isNil() { + return 0 + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + e := fi.oneofElems[telem] + return e.sizer(p, e.tagsize) + }, + func(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) { + p := ptr.getInterfacePointer() + if p.isNil() { + return b, nil + } + v := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct + telem := v.Type() + if telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() { + return b, errOneofHasNil + } + e := fi.oneofElems[telem] + return e.marshaler(b, p, e.wiretag, deterministic) + } +} + +// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field. +func (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, ei.tagsize) + } + mu.Unlock() + return n +} + +// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b. +func (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// message set format is: +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// }; +// } + +// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field +// in message set format (above). +func (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int { + m, mu := ext.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + + n := 0 + for id, e := range m { + n += 2 // start group, end group. tag = 1 (size=1) + n += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + siz := len(msgWithLen) + n += siz + 1 // message, tag = 3 (size=1) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, 1) // message, tag = 3 (size=1) + } + mu.Unlock() + return n +} + +// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above) +// to the end of byte slice b. +func (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) { + m, mu := ext.extensionsRead() + if m == nil { + return b, nil + } + mu.Lock() + defer mu.Unlock() + + var err error + var nerr nonFatal + + // Fast-path for common cases: zero or one extensions. + // Don't bother sorting the keys. + if len(m) <= 1 { + for id, e := range m { + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + if !nerr.Merge(err) { + return b, err + } + b = append(b, 1<<3|WireEndGroup) + } + return b, nerr.E + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + for _, id := range keys { + e := m[int32(id)] + b = append(b, 1<<3|WireStartGroup) + b = append(b, 2<<3|WireVarint) + b = appendVarint(b, uint64(id)) + + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + msgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint + b = append(b, 3<<3|WireBytes) + b = append(b, msgWithLen...) + b = append(b, 1<<3|WireEndGroup) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic) + b = append(b, 1<<3|WireEndGroup) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// sizeV1Extensions computes the size of encoded data for a V1-API extension field. +func (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int { + if m == nil { + return 0 + } + + n := 0 + for _, e := range m { + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + n += len(e.enc) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + n += ei.sizer(p, ei.tagsize) + } + return n +} + +// appendV1Extensions marshals a V1-API extension field to the end of byte slice b. +func (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) { + if m == nil { + return b, nil + } + + // Sort the keys to provide a deterministic encoding. + keys := make([]int, 0, len(m)) + for k := range m { + keys = append(keys, int(k)) + } + sort.Ints(keys) + + var err error + var nerr nonFatal + for _, k := range keys { + e := m[int32(k)] + if e.value == nil || e.desc == nil { + // Extension is only in its encoded form. + b = append(b, e.enc...) + continue + } + + // We don't skip extensions that have an encoded form set, + // because the extension value may have been mutated after + // the last time this function was called. + + ei := u.getExtElemInfo(e.desc) + v := e.value + p := toAddrPointer(&v, ei.isptr, ei.deref) + b, err = ei.marshaler(b, p, ei.wiretag, deterministic) + if !nerr.Merge(err) { + return b, err + } + } + return b, nerr.E +} + +// newMarshaler is the interface representing objects that can marshal themselves. +// +// This exists to support protoc-gen-go generated messages. +// The proto package will stop type-asserting to this interface in the future. +// +// DO NOT DEPEND ON THIS. +type newMarshaler interface { + XXX_Size() int + XXX_Marshal(b []byte, deterministic bool) ([]byte, error) +} + +// Size returns the encoded size of a protocol buffer message. +// This is the main entry point. +func Size(pb Message) int { + if m, ok := pb.(newMarshaler); ok { + return m.XXX_Size() + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, _ := m.Marshal() + return len(b) + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return 0 + } + var info InternalMessageInfo + return info.Size(pb) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, returning the data. +// This is the main entry point. +func Marshal(pb Message) ([]byte, error) { + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + b := make([]byte, 0, siz) + return m.XXX_Marshal(b, false) + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + return m.Marshal() + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return nil, ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + b := make([]byte, 0, siz) + return info.Marshal(b, pb, false) +} + +// Marshal takes a protocol buffer message +// and encodes it into the wire format, writing the result to the +// Buffer. +// This is an alternative entry point. It is not necessary to use +// a Buffer for most applications. +func (p *Buffer) Marshal(pb Message) error { + var err error + if m, ok := pb.(newMarshaler); ok { + siz := m.XXX_Size() + p.grow(siz) // make sure buf has enough capacity + p.buf, err = m.XXX_Marshal(p.buf, p.deterministic) + return err + } + if m, ok := pb.(Marshaler); ok { + // If the message can marshal itself, let it do it, for compatibility. + // NOTE: This is not efficient. + b, err := m.Marshal() + p.buf = append(p.buf, b...) + return err + } + // in case somehow we didn't generate the wrapper + if pb == nil { + return ErrNil + } + var info InternalMessageInfo + siz := info.Size(pb) + p.grow(siz) // make sure buf has enough capacity + p.buf, err = info.Marshal(p.buf, pb, p.deterministic) + return err +} + +// grow grows the buffer's capacity, if necessary, to guarantee space for +// another n bytes. After grow(n), at least n bytes can be written to the +// buffer without another allocation. +func (p *Buffer) grow(n int) { + need := len(p.buf) + n + if need <= cap(p.buf) { + return + } + newCap := len(p.buf) * 2 + if newCap < need { + newCap = need + } + p.buf = append(make([]byte, 0, newCap), p.buf...) +} diff --git a/vendor/github.com/golang/protobuf/proto/table_merge.go b/vendor/github.com/golang/protobuf/proto/table_merge.go new file mode 100644 index 000000000000..5525def6a5da --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_merge.go @@ -0,0 +1,654 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "fmt" + "reflect" + "strings" + "sync" + "sync/atomic" +) + +// Merge merges the src message into dst. +// This assumes that dst and src of the same type and are non-nil. +func (a *InternalMessageInfo) Merge(dst, src Message) { + mi := atomicLoadMergeInfo(&a.merge) + if mi == nil { + mi = getMergeInfo(reflect.TypeOf(dst).Elem()) + atomicStoreMergeInfo(&a.merge, mi) + } + mi.merge(toPointer(&dst), toPointer(&src)) +} + +type mergeInfo struct { + typ reflect.Type + + initialized int32 // 0: only typ is valid, 1: everything is valid + lock sync.Mutex + + fields []mergeFieldInfo + unrecognized field // Offset of XXX_unrecognized +} + +type mergeFieldInfo struct { + field field // Offset of field, guaranteed to be valid + + // isPointer reports whether the value in the field is a pointer. + // This is true for the following situations: + // * Pointer to struct + // * Pointer to basic type (proto2 only) + // * Slice (first value in slice header is a pointer) + // * String (first value in string header is a pointer) + isPointer bool + + // basicWidth reports the width of the field assuming that it is directly + // embedded in the struct (as is the case for basic types in proto3). + // The possible values are: + // 0: invalid + // 1: bool + // 4: int32, uint32, float32 + // 8: int64, uint64, float64 + basicWidth int + + // Where dst and src are pointers to the types being merged. + merge func(dst, src pointer) +} + +var ( + mergeInfoMap = map[reflect.Type]*mergeInfo{} + mergeInfoLock sync.Mutex +) + +func getMergeInfo(t reflect.Type) *mergeInfo { + mergeInfoLock.Lock() + defer mergeInfoLock.Unlock() + mi := mergeInfoMap[t] + if mi == nil { + mi = &mergeInfo{typ: t} + mergeInfoMap[t] = mi + } + return mi +} + +// merge merges src into dst assuming they are both of type *mi.typ. +func (mi *mergeInfo) merge(dst, src pointer) { + if dst.isNil() { + panic("proto: nil destination") + } + if src.isNil() { + return // Nothing to do. + } + + if atomic.LoadInt32(&mi.initialized) == 0 { + mi.computeMergeInfo() + } + + for _, fi := range mi.fields { + sfp := src.offset(fi.field) + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string + continue + } + if fi.basicWidth > 0 { + switch { + case fi.basicWidth == 1 && !*sfp.toBool(): + continue + case fi.basicWidth == 4 && *sfp.toUint32() == 0: + continue + case fi.basicWidth == 8 && *sfp.toUint64() == 0: + continue + } + } + } + + dfp := dst.offset(fi.field) + fi.merge(dfp, sfp) + } + + // TODO: Make this faster? + out := dst.asPointerTo(mi.typ).Elem() + in := src.asPointerTo(mi.typ).Elem() + if emIn, err := extendable(in.Addr().Interface()); err == nil { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } + } + + if mi.unrecognized.IsValid() { + if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { + *dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) + } + } +} + +func (mi *mergeInfo) computeMergeInfo() { + mi.lock.Lock() + defer mi.lock.Unlock() + if mi.initialized != 0 { + return + } + t := mi.typ + n := t.NumField() + + props := GetProperties(t) + for i := 0; i < n; i++ { + f := t.Field(i) + if strings.HasPrefix(f.Name, "XXX_") { + continue + } + + mfi := mergeFieldInfo{field: toField(&f)} + tf := f.Type + + // As an optimization, we can avoid the merge function call cost + // if we know for sure that the source will have no effect + // by checking if it is the zero value. + if unsafeAllowed { + switch tf.Kind() { + case reflect.Ptr, reflect.Slice, reflect.String: + // As a special case, we assume slices and strings are pointers + // since we know that the first field in the SliceSlice or + // StringHeader is a data pointer. + mfi.isPointer = true + case reflect.Bool: + mfi.basicWidth = 1 + case reflect.Int32, reflect.Uint32, reflect.Float32: + mfi.basicWidth = 4 + case reflect.Int64, reflect.Uint64, reflect.Float64: + mfi.basicWidth = 8 + } + } + + // Unwrap tf to get at its most basic type. + var isPointer, isSlice bool + if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { + isSlice = true + tf = tf.Elem() + } + if tf.Kind() == reflect.Ptr { + isPointer = true + tf = tf.Elem() + } + if isPointer && isSlice && tf.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + tf.Name()) + } + + switch tf.Kind() { + case reflect.Int32: + switch { + case isSlice: // E.g., []int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Slice is not defined (see pointer_reflect.go). + /* + sfsp := src.toInt32Slice() + if *sfsp != nil { + dfsp := dst.toInt32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + */ + sfs := src.getInt32Slice() + if sfs != nil { + dfs := dst.getInt32Slice() + dfs = append(dfs, sfs...) + if dfs == nil { + dfs = []int32{} + } + dst.setInt32Slice(dfs) + } + } + case isPointer: // E.g., *int32 + mfi.merge = func(dst, src pointer) { + // NOTE: toInt32Ptr is not defined (see pointer_reflect.go). + /* + sfpp := src.toInt32Ptr() + if *sfpp != nil { + dfpp := dst.toInt32Ptr() + if *dfpp == nil { + *dfpp = Int32(**sfpp) + } else { + **dfpp = **sfpp + } + } + */ + sfp := src.getInt32Ptr() + if sfp != nil { + dfp := dst.getInt32Ptr() + if dfp == nil { + dst.setInt32Ptr(*sfp) + } else { + *dfp = *sfp + } + } + } + default: // E.g., int32 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt32(); v != 0 { + *dst.toInt32() = v + } + } + } + case reflect.Int64: + switch { + case isSlice: // E.g., []int64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toInt64Slice() + if *sfsp != nil { + dfsp := dst.toInt64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []int64{} + } + } + } + case isPointer: // E.g., *int64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toInt64Ptr() + if *sfpp != nil { + dfpp := dst.toInt64Ptr() + if *dfpp == nil { + *dfpp = Int64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., int64 + mfi.merge = func(dst, src pointer) { + if v := *src.toInt64(); v != 0 { + *dst.toInt64() = v + } + } + } + case reflect.Uint32: + switch { + case isSlice: // E.g., []uint32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint32Slice() + if *sfsp != nil { + dfsp := dst.toUint32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint32{} + } + } + } + case isPointer: // E.g., *uint32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint32Ptr() + if *sfpp != nil { + dfpp := dst.toUint32Ptr() + if *dfpp == nil { + *dfpp = Uint32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint32 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint32(); v != 0 { + *dst.toUint32() = v + } + } + } + case reflect.Uint64: + switch { + case isSlice: // E.g., []uint64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toUint64Slice() + if *sfsp != nil { + dfsp := dst.toUint64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []uint64{} + } + } + } + case isPointer: // E.g., *uint64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toUint64Ptr() + if *sfpp != nil { + dfpp := dst.toUint64Ptr() + if *dfpp == nil { + *dfpp = Uint64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., uint64 + mfi.merge = func(dst, src pointer) { + if v := *src.toUint64(); v != 0 { + *dst.toUint64() = v + } + } + } + case reflect.Float32: + switch { + case isSlice: // E.g., []float32 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat32Slice() + if *sfsp != nil { + dfsp := dst.toFloat32Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float32{} + } + } + } + case isPointer: // E.g., *float32 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat32Ptr() + if *sfpp != nil { + dfpp := dst.toFloat32Ptr() + if *dfpp == nil { + *dfpp = Float32(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float32 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat32(); v != 0 { + *dst.toFloat32() = v + } + } + } + case reflect.Float64: + switch { + case isSlice: // E.g., []float64 + mfi.merge = func(dst, src pointer) { + sfsp := src.toFloat64Slice() + if *sfsp != nil { + dfsp := dst.toFloat64Slice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []float64{} + } + } + } + case isPointer: // E.g., *float64 + mfi.merge = func(dst, src pointer) { + sfpp := src.toFloat64Ptr() + if *sfpp != nil { + dfpp := dst.toFloat64Ptr() + if *dfpp == nil { + *dfpp = Float64(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., float64 + mfi.merge = func(dst, src pointer) { + if v := *src.toFloat64(); v != 0 { + *dst.toFloat64() = v + } + } + } + case reflect.Bool: + switch { + case isSlice: // E.g., []bool + mfi.merge = func(dst, src pointer) { + sfsp := src.toBoolSlice() + if *sfsp != nil { + dfsp := dst.toBoolSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []bool{} + } + } + } + case isPointer: // E.g., *bool + mfi.merge = func(dst, src pointer) { + sfpp := src.toBoolPtr() + if *sfpp != nil { + dfpp := dst.toBoolPtr() + if *dfpp == nil { + *dfpp = Bool(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., bool + mfi.merge = func(dst, src pointer) { + if v := *src.toBool(); v { + *dst.toBool() = v + } + } + } + case reflect.String: + switch { + case isSlice: // E.g., []string + mfi.merge = func(dst, src pointer) { + sfsp := src.toStringSlice() + if *sfsp != nil { + dfsp := dst.toStringSlice() + *dfsp = append(*dfsp, *sfsp...) + if *dfsp == nil { + *dfsp = []string{} + } + } + } + case isPointer: // E.g., *string + mfi.merge = func(dst, src pointer) { + sfpp := src.toStringPtr() + if *sfpp != nil { + dfpp := dst.toStringPtr() + if *dfpp == nil { + *dfpp = String(**sfpp) + } else { + **dfpp = **sfpp + } + } + } + default: // E.g., string + mfi.merge = func(dst, src pointer) { + if v := *src.toString(); v != "" { + *dst.toString() = v + } + } + } + case reflect.Slice: + isProto3 := props.Prop[i].proto3 + switch { + case isPointer: + panic("bad pointer in byte slice case in " + tf.Name()) + case tf.Elem().Kind() != reflect.Uint8: + panic("bad element kind in byte slice case in " + tf.Name()) + case isSlice: // E.g., [][]byte + mfi.merge = func(dst, src pointer) { + sbsp := src.toBytesSlice() + if *sbsp != nil { + dbsp := dst.toBytesSlice() + for _, sb := range *sbsp { + if sb == nil { + *dbsp = append(*dbsp, nil) + } else { + *dbsp = append(*dbsp, append([]byte{}, sb...)) + } + } + if *dbsp == nil { + *dbsp = [][]byte{} + } + } + } + default: // E.g., []byte + mfi.merge = func(dst, src pointer) { + sbp := src.toBytes() + if *sbp != nil { + dbp := dst.toBytes() + if !isProto3 || len(*sbp) > 0 { + *dbp = append([]byte{}, *sbp...) + } + } + } + } + case reflect.Struct: + switch { + case !isPointer: + panic(fmt.Sprintf("message field %s without pointer", tf)) + case isSlice: // E.g., []*pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sps := src.getPointerSlice() + if sps != nil { + dps := dst.getPointerSlice() + for _, sp := range sps { + var dp pointer + if !sp.isNil() { + dp = valToPointer(reflect.New(tf)) + mi.merge(dp, sp) + } + dps = append(dps, dp) + } + if dps == nil { + dps = []pointer{} + } + dst.setPointerSlice(dps) + } + } + default: // E.g., *pb.T + mi := getMergeInfo(tf) + mfi.merge = func(dst, src pointer) { + sp := src.getPointer() + if !sp.isNil() { + dp := dst.getPointer() + if dp.isNil() { + dp = valToPointer(reflect.New(tf)) + dst.setPointer(dp) + } + mi.merge(dp, sp) + } + } + } + case reflect.Map: + switch { + case isPointer || isSlice: + panic("bad pointer or slice in map case in " + tf.Name()) + default: // E.g., map[K]V + mfi.merge = func(dst, src pointer) { + sm := src.asPointerTo(tf).Elem() + if sm.Len() == 0 { + return + } + dm := dst.asPointerTo(tf).Elem() + if dm.IsNil() { + dm.Set(reflect.MakeMap(tf)) + } + + switch tf.Elem().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(Clone(val.Interface().(Message))) + dm.SetMapIndex(key, val) + } + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) + dm.SetMapIndex(key, val) + } + default: // Basic type (e.g., string) + for _, key := range sm.MapKeys() { + val := sm.MapIndex(key) + dm.SetMapIndex(key, val) + } + } + } + } + case reflect.Interface: + // Must be oneof field. + switch { + case isPointer || isSlice: + panic("bad pointer or slice in interface case in " + tf.Name()) + default: // E.g., interface{} + // TODO: Make this faster? + mfi.merge = func(dst, src pointer) { + su := src.asPointerTo(tf).Elem() + if !su.IsNil() { + du := dst.asPointerTo(tf).Elem() + typ := su.Elem().Type() + if du.IsNil() || du.Elem().Type() != typ { + du.Set(reflect.New(typ.Elem())) // Initialize interface if empty + } + sv := su.Elem().Elem().Field(0) + if sv.Kind() == reflect.Ptr && sv.IsNil() { + return + } + dv := du.Elem().Elem().Field(0) + if dv.Kind() == reflect.Ptr && dv.IsNil() { + dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty + } + switch sv.Type().Kind() { + case reflect.Ptr: // Proto struct (e.g., *T) + Merge(dv.Interface().(Message), sv.Interface().(Message)) + case reflect.Slice: // E.g. Bytes type (e.g., []byte) + dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) + default: // Basic type (e.g., string) + dv.Set(sv) + } + } + } + } + default: + panic(fmt.Sprintf("merger not found for type:%s", tf)) + } + mi.fields = append(mi.fields, mfi) + } + + mi.unrecognized = invalidField + if f, ok := t.FieldByName("XXX_unrecognized"); ok { + if f.Type != reflect.TypeOf([]byte{}) { + panic("expected XXX_unrecognized to be of type []byte") + } + mi.unrecognized = toField(&f) + } + + atomic.StoreInt32(&mi.initialized, 1) +} diff --git a/vendor/github.com/golang/protobuf/proto/table_unmarshal.go b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go new file mode 100644 index 000000000000..acee2fc52964 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/table_unmarshal.go @@ -0,0 +1,2053 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto + +import ( + "errors" + "fmt" + "io" + "math" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + "unicode/utf8" +) + +// Unmarshal is the entry point from the generated .pb.go files. +// This function is not intended to be used by non-generated code. +// This function is not subject to any compatibility guarantee. +// msg contains a pointer to a protocol buffer struct. +// b is the data to be unmarshaled into the protocol buffer. +// a is a pointer to a place to store cached unmarshal information. +func (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error { + // Load the unmarshal information for this message type. + // The atomic load ensures memory consistency. + u := atomicLoadUnmarshalInfo(&a.unmarshal) + if u == nil { + // Slow path: find unmarshal info for msg, update a with it. + u = getUnmarshalInfo(reflect.TypeOf(msg).Elem()) + atomicStoreUnmarshalInfo(&a.unmarshal, u) + } + // Then do the unmarshaling. + err := u.unmarshal(toPointer(&msg), b) + return err +} + +type unmarshalInfo struct { + typ reflect.Type // type of the protobuf struct + + // 0 = only typ field is initialized + // 1 = completely initialized + initialized int32 + lock sync.Mutex // prevents double initialization + dense []unmarshalFieldInfo // fields indexed by tag # + sparse map[uint64]unmarshalFieldInfo // fields indexed by tag # + reqFields []string // names of required fields + reqMask uint64 // 1< 0 { + // Read tag and wire type. + // Special case 1 and 2 byte varints. + var x uint64 + if b[0] < 128 { + x = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + x = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + x, n = decodeVarint(b) + if n == 0 { + return io.ErrUnexpectedEOF + } + b = b[n:] + } + tag := x >> 3 + wire := int(x) & 7 + + // Dispatch on the tag to one of the unmarshal* functions below. + var f unmarshalFieldInfo + if tag < uint64(len(u.dense)) { + f = u.dense[tag] + } else { + f = u.sparse[tag] + } + if fn := f.unmarshal; fn != nil { + var err error + b, err = fn(b, m.offset(f.field), wire) + if err == nil { + reqMask |= f.reqMask + continue + } + if r, ok := err.(*RequiredNotSetError); ok { + // Remember this error, but keep parsing. We need to produce + // a full parse even if a required field is missing. + if errLater == nil { + errLater = r + } + reqMask |= f.reqMask + continue + } + if err != errInternalBadWireType { + if err == errInvalidUTF8 { + if errLater == nil { + fullName := revProtoTypes[reflect.PtrTo(u.typ)] + "." + f.name + errLater = &invalidUTF8Error{fullName} + } + continue + } + return err + } + // Fragments with bad wire type are treated as unknown fields. + } + + // Unknown tag. + if !u.unrecognized.IsValid() { + // Don't keep unrecognized data; just skip it. + var err error + b, err = skipField(b, wire) + if err != nil { + return err + } + continue + } + // Keep unrecognized data around. + // maybe in extensions, maybe in the unrecognized field. + z := m.offset(u.unrecognized).toBytes() + var emap map[int32]Extension + var e Extension + for _, r := range u.extensionRanges { + if uint64(r.Start) <= tag && tag <= uint64(r.End) { + if u.extensions.IsValid() { + mp := m.offset(u.extensions).toExtensions() + emap = mp.extensionsWrite() + e = emap[int32(tag)] + z = &e.enc + break + } + if u.oldExtensions.IsValid() { + p := m.offset(u.oldExtensions).toOldExtensions() + emap = *p + if emap == nil { + emap = map[int32]Extension{} + *p = emap + } + e = emap[int32(tag)] + z = &e.enc + break + } + panic("no extensions field available") + } + } + + // Use wire type to skip data. + var err error + b0 := b + b, err = skipField(b, wire) + if err != nil { + return err + } + *z = encodeVarint(*z, tag<<3|uint64(wire)) + *z = append(*z, b0[:len(b0)-len(b)]...) + + if emap != nil { + emap[int32(tag)] = e + } + } + if reqMask != u.reqMask && errLater == nil { + // A required field of this message is missing. + for _, n := range u.reqFields { + if reqMask&1 == 0 { + errLater = &RequiredNotSetError{n} + } + reqMask >>= 1 + } + } + return errLater +} + +// computeUnmarshalInfo fills in u with information for use +// in unmarshaling protocol buffers of type u.typ. +func (u *unmarshalInfo) computeUnmarshalInfo() { + u.lock.Lock() + defer u.lock.Unlock() + if u.initialized != 0 { + return + } + t := u.typ + n := t.NumField() + + // Set up the "not found" value for the unrecognized byte buffer. + // This is the default for proto3. + u.unrecognized = invalidField + u.extensions = invalidField + u.oldExtensions = invalidField + + // List of the generated type and offset for each oneof field. + type oneofField struct { + ityp reflect.Type // interface type of oneof field + field field // offset in containing message + } + var oneofFields []oneofField + + for i := 0; i < n; i++ { + f := t.Field(i) + if f.Name == "XXX_unrecognized" { + // The byte slice used to hold unrecognized input is special. + if f.Type != reflect.TypeOf(([]byte)(nil)) { + panic("bad type for XXX_unrecognized field: " + f.Type.Name()) + } + u.unrecognized = toField(&f) + continue + } + if f.Name == "XXX_InternalExtensions" { + // Ditto here. + if f.Type != reflect.TypeOf(XXX_InternalExtensions{}) { + panic("bad type for XXX_InternalExtensions field: " + f.Type.Name()) + } + u.extensions = toField(&f) + if f.Tag.Get("protobuf_messageset") == "1" { + u.isMessageSet = true + } + continue + } + if f.Name == "XXX_extensions" { + // An older form of the extensions field. + if f.Type != reflect.TypeOf((map[int32]Extension)(nil)) { + panic("bad type for XXX_extensions field: " + f.Type.Name()) + } + u.oldExtensions = toField(&f) + continue + } + if f.Name == "XXX_NoUnkeyedLiteral" || f.Name == "XXX_sizecache" { + continue + } + + oneof := f.Tag.Get("protobuf_oneof") + if oneof != "" { + oneofFields = append(oneofFields, oneofField{f.Type, toField(&f)}) + // The rest of oneof processing happens below. + continue + } + + tags := f.Tag.Get("protobuf") + tagArray := strings.Split(tags, ",") + if len(tagArray) < 2 { + panic("protobuf tag not enough fields in " + t.Name() + "." + f.Name + ": " + tags) + } + tag, err := strconv.Atoi(tagArray[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tagArray[1]) + } + + name := "" + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + } + + // Extract unmarshaling function from the field (its type and tags). + unmarshal := fieldUnmarshaler(&f) + + // Required field? + var reqMask uint64 + if tagArray[2] == "req" { + bit := len(u.reqFields) + u.reqFields = append(u.reqFields, name) + reqMask = uint64(1) << uint(bit) + // TODO: if we have more than 64 required fields, we end up + // not verifying that all required fields are present. + // Fix this, perhaps using a count of required fields? + } + + // Store the info in the correct slot in the message. + u.setTag(tag, toField(&f), unmarshal, reqMask, name) + } + + // Find any types associated with oneof fields. + var oneofImplementers []interface{} + switch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) { + case oneofFuncsIface: + _, _, _, oneofImplementers = m.XXX_OneofFuncs() + case oneofWrappersIface: + oneofImplementers = m.XXX_OneofWrappers() + } + for _, v := range oneofImplementers { + tptr := reflect.TypeOf(v) // *Msg_X + typ := tptr.Elem() // Msg_X + + f := typ.Field(0) // oneof implementers have one field + baseUnmarshal := fieldUnmarshaler(&f) + tags := strings.Split(f.Tag.Get("protobuf"), ",") + fieldNum, err := strconv.Atoi(tags[1]) + if err != nil { + panic("protobuf tag field not an integer: " + tags[1]) + } + var name string + for _, tag := range tags { + if strings.HasPrefix(tag, "name=") { + name = strings.TrimPrefix(tag, "name=") + break + } + } + + // Find the oneof field that this struct implements. + // Might take O(n^2) to process all of the oneofs, but who cares. + for _, of := range oneofFields { + if tptr.Implements(of.ityp) { + // We have found the corresponding interface for this struct. + // That lets us know where this struct should be stored + // when we encounter it during unmarshaling. + unmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal) + u.setTag(fieldNum, of.field, unmarshal, 0, name) + } + } + + } + + // Get extension ranges, if any. + fn := reflect.Zero(reflect.PtrTo(t)).MethodByName("ExtensionRangeArray") + if fn.IsValid() { + if !u.extensions.IsValid() && !u.oldExtensions.IsValid() { + panic("a message with extensions, but no extensions field in " + t.Name()) + } + u.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange) + } + + // Explicitly disallow tag 0. This will ensure we flag an error + // when decoding a buffer of all zeros. Without this code, we + // would decode and skip an all-zero buffer of even length. + // [0 0] is [tag=0/wiretype=varint varint-encoded-0]. + u.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) { + return nil, fmt.Errorf("proto: %s: illegal tag 0 (wire type %d)", t, w) + }, 0, "") + + // Set mask for required field check. + u.reqMask = uint64(1)<= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here? + for len(u.dense) <= tag { + u.dense = append(u.dense, unmarshalFieldInfo{}) + } + u.dense[tag] = i + return + } + if u.sparse == nil { + u.sparse = map[uint64]unmarshalFieldInfo{} + } + u.sparse[uint64(tag)] = i +} + +// fieldUnmarshaler returns an unmarshaler for the given field. +func fieldUnmarshaler(f *reflect.StructField) unmarshaler { + if f.Type.Kind() == reflect.Map { + return makeUnmarshalMap(f) + } + return typeUnmarshaler(f.Type, f.Tag.Get("protobuf")) +} + +// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair. +func typeUnmarshaler(t reflect.Type, tags string) unmarshaler { + tagArray := strings.Split(tags, ",") + encoding := tagArray[0] + name := "unknown" + proto3 := false + validateUTF8 := true + for _, tag := range tagArray[3:] { + if strings.HasPrefix(tag, "name=") { + name = tag[5:] + } + if tag == "proto3" { + proto3 = true + } + } + validateUTF8 = validateUTF8 && proto3 + + // Figure out packaging (pointer, slice, or both) + slice := false + pointer := false + if t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 { + slice = true + t = t.Elem() + } + if t.Kind() == reflect.Ptr { + pointer = true + t = t.Elem() + } + + // We'll never have both pointer and slice for basic types. + if pointer && slice && t.Kind() != reflect.Struct { + panic("both pointer and slice for basic type in " + t.Name()) + } + + switch t.Kind() { + case reflect.Bool: + if pointer { + return unmarshalBoolPtr + } + if slice { + return unmarshalBoolSlice + } + return unmarshalBoolValue + case reflect.Int32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixedS32Ptr + } + if slice { + return unmarshalFixedS32Slice + } + return unmarshalFixedS32Value + case "varint": + // this could be int32 or enum + if pointer { + return unmarshalInt32Ptr + } + if slice { + return unmarshalInt32Slice + } + return unmarshalInt32Value + case "zigzag32": + if pointer { + return unmarshalSint32Ptr + } + if slice { + return unmarshalSint32Slice + } + return unmarshalSint32Value + } + case reflect.Int64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixedS64Ptr + } + if slice { + return unmarshalFixedS64Slice + } + return unmarshalFixedS64Value + case "varint": + if pointer { + return unmarshalInt64Ptr + } + if slice { + return unmarshalInt64Slice + } + return unmarshalInt64Value + case "zigzag64": + if pointer { + return unmarshalSint64Ptr + } + if slice { + return unmarshalSint64Slice + } + return unmarshalSint64Value + } + case reflect.Uint32: + switch encoding { + case "fixed32": + if pointer { + return unmarshalFixed32Ptr + } + if slice { + return unmarshalFixed32Slice + } + return unmarshalFixed32Value + case "varint": + if pointer { + return unmarshalUint32Ptr + } + if slice { + return unmarshalUint32Slice + } + return unmarshalUint32Value + } + case reflect.Uint64: + switch encoding { + case "fixed64": + if pointer { + return unmarshalFixed64Ptr + } + if slice { + return unmarshalFixed64Slice + } + return unmarshalFixed64Value + case "varint": + if pointer { + return unmarshalUint64Ptr + } + if slice { + return unmarshalUint64Slice + } + return unmarshalUint64Value + } + case reflect.Float32: + if pointer { + return unmarshalFloat32Ptr + } + if slice { + return unmarshalFloat32Slice + } + return unmarshalFloat32Value + case reflect.Float64: + if pointer { + return unmarshalFloat64Ptr + } + if slice { + return unmarshalFloat64Slice + } + return unmarshalFloat64Value + case reflect.Map: + panic("map type in typeUnmarshaler in " + t.Name()) + case reflect.Slice: + if pointer { + panic("bad pointer in slice case in " + t.Name()) + } + if slice { + return unmarshalBytesSlice + } + return unmarshalBytesValue + case reflect.String: + if validateUTF8 { + if pointer { + return unmarshalUTF8StringPtr + } + if slice { + return unmarshalUTF8StringSlice + } + return unmarshalUTF8StringValue + } + if pointer { + return unmarshalStringPtr + } + if slice { + return unmarshalStringSlice + } + return unmarshalStringValue + case reflect.Struct: + // message or group field + if !pointer { + panic(fmt.Sprintf("message/group field %s:%s without pointer", t, encoding)) + } + switch encoding { + case "bytes": + if slice { + return makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalMessagePtr(getUnmarshalInfo(t), name) + case "group": + if slice { + return makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name) + } + return makeUnmarshalGroupPtr(getUnmarshalInfo(t), name) + } + } + panic(fmt.Sprintf("unmarshaler not found type:%s encoding:%s", t, encoding)) +} + +// Below are all the unmarshalers for individual fields of various types. + +func unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64() = v + return b, nil +} + +func unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x) + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64() = v + return b, nil +} + +func unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + *f.toInt64Ptr() = &v + return b, nil +} + +func unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int64(x>>1) ^ int64(x)<<63>>63 + s := f.toInt64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64() = v + return b, nil +} + +func unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + *f.toUint64Ptr() = &v + return b, nil +} + +func unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint64(x) + s := f.toUint64Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + *f.toInt32() = v + return b, nil +} + +func unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x) + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + *f.toInt32() = v + return b, nil +} + +func unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.setInt32Ptr(v) + return b, nil +} + +func unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := int32(x>>1) ^ int32(x)<<31>>31 + f.appendInt32Slice(v) + return b, nil +} + +func unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32() = v + return b, nil +} + +func unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + *f.toUint32Ptr() = &v + return b, nil +} + +func unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + v := uint32(x) + s := f.toUint32Slice() + *s = append(*s, v) + return b, nil +} + +func unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64() = v + return b[8:], nil +} + +func unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + *f.toUint64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + s := f.toUint64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64() = v + return b[8:], nil +} + +func unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + *f.toInt64Ptr() = &v + return b[8:], nil +} + +func unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := int64(b[0]) | int64(b[1])<<8 | int64(b[2])<<16 | int64(b[3])<<24 | int64(b[4])<<32 | int64(b[5])<<40 | int64(b[6])<<48 | int64(b[7])<<56 + s := f.toInt64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32() = v + return b[4:], nil +} + +func unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + *f.toUint32Ptr() = &v + return b[4:], nil +} + +func unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + s := f.toUint32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + *f.toInt32() = v + return b[4:], nil +} + +func unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.setInt32Ptr(v) + return b[4:], nil +} + +func unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24 + f.appendInt32Slice(v) + return b[4:], nil +} + +func unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + // Note: any length varint is allowed, even though any sane + // encoder will use one byte. + // See https://github.com/golang/protobuf/issues/76 + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + // TODO: check if x>1? Tests seem to indicate no. + v := x != 0 + *f.toBool() = v + return b[n:], nil +} + +func unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + *f.toBoolPtr() = &v + return b[n:], nil +} + +func unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + x, n = decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + b = b[n:] + } + return res, nil + } + if w != WireVarint { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + v := x != 0 + s := f.toBoolSlice() + *s = append(*s, v) + return b[n:], nil +} + +func unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64() = v + return b[8:], nil +} + +func unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + *f.toFloat64Ptr() = &v + return b[8:], nil +} + +func unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + b = b[8:] + } + return res, nil + } + if w != WireFixed64 { + return b, errInternalBadWireType + } + if len(b) < 8 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float64frombits(uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56) + s := f.toFloat64Slice() + *s = append(*s, v) + return b[8:], nil +} + +func unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32() = v + return b[4:], nil +} + +func unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + *f.toFloat32Ptr() = &v + return b[4:], nil +} + +func unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) { + if w == WireBytes { // packed + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + res := b[x:] + b = b[:x] + for len(b) > 0 { + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + b = b[4:] + } + return res, nil + } + if w != WireFixed32 { + return b, errInternalBadWireType + } + if len(b) < 4 { + return nil, io.ErrUnexpectedEOF + } + v := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24) + s := f.toFloat32Slice() + *s = append(*s, v) + return b[4:], nil +} + +func unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + return b[x:], nil +} + +func unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + return b[x:], nil +} + +func unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + return b[x:], nil +} + +func unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toString() = v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + *f.toStringPtr() = &v + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +func unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := string(b[:x]) + s := f.toStringSlice() + *s = append(*s, v) + if !utf8.ValidString(v) { + return b[x:], errInvalidUTF8 + } + return b[x:], nil +} + +var emptyBuf [0]byte + +func unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // The use of append here is a trick which avoids the zeroing + // that would be required if we used a make/copy pair. + // We append to emptyBuf instead of nil because we want + // a non-nil result even when the length is 0. + v := append(emptyBuf[:], b[:x]...) + *f.toBytes() = v + return b[x:], nil +} + +func unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := append(emptyBuf[:], b[:x]...) + s := f.toBytesSlice() + *s = append(*s, v) + return b[x:], nil +} + +func makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + // First read the message field to see if something is there. + // The semantics of multiple submessages are weird. Instead of + // the last one winning (as it is for all other fields), multiple + // submessages are merged. + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[x:], err + } +} + +func makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireBytes { + return b, errInternalBadWireType + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[x:], err + } +} + +func makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := f.getPointer() + if v.isNil() { + v = valToPointer(reflect.New(sub.typ)) + f.setPointer(v) + } + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + return b[y:], err + } +} + +func makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler { + return func(b []byte, f pointer, w int) ([]byte, error) { + if w != WireStartGroup { + return b, errInternalBadWireType + } + x, y := findEndGroup(b) + if x < 0 { + return nil, io.ErrUnexpectedEOF + } + v := valToPointer(reflect.New(sub.typ)) + err := sub.unmarshal(v, b[:x]) + if err != nil { + if r, ok := err.(*RequiredNotSetError); ok { + r.field = name + "." + r.field + } else { + return nil, err + } + } + f.appendPointer(v) + return b[y:], err + } +} + +func makeUnmarshalMap(f *reflect.StructField) unmarshaler { + t := f.Type + kt := t.Key() + vt := t.Elem() + unmarshalKey := typeUnmarshaler(kt, f.Tag.Get("protobuf_key")) + unmarshalVal := typeUnmarshaler(vt, f.Tag.Get("protobuf_val")) + return func(b []byte, f pointer, w int) ([]byte, error) { + // The map entry is a submessage. Figure out how big it is. + if w != WireBytes { + return nil, fmt.Errorf("proto: bad wiretype for map field: got %d want %d", w, WireBytes) + } + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + b = b[n:] + if x > uint64(len(b)) { + return nil, io.ErrUnexpectedEOF + } + r := b[x:] // unused data to return + b = b[:x] // data for map entry + + // Note: we could use #keys * #values ~= 200 functions + // to do map decoding without reflection. Probably not worth it. + // Maps will be somewhat slow. Oh well. + + // Read key and value from data. + var nerr nonFatal + k := reflect.New(kt) + v := reflect.New(vt) + for len(b) > 0 { + x, n := decodeVarint(b) + if n == 0 { + return nil, io.ErrUnexpectedEOF + } + wire := int(x) & 7 + b = b[n:] + + var err error + switch x >> 3 { + case 1: + b, err = unmarshalKey(b, valToPointer(k), wire) + case 2: + b, err = unmarshalVal(b, valToPointer(v), wire) + default: + err = errInternalBadWireType // skip unknown tag + } + + if nerr.Merge(err) { + continue + } + if err != errInternalBadWireType { + return nil, err + } + + // Skip past unknown fields. + b, err = skipField(b, wire) + if err != nil { + return nil, err + } + } + + // Get map, allocate if needed. + m := f.asPointerTo(t).Elem() // an addressable map[K]T + if m.IsNil() { + m.Set(reflect.MakeMap(t)) + } + + // Insert into map. + m.SetMapIndex(k.Elem(), v.Elem()) + + return r, nerr.E + } +} + +// makeUnmarshalOneof makes an unmarshaler for oneof fields. +// for: +// message Msg { +// oneof F { +// int64 X = 1; +// float64 Y = 2; +// } +// } +// typ is the type of the concrete entry for a oneof case (e.g. Msg_X). +// ityp is the interface type of the oneof field (e.g. isMsg_F). +// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64). +// Note that this function will be called once for each case in the oneof. +func makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler { + sf := typ.Field(0) + field0 := toField(&sf) + return func(b []byte, f pointer, w int) ([]byte, error) { + // Allocate holder for value. + v := reflect.New(typ) + + // Unmarshal data into holder. + // We unmarshal into the first field of the holder object. + var err error + var nerr nonFatal + b, err = unmarshal(b, valToPointer(v).offset(field0), w) + if !nerr.Merge(err) { + return nil, err + } + + // Write pointer to holder into target field. + f.asPointerTo(ityp).Elem().Set(v) + + return b, nerr.E + } +} + +// Error used by decode internally. +var errInternalBadWireType = errors.New("proto: internal error: bad wiretype") + +// skipField skips past a field of type wire and returns the remaining bytes. +func skipField(b []byte, wire int) ([]byte, error) { + switch wire { + case WireVarint: + _, k := decodeVarint(b) + if k == 0 { + return b, io.ErrUnexpectedEOF + } + b = b[k:] + case WireFixed32: + if len(b) < 4 { + return b, io.ErrUnexpectedEOF + } + b = b[4:] + case WireFixed64: + if len(b) < 8 { + return b, io.ErrUnexpectedEOF + } + b = b[8:] + case WireBytes: + m, k := decodeVarint(b) + if k == 0 || uint64(len(b)-k) < m { + return b, io.ErrUnexpectedEOF + } + b = b[uint64(k)+m:] + case WireStartGroup: + _, i := findEndGroup(b) + if i == -1 { + return b, io.ErrUnexpectedEOF + } + b = b[i:] + default: + return b, fmt.Errorf("proto: can't skip unknown wire type %d", wire) + } + return b, nil +} + +// findEndGroup finds the index of the next EndGroup tag. +// Groups may be nested, so the "next" EndGroup tag is the first +// unpaired EndGroup. +// findEndGroup returns the indexes of the start and end of the EndGroup tag. +// Returns (-1,-1) if it can't find one. +func findEndGroup(b []byte) (int, int) { + depth := 1 + i := 0 + for { + x, n := decodeVarint(b[i:]) + if n == 0 { + return -1, -1 + } + j := i + i += n + switch x & 7 { + case WireVarint: + _, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + case WireFixed32: + if len(b)-4 < i { + return -1, -1 + } + i += 4 + case WireFixed64: + if len(b)-8 < i { + return -1, -1 + } + i += 8 + case WireBytes: + m, k := decodeVarint(b[i:]) + if k == 0 { + return -1, -1 + } + i += k + if uint64(len(b)-i) < m { + return -1, -1 + } + i += int(m) + case WireStartGroup: + depth++ + case WireEndGroup: + depth-- + if depth == 0 { + return j, i + } + default: + return -1, -1 + } + } +} + +// encodeVarint appends a varint-encoded integer to b and returns the result. +func encodeVarint(b []byte, x uint64) []byte { + for x >= 1<<7 { + b = append(b, byte(x&0x7f|0x80)) + x >>= 7 + } + return append(b, byte(x)) +} + +// decodeVarint reads a varint-encoded integer from b. +// Returns the decoded integer and the number of bytes read. +// If there is an error, it returns 0,0. +func decodeVarint(b []byte) (uint64, int) { + var x, y uint64 + if len(b) == 0 { + goto bad + } + x = uint64(b[0]) + if x < 0x80 { + return x, 1 + } + x -= 0x80 + + if len(b) <= 1 { + goto bad + } + y = uint64(b[1]) + x += y << 7 + if y < 0x80 { + return x, 2 + } + x -= 0x80 << 7 + + if len(b) <= 2 { + goto bad + } + y = uint64(b[2]) + x += y << 14 + if y < 0x80 { + return x, 3 + } + x -= 0x80 << 14 + + if len(b) <= 3 { + goto bad + } + y = uint64(b[3]) + x += y << 21 + if y < 0x80 { + return x, 4 + } + x -= 0x80 << 21 + + if len(b) <= 4 { + goto bad + } + y = uint64(b[4]) + x += y << 28 + if y < 0x80 { + return x, 5 + } + x -= 0x80 << 28 + + if len(b) <= 5 { + goto bad + } + y = uint64(b[5]) + x += y << 35 + if y < 0x80 { + return x, 6 + } + x -= 0x80 << 35 + + if len(b) <= 6 { + goto bad + } + y = uint64(b[6]) + x += y << 42 + if y < 0x80 { + return x, 7 + } + x -= 0x80 << 42 + + if len(b) <= 7 { + goto bad + } + y = uint64(b[7]) + x += y << 49 + if y < 0x80 { + return x, 8 + } + x -= 0x80 << 49 + + if len(b) <= 8 { + goto bad + } + y = uint64(b[8]) + x += y << 56 + if y < 0x80 { + return x, 9 + } + x -= 0x80 << 56 + + if len(b) <= 9 { + goto bad + } + y = uint64(b[9]) + x += y << 63 + if y < 2 { + return x, 10 + } + +bad: + return 0, 0 +} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go index 965876bf033b..1aaee725b45b 100644 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ b/vendor/github.com/golang/protobuf/proto/text.go @@ -50,7 +50,6 @@ import ( var ( newline = []byte("\n") spaces = []byte(" ") - gtNewline = []byte(">\n") endBraceNewline = []byte("}\n") backslashN = []byte{'\\', 'n'} backslashR = []byte{'\\', 'r'} @@ -170,11 +169,6 @@ func writeName(w *textWriter, props *Properties) error { return nil } -// raw is the interface satisfied by RawMessage. -type raw interface { - Bytes() []byte -} - func requiresQuotes(u string) bool { // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. for _, ch := range u { @@ -269,6 +263,10 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { props := sprops.Prop[i] name := st.Field(i).Name + if name == "XXX_NoUnkeyedLiteral" { + continue + } + if strings.HasPrefix(name, "XXX_") { // There are two XXX_ fields: // XXX_unrecognized []byte @@ -355,7 +353,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := tm.writeAny(w, key, props.mkeyprop); err != nil { + if err := tm.writeAny(w, key, props.MapKeyProp); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -372,7 +370,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := tm.writeAny(w, val, props.mvalprop); err != nil { + if err := tm.writeAny(w, val, props.MapValProp); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -436,12 +434,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if b, ok := fv.Interface().(raw); ok { - if err := writeRaw(w, b.Bytes()); err != nil { - return err - } - continue - } // Enums have a String method, so writeAny will work fine. if err := tm.writeAny(w, fv, props); err != nil { @@ -455,7 +447,7 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { // Extensions (the XXX_extensions field). pv := sv.Addr() - if _, ok := extendable(pv.Interface()); ok { + if _, err := extendable(pv.Interface()); err == nil { if err := tm.writeExtensions(w, pv); err != nil { return err } @@ -464,27 +456,6 @@ func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { return nil } -// writeRaw writes an uninterpreted raw message. -func writeRaw(w *textWriter, b []byte) error { - if err := w.WriteByte('<'); err != nil { - return err - } - if !w.compact { - if err := w.WriteByte('\n'); err != nil { - return err - } - } - w.indent() - if err := writeUnknownStruct(w, b); err != nil { - return err - } - w.unindent() - if err := w.WriteByte('>'); err != nil { - return err - } - return nil -} - // writeAny writes an arbitrary field. func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { v = reflect.Indirect(v) @@ -535,6 +506,19 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert } } w.indent() + if v.CanAddr() { + // Calling v.Interface on a struct causes the reflect package to + // copy the entire struct. This is racy with the new Marshaler + // since we atomically update the XXX_sizecache. + // + // Thus, we retrieve a pointer to the struct if possible to avoid + // a race since v.Interface on the pointer doesn't copy the struct. + // + // If v is not addressable, then we are not worried about a race + // since it implies that the binary Marshaler cannot possibly be + // mutating this value. + v = v.Addr() + } if etm, ok := v.Interface().(encoding.TextMarshaler); ok { text, err := etm.MarshalText() if err != nil { @@ -543,8 +527,13 @@ func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Propert if _, err = w.Write(text); err != nil { return err } - } else if err := tm.writeStruct(w, v); err != nil { - return err + } else { + if v.Kind() == reflect.Ptr { + v = v.Elem() + } + if err := tm.writeStruct(w, v); err != nil { + return err + } } w.unindent() if err := w.WriteByte(ket); err != nil { diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 5e14513f28c9..bb55a3af2769 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -206,7 +206,6 @@ func (p *textParser) advance() { var ( errBadUTF8 = errors.New("proto: bad UTF-8") - errBadHex = errors.New("proto: bad hexadecimal") ) func unquoteC(s string, quote rune) (string, error) { @@ -277,60 +276,47 @@ func unescape(s string) (ch string, tail string, err error) { return "?", s, nil // trigraph workaround case '\'', '"', '\\': return string(r), s, nil - case '0', '1', '2', '3', '4', '5', '6', '7', 'x', 'X': + case '0', '1', '2', '3', '4', '5', '6', '7': if len(s) < 2 { return "", "", fmt.Errorf(`\%c requires 2 following digits`, r) } - base := 8 - ss := s[:2] + ss := string(r) + s[:2] s = s[2:] - if r == 'x' || r == 'X' { - base = 16 - } else { - ss = string(r) + ss - } - i, err := strconv.ParseUint(ss, base, 8) + i, err := strconv.ParseUint(ss, 8, 8) if err != nil { - return "", "", err + return "", "", fmt.Errorf(`\%s contains non-octal digits`, ss) } return string([]byte{byte(i)}), s, nil - case 'u', 'U': - n := 4 - if r == 'U' { + case 'x', 'X', 'u', 'U': + var n int + switch r { + case 'x', 'X': + n = 2 + case 'u': + n = 4 + case 'U': n = 8 } if len(s) < n { - return "", "", fmt.Errorf(`\%c requires %d digits`, r, n) - } - - bs := make([]byte, n/2) - for i := 0; i < n; i += 2 { - a, ok1 := unhex(s[i]) - b, ok2 := unhex(s[i+1]) - if !ok1 || !ok2 { - return "", "", errBadHex - } - bs[i/2] = a<<4 | b + return "", "", fmt.Errorf(`\%c requires %d following digits`, r, n) } + ss := s[:n] s = s[n:] - return string(bs), s, nil + i, err := strconv.ParseUint(ss, 16, 64) + if err != nil { + return "", "", fmt.Errorf(`\%c%s contains non-hexadecimal digits`, r, ss) + } + if r == 'x' || r == 'X' { + return string([]byte{byte(i)}), s, nil + } + if i > utf8.MaxRune { + return "", "", fmt.Errorf(`\%c%s is not a valid Unicode code point`, r, ss) + } + return string(i), s, nil } return "", "", fmt.Errorf(`unknown escape \%c`, r) } -// Adapted from src/pkg/strconv/quote.go. -func unhex(b byte) (v byte, ok bool) { - switch { - case '0' <= b && b <= '9': - return b - '0', true - case 'a' <= b && b <= 'f': - return b - 'a' + 10, true - case 'A' <= b && b <= 'F': - return b - 'A' + 10, true - } - return 0, false -} - // Back off the parser by one token. Can only be done between calls to next(). // It makes the next advance() a no-op. func (p *textParser) back() { p.backed = true } @@ -644,17 +630,17 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { if err := p.consumeToken(":"); err != nil { return err } - if err := p.readAny(key, props.mkeyprop); err != nil { + if err := p.readAny(key, props.MapKeyProp); err != nil { return err } if err := p.consumeOptionalSeparator(); err != nil { return err } case "value": - if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { + if err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil { return err } - if err := p.readAny(val, props.mvalprop); err != nil { + if err := p.readAny(val, props.MapValProp); err != nil { return err } if err := p.consumeOptionalSeparator(); err != nil { @@ -728,6 +714,9 @@ func (p *textParser) consumeExtName() (string, error) { if tok.err != nil { return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) } + if p.done && tok.value != "]" { + return "", p.errorf("unclosed type_url or extension name") + } } return strings.Join(parts, ""), nil } @@ -865,7 +854,7 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { return p.readStruct(fv, terminator) case reflect.Uint32: if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(x) + fv.SetUint(uint64(x)) return nil } case reflect.Uint64: @@ -883,13 +872,9 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { // UnmarshalText returns *RequiredNotSetError. func UnmarshalText(s string, pb Message) error { if um, ok := pb.(encoding.TextUnmarshaler); ok { - err := um.UnmarshalText([]byte(s)) - return err + return um.UnmarshalText([]byte(s)) } pb.Reset() v := reflect.ValueOf(pb) - if pe := newTextParser(s).readStruct(v.Elem(), ""); pe != nil { - return pe - } - return nil + return newTextParser(s).readStruct(v.Elem(), "") } diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile deleted file mode 100644 index 41a2d04d0144..000000000000 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -# Go support for Protocol Buffers - Google's data interchange format -# -# Copyright 2010 The Go Authors. All rights reserved. -# https://github.com/golang/protobuf -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Not stored here, but descriptor.proto is in https://github.com/google/protobuf/ -# at src/google/protobuf/descriptor.proto -regenerate: - @echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION - protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go index 63cf2c80aade..1ded05bbe71b 100644 --- a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go @@ -1,39 +1,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: google/protobuf/descriptor.proto -/* -Package descriptor is a generated protocol buffer package. - -It is generated from these files: - google/protobuf/descriptor.proto - -It has these top-level messages: - FileDescriptorSet - FileDescriptorProto - DescriptorProto - FieldDescriptorProto - OneofDescriptorProto - EnumDescriptorProto - EnumValueDescriptorProto - ServiceDescriptorProto - MethodDescriptorProto - FileOptions - MessageOptions - FieldOptions - OneofOptions - EnumOptions - EnumValueOptions - ServiceOptions - MethodOptions - UninterpretedOption - SourceCodeInfo - GeneratedCodeInfo -*/ package descriptor -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -44,7 +18,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type FieldDescriptorProto_Type int32 @@ -100,6 +74,7 @@ var FieldDescriptorProto_Type_name = map[int32]string{ 17: "TYPE_SINT32", 18: "TYPE_SINT64", } + var FieldDescriptorProto_Type_value = map[string]int32{ "TYPE_DOUBLE": 1, "TYPE_FLOAT": 2, @@ -126,9 +101,11 @@ func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { *p = x return p } + func (x FieldDescriptorProto_Type) String() string { return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) } + func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") if err != nil { @@ -137,7 +114,10 @@ func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { *x = FieldDescriptorProto_Type(value) return nil } -func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} } + +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{4, 0} +} type FieldDescriptorProto_Label int32 @@ -153,6 +133,7 @@ var FieldDescriptorProto_Label_name = map[int32]string{ 2: "LABEL_REQUIRED", 3: "LABEL_REPEATED", } + var FieldDescriptorProto_Label_value = map[string]int32{ "LABEL_OPTIONAL": 1, "LABEL_REQUIRED": 2, @@ -164,9 +145,11 @@ func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { *p = x return p } + func (x FieldDescriptorProto_Label) String() string { return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) } + func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") if err != nil { @@ -175,8 +158,9 @@ func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { *x = FieldDescriptorProto_Label(value) return nil } + func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{3, 1} + return fileDescriptor_e5baabe45344a177, []int{4, 1} } // Generated classes can be optimized for speed or code size. @@ -194,6 +178,7 @@ var FileOptions_OptimizeMode_name = map[int32]string{ 2: "CODE_SIZE", 3: "LITE_RUNTIME", } + var FileOptions_OptimizeMode_value = map[string]int32{ "SPEED": 1, "CODE_SIZE": 2, @@ -205,9 +190,11 @@ func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { *p = x return p } + func (x FileOptions_OptimizeMode) String() string { return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) } + func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") if err != nil { @@ -216,7 +203,10 @@ func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { *x = FileOptions_OptimizeMode(value) return nil } -func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } + +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{10, 0} +} type FieldOptions_CType int32 @@ -232,6 +222,7 @@ var FieldOptions_CType_name = map[int32]string{ 1: "CORD", 2: "STRING_PIECE", } + var FieldOptions_CType_value = map[string]int32{ "STRING": 0, "CORD": 1, @@ -243,9 +234,11 @@ func (x FieldOptions_CType) Enum() *FieldOptions_CType { *p = x return p } + func (x FieldOptions_CType) String() string { return proto.EnumName(FieldOptions_CType_name, int32(x)) } + func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") if err != nil { @@ -254,7 +247,10 @@ func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { *x = FieldOptions_CType(value) return nil } -func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 0} } + +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{12, 0} +} type FieldOptions_JSType int32 @@ -272,6 +268,7 @@ var FieldOptions_JSType_name = map[int32]string{ 1: "JS_STRING", 2: "JS_NUMBER", } + var FieldOptions_JSType_value = map[string]int32{ "JS_NORMAL": 0, "JS_STRING": 1, @@ -283,9 +280,11 @@ func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { *p = x return p } + func (x FieldOptions_JSType) String() string { return proto.EnumName(FieldOptions_JSType_name, int32(x)) } + func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") if err != nil { @@ -294,7 +293,10 @@ func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { *x = FieldOptions_JSType(value) return nil } -func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 1} } + +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{12, 1} +} // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, // or neither? HTTP based RPC implementation may choose GET verb for safe @@ -312,6 +314,7 @@ var MethodOptions_IdempotencyLevel_name = map[int32]string{ 1: "NO_SIDE_EFFECTS", 2: "IDEMPOTENT", } + var MethodOptions_IdempotencyLevel_value = map[string]int32{ "IDEMPOTENCY_UNKNOWN": 0, "NO_SIDE_EFFECTS": 1, @@ -323,9 +326,11 @@ func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { *p = x return p } + func (x MethodOptions_IdempotencyLevel) String() string { return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) } + func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") if err != nil { @@ -334,21 +339,44 @@ func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { *x = MethodOptions_IdempotencyLevel(value) return nil } + func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { - return fileDescriptor0, []int{16, 0} + return fileDescriptor_e5baabe45344a177, []int{17, 0} } // The protocol compiler can output a FileDescriptorSet containing the .proto // files it parses. type FileDescriptorSet struct { - File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` - XXX_unrecognized []byte `json:"-"` + File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } +func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorSet) ProtoMessage() {} +func (*FileDescriptorSet) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{0} +} + +func (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b) +} +func (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic) +} +func (m *FileDescriptorSet) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileDescriptorSet.Merge(m, src) +} +func (m *FileDescriptorSet) XXX_Size() int { + return xxx_messageInfo_FileDescriptorSet.Size(m) +} +func (m *FileDescriptorSet) XXX_DiscardUnknown() { + xxx_messageInfo_FileDescriptorSet.DiscardUnknown(m) } -func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } -func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } -func (*FileDescriptorSet) ProtoMessage() {} -func (*FileDescriptorSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +var xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto { if m != nil { @@ -381,14 +409,36 @@ type FileDescriptorProto struct { SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` // The syntax of the proto file. // The supported values are "proto2" and "proto3". - Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` - XXX_unrecognized []byte `json:"-"` + Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } +func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorProto) ProtoMessage() {} +func (*FileDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{1} +} + +func (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b) +} +func (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic) +} +func (m *FileDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileDescriptorProto.Merge(m, src) +} +func (m *FileDescriptorProto) XXX_Size() int { + return xxx_messageInfo_FileDescriptorProto.Size(m) +} +func (m *FileDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_FileDescriptorProto.DiscardUnknown(m) } -func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } -func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*FileDescriptorProto) ProtoMessage() {} -func (*FileDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } +var xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo func (m *FileDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -487,14 +537,36 @@ type DescriptorProto struct { ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` // Reserved field names, which may not be used by fields in the same message. // A given name may only be reserved once. - ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` - XXX_unrecognized []byte `json:"-"` + ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } +func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto) ProtoMessage() {} +func (*DescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{2} +} + +func (m *DescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DescriptorProto.Unmarshal(m, b) +} +func (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic) +} +func (m *DescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto.Merge(m, src) +} +func (m *DescriptorProto) XXX_Size() int { + return xxx_messageInfo_DescriptorProto.Size(m) +} +func (m *DescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_DescriptorProto.DiscardUnknown(m) } -func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } -func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } -func (*DescriptorProto) ProtoMessage() {} -func (*DescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } +var xxx_messageInfo_DescriptorProto proto.InternalMessageInfo func (m *DescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -567,17 +639,38 @@ func (m *DescriptorProto) GetReservedName() []string { } type DescriptorProto_ExtensionRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - XXX_unrecognized []byte `json:"-"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } func (*DescriptorProto_ExtensionRange) ProtoMessage() {} func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{2, 0} + return fileDescriptor_e5baabe45344a177, []int{2, 0} +} + +func (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b) } +func (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic) +} +func (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src) +} +func (m *DescriptorProto_ExtensionRange) XXX_Size() int { + return xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m) +} +func (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() { + xxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m) +} + +var xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo func (m *DescriptorProto_ExtensionRange) GetStart() int32 { if m != nil && m.Start != nil { @@ -593,21 +686,48 @@ func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { return 0 } +func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { + if m != nil { + return m.Options + } + return nil +} + // Range of reserved tag numbers. Reserved tag numbers may not be used by // fields or extension ranges in the same message. Reserved ranges may // not overlap. type DescriptorProto_ReservedRange struct { - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` - XXX_unrecognized []byte `json:"-"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} } func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } func (*DescriptorProto_ReservedRange) ProtoMessage() {} func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{2, 1} + return fileDescriptor_e5baabe45344a177, []int{2, 1} +} + +func (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b) +} +func (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic) +} +func (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src) } +func (m *DescriptorProto_ReservedRange) XXX_Size() int { + return xxx_messageInfo_DescriptorProto_ReservedRange.Size(m) +} +func (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() { + xxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m) +} + +var xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo func (m *DescriptorProto_ReservedRange) GetStart() int32 { if m != nil && m.Start != nil { @@ -623,6 +743,55 @@ func (m *DescriptorProto_ReservedRange) GetEnd() int32 { return 0 } +type ExtensionRangeOptions struct { + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} } +func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } +func (*ExtensionRangeOptions) ProtoMessage() {} +func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{3} +} + +var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ + {Start: 1000, End: 536870911}, +} + +func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ExtensionRangeOptions +} + +func (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b) +} +func (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic) +} +func (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ExtensionRangeOptions.Merge(m, src) +} +func (m *ExtensionRangeOptions) XXX_Size() int { + return xxx_messageInfo_ExtensionRangeOptions.Size(m) +} +func (m *ExtensionRangeOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo + +func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + // Describes a field within a message. type FieldDescriptorProto struct { Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` @@ -653,15 +822,37 @@ type FieldDescriptorProto struct { // user has set a "json_name" option on this field, that option's value // will be used. Otherwise, it's deduced from the field's name by converting // it to camelCase. - JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` - Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` - XXX_unrecognized []byte `json:"-"` + JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } +func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FieldDescriptorProto) ProtoMessage() {} +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{4} } -func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } -func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*FieldDescriptorProto) ProtoMessage() {} -func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } +func (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b) +} +func (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic) +} +func (m *FieldDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldDescriptorProto.Merge(m, src) +} +func (m *FieldDescriptorProto) XXX_Size() int { + return xxx_messageInfo_FieldDescriptorProto.Size(m) +} +func (m *FieldDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m) +} + +var xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo func (m *FieldDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -735,15 +926,37 @@ func (m *FieldDescriptorProto) GetOptions() *FieldOptions { // Describes a oneof. type OneofDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` - XXX_unrecognized []byte `json:"-"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } +func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*OneofDescriptorProto) ProtoMessage() {} +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{5} +} + +func (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b) +} +func (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic) +} +func (m *OneofDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofDescriptorProto.Merge(m, src) +} +func (m *OneofDescriptorProto) XXX_Size() int { + return xxx_messageInfo_OneofDescriptorProto.Size(m) +} +func (m *OneofDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m) } -func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } -func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*OneofDescriptorProto) ProtoMessage() {} -func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } +var xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo func (m *OneofDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -761,16 +974,45 @@ func (m *OneofDescriptorProto) GetOptions() *OneofOptions { // Describes an enum type. type EnumDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` - Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_unrecognized []byte `json:"-"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` + Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + // Range of reserved numeric values. Reserved numeric values may not be used + // by enum values in the same enum declaration. Reserved ranges may not + // overlap. + ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` + // Reserved enum value names, which may not be reused. A given name may only + // be reserved once. + ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } +func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumDescriptorProto) ProtoMessage() {} +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{6} +} + +func (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b) +} +func (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic) +} +func (m *EnumDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumDescriptorProto.Merge(m, src) +} +func (m *EnumDescriptorProto) XXX_Size() int { + return xxx_messageInfo_EnumDescriptorProto.Size(m) +} +func (m *EnumDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m) } -func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } -func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*EnumDescriptorProto) ProtoMessage() {} -func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } +var xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo func (m *EnumDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -793,18 +1035,107 @@ func (m *EnumDescriptorProto) GetOptions() *EnumOptions { return nil } +func (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange { + if m != nil { + return m.ReservedRange + } + return nil +} + +func (m *EnumDescriptorProto) GetReservedName() []string { + if m != nil { + return m.ReservedName + } + return nil +} + +// Range of reserved numeric values. Reserved values may not be used by +// entries in the same enum. Reserved ranges may not overlap. +// +// Note that this is distinct from DescriptorProto.ReservedRange in that it +// is inclusive such that it can appropriately represent the entire int32 +// domain. +type EnumDescriptorProto_EnumReservedRange struct { + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EnumDescriptorProto_EnumReservedRange) Reset() { *m = EnumDescriptorProto_EnumReservedRange{} } +func (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) } +func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} +func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{6, 0} +} + +func (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b) +} +func (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic) +} +func (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src) +} +func (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int { + return xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m) +} +func (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() { + xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m) +} + +var xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo + +func (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + // Describes a value within an enum. type EnumValueDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` - Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_unrecognized []byte `json:"-"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } +func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumValueDescriptorProto) ProtoMessage() {} +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{7} +} + +func (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b) +} +func (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic) +} +func (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumValueDescriptorProto.Merge(m, src) +} +func (m *EnumValueDescriptorProto) XXX_Size() int { + return xxx_messageInfo_EnumValueDescriptorProto.Size(m) +} +func (m *EnumValueDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m) } -func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } -func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*EnumValueDescriptorProto) ProtoMessage() {} -func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } +var xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo func (m *EnumValueDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -829,16 +1160,38 @@ func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { // Describes a service. type ServiceDescriptorProto struct { - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` - Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` - XXX_unrecognized []byte `json:"-"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` + Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } +func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*ServiceDescriptorProto) ProtoMessage() {} +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{8} +} + +func (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b) +} +func (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic) +} +func (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceDescriptorProto.Merge(m, src) +} +func (m *ServiceDescriptorProto) XXX_Size() int { + return xxx_messageInfo_ServiceDescriptorProto.Size(m) +} +func (m *ServiceDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m) } -func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } -func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*ServiceDescriptorProto) ProtoMessage() {} -func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } +var xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo func (m *ServiceDescriptorProto) GetName() string { if m != nil && m.Name != nil { @@ -872,14 +1225,36 @@ type MethodDescriptorProto struct { // Identifies if client streams multiple client messages ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` // Identifies if server streams multiple server messages - ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` - XXX_unrecognized []byte `json:"-"` + ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } +func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*MethodDescriptorProto) ProtoMessage() {} +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{9} +} + +func (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b) +} +func (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic) +} +func (m *MethodDescriptorProto) XXX_Merge(src proto.Message) { + xxx_messageInfo_MethodDescriptorProto.Merge(m, src) +} +func (m *MethodDescriptorProto) XXX_Size() int { + return xxx_messageInfo_MethodDescriptorProto.Size(m) +} +func (m *MethodDescriptorProto) XXX_DiscardUnknown() { + xxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m) } -func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } -func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } -func (*MethodDescriptorProto) ProtoMessage() {} -func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } +var xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo const Default_MethodDescriptorProto_ClientStreaming bool = false const Default_MethodDescriptorProto_ServerStreaming bool = false @@ -946,7 +1321,7 @@ type FileOptions struct { // top-level extensions defined in the file. JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` // This option does nothing. - JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` + JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` // Deprecated: Do not use. // If set true, then the Java2 code generator will generate code that // throws an exception whenever an attempt is made to assign a non-UTF-8 // byte sequence to a string field. @@ -974,6 +1349,7 @@ type FileOptions struct { CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` + PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` // Is this file deprecated? // Depending on the target platform, this can emit Deprecated annotations // for everything in the file, or it will be completely ignored; in the very @@ -995,31 +1371,67 @@ type FileOptions struct { // Sets the php class prefix which is prepended to all php generated classes // from this .proto. Default is empty. PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` - // The parser stores options it doesn't recognize here. See above. + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` + // Use this option to change the namespace of php generated metadata classes. + // Default is empty. When this option is empty, the proto file name will be used + // for determining the namespace. + PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"` + // Use this option to change the package of ruby generated classes. Default + // is empty. When this option is not set, the package name will be used for + // determining the ruby package. + RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"` + // The parser stores options it doesn't recognize here. + // See the documentation for the "Options" section above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *FileOptions) Reset() { *m = FileOptions{} } -func (m *FileOptions) String() string { return proto.CompactTextString(m) } -func (*FileOptions) ProtoMessage() {} -func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } +func (m *FileOptions) Reset() { *m = FileOptions{} } +func (m *FileOptions) String() string { return proto.CompactTextString(m) } +func (*FileOptions) ProtoMessage() {} +func (*FileOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{10} +} var extRange_FileOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_FileOptions } +func (m *FileOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FileOptions.Unmarshal(m, b) +} +func (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FileOptions.Marshal(b, m, deterministic) +} +func (m *FileOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileOptions.Merge(m, src) +} +func (m *FileOptions) XXX_Size() int { + return xxx_messageInfo_FileOptions.Size(m) +} +func (m *FileOptions) XXX_DiscardUnknown() { + xxx_messageInfo_FileOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_FileOptions proto.InternalMessageInfo + const Default_FileOptions_JavaMultipleFiles bool = false const Default_FileOptions_JavaStringCheckUtf8 bool = false const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED const Default_FileOptions_CcGenericServices bool = false const Default_FileOptions_JavaGenericServices bool = false const Default_FileOptions_PyGenericServices bool = false +const Default_FileOptions_PhpGenericServices bool = false const Default_FileOptions_Deprecated bool = false const Default_FileOptions_CcEnableArenas bool = false @@ -1044,6 +1456,7 @@ func (m *FileOptions) GetJavaMultipleFiles() bool { return Default_FileOptions_JavaMultipleFiles } +// Deprecated: Do not use. func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { if m != nil && m.JavaGenerateEqualsAndHash != nil { return *m.JavaGenerateEqualsAndHash @@ -1093,6 +1506,13 @@ func (m *FileOptions) GetPyGenericServices() bool { return Default_FileOptions_PyGenericServices } +func (m *FileOptions) GetPhpGenericServices() bool { + if m != nil && m.PhpGenericServices != nil { + return *m.PhpGenericServices + } + return Default_FileOptions_PhpGenericServices +} + func (m *FileOptions) GetDeprecated() bool { if m != nil && m.Deprecated != nil { return *m.Deprecated @@ -1135,6 +1555,27 @@ func (m *FileOptions) GetPhpClassPrefix() string { return "" } +func (m *FileOptions) GetPhpNamespace() string { + if m != nil && m.PhpNamespace != nil { + return *m.PhpNamespace + } + return "" +} + +func (m *FileOptions) GetPhpMetadataNamespace() string { + if m != nil && m.PhpMetadataNamespace != nil { + return *m.PhpMetadataNamespace + } + return "" +} + +func (m *FileOptions) GetRubyPackage() string { + if m != nil && m.RubyPackage != nil { + return *m.RubyPackage + } + return "" +} + func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { if m != nil { return m.UninterpretedOption @@ -1195,23 +1636,45 @@ type MessageOptions struct { MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *MessageOptions) Reset() { *m = MessageOptions{} } -func (m *MessageOptions) String() string { return proto.CompactTextString(m) } -func (*MessageOptions) ProtoMessage() {} -func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } +func (m *MessageOptions) Reset() { *m = MessageOptions{} } +func (m *MessageOptions) String() string { return proto.CompactTextString(m) } +func (*MessageOptions) ProtoMessage() {} +func (*MessageOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{11} +} var extRange_MessageOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MessageOptions } +func (m *MessageOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MessageOptions.Unmarshal(m, b) +} +func (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic) +} +func (m *MessageOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_MessageOptions.Merge(m, src) +} +func (m *MessageOptions) XXX_Size() int { + return xxx_messageInfo_MessageOptions.Size(m) +} +func (m *MessageOptions) XXX_DiscardUnknown() { + xxx_messageInfo_MessageOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_MessageOptions proto.InternalMessageInfo + const Default_MessageOptions_MessageSetWireFormat bool = false const Default_MessageOptions_NoStandardDescriptorAccessor bool = false const Default_MessageOptions_Deprecated bool = false @@ -1265,13 +1728,15 @@ type FieldOptions struct { Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` // The jstype option determines the JavaScript type used for values of the // field. The option is permitted only for 64 bit integral and fixed types - // (int64, uint64, sint64, fixed64, sfixed64). By default these types are - // represented as JavaScript strings. This avoids loss of precision that can - // happen when a large value is converted to a floating point JavaScript - // numbers. Specifying JS_NUMBER for the jstype causes the generated - // JavaScript code to use the JavaScript "number" type instead of strings. - // This option is an enum to permit additional types to be added, - // e.g. goog.math.Integer. + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` // Should this field be parsed lazily? Lazy applies only to message-type // fields. It means that when the outer message is initially parsed, the @@ -1311,23 +1776,45 @@ type FieldOptions struct { Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *FieldOptions) Reset() { *m = FieldOptions{} } -func (m *FieldOptions) String() string { return proto.CompactTextString(m) } -func (*FieldOptions) ProtoMessage() {} -func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } +func (m *FieldOptions) Reset() { *m = FieldOptions{} } +func (m *FieldOptions) String() string { return proto.CompactTextString(m) } +func (*FieldOptions) ProtoMessage() {} +func (*FieldOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{12} +} var extRange_FieldOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_FieldOptions } +func (m *FieldOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_FieldOptions.Unmarshal(m, b) +} +func (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic) +} +func (m *FieldOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_FieldOptions.Merge(m, src) +} +func (m *FieldOptions) XXX_Size() int { + return xxx_messageInfo_FieldOptions.Size(m) +} +func (m *FieldOptions) XXX_DiscardUnknown() { + xxx_messageInfo_FieldOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_FieldOptions proto.InternalMessageInfo + const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL const Default_FieldOptions_Lazy bool = false @@ -1386,23 +1873,45 @@ func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { type OneofOptions struct { // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *OneofOptions) Reset() { *m = OneofOptions{} } -func (m *OneofOptions) String() string { return proto.CompactTextString(m) } -func (*OneofOptions) ProtoMessage() {} -func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } +func (m *OneofOptions) Reset() { *m = OneofOptions{} } +func (m *OneofOptions) String() string { return proto.CompactTextString(m) } +func (*OneofOptions) ProtoMessage() {} +func (*OneofOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{13} +} var extRange_OneofOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_OneofOptions } +func (m *OneofOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_OneofOptions.Unmarshal(m, b) +} +func (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic) +} +func (m *OneofOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_OneofOptions.Merge(m, src) +} +func (m *OneofOptions) XXX_Size() int { + return xxx_messageInfo_OneofOptions.Size(m) +} +func (m *OneofOptions) XXX_DiscardUnknown() { + xxx_messageInfo_OneofOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_OneofOptions proto.InternalMessageInfo + func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { if m != nil { return m.UninterpretedOption @@ -1421,23 +1930,45 @@ type EnumOptions struct { Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *EnumOptions) Reset() { *m = EnumOptions{} } -func (m *EnumOptions) String() string { return proto.CompactTextString(m) } -func (*EnumOptions) ProtoMessage() {} -func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } +func (m *EnumOptions) Reset() { *m = EnumOptions{} } +func (m *EnumOptions) String() string { return proto.CompactTextString(m) } +func (*EnumOptions) ProtoMessage() {} +func (*EnumOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{14} +} var extRange_EnumOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_EnumOptions } +func (m *EnumOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumOptions.Unmarshal(m, b) +} +func (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic) +} +func (m *EnumOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumOptions.Merge(m, src) +} +func (m *EnumOptions) XXX_Size() int { + return xxx_messageInfo_EnumOptions.Size(m) +} +func (m *EnumOptions) XXX_DiscardUnknown() { + xxx_messageInfo_EnumOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_EnumOptions proto.InternalMessageInfo + const Default_EnumOptions_Deprecated bool = false func (m *EnumOptions) GetAllowAlias() bool { @@ -1469,23 +2000,45 @@ type EnumValueOptions struct { Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } -func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } -func (*EnumValueOptions) ProtoMessage() {} -func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } +func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } +func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } +func (*EnumValueOptions) ProtoMessage() {} +func (*EnumValueOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{15} +} var extRange_EnumValueOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_EnumValueOptions } +func (m *EnumValueOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EnumValueOptions.Unmarshal(m, b) +} +func (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic) +} +func (m *EnumValueOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_EnumValueOptions.Merge(m, src) +} +func (m *EnumValueOptions) XXX_Size() int { + return xxx_messageInfo_EnumValueOptions.Size(m) +} +func (m *EnumValueOptions) XXX_DiscardUnknown() { + xxx_messageInfo_EnumValueOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo + const Default_EnumValueOptions_Deprecated bool = false func (m *EnumValueOptions) GetDeprecated() bool { @@ -1510,23 +2063,45 @@ type ServiceOptions struct { Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } -func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } -func (*ServiceOptions) ProtoMessage() {} -func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } +func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } +func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } +func (*ServiceOptions) ProtoMessage() {} +func (*ServiceOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{16} +} var extRange_ServiceOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_ServiceOptions } +func (m *ServiceOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ServiceOptions.Unmarshal(m, b) +} +func (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic) +} +func (m *ServiceOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_ServiceOptions.Merge(m, src) +} +func (m *ServiceOptions) XXX_Size() int { + return xxx_messageInfo_ServiceOptions.Size(m) +} +func (m *ServiceOptions) XXX_DiscardUnknown() { + xxx_messageInfo_ServiceOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_ServiceOptions proto.InternalMessageInfo + const Default_ServiceOptions_Deprecated bool = false func (m *ServiceOptions) GetDeprecated() bool { @@ -1552,23 +2127,45 @@ type MethodOptions struct { IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` proto.XXX_InternalExtensions `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *MethodOptions) Reset() { *m = MethodOptions{} } -func (m *MethodOptions) String() string { return proto.CompactTextString(m) } -func (*MethodOptions) ProtoMessage() {} -func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } +func (m *MethodOptions) Reset() { *m = MethodOptions{} } +func (m *MethodOptions) String() string { return proto.CompactTextString(m) } +func (*MethodOptions) ProtoMessage() {} +func (*MethodOptions) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{17} +} var extRange_MethodOptions = []proto.ExtensionRange{ - {1000, 536870911}, + {Start: 1000, End: 536870911}, } func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { return extRange_MethodOptions } +func (m *MethodOptions) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_MethodOptions.Unmarshal(m, b) +} +func (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic) +} +func (m *MethodOptions) XXX_Merge(src proto.Message) { + xxx_messageInfo_MethodOptions.Merge(m, src) +} +func (m *MethodOptions) XXX_Size() int { + return xxx_messageInfo_MethodOptions.Size(m) +} +func (m *MethodOptions) XXX_DiscardUnknown() { + xxx_messageInfo_MethodOptions.DiscardUnknown(m) +} + +var xxx_messageInfo_MethodOptions proto.InternalMessageInfo + const Default_MethodOptions_Deprecated bool = false const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN @@ -1603,19 +2200,41 @@ type UninterpretedOption struct { Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` // The value of the uninterpreted option, in whatever type the tokenizer // identified it as during parsing. Exactly one of these should be set. - IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` - PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` - NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` - DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` - StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` - AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` - XXX_unrecognized []byte `json:"-"` + IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` + PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` + NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } +func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } +func (*UninterpretedOption) ProtoMessage() {} +func (*UninterpretedOption) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{18} +} + +func (m *UninterpretedOption) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UninterpretedOption.Unmarshal(m, b) +} +func (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic) +} +func (m *UninterpretedOption) XXX_Merge(src proto.Message) { + xxx_messageInfo_UninterpretedOption.Merge(m, src) +} +func (m *UninterpretedOption) XXX_Size() int { + return xxx_messageInfo_UninterpretedOption.Size(m) +} +func (m *UninterpretedOption) XXX_DiscardUnknown() { + xxx_messageInfo_UninterpretedOption.DiscardUnknown(m) } -func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } -func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } -func (*UninterpretedOption) ProtoMessage() {} -func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } +var xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { if m != nil { @@ -1672,18 +2291,38 @@ func (m *UninterpretedOption) GetAggregateValue() string { // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents // "foo.(bar.baz).qux". type UninterpretedOption_NamePart struct { - NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` - IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` - XXX_unrecognized []byte `json:"-"` + NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` + IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} } func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } func (*UninterpretedOption_NamePart) ProtoMessage() {} func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{17, 0} + return fileDescriptor_e5baabe45344a177, []int{18, 0} } +func (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b) +} +func (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic) +} +func (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) { + xxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src) +} +func (m *UninterpretedOption_NamePart) XXX_Size() int { + return xxx_messageInfo_UninterpretedOption_NamePart.Size(m) +} +func (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() { + xxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m) +} + +var xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo + func (m *UninterpretedOption_NamePart) GetNamePart() string { if m != nil && m.NamePart != nil { return *m.NamePart @@ -1744,14 +2383,36 @@ type SourceCodeInfo struct { // - Code which tries to interpret locations should probably be designed to // ignore those that it doesn't understand, as more types of locations could // be recorded in the future. - Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` - XXX_unrecognized []byte `json:"-"` + Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } +func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo) ProtoMessage() {} +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{19} +} + +func (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b) +} +func (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic) +} +func (m *SourceCodeInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceCodeInfo.Merge(m, src) +} +func (m *SourceCodeInfo) XXX_Size() int { + return xxx_messageInfo_SourceCodeInfo.Size(m) +} +func (m *SourceCodeInfo) XXX_DiscardUnknown() { + xxx_messageInfo_SourceCodeInfo.DiscardUnknown(m) } -func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } -func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } -func (*SourceCodeInfo) ProtoMessage() {} -func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } +var xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { if m != nil { @@ -1841,13 +2502,35 @@ type SourceCodeInfo_Location struct { LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } +func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo_Location) ProtoMessage() {} +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{19, 0} +} + +func (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b) +} +func (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic) +} +func (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) { + xxx_messageInfo_SourceCodeInfo_Location.Merge(m, src) +} +func (m *SourceCodeInfo_Location) XXX_Size() int { + return xxx_messageInfo_SourceCodeInfo_Location.Size(m) +} +func (m *SourceCodeInfo_Location) XXX_DiscardUnknown() { + xxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m) } -func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } -func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } -func (*SourceCodeInfo_Location) ProtoMessage() {} -func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18, 0} } +var xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo func (m *SourceCodeInfo_Location) GetPath() []int32 { if m != nil { @@ -1890,14 +2573,36 @@ func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { type GeneratedCodeInfo struct { // An Annotation connects some span of text in generated code to an element // of its generating .proto file. - Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` - XXX_unrecognized []byte `json:"-"` + Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } +func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } +func (*GeneratedCodeInfo) ProtoMessage() {} +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_e5baabe45344a177, []int{20} +} + +func (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b) +} +func (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic) +} +func (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_GeneratedCodeInfo.Merge(m, src) +} +func (m *GeneratedCodeInfo) XXX_Size() int { + return xxx_messageInfo_GeneratedCodeInfo.Size(m) +} +func (m *GeneratedCodeInfo) XXX_DiscardUnknown() { + xxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m) } -func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } -func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } -func (*GeneratedCodeInfo) ProtoMessage() {} -func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } +var xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { if m != nil { @@ -1918,16 +2623,36 @@ type GeneratedCodeInfo_Annotation struct { // Identifies the ending offset in bytes in the generated code that // relates to the identified offset. The end offset should be one past // the last relevant byte (so the length of the text = end - begin). - End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` - XXX_unrecognized []byte `json:"-"` + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} } func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { - return fileDescriptor0, []int{19, 0} + return fileDescriptor_e5baabe45344a177, []int{20, 0} +} + +func (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b) +} +func (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic) +} +func (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src) } +func (m *GeneratedCodeInfo_Annotation) XXX_Size() int { + return xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m) +} +func (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() { + xxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m) +} + +var xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { if m != nil { @@ -1958,14 +2683,22 @@ func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 { } func init() { + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) + proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) + proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) + proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) + proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") + proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions") proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") + proto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), "google.protobuf.EnumDescriptorProto.EnumReservedRange") proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto") proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto") proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto") @@ -1983,170 +2716,172 @@ func init() { proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) - proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) - proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) - proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) - proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) - proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) } -func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } - -var fileDescriptor0 = []byte{ - // 2460 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x5b, 0x6f, 0xdb, 0xc8, - 0x15, 0x5e, 0x5d, 0x2d, 0x1d, 0xc9, 0xf2, 0x78, 0xec, 0x4d, 0x18, 0xef, 0x25, 0x8e, 0xf6, 0x12, - 0x6f, 0xd2, 0xc8, 0x0b, 0xe7, 0xb2, 0x59, 0xa7, 0x48, 0x21, 0x4b, 0x8c, 0x57, 0xa9, 0x2c, 0xa9, - 0x94, 0xdc, 0x4d, 0xf6, 0x85, 0x18, 0x93, 0x23, 0x99, 0x09, 0x45, 0x72, 0x49, 0x2a, 0x89, 0xf7, - 0x29, 0x40, 0x9f, 0x0a, 0xf4, 0x07, 0x14, 0x45, 0xd1, 0x87, 0x7d, 0x59, 0xa0, 0x3f, 0xa0, 0xcf, - 0xfd, 0x05, 0x05, 0xf6, 0xb9, 0x2f, 0x45, 0x51, 0xa0, 0xfd, 0x07, 0x7d, 0x2d, 0x66, 0x86, 0xa4, - 0x48, 0x5d, 0x12, 0x77, 0x81, 0xec, 0x3e, 0xd9, 0x73, 0xce, 0x77, 0x0e, 0xcf, 0x9c, 0xf9, 0x66, - 0xce, 0x99, 0x11, 0x6c, 0x8f, 0x6c, 0x7b, 0x64, 0xd2, 0x5d, 0xc7, 0xb5, 0x7d, 0xfb, 0x64, 0x32, - 0xdc, 0xd5, 0xa9, 0xa7, 0xb9, 0x86, 0xe3, 0xdb, 0x6e, 0x8d, 0xcb, 0xf0, 0x9a, 0x40, 0xd4, 0x42, - 0x44, 0xf5, 0x08, 0xd6, 0x1f, 0x18, 0x26, 0x6d, 0x46, 0xc0, 0x3e, 0xf5, 0xf1, 0x5d, 0xc8, 0x0e, - 0x0d, 0x93, 0x4a, 0xa9, 0xed, 0xcc, 0x4e, 0x69, 0xef, 0xc3, 0xda, 0x8c, 0x51, 0x2d, 0x69, 0xd1, - 0x63, 0x62, 0x85, 0x5b, 0x54, 0xff, 0x95, 0x85, 0x8d, 0x05, 0x5a, 0x8c, 0x21, 0x6b, 0x91, 0x31, - 0xf3, 0x98, 0xda, 0x29, 0x2a, 0xfc, 0x7f, 0x2c, 0xc1, 0x8a, 0x43, 0xb4, 0xa7, 0x64, 0x44, 0xa5, - 0x34, 0x17, 0x87, 0x43, 0xfc, 0x3e, 0x80, 0x4e, 0x1d, 0x6a, 0xe9, 0xd4, 0xd2, 0xce, 0xa4, 0xcc, - 0x76, 0x66, 0xa7, 0xa8, 0xc4, 0x24, 0xf8, 0x3a, 0xac, 0x3b, 0x93, 0x13, 0xd3, 0xd0, 0xd4, 0x18, - 0x0c, 0xb6, 0x33, 0x3b, 0x39, 0x05, 0x09, 0x45, 0x73, 0x0a, 0xbe, 0x0a, 0x6b, 0xcf, 0x29, 0x79, - 0x1a, 0x87, 0x96, 0x38, 0xb4, 0xc2, 0xc4, 0x31, 0x60, 0x03, 0xca, 0x63, 0xea, 0x79, 0x64, 0x44, - 0x55, 0xff, 0xcc, 0xa1, 0x52, 0x96, 0xcf, 0x7e, 0x7b, 0x6e, 0xf6, 0xb3, 0x33, 0x2f, 0x05, 0x56, - 0x83, 0x33, 0x87, 0xe2, 0x3a, 0x14, 0xa9, 0x35, 0x19, 0x0b, 0x0f, 0xb9, 0x25, 0xf9, 0x93, 0xad, - 0xc9, 0x78, 0xd6, 0x4b, 0x81, 0x99, 0x05, 0x2e, 0x56, 0x3c, 0xea, 0x3e, 0x33, 0x34, 0x2a, 0xe5, - 0xb9, 0x83, 0xab, 0x73, 0x0e, 0xfa, 0x42, 0x3f, 0xeb, 0x23, 0xb4, 0xc3, 0x0d, 0x28, 0xd2, 0x17, - 0x3e, 0xb5, 0x3c, 0xc3, 0xb6, 0xa4, 0x15, 0xee, 0xe4, 0xa3, 0x05, 0xab, 0x48, 0x4d, 0x7d, 0xd6, - 0xc5, 0xd4, 0x0e, 0xdf, 0x81, 0x15, 0xdb, 0xf1, 0x0d, 0xdb, 0xf2, 0xa4, 0xc2, 0x76, 0x6a, 0xa7, - 0xb4, 0xf7, 0xee, 0x42, 0x22, 0x74, 0x05, 0x46, 0x09, 0xc1, 0xb8, 0x05, 0xc8, 0xb3, 0x27, 0xae, - 0x46, 0x55, 0xcd, 0xd6, 0xa9, 0x6a, 0x58, 0x43, 0x5b, 0x2a, 0x72, 0x07, 0x97, 0xe7, 0x27, 0xc2, - 0x81, 0x0d, 0x5b, 0xa7, 0x2d, 0x6b, 0x68, 0x2b, 0x15, 0x2f, 0x31, 0xc6, 0x17, 0x20, 0xef, 0x9d, - 0x59, 0x3e, 0x79, 0x21, 0x95, 0x39, 0x43, 0x82, 0x51, 0xf5, 0xbf, 0x39, 0x58, 0x3b, 0x0f, 0xc5, - 0xee, 0x41, 0x6e, 0xc8, 0x66, 0x29, 0xa5, 0xff, 0x9f, 0x1c, 0x08, 0x9b, 0x64, 0x12, 0xf3, 0x3f, - 0x30, 0x89, 0x75, 0x28, 0x59, 0xd4, 0xf3, 0xa9, 0x2e, 0x18, 0x91, 0x39, 0x27, 0xa7, 0x40, 0x18, - 0xcd, 0x53, 0x2a, 0xfb, 0x83, 0x28, 0xf5, 0x08, 0xd6, 0xa2, 0x90, 0x54, 0x97, 0x58, 0xa3, 0x90, - 0x9b, 0xbb, 0xaf, 0x8b, 0xa4, 0x26, 0x87, 0x76, 0x0a, 0x33, 0x53, 0x2a, 0x34, 0x31, 0xc6, 0x4d, - 0x00, 0xdb, 0xa2, 0xf6, 0x50, 0xd5, 0xa9, 0x66, 0x4a, 0x85, 0x25, 0x59, 0xea, 0x32, 0xc8, 0x5c, - 0x96, 0x6c, 0x21, 0xd5, 0x4c, 0xfc, 0xf9, 0x94, 0x6a, 0x2b, 0x4b, 0x98, 0x72, 0x24, 0x36, 0xd9, - 0x1c, 0xdb, 0x8e, 0xa1, 0xe2, 0x52, 0xc6, 0x7b, 0xaa, 0x07, 0x33, 0x2b, 0xf2, 0x20, 0x6a, 0xaf, - 0x9d, 0x99, 0x12, 0x98, 0x89, 0x89, 0xad, 0xba, 0xf1, 0x21, 0xfe, 0x00, 0x22, 0x81, 0xca, 0x69, - 0x05, 0xfc, 0x14, 0x2a, 0x87, 0xc2, 0x0e, 0x19, 0xd3, 0xad, 0xbb, 0x50, 0x49, 0xa6, 0x07, 0x6f, - 0x42, 0xce, 0xf3, 0x89, 0xeb, 0x73, 0x16, 0xe6, 0x14, 0x31, 0xc0, 0x08, 0x32, 0xd4, 0xd2, 0xf9, - 0x29, 0x97, 0x53, 0xd8, 0xbf, 0x5b, 0x9f, 0xc1, 0x6a, 0xe2, 0xf3, 0xe7, 0x35, 0xac, 0xfe, 0x3e, - 0x0f, 0x9b, 0x8b, 0x38, 0xb7, 0x90, 0xfe, 0x17, 0x20, 0x6f, 0x4d, 0xc6, 0x27, 0xd4, 0x95, 0x32, - 0xdc, 0x43, 0x30, 0xc2, 0x75, 0xc8, 0x99, 0xe4, 0x84, 0x9a, 0x52, 0x76, 0x3b, 0xb5, 0x53, 0xd9, - 0xbb, 0x7e, 0x2e, 0x56, 0xd7, 0xda, 0xcc, 0x44, 0x11, 0x96, 0xf8, 0x3e, 0x64, 0x83, 0x23, 0x8e, - 0x79, 0xb8, 0x76, 0x3e, 0x0f, 0x8c, 0x8b, 0x0a, 0xb7, 0xc3, 0xef, 0x40, 0x91, 0xfd, 0x15, 0xb9, - 0xcd, 0xf3, 0x98, 0x0b, 0x4c, 0xc0, 0xf2, 0x8a, 0xb7, 0xa0, 0xc0, 0x69, 0xa6, 0xd3, 0xb0, 0x34, - 0x44, 0x63, 0xb6, 0x30, 0x3a, 0x1d, 0x92, 0x89, 0xe9, 0xab, 0xcf, 0x88, 0x39, 0xa1, 0x9c, 0x30, - 0x45, 0xa5, 0x1c, 0x08, 0x7f, 0xcd, 0x64, 0xf8, 0x32, 0x94, 0x04, 0x2b, 0x0d, 0x4b, 0xa7, 0x2f, - 0xf8, 0xe9, 0x93, 0x53, 0x04, 0x51, 0x5b, 0x4c, 0xc2, 0x3e, 0xff, 0xc4, 0xb3, 0xad, 0x70, 0x69, - 0xf9, 0x27, 0x98, 0x80, 0x7f, 0xfe, 0xb3, 0xd9, 0x83, 0xef, 0xbd, 0xc5, 0xd3, 0x9b, 0xe5, 0x62, - 0xf5, 0x2f, 0x69, 0xc8, 0xf2, 0xfd, 0xb6, 0x06, 0xa5, 0xc1, 0xe3, 0x9e, 0xac, 0x36, 0xbb, 0xc7, - 0x07, 0x6d, 0x19, 0xa5, 0x70, 0x05, 0x80, 0x0b, 0x1e, 0xb4, 0xbb, 0xf5, 0x01, 0x4a, 0x47, 0xe3, - 0x56, 0x67, 0x70, 0xe7, 0x16, 0xca, 0x44, 0x06, 0xc7, 0x42, 0x90, 0x8d, 0x03, 0x6e, 0xee, 0xa1, - 0x1c, 0x46, 0x50, 0x16, 0x0e, 0x5a, 0x8f, 0xe4, 0xe6, 0x9d, 0x5b, 0x28, 0x9f, 0x94, 0xdc, 0xdc, - 0x43, 0x2b, 0x78, 0x15, 0x8a, 0x5c, 0x72, 0xd0, 0xed, 0xb6, 0x51, 0x21, 0xf2, 0xd9, 0x1f, 0x28, - 0xad, 0xce, 0x21, 0x2a, 0x46, 0x3e, 0x0f, 0x95, 0xee, 0x71, 0x0f, 0x41, 0xe4, 0xe1, 0x48, 0xee, - 0xf7, 0xeb, 0x87, 0x32, 0x2a, 0x45, 0x88, 0x83, 0xc7, 0x03, 0xb9, 0x8f, 0xca, 0x89, 0xb0, 0x6e, - 0xee, 0xa1, 0xd5, 0xe8, 0x13, 0x72, 0xe7, 0xf8, 0x08, 0x55, 0xf0, 0x3a, 0xac, 0x8a, 0x4f, 0x84, - 0x41, 0xac, 0xcd, 0x88, 0xee, 0xdc, 0x42, 0x68, 0x1a, 0x88, 0xf0, 0xb2, 0x9e, 0x10, 0xdc, 0xb9, - 0x85, 0x70, 0xb5, 0x01, 0x39, 0xce, 0x2e, 0x8c, 0xa1, 0xd2, 0xae, 0x1f, 0xc8, 0x6d, 0xb5, 0xdb, - 0x1b, 0xb4, 0xba, 0x9d, 0x7a, 0x1b, 0xa5, 0xa6, 0x32, 0x45, 0xfe, 0xd5, 0x71, 0x4b, 0x91, 0x9b, - 0x28, 0x1d, 0x97, 0xf5, 0xe4, 0xfa, 0x40, 0x6e, 0xa2, 0x4c, 0x55, 0x83, 0xcd, 0x45, 0xe7, 0xcc, - 0xc2, 0x9d, 0x11, 0x5b, 0xe2, 0xf4, 0x92, 0x25, 0xe6, 0xbe, 0xe6, 0x96, 0xf8, 0xdb, 0x14, 0x6c, - 0x2c, 0x38, 0x6b, 0x17, 0x7e, 0xe4, 0x17, 0x90, 0x13, 0x14, 0x15, 0xd5, 0xe7, 0x93, 0x85, 0x87, - 0x36, 0x27, 0xec, 0x5c, 0x05, 0xe2, 0x76, 0xf1, 0x0a, 0x9c, 0x59, 0x52, 0x81, 0x99, 0x8b, 0xb9, - 0x20, 0x7f, 0x93, 0x02, 0x69, 0x99, 0xef, 0xd7, 0x1c, 0x14, 0xe9, 0xc4, 0x41, 0x71, 0x6f, 0x36, - 0x80, 0x2b, 0xcb, 0xe7, 0x30, 0x17, 0xc5, 0x77, 0x29, 0xb8, 0xb0, 0xb8, 0x51, 0x59, 0x18, 0xc3, - 0x7d, 0xc8, 0x8f, 0xa9, 0x7f, 0x6a, 0x87, 0xc5, 0xfa, 0xe3, 0x05, 0x25, 0x80, 0xa9, 0x67, 0x73, - 0x15, 0x58, 0xc5, 0x6b, 0x48, 0x66, 0x59, 0xb7, 0x21, 0xa2, 0x99, 0x8b, 0xf4, 0xb7, 0x69, 0x78, - 0x7b, 0xa1, 0xf3, 0x85, 0x81, 0xbe, 0x07, 0x60, 0x58, 0xce, 0xc4, 0x17, 0x05, 0x59, 0x9c, 0x4f, - 0x45, 0x2e, 0xe1, 0x7b, 0x9f, 0x9d, 0x3d, 0x13, 0x3f, 0xd2, 0x67, 0xb8, 0x1e, 0x84, 0x88, 0x03, - 0xee, 0x4e, 0x03, 0xcd, 0xf2, 0x40, 0xdf, 0x5f, 0x32, 0xd3, 0xb9, 0x5a, 0xf7, 0x29, 0x20, 0xcd, - 0x34, 0xa8, 0xe5, 0xab, 0x9e, 0xef, 0x52, 0x32, 0x36, 0xac, 0x11, 0x3f, 0x80, 0x0b, 0xfb, 0xb9, - 0x21, 0x31, 0x3d, 0xaa, 0xac, 0x09, 0x75, 0x3f, 0xd4, 0x32, 0x0b, 0x5e, 0x65, 0xdc, 0x98, 0x45, - 0x3e, 0x61, 0x21, 0xd4, 0x91, 0x45, 0xf5, 0xef, 0x2b, 0x50, 0x8a, 0xb5, 0x75, 0xf8, 0x0a, 0x94, - 0x9f, 0x90, 0x67, 0x44, 0x0d, 0x5b, 0x75, 0x91, 0x89, 0x12, 0x93, 0xf5, 0x82, 0x76, 0xfd, 0x53, - 0xd8, 0xe4, 0x10, 0x7b, 0xe2, 0x53, 0x57, 0xd5, 0x4c, 0xe2, 0x79, 0x3c, 0x69, 0x05, 0x0e, 0xc5, - 0x4c, 0xd7, 0x65, 0xaa, 0x46, 0xa8, 0xc1, 0xb7, 0x61, 0x83, 0x5b, 0x8c, 0x27, 0xa6, 0x6f, 0x38, - 0x26, 0x55, 0xd9, 0xe5, 0xc1, 0xe3, 0x07, 0x71, 0x14, 0xd9, 0x3a, 0x43, 0x1c, 0x05, 0x00, 0x16, - 0x91, 0x87, 0x9b, 0xf0, 0x1e, 0x37, 0x1b, 0x51, 0x8b, 0xba, 0xc4, 0xa7, 0x2a, 0xfd, 0x7a, 0x42, - 0x4c, 0x4f, 0x25, 0x96, 0xae, 0x9e, 0x12, 0xef, 0x54, 0xda, 0x64, 0x0e, 0x0e, 0xd2, 0x52, 0x4a, - 0xb9, 0xc4, 0x80, 0x87, 0x01, 0x4e, 0xe6, 0xb0, 0xba, 0xa5, 0x7f, 0x41, 0xbc, 0x53, 0xbc, 0x0f, - 0x17, 0xb8, 0x17, 0xcf, 0x77, 0x0d, 0x6b, 0xa4, 0x6a, 0xa7, 0x54, 0x7b, 0xaa, 0x4e, 0xfc, 0xe1, - 0x5d, 0xe9, 0x9d, 0xf8, 0xf7, 0x79, 0x84, 0x7d, 0x8e, 0x69, 0x30, 0xc8, 0xb1, 0x3f, 0xbc, 0x8b, - 0xfb, 0x50, 0x66, 0x8b, 0x31, 0x36, 0xbe, 0xa1, 0xea, 0xd0, 0x76, 0x79, 0x65, 0xa9, 0x2c, 0xd8, - 0xd9, 0xb1, 0x0c, 0xd6, 0xba, 0x81, 0xc1, 0x91, 0xad, 0xd3, 0xfd, 0x5c, 0xbf, 0x27, 0xcb, 0x4d, - 0xa5, 0x14, 0x7a, 0x79, 0x60, 0xbb, 0x8c, 0x50, 0x23, 0x3b, 0x4a, 0x70, 0x49, 0x10, 0x6a, 0x64, - 0x87, 0xe9, 0xbd, 0x0d, 0x1b, 0x9a, 0x26, 0xe6, 0x6c, 0x68, 0x6a, 0xd0, 0xe2, 0x7b, 0x12, 0x4a, - 0x24, 0x4b, 0xd3, 0x0e, 0x05, 0x20, 0xe0, 0xb8, 0x87, 0x3f, 0x87, 0xb7, 0xa7, 0xc9, 0x8a, 0x1b, - 0xae, 0xcf, 0xcd, 0x72, 0xd6, 0xf4, 0x36, 0x6c, 0x38, 0x67, 0xf3, 0x86, 0x38, 0xf1, 0x45, 0xe7, - 0x6c, 0xd6, 0xec, 0x23, 0x7e, 0x6d, 0x73, 0xa9, 0x46, 0x7c, 0xaa, 0x4b, 0x17, 0xe3, 0xe8, 0x98, - 0x02, 0xef, 0x02, 0xd2, 0x34, 0x95, 0x5a, 0xe4, 0xc4, 0xa4, 0x2a, 0x71, 0xa9, 0x45, 0x3c, 0xe9, - 0x72, 0x1c, 0x5c, 0xd1, 0x34, 0x99, 0x6b, 0xeb, 0x5c, 0x89, 0xaf, 0xc1, 0xba, 0x7d, 0xf2, 0x44, - 0x13, 0xcc, 0x52, 0x1d, 0x97, 0x0e, 0x8d, 0x17, 0xd2, 0x87, 0x3c, 0x4d, 0x6b, 0x4c, 0xc1, 0x79, - 0xd5, 0xe3, 0x62, 0xfc, 0x09, 0x20, 0xcd, 0x3b, 0x25, 0xae, 0xc3, 0x4b, 0xbb, 0xe7, 0x10, 0x8d, - 0x4a, 0x1f, 0x09, 0xa8, 0x90, 0x77, 0x42, 0x31, 0x63, 0xb6, 0xf7, 0xdc, 0x18, 0xfa, 0xa1, 0xc7, - 0xab, 0x82, 0xd9, 0x5c, 0x16, 0x78, 0xdb, 0x01, 0xe4, 0x9c, 0x3a, 0xc9, 0x0f, 0xef, 0x70, 0x58, - 0xc5, 0x39, 0x75, 0xe2, 0xdf, 0x7d, 0x04, 0x9b, 0x13, 0xcb, 0xb0, 0x7c, 0xea, 0x3a, 0x2e, 0x65, - 0xed, 0xbe, 0xd8, 0xb3, 0xd2, 0xbf, 0x57, 0x96, 0x34, 0xec, 0xc7, 0x71, 0xb4, 0xa0, 0x8a, 0xb2, - 0x31, 0x99, 0x17, 0x56, 0xf7, 0xa1, 0x1c, 0x67, 0x10, 0x2e, 0x82, 0xe0, 0x10, 0x4a, 0xb1, 0x6a, - 0xdc, 0xe8, 0x36, 0x59, 0x1d, 0xfd, 0x4a, 0x46, 0x69, 0x56, 0xcf, 0xdb, 0xad, 0x81, 0xac, 0x2a, - 0xc7, 0x9d, 0x41, 0xeb, 0x48, 0x46, 0x99, 0x6b, 0xc5, 0xc2, 0x7f, 0x56, 0xd0, 0xcb, 0x97, 0x2f, - 0x5f, 0xa6, 0x1f, 0x66, 0x0b, 0x1f, 0xa3, 0xab, 0xd5, 0xef, 0xd3, 0x50, 0x49, 0x76, 0xd2, 0xf8, - 0xe7, 0x70, 0x31, 0xbc, 0xf6, 0x7a, 0xd4, 0x57, 0x9f, 0x1b, 0x2e, 0xa7, 0xf6, 0x98, 0x88, 0x5e, - 0x34, 0x5a, 0x95, 0xcd, 0x00, 0xd5, 0xa7, 0xfe, 0x97, 0x86, 0xcb, 0x88, 0x3b, 0x26, 0x3e, 0x6e, - 0xc3, 0x65, 0xcb, 0x56, 0x3d, 0x9f, 0x58, 0x3a, 0x71, 0x75, 0x75, 0xfa, 0xe0, 0xa0, 0x12, 0x4d, - 0xa3, 0x9e, 0x67, 0x8b, 0x92, 0x12, 0x79, 0x79, 0xd7, 0xb2, 0xfb, 0x01, 0x78, 0x7a, 0xd6, 0xd6, - 0x03, 0xe8, 0x0c, 0x83, 0x32, 0xcb, 0x18, 0xf4, 0x0e, 0x14, 0xc7, 0xc4, 0x51, 0xa9, 0xe5, 0xbb, - 0x67, 0xbc, 0xff, 0x2b, 0x28, 0x85, 0x31, 0x71, 0x64, 0x36, 0x7e, 0x73, 0x2b, 0x91, 0xcc, 0x66, - 0x01, 0x15, 0x1f, 0x66, 0x0b, 0x45, 0x04, 0xd5, 0x7f, 0x66, 0xa0, 0x1c, 0xef, 0x07, 0x59, 0x7b, - 0xad, 0xf1, 0xb3, 0x3f, 0xc5, 0x4f, 0x87, 0x0f, 0x5e, 0xd9, 0x3d, 0xd6, 0x1a, 0xac, 0x28, 0xec, - 0xe7, 0x45, 0x97, 0xa6, 0x08, 0x4b, 0x56, 0x90, 0xd9, 0x79, 0x40, 0x45, 0xef, 0x5f, 0x50, 0x82, - 0x11, 0x3e, 0x84, 0xfc, 0x13, 0x8f, 0xfb, 0xce, 0x73, 0xdf, 0x1f, 0xbe, 0xda, 0xf7, 0xc3, 0x3e, - 0x77, 0x5e, 0x7c, 0xd8, 0x57, 0x3b, 0x5d, 0xe5, 0xa8, 0xde, 0x56, 0x02, 0x73, 0x7c, 0x09, 0xb2, - 0x26, 0xf9, 0xe6, 0x2c, 0x59, 0x3e, 0xb8, 0xe8, 0xbc, 0x8b, 0x70, 0x09, 0xb2, 0xcf, 0x29, 0x79, - 0x9a, 0x3c, 0xb4, 0xb9, 0xe8, 0x0d, 0x6e, 0x86, 0x5d, 0xc8, 0xf1, 0x7c, 0x61, 0x80, 0x20, 0x63, - 0xe8, 0x2d, 0x5c, 0x80, 0x6c, 0xa3, 0xab, 0xb0, 0x0d, 0x81, 0xa0, 0x2c, 0xa4, 0x6a, 0xaf, 0x25, - 0x37, 0x64, 0x94, 0xae, 0xde, 0x86, 0xbc, 0x48, 0x02, 0xdb, 0x2c, 0x51, 0x1a, 0xd0, 0x5b, 0xc1, - 0x30, 0xf0, 0x91, 0x0a, 0xb5, 0xc7, 0x47, 0x07, 0xb2, 0x82, 0xd2, 0xc9, 0xa5, 0xce, 0xa2, 0x5c, - 0xd5, 0x83, 0x72, 0xbc, 0x21, 0xfc, 0x51, 0x58, 0x56, 0xfd, 0x6b, 0x0a, 0x4a, 0xb1, 0x06, 0x8f, - 0xb5, 0x16, 0xc4, 0x34, 0xed, 0xe7, 0x2a, 0x31, 0x0d, 0xe2, 0x05, 0xd4, 0x00, 0x2e, 0xaa, 0x33, - 0xc9, 0x79, 0x97, 0xee, 0x47, 0xda, 0x22, 0x39, 0x94, 0xaf, 0xfe, 0x29, 0x05, 0x68, 0xb6, 0x45, - 0x9c, 0x09, 0x33, 0xf5, 0x53, 0x86, 0x59, 0xfd, 0x63, 0x0a, 0x2a, 0xc9, 0xbe, 0x70, 0x26, 0xbc, - 0x2b, 0x3f, 0x69, 0x78, 0xff, 0x48, 0xc3, 0x6a, 0xa2, 0x1b, 0x3c, 0x6f, 0x74, 0x5f, 0xc3, 0xba, - 0xa1, 0xd3, 0xb1, 0x63, 0xfb, 0xd4, 0xd2, 0xce, 0x54, 0x93, 0x3e, 0xa3, 0xa6, 0x54, 0xe5, 0x87, - 0xc6, 0xee, 0xab, 0xfb, 0xcd, 0x5a, 0x6b, 0x6a, 0xd7, 0x66, 0x66, 0xfb, 0x1b, 0xad, 0xa6, 0x7c, - 0xd4, 0xeb, 0x0e, 0xe4, 0x4e, 0xe3, 0xb1, 0x7a, 0xdc, 0xf9, 0x65, 0xa7, 0xfb, 0x65, 0x47, 0x41, - 0xc6, 0x0c, 0xec, 0x0d, 0x6e, 0xfb, 0x1e, 0xa0, 0xd9, 0xa0, 0xf0, 0x45, 0x58, 0x14, 0x16, 0x7a, - 0x0b, 0x6f, 0xc0, 0x5a, 0xa7, 0xab, 0xf6, 0x5b, 0x4d, 0x59, 0x95, 0x1f, 0x3c, 0x90, 0x1b, 0x83, - 0xbe, 0xb8, 0x80, 0x47, 0xe8, 0x41, 0x62, 0x83, 0x57, 0xff, 0x90, 0x81, 0x8d, 0x05, 0x91, 0xe0, - 0x7a, 0xd0, 0xfb, 0x8b, 0xeb, 0xc8, 0x8d, 0xf3, 0x44, 0x5f, 0x63, 0xdd, 0x45, 0x8f, 0xb8, 0x7e, - 0x70, 0x55, 0xf8, 0x04, 0x58, 0x96, 0x2c, 0xdf, 0x18, 0x1a, 0xd4, 0x0d, 0xde, 0x2b, 0xc4, 0x85, - 0x60, 0x6d, 0x2a, 0x17, 0x4f, 0x16, 0x3f, 0x03, 0xec, 0xd8, 0x9e, 0xe1, 0x1b, 0xcf, 0xa8, 0x6a, - 0x58, 0xe1, 0xe3, 0x06, 0xbb, 0x20, 0x64, 0x15, 0x14, 0x6a, 0x5a, 0x96, 0x1f, 0xa1, 0x2d, 0x3a, - 0x22, 0x33, 0x68, 0x76, 0x98, 0x67, 0x14, 0x14, 0x6a, 0x22, 0xf4, 0x15, 0x28, 0xeb, 0xf6, 0x84, - 0xb5, 0x5b, 0x02, 0xc7, 0x6a, 0x47, 0x4a, 0x29, 0x09, 0x59, 0x04, 0x09, 0xfa, 0xe1, 0xe9, 0xab, - 0x4a, 0x59, 0x29, 0x09, 0x99, 0x80, 0x5c, 0x85, 0x35, 0x32, 0x1a, 0xb9, 0xcc, 0x79, 0xe8, 0x48, - 0x74, 0xf8, 0x95, 0x48, 0xcc, 0x81, 0x5b, 0x0f, 0xa1, 0x10, 0xe6, 0x81, 0x95, 0x6a, 0x96, 0x09, - 0xd5, 0x11, 0x6f, 0x5b, 0xe9, 0x9d, 0xa2, 0x52, 0xb0, 0x42, 0xe5, 0x15, 0x28, 0x1b, 0x9e, 0x3a, - 0x7d, 0x64, 0x4d, 0x6f, 0xa7, 0x77, 0x0a, 0x4a, 0xc9, 0xf0, 0xa2, 0x57, 0xb5, 0xea, 0x77, 0x69, - 0xa8, 0x24, 0x1f, 0x89, 0x71, 0x13, 0x0a, 0xa6, 0xad, 0x11, 0x4e, 0x2d, 0xf1, 0x0b, 0xc5, 0xce, - 0x6b, 0xde, 0x95, 0x6b, 0xed, 0x00, 0xaf, 0x44, 0x96, 0x5b, 0x7f, 0x4b, 0x41, 0x21, 0x14, 0xe3, - 0x0b, 0x90, 0x75, 0x88, 0x7f, 0xca, 0xdd, 0xe5, 0x0e, 0xd2, 0x28, 0xa5, 0xf0, 0x31, 0x93, 0x7b, - 0x0e, 0xb1, 0x38, 0x05, 0x02, 0x39, 0x1b, 0xb3, 0x75, 0x35, 0x29, 0xd1, 0xf9, 0xf5, 0xc1, 0x1e, - 0x8f, 0xa9, 0xe5, 0x7b, 0xe1, 0xba, 0x06, 0xf2, 0x46, 0x20, 0xc6, 0xd7, 0x61, 0xdd, 0x77, 0x89, - 0x61, 0x26, 0xb0, 0x59, 0x8e, 0x45, 0xa1, 0x22, 0x02, 0xef, 0xc3, 0xa5, 0xd0, 0xaf, 0x4e, 0x7d, - 0xa2, 0x9d, 0x52, 0x7d, 0x6a, 0x94, 0xe7, 0x2f, 0x90, 0x17, 0x03, 0x40, 0x33, 0xd0, 0x87, 0xb6, - 0xd5, 0xef, 0x53, 0xb0, 0x1e, 0x5e, 0x78, 0xf4, 0x28, 0x59, 0x47, 0x00, 0xc4, 0xb2, 0x6c, 0x3f, - 0x9e, 0xae, 0x79, 0x2a, 0xcf, 0xd9, 0xd5, 0xea, 0x91, 0x91, 0x12, 0x73, 0xb0, 0x35, 0x06, 0x98, - 0x6a, 0x96, 0xa6, 0xed, 0x32, 0x94, 0x82, 0x5f, 0x00, 0xf8, 0xcf, 0x48, 0xe2, 0x8a, 0x0c, 0x42, - 0xc4, 0x6e, 0x46, 0x78, 0x13, 0x72, 0x27, 0x74, 0x64, 0x58, 0xc1, 0xbb, 0xa4, 0x18, 0x84, 0xaf, - 0x9d, 0xd9, 0xe8, 0xb5, 0xf3, 0xe0, 0x77, 0x29, 0xd8, 0xd0, 0xec, 0xf1, 0x6c, 0xbc, 0x07, 0x68, - 0xe6, 0x9e, 0xee, 0x7d, 0x91, 0xfa, 0xea, 0xfe, 0xc8, 0xf0, 0x4f, 0x27, 0x27, 0x35, 0xcd, 0x1e, - 0xef, 0x8e, 0x6c, 0x93, 0x58, 0xa3, 0xe9, 0xef, 0x60, 0xfc, 0x1f, 0xed, 0xc6, 0x88, 0x5a, 0x37, - 0x46, 0x76, 0xec, 0x57, 0xb1, 0x7b, 0xd3, 0x7f, 0xbf, 0x4d, 0x67, 0x0e, 0x7b, 0x07, 0x7f, 0x4e, - 0x6f, 0x1d, 0x8a, 0x6f, 0xf5, 0xc2, 0xdc, 0x28, 0x74, 0x68, 0x52, 0x8d, 0xcd, 0xf7, 0x7f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x8e, 0x54, 0xe7, 0xef, 0x60, 0x1b, 0x00, 0x00, +func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor_e5baabe45344a177) } + +var fileDescriptor_e5baabe45344a177 = []byte{ + // 2589 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6, + 0x15, 0x0e, 0xf5, 0xb7, 0xd2, 0x91, 0x56, 0x3b, 0x3b, 0xbb, 0xb1, 0xe9, 0xcd, 0x8f, 0xd7, 0xca, + 0x8f, 0xd7, 0x4e, 0xac, 0x0d, 0x1c, 0xdb, 0x71, 0xd6, 0x45, 0x5a, 0xad, 0x44, 0x6f, 0xe4, 0xee, + 0x4a, 0x2a, 0xa5, 0x6d, 0x7e, 0x80, 0x82, 0x98, 0x25, 0x47, 0x12, 0x6d, 0x8a, 0x64, 0x48, 0xca, + 0xf6, 0x06, 0xbd, 0x30, 0xd0, 0xab, 0x5e, 0x15, 0xe8, 0x55, 0x51, 0x14, 0xbd, 0xe8, 0x4d, 0x80, + 0x3e, 0x40, 0x81, 0xde, 0xf5, 0x09, 0x0a, 0xe4, 0x0d, 0x8a, 0xb6, 0x40, 0xfb, 0x08, 0xbd, 0x2c, + 0x66, 0x86, 0xa4, 0x48, 0x49, 0x1b, 0x6f, 0x02, 0xc4, 0xb9, 0x92, 0xe6, 0x3b, 0xdf, 0x39, 0x73, + 0xe6, 0xcc, 0x99, 0x99, 0x33, 0x43, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7, 0x04, + 0xce, 0xc9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0, 0x9a, + 0x60, 0xd4, 0x23, 0x46, 0xed, 0x08, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d, 0xf0, + 0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0x7c, 0xf3, 0xcd, 0xfa, 0x9c, 0x52, + 0x3d, 0xad, 0xd1, 0x63, 0xb0, 0xca, 0x35, 0x6a, 0xff, 0xce, 0xc1, 0xc6, 0x12, 0x29, 0xc6, 0x90, + 0xb3, 0xc9, 0x84, 0x59, 0x94, 0x76, 0x4a, 0x2a, 0xff, 0x8f, 0x65, 0x58, 0x71, 0x89, 0xfe, 0x88, + 0x8c, 0xa8, 0x9c, 0xe1, 0x70, 0xd4, 0xc4, 0xaf, 0x03, 0x18, 0xd4, 0xa5, 0xb6, 0x41, 0x6d, 0xfd, + 0x54, 0xce, 0x6e, 0x67, 0x77, 0x4a, 0x6a, 0x02, 0xc1, 0xef, 0xc0, 0xba, 0x3b, 0x3d, 0xb1, 0x4c, + 0x5d, 0x4b, 0xd0, 0x60, 0x3b, 0xbb, 0x93, 0x57, 0x91, 0x10, 0xb4, 0x66, 0xe4, 0xab, 0xb0, 0xf6, + 0x84, 0x92, 0x47, 0x49, 0x6a, 0x99, 0x53, 0xab, 0x0c, 0x4e, 0x10, 0x9b, 0x50, 0x99, 0x50, 0xdf, + 0x27, 0x23, 0xaa, 0x05, 0xa7, 0x2e, 0x95, 0x73, 0x7c, 0xf4, 0xdb, 0x0b, 0xa3, 0x9f, 0x1f, 0x79, + 0x39, 0xd4, 0x1a, 0x9c, 0xba, 0x14, 0x37, 0xa0, 0x44, 0xed, 0xe9, 0x44, 0x58, 0xc8, 0x9f, 0x11, + 0x3f, 0xc5, 0x9e, 0x4e, 0xe6, 0xad, 0x14, 0x99, 0x5a, 0x68, 0x62, 0xc5, 0xa7, 0xde, 0x63, 0x53, + 0xa7, 0x72, 0x81, 0x1b, 0xb8, 0xba, 0x60, 0xa0, 0x2f, 0xe4, 0xf3, 0x36, 0x22, 0x3d, 0xdc, 0x84, + 0x12, 0x7d, 0x1a, 0x50, 0xdb, 0x37, 0x1d, 0x5b, 0x5e, 0xe1, 0x46, 0xde, 0x5a, 0x32, 0x8b, 0xd4, + 0x32, 0xe6, 0x4d, 0xcc, 0xf4, 0xf0, 0x1d, 0x58, 0x71, 0xdc, 0xc0, 0x74, 0x6c, 0x5f, 0x2e, 0x6e, + 0x4b, 0x3b, 0xe5, 0x9b, 0xaf, 0x2e, 0x4d, 0x84, 0xae, 0xe0, 0xa8, 0x11, 0x19, 0xb7, 0x01, 0xf9, + 0xce, 0xd4, 0xd3, 0xa9, 0xa6, 0x3b, 0x06, 0xd5, 0x4c, 0x7b, 0xe8, 0xc8, 0x25, 0x6e, 0xe0, 0xf2, + 0xe2, 0x40, 0x38, 0xb1, 0xe9, 0x18, 0xb4, 0x6d, 0x0f, 0x1d, 0xb5, 0xea, 0xa7, 0xda, 0xf8, 0x02, + 0x14, 0xfc, 0x53, 0x3b, 0x20, 0x4f, 0xe5, 0x0a, 0xcf, 0x90, 0xb0, 0x55, 0xfb, 0x6b, 0x01, 0xd6, + 0xce, 0x93, 0x62, 0xf7, 0x20, 0x3f, 0x64, 0xa3, 0x94, 0x33, 0xdf, 0x26, 0x06, 0x42, 0x27, 0x1d, + 0xc4, 0xc2, 0x77, 0x0c, 0x62, 0x03, 0xca, 0x36, 0xf5, 0x03, 0x6a, 0x88, 0x8c, 0xc8, 0x9e, 0x33, + 0xa7, 0x40, 0x28, 0x2d, 0xa6, 0x54, 0xee, 0x3b, 0xa5, 0xd4, 0xa7, 0xb0, 0x16, 0xbb, 0xa4, 0x79, + 0xc4, 0x1e, 0x45, 0xb9, 0xb9, 0xfb, 0x3c, 0x4f, 0xea, 0x4a, 0xa4, 0xa7, 0x32, 0x35, 0xb5, 0x4a, + 0x53, 0x6d, 0xdc, 0x02, 0x70, 0x6c, 0xea, 0x0c, 0x35, 0x83, 0xea, 0x96, 0x5c, 0x3c, 0x23, 0x4a, + 0x5d, 0x46, 0x59, 0x88, 0x92, 0x23, 0x50, 0xdd, 0xc2, 0x1f, 0xce, 0x52, 0x6d, 0xe5, 0x8c, 0x4c, + 0x39, 0x12, 0x8b, 0x6c, 0x21, 0xdb, 0x8e, 0xa1, 0xea, 0x51, 0x96, 0xf7, 0xd4, 0x08, 0x47, 0x56, + 0xe2, 0x4e, 0xd4, 0x9f, 0x3b, 0x32, 0x35, 0x54, 0x13, 0x03, 0x5b, 0xf5, 0x92, 0x4d, 0xfc, 0x06, + 0xc4, 0x80, 0xc6, 0xd3, 0x0a, 0xf8, 0x2e, 0x54, 0x89, 0xc0, 0x0e, 0x99, 0xd0, 0xad, 0x2f, 0xa1, + 0x9a, 0x0e, 0x0f, 0xde, 0x84, 0xbc, 0x1f, 0x10, 0x2f, 0xe0, 0x59, 0x98, 0x57, 0x45, 0x03, 0x23, + 0xc8, 0x52, 0xdb, 0xe0, 0xbb, 0x5c, 0x5e, 0x65, 0x7f, 0xf1, 0x4f, 0x66, 0x03, 0xce, 0xf2, 0x01, + 0xbf, 0xbd, 0x38, 0xa3, 0x29, 0xcb, 0xf3, 0xe3, 0xde, 0xfa, 0x00, 0x56, 0x53, 0x03, 0x38, 0x6f, + 0xd7, 0xb5, 0x5f, 0xc2, 0xcb, 0x4b, 0x4d, 0xe3, 0x4f, 0x61, 0x73, 0x6a, 0x9b, 0x76, 0x40, 0x3d, + 0xd7, 0xa3, 0x2c, 0x63, 0x45, 0x57, 0xf2, 0x7f, 0x56, 0xce, 0xc8, 0xb9, 0xe3, 0x24, 0x5b, 0x58, + 0x51, 0x37, 0xa6, 0x8b, 0xe0, 0xf5, 0x52, 0xf1, 0xbf, 0x2b, 0xe8, 0xd9, 0xb3, 0x67, 0xcf, 0x32, + 0xb5, 0xdf, 0x15, 0x60, 0x73, 0xd9, 0x9a, 0x59, 0xba, 0x7c, 0x2f, 0x40, 0xc1, 0x9e, 0x4e, 0x4e, + 0xa8, 0xc7, 0x83, 0x94, 0x57, 0xc3, 0x16, 0x6e, 0x40, 0xde, 0x22, 0x27, 0xd4, 0x92, 0x73, 0xdb, + 0xd2, 0x4e, 0xf5, 0xe6, 0x3b, 0xe7, 0x5a, 0x95, 0xf5, 0x43, 0xa6, 0xa2, 0x0a, 0x4d, 0xfc, 0x11, + 0xe4, 0xc2, 0x2d, 0x9a, 0x59, 0xb8, 0x7e, 0x3e, 0x0b, 0x6c, 0x2d, 0xa9, 0x5c, 0x0f, 0xbf, 0x02, + 0x25, 0xf6, 0x2b, 0x72, 0xa3, 0xc0, 0x7d, 0x2e, 0x32, 0x80, 0xe5, 0x05, 0xde, 0x82, 0x22, 0x5f, + 0x26, 0x06, 0x8d, 0x8e, 0xb6, 0xb8, 0xcd, 0x12, 0xcb, 0xa0, 0x43, 0x32, 0xb5, 0x02, 0xed, 0x31, + 0xb1, 0xa6, 0x94, 0x27, 0x7c, 0x49, 0xad, 0x84, 0xe0, 0xcf, 0x19, 0x86, 0x2f, 0x43, 0x59, 0xac, + 0x2a, 0xd3, 0x36, 0xe8, 0x53, 0xbe, 0x7b, 0xe6, 0x55, 0xb1, 0xd0, 0xda, 0x0c, 0x61, 0xdd, 0x3f, + 0xf4, 0x1d, 0x3b, 0x4a, 0x4d, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x1f, 0xcc, 0x6f, 0xdc, 0xaf, 0x2d, + 0x1f, 0xde, 0x7c, 0x4e, 0xd5, 0xfe, 0x92, 0x81, 0x1c, 0xdf, 0x2f, 0xd6, 0xa0, 0x3c, 0xf8, 0xac, + 0xa7, 0x68, 0xad, 0xee, 0xf1, 0xfe, 0xa1, 0x82, 0x24, 0x5c, 0x05, 0xe0, 0xc0, 0xfd, 0xc3, 0x6e, + 0x63, 0x80, 0x32, 0x71, 0xbb, 0xdd, 0x19, 0xdc, 0xb9, 0x85, 0xb2, 0xb1, 0xc2, 0xb1, 0x00, 0x72, + 0x49, 0xc2, 0xfb, 0x37, 0x51, 0x1e, 0x23, 0xa8, 0x08, 0x03, 0xed, 0x4f, 0x95, 0xd6, 0x9d, 0x5b, + 0xa8, 0x90, 0x46, 0xde, 0xbf, 0x89, 0x56, 0xf0, 0x2a, 0x94, 0x38, 0xb2, 0xdf, 0xed, 0x1e, 0xa2, + 0x62, 0x6c, 0xb3, 0x3f, 0x50, 0xdb, 0x9d, 0x03, 0x54, 0x8a, 0x6d, 0x1e, 0xa8, 0xdd, 0xe3, 0x1e, + 0x82, 0xd8, 0xc2, 0x91, 0xd2, 0xef, 0x37, 0x0e, 0x14, 0x54, 0x8e, 0x19, 0xfb, 0x9f, 0x0d, 0x94, + 0x3e, 0xaa, 0xa4, 0xdc, 0x7a, 0xff, 0x26, 0x5a, 0x8d, 0xbb, 0x50, 0x3a, 0xc7, 0x47, 0xa8, 0x8a, + 0xd7, 0x61, 0x55, 0x74, 0x11, 0x39, 0xb1, 0x36, 0x07, 0xdd, 0xb9, 0x85, 0xd0, 0xcc, 0x11, 0x61, + 0x65, 0x3d, 0x05, 0xdc, 0xb9, 0x85, 0x70, 0xad, 0x09, 0x79, 0x9e, 0x5d, 0x18, 0x43, 0xf5, 0xb0, + 0xb1, 0xaf, 0x1c, 0x6a, 0xdd, 0xde, 0xa0, 0xdd, 0xed, 0x34, 0x0e, 0x91, 0x34, 0xc3, 0x54, 0xe5, + 0x67, 0xc7, 0x6d, 0x55, 0x69, 0xa1, 0x4c, 0x12, 0xeb, 0x29, 0x8d, 0x81, 0xd2, 0x42, 0xd9, 0x9a, + 0x0e, 0x9b, 0xcb, 0xf6, 0xc9, 0xa5, 0x2b, 0x23, 0x31, 0xc5, 0x99, 0x33, 0xa6, 0x98, 0xdb, 0x5a, + 0x98, 0xe2, 0x7f, 0x65, 0x60, 0x63, 0xc9, 0x59, 0xb1, 0xb4, 0x93, 0x1f, 0x43, 0x5e, 0xa4, 0xa8, + 0x38, 0x3d, 0xaf, 0x2d, 0x3d, 0x74, 0x78, 0xc2, 0x2e, 0x9c, 0xa0, 0x5c, 0x2f, 0x59, 0x41, 0x64, + 0xcf, 0xa8, 0x20, 0x98, 0x89, 0x85, 0x3d, 0xfd, 0x17, 0x0b, 0x7b, 0xba, 0x38, 0xf6, 0xee, 0x9c, + 0xe7, 0xd8, 0xe3, 0xd8, 0xb7, 0xdb, 0xdb, 0xf3, 0x4b, 0xf6, 0xf6, 0x7b, 0xb0, 0xbe, 0x60, 0xe8, + 0xdc, 0x7b, 0xec, 0xaf, 0x24, 0x90, 0xcf, 0x0a, 0xce, 0x73, 0x76, 0xba, 0x4c, 0x6a, 0xa7, 0xbb, + 0x37, 0x1f, 0xc1, 0x2b, 0x67, 0x4f, 0xc2, 0xc2, 0x5c, 0x7f, 0x25, 0xc1, 0x85, 0xe5, 0x95, 0xe2, + 0x52, 0x1f, 0x3e, 0x82, 0xc2, 0x84, 0x06, 0x63, 0x27, 0xaa, 0x96, 0xde, 0x5e, 0x72, 0x06, 0x33, + 0xf1, 0xfc, 0x64, 0x87, 0x5a, 0xc9, 0x43, 0x3c, 0x7b, 0x56, 0xb9, 0x27, 0xbc, 0x59, 0xf0, 0xf4, + 0xd7, 0x19, 0x78, 0x79, 0xa9, 0xf1, 0xa5, 0x8e, 0xbe, 0x06, 0x60, 0xda, 0xee, 0x34, 0x10, 0x15, + 0x91, 0xd8, 0x60, 0x4b, 0x1c, 0xe1, 0x9b, 0x17, 0xdb, 0x3c, 0xa7, 0x41, 0x2c, 0xcf, 0x72, 0x39, + 0x08, 0x88, 0x13, 0xee, 0xce, 0x1c, 0xcd, 0x71, 0x47, 0x5f, 0x3f, 0x63, 0xa4, 0x0b, 0x89, 0xf9, + 0x1e, 0x20, 0xdd, 0x32, 0xa9, 0x1d, 0x68, 0x7e, 0xe0, 0x51, 0x32, 0x31, 0xed, 0x11, 0x3f, 0x41, + 0x8a, 0x7b, 0xf9, 0x21, 0xb1, 0x7c, 0xaa, 0xae, 0x09, 0x71, 0x3f, 0x92, 0x32, 0x0d, 0x9e, 0x40, + 0x5e, 0x42, 0xa3, 0x90, 0xd2, 0x10, 0xe2, 0x58, 0xa3, 0xf6, 0xdb, 0x12, 0x94, 0x13, 0x75, 0x35, + 0xbe, 0x02, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0x88, 0x44, 0x99, 0x61, 0xbd, 0xf0, + 0xbe, 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0x1e, 0xb4, + 0x22, 0xa7, 0x62, 0x26, 0xeb, 0x32, 0x51, 0x33, 0x92, 0xe0, 0xdb, 0xb0, 0xc1, 0x35, 0x26, 0x53, + 0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xf6, 0xe6, 0xf3, 0x93, 0x24, 0xf6, 0x6c, 0x9d, 0x31, 0x8e, + 0x42, 0x02, 0xf3, 0xc8, 0xc7, 0x2d, 0x78, 0x8d, 0xab, 0x8d, 0xa8, 0x4d, 0x3d, 0x12, 0x50, 0x8d, + 0x7e, 0x31, 0x25, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0xc6, 0xc4, 0x1f, 0xcb, 0x9b, 0xcc, 0xc0, 0x7e, + 0x46, 0x96, 0xd4, 0x4b, 0x8c, 0x78, 0x10, 0xf2, 0x14, 0x4e, 0x6b, 0xd8, 0xc6, 0xc7, 0xc4, 0x1f, + 0xe3, 0x3d, 0xb8, 0xc0, 0xad, 0xf8, 0x81, 0x67, 0xda, 0x23, 0x4d, 0x1f, 0x53, 0xfd, 0x91, 0x36, + 0x0d, 0x86, 0x77, 0xe5, 0x57, 0x92, 0xfd, 0x73, 0x0f, 0xfb, 0x9c, 0xd3, 0x64, 0x94, 0xe3, 0x60, + 0x78, 0x17, 0xf7, 0xa1, 0xc2, 0x26, 0x63, 0x62, 0x7e, 0x49, 0xb5, 0xa1, 0xe3, 0xf1, 0xa3, 0xb1, + 0xba, 0x64, 0x6b, 0x4a, 0x44, 0xb0, 0xde, 0x0d, 0x15, 0x8e, 0x1c, 0x83, 0xee, 0xe5, 0xfb, 0x3d, + 0x45, 0x69, 0xa9, 0xe5, 0xc8, 0xca, 0x7d, 0xc7, 0x63, 0x09, 0x35, 0x72, 0xe2, 0x00, 0x97, 0x45, + 0x42, 0x8d, 0x9c, 0x28, 0xbc, 0xb7, 0x61, 0x43, 0xd7, 0xc5, 0x98, 0x4d, 0x5d, 0x0b, 0xef, 0x58, + 0xbe, 0x8c, 0x52, 0xc1, 0xd2, 0xf5, 0x03, 0x41, 0x08, 0x73, 0xdc, 0xc7, 0x1f, 0xc2, 0xcb, 0xb3, + 0x60, 0x25, 0x15, 0xd7, 0x17, 0x46, 0x39, 0xaf, 0x7a, 0x1b, 0x36, 0xdc, 0xd3, 0x45, 0x45, 0x9c, + 0xea, 0xd1, 0x3d, 0x9d, 0x57, 0xfb, 0x00, 0x36, 0xdd, 0xb1, 0xbb, 0xa8, 0x77, 0x3d, 0xa9, 0x87, + 0xdd, 0xb1, 0x3b, 0xaf, 0xf8, 0x16, 0xbf, 0x70, 0x7b, 0x54, 0x27, 0x01, 0x35, 0xe4, 0x8b, 0x49, + 0x7a, 0x42, 0x80, 0x77, 0x01, 0xe9, 0xba, 0x46, 0x6d, 0x72, 0x62, 0x51, 0x8d, 0x78, 0xd4, 0x26, + 0xbe, 0x7c, 0x39, 0x49, 0xae, 0xea, 0xba, 0xc2, 0xa5, 0x0d, 0x2e, 0xc4, 0xd7, 0x61, 0xdd, 0x39, + 0x79, 0xa8, 0x8b, 0x94, 0xd4, 0x5c, 0x8f, 0x0e, 0xcd, 0xa7, 0xf2, 0x9b, 0x3c, 0xbe, 0x6b, 0x4c, + 0xc0, 0x13, 0xb2, 0xc7, 0x61, 0x7c, 0x0d, 0x90, 0xee, 0x8f, 0x89, 0xe7, 0xf2, 0x3d, 0xd9, 0x77, + 0x89, 0x4e, 0xe5, 0xb7, 0x04, 0x55, 0xe0, 0x9d, 0x08, 0x66, 0x4b, 0xc2, 0x7f, 0x62, 0x0e, 0x83, + 0xc8, 0xe2, 0x55, 0xb1, 0x24, 0x38, 0x16, 0x5a, 0xdb, 0x01, 0xc4, 0x42, 0x91, 0xea, 0x78, 0x87, + 0xd3, 0xaa, 0xee, 0xd8, 0x4d, 0xf6, 0xfb, 0x06, 0xac, 0x32, 0xe6, 0xac, 0xd3, 0x6b, 0xa2, 0x20, + 0x73, 0xc7, 0x89, 0x1e, 0x6f, 0xc1, 0x05, 0x46, 0x9a, 0xd0, 0x80, 0x18, 0x24, 0x20, 0x09, 0xf6, + 0xbb, 0x9c, 0xcd, 0xe2, 0x7e, 0x14, 0x0a, 0x53, 0x7e, 0x7a, 0xd3, 0x93, 0xd3, 0x38, 0xb3, 0x6e, + 0x08, 0x3f, 0x19, 0x16, 0xe5, 0xd6, 0xf7, 0x56, 0x74, 0xd7, 0xf6, 0xa0, 0x92, 0x4c, 0x7c, 0x5c, + 0x02, 0x91, 0xfa, 0x48, 0x62, 0x55, 0x50, 0xb3, 0xdb, 0x62, 0xf5, 0xcb, 0xe7, 0x0a, 0xca, 0xb0, + 0x3a, 0xea, 0xb0, 0x3d, 0x50, 0x34, 0xf5, 0xb8, 0x33, 0x68, 0x1f, 0x29, 0x28, 0x9b, 0x28, 0xd8, + 0x1f, 0xe4, 0x8a, 0x6f, 0xa3, 0xab, 0xb5, 0xaf, 0x33, 0x50, 0x4d, 0xdf, 0xc0, 0xf0, 0x8f, 0xe0, + 0x62, 0xf4, 0x5c, 0xe2, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0x45, 0x4e, 0x88, 0x38, 0x1d, 0xe3, + 0x9c, 0xd8, 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0xbd, 0x4d, 0x48, 0x80, 0x0f, 0xe1, + 0xb2, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0xa8, 0xd2, 0x88, 0xae, 0x53, + 0xdf, 0x77, 0xc4, 0x49, 0x18, 0x5b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x76, 0x44, 0x34, 0x42, + 0xea, 0x5c, 0xfe, 0x66, 0xcf, 0xca, 0xdf, 0x57, 0xa0, 0x34, 0x21, 0xae, 0x46, 0xed, 0xc0, 0x3b, + 0xe5, 0x75, 0x77, 0x51, 0x2d, 0x4e, 0x88, 0xab, 0xb0, 0xf6, 0x0b, 0xb9, 0xfe, 0x3c, 0xc8, 0x15, + 0x8b, 0xa8, 0xf4, 0x20, 0x57, 0x2c, 0x21, 0xa8, 0xfd, 0x33, 0x0b, 0x95, 0x64, 0x1d, 0xce, 0xae, + 0x35, 0x3a, 0x3f, 0xb2, 0x24, 0xbe, 0xa9, 0xbd, 0xf1, 0x8d, 0x55, 0x7b, 0xbd, 0xc9, 0xce, 0xb2, + 0xbd, 0x82, 0xa8, 0x8e, 0x55, 0xa1, 0xc9, 0xea, 0x08, 0x96, 0x6c, 0x54, 0x54, 0x23, 0x45, 0x35, + 0x6c, 0xe1, 0x03, 0x28, 0x3c, 0xf4, 0xb9, 0xed, 0x02, 0xb7, 0xfd, 0xe6, 0x37, 0xdb, 0x7e, 0xd0, + 0xe7, 0xc6, 0x4b, 0x0f, 0xfa, 0x5a, 0xa7, 0xab, 0x1e, 0x35, 0x0e, 0xd5, 0x50, 0x1d, 0x5f, 0x82, + 0x9c, 0x45, 0xbe, 0x3c, 0x4d, 0x9f, 0x7a, 0x1c, 0x3a, 0xef, 0x24, 0x5c, 0x82, 0xdc, 0x13, 0x4a, + 0x1e, 0xa5, 0xcf, 0x1a, 0x0e, 0x7d, 0x8f, 0x8b, 0x61, 0x17, 0xf2, 0x3c, 0x5e, 0x18, 0x20, 0x8c, + 0x18, 0x7a, 0x09, 0x17, 0x21, 0xd7, 0xec, 0xaa, 0x6c, 0x41, 0x20, 0xa8, 0x08, 0x54, 0xeb, 0xb5, + 0x95, 0xa6, 0x82, 0x32, 0xb5, 0xdb, 0x50, 0x10, 0x41, 0x60, 0x8b, 0x25, 0x0e, 0x03, 0x7a, 0x29, + 0x6c, 0x86, 0x36, 0xa4, 0x48, 0x7a, 0x7c, 0xb4, 0xaf, 0xa8, 0x28, 0x93, 0x9e, 0xea, 0x1c, 0xca, + 0xd7, 0x7c, 0xa8, 0x24, 0x0b, 0xf1, 0x17, 0x73, 0xc9, 0xfe, 0x9b, 0x04, 0xe5, 0x44, 0x61, 0xcd, + 0x2a, 0x22, 0x62, 0x59, 0xce, 0x13, 0x8d, 0x58, 0x26, 0xf1, 0xc3, 0xd4, 0x00, 0x0e, 0x35, 0x18, + 0x72, 0xde, 0xa9, 0x7b, 0x41, 0x4b, 0x24, 0x8f, 0x0a, 0xb5, 0x3f, 0x4a, 0x80, 0xe6, 0x2b, 0xdb, + 0x39, 0x37, 0xa5, 0x1f, 0xd2, 0xcd, 0xda, 0x1f, 0x24, 0xa8, 0xa6, 0xcb, 0xd9, 0x39, 0xf7, 0xae, + 0xfc, 0xa0, 0xee, 0xfd, 0x23, 0x03, 0xab, 0xa9, 0x22, 0xf6, 0xbc, 0xde, 0x7d, 0x01, 0xeb, 0xa6, + 0x41, 0x27, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x98, 0x5a, 0x72, 0x8d, 0x6f, 0x1a, + 0xbb, 0xdf, 0x5c, 0x26, 0xd7, 0xdb, 0x33, 0xbd, 0x43, 0xa6, 0xb6, 0xb7, 0xd1, 0x6e, 0x29, 0x47, + 0xbd, 0xee, 0x40, 0xe9, 0x34, 0x3f, 0xd3, 0x8e, 0x3b, 0x3f, 0xed, 0x74, 0x3f, 0xe9, 0xa8, 0xc8, + 0x9c, 0xa3, 0x7d, 0x8f, 0xcb, 0xbe, 0x07, 0x68, 0xde, 0x29, 0x7c, 0x11, 0x96, 0xb9, 0x85, 0x5e, + 0xc2, 0x1b, 0xb0, 0xd6, 0xe9, 0x6a, 0xfd, 0x76, 0x4b, 0xd1, 0x94, 0xfb, 0xf7, 0x95, 0xe6, 0xa0, + 0x2f, 0x1e, 0x3e, 0x62, 0xf6, 0x20, 0xb5, 0xc0, 0x6b, 0xbf, 0xcf, 0xc2, 0xc6, 0x12, 0x4f, 0x70, + 0x23, 0xbc, 0xb2, 0x88, 0x5b, 0xd4, 0x8d, 0xf3, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78, 0x41, + 0x78, 0xc3, 0xb9, 0x06, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2, 0x1e, + 0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xbb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5, 0x4c, + 0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d, 0x47, + 0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x02, 0x15, 0xc3, 0x99, 0xb2, + 0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd, 0x66, + 0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x2a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43, 0xe2, + 0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0xd0, + 0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x40, 0xc5, 0xf4, 0xb5, 0xd9, + 0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca, 0x40, + 0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed, 0x3c, + 0xe7, 0x7b, 0x44, 0xfd, 0x30, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x25, 0x28, 0x46, 0x30, 0xbe, + 0x00, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0xbf, 0x9f, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7, 0x5d, + 0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33, 0x99, + 0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0x77, 0x60, 0x3d, 0xf0, 0x88, 0x69, + 0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc1, 0xa5, 0xc8, 0xae, 0x41, 0x03, 0xa2, + 0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0x8b, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd, 0xda, + 0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x11, 0x00, 0xb1, 0x6d, 0x27, 0x48, 0x86, + 0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc, 0x24, + 0x67, 0x86, 0xed, 0x32, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80, 0xd8, + 0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x84, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd, 0x25, + 0x17, 0xbf, 0xbf, 0xec, 0xff, 0x46, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0xbb, 0x8f, 0xe6, 0x9e, + 0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x52, 0xd7, 0x9d, 0xc9, 0xee, + 0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0xe5, 0x7f, 0xf4, 0x1b, 0x23, 0x6a, 0xdf, 0x18, 0x39, + 0x89, 0xaf, 0xa9, 0xf7, 0x66, 0x7f, 0xff, 0x27, 0x49, 0x7f, 0xca, 0x64, 0x0f, 0x7a, 0xfb, 0x7f, + 0xce, 0x6c, 0x1d, 0x88, 0xee, 0x7a, 0x51, 0x78, 0x54, 0x3a, 0xb4, 0xa8, 0xce, 0x86, 0xfc, 0xff, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xe8, 0xef, 0xc4, 0x9b, 0x1d, 0x00, 0x00, } diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto new file mode 100644 index 000000000000..ed08fcbc5429 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto @@ -0,0 +1,883 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; +option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; +option cc_enable_arenas = true; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; + optional int32 end = 2; + + optional ExtensionRangeOptions options = 3; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + }; + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + }; + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; + optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; + + // Range of reserved numeric values. Reserved values may not be used by + // entries in the same enum. Reserved ranges may not overlap. + // + // Note that this is distinct from DescriptorProto.ReservedRange in that it + // is inclusive such that it can appropriately represent the entire int32 + // domain. + message EnumReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Inclusive. + } + + // Range of reserved numeric values. Reserved numeric values may not be used + // by enum values in the same enum declaration. Reserved ranges may not + // overlap. + repeated EnumReservedRange reserved_range = 4; + + // Reserved enum value names, which may not be reused. A given name may only + // be reserved once. + repeated string reserved_name = 5; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default=false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default=false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default=false]; + + // This option does nothing. + optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default=false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default=SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default=false]; + optional bool java_generic_services = 17 [default=false]; + optional bool py_generic_services = 18 [default=false]; + optional bool php_generic_services = 42 [default=false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default=false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default=false]; + + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + optional string swift_prefix = 39; + + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + optional string php_class_prefix = 40; + + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + optional string php_namespace = 41; + + + // Use this option to change the namespace of php generated metadata classes. + // Default is empty. When this option is empty, the proto file name will be used + // for determining the namespace. + optional string php_metadata_namespace = 44; + + // Use this option to change the package of ruby generated classes. Default + // is empty. When this option is not set, the package name will be used for + // determining the ruby package. + optional string ruby_package = 45; + + // The parser stores options it doesn't recognize here. + // See the documentation for the "Options" section above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. + // See the documentation for the "Options" section above. + extensions 1000 to max; + + reserved 38; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default=false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default=false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default=false]; + + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + optional bool map_entry = 7; + + reserved 8; // javalite_serializable + reserved 9; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default=false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default=false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default=false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 4; // removed jtype +} + +message OneofOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default=false]; + + reserved 5; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default=false]; + + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + // or neither? HTTP based RPC implementation may choose GET verb for safe + // methods, and PUT verb for idempotent methods instead of the default POST. + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0; + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects + } + optional IdempotencyLevel idempotency_level = + 34 [default=IDEMPOTENCY_UNKNOWN]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed=true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed=true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + repeated Annotation annotation = 1; + message Annotation { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + repeated int32 path = 1 [packed=true]; + + // Identifies the filesystem path to the original source .proto. + optional string source_file = 2; + + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + optional int32 begin = 3; + + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + optional int32 end = 4; + } +} diff --git a/vendor/github.com/gorilla/websocket/AUTHORS b/vendor/github.com/gorilla/websocket/AUTHORS new file mode 100644 index 000000000000..1931f400682c --- /dev/null +++ b/vendor/github.com/gorilla/websocket/AUTHORS @@ -0,0 +1,9 @@ +# This is the official list of Gorilla WebSocket authors for copyright +# purposes. +# +# Please keep the list sorted. + +Gary Burd +Google LLC (https://opensource.google.com/) +Joachim Bauch + diff --git a/vendor/github.com/gorilla/websocket/LICENSE b/vendor/github.com/gorilla/websocket/LICENSE new file mode 100644 index 000000000000..9171c9722522 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2013 The Gorilla WebSocket Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/gorilla/websocket/README.md b/vendor/github.com/gorilla/websocket/README.md new file mode 100644 index 000000000000..0827d059c11a --- /dev/null +++ b/vendor/github.com/gorilla/websocket/README.md @@ -0,0 +1,64 @@ +# Gorilla WebSocket + +[![GoDoc](https://godoc.org/github.com/gorilla/websocket?status.svg)](https://godoc.org/github.com/gorilla/websocket) +[![CircleCI](https://circleci.com/gh/gorilla/websocket.svg?style=svg)](https://circleci.com/gh/gorilla/websocket) + +Gorilla WebSocket is a [Go](http://golang.org/) implementation of the +[WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. + +### Documentation + +* [API Reference](http://godoc.org/github.com/gorilla/websocket) +* [Chat example](https://github.com/gorilla/websocket/tree/master/examples/chat) +* [Command example](https://github.com/gorilla/websocket/tree/master/examples/command) +* [Client and server example](https://github.com/gorilla/websocket/tree/master/examples/echo) +* [File watch example](https://github.com/gorilla/websocket/tree/master/examples/filewatch) + +### Status + +The Gorilla WebSocket package provides a complete and tested implementation of +the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. The +package API is stable. + +### Installation + + go get github.com/gorilla/websocket + +### Protocol Compliance + +The Gorilla WebSocket package passes the server tests in the [Autobahn Test +Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn +subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). + +### Gorilla WebSocket compared with other packages + + + + + + + + + + + + + + + + + + +
    github.com/gorillagolang.org/x/net
    RFC 6455 Features
    Passes Autobahn Test SuiteYesNo
    Receive fragmented messageYesNo, see note 1
    Send close messageYesNo
    Send pings and receive pongsYesNo
    Get the type of a received data messageYesYes, see note 2
    Other Features
    Compression ExtensionsExperimentalNo
    Read message using io.ReaderYesNo, see note 3
    Write message using io.WriteCloserYesNo, see note 3
    + +Notes: + +1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html). +2. The application can get the type of a received data message by implementing + a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal) + function. +3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. + Read returns when the input buffer is full or a frame boundary is + encountered. Each call to Write sends a single frame message. The Gorilla + io.Reader and io.WriteCloser operate on a single WebSocket message. + diff --git a/vendor/github.com/gorilla/websocket/client.go b/vendor/github.com/gorilla/websocket/client.go new file mode 100644 index 000000000000..962c06a391c2 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/client.go @@ -0,0 +1,395 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "context" + "crypto/tls" + "errors" + "io" + "io/ioutil" + "net" + "net/http" + "net/http/httptrace" + "net/url" + "strings" + "time" +) + +// ErrBadHandshake is returned when the server response to opening handshake is +// invalid. +var ErrBadHandshake = errors.New("websocket: bad handshake") + +var errInvalidCompression = errors.New("websocket: invalid compression negotiation") + +// NewClient creates a new client connection using the given net connection. +// The URL u specifies the host and request URI. Use requestHeader to specify +// the origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies +// (Cookie). Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etc. +// +// Deprecated: Use Dialer instead. +func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { + d := Dialer{ + ReadBufferSize: readBufSize, + WriteBufferSize: writeBufSize, + NetDial: func(net, addr string) (net.Conn, error) { + return netConn, nil + }, + } + return d.Dial(u.String(), requestHeader) +} + +// A Dialer contains options for connecting to WebSocket server. +type Dialer struct { + // NetDial specifies the dial function for creating TCP connections. If + // NetDial is nil, net.Dial is used. + NetDial func(network, addr string) (net.Conn, error) + + // NetDialContext specifies the dial function for creating TCP connections. If + // NetDialContext is nil, net.DialContext is used. + NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + + // Proxy specifies a function to return a proxy for a given + // Request. If the function returns a non-nil error, the + // request is aborted with the provided error. + // If Proxy is nil or returns a nil *URL, no proxy is used. + Proxy func(*http.Request) (*url.URL, error) + + // TLSClientConfig specifies the TLS configuration to use with tls.Client. + // If nil, the default configuration is used. + TLSClientConfig *tls.Config + + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then a useful default size is used. The I/O buffer sizes + // do not limit the size of the messages that can be sent or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the client's requested subprotocols. + Subprotocols []string + + // EnableCompression specifies if the client should attempt to negotiate + // per message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool + + // Jar specifies the cookie jar. + // If Jar is nil, cookies are not sent in requests and ignored + // in responses. + Jar http.CookieJar +} + +// Dial creates a new client connection by calling DialContext with a background context. +func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + return d.DialContext(context.Background(), urlStr, requestHeader) +} + +var errMalformedURL = errors.New("malformed ws or wss URL") + +func hostPortNoPort(u *url.URL) (hostPort, hostNoPort string) { + hostPort = u.Host + hostNoPort = u.Host + if i := strings.LastIndex(u.Host, ":"); i > strings.LastIndex(u.Host, "]") { + hostNoPort = hostNoPort[:i] + } else { + switch u.Scheme { + case "wss": + hostPort += ":443" + case "https": + hostPort += ":443" + default: + hostPort += ":80" + } + } + return hostPort, hostNoPort +} + +// DefaultDialer is a dialer with all fields set to the default values. +var DefaultDialer = &Dialer{ + Proxy: http.ProxyFromEnvironment, + HandshakeTimeout: 45 * time.Second, +} + +// nilDialer is dialer to use when receiver is nil. +var nilDialer = *DefaultDialer + +// DialContext creates a new client connection. Use requestHeader to specify the +// origin (Origin), subprotocols (Sec-WebSocket-Protocol) and cookies (Cookie). +// Use the response.Header to get the selected subprotocol +// (Sec-WebSocket-Protocol) and cookies (Set-Cookie). +// +// The context will be used in the request and in the Dialer. +// +// If the WebSocket handshake fails, ErrBadHandshake is returned along with a +// non-nil *http.Response so that callers can handle redirects, authentication, +// etcetera. The response body may not contain the entire response and does not +// need to be closed by the application. +func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { + if d == nil { + d = &nilDialer + } + + challengeKey, err := generateChallengeKey() + if err != nil { + return nil, nil, err + } + + u, err := url.Parse(urlStr) + if err != nil { + return nil, nil, err + } + + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + default: + return nil, nil, errMalformedURL + } + + if u.User != nil { + // User name and password are not allowed in websocket URIs. + return nil, nil, errMalformedURL + } + + req := &http.Request{ + Method: "GET", + URL: u, + Proto: "HTTP/1.1", + ProtoMajor: 1, + ProtoMinor: 1, + Header: make(http.Header), + Host: u.Host, + } + req = req.WithContext(ctx) + + // Set the cookies present in the cookie jar of the dialer + if d.Jar != nil { + for _, cookie := range d.Jar.Cookies(u) { + req.AddCookie(cookie) + } + } + + // Set the request headers using the capitalization for names and values in + // RFC examples. Although the capitalization shouldn't matter, there are + // servers that depend on it. The Header.Set method is not used because the + // method canonicalizes the header names. + req.Header["Upgrade"] = []string{"websocket"} + req.Header["Connection"] = []string{"Upgrade"} + req.Header["Sec-WebSocket-Key"] = []string{challengeKey} + req.Header["Sec-WebSocket-Version"] = []string{"13"} + if len(d.Subprotocols) > 0 { + req.Header["Sec-WebSocket-Protocol"] = []string{strings.Join(d.Subprotocols, ", ")} + } + for k, vs := range requestHeader { + switch { + case k == "Host": + if len(vs) > 0 { + req.Host = vs[0] + } + case k == "Upgrade" || + k == "Connection" || + k == "Sec-Websocket-Key" || + k == "Sec-Websocket-Version" || + k == "Sec-Websocket-Extensions" || + (k == "Sec-Websocket-Protocol" && len(d.Subprotocols) > 0): + return nil, nil, errors.New("websocket: duplicate header not allowed: " + k) + case k == "Sec-Websocket-Protocol": + req.Header["Sec-WebSocket-Protocol"] = vs + default: + req.Header[k] = vs + } + } + + if d.EnableCompression { + req.Header["Sec-WebSocket-Extensions"] = []string{"permessage-deflate; server_no_context_takeover; client_no_context_takeover"} + } + + if d.HandshakeTimeout != 0 { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) + defer cancel() + } + + // Get network dial function. + var netDial func(network, add string) (net.Conn, error) + + if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial + } else { + netDialer := &net.Dialer{} + netDial = func(network, addr string) (net.Conn, error) { + return netDialer.DialContext(ctx, network, addr) + } + } + + // If needed, wrap the dial function to set the connection deadline. + if deadline, ok := ctx.Deadline(); ok { + forwardDial := netDial + netDial = func(network, addr string) (net.Conn, error) { + c, err := forwardDial(network, addr) + if err != nil { + return nil, err + } + err = c.SetDeadline(deadline) + if err != nil { + c.Close() + return nil, err + } + return c, nil + } + } + + // If needed, wrap the dial function to connect through a proxy. + if d.Proxy != nil { + proxyURL, err := d.Proxy(req) + if err != nil { + return nil, nil, err + } + if proxyURL != nil { + dialer, err := proxy_FromURL(proxyURL, netDialerFunc(netDial)) + if err != nil { + return nil, nil, err + } + netDial = dialer.Dial + } + } + + hostPort, hostNoPort := hostPortNoPort(u) + trace := httptrace.ContextClientTrace(ctx) + if trace != nil && trace.GetConn != nil { + trace.GetConn(hostPort) + } + + netConn, err := netDial("tcp", hostPort) + if trace != nil && trace.GotConn != nil { + trace.GotConn(httptrace.GotConnInfo{ + Conn: netConn, + }) + } + if err != nil { + return nil, nil, err + } + + defer func() { + if netConn != nil { + netConn.Close() + } + }() + + if u.Scheme == "https" { + cfg := cloneTLSConfig(d.TLSClientConfig) + if cfg.ServerName == "" { + cfg.ServerName = hostNoPort + } + tlsConn := tls.Client(netConn, cfg) + netConn = tlsConn + + var err error + if trace != nil { + err = doHandshakeWithTrace(trace, tlsConn, cfg) + } else { + err = doHandshake(tlsConn, cfg) + } + + if err != nil { + return nil, nil, err + } + } + + conn := newConn(netConn, false, d.ReadBufferSize, d.WriteBufferSize, d.WriteBufferPool, nil, nil) + + if err := req.Write(netConn); err != nil { + return nil, nil, err + } + + if trace != nil && trace.GotFirstResponseByte != nil { + if peek, err := conn.br.Peek(1); err == nil && len(peek) == 1 { + trace.GotFirstResponseByte() + } + } + + resp, err := http.ReadResponse(conn.br, req) + if err != nil { + return nil, nil, err + } + + if d.Jar != nil { + if rc := resp.Cookies(); len(rc) > 0 { + d.Jar.SetCookies(u, rc) + } + } + + if resp.StatusCode != 101 || + !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || + !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || + resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { + // Before closing the network connection on return from this + // function, slurp up some of the response to aid application + // debugging. + buf := make([]byte, 1024) + n, _ := io.ReadFull(resp.Body, buf) + resp.Body = ioutil.NopCloser(bytes.NewReader(buf[:n])) + return nil, resp, ErrBadHandshake + } + + for _, ext := range parseExtensions(resp.Header) { + if ext[""] != "permessage-deflate" { + continue + } + _, snct := ext["server_no_context_takeover"] + _, cnct := ext["client_no_context_takeover"] + if !snct || !cnct { + return nil, resp, errInvalidCompression + } + conn.newCompressionWriter = compressNoContextTakeover + conn.newDecompressionReader = decompressNoContextTakeover + break + } + + resp.Body = ioutil.NopCloser(bytes.NewReader([]byte{})) + conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol") + + netConn.SetDeadline(time.Time{}) + netConn = nil // to avoid close in defer. + return conn, resp, nil +} + +func doHandshake(tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.Handshake(); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/gorilla/websocket/client_clone.go b/vendor/github.com/gorilla/websocket/client_clone.go new file mode 100644 index 000000000000..4f0d943723a9 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/client_clone.go @@ -0,0 +1,16 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package websocket + +import "crypto/tls" + +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return cfg.Clone() +} diff --git a/vendor/github.com/gorilla/websocket/client_clone_legacy.go b/vendor/github.com/gorilla/websocket/client_clone_legacy.go new file mode 100644 index 000000000000..babb007fb414 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/client_clone_legacy.go @@ -0,0 +1,38 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.8 + +package websocket + +import "crypto/tls" + +// cloneTLSConfig clones all public fields except the fields +// SessionTicketsDisabled and SessionTicketKey. This avoids copying the +// sync.Mutex in the sync.Once and makes it safe to call cloneTLSConfig on a +// config in active use. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } +} diff --git a/vendor/github.com/gorilla/websocket/compression.go b/vendor/github.com/gorilla/websocket/compression.go new file mode 100644 index 000000000000..813ffb1e8433 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/compression.go @@ -0,0 +1,148 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "compress/flate" + "errors" + "io" + "strings" + "sync" +) + +const ( + minCompressionLevel = -2 // flate.HuffmanOnly not defined in Go < 1.6 + maxCompressionLevel = flate.BestCompression + defaultCompressionLevel = 1 +) + +var ( + flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool + flateReaderPool = sync.Pool{New: func() interface{} { + return flate.NewReader(nil) + }} +) + +func decompressNoContextTakeover(r io.Reader) io.ReadCloser { + const tail = + // Add four bytes as specified in RFC + "\x00\x00\xff\xff" + + // Add final block to squelch unexpected EOF error from flate reader. + "\x01\x00\x00\xff\xff" + + fr, _ := flateReaderPool.Get().(io.ReadCloser) + fr.(flate.Resetter).Reset(io.MultiReader(r, strings.NewReader(tail)), nil) + return &flateReadWrapper{fr} +} + +func isValidCompressionLevel(level int) bool { + return minCompressionLevel <= level && level <= maxCompressionLevel +} + +func compressNoContextTakeover(w io.WriteCloser, level int) io.WriteCloser { + p := &flateWriterPools[level-minCompressionLevel] + tw := &truncWriter{w: w} + fw, _ := p.Get().(*flate.Writer) + if fw == nil { + fw, _ = flate.NewWriter(tw, level) + } else { + fw.Reset(tw) + } + return &flateWriteWrapper{fw: fw, tw: tw, p: p} +} + +// truncWriter is an io.Writer that writes all but the last four bytes of the +// stream to another io.Writer. +type truncWriter struct { + w io.WriteCloser + n int + p [4]byte +} + +func (w *truncWriter) Write(p []byte) (int, error) { + n := 0 + + // fill buffer first for simplicity. + if w.n < len(w.p) { + n = copy(w.p[w.n:], p) + p = p[n:] + w.n += n + if len(p) == 0 { + return n, nil + } + } + + m := len(p) + if m > len(w.p) { + m = len(w.p) + } + + if nn, err := w.w.Write(w.p[:m]); err != nil { + return n + nn, err + } + + copy(w.p[:], w.p[m:]) + copy(w.p[len(w.p)-m:], p[len(p)-m:]) + nn, err := w.w.Write(p[:len(p)-m]) + return n + nn, err +} + +type flateWriteWrapper struct { + fw *flate.Writer + tw *truncWriter + p *sync.Pool +} + +func (w *flateWriteWrapper) Write(p []byte) (int, error) { + if w.fw == nil { + return 0, errWriteClosed + } + return w.fw.Write(p) +} + +func (w *flateWriteWrapper) Close() error { + if w.fw == nil { + return errWriteClosed + } + err1 := w.fw.Flush() + w.p.Put(w.fw) + w.fw = nil + if w.tw.p != [4]byte{0, 0, 0xff, 0xff} { + return errors.New("websocket: internal error, unexpected bytes at end of flate stream") + } + err2 := w.tw.w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +type flateReadWrapper struct { + fr io.ReadCloser +} + +func (r *flateReadWrapper) Read(p []byte) (int, error) { + if r.fr == nil { + return 0, io.ErrClosedPipe + } + n, err := r.fr.Read(p) + if err == io.EOF { + // Preemptively place the reader back in the pool. This helps with + // scenarios where the application does not call NextReader() soon after + // this final read. + r.Close() + } + return n, err +} + +func (r *flateReadWrapper) Close() error { + if r.fr == nil { + return io.ErrClosedPipe + } + err := r.fr.Close() + flateReaderPool.Put(r.fr) + r.fr = nil + return err +} diff --git a/vendor/github.com/gorilla/websocket/conn.go b/vendor/github.com/gorilla/websocket/conn.go new file mode 100644 index 000000000000..9971ea363077 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/conn.go @@ -0,0 +1,1163 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/binary" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "strconv" + "sync" + "time" + "unicode/utf8" +) + +const ( + // Frame header byte 0 bits from Section 5.2 of RFC 6455 + finalBit = 1 << 7 + rsv1Bit = 1 << 6 + rsv2Bit = 1 << 5 + rsv3Bit = 1 << 4 + + // Frame header byte 1 bits from Section 5.2 of RFC 6455 + maskBit = 1 << 7 + + maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask + maxControlFramePayloadSize = 125 + + writeWait = time.Second + + defaultReadBufferSize = 4096 + defaultWriteBufferSize = 4096 + + continuationFrame = 0 + noFrame = -1 +) + +// Close codes defined in RFC 6455, section 11.7. +const ( + CloseNormalClosure = 1000 + CloseGoingAway = 1001 + CloseProtocolError = 1002 + CloseUnsupportedData = 1003 + CloseNoStatusReceived = 1005 + CloseAbnormalClosure = 1006 + CloseInvalidFramePayloadData = 1007 + ClosePolicyViolation = 1008 + CloseMessageTooBig = 1009 + CloseMandatoryExtension = 1010 + CloseInternalServerErr = 1011 + CloseServiceRestart = 1012 + CloseTryAgainLater = 1013 + CloseTLSHandshake = 1015 +) + +// The message types are defined in RFC 6455, section 11.8. +const ( + // TextMessage denotes a text data message. The text message payload is + // interpreted as UTF-8 encoded text data. + TextMessage = 1 + + // BinaryMessage denotes a binary data message. + BinaryMessage = 2 + + // CloseMessage denotes a close control message. The optional message + // payload contains a numeric code and text. Use the FormatCloseMessage + // function to format a close message payload. + CloseMessage = 8 + + // PingMessage denotes a ping control message. The optional message payload + // is UTF-8 encoded text. + PingMessage = 9 + + // PongMessage denotes a pong control message. The optional message payload + // is UTF-8 encoded text. + PongMessage = 10 +) + +// ErrCloseSent is returned when the application writes a message to the +// connection after sending a close message. +var ErrCloseSent = errors.New("websocket: close sent") + +// ErrReadLimit is returned when reading a message that is larger than the +// read limit set for the connection. +var ErrReadLimit = errors.New("websocket: read limit exceeded") + +// netError satisfies the net Error interface. +type netError struct { + msg string + temporary bool + timeout bool +} + +func (e *netError) Error() string { return e.msg } +func (e *netError) Temporary() bool { return e.temporary } +func (e *netError) Timeout() bool { return e.timeout } + +// CloseError represents a close message. +type CloseError struct { + // Code is defined in RFC 6455, section 11.7. + Code int + + // Text is the optional text payload. + Text string +} + +func (e *CloseError) Error() string { + s := []byte("websocket: close ") + s = strconv.AppendInt(s, int64(e.Code), 10) + switch e.Code { + case CloseNormalClosure: + s = append(s, " (normal)"...) + case CloseGoingAway: + s = append(s, " (going away)"...) + case CloseProtocolError: + s = append(s, " (protocol error)"...) + case CloseUnsupportedData: + s = append(s, " (unsupported data)"...) + case CloseNoStatusReceived: + s = append(s, " (no status)"...) + case CloseAbnormalClosure: + s = append(s, " (abnormal closure)"...) + case CloseInvalidFramePayloadData: + s = append(s, " (invalid payload data)"...) + case ClosePolicyViolation: + s = append(s, " (policy violation)"...) + case CloseMessageTooBig: + s = append(s, " (message too big)"...) + case CloseMandatoryExtension: + s = append(s, " (mandatory extension missing)"...) + case CloseInternalServerErr: + s = append(s, " (internal server error)"...) + case CloseTLSHandshake: + s = append(s, " (TLS handshake error)"...) + } + if e.Text != "" { + s = append(s, ": "...) + s = append(s, e.Text...) + } + return string(s) +} + +// IsCloseError returns boolean indicating whether the error is a *CloseError +// with one of the specified codes. +func IsCloseError(err error, codes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range codes { + if e.Code == code { + return true + } + } + } + return false +} + +// IsUnexpectedCloseError returns boolean indicating whether the error is a +// *CloseError with a code not in the list of expected codes. +func IsUnexpectedCloseError(err error, expectedCodes ...int) bool { + if e, ok := err.(*CloseError); ok { + for _, code := range expectedCodes { + if e.Code == code { + return false + } + } + return true + } + return false +} + +var ( + errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} + errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} + errBadWriteOpCode = errors.New("websocket: bad write message type") + errWriteClosed = errors.New("websocket: write closed") + errInvalidControlFrame = errors.New("websocket: invalid control frame") +) + +func newMaskKey() [4]byte { + n := rand.Uint32() + return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)} +} + +func hideTempErr(err error) error { + if e, ok := err.(net.Error); ok && e.Temporary() { + err = &netError{msg: e.Error(), timeout: e.Timeout()} + } + return err +} + +func isControl(frameType int) bool { + return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage +} + +func isData(frameType int) bool { + return frameType == TextMessage || frameType == BinaryMessage +} + +var validReceivedCloseCodes = map[int]bool{ + // see http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number + + CloseNormalClosure: true, + CloseGoingAway: true, + CloseProtocolError: true, + CloseUnsupportedData: true, + CloseNoStatusReceived: false, + CloseAbnormalClosure: false, + CloseInvalidFramePayloadData: true, + ClosePolicyViolation: true, + CloseMessageTooBig: true, + CloseMandatoryExtension: true, + CloseInternalServerErr: true, + CloseServiceRestart: true, + CloseTryAgainLater: true, + CloseTLSHandshake: false, +} + +func isValidReceivedCloseCode(code int) bool { + return validReceivedCloseCodes[code] || (code >= 3000 && code <= 4999) +} + +// BufferPool represents a pool of buffers. The *sync.Pool type satisfies this +// interface. The type of the value stored in a pool is not specified. +type BufferPool interface { + // Get gets a value from the pool or returns nil if the pool is empty. + Get() interface{} + // Put adds a value to the pool. + Put(interface{}) +} + +// writePoolData is the type added to the write buffer pool. This wrapper is +// used to prevent applications from peeking at and depending on the values +// added to the pool. +type writePoolData struct{ buf []byte } + +// The Conn type represents a WebSocket connection. +type Conn struct { + conn net.Conn + isServer bool + subprotocol string + + // Write fields + mu chan bool // used as mutex to protect write to conn + writeBuf []byte // frame is constructed in this buffer. + writePool BufferPool + writeBufSize int + writeDeadline time.Time + writer io.WriteCloser // the current writer returned to the application + isWriting bool // for best-effort concurrent write detection + + writeErrMu sync.Mutex + writeErr error + + enableWriteCompression bool + compressionLevel int + newCompressionWriter func(io.WriteCloser, int) io.WriteCloser + + // Read fields + reader io.ReadCloser // the current reader returned to the application + readErr error + br *bufio.Reader + readRemaining int64 // bytes remaining in current frame. + readFinal bool // true the current message has more frames. + readLength int64 // Message size. + readLimit int64 // Maximum message size. + readMaskPos int + readMaskKey [4]byte + handlePong func(string) error + handlePing func(string) error + handleClose func(int, string) error + readErrCount int + messageReader *messageReader // the current low-level reader + + readDecompress bool // whether last read frame had RSV1 set + newDecompressionReader func(io.Reader) io.ReadCloser +} + +func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn { + + if br == nil { + if readBufferSize == 0 { + readBufferSize = defaultReadBufferSize + } else if readBufferSize < maxControlFramePayloadSize { + // must be large enough for control frame + readBufferSize = maxControlFramePayloadSize + } + br = bufio.NewReaderSize(conn, readBufferSize) + } + + if writeBufferSize <= 0 { + writeBufferSize = defaultWriteBufferSize + } + writeBufferSize += maxFrameHeaderSize + + if writeBuf == nil && writeBufferPool == nil { + writeBuf = make([]byte, writeBufferSize) + } + + mu := make(chan bool, 1) + mu <- true + c := &Conn{ + isServer: isServer, + br: br, + conn: conn, + mu: mu, + readFinal: true, + writeBuf: writeBuf, + writePool: writeBufferPool, + writeBufSize: writeBufferSize, + enableWriteCompression: true, + compressionLevel: defaultCompressionLevel, + } + c.SetCloseHandler(nil) + c.SetPingHandler(nil) + c.SetPongHandler(nil) + return c +} + +// Subprotocol returns the negotiated protocol for the connection. +func (c *Conn) Subprotocol() string { + return c.subprotocol +} + +// Close closes the underlying network connection without sending or waiting +// for a close message. +func (c *Conn) Close() error { + return c.conn.Close() +} + +// LocalAddr returns the local network address. +func (c *Conn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +// RemoteAddr returns the remote network address. +func (c *Conn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +// Write methods + +func (c *Conn) writeFatal(err error) error { + err = hideTempErr(err) + c.writeErrMu.Lock() + if c.writeErr == nil { + c.writeErr = err + } + c.writeErrMu.Unlock() + return err +} + +func (c *Conn) read(n int) ([]byte, error) { + p, err := c.br.Peek(n) + if err == io.EOF { + err = errUnexpectedEOF + } + c.br.Discard(len(p)) + return p, err +} + +func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error { + <-c.mu + defer func() { c.mu <- true }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + c.conn.SetWriteDeadline(deadline) + if len(buf1) == 0 { + _, err = c.conn.Write(buf0) + } else { + err = c.writeBufs(buf0, buf1) + } + if err != nil { + return c.writeFatal(err) + } + if frameType == CloseMessage { + c.writeFatal(ErrCloseSent) + } + return nil +} + +// WriteControl writes a control message with the given deadline. The allowed +// message types are CloseMessage, PingMessage and PongMessage. +func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { + if !isControl(messageType) { + return errBadWriteOpCode + } + if len(data) > maxControlFramePayloadSize { + return errInvalidControlFrame + } + + b0 := byte(messageType) | finalBit + b1 := byte(len(data)) + if !c.isServer { + b1 |= maskBit + } + + buf := make([]byte, 0, maxFrameHeaderSize+maxControlFramePayloadSize) + buf = append(buf, b0, b1) + + if c.isServer { + buf = append(buf, data...) + } else { + key := newMaskKey() + buf = append(buf, key[:]...) + buf = append(buf, data...) + maskBytes(key, 0, buf[6:]) + } + + d := time.Hour * 1000 + if !deadline.IsZero() { + d = deadline.Sub(time.Now()) + if d < 0 { + return errWriteTimeout + } + } + + timer := time.NewTimer(d) + select { + case <-c.mu: + timer.Stop() + case <-timer.C: + return errWriteTimeout + } + defer func() { c.mu <- true }() + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + c.conn.SetWriteDeadline(deadline) + _, err = c.conn.Write(buf) + if err != nil { + return c.writeFatal(err) + } + if messageType == CloseMessage { + c.writeFatal(ErrCloseSent) + } + return err +} + +// beginMessage prepares a connection and message writer for a new message. +func (c *Conn) beginMessage(mw *messageWriter, messageType int) error { + // Close previous writer if not already closed by the application. It's + // probably better to return an error in this situation, but we cannot + // change this without breaking existing applications. + if c.writer != nil { + c.writer.Close() + c.writer = nil + } + + if !isControl(messageType) && !isData(messageType) { + return errBadWriteOpCode + } + + c.writeErrMu.Lock() + err := c.writeErr + c.writeErrMu.Unlock() + if err != nil { + return err + } + + mw.c = c + mw.frameType = messageType + mw.pos = maxFrameHeaderSize + + if c.writeBuf == nil { + wpd, ok := c.writePool.Get().(writePoolData) + if ok { + c.writeBuf = wpd.buf + } else { + c.writeBuf = make([]byte, c.writeBufSize) + } + } + return nil +} + +// NextWriter returns a writer for the next message to send. The writer's Close +// method flushes the complete message to the network. +// +// There can be at most one open writer on a connection. NextWriter closes the +// previous writer if the application has not already done so. +// +// All message types (TextMessage, BinaryMessage, CloseMessage, PingMessage and +// PongMessage) are supported. +func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return nil, err + } + c.writer = &mw + if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { + w := c.newCompressionWriter(c.writer, c.compressionLevel) + mw.compress = true + c.writer = w + } + return c.writer, nil +} + +type messageWriter struct { + c *Conn + compress bool // whether next call to flushFrame should set RSV1 + pos int // end of data in writeBuf. + frameType int // type of the current frame. + err error +} + +func (w *messageWriter) endMessage(err error) error { + if w.err != nil { + return err + } + c := w.c + w.err = err + c.writer = nil + if c.writePool != nil { + c.writePool.Put(writePoolData{buf: c.writeBuf}) + c.writeBuf = nil + } + return err +} + +// flushFrame writes buffered data and extra as a frame to the network. The +// final argument indicates that this is the last frame in the message. +func (w *messageWriter) flushFrame(final bool, extra []byte) error { + c := w.c + length := w.pos - maxFrameHeaderSize + len(extra) + + // Check for invalid control frames. + if isControl(w.frameType) && + (!final || length > maxControlFramePayloadSize) { + return w.endMessage(errInvalidControlFrame) + } + + b0 := byte(w.frameType) + if final { + b0 |= finalBit + } + if w.compress { + b0 |= rsv1Bit + } + w.compress = false + + b1 := byte(0) + if !c.isServer { + b1 |= maskBit + } + + // Assume that the frame starts at beginning of c.writeBuf. + framePos := 0 + if c.isServer { + // Adjust up if mask not included in the header. + framePos = 4 + } + + switch { + case length >= 65536: + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 127 + binary.BigEndian.PutUint64(c.writeBuf[framePos+2:], uint64(length)) + case length > 125: + framePos += 6 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | 126 + binary.BigEndian.PutUint16(c.writeBuf[framePos+2:], uint16(length)) + default: + framePos += 8 + c.writeBuf[framePos] = b0 + c.writeBuf[framePos+1] = b1 | byte(length) + } + + if !c.isServer { + key := newMaskKey() + copy(c.writeBuf[maxFrameHeaderSize-4:], key[:]) + maskBytes(key, 0, c.writeBuf[maxFrameHeaderSize:w.pos]) + if len(extra) > 0 { + return w.endMessage(c.writeFatal(errors.New("websocket: internal error, extra used in client mode"))) + } + } + + // Write the buffers to the connection with best-effort detection of + // concurrent writes. See the concurrency section in the package + // documentation for more info. + + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + + err := c.write(w.frameType, c.writeDeadline, c.writeBuf[framePos:w.pos], extra) + + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + + if err != nil { + return w.endMessage(err) + } + + if final { + w.endMessage(errWriteClosed) + return nil + } + + // Setup for next frame. + w.pos = maxFrameHeaderSize + w.frameType = continuationFrame + return nil +} + +func (w *messageWriter) ncopy(max int) (int, error) { + n := len(w.c.writeBuf) - w.pos + if n <= 0 { + if err := w.flushFrame(false, nil); err != nil { + return 0, err + } + n = len(w.c.writeBuf) - w.pos + } + if n > max { + n = max + } + return n, nil +} + +func (w *messageWriter) Write(p []byte) (int, error) { + if w.err != nil { + return 0, w.err + } + + if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { + // Don't buffer large messages. + err := w.flushFrame(false, p) + if err != nil { + return 0, err + } + return len(p), nil + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) WriteString(p string) (int, error) { + if w.err != nil { + return 0, w.err + } + + nn := len(p) + for len(p) > 0 { + n, err := w.ncopy(len(p)) + if err != nil { + return 0, err + } + copy(w.c.writeBuf[w.pos:], p[:n]) + w.pos += n + p = p[n:] + } + return nn, nil +} + +func (w *messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { + if w.err != nil { + return 0, w.err + } + for { + if w.pos == len(w.c.writeBuf) { + err = w.flushFrame(false, nil) + if err != nil { + break + } + } + var n int + n, err = r.Read(w.c.writeBuf[w.pos:]) + w.pos += n + nn += int64(n) + if err != nil { + if err == io.EOF { + err = nil + } + break + } + } + return nn, err +} + +func (w *messageWriter) Close() error { + if w.err != nil { + return w.err + } + return w.flushFrame(true, nil) +} + +// WritePreparedMessage writes prepared message into connection. +func (c *Conn) WritePreparedMessage(pm *PreparedMessage) error { + frameType, frameData, err := pm.frame(prepareKey{ + isServer: c.isServer, + compress: c.newCompressionWriter != nil && c.enableWriteCompression && isData(pm.messageType), + compressionLevel: c.compressionLevel, + }) + if err != nil { + return err + } + if c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = true + err = c.write(frameType, c.writeDeadline, frameData, nil) + if !c.isWriting { + panic("concurrent write to websocket connection") + } + c.isWriting = false + return err +} + +// WriteMessage is a helper method for getting a writer using NextWriter, +// writing the message and closing the writer. +func (c *Conn) WriteMessage(messageType int, data []byte) error { + + if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { + // Fast path with no allocations and single frame. + + var mw messageWriter + if err := c.beginMessage(&mw, messageType); err != nil { + return err + } + n := copy(c.writeBuf[mw.pos:], data) + mw.pos += n + data = data[n:] + return mw.flushFrame(true, data) + } + + w, err := c.NextWriter(messageType) + if err != nil { + return err + } + if _, err = w.Write(data); err != nil { + return err + } + return w.Close() +} + +// SetWriteDeadline sets the write deadline on the underlying network +// connection. After a write has timed out, the websocket state is corrupt and +// all future writes will return an error. A zero value for t means writes will +// not time out. +func (c *Conn) SetWriteDeadline(t time.Time) error { + c.writeDeadline = t + return nil +} + +// Read methods + +func (c *Conn) advanceFrame() (int, error) { + // 1. Skip remainder of previous frame. + + if c.readRemaining > 0 { + if _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil { + return noFrame, err + } + } + + // 2. Read and parse first two bytes of frame header. + + p, err := c.read(2) + if err != nil { + return noFrame, err + } + + final := p[0]&finalBit != 0 + frameType := int(p[0] & 0xf) + mask := p[1]&maskBit != 0 + c.readRemaining = int64(p[1] & 0x7f) + + c.readDecompress = false + if c.newDecompressionReader != nil && (p[0]&rsv1Bit) != 0 { + c.readDecompress = true + p[0] &^= rsv1Bit + } + + if rsv := p[0] & (rsv1Bit | rsv2Bit | rsv3Bit); rsv != 0 { + return noFrame, c.handleProtocolError("unexpected reserved bits 0x" + strconv.FormatInt(int64(rsv), 16)) + } + + switch frameType { + case CloseMessage, PingMessage, PongMessage: + if c.readRemaining > maxControlFramePayloadSize { + return noFrame, c.handleProtocolError("control frame length > 125") + } + if !final { + return noFrame, c.handleProtocolError("control frame not final") + } + case TextMessage, BinaryMessage: + if !c.readFinal { + return noFrame, c.handleProtocolError("message start before final message frame") + } + c.readFinal = final + case continuationFrame: + if c.readFinal { + return noFrame, c.handleProtocolError("continuation after final message frame") + } + c.readFinal = final + default: + return noFrame, c.handleProtocolError("unknown opcode " + strconv.Itoa(frameType)) + } + + // 3. Read and parse frame length. + + switch c.readRemaining { + case 126: + p, err := c.read(2) + if err != nil { + return noFrame, err + } + c.readRemaining = int64(binary.BigEndian.Uint16(p)) + case 127: + p, err := c.read(8) + if err != nil { + return noFrame, err + } + c.readRemaining = int64(binary.BigEndian.Uint64(p)) + } + + // 4. Handle frame masking. + + if mask != c.isServer { + return noFrame, c.handleProtocolError("incorrect mask flag") + } + + if mask { + c.readMaskPos = 0 + p, err := c.read(len(c.readMaskKey)) + if err != nil { + return noFrame, err + } + copy(c.readMaskKey[:], p) + } + + // 5. For text and binary messages, enforce read limit and return. + + if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage { + + c.readLength += c.readRemaining + if c.readLimit > 0 && c.readLength > c.readLimit { + c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) + return noFrame, ErrReadLimit + } + + return frameType, nil + } + + // 6. Read control frame payload. + + var payload []byte + if c.readRemaining > 0 { + payload, err = c.read(int(c.readRemaining)) + c.readRemaining = 0 + if err != nil { + return noFrame, err + } + if c.isServer { + maskBytes(c.readMaskKey, 0, payload) + } + } + + // 7. Process control frame payload. + + switch frameType { + case PongMessage: + if err := c.handlePong(string(payload)); err != nil { + return noFrame, err + } + case PingMessage: + if err := c.handlePing(string(payload)); err != nil { + return noFrame, err + } + case CloseMessage: + closeCode := CloseNoStatusReceived + closeText := "" + if len(payload) >= 2 { + closeCode = int(binary.BigEndian.Uint16(payload)) + if !isValidReceivedCloseCode(closeCode) { + return noFrame, c.handleProtocolError("invalid close code") + } + closeText = string(payload[2:]) + if !utf8.ValidString(closeText) { + return noFrame, c.handleProtocolError("invalid utf8 payload in close frame") + } + } + if err := c.handleClose(closeCode, closeText); err != nil { + return noFrame, err + } + return noFrame, &CloseError{Code: closeCode, Text: closeText} + } + + return frameType, nil +} + +func (c *Conn) handleProtocolError(message string) error { + c.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait)) + return errors.New("websocket: " + message) +} + +// NextReader returns the next data message received from the peer. The +// returned messageType is either TextMessage or BinaryMessage. +// +// There can be at most one open reader on a connection. NextReader discards +// the previous message if the application has not already consumed it. +// +// Applications must break out of the application's read loop when this method +// returns a non-nil error value. Errors returned from this method are +// permanent. Once this method returns a non-nil error, all subsequent calls to +// this method return the same error. +func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { + // Close previous reader, only relevant for decompression. + if c.reader != nil { + c.reader.Close() + c.reader = nil + } + + c.messageReader = nil + c.readLength = 0 + + for c.readErr == nil { + frameType, err := c.advanceFrame() + if err != nil { + c.readErr = hideTempErr(err) + break + } + if frameType == TextMessage || frameType == BinaryMessage { + c.messageReader = &messageReader{c} + c.reader = c.messageReader + if c.readDecompress { + c.reader = c.newDecompressionReader(c.reader) + } + return frameType, c.reader, nil + } + } + + // Applications that do handle the error returned from this method spin in + // tight loop on connection failure. To help application developers detect + // this error, panic on repeated reads to the failed connection. + c.readErrCount++ + if c.readErrCount >= 1000 { + panic("repeated read on failed websocket connection") + } + + return noFrame, nil, c.readErr +} + +type messageReader struct{ c *Conn } + +func (r *messageReader) Read(b []byte) (int, error) { + c := r.c + if c.messageReader != r { + return 0, io.EOF + } + + for c.readErr == nil { + + if c.readRemaining > 0 { + if int64(len(b)) > c.readRemaining { + b = b[:c.readRemaining] + } + n, err := c.br.Read(b) + c.readErr = hideTempErr(err) + if c.isServer { + c.readMaskPos = maskBytes(c.readMaskKey, c.readMaskPos, b[:n]) + } + c.readRemaining -= int64(n) + if c.readRemaining > 0 && c.readErr == io.EOF { + c.readErr = errUnexpectedEOF + } + return n, c.readErr + } + + if c.readFinal { + c.messageReader = nil + return 0, io.EOF + } + + frameType, err := c.advanceFrame() + switch { + case err != nil: + c.readErr = hideTempErr(err) + case frameType == TextMessage || frameType == BinaryMessage: + c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader") + } + } + + err := c.readErr + if err == io.EOF && c.messageReader == r { + err = errUnexpectedEOF + } + return 0, err +} + +func (r *messageReader) Close() error { + return nil +} + +// ReadMessage is a helper method for getting a reader using NextReader and +// reading from that reader to a buffer. +func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { + var r io.Reader + messageType, r, err = c.NextReader() + if err != nil { + return messageType, nil, err + } + p, err = ioutil.ReadAll(r) + return messageType, p, err +} + +// SetReadDeadline sets the read deadline on the underlying network connection. +// After a read has timed out, the websocket connection state is corrupt and +// all future reads will return an error. A zero value for t means reads will +// not time out. +func (c *Conn) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetReadLimit sets the maximum size in bytes for a message read from the peer. If a +// message exceeds the limit, the connection sends a close message to the peer +// and returns ErrReadLimit to the application. +func (c *Conn) SetReadLimit(limit int64) { + c.readLimit = limit +} + +// CloseHandler returns the current close handler +func (c *Conn) CloseHandler() func(code int, text string) error { + return c.handleClose +} + +// SetCloseHandler sets the handler for close messages received from the peer. +// The code argument to h is the received close code or CloseNoStatusReceived +// if the close message is empty. The default close handler sends a close +// message back to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// close messages as described in the section on Control Messages above. +// +// The connection read methods return a CloseError when a close message is +// received. Most applications should handle close messages as part of their +// normal error handling. Applications should only set a close handler when the +// application must perform some action before sending a close message back to +// the peer. +func (c *Conn) SetCloseHandler(h func(code int, text string) error) { + if h == nil { + h = func(code int, text string) error { + message := FormatCloseMessage(code, "") + c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)) + return nil + } + } + c.handleClose = h +} + +// PingHandler returns the current ping handler +func (c *Conn) PingHandler() func(appData string) error { + return c.handlePing +} + +// SetPingHandler sets the handler for ping messages received from the peer. +// The appData argument to h is the PING message application data. The default +// ping handler sends a pong to the peer. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// ping messages as described in the section on Control Messages above. +func (c *Conn) SetPingHandler(h func(appData string) error) { + if h == nil { + h = func(message string) error { + err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) + if err == ErrCloseSent { + return nil + } else if e, ok := err.(net.Error); ok && e.Temporary() { + return nil + } + return err + } + } + c.handlePing = h +} + +// PongHandler returns the current pong handler +func (c *Conn) PongHandler() func(appData string) error { + return c.handlePong +} + +// SetPongHandler sets the handler for pong messages received from the peer. +// The appData argument to h is the PONG message application data. The default +// pong handler does nothing. +// +// The handler function is called from the NextReader, ReadMessage and message +// reader Read methods. The application must read the connection to process +// pong messages as described in the section on Control Messages above. +func (c *Conn) SetPongHandler(h func(appData string) error) { + if h == nil { + h = func(string) error { return nil } + } + c.handlePong = h +} + +// UnderlyingConn returns the internal net.Conn. This can be used to further +// modifications to connection specific flags. +func (c *Conn) UnderlyingConn() net.Conn { + return c.conn +} + +// EnableWriteCompression enables and disables write compression of +// subsequent text and binary messages. This function is a noop if +// compression was not negotiated with the peer. +func (c *Conn) EnableWriteCompression(enable bool) { + c.enableWriteCompression = enable +} + +// SetCompressionLevel sets the flate compression level for subsequent text and +// binary messages. This function is a noop if compression was not negotiated +// with the peer. See the compress/flate package for a description of +// compression levels. +func (c *Conn) SetCompressionLevel(level int) error { + if !isValidCompressionLevel(level) { + return errors.New("websocket: invalid compression level") + } + c.compressionLevel = level + return nil +} + +// FormatCloseMessage formats closeCode and text as a WebSocket close message. +// An empty message is returned for code CloseNoStatusReceived. +func FormatCloseMessage(closeCode int, text string) []byte { + if closeCode == CloseNoStatusReceived { + // Return empty message because it's illegal to send + // CloseNoStatusReceived. Return non-nil value in case application + // checks for nil. + return []byte{} + } + buf := make([]byte, 2+len(text)) + binary.BigEndian.PutUint16(buf, uint16(closeCode)) + copy(buf[2:], text) + return buf +} diff --git a/vendor/github.com/gorilla/websocket/conn_write.go b/vendor/github.com/gorilla/websocket/conn_write.go new file mode 100644 index 000000000000..a509a21f87af --- /dev/null +++ b/vendor/github.com/gorilla/websocket/conn_write.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package websocket + +import "net" + +func (c *Conn) writeBufs(bufs ...[]byte) error { + b := net.Buffers(bufs) + _, err := b.WriteTo(c.conn) + return err +} diff --git a/vendor/github.com/gorilla/websocket/conn_write_legacy.go b/vendor/github.com/gorilla/websocket/conn_write_legacy.go new file mode 100644 index 000000000000..37edaff5a578 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/conn_write_legacy.go @@ -0,0 +1,18 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.8 + +package websocket + +func (c *Conn) writeBufs(bufs ...[]byte) error { + for _, buf := range bufs { + if len(buf) > 0 { + if _, err := c.conn.Write(buf); err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/github.com/gorilla/websocket/doc.go b/vendor/github.com/gorilla/websocket/doc.go new file mode 100644 index 000000000000..c6f4df8960ff --- /dev/null +++ b/vendor/github.com/gorilla/websocket/doc.go @@ -0,0 +1,227 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package websocket implements the WebSocket protocol defined in RFC 6455. +// +// Overview +// +// The Conn type represents a WebSocket connection. A server application calls +// the Upgrader.Upgrade method from an HTTP request handler to get a *Conn: +// +// var upgrader = websocket.Upgrader{ +// ReadBufferSize: 1024, +// WriteBufferSize: 1024, +// } +// +// func handler(w http.ResponseWriter, r *http.Request) { +// conn, err := upgrader.Upgrade(w, r, nil) +// if err != nil { +// log.Println(err) +// return +// } +// ... Use conn to send and receive messages. +// } +// +// Call the connection's WriteMessage and ReadMessage methods to send and +// receive messages as a slice of bytes. This snippet of code shows how to echo +// messages using these methods: +// +// for { +// messageType, p, err := conn.ReadMessage() +// if err != nil { +// log.Println(err) +// return +// } +// if err := conn.WriteMessage(messageType, p); err != nil { +// log.Println(err) +// return +// } +// } +// +// In above snippet of code, p is a []byte and messageType is an int with value +// websocket.BinaryMessage or websocket.TextMessage. +// +// An application can also send and receive messages using the io.WriteCloser +// and io.Reader interfaces. To send a message, call the connection NextWriter +// method to get an io.WriteCloser, write the message to the writer and close +// the writer when done. To receive a message, call the connection NextReader +// method to get an io.Reader and read until io.EOF is returned. This snippet +// shows how to echo messages using the NextWriter and NextReader methods: +// +// for { +// messageType, r, err := conn.NextReader() +// if err != nil { +// return +// } +// w, err := conn.NextWriter(messageType) +// if err != nil { +// return err +// } +// if _, err := io.Copy(w, r); err != nil { +// return err +// } +// if err := w.Close(); err != nil { +// return err +// } +// } +// +// Data Messages +// +// The WebSocket protocol distinguishes between text and binary data messages. +// Text messages are interpreted as UTF-8 encoded text. The interpretation of +// binary messages is left to the application. +// +// This package uses the TextMessage and BinaryMessage integer constants to +// identify the two data message types. The ReadMessage and NextReader methods +// return the type of the received message. The messageType argument to the +// WriteMessage and NextWriter methods specifies the type of a sent message. +// +// It is the application's responsibility to ensure that text messages are +// valid UTF-8 encoded text. +// +// Control Messages +// +// The WebSocket protocol defines three types of control messages: close, ping +// and pong. Call the connection WriteControl, WriteMessage or NextWriter +// methods to send a control message to the peer. +// +// Connections handle received close messages by calling the handler function +// set with the SetCloseHandler method and by returning a *CloseError from the +// NextReader, ReadMessage or the message Read method. The default close +// handler sends a close message to the peer. +// +// Connections handle received ping messages by calling the handler function +// set with the SetPingHandler method. The default ping handler sends a pong +// message to the peer. +// +// Connections handle received pong messages by calling the handler function +// set with the SetPongHandler method. The default pong handler does nothing. +// If an application sends ping messages, then the application should set a +// pong handler to receive the corresponding pong. +// +// The control message handler functions are called from the NextReader, +// ReadMessage and message reader Read methods. The default close and ping +// handlers can block these methods for a short time when the handler writes to +// the connection. +// +// The application must read the connection to process close, ping and pong +// messages sent from the peer. If the application is not otherwise interested +// in messages from the peer, then the application should start a goroutine to +// read and discard messages from the peer. A simple example is: +// +// func readLoop(c *websocket.Conn) { +// for { +// if _, _, err := c.NextReader(); err != nil { +// c.Close() +// break +// } +// } +// } +// +// Concurrency +// +// Connections support one concurrent reader and one concurrent writer. +// +// Applications are responsible for ensuring that no more than one goroutine +// calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, +// WriteJSON, EnableWriteCompression, SetCompressionLevel) concurrently and +// that no more than one goroutine calls the read methods (NextReader, +// SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, SetPingHandler) +// concurrently. +// +// The Close and WriteControl methods can be called concurrently with all other +// methods. +// +// Origin Considerations +// +// Web browsers allow Javascript applications to open a WebSocket connection to +// any host. It's up to the server to enforce an origin policy using the Origin +// request header sent by the browser. +// +// The Upgrader calls the function specified in the CheckOrigin field to check +// the origin. If the CheckOrigin function returns false, then the Upgrade +// method fails the WebSocket handshake with HTTP status 403. +// +// If the CheckOrigin field is nil, then the Upgrader uses a safe default: fail +// the handshake if the Origin request header is present and the Origin host is +// not equal to the Host request header. +// +// The deprecated package-level Upgrade function does not perform origin +// checking. The application is responsible for checking the Origin header +// before calling the Upgrade function. +// +// Buffers +// +// Connections buffer network input and output to reduce the number +// of system calls when reading or writing messages. +// +// Write buffers are also used for constructing WebSocket frames. See RFC 6455, +// Section 5 for a discussion of message framing. A WebSocket frame header is +// written to the network each time a write buffer is flushed to the network. +// Decreasing the size of the write buffer can increase the amount of framing +// overhead on the connection. +// +// The buffer sizes in bytes are specified by the ReadBufferSize and +// WriteBufferSize fields in the Dialer and Upgrader. The Dialer uses a default +// size of 4096 when a buffer size field is set to zero. The Upgrader reuses +// buffers created by the HTTP server when a buffer size field is set to zero. +// The HTTP server buffers have a size of 4096 at the time of this writing. +// +// The buffer sizes do not limit the size of a message that can be read or +// written by a connection. +// +// Buffers are held for the lifetime of the connection by default. If the +// Dialer or Upgrader WriteBufferPool field is set, then a connection holds the +// write buffer only when writing a message. +// +// Applications should tune the buffer sizes to balance memory use and +// performance. Increasing the buffer size uses more memory, but can reduce the +// number of system calls to read or write the network. In the case of writing, +// increasing the buffer size can reduce the number of frame headers written to +// the network. +// +// Some guidelines for setting buffer parameters are: +// +// Limit the buffer sizes to the maximum expected message size. Buffers larger +// than the largest message do not provide any benefit. +// +// Depending on the distribution of message sizes, setting the buffer size to +// to a value less than the maximum expected message size can greatly reduce +// memory use with a small impact on performance. Here's an example: If 99% of +// the messages are smaller than 256 bytes and the maximum message size is 512 +// bytes, then a buffer size of 256 bytes will result in 1.01 more system calls +// than a buffer size of 512 bytes. The memory savings is 50%. +// +// A write buffer pool is useful when the application has a modest number +// writes over a large number of connections. when buffers are pooled, a larger +// buffer size has a reduced impact on total memory use and has the benefit of +// reducing system calls and frame overhead. +// +// Compression EXPERIMENTAL +// +// Per message compression extensions (RFC 7692) are experimentally supported +// by this package in a limited capacity. Setting the EnableCompression option +// to true in Dialer or Upgrader will attempt to negotiate per message deflate +// support. +// +// var upgrader = websocket.Upgrader{ +// EnableCompression: true, +// } +// +// If compression was successfully negotiated with the connection's peer, any +// message received in compressed form will be automatically decompressed. +// All Read methods will return uncompressed bytes. +// +// Per message compression of messages written to a connection can be enabled +// or disabled by calling the corresponding Conn method: +// +// conn.EnableWriteCompression(false) +// +// Currently this package does not support compression with "context takeover". +// This means that messages must be compressed and decompressed in isolation, +// without retaining sliding window or dictionary state across messages. For +// more details refer to RFC 7692. +// +// Use of compression is experimental and may result in decreased performance. +package websocket diff --git a/vendor/github.com/gorilla/websocket/go.mod b/vendor/github.com/gorilla/websocket/go.mod new file mode 100644 index 000000000000..93a9e924a777 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/go.mod @@ -0,0 +1 @@ +module github.com/gorilla/websocket diff --git a/vendor/github.com/gorilla/websocket/go.sum b/vendor/github.com/gorilla/websocket/go.sum new file mode 100644 index 000000000000..cf4fbbaa07ac --- /dev/null +++ b/vendor/github.com/gorilla/websocket/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= diff --git a/vendor/github.com/gorilla/websocket/join.go b/vendor/github.com/gorilla/websocket/join.go new file mode 100644 index 000000000000..c64f8c82901a --- /dev/null +++ b/vendor/github.com/gorilla/websocket/join.go @@ -0,0 +1,42 @@ +// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "io" + "strings" +) + +// JoinMessages concatenates received messages to create a single io.Reader. +// The string term is appended to each message. The returned reader does not +// support concurrent calls to the Read method. +func JoinMessages(c *Conn, term string) io.Reader { + return &joinReader{c: c, term: term} +} + +type joinReader struct { + c *Conn + term string + r io.Reader +} + +func (r *joinReader) Read(p []byte) (int, error) { + if r.r == nil { + var err error + _, r.r, err = r.c.NextReader() + if err != nil { + return 0, err + } + if r.term != "" { + r.r = io.MultiReader(r.r, strings.NewReader(r.term)) + } + } + n, err := r.r.Read(p) + if err == io.EOF { + err = nil + r.r = nil + } + return n, err +} diff --git a/vendor/github.com/gorilla/websocket/json.go b/vendor/github.com/gorilla/websocket/json.go new file mode 100644 index 000000000000..dc2c1f6415ff --- /dev/null +++ b/vendor/github.com/gorilla/websocket/json.go @@ -0,0 +1,60 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "encoding/json" + "io" +) + +// WriteJSON writes the JSON encoding of v as a message. +// +// Deprecated: Use c.WriteJSON instead. +func WriteJSON(c *Conn, v interface{}) error { + return c.WriteJSON(v) +} + +// WriteJSON writes the JSON encoding of v as a message. +// +// See the documentation for encoding/json Marshal for details about the +// conversion of Go values to JSON. +func (c *Conn) WriteJSON(v interface{}) error { + w, err := c.NextWriter(TextMessage) + if err != nil { + return err + } + err1 := json.NewEncoder(w).Encode(v) + err2 := w.Close() + if err1 != nil { + return err1 + } + return err2 +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// Deprecated: Use c.ReadJSON instead. +func ReadJSON(c *Conn, v interface{}) error { + return c.ReadJSON(v) +} + +// ReadJSON reads the next JSON-encoded message from the connection and stores +// it in the value pointed to by v. +// +// See the documentation for the encoding/json Unmarshal function for details +// about the conversion of JSON to a Go value. +func (c *Conn) ReadJSON(v interface{}) error { + _, r, err := c.NextReader() + if err != nil { + return err + } + err = json.NewDecoder(r).Decode(v) + if err == io.EOF { + // One value is expected in the message. + err = io.ErrUnexpectedEOF + } + return err +} diff --git a/vendor/github.com/gorilla/websocket/mask.go b/vendor/github.com/gorilla/websocket/mask.go new file mode 100644 index 000000000000..577fce9efd72 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/mask.go @@ -0,0 +1,54 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +// +build !appengine + +package websocket + +import "unsafe" + +const wordSize = int(unsafe.Sizeof(uintptr(0))) + +func maskBytes(key [4]byte, pos int, b []byte) int { + // Mask one byte at a time for small buffers. + if len(b) < 2*wordSize { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 + } + + // Mask one byte at a time to word boundary. + if n := int(uintptr(unsafe.Pointer(&b[0]))) % wordSize; n != 0 { + n = wordSize - n + for i := range b[:n] { + b[i] ^= key[pos&3] + pos++ + } + b = b[n:] + } + + // Create aligned word size key. + var k [wordSize]byte + for i := range k { + k[i] = key[(pos+i)&3] + } + kw := *(*uintptr)(unsafe.Pointer(&k)) + + // Mask one word at a time. + n := (len(b) / wordSize) * wordSize + for i := 0; i < n; i += wordSize { + *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&b[0])) + uintptr(i))) ^= kw + } + + // Mask one byte at a time for remaining bytes. + b = b[n:] + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + + return pos & 3 +} diff --git a/vendor/github.com/gorilla/websocket/mask_safe.go b/vendor/github.com/gorilla/websocket/mask_safe.go new file mode 100644 index 000000000000..2aac060e52e7 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/mask_safe.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of +// this source code is governed by a BSD-style license that can be found in the +// LICENSE file. + +// +build appengine + +package websocket + +func maskBytes(key [4]byte, pos int, b []byte) int { + for i := range b { + b[i] ^= key[pos&3] + pos++ + } + return pos & 3 +} diff --git a/vendor/github.com/gorilla/websocket/prepared.go b/vendor/github.com/gorilla/websocket/prepared.go new file mode 100644 index 000000000000..74ec565d2c38 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/prepared.go @@ -0,0 +1,102 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bytes" + "net" + "sync" + "time" +) + +// PreparedMessage caches on the wire representations of a message payload. +// Use PreparedMessage to efficiently send a message payload to multiple +// connections. PreparedMessage is especially useful when compression is used +// because the CPU and memory expensive compression operation can be executed +// once for a given set of compression options. +type PreparedMessage struct { + messageType int + data []byte + mu sync.Mutex + frames map[prepareKey]*preparedFrame +} + +// prepareKey defines a unique set of options to cache prepared frames in PreparedMessage. +type prepareKey struct { + isServer bool + compress bool + compressionLevel int +} + +// preparedFrame contains data in wire representation. +type preparedFrame struct { + once sync.Once + data []byte +} + +// NewPreparedMessage returns an initialized PreparedMessage. You can then send +// it to connection using WritePreparedMessage method. Valid wire +// representation will be calculated lazily only once for a set of current +// connection options. +func NewPreparedMessage(messageType int, data []byte) (*PreparedMessage, error) { + pm := &PreparedMessage{ + messageType: messageType, + frames: make(map[prepareKey]*preparedFrame), + data: data, + } + + // Prepare a plain server frame. + _, frameData, err := pm.frame(prepareKey{isServer: true, compress: false}) + if err != nil { + return nil, err + } + + // To protect against caller modifying the data argument, remember the data + // copied to the plain server frame. + pm.data = frameData[len(frameData)-len(data):] + return pm, nil +} + +func (pm *PreparedMessage) frame(key prepareKey) (int, []byte, error) { + pm.mu.Lock() + frame, ok := pm.frames[key] + if !ok { + frame = &preparedFrame{} + pm.frames[key] = frame + } + pm.mu.Unlock() + + var err error + frame.once.Do(func() { + // Prepare a frame using a 'fake' connection. + // TODO: Refactor code in conn.go to allow more direct construction of + // the frame. + mu := make(chan bool, 1) + mu <- true + var nc prepareConn + c := &Conn{ + conn: &nc, + mu: mu, + isServer: key.isServer, + compressionLevel: key.compressionLevel, + enableWriteCompression: true, + writeBuf: make([]byte, defaultWriteBufferSize+maxFrameHeaderSize), + } + if key.compress { + c.newCompressionWriter = compressNoContextTakeover + } + err = c.WriteMessage(pm.messageType, pm.data) + frame.data = nc.buf.Bytes() + }) + return pm.messageType, frame.data, err +} + +type prepareConn struct { + buf bytes.Buffer + net.Conn +} + +func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) } +func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil } diff --git a/vendor/github.com/gorilla/websocket/proxy.go b/vendor/github.com/gorilla/websocket/proxy.go new file mode 100644 index 000000000000..e87a8c9f0c96 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/proxy.go @@ -0,0 +1,77 @@ +// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "encoding/base64" + "errors" + "net" + "net/http" + "net/url" + "strings" +) + +type netDialerFunc func(network, addr string) (net.Conn, error) + +func (fn netDialerFunc) Dial(network, addr string) (net.Conn, error) { + return fn(network, addr) +} + +func init() { + proxy_RegisterDialerType("http", func(proxyURL *url.URL, forwardDialer proxy_Dialer) (proxy_Dialer, error) { + return &httpProxyDialer{proxyURL: proxyURL, forwardDial: forwardDialer.Dial}, nil + }) +} + +type httpProxyDialer struct { + proxyURL *url.URL + forwardDial func(network, addr string) (net.Conn, error) +} + +func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) { + hostPort, _ := hostPortNoPort(hpd.proxyURL) + conn, err := hpd.forwardDial(network, hostPort) + if err != nil { + return nil, err + } + + connectHeader := make(http.Header) + if user := hpd.proxyURL.User; user != nil { + proxyUser := user.Username() + if proxyPassword, passwordSet := user.Password(); passwordSet { + credential := base64.StdEncoding.EncodeToString([]byte(proxyUser + ":" + proxyPassword)) + connectHeader.Set("Proxy-Authorization", "Basic "+credential) + } + } + + connectReq := &http.Request{ + Method: "CONNECT", + URL: &url.URL{Opaque: addr}, + Host: addr, + Header: connectHeader, + } + + if err := connectReq.Write(conn); err != nil { + conn.Close() + return nil, err + } + + // Read response. It's OK to use and discard buffered reader here becaue + // the remote server does not speak until spoken to. + br := bufio.NewReader(conn) + resp, err := http.ReadResponse(br, connectReq) + if err != nil { + conn.Close() + return nil, err + } + + if resp.StatusCode != 200 { + conn.Close() + f := strings.SplitN(resp.Status, " ", 2) + return nil, errors.New(f[1]) + } + return conn, nil +} diff --git a/vendor/github.com/gorilla/websocket/server.go b/vendor/github.com/gorilla/websocket/server.go new file mode 100644 index 000000000000..3d4480a47764 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/server.go @@ -0,0 +1,363 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "bufio" + "errors" + "io" + "net/http" + "net/url" + "strings" + "time" +) + +// HandshakeError describes an error with the handshake from the peer. +type HandshakeError struct { + message string +} + +func (e HandshakeError) Error() string { return e.message } + +// Upgrader specifies parameters for upgrading an HTTP connection to a +// WebSocket connection. +type Upgrader struct { + // HandshakeTimeout specifies the duration for the handshake to complete. + HandshakeTimeout time.Duration + + // ReadBufferSize and WriteBufferSize specify I/O buffer sizes in bytes. If a buffer + // size is zero, then buffers allocated by the HTTP server are used. The + // I/O buffer sizes do not limit the size of the messages that can be sent + // or received. + ReadBufferSize, WriteBufferSize int + + // WriteBufferPool is a pool of buffers for write operations. If the value + // is not set, then write buffers are allocated to the connection for the + // lifetime of the connection. + // + // A pool is most useful when the application has a modest volume of writes + // across a large number of connections. + // + // Applications should use a single pool for each unique value of + // WriteBufferSize. + WriteBufferPool BufferPool + + // Subprotocols specifies the server's supported protocols in order of + // preference. If this field is not nil, then the Upgrade method negotiates a + // subprotocol by selecting the first match in this list with a protocol + // requested by the client. If there's no match, then no protocol is + // negotiated (the Sec-Websocket-Protocol header is not included in the + // handshake response). + Subprotocols []string + + // Error specifies the function for generating HTTP error responses. If Error + // is nil, then http.Error is used to generate the HTTP response. + Error func(w http.ResponseWriter, r *http.Request, status int, reason error) + + // CheckOrigin returns true if the request Origin header is acceptable. If + // CheckOrigin is nil, then a safe default is used: return false if the + // Origin request header is present and the origin host is not equal to + // request Host header. + // + // A CheckOrigin function should carefully validate the request origin to + // prevent cross-site request forgery. + CheckOrigin func(r *http.Request) bool + + // EnableCompression specify if the server should attempt to negotiate per + // message compression (RFC 7692). Setting this value to true does not + // guarantee that compression will be supported. Currently only "no context + // takeover" modes are supported. + EnableCompression bool +} + +func (u *Upgrader) returnError(w http.ResponseWriter, r *http.Request, status int, reason string) (*Conn, error) { + err := HandshakeError{reason} + if u.Error != nil { + u.Error(w, r, status, err) + } else { + w.Header().Set("Sec-Websocket-Version", "13") + http.Error(w, http.StatusText(status), status) + } + return nil, err +} + +// checkSameOrigin returns true if the origin is not set or is equal to the request host. +func checkSameOrigin(r *http.Request) bool { + origin := r.Header["Origin"] + if len(origin) == 0 { + return true + } + u, err := url.Parse(origin[0]) + if err != nil { + return false + } + return equalASCIIFold(u.Host, r.Host) +} + +func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { + if u.Subprotocols != nil { + clientProtocols := Subprotocols(r) + for _, serverProtocol := range u.Subprotocols { + for _, clientProtocol := range clientProtocols { + if clientProtocol == serverProtocol { + return clientProtocol + } + } + } + } else if responseHeader != nil { + return responseHeader.Get("Sec-Websocket-Protocol") + } + return "" +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// application negotiated subprotocol (Sec-WebSocket-Protocol). +// +// If the upgrade fails, then Upgrade replies to the client with an HTTP error +// response. +func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { + const badHandshake = "websocket: the client is not using the websocket protocol: " + + if !tokenListContainsValue(r.Header, "Connection", "upgrade") { + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'upgrade' token not found in 'Connection' header") + } + + if !tokenListContainsValue(r.Header, "Upgrade", "websocket") { + return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header") + } + + if r.Method != "GET" { + return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET") + } + + if !tokenListContainsValue(r.Header, "Sec-Websocket-Version", "13") { + return u.returnError(w, r, http.StatusBadRequest, "websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header") + } + + if _, ok := responseHeader["Sec-Websocket-Extensions"]; ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported") + } + + checkOrigin := u.CheckOrigin + if checkOrigin == nil { + checkOrigin = checkSameOrigin + } + if !checkOrigin(r) { + return u.returnError(w, r, http.StatusForbidden, "websocket: request origin not allowed by Upgrader.CheckOrigin") + } + + challengeKey := r.Header.Get("Sec-Websocket-Key") + if challengeKey == "" { + return u.returnError(w, r, http.StatusBadRequest, "websocket: not a websocket handshake: `Sec-WebSocket-Key' header is missing or blank") + } + + subprotocol := u.selectSubprotocol(r, responseHeader) + + // Negotiate PMCE + var compress bool + if u.EnableCompression { + for _, ext := range parseExtensions(r.Header) { + if ext[""] != "permessage-deflate" { + continue + } + compress = true + break + } + } + + h, ok := w.(http.Hijacker) + if !ok { + return u.returnError(w, r, http.StatusInternalServerError, "websocket: response does not implement http.Hijacker") + } + var brw *bufio.ReadWriter + netConn, brw, err := h.Hijack() + if err != nil { + return u.returnError(w, r, http.StatusInternalServerError, err.Error()) + } + + if brw.Reader.Buffered() > 0 { + netConn.Close() + return nil, errors.New("websocket: client sent data before handshake is complete") + } + + var br *bufio.Reader + if u.ReadBufferSize == 0 && bufioReaderSize(netConn, brw.Reader) > 256 { + // Reuse hijacked buffered reader as connection reader. + br = brw.Reader + } + + buf := bufioWriterBuffer(netConn, brw.Writer) + + var writeBuf []byte + if u.WriteBufferPool == nil && u.WriteBufferSize == 0 && len(buf) >= maxFrameHeaderSize+256 { + // Reuse hijacked write buffer as connection buffer. + writeBuf = buf + } + + c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize, u.WriteBufferPool, br, writeBuf) + c.subprotocol = subprotocol + + if compress { + c.newCompressionWriter = compressNoContextTakeover + c.newDecompressionReader = decompressNoContextTakeover + } + + // Use larger of hijacked buffer and connection write buffer for header. + p := buf + if len(c.writeBuf) > len(p) { + p = c.writeBuf + } + p = p[:0] + + p = append(p, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: "...) + p = append(p, computeAcceptKey(challengeKey)...) + p = append(p, "\r\n"...) + if c.subprotocol != "" { + p = append(p, "Sec-WebSocket-Protocol: "...) + p = append(p, c.subprotocol...) + p = append(p, "\r\n"...) + } + if compress { + p = append(p, "Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; client_no_context_takeover\r\n"...) + } + for k, vs := range responseHeader { + if k == "Sec-Websocket-Protocol" { + continue + } + for _, v := range vs { + p = append(p, k...) + p = append(p, ": "...) + for i := 0; i < len(v); i++ { + b := v[i] + if b <= 31 { + // prevent response splitting. + b = ' ' + } + p = append(p, b) + } + p = append(p, "\r\n"...) + } + } + p = append(p, "\r\n"...) + + // Clear deadlines set by HTTP server. + netConn.SetDeadline(time.Time{}) + + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Now().Add(u.HandshakeTimeout)) + } + if _, err = netConn.Write(p); err != nil { + netConn.Close() + return nil, err + } + if u.HandshakeTimeout > 0 { + netConn.SetWriteDeadline(time.Time{}) + } + + return c, nil +} + +// Upgrade upgrades the HTTP server connection to the WebSocket protocol. +// +// Deprecated: Use websocket.Upgrader instead. +// +// Upgrade does not perform origin checking. The application is responsible for +// checking the Origin header before calling Upgrade. An example implementation +// of the same origin policy check is: +// +// if req.Header.Get("Origin") != "http://"+req.Host { +// http.Error(w, "Origin not allowed", http.StatusForbidden) +// return +// } +// +// If the endpoint supports subprotocols, then the application is responsible +// for negotiating the protocol used on the connection. Use the Subprotocols() +// function to get the subprotocols requested by the client. Use the +// Sec-Websocket-Protocol response header to specify the subprotocol selected +// by the application. +// +// The responseHeader is included in the response to the client's upgrade +// request. Use the responseHeader to specify cookies (Set-Cookie) and the +// negotiated subprotocol (Sec-Websocket-Protocol). +// +// The connection buffers IO to the underlying network connection. The +// readBufSize and writeBufSize parameters specify the size of the buffers to +// use. Messages can be larger than the buffers. +// +// If the request is not a valid WebSocket handshake, then Upgrade returns an +// error of type HandshakeError. Applications should handle this error by +// replying to the client with an HTTP error response. +func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) { + u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize} + u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) { + // don't return errors to maintain backwards compatibility + } + u.CheckOrigin = func(r *http.Request) bool { + // allow all connections by default + return true + } + return u.Upgrade(w, r, responseHeader) +} + +// Subprotocols returns the subprotocols requested by the client in the +// Sec-Websocket-Protocol header. +func Subprotocols(r *http.Request) []string { + h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) + if h == "" { + return nil + } + protocols := strings.Split(h, ",") + for i := range protocols { + protocols[i] = strings.TrimSpace(protocols[i]) + } + return protocols +} + +// IsWebSocketUpgrade returns true if the client requested upgrade to the +// WebSocket protocol. +func IsWebSocketUpgrade(r *http.Request) bool { + return tokenListContainsValue(r.Header, "Connection", "upgrade") && + tokenListContainsValue(r.Header, "Upgrade", "websocket") +} + +// bufioReaderSize size returns the size of a bufio.Reader. +func bufioReaderSize(originalReader io.Reader, br *bufio.Reader) int { + // This code assumes that peek on a reset reader returns + // bufio.Reader.buf[:0]. + // TODO: Use bufio.Reader.Size() after Go 1.10 + br.Reset(originalReader) + if p, err := br.Peek(0); err == nil { + return cap(p) + } + return 0 +} + +// writeHook is an io.Writer that records the last slice passed to it vio +// io.Writer.Write. +type writeHook struct { + p []byte +} + +func (wh *writeHook) Write(p []byte) (int, error) { + wh.p = p + return len(p), nil +} + +// bufioWriterBuffer grabs the buffer from a bufio.Writer. +func bufioWriterBuffer(originalWriter io.Writer, bw *bufio.Writer) []byte { + // This code assumes that bufio.Writer.buf[:1] is passed to the + // bufio.Writer's underlying writer. + var wh writeHook + bw.Reset(&wh) + bw.WriteByte(0) + bw.Flush() + + bw.Reset(originalWriter) + + return wh.p[:cap(wh.p)] +} diff --git a/vendor/github.com/gorilla/websocket/trace.go b/vendor/github.com/gorilla/websocket/trace.go new file mode 100644 index 000000000000..834f122a00db --- /dev/null +++ b/vendor/github.com/gorilla/websocket/trace.go @@ -0,0 +1,19 @@ +// +build go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + if trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(tlsConn, cfg) + if trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) + } + return err +} diff --git a/vendor/github.com/gorilla/websocket/trace_17.go b/vendor/github.com/gorilla/websocket/trace_17.go new file mode 100644 index 000000000000..77d05a0b5748 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/trace_17.go @@ -0,0 +1,12 @@ +// +build !go1.8 + +package websocket + +import ( + "crypto/tls" + "net/http/httptrace" +) + +func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { + return doHandshake(tlsConn, cfg) +} diff --git a/vendor/github.com/gorilla/websocket/util.go b/vendor/github.com/gorilla/websocket/util.go new file mode 100644 index 000000000000..7bf2f66c6747 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/util.go @@ -0,0 +1,283 @@ +// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package websocket + +import ( + "crypto/rand" + "crypto/sha1" + "encoding/base64" + "io" + "net/http" + "strings" + "unicode/utf8" +) + +var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11") + +func computeAcceptKey(challengeKey string) string { + h := sha1.New() + h.Write([]byte(challengeKey)) + h.Write(keyGUID) + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} + +func generateChallengeKey() (string, error) { + p := make([]byte, 16) + if _, err := io.ReadFull(rand.Reader, p); err != nil { + return "", err + } + return base64.StdEncoding.EncodeToString(p), nil +} + +// Token octets per RFC 2616. +var isTokenOctet = [256]bool{ + '!': true, + '#': true, + '$': true, + '%': true, + '&': true, + '\'': true, + '*': true, + '+': true, + '-': true, + '.': true, + '0': true, + '1': true, + '2': true, + '3': true, + '4': true, + '5': true, + '6': true, + '7': true, + '8': true, + '9': true, + 'A': true, + 'B': true, + 'C': true, + 'D': true, + 'E': true, + 'F': true, + 'G': true, + 'H': true, + 'I': true, + 'J': true, + 'K': true, + 'L': true, + 'M': true, + 'N': true, + 'O': true, + 'P': true, + 'Q': true, + 'R': true, + 'S': true, + 'T': true, + 'U': true, + 'W': true, + 'V': true, + 'X': true, + 'Y': true, + 'Z': true, + '^': true, + '_': true, + '`': true, + 'a': true, + 'b': true, + 'c': true, + 'd': true, + 'e': true, + 'f': true, + 'g': true, + 'h': true, + 'i': true, + 'j': true, + 'k': true, + 'l': true, + 'm': true, + 'n': true, + 'o': true, + 'p': true, + 'q': true, + 'r': true, + 's': true, + 't': true, + 'u': true, + 'v': true, + 'w': true, + 'x': true, + 'y': true, + 'z': true, + '|': true, + '~': true, +} + +// skipSpace returns a slice of the string s with all leading RFC 2616 linear +// whitespace removed. +func skipSpace(s string) (rest string) { + i := 0 + for ; i < len(s); i++ { + if b := s[i]; b != ' ' && b != '\t' { + break + } + } + return s[i:] +} + +// nextToken returns the leading RFC 2616 token of s and the string following +// the token. +func nextToken(s string) (token, rest string) { + i := 0 + for ; i < len(s); i++ { + if !isTokenOctet[s[i]] { + break + } + } + return s[:i], s[i:] +} + +// nextTokenOrQuoted returns the leading token or quoted string per RFC 2616 +// and the string following the token or quoted string. +func nextTokenOrQuoted(s string) (value string, rest string) { + if !strings.HasPrefix(s, "\"") { + return nextToken(s) + } + s = s[1:] + for i := 0; i < len(s); i++ { + switch s[i] { + case '"': + return s[:i], s[i+1:] + case '\\': + p := make([]byte, len(s)-1) + j := copy(p, s[:i]) + escape := true + for i = i + 1; i < len(s); i++ { + b := s[i] + switch { + case escape: + escape = false + p[j] = b + j++ + case b == '\\': + escape = true + case b == '"': + return string(p[:j]), s[i+1:] + default: + p[j] = b + j++ + } + } + return "", "" + } + } + return "", "" +} + +// equalASCIIFold returns true if s is equal to t with ASCII case folding as +// defined in RFC 4790. +func equalASCIIFold(s, t string) bool { + for s != "" && t != "" { + sr, size := utf8.DecodeRuneInString(s) + s = s[size:] + tr, size := utf8.DecodeRuneInString(t) + t = t[size:] + if sr == tr { + continue + } + if 'A' <= sr && sr <= 'Z' { + sr = sr + 'a' - 'A' + } + if 'A' <= tr && tr <= 'Z' { + tr = tr + 'a' - 'A' + } + if sr != tr { + return false + } + } + return s == t +} + +// tokenListContainsValue returns true if the 1#token header with the given +// name contains a token equal to value with ASCII case folding. +func tokenListContainsValue(header http.Header, name string, value string) bool { +headers: + for _, s := range header[name] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + s = skipSpace(s) + if s != "" && s[0] != ',' { + continue headers + } + if equalASCIIFold(t, value) { + return true + } + if s == "" { + continue headers + } + s = s[1:] + } + } + return false +} + +// parseExtensions parses WebSocket extensions from a header. +func parseExtensions(header http.Header) []map[string]string { + // From RFC 6455: + // + // Sec-WebSocket-Extensions = extension-list + // extension-list = 1#extension + // extension = extension-token *( ";" extension-param ) + // extension-token = registered-token + // registered-token = token + // extension-param = token [ "=" (token | quoted-string) ] + // ;When using the quoted-string syntax variant, the value + // ;after quoted-string unescaping MUST conform to the + // ;'token' ABNF. + + var result []map[string]string +headers: + for _, s := range header["Sec-Websocket-Extensions"] { + for { + var t string + t, s = nextToken(skipSpace(s)) + if t == "" { + continue headers + } + ext := map[string]string{"": t} + for { + s = skipSpace(s) + if !strings.HasPrefix(s, ";") { + break + } + var k string + k, s = nextToken(skipSpace(s[1:])) + if k == "" { + continue headers + } + s = skipSpace(s) + var v string + if strings.HasPrefix(s, "=") { + v, s = nextTokenOrQuoted(skipSpace(s[1:])) + s = skipSpace(s) + } + if s != "" && s[0] != ',' && s[0] != ';' { + continue headers + } + ext[k] = v + } + if s != "" && s[0] != ',' { + continue headers + } + result = append(result, ext) + if s == "" { + continue headers + } + s = s[1:] + } + } + return result +} diff --git a/vendor/github.com/gorilla/websocket/x_net_proxy.go b/vendor/github.com/gorilla/websocket/x_net_proxy.go new file mode 100644 index 000000000000..2e668f6b8821 --- /dev/null +++ b/vendor/github.com/gorilla/websocket/x_net_proxy.go @@ -0,0 +1,473 @@ +// Code generated by golang.org/x/tools/cmd/bundle. DO NOT EDIT. +//go:generate bundle -o x_net_proxy.go golang.org/x/net/proxy + +// Package proxy provides support for a variety of protocols to proxy network +// data. +// + +package websocket + +import ( + "errors" + "io" + "net" + "net/url" + "os" + "strconv" + "strings" + "sync" +) + +type proxy_direct struct{} + +// Direct is a direct proxy: one that makes network connections directly. +var proxy_Direct = proxy_direct{} + +func (proxy_direct) Dial(network, addr string) (net.Conn, error) { + return net.Dial(network, addr) +} + +// A PerHost directs connections to a default Dialer unless the host name +// requested matches one of a number of exceptions. +type proxy_PerHost struct { + def, bypass proxy_Dialer + + bypassNetworks []*net.IPNet + bypassIPs []net.IP + bypassZones []string + bypassHosts []string +} + +// NewPerHost returns a PerHost Dialer that directs connections to either +// defaultDialer or bypass, depending on whether the connection matches one of +// the configured rules. +func proxy_NewPerHost(defaultDialer, bypass proxy_Dialer) *proxy_PerHost { + return &proxy_PerHost{ + def: defaultDialer, + bypass: bypass, + } +} + +// Dial connects to the address addr on the given network through either +// defaultDialer or bypass. +func (p *proxy_PerHost) Dial(network, addr string) (c net.Conn, err error) { + host, _, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + + return p.dialerForRequest(host).Dial(network, addr) +} + +func (p *proxy_PerHost) dialerForRequest(host string) proxy_Dialer { + if ip := net.ParseIP(host); ip != nil { + for _, net := range p.bypassNetworks { + if net.Contains(ip) { + return p.bypass + } + } + for _, bypassIP := range p.bypassIPs { + if bypassIP.Equal(ip) { + return p.bypass + } + } + return p.def + } + + for _, zone := range p.bypassZones { + if strings.HasSuffix(host, zone) { + return p.bypass + } + if host == zone[1:] { + // For a zone ".example.com", we match "example.com" + // too. + return p.bypass + } + } + for _, bypassHost := range p.bypassHosts { + if bypassHost == host { + return p.bypass + } + } + return p.def +} + +// AddFromString parses a string that contains comma-separated values +// specifying hosts that should use the bypass proxy. Each value is either an +// IP address, a CIDR range, a zone (*.example.com) or a host name +// (localhost). A best effort is made to parse the string and errors are +// ignored. +func (p *proxy_PerHost) AddFromString(s string) { + hosts := strings.Split(s, ",") + for _, host := range hosts { + host = strings.TrimSpace(host) + if len(host) == 0 { + continue + } + if strings.Contains(host, "/") { + // We assume that it's a CIDR address like 127.0.0.0/8 + if _, net, err := net.ParseCIDR(host); err == nil { + p.AddNetwork(net) + } + continue + } + if ip := net.ParseIP(host); ip != nil { + p.AddIP(ip) + continue + } + if strings.HasPrefix(host, "*.") { + p.AddZone(host[1:]) + continue + } + p.AddHost(host) + } +} + +// AddIP specifies an IP address that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match an IP. +func (p *proxy_PerHost) AddIP(ip net.IP) { + p.bypassIPs = append(p.bypassIPs, ip) +} + +// AddNetwork specifies an IP range that will use the bypass proxy. Note that +// this will only take effect if a literal IP address is dialed. A connection +// to a named host will never match. +func (p *proxy_PerHost) AddNetwork(net *net.IPNet) { + p.bypassNetworks = append(p.bypassNetworks, net) +} + +// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of +// "example.com" matches "example.com" and all of its subdomains. +func (p *proxy_PerHost) AddZone(zone string) { + if strings.HasSuffix(zone, ".") { + zone = zone[:len(zone)-1] + } + if !strings.HasPrefix(zone, ".") { + zone = "." + zone + } + p.bypassZones = append(p.bypassZones, zone) +} + +// AddHost specifies a host name that will use the bypass proxy. +func (p *proxy_PerHost) AddHost(host string) { + if strings.HasSuffix(host, ".") { + host = host[:len(host)-1] + } + p.bypassHosts = append(p.bypassHosts, host) +} + +// A Dialer is a means to establish a connection. +type proxy_Dialer interface { + // Dial connects to the given address via the proxy. + Dial(network, addr string) (c net.Conn, err error) +} + +// Auth contains authentication parameters that specific Dialers may require. +type proxy_Auth struct { + User, Password string +} + +// FromEnvironment returns the dialer specified by the proxy related variables in +// the environment. +func proxy_FromEnvironment() proxy_Dialer { + allProxy := proxy_allProxyEnv.Get() + if len(allProxy) == 0 { + return proxy_Direct + } + + proxyURL, err := url.Parse(allProxy) + if err != nil { + return proxy_Direct + } + proxy, err := proxy_FromURL(proxyURL, proxy_Direct) + if err != nil { + return proxy_Direct + } + + noProxy := proxy_noProxyEnv.Get() + if len(noProxy) == 0 { + return proxy + } + + perHost := proxy_NewPerHost(proxy, proxy_Direct) + perHost.AddFromString(noProxy) + return perHost +} + +// proxySchemes is a map from URL schemes to a function that creates a Dialer +// from a URL with such a scheme. +var proxy_proxySchemes map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error) + +// RegisterDialerType takes a URL scheme and a function to generate Dialers from +// a URL with that scheme and a forwarding Dialer. Registered schemes are used +// by FromURL. +func proxy_RegisterDialerType(scheme string, f func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) { + if proxy_proxySchemes == nil { + proxy_proxySchemes = make(map[string]func(*url.URL, proxy_Dialer) (proxy_Dialer, error)) + } + proxy_proxySchemes[scheme] = f +} + +// FromURL returns a Dialer given a URL specification and an underlying +// Dialer for it to make network requests. +func proxy_FromURL(u *url.URL, forward proxy_Dialer) (proxy_Dialer, error) { + var auth *proxy_Auth + if u.User != nil { + auth = new(proxy_Auth) + auth.User = u.User.Username() + if p, ok := u.User.Password(); ok { + auth.Password = p + } + } + + switch u.Scheme { + case "socks5": + return proxy_SOCKS5("tcp", u.Host, auth, forward) + } + + // If the scheme doesn't match any of the built-in schemes, see if it + // was registered by another package. + if proxy_proxySchemes != nil { + if f, ok := proxy_proxySchemes[u.Scheme]; ok { + return f(u, forward) + } + } + + return nil, errors.New("proxy: unknown scheme: " + u.Scheme) +} + +var ( + proxy_allProxyEnv = &proxy_envOnce{ + names: []string{"ALL_PROXY", "all_proxy"}, + } + proxy_noProxyEnv = &proxy_envOnce{ + names: []string{"NO_PROXY", "no_proxy"}, + } +) + +// envOnce looks up an environment variable (optionally by multiple +// names) once. It mitigates expensive lookups on some platforms +// (e.g. Windows). +// (Borrowed from net/http/transport.go) +type proxy_envOnce struct { + names []string + once sync.Once + val string +} + +func (e *proxy_envOnce) Get() string { + e.once.Do(e.init) + return e.val +} + +func (e *proxy_envOnce) init() { + for _, n := range e.names { + e.val = os.Getenv(n) + if e.val != "" { + return + } + } +} + +// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address +// with an optional username and password. See RFC 1928 and RFC 1929. +func proxy_SOCKS5(network, addr string, auth *proxy_Auth, forward proxy_Dialer) (proxy_Dialer, error) { + s := &proxy_socks5{ + network: network, + addr: addr, + forward: forward, + } + if auth != nil { + s.user = auth.User + s.password = auth.Password + } + + return s, nil +} + +type proxy_socks5 struct { + user, password string + network, addr string + forward proxy_Dialer +} + +const proxy_socks5Version = 5 + +const ( + proxy_socks5AuthNone = 0 + proxy_socks5AuthPassword = 2 +) + +const proxy_socks5Connect = 1 + +const ( + proxy_socks5IP4 = 1 + proxy_socks5Domain = 3 + proxy_socks5IP6 = 4 +) + +var proxy_socks5Errors = []string{ + "", + "general failure", + "connection forbidden", + "network unreachable", + "host unreachable", + "connection refused", + "TTL expired", + "command not supported", + "address type not supported", +} + +// Dial connects to the address addr on the given network via the SOCKS5 proxy. +func (s *proxy_socks5) Dial(network, addr string) (net.Conn, error) { + switch network { + case "tcp", "tcp6", "tcp4": + default: + return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network) + } + + conn, err := s.forward.Dial(s.network, s.addr) + if err != nil { + return nil, err + } + if err := s.connect(conn, addr); err != nil { + conn.Close() + return nil, err + } + return conn, nil +} + +// connect takes an existing connection to a socks5 proxy server, +// and commands the server to extend that connection to target, +// which must be a canonical address with a host and port. +func (s *proxy_socks5) connect(conn net.Conn, target string) error { + host, portStr, err := net.SplitHostPort(target) + if err != nil { + return err + } + + port, err := strconv.Atoi(portStr) + if err != nil { + return errors.New("proxy: failed to parse port number: " + portStr) + } + if port < 1 || port > 0xffff { + return errors.New("proxy: port number out of range: " + portStr) + } + + // the size here is just an estimate + buf := make([]byte, 0, 6+len(host)) + + buf = append(buf, proxy_socks5Version) + if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 { + buf = append(buf, 2 /* num auth methods */, proxy_socks5AuthNone, proxy_socks5AuthPassword) + } else { + buf = append(buf, 1 /* num auth methods */, proxy_socks5AuthNone) + } + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + if buf[0] != 5 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0]))) + } + if buf[1] == 0xff { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication") + } + + // See RFC 1929 + if buf[1] == proxy_socks5AuthPassword { + buf = buf[:0] + buf = append(buf, 1 /* password protocol version */) + buf = append(buf, uint8(len(s.user))) + buf = append(buf, s.user...) + buf = append(buf, uint8(len(s.password))) + buf = append(buf, s.password...) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if buf[1] != 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password") + } + } + + buf = buf[:0] + buf = append(buf, proxy_socks5Version, proxy_socks5Connect, 0 /* reserved */) + + if ip := net.ParseIP(host); ip != nil { + if ip4 := ip.To4(); ip4 != nil { + buf = append(buf, proxy_socks5IP4) + ip = ip4 + } else { + buf = append(buf, proxy_socks5IP6) + } + buf = append(buf, ip...) + } else { + if len(host) > 255 { + return errors.New("proxy: destination host name too long: " + host) + } + buf = append(buf, proxy_socks5Domain) + buf = append(buf, byte(len(host))) + buf = append(buf, host...) + } + buf = append(buf, byte(port>>8), byte(port)) + + if _, err := conn.Write(buf); err != nil { + return errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + if _, err := io.ReadFull(conn, buf[:4]); err != nil { + return errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + failure := "unknown error" + if int(buf[1]) < len(proxy_socks5Errors) { + failure = proxy_socks5Errors[buf[1]] + } + + if len(failure) > 0 { + return errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure) + } + + bytesToDiscard := 0 + switch buf[3] { + case proxy_socks5IP4: + bytesToDiscard = net.IPv4len + case proxy_socks5IP6: + bytesToDiscard = net.IPv6len + case proxy_socks5Domain: + _, err := io.ReadFull(conn, buf[:1]) + if err != nil { + return errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + bytesToDiscard = int(buf[0]) + default: + return errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr) + } + + if cap(buf) < bytesToDiscard { + buf = make([]byte, bytesToDiscard) + } else { + buf = buf[:bytesToDiscard] + } + if _, err := io.ReadFull(conn, buf); err != nil { + return errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + // Also need to discard the port number + if _, err := io.ReadFull(conn, buf[:2]); err != nil { + return errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error()) + } + + return nil +} diff --git a/vendor/github.com/graph-gophers/graphql-go/Gopkg.lock b/vendor/github.com/graph-gophers/graphql-go/Gopkg.lock new file mode 100644 index 000000000000..4574275c5d79 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/Gopkg.lock @@ -0,0 +1,25 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/opentracing/opentracing-go" + packages = [ + ".", + "ext", + "log" + ] + revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38" + version = "v1.0.2" + +[[projects]] + branch = "master" + name = "golang.org/x/net" + packages = ["context"] + revision = "f5dfe339be1d06f81b22525fe34671ee7d2c8904" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "f417062128566756a9360b1c13ada79bdeeb6bab1f53ee9147a3328d95c1653f" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/graph-gophers/graphql-go/Gopkg.toml b/vendor/github.com/graph-gophers/graphql-go/Gopkg.toml new file mode 100644 index 000000000000..62b936799851 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/Gopkg.toml @@ -0,0 +1,10 @@ +# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html +# for detailed Gopkg.toml documentation. + +[[constraint]] + name = "github.com/opentracing/opentracing-go" + version = "1.0.2" + +[prune] + go-tests = true + unused-packages = true diff --git a/vendor/github.com/graph-gophers/graphql-go/LICENSE b/vendor/github.com/graph-gophers/graphql-go/LICENSE new file mode 100644 index 000000000000..3907cecacf28 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2016 Richard Musiol. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/graph-gophers/graphql-go/README.md b/vendor/github.com/graph-gophers/graphql-go/README.md new file mode 100644 index 000000000000..ef4b4639b522 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/README.md @@ -0,0 +1,100 @@ +# graphql-go [![Sourcegraph](https://sourcegraph.com/github.com/graph-gophers/graphql-go/-/badge.svg)](https://sourcegraph.com/github.com/graph-gophers/graphql-go?badge) [![Build Status](https://semaphoreci.com/api/v1/graph-gophers/graphql-go/branches/master/badge.svg)](https://semaphoreci.com/graph-gophers/graphql-go) [![GoDoc](https://godoc.org/github.com/graph-gophers/graphql-go?status.svg)](https://godoc.org/github.com/graph-gophers/graphql-go) + +

    + +The goal of this project is to provide full support of the [GraphQL draft specification](https://facebook.github.io/graphql/draft) with a set of idiomatic, easy to use Go packages. + +While still under heavy development (`internal` APIs are almost certainly subject to change), this library is +safe for production use. + +## Features + +- minimal API +- support for `context.Context` +- support for the `OpenTracing` standard +- schema type-checking against resolvers +- resolvers are matched to the schema based on method sets (can resolve a GraphQL schema with a Go interface or Go struct). +- handles panics in resolvers +- parallel execution of resolvers + +## Roadmap + +We're trying out the GitHub Project feature to manage `graphql-go`'s [development roadmap](https://github.com/graph-gophers/graphql-go/projects/1). +Feedback is welcome and appreciated. + +## (Some) Documentation + +### Basic Sample + +```go +package main + +import ( + "log" + "net/http" + + graphql "github.com/graph-gophers/graphql-go" + "github.com/graph-gophers/graphql-go/relay" +) + +type query struct{} + +func (_ *query) Hello() string { return "Hello, world!" } + +func main() { + s := ` + schema { + query: Query + } + type Query { + hello: String! + } + ` + schema := graphql.MustParseSchema(s, &query{}) + http.Handle("/query", &relay.Handler{Schema: schema}) + log.Fatal(http.ListenAndServe(":8080", nil)) +} +``` + +To test: +```sh +$ curl -XPOST -d '{"query": "{ hello }"}' localhost:8080/query +``` + +### Resolvers + +A resolver must have one method for each field of the GraphQL type it resolves. The method name has to be [exported](https://golang.org/ref/spec#Exported_identifiers) and match the field's name in a non-case-sensitive way. + +The method has up to two arguments: + +- Optional `context.Context` argument. +- Mandatory `*struct { ... }` argument if the corresponding GraphQL field has arguments. The names of the struct fields have to be [exported](https://golang.org/ref/spec#Exported_identifiers) and have to match the names of the GraphQL arguments in a non-case-sensitive way. + +The method has up to two results: + +- The GraphQL field's value as determined by the resolver. +- Optional `error` result. + +Example for a simple resolver method: + +```go +func (r *helloWorldResolver) Hello() string { + return "Hello world!" +} +``` + +The following signature is also allowed: + +```go +func (r *helloWorldResolver) Hello(ctx context.Context) (string, error) { + return "Hello world!", nil +} +``` + +### Community Examples + +[tonyghita/graphql-go-example](https://github.com/tonyghita/graphql-go-example) - A more "productionized" version of the Star Wars API example given in this repository. + +[deltaskelta/graphql-go-pets-example](https://github.com/deltaskelta/graphql-go-pets-example) - graphql-go resolving against a sqlite database + +[OscarYuen/go-graphql-starter](https://github.com/OscarYuen/go-graphql-starter) - a starter application integrated with dataloader, psql and basic authentication diff --git a/vendor/github.com/graph-gophers/graphql-go/errors/errors.go b/vendor/github.com/graph-gophers/graphql-go/errors/errors.go new file mode 100644 index 000000000000..fdfa62024db1 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/errors/errors.go @@ -0,0 +1,41 @@ +package errors + +import ( + "fmt" +) + +type QueryError struct { + Message string `json:"message"` + Locations []Location `json:"locations,omitempty"` + Path []interface{} `json:"path,omitempty"` + Rule string `json:"-"` + ResolverError error `json:"-"` +} + +type Location struct { + Line int `json:"line"` + Column int `json:"column"` +} + +func (a Location) Before(b Location) bool { + return a.Line < b.Line || (a.Line == b.Line && a.Column < b.Column) +} + +func Errorf(format string, a ...interface{}) *QueryError { + return &QueryError{ + Message: fmt.Sprintf(format, a...), + } +} + +func (err *QueryError) Error() string { + if err == nil { + return "" + } + str := fmt.Sprintf("graphql: %s", err.Message) + for _, loc := range err.Locations { + str += fmt.Sprintf(" (line %d, column %d)", loc.Line, loc.Column) + } + return str +} + +var _ error = &QueryError{} diff --git a/vendor/github.com/graph-gophers/graphql-go/graphql.go b/vendor/github.com/graph-gophers/graphql-go/graphql.go new file mode 100644 index 000000000000..06ffd4599749 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/graphql.go @@ -0,0 +1,205 @@ +package graphql + +import ( + "context" + "fmt" + + "encoding/json" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/exec" + "github.com/graph-gophers/graphql-go/internal/exec/resolvable" + "github.com/graph-gophers/graphql-go/internal/exec/selected" + "github.com/graph-gophers/graphql-go/internal/query" + "github.com/graph-gophers/graphql-go/internal/schema" + "github.com/graph-gophers/graphql-go/internal/validation" + "github.com/graph-gophers/graphql-go/introspection" + "github.com/graph-gophers/graphql-go/log" + "github.com/graph-gophers/graphql-go/trace" +) + +// ParseSchema parses a GraphQL schema and attaches the given root resolver. It returns an error if +// the Go type signature of the resolvers does not match the schema. If nil is passed as the +// resolver, then the schema can not be executed, but it may be inspected (e.g. with ToJSON). +func ParseSchema(schemaString string, resolver interface{}, opts ...SchemaOpt) (*Schema, error) { + s := &Schema{ + schema: schema.New(), + maxParallelism: 10, + tracer: trace.OpenTracingTracer{}, + validationTracer: trace.NoopValidationTracer{}, + logger: &log.DefaultLogger{}, + } + for _, opt := range opts { + opt(s) + } + + if err := s.schema.Parse(schemaString); err != nil { + return nil, err + } + + if resolver != nil { + r, err := resolvable.ApplyResolver(s.schema, resolver) + if err != nil { + return nil, err + } + s.res = r + } + + return s, nil +} + +// MustParseSchema calls ParseSchema and panics on error. +func MustParseSchema(schemaString string, resolver interface{}, opts ...SchemaOpt) *Schema { + s, err := ParseSchema(schemaString, resolver, opts...) + if err != nil { + panic(err) + } + return s +} + +// Schema represents a GraphQL schema with an optional resolver. +type Schema struct { + schema *schema.Schema + res *resolvable.Schema + + maxDepth int + maxParallelism int + tracer trace.Tracer + validationTracer trace.ValidationTracer + logger log.Logger +} + +// SchemaOpt is an option to pass to ParseSchema or MustParseSchema. +type SchemaOpt func(*Schema) + +// MaxDepth specifies the maximum field nesting depth in a query. The default is 0 which disables max depth checking. +func MaxDepth(n int) SchemaOpt { + return func(s *Schema) { + s.maxDepth = n + } +} + +// MaxParallelism specifies the maximum number of resolvers per request allowed to run in parallel. The default is 10. +func MaxParallelism(n int) SchemaOpt { + return func(s *Schema) { + s.maxParallelism = n + } +} + +// Tracer is used to trace queries and fields. It defaults to trace.OpenTracingTracer. +func Tracer(tracer trace.Tracer) SchemaOpt { + return func(s *Schema) { + s.tracer = tracer + } +} + +// ValidationTracer is used to trace validation errors. It defaults to trace.NoopValidationTracer. +func ValidationTracer(tracer trace.ValidationTracer) SchemaOpt { + return func(s *Schema) { + s.validationTracer = tracer + } +} + +// Logger is used to log panics during query execution. It defaults to exec.DefaultLogger. +func Logger(logger log.Logger) SchemaOpt { + return func(s *Schema) { + s.logger = logger + } +} + +// Response represents a typical response of a GraphQL server. It may be encoded to JSON directly or +// it may be further processed to a custom response type, for example to include custom error data. +// Errors are intentionally serialized first based on the advice in https://github.com/facebook/graphql/commit/7b40390d48680b15cb93e02d46ac5eb249689876#diff-757cea6edf0288677a9eea4cfc801d87R107 +type Response struct { + Errors []*errors.QueryError `json:"errors,omitempty"` + Data json.RawMessage `json:"data,omitempty"` + Extensions map[string]interface{} `json:"extensions,omitempty"` +} + +// Validate validates the given query with the schema. +func (s *Schema) Validate(queryString string) []*errors.QueryError { + doc, qErr := query.Parse(queryString) + if qErr != nil { + return []*errors.QueryError{qErr} + } + + return validation.Validate(s.schema, doc, s.maxDepth) +} + +// Exec executes the given query with the schema's resolver. It panics if the schema was created +// without a resolver. If the context get cancelled, no further resolvers will be called and a +// the context error will be returned as soon as possible (not immediately). +func (s *Schema) Exec(ctx context.Context, queryString string, operationName string, variables map[string]interface{}) *Response { + if s.res == nil { + panic("schema created without resolver, can not exec") + } + return s.exec(ctx, queryString, operationName, variables, s.res) +} + +func (s *Schema) exec(ctx context.Context, queryString string, operationName string, variables map[string]interface{}, res *resolvable.Schema) *Response { + doc, qErr := query.Parse(queryString) + if qErr != nil { + return &Response{Errors: []*errors.QueryError{qErr}} + } + + validationFinish := s.validationTracer.TraceValidation() + errs := validation.Validate(s.schema, doc, s.maxDepth) + validationFinish(errs) + if len(errs) != 0 { + return &Response{Errors: errs} + } + + op, err := getOperation(doc, operationName) + if err != nil { + return &Response{Errors: []*errors.QueryError{errors.Errorf("%s", err)}} + } + + r := &exec.Request{ + Request: selected.Request{ + Doc: doc, + Vars: variables, + Schema: s.schema, + }, + Limiter: make(chan struct{}, s.maxParallelism), + Tracer: s.tracer, + Logger: s.logger, + } + varTypes := make(map[string]*introspection.Type) + for _, v := range op.Vars { + t, err := common.ResolveType(v.Type, s.schema.Resolve) + if err != nil { + return &Response{Errors: []*errors.QueryError{err}} + } + varTypes[v.Name.Name] = introspection.WrapType(t) + } + traceCtx, finish := s.tracer.TraceQuery(ctx, queryString, operationName, variables, varTypes) + data, errs := r.Execute(traceCtx, res, op) + finish(errs) + + return &Response{ + Data: data, + Errors: errs, + } +} + +func getOperation(document *query.Document, operationName string) (*query.Operation, error) { + if len(document.Operations) == 0 { + return nil, fmt.Errorf("no operations in query document") + } + + if operationName == "" { + if len(document.Operations) > 1 { + return nil, fmt.Errorf("more than one operation in query document and no operation name given") + } + for _, op := range document.Operations { + return op, nil // return the one and only operation + } + } + + op := document.Operations.Get(operationName) + if op == nil { + return nil, fmt.Errorf("no operation with name %q", operationName) + } + return op, nil +} diff --git a/vendor/github.com/graph-gophers/graphql-go/id.go b/vendor/github.com/graph-gophers/graphql-go/id.go new file mode 100644 index 000000000000..52771c413b03 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/id.go @@ -0,0 +1,30 @@ +package graphql + +import ( + "errors" + "strconv" +) + +// ID represents GraphQL's "ID" scalar type. A custom type may be used instead. +type ID string + +func (ID) ImplementsGraphQLType(name string) bool { + return name == "ID" +} + +func (id *ID) UnmarshalGraphQL(input interface{}) error { + var err error + switch input := input.(type) { + case string: + *id = ID(input) + case int32: + *id = ID(strconv.Itoa(int(input))) + default: + err = errors.New("wrong type") + } + return err +} + +func (id ID) MarshalJSON() ([]byte, error) { + return strconv.AppendQuote(nil, string(id)), nil +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go b/vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go new file mode 100644 index 000000000000..62dca47f8166 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go @@ -0,0 +1,32 @@ +package common + +type Directive struct { + Name Ident + Args ArgumentList +} + +func ParseDirectives(l *Lexer) DirectiveList { + var directives DirectiveList + for l.Peek() == '@' { + l.ConsumeToken('@') + d := &Directive{} + d.Name = l.ConsumeIdentWithLoc() + d.Name.Loc.Column-- + if l.Peek() == '(' { + d.Args = ParseArguments(l) + } + directives = append(directives, d) + } + return directives +} + +type DirectiveList []*Directive + +func (l DirectiveList) Get(name string) *Directive { + for _, d := range l { + if d.Name.Name == name { + return d + } + } + return nil +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go b/vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go new file mode 100644 index 000000000000..a38fcbaf7068 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go @@ -0,0 +1,161 @@ +package common + +import ( + "fmt" + "strings" + "text/scanner" + + "github.com/graph-gophers/graphql-go/errors" +) + +type syntaxError string + +type Lexer struct { + sc *scanner.Scanner + next rune + descComment string +} + +type Ident struct { + Name string + Loc errors.Location +} + +func NewLexer(s string) *Lexer { + sc := &scanner.Scanner{ + Mode: scanner.ScanIdents | scanner.ScanInts | scanner.ScanFloats | scanner.ScanStrings, + } + sc.Init(strings.NewReader(s)) + + return &Lexer{sc: sc} +} + +func (l *Lexer) CatchSyntaxError(f func()) (errRes *errors.QueryError) { + defer func() { + if err := recover(); err != nil { + if err, ok := err.(syntaxError); ok { + errRes = errors.Errorf("syntax error: %s", err) + errRes.Locations = []errors.Location{l.Location()} + return + } + panic(err) + } + }() + + f() + return +} + +func (l *Lexer) Peek() rune { + return l.next +} + +// Consume whitespace and tokens equivalent to whitespace (e.g. commas and comments). +// +// Consumed comment characters will build the description for the next type or field encountered. +// The description is available from `DescComment()`, and will be reset every time `Consume()` is +// executed. +func (l *Lexer) Consume() { + l.descComment = "" + for { + l.next = l.sc.Scan() + + if l.next == ',' { + // Similar to white space and line terminators, commas (',') are used to improve the + // legibility of source text and separate lexical tokens but are otherwise syntactically and + // semantically insignificant within GraphQL documents. + // + // http://facebook.github.io/graphql/draft/#sec-Insignificant-Commas + continue + } + + if l.next == '#' { + // GraphQL source documents may contain single-line comments, starting with the '#' marker. + // + // A comment can contain any Unicode code point except `LineTerminator` so a comment always + // consists of all code points starting with the '#' character up to but not including the + // line terminator. + + l.consumeComment() + continue + } + + break + } +} + +func (l *Lexer) ConsumeIdent() string { + name := l.sc.TokenText() + l.ConsumeToken(scanner.Ident) + return name +} + +func (l *Lexer) ConsumeIdentWithLoc() Ident { + loc := l.Location() + name := l.sc.TokenText() + l.ConsumeToken(scanner.Ident) + return Ident{name, loc} +} + +func (l *Lexer) ConsumeKeyword(keyword string) { + if l.next != scanner.Ident || l.sc.TokenText() != keyword { + l.SyntaxError(fmt.Sprintf("unexpected %q, expecting %q", l.sc.TokenText(), keyword)) + } + l.Consume() +} + +func (l *Lexer) ConsumeLiteral() *BasicLit { + lit := &BasicLit{Type: l.next, Text: l.sc.TokenText()} + l.Consume() + return lit +} + +func (l *Lexer) ConsumeToken(expected rune) { + if l.next != expected { + l.SyntaxError(fmt.Sprintf("unexpected %q, expecting %s", l.sc.TokenText(), scanner.TokenString(expected))) + } + l.Consume() +} + +func (l *Lexer) DescComment() string { + return l.descComment +} + +func (l *Lexer) SyntaxError(message string) { + panic(syntaxError(message)) +} + +func (l *Lexer) Location() errors.Location { + return errors.Location{ + Line: l.sc.Line, + Column: l.sc.Column, + } +} + +// consumeComment consumes all characters from `#` to the first encountered line terminator. +// The characters are appended to `l.descComment`. +func (l *Lexer) consumeComment() { + if l.next != '#' { + return + } + + // TODO: count and trim whitespace so we can dedent any following lines. + if l.sc.Peek() == ' ' { + l.sc.Next() + } + + if l.descComment != "" { + // TODO: use a bytes.Buffer or strings.Builder instead of this. + l.descComment += "\n" + } + + for { + next := l.sc.Next() + if next == '\r' || next == '\n' || next == scanner.EOF { + break + } + + // TODO: use a bytes.Buffer or strings.Build instead of this. + l.descComment += string(next) + } +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go b/vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go new file mode 100644 index 000000000000..e7bbe2638e9f --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go @@ -0,0 +1,206 @@ +package common + +import ( + "strconv" + "strings" + "text/scanner" + + "github.com/graph-gophers/graphql-go/errors" +) + +type Literal interface { + Value(vars map[string]interface{}) interface{} + String() string + Location() errors.Location +} + +type BasicLit struct { + Type rune + Text string + Loc errors.Location +} + +func (lit *BasicLit) Value(vars map[string]interface{}) interface{} { + switch lit.Type { + case scanner.Int: + value, err := strconv.ParseInt(lit.Text, 10, 32) + if err != nil { + panic(err) + } + return int32(value) + + case scanner.Float: + value, err := strconv.ParseFloat(lit.Text, 64) + if err != nil { + panic(err) + } + return value + + case scanner.String: + value, err := strconv.Unquote(lit.Text) + if err != nil { + panic(err) + } + return value + + case scanner.Ident: + switch lit.Text { + case "true": + return true + case "false": + return false + default: + return lit.Text + } + + default: + panic("invalid literal") + } +} + +func (lit *BasicLit) String() string { + return lit.Text +} + +func (lit *BasicLit) Location() errors.Location { + return lit.Loc +} + +type ListLit struct { + Entries []Literal + Loc errors.Location +} + +func (lit *ListLit) Value(vars map[string]interface{}) interface{} { + entries := make([]interface{}, len(lit.Entries)) + for i, entry := range lit.Entries { + entries[i] = entry.Value(vars) + } + return entries +} + +func (lit *ListLit) String() string { + entries := make([]string, len(lit.Entries)) + for i, entry := range lit.Entries { + entries[i] = entry.String() + } + return "[" + strings.Join(entries, ", ") + "]" +} + +func (lit *ListLit) Location() errors.Location { + return lit.Loc +} + +type ObjectLit struct { + Fields []*ObjectLitField + Loc errors.Location +} + +type ObjectLitField struct { + Name Ident + Value Literal +} + +func (lit *ObjectLit) Value(vars map[string]interface{}) interface{} { + fields := make(map[string]interface{}, len(lit.Fields)) + for _, f := range lit.Fields { + fields[f.Name.Name] = f.Value.Value(vars) + } + return fields +} + +func (lit *ObjectLit) String() string { + entries := make([]string, 0, len(lit.Fields)) + for _, f := range lit.Fields { + entries = append(entries, f.Name.Name+": "+f.Value.String()) + } + return "{" + strings.Join(entries, ", ") + "}" +} + +func (lit *ObjectLit) Location() errors.Location { + return lit.Loc +} + +type NullLit struct { + Loc errors.Location +} + +func (lit *NullLit) Value(vars map[string]interface{}) interface{} { + return nil +} + +func (lit *NullLit) String() string { + return "null" +} + +func (lit *NullLit) Location() errors.Location { + return lit.Loc +} + +type Variable struct { + Name string + Loc errors.Location +} + +func (v Variable) Value(vars map[string]interface{}) interface{} { + return vars[v.Name] +} + +func (v Variable) String() string { + return "$" + v.Name +} + +func (v *Variable) Location() errors.Location { + return v.Loc +} + +func ParseLiteral(l *Lexer, constOnly bool) Literal { + loc := l.Location() + switch l.Peek() { + case '$': + if constOnly { + l.SyntaxError("variable not allowed") + panic("unreachable") + } + l.ConsumeToken('$') + return &Variable{l.ConsumeIdent(), loc} + + case scanner.Int, scanner.Float, scanner.String, scanner.Ident: + lit := l.ConsumeLiteral() + if lit.Type == scanner.Ident && lit.Text == "null" { + return &NullLit{loc} + } + lit.Loc = loc + return lit + case '-': + l.ConsumeToken('-') + lit := l.ConsumeLiteral() + lit.Text = "-" + lit.Text + lit.Loc = loc + return lit + case '[': + l.ConsumeToken('[') + var list []Literal + for l.Peek() != ']' { + list = append(list, ParseLiteral(l, constOnly)) + } + l.ConsumeToken(']') + return &ListLit{list, loc} + + case '{': + l.ConsumeToken('{') + var fields []*ObjectLitField + for l.Peek() != '}' { + name := l.ConsumeIdentWithLoc() + l.ConsumeToken(':') + value := ParseLiteral(l, constOnly) + fields = append(fields, &ObjectLitField{name, value}) + } + l.ConsumeToken('}') + return &ObjectLit{fields, loc} + + default: + l.SyntaxError("invalid value") + panic("unreachable") + } +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/common/types.go b/vendor/github.com/graph-gophers/graphql-go/internal/common/types.go new file mode 100644 index 000000000000..a20ca309069c --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/common/types.go @@ -0,0 +1,80 @@ +package common + +import ( + "github.com/graph-gophers/graphql-go/errors" +) + +type Type interface { + Kind() string + String() string +} + +type List struct { + OfType Type +} + +type NonNull struct { + OfType Type +} + +type TypeName struct { + Ident +} + +func (*List) Kind() string { return "LIST" } +func (*NonNull) Kind() string { return "NON_NULL" } +func (*TypeName) Kind() string { panic("TypeName needs to be resolved to actual type") } + +func (t *List) String() string { return "[" + t.OfType.String() + "]" } +func (t *NonNull) String() string { return t.OfType.String() + "!" } +func (*TypeName) String() string { panic("TypeName needs to be resolved to actual type") } + +func ParseType(l *Lexer) Type { + t := parseNullType(l) + if l.Peek() == '!' { + l.ConsumeToken('!') + return &NonNull{OfType: t} + } + return t +} + +func parseNullType(l *Lexer) Type { + if l.Peek() == '[' { + l.ConsumeToken('[') + ofType := ParseType(l) + l.ConsumeToken(']') + return &List{OfType: ofType} + } + + return &TypeName{Ident: l.ConsumeIdentWithLoc()} +} + +type Resolver func(name string) Type + +func ResolveType(t Type, resolver Resolver) (Type, *errors.QueryError) { + switch t := t.(type) { + case *List: + ofType, err := ResolveType(t.OfType, resolver) + if err != nil { + return nil, err + } + return &List{OfType: ofType}, nil + case *NonNull: + ofType, err := ResolveType(t.OfType, resolver) + if err != nil { + return nil, err + } + return &NonNull{OfType: ofType}, nil + case *TypeName: + refT := resolver(t.Name) + if refT == nil { + err := errors.Errorf("Unknown type %q.", t.Name) + err.Rule = "KnownTypeNames" + err.Locations = []errors.Location{t.Loc} + return nil, err + } + return refT, nil + default: + return t, nil + } +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/common/values.go b/vendor/github.com/graph-gophers/graphql-go/internal/common/values.go new file mode 100644 index 000000000000..fcd456abfa5d --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/common/values.go @@ -0,0 +1,78 @@ +package common + +import ( + "github.com/graph-gophers/graphql-go/errors" +) + +// http://facebook.github.io/graphql/draft/#InputValueDefinition +type InputValue struct { + Name Ident + Type Type + Default Literal + Desc string + Loc errors.Location + TypeLoc errors.Location +} + +type InputValueList []*InputValue + +func (l InputValueList) Get(name string) *InputValue { + for _, v := range l { + if v.Name.Name == name { + return v + } + } + return nil +} + +func ParseInputValue(l *Lexer) *InputValue { + p := &InputValue{} + p.Loc = l.Location() + p.Desc = l.DescComment() + p.Name = l.ConsumeIdentWithLoc() + l.ConsumeToken(':') + p.TypeLoc = l.Location() + p.Type = ParseType(l) + if l.Peek() == '=' { + l.ConsumeToken('=') + p.Default = ParseLiteral(l, true) + } + return p +} + +type Argument struct { + Name Ident + Value Literal +} + +type ArgumentList []Argument + +func (l ArgumentList) Get(name string) (Literal, bool) { + for _, arg := range l { + if arg.Name.Name == name { + return arg.Value, true + } + } + return nil, false +} + +func (l ArgumentList) MustGet(name string) Literal { + value, ok := l.Get(name) + if !ok { + panic("argument not found") + } + return value +} + +func ParseArguments(l *Lexer) ArgumentList { + var args ArgumentList + l.ConsumeToken('(') + for l.Peek() != ')' { + name := l.ConsumeIdentWithLoc() + l.ConsumeToken(':') + value := ParseLiteral(l, false) + args = append(args, Argument{Name: name, Value: value}) + } + l.ConsumeToken(')') + return args +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go b/vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go new file mode 100644 index 000000000000..e6cca7448d70 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go @@ -0,0 +1,305 @@ +package exec + +import ( + "bytes" + "context" + "encoding/json" + "reflect" + "sync" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/exec/resolvable" + "github.com/graph-gophers/graphql-go/internal/exec/selected" + "github.com/graph-gophers/graphql-go/internal/query" + "github.com/graph-gophers/graphql-go/internal/schema" + "github.com/graph-gophers/graphql-go/log" + "github.com/graph-gophers/graphql-go/trace" +) + +type Request struct { + selected.Request + Limiter chan struct{} + Tracer trace.Tracer + Logger log.Logger +} + +func (r *Request) handlePanic(ctx context.Context) { + if value := recover(); value != nil { + r.Logger.LogPanic(ctx, value) + r.AddError(makePanicError(value)) + } +} + +func makePanicError(value interface{}) *errors.QueryError { + return errors.Errorf("graphql: panic occurred: %v", value) +} + +func (r *Request) Execute(ctx context.Context, s *resolvable.Schema, op *query.Operation) ([]byte, []*errors.QueryError) { + var out bytes.Buffer + func() { + defer r.handlePanic(ctx) + sels := selected.ApplyOperation(&r.Request, s, op) + r.execSelections(ctx, sels, nil, s.Resolver, &out, op.Type == query.Mutation) + }() + + if err := ctx.Err(); err != nil { + return nil, []*errors.QueryError{errors.Errorf("%s", err)} + } + + return out.Bytes(), r.Errs +} + +type fieldToExec struct { + field *selected.SchemaField + sels []selected.Selection + resolver reflect.Value + out *bytes.Buffer +} + +func (r *Request) execSelections(ctx context.Context, sels []selected.Selection, path *pathSegment, resolver reflect.Value, out *bytes.Buffer, serially bool) { + async := !serially && selected.HasAsyncSel(sels) + + var fields []*fieldToExec + collectFieldsToResolve(sels, resolver, &fields, make(map[string]*fieldToExec)) + + if async { + var wg sync.WaitGroup + wg.Add(len(fields)) + for _, f := range fields { + go func(f *fieldToExec) { + defer wg.Done() + defer r.handlePanic(ctx) + f.out = new(bytes.Buffer) + execFieldSelection(ctx, r, f, &pathSegment{path, f.field.Alias}, true) + }(f) + } + wg.Wait() + } + + out.WriteByte('{') + for i, f := range fields { + if i > 0 { + out.WriteByte(',') + } + out.WriteByte('"') + out.WriteString(f.field.Alias) + out.WriteByte('"') + out.WriteByte(':') + if async { + out.Write(f.out.Bytes()) + continue + } + f.out = out + execFieldSelection(ctx, r, f, &pathSegment{path, f.field.Alias}, false) + } + out.WriteByte('}') +} + +func collectFieldsToResolve(sels []selected.Selection, resolver reflect.Value, fields *[]*fieldToExec, fieldByAlias map[string]*fieldToExec) { + for _, sel := range sels { + switch sel := sel.(type) { + case *selected.SchemaField: + field, ok := fieldByAlias[sel.Alias] + if !ok { // validation already checked for conflict (TODO) + field = &fieldToExec{field: sel, resolver: resolver} + fieldByAlias[sel.Alias] = field + *fields = append(*fields, field) + } + field.sels = append(field.sels, sel.Sels...) + + case *selected.TypenameField: + sf := &selected.SchemaField{ + Field: resolvable.MetaFieldTypename, + Alias: sel.Alias, + FixedResult: reflect.ValueOf(typeOf(sel, resolver)), + } + *fields = append(*fields, &fieldToExec{field: sf, resolver: resolver}) + + case *selected.TypeAssertion: + out := resolver.Method(sel.MethodIndex).Call(nil) + if !out[1].Bool() { + continue + } + collectFieldsToResolve(sel.Sels, out[0], fields, fieldByAlias) + + default: + panic("unreachable") + } + } +} + +func typeOf(tf *selected.TypenameField, resolver reflect.Value) string { + if len(tf.TypeAssertions) == 0 { + return tf.Name + } + for name, a := range tf.TypeAssertions { + out := resolver.Method(a.MethodIndex).Call(nil) + if out[1].Bool() { + return name + } + } + return "" +} + +func execFieldSelection(ctx context.Context, r *Request, f *fieldToExec, path *pathSegment, applyLimiter bool) { + if applyLimiter { + r.Limiter <- struct{}{} + } + + var result reflect.Value + var err *errors.QueryError + + traceCtx, finish := r.Tracer.TraceField(ctx, f.field.TraceLabel, f.field.TypeName, f.field.Name, !f.field.Async, f.field.Args) + defer func() { + finish(err) + }() + + err = func() (err *errors.QueryError) { + defer func() { + if panicValue := recover(); panicValue != nil { + r.Logger.LogPanic(ctx, panicValue) + err = makePanicError(panicValue) + err.Path = path.toSlice() + } + }() + + if f.field.FixedResult.IsValid() { + result = f.field.FixedResult + return nil + } + + if err := traceCtx.Err(); err != nil { + return errors.Errorf("%s", err) // don't execute any more resolvers if context got cancelled + } + + var in []reflect.Value + if f.field.HasContext { + in = append(in, reflect.ValueOf(traceCtx)) + } + if f.field.ArgsPacker != nil { + in = append(in, f.field.PackedArgs) + } + callOut := f.resolver.Method(f.field.MethodIndex).Call(in) + result = callOut[0] + if f.field.HasError && !callOut[1].IsNil() { + resolverErr := callOut[1].Interface().(error) + err := errors.Errorf("%s", resolverErr) + err.Path = path.toSlice() + err.ResolverError = resolverErr + return err + } + return nil + }() + + if applyLimiter { + <-r.Limiter + } + + if err != nil { + r.AddError(err) + f.out.WriteString("null") // TODO handle non-nil + return + } + + r.execSelectionSet(traceCtx, f.sels, f.field.Type, path, result, f.out) +} + +func (r *Request) execSelectionSet(ctx context.Context, sels []selected.Selection, typ common.Type, path *pathSegment, resolver reflect.Value, out *bytes.Buffer) { + t, nonNull := unwrapNonNull(typ) + switch t := t.(type) { + case *schema.Object, *schema.Interface, *schema.Union: + // a reflect.Value of a nil interface will show up as an Invalid value + if resolver.Kind() == reflect.Invalid || ((resolver.Kind() == reflect.Ptr || resolver.Kind() == reflect.Interface) && resolver.IsNil()) { + if nonNull { + panic(errors.Errorf("got nil for non-null %q", t)) + } + out.WriteString("null") + return + } + + r.execSelections(ctx, sels, path, resolver, out, false) + return + } + + if !nonNull { + if resolver.IsNil() { + out.WriteString("null") + return + } + resolver = resolver.Elem() + } + + switch t := t.(type) { + case *common.List: + l := resolver.Len() + + if selected.HasAsyncSel(sels) { + var wg sync.WaitGroup + wg.Add(l) + entryouts := make([]bytes.Buffer, l) + for i := 0; i < l; i++ { + go func(i int) { + defer wg.Done() + defer r.handlePanic(ctx) + r.execSelectionSet(ctx, sels, t.OfType, &pathSegment{path, i}, resolver.Index(i), &entryouts[i]) + }(i) + } + wg.Wait() + + out.WriteByte('[') + for i, entryout := range entryouts { + if i > 0 { + out.WriteByte(',') + } + out.Write(entryout.Bytes()) + } + out.WriteByte(']') + return + } + + out.WriteByte('[') + for i := 0; i < l; i++ { + if i > 0 { + out.WriteByte(',') + } + r.execSelectionSet(ctx, sels, t.OfType, &pathSegment{path, i}, resolver.Index(i), out) + } + out.WriteByte(']') + + case *schema.Scalar: + v := resolver.Interface() + data, err := json.Marshal(v) + if err != nil { + panic(errors.Errorf("could not marshal %v: %s", v, err)) + } + out.Write(data) + + case *schema.Enum: + out.WriteByte('"') + out.WriteString(resolver.String()) + out.WriteByte('"') + + default: + panic("unreachable") + } +} + +func unwrapNonNull(t common.Type) (common.Type, bool) { + if nn, ok := t.(*common.NonNull); ok { + return nn.OfType, true + } + return t, false +} + +type pathSegment struct { + parent *pathSegment + value interface{} +} + +func (p *pathSegment) toSlice() []interface{} { + if p == nil { + return nil + } + return append(p.parent.toSlice(), p.value) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go b/vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go new file mode 100644 index 000000000000..22706bcd1f1e --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go @@ -0,0 +1,371 @@ +package packer + +import ( + "fmt" + "math" + "reflect" + "strings" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/schema" +) + +type packer interface { + Pack(value interface{}) (reflect.Value, error) +} + +type Builder struct { + packerMap map[typePair]*packerMapEntry + structPackers []*StructPacker +} + +type typePair struct { + graphQLType common.Type + resolverType reflect.Type +} + +type packerMapEntry struct { + packer packer + targets []*packer +} + +func NewBuilder() *Builder { + return &Builder{ + packerMap: make(map[typePair]*packerMapEntry), + } +} + +func (b *Builder) Finish() error { + for _, entry := range b.packerMap { + for _, target := range entry.targets { + *target = entry.packer + } + } + + for _, p := range b.structPackers { + p.defaultStruct = reflect.New(p.structType).Elem() + for _, f := range p.fields { + if defaultVal := f.field.Default; defaultVal != nil { + v, err := f.fieldPacker.Pack(defaultVal.Value(nil)) + if err != nil { + return err + } + p.defaultStruct.FieldByIndex(f.fieldIndex).Set(v) + } + } + } + + return nil +} + +func (b *Builder) assignPacker(target *packer, schemaType common.Type, reflectType reflect.Type) error { + k := typePair{schemaType, reflectType} + ref, ok := b.packerMap[k] + if !ok { + ref = &packerMapEntry{} + b.packerMap[k] = ref + var err error + ref.packer, err = b.makePacker(schemaType, reflectType) + if err != nil { + return err + } + } + ref.targets = append(ref.targets, target) + return nil +} + +func (b *Builder) makePacker(schemaType common.Type, reflectType reflect.Type) (packer, error) { + t, nonNull := unwrapNonNull(schemaType) + if !nonNull { + if reflectType.Kind() != reflect.Ptr { + return nil, fmt.Errorf("%s is not a pointer", reflectType) + } + elemType := reflectType.Elem() + addPtr := true + if _, ok := t.(*schema.InputObject); ok { + elemType = reflectType // keep pointer for input objects + addPtr = false + } + elem, err := b.makeNonNullPacker(t, elemType) + if err != nil { + return nil, err + } + return &nullPacker{ + elemPacker: elem, + valueType: reflectType, + addPtr: addPtr, + }, nil + } + + return b.makeNonNullPacker(t, reflectType) +} + +func (b *Builder) makeNonNullPacker(schemaType common.Type, reflectType reflect.Type) (packer, error) { + if u, ok := reflect.New(reflectType).Interface().(Unmarshaler); ok { + if !u.ImplementsGraphQLType(schemaType.String()) { + return nil, fmt.Errorf("can not unmarshal %s into %s", schemaType, reflectType) + } + return &unmarshalerPacker{ + ValueType: reflectType, + }, nil + } + + switch t := schemaType.(type) { + case *schema.Scalar: + return &ValuePacker{ + ValueType: reflectType, + }, nil + + case *schema.Enum: + if reflectType.Kind() != reflect.String { + return nil, fmt.Errorf("wrong type, expected %s", reflect.String) + } + return &ValuePacker{ + ValueType: reflectType, + }, nil + + case *schema.InputObject: + e, err := b.MakeStructPacker(t.Values, reflectType) + if err != nil { + return nil, err + } + return e, nil + + case *common.List: + if reflectType.Kind() != reflect.Slice { + return nil, fmt.Errorf("expected slice, got %s", reflectType) + } + p := &listPacker{ + sliceType: reflectType, + } + if err := b.assignPacker(&p.elem, t.OfType, reflectType.Elem()); err != nil { + return nil, err + } + return p, nil + + case *schema.Object, *schema.Interface, *schema.Union: + return nil, fmt.Errorf("type of kind %s can not be used as input", t.Kind()) + + default: + panic("unreachable") + } +} + +func (b *Builder) MakeStructPacker(values common.InputValueList, typ reflect.Type) (*StructPacker, error) { + structType := typ + usePtr := false + if typ.Kind() == reflect.Ptr { + structType = typ.Elem() + usePtr = true + } + if structType.Kind() != reflect.Struct { + return nil, fmt.Errorf("expected struct or pointer to struct, got %s", typ) + } + + var fields []*structPackerField + for _, v := range values { + fe := &structPackerField{field: v} + fx := func(n string) bool { + return strings.EqualFold(stripUnderscore(n), stripUnderscore(v.Name.Name)) + } + + sf, ok := structType.FieldByNameFunc(fx) + if !ok { + return nil, fmt.Errorf("missing argument %q", v.Name) + } + if sf.PkgPath != "" { + return nil, fmt.Errorf("field %q must be exported", sf.Name) + } + fe.fieldIndex = sf.Index + + ft := v.Type + if v.Default != nil { + ft, _ = unwrapNonNull(ft) + ft = &common.NonNull{OfType: ft} + } + + if err := b.assignPacker(&fe.fieldPacker, ft, sf.Type); err != nil { + return nil, fmt.Errorf("field %q: %s", sf.Name, err) + } + + fields = append(fields, fe) + } + + p := &StructPacker{ + structType: structType, + usePtr: usePtr, + fields: fields, + } + b.structPackers = append(b.structPackers, p) + return p, nil +} + +type StructPacker struct { + structType reflect.Type + usePtr bool + defaultStruct reflect.Value + fields []*structPackerField +} + +type structPackerField struct { + field *common.InputValue + fieldIndex []int + fieldPacker packer +} + +func (p *StructPacker) Pack(value interface{}) (reflect.Value, error) { + if value == nil { + return reflect.Value{}, errors.Errorf("got null for non-null") + } + + values := value.(map[string]interface{}) + v := reflect.New(p.structType) + v.Elem().Set(p.defaultStruct) + for _, f := range p.fields { + if value, ok := values[f.field.Name.Name]; ok { + packed, err := f.fieldPacker.Pack(value) + if err != nil { + return reflect.Value{}, err + } + v.Elem().FieldByIndex(f.fieldIndex).Set(packed) + } + } + if !p.usePtr { + return v.Elem(), nil + } + return v, nil +} + +type listPacker struct { + sliceType reflect.Type + elem packer +} + +func (e *listPacker) Pack(value interface{}) (reflect.Value, error) { + list, ok := value.([]interface{}) + if !ok { + list = []interface{}{value} + } + + v := reflect.MakeSlice(e.sliceType, len(list), len(list)) + for i := range list { + packed, err := e.elem.Pack(list[i]) + if err != nil { + return reflect.Value{}, err + } + v.Index(i).Set(packed) + } + return v, nil +} + +type nullPacker struct { + elemPacker packer + valueType reflect.Type + addPtr bool +} + +func (p *nullPacker) Pack(value interface{}) (reflect.Value, error) { + if value == nil { + return reflect.Zero(p.valueType), nil + } + + v, err := p.elemPacker.Pack(value) + if err != nil { + return reflect.Value{}, err + } + + if p.addPtr { + ptr := reflect.New(p.valueType.Elem()) + ptr.Elem().Set(v) + return ptr, nil + } + + return v, nil +} + +type ValuePacker struct { + ValueType reflect.Type +} + +func (p *ValuePacker) Pack(value interface{}) (reflect.Value, error) { + if value == nil { + return reflect.Value{}, errors.Errorf("got null for non-null") + } + + coerced, err := unmarshalInput(p.ValueType, value) + if err != nil { + return reflect.Value{}, fmt.Errorf("could not unmarshal %#v (%T) into %s: %s", value, value, p.ValueType, err) + } + return reflect.ValueOf(coerced), nil +} + +type unmarshalerPacker struct { + ValueType reflect.Type +} + +func (p *unmarshalerPacker) Pack(value interface{}) (reflect.Value, error) { + if value == nil { + return reflect.Value{}, errors.Errorf("got null for non-null") + } + + v := reflect.New(p.ValueType) + if err := v.Interface().(Unmarshaler).UnmarshalGraphQL(value); err != nil { + return reflect.Value{}, err + } + return v.Elem(), nil +} + +type Unmarshaler interface { + ImplementsGraphQLType(name string) bool + UnmarshalGraphQL(input interface{}) error +} + +func unmarshalInput(typ reflect.Type, input interface{}) (interface{}, error) { + if reflect.TypeOf(input) == typ { + return input, nil + } + + switch typ.Kind() { + case reflect.Int32: + switch input := input.(type) { + case int: + if input < math.MinInt32 || input > math.MaxInt32 { + return nil, fmt.Errorf("not a 32-bit integer") + } + return int32(input), nil + case float64: + coerced := int32(input) + if input < math.MinInt32 || input > math.MaxInt32 || float64(coerced) != input { + return nil, fmt.Errorf("not a 32-bit integer") + } + return coerced, nil + } + + case reflect.Float64: + switch input := input.(type) { + case int32: + return float64(input), nil + case int: + return float64(input), nil + } + + case reflect.String: + if reflect.TypeOf(input).ConvertibleTo(typ) { + return reflect.ValueOf(input).Convert(typ).Interface(), nil + } + } + + return nil, fmt.Errorf("incompatible type") +} + +func unwrapNonNull(t common.Type) (common.Type, bool) { + if nn, ok := t.(*common.NonNull); ok { + return nn.OfType, true + } + return t, false +} + +func stripUnderscore(s string) string { + return strings.Replace(s, "_", "", -1) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go b/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go new file mode 100644 index 000000000000..826c8234841b --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go @@ -0,0 +1,58 @@ +package resolvable + +import ( + "fmt" + "reflect" + + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/schema" + "github.com/graph-gophers/graphql-go/introspection" +) + +var MetaSchema *Object +var MetaType *Object + +func init() { + var err error + b := newBuilder(schema.Meta) + + metaSchema := schema.Meta.Types["__Schema"].(*schema.Object) + MetaSchema, err = b.makeObjectExec(metaSchema.Name, metaSchema.Fields, nil, false, reflect.TypeOf(&introspection.Schema{})) + if err != nil { + panic(err) + } + + metaType := schema.Meta.Types["__Type"].(*schema.Object) + MetaType, err = b.makeObjectExec(metaType.Name, metaType.Fields, nil, false, reflect.TypeOf(&introspection.Type{})) + if err != nil { + panic(err) + } + + if err := b.finish(); err != nil { + panic(err) + } +} + +var MetaFieldTypename = Field{ + Field: schema.Field{ + Name: "__typename", + Type: &common.NonNull{OfType: schema.Meta.Types["String"]}, + }, + TraceLabel: fmt.Sprintf("GraphQL field: __typename"), +} + +var MetaFieldSchema = Field{ + Field: schema.Field{ + Name: "__schema", + Type: schema.Meta.Types["__Schema"], + }, + TraceLabel: fmt.Sprintf("GraphQL field: __schema"), +} + +var MetaFieldType = Field{ + Field: schema.Field{ + Name: "__type", + Type: schema.Meta.Types["__Type"], + }, + TraceLabel: fmt.Sprintf("GraphQL field: __type"), +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go b/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go new file mode 100644 index 000000000000..3e5d9e44d90e --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go @@ -0,0 +1,331 @@ +package resolvable + +import ( + "context" + "fmt" + "reflect" + "strings" + + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/exec/packer" + "github.com/graph-gophers/graphql-go/internal/schema" +) + +type Schema struct { + schema.Schema + Query Resolvable + Mutation Resolvable + Resolver reflect.Value +} + +type Resolvable interface { + isResolvable() +} + +type Object struct { + Name string + Fields map[string]*Field + TypeAssertions map[string]*TypeAssertion +} + +type Field struct { + schema.Field + TypeName string + MethodIndex int + HasContext bool + HasError bool + ArgsPacker *packer.StructPacker + ValueExec Resolvable + TraceLabel string +} + +type TypeAssertion struct { + MethodIndex int + TypeExec Resolvable +} + +type List struct { + Elem Resolvable +} + +type Scalar struct{} + +func (*Object) isResolvable() {} +func (*List) isResolvable() {} +func (*Scalar) isResolvable() {} + +func ApplyResolver(s *schema.Schema, resolver interface{}) (*Schema, error) { + b := newBuilder(s) + + var query, mutation Resolvable + + if t, ok := s.EntryPoints["query"]; ok { + if err := b.assignExec(&query, t, reflect.TypeOf(resolver)); err != nil { + return nil, err + } + } + + if t, ok := s.EntryPoints["mutation"]; ok { + if err := b.assignExec(&mutation, t, reflect.TypeOf(resolver)); err != nil { + return nil, err + } + } + + if err := b.finish(); err != nil { + return nil, err + } + + return &Schema{ + Schema: *s, + Resolver: reflect.ValueOf(resolver), + Query: query, + Mutation: mutation, + }, nil +} + +type execBuilder struct { + schema *schema.Schema + resMap map[typePair]*resMapEntry + packerBuilder *packer.Builder +} + +type typePair struct { + graphQLType common.Type + resolverType reflect.Type +} + +type resMapEntry struct { + exec Resolvable + targets []*Resolvable +} + +func newBuilder(s *schema.Schema) *execBuilder { + return &execBuilder{ + schema: s, + resMap: make(map[typePair]*resMapEntry), + packerBuilder: packer.NewBuilder(), + } +} + +func (b *execBuilder) finish() error { + for _, entry := range b.resMap { + for _, target := range entry.targets { + *target = entry.exec + } + } + + return b.packerBuilder.Finish() +} + +func (b *execBuilder) assignExec(target *Resolvable, t common.Type, resolverType reflect.Type) error { + k := typePair{t, resolverType} + ref, ok := b.resMap[k] + if !ok { + ref = &resMapEntry{} + b.resMap[k] = ref + var err error + ref.exec, err = b.makeExec(t, resolverType) + if err != nil { + return err + } + } + ref.targets = append(ref.targets, target) + return nil +} + +func (b *execBuilder) makeExec(t common.Type, resolverType reflect.Type) (Resolvable, error) { + var nonNull bool + t, nonNull = unwrapNonNull(t) + + switch t := t.(type) { + case *schema.Object: + return b.makeObjectExec(t.Name, t.Fields, nil, nonNull, resolverType) + + case *schema.Interface: + return b.makeObjectExec(t.Name, t.Fields, t.PossibleTypes, nonNull, resolverType) + + case *schema.Union: + return b.makeObjectExec(t.Name, nil, t.PossibleTypes, nonNull, resolverType) + } + + if !nonNull { + if resolverType.Kind() != reflect.Ptr { + return nil, fmt.Errorf("%s is not a pointer", resolverType) + } + resolverType = resolverType.Elem() + } + + switch t := t.(type) { + case *schema.Scalar: + return makeScalarExec(t, resolverType) + + case *schema.Enum: + return &Scalar{}, nil + + case *common.List: + if resolverType.Kind() != reflect.Slice { + return nil, fmt.Errorf("%s is not a slice", resolverType) + } + e := &List{} + if err := b.assignExec(&e.Elem, t.OfType, resolverType.Elem()); err != nil { + return nil, err + } + return e, nil + + default: + panic("invalid type: " + t.String()) + } +} + +func makeScalarExec(t *schema.Scalar, resolverType reflect.Type) (Resolvable, error) { + implementsType := false + switch r := reflect.New(resolverType).Interface().(type) { + case *int32: + implementsType = (t.Name == "Int") + case *float64: + implementsType = (t.Name == "Float") + case *string: + implementsType = (t.Name == "String") + case *bool: + implementsType = (t.Name == "Boolean") + case packer.Unmarshaler: + implementsType = r.ImplementsGraphQLType(t.Name) + } + if !implementsType { + return nil, fmt.Errorf("can not use %s as %s", resolverType, t.Name) + } + return &Scalar{}, nil +} + +func (b *execBuilder) makeObjectExec(typeName string, fields schema.FieldList, possibleTypes []*schema.Object, nonNull bool, resolverType reflect.Type) (*Object, error) { + if !nonNull { + if resolverType.Kind() != reflect.Ptr && resolverType.Kind() != reflect.Interface { + return nil, fmt.Errorf("%s is not a pointer or interface", resolverType) + } + } + + methodHasReceiver := resolverType.Kind() != reflect.Interface + + Fields := make(map[string]*Field) + for _, f := range fields { + methodIndex := findMethod(resolverType, f.Name) + if methodIndex == -1 { + hint := "" + if findMethod(reflect.PtrTo(resolverType), f.Name) != -1 { + hint = " (hint: the method exists on the pointer type)" + } + return nil, fmt.Errorf("%s does not resolve %q: missing method for field %q%s", resolverType, typeName, f.Name, hint) + } + + m := resolverType.Method(methodIndex) + fe, err := b.makeFieldExec(typeName, f, m, methodIndex, methodHasReceiver) + if err != nil { + return nil, fmt.Errorf("%s\n\treturned by (%s).%s", err, resolverType, m.Name) + } + Fields[f.Name] = fe + } + + typeAssertions := make(map[string]*TypeAssertion) + for _, impl := range possibleTypes { + methodIndex := findMethod(resolverType, "To"+impl.Name) + if methodIndex == -1 { + return nil, fmt.Errorf("%s does not resolve %q: missing method %q to convert to %q", resolverType, typeName, "To"+impl.Name, impl.Name) + } + if resolverType.Method(methodIndex).Type.NumOut() != 2 { + return nil, fmt.Errorf("%s does not resolve %q: method %q should return a value and a bool indicating success", resolverType, typeName, "To"+impl.Name) + } + a := &TypeAssertion{ + MethodIndex: methodIndex, + } + if err := b.assignExec(&a.TypeExec, impl, resolverType.Method(methodIndex).Type.Out(0)); err != nil { + return nil, err + } + typeAssertions[impl.Name] = a + } + + return &Object{ + Name: typeName, + Fields: Fields, + TypeAssertions: typeAssertions, + }, nil +} + +var contextType = reflect.TypeOf((*context.Context)(nil)).Elem() +var errorType = reflect.TypeOf((*error)(nil)).Elem() + +func (b *execBuilder) makeFieldExec(typeName string, f *schema.Field, m reflect.Method, methodIndex int, methodHasReceiver bool) (*Field, error) { + in := make([]reflect.Type, m.Type.NumIn()) + for i := range in { + in[i] = m.Type.In(i) + } + if methodHasReceiver { + in = in[1:] // first parameter is receiver + } + + hasContext := len(in) > 0 && in[0] == contextType + if hasContext { + in = in[1:] + } + + var argsPacker *packer.StructPacker + if len(f.Args) > 0 { + if len(in) == 0 { + return nil, fmt.Errorf("must have parameter for field arguments") + } + var err error + argsPacker, err = b.packerBuilder.MakeStructPacker(f.Args, in[0]) + if err != nil { + return nil, err + } + in = in[1:] + } + + if len(in) > 0 { + return nil, fmt.Errorf("too many parameters") + } + + if m.Type.NumOut() > 2 { + return nil, fmt.Errorf("too many return values") + } + + hasError := m.Type.NumOut() == 2 + if hasError { + if m.Type.Out(1) != errorType { + return nil, fmt.Errorf(`must have "error" as its second return value`) + } + } + + fe := &Field{ + Field: *f, + TypeName: typeName, + MethodIndex: methodIndex, + HasContext: hasContext, + ArgsPacker: argsPacker, + HasError: hasError, + TraceLabel: fmt.Sprintf("GraphQL field: %s.%s", typeName, f.Name), + } + if err := b.assignExec(&fe.ValueExec, f.Type, m.Type.Out(0)); err != nil { + return nil, err + } + return fe, nil +} + +func findMethod(t reflect.Type, name string) int { + for i := 0; i < t.NumMethod(); i++ { + if strings.EqualFold(stripUnderscore(name), stripUnderscore(t.Method(i).Name)) { + return i + } + } + return -1 +} + +func unwrapNonNull(t common.Type) (common.Type, bool) { + if nn, ok := t.(*common.NonNull); ok { + return nn.OfType, true + } + return t, false +} + +func stripUnderscore(s string) string { + return strings.Replace(s, "_", "", -1) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go b/vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go new file mode 100644 index 000000000000..aed079b6713a --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go @@ -0,0 +1,238 @@ +package selected + +import ( + "fmt" + "reflect" + "sync" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/exec/packer" + "github.com/graph-gophers/graphql-go/internal/exec/resolvable" + "github.com/graph-gophers/graphql-go/internal/query" + "github.com/graph-gophers/graphql-go/internal/schema" + "github.com/graph-gophers/graphql-go/introspection" +) + +type Request struct { + Schema *schema.Schema + Doc *query.Document + Vars map[string]interface{} + Mu sync.Mutex + Errs []*errors.QueryError +} + +func (r *Request) AddError(err *errors.QueryError) { + r.Mu.Lock() + r.Errs = append(r.Errs, err) + r.Mu.Unlock() +} + +func ApplyOperation(r *Request, s *resolvable.Schema, op *query.Operation) []Selection { + var obj *resolvable.Object + switch op.Type { + case query.Query: + obj = s.Query.(*resolvable.Object) + case query.Mutation: + obj = s.Mutation.(*resolvable.Object) + } + return applySelectionSet(r, obj, op.Selections) +} + +type Selection interface { + isSelection() +} + +type SchemaField struct { + resolvable.Field + Alias string + Args map[string]interface{} + PackedArgs reflect.Value + Sels []Selection + Async bool + FixedResult reflect.Value +} + +type TypeAssertion struct { + resolvable.TypeAssertion + Sels []Selection +} + +type TypenameField struct { + resolvable.Object + Alias string +} + +func (*SchemaField) isSelection() {} +func (*TypeAssertion) isSelection() {} +func (*TypenameField) isSelection() {} + +func applySelectionSet(r *Request, e *resolvable.Object, sels []query.Selection) (flattenedSels []Selection) { + for _, sel := range sels { + switch sel := sel.(type) { + case *query.Field: + field := sel + if skipByDirective(r, field.Directives) { + continue + } + + switch field.Name.Name { + case "__typename": + flattenedSels = append(flattenedSels, &TypenameField{ + Object: *e, + Alias: field.Alias.Name, + }) + + case "__schema": + flattenedSels = append(flattenedSels, &SchemaField{ + Field: resolvable.MetaFieldSchema, + Alias: field.Alias.Name, + Sels: applySelectionSet(r, resolvable.MetaSchema, field.Selections), + Async: true, + FixedResult: reflect.ValueOf(introspection.WrapSchema(r.Schema)), + }) + + case "__type": + p := packer.ValuePacker{ValueType: reflect.TypeOf("")} + v, err := p.Pack(field.Arguments.MustGet("name").Value(r.Vars)) + if err != nil { + r.AddError(errors.Errorf("%s", err)) + return nil + } + + t, ok := r.Schema.Types[v.String()] + if !ok { + return nil + } + + flattenedSels = append(flattenedSels, &SchemaField{ + Field: resolvable.MetaFieldType, + Alias: field.Alias.Name, + Sels: applySelectionSet(r, resolvable.MetaType, field.Selections), + Async: true, + FixedResult: reflect.ValueOf(introspection.WrapType(t)), + }) + + default: + fe := e.Fields[field.Name.Name] + + var args map[string]interface{} + var packedArgs reflect.Value + if fe.ArgsPacker != nil { + args = make(map[string]interface{}) + for _, arg := range field.Arguments { + args[arg.Name.Name] = arg.Value.Value(r.Vars) + } + var err error + packedArgs, err = fe.ArgsPacker.Pack(args) + if err != nil { + r.AddError(errors.Errorf("%s", err)) + return + } + } + + fieldSels := applyField(r, fe.ValueExec, field.Selections) + flattenedSels = append(flattenedSels, &SchemaField{ + Field: *fe, + Alias: field.Alias.Name, + Args: args, + PackedArgs: packedArgs, + Sels: fieldSels, + Async: fe.HasContext || fe.ArgsPacker != nil || fe.HasError || HasAsyncSel(fieldSels), + }) + } + + case *query.InlineFragment: + frag := sel + if skipByDirective(r, frag.Directives) { + continue + } + flattenedSels = append(flattenedSels, applyFragment(r, e, &frag.Fragment)...) + + case *query.FragmentSpread: + spread := sel + if skipByDirective(r, spread.Directives) { + continue + } + flattenedSels = append(flattenedSels, applyFragment(r, e, &r.Doc.Fragments.Get(spread.Name.Name).Fragment)...) + + default: + panic("invalid type") + } + } + return +} + +func applyFragment(r *Request, e *resolvable.Object, frag *query.Fragment) []Selection { + if frag.On.Name != "" && frag.On.Name != e.Name { + a, ok := e.TypeAssertions[frag.On.Name] + if !ok { + panic(fmt.Errorf("%q does not implement %q", frag.On, e.Name)) // TODO proper error handling + } + + return []Selection{&TypeAssertion{ + TypeAssertion: *a, + Sels: applySelectionSet(r, a.TypeExec.(*resolvable.Object), frag.Selections), + }} + } + return applySelectionSet(r, e, frag.Selections) +} + +func applyField(r *Request, e resolvable.Resolvable, sels []query.Selection) []Selection { + switch e := e.(type) { + case *resolvable.Object: + return applySelectionSet(r, e, sels) + case *resolvable.List: + return applyField(r, e.Elem, sels) + case *resolvable.Scalar: + return nil + default: + panic("unreachable") + } +} + +func skipByDirective(r *Request, directives common.DirectiveList) bool { + if d := directives.Get("skip"); d != nil { + p := packer.ValuePacker{ValueType: reflect.TypeOf(false)} + v, err := p.Pack(d.Args.MustGet("if").Value(r.Vars)) + if err != nil { + r.AddError(errors.Errorf("%s", err)) + } + if err == nil && v.Bool() { + return true + } + } + + if d := directives.Get("include"); d != nil { + p := packer.ValuePacker{ValueType: reflect.TypeOf(false)} + v, err := p.Pack(d.Args.MustGet("if").Value(r.Vars)) + if err != nil { + r.AddError(errors.Errorf("%s", err)) + } + if err == nil && !v.Bool() { + return true + } + } + + return false +} + +func HasAsyncSel(sels []Selection) bool { + for _, sel := range sels { + switch sel := sel.(type) { + case *SchemaField: + if sel.Async { + return true + } + case *TypeAssertion: + if HasAsyncSel(sel.Sels) { + return true + } + case *TypenameField: + // sync + default: + panic("unreachable") + } + } + return false +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/query/query.go b/vendor/github.com/graph-gophers/graphql-go/internal/query/query.go new file mode 100644 index 000000000000..faba4d2adee4 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/query/query.go @@ -0,0 +1,234 @@ +package query + +import ( + "fmt" + "text/scanner" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" +) + +type Document struct { + Operations OperationList + Fragments FragmentList +} + +type OperationList []*Operation + +func (l OperationList) Get(name string) *Operation { + for _, f := range l { + if f.Name.Name == name { + return f + } + } + return nil +} + +type FragmentList []*FragmentDecl + +func (l FragmentList) Get(name string) *FragmentDecl { + for _, f := range l { + if f.Name.Name == name { + return f + } + } + return nil +} + +type Operation struct { + Type OperationType + Name common.Ident + Vars common.InputValueList + Selections []Selection + Directives common.DirectiveList + Loc errors.Location +} + +type OperationType string + +const ( + Query OperationType = "QUERY" + Mutation = "MUTATION" + Subscription = "SUBSCRIPTION" +) + +type Fragment struct { + On common.TypeName + Selections []Selection +} + +type FragmentDecl struct { + Fragment + Name common.Ident + Directives common.DirectiveList + Loc errors.Location +} + +type Selection interface { + isSelection() +} + +type Field struct { + Alias common.Ident + Name common.Ident + Arguments common.ArgumentList + Directives common.DirectiveList + Selections []Selection + SelectionSetLoc errors.Location +} + +type InlineFragment struct { + Fragment + Directives common.DirectiveList + Loc errors.Location +} + +type FragmentSpread struct { + Name common.Ident + Directives common.DirectiveList + Loc errors.Location +} + +func (Field) isSelection() {} +func (InlineFragment) isSelection() {} +func (FragmentSpread) isSelection() {} + +func Parse(queryString string) (*Document, *errors.QueryError) { + l := common.NewLexer(queryString) + + var doc *Document + err := l.CatchSyntaxError(func() { doc = parseDocument(l) }) + if err != nil { + return nil, err + } + + return doc, nil +} + +func parseDocument(l *common.Lexer) *Document { + d := &Document{} + l.Consume() + for l.Peek() != scanner.EOF { + if l.Peek() == '{' { + op := &Operation{Type: Query, Loc: l.Location()} + op.Selections = parseSelectionSet(l) + d.Operations = append(d.Operations, op) + continue + } + + loc := l.Location() + switch x := l.ConsumeIdent(); x { + case "query": + op := parseOperation(l, Query) + op.Loc = loc + d.Operations = append(d.Operations, op) + + case "mutation": + d.Operations = append(d.Operations, parseOperation(l, Mutation)) + + case "subscription": + d.Operations = append(d.Operations, parseOperation(l, Subscription)) + + case "fragment": + frag := parseFragment(l) + frag.Loc = loc + d.Fragments = append(d.Fragments, frag) + + default: + l.SyntaxError(fmt.Sprintf(`unexpected %q, expecting "fragment"`, x)) + } + } + return d +} + +func parseOperation(l *common.Lexer, opType OperationType) *Operation { + op := &Operation{Type: opType} + op.Name.Loc = l.Location() + if l.Peek() == scanner.Ident { + op.Name = l.ConsumeIdentWithLoc() + } + op.Directives = common.ParseDirectives(l) + if l.Peek() == '(' { + l.ConsumeToken('(') + for l.Peek() != ')' { + loc := l.Location() + l.ConsumeToken('$') + iv := common.ParseInputValue(l) + iv.Loc = loc + op.Vars = append(op.Vars, iv) + } + l.ConsumeToken(')') + } + op.Selections = parseSelectionSet(l) + return op +} + +func parseFragment(l *common.Lexer) *FragmentDecl { + f := &FragmentDecl{} + f.Name = l.ConsumeIdentWithLoc() + l.ConsumeKeyword("on") + f.On = common.TypeName{Ident: l.ConsumeIdentWithLoc()} + f.Directives = common.ParseDirectives(l) + f.Selections = parseSelectionSet(l) + return f +} + +func parseSelectionSet(l *common.Lexer) []Selection { + var sels []Selection + l.ConsumeToken('{') + for l.Peek() != '}' { + sels = append(sels, parseSelection(l)) + } + l.ConsumeToken('}') + return sels +} + +func parseSelection(l *common.Lexer) Selection { + if l.Peek() == '.' { + return parseSpread(l) + } + return parseField(l) +} + +func parseField(l *common.Lexer) *Field { + f := &Field{} + f.Alias = l.ConsumeIdentWithLoc() + f.Name = f.Alias + if l.Peek() == ':' { + l.ConsumeToken(':') + f.Name = l.ConsumeIdentWithLoc() + } + if l.Peek() == '(' { + f.Arguments = common.ParseArguments(l) + } + f.Directives = common.ParseDirectives(l) + if l.Peek() == '{' { + f.SelectionSetLoc = l.Location() + f.Selections = parseSelectionSet(l) + } + return f +} + +func parseSpread(l *common.Lexer) Selection { + loc := l.Location() + l.ConsumeToken('.') + l.ConsumeToken('.') + l.ConsumeToken('.') + + f := &InlineFragment{Loc: loc} + if l.Peek() == scanner.Ident { + ident := l.ConsumeIdentWithLoc() + if ident.Name != "on" { + fs := &FragmentSpread{ + Name: ident, + Loc: loc, + } + fs.Directives = common.ParseDirectives(l) + return fs + } + f.On = common.TypeName{Ident: l.ConsumeIdentWithLoc()} + } + f.Directives = common.ParseDirectives(l) + f.Selections = parseSelectionSet(l) + return f +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go b/vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go new file mode 100644 index 000000000000..b48bf7acf286 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go @@ -0,0 +1,190 @@ +package schema + +var Meta *Schema + +func init() { + Meta = &Schema{} // bootstrap + Meta = New() + if err := Meta.Parse(metaSrc); err != nil { + panic(err) + } +} + +var metaSrc = ` + # The ` + "`" + `Int` + "`" + ` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. + scalar Int + + # The ` + "`" + `Float` + "`" + ` scalar type represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). + scalar Float + + # The ` + "`" + `String` + "`" + ` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text. + scalar String + + # The ` + "`" + `Boolean` + "`" + ` scalar type represents ` + "`" + `true` + "`" + ` or ` + "`" + `false` + "`" + `. + scalar Boolean + + # The ` + "`" + `ID` + "`" + ` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as ` + "`" + `"4"` + "`" + `) or integer (such as ` + "`" + `4` + "`" + `) input value will be accepted as an ID. + scalar ID + + # Directs the executor to include this field or fragment only when the ` + "`" + `if` + "`" + ` argument is true. + directive @include( + # Included when true. + if: Boolean! + ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT + + # Directs the executor to skip this field or fragment when the ` + "`" + `if` + "`" + ` argument is true. + directive @skip( + # Skipped when true. + if: Boolean! + ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT + + # Marks an element of a GraphQL schema as no longer supported. + directive @deprecated( + # Explains why this element was deprecated, usually also including a suggestion + # for how to access supported similar data. Formatted in + # [Markdown](https://daringfireball.net/projects/markdown/). + reason: String = "No longer supported" + ) on FIELD_DEFINITION | ENUM_VALUE + + # A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. + # + # In some cases, you need to provide options to alter GraphQL's execution behavior + # in ways field arguments will not suffice, such as conditionally including or + # skipping a field. Directives provide this by describing additional information + # to the executor. + type __Directive { + name: String! + description: String + locations: [__DirectiveLocation!]! + args: [__InputValue!]! + } + + # A Directive can be adjacent to many parts of the GraphQL language, a + # __DirectiveLocation describes one such possible adjacencies. + enum __DirectiveLocation { + # Location adjacent to a query operation. + QUERY + # Location adjacent to a mutation operation. + MUTATION + # Location adjacent to a subscription operation. + SUBSCRIPTION + # Location adjacent to a field. + FIELD + # Location adjacent to a fragment definition. + FRAGMENT_DEFINITION + # Location adjacent to a fragment spread. + FRAGMENT_SPREAD + # Location adjacent to an inline fragment. + INLINE_FRAGMENT + # Location adjacent to a schema definition. + SCHEMA + # Location adjacent to a scalar definition. + SCALAR + # Location adjacent to an object type definition. + OBJECT + # Location adjacent to a field definition. + FIELD_DEFINITION + # Location adjacent to an argument definition. + ARGUMENT_DEFINITION + # Location adjacent to an interface definition. + INTERFACE + # Location adjacent to a union definition. + UNION + # Location adjacent to an enum definition. + ENUM + # Location adjacent to an enum value definition. + ENUM_VALUE + # Location adjacent to an input object type definition. + INPUT_OBJECT + # Location adjacent to an input object field definition. + INPUT_FIELD_DEFINITION + } + + # One possible value for a given Enum. Enum values are unique values, not a + # placeholder for a string or numeric value. However an Enum value is returned in + # a JSON response as a string. + type __EnumValue { + name: String! + description: String + isDeprecated: Boolean! + deprecationReason: String + } + + # Object and Interface types are described by a list of Fields, each of which has + # a name, potentially a list of arguments, and a return type. + type __Field { + name: String! + description: String + args: [__InputValue!]! + type: __Type! + isDeprecated: Boolean! + deprecationReason: String + } + + # Arguments provided to Fields or Directives and the input fields of an + # InputObject are represented as Input Values which describe their type and + # optionally a default value. + type __InputValue { + name: String! + description: String + type: __Type! + # A GraphQL-formatted string representing the default value for this input value. + defaultValue: String + } + + # A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all + # available types and directives on the server, as well as the entry points for + # query, mutation, and subscription operations. + type __Schema { + # A list of all types supported by this server. + types: [__Type!]! + # The type that query operations will be rooted at. + queryType: __Type! + # If this server supports mutation, the type that mutation operations will be rooted at. + mutationType: __Type + # If this server support subscription, the type that subscription operations will be rooted at. + subscriptionType: __Type + # A list of all directives supported by this server. + directives: [__Directive!]! + } + + # The fundamental unit of any GraphQL Schema is the type. There are many kinds of + # types in GraphQL as represented by the ` + "`" + `__TypeKind` + "`" + ` enum. + # + # Depending on the kind of a type, certain fields describe information about that + # type. Scalar types provide no information beyond a name and description, while + # Enum types provide their values. Object and Interface types provide the fields + # they describe. Abstract types, Union and Interface, provide the Object types + # possible at runtime. List and NonNull types compose other types. + type __Type { + kind: __TypeKind! + name: String + description: String + fields(includeDeprecated: Boolean = false): [__Field!] + interfaces: [__Type!] + possibleTypes: [__Type!] + enumValues(includeDeprecated: Boolean = false): [__EnumValue!] + inputFields: [__InputValue!] + ofType: __Type + } + + # An enum describing what kind of type a given ` + "`" + `__Type` + "`" + ` is. + enum __TypeKind { + # Indicates this type is a scalar. + SCALAR + # Indicates this type is an object. ` + "`" + `fields` + "`" + ` and ` + "`" + `interfaces` + "`" + ` are valid fields. + OBJECT + # Indicates this type is an interface. ` + "`" + `fields` + "`" + ` and ` + "`" + `possibleTypes` + "`" + ` are valid fields. + INTERFACE + # Indicates this type is a union. ` + "`" + `possibleTypes` + "`" + ` is a valid field. + UNION + # Indicates this type is an enum. ` + "`" + `enumValues` + "`" + ` is a valid field. + ENUM + # Indicates this type is an input object. ` + "`" + `inputFields` + "`" + ` is a valid field. + INPUT_OBJECT + # Indicates this type is a list. ` + "`" + `ofType` + "`" + ` is a valid field. + LIST + # Indicates this type is a non-null. ` + "`" + `ofType` + "`" + ` is a valid field. + NON_NULL + } +` diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go b/vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go new file mode 100644 index 000000000000..e549f17c07ed --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go @@ -0,0 +1,570 @@ +package schema + +import ( + "fmt" + "text/scanner" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" +) + +// Schema represents a GraphQL service's collective type system capabilities. +// A schema is defined in terms of the types and directives it supports as well as the root +// operation types for each kind of operation: `query`, `mutation`, and `subscription`. +// +// For a more formal definition, read the relevant section in the specification: +// +// http://facebook.github.io/graphql/draft/#sec-Schema +type Schema struct { + // EntryPoints determines the place in the type system where `query`, `mutation`, and + // `subscription` operations begin. + // + // http://facebook.github.io/graphql/draft/#sec-Root-Operation-Types + // + // NOTE: The specification refers to this concept as "Root Operation Types". + // TODO: Rename the `EntryPoints` field to `RootOperationTypes` to align with spec terminology. + EntryPoints map[string]NamedType + + // Types are the fundamental unit of any GraphQL schema. + // There are six kinds of named types, and two wrapping types. + // + // http://facebook.github.io/graphql/draft/#sec-Types + Types map[string]NamedType + + // TODO: Type extensions? + // http://facebook.github.io/graphql/draft/#sec-Type-Extensions + + // Directives are used to annotate various parts of a GraphQL document as an indicator that they + // should be evaluated differently by a validator, executor, or client tool such as a code + // generator. + // + // http://facebook.github.io/graphql/draft/#sec-Type-System.Directives + Directives map[string]*DirectiveDecl + + entryPointNames map[string]string + objects []*Object + unions []*Union + enums []*Enum +} + +// Resolve a named type in the schema by its name. +func (s *Schema) Resolve(name string) common.Type { + return s.Types[name] +} + +// NamedType represents a type with a name. +// +// http://facebook.github.io/graphql/draft/#NamedType +type NamedType interface { + common.Type + TypeName() string + Description() string +} + +// Scalar types represent primitive leaf values (e.g. a string or an integer) in a GraphQL type +// system. +// +// GraphQL responses take the form of a hierarchical tree; the leaves on these trees are GraphQL +// scalars. +// +// http://facebook.github.io/graphql/draft/#sec-Scalars +type Scalar struct { + Name string + Desc string + // TODO: Add a list of directives? +} + +// Object types represent a list of named fields, each of which yield a value of a specific type. +// +// GraphQL queries are hierarchical and composed, describing a tree of information. +// While Scalar types describe the leaf values of these hierarchical types, Objects describe the +// intermediate levels. +// +// http://facebook.github.io/graphql/draft/#sec-Objects +type Object struct { + Name string + Interfaces []*Interface + Fields FieldList + Desc string + // TODO: Add a list of directives? + + interfaceNames []string +} + +// Interface types represent a list of named fields and their arguments. +// +// GraphQL objects can then implement these interfaces which requires that the object type will +// define all fields defined by those interfaces. +// +// http://facebook.github.io/graphql/draft/#sec-Interfaces +type Interface struct { + Name string + PossibleTypes []*Object + Fields FieldList // NOTE: the spec refers to this as `FieldsDefinition`. + Desc string + // TODO: Add a list of directives? +} + +// Union types represent objects that could be one of a list of GraphQL object types, but provides no +// guaranteed fields between those types. +// +// They also differ from interfaces in that object types declare what interfaces they implement, but +// are not aware of what unions contain them. +// +// http://facebook.github.io/graphql/draft/#sec-Unions +type Union struct { + Name string + PossibleTypes []*Object // NOTE: the spec refers to this as `UnionMemberTypes`. + Desc string + // TODO: Add a list of directives? + + typeNames []string +} + +// Enum types describe a set of possible values. +// +// Like scalar types, Enum types also represent leaf values in a GraphQL type system. +// +// http://facebook.github.io/graphql/draft/#sec-Enums +type Enum struct { + Name string + Values []*EnumValue // NOTE: the spec refers to this as `EnumValuesDefinition`. + Desc string + // TODO: Add a list of directives? +} + +// EnumValue types are unique values that may be serialized as a string: the name of the +// represented value. +// +// http://facebook.github.io/graphql/draft/#EnumValueDefinition +type EnumValue struct { + Name string + Directives common.DirectiveList + Desc string + // TODO: Add a list of directives? +} + +// InputObject types define a set of input fields; the input fields are either scalars, enums, or +// other input objects. +// +// This allows arguments to accept arbitrarily complex structs. +// +// http://facebook.github.io/graphql/draft/#sec-Input-Objects +type InputObject struct { + Name string + Desc string + Values common.InputValueList + // TODO: Add a list of directives? +} + +// FieldsList is a list of an Object's Fields. +// +// http://facebook.github.io/graphql/draft/#FieldsDefinition +type FieldList []*Field + +// Get iterates over the field list, returning a pointer-to-Field when the field name matches the +// provided `name` argument. +// Returns nil when no field was found by that name. +func (l FieldList) Get(name string) *Field { + for _, f := range l { + if f.Name == name { + return f + } + } + return nil +} + +// Names returns a string slice of the field names in the FieldList. +func (l FieldList) Names() []string { + names := make([]string, len(l)) + for i, f := range l { + names[i] = f.Name + } + return names +} + +// http://facebook.github.io/graphql/draft/#sec-Type-System.Directives +type DirectiveDecl struct { + Name string + Desc string + Locs []string + Args common.InputValueList +} + +func (*Scalar) Kind() string { return "SCALAR" } +func (*Object) Kind() string { return "OBJECT" } +func (*Interface) Kind() string { return "INTERFACE" } +func (*Union) Kind() string { return "UNION" } +func (*Enum) Kind() string { return "ENUM" } +func (*InputObject) Kind() string { return "INPUT_OBJECT" } + +func (t *Scalar) String() string { return t.Name } +func (t *Object) String() string { return t.Name } +func (t *Interface) String() string { return t.Name } +func (t *Union) String() string { return t.Name } +func (t *Enum) String() string { return t.Name } +func (t *InputObject) String() string { return t.Name } + +func (t *Scalar) TypeName() string { return t.Name } +func (t *Object) TypeName() string { return t.Name } +func (t *Interface) TypeName() string { return t.Name } +func (t *Union) TypeName() string { return t.Name } +func (t *Enum) TypeName() string { return t.Name } +func (t *InputObject) TypeName() string { return t.Name } + +func (t *Scalar) Description() string { return t.Desc } +func (t *Object) Description() string { return t.Desc } +func (t *Interface) Description() string { return t.Desc } +func (t *Union) Description() string { return t.Desc } +func (t *Enum) Description() string { return t.Desc } +func (t *InputObject) Description() string { return t.Desc } + +// Field is a conceptual function which yields values. +// http://facebook.github.io/graphql/draft/#FieldDefinition +type Field struct { + Name string + Args common.InputValueList // NOTE: the spec refers to this as `ArgumentsDefinition`. + Type common.Type + Directives common.DirectiveList + Desc string +} + +// New initializes an instance of Schema. +func New() *Schema { + s := &Schema{ + entryPointNames: make(map[string]string), + Types: make(map[string]NamedType), + Directives: make(map[string]*DirectiveDecl), + } + for n, t := range Meta.Types { + s.Types[n] = t + } + for n, d := range Meta.Directives { + s.Directives[n] = d + } + return s +} + +// Parse the schema string. +func (s *Schema) Parse(schemaString string) error { + l := common.NewLexer(schemaString) + + err := l.CatchSyntaxError(func() { parseSchema(s, l) }) + if err != nil { + return err + } + + for _, t := range s.Types { + if err := resolveNamedType(s, t); err != nil { + return err + } + } + for _, d := range s.Directives { + for _, arg := range d.Args { + t, err := common.ResolveType(arg.Type, s.Resolve) + if err != nil { + return err + } + arg.Type = t + } + } + + s.EntryPoints = make(map[string]NamedType) + for key, name := range s.entryPointNames { + t, ok := s.Types[name] + if !ok { + if !ok { + return errors.Errorf("type %q not found", name) + } + } + s.EntryPoints[key] = t + } + + for _, obj := range s.objects { + obj.Interfaces = make([]*Interface, len(obj.interfaceNames)) + for i, intfName := range obj.interfaceNames { + t, ok := s.Types[intfName] + if !ok { + return errors.Errorf("interface %q not found", intfName) + } + intf, ok := t.(*Interface) + if !ok { + return errors.Errorf("type %q is not an interface", intfName) + } + obj.Interfaces[i] = intf + intf.PossibleTypes = append(intf.PossibleTypes, obj) + } + } + + for _, union := range s.unions { + union.PossibleTypes = make([]*Object, len(union.typeNames)) + for i, name := range union.typeNames { + t, ok := s.Types[name] + if !ok { + return errors.Errorf("object type %q not found", name) + } + obj, ok := t.(*Object) + if !ok { + return errors.Errorf("type %q is not an object", name) + } + union.PossibleTypes[i] = obj + } + } + + for _, enum := range s.enums { + for _, value := range enum.Values { + if err := resolveDirectives(s, value.Directives); err != nil { + return err + } + } + } + + return nil +} + +func resolveNamedType(s *Schema, t NamedType) error { + switch t := t.(type) { + case *Object: + for _, f := range t.Fields { + if err := resolveField(s, f); err != nil { + return err + } + } + case *Interface: + for _, f := range t.Fields { + if err := resolveField(s, f); err != nil { + return err + } + } + case *InputObject: + if err := resolveInputObject(s, t.Values); err != nil { + return err + } + } + return nil +} + +func resolveField(s *Schema, f *Field) error { + t, err := common.ResolveType(f.Type, s.Resolve) + if err != nil { + return err + } + f.Type = t + if err := resolveDirectives(s, f.Directives); err != nil { + return err + } + return resolveInputObject(s, f.Args) +} + +func resolveDirectives(s *Schema, directives common.DirectiveList) error { + for _, d := range directives { + dirName := d.Name.Name + dd, ok := s.Directives[dirName] + if !ok { + return errors.Errorf("directive %q not found", dirName) + } + for _, arg := range d.Args { + if dd.Args.Get(arg.Name.Name) == nil { + return errors.Errorf("invalid argument %q for directive %q", arg.Name.Name, dirName) + } + } + for _, arg := range dd.Args { + if _, ok := d.Args.Get(arg.Name.Name); !ok { + d.Args = append(d.Args, common.Argument{Name: arg.Name, Value: arg.Default}) + } + } + } + return nil +} + +func resolveInputObject(s *Schema, values common.InputValueList) error { + for _, v := range values { + t, err := common.ResolveType(v.Type, s.Resolve) + if err != nil { + return err + } + v.Type = t + } + return nil +} + +func parseSchema(s *Schema, l *common.Lexer) { + l.Consume() + + for l.Peek() != scanner.EOF { + desc := l.DescComment() + switch x := l.ConsumeIdent(); x { + + case "schema": + l.ConsumeToken('{') + for l.Peek() != '}' { + name := l.ConsumeIdent() + l.ConsumeToken(':') + typ := l.ConsumeIdent() + s.entryPointNames[name] = typ + } + l.ConsumeToken('}') + + case "type": + obj := parseObjectDef(l) + obj.Desc = desc + s.Types[obj.Name] = obj + s.objects = append(s.objects, obj) + + case "interface": + iface := parseInterfaceDef(l) + iface.Desc = desc + s.Types[iface.Name] = iface + + case "union": + union := parseUnionDef(l) + union.Desc = desc + s.Types[union.Name] = union + s.unions = append(s.unions, union) + + case "enum": + enum := parseEnumDef(l) + enum.Desc = desc + s.Types[enum.Name] = enum + s.enums = append(s.enums, enum) + + case "input": + input := parseInputDef(l) + input.Desc = desc + s.Types[input.Name] = input + + case "scalar": + name := l.ConsumeIdent() + s.Types[name] = &Scalar{Name: name, Desc: desc} + + case "directive": + directive := parseDirectiveDef(l) + directive.Desc = desc + s.Directives[directive.Name] = directive + + default: + // TODO: Add support for type extensions. + l.SyntaxError(fmt.Sprintf(`unexpected %q, expecting "schema", "type", "enum", "interface", "union", "input", "scalar" or "directive"`, x)) + } + } +} + +func parseObjectDef(l *common.Lexer) *Object { + object := &Object{Name: l.ConsumeIdent()} + + if l.Peek() == scanner.Ident { + l.ConsumeKeyword("implements") + + for l.Peek() != '{' { + if l.Peek() == '&' { + l.ConsumeToken('&') + } + + object.interfaceNames = append(object.interfaceNames, l.ConsumeIdent()) + } + } + + l.ConsumeToken('{') + object.Fields = parseFieldsDef(l) + l.ConsumeToken('}') + + return object +} + +func parseInterfaceDef(l *common.Lexer) *Interface { + i := &Interface{Name: l.ConsumeIdent()} + + l.ConsumeToken('{') + i.Fields = parseFieldsDef(l) + l.ConsumeToken('}') + + return i +} + +func parseUnionDef(l *common.Lexer) *Union { + union := &Union{Name: l.ConsumeIdent()} + + l.ConsumeToken('=') + union.typeNames = []string{l.ConsumeIdent()} + for l.Peek() == '|' { + l.ConsumeToken('|') + union.typeNames = append(union.typeNames, l.ConsumeIdent()) + } + + return union +} + +func parseInputDef(l *common.Lexer) *InputObject { + i := &InputObject{} + i.Name = l.ConsumeIdent() + l.ConsumeToken('{') + for l.Peek() != '}' { + i.Values = append(i.Values, common.ParseInputValue(l)) + } + l.ConsumeToken('}') + return i +} + +func parseEnumDef(l *common.Lexer) *Enum { + enum := &Enum{Name: l.ConsumeIdent()} + + l.ConsumeToken('{') + for l.Peek() != '}' { + v := &EnumValue{ + Desc: l.DescComment(), + Name: l.ConsumeIdent(), + Directives: common.ParseDirectives(l), + } + + enum.Values = append(enum.Values, v) + } + l.ConsumeToken('}') + return enum +} + +func parseDirectiveDef(l *common.Lexer) *DirectiveDecl { + l.ConsumeToken('@') + d := &DirectiveDecl{Name: l.ConsumeIdent()} + + if l.Peek() == '(' { + l.ConsumeToken('(') + for l.Peek() != ')' { + v := common.ParseInputValue(l) + d.Args = append(d.Args, v) + } + l.ConsumeToken(')') + } + + l.ConsumeKeyword("on") + + for { + loc := l.ConsumeIdent() + d.Locs = append(d.Locs, loc) + if l.Peek() != '|' { + break + } + l.ConsumeToken('|') + } + return d +} + +func parseFieldsDef(l *common.Lexer) FieldList { + var fields FieldList + for l.Peek() != '}' { + f := &Field{} + f.Desc = l.DescComment() + f.Name = l.ConsumeIdent() + if l.Peek() == '(' { + l.ConsumeToken('(') + for l.Peek() != ')' { + f.Args = append(f.Args, common.ParseInputValue(l)) + } + l.ConsumeToken(')') + } + l.ConsumeToken(':') + f.Type = common.ParseType(l) + f.Directives = common.ParseDirectives(l) + fields = append(fields, f) + } + return fields +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go b/vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go new file mode 100644 index 000000000000..9702b5f52947 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go @@ -0,0 +1,71 @@ +package validation + +import ( + "fmt" + "sort" + "strconv" + "strings" +) + +func makeSuggestion(prefix string, options []string, input string) string { + var selected []string + distances := make(map[string]int) + for _, opt := range options { + distance := levenshteinDistance(input, opt) + threshold := max(len(input)/2, max(len(opt)/2, 1)) + if distance < threshold { + selected = append(selected, opt) + distances[opt] = distance + } + } + + if len(selected) == 0 { + return "" + } + sort.Slice(selected, func(i, j int) bool { + return distances[selected[i]] < distances[selected[j]] + }) + + parts := make([]string, len(selected)) + for i, opt := range selected { + parts[i] = strconv.Quote(opt) + } + if len(parts) > 1 { + parts[len(parts)-1] = "or " + parts[len(parts)-1] + } + return fmt.Sprintf(" %s %s?", prefix, strings.Join(parts, ", ")) +} + +func levenshteinDistance(s1, s2 string) int { + column := make([]int, len(s1)+1) + for y := range s1 { + column[y+1] = y + 1 + } + for x, rx := range s2 { + column[0] = x + 1 + lastdiag := x + for y, ry := range s1 { + olddiag := column[y+1] + if rx != ry { + lastdiag++ + } + column[y+1] = min(column[y+1]+1, min(column[y]+1, lastdiag)) + lastdiag = olddiag + } + } + return column[len(s1)] +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go b/vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go new file mode 100644 index 000000000000..94ad5ca7fbac --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go @@ -0,0 +1,909 @@ +package validation + +import ( + "fmt" + "math" + "reflect" + "strconv" + "strings" + "text/scanner" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/query" + "github.com/graph-gophers/graphql-go/internal/schema" +) + +type varSet map[*common.InputValue]struct{} + +type selectionPair struct{ a, b query.Selection } + +type fieldInfo struct { + sf *schema.Field + parent schema.NamedType +} + +type context struct { + schema *schema.Schema + doc *query.Document + errs []*errors.QueryError + opErrs map[*query.Operation][]*errors.QueryError + usedVars map[*query.Operation]varSet + fieldMap map[*query.Field]fieldInfo + overlapValidated map[selectionPair]struct{} + maxDepth int +} + +func (c *context) addErr(loc errors.Location, rule string, format string, a ...interface{}) { + c.addErrMultiLoc([]errors.Location{loc}, rule, format, a...) +} + +func (c *context) addErrMultiLoc(locs []errors.Location, rule string, format string, a ...interface{}) { + c.errs = append(c.errs, &errors.QueryError{ + Message: fmt.Sprintf(format, a...), + Locations: locs, + Rule: rule, + }) +} + +type opContext struct { + *context + ops []*query.Operation +} + +func newContext(s *schema.Schema, doc *query.Document, maxDepth int) *context { + return &context{ + schema: s, + doc: doc, + opErrs: make(map[*query.Operation][]*errors.QueryError), + usedVars: make(map[*query.Operation]varSet), + fieldMap: make(map[*query.Field]fieldInfo), + overlapValidated: make(map[selectionPair]struct{}), + maxDepth: maxDepth, + } +} + +func Validate(s *schema.Schema, doc *query.Document, maxDepth int) []*errors.QueryError { + c := newContext(s, doc, maxDepth) + + opNames := make(nameSet) + fragUsedBy := make(map[*query.FragmentDecl][]*query.Operation) + for _, op := range doc.Operations { + c.usedVars[op] = make(varSet) + opc := &opContext{c, []*query.Operation{op}} + + // Check if max depth is exceeded, if it's set. If max depth is exceeded, + // don't continue to validate the document and exit early. + if validateMaxDepth(opc, op.Selections, 1) { + return c.errs + } + + if op.Name.Name == "" && len(doc.Operations) != 1 { + c.addErr(op.Loc, "LoneAnonymousOperation", "This anonymous operation must be the only defined operation.") + } + if op.Name.Name != "" { + validateName(c, opNames, op.Name, "UniqueOperationNames", "operation") + } + + validateDirectives(opc, string(op.Type), op.Directives) + + varNames := make(nameSet) + for _, v := range op.Vars { + validateName(c, varNames, v.Name, "UniqueVariableNames", "variable") + + t := resolveType(c, v.Type) + if !canBeInput(t) { + c.addErr(v.TypeLoc, "VariablesAreInputTypes", "Variable %q cannot be non-input type %q.", "$"+v.Name.Name, t) + } + + if v.Default != nil { + validateLiteral(opc, v.Default) + + if t != nil { + if nn, ok := t.(*common.NonNull); ok { + c.addErr(v.Default.Location(), "DefaultValuesOfCorrectType", "Variable %q of type %q is required and will not use the default value. Perhaps you meant to use type %q.", "$"+v.Name.Name, t, nn.OfType) + } + + if ok, reason := validateValueType(opc, v.Default, t); !ok { + c.addErr(v.Default.Location(), "DefaultValuesOfCorrectType", "Variable %q of type %q has invalid default value %s.\n%s", "$"+v.Name.Name, t, v.Default, reason) + } + } + } + } + + var entryPoint schema.NamedType + switch op.Type { + case query.Query: + entryPoint = s.EntryPoints["query"] + case query.Mutation: + entryPoint = s.EntryPoints["mutation"] + case query.Subscription: + entryPoint = s.EntryPoints["subscription"] + default: + panic("unreachable") + } + + validateSelectionSet(opc, op.Selections, entryPoint) + + fragUsed := make(map[*query.FragmentDecl]struct{}) + markUsedFragments(c, op.Selections, fragUsed) + for frag := range fragUsed { + fragUsedBy[frag] = append(fragUsedBy[frag], op) + } + } + + fragNames := make(nameSet) + fragVisited := make(map[*query.FragmentDecl]struct{}) + for _, frag := range doc.Fragments { + opc := &opContext{c, fragUsedBy[frag]} + + validateName(c, fragNames, frag.Name, "UniqueFragmentNames", "fragment") + validateDirectives(opc, "FRAGMENT_DEFINITION", frag.Directives) + + t := unwrapType(resolveType(c, &frag.On)) + // continue even if t is nil + if t != nil && !canBeFragment(t) { + c.addErr(frag.On.Loc, "FragmentsOnCompositeTypes", "Fragment %q cannot condition on non composite type %q.", frag.Name.Name, t) + continue + } + + validateSelectionSet(opc, frag.Selections, t) + + if _, ok := fragVisited[frag]; !ok { + detectFragmentCycle(c, frag.Selections, fragVisited, nil, map[string]int{frag.Name.Name: 0}) + } + } + + for _, frag := range doc.Fragments { + if len(fragUsedBy[frag]) == 0 { + c.addErr(frag.Loc, "NoUnusedFragments", "Fragment %q is never used.", frag.Name.Name) + } + } + + for _, op := range doc.Operations { + c.errs = append(c.errs, c.opErrs[op]...) + + opUsedVars := c.usedVars[op] + for _, v := range op.Vars { + if _, ok := opUsedVars[v]; !ok { + opSuffix := "" + if op.Name.Name != "" { + opSuffix = fmt.Sprintf(" in operation %q", op.Name.Name) + } + c.addErr(v.Loc, "NoUnusedVariables", "Variable %q is never used%s.", "$"+v.Name.Name, opSuffix) + } + } + } + + return c.errs +} + +// validates the query doesn't go deeper than maxDepth (if set). Returns whether +// or not query validated max depth to avoid excessive recursion. +func validateMaxDepth(c *opContext, sels []query.Selection, depth int) bool { + // maxDepth checking is turned off when maxDepth is 0 + if c.maxDepth == 0 { + return false + } + + exceededMaxDepth := false + + for _, sel := range sels { + switch sel := sel.(type) { + case *query.Field: + if depth > c.maxDepth { + exceededMaxDepth = true + c.addErr(sel.Alias.Loc, "MaxDepthExceeded", "Field %q has depth %d that exceeds max depth %d", sel.Name.Name, depth, c.maxDepth) + continue + } + exceededMaxDepth = exceededMaxDepth || validateMaxDepth(c, sel.Selections, depth+1) + case *query.InlineFragment: + // Depth is not checked because inline fragments resolve to other fields which are checked. + // Depth is not incremented because inline fragments have the same depth as neighboring fields + exceededMaxDepth = exceededMaxDepth || validateMaxDepth(c, sel.Selections, depth) + case *query.FragmentSpread: + // Depth is not checked because fragments resolve to other fields which are checked. + frag := c.doc.Fragments.Get(sel.Name.Name) + if frag == nil { + // In case of unknown fragment (invalid request), ignore max depth evaluation + c.addErr(sel.Loc, "MaxDepthEvaluationError", "Unknown fragment %q. Unable to evaluate depth.", sel.Name.Name) + continue + } + // Depth is not incremented because fragments have the same depth as surrounding fields + exceededMaxDepth = exceededMaxDepth || validateMaxDepth(c, frag.Selections, depth) + } + } + + return exceededMaxDepth +} + +func validateSelectionSet(c *opContext, sels []query.Selection, t schema.NamedType) { + for _, sel := range sels { + validateSelection(c, sel, t) + } + + for i, a := range sels { + for _, b := range sels[i+1:] { + c.validateOverlap(a, b, nil, nil) + } + } +} + +func validateSelection(c *opContext, sel query.Selection, t schema.NamedType) { + switch sel := sel.(type) { + case *query.Field: + validateDirectives(c, "FIELD", sel.Directives) + + fieldName := sel.Name.Name + var f *schema.Field + switch fieldName { + case "__typename": + f = &schema.Field{ + Name: "__typename", + Type: c.schema.Types["String"], + } + case "__schema": + f = &schema.Field{ + Name: "__schema", + Type: c.schema.Types["__Schema"], + } + case "__type": + f = &schema.Field{ + Name: "__type", + Args: common.InputValueList{ + &common.InputValue{ + Name: common.Ident{Name: "name"}, + Type: &common.NonNull{OfType: c.schema.Types["String"]}, + }, + }, + Type: c.schema.Types["__Type"], + } + default: + f = fields(t).Get(fieldName) + if f == nil && t != nil { + suggestion := makeSuggestion("Did you mean", fields(t).Names(), fieldName) + c.addErr(sel.Alias.Loc, "FieldsOnCorrectType", "Cannot query field %q on type %q.%s", fieldName, t, suggestion) + } + } + c.fieldMap[sel] = fieldInfo{sf: f, parent: t} + + validateArgumentLiterals(c, sel.Arguments) + if f != nil { + validateArgumentTypes(c, sel.Arguments, f.Args, sel.Alias.Loc, + func() string { return fmt.Sprintf("field %q of type %q", fieldName, t) }, + func() string { return fmt.Sprintf("Field %q", fieldName) }, + ) + } + + var ft common.Type + if f != nil { + ft = f.Type + sf := hasSubfields(ft) + if sf && sel.Selections == nil { + c.addErr(sel.Alias.Loc, "ScalarLeafs", "Field %q of type %q must have a selection of subfields. Did you mean \"%s { ... }\"?", fieldName, ft, fieldName) + } + if !sf && sel.Selections != nil { + c.addErr(sel.SelectionSetLoc, "ScalarLeafs", "Field %q must not have a selection since type %q has no subfields.", fieldName, ft) + } + } + if sel.Selections != nil { + validateSelectionSet(c, sel.Selections, unwrapType(ft)) + } + + case *query.InlineFragment: + validateDirectives(c, "INLINE_FRAGMENT", sel.Directives) + if sel.On.Name != "" { + fragTyp := unwrapType(resolveType(c.context, &sel.On)) + if fragTyp != nil && !compatible(t, fragTyp) { + c.addErr(sel.Loc, "PossibleFragmentSpreads", "Fragment cannot be spread here as objects of type %q can never be of type %q.", t, fragTyp) + } + t = fragTyp + // continue even if t is nil + } + if t != nil && !canBeFragment(t) { + c.addErr(sel.On.Loc, "FragmentsOnCompositeTypes", "Fragment cannot condition on non composite type %q.", t) + return + } + validateSelectionSet(c, sel.Selections, unwrapType(t)) + + case *query.FragmentSpread: + validateDirectives(c, "FRAGMENT_SPREAD", sel.Directives) + frag := c.doc.Fragments.Get(sel.Name.Name) + if frag == nil { + c.addErr(sel.Name.Loc, "KnownFragmentNames", "Unknown fragment %q.", sel.Name.Name) + return + } + fragTyp := c.schema.Types[frag.On.Name] + if !compatible(t, fragTyp) { + c.addErr(sel.Loc, "PossibleFragmentSpreads", "Fragment %q cannot be spread here as objects of type %q can never be of type %q.", frag.Name.Name, t, fragTyp) + } + + default: + panic("unreachable") + } +} + +func compatible(a, b common.Type) bool { + for _, pta := range possibleTypes(a) { + for _, ptb := range possibleTypes(b) { + if pta == ptb { + return true + } + } + } + return false +} + +func possibleTypes(t common.Type) []*schema.Object { + switch t := t.(type) { + case *schema.Object: + return []*schema.Object{t} + case *schema.Interface: + return t.PossibleTypes + case *schema.Union: + return t.PossibleTypes + default: + return nil + } +} + +func markUsedFragments(c *context, sels []query.Selection, fragUsed map[*query.FragmentDecl]struct{}) { + for _, sel := range sels { + switch sel := sel.(type) { + case *query.Field: + if sel.Selections != nil { + markUsedFragments(c, sel.Selections, fragUsed) + } + + case *query.InlineFragment: + markUsedFragments(c, sel.Selections, fragUsed) + + case *query.FragmentSpread: + frag := c.doc.Fragments.Get(sel.Name.Name) + if frag == nil { + return + } + + if _, ok := fragUsed[frag]; ok { + return + } + fragUsed[frag] = struct{}{} + markUsedFragments(c, frag.Selections, fragUsed) + + default: + panic("unreachable") + } + } +} + +func detectFragmentCycle(c *context, sels []query.Selection, fragVisited map[*query.FragmentDecl]struct{}, spreadPath []*query.FragmentSpread, spreadPathIndex map[string]int) { + for _, sel := range sels { + detectFragmentCycleSel(c, sel, fragVisited, spreadPath, spreadPathIndex) + } +} + +func detectFragmentCycleSel(c *context, sel query.Selection, fragVisited map[*query.FragmentDecl]struct{}, spreadPath []*query.FragmentSpread, spreadPathIndex map[string]int) { + switch sel := sel.(type) { + case *query.Field: + if sel.Selections != nil { + detectFragmentCycle(c, sel.Selections, fragVisited, spreadPath, spreadPathIndex) + } + + case *query.InlineFragment: + detectFragmentCycle(c, sel.Selections, fragVisited, spreadPath, spreadPathIndex) + + case *query.FragmentSpread: + frag := c.doc.Fragments.Get(sel.Name.Name) + if frag == nil { + return + } + + spreadPath = append(spreadPath, sel) + if i, ok := spreadPathIndex[frag.Name.Name]; ok { + cyclePath := spreadPath[i:] + via := "" + if len(cyclePath) > 1 { + names := make([]string, len(cyclePath)-1) + for i, frag := range cyclePath[:len(cyclePath)-1] { + names[i] = frag.Name.Name + } + via = " via " + strings.Join(names, ", ") + } + + locs := make([]errors.Location, len(cyclePath)) + for i, frag := range cyclePath { + locs[i] = frag.Loc + } + c.addErrMultiLoc(locs, "NoFragmentCycles", "Cannot spread fragment %q within itself%s.", frag.Name.Name, via) + return + } + + if _, ok := fragVisited[frag]; ok { + return + } + fragVisited[frag] = struct{}{} + + spreadPathIndex[frag.Name.Name] = len(spreadPath) + detectFragmentCycle(c, frag.Selections, fragVisited, spreadPath, spreadPathIndex) + delete(spreadPathIndex, frag.Name.Name) + + default: + panic("unreachable") + } +} + +func (c *context) validateOverlap(a, b query.Selection, reasons *[]string, locs *[]errors.Location) { + if a == b { + return + } + + if _, ok := c.overlapValidated[selectionPair{a, b}]; ok { + return + } + c.overlapValidated[selectionPair{a, b}] = struct{}{} + c.overlapValidated[selectionPair{b, a}] = struct{}{} + + switch a := a.(type) { + case *query.Field: + switch b := b.(type) { + case *query.Field: + if b.Alias.Loc.Before(a.Alias.Loc) { + a, b = b, a + } + if reasons2, locs2 := c.validateFieldOverlap(a, b); len(reasons2) != 0 { + locs2 = append(locs2, a.Alias.Loc, b.Alias.Loc) + if reasons == nil { + c.addErrMultiLoc(locs2, "OverlappingFieldsCanBeMerged", "Fields %q conflict because %s. Use different aliases on the fields to fetch both if this was intentional.", a.Alias.Name, strings.Join(reasons2, " and ")) + return + } + for _, r := range reasons2 { + *reasons = append(*reasons, fmt.Sprintf("subfields %q conflict because %s", a.Alias.Name, r)) + } + *locs = append(*locs, locs2...) + } + + case *query.InlineFragment: + for _, sel := range b.Selections { + c.validateOverlap(a, sel, reasons, locs) + } + + case *query.FragmentSpread: + if frag := c.doc.Fragments.Get(b.Name.Name); frag != nil { + for _, sel := range frag.Selections { + c.validateOverlap(a, sel, reasons, locs) + } + } + + default: + panic("unreachable") + } + + case *query.InlineFragment: + for _, sel := range a.Selections { + c.validateOverlap(sel, b, reasons, locs) + } + + case *query.FragmentSpread: + if frag := c.doc.Fragments.Get(a.Name.Name); frag != nil { + for _, sel := range frag.Selections { + c.validateOverlap(sel, b, reasons, locs) + } + } + + default: + panic("unreachable") + } +} + +func (c *context) validateFieldOverlap(a, b *query.Field) ([]string, []errors.Location) { + if a.Alias.Name != b.Alias.Name { + return nil, nil + } + + if asf := c.fieldMap[a].sf; asf != nil { + if bsf := c.fieldMap[b].sf; bsf != nil { + if !typesCompatible(asf.Type, bsf.Type) { + return []string{fmt.Sprintf("they return conflicting types %s and %s", asf.Type, bsf.Type)}, nil + } + } + } + + at := c.fieldMap[a].parent + bt := c.fieldMap[b].parent + if at == nil || bt == nil || at == bt { + if a.Name.Name != b.Name.Name { + return []string{fmt.Sprintf("%s and %s are different fields", a.Name.Name, b.Name.Name)}, nil + } + + if argumentsConflict(a.Arguments, b.Arguments) { + return []string{"they have differing arguments"}, nil + } + } + + var reasons []string + var locs []errors.Location + for _, a2 := range a.Selections { + for _, b2 := range b.Selections { + c.validateOverlap(a2, b2, &reasons, &locs) + } + } + return reasons, locs +} + +func argumentsConflict(a, b common.ArgumentList) bool { + if len(a) != len(b) { + return true + } + for _, argA := range a { + valB, ok := b.Get(argA.Name.Name) + if !ok || !reflect.DeepEqual(argA.Value.Value(nil), valB.Value(nil)) { + return true + } + } + return false +} + +func fields(t common.Type) schema.FieldList { + switch t := t.(type) { + case *schema.Object: + return t.Fields + case *schema.Interface: + return t.Fields + default: + return nil + } +} + +func unwrapType(t common.Type) schema.NamedType { + if t == nil { + return nil + } + for { + switch t2 := t.(type) { + case schema.NamedType: + return t2 + case *common.List: + t = t2.OfType + case *common.NonNull: + t = t2.OfType + default: + panic("unreachable") + } + } +} + +func resolveType(c *context, t common.Type) common.Type { + t2, err := common.ResolveType(t, c.schema.Resolve) + if err != nil { + c.errs = append(c.errs, err) + } + return t2 +} + +func validateDirectives(c *opContext, loc string, directives common.DirectiveList) { + directiveNames := make(nameSet) + for _, d := range directives { + dirName := d.Name.Name + validateNameCustomMsg(c.context, directiveNames, d.Name, "UniqueDirectivesPerLocation", func() string { + return fmt.Sprintf("The directive %q can only be used once at this location.", dirName) + }) + + validateArgumentLiterals(c, d.Args) + + dd, ok := c.schema.Directives[dirName] + if !ok { + c.addErr(d.Name.Loc, "KnownDirectives", "Unknown directive %q.", dirName) + continue + } + + locOK := false + for _, allowedLoc := range dd.Locs { + if loc == allowedLoc { + locOK = true + break + } + } + if !locOK { + c.addErr(d.Name.Loc, "KnownDirectives", "Directive %q may not be used on %s.", dirName, loc) + } + + validateArgumentTypes(c, d.Args, dd.Args, d.Name.Loc, + func() string { return fmt.Sprintf("directive %q", "@"+dirName) }, + func() string { return fmt.Sprintf("Directive %q", "@"+dirName) }, + ) + } +} + +type nameSet map[string]errors.Location + +func validateName(c *context, set nameSet, name common.Ident, rule string, kind string) { + validateNameCustomMsg(c, set, name, rule, func() string { + return fmt.Sprintf("There can be only one %s named %q.", kind, name.Name) + }) +} + +func validateNameCustomMsg(c *context, set nameSet, name common.Ident, rule string, msg func() string) { + if loc, ok := set[name.Name]; ok { + c.addErrMultiLoc([]errors.Location{loc, name.Loc}, rule, msg()) + return + } + set[name.Name] = name.Loc +} + +func validateArgumentTypes(c *opContext, args common.ArgumentList, argDecls common.InputValueList, loc errors.Location, owner1, owner2 func() string) { + for _, selArg := range args { + arg := argDecls.Get(selArg.Name.Name) + if arg == nil { + c.addErr(selArg.Name.Loc, "KnownArgumentNames", "Unknown argument %q on %s.", selArg.Name.Name, owner1()) + continue + } + value := selArg.Value + if ok, reason := validateValueType(c, value, arg.Type); !ok { + c.addErr(value.Location(), "ArgumentsOfCorrectType", "Argument %q has invalid value %s.\n%s", arg.Name.Name, value, reason) + } + } + for _, decl := range argDecls { + if _, ok := decl.Type.(*common.NonNull); ok { + if _, ok := args.Get(decl.Name.Name); !ok { + c.addErr(loc, "ProvidedNonNullArguments", "%s argument %q of type %q is required but not provided.", owner2(), decl.Name.Name, decl.Type) + } + } + } +} + +func validateArgumentLiterals(c *opContext, args common.ArgumentList) { + argNames := make(nameSet) + for _, arg := range args { + validateName(c.context, argNames, arg.Name, "UniqueArgumentNames", "argument") + validateLiteral(c, arg.Value) + } +} + +func validateLiteral(c *opContext, l common.Literal) { + switch l := l.(type) { + case *common.ObjectLit: + fieldNames := make(nameSet) + for _, f := range l.Fields { + validateName(c.context, fieldNames, f.Name, "UniqueInputFieldNames", "input field") + validateLiteral(c, f.Value) + } + case *common.ListLit: + for _, entry := range l.Entries { + validateLiteral(c, entry) + } + case *common.Variable: + for _, op := range c.ops { + v := op.Vars.Get(l.Name) + if v == nil { + byOp := "" + if op.Name.Name != "" { + byOp = fmt.Sprintf(" by operation %q", op.Name.Name) + } + c.opErrs[op] = append(c.opErrs[op], &errors.QueryError{ + Message: fmt.Sprintf("Variable %q is not defined%s.", "$"+l.Name, byOp), + Locations: []errors.Location{l.Loc, op.Loc}, + Rule: "NoUndefinedVariables", + }) + continue + } + c.usedVars[op][v] = struct{}{} + } + } +} + +func validateValueType(c *opContext, v common.Literal, t common.Type) (bool, string) { + if v, ok := v.(*common.Variable); ok { + for _, op := range c.ops { + if v2 := op.Vars.Get(v.Name); v2 != nil { + t2, err := common.ResolveType(v2.Type, c.schema.Resolve) + if _, ok := t2.(*common.NonNull); !ok && v2.Default != nil { + t2 = &common.NonNull{OfType: t2} + } + if err == nil && !typeCanBeUsedAs(t2, t) { + c.addErrMultiLoc([]errors.Location{v2.Loc, v.Loc}, "VariablesInAllowedPosition", "Variable %q of type %q used in position expecting type %q.", "$"+v.Name, t2, t) + } + } + } + return true, "" + } + + if nn, ok := t.(*common.NonNull); ok { + if isNull(v) { + return false, fmt.Sprintf("Expected %q, found null.", t) + } + t = nn.OfType + } + if isNull(v) { + return true, "" + } + + switch t := t.(type) { + case *schema.Scalar, *schema.Enum: + if lit, ok := v.(*common.BasicLit); ok { + if validateBasicLit(lit, t) { + return true, "" + } + } + + case *common.List: + list, ok := v.(*common.ListLit) + if !ok { + return validateValueType(c, v, t.OfType) // single value instead of list + } + for i, entry := range list.Entries { + if ok, reason := validateValueType(c, entry, t.OfType); !ok { + return false, fmt.Sprintf("In element #%d: %s", i, reason) + } + } + return true, "" + + case *schema.InputObject: + v, ok := v.(*common.ObjectLit) + if !ok { + return false, fmt.Sprintf("Expected %q, found not an object.", t) + } + for _, f := range v.Fields { + name := f.Name.Name + iv := t.Values.Get(name) + if iv == nil { + return false, fmt.Sprintf("In field %q: Unknown field.", name) + } + if ok, reason := validateValueType(c, f.Value, iv.Type); !ok { + return false, fmt.Sprintf("In field %q: %s", name, reason) + } + } + for _, iv := range t.Values { + found := false + for _, f := range v.Fields { + if f.Name.Name == iv.Name.Name { + found = true + break + } + } + if !found { + if _, ok := iv.Type.(*common.NonNull); ok && iv.Default == nil { + return false, fmt.Sprintf("In field %q: Expected %q, found null.", iv.Name.Name, iv.Type) + } + } + } + return true, "" + } + + return false, fmt.Sprintf("Expected type %q, found %s.", t, v) +} + +func validateBasicLit(v *common.BasicLit, t common.Type) bool { + switch t := t.(type) { + case *schema.Scalar: + switch t.Name { + case "Int": + if v.Type != scanner.Int { + return false + } + f, err := strconv.ParseFloat(v.Text, 64) + if err != nil { + panic(err) + } + return f >= math.MinInt32 && f <= math.MaxInt32 + case "Float": + return v.Type == scanner.Int || v.Type == scanner.Float + case "String": + return v.Type == scanner.String + case "Boolean": + return v.Type == scanner.Ident && (v.Text == "true" || v.Text == "false") + case "ID": + return v.Type == scanner.Int || v.Type == scanner.String + default: + //TODO: Type-check against expected type by Unmarshalling + return true + } + + case *schema.Enum: + if v.Type != scanner.Ident { + return false + } + for _, option := range t.Values { + if option.Name == v.Text { + return true + } + } + return false + } + + return false +} + +func canBeFragment(t common.Type) bool { + switch t.(type) { + case *schema.Object, *schema.Interface, *schema.Union: + return true + default: + return false + } +} + +func canBeInput(t common.Type) bool { + switch t := t.(type) { + case *schema.InputObject, *schema.Scalar, *schema.Enum: + return true + case *common.List: + return canBeInput(t.OfType) + case *common.NonNull: + return canBeInput(t.OfType) + default: + return false + } +} + +func hasSubfields(t common.Type) bool { + switch t := t.(type) { + case *schema.Object, *schema.Interface, *schema.Union: + return true + case *common.List: + return hasSubfields(t.OfType) + case *common.NonNull: + return hasSubfields(t.OfType) + default: + return false + } +} + +func isLeaf(t common.Type) bool { + switch t.(type) { + case *schema.Scalar, *schema.Enum: + return true + default: + return false + } +} + +func isNull(lit interface{}) bool { + _, ok := lit.(*common.NullLit) + return ok +} + +func typesCompatible(a, b common.Type) bool { + al, aIsList := a.(*common.List) + bl, bIsList := b.(*common.List) + if aIsList || bIsList { + return aIsList && bIsList && typesCompatible(al.OfType, bl.OfType) + } + + ann, aIsNN := a.(*common.NonNull) + bnn, bIsNN := b.(*common.NonNull) + if aIsNN || bIsNN { + return aIsNN && bIsNN && typesCompatible(ann.OfType, bnn.OfType) + } + + if isLeaf(a) || isLeaf(b) { + return a == b + } + + return true +} + +func typeCanBeUsedAs(t, as common.Type) bool { + nnT, okT := t.(*common.NonNull) + if okT { + t = nnT.OfType + } + + nnAs, okAs := as.(*common.NonNull) + if okAs { + as = nnAs.OfType + if !okT { + return false // nullable can not be used as non-null + } + } + + if t == as { + return true + } + + if lT, ok := t.(*common.List); ok { + if lAs, ok := as.(*common.List); ok { + return typeCanBeUsedAs(lT.OfType, lAs.OfType) + } + } + return false +} diff --git a/vendor/github.com/graph-gophers/graphql-go/introspection.go b/vendor/github.com/graph-gophers/graphql-go/introspection.go new file mode 100644 index 000000000000..7e515cf25f4b --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/introspection.go @@ -0,0 +1,117 @@ +package graphql + +import ( + "context" + "encoding/json" + + "github.com/graph-gophers/graphql-go/internal/exec/resolvable" + "github.com/graph-gophers/graphql-go/introspection" +) + +// Inspect allows inspection of the given schema. +func (s *Schema) Inspect() *introspection.Schema { + return introspection.WrapSchema(s.schema) +} + +// ToJSON encodes the schema in a JSON format used by tools like Relay. +func (s *Schema) ToJSON() ([]byte, error) { + result := s.exec(context.Background(), introspectionQuery, "", nil, &resolvable.Schema{ + Query: &resolvable.Object{}, + Schema: *s.schema, + }) + if len(result.Errors) != 0 { + panic(result.Errors[0]) + } + return json.MarshalIndent(result.Data, "", "\t") +} + +var introspectionQuery = ` + query { + __schema { + queryType { name } + mutationType { name } + subscriptionType { name } + types { + ...FullType + } + directives { + name + description + locations + args { + ...InputValue + } + } + } + } + fragment FullType on __Type { + kind + name + description + fields(includeDeprecated: true) { + name + description + args { + ...InputValue + } + type { + ...TypeRef + } + isDeprecated + deprecationReason + } + inputFields { + ...InputValue + } + interfaces { + ...TypeRef + } + enumValues(includeDeprecated: true) { + name + description + isDeprecated + deprecationReason + } + possibleTypes { + ...TypeRef + } + } + fragment InputValue on __InputValue { + name + description + type { ...TypeRef } + defaultValue + } + fragment TypeRef on __Type { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + ofType { + kind + name + } + } + } + } + } + } + } + } +` diff --git a/vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go b/vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go new file mode 100644 index 000000000000..2f4acad0a689 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go @@ -0,0 +1,313 @@ +package introspection + +import ( + "sort" + + "github.com/graph-gophers/graphql-go/internal/common" + "github.com/graph-gophers/graphql-go/internal/schema" +) + +type Schema struct { + schema *schema.Schema +} + +// WrapSchema is only used internally. +func WrapSchema(schema *schema.Schema) *Schema { + return &Schema{schema} +} + +func (r *Schema) Types() []*Type { + var names []string + for name := range r.schema.Types { + names = append(names, name) + } + sort.Strings(names) + + l := make([]*Type, len(names)) + for i, name := range names { + l[i] = &Type{r.schema.Types[name]} + } + return l +} + +func (r *Schema) Directives() []*Directive { + var names []string + for name := range r.schema.Directives { + names = append(names, name) + } + sort.Strings(names) + + l := make([]*Directive, len(names)) + for i, name := range names { + l[i] = &Directive{r.schema.Directives[name]} + } + return l +} + +func (r *Schema) QueryType() *Type { + t, ok := r.schema.EntryPoints["query"] + if !ok { + return nil + } + return &Type{t} +} + +func (r *Schema) MutationType() *Type { + t, ok := r.schema.EntryPoints["mutation"] + if !ok { + return nil + } + return &Type{t} +} + +func (r *Schema) SubscriptionType() *Type { + t, ok := r.schema.EntryPoints["subscription"] + if !ok { + return nil + } + return &Type{t} +} + +type Type struct { + typ common.Type +} + +// WrapType is only used internally. +func WrapType(typ common.Type) *Type { + return &Type{typ} +} + +func (r *Type) Kind() string { + return r.typ.Kind() +} + +func (r *Type) Name() *string { + if named, ok := r.typ.(schema.NamedType); ok { + name := named.TypeName() + return &name + } + return nil +} + +func (r *Type) Description() *string { + if named, ok := r.typ.(schema.NamedType); ok { + desc := named.Description() + if desc == "" { + return nil + } + return &desc + } + return nil +} + +func (r *Type) Fields(args *struct{ IncludeDeprecated bool }) *[]*Field { + var fields schema.FieldList + switch t := r.typ.(type) { + case *schema.Object: + fields = t.Fields + case *schema.Interface: + fields = t.Fields + default: + return nil + } + + var l []*Field + for _, f := range fields { + if d := f.Directives.Get("deprecated"); d == nil || args.IncludeDeprecated { + l = append(l, &Field{f}) + } + } + return &l +} + +func (r *Type) Interfaces() *[]*Type { + t, ok := r.typ.(*schema.Object) + if !ok { + return nil + } + + l := make([]*Type, len(t.Interfaces)) + for i, intf := range t.Interfaces { + l[i] = &Type{intf} + } + return &l +} + +func (r *Type) PossibleTypes() *[]*Type { + var possibleTypes []*schema.Object + switch t := r.typ.(type) { + case *schema.Interface: + possibleTypes = t.PossibleTypes + case *schema.Union: + possibleTypes = t.PossibleTypes + default: + return nil + } + + l := make([]*Type, len(possibleTypes)) + for i, intf := range possibleTypes { + l[i] = &Type{intf} + } + return &l +} + +func (r *Type) EnumValues(args *struct{ IncludeDeprecated bool }) *[]*EnumValue { + t, ok := r.typ.(*schema.Enum) + if !ok { + return nil + } + + var l []*EnumValue + for _, v := range t.Values { + if d := v.Directives.Get("deprecated"); d == nil || args.IncludeDeprecated { + l = append(l, &EnumValue{v}) + } + } + return &l +} + +func (r *Type) InputFields() *[]*InputValue { + t, ok := r.typ.(*schema.InputObject) + if !ok { + return nil + } + + l := make([]*InputValue, len(t.Values)) + for i, v := range t.Values { + l[i] = &InputValue{v} + } + return &l +} + +func (r *Type) OfType() *Type { + switch t := r.typ.(type) { + case *common.List: + return &Type{t.OfType} + case *common.NonNull: + return &Type{t.OfType} + default: + return nil + } +} + +type Field struct { + field *schema.Field +} + +func (r *Field) Name() string { + return r.field.Name +} + +func (r *Field) Description() *string { + if r.field.Desc == "" { + return nil + } + return &r.field.Desc +} + +func (r *Field) Args() []*InputValue { + l := make([]*InputValue, len(r.field.Args)) + for i, v := range r.field.Args { + l[i] = &InputValue{v} + } + return l +} + +func (r *Field) Type() *Type { + return &Type{r.field.Type} +} + +func (r *Field) IsDeprecated() bool { + return r.field.Directives.Get("deprecated") != nil +} + +func (r *Field) DeprecationReason() *string { + d := r.field.Directives.Get("deprecated") + if d == nil { + return nil + } + reason := d.Args.MustGet("reason").Value(nil).(string) + return &reason +} + +type InputValue struct { + value *common.InputValue +} + +func (r *InputValue) Name() string { + return r.value.Name.Name +} + +func (r *InputValue) Description() *string { + if r.value.Desc == "" { + return nil + } + return &r.value.Desc +} + +func (r *InputValue) Type() *Type { + return &Type{r.value.Type} +} + +func (r *InputValue) DefaultValue() *string { + if r.value.Default == nil { + return nil + } + s := r.value.Default.String() + return &s +} + +type EnumValue struct { + value *schema.EnumValue +} + +func (r *EnumValue) Name() string { + return r.value.Name +} + +func (r *EnumValue) Description() *string { + if r.value.Desc == "" { + return nil + } + return &r.value.Desc +} + +func (r *EnumValue) IsDeprecated() bool { + return r.value.Directives.Get("deprecated") != nil +} + +func (r *EnumValue) DeprecationReason() *string { + d := r.value.Directives.Get("deprecated") + if d == nil { + return nil + } + reason := d.Args.MustGet("reason").Value(nil).(string) + return &reason +} + +type Directive struct { + directive *schema.DirectiveDecl +} + +func (r *Directive) Name() string { + return r.directive.Name +} + +func (r *Directive) Description() *string { + if r.directive.Desc == "" { + return nil + } + return &r.directive.Desc +} + +func (r *Directive) Locations() []string { + return r.directive.Locs +} + +func (r *Directive) Args() []*InputValue { + l := make([]*InputValue, len(r.directive.Args)) + for i, v := range r.directive.Args { + l[i] = &InputValue{v} + } + return l +} diff --git a/vendor/github.com/graph-gophers/graphql-go/log/log.go b/vendor/github.com/graph-gophers/graphql-go/log/log.go new file mode 100644 index 000000000000..25569af7cacf --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/log/log.go @@ -0,0 +1,23 @@ +package log + +import ( + "context" + "log" + "runtime" +) + +// Logger is the interface used to log panics that occur during query execution. It is settable via graphql.ParseSchema +type Logger interface { + LogPanic(ctx context.Context, value interface{}) +} + +// DefaultLogger is the default logger used to log panics that occur during query execution +type DefaultLogger struct{} + +// LogPanic is used to log recovered panic values that occur during query execution +func (l *DefaultLogger) LogPanic(_ context.Context, value interface{}) { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + log.Printf("graphql: panic occurred: %v\n%s", value, buf) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/relay/relay.go b/vendor/github.com/graph-gophers/graphql-go/relay/relay.go new file mode 100644 index 000000000000..78e4dfdd51d5 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/relay/relay.go @@ -0,0 +1,70 @@ +package relay + +import ( + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "net/http" + "strings" + + graphql "github.com/graph-gophers/graphql-go" +) + +func MarshalID(kind string, spec interface{}) graphql.ID { + d, err := json.Marshal(spec) + if err != nil { + panic(fmt.Errorf("relay.MarshalID: %s", err)) + } + return graphql.ID(base64.URLEncoding.EncodeToString(append([]byte(kind+":"), d...))) +} + +func UnmarshalKind(id graphql.ID) string { + s, err := base64.URLEncoding.DecodeString(string(id)) + if err != nil { + return "" + } + i := strings.IndexByte(string(s), ':') + if i == -1 { + return "" + } + return string(s[:i]) +} + +func UnmarshalSpec(id graphql.ID, v interface{}) error { + s, err := base64.URLEncoding.DecodeString(string(id)) + if err != nil { + return err + } + i := strings.IndexByte(string(s), ':') + if i == -1 { + return errors.New("invalid graphql.ID") + } + return json.Unmarshal([]byte(s[i+1:]), v) +} + +type Handler struct { + Schema *graphql.Schema +} + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + var params struct { + Query string `json:"query"` + OperationName string `json:"operationName"` + Variables map[string]interface{} `json:"variables"` + } + if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + response := h.Schema.Exec(r.Context(), params.Query, params.OperationName, params.Variables) + responseJSON, err := json.Marshal(response) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write(responseJSON) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/time.go b/vendor/github.com/graph-gophers/graphql-go/time.go new file mode 100644 index 000000000000..829c502275d7 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/time.go @@ -0,0 +1,51 @@ +package graphql + +import ( + "encoding/json" + "fmt" + "time" +) + +// Time is a custom GraphQL type to represent an instant in time. It has to be added to a schema +// via "scalar Time" since it is not a predeclared GraphQL type like "ID". +type Time struct { + time.Time +} + +// ImplementsGraphQLType maps this custom Go type +// to the graphql scalar type in the schema. +func (Time) ImplementsGraphQLType(name string) bool { + return name == "Time" +} + +// UnmarshalGraphQL is a custom unmarshaler for Time +// +// This function will be called whenever you use the +// time scalar as an input +func (t *Time) UnmarshalGraphQL(input interface{}) error { + switch input := input.(type) { + case time.Time: + t.Time = input + return nil + case string: + var err error + t.Time, err = time.Parse(time.RFC3339, input) + return err + case int: + t.Time = time.Unix(int64(input), 0) + return nil + case float64: + t.Time = time.Unix(int64(input), 0) + return nil + default: + return fmt.Errorf("wrong type") + } +} + +// MarshalJSON is a custom marshaler for Time +// +// This function will be called whenever you +// query for fields that use the Time type +func (t Time) MarshalJSON() ([]byte, error) { + return json.Marshal(t.Time) +} diff --git a/vendor/github.com/graph-gophers/graphql-go/trace/trace.go b/vendor/github.com/graph-gophers/graphql-go/trace/trace.go new file mode 100644 index 000000000000..68b856ae7199 --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/trace/trace.go @@ -0,0 +1,80 @@ +package trace + +import ( + "context" + "fmt" + + "github.com/graph-gophers/graphql-go/errors" + "github.com/graph-gophers/graphql-go/introspection" + opentracing "github.com/opentracing/opentracing-go" + "github.com/opentracing/opentracing-go/ext" + "github.com/opentracing/opentracing-go/log" +) + +type TraceQueryFinishFunc func([]*errors.QueryError) +type TraceFieldFinishFunc func(*errors.QueryError) + +type Tracer interface { + TraceQuery(ctx context.Context, queryString string, operationName string, variables map[string]interface{}, varTypes map[string]*introspection.Type) (context.Context, TraceQueryFinishFunc) + TraceField(ctx context.Context, label, typeName, fieldName string, trivial bool, args map[string]interface{}) (context.Context, TraceFieldFinishFunc) +} + +type OpenTracingTracer struct{} + +func (OpenTracingTracer) TraceQuery(ctx context.Context, queryString string, operationName string, variables map[string]interface{}, varTypes map[string]*introspection.Type) (context.Context, TraceQueryFinishFunc) { + span, spanCtx := opentracing.StartSpanFromContext(ctx, "GraphQL request") + span.SetTag("graphql.query", queryString) + + if operationName != "" { + span.SetTag("graphql.operationName", operationName) + } + + if len(variables) != 0 { + span.LogFields(log.Object("graphql.variables", variables)) + } + + return spanCtx, func(errs []*errors.QueryError) { + if len(errs) > 0 { + msg := errs[0].Error() + if len(errs) > 1 { + msg += fmt.Sprintf(" (and %d more errors)", len(errs)-1) + } + ext.Error.Set(span, true) + span.SetTag("graphql.error", msg) + } + span.Finish() + } +} + +func (OpenTracingTracer) TraceField(ctx context.Context, label, typeName, fieldName string, trivial bool, args map[string]interface{}) (context.Context, TraceFieldFinishFunc) { + if trivial { + return ctx, noop + } + + span, spanCtx := opentracing.StartSpanFromContext(ctx, label) + span.SetTag("graphql.type", typeName) + span.SetTag("graphql.field", fieldName) + for name, value := range args { + span.SetTag("graphql.args."+name, value) + } + + return spanCtx, func(err *errors.QueryError) { + if err != nil { + ext.Error.Set(span, true) + span.SetTag("graphql.error", err.Error()) + } + span.Finish() + } +} + +func noop(*errors.QueryError) {} + +type NoopTracer struct{} + +func (NoopTracer) TraceQuery(ctx context.Context, queryString string, operationName string, variables map[string]interface{}, varTypes map[string]*introspection.Type) (context.Context, TraceQueryFinishFunc) { + return ctx, func(errs []*errors.QueryError) {} +} + +func (NoopTracer) TraceField(ctx context.Context, label, typeName, fieldName string, trivial bool, args map[string]interface{}) (context.Context, TraceFieldFinishFunc) { + return ctx, func(err *errors.QueryError) {} +} diff --git a/vendor/github.com/graph-gophers/graphql-go/trace/validation_trace.go b/vendor/github.com/graph-gophers/graphql-go/trace/validation_trace.go new file mode 100644 index 000000000000..e223f0fdbc9c --- /dev/null +++ b/vendor/github.com/graph-gophers/graphql-go/trace/validation_trace.go @@ -0,0 +1,17 @@ +package trace + +import ( + "github.com/graph-gophers/graphql-go/errors" +) + +type TraceValidationFinishFunc = TraceQueryFinishFunc + +type ValidationTracer interface { + TraceValidation() TraceValidationFinishFunc +} + +type NoopValidationTracer struct{} + +func (NoopValidationTracer) TraceValidation() TraceValidationFinishFunc { + return func(errs []*errors.QueryError) {} +} diff --git a/vendor/github.com/howeyc/fsnotify/AUTHORS b/vendor/github.com/howeyc/fsnotify/AUTHORS new file mode 100644 index 000000000000..e52b72f83a18 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/AUTHORS @@ -0,0 +1,28 @@ +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# You can update this list using the following command: +# +# $ git shortlog -se | awk '{print $2 " " $3 " " $4}' + +# Please keep the list sorted. + +Adrien Bustany +Caleb Spare +Case Nelson +Chris Howey +Christoffer Buchholz +Dave Cheney +Francisco Souza +John C Barstow +Kelvin Fo +Nathan Youngman +Paul Hammond +Pursuit92 +Rob Figueiredo +Travis Cline +Tudor Golubenco +bronze1man +debrando +henrikedwards diff --git a/vendor/github.com/howeyc/fsnotify/CHANGELOG.md b/vendor/github.com/howeyc/fsnotify/CHANGELOG.md new file mode 100644 index 000000000000..761686aa9539 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/CHANGELOG.md @@ -0,0 +1,160 @@ +# Changelog + +## v0.9.0 / 2014-01-17 + +* IsAttrib() for events that only concern a file's metadata [#79][] (thanks @abustany) +* [Fix] kqueue: fix deadlock [#77][] (thanks @cespare) +* [NOTICE] Development has moved to `code.google.com/p/go.exp/fsnotify` in preparation for inclusion in the Go standard library. + +## v0.8.12 / 2013-11-13 + +* [API] Remove FD_SET and friends from Linux adapter + +## v0.8.11 / 2013-11-02 + +* [Doc] Add Changelog [#72][] (thanks @nathany) +* [Doc] Spotlight and double modify events on OS X [#62][] (reported by @paulhammond) + +## v0.8.10 / 2013-10-19 + +* [Fix] kqueue: remove file watches when parent directory is removed [#71][] (reported by @mdwhatcott) +* [Fix] kqueue: race between Close and readEvents [#70][] (reported by @bernerdschaefer) +* [Doc] specify OS-specific limits in README (thanks @debrando) + +## v0.8.9 / 2013-09-08 + +* [Doc] Contributing (thanks @nathany) +* [Doc] update package path in example code [#63][] (thanks @paulhammond) +* [Doc] GoCI badge in README (Linux only) [#60][] +* [Doc] Cross-platform testing with Vagrant [#59][] (thanks @nathany) + +## v0.8.8 / 2013-06-17 + +* [Fix] Windows: handle `ERROR_MORE_DATA` on Windows [#49][] (thanks @jbowtie) + +## v0.8.7 / 2013-06-03 + +* [API] Make syscall flags internal +* [Fix] inotify: ignore event changes +* [Fix] race in symlink test [#45][] (reported by @srid) +* [Fix] tests on Windows +* lower case error messages + +## v0.8.6 / 2013-05-23 + +* kqueue: Use EVT_ONLY flag on Darwin +* [Doc] Update README with full example + +## v0.8.5 / 2013-05-09 + +* [Fix] inotify: allow monitoring of "broken" symlinks (thanks @tsg) + +## v0.8.4 / 2013-04-07 + +* [Fix] kqueue: watch all file events [#40][] (thanks @ChrisBuchholz) + +## v0.8.3 / 2013-03-13 + +* [Fix] inoitfy/kqueue memory leak [#36][] (reported by @nbkolchin) +* [Fix] kqueue: use fsnFlags for watching a directory [#33][] (reported by @nbkolchin) + +## v0.8.2 / 2013-02-07 + +* [Doc] add Authors +* [Fix] fix data races for map access [#29][] (thanks @fsouza) + +## v0.8.1 / 2013-01-09 + +* [Fix] Windows path separators +* [Doc] BSD License + +## v0.8.0 / 2012-11-09 + +* kqueue: directory watching improvements (thanks @vmirage) +* inotify: add `IN_MOVED_TO` [#25][] (requested by @cpisto) +* [Fix] kqueue: deleting watched directory [#24][] (reported by @jakerr) + +## v0.7.4 / 2012-10-09 + +* [Fix] inotify: fixes from https://codereview.appspot.com/5418045/ (ugorji) +* [Fix] kqueue: preserve watch flags when watching for delete [#21][] (reported by @robfig) +* [Fix] kqueue: watch the directory even if it isn't a new watch (thanks @robfig) +* [Fix] kqueue: modify after recreation of file + +## v0.7.3 / 2012-09-27 + +* [Fix] kqueue: watch with an existing folder inside the watched folder (thanks @vmirage) +* [Fix] kqueue: no longer get duplicate CREATE events + +## v0.7.2 / 2012-09-01 + +* kqueue: events for created directories + +## v0.7.1 / 2012-07-14 + +* [Fix] for renaming files + +## v0.7.0 / 2012-07-02 + +* [Feature] FSNotify flags +* [Fix] inotify: Added file name back to event path + +## v0.6.0 / 2012-06-06 + +* kqueue: watch files after directory created (thanks @tmc) + +## v0.5.1 / 2012-05-22 + +* [Fix] inotify: remove all watches before Close() + +## v0.5.0 / 2012-05-03 + +* [API] kqueue: return errors during watch instead of sending over channel +* kqueue: match symlink behavior on Linux +* inotify: add `DELETE_SELF` (requested by @taralx) +* [Fix] kqueue: handle EINTR (reported by @robfig) +* [Doc] Godoc example [#1][] (thanks @davecheney) + +## v0.4.0 / 2012-03-30 + +* Go 1 released: build with go tool +* [Feature] Windows support using winfsnotify +* Windows does not have attribute change notifications +* Roll attribute notifications into IsModify + +## v0.3.0 / 2012-02-19 + +* kqueue: add files when watch directory + +## v0.2.0 / 2011-12-30 + +* update to latest Go weekly code + +## v0.1.0 / 2011-10-19 + +* kqueue: add watch on file creation to match inotify +* kqueue: create file event +* inotify: ignore `IN_IGNORED` events +* event String() +* linux: common FileEvent functions +* initial commit + +[#79]: https://github.com/howeyc/fsnotify/pull/79 +[#77]: https://github.com/howeyc/fsnotify/pull/77 +[#72]: https://github.com/howeyc/fsnotify/issues/72 +[#71]: https://github.com/howeyc/fsnotify/issues/71 +[#70]: https://github.com/howeyc/fsnotify/issues/70 +[#63]: https://github.com/howeyc/fsnotify/issues/63 +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#60]: https://github.com/howeyc/fsnotify/issues/60 +[#59]: https://github.com/howeyc/fsnotify/issues/59 +[#49]: https://github.com/howeyc/fsnotify/issues/49 +[#45]: https://github.com/howeyc/fsnotify/issues/45 +[#40]: https://github.com/howeyc/fsnotify/issues/40 +[#36]: https://github.com/howeyc/fsnotify/issues/36 +[#33]: https://github.com/howeyc/fsnotify/issues/33 +[#29]: https://github.com/howeyc/fsnotify/issues/29 +[#25]: https://github.com/howeyc/fsnotify/issues/25 +[#24]: https://github.com/howeyc/fsnotify/issues/24 +[#21]: https://github.com/howeyc/fsnotify/issues/21 +[#1]: https://github.com/howeyc/fsnotify/issues/1 diff --git a/vendor/github.com/howeyc/fsnotify/CONTRIBUTING.md b/vendor/github.com/howeyc/fsnotify/CONTRIBUTING.md new file mode 100644 index 000000000000..b2025d72c395 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/CONTRIBUTING.md @@ -0,0 +1,7 @@ +# Contributing + +## Moving Notice + +There is a fork being actively developed with a new API in preparation for the Go Standard Library: +[github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify) + diff --git a/vendor/github.com/howeyc/fsnotify/LICENSE b/vendor/github.com/howeyc/fsnotify/LICENSE new file mode 100644 index 000000000000..f21e54080090 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright (c) 2012 fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/howeyc/fsnotify/README.md b/vendor/github.com/howeyc/fsnotify/README.md new file mode 100644 index 000000000000..7fdaf7c995e7 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/README.md @@ -0,0 +1,93 @@ +# File system notifications for Go + +[![GoDoc](https://godoc.org/github.com/howeyc/fsnotify?status.png)](http://godoc.org/github.com/howeyc/fsnotify) + +Cross platform: Windows, Linux, BSD and OS X. + +## Moving Notice + +There is a fork being actively developed with a new API in preparation for the Go Standard Library: +[github.com/go-fsnotify/fsnotify](https://github.com/go-fsnotify/fsnotify) + +## Example: + +```go +package main + +import ( + "log" + + "github.com/howeyc/fsnotify" +) + +func main() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + + done := make(chan bool) + + // Process events + go func() { + for { + select { + case ev := <-watcher.Event: + log.Println("event:", ev) + case err := <-watcher.Error: + log.Println("error:", err) + } + } + }() + + err = watcher.Watch("testDir") + if err != nil { + log.Fatal(err) + } + + // Hang so program doesn't exit + <-done + + /* ... do stuff ... */ + watcher.Close() +} +``` + +For each event: +* Name +* IsCreate() +* IsDelete() +* IsModify() +* IsRename() + +## FAQ + +**When a file is moved to another directory is it still being watched?** + +No (it shouldn't be, unless you are watching where it was moved to). + +**When I watch a directory, are all subdirectories watched as well?** + +No, you must add watches for any directory you want to watch (a recursive watcher is in the works [#56][]). + +**Do I have to watch the Error and Event channels in a separate goroutine?** + +As of now, yes. Looking into making this single-thread friendly (see [#7][]) + +**Why am I receiving multiple events for the same file on OS X?** + +Spotlight indexing on OS X can result in multiple events (see [#62][]). A temporary workaround is to add your folder(s) to the *Spotlight Privacy settings* until we have a native FSEvents implementation (see [#54][]). + +**How many files can be watched at once?** + +There are OS-specific limits as to how many watches can be created: +* Linux: /proc/sys/fs/inotify/max_user_watches contains the limit, +reaching this limit results in a "no space left on device" error. +* BSD / OSX: sysctl variables "kern.maxfiles" and "kern.maxfilesperproc", reaching these limits results in a "too many open files" error. + + +[#62]: https://github.com/howeyc/fsnotify/issues/62 +[#56]: https://github.com/howeyc/fsnotify/issues/56 +[#54]: https://github.com/howeyc/fsnotify/issues/54 +[#7]: https://github.com/howeyc/fsnotify/issues/7 + diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify.go b/vendor/github.com/howeyc/fsnotify/fsnotify.go new file mode 100644 index 000000000000..9a48d847d3a5 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify.go @@ -0,0 +1,111 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package fsnotify implements file system notification. +package fsnotify + +import "fmt" + +const ( + FSN_CREATE = 1 + FSN_MODIFY = 2 + FSN_DELETE = 4 + FSN_RENAME = 8 + + FSN_ALL = FSN_MODIFY | FSN_DELETE | FSN_RENAME | FSN_CREATE +) + +// Purge events from interal chan to external chan if passes filter +func (w *Watcher) purgeEvents() { + for ev := range w.internalEvent { + sendEvent := false + w.fsnmut.Lock() + fsnFlags := w.fsnFlags[ev.Name] + w.fsnmut.Unlock() + + if (fsnFlags&FSN_CREATE == FSN_CREATE) && ev.IsCreate() { + sendEvent = true + } + + if (fsnFlags&FSN_MODIFY == FSN_MODIFY) && ev.IsModify() { + sendEvent = true + } + + if (fsnFlags&FSN_DELETE == FSN_DELETE) && ev.IsDelete() { + sendEvent = true + } + + if (fsnFlags&FSN_RENAME == FSN_RENAME) && ev.IsRename() { + sendEvent = true + } + + if sendEvent { + w.Event <- ev + } + + // If there's no file, then no more events for user + // BSD must keep watch for internal use (watches DELETEs to keep track + // what files exist for create events) + if ev.IsDelete() { + w.fsnmut.Lock() + delete(w.fsnFlags, ev.Name) + w.fsnmut.Unlock() + } + } + + close(w.Event) +} + +// Watch a given file path +func (w *Watcher) Watch(path string) error { + return w.WatchFlags(path, FSN_ALL) +} + +// Watch a given file path for a particular set of notifications (FSN_MODIFY etc.) +func (w *Watcher) WatchFlags(path string, flags uint32) error { + w.fsnmut.Lock() + w.fsnFlags[path] = flags + w.fsnmut.Unlock() + return w.watch(path) +} + +// Remove a watch on a file +func (w *Watcher) RemoveWatch(path string) error { + w.fsnmut.Lock() + delete(w.fsnFlags, path) + w.fsnmut.Unlock() + return w.removeWatch(path) +} + +// String formats the event e in the form +// "filename: DELETE|MODIFY|..." +func (e *FileEvent) String() string { + var events string = "" + + if e.IsCreate() { + events += "|" + "CREATE" + } + + if e.IsDelete() { + events += "|" + "DELETE" + } + + if e.IsModify() { + events += "|" + "MODIFY" + } + + if e.IsRename() { + events += "|" + "RENAME" + } + + if e.IsAttrib() { + events += "|" + "ATTRIB" + } + + if len(events) > 0 { + events = events[1:] + } + + return fmt.Sprintf("%q: %s", e.Name, events) +} diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify_bsd.go b/vendor/github.com/howeyc/fsnotify/fsnotify_bsd.go new file mode 100644 index 000000000000..40c84768bc34 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify_bsd.go @@ -0,0 +1,496 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly darwin + +package fsnotify + +import ( + "errors" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "sync" + "syscall" +) + +const ( + // Flags (from ) + sys_NOTE_DELETE = 0x0001 /* vnode was removed */ + sys_NOTE_WRITE = 0x0002 /* data contents changed */ + sys_NOTE_EXTEND = 0x0004 /* size increased */ + sys_NOTE_ATTRIB = 0x0008 /* attributes changed */ + sys_NOTE_LINK = 0x0010 /* link count changed */ + sys_NOTE_RENAME = 0x0020 /* vnode was renamed */ + sys_NOTE_REVOKE = 0x0040 /* vnode access was revoked */ + + // Watch all events + sys_NOTE_ALLEVENTS = sys_NOTE_DELETE | sys_NOTE_WRITE | sys_NOTE_ATTRIB | sys_NOTE_RENAME + + // Block for 100 ms on each call to kevent + keventWaitTime = 100e6 +) + +type FileEvent struct { + mask uint32 // Mask of events + Name string // File name (optional) + create bool // set by fsnotify package if found new file +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { return e.create } + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { return (e.mask & sys_NOTE_DELETE) == sys_NOTE_DELETE } + +// IsModify reports whether the FileEvent was triggered by a file modification +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_NOTE_WRITE) == sys_NOTE_WRITE || (e.mask&sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { return (e.mask & sys_NOTE_RENAME) == sys_NOTE_RENAME } + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_NOTE_ATTRIB) == sys_NOTE_ATTRIB +} + +type Watcher struct { + mu sync.Mutex // Mutex for the Watcher itself. + kq int // File descriptor (as returned by the kqueue() syscall) + watches map[string]int // Map of watched file descriptors (key: path) + wmut sync.Mutex // Protects access to watches. + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + enFlags map[string]uint32 // Map of watched files to evfilt note flags used in kqueue + enmut sync.Mutex // Protects access to enFlags. + paths map[int]string // Map of watched paths (key: watch descriptor) + finfo map[int]os.FileInfo // Map of file information (isDir, isReg; key: watch descriptor) + pmut sync.Mutex // Protects access to paths and finfo. + fileExists map[string]bool // Keep track of if we know this file exists (to stop duplicate create events) + femut sync.Mutex // Protects access to fileExists. + externalWatches map[string]bool // Map of watches added by user of the library. + ewmut sync.Mutex // Protects access to externalWatches. + Error chan error // Errors are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + done chan bool // Channel for sending a "quit message" to the reader goroutine + isClosed bool // Set to true when Close() is first called +} + +// NewWatcher creates and returns a new kevent instance using kqueue(2) +func NewWatcher() (*Watcher, error) { + fd, errno := syscall.Kqueue() + if fd == -1 { + return nil, os.NewSyscallError("kqueue", errno) + } + w := &Watcher{ + kq: fd, + watches: make(map[string]int), + fsnFlags: make(map[string]uint32), + enFlags: make(map[string]uint32), + paths: make(map[int]string), + finfo: make(map[int]os.FileInfo), + fileExists: make(map[string]bool), + externalWatches: make(map[string]bool), + internalEvent: make(chan *FileEvent), + Event: make(chan *FileEvent), + Error: make(chan error), + done: make(chan bool, 1), + } + + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes a kevent watcher instance +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the kevent instance +func (w *Watcher) Close() error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return nil + } + w.isClosed = true + w.mu.Unlock() + + // Send "quit" message to the reader goroutine + w.done <- true + w.wmut.Lock() + ws := w.watches + w.wmut.Unlock() + for path := range ws { + w.removeWatch(path) + } + + return nil +} + +// AddWatch adds path to the watched file set. +// The flags are interpreted as described in kevent(2). +func (w *Watcher) addWatch(path string, flags uint32) error { + w.mu.Lock() + if w.isClosed { + w.mu.Unlock() + return errors.New("kevent instance already closed") + } + w.mu.Unlock() + + watchDir := false + + w.wmut.Lock() + watchfd, found := w.watches[path] + w.wmut.Unlock() + if !found { + fi, errstat := os.Lstat(path) + if errstat != nil { + return errstat + } + + // don't watch socket + if fi.Mode()&os.ModeSocket == os.ModeSocket { + return nil + } + + // Follow Symlinks + // Unfortunately, Linux can add bogus symlinks to watch list without + // issue, and Windows can't do symlinks period (AFAIK). To maintain + // consistency, we will act like everything is fine. There will simply + // be no file events for broken symlinks. + // Hence the returns of nil on errors. + if fi.Mode()&os.ModeSymlink == os.ModeSymlink { + path, err := filepath.EvalSymlinks(path) + if err != nil { + return nil + } + + fi, errstat = os.Lstat(path) + if errstat != nil { + return nil + } + } + + fd, errno := syscall.Open(path, open_FLAGS, 0700) + if fd == -1 { + return errno + } + watchfd = fd + + w.wmut.Lock() + w.watches[path] = watchfd + w.wmut.Unlock() + + w.pmut.Lock() + w.paths[watchfd] = path + w.finfo[watchfd] = fi + w.pmut.Unlock() + } + // Watch the directory if it has not been watched before. + w.pmut.Lock() + w.enmut.Lock() + if w.finfo[watchfd].IsDir() && + (flags&sys_NOTE_WRITE) == sys_NOTE_WRITE && + (!found || (w.enFlags[path]&sys_NOTE_WRITE) != sys_NOTE_WRITE) { + watchDir = true + } + w.enmut.Unlock() + w.pmut.Unlock() + + w.enmut.Lock() + w.enFlags[path] = flags + w.enmut.Unlock() + + var kbuf [1]syscall.Kevent_t + watchEntry := &kbuf[0] + watchEntry.Fflags = flags + syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_ADD|syscall.EV_CLEAR) + entryFlags := watchEntry.Flags + success, errno := syscall.Kevent(w.kq, kbuf[:], nil, nil) + if success == -1 { + return errno + } else if (entryFlags & syscall.EV_ERROR) == syscall.EV_ERROR { + return errors.New("kevent add error") + } + + if watchDir { + errdir := w.watchDirectoryFiles(path) + if errdir != nil { + return errdir + } + } + return nil +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + w.ewmut.Lock() + w.externalWatches[path] = true + w.ewmut.Unlock() + return w.addWatch(path, sys_NOTE_ALLEVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + w.wmut.Lock() + watchfd, ok := w.watches[path] + w.wmut.Unlock() + if !ok { + return errors.New(fmt.Sprintf("can't remove non-existent kevent watch for: %s", path)) + } + var kbuf [1]syscall.Kevent_t + watchEntry := &kbuf[0] + syscall.SetKevent(watchEntry, watchfd, syscall.EVFILT_VNODE, syscall.EV_DELETE) + entryFlags := watchEntry.Flags + success, errno := syscall.Kevent(w.kq, kbuf[:], nil, nil) + if success == -1 { + return os.NewSyscallError("kevent_rm_watch", errno) + } else if (entryFlags & syscall.EV_ERROR) == syscall.EV_ERROR { + return errors.New("kevent rm error") + } + syscall.Close(watchfd) + w.wmut.Lock() + delete(w.watches, path) + w.wmut.Unlock() + w.enmut.Lock() + delete(w.enFlags, path) + w.enmut.Unlock() + w.pmut.Lock() + delete(w.paths, watchfd) + fInfo := w.finfo[watchfd] + delete(w.finfo, watchfd) + w.pmut.Unlock() + + // Find all watched paths that are in this directory that are not external. + if fInfo.IsDir() { + var pathsToRemove []string + w.pmut.Lock() + for _, wpath := range w.paths { + wdir, _ := filepath.Split(wpath) + if filepath.Clean(wdir) == filepath.Clean(path) { + w.ewmut.Lock() + if !w.externalWatches[wpath] { + pathsToRemove = append(pathsToRemove, wpath) + } + w.ewmut.Unlock() + } + } + w.pmut.Unlock() + for _, p := range pathsToRemove { + // Since these are internal, not much sense in propagating error + // to the user, as that will just confuse them with an error about + // a path they did not explicitly watch themselves. + w.removeWatch(p) + } + } + + return nil +} + +// readEvents reads from the kqueue file descriptor, converts the +// received events into Event objects and sends them via the Event channel +func (w *Watcher) readEvents() { + var ( + eventbuf [10]syscall.Kevent_t // Event buffer + events []syscall.Kevent_t // Received events + twait *syscall.Timespec // Time to block waiting for events + n int // Number of events returned from kevent + errno error // Syscall errno + ) + events = eventbuf[0:0] + twait = new(syscall.Timespec) + *twait = syscall.NsecToTimespec(keventWaitTime) + + for { + // See if there is a message on the "done" channel + var done bool + select { + case done = <-w.done: + default: + } + + // If "done" message is received + if done { + errno := syscall.Close(w.kq) + if errno != nil { + w.Error <- os.NewSyscallError("close", errno) + } + close(w.internalEvent) + close(w.Error) + return + } + + // Get new events + if len(events) == 0 { + n, errno = syscall.Kevent(w.kq, nil, eventbuf[:], twait) + + // EINTR is okay, basically the syscall was interrupted before + // timeout expired. + if errno != nil && errno != syscall.EINTR { + w.Error <- os.NewSyscallError("kevent", errno) + continue + } + + // Received some events + if n > 0 { + events = eventbuf[0:n] + } + } + + // Flush the events we received to the events channel + for len(events) > 0 { + fileEvent := new(FileEvent) + watchEvent := &events[0] + fileEvent.mask = uint32(watchEvent.Fflags) + w.pmut.Lock() + fileEvent.Name = w.paths[int(watchEvent.Ident)] + fileInfo := w.finfo[int(watchEvent.Ident)] + w.pmut.Unlock() + if fileInfo != nil && fileInfo.IsDir() && !fileEvent.IsDelete() { + // Double check to make sure the directory exist. This can happen when + // we do a rm -fr on a recursively watched folders and we receive a + // modification event first but the folder has been deleted and later + // receive the delete event + if _, err := os.Lstat(fileEvent.Name); os.IsNotExist(err) { + // mark is as delete event + fileEvent.mask |= sys_NOTE_DELETE + } + } + + if fileInfo != nil && fileInfo.IsDir() && fileEvent.IsModify() && !fileEvent.IsDelete() { + w.sendDirectoryChangeEvents(fileEvent.Name) + } else { + // Send the event on the events channel + w.internalEvent <- fileEvent + } + + // Move to next event + events = events[1:] + + if fileEvent.IsRename() { + w.removeWatch(fileEvent.Name) + w.femut.Lock() + delete(w.fileExists, fileEvent.Name) + w.femut.Unlock() + } + if fileEvent.IsDelete() { + w.removeWatch(fileEvent.Name) + w.femut.Lock() + delete(w.fileExists, fileEvent.Name) + w.femut.Unlock() + + // Look for a file that may have overwritten this + // (ie mv f1 f2 will delete f2 then create f2) + fileDir, _ := filepath.Split(fileEvent.Name) + fileDir = filepath.Clean(fileDir) + w.wmut.Lock() + _, found := w.watches[fileDir] + w.wmut.Unlock() + if found { + // make sure the directory exist before we watch for changes. When we + // do a recursive watch and perform rm -fr, the parent directory might + // have gone missing, ignore the missing directory and let the + // upcoming delete event remove the watch form the parent folder + if _, err := os.Lstat(fileDir); !os.IsNotExist(err) { + w.sendDirectoryChangeEvents(fileDir) + } + } + } + } + } +} + +func (w *Watcher) watchDirectoryFiles(dirPath string) error { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + return err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + + // Inherit fsnFlags from parent directory + w.fsnmut.Lock() + if flags, found := w.fsnFlags[dirPath]; found { + w.fsnFlags[filePath] = flags + } else { + w.fsnFlags[filePath] = FSN_ALL + } + w.fsnmut.Unlock() + + if fileInfo.IsDir() == false { + // Watch file to mimic linux fsnotify + e := w.addWatch(filePath, sys_NOTE_ALLEVENTS) + if e != nil { + return e + } + } else { + // If the user is currently watching directory + // we want to preserve the flags used + w.enmut.Lock() + currFlags, found := w.enFlags[filePath] + w.enmut.Unlock() + var newFlags uint32 = sys_NOTE_DELETE + if found { + newFlags |= currFlags + } + + // Linux gives deletes if not explicitly watching + e := w.addWatch(filePath, newFlags) + if e != nil { + return e + } + } + w.femut.Lock() + w.fileExists[filePath] = true + w.femut.Unlock() + } + + return nil +} + +// sendDirectoryEvents searches the directory for newly created files +// and sends them over the event channel. This functionality is to have +// the BSD version of fsnotify match linux fsnotify which provides a +// create event for files created in a watched directory. +func (w *Watcher) sendDirectoryChangeEvents(dirPath string) { + // Get all files + files, err := ioutil.ReadDir(dirPath) + if err != nil { + w.Error <- err + } + + // Search for new files + for _, fileInfo := range files { + filePath := filepath.Join(dirPath, fileInfo.Name()) + w.femut.Lock() + _, doesExist := w.fileExists[filePath] + w.femut.Unlock() + if !doesExist { + // Inherit fsnFlags from parent directory + w.fsnmut.Lock() + if flags, found := w.fsnFlags[dirPath]; found { + w.fsnFlags[filePath] = flags + } else { + w.fsnFlags[filePath] = FSN_ALL + } + w.fsnmut.Unlock() + + // Send create event + fileEvent := new(FileEvent) + fileEvent.Name = filePath + fileEvent.create = true + w.internalEvent <- fileEvent + } + w.femut.Lock() + w.fileExists[filePath] = true + w.femut.Unlock() + } + w.watchDirectoryFiles(dirPath) +} diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify_linux.go b/vendor/github.com/howeyc/fsnotify/fsnotify_linux.go new file mode 100644 index 000000000000..80ade879fde0 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify_linux.go @@ -0,0 +1,304 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "strings" + "sync" + "syscall" + "unsafe" +) + +const ( + // Options for inotify_init() are not exported + // sys_IN_CLOEXEC uint32 = syscall.IN_CLOEXEC + // sys_IN_NONBLOCK uint32 = syscall.IN_NONBLOCK + + // Options for AddWatch + sys_IN_DONT_FOLLOW uint32 = syscall.IN_DONT_FOLLOW + sys_IN_ONESHOT uint32 = syscall.IN_ONESHOT + sys_IN_ONLYDIR uint32 = syscall.IN_ONLYDIR + + // The "sys_IN_MASK_ADD" option is not exported, as AddWatch + // adds it automatically, if there is already a watch for the given path + // sys_IN_MASK_ADD uint32 = syscall.IN_MASK_ADD + + // Events + sys_IN_ACCESS uint32 = syscall.IN_ACCESS + sys_IN_ALL_EVENTS uint32 = syscall.IN_ALL_EVENTS + sys_IN_ATTRIB uint32 = syscall.IN_ATTRIB + sys_IN_CLOSE uint32 = syscall.IN_CLOSE + sys_IN_CLOSE_NOWRITE uint32 = syscall.IN_CLOSE_NOWRITE + sys_IN_CLOSE_WRITE uint32 = syscall.IN_CLOSE_WRITE + sys_IN_CREATE uint32 = syscall.IN_CREATE + sys_IN_DELETE uint32 = syscall.IN_DELETE + sys_IN_DELETE_SELF uint32 = syscall.IN_DELETE_SELF + sys_IN_MODIFY uint32 = syscall.IN_MODIFY + sys_IN_MOVE uint32 = syscall.IN_MOVE + sys_IN_MOVED_FROM uint32 = syscall.IN_MOVED_FROM + sys_IN_MOVED_TO uint32 = syscall.IN_MOVED_TO + sys_IN_MOVE_SELF uint32 = syscall.IN_MOVE_SELF + sys_IN_OPEN uint32 = syscall.IN_OPEN + + sys_AGNOSTIC_EVENTS = sys_IN_MOVED_TO | sys_IN_MOVED_FROM | sys_IN_CREATE | sys_IN_ATTRIB | sys_IN_MODIFY | sys_IN_MOVE_SELF | sys_IN_DELETE | sys_IN_DELETE_SELF + + // Special events + sys_IN_ISDIR uint32 = syscall.IN_ISDIR + sys_IN_IGNORED uint32 = syscall.IN_IGNORED + sys_IN_Q_OVERFLOW uint32 = syscall.IN_Q_OVERFLOW + sys_IN_UNMOUNT uint32 = syscall.IN_UNMOUNT +) + +type FileEvent struct { + mask uint32 // Mask of events + cookie uint32 // Unique cookie associating related events (for rename(2)) + Name string // File name (optional) +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { + return (e.mask&sys_IN_CREATE) == sys_IN_CREATE || (e.mask&sys_IN_MOVED_TO) == sys_IN_MOVED_TO +} + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { + return (e.mask&sys_IN_DELETE_SELF) == sys_IN_DELETE_SELF || (e.mask&sys_IN_DELETE) == sys_IN_DELETE +} + +// IsModify reports whether the FileEvent was triggered by a file modification or attribute change +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_IN_MODIFY) == sys_IN_MODIFY || (e.mask&sys_IN_ATTRIB) == sys_IN_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { + return ((e.mask&sys_IN_MOVE_SELF) == sys_IN_MOVE_SELF || (e.mask&sys_IN_MOVED_FROM) == sys_IN_MOVED_FROM) +} + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_IN_ATTRIB) == sys_IN_ATTRIB +} + +type watch struct { + wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) + flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) +} + +type Watcher struct { + mu sync.Mutex // Map access + fd int // File descriptor (as returned by the inotify_init() syscall) + watches map[string]*watch // Map of inotify watches (key: path) + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + paths map[int]string // Map of watched paths (key: watch descriptor) + Error chan error // Errors are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + done chan bool // Channel for sending a "quit message" to the reader goroutine + isClosed bool // Set to true when Close() is first called +} + +// NewWatcher creates and returns a new inotify instance using inotify_init(2) +func NewWatcher() (*Watcher, error) { + fd, errno := syscall.InotifyInit() + if fd == -1 { + return nil, os.NewSyscallError("inotify_init", errno) + } + w := &Watcher{ + fd: fd, + watches: make(map[string]*watch), + fsnFlags: make(map[string]uint32), + paths: make(map[int]string), + internalEvent: make(chan *FileEvent), + Event: make(chan *FileEvent), + Error: make(chan error), + done: make(chan bool, 1), + } + + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes an inotify watcher instance +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the inotify instance +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Remove all watches + for path := range w.watches { + w.RemoveWatch(path) + } + + // Send "quit" message to the reader goroutine + w.done <- true + + return nil +} + +// AddWatch adds path to the watched file set. +// The flags are interpreted as described in inotify_add_watch(2). +func (w *Watcher) addWatch(path string, flags uint32) error { + if w.isClosed { + return errors.New("inotify instance already closed") + } + + w.mu.Lock() + watchEntry, found := w.watches[path] + w.mu.Unlock() + if found { + watchEntry.flags |= flags + flags |= syscall.IN_MASK_ADD + } + wd, errno := syscall.InotifyAddWatch(w.fd, path, flags) + if wd == -1 { + return errno + } + + w.mu.Lock() + w.watches[path] = &watch{wd: uint32(wd), flags: flags} + w.paths[wd] = path + w.mu.Unlock() + + return nil +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + return w.addWatch(path, sys_AGNOSTIC_EVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + w.mu.Lock() + defer w.mu.Unlock() + watch, ok := w.watches[path] + if !ok { + return errors.New(fmt.Sprintf("can't remove non-existent inotify watch for: %s", path)) + } + success, errno := syscall.InotifyRmWatch(w.fd, watch.wd) + if success == -1 { + return os.NewSyscallError("inotify_rm_watch", errno) + } + delete(w.watches, path) + return nil +} + +// readEvents reads from the inotify file descriptor, converts the +// received events into Event objects and sends them via the Event channel +func (w *Watcher) readEvents() { + var ( + buf [syscall.SizeofInotifyEvent * 4096]byte // Buffer for a maximum of 4096 raw events + n int // Number of bytes read with read() + errno error // Syscall errno + ) + + for { + // See if there is a message on the "done" channel + select { + case <-w.done: + syscall.Close(w.fd) + close(w.internalEvent) + close(w.Error) + return + default: + } + + n, errno = syscall.Read(w.fd, buf[:]) + + // If EOF is received + if n == 0 { + syscall.Close(w.fd) + close(w.internalEvent) + close(w.Error) + return + } + + if n < 0 { + w.Error <- os.NewSyscallError("read", errno) + continue + } + if n < syscall.SizeofInotifyEvent { + w.Error <- errors.New("inotify: short read in readEvents()") + continue + } + + var offset uint32 = 0 + // We don't know how many events we just read into the buffer + // While the offset points to at least one whole event... + for offset <= uint32(n-syscall.SizeofInotifyEvent) { + // Point "raw" to the event in the buffer + raw := (*syscall.InotifyEvent)(unsafe.Pointer(&buf[offset])) + event := new(FileEvent) + event.mask = uint32(raw.Mask) + event.cookie = uint32(raw.Cookie) + nameLen := uint32(raw.Len) + // If the event happened to the watched directory or the watched file, the kernel + // doesn't append the filename to the event, but we would like to always fill the + // the "Name" field with a valid filename. We retrieve the path of the watch from + // the "paths" map. + w.mu.Lock() + event.Name = w.paths[int(raw.Wd)] + w.mu.Unlock() + watchedName := event.Name + if nameLen > 0 { + // Point "bytes" at the first byte of the filename + bytes := (*[syscall.PathMax]byte)(unsafe.Pointer(&buf[offset+syscall.SizeofInotifyEvent])) + // The filename is padded with NUL bytes. TrimRight() gets rid of those. + event.Name += "/" + strings.TrimRight(string(bytes[0:nameLen]), "\000") + } + + // Send the events that are not ignored on the events channel + if !event.ignoreLinux() { + // Setup FSNotify flags (inherit from directory watch) + w.fsnmut.Lock() + if _, fsnFound := w.fsnFlags[event.Name]; !fsnFound { + if fsnFlags, watchFound := w.fsnFlags[watchedName]; watchFound { + w.fsnFlags[event.Name] = fsnFlags + } else { + w.fsnFlags[event.Name] = FSN_ALL + } + } + w.fsnmut.Unlock() + + w.internalEvent <- event + } + + // Move to the next event in the buffer + offset += syscall.SizeofInotifyEvent + nameLen + } + } +} + +// Certain types of events can be "ignored" and not sent over the Event +// channel. Such as events marked ignore by the kernel, or MODIFY events +// against files that do not exist. +func (e *FileEvent) ignoreLinux() bool { + // Ignore anything the inotify API says to ignore + if e.mask&sys_IN_IGNORED == sys_IN_IGNORED { + return true + } + + // If the event is not a DELETE or RENAME, the file must exist. + // Otherwise the event is ignored. + // *Note*: this was put in place because it was seen that a MODIFY + // event was sent after the DELETE. This ignores that MODIFY and + // assumes a DELETE will come or has come if the file doesn't exist. + if !(e.IsDelete() || e.IsRename()) { + _, statErr := os.Lstat(e.Name) + return os.IsNotExist(statErr) + } + return false +} diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify_open_bsd.go b/vendor/github.com/howeyc/fsnotify/fsnotify_open_bsd.go new file mode 100644 index 000000000000..f728a6ffd731 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify_open_bsd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd openbsd netbsd dragonfly + +package fsnotify + +import "syscall" + +const open_FLAGS = syscall.O_NONBLOCK | syscall.O_RDONLY diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify_open_darwin.go b/vendor/github.com/howeyc/fsnotify/fsnotify_open_darwin.go new file mode 100644 index 000000000000..d450318e6063 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify_open_darwin.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin + +package fsnotify + +import "syscall" + +const open_FLAGS = syscall.O_EVTONLY diff --git a/vendor/github.com/howeyc/fsnotify/fsnotify_windows.go b/vendor/github.com/howeyc/fsnotify/fsnotify_windows.go new file mode 100644 index 000000000000..d88ae63407d2 --- /dev/null +++ b/vendor/github.com/howeyc/fsnotify/fsnotify_windows.go @@ -0,0 +1,598 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package fsnotify + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "runtime" + "sync" + "syscall" + "unsafe" +) + +const ( + // Options for AddWatch + sys_FS_ONESHOT = 0x80000000 + sys_FS_ONLYDIR = 0x1000000 + + // Events + sys_FS_ACCESS = 0x1 + sys_FS_ALL_EVENTS = 0xfff + sys_FS_ATTRIB = 0x4 + sys_FS_CLOSE = 0x18 + sys_FS_CREATE = 0x100 + sys_FS_DELETE = 0x200 + sys_FS_DELETE_SELF = 0x400 + sys_FS_MODIFY = 0x2 + sys_FS_MOVE = 0xc0 + sys_FS_MOVED_FROM = 0x40 + sys_FS_MOVED_TO = 0x80 + sys_FS_MOVE_SELF = 0x800 + + // Special events + sys_FS_IGNORED = 0x8000 + sys_FS_Q_OVERFLOW = 0x4000 +) + +const ( + // TODO(nj): Use syscall.ERROR_MORE_DATA from ztypes_windows in Go 1.3+ + sys_ERROR_MORE_DATA syscall.Errno = 234 +) + +// Event is the type of the notification messages +// received on the watcher's Event channel. +type FileEvent struct { + mask uint32 // Mask of events + cookie uint32 // Unique cookie associating related events (for rename) + Name string // File name (optional) +} + +// IsCreate reports whether the FileEvent was triggered by a creation +func (e *FileEvent) IsCreate() bool { return (e.mask & sys_FS_CREATE) == sys_FS_CREATE } + +// IsDelete reports whether the FileEvent was triggered by a delete +func (e *FileEvent) IsDelete() bool { + return ((e.mask&sys_FS_DELETE) == sys_FS_DELETE || (e.mask&sys_FS_DELETE_SELF) == sys_FS_DELETE_SELF) +} + +// IsModify reports whether the FileEvent was triggered by a file modification or attribute change +func (e *FileEvent) IsModify() bool { + return ((e.mask&sys_FS_MODIFY) == sys_FS_MODIFY || (e.mask&sys_FS_ATTRIB) == sys_FS_ATTRIB) +} + +// IsRename reports whether the FileEvent was triggered by a change name +func (e *FileEvent) IsRename() bool { + return ((e.mask&sys_FS_MOVE) == sys_FS_MOVE || (e.mask&sys_FS_MOVE_SELF) == sys_FS_MOVE_SELF || (e.mask&sys_FS_MOVED_FROM) == sys_FS_MOVED_FROM || (e.mask&sys_FS_MOVED_TO) == sys_FS_MOVED_TO) +} + +// IsAttrib reports whether the FileEvent was triggered by a change in the file metadata. +func (e *FileEvent) IsAttrib() bool { + return (e.mask & sys_FS_ATTRIB) == sys_FS_ATTRIB +} + +const ( + opAddWatch = iota + opRemoveWatch +) + +const ( + provisional uint64 = 1 << (32 + iota) +) + +type input struct { + op int + path string + flags uint32 + reply chan error +} + +type inode struct { + handle syscall.Handle + volume uint32 + index uint64 +} + +type watch struct { + ov syscall.Overlapped + ino *inode // i-number + path string // Directory path + mask uint64 // Directory itself is being watched with these notify flags + names map[string]uint64 // Map of names being watched and their notify flags + rename string // Remembers the old name while renaming a file + buf [4096]byte +} + +type indexMap map[uint64]*watch +type watchMap map[uint32]indexMap + +// A Watcher waits for and receives event notifications +// for a specific set of files and directories. +type Watcher struct { + mu sync.Mutex // Map access + port syscall.Handle // Handle to completion port + watches watchMap // Map of watches (key: i-number) + fsnFlags map[string]uint32 // Map of watched files to flags used for filter + fsnmut sync.Mutex // Protects access to fsnFlags. + input chan *input // Inputs to the reader are sent on this channel + internalEvent chan *FileEvent // Events are queued on this channel + Event chan *FileEvent // Events are returned on this channel + Error chan error // Errors are sent on this channel + isClosed bool // Set to true when Close() is first called + quit chan chan<- error + cookie uint32 +} + +// NewWatcher creates and returns a Watcher. +func NewWatcher() (*Watcher, error) { + port, e := syscall.CreateIoCompletionPort(syscall.InvalidHandle, 0, 0, 0) + if e != nil { + return nil, os.NewSyscallError("CreateIoCompletionPort", e) + } + w := &Watcher{ + port: port, + watches: make(watchMap), + fsnFlags: make(map[string]uint32), + input: make(chan *input, 1), + Event: make(chan *FileEvent, 50), + internalEvent: make(chan *FileEvent), + Error: make(chan error), + quit: make(chan chan<- error, 1), + } + go w.readEvents() + go w.purgeEvents() + return w, nil +} + +// Close closes a Watcher. +// It sends a message to the reader goroutine to quit and removes all watches +// associated with the watcher. +func (w *Watcher) Close() error { + if w.isClosed { + return nil + } + w.isClosed = true + + // Send "quit" message to the reader goroutine + ch := make(chan error) + w.quit <- ch + if err := w.wakeupReader(); err != nil { + return err + } + return <-ch +} + +// AddWatch adds path to the watched file set. +func (w *Watcher) AddWatch(path string, flags uint32) error { + if w.isClosed { + return errors.New("watcher already closed") + } + in := &input{ + op: opAddWatch, + path: filepath.Clean(path), + flags: flags, + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +// Watch adds path to the watched file set, watching all events. +func (w *Watcher) watch(path string) error { + return w.AddWatch(path, sys_FS_ALL_EVENTS) +} + +// RemoveWatch removes path from the watched file set. +func (w *Watcher) removeWatch(path string) error { + in := &input{ + op: opRemoveWatch, + path: filepath.Clean(path), + reply: make(chan error), + } + w.input <- in + if err := w.wakeupReader(); err != nil { + return err + } + return <-in.reply +} + +func (w *Watcher) wakeupReader() error { + e := syscall.PostQueuedCompletionStatus(w.port, 0, 0, nil) + if e != nil { + return os.NewSyscallError("PostQueuedCompletionStatus", e) + } + return nil +} + +func getDir(pathname string) (dir string, err error) { + attr, e := syscall.GetFileAttributes(syscall.StringToUTF16Ptr(pathname)) + if e != nil { + return "", os.NewSyscallError("GetFileAttributes", e) + } + if attr&syscall.FILE_ATTRIBUTE_DIRECTORY != 0 { + dir = pathname + } else { + dir, _ = filepath.Split(pathname) + dir = filepath.Clean(dir) + } + return +} + +func getIno(path string) (ino *inode, err error) { + h, e := syscall.CreateFile(syscall.StringToUTF16Ptr(path), + syscall.FILE_LIST_DIRECTORY, + syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, + nil, syscall.OPEN_EXISTING, + syscall.FILE_FLAG_BACKUP_SEMANTICS|syscall.FILE_FLAG_OVERLAPPED, 0) + if e != nil { + return nil, os.NewSyscallError("CreateFile", e) + } + var fi syscall.ByHandleFileInformation + if e = syscall.GetFileInformationByHandle(h, &fi); e != nil { + syscall.CloseHandle(h) + return nil, os.NewSyscallError("GetFileInformationByHandle", e) + } + ino = &inode{ + handle: h, + volume: fi.VolumeSerialNumber, + index: uint64(fi.FileIndexHigh)<<32 | uint64(fi.FileIndexLow), + } + return ino, nil +} + +// Must run within the I/O thread. +func (m watchMap) get(ino *inode) *watch { + if i := m[ino.volume]; i != nil { + return i[ino.index] + } + return nil +} + +// Must run within the I/O thread. +func (m watchMap) set(ino *inode, watch *watch) { + i := m[ino.volume] + if i == nil { + i = make(indexMap) + m[ino.volume] = i + } + i[ino.index] = watch +} + +// Must run within the I/O thread. +func (w *Watcher) addWatch(pathname string, flags uint64) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + if flags&sys_FS_ONLYDIR != 0 && pathname != dir { + return nil + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watchEntry := w.watches.get(ino) + w.mu.Unlock() + if watchEntry == nil { + if _, e := syscall.CreateIoCompletionPort(ino.handle, w.port, 0, 0); e != nil { + syscall.CloseHandle(ino.handle) + return os.NewSyscallError("CreateIoCompletionPort", e) + } + watchEntry = &watch{ + ino: ino, + path: dir, + names: make(map[string]uint64), + } + w.mu.Lock() + w.watches.set(ino, watchEntry) + w.mu.Unlock() + flags |= provisional + } else { + syscall.CloseHandle(ino.handle) + } + if pathname == dir { + watchEntry.mask |= flags + } else { + watchEntry.names[filepath.Base(pathname)] |= flags + } + if err = w.startRead(watchEntry); err != nil { + return err + } + if pathname == dir { + watchEntry.mask &= ^provisional + } else { + watchEntry.names[filepath.Base(pathname)] &= ^provisional + } + return nil +} + +// Must run within the I/O thread. +func (w *Watcher) remWatch(pathname string) error { + dir, err := getDir(pathname) + if err != nil { + return err + } + ino, err := getIno(dir) + if err != nil { + return err + } + w.mu.Lock() + watch := w.watches.get(ino) + w.mu.Unlock() + if watch == nil { + return fmt.Errorf("can't remove non-existent watch for: %s", pathname) + } + if pathname == dir { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + watch.mask = 0 + } else { + name := filepath.Base(pathname) + w.sendEvent(watch.path+"\\"+name, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + return w.startRead(watch) +} + +// Must run within the I/O thread. +func (w *Watcher) deleteWatch(watch *watch) { + for name, mask := range watch.names { + if mask&provisional == 0 { + w.sendEvent(watch.path+"\\"+name, mask&sys_FS_IGNORED) + } + delete(watch.names, name) + } + if watch.mask != 0 { + if watch.mask&provisional == 0 { + w.sendEvent(watch.path, watch.mask&sys_FS_IGNORED) + } + watch.mask = 0 + } +} + +// Must run within the I/O thread. +func (w *Watcher) startRead(watch *watch) error { + if e := syscall.CancelIo(watch.ino.handle); e != nil { + w.Error <- os.NewSyscallError("CancelIo", e) + w.deleteWatch(watch) + } + mask := toWindowsFlags(watch.mask) + for _, m := range watch.names { + mask |= toWindowsFlags(m) + } + if mask == 0 { + if e := syscall.CloseHandle(watch.ino.handle); e != nil { + w.Error <- os.NewSyscallError("CloseHandle", e) + } + w.mu.Lock() + delete(w.watches[watch.ino.volume], watch.ino.index) + w.mu.Unlock() + return nil + } + e := syscall.ReadDirectoryChanges(watch.ino.handle, &watch.buf[0], + uint32(unsafe.Sizeof(watch.buf)), false, mask, nil, &watch.ov, 0) + if e != nil { + err := os.NewSyscallError("ReadDirectoryChanges", e) + if e == syscall.ERROR_ACCESS_DENIED && watch.mask&provisional == 0 { + // Watched directory was probably removed + if w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + err = nil + } + w.deleteWatch(watch) + w.startRead(watch) + return err + } + return nil +} + +// readEvents reads from the I/O completion port, converts the +// received events into Event objects and sends them via the Event channel. +// Entry point to the I/O thread. +func (w *Watcher) readEvents() { + var ( + n, key uint32 + ov *syscall.Overlapped + ) + runtime.LockOSThread() + + for { + e := syscall.GetQueuedCompletionStatus(w.port, &n, &key, &ov, syscall.INFINITE) + watch := (*watch)(unsafe.Pointer(ov)) + + if watch == nil { + select { + case ch := <-w.quit: + w.mu.Lock() + var indexes []indexMap + for _, index := range w.watches { + indexes = append(indexes, index) + } + w.mu.Unlock() + for _, index := range indexes { + for _, watch := range index { + w.deleteWatch(watch) + w.startRead(watch) + } + } + var err error + if e := syscall.CloseHandle(w.port); e != nil { + err = os.NewSyscallError("CloseHandle", e) + } + close(w.internalEvent) + close(w.Error) + ch <- err + return + case in := <-w.input: + switch in.op { + case opAddWatch: + in.reply <- w.addWatch(in.path, uint64(in.flags)) + case opRemoveWatch: + in.reply <- w.remWatch(in.path) + } + default: + } + continue + } + + switch e { + case sys_ERROR_MORE_DATA: + if watch == nil { + w.Error <- errors.New("ERROR_MORE_DATA has unexpectedly null lpOverlapped buffer") + } else { + // The i/o succeeded but the buffer is full. + // In theory we should be building up a full packet. + // In practice we can get away with just carrying on. + n = uint32(unsafe.Sizeof(watch.buf)) + } + case syscall.ERROR_ACCESS_DENIED: + // Watched directory was probably removed + w.sendEvent(watch.path, watch.mask&sys_FS_DELETE_SELF) + w.deleteWatch(watch) + w.startRead(watch) + continue + case syscall.ERROR_OPERATION_ABORTED: + // CancelIo was called on this handle + continue + default: + w.Error <- os.NewSyscallError("GetQueuedCompletionPort", e) + continue + case nil: + } + + var offset uint32 + for { + if n == 0 { + w.internalEvent <- &FileEvent{mask: sys_FS_Q_OVERFLOW} + w.Error <- errors.New("short read in readEvents()") + break + } + + // Point "raw" to the event in the buffer + raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) + buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) + name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) + fullname := watch.path + "\\" + name + + var mask uint64 + switch raw.Action { + case syscall.FILE_ACTION_REMOVED: + mask = sys_FS_DELETE_SELF + case syscall.FILE_ACTION_MODIFIED: + mask = sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + watch.rename = name + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + if watch.names[watch.rename] != 0 { + watch.names[name] |= watch.names[watch.rename] + delete(watch.names, watch.rename) + mask = sys_FS_MOVE_SELF + } + } + + sendNameEvent := func() { + if w.sendEvent(fullname, watch.names[name]&mask) { + if watch.names[name]&sys_FS_ONESHOT != 0 { + delete(watch.names, name) + } + } + } + if raw.Action != syscall.FILE_ACTION_RENAMED_NEW_NAME { + sendNameEvent() + } + if raw.Action == syscall.FILE_ACTION_REMOVED { + w.sendEvent(fullname, watch.names[name]&sys_FS_IGNORED) + delete(watch.names, name) + } + if w.sendEvent(fullname, watch.mask&toFSnotifyFlags(raw.Action)) { + if watch.mask&sys_FS_ONESHOT != 0 { + watch.mask = 0 + } + } + if raw.Action == syscall.FILE_ACTION_RENAMED_NEW_NAME { + fullname = watch.path + "\\" + watch.rename + sendNameEvent() + } + + // Move to the next event in the buffer + if raw.NextEntryOffset == 0 { + break + } + offset += raw.NextEntryOffset + + // Error! + if offset >= n { + w.Error <- errors.New("Windows system assumed buffer larger than it is, events have likely been missed.") + break + } + } + + if err := w.startRead(watch); err != nil { + w.Error <- err + } + } +} + +func (w *Watcher) sendEvent(name string, mask uint64) bool { + if mask == 0 { + return false + } + event := &FileEvent{mask: uint32(mask), Name: name} + if mask&sys_FS_MOVE != 0 { + if mask&sys_FS_MOVED_FROM != 0 { + w.cookie++ + } + event.cookie = w.cookie + } + select { + case ch := <-w.quit: + w.quit <- ch + case w.Event <- event: + } + return true +} + +func toWindowsFlags(mask uint64) uint32 { + var m uint32 + if mask&sys_FS_ACCESS != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS + } + if mask&sys_FS_MODIFY != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_LAST_WRITE + } + if mask&sys_FS_ATTRIB != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES + } + if mask&(sys_FS_MOVE|sys_FS_CREATE|sys_FS_DELETE) != 0 { + m |= syscall.FILE_NOTIFY_CHANGE_FILE_NAME | syscall.FILE_NOTIFY_CHANGE_DIR_NAME + } + return m +} + +func toFSnotifyFlags(action uint32) uint64 { + switch action { + case syscall.FILE_ACTION_ADDED: + return sys_FS_CREATE + case syscall.FILE_ACTION_REMOVED: + return sys_FS_DELETE + case syscall.FILE_ACTION_MODIFIED: + return sys_FS_MODIFY + case syscall.FILE_ACTION_RENAMED_OLD_NAME: + return sys_FS_MOVED_FROM + case syscall.FILE_ACTION_RENAMED_NEW_NAME: + return sys_FS_MOVED_TO + } + return 0 +} diff --git a/vendor/github.com/influxdata/influxdb/client/v2/client.go b/vendor/github.com/influxdata/influxdb/client/v2/client.go deleted file mode 100644 index 77d44f2b34fb..000000000000 --- a/vendor/github.com/influxdata/influxdb/client/v2/client.go +++ /dev/null @@ -1,635 +0,0 @@ -// Package client (v2) is the current official Go client for InfluxDB. -package client // import "github.com/influxdata/influxdb/client/v2" - -import ( - "bytes" - "crypto/tls" - "encoding/json" - "errors" - "fmt" - "io" - "io/ioutil" - "mime" - "net/http" - "net/url" - "strconv" - "strings" - "time" - - "github.com/influxdata/influxdb/models" -) - -// HTTPConfig is the config data needed to create an HTTP Client. -type HTTPConfig struct { - // Addr should be of the form "http://host:port" - // or "http://[ipv6-host%zone]:port". - Addr string - - // Username is the influxdb username, optional. - Username string - - // Password is the influxdb password, optional. - Password string - - // UserAgent is the http User Agent, defaults to "InfluxDBClient". - UserAgent string - - // Timeout for influxdb writes, defaults to no timeout. - Timeout time.Duration - - // InsecureSkipVerify gets passed to the http client, if true, it will - // skip https certificate verification. Defaults to false. - InsecureSkipVerify bool - - // TLSConfig allows the user to set their own TLS config for the HTTP - // Client. If set, this option overrides InsecureSkipVerify. - TLSConfig *tls.Config -} - -// BatchPointsConfig is the config data needed to create an instance of the BatchPoints struct. -type BatchPointsConfig struct { - // Precision is the write precision of the points, defaults to "ns". - Precision string - - // Database is the database to write points to. - Database string - - // RetentionPolicy is the retention policy of the points. - RetentionPolicy string - - // Write consistency is the number of servers required to confirm write. - WriteConsistency string -} - -// Client is a client interface for writing & querying the database. -type Client interface { - // Ping checks that status of cluster, and will always return 0 time and no - // error for UDP clients. - Ping(timeout time.Duration) (time.Duration, string, error) - - // Write takes a BatchPoints object and writes all Points to InfluxDB. - Write(bp BatchPoints) error - - // Query makes an InfluxDB Query on the database. This will fail if using - // the UDP client. - Query(q Query) (*Response, error) - - // Close releases any resources a Client may be using. - Close() error -} - -// NewHTTPClient returns a new Client from the provided config. -// Client is safe for concurrent use by multiple goroutines. -func NewHTTPClient(conf HTTPConfig) (Client, error) { - if conf.UserAgent == "" { - conf.UserAgent = "InfluxDBClient" - } - - u, err := url.Parse(conf.Addr) - if err != nil { - return nil, err - } else if u.Scheme != "http" && u.Scheme != "https" { - m := fmt.Sprintf("Unsupported protocol scheme: %s, your address"+ - " must start with http:// or https://", u.Scheme) - return nil, errors.New(m) - } - - tr := &http.Transport{ - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: conf.InsecureSkipVerify, - }, - } - if conf.TLSConfig != nil { - tr.TLSClientConfig = conf.TLSConfig - } - return &client{ - url: *u, - username: conf.Username, - password: conf.Password, - useragent: conf.UserAgent, - httpClient: &http.Client{ - Timeout: conf.Timeout, - Transport: tr, - }, - transport: tr, - }, nil -} - -// Ping will check to see if the server is up with an optional timeout on waiting for leader. -// Ping returns how long the request took, the version of the server it connected to, and an error if one occurred. -func (c *client) Ping(timeout time.Duration) (time.Duration, string, error) { - now := time.Now() - u := c.url - u.Path = "ping" - - req, err := http.NewRequest("GET", u.String(), nil) - if err != nil { - return 0, "", err - } - - req.Header.Set("User-Agent", c.useragent) - - if c.username != "" { - req.SetBasicAuth(c.username, c.password) - } - - if timeout > 0 { - params := req.URL.Query() - params.Set("wait_for_leader", fmt.Sprintf("%.0fs", timeout.Seconds())) - req.URL.RawQuery = params.Encode() - } - - resp, err := c.httpClient.Do(req) - if err != nil { - return 0, "", err - } - defer resp.Body.Close() - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return 0, "", err - } - - if resp.StatusCode != http.StatusNoContent { - var err = fmt.Errorf(string(body)) - return 0, "", err - } - - version := resp.Header.Get("X-Influxdb-Version") - return time.Since(now), version, nil -} - -// Close releases the client's resources. -func (c *client) Close() error { - c.transport.CloseIdleConnections() - return nil -} - -// client is safe for concurrent use as the fields are all read-only -// once the client is instantiated. -type client struct { - // N.B - if url.UserInfo is accessed in future modifications to the - // methods on client, you will need to syncronise access to url. - url url.URL - username string - password string - useragent string - httpClient *http.Client - transport *http.Transport -} - -// BatchPoints is an interface into a batched grouping of points to write into -// InfluxDB together. BatchPoints is NOT thread-safe, you must create a separate -// batch for each goroutine. -type BatchPoints interface { - // AddPoint adds the given point to the Batch of points. - AddPoint(p *Point) - // AddPoints adds the given points to the Batch of points. - AddPoints(ps []*Point) - // Points lists the points in the Batch. - Points() []*Point - - // Precision returns the currently set precision of this Batch. - Precision() string - // SetPrecision sets the precision of this batch. - SetPrecision(s string) error - - // Database returns the currently set database of this Batch. - Database() string - // SetDatabase sets the database of this Batch. - SetDatabase(s string) - - // WriteConsistency returns the currently set write consistency of this Batch. - WriteConsistency() string - // SetWriteConsistency sets the write consistency of this Batch. - SetWriteConsistency(s string) - - // RetentionPolicy returns the currently set retention policy of this Batch. - RetentionPolicy() string - // SetRetentionPolicy sets the retention policy of this Batch. - SetRetentionPolicy(s string) -} - -// NewBatchPoints returns a BatchPoints interface based on the given config. -func NewBatchPoints(conf BatchPointsConfig) (BatchPoints, error) { - if conf.Precision == "" { - conf.Precision = "ns" - } - if _, err := time.ParseDuration("1" + conf.Precision); err != nil { - return nil, err - } - bp := &batchpoints{ - database: conf.Database, - precision: conf.Precision, - retentionPolicy: conf.RetentionPolicy, - writeConsistency: conf.WriteConsistency, - } - return bp, nil -} - -type batchpoints struct { - points []*Point - database string - precision string - retentionPolicy string - writeConsistency string -} - -func (bp *batchpoints) AddPoint(p *Point) { - bp.points = append(bp.points, p) -} - -func (bp *batchpoints) AddPoints(ps []*Point) { - bp.points = append(bp.points, ps...) -} - -func (bp *batchpoints) Points() []*Point { - return bp.points -} - -func (bp *batchpoints) Precision() string { - return bp.precision -} - -func (bp *batchpoints) Database() string { - return bp.database -} - -func (bp *batchpoints) WriteConsistency() string { - return bp.writeConsistency -} - -func (bp *batchpoints) RetentionPolicy() string { - return bp.retentionPolicy -} - -func (bp *batchpoints) SetPrecision(p string) error { - if _, err := time.ParseDuration("1" + p); err != nil { - return err - } - bp.precision = p - return nil -} - -func (bp *batchpoints) SetDatabase(db string) { - bp.database = db -} - -func (bp *batchpoints) SetWriteConsistency(wc string) { - bp.writeConsistency = wc -} - -func (bp *batchpoints) SetRetentionPolicy(rp string) { - bp.retentionPolicy = rp -} - -// Point represents a single data point. -type Point struct { - pt models.Point -} - -// NewPoint returns a point with the given timestamp. If a timestamp is not -// given, then data is sent to the database without a timestamp, in which case -// the server will assign local time upon reception. NOTE: it is recommended to -// send data with a timestamp. -func NewPoint( - name string, - tags map[string]string, - fields map[string]interface{}, - t ...time.Time, -) (*Point, error) { - var T time.Time - if len(t) > 0 { - T = t[0] - } - - pt, err := models.NewPoint(name, models.NewTags(tags), fields, T) - if err != nil { - return nil, err - } - return &Point{ - pt: pt, - }, nil -} - -// String returns a line-protocol string of the Point. -func (p *Point) String() string { - return p.pt.String() -} - -// PrecisionString returns a line-protocol string of the Point, -// with the timestamp formatted for the given precision. -func (p *Point) PrecisionString(precison string) string { - return p.pt.PrecisionString(precison) -} - -// Name returns the measurement name of the point. -func (p *Point) Name() string { - return string(p.pt.Name()) -} - -// Tags returns the tags associated with the point. -func (p *Point) Tags() map[string]string { - return p.pt.Tags().Map() -} - -// Time return the timestamp for the point. -func (p *Point) Time() time.Time { - return p.pt.Time() -} - -// UnixNano returns timestamp of the point in nanoseconds since Unix epoch. -func (p *Point) UnixNano() int64 { - return p.pt.UnixNano() -} - -// Fields returns the fields for the point. -func (p *Point) Fields() (map[string]interface{}, error) { - return p.pt.Fields() -} - -// NewPointFrom returns a point from the provided models.Point. -func NewPointFrom(pt models.Point) *Point { - return &Point{pt: pt} -} - -func (c *client) Write(bp BatchPoints) error { - var b bytes.Buffer - - for _, p := range bp.Points() { - if _, err := b.WriteString(p.pt.PrecisionString(bp.Precision())); err != nil { - return err - } - - if err := b.WriteByte('\n'); err != nil { - return err - } - } - - u := c.url - u.Path = "write" - req, err := http.NewRequest("POST", u.String(), &b) - if err != nil { - return err - } - req.Header.Set("Content-Type", "") - req.Header.Set("User-Agent", c.useragent) - if c.username != "" { - req.SetBasicAuth(c.username, c.password) - } - - params := req.URL.Query() - params.Set("db", bp.Database()) - params.Set("rp", bp.RetentionPolicy()) - params.Set("precision", bp.Precision()) - params.Set("consistency", bp.WriteConsistency()) - req.URL.RawQuery = params.Encode() - - resp, err := c.httpClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusNoContent && resp.StatusCode != http.StatusOK { - var err = fmt.Errorf(string(body)) - return err - } - - return nil -} - -// Query defines a query to send to the server. -type Query struct { - Command string - Database string - Precision string - Chunked bool - ChunkSize int - Parameters map[string]interface{} -} - -// NewQuery returns a query object. -// The database and precision arguments can be empty strings if they are not needed for the query. -func NewQuery(command, database, precision string) Query { - return Query{ - Command: command, - Database: database, - Precision: precision, - Parameters: make(map[string]interface{}), - } -} - -// NewQueryWithParameters returns a query object. -// The database and precision arguments can be empty strings if they are not needed for the query. -// parameters is a map of the parameter names used in the command to their values. -func NewQueryWithParameters(command, database, precision string, parameters map[string]interface{}) Query { - return Query{ - Command: command, - Database: database, - Precision: precision, - Parameters: parameters, - } -} - -// Response represents a list of statement results. -type Response struct { - Results []Result - Err string `json:"error,omitempty"` -} - -// Error returns the first error from any statement. -// It returns nil if no errors occurred on any statements. -func (r *Response) Error() error { - if r.Err != "" { - return fmt.Errorf(r.Err) - } - for _, result := range r.Results { - if result.Err != "" { - return fmt.Errorf(result.Err) - } - } - return nil -} - -// Message represents a user message. -type Message struct { - Level string - Text string -} - -// Result represents a resultset returned from a single statement. -type Result struct { - Series []models.Row - Messages []*Message - Err string `json:"error,omitempty"` -} - -// Query sends a command to the server and returns the Response. -func (c *client) Query(q Query) (*Response, error) { - u := c.url - u.Path = "query" - - jsonParameters, err := json.Marshal(q.Parameters) - - if err != nil { - return nil, err - } - - req, err := http.NewRequest("POST", u.String(), nil) - if err != nil { - return nil, err - } - - req.Header.Set("Content-Type", "") - req.Header.Set("User-Agent", c.useragent) - - if c.username != "" { - req.SetBasicAuth(c.username, c.password) - } - - params := req.URL.Query() - params.Set("q", q.Command) - params.Set("db", q.Database) - params.Set("params", string(jsonParameters)) - if q.Chunked { - params.Set("chunked", "true") - if q.ChunkSize > 0 { - params.Set("chunk_size", strconv.Itoa(q.ChunkSize)) - } - } - - if q.Precision != "" { - params.Set("epoch", q.Precision) - } - req.URL.RawQuery = params.Encode() - - resp, err := c.httpClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - // If we lack a X-Influxdb-Version header, then we didn't get a response from influxdb - // but instead some other service. If the error code is also a 500+ code, then some - // downstream loadbalancer/proxy/etc had an issue and we should report that. - if resp.Header.Get("X-Influxdb-Version") == "" && resp.StatusCode >= http.StatusInternalServerError { - body, err := ioutil.ReadAll(resp.Body) - if err != nil || len(body) == 0 { - return nil, fmt.Errorf("received status code %d from downstream server", resp.StatusCode) - } - - return nil, fmt.Errorf("received status code %d from downstream server, with response body: %q", resp.StatusCode, body) - } - - // If we get an unexpected content type, then it is also not from influx direct and therefore - // we want to know what we received and what status code was returned for debugging purposes. - if cType, _, _ := mime.ParseMediaType(resp.Header.Get("Content-Type")); cType != "application/json" { - // Read up to 1kb of the body to help identify downstream errors and limit the impact of things - // like downstream serving a large file - body, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1024)) - if err != nil || len(body) == 0 { - return nil, fmt.Errorf("expected json response, got empty body, with status: %v", resp.StatusCode) - } - - return nil, fmt.Errorf("expected json response, got %q, with status: %v and response body: %q", cType, resp.StatusCode, body) - } - - var response Response - if q.Chunked { - cr := NewChunkedResponse(resp.Body) - for { - r, err := cr.NextResponse() - if err != nil { - // If we got an error while decoding the response, send that back. - return nil, err - } - - if r == nil { - break - } - - response.Results = append(response.Results, r.Results...) - if r.Err != "" { - response.Err = r.Err - break - } - } - } else { - dec := json.NewDecoder(resp.Body) - dec.UseNumber() - decErr := dec.Decode(&response) - - // ignore this error if we got an invalid status code - if decErr != nil && decErr.Error() == "EOF" && resp.StatusCode != http.StatusOK { - decErr = nil - } - // If we got a valid decode error, send that back - if decErr != nil { - return nil, fmt.Errorf("unable to decode json: received status code %d err: %s", resp.StatusCode, decErr) - } - } - - // If we don't have an error in our json response, and didn't get statusOK - // then send back an error - if resp.StatusCode != http.StatusOK && response.Error() == nil { - return &response, fmt.Errorf("received status code %d from server", resp.StatusCode) - } - return &response, nil -} - -// duplexReader reads responses and writes it to another writer while -// satisfying the reader interface. -type duplexReader struct { - r io.Reader - w io.Writer -} - -func (r *duplexReader) Read(p []byte) (n int, err error) { - n, err = r.r.Read(p) - if err == nil { - r.w.Write(p[:n]) - } - return n, err -} - -// ChunkedResponse represents a response from the server that -// uses chunking to stream the output. -type ChunkedResponse struct { - dec *json.Decoder - duplex *duplexReader - buf bytes.Buffer -} - -// NewChunkedResponse reads a stream and produces responses from the stream. -func NewChunkedResponse(r io.Reader) *ChunkedResponse { - resp := &ChunkedResponse{} - resp.duplex = &duplexReader{r: r, w: &resp.buf} - resp.dec = json.NewDecoder(resp.duplex) - resp.dec.UseNumber() - return resp -} - -// NextResponse reads the next line of the stream and returns a response. -func (r *ChunkedResponse) NextResponse() (*Response, error) { - var response Response - - if err := r.dec.Decode(&response); err != nil { - if err == io.EOF { - return nil, nil - } - // A decoding error happened. This probably means the server crashed - // and sent a last-ditch error message to us. Ensure we have read the - // entirety of the connection to get any remaining error text. - io.Copy(ioutil.Discard, r.duplex) - return nil, errors.New(strings.TrimSpace(r.buf.String())) - } - - r.buf.Reset() - return &response, nil -} diff --git a/vendor/github.com/influxdata/influxdb/client/v2/udp.go b/vendor/github.com/influxdata/influxdb/client/v2/udp.go deleted file mode 100644 index 779a28b33f34..000000000000 --- a/vendor/github.com/influxdata/influxdb/client/v2/udp.go +++ /dev/null @@ -1,112 +0,0 @@ -package client - -import ( - "fmt" - "io" - "net" - "time" -) - -const ( - // UDPPayloadSize is a reasonable default payload size for UDP packets that - // could be travelling over the internet. - UDPPayloadSize = 512 -) - -// UDPConfig is the config data needed to create a UDP Client. -type UDPConfig struct { - // Addr should be of the form "host:port" - // or "[ipv6-host%zone]:port". - Addr string - - // PayloadSize is the maximum size of a UDP client message, optional - // Tune this based on your network. Defaults to UDPPayloadSize. - PayloadSize int -} - -// NewUDPClient returns a client interface for writing to an InfluxDB UDP -// service from the given config. -func NewUDPClient(conf UDPConfig) (Client, error) { - var udpAddr *net.UDPAddr - udpAddr, err := net.ResolveUDPAddr("udp", conf.Addr) - if err != nil { - return nil, err - } - - conn, err := net.DialUDP("udp", nil, udpAddr) - if err != nil { - return nil, err - } - - payloadSize := conf.PayloadSize - if payloadSize == 0 { - payloadSize = UDPPayloadSize - } - - return &udpclient{ - conn: conn, - payloadSize: payloadSize, - }, nil -} - -// Close releases the udpclient's resources. -func (uc *udpclient) Close() error { - return uc.conn.Close() -} - -type udpclient struct { - conn io.WriteCloser - payloadSize int -} - -func (uc *udpclient) Write(bp BatchPoints) error { - var b = make([]byte, 0, uc.payloadSize) // initial buffer size, it will grow as needed - var d, _ = time.ParseDuration("1" + bp.Precision()) - - var delayedError error - - var checkBuffer = func(n int) { - if len(b) > 0 && len(b)+n > uc.payloadSize { - if _, err := uc.conn.Write(b); err != nil { - delayedError = err - } - b = b[:0] - } - } - - for _, p := range bp.Points() { - p.pt.Round(d) - pointSize := p.pt.StringSize() + 1 // include newline in size - //point := p.pt.RoundedString(d) + "\n" - - checkBuffer(pointSize) - - if p.Time().IsZero() || pointSize <= uc.payloadSize { - b = p.pt.AppendString(b) - b = append(b, '\n') - continue - } - - points := p.pt.Split(uc.payloadSize - 1) // account for newline character - for _, sp := range points { - checkBuffer(sp.StringSize() + 1) - b = sp.AppendString(b) - b = append(b, '\n') - } - } - - if len(b) > 0 { - if _, err := uc.conn.Write(b); err != nil { - return err - } - } - return delayedError -} - -func (uc *udpclient) Query(q Query) (*Response, error) { - return nil, fmt.Errorf("Querying via UDP is not supported") -} - -func (uc *udpclient) Ping(timeout time.Duration) (time.Duration, string, error) { - return 0, "", nil -} diff --git a/vendor/github.com/karalabe/hid/LICENSE.md b/vendor/github.com/karalabe/hid/LICENSE.md deleted file mode 100644 index 230d1daeb619..000000000000 --- a/vendor/github.com/karalabe/hid/LICENSE.md +++ /dev/null @@ -1,8 +0,0 @@ -The components of `hid` are licensed as such: - - * `hidapi` is released under the [3-clause BSD](https://github.com/signal11/hidapi/blob/master/LICENSE-bsd.txt) license. - * `libusb` is released under the [GNU LGPL 2.1](https://github.com/libusb/libusb/blob/master/COPYING)license. - * `go.hid` is released under the [2-clause BSD](https://github.com/GeertJohan/go.hid/blob/master/LICENSE) license. - * `gowchar` is released under the [3-clause BSD](https://github.com/orofarne/gowchar/blob/master/LICENSE) license. - -Given the above, `hid` is licensed under GNU LGPL 2.1 or later on Linux and 3-clause BSD on other platforms. diff --git a/vendor/github.com/karalabe/hid/README.md b/vendor/github.com/karalabe/hid/README.md deleted file mode 100644 index 2851ffe4200f..000000000000 --- a/vendor/github.com/karalabe/hid/README.md +++ /dev/null @@ -1,53 +0,0 @@ -[![Travis][travisimg]][travisurl] -[![AppVeyor][appveyorimg]][appveyorurl] -[![GoDoc][docimg]][docurl] - -[travisimg]: https://travis-ci.org/karalabe/hid.svg?branch=master -[travisurl]: https://travis-ci.org/karalabe/hid -[appveyorimg]: https://ci.appveyor.com/api/projects/status/plroy54odykb0ch3/branch/master?svg=true -[appveyorurl]: https://ci.appveyor.com/project/karalabe/hid -[docimg]: https://godoc.org/github.com/karalabe/hid?status.svg -[docurl]: https://godoc.org/github.com/karalabe/hid - -# Gopher Interface Devices (USB HID) - -The `hid` package is a cross platform library for accessing and communicating with USB Human Interface -Devices (HID). It is an alternative package to [`gousb`](https://github.com/karalabe/gousb) for use -cases where devices support this ligher mode of operation (e.g. input devices, hardware crypto wallets). - -The package wraps [`hidapi`](https://github.com/signal11/hidapi) for accessing OS specific USB HID APIs -directly instead of using low level USB constructs, which might have permission issues on some platforms. -On Linux the package also wraps [`libusb`](https://github.com/libusb/libusb). Both of these dependencies -are vendored directly into the repository and wrapped using CGO, making the `hid` package self-contained -and go-gettable. - -Supported platforms at the moment are Linux, macOS and Windows (exclude constraints are also specified -for Android and iOS to allow smoother vendoring into cross platform projects). - -## Cross-compiling - -Using `go get` the embedded C library is compiled into the binary format of your host OS. Cross compiling to a different platform or architecture entails disabling CGO by default in Go, causing device enumeration `hid.Enumerate()` to yield no results. - -To cross compile a functional version of this library, you'll need to enable CGO during cross compilation via `CGO_ENABLED=1` and you'll need to install and set a cross compilation enabled C toolkit via `CC=your-cross-gcc`. - -## Acknowledgements - -Although the `hid` package is an implementation from scratch, it was heavily inspired by the existing -[`go.hid`](https://github.com/GeertJohan/go.hid) library, which seems abandoned since 2015; is incompatible -with Go 1.6+; and has various external dependencies. Given its inspirational roots, I thought it important -to give credit to the author of said package too. - -Wide character support in the `hid` package is done via the [`gowchar`](https://github.com/orofarne/gowchar) -library, unmaintained since 2013; non buildable with a modern Go release and failing `go vet` checks. As -such, `gowchar` was also vendored in inline (copyright headers and origins preserved). - -## License - -The components of `hid` are licensed as such: - - * `hidapi` is released under the [3-clause BSD](https://github.com/signal11/hidapi/blob/master/LICENSE-bsd.txt) license. - * `libusb` is released under the [GNU LGPL 2.1](https://github.com/libusb/libusb/blob/master/COPYING)license. - * `go.hid` is released under the [2-clause BSD](https://github.com/GeertJohan/go.hid/blob/master/LICENSE) license. - * `gowchar` is released under the [3-clause BSD](https://github.com/orofarne/gowchar/blob/master/LICENSE) license. - -Given the above, `hid` is licensed under GNU LGPL 2.1 or later on Linux and 3-clause BSD on other platforms. diff --git a/vendor/github.com/karalabe/hid/hid.go b/vendor/github.com/karalabe/hid/hid.go deleted file mode 100644 index 60a40b8c24af..000000000000 --- a/vendor/github.com/karalabe/hid/hid.go +++ /dev/null @@ -1,37 +0,0 @@ -// hid - Gopher Interface Devices (USB HID) -// Copyright (c) 2017 Péter Szilágyi. All rights reserved. -// -// This file is released under the 3-clause BSD license. Note however that Linux -// support depends on libusb, released under GNU LGPL 2.1 or later. - -// Package hid provides an interface for USB HID devices. -package hid - -import "errors" - -// ErrDeviceClosed is returned for operations where the device closed before or -// during the execution. -var ErrDeviceClosed = errors.New("hid: device closed") - -// ErrUnsupportedPlatform is returned for all operations where the underlying -// operating system is not supported by the library. -var ErrUnsupportedPlatform = errors.New("hid: unsupported platform") - -// DeviceInfo is a hidapi info structure. -type DeviceInfo struct { - Path string // Platform-specific device path - VendorID uint16 // Device Vendor ID - ProductID uint16 // Device Product ID - Release uint16 // Device Release Number in binary-coded decimal, also known as Device Version Number - Serial string // Serial Number - Manufacturer string // Manufacturer String - Product string // Product string - UsagePage uint16 // Usage Page for this Device/Interface (Windows/Mac only) - Usage uint16 // Usage for this Device/Interface (Windows/Mac only) - - // The USB interface which this logical device - // represents. Valid on both Linux implementations - // in all cases, and valid on the Windows implementation - // only if the device contains more than one interface. - Interface int -} diff --git a/vendor/github.com/karalabe/hid/hid_disabled.go b/vendor/github.com/karalabe/hid/hid_disabled.go deleted file mode 100644 index 0f266ba58a0a..000000000000 --- a/vendor/github.com/karalabe/hid/hid_disabled.go +++ /dev/null @@ -1,51 +0,0 @@ -// hid - Gopher Interface Devices (USB HID) -// Copyright (c) 2017 Péter Szilágyi. All rights reserved. -// -// This file is released under the 3-clause BSD license. Note however that Linux -// support depends on libusb, released under GNU LGPL 2.1 or later. - -// +build !linux,!darwin,!windows ios !cgo - -package hid - -// Supported returns whether this platform is supported by the HID library or not. -// The goal of this method is to allow programatically handling platforms that do -// not support USB HID and not having to fall back to build constraints. -func Supported() bool { - return false -} - -// Enumerate returns a list of all the HID devices attached to the system which -// match the vendor and product id. On platforms that this file implements the -// function is a noop and returns an empty list always. -func Enumerate(vendorID uint16, productID uint16) []DeviceInfo { - return nil -} - -// Device is a live HID USB connected device handle. On platforms that this file -// implements the type lacks the actual HID device and all methods are noop. -type Device struct { - DeviceInfo // Embed the infos for easier access -} - -// Open connects to an HID device by its path name. On platforms that this file -// implements the method just returns an error. -func (info DeviceInfo) Open() (*Device, error) { - return nil, ErrUnsupportedPlatform -} - -// Close releases the HID USB device handle. On platforms that this file implements -// the method is just a noop. -func (dev *Device) Close() error { return nil } - -// Write sends an output report to a HID device. On platforms that this file -// implements the method just returns an error. -func (dev *Device) Write(b []byte) (int, error) { - return 0, ErrUnsupportedPlatform -} - -// Read retrieves an input report from a HID device. On platforms that this file -// implements the method just returns an error. -func (dev *Device) Read(b []byte) (int, error) { - return 0, ErrUnsupportedPlatform -} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.c b/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.c deleted file mode 100644 index 982560751217..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.c +++ /dev/null @@ -1,728 +0,0 @@ -/* - * poll_windows: poll compatibility wrapper for Windows - * Copyright © 2012-2013 RealVNC Ltd. - * Copyright © 2009-2010 Pete Batard - * With contributions from Michael Plante, Orin Eman et al. - * Parts of poll implementation from libusb-win32, by Stephan Meyer et al. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* - * poll() and pipe() Windows compatibility layer for libusb 1.0 - * - * The way this layer works is by using OVERLAPPED with async I/O transfers, as - * OVERLAPPED have an associated event which is flagged for I/O completion. - * - * For USB pollable async I/O, you would typically: - * - obtain a Windows HANDLE to a file or device that has been opened in - * OVERLAPPED mode - * - call usbi_create_fd with this handle to obtain a custom fd. - * Note that if you need simultaneous R/W access, you need to call create_fd - * twice, once in RW_READ and once in RW_WRITE mode to obtain 2 separate - * pollable fds - * - leave the core functions call the poll routine and flag POLLIN/POLLOUT - * - * The pipe pollable synchronous I/O works using the overlapped event associated - * with a fake pipe. The read/write functions are only meant to be used in that - * context. - */ -#include - -#include -#include -#include - -#include "libusbi.h" - -// Uncomment to debug the polling layer -//#define DEBUG_POLL_WINDOWS -#if defined(DEBUG_POLL_WINDOWS) -#define poll_dbg usbi_dbg -#else -// MSVC++ < 2005 cannot use a variadic argument and non MSVC -// compilers produce warnings if parenthesis are omitted. -#if defined(_MSC_VER) && (_MSC_VER < 1400) -#define poll_dbg -#else -#define poll_dbg(...) -#endif -#endif - -#if defined(_PREFAST_) -#pragma warning(disable:28719) -#endif - -#define CHECK_INIT_POLLING do {if(!is_polling_set) init_polling();} while(0) - -// public fd data -const struct winfd INVALID_WINFD = {-1, INVALID_HANDLE_VALUE, NULL, NULL, NULL, RW_NONE}; -struct winfd poll_fd[MAX_FDS]; -// internal fd data -struct { - CRITICAL_SECTION mutex; // lock for fds - // Additional variables for XP CancelIoEx partial emulation - HANDLE original_handle; - DWORD thread_id; -} _poll_fd[MAX_FDS]; - -// globals -BOOLEAN is_polling_set = FALSE; -LONG pipe_number = 0; -static volatile LONG compat_spinlock = 0; - -#if !defined(_WIN32_WCE) -// CancelIoEx, available on Vista and later only, provides the ability to cancel -// a single transfer (OVERLAPPED) when used. As it may not be part of any of the -// platform headers, we hook into the Kernel32 system DLL directly to seek it. -static BOOL (__stdcall *pCancelIoEx)(HANDLE, LPOVERLAPPED) = NULL; -#define Use_Duplicate_Handles (pCancelIoEx == NULL) - -static inline void setup_cancel_io(void) -{ - HMODULE hKernel32 = GetModuleHandleA("KERNEL32"); - if (hKernel32 != NULL) { - pCancelIoEx = (BOOL (__stdcall *)(HANDLE,LPOVERLAPPED)) - GetProcAddress(hKernel32, "CancelIoEx"); - } - usbi_dbg("Will use CancelIo%s for I/O cancellation", - Use_Duplicate_Handles?"":"Ex"); -} - -static inline BOOL cancel_io(int _index) -{ - if ((_index < 0) || (_index >= MAX_FDS)) { - return FALSE; - } - - if ( (poll_fd[_index].fd < 0) || (poll_fd[_index].handle == INVALID_HANDLE_VALUE) - || (poll_fd[_index].handle == 0) || (poll_fd[_index].overlapped == NULL) ) { - return TRUE; - } - if (poll_fd[_index].itransfer && poll_fd[_index].cancel_fn) { - // Cancel outstanding transfer via the specific callback - (*poll_fd[_index].cancel_fn)(poll_fd[_index].itransfer); - return TRUE; - } - if (pCancelIoEx != NULL) { - return (*pCancelIoEx)(poll_fd[_index].handle, poll_fd[_index].overlapped); - } - if (_poll_fd[_index].thread_id == GetCurrentThreadId()) { - return CancelIo(poll_fd[_index].handle); - } - usbi_warn(NULL, "Unable to cancel I/O that was started from another thread"); - return FALSE; -} -#else -#define Use_Duplicate_Handles FALSE - -static __inline void setup_cancel_io() -{ - // No setup needed on WinCE -} - -static __inline BOOL cancel_io(int _index) -{ - if ((_index < 0) || (_index >= MAX_FDS)) { - return FALSE; - } - if ( (poll_fd[_index].fd < 0) || (poll_fd[_index].handle == INVALID_HANDLE_VALUE) - || (poll_fd[_index].handle == 0) || (poll_fd[_index].overlapped == NULL) ) { - return TRUE; - } - if (poll_fd[_index].itransfer && poll_fd[_index].cancel_fn) { - // Cancel outstanding transfer via the specific callback - (*poll_fd[_index].cancel_fn)(poll_fd[_index].itransfer); - } - return TRUE; -} -#endif - -// Init -void init_polling(void) -{ - int i; - - while (InterlockedExchange((LONG *)&compat_spinlock, 1) == 1) { - SleepEx(0, TRUE); - } - if (!is_polling_set) { - setup_cancel_io(); - for (i=0; ihEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - if(overlapped->hEvent == NULL) { - free (overlapped); - return NULL; - } - return overlapped; -} - -static void free_overlapped(OVERLAPPED *overlapped) -{ - if (overlapped == NULL) - return; - - if ( (overlapped->hEvent != 0) - && (overlapped->hEvent != INVALID_HANDLE_VALUE) ) { - CloseHandle(overlapped->hEvent); - } - free(overlapped); -} - -void exit_polling(void) -{ - int i; - - while (InterlockedExchange((LONG *)&compat_spinlock, 1) == 1) { - SleepEx(0, TRUE); - } - if (is_polling_set) { - is_polling_set = FALSE; - - for (i=0; iInternal = STATUS_PENDING; - overlapped->InternalHigh = 0; - - for (i=0; i= 0) { - LeaveCriticalSection(&_poll_fd[i].mutex); - continue; - } - - // Use index as the unique fd number - poll_fd[i].fd = i; - // Read end of the "pipe" - filedes[0] = poll_fd[i].fd; - // We can use the same handle for both ends - filedes[1] = filedes[0]; - - poll_fd[i].handle = DUMMY_HANDLE; - poll_fd[i].overlapped = overlapped; - // There's no polling on the write end, so we just use READ for our needs - poll_fd[i].rw = RW_READ; - _poll_fd[i].original_handle = INVALID_HANDLE_VALUE; - LeaveCriticalSection(&_poll_fd[i].mutex); - return 0; - } - } - free_overlapped(overlapped); - return -1; -} - -/* - * Create both an fd and an OVERLAPPED from an open Windows handle, so that - * it can be used with our polling function - * The handle MUST support overlapped transfers (usually requires CreateFile - * with FILE_FLAG_OVERLAPPED) - * Return a pollable file descriptor struct, or INVALID_WINFD on error - * - * Note that the fd returned by this function is a per-transfer fd, rather - * than a per-session fd and cannot be used for anything else but our - * custom functions (the fd itself points to the NUL: device) - * if you plan to do R/W on the same handle, you MUST create 2 fds: one for - * read and one for write. Using a single R/W fd is unsupported and will - * produce unexpected results - */ -struct winfd usbi_create_fd(HANDLE handle, int access_mode, struct usbi_transfer *itransfer, cancel_transfer *cancel_fn) -{ - int i; - struct winfd wfd = INVALID_WINFD; - OVERLAPPED* overlapped = NULL; - - CHECK_INIT_POLLING; - - if ((handle == 0) || (handle == INVALID_HANDLE_VALUE)) { - return INVALID_WINFD; - } - - wfd.itransfer = itransfer; - wfd.cancel_fn = cancel_fn; - - if ((access_mode != RW_READ) && (access_mode != RW_WRITE)) { - usbi_warn(NULL, "only one of RW_READ or RW_WRITE are supported. " - "If you want to poll for R/W simultaneously, create multiple fds from the same handle."); - return INVALID_WINFD; - } - if (access_mode == RW_READ) { - wfd.rw = RW_READ; - } else { - wfd.rw = RW_WRITE; - } - - overlapped = create_overlapped(); - if(overlapped == NULL) { - return INVALID_WINFD; - } - - for (i=0; i= 0) { - LeaveCriticalSection(&_poll_fd[i].mutex); - continue; - } - // Use index as the unique fd number - wfd.fd = i; - // Attempt to emulate some of the CancelIoEx behaviour on platforms - // that don't have it - if (Use_Duplicate_Handles) { - _poll_fd[i].thread_id = GetCurrentThreadId(); - if (!DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), - &wfd.handle, 0, TRUE, DUPLICATE_SAME_ACCESS)) { - usbi_dbg("could not duplicate handle for CancelIo - using original one"); - wfd.handle = handle; - // Make sure we won't close the original handle on fd deletion then - _poll_fd[i].original_handle = INVALID_HANDLE_VALUE; - } else { - _poll_fd[i].original_handle = handle; - } - } else { - wfd.handle = handle; - } - wfd.overlapped = overlapped; - memcpy(&poll_fd[i], &wfd, sizeof(struct winfd)); - LeaveCriticalSection(&_poll_fd[i].mutex); - return wfd; - } - } - free_overlapped(overlapped); - return INVALID_WINFD; -} - -static void _free_index(int _index) -{ - // Cancel any async IO (Don't care about the validity of our handles for this) - cancel_io(_index); - // close the duplicate handle (if we have an actual duplicate) - if (Use_Duplicate_Handles) { - if (_poll_fd[_index].original_handle != INVALID_HANDLE_VALUE) { - CloseHandle(poll_fd[_index].handle); - } - _poll_fd[_index].original_handle = INVALID_HANDLE_VALUE; - _poll_fd[_index].thread_id = 0; - } - free_overlapped(poll_fd[_index].overlapped); - poll_fd[_index] = INVALID_WINFD; -} - -/* - * Release a pollable file descriptor. - * - * Note that the associated Windows handle is not closed by this call - */ -void usbi_free_fd(struct winfd *wfd) -{ - int _index; - - CHECK_INIT_POLLING; - - _index = _fd_to_index_and_lock(wfd->fd); - if (_index < 0) { - return; - } - _free_index(_index); - *wfd = INVALID_WINFD; - LeaveCriticalSection(&_poll_fd[_index].mutex); -} - -/* - * The functions below perform various conversions between fd, handle and OVERLAPPED - */ -struct winfd fd_to_winfd(int fd) -{ - int i; - struct winfd wfd; - - CHECK_INIT_POLLING; - - if (fd < 0) - return INVALID_WINFD; - - for (i=0; i= 0) { - LeaveCriticalSection(&_poll_fd[_index].mutex); - } - usbi_warn(NULL, "invalid fd"); - triggered = -1; - goto poll_exit; - } - - // IN or OUT must match our fd direction - if ((fds[i].events & POLLIN) && (poll_fd[_index].rw != RW_READ)) { - fds[i].revents |= POLLNVAL | POLLERR; - errno = EBADF; - usbi_warn(NULL, "attempted POLLIN on fd without READ access"); - LeaveCriticalSection(&_poll_fd[_index].mutex); - triggered = -1; - goto poll_exit; - } - - if ((fds[i].events & POLLOUT) && (poll_fd[_index].rw != RW_WRITE)) { - fds[i].revents |= POLLNVAL | POLLERR; - errno = EBADF; - usbi_warn(NULL, "attempted POLLOUT on fd without WRITE access"); - LeaveCriticalSection(&_poll_fd[_index].mutex); - triggered = -1; - goto poll_exit; - } - - // The following macro only works if overlapped I/O was reported pending - if ( (HasOverlappedIoCompleted(poll_fd[_index].overlapped)) - || (HasOverlappedIoCompletedSync(poll_fd[_index].overlapped)) ) { - poll_dbg(" completed"); - // checks above should ensure this works: - fds[i].revents = fds[i].events; - triggered++; - } else { - handles_to_wait_on[nb_handles_to_wait_on] = poll_fd[_index].overlapped->hEvent; - handle_to_index[nb_handles_to_wait_on] = i; - nb_handles_to_wait_on++; - } - LeaveCriticalSection(&_poll_fd[_index].mutex); - } - - // If nothing was triggered, wait on all fds that require it - if ((timeout != 0) && (triggered == 0) && (nb_handles_to_wait_on != 0)) { - if (timeout < 0) { - poll_dbg("starting infinite wait for %u handles...", (unsigned int)nb_handles_to_wait_on); - } else { - poll_dbg("starting %d ms wait for %u handles...", timeout, (unsigned int)nb_handles_to_wait_on); - } - ret = WaitForMultipleObjects(nb_handles_to_wait_on, handles_to_wait_on, - FALSE, (timeout<0)?INFINITE:(DWORD)timeout); - object_index = ret-WAIT_OBJECT_0; - if ((object_index >= 0) && ((DWORD)object_index < nb_handles_to_wait_on)) { - poll_dbg(" completed after wait"); - i = handle_to_index[object_index]; - _index = _fd_to_index_and_lock(fds[i].fd); - fds[i].revents = fds[i].events; - triggered++; - if (_index >= 0) { - LeaveCriticalSection(&_poll_fd[_index].mutex); - } - } else if (ret == WAIT_TIMEOUT) { - poll_dbg(" timed out"); - triggered = 0; // 0 = timeout - } else { - errno = EIO; - triggered = -1; // error - } - } - -poll_exit: - if (handles_to_wait_on != NULL) { - free(handles_to_wait_on); - } - if (handle_to_index != NULL) { - free(handle_to_index); - } - return triggered; -} - -/* - * close a fake pipe fd - */ -int usbi_close(int fd) -{ - int _index; - int r = -1; - - CHECK_INIT_POLLING; - - _index = _fd_to_index_and_lock(fd); - - if (_index < 0) { - errno = EBADF; - } else { - free_overlapped(poll_fd[_index].overlapped); - poll_fd[_index] = INVALID_WINFD; - LeaveCriticalSection(&_poll_fd[_index].mutex); - } - return r; -} - -/* - * synchronous write for fake "pipe" signaling - */ -ssize_t usbi_write(int fd, const void *buf, size_t count) -{ - int _index; - UNUSED(buf); - - CHECK_INIT_POLLING; - - if (count != sizeof(unsigned char)) { - usbi_err(NULL, "this function should only used for signaling"); - return -1; - } - - _index = _fd_to_index_and_lock(fd); - - if ( (_index < 0) || (poll_fd[_index].overlapped == NULL) ) { - errno = EBADF; - if (_index >= 0) { - LeaveCriticalSection(&_poll_fd[_index].mutex); - } - return -1; - } - - poll_dbg("set pipe event (fd = %d, thread = %08X)", _index, (unsigned int)GetCurrentThreadId()); - SetEvent(poll_fd[_index].overlapped->hEvent); - poll_fd[_index].overlapped->Internal = STATUS_WAIT_0; - // If two threads write on the pipe at the same time, we need to - // process two separate reads => use the overlapped as a counter - poll_fd[_index].overlapped->InternalHigh++; - - LeaveCriticalSection(&_poll_fd[_index].mutex); - return sizeof(unsigned char); -} - -/* - * synchronous read for fake "pipe" signaling - */ -ssize_t usbi_read(int fd, void *buf, size_t count) -{ - int _index; - ssize_t r = -1; - UNUSED(buf); - - CHECK_INIT_POLLING; - - if (count != sizeof(unsigned char)) { - usbi_err(NULL, "this function should only used for signaling"); - return -1; - } - - _index = _fd_to_index_and_lock(fd); - - if (_index < 0) { - errno = EBADF; - return -1; - } - - if (WaitForSingleObject(poll_fd[_index].overlapped->hEvent, INFINITE) != WAIT_OBJECT_0) { - usbi_warn(NULL, "waiting for event failed: %u", (unsigned int)GetLastError()); - errno = EIO; - goto out; - } - - poll_dbg("clr pipe event (fd = %d, thread = %08X)", _index, (unsigned int)GetCurrentThreadId()); - poll_fd[_index].overlapped->InternalHigh--; - // Don't reset unless we don't have any more events to process - if (poll_fd[_index].overlapped->InternalHigh <= 0) { - ResetEvent(poll_fd[_index].overlapped->hEvent); - poll_fd[_index].overlapped->Internal = STATUS_PENDING; - } - - r = sizeof(unsigned char); - -out: - LeaveCriticalSection(&_poll_fd[_index].mutex); - return r; -} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.h b/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.h deleted file mode 100644 index 4c1514ea612c..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * libusb synchronization using POSIX Threads - * - * Copyright © 2010 Peter Stuge - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef LIBUSB_THREADS_POSIX_H -#define LIBUSB_THREADS_POSIX_H - -#include -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#define usbi_mutex_static_t pthread_mutex_t -#define USBI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER -#define usbi_mutex_static_lock pthread_mutex_lock -#define usbi_mutex_static_unlock pthread_mutex_unlock - -#define usbi_mutex_t pthread_mutex_t -#define usbi_mutex_init(mutex) pthread_mutex_init((mutex), NULL) -#define usbi_mutex_lock pthread_mutex_lock -#define usbi_mutex_unlock pthread_mutex_unlock -#define usbi_mutex_trylock pthread_mutex_trylock -#define usbi_mutex_destroy pthread_mutex_destroy - -#define usbi_cond_t pthread_cond_t -#define usbi_cond_init(cond) pthread_cond_init((cond), NULL) -#define usbi_cond_wait pthread_cond_wait -#define usbi_cond_broadcast pthread_cond_broadcast -#define usbi_cond_destroy pthread_cond_destroy - -#define usbi_tls_key_t pthread_key_t -#define usbi_tls_key_create(key) pthread_key_create((key), NULL) -#define usbi_tls_key_get pthread_getspecific -#define usbi_tls_key_set pthread_setspecific -#define usbi_tls_key_delete pthread_key_delete - -int usbi_get_tid(void); - -#endif /* LIBUSB_THREADS_POSIX_H */ diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.c b/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.c deleted file mode 100644 index 7c2e52dba6a2..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.c +++ /dev/null @@ -1,259 +0,0 @@ -/* - * libusb synchronization on Microsoft Windows - * - * Copyright © 2010 Michael Plante - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#include -#include - -#include "libusbi.h" - -struct usbi_cond_perthread { - struct list_head list; - DWORD tid; - HANDLE event; -}; - -int usbi_mutex_static_lock(usbi_mutex_static_t *mutex) -{ - if (!mutex) - return EINVAL; - while (InterlockedExchange(mutex, 1) == 1) - SleepEx(0, TRUE); - return 0; -} - -int usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) -{ - if (!mutex) - return EINVAL; - InterlockedExchange(mutex, 0); - return 0; -} - -int usbi_mutex_init(usbi_mutex_t *mutex) -{ - if (!mutex) - return EINVAL; - *mutex = CreateMutex(NULL, FALSE, NULL); - if (!*mutex) - return ENOMEM; - return 0; -} - -int usbi_mutex_lock(usbi_mutex_t *mutex) -{ - DWORD result; - - if (!mutex) - return EINVAL; - result = WaitForSingleObject(*mutex, INFINITE); - if (result == WAIT_OBJECT_0 || result == WAIT_ABANDONED) - return 0; // acquired (ToDo: check that abandoned is ok) - else - return EINVAL; // don't know how this would happen - // so don't know proper errno -} - -int usbi_mutex_unlock(usbi_mutex_t *mutex) -{ - if (!mutex) - return EINVAL; - if (ReleaseMutex(*mutex)) - return 0; - else - return EPERM; -} - -int usbi_mutex_trylock(usbi_mutex_t *mutex) -{ - DWORD result; - - if (!mutex) - return EINVAL; - result = WaitForSingleObject(*mutex, 0); - if (result == WAIT_OBJECT_0 || result == WAIT_ABANDONED) - return 0; // acquired (ToDo: check that abandoned is ok) - else if (result == WAIT_TIMEOUT) - return EBUSY; - else - return EINVAL; // don't know how this would happen - // so don't know proper error -} - -int usbi_mutex_destroy(usbi_mutex_t *mutex) -{ - // It is not clear if CloseHandle failure is due to failure to unlock. - // If so, this should be errno=EBUSY. - if (!mutex || !CloseHandle(*mutex)) - return EINVAL; - *mutex = NULL; - return 0; -} - -int usbi_cond_init(usbi_cond_t *cond) -{ - if (!cond) - return EINVAL; - list_init(&cond->waiters); - list_init(&cond->not_waiting); - return 0; -} - -int usbi_cond_destroy(usbi_cond_t *cond) -{ - // This assumes no one is using this anymore. The check MAY NOT BE safe. - struct usbi_cond_perthread *pos, *next_pos; - - if(!cond) - return EINVAL; - if (!list_empty(&cond->waiters)) - return EBUSY; // (!see above!) - list_for_each_entry_safe(pos, next_pos, &cond->not_waiting, list, struct usbi_cond_perthread) { - CloseHandle(pos->event); - list_del(&pos->list); - free(pos); - } - return 0; -} - -int usbi_cond_broadcast(usbi_cond_t *cond) -{ - // Assumes mutex is locked; this is not in keeping with POSIX spec, but - // libusb does this anyway, so we simplify by not adding more sync - // primitives to the CV definition! - int fail = 0; - struct usbi_cond_perthread *pos; - - if (!cond) - return EINVAL; - list_for_each_entry(pos, &cond->waiters, list, struct usbi_cond_perthread) { - if (!SetEvent(pos->event)) - fail = 1; - } - // The wait function will remove its respective item from the list. - return fail ? EINVAL : 0; -} - -__inline static int usbi_cond_intwait(usbi_cond_t *cond, - usbi_mutex_t *mutex, DWORD timeout_ms) -{ - struct usbi_cond_perthread *pos; - int r, found = 0; - DWORD r2, tid = GetCurrentThreadId(); - - if (!cond || !mutex) - return EINVAL; - list_for_each_entry(pos, &cond->not_waiting, list, struct usbi_cond_perthread) { - if(tid == pos->tid) { - found = 1; - break; - } - } - - if (!found) { - pos = calloc(1, sizeof(struct usbi_cond_perthread)); - if (!pos) - return ENOMEM; // This errno is not POSIX-allowed. - pos->tid = tid; - pos->event = CreateEvent(NULL, FALSE, FALSE, NULL); // auto-reset. - if (!pos->event) { - free(pos); - return ENOMEM; - } - list_add(&pos->list, &cond->not_waiting); - } - - list_del(&pos->list); // remove from not_waiting list. - list_add(&pos->list, &cond->waiters); - - r = usbi_mutex_unlock(mutex); - if (r) - return r; - - r2 = WaitForSingleObject(pos->event, timeout_ms); - r = usbi_mutex_lock(mutex); - if (r) - return r; - - list_del(&pos->list); - list_add(&pos->list, &cond->not_waiting); - - if (r2 == WAIT_OBJECT_0) - return 0; - else if (r2 == WAIT_TIMEOUT) - return ETIMEDOUT; - else - return EINVAL; -} -// N.B.: usbi_cond_*wait() can also return ENOMEM, even though pthread_cond_*wait cannot! -int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) -{ - return usbi_cond_intwait(cond, mutex, INFINITE); -} - -int usbi_cond_timedwait(usbi_cond_t *cond, - usbi_mutex_t *mutex, const struct timeval *tv) -{ - DWORD millis; - - millis = (DWORD)(tv->tv_sec * 1000) + (tv->tv_usec / 1000); - /* round up to next millisecond */ - if (tv->tv_usec % 1000) - millis++; - return usbi_cond_intwait(cond, mutex, millis); -} - -int usbi_tls_key_create(usbi_tls_key_t *key) -{ - if (!key) - return EINVAL; - *key = TlsAlloc(); - if (*key == TLS_OUT_OF_INDEXES) - return ENOMEM; - else - return 0; -} - -void *usbi_tls_key_get(usbi_tls_key_t key) -{ - return TlsGetValue(key); -} - -int usbi_tls_key_set(usbi_tls_key_t key, void *value) -{ - if (TlsSetValue(key, value)) - return 0; - else - return EINVAL; -} - -int usbi_tls_key_delete(usbi_tls_key_t key) -{ - if (TlsFree(key)) - return 0; - else - return EINVAL; -} - -int usbi_get_tid(void) -{ - return (int)GetCurrentThreadId(); -} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.h b/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.h deleted file mode 100644 index 52ea8708b043..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Windows backend common header for libusb 1.0 - * - * This file brings together header code common between - * the desktop Windows backends. - * Copyright © 2012-2013 RealVNC Ltd. - * Copyright © 2009-2012 Pete Batard - * With contributions from Michael Plante, Orin Eman et al. - * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer - * Major code testing contribution by Xiaofan Chen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#pragma once - -// Missing from MinGW -#if !defined(FACILITY_SETUPAPI) -#define FACILITY_SETUPAPI 15 -#endif - -typedef struct USB_CONFIGURATION_DESCRIPTOR { - UCHAR bLength; - UCHAR bDescriptorType; - USHORT wTotalLength; - UCHAR bNumInterfaces; - UCHAR bConfigurationValue; - UCHAR iConfiguration; - UCHAR bmAttributes; - UCHAR MaxPower; -} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; - -typedef struct libusb_device_descriptor USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR; - -int windows_common_init(struct libusb_context *ctx); -void windows_common_exit(void); - -unsigned long htab_hash(const char *str); -int windows_clock_gettime(int clk_id, struct timespec *tp); - -void windows_clear_transfer_priv(struct usbi_transfer *itransfer); -int windows_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size); -struct winfd *windows_get_fd(struct usbi_transfer *transfer); -void windows_get_overlapped_result(struct usbi_transfer *transfer, struct winfd *pollable_fd, DWORD *io_result, DWORD *io_size); - -void windows_handle_callback(struct usbi_transfer *itransfer, uint32_t io_result, uint32_t io_size); -int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready); - -#if defined(ENABLE_LOGGING) -const char *windows_error_str(DWORD error_code); -#endif diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.c b/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.c deleted file mode 100644 index 0dce0ea6cb68..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.c +++ /dev/null @@ -1,4290 +0,0 @@ -/* - * windows backend for libusb 1.0 - * Copyright © 2009-2012 Pete Batard - * With contributions from Michael Plante, Orin Eman et al. - * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer - * HID Reports IOCTLs inspired from HIDAPI by Alan Ott, Signal 11 Software - * Hash table functions adapted from glibc, by Ulrich Drepper et al. - * Major code testing contribution by Xiaofan Chen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#if !defined(USE_USBDK) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "libusbi.h" -#include "poll_windows.h" -#include "windows_winusb.h" - -#define HANDLE_VALID(h) (((h) != 0) && ((h) != INVALID_HANDLE_VALUE)) - -// The 2 macros below are used in conjunction with safe loops. -#define LOOP_CHECK(fcall) \ - { \ - r = fcall; \ - if (r != LIBUSB_SUCCESS) \ - continue; \ - } -#define LOOP_BREAK(err) \ - { \ - r = err; \ - continue; \ - } - -// WinUSB-like API prototypes -static int winusbx_init(int sub_api, struct libusb_context *ctx); -static int winusbx_exit(int sub_api); -static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle); -static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle); -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); -static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); -static int winusbx_abort_transfers(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_abort_control(int sub_api, struct usbi_transfer *itransfer); -static int winusbx_reset_device(int sub_api, struct libusb_device_handle *dev_handle); -static int winusbx_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size); -// HID API prototypes -static int hid_init(int sub_api, struct libusb_context *ctx); -static int hid_exit(int sub_api); -static int hid_open(int sub_api, struct libusb_device_handle *dev_handle); -static void hid_close(int sub_api, struct libusb_device_handle *dev_handle); -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); -static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); -static int hid_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); -static int hid_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); -static int hid_abort_transfers(int sub_api, struct usbi_transfer *itransfer); -static int hid_reset_device(int sub_api, struct libusb_device_handle *dev_handle); -static int hid_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size); -// Composite API prototypes -static int composite_init(int sub_api, struct libusb_context *ctx); -static int composite_exit(int sub_api); -static int composite_open(int sub_api, struct libusb_device_handle *dev_handle); -static void composite_close(int sub_api, struct libusb_device_handle *dev_handle); -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); -static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); -static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); -static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); -static int composite_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); -static int composite_abort_transfers(int sub_api, struct usbi_transfer *itransfer); -static int composite_abort_control(int sub_api, struct usbi_transfer *itransfer); -static int composite_reset_device(int sub_api, struct libusb_device_handle *dev_handle); -static int composite_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size); - - -// Global variables -int windows_version = WINDOWS_UNDEFINED; -static char windows_version_str[128] = "Undefined"; -// Concurrency -static int concurrent_usage = -1; -static usbi_mutex_t autoclaim_lock; -// API globals -#define CHECK_WINUSBX_AVAILABLE(sub_api) \ - do { \ - if (sub_api == SUB_API_NOTSET) \ - sub_api = priv->sub_api; \ - if (!WinUSBX[sub_api].initialized) \ - return LIBUSB_ERROR_ACCESS; \ - } while(0) - -static HMODULE WinUSBX_handle = NULL; -static struct winusb_interface WinUSBX[SUB_API_MAX]; -static const char *sub_api_name[SUB_API_MAX] = WINUSBX_DRV_NAMES; - -static bool api_hid_available = false; -#define CHECK_HID_AVAILABLE \ - do { \ - if (!api_hid_available) \ - return LIBUSB_ERROR_ACCESS; \ - } while (0) - -static inline BOOLEAN guid_eq(const GUID *guid1, const GUID *guid2) -{ - if ((guid1 != NULL) && (guid2 != NULL)) - return (memcmp(guid1, guid2, sizeof(GUID)) == 0); - - return false; -} - -#if defined(ENABLE_LOGGING) -static char *guid_to_string(const GUID *guid) -{ - static char guid_string[MAX_GUID_STRING_LENGTH]; - - if (guid == NULL) - return NULL; - - sprintf(guid_string, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", - (unsigned int)guid->Data1, guid->Data2, guid->Data3, - guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], - guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); - - return guid_string; -} -#endif - -/* - * Sanitize Microsoft's paths: convert to uppercase, add prefix and fix backslashes. - * Return an allocated sanitized string or NULL on error. - */ -static char *sanitize_path(const char *path) -{ - const char root_prefix[] = { '\\', '\\', '.', '\\' }; - size_t j, size; - char *ret_path; - size_t add_root = 0; - - if (path == NULL) - return NULL; - - size = strlen(path) + 1; - - // Microsoft indiscriminately uses '\\?\', '\\.\', '##?#" or "##.#" for root prefixes. - if (!((size > 3) && (((path[0] == '\\') && (path[1] == '\\') && (path[3] == '\\')) - || ((path[0] == '#') && (path[1] == '#') && (path[3] == '#'))))) { - add_root = sizeof(root_prefix); - size += add_root; - } - - ret_path = malloc(size); - if (ret_path == NULL) - return NULL; - - strcpy(&ret_path[add_root], path); - - // Ensure consistency with root prefix - memcpy(ret_path, root_prefix, sizeof(root_prefix)); - - // Same goes for '\' and '#' after the root prefix. Ensure '#' is used - for (j = sizeof(root_prefix); j < size; j++) { - ret_path[j] = (char)toupper((int)ret_path[j]); // Fix case too - if (ret_path[j] == '\\') - ret_path[j] = '#'; - } - - return ret_path; -} - -/* - * Cfgmgr32, OLE32 and SetupAPI DLL functions - */ -static int init_dlls(void) -{ - DLL_GET_HANDLE(Cfgmgr32); - DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Parent, TRUE); - DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Child, TRUE); - DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Sibling, TRUE); - DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Device_IDA, TRUE); - - // Prefixed to avoid conflict with header files - DLL_GET_HANDLE(AdvAPI32); - DLL_LOAD_FUNC_PREFIXED(AdvAPI32, p, RegQueryValueExW, TRUE); - DLL_LOAD_FUNC_PREFIXED(AdvAPI32, p, RegCloseKey, TRUE); - - DLL_GET_HANDLE(Kernel32); - DLL_LOAD_FUNC_PREFIXED(Kernel32, p, IsWow64Process, FALSE); - - DLL_GET_HANDLE(OLE32); - DLL_LOAD_FUNC_PREFIXED(OLE32, p, CLSIDFromString, TRUE); - - DLL_GET_HANDLE(SetupAPI); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetClassDevsA, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiEnumDeviceInfo, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiEnumDeviceInterfaces, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetDeviceInterfaceDetailA, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiDestroyDeviceInfoList, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiOpenDevRegKey, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetDeviceRegistryPropertyA, TRUE); - DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiOpenDeviceInterfaceRegKey, TRUE); - - return LIBUSB_SUCCESS; -} - -static void exit_dlls(void) -{ - DLL_FREE_HANDLE(Cfgmgr32); - DLL_FREE_HANDLE(AdvAPI32); - DLL_FREE_HANDLE(Kernel32); - DLL_FREE_HANDLE(OLE32); - DLL_FREE_HANDLE(SetupAPI); -} - -/* - * enumerate interfaces for the whole USB class - * - * Parameters: - * dev_info: a pointer to a dev_info list - * dev_info_data: a pointer to an SP_DEVINFO_DATA to be filled (or NULL if not needed) - * usb_class: the generic USB class for which to retrieve interface details - * index: zero based index of the interface in the device info list - * - * Note: it is the responsibility of the caller to free the DEVICE_INTERFACE_DETAIL_DATA - * structure returned and call this function repeatedly using the same guid (with an - * incremented index starting at zero) until all interfaces have been returned. - */ -static bool get_devinfo_data(struct libusb_context *ctx, - HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const char *usb_class, unsigned _index) -{ - if (_index <= 0) { - *dev_info = pSetupDiGetClassDevsA(NULL, usb_class, NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); - if (*dev_info == INVALID_HANDLE_VALUE) - return false; - } - - dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); - if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { - if (GetLastError() != ERROR_NO_MORE_ITEMS) - usbi_err(ctx, "Could not obtain device info data for index %u: %s", - _index, windows_error_str(0)); - - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return false; - } - return true; -} - -/* - * enumerate interfaces for a specific GUID - * - * Parameters: - * dev_info: a pointer to a dev_info list - * dev_info_data: a pointer to an SP_DEVINFO_DATA to be filled (or NULL if not needed) - * guid: the GUID for which to retrieve interface details - * index: zero based index of the interface in the device info list - * - * Note: it is the responsibility of the caller to free the DEVICE_INTERFACE_DETAIL_DATA - * structure returned and call this function repeatedly using the same guid (with an - * incremented index starting at zero) until all interfaces have been returned. - */ -static SP_DEVICE_INTERFACE_DETAIL_DATA_A *get_interface_details(struct libusb_context *ctx, - HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const GUID *guid, unsigned _index) -{ - SP_DEVICE_INTERFACE_DATA dev_interface_data; - SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details; - DWORD size; - - if (_index <= 0) - *dev_info = pSetupDiGetClassDevsA(guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); - - if (dev_info_data != NULL) { - dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); - if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { - if (GetLastError() != ERROR_NO_MORE_ITEMS) - usbi_err(ctx, "Could not obtain device info data for index %u: %s", - _index, windows_error_str(0)); - - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; - } - } - - dev_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); - if (!pSetupDiEnumDeviceInterfaces(*dev_info, NULL, guid, _index, &dev_interface_data)) { - if (GetLastError() != ERROR_NO_MORE_ITEMS) - usbi_err(ctx, "Could not obtain interface data for index %u: %s", - _index, windows_error_str(0)); - - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; - } - - // Read interface data (dummy + actual) to access the device path - if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, NULL, 0, &size, NULL)) { - // The dummy call should fail with ERROR_INSUFFICIENT_BUFFER - if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { - usbi_err(ctx, "could not access interface data (dummy) for index %u: %s", - _index, windows_error_str(0)); - goto err_exit; - } - } else { - usbi_err(ctx, "program assertion failed - http://msdn.microsoft.com/en-us/library/ms792901.aspx is wrong."); - goto err_exit; - } - - dev_interface_details = calloc(1, size); - if (dev_interface_details == NULL) { - usbi_err(ctx, "could not allocate interface data for index %u.", _index); - goto err_exit; - } - - dev_interface_details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); - if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, - dev_interface_details, size, &size, NULL)) { - usbi_err(ctx, "could not access interface data (actual) for index %u: %s", - _index, windows_error_str(0)); - } - - return dev_interface_details; - -err_exit: - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; -} - -/* For libusb0 filter */ -static SP_DEVICE_INTERFACE_DETAIL_DATA_A *get_interface_details_filter(struct libusb_context *ctx, - HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const GUID *guid, unsigned _index, char *filter_path) -{ - SP_DEVICE_INTERFACE_DATA dev_interface_data; - SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details; - DWORD size; - - if (_index <= 0) - *dev_info = pSetupDiGetClassDevsA(guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); - - if (dev_info_data != NULL) { - dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); - if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { - if (GetLastError() != ERROR_NO_MORE_ITEMS) - usbi_err(ctx, "Could not obtain device info data for index %u: %s", - _index, windows_error_str(0)); - - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; - } - } - - dev_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); - if (!pSetupDiEnumDeviceInterfaces(*dev_info, NULL, guid, _index, &dev_interface_data)) { - if (GetLastError() != ERROR_NO_MORE_ITEMS) - usbi_err(ctx, "Could not obtain interface data for index %u: %s", - _index, windows_error_str(0)); - - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; - } - - // Read interface data (dummy + actual) to access the device path - if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, NULL, 0, &size, NULL)) { - // The dummy call should fail with ERROR_INSUFFICIENT_BUFFER - if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { - usbi_err(ctx, "could not access interface data (dummy) for index %u: %s", - _index, windows_error_str(0)); - goto err_exit; - } - } else { - usbi_err(ctx, "program assertion failed - http://msdn.microsoft.com/en-us/library/ms792901.aspx is wrong."); - goto err_exit; - } - - dev_interface_details = calloc(1, size); - if (dev_interface_details == NULL) { - usbi_err(ctx, "could not allocate interface data for index %u.", _index); - goto err_exit; - } - - dev_interface_details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); - if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, dev_interface_details, size, &size, NULL)) - usbi_err(ctx, "could not access interface data (actual) for index %u: %s", - _index, windows_error_str(0)); - - // [trobinso] lookup the libusb0 symbolic index. - if (dev_interface_details) { - HKEY hkey_device_interface = pSetupDiOpenDeviceInterfaceRegKey(*dev_info, &dev_interface_data, 0, KEY_READ); - if (hkey_device_interface != INVALID_HANDLE_VALUE) { - DWORD libusb0_symboliclink_index = 0; - DWORD value_length = sizeof(DWORD); - DWORD value_type = 0; - LONG status; - - status = pRegQueryValueExW(hkey_device_interface, L"LUsb0", NULL, &value_type, - (LPBYTE)&libusb0_symboliclink_index, &value_length); - if (status == ERROR_SUCCESS) { - if (libusb0_symboliclink_index < 256) { - // libusb0.sys is connected to this device instance. - // If the the device interface guid is {F9F3FF14-AE21-48A0-8A25-8011A7A931D9} then it's a filter. - sprintf(filter_path, "\\\\.\\libusb0-%04u", (unsigned int)libusb0_symboliclink_index); - usbi_dbg("assigned libusb0 symbolic link %s", filter_path); - } else { - // libusb0.sys was connected to this device instance at one time; but not anymore. - } - } - pRegCloseKey(hkey_device_interface); - } - } - - return dev_interface_details; - -err_exit: - pSetupDiDestroyDeviceInfoList(*dev_info); - *dev_info = INVALID_HANDLE_VALUE; - return NULL; -} - -/* - * Returns the session ID of a device's nth level ancestor - * If there's no device at the nth level, return 0 - */ -static unsigned long get_ancestor_session_id(DWORD devinst, unsigned level) -{ - DWORD parent_devinst; - unsigned long session_id; - char *sanitized_path; - char path[MAX_PATH_LENGTH]; - unsigned i; - - if (level < 1) - return 0; - - for (i = 0; i < level; i++) { - if (CM_Get_Parent(&parent_devinst, devinst, 0) != CR_SUCCESS) - return 0; - devinst = parent_devinst; - } - - if (CM_Get_Device_IDA(devinst, path, MAX_PATH_LENGTH, 0) != CR_SUCCESS) - return 0; - - // TODO: (post hotplug): try without sanitizing - sanitized_path = sanitize_path(path); - if (sanitized_path == NULL) - return 0; - - session_id = htab_hash(sanitized_path); - free(sanitized_path); - return session_id; -} - -/* - * Determine which interface the given endpoint address belongs to - */ -static int get_interface_by_endpoint(struct libusb_config_descriptor *conf_desc, uint8_t ep) -{ - const struct libusb_interface *intf; - const struct libusb_interface_descriptor *intf_desc; - int i, j, k; - - for (i = 0; i < conf_desc->bNumInterfaces; i++) { - intf = &conf_desc->interface[i]; - for (j = 0; j < intf->num_altsetting; j++) { - intf_desc = &intf->altsetting[j]; - for (k = 0; k < intf_desc->bNumEndpoints; k++) { - if (intf_desc->endpoint[k].bEndpointAddress == ep) { - usbi_dbg("found endpoint %02X on interface %d", intf_desc->bInterfaceNumber, i); - return intf_desc->bInterfaceNumber; - } - } - } - } - - usbi_dbg("endpoint %02X not found on any interface", ep); - return LIBUSB_ERROR_NOT_FOUND; -} - -/* - * Populate the endpoints addresses of the device_priv interface helper structs - */ -static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - int i, r; - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct libusb_config_descriptor *conf_desc; - const struct libusb_interface_descriptor *if_desc; - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - - r = libusb_get_active_config_descriptor(dev_handle->dev, &conf_desc); - if (r != LIBUSB_SUCCESS) { - usbi_warn(ctx, "could not read config descriptor: error %d", r); - return r; - } - - if_desc = &conf_desc->interface[iface].altsetting[altsetting]; - safe_free(priv->usb_interface[iface].endpoint); - - if (if_desc->bNumEndpoints == 0) { - usbi_dbg("no endpoints found for interface %d", iface); - libusb_free_config_descriptor(conf_desc); - return LIBUSB_SUCCESS; - } - - priv->usb_interface[iface].endpoint = malloc(if_desc->bNumEndpoints); - if (priv->usb_interface[iface].endpoint == NULL) { - libusb_free_config_descriptor(conf_desc); - return LIBUSB_ERROR_NO_MEM; - } - - priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints; - for (i = 0; i < if_desc->bNumEndpoints; i++) { - priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress; - usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface); - } - libusb_free_config_descriptor(conf_desc); - - // Extra init may be required to configure endpoints - return priv->apib->configure_endpoints(SUB_API_NOTSET, dev_handle, iface); -} - -// Lookup for a match in the list of API driver names -// return -1 if not found, driver match number otherwise -static int get_sub_api(char *driver, int api) -{ - int i; - const char sep_str[2] = {LIST_SEPARATOR, 0}; - char *tok, *tmp_str; - size_t len = strlen(driver); - - if (len == 0) - return SUB_API_NOTSET; - - tmp_str = _strdup(driver); - if (tmp_str == NULL) - return SUB_API_NOTSET; - - tok = strtok(tmp_str, sep_str); - while (tok != NULL) { - for (i = 0; i < usb_api_backend[api].nb_driver_names; i++) { - if (_stricmp(tok, usb_api_backend[api].driver_name_list[i]) == 0) { - free(tmp_str); - return i; - } - } - tok = strtok(NULL, sep_str); - } - - free(tmp_str); - return SUB_API_NOTSET; -} - -/* - * auto-claiming and auto-release helper functions - */ -static int auto_claim(struct libusb_transfer *transfer, int *interface_number, int api_type) -{ - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv( - transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int current_interface = *interface_number; - int r = LIBUSB_SUCCESS; - - switch(api_type) { - case USB_API_WINUSBX: - case USB_API_HID: - break; - default: - return LIBUSB_ERROR_INVALID_PARAM; - } - - usbi_mutex_lock(&autoclaim_lock); - if (current_interface < 0) { // No serviceable interface was found - for (current_interface = 0; current_interface < USB_MAXINTERFACES; current_interface++) { - // Must claim an interface of the same API type - if ((priv->usb_interface[current_interface].apib->id == api_type) - && (libusb_claim_interface(transfer->dev_handle, current_interface) == LIBUSB_SUCCESS)) { - usbi_dbg("auto-claimed interface %d for control request", current_interface); - if (handle_priv->autoclaim_count[current_interface] != 0) - usbi_warn(ctx, "program assertion failed - autoclaim_count was nonzero"); - handle_priv->autoclaim_count[current_interface]++; - break; - } - } - if (current_interface == USB_MAXINTERFACES) { - usbi_err(ctx, "could not auto-claim any interface"); - r = LIBUSB_ERROR_NOT_FOUND; - } - } else { - // If we have a valid interface that was autoclaimed, we must increment - // its autoclaim count so that we can prevent an early release. - if (handle_priv->autoclaim_count[current_interface] != 0) - handle_priv->autoclaim_count[current_interface]++; - } - usbi_mutex_unlock(&autoclaim_lock); - - *interface_number = current_interface; - return r; -} - -static void auto_release(struct usbi_transfer *itransfer) -{ - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - libusb_device_handle *dev_handle = transfer->dev_handle; - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - int r; - - usbi_mutex_lock(&autoclaim_lock); - if (handle_priv->autoclaim_count[transfer_priv->interface_number] > 0) { - handle_priv->autoclaim_count[transfer_priv->interface_number]--; - if (handle_priv->autoclaim_count[transfer_priv->interface_number] == 0) { - r = libusb_release_interface(dev_handle, transfer_priv->interface_number); - if (r == LIBUSB_SUCCESS) - usbi_dbg("auto-released interface %d", transfer_priv->interface_number); - else - usbi_dbg("failed to auto-release interface %d (%s)", - transfer_priv->interface_number, libusb_error_name((enum libusb_error)r)); - } - } - usbi_mutex_unlock(&autoclaim_lock); -} - -/* Windows version dtection */ -static BOOL is_x64(void) -{ - BOOL ret = FALSE; - - // Detect if we're running a 32 or 64 bit system - if (sizeof(uintptr_t) < 8) { - if (pIsWow64Process != NULL) - pIsWow64Process(GetCurrentProcess(), &ret); - } else { - ret = TRUE; - } - - return ret; -} - -static void get_windows_version(void) -{ - OSVERSIONINFOEXA vi, vi2; - const char *arch, *w = NULL; - unsigned major, minor; - ULONGLONG major_equal, minor_equal; - BOOL ws; - - memset(&vi, 0, sizeof(vi)); - vi.dwOSVersionInfoSize = sizeof(vi); - if (!GetVersionExA((OSVERSIONINFOA *)&vi)) { - memset(&vi, 0, sizeof(vi)); - vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - if (!GetVersionExA((OSVERSIONINFOA *)&vi)) - return; - } - - if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT) { - if (vi.dwMajorVersion > 6 || (vi.dwMajorVersion == 6 && vi.dwMinorVersion >= 2)) { - // Starting with Windows 8.1 Preview, GetVersionEx() does no longer report the actual OS version - // See: http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx - - major_equal = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL); - for (major = vi.dwMajorVersion; major <= 9; major++) { - memset(&vi2, 0, sizeof(vi2)); - vi2.dwOSVersionInfoSize = sizeof(vi2); - vi2.dwMajorVersion = major; - if (!VerifyVersionInfoA(&vi2, VER_MAJORVERSION, major_equal)) - continue; - - if (vi.dwMajorVersion < major) { - vi.dwMajorVersion = major; - vi.dwMinorVersion = 0; - } - - minor_equal = VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL); - for (minor = vi.dwMinorVersion; minor <= 9; minor++) { - memset(&vi2, 0, sizeof(vi2)); - vi2.dwOSVersionInfoSize = sizeof(vi2); - vi2.dwMinorVersion = minor; - if (!VerifyVersionInfoA(&vi2, VER_MINORVERSION, minor_equal)) - continue; - - vi.dwMinorVersion = minor; - break; - } - - break; - } - } - - if (vi.dwMajorVersion <= 0xf && vi.dwMinorVersion <= 0xf) { - ws = (vi.wProductType <= VER_NT_WORKSTATION); - windows_version = vi.dwMajorVersion << 4 | vi.dwMinorVersion; - switch (windows_version) { - case 0x50: w = "2000"; break; - case 0x51: w = "XP"; break; - case 0x52: w = "2003"; break; - case 0x60: w = (ws ? "Vista" : "2008"); break; - case 0x61: w = (ws ? "7" : "2008_R2"); break; - case 0x62: w = (ws ? "8" : "2012"); break; - case 0x63: w = (ws ? "8.1" : "2012_R2"); break; - case 0x64: w = (ws ? "10" : "2015"); break; - default: - if (windows_version < 0x50) - windows_version = WINDOWS_UNSUPPORTED; - else - w = "11 or later"; - break; - } - } - } - - arch = is_x64() ? "64-bit" : "32-bit"; - - if (w == NULL) - snprintf(windows_version_str, sizeof(windows_version_str), "%s %u.%u %s", - (vi.dwPlatformId == VER_PLATFORM_WIN32_NT ? "NT" : "??"), - (unsigned int)vi.dwMajorVersion, (unsigned int)vi.dwMinorVersion, arch); - else if (vi.wServicePackMinor) - snprintf(windows_version_str, sizeof(windows_version_str), "%s SP%u.%u %s", - w, vi.wServicePackMajor, vi.wServicePackMinor, arch); - else if (vi.wServicePackMajor) - snprintf(windows_version_str, sizeof(windows_version_str), "%s SP%u %s", - w, vi.wServicePackMajor, arch); - else - snprintf(windows_version_str, sizeof(windows_version_str), "%s %s", - w, arch); -} - -/* - * init: libusb backend init function - * - * This function enumerates the HCDs (Host Controller Drivers) and populates our private HCD list - * In our implementation, we equate Windows' "HCD" to libusb's "bus". Note that bus is zero indexed. - * HCDs are not expected to change after init (might not hold true for hot pluggable USB PCI card?) - */ -static int windows_init(struct libusb_context *ctx) -{ - int i, r = LIBUSB_ERROR_OTHER; - HANDLE semaphore; - char sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' - - sprintf(sem_name, "libusb_init%08X", (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); - semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name); - if (semaphore == NULL) { - usbi_err(ctx, "could not create semaphore: %s", windows_error_str(0)); - return LIBUSB_ERROR_NO_MEM; - } - - // A successful wait brings our semaphore count to 0 (unsignaled) - // => any concurent wait stalls until the semaphore's release - if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { - usbi_err(ctx, "failure to access semaphore: %s", windows_error_str(0)); - CloseHandle(semaphore); - return LIBUSB_ERROR_NO_MEM; - } - - // NB: concurrent usage supposes that init calls are equally balanced with - // exit calls. If init is called more than exit, we will not exit properly - if (++concurrent_usage == 0) { // First init? - get_windows_version(); - usbi_dbg("Windows %s", windows_version_str); - - if (windows_version == WINDOWS_UNSUPPORTED) { - usbi_err(ctx, "This version of Windows is NOT supported"); - r = LIBUSB_ERROR_NOT_SUPPORTED; - goto init_exit; - } - - // We need a lock for proper auto-release - usbi_mutex_init(&autoclaim_lock); - - // Initialize pollable file descriptors - init_polling(); - - // Load DLL imports - if (init_dlls() != LIBUSB_SUCCESS) { - usbi_err(ctx, "could not resolve DLL functions"); - goto init_exit; - } - - // Initialize the low level APIs (we don't care about errors at this stage) - for (i = 0; i < USB_API_MAX; i++) - usb_api_backend[i].init(SUB_API_NOTSET, ctx); - - r = windows_common_init(ctx); - if (r) - goto init_exit; - } - // At this stage, either we went through full init successfully, or didn't need to - r = LIBUSB_SUCCESS; - -init_exit: // Holds semaphore here. - if (!concurrent_usage && r != LIBUSB_SUCCESS) { // First init failed? - for (i = 0; i < USB_API_MAX; i++) - usb_api_backend[i].exit(SUB_API_NOTSET); - exit_dlls(); - exit_polling(); - windows_common_exit(); - usbi_mutex_destroy(&autoclaim_lock); - } - - if (r != LIBUSB_SUCCESS) - --concurrent_usage; // Not expected to call libusb_exit if we failed. - - ReleaseSemaphore(semaphore, 1, NULL); // increase count back to 1 - CloseHandle(semaphore); - return r; -} - -/* - * HCD (root) hubs need to have their device descriptor manually populated - * - * Note that, like Microsoft does in the device manager, we populate the - * Vendor and Device ID for HCD hubs with the ones from the PCI HCD device. - */ -static int force_hcd_device_descriptor(struct libusb_device *dev) -{ - struct windows_device_priv *parent_priv, *priv = _device_priv(dev); - struct libusb_context *ctx = DEVICE_CTX(dev); - int vid, pid; - - dev->num_configurations = 1; - priv->dev_descriptor.bLength = sizeof(USB_DEVICE_DESCRIPTOR); - priv->dev_descriptor.bDescriptorType = USB_DEVICE_DESCRIPTOR_TYPE; - priv->dev_descriptor.bNumConfigurations = 1; - priv->active_config = 1; - - if (dev->parent_dev == NULL) { - usbi_err(ctx, "program assertion failed - HCD hub has no parent"); - return LIBUSB_ERROR_NO_DEVICE; - } - - parent_priv = _device_priv(dev->parent_dev); - if (sscanf(parent_priv->path, "\\\\.\\PCI#VEN_%04x&DEV_%04x%*s", &vid, &pid) == 2) { - priv->dev_descriptor.idVendor = (uint16_t)vid; - priv->dev_descriptor.idProduct = (uint16_t)pid; - } else { - usbi_warn(ctx, "could not infer VID/PID of HCD hub from '%s'", parent_priv->path); - priv->dev_descriptor.idVendor = 0x1d6b; // Linux Foundation root hub - priv->dev_descriptor.idProduct = 1; - } - - return LIBUSB_SUCCESS; -} - -/* - * fetch and cache all the config descriptors through I/O - */ -static int cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle, char *device_id) -{ - DWORD size, ret_size; - struct libusb_context *ctx = DEVICE_CTX(dev); - struct windows_device_priv *priv = _device_priv(dev); - int r; - uint8_t i; - - USB_CONFIGURATION_DESCRIPTOR_SHORT cd_buf_short; // dummy request - PUSB_DESCRIPTOR_REQUEST cd_buf_actual = NULL; // actual request - PUSB_CONFIGURATION_DESCRIPTOR cd_data = NULL; - - if (dev->num_configurations == 0) - return LIBUSB_ERROR_INVALID_PARAM; - - priv->config_descriptor = calloc(dev->num_configurations, sizeof(unsigned char *)); - if (priv->config_descriptor == NULL) - return LIBUSB_ERROR_NO_MEM; - - for (i = 0; i < dev->num_configurations; i++) - priv->config_descriptor[i] = NULL; - - for (i = 0, r = LIBUSB_SUCCESS; ; i++) { - // safe loop: release all dynamic resources - safe_free(cd_buf_actual); - - // safe loop: end of loop condition - if ((i >= dev->num_configurations) || (r != LIBUSB_SUCCESS)) - break; - - size = sizeof(USB_CONFIGURATION_DESCRIPTOR_SHORT); - memset(&cd_buf_short, 0, size); - - cd_buf_short.req.ConnectionIndex = (ULONG)priv->port; - cd_buf_short.req.SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; - cd_buf_short.req.SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR; - cd_buf_short.req.SetupPacket.wValue = (USB_CONFIGURATION_DESCRIPTOR_TYPE << 8) | i; - cd_buf_short.req.SetupPacket.wIndex = 0; - cd_buf_short.req.SetupPacket.wLength = (USHORT)(size - sizeof(USB_DESCRIPTOR_REQUEST)); - - // Dummy call to get the required data size. Initial failures are reported as info rather - // than error as they can occur for non-penalizing situations, such as with some hubs. - // coverity[tainted_data_argument] - if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, &cd_buf_short, size, - &cd_buf_short, size, &ret_size, NULL)) { - usbi_info(ctx, "could not access configuration descriptor (dummy) for '%s': %s", device_id, windows_error_str(0)); - LOOP_BREAK(LIBUSB_ERROR_IO); - } - - if ((ret_size != size) || (cd_buf_short.data.wTotalLength < sizeof(USB_CONFIGURATION_DESCRIPTOR))) { - usbi_info(ctx, "unexpected configuration descriptor size (dummy) for '%s'.", device_id); - LOOP_BREAK(LIBUSB_ERROR_IO); - } - - size = sizeof(USB_DESCRIPTOR_REQUEST) + cd_buf_short.data.wTotalLength; - cd_buf_actual = calloc(1, size); - if (cd_buf_actual == NULL) { - usbi_err(ctx, "could not allocate configuration descriptor buffer for '%s'.", device_id); - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - } - - // Actual call - cd_buf_actual->ConnectionIndex = (ULONG)priv->port; - cd_buf_actual->SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; - cd_buf_actual->SetupPacket.bRequest = USB_REQUEST_GET_DESCRIPTOR; - cd_buf_actual->SetupPacket.wValue = (USB_CONFIGURATION_DESCRIPTOR_TYPE << 8) | i; - cd_buf_actual->SetupPacket.wIndex = 0; - cd_buf_actual->SetupPacket.wLength = (USHORT)(size - sizeof(USB_DESCRIPTOR_REQUEST)); - - if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, cd_buf_actual, size, - cd_buf_actual, size, &ret_size, NULL)) { - usbi_err(ctx, "could not access configuration descriptor (actual) for '%s': %s", device_id, windows_error_str(0)); - LOOP_BREAK(LIBUSB_ERROR_IO); - } - - cd_data = (PUSB_CONFIGURATION_DESCRIPTOR)((UCHAR *)cd_buf_actual + sizeof(USB_DESCRIPTOR_REQUEST)); - - if ((size != ret_size) || (cd_data->wTotalLength != cd_buf_short.data.wTotalLength)) { - usbi_err(ctx, "unexpected configuration descriptor size (actual) for '%s'.", device_id); - LOOP_BREAK(LIBUSB_ERROR_IO); - } - - if (cd_data->bDescriptorType != USB_CONFIGURATION_DESCRIPTOR_TYPE) { - usbi_err(ctx, "not a configuration descriptor for '%s'", device_id); - LOOP_BREAK(LIBUSB_ERROR_IO); - } - - usbi_dbg("cached config descriptor %d (bConfigurationValue=%u, %u bytes)", - i, cd_data->bConfigurationValue, cd_data->wTotalLength); - - // Cache the descriptor - priv->config_descriptor[i] = malloc(cd_data->wTotalLength); - if (priv->config_descriptor[i] == NULL) - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength); - } - return LIBUSB_SUCCESS; -} - -/* - * Populate a libusb device structure - */ -static int init_device(struct libusb_device *dev, struct libusb_device *parent_dev, - uint8_t port_number, char *device_id, DWORD devinst) -{ - HANDLE handle; - DWORD size; - USB_NODE_CONNECTION_INFORMATION_EX conn_info; - USB_NODE_CONNECTION_INFORMATION_EX_V2 conn_info_v2; - struct windows_device_priv *priv, *parent_priv; - struct libusb_context *ctx; - struct libusb_device *tmp_dev; - unsigned long tmp_id; - unsigned i; - - if ((dev == NULL) || (parent_dev == NULL)) - return LIBUSB_ERROR_NOT_FOUND; - - ctx = DEVICE_CTX(dev); - priv = _device_priv(dev); - parent_priv = _device_priv(parent_dev); - if (parent_priv->apib->id != USB_API_HUB) { - usbi_warn(ctx, "parent for device '%s' is not a hub", device_id); - return LIBUSB_ERROR_NOT_FOUND; - } - - // It is possible for the parent hub not to have been initialized yet - // If that's the case, lookup the ancestors to set the bus number - if (parent_dev->bus_number == 0) { - for (i = 2; ; i++) { - tmp_id = get_ancestor_session_id(devinst, i); - if (tmp_id == 0) - break; - - tmp_dev = usbi_get_device_by_session_id(ctx, tmp_id); - if (tmp_dev == NULL) - continue; - - if (tmp_dev->bus_number != 0) { - usbi_dbg("got bus number from ancestor #%u", i); - parent_dev->bus_number = tmp_dev->bus_number; - libusb_unref_device(tmp_dev); - break; - } - - libusb_unref_device(tmp_dev); - } - } - - if (parent_dev->bus_number == 0) { - usbi_err(ctx, "program assertion failed: unable to find ancestor bus number for '%s'", device_id); - return LIBUSB_ERROR_NOT_FOUND; - } - - dev->bus_number = parent_dev->bus_number; - priv->port = port_number; - dev->port_number = port_number; - priv->depth = parent_priv->depth + 1; - dev->parent_dev = parent_dev; - - // If the device address is already set, we can stop here - if (dev->device_address != 0) - return LIBUSB_SUCCESS; - - memset(&conn_info, 0, sizeof(conn_info)); - if (priv->depth != 0) { // Not a HCD hub - handle = CreateFileA(parent_priv->path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, - FILE_FLAG_OVERLAPPED, NULL); - if (handle == INVALID_HANDLE_VALUE) { - usbi_warn(ctx, "could not open hub %s: %s", parent_priv->path, windows_error_str(0)); - return LIBUSB_ERROR_ACCESS; - } - - size = sizeof(conn_info); - conn_info.ConnectionIndex = (ULONG)port_number; - // coverity[tainted_data_argument] - if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, size, - &conn_info, size, &size, NULL)) { - usbi_warn(ctx, "could not get node connection information for device '%s': %s", - device_id, windows_error_str(0)); - CloseHandle(handle); - return LIBUSB_ERROR_NO_DEVICE; - } - - if (conn_info.ConnectionStatus == NoDeviceConnected) { - usbi_err(ctx, "device '%s' is no longer connected!", device_id); - CloseHandle(handle); - return LIBUSB_ERROR_NO_DEVICE; - } - - memcpy(&priv->dev_descriptor, &(conn_info.DeviceDescriptor), sizeof(USB_DEVICE_DESCRIPTOR)); - dev->num_configurations = priv->dev_descriptor.bNumConfigurations; - priv->active_config = conn_info.CurrentConfigurationValue; - usbi_dbg("found %u configurations (active conf: %u)", dev->num_configurations, priv->active_config); - - // If we can't read the config descriptors, just set the number of confs to zero - if (cache_config_descriptors(dev, handle, device_id) != LIBUSB_SUCCESS) { - dev->num_configurations = 0; - priv->dev_descriptor.bNumConfigurations = 0; - } - - // In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8 - if (windows_version >= WINDOWS_8) { - memset(&conn_info_v2, 0, sizeof(conn_info_v2)); - size = sizeof(conn_info_v2); - conn_info_v2.ConnectionIndex = (ULONG)port_number; - conn_info_v2.Length = size; - conn_info_v2.SupportedUsbProtocols.Usb300 = 1; - if (!DeviceIoControl(handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, - &conn_info_v2, size, &conn_info_v2, size, &size, NULL)) { - usbi_warn(ctx, "could not get node connection information (V2) for device '%s': %s", - device_id, windows_error_str(0)); - } else if (conn_info_v2.Flags.DeviceIsOperatingAtSuperSpeedOrHigher) { - conn_info.Speed = 3; - } - } - - CloseHandle(handle); - - if (conn_info.DeviceAddress > UINT8_MAX) - usbi_err(ctx, "program assertion failed: device address overflow"); - - dev->device_address = (uint8_t)conn_info.DeviceAddress + 1; - if (dev->device_address == 1) - usbi_err(ctx, "program assertion failed: device address collision with root hub"); - - switch (conn_info.Speed) { - case 0: dev->speed = LIBUSB_SPEED_LOW; break; - case 1: dev->speed = LIBUSB_SPEED_FULL; break; - case 2: dev->speed = LIBUSB_SPEED_HIGH; break; - case 3: dev->speed = LIBUSB_SPEED_SUPER; break; - default: - usbi_warn(ctx, "Got unknown device speed %u", conn_info.Speed); - break; - } - } else { - dev->device_address = 1; // root hubs are set to use device number 1 - force_hcd_device_descriptor(dev); - } - - usbi_sanitize_device(dev); - - usbi_dbg("(bus: %u, addr: %u, depth: %u, port: %u): '%s'", - dev->bus_number, dev->device_address, priv->depth, priv->port, device_id); - - return LIBUSB_SUCCESS; -} - -// Returns the api type, or 0 if not found/unsupported -static void get_api_type(struct libusb_context *ctx, HDEVINFO *dev_info, - SP_DEVINFO_DATA *dev_info_data, int *api, int *sub_api) -{ - // Precedence for filter drivers vs driver is in the order of this array - struct driver_lookup lookup[3] = { - {"\0\0", SPDRP_SERVICE, "driver"}, - {"\0\0", SPDRP_UPPERFILTERS, "upper filter driver"}, - {"\0\0", SPDRP_LOWERFILTERS, "lower filter driver"} - }; - DWORD size, reg_type; - unsigned k, l; - int i, j; - - *api = USB_API_UNSUPPORTED; - *sub_api = SUB_API_NOTSET; - - // Check the service & filter names to know the API we should use - for (k = 0; k < 3; k++) { - if (pSetupDiGetDeviceRegistryPropertyA(*dev_info, dev_info_data, lookup[k].reg_prop, - ®_type, (BYTE *)lookup[k].list, MAX_KEY_LENGTH, &size)) { - // Turn the REG_SZ SPDRP_SERVICE into REG_MULTI_SZ - if (lookup[k].reg_prop == SPDRP_SERVICE) - // our buffers are MAX_KEY_LENGTH + 1 so we can overflow if needed - lookup[k].list[strlen(lookup[k].list) + 1] = 0; - - // MULTI_SZ is a pain to work with. Turn it into something much more manageable - // NB: none of the driver names we check against contain LIST_SEPARATOR, - // (currently ';'), so even if an unsuported one does, it's not an issue - for (l = 0; (lookup[k].list[l] != 0) || (lookup[k].list[l + 1] != 0); l++) { - if (lookup[k].list[l] == 0) - lookup[k].list[l] = LIST_SEPARATOR; - } - usbi_dbg("%s(s): %s", lookup[k].designation, lookup[k].list); - } else { - if (GetLastError() != ERROR_INVALID_DATA) - usbi_dbg("could not access %s: %s", lookup[k].designation, windows_error_str(0)); - lookup[k].list[0] = 0; - } - } - - for (i = 1; i < USB_API_MAX; i++) { - for (k = 0; k < 3; k++) { - j = get_sub_api(lookup[k].list, i); - if (j >= 0) { - usbi_dbg("matched %s name against %s", lookup[k].designation, - (i != USB_API_WINUSBX) ? usb_api_backend[i].designation : sub_api_name[j]); - *api = i; - *sub_api = j; - return; - } - } - } -} - -static int set_composite_interface(struct libusb_context *ctx, struct libusb_device *dev, - char *dev_interface_path, char *device_id, int api, int sub_api) -{ - unsigned i; - struct windows_device_priv *priv = _device_priv(dev); - int interface_number; - - if (priv->apib->id != USB_API_COMPOSITE) { - usbi_err(ctx, "program assertion failed: '%s' is not composite", device_id); - return LIBUSB_ERROR_NO_DEVICE; - } - - // Because MI_## are not necessarily in sequential order (some composite - // devices will have only MI_00 & MI_03 for instance), we retrieve the actual - // interface number from the path's MI value - interface_number = 0; - for (i = 0; device_id[i] != 0; ) { - if ((device_id[i++] == 'M') && (device_id[i++] == 'I') - && (device_id[i++] == '_')) { - interface_number = (device_id[i++] - '0') * 10; - interface_number += device_id[i] - '0'; - break; - } - } - - if (device_id[i] == 0) - usbi_warn(ctx, "failure to read interface number for %s. Using default value %d", - device_id, interface_number); - - if (priv->usb_interface[interface_number].path != NULL) { - if (api == USB_API_HID) { - // HID devices can have multiple collections (COL##) for each MI_## interface - usbi_dbg("interface[%d] already set - ignoring HID collection: %s", - interface_number, device_id); - return LIBUSB_ERROR_ACCESS; - } - // In other cases, just use the latest data - safe_free(priv->usb_interface[interface_number].path); - } - - usbi_dbg("interface[%d] = %s", interface_number, dev_interface_path); - priv->usb_interface[interface_number].path = dev_interface_path; - priv->usb_interface[interface_number].apib = &usb_api_backend[api]; - priv->usb_interface[interface_number].sub_api = sub_api; - if ((api == USB_API_HID) && (priv->hid == NULL)) { - priv->hid = calloc(1, sizeof(struct hid_device_priv)); - if (priv->hid == NULL) - return LIBUSB_ERROR_NO_MEM; - } - - return LIBUSB_SUCCESS; -} - -static int set_hid_interface(struct libusb_context *ctx, struct libusb_device *dev, - char *dev_interface_path) -{ - int i; - struct windows_device_priv *priv = _device_priv(dev); - - if (priv->hid == NULL) { - usbi_err(ctx, "program assertion failed: parent is not HID"); - return LIBUSB_ERROR_NO_DEVICE; - } else if (priv->hid->nb_interfaces == USB_MAXINTERFACES) { - usbi_err(ctx, "program assertion failed: max USB interfaces reached for HID device"); - return LIBUSB_ERROR_NO_DEVICE; - } - - for (i = 0; i < priv->hid->nb_interfaces; i++) { - if ((priv->usb_interface[i].path != NULL) && strcmp(priv->usb_interface[i].path, dev_interface_path) == 0) { - usbi_dbg("interface[%d] already set to %s", i, dev_interface_path); - return LIBUSB_ERROR_ACCESS; - } - } - - priv->usb_interface[priv->hid->nb_interfaces].path = dev_interface_path; - priv->usb_interface[priv->hid->nb_interfaces].apib = &usb_api_backend[USB_API_HID]; - usbi_dbg("interface[%u] = %s", priv->hid->nb_interfaces, dev_interface_path); - priv->hid->nb_interfaces++; - return LIBUSB_SUCCESS; -} - -/* - * get_device_list: libusb backend device enumeration function - */ -static int windows_get_device_list(struct libusb_context *ctx, struct discovered_devs **_discdevs) -{ - struct discovered_devs *discdevs; - HDEVINFO dev_info = { 0 }; - const char *usb_class[] = {"USB", "NUSB3", "IUSB3", "IARUSB3"}; - SP_DEVINFO_DATA dev_info_data = { 0 }; - SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL; - GUID hid_guid; -#define MAX_ENUM_GUIDS 64 - const GUID *guid[MAX_ENUM_GUIDS]; -#define HCD_PASS 0 -#define HUB_PASS 1 -#define GEN_PASS 2 -#define DEV_PASS 3 -#define HID_PASS 4 - int r = LIBUSB_SUCCESS; - int api, sub_api; - size_t class_index = 0; - unsigned int nb_guids, pass, i, j, ancestor; - char path[MAX_PATH_LENGTH]; - char strbuf[MAX_PATH_LENGTH]; - struct libusb_device *dev, *parent_dev; - struct windows_device_priv *priv, *parent_priv; - char *dev_interface_path = NULL; - char *dev_id_path = NULL; - unsigned long session_id; - DWORD size, reg_type, port_nr, install_state; - HKEY key; - WCHAR guid_string_w[MAX_GUID_STRING_LENGTH]; - GUID *if_guid; - LONG s; - // Keep a list of newly allocated devs to unref - libusb_device **unref_list, **new_unref_list; - unsigned int unref_size = 64; - unsigned int unref_cur = 0; - - // PASS 1 : (re)enumerate HCDs (allows for HCD hotplug) - // PASS 2 : (re)enumerate HUBS - // PASS 3 : (re)enumerate generic USB devices (including driverless) - // and list additional USB device interface GUIDs to explore - // PASS 4 : (re)enumerate master USB devices that have a device interface - // PASS 5+: (re)enumerate device interfaced GUIDs (including HID) and - // set the device interfaces. - - // Init the GUID table - guid[HCD_PASS] = &GUID_DEVINTERFACE_USB_HOST_CONTROLLER; - guid[HUB_PASS] = &GUID_DEVINTERFACE_USB_HUB; - guid[GEN_PASS] = NULL; - guid[DEV_PASS] = &GUID_DEVINTERFACE_USB_DEVICE; - HidD_GetHidGuid(&hid_guid); - guid[HID_PASS] = &hid_guid; - nb_guids = HID_PASS + 1; - - unref_list = calloc(unref_size, sizeof(libusb_device *)); - if (unref_list == NULL) - return LIBUSB_ERROR_NO_MEM; - - for (pass = 0; ((pass < nb_guids) && (r == LIBUSB_SUCCESS)); pass++) { -//#define ENUM_DEBUG -#if defined(ENABLE_LOGGING) && defined(ENUM_DEBUG) - const char *passname[] = { "HCD", "HUB", "GEN", "DEV", "HID", "EXT" }; - usbi_dbg("#### PROCESSING %ss %s", passname[(pass <= HID_PASS) ? pass : (HID_PASS + 1)], - (pass != GEN_PASS) ? guid_to_string(guid[pass]) : ""); -#endif - for (i = 0; ; i++) { - // safe loop: free up any (unprotected) dynamic resource - // NB: this is always executed before breaking the loop - safe_free(dev_interface_details); - safe_free(dev_interface_path); - safe_free(dev_id_path); - priv = parent_priv = NULL; - dev = parent_dev = NULL; - - // Safe loop: end of loop conditions - if (r != LIBUSB_SUCCESS) - break; - - if ((pass == HCD_PASS) && (i == UINT8_MAX)) { - usbi_warn(ctx, "program assertion failed - found more than %d buses, skipping the rest.", UINT8_MAX); - break; - } - - if (pass != GEN_PASS) { - // Except for GEN, all passes deal with device interfaces - dev_interface_details = get_interface_details(ctx, &dev_info, &dev_info_data, guid[pass], i); - if (dev_interface_details == NULL) - break; - - dev_interface_path = sanitize_path(dev_interface_details->DevicePath); - if (dev_interface_path == NULL) { - usbi_warn(ctx, "could not sanitize device interface path for '%s'", dev_interface_details->DevicePath); - continue; - } - } else { - // Workaround for a Nec/Renesas USB 3.0 driver bug where root hubs are - // being listed under the "NUSB3" PnP Symbolic Name rather than "USB". - // The Intel USB 3.0 driver behaves similar, but uses "IUSB3" - // The Intel Alpine Ridge USB 3.1 driver uses "IARUSB3" - for (; class_index < ARRAYSIZE(usb_class); class_index++) { - if (get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i)) - break; - i = 0; - } - if (class_index >= ARRAYSIZE(usb_class)) - break; - } - - // Read the Device ID path. This is what we'll use as UID - // Note that if the device is plugged in a different port or hub, the Device ID changes - if (CM_Get_Device_IDA(dev_info_data.DevInst, path, sizeof(path), 0) != CR_SUCCESS) { - usbi_warn(ctx, "could not read the device id path for devinst %X, skipping", - (unsigned int)dev_info_data.DevInst); - continue; - } - - dev_id_path = sanitize_path(path); - if (dev_id_path == NULL) { - usbi_warn(ctx, "could not sanitize device id path for devinst %X, skipping", - (unsigned int)dev_info_data.DevInst); - continue; - } -#ifdef ENUM_DEBUG - usbi_dbg("PRO: %s", dev_id_path); -#endif - - // The SPDRP_ADDRESS for USB devices is the device port number on the hub - port_nr = 0; - if ((pass >= HUB_PASS) && (pass <= GEN_PASS)) { - if ((!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_ADDRESS, - ®_type, (BYTE *)&port_nr, 4, &size)) || (size != 4)) { - usbi_warn(ctx, "could not retrieve port number for device '%s', skipping: %s", - dev_id_path, windows_error_str(0)); - continue; - } - } - - // Set API to use or get additional data from generic pass - api = USB_API_UNSUPPORTED; - sub_api = SUB_API_NOTSET; - switch (pass) { - case HCD_PASS: - break; - case GEN_PASS: - // We use the GEN pass to detect driverless devices... - size = sizeof(strbuf); - if (!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_DRIVER, - ®_type, (BYTE *)strbuf, size, &size)) { - usbi_info(ctx, "The following device has no driver: '%s'", dev_id_path); - usbi_info(ctx, "libusb will not be able to access it."); - } - // ...and to add the additional device interface GUIDs - key = pSetupDiOpenDevRegKey(dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); - if (key != INVALID_HANDLE_VALUE) { - size = sizeof(guid_string_w); - s = pRegQueryValueExW(key, L"DeviceInterfaceGUIDs", NULL, ®_type, - (BYTE *)guid_string_w, &size); - pRegCloseKey(key); - if (s == ERROR_SUCCESS) { - if (nb_guids >= MAX_ENUM_GUIDS) { - // If this assert is ever reported, grow a GUID table dynamically - usbi_err(ctx, "program assertion failed: too many GUIDs"); - LOOP_BREAK(LIBUSB_ERROR_OVERFLOW); - } - if_guid = calloc(1, sizeof(GUID)); - if (if_guid == NULL) { - usbi_err(ctx, "could not calloc for if_guid: not enough memory"); - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - } - pCLSIDFromString(guid_string_w, if_guid); - guid[nb_guids++] = if_guid; - usbi_dbg("extra GUID: %s", guid_to_string(if_guid)); - } - } - break; - case HID_PASS: - api = USB_API_HID; - break; - default: - // Get the API type (after checking that the driver installation is OK) - if ((!pSetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_INSTALL_STATE, - ®_type, (BYTE *)&install_state, 4, &size)) || (size != 4)) { - usbi_warn(ctx, "could not detect installation state of driver for '%s': %s", - dev_id_path, windows_error_str(0)); - } else if (install_state != 0) { - usbi_warn(ctx, "driver for device '%s' is reporting an issue (code: %u) - skipping", - dev_id_path, (unsigned int)install_state); - continue; - } - get_api_type(ctx, &dev_info, &dev_info_data, &api, &sub_api); - break; - } - - // Find parent device (for the passes that need it) - switch (pass) { - case HCD_PASS: - case DEV_PASS: - case HUB_PASS: - break; - default: - // Go through the ancestors until we see a face we recognize - parent_dev = NULL; - for (ancestor = 1; parent_dev == NULL; ancestor++) { - session_id = get_ancestor_session_id(dev_info_data.DevInst, ancestor); - if (session_id == 0) - break; - - parent_dev = usbi_get_device_by_session_id(ctx, session_id); - } - - if (parent_dev == NULL) { - usbi_dbg("unlisted ancestor for '%s' (non USB HID, newly connected, etc.) - ignoring", dev_id_path); - continue; - } - - parent_priv = _device_priv(parent_dev); - // virtual USB devices are also listed during GEN - don't process these yet - if ((pass == GEN_PASS) && (parent_priv->apib->id != USB_API_HUB)) { - libusb_unref_device(parent_dev); - continue; - } - - break; - } - - // Create new or match existing device, using the (hashed) device_id as session id - if (pass <= DEV_PASS) { // For subsequent passes, we'll lookup the parent - // These are the passes that create "new" devices - session_id = htab_hash(dev_id_path); - dev = usbi_get_device_by_session_id(ctx, session_id); - if (dev == NULL) { - if (pass == DEV_PASS) { - // This can occur if the OS only reports a newly plugged device after we started enum - usbi_warn(ctx, "'%s' was only detected in late pass (newly connected device?)" - " - ignoring", dev_id_path); - continue; - } - - usbi_dbg("allocating new device for session [%lX]", session_id); - dev = usbi_alloc_device(ctx, session_id); - if (dev == NULL) - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - - priv = windows_device_priv_init(dev); - } else { - usbi_dbg("found existing device for session [%lX] (%u.%u)", - session_id, dev->bus_number, dev->device_address); - - priv = _device_priv(dev); - if ((parent_dev != NULL) && (dev->parent_dev != NULL)) { - if (dev->parent_dev != parent_dev) { - // It is possible for the actual parent device to not have existed at the - // time of enumeration, so the currently assigned parent may in fact be a - // grandparent. If the devices differ, we assume the "new" parent device - // is in fact closer to the device. - usbi_dbg("updating parent device [session %lX -> %lX]", - dev->parent_dev->session_data, parent_dev->session_data); - libusb_unref_device(dev->parent_dev); - dev->parent_dev = parent_dev; - } else { - // We hold a reference to parent_dev instance, but this device already - // has a parent_dev reference (only one per child) - libusb_unref_device(parent_dev); - } - } - } - - // Keep track of devices that need unref - unref_list[unref_cur++] = dev; - if (unref_cur >= unref_size) { - unref_size += 64; - new_unref_list = usbi_reallocf(unref_list, unref_size * sizeof(libusb_device *)); - if (new_unref_list == NULL) { - usbi_err(ctx, "could not realloc list for unref - aborting."); - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - } else { - unref_list = new_unref_list; - } - } - } - - // Setup device - switch (pass) { - case HCD_PASS: - // If the hcd has already been setup, don't do it again - if (priv->path != NULL) - break; - dev->bus_number = (uint8_t)(i + 1); // bus 0 is reserved for disconnected - dev->device_address = 0; - dev->num_configurations = 0; - priv->apib = &usb_api_backend[USB_API_HUB]; - priv->sub_api = SUB_API_NOTSET; - priv->depth = UINT8_MAX; // Overflow to 0 for HCD Hubs - priv->path = dev_interface_path; - dev_interface_path = NULL; - break; - case HUB_PASS: - case DEV_PASS: - // If the device has already been setup, don't do it again - if (priv->path != NULL) - break; - // Take care of API initialization - priv->path = dev_interface_path; - dev_interface_path = NULL; - priv->apib = &usb_api_backend[api]; - priv->sub_api = sub_api; - switch(api) { - case USB_API_COMPOSITE: - case USB_API_HUB: - break; - case USB_API_HID: - priv->hid = calloc(1, sizeof(struct hid_device_priv)); - if (priv->hid == NULL) - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - - priv->hid->nb_interfaces = 0; - break; - default: - // For other devices, the first interface is the same as the device - priv->usb_interface[0].path = _strdup(priv->path); - if (priv->usb_interface[0].path == NULL) - usbi_warn(ctx, "could not duplicate interface path '%s'", priv->path); - // The following is needed if we want API calls to work for both simple - // and composite devices. - for (j = 0; j < USB_MAXINTERFACES; j++) - priv->usb_interface[j].apib = &usb_api_backend[api]; - - break; - } - break; - case GEN_PASS: - r = init_device(dev, parent_dev, (uint8_t)port_nr, dev_id_path, dev_info_data.DevInst); - if (r == LIBUSB_SUCCESS) { - // Append device to the list of discovered devices - discdevs = discovered_devs_append(*_discdevs, dev); - if (!discdevs) - LOOP_BREAK(LIBUSB_ERROR_NO_MEM); - - *_discdevs = discdevs; - } else if (r == LIBUSB_ERROR_NO_DEVICE) { - // This can occur if the device was disconnected but Windows hasn't - // refreshed its enumeration yet - in that case, we ignore the device - r = LIBUSB_SUCCESS; - } - break; - default: // HID_PASS and later - if (parent_priv->apib->id == USB_API_HID || parent_priv->apib->id == USB_API_COMPOSITE) { - if (parent_priv->apib->id == USB_API_HID) { - usbi_dbg("setting HID interface for [%lX]:", parent_dev->session_data); - r = set_hid_interface(ctx, parent_dev, dev_interface_path); - } else { - usbi_dbg("setting composite interface for [%lX]:", parent_dev->session_data); - r = set_composite_interface(ctx, parent_dev, dev_interface_path, dev_id_path, api, sub_api); - } - switch (r) { - case LIBUSB_SUCCESS: - dev_interface_path = NULL; - break; - case LIBUSB_ERROR_ACCESS: - // interface has already been set => make sure dev_interface_path is freed then - r = LIBUSB_SUCCESS; - break; - default: - LOOP_BREAK(r); - break; - } - } - libusb_unref_device(parent_dev); - break; - } - } - } - - // Free any additional GUIDs - for (pass = HID_PASS + 1; pass < nb_guids; pass++) - free((void *)guid[pass]); - - // Unref newly allocated devs - for (i = 0; i < unref_cur; i++) - libusb_unref_device(unref_list[i]); - free(unref_list); - - return r; -} - -/* - * exit: libusb backend deinitialization function - */ -static void windows_exit(void) -{ - int i; - HANDLE semaphore; - char sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' - - sprintf(sem_name, "libusb_init%08X", (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); - semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name); - if (semaphore == NULL) - return; - - // A successful wait brings our semaphore count to 0 (unsignaled) - // => any concurent wait stalls until the semaphore release - if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { - CloseHandle(semaphore); - return; - } - - // Only works if exits and inits are balanced exactly - if (--concurrent_usage < 0) { // Last exit - for (i = 0; i < USB_API_MAX; i++) - usb_api_backend[i].exit(SUB_API_NOTSET); - exit_dlls(); - exit_polling(); - windows_common_exit(); - usbi_mutex_destroy(&autoclaim_lock); - } - - ReleaseSemaphore(semaphore, 1, NULL); // increase count back to 1 - CloseHandle(semaphore); -} - -static int windows_get_device_descriptor(struct libusb_device *dev, unsigned char *buffer, int *host_endian) -{ - struct windows_device_priv *priv = _device_priv(dev); - - memcpy(buffer, &priv->dev_descriptor, DEVICE_DESC_LENGTH); - *host_endian = 0; - - return LIBUSB_SUCCESS; -} - -static int windows_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) -{ - struct windows_device_priv *priv = _device_priv(dev); - PUSB_CONFIGURATION_DESCRIPTOR config_header; - size_t size; - - // config index is zero based - if (config_index >= dev->num_configurations) - return LIBUSB_ERROR_INVALID_PARAM; - - if ((priv->config_descriptor == NULL) || (priv->config_descriptor[config_index] == NULL)) - return LIBUSB_ERROR_NOT_FOUND; - - config_header = (PUSB_CONFIGURATION_DESCRIPTOR)priv->config_descriptor[config_index]; - - size = MIN(config_header->wTotalLength, len); - memcpy(buffer, priv->config_descriptor[config_index], size); - *host_endian = 0; - - return (int)size; -} - -static int windows_get_config_descriptor_by_value(struct libusb_device *dev, uint8_t bConfigurationValue, - unsigned char **buffer, int *host_endian) -{ - struct windows_device_priv *priv = _device_priv(dev); - PUSB_CONFIGURATION_DESCRIPTOR config_header; - uint8_t index; - - *buffer = NULL; - *host_endian = 0; - - if (priv->config_descriptor == NULL) - return LIBUSB_ERROR_NOT_FOUND; - - for (index = 0; index < dev->num_configurations; index++) { - config_header = (PUSB_CONFIGURATION_DESCRIPTOR)priv->config_descriptor[index]; - if (config_header->bConfigurationValue == bConfigurationValue) { - *buffer = priv->config_descriptor[index]; - return (int)config_header->wTotalLength; - } - } - - return LIBUSB_ERROR_NOT_FOUND; -} - -/* - * return the cached copy of the active config descriptor - */ -static int windows_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian) -{ - struct windows_device_priv *priv = _device_priv(dev); - unsigned char *config_desc; - int r; - - if (priv->active_config == 0) - return LIBUSB_ERROR_NOT_FOUND; - - r = windows_get_config_descriptor_by_value(dev, priv->active_config, &config_desc, host_endian); - if (r < 0) - return r; - - len = MIN((size_t)r, len); - memcpy(buffer, config_desc, len); - return (int)len; -} - -static int windows_open(struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - - if (priv->apib == NULL) { - usbi_err(ctx, "program assertion failed - device is not initialized"); - return LIBUSB_ERROR_NO_DEVICE; - } - - return priv->apib->open(SUB_API_NOTSET, dev_handle); -} - -static void windows_close(struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - priv->apib->close(SUB_API_NOTSET, dev_handle); -} - -static int windows_get_configuration(struct libusb_device_handle *dev_handle, int *config) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - if (priv->active_config == 0) { - *config = 0; - return LIBUSB_ERROR_NOT_FOUND; - } - - *config = priv->active_config; - return LIBUSB_SUCCESS; -} - -/* - * from http://msdn.microsoft.com/en-us/library/ms793522.aspx: "The port driver - * does not currently expose a service that allows higher-level drivers to set - * the configuration." - */ -static int windows_set_configuration(struct libusb_device_handle *dev_handle, int config) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - int r = LIBUSB_SUCCESS; - - if (config >= USB_MAXCONFIG) - return LIBUSB_ERROR_INVALID_PARAM; - - r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT | - LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, - LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config, - 0, NULL, 0, 1000); - - if (r == LIBUSB_SUCCESS) - priv->active_config = (uint8_t)config; - - return r; -} - -static int windows_claim_interface(struct libusb_device_handle *dev_handle, int iface) -{ - int r = LIBUSB_SUCCESS; - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - safe_free(priv->usb_interface[iface].endpoint); - priv->usb_interface[iface].nb_endpoints = 0; - - r = priv->apib->claim_interface(SUB_API_NOTSET, dev_handle, iface); - - if (r == LIBUSB_SUCCESS) - r = windows_assign_endpoints(dev_handle, iface, 0); - - return r; -} - -static int windows_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - int r = LIBUSB_SUCCESS; - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - safe_free(priv->usb_interface[iface].endpoint); - priv->usb_interface[iface].nb_endpoints = 0; - - r = priv->apib->set_interface_altsetting(SUB_API_NOTSET, dev_handle, iface, altsetting); - - if (r == LIBUSB_SUCCESS) - r = windows_assign_endpoints(dev_handle, iface, altsetting); - - return r; -} - -static int windows_release_interface(struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - return priv->apib->release_interface(SUB_API_NOTSET, dev_handle, iface); -} - -static int windows_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - return priv->apib->clear_halt(SUB_API_NOTSET, dev_handle, endpoint); -} - -static int windows_reset_device(struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - return priv->apib->reset_device(SUB_API_NOTSET, dev_handle); -} - -// The 3 functions below are unlikely to ever get supported on Windows -static int windows_kernel_driver_active(struct libusb_device_handle *dev_handle, int iface) -{ - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static int windows_attach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) -{ - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static int windows_detach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) -{ - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static void windows_destroy_device(struct libusb_device *dev) -{ - windows_device_priv_release(dev); -} - -void windows_clear_transfer_priv(struct usbi_transfer *itransfer) -{ - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - - usbi_free_fd(&transfer_priv->pollable_fd); - safe_free(transfer_priv->hid_buffer); - // When auto claim is in use, attempt to release the auto-claimed interface - auto_release(itransfer); -} - -static int submit_bulk_transfer(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int r; - - r = priv->apib->submit_bulk_transfer(SUB_API_NOTSET, itransfer); - if (r != LIBUSB_SUCCESS) - return r; - - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, - (short)(IS_XFERIN(transfer) ? POLLIN : POLLOUT)); - - return LIBUSB_SUCCESS; -} - -static int submit_iso_transfer(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int r; - - r = priv->apib->submit_iso_transfer(SUB_API_NOTSET, itransfer); - if (r != LIBUSB_SUCCESS) - return r; - - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, - (short)(IS_XFERIN(transfer) ? POLLIN : POLLOUT)); - - return LIBUSB_SUCCESS; -} - -static int submit_control_transfer(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int r; - - r = priv->apib->submit_control_transfer(SUB_API_NOTSET, itransfer); - if (r != LIBUSB_SUCCESS) - return r; - - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, POLLIN); - - return LIBUSB_SUCCESS; -} - -static int windows_submit_transfer(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - - switch (transfer->type) { - case LIBUSB_TRANSFER_TYPE_CONTROL: - return submit_control_transfer(itransfer); - case LIBUSB_TRANSFER_TYPE_BULK: - case LIBUSB_TRANSFER_TYPE_INTERRUPT: - if (IS_XFEROUT(transfer) && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)) - return LIBUSB_ERROR_NOT_SUPPORTED; - return submit_bulk_transfer(itransfer); - case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: - return submit_iso_transfer(itransfer); - case LIBUSB_TRANSFER_TYPE_BULK_STREAM: - return LIBUSB_ERROR_NOT_SUPPORTED; - default: - usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); - return LIBUSB_ERROR_INVALID_PARAM; - } -} - -static int windows_abort_control(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - - return priv->apib->abort_control(SUB_API_NOTSET, itransfer); -} - -static int windows_abort_transfers(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - - return priv->apib->abort_transfers(SUB_API_NOTSET, itransfer); -} - -static int windows_cancel_transfer(struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - - switch (transfer->type) { - case LIBUSB_TRANSFER_TYPE_CONTROL: - return windows_abort_control(itransfer); - case LIBUSB_TRANSFER_TYPE_BULK: - case LIBUSB_TRANSFER_TYPE_INTERRUPT: - case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: - return windows_abort_transfers(itransfer); - case LIBUSB_TRANSFER_TYPE_BULK_STREAM: - return LIBUSB_ERROR_NOT_SUPPORTED; - default: - usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type); - return LIBUSB_ERROR_INVALID_PARAM; - } -} - -int windows_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - return priv->apib->copy_transfer_data(SUB_API_NOTSET, itransfer, io_size); -} - -struct winfd *windows_get_fd(struct usbi_transfer *transfer) -{ - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(transfer); - return &transfer_priv->pollable_fd; -} - -void windows_get_overlapped_result(struct usbi_transfer *transfer, struct winfd *pollable_fd, DWORD *io_result, DWORD *io_size) -{ - if (HasOverlappedIoCompletedSync(pollable_fd->overlapped)) { - *io_result = NO_ERROR; - *io_size = (DWORD)pollable_fd->overlapped->InternalHigh; - } else if (GetOverlappedResult(pollable_fd->handle, pollable_fd->overlapped, io_size, false)) { - // Regular async overlapped - *io_result = NO_ERROR; - } else { - *io_result = GetLastError(); - } -} - -// NB: MSVC6 does not support named initializers. -const struct usbi_os_backend windows_backend = { - "Windows", - USBI_CAP_HAS_HID_ACCESS, - windows_init, - windows_exit, - - windows_get_device_list, - NULL, /* hotplug_poll */ - windows_open, - windows_close, - - windows_get_device_descriptor, - windows_get_active_config_descriptor, - windows_get_config_descriptor, - windows_get_config_descriptor_by_value, - - windows_get_configuration, - windows_set_configuration, - windows_claim_interface, - windows_release_interface, - - windows_set_interface_altsetting, - windows_clear_halt, - windows_reset_device, - - NULL, /* alloc_streams */ - NULL, /* free_streams */ - - NULL, /* dev_mem_alloc */ - NULL, /* dev_mem_free */ - - windows_kernel_driver_active, - windows_detach_kernel_driver, - windows_attach_kernel_driver, - - windows_destroy_device, - - windows_submit_transfer, - windows_cancel_transfer, - windows_clear_transfer_priv, - - windows_handle_events, - NULL, - - windows_clock_gettime, -#if defined(USBI_TIMERFD_AVAILABLE) - NULL, -#endif - sizeof(struct windows_device_priv), - sizeof(struct windows_device_handle_priv), - sizeof(struct windows_transfer_priv), -}; - - -/* - * USB API backends - */ -static int unsupported_init(int sub_api, struct libusb_context *ctx) -{ - return LIBUSB_SUCCESS; -} - -static int unsupported_exit(int sub_api) -{ - return LIBUSB_SUCCESS; -} - -static int unsupported_open(int sub_api, struct libusb_device_handle *dev_handle) -{ - PRINT_UNSUPPORTED_API(open); -} - -static void unsupported_close(int sub_api, struct libusb_device_handle *dev_handle) -{ - usbi_dbg("unsupported API call for 'close'"); -} - -static int unsupported_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - PRINT_UNSUPPORTED_API(configure_endpoints); -} - -static int unsupported_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - PRINT_UNSUPPORTED_API(claim_interface); -} - -static int unsupported_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - PRINT_UNSUPPORTED_API(set_interface_altsetting); -} - -static int unsupported_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - PRINT_UNSUPPORTED_API(release_interface); -} - -static int unsupported_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) -{ - PRINT_UNSUPPORTED_API(clear_halt); -} - -static int unsupported_reset_device(int sub_api, struct libusb_device_handle *dev_handle) -{ - PRINT_UNSUPPORTED_API(reset_device); -} - -static int unsupported_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - PRINT_UNSUPPORTED_API(submit_bulk_transfer); -} - -static int unsupported_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - PRINT_UNSUPPORTED_API(submit_iso_transfer); -} - -static int unsupported_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - PRINT_UNSUPPORTED_API(submit_control_transfer); -} - -static int unsupported_abort_control(int sub_api, struct usbi_transfer *itransfer) -{ - PRINT_UNSUPPORTED_API(abort_control); -} - -static int unsupported_abort_transfers(int sub_api, struct usbi_transfer *itransfer) -{ - PRINT_UNSUPPORTED_API(abort_transfers); -} - -static int unsupported_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) -{ - PRINT_UNSUPPORTED_API(copy_transfer_data); -} - -static int common_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - return LIBUSB_SUCCESS; -} - -// These names must be uppercase -static const char *hub_driver_names[] = {"USBHUB", "USBHUB3", "USB3HUB", "NUSB3HUB", "RUSB3HUB", "FLXHCIH", "TIHUB3", "ETRONHUB3", "VIAHUB3", "ASMTHUB3", "IUSB3HUB", "VUSB3HUB", "AMDHUB30", "VHHUB", "AUSB3HUB"}; -static const char *composite_driver_names[] = {"USBCCGP"}; -static const char *winusbx_driver_names[] = WINUSBX_DRV_NAMES; -static const char *hid_driver_names[] = {"HIDUSB", "MOUHID", "KBDHID"}; -const struct windows_usb_api_backend usb_api_backend[USB_API_MAX] = { - { - USB_API_UNSUPPORTED, - "Unsupported API", - NULL, - 0, - unsupported_init, - unsupported_exit, - unsupported_open, - unsupported_close, - unsupported_configure_endpoints, - unsupported_claim_interface, - unsupported_set_interface_altsetting, - unsupported_release_interface, - unsupported_clear_halt, - unsupported_reset_device, - unsupported_submit_bulk_transfer, - unsupported_submit_iso_transfer, - unsupported_submit_control_transfer, - unsupported_abort_control, - unsupported_abort_transfers, - unsupported_copy_transfer_data, - }, - { - USB_API_HUB, - "HUB API", - hub_driver_names, - ARRAYSIZE(hub_driver_names), - unsupported_init, - unsupported_exit, - unsupported_open, - unsupported_close, - unsupported_configure_endpoints, - unsupported_claim_interface, - unsupported_set_interface_altsetting, - unsupported_release_interface, - unsupported_clear_halt, - unsupported_reset_device, - unsupported_submit_bulk_transfer, - unsupported_submit_iso_transfer, - unsupported_submit_control_transfer, - unsupported_abort_control, - unsupported_abort_transfers, - unsupported_copy_transfer_data, - }, - { - USB_API_COMPOSITE, - "Composite API", - composite_driver_names, - ARRAYSIZE(composite_driver_names), - composite_init, - composite_exit, - composite_open, - composite_close, - common_configure_endpoints, - composite_claim_interface, - composite_set_interface_altsetting, - composite_release_interface, - composite_clear_halt, - composite_reset_device, - composite_submit_bulk_transfer, - composite_submit_iso_transfer, - composite_submit_control_transfer, - composite_abort_control, - composite_abort_transfers, - composite_copy_transfer_data, - }, - { - USB_API_WINUSBX, - "WinUSB-like APIs", - winusbx_driver_names, - ARRAYSIZE(winusbx_driver_names), - winusbx_init, - winusbx_exit, - winusbx_open, - winusbx_close, - winusbx_configure_endpoints, - winusbx_claim_interface, - winusbx_set_interface_altsetting, - winusbx_release_interface, - winusbx_clear_halt, - winusbx_reset_device, - winusbx_submit_bulk_transfer, - unsupported_submit_iso_transfer, - winusbx_submit_control_transfer, - winusbx_abort_control, - winusbx_abort_transfers, - winusbx_copy_transfer_data, - }, - { - USB_API_HID, - "HID API", - hid_driver_names, - ARRAYSIZE(hid_driver_names), - hid_init, - hid_exit, - hid_open, - hid_close, - common_configure_endpoints, - hid_claim_interface, - hid_set_interface_altsetting, - hid_release_interface, - hid_clear_halt, - hid_reset_device, - hid_submit_bulk_transfer, - unsupported_submit_iso_transfer, - hid_submit_control_transfer, - hid_abort_transfers, - hid_abort_transfers, - hid_copy_transfer_data, - }, -}; - - -/* - * WinUSB-like (WinUSB, libusb0/libusbK through libusbk DLL) API functions - */ -#define WinUSBX_Set(fn) \ - do { \ - if (native_winusb) \ - WinUSBX[i].fn = (WinUsb_##fn##_t)GetProcAddress(h, "WinUsb_" #fn); \ - else \ - pLibK_GetProcAddress((PVOID *)&WinUSBX[i].fn, i, KUSB_FNID_##fn); \ - } while (0) - -static int winusbx_init(int sub_api, struct libusb_context *ctx) -{ - HMODULE h; - bool native_winusb; - int i; - KLIB_VERSION LibK_Version; - LibK_GetProcAddress_t pLibK_GetProcAddress = NULL; - LibK_GetVersion_t pLibK_GetVersion; - - h = LoadLibraryA("libusbK"); - - if (h == NULL) { - usbi_info(ctx, "libusbK DLL is not available, will use native WinUSB"); - h = LoadLibraryA("WinUSB"); - - if (h == NULL) { - usbi_warn(ctx, "WinUSB DLL is not available either, " - "you will not be able to access devices outside of enumeration"); - return LIBUSB_ERROR_NOT_FOUND; - } - } else { - usbi_dbg("using libusbK DLL for universal access"); - pLibK_GetVersion = (LibK_GetVersion_t)GetProcAddress(h, "LibK_GetVersion"); - if (pLibK_GetVersion != NULL) { - pLibK_GetVersion(&LibK_Version); - usbi_dbg("libusbK version: %d.%d.%d.%d", LibK_Version.Major, LibK_Version.Minor, - LibK_Version.Micro, LibK_Version.Nano); - } - pLibK_GetProcAddress = (LibK_GetProcAddress_t)GetProcAddress(h, "LibK_GetProcAddress"); - if (pLibK_GetProcAddress == NULL) { - usbi_err(ctx, "LibK_GetProcAddress() not found in libusbK DLL"); - FreeLibrary(h); - return LIBUSB_ERROR_NOT_FOUND; - } - } - - native_winusb = (pLibK_GetProcAddress == NULL); - for (i = SUB_API_LIBUSBK; i < SUB_API_MAX; i++) { - WinUSBX_Set(AbortPipe); - WinUSBX_Set(ControlTransfer); - WinUSBX_Set(FlushPipe); - WinUSBX_Set(Free); - WinUSBX_Set(GetAssociatedInterface); - WinUSBX_Set(GetCurrentAlternateSetting); - WinUSBX_Set(GetDescriptor); - WinUSBX_Set(GetOverlappedResult); - WinUSBX_Set(GetPipePolicy); - WinUSBX_Set(GetPowerPolicy); - WinUSBX_Set(Initialize); - WinUSBX_Set(QueryDeviceInformation); - WinUSBX_Set(QueryInterfaceSettings); - WinUSBX_Set(QueryPipe); - WinUSBX_Set(ReadPipe); - WinUSBX_Set(ResetPipe); - WinUSBX_Set(SetCurrentAlternateSetting); - WinUSBX_Set(SetPipePolicy); - WinUSBX_Set(SetPowerPolicy); - WinUSBX_Set(WritePipe); - if (!native_winusb) - WinUSBX_Set(ResetDevice); - - if (WinUSBX[i].Initialize != NULL) { - WinUSBX[i].initialized = true; - usbi_dbg("initalized sub API %s", sub_api_name[i]); - } else { - usbi_warn(ctx, "Failed to initalize sub API %s", sub_api_name[i]); - WinUSBX[i].initialized = false; - } - } - - WinUSBX_handle = h; - return LIBUSB_SUCCESS; -} - -static int winusbx_exit(int sub_api) -{ - if (WinUSBX_handle != NULL) { - FreeLibrary(WinUSBX_handle); - WinUSBX_handle = NULL; - - /* Reset the WinUSBX API structures */ - memset(&WinUSBX, 0, sizeof(WinUSBX)); - } - - return LIBUSB_SUCCESS; -} - -// NB: open and close must ensure that they only handle interface of -// the right API type, as these functions can be called wholesale from -// composite_open(), with interfaces belonging to different APIs -static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - - HANDLE file_handle; - int i; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - // WinUSB requires a separate handle for each interface - for (i = 0; i < USB_MAXINTERFACES; i++) { - if ((priv->usb_interface[i].path != NULL) - && (priv->usb_interface[i].apib->id == USB_API_WINUSBX)) { - file_handle = CreateFileA(priv->usb_interface[i].path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); - if (file_handle == INVALID_HANDLE_VALUE) { - usbi_err(ctx, "could not open device %s (interface %d): %s", priv->usb_interface[i].path, i, windows_error_str(0)); - switch(GetLastError()) { - case ERROR_FILE_NOT_FOUND: // The device was disconnected - return LIBUSB_ERROR_NO_DEVICE; - case ERROR_ACCESS_DENIED: - return LIBUSB_ERROR_ACCESS; - default: - return LIBUSB_ERROR_IO; - } - } - handle_priv->interface_handle[i].dev_handle = file_handle; - } - } - - return LIBUSB_SUCCESS; -} - -static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE handle; - int i; - - if (sub_api == SUB_API_NOTSET) - sub_api = priv->sub_api; - - if (!WinUSBX[sub_api].initialized) - return; - - if (priv->apib->id == USB_API_COMPOSITE) { - // If this is a composite device, just free and close all WinUSB-like - // interfaces directly (each is independent and not associated with another) - for (i = 0; i < USB_MAXINTERFACES; i++) { - if (priv->usb_interface[i].apib->id == USB_API_WINUSBX) { - handle = handle_priv->interface_handle[i].api_handle; - if (HANDLE_VALID(handle)) - WinUSBX[sub_api].Free(handle); - - handle = handle_priv->interface_handle[i].dev_handle; - if (HANDLE_VALID(handle)) - CloseHandle(handle); - } - } - } else { - // If this is a WinUSB device, free all interfaces above interface 0, - // then free and close interface 0 last - for (i = 1; i < USB_MAXINTERFACES; i++) { - handle = handle_priv->interface_handle[i].api_handle; - if (HANDLE_VALID(handle)) - WinUSBX[sub_api].Free(handle); - } - handle = handle_priv->interface_handle[0].api_handle; - if (HANDLE_VALID(handle)) - WinUSBX[sub_api].Free(handle); - - handle = handle_priv->interface_handle[0].dev_handle; - if (HANDLE_VALID(handle)) - CloseHandle(handle); - } -} - -static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE winusb_handle = handle_priv->interface_handle[iface].api_handle; - UCHAR policy; - ULONG timeout = 0; - uint8_t endpoint_address; - int i; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - // With handle and enpoints set (in parent), we can setup the default pipe properties - // see http://download.microsoft.com/download/D/1/D/D1DD7745-426B-4CC3-A269-ABBBE427C0EF/DVC-T705_DDC08.pptx - for (i = -1; i < priv->usb_interface[iface].nb_endpoints; i++) { - endpoint_address = (i == -1) ? 0 : priv->usb_interface[iface].endpoint[i]; - if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, - PIPE_TRANSFER_TIMEOUT, sizeof(ULONG), &timeout)) - usbi_dbg("failed to set PIPE_TRANSFER_TIMEOUT for control endpoint %02X", endpoint_address); - - if ((i == -1) || (sub_api == SUB_API_LIBUSB0)) - continue; // Other policies don't apply to control endpoint or libusb0 - - policy = false; - if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, - SHORT_PACKET_TERMINATE, sizeof(UCHAR), &policy)) - usbi_dbg("failed to disable SHORT_PACKET_TERMINATE for endpoint %02X", endpoint_address); - - if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, - IGNORE_SHORT_PACKETS, sizeof(UCHAR), &policy)) - usbi_dbg("failed to disable IGNORE_SHORT_PACKETS for endpoint %02X", endpoint_address); - - policy = true; - /* ALLOW_PARTIAL_READS must be enabled due to likely libusbK bug. See: - https://sourceforge.net/mailarchive/message.php?msg_id=29736015 */ - if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, - ALLOW_PARTIAL_READS, sizeof(UCHAR), &policy)) - usbi_dbg("failed to enable ALLOW_PARTIAL_READS for endpoint %02X", endpoint_address); - - if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, - AUTO_CLEAR_STALL, sizeof(UCHAR), &policy)) - usbi_dbg("failed to enable AUTO_CLEAR_STALL for endpoint %02X", endpoint_address); - } - - return LIBUSB_SUCCESS; -} - -static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - bool is_using_usbccgp = (priv->apib->id == USB_API_COMPOSITE); - SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL; - HDEVINFO dev_info = INVALID_HANDLE_VALUE; - SP_DEVINFO_DATA dev_info_data; - char *dev_path_no_guid = NULL; - char filter_path[] = "\\\\.\\libusb0-0000"; - bool found_filter = false; - HANDLE file_handle, winusb_handle; - DWORD err; - int i; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - // If the device is composite, but using the default Windows composite parent driver (usbccgp) - // or if it's the first WinUSB-like interface, we get a handle through Initialize(). - if ((is_using_usbccgp) || (iface == 0)) { - // composite device (independent interfaces) or interface 0 - file_handle = handle_priv->interface_handle[iface].dev_handle; - if (!HANDLE_VALID(file_handle)) - return LIBUSB_ERROR_NOT_FOUND; - - if (!WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { - handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; - err = GetLastError(); - switch(err) { - case ERROR_BAD_COMMAND: - // The device was disconnected - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0)); - return LIBUSB_ERROR_NO_DEVICE; - default: - // it may be that we're using the libusb0 filter driver. - // TODO: can we move this whole business into the K/0 DLL? - for (i = 0; ; i++) { - safe_free(dev_interface_details); - safe_free(dev_path_no_guid); - - dev_interface_details = get_interface_details_filter(ctx, &dev_info, &dev_info_data, &GUID_DEVINTERFACE_LIBUSB0_FILTER, i, filter_path); - if ((found_filter) || (dev_interface_details == NULL)) - break; - - // ignore GUID part - dev_path_no_guid = sanitize_path(strtok(dev_interface_details->DevicePath, "{")); - if (dev_path_no_guid == NULL) - continue; - - if (strncmp(dev_path_no_guid, priv->usb_interface[iface].path, strlen(dev_path_no_guid)) == 0) { - file_handle = CreateFileA(filter_path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); - if (file_handle != INVALID_HANDLE_VALUE) { - if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { - // Replace the existing file handle with the working one - CloseHandle(handle_priv->interface_handle[iface].dev_handle); - handle_priv->interface_handle[iface].dev_handle = file_handle; - found_filter = true; - } else { - usbi_err(ctx, "could not initialize filter driver for %s", filter_path); - CloseHandle(file_handle); - } - } else { - usbi_err(ctx, "could not open device %s: %s", filter_path, windows_error_str(0)); - } - } - } - free(dev_interface_details); - if (!found_filter) { - usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(err)); - return LIBUSB_ERROR_ACCESS; - } - } - } - handle_priv->interface_handle[iface].api_handle = winusb_handle; - } else { - // For all other interfaces, use GetAssociatedInterface() - winusb_handle = handle_priv->interface_handle[0].api_handle; - // It is a requirement for multiple interface devices on Windows that, to you - // must first claim the first interface before you claim the others - if (!HANDLE_VALID(winusb_handle)) { - file_handle = handle_priv->interface_handle[0].dev_handle; - if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { - handle_priv->interface_handle[0].api_handle = winusb_handle; - usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface); - } else { - usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB): %s", iface, windows_error_str(0)); - return LIBUSB_ERROR_ACCESS; - } - } - if (!WinUSBX[sub_api].GetAssociatedInterface(winusb_handle, (UCHAR)(iface - 1), - &handle_priv->interface_handle[iface].api_handle)) { - handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; - switch(GetLastError()) { - case ERROR_NO_MORE_ITEMS: // invalid iface - return LIBUSB_ERROR_NOT_FOUND; - case ERROR_BAD_COMMAND: // The device was disconnected - return LIBUSB_ERROR_NO_DEVICE; - case ERROR_ALREADY_EXISTS: // already claimed - return LIBUSB_ERROR_BUSY; - default: - usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); - return LIBUSB_ERROR_ACCESS; - } - } - } - usbi_dbg("claimed interface %d", iface); - handle_priv->active_interface = iface; - - return LIBUSB_SUCCESS; -} - -static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE winusb_handle; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - winusb_handle = handle_priv->interface_handle[iface].api_handle; - if (!HANDLE_VALID(winusb_handle)) - return LIBUSB_ERROR_NOT_FOUND; - - WinUSBX[sub_api].Free(winusb_handle); - handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; - - return LIBUSB_SUCCESS; -} - -/* - * Return the first valid interface (of the same API type), for control transfers - */ -static int get_valid_interface(struct libusb_device_handle *dev_handle, int api_id) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - int i; - - if ((api_id < USB_API_WINUSBX) || (api_id > USB_API_HID)) { - usbi_dbg("unsupported API ID"); - return -1; - } - - for (i = 0; i < USB_MAXINTERFACES; i++) { - if (HANDLE_VALID(handle_priv->interface_handle[i].dev_handle) - && HANDLE_VALID(handle_priv->interface_handle[i].api_handle) - && (priv->usb_interface[i].apib->id == api_id)) - return i; - } - - return -1; -} - -/* - * Lookup interface by endpoint address. -1 if not found - */ -static int interface_by_endpoint(struct windows_device_priv *priv, - struct windows_device_handle_priv *handle_priv, uint8_t endpoint_address) -{ - int i, j; - - for (i = 0; i < USB_MAXINTERFACES; i++) { - if (!HANDLE_VALID(handle_priv->interface_handle[i].api_handle)) - continue; - if (priv->usb_interface[i].endpoint == NULL) - continue; - for (j = 0; j < priv->usb_interface[i].nb_endpoints; j++) { - if (priv->usb_interface[i].endpoint[j] == endpoint_address) - return i; - } - } - - return -1; -} - -static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; - ULONG size; - HANDLE winusb_handle; - int current_interface; - struct winfd wfd; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - transfer_priv->pollable_fd = INVALID_WINFD; - size = transfer->length - LIBUSB_CONTROL_SETUP_SIZE; - - // Windows places upper limits on the control transfer size - // See: https://msdn.microsoft.com/en-us/library/windows/hardware/ff538112.aspx - if (size > MAX_CTRL_BUFFER_LENGTH) - return LIBUSB_ERROR_INVALID_PARAM; - - current_interface = get_valid_interface(transfer->dev_handle, USB_API_WINUSBX); - if (current_interface < 0) { - if (auto_claim(transfer, ¤t_interface, USB_API_WINUSBX) != LIBUSB_SUCCESS) - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("will use interface %d", current_interface); - winusb_handle = handle_priv->interface_handle[current_interface].api_handle; - - wfd = usbi_create_fd(winusb_handle, RW_READ, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) - return LIBUSB_ERROR_NO_MEM; - - // Sending of set configuration control requests from WinUSB creates issues - if (((setup->request_type & (0x03 << 5)) == LIBUSB_REQUEST_TYPE_STANDARD) - && (setup->request == LIBUSB_REQUEST_SET_CONFIGURATION)) { - if (setup->value != priv->active_config) { - usbi_warn(ctx, "cannot set configuration other than the default one"); - usbi_free_fd(&wfd); - return LIBUSB_ERROR_INVALID_PARAM; - } - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - wfd.overlapped->InternalHigh = 0; - } else { - if (!WinUSBX[sub_api].ControlTransfer(wfd.handle, *setup, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, size, NULL, wfd.overlapped)) { - if (GetLastError() != ERROR_IO_PENDING) { - usbi_warn(ctx, "ControlTransfer failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); - return LIBUSB_ERROR_IO; - } - } else { - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - wfd.overlapped->InternalHigh = (DWORD)size; - } - } - - // Use priv_transfer to store data needed for async polling - transfer_priv->pollable_fd = wfd; - transfer_priv->interface_number = (uint8_t)current_interface; - - return LIBUSB_SUCCESS; -} - -static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE winusb_handle; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - if (altsetting > 255) - return LIBUSB_ERROR_INVALID_PARAM; - - winusb_handle = handle_priv->interface_handle[iface].api_handle; - if (!HANDLE_VALID(winusb_handle)) { - usbi_err(ctx, "interface must be claimed first"); - return LIBUSB_ERROR_NOT_FOUND; - } - - if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) { - usbi_err(ctx, "SetCurrentAlternateSetting failed: %s", windows_error_str(0)); - return LIBUSB_ERROR_IO; - } - - return LIBUSB_SUCCESS; -} - -static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - HANDLE winusb_handle; - bool ret; - int current_interface; - struct winfd wfd; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - transfer_priv->pollable_fd = INVALID_WINFD; - - current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("matched endpoint %02X with interface %d", transfer->endpoint, current_interface); - - winusb_handle = handle_priv->interface_handle[current_interface].api_handle; - - wfd = usbi_create_fd(winusb_handle, IS_XFERIN(transfer) ? RW_READ : RW_WRITE, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) - return LIBUSB_ERROR_NO_MEM; - - if (IS_XFERIN(transfer)) { - usbi_dbg("reading %d bytes", transfer->length); - ret = WinUSBX[sub_api].ReadPipe(wfd.handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, wfd.overlapped); - } else { - usbi_dbg("writing %d bytes", transfer->length); - ret = WinUSBX[sub_api].WritePipe(wfd.handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, wfd.overlapped); - } - - if (!ret) { - if (GetLastError() != ERROR_IO_PENDING) { - usbi_err(ctx, "ReadPipe/WritePipe failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); - return LIBUSB_ERROR_IO; - } - } else { - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - wfd.overlapped->InternalHigh = (DWORD)transfer->length; - } - - transfer_priv->pollable_fd = wfd; - transfer_priv->interface_number = (uint8_t)current_interface; - - return LIBUSB_SUCCESS; -} - -static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE winusb_handle; - int current_interface; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - current_interface = interface_by_endpoint(priv, handle_priv, endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("matched endpoint %02X with interface %d", endpoint, current_interface); - winusb_handle = handle_priv->interface_handle[current_interface].api_handle; - - if (!WinUSBX[sub_api].ResetPipe(winusb_handle, endpoint)) { - usbi_err(ctx, "ResetPipe failed: %s", windows_error_str(0)); - return LIBUSB_ERROR_NO_DEVICE; - } - - return LIBUSB_SUCCESS; -} - -/* - * from http://www.winvistatips.com/winusb-bugchecks-t335323.html (confirmed - * through testing as well): - * "You can not call WinUsb_AbortPipe on control pipe. You can possibly cancel - * the control transfer using CancelIo" - */ -static int winusbx_abort_control(int sub_api, struct usbi_transfer *itransfer) -{ - // Cancelling of the I/O is done in the parent - return LIBUSB_SUCCESS; -} - -static int winusbx_abort_transfers(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - HANDLE winusb_handle; - int current_interface; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - current_interface = transfer_priv->interface_number; - if ((current_interface < 0) || (current_interface >= USB_MAXINTERFACES)) { - usbi_err(ctx, "program assertion failed: invalid interface_number"); - return LIBUSB_ERROR_NOT_FOUND; - } - usbi_dbg("will use interface %d", current_interface); - - winusb_handle = handle_priv->interface_handle[current_interface].api_handle; - - if (!WinUSBX[sub_api].AbortPipe(winusb_handle, transfer->endpoint)) { - usbi_err(ctx, "AbortPipe failed: %s", windows_error_str(0)); - return LIBUSB_ERROR_NO_DEVICE; - } - - return LIBUSB_SUCCESS; -} - -/* - * from the "How to Use WinUSB to Communicate with a USB Device" Microsoft white paper - * (http://www.microsoft.com/whdc/connect/usb/winusb_howto.mspx): - * "WinUSB does not support host-initiated reset port and cycle port operations" and - * IOCTL_INTERNAL_USB_CYCLE_PORT is only available in kernel mode and the - * IOCTL_USB_HUB_CYCLE_PORT ioctl was removed from Vista => the best we can do is - * cycle the pipes (and even then, the control pipe can not be reset using WinUSB) - */ -// TODO: (post hotplug): see if we can force eject the device and redetect it (reuse hotplug?) -static int winusbx_reset_device(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct winfd wfd; - HANDLE winusb_handle; - int i, j; - - CHECK_WINUSBX_AVAILABLE(sub_api); - - // Reset any available pipe (except control) - for (i = 0; i < USB_MAXINTERFACES; i++) { - winusb_handle = handle_priv->interface_handle[i].api_handle; - for (wfd = handle_to_winfd(winusb_handle); wfd.fd > 0; ) { - // Cancel any pollable I/O - usbi_remove_pollfd(ctx, wfd.fd); - usbi_free_fd(&wfd); - wfd = handle_to_winfd(winusb_handle); - } - - if (HANDLE_VALID(winusb_handle)) { - for (j = 0; j < priv->usb_interface[i].nb_endpoints; j++) { - usbi_dbg("resetting ep %02X", priv->usb_interface[i].endpoint[j]); - if (!WinUSBX[sub_api].AbortPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) - usbi_err(ctx, "AbortPipe (pipe address %02X) failed: %s", - priv->usb_interface[i].endpoint[j], windows_error_str(0)); - - // FlushPipe seems to fail on OUT pipes - if (IS_EPIN(priv->usb_interface[i].endpoint[j]) - && (!WinUSBX[sub_api].FlushPipe(winusb_handle, priv->usb_interface[i].endpoint[j]))) - usbi_err(ctx, "FlushPipe (pipe address %02X) failed: %s", - priv->usb_interface[i].endpoint[j], windows_error_str(0)); - - if (!WinUSBX[sub_api].ResetPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) - usbi_err(ctx, "ResetPipe (pipe address %02X) failed: %s", - priv->usb_interface[i].endpoint[j], windows_error_str(0)); - } - } - } - - // libusbK & libusb0 have the ability to issue an actual device reset - if (WinUSBX[sub_api].ResetDevice != NULL) { - winusb_handle = handle_priv->interface_handle[0].api_handle; - if (HANDLE_VALID(winusb_handle)) - WinUSBX[sub_api].ResetDevice(winusb_handle); - } - - return LIBUSB_SUCCESS; -} - -static int winusbx_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) -{ - itransfer->transferred += io_size; - return LIBUSB_TRANSFER_COMPLETED; -} - -/* - * Internal HID Support functions (from libusb-win32) - * Note that functions that complete data transfer synchronously must return - * LIBUSB_COMPLETED instead of LIBUSB_SUCCESS - */ -static int _hid_get_hid_descriptor(struct hid_device_priv *dev, void *data, size_t *size); -static int _hid_get_report_descriptor(struct hid_device_priv *dev, void *data, size_t *size); - -static int _hid_wcslen(WCHAR *str) -{ - int i = 0; - - while (str[i] && (str[i] != 0x409)) - i++; - - return i; -} - -static int _hid_get_device_descriptor(struct hid_device_priv *dev, void *data, size_t *size) -{ - struct libusb_device_descriptor d; - - d.bLength = LIBUSB_DT_DEVICE_SIZE; - d.bDescriptorType = LIBUSB_DT_DEVICE; - d.bcdUSB = 0x0200; /* 2.00 */ - d.bDeviceClass = 0; - d.bDeviceSubClass = 0; - d.bDeviceProtocol = 0; - d.bMaxPacketSize0 = 64; /* fix this! */ - d.idVendor = (uint16_t)dev->vid; - d.idProduct = (uint16_t)dev->pid; - d.bcdDevice = 0x0100; - d.iManufacturer = dev->string_index[0]; - d.iProduct = dev->string_index[1]; - d.iSerialNumber = dev->string_index[2]; - d.bNumConfigurations = 1; - - if (*size > LIBUSB_DT_DEVICE_SIZE) - *size = LIBUSB_DT_DEVICE_SIZE; - memcpy(data, &d, *size); - - return LIBUSB_COMPLETED; -} - -static int _hid_get_config_descriptor(struct hid_device_priv *dev, void *data, size_t *size) -{ - char num_endpoints = 0; - size_t config_total_len = 0; - char tmp[HID_MAX_CONFIG_DESC_SIZE]; - struct libusb_config_descriptor *cd; - struct libusb_interface_descriptor *id; - struct libusb_hid_descriptor *hd; - struct libusb_endpoint_descriptor *ed; - size_t tmp_size; - - if (dev->input_report_size) - num_endpoints++; - if (dev->output_report_size) - num_endpoints++; - - config_total_len = LIBUSB_DT_CONFIG_SIZE + LIBUSB_DT_INTERFACE_SIZE - + LIBUSB_DT_HID_SIZE + num_endpoints * LIBUSB_DT_ENDPOINT_SIZE; - - cd = (struct libusb_config_descriptor *)tmp; - id = (struct libusb_interface_descriptor *)(tmp + LIBUSB_DT_CONFIG_SIZE); - hd = (struct libusb_hid_descriptor *)(tmp + LIBUSB_DT_CONFIG_SIZE - + LIBUSB_DT_INTERFACE_SIZE); - ed = (struct libusb_endpoint_descriptor *)(tmp + LIBUSB_DT_CONFIG_SIZE - + LIBUSB_DT_INTERFACE_SIZE - + LIBUSB_DT_HID_SIZE); - - cd->bLength = LIBUSB_DT_CONFIG_SIZE; - cd->bDescriptorType = LIBUSB_DT_CONFIG; - cd->wTotalLength = (uint16_t)config_total_len; - cd->bNumInterfaces = 1; - cd->bConfigurationValue = 1; - cd->iConfiguration = 0; - cd->bmAttributes = 1 << 7; /* bus powered */ - cd->MaxPower = 50; - - id->bLength = LIBUSB_DT_INTERFACE_SIZE; - id->bDescriptorType = LIBUSB_DT_INTERFACE; - id->bInterfaceNumber = 0; - id->bAlternateSetting = 0; - id->bNumEndpoints = num_endpoints; - id->bInterfaceClass = 3; - id->bInterfaceSubClass = 0; - id->bInterfaceProtocol = 0; - id->iInterface = 0; - - tmp_size = LIBUSB_DT_HID_SIZE; - _hid_get_hid_descriptor(dev, hd, &tmp_size); - - if (dev->input_report_size) { - ed->bLength = LIBUSB_DT_ENDPOINT_SIZE; - ed->bDescriptorType = LIBUSB_DT_ENDPOINT; - ed->bEndpointAddress = HID_IN_EP; - ed->bmAttributes = 3; - ed->wMaxPacketSize = dev->input_report_size - 1; - ed->bInterval = 10; - ed = (struct libusb_endpoint_descriptor *)((char *)ed + LIBUSB_DT_ENDPOINT_SIZE); - } - - if (dev->output_report_size) { - ed->bLength = LIBUSB_DT_ENDPOINT_SIZE; - ed->bDescriptorType = LIBUSB_DT_ENDPOINT; - ed->bEndpointAddress = HID_OUT_EP; - ed->bmAttributes = 3; - ed->wMaxPacketSize = dev->output_report_size - 1; - ed->bInterval = 10; - } - - if (*size > config_total_len) - *size = config_total_len; - memcpy(data, tmp, *size); - - return LIBUSB_COMPLETED; -} - -static int _hid_get_string_descriptor(struct hid_device_priv *dev, int _index, - void *data, size_t *size) -{ - void *tmp = NULL; - size_t tmp_size = 0; - int i; - - /* language ID, EN-US */ - char string_langid[] = {0x09, 0x04}; - - if ((*size < 2) || (*size > 255)) - return LIBUSB_ERROR_OVERFLOW; - - if (_index == 0) { - tmp = string_langid; - tmp_size = sizeof(string_langid) + 2; - } else { - for (i = 0; i < 3; i++) { - if (_index == (dev->string_index[i])) { - tmp = dev->string[i]; - tmp_size = (_hid_wcslen(dev->string[i]) + 1) * sizeof(WCHAR); - break; - } - } - - if (i == 3) // not found - return LIBUSB_ERROR_INVALID_PARAM; - } - - if (!tmp_size) - return LIBUSB_ERROR_INVALID_PARAM; - - if (tmp_size < *size) - *size = tmp_size; - - // 2 byte header - ((uint8_t *)data)[0] = (uint8_t)*size; - ((uint8_t *)data)[1] = LIBUSB_DT_STRING; - memcpy((uint8_t *)data + 2, tmp, *size - 2); - - return LIBUSB_COMPLETED; -} - -static int _hid_get_hid_descriptor(struct hid_device_priv *dev, void *data, size_t *size) -{ - struct libusb_hid_descriptor d; - uint8_t tmp[MAX_HID_DESCRIPTOR_SIZE]; - size_t report_len = MAX_HID_DESCRIPTOR_SIZE; - - _hid_get_report_descriptor(dev, tmp, &report_len); - - d.bLength = LIBUSB_DT_HID_SIZE; - d.bDescriptorType = LIBUSB_DT_HID; - d.bcdHID = 0x0110; /* 1.10 */ - d.bCountryCode = 0; - d.bNumDescriptors = 1; - d.bClassDescriptorType = LIBUSB_DT_REPORT; - d.wClassDescriptorLength = (uint16_t)report_len; - - if (*size > LIBUSB_DT_HID_SIZE) - *size = LIBUSB_DT_HID_SIZE; - memcpy(data, &d, *size); - - return LIBUSB_COMPLETED; -} - -static int _hid_get_report_descriptor(struct hid_device_priv *dev, void *data, size_t *size) -{ - uint8_t d[MAX_HID_DESCRIPTOR_SIZE]; - size_t i = 0; - - /* usage page (0xFFA0 == vendor defined) */ - d[i++] = 0x06; d[i++] = 0xA0; d[i++] = 0xFF; - /* usage (vendor defined) */ - d[i++] = 0x09; d[i++] = 0x01; - /* start collection (application) */ - d[i++] = 0xA1; d[i++] = 0x01; - /* input report */ - if (dev->input_report_size) { - /* usage (vendor defined) */ - d[i++] = 0x09; d[i++] = 0x01; - /* logical minimum (0) */ - d[i++] = 0x15; d[i++] = 0x00; - /* logical maximum (255) */ - d[i++] = 0x25; d[i++] = 0xFF; - /* report size (8 bits) */ - d[i++] = 0x75; d[i++] = 0x08; - /* report count */ - d[i++] = 0x95; d[i++] = (uint8_t)dev->input_report_size - 1; - /* input (data, variable, absolute) */ - d[i++] = 0x81; d[i++] = 0x00; - } - /* output report */ - if (dev->output_report_size) { - /* usage (vendor defined) */ - d[i++] = 0x09; d[i++] = 0x02; - /* logical minimum (0) */ - d[i++] = 0x15; d[i++] = 0x00; - /* logical maximum (255) */ - d[i++] = 0x25; d[i++] = 0xFF; - /* report size (8 bits) */ - d[i++] = 0x75; d[i++] = 0x08; - /* report count */ - d[i++] = 0x95; d[i++] = (uint8_t)dev->output_report_size - 1; - /* output (data, variable, absolute) */ - d[i++] = 0x91; d[i++] = 0x00; - } - /* feature report */ - if (dev->feature_report_size) { - /* usage (vendor defined) */ - d[i++] = 0x09; d[i++] = 0x03; - /* logical minimum (0) */ - d[i++] = 0x15; d[i++] = 0x00; - /* logical maximum (255) */ - d[i++] = 0x25; d[i++] = 0xFF; - /* report size (8 bits) */ - d[i++] = 0x75; d[i++] = 0x08; - /* report count */ - d[i++] = 0x95; d[i++] = (uint8_t)dev->feature_report_size - 1; - /* feature (data, variable, absolute) */ - d[i++] = 0xb2; d[i++] = 0x02; d[i++] = 0x01; - } - - /* end collection */ - d[i++] = 0xC0; - - if (*size > i) - *size = i; - memcpy(data, d, *size); - - return LIBUSB_COMPLETED; -} - -static int _hid_get_descriptor(struct hid_device_priv *dev, HANDLE hid_handle, int recipient, - int type, int _index, void *data, size_t *size) -{ - switch(type) { - case LIBUSB_DT_DEVICE: - usbi_dbg("LIBUSB_DT_DEVICE"); - return _hid_get_device_descriptor(dev, data, size); - case LIBUSB_DT_CONFIG: - usbi_dbg("LIBUSB_DT_CONFIG"); - if (!_index) - return _hid_get_config_descriptor(dev, data, size); - return LIBUSB_ERROR_INVALID_PARAM; - case LIBUSB_DT_STRING: - usbi_dbg("LIBUSB_DT_STRING"); - return _hid_get_string_descriptor(dev, _index, data, size); - case LIBUSB_DT_HID: - usbi_dbg("LIBUSB_DT_HID"); - if (!_index) - return _hid_get_hid_descriptor(dev, data, size); - return LIBUSB_ERROR_INVALID_PARAM; - case LIBUSB_DT_REPORT: - usbi_dbg("LIBUSB_DT_REPORT"); - if (!_index) - return _hid_get_report_descriptor(dev, data, size); - return LIBUSB_ERROR_INVALID_PARAM; - case LIBUSB_DT_PHYSICAL: - usbi_dbg("LIBUSB_DT_PHYSICAL"); - if (HidD_GetPhysicalDescriptor(hid_handle, data, (ULONG)*size)) - return LIBUSB_COMPLETED; - return LIBUSB_ERROR_OTHER; - } - - usbi_dbg("unsupported"); - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static int _hid_get_report(struct hid_device_priv *dev, HANDLE hid_handle, int id, void *data, - struct windows_transfer_priv *tp, size_t *size, OVERLAPPED *overlapped, int report_type) -{ - uint8_t *buf; - DWORD ioctl_code, read_size, expected_size = (DWORD)*size; - int r = LIBUSB_SUCCESS; - - if (tp->hid_buffer != NULL) - usbi_dbg("program assertion failed: hid_buffer is not NULL"); - - if ((*size == 0) || (*size > MAX_HID_REPORT_SIZE)) { - usbi_dbg("invalid size (%u)", *size); - return LIBUSB_ERROR_INVALID_PARAM; - } - - switch (report_type) { - case HID_REPORT_TYPE_INPUT: - ioctl_code = IOCTL_HID_GET_INPUT_REPORT; - break; - case HID_REPORT_TYPE_FEATURE: - ioctl_code = IOCTL_HID_GET_FEATURE; - break; - default: - usbi_dbg("unknown HID report type %d", report_type); - return LIBUSB_ERROR_INVALID_PARAM; - } - - // Add a trailing byte to detect overflows - buf = calloc(1, expected_size + 1); - if (buf == NULL) - return LIBUSB_ERROR_NO_MEM; - - buf[0] = (uint8_t)id; // Must be set always - usbi_dbg("report ID: 0x%02X", buf[0]); - - tp->hid_expected_size = expected_size; - read_size = expected_size; - - // NB: The size returned by DeviceIoControl doesn't include report IDs when not in use (0) - if (!DeviceIoControl(hid_handle, ioctl_code, buf, expected_size + 1, - buf, expected_size + 1, &read_size, overlapped)) { - if (GetLastError() != ERROR_IO_PENDING) { - usbi_dbg("Failed to Read HID Report: %s", windows_error_str(0)); - free(buf); - return LIBUSB_ERROR_IO; - } - // Asynchronous wait - tp->hid_buffer = buf; - tp->hid_dest = data; // copy dest, as not necessarily the start of the transfer buffer - return LIBUSB_SUCCESS; - } - - // Transfer completed synchronously => copy and discard extra buffer - if (read_size == 0) { - usbi_warn(NULL, "program assertion failed - read completed synchronously, but no data was read"); - *size = 0; - } else { - if (buf[0] != id) - usbi_warn(NULL, "mismatched report ID (data is %02X, parameter is %02X)", buf[0], id); - - if ((size_t)read_size > expected_size) { - r = LIBUSB_ERROR_OVERFLOW; - usbi_dbg("OVERFLOW!"); - } else { - r = LIBUSB_COMPLETED; - } - - *size = MIN((size_t)read_size, *size); - if (id == 0) - memcpy(data, buf + 1, *size); // Discard report ID - else - memcpy(data, buf, *size); - } - - free(buf); - return r; -} - -static int _hid_set_report(struct hid_device_priv *dev, HANDLE hid_handle, int id, void *data, - struct windows_transfer_priv *tp, size_t *size, OVERLAPPED *overlapped, int report_type) -{ - uint8_t *buf = NULL; - DWORD ioctl_code, write_size = (DWORD)*size; - - if (tp->hid_buffer != NULL) - usbi_dbg("program assertion failed: hid_buffer is not NULL"); - - if ((*size == 0) || (*size > MAX_HID_REPORT_SIZE)) { - usbi_dbg("invalid size (%u)", *size); - return LIBUSB_ERROR_INVALID_PARAM; - } - - switch (report_type) { - case HID_REPORT_TYPE_OUTPUT: - ioctl_code = IOCTL_HID_SET_OUTPUT_REPORT; - break; - case HID_REPORT_TYPE_FEATURE: - ioctl_code = IOCTL_HID_SET_FEATURE; - break; - default: - usbi_dbg("unknown HID report type %d", report_type); - return LIBUSB_ERROR_INVALID_PARAM; - } - - usbi_dbg("report ID: 0x%02X", id); - // When report IDs are not used (i.e. when id == 0), we must add - // a null report ID. Otherwise, we just use original data buffer - if (id == 0) - write_size++; - - buf = malloc(write_size); - if (buf == NULL) - return LIBUSB_ERROR_NO_MEM; - - if (id == 0) { - buf[0] = 0; - memcpy(buf + 1, data, *size); - } else { - // This seems like a waste, but if we don't duplicate the - // data, we'll get issues when freeing hid_buffer - memcpy(buf, data, *size); - if (buf[0] != id) - usbi_warn(NULL, "mismatched report ID (data is %02X, parameter is %02X)", buf[0], id); - } - - // NB: The size returned by DeviceIoControl doesn't include report IDs when not in use (0) - if (!DeviceIoControl(hid_handle, ioctl_code, buf, write_size, - buf, write_size, &write_size, overlapped)) { - if (GetLastError() != ERROR_IO_PENDING) { - usbi_dbg("Failed to Write HID Output Report: %s", windows_error_str(0)); - free(buf); - return LIBUSB_ERROR_IO; - } - tp->hid_buffer = buf; - tp->hid_dest = NULL; - return LIBUSB_SUCCESS; - } - - // Transfer completed synchronously - *size = write_size; - if (write_size == 0) - usbi_dbg("program assertion failed - write completed synchronously, but no data was written"); - - free(buf); - return LIBUSB_COMPLETED; -} - -static int _hid_class_request(struct hid_device_priv *dev, HANDLE hid_handle, int request_type, - int request, int value, int _index, void *data, struct windows_transfer_priv *tp, - size_t *size, OVERLAPPED *overlapped) -{ - int report_type = (value >> 8) & 0xFF; - int report_id = value & 0xFF; - - if ((LIBUSB_REQ_RECIPIENT(request_type) != LIBUSB_RECIPIENT_INTERFACE) - && (LIBUSB_REQ_RECIPIENT(request_type) != LIBUSB_RECIPIENT_DEVICE)) - return LIBUSB_ERROR_INVALID_PARAM; - - if (LIBUSB_REQ_OUT(request_type) && request == HID_REQ_SET_REPORT) - return _hid_set_report(dev, hid_handle, report_id, data, tp, size, overlapped, report_type); - - if (LIBUSB_REQ_IN(request_type) && request == HID_REQ_GET_REPORT) - return _hid_get_report(dev, hid_handle, report_id, data, tp, size, overlapped, report_type); - - return LIBUSB_ERROR_INVALID_PARAM; -} - - -/* - * HID API functions - */ -static int hid_init(int sub_api, struct libusb_context *ctx) -{ - DLL_GET_HANDLE(hid); - DLL_LOAD_FUNC(hid, HidD_GetAttributes, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetHidGuid, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetPreparsedData, TRUE); - DLL_LOAD_FUNC(hid, HidD_FreePreparsedData, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetManufacturerString, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetProductString, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetSerialNumberString, TRUE); - DLL_LOAD_FUNC(hid, HidP_GetCaps, TRUE); - DLL_LOAD_FUNC(hid, HidD_SetNumInputBuffers, TRUE); - DLL_LOAD_FUNC(hid, HidD_SetFeature, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetFeature, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetPhysicalDescriptor, TRUE); - DLL_LOAD_FUNC(hid, HidD_GetInputReport, FALSE); - DLL_LOAD_FUNC(hid, HidD_SetOutputReport, FALSE); - DLL_LOAD_FUNC(hid, HidD_FlushQueue, TRUE); - DLL_LOAD_FUNC(hid, HidP_GetValueCaps, TRUE); - - api_hid_available = true; - return LIBUSB_SUCCESS; -} - -static int hid_exit(int sub_api) -{ - DLL_FREE_HANDLE(hid); - - return LIBUSB_SUCCESS; -} - -// NB: open and close must ensure that they only handle interface of -// the right API type, as these functions can be called wholesale from -// composite_open(), with interfaces belonging to different APIs -static int hid_open(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - HIDD_ATTRIBUTES hid_attributes; - PHIDP_PREPARSED_DATA preparsed_data = NULL; - HIDP_CAPS capabilities; - HIDP_VALUE_CAPS *value_caps; - HANDLE hid_handle = INVALID_HANDLE_VALUE; - int i, j; - // report IDs handling - ULONG size[3]; - int nb_ids[2]; // zero and nonzero report IDs -#if defined(ENABLE_LOGGING) - const char *type[3] = {"input", "output", "feature"}; -#endif - - CHECK_HID_AVAILABLE; - - if (priv->hid == NULL) { - usbi_err(ctx, "program assertion failed - private HID structure is unitialized"); - return LIBUSB_ERROR_NOT_FOUND; - } - - for (i = 0; i < USB_MAXINTERFACES; i++) { - if ((priv->usb_interface[i].path != NULL) - && (priv->usb_interface[i].apib->id == USB_API_HID)) { - hid_handle = CreateFileA(priv->usb_interface[i].path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); - /* - * http://www.lvr.com/hidfaq.htm: Why do I receive "Access denied" when attempting to access my HID? - * "Windows 2000 and later have exclusive read/write access to HIDs that are configured as a system - * keyboards or mice. An application can obtain a handle to a system keyboard or mouse by not - * requesting READ or WRITE access with CreateFile. Applications can then use HidD_SetFeature and - * HidD_GetFeature (if the device supports Feature reports)." - */ - if (hid_handle == INVALID_HANDLE_VALUE) { - usbi_warn(ctx, "could not open HID device in R/W mode (keyboard or mouse?) - trying without"); - hid_handle = CreateFileA(priv->usb_interface[i].path, 0, FILE_SHARE_WRITE | FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); - if (hid_handle == INVALID_HANDLE_VALUE) { - usbi_err(ctx, "could not open device %s (interface %d): %s", priv->path, i, windows_error_str(0)); - switch(GetLastError()) { - case ERROR_FILE_NOT_FOUND: // The device was disconnected - return LIBUSB_ERROR_NO_DEVICE; - case ERROR_ACCESS_DENIED: - return LIBUSB_ERROR_ACCESS; - default: - return LIBUSB_ERROR_IO; - } - } - priv->usb_interface[i].restricted_functionality = true; - } - handle_priv->interface_handle[i].api_handle = hid_handle; - } - } - - hid_attributes.Size = sizeof(hid_attributes); - do { - if (!HidD_GetAttributes(hid_handle, &hid_attributes)) { - usbi_err(ctx, "could not gain access to HID top collection (HidD_GetAttributes)"); - break; - } - - priv->hid->vid = hid_attributes.VendorID; - priv->hid->pid = hid_attributes.ProductID; - - // Set the maximum available input buffer size - for (i = 32; HidD_SetNumInputBuffers(hid_handle, i); i *= 2); - usbi_dbg("set maximum input buffer size to %d", i / 2); - - // Get the maximum input and output report size - if (!HidD_GetPreparsedData(hid_handle, &preparsed_data) || !preparsed_data) { - usbi_err(ctx, "could not read HID preparsed data (HidD_GetPreparsedData)"); - break; - } - if (HidP_GetCaps(preparsed_data, &capabilities) != HIDP_STATUS_SUCCESS) { - usbi_err(ctx, "could not parse HID capabilities (HidP_GetCaps)"); - break; - } - - // Find out if interrupt will need report IDs - size[0] = capabilities.NumberInputValueCaps; - size[1] = capabilities.NumberOutputValueCaps; - size[2] = capabilities.NumberFeatureValueCaps; - for (j = HidP_Input; j <= HidP_Feature; j++) { - usbi_dbg("%u HID %s report value(s) found", (unsigned int)size[j], type[j]); - priv->hid->uses_report_ids[j] = false; - if (size[j] > 0) { - value_caps = calloc(size[j], sizeof(HIDP_VALUE_CAPS)); - if ((value_caps != NULL) - && (HidP_GetValueCaps((HIDP_REPORT_TYPE)j, value_caps, &size[j], preparsed_data) == HIDP_STATUS_SUCCESS) - && (size[j] >= 1)) { - nb_ids[0] = 0; - nb_ids[1] = 0; - for (i = 0; i < (int)size[j]; i++) { - usbi_dbg(" Report ID: 0x%02X", value_caps[i].ReportID); - if (value_caps[i].ReportID != 0) - nb_ids[1]++; - else - nb_ids[0]++; - } - if (nb_ids[1] != 0) { - if (nb_ids[0] != 0) - usbi_warn(ctx, "program assertion failed: zero and nonzero report IDs used for %s", - type[j]); - priv->hid->uses_report_ids[j] = true; - } - } else { - usbi_warn(ctx, " could not process %s report IDs", type[j]); - } - free(value_caps); - } - } - - // Set the report sizes - priv->hid->input_report_size = capabilities.InputReportByteLength; - priv->hid->output_report_size = capabilities.OutputReportByteLength; - priv->hid->feature_report_size = capabilities.FeatureReportByteLength; - - // Fetch string descriptors - priv->hid->string_index[0] = priv->dev_descriptor.iManufacturer; - if (priv->hid->string_index[0] != 0) - HidD_GetManufacturerString(hid_handle, priv->hid->string[0], sizeof(priv->hid->string[0])); - else - priv->hid->string[0][0] = 0; - - priv->hid->string_index[1] = priv->dev_descriptor.iProduct; - if (priv->hid->string_index[1] != 0) - HidD_GetProductString(hid_handle, priv->hid->string[1], sizeof(priv->hid->string[1])); - else - priv->hid->string[1][0] = 0; - - priv->hid->string_index[2] = priv->dev_descriptor.iSerialNumber; - if (priv->hid->string_index[2] != 0) - HidD_GetSerialNumberString(hid_handle, priv->hid->string[2], sizeof(priv->hid->string[2])); - else - priv->hid->string[2][0] = 0; - } while(0); - - if (preparsed_data) - HidD_FreePreparsedData(preparsed_data); - - return LIBUSB_SUCCESS; -} - -static void hid_close(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - HANDLE file_handle; - int i; - - if (!api_hid_available) - return; - - for (i = 0; i < USB_MAXINTERFACES; i++) { - if (priv->usb_interface[i].apib->id == USB_API_HID) { - file_handle = handle_priv->interface_handle[i].api_handle; - if (HANDLE_VALID(file_handle)) - CloseHandle(file_handle); - } - } -} - -static int hid_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - CHECK_HID_AVAILABLE; - - // NB: Disconnection detection is not possible in this function - if (priv->usb_interface[iface].path == NULL) - return LIBUSB_ERROR_NOT_FOUND; // invalid iface - - // We use dev_handle as a flag for interface claimed - if (handle_priv->interface_handle[iface].dev_handle == INTERFACE_CLAIMED) - return LIBUSB_ERROR_BUSY; // already claimed - - - handle_priv->interface_handle[iface].dev_handle = INTERFACE_CLAIMED; - - usbi_dbg("claimed interface %d", iface); - handle_priv->active_interface = iface; - - return LIBUSB_SUCCESS; -} - -static int hid_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - CHECK_HID_AVAILABLE; - - if (priv->usb_interface[iface].path == NULL) - return LIBUSB_ERROR_NOT_FOUND; // invalid iface - - if (handle_priv->interface_handle[iface].dev_handle != INTERFACE_CLAIMED) - return LIBUSB_ERROR_NOT_FOUND; // invalid iface - - handle_priv->interface_handle[iface].dev_handle = INVALID_HANDLE_VALUE; - - return LIBUSB_SUCCESS; -} - -static int hid_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - - CHECK_HID_AVAILABLE; - - if (altsetting > 255) - return LIBUSB_ERROR_INVALID_PARAM; - - if (altsetting != 0) { - usbi_err(ctx, "set interface altsetting not supported for altsetting >0"); - return LIBUSB_ERROR_NOT_SUPPORTED; - } - - return LIBUSB_SUCCESS; -} - -static int hid_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; - HANDLE hid_handle; - struct winfd wfd; - int current_interface, config; - size_t size; - int r = LIBUSB_ERROR_INVALID_PARAM; - - CHECK_HID_AVAILABLE; - - transfer_priv->pollable_fd = INVALID_WINFD; - safe_free(transfer_priv->hid_buffer); - transfer_priv->hid_dest = NULL; - size = transfer->length - LIBUSB_CONTROL_SETUP_SIZE; - - if (size > MAX_CTRL_BUFFER_LENGTH) - return LIBUSB_ERROR_INVALID_PARAM; - - current_interface = get_valid_interface(transfer->dev_handle, USB_API_HID); - if (current_interface < 0) { - if (auto_claim(transfer, ¤t_interface, USB_API_HID) != LIBUSB_SUCCESS) - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("will use interface %d", current_interface); - hid_handle = handle_priv->interface_handle[current_interface].api_handle; - // Always use the handle returned from usbi_create_fd (wfd.handle) - wfd = usbi_create_fd(hid_handle, RW_READ, NULL, NULL); - if (wfd.fd < 0) - return LIBUSB_ERROR_NOT_FOUND; - - switch(LIBUSB_REQ_TYPE(setup->request_type)) { - case LIBUSB_REQUEST_TYPE_STANDARD: - switch(setup->request) { - case LIBUSB_REQUEST_GET_DESCRIPTOR: - r = _hid_get_descriptor(priv->hid, wfd.handle, LIBUSB_REQ_RECIPIENT(setup->request_type), - (setup->value >> 8) & 0xFF, setup->value & 0xFF, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, &size); - break; - case LIBUSB_REQUEST_GET_CONFIGURATION: - r = windows_get_configuration(transfer->dev_handle, &config); - if (r == LIBUSB_SUCCESS) { - size = 1; - ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = (uint8_t)config; - r = LIBUSB_COMPLETED; - } - break; - case LIBUSB_REQUEST_SET_CONFIGURATION: - if (setup->value == priv->active_config) { - r = LIBUSB_COMPLETED; - } else { - usbi_warn(ctx, "cannot set configuration other than the default one"); - r = LIBUSB_ERROR_NOT_SUPPORTED; - } - break; - case LIBUSB_REQUEST_GET_INTERFACE: - size = 1; - ((uint8_t *)transfer->buffer)[LIBUSB_CONTROL_SETUP_SIZE] = 0; - r = LIBUSB_COMPLETED; - break; - case LIBUSB_REQUEST_SET_INTERFACE: - r = hid_set_interface_altsetting(0, transfer->dev_handle, setup->index, setup->value); - if (r == LIBUSB_SUCCESS) - r = LIBUSB_COMPLETED; - break; - default: - usbi_warn(ctx, "unsupported HID control request"); - r = LIBUSB_ERROR_NOT_SUPPORTED; - break; - } - break; - case LIBUSB_REQUEST_TYPE_CLASS: - r = _hid_class_request(priv->hid, wfd.handle, setup->request_type, setup->request, setup->value, - setup->index, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, transfer_priv, - &size, wfd.overlapped); - break; - default: - usbi_warn(ctx, "unsupported HID control request"); - r = LIBUSB_ERROR_NOT_SUPPORTED; - break; - } - - if (r == LIBUSB_COMPLETED) { - // Force request to be completed synchronously. Transferred size has been set by previous call - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - // http://msdn.microsoft.com/en-us/library/ms684342%28VS.85%29.aspx - // set InternalHigh to the number of bytes transferred - wfd.overlapped->InternalHigh = (DWORD)size; - r = LIBUSB_SUCCESS; - } - - if (r == LIBUSB_SUCCESS) { - // Use priv_transfer to store data needed for async polling - transfer_priv->pollable_fd = wfd; - transfer_priv->interface_number = (uint8_t)current_interface; - } else { - usbi_free_fd(&wfd); - } - - return r; -} - -static int hid_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - struct winfd wfd; - HANDLE hid_handle; - bool direction_in, ret; - int current_interface, length; - DWORD size; - int r = LIBUSB_SUCCESS; - - CHECK_HID_AVAILABLE; - - transfer_priv->pollable_fd = INVALID_WINFD; - transfer_priv->hid_dest = NULL; - safe_free(transfer_priv->hid_buffer); - - current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("matched endpoint %02X with interface %d", transfer->endpoint, current_interface); - - hid_handle = handle_priv->interface_handle[current_interface].api_handle; - direction_in = transfer->endpoint & LIBUSB_ENDPOINT_IN; - - wfd = usbi_create_fd(hid_handle, direction_in?RW_READ:RW_WRITE, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) - return LIBUSB_ERROR_NO_MEM; - - // If report IDs are not in use, an extra prefix byte must be added - if (((direction_in) && (!priv->hid->uses_report_ids[0])) - || ((!direction_in) && (!priv->hid->uses_report_ids[1]))) - length = transfer->length + 1; - else - length = transfer->length; - - // Add a trailing byte to detect overflows on input - transfer_priv->hid_buffer = calloc(1, length + 1); - if (transfer_priv->hid_buffer == NULL) - return LIBUSB_ERROR_NO_MEM; - - transfer_priv->hid_expected_size = length; - - if (direction_in) { - transfer_priv->hid_dest = transfer->buffer; - usbi_dbg("reading %d bytes (report ID: 0x00)", length); - ret = ReadFile(wfd.handle, transfer_priv->hid_buffer, length + 1, &size, wfd.overlapped); - } else { - if (!priv->hid->uses_report_ids[1]) - memcpy(transfer_priv->hid_buffer + 1, transfer->buffer, transfer->length); - else - // We could actually do without the calloc and memcpy in this case - memcpy(transfer_priv->hid_buffer, transfer->buffer, transfer->length); - - usbi_dbg("writing %d bytes (report ID: 0x%02X)", length, transfer_priv->hid_buffer[0]); - ret = WriteFile(wfd.handle, transfer_priv->hid_buffer, length, &size, wfd.overlapped); - } - - if (!ret) { - if (GetLastError() != ERROR_IO_PENDING) { - usbi_err(ctx, "HID transfer failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); - safe_free(transfer_priv->hid_buffer); - return LIBUSB_ERROR_IO; - } - } else { - // Only write operations that completed synchronously need to free up - // hid_buffer. For reads, copy_transfer_data() handles that process. - if (!direction_in) - safe_free(transfer_priv->hid_buffer); - - if (size == 0) { - usbi_err(ctx, "program assertion failed - no data was transferred"); - size = 1; - } - if (size > (size_t)length) { - usbi_err(ctx, "OVERFLOW!"); - r = LIBUSB_ERROR_OVERFLOW; - } - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - wfd.overlapped->InternalHigh = size; - } - - transfer_priv->pollable_fd = wfd; - transfer_priv->interface_number = (uint8_t)current_interface; - - return r; -} - -static int hid_abort_transfers(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - HANDLE hid_handle; - int current_interface; - - CHECK_HID_AVAILABLE; - - current_interface = transfer_priv->interface_number; - hid_handle = handle_priv->interface_handle[current_interface].api_handle; - CancelIo(hid_handle); - - return LIBUSB_SUCCESS; -} - -static int hid_reset_device(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - HANDLE hid_handle; - int current_interface; - - CHECK_HID_AVAILABLE; - - // Flushing the queues on all interfaces is the best we can achieve - for (current_interface = 0; current_interface < USB_MAXINTERFACES; current_interface++) { - hid_handle = handle_priv->interface_handle[current_interface].api_handle; - if (HANDLE_VALID(hid_handle)) - HidD_FlushQueue(hid_handle); - } - - return LIBUSB_SUCCESS; -} - -static int hid_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - HANDLE hid_handle; - int current_interface; - - CHECK_HID_AVAILABLE; - - current_interface = interface_by_endpoint(priv, handle_priv, endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); - return LIBUSB_ERROR_NOT_FOUND; - } - - usbi_dbg("matched endpoint %02X with interface %d", endpoint, current_interface); - hid_handle = handle_priv->interface_handle[current_interface].api_handle; - - // No endpoint selection with Microsoft's implementation, so we try to flush the - // whole interface. Should be OK for most case scenarios - if (!HidD_FlushQueue(hid_handle)) { - usbi_err(ctx, "Flushing of HID queue failed: %s", windows_error_str(0)); - // Device was probably disconnected - return LIBUSB_ERROR_NO_DEVICE; - } - - return LIBUSB_SUCCESS; -} - -// This extra function is only needed for HID -static int hid_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - int r = LIBUSB_TRANSFER_COMPLETED; - uint32_t corrected_size = io_size; - - if (transfer_priv->hid_buffer != NULL) { - // If we have a valid hid_buffer, it means the transfer was async - if (transfer_priv->hid_dest != NULL) { // Data readout - if (corrected_size > 0) { - // First, check for overflow - if (corrected_size > transfer_priv->hid_expected_size) { - usbi_err(ctx, "OVERFLOW!"); - corrected_size = (uint32_t)transfer_priv->hid_expected_size; - r = LIBUSB_TRANSFER_OVERFLOW; - } - - if (transfer_priv->hid_buffer[0] == 0) { - // Discard the 1 byte report ID prefix - corrected_size--; - memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer + 1, corrected_size); - } else { - memcpy(transfer_priv->hid_dest, transfer_priv->hid_buffer, corrected_size); - } - } - transfer_priv->hid_dest = NULL; - } - // For write, we just need to free the hid buffer - safe_free(transfer_priv->hid_buffer); - } - - itransfer->transferred += corrected_size; - return r; -} - - -/* - * Composite API functions - */ -static int composite_init(int sub_api, struct libusb_context *ctx) -{ - return LIBUSB_SUCCESS; -} - -static int composite_exit(int sub_api) -{ - return LIBUSB_SUCCESS; -} - -static int composite_open(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - int r = LIBUSB_ERROR_NOT_FOUND; - uint8_t i; - // SUB_API_MAX + 1 as the SUB_API_MAX pos is used to indicate availability of HID - bool available[SUB_API_MAX + 1] = { 0 }; - - for (i = 0; i < USB_MAXINTERFACES; i++) { - switch (priv->usb_interface[i].apib->id) { - case USB_API_WINUSBX: - if (priv->usb_interface[i].sub_api != SUB_API_NOTSET) - available[priv->usb_interface[i].sub_api] = true; - break; - case USB_API_HID: - available[SUB_API_MAX] = true; - break; - default: - break; - } - } - - for (i = 0; i < SUB_API_MAX; i++) { // WinUSB-like drivers - if (available[i]) { - r = usb_api_backend[USB_API_WINUSBX].open(i, dev_handle); - if (r != LIBUSB_SUCCESS) - return r; - } - } - - if (available[SUB_API_MAX]) // HID driver - r = hid_open(SUB_API_NOTSET, dev_handle); - - return r; -} - -static void composite_close(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - uint8_t i; - // SUB_API_MAX + 1 as the SUB_API_MAX pos is used to indicate availability of HID - bool available[SUB_API_MAX + 1] = { 0 }; - - for (i = 0; i < USB_MAXINTERFACES; i++) { - switch (priv->usb_interface[i].apib->id) { - case USB_API_WINUSBX: - if (priv->usb_interface[i].sub_api != SUB_API_NOTSET) - available[priv->usb_interface[i].sub_api] = true; - break; - case USB_API_HID: - available[SUB_API_MAX] = true; - break; - default: - break; - } - } - - for (i = 0; i < SUB_API_MAX; i++) { // WinUSB-like drivers - if (available[i]) - usb_api_backend[USB_API_WINUSBX].close(i, dev_handle); - } - - if (available[SUB_API_MAX]) // HID driver - hid_close(SUB_API_NOTSET, dev_handle); -} - -static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - return priv->usb_interface[iface].apib-> - claim_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); -} - -static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - return priv->usb_interface[iface].apib-> - set_interface_altsetting(priv->usb_interface[iface].sub_api, dev_handle, iface, altsetting); -} - -static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - - return priv->usb_interface[iface].apib-> - release_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); -} - -static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - struct libusb_config_descriptor *conf_desc; - WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; - int iface, pass, r; - - // Interface shouldn't matter for control, but it does in practice, with Windows' - // restrictions with regards to accessing HID keyboards and mice. Try to target - // a specific interface first, if possible. - switch (LIBUSB_REQ_RECIPIENT(setup->request_type)) { - case LIBUSB_RECIPIENT_INTERFACE: - iface = setup->index & 0xFF; - break; - case LIBUSB_RECIPIENT_ENDPOINT: - r = libusb_get_active_config_descriptor(transfer->dev_handle->dev, &conf_desc); - if (r == LIBUSB_SUCCESS) { - iface = get_interface_by_endpoint(conf_desc, (setup->index & 0xFF)); - libusb_free_config_descriptor(conf_desc); - break; - } - // Fall through if not able to determine interface - default: - iface = -1; - break; - } - - // Try and target a specific interface if the control setup indicates such - if ((iface >= 0) && (iface < USB_MAXINTERFACES)) { - usbi_dbg("attempting control transfer targeted to interface %d", iface); - if (priv->usb_interface[iface].path != NULL) { - r = priv->usb_interface[iface].apib->submit_control_transfer(priv->usb_interface[iface].sub_api, itransfer); - if (r == LIBUSB_SUCCESS) - return r; - } - } - - // Either not targeted to a specific interface or no luck in doing so. - // Try a 2 pass approach with all interfaces. - for (pass = 0; pass < 2; pass++) { - for (iface = 0; iface < USB_MAXINTERFACES; iface++) { - if (priv->usb_interface[iface].path != NULL) { - if ((pass == 0) && (priv->usb_interface[iface].restricted_functionality)) { - usbi_dbg("trying to skip restricted interface #%d (HID keyboard or mouse?)", iface); - continue; - } - usbi_dbg("using interface %d", iface); - r = priv->usb_interface[iface].apib->submit_control_transfer(priv->usb_interface[iface].sub_api, itransfer); - // If not supported on this API, it may be supported on another, so don't give up yet!! - if (r == LIBUSB_ERROR_NOT_SUPPORTED) - continue; - return r; - } - } - } - - usbi_err(ctx, "no libusb supported interfaces to complete request"); - return LIBUSB_ERROR_NOT_FOUND; -} - -static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) { - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int current_interface; - - current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); - return LIBUSB_ERROR_NOT_FOUND; - } - - return priv->usb_interface[current_interface].apib-> - submit_bulk_transfer(priv->usb_interface[current_interface].sub_api, itransfer); -} - -static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer) { - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - int current_interface; - - current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); - return LIBUSB_ERROR_NOT_FOUND; - } - - return priv->usb_interface[current_interface].apib-> - submit_iso_transfer(priv->usb_interface[current_interface].sub_api, itransfer); -} - -static int composite_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) -{ - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - struct windows_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - int current_interface; - - current_interface = interface_by_endpoint(priv, handle_priv, endpoint); - if (current_interface < 0) { - usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); - return LIBUSB_ERROR_NOT_FOUND; - } - - return priv->usb_interface[current_interface].apib-> - clear_halt(priv->usb_interface[current_interface].sub_api, dev_handle, endpoint); -} - -static int composite_abort_control(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - - return priv->usb_interface[transfer_priv->interface_number].apib-> - abort_control(priv->usb_interface[transfer_priv->interface_number].sub_api, itransfer); -} - -static int composite_abort_transfers(int sub_api, struct usbi_transfer *itransfer) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - - return priv->usb_interface[transfer_priv->interface_number].apib-> - abort_transfers(priv->usb_interface[transfer_priv->interface_number].sub_api, itransfer); -} - -static int composite_reset_device(int sub_api, struct libusb_device_handle *dev_handle) -{ - struct windows_device_priv *priv = _device_priv(dev_handle->dev); - int r; - uint8_t i; - bool available[SUB_API_MAX]; - - for (i = 0; i < SUB_API_MAX; i++) - available[i] = false; - - for (i = 0; i < USB_MAXINTERFACES; i++) { - if ((priv->usb_interface[i].apib->id == USB_API_WINUSBX) - && (priv->usb_interface[i].sub_api != SUB_API_NOTSET)) - available[priv->usb_interface[i].sub_api] = true; - } - - for (i = 0; i < SUB_API_MAX; i++) { - if (available[i]) { - r = usb_api_backend[USB_API_WINUSBX].reset_device(i, dev_handle); - if (r != LIBUSB_SUCCESS) - return r; - } - } - - return LIBUSB_SUCCESS; -} - -static int composite_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) -{ - struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct windows_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct windows_device_priv *priv = _device_priv(transfer->dev_handle->dev); - - return priv->usb_interface[transfer_priv->interface_number].apib-> - copy_transfer_data(priv->usb_interface[transfer_priv->interface_number].sub_api, itransfer, io_size); -} - -#endif /* !USE_USBDK */ diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/version_nano.h b/vendor/github.com/karalabe/hid/libusb/libusb/version_nano.h deleted file mode 100644 index 0a5d1c992640..000000000000 --- a/vendor/github.com/karalabe/hid/libusb/libusb/version_nano.h +++ /dev/null @@ -1 +0,0 @@ -#define LIBUSB_NANO 11182 diff --git a/vendor/github.com/karalabe/usb/AUTHORS b/vendor/github.com/karalabe/usb/AUTHORS new file mode 100644 index 000000000000..bae45b3ec294 --- /dev/null +++ b/vendor/github.com/karalabe/usb/AUTHORS @@ -0,0 +1,7 @@ +Felix Lange +Guillaume Ballet +Jakob Weisblat +Martin Holst Swende +Mateusz Mikołajczyk +Péter Szilágyi +Rosen Penev diff --git a/vendor/github.com/karalabe/usb/Dockerfile.alpine b/vendor/github.com/karalabe/usb/Dockerfile.alpine new file mode 100644 index 000000000000..342bdf79a7ab --- /dev/null +++ b/vendor/github.com/karalabe/usb/Dockerfile.alpine @@ -0,0 +1,6 @@ +FROM golang:alpine + +RUN apk add --no-cache git gcc musl-dev linux-headers + +ADD . $GOPATH/src/github.com/karalabe/usb +RUN cd $GOPATH/src/github.com/karalabe/usb && go install diff --git a/vendor/github.com/karalabe/usb/Dockerfile.ubuntu b/vendor/github.com/karalabe/usb/Dockerfile.ubuntu new file mode 100644 index 000000000000..b861e497beec --- /dev/null +++ b/vendor/github.com/karalabe/usb/Dockerfile.ubuntu @@ -0,0 +1,4 @@ +FROM golang:latest + +ADD . $GOPATH/src/github.com/karalabe/usb +RUN cd $GOPATH/src/github.com/karalabe/usb && go install diff --git a/vendor/github.com/karalabe/usb/LICENSE b/vendor/github.com/karalabe/usb/LICENSE new file mode 100644 index 000000000000..65c5ca88a67c --- /dev/null +++ b/vendor/github.com/karalabe/usb/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/vendor/github.com/karalabe/usb/README.md b/vendor/github.com/karalabe/usb/README.md new file mode 100644 index 000000000000..b6920f51a130 --- /dev/null +++ b/vendor/github.com/karalabe/usb/README.md @@ -0,0 +1,47 @@ +[![Travis][travisimg]][travisurl] +[![AppVeyor][appveyorimg]][appveyorurl] +[![GoDoc][docimg]][docurl] + +[travisimg]: https://travis-ci.org/karalabe/usb.svg?branch=master +[travisurl]: https://travis-ci.org/karalabe/usb +[appveyorimg]: https://ci.appveyor.com/api/projects/status/u96eq262bj2itprh/branch/master?svg=true +[appveyorurl]: https://ci.appveyor.com/project/karalabe/usb +[docimg]: https://godoc.org/github.com/karalabe/usb?status.svg +[docurl]: https://godoc.org/github.com/karalabe/usb + +# Yet another USB library for Go + +The `usb` package is a cross platform, fully self-contained library for accessing and communicating with USB devices **either via HID or low level interrupts**. The goal of the library was to create a simple way to find-, attach to- and read/write form USB devices. + +There are multiple already existing USB libraries: + + * The original `gousb` package [created by @kylelemons](https://github.com/kylelemons/gousb) and nowadays [maintained by @google](https://github.com/google/gousb) is a CGO wrapper around `libusb`. It is the most advanced USB library for Go out there. + * Unfortunately, `gousb` requires the `libusb` C library to be installed both during build as well as during runtime on the host operating system. This breaks binary portability and also adds unnecessary hurdles on Windows. + * Furthermore, whilst HID devices are supported by `libusb`, the OS on Macos and Windows explicitly takes over these devices, so only native system calls can be used on recent versions (i.e. you **cannot** use `libusb` for HID). + * There is a fork of `gousb` [created by @karalabe](https://github.com/karalabe/gousb) that statically linked `libusb` during build, but with the lack of HID access, that work was abandoned. + * For HID-only devices, a previous self-contained package was created at [`github.com/karalabe/hid`](https://github.com/karalabe/hid), which worked well for hardware wallet uses cases in [`go-ethereum`](https://github.com/ethereum/go-ethereum). It's a simple package that does it's thing well. + * Unfortunately, `hid` is not capable of talking to generic USB devices. When multiple different devices are needed, eventually some will not support the HID spec (e.g. WebUSB). Pulling in both `hid` and `gousb` will break down due to both depending internally on different versions of `libusb` on Linux. + +This `usb` package is a proper integration of `hidapi` and `libusb` so that communication with HID devices is done via system calls, whereas communication with lower level USB devices is done via interrupts. All this detail is hidden away behind a tiny interface. + +The package supports Linux, macOS, Windows and FreeBSD. Exclude constraints are also specified for Android and iOS to allow smoother vendoring into cross platform projects. + +## Cross-compiling + +Using `go get`, the embedded C library is compiled into the binary format of your host OS. Cross compiling to a different platform or architecture entails disabling CGO by default in Go, causing device enumeration `hid.Enumerate()` to yield no results. + +To cross compile a functional version of this library, you'll need to enable CGO during cross compilation via `CGO_ENABLED=1` and you'll need to install and set a cross compilation enabled C toolkit via `CC=your-cross-gcc`. + +## Acknowledgements + +Although the `usb` package is an implementation from scratch, HID support was heavily inspired by the existing [`go.hid`](https://github.com/GeertJohan/go.hid) library, which seems abandoned since 2015; is incompatible with Go 1.6+; and has various external dependencies. + +Wide character support in the HID support is done via the [`gowchar`](https://github.com/orofarne/gowchar) library, unmaintained since 2013; non buildable with a modern Go release and failing `go vet` checks. As such, `gowchar` was also vendored in inline. + +Error handling for the `libusb` integration originates from the [`gousb`](https://github.com/google/gousb) library. + +## License + +This USB library is licensed under the [GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html) (dictated by libusb). + +If you are only interested in Human Interface devices, a less restrictive package can be found at [`github.com/karalabe/hid`](https://github.com/karalabe/hid). diff --git a/vendor/github.com/karalabe/hid/appveyor.yml b/vendor/github.com/karalabe/usb/appveyor.yml similarity index 75% rename from vendor/github.com/karalabe/hid/appveyor.yml rename to vendor/github.com/karalabe/usb/appveyor.yml index 84b3c95ff7c9..73a9664ae7a2 100644 --- a/vendor/github.com/karalabe/hid/appveyor.yml +++ b/vendor/github.com/karalabe/usb/appveyor.yml @@ -1,7 +1,7 @@ os: Visual Studio 2015 # Clone directly into GOPATH. -clone_folder: C:\gopath\src\github.com\karalabe\hid +clone_folder: C:\gopath\src\github.com\karalabe\usb clone_depth: 1 version: "{branch}.{build}" environment: @@ -22,11 +22,14 @@ environment: install: - rmdir C:\go /s /q - - appveyor DownloadFile https://storage.googleapis.com/golang/go1.10.1.windows-%GOARCH%.zip - - 7z x go1.10.1.windows-%GOARCH%.zip -y -oC:\ > NUL + - appveyor DownloadFile https://storage.googleapis.com/golang/go1.12.9.windows-%GOARCH%.zip + - 7z x go1.12.9.windows-%GOARCH%.zip -y -oC:\ > NUL - go version - gcc --version build_script: - go install ./... - go test -v ./... + - set CGO_ENABLED=0 + - go install ./... + - go test -v ./... diff --git a/vendor/github.com/karalabe/usb/demo.go b/vendor/github.com/karalabe/usb/demo.go new file mode 100644 index 000000000000..229faaf5f801 --- /dev/null +++ b/vendor/github.com/karalabe/usb/demo.go @@ -0,0 +1,76 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build none + +package main + +import ( + "fmt" + "strings" + + "github.com/karalabe/usb" +) + +func main() { + // Enumerate all the HID devices in alphabetical path order + hids, err := usb.EnumerateHid(0, 0) + if err != nil { + panic(err) + } + for i := 0; i < len(hids); i++ { + for j := i + 1; j < len(hids); j++ { + if hids[i].Path > hids[j].Path { + hids[i], hids[j] = hids[j], hids[i] + } + } + } + for i, hid := range hids { + fmt.Println(strings.Repeat("-", 128)) + fmt.Printf("HID #%d\n", i) + fmt.Printf(" OS Path: %s\n", hid.Path) + fmt.Printf(" Vendor ID: %#04x\n", hid.VendorID) + fmt.Printf(" Product ID: %#04x\n", hid.ProductID) + fmt.Printf(" Release: %d\n", hid.Release) + fmt.Printf(" Serial: %s\n", hid.Serial) + fmt.Printf(" Manufacturer: %s\n", hid.Manufacturer) + fmt.Printf(" Product: %s\n", hid.Product) + fmt.Printf(" Usage Page: %d\n", hid.UsagePage) + fmt.Printf(" Usage: %d\n", hid.Usage) + fmt.Printf(" Interface: %d\n", hid.Interface) + } + fmt.Println(strings.Repeat("=", 128)) + + // Enumerate all the non-HID devices in alphabetical path order + raws, err := usb.EnumerateRaw(0, 0) + if err != nil { + panic(err) + } + for i := 0; i < len(raws); i++ { + for j := i + 1; j < len(raws); j++ { + if raws[i].Path > raws[j].Path { + raws[i], raws[j] = raws[j], raws[i] + } + } + } + for i, raw := range raws { + fmt.Printf("RAW #%d\n", i) + fmt.Printf(" OS Path: %s\n", raw.Path) + fmt.Printf(" Vendor ID: %#04x\n", raw.VendorID) + fmt.Printf(" Product ID: %#04x\n", raw.ProductID) + fmt.Printf(" Interface: %d\n", raw.Interface) + fmt.Println(strings.Repeat("-", 128)) + } +} diff --git a/vendor/github.com/karalabe/usb/go.mod b/vendor/github.com/karalabe/usb/go.mod new file mode 100644 index 000000000000..ef549d28f55e --- /dev/null +++ b/vendor/github.com/karalabe/usb/go.mod @@ -0,0 +1,3 @@ +module github.com/karalabe/usb + +go 1.12 diff --git a/vendor/github.com/karalabe/usb/hid_disabled.go b/vendor/github.com/karalabe/usb/hid_disabled.go new file mode 100644 index 000000000000..a85964bf355e --- /dev/null +++ b/vendor/github.com/karalabe/usb/hid_disabled.go @@ -0,0 +1,42 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2017 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build !freebsd,!linux,!darwin,!windows ios !cgo + +package usb + +// HidDevice is a live HID USB connected device handle. On platforms that this file +// implements, the type lacks the actual HID device and all methods are noop. +type HidDevice struct { + DeviceInfo // Embed the infos for easier access +} + +// Close releases the HID USB device handle. On platforms that this file implements, +// the method is just a noop. +func (dev *HidDevice) Close() error { + return ErrUnsupportedPlatform +} + +// Write sends an output report to a HID device. On platforms that this file +// implements, the method just returns an error. +func (dev *HidDevice) Write(b []byte) (int, error) { + return 0, ErrUnsupportedPlatform +} + +// Read retrieves an input report from a HID device. On platforms that this file +// implements, the method just returns an error. +func (dev *HidDevice) Read(b []byte) (int, error) { + return 0, ErrUnsupportedPlatform +} diff --git a/vendor/github.com/karalabe/hid/hid_enabled.go b/vendor/github.com/karalabe/usb/hid_enabled.go similarity index 61% rename from vendor/github.com/karalabe/hid/hid_enabled.go rename to vendor/github.com/karalabe/usb/hid_enabled.go index e95e5792d91e..c2b3720989f9 100644 --- a/vendor/github.com/karalabe/hid/hid_enabled.go +++ b/vendor/github.com/karalabe/usb/hid_enabled.go @@ -1,44 +1,25 @@ -// hid - Gopher Interface Devices (USB HID) -// Copyright (c) 2017 Péter Szilágyi. All rights reserved. +// usb - Self contained USB and HID library for Go +// Copyright 2017 The library Authors // -// This file is released under the 3-clause BSD license. Note however that Linux -// support depends on libusb, released under LGNU GPL 2.1 or later. +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . -// +build linux,cgo darwin,!ios,cgo windows,cgo +// +build freebsd,cgo linux,cgo darwin,!ios,cgo windows,cgo -package hid +package usb /* -#cgo CFLAGS: -I./hidapi/hidapi - -#cgo linux CFLAGS: -I./libusb/libusb -DDEFAULT_VISIBILITY="" -DOS_LINUX -D_GNU_SOURCE -DPOLL_NFDS_TYPE=int -#cgo linux,!android LDFLAGS: -lrt -#cgo darwin CFLAGS: -DOS_DARWIN -#cgo darwin LDFLAGS: -framework CoreFoundation -framework IOKit -#cgo windows CFLAGS: -DOS_WINDOWS -#cgo windows LDFLAGS: -lsetupapi - -#ifdef OS_LINUX - #include - #include "os/threads_posix.c" - #include "os/poll_posix.c" - - #include "os/linux_usbfs.c" - #include "os/linux_netlink.c" - - #include "core.c" - #include "descriptor.c" - #include "hotplug.c" - #include "io.c" - #include "strerror.c" - #include "sync.c" - - #include "hidapi/libusb/hid.c" -#elif OS_DARWIN - #include "hidapi/mac/hid.c" -#elif OS_WINDOWS - #include "hidapi/windows/hid.c" -#endif +#include +#include "./hidapi/hidapi/hidapi.h" */ import "C" @@ -49,35 +30,16 @@ import ( "unsafe" ) -// enumerateLock is a mutex serializing access to USB device enumeration needed -// by the macOS USB HID system calls, which require 2 consecutive method calls -// for enumeration, causing crashes if called concurrently. -// -// For more details, see: -// https://developer.apple.com/documentation/iokit/1438371-iohidmanagersetdevicematching -// > "subsequent calls will cause the hid manager to release previously enumerated devices" -var enumerateLock sync.Mutex - -// Supported returns whether this platform is supported by the HID library or not. -// The goal of this method is to allow programatically handling platforms that do -// not support USB HID and not having to fall back to build constraints. -func Supported() bool { - return true -} - -// Enumerate returns a list of all the HID devices attached to the system which +// enumerateHid returns a list of all the HID devices attached to the system which // match the vendor and product id: // - If the vendor id is set to 0 then any vendor matches. // - If the product id is set to 0 then any product matches. // - If the vendor and product id are both 0, all HID devices are returned. -func Enumerate(vendorID uint16, productID uint16) []DeviceInfo { - enumerateLock.Lock() - defer enumerateLock.Unlock() - +func enumerateHid(vendorID uint16, productID uint16) ([]DeviceInfo, error) { // Gather all device infos and ensure they are freed before returning head := C.hid_enumerate(C.ushort(vendorID), C.ushort(productID)) if head == nil { - return nil + return nil, nil } defer C.hid_free_enumeration(head) @@ -104,14 +66,11 @@ func Enumerate(vendorID uint16, productID uint16) []DeviceInfo { } infos = append(infos, info) } - return infos + return infos, nil } -// Open connects to an HID device by its path name. -func (info DeviceInfo) Open() (*Device, error) { - enumerateLock.Lock() - defer enumerateLock.Unlock() - +// openHid connects to an HID device by its path name. +func openHid(info DeviceInfo) (*hidDevice, error) { path := C.CString(info.Path) defer C.free(unsafe.Pointer(path)) @@ -119,14 +78,14 @@ func (info DeviceInfo) Open() (*Device, error) { if device == nil { return nil, errors.New("hidapi: failed to open device") } - return &Device{ + return &hidDevice{ DeviceInfo: info, device: device, }, nil } -// Device is a live HID USB connected device handle. -type Device struct { +// hidDevice is a live HID USB connected device handle. +type hidDevice struct { DeviceInfo // Embed the infos for easier access device *C.hid_device // Low level HID device to communicate through @@ -134,7 +93,7 @@ type Device struct { } // Close releases the HID USB device handle. -func (dev *Device) Close() error { +func (dev *hidDevice) Close() error { dev.lock.Lock() defer dev.lock.Unlock() @@ -149,7 +108,7 @@ func (dev *Device) Close() error { // // Write will send the data on the first OUT endpoint, if one exists. If it does // not, it will send the data through the Control Endpoint (Endpoint 0). -func (dev *Device) Write(b []byte) (int, error) { +func (dev *hidDevice) Write(b []byte) (int, error) { // Abort if nothing to write if len(b) == 0 { return 0, nil @@ -192,7 +151,7 @@ func (dev *Device) Write(b []byte) (int, error) { } // Read retrieves an input report from a HID device. -func (dev *Device) Read(b []byte) (int, error) { +func (dev *hidDevice) Read(b []byte) (int, error) { // Aborth if nothing to read if len(b) == 0 { return 0, nil diff --git a/vendor/github.com/karalabe/hid/hidapi/AUTHORS.txt b/vendor/github.com/karalabe/usb/hidapi/AUTHORS.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/AUTHORS.txt rename to vendor/github.com/karalabe/usb/hidapi/AUTHORS.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/LICENSE-bsd.txt b/vendor/github.com/karalabe/usb/hidapi/LICENSE-bsd.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/LICENSE-bsd.txt rename to vendor/github.com/karalabe/usb/hidapi/LICENSE-bsd.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/LICENSE-gpl3.txt b/vendor/github.com/karalabe/usb/hidapi/LICENSE-gpl3.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/LICENSE-gpl3.txt rename to vendor/github.com/karalabe/usb/hidapi/LICENSE-gpl3.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/LICENSE-orig.txt b/vendor/github.com/karalabe/usb/hidapi/LICENSE-orig.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/LICENSE-orig.txt rename to vendor/github.com/karalabe/usb/hidapi/LICENSE-orig.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/LICENSE.txt b/vendor/github.com/karalabe/usb/hidapi/LICENSE.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/LICENSE.txt rename to vendor/github.com/karalabe/usb/hidapi/LICENSE.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/README.txt b/vendor/github.com/karalabe/usb/hidapi/README.txt similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/README.txt rename to vendor/github.com/karalabe/usb/hidapi/README.txt diff --git a/vendor/github.com/karalabe/hid/hidapi/hidapi/hidapi.h b/vendor/github.com/karalabe/usb/hidapi/hidapi/hidapi.h similarity index 99% rename from vendor/github.com/karalabe/hid/hidapi/hidapi/hidapi.h rename to vendor/github.com/karalabe/usb/hidapi/hidapi/hidapi.h index e5bc2dc40a98..166f3509ab84 100644 --- a/vendor/github.com/karalabe/hid/hidapi/hidapi/hidapi.h +++ b/vendor/github.com/karalabe/usb/hidapi/hidapi/hidapi.h @@ -87,7 +87,7 @@ extern "C" { needed. This function should be called at the beginning of execution however, if there is a chance of HIDAPI handles being opened by different threads simultaneously. - + @ingroup API @returns @@ -388,4 +388,3 @@ extern "C" { #endif #endif - diff --git a/vendor/github.com/karalabe/hid/hidapi/libusb/hid.c b/vendor/github.com/karalabe/usb/hidapi/libusb/hid.c similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/libusb/hid.c rename to vendor/github.com/karalabe/usb/hidapi/libusb/hid.c diff --git a/vendor/github.com/karalabe/hid/hidapi/mac/hid.c b/vendor/github.com/karalabe/usb/hidapi/mac/hid.c similarity index 100% rename from vendor/github.com/karalabe/hid/hidapi/mac/hid.c rename to vendor/github.com/karalabe/usb/hidapi/mac/hid.c diff --git a/vendor/github.com/karalabe/hid/hidapi/windows/hid.c b/vendor/github.com/karalabe/usb/hidapi/windows/hid.c old mode 100755 new mode 100644 similarity index 99% rename from vendor/github.com/karalabe/hid/hidapi/windows/hid.c rename to vendor/github.com/karalabe/usb/hidapi/windows/hid.c index 86810d7e567c..60da64608c5e --- a/vendor/github.com/karalabe/hid/hidapi/windows/hid.c +++ b/vendor/github.com/karalabe/usb/hidapi/windows/hid.c @@ -8,7 +8,7 @@ 8/22/2009 Copyright 2009, All Rights Reserved. - + At the discretion of the user of this library, this software may be licensed under the terms of the GNU General Public License v3, a BSD-Style license, or the @@ -74,6 +74,8 @@ extern "C" { #pragma warning(disable:4996) #endif +#pragma GCC diagnostic ignored "-Wstringop-overflow" + #ifdef __cplusplus extern "C" { #endif @@ -181,7 +183,7 @@ static void register_error(hid_device *device, const char *op) MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPVOID)&msg, 0/*sz*/, NULL); - + /* Get rid of the CR and LF that FormatMessage() sticks at the end of the message. Thanks Microsoft! */ ptr = msg; @@ -292,9 +294,9 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor /* Get information for all the devices belonging to the HID class. */ device_info_set = SetupDiGetClassDevsA(&InterfaceClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); - + /* Iterate over each device in the HID class, looking for the right one. */ - + for (;;) { HANDLE write_handle = INVALID_HANDLE_VALUE; DWORD required_size = 0; @@ -305,7 +307,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor &InterfaceClassGuid, device_index, &device_interface_data); - + if (!res) { /* A return of FALSE from this function means that there are no more devices. */ @@ -377,7 +379,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor /* Unable to open the device. */ //register_error(dev, "CreateFile"); goto cont_close; - } + } /* Get the Vendor ID and Product ID for this device. */ @@ -421,7 +423,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor HidD_FreePreparsedData(pp_data); } - + /* Fill out the record */ cur_dev->next = NULL; str = device_interface_detail_data->DevicePath; @@ -521,7 +523,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi struct hid_device_info *devs, *cur_dev; const char *path_to_open = NULL; hid_device *handle = NULL; - + devs = hid_enumerate(vendor_id, product_id); cur_dev = devs; while (cur_dev) { @@ -547,7 +549,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi } hid_free_enumeration(devs); - + return handle; } @@ -590,7 +592,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path) } nt_res = HidP_GetCaps(pp_data, &caps); if (nt_res != HIDP_STATUS_SUCCESS) { - register_error(dev, "HidP_GetCaps"); + register_error(dev, "HidP_GetCaps"); goto err_pp_data; } dev->output_report_length = caps.OutputReportByteLength; @@ -603,7 +605,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path) err_pp_data: HidD_FreePreparsedData(pp_data); -err: +err: free_hid_device(dev); return NULL; } @@ -636,7 +638,7 @@ int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char * } res = WriteFile(dev->device_handle, buf, length, NULL, &ol); - + if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* WriteFile() failed. Return error. */ @@ -679,7 +681,7 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char memset(dev->read_buf, 0, dev->input_report_length); ResetEvent(ev); res = ReadFile(dev->device_handle, dev->read_buf, dev->input_report_length, &bytes_read, &dev->ol); - + if (!res) { if (GetLastError() != ERROR_IO_PENDING) { /* ReadFile() has failed. @@ -705,7 +707,7 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char we are in non-blocking mode. Get the number of bytes read. The actual data has been copied to the data[] array which was passed to ReadFile(). */ res = GetOverlappedResult(dev->device_handle, &dev->ol, &bytes_read, TRUE/*wait*/); - + /* Set pending back to false, even if GetOverlappedResult() returned error. */ dev->read_pending = FALSE; @@ -725,13 +727,13 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char memcpy(data, dev->read_buf, copy_len); } } - + end_of_function: if (!res) { register_error(dev, "GetOverlappedResult"); return -1; } - + return copy_len; } @@ -876,7 +878,7 @@ HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev) /*#define PICPGM*/ /*#define S11*/ #define P32 -#ifdef S11 +#ifdef S11 unsigned short VendorID = 0xa0a0; unsigned short ProductID = 0x0001; #endif @@ -906,7 +908,7 @@ int __cdecl main(int argc, char* argv[]) memset(buf,0x00,sizeof(buf)); buf[0] = 0; buf[1] = 0x81; - + /* Open the device. */ int handle = open(VendorID, ProductID, L"12345"); diff --git a/vendor/github.com/karalabe/usb/libs.go b/vendor/github.com/karalabe/usb/libs.go new file mode 100644 index 000000000000..6446acee9e0a --- /dev/null +++ b/vendor/github.com/karalabe/usb/libs.go @@ -0,0 +1,74 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build freebsd,cgo linux,cgo darwin,!ios,cgo windows,cgo + +package usb + +/* +#cgo CFLAGS: -I./hidapi/hidapi +#cgo CFLAGS: -I./libusb/libusb +#cgo CFLAGS: -DDEFAULT_VISIBILITY="" +#cgo CFLAGS: -DPOLL_NFDS_TYPE=int + +#cgo linux CFLAGS: -DOS_LINUX -D_GNU_SOURCE -DHAVE_SYS_TIME_H +#cgo linux,!android LDFLAGS: -lrt +#cgo darwin CFLAGS: -DOS_DARWIN -DHAVE_SYS_TIME_H +#cgo darwin LDFLAGS: -framework CoreFoundation -framework IOKit -lobjc +#cgo windows CFLAGS: -DOS_WINDOWS +#cgo windows LDFLAGS: -lsetupapi +#cgo freebsd CFLAGS: -DOS_FREEBSD +#cgo freebsd LDFLAGS: -lusb +#cgo openbsd CFLAGS: -DOS_OPENBSD + +#if defined(OS_LINUX) || defined(OS_DARWIN) || defined(DOS_FREEBSD) || defined(OS_OPENBSD) + #include + #include "os/threads_posix.c" + #include "os/poll_posix.c" +#elif defined(OS_WINDOWS) + #include "os/poll_windows.c" + #include "os/threads_windows.c" +#endif + +#ifdef OS_LINUX + #include "os/linux_usbfs.c" + #include "os/linux_netlink.c" + #include "hidapi/libusb/hid.c" +#elif OS_DARWIN + #include "os/darwin_usb.c" + #include "hidapi/mac/hid.c" +#elif OS_WINDOWS + #include "os/windows_nt_common.c" + #include "os/windows_usbdk.c" + #include "os/windows_winusb.c" + #include "hidapi/windows/hid.c" +#elif OS_FREEBSD + #include + #include "hidapi/libusb/hid.c" +#elif DOS_OPENBSD + #include "os/openbsd_usb.c" + #include "hidapi/libusb/hid.c" +#endif + +#ifndef OS_FREEBSD + #include "core.c" + #include "descriptor.c" + #include "hotplug.c" + #include "io.c" + #include "strerror.c" + #include "sync.c" +#endif +*/ +import "C" diff --git a/vendor/github.com/karalabe/hid/libusb/AUTHORS b/vendor/github.com/karalabe/usb/libusb/AUTHORS similarity index 76% rename from vendor/github.com/karalabe/hid/libusb/AUTHORS rename to vendor/github.com/karalabe/usb/libusb/AUTHORS index 70d407bd19f9..e90ad9bb2ab8 100644 --- a/vendor/github.com/karalabe/hid/libusb/AUTHORS +++ b/vendor/github.com/karalabe/usb/libusb/AUTHORS @@ -8,14 +8,19 @@ Copyright © 2010-2012 Michael Plante Copyright © 2011-2013 Hans de Goede Copyright © 2012-2013 Martin Pieuchot Copyright © 2012-2013 Toby Gray -Copyright © 2013-2015 Chris Dickens +Copyright © 2013-2018 Chris Dickens Other contributors: +Adrian Bunk Akshay Jaggi Alan Ott Alan Stern Alex Vatchenko Andrew Fernandes +Andy Chunyu +Andy McFadden +Angus Gratton +Anil Nair Anthony Clay Antonio Ospite Artem Egorkine @@ -23,12 +28,17 @@ Aurelien Jarno Bastien Nocera Bei Zhang Benjamin Dobell +Brent Rector Carl Karsten +Christophe Zeitouny Colin Walters Dave Camarillo David Engraf David Moore Davidlohr Bueso +Dmitry Fleytman +Doug Johnston +Evan Hunter Federico Manzan Felipe Balbi Florian Albrechtskirchinger @@ -41,23 +51,34 @@ Hans Ulrich Niedermann Hector Martin Hoi-Ho Chan Ilya Konstantinov +Jakub Klama James Hanko +Jeffrey Nichols +Johann Richard John Sheu +Jonathon Jongsma +Joost Muller +Josh Gao Joshua Blake Justin Bischoff +KIMURA Masaru Karsten Koenig Konrad Rzepecki Kuangye Guo Lars Kanis Lars Wirzenius +Lei Chen Luca Longinotti Marcus Meissner Markus Heidelberg Martin Ettl Martin Koegler +Matthew Stapleton Matthias Bolte +Michel Zou Mike Frysinger Mikhail Gusarov +Morgan Leborgne Moritz Fischer Ларионов Даниил Nicholas Corgan @@ -66,10 +87,17 @@ Orin Eman Paul Fertser Pekka Nikander Rob Walker +Romain Vimont +Roman Kalashnikov +Sameeh Jubran Sean McBride Sebastian Pipping +Sergey Serb Simon Haggett Simon Newton +Stefan Agner +Stefan Tauner +Steinar H. Gunderson Thomas Röfer Tim Hutt Tim Roberts @@ -81,9 +109,11 @@ Uri Lublin Vasily Khoruzhick Vegard Storheil Eriksen Venkatesh Shukla +Vianney le Clément de Saint-Marcq +Victor Toso Vitali Lovich +William Skellenger Xiaofan Chen Zoltán Kovács Роман Донченко parafin -xantares diff --git a/vendor/github.com/karalabe/hid/libusb/COPYING b/vendor/github.com/karalabe/usb/libusb/COPYING similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/COPYING rename to vendor/github.com/karalabe/usb/libusb/COPYING diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/config.h b/vendor/github.com/karalabe/usb/libusb/libusb/config.h similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/config.h rename to vendor/github.com/karalabe/usb/libusb/libusb/config.h diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/core.c b/vendor/github.com/karalabe/usb/libusb/libusb/core.c similarity index 91% rename from vendor/github.com/karalabe/hid/libusb/libusb/core.c rename to vendor/github.com/karalabe/usb/libusb/libusb/core.c index d45bfe177e7b..50f92f6b1b46 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/core.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/core.c @@ -44,32 +44,6 @@ #include "libusbi.h" #include "hotplug.h" -#if defined(OS_LINUX) -const struct usbi_os_backend * const usbi_backend = &linux_usbfs_backend; -#elif defined(OS_DARWIN) -const struct usbi_os_backend * const usbi_backend = &darwin_backend; -#elif defined(OS_OPENBSD) -const struct usbi_os_backend * const usbi_backend = &openbsd_backend; -#elif defined(OS_NETBSD) -const struct usbi_os_backend * const usbi_backend = &netbsd_backend; -#elif defined(OS_WINDOWS) - -#if defined(USE_USBDK) -const struct usbi_os_backend * const usbi_backend = &usbdk_backend; -#else -const struct usbi_os_backend * const usbi_backend = &windows_backend; -#endif - -#elif defined(OS_WINCE) -const struct usbi_os_backend * const usbi_backend = &wince_backend; -#elif defined(OS_HAIKU) -const struct usbi_os_backend * const usbi_backend = &haiku_usb_raw_backend; -#elif defined (OS_SUNOS) -const struct usbi_os_backend * const usbi_backend = &sunos_backend; -#else -#error "Unsupported OS" -#endif - struct libusb_context *usbi_default_context = NULL; static const struct libusb_version libusb_version_internal = { LIBUSB_MAJOR, LIBUSB_MINOR, LIBUSB_MICRO, LIBUSB_NANO, @@ -142,15 +116,17 @@ struct list_head active_contexts_list; * libusb uses stderr for all logging. By default, logging is set to NONE, * which means that no output will be produced. However, unless the library * has been compiled with logging disabled, then any application calls to - * libusb_set_debug(), or the setting of the environmental variable - * LIBUSB_DEBUG outside of the application, can result in logging being - * produced. Your application should therefore not close stderr, but instead - * direct it to the null device if its output is undesirable. - * - * The libusb_set_debug() function can be used to enable logging of certain - * messages. Under standard configuration, libusb doesn't really log much - * so you are advised to use this function to enable all error/warning/ - * informational messages. It will help debug problems with your software. + * libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level), or the setting of the + * environmental variable LIBUSB_DEBUG outside of the application, can result + * in logging being produced. Your application should therefore not close + * stderr, but instead direct it to the null device if its output is + * undesirable. + * + * The libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level) function can be + * used to enable logging of certain messages. Under standard configuration, + * libusb doesn't really log much so you are advised to use this function + * to enable all error/warning/ informational messages. It will help debug + * problems with your software. * * The logged messages are unstructured. There is no one-to-one correspondence * between messages being logged and success or failure return codes from @@ -165,18 +141,20 @@ struct list_head active_contexts_list; * * The LIBUSB_DEBUG environment variable can be used to enable message logging * at run-time. This environment variable should be set to a log level number, - * which is interpreted the same as the libusb_set_debug() parameter. When this + * which is interpreted the same as the + * libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level) parameter. When this * environment variable is set, the message logging verbosity level is fixed - * and libusb_set_debug() effectively does nothing. + * and libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level) effectively does + * nothing. * * libusb can be compiled without any logging functions, useful for embedded - * systems. In this case, libusb_set_debug() and the LIBUSB_DEBUG environment - * variable have no effects. + * systems. In this case, libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level) + * and the LIBUSB_DEBUG environment variable have no effects. * * libusb can also be compiled with verbose debugging messages always. When * the library is compiled in this way, all messages of all verbosities are - * always logged. libusb_set_debug() and the LIBUSB_DEBUG environment variable - * have no effects. + * always logged. libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level) and + * the LIBUSB_DEBUG environment variable have no effects. * * \section remarks Other remarks * @@ -187,6 +165,20 @@ struct list_head active_contexts_list; /** * \page libusb_caveats Caveats * + * \section fork Fork considerations + * + * libusb is not designed to work across fork() calls. Depending on + * the platform, there may be resources in the parent process that are not + * available to the child (e.g. the hotplug monitor thread on Linux). In + * addition, since the parent and child will share libusb's internal file + * descriptors, using libusb in any way from the child could cause the parent + * process's \ref libusb_context to get into an inconsistent state. + * + * On Linux, libusb's file descriptors will be marked as CLOEXEC, which means + * that it is safe to fork() and exec() without worrying about the child + * process needing to clean up state or having access to these file descriptors. + * Other platforms may not be so forgiving, so consider yourself warned! + * * \section devresets Device resets * * The libusb_reset_device() function allows you to reset a device. If your @@ -291,7 +283,6 @@ if (cfg != desired) * information about the end of the short packet, and the user probably wanted * that surplus data to arrive in the next logical transfer. * - * * \section zlp Zero length packets * * - libusb is able to send a packet of zero length to an endpoint simply by @@ -310,7 +301,7 @@ if (cfg != desired) * developed modules may both use libusb. * * libusb is written to allow for these multiple user scenarios. The two - * "instances" of libusb will not interfere: libusb_set_debug() calls + * "instances" of libusb will not interfere: libusb_set_option() calls * from one user will not affect the same settings for other users, other * users can continue using libusb after one of them calls libusb_exit(), etc. * @@ -435,6 +426,7 @@ if (cfg != desired) * - libusb_set_debug() * - libusb_set_interface_alt_setting() * - libusb_set_iso_packet_lengths() + * - libusb_set_option() * - libusb_setlocale() * - libusb_set_pollfd_notifiers() * - libusb_strerror() @@ -478,6 +470,7 @@ if (cfg != desired) * - \ref libusb_iso_sync_type * - \ref libusb_iso_usage_type * - \ref libusb_log_level + * - \ref libusb_option * - \ref libusb_request_recipient * - \ref libusb_request_type * - \ref libusb_speed @@ -680,7 +673,7 @@ struct discovered_devs *discovered_devs_append( struct libusb_device *usbi_alloc_device(struct libusb_context *ctx, unsigned long session_id) { - size_t priv_size = usbi_backend->device_priv_size; + size_t priv_size = usbi_backend.device_priv_size; struct libusb_device *dev = calloc(1, sizeof(*dev) + priv_size); int r; @@ -824,8 +817,8 @@ ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx, /* backend provides hotplug support */ struct libusb_device *dev; - if (usbi_backend->hotplug_poll) - usbi_backend->hotplug_poll(); + if (usbi_backend.hotplug_poll) + usbi_backend.hotplug_poll(); usbi_mutex_lock(&ctx->usb_devs_lock); list_for_each_entry(dev, &ctx->usb_devs, list, struct libusb_device) { @@ -839,7 +832,7 @@ ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx, usbi_mutex_unlock(&ctx->usb_devs_lock); } else { /* backend does not provide hotplug support */ - r = usbi_backend->get_device_list(ctx, &discdevs); + r = usbi_backend.get_device_list(ctx, &discdevs); } if (r < 0) { @@ -1167,8 +1160,8 @@ void API_EXPORTED libusb_unref_device(libusb_device *dev) libusb_unref_device(dev->parent_dev); - if (usbi_backend->destroy_device) - usbi_backend->destroy_device(dev); + if (usbi_backend.destroy_device) + usbi_backend.destroy_device(dev); if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { /* backend does not support hotplug */ @@ -1242,7 +1235,7 @@ int API_EXPORTED libusb_open(libusb_device *dev, { struct libusb_context *ctx = DEVICE_CTX(dev); struct libusb_device_handle *_dev_handle; - size_t priv_size = usbi_backend->device_handle_priv_size; + size_t priv_size = usbi_backend.device_handle_priv_size; int r; usbi_dbg("open %d.%d", dev->bus_number, dev->device_address); @@ -1265,7 +1258,7 @@ int API_EXPORTED libusb_open(libusb_device *dev, _dev_handle->claimed_interfaces = 0; memset(&_dev_handle->os_priv, 0, priv_size); - r = usbi_backend->open(_dev_handle); + r = usbi_backend.open(_dev_handle); if (r < 0) { usbi_dbg("open %d.%d returns %d", dev->bus_number, dev->device_address, r); libusb_unref_device(dev); @@ -1382,7 +1375,7 @@ static void do_close(struct libusb_context *ctx, list_del(&dev_handle->list); usbi_mutex_unlock(&ctx->open_devs_lock); - usbi_backend->close(dev_handle); + usbi_backend.close(dev_handle); libusb_unref_device(dev_handle->dev); usbi_mutex_destroy(&dev_handle->lock); free(dev_handle); @@ -1491,8 +1484,8 @@ int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev_handle, int r = LIBUSB_ERROR_NOT_SUPPORTED; usbi_dbg(""); - if (usbi_backend->get_configuration) - r = usbi_backend->get_configuration(dev_handle, config); + if (usbi_backend.get_configuration) + r = usbi_backend.get_configuration(dev_handle, config); if (r == LIBUSB_ERROR_NOT_SUPPORTED) { uint8_t tmp = 0; @@ -1567,7 +1560,7 @@ int API_EXPORTED libusb_set_configuration(libusb_device_handle *dev_handle, int configuration) { usbi_dbg("configuration %d", configuration); - return usbi_backend->set_configuration(dev_handle, configuration); + return usbi_backend.set_configuration(dev_handle, configuration); } /** \ingroup libusb_dev @@ -1614,7 +1607,7 @@ int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev_handle, if (dev_handle->claimed_interfaces & (1 << interface_number)) goto out; - r = usbi_backend->claim_interface(dev_handle, interface_number); + r = usbi_backend.claim_interface(dev_handle, interface_number); if (r == 0) dev_handle->claimed_interfaces |= 1 << interface_number; @@ -1657,7 +1650,7 @@ int API_EXPORTED libusb_release_interface(libusb_device_handle *dev_handle, goto out; } - r = usbi_backend->release_interface(dev_handle, interface_number); + r = usbi_backend.release_interface(dev_handle, interface_number); if (r == 0) dev_handle->claimed_interfaces &= ~(1 << interface_number); @@ -1707,7 +1700,7 @@ int API_EXPORTED libusb_set_interface_alt_setting(libusb_device_handle *dev_hand } usbi_mutex_unlock(&dev_handle->lock); - return usbi_backend->set_interface_altsetting(dev_handle, interface_number, + return usbi_backend.set_interface_altsetting(dev_handle, interface_number, alternate_setting); } @@ -1734,7 +1727,7 @@ int API_EXPORTED libusb_clear_halt(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - return usbi_backend->clear_halt(dev_handle, endpoint); + return usbi_backend.clear_halt(dev_handle, endpoint); } /** \ingroup libusb_dev @@ -1762,7 +1755,7 @@ int API_EXPORTED libusb_reset_device(libusb_device_handle *dev_handle) if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - return usbi_backend->reset_device(dev_handle); + return usbi_backend.reset_device(dev_handle); } /** \ingroup libusb_asyncio @@ -1794,8 +1787,8 @@ int API_EXPORTED libusb_alloc_streams(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - if (usbi_backend->alloc_streams) - return usbi_backend->alloc_streams(dev_handle, num_streams, endpoints, + if (usbi_backend.alloc_streams) + return usbi_backend.alloc_streams(dev_handle, num_streams, endpoints, num_endpoints); else return LIBUSB_ERROR_NOT_SUPPORTED; @@ -1821,8 +1814,8 @@ int API_EXPORTED libusb_free_streams(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - if (usbi_backend->free_streams) - return usbi_backend->free_streams(dev_handle, endpoints, + if (usbi_backend.free_streams) + return usbi_backend.free_streams(dev_handle, endpoints, num_endpoints); else return LIBUSB_ERROR_NOT_SUPPORTED; @@ -1859,8 +1852,8 @@ unsigned char * LIBUSB_CALL libusb_dev_mem_alloc(libusb_device_handle *dev_handl if (!dev_handle->dev->attached) return NULL; - if (usbi_backend->dev_mem_alloc) - return usbi_backend->dev_mem_alloc(dev_handle, length); + if (usbi_backend.dev_mem_alloc) + return usbi_backend.dev_mem_alloc(dev_handle, length); else return NULL; } @@ -1876,8 +1869,8 @@ unsigned char * LIBUSB_CALL libusb_dev_mem_alloc(libusb_device_handle *dev_handl int API_EXPORTED libusb_dev_mem_free(libusb_device_handle *dev_handle, unsigned char *buffer, size_t length) { - if (usbi_backend->dev_mem_free) - return usbi_backend->dev_mem_free(dev_handle, buffer, length); + if (usbi_backend.dev_mem_free) + return usbi_backend.dev_mem_free(dev_handle, buffer, length); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -1907,8 +1900,8 @@ int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - if (usbi_backend->kernel_driver_active) - return usbi_backend->kernel_driver_active(dev_handle, interface_number); + if (usbi_backend.kernel_driver_active) + return usbi_backend.kernel_driver_active(dev_handle, interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -1942,8 +1935,8 @@ int API_EXPORTED libusb_detach_kernel_driver(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - if (usbi_backend->detach_kernel_driver) - return usbi_backend->detach_kernel_driver(dev_handle, interface_number); + if (usbi_backend.detach_kernel_driver) + return usbi_backend.detach_kernel_driver(dev_handle, interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -1976,8 +1969,8 @@ int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev_handle, if (!dev_handle->dev->attached) return LIBUSB_ERROR_NO_DEVICE; - if (usbi_backend->attach_kernel_driver) - return usbi_backend->attach_kernel_driver(dev_handle, interface_number); + if (usbi_backend.attach_kernel_driver) + return usbi_backend.attach_kernel_driver(dev_handle, interface_number); else return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -2007,7 +2000,7 @@ int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev_handle, int API_EXPORTED libusb_set_auto_detach_kernel_driver( libusb_device_handle *dev_handle, int enable) { - if (!(usbi_backend->caps & USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)) + if (!(usbi_backend.caps & USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)) return LIBUSB_ERROR_NOT_SUPPORTED; dev_handle->auto_detach_kernel_driver = enable; @@ -2015,37 +2008,100 @@ int API_EXPORTED libusb_set_auto_detach_kernel_driver( } /** \ingroup libusb_lib - * Set log message verbosity. - * - * The default level is LIBUSB_LOG_LEVEL_NONE, which means no messages are ever - * printed. If you choose to increase the message verbosity level, ensure - * that your application does not close the stdout/stderr file descriptors. + * \deprecated Use libusb_set_option() instead using the + * \ref LIBUSB_OPTION_LOG_LEVEL option. + */ +void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) +{ +#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) + USBI_GET_CONTEXT(ctx); + if (!ctx->debug_fixed) { + level = CLAMP(level, LIBUSB_LOG_LEVEL_NONE, LIBUSB_LOG_LEVEL_DEBUG); + ctx->debug = (enum libusb_log_level)level; + } +#else + UNUSED(ctx); + UNUSED(level); +#endif +} + +/** \ingroup libusb_lib + * Set an option in the library. * - * You are advised to use level LIBUSB_LOG_LEVEL_WARNING. libusb is conservative - * with its message logging and most of the time, will only log messages that - * explain error conditions and other oddities. This will help you debug - * your software. + * Use this function to configure a specific option within the library. * - * If the LIBUSB_DEBUG environment variable was set when libusb was - * initialized, this function does nothing: the message verbosity is fixed - * to the value in the environment variable. + * Some options require one or more arguments to be provided. Consult each + * option's documentation for specific requirements. * - * If libusb was compiled without any message logging, this function does - * nothing: you'll never get any messages. + * Since version 1.0.22, \ref LIBUSB_API_VERSION >= 0x01000106 * - * If libusb was compiled with verbose debug message logging, this function - * does nothing: you'll always get messages from all levels. + * \param ctx context on which to operate + * \param option which option to set + * \param ... any required arguments for the specified option * - * \param ctx the context to operate on, or NULL for the default context - * \param level debug level to set + * \returns LIBUSB_SUCCESS on success + * \returns LIBUSB_ERROR_INVALID_PARAM if the option or arguments are invalid + * \returns LIBUSB_ERROR_NOT_SUPPORTED if the option is valid but not supported + * on this platform */ -void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) +int API_EXPORTED libusb_set_option(libusb_context *ctx, + enum libusb_option option, ...) { + int arg, r = LIBUSB_SUCCESS; + va_list ap; + USBI_GET_CONTEXT(ctx); - if (!ctx->debug_fixed) - ctx->debug = level; + + va_start(ap, option); + switch (option) { + case LIBUSB_OPTION_LOG_LEVEL: + arg = va_arg(ap, int); + if (arg < LIBUSB_LOG_LEVEL_NONE || arg > LIBUSB_LOG_LEVEL_DEBUG) { + r = LIBUSB_ERROR_INVALID_PARAM; + break; + } +#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) + if (!ctx->debug_fixed) + ctx->debug = (enum libusb_log_level)arg; +#endif + break; + + /* Handle all backend-specific options here */ + case LIBUSB_OPTION_USE_USBDK: + if (usbi_backend.set_option) + r = usbi_backend.set_option(ctx, option, ap); + else + r = LIBUSB_ERROR_NOT_SUPPORTED; + break; + + default: + r = LIBUSB_ERROR_INVALID_PARAM; + } + va_end(ap); + + return r; } +#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) +/* returns the log level as defined in the LIBUSB_DEBUG environment variable. + * if LIBUSB_DEBUG is not present or not a number, returns LIBUSB_LOG_LEVEL_NONE. + * value is clamped to ensure it is within the valid range of possibilities. + */ +static enum libusb_log_level get_env_debug_level(void) +{ + const char *dbg = getenv("LIBUSB_DEBUG"); + enum libusb_log_level level; + if (dbg) { + int dbg_level = atoi(dbg); + dbg_level = CLAMP(dbg_level, LIBUSB_LOG_LEVEL_NONE, LIBUSB_LOG_LEVEL_DEBUG); + level = (enum libusb_log_level)dbg_level; + } else { + level = LIBUSB_LOG_LEVEL_NONE; + } + return level; +} +#endif + /** \ingroup libusb_lib * Initialize libusb. This function must be called before calling any other * libusb function. @@ -2062,7 +2118,7 @@ void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) int API_EXPORTED libusb_init(libusb_context **context) { struct libusb_device *dev, *next; - char *dbg = getenv("LIBUSB_DEBUG"); + size_t priv_size = usbi_backend.context_priv_size; struct libusb_context *ctx; static int first_init = 1; int r = 0; @@ -2070,7 +2126,7 @@ int API_EXPORTED libusb_init(libusb_context **context) usbi_mutex_static_lock(&default_context_lock); if (!timestamp_origin.tv_sec) { - usbi_backend->clock_gettime(USBI_CLOCK_REALTIME, ×tamp_origin); + usbi_backend.clock_gettime(USBI_CLOCK_REALTIME, ×tamp_origin); } if (!context && usbi_default_context) { @@ -2080,22 +2136,18 @@ int API_EXPORTED libusb_init(libusb_context **context) return 0; } - ctx = calloc(1, sizeof(*ctx)); + ctx = calloc(1, sizeof(*ctx) + priv_size); if (!ctx) { r = LIBUSB_ERROR_NO_MEM; goto err_unlock; } -#ifdef ENABLE_DEBUG_LOGGING - ctx->debug = LIBUSB_LOG_LEVEL_DEBUG; +#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) + ctx->debug = get_env_debug_level(); + if (ctx->debug != LIBUSB_LOG_LEVEL_NONE) + ctx->debug_fixed = 1; #endif - if (dbg) { - ctx->debug = atoi(dbg); - if (ctx->debug) - ctx->debug_fixed = 1; - } - /* default context should be initialized before calling usbi_dbg */ if (!usbi_default_context) { usbi_default_context = ctx; @@ -2112,6 +2164,7 @@ int API_EXPORTED libusb_init(libusb_context **context) list_init(&ctx->usb_devs); list_init(&ctx->open_devs); list_init(&ctx->hotplug_cbs); + ctx->next_hotplug_cb_handle = 1; usbi_mutex_static_lock(&active_contexts_lock); if (first_init) { @@ -2121,8 +2174,8 @@ int API_EXPORTED libusb_init(libusb_context **context) list_add (&ctx->list, &active_contexts_list); usbi_mutex_static_unlock(&active_contexts_lock); - if (usbi_backend->init) { - r = usbi_backend->init(ctx); + if (usbi_backend.init) { + r = usbi_backend.init(ctx); if (r) goto err_free_ctx; } @@ -2139,8 +2192,8 @@ int API_EXPORTED libusb_init(libusb_context **context) return 0; err_backend_exit: - if (usbi_backend->exit) - usbi_backend->exit(); + if (usbi_backend.exit) + usbi_backend.exit(ctx); err_free_ctx: if (ctx == usbi_default_context) { usbi_default_context = NULL; @@ -2200,7 +2253,7 @@ void API_EXPORTED libusb_exit(struct libusb_context *ctx) usbi_mutex_static_unlock(&active_contexts_lock); if (libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { - usbi_hotplug_deregister_all(ctx); + usbi_hotplug_deregister(ctx, 1); /* * Ensure any pending unplug events are read from the hotplug @@ -2230,8 +2283,8 @@ void API_EXPORTED libusb_exit(struct libusb_context *ctx) usbi_warn(ctx, "application left some devices open"); usbi_io_exit(ctx); - if (usbi_backend->exit) - usbi_backend->exit(); + if (usbi_backend.exit) + usbi_backend.exit(ctx); usbi_mutex_destroy(&ctx->open_devs_lock); usbi_mutex_destroy(&ctx->usb_devs_lock); @@ -2253,15 +2306,17 @@ int API_EXPORTED libusb_has_capability(uint32_t capability) case LIBUSB_CAP_HAS_CAPABILITY: return 1; case LIBUSB_CAP_HAS_HOTPLUG: - return !(usbi_backend->get_device_list); + return !(usbi_backend.get_device_list); case LIBUSB_CAP_HAS_HID_ACCESS: - return (usbi_backend->caps & USBI_CAP_HAS_HID_ACCESS); + return (usbi_backend.caps & USBI_CAP_HAS_HID_ACCESS); case LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER: - return (usbi_backend->caps & USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER); + return (usbi_backend.caps & USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER); } return 0; } +#ifdef ENABLE_LOGGING + /* this is defined in libusbi.h if needed */ #ifdef LIBUSB_PRINTF_WIN32 /* @@ -2301,10 +2356,9 @@ int usbi_vsnprintf(char *str, size_t size, const char *format, va_list ap) return ret; } -#endif +#endif /* LIBUSB_PRINTF_WIN32 */ -static void usbi_log_str(struct libusb_context *ctx, - enum libusb_log_level level, const char * str) +static void usbi_log_str(enum libusb_log_level level, const char *str) { #if defined(USE_SYSTEM_LOGGING_FACILITY) #if defined(OS_WINDOWS) @@ -2317,18 +2371,20 @@ static void usbi_log_str(struct libusb_context *ctx, #elif defined(__ANDROID__) int priority = ANDROID_LOG_UNKNOWN; switch (level) { - case LIBUSB_LOG_LEVEL_INFO: priority = ANDROID_LOG_INFO; break; - case LIBUSB_LOG_LEVEL_WARNING: priority = ANDROID_LOG_WARN; break; + case LIBUSB_LOG_LEVEL_NONE: return; case LIBUSB_LOG_LEVEL_ERROR: priority = ANDROID_LOG_ERROR; break; + case LIBUSB_LOG_LEVEL_WARNING: priority = ANDROID_LOG_WARN; break; + case LIBUSB_LOG_LEVEL_INFO: priority = ANDROID_LOG_INFO; break; case LIBUSB_LOG_LEVEL_DEBUG: priority = ANDROID_LOG_DEBUG; break; } __android_log_write(priority, "libusb", str); #elif defined(HAVE_SYSLOG_FUNC) int syslog_level = LOG_INFO; switch (level) { - case LIBUSB_LOG_LEVEL_INFO: syslog_level = LOG_INFO; break; - case LIBUSB_LOG_LEVEL_WARNING: syslog_level = LOG_WARNING; break; + case LIBUSB_LOG_LEVEL_NONE: return; case LIBUSB_LOG_LEVEL_ERROR: syslog_level = LOG_ERR; break; + case LIBUSB_LOG_LEVEL_WARNING: syslog_level = LOG_WARNING; break; + case LIBUSB_LOG_LEVEL_INFO: syslog_level = LOG_INFO; break; case LIBUSB_LOG_LEVEL_DEBUG: syslog_level = LOG_DEBUG; break; } syslog(syslog_level, "%s", str); @@ -2339,14 +2395,13 @@ static void usbi_log_str(struct libusb_context *ctx, #else fputs(str, stderr); #endif /* USE_SYSTEM_LOGGING_FACILITY */ - UNUSED(ctx); UNUSED(level); } void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, const char *function, const char *format, va_list args) { - const char *prefix = ""; + const char *prefix; char buf[USBI_MAX_LOG_LEN]; struct timespec now; int global_debug, header_len, text_len; @@ -2356,18 +2411,15 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, global_debug = 1; UNUSED(ctx); #else - int ctx_level = 0; + enum libusb_log_level ctx_level = LIBUSB_LOG_LEVEL_NONE; USBI_GET_CONTEXT(ctx); - if (ctx) { + if (ctx) ctx_level = ctx->debug; - } else { - char *dbg = getenv("LIBUSB_DEBUG"); - if (dbg) - ctx_level = atoi(dbg); - } - global_debug = (ctx_level == LIBUSB_LOG_LEVEL_DEBUG); - if (!ctx_level) + else + ctx_level = get_env_debug_level(); + + if (ctx_level == LIBUSB_LOG_LEVEL_NONE) return; if (level == LIBUSB_LOG_LEVEL_WARNING && ctx_level < LIBUSB_LOG_LEVEL_WARNING) return; @@ -2375,13 +2427,15 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, return; if (level == LIBUSB_LOG_LEVEL_DEBUG && ctx_level < LIBUSB_LOG_LEVEL_DEBUG) return; + + global_debug = (ctx_level == LIBUSB_LOG_LEVEL_DEBUG); #endif - usbi_backend->clock_gettime(USBI_CLOCK_REALTIME, &now); + usbi_backend.clock_gettime(USBI_CLOCK_REALTIME, &now); if ((global_debug) && (!has_debug_header_been_displayed)) { has_debug_header_been_displayed = 1; - usbi_log_str(ctx, LIBUSB_LOG_LEVEL_DEBUG, "[timestamp] [threadID] facility level [function call] " USBI_LOG_LINE_END); - usbi_log_str(ctx, LIBUSB_LOG_LEVEL_DEBUG, "--------------------------------------------------------------------------------" USBI_LOG_LINE_END); + usbi_log_str(LIBUSB_LOG_LEVEL_DEBUG, "[timestamp] [threadID] facility level [function call] " USBI_LOG_LINE_END); + usbi_log_str(LIBUSB_LOG_LEVEL_DEBUG, "--------------------------------------------------------------------------------" USBI_LOG_LINE_END); } if (now.tv_nsec < timestamp_origin.tv_nsec) { now.tv_sec--; @@ -2391,20 +2445,20 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, now.tv_nsec -= timestamp_origin.tv_nsec; switch (level) { - case LIBUSB_LOG_LEVEL_INFO: - prefix = "info"; + case LIBUSB_LOG_LEVEL_NONE: + return; + case LIBUSB_LOG_LEVEL_ERROR: + prefix = "error"; break; case LIBUSB_LOG_LEVEL_WARNING: prefix = "warning"; break; - case LIBUSB_LOG_LEVEL_ERROR: - prefix = "error"; + case LIBUSB_LOG_LEVEL_INFO: + prefix = "info"; break; case LIBUSB_LOG_LEVEL_DEBUG: prefix = "debug"; break; - case LIBUSB_LOG_LEVEL_NONE: - return; default: prefix = "unknown"; break; @@ -2439,7 +2493,7 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, } strcpy(buf + header_len + text_len, USBI_LOG_LINE_END); - usbi_log_str(ctx, level, buf); + usbi_log_str(level, buf); } void usbi_log(struct libusb_context *ctx, enum libusb_log_level level, @@ -2452,6 +2506,8 @@ void usbi_log(struct libusb_context *ctx, enum libusb_log_level level, va_end (args); } +#endif /* ENABLE_LOGGING */ + /** \ingroup libusb_misc * Returns a constant NULL-terminated string with the ASCII name of a libusb * error or transfer status code. The caller must not free() the returned diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/descriptor.c b/vendor/github.com/karalabe/usb/libusb/libusb/descriptor.c similarity index 98% rename from vendor/github.com/karalabe/hid/libusb/libusb/descriptor.c rename to vendor/github.com/karalabe/usb/libusb/libusb/descriptor.c index 4c9435fffe4f..74d6de557eab 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/descriptor.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/descriptor.c @@ -333,7 +333,7 @@ static int parse_interface(libusb_context *ctx, goto err; if (r == 0) { ifp->bNumEndpoints = (uint8_t)i; - break;; + break; } buffer += r; @@ -513,7 +513,7 @@ int usbi_device_cache_descriptor(libusb_device *dev) { int r, host_endian = 0; - r = usbi_backend->get_device_descriptor(dev, (unsigned char *) &dev->device_descriptor, + r = usbi_backend.get_device_descriptor(dev, (unsigned char *) &dev->device_descriptor, &host_endian); if (r < 0) return r; @@ -572,7 +572,7 @@ int API_EXPORTED libusb_get_active_config_descriptor(libusb_device *dev, int host_endian = 0; int r; - r = usbi_backend->get_active_config_descriptor(dev, tmp, + r = usbi_backend.get_active_config_descriptor(dev, tmp, LIBUSB_DT_CONFIG_SIZE, &host_endian); if (r < 0) return r; @@ -587,7 +587,7 @@ int API_EXPORTED libusb_get_active_config_descriptor(libusb_device *dev, if (!buf) return LIBUSB_ERROR_NO_MEM; - r = usbi_backend->get_active_config_descriptor(dev, buf, + r = usbi_backend.get_active_config_descriptor(dev, buf, _config.wTotalLength, &host_endian); if (r >= 0) r = raw_desc_to_config(dev->ctx, buf, r, host_endian, config); @@ -625,7 +625,7 @@ int API_EXPORTED libusb_get_config_descriptor(libusb_device *dev, if (config_index >= dev->num_configurations) return LIBUSB_ERROR_NOT_FOUND; - r = usbi_backend->get_config_descriptor(dev, config_index, tmp, + r = usbi_backend.get_config_descriptor(dev, config_index, tmp, LIBUSB_DT_CONFIG_SIZE, &host_endian); if (r < 0) return r; @@ -640,7 +640,7 @@ int API_EXPORTED libusb_get_config_descriptor(libusb_device *dev, if (!buf) return LIBUSB_ERROR_NO_MEM; - r = usbi_backend->get_config_descriptor(dev, config_index, buf, + r = usbi_backend.get_config_descriptor(dev, config_index, buf, _config.wTotalLength, &host_endian); if (r >= 0) r = raw_desc_to_config(dev->ctx, buf, r, host_endian, config); @@ -663,7 +663,7 @@ int usbi_get_config_index_by_value(struct libusb_device *dev, for (i = 0; i < dev->num_configurations; i++) { unsigned char tmp[6]; int host_endian; - int r = usbi_backend->get_config_descriptor(dev, i, tmp, sizeof(tmp), + int r = usbi_backend.get_config_descriptor(dev, i, tmp, sizeof(tmp), &host_endian); if (r < 0) { *idx = -1; @@ -702,8 +702,8 @@ int API_EXPORTED libusb_get_config_descriptor_by_value(libusb_device *dev, int r, idx, host_endian; unsigned char *buf = NULL; - if (usbi_backend->get_config_descriptor_by_value) { - r = usbi_backend->get_config_descriptor_by_value(dev, + if (usbi_backend.get_config_descriptor_by_value) { + r = usbi_backend.get_config_descriptor_by_value(dev, bConfigurationValue, &buf, &host_endian); if (r < 0) return r; @@ -1176,7 +1176,8 @@ int API_EXPORTED libusb_get_string_descriptor_ascii(libusb_device_handle *dev_ha if (tbuf[0] > r) return LIBUSB_ERROR_IO; - for (di = 0, si = 2; si < tbuf[0]; si += 2) { + di = 0; + for (si = 2; si < tbuf[0]; si += 2) { if (di >= (length - 1)) break; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/hotplug.c b/vendor/github.com/karalabe/usb/libusb/libusb/hotplug.c similarity index 76% rename from vendor/github.com/karalabe/hid/libusb/libusb/hotplug.c rename to vendor/github.com/karalabe/usb/libusb/libusb/hotplug.c index bbfd6e79a1a9..a4320bc42e59 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/hotplug.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/hotplug.c @@ -154,36 +154,30 @@ int main (void) { \endcode */ -static int usbi_hotplug_match_cb (struct libusb_context *ctx, +static int usbi_hotplug_match_cb(struct libusb_context *ctx, struct libusb_device *dev, libusb_hotplug_event event, struct libusb_hotplug_callback *hotplug_cb) { - /* Handle lazy deregistration of callback */ - if (hotplug_cb->needs_free) { - /* Free callback */ - return 1; - } - - if (!(hotplug_cb->events & event)) { + if (!(hotplug_cb->flags & event)) { return 0; } - if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->vendor_id && + if ((hotplug_cb->flags & USBI_HOTPLUG_VENDOR_ID_VALID) && hotplug_cb->vendor_id != dev->device_descriptor.idVendor) { return 0; } - if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->product_id && + if ((hotplug_cb->flags & USBI_HOTPLUG_PRODUCT_ID_VALID) && hotplug_cb->product_id != dev->device_descriptor.idProduct) { return 0; } - if (LIBUSB_HOTPLUG_MATCH_ANY != hotplug_cb->dev_class && + if ((hotplug_cb->flags & USBI_HOTPLUG_DEV_CLASS_VALID) && hotplug_cb->dev_class != dev->device_descriptor.bDeviceClass) { return 0; } - return hotplug_cb->cb (ctx, dev, event, hotplug_cb->user_data); + return hotplug_cb->cb(ctx, dev, event, hotplug_cb->user_data); } void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev, @@ -195,8 +189,13 @@ void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev, usbi_mutex_lock(&ctx->hotplug_cbs_lock); list_for_each_entry_safe(hotplug_cb, next, &ctx->hotplug_cbs, list, struct libusb_hotplug_callback) { + if (hotplug_cb->flags & USBI_HOTPLUG_NEEDS_FREE) { + /* process deregistration in usbi_hotplug_deregister() */ + continue; + } + usbi_mutex_unlock(&ctx->hotplug_cbs_lock); - ret = usbi_hotplug_match_cb (ctx, dev, event, hotplug_cb); + ret = usbi_hotplug_match_cb(ctx, dev, event, hotplug_cb); usbi_mutex_lock(&ctx->hotplug_cbs_lock); if (ret) { @@ -206,15 +205,13 @@ void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev, } usbi_mutex_unlock(&ctx->hotplug_cbs_lock); - - /* the backend is expected to call the callback for each active transfer */ } void usbi_hotplug_notification(struct libusb_context *ctx, struct libusb_device *dev, libusb_hotplug_event event) { int pending_events; - libusb_hotplug_message *message = calloc(1, sizeof(*message)); + struct libusb_hotplug_message *message = calloc(1, sizeof(*message)); if (!message) { usbi_err(ctx, "error allocating hotplug message"); @@ -240,59 +237,70 @@ int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx, libusb_hotplug_callback_fn cb_fn, void *user_data, libusb_hotplug_callback_handle *callback_handle) { - libusb_hotplug_callback *new_callback; - static int handle_id = 1; - - /* check for hotplug support */ - if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { - return LIBUSB_ERROR_NOT_SUPPORTED; - } + struct libusb_hotplug_callback *new_callback; /* check for sane values */ - if ((LIBUSB_HOTPLUG_MATCH_ANY != vendor_id && (~0xffff & vendor_id)) || + if ((!events || (~(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT) & events)) || + (flags && (~LIBUSB_HOTPLUG_ENUMERATE & flags)) || + (LIBUSB_HOTPLUG_MATCH_ANY != vendor_id && (~0xffff & vendor_id)) || (LIBUSB_HOTPLUG_MATCH_ANY != product_id && (~0xffff & product_id)) || (LIBUSB_HOTPLUG_MATCH_ANY != dev_class && (~0xff & dev_class)) || !cb_fn) { return LIBUSB_ERROR_INVALID_PARAM; } + /* check for hotplug support */ + if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { + return LIBUSB_ERROR_NOT_SUPPORTED; + } + USBI_GET_CONTEXT(ctx); - new_callback = (libusb_hotplug_callback *)calloc(1, sizeof (*new_callback)); + new_callback = calloc(1, sizeof(*new_callback)); if (!new_callback) { return LIBUSB_ERROR_NO_MEM; } - new_callback->ctx = ctx; - new_callback->vendor_id = vendor_id; - new_callback->product_id = product_id; - new_callback->dev_class = dev_class; - new_callback->flags = flags; - new_callback->events = events; + new_callback->flags = (uint8_t)events; + if (LIBUSB_HOTPLUG_MATCH_ANY != vendor_id) { + new_callback->flags |= USBI_HOTPLUG_VENDOR_ID_VALID; + new_callback->vendor_id = (uint16_t)vendor_id; + } + if (LIBUSB_HOTPLUG_MATCH_ANY != product_id) { + new_callback->flags |= USBI_HOTPLUG_PRODUCT_ID_VALID; + new_callback->product_id = (uint16_t)product_id; + } + if (LIBUSB_HOTPLUG_MATCH_ANY != dev_class) { + new_callback->flags |= USBI_HOTPLUG_DEV_CLASS_VALID; + new_callback->dev_class = (uint8_t)dev_class; + } new_callback->cb = cb_fn; new_callback->user_data = user_data; - new_callback->needs_free = 0; usbi_mutex_lock(&ctx->hotplug_cbs_lock); - /* protect the handle by the context hotplug lock. it doesn't matter if the same handle - * is used for different contexts only that the handle is unique for this context */ - new_callback->handle = handle_id++; + /* protect the handle by the context hotplug lock */ + new_callback->handle = ctx->next_hotplug_cb_handle++; + + /* handle the unlikely case of overflow */ + if (ctx->next_hotplug_cb_handle < 0) + ctx->next_hotplug_cb_handle = 1; list_add(&new_callback->list, &ctx->hotplug_cbs); usbi_mutex_unlock(&ctx->hotplug_cbs_lock); + usbi_dbg("new hotplug cb %p with handle %d", new_callback, new_callback->handle); - if (flags & LIBUSB_HOTPLUG_ENUMERATE) { - int i, len; + if ((flags & LIBUSB_HOTPLUG_ENUMERATE) && (events & LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED)) { + ssize_t i, len; struct libusb_device **devs; - len = (int) libusb_get_device_list(ctx, &devs); + len = libusb_get_device_list(ctx, &devs); if (len < 0) { libusb_hotplug_deregister_callback(ctx, new_callback->handle); - return len; + return (int)len; } for (i = 0; i < len; i++) { @@ -311,10 +319,11 @@ int API_EXPORTED libusb_hotplug_register_callback(libusb_context *ctx, return LIBUSB_SUCCESS; } -void API_EXPORTED libusb_hotplug_deregister_callback (struct libusb_context *ctx, +void API_EXPORTED libusb_hotplug_deregister_callback(struct libusb_context *ctx, libusb_hotplug_callback_handle callback_handle) { struct libusb_hotplug_callback *hotplug_cb; + int deregistered = 0; /* check for hotplug support */ if (!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { @@ -323,28 +332,42 @@ void API_EXPORTED libusb_hotplug_deregister_callback (struct libusb_context *ctx USBI_GET_CONTEXT(ctx); + usbi_dbg("deregister hotplug cb %d", callback_handle); + usbi_mutex_lock(&ctx->hotplug_cbs_lock); - list_for_each_entry(hotplug_cb, &ctx->hotplug_cbs, list, - struct libusb_hotplug_callback) { + list_for_each_entry(hotplug_cb, &ctx->hotplug_cbs, list, struct libusb_hotplug_callback) { if (callback_handle == hotplug_cb->handle) { /* Mark this callback for deregistration */ - hotplug_cb->needs_free = 1; + hotplug_cb->flags |= USBI_HOTPLUG_NEEDS_FREE; + deregistered = 1; } } usbi_mutex_unlock(&ctx->hotplug_cbs_lock); - usbi_hotplug_notification(ctx, NULL, 0); + if (deregistered) { + int pending_events; + + usbi_mutex_lock(&ctx->event_data_lock); + pending_events = usbi_pending_events(ctx); + ctx->event_flags |= USBI_EVENT_HOTPLUG_CB_DEREGISTERED; + if (!pending_events) + usbi_signal_event(ctx); + usbi_mutex_unlock(&ctx->event_data_lock); + } } -void usbi_hotplug_deregister_all(struct libusb_context *ctx) { +void usbi_hotplug_deregister(struct libusb_context *ctx, int forced) +{ struct libusb_hotplug_callback *hotplug_cb, *next; usbi_mutex_lock(&ctx->hotplug_cbs_lock); - list_for_each_entry_safe(hotplug_cb, next, &ctx->hotplug_cbs, list, - struct libusb_hotplug_callback) { - list_del(&hotplug_cb->list); - free(hotplug_cb); + list_for_each_entry_safe(hotplug_cb, next, &ctx->hotplug_cbs, list, struct libusb_hotplug_callback) { + if (forced || (hotplug_cb->flags & USBI_HOTPLUG_NEEDS_FREE)) { + usbi_dbg("freeing hotplug cb %p with handle %d", hotplug_cb, + hotplug_cb->handle); + list_del(&hotplug_cb->list); + free(hotplug_cb); + } } - usbi_mutex_unlock(&ctx->hotplug_cbs_lock); } diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/hotplug.h b/vendor/github.com/karalabe/usb/libusb/libusb/hotplug.h similarity index 65% rename from vendor/github.com/karalabe/hid/libusb/libusb/hotplug.h rename to vendor/github.com/karalabe/usb/libusb/libusb/hotplug.h index 2bec81b06c42..dbadbcb93d54 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/hotplug.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/hotplug.h @@ -19,12 +19,34 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#if !defined(USBI_HOTPLUG_H) +#ifndef USBI_HOTPLUG_H #define USBI_HOTPLUG_H -#ifndef LIBUSBI_H #include "libusbi.h" -#endif + +enum usbi_hotplug_flags { + /* This callback is interested in device arrivals */ + USBI_HOTPLUG_DEVICE_ARRIVED = LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, + + /* This callback is interested in device removals */ + USBI_HOTPLUG_DEVICE_LEFT = LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT, + + /* IMPORTANT: The values for the below entries must start *after* + * the highest value of the above entries!!! + */ + + /* The vendor_id field is valid for matching */ + USBI_HOTPLUG_VENDOR_ID_VALID = (1 << 3), + + /* The product_id field is valid for matching */ + USBI_HOTPLUG_PRODUCT_ID_VALID = (1 << 4), + + /* The dev_class field is valid for matching */ + USBI_HOTPLUG_DEV_CLASS_VALID = (1 << 5), + + /* This callback has been unregistered and needs to be freed */ + USBI_HOTPLUG_NEEDS_FREE = (1 << 6), +}; /** \ingroup hotplug * The hotplug callback structure. The user populates this structure with @@ -32,23 +54,17 @@ * to receive notification of hotplug events. */ struct libusb_hotplug_callback { - /** Context this callback is associated with */ - struct libusb_context *ctx; - - /** Vendor ID to match or LIBUSB_HOTPLUG_MATCH_ANY */ - int vendor_id; - - /** Product ID to match or LIBUSB_HOTPLUG_MATCH_ANY */ - int product_id; + /** Flags that control how this callback behaves */ + uint8_t flags; - /** Device class to match or LIBUSB_HOTPLUG_MATCH_ANY */ - int dev_class; + /** Vendor ID to match (if flags says this is valid) */ + uint16_t vendor_id; - /** Hotplug callback flags */ - libusb_hotplug_flag flags; + /** Product ID to match (if flags says this is valid) */ + uint16_t product_id; - /** Event(s) that will trigger this callback */ - libusb_hotplug_event events; + /** Device class to match (if flags says this is valid) */ + uint8_t dev_class; /** Callback function to invoke for matching event/device */ libusb_hotplug_callback_fn cb; @@ -59,15 +75,10 @@ struct libusb_hotplug_callback { /** User data that will be passed to the callback function */ void *user_data; - /** Callback is marked for deletion */ - int needs_free; - /** List this callback is registered in (ctx->hotplug_cbs) */ struct list_head list; }; -typedef struct libusb_hotplug_callback libusb_hotplug_callback; - struct libusb_hotplug_message { /** The hotplug event that occurred */ libusb_hotplug_event event; @@ -79,9 +90,7 @@ struct libusb_hotplug_message { struct list_head list; }; -typedef struct libusb_hotplug_message libusb_hotplug_message; - -void usbi_hotplug_deregister_all(struct libusb_context *ctx); +void usbi_hotplug_deregister(struct libusb_context *ctx, int forced); void usbi_hotplug_match(struct libusb_context *ctx, struct libusb_device *dev, libusb_hotplug_event event); void usbi_hotplug_notification(struct libusb_context *ctx, struct libusb_device *dev, diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/io.c b/vendor/github.com/karalabe/usb/libusb/libusb/io.c similarity index 98% rename from vendor/github.com/karalabe/hid/libusb/libusb/io.c rename to vendor/github.com/karalabe/usb/libusb/libusb/io.c index eb1eabf1cb74..a03bfaae1a9e 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/io.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/io.c @@ -1144,8 +1144,8 @@ int usbi_io_init(struct libusb_context *ctx) goto err_close_pipe; #ifdef USBI_TIMERFD_AVAILABLE - ctx->timerfd = timerfd_create(usbi_backend->get_timerfd_clockid(), - TFD_NONBLOCK); + ctx->timerfd = timerfd_create(usbi_backend.get_timerfd_clockid(), + TFD_NONBLOCK | TFD_CLOEXEC); if (ctx->timerfd >= 0) { usbi_dbg("using timerfd for timeouts"); r = usbi_add_pollfd(ctx, ctx->timerfd, POLLIN); @@ -1205,10 +1205,12 @@ static int calculate_timeout(struct usbi_transfer *transfer) unsigned int timeout = USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer)->timeout; - if (!timeout) + if (!timeout) { + timerclear(&transfer->timeout); return 0; + } - r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, ¤t_time); + r = usbi_backend.clock_gettime(USBI_CLOCK_MONOTONIC, ¤t_time); if (r < 0) { usbi_err(ITRANSFER_CTX(transfer), "failed to read monotonic clock, errno=%d", errno); @@ -1255,7 +1257,7 @@ struct libusb_transfer * LIBUSB_CALL libusb_alloc_transfer( int iso_packets) { struct libusb_transfer *transfer; - size_t os_alloc_size = usbi_backend->transfer_priv_size; + size_t os_alloc_size = usbi_backend.transfer_priv_size; size_t alloc_size = sizeof(struct usbi_transfer) + sizeof(struct libusb_transfer) + (sizeof(struct libusb_iso_packet_descriptor) * iso_packets) @@ -1526,7 +1528,7 @@ int API_EXPORTED libusb_submit_transfer(struct libusb_transfer *transfer) */ usbi_mutex_unlock(&ctx->flying_transfers_lock); - r = usbi_backend->submit_transfer(itransfer); + r = usbi_backend.submit_transfer(itransfer); if (r == LIBUSB_SUCCESS) { itransfer->state_flags |= USBI_TRANSFER_IN_FLIGHT; /* keep a reference to this device */ @@ -1567,7 +1569,7 @@ int API_EXPORTED libusb_cancel_transfer(struct libusb_transfer *transfer) r = LIBUSB_ERROR_NOT_FOUND; goto out; } - r = usbi_backend->cancel_transfer(itransfer); + r = usbi_backend.cancel_transfer(itransfer); if (r < 0) { if (r != LIBUSB_ERROR_NOT_FOUND && r != LIBUSB_ERROR_NO_DEVICE) @@ -2004,7 +2006,7 @@ static int handle_timeouts_locked(struct libusb_context *ctx) return 0; /* get current time */ - r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &systime_ts); + r = usbi_backend.clock_gettime(USBI_CLOCK_MONOTONIC, &systime_ts); if (r < 0) return r; @@ -2077,7 +2079,6 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) struct pollfd *fds = NULL; int i = -1; int timeout_ms; - int special_event; /* prevent attempts to recursively handle events (e.g. calling into * libusb_handle_events() from within a hotplug or transfer callback) */ @@ -2146,32 +2147,30 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) if (tv->tv_usec % 1000) timeout_ms++; -redo_poll: usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms); r = usbi_poll(fds, nfds, timeout_ms); usbi_dbg("poll() returned %d", r); if (r == 0) { r = handle_timeouts(ctx); goto done; - } - else if (r == -1 && errno == EINTR) { + } else if (r == -1 && errno == EINTR) { r = LIBUSB_ERROR_INTERRUPTED; goto done; - } - else if (r < 0) { + } else if (r < 0) { usbi_err(ctx, "poll failed %d err=%d", r, errno); r = LIBUSB_ERROR_IO; goto done; } - special_event = 0; - /* fds[0] is always the event pipe */ if (fds[0].revents) { - libusb_hotplug_message *message = NULL; + struct list_head hotplug_msgs; struct usbi_transfer *itransfer; + int hotplug_cb_deregistered = 0; int ret = 0; + list_init(&hotplug_msgs); + usbi_dbg("caught a fish on the event pipe"); /* take the the event data lock while processing events */ @@ -2186,6 +2185,12 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) ctx->event_flags &= ~USBI_EVENT_USER_INTERRUPT; } + if (ctx->event_flags & USBI_EVENT_HOTPLUG_CB_DEREGISTERED) { + usbi_dbg("someone unregistered a hotplug cb"); + ctx->event_flags &= ~USBI_EVENT_HOTPLUG_CB_DEREGISTERED; + hotplug_cb_deregistered = 1; + } + /* check if someone is closing a device */ if (ctx->device_close) usbi_dbg("someone is closing a device"); @@ -2193,9 +2198,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) /* check for any pending hotplug messages */ if (!list_empty(&ctx->hotplug_msgs)) { usbi_dbg("hotplug message received"); - special_event = 1; - message = list_first_entry(&ctx->hotplug_msgs, libusb_hotplug_message, list); - list_del(&message->list); + list_cut(&hotplug_msgs, &ctx->hotplug_msgs); } /* complete any pending transfers */ @@ -2203,7 +2206,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) itransfer = list_first_entry(&ctx->completed_transfers, struct usbi_transfer, completed_list); list_del(&itransfer->completed_list); usbi_mutex_unlock(&ctx->event_data_lock); - ret = usbi_backend->handle_transfer_completion(itransfer); + ret = usbi_backend.handle_transfer_completion(itransfer); if (ret) usbi_err(ctx, "backend handle_transfer_completion failed with error %d", ret); usbi_mutex_lock(&ctx->event_data_lock); @@ -2215,14 +2218,21 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) usbi_mutex_unlock(&ctx->event_data_lock); - /* process the hotplug message, if any */ - if (message) { + if (hotplug_cb_deregistered) + usbi_hotplug_deregister(ctx, 0); + + /* process the hotplug messages, if any */ + while (!list_empty(&hotplug_msgs)) { + struct libusb_hotplug_message *message = + list_first_entry(&hotplug_msgs, struct libusb_hotplug_message, list); + usbi_hotplug_match(ctx, message->device, message->event); /* the device left, dereference the device */ if (LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT == message->event) libusb_unref_device(message->device); + list_del(&message->list); free(message); } @@ -2233,7 +2243,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) } if (0 == --r) - goto handled; + goto done; } #ifdef USBI_TIMERFD_AVAILABLE @@ -2242,7 +2252,6 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) /* timerfd indicates that a timeout has expired */ int ret; usbi_dbg("timerfd triggered"); - special_event = 1; ret = handle_timerfd_trigger(ctx); if (ret < 0) { @@ -2252,20 +2261,14 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) } if (0 == --r) - goto handled; + goto done; } #endif - r = usbi_backend->handle_events(ctx, fds + internal_nfds, nfds - internal_nfds, r); + r = usbi_backend.handle_events(ctx, fds + internal_nfds, nfds - internal_nfds, r); if (r) usbi_err(ctx, "backend handle_events failed with error %d", r); -handled: - if (r == 0 && special_event) { - timeout_ms = 0; - goto redo_poll; - } - done: usbi_end_event_handling(ctx); return r; @@ -2583,7 +2586,7 @@ int API_EXPORTED libusb_get_next_timeout(libusb_context *ctx, return 0; } - r = usbi_backend->clock_gettime(USBI_CLOCK_MONOTONIC, &cur_ts); + r = usbi_backend.clock_gettime(USBI_CLOCK_MONOTONIC, &cur_ts); if (r < 0) { usbi_err(ctx, "failed to read monotonic clock, errno=%d", errno); return 0; @@ -2811,7 +2814,7 @@ void usbi_handle_disconnect(struct libusb_device_handle *dev_handle) USBI_TRANSFER_TO_LIBUSB_TRANSFER(to_cancel)); usbi_mutex_lock(&to_cancel->lock); - usbi_backend->clear_transfer_priv(to_cancel); + usbi_backend.clear_transfer_priv(to_cancel); usbi_mutex_unlock(&to_cancel->lock); usbi_handle_transfer_completion(to_cancel, LIBUSB_TRANSFER_NO_DEVICE); } diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/libusb.h b/vendor/github.com/karalabe/usb/libusb/libusb/libusb.h similarity index 96% rename from vendor/github.com/karalabe/hid/libusb/libusb/libusb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/libusb.h index c562690f9afe..430136b2e285 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/libusb.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/libusb.h @@ -54,13 +54,19 @@ typedef unsigned __int32 uint32_t; #include #endif -#if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__) || defined(__HAIKU__) +#if defined(__linux__) || defined(__APPLE__) || defined(__CYGWIN__) || defined(__HAIKU__) #include #endif #include #include +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#define ZERO_SIZED_ARRAY /* [] - valid C99 code */ +#else +#define ZERO_SIZED_ARRAY 0 /* [0] - non-standard, but usually working code */ +#endif + /* 'interface' might be defined as a macro on Windows, so we need to * undefine it so as not to break the current libusb API, because * libusb_config_descriptor has an 'interface' member @@ -79,6 +85,8 @@ typedef unsigned __int32 uint32_t; #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) #define LIBUSB_DEPRECATED_FOR(f) \ __attribute__((deprecated("Use " #f " instead"))) +#elif __GNUC__ >= 3 +#define LIBUSB_DEPRECATED_FOR(f) __attribute__((deprecated)) #else #define LIBUSB_DEPRECATED_FOR(f) #endif /* __GNUC__ */ @@ -141,7 +149,7 @@ typedef unsigned __int32 uint32_t; * Internally, LIBUSB_API_VERSION is defined as follows: * (libusb major << 24) | (libusb minor << 16) | (16 bit incremental) */ -#define LIBUSB_API_VERSION 0x01000105 +#define LIBUSB_API_VERSION 0x01000106 /* The following is kept for compatibility, but will be deprecated in the future */ #define LIBUSBX_API_VERSION LIBUSB_API_VERSION @@ -729,13 +737,7 @@ struct libusb_bos_dev_capability_descriptor { /** Device Capability type */ uint8_t bDevCapabilityType; /** Device Capability data (bLength - 3 bytes) */ - uint8_t dev_capability_data -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + uint8_t dev_capability_data[ZERO_SIZED_ARRAY]; }; /** \ingroup libusb_desc @@ -760,13 +762,7 @@ struct libusb_bos_descriptor { uint8_t bNumDeviceCaps; /** bNumDeviceCap Device Capability Descriptors */ - struct libusb_bos_dev_capability_descriptor *dev_capability -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + struct libusb_bos_dev_capability_descriptor *dev_capability[ZERO_SIZED_ARRAY]; }; /** \ingroup libusb_desc @@ -927,7 +923,7 @@ struct libusb_version { * sessions allows for your program to use two libraries (or dynamically * load two modules) which both independently use libusb. This will prevent * interference between the individual libusb users - for example - * libusb_set_debug() will not affect the other user of the library, and + * libusb_set_option() will not affect the other user of the library, and * libusb_exit() will not destroy resources that the other user is still * using. * @@ -987,6 +983,9 @@ enum libusb_speed { /** The device is operating at super speed (5000MBit/s). */ LIBUSB_SPEED_SUPER = 4, + + /** The device is operating at super speed plus (10000MBit/s). */ + LIBUSB_SPEED_SUPER_PLUS = 5, }; /** \ingroup libusb_dev @@ -1256,13 +1255,7 @@ struct libusb_transfer { int num_iso_packets; /** Isochronous packet descriptors, for isochronous transfers only. */ - struct libusb_iso_packet_descriptor iso_packet_desc -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + struct libusb_iso_packet_descriptor iso_packet_desc[ZERO_SIZED_ARRAY]; }; /** \ingroup libusb_misc @@ -1290,21 +1283,20 @@ enum libusb_capability { * - LIBUSB_LOG_LEVEL_NONE (0) : no messages ever printed by the library (default) * - LIBUSB_LOG_LEVEL_ERROR (1) : error messages are printed to stderr * - LIBUSB_LOG_LEVEL_WARNING (2) : warning and error messages are printed to stderr - * - LIBUSB_LOG_LEVEL_INFO (3) : informational messages are printed to stdout, warning - * and error messages are printed to stderr - * - LIBUSB_LOG_LEVEL_DEBUG (4) : debug and informational messages are printed to stdout, - * warnings and errors to stderr + * - LIBUSB_LOG_LEVEL_INFO (3) : informational messages are printed to stderr + * - LIBUSB_LOG_LEVEL_DEBUG (4) : debug and informational messages are printed to stderr */ enum libusb_log_level { LIBUSB_LOG_LEVEL_NONE = 0, - LIBUSB_LOG_LEVEL_ERROR, - LIBUSB_LOG_LEVEL_WARNING, - LIBUSB_LOG_LEVEL_INFO, - LIBUSB_LOG_LEVEL_DEBUG, + LIBUSB_LOG_LEVEL_ERROR = 1, + LIBUSB_LOG_LEVEL_WARNING = 2, + LIBUSB_LOG_LEVEL_INFO = 3, + LIBUSB_LOG_LEVEL_DEBUG = 4, }; int LIBUSB_CALL libusb_init(libusb_context **ctx); void LIBUSB_CALL libusb_exit(libusb_context *ctx); +LIBUSB_DEPRECATED_FOR(libusb_set_option) void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level); const struct libusb_version * LIBUSB_CALL libusb_get_version(void); int LIBUSB_CALL libusb_has_capability(uint32_t capability); @@ -2001,6 +1993,45 @@ int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx, void LIBUSB_CALL libusb_hotplug_deregister_callback(libusb_context *ctx, libusb_hotplug_callback_handle callback_handle); +/** \ingroup libusb_lib + * Available option values for libusb_set_option(). + */ +enum libusb_option { + /** Set the log message verbosity. + * + * The default level is LIBUSB_LOG_LEVEL_NONE, which means no messages are ever + * printed. If you choose to increase the message verbosity level, ensure + * that your application does not close the stderr file descriptor. + * + * You are advised to use level LIBUSB_LOG_LEVEL_WARNING. libusb is conservative + * with its message logging and most of the time, will only log messages that + * explain error conditions and other oddities. This will help you debug + * your software. + * + * If the LIBUSB_DEBUG environment variable was set when libusb was + * initialized, this function does nothing: the message verbosity is fixed + * to the value in the environment variable. + * + * If libusb was compiled without any message logging, this function does + * nothing: you'll never get any messages. + * + * If libusb was compiled with verbose debug message logging, this function + * does nothing: you'll always get messages from all levels. + */ + LIBUSB_OPTION_LOG_LEVEL, + + /** Use the UsbDk backend for a specific context, if available. + * + * This option should be set immediately after calling libusb_init(), otherwise + * unspecified behavior may occur. + * + * Only valid on Windows. + */ + LIBUSB_OPTION_USE_USBDK, +}; + +int LIBUSB_CALL libusb_set_option(libusb_context *ctx, enum libusb_option option, ...); + #ifdef __cplusplus } #endif diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/libusbi.h b/vendor/github.com/karalabe/usb/libusb/libusb/libusbi.h similarity index 94% rename from vendor/github.com/karalabe/hid/libusb/libusb/libusbi.h rename to vendor/github.com/karalabe/usb/libusb/libusb/libusbi.h index 752e3988787b..31d6ce98d49c 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/libusbi.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/libusbi.h @@ -39,6 +39,20 @@ #include "libusb.h" #include "version.h" +/* Attribute to ensure that a structure member is aligned to a natural + * pointer alignment. Used for os_priv member. */ +#if defined(_MSC_VER) +#if defined(_WIN64) +#define PTR_ALIGNED __declspec(align(8)) +#else +#define PTR_ALIGNED __declspec(align(4)) +#endif +#elif defined(__GNUC__) +#define PTR_ALIGNED __attribute__((aligned(sizeof(void *)))) +#else +#define PTR_ALIGNED +#endif + /* Inside the libusb code, mark all public functions as follows: * return_type API_EXPORTED function_name(params) { ... } * But if the function returns a pointer, mark it as follows: @@ -139,6 +153,19 @@ static inline void list_del(struct list_head *entry) entry->next = entry->prev = NULL; } +static inline void list_cut(struct list_head *list, struct list_head *head) +{ + if (list_empty(head)) + return; + + list->next = head->next; + list->next->prev = list; + list->prev = head->prev; + list->prev->next = list; + + list_init(head); +} + static inline void *usbi_reallocf(void *ptr, size_t size) { void *ret = realloc(ptr, size); @@ -151,6 +178,9 @@ static inline void *usbi_reallocf(void *ptr, size_t size) const typeof( ((type *)0)->member ) *mptr = (ptr); \ (type *)( (char *)mptr - offsetof(type,member) );}) +#ifndef CLAMP +#define CLAMP(val, min, max) ((val) < (min) ? (min) : ((val) > (max) ? (max) : (val))) +#endif #ifndef MIN #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif @@ -175,29 +205,33 @@ static inline void *usbi_reallocf(void *ptr, size_t size) } while (0) #endif +#ifdef ENABLE_LOGGING + +#if defined(_MSC_VER) && (_MSC_VER < 1900) +#define snprintf usbi_snprintf +#define vsnprintf usbi_vsnprintf +int usbi_snprintf(char *dst, size_t size, const char *format, ...); +int usbi_vsnprintf(char *dst, size_t size, const char *format, va_list ap); +#define LIBUSB_PRINTF_WIN32 +#endif /* defined(_MSC_VER) && (_MSC_VER < 1900) */ + void usbi_log(struct libusb_context *ctx, enum libusb_log_level level, const char *function, const char *format, ...); void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, const char *function, const char *format, va_list args); -#if !defined(_MSC_VER) || _MSC_VER >= 1400 +#if !defined(_MSC_VER) || (_MSC_VER >= 1400) -#ifdef ENABLE_LOGGING #define _usbi_log(ctx, level, ...) usbi_log(ctx, level, __FUNCTION__, __VA_ARGS__) -#define usbi_dbg(...) _usbi_log(NULL, LIBUSB_LOG_LEVEL_DEBUG, __VA_ARGS__) -#else -#define _usbi_log(ctx, level, ...) do { (void)(ctx); } while(0) -#define usbi_dbg(...) do {} while(0) -#endif -#define usbi_info(ctx, ...) _usbi_log(ctx, LIBUSB_LOG_LEVEL_INFO, __VA_ARGS__) -#define usbi_warn(ctx, ...) _usbi_log(ctx, LIBUSB_LOG_LEVEL_WARNING, __VA_ARGS__) #define usbi_err(ctx, ...) _usbi_log(ctx, LIBUSB_LOG_LEVEL_ERROR, __VA_ARGS__) +#define usbi_warn(ctx, ...) _usbi_log(ctx, LIBUSB_LOG_LEVEL_WARNING, __VA_ARGS__) +#define usbi_info(ctx, ...) _usbi_log(ctx, LIBUSB_LOG_LEVEL_INFO, __VA_ARGS__) +#define usbi_dbg(...) _usbi_log(NULL, LIBUSB_LOG_LEVEL_DEBUG, __VA_ARGS__) -#else /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ +#else /* !defined(_MSC_VER) || (_MSC_VER >= 1400) */ -#ifdef ENABLE_LOGGING #define LOG_BODY(ctxt, level) \ { \ va_list args; \ @@ -205,24 +239,26 @@ void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level, usbi_log_v(ctxt, level, "", format, args); \ va_end(args); \ } -#else -#define LOG_BODY(ctxt, level) \ -{ \ - (void)(ctxt); \ -} -#endif -static inline void usbi_info(struct libusb_context *ctx, const char *format, ...) - LOG_BODY(ctx, LIBUSB_LOG_LEVEL_INFO) -static inline void usbi_warn(struct libusb_context *ctx, const char *format, ...) - LOG_BODY(ctx, LIBUSB_LOG_LEVEL_WARNING) static inline void usbi_err(struct libusb_context *ctx, const char *format, ...) LOG_BODY(ctx, LIBUSB_LOG_LEVEL_ERROR) - +static inline void usbi_warn(struct libusb_context *ctx, const char *format, ...) + LOG_BODY(ctx, LIBUSB_LOG_LEVEL_WARNING) +static inline void usbi_info(struct libusb_context *ctx, const char *format, ...) + LOG_BODY(ctx, LIBUSB_LOG_LEVEL_INFO) static inline void usbi_dbg(const char *format, ...) LOG_BODY(NULL, LIBUSB_LOG_LEVEL_DEBUG) -#endif /* !defined(_MSC_VER) || _MSC_VER >= 1400 */ +#endif /* !defined(_MSC_VER) || (_MSC_VER >= 1400) */ + +#else /* ENABLE_LOGGING */ + +#define usbi_err(ctx, ...) do { (void)ctx; } while (0) +#define usbi_warn(ctx, ...) do { (void)ctx; } while (0) +#define usbi_info(ctx, ...) do { (void)ctx; } while (0) +#define usbi_dbg(...) do {} while (0) + +#endif /* ENABLE_LOGGING */ #define USBI_GET_CONTEXT(ctx) \ do { \ @@ -254,8 +290,10 @@ extern struct libusb_context *usbi_default_context; struct pollfd; struct libusb_context { - int debug; +#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) + enum libusb_log_level debug; int debug_fixed; +#endif /* internal event pipe, used for signalling occurrence of an internal event. */ int event_pipe[2]; @@ -270,6 +308,7 @@ struct libusb_context { /* A list of registered hotplug callbacks */ struct list_head hotplug_cbs; + libusb_hotplug_callback_handle next_hotplug_cb_handle; usbi_mutex_t hotplug_cbs_lock; /* this is a list of in-flight transfer handles, sorted by timeout @@ -331,6 +370,8 @@ struct libusb_context { #endif struct list_head list; + + PTR_ALIGNED unsigned char os_priv[ZERO_SIZED_ARRAY]; }; enum usbi_event_flags { @@ -339,6 +380,9 @@ enum usbi_event_flags { /* The user has interrupted the event handler */ USBI_EVENT_USER_INTERRUPT = 1 << 1, + + /* A hotplug callback deregistration is pending */ + USBI_EVENT_HOTPLUG_CB_DEREGISTERED = 1 << 2, }; /* Macros for managing event handling state */ @@ -383,17 +427,7 @@ struct libusb_device { struct libusb_device_descriptor device_descriptor; int attached; - unsigned char os_priv -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif -#if defined(OS_SUNOS) - __attribute__ ((aligned (8))); -#else - ; -#endif + PTR_ALIGNED unsigned char os_priv[ZERO_SIZED_ARRAY]; }; struct libusb_device_handle { @@ -404,17 +438,8 @@ struct libusb_device_handle { struct list_head list; struct libusb_device *dev; int auto_detach_kernel_driver; - unsigned char os_priv -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif -#if defined(OS_SUNOS) - __attribute__ ((aligned (8))); -#else - ; -#endif + + PTR_ALIGNED unsigned char os_priv[ZERO_SIZED_ARRAY]; }; enum { @@ -540,14 +565,6 @@ int usbi_clear_event(struct libusb_context *ctx); #include "os/poll_windows.h" #endif -#if defined(_MSC_VER) && (_MSC_VER < 1900) -#define snprintf usbi_snprintf -#define vsnprintf usbi_vsnprintf -int usbi_snprintf(char *dst, size_t size, const char *format, ...); -int usbi_vsnprintf(char *dst, size_t size, const char *format, va_list ap); -#define LIBUSB_PRINTF_WIN32 -#endif - struct usbi_pollfd { /* must come first */ struct libusb_pollfd pollfd; @@ -568,13 +585,7 @@ void usbi_remove_pollfd(struct libusb_context *ctx, int fd); struct discovered_devs { size_t len; size_t capacity; - struct libusb_device *devices -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + struct libusb_device *devices[ZERO_SIZED_ARRAY]; }; struct discovered_devs *discovered_devs_append( @@ -607,7 +618,17 @@ struct usbi_os_backend { * * This function is called when the user deinitializes the library. */ - void (*exit)(void); + void (*exit)(struct libusb_context *ctx); + + /* Set a backend-specific option. Optional. + * + * This function is called when the user calls libusb_set_option() and + * the option is not handled by the core library. + * + * Return 0 on success, or a LIBUSB_ERROR code on failure. + */ + int (*set_option)(struct libusb_context *ctx, enum libusb_option option, + va_list args); /* Enumerate all the USB devices on the system, returning them in a list * of discovered devices. @@ -1110,6 +1131,11 @@ struct usbi_os_backend { clockid_t (*get_timerfd_clockid)(void); #endif + /* Number of bytes to reserve for per-context private backend data. + * This private data area is accessible through the "os_priv" field of + * struct libusb_context. */ + size_t context_priv_size; + /* Number of bytes to reserve for per-device private backend data. * This private data area is accessible through the "os_priv" field of * struct libusb_device. */ @@ -1127,17 +1153,7 @@ struct usbi_os_backend { size_t transfer_priv_size; }; -extern const struct usbi_os_backend * const usbi_backend; - -extern const struct usbi_os_backend linux_usbfs_backend; -extern const struct usbi_os_backend darwin_backend; -extern const struct usbi_os_backend openbsd_backend; -extern const struct usbi_os_backend netbsd_backend; -extern const struct usbi_os_backend windows_backend; -extern const struct usbi_os_backend usbdk_backend; -extern const struct usbi_os_backend wince_backend; -extern const struct usbi_os_backend haiku_usb_raw_backend; -extern const struct usbi_os_backend sunos_backend; +extern const struct usbi_os_backend usbi_backend; extern struct list_head active_contexts_list; extern usbi_mutex_static_t active_contexts_lock; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.c similarity index 96% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.c index b0219d1b0573..35ea1c321e72 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.c @@ -1,7 +1,7 @@ /* -*- Mode: C; indent-tabs-mode:nil -*- */ /* * darwin backend for libusb 1.0 - * Copyright © 2008-2016 Nathan Hjelm + * Copyright © 2008-2017 Nathan Hjelm * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -36,6 +36,10 @@ #include #include +/* Suppress warnings about the use of the deprecated objc_registerThreadWithCollector + * function. Its use is also conditionalized to only older deployment targets. */ +#define OBJC_SILENCE_GC_DEPRECATIONS 1 + #include #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 && MAC_OS_X_VERSION_MIN_REQUIRED < 101200 #include @@ -55,6 +59,14 @@ _Atomic int32_t initCount = ATOMIC_VAR_INIT(0); #define libusb_darwin_atomic_fetch_add(x, y) (OSAtomicAdd32Barrier(y, x) - y) static volatile int32_t initCount = 0; + +#endif + +/* On 10.12 and later, use newly available clock_*() functions */ +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 +#define OSX_USE_CLOCK_GETTIME 1 +#else +#define OSX_USE_CLOCK_GETTIME 0 #endif #include "darwin_usb.h" @@ -65,15 +77,17 @@ static pthread_cond_t libusb_darwin_at_cond = PTHREAD_COND_INITIALIZER; static pthread_once_t darwin_init_once = PTHREAD_ONCE_INIT; +#if !OSX_USE_CLOCK_GETTIME static clock_serv_t clock_realtime; static clock_serv_t clock_monotonic; +#endif static CFRunLoopRef libusb_darwin_acfl = NULL; /* event cf loop */ static CFRunLoopSourceRef libusb_darwin_acfls = NULL; /* shutdown signal for event cf loop */ static usbi_mutex_t darwin_cached_devices_lock = PTHREAD_MUTEX_INITIALIZER; static struct list_head darwin_cached_devices = {&darwin_cached_devices, &darwin_cached_devices}; -static char *darwin_device_class = kIOUSBDeviceClassName; +static const char *darwin_device_class = kIOUSBDeviceClassName; #define DARWIN_CACHED_DEVICE(a) ((struct darwin_cached_device *) (((struct darwin_device_priv *)((a)->os_priv))->dev)) @@ -219,20 +233,21 @@ static int usb_setup_device_iterator (io_iterator_t *deviceIterator, UInt32 loca &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); - if (propertyMatchDict) { - /* there are no unsigned CFNumber types so treat the value as signed. the os seems to do this - internally (CFNumberType of locationID is 3) */ - CFTypeRef locationCF = CFNumberCreate (NULL, kCFNumberSInt32Type, &location); + /* there are no unsigned CFNumber types so treat the value as signed. the OS seems to do this + internally (CFNumberType of locationID is kCFNumberSInt32Type) */ + CFTypeRef locationCF = CFNumberCreate (NULL, kCFNumberSInt32Type, &location); + if (propertyMatchDict && locationCF) { CFDictionarySetValue (propertyMatchDict, CFSTR(kUSBDevicePropertyLocationID), locationCF); - /* release our reference to the CFNumber (CFDictionarySetValue retains it) */ - CFRelease (locationCF); - CFDictionarySetValue (matchingDict, CFSTR(kIOPropertyMatchKey), propertyMatchDict); - /* release out reference to the CFMutableDictionaryRef (CFDictionarySetValue retains it) */ - CFRelease (propertyMatchDict); } /* else we can still proceed as long as the caller accounts for the possibility of other devices in the iterator */ + + /* release our references as per the Create Rule */ + if (propertyMatchDict) + CFRelease (propertyMatchDict); + if (locationCF) + CFRelease (locationCF); } return IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, deviceIterator); @@ -300,6 +315,7 @@ static usb_device_t **darwin_device_from_service (io_service_t service) } static void darwin_devices_attached (void *ptr, io_iterator_t add_devices) { + UNUSED(ptr); struct libusb_context *ctx; io_service_t service; @@ -308,7 +324,7 @@ static void darwin_devices_attached (void *ptr, io_iterator_t add_devices) { while ((service = IOIteratorNext(add_devices))) { /* add this device to each active context's device list */ list_for_each_entry(ctx, &active_contexts_list, list, struct libusb_context) { - process_new_device (ctx, service);; + process_new_device (ctx, service); } IOObjectRelease(service); @@ -318,6 +334,7 @@ static void darwin_devices_attached (void *ptr, io_iterator_t add_devices) { } static void darwin_devices_detached (void *ptr, io_iterator_t rem_devices) { + UNUSED(ptr); struct libusb_device *dev = NULL; struct libusb_context *ctx; struct darwin_cached_device *old_device; @@ -516,7 +533,6 @@ static void darwin_check_version (void) { } static int darwin_init(struct libusb_context *ctx) { - host_name_port_t host_self; int rc; rc = pthread_once (&darwin_init_once, darwin_check_version); @@ -530,12 +546,15 @@ static int darwin_init(struct libusb_context *ctx) { } if (libusb_darwin_atomic_fetch_add (&initCount, 1) == 0) { - /* create the clocks that will be used */ +#if !OSX_USE_CLOCK_GETTIME + /* create the clocks that will be used if clock_gettime() is not available */ + host_name_port_t host_self; host_self = mach_host_self(); host_get_clock_service(host_self, CALENDAR_CLOCK, &clock_realtime); host_get_clock_service(host_self, SYSTEM_CLOCK, &clock_monotonic); mach_port_deallocate(mach_task_self(), host_self); +#endif pthread_create (&libusb_darwin_at, NULL, darwin_event_thread_main, ctx); @@ -548,10 +567,13 @@ static int darwin_init(struct libusb_context *ctx) { return rc; } -static void darwin_exit (void) { +static void darwin_exit (struct libusb_context *ctx) { + UNUSED(ctx); if (libusb_darwin_atomic_fetch_add (&initCount, -1) == 1) { +#if !OSX_USE_CLOCK_GETTIME mach_port_deallocate(mach_task_self(), clock_realtime); mach_port_deallocate(mach_task_self(), clock_monotonic); +#endif /* stop the event runloop and wait for the thread to terminate. */ CFRunLoopSourceSignal(libusb_darwin_acfls); @@ -866,14 +888,29 @@ static int get_device_port (io_service_t service, UInt8 *port) { return ret; } +static int get_device_parent_sessionID(io_service_t service, UInt64 *parent_sessionID) { + kern_return_t result; + io_service_t parent; + + /* Walk up the tree in the IOService plane until we find a parent that has a sessionID */ + parent = service; + while((result = IORegistryEntryGetParentEntry (parent, kIOServicePlane, &parent)) == kIOReturnSuccess) { + if (get_ioregistry_value_number (parent, CFSTR("sessionID"), kCFNumberSInt64Type, parent_sessionID)) { + /* Success */ + return 1; + } + } + + /* We ran out of parents */ + return 0; +} + static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t service, struct darwin_cached_device **cached_out) { struct darwin_cached_device *new_device; UInt64 sessionID = 0, parent_sessionID = 0; int ret = LIBUSB_SUCCESS; usb_device_t **device; - io_service_t parent; - kern_return_t result; UInt8 port = 0; /* get some info from the io registry */ @@ -884,11 +921,8 @@ static int darwin_get_cached_device(struct libusb_context *ctx, io_service_t ser usbi_dbg("finding cached device for sessionID 0x%" PRIx64, sessionID); - result = IORegistryEntryGetParentEntry (service, kIOUSBPlane, &parent); - - if (kIOReturnSuccess == result) { - (void) get_ioregistry_value_number (parent, CFSTR("sessionID"), kCFNumberSInt64Type, &parent_sessionID); - IOObjectRelease(parent); + if (get_device_parent_sessionID(service, &parent_sessionID)) { + usbi_dbg("parent sessionID: 0x%" PRIx64, parent_sessionID); } usbi_mutex_lock(&darwin_cached_devices_lock); @@ -1005,8 +1039,11 @@ static int process_new_device (struct libusb_context *ctx, io_service_t service) case kUSBDeviceSpeedLow: dev->speed = LIBUSB_SPEED_LOW; break; case kUSBDeviceSpeedFull: dev->speed = LIBUSB_SPEED_FULL; break; case kUSBDeviceSpeedHigh: dev->speed = LIBUSB_SPEED_HIGH; break; -#if DeviceVersion >= 500 +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 case kUSBDeviceSpeedSuper: dev->speed = LIBUSB_SPEED_SUPER; break; +#endif +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 + case kUSBDeviceSpeedSuperPlus: dev->speed = LIBUSB_SPEED_SUPER_PLUS; break; #endif default: usbi_warn (ctx, "Got unknown device speed %d", devSpeed); @@ -1216,9 +1253,9 @@ static int get_endpoints (struct libusb_device_handle *dev_handle, int iface) { kern_return_t kresult; - u_int8_t numep, direction, number; - u_int8_t dont_care1, dont_care3; - u_int16_t dont_care2; + UInt8 numep, direction, number; + UInt8 dont_care1, dont_care3; + UInt16 dont_care2; int rc; usbi_dbg ("building table of endpoints."); @@ -1965,6 +2002,7 @@ static int darwin_handle_transfer_completion (struct usbi_transfer *itransfer) { } static int darwin_clock_gettime(int clk_id, struct timespec *tp) { +#if !OSX_USE_CLOCK_GETTIME mach_timespec_t sys_time; clock_serv_t clock_ref; @@ -1987,6 +2025,16 @@ static int darwin_clock_gettime(int clk_id, struct timespec *tp) { tp->tv_nsec = sys_time.tv_nsec; return 0; +#else + switch (clk_id) { + case USBI_CLOCK_MONOTONIC: + return clock_gettime(CLOCK_MONOTONIC, tp); + case USBI_CLOCK_REALTIME: + return clock_gettime(CLOCK_REALTIME, tp); + default: + return LIBUSB_ERROR_INVALID_PARAM; + } +#endif } #if InterfaceVersion >= 550 @@ -2047,7 +2095,7 @@ static int darwin_free_streams (struct libusb_device_handle *dev_handle, unsigne } #endif -const struct usbi_os_backend darwin_backend = { +const struct usbi_os_backend usbi_backend = { .name = "Darwin", .caps = 0, .init = darwin_init, diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.h similarity index 60% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.h index 118043421a3a..474567f6ac77 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/darwin_usb.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/darwin_usb.h @@ -28,37 +28,58 @@ #include /* IOUSBInterfaceInferface */ -#if defined (kIOUSBInterfaceInterfaceID700) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 + +/* New in OS 10.12.0. */ +#if defined (kIOUSBInterfaceInterfaceID800) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) + +#define usb_interface_t IOUSBInterfaceInterface800 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID800 +#define InterfaceVersion 800 + +/* New in OS 10.10.0. */ +#elif defined (kIOUSBInterfaceInterfaceID700) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 101000) #define usb_interface_t IOUSBInterfaceInterface700 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID700 #define InterfaceVersion 700 -#elif defined (kIOUSBInterfaceInterfaceID550) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 +/* New in OS 10.9.0. */ +#elif defined (kIOUSBInterfaceInterfaceID650) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) + +#define usb_interface_t IOUSBInterfaceInterface650 +#define InterfaceInterfaceID kIOUSBInterfaceInterfaceID650 +#define InterfaceVersion 650 + +/* New in OS 10.8.2 but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBInterfaceInterfaceID550) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) #define usb_interface_t IOUSBInterfaceInterface550 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID550 #define InterfaceVersion 550 -#elif defined (kIOUSBInterfaceInterfaceID500) +/* New in OS 10.7.3 but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBInterfaceInterfaceID500) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) #define usb_interface_t IOUSBInterfaceInterface500 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID500 #define InterfaceVersion 500 -#elif defined (kIOUSBInterfaceInterfaceID300) +/* New in OS 10.5.0. */ +#elif defined (kIOUSBInterfaceInterfaceID300) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) #define usb_interface_t IOUSBInterfaceInterface300 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID300 #define InterfaceVersion 300 -#elif defined (kIOUSBInterfaceInterfaceID245) +/* New in OS 10.4.5 (or 10.4.6?) but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBInterfaceInterfaceID245) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) #define usb_interface_t IOUSBInterfaceInterface245 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID245 #define InterfaceVersion 245 -#elif defined (kIOUSBInterfaceInterfaceID220) +/* New in OS 10.4.0. */ +#elif defined (kIOUSBInterfaceInterfaceID220) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1040) #define usb_interface_t IOUSBInterfaceInterface220 #define InterfaceInterfaceID kIOUSBInterfaceInterfaceID220 @@ -66,43 +87,57 @@ #else -#error "IOUSBFamily is too old. Please upgrade your OS" +#error "IOUSBFamily is too old. Please upgrade your SDK and/or deployment target" #endif /* IOUSBDeviceInterface */ -#if defined (kIOUSBDeviceInterfaceID500) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9 + +/* New in OS 10.9.0. */ +#if defined (kIOUSBDeviceInterfaceID650) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1090) + +#define usb_device_t IOUSBDeviceInterface650 +#define DeviceInterfaceID kIOUSBDeviceInterfaceID650 +#define DeviceVersion 650 + +/* New in OS 10.7.3 but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBDeviceInterfaceID500) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) #define usb_device_t IOUSBDeviceInterface500 #define DeviceInterfaceID kIOUSBDeviceInterfaceID500 #define DeviceVersion 500 -#elif defined (kIOUSBDeviceInterfaceID320) +/* New in OS 10.5.4 but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBDeviceInterfaceID320) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1060) #define usb_device_t IOUSBDeviceInterface320 #define DeviceInterfaceID kIOUSBDeviceInterfaceID320 #define DeviceVersion 320 -#elif defined (kIOUSBDeviceInterfaceID300) +/* New in OS 10.5.0. */ +#elif defined (kIOUSBDeviceInterfaceID300) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) #define usb_device_t IOUSBDeviceInterface300 #define DeviceInterfaceID kIOUSBDeviceInterfaceID300 #define DeviceVersion 300 -#elif defined (kIOUSBDeviceInterfaceID245) +/* New in OS 10.4.5 (or 10.4.6?) but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBDeviceInterfaceID245) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1050) #define usb_device_t IOUSBDeviceInterface245 #define DeviceInterfaceID kIOUSBDeviceInterfaceID245 #define DeviceVersion 245 -#elif defined (kIOUSBDeviceInterfaceID220) +/* New in OS 10.2.3 but can't test deployment target to that granularity, so round up. */ +#elif defined (kIOUSBDeviceInterfaceID197) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1030) + #define usb_device_t IOUSBDeviceInterface197 #define DeviceInterfaceID kIOUSBDeviceInterfaceID197 #define DeviceVersion 197 #else -#error "IOUSBFamily is too old. Please upgrade your OS" +#error "IOUSBFamily is too old. Please upgrade your SDK and/or deployment target" #endif diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_pollfs.cpp b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_pollfs.cpp similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_pollfs.cpp rename to vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_pollfs.cpp diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb.h similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb.h diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_backend.cpp b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_backend.cpp similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_backend.cpp rename to vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_backend.cpp diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_raw.cpp b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_raw.cpp similarity index 98% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_raw.cpp rename to vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_raw.cpp index 77adbd1e60e9..c701e34421c1 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_raw.cpp +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_raw.cpp @@ -38,8 +38,9 @@ haiku_init(struct libusb_context *ctx) } static void -haiku_exit(void) +haiku_exit(struct libusb_context *ctx) { + UNUSED(ctx); if (atomic_add(&gInitCount, -1) == 1) gUsbRoster.Stop(); } @@ -195,11 +196,12 @@ haiku_clock_gettime(int clkid, struct timespec *tp) return LIBUSB_ERROR_INVALID_PARAM; } -const struct usbi_os_backend haiku_usb_raw_backend = { +const struct usbi_os_backend usbi_backend = { /*.name =*/ "Haiku usbfs", /*.caps =*/ 0, /*.init =*/ haiku_init, /*.exit =*/ haiku_exit, + /*.set_option =*/ NULL, /*.get_device_list =*/ NULL, /*.hotplug_poll =*/ NULL, /*.open =*/ haiku_open, @@ -244,6 +246,7 @@ const struct usbi_os_backend haiku_usb_raw_backend = { /*.get_timerfd_clockid =*/ NULL, #endif + /*.context_priv_size=*/ 0, /*.device_priv_size =*/ sizeof(USBDevice *), /*.device_handle_priv_size =*/ sizeof(USBDeviceHandle *), /*.transfer_priv_size =*/ sizeof(USBTransfer *), diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_raw.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_raw.h similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/haiku_usb_raw.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/haiku_usb_raw.h diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_netlink.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_netlink.c similarity index 89% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/linux_netlink.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/linux_netlink.c index 60cf3ad1bd0e..c1ad1ec51faf 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_netlink.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_netlink.c @@ -45,24 +45,33 @@ #define NL_GROUP_KERNEL 1 +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 0 +#endif + +#ifndef SOCK_NONBLOCK +#define SOCK_NONBLOCK 0 +#endif + static int linux_netlink_socket = -1; static int netlink_control_pipe[2] = { -1, -1 }; static pthread_t libusb_linux_event_thread; static void *linux_netlink_event_thread_main(void *arg); -static int set_fd_cloexec_nb(int fd) +static int set_fd_cloexec_nb(int fd, int socktype) { int flags; #if defined(FD_CLOEXEC) - flags = fcntl(fd, F_GETFD); - if (flags == -1) { - usbi_err(NULL, "failed to get netlink fd flags (%d)", errno); - return -1; - } + /* Make sure the netlink socket file descriptor is marked as CLOEXEC */ + if (!(socktype & SOCK_CLOEXEC)) { + flags = fcntl(fd, F_GETFD); + if (flags == -1) { + usbi_err(NULL, "failed to get netlink fd flags (%d)", errno); + return -1; + } - if (!(flags & FD_CLOEXEC)) { if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) { usbi_err(NULL, "failed to set netlink fd flags (%d)", errno); return -1; @@ -70,13 +79,14 @@ static int set_fd_cloexec_nb(int fd) } #endif - flags = fcntl(fd, F_GETFL); - if (flags == -1) { - usbi_err(NULL, "failed to get netlink fd status flags (%d)", errno); - return -1; - } + /* Make sure the netlink socket is non-blocking */ + if (!(socktype & SOCK_NONBLOCK)) { + flags = fcntl(fd, F_GETFL); + if (flags == -1) { + usbi_err(NULL, "failed to get netlink fd status flags (%d)", errno); + return -1; + } - if (!(flags & O_NONBLOCK)) { if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) { usbi_err(NULL, "failed to set netlink fd status flags (%d)", errno); return -1; @@ -89,21 +99,15 @@ static int set_fd_cloexec_nb(int fd) int linux_netlink_start_event_monitor(void) { struct sockaddr_nl sa_nl = { .nl_family = AF_NETLINK, .nl_groups = NL_GROUP_KERNEL }; - int socktype = SOCK_RAW; + int socktype = SOCK_RAW | SOCK_NONBLOCK | SOCK_CLOEXEC; int opt = 1; int ret; -#if defined(SOCK_CLOEXEC) - socktype |= SOCK_CLOEXEC; -#endif -#if defined(SOCK_NONBLOCK) - socktype |= SOCK_NONBLOCK; -#endif - linux_netlink_socket = socket(PF_NETLINK, socktype, NETLINK_KOBJECT_UEVENT); if (linux_netlink_socket == -1 && errno == EINVAL) { usbi_dbg("failed to create netlink socket of type %d, attempting SOCK_RAW", socktype); - linux_netlink_socket = socket(PF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT); + socktype = SOCK_RAW; + linux_netlink_socket = socket(PF_NETLINK, socktype, NETLINK_KOBJECT_UEVENT); } if (linux_netlink_socket == -1) { @@ -111,7 +115,7 @@ int linux_netlink_start_event_monitor(void) goto err; } - ret = set_fd_cloexec_nb(linux_netlink_socket); + ret = set_fd_cloexec_nb(linux_netlink_socket, socktype); if (ret == -1) goto err_close_socket; @@ -162,7 +166,7 @@ int linux_netlink_stop_event_monitor(void) /* Write some dummy data to the control pipe and * wait for the thread to exit */ - r = usbi_write(netlink_control_pipe[1], &dummy, sizeof(dummy)); + r = write(netlink_control_pipe[1], &dummy, sizeof(dummy)); if (r <= 0) usbi_warn(NULL, "netlink control pipe signal failed"); @@ -356,7 +360,8 @@ static int linux_netlink_read_message(void) static void *linux_netlink_event_thread_main(void *arg) { char dummy; - ssize_t r; + int r; + ssize_t nb; struct pollfd fds[] = { { .fd = netlink_control_pipe[0], .events = POLLIN }, @@ -368,11 +373,15 @@ static void *linux_netlink_event_thread_main(void *arg) usbi_dbg("netlink event thread entering"); - while (poll(fds, 2, -1) >= 0) { + while ((r = poll(fds, 2, -1)) >= 0 || errno == EINTR) { + if (r < 0) { + /* temporary failure */ + continue; + } if (fds[0].revents & POLLIN) { /* activity on control pipe, read the byte and exit */ - r = usbi_read(netlink_control_pipe[0], &dummy, sizeof(dummy)); - if (r <= 0) + nb = read(netlink_control_pipe[0], &dummy, sizeof(dummy)); + if (nb <= 0) usbi_warn(NULL, "netlink control pipe read failed"); break; } diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_udev.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_udev.c similarity index 90% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/linux_udev.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/linux_udev.c index 61d953d8c2df..c97806ba6b16 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_udev.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_udev.c @@ -82,17 +82,33 @@ int linux_udev_start_event_monitor(void) udev_monitor_fd = udev_monitor_get_fd(udev_monitor); +#if defined(FD_CLOEXEC) + /* Make sure the udev file descriptor is marked as CLOEXEC */ + r = fcntl(udev_monitor_fd, F_GETFD); + if (r == -1) { + usbi_err(NULL, "geting udev monitor fd flags (%d)", errno); + goto err_free_monitor; + } + if (!(r & FD_CLOEXEC)) { + if (fcntl(udev_monitor_fd, F_SETFD, r | FD_CLOEXEC) == -1) { + usbi_err(NULL, "setting udev monitor fd flags (%d)", errno); + goto err_free_monitor; + } + } +#endif + /* Some older versions of udev are not non-blocking by default, * so make sure this is set */ r = fcntl(udev_monitor_fd, F_GETFL); if (r == -1) { - usbi_err(NULL, "getting udev monitor fd flags (%d)", errno); + usbi_err(NULL, "getting udev monitor fd status flags (%d)", errno); goto err_free_monitor; } - r = fcntl(udev_monitor_fd, F_SETFL, r | O_NONBLOCK); - if (r) { - usbi_err(NULL, "setting udev monitor fd flags (%d)", errno); - goto err_free_monitor; + if (!(r & O_NONBLOCK)) { + if (fcntl(udev_monitor_fd, F_SETFL, r | O_NONBLOCK) == -1) { + usbi_err(NULL, "setting udev monitor fd status flags (%d)", errno); + goto err_free_monitor; + } } r = usbi_pipe(udev_control_pipe); @@ -134,7 +150,7 @@ int linux_udev_stop_event_monitor(void) /* Write some dummy data to the control pipe and * wait for the thread to exit */ - r = usbi_write(udev_control_pipe[1], &dummy, sizeof(dummy)); + r = write(udev_control_pipe[1], &dummy, sizeof(dummy)); if (r <= 0) { usbi_warn(NULL, "udev control pipe signal failed"); } @@ -162,6 +178,7 @@ static void *linux_udev_event_thread_main(void *arg) { char dummy; int r; + ssize_t nb; struct udev_device* udev_dev; struct pollfd fds[] = { {.fd = udev_control_pipe[0], @@ -179,8 +196,8 @@ static void *linux_udev_event_thread_main(void *arg) } if (fds[0].revents & POLLIN) { /* activity on control pipe, read the byte and exit */ - r = usbi_read(udev_control_pipe[0], &dummy, sizeof(dummy)); - if (r <= 0) { + nb = read(udev_control_pipe[0], &dummy, sizeof(dummy)); + if (nb <= 0) { usbi_warn(NULL, "udev control pipe read failed"); } break; @@ -274,6 +291,7 @@ int linux_udev_scan_devices(struct libusb_context *ctx) udev_enumerate_scan_devices(enumerator); devices = udev_enumerate_get_list_entry(enumerator); + entry = NULL; udev_list_entry_foreach(entry, devices) { const char *path = udev_list_entry_get_name(entry); uint8_t busnum = 0, devaddr = 0; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.c similarity index 93% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.c index 6b89ba2889fb..768e7d5a64ee 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.c @@ -81,6 +81,19 @@ static const char *usbfs_path = NULL; /* use usbdev*.* device names in /dev instead of the usbfs bus directories */ static int usbdev_names = 0; +/* Linux has changed the maximum length of an individual isochronous packet + * over time. Initially this limit was 1,023 bytes, but Linux 2.6.18 + * (commit 3612242e527eb47ee4756b5350f8bdf791aa5ede) increased this value to + * 8,192 bytes to support higher bandwidth devices. Linux 3.10 + * (commit e2e2f0ea1c935edcf53feb4c4c8fdb4f86d57dd9) further increased this + * value to 49,152 bytes to support super speed devices. + */ +static unsigned int max_iso_packet_len = 0; + +/* Linux 2.6.23 adds support for O_CLOEXEC when opening files, which marks the + * close-on-exec flag in the underlying file descriptor. */ +static int supports_flag_cloexec = -1; + /* Linux 2.6.32 adds support for a bulk continuation URB flag. this basically * allows us to mark URBs as being part of a specific logical transfer when * we submit them to the kernel. then, on any error except a cancellation, all @@ -136,6 +149,12 @@ static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int); static int linux_default_scan_devices (struct libusb_context *ctx); #endif +struct kernel_version { + int major; + int minor; + int sublevel; +}; + struct linux_device_priv { char *sysfs_dir; unsigned char *descriptors; @@ -180,6 +199,16 @@ struct linux_transfer_priv { int iso_packet_offset; }; +static int _open(const char *path, int flags) +{ +#if defined(O_CLOEXEC) + if (supports_flag_cloexec) + return open(path, flags | O_CLOEXEC); + else +#endif + return open(path, flags); +} + static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent) { struct libusb_context *ctx = DEVICE_CTX(dev); @@ -194,7 +223,7 @@ static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent) snprintf(path, PATH_MAX, "%s/%03d/%03d", usbfs_path, dev->bus_number, dev->device_address); - fd = open(path, mode); + fd = _open(path, mode); if (fd != -1) return fd; /* Success */ @@ -205,7 +234,7 @@ static int _get_usbfs_fd(struct libusb_device *dev, mode_t mode, int silent) /* Wait 10ms for USB device path creation.*/ nanosleep(&(struct timespec){delay / 1000000, (delay * 1000) % 1000000000UL}, NULL); - fd = open(path, mode); + fd = _open(path, mode); if (fd != -1) return fd; /* Success */ } @@ -342,39 +371,59 @@ static clockid_t find_monotonic_clock(void) return CLOCK_REALTIME; } -static int kernel_version_ge(int major, int minor, int sublevel) +static int get_kernel_version(struct libusb_context *ctx, + struct kernel_version *ver) { struct utsname uts; - int atoms, kmajor, kminor, ksublevel; + int atoms; - if (uname(&uts) < 0) + if (uname(&uts) < 0) { + usbi_err(ctx, "uname failed, errno %d", errno); return -1; - atoms = sscanf(uts.release, "%d.%d.%d", &kmajor, &kminor, &ksublevel); - if (atoms < 1) + } + + atoms = sscanf(uts.release, "%d.%d.%d", &ver->major, &ver->minor, &ver->sublevel); + if (atoms < 1) { + usbi_err(ctx, "failed to parse uname release '%s'", uts.release); return -1; + } + + if (atoms < 2) + ver->minor = -1; + if (atoms < 3) + ver->sublevel = -1; - if (kmajor > major) + usbi_dbg("reported kernel version is %s", uts.release); + + return 0; +} + +static int kernel_version_ge(const struct kernel_version *ver, + int major, int minor, int sublevel) +{ + if (ver->major > major) return 1; - if (kmajor < major) + else if (ver->major < major) return 0; /* kmajor == major */ - if (atoms < 2) + if (ver->minor == -1 && ver->sublevel == -1) return 0 == minor && 0 == sublevel; - if (kminor > minor) + else if (ver->minor > minor) return 1; - if (kminor < minor) + else if (ver->minor < minor) return 0; /* kminor == minor */ - if (atoms < 3) + if (ver->sublevel == -1) return 0 == sublevel; - return ksublevel >= sublevel; + return ver->sublevel >= sublevel; } static int op_init(struct libusb_context *ctx) { + struct kernel_version kversion; struct stat statbuf; int r; @@ -387,13 +436,17 @@ static int op_init(struct libusb_context *ctx) if (monotonic_clkid == -1) monotonic_clkid = find_monotonic_clock(); + if (get_kernel_version(ctx, &kversion) < 0) + return LIBUSB_ERROR_OTHER; + + if (supports_flag_cloexec == -1) { + /* O_CLOEXEC flag available from Linux 2.6.23 */ + supports_flag_cloexec = kernel_version_ge(&kversion,2,6,23); + } + if (supports_flag_bulk_continuation == -1) { /* bulk continuation URB flag available from Linux 2.6.32 */ - supports_flag_bulk_continuation = kernel_version_ge(2,6,32); - if (supports_flag_bulk_continuation == -1) { - usbi_err(ctx, "error checking for bulk continuation support"); - return LIBUSB_ERROR_OTHER; - } + supports_flag_bulk_continuation = kernel_version_ge(&kversion,2,6,32); } if (supports_flag_bulk_continuation) @@ -401,32 +454,31 @@ static int op_init(struct libusb_context *ctx) if (-1 == supports_flag_zero_packet) { /* zero length packet URB flag fixed since Linux 2.6.31 */ - supports_flag_zero_packet = kernel_version_ge(2,6,31); - if (-1 == supports_flag_zero_packet) { - usbi_err(ctx, "error checking for zero length packet support"); - return LIBUSB_ERROR_OTHER; - } + supports_flag_zero_packet = kernel_version_ge(&kversion,2,6,31); } if (supports_flag_zero_packet) usbi_dbg("zero length packet flag supported"); + if (!max_iso_packet_len) { + if (kernel_version_ge(&kversion,3,10,0)) + max_iso_packet_len = 49152; + else if (kernel_version_ge(&kversion,2,6,18)) + max_iso_packet_len = 8192; + else + max_iso_packet_len = 1023; + } + + usbi_dbg("max iso packet length is (likely) %u bytes", max_iso_packet_len); + if (-1 == sysfs_has_descriptors) { /* sysfs descriptors has all descriptors since Linux 2.6.26 */ - sysfs_has_descriptors = kernel_version_ge(2,6,26); - if (-1 == sysfs_has_descriptors) { - usbi_err(ctx, "error checking for sysfs descriptors"); - return LIBUSB_ERROR_OTHER; - } + sysfs_has_descriptors = kernel_version_ge(&kversion,2,6,26); } if (-1 == sysfs_can_relate_devices) { /* sysfs has busnum since Linux 2.6.22 */ - sysfs_can_relate_devices = kernel_version_ge(2,6,22); - if (-1 == sysfs_can_relate_devices) { - usbi_err(ctx, "error checking for sysfs busnum"); - return LIBUSB_ERROR_OTHER; - } + sysfs_can_relate_devices = kernel_version_ge(&kversion,2,6,22); } if (sysfs_can_relate_devices || sysfs_has_descriptors) { @@ -463,8 +515,9 @@ static int op_init(struct libusb_context *ctx) return r; } -static void op_exit(void) +static void op_exit(struct libusb_context *ctx) { + UNUSED(ctx); usbi_mutex_static_lock(&linux_hotplug_startstop_lock); assert(init_count != 0); if (!--init_count) { @@ -526,7 +579,7 @@ static int _open_sysfs_attr(struct libusb_device *dev, const char *attr) snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH, priv->sysfs_dir, attr); - fd = open(filename, O_RDONLY); + fd = _open(filename, O_RDONLY); if (fd < 0) { usbi_err(DEVICE_CTX(dev), "open %s failed ret=%d errno=%d", filename, fd, errno); @@ -542,12 +595,12 @@ static int __read_sysfs_attr(struct libusb_context *ctx, { char filename[PATH_MAX]; FILE *f; - int r, value; + int fd, r, value; snprintf(filename, PATH_MAX, "%s/%s/%s", SYSFS_DEVICE_PATH, devname, attr); - f = fopen(filename, "r"); - if (f == NULL) { + fd = _open(filename, O_RDONLY); + if (fd == -1) { if (errno == ENOENT) { /* File doesn't exist. Assume the device has been disconnected (see trac ticket #70). */ @@ -557,6 +610,13 @@ static int __read_sysfs_attr(struct libusb_context *ctx, return LIBUSB_ERROR_IO; } + f = fdopen(fd, "r"); + if (f == NULL) { + usbi_err(ctx, "fdopen %s failed errno=%d", filename, errno); + close(fd); + return LIBUSB_ERROR_OTHER; + } + r = fscanf(f, "%d", &value); fclose(f); if (r != 1) { @@ -806,7 +866,7 @@ static int op_get_active_config_descriptor(struct libusb_device *dev, if (r < 0) return r; - len = MIN(len, r); + len = MIN(len, (size_t)r); memcpy(buffer, config_desc, len); return len; } @@ -836,7 +896,7 @@ static int op_get_config_descriptor(struct libusb_device *dev, descriptors += r; } - len = MIN(len, r); + len = MIN(len, (size_t)r); memcpy(buffer, descriptors, len); return len; } @@ -911,6 +971,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum, case 12: dev->speed = LIBUSB_SPEED_FULL; break; case 480: dev->speed = LIBUSB_SPEED_HIGH; break; case 5000: dev->speed = LIBUSB_SPEED_SUPER; break; + case 10000: dev->speed = LIBUSB_SPEED_SUPER_PLUS; break; default: usbi_warn(DEVICE_CTX(dev), "Unknown device speed: %d Mbps", speed); } @@ -1239,11 +1300,12 @@ static int sysfs_get_device_list(struct libusb_context *ctx) { DIR *devices = opendir(SYSFS_DEVICE_PATH); struct dirent *entry; - int r = LIBUSB_ERROR_IO; + int num_devices = 0; + int num_enumerated = 0; if (!devices) { usbi_err(ctx, "opendir devices failed errno=%d", errno); - return r; + return LIBUSB_ERROR_IO; } while ((entry = readdir(devices))) { @@ -1251,16 +1313,23 @@ static int sysfs_get_device_list(struct libusb_context *ctx) || strchr(entry->d_name, ':')) continue; + num_devices++; + if (sysfs_scan_device(ctx, entry->d_name)) { usbi_dbg("failed to enumerate dir entry %s", entry->d_name); continue; } - r = 0; + num_enumerated++; } closedir(devices); - return r; + + /* successful if at least one device was enumerated or no devices were found */ + if (num_enumerated || !num_devices) + return LIBUSB_SUCCESS; + else + return LIBUSB_ERROR_IO; } static int linux_default_scan_devices (struct libusb_context *ctx) @@ -1685,10 +1754,7 @@ static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle, strcpy(dc.driver, "usbfs"); dc.flags = USBFS_DISCONNECT_CLAIM_EXCEPT_DRIVER; r = ioctl(fd, IOCTL_USBFS_DISCONNECT_CLAIM, &dc); - if (r == 0 || (r != 0 && errno != ENOTTY)) { - if (r == 0) - return 0; - + if (r != 0 && errno != ENOTTY) { switch (errno) { case EBUSY: return LIBUSB_ERROR_BUSY; @@ -1700,7 +1766,8 @@ static int detach_kernel_driver_and_claim(struct libusb_device_handle *handle, usbi_err(HANDLE_CTX(handle), "disconnect-and-claim failed errno %d", errno); return LIBUSB_ERROR_OTHER; - } + } else if (r == 0) + return 0; /* Fallback code for kernels which don't support the disconnect-and-claim ioctl */ @@ -1973,38 +2040,43 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) struct linux_device_handle_priv *dpriv = _device_handle_priv(transfer->dev_handle); struct usbfs_urb **urbs; - size_t alloc_size; int num_packets = transfer->num_iso_packets; - int i; - int this_urb_len = 0; - int num_urbs = 1; - int packet_offset = 0; + int num_packets_remaining; + int i, j; + int num_urbs; unsigned int packet_len; + unsigned int total_len = 0; unsigned char *urb_buffer = transfer->buffer; + if (num_packets < 1) + return LIBUSB_ERROR_INVALID_PARAM; + /* usbfs places arbitrary limits on iso URBs. this limit has changed - * at least three times, and it's difficult to accurately detect which - * limit this running kernel might impose. so we attempt to submit - * whatever the user has provided. if the kernel rejects the request - * due to its size, we return an error indicating such to the user. + * at least three times, but we attempt to detect this limit during + * init and check it here. if the kernel rejects the request due to + * its size, we return an error indicating such to the user. */ - - /* calculate how many URBs we need */ for (i = 0; i < num_packets; i++) { - unsigned int space_remaining = MAX_ISO_BUFFER_LENGTH - this_urb_len; packet_len = transfer->iso_packet_desc[i].length; - if (packet_len > space_remaining) { - num_urbs++; - this_urb_len = packet_len; - /* check that we can actually support this packet length */ - if (this_urb_len > MAX_ISO_BUFFER_LENGTH) - return LIBUSB_ERROR_INVALID_PARAM; - } else { - this_urb_len += packet_len; + if (packet_len > max_iso_packet_len) { + usbi_warn(TRANSFER_CTX(transfer), + "iso packet length of %u bytes exceeds maximum of %u bytes", + packet_len, max_iso_packet_len); + return LIBUSB_ERROR_INVALID_PARAM; } + + total_len += packet_len; } - usbi_dbg("need %d %dk URBs for transfer", num_urbs, MAX_ISO_BUFFER_LENGTH / 1024); + + if (transfer->length < (int)total_len) + return LIBUSB_ERROR_INVALID_PARAM; + + /* usbfs limits the number of iso packets per URB */ + num_urbs = (num_packets + (MAX_ISO_PACKETS_PER_URB - 1)) / MAX_ISO_PACKETS_PER_URB; + + usbi_dbg("need %d urbs for new transfer with length %d", num_urbs, + transfer->length); urbs = calloc(num_urbs, sizeof(*urbs)); if (!urbs) @@ -2017,31 +2089,15 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) tpriv->iso_packet_offset = 0; /* allocate + initialize each URB with the correct number of packets */ - for (i = 0; i < num_urbs; i++) { + num_packets_remaining = num_packets; + for (i = 0, j = 0; i < num_urbs; i++) { + int num_packets_in_urb = MIN(num_packets_remaining, MAX_ISO_PACKETS_PER_URB); struct usbfs_urb *urb; - unsigned int space_remaining_in_urb = MAX_ISO_BUFFER_LENGTH; - int urb_packet_offset = 0; - unsigned char *urb_buffer_orig = urb_buffer; - int j; + size_t alloc_size; int k; - /* swallow up all the packets we can fit into this URB */ - while (packet_offset < transfer->num_iso_packets) { - packet_len = transfer->iso_packet_desc[packet_offset].length; - if (packet_len <= space_remaining_in_urb) { - /* throw it in */ - urb_packet_offset++; - packet_offset++; - space_remaining_in_urb -= packet_len; - urb_buffer += packet_len; - } else { - /* it can't fit, save it for the next URB */ - break; - } - } - alloc_size = sizeof(*urb) - + (urb_packet_offset * sizeof(struct usbfs_iso_packet_desc)); + + (num_packets_in_urb * sizeof(struct usbfs_iso_packet_desc)); urb = calloc(1, alloc_size); if (!urb) { free_iso_urbs(tpriv); @@ -2050,10 +2106,10 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) urbs[i] = urb; /* populate packet lengths */ - for (j = 0, k = packet_offset - urb_packet_offset; - k < packet_offset; k++, j++) { - packet_len = transfer->iso_packet_desc[k].length; - urb->iso_frame_desc[j].length = packet_len; + for (k = 0; k < num_packets_in_urb; j++, k++) { + packet_len = transfer->iso_packet_desc[j].length; + urb->buffer_length += packet_len; + urb->iso_frame_desc[k].length = packet_len; } urb->usercontext = itransfer; @@ -2061,8 +2117,11 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) /* FIXME: interface for non-ASAP data? */ urb->flags = USBFS_URB_ISO_ASAP; urb->endpoint = transfer->endpoint; - urb->number_of_packets = urb_packet_offset; - urb->buffer = urb_buffer_orig; + urb->number_of_packets = num_packets_in_urb; + urb->buffer = urb_buffer; + + urb_buffer += urb->buffer_length; + num_packets_remaining -= num_packets_in_urb; } /* submit URBs */ @@ -2075,6 +2134,10 @@ static int submit_iso_transfer(struct usbi_transfer *itransfer) usbi_warn(TRANSFER_CTX(transfer), "submiturb failed, transfer too large"); r = LIBUSB_ERROR_INVALID_PARAM; + } else if (errno == EMSGSIZE) { + usbi_warn(TRANSFER_CTX(transfer), + "submiturb failed, iso packet length too large"); + r = LIBUSB_ERROR_INVALID_PARAM; } else { usbi_err(TRANSFER_CTX(transfer), "submiturb failed error %d errno=%d", r, errno); @@ -2213,7 +2276,6 @@ static void op_clear_transfer_priv(struct usbi_transfer *itransfer) USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct linux_transfer_priv *tpriv = usbi_transfer_get_os_priv(itransfer); - /* urbs can be freed also in submit_transfer so lock mutex first */ switch (transfer->type) { case LIBUSB_TRANSFER_TYPE_CONTROL: case LIBUSB_TRANSFER_TYPE_BULK: @@ -2685,7 +2747,7 @@ static clockid_t op_get_timerfd_clockid(void) } #endif -const struct usbi_os_backend linux_usbfs_backend = { +const struct usbi_os_backend usbi_backend = { .name = "Linux usbfs", .caps = USBI_CAP_HAS_HID_ACCESS|USBI_CAP_SUPPORTS_DETACH_KERNEL_DRIVER, .init = op_init, diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.h similarity index 99% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.h index 8bd3ebcb163e..24496325f6b6 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/linux_usbfs.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/linux_usbfs.h @@ -81,10 +81,11 @@ struct usbfs_iso_packet_desc { unsigned int status; }; -#define MAX_ISO_BUFFER_LENGTH 49152 * 128 #define MAX_BULK_BUFFER_LENGTH 16384 #define MAX_CTRL_BUFFER_LENGTH 4096 +#define MAX_ISO_PACKETS_PER_URB 128 + struct usbfs_urb { unsigned char type; unsigned char endpoint; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/netbsd_usb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/netbsd_usb.c similarity index 98% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/netbsd_usb.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/netbsd_usb.c index ad1ede73e10f..d9c059a7764f 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/netbsd_usb.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/netbsd_usb.c @@ -86,11 +86,12 @@ static int _sync_control_transfer(struct usbi_transfer *); static int _sync_gen_transfer(struct usbi_transfer *); static int _access_endpoint(struct libusb_transfer *); -const struct usbi_os_backend netbsd_backend = { +const struct usbi_os_backend usbi_backend = { "Synchronous NetBSD backend", 0, NULL, /* init() */ NULL, /* exit() */ + NULL, /* set_option() */ netbsd_get_device_list, NULL, /* hotplug_poll */ netbsd_open, @@ -131,6 +132,7 @@ const struct usbi_os_backend netbsd_backend = { netbsd_handle_transfer_completion, netbsd_clock_gettime, + 0, /* context_priv_size */ sizeof(struct device_priv), sizeof(struct handle_priv), 0, /* transfer_priv_size */ @@ -212,7 +214,6 @@ netbsd_get_device_list(struct libusb_context * ctx, int netbsd_open(struct libusb_device_handle *handle) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; dpriv->fd = open(dpriv->devnode, O_RDWR); @@ -230,7 +231,6 @@ netbsd_open(struct libusb_device_handle *handle) void netbsd_close(struct libusb_device_handle *handle) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; usbi_dbg("close: fd %d", dpriv->fd); diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/openbsd_usb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/openbsd_usb.c similarity index 99% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/openbsd_usb.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/openbsd_usb.c index c660257114b5..f174e496c44d 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/openbsd_usb.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/openbsd_usb.c @@ -89,11 +89,12 @@ static int _access_endpoint(struct libusb_transfer *); static int _bus_open(int); -const struct usbi_os_backend openbsd_backend = { +const struct usbi_os_backend usbi_backend = { "Synchronous OpenBSD backend", 0, NULL, /* init() */ NULL, /* exit() */ + NULL, /* set_option() */ obsd_get_device_list, NULL, /* hotplug_poll */ obsd_open, @@ -134,6 +135,7 @@ const struct usbi_os_backend openbsd_backend = { obsd_handle_transfer_completion, obsd_clock_gettime, + 0, /* context_priv_size */ sizeof(struct device_priv), sizeof(struct handle_priv), 0, /* transfer_priv_size */ @@ -246,7 +248,6 @@ obsd_get_device_list(struct libusb_context * ctx, int obsd_open(struct libusb_device_handle *handle) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; char devnode[16]; @@ -270,7 +271,6 @@ obsd_open(struct libusb_device_handle *handle) void obsd_close(struct libusb_device_handle *handle) { - struct handle_priv *hpriv = (struct handle_priv *)handle->os_priv; struct device_priv *dpriv = (struct device_priv *)handle->dev->os_priv; if (dpriv->devname) { diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_posix.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_posix.c similarity index 56% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/poll_posix.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/poll_posix.c index e2f55a57a140..337714aa6bbe 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_posix.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_posix.c @@ -29,25 +29,56 @@ int usbi_pipe(int pipefd[2]) { +#if defined(HAVE_PIPE2) + int ret = pipe2(pipefd, O_CLOEXEC); +#else int ret = pipe(pipefd); +#endif + if (ret != 0) { + usbi_err(NULL, "failed to create pipe (%d)", errno); return ret; } + +#if !defined(HAVE_PIPE2) && defined(FD_CLOEXEC) + ret = fcntl(pipefd[0], F_GETFD); + if (ret == -1) { + usbi_err(NULL, "failed to get pipe fd flags (%d)", errno); + goto err_close_pipe; + } + ret = fcntl(pipefd[0], F_SETFD, ret | FD_CLOEXEC); + if (ret == -1) { + usbi_err(NULL, "failed to set pipe fd flags (%d)", errno); + goto err_close_pipe; + } + + ret = fcntl(pipefd[1], F_GETFD); + if (ret == -1) { + usbi_err(NULL, "failed to get pipe fd flags (%d)", errno); + goto err_close_pipe; + } + ret = fcntl(pipefd[1], F_SETFD, ret | FD_CLOEXEC); + if (ret == -1) { + usbi_err(NULL, "failed to set pipe fd flags (%d)", errno); + goto err_close_pipe; + } +#endif + ret = fcntl(pipefd[1], F_GETFL); if (ret == -1) { - usbi_dbg("Failed to get pipe fd flags: %d", errno); + usbi_err(NULL, "failed to get pipe fd status flags (%d)", errno); goto err_close_pipe; } ret = fcntl(pipefd[1], F_SETFL, ret | O_NONBLOCK); - if (ret != 0) { - usbi_dbg("Failed to set non-blocking on new pipe: %d", errno); + if (ret == -1) { + usbi_err(NULL, "failed to set pipe fd status flags (%d)", errno); goto err_close_pipe; } return 0; err_close_pipe: - usbi_close(pipefd[0]); - usbi_close(pipefd[1]); + close(pipefd[0]); + close(pipefd[1]); return ret; } diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_posix.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_posix.h similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/poll_posix.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/poll_posix.h diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.c new file mode 100644 index 000000000000..4d283333d18f --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.c @@ -0,0 +1,364 @@ +/* + * poll_windows: poll compatibility wrapper for Windows + * Copyright © 2017 Chris Dickens + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* + * poll() and pipe() Windows compatibility layer for libusb 1.0 + * + * The way this layer works is by using OVERLAPPED with async I/O transfers, as + * OVERLAPPED have an associated event which is flagged for I/O completion. + * + * For USB pollable async I/O, you would typically: + * - obtain a Windows HANDLE to a file or device that has been opened in + * OVERLAPPED mode + * - call usbi_create_fd with this handle to obtain a custom fd. + * - leave the core functions call the poll routine and flag POLLIN/POLLOUT + * + * The pipe pollable synchronous I/O works using the overlapped event associated + * with a fake pipe. The read/write functions are only meant to be used in that + * context. + */ +#include + +#include +#include +#include + +#include "libusbi.h" +#include "windows_common.h" + +// public fd data +const struct winfd INVALID_WINFD = { -1, NULL }; + +// private data +struct file_descriptor { + enum fd_type { FD_TYPE_PIPE, FD_TYPE_TRANSFER } type; + OVERLAPPED overlapped; +}; + +static usbi_mutex_static_t fd_table_lock = USBI_MUTEX_INITIALIZER; +static struct file_descriptor *fd_table[MAX_FDS]; + +static struct file_descriptor *create_fd(enum fd_type type) +{ + struct file_descriptor *fd = calloc(1, sizeof(*fd)); + if (fd == NULL) + return NULL; + fd->overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + if (fd->overlapped.hEvent == NULL) { + free(fd); + return NULL; + } + fd->type = type; + return fd; +} + +static void free_fd(struct file_descriptor *fd) +{ + CloseHandle(fd->overlapped.hEvent); + free(fd); +} + +/* + * Create both an fd and an OVERLAPPED, so that it can be used with our + * polling function + * The handle MUST support overlapped transfers (usually requires CreateFile + * with FILE_FLAG_OVERLAPPED) + * Return a pollable file descriptor struct, or INVALID_WINFD on error + * + * Note that the fd returned by this function is a per-transfer fd, rather + * than a per-session fd and cannot be used for anything else but our + * custom functions. + * if you plan to do R/W on the same handle, you MUST create 2 fds: one for + * read and one for write. Using a single R/W fd is unsupported and will + * produce unexpected results + */ +struct winfd usbi_create_fd(void) +{ + struct file_descriptor *fd; + struct winfd wfd; + + fd = create_fd(FD_TYPE_TRANSFER); + if (fd == NULL) + return INVALID_WINFD; + + usbi_mutex_static_lock(&fd_table_lock); + for (wfd.fd = 0; wfd.fd < MAX_FDS; wfd.fd++) { + if (fd_table[wfd.fd] != NULL) + continue; + fd_table[wfd.fd] = fd; + break; + } + usbi_mutex_static_unlock(&fd_table_lock); + + if (wfd.fd == MAX_FDS) { + free_fd(fd); + return INVALID_WINFD; + } + + wfd.overlapped = &fd->overlapped; + + return wfd; +} + +static int check_pollfds(struct pollfd *fds, unsigned int nfds, + HANDLE *wait_handles, DWORD *nb_wait_handles) +{ + struct file_descriptor *fd; + unsigned int n; + int nready = 0; + + usbi_mutex_static_lock(&fd_table_lock); + + for (n = 0; n < nfds; ++n) { + fds[n].revents = 0; + + // Keep it simple - only allow either POLLIN *or* POLLOUT + assert((fds[n].events == POLLIN) || (fds[n].events == POLLOUT)); + if ((fds[n].events != POLLIN) && (fds[n].events != POLLOUT)) { + fds[n].revents = POLLNVAL; + nready++; + continue; + } + + if ((fds[n].fd >= 0) && (fds[n].fd < MAX_FDS)) + fd = fd_table[fds[n].fd]; + else + fd = NULL; + + assert(fd != NULL); + if (fd == NULL) { + fds[n].revents = POLLNVAL; + nready++; + continue; + } + + if (HasOverlappedIoCompleted(&fd->overlapped) + && (WaitForSingleObject(fd->overlapped.hEvent, 0) == WAIT_OBJECT_0)) { + fds[n].revents = fds[n].events; + nready++; + } else if (wait_handles != NULL) { + if (*nb_wait_handles == MAXIMUM_WAIT_OBJECTS) { + usbi_warn(NULL, "too many HANDLEs to wait on"); + continue; + } + wait_handles[*nb_wait_handles] = fd->overlapped.hEvent; + (*nb_wait_handles)++; + } + } + + usbi_mutex_static_unlock(&fd_table_lock); + + return nready; +} +/* + * POSIX poll equivalent, using Windows OVERLAPPED + * Currently, this function only accepts one of POLLIN or POLLOUT per fd + * (but you can create multiple fds from the same handle for read and write) + */ +int usbi_poll(struct pollfd *fds, unsigned int nfds, int timeout) +{ + HANDLE wait_handles[MAXIMUM_WAIT_OBJECTS]; + DWORD nb_wait_handles = 0; + DWORD ret; + int nready; + + nready = check_pollfds(fds, nfds, wait_handles, &nb_wait_handles); + + // If nothing was triggered, wait on all fds that require it + if ((nready == 0) && (nb_wait_handles != 0) && (timeout != 0)) { + ret = WaitForMultipleObjects(nb_wait_handles, wait_handles, + FALSE, (timeout < 0) ? INFINITE : (DWORD)timeout); + if (ret < (WAIT_OBJECT_0 + nb_wait_handles)) { + nready = check_pollfds(fds, nfds, NULL, NULL); + } else if (ret != WAIT_TIMEOUT) { + if (ret == WAIT_FAILED) + usbi_err(NULL, "WaitForMultipleObjects failed: %u", (unsigned int)GetLastError()); + nready = -1; + } + } + + return nready; +} + +/* + * close a fake file descriptor + */ +int usbi_close(int _fd) +{ + struct file_descriptor *fd; + + if (_fd < 0 || _fd >= MAX_FDS) + goto err_badfd; + + usbi_mutex_static_lock(&fd_table_lock); + fd = fd_table[_fd]; + fd_table[_fd] = NULL; + usbi_mutex_static_unlock(&fd_table_lock); + + if (fd == NULL) + goto err_badfd; + + if (fd->type == FD_TYPE_PIPE) { + // InternalHigh is our reference count + fd->overlapped.InternalHigh--; + if (fd->overlapped.InternalHigh == 0) + free_fd(fd); + } else { + free_fd(fd); + } + + return 0; + +err_badfd: + errno = EBADF; + return -1; +} + +/* +* Create a fake pipe. +* As libusb only uses pipes for signaling, all we need from a pipe is an +* event. To that extent, we create a single wfd and overlapped as a means +* to access that event. +*/ +int usbi_pipe(int filedes[2]) +{ + struct file_descriptor *fd; + int r_fd = -1, w_fd = -1; + int i; + + fd = create_fd(FD_TYPE_PIPE); + if (fd == NULL) { + errno = ENOMEM; + return -1; + } + + // Use InternalHigh as a reference count + fd->overlapped.Internal = STATUS_PENDING; + fd->overlapped.InternalHigh = 2; + + usbi_mutex_static_lock(&fd_table_lock); + do { + for (i = 0; i < MAX_FDS; i++) { + if (fd_table[i] != NULL) + continue; + if (r_fd == -1) { + r_fd = i; + } else if (w_fd == -1) { + w_fd = i; + break; + } + } + + if (i == MAX_FDS) + break; + + fd_table[r_fd] = fd; + fd_table[w_fd] = fd; + + } while (0); + usbi_mutex_static_unlock(&fd_table_lock); + + if (i == MAX_FDS) { + free_fd(fd); + errno = EMFILE; + return -1; + } + + filedes[0] = r_fd; + filedes[1] = w_fd; + + return 0; +} + +/* + * synchronous write for fake "pipe" signaling + */ +ssize_t usbi_write(int fd, const void *buf, size_t count) +{ + int error = EBADF; + + UNUSED(buf); + + if (fd < 0 || fd >= MAX_FDS) + goto err_out; + + if (count != sizeof(unsigned char)) { + usbi_err(NULL, "this function should only used for signaling"); + error = EINVAL; + goto err_out; + } + + usbi_mutex_static_lock(&fd_table_lock); + if ((fd_table[fd] != NULL) && (fd_table[fd]->type == FD_TYPE_PIPE)) { + assert(fd_table[fd]->overlapped.Internal == STATUS_PENDING); + assert(fd_table[fd]->overlapped.InternalHigh == 2); + fd_table[fd]->overlapped.Internal = STATUS_WAIT_0; + SetEvent(fd_table[fd]->overlapped.hEvent); + error = 0; + } + usbi_mutex_static_unlock(&fd_table_lock); + + if (error) + goto err_out; + + return sizeof(unsigned char); + +err_out: + errno = error; + return -1; +} + +/* + * synchronous read for fake "pipe" signaling + */ +ssize_t usbi_read(int fd, void *buf, size_t count) +{ + int error = EBADF; + + UNUSED(buf); + + if (fd < 0 || fd >= MAX_FDS) + goto err_out; + + if (count != sizeof(unsigned char)) { + usbi_err(NULL, "this function should only used for signaling"); + error = EINVAL; + goto err_out; + } + + usbi_mutex_static_lock(&fd_table_lock); + if ((fd_table[fd] != NULL) && (fd_table[fd]->type == FD_TYPE_PIPE)) { + assert(fd_table[fd]->overlapped.Internal == STATUS_WAIT_0); + assert(fd_table[fd]->overlapped.InternalHigh == 2); + fd_table[fd]->overlapped.Internal = STATUS_PENDING; + ResetEvent(fd_table[fd]->overlapped.hEvent); + error = 0; + } + usbi_mutex_static_unlock(&fd_table_lock); + + if (error) + goto err_out; + + return sizeof(unsigned char); + +err_out: + errno = error; + return -1; +} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.h similarity index 70% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.h index aa4c985daecd..bd22c7f62308 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/poll_windows.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/poll_windows.h @@ -2,6 +2,7 @@ * Windows compat: POSIX compatibility wrapper * Copyright © 2012-2013 RealVNC Ltd. * Copyright © 2009-2010 Pete Batard + * Copyright © 2016-2018 Chris Dickens * With contributions from Michael Plante, Orin Eman et al. * Parts of poll implementation from libusb-win32, by Stephan Meyer et al. * @@ -40,21 +41,6 @@ #define DUMMY_HANDLE ((HANDLE)(LONG_PTR)-2) -/* Windows versions */ -enum windows_version { - WINDOWS_CE = -2, - WINDOWS_UNDEFINED = -1, - WINDOWS_UNSUPPORTED = 0, - WINDOWS_XP = 0x51, - WINDOWS_2003 = 0x52, // Also XP x64 - WINDOWS_VISTA = 0x60, - WINDOWS_7 = 0x61, - WINDOWS_8 = 0x62, - WINDOWS_8_1_OR_LATER = 0x63, - WINDOWS_MAX -}; -extern int windows_version; - #define MAX_FDS 256 #define POLLIN 0x0001 /* There is data to read */ @@ -65,46 +51,26 @@ extern int windows_version; #define POLLNVAL 0x0020 /* Invalid request: fd not open */ struct pollfd { - int fd; /* file descriptor */ - short events; /* requested events */ - short revents; /* returned events */ -}; - -// access modes -enum rw_type { - RW_NONE, - RW_READ, - RW_WRITE, + int fd; /* file descriptor */ + short events; /* requested events */ + short revents; /* returned events */ }; -// fd struct that can be used for polling on Windows -typedef int cancel_transfer(struct usbi_transfer *itransfer); - struct winfd { - int fd; // what's exposed to libusb core - HANDLE handle; // what we need to attach overlapped to the I/O op, so we can poll it - OVERLAPPED* overlapped; // what will report our I/O status - struct usbi_transfer *itransfer; // Associated transfer, or NULL if completed - cancel_transfer *cancel_fn; // Function pointer to cancel transfer API - enum rw_type rw; // I/O transfer direction: read *XOR* write (NOT BOTH) + int fd; // what's exposed to libusb core + OVERLAPPED *overlapped; // what will report our I/O status }; + extern const struct winfd INVALID_WINFD; +struct winfd usbi_create_fd(void); + int usbi_pipe(int pipefd[2]); int usbi_poll(struct pollfd *fds, unsigned int nfds, int timeout); ssize_t usbi_write(int fd, const void *buf, size_t count); ssize_t usbi_read(int fd, void *buf, size_t count); int usbi_close(int fd); -void init_polling(void); -void exit_polling(void); -struct winfd usbi_create_fd(HANDLE handle, int access_mode, - struct usbi_transfer *transfer, cancel_transfer *cancel_fn); -void usbi_free_fd(struct winfd* winfd); -struct winfd fd_to_winfd(int fd); -struct winfd handle_to_winfd(HANDLE handle); -struct winfd overlapped_to_winfd(OVERLAPPED* overlapped); - /* * Timeval operations */ diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.c similarity index 71% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.c index cb608976b642..7150a3e9d970 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -28,21 +29,34 @@ #include #include #include +#include #include #include #include +#include +#include #include +#include #include #include #include "libusbi.h" #include "sunos_usb.h" +#define UPDATEDRV_PATH "/usr/sbin/update_drv" +#define UPDATEDRV "update_drv" + +typedef list_t string_list_t; +typedef struct string_node { + char *string; + list_node_t link; +} string_node_t; + /* * Backend functions */ static int sunos_init(struct libusb_context *); -static void sunos_exit(void); +static void sunos_exit(struct libusb_context *); static int sunos_get_device_list(struct libusb_context *, struct discovered_devs **); static int sunos_open(struct libusb_device_handle *); @@ -67,6 +81,162 @@ static int sunos_cancel_transfer(struct usbi_transfer *); static void sunos_clear_transfer_priv(struct usbi_transfer *); static int sunos_handle_transfer_completion(struct usbi_transfer *); static int sunos_clock_gettime(int, struct timespec *); +static int sunos_kernel_driver_active(struct libusb_device_handle *, int interface); +static int sunos_detach_kernel_driver (struct libusb_device_handle *dev, int interface_number); +static int sunos_attach_kernel_driver (struct libusb_device_handle *dev, int interface_number); +static int sunos_usb_open_ep0(sunos_dev_handle_priv_t *hpriv, sunos_dev_priv_t *dpriv); +static int sunos_usb_ioctl(struct libusb_device *dev, int cmd); + +static struct devctl_iocdata iocdata; +static int sunos_get_link(di_devlink_t devlink, void *arg) +{ + walk_link_t *larg = (walk_link_t *)arg; + const char *p; + const char *q; + + if (larg->path) { + char *content = (char *)di_devlink_content(devlink); + char *start = strstr(content, "/devices/"); + start += strlen("/devices"); + usbi_dbg("%s", start); + + /* line content must have minor node */ + if (start == NULL || + strncmp(start, larg->path, larg->len) != 0 || + start[larg->len] != ':') + return (DI_WALK_CONTINUE); + } + + p = di_devlink_path(devlink); + q = strrchr(p, '/'); + usbi_dbg("%s", q); + + *(larg->linkpp) = strndup(p, strlen(p) - strlen(q)); + + return (DI_WALK_TERMINATE); +} + + +static int sunos_physpath_to_devlink( + const char *node_path, const char *match, char **link_path) +{ + walk_link_t larg; + di_devlink_handle_t hdl; + + *link_path = NULL; + larg.linkpp = link_path; + if ((hdl = di_devlink_init(NULL, 0)) == NULL) { + usbi_dbg("di_devlink_init failure"); + return (-1); + } + + larg.len = strlen(node_path); + larg.path = (char *)node_path; + + (void) di_devlink_walk(hdl, match, NULL, DI_PRIMARY_LINK, + (void *)&larg, sunos_get_link); + + (void) di_devlink_fini(&hdl); + + if (*link_path == NULL) { + usbi_dbg("there is no devlink for this path"); + return (-1); + } + + return 0; +} + +static int +sunos_usb_ioctl(struct libusb_device *dev, int cmd) +{ + int fd; + nvlist_t *nvlist; + char *end; + char *phypath; + char *hubpath; + char path_arg[PATH_MAX]; + sunos_dev_priv_t *dpriv; + devctl_ap_state_t devctl_ap_state; + + dpriv = (sunos_dev_priv_t *)dev->os_priv; + phypath = dpriv->phypath; + + end = strrchr(phypath, '/'); + if (end == NULL) + return (-1); + hubpath = strndup(phypath, end - phypath); + if (hubpath == NULL) + return (-1); + + end = strrchr(hubpath, '@'); + if (end == NULL) { + free(hubpath); + return (-1); + } + end++; + usbi_dbg("unitaddr: %s", end); + + nvlist_alloc(&nvlist, NV_UNIQUE_NAME_TYPE, KM_NOSLEEP); + nvlist_add_int32(nvlist, "port", dev->port_number); + //find the hub path + snprintf(path_arg, sizeof(path_arg), "/devices%s:hubd", hubpath); + usbi_dbg("ioctl hub path: %s", path_arg); + + fd = open(path_arg, O_RDONLY); + if (fd < 0) { + usbi_err(DEVICE_CTX(dev), "open failed: %d (%s)", errno, strerror(errno)); + nvlist_free(nvlist); + free(hubpath); + return (-1); + } + + memset(&iocdata, 0, sizeof(iocdata)); + memset(&devctl_ap_state, 0, sizeof(devctl_ap_state)); + + nvlist_pack(nvlist, (char **)&iocdata.nvl_user, &iocdata.nvl_usersz, NV_ENCODE_NATIVE, 0); + + iocdata.cmd = DEVCTL_AP_GETSTATE; + iocdata.flags = 0; + iocdata.c_nodename = "hub"; + iocdata.c_unitaddr = end; + iocdata.cpyout_buf = &devctl_ap_state; + usbi_dbg("%p, %d", iocdata.nvl_user, iocdata.nvl_usersz); + + errno = 0; + if (ioctl(fd, DEVCTL_AP_GETSTATE, &iocdata) == -1) { + usbi_err(DEVICE_CTX(dev), "ioctl failed: fd %d, cmd %x, errno %d (%s)", + fd, DEVCTL_AP_GETSTATE, errno, strerror(errno)); + } else { + usbi_dbg("dev rstate: %d", devctl_ap_state.ap_rstate); + usbi_dbg("dev ostate: %d", devctl_ap_state.ap_ostate); + } + + errno = 0; + iocdata.cmd = cmd; + if (ioctl(fd, (int)cmd, &iocdata) != 0) { + usbi_err(DEVICE_CTX(dev), "ioctl failed: fd %d, cmd %x, errno %d (%s)", + fd, cmd, errno, strerror(errno)); + sleep(2); + } + + close(fd); + free(iocdata.nvl_user); + nvlist_free(nvlist); + free(hubpath); + + return (-errno); +} + +static int +sunos_kernel_driver_active(struct libusb_device_handle *dev, int interface) +{ + sunos_dev_priv_t *dpriv; + dpriv = (sunos_dev_priv_t *)dev->dev->os_priv; + + usbi_dbg("%s", dpriv->ugenpath); + + return (dpriv->ugenpath == NULL); +} /* * Private functions @@ -79,11 +249,229 @@ static int sunos_init(struct libusb_context *ctx) return (LIBUSB_SUCCESS); } -static void sunos_exit(void) +static void sunos_exit(struct libusb_context *ctx) { usbi_dbg(""); } +static string_list_t * +sunos_new_string_list(void) +{ + string_list_t *list; + + list = calloc(1, sizeof(*list)); + if (list != NULL) + list_create(list, sizeof(string_node_t), + offsetof(string_node_t, link)); + + return (list); +} + +static int +sunos_append_to_string_list(string_list_t *list, const char *arg) +{ + string_node_t *np; + + np = calloc(1, sizeof(*np)); + if (!np) + return (-1); + + np->string = strdup(arg); + if (!np->string) { + free(np); + return (-1); + } + + list_insert_tail(list, np); + + return (0); +} + +static void +sunos_free_string_list(string_list_t *list) +{ + string_node_t *np; + + while ((np = list_remove_head(list)) != NULL) { + free(np->string); + free(np); + } + + free(list); +} + +static char ** +sunos_build_argv_list(string_list_t *list) +{ + char **argv_list; + string_node_t *np; + int n; + + n = 1; /* Start at 1 for NULL terminator */ + for (np = list_head(list); np != NULL; np = list_next(list, np)) + n++; + + argv_list = calloc(n, sizeof(char *)); + if (argv_list == NULL) + return NULL; + + n = 0; + for (np = list_head(list); np != NULL; np = list_next(list, np)) + argv_list[n++] = np->string; + + return (argv_list); +} + + +static int +sunos_exec_command(struct libusb_context *ctx, const char *path, + string_list_t *list) +{ + pid_t pid; + int status; + int waitstat; + int exit_status; + char **argv_list; + + argv_list = sunos_build_argv_list(list); + if (argv_list == NULL) + return (-1); + + pid = fork(); + if (pid == 0) { + /* child */ + execv(path, argv_list); + _exit(127); + } else if (pid > 0) { + /* parent */ + do { + waitstat = waitpid(pid, &status, 0); + } while ((waitstat == -1 && errno == EINTR) || + (waitstat == 0 && !WIFEXITED(status) && !WIFSIGNALED(status))); + + if (waitstat == 0) { + if (WIFEXITED(status)) + exit_status = WEXITSTATUS(status); + else + exit_status = WTERMSIG(status); + } else { + usbi_err(ctx, "waitpid failed: errno %d (%s)", errno, strerror(errno)); + exit_status = -1; + } + } else { + /* fork failed */ + usbi_err(ctx, "fork failed: errno %d (%s)", errno, strerror(errno)); + exit_status = -1; + } + + free(argv_list); + + return (exit_status); +} + +static int +sunos_detach_kernel_driver(struct libusb_device_handle *dev_handle, + int interface_number) +{ + struct libusb_context *ctx = HANDLE_CTX(dev_handle); + string_list_t *list; + char path_arg[PATH_MAX]; + sunos_dev_priv_t *dpriv; + int r; + + dpriv = (sunos_dev_priv_t *)dev_handle->dev->os_priv; + snprintf(path_arg, sizeof(path_arg), "\'\"%s\"\'", dpriv->phypath); + usbi_dbg("%s", path_arg); + + list = sunos_new_string_list(); + if (list == NULL) + return (LIBUSB_ERROR_NO_MEM); + + /* attach ugen driver */ + r = 0; + r |= sunos_append_to_string_list(list, UPDATEDRV); + r |= sunos_append_to_string_list(list, "-a"); /* add rule */ + r |= sunos_append_to_string_list(list, "-i"); /* specific device */ + r |= sunos_append_to_string_list(list, path_arg); /* physical path */ + r |= sunos_append_to_string_list(list, "ugen"); + if (r) { + sunos_free_string_list(list); + return (LIBUSB_ERROR_NO_MEM); + } + + r = sunos_exec_command(ctx, UPDATEDRV_PATH, list); + sunos_free_string_list(list); + if (r < 0) + return (LIBUSB_ERROR_OTHER); + + /* reconfigure the driver node */ + r = 0; + r |= sunos_usb_ioctl(dev_handle->dev, DEVCTL_AP_DISCONNECT); + r |= sunos_usb_ioctl(dev_handle->dev, DEVCTL_AP_CONFIGURE); + if (r) + usbi_warn(HANDLE_CTX(dev_handle), "one or more ioctls failed"); + + snprintf(path_arg, sizeof(path_arg), "^usb/%x.%x", dpriv->dev_descr.idVendor, + dpriv->dev_descr.idProduct); + sunos_physpath_to_devlink(dpriv->phypath, path_arg, &dpriv->ugenpath); + + if (access(dpriv->ugenpath, F_OK) == -1) { + usbi_err(HANDLE_CTX(dev_handle), "fail to detach kernel driver"); + return (LIBUSB_ERROR_IO); + } + + return sunos_usb_open_ep0((sunos_dev_handle_priv_t *)dev_handle->os_priv, dpriv); +} + +static int +sunos_attach_kernel_driver(struct libusb_device_handle *dev_handle, + int interface_number) +{ + struct libusb_context *ctx = HANDLE_CTX(dev_handle); + string_list_t *list; + char path_arg[PATH_MAX]; + sunos_dev_priv_t *dpriv; + int r; + + /* we open the dev in detach driver, so we need close it first. */ + sunos_close(dev_handle); + + dpriv = (sunos_dev_priv_t *)dev_handle->dev->os_priv; + snprintf(path_arg, sizeof(path_arg), "\'\"%s\"\'", dpriv->phypath); + usbi_dbg("%s", path_arg); + + list = sunos_new_string_list(); + if (list == NULL) + return (LIBUSB_ERROR_NO_MEM); + + /* detach ugen driver */ + r = 0; + r |= sunos_append_to_string_list(list, UPDATEDRV); + r |= sunos_append_to_string_list(list, "-d"); /* add rule */ + r |= sunos_append_to_string_list(list, "-i"); /* specific device */ + r |= sunos_append_to_string_list(list, path_arg); /* physical path */ + r |= sunos_append_to_string_list(list, "ugen"); + if (r) { + sunos_free_string_list(list); + return (LIBUSB_ERROR_NO_MEM); + } + + r = sunos_exec_command(ctx, UPDATEDRV_PATH, list); + sunos_free_string_list(list); + if (r < 0) + return (LIBUSB_ERROR_OTHER); + + /* reconfigure the driver node */ + r = 0; + r |= sunos_usb_ioctl(dev_handle->dev, DEVCTL_AP_CONFIGURE); + r |= sunos_usb_ioctl(dev_handle->dev, DEVCTL_AP_DISCONNECT); + r |= sunos_usb_ioctl(dev_handle->dev, DEVCTL_AP_CONFIGURE); + if (r) + usbi_warn(HANDLE_CTX(dev_handle), "one or more ioctls failed"); + + return 0; +} + static int sunos_fill_in_dev_info(di_node_t node, struct libusb_device *dev) { @@ -93,6 +481,7 @@ sunos_fill_in_dev_info(di_node_t node, struct libusb_device *dev) uint8_t *rdata; struct libusb_device_descriptor *descr; sunos_dev_priv_t *dpriv = (sunos_dev_priv_t *)dev->os_priv; + char match_str[PATH_MAX]; /* Device descriptors */ proplen = di_prop_lookup_bytes(DDI_DEV_T_ANY, node, @@ -137,7 +526,11 @@ sunos_fill_in_dev_info(di_node_t node, struct libusb_device *dev) phypath = di_devfs_path(node); if (phypath) { dpriv->phypath = strdup(phypath); + snprintf(match_str, sizeof(match_str), "^usb/%x.%x", dpriv->dev_descr.idVendor, dpriv->dev_descr.idProduct); + usbi_dbg("match is %s", match_str); + sunos_physpath_to_devlink(dpriv->phypath, match_str, &dpriv->ugenpath); di_devfs_path_free(phypath); + } else { free(dpriv->raw_cfgdescr); @@ -170,111 +563,98 @@ sunos_fill_in_dev_info(di_node_t node, struct libusb_device *dev) return (LIBUSB_SUCCESS); } - static int sunos_add_devices(di_devlink_t link, void *arg) { struct devlink_cbarg *largs = (struct devlink_cbarg *)arg; struct node_args *nargs; - di_node_t myself, pnode; + di_node_t myself, dn; uint64_t session_id = 0; - uint16_t bdf = 0; + uint64_t sid = 0; + uint64_t bdf = 0; struct libusb_device *dev; sunos_dev_priv_t *devpriv; - const char *path, *newpath; - int n, i; + int n; + int i = 0; int *addr_prop; uint8_t bus_number = 0; + uint32_t * regbuf = NULL; + uint32_t reg; nargs = (struct node_args *)largs->nargs; myself = largs->myself; - if (nargs->last_ugenpath) { - /* the same node's links */ - return (DI_WALK_CONTINUE); - } /* * Construct session ID. - * session ID = ...parent hub addr|hub addr|dev addr. + * session ID = dev_addr | hub addr |parent hub addr|...|root hub bdf + * 8 bits 8bits 8 bits 16bits */ - pnode = myself; - i = 0; - while (pnode != DI_NODE_NIL) { - if (di_prop_exists(DDI_DEV_T_ANY, pnode, "root-hub") == 1) { - /* walk to root */ - uint32_t *regbuf = NULL; - uint32_t reg; - - n = di_prop_lookup_ints(DDI_DEV_T_ANY, pnode, "reg", - (int **)®buf); - reg = regbuf[0]; - bdf = (PCI_REG_BUS_G(reg) << 8) | - (PCI_REG_DEV_G(reg) << 3) | PCI_REG_FUNC_G(reg); - session_id |= (bdf << i * 8); - - /* same as 'unit-address' property */ - bus_number = - (PCI_REG_DEV_G(reg) << 3) | PCI_REG_FUNC_G(reg); - - usbi_dbg("device bus address=%s:%x", - di_bus_addr(pnode), bus_number); + if (myself == DI_NODE_NIL) + return (DI_WALK_CONTINUE); - break; - } + dn = myself; + /* find the root hub */ + while (di_prop_exists(DDI_DEV_T_ANY, dn, "root-hub") != 1) { + usbi_dbg("find_root_hub:%s", di_devfs_path(dn)); + n = di_prop_lookup_ints(DDI_DEV_T_ANY, dn, + "assigned-address", &addr_prop); + session_id |= ((addr_prop[0] & 0xff) << i++ * 8); + dn = di_parent_node(dn); + } + /* dn is the root hub node */ + n = di_prop_lookup_ints(DDI_DEV_T_ANY, dn, "reg", (int **)®buf); + reg = regbuf[0]; + bdf = (PCI_REG_BUS_G(reg) << 8) | (PCI_REG_DEV_G(reg) << 3) | PCI_REG_FUNC_G(reg); + /* bdf must larger than i*8 bits */ + session_id |= (bdf << i * 8); + bus_number = (PCI_REG_DEV_G(reg) << 3) | PCI_REG_FUNC_G(reg); + + usbi_dbg("device bus address=%s:%x, name:%s", + di_bus_addr(myself), bus_number, di_node_name(dn)); + usbi_dbg("session id org:%lx", session_id); + + /* dn is the usb device */ + for (dn = di_child_node(myself); dn != DI_NODE_NIL; dn = di_sibling_node(dn)) { + usbi_dbg("device path:%s", di_devfs_path(dn)); + /* skip hub devices, because its driver can not been unload */ + if (di_prop_lookup_ints(DDI_DEV_T_ANY, dn, "usb-port-count", &addr_prop) != -1) + continue; /* usb_addr */ - n = di_prop_lookup_ints(DDI_DEV_T_ANY, pnode, + n = di_prop_lookup_ints(DDI_DEV_T_ANY, dn, "assigned-address", &addr_prop); if ((n != 1) || (addr_prop[0] == 0)) { usbi_dbg("cannot get valid usb_addr"); - - return (DI_WALK_CONTINUE); + continue; } - session_id |= ((addr_prop[0] & 0xff) << i * 8); - if (++i > 7) - break; + sid = (session_id << 8) | (addr_prop[0] & 0xff) ; + usbi_dbg("session id %lx", sid); - pnode = di_parent_node(pnode); - } - - path = di_devlink_path(link); - dev = usbi_get_device_by_session_id(nargs->ctx, session_id); - if (dev == NULL) { - dev = usbi_alloc_device(nargs->ctx, session_id); + dev = usbi_get_device_by_session_id(nargs->ctx, sid); if (dev == NULL) { - usbi_dbg("can't alloc device"); - - return (DI_WALK_TERMINATE); - } - devpriv = (sunos_dev_priv_t *)dev->os_priv; - if ((newpath = strrchr(path, '/')) == NULL) { - libusb_unref_device(dev); - - return (DI_WALK_TERMINATE); - } - devpriv->ugenpath = strndup(path, strlen(path) - - strlen(newpath)); - dev->bus_number = bus_number; - - if (sunos_fill_in_dev_info(myself, dev) != LIBUSB_SUCCESS) { - libusb_unref_device(dev); + dev = usbi_alloc_device(nargs->ctx, sid); + if (dev == NULL) { + usbi_dbg("can't alloc device"); + continue; + } + devpriv = (sunos_dev_priv_t *)dev->os_priv; + dev->bus_number = bus_number; - return (DI_WALK_TERMINATE); - } - if (usbi_sanitize_device(dev) < 0) { - libusb_unref_device(dev); - usbi_dbg("sanatize failed: "); - return (DI_WALK_TERMINATE); + if (sunos_fill_in_dev_info(dn, dev) != LIBUSB_SUCCESS) { + libusb_unref_device(dev); + usbi_dbg("get infomation fail"); + continue; + } + if (usbi_sanitize_device(dev) < 0) { + libusb_unref_device(dev); + usbi_dbg("sanatize failed: "); + return (DI_WALK_TERMINATE); + } + } else { + devpriv = (sunos_dev_priv_t *)dev->os_priv; + usbi_dbg("Dev %s exists", devpriv->ugenpath); } - } else { - usbi_dbg("Dev %s exists", path); - } - - devpriv = (sunos_dev_priv_t *)dev->os_priv; - if (nargs->last_ugenpath == NULL) { - /* first device */ - nargs->last_ugenpath = devpriv->ugenpath; if (discovered_devs_append(*(nargs->discdevs), dev) == NULL) { usbi_dbg("cannot append device"); @@ -285,11 +665,11 @@ sunos_add_devices(di_devlink_t link, void *arg) * hereafter. Front end or app should take care of their ref. */ libusb_unref_device(dev); - } - usbi_dbg("Device %s %s id=0x%llx, devcount:%d, bdf=%x", - devpriv->ugenpath, path, (uint64_t)session_id, - (*nargs->discdevs)->len, bdf); + usbi_dbg("Device %s %s id=0x%llx, devcount:%d, bdf=%x", + devpriv->ugenpath, di_devfs_path(dn), (uint64_t)sid, + (*nargs->discdevs)->len, bdf); + } return (DI_WALK_CONTINUE); } @@ -303,14 +683,14 @@ sunos_walk_minor_node_link(di_node_t node, void *args) struct node_args *nargs = (struct node_args *)args; di_devlink_handle_t devlink_hdl = nargs->dlink_hdl; - /* walk each minor to find ugen devices */ + /* walk each minor to find usb devices */ while ((minor = di_minor_next(node, minor)) != DI_MINOR_NIL) { minor_path = di_devfs_minor_path(minor); arg.nargs = args; arg.myself = node; arg.minor = minor; (void) di_devlink_walk(devlink_hdl, - "^usb/[0-9a-f]+[.][0-9a-f]+", minor_path, + "^usb/hub[0-9]+", minor_path, DI_PRIMARY_LINK, (void *)&arg, sunos_add_devices); di_devfs_path_free(minor_path); } @@ -496,7 +876,7 @@ sunos_check_device_and_status_open(struct libusb_device_handle *hdl, usbi_dbg("can't find interface for endpoint 0x%02x", ep_addr); - return (LIBUSB_ERROR_ACCESS); + return (EACCES); } /* create filename */ @@ -603,6 +983,11 @@ sunos_open(struct libusb_device_handle *handle) hpriv->eps[i].statfd = -1; } + if (sunos_kernel_driver_active(handle, 0)) { + /* pretend we can open the device */ + return (LIBUSB_SUCCESS); + } + if ((ret = sunos_usb_open_ep0(hpriv, dpriv)) != LIBUSB_SUCCESS) { usbi_dbg("fail: %d", ret); return (ret); @@ -1010,9 +1395,7 @@ void sunos_destroy_device(struct libusb_device *dev) { sunos_dev_priv_t *dpriv = (sunos_dev_priv_t *)dev->os_priv; - - usbi_dbg(""); - + usbi_dbg("destroy everyting"); free(dpriv->raw_cfgdescr); free(dpriv->ugenpath); free(dpriv->phypath); @@ -1254,7 +1637,7 @@ sunos_usb_get_status(int fd) return (status); } -const struct usbi_os_backend sunos_backend = { +const struct usbi_os_backend usbi_backend = { .name = "Solaris", .caps = 0, .init = sunos_init, @@ -1276,9 +1659,9 @@ const struct usbi_os_backend sunos_backend = { .reset_device = sunos_reset_device, /* TODO */ .alloc_streams = NULL, .free_streams = NULL, - .kernel_driver_active = NULL, - .detach_kernel_driver = NULL, - .attach_kernel_driver = NULL, + .kernel_driver_active = sunos_kernel_driver_active, + .detach_kernel_driver = sunos_detach_kernel_driver, + .attach_kernel_driver = sunos_attach_kernel_driver, .destroy_device = sunos_destroy_device, .submit_transfer = sunos_submit_transfer, .cancel_transfer = sunos_cancel_transfer, diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.h similarity index 96% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.h index 574166031994..52bb3d33a0a8 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/sunos_usb.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/sunos_usb.h @@ -65,6 +65,12 @@ struct devlink_cbarg { di_minor_t minor; }; +typedef struct walk_link { + char *path; + int len; + char **linkpp; +} walk_link_t; + /* AIO callback args */ struct aio_callback_args{ struct libusb_transfer *transfer; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.c similarity index 92% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.c index a4f270bbe5bd..16a7578b81ff 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_posix.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.c @@ -29,7 +29,7 @@ # include # include #elif defined(__APPLE__) -# include +# include #elif defined(__CYGWIN__) # include #endif @@ -43,7 +43,7 @@ int usbi_cond_timedwait(pthread_cond_t *cond, struct timespec timeout; int r; - r = usbi_backend->clock_gettime(USBI_CLOCK_REALTIME, &timeout); + r = usbi_backend.clock_gettime(USBI_CLOCK_REALTIME, &timeout); if (r < 0) return r; @@ -59,7 +59,7 @@ int usbi_cond_timedwait(pthread_cond_t *cond, int usbi_get_tid(void) { - int ret = -1; + int ret; #if defined(__ANDROID__) ret = gettid(); #elif defined(__linux__) @@ -69,10 +69,11 @@ int usbi_get_tid(void) real thread support. For 5.1 and earlier, -1 is returned. */ ret = syscall(SYS_getthrid); #elif defined(__APPLE__) - ret = mach_thread_self(); - mach_port_deallocate(mach_task_self(), ret); + ret = (int)pthread_mach_thread_np(pthread_self()); #elif defined(__CYGWIN__) ret = GetCurrentThreadId(); +#else + ret = -1; #endif /* TODO: NetBSD thread ID support */ return ret; diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.h new file mode 100644 index 000000000000..9f1ef94bc7a8 --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_posix.h @@ -0,0 +1,102 @@ +/* + * libusb synchronization using POSIX Threads + * + * Copyright © 2010 Peter Stuge + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef LIBUSB_THREADS_POSIX_H +#define LIBUSB_THREADS_POSIX_H + +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#define USBI_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +typedef pthread_mutex_t usbi_mutex_static_t; +static inline void usbi_mutex_static_lock(usbi_mutex_static_t *mutex) +{ + (void)pthread_mutex_lock(mutex); +} +static inline void usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) +{ + (void)pthread_mutex_unlock(mutex); +} + +typedef pthread_mutex_t usbi_mutex_t; +static inline int usbi_mutex_init(usbi_mutex_t *mutex) +{ + return pthread_mutex_init(mutex, NULL); +} +static inline void usbi_mutex_lock(usbi_mutex_t *mutex) +{ + (void)pthread_mutex_lock(mutex); +} +static inline void usbi_mutex_unlock(usbi_mutex_t *mutex) +{ + (void)pthread_mutex_unlock(mutex); +} +static inline int usbi_mutex_trylock(usbi_mutex_t *mutex) +{ + return pthread_mutex_trylock(mutex); +} +static inline void usbi_mutex_destroy(usbi_mutex_t *mutex) +{ + (void)pthread_mutex_destroy(mutex); +} + +typedef pthread_cond_t usbi_cond_t; +static inline void usbi_cond_init(pthread_cond_t *cond) +{ + (void)pthread_cond_init(cond, NULL); +} +static inline int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) +{ + return pthread_cond_wait(cond, mutex); +} +int usbi_cond_timedwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, const struct timeval *tv); +static inline void usbi_cond_broadcast(usbi_cond_t *cond) +{ + (void)pthread_cond_broadcast(cond); +} +static inline void usbi_cond_destroy(usbi_cond_t *cond) +{ + (void)pthread_cond_destroy(cond); +} + +typedef pthread_key_t usbi_tls_key_t; +static inline void usbi_tls_key_create(usbi_tls_key_t *key) +{ + (void)pthread_key_create(key, NULL); +} +static inline void *usbi_tls_key_get(usbi_tls_key_t key) +{ + return pthread_getspecific(key); +} +static inline void usbi_tls_key_set(usbi_tls_key_t key, void *ptr) +{ + (void)pthread_setspecific(key, ptr); +} +static inline void usbi_tls_key_delete(usbi_tls_key_t key) +{ + (void)pthread_key_delete(key); +} + +int usbi_get_tid(void); + +#endif /* LIBUSB_THREADS_POSIX_H */ diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.c new file mode 100644 index 000000000000..409c49055392 --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.c @@ -0,0 +1,126 @@ +/* + * libusb synchronization on Microsoft Windows + * + * Copyright © 2010 Michael Plante + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include + +#include "libusbi.h" + +struct usbi_cond_perthread { + struct list_head list; + HANDLE event; +}; + +void usbi_mutex_static_lock(usbi_mutex_static_t *mutex) +{ + while (InterlockedExchange(mutex, 1L) == 1L) + SleepEx(0, TRUE); +} + +void usbi_cond_init(usbi_cond_t *cond) +{ + list_init(&cond->waiters); + list_init(&cond->not_waiting); +} + +static int usbi_cond_intwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, DWORD timeout_ms) +{ + struct usbi_cond_perthread *pos; + DWORD r; + + // Same assumption as usbi_cond_broadcast() holds + if (list_empty(&cond->not_waiting)) { + pos = malloc(sizeof(*pos)); + if (pos == NULL) + return ENOMEM; // This errno is not POSIX-allowed. + pos->event = CreateEvent(NULL, FALSE, FALSE, NULL); // auto-reset. + if (pos->event == NULL) { + free(pos); + return ENOMEM; + } + } else { + pos = list_first_entry(&cond->not_waiting, struct usbi_cond_perthread, list); + list_del(&pos->list); // remove from not_waiting list. + // Ensure the event is clear before waiting + WaitForSingleObject(pos->event, 0); + } + + list_add(&pos->list, &cond->waiters); + + LeaveCriticalSection(mutex); + r = WaitForSingleObject(pos->event, timeout_ms); + EnterCriticalSection(mutex); + + list_del(&pos->list); + list_add(&pos->list, &cond->not_waiting); + + if (r == WAIT_OBJECT_0) + return 0; + else if (r == WAIT_TIMEOUT) + return ETIMEDOUT; + else + return EINVAL; +} + +// N.B.: usbi_cond_*wait() can also return ENOMEM, even though pthread_cond_*wait cannot! +int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex) +{ + return usbi_cond_intwait(cond, mutex, INFINITE); +} + +int usbi_cond_timedwait(usbi_cond_t *cond, + usbi_mutex_t *mutex, const struct timeval *tv) +{ + DWORD millis; + + millis = (DWORD)(tv->tv_sec * 1000) + (tv->tv_usec / 1000); + /* round up to next millisecond */ + if (tv->tv_usec % 1000) + millis++; + return usbi_cond_intwait(cond, mutex, millis); +} + +void usbi_cond_broadcast(usbi_cond_t *cond) +{ + // Assumes mutex is locked; this is not in keeping with POSIX spec, but + // libusb does this anyway, so we simplify by not adding more sync + // primitives to the CV definition! + struct usbi_cond_perthread *pos; + + list_for_each_entry(pos, &cond->waiters, list, struct usbi_cond_perthread) + SetEvent(pos->event); + // The wait function will remove its respective item from the list. +} + +void usbi_cond_destroy(usbi_cond_t *cond) +{ + // This assumes no one is using this anymore. The check MAY NOT BE safe. + struct usbi_cond_perthread *pos, *next; + + if (!list_empty(&cond->waiters)) + return; // (!see above!) + list_for_each_entry_safe(pos, next, &cond->not_waiting, list, struct usbi_cond_perthread) { + CloseHandle(pos->event); + list_del(&pos->list); + free(pos); + } +} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.h similarity index 53% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.h index e97ee787572d..409de2d0e25e 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/threads_windows.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/threads_windows.h @@ -21,17 +21,40 @@ #ifndef LIBUSB_THREADS_WINDOWS_H #define LIBUSB_THREADS_WINDOWS_H -#define usbi_mutex_static_t volatile LONG -#define USBI_MUTEX_INITIALIZER 0 - -#define usbi_mutex_t HANDLE +#define USBI_MUTEX_INITIALIZER 0L +#ifdef _WIN32_WCE +typedef LONG usbi_mutex_static_t; +#else +typedef volatile LONG usbi_mutex_static_t; +#endif +void usbi_mutex_static_lock(usbi_mutex_static_t *mutex); +static inline void usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) +{ + InterlockedExchange(mutex, 0L); +} -typedef struct usbi_cond { - // Every time a thread touches the CV, it winds up in one of these lists. - // It stays there until the CV is destroyed, even if the thread terminates. - struct list_head waiters; - struct list_head not_waiting; -} usbi_cond_t; +typedef CRITICAL_SECTION usbi_mutex_t; +static inline int usbi_mutex_init(usbi_mutex_t *mutex) +{ + InitializeCriticalSection(mutex); + return 0; +} +static inline void usbi_mutex_lock(usbi_mutex_t *mutex) +{ + EnterCriticalSection(mutex); +} +static inline void usbi_mutex_unlock(usbi_mutex_t *mutex) +{ + LeaveCriticalSection(mutex); +} +static inline int usbi_mutex_trylock(usbi_mutex_t *mutex) +{ + return !TryEnterCriticalSection(mutex); +} +static inline void usbi_mutex_destroy(usbi_mutex_t *mutex) +{ + DeleteCriticalSection(mutex); +} // We *were* getting timespec from pthread.h: #if (!defined(HAVE_STRUCT_TIMESPEC) && !defined(_TIMESPEC_DEFINED)) @@ -45,32 +68,44 @@ struct timespec { // We *were* getting ETIMEDOUT from pthread.h: #ifndef ETIMEDOUT -# define ETIMEDOUT 10060 /* This is the value in winsock.h. */ +#define ETIMEDOUT 10060 /* This is the value in winsock.h. */ #endif -#define usbi_tls_key_t DWORD - -int usbi_mutex_static_lock(usbi_mutex_static_t *mutex); -int usbi_mutex_static_unlock(usbi_mutex_static_t *mutex); - -int usbi_mutex_init(usbi_mutex_t *mutex); -int usbi_mutex_lock(usbi_mutex_t *mutex); -int usbi_mutex_unlock(usbi_mutex_t *mutex); -int usbi_mutex_trylock(usbi_mutex_t *mutex); -int usbi_mutex_destroy(usbi_mutex_t *mutex); +typedef struct usbi_cond { + // Every time a thread touches the CV, it winds up in one of these lists. + // It stays there until the CV is destroyed, even if the thread terminates. + struct list_head waiters; + struct list_head not_waiting; +} usbi_cond_t; -int usbi_cond_init(usbi_cond_t *cond); +void usbi_cond_init(usbi_cond_t *cond); int usbi_cond_wait(usbi_cond_t *cond, usbi_mutex_t *mutex); int usbi_cond_timedwait(usbi_cond_t *cond, usbi_mutex_t *mutex, const struct timeval *tv); -int usbi_cond_broadcast(usbi_cond_t *cond); -int usbi_cond_destroy(usbi_cond_t *cond); +void usbi_cond_broadcast(usbi_cond_t *cond); +void usbi_cond_destroy(usbi_cond_t *cond); -int usbi_tls_key_create(usbi_tls_key_t *key); -void *usbi_tls_key_get(usbi_tls_key_t key); -int usbi_tls_key_set(usbi_tls_key_t key, void *value); -int usbi_tls_key_delete(usbi_tls_key_t key); +typedef DWORD usbi_tls_key_t; +static inline void usbi_tls_key_create(usbi_tls_key_t *key) +{ + *key = TlsAlloc(); +} +static inline void *usbi_tls_key_get(usbi_tls_key_t key) +{ + return TlsGetValue(key); +} +static inline void usbi_tls_key_set(usbi_tls_key_t key, void *ptr) +{ + (void)TlsSetValue(key, ptr); +} +static inline void usbi_tls_key_delete(usbi_tls_key_t key) +{ + (void)TlsFree(key); +} -int usbi_get_tid(void); +static inline int usbi_get_tid(void) +{ + return (int)GetCurrentThreadId(); +} #endif /* LIBUSB_THREADS_WINDOWS_H */ diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/wince_usb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/wince_usb.c similarity index 94% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/wince_usb.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/wince_usb.c index 0d466b8c9c9a..a0f35e93e5de 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/wince_usb.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/wince_usb.c @@ -31,7 +31,7 @@ #include "wince_usb.h" // Global variables -int windows_version = WINDOWS_CE; +int errno = 0; static uint64_t hires_frequency, hires_ticks_to_ps; static HANDLE driver_handle = INVALID_HANDLE_VALUE; static int concurrent_usage = -1; @@ -109,7 +109,7 @@ static int translate_driver_error(DWORD error) } } -static int init_dllimports(void) +static BOOL init_dllimports(void) { DLL_GET_HANDLE(ceusbkwrapper); DLL_LOAD_FUNC(ceusbkwrapper, UkwOpenDriver, TRUE); @@ -135,7 +135,7 @@ static int init_dllimports(void) DLL_LOAD_FUNC(ceusbkwrapper, UkwIssueBulkTransfer, TRUE); DLL_LOAD_FUNC(ceusbkwrapper, UkwIsPipeHalted, TRUE); - return LIBUSB_SUCCESS; + return TRUE; } static void exit_dllimports(void) @@ -186,11 +186,8 @@ static int wince_init(struct libusb_context *ctx) // NB: concurrent usage supposes that init calls are equally balanced with // exit calls. If init is called more than exit, we will not exit properly if ( ++concurrent_usage == 0 ) { // First init? - // Initialize pollable file descriptors - init_polling(); - // Load DLL imports - if (init_dllimports() != LIBUSB_SUCCESS) { + if (!init_dllimports()) { usbi_err(ctx, "could not resolve DLL functions"); r = LIBUSB_ERROR_NOT_SUPPORTED; goto init_exit; @@ -223,7 +220,6 @@ static int wince_init(struct libusb_context *ctx) init_exit: // Holds semaphore here. if (!concurrent_usage && r != LIBUSB_SUCCESS) { // First init failed? exit_dllimports(); - exit_polling(); if (driver_handle != INVALID_HANDLE_VALUE) { UkwCloseDriver(driver_handle); @@ -239,10 +235,11 @@ static int wince_init(struct libusb_context *ctx) return r; } -static void wince_exit(void) +static void wince_exit(struct libusb_context *ctx) { HANDLE semaphore; TCHAR sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' + UNUSED(ctx); _stprintf(sem_name, _T("libusb_init%08X"), (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); semaphore = CreateSemaphore(NULL, 1, 1, sem_name); @@ -259,7 +256,6 @@ static void wince_exit(void) // Only works if exits and inits are balanced exactly if (--concurrent_usage < 0) { // Last exit exit_dllimports(); - exit_polling(); if (driver_handle != INVALID_HANDLE_VALUE) { UkwCloseDriver(driver_handle); @@ -328,7 +324,7 @@ static int wince_get_device_list( } new_devices = discovered_devs_append(new_devices, dev); - if (!discdevs) { + if (!new_devices) { r = LIBUSB_ERROR_NO_MEM; goto err_out; } @@ -541,12 +537,9 @@ static void wince_destroy_device(struct libusb_device *dev) static void wince_clear_transfer_priv(struct usbi_transfer *itransfer) { struct wince_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); - struct winfd wfd = fd_to_winfd(transfer_priv->pollable_fd.fd); - // No need to cancel transfer as it is either complete or abandoned - wfd.itransfer = NULL; - CloseHandle(wfd.handle); - usbi_free_fd(&transfer_priv->pollable_fd); + usbi_close(transfer_priv->pollable_fd.fd); + transfer_priv->pollable_fd = INVALID_WINFD; } static int wince_cancel_transfer(struct usbi_transfer *itransfer) @@ -570,11 +563,10 @@ static int wince_submit_control_or_bulk_transfer(struct usbi_transfer *itransfer BOOL direction_in, ret; struct winfd wfd; DWORD flags; - HANDLE eventHandle; PUKW_CONTROL_HEADER setup = NULL; const BOOL control_transfer = transfer->type == LIBUSB_TRANSFER_TYPE_CONTROL; + int r; - transfer_priv->pollable_fd = INVALID_WINFD; if (control_transfer) { setup = (PUKW_CONTROL_HEADER) transfer->buffer; direction_in = setup->bmRequestType & LIBUSB_ENDPOINT_IN; @@ -584,19 +576,18 @@ static int wince_submit_control_or_bulk_transfer(struct usbi_transfer *itransfer flags = direction_in ? UKW_TF_IN_TRANSFER : UKW_TF_OUT_TRANSFER; flags |= UKW_TF_SHORT_TRANSFER_OK; - eventHandle = CreateEvent(NULL, FALSE, FALSE, NULL); - if (eventHandle == NULL) { - usbi_err(ctx, "Failed to create event for async transfer"); + wfd = usbi_create_fd(); + if (wfd.fd < 0) return LIBUSB_ERROR_NO_MEM; - } - wfd = usbi_create_fd(eventHandle, direction_in ? RW_READ : RW_WRITE, itransfer, &wince_cancel_transfer); - if (wfd.fd < 0) { - CloseHandle(eventHandle); - return LIBUSB_ERROR_NO_MEM; + r = usbi_add_pollfd(ctx, wfd.fd, direction_in ? POLLIN : POLLOUT); + if (r) { + usbi_close(wfd.fd); + return r; } transfer_priv->pollable_fd = wfd; + if (control_transfer) { // Split out control setup header and data buffer DWORD bufLen = transfer->length - sizeof(UKW_CONTROL_HEADER); @@ -612,17 +603,14 @@ static int wince_submit_control_or_bulk_transfer(struct usbi_transfer *itransfer int libusbErr = translate_driver_error(GetLastError()); usbi_err(ctx, "UkwIssue%sTransfer failed: error %u", control_transfer ? "Control" : "Bulk", (unsigned int)GetLastError()); - wince_clear_transfer_priv(itransfer); + usbi_remove_pollfd(ctx, wfd.fd); + usbi_close(wfd.fd); + transfer_priv->pollable_fd = INVALID_WINFD; return libusbErr; } - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, direction_in ? POLLIN : POLLOUT); - return LIBUSB_SUCCESS; -} -static int wince_submit_iso_transfer(struct usbi_transfer *itransfer) -{ - return LIBUSB_ERROR_NOT_SUPPORTED; + return LIBUSB_SUCCESS; } static int wince_submit_transfer(struct usbi_transfer *itransfer) @@ -635,7 +623,6 @@ static int wince_submit_transfer(struct usbi_transfer *itransfer) case LIBUSB_TRANSFER_TYPE_INTERRUPT: return wince_submit_control_or_bulk_transfer(itransfer); case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: - return wince_submit_iso_transfer(itransfer); case LIBUSB_TRANSFER_TYPE_BULK_STREAM: return LIBUSB_ERROR_NOT_SUPPORTED; default: @@ -763,7 +750,7 @@ static int wince_handle_events( struct wince_transfer_priv* transfer_priv = NULL; POLL_NFDS_TYPE i = 0; BOOL found = FALSE; - struct usbi_transfer *transfer; + struct usbi_transfer *itransfer; DWORD io_size, io_result; int r = LIBUSB_SUCCESS; @@ -780,8 +767,8 @@ static int wince_handle_events( // Because a Windows OVERLAPPED is used for poll emulation, // a pollable fd is created and stored with each transfer usbi_mutex_lock(&ctx->flying_transfers_lock); - list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { - transfer_priv = usbi_transfer_get_os_priv(transfer); + list_for_each_entry(itransfer, &ctx->flying_transfers, list, struct usbi_transfer) { + transfer_priv = usbi_transfer_get_os_priv(itransfer); if (transfer_priv->pollable_fd.fd == fds[i].fd) { found = TRUE; break; @@ -796,7 +783,7 @@ static int wince_handle_events( // let handle_callback free the event using the transfer wfd // If you don't use the transfer wfd, you run a risk of trying to free a // newly allocated wfd that took the place of the one from the transfer. - wince_handle_callback(transfer, io_result, io_size); + wince_handle_callback(itransfer, io_result, io_size); } else if (found) { usbi_err(ctx, "matching transfer for fd %d has not completed", fds[i]); r = LIBUSB_ERROR_OTHER; @@ -848,11 +835,12 @@ static int wince_clock_gettime(int clk_id, struct timespec *tp) } } -const struct usbi_os_backend wince_backend = { +const struct usbi_os_backend usbi_backend = { "Windows CE", 0, wince_init, wince_exit, + NULL, /* set_option() */ wince_get_device_list, NULL, /* hotplug_poll */ @@ -893,6 +881,7 @@ const struct usbi_os_backend wince_backend = { NULL, /* handle_transfer_completion() */ wince_clock_gettime, + 0, sizeof(struct wince_device_priv), 0, sizeof(struct wince_transfer_priv), diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/wince_usb.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/wince_usb.h similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/wince_usb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/wince_usb.h diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_common.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_common.h similarity index 82% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/windows_common.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/windows_common.h index 55344ca264e2..b1725c2e3261 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_common.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_common.h @@ -68,31 +68,35 @@ /* * Macros for handling DLL themselves */ +#define DLL_HANDLE_NAME(name) __dll_##name##_handle + #define DLL_DECLARE_HANDLE(name) \ - static HMODULE __dll_##name##_handle = NULL + static HMODULE DLL_HANDLE_NAME(name) = NULL #define DLL_GET_HANDLE(name) \ do { \ - __dll_##name##_handle = DLL_LOAD_LIBRARY(name); \ - if (!__dll_##name##_handle) \ - return LIBUSB_ERROR_OTHER; \ + DLL_HANDLE_NAME(name) = DLL_LOAD_LIBRARY(name); \ + if (!DLL_HANDLE_NAME(name)) \ + return FALSE; \ } while (0) #define DLL_FREE_HANDLE(name) \ do { \ - if (__dll_##name##_handle) { \ - FreeLibrary(__dll_##name##_handle); \ - __dll_##name##_handle = NULL; \ + if (DLL_HANDLE_NAME(name)) { \ + FreeLibrary(DLL_HANDLE_NAME(name)); \ + DLL_HANDLE_NAME(name) = NULL; \ } \ - } while(0) + } while (0) /* * Macros for handling functions within a DLL */ +#define DLL_FUNC_NAME(name) __dll_##name##_func_t + #define DLL_DECLARE_FUNC_PREFIXNAME(api, ret, prefixname, name, args) \ - typedef ret (api * __dll_##name##_func_t)args; \ - static __dll_##name##_func_t prefixname = NULL + typedef ret (api * DLL_FUNC_NAME(name))args; \ + static DLL_FUNC_NAME(name) prefixname = NULL #define DLL_DECLARE_FUNC(api, ret, name, args) \ DLL_DECLARE_FUNC_PREFIXNAME(api, ret, name, name, args) @@ -101,22 +105,22 @@ #define DLL_LOAD_FUNC_PREFIXNAME(dll, prefixname, name, ret_on_failure) \ do { \ - HMODULE h = __dll_##dll##_handle; \ - prefixname = (__dll_##name##_func_t)GetProcAddress(h, \ + HMODULE h = DLL_HANDLE_NAME(dll); \ + prefixname = (DLL_FUNC_NAME(name))GetProcAddress(h, \ DLL_STRINGIFY(name)); \ if (prefixname) \ break; \ - prefixname = (__dll_##name##_func_t)GetProcAddress(h, \ + prefixname = (DLL_FUNC_NAME(name))GetProcAddress(h, \ DLL_STRINGIFY(name) DLL_STRINGIFY(A)); \ if (prefixname) \ break; \ - prefixname = (__dll_##name##_func_t)GetProcAddress(h, \ + prefixname = (DLL_FUNC_NAME(name))GetProcAddress(h, \ DLL_STRINGIFY(name) DLL_STRINGIFY(W)); \ if (prefixname) \ break; \ if (ret_on_failure) \ - return LIBUSB_ERROR_NOT_FOUND; \ - } while(0) + return FALSE; \ + } while (0) #define DLL_LOAD_FUNC(dll, name, ret_on_failure) \ DLL_LOAD_FUNC_PREFIXNAME(dll, name, name, ret_on_failure) diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.c similarity index 52% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.c index d935394a65b2..92dbde5a8445 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_nt_common.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.c @@ -32,6 +32,14 @@ #include "windows_common.h" #include "windows_nt_common.h" +// Public +BOOL (WINAPI *pCancelIoEx)(HANDLE, LPOVERLAPPED); +enum windows_version windows_version = WINDOWS_UNDEFINED; + + // Global variables for init/exit +static unsigned int init_count = 0; +static bool usbdk_available = false; + // Global variables for clock_gettime mechanism static uint64_t hires_ticks_to_ps; static uint64_t hires_frequency; @@ -50,6 +58,11 @@ struct timer_request { static HANDLE timer_thread = NULL; static DWORD timer_thread_id = 0; +/* Kernel32 dependencies */ +DLL_DECLARE_HANDLE(Kernel32); +/* This call is only available from XP SP2 */ +DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, IsWow64Process, (HANDLE, PBOOL)); + /* User32 dependencies */ DLL_DECLARE_HANDLE(User32); DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, GetMessageA, (LPMSG, HWND, UINT, UINT)); @@ -111,6 +124,11 @@ const char *windows_error_str(DWORD error_code) } #endif +static inline struct windows_context_priv *_context_priv(struct libusb_context *ctx) +{ + return (struct windows_context_priv *)ctx->os_priv; +} + /* Hash table functions - modified From glibc 2.3.2: [Aho,Sethi,Ullman] Compilers: Principles, Techniques and Tools, 1986 [Knuth] The Art of Computer Programming, part 3 (6.4) */ @@ -123,7 +141,7 @@ typedef struct htab_entry { } htab_entry; static htab_entry *htab_table = NULL; -static usbi_mutex_t htab_mutex = NULL; +static usbi_mutex_t htab_mutex; static unsigned long htab_filled; /* Before using the hash table we must allocate memory for it. @@ -256,35 +274,46 @@ unsigned long htab_hash(const char *str) return idx; } -static int windows_init_dlls(void) +/* +* Make a transfer complete synchronously +*/ +void windows_force_sync_completion(OVERLAPPED *overlapped, ULONG size) +{ + overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + overlapped->InternalHigh = size; + SetEvent(overlapped->hEvent); +} + +static BOOL windows_init_dlls(void) { + DLL_GET_HANDLE(Kernel32); + DLL_LOAD_FUNC_PREFIXED(Kernel32, p, IsWow64Process, FALSE); + pCancelIoEx = (BOOL (WINAPI *)(HANDLE, LPOVERLAPPED)) + GetProcAddress(DLL_HANDLE_NAME(Kernel32), "CancelIoEx"); + usbi_dbg("Will use CancelIo%s for I/O cancellation", pCancelIoEx ? "Ex" : ""); + DLL_GET_HANDLE(User32); DLL_LOAD_FUNC_PREFIXED(User32, p, GetMessageA, TRUE); DLL_LOAD_FUNC_PREFIXED(User32, p, PeekMessageA, TRUE); DLL_LOAD_FUNC_PREFIXED(User32, p, PostThreadMessageA, TRUE); - return LIBUSB_SUCCESS; + return TRUE; } static void windows_exit_dlls(void) { + DLL_FREE_HANDLE(Kernel32); DLL_FREE_HANDLE(User32); } static bool windows_init_clock(struct libusb_context *ctx) { DWORD_PTR affinity, dummy; - HANDLE event = NULL; + HANDLE event; LARGE_INTEGER li_frequency; int i; if (QueryPerformanceFrequency(&li_frequency)) { - // Load DLL imports - if (windows_init_dlls() != LIBUSB_SUCCESS) { - usbi_err(ctx, "could not resolve DLL functions"); - return false; - } - // The hires frequency can go as high as 4 GHz, so we'll use a conversion // to picoseconds to compute the tv_nsecs part in clock_gettime hires_frequency = li_frequency.QuadPart; @@ -340,7 +369,7 @@ static bool windows_init_clock(struct libusb_context *ctx) return true; } -void windows_destroy_clock(void) +static void windows_destroy_clock(void) { if (timer_thread) { // actually the signal to quit the thread. @@ -357,6 +386,110 @@ void windows_destroy_clock(void) } } +/* Windows version detection */ +static BOOL is_x64(void) +{ + BOOL ret = FALSE; + + // Detect if we're running a 32 or 64 bit system + if (sizeof(uintptr_t) < 8) { + if (pIsWow64Process != NULL) + pIsWow64Process(GetCurrentProcess(), &ret); + } else { + ret = TRUE; + } + + return ret; +} + +static void get_windows_version(void) +{ + OSVERSIONINFOEXA vi, vi2; + const char *arch, *w = NULL; + unsigned major, minor, version; + ULONGLONG major_equal, minor_equal; + BOOL ws; + + windows_version = WINDOWS_UNDEFINED; + + memset(&vi, 0, sizeof(vi)); + vi.dwOSVersionInfoSize = sizeof(vi); + if (!GetVersionExA((OSVERSIONINFOA *)&vi)) { + memset(&vi, 0, sizeof(vi)); + vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); + if (!GetVersionExA((OSVERSIONINFOA *)&vi)) + return; + } + + if (vi.dwPlatformId != VER_PLATFORM_WIN32_NT) + return; + + if ((vi.dwMajorVersion > 6) || ((vi.dwMajorVersion == 6) && (vi.dwMinorVersion >= 2))) { + // Starting with Windows 8.1 Preview, GetVersionEx() does no longer report the actual OS version + // See: http://msdn.microsoft.com/en-us/library/windows/desktop/dn302074.aspx + + major_equal = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL); + for (major = vi.dwMajorVersion; major <= 9; major++) { + memset(&vi2, 0, sizeof(vi2)); + vi2.dwOSVersionInfoSize = sizeof(vi2); + vi2.dwMajorVersion = major; + if (!VerifyVersionInfoA(&vi2, VER_MAJORVERSION, major_equal)) + continue; + + if (vi.dwMajorVersion < major) { + vi.dwMajorVersion = major; + vi.dwMinorVersion = 0; + } + + minor_equal = VerSetConditionMask(0, VER_MINORVERSION, VER_EQUAL); + for (minor = vi.dwMinorVersion; minor <= 9; minor++) { + memset(&vi2, 0, sizeof(vi2)); + vi2.dwOSVersionInfoSize = sizeof(vi2); + vi2.dwMinorVersion = minor; + if (!VerifyVersionInfoA(&vi2, VER_MINORVERSION, minor_equal)) + continue; + + vi.dwMinorVersion = minor; + break; + } + + break; + } + } + + if ((vi.dwMajorVersion > 0xf) || (vi.dwMinorVersion > 0xf)) + return; + + ws = (vi.wProductType <= VER_NT_WORKSTATION); + version = vi.dwMajorVersion << 4 | vi.dwMinorVersion; + switch (version) { + case 0x50: windows_version = WINDOWS_2000; w = "2000"; break; + case 0x51: windows_version = WINDOWS_XP; w = "XP"; break; + case 0x52: windows_version = WINDOWS_2003; w = "2003"; break; + case 0x60: windows_version = WINDOWS_VISTA; w = (ws ? "Vista" : "2008"); break; + case 0x61: windows_version = WINDOWS_7; w = (ws ? "7" : "2008_R2"); break; + case 0x62: windows_version = WINDOWS_8; w = (ws ? "8" : "2012"); break; + case 0x63: windows_version = WINDOWS_8_1; w = (ws ? "8.1" : "2012_R2"); break; + case 0x64: windows_version = WINDOWS_10; w = (ws ? "10" : "2016"); break; + default: + if (version < 0x50) { + return; + } else { + windows_version = WINDOWS_11_OR_LATER; + w = "11 or later"; + } + } + + arch = is_x64() ? "64-bit" : "32-bit"; + + if (vi.wServicePackMinor) + usbi_dbg("Windows %s SP%u.%u %s", w, vi.wServicePackMajor, vi.wServicePackMinor, arch); + else if (vi.wServicePackMajor) + usbi_dbg("Windows %s SP%u %s", w, vi.wServicePackMajor, arch); + else + usbi_dbg("Windows %s %s", w, arch); +} + /* * Monotonic and real time functions */ @@ -401,74 +534,16 @@ static unsigned __stdcall windows_clock_gettime_threaded(void *param) } } -int windows_clock_gettime(int clk_id, struct timespec *tp) -{ - struct timer_request request; -#if !defined(_MSC_VER) || (_MSC_VER < 1900) - FILETIME filetime; - ULARGE_INTEGER rtime; -#endif - DWORD r; - - switch (clk_id) { - case USBI_CLOCK_MONOTONIC: - if (timer_thread) { - request.tp = tp; - request.event = CreateEvent(NULL, FALSE, FALSE, NULL); - if (request.event == NULL) - return LIBUSB_ERROR_NO_MEM; - - if (!pPostThreadMessageA(timer_thread_id, WM_TIMER_REQUEST, 0, (LPARAM)&request)) { - usbi_err(NULL, "PostThreadMessage failed for timer thread: %s", windows_error_str(0)); - CloseHandle(request.event); - return LIBUSB_ERROR_OTHER; - } - - do { - r = WaitForSingleObject(request.event, TIMER_REQUEST_RETRY_MS); - if (r == WAIT_TIMEOUT) - usbi_dbg("could not obtain a timer value within reasonable timeframe - too much load?"); - else if (r == WAIT_FAILED) - usbi_err(NULL, "WaitForSingleObject failed: %s", windows_error_str(0)); - } while (r == WAIT_TIMEOUT); - CloseHandle(request.event); - - if (r == WAIT_OBJECT_0) - return LIBUSB_SUCCESS; - else - return LIBUSB_ERROR_OTHER; - } - // Fall through and return real-time if monotonic was not detected @ timer init - case USBI_CLOCK_REALTIME: -#if defined(_MSC_VER) && (_MSC_VER >= 1900) - timespec_get(tp, TIME_UTC); -#else - // We follow http://msdn.microsoft.com/en-us/library/ms724928%28VS.85%29.aspx - // with a predef epoch time to have an epoch that starts at 1970.01.01 00:00 - // Note however that our resolution is bounded by the Windows system time - // functions and is at best of the order of 1 ms (or, usually, worse) - GetSystemTimeAsFileTime(&filetime); - rtime.LowPart = filetime.dwLowDateTime; - rtime.HighPart = filetime.dwHighDateTime; - rtime.QuadPart -= EPOCH_TIME; - tp->tv_sec = (long)(rtime.QuadPart / 10000000); - tp->tv_nsec = (long)((rtime.QuadPart % 10000000) * 100); -#endif - return LIBUSB_SUCCESS; - default: - return LIBUSB_ERROR_INVALID_PARAM; - } -} - -static void windows_transfer_callback(struct usbi_transfer *itransfer, uint32_t io_result, uint32_t io_size) +static void windows_transfer_callback(const struct windows_backend *backend, + struct usbi_transfer *itransfer, DWORD io_result, DWORD io_size) { int status, istatus; - usbi_dbg("handling I/O completion with errcode %u, size %u", io_result, io_size); + usbi_dbg("handling I/O completion with errcode %u, size %u", (unsigned int)io_result, (unsigned int)io_size); switch (io_result) { case NO_ERROR: - status = windows_copy_transfer_data(itransfer, io_size); + status = backend->copy_transfer_data(itransfer, (uint32_t)io_size); break; case ERROR_GEN_FAILURE: usbi_dbg("detected endpoint stall"); @@ -479,26 +554,31 @@ static void windows_transfer_callback(struct usbi_transfer *itransfer, uint32_t status = LIBUSB_TRANSFER_TIMED_OUT; break; case ERROR_OPERATION_ABORTED: - istatus = windows_copy_transfer_data(itransfer, io_size); + istatus = backend->copy_transfer_data(itransfer, (uint32_t)io_size); if (istatus != LIBUSB_TRANSFER_COMPLETED) usbi_dbg("Failed to copy partial data in aborted operation: %d", istatus); usbi_dbg("detected operation aborted"); status = LIBUSB_TRANSFER_CANCELLED; break; + case ERROR_FILE_NOT_FOUND: + usbi_dbg("detected device removed"); + status = LIBUSB_TRANSFER_NO_DEVICE; + break; default: - usbi_err(ITRANSFER_CTX(itransfer), "detected I/O error %u: %s", io_result, windows_error_str(io_result)); + usbi_err(ITRANSFER_CTX(itransfer), "detected I/O error %u: %s", (unsigned int)io_result, windows_error_str(io_result)); status = LIBUSB_TRANSFER_ERROR; break; } - windows_clear_transfer_priv(itransfer); // Cancel polling + backend->clear_transfer_priv(itransfer); // Cancel polling if (status == LIBUSB_TRANSFER_CANCELLED) usbi_handle_transfer_cancellation(itransfer); else usbi_handle_transfer_completion(itransfer, (enum libusb_transfer_status)status); } -void windows_handle_callback(struct usbi_transfer *itransfer, uint32_t io_result, uint32_t io_size) +static void windows_handle_callback(const struct windows_backend *backend, + struct usbi_transfer *itransfer, DWORD io_result, DWORD io_size) { struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); @@ -507,7 +587,7 @@ void windows_handle_callback(struct usbi_transfer *itransfer, uint32_t io_result case LIBUSB_TRANSFER_TYPE_BULK: case LIBUSB_TRANSFER_TYPE_INTERRUPT: case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: - windows_transfer_callback(itransfer, io_result, io_size); + windows_transfer_callback(backend, itransfer, io_result, io_size); break; case LIBUSB_TRANSFER_TYPE_BULK_STREAM: usbi_warn(ITRANSFER_CTX(itransfer), "bulk stream transfers are not yet supported on this platform"); @@ -517,13 +597,269 @@ void windows_handle_callback(struct usbi_transfer *itransfer, uint32_t io_result } } -int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) +static int windows_init(struct libusb_context *ctx) { - POLL_NFDS_TYPE i; - bool found = false; - struct usbi_transfer *transfer; - struct winfd *pollable_fd = NULL; + struct windows_context_priv *priv = _context_priv(ctx); + HANDLE semaphore; + char sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' + int r = LIBUSB_ERROR_OTHER; + bool winusb_backend_init = false; + + sprintf(sem_name, "libusb_init%08X", (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); + semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name); + if (semaphore == NULL) { + usbi_err(ctx, "could not create semaphore: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_MEM; + } + + // A successful wait brings our semaphore count to 0 (unsignaled) + // => any concurent wait stalls until the semaphore's release + if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { + usbi_err(ctx, "failure to access semaphore: %s", windows_error_str(0)); + CloseHandle(semaphore); + return LIBUSB_ERROR_NO_MEM; + } + + // NB: concurrent usage supposes that init calls are equally balanced with + // exit calls. If init is called more than exit, we will not exit properly + if (++init_count == 1) { // First init? + // Load DLL imports + if (!windows_init_dlls()) { + usbi_err(ctx, "could not resolve DLL functions"); + goto init_exit; + } + + get_windows_version(); + + if (windows_version == WINDOWS_UNDEFINED) { + usbi_err(ctx, "failed to detect Windows version"); + r = LIBUSB_ERROR_NOT_SUPPORTED; + goto init_exit; + } + + if (!windows_init_clock(ctx)) + goto init_exit; + + if (!htab_create(ctx)) + goto init_exit; + + r = winusb_backend.init(ctx); + if (r != LIBUSB_SUCCESS) + goto init_exit; + winusb_backend_init = true; + + r = usbdk_backend.init(ctx); + if (r == LIBUSB_SUCCESS) { + usbi_dbg("UsbDk backend is available"); + usbdk_available = true; + } else { + usbi_info(ctx, "UsbDk backend is not available"); + // Do not report this as an error + r = LIBUSB_SUCCESS; + } + } + + // By default, new contexts will use the WinUSB backend + priv->backend = &winusb_backend; + + r = LIBUSB_SUCCESS; + +init_exit: // Holds semaphore here + if ((init_count == 1) && (r != LIBUSB_SUCCESS)) { // First init failed? + if (winusb_backend_init) + winusb_backend.exit(ctx); + htab_destroy(); + windows_destroy_clock(); + windows_exit_dlls(); + --init_count; + } + + ReleaseSemaphore(semaphore, 1, NULL); // increase count back to 1 + CloseHandle(semaphore); + return r; +} + +static void windows_exit(struct libusb_context *ctx) +{ + HANDLE semaphore; + char sem_name[11 + 8 + 1]; // strlen("libusb_init") + (32-bit hex PID) + '\0' + UNUSED(ctx); + + sprintf(sem_name, "libusb_init%08X", (unsigned int)(GetCurrentProcessId() & 0xFFFFFFFF)); + semaphore = CreateSemaphoreA(NULL, 1, 1, sem_name); + if (semaphore == NULL) + return; + + // A successful wait brings our semaphore count to 0 (unsignaled) + // => any concurent wait stalls until the semaphore release + if (WaitForSingleObject(semaphore, INFINITE) != WAIT_OBJECT_0) { + CloseHandle(semaphore); + return; + } + + // Only works if exits and inits are balanced exactly + if (--init_count == 0) { // Last exit + if (usbdk_available) { + usbdk_backend.exit(ctx); + usbdk_available = false; + } + winusb_backend.exit(ctx); + htab_destroy(); + windows_destroy_clock(); + windows_exit_dlls(); + } + + ReleaseSemaphore(semaphore, 1, NULL); // increase count back to 1 + CloseHandle(semaphore); +} + +static int windows_set_option(struct libusb_context *ctx, enum libusb_option option, va_list ap) +{ + struct windows_context_priv *priv = _context_priv(ctx); + + UNUSED(ap); + + switch (option) { + case LIBUSB_OPTION_USE_USBDK: + if (usbdk_available) { + usbi_dbg("switching context %p to use UsbDk backend", ctx); + priv->backend = &usbdk_backend; + } else { + usbi_err(ctx, "UsbDk backend not available"); + return LIBUSB_ERROR_NOT_FOUND; + } + return LIBUSB_SUCCESS; + default: + return LIBUSB_ERROR_NOT_SUPPORTED; + } + +} + +static int windows_get_device_list(struct libusb_context *ctx, struct discovered_devs **discdevs) +{ + struct windows_context_priv *priv = _context_priv(ctx); + return priv->backend->get_device_list(ctx, discdevs); +} + +static int windows_open(struct libusb_device_handle *dev_handle) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->open(dev_handle); +} + +static void windows_close(struct libusb_device_handle *dev_handle) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + priv->backend->close(dev_handle); +} + +static int windows_get_device_descriptor(struct libusb_device *dev, + unsigned char *buffer, int *host_endian) +{ + struct windows_context_priv *priv = _context_priv(DEVICE_CTX(dev)); + *host_endian = 0; + return priv->backend->get_device_descriptor(dev, buffer); +} + +static int windows_get_active_config_descriptor(struct libusb_device *dev, + unsigned char *buffer, size_t len, int *host_endian) +{ + struct windows_context_priv *priv = _context_priv(DEVICE_CTX(dev)); + *host_endian = 0; + return priv->backend->get_active_config_descriptor(dev, buffer, len); +} + +static int windows_get_config_descriptor(struct libusb_device *dev, + uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) +{ + struct windows_context_priv *priv = _context_priv(DEVICE_CTX(dev)); + *host_endian = 0; + return priv->backend->get_config_descriptor(dev, config_index, buffer, len); +} + +static int windows_get_config_descriptor_by_value(struct libusb_device *dev, + uint8_t bConfigurationValue, unsigned char **buffer, int *host_endian) +{ + struct windows_context_priv *priv = _context_priv(DEVICE_CTX(dev)); + *host_endian = 0; + return priv->backend->get_config_descriptor_by_value(dev, bConfigurationValue, buffer); +} + +static int windows_get_configuration(struct libusb_device_handle *dev_handle, int *config) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->get_configuration(dev_handle, config); +} + +static int windows_set_configuration(struct libusb_device_handle *dev_handle, int config) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->set_configuration(dev_handle, config); +} + +static int windows_claim_interface(struct libusb_device_handle *dev_handle, int interface_number) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->claim_interface(dev_handle, interface_number); +} + +static int windows_release_interface(struct libusb_device_handle *dev_handle, int interface_number) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->release_interface(dev_handle, interface_number); +} + +static int windows_set_interface_altsetting(struct libusb_device_handle *dev_handle, + int interface_number, int altsetting) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->set_interface_altsetting(dev_handle, interface_number, altsetting); +} + +static int windows_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->clear_halt(dev_handle, endpoint); +} + +static int windows_reset_device(struct libusb_device_handle *dev_handle) +{ + struct windows_context_priv *priv = _context_priv(HANDLE_CTX(dev_handle)); + return priv->backend->reset_device(dev_handle); +} + +static void windows_destroy_device(struct libusb_device *dev) +{ + struct windows_context_priv *priv = _context_priv(DEVICE_CTX(dev)); + priv->backend->destroy_device(dev); +} + +static int windows_submit_transfer(struct usbi_transfer *itransfer) +{ + struct windows_context_priv *priv = _context_priv(ITRANSFER_CTX(itransfer)); + return priv->backend->submit_transfer(itransfer); +} + +static int windows_cancel_transfer(struct usbi_transfer *itransfer) +{ + struct windows_context_priv *priv = _context_priv(ITRANSFER_CTX(itransfer)); + return priv->backend->cancel_transfer(itransfer); +} + +static void windows_clear_transfer_priv(struct usbi_transfer *itransfer) +{ + struct windows_context_priv *priv = _context_priv(ITRANSFER_CTX(itransfer)); + priv->backend->clear_transfer_priv(itransfer); +} + +static int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) +{ + struct windows_context_priv *priv = _context_priv(ctx); + struct usbi_transfer *itransfer; DWORD io_size, io_result; + POLL_NFDS_TYPE i; + bool found; + int transfer_fd; int r = LIBUSB_SUCCESS; usbi_mutex_lock(&ctx->open_devs_lock); @@ -538,11 +874,12 @@ int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_N // Because a Windows OVERLAPPED is used for poll emulation, // a pollable fd is created and stored with each transfer - usbi_mutex_lock(&ctx->flying_transfers_lock); found = false; - list_for_each_entry(transfer, &ctx->flying_transfers, list, struct usbi_transfer) { - pollable_fd = windows_get_fd(transfer); - if (pollable_fd->fd == fds[i].fd) { + transfer_fd = -1; + usbi_mutex_lock(&ctx->flying_transfers_lock); + list_for_each_entry(itransfer, &ctx->flying_transfers, list, struct usbi_transfer) { + transfer_fd = priv->backend->get_transfer_fd(itransfer); + if (transfer_fd == fds[i].fd) { found = true; break; } @@ -550,15 +887,16 @@ int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_N usbi_mutex_unlock(&ctx->flying_transfers_lock); if (found) { - windows_get_overlapped_result(transfer, pollable_fd, &io_result, &io_size); + priv->backend->get_overlapped_result(itransfer, &io_result, &io_size); + + usbi_remove_pollfd(ctx, transfer_fd); - usbi_remove_pollfd(ctx, pollable_fd->fd); // let handle_callback free the event using the transfer wfd // If you don't use the transfer wfd, you run a risk of trying to free a // newly allocated wfd that took the place of the one from the transfer. - windows_handle_callback(transfer, io_result, io_size); + windows_handle_callback(priv->backend, itransfer, io_result, io_size); } else { - usbi_err(ctx, "could not find a matching transfer for fd %d", fds[i]); + usbi_err(ctx, "could not find a matching transfer for fd %d", fds[i].fd); r = LIBUSB_ERROR_NOT_FOUND; break; } @@ -568,24 +906,103 @@ int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_N return r; } -int windows_common_init(struct libusb_context *ctx) +static int windows_clock_gettime(int clk_id, struct timespec *tp) { - if (!windows_init_clock(ctx)) - goto error_roll_back; + struct timer_request request; +#if !defined(_MSC_VER) || (_MSC_VER < 1900) + FILETIME filetime; + ULARGE_INTEGER rtime; +#endif + DWORD r; - if (!htab_create(ctx)) - goto error_roll_back; + switch (clk_id) { + case USBI_CLOCK_MONOTONIC: + if (timer_thread) { + request.tp = tp; + request.event = CreateEvent(NULL, FALSE, FALSE, NULL); + if (request.event == NULL) + return LIBUSB_ERROR_NO_MEM; - return LIBUSB_SUCCESS; + if (!pPostThreadMessageA(timer_thread_id, WM_TIMER_REQUEST, 0, (LPARAM)&request)) { + usbi_err(NULL, "PostThreadMessage failed for timer thread: %s", windows_error_str(0)); + CloseHandle(request.event); + return LIBUSB_ERROR_OTHER; + } -error_roll_back: - windows_common_exit(); - return LIBUSB_ERROR_NO_MEM; -} + do { + r = WaitForSingleObject(request.event, TIMER_REQUEST_RETRY_MS); + if (r == WAIT_TIMEOUT) + usbi_dbg("could not obtain a timer value within reasonable timeframe - too much load?"); + else if (r == WAIT_FAILED) + usbi_err(NULL, "WaitForSingleObject failed: %s", windows_error_str(0)); + } while (r == WAIT_TIMEOUT); + CloseHandle(request.event); -void windows_common_exit(void) -{ - htab_destroy(); - windows_destroy_clock(); - windows_exit_dlls(); + if (r == WAIT_OBJECT_0) + return LIBUSB_SUCCESS; + else + return LIBUSB_ERROR_OTHER; + } + // Fall through and return real-time if monotonic was not detected @ timer init + case USBI_CLOCK_REALTIME: +#if defined(_MSC_VER) && (_MSC_VER >= 1900) + timespec_get(tp, TIME_UTC); +#else + // We follow http://msdn.microsoft.com/en-us/library/ms724928%28VS.85%29.aspx + // with a predef epoch time to have an epoch that starts at 1970.01.01 00:00 + // Note however that our resolution is bounded by the Windows system time + // functions and is at best of the order of 1 ms (or, usually, worse) + GetSystemTimeAsFileTime(&filetime); + rtime.LowPart = filetime.dwLowDateTime; + rtime.HighPart = filetime.dwHighDateTime; + rtime.QuadPart -= EPOCH_TIME; + tp->tv_sec = (long)(rtime.QuadPart / 10000000); + tp->tv_nsec = (long)((rtime.QuadPart % 10000000) * 100); +#endif + return LIBUSB_SUCCESS; + default: + return LIBUSB_ERROR_INVALID_PARAM; + } } + +// NB: MSVC6 does not support named initializers. +const struct usbi_os_backend usbi_backend = { + "Windows", + USBI_CAP_HAS_HID_ACCESS, + windows_init, + windows_exit, + windows_set_option, + windows_get_device_list, + NULL, /* hotplug_poll */ + windows_open, + windows_close, + windows_get_device_descriptor, + windows_get_active_config_descriptor, + windows_get_config_descriptor, + windows_get_config_descriptor_by_value, + windows_get_configuration, + windows_set_configuration, + windows_claim_interface, + windows_release_interface, + windows_set_interface_altsetting, + windows_clear_halt, + windows_reset_device, + NULL, /* alloc_streams */ + NULL, /* free_streams */ + NULL, /* dev_mem_alloc */ + NULL, /* dev_mem_free */ + NULL, /* kernel_driver_active */ + NULL, /* detach_kernel_driver */ + NULL, /* attach_kernel_driver */ + windows_destroy_device, + windows_submit_transfer, + windows_cancel_transfer, + windows_clear_transfer_priv, + windows_handle_events, + NULL, /* handle_transfer_completion */ + windows_clock_gettime, + sizeof(struct windows_context_priv), + sizeof(union windows_device_priv), + sizeof(union windows_device_handle_priv), + sizeof(union windows_transfer_priv), +}; diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.h new file mode 100644 index 000000000000..e155b5d3e3c4 --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_common.h @@ -0,0 +1,110 @@ +/* + * Windows backend common header for libusb 1.0 + * + * This file brings together header code common between + * the desktop Windows backends. + * Copyright © 2012-2013 RealVNC Ltd. + * Copyright © 2009-2012 Pete Batard + * With contributions from Michael Plante, Orin Eman et al. + * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer + * Major code testing contribution by Xiaofan Chen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include "windows_nt_shared_types.h" + + /* Windows versions */ +enum windows_version { + WINDOWS_UNDEFINED, + WINDOWS_2000, + WINDOWS_XP, + WINDOWS_2003, // Also XP x64 + WINDOWS_VISTA, + WINDOWS_7, + WINDOWS_8, + WINDOWS_8_1, + WINDOWS_10, + WINDOWS_11_OR_LATER +}; + +extern enum windows_version windows_version; + +/* This call is only available from Vista */ +extern BOOL (WINAPI *pCancelIoEx)(HANDLE, LPOVERLAPPED); + +struct windows_backend { + int (*init)(struct libusb_context *ctx); + void (*exit)(struct libusb_context *ctx); + int (*get_device_list)(struct libusb_context *ctx, + struct discovered_devs **discdevs); + int (*open)(struct libusb_device_handle *dev_handle); + void (*close)(struct libusb_device_handle *dev_handle); + int (*get_device_descriptor)(struct libusb_device *device, unsigned char *buffer); + int (*get_active_config_descriptor)(struct libusb_device *device, + unsigned char *buffer, size_t len); + int (*get_config_descriptor)(struct libusb_device *device, + uint8_t config_index, unsigned char *buffer, size_t len); + int (*get_config_descriptor_by_value)(struct libusb_device *device, + uint8_t bConfigurationValue, unsigned char **buffer); + int (*get_configuration)(struct libusb_device_handle *dev_handle, int *config); + int (*set_configuration)(struct libusb_device_handle *dev_handle, int config); + int (*claim_interface)(struct libusb_device_handle *dev_handle, int interface_number); + int (*release_interface)(struct libusb_device_handle *dev_handle, int interface_number); + int (*set_interface_altsetting)(struct libusb_device_handle *dev_handle, + int interface_number, int altsetting); + int (*clear_halt)(struct libusb_device_handle *dev_handle, + unsigned char endpoint); + int (*reset_device)(struct libusb_device_handle *dev_handle); + void (*destroy_device)(struct libusb_device *dev); + int (*submit_transfer)(struct usbi_transfer *itransfer); + int (*cancel_transfer)(struct usbi_transfer *itransfer); + void (*clear_transfer_priv)(struct usbi_transfer *itransfer); + int (*copy_transfer_data)(struct usbi_transfer *itransfer, uint32_t io_size); + int (*get_transfer_fd)(struct usbi_transfer *itransfer); + void (*get_overlapped_result)(struct usbi_transfer *itransfer, + DWORD *io_result, DWORD *io_size); +}; + +struct windows_context_priv { + const struct windows_backend *backend; +}; + +union windows_device_priv { + struct usbdk_device_priv usbdk_priv; + struct winusb_device_priv winusb_priv; +}; + +union windows_device_handle_priv { + struct usbdk_device_handle_priv usbdk_priv; + struct winusb_device_handle_priv winusb_priv; +}; + +union windows_transfer_priv { + struct usbdk_transfer_priv usbdk_priv; + struct winusb_transfer_priv winusb_priv; +}; + +extern const struct windows_backend usbdk_backend; +extern const struct windows_backend winusb_backend; + +unsigned long htab_hash(const char *str); +void windows_force_sync_completion(OVERLAPPED *overlapped, ULONG size); + +#if defined(ENABLE_LOGGING) +const char *windows_error_str(DWORD error_code); +#endif diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_shared_types.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_shared_types.h new file mode 100644 index 000000000000..68bf261d5d6a --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_nt_shared_types.h @@ -0,0 +1,138 @@ +#pragma once + +#include "windows_common.h" + +#include + +typedef struct USB_DEVICE_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + USHORT bcdUSB; + UCHAR bDeviceClass; + UCHAR bDeviceSubClass; + UCHAR bDeviceProtocol; + UCHAR bMaxPacketSize0; + USHORT idVendor; + USHORT idProduct; + USHORT bcdDevice; + UCHAR iManufacturer; + UCHAR iProduct; + UCHAR iSerialNumber; + UCHAR bNumConfigurations; +} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR; + +typedef struct USB_CONFIGURATION_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + USHORT wTotalLength; + UCHAR bNumInterfaces; + UCHAR bConfigurationValue; + UCHAR iConfiguration; + UCHAR bmAttributes; + UCHAR MaxPower; +} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; + +#include + +#define MAX_DEVICE_ID_LEN 200 + +typedef struct USB_DK_DEVICE_ID { + WCHAR DeviceID[MAX_DEVICE_ID_LEN]; + WCHAR InstanceID[MAX_DEVICE_ID_LEN]; +} USB_DK_DEVICE_ID, *PUSB_DK_DEVICE_ID; + +typedef struct USB_DK_DEVICE_INFO { + USB_DK_DEVICE_ID ID; + ULONG64 FilterID; + ULONG64 Port; + ULONG64 Speed; + USB_DEVICE_DESCRIPTOR DeviceDescriptor; +} USB_DK_DEVICE_INFO, *PUSB_DK_DEVICE_INFO; + +typedef struct USB_DK_ISO_TRANSFER_RESULT { + ULONG64 ActualLength; + ULONG64 TransferResult; +} USB_DK_ISO_TRANSFER_RESULT, *PUSB_DK_ISO_TRANSFER_RESULT; + +typedef struct USB_DK_GEN_TRANSFER_RESULT { + ULONG64 BytesTransferred; + ULONG64 UsbdStatus; // USBD_STATUS code +} USB_DK_GEN_TRANSFER_RESULT, *PUSB_DK_GEN_TRANSFER_RESULT; + +typedef struct USB_DK_TRANSFER_RESULT { + USB_DK_GEN_TRANSFER_RESULT GenResult; + PVOID64 IsochronousResultsArray; // array of USB_DK_ISO_TRANSFER_RESULT +} USB_DK_TRANSFER_RESULT, *PUSB_DK_TRANSFER_RESULT; + +typedef struct USB_DK_TRANSFER_REQUEST { + ULONG64 EndpointAddress; + PVOID64 Buffer; + ULONG64 BufferLength; + ULONG64 TransferType; + ULONG64 IsochronousPacketsArraySize; + PVOID64 IsochronousPacketsArray; + USB_DK_TRANSFER_RESULT Result; +} USB_DK_TRANSFER_REQUEST, *PUSB_DK_TRANSFER_REQUEST; + +struct usbdk_device_priv { + USB_DK_DEVICE_INFO info; + PUSB_CONFIGURATION_DESCRIPTOR *config_descriptors; + HANDLE redirector_handle; + HANDLE system_handle; + uint8_t active_configuration; +}; + +struct winusb_device_priv { + bool initialized; + bool root_hub; + uint8_t active_config; + uint8_t depth; // distance to HCD + const struct windows_usb_api_backend *apib; + char *dev_id; + char *path; // device interface path + int sub_api; // for WinUSB-like APIs + struct { + char *path; // each interface needs a device interface path, + const struct windows_usb_api_backend *apib; // an API backend (multiple drivers support), + int sub_api; + int8_t nb_endpoints; // and a set of endpoint addresses (USB_MAXENDPOINTS) + uint8_t *endpoint; + bool restricted_functionality; // indicates if the interface functionality is restricted + // by Windows (eg. HID keyboards or mice cannot do R/W) + } usb_interface[USB_MAXINTERFACES]; + struct hid_device_priv *hid; + USB_DEVICE_DESCRIPTOR dev_descriptor; + PUSB_CONFIGURATION_DESCRIPTOR *config_descriptor; // list of pointers to the cached config descriptors +}; + +struct usbdk_device_handle_priv { + // Not currently used + char dummy; +}; + +struct winusb_device_handle_priv { + int active_interface; + struct { + HANDLE dev_handle; // WinUSB needs an extra handle for the file + HANDLE api_handle; // used by the API to communicate with the device + } interface_handle[USB_MAXINTERFACES]; + int autoclaim_count[USB_MAXINTERFACES]; // For auto-release +}; + +struct usbdk_transfer_priv { + USB_DK_TRANSFER_REQUEST request; + struct winfd pollable_fd; + HANDLE system_handle; + PULONG64 IsochronousPacketsArray; + PUSB_DK_ISO_TRANSFER_RESULT IsochronousResultsArray; +}; + +struct winusb_transfer_priv { + struct winfd pollable_fd; + HANDLE handle; + uint8_t interface_number; + uint8_t *hid_buffer; // 1 byte extended data buffer, required for HID + uint8_t *hid_dest; // transfer buffer destination, required for HID + size_t hid_expected_size; + void *iso_context; +}; diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.c similarity index 70% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.c rename to vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.c index 7cc5793872a3..fbccbd5cffcb 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.c +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.c @@ -23,22 +23,12 @@ #include -#if defined(USE_USBDK) - #include -#include #include #include "libusbi.h" #include "windows_common.h" #include "windows_nt_common.h" - -#define ULONG64 uint64_t -#define PVOID64 uint64_t - -typedef CONST WCHAR *PCWCHAR; -#define wcsncpy_s wcsncpy - #include "windows_usbdk.h" #if !defined(STATUS_SUCCESS) @@ -55,7 +45,7 @@ typedef LONG NTSTATUS; #endif #if !defined(USBD_SUCCESS) -typedef int32_t USBD_STATUS; +typedef LONG USBD_STATUS; #define USBD_SUCCESS(Status) ((USBD_STATUS) (Status) >= 0) #define USBD_PENDING(Status) ((ULONG) (Status) >> 30 == 1) #define USBD_ERROR(Status) ((USBD_STATUS) (Status) < 0) @@ -66,22 +56,6 @@ typedef int32_t USBD_STATUS; #define USBD_STATUS_CANCELED ((USBD_STATUS) 0xc0010000) #endif -static int concurrent_usage = -1; - -struct usbdk_device_priv { - USB_DK_DEVICE_INFO info; - PUSB_CONFIGURATION_DESCRIPTOR *config_descriptors; - HANDLE redirector_handle; - uint8_t active_configuration; -}; - -struct usbdk_transfer_priv { - USB_DK_TRANSFER_REQUEST request; - struct winfd pollable_fd; - PULONG64 IsochronousPacketsArray; - PUSB_DK_ISO_TRANSFER_RESULT IsochronousResultsArray; -}; - static inline struct usbdk_device_priv *_usbdk_device_priv(struct libusb_device *dev) { return (struct usbdk_device_priv *)dev->os_priv; @@ -115,7 +89,7 @@ static FARPROC get_usbdk_proc_addr(struct libusb_context *ctx, LPCSTR api_name) FARPROC api_ptr = GetProcAddress(usbdk_helper.module, api_name); if (api_ptr == NULL) - usbi_err(ctx, "UsbDkHelper API %s not found, error %d", api_name, GetLastError()); + usbi_err(ctx, "UsbDkHelper API %s not found: %s", api_name, windows_error_str(0)); return api_ptr; } @@ -132,7 +106,7 @@ static int load_usbdk_helper_dll(struct libusb_context *ctx) { usbdk_helper.module = LoadLibraryA("UsbDkHelper"); if (usbdk_helper.module == NULL) { - usbi_err(ctx, "Failed to load UsbDkHelper.dll, error %d", GetLastError()); + usbi_err(ctx, "Failed to load UsbDkHelper.dll: %s", windows_error_str(0)); return LIBUSB_ERROR_NOT_FOUND; } @@ -198,41 +172,41 @@ static int load_usbdk_helper_dll(struct libusb_context *ctx) static int usbdk_init(struct libusb_context *ctx) { - int r; + SC_HANDLE managerHandle; + SC_HANDLE serviceHandle; - if (++concurrent_usage == 0) { // First init? - r = load_usbdk_helper_dll(ctx); - if (r) - goto init_exit; + managerHandle = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); + if (managerHandle == NULL) { + usbi_warn(ctx, "failed to open service control manager: %s", windows_error_str(0)); + return LIBUSB_ERROR_OTHER; + } - init_polling(); + serviceHandle = OpenServiceA(managerHandle, "UsbDk", GENERIC_READ); + CloseServiceHandle(managerHandle); - r = windows_common_init(ctx); - if (r) - goto init_exit; - } - // At this stage, either we went through full init successfully, or didn't need to - r = LIBUSB_SUCCESS; - -init_exit: - if (!concurrent_usage && r != LIBUSB_SUCCESS) { // First init failed? - exit_polling(); - windows_common_exit(); - unload_usbdk_helper_dll(); + if (serviceHandle == NULL) { + if (GetLastError() != ERROR_SERVICE_DOES_NOT_EXIST) + usbi_warn(ctx, "failed to open UsbDk service: %s", windows_error_str(0)); + return LIBUSB_ERROR_NOT_FOUND; } - if (r != LIBUSB_SUCCESS) - --concurrent_usage; // Not expected to call libusb_exit if we failed. + CloseServiceHandle(serviceHandle); - return r; + return load_usbdk_helper_dll(ctx); +} + +static void usbdk_exit(struct libusb_context *ctx) +{ + UNUSED(ctx); + unload_usbdk_helper_dll(); } static int usbdk_get_session_id_for_device(struct libusb_context *ctx, PUSB_DK_DEVICE_ID id, unsigned long *session_id) { - char dev_identity[ARRAYSIZE(id->DeviceID) + ARRAYSIZE(id->InstanceID)]; + char dev_identity[ARRAYSIZE(id->DeviceID) + ARRAYSIZE(id->InstanceID) + 1]; - if (sprintf(dev_identity, "%S%S", id->DeviceID, id->InstanceID) == -1) { + if (snprintf(dev_identity, sizeof(dev_identity), "%S%S", id->DeviceID, id->InstanceID) == -1) { usbi_warn(ctx, "cannot form device identity", id->DeviceID); return LIBUSB_ERROR_NOT_SUPPORTED; } @@ -296,11 +270,11 @@ static void usbdk_device_init(libusb_device *dev, PUSB_DK_DEVICE_INFO info) dev->port_number = (uint8_t)info->Port; dev->parent_dev = NULL; - //Addresses in libusb are 1-based + // Addresses in libusb are 1-based dev->device_address = (uint8_t)(info->Port + 1); dev->num_configurations = info->DeviceDescriptor.bNumConfigurations; - dev->device_descriptor = info->DeviceDescriptor; + memcpy(&dev->device_descriptor, &info->DeviceDescriptor, LIBUSB_DT_DEVICE_SIZE); switch (info->Speed) { case LowSpeed: @@ -330,7 +304,7 @@ static int usbdk_get_device_list(struct libusb_context *ctx, struct discovered_d ULONG dev_number; PUSB_DK_DEVICE_INFO devices; - if(!usbdk_helper.GetDevicesList(&devices, &dev_number)) + if (!usbdk_helper.GetDevicesList(&devices, &dev_number)) return LIBUSB_ERROR_OTHER; for (i = 0; i < dev_number; i++) { @@ -371,26 +345,16 @@ static int usbdk_get_device_list(struct libusb_context *ctx, struct discovered_d return r; } -static void usbdk_exit(void) -{ - if (--concurrent_usage < 0) { - windows_common_exit(); - exit_polling(); - unload_usbdk_helper_dll(); - } -} - -static int usbdk_get_device_descriptor(struct libusb_device *dev, unsigned char *buffer, int *host_endian) +static int usbdk_get_device_descriptor(struct libusb_device *dev, unsigned char *buffer) { struct usbdk_device_priv *priv = _usbdk_device_priv(dev); memcpy(buffer, &priv->info.DeviceDescriptor, DEVICE_DESC_LENGTH); - *host_endian = 0; return LIBUSB_SUCCESS; } -static int usbdk_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len, int *host_endian) +static int usbdk_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len) { struct usbdk_device_priv *priv = _usbdk_device_priv(dev); PUSB_CONFIGURATION_DESCRIPTOR config_header; @@ -403,15 +367,31 @@ static int usbdk_get_config_descriptor(struct libusb_device *dev, uint8_t config size = min(config_header->wTotalLength, len); memcpy(buffer, config_header, size); - *host_endian = 0; - return (int)size; } -static inline int usbdk_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len, int *host_endian) +static int usbdk_get_config_descriptor_by_value(struct libusb_device *dev, uint8_t bConfigurationValue, + unsigned char **buffer) +{ + struct usbdk_device_priv *priv = _usbdk_device_priv(dev); + PUSB_CONFIGURATION_DESCRIPTOR config_header; + uint8_t index; + + for (index = 0; index < dev->num_configurations; index++) { + config_header = priv->config_descriptors[index]; + if (config_header->bConfigurationValue == bConfigurationValue) { + *buffer = (unsigned char *)priv->config_descriptors[index]; + return (int)config_header->wTotalLength; + } + } + + return LIBUSB_ERROR_NOT_FOUND; +} + +static int usbdk_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len) { return usbdk_get_config_descriptor(dev, _usbdk_device_priv(dev)->active_configuration, - buffer, len, host_endian); + buffer, len); } static int usbdk_open(struct libusb_device_handle *dev_handle) @@ -424,6 +404,8 @@ static int usbdk_open(struct libusb_device_handle *dev_handle) return LIBUSB_ERROR_OTHER; } + priv->system_handle = usbdk_helper.GetRedirectorSystemHandle(priv->redirector_handle); + return LIBUSB_SUCCESS; } @@ -431,10 +413,8 @@ static void usbdk_close(struct libusb_device_handle *dev_handle) { struct usbdk_device_priv *priv = _usbdk_device_priv(dev_handle->dev); - if (!usbdk_helper.StopRedirect(priv->redirector_handle)) { - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); - usbi_err(ctx, "Redirector shutdown failed"); - } + if (!usbdk_helper.StopRedirect(priv->redirector_handle)) + usbi_err(HANDLE_CTX(dev_handle), "Redirector shutdown failed"); } static int usbdk_get_configuration(struct libusb_device_handle *dev_handle, int *config) @@ -460,7 +440,7 @@ static int usbdk_claim_interface(struct libusb_device_handle *dev_handle, int if static int usbdk_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) { - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct libusb_context *ctx = HANDLE_CTX(dev_handle); struct usbdk_device_priv *priv = _usbdk_device_priv(dev_handle->dev); if (!usbdk_helper.SetAltsetting(priv->redirector_handle, iface, altsetting)) { @@ -480,7 +460,7 @@ static int usbdk_release_interface(struct libusb_device_handle *dev_handle, int static int usbdk_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) { - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct libusb_context *ctx = HANDLE_CTX(dev_handle); struct usbdk_device_priv *priv = _usbdk_device_priv(dev_handle->dev); if (!usbdk_helper.ResetPipe(priv->redirector_handle, endpoint)) { @@ -493,7 +473,7 @@ static int usbdk_clear_halt(struct libusb_device_handle *dev_handle, unsigned ch static int usbdk_reset_device(struct libusb_device_handle *dev_handle) { - struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct libusb_context *ctx = HANDLE_CTX(dev_handle); struct usbdk_device_priv *priv = _usbdk_device_priv(dev_handle->dev); if (!usbdk_helper.ResetDevice(priv->redirector_handle)) { @@ -504,27 +484,6 @@ static int usbdk_reset_device(struct libusb_device_handle *dev_handle) return LIBUSB_SUCCESS; } -static int usbdk_kernel_driver_active(struct libusb_device_handle *dev_handle, int iface) -{ - UNUSED(dev_handle); - UNUSED(iface); - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static int usbdk_attach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) -{ - UNUSED(dev_handle); - UNUSED(iface); - return LIBUSB_ERROR_NOT_SUPPORTED; -} - -static int usbdk_detach_kernel_driver(struct libusb_device_handle *dev_handle, int iface) -{ - UNUSED(dev_handle); - UNUSED(iface); - return LIBUSB_ERROR_NOT_SUPPORTED; -} - static void usbdk_destroy_device(struct libusb_device *dev) { struct usbdk_device_priv* p = _usbdk_device_priv(dev); @@ -533,12 +492,14 @@ static void usbdk_destroy_device(struct libusb_device *dev) usbdk_release_config_descriptors(p, p->info.DeviceDescriptor.bNumConfigurations); } -void windows_clear_transfer_priv(struct usbi_transfer *itransfer) +static void usbdk_clear_transfer_priv(struct usbi_transfer *itransfer) { struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - usbi_free_fd(&transfer_priv->pollable_fd); + usbi_close(transfer_priv->pollable_fd.fd); + transfer_priv->pollable_fd = INVALID_WINFD; + transfer_priv->system_handle = NULL; if (transfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS) { safe_free(transfer_priv->IsochronousPacketsArray); @@ -551,47 +512,30 @@ static int usbdk_do_control_transfer(struct usbi_transfer *itransfer) struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct usbdk_device_priv *priv = _usbdk_device_priv(transfer->dev_handle->dev); struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct winfd wfd; - ULONG Length; + struct libusb_context *ctx = TRANSFER_CTX(transfer); + OVERLAPPED *overlapped = transfer_priv->pollable_fd.overlapped; TransferResult transResult; - HANDLE sysHandle; - - sysHandle = usbdk_helper.GetRedirectorSystemHandle(priv->redirector_handle); - - wfd = usbi_create_fd(sysHandle, RW_READ, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) - return LIBUSB_ERROR_NO_MEM; - transfer_priv->request.Buffer = (PVOID64)(uintptr_t)transfer->buffer; + transfer_priv->request.Buffer = (PVOID64)transfer->buffer; transfer_priv->request.BufferLength = transfer->length; transfer_priv->request.TransferType = ControlTransferType; - transfer_priv->pollable_fd = INVALID_WINFD; - Length = (ULONG)transfer->length; - if (IS_XFERIN(transfer)) - transResult = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + if (transfer->buffer[0] & LIBUSB_ENDPOINT_IN) + transResult = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, overlapped); else - transResult = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + transResult = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, overlapped); switch (transResult) { case TransferSuccess: - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; - wfd.overlapped->InternalHigh = (DWORD)Length; + windows_force_sync_completion(overlapped, (ULONG)transfer_priv->request.Result.GenResult.BytesTransferred); break; case TransferSuccessAsync: break; case TransferFailure: usbi_err(ctx, "ControlTransfer failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); return LIBUSB_ERROR_IO; } - // Use priv_transfer to store data needed for async polling - transfer_priv->pollable_fd = wfd; - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, POLLIN); - return LIBUSB_SUCCESS; } @@ -600,12 +544,11 @@ static int usbdk_do_bulk_transfer(struct usbi_transfer *itransfer) struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct usbdk_device_priv *priv = _usbdk_device_priv(transfer->dev_handle->dev); struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct winfd wfd; + struct libusb_context *ctx = TRANSFER_CTX(transfer); + OVERLAPPED *overlapped = transfer_priv->pollable_fd.overlapped; TransferResult transferRes; - HANDLE sysHandle; - transfer_priv->request.Buffer = (PVOID64)(uintptr_t)transfer->buffer; + transfer_priv->request.Buffer = (PVOID64)transfer->buffer; transfer_priv->request.BufferLength = transfer->length; transfer_priv->request.EndpointAddress = transfer->endpoint; @@ -614,42 +557,29 @@ static int usbdk_do_bulk_transfer(struct usbi_transfer *itransfer) transfer_priv->request.TransferType = BulkTransferType; break; case LIBUSB_TRANSFER_TYPE_INTERRUPT: - transfer_priv->request.TransferType = IntertuptTransferType; + transfer_priv->request.TransferType = InterruptTransferType; break; default: - usbi_err(ctx, "Wrong transfer type (%d) in usbdk_do_bulk_transfer. %s", transfer->type, windows_error_str(0)); + usbi_err(ctx, "Wrong transfer type (%d) in usbdk_do_bulk_transfer", transfer->type); return LIBUSB_ERROR_INVALID_PARAM; } - transfer_priv->pollable_fd = INVALID_WINFD; - - sysHandle = usbdk_helper.GetRedirectorSystemHandle(priv->redirector_handle); - - wfd = usbi_create_fd(sysHandle, IS_XFERIN(transfer) ? RW_READ : RW_WRITE, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) - return LIBUSB_ERROR_NO_MEM; - if (IS_XFERIN(transfer)) - transferRes = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + transferRes = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, overlapped); else - transferRes = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + transferRes = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, overlapped); switch (transferRes) { case TransferSuccess: - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + windows_force_sync_completion(overlapped, (ULONG)transfer_priv->request.Result.GenResult.BytesTransferred); break; case TransferSuccessAsync: break; case TransferFailure: usbi_err(ctx, "ReadPipe/WritePipe failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); return LIBUSB_ERROR_IO; } - transfer_priv->pollable_fd = wfd; - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, IS_XFERIN(transfer) ? POLLIN : POLLOUT); - return LIBUSB_SUCCESS; } @@ -658,68 +588,81 @@ static int usbdk_do_iso_transfer(struct usbi_transfer *itransfer) struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); struct usbdk_device_priv *priv = _usbdk_device_priv(transfer->dev_handle->dev); struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); - struct winfd wfd; + struct libusb_context *ctx = TRANSFER_CTX(transfer); + OVERLAPPED *overlapped = transfer_priv->pollable_fd.overlapped; TransferResult transferRes; int i; - HANDLE sysHandle; - transfer_priv->request.Buffer = (PVOID64)(uintptr_t)transfer->buffer; + transfer_priv->request.Buffer = (PVOID64)transfer->buffer; transfer_priv->request.BufferLength = transfer->length; transfer_priv->request.EndpointAddress = transfer->endpoint; transfer_priv->request.TransferType = IsochronousTransferType; transfer_priv->request.IsochronousPacketsArraySize = transfer->num_iso_packets; transfer_priv->IsochronousPacketsArray = malloc(transfer->num_iso_packets * sizeof(ULONG64)); - transfer_priv->request.IsochronousPacketsArray = (PVOID64)(uintptr_t)transfer_priv->IsochronousPacketsArray; + transfer_priv->request.IsochronousPacketsArray = (PVOID64)transfer_priv->IsochronousPacketsArray; if (!transfer_priv->IsochronousPacketsArray) { - usbi_err(ctx, "Allocation of IsochronousPacketsArray is failed, %s", windows_error_str(0)); - return LIBUSB_ERROR_IO; + usbi_err(ctx, "Allocation of IsochronousPacketsArray failed"); + return LIBUSB_ERROR_NO_MEM; } transfer_priv->IsochronousResultsArray = malloc(transfer->num_iso_packets * sizeof(USB_DK_ISO_TRANSFER_RESULT)); - transfer_priv->request.Result.IsochronousResultsArray = (PVOID64)(uintptr_t)transfer_priv->IsochronousResultsArray; + transfer_priv->request.Result.IsochronousResultsArray = (PVOID64)transfer_priv->IsochronousResultsArray; if (!transfer_priv->IsochronousResultsArray) { - usbi_err(ctx, "Allocation of isochronousResultsArray is failed, %s", windows_error_str(0)); - free(transfer_priv->IsochronousPacketsArray); - return LIBUSB_ERROR_IO; + usbi_err(ctx, "Allocation of isochronousResultsArray failed"); + return LIBUSB_ERROR_NO_MEM; } for (i = 0; i < transfer->num_iso_packets; i++) transfer_priv->IsochronousPacketsArray[i] = transfer->iso_packet_desc[i].length; - transfer_priv->pollable_fd = INVALID_WINFD; - - sysHandle = usbdk_helper.GetRedirectorSystemHandle(priv->redirector_handle); - - wfd = usbi_create_fd(sysHandle, IS_XFERIN(transfer) ? RW_READ : RW_WRITE, NULL, NULL); - // Always use the handle returned from usbi_create_fd (wfd.handle) - if (wfd.fd < 0) { - free(transfer_priv->IsochronousPacketsArray); - free(transfer_priv->IsochronousResultsArray); - return LIBUSB_ERROR_NO_MEM; - } - if (IS_XFERIN(transfer)) - transferRes = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + transferRes = usbdk_helper.ReadPipe(priv->redirector_handle, &transfer_priv->request, overlapped); else - transferRes = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, wfd.overlapped); + transferRes = usbdk_helper.WritePipe(priv->redirector_handle, &transfer_priv->request, overlapped); switch (transferRes) { case TransferSuccess: - wfd.overlapped->Internal = STATUS_COMPLETED_SYNCHRONOUSLY; + windows_force_sync_completion(overlapped, (ULONG)transfer_priv->request.Result.GenResult.BytesTransferred); break; case TransferSuccessAsync: break; case TransferFailure: - usbi_err(ctx, "ReadPipe/WritePipe failed: %s", windows_error_str(0)); - usbi_free_fd(&wfd); - free(transfer_priv->IsochronousPacketsArray); - free(transfer_priv->IsochronousResultsArray); return LIBUSB_ERROR_IO; } + return LIBUSB_SUCCESS; +} + +static int usbdk_do_submit_transfer(struct usbi_transfer *itransfer, + short events, int (*transfer_fn)(struct usbi_transfer *)) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = TRANSFER_CTX(transfer); + struct usbdk_device_priv *priv = _usbdk_device_priv(transfer->dev_handle->dev); + struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); + struct winfd wfd; + int r; + + wfd = usbi_create_fd(); + if (wfd.fd < 0) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_add_pollfd(ctx, wfd.fd, events); + if (r) { + usbi_close(wfd.fd); + return r; + } + + // Use transfer_priv to store data needed for async polling transfer_priv->pollable_fd = wfd; - usbi_add_pollfd(ctx, transfer_priv->pollable_fd.fd, IS_XFERIN(transfer) ? POLLIN : POLLOUT); + transfer_priv->system_handle = priv->system_handle; + + r = transfer_fn(itransfer); + if (r != LIBUSB_SUCCESS) { + usbi_remove_pollfd(ctx, wfd.fd); + usbdk_clear_transfer_priv(itransfer); + return r; + } return LIBUSB_SUCCESS; } @@ -727,33 +670,52 @@ static int usbdk_do_iso_transfer(struct usbi_transfer *itransfer) static int usbdk_submit_transfer(struct usbi_transfer *itransfer) { struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + int (*transfer_fn)(struct usbi_transfer *); + short events; switch (transfer->type) { case LIBUSB_TRANSFER_TYPE_CONTROL: - return usbdk_do_control_transfer(itransfer); + events = (transfer->buffer[0] & LIBUSB_ENDPOINT_IN) ? POLLIN : POLLOUT; + transfer_fn = usbdk_do_control_transfer; + break; case LIBUSB_TRANSFER_TYPE_BULK: case LIBUSB_TRANSFER_TYPE_INTERRUPT: if (IS_XFEROUT(transfer) && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)) return LIBUSB_ERROR_NOT_SUPPORTED; //TODO: Check whether we can support this in UsbDk - else - return usbdk_do_bulk_transfer(itransfer); + events = IS_XFERIN(transfer) ? POLLIN : POLLOUT; + transfer_fn = usbdk_do_bulk_transfer; + break; case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: - return usbdk_do_iso_transfer(itransfer); + events = IS_XFERIN(transfer) ? POLLIN : POLLOUT; + transfer_fn = usbdk_do_iso_transfer; + break; default: usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); return LIBUSB_ERROR_INVALID_PARAM; } + + return usbdk_do_submit_transfer(itransfer, events, transfer_fn); } static int usbdk_abort_transfers(struct usbi_transfer *itransfer) { struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct libusb_context *ctx = TRANSFER_CTX(transfer); struct usbdk_device_priv *priv = _usbdk_device_priv(transfer->dev_handle->dev); + struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); + struct winfd *pollable_fd = &transfer_priv->pollable_fd; - if (!usbdk_helper.AbortPipe(priv->redirector_handle, transfer->endpoint)) { - usbi_err(ctx, "AbortPipe failed: %s", windows_error_str(0)); - return LIBUSB_ERROR_NO_DEVICE; + if (pCancelIoEx != NULL) { + // Use CancelIoEx if available to cancel just a single transfer + if (!pCancelIoEx(priv->system_handle, pollable_fd->overlapped)) { + usbi_err(ctx, "CancelIoEx failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } + } else { + if (!usbdk_helper.AbortPipe(priv->redirector_handle, transfer->endpoint)) { + usbi_err(ctx, "AbortPipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } } return LIBUSB_SUCCESS; @@ -778,16 +740,16 @@ static int usbdk_cancel_transfer(struct usbi_transfer *itransfer) } } -int windows_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) +static int usbdk_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) { itransfer->transferred += io_size; return LIBUSB_TRANSFER_COMPLETED; } -struct winfd *windows_get_fd(struct usbi_transfer *transfer) +static int usbdk_get_transfer_fd(struct usbi_transfer *itransfer) { - struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(transfer); - return &transfer_priv->pollable_fd; + struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); + return transfer_priv->pollable_fd.fd; } static DWORD usbdk_translate_usbd_status(USBD_STATUS UsbdStatus) @@ -796,30 +758,28 @@ static DWORD usbdk_translate_usbd_status(USBD_STATUS UsbdStatus) return NO_ERROR; switch (UsbdStatus) { - case USBD_STATUS_STALL_PID: - case USBD_STATUS_ENDPOINT_HALTED: - case USBD_STATUS_BAD_START_FRAME: - return ERROR_GEN_FAILURE; case USBD_STATUS_TIMEOUT: return ERROR_SEM_TIMEOUT; case USBD_STATUS_CANCELED: return ERROR_OPERATION_ABORTED; default: - return ERROR_FUNCTION_FAILED; + return ERROR_GEN_FAILURE; } } -void windows_get_overlapped_result(struct usbi_transfer *transfer, struct winfd *pollable_fd, DWORD *io_result, DWORD *io_size) +static void usbdk_get_overlapped_result(struct usbi_transfer *itransfer, DWORD *io_result, DWORD *io_size) { + struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(itransfer); + struct winfd *pollable_fd = &transfer_priv->pollable_fd; + if (HasOverlappedIoCompletedSync(pollable_fd->overlapped) // Handle async requests that completed synchronously first - || GetOverlappedResult(pollable_fd->handle, pollable_fd->overlapped, io_size, false)) { // Regular async overlapped - struct libusb_transfer *ltransfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(transfer); - struct usbdk_transfer_priv *transfer_priv = _usbdk_transfer_priv(transfer); + || GetOverlappedResult(transfer_priv->system_handle, pollable_fd->overlapped, io_size, FALSE)) { // Regular async overlapped + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); - if (ltransfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS) { - int i; + if (transfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS) { + ULONG64 i; for (i = 0; i < transfer_priv->request.IsochronousPacketsArraySize; i++) { - struct libusb_iso_packet_descriptor *lib_desc = <ransfer->iso_packet_desc[i]; + struct libusb_iso_packet_descriptor *lib_desc = &transfer->iso_packet_desc[i]; switch (transfer_priv->IsochronousResultsArray[i].TransferResult) { case STATUS_SUCCESS: @@ -836,70 +796,35 @@ void windows_get_overlapped_result(struct usbi_transfer *transfer, struct winfd } } - *io_size = (DWORD) transfer_priv->request.Result.GenResult.BytesTransferred; - *io_result = usbdk_translate_usbd_status((USBD_STATUS) transfer_priv->request.Result.GenResult.UsbdStatus); - } - else { + *io_size = (DWORD)transfer_priv->request.Result.GenResult.BytesTransferred; + *io_result = usbdk_translate_usbd_status((USBD_STATUS)transfer_priv->request.Result.GenResult.UsbdStatus); + } else { *io_result = GetLastError(); } } -static int usbdk_clock_gettime(int clk_id, struct timespec *tp) -{ - return windows_clock_gettime(clk_id, tp); -} - -const struct usbi_os_backend usbdk_backend = { - "Windows", - USBI_CAP_HAS_HID_ACCESS, +const struct windows_backend usbdk_backend = { usbdk_init, usbdk_exit, - usbdk_get_device_list, - NULL, usbdk_open, usbdk_close, - usbdk_get_device_descriptor, usbdk_get_active_config_descriptor, usbdk_get_config_descriptor, - NULL, - + usbdk_get_config_descriptor_by_value, usbdk_get_configuration, usbdk_set_configuration, usbdk_claim_interface, usbdk_release_interface, - usbdk_set_interface_altsetting, usbdk_clear_halt, usbdk_reset_device, - - NULL, - NULL, - - NULL, // dev_mem_alloc() - NULL, // dev_mem_free() - - usbdk_kernel_driver_active, - usbdk_detach_kernel_driver, - usbdk_attach_kernel_driver, - usbdk_destroy_device, - usbdk_submit_transfer, usbdk_cancel_transfer, - windows_clear_transfer_priv, - - windows_handle_events, - NULL, - - usbdk_clock_gettime, -#if defined(USBI_TIMERFD_AVAILABLE) - NULL, -#endif - sizeof(struct usbdk_device_priv), - 0, - sizeof(struct usbdk_transfer_priv), + usbdk_clear_transfer_priv, + usbdk_copy_transfer_data, + usbdk_get_transfer_fd, + usbdk_get_overlapped_result, }; - -#endif /* USE_USBDK */ diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.h similarity index 64% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.h index 04a9787f2d6b..77660ae97ffc 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_usbdk.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_usbdk.h @@ -23,56 +23,13 @@ #pragma once -typedef struct tag_USB_DK_DEVICE_ID { - WCHAR DeviceID[MAX_DEVICE_ID_LEN]; - WCHAR InstanceID[MAX_DEVICE_ID_LEN]; -} USB_DK_DEVICE_ID, *PUSB_DK_DEVICE_ID; +#include "windows_nt_common.h" -static inline void UsbDkFillIDStruct(USB_DK_DEVICE_ID *ID, PCWCHAR DeviceID, PCWCHAR InstanceID) -{ - wcsncpy_s(ID->DeviceID, DeviceID, MAX_DEVICE_ID_LEN); - wcsncpy_s(ID->InstanceID, InstanceID, MAX_DEVICE_ID_LEN); -} - -typedef struct tag_USB_DK_DEVICE_INFO { - USB_DK_DEVICE_ID ID; - ULONG64 FilterID; - ULONG64 Port; - ULONG64 Speed; - USB_DEVICE_DESCRIPTOR DeviceDescriptor; -} USB_DK_DEVICE_INFO, *PUSB_DK_DEVICE_INFO; - -typedef struct tag_USB_DK_CONFIG_DESCRIPTOR_REQUEST { +typedef struct USB_DK_CONFIG_DESCRIPTOR_REQUEST { USB_DK_DEVICE_ID ID; ULONG64 Index; } USB_DK_CONFIG_DESCRIPTOR_REQUEST, *PUSB_DK_CONFIG_DESCRIPTOR_REQUEST; -typedef struct tag_USB_DK_ISO_TRANSFER_RESULT { - ULONG64 ActualLength; - ULONG64 TransferResult; -} USB_DK_ISO_TRANSFER_RESULT, *PUSB_DK_ISO_TRANSFER_RESULT; - -typedef struct tag_USB_DK_GEN_TRANSFER_RESULT { - ULONG64 BytesTransferred; - ULONG64 UsbdStatus; // USBD_STATUS code -} USB_DK_GEN_TRANSFER_RESULT, *PUSB_DK_GEN_TRANSFER_RESULT; - -typedef struct tag_USB_DK_TRANSFER_RESULT { - USB_DK_GEN_TRANSFER_RESULT GenResult; - PVOID64 IsochronousResultsArray; // array of USB_DK_ISO_TRANSFER_RESULT -} USB_DK_TRANSFER_RESULT, *PUSB_DK_TRANSFER_RESULT; - -typedef struct tag_USB_DK_TRANSFER_REQUEST { - ULONG64 EndpointAddress; - PVOID64 Buffer; - ULONG64 BufferLength; - ULONG64 TransferType; - ULONG64 IsochronousPacketsArraySize; - PVOID64 IsochronousPacketsArray; - - USB_DK_TRANSFER_RESULT Result; -} USB_DK_TRANSFER_REQUEST, *PUSB_DK_TRANSFER_REQUEST; - typedef enum { TransferFailure = 0, TransferSuccess, @@ -90,7 +47,7 @@ typedef enum { typedef enum { ControlTransferType, BulkTransferType, - IntertuptTransferType, + InterruptTransferType, IsochronousTransferType } USB_DK_TRANSFER_TYPE; diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.c b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.c new file mode 100644 index 000000000000..ce1b55cd61b0 --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.c @@ -0,0 +1,3009 @@ +/* + * windows backend for libusb 1.0 + * Copyright © 2009-2012 Pete Batard + * Copyright © 2016-2018 Chris Dickens + * With contributions from Michael Plante, Orin Eman et al. + * Parts of this code adapted from libusb-win32-v1 by Stephan Meyer + * HID Reports IOCTLs inspired from HIDAPI by Alan Ott, Signal 11 Software + * Hash table functions adapted from glibc, by Ulrich Drepper et al. + * Major code testing contribution by Xiaofan Chen + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libusbi.h" +#include "windows_common.h" +#include "windows_nt_common.h" +#include "windows_winusb.h" + +// Unfuckup the 'inferface' keyword +#undef interface + +#define HANDLE_VALID(h) (((h) != NULL) && ((h) != INVALID_HANDLE_VALUE)) + +// The 2 macros below are used in conjunction with safe loops. +#define LOOP_CHECK(fcall) \ + { \ + r = fcall; \ + if (r != LIBUSB_SUCCESS) \ + continue; \ + } +#define LOOP_BREAK(err) \ + { \ + r = err; \ + continue; \ + } + +// WinUSB-like API prototypes +static int winusbx_init(struct libusb_context *ctx); +static void winusbx_exit(void); +static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle); +static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle); +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int winusbx_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); +static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); +static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); +static int winusbx_abort_transfers(int sub_api, struct usbi_transfer *itransfer); +static int winusbx_abort_control(int sub_api, struct usbi_transfer *itransfer); +static int winusbx_reset_device(int sub_api, struct libusb_device_handle *dev_handle); +static int winusbx_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size); +// Composite API prototypes +static int composite_open(int sub_api, struct libusb_device_handle *dev_handle); +static void composite_close(int sub_api, struct libusb_device_handle *dev_handle); +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting); +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface); +static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer); +static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer); +static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer); +static int composite_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint); +static int composite_abort_transfers(int sub_api, struct usbi_transfer *itransfer); +static int composite_abort_control(int sub_api, struct usbi_transfer *itransfer); +static int composite_reset_device(int sub_api, struct libusb_device_handle *dev_handle); +static int composite_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size); + +static usbi_mutex_t autoclaim_lock; + +// API globals +static HMODULE WinUSBX_handle = NULL; +static struct winusb_interface WinUSBX[SUB_API_MAX]; +#define CHECK_WINUSBX_AVAILABLE(sub_api) \ + do { \ + if (sub_api == SUB_API_NOTSET) \ + sub_api = priv->sub_api; \ + if (!WinUSBX[sub_api].initialized) \ + return LIBUSB_ERROR_ACCESS; \ + } while (0) + +static bool api_hid_available = false; +#define CHECK_HID_AVAILABLE \ + do { \ + if (!api_hid_available) \ + return LIBUSB_ERROR_ACCESS; \ + } while (0) + +#if defined(ENABLE_LOGGING) +static const char *guid_to_string(const GUID *guid) +{ + static char guid_string[MAX_GUID_STRING_LENGTH]; + + if (guid == NULL) + return ""; + + sprintf(guid_string, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", + (unsigned int)guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], + guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); + + return guid_string; +} +#endif + +/* + * Sanitize Microsoft's paths: convert to uppercase, add prefix and fix backslashes. + * Return an allocated sanitized string or NULL on error. + */ +static char *sanitize_path(const char *path) +{ + const char root_prefix[] = {'\\', '\\', '.', '\\'}; + size_t j, size; + char *ret_path; + size_t add_root = 0; + + if (path == NULL) + return NULL; + + size = strlen(path) + 1; + + // Microsoft indiscriminately uses '\\?\', '\\.\', '##?#" or "##.#" for root prefixes. + if (!((size > 3) && (((path[0] == '\\') && (path[1] == '\\') && (path[3] == '\\')) + || ((path[0] == '#') && (path[1] == '#') && (path[3] == '#'))))) { + add_root = sizeof(root_prefix); + size += add_root; + } + + ret_path = malloc(size); + if (ret_path == NULL) + return NULL; + + strcpy(&ret_path[add_root], path); + + // Ensure consistency with root prefix + memcpy(ret_path, root_prefix, sizeof(root_prefix)); + + // Same goes for '\' and '#' after the root prefix. Ensure '#' is used + for (j = sizeof(root_prefix); j < size; j++) { + ret_path[j] = (char)toupper((int)ret_path[j]); // Fix case too + if (ret_path[j] == '\\') + ret_path[j] = '#'; + } + + return ret_path; +} + +/* + * Cfgmgr32, AdvAPI32, OLE32 and SetupAPI DLL functions + */ +static BOOL init_dlls(void) +{ + DLL_GET_HANDLE(Cfgmgr32); + DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Parent, TRUE); + DLL_LOAD_FUNC(Cfgmgr32, CM_Get_Child, TRUE); + + // Prefixed to avoid conflict with header files + DLL_GET_HANDLE(AdvAPI32); + DLL_LOAD_FUNC_PREFIXED(AdvAPI32, p, RegQueryValueExW, TRUE); + DLL_LOAD_FUNC_PREFIXED(AdvAPI32, p, RegCloseKey, TRUE); + + DLL_GET_HANDLE(OLE32); + DLL_LOAD_FUNC_PREFIXED(OLE32, p, IIDFromString, TRUE); + + DLL_GET_HANDLE(SetupAPI); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetClassDevsA, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiEnumDeviceInfo, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiEnumDeviceInterfaces, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetDeviceInstanceIdA, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetDeviceInterfaceDetailA, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiGetDeviceRegistryPropertyA, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiDestroyDeviceInfoList, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiOpenDevRegKey, TRUE); + DLL_LOAD_FUNC_PREFIXED(SetupAPI, p, SetupDiOpenDeviceInterfaceRegKey, TRUE); + + return TRUE; +} + +static void exit_dlls(void) +{ + DLL_FREE_HANDLE(Cfgmgr32); + DLL_FREE_HANDLE(AdvAPI32); + DLL_FREE_HANDLE(OLE32); + DLL_FREE_HANDLE(SetupAPI); +} + +/* + * enumerate interfaces for the whole USB class + * + * Parameters: + * dev_info: a pointer to a dev_info list + * dev_info_data: a pointer to an SP_DEVINFO_DATA to be filled (or NULL if not needed) + * enumerator: the generic USB class for which to retrieve interface details + * index: zero based index of the interface in the device info list + * + * Note: it is the responsibility of the caller to free the DEVICE_INTERFACE_DETAIL_DATA + * structure returned and call this function repeatedly using the same guid (with an + * incremented index starting at zero) until all interfaces have been returned. + */ +static bool get_devinfo_data(struct libusb_context *ctx, + HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const char *enumerator, unsigned _index) +{ + if (_index == 0) { + *dev_info = pSetupDiGetClassDevsA(NULL, enumerator, NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); + if (*dev_info == INVALID_HANDLE_VALUE) { + usbi_err(ctx, "could not obtain device info set for PnP enumerator '%s': %s", + enumerator, windows_error_str(0)); + return false; + } + } + + dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); + if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) + usbi_err(ctx, "could not obtain device info data for PnP enumerator '%s' index %u: %s", + enumerator, _index, windows_error_str(0)); + + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return false; + } + return true; +} + +/* + * enumerate interfaces for a specific GUID + * + * Parameters: + * dev_info: a pointer to a dev_info list + * dev_info_data: a pointer to an SP_DEVINFO_DATA to be filled (or NULL if not needed) + * guid: the GUID for which to retrieve interface details + * index: zero based index of the interface in the device info list + * + * Note: it is the responsibility of the caller to free the DEVICE_INTERFACE_DETAIL_DATA + * structure returned and call this function repeatedly using the same guid (with an + * incremented index starting at zero) until all interfaces have been returned. + */ +static int get_interface_details(struct libusb_context *ctx, HDEVINFO dev_info, + PSP_DEVINFO_DATA dev_info_data, LPCGUID guid, DWORD *_index, char **dev_interface_path) +{ + SP_DEVICE_INTERFACE_DATA dev_interface_data; + PSP_DEVICE_INTERFACE_DETAIL_DATA_A dev_interface_details; + DWORD size; + + dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); + dev_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + for (;;) { + if (!pSetupDiEnumDeviceInfo(dev_info, *_index, dev_info_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) { + usbi_err(ctx, "Could not obtain device info data for %s index %u: %s", + guid_to_string(guid), *_index, windows_error_str(0)); + return LIBUSB_ERROR_OTHER; + } + + // No more devices + return LIBUSB_SUCCESS; + } + + // Always advance the index for the next iteration + (*_index)++; + + if (pSetupDiEnumDeviceInterfaces(dev_info, dev_info_data, guid, 0, &dev_interface_data)) + break; + + if (GetLastError() != ERROR_NO_MORE_ITEMS) { + usbi_err(ctx, "Could not obtain interface data for %s devInst %X: %s", + guid_to_string(guid), dev_info_data->DevInst, windows_error_str(0)); + return LIBUSB_ERROR_OTHER; + } + + // Device does not have an interface matching this GUID, skip + } + + // Read interface data (dummy + actual) to access the device path + if (!pSetupDiGetDeviceInterfaceDetailA(dev_info, &dev_interface_data, NULL, 0, &size, NULL)) { + // The dummy call should fail with ERROR_INSUFFICIENT_BUFFER + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { + usbi_err(ctx, "could not access interface data (dummy) for %s devInst %X: %s", + guid_to_string(guid), dev_info_data->DevInst, windows_error_str(0)); + return LIBUSB_ERROR_OTHER; + } + } else { + usbi_err(ctx, "program assertion failed - http://msdn.microsoft.com/en-us/library/ms792901.aspx is wrong"); + return LIBUSB_ERROR_OTHER; + } + + dev_interface_details = malloc(size); + if (dev_interface_details == NULL) { + usbi_err(ctx, "could not allocate interface data for %s devInst %X", + guid_to_string(guid), dev_info_data->DevInst); + return LIBUSB_ERROR_NO_MEM; + } + + dev_interface_details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); + if (!pSetupDiGetDeviceInterfaceDetailA(dev_info, &dev_interface_data, + dev_interface_details, size, NULL, NULL)) { + usbi_err(ctx, "could not access interface data (actual) for %s devInst %X: %s", + guid_to_string(guid), dev_info_data->DevInst, windows_error_str(0)); + free(dev_interface_details); + return LIBUSB_ERROR_OTHER; + } + + *dev_interface_path = sanitize_path(dev_interface_details->DevicePath); + free(dev_interface_details); + + if (*dev_interface_path == NULL) { + usbi_err(ctx, "could not allocate interface path for %s devInst %X", + guid_to_string(guid), dev_info_data->DevInst); + return LIBUSB_ERROR_NO_MEM; + } + + return LIBUSB_SUCCESS; +} + +/* For libusb0 filter */ +static SP_DEVICE_INTERFACE_DETAIL_DATA_A *get_interface_details_filter(struct libusb_context *ctx, + HDEVINFO *dev_info, SP_DEVINFO_DATA *dev_info_data, const GUID *guid, unsigned _index, char *filter_path) +{ + SP_DEVICE_INTERFACE_DATA dev_interface_data; + SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details; + DWORD size; + + if (_index == 0) + *dev_info = pSetupDiGetClassDevsA(guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); + + if (dev_info_data != NULL) { + dev_info_data->cbSize = sizeof(SP_DEVINFO_DATA); + if (!pSetupDiEnumDeviceInfo(*dev_info, _index, dev_info_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) + usbi_err(ctx, "Could not obtain device info data for index %u: %s", + _index, windows_error_str(0)); + + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; + } + } + + dev_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + if (!pSetupDiEnumDeviceInterfaces(*dev_info, NULL, guid, _index, &dev_interface_data)) { + if (GetLastError() != ERROR_NO_MORE_ITEMS) + usbi_err(ctx, "Could not obtain interface data for index %u: %s", + _index, windows_error_str(0)); + + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; + } + + // Read interface data (dummy + actual) to access the device path + if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, NULL, 0, &size, NULL)) { + // The dummy call should fail with ERROR_INSUFFICIENT_BUFFER + if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { + usbi_err(ctx, "could not access interface data (dummy) for index %u: %s", + _index, windows_error_str(0)); + goto err_exit; + } + } else { + usbi_err(ctx, "program assertion failed - http://msdn.microsoft.com/en-us/library/ms792901.aspx is wrong."); + goto err_exit; + } + + dev_interface_details = calloc(1, size); + if (dev_interface_details == NULL) { + usbi_err(ctx, "could not allocate interface data for index %u.", _index); + goto err_exit; + } + + dev_interface_details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); + if (!pSetupDiGetDeviceInterfaceDetailA(*dev_info, &dev_interface_data, dev_interface_details, size, &size, NULL)) + usbi_err(ctx, "could not access interface data (actual) for index %u: %s", + _index, windows_error_str(0)); + + // [trobinso] lookup the libusb0 symbolic index. + if (dev_interface_details) { + HKEY hkey_device_interface = pSetupDiOpenDeviceInterfaceRegKey(*dev_info, &dev_interface_data, 0, KEY_READ); + if (hkey_device_interface != INVALID_HANDLE_VALUE) { + DWORD libusb0_symboliclink_index = 0; + DWORD value_length = sizeof(DWORD); + DWORD value_type = 0; + LONG status; + + status = pRegQueryValueExW(hkey_device_interface, L"LUsb0", NULL, &value_type, + (LPBYTE)&libusb0_symboliclink_index, &value_length); + if (status == ERROR_SUCCESS) { + if (libusb0_symboliclink_index < 256) { + // libusb0.sys is connected to this device instance. + // If the the device interface guid is {F9F3FF14-AE21-48A0-8A25-8011A7A931D9} then it's a filter. + sprintf(filter_path, "\\\\.\\libusb0-%04u", (unsigned int)libusb0_symboliclink_index); + usbi_dbg("assigned libusb0 symbolic link %s", filter_path); + } else { + // libusb0.sys was connected to this device instance at one time; but not anymore. + } + } + pRegCloseKey(hkey_device_interface); + } + } + + return dev_interface_details; + +err_exit: + pSetupDiDestroyDeviceInfoList(*dev_info); + *dev_info = INVALID_HANDLE_VALUE; + return NULL; +} + +/* + * Returns the first known ancestor of a device + */ +static struct libusb_device *get_ancestor(struct libusb_context *ctx, + DEVINST devinst, PDEVINST _parent_devinst) +{ + struct libusb_device *dev = NULL; + DEVINST parent_devinst; + + while (dev == NULL) { + if (CM_Get_Parent(&parent_devinst, devinst, 0) != CR_SUCCESS) + break; + devinst = parent_devinst; + dev = usbi_get_device_by_session_id(ctx, (unsigned long)devinst); + } + + if ((dev != NULL) && (_parent_devinst != NULL)) + *_parent_devinst = devinst; + + return dev; +} + +/* + * Determine which interface the given endpoint address belongs to + */ +static int get_interface_by_endpoint(struct libusb_config_descriptor *conf_desc, uint8_t ep) +{ + const struct libusb_interface *intf; + const struct libusb_interface_descriptor *intf_desc; + int i, j, k; + + for (i = 0; i < conf_desc->bNumInterfaces; i++) { + intf = &conf_desc->interface[i]; + for (j = 0; j < intf->num_altsetting; j++) { + intf_desc = &intf->altsetting[j]; + for (k = 0; k < intf_desc->bNumEndpoints; k++) { + if (intf_desc->endpoint[k].bEndpointAddress == ep) { + usbi_dbg("found endpoint %02X on interface %d", intf_desc->bInterfaceNumber, i); + return intf_desc->bInterfaceNumber; + } + } + } + } + + usbi_dbg("endpoint %02X not found on any interface", ep); + return LIBUSB_ERROR_NOT_FOUND; +} + +/* + * Populate the endpoints addresses of the device_priv interface helper structs + */ +static int windows_assign_endpoints(struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + int i, r; + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + struct libusb_config_descriptor *conf_desc; + const struct libusb_interface_descriptor *if_desc; + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + + r = libusb_get_active_config_descriptor(dev_handle->dev, &conf_desc); + if (r != LIBUSB_SUCCESS) { + usbi_warn(ctx, "could not read config descriptor: error %d", r); + return r; + } + + if_desc = &conf_desc->interface[iface].altsetting[altsetting]; + safe_free(priv->usb_interface[iface].endpoint); + + if (if_desc->bNumEndpoints == 0) { + usbi_dbg("no endpoints found for interface %d", iface); + libusb_free_config_descriptor(conf_desc); + return LIBUSB_SUCCESS; + } + + priv->usb_interface[iface].endpoint = malloc(if_desc->bNumEndpoints); + if (priv->usb_interface[iface].endpoint == NULL) { + libusb_free_config_descriptor(conf_desc); + return LIBUSB_ERROR_NO_MEM; + } + + priv->usb_interface[iface].nb_endpoints = if_desc->bNumEndpoints; + for (i = 0; i < if_desc->bNumEndpoints; i++) { + priv->usb_interface[iface].endpoint[i] = if_desc->endpoint[i].bEndpointAddress; + usbi_dbg("(re)assigned endpoint %02X to interface %d", priv->usb_interface[iface].endpoint[i], iface); + } + libusb_free_config_descriptor(conf_desc); + + // Extra init may be required to configure endpoints + if (priv->apib->configure_endpoints) + r = priv->apib->configure_endpoints(SUB_API_NOTSET, dev_handle, iface); + + return r; +} + +// Lookup for a match in the list of API driver names +// return -1 if not found, driver match number otherwise +static int get_sub_api(char *driver, int api) +{ + int i; + const char sep_str[2] = {LIST_SEPARATOR, 0}; + char *tok, *tmp_str; + size_t len = strlen(driver); + + if (len == 0) + return SUB_API_NOTSET; + + tmp_str = _strdup(driver); + if (tmp_str == NULL) + return SUB_API_NOTSET; + + tok = strtok(tmp_str, sep_str); + while (tok != NULL) { + for (i = 0; i < usb_api_backend[api].nb_driver_names; i++) { + if (_stricmp(tok, usb_api_backend[api].driver_name_list[i]) == 0) { + free(tmp_str); + return i; + } + } + tok = strtok(NULL, sep_str); + } + + free(tmp_str); + return SUB_API_NOTSET; +} + +/* + * auto-claiming and auto-release helper functions + */ +static int auto_claim(struct libusb_transfer *transfer, int *interface_number, int api_type) +{ + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv( + transfer->dev_handle); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface = *interface_number; + int r = LIBUSB_SUCCESS; + + switch (api_type) { + case USB_API_WINUSBX: + case USB_API_HID: + break; + default: + return LIBUSB_ERROR_INVALID_PARAM; + } + + usbi_mutex_lock(&autoclaim_lock); + if (current_interface < 0) { // No serviceable interface was found + for (current_interface = 0; current_interface < USB_MAXINTERFACES; current_interface++) { + // Must claim an interface of the same API type + if ((priv->usb_interface[current_interface].apib->id == api_type) + && (libusb_claim_interface(transfer->dev_handle, current_interface) == LIBUSB_SUCCESS)) { + usbi_dbg("auto-claimed interface %d for control request", current_interface); + if (handle_priv->autoclaim_count[current_interface] != 0) + usbi_warn(ctx, "program assertion failed - autoclaim_count was nonzero"); + handle_priv->autoclaim_count[current_interface]++; + break; + } + } + if (current_interface == USB_MAXINTERFACES) { + usbi_err(ctx, "could not auto-claim any interface"); + r = LIBUSB_ERROR_NOT_FOUND; + } + } else { + // If we have a valid interface that was autoclaimed, we must increment + // its autoclaim count so that we can prevent an early release. + if (handle_priv->autoclaim_count[current_interface] != 0) + handle_priv->autoclaim_count[current_interface]++; + } + usbi_mutex_unlock(&autoclaim_lock); + + *interface_number = current_interface; + return r; +} + +static void auto_release(struct usbi_transfer *itransfer) +{ + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + libusb_device_handle *dev_handle = transfer->dev_handle; + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + int r; + + usbi_mutex_lock(&autoclaim_lock); + if (handle_priv->autoclaim_count[transfer_priv->interface_number] > 0) { + handle_priv->autoclaim_count[transfer_priv->interface_number]--; + if (handle_priv->autoclaim_count[transfer_priv->interface_number] == 0) { + r = libusb_release_interface(dev_handle, transfer_priv->interface_number); + if (r == LIBUSB_SUCCESS) + usbi_dbg("auto-released interface %d", transfer_priv->interface_number); + else + usbi_dbg("failed to auto-release interface %d (%s)", + transfer_priv->interface_number, libusb_error_name((enum libusb_error)r)); + } + } + usbi_mutex_unlock(&autoclaim_lock); +} + +/* + * init: libusb backend init function + */ +static int winusb_init(struct libusb_context *ctx) +{ + int i; + + // We need a lock for proper auto-release + usbi_mutex_init(&autoclaim_lock); + + // Load DLL imports + if (!init_dlls()) { + usbi_err(ctx, "could not resolve DLL functions"); + return LIBUSB_ERROR_OTHER; + } + + // Initialize the low level APIs (we don't care about errors at this stage) + for (i = 0; i < USB_API_MAX; i++) { + if (usb_api_backend[i].init && usb_api_backend[i].init(ctx)) + usbi_warn(ctx, "error initializing %s backend", + usb_api_backend[i].designation); + } + + return LIBUSB_SUCCESS; +} + +/* +* exit: libusb backend deinitialization function +*/ +static void winusb_exit(struct libusb_context *ctx) +{ + int i; + + for (i = 0; i < USB_API_MAX; i++) { + if (usb_api_backend[i].exit) + usb_api_backend[i].exit(); + } + + exit_dlls(); + usbi_mutex_destroy(&autoclaim_lock); +} + +/* + * fetch and cache all the config descriptors through I/O + */ +static void cache_config_descriptors(struct libusb_device *dev, HANDLE hub_handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev); + struct winusb_device_priv *priv = _device_priv(dev); + DWORD size, ret_size; + uint8_t i; + + USB_CONFIGURATION_DESCRIPTOR_SHORT cd_buf_short; // dummy request + PUSB_DESCRIPTOR_REQUEST cd_buf_actual = NULL; // actual request + PUSB_CONFIGURATION_DESCRIPTOR cd_data; + + if (dev->num_configurations == 0) + return; + + priv->config_descriptor = calloc(dev->num_configurations, sizeof(PUSB_CONFIGURATION_DESCRIPTOR)); + if (priv->config_descriptor == NULL) { + usbi_err(ctx, "could not allocate configuration descriptor array for '%s'", priv->dev_id); + return; + } + + for (i = 0; i <= dev->num_configurations; i++) { + safe_free(cd_buf_actual); + + if (i == dev->num_configurations) + break; + + size = sizeof(cd_buf_short); + memset(&cd_buf_short, 0, size); + + cd_buf_short.req.ConnectionIndex = (ULONG)dev->port_number; + cd_buf_short.req.SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; + cd_buf_short.req.SetupPacket.bRequest = LIBUSB_REQUEST_GET_DESCRIPTOR; + cd_buf_short.req.SetupPacket.wValue = (LIBUSB_DT_CONFIG << 8) | i; + cd_buf_short.req.SetupPacket.wIndex = 0; + cd_buf_short.req.SetupPacket.wLength = (USHORT)sizeof(USB_CONFIGURATION_DESCRIPTOR); + + // Dummy call to get the required data size. Initial failures are reported as info rather + // than error as they can occur for non-penalizing situations, such as with some hubs. + // coverity[tainted_data_argument] + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, &cd_buf_short, size, + &cd_buf_short, size, &ret_size, NULL)) { + usbi_info(ctx, "could not access configuration descriptor %u (dummy) for '%s': %s", i, priv->dev_id, windows_error_str(0)); + continue; + } + + if ((ret_size != size) || (cd_buf_short.desc.wTotalLength < sizeof(USB_CONFIGURATION_DESCRIPTOR))) { + usbi_info(ctx, "unexpected configuration descriptor %u size (dummy) for '%s'", i, priv->dev_id); + continue; + } + + size = sizeof(USB_DESCRIPTOR_REQUEST) + cd_buf_short.desc.wTotalLength; + cd_buf_actual = malloc(size); + if (cd_buf_actual == NULL) { + usbi_err(ctx, "could not allocate configuration descriptor %u buffer for '%s'", i, priv->dev_id); + continue; + } + + // Actual call + cd_buf_actual->ConnectionIndex = (ULONG)dev->port_number; + cd_buf_actual->SetupPacket.bmRequest = LIBUSB_ENDPOINT_IN; + cd_buf_actual->SetupPacket.bRequest = LIBUSB_REQUEST_GET_DESCRIPTOR; + cd_buf_actual->SetupPacket.wValue = (LIBUSB_DT_CONFIG << 8) | i; + cd_buf_actual->SetupPacket.wIndex = 0; + cd_buf_actual->SetupPacket.wLength = cd_buf_short.desc.wTotalLength; + + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, cd_buf_actual, size, + cd_buf_actual, size, &ret_size, NULL)) { + usbi_err(ctx, "could not access configuration descriptor %u (actual) for '%s': %s", i, priv->dev_id, windows_error_str(0)); + continue; + } + + cd_data = (PUSB_CONFIGURATION_DESCRIPTOR)((UCHAR *)cd_buf_actual + sizeof(USB_DESCRIPTOR_REQUEST)); + + if ((size != ret_size) || (cd_data->wTotalLength != cd_buf_short.desc.wTotalLength)) { + usbi_err(ctx, "unexpected configuration descriptor %u size (actual) for '%s'", i, priv->dev_id); + continue; + } + + if (cd_data->bDescriptorType != LIBUSB_DT_CONFIG) { + usbi_err(ctx, "descriptor %u not a configuration descriptor for '%s'", i, priv->dev_id); + continue; + } + + usbi_dbg("cached config descriptor %u (bConfigurationValue=%u, %u bytes)", + i, cd_data->bConfigurationValue, cd_data->wTotalLength); + + // Cache the descriptor + priv->config_descriptor[i] = malloc(cd_data->wTotalLength); + if (priv->config_descriptor[i] != NULL) { + memcpy(priv->config_descriptor[i], cd_data, cd_data->wTotalLength); + } else { + usbi_err(ctx, "could not allocate configuration descriptor %u buffer for '%s'", i, priv->dev_id); + } + } +} + +/* + * Populate a libusb device structure + */ +static int init_device(struct libusb_device *dev, struct libusb_device *parent_dev, + uint8_t port_number, DEVINST devinst) +{ + struct libusb_context *ctx; + struct libusb_device *tmp_dev; + struct winusb_device_priv *priv, *parent_priv; + USB_NODE_CONNECTION_INFORMATION_EX conn_info; + USB_NODE_CONNECTION_INFORMATION_EX_V2 conn_info_v2; + HANDLE hub_handle; + DWORD size; + uint8_t bus_number, depth; + int r; + + priv = _device_priv(dev); + + // If the device is already initialized, we can stop here + if (priv->initialized) + return LIBUSB_SUCCESS; + + if (parent_dev != NULL) { // Not a HCD root hub + ctx = DEVICE_CTX(dev); + parent_priv = _device_priv(parent_dev); + if (parent_priv->apib->id != USB_API_HUB) { + usbi_warn(ctx, "parent for device '%s' is not a hub", priv->dev_id); + return LIBUSB_ERROR_NOT_FOUND; + } + + // Calculate depth and fetch bus number + bus_number = parent_dev->bus_number; + if (bus_number == 0) { + tmp_dev = get_ancestor(ctx, devinst, &devinst); + if (tmp_dev != parent_dev) { + usbi_err(ctx, "program assertion failed - first ancestor is not parent"); + return LIBUSB_ERROR_NOT_FOUND; + } + libusb_unref_device(tmp_dev); + + for (depth = 1; bus_number == 0; depth++) { + tmp_dev = get_ancestor(ctx, devinst, &devinst); + if (tmp_dev->bus_number != 0) { + bus_number = tmp_dev->bus_number; + depth += _device_priv(tmp_dev)->depth; + } + libusb_unref_device(tmp_dev); + } + } else { + depth = parent_priv->depth + 1; + } + + if (bus_number == 0) { + usbi_err(ctx, "program assertion failed - bus number not found for '%s'", priv->dev_id); + return LIBUSB_ERROR_NOT_FOUND; + } + + dev->bus_number = bus_number; + dev->port_number = port_number; + dev->parent_dev = parent_dev; + priv->depth = depth; + + hub_handle = CreateFileA(parent_priv->path, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + 0, NULL); + if (hub_handle == INVALID_HANDLE_VALUE) { + usbi_warn(ctx, "could not open hub %s: %s", parent_priv->path, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + + memset(&conn_info, 0, sizeof(conn_info)); + conn_info.ConnectionIndex = (ULONG)port_number; + // coverity[tainted_data_argument] + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX, &conn_info, sizeof(conn_info), + &conn_info, sizeof(conn_info), &size, NULL)) { + usbi_warn(ctx, "could not get node connection information for device '%s': %s", + priv->dev_id, windows_error_str(0)); + CloseHandle(hub_handle); + return LIBUSB_ERROR_NO_DEVICE; + } + + if (conn_info.ConnectionStatus == NoDeviceConnected) { + usbi_err(ctx, "device '%s' is no longer connected!", priv->dev_id); + CloseHandle(hub_handle); + return LIBUSB_ERROR_NO_DEVICE; + } + + memcpy(&priv->dev_descriptor, &(conn_info.DeviceDescriptor), sizeof(USB_DEVICE_DESCRIPTOR)); + dev->num_configurations = priv->dev_descriptor.bNumConfigurations; + priv->active_config = conn_info.CurrentConfigurationValue; + usbi_dbg("found %u configurations (active conf: %u)", dev->num_configurations, priv->active_config); + + // Cache as many config descriptors as we can + cache_config_descriptors(dev, hub_handle); + + // In their great wisdom, Microsoft decided to BREAK the USB speed report between Windows 7 and Windows 8 + if (windows_version >= WINDOWS_8) { + conn_info_v2.ConnectionIndex = (ULONG)port_number; + conn_info_v2.Length = sizeof(USB_NODE_CONNECTION_INFORMATION_EX_V2); + conn_info_v2.SupportedUsbProtocols.Usb300 = 1; + if (!DeviceIoControl(hub_handle, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, + &conn_info_v2, sizeof(conn_info_v2), &conn_info_v2, sizeof(conn_info_v2), &size, NULL)) { + usbi_warn(ctx, "could not get node connection information (V2) for device '%s': %s", + priv->dev_id, windows_error_str(0)); + } else if (conn_info_v2.Flags.DeviceIsOperatingAtSuperSpeedOrHigher) { + conn_info.Speed = 3; + } + } + + CloseHandle(hub_handle); + + if (conn_info.DeviceAddress > UINT8_MAX) + usbi_err(ctx, "program assertion failed - device address overflow"); + + dev->device_address = (uint8_t)conn_info.DeviceAddress; + + switch (conn_info.Speed) { + case 0: dev->speed = LIBUSB_SPEED_LOW; break; + case 1: dev->speed = LIBUSB_SPEED_FULL; break; + case 2: dev->speed = LIBUSB_SPEED_HIGH; break; + case 3: dev->speed = LIBUSB_SPEED_SUPER; break; + default: + usbi_warn(ctx, "unknown device speed %u", conn_info.Speed); + break; + } + } + + r = usbi_sanitize_device(dev); + if (r) + return r; + + priv->initialized = true; + + usbi_dbg("(bus: %u, addr: %u, depth: %u, port: %u): '%s'", + dev->bus_number, dev->device_address, priv->depth, dev->port_number, priv->dev_id); + + return LIBUSB_SUCCESS; +} + +static int enumerate_hcd_root_hub(struct libusb_context *ctx, const char *dev_id, + uint8_t bus_number, DEVINST devinst) +{ + struct libusb_device *dev; + struct winusb_device_priv *priv; + unsigned long session_id; + DEVINST child_devinst; + + if (CM_Get_Child(&child_devinst, devinst, 0) != CR_SUCCESS) { + usbi_err(ctx, "could not get child devinst for '%s'", dev_id); + return LIBUSB_ERROR_OTHER; + } + + session_id = (unsigned long)child_devinst; + dev = usbi_get_device_by_session_id(ctx, session_id); + if (dev == NULL) { + usbi_err(ctx, "program assertion failed - HCD '%s' child not found", dev_id); + return LIBUSB_ERROR_NO_DEVICE; + } + + if (dev->bus_number == 0) { + // Only do this once + usbi_dbg("assigning HCD '%s' bus number %u", dev_id, bus_number); + priv = _device_priv(dev); + dev->bus_number = bus_number; + dev->num_configurations = 1; + priv->dev_descriptor.bLength = LIBUSB_DT_DEVICE_SIZE; + priv->dev_descriptor.bDescriptorType = LIBUSB_DT_DEVICE; + priv->dev_descriptor.bDeviceClass = LIBUSB_CLASS_HUB; + priv->dev_descriptor.bNumConfigurations = 1; + priv->active_config = 1; + priv->root_hub = true; + if (sscanf(dev_id, "PCI\\VEN_%04hx&DEV_%04hx%*s", &priv->dev_descriptor.idVendor, &priv->dev_descriptor.idProduct) != 2) { + usbi_warn(ctx, "could not infer VID/PID of HCD root hub from '%s'", dev_id); + priv->dev_descriptor.idVendor = 0x1d6b; // Linux Foundation root hub + priv->dev_descriptor.idProduct = 1; + } + } + + libusb_unref_device(dev); + return LIBUSB_SUCCESS; +} + +// Returns the api type, or 0 if not found/unsupported +static void get_api_type(struct libusb_context *ctx, HDEVINFO *dev_info, + SP_DEVINFO_DATA *dev_info_data, int *api, int *sub_api) +{ + // Precedence for filter drivers vs driver is in the order of this array + struct driver_lookup lookup[3] = { + {"\0\0", SPDRP_SERVICE, "driver"}, + {"\0\0", SPDRP_UPPERFILTERS, "upper filter driver"}, + {"\0\0", SPDRP_LOWERFILTERS, "lower filter driver"} + }; + DWORD size, reg_type; + unsigned k, l; + int i, j; + + // Check the service & filter names to know the API we should use + for (k = 0; k < 3; k++) { + if (pSetupDiGetDeviceRegistryPropertyA(*dev_info, dev_info_data, lookup[k].reg_prop, + ®_type, (PBYTE)lookup[k].list, MAX_KEY_LENGTH, &size)) { + // Turn the REG_SZ SPDRP_SERVICE into REG_MULTI_SZ + if (lookup[k].reg_prop == SPDRP_SERVICE) + // our buffers are MAX_KEY_LENGTH + 1 so we can overflow if needed + lookup[k].list[strlen(lookup[k].list) + 1] = 0; + + // MULTI_SZ is a pain to work with. Turn it into something much more manageable + // NB: none of the driver names we check against contain LIST_SEPARATOR, + // (currently ';'), so even if an unsuported one does, it's not an issue + for (l = 0; (lookup[k].list[l] != 0) || (lookup[k].list[l + 1] != 0); l++) { + if (lookup[k].list[l] == 0) + lookup[k].list[l] = LIST_SEPARATOR; + } + usbi_dbg("%s(s): %s", lookup[k].designation, lookup[k].list); + } else { + if (GetLastError() != ERROR_INVALID_DATA) + usbi_dbg("could not access %s: %s", lookup[k].designation, windows_error_str(0)); + lookup[k].list[0] = 0; + } + } + + for (i = 2; i < USB_API_MAX; i++) { + for (k = 0; k < 3; k++) { + j = get_sub_api(lookup[k].list, i); + if (j >= 0) { + usbi_dbg("matched %s name against %s", lookup[k].designation, + (i != USB_API_WINUSBX) ? usb_api_backend[i].designation : usb_api_backend[i].driver_name_list[j]); + *api = i; + *sub_api = j; + return; + } + } + } +} + +static int set_composite_interface(struct libusb_context *ctx, struct libusb_device *dev, + char *dev_interface_path, char *device_id, int api, int sub_api) +{ + struct winusb_device_priv *priv = _device_priv(dev); + int interface_number; + const char *mi_str; + + // Because MI_## are not necessarily in sequential order (some composite + // devices will have only MI_00 & MI_03 for instance), we retrieve the actual + // interface number from the path's MI value + mi_str = strstr(device_id, "MI_"); + if ((mi_str != NULL) && isdigit(mi_str[3]) && isdigit(mi_str[4])) { + interface_number = ((mi_str[3] - '0') * 10) + (mi_str[4] - '0'); + } else { + usbi_warn(ctx, "failure to read interface number for %s, using default value", device_id); + interface_number = 0; + } + + if (interface_number >= USB_MAXINTERFACES) { + usbi_warn(ctx, "interface %d too large - ignoring interface path %s", interface_number, dev_interface_path); + return LIBUSB_ERROR_ACCESS; + } + + if (priv->usb_interface[interface_number].path != NULL) { + if (api == USB_API_HID) { + // HID devices can have multiple collections (COL##) for each MI_## interface + usbi_dbg("interface[%d] already set - ignoring HID collection: %s", + interface_number, device_id); + return LIBUSB_ERROR_ACCESS; + } + // In other cases, just use the latest data + safe_free(priv->usb_interface[interface_number].path); + } + + usbi_dbg("interface[%d] = %s", interface_number, dev_interface_path); + priv->usb_interface[interface_number].path = dev_interface_path; + priv->usb_interface[interface_number].apib = &usb_api_backend[api]; + priv->usb_interface[interface_number].sub_api = sub_api; + if ((api == USB_API_HID) && (priv->hid == NULL)) { + priv->hid = calloc(1, sizeof(struct hid_device_priv)); + if (priv->hid == NULL) + return LIBUSB_ERROR_NO_MEM; + } + + return LIBUSB_SUCCESS; +} + +static int set_hid_interface(struct libusb_context *ctx, struct libusb_device *dev, + char *dev_interface_path) +{ + int i; + struct winusb_device_priv *priv = _device_priv(dev); + + if (priv->hid == NULL) { + usbi_err(ctx, "program assertion failed: parent is not HID"); + return LIBUSB_ERROR_NO_DEVICE; + } else if (priv->hid->nb_interfaces == USB_MAXINTERFACES) { + usbi_err(ctx, "program assertion failed: max USB interfaces reached for HID device"); + return LIBUSB_ERROR_NO_DEVICE; + } + + for (i = 0; i < priv->hid->nb_interfaces; i++) { + if ((priv->usb_interface[i].path != NULL) && strcmp(priv->usb_interface[i].path, dev_interface_path) == 0) { + usbi_dbg("interface[%d] already set to %s", i, dev_interface_path); + return LIBUSB_ERROR_ACCESS; + } + } + + priv->usb_interface[priv->hid->nb_interfaces].path = dev_interface_path; + priv->usb_interface[priv->hid->nb_interfaces].apib = &usb_api_backend[USB_API_HID]; + usbi_dbg("interface[%u] = %s", priv->hid->nb_interfaces, dev_interface_path); + priv->hid->nb_interfaces++; + return LIBUSB_SUCCESS; +} + +/* + * get_device_list: libusb backend device enumeration function + */ +static int winusb_get_device_list(struct libusb_context *ctx, struct discovered_devs **_discdevs) +{ + struct discovered_devs *discdevs; + HDEVINFO *dev_info, dev_info_intf, dev_info_enum; + SP_DEVINFO_DATA dev_info_data; + DWORD _index = 0; + GUID hid_guid; + int r = LIBUSB_SUCCESS; + int api, sub_api; + unsigned int pass, i, j; + char enumerator[16]; + char dev_id[MAX_PATH_LENGTH]; + struct libusb_device *dev, *parent_dev; + struct winusb_device_priv *priv, *parent_priv; + char *dev_interface_path = NULL; + unsigned long session_id; + DWORD size, port_nr, reg_type, install_state; + HKEY key; + WCHAR guid_string_w[MAX_GUID_STRING_LENGTH]; + GUID *if_guid; + LONG s; +#define HUB_PASS 0 +#define DEV_PASS 1 +#define HCD_PASS 2 +#define GEN_PASS 3 +#define HID_PASS 4 +#define EXT_PASS 5 + // Keep a list of guids that will be enumerated +#define GUID_SIZE_STEP 8 + const GUID **guid_list, **new_guid_list; + unsigned int guid_size = GUID_SIZE_STEP; + unsigned int nb_guids; + // Keep a list of PnP enumerator strings that are found + char *usb_enumerator[8] = { "USB" }; + unsigned int nb_usb_enumerators = 1; + unsigned int usb_enum_index = 0; + // Keep a list of newly allocated devs to unref +#define UNREF_SIZE_STEP 16 + libusb_device **unref_list, **new_unref_list; + unsigned int unref_size = UNREF_SIZE_STEP; + unsigned int unref_cur = 0; + + // PASS 1 : (re)enumerate HCDs (allows for HCD hotplug) + // PASS 2 : (re)enumerate HUBS + // PASS 3 : (re)enumerate generic USB devices (including driverless) + // and list additional USB device interface GUIDs to explore + // PASS 4 : (re)enumerate master USB devices that have a device interface + // PASS 5+: (re)enumerate device interfaced GUIDs (including HID) and + // set the device interfaces. + + // Init the GUID table + guid_list = malloc(guid_size * sizeof(void *)); + if (guid_list == NULL) { + usbi_err(ctx, "failed to alloc guid list"); + return LIBUSB_ERROR_NO_MEM; + } + + guid_list[HUB_PASS] = &GUID_DEVINTERFACE_USB_HUB; + guid_list[DEV_PASS] = &GUID_DEVINTERFACE_USB_DEVICE; + guid_list[HCD_PASS] = &GUID_DEVINTERFACE_USB_HOST_CONTROLLER; + guid_list[GEN_PASS] = NULL; + if (api_hid_available) { + HidD_GetHidGuid(&hid_guid); + guid_list[HID_PASS] = &hid_guid; + } else { + guid_list[HID_PASS] = NULL; + } + nb_guids = EXT_PASS; + + unref_list = malloc(unref_size * sizeof(void *)); + if (unref_list == NULL) { + usbi_err(ctx, "failed to alloc unref list"); + free((void *)guid_list); + return LIBUSB_ERROR_NO_MEM; + } + + dev_info_intf = pSetupDiGetClassDevsA(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); + if (dev_info_intf == INVALID_HANDLE_VALUE) { + usbi_err(ctx, "failed to obtain device info list: %s", windows_error_str(0)); + free(unref_list); + free((void *)guid_list); + return LIBUSB_ERROR_OTHER; + } + + for (pass = 0; ((pass < nb_guids) && (r == LIBUSB_SUCCESS)); pass++) { +//#define ENUM_DEBUG +#if defined(ENABLE_LOGGING) && defined(ENUM_DEBUG) + const char * const passname[] = {"HUB", "DEV", "HCD", "GEN", "HID", "EXT"}; + usbi_dbg("#### PROCESSING %ss %s", passname[MIN(pass, EXT_PASS)], guid_to_string(guid_list[pass])); +#endif + if ((pass == HID_PASS) && (guid_list[HID_PASS] == NULL)) + continue; + + dev_info = (pass != GEN_PASS) ? &dev_info_intf : &dev_info_enum; + + for (i = 0; ; i++) { + // safe loop: free up any (unprotected) dynamic resource + // NB: this is always executed before breaking the loop + safe_free(dev_interface_path); + priv = parent_priv = NULL; + dev = parent_dev = NULL; + + // Safe loop: end of loop conditions + if (r != LIBUSB_SUCCESS) + break; + + if ((pass == HCD_PASS) && (i == UINT8_MAX)) { + usbi_warn(ctx, "program assertion failed - found more than %u buses, skipping the rest.", UINT8_MAX); + break; + } + + if (pass != GEN_PASS) { + // Except for GEN, all passes deal with device interfaces + r = get_interface_details(ctx, *dev_info, &dev_info_data, guid_list[pass], &_index, &dev_interface_path); + if ((r != LIBUSB_SUCCESS) || (dev_interface_path == NULL)) { + _index = 0; + break; + } + } else { + // Workaround for a Nec/Renesas USB 3.0 driver bug where root hubs are + // being listed under the "NUSB3" PnP Symbolic Name rather than "USB". + // The Intel USB 3.0 driver behaves similar, but uses "IUSB3" + // The Intel Alpine Ridge USB 3.1 driver uses "IARUSB3" + for (; usb_enum_index < nb_usb_enumerators; usb_enum_index++) { + if (get_devinfo_data(ctx, dev_info, &dev_info_data, usb_enumerator[usb_enum_index], i)) + break; + i = 0; + } + if (usb_enum_index == nb_usb_enumerators) + break; + } + + // Read the Device ID path + if (!pSetupDiGetDeviceInstanceIdA(*dev_info, &dev_info_data, dev_id, sizeof(dev_id), NULL)) { + usbi_warn(ctx, "could not read the device instance ID for devInst %X, skipping", + dev_info_data.DevInst); + continue; + } + +#ifdef ENUM_DEBUG + usbi_dbg("PRO: %s", dev_id); +#endif + + // Set API to use or get additional data from generic pass + api = USB_API_UNSUPPORTED; + sub_api = SUB_API_NOTSET; + switch (pass) { + case HCD_PASS: + break; + case HUB_PASS: + api = USB_API_HUB; + // Fetch the PnP enumerator class for this hub + // This will allow us to enumerate all classes during the GEN pass + if (!pSetupDiGetDeviceRegistryPropertyA(*dev_info, &dev_info_data, SPDRP_ENUMERATOR_NAME, + NULL, (PBYTE)enumerator, sizeof(enumerator), NULL)) { + usbi_err(ctx, "could not read enumerator string for device '%s': %s", dev_id, windows_error_str(0)); + LOOP_BREAK(LIBUSB_ERROR_OTHER); + } + for (j = 0; j < nb_usb_enumerators; j++) { + if (strcmp(usb_enumerator[j], enumerator) == 0) + break; + } + if (j == nb_usb_enumerators) { + usbi_dbg("found new PnP enumerator string '%s'", enumerator); + if (nb_usb_enumerators < ARRAYSIZE(usb_enumerator)) { + usb_enumerator[nb_usb_enumerators] = _strdup(enumerator); + if (usb_enumerator[nb_usb_enumerators] != NULL) { + nb_usb_enumerators++; + } else { + usbi_err(ctx, "could not allocate enumerator string '%s'", enumerator); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + } else { + usbi_warn(ctx, "too many enumerator strings, some devices may not be accessible"); + } + } + break; + case GEN_PASS: + // We use the GEN pass to detect driverless devices... + if (!pSetupDiGetDeviceRegistryPropertyA(*dev_info, &dev_info_data, SPDRP_DRIVER, + NULL, NULL, 0, NULL) && (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) { + usbi_info(ctx, "The following device has no driver: '%s'", dev_id); + usbi_info(ctx, "libusb will not be able to access it"); + } + // ...and to add the additional device interface GUIDs + key = pSetupDiOpenDevRegKey(*dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ); + if (key == INVALID_HANDLE_VALUE) + break; + // Look for both DeviceInterfaceGUIDs *and* DeviceInterfaceGUID, in that order + size = sizeof(guid_string_w); + s = pRegQueryValueExW(key, L"DeviceInterfaceGUIDs", NULL, ®_type, + (LPBYTE)guid_string_w, &size); + if (s == ERROR_FILE_NOT_FOUND) + s = pRegQueryValueExW(key, L"DeviceInterfaceGUID", NULL, ®_type, + (LPBYTE)guid_string_w, &size); + pRegCloseKey(key); + if ((s == ERROR_SUCCESS) && + (((reg_type == REG_SZ) && (size == (sizeof(guid_string_w) - sizeof(WCHAR)))) || + ((reg_type == REG_MULTI_SZ) && (size == sizeof(guid_string_w))))) { + if (nb_guids == guid_size) { + new_guid_list = realloc((void *)guid_list, (guid_size + GUID_SIZE_STEP) * sizeof(void *)); + if (new_guid_list == NULL) { + usbi_err(ctx, "failed to realloc guid list"); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + guid_list = new_guid_list; + guid_size += GUID_SIZE_STEP; + } + if_guid = malloc(sizeof(*if_guid)); + if (if_guid == NULL) { + usbi_err(ctx, "failed to alloc if_guid"); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + if (pIIDFromString(guid_string_w, if_guid) != 0) { + usbi_warn(ctx, "device '%s' has malformed DeviceInterfaceGUID string, skipping", dev_id); + free(if_guid); + } else { + // Check if we've already seen this GUID + for (j = EXT_PASS; j < nb_guids; j++) { + if (memcmp(guid_list[j], if_guid, sizeof(*if_guid)) == 0) + break; + } + if (j == nb_guids) { + usbi_dbg("extra GUID: %s", guid_to_string(if_guid)); + guid_list[nb_guids++] = if_guid; + } else { + // Duplicate, ignore + free(if_guid); + } + } + } else if (s == ERROR_SUCCESS) { + usbi_warn(ctx, "unexpected type/size of DeviceInterfaceGUID for '%s'", dev_id); + } + break; + case HID_PASS: + api = USB_API_HID; + break; + default: + // Get the API type (after checking that the driver installation is OK) + if ((!pSetupDiGetDeviceRegistryPropertyA(*dev_info, &dev_info_data, SPDRP_INSTALL_STATE, + NULL, (PBYTE)&install_state, sizeof(install_state), &size)) || (size != sizeof(install_state))) { + usbi_warn(ctx, "could not detect installation state of driver for '%s': %s", + dev_id, windows_error_str(0)); + } else if (install_state != 0) { + usbi_warn(ctx, "driver for device '%s' is reporting an issue (code: %u) - skipping", + dev_id, (unsigned int)install_state); + continue; + } + get_api_type(ctx, dev_info, &dev_info_data, &api, &sub_api); + break; + } + + // Find parent device (for the passes that need it) + if (pass >= GEN_PASS) { + parent_dev = get_ancestor(ctx, dev_info_data.DevInst, NULL); + if (parent_dev == NULL) { + // Root hubs will not have a parent + dev = usbi_get_device_by_session_id(ctx, (unsigned long)dev_info_data.DevInst); + if (dev != NULL) { + priv = _device_priv(dev); + if (priv->root_hub) + goto track_unref; + libusb_unref_device(dev); + } + + usbi_dbg("unlisted ancestor for '%s' (non USB HID, newly connected, etc.) - ignoring", dev_id); + continue; + } + + parent_priv = _device_priv(parent_dev); + // virtual USB devices are also listed during GEN - don't process these yet + if ((pass == GEN_PASS) && (parent_priv->apib->id != USB_API_HUB)) { + libusb_unref_device(parent_dev); + continue; + } + } + + // Create new or match existing device, using the devInst as session id + if ((pass <= GEN_PASS) && (pass != HCD_PASS)) { // For subsequent passes, we'll lookup the parent + // These are the passes that create "new" devices + session_id = (unsigned long)dev_info_data.DevInst; + dev = usbi_get_device_by_session_id(ctx, session_id); + if (dev == NULL) { + alloc_device: + usbi_dbg("allocating new device for session [%lX]", session_id); + dev = usbi_alloc_device(ctx, session_id); + if (dev == NULL) + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + + priv = winusb_device_priv_init(dev); + priv->dev_id = _strdup(dev_id); + if (priv->dev_id == NULL) { + libusb_unref_device(dev); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + } else { + usbi_dbg("found existing device for session [%lX]", session_id); + + priv = _device_priv(dev); + if (strcmp(priv->dev_id, dev_id) != 0) { + usbi_dbg("device instance ID for session [%lX] changed", session_id); + usbi_disconnect_device(dev); + libusb_unref_device(dev); + goto alloc_device; + } + } + + track_unref: + // Keep track of devices that need unref + if (unref_cur == unref_size) { + new_unref_list = realloc(unref_list, (unref_size + UNREF_SIZE_STEP) * sizeof(void *)); + if (new_unref_list == NULL) { + usbi_err(ctx, "could not realloc list for unref - aborting"); + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + } + unref_list = new_unref_list; + unref_size += UNREF_SIZE_STEP; + } + unref_list[unref_cur++] = dev; + } + + // Setup device + switch (pass) { + case HUB_PASS: + case DEV_PASS: + // If the device has already been setup, don't do it again + if (priv->path != NULL) + break; + // Take care of API initialization + priv->path = dev_interface_path; + dev_interface_path = NULL; + priv->apib = &usb_api_backend[api]; + priv->sub_api = sub_api; + switch (api) { + case USB_API_COMPOSITE: + case USB_API_HUB: + break; + case USB_API_HID: + priv->hid = calloc(1, sizeof(struct hid_device_priv)); + if (priv->hid == NULL) + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + break; + default: + // For other devices, the first interface is the same as the device + priv->usb_interface[0].path = _strdup(priv->path); + if (priv->usb_interface[0].path == NULL) + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + // The following is needed if we want API calls to work for both simple + // and composite devices. + for (j = 0; j < USB_MAXINTERFACES; j++) + priv->usb_interface[j].apib = &usb_api_backend[api]; + break; + } + break; + case HCD_PASS: + r = enumerate_hcd_root_hub(ctx, dev_id, (uint8_t)(i + 1), dev_info_data.DevInst); + break; + case GEN_PASS: + // The SPDRP_ADDRESS for USB devices is the device port number on the hub + port_nr = 0; + if (!pSetupDiGetDeviceRegistryPropertyA(*dev_info, &dev_info_data, SPDRP_ADDRESS, + NULL, (PBYTE)&port_nr, sizeof(port_nr), &size) || (size != sizeof(port_nr))) + usbi_warn(ctx, "could not retrieve port number for device '%s': %s", dev_id, windows_error_str(0)); + r = init_device(dev, parent_dev, (uint8_t)port_nr, dev_info_data.DevInst); + if (r == LIBUSB_SUCCESS) { + // Append device to the list of discovered devices + discdevs = discovered_devs_append(*_discdevs, dev); + if (!discdevs) + LOOP_BREAK(LIBUSB_ERROR_NO_MEM); + + *_discdevs = discdevs; + } else if (r == LIBUSB_ERROR_NO_DEVICE) { + // This can occur if the device was disconnected but Windows hasn't + // refreshed its enumeration yet - in that case, we ignore the device + r = LIBUSB_SUCCESS; + } + break; + default: // HID_PASS and later + if (parent_priv->apib->id == USB_API_HID || parent_priv->apib->id == USB_API_COMPOSITE) { + if (parent_priv->apib->id == USB_API_HID) { + usbi_dbg("setting HID interface for [%lX]:", parent_dev->session_data); + r = set_hid_interface(ctx, parent_dev, dev_interface_path); + } else { + usbi_dbg("setting composite interface for [%lX]:", parent_dev->session_data); + r = set_composite_interface(ctx, parent_dev, dev_interface_path, dev_id, api, sub_api); + } + switch (r) { + case LIBUSB_SUCCESS: + dev_interface_path = NULL; + break; + case LIBUSB_ERROR_ACCESS: + // interface has already been set => make sure dev_interface_path is freed then + r = LIBUSB_SUCCESS; + break; + default: + LOOP_BREAK(r); + break; + } + } + libusb_unref_device(parent_dev); + break; + } + } + } + + pSetupDiDestroyDeviceInfoList(dev_info_intf); + + // Free any additional GUIDs + for (pass = EXT_PASS; pass < nb_guids; pass++) + free((void *)guid_list[pass]); + free((void *)guid_list); + + // Free any PnP enumerator strings + for (i = 1; i < nb_usb_enumerators; i++) + free(usb_enumerator[i]); + + // Unref newly allocated devs + for (i = 0; i < unref_cur; i++) + libusb_unref_device(unref_list[i]); + free(unref_list); + + return r; +} + +static int winusb_get_device_descriptor(struct libusb_device *dev, unsigned char *buffer) +{ + struct winusb_device_priv *priv = _device_priv(dev); + + memcpy(buffer, &priv->dev_descriptor, DEVICE_DESC_LENGTH); + return LIBUSB_SUCCESS; +} + +static int winusb_get_config_descriptor(struct libusb_device *dev, uint8_t config_index, unsigned char *buffer, size_t len) +{ + struct winusb_device_priv *priv = _device_priv(dev); + PUSB_CONFIGURATION_DESCRIPTOR config_header; + size_t size; + + // config index is zero based + if (config_index >= dev->num_configurations) + return LIBUSB_ERROR_INVALID_PARAM; + + if ((priv->config_descriptor == NULL) || (priv->config_descriptor[config_index] == NULL)) + return LIBUSB_ERROR_NOT_FOUND; + + config_header = priv->config_descriptor[config_index]; + + size = MIN(config_header->wTotalLength, len); + memcpy(buffer, priv->config_descriptor[config_index], size); + return (int)size; +} + +static int winusb_get_config_descriptor_by_value(struct libusb_device *dev, uint8_t bConfigurationValue, + unsigned char **buffer) +{ + struct winusb_device_priv *priv = _device_priv(dev); + PUSB_CONFIGURATION_DESCRIPTOR config_header; + uint8_t index; + + if (priv->config_descriptor == NULL) + return LIBUSB_ERROR_NOT_FOUND; + + for (index = 0; index < dev->num_configurations; index++) { + config_header = priv->config_descriptor[index]; + if (config_header == NULL) + continue; + if (config_header->bConfigurationValue == bConfigurationValue) { + *buffer = (unsigned char *)priv->config_descriptor[index]; + return (int)config_header->wTotalLength; + } + } + + return LIBUSB_ERROR_NOT_FOUND; +} + +/* + * return the cached copy of the active config descriptor + */ +static int winusb_get_active_config_descriptor(struct libusb_device *dev, unsigned char *buffer, size_t len) +{ + struct winusb_device_priv *priv = _device_priv(dev); + unsigned char *config_desc; + int r; + + if (priv->active_config == 0) + return LIBUSB_ERROR_NOT_FOUND; + + r = winusb_get_config_descriptor_by_value(dev, priv->active_config, &config_desc); + if (r < 0) + return r; + + len = MIN((size_t)r, len); + memcpy(buffer, config_desc, len); + return (int)len; +} + +static int winusb_open(struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, open); + + return priv->apib->open(SUB_API_NOTSET, dev_handle); +} + +static void winusb_close(struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + if (priv->apib->close) + priv->apib->close(SUB_API_NOTSET, dev_handle); +} + +static int winusb_get_configuration(struct libusb_device_handle *dev_handle, int *config) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + if (priv->active_config == 0) { + *config = 0; + return LIBUSB_ERROR_NOT_FOUND; + } + + *config = priv->active_config; + return LIBUSB_SUCCESS; +} + +/* + * from http://msdn.microsoft.com/en-us/library/ms793522.aspx: "The port driver + * does not currently expose a service that allows higher-level drivers to set + * the configuration." + */ +static int winusb_set_configuration(struct libusb_device_handle *dev_handle, int config) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int r = LIBUSB_SUCCESS; + + if (config >= USB_MAXCONFIG) + return LIBUSB_ERROR_INVALID_PARAM; + + r = libusb_control_transfer(dev_handle, LIBUSB_ENDPOINT_OUT | + LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, + LIBUSB_REQUEST_SET_CONFIGURATION, (uint16_t)config, + 0, NULL, 0, 1000); + + if (r == LIBUSB_SUCCESS) + priv->active_config = (uint8_t)config; + + return r; +} + +static int winusb_claim_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int r; + + CHECK_SUPPORTED_API(priv->apib, claim_interface); + + safe_free(priv->usb_interface[iface].endpoint); + priv->usb_interface[iface].nb_endpoints = 0; + + r = priv->apib->claim_interface(SUB_API_NOTSET, dev_handle, iface); + + if (r == LIBUSB_SUCCESS) + r = windows_assign_endpoints(dev_handle, iface, 0); + + return r; +} + +static int winusb_set_interface_altsetting(struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int r; + + CHECK_SUPPORTED_API(priv->apib, set_interface_altsetting); + + safe_free(priv->usb_interface[iface].endpoint); + priv->usb_interface[iface].nb_endpoints = 0; + + r = priv->apib->set_interface_altsetting(SUB_API_NOTSET, dev_handle, iface, altsetting); + + if (r == LIBUSB_SUCCESS) + r = windows_assign_endpoints(dev_handle, iface, altsetting); + + return r; +} + +static int winusb_release_interface(struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, release_interface); + + return priv->apib->release_interface(SUB_API_NOTSET, dev_handle, iface); +} + +static int winusb_clear_halt(struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, clear_halt); + + return priv->apib->clear_halt(SUB_API_NOTSET, dev_handle, endpoint); +} + +static int winusb_reset_device(struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, reset_device); + + return priv->apib->reset_device(SUB_API_NOTSET, dev_handle); +} + +static void winusb_destroy_device(struct libusb_device *dev) +{ + winusb_device_priv_release(dev); +} + +static void winusb_clear_transfer_priv(struct usbi_transfer *itransfer) +{ + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + + usbi_close(transfer_priv->pollable_fd.fd); + transfer_priv->pollable_fd = INVALID_WINFD; + transfer_priv->handle = NULL; + safe_free(transfer_priv->hid_buffer); + safe_free(transfer_priv->iso_context); + + // When auto claim is in use, attempt to release the auto-claimed interface + auto_release(itransfer); +} + +static int do_submit_transfer(struct usbi_transfer *itransfer, short events, + int (*transfer_fn)(int, struct usbi_transfer *)) +{ + struct libusb_context *ctx = ITRANSFER_CTX(itransfer); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winfd wfd; + int r; + + wfd = usbi_create_fd(); + if (wfd.fd < 0) + return LIBUSB_ERROR_NO_MEM; + + r = usbi_add_pollfd(ctx, wfd.fd, events); + if (r) { + usbi_close(wfd.fd); + return r; + } + + // Use transfer_priv to store data needed for async polling + transfer_priv->pollable_fd = wfd; + + r = transfer_fn(SUB_API_NOTSET, itransfer); + + if ((r != LIBUSB_SUCCESS) && (r != LIBUSB_ERROR_OVERFLOW)) { + usbi_remove_pollfd(ctx, wfd.fd); + usbi_close(wfd.fd); + transfer_priv->pollable_fd = INVALID_WINFD; + } + + return r; +} + +static int winusb_submit_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int (*transfer_fn)(int, struct usbi_transfer *); + short events; + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + events = (transfer->buffer[0] & LIBUSB_ENDPOINT_IN) ? POLLIN : POLLOUT; + transfer_fn = priv->apib->submit_control_transfer; + break; + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + if (IS_XFEROUT(transfer) && (transfer->flags & LIBUSB_TRANSFER_ADD_ZERO_PACKET)) + return LIBUSB_ERROR_NOT_SUPPORTED; + events = IS_XFERIN(transfer) ? POLLIN : POLLOUT; + transfer_fn = priv->apib->submit_bulk_transfer; + break; + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + events = IS_XFERIN(transfer) ? POLLIN : POLLOUT; + transfer_fn = priv->apib->submit_iso_transfer; + break; + case LIBUSB_TRANSFER_TYPE_BULK_STREAM: + return LIBUSB_ERROR_NOT_SUPPORTED; + default: + usbi_err(TRANSFER_CTX(transfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } + + if (transfer_fn == NULL) { + usbi_warn(TRANSFER_CTX(transfer), + "unsupported transfer type %d (unrecognized device driver)", + transfer->type); + return LIBUSB_ERROR_NOT_SUPPORTED; + } + + return do_submit_transfer(itransfer, events, transfer_fn); +} + +static int windows_abort_control(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, abort_control); + + return priv->apib->abort_control(SUB_API_NOTSET, itransfer); +} + +static int windows_abort_transfers(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + + CHECK_SUPPORTED_API(priv->apib, abort_transfers); + + return priv->apib->abort_transfers(SUB_API_NOTSET, itransfer); +} + +static int winusb_cancel_transfer(struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + + switch (transfer->type) { + case LIBUSB_TRANSFER_TYPE_CONTROL: + return windows_abort_control(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK: + case LIBUSB_TRANSFER_TYPE_INTERRUPT: + case LIBUSB_TRANSFER_TYPE_ISOCHRONOUS: + return windows_abort_transfers(itransfer); + case LIBUSB_TRANSFER_TYPE_BULK_STREAM: + return LIBUSB_ERROR_NOT_SUPPORTED; + default: + usbi_err(ITRANSFER_CTX(itransfer), "unknown endpoint type %d", transfer->type); + return LIBUSB_ERROR_INVALID_PARAM; + } +} + +static int winusb_copy_transfer_data(struct usbi_transfer *itransfer, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + return priv->apib->copy_transfer_data(SUB_API_NOTSET, itransfer, io_size); +} + +static int winusb_get_transfer_fd(struct usbi_transfer *itransfer) +{ + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + return transfer_priv->pollable_fd.fd; +} + +static void winusb_get_overlapped_result(struct usbi_transfer *itransfer, + DWORD *io_result, DWORD *io_size) +{ + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winfd *pollable_fd = &transfer_priv->pollable_fd; + + if (HasOverlappedIoCompletedSync(pollable_fd->overlapped)) { + *io_result = NO_ERROR; + *io_size = (DWORD)pollable_fd->overlapped->InternalHigh; + } else if (GetOverlappedResult(transfer_priv->handle, pollable_fd->overlapped, io_size, FALSE)) { + // Regular async overlapped + *io_result = NO_ERROR; + } else { + *io_result = GetLastError(); + } +} + +// NB: MSVC6 does not support named initializers. +const struct windows_backend winusb_backend = { + winusb_init, + winusb_exit, + winusb_get_device_list, + winusb_open, + winusb_close, + winusb_get_device_descriptor, + winusb_get_active_config_descriptor, + winusb_get_config_descriptor, + winusb_get_config_descriptor_by_value, + winusb_get_configuration, + winusb_set_configuration, + winusb_claim_interface, + winusb_release_interface, + winusb_set_interface_altsetting, + winusb_clear_halt, + winusb_reset_device, + winusb_destroy_device, + winusb_submit_transfer, + winusb_cancel_transfer, + winusb_clear_transfer_priv, + winusb_copy_transfer_data, + winusb_get_transfer_fd, + winusb_get_overlapped_result, +}; + +/* + * USB API backends + */ + +static const char * const composite_driver_names[] = {"USBCCGP"}; +static const char * const winusbx_driver_names[] = {"libusbK", "libusb0", "WinUSB"}; +static const char * const hid_driver_names[] = {"HIDUSB", "MOUHID", "KBDHID"}; +const struct windows_usb_api_backend usb_api_backend[USB_API_MAX] = { + { + USB_API_UNSUPPORTED, + "Unsupported API", + // No supported operations + }, + { + USB_API_HUB, + "HUB API", + // No supported operations + }, + { + USB_API_COMPOSITE, + "Composite API", + composite_driver_names, + ARRAYSIZE(composite_driver_names), + NULL, /* init */ + NULL, /* exit */ + composite_open, + composite_close, + NULL, /* configure_endpoints */ + composite_claim_interface, + composite_set_interface_altsetting, + composite_release_interface, + composite_clear_halt, + composite_reset_device, + composite_submit_bulk_transfer, + composite_submit_iso_transfer, + composite_submit_control_transfer, + composite_abort_control, + composite_abort_transfers, + composite_copy_transfer_data, + }, + { + USB_API_WINUSBX, + "WinUSB-like APIs", + winusbx_driver_names, + ARRAYSIZE(winusbx_driver_names), + winusbx_init, + winusbx_exit, + winusbx_open, + winusbx_close, + winusbx_configure_endpoints, + winusbx_claim_interface, + winusbx_set_interface_altsetting, + winusbx_release_interface, + winusbx_clear_halt, + winusbx_reset_device, + winusbx_submit_bulk_transfer, + winusbx_submit_iso_transfer, + winusbx_submit_control_transfer, + winusbx_abort_control, + winusbx_abort_transfers, + winusbx_copy_transfer_data, + }, + { + USB_API_HID, + "HID API", + // No supported operations + }, +}; + + +/* + * WinUSB-like (WinUSB, libusb0/libusbK through libusbk DLL) API functions + */ +#define WinUSBX_Set(fn) \ + do { \ + if (native_winusb) \ + WinUSBX[i].fn = (WinUsb_##fn##_t)GetProcAddress(h, "WinUsb_" #fn); \ + else \ + pLibK_GetProcAddress((PVOID *)&WinUSBX[i].fn, i, KUSB_FNID_##fn); \ + } while (0) + +static int winusbx_init(struct libusb_context *ctx) +{ + HMODULE h; + bool native_winusb; + int i; + KLIB_VERSION LibK_Version; + LibK_GetProcAddress_t pLibK_GetProcAddress = NULL; + LibK_GetVersion_t pLibK_GetVersion; + + h = LoadLibraryA("libusbK"); + + if (h == NULL) { + usbi_info(ctx, "libusbK DLL is not available, will use native WinUSB"); + h = LoadLibraryA("WinUSB"); + + if (h == NULL) { + usbi_warn(ctx, "WinUSB DLL is not available either, " + "you will not be able to access devices outside of enumeration"); + return LIBUSB_ERROR_NOT_FOUND; + } + } else { + usbi_dbg("using libusbK DLL for universal access"); + pLibK_GetVersion = (LibK_GetVersion_t)GetProcAddress(h, "LibK_GetVersion"); + if (pLibK_GetVersion != NULL) { + pLibK_GetVersion(&LibK_Version); + usbi_dbg("libusbK version: %d.%d.%d.%d", LibK_Version.Major, LibK_Version.Minor, + LibK_Version.Micro, LibK_Version.Nano); + } + pLibK_GetProcAddress = (LibK_GetProcAddress_t)GetProcAddress(h, "LibK_GetProcAddress"); + if (pLibK_GetProcAddress == NULL) { + usbi_err(ctx, "LibK_GetProcAddress() not found in libusbK DLL"); + FreeLibrary(h); + return LIBUSB_ERROR_NOT_FOUND; + } + } + + native_winusb = (pLibK_GetProcAddress == NULL); + for (i = 0; i < SUB_API_MAX; i++) { + WinUSBX_Set(AbortPipe); + WinUSBX_Set(ControlTransfer); + WinUSBX_Set(FlushPipe); + WinUSBX_Set(Free); + WinUSBX_Set(GetAssociatedInterface); + WinUSBX_Set(Initialize); + WinUSBX_Set(ReadPipe); + if (!native_winusb) + WinUSBX_Set(ResetDevice); + WinUSBX_Set(ResetPipe); + WinUSBX_Set(SetCurrentAlternateSetting); + WinUSBX_Set(SetPipePolicy); + WinUSBX_Set(WritePipe); + WinUSBX_Set(IsoReadPipe); + WinUSBX_Set(IsoWritePipe); + + if (WinUSBX[i].Initialize != NULL) { + WinUSBX[i].initialized = true; + // Assume driver supports CancelIoEx() if it is available + WinUSBX[i].CancelIoEx_supported = (pCancelIoEx != NULL); + usbi_dbg("initalized sub API %s", winusbx_driver_names[i]); + } else { + usbi_warn(ctx, "Failed to initalize sub API %s", winusbx_driver_names[i]); + WinUSBX[i].initialized = false; + } + } + + WinUSBX_handle = h; + return LIBUSB_SUCCESS; +} + +static void winusbx_exit(void) +{ + if (WinUSBX_handle != NULL) { + FreeLibrary(WinUSBX_handle); + WinUSBX_handle = NULL; + + /* Reset the WinUSBX API structures */ + memset(&WinUSBX, 0, sizeof(WinUSBX)); + } +} + +// NB: open and close must ensure that they only handle interface of +// the right API type, as these functions can be called wholesale from +// composite_open(), with interfaces belonging to different APIs +static int winusbx_open(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + HANDLE file_handle; + int i; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + // WinUSB requires a separate handle for each interface + for (i = 0; i < USB_MAXINTERFACES; i++) { + if ((priv->usb_interface[i].path != NULL) + && (priv->usb_interface[i].apib->id == USB_API_WINUSBX)) { + file_handle = CreateFileA(priv->usb_interface[i].path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); + if (file_handle == INVALID_HANDLE_VALUE) { + usbi_err(ctx, "could not open device %s (interface %d): %s", priv->usb_interface[i].path, i, windows_error_str(0)); + switch (GetLastError()) { + case ERROR_FILE_NOT_FOUND: // The device was disconnected + return LIBUSB_ERROR_NO_DEVICE; + case ERROR_ACCESS_DENIED: + return LIBUSB_ERROR_ACCESS; + default: + return LIBUSB_ERROR_IO; + } + } + handle_priv->interface_handle[i].dev_handle = file_handle; + } + } + return LIBUSB_SUCCESS; +} + +static void winusbx_close(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE handle; + int i; + + if (sub_api == SUB_API_NOTSET) + sub_api = priv->sub_api; + + if (!WinUSBX[sub_api].initialized) + return; + + if (priv->apib->id == USB_API_COMPOSITE) { + // If this is a composite device, just free and close all WinUSB-like + // interfaces directly (each is independent and not associated with another) + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (priv->usb_interface[i].apib->id == USB_API_WINUSBX) { + handle = handle_priv->interface_handle[i].api_handle; + if (HANDLE_VALID(handle)) + WinUSBX[sub_api].Free(handle); + + handle = handle_priv->interface_handle[i].dev_handle; + if (HANDLE_VALID(handle)) + CloseHandle(handle); + } + } + } else { + // If this is a WinUSB device, free all interfaces above interface 0, + // then free and close interface 0 last + for (i = 1; i < USB_MAXINTERFACES; i++) { + handle = handle_priv->interface_handle[i].api_handle; + if (HANDLE_VALID(handle)) + WinUSBX[sub_api].Free(handle); + } + handle = handle_priv->interface_handle[0].api_handle; + if (HANDLE_VALID(handle)) + WinUSBX[sub_api].Free(handle); + + handle = handle_priv->interface_handle[0].dev_handle; + if (HANDLE_VALID(handle)) + CloseHandle(handle); + } +} + +static int winusbx_configure_endpoints(int sub_api, struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle = handle_priv->interface_handle[iface].api_handle; + UCHAR policy; + ULONG timeout = 0; + uint8_t endpoint_address; + int i; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + // With handle and enpoints set (in parent), we can setup the default pipe properties + // see http://download.microsoft.com/download/D/1/D/D1DD7745-426B-4CC3-A269-ABBBE427C0EF/DVC-T705_DDC08.pptx + for (i = -1; i < priv->usb_interface[iface].nb_endpoints; i++) { + endpoint_address = (i == -1) ? 0 : priv->usb_interface[iface].endpoint[i]; + if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, + PIPE_TRANSFER_TIMEOUT, sizeof(ULONG), &timeout)) + usbi_dbg("failed to set PIPE_TRANSFER_TIMEOUT for control endpoint %02X", endpoint_address); + + if ((i == -1) || (sub_api == SUB_API_LIBUSB0)) + continue; // Other policies don't apply to control endpoint or libusb0 + + policy = false; + if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, + SHORT_PACKET_TERMINATE, sizeof(UCHAR), &policy)) + usbi_dbg("failed to disable SHORT_PACKET_TERMINATE for endpoint %02X", endpoint_address); + + if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, + IGNORE_SHORT_PACKETS, sizeof(UCHAR), &policy)) + usbi_dbg("failed to disable IGNORE_SHORT_PACKETS for endpoint %02X", endpoint_address); + + policy = true; + /* ALLOW_PARTIAL_READS must be enabled due to likely libusbK bug. See: + https://sourceforge.net/mailarchive/message.php?msg_id=29736015 */ + if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, + ALLOW_PARTIAL_READS, sizeof(UCHAR), &policy)) + usbi_dbg("failed to enable ALLOW_PARTIAL_READS for endpoint %02X", endpoint_address); + + if (!WinUSBX[sub_api].SetPipePolicy(winusb_handle, endpoint_address, + AUTO_CLEAR_STALL, sizeof(UCHAR), &policy)) + usbi_dbg("failed to enable AUTO_CLEAR_STALL for endpoint %02X", endpoint_address); + } + + return LIBUSB_SUCCESS; +} + +static int winusbx_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + bool is_using_usbccgp = (priv->apib->id == USB_API_COMPOSITE); + SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL; + HDEVINFO dev_info = INVALID_HANDLE_VALUE; + SP_DEVINFO_DATA dev_info_data; + char *dev_path_no_guid = NULL; + char filter_path[] = "\\\\.\\libusb0-0000"; + bool found_filter = false; + HANDLE file_handle, winusb_handle; + DWORD err; + int i; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + // If the device is composite, but using the default Windows composite parent driver (usbccgp) + // or if it's the first WinUSB-like interface, we get a handle through Initialize(). + if ((is_using_usbccgp) || (iface == 0)) { + // composite device (independent interfaces) or interface 0 + file_handle = handle_priv->interface_handle[iface].dev_handle; + if (!HANDLE_VALID(file_handle)) + return LIBUSB_ERROR_NOT_FOUND; + + if (!WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + err = GetLastError(); + switch (err) { + case ERROR_BAD_COMMAND: + // The device was disconnected + usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + default: + // it may be that we're using the libusb0 filter driver. + // TODO: can we move this whole business into the K/0 DLL? + for (i = 0; ; i++) { + safe_free(dev_interface_details); + safe_free(dev_path_no_guid); + + dev_interface_details = get_interface_details_filter(ctx, &dev_info, &dev_info_data, &GUID_DEVINTERFACE_LIBUSB0_FILTER, i, filter_path); + if ((found_filter) || (dev_interface_details == NULL)) + break; + + // ignore GUID part + dev_path_no_guid = sanitize_path(strtok(dev_interface_details->DevicePath, "{")); + if (dev_path_no_guid == NULL) + continue; + + if (strncmp(dev_path_no_guid, priv->usb_interface[iface].path, strlen(dev_path_no_guid)) == 0) { + file_handle = CreateFileA(filter_path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); + if (file_handle != INVALID_HANDLE_VALUE) { + if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { + // Replace the existing file handle with the working one + CloseHandle(handle_priv->interface_handle[iface].dev_handle); + handle_priv->interface_handle[iface].dev_handle = file_handle; + found_filter = true; + } else { + usbi_err(ctx, "could not initialize filter driver for %s", filter_path); + CloseHandle(file_handle); + } + } else { + usbi_err(ctx, "could not open device %s: %s", filter_path, windows_error_str(0)); + } + } + } + free(dev_interface_details); + if (!found_filter) { + usbi_err(ctx, "could not access interface %d: %s", iface, windows_error_str(err)); + return LIBUSB_ERROR_ACCESS; + } + } + } + handle_priv->interface_handle[iface].api_handle = winusb_handle; + } else { + // For all other interfaces, use GetAssociatedInterface() + winusb_handle = handle_priv->interface_handle[0].api_handle; + // It is a requirement for multiple interface devices on Windows that, to you + // must first claim the first interface before you claim the others + if (!HANDLE_VALID(winusb_handle)) { + file_handle = handle_priv->interface_handle[0].dev_handle; + if (WinUSBX[sub_api].Initialize(file_handle, &winusb_handle)) { + handle_priv->interface_handle[0].api_handle = winusb_handle; + usbi_warn(ctx, "auto-claimed interface 0 (required to claim %d with WinUSB)", iface); + } else { + usbi_warn(ctx, "failed to auto-claim interface 0 (required to claim %d with WinUSB): %s", iface, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + } + if (!WinUSBX[sub_api].GetAssociatedInterface(winusb_handle, (UCHAR)(iface - 1), + &handle_priv->interface_handle[iface].api_handle)) { + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + switch (GetLastError()) { + case ERROR_NO_MORE_ITEMS: // invalid iface + return LIBUSB_ERROR_NOT_FOUND; + case ERROR_BAD_COMMAND: // The device was disconnected + return LIBUSB_ERROR_NO_DEVICE; + case ERROR_ALREADY_EXISTS: // already claimed + return LIBUSB_ERROR_BUSY; + default: + usbi_err(ctx, "could not claim interface %d: %s", iface, windows_error_str(0)); + return LIBUSB_ERROR_ACCESS; + } + } + } + usbi_dbg("claimed interface %d", iface); + handle_priv->active_interface = iface; + + return LIBUSB_SUCCESS; +} + +static int winusbx_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + winusb_handle = handle_priv->interface_handle[iface].api_handle; + if (!HANDLE_VALID(winusb_handle)) + return LIBUSB_ERROR_NOT_FOUND; + + WinUSBX[sub_api].Free(winusb_handle); + handle_priv->interface_handle[iface].api_handle = INVALID_HANDLE_VALUE; + + return LIBUSB_SUCCESS; +} + +/* + * Return the first valid interface (of the same API type), for control transfers + */ +static int get_valid_interface(struct libusb_device_handle *dev_handle, int api_id) +{ + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int i; + + if ((api_id < USB_API_WINUSBX) || (api_id > USB_API_HID)) { + usbi_dbg("unsupported API ID"); + return -1; + } + + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (HANDLE_VALID(handle_priv->interface_handle[i].dev_handle) + && HANDLE_VALID(handle_priv->interface_handle[i].api_handle) + && (priv->usb_interface[i].apib->id == api_id)) + return i; + } + + return -1; +} + +/* + * Lookup interface by endpoint address. -1 if not found + */ +static int interface_by_endpoint(struct winusb_device_priv *priv, + struct winusb_device_handle_priv *handle_priv, uint8_t endpoint_address) +{ + int i, j; + + for (i = 0; i < USB_MAXINTERFACES; i++) { + if (!HANDLE_VALID(handle_priv->interface_handle[i].api_handle)) + continue; + if (priv->usb_interface[i].endpoint == NULL) + continue; + for (j = 0; j < priv->usb_interface[i].nb_endpoints; j++) { + if (priv->usb_interface[i].endpoint[j] == endpoint_address) + return i; + } + } + + return -1; +} + +static int winusbx_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + PWINUSB_SETUP_PACKET setup = (PWINUSB_SETUP_PACKET)transfer->buffer; + ULONG size; + HANDLE winusb_handle; + OVERLAPPED *overlapped; + int current_interface; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + size = transfer->length - LIBUSB_CONTROL_SETUP_SIZE; + + // Windows places upper limits on the control transfer size + // See: https://msdn.microsoft.com/en-us/library/windows/hardware/ff538112.aspx + if (size > MAX_CTRL_BUFFER_LENGTH) + return LIBUSB_ERROR_INVALID_PARAM; + + current_interface = get_valid_interface(transfer->dev_handle, USB_API_WINUSBX); + if (current_interface < 0) { + if (auto_claim(transfer, ¤t_interface, USB_API_WINUSBX) != LIBUSB_SUCCESS) + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("will use interface %d", current_interface); + + transfer_priv->handle = winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + overlapped = transfer_priv->pollable_fd.overlapped; + + // Sending of set configuration control requests from WinUSB creates issues + if ((LIBUSB_REQ_TYPE(setup->RequestType) == LIBUSB_REQUEST_TYPE_STANDARD) + && (setup->Request == LIBUSB_REQUEST_SET_CONFIGURATION)) { + if (setup->Value != priv->active_config) { + usbi_warn(ctx, "cannot set configuration other than the default one"); + return LIBUSB_ERROR_INVALID_PARAM; + } + windows_force_sync_completion(overlapped, 0); + } else { + if (!WinUSBX[sub_api].ControlTransfer(winusb_handle, *setup, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, size, NULL, overlapped)) { + if (GetLastError() != ERROR_IO_PENDING) { + usbi_warn(ctx, "ControlTransfer failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_IO; + } + } else { + windows_force_sync_completion(overlapped, size); + } + } + + transfer_priv->interface_number = (uint8_t)current_interface; + + return LIBUSB_SUCCESS; +} + +static int winusbx_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + if (altsetting > 255) + return LIBUSB_ERROR_INVALID_PARAM; + + winusb_handle = handle_priv->interface_handle[iface].api_handle; + if (!HANDLE_VALID(winusb_handle)) { + usbi_err(ctx, "interface must be claimed first"); + return LIBUSB_ERROR_NOT_FOUND; + } + + if (!WinUSBX[sub_api].SetCurrentAlternateSetting(winusb_handle, (UCHAR)altsetting)) { + usbi_err(ctx, "SetCurrentAlternateSetting failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_IO; + } + + return LIBUSB_SUCCESS; +} + +static int winusbx_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + HANDLE winusb_handle; + OVERLAPPED *overlapped; + bool ret; + int current_interface; + int i; + UINT offset; + PKISO_CONTEXT iso_context; + size_t iso_ctx_size; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + if ((sub_api != SUB_API_LIBUSBK) && (sub_api != SUB_API_LIBUSB0)) { + // iso only supported on libusbk-based backends + PRINT_UNSUPPORTED_API(submit_iso_transfer); + return LIBUSB_ERROR_NOT_SUPPORTED; + }; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("matched endpoint %02X with interface %d", transfer->endpoint, current_interface); + + transfer_priv->handle = winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + overlapped = transfer_priv->pollable_fd.overlapped; + + iso_ctx_size = sizeof(KISO_CONTEXT) + (transfer->num_iso_packets * sizeof(KISO_PACKET)); + transfer_priv->iso_context = iso_context = calloc(1, iso_ctx_size); + if (transfer_priv->iso_context == NULL) + return LIBUSB_ERROR_NO_MEM; + + // start ASAP + iso_context->StartFrame = 0; + iso_context->NumberOfPackets = (SHORT)transfer->num_iso_packets; + + // convert the transfer packet lengths to iso_packet offsets + offset = 0; + for (i = 0; i < transfer->num_iso_packets; i++) { + iso_context->IsoPackets[i].offset = offset; + offset += transfer->iso_packet_desc[i].length; + } + + if (IS_XFERIN(transfer)) { + usbi_dbg("reading %d iso packets", transfer->num_iso_packets); + ret = WinUSBX[sub_api].IsoReadPipe(winusb_handle, transfer->endpoint, transfer->buffer, transfer->length, overlapped, iso_context); + } else { + usbi_dbg("writing %d iso packets", transfer->num_iso_packets); + ret = WinUSBX[sub_api].IsoWritePipe(winusb_handle, transfer->endpoint, transfer->buffer, transfer->length, overlapped, iso_context); + } + + if (!ret) { + if (GetLastError() != ERROR_IO_PENDING) { + usbi_err(ctx, "IsoReadPipe/IsoWritePipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_IO; + } + } else { + windows_force_sync_completion(overlapped, (ULONG)transfer->length); + } + + transfer_priv->interface_number = (uint8_t)current_interface; + + return LIBUSB_SUCCESS; +} + +static int winusbx_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + HANDLE winusb_handle; + OVERLAPPED *overlapped; + bool ret; + int current_interface; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("matched endpoint %02X with interface %d", transfer->endpoint, current_interface); + + transfer_priv->handle = winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + overlapped = transfer_priv->pollable_fd.overlapped; + + if (IS_XFERIN(transfer)) { + usbi_dbg("reading %d bytes", transfer->length); + ret = WinUSBX[sub_api].ReadPipe(winusb_handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, overlapped); + } else { + usbi_dbg("writing %d bytes", transfer->length); + ret = WinUSBX[sub_api].WritePipe(winusb_handle, transfer->endpoint, transfer->buffer, transfer->length, NULL, overlapped); + } + + if (!ret) { + if (GetLastError() != ERROR_IO_PENDING) { + usbi_err(ctx, "ReadPipe/WritePipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_IO; + } + } else { + windows_force_sync_completion(overlapped, (ULONG)transfer->length); + } + + transfer_priv->interface_number = (uint8_t)current_interface; + + return LIBUSB_SUCCESS; +} + +static int winusbx_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle; + int current_interface; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + current_interface = interface_by_endpoint(priv, handle_priv, endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); + return LIBUSB_ERROR_NOT_FOUND; + } + + usbi_dbg("matched endpoint %02X with interface %d", endpoint, current_interface); + winusb_handle = handle_priv->interface_handle[current_interface].api_handle; + + if (!WinUSBX[sub_api].ResetPipe(winusb_handle, endpoint)) { + usbi_err(ctx, "ResetPipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } + + return LIBUSB_SUCCESS; +} + +/* + * from http://www.winvistatips.com/winusb-bugchecks-t335323.html (confirmed + * through testing as well): + * "You can not call WinUsb_AbortPipe on control pipe. You can possibly cancel + * the control transfer using CancelIo" + */ +static int winusbx_abort_control(int sub_api, struct usbi_transfer *itransfer) +{ + // Cancelling of the I/O is done in the parent + return LIBUSB_SUCCESS; +} + +static int winusbx_abort_transfers(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + HANDLE handle; + int current_interface; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + current_interface = transfer_priv->interface_number; + if ((current_interface < 0) || (current_interface >= USB_MAXINTERFACES)) { + usbi_err(ctx, "program assertion failed: invalid interface_number"); + return LIBUSB_ERROR_NOT_FOUND; + } + usbi_dbg("will use interface %d", current_interface); + + if (WinUSBX[sub_api].CancelIoEx_supported) { + // Try to use CancelIoEx if available to cancel just a single transfer + handle = handle_priv->interface_handle[current_interface].dev_handle; + if (pCancelIoEx(handle, transfer_priv->pollable_fd.overlapped)) + return LIBUSB_SUCCESS; + else if (GetLastError() == ERROR_NOT_FOUND) + return LIBUSB_ERROR_NOT_FOUND; + + // Not every driver implements the necessary functionality for CancelIoEx + usbi_warn(ctx, "CancelIoEx not supported for sub API %s", winusbx_driver_names[sub_api]); + WinUSBX[sub_api].CancelIoEx_supported = false; + } + + handle = handle_priv->interface_handle[current_interface].api_handle; + if (!WinUSBX[sub_api].AbortPipe(handle, transfer->endpoint)) { + usbi_err(ctx, "AbortPipe failed: %s", windows_error_str(0)); + return LIBUSB_ERROR_NO_DEVICE; + } + + return LIBUSB_SUCCESS; +} + +/* + * from the "How to Use WinUSB to Communicate with a USB Device" Microsoft white paper + * (http://www.microsoft.com/whdc/connect/usb/winusb_howto.mspx): + * "WinUSB does not support host-initiated reset port and cycle port operations" and + * IOCTL_INTERNAL_USB_CYCLE_PORT is only available in kernel mode and the + * IOCTL_USB_HUB_CYCLE_PORT ioctl was removed from Vista => the best we can do is + * cycle the pipes (and even then, the control pipe can not be reset using WinUSB) + */ +// TODO: (post hotplug): see if we can force eject the device and redetect it (reuse hotplug?) +static int winusbx_reset_device(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + HANDLE winusb_handle; + int i, j; + + CHECK_WINUSBX_AVAILABLE(sub_api); + + // Reset any available pipe (except control) + for (i = 0; i < USB_MAXINTERFACES; i++) { + winusb_handle = handle_priv->interface_handle[i].api_handle; + if (HANDLE_VALID(winusb_handle)) { + for (j = 0; j < priv->usb_interface[i].nb_endpoints; j++) { + usbi_dbg("resetting ep %02X", priv->usb_interface[i].endpoint[j]); + if (!WinUSBX[sub_api].AbortPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) + usbi_err(ctx, "AbortPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + + // FlushPipe seems to fail on OUT pipes + if (IS_EPIN(priv->usb_interface[i].endpoint[j]) + && (!WinUSBX[sub_api].FlushPipe(winusb_handle, priv->usb_interface[i].endpoint[j]))) + usbi_err(ctx, "FlushPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + + if (!WinUSBX[sub_api].ResetPipe(winusb_handle, priv->usb_interface[i].endpoint[j])) + usbi_err(ctx, "ResetPipe (pipe address %02X) failed: %s", + priv->usb_interface[i].endpoint[j], windows_error_str(0)); + } + } + } + + // libusbK & libusb0 have the ability to issue an actual device reset + if (WinUSBX[sub_api].ResetDevice != NULL) { + winusb_handle = handle_priv->interface_handle[0].api_handle; + if (HANDLE_VALID(winusb_handle)) + WinUSBX[sub_api].ResetDevice(winusb_handle); + } + + return LIBUSB_SUCCESS; +} + +static int winusbx_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + PKISO_CONTEXT iso_context; + int i; + + if (transfer->type == LIBUSB_TRANSFER_TYPE_ISOCHRONOUS) { + CHECK_WINUSBX_AVAILABLE(sub_api); + + // for isochronous, need to copy the individual iso packet actual_lengths and statuses + if ((sub_api == SUB_API_LIBUSBK) || (sub_api == SUB_API_LIBUSB0)) { + // iso only supported on libusbk-based backends for now + iso_context = transfer_priv->iso_context; + for (i = 0; i < transfer->num_iso_packets; i++) { + transfer->iso_packet_desc[i].actual_length = iso_context->IsoPackets[i].actual_length; + // TODO translate USDB_STATUS codes http://msdn.microsoft.com/en-us/library/ff539136(VS.85).aspx to libusb_transfer_status + //transfer->iso_packet_desc[i].status = transfer_priv->iso_context->IsoPackets[i].status; + } + } else { + // This should only occur if backend is not set correctly or other backend isoc is partially implemented + PRINT_UNSUPPORTED_API(copy_transfer_data); + return LIBUSB_ERROR_NOT_SUPPORTED; + } + } + + itransfer->transferred += io_size; + return LIBUSB_TRANSFER_COMPLETED; +} + +/* + * Composite API functions + */ +static int composite_open(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int r = LIBUSB_ERROR_NOT_FOUND; + uint8_t i; + // SUB_API_MAX + 1 as the SUB_API_MAX pos is used to indicate availability of HID + bool available[SUB_API_MAX + 1] = { 0 }; + + for (i = 0; i < USB_MAXINTERFACES; i++) { + switch (priv->usb_interface[i].apib->id) { + case USB_API_WINUSBX: + if (priv->usb_interface[i].sub_api != SUB_API_NOTSET) { + available[priv->usb_interface[i].sub_api] = true; + } + break; + case USB_API_HID: + available[SUB_API_MAX] = true; + break; + default: + break; + } + } + + for (i = 0; i < SUB_API_MAX; i++) { // WinUSB-like drivers + if (available[i]) { + r = usb_api_backend[USB_API_WINUSBX].open(i, dev_handle); + if (r != LIBUSB_SUCCESS) { + return r; + } + } + } +/* + if (available[SUB_API_MAX]) // HID driver + r = hid_open(SUB_API_NOTSET, dev_handle); +*/ + return r; +} + +static void composite_close(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + uint8_t i; + // SUB_API_MAX + 1 as the SUB_API_MAX pos is used to indicate availability of HID + bool available[SUB_API_MAX + 1] = { 0 }; + + for (i = 0; i < USB_MAXINTERFACES; i++) { + switch (priv->usb_interface[i].apib->id) { + case USB_API_WINUSBX: + if (priv->usb_interface[i].sub_api != SUB_API_NOTSET) + available[priv->usb_interface[i].sub_api] = true; + break; + case USB_API_HID: + available[SUB_API_MAX] = true; + break; + default: + break; + } + } + + for (i = 0; i < SUB_API_MAX; i++) { // WinUSB-like drivers + if (available[i]) + usb_api_backend[USB_API_WINUSBX].close(i, dev_handle); + } +/* + if (available[SUB_API_MAX]) // HID driver + hid_close(SUB_API_NOTSET, dev_handle); +*/ +} + +static int composite_claim_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->usb_interface[iface].apib, claim_interface); + + return priv->usb_interface[iface].apib-> + claim_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); +} + +static int composite_set_interface_altsetting(int sub_api, struct libusb_device_handle *dev_handle, int iface, int altsetting) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->usb_interface[iface].apib, set_interface_altsetting); + + return priv->usb_interface[iface].apib-> + set_interface_altsetting(priv->usb_interface[iface].sub_api, dev_handle, iface, altsetting); +} + +static int composite_release_interface(int sub_api, struct libusb_device_handle *dev_handle, int iface) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + + CHECK_SUPPORTED_API(priv->usb_interface[iface].apib, release_interface); + + return priv->usb_interface[iface].apib-> + release_interface(priv->usb_interface[iface].sub_api, dev_handle, iface); +} + +static int composite_submit_control_transfer(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + struct libusb_config_descriptor *conf_desc; + WINUSB_SETUP_PACKET *setup = (WINUSB_SETUP_PACKET *)transfer->buffer; + int iface, pass, r; + + // Interface shouldn't matter for control, but it does in practice, with Windows' + // restrictions with regards to accessing HID keyboards and mice. Try to target + // a specific interface first, if possible. + switch (LIBUSB_REQ_RECIPIENT(setup->RequestType)) { + case LIBUSB_RECIPIENT_INTERFACE: + iface = setup->Index & 0xFF; + break; + case LIBUSB_RECIPIENT_ENDPOINT: + r = libusb_get_active_config_descriptor(transfer->dev_handle->dev, &conf_desc); + if (r == LIBUSB_SUCCESS) { + iface = get_interface_by_endpoint(conf_desc, (setup->Index & 0xFF)); + libusb_free_config_descriptor(conf_desc); + break; + } + // Fall through if not able to determine interface + default: + iface = -1; + break; + } + + // Try and target a specific interface if the control setup indicates such + if ((iface >= 0) && (iface < USB_MAXINTERFACES)) { + usbi_dbg("attempting control transfer targeted to interface %d", iface); + if ((priv->usb_interface[iface].path != NULL) + && (priv->usb_interface[iface].apib->submit_control_transfer != NULL)) { + r = priv->usb_interface[iface].apib->submit_control_transfer(priv->usb_interface[iface].sub_api, itransfer); + if (r == LIBUSB_SUCCESS) + return r; + } + } + + // Either not targeted to a specific interface or no luck in doing so. + // Try a 2 pass approach with all interfaces. + for (pass = 0; pass < 2; pass++) { + for (iface = 0; iface < USB_MAXINTERFACES; iface++) { + if ((priv->usb_interface[iface].path != NULL) + && (priv->usb_interface[iface].apib->submit_control_transfer != NULL)) { + if ((pass == 0) && (priv->usb_interface[iface].restricted_functionality)) { + usbi_dbg("trying to skip restricted interface #%d (HID keyboard or mouse?)", iface); + continue; + } + usbi_dbg("using interface %d", iface); + r = priv->usb_interface[iface].apib->submit_control_transfer(priv->usb_interface[iface].sub_api, itransfer); + // If not supported on this API, it may be supported on another, so don't give up yet!! + if (r == LIBUSB_ERROR_NOT_SUPPORTED) + continue; + return r; + } + } + } + usbi_err(ctx, "no libusb supported interfaces to complete request"); + return LIBUSB_ERROR_NOT_FOUND; +} + +static int composite_submit_bulk_transfer(int sub_api, struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, submit_bulk_transfer); + + return priv->usb_interface[current_interface].apib-> + submit_bulk_transfer(priv->usb_interface[current_interface].sub_api, itransfer); +} + +static int composite_submit_iso_transfer(int sub_api, struct usbi_transfer *itransfer) { + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct libusb_context *ctx = DEVICE_CTX(transfer->dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(transfer->dev_handle); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, transfer->endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cancelling transfer"); + return LIBUSB_ERROR_NOT_FOUND; + } + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, submit_iso_transfer); + + return priv->usb_interface[current_interface].apib-> + submit_iso_transfer(priv->usb_interface[current_interface].sub_api, itransfer); +} + +static int composite_clear_halt(int sub_api, struct libusb_device_handle *dev_handle, unsigned char endpoint) +{ + struct libusb_context *ctx = DEVICE_CTX(dev_handle->dev); + struct winusb_device_handle_priv *handle_priv = _device_handle_priv(dev_handle); + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int current_interface; + + current_interface = interface_by_endpoint(priv, handle_priv, endpoint); + if (current_interface < 0) { + usbi_err(ctx, "unable to match endpoint to an open interface - cannot clear"); + return LIBUSB_ERROR_NOT_FOUND; + } + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, clear_halt); + + return priv->usb_interface[current_interface].apib-> + clear_halt(priv->usb_interface[current_interface].sub_api, dev_handle, endpoint); +} + +static int composite_abort_control(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface = transfer_priv->interface_number; + + if ((current_interface < 0) || (current_interface >= USB_MAXINTERFACES)) { + usbi_err(TRANSFER_CTX(transfer), "program assertion failed: invalid interface_number"); + return LIBUSB_ERROR_NOT_FOUND; + } + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, abort_control); + + return priv->usb_interface[current_interface].apib-> + abort_control(priv->usb_interface[current_interface].sub_api, itransfer); +} + +static int composite_abort_transfers(int sub_api, struct usbi_transfer *itransfer) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface = transfer_priv->interface_number; + + if ((current_interface < 0) || (current_interface >= USB_MAXINTERFACES)) { + usbi_err(TRANSFER_CTX(transfer), "program assertion failed: invalid interface_number"); + return LIBUSB_ERROR_NOT_FOUND; + } + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, abort_transfers); + + return priv->usb_interface[current_interface].apib-> + abort_transfers(priv->usb_interface[current_interface].sub_api, itransfer); +} + +static int composite_reset_device(int sub_api, struct libusb_device_handle *dev_handle) +{ + struct winusb_device_priv *priv = _device_priv(dev_handle->dev); + int r; + uint8_t i; + bool available[SUB_API_MAX]; + + for (i = 0; i < SUB_API_MAX; i++) + available[i] = false; + + for (i = 0; i < USB_MAXINTERFACES; i++) { + if ((priv->usb_interface[i].apib->id == USB_API_WINUSBX) + && (priv->usb_interface[i].sub_api != SUB_API_NOTSET)) + available[priv->usb_interface[i].sub_api] = true; + } + + for (i = 0; i < SUB_API_MAX; i++) { + if (available[i]) { + r = usb_api_backend[USB_API_WINUSBX].reset_device(i, dev_handle); + if (r != LIBUSB_SUCCESS) + return r; + } + } + + return LIBUSB_SUCCESS; +} + +static int composite_copy_transfer_data(int sub_api, struct usbi_transfer *itransfer, uint32_t io_size) +{ + struct libusb_transfer *transfer = USBI_TRANSFER_TO_LIBUSB_TRANSFER(itransfer); + struct winusb_transfer_priv *transfer_priv = usbi_transfer_get_os_priv(itransfer); + struct winusb_device_priv *priv = _device_priv(transfer->dev_handle->dev); + int current_interface = transfer_priv->interface_number; + + CHECK_SUPPORTED_API(priv->usb_interface[current_interface].apib, copy_transfer_data); + + return priv->usb_interface[current_interface].apib-> + copy_transfer_data(priv->usb_interface[current_interface].sub_api, itransfer, io_size); +} diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.h b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.h similarity index 54% rename from vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.h rename to vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.h index b7b9cd919a98..c1ad4eb9b2dd 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/os/windows_winusb.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/os/windows_winusb.h @@ -36,15 +36,14 @@ #endif // Missing from MSVC6 setupapi.h -#if !defined(SPDRP_ADDRESS) +#ifndef SPDRP_ADDRESS #define SPDRP_ADDRESS 28 #endif -#if !defined(SPDRP_INSTALL_STATE) +#ifndef SPDRP_INSTALL_STATE #define SPDRP_INSTALL_STATE 34 #endif #define MAX_CTRL_BUFFER_LENGTH 4096 -#define MAX_USB_DEVICES 256 #define MAX_USB_STRING_LENGTH 128 #define MAX_HID_REPORT_SIZE 1024 #define MAX_HID_DESCRIPTOR_SIZE 256 @@ -61,17 +60,17 @@ // http://msdn.microsoft.com/en-us/library/ff545978.aspx // http://msdn.microsoft.com/en-us/library/ff545972.aspx // http://msdn.microsoft.com/en-us/library/ff545982.aspx -#if !defined(GUID_DEVINTERFACE_USB_HOST_CONTROLLER) -const GUID GUID_DEVINTERFACE_USB_HOST_CONTROLLER = { 0x3ABF6F2D, 0x71C4, 0x462A, {0x8A, 0x92, 0x1E, 0x68, 0x61, 0xE6, 0xAF, 0x27} }; +#ifndef GUID_DEVINTERFACE_USB_HOST_CONTROLLER +const GUID GUID_DEVINTERFACE_USB_HOST_CONTROLLER = {0x3ABF6F2D, 0x71C4, 0x462A, {0x8A, 0x92, 0x1E, 0x68, 0x61, 0xE6, 0xAF, 0x27}}; #endif -#if !defined(GUID_DEVINTERFACE_USB_DEVICE) -const GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, {0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED} }; +#ifndef GUID_DEVINTERFACE_USB_DEVICE +const GUID GUID_DEVINTERFACE_USB_DEVICE = {0xA5DCBF10, 0x6530, 0x11D2, {0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED}}; #endif -#if !defined(GUID_DEVINTERFACE_USB_HUB) -const GUID GUID_DEVINTERFACE_USB_HUB = { 0xF18A0E88, 0xC30C, 0x11D0, {0x88, 0x15, 0x00, 0xA0, 0xC9, 0x06, 0xBE, 0xD8} }; +#ifndef GUID_DEVINTERFACE_USB_HUB +const GUID GUID_DEVINTERFACE_USB_HUB = {0xF18A0E88, 0xC30C, 0x11D0, {0x88, 0x15, 0x00, 0xA0, 0xC9, 0x06, 0xBE, 0xD8}}; #endif -#if !defined(GUID_DEVINTERFACE_LIBUSB0_FILTER) -const GUID GUID_DEVINTERFACE_LIBUSB0_FILTER = { 0xF9F3FF14, 0xAE21, 0x48A0, {0x8A, 0x25, 0x80, 0x11, 0xA7, 0xA9, 0x31, 0xD9} }; +#ifndef GUID_DEVINTERFACE_LIBUSB0_FILTER +const GUID GUID_DEVINTERFACE_LIBUSB0_FILTER = {0xF9F3FF14, 0xAE21, 0x48A0, {0x8A, 0x25, 0x80, 0x11, 0xA7, 0xA9, 0x31, 0xD9}}; #endif @@ -84,8 +83,6 @@ const GUID GUID_DEVINTERFACE_LIBUSB0_FILTER = { 0xF9F3FF14, 0xAE21, 0x48A0, {0x8 #define USB_API_WINUSBX 3 #define USB_API_HID 4 #define USB_API_MAX 5 -// The following is used to indicate if the HID or composite extra props have already been set. -#define USB_API_SET (1 << USB_API_MAX) // Sub-APIs for WinUSB-like driver APIs (WinUSB, libusbK, libusb-win32 through the libusbK DLL) // Must have the same values as the KUSB_DRVID enum from libusbk.h @@ -95,15 +92,13 @@ const GUID GUID_DEVINTERFACE_LIBUSB0_FILTER = { 0xF9F3FF14, 0xAE21, 0x48A0, {0x8 #define SUB_API_WINUSB 2 #define SUB_API_MAX 3 -#define WINUSBX_DRV_NAMES {"libusbK", "libusb0", "WinUSB"} - struct windows_usb_api_backend { const uint8_t id; - const char *designation; - const char **driver_name_list; // Driver name, without .sys, e.g. "usbccgp" + const char * const designation; + const char * const * const driver_name_list; // Driver name, without .sys, e.g. "usbccgp" const uint8_t nb_driver_names; - int (*init)(int sub_api, struct libusb_context *ctx); - int (*exit)(int sub_api); + int (*init)(struct libusb_context *ctx); + void (*exit)(void); int (*open)(int sub_api, struct libusb_device_handle *dev_handle); void (*close)(int sub_api, struct libusb_device_handle *dev_handle); int (*configure_endpoints)(int sub_api, struct libusb_device_handle *dev_handle, int iface); @@ -123,9 +118,16 @@ struct windows_usb_api_backend { extern const struct windows_usb_api_backend usb_api_backend[USB_API_MAX]; #define PRINT_UNSUPPORTED_API(fname) \ - usbi_dbg("unsupported API call for '" \ - #fname "' (unrecognized device driver)"); \ - return LIBUSB_ERROR_NOT_SUPPORTED; + usbi_dbg("unsupported API call for '%s' " \ + "(unrecognized device driver)", #fname) + +#define CHECK_SUPPORTED_API(apip, fname) \ + do { \ + if ((apip)->fname == NULL) { \ + PRINT_UNSUPPORTED_API(fname); \ + return LIBUSB_ERROR_NOT_SUPPORTED; \ + } \ + } while (0) /* * private structures definition @@ -154,15 +156,16 @@ struct libusb_hid_descriptor { #define LIBUSB_REQ_IN(request_type) ((request_type) & LIBUSB_ENDPOINT_IN) #define LIBUSB_REQ_OUT(request_type) (!LIBUSB_REQ_IN(request_type)) +#ifndef CTL_CODE +#define CTL_CODE(DeviceType, Function, Method, Access) \ + (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) +#endif + // The following are used for HID reports IOCTLs -#define HID_CTL_CODE(id) \ - CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_NEITHER, FILE_ANY_ACCESS) -#define HID_BUFFER_CTL_CODE(id) \ - CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_BUFFERED, FILE_ANY_ACCESS) #define HID_IN_CTL_CODE(id) \ - CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_IN_DIRECT, FILE_ANY_ACCESS) + CTL_CODE(FILE_DEVICE_KEYBOARD, (id), METHOD_IN_DIRECT, FILE_ANY_ACCESS) #define HID_OUT_CTL_CODE(id) \ - CTL_CODE (FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS) + CTL_CODE(FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS) #define IOCTL_HID_GET_FEATURE HID_OUT_CTL_CODE(100) #define IOCTL_HID_GET_INPUT_REPORT HID_OUT_CTL_CODE(104) @@ -193,39 +196,20 @@ struct hid_device_priv { uint16_t input_report_size; uint16_t output_report_size; uint16_t feature_report_size; + uint16_t usage; + uint16_t usagePage; WCHAR string[3][MAX_USB_STRING_LENGTH]; uint8_t string_index[3]; // man, prod, ser }; -struct windows_device_priv { - uint8_t depth; // distance to HCD - uint8_t port; // port number on the hub - uint8_t active_config; - struct windows_usb_api_backend const *apib; - char *path; // device interface path - int sub_api; // for WinUSB-like APIs - struct { - char *path; // each interface needs a device interface path, - struct windows_usb_api_backend const *apib; // an API backend (multiple drivers support), - int sub_api; - int8_t nb_endpoints; // and a set of endpoint addresses (USB_MAXENDPOINTS) - uint8_t *endpoint; - bool restricted_functionality; // indicates if the interface functionality is restricted - // by Windows (eg. HID keyboards or mice cannot do R/W) - } usb_interface[USB_MAXINTERFACES]; - struct hid_device_priv *hid; - USB_DEVICE_DESCRIPTOR dev_descriptor; - unsigned char **config_descriptor; // list of pointers to the cached config descriptors -}; - -static inline struct windows_device_priv *_device_priv(struct libusb_device *dev) +static inline struct winusb_device_priv *_device_priv(struct libusb_device *dev) { - return (struct windows_device_priv *)dev->os_priv; + return (struct winusb_device_priv *)dev->os_priv; } -static inline struct windows_device_priv *windows_device_priv_init(struct libusb_device *dev) +static inline struct winusb_device_priv *winusb_device_priv_init(struct libusb_device *dev) { - struct windows_device_priv *p = _device_priv(dev); + struct winusb_device_priv *p = _device_priv(dev); int i; p->apib = &usb_api_backend[USB_API_UNSUPPORTED]; @@ -238,11 +222,12 @@ static inline struct windows_device_priv *windows_device_priv_init(struct libusb return p; } -static inline void windows_device_priv_release(struct libusb_device *dev) +static inline void winusb_device_priv_release(struct libusb_device *dev) { - struct windows_device_priv *p = _device_priv(dev); + struct winusb_device_priv *p = _device_priv(dev); int i; + free(p->dev_id); free(p->path); if ((dev->num_configurations > 0) && (p->config_descriptor != NULL)) { for (i = 0; i < dev->num_configurations; i++) @@ -256,32 +241,12 @@ static inline void windows_device_priv_release(struct libusb_device *dev) } } -struct interface_handle_t { - HANDLE dev_handle; // WinUSB needs an extra handle for the file - HANDLE api_handle; // used by the API to communicate with the device -}; - -struct windows_device_handle_priv { - int active_interface; - struct interface_handle_t interface_handle[USB_MAXINTERFACES]; - int autoclaim_count[USB_MAXINTERFACES]; // For auto-release -}; - -static inline struct windows_device_handle_priv *_device_handle_priv( +static inline struct winusb_device_handle_priv *_device_handle_priv( struct libusb_device_handle *handle) { - return (struct windows_device_handle_priv *)handle->os_priv; + return (struct winusb_device_handle_priv *)handle->os_priv; } -// used for async polling functions -struct windows_transfer_priv { - struct winfd pollable_fd; - uint8_t interface_number; - uint8_t *hid_buffer; // 1 byte extended data buffer, required for HID - uint8_t *hid_dest; // transfer buffer destination, required for HID - size_t hid_expected_size; -}; - // used to match a device driver (including filter drivers) against a supported API struct driver_lookup { char list[MAX_KEY_LENGTH + 1]; // REG_MULTI_SZ list of services (driver) names @@ -289,94 +254,72 @@ struct driver_lookup { const char* designation; // internal designation (for debug output) }; +/* + * Windows DDK API definitions. Most of it copied from MinGW's includes + */ +typedef DWORD DEVNODE, DEVINST; +typedef DEVNODE *PDEVNODE, *PDEVINST; +typedef DWORD RETURN_TYPE; +typedef RETURN_TYPE CONFIGRET; + +#define CR_SUCCESS 0x00000000 + +/* Cfgmgr32 dependencies */ +DLL_DECLARE_HANDLE(Cfgmgr32); +DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Parent, (PDEVINST, DEVINST, ULONG)); +DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Child, (PDEVINST, DEVINST, ULONG)); + +/* AdvAPI32 dependencies */ +DLL_DECLARE_HANDLE(AdvAPI32); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, LONG, p, RegQueryValueExW, (HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, LONG, p, RegCloseKey, (HKEY)); + /* OLE32 dependency */ DLL_DECLARE_HANDLE(OLE32); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, HRESULT, p, CLSIDFromString, (LPCOLESTR, LPCLSID)); - -/* Kernel32 dependencies */ -DLL_DECLARE_HANDLE(Kernel32); -/* This call is only available from XP SP2 */ -DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, IsWow64Process, (HANDLE, PBOOL)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, HRESULT, p, IIDFromString, (LPCOLESTR, LPIID)); /* SetupAPI dependencies */ DLL_DECLARE_HANDLE(SetupAPI); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, HDEVINFO, p, SetupDiGetClassDevsA, (const GUID*, PCSTR, HWND, DWORD)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, HDEVINFO, p, SetupDiGetClassDevsA, (LPCGUID, PCSTR, HWND, DWORD)); DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInfo, (HDEVINFO, DWORD, PSP_DEVINFO_DATA)); DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiEnumDeviceInterfaces, (HDEVINFO, PSP_DEVINFO_DATA, - const GUID*, DWORD, PSP_DEVICE_INTERFACE_DATA)); + LPCGUID, DWORD, PSP_DEVICE_INTERFACE_DATA)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiGetDeviceInstanceIdA, (HDEVINFO, PSP_DEVINFO_DATA, + PCSTR, DWORD, PDWORD)); DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiGetDeviceInterfaceDetailA, (HDEVINFO, PSP_DEVICE_INTERFACE_DATA, PSP_DEVICE_INTERFACE_DETAIL_DATA_A, DWORD, PDWORD, PSP_DEVINFO_DATA)); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiDestroyDeviceInfoList, (HDEVINFO)); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, HKEY, p, SetupDiOpenDevRegKey, (HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM)); DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiGetDeviceRegistryPropertyA, (HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, BOOL, p, SetupDiDestroyDeviceInfoList, (HDEVINFO)); +DLL_DECLARE_FUNC_PREFIXED(WINAPI, HKEY, p, SetupDiOpenDevRegKey, (HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM)); DLL_DECLARE_FUNC_PREFIXED(WINAPI, HKEY, p, SetupDiOpenDeviceInterfaceRegKey, (HDEVINFO, PSP_DEVICE_INTERFACE_DATA, DWORD, DWORD)); -/* AdvAPI32 dependencies */ -DLL_DECLARE_HANDLE(AdvAPI32); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, LONG, p, RegQueryValueExW, (HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD)); -DLL_DECLARE_FUNC_PREFIXED(WINAPI, LONG, p, RegCloseKey, (HKEY)); -/* - * Windows DDK API definitions. Most of it copied from MinGW's includes - */ -typedef DWORD DEVNODE, DEVINST; -typedef DEVNODE *PDEVNODE, *PDEVINST; -typedef DWORD RETURN_TYPE; -typedef RETURN_TYPE CONFIGRET; - -#define CR_SUCCESS 0x00000000 -#define CR_NO_SUCH_DEVNODE 0x0000000D - -#define USB_DEVICE_DESCRIPTOR_TYPE LIBUSB_DT_DEVICE -#define USB_CONFIGURATION_DESCRIPTOR_TYPE LIBUSB_DT_CONFIG -#define USB_STRING_DESCRIPTOR_TYPE LIBUSB_DT_STRING -#define USB_INTERFACE_DESCRIPTOR_TYPE LIBUSB_DT_INTERFACE -#define USB_ENDPOINT_DESCRIPTOR_TYPE LIBUSB_DT_ENDPOINT - -#define USB_REQUEST_GET_STATUS LIBUSB_REQUEST_GET_STATUS -#define USB_REQUEST_CLEAR_FEATURE LIBUSB_REQUEST_CLEAR_FEATURE -#define USB_REQUEST_SET_FEATURE LIBUSB_REQUEST_SET_FEATURE -#define USB_REQUEST_SET_ADDRESS LIBUSB_REQUEST_SET_ADDRESS -#define USB_REQUEST_GET_DESCRIPTOR LIBUSB_REQUEST_GET_DESCRIPTOR -#define USB_REQUEST_SET_DESCRIPTOR LIBUSB_REQUEST_SET_DESCRIPTOR -#define USB_REQUEST_GET_CONFIGURATION LIBUSB_REQUEST_GET_CONFIGURATION -#define USB_REQUEST_SET_CONFIGURATION LIBUSB_REQUEST_SET_CONFIGURATION -#define USB_REQUEST_GET_INTERFACE LIBUSB_REQUEST_GET_INTERFACE -#define USB_REQUEST_SET_INTERFACE LIBUSB_REQUEST_SET_INTERFACE -#define USB_REQUEST_SYNC_FRAME LIBUSB_REQUEST_SYNCH_FRAME - -#define USB_GET_NODE_INFORMATION 258 -#define USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION 260 -#define USB_GET_NODE_CONNECTION_NAME 261 -#define USB_GET_HUB_CAPABILITIES 271 -#if !defined(USB_GET_NODE_CONNECTION_INFORMATION_EX) -#define USB_GET_NODE_CONNECTION_INFORMATION_EX 274 +#ifndef USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION +#define USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION 260 #endif -#if !defined(USB_GET_HUB_CAPABILITIES_EX) -#define USB_GET_HUB_CAPABILITIES_EX 276 +#ifndef USB_GET_NODE_CONNECTION_INFORMATION_EX +#define USB_GET_NODE_CONNECTION_INFORMATION_EX 274 #endif -#if !defined(USB_GET_NODE_CONNECTION_INFORMATION_EX_V2) +#ifndef USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 #define USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 279 #endif -#ifndef METHOD_BUFFERED -#define METHOD_BUFFERED 0 -#endif -#ifndef FILE_ANY_ACCESS -#define FILE_ANY_ACCESS 0x00000000 -#endif -#ifndef FILE_DEVICE_UNKNOWN -#define FILE_DEVICE_UNKNOWN 0x00000022 -#endif #ifndef FILE_DEVICE_USB -#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN +#define FILE_DEVICE_USB FILE_DEVICE_UNKNOWN #endif -#ifndef CTL_CODE -#define CTL_CODE(DeviceType, Function, Method, Access) \ - (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) -#endif +#define USB_CTL_CODE(id) \ + CTL_CODE(FILE_DEVICE_USB, (id), METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ + USB_CTL_CODE(USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION) + +#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \ + USB_CTL_CODE(USB_GET_NODE_CONNECTION_INFORMATION_EX) + +#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 \ + USB_CTL_CODE(USB_GET_NODE_CONNECTION_INFORMATION_EX_V2) typedef enum USB_CONNECTION_STATUS { NoDeviceConnected, @@ -395,79 +338,10 @@ typedef enum USB_HUB_NODE { UsbMIParent } USB_HUB_NODE; -/* Cfgmgr32.dll interface */ -DLL_DECLARE_HANDLE(Cfgmgr32); -DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Parent, (PDEVINST, DEVINST, ULONG)); -DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Child, (PDEVINST, DEVINST, ULONG)); -DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Sibling, (PDEVINST, DEVINST, ULONG)); -DLL_DECLARE_FUNC(WINAPI, CONFIGRET, CM_Get_Device_IDA, (DEVINST, PCHAR, ULONG, ULONG)); - -#define IOCTL_USB_GET_HUB_CAPABILITIES_EX \ - CTL_CODE( FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_HUB_CAPABILITIES \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_ROOT_HUB_NAME \ - CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_NODE_INFORMATION \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX_V2 \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION_EX_V2, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) - -#define IOCTL_USB_GET_NODE_CONNECTION_NAME \ - CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) - // Most of the structures below need to be packed -#pragma pack(push, 1) - -typedef struct USB_INTERFACE_DESCRIPTOR { - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bInterfaceNumber; - UCHAR bAlternateSetting; - UCHAR bNumEndpoints; - UCHAR bInterfaceClass; - UCHAR bInterfaceSubClass; - UCHAR bInterfaceProtocol; - UCHAR iInterface; -} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; - -typedef struct USB_CONFIGURATION_DESCRIPTOR_SHORT { - struct { - ULONG ConnectionIndex; - struct { - UCHAR bmRequest; - UCHAR bRequest; - USHORT wValue; - USHORT wIndex; - USHORT wLength; - } SetupPacket; - } req; - USB_CONFIGURATION_DESCRIPTOR data; -} USB_CONFIGURATION_DESCRIPTOR_SHORT; - -typedef struct USB_ENDPOINT_DESCRIPTOR { - UCHAR bLength; - UCHAR bDescriptorType; - UCHAR bEndpointAddress; - UCHAR bmAttributes; - USHORT wMaxPacketSize; - UCHAR bInterval; -} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; +#include -typedef struct USB_DESCRIPTOR_REQUEST { +typedef struct _USB_DESCRIPTOR_REQUEST { ULONG ConnectionIndex; struct { UCHAR bmRequest; @@ -479,68 +353,24 @@ typedef struct USB_DESCRIPTOR_REQUEST { // UCHAR Data[0]; } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST; -typedef struct USB_HUB_DESCRIPTOR { - UCHAR bDescriptorLength; - UCHAR bDescriptorType; - UCHAR bNumberOfPorts; - USHORT wHubCharacteristics; - UCHAR bPowerOnToPowerGood; - UCHAR bHubControlCurrent; - UCHAR bRemoveAndPowerMask[64]; -} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR; - -typedef struct USB_ROOT_HUB_NAME { - ULONG ActualLength; - WCHAR RootHubName[1]; -} USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; - -typedef struct USB_ROOT_HUB_NAME_FIXED { - ULONG ActualLength; - WCHAR RootHubName[MAX_PATH_LENGTH]; -} USB_ROOT_HUB_NAME_FIXED; - -typedef struct USB_NODE_CONNECTION_NAME { - ULONG ConnectionIndex; - ULONG ActualLength; - WCHAR NodeName[1]; -} USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME; - -typedef struct USB_NODE_CONNECTION_NAME_FIXED { - ULONG ConnectionIndex; - ULONG ActualLength; - WCHAR NodeName[MAX_PATH_LENGTH]; -} USB_NODE_CONNECTION_NAME_FIXED; - -typedef struct USB_HUB_NAME_FIXED { - union { - USB_ROOT_HUB_NAME_FIXED root; - USB_NODE_CONNECTION_NAME_FIXED node; - } u; -} USB_HUB_NAME_FIXED; - -typedef struct USB_HUB_INFORMATION { - USB_HUB_DESCRIPTOR HubDescriptor; - BOOLEAN HubIsBusPowered; -} USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; - -typedef struct USB_MI_PARENT_INFORMATION { - ULONG NumberOfInterfaces; -} USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; - -typedef struct USB_NODE_INFORMATION { - USB_HUB_NODE NodeType; - union { - USB_HUB_INFORMATION HubInformation; - USB_MI_PARENT_INFORMATION MiParentInformation; - } u; -} USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION; +typedef struct _USB_CONFIGURATION_DESCRIPTOR_SHORT { + USB_DESCRIPTOR_REQUEST req; + USB_CONFIGURATION_DESCRIPTOR desc; +} USB_CONFIGURATION_DESCRIPTOR_SHORT; -typedef struct USB_PIPE_INFO { - USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; - ULONG ScheduleOffset; -} USB_PIPE_INFO, *PUSB_PIPE_INFO; +typedef struct USB_INTERFACE_DESCRIPTOR { + UCHAR bLength; + UCHAR bDescriptorType; + UCHAR bInterfaceNumber; + UCHAR bAlternateSetting; + UCHAR bNumEndpoints; + UCHAR bInterfaceClass; + UCHAR bInterfaceSubClass; + UCHAR bInterfaceProtocol; + UCHAR iInterface; +} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; -typedef struct USB_NODE_CONNECTION_INFORMATION_EX { +typedef struct _USB_NODE_CONNECTION_INFORMATION_EX { ULONG ConnectionIndex; USB_DEVICE_DESCRIPTOR DeviceDescriptor; UCHAR CurrentConfigurationValue; @@ -578,25 +408,7 @@ typedef struct _USB_NODE_CONNECTION_INFORMATION_EX_V2 { USB_NODE_CONNECTION_INFORMATION_EX_V2_FLAGS Flags; } USB_NODE_CONNECTION_INFORMATION_EX_V2, *PUSB_NODE_CONNECTION_INFORMATION_EX_V2; -typedef struct USB_HUB_CAP_FLAGS { - ULONG HubIsHighSpeedCapable:1; - ULONG HubIsHighSpeed:1; - ULONG HubIsMultiTtCapable:1; - ULONG HubIsMultiTt:1; - ULONG HubIsRoot:1; - ULONG HubIsArmedWakeOnConnect:1; - ULONG ReservedMBZ:26; -} USB_HUB_CAP_FLAGS, *PUSB_HUB_CAP_FLAGS; - -typedef struct USB_HUB_CAPABILITIES { - ULONG HubIs2xCapable:1; -} USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; - -typedef struct USB_HUB_CAPABILITIES_EX { - USB_HUB_CAP_FLAGS CapabilityFlags; -} USB_HUB_CAPABILITIES_EX, *PUSB_HUB_CAPABILITIES_EX; - -#pragma pack(pop) +#include /* winusb.dll interface */ @@ -608,36 +420,25 @@ typedef struct USB_HUB_CAPABILITIES_EX { #define AUTO_FLUSH 0x06 #define RAW_IO 0x07 #define MAXIMUM_TRANSFER_SIZE 0x08 -#define AUTO_SUSPEND 0x81 -#define SUSPEND_DELAY 0x83 -#define DEVICE_SPEED 0x01 -#define LowSpeed 0x01 -#define FullSpeed 0x02 -#define HighSpeed 0x03 - -typedef enum USBD_PIPE_TYPE { + +typedef enum _USBD_PIPE_TYPE { UsbdPipeTypeControl, UsbdPipeTypeIsochronous, UsbdPipeTypeBulk, UsbdPipeTypeInterrupt } USBD_PIPE_TYPE; -typedef struct { - USBD_PIPE_TYPE PipeType; - UCHAR PipeId; - USHORT MaximumPacketSize; - UCHAR Interval; -} WINUSB_PIPE_INFORMATION, *PWINUSB_PIPE_INFORMATION; - -#pragma pack(1) -typedef struct { - UCHAR request_type; - UCHAR request; - USHORT value; - USHORT index; - USHORT length; +#include + +typedef struct _WINUSB_SETUP_PACKET { + UCHAR RequestType; + UCHAR Request; + USHORT Value; + USHORT Index; + USHORT Length; } WINUSB_SETUP_PACKET, *PWINUSB_SETUP_PACKET; -#pragma pack() + +#include typedef void *WINUSB_INTERFACE_HANDLE, *PWINUSB_INTERFACE_HANDLE; @@ -665,59 +466,10 @@ typedef BOOL (WINAPI *WinUsb_GetAssociatedInterface_t)( UCHAR AssociatedInterfaceIndex, PWINUSB_INTERFACE_HANDLE AssociatedInterfaceHandle ); -typedef BOOL (WINAPI *WinUsb_GetCurrentAlternateSetting_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - PUCHAR AlternateSetting -); -typedef BOOL (WINAPI *WinUsb_GetDescriptor_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - UCHAR DescriptorType, - UCHAR Index, - USHORT LanguageID, - PUCHAR Buffer, - ULONG BufferLength, - PULONG LengthTransferred -); -typedef BOOL (WINAPI *WinUsb_GetOverlappedResult_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - LPOVERLAPPED lpOverlapped, - LPDWORD lpNumberOfBytesTransferred, - BOOL bWait -); -typedef BOOL (WINAPI *WinUsb_GetPipePolicy_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - UCHAR PipeID, - ULONG PolicyType, - PULONG ValueLength, - PVOID Value -); -typedef BOOL (WINAPI *WinUsb_GetPowerPolicy_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - ULONG PolicyType, - PULONG ValueLength, - PVOID Value -); typedef BOOL (WINAPI *WinUsb_Initialize_t)( HANDLE DeviceHandle, PWINUSB_INTERFACE_HANDLE InterfaceHandle ); -typedef BOOL (WINAPI *WinUsb_QueryDeviceInformation_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - ULONG InformationType, - PULONG BufferLength, - PVOID Buffer -); -typedef BOOL (WINAPI *WinUsb_QueryInterfaceSettings_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - UCHAR AlternateSettingNumber, - PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor -); -typedef BOOL (WINAPI *WinUsb_QueryPipe_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - UCHAR AlternateInterfaceNumber, - UCHAR PipeIndex, - PWINUSB_PIPE_INFORMATION PipeInformation -); typedef BOOL (WINAPI *WinUsb_ReadPipe_t)( WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, @@ -726,6 +478,9 @@ typedef BOOL (WINAPI *WinUsb_ReadPipe_t)( PULONG LengthTransferred, LPOVERLAPPED Overlapped ); +typedef BOOL (WINAPI *WinUsb_ResetDevice_t)( + WINUSB_INTERFACE_HANDLE InterfaceHandle +); typedef BOOL (WINAPI *WinUsb_ResetPipe_t)( WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID @@ -741,12 +496,6 @@ typedef BOOL (WINAPI *WinUsb_SetPipePolicy_t)( ULONG ValueLength, PVOID Value ); -typedef BOOL (WINAPI *WinUsb_SetPowerPolicy_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle, - ULONG PolicyType, - ULONG ValueLength, - PVOID Value -); typedef BOOL (WINAPI *WinUsb_WritePipe_t)( WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR PipeID, @@ -755,9 +504,6 @@ typedef BOOL (WINAPI *WinUsb_WritePipe_t)( PULONG LengthTransferred, LPOVERLAPPED Overlapped ); -typedef BOOL (WINAPI *WinUsb_ResetDevice_t)( - WINUSB_INTERFACE_HANDLE InterfaceHandle -); /* /!\ These must match the ones from the official libusbk.h */ typedef enum _KUSB_FNID { @@ -803,8 +549,7 @@ typedef struct _KLIB_VERSION { INT Minor; INT Micro; INT Nano; -} KLIB_VERSION; -typedef KLIB_VERSION* PKLIB_VERSION; +} KLIB_VERSION, *PKLIB_VERSION; typedef BOOL (WINAPI *LibK_GetProcAddress_t)( PVOID *ProcAddress, @@ -816,29 +561,63 @@ typedef VOID (WINAPI *LibK_GetVersion_t)( PKLIB_VERSION Version ); +//KISO_PACKET is equivalent of libusb_iso_packet_descriptor except uses absolute "offset" field instead of sequential Lengths +typedef struct _KISO_PACKET { + UINT offset; + USHORT actual_length; //changed from libusbk_shared.h "Length" for clarity + USHORT status; +} KISO_PACKET, *PKISO_PACKET; + +typedef enum _KISO_FLAG { + KISO_FLAG_NONE = 0, + KISO_FLAG_SET_START_FRAME = 0x00000001, +} KISO_FLAG; + +//KISO_CONTEXT is the conceptual equivalent of libusb_transfer except is isochronous-specific and must match libusbk's version +typedef struct _KISO_CONTEXT { + KISO_FLAG Flags; + UINT StartFrame; + SHORT ErrorCount; + SHORT NumberOfPackets; + UINT UrbHdrStatus; + KISO_PACKET IsoPackets[0]; +} KISO_CONTEXT, *PKISO_CONTEXT; + +typedef BOOL(WINAPI *WinUsb_IsoReadPipe_t)( + WINUSB_INTERFACE_HANDLE InterfaceHandle, + UCHAR PipeID, + PUCHAR Buffer, + ULONG BufferLength, + LPOVERLAPPED Overlapped, + PKISO_CONTEXT IsoContext +); + +typedef BOOL(WINAPI *WinUsb_IsoWritePipe_t)( + WINUSB_INTERFACE_HANDLE InterfaceHandle, + UCHAR PipeID, + PUCHAR Buffer, + ULONG BufferLength, + LPOVERLAPPED Overlapped, + PKISO_CONTEXT IsoContext +); + struct winusb_interface { bool initialized; + bool CancelIoEx_supported; WinUsb_AbortPipe_t AbortPipe; WinUsb_ControlTransfer_t ControlTransfer; WinUsb_FlushPipe_t FlushPipe; WinUsb_Free_t Free; WinUsb_GetAssociatedInterface_t GetAssociatedInterface; - WinUsb_GetCurrentAlternateSetting_t GetCurrentAlternateSetting; - WinUsb_GetDescriptor_t GetDescriptor; - WinUsb_GetOverlappedResult_t GetOverlappedResult; - WinUsb_GetPipePolicy_t GetPipePolicy; - WinUsb_GetPowerPolicy_t GetPowerPolicy; WinUsb_Initialize_t Initialize; - WinUsb_QueryDeviceInformation_t QueryDeviceInformation; - WinUsb_QueryInterfaceSettings_t QueryInterfaceSettings; - WinUsb_QueryPipe_t QueryPipe; WinUsb_ReadPipe_t ReadPipe; + WinUsb_ResetDevice_t ResetDevice; WinUsb_ResetPipe_t ResetPipe; WinUsb_SetCurrentAlternateSetting_t SetCurrentAlternateSetting; WinUsb_SetPipePolicy_t SetPipePolicy; - WinUsb_SetPowerPolicy_t SetPowerPolicy; WinUsb_WritePipe_t WritePipe; - WinUsb_ResetDevice_t ResetDevice; + WinUsb_IsoReadPipe_t IsoReadPipe; + WinUsb_IsoWritePipe_t IsoWritePipe; }; /* hid.dll interface */ @@ -846,34 +625,10 @@ struct winusb_interface { #define HIDP_STATUS_SUCCESS 0x110000 typedef void * PHIDP_PREPARSED_DATA; -#pragma pack(1) -typedef struct { - ULONG Size; - USHORT VendorID; - USHORT ProductID; - USHORT VersionNumber; -} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; -#pragma pack() +#include +#include typedef USHORT USAGE; -typedef struct { - USAGE Usage; - USAGE UsagePage; - USHORT InputReportByteLength; - USHORT OutputReportByteLength; - USHORT FeatureReportByteLength; - USHORT Reserved[17]; - USHORT NumberLinkCollectionNodes; - USHORT NumberInputButtonCaps; - USHORT NumberInputValueCaps; - USHORT NumberInputDataIndices; - USHORT NumberOutputButtonCaps; - USHORT NumberOutputValueCaps; - USHORT NumberOutputDataIndices; - USHORT NumberFeatureButtonCaps; - USHORT NumberFeatureValueCaps; - USHORT NumberFeatureDataIndices; -} HIDP_CAPS, *PHIDP_CAPS; typedef enum _HIDP_REPORT_TYPE { HidP_Input, @@ -919,19 +674,7 @@ typedef struct _HIDP_VALUE_CAPS { } HIDP_VALUE_CAPS, *PHIDP_VALUE_CAPS; DLL_DECLARE_HANDLE(hid); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetAttributes, (HANDLE, PHIDD_ATTRIBUTES)); DLL_DECLARE_FUNC(WINAPI, VOID, HidD_GetHidGuid, (LPGUID)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetPreparsedData, (HANDLE, PHIDP_PREPARSED_DATA *)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_FreePreparsedData, (PHIDP_PREPARSED_DATA)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetManufacturerString, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetProductString, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetSerialNumberString, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, LONG, HidP_GetCaps, (PHIDP_PREPARSED_DATA, PHIDP_CAPS)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_SetNumInputBuffers, (HANDLE, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_SetFeature, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetFeature, (HANDLE, PVOID, ULONG)); DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetPhysicalDescriptor, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_GetInputReport, (HANDLE, PVOID, ULONG)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_SetOutputReport, (HANDLE, PVOID, ULONG)); DLL_DECLARE_FUNC(WINAPI, BOOL, HidD_FlushQueue, (HANDLE)); -DLL_DECLARE_FUNC(WINAPI, BOOL, HidP_GetValueCaps, (HIDP_REPORT_TYPE, PHIDP_VALUE_CAPS, PULONG, PHIDP_PREPARSED_DATA)); \ No newline at end of file +DLL_DECLARE_FUNC(WINAPI, BOOL, HidP_GetValueCaps, (HIDP_REPORT_TYPE, PHIDP_VALUE_CAPS, PULONG, PHIDP_PREPARSED_DATA)); diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/strerror.c b/vendor/github.com/karalabe/usb/libusb/libusb/strerror.c similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/strerror.c rename to vendor/github.com/karalabe/usb/libusb/libusb/strerror.c diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/sync.c b/vendor/github.com/karalabe/usb/libusb/libusb/sync.c similarity index 100% rename from vendor/github.com/karalabe/hid/libusb/libusb/sync.c rename to vendor/github.com/karalabe/usb/libusb/libusb/sync.c diff --git a/vendor/github.com/karalabe/hid/libusb/libusb/version.h b/vendor/github.com/karalabe/usb/libusb/libusb/version.h similarity index 94% rename from vendor/github.com/karalabe/hid/libusb/libusb/version.h rename to vendor/github.com/karalabe/usb/libusb/libusb/version.h index 6ce48a7d01ad..c6dfe3709344 100644 --- a/vendor/github.com/karalabe/hid/libusb/libusb/version.h +++ b/vendor/github.com/karalabe/usb/libusb/libusb/version.h @@ -7,7 +7,7 @@ #define LIBUSB_MINOR 0 #endif #ifndef LIBUSB_MICRO -#define LIBUSB_MICRO 21 +#define LIBUSB_MICRO 22 #endif #ifndef LIBUSB_NANO #define LIBUSB_NANO 0 diff --git a/vendor/github.com/karalabe/usb/libusb/libusb/version_nano.h b/vendor/github.com/karalabe/usb/libusb/libusb/version_nano.h new file mode 100644 index 000000000000..90a782a6bf94 --- /dev/null +++ b/vendor/github.com/karalabe/usb/libusb/libusb/version_nano.h @@ -0,0 +1 @@ +#define LIBUSB_NANO 11312 diff --git a/vendor/github.com/karalabe/usb/raw_disabled.go b/vendor/github.com/karalabe/usb/raw_disabled.go new file mode 100644 index 000000000000..a05ef8ebb211 --- /dev/null +++ b/vendor/github.com/karalabe/usb/raw_disabled.go @@ -0,0 +1,42 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2017 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build !freebsd,!linux,!darwin,!windows ios !cgo + +package usb + +// RawDevice is a live raw USB connected device handle. On platforms that this file +// implements, the type lacks the actual USB device and all methods are noop. +type RawDevice struct { + DeviceInfo // Embed the infos for easier access +} + +// Close releases the USB device handle. On platforms that this file implements, +// the method is just a noop. +func (dev *RawDevice) Close() error { + return ErrUnsupportedPlatform +} + +// Write sends a binary blob to a USB device. On platforms that this file +// implements, the method just returns an error. +func (dev *RawDevice) Write(b []byte) (int, error) { + return 0, ErrUnsupportedPlatform +} + +// Read retrieves a binary blob from a USB device. On platforms that this file +// implements, the method just returns an error. +func (dev *RawDevice) Read(b []byte) (int, error) { + return 0, ErrUnsupportedPlatform +} diff --git a/vendor/github.com/karalabe/usb/raw_enabled.go b/vendor/github.com/karalabe/usb/raw_enabled.go new file mode 100644 index 000000000000..326ac97add3a --- /dev/null +++ b/vendor/github.com/karalabe/usb/raw_enabled.go @@ -0,0 +1,253 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build freebsd,cgo linux,cgo darwin,!ios,cgo windows,cgo + +package usb + +/* + #include "./libusb/libusb/libusb.h" + + // ctx is a global libusb context to interact with devices through. + libusb_context* ctx; +*/ +import "C" + +import ( + "fmt" + "reflect" + "sync" + "unsafe" +) + +// enumerateRaw returns a list of all the USB devices attached to the system which +// match the vendor and product id: +// - If the vendor id is set to 0 then any vendor matches. +// - If the product id is set to 0 then any product matches. +// - If the vendor and product id are both 0, all USB devices are returned. +func enumerateRaw(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + // Enumerate the devices, and free all the matching refcounts (we'll reopen any + // explicitly requested). + infos, err := enumerateRawWithRef(vendorID, productID) + for _, info := range infos { + C.libusb_unref_device(info.rawDevice.(*C.libusb_device)) + } + // If enumeration failed, don't return anything, otherwise everything + if err != nil { + return nil, err + } + return infos, nil +} + +// enumerateRawWithRef is the internal device enumerator that retains 1 reference +// to every matched device so they may selectively be opened on request. +func enumerateRawWithRef(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + // Ensure we have a libusb context to interact through. The enumerate call is + // protexted by a mutex outside, so it's fine to do the below check and init. + if C.ctx == nil { + if err := fromRawErrno(C.libusb_init((**C.libusb_context)(&C.ctx))); err != nil { + return nil, fmt.Errorf("failed to initialize libusb: %v", err) + } + } + // Retrieve all the available USB devices and wrap them in Go + var deviceList **C.libusb_device + count := C.libusb_get_device_list(C.ctx, &deviceList) + if count < 0 { + return nil, rawError(count) + } + defer C.libusb_free_device_list(deviceList, 1) + + var devices []*C.libusb_device + *(*reflect.SliceHeader)(unsafe.Pointer(&devices)) = reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(deviceList)), + Len: int(count), + Cap: int(count), + } + // + var infos []DeviceInfo + for devnum, dev := range devices { + // Retrieve the libusb device descriptor and skip non-queried ones + var desc C.struct_libusb_device_descriptor + if err := fromRawErrno(C.libusb_get_device_descriptor(dev, &desc)); err != nil { + return infos, fmt.Errorf("failed to get device %d descriptor: %v", devnum, err) + } + if (vendorID > 0 && uint16(desc.idVendor) != vendorID) || (productID > 0 && uint16(desc.idProduct) != productID) { + continue + } + // Skip HID devices, they are handled directly by OS libraries + if desc.bDeviceClass == C.LIBUSB_CLASS_HID { + continue + } + // Iterate over all the configurations and find raw interfaces + for cfgnum := 0; cfgnum < int(desc.bNumConfigurations); cfgnum++ { + // Retrieve the all the possible USB configurations of the device + var cfg *C.struct_libusb_config_descriptor + if err := fromRawErrno(C.libusb_get_config_descriptor(dev, C.uint8_t(cfgnum), &cfg)); err != nil { + return infos, fmt.Errorf("failed to get device %d config %d: %v", devnum, cfgnum, err) + } + var ifaces []C.struct_libusb_interface + *(*reflect.SliceHeader)(unsafe.Pointer(&ifaces)) = reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(cfg._interface)), + Len: int(cfg.bNumInterfaces), + Cap: int(cfg.bNumInterfaces), + } + // Drill down into each advertised interface + for ifacenum, iface := range ifaces { + if iface.num_altsetting == 0 { + continue + } + var alts []C.struct_libusb_interface_descriptor + *(*reflect.SliceHeader)(unsafe.Pointer(&alts)) = reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(iface.altsetting)), + Len: int(iface.num_altsetting), + Cap: int(iface.num_altsetting), + } + for _, alt := range alts { + // Skip HID interfaces, they are handled directly by OS libraries + if alt.bInterfaceClass == C.LIBUSB_CLASS_HID { + continue + } + // Find the endpoints that can speak libusb interrupts + var ends []C.struct_libusb_endpoint_descriptor + *(*reflect.SliceHeader)(unsafe.Pointer(&ends)) = reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(alt.endpoint)), + Len: int(alt.bNumEndpoints), + Cap: int(alt.bNumEndpoints), + } + var reader, writer *uint8 + for _, end := range ends { + // Skip any non-interrupt endpoints + if end.bmAttributes != C.LIBUSB_TRANSFER_TYPE_INTERRUPT { + continue + } + if end.bEndpointAddress&C.LIBUSB_ENDPOINT_IN == C.LIBUSB_ENDPOINT_IN { + reader = new(uint8) + *reader = uint8(end.bEndpointAddress) + } else { + writer = new(uint8) + *writer = uint8(end.bEndpointAddress) + } + } + // If both in and out interrupts are available, match the device + if reader != nil && writer != nil { + // Enumeration matched, bump the device refcount to avoid cleaning it up + C.libusb_ref_device(dev) + + port := uint8(C.libusb_get_port_number(dev)) + infos = append(infos, DeviceInfo{ + Path: fmt.Sprintf("%04x:%04x:%02d", vendorID, uint16(desc.idProduct), port), + VendorID: uint16(desc.idVendor), + ProductID: uint16(desc.idProduct), + Interface: ifacenum, + rawDevice: dev, + rawPort: &port, + rawReader: reader, + rawWriter: writer, + }) + } + } + } + } + } + return infos, nil +} + +// openRaw connects to a low level libusb device by its path name. +func openRaw(info DeviceInfo) (*rawDevice, error) { + // Enumerate all the devices matching this particular info + matches, err := enumerateRawWithRef(info.VendorID, info.ProductID) + if err != nil { + // Enumeration failed, make sure any subresults are released + for _, match := range matches { + C.libusb_unref_device(match.rawDevice.(*C.libusb_device)) + } + return nil, err + } + // Find the specific endpoint we're interested in + var device *C.libusb_device + for _, match := range matches { + // Keep the matching device reference, release anything else + if device == nil && *match.rawPort == *info.rawPort && match.Interface == info.Interface { + device = match.rawDevice.(*C.libusb_device) + } else { + C.libusb_unref_device(match.rawDevice.(*C.libusb_device)) + } + } + if device == nil { + return nil, fmt.Errorf("failed to open device: not found") + } + // Open the mathcing device + info.rawDevice = device + + var handle *C.struct_libusb_device_handle + if err := fromRawErrno(C.libusb_open(info.rawDevice.(*C.libusb_device), (**C.struct_libusb_device_handle)(&handle))); err != nil { + return nil, fmt.Errorf("failed to open device: %v", err) + } + if err := fromRawErrno(C.libusb_claim_interface(handle, (C.int)(info.Interface))); err != nil { + C.libusb_close(handle) + return nil, fmt.Errorf("failed to claim interface: %v", err) + } + return &rawDevice{ + DeviceInfo: info, + handle: handle, + }, nil +} + +// rawDevice is a live low level USB connected device handle. +type rawDevice struct { + DeviceInfo // Embed the infos for easier access + + handle *C.struct_libusb_device_handle // Low level USB device to communicate through + lock sync.Mutex +} + +// Close releases the raw USB device handle. +func (dev *rawDevice) Close() error { + dev.lock.Lock() + defer dev.lock.Unlock() + + if dev.handle != nil { + C.libusb_release_interface(dev.handle, (C.int)(dev.Interface)) + C.libusb_close(dev.handle) + dev.handle = nil + } + C.libusb_unref_device(dev.rawDevice.(*C.libusb_device)) + + return nil +} + +// Write sends a binary blob to a low level USB device. +func (dev *rawDevice) Write(b []byte) (int, error) { + dev.lock.Lock() + defer dev.lock.Unlock() + + var transferred C.int + if err := fromRawErrno(C.libusb_interrupt_transfer(dev.handle, (C.uchar)(*dev.rawWriter), (*C.uchar)(&b[0]), (C.int)(len(b)), &transferred, (C.uint)(0))); err != nil { + return 0, fmt.Errorf("failed to write to device: %v", err) + } + return int(transferred), nil +} + +// Read retrieves a binary blob from a low level USB device. +func (dev *rawDevice) Read(b []byte) (int, error) { + dev.lock.Lock() + defer dev.lock.Unlock() + + var transferred C.int + if err := fromRawErrno(C.libusb_interrupt_transfer(dev.handle, (C.uchar)(*dev.rawReader), (*C.uchar)(&b[0]), (C.int)(len(b)), &transferred, (C.uint)(0))); err != nil { + return 0, fmt.Errorf("failed to read from device: %v", err) + } + return int(transferred), nil +} diff --git a/vendor/github.com/karalabe/usb/raw_errors.go b/vendor/github.com/karalabe/usb/raw_errors.go new file mode 100644 index 000000000000..9e071f861fe7 --- /dev/null +++ b/vendor/github.com/karalabe/usb/raw_errors.go @@ -0,0 +1,74 @@ +// Copyright 2013 Google Inc. All rights reserved. +// Copyright 2016 the gousb Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package usb + +import ( + "fmt" +) + +// #include "./libusb/libusb/libusb.h" +import "C" + +// rawError is an error code from libusb. +type rawError C.int + +// Error implements the error interface. +func (e rawError) Error() string { + return fmt.Sprintf("libusb: %s [code %d]", rawErrorString[e], e) +} + +// fromRawErrno converts a raw libusb error into a Go type. +func fromRawErrno(errno C.int) error { + err := rawError(errno) + if err == errSuccess { + return nil + } + return err +} + +const ( + errSuccess rawError = C.LIBUSB_SUCCESS + errIO rawError = C.LIBUSB_ERROR_IO + errInvalidParam rawError = C.LIBUSB_ERROR_INVALID_PARAM + errAccess rawError = C.LIBUSB_ERROR_ACCESS + errNoDevice rawError = C.LIBUSB_ERROR_NO_DEVICE + errNotFound rawError = C.LIBUSB_ERROR_NOT_FOUND + errBusy rawError = C.LIBUSB_ERROR_BUSY + errTimeout rawError = C.LIBUSB_ERROR_TIMEOUT + errOverflow rawError = C.LIBUSB_ERROR_OVERFLOW + errPipe rawError = C.LIBUSB_ERROR_PIPE + errInterrupted rawError = C.LIBUSB_ERROR_INTERRUPTED + errNoMem rawError = C.LIBUSB_ERROR_NO_MEM + errNotSupported rawError = C.LIBUSB_ERROR_NOT_SUPPORTED + errOther rawError = C.LIBUSB_ERROR_OTHER +) + +var rawErrorString = map[rawError]string{ + errSuccess: "success", + errIO: "i/o error", + errInvalidParam: "invalid param", + errAccess: "bad access", + errNoDevice: "no device", + errNotFound: "not found", + errBusy: "device or resource busy", + errTimeout: "timeout", + errOverflow: "overflow", + errPipe: "pipe error", + errInterrupted: "interrupted", + errNoMem: "out of memory", + errNotSupported: "not supported", + errOther: "unknown error", +} diff --git a/vendor/github.com/karalabe/usb/usb.go b/vendor/github.com/karalabe/usb/usb.go new file mode 100644 index 000000000000..96a1e2502c1b --- /dev/null +++ b/vendor/github.com/karalabe/usb/usb.go @@ -0,0 +1,68 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// Package usb provide interfaces for generic USB devices. +package usb + +import "errors" + +// ErrDeviceClosed is returned for operations where the device closed before or +// during the execution. +var ErrDeviceClosed = errors.New("usb: device closed") + +// ErrUnsupportedPlatform is returned for all operations where the underlying +// operating system is not supported by the library. +var ErrUnsupportedPlatform = errors.New("usb: unsupported platform") + +// DeviceInfo contains all the information we know about a USB device. In case of +// HID devices, that might be a lot more extensive (empty fields for raw USB). +type DeviceInfo struct { + Path string // Platform-specific device path + VendorID uint16 // Device Vendor ID + ProductID uint16 // Device Product ID + Release uint16 // Device Release Number in binary-coded decimal, also known as Device Version Number + Serial string // Serial Number + Manufacturer string // Manufacturer String + Product string // Product string + UsagePage uint16 // Usage Page for this Device/Interface (Windows/Mac only) + Usage uint16 // Usage for this Device/Interface (Windows/Mac only) + + // The USB interface which this logical device + // represents. Valid on both Linux implementations + // in all cases, and valid on the Windows implementation + // only if the device contains more than one interface. + Interface int + + // Raw low level libusb endpoint data for simplified communication + rawDevice interface{} + rawPort *uint8 // Pointer to differentiate between unset and port 0 + rawReader *uint8 // Pointer to differentiate between unset and endpoint 0 + rawWriter *uint8 // Pointer to differentiate between unset and endpoint 0 +} + +// Device is a generic USB device interface. It may either be backed by a USB HID +// device or a low level raw (libusb) device. +type Device interface { + // Close releases the USB device handle. + Close() error + + // Write sends a binary blob to a USB device. For HID devices write uses reports, + // for low level USB write uses interrupt transfers. + Write(b []byte) (int, error) + + // Read retrieves a binary blob from a USB device. For HID devices read uses + // reports, for low level USB read uses interrupt transfers. + Read(b []byte) (int, error) +} diff --git a/vendor/github.com/karalabe/usb/usb_disabled.go b/vendor/github.com/karalabe/usb/usb_disabled.go new file mode 100644 index 000000000000..77c90076119b --- /dev/null +++ b/vendor/github.com/karalabe/usb/usb_disabled.go @@ -0,0 +1,51 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build !freebsd,!linux,!darwin,!windows ios !cgo + +package usb + +// Supported returns whether this platform is supported by the USB library or not. +// The goal of this method is to allow programatically handling platforms that do +// not support USB and not having to fall back to build constraints. +func Supported() bool { + return false +} + +// Enumerate returns a list of all the USB devices attached to the system which +// match the vendor and product id. On platforms that this file implements the +// function is a noop and returns an empty list always. +func Enumerate(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + return nil, nil +} + +// EnumerateRaw returns a list of all the USB devices attached to the system which +// match the vendor and product id. On platforms that this file implements the +// function is a noop and returns an empty list always. +func EnumerateRaw(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + return nil, nil +} + +// EnumerateHid returns a list of all the HID devices attached to the system which +// match the vendor and product id. On platforms that this file implements the +// function is a noop and returns an empty list always. +func EnumerateHid(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + return nil, nil +} + +// Open connects to a previsouly discovered USB device. +func (info DeviceInfo) Open() (Device, error) { + return nil, ErrUnsupportedPlatform +} diff --git a/vendor/github.com/karalabe/usb/usb_enabled.go b/vendor/github.com/karalabe/usb/usb_enabled.go new file mode 100644 index 000000000000..6ba37af7beb9 --- /dev/null +++ b/vendor/github.com/karalabe/usb/usb_enabled.go @@ -0,0 +1,98 @@ +// usb - Self contained USB and HID library for Go +// Copyright 2019 The library Authors +// +// This library is free software: you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// The library is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +// A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License along +// with the library. If not, see . + +// +build freebsd,cgo linux,cgo darwin,!ios,cgo windows,cgo + +package usb + +import ( + "sync" +) + +// enumerateLock is a mutex serializing access to USB device enumeration needed +// by the macOS USB HID system calls, which require 2 consecutive method calls +// for enumeration, causing crashes if called concurrently. +// +// For more details, see: +// https://developer.apple.com/documentation/iokit/1438371-iohidmanagersetdevicematching +// > "subsequent calls will cause the hid manager to release previously enumerated devices" +var enumerateLock sync.Mutex + +// Supported returns whether this platform is supported by the USB library or not. +// The goal of this method is to allow programatically handling platforms that do +// not support USB and not having to fall back to build constraints. +func Supported() bool { + return true +} + +// Enumerate returns a list of all the USB devices attached to the system which +// match the vendor and product id: +// - If the vendor id is set to 0 then any vendor matches. +// - If the product id is set to 0 then any product matches. +// - If the vendor and product id are both 0, all devices are returned. +// +// For any device that is HID capable, the enumeration will return an interface +// to the HID endpoints. For pure raw USB access, please use EnumerateRaw. +func Enumerate(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + enumerateLock.Lock() + defer enumerateLock.Unlock() + + // Enumerate all the raw USB devices and skip the HID ones + raws, err := enumerateRaw(vendorID, productID) + if err != nil { + return nil, err + } + // Enumerate all the HID USB devices + hids, err := enumerateHid(vendorID, productID) + if err != nil { + return nil, err + } + return append(raws, hids...), nil +} + +// EnumerateRaw returns a list of all the USB devices attached to the system which +// match the vendor and product id: +// - If the vendor id is set to 0 then any vendor matches. +// - If the product id is set to 0 then any product matches. +// - If the vendor and product id are both 0, all devices are returned. +func EnumerateRaw(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + enumerateLock.Lock() + defer enumerateLock.Unlock() + + return enumerateRaw(vendorID, productID) +} + +// EnumerateHid returns a list of all the HID devices attached to the system which +// match the vendor and product id: +// - If the vendor id is set to 0 then any vendor matches. +// - If the product id is set to 0 then any product matches. +// - If the vendor and product id are both 0, all devices are returned. +func EnumerateHid(vendorID uint16, productID uint16) ([]DeviceInfo, error) { + enumerateLock.Lock() + defer enumerateLock.Unlock() + + return enumerateHid(vendorID, productID) +} + +// Open connects to a previsouly discovered USB device. +func (info DeviceInfo) Open() (Device, error) { + enumerateLock.Lock() + defer enumerateLock.Unlock() + + if info.rawDevice == nil { + return openHid(info) + } + return openRaw(info) +} diff --git a/vendor/github.com/karalabe/hid/wchar.go b/vendor/github.com/karalabe/usb/wchar.go similarity index 98% rename from vendor/github.com/karalabe/hid/wchar.go rename to vendor/github.com/karalabe/usb/wchar.go index d103beff5ee5..cbc7e4d569e9 100644 --- a/vendor/github.com/karalabe/hid/wchar.go +++ b/vendor/github.com/karalabe/usb/wchar.go @@ -7,9 +7,9 @@ // https://github.com/orofarne/gowchar/blob/master/LICENSE // +build !ios -// +build linux darwin windows +// +build freebsd linux darwin windows -package hid +package usb /* #include diff --git a/vendor/github.com/maruel/panicparse/.travis.yml b/vendor/github.com/maruel/panicparse/.travis.yml deleted file mode 100644 index c6da8f0b8c00..000000000000 --- a/vendor/github.com/maruel/panicparse/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2014 Marc-Antoine Ruel. All rights reserved. -# Use of this source code is governed under the Apache License, Version 2.0 -# that can be found in the LICENSE file. - -sudo: false -language: go - -go: -- tip - -before_install: - - go get github.com/maruel/pre-commit-go/cmd/pcg - -script: - - pcg diff --git a/vendor/github.com/maruel/panicparse/LICENSE b/vendor/github.com/maruel/panicparse/LICENSE deleted file mode 100644 index b76840c25822..000000000000 --- a/vendor/github.com/maruel/panicparse/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2015 Marc-Antoine Ruel - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/maruel/panicparse/README.md b/vendor/github.com/maruel/panicparse/README.md deleted file mode 100644 index 9fc039cd9ccc..000000000000 --- a/vendor/github.com/maruel/panicparse/README.md +++ /dev/null @@ -1,123 +0,0 @@ -panicparse -========== - -Parses panic stack traces, densifies and deduplicates goroutines with similar -stack traces. Helps debugging crashes and deadlocks in heavily parallelized -process. - -[![Build Status](https://travis-ci.org/maruel/panicparse.svg?branch=master)](https://travis-ci.org/maruel/panicparse) - -panicparse helps make sense of Go crash dumps: - -![Screencast](https://raw.githubusercontent.com/wiki/maruel/panicparse/parse.gif "Screencast") - - -Features --------- - - * >50% more compact output than original stack dump yet more readable. - * Exported symbols are bold, private symbols are darker. - * Stdlib is green, main is yellow, rest is red. - * Deduplicates redundant goroutine stacks. Useful for large server crashes. - * Arguments as pointer IDs instead of raw pointer values. - * Pushes stdlib-only stacks at the bottom to help focus on important code. - * Usable as a library! - [![GoDoc](https://godoc.org/github.com/maruel/panicparse/stack?status.svg)](https://godoc.org/github.com/maruel/panicparse/stack) - * Warning: please pin the version (e.g. vendor it). Breaking changes are - not planned but may happen. - * Parses the source files if available to augment the output. - * Works on Windows. - - -Installation ------------- - - go get github.com/maruel/panicparse/cmd/pp - - -Usage ------ - -### Piping a stack trace from another process - -#### TL;DR - - * Ubuntu (bash v4 or zsh): `|&` - * OSX, [install bash 4+](README.md#updating-bash-on-osx), then: `|&` - * Windows _or_ OSX with stock bash v3: `2>&1 |` - * [Fish](http://fishshell.com/) shell: `^|` - - -#### Longer version - -`pp` streams its stdin to stdout as long as it doesn't detect any panic. -`panic()` and Go's native deadlock detector [print to -stderr](https://golang.org/src/runtime/panic1.go) via the native [`print()` -function](https://golang.org/pkg/builtin/#print). - - -**Bash v4** or **zsh**: `|&` tells the shell to redirect stderr to stdout, -it's an alias for `2>&1 |` ([bash -v4](https://www.gnu.org/software/bash/manual/bash.html#Pipelines), -[zsh](http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines)): - - go test -v |&pp - - -**Windows or OSX native bash** [(which is -3.2.57)](http://meta.ath0.com/2012/02/05/apples-great-gpl-purge/): They don't -have this shortcut, so use the long form: - - go test -v 2>&1 | pp - - -**Fish**: It uses [^ for stderr -redirection](http://fishshell.com/docs/current/tutorial.html#tut_pipes_and_redirections) -so the shortcut is `^|`: - - go test -v ^|pp - - -**PowerShell**: [It has broken `2>&1` redirection](https://connect.microsoft.com/PowerShell/feedback/details/765551/in-powershell-v3-you-cant-redirect-stderr-to-stdout-without-generating-error-records). The workaround is to shell out to cmd.exe. :( - - -### Investigate deadlock - -On POSIX, use `Ctrl-\` to send SIGQUIT to your process, `pp` will ignore -the signal and will parse the stack trace. - - -### Parsing from a file - -To dump to a file then parse, pass the file path of a stack trace - - go test 2> stack.txt - pp stack.txt - - -Tips ----- - -### GOTRACEBACK - -Starting with Go 1.6, [`GOTRACEBACK`](https://golang.org/pkg/runtime/) defaults -to `single` instead of `all` / `1` that was used in 1.5 and before. To get all -goroutines trace and not just the crashing one, set the environment variable: - - export GOTRACEBACK=all - -or `set GOTRACEBACK=all` on Windows. Probably worth to put it in your `.bashrc`. - - -### Updating bash on OSX - -Install bash v4+ on OSX via [homebrew](http://brew.sh) or -[macports](https://www.macports.org/). Your future self will appreciate having -done that. - - -### If you have `/usr/bin/pp` installed - -You may have the Perl PAR Packager installed. Use long name `panicparse` then; - - go get github.com/maruel/panicparse diff --git a/vendor/github.com/maruel/panicparse/stack/source.go b/vendor/github.com/maruel/panicparse/stack/source.go deleted file mode 100644 index f09e67336a09..000000000000 --- a/vendor/github.com/maruel/panicparse/stack/source.go +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2015 Marc-Antoine Ruel. All rights reserved. -// Use of this source code is governed under the Apache License, Version 2.0 -// that can be found in the LICENSE file. - -// This file contains the code to process sources, to be able to deduct the -// original types. - -package stack - -import ( - "bytes" - "fmt" - "go/ast" - "go/parser" - "go/token" - "io/ioutil" - "log" - "math" - "strings" -) - -// cache is a cache of sources on the file system. -type cache struct { - files map[string][]byte - parsed map[string]*parsedFile -} - -// Augment processes source files to improve calls to be more descriptive. -// -// It modifies goroutines in place. -func Augment(goroutines []Goroutine) { - c := &cache{} - for i := range goroutines { - c.augmentGoroutine(&goroutines[i]) - } -} - -// augmentGoroutine processes source files to improve call to be more -// descriptive. -// -// It modifies the routine. -func (c *cache) augmentGoroutine(goroutine *Goroutine) { - if c.files == nil { - c.files = map[string][]byte{} - } - if c.parsed == nil { - c.parsed = map[string]*parsedFile{} - } - // For each call site, look at the next call and populate it. Then we can - // walk back and reformat things. - for i := range goroutine.Stack.Calls { - c.load(goroutine.Stack.Calls[i].SourcePath) - } - - // Once all loaded, we can look at the next call when available. - for i := 1; i < len(goroutine.Stack.Calls); i++ { - // Get the AST from the previous call and process the call line with it. - if f := c.getFuncAST(&goroutine.Stack.Calls[i]); f != nil { - processCall(&goroutine.Stack.Calls[i], f) - } - } -} - -// Private stuff. - -// load loads a source file and parses the AST tree. Failures are ignored. -func (c *cache) load(fileName string) { - if _, ok := c.parsed[fileName]; ok { - return - } - c.parsed[fileName] = nil - if !strings.HasSuffix(fileName, ".go") { - // Ignore C and assembly. - c.files[fileName] = nil - return - } - log.Printf("load(%s)", fileName) - if _, ok := c.files[fileName]; !ok { - var err error - if c.files[fileName], err = ioutil.ReadFile(fileName); err != nil { - log.Printf("Failed to read %s: %s", fileName, err) - c.files[fileName] = nil - return - } - } - fset := token.NewFileSet() - src := c.files[fileName] - parsed, err := parser.ParseFile(fset, fileName, src, 0) - if err != nil { - log.Printf("Failed to parse %s: %s", fileName, err) - return - } - // Convert the line number into raw file offset. - offsets := []int{0, 0} - start := 0 - for l := 1; start < len(src); l++ { - start += bytes.IndexByte(src[start:], '\n') + 1 - offsets = append(offsets, start) - } - c.parsed[fileName] = &parsedFile{offsets, parsed} -} - -func (c *cache) getFuncAST(call *Call) *ast.FuncDecl { - if p := c.parsed[call.SourcePath]; p != nil { - return p.getFuncAST(call.Func.Name(), call.Line) - } - return nil -} - -type parsedFile struct { - lineToByteOffset []int - parsed *ast.File -} - -// getFuncAST gets the callee site function AST representation for the code -// inside the function f at line l. -func (p *parsedFile) getFuncAST(f string, l int) (d *ast.FuncDecl) { - // Walk the AST to find the lineToByteOffset that fits the line number. - var lastFunc *ast.FuncDecl - var found ast.Node - // Inspect() goes depth first. This means for example that a function like: - // func a() { - // b := func() {} - // c() - // } - // - // Were we are looking at the c() call can return confused values. It is - // important to look at the actual ast.Node hierarchy. - ast.Inspect(p.parsed, func(n ast.Node) bool { - if d != nil { - return false - } - if n == nil { - return true - } - if found != nil { - // We are walking up. - } - if int(n.Pos()) >= p.lineToByteOffset[l] { - // We are expecting a ast.CallExpr node. It can be harder to figure out - // when there are multiple calls on a single line, as the stack trace - // doesn't have file byte offset information, only line based. - // gofmt will always format to one function call per line but there can - // be edge cases, like: - // a = A{Foo(), Bar()} - d = lastFunc - //p.processNode(call, n) - return false - } else if f, ok := n.(*ast.FuncDecl); ok { - lastFunc = f - } - return true - }) - return -} - -func name(n ast.Node) string { - if _, ok := n.(*ast.InterfaceType); ok { - return "interface{}" - } - if i, ok := n.(*ast.Ident); ok { - return i.Name - } - if _, ok := n.(*ast.FuncType); ok { - return "func" - } - if s, ok := n.(*ast.SelectorExpr); ok { - return s.Sel.Name - } - // TODO(maruel): Implement anything missing. - return "" -} - -// fieldToType returns the type name and whether if it's an ellipsis. -func fieldToType(f *ast.Field) (string, bool) { - switch arg := f.Type.(type) { - case *ast.ArrayType: - return "[]" + name(arg.Elt), false - case *ast.Ellipsis: - return name(arg.Elt), true - case *ast.FuncType: - // Do not print the function signature to not overload the trace. - return "func", false - case *ast.Ident: - return arg.Name, false - case *ast.InterfaceType: - return "interface{}", false - case *ast.SelectorExpr: - return arg.Sel.Name, false - case *ast.StarExpr: - return "*" + name(arg.X), false - default: - // TODO(maruel): Implement anything missing. - return "", false - } -} - -// extractArgumentsType returns the name of the type of each input argument. -func extractArgumentsType(f *ast.FuncDecl) ([]string, bool) { - var fields []*ast.Field - if f.Recv != nil { - if len(f.Recv.List) != 1 { - panic("Expect only one receiver; please fix panicparse's code") - } - // If it is an object receiver (vs a pointer receiver), its address is not - // printed in the stack trace so it needs to be ignored. - if _, ok := f.Recv.List[0].Type.(*ast.StarExpr); ok { - fields = append(fields, f.Recv.List[0]) - } - } - var types []string - extra := false - for _, arg := range append(fields, f.Type.Params.List...) { - // Assert that extra is only set on the last item of fields? - var t string - t, extra = fieldToType(arg) - mult := len(arg.Names) - if mult == 0 { - mult = 1 - } - for i := 0; i < mult; i++ { - types = append(types, t) - } - } - return types, extra -} - -// processCall walks the function and populate call accordingly. -func processCall(call *Call, f *ast.FuncDecl) { - values := make([]uint64, len(call.Args.Values)) - for i := range call.Args.Values { - values[i] = call.Args.Values[i].Value - } - index := 0 - pop := func() uint64 { - if len(values) != 0 { - x := values[0] - values = values[1:] - index++ - return x - } - return 0 - } - popName := func() string { - n := call.Args.Values[index].Name - v := pop() - if len(n) == 0 { - return fmt.Sprintf("0x%x", v) - } - return n - } - - types, extra := extractArgumentsType(f) - for i := 0; len(values) != 0; i++ { - var t string - if i >= len(types) { - if !extra { - // These are unexpected value! Print them as hex. - call.Args.Processed = append(call.Args.Processed, popName()) - continue - } - t = types[len(types)-1] - } else { - t = types[i] - } - switch t { - case "float32": - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%g", math.Float32frombits(uint32(pop())))) - case "float64": - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%g", math.Float64frombits(pop()))) - case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64": - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%d", pop())) - case "string": - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%s(%s, len=%d)", t, popName(), pop())) - default: - if strings.HasPrefix(t, "*") { - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%s(%s)", t, popName())) - } else if strings.HasPrefix(t, "[]") { - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%s(%s len=%d cap=%d)", t, popName(), pop(), pop())) - } else { - // Assumes it's an interface. For now, discard the object value, which - // is probably not a good idea. - call.Args.Processed = append(call.Args.Processed, fmt.Sprintf("%s(%s)", t, popName())) - pop() - } - } - if len(values) == 0 && call.Args.Elided { - return - } - } -} diff --git a/vendor/github.com/maruel/panicparse/stack/stack.go b/vendor/github.com/maruel/panicparse/stack/stack.go deleted file mode 100644 index cfb502e6639a..000000000000 --- a/vendor/github.com/maruel/panicparse/stack/stack.go +++ /dev/null @@ -1,832 +0,0 @@ -// Copyright 2015 Marc-Antoine Ruel. All rights reserved. -// Use of this source code is governed under the Apache License, Version 2.0 -// that can be found in the LICENSE file. - -// Package stack analyzes stack dump of Go processes and simplifies it. -// -// It is mostly useful on servers will large number of identical goroutines, -// making the crash dump harder to read than strictly necesary. -package stack - -import ( - "bufio" - "bytes" - "errors" - "fmt" - "io" - "math" - "net/url" - "os" - "path/filepath" - "regexp" - "runtime" - "sort" - "strconv" - "strings" - "unicode" - "unicode/utf8" -) - -const lockedToThread = "locked to thread" - -var ( - // TODO(maruel): Handle corrupted stack cases: - // - missed stack barrier - // - found next stack barrier at 0x123; expected - // - runtime: unexpected return pc for FUNC_NAME called from 0x123 - - reRoutineHeader = regexp.MustCompile("^goroutine (\\d+) \\[([^\\]]+)\\]\\:\n$") - reMinutes = regexp.MustCompile("^(\\d+) minutes$") - reUnavail = regexp.MustCompile("^(?:\t| +)goroutine running on other thread; stack unavailable") - // See gentraceback() in src/runtime/traceback.go for more information. - // - Sometimes the source file comes up as "". It is the - // compiler than generated these, not the runtime. - // - The tab may be replaced with spaces when a user copy-paste it, handle - // this transparently. - // - "runtime.gopanic" is explicitly replaced with "panic" by gentraceback(). - // - The +0x123 byte offset is printed when frame.pc > _func.entry. _func is - // generated by the linker. - // - The +0x123 byte offset is not included with generated code, e.g. unnamed - // functions "func·006()" which is generally go func() { ... }() - // statements. Since the _func is generated at runtime, it's probably why - // _func.entry is not set. - // - C calls may have fp=0x123 sp=0x123 appended. I think it normally happens - // when a signal is not correctly handled. It is printed with m.throwing>0. - // These are discarded. - // - For cgo, the source file may be "??". - reFile = regexp.MustCompile("^(?:\t| +)(\\?\\?|\\|.+\\.(?:c|go|s))\\:(\\d+)(?:| \\+0x[0-9a-f]+)(?:| fp=0x[0-9a-f]+ sp=0x[0-9a-f]+)\n$") - // Sadly, it doesn't note the goroutine number so we could cascade them per - // parenthood. - reCreated = regexp.MustCompile("^created by (.+)\n$") - reFunc = regexp.MustCompile("^(.+)\\((.*)\\)\n$") - reElided = regexp.MustCompile("^\\.\\.\\.additional frames elided\\.\\.\\.\n$") - // Include frequent GOROOT value on Windows, distro provided and user - // installed path. This simplifies the user's life when processing a trace - // generated on another VM. - // TODO(maruel): Guess the path automatically via traces containing the - // 'runtime' package, which is very frequent. This would be "less bad" than - // throwing up random values at the parser. - goroots = []string{runtime.GOROOT(), "c:/go", "/usr/lib/go", "/usr/local/go"} -) - -// Similarity is the level at which two call lines arguments must match to be -// considered similar enough to coalesce them. -type Similarity int - -const ( - // ExactFlags requires same bits (e.g. Locked). - ExactFlags Similarity = iota - // ExactLines requests the exact same arguments on the call line. - ExactLines - // AnyPointer considers different pointers a similar call line. - AnyPointer - // AnyValue accepts any value as similar call line. - AnyValue -) - -// Function is a function call. -// -// Go stack traces print a mangled function call, this wrapper unmangle the -// string before printing and adds other filtering methods. -type Function struct { - Raw string -} - -// String is the fully qualified function name. -// -// Sadly Go is a bit confused when the package name doesn't match the directory -// containing the source file and will use the directory name instead of the -// real package name. -func (f Function) String() string { - s, _ := url.QueryUnescape(f.Raw) - return s -} - -// Name is the naked function name. -func (f Function) Name() string { - parts := strings.SplitN(filepath.Base(f.Raw), ".", 2) - if len(parts) == 1 { - return parts[0] - } - return parts[1] -} - -// PkgName is the package name for this function reference. -func (f Function) PkgName() string { - parts := strings.SplitN(filepath.Base(f.Raw), ".", 2) - if len(parts) == 1 { - return "" - } - s, _ := url.QueryUnescape(parts[0]) - return s -} - -// PkgDotName returns "." format. -func (f Function) PkgDotName() string { - parts := strings.SplitN(filepath.Base(f.Raw), ".", 2) - s, _ := url.QueryUnescape(parts[0]) - if len(parts) == 1 { - return parts[0] - } - if s != "" || parts[1] != "" { - return s + "." + parts[1] - } - return "" -} - -// IsExported returns true if the function is exported. -func (f Function) IsExported() bool { - name := f.Name() - parts := strings.Split(name, ".") - r, _ := utf8.DecodeRuneInString(parts[len(parts)-1]) - if unicode.ToUpper(r) == r { - return true - } - return f.PkgName() == "main" && name == "main" -} - -// Arg is an argument on a Call. -type Arg struct { - Value uint64 // Value is the raw value as found in the stack trace - Name string // Name is a pseudo name given to the argument -} - -// IsPtr returns true if we guess it's a pointer. It's only a guess, it can be -// easily be confused by a bitmask. -func (a *Arg) IsPtr() bool { - // Assumes all pointers are above 16Mb and positive. - return a.Value > 16*1024*1024 && a.Value < math.MaxInt64 -} - -func (a Arg) String() string { - if a.Name != "" { - return a.Name - } - if a.Value == 0 { - return "0" - } - return fmt.Sprintf("0x%x", a.Value) -} - -// Args is a series of function call arguments. -type Args struct { - Values []Arg // Values is the arguments as shown on the stack trace. They are mangled via simplification. - Processed []string // Processed is the arguments generated from processing the source files. It can have a length lower than Values. - Elided bool // If set, it means there was a trailing ", ..." -} - -func (a Args) String() string { - var v []string - if len(a.Processed) != 0 { - v = make([]string, 0, len(a.Processed)) - for _, item := range a.Processed { - v = append(v, item) - } - } else { - v = make([]string, 0, len(a.Values)) - for _, item := range a.Values { - v = append(v, item.String()) - } - } - if a.Elided { - v = append(v, "...") - } - return strings.Join(v, ", ") -} - -// Equal returns true only if both arguments are exactly equal. -func (a *Args) Equal(r *Args) bool { - if a.Elided != r.Elided || len(a.Values) != len(r.Values) { - return false - } - for i, l := range a.Values { - if l != r.Values[i] { - return false - } - } - return true -} - -// Similar returns true if the two Args are equal or almost but not quite -// equal. -func (a *Args) Similar(r *Args, similar Similarity) bool { - if a.Elided != r.Elided || len(a.Values) != len(r.Values) { - return false - } - if similar == AnyValue { - return true - } - for i, l := range a.Values { - switch similar { - case ExactFlags, ExactLines: - if l != r.Values[i] { - return false - } - default: - if l.IsPtr() != r.Values[i].IsPtr() || (!l.IsPtr() && l != r.Values[i]) { - return false - } - } - } - return true -} - -// Merge merges two similar Args, zapping out differences. -func (a *Args) Merge(r *Args) Args { - out := Args{ - Values: make([]Arg, len(a.Values)), - Elided: a.Elided, - } - for i, l := range a.Values { - if l != r.Values[i] { - out.Values[i].Name = "*" - out.Values[i].Value = l.Value - } else { - out.Values[i] = l - } - } - return out -} - -// Call is an item in the stack trace. -type Call struct { - SourcePath string // Full path name of the source file - Line int // Line number - Func Function // Fully qualified function name (encoded). - Args Args // Call arguments -} - -// Equal returns true only if both calls are exactly equal. -func (c *Call) Equal(r *Call) bool { - return c.SourcePath == r.SourcePath && c.Line == r.Line && c.Func == r.Func && c.Args.Equal(&r.Args) -} - -// Similar returns true if the two Call are equal or almost but not quite -// equal. -func (c *Call) Similar(r *Call, similar Similarity) bool { - return c.SourcePath == r.SourcePath && c.Line == r.Line && c.Func == r.Func && c.Args.Similar(&r.Args, similar) -} - -// Merge merges two similar Call, zapping out differences. -func (c *Call) Merge(r *Call) Call { - return Call{ - SourcePath: c.SourcePath, - Line: c.Line, - Func: c.Func, - Args: c.Args.Merge(&r.Args), - } -} - -// SourceName returns the base file name of the source file. -func (c *Call) SourceName() string { - return filepath.Base(c.SourcePath) -} - -// SourceLine returns "source.go:line", including only the base file name. -func (c *Call) SourceLine() string { - return fmt.Sprintf("%s:%d", c.SourceName(), c.Line) -} - -// FullSourceLine returns "/path/to/source.go:line". -func (c *Call) FullSourceLine() string { - return fmt.Sprintf("%s:%d", c.SourcePath, c.Line) -} - -// PkgSource is one directory plus the file name of the source file. -func (c *Call) PkgSource() string { - return filepath.Join(filepath.Base(filepath.Dir(c.SourcePath)), c.SourceName()) -} - -const testMainSource = "_test" + string(os.PathSeparator) + "_testmain.go" - -// IsStdlib returns true if it is a Go standard library function. This includes -// the 'go test' generated main executable. -func (c *Call) IsStdlib() bool { - for _, goroot := range goroots { - if strings.HasPrefix(c.SourcePath, goroot) { - return true - } - } - // Consider _test/_testmain.go as stdlib since it's injected by "go test". - return c.PkgSource() == testMainSource -} - -// IsPkgMain returns true if it is in the main package. -func (c *Call) IsPkgMain() bool { - return c.Func.PkgName() == "main" -} - -// Stack is a call stack. -type Stack struct { - Calls []Call // Call stack. First is original function, last is leaf function. - Elided bool // Happens when there's >100 items in Stack, currently hardcoded in package runtime. -} - -// Equal returns true on if both call stacks are exactly equal. -func (s *Stack) Equal(r *Stack) bool { - if len(s.Calls) != len(r.Calls) || s.Elided != r.Elided { - return false - } - for i := range s.Calls { - if !s.Calls[i].Equal(&r.Calls[i]) { - return false - } - } - return true -} - -// Similar returns true if the two Stack are equal or almost but not quite -// equal. -func (s *Stack) Similar(r *Stack, similar Similarity) bool { - if len(s.Calls) != len(r.Calls) || s.Elided != r.Elided { - return false - } - for i := range s.Calls { - if !s.Calls[i].Similar(&r.Calls[i], similar) { - return false - } - } - return true -} - -// Merge merges two similar Stack, zapping out differences. -func (s *Stack) Merge(r *Stack) *Stack { - // Assumes similar stacks have the same length. - out := &Stack{ - Calls: make([]Call, len(s.Calls)), - Elided: s.Elided, - } - for i := range s.Calls { - out.Calls[i] = s.Calls[i].Merge(&r.Calls[i]) - } - return out -} - -// Less compares two Stack, where the ones that are less are more -// important, so they come up front. A Stack with more private functions is -// 'less' so it is at the top. Inversely, a Stack with only public -// functions is 'more' so it is at the bottom. -func (s *Stack) Less(r *Stack) bool { - lStdlib := 0 - lPrivate := 0 - for _, c := range s.Calls { - if c.IsStdlib() { - lStdlib++ - } else { - lPrivate++ - } - } - rStdlib := 0 - rPrivate := 0 - for _, s := range r.Calls { - if s.IsStdlib() { - rStdlib++ - } else { - rPrivate++ - } - } - if lPrivate > rPrivate { - return true - } - if lPrivate < rPrivate { - return false - } - if lStdlib > rStdlib { - return false - } - if lStdlib < rStdlib { - return true - } - - // Stack lengths are the same. - for x := range s.Calls { - if s.Calls[x].Func.Raw < r.Calls[x].Func.Raw { - return true - } - if s.Calls[x].Func.Raw > r.Calls[x].Func.Raw { - return true - } - if s.Calls[x].PkgSource() < r.Calls[x].PkgSource() { - return true - } - if s.Calls[x].PkgSource() > r.Calls[x].PkgSource() { - return true - } - if s.Calls[x].Line < r.Calls[x].Line { - return true - } - if s.Calls[x].Line > r.Calls[x].Line { - return true - } - } - return false -} - -// Signature represents the signature of one or multiple goroutines. -// -// It is effectively the stack trace plus the goroutine internal bits, like -// it's state, if it is thread locked, which call site created this goroutine, -// etc. -type Signature struct { - // Use git grep 'gopark(|unlock)\(' to find them all plus everything listed - // in runtime/traceback.go. Valid values includes: - // - chan send, chan receive, select - // - finalizer wait, mark wait (idle), - // - Concurrent GC wait, GC sweep wait, force gc (idle) - // - IO wait, panicwait - // - semacquire, semarelease - // - sleep, timer goroutine (idle) - // - trace reader (blocked) - // Stuck cases: - // - chan send (nil chan), chan receive (nil chan), select (no cases) - // Runnable states: - // - idle, runnable, running, syscall, waiting, dead, enqueue, copystack, - // Scan states: - // - scan, scanrunnable, scanrunning, scansyscall, scanwaiting, scandead, - // scanenqueue - State string - CreatedBy Call // Which other goroutine which created this one. - SleepMin int // Wait time in minutes, if applicable. - SleepMax int // Wait time in minutes, if applicable. - Stack Stack - Locked bool // Locked to an OS thread. -} - -// Equal returns true only if both signatures are exactly equal. -func (s *Signature) Equal(r *Signature) bool { - if s.State != r.State || !s.CreatedBy.Equal(&r.CreatedBy) || s.Locked != r.Locked || s.SleepMin != r.SleepMin || s.SleepMax != r.SleepMax { - return false - } - return s.Stack.Equal(&r.Stack) -} - -// Similar returns true if the two Signature are equal or almost but not quite -// equal. -func (s *Signature) Similar(r *Signature, similar Similarity) bool { - if s.State != r.State || !s.CreatedBy.Similar(&r.CreatedBy, similar) { - return false - } - if similar == ExactFlags && s.Locked != r.Locked { - return false - } - return s.Stack.Similar(&r.Stack, similar) -} - -// Merge merges two similar Signature, zapping out differences. -func (s *Signature) Merge(r *Signature) *Signature { - min := s.SleepMin - if r.SleepMin < min { - min = r.SleepMin - } - max := s.SleepMax - if r.SleepMax > max { - max = r.SleepMax - } - return &Signature{ - State: s.State, // Drop right side. - CreatedBy: s.CreatedBy, // Drop right side. - SleepMin: min, - SleepMax: max, - Stack: *s.Stack.Merge(&r.Stack), - Locked: s.Locked || r.Locked, // TODO(maruel): This is weirdo. - } -} - -// Less compares two Signature, where the ones that are less are more -// important, so they come up front. A Signature with more private functions is -// 'less' so it is at the top. Inversely, a Signature with only public -// functions is 'more' so it is at the bottom. -func (s *Signature) Less(r *Signature) bool { - if s.Stack.Less(&r.Stack) { - return true - } - if r.Stack.Less(&s.Stack) { - return false - } - if s.Locked && !r.Locked { - return true - } - if r.Locked && !s.Locked { - return false - } - if s.State < r.State { - return true - } - if s.State > r.State { - return false - } - return false -} - -// Goroutine represents the state of one goroutine, including the stack trace. -type Goroutine struct { - Signature // It's stack trace, internal bits, state, which call site created it, etc. - ID int // Goroutine ID. - First bool // First is the goroutine first printed, normally the one that crashed. -} - -// Bucketize returns the number of similar goroutines. -func Bucketize(goroutines []Goroutine, similar Similarity) map[*Signature][]Goroutine { - out := map[*Signature][]Goroutine{} - // O(n²). Fix eventually. - for _, routine := range goroutines { - found := false - for key := range out { - // When a match is found, this effectively drops the other goroutine ID. - if key.Similar(&routine.Signature, similar) { - found = true - if !key.Equal(&routine.Signature) { - // Almost but not quite equal. There's different pointers passed - // around but the same values. Zap out the different values. - newKey := key.Merge(&routine.Signature) - out[newKey] = append(out[key], routine) - delete(out, key) - } else { - out[key] = append(out[key], routine) - } - break - } - } - if !found { - key := &Signature{} - *key = routine.Signature - out[key] = []Goroutine{routine} - } - } - return out -} - -// Bucket is a stack trace signature and the list of goroutines that fits this -// signature. -type Bucket struct { - Signature - Routines []Goroutine -} - -// First returns true if it contains the first goroutine, e.g. the ones that -// likely generated the panic() call, if any. -func (b *Bucket) First() bool { - for _, r := range b.Routines { - if r.First { - return true - } - } - return false -} - -// Less does reverse sort. -func (b *Bucket) Less(r *Bucket) bool { - if b.First() { - return true - } - if r.First() { - return false - } - return b.Signature.Less(&r.Signature) -} - -// Buckets is a list of Bucket sorted by repeation count. -type Buckets []Bucket - -func (b Buckets) Len() int { - return len(b) -} - -func (b Buckets) Less(i, j int) bool { - return b[i].Less(&b[j]) -} - -func (b Buckets) Swap(i, j int) { - b[j], b[i] = b[i], b[j] -} - -// SortBuckets creates a list of Bucket from each goroutine stack trace count. -func SortBuckets(buckets map[*Signature][]Goroutine) Buckets { - out := make(Buckets, 0, len(buckets)) - for signature, count := range buckets { - out = append(out, Bucket{*signature, count}) - } - sort.Sort(out) - return out -} - -// scanLines is similar to bufio.ScanLines except that it: -// - doesn't drop '\n' -// - doesn't strip '\r' -// - returns when the data is bufio.MaxScanTokenSize bytes -func scanLines(data []byte, atEOF bool) (advance int, token []byte, err error) { - if atEOF && len(data) == 0 { - return 0, nil, nil - } - if i := bytes.IndexByte(data, '\n'); i >= 0 { - return i + 1, data[0 : i+1], nil - } - if atEOF { - return len(data), data, nil - } - if len(data) >= bufio.MaxScanTokenSize { - // Returns the line even if it is not at EOF nor has a '\n', otherwise the - // scanner will return bufio.ErrTooLong which is definitely not what we - // want. - return len(data), data, nil - } - return 0, nil, nil -} - -// ParseDump processes the output from runtime.Stack(). -// -// It supports piping from another command and assumes there is junk before the -// actual stack trace. The junk is streamed to out. -func ParseDump(r io.Reader, out io.Writer) ([]Goroutine, error) { - goroutines := make([]Goroutine, 0, 16) - var goroutine *Goroutine - scanner := bufio.NewScanner(r) - scanner.Split(scanLines) - // TODO(maruel): Use a formal state machine. Patterns follows: - // - reRoutineHeader - // Either: - // - reUnavail - // - reFunc + reFile in a loop - // - reElided - // Optionally ends with: - // - reCreated + reFile - // Between each goroutine stack dump: an empty line - created := false - // firstLine is the first line after the reRoutineHeader header line. - firstLine := false - for scanner.Scan() { - line := scanner.Text() - if line == "\n" { - if goroutine != nil { - goroutine = nil - continue - } - } else if line[len(line)-1] == '\n' { - if goroutine == nil { - if match := reRoutineHeader.FindStringSubmatch(line); match != nil { - if id, err := strconv.Atoi(match[1]); err == nil { - // See runtime/traceback.go. - // ", \d+ minutes, locked to thread" - items := strings.Split(match[2], ", ") - sleep := 0 - locked := false - for i := 1; i < len(items); i++ { - if items[i] == lockedToThread { - locked = true - continue - } - // Look for duration, if any. - if match2 := reMinutes.FindStringSubmatch(items[i]); match2 != nil { - sleep, _ = strconv.Atoi(match2[1]) - } - } - goroutines = append(goroutines, Goroutine{ - Signature: Signature{ - State: items[0], - SleepMin: sleep, - SleepMax: sleep, - Locked: locked, - }, - ID: id, - First: len(goroutines) == 0, - }) - goroutine = &goroutines[len(goroutines)-1] - firstLine = true - continue - } - } - } else { - if firstLine { - firstLine = false - if match := reUnavail.FindStringSubmatch(line); match != nil { - // Generate a fake stack entry. - goroutine.Stack.Calls = []Call{{SourcePath: ""}} - continue - } - } - - if match := reFile.FindStringSubmatch(line); match != nil { - // Triggers after a reFunc or a reCreated. - num, err := strconv.Atoi(match[2]) - if err != nil { - return goroutines, fmt.Errorf("failed to parse int on line: \"%s\"", line) - } - if created { - created = false - goroutine.CreatedBy.SourcePath = match[1] - goroutine.CreatedBy.Line = num - } else { - i := len(goroutine.Stack.Calls) - 1 - if i < 0 { - return goroutines, errors.New("unexpected order") - } - goroutine.Stack.Calls[i].SourcePath = match[1] - goroutine.Stack.Calls[i].Line = num - } - continue - } - - if match := reCreated.FindStringSubmatch(line); match != nil { - created = true - goroutine.CreatedBy.Func.Raw = match[1] - continue - } - - if match := reFunc.FindStringSubmatch(line); match != nil { - args := Args{} - for _, a := range strings.Split(match[2], ", ") { - if a == "..." { - args.Elided = true - continue - } - if a == "" { - // Remaining values were dropped. - break - } - v, err := strconv.ParseUint(a, 0, 64) - if err != nil { - return goroutines, fmt.Errorf("failed to parse int on line: \"%s\"", line) - } - args.Values = append(args.Values, Arg{Value: v}) - } - goroutine.Stack.Calls = append(goroutine.Stack.Calls, Call{Func: Function{match[1]}, Args: args}) - continue - } - - if match := reElided.FindStringSubmatch(line); match != nil { - goroutine.Stack.Elided = true - continue - } - } - } - _, _ = io.WriteString(out, line) - goroutine = nil - } - nameArguments(goroutines) - return goroutines, scanner.Err() -} - -// Private stuff. - -func nameArguments(goroutines []Goroutine) { - // Set a name for any pointer occuring more than once. - type object struct { - args []*Arg - inPrimary bool - id int - } - objects := map[uint64]object{} - // Enumerate all the arguments. - for i := range goroutines { - for j := range goroutines[i].Stack.Calls { - for k := range goroutines[i].Stack.Calls[j].Args.Values { - arg := goroutines[i].Stack.Calls[j].Args.Values[k] - if arg.IsPtr() { - objects[arg.Value] = object{ - args: append(objects[arg.Value].args, &goroutines[i].Stack.Calls[j].Args.Values[k]), - inPrimary: objects[arg.Value].inPrimary || i == 0, - } - } - } - } - // CreatedBy.Args is never set. - } - order := uint64Slice{} - for k, obj := range objects { - if len(obj.args) > 1 && obj.inPrimary { - order = append(order, k) - } - } - sort.Sort(order) - nextID := 1 - for _, k := range order { - for _, arg := range objects[k].args { - arg.Name = fmt.Sprintf("#%d", nextID) - } - nextID++ - } - - // Now do the rest. This is done so the output is deterministic. - order = uint64Slice{} - for k := range objects { - order = append(order, k) - } - sort.Sort(order) - for _, k := range order { - // Process the remaining pointers, they were not referenced by primary - // thread so will have higher IDs. - if objects[k].inPrimary { - continue - } - for _, arg := range objects[k].args { - arg.Name = fmt.Sprintf("#%d", nextID) - } - nextID++ - } -} - -type uint64Slice []uint64 - -func (a uint64Slice) Len() int { return len(a) } -func (a uint64Slice) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a uint64Slice) Less(i, j int) bool { return a[i] < a[j] } diff --git a/vendor/github.com/maruel/panicparse/stack/ui.go b/vendor/github.com/maruel/panicparse/stack/ui.go deleted file mode 100644 index b125fc940687..000000000000 --- a/vendor/github.com/maruel/panicparse/stack/ui.go +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2016 Marc-Antoine Ruel. All rights reserved. -// Use of this source code is governed under the Apache License, Version 2.0 -// that can be found in the LICENSE file. - -package stack - -import ( - "fmt" - "strings" -) - -// Palette defines the color used. -// -// An empty object Palette{} can be used to disable coloring. -type Palette struct { - EOLReset string - - // Routine header. - RoutineFirst string // The first routine printed. - Routine string // Following routines. - CreatedBy string - - // Call line. - Package string - SourceFile string - FunctionStdLib string - FunctionStdLibExported string - FunctionMain string - FunctionOther string - FunctionOtherExported string - Arguments string -} - -// CalcLengths returns the maximum length of the source lines and package names. -func CalcLengths(buckets Buckets, fullPath bool) (int, int) { - srcLen := 0 - pkgLen := 0 - for _, bucket := range buckets { - for _, line := range bucket.Signature.Stack.Calls { - l := 0 - if fullPath { - l = len(line.FullSourceLine()) - } else { - l = len(line.SourceLine()) - } - if l > srcLen { - srcLen = l - } - l = len(line.Func.PkgName()) - if l > pkgLen { - pkgLen = l - } - } - } - return srcLen, pkgLen -} - -// functionColor returns the color to be used for the function name based on -// the type of package the function is in. -func (p *Palette) functionColor(line *Call) string { - if line.IsStdlib() { - if line.Func.IsExported() { - return p.FunctionStdLibExported - } - return p.FunctionStdLib - } else if line.IsPkgMain() { - return p.FunctionMain - } else if line.Func.IsExported() { - return p.FunctionOtherExported - } - return p.FunctionOther -} - -// routineColor returns the color for the header of the goroutines bucket. -func (p *Palette) routineColor(bucket *Bucket, multipleBuckets bool) string { - if bucket.First() && multipleBuckets { - return p.RoutineFirst - } - return p.Routine -} - -// BucketHeader prints the header of a goroutine signature. -func (p *Palette) BucketHeader(bucket *Bucket, fullPath, multipleBuckets bool) string { - extra := "" - if bucket.SleepMax != 0 { - if bucket.SleepMin != bucket.SleepMax { - extra += fmt.Sprintf(" [%d~%d minutes]", bucket.SleepMin, bucket.SleepMax) - } else { - extra += fmt.Sprintf(" [%d minutes]", bucket.SleepMax) - } - } - if bucket.Locked { - extra += " [locked]" - } - created := bucket.CreatedBy.Func.PkgDotName() - if created != "" { - created += " @ " - if fullPath { - created += bucket.CreatedBy.FullSourceLine() - } else { - created += bucket.CreatedBy.SourceLine() - } - extra += p.CreatedBy + " [Created by " + created + "]" - } - return fmt.Sprintf( - "%s%d: %s%s%s\n", - p.routineColor(bucket, multipleBuckets), len(bucket.Routines), - bucket.State, extra, - p.EOLReset) -} - -// callLine prints one stack line. -func (p *Palette) callLine(line *Call, srcLen, pkgLen int, fullPath bool) string { - src := "" - if fullPath { - src = line.FullSourceLine() - } else { - src = line.SourceLine() - } - return fmt.Sprintf( - " %s%-*s %s%-*s %s%s%s(%s)%s", - p.Package, pkgLen, line.Func.PkgName(), - p.SourceFile, srcLen, src, - p.functionColor(line), line.Func.Name(), - p.Arguments, line.Args, - p.EOLReset) -} - -// StackLines prints one complete stack trace, without the header. -func (p *Palette) StackLines(signature *Signature, srcLen, pkgLen int, fullPath bool) string { - out := make([]string, len(signature.Stack.Calls)) - for i := range signature.Stack.Calls { - out[i] = p.callLine(&signature.Stack.Calls[i], srcLen, pkgLen, fullPath) - } - if signature.Stack.Elided { - out = append(out, " (...)") - } - return strings.Join(out, "\n") + "\n" -} diff --git a/vendor/github.com/maruel/panicparse/vendor.yml b/vendor/github.com/maruel/panicparse/vendor.yml deleted file mode 100644 index ff3d43f5f2d7..000000000000 --- a/vendor/github.com/maruel/panicparse/vendor.yml +++ /dev/null @@ -1,17 +0,0 @@ -vendors: -- path: github.com/kr/pretty - rev: 737b74a46c4bf788349f72cb256fed10aea4d0ac -- path: github.com/kr/text - rev: 7cafcd837844e784b526369c9bce262804aebc60 -- path: github.com/maruel/ut - rev: a9c9f15ccfa6f8b90182a53df32f4745586fbae3 -- path: github.com/mattn/go-colorable - rev: 9056b7a9f2d1f2d96498d6d146acd1f9d5ed3d59 -- path: github.com/mattn/go-isatty - rev: 56b76bdf51f7708750eac80fa38b952bb9f32639 -- path: github.com/mgutz/ansi - rev: c286dcecd19ff979eeb73ea444e479b903f2cfcb -- path: github.com/pmezard/go-difflib - rev: 792786c7400a136282c1664665ae0a8db921c6c2 -- path: golang.org/x/sys - rev: a646d33e2ee3172a661fc09bca23bb4889a41bc8 diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go new file mode 100644 index 000000000000..1f28d773d748 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_appengine.go @@ -0,0 +1,29 @@ +// +build appengine + +package colorable + +import ( + "io" + "os" + + _ "github.com/mattn/go-isatty" +) + +// NewColorable return new instance of Writer which handle escape sequence. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + return file +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return os.Stdout +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return os.Stderr +} diff --git a/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go b/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go new file mode 100644 index 000000000000..b2ff9147b926 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/GetProxyFunc.go @@ -0,0 +1,11 @@ +package ieproxy + +import ( + "net/http" + "net/url" +) + +// GetProxyFunc is a forwarder for the OS-Exclusive proxyMiddleman_os.go files +func GetProxyFunc() func(*http.Request) (*url.URL, error) { + return proxyMiddleman() +} diff --git a/vendor/github.com/codahale/hdrhistogram/LICENSE b/vendor/github.com/mattn/go-ieproxy/LICENSE similarity index 83% rename from vendor/github.com/codahale/hdrhistogram/LICENSE rename to vendor/github.com/mattn/go-ieproxy/LICENSE index f9835c241fc4..7b7c0f855af7 100644 --- a/vendor/github.com/codahale/hdrhistogram/LICENSE +++ b/vendor/github.com/mattn/go-ieproxy/LICENSE @@ -1,6 +1,8 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2014 Coda Hale +Copyright (c) 2014 mattn +Copyright (c) 2017 oliverpool +Copyright (c) 2019 Adele Reed Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9,13 +11,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/mattn/go-ieproxy/README.md b/vendor/github.com/mattn/go-ieproxy/README.md new file mode 100644 index 000000000000..fbc801ae5d1a --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/README.md @@ -0,0 +1,49 @@ +# ieproxy + +Go package to detect the proxy settings on Windows platform. + +The settings are initially attempted to be read from the [`WinHttpGetIEProxyConfigForCurrentUser` DLL call](https://docs.microsoft.com/en-us/windows/desktop/api/winhttp/nf-winhttp-winhttpgetieproxyconfigforcurrentuser), but falls back to the registry (`CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings`) in the event the DLL call fails. + +For more information, take a look at the [documentation](https://godoc.org/github.com/mattn/go-ieproxy) + +## Methods + +You can either obtain a `net/http` compatible proxy function using `ieproxy.GetProxyFunc()`, set environment variables using `ieproxy.OverrideEnvWithStaticProxy()` (though no automatic configuration is available this way), or obtain the proxy settings via `ieproxy.GetConf()`. + +| Method | Supported configuration options: | +|----------------------------------------|-----------------------------------------------| +| `ieproxy.GetProxyFunc()` | Static, Specified script, and fully automatic | +| `ieproxy.OverrideEnvWithStaticProxy()` | Static | +| `ieproxy.GetConf()` | Depends on how you use it | + +## Examples + +### Using GetProxyFunc(): + +```go +func init() { + http.DefaultTransport.(*http.Transport).Proxy = ieproxy.GetProxyFunc() +} +``` + +GetProxyFunc acts as a middleman between `net/http` and `mattn/go-ieproxy` in order to select the correct proxy configuration based off the details supplied in the config. + +### Using OverrideEnvWithStaticProxy(): + +```go +func init() { + ieproxy.OverrideEnvWithStaticProxy() + http.DefaultTransport.(*http.Transport).Proxy = http.ProxyFromEnvironment +} +``` + +OverrideEnvWithStaticProxy overrides the relevant environment variables (`HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY`) with the **static, manually configured** proxy details typically found in the registry. + +### Using GetConf(): + +```go +func main() { + conf := ieproxy.GetConf() + //Handle proxies how you want to. +} +``` diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy.go b/vendor/github.com/mattn/go-ieproxy/ieproxy.go new file mode 100644 index 000000000000..51fe18e3dbed --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy.go @@ -0,0 +1,51 @@ +// Package ieproxy is a utility to retrieve the proxy parameters (especially of Internet Explorer on windows) +// +// On windows, it gathers the parameters from the registry (regedit), while it uses env variable on other platforms +package ieproxy + +import "os" + +// ProxyConf gathers the configuration for proxy +type ProxyConf struct { + Static StaticProxyConf // static configuration + Automatic ProxyScriptConf // script configuration +} + +// StaticProxyConf contains the configuration for static proxy +type StaticProxyConf struct { + // Is the proxy active? + Active bool + // Proxy address for each scheme (http, https) + // "" (empty string) is the fallback proxy + Protocols map[string]string + // Addresses not to be browsed via the proxy (comma-separated, linux-like) + NoProxy string +} + +// ProxyScriptConf contains the configuration for automatic proxy +type ProxyScriptConf struct { + // Is the proxy active? + Active bool + // PreConfiguredURL of the .pac file. + // If this is empty and Active is true, auto-configuration should be assumed. + PreConfiguredURL string +} + +// GetConf retrieves the proxy configuration from the Windows Regedit +func GetConf() ProxyConf { + return getConf() +} + +// OverrideEnvWithStaticProxy writes new values to the +// `http_proxy`, `https_proxy` and `no_proxy` environment variables. +// The values are taken from the Windows Regedit (should be called in `init()` function - see example) +func OverrideEnvWithStaticProxy() { + overrideEnvWithStaticProxy(GetConf(), os.Setenv) +} + +// FindProxyForURL computes the proxy for a given URL according to the pac file +func (psc *ProxyScriptConf) FindProxyForURL(URL string) string { + return psc.findProxyForURL(URL) +} + +type envSetter func(string, string) error diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go b/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go new file mode 100644 index 000000000000..dc2bccfc2970 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy_unix.go @@ -0,0 +1,10 @@ +// +build !windows + +package ieproxy + +func getConf() ProxyConf { + return ProxyConf{} +} + +func overrideEnvWithStaticProxy(pc ProxyConf, setenv envSetter) { +} diff --git a/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go b/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go new file mode 100644 index 000000000000..a3d4c11c47e5 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/ieproxy_windows.go @@ -0,0 +1,164 @@ +package ieproxy + +import ( + "strings" + "sync" + "unsafe" + + "golang.org/x/sys/windows/registry" +) + +type regeditValues struct { + ProxyServer string + ProxyOverride string + ProxyEnable uint64 + AutoConfigURL string +} + +var once sync.Once +var windowsProxyConf ProxyConf + +// GetConf retrieves the proxy configuration from the Windows Regedit +func getConf() ProxyConf { + once.Do(writeConf) + return windowsProxyConf +} + +func writeConf() { + var ( + cfg *tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG + err error + ) + + if cfg, err = getUserConfigFromWindowsSyscall(); err != nil { + regedit, _ := readRegedit() // If the syscall fails, backup to manual detection. + windowsProxyConf = parseRegedit(regedit) + return + } + + defer globalFreeWrapper(cfg.lpszProxy) + defer globalFreeWrapper(cfg.lpszProxyBypass) + defer globalFreeWrapper(cfg.lpszAutoConfigUrl) + + windowsProxyConf = ProxyConf{ + Static: StaticProxyConf{ + Active: cfg.lpszProxy != nil, + }, + Automatic: ProxyScriptConf{ + Active: cfg.lpszAutoConfigUrl != nil || cfg.fAutoDetect, + }, + } + + if windowsProxyConf.Static.Active { + protocol := make(map[string]string) + for _, s := range strings.Split(StringFromUTF16Ptr(cfg.lpszProxy), ";") { + s = strings.TrimSpace(s) + if s == "" { + continue + } + pair := strings.SplitN(s, "=", 2) + if len(pair) > 1 { + protocol[pair[0]] = pair[1] + } else { + protocol[""] = pair[0] + } + } + + windowsProxyConf.Static.Protocols = protocol + if cfg.lpszProxyBypass != nil { + windowsProxyConf.Static.NoProxy = strings.Replace(StringFromUTF16Ptr(cfg.lpszProxyBypass), ";", ",", -1) + } + } + + if windowsProxyConf.Automatic.Active { + windowsProxyConf.Automatic.PreConfiguredURL = StringFromUTF16Ptr(cfg.lpszAutoConfigUrl) + } +} + +func getUserConfigFromWindowsSyscall() (*tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG, error) { + handle, _, err := winHttpOpen.Call(0, 0, 0, 0, 0) + if handle == 0 { + return &tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG{}, err + } + defer winHttpCloseHandle.Call(handle) + + config := new(tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG) + + ret, _, err := winHttpGetIEProxyConfigForCurrentUser.Call(uintptr(unsafe.Pointer(config))) + if ret > 0 { + err = nil + } + + return config, err +} + +// OverrideEnvWithStaticProxy writes new values to the +// http_proxy, https_proxy and no_proxy environment variables. +// The values are taken from the Windows Regedit (should be called in init() function) +func overrideEnvWithStaticProxy(conf ProxyConf, setenv envSetter) { + if conf.Static.Active { + for _, scheme := range []string{"http", "https"} { + url := mapFallback(scheme, "", conf.Static.Protocols) + setenv(scheme+"_proxy", url) + } + if conf.Static.NoProxy != "" { + setenv("no_proxy", conf.Static.NoProxy) + } + } +} + +func parseRegedit(regedit regeditValues) ProxyConf { + protocol := make(map[string]string) + for _, s := range strings.Split(regedit.ProxyServer, ";") { + if s == "" { + continue + } + pair := strings.SplitN(s, "=", 2) + if len(pair) > 1 { + protocol[pair[0]] = pair[1] + } else { + protocol[""] = pair[0] + } + } + + return ProxyConf{ + Static: StaticProxyConf{ + Active: regedit.ProxyEnable > 0, + Protocols: protocol, + NoProxy: strings.Replace(regedit.ProxyOverride, ";", ",", -1), // to match linux style + }, + Automatic: ProxyScriptConf{ + Active: regedit.AutoConfigURL != "", + PreConfiguredURL: regedit.AutoConfigURL, + }, + } +} + +func readRegedit() (values regeditValues, err error) { + k, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.QUERY_VALUE) + if err != nil { + return + } + defer k.Close() + + values.ProxyServer, _, err = k.GetStringValue("ProxyServer") + if err != nil && err != registry.ErrNotExist { + return + } + values.ProxyOverride, _, err = k.GetStringValue("ProxyOverride") + if err != nil && err != registry.ErrNotExist { + return + } + + values.ProxyEnable, _, err = k.GetIntegerValue("ProxyEnable") + if err != nil && err != registry.ErrNotExist { + return + } + + values.AutoConfigURL, _, err = k.GetStringValue("AutoConfigURL") + if err != nil && err != registry.ErrNotExist { + return + } + err = nil + return +} diff --git a/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go b/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go new file mode 100644 index 000000000000..cfb4349e23ea --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/kernel32_data_windows.go @@ -0,0 +1,15 @@ +package ieproxy + +import ( + "golang.org/x/sys/windows" + "unsafe" +) + +var kernel32 = windows.NewLazySystemDLL("kernel32.dll") +var globalFree = kernel32.NewProc("GlobalFree") + +func globalFreeWrapper(ptr *uint16) { + if ptr != nil { + _, _, _ = globalFree.Call(uintptr(unsafe.Pointer(ptr))) + } +} diff --git a/vendor/github.com/mattn/go-ieproxy/pac_unix.go b/vendor/github.com/mattn/go-ieproxy/pac_unix.go new file mode 100644 index 000000000000..d44ec3cca246 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/pac_unix.go @@ -0,0 +1,7 @@ +// +build !windows + +package ieproxy + +func (psc *ProxyScriptConf) findProxyForURL(URL string) string { + return "" +} diff --git a/vendor/github.com/mattn/go-ieproxy/pac_windows.go b/vendor/github.com/mattn/go-ieproxy/pac_windows.go new file mode 100644 index 000000000000..6a2ee677855f --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/pac_windows.go @@ -0,0 +1,72 @@ +package ieproxy + +import ( + "strings" + "syscall" + "unsafe" +) + +func (psc *ProxyScriptConf) findProxyForURL(URL string) string { + if !psc.Active { + return "" + } + proxy, _ := getProxyForURL(psc.PreConfiguredURL, URL) + i := strings.Index(proxy, ";") + if i >= 0 { + return proxy[:i] + } + return proxy +} + +func getProxyForURL(pacfileURL, URL string) (string, error) { + pacfileURLPtr, err := syscall.UTF16PtrFromString(pacfileURL) + if err != nil { + return "", err + } + URLPtr, err := syscall.UTF16PtrFromString(URL) + if err != nil { + return "", err + } + + handle, _, err := winHttpOpen.Call(0, 0, 0, 0, 0) + if handle == 0 { + return "", err + } + defer winHttpCloseHandle.Call(handle) + + dwFlags := fWINHTTP_AUTOPROXY_CONFIG_URL + dwAutoDetectFlags := autoDetectFlag(0) + pfURLptr := pacfileURLPtr + + if pacfileURL == "" { + dwFlags = fWINHTTP_AUTOPROXY_AUTO_DETECT + dwAutoDetectFlags = fWINHTTP_AUTO_DETECT_TYPE_DNS_A | fWINHTTP_AUTO_DETECT_TYPE_DHCP + pfURLptr = nil + } + + options := tWINHTTP_AUTOPROXY_OPTIONS{ + dwFlags: dwFlags, // adding cache might cause issues: https://github.com/mattn/go-ieproxy/issues/6 + dwAutoDetectFlags: dwAutoDetectFlags, + lpszAutoConfigUrl: pfURLptr, + lpvReserved: nil, + dwReserved: 0, + fAutoLogonIfChallenged: true, // may not be optimal https://msdn.microsoft.com/en-us/library/windows/desktop/aa383153(v=vs.85).aspx + } // lpszProxyBypass isn't used as this only executes in cases where there (may) be a pac file (autodetect can fail), where lpszProxyBypass couldn't be returned. + // in the case that autodetect fails and no pre-specified pacfile is present, no proxy is returned. + + info := new(tWINHTTP_PROXY_INFO) + + ret, _, err := winHttpGetProxyForURL.Call( + handle, + uintptr(unsafe.Pointer(URLPtr)), + uintptr(unsafe.Pointer(&options)), + uintptr(unsafe.Pointer(info)), + ) + if ret > 0 { + err = nil + } + + defer globalFreeWrapper(info.lpszProxyBypass) + defer globalFreeWrapper(info.lpszProxy) + return StringFromUTF16Ptr(info.lpszProxy), err +} diff --git a/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go new file mode 100644 index 000000000000..d0b16ec288c2 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_unix.go @@ -0,0 +1,13 @@ +// +build !windows + +package ieproxy + +import ( + "net/http" + "net/url" +) + +func proxyMiddleman() func(req *http.Request) (i *url.URL, e error) { + // Fallthrough to ProxyFromEnvironment on all other OSes. + return http.ProxyFromEnvironment +} diff --git a/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go new file mode 100644 index 000000000000..355d432c1418 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/proxyMiddleman_windows.go @@ -0,0 +1,51 @@ +package ieproxy + +import ( + "net/http" + "net/url" + + "golang.org/x/net/http/httpproxy" +) + +func proxyMiddleman() func(req *http.Request) (i *url.URL, e error) { + // Get the proxy configuration + conf := GetConf() + envcfg := httpproxy.FromEnvironment() + + if envcfg.HTTPProxy != "" || envcfg.HTTPSProxy != "" { + // If the user manually specifies environment variables, prefer those over the Windows config. + return http.ProxyFromEnvironment + } else if conf.Automatic.Active { + // If automatic proxy obtaining is specified + return func(req *http.Request) (i *url.URL, e error) { + host := conf.Automatic.FindProxyForURL(req.URL.String()) + if host == "" { + return nil, nil + } + return &url.URL{Host: host}, nil + } + } else if conf.Static.Active { + // If static proxy obtaining is specified + prox := httpproxy.Config{ + HTTPSProxy: mapFallback("https", "", conf.Static.Protocols), + HTTPProxy: mapFallback("http", "", conf.Static.Protocols), + NoProxy: conf.Static.NoProxy, + } + + return func(req *http.Request) (i *url.URL, e error) { + return prox.ProxyFunc()(req.URL) + } + } else { + // Final fallthrough case; use the environment variables. + return http.ProxyFromEnvironment + } +} + +// Return oKey or fbKey if oKey doesn't exist in the map. +func mapFallback(oKey, fbKey string, m map[string]string) string { + if v, ok := m[oKey]; ok { + return v + } else { + return m[fbKey] + } +} diff --git a/vendor/github.com/mattn/go-ieproxy/utils.go b/vendor/github.com/mattn/go-ieproxy/utils.go new file mode 100644 index 000000000000..353b231120a0 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/utils.go @@ -0,0 +1,23 @@ +package ieproxy + +import ( + "unicode/utf16" + "unsafe" +) + +// StringFromUTF16Ptr converts a *uint16 C string to a Go String +func StringFromUTF16Ptr(s *uint16) string { + if s == nil { + return "" + } + + p := (*[1<<30 - 1]uint16)(unsafe.Pointer(s)) + + // find the string length + sz := 0 + for p[sz] != 0 { + sz++ + } + + return string(utf16.Decode(p[:sz:sz])) +} diff --git a/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go b/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go new file mode 100644 index 000000000000..560940df88f4 --- /dev/null +++ b/vendor/github.com/mattn/go-ieproxy/winhttp_data_windows.go @@ -0,0 +1,50 @@ +package ieproxy + +import "golang.org/x/sys/windows" + +var winHttp = windows.NewLazySystemDLL("winhttp.dll") +var winHttpGetProxyForURL = winHttp.NewProc("WinHttpGetProxyForUrl") +var winHttpOpen = winHttp.NewProc("WinHttpOpen") +var winHttpCloseHandle = winHttp.NewProc("WinHttpCloseHandle") +var winHttpGetIEProxyConfigForCurrentUser = winHttp.NewProc("WinHttpGetIEProxyConfigForCurrentUser") + +type tWINHTTP_AUTOPROXY_OPTIONS struct { + dwFlags autoProxyFlag + dwAutoDetectFlags autoDetectFlag + lpszAutoConfigUrl *uint16 + lpvReserved *uint16 + dwReserved uint32 + fAutoLogonIfChallenged bool +} +type autoProxyFlag uint32 + +const ( + fWINHTTP_AUTOPROXY_AUTO_DETECT = autoProxyFlag(0x00000001) + fWINHTTP_AUTOPROXY_CONFIG_URL = autoProxyFlag(0x00000002) + fWINHTTP_AUTOPROXY_NO_CACHE_CLIENT = autoProxyFlag(0x00080000) + fWINHTTP_AUTOPROXY_NO_CACHE_SVC = autoProxyFlag(0x00100000) + fWINHTTP_AUTOPROXY_NO_DIRECTACCESS = autoProxyFlag(0x00040000) + fWINHTTP_AUTOPROXY_RUN_INPROCESS = autoProxyFlag(0x00010000) + fWINHTTP_AUTOPROXY_RUN_OUTPROCESS_ONLY = autoProxyFlag(0x00020000) + fWINHTTP_AUTOPROXY_SORT_RESULTS = autoProxyFlag(0x00400000) +) + +type autoDetectFlag uint32 + +const ( + fWINHTTP_AUTO_DETECT_TYPE_DHCP = autoDetectFlag(0x00000001) + fWINHTTP_AUTO_DETECT_TYPE_DNS_A = autoDetectFlag(0x00000002) +) + +type tWINHTTP_PROXY_INFO struct { + dwAccessType uint32 + lpszProxy *uint16 + lpszProxyBypass *uint16 +} + +type tWINHTTP_CURRENT_USER_IE_PROXY_CONFIG struct { + fAutoDetect bool + lpszAutoConfigUrl *uint16 + lpszProxy *uint16 + lpszProxyBypass *uint16 +} diff --git a/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md b/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md deleted file mode 100644 index 229851590442..000000000000 --- a/vendor/github.com/mitchellh/go-wordwrap/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/mitchellh/go-wordwrap/README.md b/vendor/github.com/mitchellh/go-wordwrap/README.md deleted file mode 100644 index 60ae3117008d..000000000000 --- a/vendor/github.com/mitchellh/go-wordwrap/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# go-wordwrap - -`go-wordwrap` (Golang package: `wordwrap`) is a package for Go that -automatically wraps words into multiple lines. The primary use case for this -is in formatting CLI output, but of course word wrapping is a generally useful -thing to do. - -## Installation and Usage - -Install using `go get github.com/mitchellh/go-wordwrap`. - -Full documentation is available at -http://godoc.org/github.com/mitchellh/go-wordwrap - -Below is an example of its usage ignoring errors: - -```go -wrapped := wordwrap.WrapString("foo bar baz", 3) -fmt.Println(wrapped) -``` - -Would output: - -``` -foo -bar -baz -``` - -## Word Wrap Algorithm - -This library doesn't use any clever algorithm for word wrapping. The wrapping -is actually very naive: whenever there is whitespace or an explicit linebreak. -The goal of this library is for word wrapping CLI output, so the input is -typically pretty well controlled human language. Because of this, the naive -approach typically works just fine. - -In the future, we'd like to make the algorithm more advanced. We would do -so without breaking the API. diff --git a/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go b/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go deleted file mode 100644 index ac67205bc2e5..000000000000 --- a/vendor/github.com/mitchellh/go-wordwrap/wordwrap.go +++ /dev/null @@ -1,73 +0,0 @@ -package wordwrap - -import ( - "bytes" - "unicode" -) - -// WrapString wraps the given string within lim width in characters. -// -// Wrapping is currently naive and only happens at white-space. A future -// version of the library will implement smarter wrapping. This means that -// pathological cases can dramatically reach past the limit, such as a very -// long word. -func WrapString(s string, lim uint) string { - // Initialize a buffer with a slightly larger size to account for breaks - init := make([]byte, 0, len(s)) - buf := bytes.NewBuffer(init) - - var current uint - var wordBuf, spaceBuf bytes.Buffer - - for _, char := range s { - if char == '\n' { - if wordBuf.Len() == 0 { - if current+uint(spaceBuf.Len()) > lim { - current = 0 - } else { - current += uint(spaceBuf.Len()) - spaceBuf.WriteTo(buf) - } - spaceBuf.Reset() - } else { - current += uint(spaceBuf.Len() + wordBuf.Len()) - spaceBuf.WriteTo(buf) - spaceBuf.Reset() - wordBuf.WriteTo(buf) - wordBuf.Reset() - } - buf.WriteRune(char) - current = 0 - } else if unicode.IsSpace(char) { - if spaceBuf.Len() == 0 || wordBuf.Len() > 0 { - current += uint(spaceBuf.Len() + wordBuf.Len()) - spaceBuf.WriteTo(buf) - spaceBuf.Reset() - wordBuf.WriteTo(buf) - wordBuf.Reset() - } - - spaceBuf.WriteRune(char) - } else { - - wordBuf.WriteRune(char) - - if current+uint(spaceBuf.Len()+wordBuf.Len()) > lim && uint(wordBuf.Len()) < lim { - buf.WriteRune('\n') - current = 0 - spaceBuf.Reset() - } - } - } - - if wordBuf.Len() == 0 { - if current+uint(spaceBuf.Len()) <= lim { - spaceBuf.WriteTo(buf) - } - } else { - spaceBuf.WriteTo(buf) - wordBuf.WriteTo(buf) - } - - return buf.String() -} diff --git a/vendor/github.com/nsf/termbox-go/AUTHORS b/vendor/github.com/nsf/termbox-go/AUTHORS deleted file mode 100644 index fe26fb0fb058..000000000000 --- a/vendor/github.com/nsf/termbox-go/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# Please keep this file sorted. - -Georg Reinke -nsf diff --git a/vendor/github.com/nsf/termbox-go/LICENSE b/vendor/github.com/nsf/termbox-go/LICENSE deleted file mode 100644 index d9bc068ce748..000000000000 --- a/vendor/github.com/nsf/termbox-go/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2012 termbox-go authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/nsf/termbox-go/README.md b/vendor/github.com/nsf/termbox-go/README.md deleted file mode 100644 index 4b2e73ccc13a..000000000000 --- a/vendor/github.com/nsf/termbox-go/README.md +++ /dev/null @@ -1,31 +0,0 @@ -## Termbox -Termbox is a library that provides a minimalistic API which allows the programmer to write text-based user interfaces. The library is crossplatform and has both terminal-based implementations on *nix operating systems and a winapi console based implementation for windows operating systems. The basic idea is an abstraction of the greatest common subset of features available on all major terminals and other terminal-like APIs in a minimalistic fashion. Small API means it is easy to implement, test, maintain and learn it, that's what makes the termbox a distinct library in its area. - -### Installation -Install and update this go package with `go get -u github.com/nsf/termbox-go` - -### Examples -For examples of what can be done take a look at demos in the _demos directory. You can try them with go run: `go run _demos/keyboard.go` - -There are also some interesting projects using termbox-go: - - [godit](https://github.com/nsf/godit) is an emacsish lightweight text editor written using termbox. - - [gomatrix](https://github.com/GeertJohan/gomatrix) connects to The Matrix and displays its data streams in your terminal. - - [gotetris](https://github.com/jjinux/gotetris) is an implementation of Tetris. - - [sokoban-go](https://github.com/rn2dy/sokoban-go) is an implementation of sokoban game. - - [hecate](https://github.com/evanmiller/hecate) is a hex editor designed by Satan. - - [httopd](https://github.com/verdverm/httopd) is top for httpd logs. - - [mop](https://github.com/michaeldv/mop) is stock market tracker for hackers. - - [termui](https://github.com/gizak/termui) is a terminal dashboard. - - [termloop](https://github.com/JoelOtter/termloop) is a terminal game engine. - - [xterm-color-chart](https://github.com/kutuluk/xterm-color-chart) is a XTerm 256 color chart. - - [gocui](https://github.com/jroimartin/gocui) is a minimalist Go library aimed at creating console user interfaces. - - [dry](https://github.com/moncho/dry) is an interactive cli to manage Docker containers. - - [pxl](https://github.com/ichinaski/pxl) displays images in the terminal. - - [snake-game](https://github.com/DyegoCosta/snake-game) is an implementation of the Snake game. - - [gone](https://github.com/guillaumebreton/gone) is a CLI pomodoro® timer. - - [Spoof.go](https://github.com/sabey/spoofgo) controllable movement spoofing from the cli - - [lf](https://github.com/gokcehan/lf) is a terminal file manager - - [rat](https://github.com/ericfreese/rat) lets you compose shell commands to build terminal applications. - -### API reference -[godoc.org/github.com/nsf/termbox-go](http://godoc.org/github.com/nsf/termbox-go) diff --git a/vendor/github.com/nsf/termbox-go/api.go b/vendor/github.com/nsf/termbox-go/api.go deleted file mode 100644 index b242ddcf3a23..000000000000 --- a/vendor/github.com/nsf/termbox-go/api.go +++ /dev/null @@ -1,457 +0,0 @@ -// +build !windows - -package termbox - -import "github.com/mattn/go-runewidth" -import "fmt" -import "os" -import "os/signal" -import "syscall" -import "runtime" - -// public API - -// Initializes termbox library. This function should be called before any other functions. -// After successful initialization, the library must be finalized using 'Close' function. -// -// Example usage: -// err := termbox.Init() -// if err != nil { -// panic(err) -// } -// defer termbox.Close() -func Init() error { - var err error - - out, err = os.OpenFile("/dev/tty", syscall.O_WRONLY, 0) - if err != nil { - return err - } - in, err = syscall.Open("/dev/tty", syscall.O_RDONLY, 0) - if err != nil { - return err - } - - err = setup_term() - if err != nil { - return fmt.Errorf("termbox: error while reading terminfo data: %v", err) - } - - signal.Notify(sigwinch, syscall.SIGWINCH) - signal.Notify(sigio, syscall.SIGIO) - - _, err = fcntl(in, syscall.F_SETFL, syscall.O_ASYNC|syscall.O_NONBLOCK) - if err != nil { - return err - } - _, err = fcntl(in, syscall.F_SETOWN, syscall.Getpid()) - if runtime.GOOS != "darwin" && err != nil { - return err - } - err = tcgetattr(out.Fd(), &orig_tios) - if err != nil { - return err - } - - tios := orig_tios - tios.Iflag &^= syscall_IGNBRK | syscall_BRKINT | syscall_PARMRK | - syscall_ISTRIP | syscall_INLCR | syscall_IGNCR | - syscall_ICRNL | syscall_IXON - tios.Lflag &^= syscall_ECHO | syscall_ECHONL | syscall_ICANON | - syscall_ISIG | syscall_IEXTEN - tios.Cflag &^= syscall_CSIZE | syscall_PARENB - tios.Cflag |= syscall_CS8 - tios.Cc[syscall_VMIN] = 1 - tios.Cc[syscall_VTIME] = 0 - - err = tcsetattr(out.Fd(), &tios) - if err != nil { - return err - } - - out.WriteString(funcs[t_enter_ca]) - out.WriteString(funcs[t_enter_keypad]) - out.WriteString(funcs[t_hide_cursor]) - out.WriteString(funcs[t_clear_screen]) - - termw, termh = get_term_size(out.Fd()) - back_buffer.init(termw, termh) - front_buffer.init(termw, termh) - back_buffer.clear() - front_buffer.clear() - - go func() { - buf := make([]byte, 128) - for { - select { - case <-sigio: - for { - n, err := syscall.Read(in, buf) - if err == syscall.EAGAIN || err == syscall.EWOULDBLOCK { - break - } - select { - case input_comm <- input_event{buf[:n], err}: - ie := <-input_comm - buf = ie.data[:128] - case <-quit: - return - } - } - case <-quit: - return - } - } - }() - - IsInit = true - return nil -} - -// Interrupt an in-progress call to PollEvent by causing it to return -// EventInterrupt. Note that this function will block until the PollEvent -// function has successfully been interrupted. -func Interrupt() { - interrupt_comm <- struct{}{} -} - -// Finalizes termbox library, should be called after successful initialization -// when termbox's functionality isn't required anymore. -func Close() { - quit <- 1 - out.WriteString(funcs[t_show_cursor]) - out.WriteString(funcs[t_sgr0]) - out.WriteString(funcs[t_clear_screen]) - out.WriteString(funcs[t_exit_ca]) - out.WriteString(funcs[t_exit_keypad]) - out.WriteString(funcs[t_exit_mouse]) - tcsetattr(out.Fd(), &orig_tios) - - out.Close() - syscall.Close(in) - - // reset the state, so that on next Init() it will work again - termw = 0 - termh = 0 - input_mode = InputEsc - out = nil - in = 0 - lastfg = attr_invalid - lastbg = attr_invalid - lastx = coord_invalid - lasty = coord_invalid - cursor_x = cursor_hidden - cursor_y = cursor_hidden - foreground = ColorDefault - background = ColorDefault - IsInit = false -} - -// Synchronizes the internal back buffer with the terminal. -func Flush() error { - // invalidate cursor position - lastx = coord_invalid - lasty = coord_invalid - - update_size_maybe() - - for y := 0; y < front_buffer.height; y++ { - line_offset := y * front_buffer.width - for x := 0; x < front_buffer.width; { - cell_offset := line_offset + x - back := &back_buffer.cells[cell_offset] - front := &front_buffer.cells[cell_offset] - if back.Ch < ' ' { - back.Ch = ' ' - } - w := runewidth.RuneWidth(back.Ch) - if w == 0 || w == 2 && runewidth.IsAmbiguousWidth(back.Ch) { - w = 1 - } - if *back == *front { - x += w - continue - } - *front = *back - send_attr(back.Fg, back.Bg) - - if w == 2 && x == front_buffer.width-1 { - // there's not enough space for 2-cells rune, - // let's just put a space in there - send_char(x, y, ' ') - } else { - send_char(x, y, back.Ch) - if w == 2 { - next := cell_offset + 1 - front_buffer.cells[next] = Cell{ - Ch: 0, - Fg: back.Fg, - Bg: back.Bg, - } - } - } - x += w - } - } - if !is_cursor_hidden(cursor_x, cursor_y) { - write_cursor(cursor_x, cursor_y) - } - return flush() -} - -// Sets the position of the cursor. See also HideCursor(). -func SetCursor(x, y int) { - if is_cursor_hidden(cursor_x, cursor_y) && !is_cursor_hidden(x, y) { - outbuf.WriteString(funcs[t_show_cursor]) - } - - if !is_cursor_hidden(cursor_x, cursor_y) && is_cursor_hidden(x, y) { - outbuf.WriteString(funcs[t_hide_cursor]) - } - - cursor_x, cursor_y = x, y - if !is_cursor_hidden(cursor_x, cursor_y) { - write_cursor(cursor_x, cursor_y) - } -} - -// The shortcut for SetCursor(-1, -1). -func HideCursor() { - SetCursor(cursor_hidden, cursor_hidden) -} - -// Changes cell's parameters in the internal back buffer at the specified -// position. -func SetCell(x, y int, ch rune, fg, bg Attribute) { - if x < 0 || x >= back_buffer.width { - return - } - if y < 0 || y >= back_buffer.height { - return - } - - back_buffer.cells[y*back_buffer.width+x] = Cell{ch, fg, bg} -} - -// Returns a slice into the termbox's back buffer. You can get its dimensions -// using 'Size' function. The slice remains valid as long as no 'Clear' or -// 'Flush' function calls were made after call to this function. -func CellBuffer() []Cell { - return back_buffer.cells -} - -// After getting a raw event from PollRawEvent function call, you can parse it -// again into an ordinary one using termbox logic. That is parse an event as -// termbox would do it. Returned event in addition to usual Event struct fields -// sets N field to the amount of bytes used within 'data' slice. If the length -// of 'data' slice is zero or event cannot be parsed for some other reason, the -// function will return a special event type: EventNone. -// -// IMPORTANT: EventNone may contain a non-zero N, which means you should skip -// these bytes, because termbox cannot recognize them. -// -// NOTE: This API is experimental and may change in future. -func ParseEvent(data []byte) Event { - event := Event{Type: EventKey} - ok := extract_event(data, &event) - if !ok { - return Event{Type: EventNone, N: event.N} - } - return event -} - -// Wait for an event and return it. This is a blocking function call. Instead -// of EventKey and EventMouse it returns EventRaw events. Raw event is written -// into `data` slice and Event's N field is set to the amount of bytes written. -// The minimum required length of the 'data' slice is 1. This requirement may -// vary on different platforms. -// -// NOTE: This API is experimental and may change in future. -func PollRawEvent(data []byte) Event { - if len(data) == 0 { - panic("len(data) >= 1 is a requirement") - } - - var event Event - if extract_raw_event(data, &event) { - return event - } - - for { - select { - case ev := <-input_comm: - if ev.err != nil { - return Event{Type: EventError, Err: ev.err} - } - - inbuf = append(inbuf, ev.data...) - input_comm <- ev - if extract_raw_event(data, &event) { - return event - } - case <-interrupt_comm: - event.Type = EventInterrupt - return event - - case <-sigwinch: - event.Type = EventResize - event.Width, event.Height = get_term_size(out.Fd()) - return event - } - } -} - -// Wait for an event and return it. This is a blocking function call. -func PollEvent() Event { - var event Event - - // try to extract event from input buffer, return on success - event.Type = EventKey - ok := extract_event(inbuf, &event) - if event.N != 0 { - copy(inbuf, inbuf[event.N:]) - inbuf = inbuf[:len(inbuf)-event.N] - } - if ok { - return event - } - - for { - select { - case ev := <-input_comm: - if ev.err != nil { - return Event{Type: EventError, Err: ev.err} - } - - inbuf = append(inbuf, ev.data...) - input_comm <- ev - ok := extract_event(inbuf, &event) - if event.N != 0 { - copy(inbuf, inbuf[event.N:]) - inbuf = inbuf[:len(inbuf)-event.N] - } - if ok { - return event - } - case <-interrupt_comm: - event.Type = EventInterrupt - return event - - case <-sigwinch: - event.Type = EventResize - event.Width, event.Height = get_term_size(out.Fd()) - return event - } - } -} - -// Returns the size of the internal back buffer (which is mostly the same as -// terminal's window size in characters). But it doesn't always match the size -// of the terminal window, after the terminal size has changed, the internal -// back buffer will get in sync only after Clear or Flush function calls. -func Size() (width int, height int) { - return termw, termh -} - -// Clears the internal back buffer. -func Clear(fg, bg Attribute) error { - foreground, background = fg, bg - err := update_size_maybe() - back_buffer.clear() - return err -} - -// Sets termbox input mode. Termbox has two input modes: -// -// 1. Esc input mode. When ESC sequence is in the buffer and it doesn't match -// any known sequence. ESC means KeyEsc. This is the default input mode. -// -// 2. Alt input mode. When ESC sequence is in the buffer and it doesn't match -// any known sequence. ESC enables ModAlt modifier for the next keyboard event. -// -// Both input modes can be OR'ed with Mouse mode. Setting Mouse mode bit up will -// enable mouse button press/release and drag events. -// -// If 'mode' is InputCurrent, returns the current input mode. See also Input* -// constants. -func SetInputMode(mode InputMode) InputMode { - if mode == InputCurrent { - return input_mode - } - if mode&(InputEsc|InputAlt) == 0 { - mode |= InputEsc - } - if mode&(InputEsc|InputAlt) == InputEsc|InputAlt { - mode &^= InputAlt - } - if mode&InputMouse != 0 { - out.WriteString(funcs[t_enter_mouse]) - } else { - out.WriteString(funcs[t_exit_mouse]) - } - - input_mode = mode - return input_mode -} - -// Sets the termbox output mode. Termbox has four output options: -// -// 1. OutputNormal => [1..8] -// This mode provides 8 different colors: -// black, red, green, yellow, blue, magenta, cyan, white -// Shortcut: ColorBlack, ColorRed, ... -// Attributes: AttrBold, AttrUnderline, AttrReverse -// -// Example usage: -// SetCell(x, y, '@', ColorBlack | AttrBold, ColorRed); -// -// 2. Output256 => [1..256] -// In this mode you can leverage the 256 terminal mode: -// 0x01 - 0x08: the 8 colors as in OutputNormal -// 0x09 - 0x10: Color* | AttrBold -// 0x11 - 0xe8: 216 different colors -// 0xe9 - 0x1ff: 24 different shades of grey -// -// Example usage: -// SetCell(x, y, '@', 184, 240); -// SetCell(x, y, '@', 0xb8, 0xf0); -// -// 3. Output216 => [1..216] -// This mode supports the 3rd range of the 256 mode only. -// But you dont need to provide an offset. -// -// 4. OutputGrayscale => [1..26] -// This mode supports the 4th range of the 256 mode -// and black and white colors from 3th range of the 256 mode -// But you dont need to provide an offset. -// -// In all modes, 0x00 represents the default color. -// -// `go run _demos/output.go` to see its impact on your terminal. -// -// If 'mode' is OutputCurrent, it returns the current output mode. -// -// Note that this may return a different OutputMode than the one requested, -// as the requested mode may not be available on the target platform. -func SetOutputMode(mode OutputMode) OutputMode { - if mode == OutputCurrent { - return output_mode - } - - output_mode = mode - return output_mode -} - -// Sync comes handy when something causes desync between termbox's understanding -// of a terminal buffer and the reality. Such as a third party process. Sync -// forces a complete resync between the termbox and a terminal, it may not be -// visually pretty though. -func Sync() error { - front_buffer.clear() - err := send_clear() - if err != nil { - return err - } - - return Flush() -} diff --git a/vendor/github.com/nsf/termbox-go/api_common.go b/vendor/github.com/nsf/termbox-go/api_common.go deleted file mode 100644 index 9f23661f561e..000000000000 --- a/vendor/github.com/nsf/termbox-go/api_common.go +++ /dev/null @@ -1,187 +0,0 @@ -// termbox is a library for creating cross-platform text-based interfaces -package termbox - -// public API, common OS agnostic part - -type ( - InputMode int - OutputMode int - EventType uint8 - Modifier uint8 - Key uint16 - Attribute uint16 -) - -// This type represents a termbox event. The 'Mod', 'Key' and 'Ch' fields are -// valid if 'Type' is EventKey. The 'Width' and 'Height' fields are valid if -// 'Type' is EventResize. The 'Err' field is valid if 'Type' is EventError. -type Event struct { - Type EventType // one of Event* constants - Mod Modifier // one of Mod* constants or 0 - Key Key // one of Key* constants, invalid if 'Ch' is not 0 - Ch rune // a unicode character - Width int // width of the screen - Height int // height of the screen - Err error // error in case if input failed - MouseX int // x coord of mouse - MouseY int // y coord of mouse - N int // number of bytes written when getting a raw event -} - -// A cell, single conceptual entity on the screen. The screen is basically a 2d -// array of cells. 'Ch' is a unicode character, 'Fg' and 'Bg' are foreground -// and background attributes respectively. -type Cell struct { - Ch rune - Fg Attribute - Bg Attribute -} - -// To know if termbox has been initialized or not -var ( - IsInit bool = false -) - -// Key constants, see Event.Key field. -const ( - KeyF1 Key = 0xFFFF - iota - KeyF2 - KeyF3 - KeyF4 - KeyF5 - KeyF6 - KeyF7 - KeyF8 - KeyF9 - KeyF10 - KeyF11 - KeyF12 - KeyInsert - KeyDelete - KeyHome - KeyEnd - KeyPgup - KeyPgdn - KeyArrowUp - KeyArrowDown - KeyArrowLeft - KeyArrowRight - key_min // see terminfo - MouseLeft - MouseMiddle - MouseRight - MouseRelease - MouseWheelUp - MouseWheelDown -) - -const ( - KeyCtrlTilde Key = 0x00 - KeyCtrl2 Key = 0x00 - KeyCtrlSpace Key = 0x00 - KeyCtrlA Key = 0x01 - KeyCtrlB Key = 0x02 - KeyCtrlC Key = 0x03 - KeyCtrlD Key = 0x04 - KeyCtrlE Key = 0x05 - KeyCtrlF Key = 0x06 - KeyCtrlG Key = 0x07 - KeyBackspace Key = 0x08 - KeyCtrlH Key = 0x08 - KeyTab Key = 0x09 - KeyCtrlI Key = 0x09 - KeyCtrlJ Key = 0x0A - KeyCtrlK Key = 0x0B - KeyCtrlL Key = 0x0C - KeyEnter Key = 0x0D - KeyCtrlM Key = 0x0D - KeyCtrlN Key = 0x0E - KeyCtrlO Key = 0x0F - KeyCtrlP Key = 0x10 - KeyCtrlQ Key = 0x11 - KeyCtrlR Key = 0x12 - KeyCtrlS Key = 0x13 - KeyCtrlT Key = 0x14 - KeyCtrlU Key = 0x15 - KeyCtrlV Key = 0x16 - KeyCtrlW Key = 0x17 - KeyCtrlX Key = 0x18 - KeyCtrlY Key = 0x19 - KeyCtrlZ Key = 0x1A - KeyEsc Key = 0x1B - KeyCtrlLsqBracket Key = 0x1B - KeyCtrl3 Key = 0x1B - KeyCtrl4 Key = 0x1C - KeyCtrlBackslash Key = 0x1C - KeyCtrl5 Key = 0x1D - KeyCtrlRsqBracket Key = 0x1D - KeyCtrl6 Key = 0x1E - KeyCtrl7 Key = 0x1F - KeyCtrlSlash Key = 0x1F - KeyCtrlUnderscore Key = 0x1F - KeySpace Key = 0x20 - KeyBackspace2 Key = 0x7F - KeyCtrl8 Key = 0x7F -) - -// Alt modifier constant, see Event.Mod field and SetInputMode function. -const ( - ModAlt Modifier = 1 << iota - ModMotion -) - -// Cell colors, you can combine a color with multiple attributes using bitwise -// OR ('|'). -const ( - ColorDefault Attribute = iota - ColorBlack - ColorRed - ColorGreen - ColorYellow - ColorBlue - ColorMagenta - ColorCyan - ColorWhite -) - -// Cell attributes, it is possible to use multiple attributes by combining them -// using bitwise OR ('|'). Although, colors cannot be combined. But you can -// combine attributes and a single color. -// -// It's worth mentioning that some platforms don't support certain attibutes. -// For example windows console doesn't support AttrUnderline. And on some -// terminals applying AttrBold to background may result in blinking text. Use -// them with caution and test your code on various terminals. -const ( - AttrBold Attribute = 1 << (iota + 9) - AttrUnderline - AttrReverse -) - -// Input mode. See SetInputMode function. -const ( - InputEsc InputMode = 1 << iota - InputAlt - InputMouse - InputCurrent InputMode = 0 -) - -// Output mode. See SetOutputMode function. -const ( - OutputCurrent OutputMode = iota - OutputNormal - Output256 - Output216 - OutputGrayscale -) - -// Event type. See Event.Type field. -const ( - EventKey EventType = iota - EventResize - EventMouse - EventError - EventInterrupt - EventRaw - EventNone -) diff --git a/vendor/github.com/nsf/termbox-go/api_windows.go b/vendor/github.com/nsf/termbox-go/api_windows.go deleted file mode 100644 index 7def30a67df0..000000000000 --- a/vendor/github.com/nsf/termbox-go/api_windows.go +++ /dev/null @@ -1,239 +0,0 @@ -package termbox - -import ( - "syscall" -) - -// public API - -// Initializes termbox library. This function should be called before any other functions. -// After successful initialization, the library must be finalized using 'Close' function. -// -// Example usage: -// err := termbox.Init() -// if err != nil { -// panic(err) -// } -// defer termbox.Close() -func Init() error { - var err error - - interrupt, err = create_event() - if err != nil { - return err - } - - in, err = syscall.Open("CONIN$", syscall.O_RDWR, 0) - if err != nil { - return err - } - out, err = syscall.Open("CONOUT$", syscall.O_RDWR, 0) - if err != nil { - return err - } - - err = get_console_mode(in, &orig_mode) - if err != nil { - return err - } - - err = set_console_mode(in, enable_window_input) - if err != nil { - return err - } - - orig_size = get_term_size(out) - win_size := get_win_size(out) - - err = set_console_screen_buffer_size(out, win_size) - if err != nil { - return err - } - - err = get_console_cursor_info(out, &orig_cursor_info) - if err != nil { - return err - } - - show_cursor(false) - term_size = get_term_size(out) - back_buffer.init(int(term_size.x), int(term_size.y)) - front_buffer.init(int(term_size.x), int(term_size.y)) - back_buffer.clear() - front_buffer.clear() - clear() - - diffbuf = make([]diff_msg, 0, 32) - - go input_event_producer() - IsInit = true - return nil -} - -// Finalizes termbox library, should be called after successful initialization -// when termbox's functionality isn't required anymore. -func Close() { - // we ignore errors here, because we can't really do anything about them - Clear(0, 0) - Flush() - - // stop event producer - cancel_comm <- true - set_event(interrupt) - select { - case <-input_comm: - default: - } - <-cancel_done_comm - - set_console_cursor_info(out, &orig_cursor_info) - set_console_cursor_position(out, coord{}) - set_console_screen_buffer_size(out, orig_size) - set_console_mode(in, orig_mode) - syscall.Close(in) - syscall.Close(out) - syscall.Close(interrupt) - IsInit = false -} - -// Interrupt an in-progress call to PollEvent by causing it to return -// EventInterrupt. Note that this function will block until the PollEvent -// function has successfully been interrupted. -func Interrupt() { - interrupt_comm <- struct{}{} -} - -// Synchronizes the internal back buffer with the terminal. -func Flush() error { - update_size_maybe() - prepare_diff_messages() - for _, diff := range diffbuf { - r := small_rect{ - left: 0, - top: diff.pos, - right: term_size.x - 1, - bottom: diff.pos + diff.lines - 1, - } - write_console_output(out, diff.chars, r) - } - if !is_cursor_hidden(cursor_x, cursor_y) { - move_cursor(cursor_x, cursor_y) - } - return nil -} - -// Sets the position of the cursor. See also HideCursor(). -func SetCursor(x, y int) { - if is_cursor_hidden(cursor_x, cursor_y) && !is_cursor_hidden(x, y) { - show_cursor(true) - } - - if !is_cursor_hidden(cursor_x, cursor_y) && is_cursor_hidden(x, y) { - show_cursor(false) - } - - cursor_x, cursor_y = x, y - if !is_cursor_hidden(cursor_x, cursor_y) { - move_cursor(cursor_x, cursor_y) - } -} - -// The shortcut for SetCursor(-1, -1). -func HideCursor() { - SetCursor(cursor_hidden, cursor_hidden) -} - -// Changes cell's parameters in the internal back buffer at the specified -// position. -func SetCell(x, y int, ch rune, fg, bg Attribute) { - if x < 0 || x >= back_buffer.width { - return - } - if y < 0 || y >= back_buffer.height { - return - } - - back_buffer.cells[y*back_buffer.width+x] = Cell{ch, fg, bg} -} - -// Returns a slice into the termbox's back buffer. You can get its dimensions -// using 'Size' function. The slice remains valid as long as no 'Clear' or -// 'Flush' function calls were made after call to this function. -func CellBuffer() []Cell { - return back_buffer.cells -} - -// Wait for an event and return it. This is a blocking function call. -func PollEvent() Event { - select { - case ev := <-input_comm: - return ev - case <-interrupt_comm: - return Event{Type: EventInterrupt} - } -} - -// Returns the size of the internal back buffer (which is mostly the same as -// console's window size in characters). But it doesn't always match the size -// of the console window, after the console size has changed, the internal back -// buffer will get in sync only after Clear or Flush function calls. -func Size() (int, int) { - return int(term_size.x), int(term_size.y) -} - -// Clears the internal back buffer. -func Clear(fg, bg Attribute) error { - foreground, background = fg, bg - update_size_maybe() - back_buffer.clear() - return nil -} - -// Sets termbox input mode. Termbox has two input modes: -// -// 1. Esc input mode. When ESC sequence is in the buffer and it doesn't match -// any known sequence. ESC means KeyEsc. This is the default input mode. -// -// 2. Alt input mode. When ESC sequence is in the buffer and it doesn't match -// any known sequence. ESC enables ModAlt modifier for the next keyboard event. -// -// Both input modes can be OR'ed with Mouse mode. Setting Mouse mode bit up will -// enable mouse button press/release and drag events. -// -// If 'mode' is InputCurrent, returns the current input mode. See also Input* -// constants. -func SetInputMode(mode InputMode) InputMode { - if mode == InputCurrent { - return input_mode - } - if mode&InputMouse != 0 { - err := set_console_mode(in, enable_window_input|enable_mouse_input|enable_extended_flags) - if err != nil { - panic(err) - } - } else { - err := set_console_mode(in, enable_window_input) - if err != nil { - panic(err) - } - } - - input_mode = mode - return input_mode -} - -// Sets the termbox output mode. -// -// Windows console does not support extra colour modes, -// so this will always set and return OutputNormal. -func SetOutputMode(mode OutputMode) OutputMode { - return OutputNormal -} - -// Sync comes handy when something causes desync between termbox's understanding -// of a terminal buffer and the reality. Such as a third party process. Sync -// forces a complete resync between the termbox and a terminal, it may not be -// visually pretty though. At the moment on Windows it does nothing. -func Sync() error { - return nil -} diff --git a/vendor/github.com/nsf/termbox-go/collect_terminfo.py b/vendor/github.com/nsf/termbox-go/collect_terminfo.py deleted file mode 100755 index 5e50975e63ab..000000000000 --- a/vendor/github.com/nsf/termbox-go/collect_terminfo.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python - -import sys, os, subprocess - -def escaped(s): - return repr(s)[1:-1] - -def tput(term, name): - try: - return subprocess.check_output(['tput', '-T%s' % term, name]).decode() - except subprocess.CalledProcessError as e: - return e.output.decode() - - -def w(s): - if s == None: - return - sys.stdout.write(s) - -terminals = { - 'xterm' : 'xterm', - 'rxvt-256color' : 'rxvt_256color', - 'rxvt-unicode' : 'rxvt_unicode', - 'linux' : 'linux', - 'Eterm' : 'eterm', - 'screen' : 'screen' -} - -keys = [ - "F1", "kf1", - "F2", "kf2", - "F3", "kf3", - "F4", "kf4", - "F5", "kf5", - "F6", "kf6", - "F7", "kf7", - "F8", "kf8", - "F9", "kf9", - "F10", "kf10", - "F11", "kf11", - "F12", "kf12", - "INSERT", "kich1", - "DELETE", "kdch1", - "HOME", "khome", - "END", "kend", - "PGUP", "kpp", - "PGDN", "knp", - "KEY_UP", "kcuu1", - "KEY_DOWN", "kcud1", - "KEY_LEFT", "kcub1", - "KEY_RIGHT", "kcuf1" -] - -funcs = [ - "T_ENTER_CA", "smcup", - "T_EXIT_CA", "rmcup", - "T_SHOW_CURSOR", "cnorm", - "T_HIDE_CURSOR", "civis", - "T_CLEAR_SCREEN", "clear", - "T_SGR0", "sgr0", - "T_UNDERLINE", "smul", - "T_BOLD", "bold", - "T_BLINK", "blink", - "T_REVERSE", "rev", - "T_ENTER_KEYPAD", "smkx", - "T_EXIT_KEYPAD", "rmkx" -] - -def iter_pairs(iterable): - iterable = iter(iterable) - while True: - yield (next(iterable), next(iterable)) - -def do_term(term, nick): - w("// %s\n" % term) - w("var %s_keys = []string{\n\t" % nick) - for k, v in iter_pairs(keys): - w('"') - w(escaped(tput(term, v))) - w('",') - w("\n}\n") - w("var %s_funcs = []string{\n\t" % nick) - for k,v in iter_pairs(funcs): - w('"') - if v == "sgr": - w("\\033[3%d;4%dm") - elif v == "cup": - w("\\033[%d;%dH") - else: - w(escaped(tput(term, v))) - w('", ') - w("\n}\n\n") - -def do_terms(d): - w("var terms = []struct {\n") - w("\tname string\n") - w("\tkeys []string\n") - w("\tfuncs []string\n") - w("}{\n") - for k, v in d.items(): - w('\t{"%s", %s_keys, %s_funcs},\n' % (k, v, v)) - w("}\n\n") - -w("// +build !windows\n\npackage termbox\n\n") - -for k,v in terminals.items(): - do_term(k, v) - -do_terms(terminals) - diff --git a/vendor/github.com/nsf/termbox-go/syscalls.go b/vendor/github.com/nsf/termbox-go/syscalls.go deleted file mode 100644 index 4f52bb9af9a1..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build ignore - -package termbox - -/* -#include -#include -*/ -import "C" - -type syscall_Termios C.struct_termios - -const ( - syscall_IGNBRK = C.IGNBRK - syscall_BRKINT = C.BRKINT - syscall_PARMRK = C.PARMRK - syscall_ISTRIP = C.ISTRIP - syscall_INLCR = C.INLCR - syscall_IGNCR = C.IGNCR - syscall_ICRNL = C.ICRNL - syscall_IXON = C.IXON - syscall_OPOST = C.OPOST - syscall_ECHO = C.ECHO - syscall_ECHONL = C.ECHONL - syscall_ICANON = C.ICANON - syscall_ISIG = C.ISIG - syscall_IEXTEN = C.IEXTEN - syscall_CSIZE = C.CSIZE - syscall_PARENB = C.PARENB - syscall_CS8 = C.CS8 - syscall_VMIN = C.VMIN - syscall_VTIME = C.VTIME - - // on darwin change these to (on *bsd too?): - // C.TIOCGETA - // C.TIOCSETA - syscall_TCGETS = C.TCGETS - syscall_TCSETS = C.TCSETS -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_darwin.go b/vendor/github.com/nsf/termbox-go/syscalls_darwin.go deleted file mode 100644 index 25b78f7ab70b..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_darwin.go +++ /dev/null @@ -1,41 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -// +build !amd64 - -package termbox - -type syscall_Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x402c7413 - syscall_TCSETS = 0x802c7414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_darwin_amd64.go b/vendor/github.com/nsf/termbox-go/syscalls_darwin_amd64.go deleted file mode 100644 index 11f25be79a4b..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_darwin_amd64.go +++ /dev/null @@ -1,40 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -type syscall_Termios struct { - Iflag uint64 - Oflag uint64 - Cflag uint64 - Lflag uint64 - Cc [20]uint8 - Pad_cgo_0 [4]byte - Ispeed uint64 - Ospeed uint64 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x40487413 - syscall_TCSETS = 0x80487414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_dragonfly.go b/vendor/github.com/nsf/termbox-go/syscalls_dragonfly.go deleted file mode 100644 index e03624ebc71a..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_dragonfly.go +++ /dev/null @@ -1,39 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -type syscall_Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x402c7413 - syscall_TCSETS = 0x802c7414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_freebsd.go b/vendor/github.com/nsf/termbox-go/syscalls_freebsd.go deleted file mode 100644 index e03624ebc71a..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_freebsd.go +++ /dev/null @@ -1,39 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -type syscall_Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x402c7413 - syscall_TCSETS = 0x802c7414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_linux.go b/vendor/github.com/nsf/termbox-go/syscalls_linux.go deleted file mode 100644 index b88960de617c..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_linux.go +++ /dev/null @@ -1,33 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -import "syscall" - -type syscall_Termios syscall.Termios - -const ( - syscall_IGNBRK = syscall.IGNBRK - syscall_BRKINT = syscall.BRKINT - syscall_PARMRK = syscall.PARMRK - syscall_ISTRIP = syscall.ISTRIP - syscall_INLCR = syscall.INLCR - syscall_IGNCR = syscall.IGNCR - syscall_ICRNL = syscall.ICRNL - syscall_IXON = syscall.IXON - syscall_OPOST = syscall.OPOST - syscall_ECHO = syscall.ECHO - syscall_ECHONL = syscall.ECHONL - syscall_ICANON = syscall.ICANON - syscall_ISIG = syscall.ISIG - syscall_IEXTEN = syscall.IEXTEN - syscall_CSIZE = syscall.CSIZE - syscall_PARENB = syscall.PARENB - syscall_CS8 = syscall.CS8 - syscall_VMIN = syscall.VMIN - syscall_VTIME = syscall.VTIME - - syscall_TCGETS = syscall.TCGETS - syscall_TCSETS = syscall.TCSETS -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_netbsd.go b/vendor/github.com/nsf/termbox-go/syscalls_netbsd.go deleted file mode 100644 index 49a3355b9a2d..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_netbsd.go +++ /dev/null @@ -1,39 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -type syscall_Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x402c7413 - syscall_TCSETS = 0x802c7414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_openbsd.go b/vendor/github.com/nsf/termbox-go/syscalls_openbsd.go deleted file mode 100644 index 49a3355b9a2d..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_openbsd.go +++ /dev/null @@ -1,39 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs syscalls.go - -package termbox - -type syscall_Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed int32 - Ospeed int32 -} - -const ( - syscall_IGNBRK = 0x1 - syscall_BRKINT = 0x2 - syscall_PARMRK = 0x8 - syscall_ISTRIP = 0x20 - syscall_INLCR = 0x40 - syscall_IGNCR = 0x80 - syscall_ICRNL = 0x100 - syscall_IXON = 0x200 - syscall_OPOST = 0x1 - syscall_ECHO = 0x8 - syscall_ECHONL = 0x10 - syscall_ICANON = 0x100 - syscall_ISIG = 0x80 - syscall_IEXTEN = 0x400 - syscall_CSIZE = 0x300 - syscall_PARENB = 0x1000 - syscall_CS8 = 0x300 - syscall_VMIN = 0x10 - syscall_VTIME = 0x11 - - syscall_TCGETS = 0x402c7413 - syscall_TCSETS = 0x802c7414 -) diff --git a/vendor/github.com/nsf/termbox-go/syscalls_windows.go b/vendor/github.com/nsf/termbox-go/syscalls_windows.go deleted file mode 100644 index 472d002a56aa..000000000000 --- a/vendor/github.com/nsf/termbox-go/syscalls_windows.go +++ /dev/null @@ -1,61 +0,0 @@ -// Created by cgo -godefs - DO NOT EDIT -// cgo -godefs -- -DUNICODE syscalls.go - -package termbox - -const ( - foreground_blue = 0x1 - foreground_green = 0x2 - foreground_red = 0x4 - foreground_intensity = 0x8 - background_blue = 0x10 - background_green = 0x20 - background_red = 0x40 - background_intensity = 0x80 - std_input_handle = -0xa - std_output_handle = -0xb - key_event = 0x1 - mouse_event = 0x2 - window_buffer_size_event = 0x4 - enable_window_input = 0x8 - enable_mouse_input = 0x10 - enable_extended_flags = 0x80 - - vk_f1 = 0x70 - vk_f2 = 0x71 - vk_f3 = 0x72 - vk_f4 = 0x73 - vk_f5 = 0x74 - vk_f6 = 0x75 - vk_f7 = 0x76 - vk_f8 = 0x77 - vk_f9 = 0x78 - vk_f10 = 0x79 - vk_f11 = 0x7a - vk_f12 = 0x7b - vk_insert = 0x2d - vk_delete = 0x2e - vk_home = 0x24 - vk_end = 0x23 - vk_pgup = 0x21 - vk_pgdn = 0x22 - vk_arrow_up = 0x26 - vk_arrow_down = 0x28 - vk_arrow_left = 0x25 - vk_arrow_right = 0x27 - vk_backspace = 0x8 - vk_tab = 0x9 - vk_enter = 0xd - vk_esc = 0x1b - vk_space = 0x20 - - left_alt_pressed = 0x2 - left_ctrl_pressed = 0x8 - right_alt_pressed = 0x1 - right_ctrl_pressed = 0x4 - shift_pressed = 0x10 - - generic_read = 0x80000000 - generic_write = 0x40000000 - console_textmode_buffer = 0x1 -) diff --git a/vendor/github.com/nsf/termbox-go/termbox.go b/vendor/github.com/nsf/termbox-go/termbox.go deleted file mode 100644 index c2d86c6584e3..000000000000 --- a/vendor/github.com/nsf/termbox-go/termbox.go +++ /dev/null @@ -1,511 +0,0 @@ -// +build !windows - -package termbox - -import "unicode/utf8" -import "bytes" -import "syscall" -import "unsafe" -import "strings" -import "strconv" -import "os" -import "io" - -// private API - -const ( - t_enter_ca = iota - t_exit_ca - t_show_cursor - t_hide_cursor - t_clear_screen - t_sgr0 - t_underline - t_bold - t_blink - t_reverse - t_enter_keypad - t_exit_keypad - t_enter_mouse - t_exit_mouse - t_max_funcs -) - -const ( - coord_invalid = -2 - attr_invalid = Attribute(0xFFFF) -) - -type input_event struct { - data []byte - err error -} - -var ( - // term specific sequences - keys []string - funcs []string - - // termbox inner state - orig_tios syscall_Termios - back_buffer cellbuf - front_buffer cellbuf - termw int - termh int - input_mode = InputEsc - output_mode = OutputNormal - out *os.File - in int - lastfg = attr_invalid - lastbg = attr_invalid - lastx = coord_invalid - lasty = coord_invalid - cursor_x = cursor_hidden - cursor_y = cursor_hidden - foreground = ColorDefault - background = ColorDefault - inbuf = make([]byte, 0, 64) - outbuf bytes.Buffer - sigwinch = make(chan os.Signal, 1) - sigio = make(chan os.Signal, 1) - quit = make(chan int) - input_comm = make(chan input_event) - interrupt_comm = make(chan struct{}) - intbuf = make([]byte, 0, 16) - - // grayscale indexes - grayscale = []Attribute{ - 0, 17, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 232, - } -) - -func write_cursor(x, y int) { - outbuf.WriteString("\033[") - outbuf.Write(strconv.AppendUint(intbuf, uint64(y+1), 10)) - outbuf.WriteString(";") - outbuf.Write(strconv.AppendUint(intbuf, uint64(x+1), 10)) - outbuf.WriteString("H") -} - -func write_sgr_fg(a Attribute) { - switch output_mode { - case Output256, Output216, OutputGrayscale: - outbuf.WriteString("\033[38;5;") - outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) - outbuf.WriteString("m") - default: - outbuf.WriteString("\033[3") - outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) - outbuf.WriteString("m") - } -} - -func write_sgr_bg(a Attribute) { - switch output_mode { - case Output256, Output216, OutputGrayscale: - outbuf.WriteString("\033[48;5;") - outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) - outbuf.WriteString("m") - default: - outbuf.WriteString("\033[4") - outbuf.Write(strconv.AppendUint(intbuf, uint64(a-1), 10)) - outbuf.WriteString("m") - } -} - -func write_sgr(fg, bg Attribute) { - switch output_mode { - case Output256, Output216, OutputGrayscale: - outbuf.WriteString("\033[38;5;") - outbuf.Write(strconv.AppendUint(intbuf, uint64(fg-1), 10)) - outbuf.WriteString("m") - outbuf.WriteString("\033[48;5;") - outbuf.Write(strconv.AppendUint(intbuf, uint64(bg-1), 10)) - outbuf.WriteString("m") - default: - outbuf.WriteString("\033[3") - outbuf.Write(strconv.AppendUint(intbuf, uint64(fg-1), 10)) - outbuf.WriteString(";4") - outbuf.Write(strconv.AppendUint(intbuf, uint64(bg-1), 10)) - outbuf.WriteString("m") - } -} - -type winsize struct { - rows uint16 - cols uint16 - xpixels uint16 - ypixels uint16 -} - -func get_term_size(fd uintptr) (int, int) { - var sz winsize - _, _, _ = syscall.Syscall(syscall.SYS_IOCTL, - fd, uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&sz))) - return int(sz.cols), int(sz.rows) -} - -func send_attr(fg, bg Attribute) { - if fg == lastfg && bg == lastbg { - return - } - - outbuf.WriteString(funcs[t_sgr0]) - - var fgcol, bgcol Attribute - - switch output_mode { - case Output256: - fgcol = fg & 0x1FF - bgcol = bg & 0x1FF - case Output216: - fgcol = fg & 0xFF - bgcol = bg & 0xFF - if fgcol > 216 { - fgcol = ColorDefault - } - if bgcol > 216 { - bgcol = ColorDefault - } - if fgcol != ColorDefault { - fgcol += 0x10 - } - if bgcol != ColorDefault { - bgcol += 0x10 - } - case OutputGrayscale: - fgcol = fg & 0x1F - bgcol = bg & 0x1F - if fgcol > 26 { - fgcol = ColorDefault - } - if bgcol > 26 { - bgcol = ColorDefault - } - if fgcol != ColorDefault { - fgcol = grayscale[fgcol] - } - if bgcol != ColorDefault { - bgcol = grayscale[bgcol] - } - default: - fgcol = fg & 0x0F - bgcol = bg & 0x0F - } - - if fgcol != ColorDefault { - if bgcol != ColorDefault { - write_sgr(fgcol, bgcol) - } else { - write_sgr_fg(fgcol) - } - } else if bgcol != ColorDefault { - write_sgr_bg(bgcol) - } - - if fg&AttrBold != 0 { - outbuf.WriteString(funcs[t_bold]) - } - if bg&AttrBold != 0 { - outbuf.WriteString(funcs[t_blink]) - } - if fg&AttrUnderline != 0 { - outbuf.WriteString(funcs[t_underline]) - } - if fg&AttrReverse|bg&AttrReverse != 0 { - outbuf.WriteString(funcs[t_reverse]) - } - - lastfg, lastbg = fg, bg -} - -func send_char(x, y int, ch rune) { - var buf [8]byte - n := utf8.EncodeRune(buf[:], ch) - if x-1 != lastx || y != lasty { - write_cursor(x, y) - } - lastx, lasty = x, y - outbuf.Write(buf[:n]) -} - -func flush() error { - _, err := io.Copy(out, &outbuf) - outbuf.Reset() - return err -} - -func send_clear() error { - send_attr(foreground, background) - outbuf.WriteString(funcs[t_clear_screen]) - if !is_cursor_hidden(cursor_x, cursor_y) { - write_cursor(cursor_x, cursor_y) - } - - // we need to invalidate cursor position too and these two vars are - // used only for simple cursor positioning optimization, cursor - // actually may be in the correct place, but we simply discard - // optimization once and it gives us simple solution for the case when - // cursor moved - lastx = coord_invalid - lasty = coord_invalid - - return flush() -} - -func update_size_maybe() error { - w, h := get_term_size(out.Fd()) - if w != termw || h != termh { - termw, termh = w, h - back_buffer.resize(termw, termh) - front_buffer.resize(termw, termh) - front_buffer.clear() - return send_clear() - } - return nil -} - -func tcsetattr(fd uintptr, termios *syscall_Termios) error { - r, _, e := syscall.Syscall(syscall.SYS_IOCTL, - fd, uintptr(syscall_TCSETS), uintptr(unsafe.Pointer(termios))) - if r != 0 { - return os.NewSyscallError("SYS_IOCTL", e) - } - return nil -} - -func tcgetattr(fd uintptr, termios *syscall_Termios) error { - r, _, e := syscall.Syscall(syscall.SYS_IOCTL, - fd, uintptr(syscall_TCGETS), uintptr(unsafe.Pointer(termios))) - if r != 0 { - return os.NewSyscallError("SYS_IOCTL", e) - } - return nil -} - -func parse_mouse_event(event *Event, buf string) (int, bool) { - if strings.HasPrefix(buf, "\033[M") && len(buf) >= 6 { - // X10 mouse encoding, the simplest one - // \033 [ M Cb Cx Cy - b := buf[3] - 32 - switch b & 3 { - case 0: - if b&64 != 0 { - event.Key = MouseWheelUp - } else { - event.Key = MouseLeft - } - case 1: - if b&64 != 0 { - event.Key = MouseWheelDown - } else { - event.Key = MouseMiddle - } - case 2: - event.Key = MouseRight - case 3: - event.Key = MouseRelease - default: - return 6, false - } - event.Type = EventMouse // KeyEvent by default - if b&32 != 0 { - event.Mod |= ModMotion - } - - // the coord is 1,1 for upper left - event.MouseX = int(buf[4]) - 1 - 32 - event.MouseY = int(buf[5]) - 1 - 32 - return 6, true - } else if strings.HasPrefix(buf, "\033[<") || strings.HasPrefix(buf, "\033[") { - // xterm 1006 extended mode or urxvt 1015 extended mode - // xterm: \033 [ < Cb ; Cx ; Cy (M or m) - // urxvt: \033 [ Cb ; Cx ; Cy M - - // find the first M or m, that's where we stop - mi := strings.IndexAny(buf, "Mm") - if mi == -1 { - return 0, false - } - - // whether it's a capital M or not - isM := buf[mi] == 'M' - - // whether it's urxvt or not - isU := false - - // buf[2] is safe here, because having M or m found means we have at - // least 3 bytes in a string - if buf[2] == '<' { - buf = buf[3:mi] - } else { - isU = true - buf = buf[2:mi] - } - - s1 := strings.Index(buf, ";") - s2 := strings.LastIndex(buf, ";") - // not found or only one ';' - if s1 == -1 || s2 == -1 || s1 == s2 { - return 0, false - } - - n1, err := strconv.ParseInt(buf[0:s1], 10, 64) - if err != nil { - return 0, false - } - n2, err := strconv.ParseInt(buf[s1+1:s2], 10, 64) - if err != nil { - return 0, false - } - n3, err := strconv.ParseInt(buf[s2+1:], 10, 64) - if err != nil { - return 0, false - } - - // on urxvt, first number is encoded exactly as in X10, but we need to - // make it zero-based, on xterm it is zero-based already - if isU { - n1 -= 32 - } - switch n1 & 3 { - case 0: - if n1&64 != 0 { - event.Key = MouseWheelUp - } else { - event.Key = MouseLeft - } - case 1: - if n1&64 != 0 { - event.Key = MouseWheelDown - } else { - event.Key = MouseMiddle - } - case 2: - event.Key = MouseRight - case 3: - event.Key = MouseRelease - default: - return mi + 1, false - } - if !isM { - // on xterm mouse release is signaled by lowercase m - event.Key = MouseRelease - } - - event.Type = EventMouse // KeyEvent by default - if n1&32 != 0 { - event.Mod |= ModMotion - } - - event.MouseX = int(n2) - 1 - event.MouseY = int(n3) - 1 - return mi + 1, true - } - - return 0, false -} - -func parse_escape_sequence(event *Event, buf []byte) (int, bool) { - bufstr := string(buf) - for i, key := range keys { - if strings.HasPrefix(bufstr, key) { - event.Ch = 0 - event.Key = Key(0xFFFF - i) - return len(key), true - } - } - - // if none of the keys match, let's try mouse seqences - return parse_mouse_event(event, bufstr) -} - -func extract_raw_event(data []byte, event *Event) bool { - if len(inbuf) == 0 { - return false - } - - n := len(data) - if n == 0 { - return false - } - - n = copy(data, inbuf) - copy(inbuf, inbuf[n:]) - inbuf = inbuf[:len(inbuf)-n] - - event.N = n - event.Type = EventRaw - return true -} - -func extract_event(inbuf []byte, event *Event) bool { - if len(inbuf) == 0 { - event.N = 0 - return false - } - - if inbuf[0] == '\033' { - // possible escape sequence - if n, ok := parse_escape_sequence(event, inbuf); n != 0 { - event.N = n - return ok - } - - // it's not escape sequence, then it's Alt or Esc, check input_mode - switch { - case input_mode&InputEsc != 0: - // if we're in escape mode, fill Esc event, pop buffer, return success - event.Ch = 0 - event.Key = KeyEsc - event.Mod = 0 - event.N = 1 - return true - case input_mode&InputAlt != 0: - // if we're in alt mode, set Alt modifier to event and redo parsing - event.Mod = ModAlt - ok := extract_event(inbuf[1:], event) - if ok { - event.N++ - } else { - event.N = 0 - } - return ok - default: - panic("unreachable") - } - } - - // if we're here, this is not an escape sequence and not an alt sequence - // so, it's a FUNCTIONAL KEY or a UNICODE character - - // first of all check if it's a functional key - if Key(inbuf[0]) <= KeySpace || Key(inbuf[0]) == KeyBackspace2 { - // fill event, pop buffer, return success - event.Ch = 0 - event.Key = Key(inbuf[0]) - event.N = 1 - return true - } - - // the only possible option is utf8 rune - if r, n := utf8.DecodeRune(inbuf); r != utf8.RuneError { - event.Ch = r - event.Key = 0 - event.N = n - return true - } - - return false -} - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r, _, e := syscall.Syscall(syscall.SYS_FCNTL, uintptr(fd), uintptr(cmd), - uintptr(arg)) - val = int(r) - if e != 0 { - err = e - } - return -} diff --git a/vendor/github.com/nsf/termbox-go/termbox_common.go b/vendor/github.com/nsf/termbox-go/termbox_common.go deleted file mode 100644 index c3355cc25e38..000000000000 --- a/vendor/github.com/nsf/termbox-go/termbox_common.go +++ /dev/null @@ -1,59 +0,0 @@ -package termbox - -// private API, common OS agnostic part - -type cellbuf struct { - width int - height int - cells []Cell -} - -func (this *cellbuf) init(width, height int) { - this.width = width - this.height = height - this.cells = make([]Cell, width*height) -} - -func (this *cellbuf) resize(width, height int) { - if this.width == width && this.height == height { - return - } - - oldw := this.width - oldh := this.height - oldcells := this.cells - - this.init(width, height) - this.clear() - - minw, minh := oldw, oldh - - if width < minw { - minw = width - } - if height < minh { - minh = height - } - - for i := 0; i < minh; i++ { - srco, dsto := i*oldw, i*width - src := oldcells[srco : srco+minw] - dst := this.cells[dsto : dsto+minw] - copy(dst, src) - } -} - -func (this *cellbuf) clear() { - for i := range this.cells { - c := &this.cells[i] - c.Ch = ' ' - c.Fg = foreground - c.Bg = background - } -} - -const cursor_hidden = -1 - -func is_cursor_hidden(x, y int) bool { - return x == cursor_hidden || y == cursor_hidden -} diff --git a/vendor/github.com/nsf/termbox-go/termbox_windows.go b/vendor/github.com/nsf/termbox-go/termbox_windows.go deleted file mode 100644 index f7dad7b8a5fb..000000000000 --- a/vendor/github.com/nsf/termbox-go/termbox_windows.go +++ /dev/null @@ -1,856 +0,0 @@ -package termbox - -import "syscall" -import "unsafe" -import "unicode/utf16" -import "github.com/mattn/go-runewidth" - -type ( - wchar uint16 - short int16 - dword uint32 - word uint16 - char_info struct { - char wchar - attr word - } - coord struct { - x short - y short - } - small_rect struct { - left short - top short - right short - bottom short - } - console_screen_buffer_info struct { - size coord - cursor_position coord - attributes word - window small_rect - maximum_window_size coord - } - console_cursor_info struct { - size dword - visible int32 - } - input_record struct { - event_type word - _ [2]byte - event [16]byte - } - key_event_record struct { - key_down int32 - repeat_count word - virtual_key_code word - virtual_scan_code word - unicode_char wchar - control_key_state dword - } - window_buffer_size_record struct { - size coord - } - mouse_event_record struct { - mouse_pos coord - button_state dword - control_key_state dword - event_flags dword - } -) - -const ( - mouse_lmb = 0x1 - mouse_rmb = 0x2 - mouse_mmb = 0x4 | 0x8 | 0x10 -) - -func (this coord) uintptr() uintptr { - return uintptr(*(*int32)(unsafe.Pointer(&this))) -} - -var kernel32 = syscall.NewLazyDLL("kernel32.dll") -var is_cjk = runewidth.IsEastAsian() - -var ( - proc_set_console_active_screen_buffer = kernel32.NewProc("SetConsoleActiveScreenBuffer") - proc_set_console_screen_buffer_size = kernel32.NewProc("SetConsoleScreenBufferSize") - proc_create_console_screen_buffer = kernel32.NewProc("CreateConsoleScreenBuffer") - proc_get_console_screen_buffer_info = kernel32.NewProc("GetConsoleScreenBufferInfo") - proc_write_console_output = kernel32.NewProc("WriteConsoleOutputW") - proc_write_console_output_character = kernel32.NewProc("WriteConsoleOutputCharacterW") - proc_write_console_output_attribute = kernel32.NewProc("WriteConsoleOutputAttribute") - proc_set_console_cursor_info = kernel32.NewProc("SetConsoleCursorInfo") - proc_set_console_cursor_position = kernel32.NewProc("SetConsoleCursorPosition") - proc_get_console_cursor_info = kernel32.NewProc("GetConsoleCursorInfo") - proc_read_console_input = kernel32.NewProc("ReadConsoleInputW") - proc_get_console_mode = kernel32.NewProc("GetConsoleMode") - proc_set_console_mode = kernel32.NewProc("SetConsoleMode") - proc_fill_console_output_character = kernel32.NewProc("FillConsoleOutputCharacterW") - proc_fill_console_output_attribute = kernel32.NewProc("FillConsoleOutputAttribute") - proc_create_event = kernel32.NewProc("CreateEventW") - proc_wait_for_multiple_objects = kernel32.NewProc("WaitForMultipleObjects") - proc_set_event = kernel32.NewProc("SetEvent") -) - -func set_console_active_screen_buffer(h syscall.Handle) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_console_active_screen_buffer.Addr(), - 1, uintptr(h), 0, 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func set_console_screen_buffer_size(h syscall.Handle, size coord) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_console_screen_buffer_size.Addr(), - 2, uintptr(h), size.uintptr(), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func create_console_screen_buffer() (h syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall6(proc_create_console_screen_buffer.Addr(), - 5, uintptr(generic_read|generic_write), 0, 0, console_textmode_buffer, 0, 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return syscall.Handle(r0), err -} - -func get_console_screen_buffer_info(h syscall.Handle, info *console_screen_buffer_info) (err error) { - r0, _, e1 := syscall.Syscall(proc_get_console_screen_buffer_info.Addr(), - 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func write_console_output(h syscall.Handle, chars []char_info, dst small_rect) (err error) { - tmp_coord = coord{dst.right - dst.left + 1, dst.bottom - dst.top + 1} - tmp_rect = dst - r0, _, e1 := syscall.Syscall6(proc_write_console_output.Addr(), - 5, uintptr(h), uintptr(unsafe.Pointer(&chars[0])), tmp_coord.uintptr(), - tmp_coord0.uintptr(), uintptr(unsafe.Pointer(&tmp_rect)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func write_console_output_character(h syscall.Handle, chars []wchar, pos coord) (err error) { - r0, _, e1 := syscall.Syscall6(proc_write_console_output_character.Addr(), - 5, uintptr(h), uintptr(unsafe.Pointer(&chars[0])), uintptr(len(chars)), - pos.uintptr(), uintptr(unsafe.Pointer(&tmp_arg)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func write_console_output_attribute(h syscall.Handle, attrs []word, pos coord) (err error) { - r0, _, e1 := syscall.Syscall6(proc_write_console_output_attribute.Addr(), - 5, uintptr(h), uintptr(unsafe.Pointer(&attrs[0])), uintptr(len(attrs)), - pos.uintptr(), uintptr(unsafe.Pointer(&tmp_arg)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func set_console_cursor_info(h syscall.Handle, info *console_cursor_info) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_console_cursor_info.Addr(), - 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func get_console_cursor_info(h syscall.Handle, info *console_cursor_info) (err error) { - r0, _, e1 := syscall.Syscall(proc_get_console_cursor_info.Addr(), - 2, uintptr(h), uintptr(unsafe.Pointer(info)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func set_console_cursor_position(h syscall.Handle, pos coord) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_console_cursor_position.Addr(), - 2, uintptr(h), pos.uintptr(), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func read_console_input(h syscall.Handle, record *input_record) (err error) { - r0, _, e1 := syscall.Syscall6(proc_read_console_input.Addr(), - 4, uintptr(h), uintptr(unsafe.Pointer(record)), 1, uintptr(unsafe.Pointer(&tmp_arg)), 0, 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func get_console_mode(h syscall.Handle, mode *dword) (err error) { - r0, _, e1 := syscall.Syscall(proc_get_console_mode.Addr(), - 2, uintptr(h), uintptr(unsafe.Pointer(mode)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func set_console_mode(h syscall.Handle, mode dword) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_console_mode.Addr(), - 2, uintptr(h), uintptr(mode), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func fill_console_output_character(h syscall.Handle, char wchar, n int) (err error) { - r0, _, e1 := syscall.Syscall6(proc_fill_console_output_character.Addr(), - 5, uintptr(h), uintptr(char), uintptr(n), tmp_coord.uintptr(), - uintptr(unsafe.Pointer(&tmp_arg)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func fill_console_output_attribute(h syscall.Handle, attr word, n int) (err error) { - r0, _, e1 := syscall.Syscall6(proc_fill_console_output_attribute.Addr(), - 5, uintptr(h), uintptr(attr), uintptr(n), tmp_coord.uintptr(), - uintptr(unsafe.Pointer(&tmp_arg)), 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func create_event() (out syscall.Handle, err error) { - r0, _, e1 := syscall.Syscall6(proc_create_event.Addr(), - 4, 0, 0, 0, 0, 0, 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return syscall.Handle(r0), err -} - -func wait_for_multiple_objects(objects []syscall.Handle) (err error) { - r0, _, e1 := syscall.Syscall6(proc_wait_for_multiple_objects.Addr(), - 4, uintptr(len(objects)), uintptr(unsafe.Pointer(&objects[0])), - 0, 0xFFFFFFFF, 0, 0) - if uint32(r0) == 0xFFFFFFFF { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -func set_event(ev syscall.Handle) (err error) { - r0, _, e1 := syscall.Syscall(proc_set_event.Addr(), - 1, uintptr(ev), 0, 0) - if int(r0) == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return -} - -type diff_msg struct { - pos short - lines short - chars []char_info -} - -type input_event struct { - event Event - err error -} - -var ( - orig_cursor_info console_cursor_info - orig_size coord - orig_mode dword - orig_screen syscall.Handle - back_buffer cellbuf - front_buffer cellbuf - term_size coord - input_mode = InputEsc - cursor_x = cursor_hidden - cursor_y = cursor_hidden - foreground = ColorDefault - background = ColorDefault - in syscall.Handle - out syscall.Handle - interrupt syscall.Handle - charbuf []char_info - diffbuf []diff_msg - beg_x = -1 - beg_y = -1 - beg_i = -1 - input_comm = make(chan Event) - interrupt_comm = make(chan struct{}) - cancel_comm = make(chan bool, 1) - cancel_done_comm = make(chan bool) - alt_mode_esc = false - - // these ones just to prevent heap allocs at all costs - tmp_info console_screen_buffer_info - tmp_arg dword - tmp_coord0 = coord{0, 0} - tmp_coord = coord{0, 0} - tmp_rect = small_rect{0, 0, 0, 0} -) - -func get_cursor_position(out syscall.Handle) coord { - err := get_console_screen_buffer_info(out, &tmp_info) - if err != nil { - panic(err) - } - return tmp_info.cursor_position -} - -func get_term_size(out syscall.Handle) coord { - err := get_console_screen_buffer_info(out, &tmp_info) - if err != nil { - panic(err) - } - return tmp_info.size -} - -func get_win_size(out syscall.Handle) coord { - err := get_console_screen_buffer_info(out, &tmp_info) - if err != nil { - panic(err) - } - return coord{ - x: tmp_info.window.right - tmp_info.window.left + 1, - y: tmp_info.window.bottom - tmp_info.window.top + 1, - } -} - -func update_size_maybe() { - size := get_term_size(out) - if size.x != term_size.x || size.y != term_size.y { - term_size = size - back_buffer.resize(int(size.x), int(size.y)) - front_buffer.resize(int(size.x), int(size.y)) - front_buffer.clear() - clear() - - area := int(size.x) * int(size.y) - if cap(charbuf) < area { - charbuf = make([]char_info, 0, area) - } - } -} - -var color_table_bg = []word{ - 0, // default (black) - 0, // black - background_red, - background_green, - background_red | background_green, // yellow - background_blue, - background_red | background_blue, // magenta - background_green | background_blue, // cyan - background_red | background_blue | background_green, // white -} - -var color_table_fg = []word{ - foreground_red | foreground_blue | foreground_green, // default (white) - 0, - foreground_red, - foreground_green, - foreground_red | foreground_green, // yellow - foreground_blue, - foreground_red | foreground_blue, // magenta - foreground_green | foreground_blue, // cyan - foreground_red | foreground_blue | foreground_green, // white -} - -const ( - replacement_char = '\uFFFD' - max_rune = '\U0010FFFF' - surr1 = 0xd800 - surr2 = 0xdc00 - surr3 = 0xe000 - surr_self = 0x10000 -) - -func append_diff_line(y int) int { - n := 0 - for x := 0; x < front_buffer.width; { - cell_offset := y*front_buffer.width + x - back := &back_buffer.cells[cell_offset] - front := &front_buffer.cells[cell_offset] - attr, char := cell_to_char_info(*back) - charbuf = append(charbuf, char_info{attr: attr, char: char[0]}) - *front = *back - n++ - w := runewidth.RuneWidth(back.Ch) - if w == 0 || w == 2 && runewidth.IsAmbiguousWidth(back.Ch) { - w = 1 - } - x += w - // If not CJK, fill trailing space with whitespace - if !is_cjk && w == 2 { - charbuf = append(charbuf, char_info{attr: attr, char: ' '}) - } - } - return n -} - -// compares 'back_buffer' with 'front_buffer' and prepares all changes in the form of -// 'diff_msg's in the 'diff_buf' -func prepare_diff_messages() { - // clear buffers - diffbuf = diffbuf[:0] - charbuf = charbuf[:0] - - var diff diff_msg - gbeg := 0 - for y := 0; y < front_buffer.height; y++ { - same := true - line_offset := y * front_buffer.width - for x := 0; x < front_buffer.width; x++ { - cell_offset := line_offset + x - back := &back_buffer.cells[cell_offset] - front := &front_buffer.cells[cell_offset] - if *back != *front { - same = false - break - } - } - if same && diff.lines > 0 { - diffbuf = append(diffbuf, diff) - diff = diff_msg{} - } - if !same { - beg := len(charbuf) - end := beg + append_diff_line(y) - if diff.lines == 0 { - diff.pos = short(y) - gbeg = beg - } - diff.lines++ - diff.chars = charbuf[gbeg:end] - } - } - if diff.lines > 0 { - diffbuf = append(diffbuf, diff) - diff = diff_msg{} - } -} - -func get_ct(table []word, idx int) word { - idx = idx & 0x0F - if idx >= len(table) { - idx = len(table) - 1 - } - return table[idx] -} - -func cell_to_char_info(c Cell) (attr word, wc [2]wchar) { - attr = get_ct(color_table_fg, int(c.Fg)) | get_ct(color_table_bg, int(c.Bg)) - if c.Fg&AttrReverse|c.Bg&AttrReverse != 0 { - attr = (attr&0xF0)>>4 | (attr&0x0F)<<4 - } - if c.Fg&AttrBold != 0 { - attr |= foreground_intensity - } - if c.Bg&AttrBold != 0 { - attr |= background_intensity - } - - r0, r1 := utf16.EncodeRune(c.Ch) - if r0 == 0xFFFD { - wc[0] = wchar(c.Ch) - wc[1] = ' ' - } else { - wc[0] = wchar(r0) - wc[1] = wchar(r1) - } - return -} - -func move_cursor(x, y int) { - err := set_console_cursor_position(out, coord{short(x), short(y)}) - if err != nil { - panic(err) - } -} - -func show_cursor(visible bool) { - var v int32 - if visible { - v = 1 - } - - var info console_cursor_info - info.size = 100 - info.visible = v - err := set_console_cursor_info(out, &info) - if err != nil { - panic(err) - } -} - -func clear() { - var err error - attr, char := cell_to_char_info(Cell{ - ' ', - foreground, - background, - }) - - area := int(term_size.x) * int(term_size.y) - err = fill_console_output_attribute(out, attr, area) - if err != nil { - panic(err) - } - err = fill_console_output_character(out, char[0], area) - if err != nil { - panic(err) - } - if !is_cursor_hidden(cursor_x, cursor_y) { - move_cursor(cursor_x, cursor_y) - } -} - -func key_event_record_to_event(r *key_event_record) (Event, bool) { - if r.key_down == 0 { - return Event{}, false - } - - e := Event{Type: EventKey} - if input_mode&InputAlt != 0 { - if alt_mode_esc { - e.Mod = ModAlt - alt_mode_esc = false - } - if r.control_key_state&(left_alt_pressed|right_alt_pressed) != 0 { - e.Mod = ModAlt - } - } - - ctrlpressed := r.control_key_state&(left_ctrl_pressed|right_ctrl_pressed) != 0 - - if r.virtual_key_code >= vk_f1 && r.virtual_key_code <= vk_f12 { - switch r.virtual_key_code { - case vk_f1: - e.Key = KeyF1 - case vk_f2: - e.Key = KeyF2 - case vk_f3: - e.Key = KeyF3 - case vk_f4: - e.Key = KeyF4 - case vk_f5: - e.Key = KeyF5 - case vk_f6: - e.Key = KeyF6 - case vk_f7: - e.Key = KeyF7 - case vk_f8: - e.Key = KeyF8 - case vk_f9: - e.Key = KeyF9 - case vk_f10: - e.Key = KeyF10 - case vk_f11: - e.Key = KeyF11 - case vk_f12: - e.Key = KeyF12 - default: - panic("unreachable") - } - - return e, true - } - - if r.virtual_key_code <= vk_delete { - switch r.virtual_key_code { - case vk_insert: - e.Key = KeyInsert - case vk_delete: - e.Key = KeyDelete - case vk_home: - e.Key = KeyHome - case vk_end: - e.Key = KeyEnd - case vk_pgup: - e.Key = KeyPgup - case vk_pgdn: - e.Key = KeyPgdn - case vk_arrow_up: - e.Key = KeyArrowUp - case vk_arrow_down: - e.Key = KeyArrowDown - case vk_arrow_left: - e.Key = KeyArrowLeft - case vk_arrow_right: - e.Key = KeyArrowRight - case vk_backspace: - if ctrlpressed { - e.Key = KeyBackspace2 - } else { - e.Key = KeyBackspace - } - case vk_tab: - e.Key = KeyTab - case vk_enter: - e.Key = KeyEnter - case vk_esc: - switch { - case input_mode&InputEsc != 0: - e.Key = KeyEsc - case input_mode&InputAlt != 0: - alt_mode_esc = true - return Event{}, false - } - case vk_space: - if ctrlpressed { - // manual return here, because KeyCtrlSpace is zero - e.Key = KeyCtrlSpace - return e, true - } else { - e.Key = KeySpace - } - } - - if e.Key != 0 { - return e, true - } - } - - if ctrlpressed { - if Key(r.unicode_char) >= KeyCtrlA && Key(r.unicode_char) <= KeyCtrlRsqBracket { - e.Key = Key(r.unicode_char) - if input_mode&InputAlt != 0 && e.Key == KeyEsc { - alt_mode_esc = true - return Event{}, false - } - return e, true - } - switch r.virtual_key_code { - case 192, 50: - // manual return here, because KeyCtrl2 is zero - e.Key = KeyCtrl2 - return e, true - case 51: - if input_mode&InputAlt != 0 { - alt_mode_esc = true - return Event{}, false - } - e.Key = KeyCtrl3 - case 52: - e.Key = KeyCtrl4 - case 53: - e.Key = KeyCtrl5 - case 54: - e.Key = KeyCtrl6 - case 189, 191, 55: - e.Key = KeyCtrl7 - case 8, 56: - e.Key = KeyCtrl8 - } - - if e.Key != 0 { - return e, true - } - } - - if r.unicode_char != 0 { - e.Ch = rune(r.unicode_char) - return e, true - } - - return Event{}, false -} - -func input_event_producer() { - var r input_record - var err error - var last_button Key - var last_button_pressed Key - var last_state = dword(0) - var last_x, last_y = -1, -1 - handles := []syscall.Handle{in, interrupt} - for { - err = wait_for_multiple_objects(handles) - if err != nil { - input_comm <- Event{Type: EventError, Err: err} - } - - select { - case <-cancel_comm: - cancel_done_comm <- true - return - default: - } - - err = read_console_input(in, &r) - if err != nil { - input_comm <- Event{Type: EventError, Err: err} - } - - switch r.event_type { - case key_event: - kr := (*key_event_record)(unsafe.Pointer(&r.event)) - ev, ok := key_event_record_to_event(kr) - if ok { - for i := 0; i < int(kr.repeat_count); i++ { - input_comm <- ev - } - } - case window_buffer_size_event: - sr := *(*window_buffer_size_record)(unsafe.Pointer(&r.event)) - input_comm <- Event{ - Type: EventResize, - Width: int(sr.size.x), - Height: int(sr.size.y), - } - case mouse_event: - mr := *(*mouse_event_record)(unsafe.Pointer(&r.event)) - ev := Event{Type: EventMouse} - switch mr.event_flags { - case 0, 2: - // single or double click - cur_state := mr.button_state - switch { - case last_state&mouse_lmb == 0 && cur_state&mouse_lmb != 0: - last_button = MouseLeft - last_button_pressed = last_button - case last_state&mouse_rmb == 0 && cur_state&mouse_rmb != 0: - last_button = MouseRight - last_button_pressed = last_button - case last_state&mouse_mmb == 0 && cur_state&mouse_mmb != 0: - last_button = MouseMiddle - last_button_pressed = last_button - case last_state&mouse_lmb != 0 && cur_state&mouse_lmb == 0: - last_button = MouseRelease - case last_state&mouse_rmb != 0 && cur_state&mouse_rmb == 0: - last_button = MouseRelease - case last_state&mouse_mmb != 0 && cur_state&mouse_mmb == 0: - last_button = MouseRelease - default: - last_state = cur_state - continue - } - last_state = cur_state - ev.Key = last_button - last_x, last_y = int(mr.mouse_pos.x), int(mr.mouse_pos.y) - ev.MouseX = last_x - ev.MouseY = last_y - case 1: - // mouse motion - x, y := int(mr.mouse_pos.x), int(mr.mouse_pos.y) - if last_state != 0 && (last_x != x || last_y != y) { - ev.Key = last_button_pressed - ev.Mod = ModMotion - ev.MouseX = x - ev.MouseY = y - last_x, last_y = x, y - } else { - ev.Type = EventNone - } - case 4: - // mouse wheel - n := int16(mr.button_state >> 16) - if n > 0 { - ev.Key = MouseWheelUp - } else { - ev.Key = MouseWheelDown - } - last_x, last_y = int(mr.mouse_pos.x), int(mr.mouse_pos.y) - ev.MouseX = last_x - ev.MouseY = last_y - default: - ev.Type = EventNone - } - if ev.Type != EventNone { - input_comm <- ev - } - } - } -} diff --git a/vendor/github.com/nsf/termbox-go/terminfo.go b/vendor/github.com/nsf/termbox-go/terminfo.go deleted file mode 100644 index 35dbd70b8941..000000000000 --- a/vendor/github.com/nsf/termbox-go/terminfo.go +++ /dev/null @@ -1,221 +0,0 @@ -// +build !windows -// This file contains a simple and incomplete implementation of the terminfo -// database. Information was taken from the ncurses manpages term(5) and -// terminfo(5). Currently, only the string capabilities for special keys and for -// functions without parameters are actually used. Colors are still done with -// ANSI escape sequences. Other special features that are not (yet?) supported -// are reading from ~/.terminfo, the TERMINFO_DIRS variable, Berkeley database -// format and extended capabilities. - -package termbox - -import ( - "bytes" - "encoding/binary" - "encoding/hex" - "errors" - "fmt" - "io/ioutil" - "os" - "strings" -) - -const ( - ti_magic = 0432 - ti_header_length = 12 - ti_mouse_enter = "\x1b[?1000h\x1b[?1002h\x1b[?1015h\x1b[?1006h" - ti_mouse_leave = "\x1b[?1006l\x1b[?1015l\x1b[?1002l\x1b[?1000l" -) - -func load_terminfo() ([]byte, error) { - var data []byte - var err error - - term := os.Getenv("TERM") - if term == "" { - return nil, fmt.Errorf("termbox: TERM not set") - } - - // The following behaviour follows the one described in terminfo(5) as - // distributed by ncurses. - - terminfo := os.Getenv("TERMINFO") - if terminfo != "" { - // if TERMINFO is set, no other directory should be searched - return ti_try_path(terminfo) - } - - // next, consider ~/.terminfo - home := os.Getenv("HOME") - if home != "" { - data, err = ti_try_path(home + "/.terminfo") - if err == nil { - return data, nil - } - } - - // next, TERMINFO_DIRS - dirs := os.Getenv("TERMINFO_DIRS") - if dirs != "" { - for _, dir := range strings.Split(dirs, ":") { - if dir == "" { - // "" -> "/usr/share/terminfo" - dir = "/usr/share/terminfo" - } - data, err = ti_try_path(dir) - if err == nil { - return data, nil - } - } - } - - // fall back to /usr/share/terminfo - return ti_try_path("/usr/share/terminfo") -} - -func ti_try_path(path string) (data []byte, err error) { - // load_terminfo already made sure it is set - term := os.Getenv("TERM") - - // first try, the typical *nix path - terminfo := path + "/" + term[0:1] + "/" + term - data, err = ioutil.ReadFile(terminfo) - if err == nil { - return - } - - // fallback to darwin specific dirs structure - terminfo = path + "/" + hex.EncodeToString([]byte(term[:1])) + "/" + term - data, err = ioutil.ReadFile(terminfo) - return -} - -func setup_term_builtin() error { - name := os.Getenv("TERM") - if name == "" { - return errors.New("termbox: TERM environment variable not set") - } - - for _, t := range terms { - if t.name == name { - keys = t.keys - funcs = t.funcs - return nil - } - } - - compat_table := []struct { - partial string - keys []string - funcs []string - }{ - {"xterm", xterm_keys, xterm_funcs}, - {"rxvt", rxvt_unicode_keys, rxvt_unicode_funcs}, - {"linux", linux_keys, linux_funcs}, - {"Eterm", eterm_keys, eterm_funcs}, - {"screen", screen_keys, screen_funcs}, - // let's assume that 'cygwin' is xterm compatible - {"cygwin", xterm_keys, xterm_funcs}, - {"st", xterm_keys, xterm_funcs}, - } - - // try compatibility variants - for _, it := range compat_table { - if strings.Contains(name, it.partial) { - keys = it.keys - funcs = it.funcs - return nil - } - } - - return errors.New("termbox: unsupported terminal") -} - -func setup_term() (err error) { - var data []byte - var header [6]int16 - var str_offset, table_offset int16 - - data, err = load_terminfo() - if err != nil { - return setup_term_builtin() - } - - rd := bytes.NewReader(data) - // 0: magic number, 1: size of names section, 2: size of boolean section, 3: - // size of numbers section (in integers), 4: size of the strings section (in - // integers), 5: size of the string table - - err = binary.Read(rd, binary.LittleEndian, header[:]) - if err != nil { - return - } - - if (header[1]+header[2])%2 != 0 { - // old quirk to align everything on word boundaries - header[2] += 1 - } - str_offset = ti_header_length + header[1] + header[2] + 2*header[3] - table_offset = str_offset + 2*header[4] - - keys = make([]string, 0xFFFF-key_min) - for i, _ := range keys { - keys[i], err = ti_read_string(rd, str_offset+2*ti_keys[i], table_offset) - if err != nil { - return - } - } - funcs = make([]string, t_max_funcs) - // the last two entries are reserved for mouse. because the table offset is - // not there, the two entries have to fill in manually - for i, _ := range funcs[:len(funcs)-2] { - funcs[i], err = ti_read_string(rd, str_offset+2*ti_funcs[i], table_offset) - if err != nil { - return - } - } - funcs[t_max_funcs-2] = ti_mouse_enter - funcs[t_max_funcs-1] = ti_mouse_leave - return nil -} - -func ti_read_string(rd *bytes.Reader, str_off, table int16) (string, error) { - var off int16 - - _, err := rd.Seek(int64(str_off), 0) - if err != nil { - return "", err - } - err = binary.Read(rd, binary.LittleEndian, &off) - if err != nil { - return "", err - } - _, err = rd.Seek(int64(table+off), 0) - if err != nil { - return "", err - } - var bs []byte - for { - b, err := rd.ReadByte() - if err != nil { - return "", err - } - if b == byte(0x00) { - break - } - bs = append(bs, b) - } - return string(bs), nil -} - -// "Maps" the function constants from termbox.go to the number of the respective -// string capability in the terminfo file. Taken from (ncurses) term.h. -var ti_funcs = []int16{ - 28, 40, 16, 13, 5, 39, 36, 27, 26, 34, 89, 88, -} - -// Same as above for the special keys. -var ti_keys = []int16{ - 66, 68 /* apparently not a typo; 67 is F10 for whatever reason */, 69, 70, - 71, 72, 73, 74, 75, 67, 216, 217, 77, 59, 76, 164, 82, 81, 87, 61, 79, 83, -} diff --git a/vendor/github.com/nsf/termbox-go/terminfo_builtin.go b/vendor/github.com/nsf/termbox-go/terminfo_builtin.go deleted file mode 100644 index a94866067bae..000000000000 --- a/vendor/github.com/nsf/termbox-go/terminfo_builtin.go +++ /dev/null @@ -1,64 +0,0 @@ -// +build !windows - -package termbox - -// Eterm -var eterm_keys = []string{ - "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", -} -var eterm_funcs = []string{ - "\x1b7\x1b[?47h", "\x1b[2J\x1b[?47l\x1b8", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "", "", "", "", -} - -// screen -var screen_keys = []string{ - "\x1bOP", "\x1bOQ", "\x1bOR", "\x1bOS", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[1~", "\x1b[4~", "\x1b[5~", "\x1b[6~", "\x1bOA", "\x1bOB", "\x1bOD", "\x1bOC", -} -var screen_funcs = []string{ - "\x1b[?1049h", "\x1b[?1049l", "\x1b[34h\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b[?1h\x1b=", "\x1b[?1l\x1b>", ti_mouse_enter, ti_mouse_leave, -} - -// xterm -var xterm_keys = []string{ - "\x1bOP", "\x1bOQ", "\x1bOR", "\x1bOS", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1bOH", "\x1bOF", "\x1b[5~", "\x1b[6~", "\x1bOA", "\x1bOB", "\x1bOD", "\x1bOC", -} -var xterm_funcs = []string{ - "\x1b[?1049h", "\x1b[?1049l", "\x1b[?12l\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b(B\x1b[m", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b[?1h\x1b=", "\x1b[?1l\x1b>", ti_mouse_enter, ti_mouse_leave, -} - -// rxvt-unicode -var rxvt_unicode_keys = []string{ - "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", -} -var rxvt_unicode_funcs = []string{ - "\x1b[?1049h", "\x1b[r\x1b[?1049l", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x1b(B", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b=", "\x1b>", ti_mouse_enter, ti_mouse_leave, -} - -// linux -var linux_keys = []string{ - "\x1b[[A", "\x1b[[B", "\x1b[[C", "\x1b[[D", "\x1b[[E", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[1~", "\x1b[4~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", -} -var linux_funcs = []string{ - "", "", "\x1b[?25h\x1b[?0c", "\x1b[?25l\x1b[?1c", "\x1b[H\x1b[J", "\x1b[0;10m", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "", "", "", "", -} - -// rxvt-256color -var rxvt_256color_keys = []string{ - "\x1b[11~", "\x1b[12~", "\x1b[13~", "\x1b[14~", "\x1b[15~", "\x1b[17~", "\x1b[18~", "\x1b[19~", "\x1b[20~", "\x1b[21~", "\x1b[23~", "\x1b[24~", "\x1b[2~", "\x1b[3~", "\x1b[7~", "\x1b[8~", "\x1b[5~", "\x1b[6~", "\x1b[A", "\x1b[B", "\x1b[D", "\x1b[C", -} -var rxvt_256color_funcs = []string{ - "\x1b7\x1b[?47h", "\x1b[2J\x1b[?47l\x1b8", "\x1b[?25h", "\x1b[?25l", "\x1b[H\x1b[2J", "\x1b[m\x0f", "\x1b[4m", "\x1b[1m", "\x1b[5m", "\x1b[7m", "\x1b=", "\x1b>", ti_mouse_enter, ti_mouse_leave, -} - -var terms = []struct { - name string - keys []string - funcs []string -}{ - {"Eterm", eterm_keys, eterm_funcs}, - {"screen", screen_keys, screen_funcs}, - {"xterm", xterm_keys, xterm_funcs}, - {"rxvt-unicode", rxvt_unicode_keys, rxvt_unicode_funcs}, - {"linux", linux_keys, linux_funcs}, - {"rxvt-256color", rxvt_256color_keys, rxvt_256color_funcs}, -} diff --git a/vendor/github.com/olekukonko/tablewriter/LICENCE.md b/vendor/github.com/olekukonko/tablewriter/LICENSE.md similarity index 98% rename from vendor/github.com/olekukonko/tablewriter/LICENCE.md rename to vendor/github.com/olekukonko/tablewriter/LICENSE.md index 1fd8484253fb..a0769b5c1581 100644 --- a/vendor/github.com/olekukonko/tablewriter/LICENCE.md +++ b/vendor/github.com/olekukonko/tablewriter/LICENSE.md @@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file +THE SOFTWARE. diff --git a/vendor/github.com/olekukonko/tablewriter/README.md b/vendor/github.com/olekukonko/tablewriter/README.md index 805330adcd37..92d71ed48b18 100644 --- a/vendor/github.com/olekukonko/tablewriter/README.md +++ b/vendor/github.com/olekukonko/tablewriter/README.md @@ -1,11 +1,13 @@ ASCII Table Writer ========= -[![Build Status](https://travis-ci.org/olekukonko/tablewriter.png?branch=master)](https://travis-ci.org/olekukonko/tablewriter) [![Total views](https://sourcegraph.com/api/repos/github.com/olekukonko/tablewriter/counters/views.png)](https://sourcegraph.com/github.com/olekukonko/tablewriter) +[![Build Status](https://travis-ci.org/olekukonko/tablewriter.png?branch=master)](https://travis-ci.org/olekukonko/tablewriter) +[![Total views](https://img.shields.io/sourcegraph/rrc/github.com/olekukonko/tablewriter.svg)](https://sourcegraph.com/github.com/olekukonko/tablewriter) +[![Godoc](https://godoc.org/github.com/olekukonko/tablewriter?status.svg)](https://godoc.org/github.com/olekukonko/tablewriter) Generate ASCII table on the fly ... Installation is simple as - go get github.com/olekukonko/tablewriter + go get github.com/olekukonko/tablewriter #### Features @@ -22,7 +24,8 @@ Generate ASCII table on the fly ... Installation is simple as - Enable or disable table border - Set custom footer support - Optional identical cells merging - +- Set custom caption +- Optional reflowing of paragrpahs in multi-line cells. #### Example 1 - Basic ```go @@ -75,21 +78,21 @@ table.Render() ``` DATE | DESCRIPTION | CV2 | AMOUNT -+----------+--------------------------+-------+---------+ +-----------+--------------------------+-------+---------- 1/1/2014 | Domain name | 2233 | $10.98 1/1/2014 | January Hosting | 2233 | $54.95 1/4/2014 | February Hosting | 2233 | $51.00 1/4/2014 | February Extra Bandwidth | 2233 | $30.00 -+----------+--------------------------+-------+---------+ +-----------+--------------------------+-------+---------- TOTAL | $146 93 - +-------+---------+ + --------+---------- ``` #### Example 3 - CSV ```go -table, _ := tablewriter.NewCSV(os.Stdout, "test_info.csv", true) +table, _ := tablewriter.NewCSV(os.Stdout, "testdata/test_info.csv", true) table.SetAlignment(tablewriter.ALIGN_LEFT) // Set Alignment table.Render() ``` @@ -107,12 +110,12 @@ table.Render() #### Example 4 - Custom Separator ```go -table, _ := tablewriter.NewCSV(os.Stdout, "test.csv", true) +table, _ := tablewriter.NewCSV(os.Stdout, "testdata/test.csv", true) table.SetRowLine(true) // Enable row line // Change table lines table.SetCenterSeparator("*") -table.SetColumnSeparator("‡") +table.SetColumnSeparator("╪") table.SetRowSeparator("-") table.SetAlignment(tablewriter.ALIGN_LEFT) @@ -132,7 +135,7 @@ table.Render() *------------*-----------*---------* ``` -##### Example 5 - Markdown Format +#### Example 5 - Markdown Format ```go data := [][]string{ []string{"1/1/2014", "Domain name", "2233", "$10.98"}, @@ -194,11 +197,109 @@ table.Render() +----------+--------------------------+-------+---------+ ``` + +#### Table with color +```go +data := [][]string{ + []string{"1/1/2014", "Domain name", "2233", "$10.98"}, + []string{"1/1/2014", "January Hosting", "2233", "$54.95"}, + []string{"1/4/2014", "February Hosting", "2233", "$51.00"}, + []string{"1/4/2014", "February Extra Bandwidth", "2233", "$30.00"}, +} + +table := tablewriter.NewWriter(os.Stdout) +table.SetHeader([]string{"Date", "Description", "CV2", "Amount"}) +table.SetFooter([]string{"", "", "Total", "$146.93"}) // Add Footer +table.SetBorder(false) // Set Border to false + +table.SetHeaderColor(tablewriter.Colors{tablewriter.Bold, tablewriter.BgGreenColor}, + tablewriter.Colors{tablewriter.FgHiRedColor, tablewriter.Bold, tablewriter.BgBlackColor}, + tablewriter.Colors{tablewriter.BgRedColor, tablewriter.FgWhiteColor}, + tablewriter.Colors{tablewriter.BgCyanColor, tablewriter.FgWhiteColor}) + +table.SetColumnColor(tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiRedColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiBlackColor}, + tablewriter.Colors{tablewriter.Bold, tablewriter.FgBlackColor}) + +table.SetFooterColor(tablewriter.Colors{}, tablewriter.Colors{}, + tablewriter.Colors{tablewriter.Bold}, + tablewriter.Colors{tablewriter.FgHiRedColor}) + +table.AppendBulk(data) +table.Render() +``` + +#### Table with color Output +![Table with Color](https://cloud.githubusercontent.com/assets/6460392/21101956/bbc7b356-c0a1-11e6-9f36-dba694746efc.png) + +#### Example 6 - Set table caption +```go +data := [][]string{ + []string{"A", "The Good", "500"}, + []string{"B", "The Very very Bad Man", "288"}, + []string{"C", "The Ugly", "120"}, + []string{"D", "The Gopher", "800"}, +} + +table := tablewriter.NewWriter(os.Stdout) +table.SetHeader([]string{"Name", "Sign", "Rating"}) +table.SetCaption(true, "Movie ratings.") + +for _, v := range data { + table.Append(v) +} +table.Render() // Send output +``` + +Note: Caption text will wrap with total width of rendered table. + +##### Output 6 +``` ++------+-----------------------+--------+ +| NAME | SIGN | RATING | ++------+-----------------------+--------+ +| A | The Good | 500 | +| B | The Very very Bad Man | 288 | +| C | The Ugly | 120 | +| D | The Gopher | 800 | ++------+-----------------------+--------+ +Movie ratings. +``` + +#### Render table into a string + +Instead of rendering the table to `io.Stdout` you can also render it into a string. Go 1.10 introduced the `strings.Builder` type which implements the `io.Writer` interface and can therefore be used for this task. Example: + +```go +package main + +import ( + "strings" + "fmt" + + "github.com/olekukonko/tablewriter" +) + +func main() { + tableString := &strings.Builder{} + table := tablewriter.NewWriter(tableString) + + /* + * Code to fill the table + */ + + table.Render() + + fmt.Println(tableString.String()) +} +``` + #### TODO - ~~Import Directly from CSV~~ - `done` - ~~Support for `SetFooter`~~ - `done` - ~~Support for `SetBorder`~~ - `done` - ~~Support table with uneven rows~~ - `done` -- Support custom alignment +- ~~Support custom alignment~~ - General Improvement & Optimisation - `NewHTML` Parse table from HTML diff --git a/vendor/github.com/olekukonko/tablewriter/table.go b/vendor/github.com/olekukonko/tablewriter/table.go index 3314bfba5cf8..3cf09969e639 100644 --- a/vendor/github.com/olekukonko/tablewriter/table.go +++ b/vendor/github.com/olekukonko/tablewriter/table.go @@ -36,8 +36,8 @@ const ( ) var ( - decimal = regexp.MustCompile(`^-*\d*\.?\d*$`) - percent = regexp.MustCompile(`^-*\d*\.?\d*$%$`) + decimal = regexp.MustCompile(`^-?(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$`) + percent = regexp.MustCompile(`^-?\d+\.?\d*$%$`) ) type Border struct { @@ -53,10 +53,13 @@ type Table struct { lines [][][]string cs map[int]int rs map[int]int - headers []string - footers []string + headers [][]string + footers [][]string + caption bool + captionText string autoFmt bool autoWrap bool + reflowText bool mW int pCenter string pRow string @@ -72,40 +75,51 @@ type Table struct { hdrLine bool borders Border colSize int + headerParams []string + columnsParams []string + footerParams []string + columnsAlign []int } // Start New Table // Take io.Writer Directly func NewWriter(writer io.Writer) *Table { t := &Table{ - out: writer, - rows: [][]string{}, - lines: [][][]string{}, - cs: make(map[int]int), - rs: make(map[int]int), - headers: []string{}, - footers: []string{}, - autoFmt: true, - autoWrap: true, - mW: MAX_ROW_WIDTH, - pCenter: CENTER, - pRow: ROW, - pColumn: COLUMN, - tColumn: -1, - tRow: -1, - hAlign: ALIGN_DEFAULT, - fAlign: ALIGN_DEFAULT, - align: ALIGN_DEFAULT, - newLine: NEWLINE, - rowLine: false, - hdrLine: true, - borders: Border{Left: true, Right: true, Bottom: true, Top: true}, - colSize: -1} + out: writer, + rows: [][]string{}, + lines: [][][]string{}, + cs: make(map[int]int), + rs: make(map[int]int), + headers: [][]string{}, + footers: [][]string{}, + caption: false, + captionText: "Table caption.", + autoFmt: true, + autoWrap: true, + reflowText: true, + mW: MAX_ROW_WIDTH, + pCenter: CENTER, + pRow: ROW, + pColumn: COLUMN, + tColumn: -1, + tRow: -1, + hAlign: ALIGN_DEFAULT, + fAlign: ALIGN_DEFAULT, + align: ALIGN_DEFAULT, + newLine: NEWLINE, + rowLine: false, + hdrLine: true, + borders: Border{Left: true, Right: true, Bottom: true, Top: true}, + colSize: -1, + headerParams: []string{}, + columnsParams: []string{}, + footerParams: []string{}, + columnsAlign: []int{}} return t } // Render table output -func (t Table) Render() { +func (t *Table) Render() { if t.borders.Top { t.printLine(true) } @@ -115,20 +129,27 @@ func (t Table) Render() { } else { t.printRows() } - if !t.rowLine && t.borders.Bottom { t.printLine(true) } t.printFooter() + if t.caption { + t.printCaption() + } } +const ( + headerRowIdx = -1 + footerRowIdx = -2 +) + // Set table header func (t *Table) SetHeader(keys []string) { t.colSize = len(keys) for i, v := range keys { - t.parseDimension(v, i, -1) - t.headers = append(t.headers, v) + lines := t.parseDimension(v, i, headerRowIdx) + t.headers = append(t.headers, lines) } } @@ -136,8 +157,16 @@ func (t *Table) SetHeader(keys []string) { func (t *Table) SetFooter(keys []string) { //t.colSize = len(keys) for i, v := range keys { - t.parseDimension(v, i, -1) - t.footers = append(t.footers, v) + lines := t.parseDimension(v, i, footerRowIdx) + t.footers = append(t.footers, lines) + } +} + +// Set table Caption +func (t *Table) SetCaption(caption bool, captionText ...string) { + t.caption = caption + if len(captionText) == 1 { + t.captionText = captionText[0] } } @@ -151,11 +180,21 @@ func (t *Table) SetAutoWrapText(auto bool) { t.autoWrap = auto } +// Turn automatic reflowing of multiline text when rewrapping. Default is on (true). +func (t *Table) SetReflowDuringAutoWrap(auto bool) { + t.reflowText = auto +} + // Set the Default column width func (t *Table) SetColWidth(width int) { t.mW = width } +// Set the minimal width for a column +func (t *Table) SetColMinWidth(column int, width int) { + t.cs[column] = width +} + // Set the Column Separator func (t *Table) SetColumnSeparator(sep string) { t.pColumn = sep @@ -186,6 +225,22 @@ func (t *Table) SetAlignment(align int) { t.align = align } +func (t *Table) SetColumnAlignment(keys []int) { + for _, v := range keys { + switch v { + case ALIGN_CENTER: + break + case ALIGN_LEFT: + break + case ALIGN_RIGHT: + break + default: + v = ALIGN_DEFAULT + } + t.columnsAlign = append(t.columnsAlign, v) + } +} + // Set New Line func (t *Table) SetNewLine(nl string) { t.newLine = nl @@ -249,16 +304,44 @@ func (t *Table) AppendBulk(rows [][]string) { } } +// NumLines to get the number of lines +func (t *Table) NumLines() int { + return len(t.lines) +} + +// Clear rows +func (t *Table) ClearRows() { + t.lines = [][][]string{} +} + +// Clear footer +func (t *Table) ClearFooter() { + t.footers = [][]string{} +} + +// Center based on position and border. +func (t *Table) center(i int) string { + if i == -1 && !t.borders.Left { + return t.pRow + } + + if i == len(t.cs)-1 && !t.borders.Right { + return t.pRow + } + + return t.pCenter +} + // Print line based on row width -func (t Table) printLine(nl bool) { - fmt.Fprint(t.out, t.pCenter) +func (t *Table) printLine(nl bool) { + fmt.Fprint(t.out, t.center(-1)) for i := 0; i < len(t.cs); i++ { v := t.cs[i] fmt.Fprintf(t.out, "%s%s%s%s", t.pRow, strings.Repeat(string(t.pRow), v), t.pRow, - t.pCenter) + t.center(i)) } if nl { fmt.Fprint(t.out, t.newLine) @@ -266,7 +349,7 @@ func (t Table) printLine(nl bool) { } // Print line based on row width with our without cell separator -func (t Table) printLineOptionalCellSeparators(nl bool, displayCellSeparator []bool) { +func (t *Table) printLineOptionalCellSeparators(nl bool, displayCellSeparator []bool) { fmt.Fprint(t.out, t.pCenter) for i := 0; i < len(t.cs); i++ { v := t.cs[i] @@ -303,43 +386,64 @@ func pad(align int) func(string, string, int) string { } // Print heading information -func (t Table) printHeading() { +func (t *Table) printHeading() { // Check if headers is available if len(t.headers) < 1 { return } - // Check if border is set - // Replace with space if not set - fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE)) - // Identify last column end := len(t.cs) - 1 // Get pad function padFunc := pad(t.hAlign) - // Print Heading column - for i := 0; i <= end; i++ { - v := t.cs[i] - h := t.headers[i] - if t.autoFmt { - h = Title(h) + // Checking for ANSI escape sequences for header + is_esc_seq := false + if len(t.headerParams) > 0 { + is_esc_seq = true + } + + // Maximum height. + max := t.rs[headerRowIdx] + + // Print Heading + for x := 0; x < max; x++ { + // Check if border is set + // Replace with space if not set + fmt.Fprint(t.out, ConditionString(t.borders.Left, t.pColumn, SPACE)) + + for y := 0; y <= end; y++ { + v := t.cs[y] + h := "" + if y < len(t.headers) && x < len(t.headers[y]) { + h = t.headers[y][x] + } + if t.autoFmt { + h = Title(h) + } + pad := ConditionString((y == end && !t.borders.Left), SPACE, t.pColumn) + + if is_esc_seq { + fmt.Fprintf(t.out, " %s %s", + format(padFunc(h, SPACE, v), + t.headerParams[y]), pad) + } else { + fmt.Fprintf(t.out, " %s %s", + padFunc(h, SPACE, v), + pad) + } } - pad := ConditionString((i == end && !t.borders.Left), SPACE, t.pColumn) - fmt.Fprintf(t.out, " %s %s", - padFunc(h, SPACE, v), - pad) + // Next line + fmt.Fprint(t.out, t.newLine) } - // Next line - fmt.Fprint(t.out, t.newLine) if t.hdrLine { t.printLine(true) } } // Print heading information -func (t Table) printFooter() { +func (t *Table) printFooter() { // Check if headers is available if len(t.footers) < 1 { return @@ -349,9 +453,6 @@ func (t Table) printFooter() { if !t.borders.Bottom { t.printLine(true) } - // Check if border is set - // Replace with space if not set - fmt.Fprint(t.out, ConditionString(t.borders.Bottom, t.pColumn, SPACE)) // Identify last column end := len(t.cs) - 1 @@ -359,25 +460,56 @@ func (t Table) printFooter() { // Get pad function padFunc := pad(t.fAlign) - // Print Heading column - for i := 0; i <= end; i++ { - v := t.cs[i] - f := t.footers[i] - if t.autoFmt { - f = Title(f) - } - pad := ConditionString((i == end && !t.borders.Top), SPACE, t.pColumn) + // Checking for ANSI escape sequences for header + is_esc_seq := false + if len(t.footerParams) > 0 { + is_esc_seq = true + } - if len(t.footers[i]) == 0 { - pad = SPACE + // Maximum height. + max := t.rs[footerRowIdx] + + // Print Footer + erasePad := make([]bool, len(t.footers)) + for x := 0; x < max; x++ { + // Check if border is set + // Replace with space if not set + fmt.Fprint(t.out, ConditionString(t.borders.Bottom, t.pColumn, SPACE)) + + for y := 0; y <= end; y++ { + v := t.cs[y] + f := "" + if y < len(t.footers) && x < len(t.footers[y]) { + f = t.footers[y][x] + } + if t.autoFmt { + f = Title(f) + } + pad := ConditionString((y == end && !t.borders.Top), SPACE, t.pColumn) + + if erasePad[y] || (x == 0 && len(f) == 0) { + pad = SPACE + erasePad[y] = true + } + + if is_esc_seq { + fmt.Fprintf(t.out, " %s %s", + format(padFunc(f, SPACE, v), + t.footerParams[y]), pad) + } else { + fmt.Fprintf(t.out, " %s %s", + padFunc(f, SPACE, v), + pad) + } + + //fmt.Fprintf(t.out, " %s %s", + // padFunc(f, SPACE, v), + // pad) } - fmt.Fprintf(t.out, " %s %s", - padFunc(f, SPACE, v), - pad) + // Next line + fmt.Fprint(t.out, t.newLine) + //t.printLine(true) } - // Next line - fmt.Fprint(t.out, t.newLine) - //t.printLine(true) hasPrinted := false @@ -385,7 +517,7 @@ func (t Table) printFooter() { v := t.cs[i] pad := t.pRow center := t.pCenter - length := len(t.footers[i]) + length := len(t.footers[i][0]) if length > 0 { hasPrinted = true @@ -398,6 +530,9 @@ func (t Table) printFooter() { // Print first junction if i == 0 { + if length > 0 && !t.borders.Left { + center = t.pRow + } fmt.Fprint(t.out, center) } @@ -405,16 +540,27 @@ func (t Table) printFooter() { if length == 0 { pad = SPACE } - // Ignore left space of it has printed before + // Ignore left space as it has printed before if hasPrinted || t.borders.Left { pad = t.pRow center = t.pCenter } + // Change Center end position + if center != SPACE { + if i == end && !t.borders.Right { + center = t.pRow + } + } + // Change Center start position if center == SPACE { - if i < end && len(t.footers[i+1]) != 0 { - center = t.pCenter + if i < end && len(t.footers[i+1][0]) != 0 { + if !t.borders.Left { + center = t.pRow + } else { + center = t.pCenter + } } } @@ -428,22 +574,53 @@ func (t Table) printFooter() { } fmt.Fprint(t.out, t.newLine) +} + +// Print caption text +func (t Table) printCaption() { + width := t.getTableWidth() + paragraph, _ := WrapString(t.captionText, width) + for linecount := 0; linecount < len(paragraph); linecount++ { + fmt.Fprintln(t.out, paragraph[linecount]) + } +} + +// Calculate the total number of characters in a row +func (t Table) getTableWidth() int { + var chars int + for _, v := range t.cs { + chars += v + } + + // Add chars, spaces, seperators to calculate the total width of the table. + // ncols := t.colSize + // spaces := ncols * 2 + // seps := ncols + 1 + return (chars + (3 * t.colSize) + 2) } func (t Table) printRows() { for i, lines := range t.lines { t.printRow(lines, i) } +} +func (t *Table) fillAlignment(num int) { + if len(t.columnsAlign) < num { + t.columnsAlign = make([]int, num) + for i := range t.columnsAlign { + t.columnsAlign[i] = t.align + } + } } // Print Row Information // Adjust column alignment based on type -func (t Table) printRow(columns [][]string, colKey int) { +func (t *Table) printRow(columns [][]string, rowIdx int) { // Get Maximum Height - max := t.rs[colKey] + max := t.rs[rowIdx] total := len(columns) // TODO Fix uneven col size @@ -455,9 +632,15 @@ func (t Table) printRow(columns [][]string, colKey int) { //} // Pad Each Height - // pads := []int{} pads := []int{} + // Checking for ANSI escape sequences for columns + is_esc_seq := false + if len(t.columnsParams) > 0 { + is_esc_seq = true + } + t.fillAlignment(total) + for i, line := range columns { length := len(line) pad := max - length @@ -476,9 +659,14 @@ func (t Table) printRow(columns [][]string, colKey int) { fmt.Fprintf(t.out, SPACE) str := columns[y][x] + // Embedding escape sequence with column value + if is_esc_seq { + str = format(str, t.columnsParams[y]) + } + // This would print alignment // Default alignment would use multiple configuration - switch t.align { + switch t.columnsAlign[y] { case ALIGN_CENTER: // fmt.Fprintf(t.out, "%s", Pad(str, SPACE, t.cs[y])) case ALIGN_RIGHT: @@ -514,7 +702,7 @@ func (t Table) printRow(columns [][]string, colKey int) { } // Print the rows of the table and merge the cells that are identical -func (t Table) printRowsMergeCells() { +func (t *Table) printRowsMergeCells() { var previousLine []string var displayCellBorder []bool var tmpWriter bytes.Buffer @@ -537,14 +725,19 @@ func (t Table) printRowsMergeCells() { // Print Row Information to a writer and merge identical cells. // Adjust column alignment based on type -func (t Table) printRowMergeCells(writer io.Writer, columns [][]string, colKey int, previousLine []string) ([]string, []bool) { +func (t *Table) printRowMergeCells(writer io.Writer, columns [][]string, rowIdx int, previousLine []string) ([]string, []bool) { // Get Maximum Height - max := t.rs[colKey] + max := t.rs[rowIdx] total := len(columns) // Pad Each Height pads := []int{} + // Checking for ANSI escape sequences for columns + is_esc_seq := false + if len(t.columnsParams) > 0 { + is_esc_seq = true + } for i, line := range columns { length := len(line) pad := max - length @@ -555,6 +748,7 @@ func (t Table) printRowMergeCells(writer io.Writer, columns [][]string, colKey i } var displayCellBorder []bool + t.fillAlignment(total) for x := 0; x < max; x++ { for y := 0; y < total; y++ { @@ -565,6 +759,11 @@ func (t Table) printRowMergeCells(writer io.Writer, columns [][]string, colKey i str := columns[y][x] + // Embedding escape sequence with column value + if is_esc_seq { + str = format(str, t.columnsParams[y]) + } + if t.autoMergeCells { //Store the full line to merge mutli-lines cells fullLine := strings.Join(columns[y], " ") @@ -580,7 +779,7 @@ func (t Table) printRowMergeCells(writer io.Writer, columns [][]string, colKey i // This would print alignment // Default alignment would use multiple configuration - switch t.align { + switch t.columnsAlign[y] { case ALIGN_CENTER: // fmt.Fprintf(writer, "%s", Pad(str, SPACE, t.cs[y])) case ALIGN_RIGHT: @@ -613,44 +812,59 @@ func (t Table) printRowMergeCells(writer io.Writer, columns [][]string, colKey i func (t *Table) parseDimension(str string, colKey, rowKey int) []string { var ( - raw []string - max int + raw []string + maxWidth int ) - w := DisplayWidth(str) - // Calculate Width - // Check if with is grater than maximum width - if w > t.mW { - w = t.mW - } - // Check if width exists - v, ok := t.cs[colKey] - if !ok || v < w || v == 0 { - t.cs[colKey] = w + raw = getLines(str) + maxWidth = 0 + for _, line := range raw { + if w := DisplayWidth(line); w > maxWidth { + maxWidth = w + } } - if rowKey == -1 { - return raw - } - // Calculate Height + // If wrapping, ensure that all paragraphs in the cell fit in the + // specified width. if t.autoWrap { - raw, _ = WrapString(str, t.cs[colKey]) - } else { - raw = getLines(str) - } + // If there's a maximum allowed width for wrapping, use that. + if maxWidth > t.mW { + maxWidth = t.mW + } - for _, line := range raw { - if w := DisplayWidth(line); w > max { - max = w + // In the process of doing so, we need to recompute maxWidth. This + // is because perhaps a word in the cell is longer than the + // allowed maximum width in t.mW. + newMaxWidth := maxWidth + newRaw := make([]string, 0, len(raw)) + + if t.reflowText { + // Make a single paragraph of everything. + raw = []string{strings.Join(raw, " ")} + } + for i, para := range raw { + paraLines, _ := WrapString(para, maxWidth) + for _, line := range paraLines { + if w := DisplayWidth(line); w > newMaxWidth { + newMaxWidth = w + } + } + if i > 0 { + newRaw = append(newRaw, " ") + } + newRaw = append(newRaw, paraLines...) } + raw = newRaw + maxWidth = newMaxWidth } - // Make sure the with is the same length as maximum word - // Important for cases where the width is smaller than maxu word - if max > t.cs[colKey] { - t.cs[colKey] = max + // Store the new known maximum width. + v, ok := t.cs[colKey] + if !ok || v < maxWidth || v == 0 { + t.cs[colKey] = maxWidth } + // Remember the number of lines for the row printer. h := len(raw) v, ok = t.rs[rowKey] diff --git a/vendor/github.com/olekukonko/tablewriter/table_with_color.go b/vendor/github.com/olekukonko/tablewriter/table_with_color.go new file mode 100644 index 000000000000..5a4a53ec2a38 --- /dev/null +++ b/vendor/github.com/olekukonko/tablewriter/table_with_color.go @@ -0,0 +1,134 @@ +package tablewriter + +import ( + "fmt" + "strconv" + "strings" +) + +const ESC = "\033" +const SEP = ";" + +const ( + BgBlackColor int = iota + 40 + BgRedColor + BgGreenColor + BgYellowColor + BgBlueColor + BgMagentaColor + BgCyanColor + BgWhiteColor +) + +const ( + FgBlackColor int = iota + 30 + FgRedColor + FgGreenColor + FgYellowColor + FgBlueColor + FgMagentaColor + FgCyanColor + FgWhiteColor +) + +const ( + BgHiBlackColor int = iota + 100 + BgHiRedColor + BgHiGreenColor + BgHiYellowColor + BgHiBlueColor + BgHiMagentaColor + BgHiCyanColor + BgHiWhiteColor +) + +const ( + FgHiBlackColor int = iota + 90 + FgHiRedColor + FgHiGreenColor + FgHiYellowColor + FgHiBlueColor + FgHiMagentaColor + FgHiCyanColor + FgHiWhiteColor +) + +const ( + Normal = 0 + Bold = 1 + UnderlineSingle = 4 + Italic +) + +type Colors []int + +func startFormat(seq string) string { + return fmt.Sprintf("%s[%sm", ESC, seq) +} + +func stopFormat() string { + return fmt.Sprintf("%s[%dm", ESC, Normal) +} + +// Making the SGR (Select Graphic Rendition) sequence. +func makeSequence(codes []int) string { + codesInString := []string{} + for _, code := range codes { + codesInString = append(codesInString, strconv.Itoa(code)) + } + return strings.Join(codesInString, SEP) +} + +// Adding ANSI escape sequences before and after string +func format(s string, codes interface{}) string { + var seq string + + switch v := codes.(type) { + + case string: + seq = v + case []int: + seq = makeSequence(v) + default: + return s + } + + if len(seq) == 0 { + return s + } + return startFormat(seq) + s + stopFormat() +} + +// Adding header colors (ANSI codes) +func (t *Table) SetHeaderColor(colors ...Colors) { + if t.colSize != len(colors) { + panic("Number of header colors must be equal to number of headers.") + } + for i := 0; i < len(colors); i++ { + t.headerParams = append(t.headerParams, makeSequence(colors[i])) + } +} + +// Adding column colors (ANSI codes) +func (t *Table) SetColumnColor(colors ...Colors) { + if t.colSize != len(colors) { + panic("Number of column colors must be equal to number of headers.") + } + for i := 0; i < len(colors); i++ { + t.columnsParams = append(t.columnsParams, makeSequence(colors[i])) + } +} + +// Adding column colors (ANSI codes) +func (t *Table) SetFooterColor(colors ...Colors) { + if len(t.footers) != len(colors) { + panic("Number of footer colors must be equal to number of footer.") + } + for i := 0; i < len(colors); i++ { + t.footerParams = append(t.footerParams, makeSequence(colors[i])) + } +} + +func Color(colors ...int) []int { + return colors +} diff --git a/vendor/github.com/olekukonko/tablewriter/test.csv b/vendor/github.com/olekukonko/tablewriter/test.csv deleted file mode 100644 index 1609327e930f..000000000000 --- a/vendor/github.com/olekukonko/tablewriter/test.csv +++ /dev/null @@ -1,4 +0,0 @@ -first_name,last_name,ssn -John,Barry,123456 -Kathy,Smith,687987 -Bob,McCornick,3979870 \ No newline at end of file diff --git a/vendor/github.com/olekukonko/tablewriter/test_info.csv b/vendor/github.com/olekukonko/tablewriter/test_info.csv deleted file mode 100644 index e4c40e983aca..000000000000 --- a/vendor/github.com/olekukonko/tablewriter/test_info.csv +++ /dev/null @@ -1,4 +0,0 @@ -Field,Type,Null,Key,Default,Extra -user_id,smallint(5),NO,PRI,NULL,auto_increment -username,varchar(10),NO,,NULL, -password,varchar(100),NO,,NULL, \ No newline at end of file diff --git a/vendor/github.com/olekukonko/tablewriter/util.go b/vendor/github.com/olekukonko/tablewriter/util.go index 2deefbc52a0a..380e7ab35b65 100644 --- a/vendor/github.com/olekukonko/tablewriter/util.go +++ b/vendor/github.com/olekukonko/tablewriter/util.go @@ -30,17 +30,38 @@ func ConditionString(cond bool, valid, inValid string) string { return inValid } +func isNumOrSpace(r rune) bool { + return ('0' <= r && r <= '9') || r == ' ' +} + // Format Table Header // Replace _ , . and spaces func Title(name string) string { - name = strings.Replace(name, "_", " ", -1) - name = strings.Replace(name, ".", " ", -1) + origLen := len(name) + rs := []rune(name) + for i, r := range rs { + switch r { + case '_': + rs[i] = ' ' + case '.': + // ignore floating number 0.0 + if (i != 0 && !isNumOrSpace(rs[i-1])) || (i != len(rs)-1 && !isNumOrSpace(rs[i+1])) { + rs[i] = ' ' + } + } + } + name = string(rs) name = strings.TrimSpace(name) + if len(name) == 0 && origLen > 0 { + // Keep at least one character. This is important to preserve + // empty lines in multi-line headers/footers. + name = " " + } return strings.ToUpper(name) } // Pad String -// Attempts to play string in the center +// Attempts to place string in the center func Pad(s, pad string, width int) string { gap := width - DisplayWidth(s) if gap > 0 { @@ -52,7 +73,7 @@ func Pad(s, pad string, width int) string { } // Pad String Right position -// This would pace string at the left side fo the screen +// This would place string at the left side of the screen func PadRight(s, pad string, width int) string { gap := width - DisplayWidth(s) if gap > 0 { @@ -62,7 +83,7 @@ func PadRight(s, pad string, width int) string { } // Pad String Left position -// This would pace string at the right side fo the screen +// This would place string at the right side of the screen func PadLeft(s, pad string, width int) string { gap := width - DisplayWidth(s) if gap > 0 { diff --git a/vendor/github.com/olekukonko/tablewriter/wrap.go b/vendor/github.com/olekukonko/tablewriter/wrap.go index 5290fb65a279..a092ee1f75d3 100644 --- a/vendor/github.com/olekukonko/tablewriter/wrap.go +++ b/vendor/github.com/olekukonko/tablewriter/wrap.go @@ -10,7 +10,8 @@ package tablewriter import ( "math" "strings" - "unicode/utf8" + + "github.com/mattn/go-runewidth" ) var ( @@ -27,7 +28,7 @@ func WrapString(s string, lim int) ([]string, int) { var lines []string max := 0 for _, v := range words { - max = len(v) + max = runewidth.StringWidth(v) if max > lim { lim = max } @@ -55,9 +56,9 @@ func WrapWords(words []string, spc, lim, pen int) [][]string { length := make([][]int, n) for i := 0; i < n; i++ { length[i] = make([]int, n) - length[i][i] = utf8.RuneCountInString(words[i]) + length[i][i] = runewidth.StringWidth(words[i]) for j := i + 1; j < n; j++ { - length[i][j] = length[i][j-1] + spc + utf8.RuneCountInString(words[j]) + length[i][j] = length[i][j-1] + spc + runewidth.StringWidth(words[j]) } } nbrk := make([]int, n) @@ -94,10 +95,5 @@ func WrapWords(words []string, spc, lim, pen int) [][]string { // getLines decomposes a multiline string into a slice of strings. func getLines(s string) []string { - var lines []string - - for _, line := range strings.Split(s, nl) { - lines = append(lines, line) - } - return lines + return strings.Split(s, nl) } diff --git a/vendor/github.com/opentracing/opentracing-go/CHANGELOG.md b/vendor/github.com/opentracing/opentracing-go/CHANGELOG.md index 1fc9fdf7f36a..ecfb7e3b799b 100644 --- a/vendor/github.com/opentracing/opentracing-go/CHANGELOG.md +++ b/vendor/github.com/opentracing/opentracing-go/CHANGELOG.md @@ -10,5 +10,5 @@ Changes by Version 1.0.0 (2016-09-26) ------------------- -- This release implements OpenTracing Specification 1.0 (http://opentracing.io/spec) +- This release implements OpenTracing Specification 1.0 (https://opentracing.io/spec) diff --git a/vendor/github.com/opentracing/opentracing-go/Makefile b/vendor/github.com/opentracing/opentracing-go/Makefile index d49a5c0d44fb..62abb63f58de 100644 --- a/vendor/github.com/opentracing/opentracing-go/Makefile +++ b/vendor/github.com/opentracing/opentracing-go/Makefile @@ -1,26 +1,15 @@ -PACKAGES := . ./mocktracer/... ./ext/... - .DEFAULT_GOAL := test-and-lint -.PHONE: test-and-lint - +.PHONY: test-and-lint test-and-lint: test lint .PHONY: test test: go test -v -cover -race ./... +.PHONY: cover cover: - @rm -rf cover-all.out - $(foreach pkg, $(PACKAGES), $(MAKE) cover-pkg PKG=$(pkg) || true;) - @grep mode: cover.out > coverage.out - @cat cover-all.out >> coverage.out - go tool cover -html=coverage.out -o cover.html - @rm -rf cover.out cover-all.out coverage.out - -cover-pkg: - go test -coverprofile cover.out $(PKG) - @grep -v mode: cover.out >> cover-all.out + go test -v -coverprofile=coverage.txt -covermode=atomic -race ./... .PHONY: lint lint: @@ -29,4 +18,3 @@ lint: @# Run again with magic to exit non-zero if golint outputs anything. @! (golint ./... | read dummy) go vet ./... - diff --git a/vendor/github.com/opentracing/opentracing-go/README.md b/vendor/github.com/opentracing/opentracing-go/README.md index 007ee237c8a1..6ef1d7c9d274 100644 --- a/vendor/github.com/opentracing/opentracing-go/README.md +++ b/vendor/github.com/opentracing/opentracing-go/README.md @@ -8,8 +8,8 @@ This package is a Go platform API for OpenTracing. ## Required Reading In order to understand the Go platform API, one must first be familiar with the -[OpenTracing project](http://opentracing.io) and -[terminology](http://opentracing.io/documentation/pages/spec.html) more specifically. +[OpenTracing project](https://opentracing.io) and +[terminology](https://opentracing.io/specification/) more specifically. ## API overview for those adding instrumentation diff --git a/vendor/github.com/opentracing/opentracing-go/globaltracer.go b/vendor/github.com/opentracing/opentracing-go/globaltracer.go index 8c8e793ff23c..4f7066a925cd 100644 --- a/vendor/github.com/opentracing/opentracing-go/globaltracer.go +++ b/vendor/github.com/opentracing/opentracing-go/globaltracer.go @@ -1,7 +1,12 @@ package opentracing +type registeredTracer struct { + tracer Tracer + isRegistered bool +} + var ( - globalTracer Tracer = NoopTracer{} + globalTracer = registeredTracer{NoopTracer{}, false} ) // SetGlobalTracer sets the [singleton] opentracing.Tracer returned by @@ -11,22 +16,27 @@ var ( // Prior to calling `SetGlobalTracer`, any Spans started via the `StartSpan` // (etc) globals are noops. func SetGlobalTracer(tracer Tracer) { - globalTracer = tracer + globalTracer = registeredTracer{tracer, true} } // GlobalTracer returns the global singleton `Tracer` implementation. // Before `SetGlobalTracer()` is called, the `GlobalTracer()` is a noop // implementation that drops all data handed to it. func GlobalTracer() Tracer { - return globalTracer + return globalTracer.tracer } // StartSpan defers to `Tracer.StartSpan`. See `GlobalTracer()`. func StartSpan(operationName string, opts ...StartSpanOption) Span { - return globalTracer.StartSpan(operationName, opts...) + return globalTracer.tracer.StartSpan(operationName, opts...) } // InitGlobalTracer is deprecated. Please use SetGlobalTracer. func InitGlobalTracer(tracer Tracer) { SetGlobalTracer(tracer) } + +// IsGlobalTracerRegistered returns a `bool` to indicate if a tracer has been globally registered +func IsGlobalTracerRegistered() bool { + return globalTracer.isRegistered +} diff --git a/vendor/github.com/opentracing/opentracing-go/propagation.go b/vendor/github.com/opentracing/opentracing-go/propagation.go index 0dd466a373ef..b0c275eb05e4 100644 --- a/vendor/github.com/opentracing/opentracing-go/propagation.go +++ b/vendor/github.com/opentracing/opentracing-go/propagation.go @@ -160,7 +160,7 @@ type HTTPHeadersCarrier http.Header // Set conforms to the TextMapWriter interface. func (c HTTPHeadersCarrier) Set(key, val string) { h := http.Header(c) - h.Add(key, val) + h.Set(key, val) } // ForeachKey conforms to the TextMapReader interface. diff --git a/vendor/github.com/oschwald/maxminddb-golang/LICENSE b/vendor/github.com/oschwald/maxminddb-golang/LICENSE new file mode 100644 index 000000000000..2969677f1590 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2015, Gregory J. Oschwald + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/oschwald/maxminddb-golang/README.md b/vendor/github.com/oschwald/maxminddb-golang/README.md new file mode 100644 index 000000000000..cdd6bd1a8594 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/README.md @@ -0,0 +1,38 @@ +# MaxMind DB Reader for Go # + +[![Build Status](https://travis-ci.org/oschwald/maxminddb-golang.png?branch=master)](https://travis-ci.org/oschwald/maxminddb-golang) +[![Windows Build Status](https://ci.appveyor.com/api/projects/status/4j2f9oep8nnfrmov/branch/master?svg=true)](https://ci.appveyor.com/project/oschwald/maxminddb-golang/branch/master) +[![GoDoc](https://godoc.org/github.com/oschwald/maxminddb-golang?status.png)](https://godoc.org/github.com/oschwald/maxminddb-golang) + +This is a Go reader for the MaxMind DB format. Although this can be used to +read [GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) and +[GeoIP2](https://www.maxmind.com/en/geoip2-databases) databases, +[geoip2](https://github.com/oschwald/geoip2-golang) provides a higher-level +API for doing so. + +This is not an official MaxMind API. + +## Installation ## + +``` +go get github.com/oschwald/maxminddb-golang +``` + +## Usage ## + +[See GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) for +documentation and examples. + +## Examples ## + +See [GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) or +`example_test.go` for examples. + +## Contributing ## + +Contributions welcome! Please fork the repository and open a pull request +with your changes. + +## License ## + +This is free software, licensed under the ISC License. diff --git a/vendor/github.com/oschwald/maxminddb-golang/appveyor.yml b/vendor/github.com/oschwald/maxminddb-golang/appveyor.yml new file mode 100644 index 000000000000..e2bb9dd23750 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/appveyor.yml @@ -0,0 +1,19 @@ +version: "{build}" + +os: Windows Server 2012 R2 + +clone_folder: c:\gopath\src\github.com\oschwald\maxminddb-golang + +environment: + GOPATH: c:\gopath + +install: + - echo %PATH% + - echo %GOPATH% + - git submodule update --init --recursive + - go version + - go env + - go get -v -t ./... + +build_script: + - go test -v ./... diff --git a/vendor/github.com/oschwald/maxminddb-golang/decoder.go b/vendor/github.com/oschwald/maxminddb-golang/decoder.go new file mode 100644 index 000000000000..6e4d7e5b83f6 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/decoder.go @@ -0,0 +1,721 @@ +package maxminddb + +import ( + "encoding/binary" + "math" + "math/big" + "reflect" + "sync" +) + +type decoder struct { + buffer []byte +} + +type dataType int + +const ( + _Extended dataType = iota + _Pointer + _String + _Float64 + _Bytes + _Uint16 + _Uint32 + _Map + _Int32 + _Uint64 + _Uint128 + _Slice + _Container + _Marker + _Bool + _Float32 +) + +const ( + // This is the value used in libmaxminddb + maximumDataStructureDepth = 512 +) + +func (d *decoder) decode(offset uint, result reflect.Value, depth int) (uint, error) { + if depth > maximumDataStructureDepth { + return 0, newInvalidDatabaseError("exceeded maximum data structure depth; database is likely corrupt") + } + typeNum, size, newOffset, err := d.decodeCtrlData(offset) + if err != nil { + return 0, err + } + + if typeNum != _Pointer && result.Kind() == reflect.Uintptr { + result.Set(reflect.ValueOf(uintptr(offset))) + return d.nextValueOffset(offset, 1) + } + return d.decodeFromType(typeNum, size, newOffset, result, depth+1) +} + +func (d *decoder) decodeCtrlData(offset uint) (dataType, uint, uint, error) { + newOffset := offset + 1 + if offset >= uint(len(d.buffer)) { + return 0, 0, 0, newOffsetError() + } + ctrlByte := d.buffer[offset] + + typeNum := dataType(ctrlByte >> 5) + if typeNum == _Extended { + if newOffset >= uint(len(d.buffer)) { + return 0, 0, 0, newOffsetError() + } + typeNum = dataType(d.buffer[newOffset] + 7) + newOffset++ + } + + var size uint + size, newOffset, err := d.sizeFromCtrlByte(ctrlByte, newOffset, typeNum) + return typeNum, size, newOffset, err +} + +func (d *decoder) sizeFromCtrlByte(ctrlByte byte, offset uint, typeNum dataType) (uint, uint, error) { + size := uint(ctrlByte & 0x1f) + if typeNum == _Extended { + return size, offset, nil + } + + var bytesToRead uint + if size < 29 { + return size, offset, nil + } + + bytesToRead = size - 28 + newOffset := offset + bytesToRead + if newOffset > uint(len(d.buffer)) { + return 0, 0, newOffsetError() + } + if size == 29 { + return 29 + uint(d.buffer[offset]), offset + 1, nil + } + + sizeBytes := d.buffer[offset:newOffset] + + switch { + case size == 30: + size = 285 + uintFromBytes(0, sizeBytes) + case size > 30: + size = uintFromBytes(0, sizeBytes) + 65821 + } + return size, newOffset, nil +} + +func (d *decoder) decodeFromType( + dtype dataType, + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + result = d.indirect(result) + + // For these types, size has a special meaning + switch dtype { + case _Bool: + return d.unmarshalBool(size, offset, result) + case _Map: + return d.unmarshalMap(size, offset, result, depth) + case _Pointer: + return d.unmarshalPointer(size, offset, result, depth) + case _Slice: + return d.unmarshalSlice(size, offset, result, depth) + } + + // For the remaining types, size is the byte size + if offset+size > uint(len(d.buffer)) { + return 0, newOffsetError() + } + switch dtype { + case _Bytes: + return d.unmarshalBytes(size, offset, result) + case _Float32: + return d.unmarshalFloat32(size, offset, result) + case _Float64: + return d.unmarshalFloat64(size, offset, result) + case _Int32: + return d.unmarshalInt32(size, offset, result) + case _String: + return d.unmarshalString(size, offset, result) + case _Uint16: + return d.unmarshalUint(size, offset, result, 16) + case _Uint32: + return d.unmarshalUint(size, offset, result, 32) + case _Uint64: + return d.unmarshalUint(size, offset, result, 64) + case _Uint128: + return d.unmarshalUint128(size, offset, result) + default: + return 0, newInvalidDatabaseError("unknown type: %d", dtype) + } +} + +func (d *decoder) unmarshalBool(size uint, offset uint, result reflect.Value) (uint, error) { + if size > 1 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (bool size of %v)", size) + } + value, newOffset, err := d.decodeBool(size, offset) + if err != nil { + return 0, err + } + switch result.Kind() { + case reflect.Bool: + result.SetBool(value) + return newOffset, nil + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +// indirect follows pointers and create values as necessary. This is +// heavily based on encoding/json as my original version had a subtle +// bug. This method should be considered to be licensed under +// https://golang.org/LICENSE +func (d *decoder) indirect(result reflect.Value) reflect.Value { + for { + // Load value from interface, but only if the result will be + // usefully addressable. + if result.Kind() == reflect.Interface && !result.IsNil() { + e := result.Elem() + if e.Kind() == reflect.Ptr && !e.IsNil() { + result = e + continue + } + } + + if result.Kind() != reflect.Ptr { + break + } + + if result.IsNil() { + result.Set(reflect.New(result.Type().Elem())) + } + result = result.Elem() + } + return result +} + +var sliceType = reflect.TypeOf([]byte{}) + +func (d *decoder) unmarshalBytes(size uint, offset uint, result reflect.Value) (uint, error) { + value, newOffset, err := d.decodeBytes(size, offset) + if err != nil { + return 0, err + } + switch result.Kind() { + case reflect.Slice: + if result.Type() == sliceType { + result.SetBytes(value) + return newOffset, nil + } + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +func (d *decoder) unmarshalFloat32(size uint, offset uint, result reflect.Value) (uint, error) { + if size != 4 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float32 size of %v)", size) + } + value, newOffset, err := d.decodeFloat32(size, offset) + if err != nil { + return 0, err + } + + switch result.Kind() { + case reflect.Float32, reflect.Float64: + result.SetFloat(float64(value)) + return newOffset, nil + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +func (d *decoder) unmarshalFloat64(size uint, offset uint, result reflect.Value) (uint, error) { + + if size != 8 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float 64 size of %v)", size) + } + value, newOffset, err := d.decodeFloat64(size, offset) + if err != nil { + return 0, err + } + switch result.Kind() { + case reflect.Float32, reflect.Float64: + if result.OverflowFloat(value) { + return 0, newUnmarshalTypeError(value, result.Type()) + } + result.SetFloat(value) + return newOffset, nil + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +func (d *decoder) unmarshalInt32(size uint, offset uint, result reflect.Value) (uint, error) { + if size > 4 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (int32 size of %v)", size) + } + value, newOffset, err := d.decodeInt(size, offset) + if err != nil { + return 0, err + } + + switch result.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + n := int64(value) + if !result.OverflowInt(n) { + result.SetInt(n) + return newOffset, nil + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + n := uint64(value) + if !result.OverflowUint(n) { + result.SetUint(n) + return newOffset, nil + } + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +func (d *decoder) unmarshalMap( + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + result = d.indirect(result) + switch result.Kind() { + default: + return 0, newUnmarshalTypeError("map", result.Type()) + case reflect.Struct: + return d.decodeStruct(size, offset, result, depth) + case reflect.Map: + return d.decodeMap(size, offset, result, depth) + case reflect.Interface: + if result.NumMethod() == 0 { + rv := reflect.ValueOf(make(map[string]interface{}, size)) + newOffset, err := d.decodeMap(size, offset, rv, depth) + result.Set(rv) + return newOffset, err + } + return 0, newUnmarshalTypeError("map", result.Type()) + } +} + +func (d *decoder) unmarshalPointer(size uint, offset uint, result reflect.Value, depth int) (uint, error) { + pointer, newOffset, err := d.decodePointer(size, offset) + if err != nil { + return 0, err + } + _, err = d.decode(pointer, result, depth) + return newOffset, err +} + +func (d *decoder) unmarshalSlice( + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + switch result.Kind() { + case reflect.Slice: + return d.decodeSlice(size, offset, result, depth) + case reflect.Interface: + if result.NumMethod() == 0 { + a := []interface{}{} + rv := reflect.ValueOf(&a).Elem() + newOffset, err := d.decodeSlice(size, offset, rv, depth) + result.Set(rv) + return newOffset, err + } + } + return 0, newUnmarshalTypeError("array", result.Type()) +} + +func (d *decoder) unmarshalString(size uint, offset uint, result reflect.Value) (uint, error) { + value, newOffset, err := d.decodeString(size, offset) + + if err != nil { + return 0, err + } + switch result.Kind() { + case reflect.String: + result.SetString(value) + return newOffset, nil + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) + +} + +func (d *decoder) unmarshalUint(size uint, offset uint, result reflect.Value, uintType uint) (uint, error) { + if size > uintType/8 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint%v size of %v)", uintType, size) + } + + value, newOffset, err := d.decodeUint(size, offset) + if err != nil { + return 0, err + } + + switch result.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + n := int64(value) + if !result.OverflowInt(n) { + result.SetInt(n) + return newOffset, nil + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + if !result.OverflowUint(value) { + result.SetUint(value) + return newOffset, nil + } + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +var bigIntType = reflect.TypeOf(big.Int{}) + +func (d *decoder) unmarshalUint128(size uint, offset uint, result reflect.Value) (uint, error) { + if size > 16 { + return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint128 size of %v)", size) + } + value, newOffset, err := d.decodeUint128(size, offset) + if err != nil { + return 0, err + } + + switch result.Kind() { + case reflect.Struct: + if result.Type() == bigIntType { + result.Set(reflect.ValueOf(*value)) + return newOffset, nil + } + case reflect.Interface: + if result.NumMethod() == 0 { + result.Set(reflect.ValueOf(value)) + return newOffset, nil + } + } + return newOffset, newUnmarshalTypeError(value, result.Type()) +} + +func (d *decoder) decodeBool(size uint, offset uint) (bool, uint, error) { + return size != 0, offset, nil +} + +func (d *decoder) decodeBytes(size uint, offset uint) ([]byte, uint, error) { + newOffset := offset + size + bytes := make([]byte, size) + copy(bytes, d.buffer[offset:newOffset]) + return bytes, newOffset, nil +} + +func (d *decoder) decodeFloat64(size uint, offset uint) (float64, uint, error) { + newOffset := offset + size + bits := binary.BigEndian.Uint64(d.buffer[offset:newOffset]) + return math.Float64frombits(bits), newOffset, nil +} + +func (d *decoder) decodeFloat32(size uint, offset uint) (float32, uint, error) { + newOffset := offset + size + bits := binary.BigEndian.Uint32(d.buffer[offset:newOffset]) + return math.Float32frombits(bits), newOffset, nil +} + +func (d *decoder) decodeInt(size uint, offset uint) (int, uint, error) { + newOffset := offset + size + var val int32 + for _, b := range d.buffer[offset:newOffset] { + val = (val << 8) | int32(b) + } + return int(val), newOffset, nil +} + +func (d *decoder) decodeMap( + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + if result.IsNil() { + result.Set(reflect.MakeMap(result.Type())) + } + + for i := uint(0); i < size; i++ { + var key []byte + var err error + key, offset, err = d.decodeKey(offset) + + if err != nil { + return 0, err + } + + value := reflect.New(result.Type().Elem()) + offset, err = d.decode(offset, value, depth) + if err != nil { + return 0, err + } + result.SetMapIndex(reflect.ValueOf(string(key)), value.Elem()) + } + return offset, nil +} + +func (d *decoder) decodePointer( + size uint, + offset uint, +) (uint, uint, error) { + pointerSize := ((size >> 3) & 0x3) + 1 + newOffset := offset + pointerSize + if newOffset > uint(len(d.buffer)) { + return 0, 0, newOffsetError() + } + pointerBytes := d.buffer[offset:newOffset] + var prefix uint + if pointerSize == 4 { + prefix = 0 + } else { + prefix = uint(size & 0x7) + } + unpacked := uintFromBytes(prefix, pointerBytes) + + var pointerValueOffset uint + switch pointerSize { + case 1: + pointerValueOffset = 0 + case 2: + pointerValueOffset = 2048 + case 3: + pointerValueOffset = 526336 + case 4: + pointerValueOffset = 0 + } + + pointer := unpacked + pointerValueOffset + + return pointer, newOffset, nil +} + +func (d *decoder) decodeSlice( + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + result.Set(reflect.MakeSlice(result.Type(), int(size), int(size))) + for i := 0; i < int(size); i++ { + var err error + offset, err = d.decode(offset, result.Index(i), depth) + if err != nil { + return 0, err + } + } + return offset, nil +} + +func (d *decoder) decodeString(size uint, offset uint) (string, uint, error) { + newOffset := offset + size + return string(d.buffer[offset:newOffset]), newOffset, nil +} + +type fieldsType struct { + namedFields map[string]int + anonymousFields []int +} + +var ( + fieldMap = map[reflect.Type]*fieldsType{} + fieldMapMu sync.RWMutex +) + +func (d *decoder) decodeStruct( + size uint, + offset uint, + result reflect.Value, + depth int, +) (uint, error) { + resultType := result.Type() + + fieldMapMu.RLock() + fields, ok := fieldMap[resultType] + fieldMapMu.RUnlock() + if !ok { + numFields := resultType.NumField() + namedFields := make(map[string]int, numFields) + var anonymous []int + for i := 0; i < numFields; i++ { + field := resultType.Field(i) + + fieldName := field.Name + if tag := field.Tag.Get("maxminddb"); tag != "" { + if tag == "-" { + continue + } + fieldName = tag + } + if field.Anonymous { + anonymous = append(anonymous, i) + continue + } + namedFields[fieldName] = i + } + fieldMapMu.Lock() + fields = &fieldsType{namedFields, anonymous} + fieldMap[resultType] = fields + fieldMapMu.Unlock() + } + + // This fills in embedded structs + for _, i := range fields.anonymousFields { + _, err := d.unmarshalMap(size, offset, result.Field(i), depth) + if err != nil { + return 0, err + } + } + + // This handles named fields + for i := uint(0); i < size; i++ { + var ( + err error + key []byte + ) + key, offset, err = d.decodeKey(offset) + if err != nil { + return 0, err + } + // The string() does not create a copy due to this compiler + // optimization: https://github.com/golang/go/issues/3512 + j, ok := fields.namedFields[string(key)] + if !ok { + offset, err = d.nextValueOffset(offset, 1) + if err != nil { + return 0, err + } + continue + } + + offset, err = d.decode(offset, result.Field(j), depth) + if err != nil { + return 0, err + } + } + return offset, nil +} + +func (d *decoder) decodeUint(size uint, offset uint) (uint64, uint, error) { + newOffset := offset + size + bytes := d.buffer[offset:newOffset] + + var val uint64 + for _, b := range bytes { + val = (val << 8) | uint64(b) + } + return val, newOffset, nil +} + +func (d *decoder) decodeUint128(size uint, offset uint) (*big.Int, uint, error) { + newOffset := offset + size + val := new(big.Int) + val.SetBytes(d.buffer[offset:newOffset]) + + return val, newOffset, nil +} + +func uintFromBytes(prefix uint, uintBytes []byte) uint { + val := prefix + for _, b := range uintBytes { + val = (val << 8) | uint(b) + } + return val +} + +// decodeKey decodes a map key into []byte slice. We use a []byte so that we +// can take advantage of https://github.com/golang/go/issues/3512 to avoid +// copying the bytes when decoding a struct. Previously, we achieved this by +// using unsafe. +func (d *decoder) decodeKey(offset uint) ([]byte, uint, error) { + typeNum, size, dataOffset, err := d.decodeCtrlData(offset) + if err != nil { + return nil, 0, err + } + if typeNum == _Pointer { + pointer, ptrOffset, err := d.decodePointer(size, dataOffset) + if err != nil { + return nil, 0, err + } + key, _, err := d.decodeKey(pointer) + return key, ptrOffset, err + } + if typeNum != _String { + return nil, 0, newInvalidDatabaseError("unexpected type when decoding string: %v", typeNum) + } + newOffset := dataOffset + size + if newOffset > uint(len(d.buffer)) { + return nil, 0, newOffsetError() + } + return d.buffer[dataOffset:newOffset], newOffset, nil +} + +// This function is used to skip ahead to the next value without decoding +// the one at the offset passed in. The size bits have different meanings for +// different data types +func (d *decoder) nextValueOffset(offset uint, numberToSkip uint) (uint, error) { + if numberToSkip == 0 { + return offset, nil + } + typeNum, size, offset, err := d.decodeCtrlData(offset) + if err != nil { + return 0, err + } + switch typeNum { + case _Pointer: + _, offset, err = d.decodePointer(size, offset) + if err != nil { + return 0, err + } + case _Map: + numberToSkip += 2 * size + case _Slice: + numberToSkip += size + case _Bool: + default: + offset += size + } + return d.nextValueOffset(offset, numberToSkip-1) +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/errors.go b/vendor/github.com/oschwald/maxminddb-golang/errors.go new file mode 100644 index 000000000000..132780019bb3 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/errors.go @@ -0,0 +1,42 @@ +package maxminddb + +import ( + "fmt" + "reflect" +) + +// InvalidDatabaseError is returned when the database contains invalid data +// and cannot be parsed. +type InvalidDatabaseError struct { + message string +} + +func newOffsetError() InvalidDatabaseError { + return InvalidDatabaseError{"unexpected end of database"} +} + +func newInvalidDatabaseError(format string, args ...interface{}) InvalidDatabaseError { + return InvalidDatabaseError{fmt.Sprintf(format, args...)} +} + +func (e InvalidDatabaseError) Error() string { + return e.message +} + +// UnmarshalTypeError is returned when the value in the database cannot be +// assigned to the specified data type. +type UnmarshalTypeError struct { + Value string // stringified copy of the database value that caused the error + Type reflect.Type // type of the value that could not be assign to +} + +func newUnmarshalTypeError(value interface{}, rType reflect.Type) UnmarshalTypeError { + return UnmarshalTypeError{ + Value: fmt.Sprintf("%v", value), + Type: rType, + } +} + +func (e UnmarshalTypeError) Error() string { + return fmt.Sprintf("maxminddb: cannot unmarshal %s into type %s", e.Value, e.Type.String()) +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go b/vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go new file mode 100644 index 000000000000..d898d25704e9 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/mmap_unix.go @@ -0,0 +1,15 @@ +// +build !windows,!appengine + +package maxminddb + +import ( + "golang.org/x/sys/unix" +) + +func mmap(fd int, length int) (data []byte, err error) { + return unix.Mmap(fd, 0, length, unix.PROT_READ, unix.MAP_SHARED) +} + +func munmap(b []byte) (err error) { + return unix.Munmap(b) +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go b/vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go new file mode 100644 index 000000000000..661250eca00b --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/mmap_windows.go @@ -0,0 +1,85 @@ +// +build windows,!appengine + +package maxminddb + +// Windows support largely borrowed from mmap-go. +// +// Copyright 2011 Evan Shaw. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +import ( + "errors" + "os" + "reflect" + "sync" + "unsafe" + + "golang.org/x/sys/windows" +) + +type memoryMap []byte + +// Windows +var handleLock sync.Mutex +var handleMap = map[uintptr]windows.Handle{} + +func mmap(fd int, length int) (data []byte, err error) { + h, errno := windows.CreateFileMapping(windows.Handle(fd), nil, + uint32(windows.PAGE_READONLY), 0, uint32(length), nil) + if h == 0 { + return nil, os.NewSyscallError("CreateFileMapping", errno) + } + + addr, errno := windows.MapViewOfFile(h, uint32(windows.FILE_MAP_READ), 0, + 0, uintptr(length)) + if addr == 0 { + return nil, os.NewSyscallError("MapViewOfFile", errno) + } + handleLock.Lock() + handleMap[addr] = h + handleLock.Unlock() + + m := memoryMap{} + dh := m.header() + dh.Data = addr + dh.Len = length + dh.Cap = dh.Len + + return m, nil +} + +func (m *memoryMap) header() *reflect.SliceHeader { + return (*reflect.SliceHeader)(unsafe.Pointer(m)) +} + +func flush(addr, len uintptr) error { + errno := windows.FlushViewOfFile(addr, len) + return os.NewSyscallError("FlushViewOfFile", errno) +} + +func munmap(b []byte) (err error) { + m := memoryMap(b) + dh := m.header() + + addr := dh.Data + length := uintptr(dh.Len) + + flush(addr, length) + err = windows.UnmapViewOfFile(addr) + if err != nil { + return err + } + + handleLock.Lock() + defer handleLock.Unlock() + handle, ok := handleMap[addr] + if !ok { + // should be impossible; we would've errored above + return errors.New("unknown base address") + } + delete(handleMap, addr) + + e := windows.CloseHandle(windows.Handle(handle)) + return os.NewSyscallError("CloseHandle", e) +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/reader.go b/vendor/github.com/oschwald/maxminddb-golang/reader.go new file mode 100644 index 000000000000..97b96070fc62 --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/reader.go @@ -0,0 +1,259 @@ +package maxminddb + +import ( + "bytes" + "errors" + "fmt" + "net" + "reflect" +) + +const ( + // NotFound is returned by LookupOffset when a matched root record offset + // cannot be found. + NotFound = ^uintptr(0) + + dataSectionSeparatorSize = 16 +) + +var metadataStartMarker = []byte("\xAB\xCD\xEFMaxMind.com") + +// Reader holds the data corresponding to the MaxMind DB file. Its only public +// field is Metadata, which contains the metadata from the MaxMind DB file. +type Reader struct { + hasMappedFile bool + buffer []byte + decoder decoder + Metadata Metadata + ipv4Start uint +} + +// Metadata holds the metadata decoded from the MaxMind DB file. In particular +// in has the format version, the build time as Unix epoch time, the database +// type and description, the IP version supported, and a slice of the natural +// languages included. +type Metadata struct { + BinaryFormatMajorVersion uint `maxminddb:"binary_format_major_version"` + BinaryFormatMinorVersion uint `maxminddb:"binary_format_minor_version"` + BuildEpoch uint `maxminddb:"build_epoch"` + DatabaseType string `maxminddb:"database_type"` + Description map[string]string `maxminddb:"description"` + IPVersion uint `maxminddb:"ip_version"` + Languages []string `maxminddb:"languages"` + NodeCount uint `maxminddb:"node_count"` + RecordSize uint `maxminddb:"record_size"` +} + +// FromBytes takes a byte slice corresponding to a MaxMind DB file and returns +// a Reader structure or an error. +func FromBytes(buffer []byte) (*Reader, error) { + metadataStart := bytes.LastIndex(buffer, metadataStartMarker) + + if metadataStart == -1 { + return nil, newInvalidDatabaseError("error opening database: invalid MaxMind DB file") + } + + metadataStart += len(metadataStartMarker) + metadataDecoder := decoder{buffer[metadataStart:]} + + var metadata Metadata + + rvMetdata := reflect.ValueOf(&metadata) + _, err := metadataDecoder.decode(0, rvMetdata, 0) + if err != nil { + return nil, err + } + + searchTreeSize := metadata.NodeCount * metadata.RecordSize / 4 + dataSectionStart := searchTreeSize + dataSectionSeparatorSize + dataSectionEnd := uint(metadataStart - len(metadataStartMarker)) + if dataSectionStart > dataSectionEnd { + return nil, newInvalidDatabaseError("the MaxMind DB contains invalid metadata") + } + d := decoder{ + buffer[searchTreeSize+dataSectionSeparatorSize : metadataStart-len(metadataStartMarker)], + } + + reader := &Reader{ + buffer: buffer, + decoder: d, + Metadata: metadata, + ipv4Start: 0, + } + + reader.ipv4Start, err = reader.startNode() + + return reader, err +} + +func (r *Reader) startNode() (uint, error) { + if r.Metadata.IPVersion != 6 { + return 0, nil + } + + nodeCount := r.Metadata.NodeCount + + node := uint(0) + var err error + for i := 0; i < 96 && node < nodeCount; i++ { + node, err = r.readNode(node, 0) + if err != nil { + return 0, err + } + } + return node, err +} + +// Lookup takes an IP address as a net.IP structure and a pointer to the +// result value to Decode into. +func (r *Reader) Lookup(ipAddress net.IP, result interface{}) error { + if r.buffer == nil { + return errors.New("cannot call Lookup on a closed database") + } + pointer, err := r.lookupPointer(ipAddress) + if pointer == 0 || err != nil { + return err + } + return r.retrieveData(pointer, result) +} + +// LookupOffset maps an argument net.IP to a corresponding record offset in the +// database. NotFound is returned if no such record is found, and a record may +// otherwise be extracted by passing the returned offset to Decode. LookupOffset +// is an advanced API, which exists to provide clients with a means to cache +// previously-decoded records. +func (r *Reader) LookupOffset(ipAddress net.IP) (uintptr, error) { + if r.buffer == nil { + return 0, errors.New("cannot call LookupOffset on a closed database") + } + pointer, err := r.lookupPointer(ipAddress) + if pointer == 0 || err != nil { + return NotFound, err + } + return r.resolveDataPointer(pointer) +} + +// Decode the record at |offset| into |result|. The result value pointed to +// must be a data value that corresponds to a record in the database. This may +// include a struct representation of the data, a map capable of holding the +// data or an empty interface{} value. +// +// If result is a pointer to a struct, the struct need not include a field +// for every value that may be in the database. If a field is not present in +// the structure, the decoder will not decode that field, reducing the time +// required to decode the record. +// +// As a special case, a struct field of type uintptr will be used to capture +// the offset of the value. Decode may later be used to extract the stored +// value from the offset. MaxMind DBs are highly normalized: for example in +// the City database, all records of the same country will reference a +// single representative record for that country. This uintptr behavior allows +// clients to leverage this normalization in their own sub-record caching. +func (r *Reader) Decode(offset uintptr, result interface{}) error { + if r.buffer == nil { + return errors.New("cannot call Decode on a closed database") + } + return r.decode(offset, result) +} + +func (r *Reader) decode(offset uintptr, result interface{}) error { + rv := reflect.ValueOf(result) + if rv.Kind() != reflect.Ptr || rv.IsNil() { + return errors.New("result param must be a pointer") + } + + _, err := r.decoder.decode(uint(offset), reflect.ValueOf(result), 0) + return err +} + +func (r *Reader) lookupPointer(ipAddress net.IP) (uint, error) { + if ipAddress == nil { + return 0, errors.New("ipAddress passed to Lookup cannot be nil") + } + + ipV4Address := ipAddress.To4() + if ipV4Address != nil { + ipAddress = ipV4Address + } + if len(ipAddress) == 16 && r.Metadata.IPVersion == 4 { + return 0, fmt.Errorf("error looking up '%s': you attempted to look up an IPv6 address in an IPv4-only database", ipAddress.String()) + } + + return r.findAddressInTree(ipAddress) +} + +func (r *Reader) findAddressInTree(ipAddress net.IP) (uint, error) { + + bitCount := uint(len(ipAddress) * 8) + + var node uint + if bitCount == 32 { + node = r.ipv4Start + } + + nodeCount := r.Metadata.NodeCount + + for i := uint(0); i < bitCount && node < nodeCount; i++ { + bit := uint(1) & (uint(ipAddress[i>>3]) >> (7 - (i % 8))) + + var err error + node, err = r.readNode(node, bit) + if err != nil { + return 0, err + } + } + if node == nodeCount { + // Record is empty + return 0, nil + } else if node > nodeCount { + return node, nil + } + + return 0, newInvalidDatabaseError("invalid node in search tree") +} + +func (r *Reader) readNode(nodeNumber uint, index uint) (uint, error) { + RecordSize := r.Metadata.RecordSize + + baseOffset := nodeNumber * RecordSize / 4 + + var nodeBytes []byte + var prefix uint + switch RecordSize { + case 24: + offset := baseOffset + index*3 + nodeBytes = r.buffer[offset : offset+3] + case 28: + prefix = uint(r.buffer[baseOffset+3]) + if index != 0 { + prefix &= 0x0F + } else { + prefix = (0xF0 & prefix) >> 4 + } + offset := baseOffset + index*4 + nodeBytes = r.buffer[offset : offset+3] + case 32: + offset := baseOffset + index*4 + nodeBytes = r.buffer[offset : offset+4] + default: + return 0, newInvalidDatabaseError("unknown record size: %d", RecordSize) + } + return uintFromBytes(prefix, nodeBytes), nil +} + +func (r *Reader) retrieveData(pointer uint, result interface{}) error { + offset, err := r.resolveDataPointer(pointer) + if err != nil { + return err + } + return r.decode(offset, result) +} + +func (r *Reader) resolveDataPointer(pointer uint) (uintptr, error) { + var resolved = uintptr(pointer - r.Metadata.NodeCount - dataSectionSeparatorSize) + + if resolved > uintptr(len(r.buffer)) { + return 0, newInvalidDatabaseError("the MaxMind DB file's search tree is corrupt") + } + return resolved, nil +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go b/vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go new file mode 100644 index 000000000000..d200f9fe05eb --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/reader_appengine.go @@ -0,0 +1,28 @@ +// +build appengine + +package maxminddb + +import "io/ioutil" + +// Open takes a string path to a MaxMind DB file and returns a Reader +// structure or an error. The database file is opened using a memory map, +// except on Google App Engine where mmap is not supported; there the database +// is loaded into memory. Use the Close method on the Reader object to return +// the resources to the system. +func Open(file string) (*Reader, error) { + bytes, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + + return FromBytes(bytes) +} + +// Close unmaps the database file from virtual memory and returns the +// resources to the system. If called on a Reader opened using FromBytes +// or Open on Google App Engine, this method sets the underlying buffer +// to nil, returning the resources to the system. +func (r *Reader) Close() error { + r.buffer = nil + return nil +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/reader_other.go b/vendor/github.com/oschwald/maxminddb-golang/reader_other.go new file mode 100644 index 000000000000..2a89fa676e8a --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/reader_other.go @@ -0,0 +1,63 @@ +// +build !appengine + +package maxminddb + +import ( + "os" + "runtime" +) + +// Open takes a string path to a MaxMind DB file and returns a Reader +// structure or an error. The database file is opened using a memory map, +// except on Google App Engine where mmap is not supported; there the database +// is loaded into memory. Use the Close method on the Reader object to return +// the resources to the system. +func Open(file string) (*Reader, error) { + mapFile, err := os.Open(file) + if err != nil { + return nil, err + } + defer func() { + if rerr := mapFile.Close(); rerr != nil { + err = rerr + } + }() + + stats, err := mapFile.Stat() + if err != nil { + return nil, err + } + + fileSize := int(stats.Size()) + mmap, err := mmap(int(mapFile.Fd()), fileSize) + if err != nil { + return nil, err + } + + reader, err := FromBytes(mmap) + if err != nil { + if err2 := munmap(mmap); err2 != nil { + // failing to unmap the file is probably the more severe error + return nil, err2 + } + return nil, err + } + + reader.hasMappedFile = true + runtime.SetFinalizer(reader, (*Reader).Close) + return reader, err +} + +// Close unmaps the database file from virtual memory and returns the +// resources to the system. If called on a Reader opened using FromBytes +// or Open on Google App Engine, this method does nothing. +func (r *Reader) Close() error { + var err error + if r.hasMappedFile { + runtime.SetFinalizer(r, nil) + r.hasMappedFile = false + err = munmap(r.buffer) + } + r.buffer = nil + return err +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/traverse.go b/vendor/github.com/oschwald/maxminddb-golang/traverse.go new file mode 100644 index 000000000000..f9b443c0dffc --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/traverse.go @@ -0,0 +1,108 @@ +package maxminddb + +import "net" + +// Internal structure used to keep track of nodes we still need to visit. +type netNode struct { + ip net.IP + bit uint + pointer uint +} + +// Networks represents a set of subnets that we are iterating over. +type Networks struct { + reader *Reader + nodes []netNode // Nodes we still have to visit. + lastNode netNode + err error +} + +// Networks returns an iterator that can be used to traverse all networks in +// the database. +// +// Please note that a MaxMind DB may map IPv4 networks into several locations +// in in an IPv6 database. This iterator will iterate over all of these +// locations separately. +func (r *Reader) Networks() *Networks { + s := 4 + if r.Metadata.IPVersion == 6 { + s = 16 + } + return &Networks{ + reader: r, + nodes: []netNode{ + { + ip: make(net.IP, s), + }, + }, + } +} + +// Next prepares the next network for reading with the Network method. It +// returns true if there is another network to be processed and false if there +// are no more networks or if there is an error. +func (n *Networks) Next() bool { + for len(n.nodes) > 0 { + node := n.nodes[len(n.nodes)-1] + n.nodes = n.nodes[:len(n.nodes)-1] + + for { + if node.pointer < n.reader.Metadata.NodeCount { + ipRight := make(net.IP, len(node.ip)) + copy(ipRight, node.ip) + if len(ipRight) <= int(node.bit>>3) { + n.err = newInvalidDatabaseError( + "invalid search tree at %v/%v", ipRight, node.bit) + return false + } + ipRight[node.bit>>3] |= 1 << (7 - (node.bit % 8)) + + rightPointer, err := n.reader.readNode(node.pointer, 1) + if err != nil { + n.err = err + return false + } + + node.bit++ + n.nodes = append(n.nodes, netNode{ + pointer: rightPointer, + ip: ipRight, + bit: node.bit, + }) + + node.pointer, err = n.reader.readNode(node.pointer, 0) + if err != nil { + n.err = err + return false + } + + } else if node.pointer > n.reader.Metadata.NodeCount { + n.lastNode = node + return true + } else { + break + } + } + } + + return false +} + +// Network returns the current network or an error if there is a problem +// decoding the data for the network. It takes a pointer to a result value to +// decode the network's data into. +func (n *Networks) Network(result interface{}) (*net.IPNet, error) { + if err := n.reader.retrieveData(n.lastNode.pointer, result); err != nil { + return nil, err + } + + return &net.IPNet{ + IP: n.lastNode.ip, + Mask: net.CIDRMask(int(n.lastNode.bit), len(n.lastNode.ip)*8), + }, nil +} + +// Err returns an error, if any, that was encountered during iteration. +func (n *Networks) Err() error { + return n.err +} diff --git a/vendor/github.com/oschwald/maxminddb-golang/verifier.go b/vendor/github.com/oschwald/maxminddb-golang/verifier.go new file mode 100644 index 000000000000..ace9d35c400a --- /dev/null +++ b/vendor/github.com/oschwald/maxminddb-golang/verifier.go @@ -0,0 +1,185 @@ +package maxminddb + +import "reflect" + +type verifier struct { + reader *Reader +} + +// Verify checks that the database is valid. It validates the search tree, +// the data section, and the metadata section. This verifier is stricter than +// the specification and may return errors on databases that are readable. +func (r *Reader) Verify() error { + v := verifier{r} + if err := v.verifyMetadata(); err != nil { + return err + } + + return v.verifyDatabase() +} + +func (v *verifier) verifyMetadata() error { + metadata := v.reader.Metadata + + if metadata.BinaryFormatMajorVersion != 2 { + return testError( + "binary_format_major_version", + 2, + metadata.BinaryFormatMajorVersion, + ) + } + + if metadata.BinaryFormatMinorVersion != 0 { + return testError( + "binary_format_minor_version", + 0, + metadata.BinaryFormatMinorVersion, + ) + } + + if metadata.DatabaseType == "" { + return testError( + "database_type", + "non-empty string", + metadata.DatabaseType, + ) + } + + if len(metadata.Description) == 0 { + return testError( + "description", + "non-empty slice", + metadata.Description, + ) + } + + if metadata.IPVersion != 4 && metadata.IPVersion != 6 { + return testError( + "ip_version", + "4 or 6", + metadata.IPVersion, + ) + } + + if metadata.RecordSize != 24 && + metadata.RecordSize != 28 && + metadata.RecordSize != 32 { + return testError( + "record_size", + "24, 28, or 32", + metadata.RecordSize, + ) + } + + if metadata.NodeCount == 0 { + return testError( + "node_count", + "positive integer", + metadata.NodeCount, + ) + } + return nil +} + +func (v *verifier) verifyDatabase() error { + offsets, err := v.verifySearchTree() + if err != nil { + return err + } + + if err := v.verifyDataSectionSeparator(); err != nil { + return err + } + + return v.verifyDataSection(offsets) +} + +func (v *verifier) verifySearchTree() (map[uint]bool, error) { + offsets := make(map[uint]bool) + + it := v.reader.Networks() + for it.Next() { + offset, err := v.reader.resolveDataPointer(it.lastNode.pointer) + if err != nil { + return nil, err + } + offsets[uint(offset)] = true + } + if err := it.Err(); err != nil { + return nil, err + } + return offsets, nil +} + +func (v *verifier) verifyDataSectionSeparator() error { + separatorStart := v.reader.Metadata.NodeCount * v.reader.Metadata.RecordSize / 4 + + separator := v.reader.buffer[separatorStart : separatorStart+dataSectionSeparatorSize] + + for _, b := range separator { + if b != 0 { + return newInvalidDatabaseError("unexpected byte in data separator: %v", separator) + } + } + return nil +} + +func (v *verifier) verifyDataSection(offsets map[uint]bool) error { + pointerCount := len(offsets) + + decoder := v.reader.decoder + + var offset uint + bufferLen := uint(len(decoder.buffer)) + for offset < bufferLen { + var data interface{} + rv := reflect.ValueOf(&data) + newOffset, err := decoder.decode(offset, rv, 0) + if err != nil { + return newInvalidDatabaseError("received decoding error (%v) at offset of %v", err, offset) + } + if newOffset <= offset { + return newInvalidDatabaseError("data section offset unexpectedly went from %v to %v", offset, newOffset) + } + + pointer := offset + + if _, ok := offsets[pointer]; ok { + delete(offsets, pointer) + } else { + return newInvalidDatabaseError("found data (%v) at %v that the search tree does not point to", data, pointer) + } + + offset = newOffset + } + + if offset != bufferLen { + return newInvalidDatabaseError( + "unexpected data at the end of the data section (last offset: %v, end: %v)", + offset, + bufferLen, + ) + } + + if len(offsets) != 0 { + return newInvalidDatabaseError( + "found %v pointers (of %v) in the search tree that we did not see in the data section", + len(offsets), + pointerCount, + ) + } + return nil +} + +func testError( + field string, + expected interface{}, + actual interface{}, +) error { + return newInvalidDatabaseError( + "%v - Expected: %v Actual: %v", + field, + expected, + actual, + ) +} diff --git a/vendor/github.com/peterh/liner/fallbackinput.go b/vendor/github.com/peterh/liner/fallbackinput.go index d9eb79d9e055..043fb33218f1 100644 --- a/vendor/github.com/peterh/liner/fallbackinput.go +++ b/vendor/github.com/peterh/liner/fallbackinput.go @@ -55,3 +55,5 @@ func (n noopMode) ApplyMode() error { func TerminalMode() (ModeApplier, error) { return noopMode{}, nil } + +const cursorColumn = true diff --git a/vendor/github.com/peterh/liner/go.mod b/vendor/github.com/peterh/liner/go.mod new file mode 100644 index 000000000000..6804de36f553 --- /dev/null +++ b/vendor/github.com/peterh/liner/go.mod @@ -0,0 +1,3 @@ +module github.com/peterh/liner + +require github.com/mattn/go-runewidth v0.0.3 diff --git a/vendor/github.com/peterh/liner/go.sum b/vendor/github.com/peterh/liner/go.sum new file mode 100644 index 000000000000..1c1891604c8a --- /dev/null +++ b/vendor/github.com/peterh/liner/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= diff --git a/vendor/github.com/peterh/liner/input.go b/vendor/github.com/peterh/liner/input.go index 95dd5d14357c..e04e7722535a 100644 --- a/vendor/github.com/peterh/liner/input.go +++ b/vendor/github.com/peterh/liner/input.go @@ -264,9 +264,9 @@ func (s *State) readNext() (interface{}, error) { return pageUp, nil case 6: return pageDown, nil - case 7: + case 1, 7: return home, nil - case 8: + case 4, 8: return end, nil case 15: return f5, nil @@ -328,6 +328,9 @@ func (s *State) readNext() (interface{}, error) { case 'b': s.pending = s.pending[:0] // escape code complete return altB, nil + case 'd': + s.pending = s.pending[:0] // escape code complete + return altD, nil case 'f': s.pending = s.pending[:0] // escape code complete return altF, nil diff --git a/vendor/github.com/peterh/liner/input_windows.go b/vendor/github.com/peterh/liner/input_windows.go index a48eb0f1d2cd..36e95161adf5 100644 --- a/vendor/github.com/peterh/liner/input_windows.go +++ b/vendor/github.com/peterh/liner/input_windows.go @@ -4,6 +4,7 @@ import ( "bufio" "os" "syscall" + "unicode/utf16" "unsafe" ) @@ -103,7 +104,7 @@ type key_event_record struct { RepeatCount uint16 VirtualKeyCode uint16 VirtualScanCode uint16 - Char int16 + Char uint16 ControlKeyState uint32 } @@ -111,6 +112,7 @@ type key_event_record struct { // what golint suggests) const ( vk_tab = 0x09 + vk_menu = 0x12 // ALT key vk_prior = 0x21 vk_next = 0x22 vk_end = 0x23 @@ -134,6 +136,7 @@ const ( vk_f11 = 0x7a vk_f12 = 0x7b bKey = 0x42 + dKey = 0x44 fKey = 0x46 yKey = 0x59 ) @@ -174,6 +177,8 @@ func (s *State) readNext() (interface{}, error) { var rv uint32 prv := uintptr(unsafe.Pointer(&rv)) + var surrogate uint16 + for { ok, _, err := procReadConsoleInput.Call(uintptr(s.handle), pbuf, 1, prv) @@ -184,9 +189,6 @@ func (s *State) readNext() (interface{}, error) { if input.eventType == window_buffer_size_event { xy := (*coord)(unsafe.Pointer(&input.blob[0])) s.columns = int(xy.x) - if s.columns > 1 { - s.columns-- - } return winch, nil } if input.eventType != key_event { @@ -194,6 +196,17 @@ func (s *State) readNext() (interface{}, error) { } ke := (*key_event_record)(unsafe.Pointer(&input.blob[0])) if ke.KeyDown == 0 { + if ke.VirtualKeyCode == vk_menu && ke.Char > 0 { + // paste of unicode (eg. via ALT-numpad) + if surrogate > 0 { + return utf16.DecodeRune(rune(surrogate), rune(ke.Char)), nil + } else if utf16.IsSurrogate(rune(ke.Char)) { + surrogate = ke.Char + continue + } else { + return rune(ke.Char), nil + } + } continue } @@ -202,6 +215,9 @@ func (s *State) readNext() (interface{}, error) { } else if ke.VirtualKeyCode == bKey && (ke.ControlKeyState&modKeys == leftAltPressed || ke.ControlKeyState&modKeys == rightAltPressed) { s.key = altB + } else if ke.VirtualKeyCode == dKey && (ke.ControlKeyState&modKeys == leftAltPressed || + ke.ControlKeyState&modKeys == rightAltPressed) { + s.key = altD } else if ke.VirtualKeyCode == fKey && (ke.ControlKeyState&modKeys == leftAltPressed || ke.ControlKeyState&modKeys == rightAltPressed) { s.key = altF @@ -209,7 +225,14 @@ func (s *State) readNext() (interface{}, error) { ke.ControlKeyState&modKeys == rightAltPressed) { s.key = altY } else if ke.Char > 0 { - s.key = rune(ke.Char) + if surrogate > 0 { + s.key = utf16.DecodeRune(rune(surrogate), rune(ke.Char)) + } else if utf16.IsSurrogate(rune(ke.Char)) { + surrogate = ke.Char + continue + } else { + s.key = rune(ke.Char) + } } else { switch ke.VirtualKeyCode { case vk_prior: @@ -337,3 +360,5 @@ func TerminalMode() (ModeApplier, error) { } return mode, err } + +const cursorColumn = true diff --git a/vendor/github.com/peterh/liner/line.go b/vendor/github.com/peterh/liner/line.go index d61f0696b0e8..076a195c4379 100644 --- a/vendor/github.com/peterh/liner/line.go +++ b/vendor/github.com/peterh/liner/line.go @@ -40,6 +40,7 @@ const ( f11 f12 altB + altD altF altY shiftTab @@ -112,6 +113,10 @@ func (s *State) refreshSingleLine(prompt []rune, buf []rune, pos int) error { pLen := countGlyphs(prompt) bLen := countGlyphs(buf) + // on some OS / terminals extra column is needed to place the cursor char + if cursorColumn { + bLen++ + } pos = countGlyphs(buf[:pos]) if pLen+bLen < s.columns { _, err = fmt.Print(string(buf)) @@ -162,6 +167,14 @@ func (s *State) refreshSingleLine(prompt []rune, buf []rune, pos int) error { func (s *State) refreshMultiLine(prompt []rune, buf []rune, pos int) error { promptColumns := countMultiLineGlyphs(prompt, s.columns, 0) totalColumns := countMultiLineGlyphs(buf, s.columns, promptColumns) + // on some OS / terminals extra column is needed to place the cursor char + // if cursorColumn { + // totalColumns++ + // } + + // it looks like Multiline mode always assume that a cursor need an extra column, + // and always emit a newline if we are at the screen end, so no worarounds needed there + totalRows := (totalColumns + s.columns - 1) / s.columns maxRows := s.maxRows if totalRows > s.maxRows { @@ -583,7 +596,7 @@ func (s *State) Prompt(prompt string) (string, error) { // PromptWithSuggestion displays prompt and an editable text with cursor at // given position. The cursor will be set to the end of the line if given position -// is negative or greater than length of text. Returns a line of user input, not +// is negative or greater than length of text (in runes). Returns a line of user input, not // including a trailing newline character. An io.EOF error is returned if the user // signals end-of-file by pressing Ctrl-D. func (s *State) PromptWithSuggestion(prompt string, text string, pos int) (string, error) { @@ -618,8 +631,8 @@ func (s *State) PromptWithSuggestion(prompt string, text string, pos int) (strin defer s.stopPrompt() - if pos < 0 || len(text) < pos { - pos = len(text) + if pos < 0 || len(line) < pos { + pos = len(line) } if len(line) > 0 { err := s.refresh(p, line, pos) @@ -969,6 +982,35 @@ mainLoop: pos = 0 case end: // End of line pos = len(line) + case altD: // Delete next word + if pos == len(line) { + fmt.Print(beep) + break + } + // Remove whitespace to the right + var buf []rune // Store the deleted chars in a buffer + for { + if pos == len(line) || !unicode.IsSpace(line[pos]) { + break + } + buf = append(buf, line[pos]) + line = append(line[:pos], line[pos+1:]...) + } + // Remove non-whitespace to the right + for { + if pos == len(line) || unicode.IsSpace(line[pos]) { + break + } + buf = append(buf, line[pos]) + line = append(line[:pos], line[pos+1:]...) + } + // Save the result on the killRing + if killAction > 0 { + s.addToKillRing(buf, 2) // Add in prepend mode + } else { + s.addToKillRing(buf, 0) // Add in normal mode + } + killAction = 2 // Mark that there was some killing case winch: // Window change if s.multiLineMode { if s.maxRows-s.cursorRows > 0 { diff --git a/vendor/github.com/peterh/liner/output.go b/vendor/github.com/peterh/liner/output.go index 6d83d4ebfd7c..db0641cfe082 100644 --- a/vendor/github.com/peterh/liner/output.go +++ b/vendor/github.com/peterh/liner/output.go @@ -56,9 +56,6 @@ func (s *State) getColumns() bool { return false } s.columns = int(ws.col) - if cursorColumn && s.columns > 1 { - s.columns-- - } return true } diff --git a/vendor/github.com/peterh/liner/output_windows.go b/vendor/github.com/peterh/liner/output_windows.go index 63c9c5d75713..45cd978c96d3 100644 --- a/vendor/github.com/peterh/liner/output_windows.go +++ b/vendor/github.com/peterh/liner/output_windows.go @@ -69,8 +69,4 @@ func (s *State) getColumns() { var sbi consoleScreenBufferInfo procGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi))) s.columns = int(sbi.dwSize.x) - if s.columns > 1 { - // Windows 10 needs a spare column for the cursor - s.columns-- - } } diff --git a/vendor/github.com/peterh/liner/width.go b/vendor/github.com/peterh/liner/width.go index 42e89998341b..0395f3a8be67 100644 --- a/vendor/github.com/peterh/liner/width.go +++ b/vendor/github.com/peterh/liner/width.go @@ -1,6 +1,10 @@ package liner -import "unicode" +import ( + "unicode" + + "github.com/mattn/go-runewidth" +) // These character classes are mostly zero width (when combined). // A few might not be, depending on the user's font. Fixing this @@ -13,13 +17,6 @@ var zeroWidth = []*unicode.RangeTable{ unicode.Cf, } -var doubleWidth = []*unicode.RangeTable{ - unicode.Han, - unicode.Hangul, - unicode.Hiragana, - unicode.Katakana, -} - // countGlyphs considers zero-width characters to be zero glyphs wide, // and members of Chinese, Japanese, and Korean scripts to be 2 glyphs wide. func countGlyphs(s []rune) int { @@ -31,13 +28,7 @@ func countGlyphs(s []rune) int { continue } - switch { - case unicode.IsOneOf(zeroWidth, r): - case unicode.IsOneOf(doubleWidth, r): - n += 2 - default: - n++ - } + n += runewidth.RuneWidth(r) } return n } @@ -49,17 +40,17 @@ func countMultiLineGlyphs(s []rune, columns int, start int) int { n++ continue } - switch { - case unicode.IsOneOf(zeroWidth, r): - case unicode.IsOneOf(doubleWidth, r): + switch runewidth.RuneWidth(r) { + case 0: + case 1: + n++ + case 2: n += 2 // no room for a 2-glyphs-wide char in the ending // so skip a column and display it at the beginning if n%columns == 1 { n++ } - default: - n++ } } return n diff --git a/vendor/github.com/prometheus/prometheus/NOTICE b/vendor/github.com/prometheus/prometheus/NOTICE deleted file mode 100644 index 47de2415e1b6..000000000000 --- a/vendor/github.com/prometheus/prometheus/NOTICE +++ /dev/null @@ -1,87 +0,0 @@ -The Prometheus systems and service monitoring server -Copyright 2012-2015 The Prometheus Authors - -This product includes software developed at -SoundCloud Ltd. (http://soundcloud.com/). - - -The following components are included in this product: - -Bootstrap -http://getbootstrap.com -Copyright 2011-2014 Twitter, Inc. -Licensed under the MIT License - -bootstrap3-typeahead.js -https://github.com/bassjobsen/Bootstrap-3-Typeahead -Original written by @mdo and @fat -Copyright 2014 Bass Jobsen @bassjobsen -Licensed under the Apache License, Version 2.0 - -fuzzy -https://github.com/mattyork/fuzzy -Original written by @mattyork -Copyright 2012 Matt York -Licensed under the MIT License - -bootstrap-datetimepicker.js -https://github.com/Eonasdan/bootstrap-datetimepicker -Copyright 2015 Jonathan Peterson (@Eonasdan) -Licensed under the MIT License - -moment.js -https://github.com/moment/moment/ -Copyright JS Foundation and other contributors -Licensed under the MIT License - -Rickshaw -https://github.com/shutterstock/rickshaw -Copyright 2011-2014 by Shutterstock Images, LLC -See https://github.com/shutterstock/rickshaw/blob/master/LICENSE for license details - -mustache.js -https://github.com/janl/mustache.js -Copyright 2009 Chris Wanstrath (Ruby) -Copyright 2010-2014 Jan Lehnardt (JavaScript) -Copyright 2010-2015 The mustache.js community -Licensed under the MIT License - -jQuery -https://jquery.org -Copyright jQuery Foundation and other contributors -Licensed under the MIT License - -Go support for Protocol Buffers - Google's data interchange format -http://github.com/golang/protobuf/ -Copyright 2010 The Go Authors -See source code for license details. - -Go support for leveled logs, analogous to -https://code.google.com/p/google-glog/ -Copyright 2013 Google Inc. -Licensed under the Apache License, Version 2.0 - -Support for streaming Protocol Buffer messages for the Go language (golang). -https://github.com/matttproud/golang_protobuf_extensions -Copyright 2013 Matt T. Proud -Licensed under the Apache License, Version 2.0 - -DNS library in Go -http://miek.nl/posts/2014/Aug/16/go-dns-package/ -Copyright 2009 The Go Authors, 2011 Miek Gieben -See https://github.com/miekg/dns/blob/master/LICENSE for license details. - -LevelDB key/value database in Go -https://github.com/syndtr/goleveldb -Copyright 2012 Suryandaru Triandana -See https://github.com/syndtr/goleveldb/blob/master/LICENSE for license details. - -gosnappy - a fork of code.google.com/p/snappy-go -https://github.com/syndtr/gosnappy -Copyright 2011 The Snappy-Go Authors -See https://github.com/syndtr/gosnappy/blob/master/LICENSE for license details. - -go-zookeeper - Native ZooKeeper client for Go -https://github.com/samuel/go-zookeeper -Copyright (c) 2013, Samuel Stauffer -See https://github.com/samuel/go-zookeeper/blob/master/LICENSE for license details. diff --git a/vendor/github.com/prometheus/prometheus/LICENSE b/vendor/github.com/prometheus/tsdb/LICENSE similarity index 100% rename from vendor/github.com/prometheus/prometheus/LICENSE rename to vendor/github.com/prometheus/tsdb/LICENSE diff --git a/vendor/github.com/prometheus/tsdb/fileutil/dir_unix.go b/vendor/github.com/prometheus/tsdb/fileutil/dir_unix.go new file mode 100644 index 000000000000..58a77dfc1a99 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/dir_unix.go @@ -0,0 +1,22 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows + +package fileutil + +import "os" + +// OpenDir opens a directory for syncing. +func OpenDir(path string) (*os.File, error) { return os.Open(path) } diff --git a/vendor/github.com/prometheus/tsdb/fileutil/dir_windows.go b/vendor/github.com/prometheus/tsdb/fileutil/dir_windows.go new file mode 100644 index 000000000000..c123395c0040 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/dir_windows.go @@ -0,0 +1,46 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build windows + +package fileutil + +import ( + "os" + "syscall" +) + +// OpenDir opens a directory in windows with write access for syncing. +func OpenDir(path string) (*os.File, error) { + fd, err := openDir(path) + if err != nil { + return nil, err + } + return os.NewFile(uintptr(fd), path), nil +} + +func openDir(path string) (fd syscall.Handle, err error) { + if len(path) == 0 { + return syscall.InvalidHandle, syscall.ERROR_FILE_NOT_FOUND + } + pathp, err := syscall.UTF16PtrFromString(path) + if err != nil { + return syscall.InvalidHandle, err + } + access := uint32(syscall.GENERIC_READ | syscall.GENERIC_WRITE) + sharemode := uint32(syscall.FILE_SHARE_READ | syscall.FILE_SHARE_WRITE) + createmode := uint32(syscall.OPEN_EXISTING) + fl := uint32(syscall.FILE_FLAG_BACKUP_SEMANTICS) + return syscall.CreateFile(pathp, access, sharemode, nil, createmode, fl, 0) +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/fileutil.go b/vendor/github.com/prometheus/tsdb/fileutil/fileutil.go new file mode 100644 index 000000000000..154fa184436e --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/fileutil.go @@ -0,0 +1,149 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package fileutil provides utility methods used when dealing with the filesystem in tsdb. +// It is largely copied from github.com/coreos/etcd/pkg/fileutil to avoid the +// dependency chain it brings with it. +// Please check github.com/coreos/etcd for licensing information. +package fileutil + +import ( + "io/ioutil" + "os" + "path/filepath" + "sort" + "strings" +) + +// CopyDirs copies all directories, subdirectories and files recursively including the empty folders. +// Source and destination must be full paths. +func CopyDirs(src, dest string) error { + if err := os.MkdirAll(dest, 0777); err != nil { + return err + } + files, err := readDirs(src) + if err != nil { + return err + } + + for _, f := range files { + dp := filepath.Join(dest, f) + sp := filepath.Join(src, f) + + stat, err := os.Stat(sp) + if err != nil { + return err + } + + // Empty directories are also created. + if stat.IsDir() { + if err := os.MkdirAll(dp, 0777); err != nil { + return err + } + continue + } + + if err := copyFile(sp, dp); err != nil { + return err + } + } + return nil +} + +func copyFile(src, dest string) error { + data, err := ioutil.ReadFile(src) + if err != nil { + return err + } + + err = ioutil.WriteFile(dest, data, 0644) + if err != nil { + return err + } + return nil +} + +// readDirs reads the source directory recursively and +// returns relative paths to all files and empty directories. +func readDirs(src string) ([]string, error) { + var files []string + + err := filepath.Walk(src, func(path string, f os.FileInfo, err error) error { + relativePath := strings.TrimPrefix(path, src) + if len(relativePath) > 0 { + files = append(files, relativePath) + } + return nil + }) + if err != nil { + return nil, err + } + return files, nil +} + +// ReadDir returns the filenames in the given directory in sorted order. +func ReadDir(dirpath string) ([]string, error) { + dir, err := os.Open(dirpath) + if err != nil { + return nil, err + } + defer dir.Close() + names, err := dir.Readdirnames(-1) + if err != nil { + return nil, err + } + sort.Strings(names) + return names, nil +} + +// Rename safely renames a file. +func Rename(from, to string) error { + if err := os.Rename(from, to); err != nil { + return err + } + + // Directory was renamed; sync parent dir to persist rename. + pdir, err := OpenDir(filepath.Dir(to)) + if err != nil { + return err + } + + if err = Fsync(pdir); err != nil { + pdir.Close() + return err + } + return pdir.Close() +} + +// Replace moves a file or directory to a new location and deletes any previous data. +// It is not atomic. +func Replace(from, to string) error { + if err := os.RemoveAll(to); err != nil { + return err + } + if err := os.Rename(from, to); err != nil { + return err + } + + // Directory was renamed; sync parent dir to persist rename. + pdir, err := OpenDir(filepath.Dir(to)) + if err != nil { + return err + } + + if err = Fsync(pdir); err != nil { + pdir.Close() + return err + } + return pdir.Close() +} diff --git a/vendor/github.com/prometheus/prometheus/util/flock/flock.go b/vendor/github.com/prometheus/tsdb/fileutil/flock.go similarity index 68% rename from vendor/github.com/prometheus/prometheus/util/flock/flock.go rename to vendor/github.com/prometheus/tsdb/fileutil/flock.go index 5dc22a2fae8f..d5eaa7ca2adf 100644 --- a/vendor/github.com/prometheus/prometheus/util/flock/flock.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/flock.go @@ -11,12 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package flock provides portable file locking. It is essentially ripped out -// from the code of github.com/syndtr/goleveldb. Strange enough that the -// standard library does not provide this functionality. Once this package has -// proven to work as expected, we should probably turn it into a separate -// general purpose package for humanity. -package flock +package fileutil import ( "os" @@ -28,19 +23,19 @@ type Releaser interface { Release() error } -// New locks the file with the provided name. If the file does not exist, it is +// Flock locks the file with the provided name. If the file does not exist, it is // created. The returned Releaser is used to release the lock. existed is true // if the file to lock already existed. A non-nil error is returned if the // locking has failed. Neither this function nor the returned Releaser is // goroutine-safe. -func New(fileName string) (r Releaser, existed bool, err error) { +func Flock(fileName string) (r Releaser, existed bool, err error) { if err = os.MkdirAll(filepath.Dir(fileName), 0755); err != nil { - return + return nil, false, err } _, err = os.Stat(fileName) existed = err == nil r, err = newLock(fileName) - return + return r, existed, err } diff --git a/vendor/github.com/prometheus/prometheus/util/flock/flock_plan9.go b/vendor/github.com/prometheus/tsdb/fileutil/flock_plan9.go similarity index 98% rename from vendor/github.com/prometheus/prometheus/util/flock/flock_plan9.go rename to vendor/github.com/prometheus/tsdb/fileutil/flock_plan9.go index 004e85c0fe4a..8a3d44c5e146 100644 --- a/vendor/github.com/prometheus/prometheus/util/flock/flock_plan9.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/flock_plan9.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package flock +package fileutil import "os" diff --git a/vendor/github.com/prometheus/prometheus/util/flock/flock_solaris.go b/vendor/github.com/prometheus/tsdb/fileutil/flock_solaris.go similarity index 98% rename from vendor/github.com/prometheus/prometheus/util/flock/flock_solaris.go rename to vendor/github.com/prometheus/tsdb/fileutil/flock_solaris.go index 299fc874465f..7f527ae6c49a 100644 --- a/vendor/github.com/prometheus/prometheus/util/flock/flock_solaris.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/flock_solaris.go @@ -13,7 +13,7 @@ // +build solaris -package flock +package fileutil import ( "os" diff --git a/vendor/github.com/prometheus/prometheus/util/flock/flock_unix.go b/vendor/github.com/prometheus/tsdb/fileutil/flock_unix.go similarity index 98% rename from vendor/github.com/prometheus/prometheus/util/flock/flock_unix.go rename to vendor/github.com/prometheus/tsdb/fileutil/flock_unix.go index 7d71f8fc095a..f493fbd831da 100644 --- a/vendor/github.com/prometheus/prometheus/util/flock/flock_unix.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/flock_unix.go @@ -13,7 +13,7 @@ // +build darwin dragonfly freebsd linux netbsd openbsd -package flock +package fileutil import ( "os" diff --git a/vendor/github.com/prometheus/prometheus/util/flock/flock_windows.go b/vendor/github.com/prometheus/tsdb/fileutil/flock_windows.go similarity index 98% rename from vendor/github.com/prometheus/prometheus/util/flock/flock_windows.go rename to vendor/github.com/prometheus/tsdb/fileutil/flock_windows.go index bf7266f14ca1..1c17ff4ea303 100644 --- a/vendor/github.com/prometheus/prometheus/util/flock/flock_windows.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/flock_windows.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package flock +package fileutil import "syscall" diff --git a/vendor/github.com/prometheus/tsdb/fileutil/mmap.go b/vendor/github.com/prometheus/tsdb/fileutil/mmap.go new file mode 100644 index 000000000000..26fc80c58503 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/mmap.go @@ -0,0 +1,61 @@ +// Copyright 2018 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + + "github.com/pkg/errors" +) + +type MmapFile struct { + f *os.File + b []byte +} + +func OpenMmapFile(path string) (*MmapFile, error) { + f, err := os.Open(path) + if err != nil { + return nil, errors.Wrap(err, "try lock file") + } + info, err := f.Stat() + if err != nil { + return nil, errors.Wrap(err, "stat") + } + + b, err := mmap(f, int(info.Size())) + if err != nil { + return nil, errors.Wrap(err, "mmap") + } + + return &MmapFile{f: f, b: b}, nil +} + +func (f *MmapFile) Close() error { + err0 := munmap(f.b) + err1 := f.f.Close() + + if err0 != nil { + return err0 + } + return err1 +} + +func (f *MmapFile) File() *os.File { + return f.f +} + +func (f *MmapFile) Bytes() []byte { + return f.b +} diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/doc.go b/vendor/github.com/prometheus/tsdb/fileutil/mmap_386.go similarity index 78% rename from vendor/github.com/uber/jaeger-client-go/rpcmetrics/doc.go rename to vendor/github.com/prometheus/tsdb/fileutil/mmap_386.go index 51aa11b350e5..66b9d3680344 100644 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/doc.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/mmap_386.go @@ -1,5 +1,4 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// +// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -12,5 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package rpcmetrics implements an Observer that can be used to emit RPC metrics. -package rpcmetrics +// +build windows + +package fileutil + +const maxMapSize = 0x7FFFFFFF // 2GB diff --git a/vendor/github.com/uber/jaeger-client-go/reference.go b/vendor/github.com/prometheus/tsdb/fileutil/mmap_amd64.go similarity index 66% rename from vendor/github.com/uber/jaeger-client-go/reference.go rename to vendor/github.com/prometheus/tsdb/fileutil/mmap_amd64.go index 5646e78bb2a8..4b523bc67c2e 100644 --- a/vendor/github.com/uber/jaeger-client-go/reference.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/mmap_amd64.go @@ -1,5 +1,4 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// +// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -12,12 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -package jaeger +// +build windows -import "github.com/opentracing/opentracing-go" +package fileutil -// Reference represents a causal reference to other Spans (via their SpanContext). -type Reference struct { - Type opentracing.SpanReferenceType - Context SpanContext -} +const maxMapSize = 0xFFFFFFFFFFFF // 256TB diff --git a/vendor/github.com/uber/jaeger-lib/metrics/counter.go b/vendor/github.com/prometheus/tsdb/fileutil/mmap_unix.go similarity index 61% rename from vendor/github.com/uber/jaeger-lib/metrics/counter.go rename to vendor/github.com/prometheus/tsdb/fileutil/mmap_unix.go index 2a6a43efdb45..043f4d408cc3 100644 --- a/vendor/github.com/uber/jaeger-lib/metrics/counter.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/mmap_unix.go @@ -1,5 +1,4 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// +// Copyright 2017 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -12,17 +11,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package metrics +// +build !windows,!plan9 -// Counter tracks the number of times an event has occurred -type Counter interface { - // Inc adds the given value to the counter. - Inc(int64) -} +package fileutil -// NullCounter counter that does nothing -var NullCounter Counter = nullCounter{} +import ( + "os" -type nullCounter struct{} + "golang.org/x/sys/unix" +) -func (nullCounter) Inc(int64) {} +func mmap(f *os.File, length int) ([]byte, error) { + return unix.Mmap(int(f.Fd()), 0, length, unix.PROT_READ, unix.MAP_SHARED) +} + +func munmap(b []byte) (err error) { + return unix.Munmap(b) +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/mmap_windows.go b/vendor/github.com/prometheus/tsdb/fileutil/mmap_windows.go new file mode 100644 index 000000000000..b9422641239f --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/mmap_windows.go @@ -0,0 +1,46 @@ +// Copyright 2017 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + "syscall" + "unsafe" +) + +func mmap(f *os.File, size int) ([]byte, error) { + low, high := uint32(size), uint32(size>>32) + h, errno := syscall.CreateFileMapping(syscall.Handle(f.Fd()), nil, syscall.PAGE_READONLY, high, low, nil) + if h == 0 { + return nil, os.NewSyscallError("CreateFileMapping", errno) + } + + addr, errno := syscall.MapViewOfFile(h, syscall.FILE_MAP_READ, 0, 0, uintptr(size)) + if addr == 0 { + return nil, os.NewSyscallError("MapViewOfFile", errno) + } + + if err := syscall.CloseHandle(syscall.Handle(h)); err != nil { + return nil, os.NewSyscallError("CloseHandle", err) + } + + return (*[maxMapSize]byte)(unsafe.Pointer(addr))[:size], nil +} + +func munmap(b []byte) error { + if err := syscall.UnmapViewOfFile((uintptr)(unsafe.Pointer(&b[0]))); err != nil { + return os.NewSyscallError("UnmapViewOfFile", err) + } + return nil +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/preallocate.go b/vendor/github.com/prometheus/tsdb/fileutil/preallocate.go new file mode 100644 index 000000000000..c747b7cf81f9 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/preallocate.go @@ -0,0 +1,54 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "io" + "os" +) + +// Preallocate tries to allocate the space for given +// file. This operation is only supported on linux by a +// few filesystems (btrfs, ext4, etc.). +// If the operation is unsupported, no error will be returned. +// Otherwise, the error encountered will be returned. +func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error { + if sizeInBytes == 0 { + // fallocate will return EINVAL if length is 0; skip + return nil + } + if extendFile { + return preallocExtend(f, sizeInBytes) + } + return preallocFixed(f, sizeInBytes) +} + +func preallocExtendTrunc(f *os.File, sizeInBytes int64) error { + curOff, err := f.Seek(0, io.SeekCurrent) + if err != nil { + return err + } + size, err := f.Seek(sizeInBytes, io.SeekEnd) + if err != nil { + return err + } + if _, err = f.Seek(curOff, io.SeekStart); err != nil { + return err + } + if sizeInBytes > size { + return nil + } + return f.Truncate(sizeInBytes) +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/preallocate_darwin.go b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_darwin.go new file mode 100644 index 000000000000..c9fa1a6c2260 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_darwin.go @@ -0,0 +1,41 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + "syscall" + "unsafe" +) + +func preallocExtend(f *os.File, sizeInBytes int64) error { + if err := preallocFixed(f, sizeInBytes); err != nil { + return err + } + return preallocExtendTrunc(f, sizeInBytes) +} + +func preallocFixed(f *os.File, sizeInBytes int64) error { + fstore := &syscall.Fstore_t{ + Flags: syscall.F_ALLOCATEALL, + Posmode: syscall.F_PEOFPOSMODE, + Length: sizeInBytes} + p := unsafe.Pointer(fstore) + _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, f.Fd(), uintptr(syscall.F_PREALLOCATE), uintptr(p)) + if errno == 0 || errno == syscall.ENOTSUP { + return nil + } + return errno +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/preallocate_linux.go b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_linux.go new file mode 100644 index 000000000000..ada0462213e3 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_linux.go @@ -0,0 +1,47 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + "syscall" +) + +func preallocExtend(f *os.File, sizeInBytes int64) error { + // use mode = 0 to change size + err := syscall.Fallocate(int(f.Fd()), 0, 0, sizeInBytes) + if err != nil { + errno, ok := err.(syscall.Errno) + // not supported; fallback + // fallocate EINTRs frequently in some environments; fallback + if ok && (errno == syscall.ENOTSUP || errno == syscall.EINTR) { + return preallocExtendTrunc(f, sizeInBytes) + } + } + return err +} + +func preallocFixed(f *os.File, sizeInBytes int64) error { + // use mode = 1 to keep size; see FALLOC_FL_KEEP_SIZE + err := syscall.Fallocate(int(f.Fd()), 1, 0, sizeInBytes) + if err != nil { + errno, ok := err.(syscall.Errno) + // treat not supported as nil error + if ok && errno == syscall.ENOTSUP { + return nil + } + } + return err +} diff --git a/vendor/github.com/uber/jaeger-lib/metrics/gauge.go b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_other.go similarity index 56% rename from vendor/github.com/uber/jaeger-lib/metrics/gauge.go rename to vendor/github.com/prometheus/tsdb/fileutil/preallocate_other.go index 3c606391a095..162fbc5f7826 100644 --- a/vendor/github.com/uber/jaeger-lib/metrics/gauge.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/preallocate_other.go @@ -1,10 +1,10 @@ -// Copyright (c) 2017 Uber Technologies, Inc. +// Copyright 2015 The etcd Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -12,17 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -package metrics +// +build !linux,!darwin -// Gauge returns instantaneous measurements of something as an int64 value -type Gauge interface { - // Update the gauge to the value passed in. - Update(int64) -} +package fileutil -// NullGauge gauge that does nothing -var NullGauge Gauge = nullGauge{} +import "os" -type nullGauge struct{} +func preallocExtend(f *os.File, sizeInBytes int64) error { + return preallocExtendTrunc(f, sizeInBytes) +} -func (nullGauge) Update(int64) {} +func preallocFixed(f *os.File, sizeInBytes int64) error { return nil } diff --git a/vendor/github.com/uber/jaeger-client-go/doc.go b/vendor/github.com/prometheus/tsdb/fileutil/sync.go similarity index 54% rename from vendor/github.com/uber/jaeger-client-go/doc.go rename to vendor/github.com/prometheus/tsdb/fileutil/sync.go index 4f5549033d5d..54dd41f4f351 100644 --- a/vendor/github.com/uber/jaeger-client-go/doc.go +++ b/vendor/github.com/prometheus/tsdb/fileutil/sync.go @@ -1,10 +1,10 @@ -// Copyright (c) 2017 Uber Technologies, Inc. +// Copyright 2016 The etcd Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -12,13 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -/* -Package jaeger implements an OpenTracing (http://opentracing.io) Tracer. -It is currently using Zipkin-compatible data model and can be directly -itegrated with Zipkin backend (http://zipkin.io). +// +build !linux,!darwin -For integration instructions please refer to the README: +package fileutil -https://github.com/uber/jaeger-client-go/blob/master/README.md -*/ -package jaeger +import "os" + +// Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform. +func Fsync(f *os.File) error { + return f.Sync() +} + +// Fdatasync is a wrapper around file.Sync(). Special handling is needed on linux platform. +func Fdatasync(f *os.File) error { + return f.Sync() +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/sync_darwin.go b/vendor/github.com/prometheus/tsdb/fileutil/sync_darwin.go new file mode 100644 index 000000000000..c2f39bf204d2 --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/sync_darwin.go @@ -0,0 +1,40 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build darwin + +package fileutil + +import ( + "os" + "syscall" +) + +// Fsync on HFS/OSX flushes the data on to the physical drive but the drive +// may not write it to the persistent media for quite sometime and it may be +// written in out-of-order sequence. Using F_FULLFSYNC ensures that the +// physical drive's buffer will also get flushed to the media. +func Fsync(f *os.File) error { + _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, f.Fd(), uintptr(syscall.F_FULLFSYNC), uintptr(0)) + if errno == 0 { + return nil + } + return errno +} + +// Fdatasync on darwin platform invokes fcntl(F_FULLFSYNC) for actual persistence +// on physical drive media. +func Fdatasync(f *os.File) error { + return Fsync(f) +} diff --git a/vendor/github.com/prometheus/tsdb/fileutil/sync_linux.go b/vendor/github.com/prometheus/tsdb/fileutil/sync_linux.go new file mode 100644 index 000000000000..1bbced915e9b --- /dev/null +++ b/vendor/github.com/prometheus/tsdb/fileutil/sync_linux.go @@ -0,0 +1,34 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build linux + +package fileutil + +import ( + "os" + "syscall" +) + +// Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform. +func Fsync(f *os.File) error { + return f.Sync() +} + +// Fdatasync is similar to fsync(), but does not flush modified metadata +// unless that metadata is needed in order to allow a subsequent data retrieval +// to be correctly handled. +func Fdatasync(f *os.File) error { + return syscall.Fdatasync(int(f.Fd())) +} diff --git a/vendor/github.com/status-im/keycard-go/LICENSE.md b/vendor/github.com/status-im/keycard-go/LICENSE.md new file mode 100644 index 000000000000..3759302a4770 --- /dev/null +++ b/vendor/github.com/status-im/keycard-go/LICENSE.md @@ -0,0 +1,356 @@ +Mozilla Public License Version 2.0 +================================== + +### 1. Definitions + +**1.1. “Contributor”** + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +**1.2. “Contributor Version”** + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +**1.3. “Contribution”** + means Covered Software of a particular Contributor. + +**1.4. “Covered Software”** + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +**1.5. “Incompatible With Secondary Licenses”** + means + +* **(a)** that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or +* **(b)** that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +**1.6. “Executable Form”** + means any form of the work other than Source Code Form. + +**1.7. “Larger Work”** + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +**1.8. “License”** + means this document. + +**1.9. “Licensable”** + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +**1.10. “Modifications”** + means any of the following: + +* **(a)** any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or +* **(b)** any new file in Source Code Form that contains any Covered + Software. + +**1.11. “Patent Claims” of a Contributor** + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +**1.12. “Secondary License”** + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +**1.13. “Source Code Form”** + means the form of the work preferred for making modifications. + +**1.14. “You” (or “Your”)** + means an individual or a legal entity exercising rights under this + License. For legal entities, “You” includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, “control” means **(a)** the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or **(b)** ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + +### 2. License Grants and Conditions + +#### 2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +* **(a)** under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and +* **(b)** under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +#### 2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +#### 2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +* **(a)** for any code that a Contributor has removed from Covered Software; + or +* **(b)** for infringements caused by: **(i)** Your and any other third party's + modifications of Covered Software, or **(ii)** the combination of its + Contributions with other software (except as part of its Contributor + Version); or +* **(c)** under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +#### 2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +#### 2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +#### 2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +#### 2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + + +### 3. Responsibilities + +#### 3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +#### 3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +* **(a)** such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +* **(b)** You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +#### 3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +#### 3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +#### 3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + + +### 4. Inability to Comply Due to Statute or Regulation + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: **(a)** comply with +the terms of this License to the maximum extent possible; and **(b)** +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + + +### 5. Termination + +**5.1.** The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated **(a)** provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and **(b)** on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +**5.2.** If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +**5.3.** In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + + +### 6. Disclaimer of Warranty + +> Covered Software is provided under this License on an “as is” +> basis, without warranty of any kind, either expressed, implied, or +> statutory, including, without limitation, warranties that the +> Covered Software is free of defects, merchantable, fit for a +> particular purpose or non-infringing. The entire risk as to the +> quality and performance of the Covered Software is with You. +> Should any Covered Software prove defective in any respect, You +> (not any Contributor) assume the cost of any necessary servicing, +> repair, or correction. This disclaimer of warranty constitutes an +> essential part of this License. No use of any Covered Software is +> authorized under this License except under this disclaimer. + +### 7. Limitation of Liability + +> Under no circumstances and under no legal theory, whether tort +> (including negligence), contract, or otherwise, shall any +> Contributor, or anyone who distributes Covered Software as +> permitted above, be liable to You for any direct, indirect, +> special, incidental, or consequential damages of any character +> including, without limitation, damages for lost profits, loss of +> goodwill, work stoppage, computer failure or malfunction, or any +> and all other commercial damages or losses, even if such party +> shall have been informed of the possibility of such damages. This +> limitation of liability shall not apply to liability for death or +> personal injury resulting from such party's negligence to the +> extent applicable law prohibits such limitation. Some +> jurisdictions do not allow the exclusion or limitation of +> incidental or consequential damages, so this exclusion and +> limitation may not apply to You. + + +### 8. Litigation + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + + +### 9. Miscellaneous + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + + +### 10. Versions of the License + +#### 10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +#### 10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +#### 10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +#### 10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +## Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +## Exhibit B - “Incompatible With Secondary Licenses” Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + diff --git a/vendor/github.com/status-im/keycard-go/derivationpath/decoder.go b/vendor/github.com/status-im/keycard-go/derivationpath/decoder.go new file mode 100644 index 000000000000..f269da258e24 --- /dev/null +++ b/vendor/github.com/status-im/keycard-go/derivationpath/decoder.go @@ -0,0 +1,214 @@ +package derivationpath + +import ( + "fmt" + "io" + "strconv" + "strings" +) + +type StartingPoint int + +const ( + tokenMaster = 0x6D // char m + tokenSeparator = 0x2F // char / + tokenHardened = 0x27 // char ' + tokenDot = 0x2E // char . + + hardenedStart = 0x80000000 // 2^31 +) + +const ( + StartingPointMaster StartingPoint = iota + 1 + StartingPointCurrent + StartingPointParent +) + +type parseFunc = func() error + +type decoder struct { + r *strings.Reader + f parseFunc + pos int + path []uint32 + start StartingPoint + currentToken string + currentTokenHardened bool +} + +func newDecoder(path string) *decoder { + d := &decoder{ + r: strings.NewReader(path), + } + + d.reset() + + return d +} + +func (d *decoder) reset() { + d.r.Seek(0, io.SeekStart) + d.pos = 0 + d.start = StartingPointCurrent + d.f = d.parseStart + d.path = make([]uint32, 0) + d.resetCurrentToken() +} + +func (d *decoder) resetCurrentToken() { + d.currentToken = "" + d.currentTokenHardened = false +} + +func (d *decoder) parse() (StartingPoint, []uint32, error) { + for { + err := d.f() + if err != nil { + if err == io.EOF { + err = nil + } else { + err = fmt.Errorf("at position %d, %s", d.pos, err.Error()) + } + + return d.start, d.path, err + } + } + + return d.start, d.path, nil +} + +func (d *decoder) readByte() (byte, error) { + b, err := d.r.ReadByte() + if err != nil { + return b, err + } + + d.pos++ + + return b, nil +} + +func (d *decoder) unreadByte() error { + err := d.r.UnreadByte() + if err != nil { + return err + } + + d.pos-- + + return nil +} + +func (d *decoder) parseStart() error { + b, err := d.readByte() + if err != nil { + return err + } + + if b == tokenMaster { + d.start = StartingPointMaster + d.f = d.parseSeparator + return nil + } + + if b == tokenDot { + b2, err := d.readByte() + if err != nil { + return err + } + + if b2 == tokenDot { + d.f = d.parseSeparator + d.start = StartingPointParent + return nil + } + + d.f = d.parseSeparator + d.start = StartingPointCurrent + return d.unreadByte() + } + + d.f = d.parseSegment + + return d.unreadByte() +} + +func (d *decoder) saveSegment() error { + if len(d.currentToken) > 0 { + i, err := strconv.ParseUint(d.currentToken, 10, 32) + if err != nil { + return err + } + + if i >= hardenedStart { + d.pos -= len(d.currentToken) - 1 + return fmt.Errorf("index must be lower than 2^31, got %d", i) + } + + if d.currentTokenHardened { + i += hardenedStart + } + + d.path = append(d.path, uint32(i)) + } + + d.f = d.parseSegment + d.resetCurrentToken() + + return nil +} + +func (d *decoder) parseSeparator() error { + b, err := d.readByte() + if err != nil { + return err + } + + if b == tokenSeparator { + return d.saveSegment() + } + + return fmt.Errorf("expected %s, got %s", string(tokenSeparator), string(b)) +} + +func (d *decoder) parseSegment() error { + b, err := d.readByte() + if err == io.EOF { + if len(d.currentToken) == 0 { + return fmt.Errorf("expected number, got EOF") + } + + if newErr := d.saveSegment(); newErr != nil { + return newErr + } + + return err + } + + if err != nil { + return err + } + + if len(d.currentToken) > 0 && b == tokenSeparator { + return d.saveSegment() + } + + if len(d.currentToken) > 0 && b == tokenHardened { + d.currentTokenHardened = true + d.f = d.parseSeparator + return nil + } + + if b < 0x30 || b > 0x39 { + return fmt.Errorf("expected number, got %s", string(b)) + } + + d.currentToken = fmt.Sprintf("%s%s", d.currentToken, string(b)) + + return nil +} + +func Decode(str string) (StartingPoint, []uint32, error) { + d := newDecoder(str) + return d.parse() +} diff --git a/vendor/github.com/status-im/keycard-go/derivationpath/encoder.go b/vendor/github.com/status-im/keycard-go/derivationpath/encoder.go new file mode 100644 index 000000000000..c1f5b0239813 --- /dev/null +++ b/vendor/github.com/status-im/keycard-go/derivationpath/encoder.go @@ -0,0 +1,36 @@ +package derivationpath + +import ( + "bytes" + "encoding/binary" + "fmt" + "strings" +) + +func Encode(rawPath []uint32) string { + segments := []string{string(tokenMaster)} + + for _, i := range rawPath { + suffix := "" + + if i >= hardenedStart { + i = i - hardenedStart + suffix = string(tokenHardened) + } + + segments = append(segments, fmt.Sprintf("%d%s", i, suffix)) + } + + return strings.Join(segments, string(tokenSeparator)) +} + +func EncodeFromBytes(data []byte) (string, error) { + buf := bytes.NewBuffer(data) + rawPath := make([]uint32, buf.Len()/4) + err := binary.Read(buf, binary.BigEndian, &rawPath) + if err != nil { + return "", err + } + + return Encode(rawPath), nil +} diff --git a/vendor/github.com/steakknife/bloomfilter/MIT-LICENSE.txt b/vendor/github.com/steakknife/bloomfilter/MIT-LICENSE.txt new file mode 100644 index 000000000000..ccf77fe465c8 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/MIT-LICENSE.txt @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright © 2014, 2015 Barry Allard + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/steakknife/bloomfilter/README.md b/vendor/github.com/steakknife/bloomfilter/README.md new file mode 100644 index 000000000000..4587f143af8c --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/README.md @@ -0,0 +1,123 @@ +**Important**: Zeroth, [consider](https://bdupras.github.io/filter-tutorial/) if a [Cuckoo filter](https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf) could be [right for your use-case](https://github.com/seiflotfy/cuckoofilter). + + +[![GoDoc](https://godoc.org/github.com/steakknife/bloomfilter?status.png)](https://godoc.org/github.com/steakknife/bloomfilter) [![travis](https://img.shields.io/travis/steakknife/bloomfilter.svg)](https://travis-ci.org/steakknife/bloomfilter) + +# Face-meltingly fast, thread-safe, marshalable, unionable, probability- and optimal-size-calculating Bloom filter in go + +Copyright © 2014-2016,2018 Barry Allard + +[MIT license](MIT-LICENSE.txt) + +## WTF is a bloom filter + +**TL;DR: **Probabilistic, extra lookup table to track a set of elements kept elsewhere to reduce expensive, unnecessary set element retrieval and/or iterator operations **when an element is not present in the set.** It's a classic time-storage tradeoff algoritm. + +### Properties + +#### [See wikipedia](https://en.wikipedia.org/wiki/Bloom_filter) for algorithm details + +|Impact|What|Description| +|---|---|---| +|Good|No false negatives|know for certain if a given element is definitely NOT in the set| +|Bad|False positives|uncertain if a given element is in the set| +|Bad|Theoretical potential for hash collisions|in very large systems and/or badly hash.Hash64-conforming implementations| +|Bad|Add only|Cannot remove an element, it would destroy information about other elements| +|Good|Constant storage|uses only a fixed amount of memory| + +## Naming conventions + +(Similar to algorithm) + +|Variable/function|Description|Range| +|---|---|---| +|m/M()|number of bits in the bloom filter (memory representation is about m/8 bytes in size)|>=2| +|n/N()|number of elements present|>=0| +|k/K()|number of keys to use (keys are kept private to user code but are de/serialized to Marshal and file I/O)|>=0| +|maxN|maximum capacity of intended structure|>0| +|p|maximum allowed probability of collision (for computing m and k for optimal sizing)|>0..<1| + +- Memory representation should be exactly `24 + 8*(k + (m+63)/64) + unsafe.Sizeof(RWMutex)` bytes. +- Serialized (`BinaryMarshaler`) representation should be exactly `72 + 8*(k + (m+63)/64)` bytes. (Disk format is less due to compression.) + +## Binary serialization format + +All values in Little-endian format + +|Offset|Offset (Hex)|Length (bytes)|Name|Type| +|---|---|---|---|---| +|0|00|8|k|`uint64`| +|8|08|8|n|`uint64`| +|16|10|8|m|`uint64`| +|24|18|k|(keys)|`[k]uint64`| +|24+8*k|...|(m+63)/64|(bloom filter)|`[(m+63)/64]uint64`| +|24+8\*k+8\*((m+63)/64)|...|48|(SHA384 of all previous fields, hashed in order)|`[48]byte`| + +- `bloomfilter.Filter` conforms to `encoding.BinaryMarshaler` and `encoding.BinaryUnmarshaler' + +## Usage + +```go + +import "github.com/steakknife/bloomfilter" + +const ( + maxElements = 100000 + probCollide = 0.0000001 +) + +bf, err := bloomfilter.NewOptimal(maxElements, probCollide) +if err != nil { + panic(err) +} + +someValue := ... // must conform to hash.Hash64 + +bf.Add(someValue) +if bf.Contains(someValue) { // probably true, could be false + // whatever +} + +anotherValue := ... // must also conform to hash.Hash64 + +if bf.Contains(anotherValue) { + panic("This should never happen") +} + +err := bf.WriteFile("1.bf.gz") // saves this BF to a file +if err != nil { + panic(err) +} + +bf2, err := bloomfilter.ReadFile("1.bf.gz") // read the BF to another var +if err != nil { + panic(err) +} +``` + + +## Design + +Where possible, branch-free operations are used to avoid deep pipeline / execution unit stalls on branch-misses. + +## Get + + go get -u github.com/steakknife/bloomfilter # master is always stable + +## Source + +- On the web: [https://github.com/steakknife/bloomfilter](https://github.com/steakknife/bloomfilter) + +- Git: `git clone https://github.com/steakknife/bloomfilter` + +## Contact + +- [Feedback](mailto:barry.allard@gmail.com) + +- [Issues](https://github.com/steakknife/bloomfilter/issues) + +## License + +[MIT license](MIT-LICENSE.txt) + +Copyright © 2014-2016 Barry Allard diff --git a/vendor/github.com/steakknife/bloomfilter/binarymarshaler.go b/vendor/github.com/steakknife/bloomfilter/binarymarshaler.go new file mode 100644 index 000000000000..2fa669254a08 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/binarymarshaler.go @@ -0,0 +1,87 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "bytes" + "crypto/sha512" + "encoding/binary" +) + +// conforms to encoding.BinaryMarshaler + +// marshalled binary layout (Little Endian): +// +// k 1 uint64 +// n 1 uint64 +// m 1 uint64 +// keys [k]uint64 +// bits [(m+63)/64]uint64 +// hash sha384 (384 bits == 48 bytes) +// +// size = (3 + k + (m+63)/64) * 8 bytes +// + +func (f *Filter) marshal() (buf *bytes.Buffer, + hash [sha512.Size384]byte, + err error, +) { + f.lock.RLock() + defer f.lock.RUnlock() + + debug("write bf k=%d n=%d m=%d\n", f.K(), f.n, f.m) + + buf = new(bytes.Buffer) + + err = binary.Write(buf, binary.LittleEndian, f.K()) + if err != nil { + return nil, hash, err + } + + err = binary.Write(buf, binary.LittleEndian, f.n) + if err != nil { + return nil, hash, err + } + + err = binary.Write(buf, binary.LittleEndian, f.m) + if err != nil { + return nil, hash, err + } + + err = binary.Write(buf, binary.LittleEndian, f.keys) + if err != nil { + return nil, hash, err + } + + err = binary.Write(buf, binary.LittleEndian, f.bits) + if err != nil { + return nil, hash, err + } + + hash = sha512.Sum384(buf.Bytes()) + err = binary.Write(buf, binary.LittleEndian, hash) + return buf, hash, err +} + +// MarshalBinary converts a Filter into []bytes +func (f *Filter) MarshalBinary() (data []byte, err error) { + buf, hash, err := f.marshal() + if err != nil { + return nil, err + } + + debug( + "bloomfilter.MarshalBinary: Successfully wrote %d byte(s), sha384 %v", + buf.Len(), hash, + ) + data = buf.Bytes() + return data, nil +} diff --git a/vendor/github.com/steakknife/bloomfilter/binaryunmarshaler.go b/vendor/github.com/steakknife/bloomfilter/binaryunmarshaler.go new file mode 100644 index 000000000000..5be1670c58e9 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/binaryunmarshaler.go @@ -0,0 +1,111 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "bytes" + "crypto/hmac" + "crypto/sha512" + "encoding/binary" + "io" +) + +func unmarshalBinaryHeader(r io.Reader) (k, n, m uint64, err error) { + err = binary.Read(r, binary.LittleEndian, &k) + if err != nil { + return k, n, m, err + } + + if k < KMin { + return k, n, m, errK() + } + + err = binary.Read(r, binary.LittleEndian, &n) + if err != nil { + return k, n, m, err + } + + err = binary.Read(r, binary.LittleEndian, &m) + if err != nil { + return k, n, m, err + } + + if m < MMin { + return k, n, m, errM() + } + + debug("read bf k=%d n=%d m=%d\n", k, n, m) + + return k, n, m, err +} + +func unmarshalBinaryBits(r io.Reader, m uint64) (bits []uint64, err error) { + bits, err = newBits(m) + if err != nil { + return bits, err + } + err = binary.Read(r, binary.LittleEndian, bits) + return bits, err + +} + +func unmarshalBinaryKeys(r io.Reader, k uint64) (keys []uint64, err error) { + keys = make([]uint64, k) + err = binary.Read(r, binary.LittleEndian, keys) + return keys, err +} + +func checkBinaryHash(r io.Reader, data []byte) (err error) { + expectedHash := make([]byte, sha512.Size384) + err = binary.Read(r, binary.LittleEndian, expectedHash) + if err != nil { + return err + } + + actualHash := sha512.Sum384(data[:len(data)-sha512.Size384]) + + if !hmac.Equal(expectedHash, actualHash[:]) { + debug("bloomfilter.UnmarshalBinary() sha384 hash failed:"+ + " actual %v expected %v", actualHash, expectedHash) + return errHash() + } + + debug("bloomfilter.UnmarshalBinary() successfully read"+ + " %d byte(s), sha384 %v", len(data), actualHash) + return nil +} + +// UnmarshalBinary converts []bytes into a Filter +// conforms to encoding.BinaryUnmarshaler +func (f *Filter) UnmarshalBinary(data []byte) (err error) { + f.lock.Lock() + defer f.lock.Unlock() + + buf := bytes.NewBuffer(data) + + var k uint64 + k, f.n, f.m, err = unmarshalBinaryHeader(buf) + if err != nil { + return err + } + + f.keys, err = unmarshalBinaryKeys(buf, k) + if err != nil { + return err + } + + f.bits, err = unmarshalBinaryBits(buf, f.m) + if err != nil { + return err + } + + return checkBinaryHash(buf, data) +} diff --git a/vendor/github.com/steakknife/bloomfilter/bloomfilter.go b/vendor/github.com/steakknife/bloomfilter/bloomfilter.go new file mode 100644 index 000000000000..822506365309 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/bloomfilter.go @@ -0,0 +1,123 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "hash" + "sync" +) + +// Filter is an opaque Bloom filter type +type Filter struct { + lock sync.RWMutex + bits []uint64 + keys []uint64 + m uint64 // number of bits the "bits" field should recognize + n uint64 // number of inserted elements +} + +// Hashable -> hashes +func (f *Filter) hash(v hash.Hash64) []uint64 { + rawHash := v.Sum64() + n := len(f.keys) + hashes := make([]uint64, n) + for i := 0; i < n; i++ { + hashes[i] = rawHash ^ f.keys[i] + } + return hashes +} + +// M is the size of Bloom filter, in bits +func (f *Filter) M() uint64 { + return f.m +} + +// K is the count of keys +func (f *Filter) K() uint64 { + return uint64(len(f.keys)) +} + +// Add a hashable item, v, to the filter +func (f *Filter) Add(v hash.Hash64) { + f.lock.Lock() + defer f.lock.Unlock() + + for _, i := range f.hash(v) { + // f.setBit(i) + i %= f.m + f.bits[i>>6] |= 1 << uint(i&0x3f) + } + f.n++ +} + +// Contains tests if f contains v +// false: f definitely does not contain value v +// true: f maybe contains value v +func (f *Filter) Contains(v hash.Hash64) bool { + f.lock.RLock() + defer f.lock.RUnlock() + + r := uint64(1) + for _, i := range f.hash(v) { + // r |= f.getBit(k) + i %= f.m + r &= (f.bits[i>>6] >> uint(i&0x3f)) & 1 + } + return uint64ToBool(r) +} + +// Copy f to a new Bloom filter +func (f *Filter) Copy() (*Filter, error) { + f.lock.RLock() + defer f.lock.RUnlock() + + out, err := f.NewCompatible() + if err != nil { + return nil, err + } + copy(out.bits, f.bits) + out.n = f.n + return out, nil +} + +// UnionInPlace merges Bloom filter f2 into f +func (f *Filter) UnionInPlace(f2 *Filter) error { + if !f.IsCompatible(f2) { + return errIncompatibleBloomFilters() + } + + f.lock.Lock() + defer f.lock.Unlock() + + for i, bitword := range f2.bits { + f.bits[i] |= bitword + } + return nil +} + +// Union merges f2 and f2 into a new Filter out +func (f *Filter) Union(f2 *Filter) (out *Filter, err error) { + if !f.IsCompatible(f2) { + return nil, errIncompatibleBloomFilters() + } + + f.lock.RLock() + defer f.lock.RUnlock() + + out, err = f.NewCompatible() + if err != nil { + return nil, err + } + for i, bitword := range f2.bits { + out.bits[i] = f.bits[i] | bitword + } + return out, nil +} diff --git a/vendor/github.com/steakknife/bloomfilter/conformance.go b/vendor/github.com/steakknife/bloomfilter/conformance.go new file mode 100644 index 000000000000..2963686f85ba --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/conformance.go @@ -0,0 +1,29 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "encoding" + "encoding/gob" + "io" +) + +// compile-time conformance tests +var ( + _ encoding.BinaryMarshaler = (*Filter)(nil) + _ encoding.BinaryUnmarshaler = (*Filter)(nil) + _ encoding.TextMarshaler = (*Filter)(nil) + _ encoding.TextUnmarshaler = (*Filter)(nil) + _ io.ReaderFrom = (*Filter)(nil) + _ io.WriterTo = (*Filter)(nil) + _ gob.GobDecoder = (*Filter)(nil) + _ gob.GobEncoder = (*Filter)(nil) +) diff --git a/vendor/github.com/steakknife/bloomfilter/debug.go b/vendor/github.com/steakknife/bloomfilter/debug.go new file mode 100644 index 000000000000..e88b934c1742 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/debug.go @@ -0,0 +1,37 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "log" + "os" +) + +const debugVar = "GOLANG_STEAKKNIFE_BLOOMFILTER_DEBUG" + +// EnableDebugging permits debug() logging of details to stderr +func EnableDebugging() { + err := os.Setenv(debugVar, "1") + if err != nil { + panic("Unable to Setenv " + debugVar) + } +} + +func debugging() bool { + return os.Getenv(debugVar) != "" +} + +// debug printing when debugging() is true +func debug(format string, a ...interface{}) { + if debugging() { + log.Printf(format, a...) + } +} diff --git a/vendor/github.com/steakknife/bloomfilter/errors.go b/vendor/github.com/steakknife/bloomfilter/errors.go new file mode 100644 index 000000000000..b279739b3634 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/errors.go @@ -0,0 +1,34 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import "fmt" + +func errHash() error { + return fmt.Errorf( + "Hash mismatch, the Bloom filter is probably corrupt") +} +func errK() error { + return fmt.Errorf( + "keys must have length %d or greater", KMin) +} +func errM() error { + return fmt.Errorf( + "m (number of bits in the Bloom filter) must be >= %d", MMin) +} +func errUniqueKeys() error { + return fmt.Errorf( + "Bloom filter keys must be unique") +} +func errIncompatibleBloomFilters() error { + return fmt.Errorf( + "Cannot perform union on two incompatible Bloom filters") +} diff --git a/vendor/github.com/steakknife/bloomfilter/fileio.go b/vendor/github.com/steakknife/bloomfilter/fileio.go new file mode 100644 index 000000000000..a47969956641 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/fileio.go @@ -0,0 +1,105 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "compress/gzip" + "io" + "io/ioutil" + "os" +) + +// ReadFrom r and overwrite f with new Bloom filter data +func (f *Filter) ReadFrom(r io.Reader) (n int64, err error) { + f2, n, err := ReadFrom(r) + if err != nil { + return -1, err + } + f.lock.Lock() + defer f.lock.Unlock() + f.m = f2.m + f.n = f2.n + f.bits = f2.bits + f.keys = f2.keys + return n, nil +} + +// ReadFrom Reader r into a lossless-compressed Bloom filter f +func ReadFrom(r io.Reader) (f *Filter, n int64, err error) { + rawR, err := gzip.NewReader(r) + if err != nil { + return nil, -1, err + } + defer func() { + err = rawR.Close() + }() + + content, err := ioutil.ReadAll(rawR) + if err != nil { + return nil, -1, err + } + + f = new(Filter) + n = int64(len(content)) + err = f.UnmarshalBinary(content) + if err != nil { + return nil, -1, err + } + return f, n, nil +} + +// ReadFile from filename into a lossless-compressed Bloom Filter f +// Suggested file extension: .bf.gz +func ReadFile(filename string) (f *Filter, n int64, err error) { + r, err := os.Open(filename) + if err != nil { + return nil, -1, err + } + defer func() { + err = r.Close() + }() + + return ReadFrom(r) +} + +// WriteTo a Writer w from lossless-compressed Bloom Filter f +func (f *Filter) WriteTo(w io.Writer) (n int64, err error) { + f.lock.RLock() + defer f.lock.RUnlock() + + rawW := gzip.NewWriter(w) + defer func() { + err = rawW.Close() + }() + + content, err := f.MarshalBinary() + if err != nil { + return -1, err + } + + intN, err := rawW.Write(content) + n = int64(intN) + return n, err +} + +// WriteFile filename from a a lossless-compressed Bloom Filter f +// Suggested file extension: .bf.gz +func (f *Filter) WriteFile(filename string) (n int64, err error) { + w, err := os.Create(filename) + if err != nil { + return -1, err + } + defer func() { + err = w.Close() + }() + + return f.WriteTo(w) +} diff --git a/vendor/github.com/steakknife/bloomfilter/gob.go b/vendor/github.com/steakknife/bloomfilter/gob.go new file mode 100644 index 000000000000..0d99e55d43a4 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/gob.go @@ -0,0 +1,23 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import _ "encoding/gob" // make sure gob is available + +// GobDecode conforms to interface gob.GobDecoder +func (f *Filter) GobDecode(data []byte) error { + return f.UnmarshalBinary(data) +} + +// GobEncode conforms to interface gob.GobEncoder +func (f *Filter) GobEncode() ([]byte, error) { + return f.MarshalBinary() +} diff --git a/vendor/github.com/steakknife/bloomfilter/iscompatible.go b/vendor/github.com/steakknife/bloomfilter/iscompatible.go new file mode 100644 index 000000000000..2073d8083ea7 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/iscompatible.go @@ -0,0 +1,41 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import "unsafe" + +func uint64ToBool(x uint64) bool { + return *(*bool)(unsafe.Pointer(&x)) // #nosec +} + +// returns 0 if equal, does not compare len(b0) with len(b1) +func noBranchCompareUint64s(b0, b1 []uint64) uint64 { + r := uint64(0) + for i, b0i := range b0 { + r |= b0i ^ b1[i] + } + return r +} + +// IsCompatible is true if f and f2 can be Union()ed together +func (f *Filter) IsCompatible(f2 *Filter) bool { + f.lock.RLock() + defer f.lock.RUnlock() + + f.lock.RLock() + defer f2.lock.RUnlock() + + // 0 is true, non-0 is false + compat := f.M() ^ f2.M() + compat |= f.K() ^ f2.K() + compat |= noBranchCompareUint64s(f.keys, f2.keys) + return uint64ToBool(^compat) +} diff --git a/vendor/github.com/steakknife/bloomfilter/new.go b/vendor/github.com/steakknife/bloomfilter/new.go new file mode 100644 index 000000000000..bf4323a7ed38 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/new.go @@ -0,0 +1,134 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "crypto/rand" + "encoding/binary" + "log" +) + +const ( + // MMin is the minimum Bloom filter bits count + MMin = 2 + // KMin is the minimum number of keys + KMin = 1 + // Uint64Bytes is the number of bytes in type uint64 + Uint64Bytes = 8 +) + +// New Filter with CSPRNG keys +// +// m is the size of the Bloom filter, in bits, >= 2 +// +// k is the number of random keys, >= 1 +func New(m, k uint64) (*Filter, error) { + return NewWithKeys(m, newRandKeys(k)) +} + +func newRandKeys(k uint64) []uint64 { + keys := make([]uint64, k) + err := binary.Read(rand.Reader, binary.LittleEndian, keys) + if err != nil { + log.Panicf( + "Cannot read %d bytes from CSRPNG crypto/rand.Read (err=%v)", + Uint64Bytes, err, + ) + } + return keys +} + +// NewCompatible Filter compatible with f +func (f *Filter) NewCompatible() (*Filter, error) { + return NewWithKeys(f.m, f.keys) +} + +// NewOptimal Bloom filter with random CSPRNG keys +func NewOptimal(maxN uint64, p float64) (*Filter, error) { + m := OptimalM(maxN, p) + k := OptimalK(m, maxN) + debug("New optimal bloom filter ::"+ + " requested max elements (n):%d,"+ + " probability of collision (p):%1.10f "+ + "-> recommends -> bits (m): %d (%f GiB), "+ + "number of keys (k): %d", + maxN, p, m, float64(m)/(gigabitsPerGiB), k) + return New(m, k) +} + +// UniqueKeys is true if all keys are unique +func UniqueKeys(keys []uint64) bool { + for j := 0; j < len(keys)-1; j++ { + elem := keys[j] + for i := 1; i < j; i++ { + if keys[i] == elem { + return false + } + } + } + return true +} + +// NewWithKeys creates a new Filter from user-supplied origKeys +func NewWithKeys(m uint64, origKeys []uint64) (f *Filter, err error) { + bits, err := newBits(m) + if err != nil { + return nil, err + } + keys, err := newKeysCopy(origKeys) + if err != nil { + return nil, err + } + return &Filter{ + m: m, + n: 0, + bits: bits, + keys: keys, + }, nil +} + +func newBits(m uint64) ([]uint64, error) { + if m < MMin { + return nil, errM() + } + return make([]uint64, (m+63)/64), nil +} + +func newKeysBlank(k uint64) ([]uint64, error) { + if k < KMin { + return nil, errK() + } + return make([]uint64, k), nil +} + +func newKeysCopy(origKeys []uint64) (keys []uint64, err error) { + if !UniqueKeys(origKeys) { + return nil, errUniqueKeys() + } + keys, err = newKeysBlank(uint64(len(origKeys))) + if err != nil { + return keys, err + } + copy(keys, origKeys) + return keys, err +} + +func newWithKeysAndBits(m uint64, keys []uint64, bits []uint64, n uint64) ( + f *Filter, err error, +) { + f, err = NewWithKeys(m, keys) + if err != nil { + return nil, err + } + copy(f.bits, bits) + f.n = n + return f, nil +} diff --git a/vendor/github.com/steakknife/bloomfilter/optimal.go b/vendor/github.com/steakknife/bloomfilter/optimal.go new file mode 100644 index 000000000000..a8361434a59f --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/optimal.go @@ -0,0 +1,28 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import "math" + +const gigabitsPerGiB float64 = 8.0 * 1024 * 1024 * 1024 + +// OptimalK calculates the optimal k value for creating a new Bloom filter +// maxn is the maximum anticipated number of elements +func OptimalK(m, maxN uint64) uint64 { + return uint64(math.Ceil(float64(m) * math.Ln2 / float64(maxN))) +} + +// OptimalM calculates the optimal m value for creating a new Bloom filter +// p is the desired false positive probability +// optimal m = ceiling( - n * ln(p) / ln(2)**2 ) +func OptimalM(maxN uint64, p float64) uint64 { + return uint64(math.Ceil(-float64(maxN) * math.Log(p) / (math.Ln2 * math.Ln2))) +} diff --git a/vendor/github.com/steakknife/bloomfilter/statistics.go b/vendor/github.com/steakknife/bloomfilter/statistics.go new file mode 100644 index 000000000000..fe50ffa544e6 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/statistics.go @@ -0,0 +1,43 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "math" + + "github.com/steakknife/hamming" +) + +// PreciseFilledRatio is an exhaustive count # of 1's +func (f *Filter) PreciseFilledRatio() float64 { + f.lock.RLock() + defer f.lock.RUnlock() + + return float64(hamming.CountBitsUint64s(f.bits)) / float64(f.M()) +} + +// N is how many elements have been inserted +// (actually, how many Add()s have been performed?) +func (f *Filter) N() uint64 { + f.lock.RLock() + defer f.lock.RUnlock() + + return f.n +} + +// FalsePosititveProbability is the upper-bound probability of false positives +// (1 - exp(-k*(n+0.5)/(m-1))) ** k +func (f *Filter) FalsePosititveProbability() float64 { + k := float64(f.K()) + n := float64(f.N()) + m := float64(f.M()) + return math.Pow(1.0-math.Exp(-k)*(n+0.5)/(m-1), k) +} diff --git a/vendor/github.com/steakknife/bloomfilter/textmarshaler.go b/vendor/github.com/steakknife/bloomfilter/textmarshaler.go new file mode 100644 index 000000000000..7ed08eb7f9b3 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/textmarshaler.go @@ -0,0 +1,49 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import "fmt" + +// MarshalText conforms to encoding.TextMarshaler +func (f *Filter) MarshalText() (text []byte, err error) { + f.lock.RLock() + defer f.lock.RUnlock() + + s := fmt.Sprintln("k") + s += fmt.Sprintln(f.K()) + s += fmt.Sprintln("n") + s += fmt.Sprintln(f.n) + s += fmt.Sprintln("m") + s += fmt.Sprintln(f.m) + + s += fmt.Sprintln("keys") + for key := range f.keys { + s += fmt.Sprintf(keyFormat, key) + nl() + } + + s += fmt.Sprintln("bits") + for w := range f.bits { + s += fmt.Sprintf(bitsFormat, w) + nl() + } + + _, hash, err := f.marshal() + if err != nil { + return nil, err + } + s += fmt.Sprintln("sha384") + for b := range hash { + s += fmt.Sprintf("%02x", b) + } + s += nl() + + text = []byte(s) + return text, nil +} diff --git a/vendor/github.com/steakknife/bloomfilter/textunmarshaler.go b/vendor/github.com/steakknife/bloomfilter/textunmarshaler.go new file mode 100644 index 000000000000..93240a1a7dd1 --- /dev/null +++ b/vendor/github.com/steakknife/bloomfilter/textunmarshaler.go @@ -0,0 +1,150 @@ +// Package bloomfilter is face-meltingly fast, thread-safe, +// marshalable, unionable, probability- and +// optimal-size-calculating Bloom filter in go +// +// https://github.com/steakknife/bloomfilter +// +// Copyright © 2014, 2015, 2018 Barry Allard +// +// MIT license +// +package bloomfilter + +import ( + "bytes" + "crypto/hmac" + "crypto/sha512" + "fmt" + "io" +) + +const ( + keyFormat = "%016x" + bitsFormat = "%016x" +) + +func nl() string { + return fmt.Sprintln() +} + +func unmarshalTextHeader(r io.Reader) (k, n, m uint64, err error) { + format := "k" + nl() + "%d" + nl() + format += "n" + nl() + "%d" + nl() + format += "m" + nl() + "%d" + nl() + format += "keys" + nl() + + _, err = fmt.Fscanf(r, format, k, n, m) + return k, n, m, err +} + +func unmarshalTextKeys(r io.Reader, keys []uint64) (err error) { + for i := range keys { + _, err = fmt.Fscanf(r, keyFormat, keys[i]) + if err != nil { + return err + } + } + return nil +} + +func unmarshalTextBits(r io.Reader, bits []uint64) (err error) { + _, err = fmt.Fscanf(r, "bits") + if err != nil { + return err + } + + for i := range bits { + _, err = fmt.Fscanf(r, bitsFormat, bits[i]) + if err != nil { + return err + } + } + + return nil +} + +func unmarshalAndCheckTextHash(r io.Reader, f *Filter) (err error) { + _, err = fmt.Fscanf(r, "sha384") + if err != nil { + return err + } + + actualHash := [sha512.Size384]byte{} + + for i := range actualHash { + _, err = fmt.Fscanf(r, "%02x", actualHash[i]) + if err != nil { + return err + } + } + + _, expectedHash, err := f.marshal() + if err != nil { + return err + } + + if !hmac.Equal(expectedHash[:], actualHash[:]) { + return errHash() + } + + return nil +} + +// UnmarshalText conforms to TextUnmarshaler +func UnmarshalText(text []byte) (f *Filter, err error) { + r := bytes.NewBuffer(text) + k, n, m, err := unmarshalTextHeader(r) + if err != nil { + return nil, err + } + + keys, err := newKeysBlank(k) + if err != nil { + return nil, err + } + + err = unmarshalTextKeys(r, keys) + if err != nil { + return nil, err + } + + bits, err := newBits(m) + if err != nil { + return nil, err + } + + err = unmarshalTextBits(r, bits) + if err != nil { + return nil, err + } + + f, err = newWithKeysAndBits(m, keys, bits, n) + if err != nil { + return nil, err + } + + err = unmarshalAndCheckTextHash(r, f) + if err != nil { + return nil, err + } + + return f, nil +} + +// UnmarshalText method overwrites f with data decoded from text +func (f *Filter) UnmarshalText(text []byte) error { + f.lock.Lock() + defer f.lock.Unlock() + + f2, err := UnmarshalText(text) + if err != nil { + return err + } + + f.m = f2.m + f.n = f2.n + copy(f.bits, f2.bits) + copy(f.keys, f2.keys) + + return nil +} diff --git a/vendor/github.com/steakknife/hamming/MIT-LICENSE.txt b/vendor/github.com/steakknife/hamming/MIT-LICENSE.txt new file mode 100644 index 000000000000..924f4c0918e9 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/MIT-LICENSE.txt @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright © 2014, 2015, 2016 Barry Allard + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/steakknife/hamming/README.md b/vendor/github.com/steakknife/hamming/README.md new file mode 100644 index 000000000000..23f69bdf5e9b --- /dev/null +++ b/vendor/github.com/steakknife/hamming/README.md @@ -0,0 +1,82 @@ +[![GoDoc](https://godoc.org/github.com/steakknife/hamming?status.png)](https://godoc.org/github.com/steakknife/hamming) [![Build Status](https://travis-ci.org/steakknife/hamming.svg?branch=master)](https://travis-ci.org/steakknife/hamming) + + +# hamming distance calculations in Go + +Copyright © 2014, 2015, 2016, 2018 Barry Allard + +[MIT license](MIT-LICENSE.txt) + +## Performance + +``` +$ go test -bench=. +BenchmarkCountBitsInt8PopCnt-4 300000000 4.30 ns/op +BenchmarkCountBitsInt16PopCnt-4 300000000 3.83 ns/op +BenchmarkCountBitsInt32PopCnt-4 300000000 3.64 ns/op +BenchmarkCountBitsInt64PopCnt-4 500000000 3.60 ns/op +BenchmarkCountBitsIntPopCnt-4 300000000 5.72 ns/op +BenchmarkCountBitsUint8PopCnt-4 1000000000 2.98 ns/op +BenchmarkCountBitsUint16PopCnt-4 500000000 3.23 ns/op +BenchmarkCountBitsUint32PopCnt-4 500000000 3.00 ns/op +BenchmarkCountBitsUint64PopCnt-4 1000000000 2.94 ns/op +BenchmarkCountBitsUintPopCnt-4 300000000 5.04 ns/op +BenchmarkCountBitsBytePopCnt-4 300000000 3.99 ns/op +BenchmarkCountBitsRunePopCnt-4 300000000 3.83 ns/op +BenchmarkCountBitsInt8-4 2000000000 0.74 ns/op +BenchmarkCountBitsInt16-4 2000000000 1.54 ns/op +BenchmarkCountBitsInt32-4 1000000000 2.63 ns/op +BenchmarkCountBitsInt64-4 1000000000 2.56 ns/op +BenchmarkCountBitsInt-4 200000000 7.23 ns/op +BenchmarkCountBitsUint16-4 2000000000 1.51 ns/op +BenchmarkCountBitsUint32-4 500000000 4.00 ns/op +BenchmarkCountBitsUint64-4 1000000000 2.64 ns/op +BenchmarkCountBitsUint64Alt-4 200000000 7.60 ns/op +BenchmarkCountBitsUint-4 300000000 5.48 ns/op +BenchmarkCountBitsUintReference-4 100000000 19.2 ns/op +BenchmarkCountBitsByte-4 2000000000 0.75 ns/op +BenchmarkCountBitsByteAlt-4 1000000000 2.37 ns/op +BenchmarkCountBitsRune-4 500000000 2.85 ns/op +PASS +ok _/Users/bmf/Projects/hamming 58.305s +$ +``` + +## Usage + +```go +import 'github.com/steakknife/hamming' + +// ... + +// hamming distance between values +hamming.Byte(0xFF, 0x00) // 8 +hamming.Byte(0x00, 0x00) // 0 + +// just count bits in a byte +hamming.CountBitsByte(0xA5), // 4 +``` + +See help in the [docs](https://godoc.org/github.com/steakknife/hamming) + +## Get + + go get -u github.com/steakknife/hamming # master is always stable + +## Source + +- On the web: https://github.com/steakknife/hamming + +- Git: `git clone https://github.com/steakknife/hamming` + +## Contact + +- [Feedback](mailto:barry.allard@gmail.com) + +- [Issues](https://github.com/steakknife/hamming/issues) + +## License + +[MIT license](MIT-LICENSE.txt) + +Copyright © 2014, 2015, 2016 Barry Allard diff --git a/vendor/github.com/steakknife/hamming/doc.go b/vendor/github.com/steakknife/hamming/doc.go new file mode 100644 index 000000000000..179e29da9274 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/doc.go @@ -0,0 +1,35 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +// +// Usage +// +// For functions named CountBits.+s?. The plural forms are for slices. +// The CountBits.+ forms are Population Count only, where the bare-type +// forms are Hamming distance (number of bits different) between two values. +// +// Optimized assembly .+PopCnt forms are available on amd64, and operate just +// like the regular forms (Must check and guard on HasPopCnt() first before +// trying to call .+PopCnt functions). +// +// import 'github.com/steakknife/hamming' +// +// // ... +// +// // hamming distance between values +// hamming.Byte(0xFF, 0x00) // 8 +// hamming.Byte(0x00, 0x00) // 0 +// +// // just count bits in a byte +// hamming.CountBitsByte(0xA5), // 4 +// +// Got rune? use int32 +// Got uint8? use byte +// +package hamming diff --git a/vendor/github.com/steakknife/hamming/hamming.go b/vendor/github.com/steakknife/hamming/hamming.go new file mode 100644 index 000000000000..269e91a4d1d6 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/hamming.go @@ -0,0 +1,70 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +// Int8 hamming distance of two int8's +func Int8(x, y int8) int { + return CountBitsInt8(x ^ y) +} + +// Int16 hamming distance of two int16's +func Int16(x, y int16) int { + return CountBitsInt16(x ^ y) +} + +// Int32 hamming distance of two int32's +func Int32(x, y int32) int { + return CountBitsInt32(x ^ y) +} + +// Int64 hamming distance of two int64's +func Int64(x, y int64) int { + return CountBitsInt64(x ^ y) +} + +// Int hamming distance of two ints +func Int(x, y int) int { + return CountBitsInt(x ^ y) +} + +// Uint8 hamming distance of two uint8's +func Uint8(x, y uint8) int { + return CountBitsUint8(x ^ y) +} + +// Uint16 hamming distance of two uint16's +func Uint16(x, y uint16) int { + return CountBitsUint16(x ^ y) +} + +// Uint32 hamming distance of two uint32's +func Uint32(x, y uint32) int { + return CountBitsUint32(x ^ y) +} + +// Uint64 hamming distance of two uint64's +func Uint64(x, y uint64) int { + return CountBitsUint64(x ^ y) +} + +// Uint hamming distance of two uint's +func Uint(x, y uint) int { + return CountBitsUint(x ^ y) +} + +// Byte hamming distance of two bytes +func Byte(x, y byte) int { + return CountBitsByte(x ^ y) +} + +// Rune hamming distance of two runes +func Rune(x, y rune) int { + return CountBitsRune(x ^ y) +} diff --git a/vendor/github.com/steakknife/hamming/popcnt_amd64.go b/vendor/github.com/steakknife/hamming/popcnt_amd64.go new file mode 100644 index 000000000000..a1a6d92bdec2 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcnt_amd64.go @@ -0,0 +1,65 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +import "strconv" + +// HasPopCnt returns true if *PopCnt functions are callable +func HasPopCnt() (ret bool) + +// CountBitsInt8PopCnt count 1's in x +func CountBitsInt8PopCnt(x int8) (ret int) + +// CountBitsInt16PopCnt count 1's in x +func CountBitsInt16PopCnt(x int16) (ret int) + +// CountBitsInt32PopCnt count 1's in x +func CountBitsInt32PopCnt(x int32) (ret int) + +// CountBitsInt64PopCnt count 1's in x +func CountBitsInt64PopCnt(x int64) (ret int) + +// CountBitsIntPopCnt count 1's in x +func CountBitsIntPopCnt(x int) int { + if strconv.IntSize == 64 { + return CountBitsInt64PopCnt(int64(x)) + } else if strconv.IntSize == 32 { + return CountBitsInt32PopCnt(int32(x)) + } + panic("strconv.IntSize must be 32 or 64") +} + +// CountBitsUint8PopCnt count 1's in x +func CountBitsUint8PopCnt(x uint8) (ret int) + +// CountBitsUint16PopCnt count 1's in x +func CountBitsUint16PopCnt(x uint16) (ret int) + +// CountBitsUint32PopCnt count 1's in x +func CountBitsUint32PopCnt(x uint32) (ret int) + +// CountBitsUint64PopCnt count 1's in x +func CountBitsUint64PopCnt(x uint64) (ret int) + +// CountBitsUintPopCnt count 1's in x +func CountBitsUintPopCnt(x uint) int { + if strconv.IntSize == 64 { + return CountBitsUint64PopCnt(uint64(x)) + } else if strconv.IntSize == 32 { + return CountBitsUint32PopCnt(uint32(x)) + } + panic("strconv.IntSize must be 32 or 64") +} + +// CountBitsBytePopCnt count 1's in x +func CountBitsBytePopCnt(x byte) (ret int) + +// CountBitsRunePopCnt count 1's in x +func CountBitsRunePopCnt(x rune) (ret int) diff --git a/vendor/github.com/steakknife/hamming/popcnt_amd64.s b/vendor/github.com/steakknife/hamming/popcnt_amd64.s new file mode 100644 index 000000000000..51c51248a3d8 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcnt_amd64.s @@ -0,0 +1,64 @@ +// +// hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016 Barry Allard +// +// MIT license +// + +#include "textflag.h" + +TEXT ·CountBitsInt8PopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsBytePopCnt(SB) + +TEXT ·CountBitsInt16PopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint16PopCnt(SB) + +TEXT ·CountBitsInt32PopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint32PopCnt(SB) + +TEXT ·CountBitsInt64PopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint64PopCnt(SB) + +TEXT ·CountBitsBytePopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint8PopCnt(SB) + +TEXT ·CountBitsRunePopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint32PopCnt(SB) + +TEXT ·CountBitsUint8PopCnt(SB),NOSPLIT,$0 + XORQ AX, AX + MOVB x+0(FP), AX + POPCNTQ AX, AX + MOVQ AX, ret+8(FP) + RET + +TEXT ·CountBitsUint16PopCnt(SB),NOSPLIT,$0 + XORQ AX, AX + MOVW x+0(FP), AX + POPCNTQ AX, AX + MOVQ AX, ret+8(FP) + RET + +TEXT ·CountBitsUint32PopCnt(SB),NOSPLIT,$0 + XORQ AX, AX + MOVL x+0(FP), AX + POPCNTQ AX, AX + MOVQ AX, ret+8(FP) + RET + +TEXT ·CountBitsUint64PopCnt(SB),NOSPLIT,$0 + POPCNTQ x+0(FP), AX + MOVQ AX, ret+8(FP) + RET + +// func hasPopCnt() (ret bool) +TEXT ·HasPopCnt(SB),NOSPLIT,$0 + MOVL $1, AX + CPUID + SHRL $23, CX // bit 23: Advanced Bit Manipulation Bit (ABM) -> POPCNTQ + ANDL $1, CX + MOVB CX, ret+0(FP) + RET diff --git a/vendor/github.com/steakknife/hamming/popcount.go b/vendor/github.com/steakknife/hamming/popcount.go new file mode 100644 index 000000000000..848103bbf5f6 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcount.go @@ -0,0 +1,134 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +import "strconv" + +// References: check out Hacker's Delight, about p. 70 + +func table() [256]uint8 { + return [256]uint8{ + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, + } +} + +// CountBitsByteAlt table-less, branch-free implementation +func CountBitsByteAlt(x byte) int { + x = (x & 0x55) + ((x >> 1) & 0x55) + x = (x & 0x33) + ((x >> 2) & 0x33) + return int((x & 0x0f) + ((x >> 4) & 0x0f)) +} + +// CountBitsInt8 count 1's in x +func CountBitsInt8(x int8) int { return CountBitsByte(byte(x)) } + +// CountBitsInt16 count 1's in x +func CountBitsInt16(x int16) int { return CountBitsUint16(uint16(x)) } + +// CountBitsInt32 count 1's in x +func CountBitsInt32(x int32) int { return CountBitsUint32(uint32(x)) } + +// CountBitsInt64 count 1's in x +func CountBitsInt64(x int64) int { return CountBitsUint64(uint64(x)) } + +// CountBitsInt count 1's in x +func CountBitsInt(x int) int { return CountBitsUint(uint(x)) } + +// CountBitsByte count 1's in x +func CountBitsByte(x byte) int { return CountBitsUint8(x) } + +// CountBitsRune count 1's in x +func CountBitsRune(x rune) int { return CountBitsInt32(x) } + +// CountBitsUint8 count 1's in x +func CountBitsUint8(x uint8) int { return int(table()[x]) } + +// CountBitsUint16 count 1's in x +func CountBitsUint16(x uint16) int { + return int(table()[x&0xFF] + table()[(x>>8)&0xFF]) +} + +const ( + m1d uint32 = 0x55555555 + m2d = 0x33333333 + m4d = 0x0f0f0f0f +) + +// CountBitsUint32 count 1's in x +func CountBitsUint32(x uint32) int { + x -= ((x >> 1) & m1d) + x = (x & m2d) + ((x >> 2) & m2d) + x = (x + (x >> 4)) & m4d + x += x >> 8 + x += x >> 16 + return int(x & 0x3f) +} + +const ( + m1q uint64 = 0x5555555555555555 + m2q = 0x3333333333333333 + m4q = 0x0f0f0f0f0f0f0f0f + hq = 0x0101010101010101 +) + +// CountBitsUint64 count 1's in x +func CountBitsUint64(x uint64) int { + // put count of each 2 bits into those 2 bits + x -= (x >> 1) & m1q + + // put count of each 4 bits into those 4 bits + x = (x & m2q) + ((x >> 2) & m2q) + + // put count of each 8 bits into those 8 bits + x = (x + (x >> 4)) & m4q + + // returns left 8 bits of x + (x<<8) + (x<<16) + (x<<24) + ... + return int((x * hq) >> 56) +} + +// CountBitsUint64Alt count 1's in x +func CountBitsUint64Alt(x uint64) int { + return CountBitsUint32(uint32(x>>32)) + CountBitsUint32(uint32(x)) +} + +// CountBitsUintReference count 1's in x +func CountBitsUintReference(x uint) int { + c := 0 + for x != 0 { + x &= x - 1 + c++ + } + return c +} + +// CountBitsUint count 1's in x +func CountBitsUint(x uint) int { + if strconv.IntSize == 64 { + return CountBitsUint64(uint64(x)) + } else if strconv.IntSize == 32 { + return CountBitsUint32(uint32(x)) + } + panic("strconv.IntSize must be 32 or 64 bits") +} diff --git a/vendor/github.com/steakknife/hamming/popcount_slices.go b/vendor/github.com/steakknife/hamming/popcount_slices.go new file mode 100644 index 000000000000..957fe1165314 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcount_slices.go @@ -0,0 +1,123 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +// CountBitsInt8s count 1's in b +func CountBitsInt8s(b []int8) int { + c := 0 + for _, x := range b { + c += CountBitsInt8(x) + } + return c +} + +// CountBitsInt16s count 1's in b +func CountBitsInt16s(b []int16) int { + c := 0 + for _, x := range b { + c += CountBitsInt16(x) + } + return c +} + +// CountBitsInt32s count 1's in b +func CountBitsInt32s(b []int32) int { + c := 0 + for _, x := range b { + c += CountBitsInt32(x) + } + return c +} + +// CountBitsInt64s count 1's in b +func CountBitsInt64s(b []int64) int { + c := 0 + for _, x := range b { + c += CountBitsInt64(x) + } + return c +} + +// CountBitsInts count 1's in b +func CountBitsInts(b []int) int { + c := 0 + for _, x := range b { + c += CountBitsInt(x) + } + return c +} + +// CountBitsUint8s count 1's in b +func CountBitsUint8s(b []uint8) int { + c := 0 + for _, x := range b { + c += CountBitsUint8(x) + } + return c +} + +// CountBitsUint16s count 1's in b +func CountBitsUint16s(b []uint16) int { + c := 0 + for _, x := range b { + c += CountBitsUint16(x) + } + return c +} + +// CountBitsUint32s count 1's in b +func CountBitsUint32s(b []uint32) int { + c := 0 + for _, x := range b { + c += CountBitsUint32(x) + } + return c +} + +// CountBitsUint64s count 1's in b +func CountBitsUint64s(b []uint64) int { + c := 0 + for _, x := range b { + c += CountBitsUint64(x) + } + return c +} + +// CountBitsUints count 1's in b +func CountBitsUints(b []uint) int { + c := 0 + for _, x := range b { + c += CountBitsUint(x) + } + return c +} + +// CountBitsBytes count 1's in b +func CountBitsBytes(b []byte) int { + c := 0 + for _, x := range b { + c += CountBitsByte(x) + } + return c +} + +// CountBitsRunes count 1's in b +func CountBitsRunes(b []rune) int { + c := 0 + for _, x := range b { + c += CountBitsRune(x) + } + return c +} + +// CountBitsString count 1's in s +func CountBitsString(s string) int { + return CountBitsBytes([]byte(s)) +} diff --git a/vendor/github.com/steakknife/hamming/popcount_slices_amd64.go b/vendor/github.com/steakknife/hamming/popcount_slices_amd64.go new file mode 100644 index 000000000000..b3e13fdf9496 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcount_slices_amd64.go @@ -0,0 +1,72 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +import ( + "strconv" + "unsafe" +) + +// CountBitsInt8sPopCnt count 1's in x +func CountBitsInt8sPopCnt(x []int8) (ret int) + +// CountBitsInt16sPopCnt count 1's in x +func CountBitsInt16sPopCnt(x []int16) (ret int) + +// CountBitsInt32sPopCnt count 1's in x +func CountBitsInt32sPopCnt(x []int32) (ret int) + +// CountBitsInt64sPopCnt count 1's in x +func CountBitsInt64sPopCnt(x []int64) (ret int) + +// CountBitsIntsPopCnt count 1's in x +func CountBitsIntsPopCnt(x []int) int { + if strconv.IntSize == 64 { + y := (*[]int64)(unsafe.Pointer(&x)) // #nosec G103 + return CountBitsInt64sPopCnt(*y) + } else if strconv.IntSize == 32 { + y := (*[]int32)(unsafe.Pointer(&x)) // #nosec G103 + return CountBitsInt32sPopCnt(*y) + } + panic("strconv.IntSize must be 32 or 64 bits") +} + +// CountBitsUint8sPopCnt count 1's in x +func CountBitsUint8sPopCnt(x []uint8) (ret int) + +// CountBitsUint16sPopCnt count 1's in x +func CountBitsUint16sPopCnt(x []uint16) (ret int) + +// CountBitsUint32sPopCnt count 1's in x +func CountBitsUint32sPopCnt(x []uint32) (ret int) + +// CountBitsUint64sPopCnt count 1's in x +func CountBitsUint64sPopCnt(x []uint64) (ret int) + +// CountBitsUintsPopCnt count 1's in x +func CountBitsUintsPopCnt(x []uint) int { + if strconv.IntSize == 64 { + y := (*[]uint64)(unsafe.Pointer(&x)) // #nosec G103 + return CountBitsUint64sPopCnt(*y) + } else if strconv.IntSize == 32 { + y := (*[]uint32)(unsafe.Pointer(&x)) // #nosec G103 + return CountBitsUint32sPopCnt(*y) + } + panic("strconv.IntSize must be 32 or 64 bits") +} + +// CountBitsBytesPopCnt count 1's in x +func CountBitsBytesPopCnt(x []byte) (ret int) + +// CountBitsRunesPopCnt count 1's in x +func CountBitsRunesPopCnt(x []rune) (ret int) + +// CountBitsStringPopCnt count 1's in s +func CountBitsStringPopCnt(s string) (ret int) diff --git a/vendor/github.com/steakknife/hamming/popcount_slices_amd64.s b/vendor/github.com/steakknife/hamming/popcount_slices_amd64.s new file mode 100644 index 000000000000..b6b8c7835ad9 --- /dev/null +++ b/vendor/github.com/steakknife/hamming/popcount_slices_amd64.s @@ -0,0 +1,370 @@ +// +// hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016 Barry Allard +// +// MIT license +// + +#include "textflag.h" + +// type SliceHeader struct { +// Data uintptr 0 +// Len int 8 +// Cap int 16 +// } + +// 0 x.Data +// 8 x.Len +// 16 x.Cap +// 24 ret + +// type StringHeader struct { +// Data uintptr 0 +// Len int 8 +// } + +// 0 x.Data +// 8 x.Len +// 16 ret + +// func CountBitsInt8sPopCnt(x []int8) (ret int) +TEXT ·CountBitsInt8sPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint8sPopCnt(SB) + +// func CountBitsInt16sPopCnt(x []int16) (ret int) +TEXT ·CountBitsInt16sPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint16sPopCnt(SB) + +// func CountBitsInt32sPopCnt(x []int32) (ret int) +TEXT ·CountBitsInt32sPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint32sPopCnt(SB) + +// func CountBitsInt64sPopCnt(x []int64) (ret int) +TEXT ·CountBitsInt64sPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint64sPopCnt(SB) + +// func CountBitsUint8sPopCnt(x []uint8) (ret int) +TEXT ·CountBitsUint8sPopCnt(SB),NOSPLIT,$0 + XORQ AX, AX // ret = 0 + MOVQ x+8(FP), CX // x.Len -> CX + +test_negative_slice_len: + MOVQ CX, BX // x.Len < 0 ---> x.Len[63] != 0 + SHRQ $63, BX + JNZ done + + MOVQ x+0(FP), DI // x.Data -> DI + + CMPQ CX, $32 // x.Len >= 32 + JL unrolled_loop_skip + +unrolled_loop_setup: + XORQ R9, R9 + XORQ BX, BX + XORQ DX, DX + +unrolled_loop: // 4 unrolled loops of POPCNTQ (4 quad words at a time) + SUBQ $32, CX + + POPCNTQ 0(DI), R10 + ADDQ R10, R9 + POPCNTQ 8(DI), R11 + ADDQ R11, AX + POPCNTQ 16(DI), R12 + ADDQ R12, BX + POPCNTQ 24(DI), R13 + ADDQ R13, DX + + ADDQ $32, DI + CMPQ CX, $32 // x.Len >= 32 + JGE unrolled_loop + +unrolled_loop_done: + ADDQ R9, AX + ADDQ BX, DX + ADDQ DX, AX + + XORQ BX, BX + +unrolled_loop_skip: + CMPQ CX, $0 + JZ done + + XORQ DX, DX + +remainder_loop: + MOVB 0(DI), DL + POPCNTQ DX, BX + ADDQ BX, AX + + INCQ DI + DECQ CX + JNZ remainder_loop + +done: + MOVQ AX, ret+24(FP) + RET + +// func CountBitsUint16sPopCnt(x []uint16) (ret int) +TEXT ·CountBitsUint16sPopCnt(SB),NOSPLIT,$0 + XORQ AX, AX // ret = 0 + MOVQ x+8(FP), CX // x.Len -> CX + +test_negative_slice_len: + MOVQ CX, BX // x.Len*2 < 0 ---> x.Len[63:62] != 0 + SHLQ $1, CX + SHRQ $62, BX + JNZ done + + MOVQ x+0(FP), DI // x.Data -> DI + + + CMPQ CX, $32 // x.Len*2 >= 32 + JL unrolled_loop_skip + +unrolled_loop_setup: + XORQ R9, R9 + XORQ BX, BX + XORQ DX, DX + +unrolled_loop: // 4 unrolled loops of POPCNTQ (4 quad words at a time) + SUBQ $32, CX + + POPCNTQ 0(DI), R10 + ADDQ R10, R9 + POPCNTQ 8(DI), R11 + ADDQ R11, AX + POPCNTQ 16(DI), R12 + ADDQ R12, BX + POPCNTQ 24(DI), R13 + ADDQ R13, DX + + ADDQ $32, DI + CMPQ CX, $32 // x.Len*2 >= 32 + JGE unrolled_loop + +unrolled_loop_done: + ADDQ R9, AX + ADDQ BX, DX + ADDQ DX, AX + + XORQ BX, BX + +unrolled_loop_skip: + CMPQ CX, $0 + JZ done + + XORQ DX, DX + +remainder_loop: + MOVW 0(DI), DX + POPCNTQ DX, BX + ADDQ BX, AX + + ADDQ $2, DI + SUBQ $2, CX + JNZ remainder_loop + +done: + MOVQ AX, ret+24(FP) + RET + +// func CountBitsUint32sPopCnt(x []uint32) (ret int) +TEXT ·CountBitsUint32sPopCnt(SB),NOSPLIT,$0 + XORQ AX, AX // ret = 0 + MOVQ x+8(FP), CX // x.Len -> CX + MOVQ CX, BX + MOVQ x+0(FP), DI // x.Data -> DI + +test_negative_slice_len: + SHLQ $2, CX // x.Len*4 < 0 ---> x.Len[63:61] != 0 + SHRQ $61, BX + JNZ done + + + + CMPQ CX, $32 // x.Len*4 >= 32 + JL unrolled_loop_skip + +unrolled_loop_setup: + XORQ R9, R9 + XORQ BX, BX + XORQ DX, DX + +unrolled_loop: // 4 unrolled loops of POPCNTQ (4 quad words at a time) + SUBQ $32, CX + + POPCNTQ 0(DI), R10 // r9 += popcntq(QW DI+0) + ADDQ R10, R9 + POPCNTQ 8(DI), R11 // ax += popcntq(QW DI+8) + ADDQ R11, AX + POPCNTQ 16(DI), R12 // bx += popcntq(QW DI+16) + ADDQ R12, BX + POPCNTQ 24(DI), R13 // dx += popcntq(QW DI+24) + ADDQ R13, DX + + ADDQ $32, DI + CMPQ CX, $32 // x.Len*4 >= 32 + JGE unrolled_loop + +unrolled_loop_done: + ADDQ R9, AX // ax = (ax + r9) + (bx + dx) + ADDQ BX, DX + ADDQ DX, AX + + XORQ BX, BX + +unrolled_loop_skip: + CMPQ CX, $0 + JZ done + + XORQ DX, DX +remainder_loop: + MOVB (DI), DX // ax += popcnt(DB 0(DI)) + POPCNTQ DX, BX + ADDQ BX, AX + + INCQ DI + DECQ CX + JNZ remainder_loop + +done: + MOVQ AX, ret+24(FP) + RET + +// func CountBitsUint64sPopCnt(x []uint64) (ret int) +TEXT ·CountBitsUint64sPopCnt(SB),NOSPLIT,$0 + XORQ AX, AX // ret = 0 + MOVQ x+8(FP), CX // x.Len -> CX + +test_negative_slice_len: + MOVQ CX, BX // x.Len*8 < 0 ---> x.Len[63:60] != 0 + SHLQ $3, CX + SHRQ $60, BX + JNZ done + + MOVQ x+0(FP), DI // x.Data -> DI + + + CMPQ CX, $32 // x.Len*8 >= 32 + JL unrolled_loop_skip + +unrolled_loop_setup: + XORQ R9, R9 + XORQ BX, BX + XORQ DX, DX + +unrolled_loop: // 4 unrolled loops of POPCNTQ (4 quad words at a time) + SUBQ $32, CX + + POPCNTQ 0(DI), R10 + ADDQ R10, R9 + POPCNTQ 8(DI), R11 + ADDQ R11, AX + POPCNTQ 16(DI), R12 + ADDQ R12, BX + POPCNTQ 24(DI), R13 + ADDQ R13, DX + + ADDQ $32, DI + CMPQ CX, $32 // x.Len*4 >= 32 + JGE unrolled_loop + +unrolled_loop_done: + ADDQ R9, AX + ADDQ BX, DX + ADDQ DX, AX + + XORQ BX, BX + +unrolled_loop_skip: + CMPQ CX, $0 + JZ done + + XORQ DX, DX + +remainder_loop: + MOVQ 0(DI), DX + POPCNTQ DX, BX + ADDQ BX, AX + + ADDQ $8, DI + SUBQ $8, CX + JNZ remainder_loop + +done: + MOVQ AX, ret+24(FP) + RET + +// func CountBitsBytesPopCnt(x []byte) (ret int) +TEXT ·CountBitsBytesPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint8sPopCnt(SB) + +// func CountBitsRunesPopCnt(x []rune) (ret int) +TEXT ·CountBitsRunesPopCnt(SB),NOSPLIT,$0 + JMP ·CountBitsUint32sPopCnt(SB) + +// func CountBitsStringPopCnt(s string) (ret int) +TEXT ·CountBitsStringPopCnt(SB),NOSPLIT,$0 + XORQ AX, AX // ret = 0 + MOVQ x+8(FP), CX // x.Len -> CX + +test_negative_slice_len: + MOVQ CX, BX // x.Len < 0 ---> x.Len[63] != 0 + SHRQ $63, BX + JNZ done + + MOVQ x+0(FP), DI // x.Data -> DI + + CMPQ CX, $32 // x.Len >= 32 + JL unrolled_loop_skip + +unrolled_loop_setup: + XORQ R9, R9 + XORQ BX, BX + XORQ DX, DX + +unrolled_loop: // 4 unrolled loops of POPCNTQ (4 quad words at a time) + SUBQ $32, CX + + POPCNTQ 0(DI), R10 + ADDQ R10, R9 + POPCNTQ 8(DI), R11 + ADDQ R11, AX + POPCNTQ 16(DI), R12 + ADDQ R12, BX + POPCNTQ 24(DI), R13 + ADDQ R13, DX + + ADDQ $32, DI + CMPQ CX, $32 // x.Len >= 32 + JGE unrolled_loop + +unrolled_loop_done: + ADDQ R9, AX + ADDQ BX, DX + ADDQ DX, AX + + XORQ BX, BX + +unrolled_loop_skip: + CMPQ CX, $0 + JZ done + + XORQ DX, DX + +remainder_loop: + MOVB 0(DI), DL + POPCNTQ DX, BX + ADDQ BX, AX + + INCQ DI + DECQ CX + JNZ remainder_loop + +done: + MOVQ AX, ret+16(FP) + RET diff --git a/vendor/github.com/steakknife/hamming/slices_of_hamming.go b/vendor/github.com/steakknife/hamming/slices_of_hamming.go new file mode 100644 index 000000000000..82ce948fac7c --- /dev/null +++ b/vendor/github.com/steakknife/hamming/slices_of_hamming.go @@ -0,0 +1,144 @@ +// +// Package hamming distance calculations in Go +// +// https://github.com/steakknife/hamming +// +// Copyright © 2014, 2015, 2016, 2018 Barry Allard +// +// MIT license +// +package hamming + +// Int8s hamming distance of two int8 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Int8s(b0, b1 []int8) int { + d := 0 + for i, x := range b0 { + d += Int8(x, b1[i]) + } + return d +} + +// Int16s hamming distance of two int16 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Int16s(b0, b1 []int16) int { + d := 0 + for i, x := range b0 { + d += Int16(x, b1[i]) + } + return d +} + +// Int32s hamming distance of two int32 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Int32s(b0, b1 []int32) int { + d := 0 + for i, x := range b0 { + d += Int32(x, b1[i]) + } + return d +} + +// Int64s hamming distance of two int64 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Int64s(b0, b1 []int64) int { + d := 0 + for i, x := range b0 { + d += Int64(x, b1[i]) + } + return d +} + +// Ints hamming distance of two int buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Ints(b0, b1 []int) int { + d := 0 + for i, x := range b0 { + d += Int(x, b1[i]) + } + return d +} + +// Uint8s hamming distance of two uint8 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Uint8s(b0, b1 []uint8) int { + d := 0 + for i, x := range b0 { + d += Uint8(x, b1[i]) + } + return d +} + +// Uint16s hamming distance of two uint16 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Uint16s(b0, b1 []uint16) int { + d := 0 + for i, x := range b0 { + d += Uint16(x, b1[i]) + } + return d +} + +// Uint32s hamming distance of two uint32 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Uint32s(b0, b1 []uint32) int { + d := 0 + for i, x := range b0 { + d += Uint32(x, b1[i]) + } + return d +} + +// Uint64s hamming distance of two uint64 buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Uint64s(b0, b1 []uint64) int { + d := 0 + for i, x := range b0 { + d += Uint64(x, b1[i]) + } + return d +} + +// Uints hamming distance of two uint buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Uints(b0, b1 []uint) int { + d := 0 + for i, x := range b0 { + d += Uint(x, b1[i]) + } + return d +} + +// Bytes hamming distance of two byte buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Bytes(b0, b1 []byte) int { + d := 0 + for i, x := range b0 { + d += Byte(x, b1[i]) + } + return d +} + +// Runes hamming distance of two rune buffers, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Runes(b0, b1 []rune) int { + d := 0 + for i, x := range b0 { + d += Rune(x, b1[i]) + } + return d +} + +// Strings hamming distance of two strings, of which the size of b0 +// is used for both (panics if b1 < b0, does not compare b1 beyond length of b0) +func Strings(b0, b1 string) int { + return Runes(runes(b0), runes(b1)) +} + +// runize string +func runes(s string) (r []rune) { + for _, ch := range s { + r = append(r, ch) + } + return +} diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/batch.go b/vendor/github.com/syndtr/goleveldb/leveldb/batch.go index 225920002df2..823be93f93c3 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/batch.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/batch.go @@ -238,6 +238,11 @@ func newBatch() interface{} { return &Batch{} } +// MakeBatch returns empty batch with preallocated buffer. +func MakeBatch(n int) *Batch { + return &Batch{data: make([]byte, 0, n)} +} + func decodeBatch(data []byte, fn func(i int, index batchIndex) error) error { var index batchIndex for i, o := 0, 0; o < len(data); i++ { diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db.go b/vendor/github.com/syndtr/goleveldb/leveldb/db.go index b27c38d37e67..74e9826956db 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/db.go @@ -38,6 +38,12 @@ type DB struct { inWritePaused int32 // The indicator whether write operation is paused by compaction aliveSnaps, aliveIters int32 + // Compaction statistic + memComp uint32 // The cumulative number of memory compaction + level0Comp uint32 // The cumulative number of level0 compaction + nonLevel0Comp uint32 // The cumulative number of non-level0 compaction + seekComp uint32 // The cumulative number of seek compaction + // Session. s *session @@ -468,7 +474,7 @@ func recoverTable(s *session, o *opt.Options) error { } // Commit. - return s.commit(rec) + return s.commit(rec, false) } func (db *DB) recoverJournal() error { @@ -538,7 +544,7 @@ func (db *DB) recoverJournal() error { rec.setJournalNum(fd.Num) rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { + if err := db.s.commit(rec, false); err != nil { fr.Close() return err } @@ -617,7 +623,7 @@ func (db *DB) recoverJournal() error { // Commit. rec.setJournalNum(db.journalFd.Num) rec.setSeqNum(db.seq) - if err := db.s.commit(rec); err != nil { + if err := db.s.commit(rec, false); err != nil { // Close journal on error. if db.journal != nil { db.journal.Close() @@ -872,6 +878,10 @@ func (db *DB) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) { // DB. And a nil Range.Limit is treated as a key after all keys in // the DB. // +// WARNING: Any slice returned by interator (e.g. slice returned by calling +// Iterator.Key() or Iterator.Key() methods), its content should not be modified +// unless noted otherwise. +// // The iterator must be released after use, by calling Release method. // // Also read Iterator documentation of the leveldb/iterator package. @@ -953,15 +963,29 @@ func (db *DB) GetProperty(name string) (value string, err error) { value = "Compactions\n" + " Level | Tables | Size(MB) | Time(sec) | Read(MB) | Write(MB)\n" + "-------+------------+---------------+---------------+---------------+---------------\n" + var totalTables int + var totalSize, totalRead, totalWrite int64 + var totalDuration time.Duration for level, tables := range v.levels { duration, read, write := db.compStats.getStat(level) if len(tables) == 0 && duration == 0 { continue } + totalTables += len(tables) + totalSize += tables.size() + totalRead += read + totalWrite += write + totalDuration += duration value += fmt.Sprintf(" %3d | %10d | %13.5f | %13.5f | %13.5f | %13.5f\n", level, len(tables), float64(tables.size())/1048576.0, duration.Seconds(), float64(read)/1048576.0, float64(write)/1048576.0) } + value += "-------+------------+---------------+---------------+---------------+---------------\n" + value += fmt.Sprintf(" Total | %10d | %13.5f | %13.5f | %13.5f | %13.5f\n", + totalTables, float64(totalSize)/1048576.0, totalDuration.Seconds(), + float64(totalRead)/1048576.0, float64(totalWrite)/1048576.0) + case p == "compcount": + value = fmt.Sprintf("MemComp:%d Level0Comp:%d NonLevel0Comp:%d SeekComp:%d", atomic.LoadUint32(&db.memComp), atomic.LoadUint32(&db.level0Comp), atomic.LoadUint32(&db.nonLevel0Comp), atomic.LoadUint32(&db.seekComp)) case p == "iostats": value = fmt.Sprintf("Read(MB):%.5f Write(MB):%.5f", float64(db.s.stor.reads())/1048576.0, @@ -1013,11 +1037,16 @@ type DBStats struct { BlockCacheSize int OpenedTablesCount int - LevelSizes []int64 + LevelSizes Sizes LevelTablesCounts []int - LevelRead []int64 - LevelWrite []int64 + LevelRead Sizes + LevelWrite Sizes LevelDurations []time.Duration + + MemComp uint32 + Level0Comp uint32 + NonLevel0Comp uint32 + SeekComp uint32 } // Stats populates s with database statistics. @@ -1054,16 +1083,17 @@ func (db *DB) Stats(s *DBStats) error { for level, tables := range v.levels { duration, read, write := db.compStats.getStat(level) - if len(tables) == 0 && duration == 0 { - continue - } + s.LevelDurations = append(s.LevelDurations, duration) s.LevelRead = append(s.LevelRead, read) s.LevelWrite = append(s.LevelWrite, write) s.LevelSizes = append(s.LevelSizes, tables.size()) s.LevelTablesCounts = append(s.LevelTablesCounts, len(tables)) } - + s.MemComp = atomic.LoadUint32(&db.memComp) + s.Level0Comp = atomic.LoadUint32(&db.level0Comp) + s.NonLevel0Comp = atomic.LoadUint32(&db.nonLevel0Comp) + s.SeekComp = atomic.LoadUint32(&db.seekComp) return nil } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go index 0c1b9a53b8e7..6b70eb2c9d3c 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/db_compaction.go @@ -8,6 +8,7 @@ package leveldb import ( "sync" + "sync/atomic" "time" "github.com/syndtr/goleveldb/leveldb/errors" @@ -260,7 +261,7 @@ func (db *DB) compactionCommit(name string, rec *sessionRecord) { db.compCommitLk.Lock() defer db.compCommitLk.Unlock() // Defer is necessary. db.compactionTransactFunc(name+"@commit", func(cnt *compactionTransactCounter) error { - return db.s.commit(rec) + return db.s.commit(rec, true) }, nil) } @@ -324,10 +325,12 @@ func (db *DB) memCompaction() { db.logf("memdb@flush committed F·%d T·%v", len(rec.addedTables), stats.duration) + // Save compaction stats for _, r := range rec.addedTables { stats.write += r.size } db.compStats.addStat(flushLevel, stats) + atomic.AddUint32(&db.memComp, 1) // Drop frozen memdb. db.dropFrozenMem() @@ -588,6 +591,14 @@ func (db *DB) tableCompaction(c *compaction, noTrivial bool) { for i := range stats { db.compStats.addStat(c.sourceLevel+1, &stats[i]) } + switch c.typ { + case level0Compaction: + atomic.AddUint32(&db.level0Comp, 1) + case nonLevel0Compaction: + atomic.AddUint32(&db.nonLevel0Comp, 1) + case seekCompaction: + atomic.AddUint32(&db.seekComp, 1) + } } func (db *DB) tableRangeCompaction(level int, umin, umax []byte) error { diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go index 03c24cdab50d..e6e8ca59d088 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/db_iter.go @@ -78,13 +78,17 @@ func (db *DB) newIterator(auxm *memDB, auxt tFiles, seq uint64, slice *util.Rang } rawIter := db.newRawIterator(auxm, auxt, islice, ro) iter := &dbIter{ - db: db, - icmp: db.s.icmp, - iter: rawIter, - seq: seq, - strict: opt.GetStrict(db.s.o.Options, ro, opt.StrictReader), - key: make([]byte, 0), - value: make([]byte, 0), + db: db, + icmp: db.s.icmp, + iter: rawIter, + seq: seq, + strict: opt.GetStrict(db.s.o.Options, ro, opt.StrictReader), + disableSampling: db.s.o.GetDisableSeeksCompaction() || db.s.o.GetIteratorSamplingRate() <= 0, + key: make([]byte, 0), + value: make([]byte, 0), + } + if !iter.disableSampling { + iter.samplingGap = db.iterSamplingRate() } atomic.AddInt32(&db.aliveIters, 1) runtime.SetFinalizer(iter, (*dbIter).Release) @@ -107,13 +111,14 @@ const ( // dbIter represent an interator states over a database session. type dbIter struct { - db *DB - icmp *iComparer - iter iterator.Iterator - seq uint64 - strict bool - - smaplingGap int + db *DB + icmp *iComparer + iter iterator.Iterator + seq uint64 + strict bool + disableSampling bool + + samplingGap int dir dir key []byte value []byte @@ -122,10 +127,14 @@ type dbIter struct { } func (i *dbIter) sampleSeek() { + if i.disableSampling { + return + } + ikey := i.iter.Key() - i.smaplingGap -= len(ikey) + len(i.iter.Value()) - for i.smaplingGap < 0 { - i.smaplingGap += i.db.iterSamplingRate() + i.samplingGap -= len(ikey) + len(i.iter.Value()) + for i.samplingGap < 0 { + i.samplingGap += i.db.iterSamplingRate() i.db.sampleSeek(ikey) } } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go index 2c69d2e531d5..c2ad70c8476c 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/db_snapshot.go @@ -142,6 +142,10 @@ func (snap *Snapshot) Has(key []byte, ro *opt.ReadOptions) (ret bool, err error) // DB. And a nil Range.Limit is treated as a key after all keys in // the DB. // +// WARNING: Any slice returned by interator (e.g. slice returned by calling +// Iterator.Key() or Iterator.Value() methods), its content should not be +// modified unless noted otherwise. +// // The iterator must be released after use, by calling Release method. // Releasing the snapshot doesn't mean releasing the iterator too, the // iterator would be still valid until released. diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go index b8f7e7d21dfa..21d1e512f342 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/db_transaction.go @@ -69,6 +69,13 @@ func (tr *Transaction) Has(key []byte, ro *opt.ReadOptions) (bool, error) { // DB. And a nil Range.Limit is treated as a key after all keys in // the DB. // +// The returned iterator has locks on its own resources, so it can live beyond +// the lifetime of the transaction who creates them. +// +// WARNING: Any slice returned by interator (e.g. slice returned by calling +// Iterator.Key() or Iterator.Key() methods), its content should not be modified +// unless noted otherwise. +// // The iterator must be released after use, by calling Release method. // // Also read Iterator documentation of the leveldb/iterator package. @@ -205,7 +212,7 @@ func (tr *Transaction) Commit() error { tr.stats.startTimer() var cerr error for retry := 0; retry < 3; retry++ { - cerr = tr.db.s.commit(&tr.rec) + cerr = tr.db.s.commit(&tr.rec, false) if cerr != nil { tr.db.logf("transaction@commit error R·%d %q", retry, cerr) select { @@ -248,13 +255,14 @@ func (tr *Transaction) discard() { // Discard transaction. for _, t := range tr.tables { tr.db.logf("transaction@discard @%d", t.fd.Num) - if err1 := tr.db.s.stor.Remove(t.fd); err1 == nil { - tr.db.s.reuseFileNum(t.fd.Num) - } + // Iterator may still use the table, so we use tOps.remove here. + tr.db.s.tops.remove(t.fd) } } // Discard discards the transaction. +// This method is noop if transaction is already closed (either committed or +// discarded) // // Other methods should not be called after transaction has been discarded. func (tr *Transaction) Discard() { @@ -278,8 +286,10 @@ func (db *DB) waitCompaction() error { // until in-flight transaction is committed or discarded. // The returned transaction handle is safe for concurrent use. // -// Transaction is expensive and can overwhelm compaction, especially if +// Transaction is very expensive and can overwhelm compaction, especially if // transaction size is small. Use with caution. +// The rule of thumb is if you need to merge at least same amount of +// `Options.WriteBuffer` worth of data then use transaction, otherwise don't. // // The transaction must be closed once done, either by committing or discarding // the transaction. diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go b/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go index bab0e99705f5..56ccbfbecab5 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/filter/bloom.go @@ -16,7 +16,7 @@ func bloomHash(key []byte) uint32 { type bloomFilter int -// The bloom filter serializes its parameters and is backward compatible +// Name: The bloom filter serializes its parameters and is backward compatible // with respect to them. Therefor, its parameters are not added to its // name. func (bloomFilter) Name() string { diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go b/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go index b661c08a93e2..824e47f5f402 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/memdb/memdb.go @@ -397,6 +397,10 @@ func (p *DB) Find(key []byte) (rkey, value []byte, err error) { // DB. And a nil Range.Limit is treated as a key after all keys in // the DB. // +// WARNING: Any slice returned by interator (e.g. slice returned by calling +// Iterator.Key() or Iterator.Key() methods), its content should not be modified +// unless noted otherwise. +// // The iterator must be released after use, by calling Release method. // // Also read Iterator documentation of the leveldb/iterator package. diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go b/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go index 528b16423321..c02c1e978848 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/opt/options.go @@ -278,6 +278,14 @@ type Options struct { // The default is false. DisableLargeBatchTransaction bool + // DisableSeeksCompaction allows disabling 'seeks triggered compaction'. + // The purpose of 'seeks triggered compaction' is to optimize database so + // that 'level seeks' can be minimized, however this might generate many + // small compaction which may not preferable. + // + // The default is false. + DisableSeeksCompaction bool + // ErrorIfExist defines whether an error should returned if the DB already // exist. // @@ -309,6 +317,8 @@ type Options struct { // IteratorSamplingRate defines approximate gap (in bytes) between read // sampling of an iterator. The samples will be used to determine when // compaction should be triggered. + // Use negative value to disable iterator sampling. + // The iterator sampling is disabled if DisableSeeksCompaction is true. // // The default is 1MiB. IteratorSamplingRate int @@ -526,6 +536,13 @@ func (o *Options) GetDisableLargeBatchTransaction() bool { return o.DisableLargeBatchTransaction } +func (o *Options) GetDisableSeeksCompaction() bool { + if o == nil { + return false + } + return o.DisableSeeksCompaction +} + func (o *Options) GetErrorIfExist() bool { if o == nil { return false @@ -548,8 +565,10 @@ func (o *Options) GetFilter() filter.Filter { } func (o *Options) GetIteratorSamplingRate() int { - if o == nil || o.IteratorSamplingRate <= 0 { + if o == nil || o.IteratorSamplingRate == 0 { return DefaultIteratorSamplingRate + } else if o.IteratorSamplingRate < 0 { + return 0 } return o.IteratorSamplingRate } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session.go b/vendor/github.com/syndtr/goleveldb/leveldb/session.go index 3f391f934622..7310209baff2 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/session.go @@ -47,15 +47,24 @@ type session struct { o *cachedOptions icmp *iComparer tops *tOps - fileRef map[int64]int manifest *journal.Writer manifestWriter storage.Writer manifestFd storage.FileDesc - stCompPtrs []internalKey // compaction pointers; need external synchronization - stVersion *version // current version - vmu sync.Mutex + stCompPtrs []internalKey // compaction pointers; need external synchronization + stVersion *version // current version + ntVersionId int64 // next version id to assign + refCh chan *vTask + relCh chan *vTask + deltaCh chan *vDelta + abandon chan int64 + closeC chan struct{} + closeW sync.WaitGroup + vmu sync.Mutex + + // Testing fields + fileRefCh chan chan map[int64]int // channel used to pass current reference stat } // Creates new initialized session instance. @@ -68,13 +77,21 @@ func newSession(stor storage.Storage, o *opt.Options) (s *session, err error) { return } s = &session{ - stor: newIStorage(stor), - storLock: storLock, - fileRef: make(map[int64]int), + stor: newIStorage(stor), + storLock: storLock, + refCh: make(chan *vTask), + relCh: make(chan *vTask), + deltaCh: make(chan *vDelta), + abandon: make(chan int64), + fileRefCh: make(chan chan map[int64]int), + closeC: make(chan struct{}), } s.setOptions(o) s.tops = newTableOps(s) - s.setVersion(newVersion(s)) + + s.closeW.Add(1) + go s.refLoop() + s.setVersion(nil, newVersion(s)) s.log("log@legend F·NumFile S·FileSize N·Entry C·BadEntry B·BadBlock Ke·KeyError D·DroppedEntry L·Level Q·SeqNum T·TimeElapsed") return } @@ -90,7 +107,11 @@ func (s *session) close() { } s.manifest = nil s.manifestWriter = nil - s.setVersion(&version{s: s, closing: true}) + s.setVersion(nil, &version{s: s, closing: true, id: s.ntVersionId}) + + // Close all background goroutines + close(s.closeC) + s.closeW.Wait() } // Release session lock. @@ -180,19 +201,27 @@ func (s *session) recover() (err error) { } s.manifestFd = fd - s.setVersion(staging.finish()) + s.setVersion(rec, staging.finish(false)) s.setNextFileNum(rec.nextFileNum) s.recordCommited(rec) return nil } // Commit session; need external synchronization. -func (s *session) commit(r *sessionRecord) (err error) { +func (s *session) commit(r *sessionRecord, trivial bool) (err error) { v := s.version() defer v.release() // spawn new version based on current version - nv := v.spawn(r) + nv := v.spawn(r, trivial) + + // abandon useless version id to prevent blocking version processing loop. + defer func() { + if err != nil { + s.abandon <- nv.id + s.logf("commit@abandon useless vid D%d", nv.id) + } + }() if s.manifest == nil { // manifest journal writer not yet created, create one @@ -203,7 +232,7 @@ func (s *session) commit(r *sessionRecord) (err error) { // finally, apply new version if no error rise if err == nil { - s.setVersion(nv) + s.setVersion(r, nv) } return diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go b/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go index 089cd00b26d5..4c1d336bef79 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/session_compaction.go @@ -14,6 +14,13 @@ import ( "github.com/syndtr/goleveldb/leveldb/opt" ) +const ( + undefinedCompaction = iota + level0Compaction + nonLevel0Compaction + seekCompaction +) + func (s *session) pickMemdbLevel(umin, umax []byte, maxLevel int) int { v := s.version() defer v.release() @@ -50,6 +57,7 @@ func (s *session) pickCompaction() *compaction { var sourceLevel int var t0 tFiles + var typ int if v.cScore >= 1 { sourceLevel = v.cLevel cptr := s.getCompPtr(sourceLevel) @@ -63,18 +71,24 @@ func (s *session) pickCompaction() *compaction { if len(t0) == 0 { t0 = append(t0, tables[0]) } + if sourceLevel == 0 { + typ = level0Compaction + } else { + typ = nonLevel0Compaction + } } else { if p := atomic.LoadPointer(&v.cSeek); p != nil { ts := (*tSet)(p) sourceLevel = ts.level t0 = append(t0, ts.table) + typ = seekCompaction } else { v.release() return nil } } - return newCompaction(s, v, sourceLevel, t0) + return newCompaction(s, v, sourceLevel, t0, typ) } // Create compaction from given level and range; need external synchronization. @@ -109,13 +123,18 @@ func (s *session) getCompactionRange(sourceLevel int, umin, umax []byte, noLimit } } - return newCompaction(s, v, sourceLevel, t0) + typ := level0Compaction + if sourceLevel != 0 { + typ = nonLevel0Compaction + } + return newCompaction(s, v, sourceLevel, t0, typ) } -func newCompaction(s *session, v *version, sourceLevel int, t0 tFiles) *compaction { +func newCompaction(s *session, v *version, sourceLevel int, t0 tFiles, typ int) *compaction { c := &compaction{ s: s, v: v, + typ: typ, sourceLevel: sourceLevel, levels: [2]tFiles{t0, nil}, maxGPOverlaps: int64(s.o.GetCompactionGPOverlaps(sourceLevel)), @@ -131,6 +150,7 @@ type compaction struct { s *session v *version + typ int sourceLevel int levels [2]tFiles maxGPOverlaps int64 @@ -181,10 +201,14 @@ func (c *compaction) expand() { t0, t1 := c.levels[0], c.levels[1] imin, imax := t0.getRange(c.s.icmp) - // We expand t0 here just incase ukey hop across tables. - t0 = vt0.getOverlaps(t0, c.s.icmp, imin.ukey(), imax.ukey(), c.sourceLevel == 0) - if len(t0) != len(c.levels[0]) { - imin, imax = t0.getRange(c.s.icmp) + + // For non-zero levels, the ukey can't hop across tables at all. + if c.sourceLevel == 0 { + // We expand t0 here just incase ukey hop across tables. + t0 = vt0.getOverlaps(t0, c.s.icmp, imin.ukey(), imax.ukey(), c.sourceLevel == 0) + if len(t0) != len(c.levels[0]) { + imin, imax = t0.getRange(c.s.icmp) + } } t1 = vt1.getOverlaps(t1, c.s.icmp, imin.ukey(), imax.ukey(), false) // Get entire range covered by compaction. diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/session_util.go b/vendor/github.com/syndtr/goleveldb/leveldb/session_util.go index 40cb2cf9575e..fc56b631f0fb 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/session_util.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/session_util.go @@ -9,6 +9,7 @@ package leveldb import ( "fmt" "sync/atomic" + "time" "github.com/syndtr/goleveldb/leveldb/journal" "github.com/syndtr/goleveldb/leveldb/storage" @@ -39,19 +40,213 @@ func (s *session) newTemp() storage.FileDesc { return storage.FileDesc{Type: storage.TypeTemp, Num: num} } -func (s *session) addFileRef(fd storage.FileDesc, ref int) int { - ref += s.fileRef[fd.Num] - if ref > 0 { - s.fileRef[fd.Num] = ref - } else if ref == 0 { - delete(s.fileRef, fd.Num) - } else { - panic(fmt.Sprintf("negative ref: %v", fd)) - } - return ref +// Session state. + +const ( + // maxCachedNumber represents the maximum number of version tasks + // that can be cached in the ref loop. + maxCachedNumber = 256 + + // maxCachedTime represents the maximum time for ref loop to cache + // a version task. + maxCachedTime = 5 * time.Minute +) + +// vDelta indicates the change information between the next version +// and the currently specified version +type vDelta struct { + vid int64 + added []int64 + deleted []int64 } -// Session state. +// vTask defines a version task for either reference or release. +type vTask struct { + vid int64 + files []tFiles + created time.Time +} + +func (s *session) refLoop() { + var ( + fileRef = make(map[int64]int) // Table file reference counter + ref = make(map[int64]*vTask) // Current referencing version store + deltas = make(map[int64]*vDelta) + referenced = make(map[int64]struct{}) + released = make(map[int64]*vDelta) // Released version that waiting for processing + abandoned = make(map[int64]struct{}) // Abandoned version id + next, last int64 + ) + // addFileRef adds file reference counter with specified file number and + // reference value + addFileRef := func(fnum int64, ref int) int { + ref += fileRef[fnum] + if ref > 0 { + fileRef[fnum] = ref + } else if ref == 0 { + delete(fileRef, fnum) + } else { + panic(fmt.Sprintf("negative ref: %v", fnum)) + } + return ref + } + // skipAbandoned skips useless abandoned version id. + skipAbandoned := func() bool { + if _, exist := abandoned[next]; exist { + delete(abandoned, next) + return true + } + return false + } + // applyDelta applies version change to current file reference. + applyDelta := func(d *vDelta) { + for _, t := range d.added { + addFileRef(t, 1) + } + for _, t := range d.deleted { + if addFileRef(t, -1) == 0 { + s.tops.remove(storage.FileDesc{Type: storage.TypeTable, Num: t}) + } + } + } + + timer := time.NewTimer(0) + <-timer.C // discard the initial tick + defer timer.Stop() + + // processTasks processes version tasks in strict order. + // + // If we want to use delta to reduce the cost of file references and dereferences, + // we must strictly follow the id of the version, otherwise some files that are + // being referenced will be deleted. + // + // In addition, some db operations (such as iterators) may cause a version to be + // referenced for a long time. In order to prevent such operations from blocking + // the entire processing queue, we will properly convert some of the version tasks + // into full file references and releases. + processTasks := func() { + timer.Reset(maxCachedTime) + // Make sure we don't cache too many version tasks. + for { + // Skip any abandoned version number to prevent blocking processing. + if skipAbandoned() { + next += 1 + continue + } + // Don't bother the version that has been released. + if _, exist := released[next]; exist { + break + } + // Ensure the specified version has been referenced. + if _, exist := ref[next]; !exist { + break + } + if last-next < maxCachedNumber && time.Since(ref[next].created) < maxCachedTime { + break + } + // Convert version task into full file references and releases mode. + // Reference version(i+1) first and wait version(i) to release. + // FileRef(i+1) = FileRef(i) + Delta(i) + for _, tt := range ref[next].files { + for _, t := range tt { + addFileRef(t.fd.Num, 1) + } + } + // Note, if some compactions take a long time, even more than 5 minutes, + // we may miss the corresponding delta information here. + // Fortunately it will not affect the correctness of the file reference, + // and we can apply the delta once we receive it. + if d := deltas[next]; d != nil { + applyDelta(d) + } + referenced[next] = struct{}{} + delete(ref, next) + delete(deltas, next) + next += 1 + } + + // Use delta information to process all released versions. + for { + if skipAbandoned() { + next += 1 + continue + } + if d, exist := released[next]; exist { + if d != nil { + applyDelta(d) + } + delete(released, next) + next += 1 + continue + } + return + } + } + + for { + processTasks() + + select { + case t := <-s.refCh: + if _, exist := ref[t.vid]; exist { + panic("duplicate reference request") + } + ref[t.vid] = t + if t.vid > last { + last = t.vid + } + + case d := <-s.deltaCh: + if _, exist := ref[d.vid]; !exist { + if _, exist2 := referenced[d.vid]; !exist2 { + panic("invalid release request") + } + // The reference opt is already expired, apply + // delta here. + applyDelta(d) + continue + } + deltas[d.vid] = d + + case t := <-s.relCh: + if _, exist := referenced[t.vid]; exist { + for _, tt := range t.files { + for _, t := range tt { + if addFileRef(t.fd.Num, -1) == 0 { + s.tops.remove(t.fd) + } + } + } + delete(referenced, t.vid) + continue + } + if _, exist := ref[t.vid]; !exist { + panic("invalid release request") + } + released[t.vid] = deltas[t.vid] + delete(deltas, t.vid) + delete(ref, t.vid) + + case id := <-s.abandon: + if id >= next { + abandoned[id] = struct{}{} + } + + case <-timer.C: + + case r := <-s.fileRefCh: + ref := make(map[int64]int) + for f, c := range fileRef { + ref[f] = c + } + r <- ref + + case <-s.closeC: + s.closeW.Done() + return + } + } +} // Get current version. This will incr version ref, must call // version.release (exactly once) after use. @@ -69,13 +264,30 @@ func (s *session) tLen(level int) int { } // Set current version to v. -func (s *session) setVersion(v *version) { +func (s *session) setVersion(r *sessionRecord, v *version) { s.vmu.Lock() defer s.vmu.Unlock() // Hold by session. It is important to call this first before releasing // current version, otherwise the still used files might get released. v.incref() if s.stVersion != nil { + if r != nil { + var ( + added = make([]int64, 0, len(r.addedTables)) + deleted = make([]int64, 0, len(r.deletedTables)) + ) + for _, t := range r.addedTables { + added = append(added, t.num) + } + for _, t := range r.deletedTables { + deleted = append(deleted, t.num) + } + select { + case s.deltaCh <- &vDelta{vid: s.stVersion.id, added: added, deleted: deleted}: + case <-v.s.closeC: + s.log("reference loop already exist") + } + } // Release current version. s.stVersion.releaseNB() } @@ -96,7 +308,7 @@ func (s *session) setNextFileNum(num int64) { func (s *session) markFileNum(num int64) { nextFileNum := num + 1 for { - old, x := s.stNextFileNum, nextFileNum + old, x := atomic.LoadInt64(&s.stNextFileNum), nextFileNum if old > x { x = old } @@ -114,7 +326,7 @@ func (s *session) allocFileNum() int64 { // Reuse given file number. func (s *session) reuseFileNum(num int64) { for { - old, x := s.stNextFileNum, num + old, x := atomic.LoadInt64(&s.stNextFileNum), num if old != x+1 { x = old } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table.go b/vendor/github.com/syndtr/goleveldb/leveldb/table.go index 1fac60d050b3..b7759b2f5c23 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/table.go @@ -7,6 +7,7 @@ package leveldb import ( + "bytes" "fmt" "sort" "sync/atomic" @@ -150,6 +151,30 @@ func (tf tFiles) searchMax(icmp *iComparer, ikey internalKey) int { }) } +// Searches smallest index of tables whose its file number +// is smaller than the given number. +func (tf tFiles) searchNumLess(num int64) int { + return sort.Search(len(tf), func(i int) bool { + return tf[i].fd.Num < num + }) +} + +// Searches smallest index of tables whose its smallest +// key is after the given key. +func (tf tFiles) searchMinUkey(icmp *iComparer, umin []byte) int { + return sort.Search(len(tf), func(i int) bool { + return icmp.ucmp.Compare(tf[i].imin.ukey(), umin) > 0 + }) +} + +// Searches smallest index of tables whose its largest +// key is after the given key. +func (tf tFiles) searchMaxUkey(icmp *iComparer, umax []byte) int { + return sort.Search(len(tf), func(i int) bool { + return icmp.ucmp.Compare(tf[i].imax.ukey(), umax) > 0 + }) +} + // Returns true if given key range overlaps with one or more // tables key range. If unsorted is true then binary search will not be used. func (tf tFiles) overlaps(icmp *iComparer, umin, umax []byte, unsorted bool) bool { @@ -181,6 +206,50 @@ func (tf tFiles) overlaps(icmp *iComparer, umin, umax []byte, unsorted bool) boo // expanded. // The dst content will be overwritten. func (tf tFiles) getOverlaps(dst tFiles, icmp *iComparer, umin, umax []byte, overlapped bool) tFiles { + // Short circuit if tf is empty + if len(tf) == 0 { + return nil + } + // For non-zero levels, there is no ukey hop across at all. + // And what's more, the files in these levels are strictly sorted, + // so use binary search instead of heavy traverse. + if !overlapped { + var begin, end int + // Determine the begin index of the overlapped file + if umin != nil { + index := tf.searchMinUkey(icmp, umin) + if index == 0 { + begin = 0 + } else if bytes.Compare(tf[index-1].imax.ukey(), umin) >= 0 { + // The min ukey overlaps with the index-1 file, expand it. + begin = index - 1 + } else { + begin = index + } + } + // Determine the end index of the overlapped file + if umax != nil { + index := tf.searchMaxUkey(icmp, umax) + if index == len(tf) { + end = len(tf) + } else if bytes.Compare(tf[index].imin.ukey(), umax) <= 0 { + // The max ukey overlaps with the index file, expand it. + end = index + 1 + } else { + end = index + } + } else { + end = len(tf) + } + // Ensure the overlapped file indexes are valid. + if begin >= end { + return nil + } + dst = make([]*tFile, end-begin) + copy(dst, tf[begin:end]) + return dst + } + dst = dst[:0] for i := 0; i < len(tf); { t := tf[i] @@ -193,11 +262,9 @@ func (tf tFiles) getOverlaps(dst tFiles, icmp *iComparer, umin, umax []byte, ove } else if umax != nil && icmp.uCompare(t.imax.ukey(), umax) > 0 { umax = t.imax.ukey() // Restart search if it is overlapped. - if overlapped { - dst = dst[:0] - i = 0 - continue - } + dst = dst[:0] + i = 0 + continue } dst = append(dst, t) @@ -416,16 +483,18 @@ func (t *tOps) newIterator(f *tFile, slice *util.Range, ro *opt.ReadOptions) ite // Removes table from persistent storage. It waits until // no one use the the table. -func (t *tOps) remove(f *tFile) { - t.cache.Delete(0, uint64(f.fd.Num), func() { - if err := t.s.stor.Remove(f.fd); err != nil { - t.s.logf("table@remove removing @%d %q", f.fd.Num, err) +func (t *tOps) remove(fd storage.FileDesc) { + t.cache.Delete(0, uint64(fd.Num), func() { + if err := t.s.stor.Remove(fd); err != nil { + t.s.logf("table@remove removing @%d %q", fd.Num, err) } else { - t.s.logf("table@remove removed @%d", f.fd.Num) + t.s.logf("table@remove removed @%d", fd.Num) } if t.evictRemoved && t.bcache != nil { - t.bcache.EvictNS(uint64(f.fd.Num)) + t.bcache.EvictNS(uint64(fd.Num)) } + // Try to reuse file num, useful for discarded transaction. + t.s.reuseFileNum(fd.Num) }) } diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go b/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go index 16cfbaa0068a..496feb6fb458 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/table/reader.go @@ -787,6 +787,10 @@ func (r *Reader) getDataIterErr(dataBH blockHandle, slice *util.Range, verifyChe // table. And a nil Range.Limit is treated as a key after all keys in // the table. // +// WARNING: Any slice returned by interator (e.g. slice returned by calling +// Iterator.Key() or Iterator.Key() methods), its content should not be modified +// unless noted otherwise. +// // The returned iterator is not safe for concurrent use and should be released // after use. // diff --git a/vendor/github.com/syndtr/goleveldb/leveldb/version.go b/vendor/github.com/syndtr/goleveldb/leveldb/version.go index 73f272af5ff4..9535e3591450 100644 --- a/vendor/github.com/syndtr/goleveldb/leveldb/version.go +++ b/vendor/github.com/syndtr/goleveldb/leveldb/version.go @@ -9,6 +9,7 @@ package leveldb import ( "fmt" "sync/atomic" + "time" "unsafe" "github.com/syndtr/goleveldb/leveldb/iterator" @@ -22,7 +23,8 @@ type tSet struct { } type version struct { - s *session + id int64 // unique monotonous increasing version id + s *session levels []tFiles @@ -39,8 +41,11 @@ type version struct { released bool } +// newVersion creates a new version with an unique monotonous increasing id. func newVersion(s *session) *version { - return &version{s: s} + id := atomic.AddInt64(&s.ntVersionId, 1) + nv := &version{s: s, id: id - 1} + return nv } func (v *version) incref() { @@ -50,11 +55,11 @@ func (v *version) incref() { v.ref++ if v.ref == 1 { - // Incr file ref. - for _, tt := range v.levels { - for _, t := range tt { - v.s.addFileRef(t.fd, 1) - } + select { + case v.s.refCh <- &vTask{vid: v.id, files: v.levels, created: time.Now()}: + // We can use v.levels directly here since it is immutable. + case <-v.s.closeC: + v.s.log("reference loop already exist") } } } @@ -66,13 +71,11 @@ func (v *version) releaseNB() { } else if v.ref < 0 { panic("negative version ref") } - - for _, tt := range v.levels { - for _, t := range tt { - if v.s.addFileRef(t.fd, -1) == 0 { - v.s.tops.remove(t) - } - } + select { + case v.s.relCh <- &vTask{vid: v.id, files: v.levels, created: time.Now()}: + // We can use v.levels directly here since it is immutable. + case <-v.s.closeC: + v.s.log("reference loop already exist") } v.released = true @@ -141,6 +144,7 @@ func (v *version) get(aux tFiles, ikey internalKey, ro *opt.ReadOptions, noValue } ukey := ikey.ukey() + sampleSeeks := !v.s.o.GetDisableSeeksCompaction() var ( tset *tSet @@ -158,7 +162,7 @@ func (v *version) get(aux tFiles, ikey internalKey, ro *opt.ReadOptions, noValue // Since entries never hop across level, finding key/value // in smaller level make later levels irrelevant. v.walkOverlapping(aux, ikey, func(level int, t *tFile) bool { - if level >= 0 && !tseek { + if sampleSeeks && level >= 0 && !tseek { if tset == nil { tset = &tSet{level, t} } else { @@ -273,10 +277,10 @@ func (v *version) newStaging() *versionStaging { } // Spawn a new version based on this version. -func (v *version) spawn(r *sessionRecord) *version { +func (v *version) spawn(r *sessionRecord, trivial bool) *version { staging := v.newStaging() staging.commit(r) - return staging.finish() + return staging.finish(trivial) } func (v *version) fillRecord(r *sessionRecord) { @@ -446,7 +450,7 @@ func (p *versionStaging) commit(r *sessionRecord) { } } -func (p *versionStaging) finish() *version { +func (p *versionStaging) finish(trivial bool) *version { // Build new version. nv := newVersion(p.base.s) numLevel := len(p.levels) @@ -463,6 +467,12 @@ func (p *versionStaging) finish() *version { if level < len(p.levels) { scratch := p.levels[level] + // Short circuit if there is no change at all. + if len(scratch.added) == 0 && len(scratch.deleted) == 0 { + nv.levels[level] = baseTabels + continue + } + var nt tFiles // Prealloc list if possible. if n := len(baseTabels) + len(scratch.added) - len(scratch.deleted); n > 0 { @@ -480,6 +490,41 @@ func (p *versionStaging) finish() *version { nt = append(nt, t) } + // Avoid resort if only files in this level are deleted + if len(scratch.added) == 0 { + nv.levels[level] = nt + continue + } + + // For normal table compaction, one compaction will only involve two levels + // of files. And the new files generated after merging the source level and + // source+1 level related files can be inserted as a whole into source+1 level + // without any overlap with the other source+1 files. + // + // When the amount of data maintained by leveldb is large, the number of files + // per level will be very large. While qsort is very inefficient for sorting + // already ordered arrays. Therefore, for the normal table compaction, we use + // binary search here to find the insert index to insert a batch of new added + // files directly instead of using qsort. + if trivial && len(scratch.added) > 0 { + added := make(tFiles, 0, len(scratch.added)) + for _, r := range scratch.added { + added = append(added, tableFileFromRecord(r)) + } + if level == 0 { + added.sortByNum() + index := nt.searchNumLess(added[len(added)-1].fd.Num) + nt = append(nt[:index], append(added, nt[index:]...)...) + } else { + added.sortByKey(p.base.s.icmp) + _, amax := added.getRange(p.base.s.icmp) + index := nt.searchMin(p.base.s.icmp, amax) + nt = append(nt[:index], append(added, nt[index:]...)...) + } + nv.levels[level] = nt + continue + } + // New tables. for _, r := range scratch.added { nt = append(nt, tableFileFromRecord(r)) diff --git a/vendor/github.com/tyler-smith/go-bip39/Gopkg.lock b/vendor/github.com/tyler-smith/go-bip39/Gopkg.lock new file mode 100644 index 000000000000..e15d33f31ca9 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/Gopkg.lock @@ -0,0 +1,15 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + branch = "master" + name = "golang.org/x/crypto" + packages = ["pbkdf2"] + revision = "a49355c7e3f8fe157a85be2f77e6e269a0f89602" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "d7f1a7207c39125afcb9ca2365832cb83458edfc17f2f7e8d28fd56f19436856" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/tyler-smith/go-bip39/Gopkg.toml b/vendor/github.com/tyler-smith/go-bip39/Gopkg.toml new file mode 100644 index 000000000000..2f655b2c7b3f --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/Gopkg.toml @@ -0,0 +1,26 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + branch = "master" + name = "golang.org/x/crypto" diff --git a/vendor/github.com/gizak/termui/LICENSE b/vendor/github.com/tyler-smith/go-bip39/LICENSE similarity index 95% rename from vendor/github.com/gizak/termui/LICENSE rename to vendor/github.com/tyler-smith/go-bip39/LICENSE index 311ccc74fbfe..4dae82d35b92 100644 --- a/vendor/github.com/gizak/termui/LICENSE +++ b/vendor/github.com/tyler-smith/go-bip39/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Zack Guo +Copyright (c) 2014-2018 Tyler Smith and contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/vendor/github.com/tyler-smith/go-bip39/Makefile b/vendor/github.com/tyler-smith/go-bip39/Makefile new file mode 100644 index 000000000000..f0f3fe88c7f9 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/Makefile @@ -0,0 +1,11 @@ +.DEFAULT_GOAL := help + +tests: ## Run tests with coverage + go test -v -cover ./... + +profile_tests: ## Run tests and output coverage profiling + go test -v -coverprofile=coverage.out . + go tool cover -html=coverage.out + +help: + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' diff --git a/vendor/github.com/tyler-smith/go-bip39/README.md b/vendor/github.com/tyler-smith/go-bip39/README.md new file mode 100644 index 000000000000..933296fd839e --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/README.md @@ -0,0 +1,45 @@ +# go-bip39 +[![Build Status](https://travis-ci.org/tyler-smith/go-bip39.svg?branch=master)](https://travis-ci.org/tyler-smith/go-bip39) +[![license](https://img.shields.io/github/license/tyler-smith/go-bip39.svg?maxAge=2592000)](https://github.com/tyler-smith/go-bip39/blob/master/LICENSE) +[![Documentation](https://godoc.org/github.com/tyler-smith/go-bip39?status.svg)](http://godoc.org/github.com/tyler-smith/go-bip39) +[![Go Report Card](https://goreportcard.com/badge/github.com/tyler-smith/go-bip39)](https://goreportcard.com/report/github.com/tyler-smith/go-bip39) +[![GitHub issues](https://img.shields.io/github/issues/tyler-smith/go-bip39.svg)](https://github.com/tyler-smith/go-bip39/issues) + + +A golang implementation of the BIP0039 spec for mnemonic seeds + +## Example + +```go +package main + +import ( + "github.com/tyler-smith/go-bip39" + "github.com/tyler-smith/go-bip32" + "fmt" +) + +func main(){ + // Generate a mnemonic for memorization or user-friendly seeds + entropy, _ := bip39.NewEntropy(256) + mnemonic, _ := bip39.NewMnemonic(entropy) + + // Generate a Bip32 HD wallet for the mnemonic and a user supplied password + seed := bip39.NewSeed(mnemonic, "Secret Passphrase") + + masterKey, _ := bip32.NewMasterKey(seed) + publicKey := masterKey.PublicKey() + + // Display mnemonic and keys + fmt.Println("Mnemonic: ", mnemonic) + fmt.Println("Master private key: ", masterKey) + fmt.Println("Master public key: ", publicKey) +} +``` + +## Credits + +Wordlists are from the [bip39 spec](https://github.com/bitcoin/bips/tree/master/bip-0039). + +Test vectors are from the standard Python BIP0039 implementation from the +Trezor team: [https://github.com/trezor/python-mnemonic](https://github.com/trezor/python-mnemonic) diff --git a/vendor/github.com/tyler-smith/go-bip39/bip39.go b/vendor/github.com/tyler-smith/go-bip39/bip39.go new file mode 100644 index 000000000000..62503b0fd27c --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/bip39.go @@ -0,0 +1,377 @@ +// Package bip39 is the Golang implementation of the BIP39 spec. +// +// The official BIP39 spec can be found at +// https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki +package bip39 + +import ( + "crypto/rand" + "crypto/sha256" + "crypto/sha512" + "encoding/binary" + "errors" + "fmt" + "math/big" + "strings" + + "github.com/tyler-smith/go-bip39/wordlists" + "golang.org/x/crypto/pbkdf2" +) + +var ( + // Some bitwise operands for working with big.Ints + last11BitsMask = big.NewInt(2047) + shift11BitsMask = big.NewInt(2048) + bigOne = big.NewInt(1) + bigTwo = big.NewInt(2) + + // used to isolate the checksum bits from the entropy+checksum byte array + wordLengthChecksumMasksMapping = map[int]*big.Int{ + 12: big.NewInt(15), + 15: big.NewInt(31), + 18: big.NewInt(63), + 21: big.NewInt(127), + 24: big.NewInt(255), + } + // used to use only the desired x of 8 available checksum bits. + // 256 bit (word length 24) requires all 8 bits of the checksum, + // and thus no shifting is needed for it (we would get a divByZero crash if we did) + wordLengthChecksumShiftMapping = map[int]*big.Int{ + 12: big.NewInt(16), + 15: big.NewInt(8), + 18: big.NewInt(4), + 21: big.NewInt(2), + } + + // wordList is the set of words to use + wordList []string + + // wordMap is a reverse lookup map for wordList + wordMap map[string]int +) + +var ( + // ErrInvalidMnemonic is returned when trying to use a malformed mnemonic. + ErrInvalidMnemonic = errors.New("Invalid mnenomic") + + // ErrEntropyLengthInvalid is returned when trying to use an entropy set with + // an invalid size. + ErrEntropyLengthInvalid = errors.New("Entropy length must be [128, 256] and a multiple of 32") + + // ErrValidatedSeedLengthMismatch is returned when a validated seed is not the + // same size as the given seed. This should never happen is present only as a + // sanity assertion. + ErrValidatedSeedLengthMismatch = errors.New("Seed length does not match validated seed length") + + // ErrChecksumIncorrect is returned when entropy has the incorrect checksum. + ErrChecksumIncorrect = errors.New("Checksum incorrect") +) + +func init() { + SetWordList(wordlists.English) +} + +// SetWordList sets the list of words to use for mnemonics. Currently the list +// that is set is used package-wide. +func SetWordList(list []string) { + wordList = list + wordMap = map[string]int{} + for i, v := range wordList { + wordMap[v] = i + } +} + +// GetWordList gets the list of words to use for mnemonics. +func GetWordList() []string { + return wordList +} + +// GetWordIndex gets word index in wordMap. +func GetWordIndex(word string) (int, bool) { + idx, ok := wordMap[word] + return idx, ok +} + +// NewEntropy will create random entropy bytes +// so long as the requested size bitSize is an appropriate size. +// +// bitSize has to be a multiple 32 and be within the inclusive range of {128, 256} +func NewEntropy(bitSize int) ([]byte, error) { + err := validateEntropyBitSize(bitSize) + if err != nil { + return nil, err + } + + entropy := make([]byte, bitSize/8) + _, err = rand.Read(entropy) + return entropy, err +} + +// EntropyFromMnemonic takes a mnemonic generated by this library, +// and returns the input entropy used to generate the given mnemonic. +// An error is returned if the given mnemonic is invalid. +func EntropyFromMnemonic(mnemonic string) ([]byte, error) { + mnemonicSlice, isValid := splitMnemonicWords(mnemonic) + if !isValid { + return nil, ErrInvalidMnemonic + } + + // Decode the words into a big.Int. + b := big.NewInt(0) + for _, v := range mnemonicSlice { + index, found := wordMap[v] + if found == false { + return nil, fmt.Errorf("word `%v` not found in reverse map", v) + } + var wordBytes [2]byte + binary.BigEndian.PutUint16(wordBytes[:], uint16(index)) + b = b.Mul(b, shift11BitsMask) + b = b.Or(b, big.NewInt(0).SetBytes(wordBytes[:])) + } + + // Build and add the checksum to the big.Int. + checksum := big.NewInt(0) + checksumMask := wordLengthChecksumMasksMapping[len(mnemonicSlice)] + checksum = checksum.And(b, checksumMask) + + b.Div(b, big.NewInt(0).Add(checksumMask, bigOne)) + + // The entropy is the underlying bytes of the big.Int. Any upper bytes of + // all 0's are not returned so we pad the beginning of the slice with empty + // bytes if necessary. + entropy := b.Bytes() + entropy = padByteSlice(entropy, len(mnemonicSlice)/3*4) + + // Generate the checksum and compare with the one we got from the mneomnic. + entropyChecksumBytes := computeChecksum(entropy) + entropyChecksum := big.NewInt(int64(entropyChecksumBytes[0])) + if l := len(mnemonicSlice); l != 24 { + checksumShift := wordLengthChecksumShiftMapping[l] + entropyChecksum.Div(entropyChecksum, checksumShift) + } + + if checksum.Cmp(entropyChecksum) != 0 { + return nil, ErrChecksumIncorrect + } + + return entropy, nil +} + +// NewMnemonic will return a string consisting of the mnemonic words for +// the given entropy. +// If the provide entropy is invalid, an error will be returned. +func NewMnemonic(entropy []byte) (string, error) { + // Compute some lengths for convenience. + entropyBitLength := len(entropy) * 8 + checksumBitLength := entropyBitLength / 32 + sentenceLength := (entropyBitLength + checksumBitLength) / 11 + + // Validate that the requested size is supported. + err := validateEntropyBitSize(entropyBitLength) + if err != nil { + return "", err + } + + // Add checksum to entropy. + entropy = addChecksum(entropy) + + // Break entropy up into sentenceLength chunks of 11 bits. + // For each word AND mask the rightmost 11 bits and find the word at that index. + // Then bitshift entropy 11 bits right and repeat. + // Add to the last empty slot so we can work with LSBs instead of MSB. + + // Entropy as an int so we can bitmask without worrying about bytes slices. + entropyInt := new(big.Int).SetBytes(entropy) + + // Slice to hold words in. + words := make([]string, sentenceLength) + + // Throw away big.Int for AND masking. + word := big.NewInt(0) + + for i := sentenceLength - 1; i >= 0; i-- { + // Get 11 right most bits and bitshift 11 to the right for next time. + word.And(entropyInt, last11BitsMask) + entropyInt.Div(entropyInt, shift11BitsMask) + + // Get the bytes representing the 11 bits as a 2 byte slice. + wordBytes := padByteSlice(word.Bytes(), 2) + + // Convert bytes to an index and add that word to the list. + words[i] = wordList[binary.BigEndian.Uint16(wordBytes)] + } + + return strings.Join(words, " "), nil +} + +// MnemonicToByteArray takes a mnemonic string and turns it into a byte array +// suitable for creating another mnemonic. +// An error is returned if the mnemonic is invalid. +func MnemonicToByteArray(mnemonic string, raw ...bool) ([]byte, error) { + var ( + mnemonicSlice = strings.Split(mnemonic, " ") + entropyBitSize = len(mnemonicSlice) * 11 + checksumBitSize = entropyBitSize % 32 + fullByteSize = (entropyBitSize-checksumBitSize)/8 + 1 + checksumByteSize = fullByteSize - (fullByteSize % 4) + ) + + // Pre validate that the mnemonic is well formed and only contains words that + // are present in the word list. + if !IsMnemonicValid(mnemonic) { + return nil, ErrInvalidMnemonic + } + + // Convert word indices to a big.Int representing the entropy. + checksummedEntropy := big.NewInt(0) + modulo := big.NewInt(2048) + for _, v := range mnemonicSlice { + index := big.NewInt(int64(wordMap[v])) + checksummedEntropy.Mul(checksummedEntropy, modulo) + checksummedEntropy.Add(checksummedEntropy, index) + } + + // Calculate the unchecksummed entropy so we can validate that the checksum is + // correct. + checksumModulo := big.NewInt(0).Exp(bigTwo, big.NewInt(int64(checksumBitSize)), nil) + rawEntropy := big.NewInt(0).Div(checksummedEntropy, checksumModulo) + + // Convert big.Ints to byte padded byte slices. + rawEntropyBytes := padByteSlice(rawEntropy.Bytes(), checksumByteSize) + checksummedEntropyBytes := padByteSlice(checksummedEntropy.Bytes(), fullByteSize) + + // Validate that the checksum is correct. + newChecksummedEntropyBytes := padByteSlice(addChecksum(rawEntropyBytes), fullByteSize) + if !compareByteSlices(checksummedEntropyBytes, newChecksummedEntropyBytes) { + return nil, ErrChecksumIncorrect + } + + if len(raw) > 0 && raw[0] { + return rawEntropyBytes, nil + } + + return checksummedEntropyBytes, nil +} + +// NewSeedWithErrorChecking creates a hashed seed output given the mnemonic string and a password. +// An error is returned if the mnemonic is not convertible to a byte array. +func NewSeedWithErrorChecking(mnemonic string, password string) ([]byte, error) { + _, err := MnemonicToByteArray(mnemonic) + if err != nil { + return nil, err + } + return NewSeed(mnemonic, password), nil +} + +// NewSeed creates a hashed seed output given a provided string and password. +// No checking is performed to validate that the string provided is a valid mnemonic. +func NewSeed(mnemonic string, password string) []byte { + return pbkdf2.Key([]byte(mnemonic), []byte("mnemonic"+password), 2048, 64, sha512.New) +} + +// IsMnemonicValid attempts to verify that the provided mnemonic is valid. +// Validity is determined by both the number of words being appropriate, +// and that all the words in the mnemonic are present in the word list. +func IsMnemonicValid(mnemonic string) bool { + // Create a list of all the words in the mnemonic sentence + words := strings.Fields(mnemonic) + + // Get word count + wordCount := len(words) + + // The number of words should be 12, 15, 18, 21 or 24 + if wordCount%3 != 0 || wordCount < 12 || wordCount > 24 { + return false + } + + // Check if all words belong in the wordlist + for _, word := range words { + if _, ok := wordMap[word]; !ok { + return false + } + } + + return true +} + +// Appends to data the first (len(data) / 32)bits of the result of sha256(data) +// Currently only supports data up to 32 bytes +func addChecksum(data []byte) []byte { + // Get first byte of sha256 + hash := computeChecksum(data) + firstChecksumByte := hash[0] + + // len() is in bytes so we divide by 4 + checksumBitLength := uint(len(data) / 4) + + // For each bit of check sum we want we shift the data one the left + // and then set the (new) right most bit equal to checksum bit at that index + // staring from the left + dataBigInt := new(big.Int).SetBytes(data) + for i := uint(0); i < checksumBitLength; i++ { + // Bitshift 1 left + dataBigInt.Mul(dataBigInt, bigTwo) + + // Set rightmost bit if leftmost checksum bit is set + if uint8(firstChecksumByte&(1<<(7-i))) > 0 { + dataBigInt.Or(dataBigInt, bigOne) + } + } + + return dataBigInt.Bytes() +} + +func computeChecksum(data []byte) []byte { + hasher := sha256.New() + hasher.Write(data) + return hasher.Sum(nil) +} + +// validateEntropyBitSize ensures that entropy is the correct size for being a +// mnemonic. +func validateEntropyBitSize(bitSize int) error { + if (bitSize%32) != 0 || bitSize < 128 || bitSize > 256 { + return ErrEntropyLengthInvalid + } + return nil +} + +// padByteSlice returns a byte slice of the given size with contents of the +// given slice left padded and any empty spaces filled with 0's. +func padByteSlice(slice []byte, length int) []byte { + offset := length - len(slice) + if offset <= 0 { + return slice + } + newSlice := make([]byte, length) + copy(newSlice[offset:], slice) + return newSlice +} + +// compareByteSlices returns true of the byte slices have equal contents and +// returns false otherwise. +func compareByteSlices(a, b []byte) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +func splitMnemonicWords(mnemonic string) ([]string, bool) { + // Create a list of all the words in the mnemonic sentence + words := strings.Fields(mnemonic) + + // Get num of words + numOfWords := len(words) + + // The number of words should be 12, 15, 18, 21 or 24 + if numOfWords%3 != 0 || numOfWords < 12 || numOfWords > 24 { + return nil, false + } + return words, true +} diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_simplified.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_simplified.go new file mode 100644 index 000000000000..0ee29727045d --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_simplified.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/chinese_simplified.txt + // $ crc32 chinese_simplified.txt + // e3721bbf + checksum := crc32.ChecksumIEEE([]byte(chineseSimplified)) + if fmt.Sprintf("%x", checksum) != "e3721bbf" { + panic("chineseSimplified checksum invalid") + } +} + +// ChineseSimplified is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/chinese_simplified.txt +var ChineseSimplified = strings.Split(strings.TrimSpace(chineseSimplified), "\n") +var chineseSimplified = `的 +一 +是 +在 +不 +了 +有 +和 +人 +这 +中 +大 +为 +上 +个 +国 +我 +以 +要 +他 +时 +来 +用 +们 +生 +到 +作 +地 +于 +出 +就 +分 +对 +成 +会 +可 +主 +发 +年 +动 +同 +工 +也 +能 +下 +过 +子 +说 +产 +种 +面 +而 +方 +后 +多 +定 +行 +学 +法 +所 +民 +得 +经 +十 +三 +之 +进 +着 +等 +部 +度 +家 +电 +力 +里 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +现 +实 +加 +量 +都 +两 +体 +制 +机 +当 +使 +点 +从 +业 +本 +去 +把 +性 +好 +应 +开 +它 +合 +还 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +义 +事 +平 +形 +相 +全 +表 +间 +样 +与 +关 +各 +重 +新 +线 +内 +数 +正 +心 +反 +你 +明 +看 +原 +又 +么 +利 +比 +或 +但 +质 +气 +第 +向 +道 +命 +此 +变 +条 +只 +没 +结 +解 +问 +意 +建 +月 +公 +无 +系 +军 +很 +情 +者 +最 +立 +代 +想 +已 +通 +并 +提 +直 +题 +党 +程 +展 +五 +果 +料 +象 +员 +革 +位 +入 +常 +文 +总 +次 +品 +式 +活 +设 +及 +管 +特 +件 +长 +求 +老 +头 +基 +资 +边 +流 +路 +级 +少 +图 +山 +统 +接 +知 +较 +将 +组 +见 +计 +别 +她 +手 +角 +期 +根 +论 +运 +农 +指 +几 +九 +区 +强 +放 +决 +西 +被 +干 +做 +必 +战 +先 +回 +则 +任 +取 +据 +处 +队 +南 +给 +色 +光 +门 +即 +保 +治 +北 +造 +百 +规 +热 +领 +七 +海 +口 +东 +导 +器 +压 +志 +世 +金 +增 +争 +济 +阶 +油 +思 +术 +极 +交 +受 +联 +什 +认 +六 +共 +权 +收 +证 +改 +清 +美 +再 +采 +转 +更 +单 +风 +切 +打 +白 +教 +速 +花 +带 +安 +场 +身 +车 +例 +真 +务 +具 +万 +每 +目 +至 +达 +走 +积 +示 +议 +声 +报 +斗 +完 +类 +八 +离 +华 +名 +确 +才 +科 +张 +信 +马 +节 +话 +米 +整 +空 +元 +况 +今 +集 +温 +传 +土 +许 +步 +群 +广 +石 +记 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +观 +越 +织 +装 +影 +算 +低 +持 +音 +众 +书 +布 +复 +容 +儿 +须 +际 +商 +非 +验 +连 +断 +深 +难 +近 +矿 +千 +周 +委 +素 +技 +备 +半 +办 +青 +省 +列 +习 +响 +约 +支 +般 +史 +感 +劳 +便 +团 +往 +酸 +历 +市 +克 +何 +除 +消 +构 +府 +称 +太 +准 +精 +值 +号 +率 +族 +维 +划 +选 +标 +写 +存 +候 +毛 +亲 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +养 +易 +置 +派 +层 +片 +始 +却 +专 +状 +育 +厂 +京 +识 +适 +属 +圆 +包 +火 +住 +调 +满 +县 +局 +照 +参 +红 +细 +引 +听 +该 +铁 +价 +严 +首 +底 +液 +官 +德 +随 +病 +苏 +失 +尔 +死 +讲 +配 +女 +黄 +推 +显 +谈 +罪 +神 +艺 +呢 +席 +含 +企 +望 +密 +批 +营 +项 +防 +举 +球 +英 +氧 +势 +告 +李 +台 +落 +木 +帮 +轮 +破 +亚 +师 +围 +注 +远 +字 +材 +排 +供 +河 +态 +封 +另 +施 +减 +树 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +叶 +鱼 +波 +视 +仅 +费 +紧 +爱 +左 +章 +早 +朝 +害 +续 +轻 +服 +试 +食 +充 +兵 +源 +判 +护 +司 +足 +某 +练 +差 +致 +板 +田 +降 +黑 +犯 +负 +击 +范 +继 +兴 +似 +余 +坚 +曲 +输 +修 +故 +城 +夫 +够 +送 +笔 +船 +占 +右 +财 +吃 +富 +春 +职 +觉 +汉 +画 +功 +巴 +跟 +虽 +杂 +飞 +检 +吸 +助 +升 +阳 +互 +初 +创 +抗 +考 +投 +坏 +策 +古 +径 +换 +未 +跑 +留 +钢 +曾 +端 +责 +站 +简 +述 +钱 +副 +尽 +帝 +射 +草 +冲 +承 +独 +令 +限 +阿 +宣 +环 +双 +请 +超 +微 +让 +控 +州 +良 +轴 +找 +否 +纪 +益 +依 +优 +顶 +础 +载 +倒 +房 +突 +坐 +粉 +敌 +略 +客 +袁 +冷 +胜 +绝 +析 +块 +剂 +测 +丝 +协 +诉 +念 +陈 +仍 +罗 +盐 +友 +洋 +错 +苦 +夜 +刑 +移 +频 +逐 +靠 +混 +母 +短 +皮 +终 +聚 +汽 +村 +云 +哪 +既 +距 +卫 +停 +烈 +央 +察 +烧 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +游 +久 +菜 +味 +旧 +模 +湖 +货 +损 +预 +阻 +毫 +普 +稳 +乙 +妈 +植 +息 +扩 +银 +语 +挥 +酒 +守 +拿 +序 +纸 +医 +缺 +雨 +吗 +针 +刘 +啊 +急 +唱 +误 +训 +愿 +审 +附 +获 +茶 +鲜 +粮 +斤 +孩 +脱 +硫 +肥 +善 +龙 +演 +父 +渐 +血 +欢 +械 +掌 +歌 +沙 +刚 +攻 +谓 +盾 +讨 +晚 +粒 +乱 +燃 +矛 +乎 +杀 +药 +宁 +鲁 +贵 +钟 +煤 +读 +班 +伯 +香 +介 +迫 +句 +丰 +培 +握 +兰 +担 +弦 +蛋 +沉 +假 +穿 +执 +答 +乐 +谁 +顺 +烟 +缩 +征 +脸 +喜 +松 +脚 +困 +异 +免 +背 +星 +福 +买 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +静 +补 +评 +翻 +肉 +践 +尼 +衣 +宽 +扬 +棉 +希 +伤 +操 +垂 +秋 +宜 +氢 +套 +督 +振 +架 +亮 +末 +宪 +庆 +编 +牛 +触 +映 +雷 +销 +诗 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +绿 +晶 +厚 +盟 +衡 +鸡 +孙 +延 +危 +胶 +屋 +乡 +临 +陆 +顾 +掉 +呀 +灯 +岁 +措 +束 +耐 +剧 +玉 +赵 +跳 +哥 +季 +课 +凯 +胡 +额 +款 +绍 +卷 +齐 +伟 +蒸 +殖 +永 +宗 +苗 +川 +炉 +岩 +弱 +零 +杨 +奏 +沿 +露 +杆 +探 +滑 +镇 +饭 +浓 +航 +怀 +赶 +库 +夺 +伊 +灵 +税 +途 +灭 +赛 +归 +召 +鼓 +播 +盘 +裁 +险 +康 +唯 +录 +菌 +纯 +借 +糖 +盖 +横 +符 +私 +努 +堂 +域 +枪 +润 +幅 +哈 +竟 +熟 +虫 +泽 +脑 +壤 +碳 +欧 +遍 +侧 +寨 +敢 +彻 +虑 +斜 +薄 +庭 +纳 +弹 +饲 +伸 +折 +麦 +湿 +暗 +荷 +瓦 +塞 +床 +筑 +恶 +户 +访 +塔 +奇 +透 +梁 +刀 +旋 +迹 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +摆 +灰 +彩 +卖 +耗 +夏 +择 +忙 +铜 +献 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +阵 +阴 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +楼 +避 +谋 +吨 +野 +猪 +旗 +累 +偏 +典 +馆 +索 +秦 +脂 +潮 +爷 +豆 +忽 +托 +惊 +塑 +遗 +愈 +朱 +替 +纤 +粗 +倾 +尚 +痛 +楚 +谢 +奋 +购 +磨 +君 +池 +旁 +碎 +骨 +监 +捕 +弟 +暴 +割 +贯 +殊 +释 +词 +亡 +壁 +顿 +宝 +午 +尘 +闻 +揭 +炮 +残 +冬 +桥 +妇 +警 +综 +招 +吴 +付 +浮 +遭 +徐 +您 +摇 +谷 +赞 +箱 +隔 +订 +男 +吹 +园 +纷 +唐 +败 +宋 +玻 +巨 +耕 +坦 +荣 +闭 +湾 +键 +凡 +驻 +锅 +救 +恩 +剥 +凝 +碱 +齿 +截 +炼 +麻 +纺 +禁 +废 +盛 +版 +缓 +净 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +庄 +街 +藏 +姑 +贸 +腐 +奴 +啦 +惯 +乘 +伙 +恢 +匀 +纱 +扎 +辩 +耳 +彪 +臣 +亿 +璃 +抵 +脉 +秀 +萨 +俄 +网 +舞 +店 +喷 +纵 +寸 +汗 +挂 +洪 +贺 +闪 +柬 +爆 +烯 +津 +稻 +墙 +软 +勇 +像 +滚 +厘 +蒙 +芳 +肯 +坡 +柱 +荡 +腿 +仪 +旅 +尾 +轧 +冰 +贡 +登 +黎 +削 +钻 +勒 +逃 +障 +氨 +郭 +峰 +币 +港 +伏 +轨 +亩 +毕 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +岛 +甘 +泡 +睡 +童 +铸 +汤 +阀 +休 +汇 +舍 +牧 +绕 +炸 +哲 +磷 +绩 +朋 +淡 +尖 +启 +陷 +柴 +呈 +徒 +颜 +泪 +稍 +忘 +泵 +蓝 +拖 +洞 +授 +镜 +辛 +壮 +锋 +贫 +虚 +弯 +摩 +泰 +幼 +廷 +尊 +窗 +纲 +弄 +隶 +疑 +氏 +宫 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +违 +夹 +腰 +缘 +珠 +穷 +森 +枝 +竹 +沟 +催 +绳 +忆 +邦 +剩 +幸 +浆 +栏 +拥 +牙 +贮 +礼 +滤 +钠 +纹 +罢 +拍 +咱 +喊 +袖 +埃 +勤 +罚 +焦 +潜 +伍 +墨 +欲 +缝 +姓 +刊 +饱 +仿 +奖 +铝 +鬼 +丽 +跨 +默 +挖 +链 +扫 +喝 +袋 +炭 +污 +幕 +诸 +弧 +励 +梅 +奶 +洁 +灾 +舟 +鉴 +苯 +讼 +抱 +毁 +懂 +寒 +智 +埔 +寄 +届 +跃 +渡 +挑 +丹 +艰 +贝 +碰 +拔 +爹 +戴 +码 +梦 +芽 +熔 +赤 +渔 +哭 +敬 +颗 +奔 +铅 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +仓 +魏 +锐 +晓 +氮 +兼 +隐 +碍 +赫 +拨 +忠 +肃 +缸 +牵 +抢 +博 +巧 +壳 +兄 +杜 +讯 +诚 +碧 +祥 +柯 +页 +巡 +矩 +悲 +灌 +龄 +伦 +票 +寻 +桂 +铺 +圣 +恐 +恰 +郑 +趣 +抬 +荒 +腾 +贴 +柔 +滴 +猛 +阔 +辆 +妻 +填 +撤 +储 +签 +闹 +扰 +紫 +砂 +递 +戏 +吊 +陶 +伐 +喂 +疗 +瓶 +婆 +抚 +臂 +摸 +忍 +虾 +蜡 +邻 +胸 +巩 +挤 +偶 +弃 +槽 +劲 +乳 +邓 +吉 +仁 +烂 +砖 +租 +乌 +舰 +伴 +瓜 +浅 +丙 +暂 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +胆 +详 +簧 +踏 +瓷 +谱 +呆 +宾 +糊 +洛 +辉 +愤 +竞 +隙 +怒 +粘 +乃 +绪 +肩 +籍 +敏 +涂 +熙 +皆 +侦 +悬 +掘 +享 +纠 +醒 +狂 +锁 +淀 +恨 +牲 +霸 +爬 +赏 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鸭 +趋 +凤 +晨 +畜 +辈 +秩 +卵 +署 +梯 +炎 +滩 +棋 +驱 +筛 +峡 +冒 +啥 +寿 +译 +浸 +泉 +帽 +迟 +硅 +疆 +贷 +漏 +稿 +冠 +嫩 +胁 +芯 +牢 +叛 +蚀 +奥 +鸣 +岭 +羊 +凭 +串 +塘 +绘 +酵 +融 +盆 +锡 +庙 +筹 +冻 +辅 +摄 +袭 +筋 +拒 +僚 +旱 +钾 +鸟 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韩 +逼 +扭 +侨 +凉 +挺 +碗 +栽 +炒 +杯 +患 +馏 +劝 +豪 +辽 +勃 +鸿 +旦 +吏 +拜 +狗 +埋 +辊 +掩 +饮 +搬 +骂 +辞 +勾 +扣 +估 +蒋 +绒 +雾 +丈 +朵 +姆 +拟 +宇 +辑 +陕 +雕 +偿 +蓄 +崇 +剪 +倡 +厅 +咬 +驶 +薯 +刷 +斥 +番 +赋 +奉 +佛 +浇 +漫 +曼 +扇 +钙 +桃 +扶 +仔 +返 +俗 +亏 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +骗 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +胀 +谐 +抛 +霉 +桑 +岗 +嘛 +衰 +盗 +渗 +脏 +赖 +涌 +甜 +曹 +阅 +肌 +哩 +厉 +烃 +纬 +毅 +昨 +伪 +症 +煮 +叹 +钉 +搭 +茎 +笼 +酷 +偷 +弓 +锥 +恒 +杰 +坑 +鼻 +翼 +纶 +叙 +狱 +逮 +罐 +络 +棚 +抑 +膨 +蔬 +寺 +骤 +穆 +冶 +枯 +册 +尸 +凸 +绅 +坯 +牺 +焰 +轰 +欣 +晋 +瘦 +御 +锭 +锦 +丧 +旬 +锻 +垄 +搜 +扑 +邀 +亭 +酯 +迈 +舒 +脆 +酶 +闲 +忧 +酚 +顽 +羽 +涨 +卸 +仗 +陪 +辟 +惩 +杭 +姚 +肚 +捉 +飘 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +饰 +萧 +雅 +邮 +迁 +燕 +撒 +姻 +赴 +宴 +烦 +债 +帐 +斑 +铃 +旨 +醇 +董 +饼 +雏 +姿 +拌 +傅 +腹 +妥 +揉 +贤 +拆 +歪 +葡 +胺 +丢 +浩 +徽 +昂 +垫 +挡 +览 +贪 +慰 +缴 +汪 +慌 +冯 +诺 +姜 +谊 +凶 +劣 +诬 +耀 +昏 +躺 +盈 +骑 +乔 +溪 +丛 +卢 +抹 +闷 +咨 +刮 +驾 +缆 +悟 +摘 +铒 +掷 +颇 +幻 +柄 +惠 +惨 +佳 +仇 +腊 +窝 +涤 +剑 +瞧 +堡 +泼 +葱 +罩 +霍 +捞 +胎 +苍 +滨 +俩 +捅 +湘 +砍 +霞 +邵 +萄 +疯 +淮 +遂 +熊 +粪 +烘 +宿 +档 +戈 +驳 +嫂 +裕 +徙 +箭 +捐 +肠 +撑 +晒 +辨 +殿 +莲 +摊 +搅 +酱 +屏 +疫 +哀 +蔡 +堵 +沫 +皱 +畅 +叠 +阁 +莱 +敲 +辖 +钩 +痕 +坝 +巷 +饿 +祸 +丘 +玄 +溜 +曰 +逻 +彭 +尝 +卿 +妨 +艇 +吞 +韦 +怨 +矮 +歇 +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_traditional.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_traditional.go new file mode 100644 index 000000000000..83812cee5ff2 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/chinese_traditional.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/chinese_traditional.txt + // $ crc32 chinese_traditional.txt + // 3c20b443 + checksum := crc32.ChecksumIEEE([]byte(chineseTraditional)) + if fmt.Sprintf("%x", checksum) != "3c20b443" { + panic("chineseTraditional checksum invalid") + } +} + +// ChineseTraditional is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/chinese_traditional.txt +var ChineseTraditional = strings.Split(strings.TrimSpace(chineseTraditional), "\n") +var chineseTraditional = `的 +一 +是 +在 +不 +了 +有 +和 +人 +這 +中 +大 +為 +上 +個 +國 +我 +以 +要 +他 +時 +來 +用 +們 +生 +到 +作 +地 +於 +出 +就 +分 +對 +成 +會 +可 +主 +發 +年 +動 +同 +工 +也 +能 +下 +過 +子 +說 +產 +種 +面 +而 +方 +後 +多 +定 +行 +學 +法 +所 +民 +得 +經 +十 +三 +之 +進 +著 +等 +部 +度 +家 +電 +力 +裡 +如 +水 +化 +高 +自 +二 +理 +起 +小 +物 +現 +實 +加 +量 +都 +兩 +體 +制 +機 +當 +使 +點 +從 +業 +本 +去 +把 +性 +好 +應 +開 +它 +合 +還 +因 +由 +其 +些 +然 +前 +外 +天 +政 +四 +日 +那 +社 +義 +事 +平 +形 +相 +全 +表 +間 +樣 +與 +關 +各 +重 +新 +線 +內 +數 +正 +心 +反 +你 +明 +看 +原 +又 +麼 +利 +比 +或 +但 +質 +氣 +第 +向 +道 +命 +此 +變 +條 +只 +沒 +結 +解 +問 +意 +建 +月 +公 +無 +系 +軍 +很 +情 +者 +最 +立 +代 +想 +已 +通 +並 +提 +直 +題 +黨 +程 +展 +五 +果 +料 +象 +員 +革 +位 +入 +常 +文 +總 +次 +品 +式 +活 +設 +及 +管 +特 +件 +長 +求 +老 +頭 +基 +資 +邊 +流 +路 +級 +少 +圖 +山 +統 +接 +知 +較 +將 +組 +見 +計 +別 +她 +手 +角 +期 +根 +論 +運 +農 +指 +幾 +九 +區 +強 +放 +決 +西 +被 +幹 +做 +必 +戰 +先 +回 +則 +任 +取 +據 +處 +隊 +南 +給 +色 +光 +門 +即 +保 +治 +北 +造 +百 +規 +熱 +領 +七 +海 +口 +東 +導 +器 +壓 +志 +世 +金 +增 +爭 +濟 +階 +油 +思 +術 +極 +交 +受 +聯 +什 +認 +六 +共 +權 +收 +證 +改 +清 +美 +再 +採 +轉 +更 +單 +風 +切 +打 +白 +教 +速 +花 +帶 +安 +場 +身 +車 +例 +真 +務 +具 +萬 +每 +目 +至 +達 +走 +積 +示 +議 +聲 +報 +鬥 +完 +類 +八 +離 +華 +名 +確 +才 +科 +張 +信 +馬 +節 +話 +米 +整 +空 +元 +況 +今 +集 +溫 +傳 +土 +許 +步 +群 +廣 +石 +記 +需 +段 +研 +界 +拉 +林 +律 +叫 +且 +究 +觀 +越 +織 +裝 +影 +算 +低 +持 +音 +眾 +書 +布 +复 +容 +兒 +須 +際 +商 +非 +驗 +連 +斷 +深 +難 +近 +礦 +千 +週 +委 +素 +技 +備 +半 +辦 +青 +省 +列 +習 +響 +約 +支 +般 +史 +感 +勞 +便 +團 +往 +酸 +歷 +市 +克 +何 +除 +消 +構 +府 +稱 +太 +準 +精 +值 +號 +率 +族 +維 +劃 +選 +標 +寫 +存 +候 +毛 +親 +快 +效 +斯 +院 +查 +江 +型 +眼 +王 +按 +格 +養 +易 +置 +派 +層 +片 +始 +卻 +專 +狀 +育 +廠 +京 +識 +適 +屬 +圓 +包 +火 +住 +調 +滿 +縣 +局 +照 +參 +紅 +細 +引 +聽 +該 +鐵 +價 +嚴 +首 +底 +液 +官 +德 +隨 +病 +蘇 +失 +爾 +死 +講 +配 +女 +黃 +推 +顯 +談 +罪 +神 +藝 +呢 +席 +含 +企 +望 +密 +批 +營 +項 +防 +舉 +球 +英 +氧 +勢 +告 +李 +台 +落 +木 +幫 +輪 +破 +亞 +師 +圍 +注 +遠 +字 +材 +排 +供 +河 +態 +封 +另 +施 +減 +樹 +溶 +怎 +止 +案 +言 +士 +均 +武 +固 +葉 +魚 +波 +視 +僅 +費 +緊 +愛 +左 +章 +早 +朝 +害 +續 +輕 +服 +試 +食 +充 +兵 +源 +判 +護 +司 +足 +某 +練 +差 +致 +板 +田 +降 +黑 +犯 +負 +擊 +范 +繼 +興 +似 +餘 +堅 +曲 +輸 +修 +故 +城 +夫 +夠 +送 +筆 +船 +佔 +右 +財 +吃 +富 +春 +職 +覺 +漢 +畫 +功 +巴 +跟 +雖 +雜 +飛 +檢 +吸 +助 +昇 +陽 +互 +初 +創 +抗 +考 +投 +壞 +策 +古 +徑 +換 +未 +跑 +留 +鋼 +曾 +端 +責 +站 +簡 +述 +錢 +副 +盡 +帝 +射 +草 +衝 +承 +獨 +令 +限 +阿 +宣 +環 +雙 +請 +超 +微 +讓 +控 +州 +良 +軸 +找 +否 +紀 +益 +依 +優 +頂 +礎 +載 +倒 +房 +突 +坐 +粉 +敵 +略 +客 +袁 +冷 +勝 +絕 +析 +塊 +劑 +測 +絲 +協 +訴 +念 +陳 +仍 +羅 +鹽 +友 +洋 +錯 +苦 +夜 +刑 +移 +頻 +逐 +靠 +混 +母 +短 +皮 +終 +聚 +汽 +村 +雲 +哪 +既 +距 +衛 +停 +烈 +央 +察 +燒 +迅 +境 +若 +印 +洲 +刻 +括 +激 +孔 +搞 +甚 +室 +待 +核 +校 +散 +侵 +吧 +甲 +遊 +久 +菜 +味 +舊 +模 +湖 +貨 +損 +預 +阻 +毫 +普 +穩 +乙 +媽 +植 +息 +擴 +銀 +語 +揮 +酒 +守 +拿 +序 +紙 +醫 +缺 +雨 +嗎 +針 +劉 +啊 +急 +唱 +誤 +訓 +願 +審 +附 +獲 +茶 +鮮 +糧 +斤 +孩 +脫 +硫 +肥 +善 +龍 +演 +父 +漸 +血 +歡 +械 +掌 +歌 +沙 +剛 +攻 +謂 +盾 +討 +晚 +粒 +亂 +燃 +矛 +乎 +殺 +藥 +寧 +魯 +貴 +鐘 +煤 +讀 +班 +伯 +香 +介 +迫 +句 +豐 +培 +握 +蘭 +擔 +弦 +蛋 +沉 +假 +穿 +執 +答 +樂 +誰 +順 +煙 +縮 +徵 +臉 +喜 +松 +腳 +困 +異 +免 +背 +星 +福 +買 +染 +井 +概 +慢 +怕 +磁 +倍 +祖 +皇 +促 +靜 +補 +評 +翻 +肉 +踐 +尼 +衣 +寬 +揚 +棉 +希 +傷 +操 +垂 +秋 +宜 +氫 +套 +督 +振 +架 +亮 +末 +憲 +慶 +編 +牛 +觸 +映 +雷 +銷 +詩 +座 +居 +抓 +裂 +胞 +呼 +娘 +景 +威 +綠 +晶 +厚 +盟 +衡 +雞 +孫 +延 +危 +膠 +屋 +鄉 +臨 +陸 +顧 +掉 +呀 +燈 +歲 +措 +束 +耐 +劇 +玉 +趙 +跳 +哥 +季 +課 +凱 +胡 +額 +款 +紹 +卷 +齊 +偉 +蒸 +殖 +永 +宗 +苗 +川 +爐 +岩 +弱 +零 +楊 +奏 +沿 +露 +桿 +探 +滑 +鎮 +飯 +濃 +航 +懷 +趕 +庫 +奪 +伊 +靈 +稅 +途 +滅 +賽 +歸 +召 +鼓 +播 +盤 +裁 +險 +康 +唯 +錄 +菌 +純 +借 +糖 +蓋 +橫 +符 +私 +努 +堂 +域 +槍 +潤 +幅 +哈 +竟 +熟 +蟲 +澤 +腦 +壤 +碳 +歐 +遍 +側 +寨 +敢 +徹 +慮 +斜 +薄 +庭 +納 +彈 +飼 +伸 +折 +麥 +濕 +暗 +荷 +瓦 +塞 +床 +築 +惡 +戶 +訪 +塔 +奇 +透 +梁 +刀 +旋 +跡 +卡 +氯 +遇 +份 +毒 +泥 +退 +洗 +擺 +灰 +彩 +賣 +耗 +夏 +擇 +忙 +銅 +獻 +硬 +予 +繁 +圈 +雪 +函 +亦 +抽 +篇 +陣 +陰 +丁 +尺 +追 +堆 +雄 +迎 +泛 +爸 +樓 +避 +謀 +噸 +野 +豬 +旗 +累 +偏 +典 +館 +索 +秦 +脂 +潮 +爺 +豆 +忽 +托 +驚 +塑 +遺 +愈 +朱 +替 +纖 +粗 +傾 +尚 +痛 +楚 +謝 +奮 +購 +磨 +君 +池 +旁 +碎 +骨 +監 +捕 +弟 +暴 +割 +貫 +殊 +釋 +詞 +亡 +壁 +頓 +寶 +午 +塵 +聞 +揭 +炮 +殘 +冬 +橋 +婦 +警 +綜 +招 +吳 +付 +浮 +遭 +徐 +您 +搖 +谷 +贊 +箱 +隔 +訂 +男 +吹 +園 +紛 +唐 +敗 +宋 +玻 +巨 +耕 +坦 +榮 +閉 +灣 +鍵 +凡 +駐 +鍋 +救 +恩 +剝 +凝 +鹼 +齒 +截 +煉 +麻 +紡 +禁 +廢 +盛 +版 +緩 +淨 +睛 +昌 +婚 +涉 +筒 +嘴 +插 +岸 +朗 +莊 +街 +藏 +姑 +貿 +腐 +奴 +啦 +慣 +乘 +夥 +恢 +勻 +紗 +扎 +辯 +耳 +彪 +臣 +億 +璃 +抵 +脈 +秀 +薩 +俄 +網 +舞 +店 +噴 +縱 +寸 +汗 +掛 +洪 +賀 +閃 +柬 +爆 +烯 +津 +稻 +牆 +軟 +勇 +像 +滾 +厘 +蒙 +芳 +肯 +坡 +柱 +盪 +腿 +儀 +旅 +尾 +軋 +冰 +貢 +登 +黎 +削 +鑽 +勒 +逃 +障 +氨 +郭 +峰 +幣 +港 +伏 +軌 +畝 +畢 +擦 +莫 +刺 +浪 +秘 +援 +株 +健 +售 +股 +島 +甘 +泡 +睡 +童 +鑄 +湯 +閥 +休 +匯 +舍 +牧 +繞 +炸 +哲 +磷 +績 +朋 +淡 +尖 +啟 +陷 +柴 +呈 +徒 +顏 +淚 +稍 +忘 +泵 +藍 +拖 +洞 +授 +鏡 +辛 +壯 +鋒 +貧 +虛 +彎 +摩 +泰 +幼 +廷 +尊 +窗 +綱 +弄 +隸 +疑 +氏 +宮 +姐 +震 +瑞 +怪 +尤 +琴 +循 +描 +膜 +違 +夾 +腰 +緣 +珠 +窮 +森 +枝 +竹 +溝 +催 +繩 +憶 +邦 +剩 +幸 +漿 +欄 +擁 +牙 +貯 +禮 +濾 +鈉 +紋 +罷 +拍 +咱 +喊 +袖 +埃 +勤 +罰 +焦 +潛 +伍 +墨 +欲 +縫 +姓 +刊 +飽 +仿 +獎 +鋁 +鬼 +麗 +跨 +默 +挖 +鏈 +掃 +喝 +袋 +炭 +污 +幕 +諸 +弧 +勵 +梅 +奶 +潔 +災 +舟 +鑑 +苯 +訟 +抱 +毀 +懂 +寒 +智 +埔 +寄 +屆 +躍 +渡 +挑 +丹 +艱 +貝 +碰 +拔 +爹 +戴 +碼 +夢 +芽 +熔 +赤 +漁 +哭 +敬 +顆 +奔 +鉛 +仲 +虎 +稀 +妹 +乏 +珍 +申 +桌 +遵 +允 +隆 +螺 +倉 +魏 +銳 +曉 +氮 +兼 +隱 +礙 +赫 +撥 +忠 +肅 +缸 +牽 +搶 +博 +巧 +殼 +兄 +杜 +訊 +誠 +碧 +祥 +柯 +頁 +巡 +矩 +悲 +灌 +齡 +倫 +票 +尋 +桂 +鋪 +聖 +恐 +恰 +鄭 +趣 +抬 +荒 +騰 +貼 +柔 +滴 +猛 +闊 +輛 +妻 +填 +撤 +儲 +簽 +鬧 +擾 +紫 +砂 +遞 +戲 +吊 +陶 +伐 +餵 +療 +瓶 +婆 +撫 +臂 +摸 +忍 +蝦 +蠟 +鄰 +胸 +鞏 +擠 +偶 +棄 +槽 +勁 +乳 +鄧 +吉 +仁 +爛 +磚 +租 +烏 +艦 +伴 +瓜 +淺 +丙 +暫 +燥 +橡 +柳 +迷 +暖 +牌 +秧 +膽 +詳 +簧 +踏 +瓷 +譜 +呆 +賓 +糊 +洛 +輝 +憤 +競 +隙 +怒 +粘 +乃 +緒 +肩 +籍 +敏 +塗 +熙 +皆 +偵 +懸 +掘 +享 +糾 +醒 +狂 +鎖 +淀 +恨 +牲 +霸 +爬 +賞 +逆 +玩 +陵 +祝 +秒 +浙 +貌 +役 +彼 +悉 +鴨 +趨 +鳳 +晨 +畜 +輩 +秩 +卵 +署 +梯 +炎 +灘 +棋 +驅 +篩 +峽 +冒 +啥 +壽 +譯 +浸 +泉 +帽 +遲 +矽 +疆 +貸 +漏 +稿 +冠 +嫩 +脅 +芯 +牢 +叛 +蝕 +奧 +鳴 +嶺 +羊 +憑 +串 +塘 +繪 +酵 +融 +盆 +錫 +廟 +籌 +凍 +輔 +攝 +襲 +筋 +拒 +僚 +旱 +鉀 +鳥 +漆 +沈 +眉 +疏 +添 +棒 +穗 +硝 +韓 +逼 +扭 +僑 +涼 +挺 +碗 +栽 +炒 +杯 +患 +餾 +勸 +豪 +遼 +勃 +鴻 +旦 +吏 +拜 +狗 +埋 +輥 +掩 +飲 +搬 +罵 +辭 +勾 +扣 +估 +蔣 +絨 +霧 +丈 +朵 +姆 +擬 +宇 +輯 +陝 +雕 +償 +蓄 +崇 +剪 +倡 +廳 +咬 +駛 +薯 +刷 +斥 +番 +賦 +奉 +佛 +澆 +漫 +曼 +扇 +鈣 +桃 +扶 +仔 +返 +俗 +虧 +腔 +鞋 +棱 +覆 +框 +悄 +叔 +撞 +騙 +勘 +旺 +沸 +孤 +吐 +孟 +渠 +屈 +疾 +妙 +惜 +仰 +狠 +脹 +諧 +拋 +黴 +桑 +崗 +嘛 +衰 +盜 +滲 +臟 +賴 +湧 +甜 +曹 +閱 +肌 +哩 +厲 +烴 +緯 +毅 +昨 +偽 +症 +煮 +嘆 +釘 +搭 +莖 +籠 +酷 +偷 +弓 +錐 +恆 +傑 +坑 +鼻 +翼 +綸 +敘 +獄 +逮 +罐 +絡 +棚 +抑 +膨 +蔬 +寺 +驟 +穆 +冶 +枯 +冊 +屍 +凸 +紳 +坯 +犧 +焰 +轟 +欣 +晉 +瘦 +禦 +錠 +錦 +喪 +旬 +鍛 +壟 +搜 +撲 +邀 +亭 +酯 +邁 +舒 +脆 +酶 +閒 +憂 +酚 +頑 +羽 +漲 +卸 +仗 +陪 +闢 +懲 +杭 +姚 +肚 +捉 +飄 +漂 +昆 +欺 +吾 +郎 +烷 +汁 +呵 +飾 +蕭 +雅 +郵 +遷 +燕 +撒 +姻 +赴 +宴 +煩 +債 +帳 +斑 +鈴 +旨 +醇 +董 +餅 +雛 +姿 +拌 +傅 +腹 +妥 +揉 +賢 +拆 +歪 +葡 +胺 +丟 +浩 +徽 +昂 +墊 +擋 +覽 +貪 +慰 +繳 +汪 +慌 +馮 +諾 +姜 +誼 +兇 +劣 +誣 +耀 +昏 +躺 +盈 +騎 +喬 +溪 +叢 +盧 +抹 +悶 +諮 +刮 +駕 +纜 +悟 +摘 +鉺 +擲 +頗 +幻 +柄 +惠 +慘 +佳 +仇 +臘 +窩 +滌 +劍 +瞧 +堡 +潑 +蔥 +罩 +霍 +撈 +胎 +蒼 +濱 +倆 +捅 +湘 +砍 +霞 +邵 +萄 +瘋 +淮 +遂 +熊 +糞 +烘 +宿 +檔 +戈 +駁 +嫂 +裕 +徙 +箭 +捐 +腸 +撐 +曬 +辨 +殿 +蓮 +攤 +攪 +醬 +屏 +疫 +哀 +蔡 +堵 +沫 +皺 +暢 +疊 +閣 +萊 +敲 +轄 +鉤 +痕 +壩 +巷 +餓 +禍 +丘 +玄 +溜 +曰 +邏 +彭 +嘗 +卿 +妨 +艇 +吞 +韋 +怨 +矮 +歇 +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/english.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/english.go new file mode 100644 index 000000000000..f69e8a473645 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/english.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt + // $ crc32 english.txt + // c1dbd296 + checksum := crc32.ChecksumIEEE([]byte(english)) + if fmt.Sprintf("%x", checksum) != "c1dbd296" { + panic("english checksum invalid") + } +} + +// English is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt +var English = strings.Split(strings.TrimSpace(english), "\n") +var english = `abandon +ability +able +about +above +absent +absorb +abstract +absurd +abuse +access +accident +account +accuse +achieve +acid +acoustic +acquire +across +act +action +actor +actress +actual +adapt +add +addict +address +adjust +admit +adult +advance +advice +aerobic +affair +afford +afraid +again +age +agent +agree +ahead +aim +air +airport +aisle +alarm +album +alcohol +alert +alien +all +alley +allow +almost +alone +alpha +already +also +alter +always +amateur +amazing +among +amount +amused +analyst +anchor +ancient +anger +angle +angry +animal +ankle +announce +annual +another +answer +antenna +antique +anxiety +any +apart +apology +appear +apple +approve +april +arch +arctic +area +arena +argue +arm +armed +armor +army +around +arrange +arrest +arrive +arrow +art +artefact +artist +artwork +ask +aspect +assault +asset +assist +assume +asthma +athlete +atom +attack +attend +attitude +attract +auction +audit +august +aunt +author +auto +autumn +average +avocado +avoid +awake +aware +away +awesome +awful +awkward +axis +baby +bachelor +bacon +badge +bag +balance +balcony +ball +bamboo +banana +banner +bar +barely +bargain +barrel +base +basic +basket +battle +beach +bean +beauty +because +become +beef +before +begin +behave +behind +believe +below +belt +bench +benefit +best +betray +better +between +beyond +bicycle +bid +bike +bind +biology +bird +birth +bitter +black +blade +blame +blanket +blast +bleak +bless +blind +blood +blossom +blouse +blue +blur +blush +board +boat +body +boil +bomb +bone +bonus +book +boost +border +boring +borrow +boss +bottom +bounce +box +boy +bracket +brain +brand +brass +brave +bread +breeze +brick +bridge +brief +bright +bring +brisk +broccoli +broken +bronze +broom +brother +brown +brush +bubble +buddy +budget +buffalo +build +bulb +bulk +bullet +bundle +bunker +burden +burger +burst +bus +business +busy +butter +buyer +buzz +cabbage +cabin +cable +cactus +cage +cake +call +calm +camera +camp +can +canal +cancel +candy +cannon +canoe +canvas +canyon +capable +capital +captain +car +carbon +card +cargo +carpet +carry +cart +case +cash +casino +castle +casual +cat +catalog +catch +category +cattle +caught +cause +caution +cave +ceiling +celery +cement +census +century +cereal +certain +chair +chalk +champion +change +chaos +chapter +charge +chase +chat +cheap +check +cheese +chef +cherry +chest +chicken +chief +child +chimney +choice +choose +chronic +chuckle +chunk +churn +cigar +cinnamon +circle +citizen +city +civil +claim +clap +clarify +claw +clay +clean +clerk +clever +click +client +cliff +climb +clinic +clip +clock +clog +close +cloth +cloud +clown +club +clump +cluster +clutch +coach +coast +coconut +code +coffee +coil +coin +collect +color +column +combine +come +comfort +comic +common +company +concert +conduct +confirm +congress +connect +consider +control +convince +cook +cool +copper +copy +coral +core +corn +correct +cost +cotton +couch +country +couple +course +cousin +cover +coyote +crack +cradle +craft +cram +crane +crash +crater +crawl +crazy +cream +credit +creek +crew +cricket +crime +crisp +critic +crop +cross +crouch +crowd +crucial +cruel +cruise +crumble +crunch +crush +cry +crystal +cube +culture +cup +cupboard +curious +current +curtain +curve +cushion +custom +cute +cycle +dad +damage +damp +dance +danger +daring +dash +daughter +dawn +day +deal +debate +debris +decade +december +decide +decline +decorate +decrease +deer +defense +define +defy +degree +delay +deliver +demand +demise +denial +dentist +deny +depart +depend +deposit +depth +deputy +derive +describe +desert +design +desk +despair +destroy +detail +detect +develop +device +devote +diagram +dial +diamond +diary +dice +diesel +diet +differ +digital +dignity +dilemma +dinner +dinosaur +direct +dirt +disagree +discover +disease +dish +dismiss +disorder +display +distance +divert +divide +divorce +dizzy +doctor +document +dog +doll +dolphin +domain +donate +donkey +donor +door +dose +double +dove +draft +dragon +drama +drastic +draw +dream +dress +drift +drill +drink +drip +drive +drop +drum +dry +duck +dumb +dune +during +dust +dutch +duty +dwarf +dynamic +eager +eagle +early +earn +earth +easily +east +easy +echo +ecology +economy +edge +edit +educate +effort +egg +eight +either +elbow +elder +electric +elegant +element +elephant +elevator +elite +else +embark +embody +embrace +emerge +emotion +employ +empower +empty +enable +enact +end +endless +endorse +enemy +energy +enforce +engage +engine +enhance +enjoy +enlist +enough +enrich +enroll +ensure +enter +entire +entry +envelope +episode +equal +equip +era +erase +erode +erosion +error +erupt +escape +essay +essence +estate +eternal +ethics +evidence +evil +evoke +evolve +exact +example +excess +exchange +excite +exclude +excuse +execute +exercise +exhaust +exhibit +exile +exist +exit +exotic +expand +expect +expire +explain +expose +express +extend +extra +eye +eyebrow +fabric +face +faculty +fade +faint +faith +fall +false +fame +family +famous +fan +fancy +fantasy +farm +fashion +fat +fatal +father +fatigue +fault +favorite +feature +february +federal +fee +feed +feel +female +fence +festival +fetch +fever +few +fiber +fiction +field +figure +file +film +filter +final +find +fine +finger +finish +fire +firm +first +fiscal +fish +fit +fitness +fix +flag +flame +flash +flat +flavor +flee +flight +flip +float +flock +floor +flower +fluid +flush +fly +foam +focus +fog +foil +fold +follow +food +foot +force +forest +forget +fork +fortune +forum +forward +fossil +foster +found +fox +fragile +frame +frequent +fresh +friend +fringe +frog +front +frost +frown +frozen +fruit +fuel +fun +funny +furnace +fury +future +gadget +gain +galaxy +gallery +game +gap +garage +garbage +garden +garlic +garment +gas +gasp +gate +gather +gauge +gaze +general +genius +genre +gentle +genuine +gesture +ghost +giant +gift +giggle +ginger +giraffe +girl +give +glad +glance +glare +glass +glide +glimpse +globe +gloom +glory +glove +glow +glue +goat +goddess +gold +good +goose +gorilla +gospel +gossip +govern +gown +grab +grace +grain +grant +grape +grass +gravity +great +green +grid +grief +grit +grocery +group +grow +grunt +guard +guess +guide +guilt +guitar +gun +gym +habit +hair +half +hammer +hamster +hand +happy +harbor +hard +harsh +harvest +hat +have +hawk +hazard +head +health +heart +heavy +hedgehog +height +hello +helmet +help +hen +hero +hidden +high +hill +hint +hip +hire +history +hobby +hockey +hold +hole +holiday +hollow +home +honey +hood +hope +horn +horror +horse +hospital +host +hotel +hour +hover +hub +huge +human +humble +humor +hundred +hungry +hunt +hurdle +hurry +hurt +husband +hybrid +ice +icon +idea +identify +idle +ignore +ill +illegal +illness +image +imitate +immense +immune +impact +impose +improve +impulse +inch +include +income +increase +index +indicate +indoor +industry +infant +inflict +inform +inhale +inherit +initial +inject +injury +inmate +inner +innocent +input +inquiry +insane +insect +inside +inspire +install +intact +interest +into +invest +invite +involve +iron +island +isolate +issue +item +ivory +jacket +jaguar +jar +jazz +jealous +jeans +jelly +jewel +job +join +joke +journey +joy +judge +juice +jump +jungle +junior +junk +just +kangaroo +keen +keep +ketchup +key +kick +kid +kidney +kind +kingdom +kiss +kit +kitchen +kite +kitten +kiwi +knee +knife +knock +know +lab +label +labor +ladder +lady +lake +lamp +language +laptop +large +later +latin +laugh +laundry +lava +law +lawn +lawsuit +layer +lazy +leader +leaf +learn +leave +lecture +left +leg +legal +legend +leisure +lemon +lend +length +lens +leopard +lesson +letter +level +liar +liberty +library +license +life +lift +light +like +limb +limit +link +lion +liquid +list +little +live +lizard +load +loan +lobster +local +lock +logic +lonely +long +loop +lottery +loud +lounge +love +loyal +lucky +luggage +lumber +lunar +lunch +luxury +lyrics +machine +mad +magic +magnet +maid +mail +main +major +make +mammal +man +manage +mandate +mango +mansion +manual +maple +marble +march +margin +marine +market +marriage +mask +mass +master +match +material +math +matrix +matter +maximum +maze +meadow +mean +measure +meat +mechanic +medal +media +melody +melt +member +memory +mention +menu +mercy +merge +merit +merry +mesh +message +metal +method +middle +midnight +milk +million +mimic +mind +minimum +minor +minute +miracle +mirror +misery +miss +mistake +mix +mixed +mixture +mobile +model +modify +mom +moment +monitor +monkey +monster +month +moon +moral +more +morning +mosquito +mother +motion +motor +mountain +mouse +move +movie +much +muffin +mule +multiply +muscle +museum +mushroom +music +must +mutual +myself +mystery +myth +naive +name +napkin +narrow +nasty +nation +nature +near +neck +need +negative +neglect +neither +nephew +nerve +nest +net +network +neutral +never +news +next +nice +night +noble +noise +nominee +noodle +normal +north +nose +notable +note +nothing +notice +novel +now +nuclear +number +nurse +nut +oak +obey +object +oblige +obscure +observe +obtain +obvious +occur +ocean +october +odor +off +offer +office +often +oil +okay +old +olive +olympic +omit +once +one +onion +online +only +open +opera +opinion +oppose +option +orange +orbit +orchard +order +ordinary +organ +orient +original +orphan +ostrich +other +outdoor +outer +output +outside +oval +oven +over +own +owner +oxygen +oyster +ozone +pact +paddle +page +pair +palace +palm +panda +panel +panic +panther +paper +parade +parent +park +parrot +party +pass +patch +path +patient +patrol +pattern +pause +pave +payment +peace +peanut +pear +peasant +pelican +pen +penalty +pencil +people +pepper +perfect +permit +person +pet +phone +photo +phrase +physical +piano +picnic +picture +piece +pig +pigeon +pill +pilot +pink +pioneer +pipe +pistol +pitch +pizza +place +planet +plastic +plate +play +please +pledge +pluck +plug +plunge +poem +poet +point +polar +pole +police +pond +pony +pool +popular +portion +position +possible +post +potato +pottery +poverty +powder +power +practice +praise +predict +prefer +prepare +present +pretty +prevent +price +pride +primary +print +priority +prison +private +prize +problem +process +produce +profit +program +project +promote +proof +property +prosper +protect +proud +provide +public +pudding +pull +pulp +pulse +pumpkin +punch +pupil +puppy +purchase +purity +purpose +purse +push +put +puzzle +pyramid +quality +quantum +quarter +question +quick +quit +quiz +quote +rabbit +raccoon +race +rack +radar +radio +rail +rain +raise +rally +ramp +ranch +random +range +rapid +rare +rate +rather +raven +raw +razor +ready +real +reason +rebel +rebuild +recall +receive +recipe +record +recycle +reduce +reflect +reform +refuse +region +regret +regular +reject +relax +release +relief +rely +remain +remember +remind +remove +render +renew +rent +reopen +repair +repeat +replace +report +require +rescue +resemble +resist +resource +response +result +retire +retreat +return +reunion +reveal +review +reward +rhythm +rib +ribbon +rice +rich +ride +ridge +rifle +right +rigid +ring +riot +ripple +risk +ritual +rival +river +road +roast +robot +robust +rocket +romance +roof +rookie +room +rose +rotate +rough +round +route +royal +rubber +rude +rug +rule +run +runway +rural +sad +saddle +sadness +safe +sail +salad +salmon +salon +salt +salute +same +sample +sand +satisfy +satoshi +sauce +sausage +save +say +scale +scan +scare +scatter +scene +scheme +school +science +scissors +scorpion +scout +scrap +screen +script +scrub +sea +search +season +seat +second +secret +section +security +seed +seek +segment +select +sell +seminar +senior +sense +sentence +series +service +session +settle +setup +seven +shadow +shaft +shallow +share +shed +shell +sheriff +shield +shift +shine +ship +shiver +shock +shoe +shoot +shop +short +shoulder +shove +shrimp +shrug +shuffle +shy +sibling +sick +side +siege +sight +sign +silent +silk +silly +silver +similar +simple +since +sing +siren +sister +situate +six +size +skate +sketch +ski +skill +skin +skirt +skull +slab +slam +sleep +slender +slice +slide +slight +slim +slogan +slot +slow +slush +small +smart +smile +smoke +smooth +snack +snake +snap +sniff +snow +soap +soccer +social +sock +soda +soft +solar +soldier +solid +solution +solve +someone +song +soon +sorry +sort +soul +sound +soup +source +south +space +spare +spatial +spawn +speak +special +speed +spell +spend +sphere +spice +spider +spike +spin +spirit +split +spoil +sponsor +spoon +sport +spot +spray +spread +spring +spy +square +squeeze +squirrel +stable +stadium +staff +stage +stairs +stamp +stand +start +state +stay +steak +steel +stem +step +stereo +stick +still +sting +stock +stomach +stone +stool +story +stove +strategy +street +strike +strong +struggle +student +stuff +stumble +style +subject +submit +subway +success +such +sudden +suffer +sugar +suggest +suit +summer +sun +sunny +sunset +super +supply +supreme +sure +surface +surge +surprise +surround +survey +suspect +sustain +swallow +swamp +swap +swarm +swear +sweet +swift +swim +swing +switch +sword +symbol +symptom +syrup +system +table +tackle +tag +tail +talent +talk +tank +tape +target +task +taste +tattoo +taxi +teach +team +tell +ten +tenant +tennis +tent +term +test +text +thank +that +theme +then +theory +there +they +thing +this +thought +three +thrive +throw +thumb +thunder +ticket +tide +tiger +tilt +timber +time +tiny +tip +tired +tissue +title +toast +tobacco +today +toddler +toe +together +toilet +token +tomato +tomorrow +tone +tongue +tonight +tool +tooth +top +topic +topple +torch +tornado +tortoise +toss +total +tourist +toward +tower +town +toy +track +trade +traffic +tragic +train +transfer +trap +trash +travel +tray +treat +tree +trend +trial +tribe +trick +trigger +trim +trip +trophy +trouble +truck +true +truly +trumpet +trust +truth +try +tube +tuition +tumble +tuna +tunnel +turkey +turn +turtle +twelve +twenty +twice +twin +twist +two +type +typical +ugly +umbrella +unable +unaware +uncle +uncover +under +undo +unfair +unfold +unhappy +uniform +unique +unit +universe +unknown +unlock +until +unusual +unveil +update +upgrade +uphold +upon +upper +upset +urban +urge +usage +use +used +useful +useless +usual +utility +vacant +vacuum +vague +valid +valley +valve +van +vanish +vapor +various +vast +vault +vehicle +velvet +vendor +venture +venue +verb +verify +version +very +vessel +veteran +viable +vibrant +vicious +victory +video +view +village +vintage +violin +virtual +virus +visa +visit +visual +vital +vivid +vocal +voice +void +volcano +volume +vote +voyage +wage +wagon +wait +walk +wall +walnut +want +warfare +warm +warrior +wash +wasp +waste +water +wave +way +wealth +weapon +wear +weasel +weather +web +wedding +weekend +weird +welcome +west +wet +whale +what +wheat +wheel +when +where +whip +whisper +wide +width +wife +wild +will +win +window +wine +wing +wink +winner +winter +wire +wisdom +wise +wish +witness +wolf +woman +wonder +wood +wool +word +work +world +worry +worth +wrap +wreck +wrestle +wrist +write +wrong +yard +year +yellow +you +young +youth +zebra +zero +zone +zoo +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/french.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/french.go new file mode 100644 index 000000000000..1ae685d3ad61 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/french.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/french.txt + // $ crc32 french.txt + // 3e56b216 + checksum := crc32.ChecksumIEEE([]byte(french)) + if fmt.Sprintf("%x", checksum) != "3e56b216" { + panic("french checksum invalid") + } +} + +// French is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/french.txt +var French = strings.Split(strings.TrimSpace(french), "\n") +var french = `abaisser +abandon +abdiquer +abeille +abolir +aborder +aboutir +aboyer +abrasif +abreuver +abriter +abroger +abrupt +absence +absolu +absurde +abusif +abyssal +académie +acajou +acarien +accabler +accepter +acclamer +accolade +accroche +accuser +acerbe +achat +acheter +aciduler +acier +acompte +acquérir +acronyme +acteur +actif +actuel +adepte +adéquat +adhésif +adjectif +adjuger +admettre +admirer +adopter +adorer +adoucir +adresse +adroit +adulte +adverbe +aérer +aéronef +affaire +affecter +affiche +affreux +affubler +agacer +agencer +agile +agiter +agrafer +agréable +agrume +aider +aiguille +ailier +aimable +aisance +ajouter +ajuster +alarmer +alchimie +alerte +algèbre +algue +aliéner +aliment +alléger +alliage +allouer +allumer +alourdir +alpaga +altesse +alvéole +amateur +ambigu +ambre +aménager +amertume +amidon +amiral +amorcer +amour +amovible +amphibie +ampleur +amusant +analyse +anaphore +anarchie +anatomie +ancien +anéantir +angle +angoisse +anguleux +animal +annexer +annonce +annuel +anodin +anomalie +anonyme +anormal +antenne +antidote +anxieux +apaiser +apéritif +aplanir +apologie +appareil +appeler +apporter +appuyer +aquarium +aqueduc +arbitre +arbuste +ardeur +ardoise +argent +arlequin +armature +armement +armoire +armure +arpenter +arracher +arriver +arroser +arsenic +artériel +article +aspect +asphalte +aspirer +assaut +asservir +assiette +associer +assurer +asticot +astre +astuce +atelier +atome +atrium +atroce +attaque +attentif +attirer +attraper +aubaine +auberge +audace +audible +augurer +aurore +automne +autruche +avaler +avancer +avarice +avenir +averse +aveugle +aviateur +avide +avion +aviser +avoine +avouer +avril +axial +axiome +badge +bafouer +bagage +baguette +baignade +balancer +balcon +baleine +balisage +bambin +bancaire +bandage +banlieue +bannière +banquier +barbier +baril +baron +barque +barrage +bassin +bastion +bataille +bateau +batterie +baudrier +bavarder +belette +bélier +belote +bénéfice +berceau +berger +berline +bermuda +besace +besogne +bétail +beurre +biberon +bicycle +bidule +bijou +bilan +bilingue +billard +binaire +biologie +biopsie +biotype +biscuit +bison +bistouri +bitume +bizarre +blafard +blague +blanchir +blessant +blinder +blond +bloquer +blouson +bobard +bobine +boire +boiser +bolide +bonbon +bondir +bonheur +bonifier +bonus +bordure +borne +botte +boucle +boueux +bougie +boulon +bouquin +bourse +boussole +boutique +boxeur +branche +brasier +brave +brebis +brèche +breuvage +bricoler +brigade +brillant +brioche +brique +brochure +broder +bronzer +brousse +broyeur +brume +brusque +brutal +bruyant +buffle +buisson +bulletin +bureau +burin +bustier +butiner +butoir +buvable +buvette +cabanon +cabine +cachette +cadeau +cadre +caféine +caillou +caisson +calculer +calepin +calibre +calmer +calomnie +calvaire +camarade +caméra +camion +campagne +canal +caneton +canon +cantine +canular +capable +caporal +caprice +capsule +capter +capuche +carabine +carbone +caresser +caribou +carnage +carotte +carreau +carton +cascade +casier +casque +cassure +causer +caution +cavalier +caverne +caviar +cédille +ceinture +céleste +cellule +cendrier +censurer +central +cercle +cérébral +cerise +cerner +cerveau +cesser +chagrin +chaise +chaleur +chambre +chance +chapitre +charbon +chasseur +chaton +chausson +chavirer +chemise +chenille +chéquier +chercher +cheval +chien +chiffre +chignon +chimère +chiot +chlorure +chocolat +choisir +chose +chouette +chrome +chute +cigare +cigogne +cimenter +cinéma +cintrer +circuler +cirer +cirque +citerne +citoyen +citron +civil +clairon +clameur +claquer +classe +clavier +client +cligner +climat +clivage +cloche +clonage +cloporte +cobalt +cobra +cocasse +cocotier +coder +codifier +coffre +cogner +cohésion +coiffer +coincer +colère +colibri +colline +colmater +colonel +combat +comédie +commande +compact +concert +conduire +confier +congeler +connoter +consonne +contact +convexe +copain +copie +corail +corbeau +cordage +corniche +corpus +correct +cortège +cosmique +costume +coton +coude +coupure +courage +couteau +couvrir +coyote +crabe +crainte +cravate +crayon +créature +créditer +crémeux +creuser +crevette +cribler +crier +cristal +critère +croire +croquer +crotale +crucial +cruel +crypter +cubique +cueillir +cuillère +cuisine +cuivre +culminer +cultiver +cumuler +cupide +curatif +curseur +cyanure +cycle +cylindre +cynique +daigner +damier +danger +danseur +dauphin +débattre +débiter +déborder +débrider +débutant +décaler +décembre +déchirer +décider +déclarer +décorer +décrire +décupler +dédale +déductif +déesse +défensif +défiler +défrayer +dégager +dégivrer +déglutir +dégrafer +déjeuner +délice +déloger +demander +demeurer +démolir +dénicher +dénouer +dentelle +dénuder +départ +dépenser +déphaser +déplacer +déposer +déranger +dérober +désastre +descente +désert +désigner +désobéir +dessiner +destrier +détacher +détester +détourer +détresse +devancer +devenir +deviner +devoir +diable +dialogue +diamant +dicter +différer +digérer +digital +digne +diluer +dimanche +diminuer +dioxyde +directif +diriger +discuter +disposer +dissiper +distance +divertir +diviser +docile +docteur +dogme +doigt +domaine +domicile +dompter +donateur +donjon +donner +dopamine +dortoir +dorure +dosage +doseur +dossier +dotation +douanier +double +douceur +douter +doyen +dragon +draper +dresser +dribbler +droiture +duperie +duplexe +durable +durcir +dynastie +éblouir +écarter +écharpe +échelle +éclairer +éclipse +éclore +écluse +école +économie +écorce +écouter +écraser +écrémer +écrivain +écrou +écume +écureuil +édifier +éduquer +effacer +effectif +effigie +effort +effrayer +effusion +égaliser +égarer +éjecter +élaborer +élargir +électron +élégant +éléphant +élève +éligible +élitisme +éloge +élucider +éluder +emballer +embellir +embryon +émeraude +émission +emmener +émotion +émouvoir +empereur +employer +emporter +emprise +émulsion +encadrer +enchère +enclave +encoche +endiguer +endosser +endroit +enduire +énergie +enfance +enfermer +enfouir +engager +engin +englober +énigme +enjamber +enjeu +enlever +ennemi +ennuyeux +enrichir +enrobage +enseigne +entasser +entendre +entier +entourer +entraver +énumérer +envahir +enviable +envoyer +enzyme +éolien +épaissir +épargne +épatant +épaule +épicerie +épidémie +épier +épilogue +épine +épisode +épitaphe +époque +épreuve +éprouver +épuisant +équerre +équipe +ériger +érosion +erreur +éruption +escalier +espadon +espèce +espiègle +espoir +esprit +esquiver +essayer +essence +essieu +essorer +estime +estomac +estrade +étagère +étaler +étanche +étatique +éteindre +étendoir +éternel +éthanol +éthique +ethnie +étirer +étoffer +étoile +étonnant +étourdir +étrange +étroit +étude +euphorie +évaluer +évasion +éventail +évidence +éviter +évolutif +évoquer +exact +exagérer +exaucer +exceller +excitant +exclusif +excuse +exécuter +exemple +exercer +exhaler +exhorter +exigence +exiler +exister +exotique +expédier +explorer +exposer +exprimer +exquis +extensif +extraire +exulter +fable +fabuleux +facette +facile +facture +faiblir +falaise +fameux +famille +farceur +farfelu +farine +farouche +fasciner +fatal +fatigue +faucon +fautif +faveur +favori +fébrile +féconder +fédérer +félin +femme +fémur +fendoir +féodal +fermer +féroce +ferveur +festival +feuille +feutre +février +fiasco +ficeler +fictif +fidèle +figure +filature +filetage +filière +filleul +filmer +filou +filtrer +financer +finir +fiole +firme +fissure +fixer +flairer +flamme +flasque +flatteur +fléau +flèche +fleur +flexion +flocon +flore +fluctuer +fluide +fluvial +folie +fonderie +fongible +fontaine +forcer +forgeron +formuler +fortune +fossile +foudre +fougère +fouiller +foulure +fourmi +fragile +fraise +franchir +frapper +frayeur +frégate +freiner +frelon +frémir +frénésie +frère +friable +friction +frisson +frivole +froid +fromage +frontal +frotter +fruit +fugitif +fuite +fureur +furieux +furtif +fusion +futur +gagner +galaxie +galerie +gambader +garantir +gardien +garnir +garrigue +gazelle +gazon +géant +gélatine +gélule +gendarme +général +génie +genou +gentil +géologie +géomètre +géranium +germe +gestuel +geyser +gibier +gicler +girafe +givre +glace +glaive +glisser +globe +gloire +glorieux +golfeur +gomme +gonfler +gorge +gorille +goudron +gouffre +goulot +goupille +gourmand +goutte +graduel +graffiti +graine +grand +grappin +gratuit +gravir +grenat +griffure +griller +grimper +grogner +gronder +grotte +groupe +gruger +grutier +gruyère +guépard +guerrier +guide +guimauve +guitare +gustatif +gymnaste +gyrostat +habitude +hachoir +halte +hameau +hangar +hanneton +haricot +harmonie +harpon +hasard +hélium +hématome +herbe +hérisson +hermine +héron +hésiter +heureux +hiberner +hibou +hilarant +histoire +hiver +homard +hommage +homogène +honneur +honorer +honteux +horde +horizon +horloge +hormone +horrible +houleux +housse +hublot +huileux +humain +humble +humide +humour +hurler +hydromel +hygiène +hymne +hypnose +idylle +ignorer +iguane +illicite +illusion +image +imbiber +imiter +immense +immobile +immuable +impact +impérial +implorer +imposer +imprimer +imputer +incarner +incendie +incident +incliner +incolore +indexer +indice +inductif +inédit +ineptie +inexact +infini +infliger +informer +infusion +ingérer +inhaler +inhiber +injecter +injure +innocent +inoculer +inonder +inscrire +insecte +insigne +insolite +inspirer +instinct +insulter +intact +intense +intime +intrigue +intuitif +inutile +invasion +inventer +inviter +invoquer +ironique +irradier +irréel +irriter +isoler +ivoire +ivresse +jaguar +jaillir +jambe +janvier +jardin +jauger +jaune +javelot +jetable +jeton +jeudi +jeunesse +joindre +joncher +jongler +joueur +jouissif +journal +jovial +joyau +joyeux +jubiler +jugement +junior +jupon +juriste +justice +juteux +juvénile +kayak +kimono +kiosque +label +labial +labourer +lacérer +lactose +lagune +laine +laisser +laitier +lambeau +lamelle +lampe +lanceur +langage +lanterne +lapin +largeur +larme +laurier +lavabo +lavoir +lecture +légal +léger +légume +lessive +lettre +levier +lexique +lézard +liasse +libérer +libre +licence +licorne +liège +lièvre +ligature +ligoter +ligue +limer +limite +limonade +limpide +linéaire +lingot +lionceau +liquide +lisière +lister +lithium +litige +littoral +livreur +logique +lointain +loisir +lombric +loterie +louer +lourd +loutre +louve +loyal +lubie +lucide +lucratif +lueur +lugubre +luisant +lumière +lunaire +lundi +luron +lutter +luxueux +machine +magasin +magenta +magique +maigre +maillon +maintien +mairie +maison +majorer +malaxer +maléfice +malheur +malice +mallette +mammouth +mandater +maniable +manquant +manteau +manuel +marathon +marbre +marchand +mardi +maritime +marqueur +marron +marteler +mascotte +massif +matériel +matière +matraque +maudire +maussade +mauve +maximal +méchant +méconnu +médaille +médecin +méditer +méduse +meilleur +mélange +mélodie +membre +mémoire +menacer +mener +menhir +mensonge +mentor +mercredi +mérite +merle +messager +mesure +métal +météore +méthode +métier +meuble +miauler +microbe +miette +mignon +migrer +milieu +million +mimique +mince +minéral +minimal +minorer +minute +miracle +miroiter +missile +mixte +mobile +moderne +moelleux +mondial +moniteur +monnaie +monotone +monstre +montagne +monument +moqueur +morceau +morsure +mortier +moteur +motif +mouche +moufle +moulin +mousson +mouton +mouvant +multiple +munition +muraille +murène +murmure +muscle +muséum +musicien +mutation +muter +mutuel +myriade +myrtille +mystère +mythique +nageur +nappe +narquois +narrer +natation +nation +nature +naufrage +nautique +navire +nébuleux +nectar +néfaste +négation +négliger +négocier +neige +nerveux +nettoyer +neurone +neutron +neveu +niche +nickel +nitrate +niveau +noble +nocif +nocturne +noirceur +noisette +nomade +nombreux +nommer +normatif +notable +notifier +notoire +nourrir +nouveau +novateur +novembre +novice +nuage +nuancer +nuire +nuisible +numéro +nuptial +nuque +nutritif +obéir +objectif +obliger +obscur +observer +obstacle +obtenir +obturer +occasion +occuper +océan +octobre +octroyer +octupler +oculaire +odeur +odorant +offenser +officier +offrir +ogive +oiseau +oisillon +olfactif +olivier +ombrage +omettre +onctueux +onduler +onéreux +onirique +opale +opaque +opérer +opinion +opportun +opprimer +opter +optique +orageux +orange +orbite +ordonner +oreille +organe +orgueil +orifice +ornement +orque +ortie +osciller +osmose +ossature +otarie +ouragan +ourson +outil +outrager +ouvrage +ovation +oxyde +oxygène +ozone +paisible +palace +palmarès +palourde +palper +panache +panda +pangolin +paniquer +panneau +panorama +pantalon +papaye +papier +papoter +papyrus +paradoxe +parcelle +paresse +parfumer +parler +parole +parrain +parsemer +partager +parure +parvenir +passion +pastèque +paternel +patience +patron +pavillon +pavoiser +payer +paysage +peigne +peintre +pelage +pélican +pelle +pelouse +peluche +pendule +pénétrer +pénible +pensif +pénurie +pépite +péplum +perdrix +perforer +période +permuter +perplexe +persil +perte +peser +pétale +petit +pétrir +peuple +pharaon +phobie +phoque +photon +phrase +physique +piano +pictural +pièce +pierre +pieuvre +pilote +pinceau +pipette +piquer +pirogue +piscine +piston +pivoter +pixel +pizza +placard +plafond +plaisir +planer +plaque +plastron +plateau +pleurer +plexus +pliage +plomb +plonger +pluie +plumage +pochette +poésie +poète +pointe +poirier +poisson +poivre +polaire +policier +pollen +polygone +pommade +pompier +ponctuel +pondérer +poney +portique +position +posséder +posture +potager +poteau +potion +pouce +poulain +poumon +pourpre +poussin +pouvoir +prairie +pratique +précieux +prédire +préfixe +prélude +prénom +présence +prétexte +prévoir +primitif +prince +prison +priver +problème +procéder +prodige +profond +progrès +proie +projeter +prologue +promener +propre +prospère +protéger +prouesse +proverbe +prudence +pruneau +psychose +public +puceron +puiser +pulpe +pulsar +punaise +punitif +pupitre +purifier +puzzle +pyramide +quasar +querelle +question +quiétude +quitter +quotient +racine +raconter +radieux +ragondin +raideur +raisin +ralentir +rallonge +ramasser +rapide +rasage +ratisser +ravager +ravin +rayonner +réactif +réagir +réaliser +réanimer +recevoir +réciter +réclamer +récolter +recruter +reculer +recycler +rédiger +redouter +refaire +réflexe +réformer +refrain +refuge +régalien +région +réglage +régulier +réitérer +rejeter +rejouer +relatif +relever +relief +remarque +remède +remise +remonter +remplir +remuer +renard +renfort +renifler +renoncer +rentrer +renvoi +replier +reporter +reprise +reptile +requin +réserve +résineux +résoudre +respect +rester +résultat +rétablir +retenir +réticule +retomber +retracer +réunion +réussir +revanche +revivre +révolte +révulsif +richesse +rideau +rieur +rigide +rigoler +rincer +riposter +risible +risque +rituel +rival +rivière +rocheux +romance +rompre +ronce +rondin +roseau +rosier +rotatif +rotor +rotule +rouge +rouille +rouleau +routine +royaume +ruban +rubis +ruche +ruelle +rugueux +ruiner +ruisseau +ruser +rustique +rythme +sabler +saboter +sabre +sacoche +safari +sagesse +saisir +salade +salive +salon +saluer +samedi +sanction +sanglier +sarcasme +sardine +saturer +saugrenu +saumon +sauter +sauvage +savant +savonner +scalpel +scandale +scélérat +scénario +sceptre +schéma +science +scinder +score +scrutin +sculpter +séance +sécable +sécher +secouer +sécréter +sédatif +séduire +seigneur +séjour +sélectif +semaine +sembler +semence +séminal +sénateur +sensible +sentence +séparer +séquence +serein +sergent +sérieux +serrure +sérum +service +sésame +sévir +sevrage +sextuple +sidéral +siècle +siéger +siffler +sigle +signal +silence +silicium +simple +sincère +sinistre +siphon +sirop +sismique +situer +skier +social +socle +sodium +soigneux +soldat +soleil +solitude +soluble +sombre +sommeil +somnoler +sonde +songeur +sonnette +sonore +sorcier +sortir +sosie +sottise +soucieux +soudure +souffle +soulever +soupape +source +soutirer +souvenir +spacieux +spatial +spécial +sphère +spiral +stable +station +sternum +stimulus +stipuler +strict +studieux +stupeur +styliste +sublime +substrat +subtil +subvenir +succès +sucre +suffixe +suggérer +suiveur +sulfate +superbe +supplier +surface +suricate +surmener +surprise +sursaut +survie +suspect +syllabe +symbole +symétrie +synapse +syntaxe +système +tabac +tablier +tactile +tailler +talent +talisman +talonner +tambour +tamiser +tangible +tapis +taquiner +tarder +tarif +tartine +tasse +tatami +tatouage +taupe +taureau +taxer +témoin +temporel +tenaille +tendre +teneur +tenir +tension +terminer +terne +terrible +tétine +texte +thème +théorie +thérapie +thorax +tibia +tiède +timide +tirelire +tiroir +tissu +titane +titre +tituber +toboggan +tolérant +tomate +tonique +tonneau +toponyme +torche +tordre +tornade +torpille +torrent +torse +tortue +totem +toucher +tournage +tousser +toxine +traction +trafic +tragique +trahir +train +trancher +travail +trèfle +tremper +trésor +treuil +triage +tribunal +tricoter +trilogie +triomphe +tripler +triturer +trivial +trombone +tronc +tropical +troupeau +tuile +tulipe +tumulte +tunnel +turbine +tuteur +tutoyer +tuyau +tympan +typhon +typique +tyran +ubuesque +ultime +ultrason +unanime +unifier +union +unique +unitaire +univers +uranium +urbain +urticant +usage +usine +usuel +usure +utile +utopie +vacarme +vaccin +vagabond +vague +vaillant +vaincre +vaisseau +valable +valise +vallon +valve +vampire +vanille +vapeur +varier +vaseux +vassal +vaste +vecteur +vedette +végétal +véhicule +veinard +véloce +vendredi +vénérer +venger +venimeux +ventouse +verdure +vérin +vernir +verrou +verser +vertu +veston +vétéran +vétuste +vexant +vexer +viaduc +viande +victoire +vidange +vidéo +vignette +vigueur +vilain +village +vinaigre +violon +vipère +virement +virtuose +virus +visage +viseur +vision +visqueux +visuel +vital +vitesse +viticole +vitrine +vivace +vivipare +vocation +voguer +voile +voisin +voiture +volaille +volcan +voltiger +volume +vorace +vortex +voter +vouloir +voyage +voyelle +wagon +xénon +yacht +zèbre +zénith +zeste +zoologie +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/italian.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/italian.go new file mode 100644 index 000000000000..32cd2cf6d8e8 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/italian.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/italian.txt + // $ crc32 italian.txt + // 2fc7d07e + checksum := crc32.ChecksumIEEE([]byte(italian)) + if fmt.Sprintf("%x", checksum) != "2fc7d07e" { + panic("italian checksum invalid") + } +} + +// Italian is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/italian.txt +var Italian = strings.Split(strings.TrimSpace(italian), "\n") +var italian = `abaco +abbaglio +abbinato +abete +abisso +abolire +abrasivo +abrogato +accadere +accenno +accusato +acetone +achille +acido +acqua +acre +acrilico +acrobata +acuto +adagio +addebito +addome +adeguato +aderire +adipe +adottare +adulare +affabile +affetto +affisso +affranto +aforisma +afoso +africano +agave +agente +agevole +aggancio +agire +agitare +agonismo +agricolo +agrumeto +aguzzo +alabarda +alato +albatro +alberato +albo +albume +alce +alcolico +alettone +alfa +algebra +aliante +alibi +alimento +allagato +allegro +allievo +allodola +allusivo +almeno +alogeno +alpaca +alpestre +altalena +alterno +alticcio +altrove +alunno +alveolo +alzare +amalgama +amanita +amarena +ambito +ambrato +ameba +america +ametista +amico +ammasso +ammenda +ammirare +ammonito +amore +ampio +ampliare +amuleto +anacardo +anagrafe +analista +anarchia +anatra +anca +ancella +ancora +andare +andrea +anello +angelo +angolare +angusto +anima +annegare +annidato +anno +annuncio +anonimo +anticipo +anzi +apatico +apertura +apode +apparire +appetito +appoggio +approdo +appunto +aprile +arabica +arachide +aragosta +araldica +arancio +aratura +arazzo +arbitro +archivio +ardito +arenile +argento +argine +arguto +aria +armonia +arnese +arredato +arringa +arrosto +arsenico +arso +artefice +arzillo +asciutto +ascolto +asepsi +asettico +asfalto +asino +asola +aspirato +aspro +assaggio +asse +assoluto +assurdo +asta +astenuto +astice +astratto +atavico +ateismo +atomico +atono +attesa +attivare +attorno +attrito +attuale +ausilio +austria +autista +autonomo +autunno +avanzato +avere +avvenire +avviso +avvolgere +azione +azoto +azzimo +azzurro +babele +baccano +bacino +baco +badessa +badilata +bagnato +baita +balcone +baldo +balena +ballata +balzano +bambino +bandire +baraonda +barbaro +barca +baritono +barlume +barocco +basilico +basso +batosta +battuto +baule +bava +bavosa +becco +beffa +belgio +belva +benda +benevole +benigno +benzina +bere +berlina +beta +bibita +bici +bidone +bifido +biga +bilancia +bimbo +binocolo +biologo +bipede +bipolare +birbante +birra +biscotto +bisesto +bisnonno +bisonte +bisturi +bizzarro +blando +blatta +bollito +bonifico +bordo +bosco +botanico +bottino +bozzolo +braccio +bradipo +brama +branca +bravura +bretella +brevetto +brezza +briglia +brillante +brindare +broccolo +brodo +bronzina +brullo +bruno +bubbone +buca +budino +buffone +buio +bulbo +buono +burlone +burrasca +bussola +busta +cadetto +caduco +calamaro +calcolo +calesse +calibro +calmo +caloria +cambusa +camerata +camicia +cammino +camola +campale +canapa +candela +cane +canino +canotto +cantina +capace +capello +capitolo +capogiro +cappero +capra +capsula +carapace +carcassa +cardo +carisma +carovana +carretto +cartolina +casaccio +cascata +caserma +caso +cassone +castello +casuale +catasta +catena +catrame +cauto +cavillo +cedibile +cedrata +cefalo +celebre +cellulare +cena +cenone +centesimo +ceramica +cercare +certo +cerume +cervello +cesoia +cespo +ceto +chela +chiaro +chicca +chiedere +chimera +china +chirurgo +chitarra +ciao +ciclismo +cifrare +cigno +cilindro +ciottolo +circa +cirrosi +citrico +cittadino +ciuffo +civetta +civile +classico +clinica +cloro +cocco +codardo +codice +coerente +cognome +collare +colmato +colore +colposo +coltivato +colza +coma +cometa +commando +comodo +computer +comune +conciso +condurre +conferma +congelare +coniuge +connesso +conoscere +consumo +continuo +convegno +coperto +copione +coppia +copricapo +corazza +cordata +coricato +cornice +corolla +corpo +corredo +corsia +cortese +cosmico +costante +cottura +covato +cratere +cravatta +creato +credere +cremoso +crescita +creta +criceto +crinale +crisi +critico +croce +cronaca +crostata +cruciale +crusca +cucire +cuculo +cugino +cullato +cupola +curatore +cursore +curvo +cuscino +custode +dado +daino +dalmata +damerino +daniela +dannoso +danzare +datato +davanti +davvero +debutto +decennio +deciso +declino +decollo +decreto +dedicato +definito +deforme +degno +delegare +delfino +delirio +delta +demenza +denotato +dentro +deposito +derapata +derivare +deroga +descritto +deserto +desiderio +desumere +detersivo +devoto +diametro +dicembre +diedro +difeso +diffuso +digerire +digitale +diluvio +dinamico +dinnanzi +dipinto +diploma +dipolo +diradare +dire +dirotto +dirupo +disagio +discreto +disfare +disgelo +disposto +distanza +disumano +dito +divano +divelto +dividere +divorato +doblone +docente +doganale +dogma +dolce +domato +domenica +dominare +dondolo +dono +dormire +dote +dottore +dovuto +dozzina +drago +druido +dubbio +dubitare +ducale +duna +duomo +duplice +duraturo +ebano +eccesso +ecco +eclissi +economia +edera +edicola +edile +editoria +educare +egemonia +egli +egoismo +egregio +elaborato +elargire +elegante +elencato +eletto +elevare +elfico +elica +elmo +elsa +eluso +emanato +emblema +emesso +emiro +emotivo +emozione +empirico +emulo +endemico +enduro +energia +enfasi +enoteca +entrare +enzima +epatite +epilogo +episodio +epocale +eppure +equatore +erario +erba +erboso +erede +eremita +erigere +ermetico +eroe +erosivo +errante +esagono +esame +esanime +esaudire +esca +esempio +esercito +esibito +esigente +esistere +esito +esofago +esortato +esoso +espanso +espresso +essenza +esso +esteso +estimare +estonia +estroso +esultare +etilico +etnico +etrusco +etto +euclideo +europa +evaso +evidenza +evitato +evoluto +evviva +fabbrica +faccenda +fachiro +falco +famiglia +fanale +fanfara +fango +fantasma +fare +farfalla +farinoso +farmaco +fascia +fastoso +fasullo +faticare +fato +favoloso +febbre +fecola +fede +fegato +felpa +feltro +femmina +fendere +fenomeno +fermento +ferro +fertile +fessura +festivo +fetta +feudo +fiaba +fiducia +fifa +figurato +filo +finanza +finestra +finire +fiore +fiscale +fisico +fiume +flacone +flamenco +flebo +flemma +florido +fluente +fluoro +fobico +focaccia +focoso +foderato +foglio +folata +folclore +folgore +fondente +fonetico +fonia +fontana +forbito +forchetta +foresta +formica +fornaio +foro +fortezza +forzare +fosfato +fosso +fracasso +frana +frassino +fratello +freccetta +frenata +fresco +frigo +frollino +fronde +frugale +frutta +fucilata +fucsia +fuggente +fulmine +fulvo +fumante +fumetto +fumoso +fune +funzione +fuoco +furbo +furgone +furore +fuso +futile +gabbiano +gaffe +galateo +gallina +galoppo +gambero +gamma +garanzia +garbo +garofano +garzone +gasdotto +gasolio +gastrico +gatto +gaudio +gazebo +gazzella +geco +gelatina +gelso +gemello +gemmato +gene +genitore +gennaio +genotipo +gergo +ghepardo +ghiaccio +ghisa +giallo +gilda +ginepro +giocare +gioiello +giorno +giove +girato +girone +gittata +giudizio +giurato +giusto +globulo +glutine +gnomo +gobba +golf +gomito +gommone +gonfio +gonna +governo +gracile +grado +grafico +grammo +grande +grattare +gravoso +grazia +greca +gregge +grifone +grigio +grinza +grotta +gruppo +guadagno +guaio +guanto +guardare +gufo +guidare +ibernato +icona +identico +idillio +idolo +idra +idrico +idrogeno +igiene +ignaro +ignorato +ilare +illeso +illogico +illudere +imballo +imbevuto +imbocco +imbuto +immane +immerso +immolato +impacco +impeto +impiego +importo +impronta +inalare +inarcare +inattivo +incanto +incendio +inchino +incisivo +incluso +incontro +incrocio +incubo +indagine +india +indole +inedito +infatti +infilare +inflitto +ingaggio +ingegno +inglese +ingordo +ingrosso +innesco +inodore +inoltrare +inondato +insano +insetto +insieme +insonnia +insulina +intasato +intero +intonaco +intuito +inumidire +invalido +invece +invito +iperbole +ipnotico +ipotesi +ippica +iride +irlanda +ironico +irrigato +irrorare +isolato +isotopo +isterico +istituto +istrice +italia +iterare +labbro +labirinto +lacca +lacerato +lacrima +lacuna +laddove +lago +lampo +lancetta +lanterna +lardoso +larga +laringe +lastra +latenza +latino +lattuga +lavagna +lavoro +legale +leggero +lembo +lentezza +lenza +leone +lepre +lesivo +lessato +lesto +letterale +leva +levigato +libero +lido +lievito +lilla +limatura +limitare +limpido +lineare +lingua +liquido +lira +lirica +lisca +lite +litigio +livrea +locanda +lode +logica +lombare +londra +longevo +loquace +lorenzo +loto +lotteria +luce +lucidato +lumaca +luminoso +lungo +lupo +luppolo +lusinga +lusso +lutto +macabro +macchina +macero +macinato +madama +magico +maglia +magnete +magro +maiolica +malafede +malgrado +malinteso +malsano +malto +malumore +mana +mancia +mandorla +mangiare +manifesto +mannaro +manovra +mansarda +mantide +manubrio +mappa +maratona +marcire +maretta +marmo +marsupio +maschera +massaia +mastino +materasso +matricola +mattone +maturo +mazurca +meandro +meccanico +mecenate +medesimo +meditare +mega +melassa +melis +melodia +meninge +meno +mensola +mercurio +merenda +merlo +meschino +mese +messere +mestolo +metallo +metodo +mettere +miagolare +mica +micelio +michele +microbo +midollo +miele +migliore +milano +milite +mimosa +minerale +mini +minore +mirino +mirtillo +miscela +missiva +misto +misurare +mitezza +mitigare +mitra +mittente +mnemonico +modello +modifica +modulo +mogano +mogio +mole +molosso +monastero +monco +mondina +monetario +monile +monotono +monsone +montato +monviso +mora +mordere +morsicato +mostro +motivato +motosega +motto +movenza +movimento +mozzo +mucca +mucosa +muffa +mughetto +mugnaio +mulatto +mulinello +multiplo +mummia +munto +muovere +murale +musa +muscolo +musica +mutevole +muto +nababbo +nafta +nanometro +narciso +narice +narrato +nascere +nastrare +naturale +nautica +naviglio +nebulosa +necrosi +negativo +negozio +nemmeno +neofita +neretto +nervo +nessuno +nettuno +neutrale +neve +nevrotico +nicchia +ninfa +nitido +nobile +nocivo +nodo +nome +nomina +nordico +normale +norvegese +nostrano +notare +notizia +notturno +novella +nucleo +nulla +numero +nuovo +nutrire +nuvola +nuziale +oasi +obbedire +obbligo +obelisco +oblio +obolo +obsoleto +occasione +occhio +occidente +occorrere +occultare +ocra +oculato +odierno +odorare +offerta +offrire +offuscato +oggetto +oggi +ognuno +olandese +olfatto +oliato +oliva +ologramma +oltre +omaggio +ombelico +ombra +omega +omissione +ondoso +onere +onice +onnivoro +onorevole +onta +operato +opinione +opposto +oracolo +orafo +ordine +orecchino +orefice +orfano +organico +origine +orizzonte +orma +ormeggio +ornativo +orologio +orrendo +orribile +ortensia +ortica +orzata +orzo +osare +oscurare +osmosi +ospedale +ospite +ossa +ossidare +ostacolo +oste +otite +otre +ottagono +ottimo +ottobre +ovale +ovest +ovino +oviparo +ovocito +ovunque +ovviare +ozio +pacchetto +pace +pacifico +padella +padrone +paese +paga +pagina +palazzina +palesare +pallido +palo +palude +pandoro +pannello +paolo +paonazzo +paprica +parabola +parcella +parere +pargolo +pari +parlato +parola +partire +parvenza +parziale +passivo +pasticca +patacca +patologia +pattume +pavone +peccato +pedalare +pedonale +peggio +peloso +penare +pendice +penisola +pennuto +penombra +pensare +pentola +pepe +pepita +perbene +percorso +perdonato +perforare +pergamena +periodo +permesso +perno +perplesso +persuaso +pertugio +pervaso +pesatore +pesista +peso +pestifero +petalo +pettine +petulante +pezzo +piacere +pianta +piattino +piccino +picozza +piega +pietra +piffero +pigiama +pigolio +pigro +pila +pilifero +pillola +pilota +pimpante +pineta +pinna +pinolo +pioggia +piombo +piramide +piretico +pirite +pirolisi +pitone +pizzico +placebo +planare +plasma +platano +plenario +pochezza +poderoso +podismo +poesia +poggiare +polenta +poligono +pollice +polmonite +polpetta +polso +poltrona +polvere +pomice +pomodoro +ponte +popoloso +porfido +poroso +porpora +porre +portata +posa +positivo +possesso +postulato +potassio +potere +pranzo +prassi +pratica +precluso +predica +prefisso +pregiato +prelievo +premere +prenotare +preparato +presenza +pretesto +prevalso +prima +principe +privato +problema +procura +produrre +profumo +progetto +prolunga +promessa +pronome +proposta +proroga +proteso +prova +prudente +prugna +prurito +psiche +pubblico +pudica +pugilato +pugno +pulce +pulito +pulsante +puntare +pupazzo +pupilla +puro +quadro +qualcosa +quasi +querela +quota +raccolto +raddoppio +radicale +radunato +raffica +ragazzo +ragione +ragno +ramarro +ramingo +ramo +randagio +rantolare +rapato +rapina +rappreso +rasatura +raschiato +rasente +rassegna +rastrello +rata +ravveduto +reale +recepire +recinto +recluta +recondito +recupero +reddito +redimere +regalato +registro +regola +regresso +relazione +remare +remoto +renna +replica +reprimere +reputare +resa +residente +responso +restauro +rete +retina +retorica +rettifica +revocato +riassunto +ribadire +ribelle +ribrezzo +ricarica +ricco +ricevere +riciclato +ricordo +ricreduto +ridicolo +ridurre +rifasare +riflesso +riforma +rifugio +rigare +rigettato +righello +rilassato +rilevato +rimanere +rimbalzo +rimedio +rimorchio +rinascita +rincaro +rinforzo +rinnovo +rinomato +rinsavito +rintocco +rinuncia +rinvenire +riparato +ripetuto +ripieno +riportare +ripresa +ripulire +risata +rischio +riserva +risibile +riso +rispetto +ristoro +risultato +risvolto +ritardo +ritegno +ritmico +ritrovo +riunione +riva +riverso +rivincita +rivolto +rizoma +roba +robotico +robusto +roccia +roco +rodaggio +rodere +roditore +rogito +rollio +romantico +rompere +ronzio +rosolare +rospo +rotante +rotondo +rotula +rovescio +rubizzo +rubrica +ruga +rullino +rumine +rumoroso +ruolo +rupe +russare +rustico +sabato +sabbiare +sabotato +sagoma +salasso +saldatura +salgemma +salivare +salmone +salone +saltare +saluto +salvo +sapere +sapido +saporito +saraceno +sarcasmo +sarto +sassoso +satellite +satira +satollo +saturno +savana +savio +saziato +sbadiglio +sbalzo +sbancato +sbarra +sbattere +sbavare +sbendare +sbirciare +sbloccato +sbocciato +sbrinare +sbruffone +sbuffare +scabroso +scadenza +scala +scambiare +scandalo +scapola +scarso +scatenare +scavato +scelto +scenico +scettro +scheda +schiena +sciarpa +scienza +scindere +scippo +sciroppo +scivolo +sclerare +scodella +scolpito +scomparto +sconforto +scoprire +scorta +scossone +scozzese +scriba +scrollare +scrutinio +scuderia +scultore +scuola +scuro +scusare +sdebitare +sdoganare +seccatura +secondo +sedano +seggiola +segnalato +segregato +seguito +selciato +selettivo +sella +selvaggio +semaforo +sembrare +seme +seminato +sempre +senso +sentire +sepolto +sequenza +serata +serbato +sereno +serio +serpente +serraglio +servire +sestina +setola +settimana +sfacelo +sfaldare +sfamato +sfarzoso +sfaticato +sfera +sfida +sfilato +sfinge +sfocato +sfoderare +sfogo +sfoltire +sforzato +sfratto +sfruttato +sfuggito +sfumare +sfuso +sgabello +sgarbato +sgonfiare +sgorbio +sgrassato +sguardo +sibilo +siccome +sierra +sigla +signore +silenzio +sillaba +simbolo +simpatico +simulato +sinfonia +singolo +sinistro +sino +sintesi +sinusoide +sipario +sisma +sistole +situato +slitta +slogatura +sloveno +smarrito +smemorato +smentito +smeraldo +smilzo +smontare +smottato +smussato +snellire +snervato +snodo +sobbalzo +sobrio +soccorso +sociale +sodale +soffitto +sogno +soldato +solenne +solido +sollazzo +solo +solubile +solvente +somatico +somma +sonda +sonetto +sonnifero +sopire +soppeso +sopra +sorgere +sorpasso +sorriso +sorso +sorteggio +sorvolato +sospiro +sosta +sottile +spada +spalla +spargere +spatola +spavento +spazzola +specie +spedire +spegnere +spelatura +speranza +spessore +spettrale +spezzato +spia +spigoloso +spillato +spinoso +spirale +splendido +sportivo +sposo +spranga +sprecare +spronato +spruzzo +spuntino +squillo +sradicare +srotolato +stabile +stacco +staffa +stagnare +stampato +stantio +starnuto +stasera +statuto +stelo +steppa +sterzo +stiletto +stima +stirpe +stivale +stizzoso +stonato +storico +strappo +stregato +stridulo +strozzare +strutto +stuccare +stufo +stupendo +subentro +succoso +sudore +suggerito +sugo +sultano +suonare +superbo +supporto +surgelato +surrogato +sussurro +sutura +svagare +svedese +sveglio +svelare +svenuto +svezia +sviluppo +svista +svizzera +svolta +svuotare +tabacco +tabulato +tacciare +taciturno +tale +talismano +tampone +tannino +tara +tardivo +targato +tariffa +tarpare +tartaruga +tasto +tattico +taverna +tavolata +tazza +teca +tecnico +telefono +temerario +tempo +temuto +tendone +tenero +tensione +tentacolo +teorema +terme +terrazzo +terzetto +tesi +tesserato +testato +tetro +tettoia +tifare +tigella +timbro +tinto +tipico +tipografo +tiraggio +tiro +titanio +titolo +titubante +tizio +tizzone +toccare +tollerare +tolto +tombola +tomo +tonfo +tonsilla +topazio +topologia +toppa +torba +tornare +torrone +tortora +toscano +tossire +tostatura +totano +trabocco +trachea +trafila +tragedia +tralcio +tramonto +transito +trapano +trarre +trasloco +trattato +trave +treccia +tremolio +trespolo +tributo +tricheco +trifoglio +trillo +trincea +trio +tristezza +triturato +trivella +tromba +trono +troppo +trottola +trovare +truccato +tubatura +tuffato +tulipano +tumulto +tunisia +turbare +turchino +tuta +tutela +ubicato +uccello +uccisore +udire +uditivo +uffa +ufficio +uguale +ulisse +ultimato +umano +umile +umorismo +uncinetto +ungere +ungherese +unicorno +unificato +unisono +unitario +unte +uovo +upupa +uragano +urgenza +urlo +usanza +usato +uscito +usignolo +usuraio +utensile +utilizzo +utopia +vacante +vaccinato +vagabondo +vagliato +valanga +valgo +valico +valletta +valoroso +valutare +valvola +vampata +vangare +vanitoso +vano +vantaggio +vanvera +vapore +varano +varcato +variante +vasca +vedetta +vedova +veduto +vegetale +veicolo +velcro +velina +velluto +veloce +venato +vendemmia +vento +verace +verbale +vergogna +verifica +vero +verruca +verticale +vescica +vessillo +vestale +veterano +vetrina +vetusto +viandante +vibrante +vicenda +vichingo +vicinanza +vidimare +vigilia +vigneto +vigore +vile +villano +vimini +vincitore +viola +vipera +virgola +virologo +virulento +viscoso +visione +vispo +vissuto +visura +vita +vitello +vittima +vivanda +vivido +viziare +voce +voga +volatile +volere +volpe +voragine +vulcano +zampogna +zanna +zappato +zattera +zavorra +zefiro +zelante +zelo +zenzero +zerbino +zibetto +zinco +zircone +zitto +zolla +zotico +zucchero +zufolo +zulu +zuppa +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/japanese.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/japanese.go new file mode 100644 index 000000000000..23a76a343123 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/japanese.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/japanese.txt + // $ crc32 japanese.txt + // 0acc1419 + checksum := crc32.ChecksumIEEE([]byte(japanese)) + if fmt.Sprintf("%x", checksum) != "acc1419" { + panic(fmt.Sprintf("japanese checksum invalid: %x", checksum)) + } +} + +// Japanese is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/japanese.txt +var Japanese = strings.Split(strings.TrimSpace(japanese), "\n") +var japanese = `あいこくしん +あいさつ +あいだ +あおぞら +あかちゃん +あきる +あけがた +あける +あこがれる +あさい +あさひ +あしあと +あじわう +あずかる +あずき +あそぶ +あたえる +あたためる +あたりまえ +あたる +あつい +あつかう +あっしゅく +あつまり +あつめる +あてな +あてはまる +あひる +あぶら +あぶる +あふれる +あまい +あまど +あまやかす +あまり +あみもの +あめりか +あやまる +あゆむ +あらいぐま +あらし +あらすじ +あらためる +あらゆる +あらわす +ありがとう +あわせる +あわてる +あんい +あんがい +あんこ +あんぜん +あんてい +あんない +あんまり +いいだす +いおん +いがい +いがく +いきおい +いきなり +いきもの +いきる +いくじ +いくぶん +いけばな +いけん +いこう +いこく +いこつ +いさましい +いさん +いしき +いじゅう +いじょう +いじわる +いずみ +いずれ +いせい +いせえび +いせかい +いせき +いぜん +いそうろう +いそがしい +いだい +いだく +いたずら +いたみ +いたりあ +いちおう +いちじ +いちど +いちば +いちぶ +いちりゅう +いつか +いっしゅん +いっせい +いっそう +いったん +いっち +いってい +いっぽう +いてざ +いてん +いどう +いとこ +いない +いなか +いねむり +いのち +いのる +いはつ +いばる +いはん +いびき +いひん +いふく +いへん +いほう +いみん +いもうと +いもたれ +いもり +いやがる +いやす +いよかん +いよく +いらい +いらすと +いりぐち +いりょう +いれい +いれもの +いれる +いろえんぴつ +いわい +いわう +いわかん +いわば +いわゆる +いんげんまめ +いんさつ +いんしょう +いんよう +うえき +うえる +うおざ +うがい +うかぶ +うかべる +うきわ +うくらいな +うくれれ +うけたまわる +うけつけ +うけとる +うけもつ +うける +うごかす +うごく +うこん +うさぎ +うしなう +うしろがみ +うすい +うすぎ +うすぐらい +うすめる +うせつ +うちあわせ +うちがわ +うちき +うちゅう +うっかり +うつくしい +うったえる +うつる +うどん +うなぎ +うなじ +うなずく +うなる +うねる +うのう +うぶげ +うぶごえ +うまれる +うめる +うもう +うやまう +うよく +うらがえす +うらぐち +うらない +うりあげ +うりきれ +うるさい +うれしい +うれゆき +うれる +うろこ +うわき +うわさ +うんこう +うんちん +うんてん +うんどう +えいえん +えいが +えいきょう +えいご +えいせい +えいぶん +えいよう +えいわ +えおり +えがお +えがく +えきたい +えくせる +えしゃく +えすて +えつらん +えのぐ +えほうまき +えほん +えまき +えもじ +えもの +えらい +えらぶ +えりあ +えんえん +えんかい +えんぎ +えんげき +えんしゅう +えんぜつ +えんそく +えんちょう +えんとつ +おいかける +おいこす +おいしい +おいつく +おうえん +おうさま +おうじ +おうせつ +おうたい +おうふく +おうべい +おうよう +おえる +おおい +おおう +おおどおり +おおや +おおよそ +おかえり +おかず +おがむ +おかわり +おぎなう +おきる +おくさま +おくじょう +おくりがな +おくる +おくれる +おこす +おこなう +おこる +おさえる +おさない +おさめる +おしいれ +おしえる +おじぎ +おじさん +おしゃれ +おそらく +おそわる +おたがい +おたく +おだやか +おちつく +おっと +おつり +おでかけ +おとしもの +おとなしい +おどり +おどろかす +おばさん +おまいり +おめでとう +おもいで +おもう +おもたい +おもちゃ +おやつ +おやゆび +およぼす +おらんだ +おろす +おんがく +おんけい +おんしゃ +おんせん +おんだん +おんちゅう +おんどけい +かあつ +かいが +がいき +がいけん +がいこう +かいさつ +かいしゃ +かいすいよく +かいぜん +かいぞうど +かいつう +かいてん +かいとう +かいふく +がいへき +かいほう +かいよう +がいらい +かいわ +かえる +かおり +かかえる +かがく +かがし +かがみ +かくご +かくとく +かざる +がぞう +かたい +かたち +がちょう +がっきゅう +がっこう +がっさん +がっしょう +かなざわし +かのう +がはく +かぶか +かほう +かほご +かまう +かまぼこ +かめれおん +かゆい +かようび +からい +かるい +かろう +かわく +かわら +がんか +かんけい +かんこう +かんしゃ +かんそう +かんたん +かんち +がんばる +きあい +きあつ +きいろ +ぎいん +きうい +きうん +きえる +きおう +きおく +きおち +きおん +きかい +きかく +きかんしゃ +ききて +きくばり +きくらげ +きけんせい +きこう +きこえる +きこく +きさい +きさく +きさま +きさらぎ +ぎじかがく +ぎしき +ぎじたいけん +ぎじにってい +ぎじゅつしゃ +きすう +きせい +きせき +きせつ +きそう +きぞく +きぞん +きたえる +きちょう +きつえん +ぎっちり +きつつき +きつね +きてい +きどう +きどく +きない +きなが +きなこ +きぬごし +きねん +きのう +きのした +きはく +きびしい +きひん +きふく +きぶん +きぼう +きほん +きまる +きみつ +きむずかしい +きめる +きもだめし +きもち +きもの +きゃく +きやく +ぎゅうにく +きよう +きょうりゅう +きらい +きらく +きりん +きれい +きれつ +きろく +ぎろん +きわめる +ぎんいろ +きんかくじ +きんじょ +きんようび +ぐあい +くいず +くうかん +くうき +くうぐん +くうこう +ぐうせい +くうそう +ぐうたら +くうふく +くうぼ +くかん +くきょう +くげん +ぐこう +くさい +くさき +くさばな +くさる +くしゃみ +くしょう +くすのき +くすりゆび +くせげ +くせん +ぐたいてき +くださる +くたびれる +くちこみ +くちさき +くつした +ぐっすり +くつろぐ +くとうてん +くどく +くなん +くねくね +くのう +くふう +くみあわせ +くみたてる +くめる +くやくしょ +くらす +くらべる +くるま +くれる +くろう +くわしい +ぐんかん +ぐんしょく +ぐんたい +ぐんて +けあな +けいかく +けいけん +けいこ +けいさつ +げいじゅつ +けいたい +げいのうじん +けいれき +けいろ +けおとす +けおりもの +げきか +げきげん +げきだん +げきちん +げきとつ +げきは +げきやく +げこう +げこくじょう +げざい +けさき +げざん +けしき +けしごむ +けしょう +げすと +けたば +けちゃっぷ +けちらす +けつあつ +けつい +けつえき +けっこん +けつじょ +けっせき +けってい +けつまつ +げつようび +げつれい +けつろん +げどく +けとばす +けとる +けなげ +けなす +けなみ +けぬき +げねつ +けねん +けはい +げひん +けぶかい +げぼく +けまり +けみかる +けむし +けむり +けもの +けらい +けろけろ +けわしい +けんい +けんえつ +けんお +けんか +げんき +けんげん +けんこう +けんさく +けんしゅう +けんすう +げんそう +けんちく +けんてい +けんとう +けんない +けんにん +げんぶつ +けんま +けんみん +けんめい +けんらん +けんり +こあくま +こいぬ +こいびと +ごうい +こうえん +こうおん +こうかん +ごうきゅう +ごうけい +こうこう +こうさい +こうじ +こうすい +ごうせい +こうそく +こうたい +こうちゃ +こうつう +こうてい +こうどう +こうない +こうはい +ごうほう +ごうまん +こうもく +こうりつ +こえる +こおり +ごかい +ごがつ +ごかん +こくご +こくさい +こくとう +こくない +こくはく +こぐま +こけい +こける +ここのか +こころ +こさめ +こしつ +こすう +こせい +こせき +こぜん +こそだて +こたい +こたえる +こたつ +こちょう +こっか +こつこつ +こつばん +こつぶ +こてい +こてん +ことがら +ことし +ことば +ことり +こなごな +こねこね +このまま +このみ +このよ +ごはん +こひつじ +こふう +こふん +こぼれる +ごまあぶら +こまかい +ごますり +こまつな +こまる +こむぎこ +こもじ +こもち +こもの +こもん +こやく +こやま +こゆう +こゆび +こよい +こよう +こりる +これくしょん +ころっけ +こわもて +こわれる +こんいん +こんかい +こんき +こんしゅう +こんすい +こんだて +こんとん +こんなん +こんびに +こんぽん +こんまけ +こんや +こんれい +こんわく +ざいえき +さいかい +さいきん +ざいげん +ざいこ +さいしょ +さいせい +ざいたく +ざいちゅう +さいてき +ざいりょう +さうな +さかいし +さがす +さかな +さかみち +さがる +さぎょう +さくし +さくひん +さくら +さこく +さこつ +さずかる +ざせき +さたん +さつえい +ざつおん +ざっか +ざつがく +さっきょく +ざっし +さつじん +ざっそう +さつたば +さつまいも +さてい +さといも +さとう +さとおや +さとし +さとる +さのう +さばく +さびしい +さべつ +さほう +さほど +さます +さみしい +さみだれ +さむけ +さめる +さやえんどう +さゆう +さよう +さよく +さらだ +ざるそば +さわやか +さわる +さんいん +さんか +さんきゃく +さんこう +さんさい +ざんしょ +さんすう +さんせい +さんそ +さんち +さんま +さんみ +さんらん +しあい +しあげ +しあさって +しあわせ +しいく +しいん +しうち +しえい +しおけ +しかい +しかく +じかん +しごと +しすう +じだい +したうけ +したぎ +したて +したみ +しちょう +しちりん +しっかり +しつじ +しつもん +してい +してき +してつ +じてん +じどう +しなぎれ +しなもの +しなん +しねま +しねん +しのぐ +しのぶ +しはい +しばかり +しはつ +しはらい +しはん +しひょう +しふく +じぶん +しへい +しほう +しほん +しまう +しまる +しみん +しむける +じむしょ +しめい +しめる +しもん +しゃいん +しゃうん +しゃおん +じゃがいも +しやくしょ +しゃくほう +しゃけん +しゃこ +しゃざい +しゃしん +しゃせん +しゃそう +しゃたい +しゃちょう +しゃっきん +じゃま +しゃりん +しゃれい +じゆう +じゅうしょ +しゅくはく +じゅしん +しゅっせき +しゅみ +しゅらば +じゅんばん +しょうかい +しょくたく +しょっけん +しょどう +しょもつ +しらせる +しらべる +しんか +しんこう +じんじゃ +しんせいじ +しんちく +しんりん +すあげ +すあし +すあな +ずあん +すいえい +すいか +すいとう +ずいぶん +すいようび +すうがく +すうじつ +すうせん +すおどり +すきま +すくう +すくない +すける +すごい +すこし +ずさん +すずしい +すすむ +すすめる +すっかり +ずっしり +ずっと +すてき +すてる +すねる +すのこ +すはだ +すばらしい +ずひょう +ずぶぬれ +すぶり +すふれ +すべて +すべる +ずほう +すぼん +すまい +すめし +すもう +すやき +すらすら +するめ +すれちがう +すろっと +すわる +すんぜん +すんぽう +せあぶら +せいかつ +せいげん +せいじ +せいよう +せおう +せかいかん +せきにん +せきむ +せきゆ +せきらんうん +せけん +せこう +せすじ +せたい +せたけ +せっかく +せっきゃく +ぜっく +せっけん +せっこつ +せっさたくま +せつぞく +せつだん +せつでん +せっぱん +せつび +せつぶん +せつめい +せつりつ +せなか +せのび +せはば +せびろ +せぼね +せまい +せまる +せめる +せもたれ +せりふ +ぜんあく +せんい +せんえい +せんか +せんきょ +せんく +せんげん +ぜんご +せんさい +せんしゅ +せんすい +せんせい +せんぞ +せんたく +せんちょう +せんてい +せんとう +せんぬき +せんねん +せんぱい +ぜんぶ +ぜんぽう +せんむ +せんめんじょ +せんもん +せんやく +せんゆう +せんよう +ぜんら +ぜんりゃく +せんれい +せんろ +そあく +そいとげる +そいね +そうがんきょう +そうき +そうご +そうしん +そうだん +そうなん +そうび +そうめん +そうり +そえもの +そえん +そがい +そげき +そこう +そこそこ +そざい +そしな +そせい +そせん +そそぐ +そだてる +そつう +そつえん +そっかん +そつぎょう +そっけつ +そっこう +そっせん +そっと +そとがわ +そとづら +そなえる +そなた +そふぼ +そぼく +そぼろ +そまつ +そまる +そむく +そむりえ +そめる +そもそも +そよかぜ +そらまめ +そろう +そんかい +そんけい +そんざい +そんしつ +そんぞく +そんちょう +ぞんび +ぞんぶん +そんみん +たあい +たいいん +たいうん +たいえき +たいおう +だいがく +たいき +たいぐう +たいけん +たいこ +たいざい +だいじょうぶ +だいすき +たいせつ +たいそう +だいたい +たいちょう +たいてい +だいどころ +たいない +たいねつ +たいのう +たいはん +だいひょう +たいふう +たいへん +たいほ +たいまつばな +たいみんぐ +たいむ +たいめん +たいやき +たいよう +たいら +たいりょく +たいる +たいわん +たうえ +たえる +たおす +たおる +たおれる +たかい +たかね +たきび +たくさん +たこく +たこやき +たさい +たしざん +だじゃれ +たすける +たずさわる +たそがれ +たたかう +たたく +ただしい +たたみ +たちばな +だっかい +だっきゃく +だっこ +だっしゅつ +だったい +たてる +たとえる +たなばた +たにん +たぬき +たのしみ +たはつ +たぶん +たべる +たぼう +たまご +たまる +だむる +ためいき +ためす +ためる +たもつ +たやすい +たよる +たらす +たりきほんがん +たりょう +たりる +たると +たれる +たれんと +たろっと +たわむれる +だんあつ +たんい +たんおん +たんか +たんき +たんけん +たんご +たんさん +たんじょうび +だんせい +たんそく +たんたい +だんち +たんてい +たんとう +だんな +たんにん +だんねつ +たんのう +たんぴん +だんぼう +たんまつ +たんめい +だんれつ +だんろ +だんわ +ちあい +ちあん +ちいき +ちいさい +ちえん +ちかい +ちから +ちきゅう +ちきん +ちけいず +ちけん +ちこく +ちさい +ちしき +ちしりょう +ちせい +ちそう +ちたい +ちたん +ちちおや +ちつじょ +ちてき +ちてん +ちぬき +ちぬり +ちのう +ちひょう +ちへいせん +ちほう +ちまた +ちみつ +ちみどろ +ちめいど +ちゃんこなべ +ちゅうい +ちゆりょく +ちょうし +ちょさくけん +ちらし +ちらみ +ちりがみ +ちりょう +ちるど +ちわわ +ちんたい +ちんもく +ついか +ついたち +つうか +つうじょう +つうはん +つうわ +つかう +つかれる +つくね +つくる +つけね +つける +つごう +つたえる +つづく +つつじ +つつむ +つとめる +つながる +つなみ +つねづね +つのる +つぶす +つまらない +つまる +つみき +つめたい +つもり +つもる +つよい +つるぼ +つるみく +つわもの +つわり +てあし +てあて +てあみ +ていおん +ていか +ていき +ていけい +ていこく +ていさつ +ていし +ていせい +ていたい +ていど +ていねい +ていひょう +ていへん +ていぼう +てうち +ておくれ +てきとう +てくび +でこぼこ +てさぎょう +てさげ +てすり +てそう +てちがい +てちょう +てつがく +てつづき +でっぱ +てつぼう +てつや +でぬかえ +てぬき +てぬぐい +てのひら +てはい +てぶくろ +てふだ +てほどき +てほん +てまえ +てまきずし +てみじか +てみやげ +てらす +てれび +てわけ +てわたし +でんあつ +てんいん +てんかい +てんき +てんぐ +てんけん +てんごく +てんさい +てんし +てんすう +でんち +てんてき +てんとう +てんない +てんぷら +てんぼうだい +てんめつ +てんらんかい +でんりょく +でんわ +どあい +といれ +どうかん +とうきゅう +どうぐ +とうし +とうむぎ +とおい +とおか +とおく +とおす +とおる +とかい +とかす +ときおり +ときどき +とくい +とくしゅう +とくてん +とくに +とくべつ +とけい +とける +とこや +とさか +としょかん +とそう +とたん +とちゅう +とっきゅう +とっくん +とつぜん +とつにゅう +とどける +ととのえる +とない +となえる +となり +とのさま +とばす +どぶがわ +とほう +とまる +とめる +ともだち +ともる +どようび +とらえる +とんかつ +どんぶり +ないかく +ないこう +ないしょ +ないす +ないせん +ないそう +なおす +ながい +なくす +なげる +なこうど +なさけ +なたでここ +なっとう +なつやすみ +ななおし +なにごと +なにもの +なにわ +なのか +なふだ +なまいき +なまえ +なまみ +なみだ +なめらか +なめる +なやむ +ならう +ならび +ならぶ +なれる +なわとび +なわばり +にあう +にいがた +にうけ +におい +にかい +にがて +にきび +にくしみ +にくまん +にげる +にさんかたんそ +にしき +にせもの +にちじょう +にちようび +にっか +にっき +にっけい +にっこう +にっさん +にっしょく +にっすう +にっせき +にってい +になう +にほん +にまめ +にもつ +にやり +にゅういん +にりんしゃ +にわとり +にんい +にんか +にんき +にんげん +にんしき +にんずう +にんそう +にんたい +にんち +にんてい +にんにく +にんぷ +にんまり +にんむ +にんめい +にんよう +ぬいくぎ +ぬかす +ぬぐいとる +ぬぐう +ぬくもり +ぬすむ +ぬまえび +ぬめり +ぬらす +ぬんちゃく +ねあげ +ねいき +ねいる +ねいろ +ねぐせ +ねくたい +ねくら +ねこぜ +ねこむ +ねさげ +ねすごす +ねそべる +ねだん +ねつい +ねっしん +ねつぞう +ねったいぎょ +ねぶそく +ねふだ +ねぼう +ねほりはほり +ねまき +ねまわし +ねみみ +ねむい +ねむたい +ねもと +ねらう +ねわざ +ねんいり +ねんおし +ねんかん +ねんきん +ねんぐ +ねんざ +ねんし +ねんちゃく +ねんど +ねんぴ +ねんぶつ +ねんまつ +ねんりょう +ねんれい +のいず +のおづま +のがす +のきなみ +のこぎり +のこす +のこる +のせる +のぞく +のぞむ +のたまう +のちほど +のっく +のばす +のはら +のべる +のぼる +のみもの +のやま +のらいぬ +のらねこ +のりもの +のりゆき +のれん +のんき +ばあい +はあく +ばあさん +ばいか +ばいく +はいけん +はいご +はいしん +はいすい +はいせん +はいそう +はいち +ばいばい +はいれつ +はえる +はおる +はかい +ばかり +はかる +はくしゅ +はけん +はこぶ +はさみ +はさん +はしご +ばしょ +はしる +はせる +ぱそこん +はそん +はたん +はちみつ +はつおん +はっかく +はづき +はっきり +はっくつ +はっけん +はっこう +はっさん +はっしん +はったつ +はっちゅう +はってん +はっぴょう +はっぽう +はなす +はなび +はにかむ +はぶらし +はみがき +はむかう +はめつ +はやい +はやし +はらう +はろうぃん +はわい +はんい +はんえい +はんおん +はんかく +はんきょう +ばんぐみ +はんこ +はんしゃ +はんすう +はんだん +ぱんち +ぱんつ +はんてい +はんとし +はんのう +はんぱ +はんぶん +はんぺん +はんぼうき +はんめい +はんらん +はんろん +ひいき +ひうん +ひえる +ひかく +ひかり +ひかる +ひかん +ひくい +ひけつ +ひこうき +ひこく +ひさい +ひさしぶり +ひさん +びじゅつかん +ひしょ +ひそか +ひそむ +ひたむき +ひだり +ひたる +ひつぎ +ひっこし +ひっし +ひつじゅひん +ひっす +ひつぜん +ぴったり +ぴっちり +ひつよう +ひてい +ひとごみ +ひなまつり +ひなん +ひねる +ひはん +ひびく +ひひょう +ひほう +ひまわり +ひまん +ひみつ +ひめい +ひめじし +ひやけ +ひやす +ひよう +びょうき +ひらがな +ひらく +ひりつ +ひりょう +ひるま +ひるやすみ +ひれい +ひろい +ひろう +ひろき +ひろゆき +ひんかく +ひんけつ +ひんこん +ひんしゅ +ひんそう +ぴんち +ひんぱん +びんぼう +ふあん +ふいうち +ふうけい +ふうせん +ぷうたろう +ふうとう +ふうふ +ふえる +ふおん +ふかい +ふきん +ふくざつ +ふくぶくろ +ふこう +ふさい +ふしぎ +ふじみ +ふすま +ふせい +ふせぐ +ふそく +ぶたにく +ふたん +ふちょう +ふつう +ふつか +ふっかつ +ふっき +ふっこく +ぶどう +ふとる +ふとん +ふのう +ふはい +ふひょう +ふへん +ふまん +ふみん +ふめつ +ふめん +ふよう +ふりこ +ふりる +ふるい +ふんいき +ぶんがく +ぶんぐ +ふんしつ +ぶんせき +ふんそう +ぶんぽう +へいあん +へいおん +へいがい +へいき +へいげん +へいこう +へいさ +へいしゃ +へいせつ +へいそ +へいたく +へいてん +へいねつ +へいわ +へきが +へこむ +べにいろ +べにしょうが +へらす +へんかん +べんきょう +べんごし +へんさい +へんたい +べんり +ほあん +ほいく +ぼうぎょ +ほうこく +ほうそう +ほうほう +ほうもん +ほうりつ +ほえる +ほおん +ほかん +ほきょう +ぼきん +ほくろ +ほけつ +ほけん +ほこう +ほこる +ほしい +ほしつ +ほしゅ +ほしょう +ほせい +ほそい +ほそく +ほたて +ほたる +ぽちぶくろ +ほっきょく +ほっさ +ほったん +ほとんど +ほめる +ほんい +ほんき +ほんけ +ほんしつ +ほんやく +まいにち +まかい +まかせる +まがる +まける +まこと +まさつ +まじめ +ますく +まぜる +まつり +まとめ +まなぶ +まぬけ +まねく +まほう +まもる +まゆげ +まよう +まろやか +まわす +まわり +まわる +まんが +まんきつ +まんぞく +まんなか +みいら +みうち +みえる +みがく +みかた +みかん +みけん +みこん +みじかい +みすい +みすえる +みせる +みっか +みつかる +みつける +みてい +みとめる +みなと +みなみかさい +みねらる +みのう +みのがす +みほん +みもと +みやげ +みらい +みりょく +みわく +みんか +みんぞく +むいか +むえき +むえん +むかい +むかう +むかえ +むかし +むぎちゃ +むける +むげん +むさぼる +むしあつい +むしば +むじゅん +むしろ +むすう +むすこ +むすぶ +むすめ +むせる +むせん +むちゅう +むなしい +むのう +むやみ +むよう +むらさき +むりょう +むろん +めいあん +めいうん +めいえん +めいかく +めいきょく +めいさい +めいし +めいそう +めいぶつ +めいれい +めいわく +めぐまれる +めざす +めした +めずらしい +めだつ +めまい +めやす +めんきょ +めんせき +めんどう +もうしあげる +もうどうけん +もえる +もくし +もくてき +もくようび +もちろん +もどる +もらう +もんく +もんだい +やおや +やける +やさい +やさしい +やすい +やすたろう +やすみ +やせる +やそう +やたい +やちん +やっと +やっぱり +やぶる +やめる +ややこしい +やよい +やわらかい +ゆうき +ゆうびんきょく +ゆうべ +ゆうめい +ゆけつ +ゆしゅつ +ゆせん +ゆそう +ゆたか +ゆちゃく +ゆでる +ゆにゅう +ゆびわ +ゆらい +ゆれる +ようい +ようか +ようきゅう +ようじ +ようす +ようちえん +よかぜ +よかん +よきん +よくせい +よくぼう +よけい +よごれる +よさん +よしゅう +よそう +よそく +よっか +よてい +よどがわく +よねつ +よやく +よゆう +よろこぶ +よろしい +らいう +らくがき +らくご +らくさつ +らくだ +らしんばん +らせん +らぞく +らたい +らっか +られつ +りえき +りかい +りきさく +りきせつ +りくぐん +りくつ +りけん +りこう +りせい +りそう +りそく +りてん +りねん +りゆう +りゅうがく +りよう +りょうり +りょかん +りょくちゃ +りょこう +りりく +りれき +りろん +りんご +るいけい +るいさい +るいじ +るいせき +るすばん +るりがわら +れいかん +れいぎ +れいせい +れいぞうこ +れいとう +れいぼう +れきし +れきだい +れんあい +れんけい +れんこん +れんさい +れんしゅう +れんぞく +れんらく +ろうか +ろうご +ろうじん +ろうそく +ろくが +ろこつ +ろじうら +ろしゅつ +ろせん +ろてん +ろめん +ろれつ +ろんぎ +ろんぱ +ろんぶん +ろんり +わかす +わかめ +わかやま +わかれる +わしつ +わじまし +わすれもの +わらう +われる +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/korean.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/korean.go new file mode 100644 index 000000000000..1d3177563370 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/korean.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/korean.txt + // $ crc32 korean.txt + // 4ef461eb + checksum := crc32.ChecksumIEEE([]byte(korean)) + if fmt.Sprintf("%x", checksum) != "4ef461eb" { + panic("korean checksum invalid") + } +} + +// Korean is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/korean.txt +var Korean = strings.Split(strings.TrimSpace(korean), "\n") +var korean = `가격 +가끔 +가난 +가능 +가득 +가르침 +가뭄 +가방 +가상 +가슴 +가운데 +가을 +가이드 +가입 +가장 +가정 +가족 +가죽 +각오 +각자 +간격 +간부 +간섭 +간장 +간접 +간판 +갈등 +갈비 +갈색 +갈증 +감각 +감기 +감소 +감수성 +감자 +감정 +갑자기 +강남 +강당 +강도 +강력히 +강변 +강북 +강사 +강수량 +강아지 +강원도 +강의 +강제 +강조 +같이 +개구리 +개나리 +개방 +개별 +개선 +개성 +개인 +객관적 +거실 +거액 +거울 +거짓 +거품 +걱정 +건강 +건물 +건설 +건조 +건축 +걸음 +검사 +검토 +게시판 +게임 +겨울 +견해 +결과 +결국 +결론 +결석 +결승 +결심 +결정 +결혼 +경계 +경고 +경기 +경력 +경복궁 +경비 +경상도 +경영 +경우 +경쟁 +경제 +경주 +경찰 +경치 +경향 +경험 +계곡 +계단 +계란 +계산 +계속 +계약 +계절 +계층 +계획 +고객 +고구려 +고궁 +고급 +고등학생 +고무신 +고민 +고양이 +고장 +고전 +고집 +고춧가루 +고통 +고향 +곡식 +골목 +골짜기 +골프 +공간 +공개 +공격 +공군 +공급 +공기 +공동 +공무원 +공부 +공사 +공식 +공업 +공연 +공원 +공장 +공짜 +공책 +공통 +공포 +공항 +공휴일 +과목 +과일 +과장 +과정 +과학 +관객 +관계 +관광 +관념 +관람 +관련 +관리 +관습 +관심 +관점 +관찰 +광경 +광고 +광장 +광주 +괴로움 +굉장히 +교과서 +교문 +교복 +교실 +교양 +교육 +교장 +교직 +교통 +교환 +교훈 +구경 +구름 +구멍 +구별 +구분 +구석 +구성 +구속 +구역 +구입 +구청 +구체적 +국가 +국기 +국내 +국립 +국물 +국민 +국수 +국어 +국왕 +국적 +국제 +국회 +군대 +군사 +군인 +궁극적 +권리 +권위 +권투 +귀국 +귀신 +규정 +규칙 +균형 +그날 +그냥 +그늘 +그러나 +그룹 +그릇 +그림 +그제서야 +그토록 +극복 +극히 +근거 +근교 +근래 +근로 +근무 +근본 +근원 +근육 +근처 +글씨 +글자 +금강산 +금고 +금년 +금메달 +금액 +금연 +금요일 +금지 +긍정적 +기간 +기관 +기념 +기능 +기독교 +기둥 +기록 +기름 +기법 +기본 +기분 +기쁨 +기숙사 +기술 +기억 +기업 +기온 +기운 +기원 +기적 +기준 +기침 +기혼 +기획 +긴급 +긴장 +길이 +김밥 +김치 +김포공항 +깍두기 +깜빡 +깨달음 +깨소금 +껍질 +꼭대기 +꽃잎 +나들이 +나란히 +나머지 +나물 +나침반 +나흘 +낙엽 +난방 +날개 +날씨 +날짜 +남녀 +남대문 +남매 +남산 +남자 +남편 +남학생 +낭비 +낱말 +내년 +내용 +내일 +냄비 +냄새 +냇물 +냉동 +냉면 +냉방 +냉장고 +넥타이 +넷째 +노동 +노란색 +노력 +노인 +녹음 +녹차 +녹화 +논리 +논문 +논쟁 +놀이 +농구 +농담 +농민 +농부 +농업 +농장 +농촌 +높이 +눈동자 +눈물 +눈썹 +뉴욕 +느낌 +늑대 +능동적 +능력 +다방 +다양성 +다음 +다이어트 +다행 +단계 +단골 +단독 +단맛 +단순 +단어 +단위 +단점 +단체 +단추 +단편 +단풍 +달걀 +달러 +달력 +달리 +닭고기 +담당 +담배 +담요 +담임 +답변 +답장 +당근 +당분간 +당연히 +당장 +대규모 +대낮 +대단히 +대답 +대도시 +대략 +대량 +대륙 +대문 +대부분 +대신 +대응 +대장 +대전 +대접 +대중 +대책 +대출 +대충 +대통령 +대학 +대한민국 +대합실 +대형 +덩어리 +데이트 +도대체 +도덕 +도둑 +도망 +도서관 +도심 +도움 +도입 +도자기 +도저히 +도전 +도중 +도착 +독감 +독립 +독서 +독일 +독창적 +동화책 +뒷모습 +뒷산 +딸아이 +마누라 +마늘 +마당 +마라톤 +마련 +마무리 +마사지 +마약 +마요네즈 +마을 +마음 +마이크 +마중 +마지막 +마찬가지 +마찰 +마흔 +막걸리 +막내 +막상 +만남 +만두 +만세 +만약 +만일 +만점 +만족 +만화 +많이 +말기 +말씀 +말투 +맘대로 +망원경 +매년 +매달 +매력 +매번 +매스컴 +매일 +매장 +맥주 +먹이 +먼저 +먼지 +멀리 +메일 +며느리 +며칠 +면담 +멸치 +명단 +명령 +명예 +명의 +명절 +명칭 +명함 +모금 +모니터 +모델 +모든 +모범 +모습 +모양 +모임 +모조리 +모집 +모퉁이 +목걸이 +목록 +목사 +목소리 +목숨 +목적 +목표 +몰래 +몸매 +몸무게 +몸살 +몸속 +몸짓 +몸통 +몹시 +무관심 +무궁화 +무더위 +무덤 +무릎 +무슨 +무엇 +무역 +무용 +무조건 +무지개 +무척 +문구 +문득 +문법 +문서 +문제 +문학 +문화 +물가 +물건 +물결 +물고기 +물론 +물리학 +물음 +물질 +물체 +미국 +미디어 +미사일 +미술 +미역 +미용실 +미움 +미인 +미팅 +미혼 +민간 +민족 +민주 +믿음 +밀가루 +밀리미터 +밑바닥 +바가지 +바구니 +바나나 +바늘 +바닥 +바닷가 +바람 +바이러스 +바탕 +박물관 +박사 +박수 +반대 +반드시 +반말 +반발 +반성 +반응 +반장 +반죽 +반지 +반찬 +받침 +발가락 +발걸음 +발견 +발달 +발레 +발목 +발바닥 +발생 +발음 +발자국 +발전 +발톱 +발표 +밤하늘 +밥그릇 +밥맛 +밥상 +밥솥 +방금 +방면 +방문 +방바닥 +방법 +방송 +방식 +방안 +방울 +방지 +방학 +방해 +방향 +배경 +배꼽 +배달 +배드민턴 +백두산 +백색 +백성 +백인 +백제 +백화점 +버릇 +버섯 +버튼 +번개 +번역 +번지 +번호 +벌금 +벌레 +벌써 +범위 +범인 +범죄 +법률 +법원 +법적 +법칙 +베이징 +벨트 +변경 +변동 +변명 +변신 +변호사 +변화 +별도 +별명 +별일 +병실 +병아리 +병원 +보관 +보너스 +보라색 +보람 +보름 +보상 +보안 +보자기 +보장 +보전 +보존 +보통 +보편적 +보험 +복도 +복사 +복숭아 +복습 +볶음 +본격적 +본래 +본부 +본사 +본성 +본인 +본질 +볼펜 +봉사 +봉지 +봉투 +부근 +부끄러움 +부담 +부동산 +부문 +부분 +부산 +부상 +부엌 +부인 +부작용 +부장 +부정 +부족 +부지런히 +부친 +부탁 +부품 +부회장 +북부 +북한 +분노 +분량 +분리 +분명 +분석 +분야 +분위기 +분필 +분홍색 +불고기 +불과 +불교 +불꽃 +불만 +불법 +불빛 +불안 +불이익 +불행 +브랜드 +비극 +비난 +비닐 +비둘기 +비디오 +비로소 +비만 +비명 +비밀 +비바람 +비빔밥 +비상 +비용 +비율 +비중 +비타민 +비판 +빌딩 +빗물 +빗방울 +빗줄기 +빛깔 +빨간색 +빨래 +빨리 +사건 +사계절 +사나이 +사냥 +사람 +사랑 +사립 +사모님 +사물 +사방 +사상 +사생활 +사설 +사슴 +사실 +사업 +사용 +사월 +사장 +사전 +사진 +사촌 +사춘기 +사탕 +사투리 +사흘 +산길 +산부인과 +산업 +산책 +살림 +살인 +살짝 +삼계탕 +삼국 +삼십 +삼월 +삼촌 +상관 +상금 +상대 +상류 +상반기 +상상 +상식 +상업 +상인 +상자 +상점 +상처 +상추 +상태 +상표 +상품 +상황 +새벽 +색깔 +색연필 +생각 +생명 +생물 +생방송 +생산 +생선 +생신 +생일 +생활 +서랍 +서른 +서명 +서민 +서비스 +서양 +서울 +서적 +서점 +서쪽 +서클 +석사 +석유 +선거 +선물 +선배 +선생 +선수 +선원 +선장 +선전 +선택 +선풍기 +설거지 +설날 +설렁탕 +설명 +설문 +설사 +설악산 +설치 +설탕 +섭씨 +성공 +성당 +성명 +성별 +성인 +성장 +성적 +성질 +성함 +세금 +세미나 +세상 +세월 +세종대왕 +세탁 +센터 +센티미터 +셋째 +소규모 +소극적 +소금 +소나기 +소년 +소득 +소망 +소문 +소설 +소속 +소아과 +소용 +소원 +소음 +소중히 +소지품 +소질 +소풍 +소형 +속담 +속도 +속옷 +손가락 +손길 +손녀 +손님 +손등 +손목 +손뼉 +손실 +손질 +손톱 +손해 +솔직히 +솜씨 +송아지 +송이 +송편 +쇠고기 +쇼핑 +수건 +수년 +수단 +수돗물 +수동적 +수면 +수명 +수박 +수상 +수석 +수술 +수시로 +수업 +수염 +수영 +수입 +수준 +수집 +수출 +수컷 +수필 +수학 +수험생 +수화기 +숙녀 +숙소 +숙제 +순간 +순서 +순수 +순식간 +순위 +숟가락 +술병 +술집 +숫자 +스님 +스물 +스스로 +스승 +스웨터 +스위치 +스케이트 +스튜디오 +스트레스 +스포츠 +슬쩍 +슬픔 +습관 +습기 +승객 +승리 +승부 +승용차 +승진 +시각 +시간 +시골 +시금치 +시나리오 +시댁 +시리즈 +시멘트 +시민 +시부모 +시선 +시설 +시스템 +시아버지 +시어머니 +시월 +시인 +시일 +시작 +시장 +시절 +시점 +시중 +시즌 +시집 +시청 +시합 +시험 +식구 +식기 +식당 +식량 +식료품 +식물 +식빵 +식사 +식생활 +식초 +식탁 +식품 +신고 +신규 +신념 +신문 +신발 +신비 +신사 +신세 +신용 +신제품 +신청 +신체 +신화 +실감 +실내 +실력 +실례 +실망 +실수 +실습 +실시 +실장 +실정 +실질적 +실천 +실체 +실컷 +실태 +실패 +실험 +실현 +심리 +심부름 +심사 +심장 +심정 +심판 +쌍둥이 +씨름 +씨앗 +아가씨 +아나운서 +아드님 +아들 +아쉬움 +아스팔트 +아시아 +아울러 +아저씨 +아줌마 +아직 +아침 +아파트 +아프리카 +아픔 +아홉 +아흔 +악기 +악몽 +악수 +안개 +안경 +안과 +안내 +안녕 +안동 +안방 +안부 +안주 +알루미늄 +알코올 +암시 +암컷 +압력 +앞날 +앞문 +애인 +애정 +액수 +앨범 +야간 +야단 +야옹 +약간 +약국 +약속 +약수 +약점 +약품 +약혼녀 +양념 +양력 +양말 +양배추 +양주 +양파 +어둠 +어려움 +어른 +어젯밤 +어쨌든 +어쩌다가 +어쩐지 +언니 +언덕 +언론 +언어 +얼굴 +얼른 +얼음 +얼핏 +엄마 +업무 +업종 +업체 +엉덩이 +엉망 +엉터리 +엊그제 +에너지 +에어컨 +엔진 +여건 +여고생 +여관 +여군 +여권 +여대생 +여덟 +여동생 +여든 +여론 +여름 +여섯 +여성 +여왕 +여인 +여전히 +여직원 +여학생 +여행 +역사 +역시 +역할 +연결 +연구 +연극 +연기 +연락 +연설 +연세 +연속 +연습 +연애 +연예인 +연인 +연장 +연주 +연출 +연필 +연합 +연휴 +열기 +열매 +열쇠 +열심히 +열정 +열차 +열흘 +염려 +엽서 +영국 +영남 +영상 +영양 +영역 +영웅 +영원히 +영하 +영향 +영혼 +영화 +옆구리 +옆방 +옆집 +예감 +예금 +예방 +예산 +예상 +예선 +예술 +예습 +예식장 +예약 +예전 +예절 +예정 +예컨대 +옛날 +오늘 +오락 +오랫동안 +오렌지 +오로지 +오른발 +오븐 +오십 +오염 +오월 +오전 +오직 +오징어 +오페라 +오피스텔 +오히려 +옥상 +옥수수 +온갖 +온라인 +온몸 +온종일 +온통 +올가을 +올림픽 +올해 +옷차림 +와이셔츠 +와인 +완성 +완전 +왕비 +왕자 +왜냐하면 +왠지 +외갓집 +외국 +외로움 +외삼촌 +외출 +외침 +외할머니 +왼발 +왼손 +왼쪽 +요금 +요일 +요즘 +요청 +용기 +용서 +용어 +우산 +우선 +우승 +우연히 +우정 +우체국 +우편 +운동 +운명 +운반 +운전 +운행 +울산 +울음 +움직임 +웃어른 +웃음 +워낙 +원고 +원래 +원서 +원숭이 +원인 +원장 +원피스 +월급 +월드컵 +월세 +월요일 +웨이터 +위반 +위법 +위성 +위원 +위험 +위협 +윗사람 +유난히 +유럽 +유명 +유물 +유산 +유적 +유치원 +유학 +유행 +유형 +육군 +육상 +육십 +육체 +은행 +음력 +음료 +음반 +음성 +음식 +음악 +음주 +의견 +의논 +의문 +의복 +의식 +의심 +의외로 +의욕 +의원 +의학 +이것 +이곳 +이념 +이놈 +이달 +이대로 +이동 +이렇게 +이력서 +이론적 +이름 +이민 +이발소 +이별 +이불 +이빨 +이상 +이성 +이슬 +이야기 +이용 +이웃 +이월 +이윽고 +이익 +이전 +이중 +이튿날 +이틀 +이혼 +인간 +인격 +인공 +인구 +인근 +인기 +인도 +인류 +인물 +인생 +인쇄 +인연 +인원 +인재 +인종 +인천 +인체 +인터넷 +인하 +인형 +일곱 +일기 +일단 +일대 +일등 +일반 +일본 +일부 +일상 +일생 +일손 +일요일 +일월 +일정 +일종 +일주일 +일찍 +일체 +일치 +일행 +일회용 +임금 +임무 +입대 +입력 +입맛 +입사 +입술 +입시 +입원 +입장 +입학 +자가용 +자격 +자극 +자동 +자랑 +자부심 +자식 +자신 +자연 +자원 +자율 +자전거 +자정 +자존심 +자판 +작가 +작년 +작성 +작업 +작용 +작은딸 +작품 +잔디 +잔뜩 +잔치 +잘못 +잠깐 +잠수함 +잠시 +잠옷 +잠자리 +잡지 +장관 +장군 +장기간 +장래 +장례 +장르 +장마 +장면 +장모 +장미 +장비 +장사 +장소 +장식 +장애인 +장인 +장점 +장차 +장학금 +재능 +재빨리 +재산 +재생 +재작년 +재정 +재채기 +재판 +재학 +재활용 +저것 +저고리 +저곳 +저녁 +저런 +저렇게 +저번 +저울 +저절로 +저축 +적극 +적당히 +적성 +적용 +적응 +전개 +전공 +전기 +전달 +전라도 +전망 +전문 +전반 +전부 +전세 +전시 +전용 +전자 +전쟁 +전주 +전철 +전체 +전통 +전혀 +전후 +절대 +절망 +절반 +절약 +절차 +점검 +점수 +점심 +점원 +점점 +점차 +접근 +접시 +접촉 +젓가락 +정거장 +정도 +정류장 +정리 +정말 +정면 +정문 +정반대 +정보 +정부 +정비 +정상 +정성 +정오 +정원 +정장 +정지 +정치 +정확히 +제공 +제과점 +제대로 +제목 +제발 +제법 +제삿날 +제안 +제일 +제작 +제주도 +제출 +제품 +제한 +조각 +조건 +조금 +조깅 +조명 +조미료 +조상 +조선 +조용히 +조절 +조정 +조직 +존댓말 +존재 +졸업 +졸음 +종교 +종로 +종류 +종소리 +종업원 +종종 +종합 +좌석 +죄인 +주관적 +주름 +주말 +주머니 +주먹 +주문 +주민 +주방 +주변 +주식 +주인 +주일 +주장 +주전자 +주택 +준비 +줄거리 +줄기 +줄무늬 +중간 +중계방송 +중국 +중년 +중단 +중독 +중반 +중부 +중세 +중소기업 +중순 +중앙 +중요 +중학교 +즉석 +즉시 +즐거움 +증가 +증거 +증권 +증상 +증세 +지각 +지갑 +지경 +지극히 +지금 +지급 +지능 +지름길 +지리산 +지방 +지붕 +지식 +지역 +지우개 +지원 +지적 +지점 +지진 +지출 +직선 +직업 +직원 +직장 +진급 +진동 +진로 +진료 +진리 +진짜 +진찰 +진출 +진통 +진행 +질문 +질병 +질서 +짐작 +집단 +집안 +집중 +짜증 +찌꺼기 +차남 +차라리 +차량 +차림 +차별 +차선 +차츰 +착각 +찬물 +찬성 +참가 +참기름 +참새 +참석 +참여 +참외 +참조 +찻잔 +창가 +창고 +창구 +창문 +창밖 +창작 +창조 +채널 +채점 +책가방 +책방 +책상 +책임 +챔피언 +처벌 +처음 +천국 +천둥 +천장 +천재 +천천히 +철도 +철저히 +철학 +첫날 +첫째 +청년 +청바지 +청소 +청춘 +체계 +체력 +체온 +체육 +체중 +체험 +초등학생 +초반 +초밥 +초상화 +초순 +초여름 +초원 +초저녁 +초점 +초청 +초콜릿 +촛불 +총각 +총리 +총장 +촬영 +최근 +최상 +최선 +최신 +최악 +최종 +추석 +추억 +추진 +추천 +추측 +축구 +축소 +축제 +축하 +출근 +출발 +출산 +출신 +출연 +출입 +출장 +출판 +충격 +충고 +충돌 +충분히 +충청도 +취업 +취직 +취향 +치약 +친구 +친척 +칠십 +칠월 +칠판 +침대 +침묵 +침실 +칫솔 +칭찬 +카메라 +카운터 +칼국수 +캐릭터 +캠퍼스 +캠페인 +커튼 +컨디션 +컬러 +컴퓨터 +코끼리 +코미디 +콘서트 +콜라 +콤플렉스 +콩나물 +쾌감 +쿠데타 +크림 +큰길 +큰딸 +큰소리 +큰아들 +큰어머니 +큰일 +큰절 +클래식 +클럽 +킬로 +타입 +타자기 +탁구 +탁자 +탄생 +태권도 +태양 +태풍 +택시 +탤런트 +터널 +터미널 +테니스 +테스트 +테이블 +텔레비전 +토론 +토마토 +토요일 +통계 +통과 +통로 +통신 +통역 +통일 +통장 +통제 +통증 +통합 +통화 +퇴근 +퇴원 +퇴직금 +튀김 +트럭 +특급 +특별 +특성 +특수 +특징 +특히 +튼튼히 +티셔츠 +파란색 +파일 +파출소 +판결 +판단 +판매 +판사 +팔십 +팔월 +팝송 +패션 +팩스 +팩시밀리 +팬티 +퍼센트 +페인트 +편견 +편의 +편지 +편히 +평가 +평균 +평생 +평소 +평양 +평일 +평화 +포스터 +포인트 +포장 +포함 +표면 +표정 +표준 +표현 +품목 +품질 +풍경 +풍속 +풍습 +프랑스 +프린터 +플라스틱 +피곤 +피망 +피아노 +필름 +필수 +필요 +필자 +필통 +핑계 +하느님 +하늘 +하드웨어 +하룻밤 +하반기 +하숙집 +하순 +하여튼 +하지만 +하천 +하품 +하필 +학과 +학교 +학급 +학기 +학년 +학력 +학번 +학부모 +학비 +학생 +학술 +학습 +학용품 +학원 +학위 +학자 +학점 +한계 +한글 +한꺼번에 +한낮 +한눈 +한동안 +한때 +한라산 +한마디 +한문 +한번 +한복 +한식 +한여름 +한쪽 +할머니 +할아버지 +할인 +함께 +함부로 +합격 +합리적 +항공 +항구 +항상 +항의 +해결 +해군 +해답 +해당 +해물 +해석 +해설 +해수욕장 +해안 +핵심 +핸드백 +햄버거 +햇볕 +햇살 +행동 +행복 +행사 +행운 +행위 +향기 +향상 +향수 +허락 +허용 +헬기 +현관 +현금 +현대 +현상 +현실 +현장 +현재 +현지 +혈액 +협력 +형부 +형사 +형수 +형식 +형제 +형태 +형편 +혜택 +호기심 +호남 +호랑이 +호박 +호텔 +호흡 +혹시 +홀로 +홈페이지 +홍보 +홍수 +홍차 +화면 +화분 +화살 +화요일 +화장 +화학 +확보 +확인 +확장 +확정 +환갑 +환경 +환영 +환율 +환자 +활기 +활동 +활발히 +활용 +활짝 +회견 +회관 +회복 +회색 +회원 +회장 +회전 +횟수 +횡단보도 +효율적 +후반 +후춧가루 +훈련 +훨씬 +휴식 +휴일 +흉내 +흐름 +흑백 +흑인 +흔적 +흔히 +흥미 +흥분 +희곡 +희망 +희생 +흰색 +힘껏 +` diff --git a/vendor/github.com/tyler-smith/go-bip39/wordlists/spanish.go b/vendor/github.com/tyler-smith/go-bip39/wordlists/spanish.go new file mode 100644 index 000000000000..ad76da976cf4 --- /dev/null +++ b/vendor/github.com/tyler-smith/go-bip39/wordlists/spanish.go @@ -0,0 +1,2071 @@ +package wordlists + +import ( + "fmt" + "hash/crc32" + "strings" +) + +func init() { + // Ensure word list is correct + // $ wget https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/spanish.txt + // $ crc32 spanish.txt + // 266e4f3d + checksum := crc32.ChecksumIEEE([]byte(spanish)) + if fmt.Sprintf("%x", checksum) != "266e4f3d" { + panic("spanish checksum invalid") + } +} + +// Spanish is a slice of mnemonic words taken from the bip39 specification +// https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/spanish.txt +var Spanish = strings.Split(strings.TrimSpace(spanish), "\n") +var spanish = `ábaco +abdomen +abeja +abierto +abogado +abono +aborto +abrazo +abrir +abuelo +abuso +acabar +academia +acceso +acción +aceite +acelga +acento +aceptar +ácido +aclarar +acné +acoger +acoso +activo +acto +actriz +actuar +acudir +acuerdo +acusar +adicto +admitir +adoptar +adorno +aduana +adulto +aéreo +afectar +afición +afinar +afirmar +ágil +agitar +agonía +agosto +agotar +agregar +agrio +agua +agudo +águila +aguja +ahogo +ahorro +aire +aislar +ajedrez +ajeno +ajuste +alacrán +alambre +alarma +alba +álbum +alcalde +aldea +alegre +alejar +alerta +aleta +alfiler +alga +algodón +aliado +aliento +alivio +alma +almeja +almíbar +altar +alteza +altivo +alto +altura +alumno +alzar +amable +amante +amapola +amargo +amasar +ámbar +ámbito +ameno +amigo +amistad +amor +amparo +amplio +ancho +anciano +ancla +andar +andén +anemia +ángulo +anillo +ánimo +anís +anotar +antena +antiguo +antojo +anual +anular +anuncio +añadir +añejo +año +apagar +aparato +apetito +apio +aplicar +apodo +aporte +apoyo +aprender +aprobar +apuesta +apuro +arado +araña +arar +árbitro +árbol +arbusto +archivo +arco +arder +ardilla +arduo +área +árido +aries +armonía +arnés +aroma +arpa +arpón +arreglo +arroz +arruga +arte +artista +asa +asado +asalto +ascenso +asegurar +aseo +asesor +asiento +asilo +asistir +asno +asombro +áspero +astilla +astro +astuto +asumir +asunto +atajo +ataque +atar +atento +ateo +ático +atleta +átomo +atraer +atroz +atún +audaz +audio +auge +aula +aumento +ausente +autor +aval +avance +avaro +ave +avellana +avena +avestruz +avión +aviso +ayer +ayuda +ayuno +azafrán +azar +azote +azúcar +azufre +azul +baba +babor +bache +bahía +baile +bajar +balanza +balcón +balde +bambú +banco +banda +baño +barba +barco +barniz +barro +báscula +bastón +basura +batalla +batería +batir +batuta +baúl +bazar +bebé +bebida +bello +besar +beso +bestia +bicho +bien +bingo +blanco +bloque +blusa +boa +bobina +bobo +boca +bocina +boda +bodega +boina +bola +bolero +bolsa +bomba +bondad +bonito +bono +bonsái +borde +borrar +bosque +bote +botín +bóveda +bozal +bravo +brazo +brecha +breve +brillo +brinco +brisa +broca +broma +bronce +brote +bruja +brusco +bruto +buceo +bucle +bueno +buey +bufanda +bufón +búho +buitre +bulto +burbuja +burla +burro +buscar +butaca +buzón +caballo +cabeza +cabina +cabra +cacao +cadáver +cadena +caer +café +caída +caimán +caja +cajón +cal +calamar +calcio +caldo +calidad +calle +calma +calor +calvo +cama +cambio +camello +camino +campo +cáncer +candil +canela +canguro +canica +canto +caña +cañón +caoba +caos +capaz +capitán +capote +captar +capucha +cara +carbón +cárcel +careta +carga +cariño +carne +carpeta +carro +carta +casa +casco +casero +caspa +castor +catorce +catre +caudal +causa +cazo +cebolla +ceder +cedro +celda +célebre +celoso +célula +cemento +ceniza +centro +cerca +cerdo +cereza +cero +cerrar +certeza +césped +cetro +chacal +chaleco +champú +chancla +chapa +charla +chico +chiste +chivo +choque +choza +chuleta +chupar +ciclón +ciego +cielo +cien +cierto +cifra +cigarro +cima +cinco +cine +cinta +ciprés +circo +ciruela +cisne +cita +ciudad +clamor +clan +claro +clase +clave +cliente +clima +clínica +cobre +cocción +cochino +cocina +coco +código +codo +cofre +coger +cohete +cojín +cojo +cola +colcha +colegio +colgar +colina +collar +colmo +columna +combate +comer +comida +cómodo +compra +conde +conejo +conga +conocer +consejo +contar +copa +copia +corazón +corbata +corcho +cordón +corona +correr +coser +cosmos +costa +cráneo +cráter +crear +crecer +creído +crema +cría +crimen +cripta +crisis +cromo +crónica +croqueta +crudo +cruz +cuadro +cuarto +cuatro +cubo +cubrir +cuchara +cuello +cuento +cuerda +cuesta +cueva +cuidar +culebra +culpa +culto +cumbre +cumplir +cuna +cuneta +cuota +cupón +cúpula +curar +curioso +curso +curva +cutis +dama +danza +dar +dardo +dátil +deber +débil +década +decir +dedo +defensa +definir +dejar +delfín +delgado +delito +demora +denso +dental +deporte +derecho +derrota +desayuno +deseo +desfile +desnudo +destino +desvío +detalle +detener +deuda +día +diablo +diadema +diamante +diana +diario +dibujo +dictar +diente +dieta +diez +difícil +digno +dilema +diluir +dinero +directo +dirigir +disco +diseño +disfraz +diva +divino +doble +doce +dolor +domingo +don +donar +dorado +dormir +dorso +dos +dosis +dragón +droga +ducha +duda +duelo +dueño +dulce +dúo +duque +durar +dureza +duro +ébano +ebrio +echar +eco +ecuador +edad +edición +edificio +editor +educar +efecto +eficaz +eje +ejemplo +elefante +elegir +elemento +elevar +elipse +élite +elixir +elogio +eludir +embudo +emitir +emoción +empate +empeño +empleo +empresa +enano +encargo +enchufe +encía +enemigo +enero +enfado +enfermo +engaño +enigma +enlace +enorme +enredo +ensayo +enseñar +entero +entrar +envase +envío +época +equipo +erizo +escala +escena +escolar +escribir +escudo +esencia +esfera +esfuerzo +espada +espejo +espía +esposa +espuma +esquí +estar +este +estilo +estufa +etapa +eterno +ética +etnia +evadir +evaluar +evento +evitar +exacto +examen +exceso +excusa +exento +exigir +exilio +existir +éxito +experto +explicar +exponer +extremo +fábrica +fábula +fachada +fácil +factor +faena +faja +falda +fallo +falso +faltar +fama +familia +famoso +faraón +farmacia +farol +farsa +fase +fatiga +fauna +favor +fax +febrero +fecha +feliz +feo +feria +feroz +fértil +fervor +festín +fiable +fianza +fiar +fibra +ficción +ficha +fideo +fiebre +fiel +fiera +fiesta +figura +fijar +fijo +fila +filete +filial +filtro +fin +finca +fingir +finito +firma +flaco +flauta +flecha +flor +flota +fluir +flujo +flúor +fobia +foca +fogata +fogón +folio +folleto +fondo +forma +forro +fortuna +forzar +fosa +foto +fracaso +frágil +franja +frase +fraude +freír +freno +fresa +frío +frito +fruta +fuego +fuente +fuerza +fuga +fumar +función +funda +furgón +furia +fusil +fútbol +futuro +gacela +gafas +gaita +gajo +gala +galería +gallo +gamba +ganar +gancho +ganga +ganso +garaje +garza +gasolina +gastar +gato +gavilán +gemelo +gemir +gen +género +genio +gente +geranio +gerente +germen +gesto +gigante +gimnasio +girar +giro +glaciar +globo +gloria +gol +golfo +goloso +golpe +goma +gordo +gorila +gorra +gota +goteo +gozar +grada +gráfico +grano +grasa +gratis +grave +grieta +grillo +gripe +gris +grito +grosor +grúa +grueso +grumo +grupo +guante +guapo +guardia +guerra +guía +guiño +guion +guiso +guitarra +gusano +gustar +haber +hábil +hablar +hacer +hacha +hada +hallar +hamaca +harina +haz +hazaña +hebilla +hebra +hecho +helado +helio +hembra +herir +hermano +héroe +hervir +hielo +hierro +hígado +higiene +hijo +himno +historia +hocico +hogar +hoguera +hoja +hombre +hongo +honor +honra +hora +hormiga +horno +hostil +hoyo +hueco +huelga +huerta +hueso +huevo +huida +huir +humano +húmedo +humilde +humo +hundir +huracán +hurto +icono +ideal +idioma +ídolo +iglesia +iglú +igual +ilegal +ilusión +imagen +imán +imitar +impar +imperio +imponer +impulso +incapaz +índice +inerte +infiel +informe +ingenio +inicio +inmenso +inmune +innato +insecto +instante +interés +íntimo +intuir +inútil +invierno +ira +iris +ironía +isla +islote +jabalí +jabón +jamón +jarabe +jardín +jarra +jaula +jazmín +jefe +jeringa +jinete +jornada +joroba +joven +joya +juerga +jueves +juez +jugador +jugo +juguete +juicio +junco +jungla +junio +juntar +júpiter +jurar +justo +juvenil +juzgar +kilo +koala +labio +lacio +lacra +lado +ladrón +lagarto +lágrima +laguna +laico +lamer +lámina +lámpara +lana +lancha +langosta +lanza +lápiz +largo +larva +lástima +lata +látex +latir +laurel +lavar +lazo +leal +lección +leche +lector +leer +legión +legumbre +lejano +lengua +lento +leña +león +leopardo +lesión +letal +letra +leve +leyenda +libertad +libro +licor +líder +lidiar +lienzo +liga +ligero +lima +límite +limón +limpio +lince +lindo +línea +lingote +lino +linterna +líquido +liso +lista +litera +litio +litro +llaga +llama +llanto +llave +llegar +llenar +llevar +llorar +llover +lluvia +lobo +loción +loco +locura +lógica +logro +lombriz +lomo +lonja +lote +lucha +lucir +lugar +lujo +luna +lunes +lupa +lustro +luto +luz +maceta +macho +madera +madre +maduro +maestro +mafia +magia +mago +maíz +maldad +maleta +malla +malo +mamá +mambo +mamut +manco +mando +manejar +manga +maniquí +manjar +mano +manso +manta +mañana +mapa +máquina +mar +marco +marea +marfil +margen +marido +mármol +marrón +martes +marzo +masa +máscara +masivo +matar +materia +matiz +matriz +máximo +mayor +mazorca +mecha +medalla +medio +médula +mejilla +mejor +melena +melón +memoria +menor +mensaje +mente +menú +mercado +merengue +mérito +mes +mesón +meta +meter +método +metro +mezcla +miedo +miel +miembro +miga +mil +milagro +militar +millón +mimo +mina +minero +mínimo +minuto +miope +mirar +misa +miseria +misil +mismo +mitad +mito +mochila +moción +moda +modelo +moho +mojar +molde +moler +molino +momento +momia +monarca +moneda +monja +monto +moño +morada +morder +moreno +morir +morro +morsa +mortal +mosca +mostrar +motivo +mover +móvil +mozo +mucho +mudar +mueble +muela +muerte +muestra +mugre +mujer +mula +muleta +multa +mundo +muñeca +mural +muro +músculo +museo +musgo +música +muslo +nácar +nación +nadar +naipe +naranja +nariz +narrar +nasal +natal +nativo +natural +náusea +naval +nave +navidad +necio +néctar +negar +negocio +negro +neón +nervio +neto +neutro +nevar +nevera +nicho +nido +niebla +nieto +niñez +niño +nítido +nivel +nobleza +noche +nómina +noria +norma +norte +nota +noticia +novato +novela +novio +nube +nuca +núcleo +nudillo +nudo +nuera +nueve +nuez +nulo +número +nutria +oasis +obeso +obispo +objeto +obra +obrero +observar +obtener +obvio +oca +ocaso +océano +ochenta +ocho +ocio +ocre +octavo +octubre +oculto +ocupar +ocurrir +odiar +odio +odisea +oeste +ofensa +oferta +oficio +ofrecer +ogro +oído +oír +ojo +ola +oleada +olfato +olivo +olla +olmo +olor +olvido +ombligo +onda +onza +opaco +opción +ópera +opinar +oponer +optar +óptica +opuesto +oración +orador +oral +órbita +orca +orden +oreja +órgano +orgía +orgullo +oriente +origen +orilla +oro +orquesta +oruga +osadía +oscuro +osezno +oso +ostra +otoño +otro +oveja +óvulo +óxido +oxígeno +oyente +ozono +pacto +padre +paella +página +pago +país +pájaro +palabra +palco +paleta +pálido +palma +paloma +palpar +pan +panal +pánico +pantera +pañuelo +papá +papel +papilla +paquete +parar +parcela +pared +parir +paro +párpado +parque +párrafo +parte +pasar +paseo +pasión +paso +pasta +pata +patio +patria +pausa +pauta +pavo +payaso +peatón +pecado +pecera +pecho +pedal +pedir +pegar +peine +pelar +peldaño +pelea +peligro +pellejo +pelo +peluca +pena +pensar +peñón +peón +peor +pepino +pequeño +pera +percha +perder +pereza +perfil +perico +perla +permiso +perro +persona +pesa +pesca +pésimo +pestaña +pétalo +petróleo +pez +pezuña +picar +pichón +pie +piedra +pierna +pieza +pijama +pilar +piloto +pimienta +pino +pintor +pinza +piña +piojo +pipa +pirata +pisar +piscina +piso +pista +pitón +pizca +placa +plan +plata +playa +plaza +pleito +pleno +plomo +pluma +plural +pobre +poco +poder +podio +poema +poesía +poeta +polen +policía +pollo +polvo +pomada +pomelo +pomo +pompa +poner +porción +portal +posada +poseer +posible +poste +potencia +potro +pozo +prado +precoz +pregunta +premio +prensa +preso +previo +primo +príncipe +prisión +privar +proa +probar +proceso +producto +proeza +profesor +programa +prole +promesa +pronto +propio +próximo +prueba +público +puchero +pudor +pueblo +puerta +puesto +pulga +pulir +pulmón +pulpo +pulso +puma +punto +puñal +puño +pupa +pupila +puré +quedar +queja +quemar +querer +queso +quieto +química +quince +quitar +rábano +rabia +rabo +ración +radical +raíz +rama +rampa +rancho +rango +rapaz +rápido +rapto +rasgo +raspa +rato +rayo +raza +razón +reacción +realidad +rebaño +rebote +recaer +receta +rechazo +recoger +recreo +recto +recurso +red +redondo +reducir +reflejo +reforma +refrán +refugio +regalo +regir +regla +regreso +rehén +reino +reír +reja +relato +relevo +relieve +relleno +reloj +remar +remedio +remo +rencor +rendir +renta +reparto +repetir +reposo +reptil +res +rescate +resina +respeto +resto +resumen +retiro +retorno +retrato +reunir +revés +revista +rey +rezar +rico +riego +rienda +riesgo +rifa +rígido +rigor +rincón +riñón +río +riqueza +risa +ritmo +rito +rizo +roble +roce +rociar +rodar +rodeo +rodilla +roer +rojizo +rojo +romero +romper +ron +ronco +ronda +ropa +ropero +rosa +rosca +rostro +rotar +rubí +rubor +rudo +rueda +rugir +ruido +ruina +ruleta +rulo +rumbo +rumor +ruptura +ruta +rutina +sábado +saber +sabio +sable +sacar +sagaz +sagrado +sala +saldo +salero +salir +salmón +salón +salsa +salto +salud +salvar +samba +sanción +sandía +sanear +sangre +sanidad +sano +santo +sapo +saque +sardina +sartén +sastre +satán +sauna +saxofón +sección +seco +secreto +secta +sed +seguir +seis +sello +selva +semana +semilla +senda +sensor +señal +señor +separar +sepia +sequía +ser +serie +sermón +servir +sesenta +sesión +seta +setenta +severo +sexo +sexto +sidra +siesta +siete +siglo +signo +sílaba +silbar +silencio +silla +símbolo +simio +sirena +sistema +sitio +situar +sobre +socio +sodio +sol +solapa +soldado +soledad +sólido +soltar +solución +sombra +sondeo +sonido +sonoro +sonrisa +sopa +soplar +soporte +sordo +sorpresa +sorteo +sostén +sótano +suave +subir +suceso +sudor +suegra +suelo +sueño +suerte +sufrir +sujeto +sultán +sumar +superar +suplir +suponer +supremo +sur +surco +sureño +surgir +susto +sutil +tabaco +tabique +tabla +tabú +taco +tacto +tajo +talar +talco +talento +talla +talón +tamaño +tambor +tango +tanque +tapa +tapete +tapia +tapón +taquilla +tarde +tarea +tarifa +tarjeta +tarot +tarro +tarta +tatuaje +tauro +taza +tazón +teatro +techo +tecla +técnica +tejado +tejer +tejido +tela +teléfono +tema +temor +templo +tenaz +tender +tener +tenis +tenso +teoría +terapia +terco +término +ternura +terror +tesis +tesoro +testigo +tetera +texto +tez +tibio +tiburón +tiempo +tienda +tierra +tieso +tigre +tijera +tilde +timbre +tímido +timo +tinta +tío +típico +tipo +tira +tirón +titán +títere +título +tiza +toalla +tobillo +tocar +tocino +todo +toga +toldo +tomar +tono +tonto +topar +tope +toque +tórax +torero +tormenta +torneo +toro +torpedo +torre +torso +tortuga +tos +tosco +toser +tóxico +trabajo +tractor +traer +tráfico +trago +traje +tramo +trance +trato +trauma +trazar +trébol +tregua +treinta +tren +trepar +tres +tribu +trigo +tripa +triste +triunfo +trofeo +trompa +tronco +tropa +trote +trozo +truco +trueno +trufa +tubería +tubo +tuerto +tumba +tumor +túnel +túnica +turbina +turismo +turno +tutor +ubicar +úlcera +umbral +unidad +unir +universo +uno +untar +uña +urbano +urbe +urgente +urna +usar +usuario +útil +utopía +uva +vaca +vacío +vacuna +vagar +vago +vaina +vajilla +vale +válido +valle +valor +válvula +vampiro +vara +variar +varón +vaso +vecino +vector +vehículo +veinte +vejez +vela +velero +veloz +vena +vencer +venda +veneno +vengar +venir +venta +venus +ver +verano +verbo +verde +vereda +verja +verso +verter +vía +viaje +vibrar +vicio +víctima +vida +vídeo +vidrio +viejo +viernes +vigor +vil +villa +vinagre +vino +viñedo +violín +viral +virgo +virtud +visor +víspera +vista +vitamina +viudo +vivaz +vivero +vivir +vivo +volcán +volumen +volver +voraz +votar +voto +voz +vuelo +vulgar +yacer +yate +yegua +yema +yerno +yeso +yodo +yoga +yogur +zafiro +zanja +zapato +zarza +zona +zorro +zumo +zurdo +` diff --git a/vendor/github.com/uber/jaeger-client-go/CHANGELOG.md b/vendor/github.com/uber/jaeger-client-go/CHANGELOG.md deleted file mode 100644 index 28e2c242558b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/CHANGELOG.md +++ /dev/null @@ -1,186 +0,0 @@ -Changes by Version -================== - -2.15.0 (unreleased) -------------------- - -- nothing yet - - -2.14.0 (2018-04-30) -------------------- - -- Support throttling for debug traces (#274) -- Remove dependency on Apache Thrift (#303) -- Remove dependency on tchannel (#295) (#294) -- Test with Go 1.9 (#298) - - -2.13.0 (2018-04-15) -------------------- - -- Use value receiver for config.NewTracer() (#283) -- Lock span during jaeger thrift conversion (#273) -- Fix the RemotelyControlledSampler so that it terminates go-routine on Close() (#260) -- Added support for client configuration via env vars (#275) -- Allow overriding sampler in the Config (#270) - - -2.12.0 (2018-03-14) -------------------- - -- Use lock when retrieving span.Context() (#268) -- Add Configuration support for custom Injector and Extractor (#263) - - -2.11.2 (2018-01-12) -------------------- - -- Add Gopkg.toml to allow using the lib with `dep` - - -2.11.1 (2018-01-03) -------------------- - -- Do not enqueue spans after Reporter is closed (#235, #245) -- Change default flush interval to 1sec (#243) - - -2.11.0 (2017-11-27) -------------------- - -- Normalize metric names and tags to be compatible with Prometheus (#222) - - -2.10.0 (2017-11-14) -------------------- - -- Support custom tracing headers (#176) -- Add BaggageRestrictionManager (#178) and RemoteBaggageRestrictionManager (#182) -- Do not coerce baggage keys to lower case (#196) -- Log span name when span cannot be reported (#198) -- Add option to enable gen128Bit for tracer (#193) and allow custom generator for high bits of trace ID (#219) - - -2.9.0 (2017-07-29) ------------------- - -- Pin thrift <= 0.10 (#179) -- Introduce a parallel interface ContribObserver (#159) - - -2.8.0 (2017-07-05) ------------------- - -- Drop `jaeger.` prefix from `jaeger.hostname` process-level tag -- Add options to set tracer tags - - -2.7.0 (2017-06-21) ------------------- - -- Fix rate limiter balance [#135](https://github.com/uber/jaeger-client-go/pull/135) [#140](https://github.com/uber/jaeger-client-go/pull/140) -- Default client to send Jaeger.thrift [#147](https://github.com/uber/jaeger-client-go/pull/147) -- Save baggage in span [#153](https://github.com/uber/jaeger-client-go/pull/153) -- Move reporter.queueLength to the top of the struct to guarantee 64bit alignment [#158](https://github.com/uber/jaeger-client-go/pull/158) -- Support HTTP transport with jaeger.thrift [#161](https://github.com/uber/jaeger-client-go/pull/161) - - -2.6.0 (2017-03-28) ------------------- - -- Add config option to initialize RPC Metrics feature - - -2.5.0 (2017-03-23) ------------------- - -- Split request latency metric by success/failure [#123](https://github.com/uber/jaeger-client-go/pull/123) -- Add mutex to adaptive sampler and fix race condition [#124](https://github.com/uber/jaeger-client-go/pull/124) -- Fix rate limiter panic [#125](https://github.com/uber/jaeger-client-go/pull/125) - - -2.4.0 (2017-03-21) ------------------- - -- Remove `_ms` suffix from request latency metric name [#121](https://github.com/uber/jaeger-client-go/pull/121) -- Rename all metrics to "request" and "http_request" and use tags for other dimensions [#121](https://github.com/uber/jaeger-client-go/pull/121) - - -2.3.0 (2017-03-20) ------------------- - -- Make Span type public to allow access to non-std methods for testing [#117](https://github.com/uber/jaeger-client-go/pull/117) -- Add a structured way to extract traces for logging with zap [#118](https://github.com/uber/jaeger-client-go/pull/118) - - -2.2.1 (2017-03-14) ------------------- - -- Fix panic caused by updating the remote sampler from adaptive sampler to any other sampler type (https://github.com/uber/jaeger-client-go/pull/111) - - -2.2.0 (2017-03-10) ------------------- - -- Introduce Observer and SpanObserver (https://github.com/uber/jaeger-client-go/pull/94) -- Add RPC metrics emitter as Observer/SpanObserver (https://github.com/uber/jaeger-client-go/pull/103) - - -2.1.2 (2017-02-27) -------------------- - -- Fix leaky bucket bug (https://github.com/uber/jaeger-client-go/pull/99) -- Fix zap logger Infof (https://github.com/uber/jaeger-client-go/pull/100) -- Add tracer initialization godoc examples - - -2.1.1 (2017-02-21) -------------------- - -- Fix inefficient usage of zap.Logger - - -2.1.0 (2017-02-17) -------------------- - -- Add adapter for zap.Logger (https://github.com/uber-go/zap) -- Move logging API to ./log/ package - - -2.0.0 (2017-02-08) -------------------- - -- Support Adaptive Sampling -- Support 128bit Trace IDs -- Change trace/span IDs from uint64 to strong types TraceID and SpanID -- Add Zipkin HTTP B3 Propagation format support #72 -- Rip out existing metrics and use github.com/uber/jaeger-lib/metrics -- Change API for tracer, reporter, sampler initialization - - -1.6.0 (2016-10-14) -------------------- - -- Add Zipkin HTTP transport -- Support external baggage via jaeger-baggage header -- Unpin Thrift version, keep to master - - -1.5.1 (2016-09-27) -------------------- - -- Relax dependency on opentracing to ^1 - - -1.5.0 (2016-09-27) -------------------- - -- Upgrade to opentracing-go 1.0 -- Support KV logging for Spans - - -1.4.0 (2016-09-14) -------------------- - -- Support debug traces via HTTP header "jaeger-debug-id" diff --git a/vendor/github.com/uber/jaeger-client-go/CONTRIBUTING.md b/vendor/github.com/uber/jaeger-client-go/CONTRIBUTING.md deleted file mode 100644 index 7cf014a51edb..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/CONTRIBUTING.md +++ /dev/null @@ -1,170 +0,0 @@ -# How to Contribute to Jaeger - -We'd love your help! - -Jaeger is [Apache 2.0 licensed](LICENSE) and accepts contributions via GitHub -pull requests. This document outlines some of the conventions on development -workflow, commit message formatting, contact points and other resources to make -it easier to get your contribution accepted. - -We gratefully welcome improvements to documentation as well as to code. - -# Certificate of Origin - -By contributing to this project you agree to the [Developer Certificate of -Origin](https://developercertificate.org/) (DCO). This document was created -by the Linux Kernel community and is a simple statement that you, as a -contributor, have the legal right to make the contribution. See the [DCO](DCO) -file for details. - -## Getting Started - -This library uses [glide](https://github.com/Masterminds/glide) to manage dependencies. - -To get started, make sure you clone the Git repository into the correct location -`github.com/uber/jaeger-client-go` relative to `$GOPATH`: - -``` -mkdir -p $GOPATH/src/github.com/uber -cd $GOPATH/src/github.com/uber -git clone git@github.com:jaegertracing/jaeger-client-go.git jaeger-client-go -cd jaeger-client-go -``` - -Then install dependencies and run the tests: - -``` -git submodule update --init --recursive -glide install -make test -``` - -## Imports grouping - -This projects follows the following pattern for grouping imports in Go files: - * imports from standard library - * imports from other projects - * imports from `jaeger-client-go` project - -For example: - -```go -import ( - "fmt" - - "github.com/uber/jaeger-lib/metrics" - "go.uber.org/zap" - - "github.com/uber/jaeger-client-go/config" -) -``` - -## Making A Change - -*Before making any significant changes, please [open an -issue](https://github.com/jaegertracing/jaeger-client-go/issues).* Discussing your proposed -changes ahead of time will make the contribution process smooth for everyone. - -Once we've discussed your changes and you've got your code ready, make sure -that tests are passing (`make test` or `make cover`) and open your PR. Your -pull request is most likely to be accepted if it: - -* Includes tests for new functionality. -* Follows the guidelines in [Effective - Go](https://golang.org/doc/effective_go.html) and the [Go team's common code - review comments](https://github.com/golang/go/wiki/CodeReviewComments). -* Has a [good commit message](https://chris.beams.io/posts/git-commit/): - * Separate subject from body with a blank line - * Limit the subject line to 50 characters - * Capitalize the subject line - * Do not end the subject line with a period - * Use the imperative mood in the subject line - * Wrap the body at 72 characters - * Use the body to explain _what_ and _why_ instead of _how_ -* Each commit must be signed by the author ([see below](#sign-your-work)). - -## License - -By contributing your code, you agree to license your contribution under the terms -of the [Apache License](LICENSE). - -If you are adding a new file it should have a header like below. The easiest -way to add such header is to run `make fmt`. - -``` -// Copyright (c) 2017 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -``` - -## Sign your work - -The sign-off is a simple line at the end of the explanation for the -patch, which certifies that you wrote it or otherwise have the right to -pass it on as an open-source patch. The rules are pretty simple: if you -can certify the below (from -[developercertificate.org](http://developercertificate.org/)): - -``` -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -660 York Street, Suite 102, -San Francisco, CA 94110 USA - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` - -then you just add a line to every git commit message: - - Signed-off-by: Joe Smith - -using your real name (sorry, no pseudonyms or anonymous contributions.) - -You can add the sign off when creating the git commit via `git commit -s`. - -If you want this to be automatic you can set up some aliases: - -``` -git config --add alias.amend "commit -s --amend" -git config --add alias.c "commit -s" -``` diff --git a/vendor/github.com/uber/jaeger-client-go/DCO b/vendor/github.com/uber/jaeger-client-go/DCO deleted file mode 100644 index 068953d4bd98..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/DCO +++ /dev/null @@ -1,37 +0,0 @@ -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -660 York Street, Suite 102, -San Francisco, CA 94110 USA - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - diff --git a/vendor/github.com/uber/jaeger-client-go/Gopkg.lock b/vendor/github.com/uber/jaeger-client-go/Gopkg.lock deleted file mode 100644 index ec054c6ed62a..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/Gopkg.lock +++ /dev/null @@ -1,164 +0,0 @@ -# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. - - -[[projects]] - branch = "master" - name = "github.com/beorn7/perks" - packages = ["quantile"] - revision = "3a771d992973f24aa725d07868b467d1ddfceafb" - -[[projects]] - branch = "master" - name = "github.com/codahale/hdrhistogram" - packages = ["."] - revision = "3a0bb77429bd3a61596f5e8a3172445844342120" - -[[projects]] - branch = "master" - name = "github.com/crossdock/crossdock-go" - packages = [ - ".", - "assert", - "require" - ] - revision = "049aabb0122b03bc9bd30cab8f3f91fb60166361" - -[[projects]] - name = "github.com/davecgh/go-spew" - packages = ["spew"] - revision = "346938d642f2ec3594ed81d874461961cd0faa76" - version = "v1.1.0" - -[[projects]] - name = "github.com/golang/protobuf" - packages = ["proto"] - revision = "925541529c1fa6821df4e44ce2723319eb2be768" - version = "v1.0.0" - -[[projects]] - name = "github.com/matttproud/golang_protobuf_extensions" - packages = ["pbutil"] - revision = "3247c84500bff8d9fb6d579d800f20b3e091582c" - version = "v1.0.0" - -[[projects]] - name = "github.com/opentracing/opentracing-go" - packages = [ - ".", - "ext", - "log" - ] - revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38" - version = "v1.0.2" - -[[projects]] - name = "github.com/pkg/errors" - packages = ["."] - revision = "645ef00459ed84a119197bfb8d8205042c6df63d" - version = "v0.8.0" - -[[projects]] - name = "github.com/pmezard/go-difflib" - packages = ["difflib"] - revision = "792786c7400a136282c1664665ae0a8db921c6c2" - version = "v1.0.0" - -[[projects]] - name = "github.com/prometheus/client_golang" - packages = ["prometheus"] - revision = "c5b7fccd204277076155f10851dad72b76a49317" - version = "v0.8.0" - -[[projects]] - branch = "master" - name = "github.com/prometheus/client_model" - packages = ["go"] - revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c" - -[[projects]] - branch = "master" - name = "github.com/prometheus/common" - packages = [ - "expfmt", - "internal/bitbucket.org/ww/goautoneg", - "model" - ] - revision = "d811d2e9bf898806ecfb6ef6296774b13ffc314c" - -[[projects]] - branch = "master" - name = "github.com/prometheus/procfs" - packages = [ - ".", - "internal/util", - "nfs", - "xfs" - ] - revision = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e" - -[[projects]] - name = "github.com/stretchr/testify" - packages = [ - "assert", - "require", - "suite" - ] - revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71" - version = "v1.2.1" - -[[projects]] - name = "github.com/uber-go/atomic" - packages = ["."] - revision = "8474b86a5a6f79c443ce4b2992817ff32cf208b8" - version = "v1.3.1" - -[[projects]] - name = "github.com/uber/jaeger-lib" - packages = [ - "metrics", - "metrics/prometheus", - "metrics/testutils" - ] - revision = "4267858c0679cd4e47cefed8d7f70fd386cfb567" - version = "v1.4.0" - -[[projects]] - name = "go.uber.org/atomic" - packages = ["."] - revision = "54f72d32435d760d5604f17a82e2435b28dc4ba5" - version = "v1.3.0" - -[[projects]] - name = "go.uber.org/multierr" - packages = ["."] - revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a" - version = "v1.1.0" - -[[projects]] - name = "go.uber.org/zap" - packages = [ - ".", - "buffer", - "internal/bufferpool", - "internal/color", - "internal/exit", - "zapcore" - ] - revision = "eeedf312bc6c57391d84767a4cd413f02a917974" - version = "v1.8.0" - -[[projects]] - branch = "master" - name = "golang.org/x/net" - packages = [ - "context", - "context/ctxhttp" - ] - revision = "5f9ae10d9af5b1c89ae6904293b14b064d4ada23" - -[solve-meta] - analyzer-name = "dep" - analyzer-version = 1 - inputs-digest = "f9dcfaf37a785c5dac1e20c29605eda29a83ba9c6f8842e92960dc94c8c4ff80" - solver-name = "gps-cdcl" - solver-version = 1 diff --git a/vendor/github.com/uber/jaeger-client-go/Gopkg.toml b/vendor/github.com/uber/jaeger-client-go/Gopkg.toml deleted file mode 100644 index baf7a6bdf7ae..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/Gopkg.toml +++ /dev/null @@ -1,27 +0,0 @@ -[[constraint]] - name = "github.com/crossdock/crossdock-go" - branch = "master" - -[[constraint]] - name = "github.com/opentracing/opentracing-go" - version = "^1" - -[[constraint]] - name = "github.com/prometheus/client_golang" - version = "0.8.0" - -[[constraint]] - name = "github.com/stretchr/testify" - version = "^1.1.3" - -[[constraint]] - name = "github.com/uber-go/atomic" - version = "^1" - -[[constraint]] - name = "github.com/uber/jaeger-lib" - version = "^1.3" - -[[constraint]] - name = "go.uber.org/zap" - version = "^1" diff --git a/vendor/github.com/uber/jaeger-client-go/LICENSE b/vendor/github.com/uber/jaeger-client-go/LICENSE deleted file mode 100644 index 261eeb9e9f8b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/uber/jaeger-client-go/Makefile b/vendor/github.com/uber/jaeger-client-go/Makefile deleted file mode 100644 index 601cc65148e2..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/Makefile +++ /dev/null @@ -1,117 +0,0 @@ -PROJECT_ROOT=github.com/uber/jaeger-client-go -PACKAGES := $(shell glide novendor | grep -v -e ./thrift-gen/... -e ./thrift/...) -# all .go files that don't exist in hidden directories -ALL_SRC := $(shell find . -name "*.go" | grep -v -e vendor -e thrift-gen -e ./thrift/ \ - -e ".*/\..*" \ - -e ".*/_.*" \ - -e ".*/mocks.*") - --include crossdock/rules.mk - -export GO15VENDOREXPERIMENT=1 - -RACE=-race -GOTEST=go test -v $(RACE) -GOLINT=golint -GOVET=go vet -GOFMT=gofmt -FMT_LOG=fmt.log -LINT_LOG=lint.log - -THRIFT_VER=0.9.3 -THRIFT_IMG=thrift:$(THRIFT_VER) -THRIFT=docker run -v "${PWD}:/data" $(THRIFT_IMG) thrift -THRIFT_GO_ARGS=thrift_import="github.com/apache/thrift/lib/go/thrift" -THRIFT_GEN_DIR=thrift-gen - -PASS=$(shell printf "\033[32mPASS\033[0m") -FAIL=$(shell printf "\033[31mFAIL\033[0m") -COLORIZE=sed ''/PASS/s//$(PASS)/'' | sed ''/FAIL/s//$(FAIL)/'' - -.DEFAULT_GOAL := test-and-lint - -.PHONY: test-and-lint -test-and-lint: test fmt lint - -.PHONY: test -test: - bash -c "set -e; set -o pipefail; $(GOTEST) $(PACKAGES) | $(COLORIZE)" - -.PHONY: fmt -fmt: - $(GOFMT) -e -s -l -w $(ALL_SRC) - ./scripts/updateLicenses.sh - -.PHONY: lint -lint: - $(GOVET) $(PACKAGES) - @cat /dev/null > $(LINT_LOG) - @$(foreach pkg, $(PACKAGES), $(GOLINT) $(pkg) | grep -v crossdock/thrift >> $(LINT_LOG) || true;) - @[ ! -s "$(LINT_LOG)" ] || (echo "Lint Failures" | cat - $(LINT_LOG) && false) - @$(GOFMT) -e -s -l $(ALL_SRC) > $(FMT_LOG) - ./scripts/updateLicenses.sh >> $(FMT_LOG) - @[ ! -s "$(FMT_LOG)" ] || (echo "go fmt or license check failures, run 'make fmt'" | cat - $(FMT_LOG) && false) - - -.PHONY: install -install: - glide --version || go get github.com/Masterminds/glide -ifeq ($(USE_DEP),true) - dep ensure -else - glide install -endif - - -.PHONY: cover -cover: - ./scripts/cover.sh $(shell go list $(PACKAGES)) - go tool cover -html=cover.out -o cover.html - - -# This is not part of the regular test target because we don't want to slow it -# down. -.PHONY: test-examples -test-examples: - make -C examples - -# TODO at the moment we're not generating tchan_*.go files -thrift: idl-submodule thrift-image - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/$(THRIFT_GEN_DIR) /data/idl/thrift/agent.thrift - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/$(THRIFT_GEN_DIR) /data/idl/thrift/sampling.thrift - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/$(THRIFT_GEN_DIR) /data/idl/thrift/jaeger.thrift - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/$(THRIFT_GEN_DIR) /data/idl/thrift/zipkincore.thrift - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/$(THRIFT_GEN_DIR) /data/idl/thrift/baggage.thrift - $(THRIFT) -o /data --gen go:$(THRIFT_GO_ARGS) --out /data/crossdock/thrift/ /data/idl/thrift/crossdock/tracetest.thrift - sed -i '' 's|"zipkincore"|"$(PROJECT_ROOT)/thrift-gen/zipkincore"|g' $(THRIFT_GEN_DIR)/agent/*.go - sed -i '' 's|"jaeger"|"$(PROJECT_ROOT)/thrift-gen/jaeger"|g' $(THRIFT_GEN_DIR)/agent/*.go - sed -i '' 's|"github.com/apache/thrift/lib/go/thrift"|"github.com/uber/jaeger-client-go/thrift"|g' \ - $(THRIFT_GEN_DIR)/*/*.go crossdock/thrift/tracetest/*.go - rm -rf thrift-gen/*/*-remote - rm -rf crossdock/thrift/*/*-remote - rm -rf thrift-gen/jaeger/collector.go - -idl-submodule: - git submodule init - git submodule update - -thrift-image: - $(THRIFT) -version - -.PHONY: install-dep-ci -install-dep-ci: - - curl -L -s https://github.com/golang/dep/releases/download/v0.3.2/dep-linux-amd64 -o $$GOPATH/bin/dep - - chmod +x $$GOPATH/bin/dep - -.PHONY: install-ci -install-ci: install-dep-ci install - go get github.com/wadey/gocovmerge - go get github.com/mattn/goveralls - go get golang.org/x/tools/cmd/cover - go get github.com/golang/lint/golint - -.PHONY: test-ci -test-ci: - @./scripts/cover.sh $(shell go list $(PACKAGES)) - make lint - diff --git a/vendor/github.com/uber/jaeger-client-go/README.md b/vendor/github.com/uber/jaeger-client-go/README.md deleted file mode 100644 index 16b04454e168..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/README.md +++ /dev/null @@ -1,260 +0,0 @@ -[![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov] [![OpenTracing 1.0 Enabled][ot-img]][ot-url] - -# Jaeger Bindings for Go OpenTracing API - -Instrumentation library that implements an -[OpenTracing](http://opentracing.io) Tracer for Jaeger (https://jaegertracing.io). - -**IMPORTANT**: The library's import path is based on its original location under `github.com/uber`. Do not try to import it as `github.com/jaegertracing`, it will not compile. We might revisit this in the next major release. - * :white_check_mark: `import "github.com/uber/jaeger-client-go"` - * :x: `import "github.com/jaegertracing/jaeger-client-go"` - -## How to Contribute - -Please see [CONTRIBUTING.md](CONTRIBUTING.md). - -## Installation - -We recommended using a dependency manager like [glide](https://github.com/Masterminds/glide) -and [semantic versioning](http://semver.org/) when including this library into an application. -For example, Jaeger backend imports this library like this: - -```yaml -- package: github.com/uber/jaeger-client-go - version: ^2.7.0 -``` - -If you instead want to use the latest version in `master`, you can pull it via `go get`. -Note that during `go get` you may see build errors due to incompatible dependencies, which is why -we recommend using semantic versions for dependencies. The error may be fixed by running -`make install` (it will install `glide` if you don't have it): - -```shell -go get -u github.com/uber/jaeger-client-go/ -cd $GOPATH/src/github.com/uber/jaeger-client-go/ -git submodule update --init --recursive -make install -``` - -## Initialization - -See tracer initialization examples in [godoc](https://godoc.org/github.com/uber/jaeger-client-go/config#pkg-examples) -and [config/example_test.go](./config/example_test.go). - -### Environment variables - -The tracer can be initialized with values coming from environment variables. None of the env vars are required -and all of them can be overriden via direct setting of the property on the configuration object. - -Property| Description ---- | --- -JAEGER_SERVICE_NAME | The service name -JAEGER_AGENT_HOST | The hostname for communicating with agent via UDP -JAEGER_AGENT_PORT | The port for communicating with agent via UDP -JAEGER_REPORTER_LOG_SPANS | Whether the reporter should also log the spans -JAEGER_REPORTER_MAX_QUEUE_SIZE | The reporter's maximum queue size -JAEGER_REPORTER_FLUSH_INTERVAL | The reporter's flush interval (ms) -JAEGER_SAMPLER_TYPE | The sampler type -JAEGER_SAMPLER_PARAM | The sampler parameter (number) -JAEGER_SAMPLER_MANAGER_HOST_PORT | The host name and port when using the remote controlled sampler -JAEGER_SAMPLER_MAX_OPERATIONS | The maximum number of operations that the sampler will keep track of -JAEGER_SAMPLER_REFRESH_INTERVAL | How often the remotely controlled sampler will poll jaeger-agent for the appropriate sampling strategy -JAEGER_TAGS | A comma separated list of `name = value` tracer level tags, which get added to all reported spans. The value can also refer to an environment variable using the format `${envVarName:default}`, where the `:default` is optional, and identifies a value to be used if the environment variable cannot be found -JAEGER_DISABLED | Whether the tracer is disabled or not. If true, the default `opentracing.NoopTracer` is used. -JAEGER_RPC_METRICS | Whether to store RPC metrics - -### Closing the tracer via `io.Closer` - -The constructor function for Jaeger Tracer returns the tracer itself and an `io.Closer` instance. -It is recommended to structure your `main()` so that it calls the `Close()` function on the closer -before exiting, e.g. - -```go -tracer, closer, err := cfg.NewTracer(...) -defer closer.Close() -``` - -This is especially useful for command-line tools that enable tracing, as well as -for the long-running apps that support graceful shutdown. For example, if your deployment -system sends SIGTERM instead of killing the process and you trap that signal to do a graceful -exit, then having `defer closer.Closer()` ensures that all buffered spans are flushed. - -### Metrics & Monitoring - -The tracer emits a number of different metrics, defined in -[metrics.go](metrics.go). The monitoring backend is expected to support -tag-based metric names, e.g. instead of `statsd`-style string names -like `counters.my-service.jaeger.spans.started.sampled`, the metrics -are defined by a short name and a collection of key/value tags, for -example: `name:jaeger.traces, state:started, sampled:y`. See [metrics.go](./metrics.go) -file for the full list and descriptions of emitted metrics. - -The monitoring backend is represented by the `metrics.Factory` interface from package -[`"github.com/uber/jaeger-lib/metrics"`](https://github.com/jaegertracing/jaeger-lib/tree/master/metrics). An implementation -of that interface can be passed as an option to either the Configuration object or the Tracer -constructor, for example: - -```go -import ( - "github.com/uber/jaeger-client-go/config" - "github.com/uber/jaeger-lib/metrics/prometheus" -) - - metricsFactory := prometheus.New() - tracer, closer, err := config.Configuration{ - ServiceName: "your-service-name", - }.NewTracer( - config.Metrics(metricsFactory), - ) -``` - -By default, a no-op `metrics.NullFactory` is used. - -### Logging - -The tracer can be configured with an optional logger, which will be -used to log communication errors, or log spans if a logging reporter -option is specified in the configuration. The logging API is abstracted -by the [Logger](logger.go) interface. A logger instance implementing -this interface can be set on the `Config` object before calling the -`New` method. - -Besides the [zap](https://github.com/uber-go/zap) implementation -bundled with this package there is also a [go-kit](https://github.com/go-kit/kit) -one in the [jaeger-lib](https://github.com/jaegertracing/jaeger-lib) repository. - -## Instrumentation for Tracing - -Since this tracer is fully compliant with OpenTracing API 1.0, -all code instrumentation should only use the API itself, as described -in the [opentracing-go](https://github.com/opentracing/opentracing-go) documentation. - -## Features - -### Reporters - -A "reporter" is a component that receives the finished spans and reports -them to somewhere. Under normal circumstances, the Tracer -should use the default `RemoteReporter`, which sends the spans out of -process via configurable "transport". For testing purposes, one can -use an `InMemoryReporter` that accumulates spans in a buffer and -allows to retrieve them for later verification. Also available are -`NullReporter`, a no-op reporter that does nothing, a `LoggingReporter` -which logs all finished spans using their `String()` method, and a -`CompositeReporter` that can be used to combine more than one reporter -into one, e.g. to attach a logging reporter to the main remote reporter. - -### Span Reporting Transports - -The remote reporter uses "transports" to actually send the spans out -of process. Currently the supported transports include: - * [Jaeger Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/agent.thrift) over UDP or HTTP, - * [Zipkin Thrift](https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/zipkincore.thrift) over HTTP. - -### Sampling - -The tracer does not record all spans, but only those that have the -sampling bit set in the `flags`. When a new trace is started and a new -unique ID is generated, a sampling decision is made whether this trace -should be sampled. The sampling decision is propagated to all downstream -calls via the `flags` field of the trace context. The following samplers -are available: - 1. `RemotelyControlledSampler` uses one of the other simpler samplers - and periodically updates it by polling an external server. This - allows dynamic control of the sampling strategies. - 1. `ConstSampler` always makes the same sampling decision for all - trace IDs. it can be configured to either sample all traces, or - to sample none. - 1. `ProbabilisticSampler` uses a fixed sampling rate as a probability - for a given trace to be sampled. The actual decision is made by - comparing the trace ID with a random number multiplied by the - sampling rate. - 1. `RateLimitingSampler` can be used to allow only a certain fixed - number of traces to be sampled per second. - -### Baggage Injection - -The OpenTracing spec allows for [baggage][baggage], which are key value pairs that are added -to the span context and propagated throughout the trace. An external process can inject baggage -by setting the special HTTP Header `jaeger-baggage` on a request: - -```sh -curl -H "jaeger-baggage: key1=value1, key2=value2" http://myhost.com -``` - -Baggage can also be programatically set inside your service: - -```go -if span := opentracing.SpanFromContext(ctx); span != nil { - span.SetBaggageItem("key", "value") -} -``` - -Another service downstream of that can retrieve the baggage in a similar way: - -```go -if span := opentracing.SpanFromContext(ctx); span != nil { - val := span.BaggageItem("key") - println(val) -} -``` - -### Debug Traces (Forced Sampling) - -#### Programmatically - -The OpenTracing API defines a `sampling.priority` standard tag that -can be used to affect the sampling of a span and its children: - -```go -import ( - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" -) - -span := opentracing.SpanFromContext(ctx) -ext.SamplingPriority.Set(span, 1) -``` - -#### Via HTTP Headers - -Jaeger Tracer also understands a special HTTP Header `jaeger-debug-id`, -which can be set in the incoming request, e.g. - -```sh -curl -H "jaeger-debug-id: some-correlation-id" http://myhost.com -``` - -When Jaeger sees this header in the request that otherwise has no -tracing context, it ensures that the new trace started for this -request will be sampled in the "debug" mode (meaning it should survive -all downsampling that might happen in the collection pipeline), and the -root span will have a tag as if this statement was executed: - -```go -span.SetTag("jaeger-debug-id", "some-correlation-id") -``` - -This allows using Jaeger UI to find the trace by this tag. - -### Zipkin HTTP B3 compatible header propagation - -Jaeger Tracer supports Zipkin B3 Propagation HTTP headers, which are used -by a lot of Zipkin tracers. This means that you can use Jaeger in conjunction with e.g. [these OpenZipkin tracers](https://github.com/openzipkin). - -However it is not the default propagation format, see [here](zipkin/README.md#NewZipkinB3HTTPHeaderPropagator) how to set it up. - -## License - -[Apache 2.0 License](LICENSE). - - -[doc-img]: https://godoc.org/github.com/uber/jaeger-client-go?status.svg -[doc]: https://godoc.org/github.com/uber/jaeger-client-go -[ci-img]: https://travis-ci.org/jaegertracing/jaeger-client-go.svg?branch=master -[ci]: https://travis-ci.org/jaegertracing/jaeger-client-go -[cov-img]: https://codecov.io/gh/jaegertracing/jaeger-client-go/branch/master/graph/badge.svg -[cov]: https://codecov.io/gh/jaegertracing/jaeger-client-go -[ot-img]: https://img.shields.io/badge/OpenTracing--1.0-enabled-blue.svg -[ot-url]: http://opentracing.io -[baggage]: https://github.com/opentracing/specification/blob/master/specification.md#set-a-baggage-item diff --git a/vendor/github.com/uber/jaeger-client-go/RELEASE.md b/vendor/github.com/uber/jaeger-client-go/RELEASE.md deleted file mode 100644 index 115e49ab8ad3..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/RELEASE.md +++ /dev/null @@ -1,11 +0,0 @@ -# Release Process - -1. Create a PR "Preparing for release X.Y.Z" against master branch - * Alter CHANGELOG.md from ` (unreleased)` to ` (YYYY-MM-DD)` - * Update `JaegerClientVersion` in constants.go to `Go-X.Y.Z` -2. Create a release "Release X.Y.Z" on Github - * Create Tag `vX.Y.Z` - * Copy CHANGELOG.md into the release notes -3. Create a PR "Back to development" against master branch - * Add ` (unreleased)` to CHANGELOG.md - * Update `JaegerClientVersion` in constants.go to `Go-dev` diff --git a/vendor/github.com/uber/jaeger-client-go/baggage_setter.go b/vendor/github.com/uber/jaeger-client-go/baggage_setter.go deleted file mode 100644 index 1037ca0e861d..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/baggage_setter.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "github.com/opentracing/opentracing-go/log" - - "github.com/uber/jaeger-client-go/internal/baggage" -) - -// baggageSetter is an actor that can set a baggage value on a Span given certain -// restrictions (eg. maxValueLength). -type baggageSetter struct { - restrictionManager baggage.RestrictionManager - metrics *Metrics -} - -func newBaggageSetter(restrictionManager baggage.RestrictionManager, metrics *Metrics) *baggageSetter { - return &baggageSetter{ - restrictionManager: restrictionManager, - metrics: metrics, - } -} - -// (NB) span should hold the lock before making this call -func (s *baggageSetter) setBaggage(span *Span, key, value string) { - var truncated bool - var prevItem string - restriction := s.restrictionManager.GetRestriction(span.serviceName(), key) - if !restriction.KeyAllowed() { - s.logFields(span, key, value, prevItem, truncated, restriction.KeyAllowed()) - s.metrics.BaggageUpdateFailure.Inc(1) - return - } - if len(value) > restriction.MaxValueLength() { - truncated = true - value = value[:restriction.MaxValueLength()] - s.metrics.BaggageTruncate.Inc(1) - } - prevItem = span.context.baggage[key] - s.logFields(span, key, value, prevItem, truncated, restriction.KeyAllowed()) - span.context = span.context.WithBaggageItem(key, value) - s.metrics.BaggageUpdateSuccess.Inc(1) -} - -func (s *baggageSetter) logFields(span *Span, key, value, prevItem string, truncated, valid bool) { - if !span.context.IsSampled() { - return - } - fields := []log.Field{ - log.String("event", "baggage"), - log.String("key", key), - log.String("value", value), - } - if prevItem != "" { - fields = append(fields, log.String("override", "true")) - } - if truncated { - fields = append(fields, log.String("truncated", "true")) - } - if !valid { - fields = append(fields, log.String("invalid", "true")) - } - span.logFieldsNoLocking(fields...) -} diff --git a/vendor/github.com/uber/jaeger-client-go/config/config.go b/vendor/github.com/uber/jaeger-client-go/config/config.go deleted file mode 100644 index 1eb29677854e..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/config/config.go +++ /dev/null @@ -1,373 +0,0 @@ -// Copyright (c) 2017-2018 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package config - -import ( - "errors" - "fmt" - "io" - "strings" - "time" - - "github.com/opentracing/opentracing-go" - - "github.com/uber/jaeger-client-go" - "github.com/uber/jaeger-client-go/internal/baggage/remote" - throttler "github.com/uber/jaeger-client-go/internal/throttler/remote" - "github.com/uber/jaeger-client-go/rpcmetrics" -) - -const defaultSamplingProbability = 0.001 - -// Configuration configures and creates Jaeger Tracer -type Configuration struct { - // ServiceName specifies the service name to use on the tracer. - // Can be provided via environment variable named JAEGER_SERVICE_NAME - ServiceName string `yaml:"serviceName"` - - // Disabled can be provided via environment variable named JAEGER_DISABLED - Disabled bool `yaml:"disabled"` - - // RPCMetrics can be provided via environment variable named JAEGER_RPC_METRICS - RPCMetrics bool `yaml:"rpc_metrics"` - - // Tags can be provided via environment variable named JAEGER_TAGS - Tags []opentracing.Tag `yaml:"tags"` - - Sampler *SamplerConfig `yaml:"sampler"` - Reporter *ReporterConfig `yaml:"reporter"` - Headers *jaeger.HeadersConfig `yaml:"headers"` - BaggageRestrictions *BaggageRestrictionsConfig `yaml:"baggage_restrictions"` - Throttler *ThrottlerConfig `yaml:"throttler"` -} - -// SamplerConfig allows initializing a non-default sampler. All fields are optional. -type SamplerConfig struct { - // Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote - // Can be set by exporting an environment variable named JAEGER_SAMPLER_TYPE - Type string `yaml:"type"` - - // Param is a value passed to the sampler. - // Valid values for Param field are: - // - for "const" sampler, 0 or 1 for always false/true respectively - // - for "probabilistic" sampler, a probability between 0 and 1 - // - for "rateLimiting" sampler, the number of spans per second - // - for "remote" sampler, param is the same as for "probabilistic" - // and indicates the initial sampling rate before the actual one - // is received from the mothership. - // Can be set by exporting an environment variable named JAEGER_SAMPLER_PARAM - Param float64 `yaml:"param"` - - // SamplingServerURL is the address of jaeger-agent's HTTP sampling server - // Can be set by exporting an environment variable named JAEGER_SAMPLER_MANAGER_HOST_PORT - SamplingServerURL string `yaml:"samplingServerURL"` - - // MaxOperations is the maximum number of operations that the sampler - // will keep track of. If an operation is not tracked, a default probabilistic - // sampler will be used rather than the per operation specific sampler. - // Can be set by exporting an environment variable named JAEGER_SAMPLER_MAX_OPERATIONS - MaxOperations int `yaml:"maxOperations"` - - // SamplingRefreshInterval controls how often the remotely controlled sampler will poll - // jaeger-agent for the appropriate sampling strategy. - // Can be set by exporting an environment variable named JAEGER_SAMPLER_REFRESH_INTERVAL - SamplingRefreshInterval time.Duration `yaml:"samplingRefreshInterval"` -} - -// ReporterConfig configures the reporter. All fields are optional. -type ReporterConfig struct { - // QueueSize controls how many spans the reporter can keep in memory before it starts dropping - // new spans. The queue is continuously drained by a background go-routine, as fast as spans - // can be sent out of process. - // Can be set by exporting an environment variable named JAEGER_REPORTER_MAX_QUEUE_SIZE - QueueSize int `yaml:"queueSize"` - - // BufferFlushInterval controls how often the buffer is force-flushed, even if it's not full. - // It is generally not useful, as it only matters for very low traffic services. - // Can be set by exporting an environment variable named JAEGER_REPORTER_FLUSH_INTERVAL - BufferFlushInterval time.Duration - - // LogSpans, when true, enables LoggingReporter that runs in parallel with the main reporter - // and logs all submitted spans. Main Configuration.Logger must be initialized in the code - // for this option to have any effect. - // Can be set by exporting an environment variable named JAEGER_REPORTER_LOG_SPANS - LogSpans bool `yaml:"logSpans"` - - // LocalAgentHostPort instructs reporter to send spans to jaeger-agent at this address - // Can be set by exporting an environment variable named JAEGER_AGENT_HOST / JAEGER_AGENT_PORT - LocalAgentHostPort string `yaml:"localAgentHostPort"` -} - -// BaggageRestrictionsConfig configures the baggage restrictions manager which can be used to whitelist -// certain baggage keys. All fields are optional. -type BaggageRestrictionsConfig struct { - // DenyBaggageOnInitializationFailure controls the startup failure mode of the baggage restriction - // manager. If true, the manager will not allow any baggage to be written until baggage restrictions have - // been retrieved from jaeger-agent. If false, the manager wil allow any baggage to be written until baggage - // restrictions have been retrieved from jaeger-agent. - DenyBaggageOnInitializationFailure bool `yaml:"denyBaggageOnInitializationFailure"` - - // HostPort is the hostPort of jaeger-agent's baggage restrictions server - HostPort string `yaml:"hostPort"` - - // RefreshInterval controls how often the baggage restriction manager will poll - // jaeger-agent for the most recent baggage restrictions. - RefreshInterval time.Duration `yaml:"refreshInterval"` -} - -// ThrottlerConfig configures the throttler which can be used to throttle the -// rate at which the client may send debug requests. -type ThrottlerConfig struct { - // HostPort of jaeger-agent's credit server. - HostPort string `yaml:"hostPort"` - - // RefreshInterval controls how often the throttler will poll jaeger-agent - // for more throttling credits. - RefreshInterval time.Duration `yaml:"refreshInterval"` - - // SynchronousInitialization determines whether or not the throttler should - // synchronously fetch credits from the agent when an operation is seen for - // the first time. This should be set to true if the client will be used by - // a short lived service that needs to ensure that credits are fetched - // upfront such that sampling or throttling occurs. - SynchronousInitialization bool `yaml:"synchronousInitialization"` -} - -type nullCloser struct{} - -func (*nullCloser) Close() error { return nil } - -// New creates a new Jaeger Tracer, and a closer func that can be used to flush buffers -// before shutdown. -// -// Deprecated: use NewTracer() function -func (c Configuration) New( - serviceName string, - options ...Option, -) (opentracing.Tracer, io.Closer, error) { - if serviceName != "" { - c.ServiceName = serviceName - } - - return c.NewTracer(options...) -} - -// NewTracer returns a new tracer based on the current configuration, using the given options, -// and a closer func that can be used to flush buffers before shutdown. -func (c Configuration) NewTracer(options ...Option) (opentracing.Tracer, io.Closer, error) { - if c.ServiceName == "" { - return nil, nil, errors.New("no service name provided") - } - - if c.Disabled { - return &opentracing.NoopTracer{}, &nullCloser{}, nil - } - opts := applyOptions(options...) - tracerMetrics := jaeger.NewMetrics(opts.metrics, nil) - if c.RPCMetrics { - Observer( - rpcmetrics.NewObserver( - opts.metrics.Namespace("jaeger-rpc", map[string]string{"component": "jaeger"}), - rpcmetrics.DefaultNameNormalizer, - ), - )(&opts) // adds to c.observers - } - if c.Sampler == nil { - c.Sampler = &SamplerConfig{ - Type: jaeger.SamplerTypeRemote, - Param: defaultSamplingProbability, - } - } - if c.Reporter == nil { - c.Reporter = &ReporterConfig{} - } - - sampler := opts.sampler - if sampler == nil { - s, err := c.Sampler.NewSampler(c.ServiceName, tracerMetrics) - if err != nil { - return nil, nil, err - } - sampler = s - } - - reporter := opts.reporter - if reporter == nil { - r, err := c.Reporter.NewReporter(c.ServiceName, tracerMetrics, opts.logger) - if err != nil { - return nil, nil, err - } - reporter = r - } - - tracerOptions := []jaeger.TracerOption{ - jaeger.TracerOptions.Metrics(tracerMetrics), - jaeger.TracerOptions.Logger(opts.logger), - jaeger.TracerOptions.CustomHeaderKeys(c.Headers), - jaeger.TracerOptions.Gen128Bit(opts.gen128Bit), - jaeger.TracerOptions.ZipkinSharedRPCSpan(opts.zipkinSharedRPCSpan), - jaeger.TracerOptions.MaxTagValueLength(opts.maxTagValueLength), - } - - for _, tag := range opts.tags { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.Tag(tag.Key, tag.Value)) - } - - for _, tag := range c.Tags { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.Tag(tag.Key, tag.Value)) - } - - for _, obs := range opts.observers { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.Observer(obs)) - } - - for _, cobs := range opts.contribObservers { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.ContribObserver(cobs)) - } - - for format, injector := range opts.injectors { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.Injector(format, injector)) - } - - for format, extractor := range opts.extractors { - tracerOptions = append(tracerOptions, jaeger.TracerOptions.Extractor(format, extractor)) - } - - if c.BaggageRestrictions != nil { - mgr := remote.NewRestrictionManager( - c.ServiceName, - remote.Options.Metrics(tracerMetrics), - remote.Options.Logger(opts.logger), - remote.Options.HostPort(c.BaggageRestrictions.HostPort), - remote.Options.RefreshInterval(c.BaggageRestrictions.RefreshInterval), - remote.Options.DenyBaggageOnInitializationFailure( - c.BaggageRestrictions.DenyBaggageOnInitializationFailure, - ), - ) - tracerOptions = append(tracerOptions, jaeger.TracerOptions.BaggageRestrictionManager(mgr)) - } - - if c.Throttler != nil { - debugThrottler := throttler.NewThrottler( - c.ServiceName, - throttler.Options.Metrics(tracerMetrics), - throttler.Options.Logger(opts.logger), - throttler.Options.HostPort(c.Throttler.HostPort), - throttler.Options.RefreshInterval(c.Throttler.RefreshInterval), - throttler.Options.SynchronousInitialization( - c.Throttler.SynchronousInitialization, - ), - ) - - tracerOptions = append(tracerOptions, jaeger.TracerOptions.DebugThrottler(debugThrottler)) - } - - tracer, closer := jaeger.NewTracer( - c.ServiceName, - sampler, - reporter, - tracerOptions..., - ) - - return tracer, closer, nil -} - -// InitGlobalTracer creates a new Jaeger Tracer, and sets it as global OpenTracing Tracer. -// It returns a closer func that can be used to flush buffers before shutdown. -func (c Configuration) InitGlobalTracer( - serviceName string, - options ...Option, -) (io.Closer, error) { - if c.Disabled { - return &nullCloser{}, nil - } - tracer, closer, err := c.New(serviceName, options...) - if err != nil { - return nil, err - } - opentracing.SetGlobalTracer(tracer) - return closer, nil -} - -// NewSampler creates a new sampler based on the configuration -func (sc *SamplerConfig) NewSampler( - serviceName string, - metrics *jaeger.Metrics, -) (jaeger.Sampler, error) { - samplerType := strings.ToLower(sc.Type) - if samplerType == jaeger.SamplerTypeConst { - return jaeger.NewConstSampler(sc.Param != 0), nil - } - if samplerType == jaeger.SamplerTypeProbabilistic { - if sc.Param >= 0 && sc.Param <= 1.0 { - return jaeger.NewProbabilisticSampler(sc.Param) - } - return nil, fmt.Errorf( - "Invalid Param for probabilistic sampler: %v. Expecting value between 0 and 1", - sc.Param, - ) - } - if samplerType == jaeger.SamplerTypeRateLimiting { - return jaeger.NewRateLimitingSampler(sc.Param), nil - } - if samplerType == jaeger.SamplerTypeRemote || sc.Type == "" { - sc2 := *sc - sc2.Type = jaeger.SamplerTypeProbabilistic - initSampler, err := sc2.NewSampler(serviceName, nil) - if err != nil { - return nil, err - } - options := []jaeger.SamplerOption{ - jaeger.SamplerOptions.Metrics(metrics), - jaeger.SamplerOptions.InitialSampler(initSampler), - jaeger.SamplerOptions.SamplingServerURL(sc.SamplingServerURL), - } - if sc.MaxOperations != 0 { - options = append(options, jaeger.SamplerOptions.MaxOperations(sc.MaxOperations)) - } - if sc.SamplingRefreshInterval != 0 { - options = append(options, jaeger.SamplerOptions.SamplingRefreshInterval(sc.SamplingRefreshInterval)) - } - return jaeger.NewRemotelyControlledSampler(serviceName, options...), nil - } - return nil, fmt.Errorf("Unknown sampler type %v", sc.Type) -} - -// NewReporter instantiates a new reporter that submits spans to tcollector -func (rc *ReporterConfig) NewReporter( - serviceName string, - metrics *jaeger.Metrics, - logger jaeger.Logger, -) (jaeger.Reporter, error) { - sender, err := rc.newTransport() - if err != nil { - return nil, err - } - reporter := jaeger.NewRemoteReporter( - sender, - jaeger.ReporterOptions.QueueSize(rc.QueueSize), - jaeger.ReporterOptions.BufferFlushInterval(rc.BufferFlushInterval), - jaeger.ReporterOptions.Logger(logger), - jaeger.ReporterOptions.Metrics(metrics)) - if rc.LogSpans && logger != nil { - logger.Infof("Initializing logging reporter\n") - reporter = jaeger.NewCompositeReporter(jaeger.NewLoggingReporter(logger), reporter) - } - return reporter, err -} - -func (rc *ReporterConfig) newTransport() (jaeger.Transport, error) { - return jaeger.NewUDPTransport(rc.LocalAgentHostPort, 0) -} diff --git a/vendor/github.com/uber/jaeger-client-go/config/config_env.go b/vendor/github.com/uber/jaeger-client-go/config/config_env.go deleted file mode 100644 index 96f170c539d9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/config/config_env.go +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright (c) 2018 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package config - -import ( - "fmt" - "os" - "strconv" - "strings" - "time" - - opentracing "github.com/opentracing/opentracing-go" - "github.com/pkg/errors" - - "github.com/uber/jaeger-client-go" -) - -const ( - // environment variable names - envServiceName = "JAEGER_SERVICE_NAME" - envDisabled = "JAEGER_DISABLED" - envRPCMetrics = "JAEGER_RPC_METRICS" - envTags = "JAEGER_TAGS" - envSamplerType = "JAEGER_SAMPLER_TYPE" - envSamplerParam = "JAEGER_SAMPLER_PARAM" - envSamplerManagerHostPort = "JAEGER_SAMPLER_MANAGER_HOST_PORT" - envSamplerMaxOperations = "JAEGER_SAMPLER_MAX_OPERATIONS" - envSamplerRefreshInterval = "JAEGER_SAMPLER_REFRESH_INTERVAL" - envReporterMaxQueueSize = "JAEGER_REPORTER_MAX_QUEUE_SIZE" - envReporterFlushInterval = "JAEGER_REPORTER_FLUSH_INTERVAL" - envReporterLogSpans = "JAEGER_REPORTER_LOG_SPANS" - envAgentHost = "JAEGER_AGENT_HOST" - envAgentPort = "JAEGER_AGENT_PORT" -) - -// FromEnv uses environment variables to set the tracer's Configuration -func FromEnv() (*Configuration, error) { - c := &Configuration{} - - if e := os.Getenv(envServiceName); e != "" { - c.ServiceName = e - } - - if e := os.Getenv(envRPCMetrics); e != "" { - if value, err := strconv.ParseBool(e); err == nil { - c.RPCMetrics = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envRPCMetrics, e) - } - } - - if e := os.Getenv(envDisabled); e != "" { - if value, err := strconv.ParseBool(e); err == nil { - c.Disabled = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envDisabled, e) - } - } - - if e := os.Getenv(envTags); e != "" { - c.Tags = parseTags(e) - } - - if s, err := samplerConfigFromEnv(); err == nil { - c.Sampler = s - } else { - return nil, errors.Wrap(err, "cannot obtain sampler config from env") - } - - if r, err := reporterConfigFromEnv(); err == nil { - c.Reporter = r - } else { - return nil, errors.Wrap(err, "cannot obtain reporter config from env") - } - - return c, nil -} - -// samplerConfigFromEnv creates a new SamplerConfig based on the environment variables -func samplerConfigFromEnv() (*SamplerConfig, error) { - sc := &SamplerConfig{} - - if e := os.Getenv(envSamplerType); e != "" { - sc.Type = e - } - - if e := os.Getenv(envSamplerParam); e != "" { - if value, err := strconv.ParseFloat(e, 64); err == nil { - sc.Param = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envSamplerParam, e) - } - } - - if e := os.Getenv(envSamplerManagerHostPort); e != "" { - sc.SamplingServerURL = e - } - - if e := os.Getenv(envSamplerMaxOperations); e != "" { - if value, err := strconv.ParseInt(e, 10, 0); err == nil { - sc.MaxOperations = int(value) - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envSamplerMaxOperations, e) - } - } - - if e := os.Getenv(envSamplerRefreshInterval); e != "" { - if value, err := time.ParseDuration(e); err == nil { - sc.SamplingRefreshInterval = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envSamplerRefreshInterval, e) - } - } - - return sc, nil -} - -// reporterConfigFromEnv creates a new ReporterConfig based on the environment variables -func reporterConfigFromEnv() (*ReporterConfig, error) { - rc := &ReporterConfig{} - - if e := os.Getenv(envReporterMaxQueueSize); e != "" { - if value, err := strconv.ParseInt(e, 10, 0); err == nil { - rc.QueueSize = int(value) - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envReporterMaxQueueSize, e) - } - } - - if e := os.Getenv(envReporterFlushInterval); e != "" { - if value, err := time.ParseDuration(e); err == nil { - rc.BufferFlushInterval = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envReporterFlushInterval, e) - } - } - - if e := os.Getenv(envReporterLogSpans); e != "" { - if value, err := strconv.ParseBool(e); err == nil { - rc.LogSpans = value - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envReporterLogSpans, e) - } - } - - host := jaeger.DefaultUDPSpanServerHost - if e := os.Getenv(envAgentHost); e != "" { - host = e - } - - port := jaeger.DefaultUDPSpanServerPort - if e := os.Getenv(envAgentPort); e != "" { - if value, err := strconv.ParseInt(e, 10, 0); err == nil { - port = int(value) - } else { - return nil, errors.Wrapf(err, "cannot parse env var %s=%s", envAgentPort, e) - } - } - - // the side effect of this is that we are building the default value, even if none of the env vars - // were not explicitly passed - rc.LocalAgentHostPort = fmt.Sprintf("%s:%d", host, port) - - return rc, nil -} - -// parseTags parses the given string into a collection of Tags. -// Spec for this value: -// - comma separated list of key=value -// - value can be specified using the notation ${envVar:defaultValue}, where `envVar` -// is an environment variable and `defaultValue` is the value to use in case the env var is not set -func parseTags(sTags string) []opentracing.Tag { - pairs := strings.Split(sTags, ",") - tags := make([]opentracing.Tag, 0) - for _, p := range pairs { - kv := strings.SplitN(p, "=", 2) - k, v := strings.TrimSpace(kv[0]), strings.TrimSpace(kv[1]) - - if strings.HasPrefix(v, "${") && strings.HasSuffix(v, "}") { - ed := strings.SplitN(v[2:len(v)-1], ":", 2) - e, d := ed[0], ed[1] - v = os.Getenv(e) - if v == "" && d != "" { - v = d - } - } - - tag := opentracing.Tag{Key: k, Value: v} - tags = append(tags, tag) - } - - return tags -} diff --git a/vendor/github.com/uber/jaeger-client-go/config/options.go b/vendor/github.com/uber/jaeger-client-go/config/options.go deleted file mode 100644 index d14f1f8a9b2b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/config/options.go +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package config - -import ( - opentracing "github.com/opentracing/opentracing-go" - "github.com/uber/jaeger-lib/metrics" - - "github.com/uber/jaeger-client-go" -) - -// Option is a function that sets some option on the client. -type Option func(c *Options) - -// Options control behavior of the client. -type Options struct { - metrics metrics.Factory - logger jaeger.Logger - reporter jaeger.Reporter - sampler jaeger.Sampler - contribObservers []jaeger.ContribObserver - observers []jaeger.Observer - gen128Bit bool - zipkinSharedRPCSpan bool - maxTagValueLength int - tags []opentracing.Tag - injectors map[interface{}]jaeger.Injector - extractors map[interface{}]jaeger.Extractor -} - -// Metrics creates an Option that initializes Metrics in the tracer, -// which is used to emit statistics about spans. -func Metrics(factory metrics.Factory) Option { - return func(c *Options) { - c.metrics = factory - } -} - -// Logger can be provided to log Reporter errors, as well as to log spans -// if Reporter.LogSpans is set to true. -func Logger(logger jaeger.Logger) Option { - return func(c *Options) { - c.logger = logger - } -} - -// Reporter can be provided explicitly to override the configuration. -// Useful for testing, e.g. by passing InMemoryReporter. -func Reporter(reporter jaeger.Reporter) Option { - return func(c *Options) { - c.reporter = reporter - } -} - -// Sampler can be provided explicitly to override the configuration. -func Sampler(sampler jaeger.Sampler) Option { - return func(c *Options) { - c.sampler = sampler - } -} - -// Observer can be registered with the Tracer to receive notifications about new Spans. -func Observer(observer jaeger.Observer) Option { - return func(c *Options) { - c.observers = append(c.observers, observer) - } -} - -// ContribObserver can be registered with the Tracer to recieve notifications -// about new spans. -func ContribObserver(observer jaeger.ContribObserver) Option { - return func(c *Options) { - c.contribObservers = append(c.contribObservers, observer) - } -} - -// Gen128Bit specifies whether to generate 128bit trace IDs. -func Gen128Bit(gen128Bit bool) Option { - return func(c *Options) { - c.gen128Bit = gen128Bit - } -} - -// ZipkinSharedRPCSpan creates an option that enables sharing span ID between client -// and server spans a la zipkin. If false, client and server spans will be assigned -// different IDs. -func ZipkinSharedRPCSpan(zipkinSharedRPCSpan bool) Option { - return func(c *Options) { - c.zipkinSharedRPCSpan = zipkinSharedRPCSpan - } -} - -// MaxTagValueLength can be provided to override the default max tag value length. -func MaxTagValueLength(maxTagValueLength int) Option { - return func(c *Options) { - c.maxTagValueLength = maxTagValueLength - } -} - -// Tag creates an option that adds a tracer-level tag. -func Tag(key string, value interface{}) Option { - return func(c *Options) { - c.tags = append(c.tags, opentracing.Tag{Key: key, Value: value}) - } -} - -// Injector registers an Injector with the given format. -func Injector(format interface{}, injector jaeger.Injector) Option { - return func(c *Options) { - c.injectors[format] = injector - } -} - -// Extractor registers an Extractor with the given format. -func Extractor(format interface{}, extractor jaeger.Extractor) Option { - return func(c *Options) { - c.extractors[format] = extractor - } -} - -func applyOptions(options ...Option) Options { - opts := Options{ - injectors: make(map[interface{}]jaeger.Injector), - extractors: make(map[interface{}]jaeger.Extractor), - } - for _, option := range options { - option(&opts) - } - if opts.metrics == nil { - opts.metrics = metrics.NullFactory - } - if opts.logger == nil { - opts.logger = jaeger.NullLogger - } - return opts -} diff --git a/vendor/github.com/uber/jaeger-client-go/constants.go b/vendor/github.com/uber/jaeger-client-go/constants.go deleted file mode 100644 index b5368ff3815b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/constants.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -const ( - // JaegerClientVersion is the version of the client library reported as Span tag. - JaegerClientVersion = "Go-2.15.0-dev" - - // JaegerClientVersionTagKey is the name of the tag used to report client version. - JaegerClientVersionTagKey = "jaeger.version" - - // JaegerDebugHeader is the name of HTTP header or a TextMap carrier key which, - // if found in the carrier, forces the trace to be sampled as "debug" trace. - // The value of the header is recorded as the tag on the root span, so that the - // trace can be found in the UI using this value as a correlation ID. - JaegerDebugHeader = "jaeger-debug-id" - - // JaegerBaggageHeader is the name of the HTTP header that is used to submit baggage. - // It differs from TraceBaggageHeaderPrefix in that it can be used only in cases where - // a root span does not exist. - JaegerBaggageHeader = "jaeger-baggage" - - // TracerHostnameTagKey used to report host name of the process. - TracerHostnameTagKey = "hostname" - - // TracerIPTagKey used to report ip of the process. - TracerIPTagKey = "ip" - - // TracerUUIDTagKey used to report UUID of the client process. - TracerUUIDTagKey = "client-uuid" - - // SamplerTypeTagKey reports which sampler was used on the root span. - SamplerTypeTagKey = "sampler.type" - - // SamplerParamTagKey reports the parameter of the sampler, like sampling probability. - SamplerParamTagKey = "sampler.param" - - // TraceContextHeaderName is the http header name used to propagate tracing context. - // This must be in lower-case to avoid mismatches when decoding incoming headers. - TraceContextHeaderName = "uber-trace-id" - - // TracerStateHeaderName is deprecated. - // Deprecated: use TraceContextHeaderName - TracerStateHeaderName = TraceContextHeaderName - - // TraceBaggageHeaderPrefix is the prefix for http headers used to propagate baggage. - // This must be in lower-case to avoid mismatches when decoding incoming headers. - TraceBaggageHeaderPrefix = "uberctx-" - - // SamplerTypeConst is the type of sampler that always makes the same decision. - SamplerTypeConst = "const" - - // SamplerTypeRemote is the type of sampler that polls Jaeger agent for sampling strategy. - SamplerTypeRemote = "remote" - - // SamplerTypeProbabilistic is the type of sampler that samples traces - // with a certain fixed probability. - SamplerTypeProbabilistic = "probabilistic" - - // SamplerTypeRateLimiting is the type of sampler that samples - // only up to a fixed number of traces per second. - SamplerTypeRateLimiting = "ratelimiting" - - // SamplerTypeLowerBound is the type of sampler that samples - // at least a fixed number of traces per second. - SamplerTypeLowerBound = "lowerbound" - - // DefaultUDPSpanServerHost is the default host to send the spans to, via UDP - DefaultUDPSpanServerHost = "localhost" - - // DefaultUDPSpanServerPort is the default port to send the spans to, via UDP - DefaultUDPSpanServerPort = 6831 - - // DefaultMaxTagValueLength is the default max length of byte array or string allowed in the tag value. - DefaultMaxTagValueLength = 256 -) diff --git a/vendor/github.com/uber/jaeger-client-go/context.go b/vendor/github.com/uber/jaeger-client-go/context.go deleted file mode 100644 index 8b06173d9835..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/context.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "errors" - "fmt" - "strconv" - "strings" -) - -const ( - flagSampled = byte(1) - flagDebug = byte(2) -) - -var ( - errEmptyTracerStateString = errors.New("Cannot convert empty string to tracer state") - errMalformedTracerStateString = errors.New("String does not match tracer state format") - - emptyContext = SpanContext{} -) - -// TraceID represents unique 128bit identifier of a trace -type TraceID struct { - High, Low uint64 -} - -// SpanID represents unique 64bit identifier of a span -type SpanID uint64 - -// SpanContext represents propagated span identity and state -type SpanContext struct { - // traceID represents globally unique ID of the trace. - // Usually generated as a random number. - traceID TraceID - - // spanID represents span ID that must be unique within its trace, - // but does not have to be globally unique. - spanID SpanID - - // parentID refers to the ID of the parent span. - // Should be 0 if the current span is a root span. - parentID SpanID - - // flags is a bitmap containing such bits as 'sampled' and 'debug'. - flags byte - - // Distributed Context baggage. The is a snapshot in time. - baggage map[string]string - - // debugID can be set to some correlation ID when the context is being - // extracted from a TextMap carrier. - // - // See JaegerDebugHeader in constants.go - debugID string -} - -// ForeachBaggageItem implements ForeachBaggageItem() of opentracing.SpanContext -func (c SpanContext) ForeachBaggageItem(handler func(k, v string) bool) { - for k, v := range c.baggage { - if !handler(k, v) { - break - } - } -} - -// IsSampled returns whether this trace was chosen for permanent storage -// by the sampling mechanism of the tracer. -func (c SpanContext) IsSampled() bool { - return (c.flags & flagSampled) == flagSampled -} - -// IsDebug indicates whether sampling was explicitly requested by the service. -func (c SpanContext) IsDebug() bool { - return (c.flags & flagDebug) == flagDebug -} - -// IsValid indicates whether this context actually represents a valid trace. -func (c SpanContext) IsValid() bool { - return c.traceID.IsValid() && c.spanID != 0 -} - -func (c SpanContext) String() string { - if c.traceID.High == 0 { - return fmt.Sprintf("%x:%x:%x:%x", c.traceID.Low, uint64(c.spanID), uint64(c.parentID), c.flags) - } - return fmt.Sprintf("%x%016x:%x:%x:%x", c.traceID.High, c.traceID.Low, uint64(c.spanID), uint64(c.parentID), c.flags) -} - -// ContextFromString reconstructs the Context encoded in a string -func ContextFromString(value string) (SpanContext, error) { - var context SpanContext - if value == "" { - return emptyContext, errEmptyTracerStateString - } - parts := strings.Split(value, ":") - if len(parts) != 4 { - return emptyContext, errMalformedTracerStateString - } - var err error - if context.traceID, err = TraceIDFromString(parts[0]); err != nil { - return emptyContext, err - } - if context.spanID, err = SpanIDFromString(parts[1]); err != nil { - return emptyContext, err - } - if context.parentID, err = SpanIDFromString(parts[2]); err != nil { - return emptyContext, err - } - flags, err := strconv.ParseUint(parts[3], 10, 8) - if err != nil { - return emptyContext, err - } - context.flags = byte(flags) - return context, nil -} - -// TraceID returns the trace ID of this span context -func (c SpanContext) TraceID() TraceID { - return c.traceID -} - -// SpanID returns the span ID of this span context -func (c SpanContext) SpanID() SpanID { - return c.spanID -} - -// ParentID returns the parent span ID of this span context -func (c SpanContext) ParentID() SpanID { - return c.parentID -} - -// NewSpanContext creates a new instance of SpanContext -func NewSpanContext(traceID TraceID, spanID, parentID SpanID, sampled bool, baggage map[string]string) SpanContext { - flags := byte(0) - if sampled { - flags = flagSampled - } - return SpanContext{ - traceID: traceID, - spanID: spanID, - parentID: parentID, - flags: flags, - baggage: baggage} -} - -// CopyFrom copies data from ctx into this context, including span identity and baggage. -// TODO This is only used by interop.go. Remove once TChannel Go supports OpenTracing. -func (c *SpanContext) CopyFrom(ctx *SpanContext) { - c.traceID = ctx.traceID - c.spanID = ctx.spanID - c.parentID = ctx.parentID - c.flags = ctx.flags - if l := len(ctx.baggage); l > 0 { - c.baggage = make(map[string]string, l) - for k, v := range ctx.baggage { - c.baggage[k] = v - } - } else { - c.baggage = nil - } -} - -// WithBaggageItem creates a new context with an extra baggage item. -func (c SpanContext) WithBaggageItem(key, value string) SpanContext { - var newBaggage map[string]string - if c.baggage == nil { - newBaggage = map[string]string{key: value} - } else { - newBaggage = make(map[string]string, len(c.baggage)+1) - for k, v := range c.baggage { - newBaggage[k] = v - } - newBaggage[key] = value - } - // Use positional parameters so the compiler will help catch new fields. - return SpanContext{c.traceID, c.spanID, c.parentID, c.flags, newBaggage, ""} -} - -// isDebugIDContainerOnly returns true when the instance of the context is only -// used to return the debug/correlation ID from extract() method. This happens -// in the situation when "jaeger-debug-id" header is passed in the carrier to -// the extract() method, but the request otherwise has no span context in it. -// Previously this would've returned opentracing.ErrSpanContextNotFound from the -// extract method, but now it returns a dummy context with only debugID filled in. -// -// See JaegerDebugHeader in constants.go -// See textMapPropagator#Extract -func (c *SpanContext) isDebugIDContainerOnly() bool { - return !c.traceID.IsValid() && c.debugID != "" -} - -// ------- TraceID ------- - -func (t TraceID) String() string { - if t.High == 0 { - return fmt.Sprintf("%x", t.Low) - } - return fmt.Sprintf("%x%016x", t.High, t.Low) -} - -// TraceIDFromString creates a TraceID from a hexadecimal string -func TraceIDFromString(s string) (TraceID, error) { - var hi, lo uint64 - var err error - if len(s) > 32 { - return TraceID{}, fmt.Errorf("TraceID cannot be longer than 32 hex characters: %s", s) - } else if len(s) > 16 { - hiLen := len(s) - 16 - if hi, err = strconv.ParseUint(s[0:hiLen], 16, 64); err != nil { - return TraceID{}, err - } - if lo, err = strconv.ParseUint(s[hiLen:], 16, 64); err != nil { - return TraceID{}, err - } - } else { - if lo, err = strconv.ParseUint(s, 16, 64); err != nil { - return TraceID{}, err - } - } - return TraceID{High: hi, Low: lo}, nil -} - -// IsValid checks if the trace ID is valid, i.e. not zero. -func (t TraceID) IsValid() bool { - return t.High != 0 || t.Low != 0 -} - -// ------- SpanID ------- - -func (s SpanID) String() string { - return fmt.Sprintf("%x", uint64(s)) -} - -// SpanIDFromString creates a SpanID from a hexadecimal string -func SpanIDFromString(s string) (SpanID, error) { - if len(s) > 16 { - return SpanID(0), fmt.Errorf("SpanID cannot be longer than 16 hex characters: %s", s) - } - id, err := strconv.ParseUint(s, 16, 64) - if err != nil { - return SpanID(0), err - } - return SpanID(id), nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/contrib_observer.go b/vendor/github.com/uber/jaeger-client-go/contrib_observer.go deleted file mode 100644 index 4ce1881f3b83..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/contrib_observer.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - opentracing "github.com/opentracing/opentracing-go" -) - -// ContribObserver can be registered with the Tracer to receive notifications -// about new Spans. Modelled after github.com/opentracing-contrib/go-observer. -type ContribObserver interface { - // Create and return a span observer. Called when a span starts. - // If the Observer is not interested in the given span, it must return (nil, false). - // E.g : - // func StartSpan(opName string, opts ...opentracing.StartSpanOption) { - // var sp opentracing.Span - // sso := opentracing.StartSpanOptions{} - // if spanObserver, ok := Observer.OnStartSpan(span, opName, sso); ok { - // // we have a valid SpanObserver - // } - // ... - // } - OnStartSpan(sp opentracing.Span, operationName string, options opentracing.StartSpanOptions) (ContribSpanObserver, bool) -} - -// ContribSpanObserver is created by the Observer and receives notifications -// about other Span events. This interface is meant to match -// github.com/opentracing-contrib/go-observer, via duck typing, without -// directly importing the go-observer package. -type ContribSpanObserver interface { - OnSetOperationName(operationName string) - OnSetTag(key string, value interface{}) - OnFinish(options opentracing.FinishOptions) -} - -// wrapper observer for the old observers (see observer.go) -type oldObserver struct { - obs Observer -} - -func (o *oldObserver) OnStartSpan(sp opentracing.Span, operationName string, options opentracing.StartSpanOptions) (ContribSpanObserver, bool) { - spanObserver := o.obs.OnStartSpan(operationName, options) - return spanObserver, spanObserver != nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/glide.lock b/vendor/github.com/uber/jaeger-client-go/glide.lock deleted file mode 100644 index d76b1536171f..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/glide.lock +++ /dev/null @@ -1,89 +0,0 @@ -hash: 3accf84f97bff4a91162736104c0e9b9790820712bd86db6fec5e665f7196a82 -updated: 2018-04-30T11:46:43.804556-04:00 -imports: -- name: github.com/beorn7/perks - version: 3a771d992973f24aa725d07868b467d1ddfceafb - subpackages: - - quantile -- name: github.com/codahale/hdrhistogram - version: 3a0bb77429bd3a61596f5e8a3172445844342120 -- name: github.com/crossdock/crossdock-go - version: 049aabb0122b03bc9bd30cab8f3f91fb60166361 - subpackages: - - assert - - require -- name: github.com/davecgh/go-spew - version: 8991bc29aa16c548c550c7ff78260e27b9ab7c73 - subpackages: - - spew -- name: github.com/golang/protobuf - version: bbd03ef6da3a115852eaf24c8a1c46aeb39aa175 - subpackages: - - proto -- name: github.com/matttproud/golang_protobuf_extensions - version: c12348ce28de40eed0136aa2b644d0ee0650e56c - subpackages: - - pbutil -- name: github.com/opentracing/opentracing-go - version: 1949ddbfd147afd4d964a9f00b24eb291e0e7c38 - subpackages: - - ext - - log -- name: github.com/pkg/errors - version: 645ef00459ed84a119197bfb8d8205042c6df63d -- name: github.com/pmezard/go-difflib - version: 792786c7400a136282c1664665ae0a8db921c6c2 - subpackages: - - difflib -- name: github.com/prometheus/client_golang - version: c5b7fccd204277076155f10851dad72b76a49317 - subpackages: - - prometheus -- name: github.com/prometheus/client_model - version: 99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c - subpackages: - - go -- name: github.com/prometheus/common - version: 38c53a9f4bfcd932d1b00bfc65e256a7fba6b37a - subpackages: - - expfmt - - internal/bitbucket.org/ww/goautoneg - - model -- name: github.com/prometheus/procfs - version: 780932d4fbbe0e69b84c34c20f5c8d0981e109ea - subpackages: - - internal/util - - nfs - - xfs -- name: github.com/stretchr/testify - version: 12b6f73e6084dad08a7c6e575284b177ecafbc71 - subpackages: - - assert - - require - - suite -- name: github.com/uber/jaeger-lib - version: 4267858c0679cd4e47cefed8d7f70fd386cfb567 - subpackages: - - metrics - - metrics/prometheus - - metrics/testutils -- name: go.uber.org/atomic - version: 8474b86a5a6f79c443ce4b2992817ff32cf208b8 -- name: go.uber.org/multierr - version: 3c4937480c32f4c13a875a1829af76c98ca3d40a -- name: go.uber.org/zap - version: eeedf312bc6c57391d84767a4cd413f02a917974 - subpackages: - - buffer - - internal/bufferpool - - internal/color - - internal/exit - - zapcore -- name: golang.org/x/net - version: 6078986fec03a1dcc236c34816c71b0e05018fda - subpackages: - - context - - context/ctxhttp -testImports: -- name: github.com/uber-go/atomic - version: 8474b86a5a6f79c443ce4b2992817ff32cf208b8 diff --git a/vendor/github.com/uber/jaeger-client-go/glide.yaml b/vendor/github.com/uber/jaeger-client-go/glide.yaml deleted file mode 100644 index 6637da215264..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/glide.yaml +++ /dev/null @@ -1,22 +0,0 @@ -package: github.com/uber/jaeger-client-go -import: -- package: github.com/opentracing/opentracing-go - version: ^1 - subpackages: - - ext - - log -- package: github.com/crossdock/crossdock-go -- package: github.com/uber/jaeger-lib - version: ^1.2.1 - subpackages: - - metrics -- package: github.com/pkg/errors - version: ~0.8.0 -testImport: -- package: github.com/stretchr/testify - subpackages: - - assert - - require - - suite -- package: github.com/prometheus/client_golang - version: v0.8.0 diff --git a/vendor/github.com/uber/jaeger-client-go/header.go b/vendor/github.com/uber/jaeger-client-go/header.go deleted file mode 100644 index 19c2c055b813..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/header.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -// HeadersConfig contains the values for the header keys that Jaeger will use. -// These values may be either custom or default depending on whether custom -// values were provided via a configuration. -type HeadersConfig struct { - // JaegerDebugHeader is the name of HTTP header or a TextMap carrier key which, - // if found in the carrier, forces the trace to be sampled as "debug" trace. - // The value of the header is recorded as the tag on the root span, so that the - // trace can be found in the UI using this value as a correlation ID. - JaegerDebugHeader string `yaml:"jaegerDebugHeader"` - - // JaegerBaggageHeader is the name of the HTTP header that is used to submit baggage. - // It differs from TraceBaggageHeaderPrefix in that it can be used only in cases where - // a root span does not exist. - JaegerBaggageHeader string `yaml:"jaegerBaggageHeader"` - - // TraceContextHeaderName is the http header name used to propagate tracing context. - // This must be in lower-case to avoid mismatches when decoding incoming headers. - TraceContextHeaderName string `yaml:"TraceContextHeaderName"` - - // TraceBaggageHeaderPrefix is the prefix for http headers used to propagate baggage. - // This must be in lower-case to avoid mismatches when decoding incoming headers. - TraceBaggageHeaderPrefix string `yaml:"traceBaggageHeaderPrefix"` -} - -func (c *HeadersConfig) applyDefaults() *HeadersConfig { - if c.JaegerBaggageHeader == "" { - c.JaegerBaggageHeader = JaegerBaggageHeader - } - if c.JaegerDebugHeader == "" { - c.JaegerDebugHeader = JaegerDebugHeader - } - if c.TraceBaggageHeaderPrefix == "" { - c.TraceBaggageHeaderPrefix = TraceBaggageHeaderPrefix - } - if c.TraceContextHeaderName == "" { - c.TraceContextHeaderName = TraceContextHeaderName - } - return c -} - -func getDefaultHeadersConfig() *HeadersConfig { - return &HeadersConfig{ - JaegerDebugHeader: JaegerDebugHeader, - JaegerBaggageHeader: JaegerBaggageHeader, - TraceContextHeaderName: TraceContextHeaderName, - TraceBaggageHeaderPrefix: TraceBaggageHeaderPrefix, - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/options.go b/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/options.go deleted file mode 100644 index 745729319ff0..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/options.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package remote - -import ( - "time" - - "github.com/uber/jaeger-client-go" -) - -const ( - defaultMaxValueLength = 2048 - defaultRefreshInterval = time.Minute - defaultHostPort = "localhost:5778" -) - -// Option is a function that sets some option on the RestrictionManager -type Option func(options *options) - -// Options is a factory for all available options -var Options options - -type options struct { - denyBaggageOnInitializationFailure bool - metrics *jaeger.Metrics - logger jaeger.Logger - hostPort string - refreshInterval time.Duration -} - -// DenyBaggageOnInitializationFailure creates an Option that determines the startup failure mode of RestrictionManager. -// If DenyBaggageOnInitializationFailure is true, RestrictionManager will not allow any baggage to be written until baggage -// restrictions have been retrieved from agent. -// If DenyBaggageOnInitializationFailure is false, RestrictionManager will allow any baggage to be written until baggage -// restrictions have been retrieved from agent. -func (options) DenyBaggageOnInitializationFailure(b bool) Option { - return func(o *options) { - o.denyBaggageOnInitializationFailure = b - } -} - -// Metrics creates an Option that initializes Metrics on the RestrictionManager, which is used to emit statistics. -func (options) Metrics(m *jaeger.Metrics) Option { - return func(o *options) { - o.metrics = m - } -} - -// Logger creates an Option that sets the logger used by the RestrictionManager. -func (options) Logger(logger jaeger.Logger) Option { - return func(o *options) { - o.logger = logger - } -} - -// HostPort creates an Option that sets the hostPort of the local agent that contains the baggage restrictions. -func (options) HostPort(hostPort string) Option { - return func(o *options) { - o.hostPort = hostPort - } -} - -// RefreshInterval creates an Option that sets how often the RestrictionManager will poll local agent for -// the baggage restrictions. -func (options) RefreshInterval(refreshInterval time.Duration) Option { - return func(o *options) { - o.refreshInterval = refreshInterval - } -} - -func applyOptions(o ...Option) options { - opts := options{} - for _, option := range o { - option(&opts) - } - if opts.metrics == nil { - opts.metrics = jaeger.NewNullMetrics() - } - if opts.logger == nil { - opts.logger = jaeger.NullLogger - } - if opts.hostPort == "" { - opts.hostPort = defaultHostPort - } - if opts.refreshInterval == 0 { - opts.refreshInterval = defaultRefreshInterval - } - return opts -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/restriction_manager.go b/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/restriction_manager.go deleted file mode 100644 index a56515acab86..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/baggage/remote/restriction_manager.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package remote - -import ( - "fmt" - "net/url" - "sync" - "time" - - "github.com/uber/jaeger-client-go/internal/baggage" - thrift "github.com/uber/jaeger-client-go/thrift-gen/baggage" - "github.com/uber/jaeger-client-go/utils" -) - -type httpBaggageRestrictionManagerProxy struct { - url string -} - -func newHTTPBaggageRestrictionManagerProxy(hostPort, serviceName string) *httpBaggageRestrictionManagerProxy { - v := url.Values{} - v.Set("service", serviceName) - return &httpBaggageRestrictionManagerProxy{ - url: fmt.Sprintf("http://%s/baggageRestrictions?%s", hostPort, v.Encode()), - } -} - -func (s *httpBaggageRestrictionManagerProxy) GetBaggageRestrictions(serviceName string) ([]*thrift.BaggageRestriction, error) { - var out []*thrift.BaggageRestriction - if err := utils.GetJSON(s.url, &out); err != nil { - return nil, err - } - return out, nil -} - -// RestrictionManager manages baggage restrictions by retrieving baggage restrictions from agent -type RestrictionManager struct { - options - - mux sync.RWMutex - serviceName string - restrictions map[string]*baggage.Restriction - thriftProxy thrift.BaggageRestrictionManager - pollStopped sync.WaitGroup - stopPoll chan struct{} - invalidRestriction *baggage.Restriction - validRestriction *baggage.Restriction - - // Determines if the manager has successfully retrieved baggage restrictions from agent - initialized bool -} - -// NewRestrictionManager returns a BaggageRestrictionManager that polls the agent for the latest -// baggage restrictions. -func NewRestrictionManager(serviceName string, options ...Option) *RestrictionManager { - // TODO there is a developing use case where a single tracer can generate traces on behalf of many services. - // restrictionsMap will need to exist per service - opts := applyOptions(options...) - m := &RestrictionManager{ - serviceName: serviceName, - options: opts, - restrictions: make(map[string]*baggage.Restriction), - thriftProxy: newHTTPBaggageRestrictionManagerProxy(opts.hostPort, serviceName), - stopPoll: make(chan struct{}), - invalidRestriction: baggage.NewRestriction(false, 0), - validRestriction: baggage.NewRestriction(true, defaultMaxValueLength), - } - m.pollStopped.Add(1) - go m.pollManager() - return m -} - -// isReady returns true if the manager has retrieved baggage restrictions from the remote source. -func (m *RestrictionManager) isReady() bool { - m.mux.RLock() - defer m.mux.RUnlock() - return m.initialized -} - -// GetRestriction implements RestrictionManager#GetRestriction. -func (m *RestrictionManager) GetRestriction(service, key string) *baggage.Restriction { - m.mux.RLock() - defer m.mux.RUnlock() - if !m.initialized { - if m.denyBaggageOnInitializationFailure { - return m.invalidRestriction - } - return m.validRestriction - } - if restriction, ok := m.restrictions[key]; ok { - return restriction - } - return m.invalidRestriction -} - -// Close stops remote polling and closes the RemoteRestrictionManager. -func (m *RestrictionManager) Close() error { - close(m.stopPoll) - m.pollStopped.Wait() - return nil -} - -func (m *RestrictionManager) pollManager() { - defer m.pollStopped.Done() - // attempt to initialize baggage restrictions - if err := m.updateRestrictions(); err != nil { - m.logger.Error(fmt.Sprintf("Failed to initialize baggage restrictions: %s", err.Error())) - } - ticker := time.NewTicker(m.refreshInterval) - defer ticker.Stop() - - for { - select { - case <-ticker.C: - if err := m.updateRestrictions(); err != nil { - m.logger.Error(fmt.Sprintf("Failed to update baggage restrictions: %s", err.Error())) - } - case <-m.stopPoll: - return - } - } -} - -func (m *RestrictionManager) updateRestrictions() error { - restrictions, err := m.thriftProxy.GetBaggageRestrictions(m.serviceName) - if err != nil { - m.metrics.BaggageRestrictionsUpdateFailure.Inc(1) - return err - } - newRestrictions := m.parseRestrictions(restrictions) - m.metrics.BaggageRestrictionsUpdateSuccess.Inc(1) - m.mux.Lock() - defer m.mux.Unlock() - m.initialized = true - m.restrictions = newRestrictions - return nil -} - -func (m *RestrictionManager) parseRestrictions(restrictions []*thrift.BaggageRestriction) map[string]*baggage.Restriction { - setters := make(map[string]*baggage.Restriction, len(restrictions)) - for _, restriction := range restrictions { - setters[restriction.BaggageKey] = baggage.NewRestriction(true, int(restriction.MaxValueLength)) - } - return setters -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/baggage/restriction_manager.go b/vendor/github.com/uber/jaeger-client-go/internal/baggage/restriction_manager.go deleted file mode 100644 index c16a5c566291..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/baggage/restriction_manager.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package baggage - -const ( - defaultMaxValueLength = 2048 -) - -// Restriction determines whether a baggage key is allowed and contains any restrictions on the baggage value. -type Restriction struct { - keyAllowed bool - maxValueLength int -} - -// NewRestriction returns a new Restriction. -func NewRestriction(keyAllowed bool, maxValueLength int) *Restriction { - return &Restriction{ - keyAllowed: keyAllowed, - maxValueLength: maxValueLength, - } -} - -// KeyAllowed returns whether the baggage key for this restriction is allowed. -func (r *Restriction) KeyAllowed() bool { - return r.keyAllowed -} - -// MaxValueLength returns the max length for the baggage value. -func (r *Restriction) MaxValueLength() int { - return r.maxValueLength -} - -// RestrictionManager keeps track of valid baggage keys and their restrictions. The manager -// will return a Restriction for a specific baggage key which will determine whether the baggage -// key is allowed for the current service and any other applicable restrictions on the baggage -// value. -type RestrictionManager interface { - GetRestriction(service, key string) *Restriction -} - -// DefaultRestrictionManager allows any baggage key. -type DefaultRestrictionManager struct { - defaultRestriction *Restriction -} - -// NewDefaultRestrictionManager returns a DefaultRestrictionManager. -func NewDefaultRestrictionManager(maxValueLength int) *DefaultRestrictionManager { - if maxValueLength == 0 { - maxValueLength = defaultMaxValueLength - } - return &DefaultRestrictionManager{ - defaultRestriction: &Restriction{keyAllowed: true, maxValueLength: maxValueLength}, - } -} - -// GetRestriction implements RestrictionManager#GetRestriction. -func (m *DefaultRestrictionManager) GetRestriction(service, key string) *Restriction { - return m.defaultRestriction -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/spanlog/json.go b/vendor/github.com/uber/jaeger-client-go/internal/spanlog/json.go deleted file mode 100644 index 0e10b8a5aa8e..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/spanlog/json.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package spanlog - -import ( - "encoding/json" - "fmt" - - "github.com/opentracing/opentracing-go/log" -) - -type fieldsAsMap map[string]string - -// MaterializeWithJSON converts log Fields into JSON string -// TODO refactor into pluggable materializer -func MaterializeWithJSON(logFields []log.Field) ([]byte, error) { - fields := fieldsAsMap(make(map[string]string, len(logFields))) - for _, field := range logFields { - field.Marshal(fields) - } - if event, ok := fields["event"]; ok && len(fields) == 1 { - return []byte(event), nil - } - return json.Marshal(fields) -} - -func (ml fieldsAsMap) EmitString(key, value string) { - ml[key] = value -} - -func (ml fieldsAsMap) EmitBool(key string, value bool) { - ml[key] = fmt.Sprintf("%t", value) -} - -func (ml fieldsAsMap) EmitInt(key string, value int) { - ml[key] = fmt.Sprintf("%d", value) -} - -func (ml fieldsAsMap) EmitInt32(key string, value int32) { - ml[key] = fmt.Sprintf("%d", value) -} - -func (ml fieldsAsMap) EmitInt64(key string, value int64) { - ml[key] = fmt.Sprintf("%d", value) -} - -func (ml fieldsAsMap) EmitUint32(key string, value uint32) { - ml[key] = fmt.Sprintf("%d", value) -} - -func (ml fieldsAsMap) EmitUint64(key string, value uint64) { - ml[key] = fmt.Sprintf("%d", value) -} - -func (ml fieldsAsMap) EmitFloat32(key string, value float32) { - ml[key] = fmt.Sprintf("%f", value) -} - -func (ml fieldsAsMap) EmitFloat64(key string, value float64) { - ml[key] = fmt.Sprintf("%f", value) -} - -func (ml fieldsAsMap) EmitObject(key string, value interface{}) { - ml[key] = fmt.Sprintf("%+v", value) -} - -func (ml fieldsAsMap) EmitLazyLogger(value log.LazyLogger) { - value(ml) -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/options.go b/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/options.go deleted file mode 100644 index f52c322fb69a..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/options.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2018 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package remote - -import ( - "time" - - "github.com/uber/jaeger-client-go" -) - -const ( - defaultHostPort = "localhost:5778" - defaultRefreshInterval = time.Second * 5 -) - -// Option is a function that sets some option on the Throttler -type Option func(options *options) - -// Options is a factory for all available options -var Options options - -type options struct { - metrics *jaeger.Metrics - logger jaeger.Logger - hostPort string - refreshInterval time.Duration - synchronousInitialization bool -} - -// Metrics creates an Option that initializes Metrics on the Throttler, which is used to emit statistics. -func (options) Metrics(m *jaeger.Metrics) Option { - return func(o *options) { - o.metrics = m - } -} - -// Logger creates an Option that sets the logger used by the Throttler. -func (options) Logger(logger jaeger.Logger) Option { - return func(o *options) { - o.logger = logger - } -} - -// HostPort creates an Option that sets the hostPort of the local agent that keeps track of credits. -func (options) HostPort(hostPort string) Option { - return func(o *options) { - o.hostPort = hostPort - } -} - -// RefreshInterval creates an Option that sets how often the Throttler will poll local agent for -// credits. -func (options) RefreshInterval(refreshInterval time.Duration) Option { - return func(o *options) { - o.refreshInterval = refreshInterval - } -} - -// SynchronousInitialization creates an Option that determines whether the throttler should synchronously -// fetch credits from the agent when an operation is seen for the first time. This should be set to true -// if the client will be used by a short lived service that needs to ensure that credits are fetched upfront -// such that sampling or throttling occurs. -func (options) SynchronousInitialization(b bool) Option { - return func(o *options) { - o.synchronousInitialization = b - } -} - -func applyOptions(o ...Option) options { - opts := options{} - for _, option := range o { - option(&opts) - } - if opts.metrics == nil { - opts.metrics = jaeger.NewNullMetrics() - } - if opts.logger == nil { - opts.logger = jaeger.NullLogger - } - if opts.hostPort == "" { - opts.hostPort = defaultHostPort - } - if opts.refreshInterval == 0 { - opts.refreshInterval = defaultRefreshInterval - } - return opts -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/throttler.go b/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/throttler.go deleted file mode 100644 index 20f434fe4956..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/throttler/remote/throttler.go +++ /dev/null @@ -1,216 +0,0 @@ -// Copyright (c) 2018 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package remote - -import ( - "fmt" - "net/url" - "sync" - "sync/atomic" - "time" - - "github.com/pkg/errors" - - "github.com/uber/jaeger-client-go" - "github.com/uber/jaeger-client-go/utils" -) - -const ( - // minimumCredits is the minimum amount of credits necessary to not be throttled. - // i.e. if currentCredits > minimumCredits, then the operation will not be throttled. - minimumCredits = 1.0 -) - -var ( - errorUUIDNotSet = errors.New("Throttler UUID must be set") -) - -type operationBalance struct { - Operation string `json:"operation"` - Balance float64 `json:"balance"` -} - -type creditResponse struct { - Balances []operationBalance `json:"balances"` -} - -type httpCreditManagerProxy struct { - hostPort string -} - -func newHTTPCreditManagerProxy(hostPort string) *httpCreditManagerProxy { - return &httpCreditManagerProxy{ - hostPort: hostPort, - } -} - -// N.B. Operations list must not be empty. -func (m *httpCreditManagerProxy) FetchCredits(uuid, serviceName string, operations []string) (*creditResponse, error) { - params := url.Values{} - params.Set("service", serviceName) - params.Set("uuid", uuid) - for _, op := range operations { - params.Add("operations", op) - } - var resp creditResponse - if err := utils.GetJSON(fmt.Sprintf("http://%s/credits?%s", m.hostPort, params.Encode()), &resp); err != nil { - return nil, errors.Wrap(err, "Failed to receive credits from agent") - } - return &resp, nil -} - -// Throttler retrieves credits from agent and uses it to throttle operations. -type Throttler struct { - options - - mux sync.RWMutex - service string - uuid atomic.Value - creditManager *httpCreditManagerProxy - credits map[string]float64 // map of operation->credits - close chan struct{} - stopped sync.WaitGroup -} - -// NewThrottler returns a Throttler that polls agent for credits and uses them to throttle -// the service. -func NewThrottler(service string, options ...Option) *Throttler { - opts := applyOptions(options...) - creditManager := newHTTPCreditManagerProxy(opts.hostPort) - t := &Throttler{ - options: opts, - creditManager: creditManager, - service: service, - credits: make(map[string]float64), - close: make(chan struct{}), - } - t.stopped.Add(1) - go t.pollManager() - return t -} - -// IsAllowed implements Throttler#IsAllowed. -func (t *Throttler) IsAllowed(operation string) bool { - t.mux.Lock() - defer t.mux.Unlock() - value, ok := t.credits[operation] - if !ok || value == 0 { - if !ok { - // NOTE: This appears to be a no-op at first glance, but it stores - // the operation key in the map. Necessary for functionality of - // Throttler#operations method. - t.credits[operation] = 0 - } - if !t.synchronousInitialization { - t.metrics.ThrottledDebugSpans.Inc(1) - return false - } - // If it is the first time this operation is being checked, synchronously fetch - // the credits. - credits, err := t.fetchCredits([]string{operation}) - if err != nil { - // Failed to receive credits from agent, try again next time - t.logger.Error("Failed to fetch credits: " + err.Error()) - return false - } - if len(credits.Balances) == 0 { - // This shouldn't happen but just in case - return false - } - for _, opBalance := range credits.Balances { - t.credits[opBalance.Operation] += opBalance.Balance - } - } - return t.isAllowed(operation) -} - -// Close stops the throttler from fetching credits from remote. -func (t *Throttler) Close() error { - close(t.close) - t.stopped.Wait() - return nil -} - -// SetProcess implements ProcessSetter#SetProcess. It's imperative that the UUID is set before any remote -// requests are made. -func (t *Throttler) SetProcess(process jaeger.Process) { - if process.UUID != "" { - t.uuid.Store(process.UUID) - } -} - -// N.B. This function must be called with the Write Lock -func (t *Throttler) isAllowed(operation string) bool { - credits := t.credits[operation] - if credits < minimumCredits { - t.metrics.ThrottledDebugSpans.Inc(1) - return false - } - t.credits[operation] = credits - minimumCredits - return true -} - -func (t *Throttler) pollManager() { - defer t.stopped.Done() - ticker := time.NewTicker(t.refreshInterval) - defer ticker.Stop() - for { - select { - case <-ticker.C: - t.refreshCredits() - case <-t.close: - return - } - } -} - -func (t *Throttler) operations() []string { - t.mux.RLock() - defer t.mux.RUnlock() - operations := make([]string, 0, len(t.credits)) - for op := range t.credits { - operations = append(operations, op) - } - return operations -} - -func (t *Throttler) refreshCredits() { - operations := t.operations() - if len(operations) == 0 { - return - } - newCredits, err := t.fetchCredits(operations) - if err != nil { - t.metrics.ThrottlerUpdateFailure.Inc(1) - t.logger.Error("Failed to fetch credits: " + err.Error()) - return - } - t.metrics.ThrottlerUpdateSuccess.Inc(1) - - t.mux.Lock() - defer t.mux.Unlock() - for _, opBalance := range newCredits.Balances { - t.credits[opBalance.Operation] += opBalance.Balance - } -} - -func (t *Throttler) fetchCredits(operations []string) (*creditResponse, error) { - uuid := t.uuid.Load() - uuidStr, _ := uuid.(string) - if uuid == nil || uuidStr == "" { - return nil, errorUUIDNotSet - } - return t.creditManager.FetchCredits(uuidStr, t.service, operations) -} diff --git a/vendor/github.com/uber/jaeger-client-go/internal/throttler/throttler.go b/vendor/github.com/uber/jaeger-client-go/internal/throttler/throttler.go deleted file mode 100644 index 196ed69cacae..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/internal/throttler/throttler.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2018 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package throttler - -// Throttler is used to rate limits operations. For example, given how debug spans -// are always sampled, a throttler can be enabled per client to rate limit the amount -// of debug spans a client can start. -type Throttler interface { - // IsAllowed determines whether the operation should be allowed and not be - // throttled. - IsAllowed(operation string) bool -} - -// DefaultThrottler doesn't throttle at all. -type DefaultThrottler struct{} - -// IsAllowed implements Throttler#IsAllowed. -func (t DefaultThrottler) IsAllowed(operation string) bool { - return true -} diff --git a/vendor/github.com/uber/jaeger-client-go/interop.go b/vendor/github.com/uber/jaeger-client-go/interop.go deleted file mode 100644 index 8402d087c29f..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/interop.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "github.com/opentracing/opentracing-go" -) - -// TODO this file should not be needed after TChannel PR. - -type formatKey int - -// SpanContextFormat is a constant used as OpenTracing Format. -// Requires *SpanContext as carrier. -// This format is intended for interop with TChannel or other Zipkin-like tracers. -const SpanContextFormat formatKey = iota - -type jaegerTraceContextPropagator struct { - tracer *Tracer -} - -func (p *jaegerTraceContextPropagator) Inject( - ctx SpanContext, - abstractCarrier interface{}, -) error { - carrier, ok := abstractCarrier.(*SpanContext) - if !ok { - return opentracing.ErrInvalidCarrier - } - - carrier.CopyFrom(&ctx) - return nil -} - -func (p *jaegerTraceContextPropagator) Extract(abstractCarrier interface{}) (SpanContext, error) { - carrier, ok := abstractCarrier.(*SpanContext) - if !ok { - return emptyContext, opentracing.ErrInvalidCarrier - } - ctx := new(SpanContext) - ctx.CopyFrom(carrier) - return *ctx, nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/jaeger_tag.go b/vendor/github.com/uber/jaeger-client-go/jaeger_tag.go deleted file mode 100644 index 868b2a5b5465..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/jaeger_tag.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "fmt" - - "github.com/opentracing/opentracing-go/log" - - j "github.com/uber/jaeger-client-go/thrift-gen/jaeger" -) - -type tags []*j.Tag - -// ConvertLogsToJaegerTags converts log Fields into jaeger tags. -func ConvertLogsToJaegerTags(logFields []log.Field) []*j.Tag { - fields := tags(make([]*j.Tag, 0, len(logFields))) - for _, field := range logFields { - field.Marshal(&fields) - } - return fields -} - -func (t *tags) EmitString(key, value string) { - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_STRING, VStr: &value}) -} - -func (t *tags) EmitBool(key string, value bool) { - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_BOOL, VBool: &value}) -} - -func (t *tags) EmitInt(key string, value int) { - vLong := int64(value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_LONG, VLong: &vLong}) -} - -func (t *tags) EmitInt32(key string, value int32) { - vLong := int64(value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_LONG, VLong: &vLong}) -} - -func (t *tags) EmitInt64(key string, value int64) { - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_LONG, VLong: &value}) -} - -func (t *tags) EmitUint32(key string, value uint32) { - vLong := int64(value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_LONG, VLong: &vLong}) -} - -func (t *tags) EmitUint64(key string, value uint64) { - vLong := int64(value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_LONG, VLong: &vLong}) -} - -func (t *tags) EmitFloat32(key string, value float32) { - vDouble := float64(value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_DOUBLE, VDouble: &vDouble}) -} - -func (t *tags) EmitFloat64(key string, value float64) { - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_DOUBLE, VDouble: &value}) -} - -func (t *tags) EmitObject(key string, value interface{}) { - vStr := fmt.Sprintf("%+v", value) - *t = append(*t, &j.Tag{Key: key, VType: j.TagType_STRING, VStr: &vStr}) -} - -func (t *tags) EmitLazyLogger(value log.LazyLogger) { - value(t) -} diff --git a/vendor/github.com/uber/jaeger-client-go/jaeger_thrift_span.go b/vendor/github.com/uber/jaeger-client-go/jaeger_thrift_span.go deleted file mode 100644 index 6ce1caf873d9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/jaeger_thrift_span.go +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "time" - - "github.com/opentracing/opentracing-go" - - j "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/utils" -) - -// BuildJaegerThrift builds jaeger span based on internal span. -func BuildJaegerThrift(span *Span) *j.Span { - span.Lock() - defer span.Unlock() - startTime := utils.TimeToMicrosecondsSinceEpochInt64(span.startTime) - duration := span.duration.Nanoseconds() / int64(time.Microsecond) - jaegerSpan := &j.Span{ - TraceIdLow: int64(span.context.traceID.Low), - TraceIdHigh: int64(span.context.traceID.High), - SpanId: int64(span.context.spanID), - ParentSpanId: int64(span.context.parentID), - OperationName: span.operationName, - Flags: int32(span.context.flags), - StartTime: startTime, - Duration: duration, - Tags: buildTags(span.tags, span.tracer.options.maxTagValueLength), - Logs: buildLogs(span.logs), - References: buildReferences(span.references), - } - return jaegerSpan -} - -// BuildJaegerProcessThrift creates a thrift Process type. -func BuildJaegerProcessThrift(span *Span) *j.Process { - span.Lock() - defer span.Unlock() - return buildJaegerProcessThrift(span.tracer) -} - -func buildJaegerProcessThrift(tracer *Tracer) *j.Process { - process := &j.Process{ - ServiceName: tracer.serviceName, - Tags: buildTags(tracer.tags, tracer.options.maxTagValueLength), - } - if tracer.process.UUID != "" { - process.Tags = append(process.Tags, &j.Tag{Key: TracerUUIDTagKey, VStr: &tracer.process.UUID, VType: j.TagType_STRING}) - } - return process -} - -func buildTags(tags []Tag, maxTagValueLength int) []*j.Tag { - jTags := make([]*j.Tag, 0, len(tags)) - for _, tag := range tags { - jTag := buildTag(&tag, maxTagValueLength) - jTags = append(jTags, jTag) - } - return jTags -} - -func buildLogs(logs []opentracing.LogRecord) []*j.Log { - jLogs := make([]*j.Log, 0, len(logs)) - for _, log := range logs { - jLog := &j.Log{ - Timestamp: utils.TimeToMicrosecondsSinceEpochInt64(log.Timestamp), - Fields: ConvertLogsToJaegerTags(log.Fields), - } - jLogs = append(jLogs, jLog) - } - return jLogs -} - -func buildTag(tag *Tag, maxTagValueLength int) *j.Tag { - jTag := &j.Tag{Key: tag.key} - switch value := tag.value.(type) { - case string: - vStr := truncateString(value, maxTagValueLength) - jTag.VStr = &vStr - jTag.VType = j.TagType_STRING - case []byte: - if len(value) > maxTagValueLength { - value = value[:maxTagValueLength] - } - jTag.VBinary = value - jTag.VType = j.TagType_BINARY - case int: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case uint: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case int8: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case uint8: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case int16: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case uint16: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case int32: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case uint32: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case int64: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case uint64: - vLong := int64(value) - jTag.VLong = &vLong - jTag.VType = j.TagType_LONG - case float32: - vDouble := float64(value) - jTag.VDouble = &vDouble - jTag.VType = j.TagType_DOUBLE - case float64: - vDouble := float64(value) - jTag.VDouble = &vDouble - jTag.VType = j.TagType_DOUBLE - case bool: - vBool := value - jTag.VBool = &vBool - jTag.VType = j.TagType_BOOL - default: - vStr := truncateString(stringify(value), maxTagValueLength) - jTag.VStr = &vStr - jTag.VType = j.TagType_STRING - } - return jTag -} - -func buildReferences(references []Reference) []*j.SpanRef { - retMe := make([]*j.SpanRef, 0, len(references)) - for _, ref := range references { - if ref.Type == opentracing.ChildOfRef { - retMe = append(retMe, spanRef(ref.Context, j.SpanRefType_CHILD_OF)) - } else if ref.Type == opentracing.FollowsFromRef { - retMe = append(retMe, spanRef(ref.Context, j.SpanRefType_FOLLOWS_FROM)) - } - } - return retMe -} - -func spanRef(ctx SpanContext, refType j.SpanRefType) *j.SpanRef { - return &j.SpanRef{ - RefType: refType, - TraceIdLow: int64(ctx.traceID.Low), - TraceIdHigh: int64(ctx.traceID.High), - SpanId: int64(ctx.spanID), - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/log/logger.go b/vendor/github.com/uber/jaeger-client-go/log/logger.go deleted file mode 100644 index 894bb3dbf712..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/log/logger.go +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package log - -import ( - "bytes" - "fmt" - "log" - "sync" -) - -// Logger provides an abstract interface for logging from Reporters. -// Applications can provide their own implementation of this interface to adapt -// reporters logging to whatever logging library they prefer (stdlib log, -// logrus, go-logging, etc). -type Logger interface { - // Error logs a message at error priority - Error(msg string) - - // Infof logs a message at info priority - Infof(msg string, args ...interface{}) -} - -// StdLogger is implementation of the Logger interface that delegates to default `log` package -var StdLogger = &stdLogger{} - -type stdLogger struct{} - -func (l *stdLogger) Error(msg string) { - log.Printf("ERROR: %s", msg) -} - -// Infof logs a message at info priority -func (l *stdLogger) Infof(msg string, args ...interface{}) { - log.Printf(msg, args...) -} - -// NullLogger is implementation of the Logger interface that is no-op -var NullLogger = &nullLogger{} - -type nullLogger struct{} - -func (l *nullLogger) Error(msg string) {} -func (l *nullLogger) Infof(msg string, args ...interface{}) {} - -// BytesBufferLogger implements Logger backed by a bytes.Buffer. -type BytesBufferLogger struct { - mux sync.Mutex - buf bytes.Buffer -} - -// Error implements Logger. -func (l *BytesBufferLogger) Error(msg string) { - l.mux.Lock() - l.buf.WriteString(fmt.Sprintf("ERROR: %s\n", msg)) - l.mux.Unlock() -} - -// Infof implements Logger. -func (l *BytesBufferLogger) Infof(msg string, args ...interface{}) { - l.mux.Lock() - l.buf.WriteString("INFO: " + fmt.Sprintf(msg, args...) + "\n") - l.mux.Unlock() -} - -// String returns string representation of the underlying buffer. -func (l *BytesBufferLogger) String() string { - l.mux.Lock() - defer l.mux.Unlock() - return l.buf.String() -} - -// Flush empties the underlying buffer. -func (l *BytesBufferLogger) Flush() { - l.mux.Lock() - defer l.mux.Unlock() - l.buf.Reset() -} diff --git a/vendor/github.com/uber/jaeger-client-go/logger.go b/vendor/github.com/uber/jaeger-client-go/logger.go deleted file mode 100644 index d4f0b501923d..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/logger.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import "log" - -// NB This will be deprecated in 3.0.0, please use jaeger-client-go/log/logger instead. - -// Logger provides an abstract interface for logging from Reporters. -// Applications can provide their own implementation of this interface to adapt -// reporters logging to whatever logging library they prefer (stdlib log, -// logrus, go-logging, etc). -type Logger interface { - // Error logs a message at error priority - Error(msg string) - - // Infof logs a message at info priority - Infof(msg string, args ...interface{}) -} - -// StdLogger is implementation of the Logger interface that delegates to default `log` package -var StdLogger = &stdLogger{} - -type stdLogger struct{} - -func (l *stdLogger) Error(msg string) { - log.Printf("ERROR: %s", msg) -} - -// Infof logs a message at info priority -func (l *stdLogger) Infof(msg string, args ...interface{}) { - log.Printf(msg, args...) -} - -// NullLogger is implementation of the Logger interface that delegates to default `log` package -var NullLogger = &nullLogger{} - -type nullLogger struct{} - -func (l *nullLogger) Error(msg string) {} -func (l *nullLogger) Infof(msg string, args ...interface{}) {} diff --git a/vendor/github.com/uber/jaeger-client-go/metrics.go b/vendor/github.com/uber/jaeger-client-go/metrics.go deleted file mode 100644 index cadb2b9c0fb0..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/metrics.go +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2017-2018 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "github.com/uber/jaeger-lib/metrics" -) - -// Metrics is a container of all stats emitted by Jaeger tracer. -type Metrics struct { - // Number of traces started by this tracer as sampled - TracesStartedSampled metrics.Counter `metric:"traces" tags:"state=started,sampled=y"` - - // Number of traces started by this tracer as not sampled - TracesStartedNotSampled metrics.Counter `metric:"traces" tags:"state=started,sampled=n"` - - // Number of externally started sampled traces this tracer joined - TracesJoinedSampled metrics.Counter `metric:"traces" tags:"state=joined,sampled=y"` - - // Number of externally started not-sampled traces this tracer joined - TracesJoinedNotSampled metrics.Counter `metric:"traces" tags:"state=joined,sampled=n"` - - // Number of sampled spans started by this tracer - SpansStartedSampled metrics.Counter `metric:"started_spans" tags:"sampled=y"` - - // Number of unsampled spans started by this tracer - SpansStartedNotSampled metrics.Counter `metric:"started_spans" tags:"sampled=n"` - - // Number of spans finished by this tracer - SpansFinished metrics.Counter `metric:"finished_spans"` - - // Number of errors decoding tracing context - DecodingErrors metrics.Counter `metric:"span_context_decoding_errors"` - - // Number of spans successfully reported - ReporterSuccess metrics.Counter `metric:"reporter_spans" tags:"result=ok"` - - // Number of spans not reported due to a Sender failure - ReporterFailure metrics.Counter `metric:"reporter_spans" tags:"result=err"` - - // Number of spans dropped due to internal queue overflow - ReporterDropped metrics.Counter `metric:"reporter_spans" tags:"result=dropped"` - - // Current number of spans in the reporter queue - ReporterQueueLength metrics.Gauge `metric:"reporter_queue_length"` - - // Number of times the Sampler succeeded to retrieve sampling strategy - SamplerRetrieved metrics.Counter `metric:"sampler_queries" tags:"result=ok"` - - // Number of times the Sampler failed to retrieve sampling strategy - SamplerQueryFailure metrics.Counter `metric:"sampler_queries" tags:"result=err"` - - // Number of times the Sampler succeeded to retrieve and update sampling strategy - SamplerUpdated metrics.Counter `metric:"sampler_updates" tags:"result=ok"` - - // Number of times the Sampler failed to update sampling strategy - SamplerUpdateFailure metrics.Counter `metric:"sampler_updates" tags:"result=err"` - - // Number of times baggage was successfully written or updated on spans. - BaggageUpdateSuccess metrics.Counter `metric:"baggage_updates" tags:"result=ok"` - - // Number of times baggage failed to write or update on spans. - BaggageUpdateFailure metrics.Counter `metric:"baggage_updates" tags:"result=err"` - - // Number of times baggage was truncated as per baggage restrictions. - BaggageTruncate metrics.Counter `metric:"baggage_truncations"` - - // Number of times baggage restrictions were successfully updated. - BaggageRestrictionsUpdateSuccess metrics.Counter `metric:"baggage_restrictions_updates" tags:"result=ok"` - - // Number of times baggage restrictions failed to update. - BaggageRestrictionsUpdateFailure metrics.Counter `metric:"baggage_restrictions_updates" tags:"result=err"` - - // Number of times debug spans were throttled. - ThrottledDebugSpans metrics.Counter `metric:"throttled_debug_spans"` - - // Number of times throttler successfully updated. - ThrottlerUpdateSuccess metrics.Counter `metric:"throttler_updates" tags:"result=ok"` - - // Number of times throttler failed to update. - ThrottlerUpdateFailure metrics.Counter `metric:"throttler_updates" tags:"result=err"` -} - -// NewMetrics creates a new Metrics struct and initializes it. -func NewMetrics(factory metrics.Factory, globalTags map[string]string) *Metrics { - m := &Metrics{} - // TODO the namespace "jaeger" should be configurable (e.g. in all-in-one "jaeger-client" would make more sense) - metrics.Init(m, factory.Namespace("jaeger", nil), globalTags) - return m -} - -// NewNullMetrics creates a new Metrics struct that won't report any metrics. -func NewNullMetrics() *Metrics { - return NewMetrics(metrics.NullFactory, nil) -} diff --git a/vendor/github.com/uber/jaeger-client-go/observer.go b/vendor/github.com/uber/jaeger-client-go/observer.go deleted file mode 100644 index 7bbd028897a9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/observer.go +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import opentracing "github.com/opentracing/opentracing-go" - -// Observer can be registered with the Tracer to receive notifications about -// new Spans. -// -// Deprecated: use jaeger.ContribObserver instead. -type Observer interface { - OnStartSpan(operationName string, options opentracing.StartSpanOptions) SpanObserver -} - -// SpanObserver is created by the Observer and receives notifications about -// other Span events. -// -// Deprecated: use jaeger.ContribSpanObserver instead. -type SpanObserver interface { - OnSetOperationName(operationName string) - OnSetTag(key string, value interface{}) - OnFinish(options opentracing.FinishOptions) -} - -// compositeObserver is a dispatcher to other observers -type compositeObserver struct { - observers []ContribObserver -} - -// compositeSpanObserver is a dispatcher to other span observers -type compositeSpanObserver struct { - observers []ContribSpanObserver -} - -// noopSpanObserver is used when there are no observers registered -// on the Tracer or none of them returns span observers from OnStartSpan. -var noopSpanObserver = &compositeSpanObserver{} - -func (o *compositeObserver) append(contribObserver ContribObserver) { - o.observers = append(o.observers, contribObserver) -} - -func (o *compositeObserver) OnStartSpan(sp opentracing.Span, operationName string, options opentracing.StartSpanOptions) ContribSpanObserver { - var spanObservers []ContribSpanObserver - for _, obs := range o.observers { - spanObs, ok := obs.OnStartSpan(sp, operationName, options) - if ok { - if spanObservers == nil { - spanObservers = make([]ContribSpanObserver, 0, len(o.observers)) - } - spanObservers = append(spanObservers, spanObs) - } - } - if len(spanObservers) == 0 { - return noopSpanObserver - } - return &compositeSpanObserver{observers: spanObservers} -} - -func (o *compositeSpanObserver) OnSetOperationName(operationName string) { - for _, obs := range o.observers { - obs.OnSetOperationName(operationName) - } -} - -func (o *compositeSpanObserver) OnSetTag(key string, value interface{}) { - for _, obs := range o.observers { - obs.OnSetTag(key, value) - } -} - -func (o *compositeSpanObserver) OnFinish(options opentracing.FinishOptions) { - for _, obs := range o.observers { - obs.OnFinish(options) - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/process.go b/vendor/github.com/uber/jaeger-client-go/process.go deleted file mode 100644 index 30cbf99624c9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/process.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2018 The Jaeger Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -// Process holds process specific metadata that's relevant to this client. -type Process struct { - Service string - UUID string - Tags []Tag -} - -// ProcessSetter sets a process. This can be used by any class that requires -// the process to be set as part of initialization. -// See internal/throttler/remote/throttler.go for an example. -type ProcessSetter interface { - SetProcess(process Process) -} diff --git a/vendor/github.com/uber/jaeger-client-go/propagation.go b/vendor/github.com/uber/jaeger-client-go/propagation.go deleted file mode 100644 index abca67a3c9b9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/propagation.go +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "bytes" - "encoding/binary" - "fmt" - "io" - "log" - "net/url" - "strings" - "sync" - - opentracing "github.com/opentracing/opentracing-go" -) - -// Injector is responsible for injecting SpanContext instances in a manner suitable -// for propagation via a format-specific "carrier" object. Typically the -// injection will take place across an RPC boundary, but message queues and -// other IPC mechanisms are also reasonable places to use an Injector. -type Injector interface { - // Inject takes `SpanContext` and injects it into `carrier`. The actual type - // of `carrier` depends on the `format` passed to `Tracer.Inject()`. - // - // Implementations may return opentracing.ErrInvalidCarrier or any other - // implementation-specific error if injection fails. - Inject(ctx SpanContext, carrier interface{}) error -} - -// Extractor is responsible for extracting SpanContext instances from a -// format-specific "carrier" object. Typically the extraction will take place -// on the server side of an RPC boundary, but message queues and other IPC -// mechanisms are also reasonable places to use an Extractor. -type Extractor interface { - // Extract decodes a SpanContext instance from the given `carrier`, - // or (nil, opentracing.ErrSpanContextNotFound) if no context could - // be found in the `carrier`. - Extract(carrier interface{}) (SpanContext, error) -} - -type textMapPropagator struct { - headerKeys *HeadersConfig - metrics Metrics - encodeValue func(string) string - decodeValue func(string) string -} - -func newTextMapPropagator(headerKeys *HeadersConfig, metrics Metrics) *textMapPropagator { - return &textMapPropagator{ - headerKeys: headerKeys, - metrics: metrics, - encodeValue: func(val string) string { - return val - }, - decodeValue: func(val string) string { - return val - }, - } -} - -func newHTTPHeaderPropagator(headerKeys *HeadersConfig, metrics Metrics) *textMapPropagator { - return &textMapPropagator{ - headerKeys: headerKeys, - metrics: metrics, - encodeValue: func(val string) string { - return url.QueryEscape(val) - }, - decodeValue: func(val string) string { - // ignore decoding errors, cannot do anything about them - if v, err := url.QueryUnescape(val); err == nil { - return v - } - return val - }, - } -} - -type binaryPropagator struct { - tracer *Tracer - buffers sync.Pool -} - -func newBinaryPropagator(tracer *Tracer) *binaryPropagator { - return &binaryPropagator{ - tracer: tracer, - buffers: sync.Pool{New: func() interface{} { return &bytes.Buffer{} }}, - } -} - -func (p *textMapPropagator) Inject( - sc SpanContext, - abstractCarrier interface{}, -) error { - textMapWriter, ok := abstractCarrier.(opentracing.TextMapWriter) - if !ok { - return opentracing.ErrInvalidCarrier - } - - // Do not encode the string with trace context to avoid accidental double-encoding - // if people are using opentracing < 0.10.0. Our colon-separated representation - // of the trace context is already safe for HTTP headers. - textMapWriter.Set(p.headerKeys.TraceContextHeaderName, sc.String()) - for k, v := range sc.baggage { - safeKey := p.addBaggageKeyPrefix(k) - safeVal := p.encodeValue(v) - textMapWriter.Set(safeKey, safeVal) - } - return nil -} - -func (p *textMapPropagator) Extract(abstractCarrier interface{}) (SpanContext, error) { - textMapReader, ok := abstractCarrier.(opentracing.TextMapReader) - if !ok { - return emptyContext, opentracing.ErrInvalidCarrier - } - var ctx SpanContext - var baggage map[string]string - err := textMapReader.ForeachKey(func(rawKey, value string) error { - key := strings.ToLower(rawKey) // TODO not necessary for plain TextMap - if key == p.headerKeys.TraceContextHeaderName { - var err error - safeVal := p.decodeValue(value) - if ctx, err = ContextFromString(safeVal); err != nil { - return err - } - } else if key == p.headerKeys.JaegerDebugHeader { - ctx.debugID = p.decodeValue(value) - } else if key == p.headerKeys.JaegerBaggageHeader { - if baggage == nil { - baggage = make(map[string]string) - } - for k, v := range p.parseCommaSeparatedMap(value) { - baggage[k] = v - } - } else if strings.HasPrefix(key, p.headerKeys.TraceBaggageHeaderPrefix) { - if baggage == nil { - baggage = make(map[string]string) - } - safeKey := p.removeBaggageKeyPrefix(key) - safeVal := p.decodeValue(value) - baggage[safeKey] = safeVal - } - return nil - }) - if err != nil { - p.metrics.DecodingErrors.Inc(1) - return emptyContext, err - } - if !ctx.traceID.IsValid() && ctx.debugID == "" && len(baggage) == 0 { - return emptyContext, opentracing.ErrSpanContextNotFound - } - ctx.baggage = baggage - return ctx, nil -} - -func (p *binaryPropagator) Inject( - sc SpanContext, - abstractCarrier interface{}, -) error { - carrier, ok := abstractCarrier.(io.Writer) - if !ok { - return opentracing.ErrInvalidCarrier - } - - // Handle the tracer context - if err := binary.Write(carrier, binary.BigEndian, sc.traceID); err != nil { - return err - } - if err := binary.Write(carrier, binary.BigEndian, sc.spanID); err != nil { - return err - } - if err := binary.Write(carrier, binary.BigEndian, sc.parentID); err != nil { - return err - } - if err := binary.Write(carrier, binary.BigEndian, sc.flags); err != nil { - return err - } - - // Handle the baggage items - if err := binary.Write(carrier, binary.BigEndian, int32(len(sc.baggage))); err != nil { - return err - } - for k, v := range sc.baggage { - if err := binary.Write(carrier, binary.BigEndian, int32(len(k))); err != nil { - return err - } - io.WriteString(carrier, k) - if err := binary.Write(carrier, binary.BigEndian, int32(len(v))); err != nil { - return err - } - io.WriteString(carrier, v) - } - - return nil -} - -func (p *binaryPropagator) Extract(abstractCarrier interface{}) (SpanContext, error) { - carrier, ok := abstractCarrier.(io.Reader) - if !ok { - return emptyContext, opentracing.ErrInvalidCarrier - } - var ctx SpanContext - - if err := binary.Read(carrier, binary.BigEndian, &ctx.traceID); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - if err := binary.Read(carrier, binary.BigEndian, &ctx.spanID); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - if err := binary.Read(carrier, binary.BigEndian, &ctx.parentID); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - if err := binary.Read(carrier, binary.BigEndian, &ctx.flags); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - - // Handle the baggage items - var numBaggage int32 - if err := binary.Read(carrier, binary.BigEndian, &numBaggage); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - if iNumBaggage := int(numBaggage); iNumBaggage > 0 { - ctx.baggage = make(map[string]string, iNumBaggage) - buf := p.buffers.Get().(*bytes.Buffer) - defer p.buffers.Put(buf) - - var keyLen, valLen int32 - for i := 0; i < iNumBaggage; i++ { - if err := binary.Read(carrier, binary.BigEndian, &keyLen); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - buf.Reset() - buf.Grow(int(keyLen)) - if n, err := io.CopyN(buf, carrier, int64(keyLen)); err != nil || int32(n) != keyLen { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - key := buf.String() - - if err := binary.Read(carrier, binary.BigEndian, &valLen); err != nil { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - buf.Reset() - buf.Grow(int(valLen)) - if n, err := io.CopyN(buf, carrier, int64(valLen)); err != nil || int32(n) != valLen { - return emptyContext, opentracing.ErrSpanContextCorrupted - } - ctx.baggage[key] = buf.String() - } - } - - return ctx, nil -} - -// Converts a comma separated key value pair list into a map -// e.g. key1=value1, key2=value2, key3 = value3 -// is converted to map[string]string { "key1" : "value1", -// "key2" : "value2", -// "key3" : "value3" } -func (p *textMapPropagator) parseCommaSeparatedMap(value string) map[string]string { - baggage := make(map[string]string) - value, err := url.QueryUnescape(value) - if err != nil { - log.Printf("Unable to unescape %s, %v", value, err) - return baggage - } - for _, kvpair := range strings.Split(value, ",") { - kv := strings.Split(strings.TrimSpace(kvpair), "=") - if len(kv) == 2 { - baggage[kv[0]] = kv[1] - } else { - log.Printf("Malformed value passed in for %s", p.headerKeys.JaegerBaggageHeader) - } - } - return baggage -} - -// Converts a baggage item key into an http header format, -// by prepending TraceBaggageHeaderPrefix and encoding the key string -func (p *textMapPropagator) addBaggageKeyPrefix(key string) string { - // TODO encodeBaggageKeyAsHeader add caching and escaping - return fmt.Sprintf("%v%v", p.headerKeys.TraceBaggageHeaderPrefix, key) -} - -func (p *textMapPropagator) removeBaggageKeyPrefix(key string) string { - // TODO decodeBaggageHeaderKey add caching and escaping - return key[len(p.headerKeys.TraceBaggageHeaderPrefix):] -} diff --git a/vendor/github.com/uber/jaeger-client-go/reporter.go b/vendor/github.com/uber/jaeger-client-go/reporter.go deleted file mode 100644 index fe6288c4b9e5..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/reporter.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "fmt" - "sync" - "sync/atomic" - "time" - - "github.com/opentracing/opentracing-go" - - "github.com/uber/jaeger-client-go/log" -) - -// Reporter is called by the tracer when a span is completed to report the span to the tracing collector. -type Reporter interface { - // Report submits a new span to collectors, possibly asynchronously and/or with buffering. - Report(span *Span) - - // Close does a clean shutdown of the reporter, flushing any traces that may be buffered in memory. - Close() -} - -// ------------------------------ - -type nullReporter struct{} - -// NewNullReporter creates a no-op reporter that ignores all reported spans. -func NewNullReporter() Reporter { - return &nullReporter{} -} - -// Report implements Report() method of Reporter by doing nothing. -func (r *nullReporter) Report(span *Span) { - // no-op -} - -// Close implements Close() method of Reporter by doing nothing. -func (r *nullReporter) Close() { - // no-op -} - -// ------------------------------ - -type loggingReporter struct { - logger Logger -} - -// NewLoggingReporter creates a reporter that logs all reported spans to provided logger. -func NewLoggingReporter(logger Logger) Reporter { - return &loggingReporter{logger} -} - -// Report implements Report() method of Reporter by logging the span to the logger. -func (r *loggingReporter) Report(span *Span) { - r.logger.Infof("Reporting span %+v", span) -} - -// Close implements Close() method of Reporter by doing nothing. -func (r *loggingReporter) Close() { - // no-op -} - -// ------------------------------ - -// InMemoryReporter is used for testing, and simply collects spans in memory. -type InMemoryReporter struct { - spans []opentracing.Span - lock sync.Mutex -} - -// NewInMemoryReporter creates a reporter that stores spans in memory. -// NOTE: the Tracer should be created with options.PoolSpans = false. -func NewInMemoryReporter() *InMemoryReporter { - return &InMemoryReporter{ - spans: make([]opentracing.Span, 0, 10), - } -} - -// Report implements Report() method of Reporter by storing the span in the buffer. -func (r *InMemoryReporter) Report(span *Span) { - r.lock.Lock() - r.spans = append(r.spans, span) - r.lock.Unlock() -} - -// Close implements Close() method of Reporter by doing nothing. -func (r *InMemoryReporter) Close() { - // no-op -} - -// SpansSubmitted returns the number of spans accumulated in the buffer. -func (r *InMemoryReporter) SpansSubmitted() int { - r.lock.Lock() - defer r.lock.Unlock() - return len(r.spans) -} - -// GetSpans returns accumulated spans as a copy of the buffer. -func (r *InMemoryReporter) GetSpans() []opentracing.Span { - r.lock.Lock() - defer r.lock.Unlock() - copied := make([]opentracing.Span, len(r.spans)) - copy(copied, r.spans) - return copied -} - -// Reset clears all accumulated spans. -func (r *InMemoryReporter) Reset() { - r.lock.Lock() - defer r.lock.Unlock() - r.spans = nil -} - -// ------------------------------ - -type compositeReporter struct { - reporters []Reporter -} - -// NewCompositeReporter creates a reporter that ignores all reported spans. -func NewCompositeReporter(reporters ...Reporter) Reporter { - return &compositeReporter{reporters: reporters} -} - -// Report implements Report() method of Reporter by delegating to each underlying reporter. -func (r *compositeReporter) Report(span *Span) { - for _, reporter := range r.reporters { - reporter.Report(span) - } -} - -// Close implements Close() method of Reporter by closing each underlying reporter. -func (r *compositeReporter) Close() { - for _, reporter := range r.reporters { - reporter.Close() - } -} - -// ------------- REMOTE REPORTER ----------------- - -type reporterQueueItemType int - -const ( - defaultQueueSize = 100 - defaultBufferFlushInterval = 1 * time.Second - - reporterQueueItemSpan reporterQueueItemType = iota - reporterQueueItemClose -) - -type reporterQueueItem struct { - itemType reporterQueueItemType - span *Span - close *sync.WaitGroup -} - -type remoteReporter struct { - // These fields must be first in the struct because `sync/atomic` expects 64-bit alignment. - // Cf. https://github.com/uber/jaeger-client-go/issues/155, https://goo.gl/zW7dgq - queueLength int64 - closed int64 // 0 - not closed, 1 - closed - - reporterOptions - - sender Transport - queue chan reporterQueueItem -} - -// NewRemoteReporter creates a new reporter that sends spans out of process by means of Sender. -// Calls to Report(Span) return immediately (side effect: if internal buffer is full the span is dropped). -// Periodically the transport buffer is flushed even if it hasn't reached max packet size. -// Calls to Close() block until all spans reported prior to the call to Close are flushed. -func NewRemoteReporter(sender Transport, opts ...ReporterOption) Reporter { - options := reporterOptions{} - for _, option := range opts { - option(&options) - } - if options.bufferFlushInterval <= 0 { - options.bufferFlushInterval = defaultBufferFlushInterval - } - if options.logger == nil { - options.logger = log.NullLogger - } - if options.metrics == nil { - options.metrics = NewNullMetrics() - } - if options.queueSize <= 0 { - options.queueSize = defaultQueueSize - } - reporter := &remoteReporter{ - reporterOptions: options, - sender: sender, - queue: make(chan reporterQueueItem, options.queueSize), - } - go reporter.processQueue() - return reporter -} - -// Report implements Report() method of Reporter. -// It passes the span to a background go-routine for submission to Jaeger backend. -// If the internal queue is full, the span is dropped and metrics.ReporterDropped counter is incremented. -// If Report() is called after the reporter has been Close()-ed, the additional spans will not be -// sent to the backend, but the metrics.ReporterDropped counter may not reflect them correctly, -// because some of them may still be successfully added to the queue. -func (r *remoteReporter) Report(span *Span) { - select { - case r.queue <- reporterQueueItem{itemType: reporterQueueItemSpan, span: span}: - atomic.AddInt64(&r.queueLength, 1) - default: - r.metrics.ReporterDropped.Inc(1) - } -} - -// Close implements Close() method of Reporter by waiting for the queue to be drained. -func (r *remoteReporter) Close() { - if swapped := atomic.CompareAndSwapInt64(&r.closed, 0, 1); !swapped { - r.logger.Error("Repeated attempt to close the reporter is ignored") - return - } - r.sendCloseEvent() - r.sender.Close() -} - -func (r *remoteReporter) sendCloseEvent() { - wg := &sync.WaitGroup{} - wg.Add(1) - item := reporterQueueItem{itemType: reporterQueueItemClose, close: wg} - - r.queue <- item // if the queue is full we will block until there is space - atomic.AddInt64(&r.queueLength, 1) - wg.Wait() -} - -// processQueue reads spans from the queue, converts them to Thrift, and stores them in an internal buffer. -// When the buffer length reaches batchSize, it is flushed by submitting the accumulated spans to Jaeger. -// Buffer also gets flushed automatically every batchFlushInterval seconds, just in case the tracer stopped -// reporting new spans. -func (r *remoteReporter) processQueue() { - // flush causes the Sender to flush its accumulated spans and clear the buffer - flush := func() { - if flushed, err := r.sender.Flush(); err != nil { - r.metrics.ReporterFailure.Inc(int64(flushed)) - r.logger.Error(fmt.Sprintf("error when flushing the buffer: %s", err.Error())) - } else if flushed > 0 { - r.metrics.ReporterSuccess.Inc(int64(flushed)) - } - } - - timer := time.NewTicker(r.bufferFlushInterval) - for { - select { - case <-timer.C: - flush() - case item := <-r.queue: - atomic.AddInt64(&r.queueLength, -1) - switch item.itemType { - case reporterQueueItemSpan: - span := item.span - if flushed, err := r.sender.Append(span); err != nil { - r.metrics.ReporterFailure.Inc(int64(flushed)) - r.logger.Error(fmt.Sprintf("error reporting span %q: %s", span.OperationName(), err.Error())) - } else if flushed > 0 { - r.metrics.ReporterSuccess.Inc(int64(flushed)) - // to reduce the number of gauge stats, we only emit queue length on flush - r.metrics.ReporterQueueLength.Update(atomic.LoadInt64(&r.queueLength)) - } - case reporterQueueItemClose: - timer.Stop() - flush() - item.close.Done() - return - } - } - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/reporter_options.go b/vendor/github.com/uber/jaeger-client-go/reporter_options.go deleted file mode 100644 index 65012d7015dc..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/reporter_options.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "time" -) - -// ReporterOption is a function that sets some option on the reporter. -type ReporterOption func(c *reporterOptions) - -// ReporterOptions is a factory for all available ReporterOption's -var ReporterOptions reporterOptions - -// reporterOptions control behavior of the reporter. -type reporterOptions struct { - // queueSize is the size of internal queue where reported spans are stored before they are processed in the background - queueSize int - // bufferFlushInterval is how often the buffer is force-flushed, even if it's not full - bufferFlushInterval time.Duration - // logger is used to log errors of span submissions - logger Logger - // metrics is used to record runtime stats - metrics *Metrics -} - -// QueueSize creates a ReporterOption that sets the size of the internal queue where -// spans are stored before they are processed. -func (reporterOptions) QueueSize(queueSize int) ReporterOption { - return func(r *reporterOptions) { - r.queueSize = queueSize - } -} - -// Metrics creates a ReporterOption that initializes Metrics in the reporter, -// which is used to record runtime statistics. -func (reporterOptions) Metrics(metrics *Metrics) ReporterOption { - return func(r *reporterOptions) { - r.metrics = metrics - } -} - -// BufferFlushInterval creates a ReporterOption that sets how often the queue -// is force-flushed. -func (reporterOptions) BufferFlushInterval(bufferFlushInterval time.Duration) ReporterOption { - return func(r *reporterOptions) { - r.bufferFlushInterval = bufferFlushInterval - } -} - -// Logger creates a ReporterOption that initializes the logger used to log -// errors of span submissions. -func (reporterOptions) Logger(logger Logger) ReporterOption { - return func(r *reporterOptions) { - r.logger = logger - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/README.md b/vendor/github.com/uber/jaeger-client-go/rpcmetrics/README.md deleted file mode 100644 index 879948e9c9cd..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/README.md +++ /dev/null @@ -1,5 +0,0 @@ -An Observer that can be used to emit RPC metrics -================================================ - -It can be attached to the tracer during tracer construction. -See `ExampleObserver` function in [observer_test.go](./observer_test.go). diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/endpoints.go b/vendor/github.com/uber/jaeger-client-go/rpcmetrics/endpoints.go deleted file mode 100644 index 30555243d0c0..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/endpoints.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpcmetrics - -import "sync" - -// normalizedEndpoints is a cache for endpointName -> safeName mappings. -type normalizedEndpoints struct { - names map[string]string - maxSize int - defaultName string - normalizer NameNormalizer - mux sync.RWMutex -} - -func newNormalizedEndpoints(maxSize int, normalizer NameNormalizer) *normalizedEndpoints { - return &normalizedEndpoints{ - maxSize: maxSize, - normalizer: normalizer, - names: make(map[string]string, maxSize), - } -} - -// normalize looks up the name in the cache, if not found it uses normalizer -// to convert the name to a safe name. If called with more than maxSize unique -// names it returns "" for all other names beyond those already cached. -func (n *normalizedEndpoints) normalize(name string) string { - n.mux.RLock() - norm, ok := n.names[name] - l := len(n.names) - n.mux.RUnlock() - if ok { - return norm - } - if l >= n.maxSize { - return "" - } - return n.normalizeWithLock(name) -} - -func (n *normalizedEndpoints) normalizeWithLock(name string) string { - norm := n.normalizer.Normalize(name) - n.mux.Lock() - defer n.mux.Unlock() - // cache may have grown while we were not holding the lock - if len(n.names) >= n.maxSize { - return "" - } - n.names[name] = norm - return norm -} diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/metrics.go b/vendor/github.com/uber/jaeger-client-go/rpcmetrics/metrics.go deleted file mode 100644 index ab8d74c29185..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/metrics.go +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpcmetrics - -import ( - "sync" - - "github.com/uber/jaeger-lib/metrics" -) - -const ( - otherEndpointsPlaceholder = "other" - endpointNameMetricTag = "endpoint" -) - -// Metrics is a collection of metrics for an endpoint describing -// throughput, success, errors, and performance. -type Metrics struct { - // RequestCountSuccess is a counter of the total number of successes. - RequestCountSuccess metrics.Counter `metric:"requests" tags:"error=false"` - - // RequestCountFailures is a counter of the number of times any failure has been observed. - RequestCountFailures metrics.Counter `metric:"requests" tags:"error=true"` - - // RequestLatencySuccess is a latency histogram of succesful requests. - RequestLatencySuccess metrics.Timer `metric:"request_latency" tags:"error=false"` - - // RequestLatencyFailures is a latency histogram of failed requests. - RequestLatencyFailures metrics.Timer `metric:"request_latency" tags:"error=true"` - - // HTTPStatusCode2xx is a counter of the total number of requests with HTTP status code 200-299 - HTTPStatusCode2xx metrics.Counter `metric:"http_requests" tags:"status_code=2xx"` - - // HTTPStatusCode3xx is a counter of the total number of requests with HTTP status code 300-399 - HTTPStatusCode3xx metrics.Counter `metric:"http_requests" tags:"status_code=3xx"` - - // HTTPStatusCode4xx is a counter of the total number of requests with HTTP status code 400-499 - HTTPStatusCode4xx metrics.Counter `metric:"http_requests" tags:"status_code=4xx"` - - // HTTPStatusCode5xx is a counter of the total number of requests with HTTP status code 500-599 - HTTPStatusCode5xx metrics.Counter `metric:"http_requests" tags:"status_code=5xx"` -} - -func (m *Metrics) recordHTTPStatusCode(statusCode uint16) { - if statusCode >= 200 && statusCode < 300 { - m.HTTPStatusCode2xx.Inc(1) - } else if statusCode >= 300 && statusCode < 400 { - m.HTTPStatusCode3xx.Inc(1) - } else if statusCode >= 400 && statusCode < 500 { - m.HTTPStatusCode4xx.Inc(1) - } else if statusCode >= 500 && statusCode < 600 { - m.HTTPStatusCode5xx.Inc(1) - } -} - -// MetricsByEndpoint is a registry/cache of metrics for each unique endpoint name. -// Only maxNumberOfEndpoints Metrics are stored, all other endpoint names are mapped -// to a generic endpoint name "other". -type MetricsByEndpoint struct { - metricsFactory metrics.Factory - endpoints *normalizedEndpoints - metricsByEndpoint map[string]*Metrics - mux sync.RWMutex -} - -func newMetricsByEndpoint( - metricsFactory metrics.Factory, - normalizer NameNormalizer, - maxNumberOfEndpoints int, -) *MetricsByEndpoint { - return &MetricsByEndpoint{ - metricsFactory: metricsFactory, - endpoints: newNormalizedEndpoints(maxNumberOfEndpoints, normalizer), - metricsByEndpoint: make(map[string]*Metrics, maxNumberOfEndpoints+1), // +1 for "other" - } -} - -func (m *MetricsByEndpoint) get(endpoint string) *Metrics { - safeName := m.endpoints.normalize(endpoint) - if safeName == "" { - safeName = otherEndpointsPlaceholder - } - m.mux.RLock() - met := m.metricsByEndpoint[safeName] - m.mux.RUnlock() - if met != nil { - return met - } - - return m.getWithWriteLock(safeName) -} - -// split to make easier to test -func (m *MetricsByEndpoint) getWithWriteLock(safeName string) *Metrics { - m.mux.Lock() - defer m.mux.Unlock() - - // it is possible that the name has been already registered after we released - // the read lock and before we grabbed the write lock, so check for that. - if met, ok := m.metricsByEndpoint[safeName]; ok { - return met - } - - // it would be nice to create the struct before locking, since Init() is somewhat - // expensive, however some metrics backends (e.g. expvar) may not like duplicate metrics. - met := &Metrics{} - tags := map[string]string{endpointNameMetricTag: safeName} - metrics.Init(met, m.metricsFactory, tags) - - m.metricsByEndpoint[safeName] = met - return met -} diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/normalizer.go b/vendor/github.com/uber/jaeger-client-go/rpcmetrics/normalizer.go deleted file mode 100644 index 148d84b3a1a6..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/normalizer.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpcmetrics - -// NameNormalizer is used to convert the endpoint names to strings -// that can be safely used as tags in the metrics. -type NameNormalizer interface { - Normalize(name string) string -} - -// DefaultNameNormalizer converts endpoint names so that they contain only characters -// from the safe charset [a-zA-Z0-9-./_]. All other characters are replaced with '-'. -var DefaultNameNormalizer = &SimpleNameNormalizer{ - SafeSets: []SafeCharacterSet{ - &Range{From: 'a', To: 'z'}, - &Range{From: 'A', To: 'Z'}, - &Range{From: '0', To: '9'}, - &Char{'-'}, - &Char{'_'}, - &Char{'/'}, - &Char{'.'}, - }, - Replacement: '-', -} - -// SimpleNameNormalizer uses a set of safe character sets. -type SimpleNameNormalizer struct { - SafeSets []SafeCharacterSet - Replacement byte -} - -// SafeCharacterSet determines if the given character is "safe" -type SafeCharacterSet interface { - IsSafe(c byte) bool -} - -// Range implements SafeCharacterSet -type Range struct { - From, To byte -} - -// IsSafe implements SafeCharacterSet -func (r *Range) IsSafe(c byte) bool { - return c >= r.From && c <= r.To -} - -// Char implements SafeCharacterSet -type Char struct { - Val byte -} - -// IsSafe implements SafeCharacterSet -func (ch *Char) IsSafe(c byte) bool { - return c == ch.Val -} - -// Normalize checks each character in the string against SafeSets, -// and if it's not safe substitutes it with Replacement. -func (n *SimpleNameNormalizer) Normalize(name string) string { - var retMe []byte - nameBytes := []byte(name) - for i, b := range nameBytes { - if n.safeByte(b) { - if retMe != nil { - retMe[i] = b - } - } else { - if retMe == nil { - retMe = make([]byte, len(nameBytes)) - copy(retMe[0:i], nameBytes[0:i]) - } - retMe[i] = n.Replacement - } - } - if retMe == nil { - return name - } - return string(retMe) -} - -// safeByte checks if b against all safe charsets. -func (n *SimpleNameNormalizer) safeByte(b byte) bool { - for i := range n.SafeSets { - if n.SafeSets[i].IsSafe(b) { - return true - } - } - return false -} diff --git a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/observer.go b/vendor/github.com/uber/jaeger-client-go/rpcmetrics/observer.go deleted file mode 100644 index eca5ff6f3b98..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/rpcmetrics/observer.go +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package rpcmetrics - -import ( - "strconv" - "sync" - "time" - - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - "github.com/uber/jaeger-lib/metrics" - - jaeger "github.com/uber/jaeger-client-go" -) - -const defaultMaxNumberOfEndpoints = 200 - -// Observer is an observer that can emit RPC metrics. -type Observer struct { - metricsByEndpoint *MetricsByEndpoint -} - -// NewObserver creates a new observer that can emit RPC metrics. -func NewObserver(metricsFactory metrics.Factory, normalizer NameNormalizer) *Observer { - return &Observer{ - metricsByEndpoint: newMetricsByEndpoint( - metricsFactory, - normalizer, - defaultMaxNumberOfEndpoints, - ), - } -} - -// OnStartSpan creates a new Observer for the span. -func (o *Observer) OnStartSpan( - operationName string, - options opentracing.StartSpanOptions, -) jaeger.SpanObserver { - return NewSpanObserver(o.metricsByEndpoint, operationName, options) -} - -// SpanKind identifies the span as inboud, outbound, or internal -type SpanKind int - -const ( - // Local span kind - Local SpanKind = iota - // Inbound span kind - Inbound - // Outbound span kind - Outbound -) - -// SpanObserver collects RPC metrics -type SpanObserver struct { - metricsByEndpoint *MetricsByEndpoint - operationName string - startTime time.Time - mux sync.Mutex - kind SpanKind - httpStatusCode uint16 - err bool -} - -// NewSpanObserver creates a new SpanObserver that can emit RPC metrics. -func NewSpanObserver( - metricsByEndpoint *MetricsByEndpoint, - operationName string, - options opentracing.StartSpanOptions, -) *SpanObserver { - so := &SpanObserver{ - metricsByEndpoint: metricsByEndpoint, - operationName: operationName, - startTime: options.StartTime, - } - for k, v := range options.Tags { - so.handleTagInLock(k, v) - } - return so -} - -// handleTags watches for special tags -// - SpanKind -// - HttpStatusCode -// - Error -func (so *SpanObserver) handleTagInLock(key string, value interface{}) { - if key == string(ext.SpanKind) { - if v, ok := value.(ext.SpanKindEnum); ok { - value = string(v) - } - if v, ok := value.(string); ok { - if v == string(ext.SpanKindRPCClientEnum) { - so.kind = Outbound - } else if v == string(ext.SpanKindRPCServerEnum) { - so.kind = Inbound - } - } - return - } - if key == string(ext.HTTPStatusCode) { - if v, ok := value.(uint16); ok { - so.httpStatusCode = v - } else if v, ok := value.(int); ok { - so.httpStatusCode = uint16(v) - } else if v, ok := value.(string); ok { - if vv, err := strconv.Atoi(v); err == nil { - so.httpStatusCode = uint16(vv) - } - } - return - } - if key == string(ext.Error) { - if v, ok := value.(bool); ok { - so.err = v - } else if v, ok := value.(string); ok { - if vv, err := strconv.ParseBool(v); err == nil { - so.err = vv - } - } - return - } -} - -// OnFinish emits the RPC metrics. It only has an effect when operation name -// is not blank, and the span kind is an RPC server. -func (so *SpanObserver) OnFinish(options opentracing.FinishOptions) { - so.mux.Lock() - defer so.mux.Unlock() - - if so.operationName == "" || so.kind != Inbound { - return - } - - mets := so.metricsByEndpoint.get(so.operationName) - latency := options.FinishTime.Sub(so.startTime) - if so.err { - mets.RequestCountFailures.Inc(1) - mets.RequestLatencyFailures.Record(latency) - } else { - mets.RequestCountSuccess.Inc(1) - mets.RequestLatencySuccess.Record(latency) - } - mets.recordHTTPStatusCode(so.httpStatusCode) -} - -// OnSetOperationName records new operation name. -func (so *SpanObserver) OnSetOperationName(operationName string) { - so.mux.Lock() - so.operationName = operationName - so.mux.Unlock() -} - -// OnSetTag implements SpanObserver -func (so *SpanObserver) OnSetTag(key string, value interface{}) { - so.mux.Lock() - so.handleTagInLock(key, value) - so.mux.Unlock() -} diff --git a/vendor/github.com/uber/jaeger-client-go/sampler.go b/vendor/github.com/uber/jaeger-client-go/sampler.go deleted file mode 100644 index e6a32b3837a6..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/sampler.go +++ /dev/null @@ -1,556 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "fmt" - "math" - "net/url" - "sync" - "sync/atomic" - "time" - - "github.com/uber/jaeger-client-go/log" - "github.com/uber/jaeger-client-go/thrift-gen/sampling" - "github.com/uber/jaeger-client-go/utils" -) - -const ( - defaultSamplingServerURL = "http://localhost:5778/sampling" - defaultSamplingRefreshInterval = time.Minute - defaultMaxOperations = 2000 -) - -// Sampler decides whether a new trace should be sampled or not. -type Sampler interface { - // IsSampled decides whether a trace with given `id` and `operation` - // should be sampled. This function will also return the tags that - // can be used to identify the type of sampling that was applied to - // the root span. Most simple samplers would return two tags, - // sampler.type and sampler.param, similar to those used in the Configuration - IsSampled(id TraceID, operation string) (sampled bool, tags []Tag) - - // Close does a clean shutdown of the sampler, stopping any background - // go-routines it may have started. - Close() - - // Equal checks if the `other` sampler is functionally equivalent - // to this sampler. - // TODO remove this function. This function is used to determine if 2 samplers are equivalent - // which does not bode well with the adaptive sampler which has to create all the composite samplers - // for the comparison to occur. This is expensive to do if only one sampler has changed. - Equal(other Sampler) bool -} - -// ----------------------- - -// ConstSampler is a sampler that always makes the same decision. -type ConstSampler struct { - Decision bool - tags []Tag -} - -// NewConstSampler creates a ConstSampler. -func NewConstSampler(sample bool) Sampler { - tags := []Tag{ - {key: SamplerTypeTagKey, value: SamplerTypeConst}, - {key: SamplerParamTagKey, value: sample}, - } - return &ConstSampler{Decision: sample, tags: tags} -} - -// IsSampled implements IsSampled() of Sampler. -func (s *ConstSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - return s.Decision, s.tags -} - -// Close implements Close() of Sampler. -func (s *ConstSampler) Close() { - // nothing to do -} - -// Equal implements Equal() of Sampler. -func (s *ConstSampler) Equal(other Sampler) bool { - if o, ok := other.(*ConstSampler); ok { - return s.Decision == o.Decision - } - return false -} - -// ----------------------- - -// ProbabilisticSampler is a sampler that randomly samples a certain percentage -// of traces. -type ProbabilisticSampler struct { - samplingRate float64 - samplingBoundary uint64 - tags []Tag -} - -const maxRandomNumber = ^(uint64(1) << 63) // i.e. 0x7fffffffffffffff - -// NewProbabilisticSampler creates a sampler that randomly samples a certain percentage of traces specified by the -// samplingRate, in the range between 0.0 and 1.0. -// -// It relies on the fact that new trace IDs are 63bit random numbers themselves, thus making the sampling decision -// without generating a new random number, but simply calculating if traceID < (samplingRate * 2^63). -// TODO remove the error from this function for next major release -func NewProbabilisticSampler(samplingRate float64) (*ProbabilisticSampler, error) { - if samplingRate < 0.0 || samplingRate > 1.0 { - return nil, fmt.Errorf("Sampling Rate must be between 0.0 and 1.0, received %f", samplingRate) - } - return newProbabilisticSampler(samplingRate), nil -} - -func newProbabilisticSampler(samplingRate float64) *ProbabilisticSampler { - samplingRate = math.Max(0.0, math.Min(samplingRate, 1.0)) - tags := []Tag{ - {key: SamplerTypeTagKey, value: SamplerTypeProbabilistic}, - {key: SamplerParamTagKey, value: samplingRate}, - } - return &ProbabilisticSampler{ - samplingRate: samplingRate, - samplingBoundary: uint64(float64(maxRandomNumber) * samplingRate), - tags: tags, - } -} - -// SamplingRate returns the sampling probability this sampled was constructed with. -func (s *ProbabilisticSampler) SamplingRate() float64 { - return s.samplingRate -} - -// IsSampled implements IsSampled() of Sampler. -func (s *ProbabilisticSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - return s.samplingBoundary >= id.Low, s.tags -} - -// Close implements Close() of Sampler. -func (s *ProbabilisticSampler) Close() { - // nothing to do -} - -// Equal implements Equal() of Sampler. -func (s *ProbabilisticSampler) Equal(other Sampler) bool { - if o, ok := other.(*ProbabilisticSampler); ok { - return s.samplingBoundary == o.samplingBoundary - } - return false -} - -// ----------------------- - -type rateLimitingSampler struct { - maxTracesPerSecond float64 - rateLimiter utils.RateLimiter - tags []Tag -} - -// NewRateLimitingSampler creates a sampler that samples at most maxTracesPerSecond. The distribution of sampled -// traces follows burstiness of the service, i.e. a service with uniformly distributed requests will have those -// requests sampled uniformly as well, but if requests are bursty, especially sub-second, then a number of -// sequential requests can be sampled each second. -func NewRateLimitingSampler(maxTracesPerSecond float64) Sampler { - tags := []Tag{ - {key: SamplerTypeTagKey, value: SamplerTypeRateLimiting}, - {key: SamplerParamTagKey, value: maxTracesPerSecond}, - } - return &rateLimitingSampler{ - maxTracesPerSecond: maxTracesPerSecond, - rateLimiter: utils.NewRateLimiter(maxTracesPerSecond, math.Max(maxTracesPerSecond, 1.0)), - tags: tags, - } -} - -// IsSampled implements IsSampled() of Sampler. -func (s *rateLimitingSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - return s.rateLimiter.CheckCredit(1.0), s.tags -} - -func (s *rateLimitingSampler) Close() { - // nothing to do -} - -func (s *rateLimitingSampler) Equal(other Sampler) bool { - if o, ok := other.(*rateLimitingSampler); ok { - return s.maxTracesPerSecond == o.maxTracesPerSecond - } - return false -} - -// ----------------------- - -// GuaranteedThroughputProbabilisticSampler is a sampler that leverages both probabilisticSampler and -// rateLimitingSampler. The rateLimitingSampler is used as a guaranteed lower bound sampler such that -// every operation is sampled at least once in a time interval defined by the lowerBound. ie a lowerBound -// of 1.0 / (60 * 10) will sample an operation at least once every 10 minutes. -// -// The probabilisticSampler is given higher priority when tags are emitted, ie. if IsSampled() for both -// samplers return true, the tags for probabilisticSampler will be used. -type GuaranteedThroughputProbabilisticSampler struct { - probabilisticSampler *ProbabilisticSampler - lowerBoundSampler Sampler - tags []Tag - samplingRate float64 - lowerBound float64 -} - -// NewGuaranteedThroughputProbabilisticSampler returns a delegating sampler that applies both -// probabilisticSampler and rateLimitingSampler. -func NewGuaranteedThroughputProbabilisticSampler( - lowerBound, samplingRate float64, -) (*GuaranteedThroughputProbabilisticSampler, error) { - return newGuaranteedThroughputProbabilisticSampler(lowerBound, samplingRate), nil -} - -func newGuaranteedThroughputProbabilisticSampler(lowerBound, samplingRate float64) *GuaranteedThroughputProbabilisticSampler { - s := &GuaranteedThroughputProbabilisticSampler{ - lowerBoundSampler: NewRateLimitingSampler(lowerBound), - lowerBound: lowerBound, - } - s.setProbabilisticSampler(samplingRate) - return s -} - -func (s *GuaranteedThroughputProbabilisticSampler) setProbabilisticSampler(samplingRate float64) { - if s.probabilisticSampler == nil || s.samplingRate != samplingRate { - s.probabilisticSampler = newProbabilisticSampler(samplingRate) - s.samplingRate = s.probabilisticSampler.SamplingRate() - s.tags = []Tag{ - {key: SamplerTypeTagKey, value: SamplerTypeLowerBound}, - {key: SamplerParamTagKey, value: s.samplingRate}, - } - } -} - -// IsSampled implements IsSampled() of Sampler. -func (s *GuaranteedThroughputProbabilisticSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - if sampled, tags := s.probabilisticSampler.IsSampled(id, operation); sampled { - s.lowerBoundSampler.IsSampled(id, operation) - return true, tags - } - sampled, _ := s.lowerBoundSampler.IsSampled(id, operation) - return sampled, s.tags -} - -// Close implements Close() of Sampler. -func (s *GuaranteedThroughputProbabilisticSampler) Close() { - s.probabilisticSampler.Close() - s.lowerBoundSampler.Close() -} - -// Equal implements Equal() of Sampler. -func (s *GuaranteedThroughputProbabilisticSampler) Equal(other Sampler) bool { - // NB The Equal() function is expensive and will be removed. See adaptiveSampler.Equal() for - // more information. - return false -} - -// this function should only be called while holding a Write lock -func (s *GuaranteedThroughputProbabilisticSampler) update(lowerBound, samplingRate float64) { - s.setProbabilisticSampler(samplingRate) - if s.lowerBound != lowerBound { - s.lowerBoundSampler = NewRateLimitingSampler(lowerBound) - s.lowerBound = lowerBound - } -} - -// ----------------------- - -type adaptiveSampler struct { - sync.RWMutex - - samplers map[string]*GuaranteedThroughputProbabilisticSampler - defaultSampler *ProbabilisticSampler - lowerBound float64 - maxOperations int -} - -// NewAdaptiveSampler returns a delegating sampler that applies both probabilisticSampler and -// rateLimitingSampler via the guaranteedThroughputProbabilisticSampler. This sampler keeps track of all -// operations and delegates calls to the respective guaranteedThroughputProbabilisticSampler. -func NewAdaptiveSampler(strategies *sampling.PerOperationSamplingStrategies, maxOperations int) (Sampler, error) { - return newAdaptiveSampler(strategies, maxOperations), nil -} - -func newAdaptiveSampler(strategies *sampling.PerOperationSamplingStrategies, maxOperations int) Sampler { - samplers := make(map[string]*GuaranteedThroughputProbabilisticSampler) - for _, strategy := range strategies.PerOperationStrategies { - sampler := newGuaranteedThroughputProbabilisticSampler( - strategies.DefaultLowerBoundTracesPerSecond, - strategy.ProbabilisticSampling.SamplingRate, - ) - samplers[strategy.Operation] = sampler - } - return &adaptiveSampler{ - samplers: samplers, - defaultSampler: newProbabilisticSampler(strategies.DefaultSamplingProbability), - lowerBound: strategies.DefaultLowerBoundTracesPerSecond, - maxOperations: maxOperations, - } -} - -func (s *adaptiveSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - s.RLock() - sampler, ok := s.samplers[operation] - if ok { - defer s.RUnlock() - return sampler.IsSampled(id, operation) - } - s.RUnlock() - s.Lock() - defer s.Unlock() - - // Check if sampler has already been created - sampler, ok = s.samplers[operation] - if ok { - return sampler.IsSampled(id, operation) - } - // Store only up to maxOperations of unique ops. - if len(s.samplers) >= s.maxOperations { - return s.defaultSampler.IsSampled(id, operation) - } - newSampler := newGuaranteedThroughputProbabilisticSampler(s.lowerBound, s.defaultSampler.SamplingRate()) - s.samplers[operation] = newSampler - return newSampler.IsSampled(id, operation) -} - -func (s *adaptiveSampler) Close() { - s.Lock() - defer s.Unlock() - for _, sampler := range s.samplers { - sampler.Close() - } - s.defaultSampler.Close() -} - -func (s *adaptiveSampler) Equal(other Sampler) bool { - // NB The Equal() function is overly expensive for adaptiveSampler since it's composed of multiple - // samplers which all need to be initialized before this function can be called for a comparison. - // Therefore, adaptiveSampler uses the update() function to only alter the samplers that need - // changing. Hence this function always returns false so that the update function can be called. - // Once the Equal() function is removed from the Sampler API, this will no longer be needed. - return false -} - -func (s *adaptiveSampler) update(strategies *sampling.PerOperationSamplingStrategies) { - s.Lock() - defer s.Unlock() - for _, strategy := range strategies.PerOperationStrategies { - operation := strategy.Operation - samplingRate := strategy.ProbabilisticSampling.SamplingRate - lowerBound := strategies.DefaultLowerBoundTracesPerSecond - if sampler, ok := s.samplers[operation]; ok { - sampler.update(lowerBound, samplingRate) - } else { - sampler := newGuaranteedThroughputProbabilisticSampler( - lowerBound, - samplingRate, - ) - s.samplers[operation] = sampler - } - } - s.lowerBound = strategies.DefaultLowerBoundTracesPerSecond - if s.defaultSampler.SamplingRate() != strategies.DefaultSamplingProbability { - s.defaultSampler = newProbabilisticSampler(strategies.DefaultSamplingProbability) - } -} - -// ----------------------- - -// RemotelyControlledSampler is a delegating sampler that polls a remote server -// for the appropriate sampling strategy, constructs a corresponding sampler and -// delegates to it for sampling decisions. -type RemotelyControlledSampler struct { - // These fields must be first in the struct because `sync/atomic` expects 64-bit alignment. - // Cf. https://github.com/uber/jaeger-client-go/issues/155, https://goo.gl/zW7dgq - closed int64 // 0 - not closed, 1 - closed - - sync.RWMutex - samplerOptions - - serviceName string - manager sampling.SamplingManager - doneChan chan *sync.WaitGroup -} - -type httpSamplingManager struct { - serverURL string -} - -func (s *httpSamplingManager) GetSamplingStrategy(serviceName string) (*sampling.SamplingStrategyResponse, error) { - var out sampling.SamplingStrategyResponse - v := url.Values{} - v.Set("service", serviceName) - if err := utils.GetJSON(s.serverURL+"?"+v.Encode(), &out); err != nil { - return nil, err - } - return &out, nil -} - -// NewRemotelyControlledSampler creates a sampler that periodically pulls -// the sampling strategy from an HTTP sampling server (e.g. jaeger-agent). -func NewRemotelyControlledSampler( - serviceName string, - opts ...SamplerOption, -) *RemotelyControlledSampler { - options := applySamplerOptions(opts...) - sampler := &RemotelyControlledSampler{ - samplerOptions: options, - serviceName: serviceName, - manager: &httpSamplingManager{serverURL: options.samplingServerURL}, - doneChan: make(chan *sync.WaitGroup), - } - go sampler.pollController() - return sampler -} - -func applySamplerOptions(opts ...SamplerOption) samplerOptions { - options := samplerOptions{} - for _, option := range opts { - option(&options) - } - if options.sampler == nil { - options.sampler = newProbabilisticSampler(0.001) - } - if options.logger == nil { - options.logger = log.NullLogger - } - if options.maxOperations <= 0 { - options.maxOperations = defaultMaxOperations - } - if options.samplingServerURL == "" { - options.samplingServerURL = defaultSamplingServerURL - } - if options.metrics == nil { - options.metrics = NewNullMetrics() - } - if options.samplingRefreshInterval <= 0 { - options.samplingRefreshInterval = defaultSamplingRefreshInterval - } - return options -} - -// IsSampled implements IsSampled() of Sampler. -func (s *RemotelyControlledSampler) IsSampled(id TraceID, operation string) (bool, []Tag) { - s.RLock() - defer s.RUnlock() - return s.sampler.IsSampled(id, operation) -} - -// Close implements Close() of Sampler. -func (s *RemotelyControlledSampler) Close() { - if swapped := atomic.CompareAndSwapInt64(&s.closed, 0, 1); !swapped { - s.logger.Error("Repeated attempt to close the sampler is ignored") - return - } - - var wg sync.WaitGroup - wg.Add(1) - s.doneChan <- &wg - wg.Wait() -} - -// Equal implements Equal() of Sampler. -func (s *RemotelyControlledSampler) Equal(other Sampler) bool { - // NB The Equal() function is expensive and will be removed. See adaptiveSampler.Equal() for - // more information. - if o, ok := other.(*RemotelyControlledSampler); ok { - s.RLock() - o.RLock() - defer s.RUnlock() - defer o.RUnlock() - return s.sampler.Equal(o.sampler) - } - return false -} - -func (s *RemotelyControlledSampler) pollController() { - ticker := time.NewTicker(s.samplingRefreshInterval) - defer ticker.Stop() - s.pollControllerWithTicker(ticker) -} - -func (s *RemotelyControlledSampler) pollControllerWithTicker(ticker *time.Ticker) { - for { - select { - case <-ticker.C: - s.updateSampler() - case wg := <-s.doneChan: - wg.Done() - return - } - } -} - -func (s *RemotelyControlledSampler) getSampler() Sampler { - s.Lock() - defer s.Unlock() - return s.sampler -} - -func (s *RemotelyControlledSampler) setSampler(sampler Sampler) { - s.Lock() - defer s.Unlock() - s.sampler = sampler -} - -func (s *RemotelyControlledSampler) updateSampler() { - res, err := s.manager.GetSamplingStrategy(s.serviceName) - if err != nil { - s.metrics.SamplerQueryFailure.Inc(1) - return - } - s.Lock() - defer s.Unlock() - - s.metrics.SamplerRetrieved.Inc(1) - if strategies := res.GetOperationSampling(); strategies != nil { - s.updateAdaptiveSampler(strategies) - } else { - err = s.updateRateLimitingOrProbabilisticSampler(res) - } - if err != nil { - s.metrics.SamplerUpdateFailure.Inc(1) - s.logger.Infof("Unable to handle sampling strategy response %+v. Got error: %v", res, err) - return - } - s.metrics.SamplerUpdated.Inc(1) -} - -// NB: this function should only be called while holding a Write lock -func (s *RemotelyControlledSampler) updateAdaptiveSampler(strategies *sampling.PerOperationSamplingStrategies) { - if adaptiveSampler, ok := s.sampler.(*adaptiveSampler); ok { - adaptiveSampler.update(strategies) - } else { - s.sampler = newAdaptiveSampler(strategies, s.maxOperations) - } -} - -// NB: this function should only be called while holding a Write lock -func (s *RemotelyControlledSampler) updateRateLimitingOrProbabilisticSampler(res *sampling.SamplingStrategyResponse) error { - var newSampler Sampler - if probabilistic := res.GetProbabilisticSampling(); probabilistic != nil { - newSampler = newProbabilisticSampler(probabilistic.SamplingRate) - } else if rateLimiting := res.GetRateLimitingSampling(); rateLimiting != nil { - newSampler = NewRateLimitingSampler(float64(rateLimiting.MaxTracesPerSecond)) - } else { - return fmt.Errorf("Unsupported sampling strategy type %v", res.GetStrategyType()) - } - if !s.sampler.Equal(newSampler) { - s.sampler = newSampler - } - return nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/sampler_options.go b/vendor/github.com/uber/jaeger-client-go/sampler_options.go deleted file mode 100644 index 75d28a561190..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/sampler_options.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "time" -) - -// SamplerOption is a function that sets some option on the sampler -type SamplerOption func(options *samplerOptions) - -// SamplerOptions is a factory for all available SamplerOption's -var SamplerOptions samplerOptions - -type samplerOptions struct { - metrics *Metrics - maxOperations int - sampler Sampler - logger Logger - samplingServerURL string - samplingRefreshInterval time.Duration -} - -// Metrics creates a SamplerOption that initializes Metrics on the sampler, -// which is used to emit statistics. -func (samplerOptions) Metrics(m *Metrics) SamplerOption { - return func(o *samplerOptions) { - o.metrics = m - } -} - -// MaxOperations creates a SamplerOption that sets the maximum number of -// operations the sampler will keep track of. -func (samplerOptions) MaxOperations(maxOperations int) SamplerOption { - return func(o *samplerOptions) { - o.maxOperations = maxOperations - } -} - -// InitialSampler creates a SamplerOption that sets the initial sampler -// to use before a remote sampler is created and used. -func (samplerOptions) InitialSampler(sampler Sampler) SamplerOption { - return func(o *samplerOptions) { - o.sampler = sampler - } -} - -// Logger creates a SamplerOption that sets the logger used by the sampler. -func (samplerOptions) Logger(logger Logger) SamplerOption { - return func(o *samplerOptions) { - o.logger = logger - } -} - -// SamplingServerURL creates a SamplerOption that sets the sampling server url -// of the local agent that contains the sampling strategies. -func (samplerOptions) SamplingServerURL(samplingServerURL string) SamplerOption { - return func(o *samplerOptions) { - o.samplingServerURL = samplingServerURL - } -} - -// SamplingRefreshInterval creates a SamplerOption that sets how often the -// sampler will poll local agent for the appropriate sampling strategy. -func (samplerOptions) SamplingRefreshInterval(samplingRefreshInterval time.Duration) SamplerOption { - return func(o *samplerOptions) { - o.samplingRefreshInterval = samplingRefreshInterval - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/span.go b/vendor/github.com/uber/jaeger-client-go/span.go deleted file mode 100644 index f0b497a90a4d..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/span.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright (c) 2017-2018 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "sync" - "time" - - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - "github.com/opentracing/opentracing-go/log" -) - -// Span implements opentracing.Span -type Span struct { - sync.RWMutex - - tracer *Tracer - - context SpanContext - - // The name of the "operation" this span is an instance of. - // Known as a "span name" in some implementations. - operationName string - - // firstInProcess, if true, indicates that this span is the root of the (sub)tree - // of spans in the current process. In other words it's true for the root spans, - // and the ingress spans when the process joins another trace. - firstInProcess bool - - // startTime is the timestamp indicating when the span began, with microseconds precision. - startTime time.Time - - // duration returns duration of the span with microseconds precision. - // Zero value means duration is unknown. - duration time.Duration - - // tags attached to this span - tags []Tag - - // The span's "micro-log" - logs []opentracing.LogRecord - - // references for this span - references []Reference - - observer ContribSpanObserver -} - -// Tag is a simple key value wrapper. -// TODO deprecate in the next major release, use opentracing.Tag instead. -type Tag struct { - key string - value interface{} -} - -// SetOperationName sets or changes the operation name. -func (s *Span) SetOperationName(operationName string) opentracing.Span { - s.Lock() - defer s.Unlock() - if s.context.IsSampled() { - s.operationName = operationName - } - s.observer.OnSetOperationName(operationName) - return s -} - -// SetTag implements SetTag() of opentracing.Span -func (s *Span) SetTag(key string, value interface{}) opentracing.Span { - s.observer.OnSetTag(key, value) - if key == string(ext.SamplingPriority) && !setSamplingPriority(s, value) { - return s - } - s.Lock() - defer s.Unlock() - if s.context.IsSampled() { - s.setTagNoLocking(key, value) - } - return s -} - -func (s *Span) setTagNoLocking(key string, value interface{}) { - s.tags = append(s.tags, Tag{key: key, value: value}) -} - -// LogFields implements opentracing.Span API -func (s *Span) LogFields(fields ...log.Field) { - s.Lock() - defer s.Unlock() - if !s.context.IsSampled() { - return - } - s.logFieldsNoLocking(fields...) -} - -// this function should only be called while holding a Write lock -func (s *Span) logFieldsNoLocking(fields ...log.Field) { - lr := opentracing.LogRecord{ - Fields: fields, - Timestamp: time.Now(), - } - s.appendLog(lr) -} - -// LogKV implements opentracing.Span API -func (s *Span) LogKV(alternatingKeyValues ...interface{}) { - s.RLock() - sampled := s.context.IsSampled() - s.RUnlock() - if !sampled { - return - } - fields, err := log.InterleavedKVToFields(alternatingKeyValues...) - if err != nil { - s.LogFields(log.Error(err), log.String("function", "LogKV")) - return - } - s.LogFields(fields...) -} - -// LogEvent implements opentracing.Span API -func (s *Span) LogEvent(event string) { - s.Log(opentracing.LogData{Event: event}) -} - -// LogEventWithPayload implements opentracing.Span API -func (s *Span) LogEventWithPayload(event string, payload interface{}) { - s.Log(opentracing.LogData{Event: event, Payload: payload}) -} - -// Log implements opentracing.Span API -func (s *Span) Log(ld opentracing.LogData) { - s.Lock() - defer s.Unlock() - if s.context.IsSampled() { - if ld.Timestamp.IsZero() { - ld.Timestamp = s.tracer.timeNow() - } - s.appendLog(ld.ToLogRecord()) - } -} - -// this function should only be called while holding a Write lock -func (s *Span) appendLog(lr opentracing.LogRecord) { - // TODO add logic to limit number of logs per span (issue #46) - s.logs = append(s.logs, lr) -} - -// SetBaggageItem implements SetBaggageItem() of opentracing.SpanContext -func (s *Span) SetBaggageItem(key, value string) opentracing.Span { - s.Lock() - defer s.Unlock() - s.tracer.setBaggage(s, key, value) - return s -} - -// BaggageItem implements BaggageItem() of opentracing.SpanContext -func (s *Span) BaggageItem(key string) string { - s.RLock() - defer s.RUnlock() - return s.context.baggage[key] -} - -// Finish implements opentracing.Span API -func (s *Span) Finish() { - s.FinishWithOptions(opentracing.FinishOptions{}) -} - -// FinishWithOptions implements opentracing.Span API -func (s *Span) FinishWithOptions(options opentracing.FinishOptions) { - if options.FinishTime.IsZero() { - options.FinishTime = s.tracer.timeNow() - } - s.observer.OnFinish(options) - s.Lock() - if s.context.IsSampled() { - s.duration = options.FinishTime.Sub(s.startTime) - // Note: bulk logs are not subject to maxLogsPerSpan limit - if options.LogRecords != nil { - s.logs = append(s.logs, options.LogRecords...) - } - for _, ld := range options.BulkLogData { - s.logs = append(s.logs, ld.ToLogRecord()) - } - } - s.Unlock() - // call reportSpan even for non-sampled traces, to return span to the pool - s.tracer.reportSpan(s) -} - -// Context implements opentracing.Span API -func (s *Span) Context() opentracing.SpanContext { - s.Lock() - defer s.Unlock() - return s.context -} - -// Tracer implements opentracing.Span API -func (s *Span) Tracer() opentracing.Tracer { - return s.tracer -} - -func (s *Span) String() string { - s.RLock() - defer s.RUnlock() - return s.context.String() -} - -// OperationName allows retrieving current operation name. -func (s *Span) OperationName() string { - s.RLock() - defer s.RUnlock() - return s.operationName -} - -func (s *Span) serviceName() string { - return s.tracer.serviceName -} - -// setSamplingPriority returns true if the flag was updated successfully, false otherwise. -func setSamplingPriority(s *Span, value interface{}) bool { - s.Lock() - defer s.Unlock() - val, ok := value.(uint16) - if !ok { - return false - } - if val == 0 { - s.context.flags = s.context.flags & (^flagSampled) - return true - } - if s.tracer.isDebugAllowed(s.operationName) { - s.context.flags = s.context.flags | flagDebug | flagSampled - return true - } - return false -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/agent.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/agent.go deleted file mode 100644 index e48811c500af..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/agent.go +++ /dev/null @@ -1,411 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package agent - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" - "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/thrift-gen/zipkincore" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var _ = jaeger.GoUnusedProtection__ -var _ = zipkincore.GoUnusedProtection__ - -type Agent interface { - // Parameters: - // - Spans - EmitZipkinBatch(spans []*zipkincore.Span) (err error) - // Parameters: - // - Batch - EmitBatch(batch *jaeger.Batch) (err error) -} - -type AgentClient struct { - Transport thrift.TTransport - ProtocolFactory thrift.TProtocolFactory - InputProtocol thrift.TProtocol - OutputProtocol thrift.TProtocol - SeqId int32 -} - -func NewAgentClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *AgentClient { - return &AgentClient{Transport: t, - ProtocolFactory: f, - InputProtocol: f.GetProtocol(t), - OutputProtocol: f.GetProtocol(t), - SeqId: 0, - } -} - -func NewAgentClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *AgentClient { - return &AgentClient{Transport: t, - ProtocolFactory: nil, - InputProtocol: iprot, - OutputProtocol: oprot, - SeqId: 0, - } -} - -// Parameters: -// - Spans -func (p *AgentClient) EmitZipkinBatch(spans []*zipkincore.Span) (err error) { - if err = p.sendEmitZipkinBatch(spans); err != nil { - return - } - return -} - -func (p *AgentClient) sendEmitZipkinBatch(spans []*zipkincore.Span) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("emitZipkinBatch", thrift.ONEWAY, p.SeqId); err != nil { - return - } - args := AgentEmitZipkinBatchArgs{ - Spans: spans, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -// Parameters: -// - Batch -func (p *AgentClient) EmitBatch(batch *jaeger.Batch) (err error) { - if err = p.sendEmitBatch(batch); err != nil { - return - } - return -} - -func (p *AgentClient) sendEmitBatch(batch *jaeger.Batch) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("emitBatch", thrift.ONEWAY, p.SeqId); err != nil { - return - } - args := AgentEmitBatchArgs{ - Batch: batch, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -type AgentProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler Agent -} - -func (p *AgentProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *AgentProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *AgentProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewAgentProcessor(handler Agent) *AgentProcessor { - - self0 := &AgentProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self0.processorMap["emitZipkinBatch"] = &agentProcessorEmitZipkinBatch{handler: handler} - self0.processorMap["emitBatch"] = &agentProcessorEmitBatch{handler: handler} - return self0 -} - -func (p *AgentProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err - } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(seqId, iprot, oprot) - } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x1 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x1.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, x1 - -} - -type agentProcessorEmitZipkinBatch struct { - handler Agent -} - -func (p *agentProcessorEmitZipkinBatch) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := AgentEmitZipkinBatchArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - return false, err - } - - iprot.ReadMessageEnd() - var err2 error - if err2 = p.handler.EmitZipkinBatch(args.Spans); err2 != nil { - return true, err2 - } - return true, nil -} - -type agentProcessorEmitBatch struct { - handler Agent -} - -func (p *agentProcessorEmitBatch) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := AgentEmitBatchArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - return false, err - } - - iprot.ReadMessageEnd() - var err2 error - if err2 = p.handler.EmitBatch(args.Batch); err2 != nil { - return true, err2 - } - return true, nil -} - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - Spans -type AgentEmitZipkinBatchArgs struct { - Spans []*zipkincore.Span `thrift:"spans,1" json:"spans"` -} - -func NewAgentEmitZipkinBatchArgs() *AgentEmitZipkinBatchArgs { - return &AgentEmitZipkinBatchArgs{} -} - -func (p *AgentEmitZipkinBatchArgs) GetSpans() []*zipkincore.Span { - return p.Spans -} -func (p *AgentEmitZipkinBatchArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *AgentEmitZipkinBatchArgs) readField1(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*zipkincore.Span, 0, size) - p.Spans = tSlice - for i := 0; i < size; i++ { - _elem2 := &zipkincore.Span{} - if err := _elem2.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem2), err) - } - p.Spans = append(p.Spans, _elem2) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *AgentEmitZipkinBatchArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("emitZipkinBatch_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *AgentEmitZipkinBatchArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("spans", thrift.LIST, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:spans: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Spans)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Spans { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:spans: ", p), err) - } - return err -} - -func (p *AgentEmitZipkinBatchArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("AgentEmitZipkinBatchArgs(%+v)", *p) -} - -// Attributes: -// - Batch -type AgentEmitBatchArgs struct { - Batch *jaeger.Batch `thrift:"batch,1" json:"batch"` -} - -func NewAgentEmitBatchArgs() *AgentEmitBatchArgs { - return &AgentEmitBatchArgs{} -} - -var AgentEmitBatchArgs_Batch_DEFAULT *jaeger.Batch - -func (p *AgentEmitBatchArgs) GetBatch() *jaeger.Batch { - if !p.IsSetBatch() { - return AgentEmitBatchArgs_Batch_DEFAULT - } - return p.Batch -} -func (p *AgentEmitBatchArgs) IsSetBatch() bool { - return p.Batch != nil -} - -func (p *AgentEmitBatchArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *AgentEmitBatchArgs) readField1(iprot thrift.TProtocol) error { - p.Batch = &jaeger.Batch{} - if err := p.Batch.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Batch), err) - } - return nil -} - -func (p *AgentEmitBatchArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("emitBatch_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *AgentEmitBatchArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("batch", thrift.STRUCT, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:batch: ", p), err) - } - if err := p.Batch.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Batch), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:batch: ", p), err) - } - return err -} - -func (p *AgentEmitBatchArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("AgentEmitBatchArgs(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/constants.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/constants.go deleted file mode 100644 index aa9857bb82ac..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/constants.go +++ /dev/null @@ -1,23 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package agent - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" - "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/thrift-gen/zipkincore" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var _ = jaeger.GoUnusedProtection__ -var _ = zipkincore.GoUnusedProtection__ - -func init() { -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/ttypes.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/ttypes.go deleted file mode 100644 index 9c28f11c1ac7..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/agent/ttypes.go +++ /dev/null @@ -1,21 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package agent - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" - "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/thrift-gen/zipkincore" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var _ = jaeger.GoUnusedProtection__ -var _ = zipkincore.GoUnusedProtection__ -var GoUnusedProtection__ int diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/baggagerestrictionmanager.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/baggagerestrictionmanager.go deleted file mode 100644 index 1f79c1255cb1..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/baggagerestrictionmanager.go +++ /dev/null @@ -1,435 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package baggage - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -type BaggageRestrictionManager interface { - // getBaggageRestrictions retrieves the baggage restrictions for a specific service. - // Usually, baggageRestrictions apply to all services however there may be situations - // where a baggageKey might only be allowed to be set by a specific service. - // - // Parameters: - // - ServiceName - GetBaggageRestrictions(serviceName string) (r []*BaggageRestriction, err error) -} - -type BaggageRestrictionManagerClient struct { - Transport thrift.TTransport - ProtocolFactory thrift.TProtocolFactory - InputProtocol thrift.TProtocol - OutputProtocol thrift.TProtocol - SeqId int32 -} - -func NewBaggageRestrictionManagerClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *BaggageRestrictionManagerClient { - return &BaggageRestrictionManagerClient{Transport: t, - ProtocolFactory: f, - InputProtocol: f.GetProtocol(t), - OutputProtocol: f.GetProtocol(t), - SeqId: 0, - } -} - -func NewBaggageRestrictionManagerClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *BaggageRestrictionManagerClient { - return &BaggageRestrictionManagerClient{Transport: t, - ProtocolFactory: nil, - InputProtocol: iprot, - OutputProtocol: oprot, - SeqId: 0, - } -} - -// getBaggageRestrictions retrieves the baggage restrictions for a specific service. -// Usually, baggageRestrictions apply to all services however there may be situations -// where a baggageKey might only be allowed to be set by a specific service. -// -// Parameters: -// - ServiceName -func (p *BaggageRestrictionManagerClient) GetBaggageRestrictions(serviceName string) (r []*BaggageRestriction, err error) { - if err = p.sendGetBaggageRestrictions(serviceName); err != nil { - return - } - return p.recvGetBaggageRestrictions() -} - -func (p *BaggageRestrictionManagerClient) sendGetBaggageRestrictions(serviceName string) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("getBaggageRestrictions", thrift.CALL, p.SeqId); err != nil { - return - } - args := BaggageRestrictionManagerGetBaggageRestrictionsArgs{ - ServiceName: serviceName, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -func (p *BaggageRestrictionManagerClient) recvGetBaggageRestrictions() (value []*BaggageRestriction, err error) { - iprot := p.InputProtocol - if iprot == nil { - iprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.InputProtocol = iprot - } - method, mTypeId, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return - } - if method != "getBaggageRestrictions" { - err = thrift.NewTApplicationException(thrift.WRONG_METHOD_NAME, "getBaggageRestrictions failed: wrong method name") - return - } - if p.SeqId != seqId { - err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, "getBaggageRestrictions failed: out of sequence response") - return - } - if mTypeId == thrift.EXCEPTION { - error0 := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "Unknown Exception") - var error1 error - error1, err = error0.Read(iprot) - if err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - err = error1 - return - } - if mTypeId != thrift.REPLY { - err = thrift.NewTApplicationException(thrift.INVALID_MESSAGE_TYPE_EXCEPTION, "getBaggageRestrictions failed: invalid message type") - return - } - result := BaggageRestrictionManagerGetBaggageRestrictionsResult{} - if err = result.Read(iprot); err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - value = result.GetSuccess() - return -} - -type BaggageRestrictionManagerProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler BaggageRestrictionManager -} - -func (p *BaggageRestrictionManagerProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *BaggageRestrictionManagerProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *BaggageRestrictionManagerProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewBaggageRestrictionManagerProcessor(handler BaggageRestrictionManager) *BaggageRestrictionManagerProcessor { - - self2 := &BaggageRestrictionManagerProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self2.processorMap["getBaggageRestrictions"] = &baggageRestrictionManagerProcessorGetBaggageRestrictions{handler: handler} - return self2 -} - -func (p *BaggageRestrictionManagerProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err - } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(seqId, iprot, oprot) - } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x3 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x3.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, x3 - -} - -type baggageRestrictionManagerProcessorGetBaggageRestrictions struct { - handler BaggageRestrictionManager -} - -func (p *baggageRestrictionManagerProcessorGetBaggageRestrictions) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := BaggageRestrictionManagerGetBaggageRestrictionsArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) - oprot.WriteMessageBegin("getBaggageRestrictions", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, err - } - - iprot.ReadMessageEnd() - result := BaggageRestrictionManagerGetBaggageRestrictionsResult{} - var retval []*BaggageRestriction - var err2 error - if retval, err2 = p.handler.GetBaggageRestrictions(args.ServiceName); err2 != nil { - x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing getBaggageRestrictions: "+err2.Error()) - oprot.WriteMessageBegin("getBaggageRestrictions", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return true, err2 - } else { - result.Success = retval - } - if err2 = oprot.WriteMessageBegin("getBaggageRestrictions", thrift.REPLY, seqId); err2 != nil { - err = err2 - } - if err2 = result.Write(oprot); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.Flush(); err == nil && err2 != nil { - err = err2 - } - if err != nil { - return - } - return true, err -} - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - ServiceName -type BaggageRestrictionManagerGetBaggageRestrictionsArgs struct { - ServiceName string `thrift:"serviceName,1" json:"serviceName"` -} - -func NewBaggageRestrictionManagerGetBaggageRestrictionsArgs() *BaggageRestrictionManagerGetBaggageRestrictionsArgs { - return &BaggageRestrictionManagerGetBaggageRestrictionsArgs{} -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) GetServiceName() string { - return p.ServiceName -} -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.ServiceName = v - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("getBaggageRestrictions_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("serviceName", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:serviceName: ", p), err) - } - if err := oprot.WriteString(string(p.ServiceName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.serviceName (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:serviceName: ", p), err) - } - return err -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("BaggageRestrictionManagerGetBaggageRestrictionsArgs(%+v)", *p) -} - -// Attributes: -// - Success -type BaggageRestrictionManagerGetBaggageRestrictionsResult struct { - Success []*BaggageRestriction `thrift:"success,0" json:"success,omitempty"` -} - -func NewBaggageRestrictionManagerGetBaggageRestrictionsResult() *BaggageRestrictionManagerGetBaggageRestrictionsResult { - return &BaggageRestrictionManagerGetBaggageRestrictionsResult{} -} - -var BaggageRestrictionManagerGetBaggageRestrictionsResult_Success_DEFAULT []*BaggageRestriction - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) GetSuccess() []*BaggageRestriction { - return p.Success -} -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) IsSetSuccess() bool { - return p.Success != nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 0: - if err := p.readField0(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) readField0(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*BaggageRestriction, 0, size) - p.Success = tSlice - for i := 0; i < size; i++ { - _elem4 := &BaggageRestriction{} - if err := _elem4.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem4), err) - } - p.Success = append(p.Success, _elem4) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("getBaggageRestrictions_result"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField0(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) writeField0(oprot thrift.TProtocol) (err error) { - if p.IsSetSuccess() { - if err := oprot.WriteFieldBegin("success", thrift.LIST, 0); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Success)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Success { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) - } - } - return err -} - -func (p *BaggageRestrictionManagerGetBaggageRestrictionsResult) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("BaggageRestrictionManagerGetBaggageRestrictionsResult(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/constants.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/constants.go deleted file mode 100644 index ed35ce9ab514..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/constants.go +++ /dev/null @@ -1,18 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package baggage - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -func init() { -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/ttypes.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/ttypes.go deleted file mode 100644 index 7888892f633f..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/baggage/ttypes.go +++ /dev/null @@ -1,154 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package baggage - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var GoUnusedProtection__ int - -// Attributes: -// - BaggageKey -// - MaxValueLength -type BaggageRestriction struct { - BaggageKey string `thrift:"baggageKey,1,required" json:"baggageKey"` - MaxValueLength int32 `thrift:"maxValueLength,2,required" json:"maxValueLength"` -} - -func NewBaggageRestriction() *BaggageRestriction { - return &BaggageRestriction{} -} - -func (p *BaggageRestriction) GetBaggageKey() string { - return p.BaggageKey -} - -func (p *BaggageRestriction) GetMaxValueLength() int32 { - return p.MaxValueLength -} -func (p *BaggageRestriction) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetBaggageKey bool = false - var issetMaxValueLength bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetBaggageKey = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetMaxValueLength = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetBaggageKey { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field BaggageKey is not set")) - } - if !issetMaxValueLength { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field MaxValueLength is not set")) - } - return nil -} - -func (p *BaggageRestriction) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.BaggageKey = v - } - return nil -} - -func (p *BaggageRestriction) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.MaxValueLength = v - } - return nil -} - -func (p *BaggageRestriction) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("BaggageRestriction"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *BaggageRestriction) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("baggageKey", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:baggageKey: ", p), err) - } - if err := oprot.WriteString(string(p.BaggageKey)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.baggageKey (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:baggageKey: ", p), err) - } - return err -} - -func (p *BaggageRestriction) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("maxValueLength", thrift.I32, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:maxValueLength: ", p), err) - } - if err := oprot.WriteI32(int32(p.MaxValueLength)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.maxValueLength (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:maxValueLength: ", p), err) - } - return err -} - -func (p *BaggageRestriction) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("BaggageRestriction(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/agent.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/agent.go deleted file mode 100644 index b32c37dd2615..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/agent.go +++ /dev/null @@ -1,242 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package jaeger - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -type Agent interface { - // Parameters: - // - Batch - EmitBatch(batch *Batch) (err error) -} - -type AgentClient struct { - Transport thrift.TTransport - ProtocolFactory thrift.TProtocolFactory - InputProtocol thrift.TProtocol - OutputProtocol thrift.TProtocol - SeqId int32 -} - -func NewAgentClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *AgentClient { - return &AgentClient{Transport: t, - ProtocolFactory: f, - InputProtocol: f.GetProtocol(t), - OutputProtocol: f.GetProtocol(t), - SeqId: 0, - } -} - -func NewAgentClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *AgentClient { - return &AgentClient{Transport: t, - ProtocolFactory: nil, - InputProtocol: iprot, - OutputProtocol: oprot, - SeqId: 0, - } -} - -// Parameters: -// - Batch -func (p *AgentClient) EmitBatch(batch *Batch) (err error) { - if err = p.sendEmitBatch(batch); err != nil { - return - } - return -} - -func (p *AgentClient) sendEmitBatch(batch *Batch) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("emitBatch", thrift.ONEWAY, p.SeqId); err != nil { - return - } - args := AgentEmitBatchArgs{ - Batch: batch, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -type AgentProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler Agent -} - -func (p *AgentProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *AgentProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *AgentProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewAgentProcessor(handler Agent) *AgentProcessor { - - self6 := &AgentProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self6.processorMap["emitBatch"] = &agentProcessorEmitBatch{handler: handler} - return self6 -} - -func (p *AgentProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err - } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(seqId, iprot, oprot) - } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x7 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x7.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, x7 - -} - -type agentProcessorEmitBatch struct { - handler Agent -} - -func (p *agentProcessorEmitBatch) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := AgentEmitBatchArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - return false, err - } - - iprot.ReadMessageEnd() - var err2 error - if err2 = p.handler.EmitBatch(args.Batch); err2 != nil { - return true, err2 - } - return true, nil -} - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - Batch -type AgentEmitBatchArgs struct { - Batch *Batch `thrift:"batch,1" json:"batch"` -} - -func NewAgentEmitBatchArgs() *AgentEmitBatchArgs { - return &AgentEmitBatchArgs{} -} - -var AgentEmitBatchArgs_Batch_DEFAULT *Batch - -func (p *AgentEmitBatchArgs) GetBatch() *Batch { - if !p.IsSetBatch() { - return AgentEmitBatchArgs_Batch_DEFAULT - } - return p.Batch -} -func (p *AgentEmitBatchArgs) IsSetBatch() bool { - return p.Batch != nil -} - -func (p *AgentEmitBatchArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *AgentEmitBatchArgs) readField1(iprot thrift.TProtocol) error { - p.Batch = &Batch{} - if err := p.Batch.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Batch), err) - } - return nil -} - -func (p *AgentEmitBatchArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("emitBatch_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *AgentEmitBatchArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("batch", thrift.STRUCT, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:batch: ", p), err) - } - if err := p.Batch.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Batch), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:batch: ", p), err) - } - return err -} - -func (p *AgentEmitBatchArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("AgentEmitBatchArgs(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/constants.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/constants.go deleted file mode 100644 index 621b8b1c20f4..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/constants.go +++ /dev/null @@ -1,18 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package jaeger - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -func init() { -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/ttypes.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/ttypes.go deleted file mode 100644 index d23ed2fc2839..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/jaeger/ttypes.go +++ /dev/null @@ -1,1838 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package jaeger - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var GoUnusedProtection__ int - -type TagType int64 - -const ( - TagType_STRING TagType = 0 - TagType_DOUBLE TagType = 1 - TagType_BOOL TagType = 2 - TagType_LONG TagType = 3 - TagType_BINARY TagType = 4 -) - -func (p TagType) String() string { - switch p { - case TagType_STRING: - return "STRING" - case TagType_DOUBLE: - return "DOUBLE" - case TagType_BOOL: - return "BOOL" - case TagType_LONG: - return "LONG" - case TagType_BINARY: - return "BINARY" - } - return "" -} - -func TagTypeFromString(s string) (TagType, error) { - switch s { - case "STRING": - return TagType_STRING, nil - case "DOUBLE": - return TagType_DOUBLE, nil - case "BOOL": - return TagType_BOOL, nil - case "LONG": - return TagType_LONG, nil - case "BINARY": - return TagType_BINARY, nil - } - return TagType(0), fmt.Errorf("not a valid TagType string") -} - -func TagTypePtr(v TagType) *TagType { return &v } - -func (p TagType) MarshalText() ([]byte, error) { - return []byte(p.String()), nil -} - -func (p *TagType) UnmarshalText(text []byte) error { - q, err := TagTypeFromString(string(text)) - if err != nil { - return err - } - *p = q - return nil -} - -type SpanRefType int64 - -const ( - SpanRefType_CHILD_OF SpanRefType = 0 - SpanRefType_FOLLOWS_FROM SpanRefType = 1 -) - -func (p SpanRefType) String() string { - switch p { - case SpanRefType_CHILD_OF: - return "CHILD_OF" - case SpanRefType_FOLLOWS_FROM: - return "FOLLOWS_FROM" - } - return "" -} - -func SpanRefTypeFromString(s string) (SpanRefType, error) { - switch s { - case "CHILD_OF": - return SpanRefType_CHILD_OF, nil - case "FOLLOWS_FROM": - return SpanRefType_FOLLOWS_FROM, nil - } - return SpanRefType(0), fmt.Errorf("not a valid SpanRefType string") -} - -func SpanRefTypePtr(v SpanRefType) *SpanRefType { return &v } - -func (p SpanRefType) MarshalText() ([]byte, error) { - return []byte(p.String()), nil -} - -func (p *SpanRefType) UnmarshalText(text []byte) error { - q, err := SpanRefTypeFromString(string(text)) - if err != nil { - return err - } - *p = q - return nil -} - -// Attributes: -// - Key -// - VType -// - VStr -// - VDouble -// - VBool -// - VLong -// - VBinary -type Tag struct { - Key string `thrift:"key,1,required" json:"key"` - VType TagType `thrift:"vType,2,required" json:"vType"` - VStr *string `thrift:"vStr,3" json:"vStr,omitempty"` - VDouble *float64 `thrift:"vDouble,4" json:"vDouble,omitempty"` - VBool *bool `thrift:"vBool,5" json:"vBool,omitempty"` - VLong *int64 `thrift:"vLong,6" json:"vLong,omitempty"` - VBinary []byte `thrift:"vBinary,7" json:"vBinary,omitempty"` -} - -func NewTag() *Tag { - return &Tag{} -} - -func (p *Tag) GetKey() string { - return p.Key -} - -func (p *Tag) GetVType() TagType { - return p.VType -} - -var Tag_VStr_DEFAULT string - -func (p *Tag) GetVStr() string { - if !p.IsSetVStr() { - return Tag_VStr_DEFAULT - } - return *p.VStr -} - -var Tag_VDouble_DEFAULT float64 - -func (p *Tag) GetVDouble() float64 { - if !p.IsSetVDouble() { - return Tag_VDouble_DEFAULT - } - return *p.VDouble -} - -var Tag_VBool_DEFAULT bool - -func (p *Tag) GetVBool() bool { - if !p.IsSetVBool() { - return Tag_VBool_DEFAULT - } - return *p.VBool -} - -var Tag_VLong_DEFAULT int64 - -func (p *Tag) GetVLong() int64 { - if !p.IsSetVLong() { - return Tag_VLong_DEFAULT - } - return *p.VLong -} - -var Tag_VBinary_DEFAULT []byte - -func (p *Tag) GetVBinary() []byte { - return p.VBinary -} -func (p *Tag) IsSetVStr() bool { - return p.VStr != nil -} - -func (p *Tag) IsSetVDouble() bool { - return p.VDouble != nil -} - -func (p *Tag) IsSetVBool() bool { - return p.VBool != nil -} - -func (p *Tag) IsSetVLong() bool { - return p.VLong != nil -} - -func (p *Tag) IsSetVBinary() bool { - return p.VBinary != nil -} - -func (p *Tag) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetKey bool = false - var issetVType bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetKey = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetVType = true - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - case 5: - if err := p.readField5(iprot); err != nil { - return err - } - case 6: - if err := p.readField6(iprot); err != nil { - return err - } - case 7: - if err := p.readField7(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetKey { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Key is not set")) - } - if !issetVType { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field VType is not set")) - } - return nil -} - -func (p *Tag) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Key = v - } - return nil -} - -func (p *Tag) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - temp := TagType(v) - p.VType = temp - } - return nil -} - -func (p *Tag) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.VStr = &v - } - return nil -} - -func (p *Tag) readField4(iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.VDouble = &v - } - return nil -} - -func (p *Tag) readField5(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBool(); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - p.VBool = &v - } - return nil -} - -func (p *Tag) readField6(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 6: ", err) - } else { - p.VLong = &v - } - return nil -} - -func (p *Tag) readField7(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBinary(); err != nil { - return thrift.PrependError("error reading field 7: ", err) - } else { - p.VBinary = v - } - return nil -} - -func (p *Tag) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Tag"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := p.writeField5(oprot); err != nil { - return err - } - if err := p.writeField6(oprot); err != nil { - return err - } - if err := p.writeField7(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Tag) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("key", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:key: ", p), err) - } - if err := oprot.WriteString(string(p.Key)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.key (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:key: ", p), err) - } - return err -} - -func (p *Tag) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("vType", thrift.I32, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:vType: ", p), err) - } - if err := oprot.WriteI32(int32(p.VType)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vType (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:vType: ", p), err) - } - return err -} - -func (p *Tag) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetVStr() { - if err := oprot.WriteFieldBegin("vStr", thrift.STRING, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:vStr: ", p), err) - } - if err := oprot.WriteString(string(*p.VStr)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vStr (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:vStr: ", p), err) - } - } - return err -} - -func (p *Tag) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetVDouble() { - if err := oprot.WriteFieldBegin("vDouble", thrift.DOUBLE, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:vDouble: ", p), err) - } - if err := oprot.WriteDouble(float64(*p.VDouble)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vDouble (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:vDouble: ", p), err) - } - } - return err -} - -func (p *Tag) writeField5(oprot thrift.TProtocol) (err error) { - if p.IsSetVBool() { - if err := oprot.WriteFieldBegin("vBool", thrift.BOOL, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:vBool: ", p), err) - } - if err := oprot.WriteBool(bool(*p.VBool)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vBool (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:vBool: ", p), err) - } - } - return err -} - -func (p *Tag) writeField6(oprot thrift.TProtocol) (err error) { - if p.IsSetVLong() { - if err := oprot.WriteFieldBegin("vLong", thrift.I64, 6); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:vLong: ", p), err) - } - if err := oprot.WriteI64(int64(*p.VLong)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vLong (6) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 6:vLong: ", p), err) - } - } - return err -} - -func (p *Tag) writeField7(oprot thrift.TProtocol) (err error) { - if p.IsSetVBinary() { - if err := oprot.WriteFieldBegin("vBinary", thrift.STRING, 7); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 7:vBinary: ", p), err) - } - if err := oprot.WriteBinary(p.VBinary); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.vBinary (7) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 7:vBinary: ", p), err) - } - } - return err -} - -func (p *Tag) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Tag(%+v)", *p) -} - -// Attributes: -// - Timestamp -// - Fields -type Log struct { - Timestamp int64 `thrift:"timestamp,1,required" json:"timestamp"` - Fields []*Tag `thrift:"fields,2,required" json:"fields"` -} - -func NewLog() *Log { - return &Log{} -} - -func (p *Log) GetTimestamp() int64 { - return p.Timestamp -} - -func (p *Log) GetFields() []*Tag { - return p.Fields -} -func (p *Log) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetTimestamp bool = false - var issetFields bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetTimestamp = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetFields = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetTimestamp { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Timestamp is not set")) - } - if !issetFields { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Fields is not set")) - } - return nil -} - -func (p *Log) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Timestamp = v - } - return nil -} - -func (p *Log) readField2(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Tag, 0, size) - p.Fields = tSlice - for i := 0; i < size; i++ { - _elem0 := &Tag{} - if err := _elem0.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem0), err) - } - p.Fields = append(p.Fields, _elem0) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Log) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Log"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Log) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("timestamp", thrift.I64, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:timestamp: ", p), err) - } - if err := oprot.WriteI64(int64(p.Timestamp)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.timestamp (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:timestamp: ", p), err) - } - return err -} - -func (p *Log) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("fields", thrift.LIST, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:fields: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Fields)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Fields { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:fields: ", p), err) - } - return err -} - -func (p *Log) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Log(%+v)", *p) -} - -// Attributes: -// - RefType -// - TraceIdLow -// - TraceIdHigh -// - SpanId -type SpanRef struct { - RefType SpanRefType `thrift:"refType,1,required" json:"refType"` - TraceIdLow int64 `thrift:"traceIdLow,2,required" json:"traceIdLow"` - TraceIdHigh int64 `thrift:"traceIdHigh,3,required" json:"traceIdHigh"` - SpanId int64 `thrift:"spanId,4,required" json:"spanId"` -} - -func NewSpanRef() *SpanRef { - return &SpanRef{} -} - -func (p *SpanRef) GetRefType() SpanRefType { - return p.RefType -} - -func (p *SpanRef) GetTraceIdLow() int64 { - return p.TraceIdLow -} - -func (p *SpanRef) GetTraceIdHigh() int64 { - return p.TraceIdHigh -} - -func (p *SpanRef) GetSpanId() int64 { - return p.SpanId -} -func (p *SpanRef) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetRefType bool = false - var issetTraceIdLow bool = false - var issetTraceIdHigh bool = false - var issetSpanId bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetRefType = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetTraceIdLow = true - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - issetTraceIdHigh = true - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - issetSpanId = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetRefType { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field RefType is not set")) - } - if !issetTraceIdLow { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field TraceIdLow is not set")) - } - if !issetTraceIdHigh { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field TraceIdHigh is not set")) - } - if !issetSpanId { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field SpanId is not set")) - } - return nil -} - -func (p *SpanRef) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - temp := SpanRefType(v) - p.RefType = temp - } - return nil -} - -func (p *SpanRef) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.TraceIdLow = v - } - return nil -} - -func (p *SpanRef) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.TraceIdHigh = v - } - return nil -} - -func (p *SpanRef) readField4(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.SpanId = v - } - return nil -} - -func (p *SpanRef) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("SpanRef"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *SpanRef) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("refType", thrift.I32, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:refType: ", p), err) - } - if err := oprot.WriteI32(int32(p.RefType)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.refType (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:refType: ", p), err) - } - return err -} - -func (p *SpanRef) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("traceIdLow", thrift.I64, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:traceIdLow: ", p), err) - } - if err := oprot.WriteI64(int64(p.TraceIdLow)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.traceIdLow (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:traceIdLow: ", p), err) - } - return err -} - -func (p *SpanRef) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("traceIdHigh", thrift.I64, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:traceIdHigh: ", p), err) - } - if err := oprot.WriteI64(int64(p.TraceIdHigh)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.traceIdHigh (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:traceIdHigh: ", p), err) - } - return err -} - -func (p *SpanRef) writeField4(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("spanId", thrift.I64, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:spanId: ", p), err) - } - if err := oprot.WriteI64(int64(p.SpanId)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.spanId (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:spanId: ", p), err) - } - return err -} - -func (p *SpanRef) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("SpanRef(%+v)", *p) -} - -// Attributes: -// - TraceIdLow -// - TraceIdHigh -// - SpanId -// - ParentSpanId -// - OperationName -// - References -// - Flags -// - StartTime -// - Duration -// - Tags -// - Logs -type Span struct { - TraceIdLow int64 `thrift:"traceIdLow,1,required" json:"traceIdLow"` - TraceIdHigh int64 `thrift:"traceIdHigh,2,required" json:"traceIdHigh"` - SpanId int64 `thrift:"spanId,3,required" json:"spanId"` - ParentSpanId int64 `thrift:"parentSpanId,4,required" json:"parentSpanId"` - OperationName string `thrift:"operationName,5,required" json:"operationName"` - References []*SpanRef `thrift:"references,6" json:"references,omitempty"` - Flags int32 `thrift:"flags,7,required" json:"flags"` - StartTime int64 `thrift:"startTime,8,required" json:"startTime"` - Duration int64 `thrift:"duration,9,required" json:"duration"` - Tags []*Tag `thrift:"tags,10" json:"tags,omitempty"` - Logs []*Log `thrift:"logs,11" json:"logs,omitempty"` -} - -func NewSpan() *Span { - return &Span{} -} - -func (p *Span) GetTraceIdLow() int64 { - return p.TraceIdLow -} - -func (p *Span) GetTraceIdHigh() int64 { - return p.TraceIdHigh -} - -func (p *Span) GetSpanId() int64 { - return p.SpanId -} - -func (p *Span) GetParentSpanId() int64 { - return p.ParentSpanId -} - -func (p *Span) GetOperationName() string { - return p.OperationName -} - -var Span_References_DEFAULT []*SpanRef - -func (p *Span) GetReferences() []*SpanRef { - return p.References -} - -func (p *Span) GetFlags() int32 { - return p.Flags -} - -func (p *Span) GetStartTime() int64 { - return p.StartTime -} - -func (p *Span) GetDuration() int64 { - return p.Duration -} - -var Span_Tags_DEFAULT []*Tag - -func (p *Span) GetTags() []*Tag { - return p.Tags -} - -var Span_Logs_DEFAULT []*Log - -func (p *Span) GetLogs() []*Log { - return p.Logs -} -func (p *Span) IsSetReferences() bool { - return p.References != nil -} - -func (p *Span) IsSetTags() bool { - return p.Tags != nil -} - -func (p *Span) IsSetLogs() bool { - return p.Logs != nil -} - -func (p *Span) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetTraceIdLow bool = false - var issetTraceIdHigh bool = false - var issetSpanId bool = false - var issetParentSpanId bool = false - var issetOperationName bool = false - var issetFlags bool = false - var issetStartTime bool = false - var issetDuration bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetTraceIdLow = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetTraceIdHigh = true - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - issetSpanId = true - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - issetParentSpanId = true - case 5: - if err := p.readField5(iprot); err != nil { - return err - } - issetOperationName = true - case 6: - if err := p.readField6(iprot); err != nil { - return err - } - case 7: - if err := p.readField7(iprot); err != nil { - return err - } - issetFlags = true - case 8: - if err := p.readField8(iprot); err != nil { - return err - } - issetStartTime = true - case 9: - if err := p.readField9(iprot); err != nil { - return err - } - issetDuration = true - case 10: - if err := p.readField10(iprot); err != nil { - return err - } - case 11: - if err := p.readField11(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetTraceIdLow { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field TraceIdLow is not set")) - } - if !issetTraceIdHigh { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field TraceIdHigh is not set")) - } - if !issetSpanId { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field SpanId is not set")) - } - if !issetParentSpanId { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field ParentSpanId is not set")) - } - if !issetOperationName { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field OperationName is not set")) - } - if !issetFlags { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Flags is not set")) - } - if !issetStartTime { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field StartTime is not set")) - } - if !issetDuration { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Duration is not set")) - } - return nil -} - -func (p *Span) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.TraceIdLow = v - } - return nil -} - -func (p *Span) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.TraceIdHigh = v - } - return nil -} - -func (p *Span) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.SpanId = v - } - return nil -} - -func (p *Span) readField4(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.ParentSpanId = v - } - return nil -} - -func (p *Span) readField5(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - p.OperationName = v - } - return nil -} - -func (p *Span) readField6(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*SpanRef, 0, size) - p.References = tSlice - for i := 0; i < size; i++ { - _elem1 := &SpanRef{} - if err := _elem1.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem1), err) - } - p.References = append(p.References, _elem1) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Span) readField7(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 7: ", err) - } else { - p.Flags = v - } - return nil -} - -func (p *Span) readField8(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 8: ", err) - } else { - p.StartTime = v - } - return nil -} - -func (p *Span) readField9(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 9: ", err) - } else { - p.Duration = v - } - return nil -} - -func (p *Span) readField10(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Tag, 0, size) - p.Tags = tSlice - for i := 0; i < size; i++ { - _elem2 := &Tag{} - if err := _elem2.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem2), err) - } - p.Tags = append(p.Tags, _elem2) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Span) readField11(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Log, 0, size) - p.Logs = tSlice - for i := 0; i < size; i++ { - _elem3 := &Log{} - if err := _elem3.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem3), err) - } - p.Logs = append(p.Logs, _elem3) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Span) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Span"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := p.writeField5(oprot); err != nil { - return err - } - if err := p.writeField6(oprot); err != nil { - return err - } - if err := p.writeField7(oprot); err != nil { - return err - } - if err := p.writeField8(oprot); err != nil { - return err - } - if err := p.writeField9(oprot); err != nil { - return err - } - if err := p.writeField10(oprot); err != nil { - return err - } - if err := p.writeField11(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Span) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("traceIdLow", thrift.I64, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:traceIdLow: ", p), err) - } - if err := oprot.WriteI64(int64(p.TraceIdLow)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.traceIdLow (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:traceIdLow: ", p), err) - } - return err -} - -func (p *Span) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("traceIdHigh", thrift.I64, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:traceIdHigh: ", p), err) - } - if err := oprot.WriteI64(int64(p.TraceIdHigh)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.traceIdHigh (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:traceIdHigh: ", p), err) - } - return err -} - -func (p *Span) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("spanId", thrift.I64, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:spanId: ", p), err) - } - if err := oprot.WriteI64(int64(p.SpanId)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.spanId (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:spanId: ", p), err) - } - return err -} - -func (p *Span) writeField4(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("parentSpanId", thrift.I64, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:parentSpanId: ", p), err) - } - if err := oprot.WriteI64(int64(p.ParentSpanId)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.parentSpanId (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:parentSpanId: ", p), err) - } - return err -} - -func (p *Span) writeField5(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("operationName", thrift.STRING, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:operationName: ", p), err) - } - if err := oprot.WriteString(string(p.OperationName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.operationName (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:operationName: ", p), err) - } - return err -} - -func (p *Span) writeField6(oprot thrift.TProtocol) (err error) { - if p.IsSetReferences() { - if err := oprot.WriteFieldBegin("references", thrift.LIST, 6); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:references: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.References)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.References { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 6:references: ", p), err) - } - } - return err -} - -func (p *Span) writeField7(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("flags", thrift.I32, 7); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 7:flags: ", p), err) - } - if err := oprot.WriteI32(int32(p.Flags)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.flags (7) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 7:flags: ", p), err) - } - return err -} - -func (p *Span) writeField8(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("startTime", thrift.I64, 8); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 8:startTime: ", p), err) - } - if err := oprot.WriteI64(int64(p.StartTime)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.startTime (8) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 8:startTime: ", p), err) - } - return err -} - -func (p *Span) writeField9(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("duration", thrift.I64, 9); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 9:duration: ", p), err) - } - if err := oprot.WriteI64(int64(p.Duration)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.duration (9) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 9:duration: ", p), err) - } - return err -} - -func (p *Span) writeField10(oprot thrift.TProtocol) (err error) { - if p.IsSetTags() { - if err := oprot.WriteFieldBegin("tags", thrift.LIST, 10); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 10:tags: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Tags)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Tags { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 10:tags: ", p), err) - } - } - return err -} - -func (p *Span) writeField11(oprot thrift.TProtocol) (err error) { - if p.IsSetLogs() { - if err := oprot.WriteFieldBegin("logs", thrift.LIST, 11); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 11:logs: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Logs)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Logs { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 11:logs: ", p), err) - } - } - return err -} - -func (p *Span) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Span(%+v)", *p) -} - -// Attributes: -// - ServiceName -// - Tags -type Process struct { - ServiceName string `thrift:"serviceName,1,required" json:"serviceName"` - Tags []*Tag `thrift:"tags,2" json:"tags,omitempty"` -} - -func NewProcess() *Process { - return &Process{} -} - -func (p *Process) GetServiceName() string { - return p.ServiceName -} - -var Process_Tags_DEFAULT []*Tag - -func (p *Process) GetTags() []*Tag { - return p.Tags -} -func (p *Process) IsSetTags() bool { - return p.Tags != nil -} - -func (p *Process) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetServiceName bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetServiceName = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetServiceName { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field ServiceName is not set")) - } - return nil -} - -func (p *Process) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.ServiceName = v - } - return nil -} - -func (p *Process) readField2(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Tag, 0, size) - p.Tags = tSlice - for i := 0; i < size; i++ { - _elem4 := &Tag{} - if err := _elem4.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem4), err) - } - p.Tags = append(p.Tags, _elem4) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Process) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Process"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Process) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("serviceName", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:serviceName: ", p), err) - } - if err := oprot.WriteString(string(p.ServiceName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.serviceName (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:serviceName: ", p), err) - } - return err -} - -func (p *Process) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetTags() { - if err := oprot.WriteFieldBegin("tags", thrift.LIST, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:tags: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Tags)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Tags { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:tags: ", p), err) - } - } - return err -} - -func (p *Process) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Process(%+v)", *p) -} - -// Attributes: -// - Process -// - Spans -type Batch struct { - Process *Process `thrift:"process,1,required" json:"process"` - Spans []*Span `thrift:"spans,2,required" json:"spans"` -} - -func NewBatch() *Batch { - return &Batch{} -} - -var Batch_Process_DEFAULT *Process - -func (p *Batch) GetProcess() *Process { - if !p.IsSetProcess() { - return Batch_Process_DEFAULT - } - return p.Process -} - -func (p *Batch) GetSpans() []*Span { - return p.Spans -} -func (p *Batch) IsSetProcess() bool { - return p.Process != nil -} - -func (p *Batch) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetProcess bool = false - var issetSpans bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetProcess = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetSpans = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetProcess { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Process is not set")) - } - if !issetSpans { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Spans is not set")) - } - return nil -} - -func (p *Batch) readField1(iprot thrift.TProtocol) error { - p.Process = &Process{} - if err := p.Process.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Process), err) - } - return nil -} - -func (p *Batch) readField2(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Span, 0, size) - p.Spans = tSlice - for i := 0; i < size; i++ { - _elem5 := &Span{} - if err := _elem5.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem5), err) - } - p.Spans = append(p.Spans, _elem5) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Batch) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Batch"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Batch) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("process", thrift.STRUCT, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:process: ", p), err) - } - if err := p.Process.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Process), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:process: ", p), err) - } - return err -} - -func (p *Batch) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("spans", thrift.LIST, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:spans: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Spans)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Spans { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:spans: ", p), err) - } - return err -} - -func (p *Batch) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Batch(%+v)", *p) -} - -// Attributes: -// - Ok -type BatchSubmitResponse struct { - Ok bool `thrift:"ok,1,required" json:"ok"` -} - -func NewBatchSubmitResponse() *BatchSubmitResponse { - return &BatchSubmitResponse{} -} - -func (p *BatchSubmitResponse) GetOk() bool { - return p.Ok -} -func (p *BatchSubmitResponse) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetOk bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetOk = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetOk { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Ok is not set")) - } - return nil -} - -func (p *BatchSubmitResponse) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBool(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Ok = v - } - return nil -} - -func (p *BatchSubmitResponse) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("BatchSubmitResponse"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *BatchSubmitResponse) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("ok", thrift.BOOL, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:ok: ", p), err) - } - if err := oprot.WriteBool(bool(p.Ok)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.ok (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:ok: ", p), err) - } - return err -} - -func (p *BatchSubmitResponse) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("BatchSubmitResponse(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/constants.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/constants.go deleted file mode 100644 index 0f6e3a884d95..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/constants.go +++ /dev/null @@ -1,18 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package sampling - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -func init() { -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/samplingmanager.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/samplingmanager.go deleted file mode 100644 index 33179cfeb3b9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/samplingmanager.go +++ /dev/null @@ -1,410 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package sampling - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -type SamplingManager interface { - // Parameters: - // - ServiceName - GetSamplingStrategy(serviceName string) (r *SamplingStrategyResponse, err error) -} - -type SamplingManagerClient struct { - Transport thrift.TTransport - ProtocolFactory thrift.TProtocolFactory - InputProtocol thrift.TProtocol - OutputProtocol thrift.TProtocol - SeqId int32 -} - -func NewSamplingManagerClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *SamplingManagerClient { - return &SamplingManagerClient{Transport: t, - ProtocolFactory: f, - InputProtocol: f.GetProtocol(t), - OutputProtocol: f.GetProtocol(t), - SeqId: 0, - } -} - -func NewSamplingManagerClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *SamplingManagerClient { - return &SamplingManagerClient{Transport: t, - ProtocolFactory: nil, - InputProtocol: iprot, - OutputProtocol: oprot, - SeqId: 0, - } -} - -// Parameters: -// - ServiceName -func (p *SamplingManagerClient) GetSamplingStrategy(serviceName string) (r *SamplingStrategyResponse, err error) { - if err = p.sendGetSamplingStrategy(serviceName); err != nil { - return - } - return p.recvGetSamplingStrategy() -} - -func (p *SamplingManagerClient) sendGetSamplingStrategy(serviceName string) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("getSamplingStrategy", thrift.CALL, p.SeqId); err != nil { - return - } - args := SamplingManagerGetSamplingStrategyArgs{ - ServiceName: serviceName, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -func (p *SamplingManagerClient) recvGetSamplingStrategy() (value *SamplingStrategyResponse, err error) { - iprot := p.InputProtocol - if iprot == nil { - iprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.InputProtocol = iprot - } - method, mTypeId, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return - } - if method != "getSamplingStrategy" { - err = thrift.NewTApplicationException(thrift.WRONG_METHOD_NAME, "getSamplingStrategy failed: wrong method name") - return - } - if p.SeqId != seqId { - err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, "getSamplingStrategy failed: out of sequence response") - return - } - if mTypeId == thrift.EXCEPTION { - error1 := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "Unknown Exception") - var error2 error - error2, err = error1.Read(iprot) - if err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - err = error2 - return - } - if mTypeId != thrift.REPLY { - err = thrift.NewTApplicationException(thrift.INVALID_MESSAGE_TYPE_EXCEPTION, "getSamplingStrategy failed: invalid message type") - return - } - result := SamplingManagerGetSamplingStrategyResult{} - if err = result.Read(iprot); err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - value = result.GetSuccess() - return -} - -type SamplingManagerProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler SamplingManager -} - -func (p *SamplingManagerProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *SamplingManagerProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *SamplingManagerProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewSamplingManagerProcessor(handler SamplingManager) *SamplingManagerProcessor { - - self3 := &SamplingManagerProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self3.processorMap["getSamplingStrategy"] = &samplingManagerProcessorGetSamplingStrategy{handler: handler} - return self3 -} - -func (p *SamplingManagerProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err - } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(seqId, iprot, oprot) - } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x4 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x4.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, x4 - -} - -type samplingManagerProcessorGetSamplingStrategy struct { - handler SamplingManager -} - -func (p *samplingManagerProcessorGetSamplingStrategy) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := SamplingManagerGetSamplingStrategyArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) - oprot.WriteMessageBegin("getSamplingStrategy", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, err - } - - iprot.ReadMessageEnd() - result := SamplingManagerGetSamplingStrategyResult{} - var retval *SamplingStrategyResponse - var err2 error - if retval, err2 = p.handler.GetSamplingStrategy(args.ServiceName); err2 != nil { - x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing getSamplingStrategy: "+err2.Error()) - oprot.WriteMessageBegin("getSamplingStrategy", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return true, err2 - } else { - result.Success = retval - } - if err2 = oprot.WriteMessageBegin("getSamplingStrategy", thrift.REPLY, seqId); err2 != nil { - err = err2 - } - if err2 = result.Write(oprot); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.Flush(); err == nil && err2 != nil { - err = err2 - } - if err != nil { - return - } - return true, err -} - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - ServiceName -type SamplingManagerGetSamplingStrategyArgs struct { - ServiceName string `thrift:"serviceName,1" json:"serviceName"` -} - -func NewSamplingManagerGetSamplingStrategyArgs() *SamplingManagerGetSamplingStrategyArgs { - return &SamplingManagerGetSamplingStrategyArgs{} -} - -func (p *SamplingManagerGetSamplingStrategyArgs) GetServiceName() string { - return p.ServiceName -} -func (p *SamplingManagerGetSamplingStrategyArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyArgs) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.ServiceName = v - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("getSamplingStrategy_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("serviceName", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:serviceName: ", p), err) - } - if err := oprot.WriteString(string(p.ServiceName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.serviceName (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:serviceName: ", p), err) - } - return err -} - -func (p *SamplingManagerGetSamplingStrategyArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("SamplingManagerGetSamplingStrategyArgs(%+v)", *p) -} - -// Attributes: -// - Success -type SamplingManagerGetSamplingStrategyResult struct { - Success *SamplingStrategyResponse `thrift:"success,0" json:"success,omitempty"` -} - -func NewSamplingManagerGetSamplingStrategyResult() *SamplingManagerGetSamplingStrategyResult { - return &SamplingManagerGetSamplingStrategyResult{} -} - -var SamplingManagerGetSamplingStrategyResult_Success_DEFAULT *SamplingStrategyResponse - -func (p *SamplingManagerGetSamplingStrategyResult) GetSuccess() *SamplingStrategyResponse { - if !p.IsSetSuccess() { - return SamplingManagerGetSamplingStrategyResult_Success_DEFAULT - } - return p.Success -} -func (p *SamplingManagerGetSamplingStrategyResult) IsSetSuccess() bool { - return p.Success != nil -} - -func (p *SamplingManagerGetSamplingStrategyResult) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 0: - if err := p.readField0(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyResult) readField0(iprot thrift.TProtocol) error { - p.Success = &SamplingStrategyResponse{} - if err := p.Success.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Success), err) - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyResult) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("getSamplingStrategy_result"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField0(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *SamplingManagerGetSamplingStrategyResult) writeField0(oprot thrift.TProtocol) (err error) { - if p.IsSetSuccess() { - if err := oprot.WriteFieldBegin("success", thrift.STRUCT, 0); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) - } - if err := p.Success.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Success), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) - } - } - return err -} - -func (p *SamplingManagerGetSamplingStrategyResult) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("SamplingManagerGetSamplingStrategyResult(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/ttypes.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/ttypes.go deleted file mode 100644 index 9abaf0542d40..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/sampling/ttypes.go +++ /dev/null @@ -1,873 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package sampling - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var GoUnusedProtection__ int - -type SamplingStrategyType int64 - -const ( - SamplingStrategyType_PROBABILISTIC SamplingStrategyType = 0 - SamplingStrategyType_RATE_LIMITING SamplingStrategyType = 1 -) - -func (p SamplingStrategyType) String() string { - switch p { - case SamplingStrategyType_PROBABILISTIC: - return "PROBABILISTIC" - case SamplingStrategyType_RATE_LIMITING: - return "RATE_LIMITING" - } - return "" -} - -func SamplingStrategyTypeFromString(s string) (SamplingStrategyType, error) { - switch s { - case "PROBABILISTIC": - return SamplingStrategyType_PROBABILISTIC, nil - case "RATE_LIMITING": - return SamplingStrategyType_RATE_LIMITING, nil - } - return SamplingStrategyType(0), fmt.Errorf("not a valid SamplingStrategyType string") -} - -func SamplingStrategyTypePtr(v SamplingStrategyType) *SamplingStrategyType { return &v } - -func (p SamplingStrategyType) MarshalText() ([]byte, error) { - return []byte(p.String()), nil -} - -func (p *SamplingStrategyType) UnmarshalText(text []byte) error { - q, err := SamplingStrategyTypeFromString(string(text)) - if err != nil { - return err - } - *p = q - return nil -} - -// Attributes: -// - SamplingRate -type ProbabilisticSamplingStrategy struct { - SamplingRate float64 `thrift:"samplingRate,1,required" json:"samplingRate"` -} - -func NewProbabilisticSamplingStrategy() *ProbabilisticSamplingStrategy { - return &ProbabilisticSamplingStrategy{} -} - -func (p *ProbabilisticSamplingStrategy) GetSamplingRate() float64 { - return p.SamplingRate -} -func (p *ProbabilisticSamplingStrategy) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetSamplingRate bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetSamplingRate = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetSamplingRate { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field SamplingRate is not set")) - } - return nil -} - -func (p *ProbabilisticSamplingStrategy) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.SamplingRate = v - } - return nil -} - -func (p *ProbabilisticSamplingStrategy) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("ProbabilisticSamplingStrategy"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *ProbabilisticSamplingStrategy) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("samplingRate", thrift.DOUBLE, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:samplingRate: ", p), err) - } - if err := oprot.WriteDouble(float64(p.SamplingRate)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.samplingRate (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:samplingRate: ", p), err) - } - return err -} - -func (p *ProbabilisticSamplingStrategy) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("ProbabilisticSamplingStrategy(%+v)", *p) -} - -// Attributes: -// - MaxTracesPerSecond -type RateLimitingSamplingStrategy struct { - MaxTracesPerSecond int16 `thrift:"maxTracesPerSecond,1,required" json:"maxTracesPerSecond"` -} - -func NewRateLimitingSamplingStrategy() *RateLimitingSamplingStrategy { - return &RateLimitingSamplingStrategy{} -} - -func (p *RateLimitingSamplingStrategy) GetMaxTracesPerSecond() int16 { - return p.MaxTracesPerSecond -} -func (p *RateLimitingSamplingStrategy) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetMaxTracesPerSecond bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetMaxTracesPerSecond = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetMaxTracesPerSecond { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field MaxTracesPerSecond is not set")) - } - return nil -} - -func (p *RateLimitingSamplingStrategy) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI16(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.MaxTracesPerSecond = v - } - return nil -} - -func (p *RateLimitingSamplingStrategy) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("RateLimitingSamplingStrategy"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *RateLimitingSamplingStrategy) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("maxTracesPerSecond", thrift.I16, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:maxTracesPerSecond: ", p), err) - } - if err := oprot.WriteI16(int16(p.MaxTracesPerSecond)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.maxTracesPerSecond (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:maxTracesPerSecond: ", p), err) - } - return err -} - -func (p *RateLimitingSamplingStrategy) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("RateLimitingSamplingStrategy(%+v)", *p) -} - -// Attributes: -// - Operation -// - ProbabilisticSampling -type OperationSamplingStrategy struct { - Operation string `thrift:"operation,1,required" json:"operation"` - ProbabilisticSampling *ProbabilisticSamplingStrategy `thrift:"probabilisticSampling,2,required" json:"probabilisticSampling"` -} - -func NewOperationSamplingStrategy() *OperationSamplingStrategy { - return &OperationSamplingStrategy{} -} - -func (p *OperationSamplingStrategy) GetOperation() string { - return p.Operation -} - -var OperationSamplingStrategy_ProbabilisticSampling_DEFAULT *ProbabilisticSamplingStrategy - -func (p *OperationSamplingStrategy) GetProbabilisticSampling() *ProbabilisticSamplingStrategy { - if !p.IsSetProbabilisticSampling() { - return OperationSamplingStrategy_ProbabilisticSampling_DEFAULT - } - return p.ProbabilisticSampling -} -func (p *OperationSamplingStrategy) IsSetProbabilisticSampling() bool { - return p.ProbabilisticSampling != nil -} - -func (p *OperationSamplingStrategy) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetOperation bool = false - var issetProbabilisticSampling bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetOperation = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetProbabilisticSampling = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetOperation { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Operation is not set")) - } - if !issetProbabilisticSampling { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field ProbabilisticSampling is not set")) - } - return nil -} - -func (p *OperationSamplingStrategy) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Operation = v - } - return nil -} - -func (p *OperationSamplingStrategy) readField2(iprot thrift.TProtocol) error { - p.ProbabilisticSampling = &ProbabilisticSamplingStrategy{} - if err := p.ProbabilisticSampling.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.ProbabilisticSampling), err) - } - return nil -} - -func (p *OperationSamplingStrategy) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("OperationSamplingStrategy"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *OperationSamplingStrategy) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("operation", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:operation: ", p), err) - } - if err := oprot.WriteString(string(p.Operation)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.operation (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:operation: ", p), err) - } - return err -} - -func (p *OperationSamplingStrategy) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("probabilisticSampling", thrift.STRUCT, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:probabilisticSampling: ", p), err) - } - if err := p.ProbabilisticSampling.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.ProbabilisticSampling), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:probabilisticSampling: ", p), err) - } - return err -} - -func (p *OperationSamplingStrategy) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("OperationSamplingStrategy(%+v)", *p) -} - -// Attributes: -// - DefaultSamplingProbability -// - DefaultLowerBoundTracesPerSecond -// - PerOperationStrategies -// - DefaultUpperBoundTracesPerSecond -type PerOperationSamplingStrategies struct { - DefaultSamplingProbability float64 `thrift:"defaultSamplingProbability,1,required" json:"defaultSamplingProbability"` - DefaultLowerBoundTracesPerSecond float64 `thrift:"defaultLowerBoundTracesPerSecond,2,required" json:"defaultLowerBoundTracesPerSecond"` - PerOperationStrategies []*OperationSamplingStrategy `thrift:"perOperationStrategies,3,required" json:"perOperationStrategies"` - DefaultUpperBoundTracesPerSecond *float64 `thrift:"defaultUpperBoundTracesPerSecond,4" json:"defaultUpperBoundTracesPerSecond,omitempty"` -} - -func NewPerOperationSamplingStrategies() *PerOperationSamplingStrategies { - return &PerOperationSamplingStrategies{} -} - -func (p *PerOperationSamplingStrategies) GetDefaultSamplingProbability() float64 { - return p.DefaultSamplingProbability -} - -func (p *PerOperationSamplingStrategies) GetDefaultLowerBoundTracesPerSecond() float64 { - return p.DefaultLowerBoundTracesPerSecond -} - -func (p *PerOperationSamplingStrategies) GetPerOperationStrategies() []*OperationSamplingStrategy { - return p.PerOperationStrategies -} - -var PerOperationSamplingStrategies_DefaultUpperBoundTracesPerSecond_DEFAULT float64 - -func (p *PerOperationSamplingStrategies) GetDefaultUpperBoundTracesPerSecond() float64 { - if !p.IsSetDefaultUpperBoundTracesPerSecond() { - return PerOperationSamplingStrategies_DefaultUpperBoundTracesPerSecond_DEFAULT - } - return *p.DefaultUpperBoundTracesPerSecond -} -func (p *PerOperationSamplingStrategies) IsSetDefaultUpperBoundTracesPerSecond() bool { - return p.DefaultUpperBoundTracesPerSecond != nil -} - -func (p *PerOperationSamplingStrategies) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetDefaultSamplingProbability bool = false - var issetDefaultLowerBoundTracesPerSecond bool = false - var issetPerOperationStrategies bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetDefaultSamplingProbability = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - issetDefaultLowerBoundTracesPerSecond = true - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - issetPerOperationStrategies = true - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetDefaultSamplingProbability { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field DefaultSamplingProbability is not set")) - } - if !issetDefaultLowerBoundTracesPerSecond { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field DefaultLowerBoundTracesPerSecond is not set")) - } - if !issetPerOperationStrategies { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field PerOperationStrategies is not set")) - } - return nil -} - -func (p *PerOperationSamplingStrategies) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.DefaultSamplingProbability = v - } - return nil -} - -func (p *PerOperationSamplingStrategies) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.DefaultLowerBoundTracesPerSecond = v - } - return nil -} - -func (p *PerOperationSamplingStrategies) readField3(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*OperationSamplingStrategy, 0, size) - p.PerOperationStrategies = tSlice - for i := 0; i < size; i++ { - _elem0 := &OperationSamplingStrategy{} - if err := _elem0.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem0), err) - } - p.PerOperationStrategies = append(p.PerOperationStrategies, _elem0) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *PerOperationSamplingStrategies) readField4(iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.DefaultUpperBoundTracesPerSecond = &v - } - return nil -} - -func (p *PerOperationSamplingStrategies) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("PerOperationSamplingStrategies"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *PerOperationSamplingStrategies) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("defaultSamplingProbability", thrift.DOUBLE, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:defaultSamplingProbability: ", p), err) - } - if err := oprot.WriteDouble(float64(p.DefaultSamplingProbability)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.defaultSamplingProbability (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:defaultSamplingProbability: ", p), err) - } - return err -} - -func (p *PerOperationSamplingStrategies) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("defaultLowerBoundTracesPerSecond", thrift.DOUBLE, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:defaultLowerBoundTracesPerSecond: ", p), err) - } - if err := oprot.WriteDouble(float64(p.DefaultLowerBoundTracesPerSecond)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.defaultLowerBoundTracesPerSecond (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:defaultLowerBoundTracesPerSecond: ", p), err) - } - return err -} - -func (p *PerOperationSamplingStrategies) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("perOperationStrategies", thrift.LIST, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:perOperationStrategies: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.PerOperationStrategies)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.PerOperationStrategies { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:perOperationStrategies: ", p), err) - } - return err -} - -func (p *PerOperationSamplingStrategies) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetDefaultUpperBoundTracesPerSecond() { - if err := oprot.WriteFieldBegin("defaultUpperBoundTracesPerSecond", thrift.DOUBLE, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:defaultUpperBoundTracesPerSecond: ", p), err) - } - if err := oprot.WriteDouble(float64(*p.DefaultUpperBoundTracesPerSecond)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.defaultUpperBoundTracesPerSecond (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:defaultUpperBoundTracesPerSecond: ", p), err) - } - } - return err -} - -func (p *PerOperationSamplingStrategies) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("PerOperationSamplingStrategies(%+v)", *p) -} - -// Attributes: -// - StrategyType -// - ProbabilisticSampling -// - RateLimitingSampling -// - OperationSampling -type SamplingStrategyResponse struct { - StrategyType SamplingStrategyType `thrift:"strategyType,1,required" json:"strategyType"` - ProbabilisticSampling *ProbabilisticSamplingStrategy `thrift:"probabilisticSampling,2" json:"probabilisticSampling,omitempty"` - RateLimitingSampling *RateLimitingSamplingStrategy `thrift:"rateLimitingSampling,3" json:"rateLimitingSampling,omitempty"` - OperationSampling *PerOperationSamplingStrategies `thrift:"operationSampling,4" json:"operationSampling,omitempty"` -} - -func NewSamplingStrategyResponse() *SamplingStrategyResponse { - return &SamplingStrategyResponse{} -} - -func (p *SamplingStrategyResponse) GetStrategyType() SamplingStrategyType { - return p.StrategyType -} - -var SamplingStrategyResponse_ProbabilisticSampling_DEFAULT *ProbabilisticSamplingStrategy - -func (p *SamplingStrategyResponse) GetProbabilisticSampling() *ProbabilisticSamplingStrategy { - if !p.IsSetProbabilisticSampling() { - return SamplingStrategyResponse_ProbabilisticSampling_DEFAULT - } - return p.ProbabilisticSampling -} - -var SamplingStrategyResponse_RateLimitingSampling_DEFAULT *RateLimitingSamplingStrategy - -func (p *SamplingStrategyResponse) GetRateLimitingSampling() *RateLimitingSamplingStrategy { - if !p.IsSetRateLimitingSampling() { - return SamplingStrategyResponse_RateLimitingSampling_DEFAULT - } - return p.RateLimitingSampling -} - -var SamplingStrategyResponse_OperationSampling_DEFAULT *PerOperationSamplingStrategies - -func (p *SamplingStrategyResponse) GetOperationSampling() *PerOperationSamplingStrategies { - if !p.IsSetOperationSampling() { - return SamplingStrategyResponse_OperationSampling_DEFAULT - } - return p.OperationSampling -} -func (p *SamplingStrategyResponse) IsSetProbabilisticSampling() bool { - return p.ProbabilisticSampling != nil -} - -func (p *SamplingStrategyResponse) IsSetRateLimitingSampling() bool { - return p.RateLimitingSampling != nil -} - -func (p *SamplingStrategyResponse) IsSetOperationSampling() bool { - return p.OperationSampling != nil -} - -func (p *SamplingStrategyResponse) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetStrategyType bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetStrategyType = true - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetStrategyType { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field StrategyType is not set")) - } - return nil -} - -func (p *SamplingStrategyResponse) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - temp := SamplingStrategyType(v) - p.StrategyType = temp - } - return nil -} - -func (p *SamplingStrategyResponse) readField2(iprot thrift.TProtocol) error { - p.ProbabilisticSampling = &ProbabilisticSamplingStrategy{} - if err := p.ProbabilisticSampling.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.ProbabilisticSampling), err) - } - return nil -} - -func (p *SamplingStrategyResponse) readField3(iprot thrift.TProtocol) error { - p.RateLimitingSampling = &RateLimitingSamplingStrategy{} - if err := p.RateLimitingSampling.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.RateLimitingSampling), err) - } - return nil -} - -func (p *SamplingStrategyResponse) readField4(iprot thrift.TProtocol) error { - p.OperationSampling = &PerOperationSamplingStrategies{} - if err := p.OperationSampling.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.OperationSampling), err) - } - return nil -} - -func (p *SamplingStrategyResponse) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("SamplingStrategyResponse"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *SamplingStrategyResponse) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("strategyType", thrift.I32, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:strategyType: ", p), err) - } - if err := oprot.WriteI32(int32(p.StrategyType)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.strategyType (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:strategyType: ", p), err) - } - return err -} - -func (p *SamplingStrategyResponse) writeField2(oprot thrift.TProtocol) (err error) { - if p.IsSetProbabilisticSampling() { - if err := oprot.WriteFieldBegin("probabilisticSampling", thrift.STRUCT, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:probabilisticSampling: ", p), err) - } - if err := p.ProbabilisticSampling.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.ProbabilisticSampling), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:probabilisticSampling: ", p), err) - } - } - return err -} - -func (p *SamplingStrategyResponse) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetRateLimitingSampling() { - if err := oprot.WriteFieldBegin("rateLimitingSampling", thrift.STRUCT, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:rateLimitingSampling: ", p), err) - } - if err := p.RateLimitingSampling.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.RateLimitingSampling), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:rateLimitingSampling: ", p), err) - } - } - return err -} - -func (p *SamplingStrategyResponse) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetOperationSampling() { - if err := oprot.WriteFieldBegin("operationSampling", thrift.STRUCT, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:operationSampling: ", p), err) - } - if err := p.OperationSampling.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.OperationSampling), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:operationSampling: ", p), err) - } - } - return err -} - -func (p *SamplingStrategyResponse) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("SamplingStrategyResponse(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/constants.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/constants.go deleted file mode 100644 index f05144bfc694..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/constants.go +++ /dev/null @@ -1,32 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package zipkincore - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -const CLIENT_SEND = "cs" -const CLIENT_RECV = "cr" -const SERVER_SEND = "ss" -const SERVER_RECV = "sr" -const WIRE_SEND = "ws" -const WIRE_RECV = "wr" -const CLIENT_SEND_FRAGMENT = "csf" -const CLIENT_RECV_FRAGMENT = "crf" -const SERVER_SEND_FRAGMENT = "ssf" -const SERVER_RECV_FRAGMENT = "srf" -const LOCAL_COMPONENT = "lc" -const CLIENT_ADDR = "ca" -const SERVER_ADDR = "sa" - -func init() { -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/ttypes.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/ttypes.go deleted file mode 100644 index 34b2b267eb52..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/ttypes.go +++ /dev/null @@ -1,1247 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package zipkincore - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -var GoUnusedProtection__ int - -type AnnotationType int64 - -const ( - AnnotationType_BOOL AnnotationType = 0 - AnnotationType_BYTES AnnotationType = 1 - AnnotationType_I16 AnnotationType = 2 - AnnotationType_I32 AnnotationType = 3 - AnnotationType_I64 AnnotationType = 4 - AnnotationType_DOUBLE AnnotationType = 5 - AnnotationType_STRING AnnotationType = 6 -) - -func (p AnnotationType) String() string { - switch p { - case AnnotationType_BOOL: - return "BOOL" - case AnnotationType_BYTES: - return "BYTES" - case AnnotationType_I16: - return "I16" - case AnnotationType_I32: - return "I32" - case AnnotationType_I64: - return "I64" - case AnnotationType_DOUBLE: - return "DOUBLE" - case AnnotationType_STRING: - return "STRING" - } - return "" -} - -func AnnotationTypeFromString(s string) (AnnotationType, error) { - switch s { - case "BOOL": - return AnnotationType_BOOL, nil - case "BYTES": - return AnnotationType_BYTES, nil - case "I16": - return AnnotationType_I16, nil - case "I32": - return AnnotationType_I32, nil - case "I64": - return AnnotationType_I64, nil - case "DOUBLE": - return AnnotationType_DOUBLE, nil - case "STRING": - return AnnotationType_STRING, nil - } - return AnnotationType(0), fmt.Errorf("not a valid AnnotationType string") -} - -func AnnotationTypePtr(v AnnotationType) *AnnotationType { return &v } - -func (p AnnotationType) MarshalText() ([]byte, error) { - return []byte(p.String()), nil -} - -func (p *AnnotationType) UnmarshalText(text []byte) error { - q, err := AnnotationTypeFromString(string(text)) - if err != nil { - return err - } - *p = q - return nil -} - -// Indicates the network context of a service recording an annotation with two -// exceptions. -// -// When a BinaryAnnotation, and key is CLIENT_ADDR or SERVER_ADDR, -// the endpoint indicates the source or destination of an RPC. This exception -// allows zipkin to display network context of uninstrumented services, or -// clients such as web browsers. -// -// Attributes: -// - Ipv4: IPv4 host address packed into 4 bytes. -// -// Ex for the ip 1.2.3.4, it would be (1 << 24) | (2 << 16) | (3 << 8) | 4 -// - Port: IPv4 port -// -// Note: this is to be treated as an unsigned integer, so watch for negatives. -// -// Conventionally, when the port isn't known, port = 0. -// - ServiceName: Service name in lowercase, such as "memcache" or "zipkin-web" -// -// Conventionally, when the service name isn't known, service_name = "unknown". -type Endpoint struct { - Ipv4 int32 `thrift:"ipv4,1" json:"ipv4"` - Port int16 `thrift:"port,2" json:"port"` - ServiceName string `thrift:"service_name,3" json:"service_name"` -} - -func NewEndpoint() *Endpoint { - return &Endpoint{} -} - -func (p *Endpoint) GetIpv4() int32 { - return p.Ipv4 -} - -func (p *Endpoint) GetPort() int16 { - return p.Port -} - -func (p *Endpoint) GetServiceName() string { - return p.ServiceName -} -func (p *Endpoint) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *Endpoint) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Ipv4 = v - } - return nil -} - -func (p *Endpoint) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI16(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.Port = v - } - return nil -} - -func (p *Endpoint) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.ServiceName = v - } - return nil -} - -func (p *Endpoint) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Endpoint"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Endpoint) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("ipv4", thrift.I32, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:ipv4: ", p), err) - } - if err := oprot.WriteI32(int32(p.Ipv4)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.ipv4 (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:ipv4: ", p), err) - } - return err -} - -func (p *Endpoint) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("port", thrift.I16, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:port: ", p), err) - } - if err := oprot.WriteI16(int16(p.Port)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.port (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:port: ", p), err) - } - return err -} - -func (p *Endpoint) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("service_name", thrift.STRING, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:service_name: ", p), err) - } - if err := oprot.WriteString(string(p.ServiceName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.service_name (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:service_name: ", p), err) - } - return err -} - -func (p *Endpoint) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Endpoint(%+v)", *p) -} - -// An annotation is similar to a log statement. It includes a host field which -// allows these events to be attributed properly, and also aggregatable. -// -// Attributes: -// - Timestamp: Microseconds from epoch. -// -// This value should use the most precise value possible. For example, -// gettimeofday or syncing nanoTime against a tick of currentTimeMillis. -// - Value -// - Host: Always the host that recorded the event. By specifying the host you allow -// rollup of all events (such as client requests to a service) by IP address. -type Annotation struct { - Timestamp int64 `thrift:"timestamp,1" json:"timestamp"` - Value string `thrift:"value,2" json:"value"` - Host *Endpoint `thrift:"host,3" json:"host,omitempty"` -} - -func NewAnnotation() *Annotation { - return &Annotation{} -} - -func (p *Annotation) GetTimestamp() int64 { - return p.Timestamp -} - -func (p *Annotation) GetValue() string { - return p.Value -} - -var Annotation_Host_DEFAULT *Endpoint - -func (p *Annotation) GetHost() *Endpoint { - if !p.IsSetHost() { - return Annotation_Host_DEFAULT - } - return p.Host -} -func (p *Annotation) IsSetHost() bool { - return p.Host != nil -} - -func (p *Annotation) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *Annotation) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Timestamp = v - } - return nil -} - -func (p *Annotation) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.Value = v - } - return nil -} - -func (p *Annotation) readField3(iprot thrift.TProtocol) error { - p.Host = &Endpoint{} - if err := p.Host.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Host), err) - } - return nil -} - -func (p *Annotation) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Annotation"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Annotation) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("timestamp", thrift.I64, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:timestamp: ", p), err) - } - if err := oprot.WriteI64(int64(p.Timestamp)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.timestamp (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:timestamp: ", p), err) - } - return err -} - -func (p *Annotation) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("value", thrift.STRING, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:value: ", p), err) - } - if err := oprot.WriteString(string(p.Value)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.value (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:value: ", p), err) - } - return err -} - -func (p *Annotation) writeField3(oprot thrift.TProtocol) (err error) { - if p.IsSetHost() { - if err := oprot.WriteFieldBegin("host", thrift.STRUCT, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:host: ", p), err) - } - if err := p.Host.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Host), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:host: ", p), err) - } - } - return err -} - -func (p *Annotation) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Annotation(%+v)", *p) -} - -// Binary annotations are tags applied to a Span to give it context. For -// example, a binary annotation of "http.uri" could the path to a resource in a -// RPC call. -// -// Binary annotations of type STRING are always queryable, though more a -// historical implementation detail than a structural concern. -// -// Binary annotations can repeat, and vary on the host. Similar to Annotation, -// the host indicates who logged the event. This allows you to tell the -// difference between the client and server side of the same key. For example, -// the key "http.uri" might be different on the client and server side due to -// rewriting, like "/api/v1/myresource" vs "/myresource. Via the host field, -// you can see the different points of view, which often help in debugging. -// -// Attributes: -// - Key -// - Value -// - AnnotationType -// - Host: The host that recorded tag, which allows you to differentiate between -// multiple tags with the same key. There are two exceptions to this. -// -// When the key is CLIENT_ADDR or SERVER_ADDR, host indicates the source or -// destination of an RPC. This exception allows zipkin to display network -// context of uninstrumented services, or clients such as web browsers. -type BinaryAnnotation struct { - Key string `thrift:"key,1" json:"key"` - Value []byte `thrift:"value,2" json:"value"` - AnnotationType AnnotationType `thrift:"annotation_type,3" json:"annotation_type"` - Host *Endpoint `thrift:"host,4" json:"host,omitempty"` -} - -func NewBinaryAnnotation() *BinaryAnnotation { - return &BinaryAnnotation{} -} - -func (p *BinaryAnnotation) GetKey() string { - return p.Key -} - -func (p *BinaryAnnotation) GetValue() []byte { - return p.Value -} - -func (p *BinaryAnnotation) GetAnnotationType() AnnotationType { - return p.AnnotationType -} - -var BinaryAnnotation_Host_DEFAULT *Endpoint - -func (p *BinaryAnnotation) GetHost() *Endpoint { - if !p.IsSetHost() { - return BinaryAnnotation_Host_DEFAULT - } - return p.Host -} -func (p *BinaryAnnotation) IsSetHost() bool { - return p.Host != nil -} - -func (p *BinaryAnnotation) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - case 2: - if err := p.readField2(iprot); err != nil { - return err - } - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *BinaryAnnotation) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Key = v - } - return nil -} - -func (p *BinaryAnnotation) readField2(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBinary(); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.Value = v - } - return nil -} - -func (p *BinaryAnnotation) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - temp := AnnotationType(v) - p.AnnotationType = temp - } - return nil -} - -func (p *BinaryAnnotation) readField4(iprot thrift.TProtocol) error { - p.Host = &Endpoint{} - if err := p.Host.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Host), err) - } - return nil -} - -func (p *BinaryAnnotation) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("BinaryAnnotation"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField2(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *BinaryAnnotation) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("key", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:key: ", p), err) - } - if err := oprot.WriteString(string(p.Key)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.key (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:key: ", p), err) - } - return err -} - -func (p *BinaryAnnotation) writeField2(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("value", thrift.STRING, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:value: ", p), err) - } - if err := oprot.WriteBinary(p.Value); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.value (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:value: ", p), err) - } - return err -} - -func (p *BinaryAnnotation) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("annotation_type", thrift.I32, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:annotation_type: ", p), err) - } - if err := oprot.WriteI32(int32(p.AnnotationType)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.annotation_type (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:annotation_type: ", p), err) - } - return err -} - -func (p *BinaryAnnotation) writeField4(oprot thrift.TProtocol) (err error) { - if p.IsSetHost() { - if err := oprot.WriteFieldBegin("host", thrift.STRUCT, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:host: ", p), err) - } - if err := p.Host.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Host), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:host: ", p), err) - } - } - return err -} - -func (p *BinaryAnnotation) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("BinaryAnnotation(%+v)", *p) -} - -// A trace is a series of spans (often RPC calls) which form a latency tree. -// -// The root span is where trace_id = id and parent_id = Nil. The root span is -// usually the longest interval in the trace, starting with a SERVER_RECV -// annotation and ending with a SERVER_SEND. -// -// Attributes: -// - TraceID -// - Name: Span name in lowercase, rpc method for example -// -// Conventionally, when the span name isn't known, name = "unknown". -// - ID -// - ParentID -// - Annotations -// - BinaryAnnotations -// - Debug -// - Timestamp: Microseconds from epoch of the creation of this span. -// -// This value should be set directly by instrumentation, using the most -// precise value possible. For example, gettimeofday or syncing nanoTime -// against a tick of currentTimeMillis. -// -// For compatibilty with instrumentation that precede this field, collectors -// or span stores can derive this via Annotation.timestamp. -// For example, SERVER_RECV.timestamp or CLIENT_SEND.timestamp. -// -// This field is optional for compatibility with old data: first-party span -// stores are expected to support this at time of introduction. -// - Duration: Measurement of duration in microseconds, used to support queries. -// -// This value should be set directly, where possible. Doing so encourages -// precise measurement decoupled from problems of clocks, such as skew or NTP -// updates causing time to move backwards. -// -// For compatibilty with instrumentation that precede this field, collectors -// or span stores can derive this by subtracting Annotation.timestamp. -// For example, SERVER_SEND.timestamp - SERVER_RECV.timestamp. -// -// If this field is persisted as unset, zipkin will continue to work, except -// duration query support will be implementation-specific. Similarly, setting -// this field non-atomically is implementation-specific. -// -// This field is i64 vs i32 to support spans longer than 35 minutes. -type Span struct { - TraceID int64 `thrift:"trace_id,1" json:"trace_id"` - // unused field # 2 - Name string `thrift:"name,3" json:"name"` - ID int64 `thrift:"id,4" json:"id"` - ParentID *int64 `thrift:"parent_id,5" json:"parent_id,omitempty"` - Annotations []*Annotation `thrift:"annotations,6" json:"annotations"` - // unused field # 7 - BinaryAnnotations []*BinaryAnnotation `thrift:"binary_annotations,8" json:"binary_annotations"` - Debug bool `thrift:"debug,9" json:"debug,omitempty"` - Timestamp *int64 `thrift:"timestamp,10" json:"timestamp,omitempty"` - Duration *int64 `thrift:"duration,11" json:"duration,omitempty"` -} - -func NewSpan() *Span { - return &Span{} -} - -func (p *Span) GetTraceID() int64 { - return p.TraceID -} - -func (p *Span) GetName() string { - return p.Name -} - -func (p *Span) GetID() int64 { - return p.ID -} - -var Span_ParentID_DEFAULT int64 - -func (p *Span) GetParentID() int64 { - if !p.IsSetParentID() { - return Span_ParentID_DEFAULT - } - return *p.ParentID -} - -func (p *Span) GetAnnotations() []*Annotation { - return p.Annotations -} - -func (p *Span) GetBinaryAnnotations() []*BinaryAnnotation { - return p.BinaryAnnotations -} - -var Span_Debug_DEFAULT bool = false - -func (p *Span) GetDebug() bool { - return p.Debug -} - -var Span_Timestamp_DEFAULT int64 - -func (p *Span) GetTimestamp() int64 { - if !p.IsSetTimestamp() { - return Span_Timestamp_DEFAULT - } - return *p.Timestamp -} - -var Span_Duration_DEFAULT int64 - -func (p *Span) GetDuration() int64 { - if !p.IsSetDuration() { - return Span_Duration_DEFAULT - } - return *p.Duration -} -func (p *Span) IsSetParentID() bool { - return p.ParentID != nil -} - -func (p *Span) IsSetDebug() bool { - return p.Debug != Span_Debug_DEFAULT -} - -func (p *Span) IsSetTimestamp() bool { - return p.Timestamp != nil -} - -func (p *Span) IsSetDuration() bool { - return p.Duration != nil -} - -func (p *Span) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - case 3: - if err := p.readField3(iprot); err != nil { - return err - } - case 4: - if err := p.readField4(iprot); err != nil { - return err - } - case 5: - if err := p.readField5(iprot); err != nil { - return err - } - case 6: - if err := p.readField6(iprot); err != nil { - return err - } - case 8: - if err := p.readField8(iprot); err != nil { - return err - } - case 9: - if err := p.readField9(iprot); err != nil { - return err - } - case 10: - if err := p.readField10(iprot); err != nil { - return err - } - case 11: - if err := p.readField11(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *Span) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.TraceID = v - } - return nil -} - -func (p *Span) readField3(iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.Name = v - } - return nil -} - -func (p *Span) readField4(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.ID = v - } - return nil -} - -func (p *Span) readField5(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - p.ParentID = &v - } - return nil -} - -func (p *Span) readField6(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Annotation, 0, size) - p.Annotations = tSlice - for i := 0; i < size; i++ { - _elem0 := &Annotation{} - if err := _elem0.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem0), err) - } - p.Annotations = append(p.Annotations, _elem0) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Span) readField8(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*BinaryAnnotation, 0, size) - p.BinaryAnnotations = tSlice - for i := 0; i < size; i++ { - _elem1 := &BinaryAnnotation{} - if err := _elem1.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem1), err) - } - p.BinaryAnnotations = append(p.BinaryAnnotations, _elem1) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *Span) readField9(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBool(); err != nil { - return thrift.PrependError("error reading field 9: ", err) - } else { - p.Debug = v - } - return nil -} - -func (p *Span) readField10(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 10: ", err) - } else { - p.Timestamp = &v - } - return nil -} - -func (p *Span) readField11(iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(); err != nil { - return thrift.PrependError("error reading field 11: ", err) - } else { - p.Duration = &v - } - return nil -} - -func (p *Span) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Span"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := p.writeField3(oprot); err != nil { - return err - } - if err := p.writeField4(oprot); err != nil { - return err - } - if err := p.writeField5(oprot); err != nil { - return err - } - if err := p.writeField6(oprot); err != nil { - return err - } - if err := p.writeField8(oprot); err != nil { - return err - } - if err := p.writeField9(oprot); err != nil { - return err - } - if err := p.writeField10(oprot); err != nil { - return err - } - if err := p.writeField11(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Span) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("trace_id", thrift.I64, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:trace_id: ", p), err) - } - if err := oprot.WriteI64(int64(p.TraceID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.trace_id (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:trace_id: ", p), err) - } - return err -} - -func (p *Span) writeField3(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("name", thrift.STRING, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:name: ", p), err) - } - if err := oprot.WriteString(string(p.Name)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.name (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:name: ", p), err) - } - return err -} - -func (p *Span) writeField4(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("id", thrift.I64, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:id: ", p), err) - } - if err := oprot.WriteI64(int64(p.ID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.id (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:id: ", p), err) - } - return err -} - -func (p *Span) writeField5(oprot thrift.TProtocol) (err error) { - if p.IsSetParentID() { - if err := oprot.WriteFieldBegin("parent_id", thrift.I64, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:parent_id: ", p), err) - } - if err := oprot.WriteI64(int64(*p.ParentID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.parent_id (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:parent_id: ", p), err) - } - } - return err -} - -func (p *Span) writeField6(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("annotations", thrift.LIST, 6); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:annotations: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Annotations)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Annotations { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 6:annotations: ", p), err) - } - return err -} - -func (p *Span) writeField8(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("binary_annotations", thrift.LIST, 8); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 8:binary_annotations: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.BinaryAnnotations)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.BinaryAnnotations { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 8:binary_annotations: ", p), err) - } - return err -} - -func (p *Span) writeField9(oprot thrift.TProtocol) (err error) { - if p.IsSetDebug() { - if err := oprot.WriteFieldBegin("debug", thrift.BOOL, 9); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 9:debug: ", p), err) - } - if err := oprot.WriteBool(bool(p.Debug)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.debug (9) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 9:debug: ", p), err) - } - } - return err -} - -func (p *Span) writeField10(oprot thrift.TProtocol) (err error) { - if p.IsSetTimestamp() { - if err := oprot.WriteFieldBegin("timestamp", thrift.I64, 10); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 10:timestamp: ", p), err) - } - if err := oprot.WriteI64(int64(*p.Timestamp)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.timestamp (10) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 10:timestamp: ", p), err) - } - } - return err -} - -func (p *Span) writeField11(oprot thrift.TProtocol) (err error) { - if p.IsSetDuration() { - if err := oprot.WriteFieldBegin("duration", thrift.I64, 11); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 11:duration: ", p), err) - } - if err := oprot.WriteI64(int64(*p.Duration)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.duration (11) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 11:duration: ", p), err) - } - } - return err -} - -func (p *Span) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Span(%+v)", *p) -} - -// Attributes: -// - Ok -type Response struct { - Ok bool `thrift:"ok,1,required" json:"ok"` -} - -func NewResponse() *Response { - return &Response{} -} - -func (p *Response) GetOk() bool { - return p.Ok -} -func (p *Response) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - var issetOk bool = false - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - issetOk = true - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - if !issetOk { - return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf("Required field Ok is not set")) - } - return nil -} - -func (p *Response) readField1(iprot thrift.TProtocol) error { - if v, err := iprot.ReadBool(); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Ok = v - } - return nil -} - -func (p *Response) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("Response"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Response) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("ok", thrift.BOOL, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:ok: ", p), err) - } - if err := oprot.WriteBool(bool(p.Ok)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.ok (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:ok: ", p), err) - } - return err -} - -func (p *Response) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Response(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/zipkincollector.go b/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/zipkincollector.go deleted file mode 100644 index 417e883d0e31..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift-gen/zipkincore/zipkincollector.go +++ /dev/null @@ -1,446 +0,0 @@ -// Autogenerated by Thrift Compiler (0.9.3) -// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - -package zipkincore - -import ( - "bytes" - "fmt" - "github.com/uber/jaeger-client-go/thrift" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = thrift.ZERO -var _ = fmt.Printf -var _ = bytes.Equal - -type ZipkinCollector interface { - // Parameters: - // - Spans - SubmitZipkinBatch(spans []*Span) (r []*Response, err error) -} - -type ZipkinCollectorClient struct { - Transport thrift.TTransport - ProtocolFactory thrift.TProtocolFactory - InputProtocol thrift.TProtocol - OutputProtocol thrift.TProtocol - SeqId int32 -} - -func NewZipkinCollectorClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *ZipkinCollectorClient { - return &ZipkinCollectorClient{Transport: t, - ProtocolFactory: f, - InputProtocol: f.GetProtocol(t), - OutputProtocol: f.GetProtocol(t), - SeqId: 0, - } -} - -func NewZipkinCollectorClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *ZipkinCollectorClient { - return &ZipkinCollectorClient{Transport: t, - ProtocolFactory: nil, - InputProtocol: iprot, - OutputProtocol: oprot, - SeqId: 0, - } -} - -// Parameters: -// - Spans -func (p *ZipkinCollectorClient) SubmitZipkinBatch(spans []*Span) (r []*Response, err error) { - if err = p.sendSubmitZipkinBatch(spans); err != nil { - return - } - return p.recvSubmitZipkinBatch() -} - -func (p *ZipkinCollectorClient) sendSubmitZipkinBatch(spans []*Span) (err error) { - oprot := p.OutputProtocol - if oprot == nil { - oprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.OutputProtocol = oprot - } - p.SeqId++ - if err = oprot.WriteMessageBegin("submitZipkinBatch", thrift.CALL, p.SeqId); err != nil { - return - } - args := ZipkinCollectorSubmitZipkinBatchArgs{ - Spans: spans, - } - if err = args.Write(oprot); err != nil { - return - } - if err = oprot.WriteMessageEnd(); err != nil { - return - } - return oprot.Flush() -} - -func (p *ZipkinCollectorClient) recvSubmitZipkinBatch() (value []*Response, err error) { - iprot := p.InputProtocol - if iprot == nil { - iprot = p.ProtocolFactory.GetProtocol(p.Transport) - p.InputProtocol = iprot - } - method, mTypeId, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return - } - if method != "submitZipkinBatch" { - err = thrift.NewTApplicationException(thrift.WRONG_METHOD_NAME, "submitZipkinBatch failed: wrong method name") - return - } - if p.SeqId != seqId { - err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, "submitZipkinBatch failed: out of sequence response") - return - } - if mTypeId == thrift.EXCEPTION { - error2 := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "Unknown Exception") - var error3 error - error3, err = error2.Read(iprot) - if err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - err = error3 - return - } - if mTypeId != thrift.REPLY { - err = thrift.NewTApplicationException(thrift.INVALID_MESSAGE_TYPE_EXCEPTION, "submitZipkinBatch failed: invalid message type") - return - } - result := ZipkinCollectorSubmitZipkinBatchResult{} - if err = result.Read(iprot); err != nil { - return - } - if err = iprot.ReadMessageEnd(); err != nil { - return - } - value = result.GetSuccess() - return -} - -type ZipkinCollectorProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler ZipkinCollector -} - -func (p *ZipkinCollectorProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *ZipkinCollectorProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *ZipkinCollectorProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewZipkinCollectorProcessor(handler ZipkinCollector) *ZipkinCollectorProcessor { - - self4 := &ZipkinCollectorProcessor{handler: handler, processorMap: make(map[string]thrift.TProcessorFunction)} - self4.processorMap["submitZipkinBatch"] = &zipkinCollectorProcessorSubmitZipkinBatch{handler: handler} - return self4 -} - -func (p *ZipkinCollectorProcessor) Process(iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err := iprot.ReadMessageBegin() - if err != nil { - return false, err - } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(seqId, iprot, oprot) - } - iprot.Skip(thrift.STRUCT) - iprot.ReadMessageEnd() - x5 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function "+name) - oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId) - x5.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, x5 - -} - -type zipkinCollectorProcessorSubmitZipkinBatch struct { - handler ZipkinCollector -} - -func (p *zipkinCollectorProcessorSubmitZipkinBatch) Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - args := ZipkinCollectorSubmitZipkinBatchArgs{} - if err = args.Read(iprot); err != nil { - iprot.ReadMessageEnd() - x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error()) - oprot.WriteMessageBegin("submitZipkinBatch", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return false, err - } - - iprot.ReadMessageEnd() - result := ZipkinCollectorSubmitZipkinBatchResult{} - var retval []*Response - var err2 error - if retval, err2 = p.handler.SubmitZipkinBatch(args.Spans); err2 != nil { - x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing submitZipkinBatch: "+err2.Error()) - oprot.WriteMessageBegin("submitZipkinBatch", thrift.EXCEPTION, seqId) - x.Write(oprot) - oprot.WriteMessageEnd() - oprot.Flush() - return true, err2 - } else { - result.Success = retval - } - if err2 = oprot.WriteMessageBegin("submitZipkinBatch", thrift.REPLY, seqId); err2 != nil { - err = err2 - } - if err2 = result.Write(oprot); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil { - err = err2 - } - if err2 = oprot.Flush(); err == nil && err2 != nil { - err = err2 - } - if err != nil { - return - } - return true, err -} - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - Spans -type ZipkinCollectorSubmitZipkinBatchArgs struct { - Spans []*Span `thrift:"spans,1" json:"spans"` -} - -func NewZipkinCollectorSubmitZipkinBatchArgs() *ZipkinCollectorSubmitZipkinBatchArgs { - return &ZipkinCollectorSubmitZipkinBatchArgs{} -} - -func (p *ZipkinCollectorSubmitZipkinBatchArgs) GetSpans() []*Span { - return p.Spans -} -func (p *ZipkinCollectorSubmitZipkinBatchArgs) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if err := p.readField1(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchArgs) readField1(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Span, 0, size) - p.Spans = tSlice - for i := 0; i < size; i++ { - _elem6 := &Span{} - if err := _elem6.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem6), err) - } - p.Spans = append(p.Spans, _elem6) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchArgs) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("submitZipkinBatch_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField1(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchArgs) writeField1(oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin("spans", thrift.LIST, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:spans: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Spans)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Spans { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:spans: ", p), err) - } - return err -} - -func (p *ZipkinCollectorSubmitZipkinBatchArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("ZipkinCollectorSubmitZipkinBatchArgs(%+v)", *p) -} - -// Attributes: -// - Success -type ZipkinCollectorSubmitZipkinBatchResult struct { - Success []*Response `thrift:"success,0" json:"success,omitempty"` -} - -func NewZipkinCollectorSubmitZipkinBatchResult() *ZipkinCollectorSubmitZipkinBatchResult { - return &ZipkinCollectorSubmitZipkinBatchResult{} -} - -var ZipkinCollectorSubmitZipkinBatchResult_Success_DEFAULT []*Response - -func (p *ZipkinCollectorSubmitZipkinBatchResult) GetSuccess() []*Response { - return p.Success -} -func (p *ZipkinCollectorSubmitZipkinBatchResult) IsSetSuccess() bool { - return p.Success != nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchResult) Read(iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin() - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 0: - if err := p.readField0(iprot); err != nil { - return err - } - default: - if err := iprot.Skip(fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchResult) readField0(iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin() - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Response, 0, size) - p.Success = tSlice - for i := 0; i < size; i++ { - _elem7 := &Response{} - if err := _elem7.Read(iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem7), err) - } - p.Success = append(p.Success, _elem7) - } - if err := iprot.ReadListEnd(); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchResult) Write(oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin("submitZipkinBatch_result"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if err := p.writeField0(oprot); err != nil { - return err - } - if err := oprot.WriteFieldStop(); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *ZipkinCollectorSubmitZipkinBatchResult) writeField0(oprot thrift.TProtocol) (err error) { - if p.IsSetSuccess() { - if err := oprot.WriteFieldBegin("success", thrift.LIST, 0); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) - } - if err := oprot.WriteListBegin(thrift.STRUCT, len(p.Success)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.Success { - if err := v.Write(oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) - } - } - return err -} - -func (p *ZipkinCollectorSubmitZipkinBatchResult) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("ZipkinCollectorSubmitZipkinBatchResult(%+v)", *p) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/README.md b/vendor/github.com/uber/jaeger-client-go/thrift/README.md deleted file mode 100644 index 1d8e642e028b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Apache Thrift - -This is a partial copy of Apache Thrift v0.10 (https://github.com/apache/thrift/commit/b2a4d4ae21c789b689dd162deb819665567f481c). - -It is vendored code to avoid compatibility issues introduced in Thrift v0.11. - -See https://github.com/jaegertracing/jaeger-client-go/pull/303. diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go b/vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go deleted file mode 100644 index 6655cc5a9720..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -const ( - UNKNOWN_APPLICATION_EXCEPTION = 0 - UNKNOWN_METHOD = 1 - INVALID_MESSAGE_TYPE_EXCEPTION = 2 - WRONG_METHOD_NAME = 3 - BAD_SEQUENCE_ID = 4 - MISSING_RESULT = 5 - INTERNAL_ERROR = 6 - PROTOCOL_ERROR = 7 -) - -// Application level Thrift exception -type TApplicationException interface { - TException - TypeId() int32 - Read(iprot TProtocol) (TApplicationException, error) - Write(oprot TProtocol) error -} - -type tApplicationException struct { - message string - type_ int32 -} - -func (e tApplicationException) Error() string { - return e.message -} - -func NewTApplicationException(type_ int32, message string) TApplicationException { - return &tApplicationException{message, type_} -} - -func (p *tApplicationException) TypeId() int32 { - return p.type_ -} - -func (p *tApplicationException) Read(iprot TProtocol) (TApplicationException, error) { - _, err := iprot.ReadStructBegin() - if err != nil { - return nil, err - } - - message := "" - type_ := int32(UNKNOWN_APPLICATION_EXCEPTION) - - for { - _, ttype, id, err := iprot.ReadFieldBegin() - if err != nil { - return nil, err - } - if ttype == STOP { - break - } - switch id { - case 1: - if ttype == STRING { - if message, err = iprot.ReadString(); err != nil { - return nil, err - } - } else { - if err = SkipDefaultDepth(iprot, ttype); err != nil { - return nil, err - } - } - case 2: - if ttype == I32 { - if type_, err = iprot.ReadI32(); err != nil { - return nil, err - } - } else { - if err = SkipDefaultDepth(iprot, ttype); err != nil { - return nil, err - } - } - default: - if err = SkipDefaultDepth(iprot, ttype); err != nil { - return nil, err - } - } - if err = iprot.ReadFieldEnd(); err != nil { - return nil, err - } - } - return NewTApplicationException(type_, message), iprot.ReadStructEnd() -} - -func (p *tApplicationException) Write(oprot TProtocol) (err error) { - err = oprot.WriteStructBegin("TApplicationException") - if len(p.Error()) > 0 { - err = oprot.WriteFieldBegin("message", STRING, 1) - if err != nil { - return - } - err = oprot.WriteString(p.Error()) - if err != nil { - return - } - err = oprot.WriteFieldEnd() - if err != nil { - return - } - } - err = oprot.WriteFieldBegin("type", I32, 2) - if err != nil { - return - } - err = oprot.WriteI32(p.type_) - if err != nil { - return - } - err = oprot.WriteFieldEnd() - if err != nil { - return - } - err = oprot.WriteFieldStop() - if err != nil { - return - } - err = oprot.WriteStructEnd() - return -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go b/vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go deleted file mode 100644 index 690d341111b5..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go +++ /dev/null @@ -1,514 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "io" - "math" -) - -type TBinaryProtocol struct { - trans TRichTransport - origTransport TTransport - reader io.Reader - writer io.Writer - strictRead bool - strictWrite bool - buffer [64]byte -} - -type TBinaryProtocolFactory struct { - strictRead bool - strictWrite bool -} - -func NewTBinaryProtocolTransport(t TTransport) *TBinaryProtocol { - return NewTBinaryProtocol(t, false, true) -} - -func NewTBinaryProtocol(t TTransport, strictRead, strictWrite bool) *TBinaryProtocol { - p := &TBinaryProtocol{origTransport: t, strictRead: strictRead, strictWrite: strictWrite} - if et, ok := t.(TRichTransport); ok { - p.trans = et - } else { - p.trans = NewTRichTransport(t) - } - p.reader = p.trans - p.writer = p.trans - return p -} - -func NewTBinaryProtocolFactoryDefault() *TBinaryProtocolFactory { - return NewTBinaryProtocolFactory(false, true) -} - -func NewTBinaryProtocolFactory(strictRead, strictWrite bool) *TBinaryProtocolFactory { - return &TBinaryProtocolFactory{strictRead: strictRead, strictWrite: strictWrite} -} - -func (p *TBinaryProtocolFactory) GetProtocol(t TTransport) TProtocol { - return NewTBinaryProtocol(t, p.strictRead, p.strictWrite) -} - -/** - * Writing Methods - */ - -func (p *TBinaryProtocol) WriteMessageBegin(name string, typeId TMessageType, seqId int32) error { - if p.strictWrite { - version := uint32(VERSION_1) | uint32(typeId) - e := p.WriteI32(int32(version)) - if e != nil { - return e - } - e = p.WriteString(name) - if e != nil { - return e - } - e = p.WriteI32(seqId) - return e - } else { - e := p.WriteString(name) - if e != nil { - return e - } - e = p.WriteByte(int8(typeId)) - if e != nil { - return e - } - e = p.WriteI32(seqId) - return e - } - return nil -} - -func (p *TBinaryProtocol) WriteMessageEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteStructBegin(name string) error { - return nil -} - -func (p *TBinaryProtocol) WriteStructEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteFieldBegin(name string, typeId TType, id int16) error { - e := p.WriteByte(int8(typeId)) - if e != nil { - return e - } - e = p.WriteI16(id) - return e -} - -func (p *TBinaryProtocol) WriteFieldEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteFieldStop() error { - e := p.WriteByte(STOP) - return e -} - -func (p *TBinaryProtocol) WriteMapBegin(keyType TType, valueType TType, size int) error { - e := p.WriteByte(int8(keyType)) - if e != nil { - return e - } - e = p.WriteByte(int8(valueType)) - if e != nil { - return e - } - e = p.WriteI32(int32(size)) - return e -} - -func (p *TBinaryProtocol) WriteMapEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteListBegin(elemType TType, size int) error { - e := p.WriteByte(int8(elemType)) - if e != nil { - return e - } - e = p.WriteI32(int32(size)) - return e -} - -func (p *TBinaryProtocol) WriteListEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteSetBegin(elemType TType, size int) error { - e := p.WriteByte(int8(elemType)) - if e != nil { - return e - } - e = p.WriteI32(int32(size)) - return e -} - -func (p *TBinaryProtocol) WriteSetEnd() error { - return nil -} - -func (p *TBinaryProtocol) WriteBool(value bool) error { - if value { - return p.WriteByte(1) - } - return p.WriteByte(0) -} - -func (p *TBinaryProtocol) WriteByte(value int8) error { - e := p.trans.WriteByte(byte(value)) - return NewTProtocolException(e) -} - -func (p *TBinaryProtocol) WriteI16(value int16) error { - v := p.buffer[0:2] - binary.BigEndian.PutUint16(v, uint16(value)) - _, e := p.writer.Write(v) - return NewTProtocolException(e) -} - -func (p *TBinaryProtocol) WriteI32(value int32) error { - v := p.buffer[0:4] - binary.BigEndian.PutUint32(v, uint32(value)) - _, e := p.writer.Write(v) - return NewTProtocolException(e) -} - -func (p *TBinaryProtocol) WriteI64(value int64) error { - v := p.buffer[0:8] - binary.BigEndian.PutUint64(v, uint64(value)) - _, err := p.writer.Write(v) - return NewTProtocolException(err) -} - -func (p *TBinaryProtocol) WriteDouble(value float64) error { - return p.WriteI64(int64(math.Float64bits(value))) -} - -func (p *TBinaryProtocol) WriteString(value string) error { - e := p.WriteI32(int32(len(value))) - if e != nil { - return e - } - _, err := p.trans.WriteString(value) - return NewTProtocolException(err) -} - -func (p *TBinaryProtocol) WriteBinary(value []byte) error { - e := p.WriteI32(int32(len(value))) - if e != nil { - return e - } - _, err := p.writer.Write(value) - return NewTProtocolException(err) -} - -/** - * Reading methods - */ - -func (p *TBinaryProtocol) ReadMessageBegin() (name string, typeId TMessageType, seqId int32, err error) { - size, e := p.ReadI32() - if e != nil { - return "", typeId, 0, NewTProtocolException(e) - } - if size < 0 { - typeId = TMessageType(size & 0x0ff) - version := int64(int64(size) & VERSION_MASK) - if version != VERSION_1 { - return name, typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, fmt.Errorf("Bad version in ReadMessageBegin")) - } - name, e = p.ReadString() - if e != nil { - return name, typeId, seqId, NewTProtocolException(e) - } - seqId, e = p.ReadI32() - if e != nil { - return name, typeId, seqId, NewTProtocolException(e) - } - return name, typeId, seqId, nil - } - if p.strictRead { - return name, typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, fmt.Errorf("Missing version in ReadMessageBegin")) - } - name, e2 := p.readStringBody(size) - if e2 != nil { - return name, typeId, seqId, e2 - } - b, e3 := p.ReadByte() - if e3 != nil { - return name, typeId, seqId, e3 - } - typeId = TMessageType(b) - seqId, e4 := p.ReadI32() - if e4 != nil { - return name, typeId, seqId, e4 - } - return name, typeId, seqId, nil -} - -func (p *TBinaryProtocol) ReadMessageEnd() error { - return nil -} - -func (p *TBinaryProtocol) ReadStructBegin() (name string, err error) { - return -} - -func (p *TBinaryProtocol) ReadStructEnd() error { - return nil -} - -func (p *TBinaryProtocol) ReadFieldBegin() (name string, typeId TType, seqId int16, err error) { - t, err := p.ReadByte() - typeId = TType(t) - if err != nil { - return name, typeId, seqId, err - } - if t != STOP { - seqId, err = p.ReadI16() - } - return name, typeId, seqId, err -} - -func (p *TBinaryProtocol) ReadFieldEnd() error { - return nil -} - -var invalidDataLength = NewTProtocolExceptionWithType(INVALID_DATA, errors.New("Invalid data length")) - -func (p *TBinaryProtocol) ReadMapBegin() (kType, vType TType, size int, err error) { - k, e := p.ReadByte() - if e != nil { - err = NewTProtocolException(e) - return - } - kType = TType(k) - v, e := p.ReadByte() - if e != nil { - err = NewTProtocolException(e) - return - } - vType = TType(v) - size32, e := p.ReadI32() - if e != nil { - err = NewTProtocolException(e) - return - } - if size32 < 0 { - err = invalidDataLength - return - } - size = int(size32) - return kType, vType, size, nil -} - -func (p *TBinaryProtocol) ReadMapEnd() error { - return nil -} - -func (p *TBinaryProtocol) ReadListBegin() (elemType TType, size int, err error) { - b, e := p.ReadByte() - if e != nil { - err = NewTProtocolException(e) - return - } - elemType = TType(b) - size32, e := p.ReadI32() - if e != nil { - err = NewTProtocolException(e) - return - } - if size32 < 0 { - err = invalidDataLength - return - } - size = int(size32) - - return -} - -func (p *TBinaryProtocol) ReadListEnd() error { - return nil -} - -func (p *TBinaryProtocol) ReadSetBegin() (elemType TType, size int, err error) { - b, e := p.ReadByte() - if e != nil { - err = NewTProtocolException(e) - return - } - elemType = TType(b) - size32, e := p.ReadI32() - if e != nil { - err = NewTProtocolException(e) - return - } - if size32 < 0 { - err = invalidDataLength - return - } - size = int(size32) - return elemType, size, nil -} - -func (p *TBinaryProtocol) ReadSetEnd() error { - return nil -} - -func (p *TBinaryProtocol) ReadBool() (bool, error) { - b, e := p.ReadByte() - v := true - if b != 1 { - v = false - } - return v, e -} - -func (p *TBinaryProtocol) ReadByte() (int8, error) { - v, err := p.trans.ReadByte() - return int8(v), err -} - -func (p *TBinaryProtocol) ReadI16() (value int16, err error) { - buf := p.buffer[0:2] - err = p.readAll(buf) - value = int16(binary.BigEndian.Uint16(buf)) - return value, err -} - -func (p *TBinaryProtocol) ReadI32() (value int32, err error) { - buf := p.buffer[0:4] - err = p.readAll(buf) - value = int32(binary.BigEndian.Uint32(buf)) - return value, err -} - -func (p *TBinaryProtocol) ReadI64() (value int64, err error) { - buf := p.buffer[0:8] - err = p.readAll(buf) - value = int64(binary.BigEndian.Uint64(buf)) - return value, err -} - -func (p *TBinaryProtocol) ReadDouble() (value float64, err error) { - buf := p.buffer[0:8] - err = p.readAll(buf) - value = math.Float64frombits(binary.BigEndian.Uint64(buf)) - return value, err -} - -func (p *TBinaryProtocol) ReadString() (value string, err error) { - size, e := p.ReadI32() - if e != nil { - return "", e - } - if size < 0 { - err = invalidDataLength - return - } - - return p.readStringBody(size) -} - -func (p *TBinaryProtocol) ReadBinary() ([]byte, error) { - size, e := p.ReadI32() - if e != nil { - return nil, e - } - if size < 0 { - return nil, invalidDataLength - } - if uint64(size) > p.trans.RemainingBytes() { - return nil, invalidDataLength - } - - isize := int(size) - buf := make([]byte, isize) - _, err := io.ReadFull(p.trans, buf) - return buf, NewTProtocolException(err) -} - -func (p *TBinaryProtocol) Flush() (err error) { - return NewTProtocolException(p.trans.Flush()) -} - -func (p *TBinaryProtocol) Skip(fieldType TType) (err error) { - return SkipDefaultDepth(p, fieldType) -} - -func (p *TBinaryProtocol) Transport() TTransport { - return p.origTransport -} - -func (p *TBinaryProtocol) readAll(buf []byte) error { - _, err := io.ReadFull(p.reader, buf) - return NewTProtocolException(err) -} - -const readLimit = 32768 - -func (p *TBinaryProtocol) readStringBody(size int32) (value string, err error) { - if size < 0 { - return "", nil - } - if uint64(size) > p.trans.RemainingBytes() { - return "", invalidDataLength - } - - var ( - buf bytes.Buffer - e error - b []byte - ) - - switch { - case int(size) <= len(p.buffer): - b = p.buffer[:size] // avoids allocation for small reads - case int(size) < readLimit: - b = make([]byte, size) - default: - b = make([]byte, readLimit) - } - - for size > 0 { - _, e = io.ReadFull(p.trans, b) - buf.Write(b) - if e != nil { - break - } - size -= readLimit - if size < readLimit && size > 0 { - b = b[:size] - } - } - return buf.String(), NewTProtocolException(e) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go b/vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go deleted file mode 100644 index b9299f2fa13c..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go +++ /dev/null @@ -1,815 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "encoding/binary" - "fmt" - "io" - "math" -) - -const ( - COMPACT_PROTOCOL_ID = 0x082 - COMPACT_VERSION = 1 - COMPACT_VERSION_MASK = 0x1f - COMPACT_TYPE_MASK = 0x0E0 - COMPACT_TYPE_BITS = 0x07 - COMPACT_TYPE_SHIFT_AMOUNT = 5 -) - -type tCompactType byte - -const ( - COMPACT_BOOLEAN_TRUE = 0x01 - COMPACT_BOOLEAN_FALSE = 0x02 - COMPACT_BYTE = 0x03 - COMPACT_I16 = 0x04 - COMPACT_I32 = 0x05 - COMPACT_I64 = 0x06 - COMPACT_DOUBLE = 0x07 - COMPACT_BINARY = 0x08 - COMPACT_LIST = 0x09 - COMPACT_SET = 0x0A - COMPACT_MAP = 0x0B - COMPACT_STRUCT = 0x0C -) - -var ( - ttypeToCompactType map[TType]tCompactType -) - -func init() { - ttypeToCompactType = map[TType]tCompactType{ - STOP: STOP, - BOOL: COMPACT_BOOLEAN_TRUE, - BYTE: COMPACT_BYTE, - I16: COMPACT_I16, - I32: COMPACT_I32, - I64: COMPACT_I64, - DOUBLE: COMPACT_DOUBLE, - STRING: COMPACT_BINARY, - LIST: COMPACT_LIST, - SET: COMPACT_SET, - MAP: COMPACT_MAP, - STRUCT: COMPACT_STRUCT, - } -} - -type TCompactProtocolFactory struct{} - -func NewTCompactProtocolFactory() *TCompactProtocolFactory { - return &TCompactProtocolFactory{} -} - -func (p *TCompactProtocolFactory) GetProtocol(trans TTransport) TProtocol { - return NewTCompactProtocol(trans) -} - -type TCompactProtocol struct { - trans TRichTransport - origTransport TTransport - - // Used to keep track of the last field for the current and previous structs, - // so we can do the delta stuff. - lastField []int - lastFieldId int - - // If we encounter a boolean field begin, save the TField here so it can - // have the value incorporated. - booleanFieldName string - booleanFieldId int16 - booleanFieldPending bool - - // If we read a field header, and it's a boolean field, save the boolean - // value here so that readBool can use it. - boolValue bool - boolValueIsNotNull bool - buffer [64]byte -} - -// Create a TCompactProtocol given a TTransport -func NewTCompactProtocol(trans TTransport) *TCompactProtocol { - p := &TCompactProtocol{origTransport: trans, lastField: []int{}} - if et, ok := trans.(TRichTransport); ok { - p.trans = et - } else { - p.trans = NewTRichTransport(trans) - } - - return p - -} - -// -// Public Writing methods. -// - -// Write a message header to the wire. Compact Protocol messages contain the -// protocol version so we can migrate forwards in the future if need be. -func (p *TCompactProtocol) WriteMessageBegin(name string, typeId TMessageType, seqid int32) error { - err := p.writeByteDirect(COMPACT_PROTOCOL_ID) - if err != nil { - return NewTProtocolException(err) - } - err = p.writeByteDirect((COMPACT_VERSION & COMPACT_VERSION_MASK) | ((byte(typeId) << COMPACT_TYPE_SHIFT_AMOUNT) & COMPACT_TYPE_MASK)) - if err != nil { - return NewTProtocolException(err) - } - _, err = p.writeVarint32(seqid) - if err != nil { - return NewTProtocolException(err) - } - e := p.WriteString(name) - return e - -} - -func (p *TCompactProtocol) WriteMessageEnd() error { return nil } - -// Write a struct begin. This doesn't actually put anything on the wire. We -// use it as an opportunity to put special placeholder markers on the field -// stack so we can get the field id deltas correct. -func (p *TCompactProtocol) WriteStructBegin(name string) error { - p.lastField = append(p.lastField, p.lastFieldId) - p.lastFieldId = 0 - return nil -} - -// Write a struct end. This doesn't actually put anything on the wire. We use -// this as an opportunity to pop the last field from the current struct off -// of the field stack. -func (p *TCompactProtocol) WriteStructEnd() error { - p.lastFieldId = p.lastField[len(p.lastField)-1] - p.lastField = p.lastField[:len(p.lastField)-1] - return nil -} - -func (p *TCompactProtocol) WriteFieldBegin(name string, typeId TType, id int16) error { - if typeId == BOOL { - // we want to possibly include the value, so we'll wait. - p.booleanFieldName, p.booleanFieldId, p.booleanFieldPending = name, id, true - return nil - } - _, err := p.writeFieldBeginInternal(name, typeId, id, 0xFF) - return NewTProtocolException(err) -} - -// The workhorse of writeFieldBegin. It has the option of doing a -// 'type override' of the type header. This is used specifically in the -// boolean field case. -func (p *TCompactProtocol) writeFieldBeginInternal(name string, typeId TType, id int16, typeOverride byte) (int, error) { - // short lastField = lastField_.pop(); - - // if there's a type override, use that. - var typeToWrite byte - if typeOverride == 0xFF { - typeToWrite = byte(p.getCompactType(typeId)) - } else { - typeToWrite = typeOverride - } - // check if we can use delta encoding for the field id - fieldId := int(id) - written := 0 - if fieldId > p.lastFieldId && fieldId-p.lastFieldId <= 15 { - // write them together - err := p.writeByteDirect(byte((fieldId-p.lastFieldId)<<4) | typeToWrite) - if err != nil { - return 0, err - } - } else { - // write them separate - err := p.writeByteDirect(typeToWrite) - if err != nil { - return 0, err - } - err = p.WriteI16(id) - written = 1 + 2 - if err != nil { - return 0, err - } - } - - p.lastFieldId = fieldId - // p.lastField.Push(field.id); - return written, nil -} - -func (p *TCompactProtocol) WriteFieldEnd() error { return nil } - -func (p *TCompactProtocol) WriteFieldStop() error { - err := p.writeByteDirect(STOP) - return NewTProtocolException(err) -} - -func (p *TCompactProtocol) WriteMapBegin(keyType TType, valueType TType, size int) error { - if size == 0 { - err := p.writeByteDirect(0) - return NewTProtocolException(err) - } - _, err := p.writeVarint32(int32(size)) - if err != nil { - return NewTProtocolException(err) - } - err = p.writeByteDirect(byte(p.getCompactType(keyType))<<4 | byte(p.getCompactType(valueType))) - return NewTProtocolException(err) -} - -func (p *TCompactProtocol) WriteMapEnd() error { return nil } - -// Write a list header. -func (p *TCompactProtocol) WriteListBegin(elemType TType, size int) error { - _, err := p.writeCollectionBegin(elemType, size) - return NewTProtocolException(err) -} - -func (p *TCompactProtocol) WriteListEnd() error { return nil } - -// Write a set header. -func (p *TCompactProtocol) WriteSetBegin(elemType TType, size int) error { - _, err := p.writeCollectionBegin(elemType, size) - return NewTProtocolException(err) -} - -func (p *TCompactProtocol) WriteSetEnd() error { return nil } - -func (p *TCompactProtocol) WriteBool(value bool) error { - v := byte(COMPACT_BOOLEAN_FALSE) - if value { - v = byte(COMPACT_BOOLEAN_TRUE) - } - if p.booleanFieldPending { - // we haven't written the field header yet - _, err := p.writeFieldBeginInternal(p.booleanFieldName, BOOL, p.booleanFieldId, v) - p.booleanFieldPending = false - return NewTProtocolException(err) - } - // we're not part of a field, so just write the value. - err := p.writeByteDirect(v) - return NewTProtocolException(err) -} - -// Write a byte. Nothing to see here! -func (p *TCompactProtocol) WriteByte(value int8) error { - err := p.writeByteDirect(byte(value)) - return NewTProtocolException(err) -} - -// Write an I16 as a zigzag varint. -func (p *TCompactProtocol) WriteI16(value int16) error { - _, err := p.writeVarint32(p.int32ToZigzag(int32(value))) - return NewTProtocolException(err) -} - -// Write an i32 as a zigzag varint. -func (p *TCompactProtocol) WriteI32(value int32) error { - _, err := p.writeVarint32(p.int32ToZigzag(value)) - return NewTProtocolException(err) -} - -// Write an i64 as a zigzag varint. -func (p *TCompactProtocol) WriteI64(value int64) error { - _, err := p.writeVarint64(p.int64ToZigzag(value)) - return NewTProtocolException(err) -} - -// Write a double to the wire as 8 bytes. -func (p *TCompactProtocol) WriteDouble(value float64) error { - buf := p.buffer[0:8] - binary.LittleEndian.PutUint64(buf, math.Float64bits(value)) - _, err := p.trans.Write(buf) - return NewTProtocolException(err) -} - -// Write a string to the wire with a varint size preceding. -func (p *TCompactProtocol) WriteString(value string) error { - _, e := p.writeVarint32(int32(len(value))) - if e != nil { - return NewTProtocolException(e) - } - if len(value) > 0 { - } - _, e = p.trans.WriteString(value) - return e -} - -// Write a byte array, using a varint for the size. -func (p *TCompactProtocol) WriteBinary(bin []byte) error { - _, e := p.writeVarint32(int32(len(bin))) - if e != nil { - return NewTProtocolException(e) - } - if len(bin) > 0 { - _, e = p.trans.Write(bin) - return NewTProtocolException(e) - } - return nil -} - -// -// Reading methods. -// - -// Read a message header. -func (p *TCompactProtocol) ReadMessageBegin() (name string, typeId TMessageType, seqId int32, err error) { - - protocolId, err := p.readByteDirect() - if err != nil { - return - } - - if protocolId != COMPACT_PROTOCOL_ID { - e := fmt.Errorf("Expected protocol id %02x but got %02x", COMPACT_PROTOCOL_ID, protocolId) - return "", typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, e) - } - - versionAndType, err := p.readByteDirect() - if err != nil { - return - } - - version := versionAndType & COMPACT_VERSION_MASK - typeId = TMessageType((versionAndType >> COMPACT_TYPE_SHIFT_AMOUNT) & COMPACT_TYPE_BITS) - if version != COMPACT_VERSION { - e := fmt.Errorf("Expected version %02x but got %02x", COMPACT_VERSION, version) - err = NewTProtocolExceptionWithType(BAD_VERSION, e) - return - } - seqId, e := p.readVarint32() - if e != nil { - err = NewTProtocolException(e) - return - } - name, err = p.ReadString() - return -} - -func (p *TCompactProtocol) ReadMessageEnd() error { return nil } - -// Read a struct begin. There's nothing on the wire for this, but it is our -// opportunity to push a new struct begin marker onto the field stack. -func (p *TCompactProtocol) ReadStructBegin() (name string, err error) { - p.lastField = append(p.lastField, p.lastFieldId) - p.lastFieldId = 0 - return -} - -// Doesn't actually consume any wire data, just removes the last field for -// this struct from the field stack. -func (p *TCompactProtocol) ReadStructEnd() error { - // consume the last field we read off the wire. - p.lastFieldId = p.lastField[len(p.lastField)-1] - p.lastField = p.lastField[:len(p.lastField)-1] - return nil -} - -// Read a field header off the wire. -func (p *TCompactProtocol) ReadFieldBegin() (name string, typeId TType, id int16, err error) { - t, err := p.readByteDirect() - if err != nil { - return - } - - // if it's a stop, then we can return immediately, as the struct is over. - if (t & 0x0f) == STOP { - return "", STOP, 0, nil - } - - // mask off the 4 MSB of the type header. it could contain a field id delta. - modifier := int16((t & 0xf0) >> 4) - if modifier == 0 { - // not a delta. look ahead for the zigzag varint field id. - id, err = p.ReadI16() - if err != nil { - return - } - } else { - // has a delta. add the delta to the last read field id. - id = int16(p.lastFieldId) + modifier - } - typeId, e := p.getTType(tCompactType(t & 0x0f)) - if e != nil { - err = NewTProtocolException(e) - return - } - - // if this happens to be a boolean field, the value is encoded in the type - if p.isBoolType(t) { - // save the boolean value in a special instance variable. - p.boolValue = (byte(t)&0x0f == COMPACT_BOOLEAN_TRUE) - p.boolValueIsNotNull = true - } - - // push the new field onto the field stack so we can keep the deltas going. - p.lastFieldId = int(id) - return -} - -func (p *TCompactProtocol) ReadFieldEnd() error { return nil } - -// Read a map header off the wire. If the size is zero, skip reading the key -// and value type. This means that 0-length maps will yield TMaps without the -// "correct" types. -func (p *TCompactProtocol) ReadMapBegin() (keyType TType, valueType TType, size int, err error) { - size32, e := p.readVarint32() - if e != nil { - err = NewTProtocolException(e) - return - } - if size32 < 0 { - err = invalidDataLength - return - } - size = int(size32) - - keyAndValueType := byte(STOP) - if size != 0 { - keyAndValueType, err = p.readByteDirect() - if err != nil { - return - } - } - keyType, _ = p.getTType(tCompactType(keyAndValueType >> 4)) - valueType, _ = p.getTType(tCompactType(keyAndValueType & 0xf)) - return -} - -func (p *TCompactProtocol) ReadMapEnd() error { return nil } - -// Read a list header off the wire. If the list size is 0-14, the size will -// be packed into the element type header. If it's a longer list, the 4 MSB -// of the element type header will be 0xF, and a varint will follow with the -// true size. -func (p *TCompactProtocol) ReadListBegin() (elemType TType, size int, err error) { - size_and_type, err := p.readByteDirect() - if err != nil { - return - } - size = int((size_and_type >> 4) & 0x0f) - if size == 15 { - size2, e := p.readVarint32() - if e != nil { - err = NewTProtocolException(e) - return - } - if size2 < 0 { - err = invalidDataLength - return - } - size = int(size2) - } - elemType, e := p.getTType(tCompactType(size_and_type)) - if e != nil { - err = NewTProtocolException(e) - return - } - return -} - -func (p *TCompactProtocol) ReadListEnd() error { return nil } - -// Read a set header off the wire. If the set size is 0-14, the size will -// be packed into the element type header. If it's a longer set, the 4 MSB -// of the element type header will be 0xF, and a varint will follow with the -// true size. -func (p *TCompactProtocol) ReadSetBegin() (elemType TType, size int, err error) { - return p.ReadListBegin() -} - -func (p *TCompactProtocol) ReadSetEnd() error { return nil } - -// Read a boolean off the wire. If this is a boolean field, the value should -// already have been read during readFieldBegin, so we'll just consume the -// pre-stored value. Otherwise, read a byte. -func (p *TCompactProtocol) ReadBool() (value bool, err error) { - if p.boolValueIsNotNull { - p.boolValueIsNotNull = false - return p.boolValue, nil - } - v, err := p.readByteDirect() - return v == COMPACT_BOOLEAN_TRUE, err -} - -// Read a single byte off the wire. Nothing interesting here. -func (p *TCompactProtocol) ReadByte() (int8, error) { - v, err := p.readByteDirect() - if err != nil { - return 0, NewTProtocolException(err) - } - return int8(v), err -} - -// Read an i16 from the wire as a zigzag varint. -func (p *TCompactProtocol) ReadI16() (value int16, err error) { - v, err := p.ReadI32() - return int16(v), err -} - -// Read an i32 from the wire as a zigzag varint. -func (p *TCompactProtocol) ReadI32() (value int32, err error) { - v, e := p.readVarint32() - if e != nil { - return 0, NewTProtocolException(e) - } - value = p.zigzagToInt32(v) - return value, nil -} - -// Read an i64 from the wire as a zigzag varint. -func (p *TCompactProtocol) ReadI64() (value int64, err error) { - v, e := p.readVarint64() - if e != nil { - return 0, NewTProtocolException(e) - } - value = p.zigzagToInt64(v) - return value, nil -} - -// No magic here - just read a double off the wire. -func (p *TCompactProtocol) ReadDouble() (value float64, err error) { - longBits := p.buffer[0:8] - _, e := io.ReadFull(p.trans, longBits) - if e != nil { - return 0.0, NewTProtocolException(e) - } - return math.Float64frombits(p.bytesToUint64(longBits)), nil -} - -// Reads a []byte (via readBinary), and then UTF-8 decodes it. -func (p *TCompactProtocol) ReadString() (value string, err error) { - length, e := p.readVarint32() - if e != nil { - return "", NewTProtocolException(e) - } - if length < 0 { - return "", invalidDataLength - } - if uint64(length) > p.trans.RemainingBytes() { - return "", invalidDataLength - } - - if length == 0 { - return "", nil - } - var buf []byte - if length <= int32(len(p.buffer)) { - buf = p.buffer[0:length] - } else { - buf = make([]byte, length) - } - _, e = io.ReadFull(p.trans, buf) - return string(buf), NewTProtocolException(e) -} - -// Read a []byte from the wire. -func (p *TCompactProtocol) ReadBinary() (value []byte, err error) { - length, e := p.readVarint32() - if e != nil { - return nil, NewTProtocolException(e) - } - if length == 0 { - return []byte{}, nil - } - if length < 0 { - return nil, invalidDataLength - } - if uint64(length) > p.trans.RemainingBytes() { - return nil, invalidDataLength - } - - buf := make([]byte, length) - _, e = io.ReadFull(p.trans, buf) - return buf, NewTProtocolException(e) -} - -func (p *TCompactProtocol) Flush() (err error) { - return NewTProtocolException(p.trans.Flush()) -} - -func (p *TCompactProtocol) Skip(fieldType TType) (err error) { - return SkipDefaultDepth(p, fieldType) -} - -func (p *TCompactProtocol) Transport() TTransport { - return p.origTransport -} - -// -// Internal writing methods -// - -// Abstract method for writing the start of lists and sets. List and sets on -// the wire differ only by the type indicator. -func (p *TCompactProtocol) writeCollectionBegin(elemType TType, size int) (int, error) { - if size <= 14 { - return 1, p.writeByteDirect(byte(int32(size<<4) | int32(p.getCompactType(elemType)))) - } - err := p.writeByteDirect(0xf0 | byte(p.getCompactType(elemType))) - if err != nil { - return 0, err - } - m, err := p.writeVarint32(int32(size)) - return 1 + m, err -} - -// Write an i32 as a varint. Results in 1-5 bytes on the wire. -// TODO(pomack): make a permanent buffer like writeVarint64? -func (p *TCompactProtocol) writeVarint32(n int32) (int, error) { - i32buf := p.buffer[0:5] - idx := 0 - for { - if (n & ^0x7F) == 0 { - i32buf[idx] = byte(n) - idx++ - // p.writeByteDirect(byte(n)); - break - // return; - } else { - i32buf[idx] = byte((n & 0x7F) | 0x80) - idx++ - // p.writeByteDirect(byte(((n & 0x7F) | 0x80))); - u := uint32(n) - n = int32(u >> 7) - } - } - return p.trans.Write(i32buf[0:idx]) -} - -// Write an i64 as a varint. Results in 1-10 bytes on the wire. -func (p *TCompactProtocol) writeVarint64(n int64) (int, error) { - varint64out := p.buffer[0:10] - idx := 0 - for { - if (n & ^0x7F) == 0 { - varint64out[idx] = byte(n) - idx++ - break - } else { - varint64out[idx] = byte((n & 0x7F) | 0x80) - idx++ - u := uint64(n) - n = int64(u >> 7) - } - } - return p.trans.Write(varint64out[0:idx]) -} - -// Convert l into a zigzag long. This allows negative numbers to be -// represented compactly as a varint. -func (p *TCompactProtocol) int64ToZigzag(l int64) int64 { - return (l << 1) ^ (l >> 63) -} - -// Convert l into a zigzag long. This allows negative numbers to be -// represented compactly as a varint. -func (p *TCompactProtocol) int32ToZigzag(n int32) int32 { - return (n << 1) ^ (n >> 31) -} - -func (p *TCompactProtocol) fixedUint64ToBytes(n uint64, buf []byte) { - binary.LittleEndian.PutUint64(buf, n) -} - -func (p *TCompactProtocol) fixedInt64ToBytes(n int64, buf []byte) { - binary.LittleEndian.PutUint64(buf, uint64(n)) -} - -// Writes a byte without any possibility of all that field header nonsense. -// Used internally by other writing methods that know they need to write a byte. -func (p *TCompactProtocol) writeByteDirect(b byte) error { - return p.trans.WriteByte(b) -} - -// Writes a byte without any possibility of all that field header nonsense. -func (p *TCompactProtocol) writeIntAsByteDirect(n int) (int, error) { - return 1, p.writeByteDirect(byte(n)) -} - -// -// Internal reading methods -// - -// Read an i32 from the wire as a varint. The MSB of each byte is set -// if there is another byte to follow. This can read up to 5 bytes. -func (p *TCompactProtocol) readVarint32() (int32, error) { - // if the wire contains the right stuff, this will just truncate the i64 we - // read and get us the right sign. - v, err := p.readVarint64() - return int32(v), err -} - -// Read an i64 from the wire as a proper varint. The MSB of each byte is set -// if there is another byte to follow. This can read up to 10 bytes. -func (p *TCompactProtocol) readVarint64() (int64, error) { - shift := uint(0) - result := int64(0) - for { - b, err := p.readByteDirect() - if err != nil { - return 0, err - } - result |= int64(b&0x7f) << shift - if (b & 0x80) != 0x80 { - break - } - shift += 7 - } - return result, nil -} - -// Read a byte, unlike ReadByte that reads Thrift-byte that is i8. -func (p *TCompactProtocol) readByteDirect() (byte, error) { - return p.trans.ReadByte() -} - -// -// encoding helpers -// - -// Convert from zigzag int to int. -func (p *TCompactProtocol) zigzagToInt32(n int32) int32 { - u := uint32(n) - return int32(u>>1) ^ -(n & 1) -} - -// Convert from zigzag long to long. -func (p *TCompactProtocol) zigzagToInt64(n int64) int64 { - u := uint64(n) - return int64(u>>1) ^ -(n & 1) -} - -// Note that it's important that the mask bytes are long literals, -// otherwise they'll default to ints, and when you shift an int left 56 bits, -// you just get a messed up int. -func (p *TCompactProtocol) bytesToInt64(b []byte) int64 { - return int64(binary.LittleEndian.Uint64(b)) -} - -// Note that it's important that the mask bytes are long literals, -// otherwise they'll default to ints, and when you shift an int left 56 bits, -// you just get a messed up int. -func (p *TCompactProtocol) bytesToUint64(b []byte) uint64 { - return binary.LittleEndian.Uint64(b) -} - -// -// type testing and converting -// - -func (p *TCompactProtocol) isBoolType(b byte) bool { - return (b&0x0f) == COMPACT_BOOLEAN_TRUE || (b&0x0f) == COMPACT_BOOLEAN_FALSE -} - -// Given a tCompactType constant, convert it to its corresponding -// TType value. -func (p *TCompactProtocol) getTType(t tCompactType) (TType, error) { - switch byte(t) & 0x0f { - case STOP: - return STOP, nil - case COMPACT_BOOLEAN_FALSE, COMPACT_BOOLEAN_TRUE: - return BOOL, nil - case COMPACT_BYTE: - return BYTE, nil - case COMPACT_I16: - return I16, nil - case COMPACT_I32: - return I32, nil - case COMPACT_I64: - return I64, nil - case COMPACT_DOUBLE: - return DOUBLE, nil - case COMPACT_BINARY: - return STRING, nil - case COMPACT_LIST: - return LIST, nil - case COMPACT_SET: - return SET, nil - case COMPACT_MAP: - return MAP, nil - case COMPACT_STRUCT: - return STRUCT, nil - } - return STOP, TException(fmt.Errorf("don't know what type: %d", t&0x0f)) -} - -// Given a TType value, find the appropriate TCompactProtocol.Types constant. -func (p *TCompactProtocol) getCompactType(t TType) tCompactType { - return ttypeToCompactType[t] -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/exception.go b/vendor/github.com/uber/jaeger-client-go/thrift/exception.go deleted file mode 100644 index ea8d6f66114c..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/exception.go +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "errors" -) - -// Generic Thrift exception -type TException interface { - error -} - -// Prepends additional information to an error without losing the Thrift exception interface -func PrependError(prepend string, err error) error { - if t, ok := err.(TTransportException); ok { - return NewTTransportException(t.TypeId(), prepend+t.Error()) - } - if t, ok := err.(TProtocolException); ok { - return NewTProtocolExceptionWithType(t.TypeId(), errors.New(prepend+err.Error())) - } - if t, ok := err.(TApplicationException); ok { - return NewTApplicationException(t.TypeId(), prepend+t.Error()) - } - - return errors.New(prepend + err.Error()) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go b/vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go deleted file mode 100644 index b62fd56f0634..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "bytes" -) - -// Memory buffer-based implementation of the TTransport interface. -type TMemoryBuffer struct { - *bytes.Buffer - size int -} - -type TMemoryBufferTransportFactory struct { - size int -} - -func (p *TMemoryBufferTransportFactory) GetTransport(trans TTransport) TTransport { - if trans != nil { - t, ok := trans.(*TMemoryBuffer) - if ok && t.size > 0 { - return NewTMemoryBufferLen(t.size) - } - } - return NewTMemoryBufferLen(p.size) -} - -func NewTMemoryBufferTransportFactory(size int) *TMemoryBufferTransportFactory { - return &TMemoryBufferTransportFactory{size: size} -} - -func NewTMemoryBuffer() *TMemoryBuffer { - return &TMemoryBuffer{Buffer: &bytes.Buffer{}, size: 0} -} - -func NewTMemoryBufferLen(size int) *TMemoryBuffer { - buf := make([]byte, 0, size) - return &TMemoryBuffer{Buffer: bytes.NewBuffer(buf), size: size} -} - -func (p *TMemoryBuffer) IsOpen() bool { - return true -} - -func (p *TMemoryBuffer) Open() error { - return nil -} - -func (p *TMemoryBuffer) Close() error { - p.Buffer.Reset() - return nil -} - -// Flushing a memory buffer is a no-op -func (p *TMemoryBuffer) Flush() error { - return nil -} - -func (p *TMemoryBuffer) RemainingBytes() (num_bytes uint64) { - return uint64(p.Buffer.Len()) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go b/vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go deleted file mode 100644 index 25ab2e98a256..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -// Message type constants in the Thrift protocol. -type TMessageType int32 - -const ( - INVALID_TMESSAGE_TYPE TMessageType = 0 - CALL TMessageType = 1 - REPLY TMessageType = 2 - EXCEPTION TMessageType = 3 - ONEWAY TMessageType = 4 -) diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/numeric.go b/vendor/github.com/uber/jaeger-client-go/thrift/numeric.go deleted file mode 100644 index aa8daa9b54f9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/numeric.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "math" - "strconv" -) - -type Numeric interface { - Int64() int64 - Int32() int32 - Int16() int16 - Byte() byte - Int() int - Float64() float64 - Float32() float32 - String() string - isNull() bool -} - -type numeric struct { - iValue int64 - dValue float64 - sValue string - isNil bool -} - -var ( - INFINITY Numeric - NEGATIVE_INFINITY Numeric - NAN Numeric - ZERO Numeric - NUMERIC_NULL Numeric -) - -func NewNumericFromDouble(dValue float64) Numeric { - if math.IsInf(dValue, 1) { - return INFINITY - } - if math.IsInf(dValue, -1) { - return NEGATIVE_INFINITY - } - if math.IsNaN(dValue) { - return NAN - } - iValue := int64(dValue) - sValue := strconv.FormatFloat(dValue, 'g', 10, 64) - isNil := false - return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} -} - -func NewNumericFromI64(iValue int64) Numeric { - dValue := float64(iValue) - sValue := string(iValue) - isNil := false - return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} -} - -func NewNumericFromI32(iValue int32) Numeric { - dValue := float64(iValue) - sValue := string(iValue) - isNil := false - return &numeric{iValue: int64(iValue), dValue: dValue, sValue: sValue, isNil: isNil} -} - -func NewNumericFromString(sValue string) Numeric { - if sValue == INFINITY.String() { - return INFINITY - } - if sValue == NEGATIVE_INFINITY.String() { - return NEGATIVE_INFINITY - } - if sValue == NAN.String() { - return NAN - } - iValue, _ := strconv.ParseInt(sValue, 10, 64) - dValue, _ := strconv.ParseFloat(sValue, 64) - isNil := len(sValue) == 0 - return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} -} - -func NewNumericFromJSONString(sValue string, isNull bool) Numeric { - if isNull { - return NewNullNumeric() - } - if sValue == JSON_INFINITY { - return INFINITY - } - if sValue == JSON_NEGATIVE_INFINITY { - return NEGATIVE_INFINITY - } - if sValue == JSON_NAN { - return NAN - } - iValue, _ := strconv.ParseInt(sValue, 10, 64) - dValue, _ := strconv.ParseFloat(sValue, 64) - return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNull} -} - -func NewNullNumeric() Numeric { - return &numeric{iValue: 0, dValue: 0.0, sValue: "", isNil: true} -} - -func (p *numeric) Int64() int64 { - return p.iValue -} - -func (p *numeric) Int32() int32 { - return int32(p.iValue) -} - -func (p *numeric) Int16() int16 { - return int16(p.iValue) -} - -func (p *numeric) Byte() byte { - return byte(p.iValue) -} - -func (p *numeric) Int() int { - return int(p.iValue) -} - -func (p *numeric) Float64() float64 { - return p.dValue -} - -func (p *numeric) Float32() float32 { - return float32(p.dValue) -} - -func (p *numeric) String() string { - return p.sValue -} - -func (p *numeric) isNull() bool { - return p.isNil -} - -func init() { - INFINITY = &numeric{iValue: 0, dValue: math.Inf(1), sValue: "Infinity", isNil: false} - NEGATIVE_INFINITY = &numeric{iValue: 0, dValue: math.Inf(-1), sValue: "-Infinity", isNil: false} - NAN = &numeric{iValue: 0, dValue: math.NaN(), sValue: "NaN", isNil: false} - ZERO = &numeric{iValue: 0, dValue: 0, sValue: "0", isNil: false} - NUMERIC_NULL = &numeric{iValue: 0, dValue: 0, sValue: "0", isNil: true} -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/processor.go b/vendor/github.com/uber/jaeger-client-go/thrift/processor.go deleted file mode 100644 index ca0d3faf20ee..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/processor.go +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -// A processor is a generic object which operates upon an input stream and -// writes to some output stream. -type TProcessor interface { - Process(in, out TProtocol) (bool, TException) -} - -type TProcessorFunction interface { - Process(seqId int32, in, out TProtocol) (bool, TException) -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/protocol.go b/vendor/github.com/uber/jaeger-client-go/thrift/protocol.go deleted file mode 100644 index 45fa202e741c..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/protocol.go +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "errors" -) - -const ( - VERSION_MASK = 0xffff0000 - VERSION_1 = 0x80010000 -) - -type TProtocol interface { - WriteMessageBegin(name string, typeId TMessageType, seqid int32) error - WriteMessageEnd() error - WriteStructBegin(name string) error - WriteStructEnd() error - WriteFieldBegin(name string, typeId TType, id int16) error - WriteFieldEnd() error - WriteFieldStop() error - WriteMapBegin(keyType TType, valueType TType, size int) error - WriteMapEnd() error - WriteListBegin(elemType TType, size int) error - WriteListEnd() error - WriteSetBegin(elemType TType, size int) error - WriteSetEnd() error - WriteBool(value bool) error - WriteByte(value int8) error - WriteI16(value int16) error - WriteI32(value int32) error - WriteI64(value int64) error - WriteDouble(value float64) error - WriteString(value string) error - WriteBinary(value []byte) error - - ReadMessageBegin() (name string, typeId TMessageType, seqid int32, err error) - ReadMessageEnd() error - ReadStructBegin() (name string, err error) - ReadStructEnd() error - ReadFieldBegin() (name string, typeId TType, id int16, err error) - ReadFieldEnd() error - ReadMapBegin() (keyType TType, valueType TType, size int, err error) - ReadMapEnd() error - ReadListBegin() (elemType TType, size int, err error) - ReadListEnd() error - ReadSetBegin() (elemType TType, size int, err error) - ReadSetEnd() error - ReadBool() (value bool, err error) - ReadByte() (value int8, err error) - ReadI16() (value int16, err error) - ReadI32() (value int32, err error) - ReadI64() (value int64, err error) - ReadDouble() (value float64, err error) - ReadString() (value string, err error) - ReadBinary() (value []byte, err error) - - Skip(fieldType TType) (err error) - Flush() (err error) - - Transport() TTransport -} - -// The maximum recursive depth the skip() function will traverse -const DEFAULT_RECURSION_DEPTH = 64 - -// Skips over the next data element from the provided input TProtocol object. -func SkipDefaultDepth(prot TProtocol, typeId TType) (err error) { - return Skip(prot, typeId, DEFAULT_RECURSION_DEPTH) -} - -// Skips over the next data element from the provided input TProtocol object. -func Skip(self TProtocol, fieldType TType, maxDepth int) (err error) { - - if maxDepth <= 0 { - return NewTProtocolExceptionWithType( DEPTH_LIMIT, errors.New("Depth limit exceeded")) - } - - switch fieldType { - case STOP: - return - case BOOL: - _, err = self.ReadBool() - return - case BYTE: - _, err = self.ReadByte() - return - case I16: - _, err = self.ReadI16() - return - case I32: - _, err = self.ReadI32() - return - case I64: - _, err = self.ReadI64() - return - case DOUBLE: - _, err = self.ReadDouble() - return - case STRING: - _, err = self.ReadString() - return - case STRUCT: - if _, err = self.ReadStructBegin(); err != nil { - return err - } - for { - _, typeId, _, _ := self.ReadFieldBegin() - if typeId == STOP { - break - } - err := Skip(self, typeId, maxDepth-1) - if err != nil { - return err - } - self.ReadFieldEnd() - } - return self.ReadStructEnd() - case MAP: - keyType, valueType, size, err := self.ReadMapBegin() - if err != nil { - return err - } - for i := 0; i < size; i++ { - err := Skip(self, keyType, maxDepth-1) - if err != nil { - return err - } - self.Skip(valueType) - } - return self.ReadMapEnd() - case SET: - elemType, size, err := self.ReadSetBegin() - if err != nil { - return err - } - for i := 0; i < size; i++ { - err := Skip(self, elemType, maxDepth-1) - if err != nil { - return err - } - } - return self.ReadSetEnd() - case LIST: - elemType, size, err := self.ReadListBegin() - if err != nil { - return err - } - for i := 0; i < size; i++ { - err := Skip(self, elemType, maxDepth-1) - if err != nil { - return err - } - } - return self.ReadListEnd() - } - return nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go b/vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go deleted file mode 100644 index 6e357ee890df..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "encoding/base64" -) - -// Thrift Protocol exception -type TProtocolException interface { - TException - TypeId() int -} - -const ( - UNKNOWN_PROTOCOL_EXCEPTION = 0 - INVALID_DATA = 1 - NEGATIVE_SIZE = 2 - SIZE_LIMIT = 3 - BAD_VERSION = 4 - NOT_IMPLEMENTED = 5 - DEPTH_LIMIT = 6 -) - -type tProtocolException struct { - typeId int - message string -} - -func (p *tProtocolException) TypeId() int { - return p.typeId -} - -func (p *tProtocolException) String() string { - return p.message -} - -func (p *tProtocolException) Error() string { - return p.message -} - -func NewTProtocolException(err error) TProtocolException { - if err == nil { - return nil - } - if e,ok := err.(TProtocolException); ok { - return e - } - if _, ok := err.(base64.CorruptInputError); ok { - return &tProtocolException{INVALID_DATA, err.Error()} - } - return &tProtocolException{UNKNOWN_PROTOCOL_EXCEPTION, err.Error()} -} - -func NewTProtocolExceptionWithType(errType int, err error) TProtocolException { - if err == nil { - return nil - } - return &tProtocolException{errType, err.Error()} -} - diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go b/vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go deleted file mode 100644 index c40f796d886a..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -// Factory interface for constructing protocol instances. -type TProtocolFactory interface { - GetProtocol(trans TTransport) TProtocol -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go b/vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go deleted file mode 100644 index 8e296a99b5f9..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import "io" - -type RichTransport struct { - TTransport -} - -// Wraps Transport to provide TRichTransport interface -func NewTRichTransport(trans TTransport) *RichTransport { - return &RichTransport{trans} -} - -func (r *RichTransport) ReadByte() (c byte, err error) { - return readByte(r.TTransport) -} - -func (r *RichTransport) WriteByte(c byte) error { - return writeByte(r.TTransport, c) -} - -func (r *RichTransport) WriteString(s string) (n int, err error) { - return r.Write([]byte(s)) -} - -func (r *RichTransport) RemainingBytes() (num_bytes uint64) { - return r.TTransport.RemainingBytes() -} - -func readByte(r io.Reader) (c byte, err error) { - v := [1]byte{0} - n, err := r.Read(v[0:1]) - if n > 0 && (err == nil || err == io.EOF) { - return v[0], nil - } - if n > 0 && err != nil { - return v[0], err - } - if err != nil { - return 0, err - } - return v[0], nil -} - -func writeByte(w io.Writer, c byte) error { - v := [1]byte{c} - _, err := w.Write(v[0:1]) - return err -} - diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/serializer.go b/vendor/github.com/uber/jaeger-client-go/thrift/serializer.go deleted file mode 100644 index 771222999091..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/serializer.go +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -type TSerializer struct { - Transport *TMemoryBuffer - Protocol TProtocol -} - -type TStruct interface { - Write(p TProtocol) error - Read(p TProtocol) error -} - -func NewTSerializer() *TSerializer { - transport := NewTMemoryBufferLen(1024) - protocol := NewTBinaryProtocolFactoryDefault().GetProtocol(transport) - - return &TSerializer{ - transport, - protocol} -} - -func (t *TSerializer) WriteString(msg TStruct) (s string, err error) { - t.Transport.Reset() - - if err = msg.Write(t.Protocol); err != nil { - return - } - - if err = t.Protocol.Flush(); err != nil { - return - } - if err = t.Transport.Flush(); err != nil { - return - } - - return t.Transport.String(), nil -} - -func (t *TSerializer) Write(msg TStruct) (b []byte, err error) { - t.Transport.Reset() - - if err = msg.Write(t.Protocol); err != nil { - return - } - - if err = t.Protocol.Flush(); err != nil { - return - } - - if err = t.Transport.Flush(); err != nil { - return - } - - b = append(b, t.Transport.Bytes()...) - return -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go b/vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go deleted file mode 100644 index 412a482d055a..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go +++ /dev/null @@ -1,1337 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "bufio" - "bytes" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "math" - "strconv" -) - -type _ParseContext int - -const ( - _CONTEXT_IN_TOPLEVEL _ParseContext = 1 - _CONTEXT_IN_LIST_FIRST _ParseContext = 2 - _CONTEXT_IN_LIST _ParseContext = 3 - _CONTEXT_IN_OBJECT_FIRST _ParseContext = 4 - _CONTEXT_IN_OBJECT_NEXT_KEY _ParseContext = 5 - _CONTEXT_IN_OBJECT_NEXT_VALUE _ParseContext = 6 -) - -func (p _ParseContext) String() string { - switch p { - case _CONTEXT_IN_TOPLEVEL: - return "TOPLEVEL" - case _CONTEXT_IN_LIST_FIRST: - return "LIST-FIRST" - case _CONTEXT_IN_LIST: - return "LIST" - case _CONTEXT_IN_OBJECT_FIRST: - return "OBJECT-FIRST" - case _CONTEXT_IN_OBJECT_NEXT_KEY: - return "OBJECT-NEXT-KEY" - case _CONTEXT_IN_OBJECT_NEXT_VALUE: - return "OBJECT-NEXT-VALUE" - } - return "UNKNOWN-PARSE-CONTEXT" -} - -// JSON protocol implementation for thrift. -// -// This protocol produces/consumes a simple output format -// suitable for parsing by scripting languages. It should not be -// confused with the full-featured TJSONProtocol. -// -type TSimpleJSONProtocol struct { - trans TTransport - - parseContextStack []int - dumpContext []int - - writer *bufio.Writer - reader *bufio.Reader -} - -// Constructor -func NewTSimpleJSONProtocol(t TTransport) *TSimpleJSONProtocol { - v := &TSimpleJSONProtocol{trans: t, - writer: bufio.NewWriter(t), - reader: bufio.NewReader(t), - } - v.parseContextStack = append(v.parseContextStack, int(_CONTEXT_IN_TOPLEVEL)) - v.dumpContext = append(v.dumpContext, int(_CONTEXT_IN_TOPLEVEL)) - return v -} - -// Factory -type TSimpleJSONProtocolFactory struct{} - -func (p *TSimpleJSONProtocolFactory) GetProtocol(trans TTransport) TProtocol { - return NewTSimpleJSONProtocol(trans) -} - -func NewTSimpleJSONProtocolFactory() *TSimpleJSONProtocolFactory { - return &TSimpleJSONProtocolFactory{} -} - -var ( - JSON_COMMA []byte - JSON_COLON []byte - JSON_LBRACE []byte - JSON_RBRACE []byte - JSON_LBRACKET []byte - JSON_RBRACKET []byte - JSON_QUOTE byte - JSON_QUOTE_BYTES []byte - JSON_NULL []byte - JSON_TRUE []byte - JSON_FALSE []byte - JSON_INFINITY string - JSON_NEGATIVE_INFINITY string - JSON_NAN string - JSON_INFINITY_BYTES []byte - JSON_NEGATIVE_INFINITY_BYTES []byte - JSON_NAN_BYTES []byte - json_nonbase_map_elem_bytes []byte -) - -func init() { - JSON_COMMA = []byte{','} - JSON_COLON = []byte{':'} - JSON_LBRACE = []byte{'{'} - JSON_RBRACE = []byte{'}'} - JSON_LBRACKET = []byte{'['} - JSON_RBRACKET = []byte{']'} - JSON_QUOTE = '"' - JSON_QUOTE_BYTES = []byte{'"'} - JSON_NULL = []byte{'n', 'u', 'l', 'l'} - JSON_TRUE = []byte{'t', 'r', 'u', 'e'} - JSON_FALSE = []byte{'f', 'a', 'l', 's', 'e'} - JSON_INFINITY = "Infinity" - JSON_NEGATIVE_INFINITY = "-Infinity" - JSON_NAN = "NaN" - JSON_INFINITY_BYTES = []byte{'I', 'n', 'f', 'i', 'n', 'i', 't', 'y'} - JSON_NEGATIVE_INFINITY_BYTES = []byte{'-', 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y'} - JSON_NAN_BYTES = []byte{'N', 'a', 'N'} - json_nonbase_map_elem_bytes = []byte{']', ',', '['} -} - -func jsonQuote(s string) string { - b, _ := json.Marshal(s) - s1 := string(b) - return s1 -} - -func jsonUnquote(s string) (string, bool) { - s1 := new(string) - err := json.Unmarshal([]byte(s), s1) - return *s1, err == nil -} - -func mismatch(expected, actual string) error { - return fmt.Errorf("Expected '%s' but found '%s' while parsing JSON.", expected, actual) -} - -func (p *TSimpleJSONProtocol) WriteMessageBegin(name string, typeId TMessageType, seqId int32) error { - p.resetContextStack() // THRIFT-3735 - if e := p.OutputListBegin(); e != nil { - return e - } - if e := p.WriteString(name); e != nil { - return e - } - if e := p.WriteByte(int8(typeId)); e != nil { - return e - } - if e := p.WriteI32(seqId); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) WriteMessageEnd() error { - return p.OutputListEnd() -} - -func (p *TSimpleJSONProtocol) WriteStructBegin(name string) error { - if e := p.OutputObjectBegin(); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) WriteStructEnd() error { - return p.OutputObjectEnd() -} - -func (p *TSimpleJSONProtocol) WriteFieldBegin(name string, typeId TType, id int16) error { - if e := p.WriteString(name); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) WriteFieldEnd() error { - //return p.OutputListEnd() - return nil -} - -func (p *TSimpleJSONProtocol) WriteFieldStop() error { return nil } - -func (p *TSimpleJSONProtocol) WriteMapBegin(keyType TType, valueType TType, size int) error { - if e := p.OutputListBegin(); e != nil { - return e - } - if e := p.WriteByte(int8(keyType)); e != nil { - return e - } - if e := p.WriteByte(int8(valueType)); e != nil { - return e - } - return p.WriteI32(int32(size)) -} - -func (p *TSimpleJSONProtocol) WriteMapEnd() error { - return p.OutputListEnd() -} - -func (p *TSimpleJSONProtocol) WriteListBegin(elemType TType, size int) error { - return p.OutputElemListBegin(elemType, size) -} - -func (p *TSimpleJSONProtocol) WriteListEnd() error { - return p.OutputListEnd() -} - -func (p *TSimpleJSONProtocol) WriteSetBegin(elemType TType, size int) error { - return p.OutputElemListBegin(elemType, size) -} - -func (p *TSimpleJSONProtocol) WriteSetEnd() error { - return p.OutputListEnd() -} - -func (p *TSimpleJSONProtocol) WriteBool(b bool) error { - return p.OutputBool(b) -} - -func (p *TSimpleJSONProtocol) WriteByte(b int8) error { - return p.WriteI32(int32(b)) -} - -func (p *TSimpleJSONProtocol) WriteI16(v int16) error { - return p.WriteI32(int32(v)) -} - -func (p *TSimpleJSONProtocol) WriteI32(v int32) error { - return p.OutputI64(int64(v)) -} - -func (p *TSimpleJSONProtocol) WriteI64(v int64) error { - return p.OutputI64(int64(v)) -} - -func (p *TSimpleJSONProtocol) WriteDouble(v float64) error { - return p.OutputF64(v) -} - -func (p *TSimpleJSONProtocol) WriteString(v string) error { - return p.OutputString(v) -} - -func (p *TSimpleJSONProtocol) WriteBinary(v []byte) error { - // JSON library only takes in a string, - // not an arbitrary byte array, to ensure bytes are transmitted - // efficiently we must convert this into a valid JSON string - // therefore we use base64 encoding to avoid excessive escaping/quoting - if e := p.OutputPreValue(); e != nil { - return e - } - if _, e := p.write(JSON_QUOTE_BYTES); e != nil { - return NewTProtocolException(e) - } - writer := base64.NewEncoder(base64.StdEncoding, p.writer) - if _, e := writer.Write(v); e != nil { - p.writer.Reset(p.trans) // THRIFT-3735 - return NewTProtocolException(e) - } - if e := writer.Close(); e != nil { - return NewTProtocolException(e) - } - if _, e := p.write(JSON_QUOTE_BYTES); e != nil { - return NewTProtocolException(e) - } - return p.OutputPostValue() -} - -// Reading methods. -func (p *TSimpleJSONProtocol) ReadMessageBegin() (name string, typeId TMessageType, seqId int32, err error) { - p.resetContextStack() // THRIFT-3735 - if isNull, err := p.ParseListBegin(); isNull || err != nil { - return name, typeId, seqId, err - } - if name, err = p.ReadString(); err != nil { - return name, typeId, seqId, err - } - bTypeId, err := p.ReadByte() - typeId = TMessageType(bTypeId) - if err != nil { - return name, typeId, seqId, err - } - if seqId, err = p.ReadI32(); err != nil { - return name, typeId, seqId, err - } - return name, typeId, seqId, nil -} - -func (p *TSimpleJSONProtocol) ReadMessageEnd() error { - return p.ParseListEnd() -} - -func (p *TSimpleJSONProtocol) ReadStructBegin() (name string, err error) { - _, err = p.ParseObjectStart() - return "", err -} - -func (p *TSimpleJSONProtocol) ReadStructEnd() error { - return p.ParseObjectEnd() -} - -func (p *TSimpleJSONProtocol) ReadFieldBegin() (string, TType, int16, error) { - if err := p.ParsePreValue(); err != nil { - return "", STOP, 0, err - } - b, _ := p.reader.Peek(1) - if len(b) > 0 { - switch b[0] { - case JSON_RBRACE[0]: - return "", STOP, 0, nil - case JSON_QUOTE: - p.reader.ReadByte() - name, err := p.ParseStringBody() - // simplejson is not meant to be read back into thrift - // - see http://wiki.apache.org/thrift/ThriftUsageJava - // - use JSON instead - if err != nil { - return name, STOP, 0, err - } - return name, STOP, -1, p.ParsePostValue() - /* - if err = p.ParsePostValue(); err != nil { - return name, STOP, 0, err - } - if isNull, err := p.ParseListBegin(); isNull || err != nil { - return name, STOP, 0, err - } - bType, err := p.ReadByte() - thetype := TType(bType) - if err != nil { - return name, thetype, 0, err - } - id, err := p.ReadI16() - return name, thetype, id, err - */ - } - e := fmt.Errorf("Expected \"}\" or '\"', but found: '%s'", string(b)) - return "", STOP, 0, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return "", STOP, 0, NewTProtocolException(io.EOF) -} - -func (p *TSimpleJSONProtocol) ReadFieldEnd() error { - return nil - //return p.ParseListEnd() -} - -func (p *TSimpleJSONProtocol) ReadMapBegin() (keyType TType, valueType TType, size int, e error) { - if isNull, e := p.ParseListBegin(); isNull || e != nil { - return VOID, VOID, 0, e - } - - // read keyType - bKeyType, e := p.ReadByte() - keyType = TType(bKeyType) - if e != nil { - return keyType, valueType, size, e - } - - // read valueType - bValueType, e := p.ReadByte() - valueType = TType(bValueType) - if e != nil { - return keyType, valueType, size, e - } - - // read size - iSize, err := p.ReadI64() - size = int(iSize) - return keyType, valueType, size, err -} - -func (p *TSimpleJSONProtocol) ReadMapEnd() error { - return p.ParseListEnd() -} - -func (p *TSimpleJSONProtocol) ReadListBegin() (elemType TType, size int, e error) { - return p.ParseElemListBegin() -} - -func (p *TSimpleJSONProtocol) ReadListEnd() error { - return p.ParseListEnd() -} - -func (p *TSimpleJSONProtocol) ReadSetBegin() (elemType TType, size int, e error) { - return p.ParseElemListBegin() -} - -func (p *TSimpleJSONProtocol) ReadSetEnd() error { - return p.ParseListEnd() -} - -func (p *TSimpleJSONProtocol) ReadBool() (bool, error) { - var value bool - - if err := p.ParsePreValue(); err != nil { - return value, err - } - f, _ := p.reader.Peek(1) - if len(f) > 0 { - switch f[0] { - case JSON_TRUE[0]: - b := make([]byte, len(JSON_TRUE)) - _, err := p.reader.Read(b) - if err != nil { - return false, NewTProtocolException(err) - } - if string(b) == string(JSON_TRUE) { - value = true - } else { - e := fmt.Errorf("Expected \"true\" but found: %s", string(b)) - return value, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - break - case JSON_FALSE[0]: - b := make([]byte, len(JSON_FALSE)) - _, err := p.reader.Read(b) - if err != nil { - return false, NewTProtocolException(err) - } - if string(b) == string(JSON_FALSE) { - value = false - } else { - e := fmt.Errorf("Expected \"false\" but found: %s", string(b)) - return value, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - break - case JSON_NULL[0]: - b := make([]byte, len(JSON_NULL)) - _, err := p.reader.Read(b) - if err != nil { - return false, NewTProtocolException(err) - } - if string(b) == string(JSON_NULL) { - value = false - } else { - e := fmt.Errorf("Expected \"null\" but found: %s", string(b)) - return value, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - default: - e := fmt.Errorf("Expected \"true\", \"false\", or \"null\" but found: %s", string(f)) - return value, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - return value, p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) ReadByte() (int8, error) { - v, err := p.ReadI64() - return int8(v), err -} - -func (p *TSimpleJSONProtocol) ReadI16() (int16, error) { - v, err := p.ReadI64() - return int16(v), err -} - -func (p *TSimpleJSONProtocol) ReadI32() (int32, error) { - v, err := p.ReadI64() - return int32(v), err -} - -func (p *TSimpleJSONProtocol) ReadI64() (int64, error) { - v, _, err := p.ParseI64() - return v, err -} - -func (p *TSimpleJSONProtocol) ReadDouble() (float64, error) { - v, _, err := p.ParseF64() - return v, err -} - -func (p *TSimpleJSONProtocol) ReadString() (string, error) { - var v string - if err := p.ParsePreValue(); err != nil { - return v, err - } - f, _ := p.reader.Peek(1) - if len(f) > 0 && f[0] == JSON_QUOTE { - p.reader.ReadByte() - value, err := p.ParseStringBody() - v = value - if err != nil { - return v, err - } - } else if len(f) > 0 && f[0] == JSON_NULL[0] { - b := make([]byte, len(JSON_NULL)) - _, err := p.reader.Read(b) - if err != nil { - return v, NewTProtocolException(err) - } - if string(b) != string(JSON_NULL) { - e := fmt.Errorf("Expected a JSON string, found unquoted data started with %s", string(b)) - return v, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } else { - e := fmt.Errorf("Expected a JSON string, found unquoted data started with %s", string(f)) - return v, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return v, p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) ReadBinary() ([]byte, error) { - var v []byte - if err := p.ParsePreValue(); err != nil { - return nil, err - } - f, _ := p.reader.Peek(1) - if len(f) > 0 && f[0] == JSON_QUOTE { - p.reader.ReadByte() - value, err := p.ParseBase64EncodedBody() - v = value - if err != nil { - return v, err - } - } else if len(f) > 0 && f[0] == JSON_NULL[0] { - b := make([]byte, len(JSON_NULL)) - _, err := p.reader.Read(b) - if err != nil { - return v, NewTProtocolException(err) - } - if string(b) != string(JSON_NULL) { - e := fmt.Errorf("Expected a JSON string, found unquoted data started with %s", string(b)) - return v, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } else { - e := fmt.Errorf("Expected a JSON string, found unquoted data started with %s", string(f)) - return v, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - - return v, p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) Flush() (err error) { - return NewTProtocolException(p.writer.Flush()) -} - -func (p *TSimpleJSONProtocol) Skip(fieldType TType) (err error) { - return SkipDefaultDepth(p, fieldType) -} - -func (p *TSimpleJSONProtocol) Transport() TTransport { - return p.trans -} - -func (p *TSimpleJSONProtocol) OutputPreValue() error { - cxt := _ParseContext(p.dumpContext[len(p.dumpContext)-1]) - switch cxt { - case _CONTEXT_IN_LIST, _CONTEXT_IN_OBJECT_NEXT_KEY: - if _, e := p.write(JSON_COMMA); e != nil { - return NewTProtocolException(e) - } - break - case _CONTEXT_IN_OBJECT_NEXT_VALUE: - if _, e := p.write(JSON_COLON); e != nil { - return NewTProtocolException(e) - } - break - } - return nil -} - -func (p *TSimpleJSONProtocol) OutputPostValue() error { - cxt := _ParseContext(p.dumpContext[len(p.dumpContext)-1]) - switch cxt { - case _CONTEXT_IN_LIST_FIRST: - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_LIST)) - break - case _CONTEXT_IN_OBJECT_FIRST: - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_OBJECT_NEXT_VALUE)) - break - case _CONTEXT_IN_OBJECT_NEXT_KEY: - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_OBJECT_NEXT_VALUE)) - break - case _CONTEXT_IN_OBJECT_NEXT_VALUE: - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_OBJECT_NEXT_KEY)) - break - } - return nil -} - -func (p *TSimpleJSONProtocol) OutputBool(value bool) error { - if e := p.OutputPreValue(); e != nil { - return e - } - var v string - if value { - v = string(JSON_TRUE) - } else { - v = string(JSON_FALSE) - } - switch _ParseContext(p.dumpContext[len(p.dumpContext)-1]) { - case _CONTEXT_IN_OBJECT_FIRST, _CONTEXT_IN_OBJECT_NEXT_KEY: - v = jsonQuote(v) - default: - } - if e := p.OutputStringData(v); e != nil { - return e - } - return p.OutputPostValue() -} - -func (p *TSimpleJSONProtocol) OutputNull() error { - if e := p.OutputPreValue(); e != nil { - return e - } - if _, e := p.write(JSON_NULL); e != nil { - return NewTProtocolException(e) - } - return p.OutputPostValue() -} - -func (p *TSimpleJSONProtocol) OutputF64(value float64) error { - if e := p.OutputPreValue(); e != nil { - return e - } - var v string - if math.IsNaN(value) { - v = string(JSON_QUOTE) + JSON_NAN + string(JSON_QUOTE) - } else if math.IsInf(value, 1) { - v = string(JSON_QUOTE) + JSON_INFINITY + string(JSON_QUOTE) - } else if math.IsInf(value, -1) { - v = string(JSON_QUOTE) + JSON_NEGATIVE_INFINITY + string(JSON_QUOTE) - } else { - v = strconv.FormatFloat(value, 'g', -1, 64) - switch _ParseContext(p.dumpContext[len(p.dumpContext)-1]) { - case _CONTEXT_IN_OBJECT_FIRST, _CONTEXT_IN_OBJECT_NEXT_KEY: - v = string(JSON_QUOTE) + v + string(JSON_QUOTE) - default: - } - } - if e := p.OutputStringData(v); e != nil { - return e - } - return p.OutputPostValue() -} - -func (p *TSimpleJSONProtocol) OutputI64(value int64) error { - if e := p.OutputPreValue(); e != nil { - return e - } - v := strconv.FormatInt(value, 10) - switch _ParseContext(p.dumpContext[len(p.dumpContext)-1]) { - case _CONTEXT_IN_OBJECT_FIRST, _CONTEXT_IN_OBJECT_NEXT_KEY: - v = jsonQuote(v) - default: - } - if e := p.OutputStringData(v); e != nil { - return e - } - return p.OutputPostValue() -} - -func (p *TSimpleJSONProtocol) OutputString(s string) error { - if e := p.OutputPreValue(); e != nil { - return e - } - if e := p.OutputStringData(jsonQuote(s)); e != nil { - return e - } - return p.OutputPostValue() -} - -func (p *TSimpleJSONProtocol) OutputStringData(s string) error { - _, e := p.write([]byte(s)) - return NewTProtocolException(e) -} - -func (p *TSimpleJSONProtocol) OutputObjectBegin() error { - if e := p.OutputPreValue(); e != nil { - return e - } - if _, e := p.write(JSON_LBRACE); e != nil { - return NewTProtocolException(e) - } - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_OBJECT_FIRST)) - return nil -} - -func (p *TSimpleJSONProtocol) OutputObjectEnd() error { - if _, e := p.write(JSON_RBRACE); e != nil { - return NewTProtocolException(e) - } - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - if e := p.OutputPostValue(); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) OutputListBegin() error { - if e := p.OutputPreValue(); e != nil { - return e - } - if _, e := p.write(JSON_LBRACKET); e != nil { - return NewTProtocolException(e) - } - p.dumpContext = append(p.dumpContext, int(_CONTEXT_IN_LIST_FIRST)) - return nil -} - -func (p *TSimpleJSONProtocol) OutputListEnd() error { - if _, e := p.write(JSON_RBRACKET); e != nil { - return NewTProtocolException(e) - } - p.dumpContext = p.dumpContext[:len(p.dumpContext)-1] - if e := p.OutputPostValue(); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) OutputElemListBegin(elemType TType, size int) error { - if e := p.OutputListBegin(); e != nil { - return e - } - if e := p.WriteByte(int8(elemType)); e != nil { - return e - } - if e := p.WriteI64(int64(size)); e != nil { - return e - } - return nil -} - -func (p *TSimpleJSONProtocol) ParsePreValue() error { - if e := p.readNonSignificantWhitespace(); e != nil { - return NewTProtocolException(e) - } - cxt := _ParseContext(p.parseContextStack[len(p.parseContextStack)-1]) - b, _ := p.reader.Peek(1) - switch cxt { - case _CONTEXT_IN_LIST: - if len(b) > 0 { - switch b[0] { - case JSON_RBRACKET[0]: - return nil - case JSON_COMMA[0]: - p.reader.ReadByte() - if e := p.readNonSignificantWhitespace(); e != nil { - return NewTProtocolException(e) - } - return nil - default: - e := fmt.Errorf("Expected \"]\" or \",\" in list context, but found \"%s\"", string(b)) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - break - case _CONTEXT_IN_OBJECT_NEXT_KEY: - if len(b) > 0 { - switch b[0] { - case JSON_RBRACE[0]: - return nil - case JSON_COMMA[0]: - p.reader.ReadByte() - if e := p.readNonSignificantWhitespace(); e != nil { - return NewTProtocolException(e) - } - return nil - default: - e := fmt.Errorf("Expected \"}\" or \",\" in object context, but found \"%s\"", string(b)) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - break - case _CONTEXT_IN_OBJECT_NEXT_VALUE: - if len(b) > 0 { - switch b[0] { - case JSON_COLON[0]: - p.reader.ReadByte() - if e := p.readNonSignificantWhitespace(); e != nil { - return NewTProtocolException(e) - } - return nil - default: - e := fmt.Errorf("Expected \":\" in object context, but found \"%s\"", string(b)) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - break - } - return nil -} - -func (p *TSimpleJSONProtocol) ParsePostValue() error { - if e := p.readNonSignificantWhitespace(); e != nil { - return NewTProtocolException(e) - } - cxt := _ParseContext(p.parseContextStack[len(p.parseContextStack)-1]) - switch cxt { - case _CONTEXT_IN_LIST_FIRST: - p.parseContextStack = p.parseContextStack[:len(p.parseContextStack)-1] - p.parseContextStack = append(p.parseContextStack, int(_CONTEXT_IN_LIST)) - break - case _CONTEXT_IN_OBJECT_FIRST, _CONTEXT_IN_OBJECT_NEXT_KEY: - p.parseContextStack = p.parseContextStack[:len(p.parseContextStack)-1] - p.parseContextStack = append(p.parseContextStack, int(_CONTEXT_IN_OBJECT_NEXT_VALUE)) - break - case _CONTEXT_IN_OBJECT_NEXT_VALUE: - p.parseContextStack = p.parseContextStack[:len(p.parseContextStack)-1] - p.parseContextStack = append(p.parseContextStack, int(_CONTEXT_IN_OBJECT_NEXT_KEY)) - break - } - return nil -} - -func (p *TSimpleJSONProtocol) readNonSignificantWhitespace() error { - for { - b, _ := p.reader.Peek(1) - if len(b) < 1 { - return nil - } - switch b[0] { - case ' ', '\r', '\n', '\t': - p.reader.ReadByte() - continue - default: - break - } - break - } - return nil -} - -func (p *TSimpleJSONProtocol) ParseStringBody() (string, error) { - line, err := p.reader.ReadString(JSON_QUOTE) - if err != nil { - return "", NewTProtocolException(err) - } - l := len(line) - // count number of escapes to see if we need to keep going - i := 1 - for ; i < l; i++ { - if line[l-i-1] != '\\' { - break - } - } - if i&0x01 == 1 { - v, ok := jsonUnquote(string(JSON_QUOTE) + line) - if !ok { - return "", NewTProtocolException(err) - } - return v, nil - } - s, err := p.ParseQuotedStringBody() - if err != nil { - return "", NewTProtocolException(err) - } - str := string(JSON_QUOTE) + line + s - v, ok := jsonUnquote(str) - if !ok { - e := fmt.Errorf("Unable to parse as JSON string %s", str) - return "", NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return v, nil -} - -func (p *TSimpleJSONProtocol) ParseQuotedStringBody() (string, error) { - line, err := p.reader.ReadString(JSON_QUOTE) - if err != nil { - return "", NewTProtocolException(err) - } - l := len(line) - // count number of escapes to see if we need to keep going - i := 1 - for ; i < l; i++ { - if line[l-i-1] != '\\' { - break - } - } - if i&0x01 == 1 { - return line, nil - } - s, err := p.ParseQuotedStringBody() - if err != nil { - return "", NewTProtocolException(err) - } - v := line + s - return v, nil -} - -func (p *TSimpleJSONProtocol) ParseBase64EncodedBody() ([]byte, error) { - line, err := p.reader.ReadBytes(JSON_QUOTE) - if err != nil { - return line, NewTProtocolException(err) - } - line2 := line[0 : len(line)-1] - l := len(line2) - if (l % 4) != 0 { - pad := 4 - (l % 4) - fill := [...]byte{'=', '=', '='} - line2 = append(line2, fill[:pad]...) - l = len(line2) - } - output := make([]byte, base64.StdEncoding.DecodedLen(l)) - n, err := base64.StdEncoding.Decode(output, line2) - return output[0:n], NewTProtocolException(err) -} - -func (p *TSimpleJSONProtocol) ParseI64() (int64, bool, error) { - if err := p.ParsePreValue(); err != nil { - return 0, false, err - } - var value int64 - var isnull bool - if p.safePeekContains(JSON_NULL) { - p.reader.Read(make([]byte, len(JSON_NULL))) - isnull = true - } else { - num, err := p.readNumeric() - isnull = (num == nil) - if !isnull { - value = num.Int64() - } - if err != nil { - return value, isnull, err - } - } - return value, isnull, p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) ParseF64() (float64, bool, error) { - if err := p.ParsePreValue(); err != nil { - return 0, false, err - } - var value float64 - var isnull bool - if p.safePeekContains(JSON_NULL) { - p.reader.Read(make([]byte, len(JSON_NULL))) - isnull = true - } else { - num, err := p.readNumeric() - isnull = (num == nil) - if !isnull { - value = num.Float64() - } - if err != nil { - return value, isnull, err - } - } - return value, isnull, p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) ParseObjectStart() (bool, error) { - if err := p.ParsePreValue(); err != nil { - return false, err - } - var b []byte - b, err := p.reader.Peek(1) - if err != nil { - return false, err - } - if len(b) > 0 && b[0] == JSON_LBRACE[0] { - p.reader.ReadByte() - p.parseContextStack = append(p.parseContextStack, int(_CONTEXT_IN_OBJECT_FIRST)) - return false, nil - } else if p.safePeekContains(JSON_NULL) { - return true, nil - } - e := fmt.Errorf("Expected '{' or null, but found '%s'", string(b)) - return false, NewTProtocolExceptionWithType(INVALID_DATA, e) -} - -func (p *TSimpleJSONProtocol) ParseObjectEnd() error { - if isNull, err := p.readIfNull(); isNull || err != nil { - return err - } - cxt := _ParseContext(p.parseContextStack[len(p.parseContextStack)-1]) - if (cxt != _CONTEXT_IN_OBJECT_FIRST) && (cxt != _CONTEXT_IN_OBJECT_NEXT_KEY) { - e := fmt.Errorf("Expected to be in the Object Context, but not in Object Context (%d)", cxt) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - } - line, err := p.reader.ReadString(JSON_RBRACE[0]) - if err != nil { - return NewTProtocolException(err) - } - for _, char := range line { - switch char { - default: - e := fmt.Errorf("Expecting end of object \"}\", but found: \"%s\"", line) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - case ' ', '\n', '\r', '\t', '}': - break - } - } - p.parseContextStack = p.parseContextStack[:len(p.parseContextStack)-1] - return p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) ParseListBegin() (isNull bool, err error) { - if e := p.ParsePreValue(); e != nil { - return false, e - } - var b []byte - b, err = p.reader.Peek(1) - if err != nil { - return false, err - } - if len(b) >= 1 && b[0] == JSON_LBRACKET[0] { - p.parseContextStack = append(p.parseContextStack, int(_CONTEXT_IN_LIST_FIRST)) - p.reader.ReadByte() - isNull = false - } else if p.safePeekContains(JSON_NULL) { - isNull = true - } else { - err = fmt.Errorf("Expected \"null\" or \"[\", received %q", b) - } - return isNull, NewTProtocolExceptionWithType(INVALID_DATA, err) -} - -func (p *TSimpleJSONProtocol) ParseElemListBegin() (elemType TType, size int, e error) { - if isNull, e := p.ParseListBegin(); isNull || e != nil { - return VOID, 0, e - } - bElemType, err := p.ReadByte() - elemType = TType(bElemType) - if err != nil { - return elemType, size, err - } - nSize, err2 := p.ReadI64() - size = int(nSize) - return elemType, size, err2 -} - -func (p *TSimpleJSONProtocol) ParseListEnd() error { - if isNull, err := p.readIfNull(); isNull || err != nil { - return err - } - cxt := _ParseContext(p.parseContextStack[len(p.parseContextStack)-1]) - if cxt != _CONTEXT_IN_LIST { - e := fmt.Errorf("Expected to be in the List Context, but not in List Context (%d)", cxt) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - } - line, err := p.reader.ReadString(JSON_RBRACKET[0]) - if err != nil { - return NewTProtocolException(err) - } - for _, char := range line { - switch char { - default: - e := fmt.Errorf("Expecting end of list \"]\", but found: \"%s\"", line) - return NewTProtocolExceptionWithType(INVALID_DATA, e) - case ' ', '\n', '\r', '\t', rune(JSON_RBRACKET[0]): - break - } - } - p.parseContextStack = p.parseContextStack[:len(p.parseContextStack)-1] - if _ParseContext(p.parseContextStack[len(p.parseContextStack)-1]) == _CONTEXT_IN_TOPLEVEL { - return nil - } - return p.ParsePostValue() -} - -func (p *TSimpleJSONProtocol) readSingleValue() (interface{}, TType, error) { - e := p.readNonSignificantWhitespace() - if e != nil { - return nil, VOID, NewTProtocolException(e) - } - b, e := p.reader.Peek(1) - if len(b) > 0 { - c := b[0] - switch c { - case JSON_NULL[0]: - buf := make([]byte, len(JSON_NULL)) - _, e := p.reader.Read(buf) - if e != nil { - return nil, VOID, NewTProtocolException(e) - } - if string(JSON_NULL) != string(buf) { - e = mismatch(string(JSON_NULL), string(buf)) - return nil, VOID, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return nil, VOID, nil - case JSON_QUOTE: - p.reader.ReadByte() - v, e := p.ParseStringBody() - if e != nil { - return v, UTF8, NewTProtocolException(e) - } - if v == JSON_INFINITY { - return INFINITY, DOUBLE, nil - } else if v == JSON_NEGATIVE_INFINITY { - return NEGATIVE_INFINITY, DOUBLE, nil - } else if v == JSON_NAN { - return NAN, DOUBLE, nil - } - return v, UTF8, nil - case JSON_TRUE[0]: - buf := make([]byte, len(JSON_TRUE)) - _, e := p.reader.Read(buf) - if e != nil { - return true, BOOL, NewTProtocolException(e) - } - if string(JSON_TRUE) != string(buf) { - e := mismatch(string(JSON_TRUE), string(buf)) - return true, BOOL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return true, BOOL, nil - case JSON_FALSE[0]: - buf := make([]byte, len(JSON_FALSE)) - _, e := p.reader.Read(buf) - if e != nil { - return false, BOOL, NewTProtocolException(e) - } - if string(JSON_FALSE) != string(buf) { - e := mismatch(string(JSON_FALSE), string(buf)) - return false, BOOL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return false, BOOL, nil - case JSON_LBRACKET[0]: - _, e := p.reader.ReadByte() - return make([]interface{}, 0), LIST, NewTProtocolException(e) - case JSON_LBRACE[0]: - _, e := p.reader.ReadByte() - return make(map[string]interface{}), STRUCT, NewTProtocolException(e) - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'e', 'E', '.', '+', '-', JSON_INFINITY[0], JSON_NAN[0]: - // assume numeric - v, e := p.readNumeric() - return v, DOUBLE, e - default: - e := fmt.Errorf("Expected element in list but found '%s' while parsing JSON.", string(c)) - return nil, VOID, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - e = fmt.Errorf("Cannot read a single element while parsing JSON.") - return nil, VOID, NewTProtocolExceptionWithType(INVALID_DATA, e) - -} - -func (p *TSimpleJSONProtocol) readIfNull() (bool, error) { - cont := true - for cont { - b, _ := p.reader.Peek(1) - if len(b) < 1 { - return false, nil - } - switch b[0] { - default: - return false, nil - case JSON_NULL[0]: - cont = false - break - case ' ', '\n', '\r', '\t': - p.reader.ReadByte() - break - } - } - if p.safePeekContains(JSON_NULL) { - p.reader.Read(make([]byte, len(JSON_NULL))) - return true, nil - } - return false, nil -} - -func (p *TSimpleJSONProtocol) readQuoteIfNext() { - b, _ := p.reader.Peek(1) - if len(b) > 0 && b[0] == JSON_QUOTE { - p.reader.ReadByte() - } -} - -func (p *TSimpleJSONProtocol) readNumeric() (Numeric, error) { - isNull, err := p.readIfNull() - if isNull || err != nil { - return NUMERIC_NULL, err - } - hasDecimalPoint := false - nextCanBeSign := true - hasE := false - MAX_LEN := 40 - buf := bytes.NewBuffer(make([]byte, 0, MAX_LEN)) - continueFor := true - inQuotes := false - for continueFor { - c, err := p.reader.ReadByte() - if err != nil { - if err == io.EOF { - break - } - return NUMERIC_NULL, NewTProtocolException(err) - } - switch c { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': - buf.WriteByte(c) - nextCanBeSign = false - case '.': - if hasDecimalPoint { - e := fmt.Errorf("Unable to parse number with multiple decimal points '%s.'", buf.String()) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - if hasE { - e := fmt.Errorf("Unable to parse number with decimal points in the exponent '%s.'", buf.String()) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - buf.WriteByte(c) - hasDecimalPoint, nextCanBeSign = true, false - case 'e', 'E': - if hasE { - e := fmt.Errorf("Unable to parse number with multiple exponents '%s%c'", buf.String(), c) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - buf.WriteByte(c) - hasE, nextCanBeSign = true, true - case '-', '+': - if !nextCanBeSign { - e := fmt.Errorf("Negative sign within number") - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - buf.WriteByte(c) - nextCanBeSign = false - case ' ', 0, '\t', '\n', '\r', JSON_RBRACE[0], JSON_RBRACKET[0], JSON_COMMA[0], JSON_COLON[0]: - p.reader.UnreadByte() - continueFor = false - case JSON_NAN[0]: - if buf.Len() == 0 { - buffer := make([]byte, len(JSON_NAN)) - buffer[0] = c - _, e := p.reader.Read(buffer[1:]) - if e != nil { - return NUMERIC_NULL, NewTProtocolException(e) - } - if JSON_NAN != string(buffer) { - e := mismatch(JSON_NAN, string(buffer)) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - if inQuotes { - p.readQuoteIfNext() - } - return NAN, nil - } else { - e := fmt.Errorf("Unable to parse number starting with character '%c'", c) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - case JSON_INFINITY[0]: - if buf.Len() == 0 || (buf.Len() == 1 && buf.Bytes()[0] == '+') { - buffer := make([]byte, len(JSON_INFINITY)) - buffer[0] = c - _, e := p.reader.Read(buffer[1:]) - if e != nil { - return NUMERIC_NULL, NewTProtocolException(e) - } - if JSON_INFINITY != string(buffer) { - e := mismatch(JSON_INFINITY, string(buffer)) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - if inQuotes { - p.readQuoteIfNext() - } - return INFINITY, nil - } else if buf.Len() == 1 && buf.Bytes()[0] == JSON_NEGATIVE_INFINITY[0] { - buffer := make([]byte, len(JSON_NEGATIVE_INFINITY)) - buffer[0] = JSON_NEGATIVE_INFINITY[0] - buffer[1] = c - _, e := p.reader.Read(buffer[2:]) - if e != nil { - return NUMERIC_NULL, NewTProtocolException(e) - } - if JSON_NEGATIVE_INFINITY != string(buffer) { - e := mismatch(JSON_NEGATIVE_INFINITY, string(buffer)) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - if inQuotes { - p.readQuoteIfNext() - } - return NEGATIVE_INFINITY, nil - } else { - e := fmt.Errorf("Unable to parse number starting with character '%c' due to existing buffer %s", c, buf.String()) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - case JSON_QUOTE: - if !inQuotes { - inQuotes = true - } else { - break - } - default: - e := fmt.Errorf("Unable to parse number starting with character '%c'", c) - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - } - if buf.Len() == 0 { - e := fmt.Errorf("Unable to parse number from empty string ''") - return NUMERIC_NULL, NewTProtocolExceptionWithType(INVALID_DATA, e) - } - return NewNumericFromJSONString(buf.String(), false), nil -} - -// Safely peeks into the buffer, reading only what is necessary -func (p *TSimpleJSONProtocol) safePeekContains(b []byte) bool { - for i := 0; i < len(b); i++ { - a, _ := p.reader.Peek(i + 1) - if len(a) == 0 || a[i] != b[i] { - return false - } - } - return true -} - -// Reset the context stack to its initial state. -func (p *TSimpleJSONProtocol) resetContextStack() { - p.parseContextStack = []int{int(_CONTEXT_IN_TOPLEVEL)} - p.dumpContext = []int{int(_CONTEXT_IN_TOPLEVEL)} -} - -func (p *TSimpleJSONProtocol) write(b []byte) (int, error) { - n, err := p.writer.Write(b) - if err != nil { - p.writer.Reset(p.trans) // THRIFT-3735 - } - return n, err -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/transport.go b/vendor/github.com/uber/jaeger-client-go/thrift/transport.go deleted file mode 100644 index 453899651fc2..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/transport.go +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "errors" - "io" -) - -var errTransportInterrupted = errors.New("Transport Interrupted") - -type Flusher interface { - Flush() (err error) -} - -type ReadSizeProvider interface { - RemainingBytes() (num_bytes uint64) -} - - -// Encapsulates the I/O layer -type TTransport interface { - io.ReadWriteCloser - Flusher - ReadSizeProvider - - // Opens the transport for communication - Open() error - - // Returns true if the transport is open - IsOpen() bool -} - -type stringWriter interface { - WriteString(s string) (n int, err error) -} - - -// This is "enchanced" transport with extra capabilities. You need to use one of these -// to construct protocol. -// Notably, TSocket does not implement this interface, and it is always a mistake to use -// TSocket directly in protocol. -type TRichTransport interface { - io.ReadWriter - io.ByteReader - io.ByteWriter - stringWriter - Flusher - ReadSizeProvider -} - diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go b/vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go deleted file mode 100644 index 9505b44612d0..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -import ( - "errors" - "io" -) - -type timeoutable interface { - Timeout() bool -} - -// Thrift Transport exception -type TTransportException interface { - TException - TypeId() int - Err() error -} - -const ( - UNKNOWN_TRANSPORT_EXCEPTION = 0 - NOT_OPEN = 1 - ALREADY_OPEN = 2 - TIMED_OUT = 3 - END_OF_FILE = 4 -) - -type tTransportException struct { - typeId int - err error -} - -func (p *tTransportException) TypeId() int { - return p.typeId -} - -func (p *tTransportException) Error() string { - return p.err.Error() -} - -func (p *tTransportException) Err() error { - return p.err -} - -func NewTTransportException(t int, e string) TTransportException { - return &tTransportException{typeId: t, err: errors.New(e)} -} - -func NewTTransportExceptionFromError(e error) TTransportException { - if e == nil { - return nil - } - - if t, ok := e.(TTransportException); ok { - return t - } - - switch v := e.(type) { - case TTransportException: - return v - case timeoutable: - if v.Timeout() { - return &tTransportException{typeId: TIMED_OUT, err: e} - } - } - - if e == io.EOF { - return &tTransportException{typeId: END_OF_FILE, err: e} - } - - return &tTransportException{typeId: UNKNOWN_TRANSPORT_EXCEPTION, err: e} -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go b/vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go deleted file mode 100644 index 533d1b437533..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -// Factory class used to create wrapped instance of Transports. -// This is used primarily in servers, which get Transports from -// a ServerTransport and then may want to mutate them (i.e. create -// a BufferedTransport from the underlying base transport) -type TTransportFactory interface { - GetTransport(trans TTransport) TTransport -} - -type tTransportFactory struct{} - -// Return a wrapped instance of the base Transport. -func (p *tTransportFactory) GetTransport(trans TTransport) TTransport { - return trans -} - -func NewTTransportFactory() TTransportFactory { - return &tTransportFactory{} -} diff --git a/vendor/github.com/uber/jaeger-client-go/thrift/type.go b/vendor/github.com/uber/jaeger-client-go/thrift/type.go deleted file mode 100644 index 4292ffcadb13..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/thrift/type.go +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package thrift - -// Type constants in the Thrift protocol -type TType byte - -const ( - STOP = 0 - VOID = 1 - BOOL = 2 - BYTE = 3 - I08 = 3 - DOUBLE = 4 - I16 = 6 - I32 = 8 - I64 = 10 - STRING = 11 - UTF7 = 11 - STRUCT = 12 - MAP = 13 - SET = 14 - LIST = 15 - UTF8 = 16 - UTF16 = 17 - //BINARY = 18 wrong and unusued -) - -var typeNames = map[int]string{ - STOP: "STOP", - VOID: "VOID", - BOOL: "BOOL", - BYTE: "BYTE", - DOUBLE: "DOUBLE", - I16: "I16", - I32: "I32", - I64: "I64", - STRING: "STRING", - STRUCT: "STRUCT", - MAP: "MAP", - SET: "SET", - LIST: "LIST", - UTF8: "UTF8", - UTF16: "UTF16", -} - -func (p TType) String() string { - if s, ok := typeNames[int(p)]; ok { - return s - } - return "Unknown" -} diff --git a/vendor/github.com/uber/jaeger-client-go/tracer.go b/vendor/github.com/uber/jaeger-client-go/tracer.go deleted file mode 100644 index 198c32eb4fde..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/tracer.go +++ /dev/null @@ -1,431 +0,0 @@ -// Copyright (c) 2017-2018 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "fmt" - "io" - "os" - "reflect" - "strconv" - "sync" - "time" - - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - - "github.com/uber/jaeger-client-go/internal/baggage" - "github.com/uber/jaeger-client-go/internal/throttler" - "github.com/uber/jaeger-client-go/log" - "github.com/uber/jaeger-client-go/utils" -) - -// Tracer implements opentracing.Tracer. -type Tracer struct { - serviceName string - hostIPv4 uint32 // this is for zipkin endpoint conversion - - sampler Sampler - reporter Reporter - metrics Metrics - logger log.Logger - - timeNow func() time.Time - randomNumber func() uint64 - - options struct { - poolSpans bool - gen128Bit bool // whether to generate 128bit trace IDs - zipkinSharedRPCSpan bool - highTraceIDGenerator func() uint64 // custom high trace ID generator - maxTagValueLength int - // more options to come - } - // pool for Span objects - spanPool sync.Pool - - injectors map[interface{}]Injector - extractors map[interface{}]Extractor - - observer compositeObserver - - tags []Tag - process Process - - baggageRestrictionManager baggage.RestrictionManager - baggageSetter *baggageSetter - - debugThrottler throttler.Throttler -} - -// NewTracer creates Tracer implementation that reports tracing to Jaeger. -// The returned io.Closer can be used in shutdown hooks to ensure that the internal -// queue of the Reporter is drained and all buffered spans are submitted to collectors. -func NewTracer( - serviceName string, - sampler Sampler, - reporter Reporter, - options ...TracerOption, -) (opentracing.Tracer, io.Closer) { - t := &Tracer{ - serviceName: serviceName, - sampler: sampler, - reporter: reporter, - injectors: make(map[interface{}]Injector), - extractors: make(map[interface{}]Extractor), - metrics: *NewNullMetrics(), - spanPool: sync.Pool{New: func() interface{} { - return &Span{} - }}, - } - - for _, option := range options { - option(t) - } - - // register default injectors/extractors unless they are already provided via options - textPropagator := newTextMapPropagator(getDefaultHeadersConfig(), t.metrics) - t.addCodec(opentracing.TextMap, textPropagator, textPropagator) - - httpHeaderPropagator := newHTTPHeaderPropagator(getDefaultHeadersConfig(), t.metrics) - t.addCodec(opentracing.HTTPHeaders, httpHeaderPropagator, httpHeaderPropagator) - - binaryPropagator := newBinaryPropagator(t) - t.addCodec(opentracing.Binary, binaryPropagator, binaryPropagator) - - // TODO remove after TChannel supports OpenTracing - interopPropagator := &jaegerTraceContextPropagator{tracer: t} - t.addCodec(SpanContextFormat, interopPropagator, interopPropagator) - - zipkinPropagator := &zipkinPropagator{tracer: t} - t.addCodec(ZipkinSpanFormat, zipkinPropagator, zipkinPropagator) - - if t.baggageRestrictionManager != nil { - t.baggageSetter = newBaggageSetter(t.baggageRestrictionManager, &t.metrics) - } else { - t.baggageSetter = newBaggageSetter(baggage.NewDefaultRestrictionManager(0), &t.metrics) - } - if t.debugThrottler == nil { - t.debugThrottler = throttler.DefaultThrottler{} - } - - if t.randomNumber == nil { - rng := utils.NewRand(time.Now().UnixNano()) - t.randomNumber = func() uint64 { - return uint64(rng.Int63()) - } - } - if t.timeNow == nil { - t.timeNow = time.Now - } - if t.logger == nil { - t.logger = log.NullLogger - } - // Set tracer-level tags - t.tags = append(t.tags, Tag{key: JaegerClientVersionTagKey, value: JaegerClientVersion}) - if hostname, err := os.Hostname(); err == nil { - t.tags = append(t.tags, Tag{key: TracerHostnameTagKey, value: hostname}) - } - if ip, err := utils.HostIP(); err == nil { - t.tags = append(t.tags, Tag{key: TracerIPTagKey, value: ip.String()}) - t.hostIPv4 = utils.PackIPAsUint32(ip) - } else { - t.logger.Error("Unable to determine this host's IP address: " + err.Error()) - } - - if t.options.gen128Bit { - if t.options.highTraceIDGenerator == nil { - t.options.highTraceIDGenerator = t.randomNumber - } - } else if t.options.highTraceIDGenerator != nil { - t.logger.Error("Overriding high trace ID generator but not generating " + - "128 bit trace IDs, consider enabling the \"Gen128Bit\" option") - } - if t.options.maxTagValueLength == 0 { - t.options.maxTagValueLength = DefaultMaxTagValueLength - } - t.process = Process{ - Service: serviceName, - UUID: strconv.FormatUint(t.randomNumber(), 16), - Tags: t.tags, - } - if throttler, ok := t.debugThrottler.(ProcessSetter); ok { - throttler.SetProcess(t.process) - } - - return t, t -} - -// addCodec adds registers injector and extractor for given propagation format if not already defined. -func (t *Tracer) addCodec(format interface{}, injector Injector, extractor Extractor) { - if _, ok := t.injectors[format]; !ok { - t.injectors[format] = injector - } - if _, ok := t.extractors[format]; !ok { - t.extractors[format] = extractor - } -} - -// StartSpan implements StartSpan() method of opentracing.Tracer. -func (t *Tracer) StartSpan( - operationName string, - options ...opentracing.StartSpanOption, -) opentracing.Span { - sso := opentracing.StartSpanOptions{} - for _, o := range options { - o.Apply(&sso) - } - return t.startSpanWithOptions(operationName, sso) -} - -func (t *Tracer) startSpanWithOptions( - operationName string, - options opentracing.StartSpanOptions, -) opentracing.Span { - if options.StartTime.IsZero() { - options.StartTime = t.timeNow() - } - - // Predicate whether the given span context is a valid reference - // which may be used as parent / debug ID / baggage items source - isValidReference := func(ctx SpanContext) bool { - return ctx.IsValid() || ctx.isDebugIDContainerOnly() || len(ctx.baggage) != 0 - } - - var references []Reference - var parent SpanContext - var hasParent bool // need this because `parent` is a value, not reference - for _, ref := range options.References { - ctx, ok := ref.ReferencedContext.(SpanContext) - if !ok { - t.logger.Error(fmt.Sprintf( - "Reference contains invalid type of SpanReference: %s", - reflect.ValueOf(ref.ReferencedContext))) - continue - } - if !isValidReference(ctx) { - continue - } - references = append(references, Reference{Type: ref.Type, Context: ctx}) - if !hasParent { - parent = ctx - hasParent = ref.Type == opentracing.ChildOfRef - } - } - if !hasParent && isValidReference(parent) { - // If ChildOfRef wasn't found but a FollowFromRef exists, use the context from - // the FollowFromRef as the parent - hasParent = true - } - - rpcServer := false - if v, ok := options.Tags[ext.SpanKindRPCServer.Key]; ok { - rpcServer = (v == ext.SpanKindRPCServerEnum || v == string(ext.SpanKindRPCServerEnum)) - } - - var samplerTags []Tag - var ctx SpanContext - newTrace := false - if !hasParent || !parent.IsValid() { - newTrace = true - ctx.traceID.Low = t.randomID() - if t.options.gen128Bit { - ctx.traceID.High = t.options.highTraceIDGenerator() - } - ctx.spanID = SpanID(ctx.traceID.Low) - ctx.parentID = 0 - ctx.flags = byte(0) - if hasParent && parent.isDebugIDContainerOnly() && t.isDebugAllowed(operationName) { - ctx.flags |= (flagSampled | flagDebug) - samplerTags = []Tag{{key: JaegerDebugHeader, value: parent.debugID}} - } else if sampled, tags := t.sampler.IsSampled(ctx.traceID, operationName); sampled { - ctx.flags |= flagSampled - samplerTags = tags - } - } else { - ctx.traceID = parent.traceID - if rpcServer && t.options.zipkinSharedRPCSpan { - // Support Zipkin's one-span-per-RPC model - ctx.spanID = parent.spanID - ctx.parentID = parent.parentID - } else { - ctx.spanID = SpanID(t.randomID()) - ctx.parentID = parent.spanID - } - ctx.flags = parent.flags - } - if hasParent { - // copy baggage items - if l := len(parent.baggage); l > 0 { - ctx.baggage = make(map[string]string, len(parent.baggage)) - for k, v := range parent.baggage { - ctx.baggage[k] = v - } - } - } - - sp := t.newSpan() - sp.context = ctx - sp.observer = t.observer.OnStartSpan(sp, operationName, options) - return t.startSpanInternal( - sp, - operationName, - options.StartTime, - samplerTags, - options.Tags, - newTrace, - rpcServer, - references, - ) -} - -// Inject implements Inject() method of opentracing.Tracer -func (t *Tracer) Inject(ctx opentracing.SpanContext, format interface{}, carrier interface{}) error { - c, ok := ctx.(SpanContext) - if !ok { - return opentracing.ErrInvalidSpanContext - } - if injector, ok := t.injectors[format]; ok { - return injector.Inject(c, carrier) - } - return opentracing.ErrUnsupportedFormat -} - -// Extract implements Extract() method of opentracing.Tracer -func (t *Tracer) Extract( - format interface{}, - carrier interface{}, -) (opentracing.SpanContext, error) { - if extractor, ok := t.extractors[format]; ok { - return extractor.Extract(carrier) - } - return nil, opentracing.ErrUnsupportedFormat -} - -// Close releases all resources used by the Tracer and flushes any remaining buffered spans. -func (t *Tracer) Close() error { - t.reporter.Close() - t.sampler.Close() - if mgr, ok := t.baggageRestrictionManager.(io.Closer); ok { - mgr.Close() - } - if throttler, ok := t.debugThrottler.(io.Closer); ok { - throttler.Close() - } - return nil -} - -// Tags returns a slice of tracer-level tags. -func (t *Tracer) Tags() []opentracing.Tag { - tags := make([]opentracing.Tag, len(t.tags)) - for i, tag := range t.tags { - tags[i] = opentracing.Tag{Key: tag.key, Value: tag.value} - } - return tags -} - -// newSpan returns an instance of a clean Span object. -// If options.PoolSpans is true, the spans are retrieved from an object pool. -func (t *Tracer) newSpan() *Span { - if !t.options.poolSpans { - return &Span{} - } - sp := t.spanPool.Get().(*Span) - sp.context = emptyContext - sp.tracer = nil - sp.tags = nil - sp.logs = nil - return sp -} - -func (t *Tracer) startSpanInternal( - sp *Span, - operationName string, - startTime time.Time, - internalTags []Tag, - tags opentracing.Tags, - newTrace bool, - rpcServer bool, - references []Reference, -) *Span { - sp.tracer = t - sp.operationName = operationName - sp.startTime = startTime - sp.duration = 0 - sp.references = references - sp.firstInProcess = rpcServer || sp.context.parentID == 0 - if len(tags) > 0 || len(internalTags) > 0 { - sp.tags = make([]Tag, len(internalTags), len(tags)+len(internalTags)) - copy(sp.tags, internalTags) - for k, v := range tags { - sp.observer.OnSetTag(k, v) - if k == string(ext.SamplingPriority) && !setSamplingPriority(sp, v) { - continue - } - sp.setTagNoLocking(k, v) - } - } - // emit metrics - if sp.context.IsSampled() { - t.metrics.SpansStartedSampled.Inc(1) - if newTrace { - // We cannot simply check for parentID==0 because in Zipkin model the - // server-side RPC span has the exact same trace/span/parent IDs as the - // calling client-side span, but obviously the server side span is - // no longer a root span of the trace. - t.metrics.TracesStartedSampled.Inc(1) - } else if sp.firstInProcess { - t.metrics.TracesJoinedSampled.Inc(1) - } - } else { - t.metrics.SpansStartedNotSampled.Inc(1) - if newTrace { - t.metrics.TracesStartedNotSampled.Inc(1) - } else if sp.firstInProcess { - t.metrics.TracesJoinedNotSampled.Inc(1) - } - } - return sp -} - -func (t *Tracer) reportSpan(sp *Span) { - t.metrics.SpansFinished.Inc(1) - if sp.context.IsSampled() { - t.reporter.Report(sp) - } - if t.options.poolSpans { - t.spanPool.Put(sp) - } -} - -// randomID generates a random trace/span ID, using tracer.random() generator. -// It never returns 0. -func (t *Tracer) randomID() uint64 { - val := t.randomNumber() - for val == 0 { - val = t.randomNumber() - } - return val -} - -// (NB) span must hold the lock before making this call -func (t *Tracer) setBaggage(sp *Span, key, value string) { - t.baggageSetter.setBaggage(sp, key, value) -} - -// (NB) span must hold the lock before making this call -func (t *Tracer) isDebugAllowed(operation string) bool { - return t.debugThrottler.IsAllowed(operation) -} diff --git a/vendor/github.com/uber/jaeger-client-go/tracer_options.go b/vendor/github.com/uber/jaeger-client-go/tracer_options.go deleted file mode 100644 index a90265f031cf..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/tracer_options.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "time" - - "github.com/opentracing/opentracing-go" - - "github.com/uber/jaeger-client-go/internal/baggage" - "github.com/uber/jaeger-client-go/internal/throttler" -) - -// TracerOption is a function that sets some option on the tracer -type TracerOption func(tracer *Tracer) - -// TracerOptions is a factory for all available TracerOption's -var TracerOptions tracerOptions - -type tracerOptions struct{} - -// Metrics creates a TracerOption that initializes Metrics on the tracer, -// which is used to emit statistics. -func (tracerOptions) Metrics(m *Metrics) TracerOption { - return func(tracer *Tracer) { - tracer.metrics = *m - } -} - -// Logger creates a TracerOption that gives the tracer a Logger. -func (tracerOptions) Logger(logger Logger) TracerOption { - return func(tracer *Tracer) { - tracer.logger = logger - } -} - -func (tracerOptions) CustomHeaderKeys(headerKeys *HeadersConfig) TracerOption { - return func(tracer *Tracer) { - if headerKeys == nil { - return - } - textPropagator := newTextMapPropagator(headerKeys.applyDefaults(), tracer.metrics) - tracer.addCodec(opentracing.TextMap, textPropagator, textPropagator) - - httpHeaderPropagator := newHTTPHeaderPropagator(headerKeys.applyDefaults(), tracer.metrics) - tracer.addCodec(opentracing.HTTPHeaders, httpHeaderPropagator, httpHeaderPropagator) - } -} - -// TimeNow creates a TracerOption that gives the tracer a function -// used to generate timestamps for spans. -func (tracerOptions) TimeNow(timeNow func() time.Time) TracerOption { - return func(tracer *Tracer) { - tracer.timeNow = timeNow - } -} - -// RandomNumber creates a TracerOption that gives the tracer -// a thread-safe random number generator function for generating trace IDs. -func (tracerOptions) RandomNumber(randomNumber func() uint64) TracerOption { - return func(tracer *Tracer) { - tracer.randomNumber = randomNumber - } -} - -// PoolSpans creates a TracerOption that tells the tracer whether it should use -// an object pool to minimize span allocations. -// This should be used with care, only if the service is not running any async tasks -// that can access parent spans after those spans have been finished. -func (tracerOptions) PoolSpans(poolSpans bool) TracerOption { - return func(tracer *Tracer) { - tracer.options.poolSpans = poolSpans - } -} - -// Deprecated: HostIPv4 creates a TracerOption that identifies the current service/process. -// If not set, the factory method will obtain the current IP address. -// The TracerOption is deprecated; the tracer will attempt to automatically detect the IP. -func (tracerOptions) HostIPv4(hostIPv4 uint32) TracerOption { - return func(tracer *Tracer) { - tracer.hostIPv4 = hostIPv4 - } -} - -func (tracerOptions) Injector(format interface{}, injector Injector) TracerOption { - return func(tracer *Tracer) { - tracer.injectors[format] = injector - } -} - -func (tracerOptions) Extractor(format interface{}, extractor Extractor) TracerOption { - return func(tracer *Tracer) { - tracer.extractors[format] = extractor - } -} - -func (t tracerOptions) Observer(observer Observer) TracerOption { - return t.ContribObserver(&oldObserver{obs: observer}) -} - -func (tracerOptions) ContribObserver(observer ContribObserver) TracerOption { - return func(tracer *Tracer) { - tracer.observer.append(observer) - } -} - -func (tracerOptions) Gen128Bit(gen128Bit bool) TracerOption { - return func(tracer *Tracer) { - tracer.options.gen128Bit = gen128Bit - } -} - -func (tracerOptions) HighTraceIDGenerator(highTraceIDGenerator func() uint64) TracerOption { - return func(tracer *Tracer) { - tracer.options.highTraceIDGenerator = highTraceIDGenerator - } -} - -func (tracerOptions) MaxTagValueLength(maxTagValueLength int) TracerOption { - return func(tracer *Tracer) { - tracer.options.maxTagValueLength = maxTagValueLength - } -} - -func (tracerOptions) ZipkinSharedRPCSpan(zipkinSharedRPCSpan bool) TracerOption { - return func(tracer *Tracer) { - tracer.options.zipkinSharedRPCSpan = zipkinSharedRPCSpan - } -} - -func (tracerOptions) Tag(key string, value interface{}) TracerOption { - return func(tracer *Tracer) { - tracer.tags = append(tracer.tags, Tag{key: key, value: value}) - } -} - -func (tracerOptions) BaggageRestrictionManager(mgr baggage.RestrictionManager) TracerOption { - return func(tracer *Tracer) { - tracer.baggageRestrictionManager = mgr - } -} - -func (tracerOptions) DebugThrottler(throttler throttler.Throttler) TracerOption { - return func(tracer *Tracer) { - tracer.debugThrottler = throttler - } -} diff --git a/vendor/github.com/uber/jaeger-client-go/transport.go b/vendor/github.com/uber/jaeger-client-go/transport.go deleted file mode 100644 index c5f5b19551fe..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/transport.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "io" -) - -// Transport abstracts the method of sending spans out of process. -// Implementations are NOT required to be thread-safe; the RemoteReporter -// is expected to only call methods on the Transport from the same go-routine. -type Transport interface { - // Append converts the span to the wire representation and adds it - // to sender's internal buffer. If the buffer exceeds its designated - // size, the transport should call Flush() and return the number of spans - // flushed, otherwise return 0. If error is returned, the returned number - // of spans is treated as failed span, and reported to metrics accordingly. - Append(span *Span) (int, error) - - // Flush submits the internal buffer to the remote server. It returns the - // number of spans flushed. If error is returned, the returned number of - // spans is treated as failed span, and reported to metrics accordingly. - Flush() (int, error) - - io.Closer -} diff --git a/vendor/github.com/uber/jaeger-client-go/transport_udp.go b/vendor/github.com/uber/jaeger-client-go/transport_udp.go deleted file mode 100644 index 7b9ccf937449..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/transport_udp.go +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "errors" - "fmt" - - "github.com/uber/jaeger-client-go/thrift" - - j "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/utils" -) - -// Empirically obtained constant for how many bytes in the message are used for envelope. -// The total datagram size is: -// sizeof(Span) * numSpans + processByteSize + emitBatchOverhead <= maxPacketSize -// There is a unit test `TestEmitBatchOverhead` that validates this number. -// Note that due to the use of Compact Thrift protocol, overhead grows with the number of spans -// in the batch, because the length of the list is encoded as varint32, as well as SeqId. -const emitBatchOverhead = 30 - -var errSpanTooLarge = errors.New("Span is too large") - -type udpSender struct { - client *utils.AgentClientUDP - maxPacketSize int // max size of datagram in bytes - maxSpanBytes int // max number of bytes to record spans (excluding envelope) in the datagram - byteBufferSize int // current number of span bytes accumulated in the buffer - spanBuffer []*j.Span // spans buffered before a flush - thriftBuffer *thrift.TMemoryBuffer // buffer used to calculate byte size of a span - thriftProtocol thrift.TProtocol - process *j.Process - processByteSize int -} - -// NewUDPTransport creates a reporter that submits spans to jaeger-agent -func NewUDPTransport(hostPort string, maxPacketSize int) (Transport, error) { - if len(hostPort) == 0 { - hostPort = fmt.Sprintf("%s:%d", DefaultUDPSpanServerHost, DefaultUDPSpanServerPort) - } - if maxPacketSize == 0 { - maxPacketSize = utils.UDPPacketMaxLength - } - - protocolFactory := thrift.NewTCompactProtocolFactory() - - // Each span is first written to thriftBuffer to determine its size in bytes. - thriftBuffer := thrift.NewTMemoryBufferLen(maxPacketSize) - thriftProtocol := protocolFactory.GetProtocol(thriftBuffer) - - client, err := utils.NewAgentClientUDP(hostPort, maxPacketSize) - if err != nil { - return nil, err - } - - sender := &udpSender{ - client: client, - maxSpanBytes: maxPacketSize - emitBatchOverhead, - thriftBuffer: thriftBuffer, - thriftProtocol: thriftProtocol} - return sender, nil -} - -func (s *udpSender) calcSizeOfSerializedThrift(thriftStruct thrift.TStruct) int { - s.thriftBuffer.Reset() - thriftStruct.Write(s.thriftProtocol) - return s.thriftBuffer.Len() -} - -func (s *udpSender) Append(span *Span) (int, error) { - if s.process == nil { - s.process = BuildJaegerProcessThrift(span) - s.processByteSize = s.calcSizeOfSerializedThrift(s.process) - s.byteBufferSize += s.processByteSize - } - jSpan := BuildJaegerThrift(span) - spanSize := s.calcSizeOfSerializedThrift(jSpan) - if spanSize > s.maxSpanBytes { - return 1, errSpanTooLarge - } - - s.byteBufferSize += spanSize - if s.byteBufferSize <= s.maxSpanBytes { - s.spanBuffer = append(s.spanBuffer, jSpan) - if s.byteBufferSize < s.maxSpanBytes { - return 0, nil - } - return s.Flush() - } - // the latest span did not fit in the buffer - n, err := s.Flush() - s.spanBuffer = append(s.spanBuffer, jSpan) - s.byteBufferSize = spanSize + s.processByteSize - return n, err -} - -func (s *udpSender) Flush() (int, error) { - n := len(s.spanBuffer) - if n == 0 { - return 0, nil - } - err := s.client.EmitBatch(&j.Batch{Process: s.process, Spans: s.spanBuffer}) - s.resetBuffers() - - return n, err -} - -func (s *udpSender) Close() error { - return s.client.Close() -} - -func (s *udpSender) resetBuffers() { - for i := range s.spanBuffer { - s.spanBuffer[i] = nil - } - s.spanBuffer = s.spanBuffer[:0] - s.byteBufferSize = s.processByteSize -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/http_json.go b/vendor/github.com/uber/jaeger-client-go/utils/http_json.go deleted file mode 100644 index 237211f8224b..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/http_json.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" -) - -// GetJSON makes an HTTP call to the specified URL and parses the returned JSON into `out`. -func GetJSON(url string, out interface{}) error { - resp, err := http.Get(url) - if err != nil { - return err - } - return ReadJSON(resp, out) -} - -// ReadJSON reads JSON from http.Response and parses it into `out` -func ReadJSON(resp *http.Response, out interface{}) error { - defer resp.Body.Close() - - if resp.StatusCode >= 400 { - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return err - } - - return fmt.Errorf("StatusCode: %d, Body: %s", resp.StatusCode, body) - } - - if out == nil { - io.Copy(ioutil.Discard, resp.Body) - return nil - } - - decoder := json.NewDecoder(resp.Body) - return decoder.Decode(out) -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/localip.go b/vendor/github.com/uber/jaeger-client-go/utils/localip.go deleted file mode 100644 index b51af7713f7c..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/localip.go +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "errors" - "net" -) - -// This code is borrowed from https://github.com/uber/tchannel-go/blob/dev/localip.go - -// scoreAddr scores how likely the given addr is to be a remote address and returns the -// IP to use when listening. Any address which receives a negative score should not be used. -// Scores are calculated as: -// -1 for any unknown IP addresses. -// +300 for IPv4 addresses -// +100 for non-local addresses, extra +100 for "up" interaces. -func scoreAddr(iface net.Interface, addr net.Addr) (int, net.IP) { - var ip net.IP - if netAddr, ok := addr.(*net.IPNet); ok { - ip = netAddr.IP - } else if netIP, ok := addr.(*net.IPAddr); ok { - ip = netIP.IP - } else { - return -1, nil - } - - var score int - if ip.To4() != nil { - score += 300 - } - if iface.Flags&net.FlagLoopback == 0 && !ip.IsLoopback() { - score += 100 - if iface.Flags&net.FlagUp != 0 { - score += 100 - } - } - return score, ip -} - -// HostIP tries to find an IP that can be used by other machines to reach this machine. -func HostIP() (net.IP, error) { - interfaces, err := net.Interfaces() - if err != nil { - return nil, err - } - - bestScore := -1 - var bestIP net.IP - // Select the highest scoring IP as the best IP. - for _, iface := range interfaces { - addrs, err := iface.Addrs() - if err != nil { - // Skip this interface if there is an error. - continue - } - - for _, addr := range addrs { - score, ip := scoreAddr(iface, addr) - if score > bestScore { - bestScore = score - bestIP = ip - } - } - } - - if bestScore == -1 { - return nil, errors.New("no addresses to listen on") - } - - return bestIP, nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/rand.go b/vendor/github.com/uber/jaeger-client-go/utils/rand.go deleted file mode 100644 index 9875f7f55cbd..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/rand.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "math/rand" - "sync" -) - -// lockedSource allows a random number generator to be used by multiple goroutines concurrently. -// The code is very similar to math/rand.lockedSource, which is unfortunately not exposed. -type lockedSource struct { - mut sync.Mutex - src rand.Source -} - -// NewRand returns a rand.Rand that is threadsafe. -func NewRand(seed int64) *rand.Rand { - return rand.New(&lockedSource{src: rand.NewSource(seed)}) -} - -func (r *lockedSource) Int63() (n int64) { - r.mut.Lock() - n = r.src.Int63() - r.mut.Unlock() - return -} - -// Seed implements Seed() of Source -func (r *lockedSource) Seed(seed int64) { - r.mut.Lock() - r.src.Seed(seed) - r.mut.Unlock() -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/rate_limiter.go b/vendor/github.com/uber/jaeger-client-go/utils/rate_limiter.go deleted file mode 100644 index 1b8db9758486..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/rate_limiter.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "sync" - "time" -) - -// RateLimiter is a filter used to check if a message that is worth itemCost units is within the rate limits. -type RateLimiter interface { - CheckCredit(itemCost float64) bool -} - -type rateLimiter struct { - sync.Mutex - - creditsPerSecond float64 - balance float64 - maxBalance float64 - lastTick time.Time - - timeNow func() time.Time -} - -// NewRateLimiter creates a new rate limiter based on leaky bucket algorithm, formulated in terms of a -// credits balance that is replenished every time CheckCredit() method is called (tick) by the amount proportional -// to the time elapsed since the last tick, up to max of creditsPerSecond. A call to CheckCredit() takes a cost -// of an item we want to pay with the balance. If the balance exceeds the cost of the item, the item is "purchased" -// and the balance reduced, indicated by returned value of true. Otherwise the balance is unchanged and return false. -// -// This can be used to limit a rate of messages emitted by a service by instantiating the Rate Limiter with the -// max number of messages a service is allowed to emit per second, and calling CheckCredit(1.0) for each message -// to determine if the message is within the rate limit. -// -// It can also be used to limit the rate of traffic in bytes, by setting creditsPerSecond to desired throughput -// as bytes/second, and calling CheckCredit() with the actual message size. -func NewRateLimiter(creditsPerSecond, maxBalance float64) RateLimiter { - return &rateLimiter{ - creditsPerSecond: creditsPerSecond, - balance: maxBalance, - maxBalance: maxBalance, - lastTick: time.Now(), - timeNow: time.Now} -} - -func (b *rateLimiter) CheckCredit(itemCost float64) bool { - b.Lock() - defer b.Unlock() - // calculate how much time passed since the last tick, and update current tick - currentTime := b.timeNow() - elapsedTime := currentTime.Sub(b.lastTick) - b.lastTick = currentTime - // calculate how much credit have we accumulated since the last tick - b.balance += elapsedTime.Seconds() * b.creditsPerSecond - if b.balance > b.maxBalance { - b.balance = b.maxBalance - } - // if we have enough credits to pay for current item, then reduce balance and allow - if b.balance >= itemCost { - b.balance -= itemCost - return true - } - return false -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/udp_client.go b/vendor/github.com/uber/jaeger-client-go/utils/udp_client.go deleted file mode 100644 index 6f042073d631..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/udp_client.go +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "errors" - "fmt" - "io" - "net" - - "github.com/uber/jaeger-client-go/thrift" - - "github.com/uber/jaeger-client-go/thrift-gen/agent" - "github.com/uber/jaeger-client-go/thrift-gen/jaeger" - "github.com/uber/jaeger-client-go/thrift-gen/zipkincore" -) - -// UDPPacketMaxLength is the max size of UDP packet we want to send, synced with jaeger-agent -const UDPPacketMaxLength = 65000 - -// AgentClientUDP is a UDP client to Jaeger agent that implements agent.Agent interface. -type AgentClientUDP struct { - agent.Agent - io.Closer - - connUDP *net.UDPConn - client *agent.AgentClient - maxPacketSize int // max size of datagram in bytes - thriftBuffer *thrift.TMemoryBuffer // buffer used to calculate byte size of a span -} - -// NewAgentClientUDP creates a client that sends spans to Jaeger Agent over UDP. -func NewAgentClientUDP(hostPort string, maxPacketSize int) (*AgentClientUDP, error) { - if maxPacketSize == 0 { - maxPacketSize = UDPPacketMaxLength - } - - thriftBuffer := thrift.NewTMemoryBufferLen(maxPacketSize) - protocolFactory := thrift.NewTCompactProtocolFactory() - client := agent.NewAgentClientFactory(thriftBuffer, protocolFactory) - - destAddr, err := net.ResolveUDPAddr("udp", hostPort) - if err != nil { - return nil, err - } - - connUDP, err := net.DialUDP(destAddr.Network(), nil, destAddr) - if err != nil { - return nil, err - } - if err := connUDP.SetWriteBuffer(maxPacketSize); err != nil { - return nil, err - } - - clientUDP := &AgentClientUDP{ - connUDP: connUDP, - client: client, - maxPacketSize: maxPacketSize, - thriftBuffer: thriftBuffer} - return clientUDP, nil -} - -// EmitZipkinBatch implements EmitZipkinBatch() of Agent interface -func (a *AgentClientUDP) EmitZipkinBatch(spans []*zipkincore.Span) error { - return errors.New("Not implemented") -} - -// EmitBatch implements EmitBatch() of Agent interface -func (a *AgentClientUDP) EmitBatch(batch *jaeger.Batch) error { - a.thriftBuffer.Reset() - a.client.SeqId = 0 // we have no need for distinct SeqIds for our one-way UDP messages - if err := a.client.EmitBatch(batch); err != nil { - return err - } - if a.thriftBuffer.Len() > a.maxPacketSize { - return fmt.Errorf("Data does not fit within one UDP packet; size %d, max %d, spans %d", - a.thriftBuffer.Len(), a.maxPacketSize, len(batch.Spans)) - } - _, err := a.connUDP.Write(a.thriftBuffer.Bytes()) - return err -} - -// Close implements Close() of io.Closer and closes the underlying UDP connection. -func (a *AgentClientUDP) Close() error { - return a.connUDP.Close() -} diff --git a/vendor/github.com/uber/jaeger-client-go/utils/utils.go b/vendor/github.com/uber/jaeger-client-go/utils/utils.go deleted file mode 100644 index ac3c325d1ede..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/utils/utils.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package utils - -import ( - "encoding/binary" - "errors" - "net" - "strconv" - "strings" - "time" -) - -var ( - // ErrEmptyIP an error for empty ip strings - ErrEmptyIP = errors.New("empty string given for ip") - - // ErrNotHostColonPort an error for invalid host port string - ErrNotHostColonPort = errors.New("expecting host:port") - - // ErrNotFourOctets an error for the wrong number of octets after splitting a string - ErrNotFourOctets = errors.New("Wrong number of octets") -) - -// ParseIPToUint32 converts a string ip (e.g. "x.y.z.w") to an uint32 -func ParseIPToUint32(ip string) (uint32, error) { - if ip == "" { - return 0, ErrEmptyIP - } - - if ip == "localhost" { - return 127<<24 | 1, nil - } - - octets := strings.Split(ip, ".") - if len(octets) != 4 { - return 0, ErrNotFourOctets - } - - var intIP uint32 - for i := 0; i < 4; i++ { - octet, err := strconv.Atoi(octets[i]) - if err != nil { - return 0, err - } - intIP = (intIP << 8) | uint32(octet) - } - - return intIP, nil -} - -// ParsePort converts port number from string to uin16 -func ParsePort(portString string) (uint16, error) { - port, err := strconv.ParseUint(portString, 10, 16) - return uint16(port), err -} - -// PackIPAsUint32 packs an IPv4 as uint32 -func PackIPAsUint32(ip net.IP) uint32 { - if ipv4 := ip.To4(); ipv4 != nil { - return binary.BigEndian.Uint32(ipv4) - } - return 0 -} - -// TimeToMicrosecondsSinceEpochInt64 converts Go time.Time to a long -// representing time since epoch in microseconds, which is used expected -// in the Jaeger spans encoded as Thrift. -func TimeToMicrosecondsSinceEpochInt64(t time.Time) int64 { - // ^^^ Passing time.Time by value is faster than passing a pointer! - // BenchmarkTimeByValue-8 2000000000 1.37 ns/op - // BenchmarkTimeByPtr-8 2000000000 1.98 ns/op - - return t.UnixNano() / 1000 -} diff --git a/vendor/github.com/uber/jaeger-client-go/zipkin.go b/vendor/github.com/uber/jaeger-client-go/zipkin.go deleted file mode 100644 index 636952b7f1d0..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/zipkin.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "github.com/opentracing/opentracing-go" -) - -// ZipkinSpanFormat is an OpenTracing carrier format constant -const ZipkinSpanFormat = "zipkin-span-format" - -// ExtractableZipkinSpan is a type of Carrier used for integration with Zipkin-aware -// RPC frameworks (like TChannel). It does not support baggage, only trace IDs. -type ExtractableZipkinSpan interface { - TraceID() uint64 - SpanID() uint64 - ParentID() uint64 - Flags() byte -} - -// InjectableZipkinSpan is a type of Carrier used for integration with Zipkin-aware -// RPC frameworks (like TChannel). It does not support baggage, only trace IDs. -type InjectableZipkinSpan interface { - SetTraceID(traceID uint64) - SetSpanID(spanID uint64) - SetParentID(parentID uint64) - SetFlags(flags byte) -} - -type zipkinPropagator struct { - tracer *Tracer -} - -func (p *zipkinPropagator) Inject( - ctx SpanContext, - abstractCarrier interface{}, -) error { - carrier, ok := abstractCarrier.(InjectableZipkinSpan) - if !ok { - return opentracing.ErrInvalidCarrier - } - - carrier.SetTraceID(ctx.TraceID().Low) // TODO this cannot work with 128bit IDs - carrier.SetSpanID(uint64(ctx.SpanID())) - carrier.SetParentID(uint64(ctx.ParentID())) - carrier.SetFlags(ctx.flags) - return nil -} - -func (p *zipkinPropagator) Extract(abstractCarrier interface{}) (SpanContext, error) { - carrier, ok := abstractCarrier.(ExtractableZipkinSpan) - if !ok { - return emptyContext, opentracing.ErrInvalidCarrier - } - if carrier.TraceID() == 0 { - return emptyContext, opentracing.ErrSpanContextNotFound - } - var ctx SpanContext - ctx.traceID.Low = carrier.TraceID() - ctx.spanID = SpanID(carrier.SpanID()) - ctx.parentID = SpanID(carrier.ParentID()) - ctx.flags = carrier.Flags() - return ctx, nil -} diff --git a/vendor/github.com/uber/jaeger-client-go/zipkin_thrift_span.go b/vendor/github.com/uber/jaeger-client-go/zipkin_thrift_span.go deleted file mode 100644 index dce58b4331c4..000000000000 --- a/vendor/github.com/uber/jaeger-client-go/zipkin_thrift_span.go +++ /dev/null @@ -1,322 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package jaeger - -import ( - "encoding/binary" - "fmt" - "time" - - "github.com/opentracing/opentracing-go/ext" - - "github.com/uber/jaeger-client-go/internal/spanlog" - z "github.com/uber/jaeger-client-go/thrift-gen/zipkincore" - "github.com/uber/jaeger-client-go/utils" -) - -const ( - // Zipkin UI does not work well with non-string tag values - allowPackedNumbers = false -) - -var specialTagHandlers = map[string]func(*zipkinSpan, interface{}){ - string(ext.SpanKind): setSpanKind, - string(ext.PeerHostIPv4): setPeerIPv4, - string(ext.PeerPort): setPeerPort, - string(ext.PeerService): setPeerService, - TracerIPTagKey: removeTag, -} - -// BuildZipkinThrift builds thrift span based on internal span. -func BuildZipkinThrift(s *Span) *z.Span { - span := &zipkinSpan{Span: s} - span.handleSpecialTags() - parentID := int64(span.context.parentID) - var ptrParentID *int64 - if parentID != 0 { - ptrParentID = &parentID - } - timestamp := utils.TimeToMicrosecondsSinceEpochInt64(span.startTime) - duration := span.duration.Nanoseconds() / int64(time.Microsecond) - endpoint := &z.Endpoint{ - ServiceName: span.tracer.serviceName, - Ipv4: int32(span.tracer.hostIPv4)} - thriftSpan := &z.Span{ - TraceID: int64(span.context.traceID.Low), // TODO upgrade zipkin thrift and use TraceIdHigh - ID: int64(span.context.spanID), - ParentID: ptrParentID, - Name: span.operationName, - Timestamp: ×tamp, - Duration: &duration, - Debug: span.context.IsDebug(), - Annotations: buildAnnotations(span, endpoint), - BinaryAnnotations: buildBinaryAnnotations(span, endpoint)} - return thriftSpan -} - -func buildAnnotations(span *zipkinSpan, endpoint *z.Endpoint) []*z.Annotation { - // automatically adding 2 Zipkin CoreAnnotations - annotations := make([]*z.Annotation, 0, 2+len(span.logs)) - var startLabel, endLabel string - if span.spanKind == string(ext.SpanKindRPCClientEnum) { - startLabel, endLabel = z.CLIENT_SEND, z.CLIENT_RECV - } else if span.spanKind == string(ext.SpanKindRPCServerEnum) { - startLabel, endLabel = z.SERVER_RECV, z.SERVER_SEND - } - if !span.startTime.IsZero() && startLabel != "" { - start := &z.Annotation{ - Timestamp: utils.TimeToMicrosecondsSinceEpochInt64(span.startTime), - Value: startLabel, - Host: endpoint} - annotations = append(annotations, start) - if span.duration != 0 { - endTs := span.startTime.Add(span.duration) - end := &z.Annotation{ - Timestamp: utils.TimeToMicrosecondsSinceEpochInt64(endTs), - Value: endLabel, - Host: endpoint} - annotations = append(annotations, end) - } - } - for _, log := range span.logs { - anno := &z.Annotation{ - Timestamp: utils.TimeToMicrosecondsSinceEpochInt64(log.Timestamp), - Host: endpoint} - if content, err := spanlog.MaterializeWithJSON(log.Fields); err == nil { - anno.Value = truncateString(string(content), span.tracer.options.maxTagValueLength) - } else { - anno.Value = err.Error() - } - annotations = append(annotations, anno) - } - return annotations -} - -func buildBinaryAnnotations(span *zipkinSpan, endpoint *z.Endpoint) []*z.BinaryAnnotation { - // automatically adding local component or server/client address tag, and client version - annotations := make([]*z.BinaryAnnotation, 0, 2+len(span.tags)) - - if span.peerDefined() && span.isRPC() { - peer := z.Endpoint{ - Ipv4: span.peer.Ipv4, - Port: span.peer.Port, - ServiceName: span.peer.ServiceName} - label := z.CLIENT_ADDR - if span.isRPCClient() { - label = z.SERVER_ADDR - } - anno := &z.BinaryAnnotation{ - Key: label, - Value: []byte{1}, - AnnotationType: z.AnnotationType_BOOL, - Host: &peer} - annotations = append(annotations, anno) - } - if !span.isRPC() { - componentName := endpoint.ServiceName - for _, tag := range span.tags { - if tag.key == string(ext.Component) { - componentName = stringify(tag.value) - break - } - } - local := &z.BinaryAnnotation{ - Key: z.LOCAL_COMPONENT, - Value: []byte(componentName), - AnnotationType: z.AnnotationType_STRING, - Host: endpoint} - annotations = append(annotations, local) - } - for _, tag := range span.tags { - // "Special tags" are already handled by this point, we'd be double reporting the - // tags if we don't skip here - if _, ok := specialTagHandlers[tag.key]; ok { - continue - } - if anno := buildBinaryAnnotation(tag.key, tag.value, span.tracer.options.maxTagValueLength, nil); anno != nil { - annotations = append(annotations, anno) - } - } - return annotations -} - -func buildBinaryAnnotation(key string, val interface{}, maxTagValueLength int, endpoint *z.Endpoint) *z.BinaryAnnotation { - bann := &z.BinaryAnnotation{Key: key, Host: endpoint} - if value, ok := val.(string); ok { - bann.Value = []byte(truncateString(value, maxTagValueLength)) - bann.AnnotationType = z.AnnotationType_STRING - } else if value, ok := val.([]byte); ok { - if len(value) > maxTagValueLength { - value = value[:maxTagValueLength] - } - bann.Value = value - bann.AnnotationType = z.AnnotationType_BYTES - } else if value, ok := val.(int32); ok && allowPackedNumbers { - bann.Value = int32ToBytes(value) - bann.AnnotationType = z.AnnotationType_I32 - } else if value, ok := val.(int64); ok && allowPackedNumbers { - bann.Value = int64ToBytes(value) - bann.AnnotationType = z.AnnotationType_I64 - } else if value, ok := val.(int); ok && allowPackedNumbers { - bann.Value = int64ToBytes(int64(value)) - bann.AnnotationType = z.AnnotationType_I64 - } else if value, ok := val.(bool); ok { - bann.Value = []byte{boolToByte(value)} - bann.AnnotationType = z.AnnotationType_BOOL - } else { - value := stringify(val) - bann.Value = []byte(truncateString(value, maxTagValueLength)) - bann.AnnotationType = z.AnnotationType_STRING - } - return bann -} - -func stringify(value interface{}) string { - if s, ok := value.(string); ok { - return s - } - return fmt.Sprintf("%+v", value) -} - -func truncateString(value string, maxLength int) string { - // we ignore the problem of utf8 runes possibly being sliced in the middle, - // as it is rather expensive to iterate through each tag just to find rune - // boundaries. - if len(value) > maxLength { - return value[:maxLength] - } - return value -} - -func boolToByte(b bool) byte { - if b { - return 1 - } - return 0 -} - -// int32ToBytes converts int32 to bytes. -func int32ToBytes(i int32) []byte { - buf := make([]byte, 4) - binary.BigEndian.PutUint32(buf, uint32(i)) - return buf -} - -// int64ToBytes converts int64 to bytes. -func int64ToBytes(i int64) []byte { - buf := make([]byte, 8) - binary.BigEndian.PutUint64(buf, uint64(i)) - return buf -} - -type zipkinSpan struct { - *Span - - // peer points to the peer service participating in this span, - // e.g. the Client if this span is a server span, - // or Server if this span is a client span - peer struct { - Ipv4 int32 - Port int16 - ServiceName string - } - - // used to distinguish local vs. RPC Server vs. RPC Client spans - spanKind string -} - -func (s *zipkinSpan) handleSpecialTags() { - s.Lock() - defer s.Unlock() - if s.firstInProcess { - // append the process tags - s.tags = append(s.tags, s.tracer.tags...) - } - filteredTags := make([]Tag, 0, len(s.tags)) - for _, tag := range s.tags { - if handler, ok := specialTagHandlers[tag.key]; ok { - handler(s, tag.value) - } else { - filteredTags = append(filteredTags, tag) - } - } - s.tags = filteredTags -} - -func setSpanKind(s *zipkinSpan, value interface{}) { - if val, ok := value.(string); ok { - s.spanKind = val - return - } - if val, ok := value.(ext.SpanKindEnum); ok { - s.spanKind = string(val) - } -} - -func setPeerIPv4(s *zipkinSpan, value interface{}) { - if val, ok := value.(string); ok { - if ip, err := utils.ParseIPToUint32(val); err == nil { - s.peer.Ipv4 = int32(ip) - return - } - } - if val, ok := value.(uint32); ok { - s.peer.Ipv4 = int32(val) - return - } - if val, ok := value.(int32); ok { - s.peer.Ipv4 = val - } -} - -func setPeerPort(s *zipkinSpan, value interface{}) { - if val, ok := value.(string); ok { - if port, err := utils.ParsePort(val); err == nil { - s.peer.Port = int16(port) - return - } - } - if val, ok := value.(uint16); ok { - s.peer.Port = int16(val) - return - } - if val, ok := value.(int); ok { - s.peer.Port = int16(val) - } -} - -func setPeerService(s *zipkinSpan, value interface{}) { - if val, ok := value.(string); ok { - s.peer.ServiceName = val - } -} - -func removeTag(s *zipkinSpan, value interface{}) {} - -func (s *zipkinSpan) peerDefined() bool { - return s.peer.ServiceName != "" || s.peer.Ipv4 != 0 || s.peer.Port != 0 -} - -func (s *zipkinSpan) isRPC() bool { - s.RLock() - defer s.RUnlock() - return s.spanKind == string(ext.SpanKindRPCClientEnum) || s.spanKind == string(ext.SpanKindRPCServerEnum) -} - -func (s *zipkinSpan) isRPCClient() bool { - s.RLock() - defer s.RUnlock() - return s.spanKind == string(ext.SpanKindRPCClientEnum) -} diff --git a/vendor/github.com/uber/jaeger-lib/LICENSE b/vendor/github.com/uber/jaeger-lib/LICENSE deleted file mode 100644 index 261eeb9e9f8b..000000000000 --- a/vendor/github.com/uber/jaeger-lib/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/uber/jaeger-lib/metrics/factory.go b/vendor/github.com/uber/jaeger-lib/metrics/factory.go deleted file mode 100644 index a744a890df3d..000000000000 --- a/vendor/github.com/uber/jaeger-lib/metrics/factory.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -// Factory creates new metrics -type Factory interface { - Counter(name string, tags map[string]string) Counter - Timer(name string, tags map[string]string) Timer - Gauge(name string, tags map[string]string) Gauge - - // Namespace returns a nested metrics factory. - Namespace(name string, tags map[string]string) Factory -} - -// NullFactory is a metrics factory that returns NullCounter, NullTimer, and NullGauge. -var NullFactory Factory = nullFactory{} - -type nullFactory struct{} - -func (nullFactory) Counter(name string, tags map[string]string) Counter { return NullCounter } -func (nullFactory) Timer(name string, tags map[string]string) Timer { return NullTimer } -func (nullFactory) Gauge(name string, tags map[string]string) Gauge { return NullGauge } -func (nullFactory) Namespace(name string, tags map[string]string) Factory { return NullFactory } diff --git a/vendor/github.com/uber/jaeger-lib/metrics/local.go b/vendor/github.com/uber/jaeger-lib/metrics/local.go deleted file mode 100644 index 217d30600a0b..000000000000 --- a/vendor/github.com/uber/jaeger-lib/metrics/local.go +++ /dev/null @@ -1,337 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "sort" - "sync" - "sync/atomic" - "time" - - "github.com/codahale/hdrhistogram" -) - -// This is intentionally very similar to github.com/codahale/metrics, the -// main difference being that counters/gauges are scoped to the provider -// rather than being global (to facilitate testing). - -// A LocalBackend is a metrics provider which aggregates data in-vm, and -// allows exporting snapshots to shove the data into a remote collector -type LocalBackend struct { - cm sync.Mutex - gm sync.Mutex - tm sync.Mutex - counters map[string]*int64 - gauges map[string]*int64 - timers map[string]*localBackendTimer - stop chan struct{} - wg sync.WaitGroup - TagsSep string - TagKVSep string -} - -// NewLocalBackend returns a new LocalBackend. The collectionInterval is the histogram -// time window for each timer. -func NewLocalBackend(collectionInterval time.Duration) *LocalBackend { - b := &LocalBackend{ - counters: make(map[string]*int64), - gauges: make(map[string]*int64), - timers: make(map[string]*localBackendTimer), - stop: make(chan struct{}), - TagsSep: "|", - TagKVSep: "=", - } - if collectionInterval == 0 { - // Use one histogram time window for all timers - return b - } - b.wg.Add(1) - go b.runLoop(collectionInterval) - return b -} - -// Clear discards accumulated stats -func (b *LocalBackend) Clear() { - b.cm.Lock() - defer b.cm.Unlock() - b.gm.Lock() - defer b.gm.Unlock() - b.tm.Lock() - defer b.tm.Unlock() - b.counters = make(map[string]*int64) - b.gauges = make(map[string]*int64) - b.timers = make(map[string]*localBackendTimer) -} - -func (b *LocalBackend) runLoop(collectionInterval time.Duration) { - defer b.wg.Done() - ticker := time.NewTicker(collectionInterval) - for { - select { - case <-ticker.C: - b.tm.Lock() - timers := make(map[string]*localBackendTimer, len(b.timers)) - for timerName, timer := range b.timers { - timers[timerName] = timer - } - b.tm.Unlock() - - for _, t := range timers { - t.Lock() - t.hist.Rotate() - t.Unlock() - } - case <-b.stop: - ticker.Stop() - return - } - } -} - -// IncCounter increments a counter value -func (b *LocalBackend) IncCounter(name string, tags map[string]string, delta int64) { - name = GetKey(name, tags, b.TagsSep, b.TagKVSep) - b.cm.Lock() - defer b.cm.Unlock() - counter := b.counters[name] - if counter == nil { - b.counters[name] = new(int64) - *b.counters[name] = delta - return - } - atomic.AddInt64(counter, delta) -} - -// UpdateGauge updates the value of a gauge -func (b *LocalBackend) UpdateGauge(name string, tags map[string]string, value int64) { - name = GetKey(name, tags, b.TagsSep, b.TagKVSep) - b.gm.Lock() - defer b.gm.Unlock() - gauge := b.gauges[name] - if gauge == nil { - b.gauges[name] = new(int64) - *b.gauges[name] = value - return - } - atomic.StoreInt64(gauge, value) -} - -// RecordTimer records a timing duration -func (b *LocalBackend) RecordTimer(name string, tags map[string]string, d time.Duration) { - name = GetKey(name, tags, b.TagsSep, b.TagKVSep) - timer := b.findOrCreateTimer(name) - timer.Lock() - timer.hist.Current.RecordValue(int64(d / time.Millisecond)) - timer.Unlock() -} - -func (b *LocalBackend) findOrCreateTimer(name string) *localBackendTimer { - b.tm.Lock() - defer b.tm.Unlock() - if t, ok := b.timers[name]; ok { - return t - } - - t := &localBackendTimer{ - hist: hdrhistogram.NewWindowed(5, 0, int64((5*time.Minute)/time.Millisecond), 1), - } - b.timers[name] = t - return t -} - -type localBackendTimer struct { - sync.Mutex - hist *hdrhistogram.WindowedHistogram -} - -var ( - percentiles = map[string]float64{ - "P50": 50, - "P75": 75, - "P90": 90, - "P95": 95, - "P99": 99, - "P999": 99.9, - } -) - -// Snapshot captures a snapshot of the current counter and gauge values -func (b *LocalBackend) Snapshot() (counters, gauges map[string]int64) { - b.cm.Lock() - defer b.cm.Unlock() - - counters = make(map[string]int64, len(b.counters)) - for name, value := range b.counters { - counters[name] = atomic.LoadInt64(value) - } - - b.gm.Lock() - defer b.gm.Unlock() - - gauges = make(map[string]int64, len(b.gauges)) - for name, value := range b.gauges { - gauges[name] = atomic.LoadInt64(value) - } - - b.tm.Lock() - timers := make(map[string]*localBackendTimer) - for timerName, timer := range b.timers { - timers[timerName] = timer - } - b.tm.Unlock() - - for timerName, timer := range timers { - timer.Lock() - hist := timer.hist.Merge() - timer.Unlock() - for name, q := range percentiles { - gauges[timerName+"."+name] = hist.ValueAtQuantile(q) - } - } - - return -} - -// Stop cleanly closes the background goroutine spawned by NewLocalBackend. -func (b *LocalBackend) Stop() { - close(b.stop) - b.wg.Wait() -} - -// GetKey converts name+tags into a single string of the form -// "name|tag1=value1|...|tagN=valueN", where tag names are -// sorted alphabetically. -func GetKey(name string, tags map[string]string, tagsSep string, tagKVSep string) string { - keys := make([]string, 0, len(tags)) - for k := range tags { - keys = append(keys, k) - } - sort.Strings(keys) - key := name - for _, k := range keys { - key = key + tagsSep + k + tagKVSep + tags[k] - } - return key -} - -type stats struct { - name string - tags map[string]string - localBackend *LocalBackend -} - -type localTimer struct { - stats -} - -func (l *localTimer) Record(d time.Duration) { - l.localBackend.RecordTimer(l.name, l.tags, d) -} - -type localCounter struct { - stats -} - -func (l *localCounter) Inc(delta int64) { - l.localBackend.IncCounter(l.name, l.tags, delta) -} - -type localGauge struct { - stats -} - -func (l *localGauge) Update(value int64) { - l.localBackend.UpdateGauge(l.name, l.tags, value) -} - -// LocalFactory stats factory that creates metrics that are stored locally -type LocalFactory struct { - *LocalBackend - namespace string - tags map[string]string -} - -// NewLocalFactory returns a new LocalMetricsFactory -func NewLocalFactory(collectionInterval time.Duration) *LocalFactory { - return &LocalFactory{ - LocalBackend: NewLocalBackend(collectionInterval), - } -} - -// appendTags adds the tags to the namespace tags and returns a combined map. -func (l *LocalFactory) appendTags(tags map[string]string) map[string]string { - newTags := make(map[string]string) - for k, v := range l.tags { - newTags[k] = v - } - for k, v := range tags { - newTags[k] = v - } - return newTags -} - -func (l *LocalFactory) newNamespace(name string) string { - if l.namespace == "" { - return name - } - - if name == "" { - return l.namespace - } - - return l.namespace + "." + name -} - -// Counter returns a local stats counter -func (l *LocalFactory) Counter(name string, tags map[string]string) Counter { - return &localCounter{ - stats{ - name: l.newNamespace(name), - tags: l.appendTags(tags), - localBackend: l.LocalBackend, - }, - } -} - -// Timer returns a local stats timer. -func (l *LocalFactory) Timer(name string, tags map[string]string) Timer { - return &localTimer{ - stats{ - name: l.newNamespace(name), - tags: l.appendTags(tags), - localBackend: l.LocalBackend, - }, - } -} - -// Gauge returns a local stats gauge. -func (l *LocalFactory) Gauge(name string, tags map[string]string) Gauge { - return &localGauge{ - stats{ - name: l.newNamespace(name), - tags: l.appendTags(tags), - localBackend: l.LocalBackend, - }, - } -} - -// Namespace returns a new namespace. -func (l *LocalFactory) Namespace(name string, tags map[string]string) Factory { - return &LocalFactory{ - namespace: l.newNamespace(name), - tags: l.appendTags(tags), - LocalBackend: l.LocalBackend, - } -} diff --git a/vendor/github.com/uber/jaeger-lib/metrics/metrics.go b/vendor/github.com/uber/jaeger-lib/metrics/metrics.go deleted file mode 100644 index 0b97707b075e..000000000000 --- a/vendor/github.com/uber/jaeger-lib/metrics/metrics.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "fmt" - "reflect" - "strings" -) - -// Init initializes the passed in metrics and initializes its fields using the passed in factory. -func Init(metrics interface{}, factory Factory, globalTags map[string]string) { - if err := initMetrics(metrics, factory, globalTags); err != nil { - panic(err.Error()) - } -} - -// initMetrics uses reflection to initialize a struct containing metrics fields -// by assigning new Counter/Gauge/Timer values with the metric name retrieved -// from the `metric` tag and stats tags retrieved from the `tags` tag. -// -// Note: all fields of the struct must be exported, have a `metric` tag, and be -// of type Counter or Gauge or Timer. -func initMetrics(m interface{}, factory Factory, globalTags map[string]string) error { - // Allow user to opt out of reporting metrics by passing in nil. - if factory == nil { - factory = NullFactory - } - - counterPtrType := reflect.TypeOf((*Counter)(nil)).Elem() - gaugePtrType := reflect.TypeOf((*Gauge)(nil)).Elem() - timerPtrType := reflect.TypeOf((*Timer)(nil)).Elem() - - v := reflect.ValueOf(m).Elem() - t := v.Type() - for i := 0; i < t.NumField(); i++ { - tags := make(map[string]string) - for k, v := range globalTags { - tags[k] = v - } - field := t.Field(i) - metric := field.Tag.Get("metric") - if metric == "" { - return fmt.Errorf("Field %s is missing a tag 'metric'", field.Name) - } - if tagString := field.Tag.Get("tags"); tagString != "" { - tagPairs := strings.Split(tagString, ",") - for _, tagPair := range tagPairs { - tag := strings.Split(tagPair, "=") - if len(tag) != 2 { - return fmt.Errorf( - "Field [%s]: Tag [%s] is not of the form key=value in 'tags' string [%s]", - field.Name, tagPair, tagString) - } - tags[tag[0]] = tag[1] - } - } - var obj interface{} - if field.Type.AssignableTo(counterPtrType) { - obj = factory.Counter(metric, tags) - } else if field.Type.AssignableTo(gaugePtrType) { - obj = factory.Gauge(metric, tags) - } else if field.Type.AssignableTo(timerPtrType) { - obj = factory.Timer(metric, tags) - } else { - return fmt.Errorf( - "Field %s is not a pointer to timer, gauge, or counter", - field.Name) - } - v.Field(i).Set(reflect.ValueOf(obj)) - } - return nil -} diff --git a/vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go b/vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go deleted file mode 100644 index 4a8abdb539f9..000000000000 --- a/vendor/github.com/uber/jaeger-lib/metrics/stopwatch.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "time" -) - -// StartStopwatch begins recording the executing time of an event, returning -// a Stopwatch that should be used to stop the recording the time for -// that event. Multiple events can be occurring simultaneously each -// represented by different active Stopwatches -func StartStopwatch(timer Timer) Stopwatch { - return Stopwatch{t: timer, start: time.Now()} -} - -// A Stopwatch tracks the execution time of a specific event -type Stopwatch struct { - t Timer - start time.Time -} - -// Stop stops executing of the stopwatch and records the amount of elapsed time -func (s Stopwatch) Stop() { - s.t.Record(s.ElapsedTime()) -} - -// ElapsedTime returns the amount of elapsed time (in time.Duration) -func (s Stopwatch) ElapsedTime() time.Duration { - return time.Since(s.start) -} diff --git a/vendor/github.com/uber/jaeger-lib/metrics/timer.go b/vendor/github.com/uber/jaeger-lib/metrics/timer.go deleted file mode 100644 index e18d222abb4a..000000000000 --- a/vendor/github.com/uber/jaeger-lib/metrics/timer.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2017 Uber Technologies, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package metrics - -import ( - "time" -) - -// Timer accumulates observations about how long some operation took, -// and also maintains a historgam of percentiles. -type Timer interface { - // Records the time passed in. - Record(time.Duration) -} - -// NullTimer timer that does nothing -var NullTimer Timer = nullTimer{} - -type nullTimer struct{} - -func (nullTimer) Record(time.Duration) {} diff --git a/vendor/github.com/wsddn/go-ecdh/LICENSE b/vendor/github.com/wsddn/go-ecdh/LICENSE new file mode 100644 index 000000000000..c16b0acf7a19 --- /dev/null +++ b/vendor/github.com/wsddn/go-ecdh/LICENSE @@ -0,0 +1,24 @@ +Copyright (c) 2014, tang0th +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of tang0th nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/wsddn/go-ecdh/Readme.md b/vendor/github.com/wsddn/go-ecdh/Readme.md new file mode 100644 index 000000000000..1445f68b16a5 --- /dev/null +++ b/vendor/github.com/wsddn/go-ecdh/Readme.md @@ -0,0 +1,19 @@ +# ECDH + +[![Build Status](https://travis-ci.org/wsddn/go-ecdh.svg?branch=master)](https://travis-ci.org/wsddn/go-ecdh) + +This is a go implementation of elliptical curve diffie-hellman key exchange method. +It supports the NIST curves (and any curves using the `elliptic.Curve` go interface) +as well as djb's curve25519. + +The library handles generating of keys, generating a shared secret, and the +(un)marshalling of the elliptical curve keys into slices of bytes. + +## Warning and Disclaimer +I am not a cryptographer, this was written as part of a personal project to learn about cryptographic systems and protocols. No claims as to the security of this library are made, I would not advise using it for anything that requires any level of security. Pull requests or issues about security flaws are however still welcome. + +## Compatibility +Works with go 1.2 onwards. + +## TODO + * Improve documentation diff --git a/vendor/github.com/wsddn/go-ecdh/curve25519.go b/vendor/github.com/wsddn/go-ecdh/curve25519.go new file mode 100644 index 000000000000..6426cbf8a25e --- /dev/null +++ b/vendor/github.com/wsddn/go-ecdh/curve25519.go @@ -0,0 +1,62 @@ +package ecdh + +import ( + "crypto" + "io" + + "golang.org/x/crypto/curve25519" +) + +type curve25519ECDH struct { + ECDH +} + +// NewCurve25519ECDH creates a new ECDH instance that uses djb's curve25519 +// elliptical curve. +func NewCurve25519ECDH() ECDH { + return &curve25519ECDH{} +} + +func (e *curve25519ECDH) GenerateKey(rand io.Reader) (crypto.PrivateKey, crypto.PublicKey, error) { + var pub, priv [32]byte + var err error + + _, err = io.ReadFull(rand, priv[:]) + if err != nil { + return nil, nil, err + } + + priv[0] &= 248 + priv[31] &= 127 + priv[31] |= 64 + + curve25519.ScalarBaseMult(&pub, &priv) + + return &priv, &pub, nil +} + +func (e *curve25519ECDH) Marshal(p crypto.PublicKey) []byte { + pub := p.(*[32]byte) + return pub[:] +} + +func (e *curve25519ECDH) Unmarshal(data []byte) (crypto.PublicKey, bool) { + var pub [32]byte + if len(data) != 32 { + return nil, false + } + + copy(pub[:], data) + return &pub, true +} + +func (e *curve25519ECDH) GenerateSharedSecret(privKey crypto.PrivateKey, pubKey crypto.PublicKey) ([]byte, error) { + var priv, pub, secret *[32]byte + + priv = privKey.(*[32]byte) + pub = pubKey.(*[32]byte) + secret = new([32]byte) + + curve25519.ScalarMult(secret, priv, pub) + return secret[:], nil +} diff --git a/vendor/github.com/wsddn/go-ecdh/ecdh.go b/vendor/github.com/wsddn/go-ecdh/ecdh.go new file mode 100644 index 000000000000..921754fdcc22 --- /dev/null +++ b/vendor/github.com/wsddn/go-ecdh/ecdh.go @@ -0,0 +1,14 @@ +package ecdh + +import ( + "crypto" + "io" +) + +// The main interface for ECDH key exchange. +type ECDH interface { + GenerateKey(io.Reader) (crypto.PrivateKey, crypto.PublicKey, error) + Marshal(crypto.PublicKey) []byte + Unmarshal([]byte) (crypto.PublicKey, bool) + GenerateSharedSecret(crypto.PrivateKey, crypto.PublicKey) ([]byte, error) +} diff --git a/vendor/github.com/wsddn/go-ecdh/elliptic.go b/vendor/github.com/wsddn/go-ecdh/elliptic.go new file mode 100644 index 000000000000..502563c40966 --- /dev/null +++ b/vendor/github.com/wsddn/go-ecdh/elliptic.go @@ -0,0 +1,87 @@ +package ecdh + +import ( + "crypto" + "crypto/elliptic" + "io" + "math/big" +) + +type ellipticECDH struct { + ECDH + curve elliptic.Curve +} + +type ellipticPublicKey struct { + elliptic.Curve + X, Y *big.Int +} + +type ellipticPrivateKey struct { + D []byte +} + +// NewEllipticECDH creates a new instance of ECDH with the given elliptic.Curve curve +// to use as the elliptical curve for elliptical curve diffie-hellman. +func NewEllipticECDH(curve elliptic.Curve) ECDH { + return &ellipticECDH{ + curve: curve, + } +} + +func (e *ellipticECDH) GenerateKey(rand io.Reader) (crypto.PrivateKey, crypto.PublicKey, error) { + var d []byte + var x, y *big.Int + var priv *ellipticPrivateKey + var pub *ellipticPublicKey + var err error + + d, x, y, err = elliptic.GenerateKey(e.curve, rand) + if err != nil { + return nil, nil, err + } + + priv = &ellipticPrivateKey{ + D: d, + } + pub = &ellipticPublicKey{ + Curve: e.curve, + X: x, + Y: y, + } + + return priv, pub, nil +} + +func (e *ellipticECDH) Marshal(p crypto.PublicKey) []byte { + pub := p.(*ellipticPublicKey) + return elliptic.Marshal(e.curve, pub.X, pub.Y) +} + +func (e *ellipticECDH) Unmarshal(data []byte) (crypto.PublicKey, bool) { + var key *ellipticPublicKey + var x, y *big.Int + + x, y = elliptic.Unmarshal(e.curve, data) + if x == nil || y == nil { + return key, false + } + key = &ellipticPublicKey{ + Curve: e.curve, + X: x, + Y: y, + } + return key, true +} + +// GenerateSharedSecret takes in a public key and a private key +// and generates a shared secret. +// +// RFC5903 Section 9 states we should only return x. +func (e *ellipticECDH) GenerateSharedSecret(privKey crypto.PrivateKey, pubKey crypto.PublicKey) ([]byte, error) { + priv := privKey.(*ellipticPrivateKey) + pub := pubKey.(*ellipticPublicKey) + + x, _ := e.curve.ScalarMult(pub.X, pub.Y, priv.D) + return x.Bytes(), nil +} diff --git a/vendor/golang.org/x/net/.gitattributes b/vendor/golang.org/x/net/.gitattributes deleted file mode 100644 index d2f212e5da80..000000000000 --- a/vendor/golang.org/x/net/.gitattributes +++ /dev/null @@ -1,10 +0,0 @@ -# Treat all files in this repo as binary, with no git magic updating -# line endings. Windows users contributing to Go will need to use a -# modern version of git and editors capable of LF line endings. -# -# We'll prevent accidental CRLF line endings from entering the repo -# via the git-review gofmt checks. -# -# See golang.org/issue/9281 - -* -text diff --git a/vendor/golang.org/x/net/.gitignore b/vendor/golang.org/x/net/.gitignore deleted file mode 100644 index 8339fd61d3f4..000000000000 --- a/vendor/golang.org/x/net/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Add no patterns to .hgignore except for files generated by the build. -last-change diff --git a/vendor/golang.org/x/net/AUTHORS b/vendor/golang.org/x/net/AUTHORS deleted file mode 100644 index 15167cd746c5..000000000000 --- a/vendor/golang.org/x/net/AUTHORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code refers to The Go Authors for copyright purposes. -# The master list of authors is in the main Go distribution, -# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/net/CONTRIBUTING.md b/vendor/golang.org/x/net/CONTRIBUTING.md deleted file mode 100644 index 88dff59bc7d2..000000000000 --- a/vendor/golang.org/x/net/CONTRIBUTING.md +++ /dev/null @@ -1,31 +0,0 @@ -# Contributing to Go - -Go is an open source project. - -It is the work of hundreds of contributors. We appreciate your help! - - -## Filing issues - -When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: - -1. What version of Go are you using (`go version`)? -2. What operating system and processor architecture are you using? -3. What did you do? -4. What did you expect to see? -5. What did you see instead? - -General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. -The gophers there will answer or ask you to file an issue if you've tripped over a bug. - -## Contributing code - -Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) -before sending patches. - -**We do not accept GitHub pull requests** -(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). - -Unless otherwise noted, the Go source files are distributed under -the BSD-style license found in the LICENSE file. - diff --git a/vendor/golang.org/x/net/CONTRIBUTORS b/vendor/golang.org/x/net/CONTRIBUTORS deleted file mode 100644 index 1c4577e96806..000000000000 --- a/vendor/golang.org/x/net/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -# This source code was written by the Go contributors. -# The master list of contributors is in the main Go distribution, -# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/net/README b/vendor/golang.org/x/net/README deleted file mode 100644 index 6b13d8e50502..000000000000 --- a/vendor/golang.org/x/net/README +++ /dev/null @@ -1,3 +0,0 @@ -This repository holds supplementary Go networking libraries. - -To submit changes to this repository, see http://golang.org/doc/contribute.html. diff --git a/vendor/golang.org/x/net/codereview.cfg b/vendor/golang.org/x/net/codereview.cfg deleted file mode 100644 index 3f8b14b64e83..000000000000 --- a/vendor/golang.org/x/net/codereview.cfg +++ /dev/null @@ -1 +0,0 @@ -issuerepo: golang/go diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go index f143ed6a1eb0..a3c021d3f88e 100644 --- a/vendor/golang.org/x/net/context/context.go +++ b/vendor/golang.org/x/net/context/context.go @@ -5,6 +5,8 @@ // Package context defines the Context type, which carries deadlines, // cancelation signals, and other request-scoped values across API boundaries // and between processes. +// As of Go 1.7 this package is available in the standard library under the +// name context. https://golang.org/pkg/context. // // Incoming requests to a server should create a Context, and outgoing calls to // servers should accept a Context. The chain of function calls between must @@ -36,103 +38,6 @@ // Contexts. package context // import "golang.org/x/net/context" -import "time" - -// A Context carries a deadline, a cancelation signal, and other values across -// API boundaries. -// -// Context's methods may be called by multiple goroutines simultaneously. -type Context interface { - // Deadline returns the time when work done on behalf of this context - // should be canceled. Deadline returns ok==false when no deadline is - // set. Successive calls to Deadline return the same results. - Deadline() (deadline time.Time, ok bool) - - // Done returns a channel that's closed when work done on behalf of this - // context should be canceled. Done may return nil if this context can - // never be canceled. Successive calls to Done return the same value. - // - // WithCancel arranges for Done to be closed when cancel is called; - // WithDeadline arranges for Done to be closed when the deadline - // expires; WithTimeout arranges for Done to be closed when the timeout - // elapses. - // - // Done is provided for use in select statements: - // - // // Stream generates values with DoSomething and sends them to out - // // until DoSomething returns an error or ctx.Done is closed. - // func Stream(ctx context.Context, out chan<- Value) error { - // for { - // v, err := DoSomething(ctx) - // if err != nil { - // return err - // } - // select { - // case <-ctx.Done(): - // return ctx.Err() - // case out <- v: - // } - // } - // } - // - // See http://blog.golang.org/pipelines for more examples of how to use - // a Done channel for cancelation. - Done() <-chan struct{} - - // Err returns a non-nil error value after Done is closed. Err returns - // Canceled if the context was canceled or DeadlineExceeded if the - // context's deadline passed. No other values for Err are defined. - // After Done is closed, successive calls to Err return the same value. - Err() error - - // Value returns the value associated with this context for key, or nil - // if no value is associated with key. Successive calls to Value with - // the same key returns the same result. - // - // Use context values only for request-scoped data that transits - // processes and API boundaries, not for passing optional parameters to - // functions. - // - // A key identifies a specific value in a Context. Functions that wish - // to store values in Context typically allocate a key in a global - // variable then use that key as the argument to context.WithValue and - // Context.Value. A key can be any type that supports equality; - // packages should define keys as an unexported type to avoid - // collisions. - // - // Packages that define a Context key should provide type-safe accessors - // for the values stores using that key: - // - // // Package user defines a User type that's stored in Contexts. - // package user - // - // import "golang.org/x/net/context" - // - // // User is the type of value stored in the Contexts. - // type User struct {...} - // - // // key is an unexported type for keys defined in this package. - // // This prevents collisions with keys defined in other packages. - // type key int - // - // // userKey is the key for user.User values in Contexts. It is - // // unexported; clients use user.NewContext and user.FromContext - // // instead of using this key directly. - // var userKey key = 0 - // - // // NewContext returns a new Context that carries value u. - // func NewContext(ctx context.Context, u *User) context.Context { - // return context.WithValue(ctx, userKey, u) - // } - // - // // FromContext returns the User value stored in ctx, if any. - // func FromContext(ctx context.Context) (*User, bool) { - // u, ok := ctx.Value(userKey).(*User) - // return u, ok - // } - Value(key interface{}) interface{} -} - // Background returns a non-nil, empty Context. It is never canceled, has no // values, and has no deadline. It is typically used by the main function, // initialization, and tests, and as the top-level Context for incoming @@ -149,8 +54,3 @@ func Background() Context { func TODO() Context { return todo } - -// A CancelFunc tells an operation to abandon its work. -// A CancelFunc does not wait for the work to stop. -// After the first call, subsequent calls to a CancelFunc do nothing. -type CancelFunc func() diff --git a/vendor/golang.org/x/net/context/go19.go b/vendor/golang.org/x/net/context/go19.go new file mode 100644 index 000000000000..d88bd1db127d --- /dev/null +++ b/vendor/golang.org/x/net/context/go19.go @@ -0,0 +1,20 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package context + +import "context" // standard library's context, as of Go 1.7 + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context = context.Context + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc = context.CancelFunc diff --git a/vendor/golang.org/x/net/context/pre_go19.go b/vendor/golang.org/x/net/context/pre_go19.go new file mode 100644 index 000000000000..b105f80be4fe --- /dev/null +++ b/vendor/golang.org/x/net/context/pre_go19.go @@ -0,0 +1,109 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.9 + +package context + +import "time" + +// A Context carries a deadline, a cancelation signal, and other values across +// API boundaries. +// +// Context's methods may be called by multiple goroutines simultaneously. +type Context interface { + // Deadline returns the time when work done on behalf of this context + // should be canceled. Deadline returns ok==false when no deadline is + // set. Successive calls to Deadline return the same results. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that's closed when work done on behalf of this + // context should be canceled. Done may return nil if this context can + // never be canceled. Successive calls to Done return the same value. + // + // WithCancel arranges for Done to be closed when cancel is called; + // WithDeadline arranges for Done to be closed when the deadline + // expires; WithTimeout arranges for Done to be closed when the timeout + // elapses. + // + // Done is provided for use in select statements: + // + // // Stream generates values with DoSomething and sends them to out + // // until DoSomething returns an error or ctx.Done is closed. + // func Stream(ctx context.Context, out chan<- Value) error { + // for { + // v, err := DoSomething(ctx) + // if err != nil { + // return err + // } + // select { + // case <-ctx.Done(): + // return ctx.Err() + // case out <- v: + // } + // } + // } + // + // See http://blog.golang.org/pipelines for more examples of how to use + // a Done channel for cancelation. + Done() <-chan struct{} + + // Err returns a non-nil error value after Done is closed. Err returns + // Canceled if the context was canceled or DeadlineExceeded if the + // context's deadline passed. No other values for Err are defined. + // After Done is closed, successive calls to Err return the same value. + Err() error + + // Value returns the value associated with this context for key, or nil + // if no value is associated with key. Successive calls to Value with + // the same key returns the same result. + // + // Use context values only for request-scoped data that transits + // processes and API boundaries, not for passing optional parameters to + // functions. + // + // A key identifies a specific value in a Context. Functions that wish + // to store values in Context typically allocate a key in a global + // variable then use that key as the argument to context.WithValue and + // Context.Value. A key can be any type that supports equality; + // packages should define keys as an unexported type to avoid + // collisions. + // + // Packages that define a Context key should provide type-safe accessors + // for the values stores using that key: + // + // // Package user defines a User type that's stored in Contexts. + // package user + // + // import "golang.org/x/net/context" + // + // // User is the type of value stored in the Contexts. + // type User struct {...} + // + // // key is an unexported type for keys defined in this package. + // // This prevents collisions with keys defined in other packages. + // type key int + // + // // userKey is the key for user.User values in Contexts. It is + // // unexported; clients use user.NewContext and user.FromContext + // // instead of using this key directly. + // var userKey key = 0 + // + // // NewContext returns a new Context that carries value u. + // func NewContext(ctx context.Context, u *User) context.Context { + // return context.WithValue(ctx, userKey, u) + // } + // + // // FromContext returns the User value stored in ctx, if any. + // func FromContext(ctx context.Context) (*User, bool) { + // u, ok := ctx.Value(userKey).(*User) + // return u, ok + // } + Value(key interface{}) interface{} +} + +// A CancelFunc tells an operation to abandon its work. +// A CancelFunc does not wait for the work to stop. +// After the first call, subsequent calls to a CancelFunc do nothing. +type CancelFunc func() diff --git a/vendor/golang.org/x/net/html/atom/gen.go b/vendor/golang.org/x/net/html/atom/gen.go deleted file mode 100644 index 6bfa86601987..000000000000 --- a/vendor/golang.org/x/net/html/atom/gen.go +++ /dev/null @@ -1,648 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build ignore - -package main - -// This program generates table.go and table_test.go. -// Invoke as -// -// go run gen.go |gofmt >table.go -// go run gen.go -test |gofmt >table_test.go - -import ( - "flag" - "fmt" - "math/rand" - "os" - "sort" - "strings" -) - -// identifier converts s to a Go exported identifier. -// It converts "div" to "Div" and "accept-charset" to "AcceptCharset". -func identifier(s string) string { - b := make([]byte, 0, len(s)) - cap := true - for _, c := range s { - if c == '-' { - cap = true - continue - } - if cap && 'a' <= c && c <= 'z' { - c -= 'a' - 'A' - } - cap = false - b = append(b, byte(c)) - } - return string(b) -} - -var test = flag.Bool("test", false, "generate table_test.go") - -func main() { - flag.Parse() - - var all []string - all = append(all, elements...) - all = append(all, attributes...) - all = append(all, eventHandlers...) - all = append(all, extra...) - sort.Strings(all) - - if *test { - fmt.Printf("// generated by go run gen.go -test; DO NOT EDIT\n\n") - fmt.Printf("package atom\n\n") - fmt.Printf("var testAtomList = []string{\n") - for _, s := range all { - fmt.Printf("\t%q,\n", s) - } - fmt.Printf("}\n") - return - } - - // uniq - lists have dups - // compute max len too - maxLen := 0 - w := 0 - for _, s := range all { - if w == 0 || all[w-1] != s { - if maxLen < len(s) { - maxLen = len(s) - } - all[w] = s - w++ - } - } - all = all[:w] - - // Find hash that minimizes table size. - var best *table - for i := 0; i < 1000000; i++ { - if best != nil && 1<<(best.k-1) < len(all) { - break - } - h := rand.Uint32() - for k := uint(0); k <= 16; k++ { - if best != nil && k >= best.k { - break - } - var t table - if t.init(h, k, all) { - best = &t - break - } - } - } - if best == nil { - fmt.Fprintf(os.Stderr, "failed to construct string table\n") - os.Exit(1) - } - - // Lay out strings, using overlaps when possible. - layout := append([]string{}, all...) - - // Remove strings that are substrings of other strings - for changed := true; changed; { - changed = false - for i, s := range layout { - if s == "" { - continue - } - for j, t := range layout { - if i != j && t != "" && strings.Contains(s, t) { - changed = true - layout[j] = "" - } - } - } - } - - // Join strings where one suffix matches another prefix. - for { - // Find best i, j, k such that layout[i][len-k:] == layout[j][:k], - // maximizing overlap length k. - besti := -1 - bestj := -1 - bestk := 0 - for i, s := range layout { - if s == "" { - continue - } - for j, t := range layout { - if i == j { - continue - } - for k := bestk + 1; k <= len(s) && k <= len(t); k++ { - if s[len(s)-k:] == t[:k] { - besti = i - bestj = j - bestk = k - } - } - } - } - if bestk > 0 { - layout[besti] += layout[bestj][bestk:] - layout[bestj] = "" - continue - } - break - } - - text := strings.Join(layout, "") - - atom := map[string]uint32{} - for _, s := range all { - off := strings.Index(text, s) - if off < 0 { - panic("lost string " + s) - } - atom[s] = uint32(off<<8 | len(s)) - } - - // Generate the Go code. - fmt.Printf("// generated by go run gen.go; DO NOT EDIT\n\n") - fmt.Printf("package atom\n\nconst (\n") - for _, s := range all { - fmt.Printf("\t%s Atom = %#x\n", identifier(s), atom[s]) - } - fmt.Printf(")\n\n") - - fmt.Printf("const hash0 = %#x\n\n", best.h0) - fmt.Printf("const maxAtomLen = %d\n\n", maxLen) - - fmt.Printf("var table = [1<<%d]Atom{\n", best.k) - for i, s := range best.tab { - if s == "" { - continue - } - fmt.Printf("\t%#x: %#x, // %s\n", i, atom[s], s) - } - fmt.Printf("}\n") - datasize := (1 << best.k) * 4 - - fmt.Printf("const atomText =\n") - textsize := len(text) - for len(text) > 60 { - fmt.Printf("\t%q +\n", text[:60]) - text = text[60:] - } - fmt.Printf("\t%q\n\n", text) - - fmt.Fprintf(os.Stderr, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize) -} - -type byLen []string - -func (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) } -func (x byLen) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x byLen) Len() int { return len(x) } - -// fnv computes the FNV hash with an arbitrary starting value h. -func fnv(h uint32, s string) uint32 { - for i := 0; i < len(s); i++ { - h ^= uint32(s[i]) - h *= 16777619 - } - return h -} - -// A table represents an attempt at constructing the lookup table. -// The lookup table uses cuckoo hashing, meaning that each string -// can be found in one of two positions. -type table struct { - h0 uint32 - k uint - mask uint32 - tab []string -} - -// hash returns the two hashes for s. -func (t *table) hash(s string) (h1, h2 uint32) { - h := fnv(t.h0, s) - h1 = h & t.mask - h2 = (h >> 16) & t.mask - return -} - -// init initializes the table with the given parameters. -// h0 is the initial hash value, -// k is the number of bits of hash value to use, and -// x is the list of strings to store in the table. -// init returns false if the table cannot be constructed. -func (t *table) init(h0 uint32, k uint, x []string) bool { - t.h0 = h0 - t.k = k - t.tab = make([]string, 1< len(t.tab) { - return false - } - s := t.tab[i] - h1, h2 := t.hash(s) - j := h1 + h2 - i - if t.tab[j] != "" && !t.push(j, depth+1) { - return false - } - t.tab[j] = s - return true -} - -// The lists of element names and attribute keys were taken from -// https://html.spec.whatwg.org/multipage/indices.html#index -// as of the "HTML Living Standard - Last Updated 21 February 2015" version. - -var elements = []string{ - "a", - "abbr", - "address", - "area", - "article", - "aside", - "audio", - "b", - "base", - "bdi", - "bdo", - "blockquote", - "body", - "br", - "button", - "canvas", - "caption", - "cite", - "code", - "col", - "colgroup", - "command", - "data", - "datalist", - "dd", - "del", - "details", - "dfn", - "dialog", - "div", - "dl", - "dt", - "em", - "embed", - "fieldset", - "figcaption", - "figure", - "footer", - "form", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "head", - "header", - "hgroup", - "hr", - "html", - "i", - "iframe", - "img", - "input", - "ins", - "kbd", - "keygen", - "label", - "legend", - "li", - "link", - "map", - "mark", - "menu", - "menuitem", - "meta", - "meter", - "nav", - "noscript", - "object", - "ol", - "optgroup", - "option", - "output", - "p", - "param", - "pre", - "progress", - "q", - "rp", - "rt", - "ruby", - "s", - "samp", - "script", - "section", - "select", - "small", - "source", - "span", - "strong", - "style", - "sub", - "summary", - "sup", - "table", - "tbody", - "td", - "template", - "textarea", - "tfoot", - "th", - "thead", - "time", - "title", - "tr", - "track", - "u", - "ul", - "var", - "video", - "wbr", -} - -// https://html.spec.whatwg.org/multipage/indices.html#attributes-3 - -var attributes = []string{ - "abbr", - "accept", - "accept-charset", - "accesskey", - "action", - "alt", - "async", - "autocomplete", - "autofocus", - "autoplay", - "challenge", - "charset", - "checked", - "cite", - "class", - "cols", - "colspan", - "command", - "content", - "contenteditable", - "contextmenu", - "controls", - "coords", - "crossorigin", - "data", - "datetime", - "default", - "defer", - "dir", - "dirname", - "disabled", - "download", - "draggable", - "dropzone", - "enctype", - "for", - "form", - "formaction", - "formenctype", - "formmethod", - "formnovalidate", - "formtarget", - "headers", - "height", - "hidden", - "high", - "href", - "hreflang", - "http-equiv", - "icon", - "id", - "inputmode", - "ismap", - "itemid", - "itemprop", - "itemref", - "itemscope", - "itemtype", - "keytype", - "kind", - "label", - "lang", - "list", - "loop", - "low", - "manifest", - "max", - "maxlength", - "media", - "mediagroup", - "method", - "min", - "minlength", - "multiple", - "muted", - "name", - "novalidate", - "open", - "optimum", - "pattern", - "ping", - "placeholder", - "poster", - "preload", - "radiogroup", - "readonly", - "rel", - "required", - "reversed", - "rows", - "rowspan", - "sandbox", - "spellcheck", - "scope", - "scoped", - "seamless", - "selected", - "shape", - "size", - "sizes", - "sortable", - "sorted", - "span", - "src", - "srcdoc", - "srclang", - "start", - "step", - "style", - "tabindex", - "target", - "title", - "translate", - "type", - "typemustmatch", - "usemap", - "value", - "width", - "wrap", -} - -var eventHandlers = []string{ - "onabort", - "onautocomplete", - "onautocompleteerror", - "onafterprint", - "onbeforeprint", - "onbeforeunload", - "onblur", - "oncancel", - "oncanplay", - "oncanplaythrough", - "onchange", - "onclick", - "onclose", - "oncontextmenu", - "oncuechange", - "ondblclick", - "ondrag", - "ondragend", - "ondragenter", - "ondragleave", - "ondragover", - "ondragstart", - "ondrop", - "ondurationchange", - "onemptied", - "onended", - "onerror", - "onfocus", - "onhashchange", - "oninput", - "oninvalid", - "onkeydown", - "onkeypress", - "onkeyup", - "onlanguagechange", - "onload", - "onloadeddata", - "onloadedmetadata", - "onloadstart", - "onmessage", - "onmousedown", - "onmousemove", - "onmouseout", - "onmouseover", - "onmouseup", - "onmousewheel", - "onoffline", - "ononline", - "onpagehide", - "onpageshow", - "onpause", - "onplay", - "onplaying", - "onpopstate", - "onprogress", - "onratechange", - "onreset", - "onresize", - "onscroll", - "onseeked", - "onseeking", - "onselect", - "onshow", - "onsort", - "onstalled", - "onstorage", - "onsubmit", - "onsuspend", - "ontimeupdate", - "ontoggle", - "onunload", - "onvolumechange", - "onwaiting", -} - -// extra are ad-hoc values not covered by any of the lists above. -var extra = []string{ - "align", - "annotation", - "annotation-xml", - "applet", - "basefont", - "bgsound", - "big", - "blink", - "center", - "color", - "desc", - "face", - "font", - "foreignObject", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive. - "foreignobject", - "frame", - "frameset", - "image", - "isindex", - "listing", - "malignmark", - "marquee", - "math", - "mglyph", - "mi", - "mn", - "mo", - "ms", - "mtext", - "nobr", - "noembed", - "noframes", - "plaintext", - "prompt", - "public", - "spacer", - "strike", - "svg", - "system", - "tt", - "xmp", -} diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go index 2605ba3102f6..2a938864cb9d 100644 --- a/vendor/golang.org/x/net/html/atom/table.go +++ b/vendor/golang.org/x/net/html/atom/table.go @@ -1,713 +1,783 @@ -// generated by go run gen.go; DO NOT EDIT +// Code generated by go generate gen.go; DO NOT EDIT. + +//go:generate go run gen.go package atom const ( - A Atom = 0x1 - Abbr Atom = 0x4 - Accept Atom = 0x2106 - AcceptCharset Atom = 0x210e - Accesskey Atom = 0x3309 - Action Atom = 0x1f606 - Address Atom = 0x4f307 - Align Atom = 0x1105 - Alt Atom = 0x4503 - Annotation Atom = 0x1670a - AnnotationXml Atom = 0x1670e - Applet Atom = 0x2b306 - Area Atom = 0x2fa04 - Article Atom = 0x38807 - Aside Atom = 0x8305 - Async Atom = 0x7b05 - Audio Atom = 0xa605 - Autocomplete Atom = 0x1fc0c - Autofocus Atom = 0xb309 - Autoplay Atom = 0xce08 - B Atom = 0x101 - Base Atom = 0xd604 - Basefont Atom = 0xd608 - Bdi Atom = 0x1a03 - Bdo Atom = 0xe703 - Bgsound Atom = 0x11807 - Big Atom = 0x12403 - Blink Atom = 0x12705 - Blockquote Atom = 0x12c0a - Body Atom = 0x2f04 - Br Atom = 0x202 - Button Atom = 0x13606 - Canvas Atom = 0x7f06 - Caption Atom = 0x1bb07 - Center Atom = 0x5b506 - Challenge Atom = 0x21f09 - Charset Atom = 0x2807 - Checked Atom = 0x32807 - Cite Atom = 0x3c804 - Class Atom = 0x4de05 - Code Atom = 0x14904 - Col Atom = 0x15003 - Colgroup Atom = 0x15008 - Color Atom = 0x15d05 - Cols Atom = 0x16204 - Colspan Atom = 0x16207 - Command Atom = 0x17507 - Content Atom = 0x42307 - Contenteditable Atom = 0x4230f - Contextmenu Atom = 0x3310b - Controls Atom = 0x18808 - Coords Atom = 0x19406 - Crossorigin Atom = 0x19f0b - Data Atom = 0x44a04 - Datalist Atom = 0x44a08 - Datetime Atom = 0x23c08 - Dd Atom = 0x26702 - Default Atom = 0x8607 - Defer Atom = 0x14b05 - Del Atom = 0x3ef03 - Desc Atom = 0x4db04 - Details Atom = 0x4807 - Dfn Atom = 0x6103 - Dialog Atom = 0x1b06 - Dir Atom = 0x6903 - Dirname Atom = 0x6907 - Disabled Atom = 0x10c08 - Div Atom = 0x11303 - Dl Atom = 0x11e02 - Download Atom = 0x40008 - Draggable Atom = 0x17b09 - Dropzone Atom = 0x39108 - Dt Atom = 0x50902 - Em Atom = 0x6502 - Embed Atom = 0x6505 - Enctype Atom = 0x21107 - Face Atom = 0x5b304 - Fieldset Atom = 0x1b008 - Figcaption Atom = 0x1b80a - Figure Atom = 0x1cc06 - Font Atom = 0xda04 - Footer Atom = 0x8d06 - For Atom = 0x1d803 - ForeignObject Atom = 0x1d80d - Foreignobject Atom = 0x1e50d - Form Atom = 0x1f204 - Formaction Atom = 0x1f20a - Formenctype Atom = 0x20d0b - Formmethod Atom = 0x2280a - Formnovalidate Atom = 0x2320e - Formtarget Atom = 0x2470a - Frame Atom = 0x9a05 - Frameset Atom = 0x9a08 - H1 Atom = 0x26e02 - H2 Atom = 0x29402 - H3 Atom = 0x2a702 - H4 Atom = 0x2e902 - H5 Atom = 0x2f302 - H6 Atom = 0x50b02 - Head Atom = 0x2d504 - Header Atom = 0x2d506 - Headers Atom = 0x2d507 - Height Atom = 0x25106 - Hgroup Atom = 0x25906 - Hidden Atom = 0x26506 - High Atom = 0x26b04 - Hr Atom = 0x27002 - Href Atom = 0x27004 - Hreflang Atom = 0x27008 - Html Atom = 0x25504 - HttpEquiv Atom = 0x2780a - I Atom = 0x601 - Icon Atom = 0x42204 - Id Atom = 0x8502 - Iframe Atom = 0x29606 - Image Atom = 0x29c05 - Img Atom = 0x2a103 - Input Atom = 0x3e805 - Inputmode Atom = 0x3e809 - Ins Atom = 0x1a803 - Isindex Atom = 0x2a907 - Ismap Atom = 0x2b005 - Itemid Atom = 0x33c06 - Itemprop Atom = 0x3c908 - Itemref Atom = 0x5ad07 - Itemscope Atom = 0x2b909 - Itemtype Atom = 0x2c308 - Kbd Atom = 0x1903 - Keygen Atom = 0x3906 - Keytype Atom = 0x53707 - Kind Atom = 0x10904 - Label Atom = 0xf005 - Lang Atom = 0x27404 - Legend Atom = 0x18206 - Li Atom = 0x1202 - Link Atom = 0x12804 - List Atom = 0x44e04 - Listing Atom = 0x44e07 - Loop Atom = 0xf404 - Low Atom = 0x11f03 - Malignmark Atom = 0x100a - Manifest Atom = 0x5f108 - Map Atom = 0x2b203 - Mark Atom = 0x1604 - Marquee Atom = 0x2cb07 - Math Atom = 0x2d204 - Max Atom = 0x2e103 - Maxlength Atom = 0x2e109 - Media Atom = 0x6e05 - Mediagroup Atom = 0x6e0a - Menu Atom = 0x33804 - Menuitem Atom = 0x33808 - Meta Atom = 0x45d04 - Meter Atom = 0x24205 - Method Atom = 0x22c06 - Mglyph Atom = 0x2a206 - Mi Atom = 0x2eb02 - Min Atom = 0x2eb03 - Minlength Atom = 0x2eb09 - Mn Atom = 0x23502 - Mo Atom = 0x3ed02 - Ms Atom = 0x2bc02 - Mtext Atom = 0x2f505 - Multiple Atom = 0x30308 - Muted Atom = 0x30b05 - Name Atom = 0x6c04 - Nav Atom = 0x3e03 - Nobr Atom = 0x5704 - Noembed Atom = 0x6307 - Noframes Atom = 0x9808 - Noscript Atom = 0x3d208 - Novalidate Atom = 0x2360a - Object Atom = 0x1ec06 - Ol Atom = 0xc902 - Onabort Atom = 0x13a07 - Onafterprint Atom = 0x1c00c - Onautocomplete Atom = 0x1fa0e - Onautocompleteerror Atom = 0x1fa13 - Onbeforeprint Atom = 0x6040d - Onbeforeunload Atom = 0x4e70e - Onblur Atom = 0xaa06 - Oncancel Atom = 0xe908 - Oncanplay Atom = 0x28509 - Oncanplaythrough Atom = 0x28510 - Onchange Atom = 0x3a708 - Onclick Atom = 0x31007 - Onclose Atom = 0x31707 - Oncontextmenu Atom = 0x32f0d - Oncuechange Atom = 0x3420b - Ondblclick Atom = 0x34d0a - Ondrag Atom = 0x35706 - Ondragend Atom = 0x35709 - Ondragenter Atom = 0x3600b - Ondragleave Atom = 0x36b0b - Ondragover Atom = 0x3760a - Ondragstart Atom = 0x3800b - Ondrop Atom = 0x38f06 - Ondurationchange Atom = 0x39f10 - Onemptied Atom = 0x39609 - Onended Atom = 0x3af07 - Onerror Atom = 0x3b607 - Onfocus Atom = 0x3bd07 - Onhashchange Atom = 0x3da0c - Oninput Atom = 0x3e607 - Oninvalid Atom = 0x3f209 - Onkeydown Atom = 0x3fb09 - Onkeypress Atom = 0x4080a - Onkeyup Atom = 0x41807 - Onlanguagechange Atom = 0x43210 - Onload Atom = 0x44206 - Onloadeddata Atom = 0x4420c - Onloadedmetadata Atom = 0x45510 - Onloadstart Atom = 0x46b0b - Onmessage Atom = 0x47609 - Onmousedown Atom = 0x47f0b - Onmousemove Atom = 0x48a0b - Onmouseout Atom = 0x4950a - Onmouseover Atom = 0x4a20b - Onmouseup Atom = 0x4ad09 - Onmousewheel Atom = 0x4b60c - Onoffline Atom = 0x4c209 - Ononline Atom = 0x4cb08 - Onpagehide Atom = 0x4d30a - Onpageshow Atom = 0x4fe0a - Onpause Atom = 0x50d07 - Onplay Atom = 0x51706 - Onplaying Atom = 0x51709 - Onpopstate Atom = 0x5200a - Onprogress Atom = 0x52a0a - Onratechange Atom = 0x53e0c - Onreset Atom = 0x54a07 - Onresize Atom = 0x55108 - Onscroll Atom = 0x55f08 - Onseeked Atom = 0x56708 - Onseeking Atom = 0x56f09 - Onselect Atom = 0x57808 - Onshow Atom = 0x58206 - Onsort Atom = 0x58b06 - Onstalled Atom = 0x59509 - Onstorage Atom = 0x59e09 - Onsubmit Atom = 0x5a708 - Onsuspend Atom = 0x5bb09 - Ontimeupdate Atom = 0xdb0c - Ontoggle Atom = 0x5c408 - Onunload Atom = 0x5cc08 - Onvolumechange Atom = 0x5d40e - Onwaiting Atom = 0x5e209 - Open Atom = 0x3cf04 - Optgroup Atom = 0xf608 - Optimum Atom = 0x5eb07 - Option Atom = 0x60006 - Output Atom = 0x49c06 - P Atom = 0xc01 - Param Atom = 0xc05 - Pattern Atom = 0x5107 - Ping Atom = 0x7704 - Placeholder Atom = 0xc30b - Plaintext Atom = 0xfd09 - Poster Atom = 0x15706 - Pre Atom = 0x25e03 - Preload Atom = 0x25e07 - Progress Atom = 0x52c08 - Prompt Atom = 0x5fa06 - Public Atom = 0x41e06 - Q Atom = 0x13101 - Radiogroup Atom = 0x30a - Readonly Atom = 0x2fb08 - Rel Atom = 0x25f03 - Required Atom = 0x1d008 - Reversed Atom = 0x5a08 - Rows Atom = 0x9204 - Rowspan Atom = 0x9207 - Rp Atom = 0x1c602 - Rt Atom = 0x13f02 - Ruby Atom = 0xaf04 - S Atom = 0x2c01 - Samp Atom = 0x4e04 - Sandbox Atom = 0xbb07 - Scope Atom = 0x2bd05 - Scoped Atom = 0x2bd06 - Script Atom = 0x3d406 - Seamless Atom = 0x31c08 - Section Atom = 0x4e207 - Select Atom = 0x57a06 - Selected Atom = 0x57a08 - Shape Atom = 0x4f905 - Size Atom = 0x55504 - Sizes Atom = 0x55505 - Small Atom = 0x18f05 - Sortable Atom = 0x58d08 - Sorted Atom = 0x19906 - Source Atom = 0x1aa06 - Spacer Atom = 0x2db06 - Span Atom = 0x9504 - Spellcheck Atom = 0x3230a - Src Atom = 0x3c303 - Srcdoc Atom = 0x3c306 - Srclang Atom = 0x41107 - Start Atom = 0x38605 - Step Atom = 0x5f704 - Strike Atom = 0x53306 - Strong Atom = 0x55906 - Style Atom = 0x61105 - Sub Atom = 0x5a903 - Summary Atom = 0x61607 - Sup Atom = 0x61d03 - Svg Atom = 0x62003 - System Atom = 0x62306 - Tabindex Atom = 0x46308 - Table Atom = 0x42d05 - Target Atom = 0x24b06 - Tbody Atom = 0x2e05 - Td Atom = 0x4702 - Template Atom = 0x62608 - Textarea Atom = 0x2f608 - Tfoot Atom = 0x8c05 - Th Atom = 0x22e02 - Thead Atom = 0x2d405 - Time Atom = 0xdd04 - Title Atom = 0xa105 - Tr Atom = 0x10502 - Track Atom = 0x10505 - Translate Atom = 0x14009 - Tt Atom = 0x5302 - Type Atom = 0x21404 - Typemustmatch Atom = 0x2140d - U Atom = 0xb01 - Ul Atom = 0x8a02 - Usemap Atom = 0x51106 - Value Atom = 0x4005 - Var Atom = 0x11503 - Video Atom = 0x28105 - Wbr Atom = 0x12103 - Width Atom = 0x50705 - Wrap Atom = 0x58704 - Xmp Atom = 0xc103 + A Atom = 0x1 + Abbr Atom = 0x4 + Accept Atom = 0x1a06 + AcceptCharset Atom = 0x1a0e + Accesskey Atom = 0x2c09 + Acronym Atom = 0xaa07 + Action Atom = 0x27206 + Address Atom = 0x6f307 + Align Atom = 0xb105 + Allowfullscreen Atom = 0x2080f + Allowpaymentrequest Atom = 0xc113 + Allowusermedia Atom = 0xdd0e + Alt Atom = 0xf303 + Annotation Atom = 0x1c90a + AnnotationXml Atom = 0x1c90e + Applet Atom = 0x31906 + Area Atom = 0x35604 + Article Atom = 0x3fc07 + As Atom = 0x3c02 + Aside Atom = 0x10705 + Async Atom = 0xff05 + Audio Atom = 0x11505 + Autocomplete Atom = 0x2780c + Autofocus Atom = 0x12109 + Autoplay Atom = 0x13c08 + B Atom = 0x101 + Base Atom = 0x3b04 + Basefont Atom = 0x3b08 + Bdi Atom = 0xba03 + Bdo Atom = 0x14b03 + Bgsound Atom = 0x15e07 + Big Atom = 0x17003 + Blink Atom = 0x17305 + Blockquote Atom = 0x1870a + Body Atom = 0x2804 + Br Atom = 0x202 + Button Atom = 0x19106 + Canvas Atom = 0x10306 + Caption Atom = 0x23107 + Center Atom = 0x22006 + Challenge Atom = 0x29b09 + Charset Atom = 0x2107 + Checked Atom = 0x47907 + Cite Atom = 0x19c04 + Class Atom = 0x56405 + Code Atom = 0x5c504 + Col Atom = 0x1ab03 + Colgroup Atom = 0x1ab08 + Color Atom = 0x1bf05 + Cols Atom = 0x1c404 + Colspan Atom = 0x1c407 + Command Atom = 0x1d707 + Content Atom = 0x58b07 + Contenteditable Atom = 0x58b0f + Contextmenu Atom = 0x3800b + Controls Atom = 0x1de08 + Coords Atom = 0x1ea06 + Crossorigin Atom = 0x1fb0b + Data Atom = 0x4a504 + Datalist Atom = 0x4a508 + Datetime Atom = 0x2b808 + Dd Atom = 0x2d702 + Default Atom = 0x10a07 + Defer Atom = 0x5c705 + Del Atom = 0x45203 + Desc Atom = 0x56104 + Details Atom = 0x7207 + Dfn Atom = 0x8703 + Dialog Atom = 0xbb06 + Dir Atom = 0x9303 + Dirname Atom = 0x9307 + Disabled Atom = 0x16408 + Div Atom = 0x16b03 + Dl Atom = 0x5e602 + Download Atom = 0x46308 + Draggable Atom = 0x17a09 + Dropzone Atom = 0x40508 + Dt Atom = 0x64b02 + Em Atom = 0x6e02 + Embed Atom = 0x6e05 + Enctype Atom = 0x28d07 + Face Atom = 0x21e04 + Fieldset Atom = 0x22608 + Figcaption Atom = 0x22e0a + Figure Atom = 0x24806 + Font Atom = 0x3f04 + Footer Atom = 0xf606 + For Atom = 0x25403 + ForeignObject Atom = 0x2540d + Foreignobject Atom = 0x2610d + Form Atom = 0x26e04 + Formaction Atom = 0x26e0a + Formenctype Atom = 0x2890b + Formmethod Atom = 0x2a40a + Formnovalidate Atom = 0x2ae0e + Formtarget Atom = 0x2c00a + Frame Atom = 0x8b05 + Frameset Atom = 0x8b08 + H1 Atom = 0x15c02 + H2 Atom = 0x2de02 + H3 Atom = 0x30d02 + H4 Atom = 0x34502 + H5 Atom = 0x34f02 + H6 Atom = 0x64d02 + Head Atom = 0x33104 + Header Atom = 0x33106 + Headers Atom = 0x33107 + Height Atom = 0x5206 + Hgroup Atom = 0x2ca06 + Hidden Atom = 0x2d506 + High Atom = 0x2db04 + Hr Atom = 0x15702 + Href Atom = 0x2e004 + Hreflang Atom = 0x2e008 + Html Atom = 0x5604 + HttpEquiv Atom = 0x2e80a + I Atom = 0x601 + Icon Atom = 0x58a04 + Id Atom = 0x10902 + Iframe Atom = 0x2fc06 + Image Atom = 0x30205 + Img Atom = 0x30703 + Input Atom = 0x44b05 + Inputmode Atom = 0x44b09 + Ins Atom = 0x20403 + Integrity Atom = 0x23f09 + Is Atom = 0x16502 + Isindex Atom = 0x30f07 + Ismap Atom = 0x31605 + Itemid Atom = 0x38b06 + Itemprop Atom = 0x19d08 + Itemref Atom = 0x3cd07 + Itemscope Atom = 0x67109 + Itemtype Atom = 0x31f08 + Kbd Atom = 0xb903 + Keygen Atom = 0x3206 + Keytype Atom = 0xd607 + Kind Atom = 0x17704 + Label Atom = 0x5905 + Lang Atom = 0x2e404 + Legend Atom = 0x18106 + Li Atom = 0xb202 + Link Atom = 0x17404 + List Atom = 0x4a904 + Listing Atom = 0x4a907 + Loop Atom = 0x5d04 + Low Atom = 0xc303 + Main Atom = 0x1004 + Malignmark Atom = 0xb00a + Manifest Atom = 0x6d708 + Map Atom = 0x31803 + Mark Atom = 0xb604 + Marquee Atom = 0x32707 + Math Atom = 0x32e04 + Max Atom = 0x33d03 + Maxlength Atom = 0x33d09 + Media Atom = 0xe605 + Mediagroup Atom = 0xe60a + Menu Atom = 0x38704 + Menuitem Atom = 0x38708 + Meta Atom = 0x4b804 + Meter Atom = 0x9805 + Method Atom = 0x2a806 + Mglyph Atom = 0x30806 + Mi Atom = 0x34702 + Min Atom = 0x34703 + Minlength Atom = 0x34709 + Mn Atom = 0x2b102 + Mo Atom = 0xa402 + Ms Atom = 0x67402 + Mtext Atom = 0x35105 + Multiple Atom = 0x35f08 + Muted Atom = 0x36705 + Name Atom = 0x9604 + Nav Atom = 0x1303 + Nobr Atom = 0x3704 + Noembed Atom = 0x6c07 + Noframes Atom = 0x8908 + Nomodule Atom = 0xa208 + Nonce Atom = 0x1a605 + Noscript Atom = 0x21608 + Novalidate Atom = 0x2b20a + Object Atom = 0x26806 + Ol Atom = 0x13702 + Onabort Atom = 0x19507 + Onafterprint Atom = 0x2360c + Onautocomplete Atom = 0x2760e + Onautocompleteerror Atom = 0x27613 + Onauxclick Atom = 0x61f0a + Onbeforeprint Atom = 0x69e0d + Onbeforeunload Atom = 0x6e70e + Onblur Atom = 0x56d06 + Oncancel Atom = 0x11908 + Oncanplay Atom = 0x14d09 + Oncanplaythrough Atom = 0x14d10 + Onchange Atom = 0x41b08 + Onclick Atom = 0x2f507 + Onclose Atom = 0x36c07 + Oncontextmenu Atom = 0x37e0d + Oncopy Atom = 0x39106 + Oncuechange Atom = 0x3970b + Oncut Atom = 0x3a205 + Ondblclick Atom = 0x3a70a + Ondrag Atom = 0x3b106 + Ondragend Atom = 0x3b109 + Ondragenter Atom = 0x3ba0b + Ondragexit Atom = 0x3c50a + Ondragleave Atom = 0x3df0b + Ondragover Atom = 0x3ea0a + Ondragstart Atom = 0x3f40b + Ondrop Atom = 0x40306 + Ondurationchange Atom = 0x41310 + Onemptied Atom = 0x40a09 + Onended Atom = 0x42307 + Onerror Atom = 0x42a07 + Onfocus Atom = 0x43107 + Onhashchange Atom = 0x43d0c + Oninput Atom = 0x44907 + Oninvalid Atom = 0x45509 + Onkeydown Atom = 0x45e09 + Onkeypress Atom = 0x46b0a + Onkeyup Atom = 0x48007 + Onlanguagechange Atom = 0x48d10 + Onload Atom = 0x49d06 + Onloadeddata Atom = 0x49d0c + Onloadedmetadata Atom = 0x4b010 + Onloadend Atom = 0x4c609 + Onloadstart Atom = 0x4cf0b + Onmessage Atom = 0x4da09 + Onmessageerror Atom = 0x4da0e + Onmousedown Atom = 0x4e80b + Onmouseenter Atom = 0x4f30c + Onmouseleave Atom = 0x4ff0c + Onmousemove Atom = 0x50b0b + Onmouseout Atom = 0x5160a + Onmouseover Atom = 0x5230b + Onmouseup Atom = 0x52e09 + Onmousewheel Atom = 0x53c0c + Onoffline Atom = 0x54809 + Ononline Atom = 0x55108 + Onpagehide Atom = 0x5590a + Onpageshow Atom = 0x5730a + Onpaste Atom = 0x57f07 + Onpause Atom = 0x59a07 + Onplay Atom = 0x5a406 + Onplaying Atom = 0x5a409 + Onpopstate Atom = 0x5ad0a + Onprogress Atom = 0x5b70a + Onratechange Atom = 0x5cc0c + Onrejectionhandled Atom = 0x5d812 + Onreset Atom = 0x5ea07 + Onresize Atom = 0x5f108 + Onscroll Atom = 0x60008 + Onsecuritypolicyviolation Atom = 0x60819 + Onseeked Atom = 0x62908 + Onseeking Atom = 0x63109 + Onselect Atom = 0x63a08 + Onshow Atom = 0x64406 + Onsort Atom = 0x64f06 + Onstalled Atom = 0x65909 + Onstorage Atom = 0x66209 + Onsubmit Atom = 0x66b08 + Onsuspend Atom = 0x67b09 + Ontimeupdate Atom = 0x400c + Ontoggle Atom = 0x68408 + Onunhandledrejection Atom = 0x68c14 + Onunload Atom = 0x6ab08 + Onvolumechange Atom = 0x6b30e + Onwaiting Atom = 0x6c109 + Onwheel Atom = 0x6ca07 + Open Atom = 0x1a304 + Optgroup Atom = 0x5f08 + Optimum Atom = 0x6d107 + Option Atom = 0x6e306 + Output Atom = 0x51d06 + P Atom = 0xc01 + Param Atom = 0xc05 + Pattern Atom = 0x6607 + Picture Atom = 0x7b07 + Ping Atom = 0xef04 + Placeholder Atom = 0x1310b + Plaintext Atom = 0x1b209 + Playsinline Atom = 0x1400b + Poster Atom = 0x2cf06 + Pre Atom = 0x47003 + Preload Atom = 0x48607 + Progress Atom = 0x5b908 + Prompt Atom = 0x53606 + Public Atom = 0x58606 + Q Atom = 0xcf01 + Radiogroup Atom = 0x30a + Rb Atom = 0x3a02 + Readonly Atom = 0x35708 + Referrerpolicy Atom = 0x3d10e + Rel Atom = 0x48703 + Required Atom = 0x24c08 + Reversed Atom = 0x8008 + Rows Atom = 0x9c04 + Rowspan Atom = 0x9c07 + Rp Atom = 0x23c02 + Rt Atom = 0x19a02 + Rtc Atom = 0x19a03 + Ruby Atom = 0xfb04 + S Atom = 0x2501 + Samp Atom = 0x7804 + Sandbox Atom = 0x12907 + Scope Atom = 0x67505 + Scoped Atom = 0x67506 + Script Atom = 0x21806 + Seamless Atom = 0x37108 + Section Atom = 0x56807 + Select Atom = 0x63c06 + Selected Atom = 0x63c08 + Shape Atom = 0x1e505 + Size Atom = 0x5f504 + Sizes Atom = 0x5f505 + Slot Atom = 0x1ef04 + Small Atom = 0x20605 + Sortable Atom = 0x65108 + Sorted Atom = 0x33706 + Source Atom = 0x37806 + Spacer Atom = 0x43706 + Span Atom = 0x9f04 + Spellcheck Atom = 0x4740a + Src Atom = 0x5c003 + Srcdoc Atom = 0x5c006 + Srclang Atom = 0x5f907 + Srcset Atom = 0x6f906 + Start Atom = 0x3fa05 + Step Atom = 0x58304 + Strike Atom = 0xd206 + Strong Atom = 0x6dd06 + Style Atom = 0x6ff05 + Sub Atom = 0x66d03 + Summary Atom = 0x70407 + Sup Atom = 0x70b03 + Svg Atom = 0x70e03 + System Atom = 0x71106 + Tabindex Atom = 0x4be08 + Table Atom = 0x59505 + Target Atom = 0x2c406 + Tbody Atom = 0x2705 + Td Atom = 0x9202 + Template Atom = 0x71408 + Textarea Atom = 0x35208 + Tfoot Atom = 0xf505 + Th Atom = 0x15602 + Thead Atom = 0x33005 + Time Atom = 0x4204 + Title Atom = 0x11005 + Tr Atom = 0xcc02 + Track Atom = 0x1ba05 + Translate Atom = 0x1f209 + Tt Atom = 0x6802 + Type Atom = 0xd904 + Typemustmatch Atom = 0x2900d + U Atom = 0xb01 + Ul Atom = 0xa702 + Updateviacache Atom = 0x460e + Usemap Atom = 0x59e06 + Value Atom = 0x1505 + Var Atom = 0x16d03 + Video Atom = 0x2f105 + Wbr Atom = 0x57c03 + Width Atom = 0x64905 + Workertype Atom = 0x71c0a + Wrap Atom = 0x72604 + Xmp Atom = 0x12f03 ) -const hash0 = 0xc17da63e +const hash0 = 0x81cdf10e -const maxAtomLen = 19 +const maxAtomLen = 25 var table = [1 << 9]Atom{ - 0x1: 0x48a0b, // onmousemove - 0x2: 0x5e209, // onwaiting - 0x3: 0x1fa13, // onautocompleteerror - 0x4: 0x5fa06, // prompt - 0x7: 0x5eb07, // optimum - 0x8: 0x1604, // mark - 0xa: 0x5ad07, // itemref - 0xb: 0x4fe0a, // onpageshow - 0xc: 0x57a06, // select - 0xd: 0x17b09, // draggable - 0xe: 0x3e03, // nav - 0xf: 0x17507, // command - 0x11: 0xb01, // u - 0x14: 0x2d507, // headers - 0x15: 0x44a08, // datalist - 0x17: 0x4e04, // samp - 0x1a: 0x3fb09, // onkeydown - 0x1b: 0x55f08, // onscroll - 0x1c: 0x15003, // col - 0x20: 0x3c908, // itemprop - 0x21: 0x2780a, // http-equiv - 0x22: 0x61d03, // sup - 0x24: 0x1d008, // required - 0x2b: 0x25e07, // preload - 0x2c: 0x6040d, // onbeforeprint - 0x2d: 0x3600b, // ondragenter - 0x2e: 0x50902, // dt - 0x2f: 0x5a708, // onsubmit - 0x30: 0x27002, // hr - 0x31: 0x32f0d, // oncontextmenu - 0x33: 0x29c05, // image - 0x34: 0x50d07, // onpause - 0x35: 0x25906, // hgroup - 0x36: 0x7704, // ping - 0x37: 0x57808, // onselect - 0x3a: 0x11303, // div - 0x3b: 0x1fa0e, // onautocomplete - 0x40: 0x2eb02, // mi - 0x41: 0x31c08, // seamless - 0x42: 0x2807, // charset - 0x43: 0x8502, // id - 0x44: 0x5200a, // onpopstate - 0x45: 0x3ef03, // del - 0x46: 0x2cb07, // marquee - 0x47: 0x3309, // accesskey - 0x49: 0x8d06, // footer - 0x4a: 0x44e04, // list - 0x4b: 0x2b005, // ismap - 0x51: 0x33804, // menu - 0x52: 0x2f04, // body - 0x55: 0x9a08, // frameset - 0x56: 0x54a07, // onreset - 0x57: 0x12705, // blink - 0x58: 0xa105, // title - 0x59: 0x38807, // article - 0x5b: 0x22e02, // th - 0x5d: 0x13101, // q - 0x5e: 0x3cf04, // open - 0x5f: 0x2fa04, // area - 0x61: 0x44206, // onload - 0x62: 0xda04, // font - 0x63: 0xd604, // base - 0x64: 0x16207, // colspan - 0x65: 0x53707, // keytype - 0x66: 0x11e02, // dl - 0x68: 0x1b008, // fieldset - 0x6a: 0x2eb03, // min - 0x6b: 0x11503, // var - 0x6f: 0x2d506, // header - 0x70: 0x13f02, // rt - 0x71: 0x15008, // colgroup - 0x72: 0x23502, // mn - 0x74: 0x13a07, // onabort - 0x75: 0x3906, // keygen - 0x76: 0x4c209, // onoffline - 0x77: 0x21f09, // challenge - 0x78: 0x2b203, // map - 0x7a: 0x2e902, // h4 - 0x7b: 0x3b607, // onerror - 0x7c: 0x2e109, // maxlength - 0x7d: 0x2f505, // mtext - 0x7e: 0xbb07, // sandbox - 0x7f: 0x58b06, // onsort - 0x80: 0x100a, // malignmark - 0x81: 0x45d04, // meta - 0x82: 0x7b05, // async - 0x83: 0x2a702, // h3 - 0x84: 0x26702, // dd - 0x85: 0x27004, // href - 0x86: 0x6e0a, // mediagroup - 0x87: 0x19406, // coords - 0x88: 0x41107, // srclang - 0x89: 0x34d0a, // ondblclick - 0x8a: 0x4005, // value - 0x8c: 0xe908, // oncancel - 0x8e: 0x3230a, // spellcheck - 0x8f: 0x9a05, // frame - 0x91: 0x12403, // big - 0x94: 0x1f606, // action - 0x95: 0x6903, // dir - 0x97: 0x2fb08, // readonly - 0x99: 0x42d05, // table - 0x9a: 0x61607, // summary - 0x9b: 0x12103, // wbr - 0x9c: 0x30a, // radiogroup - 0x9d: 0x6c04, // name - 0x9f: 0x62306, // system - 0xa1: 0x15d05, // color - 0xa2: 0x7f06, // canvas - 0xa3: 0x25504, // html - 0xa5: 0x56f09, // onseeking - 0xac: 0x4f905, // shape - 0xad: 0x25f03, // rel - 0xae: 0x28510, // oncanplaythrough - 0xaf: 0x3760a, // ondragover - 0xb0: 0x62608, // template - 0xb1: 0x1d80d, // foreignObject - 0xb3: 0x9204, // rows - 0xb6: 0x44e07, // listing - 0xb7: 0x49c06, // output - 0xb9: 0x3310b, // contextmenu - 0xbb: 0x11f03, // low - 0xbc: 0x1c602, // rp - 0xbd: 0x5bb09, // onsuspend - 0xbe: 0x13606, // button - 0xbf: 0x4db04, // desc - 0xc1: 0x4e207, // section - 0xc2: 0x52a0a, // onprogress - 0xc3: 0x59e09, // onstorage - 0xc4: 0x2d204, // math - 0xc5: 0x4503, // alt - 0xc7: 0x8a02, // ul - 0xc8: 0x5107, // pattern - 0xc9: 0x4b60c, // onmousewheel - 0xca: 0x35709, // ondragend - 0xcb: 0xaf04, // ruby - 0xcc: 0xc01, // p - 0xcd: 0x31707, // onclose - 0xce: 0x24205, // meter - 0xcf: 0x11807, // bgsound - 0xd2: 0x25106, // height - 0xd4: 0x101, // b - 0xd5: 0x2c308, // itemtype - 0xd8: 0x1bb07, // caption - 0xd9: 0x10c08, // disabled - 0xdb: 0x33808, // menuitem - 0xdc: 0x62003, // svg - 0xdd: 0x18f05, // small - 0xde: 0x44a04, // data - 0xe0: 0x4cb08, // ononline - 0xe1: 0x2a206, // mglyph - 0xe3: 0x6505, // embed - 0xe4: 0x10502, // tr - 0xe5: 0x46b0b, // onloadstart - 0xe7: 0x3c306, // srcdoc - 0xeb: 0x5c408, // ontoggle - 0xed: 0xe703, // bdo - 0xee: 0x4702, // td - 0xef: 0x8305, // aside - 0xf0: 0x29402, // h2 - 0xf1: 0x52c08, // progress - 0xf2: 0x12c0a, // blockquote - 0xf4: 0xf005, // label - 0xf5: 0x601, // i - 0xf7: 0x9207, // rowspan - 0xfb: 0x51709, // onplaying - 0xfd: 0x2a103, // img - 0xfe: 0xf608, // optgroup - 0xff: 0x42307, // content - 0x101: 0x53e0c, // onratechange - 0x103: 0x3da0c, // onhashchange - 0x104: 0x4807, // details - 0x106: 0x40008, // download - 0x109: 0x14009, // translate - 0x10b: 0x4230f, // contenteditable - 0x10d: 0x36b0b, // ondragleave - 0x10e: 0x2106, // accept - 0x10f: 0x57a08, // selected - 0x112: 0x1f20a, // formaction - 0x113: 0x5b506, // center - 0x115: 0x45510, // onloadedmetadata - 0x116: 0x12804, // link - 0x117: 0xdd04, // time - 0x118: 0x19f0b, // crossorigin - 0x119: 0x3bd07, // onfocus - 0x11a: 0x58704, // wrap - 0x11b: 0x42204, // icon - 0x11d: 0x28105, // video - 0x11e: 0x4de05, // class - 0x121: 0x5d40e, // onvolumechange - 0x122: 0xaa06, // onblur - 0x123: 0x2b909, // itemscope - 0x124: 0x61105, // style - 0x127: 0x41e06, // public - 0x129: 0x2320e, // formnovalidate - 0x12a: 0x58206, // onshow - 0x12c: 0x51706, // onplay - 0x12d: 0x3c804, // cite - 0x12e: 0x2bc02, // ms - 0x12f: 0xdb0c, // ontimeupdate - 0x130: 0x10904, // kind - 0x131: 0x2470a, // formtarget - 0x135: 0x3af07, // onended - 0x136: 0x26506, // hidden - 0x137: 0x2c01, // s - 0x139: 0x2280a, // formmethod - 0x13a: 0x3e805, // input - 0x13c: 0x50b02, // h6 - 0x13d: 0xc902, // ol - 0x13e: 0x3420b, // oncuechange - 0x13f: 0x1e50d, // foreignobject - 0x143: 0x4e70e, // onbeforeunload - 0x144: 0x2bd05, // scope - 0x145: 0x39609, // onemptied - 0x146: 0x14b05, // defer - 0x147: 0xc103, // xmp - 0x148: 0x39f10, // ondurationchange - 0x149: 0x1903, // kbd - 0x14c: 0x47609, // onmessage - 0x14d: 0x60006, // option - 0x14e: 0x2eb09, // minlength - 0x14f: 0x32807, // checked - 0x150: 0xce08, // autoplay - 0x152: 0x202, // br - 0x153: 0x2360a, // novalidate - 0x156: 0x6307, // noembed - 0x159: 0x31007, // onclick - 0x15a: 0x47f0b, // onmousedown - 0x15b: 0x3a708, // onchange - 0x15e: 0x3f209, // oninvalid - 0x15f: 0x2bd06, // scoped - 0x160: 0x18808, // controls - 0x161: 0x30b05, // muted - 0x162: 0x58d08, // sortable - 0x163: 0x51106, // usemap - 0x164: 0x1b80a, // figcaption - 0x165: 0x35706, // ondrag - 0x166: 0x26b04, // high - 0x168: 0x3c303, // src - 0x169: 0x15706, // poster - 0x16b: 0x1670e, // annotation-xml - 0x16c: 0x5f704, // step - 0x16d: 0x4, // abbr - 0x16e: 0x1b06, // dialog - 0x170: 0x1202, // li - 0x172: 0x3ed02, // mo - 0x175: 0x1d803, // for - 0x176: 0x1a803, // ins - 0x178: 0x55504, // size - 0x179: 0x43210, // onlanguagechange - 0x17a: 0x8607, // default - 0x17b: 0x1a03, // bdi - 0x17c: 0x4d30a, // onpagehide - 0x17d: 0x6907, // dirname - 0x17e: 0x21404, // type - 0x17f: 0x1f204, // form - 0x181: 0x28509, // oncanplay - 0x182: 0x6103, // dfn - 0x183: 0x46308, // tabindex - 0x186: 0x6502, // em - 0x187: 0x27404, // lang - 0x189: 0x39108, // dropzone - 0x18a: 0x4080a, // onkeypress - 0x18b: 0x23c08, // datetime - 0x18c: 0x16204, // cols - 0x18d: 0x1, // a - 0x18e: 0x4420c, // onloadeddata - 0x190: 0xa605, // audio - 0x192: 0x2e05, // tbody - 0x193: 0x22c06, // method - 0x195: 0xf404, // loop - 0x196: 0x29606, // iframe - 0x198: 0x2d504, // head - 0x19e: 0x5f108, // manifest - 0x19f: 0xb309, // autofocus - 0x1a0: 0x14904, // code - 0x1a1: 0x55906, // strong - 0x1a2: 0x30308, // multiple - 0x1a3: 0xc05, // param - 0x1a6: 0x21107, // enctype - 0x1a7: 0x5b304, // face - 0x1a8: 0xfd09, // plaintext - 0x1a9: 0x26e02, // h1 - 0x1aa: 0x59509, // onstalled - 0x1ad: 0x3d406, // script - 0x1ae: 0x2db06, // spacer - 0x1af: 0x55108, // onresize - 0x1b0: 0x4a20b, // onmouseover - 0x1b1: 0x5cc08, // onunload - 0x1b2: 0x56708, // onseeked - 0x1b4: 0x2140d, // typemustmatch - 0x1b5: 0x1cc06, // figure - 0x1b6: 0x4950a, // onmouseout - 0x1b7: 0x25e03, // pre - 0x1b8: 0x50705, // width - 0x1b9: 0x19906, // sorted - 0x1bb: 0x5704, // nobr - 0x1be: 0x5302, // tt - 0x1bf: 0x1105, // align - 0x1c0: 0x3e607, // oninput - 0x1c3: 0x41807, // onkeyup - 0x1c6: 0x1c00c, // onafterprint - 0x1c7: 0x210e, // accept-charset - 0x1c8: 0x33c06, // itemid - 0x1c9: 0x3e809, // inputmode - 0x1cb: 0x53306, // strike - 0x1cc: 0x5a903, // sub - 0x1cd: 0x10505, // track - 0x1ce: 0x38605, // start - 0x1d0: 0xd608, // basefont - 0x1d6: 0x1aa06, // source - 0x1d7: 0x18206, // legend - 0x1d8: 0x2d405, // thead - 0x1da: 0x8c05, // tfoot - 0x1dd: 0x1ec06, // object - 0x1de: 0x6e05, // media - 0x1df: 0x1670a, // annotation - 0x1e0: 0x20d0b, // formenctype - 0x1e2: 0x3d208, // noscript - 0x1e4: 0x55505, // sizes - 0x1e5: 0x1fc0c, // autocomplete - 0x1e6: 0x9504, // span - 0x1e7: 0x9808, // noframes - 0x1e8: 0x24b06, // target - 0x1e9: 0x38f06, // ondrop - 0x1ea: 0x2b306, // applet - 0x1ec: 0x5a08, // reversed - 0x1f0: 0x2a907, // isindex - 0x1f3: 0x27008, // hreflang - 0x1f5: 0x2f302, // h5 - 0x1f6: 0x4f307, // address - 0x1fa: 0x2e103, // max - 0x1fb: 0xc30b, // placeholder - 0x1fc: 0x2f608, // textarea - 0x1fe: 0x4ad09, // onmouseup - 0x1ff: 0x3800b, // ondragstart + 0x1: 0xe60a, // mediagroup + 0x2: 0x2e404, // lang + 0x4: 0x2c09, // accesskey + 0x5: 0x8b08, // frameset + 0x7: 0x63a08, // onselect + 0x8: 0x71106, // system + 0xa: 0x64905, // width + 0xc: 0x2890b, // formenctype + 0xd: 0x13702, // ol + 0xe: 0x3970b, // oncuechange + 0x10: 0x14b03, // bdo + 0x11: 0x11505, // audio + 0x12: 0x17a09, // draggable + 0x14: 0x2f105, // video + 0x15: 0x2b102, // mn + 0x16: 0x38704, // menu + 0x17: 0x2cf06, // poster + 0x19: 0xf606, // footer + 0x1a: 0x2a806, // method + 0x1b: 0x2b808, // datetime + 0x1c: 0x19507, // onabort + 0x1d: 0x460e, // updateviacache + 0x1e: 0xff05, // async + 0x1f: 0x49d06, // onload + 0x21: 0x11908, // oncancel + 0x22: 0x62908, // onseeked + 0x23: 0x30205, // image + 0x24: 0x5d812, // onrejectionhandled + 0x26: 0x17404, // link + 0x27: 0x51d06, // output + 0x28: 0x33104, // head + 0x29: 0x4ff0c, // onmouseleave + 0x2a: 0x57f07, // onpaste + 0x2b: 0x5a409, // onplaying + 0x2c: 0x1c407, // colspan + 0x2f: 0x1bf05, // color + 0x30: 0x5f504, // size + 0x31: 0x2e80a, // http-equiv + 0x33: 0x601, // i + 0x34: 0x5590a, // onpagehide + 0x35: 0x68c14, // onunhandledrejection + 0x37: 0x42a07, // onerror + 0x3a: 0x3b08, // basefont + 0x3f: 0x1303, // nav + 0x40: 0x17704, // kind + 0x41: 0x35708, // readonly + 0x42: 0x30806, // mglyph + 0x44: 0xb202, // li + 0x46: 0x2d506, // hidden + 0x47: 0x70e03, // svg + 0x48: 0x58304, // step + 0x49: 0x23f09, // integrity + 0x4a: 0x58606, // public + 0x4c: 0x1ab03, // col + 0x4d: 0x1870a, // blockquote + 0x4e: 0x34f02, // h5 + 0x50: 0x5b908, // progress + 0x51: 0x5f505, // sizes + 0x52: 0x34502, // h4 + 0x56: 0x33005, // thead + 0x57: 0xd607, // keytype + 0x58: 0x5b70a, // onprogress + 0x59: 0x44b09, // inputmode + 0x5a: 0x3b109, // ondragend + 0x5d: 0x3a205, // oncut + 0x5e: 0x43706, // spacer + 0x5f: 0x1ab08, // colgroup + 0x62: 0x16502, // is + 0x65: 0x3c02, // as + 0x66: 0x54809, // onoffline + 0x67: 0x33706, // sorted + 0x69: 0x48d10, // onlanguagechange + 0x6c: 0x43d0c, // onhashchange + 0x6d: 0x9604, // name + 0x6e: 0xf505, // tfoot + 0x6f: 0x56104, // desc + 0x70: 0x33d03, // max + 0x72: 0x1ea06, // coords + 0x73: 0x30d02, // h3 + 0x74: 0x6e70e, // onbeforeunload + 0x75: 0x9c04, // rows + 0x76: 0x63c06, // select + 0x77: 0x9805, // meter + 0x78: 0x38b06, // itemid + 0x79: 0x53c0c, // onmousewheel + 0x7a: 0x5c006, // srcdoc + 0x7d: 0x1ba05, // track + 0x7f: 0x31f08, // itemtype + 0x82: 0xa402, // mo + 0x83: 0x41b08, // onchange + 0x84: 0x33107, // headers + 0x85: 0x5cc0c, // onratechange + 0x86: 0x60819, // onsecuritypolicyviolation + 0x88: 0x4a508, // datalist + 0x89: 0x4e80b, // onmousedown + 0x8a: 0x1ef04, // slot + 0x8b: 0x4b010, // onloadedmetadata + 0x8c: 0x1a06, // accept + 0x8d: 0x26806, // object + 0x91: 0x6b30e, // onvolumechange + 0x92: 0x2107, // charset + 0x93: 0x27613, // onautocompleteerror + 0x94: 0xc113, // allowpaymentrequest + 0x95: 0x2804, // body + 0x96: 0x10a07, // default + 0x97: 0x63c08, // selected + 0x98: 0x21e04, // face + 0x99: 0x1e505, // shape + 0x9b: 0x68408, // ontoggle + 0x9e: 0x64b02, // dt + 0x9f: 0xb604, // mark + 0xa1: 0xb01, // u + 0xa4: 0x6ab08, // onunload + 0xa5: 0x5d04, // loop + 0xa6: 0x16408, // disabled + 0xaa: 0x42307, // onended + 0xab: 0xb00a, // malignmark + 0xad: 0x67b09, // onsuspend + 0xae: 0x35105, // mtext + 0xaf: 0x64f06, // onsort + 0xb0: 0x19d08, // itemprop + 0xb3: 0x67109, // itemscope + 0xb4: 0x17305, // blink + 0xb6: 0x3b106, // ondrag + 0xb7: 0xa702, // ul + 0xb8: 0x26e04, // form + 0xb9: 0x12907, // sandbox + 0xba: 0x8b05, // frame + 0xbb: 0x1505, // value + 0xbc: 0x66209, // onstorage + 0xbf: 0xaa07, // acronym + 0xc0: 0x19a02, // rt + 0xc2: 0x202, // br + 0xc3: 0x22608, // fieldset + 0xc4: 0x2900d, // typemustmatch + 0xc5: 0xa208, // nomodule + 0xc6: 0x6c07, // noembed + 0xc7: 0x69e0d, // onbeforeprint + 0xc8: 0x19106, // button + 0xc9: 0x2f507, // onclick + 0xca: 0x70407, // summary + 0xcd: 0xfb04, // ruby + 0xce: 0x56405, // class + 0xcf: 0x3f40b, // ondragstart + 0xd0: 0x23107, // caption + 0xd4: 0xdd0e, // allowusermedia + 0xd5: 0x4cf0b, // onloadstart + 0xd9: 0x16b03, // div + 0xda: 0x4a904, // list + 0xdb: 0x32e04, // math + 0xdc: 0x44b05, // input + 0xdf: 0x3ea0a, // ondragover + 0xe0: 0x2de02, // h2 + 0xe2: 0x1b209, // plaintext + 0xe4: 0x4f30c, // onmouseenter + 0xe7: 0x47907, // checked + 0xe8: 0x47003, // pre + 0xea: 0x35f08, // multiple + 0xeb: 0xba03, // bdi + 0xec: 0x33d09, // maxlength + 0xed: 0xcf01, // q + 0xee: 0x61f0a, // onauxclick + 0xf0: 0x57c03, // wbr + 0xf2: 0x3b04, // base + 0xf3: 0x6e306, // option + 0xf5: 0x41310, // ondurationchange + 0xf7: 0x8908, // noframes + 0xf9: 0x40508, // dropzone + 0xfb: 0x67505, // scope + 0xfc: 0x8008, // reversed + 0xfd: 0x3ba0b, // ondragenter + 0xfe: 0x3fa05, // start + 0xff: 0x12f03, // xmp + 0x100: 0x5f907, // srclang + 0x101: 0x30703, // img + 0x104: 0x101, // b + 0x105: 0x25403, // for + 0x106: 0x10705, // aside + 0x107: 0x44907, // oninput + 0x108: 0x35604, // area + 0x109: 0x2a40a, // formmethod + 0x10a: 0x72604, // wrap + 0x10c: 0x23c02, // rp + 0x10d: 0x46b0a, // onkeypress + 0x10e: 0x6802, // tt + 0x110: 0x34702, // mi + 0x111: 0x36705, // muted + 0x112: 0xf303, // alt + 0x113: 0x5c504, // code + 0x114: 0x6e02, // em + 0x115: 0x3c50a, // ondragexit + 0x117: 0x9f04, // span + 0x119: 0x6d708, // manifest + 0x11a: 0x38708, // menuitem + 0x11b: 0x58b07, // content + 0x11d: 0x6c109, // onwaiting + 0x11f: 0x4c609, // onloadend + 0x121: 0x37e0d, // oncontextmenu + 0x123: 0x56d06, // onblur + 0x124: 0x3fc07, // article + 0x125: 0x9303, // dir + 0x126: 0xef04, // ping + 0x127: 0x24c08, // required + 0x128: 0x45509, // oninvalid + 0x129: 0xb105, // align + 0x12b: 0x58a04, // icon + 0x12c: 0x64d02, // h6 + 0x12d: 0x1c404, // cols + 0x12e: 0x22e0a, // figcaption + 0x12f: 0x45e09, // onkeydown + 0x130: 0x66b08, // onsubmit + 0x131: 0x14d09, // oncanplay + 0x132: 0x70b03, // sup + 0x133: 0xc01, // p + 0x135: 0x40a09, // onemptied + 0x136: 0x39106, // oncopy + 0x137: 0x19c04, // cite + 0x138: 0x3a70a, // ondblclick + 0x13a: 0x50b0b, // onmousemove + 0x13c: 0x66d03, // sub + 0x13d: 0x48703, // rel + 0x13e: 0x5f08, // optgroup + 0x142: 0x9c07, // rowspan + 0x143: 0x37806, // source + 0x144: 0x21608, // noscript + 0x145: 0x1a304, // open + 0x146: 0x20403, // ins + 0x147: 0x2540d, // foreignObject + 0x148: 0x5ad0a, // onpopstate + 0x14a: 0x28d07, // enctype + 0x14b: 0x2760e, // onautocomplete + 0x14c: 0x35208, // textarea + 0x14e: 0x2780c, // autocomplete + 0x14f: 0x15702, // hr + 0x150: 0x1de08, // controls + 0x151: 0x10902, // id + 0x153: 0x2360c, // onafterprint + 0x155: 0x2610d, // foreignobject + 0x156: 0x32707, // marquee + 0x157: 0x59a07, // onpause + 0x158: 0x5e602, // dl + 0x159: 0x5206, // height + 0x15a: 0x34703, // min + 0x15b: 0x9307, // dirname + 0x15c: 0x1f209, // translate + 0x15d: 0x5604, // html + 0x15e: 0x34709, // minlength + 0x15f: 0x48607, // preload + 0x160: 0x71408, // template + 0x161: 0x3df0b, // ondragleave + 0x162: 0x3a02, // rb + 0x164: 0x5c003, // src + 0x165: 0x6dd06, // strong + 0x167: 0x7804, // samp + 0x168: 0x6f307, // address + 0x169: 0x55108, // ononline + 0x16b: 0x1310b, // placeholder + 0x16c: 0x2c406, // target + 0x16d: 0x20605, // small + 0x16e: 0x6ca07, // onwheel + 0x16f: 0x1c90a, // annotation + 0x170: 0x4740a, // spellcheck + 0x171: 0x7207, // details + 0x172: 0x10306, // canvas + 0x173: 0x12109, // autofocus + 0x174: 0xc05, // param + 0x176: 0x46308, // download + 0x177: 0x45203, // del + 0x178: 0x36c07, // onclose + 0x179: 0xb903, // kbd + 0x17a: 0x31906, // applet + 0x17b: 0x2e004, // href + 0x17c: 0x5f108, // onresize + 0x17e: 0x49d0c, // onloadeddata + 0x180: 0xcc02, // tr + 0x181: 0x2c00a, // formtarget + 0x182: 0x11005, // title + 0x183: 0x6ff05, // style + 0x184: 0xd206, // strike + 0x185: 0x59e06, // usemap + 0x186: 0x2fc06, // iframe + 0x187: 0x1004, // main + 0x189: 0x7b07, // picture + 0x18c: 0x31605, // ismap + 0x18e: 0x4a504, // data + 0x18f: 0x5905, // label + 0x191: 0x3d10e, // referrerpolicy + 0x192: 0x15602, // th + 0x194: 0x53606, // prompt + 0x195: 0x56807, // section + 0x197: 0x6d107, // optimum + 0x198: 0x2db04, // high + 0x199: 0x15c02, // h1 + 0x19a: 0x65909, // onstalled + 0x19b: 0x16d03, // var + 0x19c: 0x4204, // time + 0x19e: 0x67402, // ms + 0x19f: 0x33106, // header + 0x1a0: 0x4da09, // onmessage + 0x1a1: 0x1a605, // nonce + 0x1a2: 0x26e0a, // formaction + 0x1a3: 0x22006, // center + 0x1a4: 0x3704, // nobr + 0x1a5: 0x59505, // table + 0x1a6: 0x4a907, // listing + 0x1a7: 0x18106, // legend + 0x1a9: 0x29b09, // challenge + 0x1aa: 0x24806, // figure + 0x1ab: 0xe605, // media + 0x1ae: 0xd904, // type + 0x1af: 0x3f04, // font + 0x1b0: 0x4da0e, // onmessageerror + 0x1b1: 0x37108, // seamless + 0x1b2: 0x8703, // dfn + 0x1b3: 0x5c705, // defer + 0x1b4: 0xc303, // low + 0x1b5: 0x19a03, // rtc + 0x1b6: 0x5230b, // onmouseover + 0x1b7: 0x2b20a, // novalidate + 0x1b8: 0x71c0a, // workertype + 0x1ba: 0x3cd07, // itemref + 0x1bd: 0x1, // a + 0x1be: 0x31803, // map + 0x1bf: 0x400c, // ontimeupdate + 0x1c0: 0x15e07, // bgsound + 0x1c1: 0x3206, // keygen + 0x1c2: 0x2705, // tbody + 0x1c5: 0x64406, // onshow + 0x1c7: 0x2501, // s + 0x1c8: 0x6607, // pattern + 0x1cc: 0x14d10, // oncanplaythrough + 0x1ce: 0x2d702, // dd + 0x1cf: 0x6f906, // srcset + 0x1d0: 0x17003, // big + 0x1d2: 0x65108, // sortable + 0x1d3: 0x48007, // onkeyup + 0x1d5: 0x5a406, // onplay + 0x1d7: 0x4b804, // meta + 0x1d8: 0x40306, // ondrop + 0x1da: 0x60008, // onscroll + 0x1db: 0x1fb0b, // crossorigin + 0x1dc: 0x5730a, // onpageshow + 0x1dd: 0x4, // abbr + 0x1de: 0x9202, // td + 0x1df: 0x58b0f, // contenteditable + 0x1e0: 0x27206, // action + 0x1e1: 0x1400b, // playsinline + 0x1e2: 0x43107, // onfocus + 0x1e3: 0x2e008, // hreflang + 0x1e5: 0x5160a, // onmouseout + 0x1e6: 0x5ea07, // onreset + 0x1e7: 0x13c08, // autoplay + 0x1e8: 0x63109, // onseeking + 0x1ea: 0x67506, // scoped + 0x1ec: 0x30a, // radiogroup + 0x1ee: 0x3800b, // contextmenu + 0x1ef: 0x52e09, // onmouseup + 0x1f1: 0x2ca06, // hgroup + 0x1f2: 0x2080f, // allowfullscreen + 0x1f3: 0x4be08, // tabindex + 0x1f6: 0x30f07, // isindex + 0x1f7: 0x1a0e, // accept-charset + 0x1f8: 0x2ae0e, // formnovalidate + 0x1fb: 0x1c90e, // annotation-xml + 0x1fc: 0x6e05, // embed + 0x1fd: 0x21806, // script + 0x1fe: 0xbb06, // dialog + 0x1ff: 0x1d707, // command } -const atomText = "abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey" + - "genavaluealtdetailsampatternobreversedfnoembedirnamediagroup" + - "ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya" + - "utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance" + - "labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink" + - "blockquotebuttonabortranslatecodefercolgroupostercolorcolspa" + - "nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross" + - "originsourcefieldsetfigcaptionafterprintfigurequiredforeignO" + - "bjectforeignobjectformactionautocompleteerrorformenctypemust" + - "matchallengeformmethodformnovalidatetimeterformtargetheightm" + - "lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug" + - "h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu" + - "eematheaderspacermaxlength4minlength5mtextareadonlymultiplem" + - "utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec" + - "hangeondblclickondragendondragenterondragleaveondragoverondr" + - "agstarticleondropzonemptiedondurationchangeonendedonerroronf" + - "ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido" + - "nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang" + - "uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta" + - "rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm" + - "ouseuponmousewheelonofflineononlineonpagehidesclassectionbef" + - "oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta" + - "teonprogresstrikeytypeonratechangeonresetonresizestrongonscr" + - "ollonseekedonseekingonselectedonshowraponsortableonstalledon" + - "storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume" + - "changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu" + - "mmarysupsvgsystemplate" +const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" + + "asefontimeupdateviacacheightmlabelooptgroupatternoembedetail" + + "sampictureversedfnoframesetdirnameterowspanomoduleacronymali" + + "gnmarkbdialogallowpaymentrequestrikeytypeallowusermediagroup" + + "ingaltfooterubyasyncanvasidefaultitleaudioncancelautofocusan" + + "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" + + "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" + + "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" + + "ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" + + "ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" + + "ignObjectforeignobjectformactionautocompleteerrorformenctype" + + "mustmatchallengeformmethodformnovalidatetimeformtargethgroup" + + "osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" + + "ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" + + "inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" + + "extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" + + "enterondragexitemreferrerpolicyondragleaveondragoverondragst" + + "articleondropzonemptiedondurationchangeonendedonerroronfocus" + + "paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" + + "spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" + + "onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" + + "usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" + + "seoveronmouseupromptonmousewheelonofflineononlineonpagehides" + + "classectionbluronpageshowbronpastepublicontenteditableonpaus" + + "emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" + + "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" + + "violationauxclickonseekedonseekingonselectedonshowidth6onsor" + + "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" + + "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" + + "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" + + "arysupsvgsystemplateworkertypewrap" diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go index 52f651ff6db8..a3a918f0b381 100644 --- a/vendor/golang.org/x/net/html/const.go +++ b/vendor/golang.org/x/net/html/const.go @@ -4,7 +4,7 @@ package html -// Section 12.2.3.2 of the HTML5 specification says "The following elements +// Section 12.2.4.2 of the HTML5 specification says "The following elements // have varying levels of special parsing rules". // https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements var isSpecialElementMap = map[string]bool{ @@ -52,10 +52,12 @@ var isSpecialElementMap = map[string]bool{ "iframe": true, "img": true, "input": true, - "isindex": true, + "isindex": true, // The 'isindex' element has been removed, but keep it for backwards compatibility. + "keygen": true, "li": true, "link": true, "listing": true, + "main": true, "marquee": true, "menu": true, "meta": true, @@ -95,8 +97,16 @@ func isSpecialElement(element *Node) bool { switch element.Namespace { case "", "html": return isSpecialElementMap[element.Data] + case "math": + switch element.Data { + case "mi", "mo", "mn", "ms", "mtext", "annotation-xml": + return true + } case "svg": - return element.Data == "foreignObject" + switch element.Data { + case "foreignObject", "desc", "title": + return true + } } return false } diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go index 94f496874aba..822ed42a04c1 100644 --- a/vendor/golang.org/x/net/html/doc.go +++ b/vendor/golang.org/x/net/html/doc.go @@ -49,18 +49,18 @@ call to Next. For example, to extract an HTML page's anchor text: for { tt := z.Next() switch tt { - case ErrorToken: + case html.ErrorToken: return z.Err() - case TextToken: + case html.TextToken: if depth > 0 { // emitBytes should copy the []byte it receives, // if it doesn't process it immediately. emitBytes(z.Text()) } - case StartTagToken, EndTagToken: + case html.StartTagToken, html.EndTagToken: tn, _ := z.TagName() if len(tn) == 1 && tn[0] == 'a' { - if tt == StartTagToken { + if tt == html.StartTagToken { depth++ } else { depth-- diff --git a/vendor/golang.org/x/net/html/entity.go b/vendor/golang.org/x/net/html/entity.go index a50c04c60e95..b628880a014d 100644 --- a/vendor/golang.org/x/net/html/entity.go +++ b/vendor/golang.org/x/net/html/entity.go @@ -75,2083 +75,2083 @@ var entity = map[string]rune{ "Copf;": '\U00002102', "Coproduct;": '\U00002210', "CounterClockwiseContourIntegral;": '\U00002233', - "Cross;": '\U00002A2F', - "Cscr;": '\U0001D49E', - "Cup;": '\U000022D3', - "CupCap;": '\U0000224D', - "DD;": '\U00002145', - "DDotrahd;": '\U00002911', - "DJcy;": '\U00000402', - "DScy;": '\U00000405', - "DZcy;": '\U0000040F', - "Dagger;": '\U00002021', - "Darr;": '\U000021A1', - "Dashv;": '\U00002AE4', - "Dcaron;": '\U0000010E', - "Dcy;": '\U00000414', - "Del;": '\U00002207', - "Delta;": '\U00000394', - "Dfr;": '\U0001D507', - "DiacriticalAcute;": '\U000000B4', - "DiacriticalDot;": '\U000002D9', - "DiacriticalDoubleAcute;": '\U000002DD', - "DiacriticalGrave;": '\U00000060', - "DiacriticalTilde;": '\U000002DC', - "Diamond;": '\U000022C4', - "DifferentialD;": '\U00002146', - "Dopf;": '\U0001D53B', - "Dot;": '\U000000A8', - "DotDot;": '\U000020DC', - "DotEqual;": '\U00002250', - "DoubleContourIntegral;": '\U0000222F', - "DoubleDot;": '\U000000A8', - "DoubleDownArrow;": '\U000021D3', - "DoubleLeftArrow;": '\U000021D0', - "DoubleLeftRightArrow;": '\U000021D4', - "DoubleLeftTee;": '\U00002AE4', - "DoubleLongLeftArrow;": '\U000027F8', - "DoubleLongLeftRightArrow;": '\U000027FA', - "DoubleLongRightArrow;": '\U000027F9', - "DoubleRightArrow;": '\U000021D2', - "DoubleRightTee;": '\U000022A8', - "DoubleUpArrow;": '\U000021D1', - "DoubleUpDownArrow;": '\U000021D5', - "DoubleVerticalBar;": '\U00002225', - "DownArrow;": '\U00002193', - "DownArrowBar;": '\U00002913', - "DownArrowUpArrow;": '\U000021F5', - "DownBreve;": '\U00000311', - "DownLeftRightVector;": '\U00002950', - "DownLeftTeeVector;": '\U0000295E', - "DownLeftVector;": '\U000021BD', - "DownLeftVectorBar;": '\U00002956', - "DownRightTeeVector;": '\U0000295F', - "DownRightVector;": '\U000021C1', - "DownRightVectorBar;": '\U00002957', - "DownTee;": '\U000022A4', - "DownTeeArrow;": '\U000021A7', - "Downarrow;": '\U000021D3', - "Dscr;": '\U0001D49F', - "Dstrok;": '\U00000110', - "ENG;": '\U0000014A', - "ETH;": '\U000000D0', - "Eacute;": '\U000000C9', - "Ecaron;": '\U0000011A', - "Ecirc;": '\U000000CA', - "Ecy;": '\U0000042D', - "Edot;": '\U00000116', - "Efr;": '\U0001D508', - "Egrave;": '\U000000C8', - "Element;": '\U00002208', - "Emacr;": '\U00000112', - "EmptySmallSquare;": '\U000025FB', - "EmptyVerySmallSquare;": '\U000025AB', - "Eogon;": '\U00000118', - "Eopf;": '\U0001D53C', - "Epsilon;": '\U00000395', - "Equal;": '\U00002A75', - "EqualTilde;": '\U00002242', - "Equilibrium;": '\U000021CC', - "Escr;": '\U00002130', - "Esim;": '\U00002A73', - "Eta;": '\U00000397', - "Euml;": '\U000000CB', - "Exists;": '\U00002203', - "ExponentialE;": '\U00002147', - "Fcy;": '\U00000424', - "Ffr;": '\U0001D509', - "FilledSmallSquare;": '\U000025FC', - "FilledVerySmallSquare;": '\U000025AA', - "Fopf;": '\U0001D53D', - "ForAll;": '\U00002200', - "Fouriertrf;": '\U00002131', - "Fscr;": '\U00002131', - "GJcy;": '\U00000403', - "GT;": '\U0000003E', - "Gamma;": '\U00000393', - "Gammad;": '\U000003DC', - "Gbreve;": '\U0000011E', - "Gcedil;": '\U00000122', - "Gcirc;": '\U0000011C', - "Gcy;": '\U00000413', - "Gdot;": '\U00000120', - "Gfr;": '\U0001D50A', - "Gg;": '\U000022D9', - "Gopf;": '\U0001D53E', - "GreaterEqual;": '\U00002265', - "GreaterEqualLess;": '\U000022DB', - "GreaterFullEqual;": '\U00002267', - "GreaterGreater;": '\U00002AA2', - "GreaterLess;": '\U00002277', - "GreaterSlantEqual;": '\U00002A7E', - "GreaterTilde;": '\U00002273', - "Gscr;": '\U0001D4A2', - "Gt;": '\U0000226B', - "HARDcy;": '\U0000042A', - "Hacek;": '\U000002C7', - "Hat;": '\U0000005E', - "Hcirc;": '\U00000124', - "Hfr;": '\U0000210C', - "HilbertSpace;": '\U0000210B', - "Hopf;": '\U0000210D', - "HorizontalLine;": '\U00002500', - "Hscr;": '\U0000210B', - "Hstrok;": '\U00000126', - "HumpDownHump;": '\U0000224E', - "HumpEqual;": '\U0000224F', - "IEcy;": '\U00000415', - "IJlig;": '\U00000132', - "IOcy;": '\U00000401', - "Iacute;": '\U000000CD', - "Icirc;": '\U000000CE', - "Icy;": '\U00000418', - "Idot;": '\U00000130', - "Ifr;": '\U00002111', - "Igrave;": '\U000000CC', - "Im;": '\U00002111', - "Imacr;": '\U0000012A', - "ImaginaryI;": '\U00002148', - "Implies;": '\U000021D2', - "Int;": '\U0000222C', - "Integral;": '\U0000222B', - "Intersection;": '\U000022C2', - "InvisibleComma;": '\U00002063', - "InvisibleTimes;": '\U00002062', - "Iogon;": '\U0000012E', - "Iopf;": '\U0001D540', - "Iota;": '\U00000399', - "Iscr;": '\U00002110', - "Itilde;": '\U00000128', - "Iukcy;": '\U00000406', - "Iuml;": '\U000000CF', - "Jcirc;": '\U00000134', - "Jcy;": '\U00000419', - "Jfr;": '\U0001D50D', - "Jopf;": '\U0001D541', - "Jscr;": '\U0001D4A5', - "Jsercy;": '\U00000408', - "Jukcy;": '\U00000404', - "KHcy;": '\U00000425', - "KJcy;": '\U0000040C', - "Kappa;": '\U0000039A', - "Kcedil;": '\U00000136', - "Kcy;": '\U0000041A', - "Kfr;": '\U0001D50E', - "Kopf;": '\U0001D542', - "Kscr;": '\U0001D4A6', - "LJcy;": '\U00000409', - "LT;": '\U0000003C', - "Lacute;": '\U00000139', - "Lambda;": '\U0000039B', - "Lang;": '\U000027EA', - "Laplacetrf;": '\U00002112', - "Larr;": '\U0000219E', - "Lcaron;": '\U0000013D', - "Lcedil;": '\U0000013B', - "Lcy;": '\U0000041B', - "LeftAngleBracket;": '\U000027E8', - "LeftArrow;": '\U00002190', - "LeftArrowBar;": '\U000021E4', - "LeftArrowRightArrow;": '\U000021C6', - "LeftCeiling;": '\U00002308', - "LeftDoubleBracket;": '\U000027E6', - "LeftDownTeeVector;": '\U00002961', - "LeftDownVector;": '\U000021C3', - "LeftDownVectorBar;": '\U00002959', - "LeftFloor;": '\U0000230A', - "LeftRightArrow;": '\U00002194', - "LeftRightVector;": '\U0000294E', - "LeftTee;": '\U000022A3', - "LeftTeeArrow;": '\U000021A4', - "LeftTeeVector;": '\U0000295A', - "LeftTriangle;": '\U000022B2', - "LeftTriangleBar;": '\U000029CF', - "LeftTriangleEqual;": '\U000022B4', - "LeftUpDownVector;": '\U00002951', - "LeftUpTeeVector;": '\U00002960', - "LeftUpVector;": '\U000021BF', - "LeftUpVectorBar;": '\U00002958', - "LeftVector;": '\U000021BC', - "LeftVectorBar;": '\U00002952', - "Leftarrow;": '\U000021D0', - "Leftrightarrow;": '\U000021D4', - "LessEqualGreater;": '\U000022DA', - "LessFullEqual;": '\U00002266', - "LessGreater;": '\U00002276', - "LessLess;": '\U00002AA1', - "LessSlantEqual;": '\U00002A7D', - "LessTilde;": '\U00002272', - "Lfr;": '\U0001D50F', - "Ll;": '\U000022D8', - "Lleftarrow;": '\U000021DA', - "Lmidot;": '\U0000013F', - "LongLeftArrow;": '\U000027F5', - "LongLeftRightArrow;": '\U000027F7', - "LongRightArrow;": '\U000027F6', - "Longleftarrow;": '\U000027F8', - "Longleftrightarrow;": '\U000027FA', - "Longrightarrow;": '\U000027F9', - "Lopf;": '\U0001D543', - "LowerLeftArrow;": '\U00002199', - "LowerRightArrow;": '\U00002198', - "Lscr;": '\U00002112', - "Lsh;": '\U000021B0', - "Lstrok;": '\U00000141', - "Lt;": '\U0000226A', - "Map;": '\U00002905', - "Mcy;": '\U0000041C', - "MediumSpace;": '\U0000205F', - "Mellintrf;": '\U00002133', - "Mfr;": '\U0001D510', - "MinusPlus;": '\U00002213', - "Mopf;": '\U0001D544', - "Mscr;": '\U00002133', - "Mu;": '\U0000039C', - "NJcy;": '\U0000040A', - "Nacute;": '\U00000143', - "Ncaron;": '\U00000147', - "Ncedil;": '\U00000145', - "Ncy;": '\U0000041D', - "NegativeMediumSpace;": '\U0000200B', - "NegativeThickSpace;": '\U0000200B', - "NegativeThinSpace;": '\U0000200B', - "NegativeVeryThinSpace;": '\U0000200B', - "NestedGreaterGreater;": '\U0000226B', - "NestedLessLess;": '\U0000226A', - "NewLine;": '\U0000000A', - "Nfr;": '\U0001D511', - "NoBreak;": '\U00002060', - "NonBreakingSpace;": '\U000000A0', - "Nopf;": '\U00002115', - "Not;": '\U00002AEC', - "NotCongruent;": '\U00002262', - "NotCupCap;": '\U0000226D', - "NotDoubleVerticalBar;": '\U00002226', - "NotElement;": '\U00002209', - "NotEqual;": '\U00002260', - "NotExists;": '\U00002204', - "NotGreater;": '\U0000226F', - "NotGreaterEqual;": '\U00002271', - "NotGreaterLess;": '\U00002279', - "NotGreaterTilde;": '\U00002275', - "NotLeftTriangle;": '\U000022EA', - "NotLeftTriangleEqual;": '\U000022EC', - "NotLess;": '\U0000226E', - "NotLessEqual;": '\U00002270', - "NotLessGreater;": '\U00002278', - "NotLessTilde;": '\U00002274', - "NotPrecedes;": '\U00002280', - "NotPrecedesSlantEqual;": '\U000022E0', - "NotReverseElement;": '\U0000220C', - "NotRightTriangle;": '\U000022EB', - "NotRightTriangleEqual;": '\U000022ED', - "NotSquareSubsetEqual;": '\U000022E2', - "NotSquareSupersetEqual;": '\U000022E3', - "NotSubsetEqual;": '\U00002288', - "NotSucceeds;": '\U00002281', - "NotSucceedsSlantEqual;": '\U000022E1', - "NotSupersetEqual;": '\U00002289', - "NotTilde;": '\U00002241', - "NotTildeEqual;": '\U00002244', - "NotTildeFullEqual;": '\U00002247', - "NotTildeTilde;": '\U00002249', - "NotVerticalBar;": '\U00002224', - "Nscr;": '\U0001D4A9', - "Ntilde;": '\U000000D1', - "Nu;": '\U0000039D', - "OElig;": '\U00000152', - "Oacute;": '\U000000D3', - "Ocirc;": '\U000000D4', - "Ocy;": '\U0000041E', - "Odblac;": '\U00000150', - "Ofr;": '\U0001D512', - "Ograve;": '\U000000D2', - "Omacr;": '\U0000014C', - "Omega;": '\U000003A9', - "Omicron;": '\U0000039F', - "Oopf;": '\U0001D546', - "OpenCurlyDoubleQuote;": '\U0000201C', - "OpenCurlyQuote;": '\U00002018', - "Or;": '\U00002A54', - "Oscr;": '\U0001D4AA', - "Oslash;": '\U000000D8', - "Otilde;": '\U000000D5', - "Otimes;": '\U00002A37', - "Ouml;": '\U000000D6', - "OverBar;": '\U0000203E', - "OverBrace;": '\U000023DE', - "OverBracket;": '\U000023B4', - "OverParenthesis;": '\U000023DC', - "PartialD;": '\U00002202', - "Pcy;": '\U0000041F', - "Pfr;": '\U0001D513', - "Phi;": '\U000003A6', - "Pi;": '\U000003A0', - "PlusMinus;": '\U000000B1', - "Poincareplane;": '\U0000210C', - "Popf;": '\U00002119', - "Pr;": '\U00002ABB', - "Precedes;": '\U0000227A', - "PrecedesEqual;": '\U00002AAF', - "PrecedesSlantEqual;": '\U0000227C', - "PrecedesTilde;": '\U0000227E', - "Prime;": '\U00002033', - "Product;": '\U0000220F', - "Proportion;": '\U00002237', - "Proportional;": '\U0000221D', - "Pscr;": '\U0001D4AB', - "Psi;": '\U000003A8', - "QUOT;": '\U00000022', - "Qfr;": '\U0001D514', - "Qopf;": '\U0000211A', - "Qscr;": '\U0001D4AC', - "RBarr;": '\U00002910', - "REG;": '\U000000AE', - "Racute;": '\U00000154', - "Rang;": '\U000027EB', - "Rarr;": '\U000021A0', - "Rarrtl;": '\U00002916', - "Rcaron;": '\U00000158', - "Rcedil;": '\U00000156', - "Rcy;": '\U00000420', - "Re;": '\U0000211C', - "ReverseElement;": '\U0000220B', - "ReverseEquilibrium;": '\U000021CB', - "ReverseUpEquilibrium;": '\U0000296F', - "Rfr;": '\U0000211C', - "Rho;": '\U000003A1', - "RightAngleBracket;": '\U000027E9', - "RightArrow;": '\U00002192', - "RightArrowBar;": '\U000021E5', - "RightArrowLeftArrow;": '\U000021C4', - "RightCeiling;": '\U00002309', - "RightDoubleBracket;": '\U000027E7', - "RightDownTeeVector;": '\U0000295D', - "RightDownVector;": '\U000021C2', - "RightDownVectorBar;": '\U00002955', - "RightFloor;": '\U0000230B', - "RightTee;": '\U000022A2', - "RightTeeArrow;": '\U000021A6', - "RightTeeVector;": '\U0000295B', - "RightTriangle;": '\U000022B3', - "RightTriangleBar;": '\U000029D0', - "RightTriangleEqual;": '\U000022B5', - "RightUpDownVector;": '\U0000294F', - "RightUpTeeVector;": '\U0000295C', - "RightUpVector;": '\U000021BE', - "RightUpVectorBar;": '\U00002954', - "RightVector;": '\U000021C0', - "RightVectorBar;": '\U00002953', - "Rightarrow;": '\U000021D2', - "Ropf;": '\U0000211D', - "RoundImplies;": '\U00002970', - "Rrightarrow;": '\U000021DB', - "Rscr;": '\U0000211B', - "Rsh;": '\U000021B1', - "RuleDelayed;": '\U000029F4', - "SHCHcy;": '\U00000429', - "SHcy;": '\U00000428', - "SOFTcy;": '\U0000042C', - "Sacute;": '\U0000015A', - "Sc;": '\U00002ABC', - "Scaron;": '\U00000160', - "Scedil;": '\U0000015E', - "Scirc;": '\U0000015C', - "Scy;": '\U00000421', - "Sfr;": '\U0001D516', - "ShortDownArrow;": '\U00002193', - "ShortLeftArrow;": '\U00002190', - "ShortRightArrow;": '\U00002192', - "ShortUpArrow;": '\U00002191', - "Sigma;": '\U000003A3', - "SmallCircle;": '\U00002218', - "Sopf;": '\U0001D54A', - "Sqrt;": '\U0000221A', - "Square;": '\U000025A1', - "SquareIntersection;": '\U00002293', - "SquareSubset;": '\U0000228F', - "SquareSubsetEqual;": '\U00002291', - "SquareSuperset;": '\U00002290', - "SquareSupersetEqual;": '\U00002292', - "SquareUnion;": '\U00002294', - "Sscr;": '\U0001D4AE', - "Star;": '\U000022C6', - "Sub;": '\U000022D0', - "Subset;": '\U000022D0', - "SubsetEqual;": '\U00002286', - "Succeeds;": '\U0000227B', - "SucceedsEqual;": '\U00002AB0', - "SucceedsSlantEqual;": '\U0000227D', - "SucceedsTilde;": '\U0000227F', - "SuchThat;": '\U0000220B', - "Sum;": '\U00002211', - "Sup;": '\U000022D1', - "Superset;": '\U00002283', - "SupersetEqual;": '\U00002287', - "Supset;": '\U000022D1', - "THORN;": '\U000000DE', - "TRADE;": '\U00002122', - "TSHcy;": '\U0000040B', - "TScy;": '\U00000426', - "Tab;": '\U00000009', - "Tau;": '\U000003A4', - "Tcaron;": '\U00000164', - "Tcedil;": '\U00000162', - "Tcy;": '\U00000422', - "Tfr;": '\U0001D517', - "Therefore;": '\U00002234', - "Theta;": '\U00000398', - "ThinSpace;": '\U00002009', - "Tilde;": '\U0000223C', - "TildeEqual;": '\U00002243', - "TildeFullEqual;": '\U00002245', - "TildeTilde;": '\U00002248', - "Topf;": '\U0001D54B', - "TripleDot;": '\U000020DB', - "Tscr;": '\U0001D4AF', - "Tstrok;": '\U00000166', - "Uacute;": '\U000000DA', - "Uarr;": '\U0000219F', - "Uarrocir;": '\U00002949', - "Ubrcy;": '\U0000040E', - "Ubreve;": '\U0000016C', - "Ucirc;": '\U000000DB', - "Ucy;": '\U00000423', - "Udblac;": '\U00000170', - "Ufr;": '\U0001D518', - "Ugrave;": '\U000000D9', - "Umacr;": '\U0000016A', - "UnderBar;": '\U0000005F', - "UnderBrace;": '\U000023DF', - "UnderBracket;": '\U000023B5', - "UnderParenthesis;": '\U000023DD', - "Union;": '\U000022C3', - "UnionPlus;": '\U0000228E', - "Uogon;": '\U00000172', - "Uopf;": '\U0001D54C', - "UpArrow;": '\U00002191', - "UpArrowBar;": '\U00002912', - "UpArrowDownArrow;": '\U000021C5', - "UpDownArrow;": '\U00002195', - "UpEquilibrium;": '\U0000296E', - "UpTee;": '\U000022A5', - "UpTeeArrow;": '\U000021A5', - "Uparrow;": '\U000021D1', - "Updownarrow;": '\U000021D5', - "UpperLeftArrow;": '\U00002196', - "UpperRightArrow;": '\U00002197', - "Upsi;": '\U000003D2', - "Upsilon;": '\U000003A5', - "Uring;": '\U0000016E', - "Uscr;": '\U0001D4B0', - "Utilde;": '\U00000168', - "Uuml;": '\U000000DC', - "VDash;": '\U000022AB', - "Vbar;": '\U00002AEB', - "Vcy;": '\U00000412', - "Vdash;": '\U000022A9', - "Vdashl;": '\U00002AE6', - "Vee;": '\U000022C1', - "Verbar;": '\U00002016', - "Vert;": '\U00002016', - "VerticalBar;": '\U00002223', - "VerticalLine;": '\U0000007C', - "VerticalSeparator;": '\U00002758', - "VerticalTilde;": '\U00002240', - "VeryThinSpace;": '\U0000200A', - "Vfr;": '\U0001D519', - "Vopf;": '\U0001D54D', - "Vscr;": '\U0001D4B1', - "Vvdash;": '\U000022AA', - "Wcirc;": '\U00000174', - "Wedge;": '\U000022C0', - "Wfr;": '\U0001D51A', - "Wopf;": '\U0001D54E', - "Wscr;": '\U0001D4B2', - "Xfr;": '\U0001D51B', - "Xi;": '\U0000039E', - "Xopf;": '\U0001D54F', - "Xscr;": '\U0001D4B3', - "YAcy;": '\U0000042F', - "YIcy;": '\U00000407', - "YUcy;": '\U0000042E', - "Yacute;": '\U000000DD', - "Ycirc;": '\U00000176', - "Ycy;": '\U0000042B', - "Yfr;": '\U0001D51C', - "Yopf;": '\U0001D550', - "Yscr;": '\U0001D4B4', - "Yuml;": '\U00000178', - "ZHcy;": '\U00000416', - "Zacute;": '\U00000179', - "Zcaron;": '\U0000017D', - "Zcy;": '\U00000417', - "Zdot;": '\U0000017B', - "ZeroWidthSpace;": '\U0000200B', - "Zeta;": '\U00000396', - "Zfr;": '\U00002128', - "Zopf;": '\U00002124', - "Zscr;": '\U0001D4B5', - "aacute;": '\U000000E1', - "abreve;": '\U00000103', - "ac;": '\U0000223E', - "acd;": '\U0000223F', - "acirc;": '\U000000E2', - "acute;": '\U000000B4', - "acy;": '\U00000430', - "aelig;": '\U000000E6', - "af;": '\U00002061', - "afr;": '\U0001D51E', - "agrave;": '\U000000E0', - "alefsym;": '\U00002135', - "aleph;": '\U00002135', - "alpha;": '\U000003B1', - "amacr;": '\U00000101', - "amalg;": '\U00002A3F', - "amp;": '\U00000026', - "and;": '\U00002227', - "andand;": '\U00002A55', - "andd;": '\U00002A5C', - "andslope;": '\U00002A58', - "andv;": '\U00002A5A', - "ang;": '\U00002220', - "ange;": '\U000029A4', - "angle;": '\U00002220', - "angmsd;": '\U00002221', - "angmsdaa;": '\U000029A8', - "angmsdab;": '\U000029A9', - "angmsdac;": '\U000029AA', - "angmsdad;": '\U000029AB', - "angmsdae;": '\U000029AC', - "angmsdaf;": '\U000029AD', - "angmsdag;": '\U000029AE', - "angmsdah;": '\U000029AF', - "angrt;": '\U0000221F', - "angrtvb;": '\U000022BE', - "angrtvbd;": '\U0000299D', - "angsph;": '\U00002222', - "angst;": '\U000000C5', - "angzarr;": '\U0000237C', - "aogon;": '\U00000105', - "aopf;": '\U0001D552', - "ap;": '\U00002248', - "apE;": '\U00002A70', - "apacir;": '\U00002A6F', - "ape;": '\U0000224A', - "apid;": '\U0000224B', - "apos;": '\U00000027', - "approx;": '\U00002248', - "approxeq;": '\U0000224A', - "aring;": '\U000000E5', - "ascr;": '\U0001D4B6', - "ast;": '\U0000002A', - "asymp;": '\U00002248', - "asympeq;": '\U0000224D', - "atilde;": '\U000000E3', - "auml;": '\U000000E4', - "awconint;": '\U00002233', - "awint;": '\U00002A11', - "bNot;": '\U00002AED', - "backcong;": '\U0000224C', - "backepsilon;": '\U000003F6', - "backprime;": '\U00002035', - "backsim;": '\U0000223D', - "backsimeq;": '\U000022CD', - "barvee;": '\U000022BD', - "barwed;": '\U00002305', - "barwedge;": '\U00002305', - "bbrk;": '\U000023B5', - "bbrktbrk;": '\U000023B6', - "bcong;": '\U0000224C', - "bcy;": '\U00000431', - "bdquo;": '\U0000201E', - "becaus;": '\U00002235', - "because;": '\U00002235', - "bemptyv;": '\U000029B0', - "bepsi;": '\U000003F6', - "bernou;": '\U0000212C', - "beta;": '\U000003B2', - "beth;": '\U00002136', - "between;": '\U0000226C', - "bfr;": '\U0001D51F', - "bigcap;": '\U000022C2', - "bigcirc;": '\U000025EF', - "bigcup;": '\U000022C3', - "bigodot;": '\U00002A00', - "bigoplus;": '\U00002A01', - "bigotimes;": '\U00002A02', - "bigsqcup;": '\U00002A06', - "bigstar;": '\U00002605', - "bigtriangledown;": '\U000025BD', - "bigtriangleup;": '\U000025B3', - "biguplus;": '\U00002A04', - "bigvee;": '\U000022C1', - "bigwedge;": '\U000022C0', - "bkarow;": '\U0000290D', - "blacklozenge;": '\U000029EB', - "blacksquare;": '\U000025AA', - "blacktriangle;": '\U000025B4', - "blacktriangledown;": '\U000025BE', - "blacktriangleleft;": '\U000025C2', - "blacktriangleright;": '\U000025B8', - "blank;": '\U00002423', - "blk12;": '\U00002592', - "blk14;": '\U00002591', - "blk34;": '\U00002593', - "block;": '\U00002588', - "bnot;": '\U00002310', - "bopf;": '\U0001D553', - "bot;": '\U000022A5', - "bottom;": '\U000022A5', - "bowtie;": '\U000022C8', - "boxDL;": '\U00002557', - "boxDR;": '\U00002554', - "boxDl;": '\U00002556', - "boxDr;": '\U00002553', - "boxH;": '\U00002550', - "boxHD;": '\U00002566', - "boxHU;": '\U00002569', - "boxHd;": '\U00002564', - "boxHu;": '\U00002567', - "boxUL;": '\U0000255D', - "boxUR;": '\U0000255A', - "boxUl;": '\U0000255C', - "boxUr;": '\U00002559', - "boxV;": '\U00002551', - "boxVH;": '\U0000256C', - "boxVL;": '\U00002563', - "boxVR;": '\U00002560', - "boxVh;": '\U0000256B', - "boxVl;": '\U00002562', - "boxVr;": '\U0000255F', - "boxbox;": '\U000029C9', - "boxdL;": '\U00002555', - "boxdR;": '\U00002552', - "boxdl;": '\U00002510', - "boxdr;": '\U0000250C', - "boxh;": '\U00002500', - "boxhD;": '\U00002565', - "boxhU;": '\U00002568', - "boxhd;": '\U0000252C', - "boxhu;": '\U00002534', - "boxminus;": '\U0000229F', - "boxplus;": '\U0000229E', - "boxtimes;": '\U000022A0', - "boxuL;": '\U0000255B', - "boxuR;": '\U00002558', - "boxul;": '\U00002518', - "boxur;": '\U00002514', - "boxv;": '\U00002502', - "boxvH;": '\U0000256A', - "boxvL;": '\U00002561', - "boxvR;": '\U0000255E', - "boxvh;": '\U0000253C', - "boxvl;": '\U00002524', - "boxvr;": '\U0000251C', - "bprime;": '\U00002035', - "breve;": '\U000002D8', - "brvbar;": '\U000000A6', - "bscr;": '\U0001D4B7', - "bsemi;": '\U0000204F', - "bsim;": '\U0000223D', - "bsime;": '\U000022CD', - "bsol;": '\U0000005C', - "bsolb;": '\U000029C5', - "bsolhsub;": '\U000027C8', - "bull;": '\U00002022', - "bullet;": '\U00002022', - "bump;": '\U0000224E', - "bumpE;": '\U00002AAE', - "bumpe;": '\U0000224F', - "bumpeq;": '\U0000224F', - "cacute;": '\U00000107', - "cap;": '\U00002229', - "capand;": '\U00002A44', - "capbrcup;": '\U00002A49', - "capcap;": '\U00002A4B', - "capcup;": '\U00002A47', - "capdot;": '\U00002A40', - "caret;": '\U00002041', - "caron;": '\U000002C7', - "ccaps;": '\U00002A4D', - "ccaron;": '\U0000010D', - "ccedil;": '\U000000E7', - "ccirc;": '\U00000109', - "ccups;": '\U00002A4C', - "ccupssm;": '\U00002A50', - "cdot;": '\U0000010B', - "cedil;": '\U000000B8', - "cemptyv;": '\U000029B2', - "cent;": '\U000000A2', - "centerdot;": '\U000000B7', - "cfr;": '\U0001D520', - "chcy;": '\U00000447', - "check;": '\U00002713', - "checkmark;": '\U00002713', - "chi;": '\U000003C7', - "cir;": '\U000025CB', - "cirE;": '\U000029C3', - "circ;": '\U000002C6', - "circeq;": '\U00002257', - "circlearrowleft;": '\U000021BA', - "circlearrowright;": '\U000021BB', - "circledR;": '\U000000AE', - "circledS;": '\U000024C8', - "circledast;": '\U0000229B', - "circledcirc;": '\U0000229A', - "circleddash;": '\U0000229D', - "cire;": '\U00002257', - "cirfnint;": '\U00002A10', - "cirmid;": '\U00002AEF', - "cirscir;": '\U000029C2', - "clubs;": '\U00002663', - "clubsuit;": '\U00002663', - "colon;": '\U0000003A', - "colone;": '\U00002254', - "coloneq;": '\U00002254', - "comma;": '\U0000002C', - "commat;": '\U00000040', - "comp;": '\U00002201', - "compfn;": '\U00002218', - "complement;": '\U00002201', - "complexes;": '\U00002102', - "cong;": '\U00002245', - "congdot;": '\U00002A6D', - "conint;": '\U0000222E', - "copf;": '\U0001D554', - "coprod;": '\U00002210', - "copy;": '\U000000A9', - "copysr;": '\U00002117', - "crarr;": '\U000021B5', - "cross;": '\U00002717', - "cscr;": '\U0001D4B8', - "csub;": '\U00002ACF', - "csube;": '\U00002AD1', - "csup;": '\U00002AD0', - "csupe;": '\U00002AD2', - "ctdot;": '\U000022EF', - "cudarrl;": '\U00002938', - "cudarrr;": '\U00002935', - "cuepr;": '\U000022DE', - "cuesc;": '\U000022DF', - "cularr;": '\U000021B6', - "cularrp;": '\U0000293D', - "cup;": '\U0000222A', - "cupbrcap;": '\U00002A48', - "cupcap;": '\U00002A46', - "cupcup;": '\U00002A4A', - "cupdot;": '\U0000228D', - "cupor;": '\U00002A45', - "curarr;": '\U000021B7', - "curarrm;": '\U0000293C', - "curlyeqprec;": '\U000022DE', - "curlyeqsucc;": '\U000022DF', - "curlyvee;": '\U000022CE', - "curlywedge;": '\U000022CF', - "curren;": '\U000000A4', - "curvearrowleft;": '\U000021B6', - "curvearrowright;": '\U000021B7', - "cuvee;": '\U000022CE', - "cuwed;": '\U000022CF', - "cwconint;": '\U00002232', - "cwint;": '\U00002231', - "cylcty;": '\U0000232D', - "dArr;": '\U000021D3', - "dHar;": '\U00002965', - "dagger;": '\U00002020', - "daleth;": '\U00002138', - "darr;": '\U00002193', - "dash;": '\U00002010', - "dashv;": '\U000022A3', - "dbkarow;": '\U0000290F', - "dblac;": '\U000002DD', - "dcaron;": '\U0000010F', - "dcy;": '\U00000434', - "dd;": '\U00002146', - "ddagger;": '\U00002021', - "ddarr;": '\U000021CA', - "ddotseq;": '\U00002A77', - "deg;": '\U000000B0', - "delta;": '\U000003B4', - "demptyv;": '\U000029B1', - "dfisht;": '\U0000297F', - "dfr;": '\U0001D521', - "dharl;": '\U000021C3', - "dharr;": '\U000021C2', - "diam;": '\U000022C4', - "diamond;": '\U000022C4', - "diamondsuit;": '\U00002666', - "diams;": '\U00002666', - "die;": '\U000000A8', - "digamma;": '\U000003DD', - "disin;": '\U000022F2', - "div;": '\U000000F7', - "divide;": '\U000000F7', - "divideontimes;": '\U000022C7', - "divonx;": '\U000022C7', - "djcy;": '\U00000452', - "dlcorn;": '\U0000231E', - "dlcrop;": '\U0000230D', - "dollar;": '\U00000024', - "dopf;": '\U0001D555', - "dot;": '\U000002D9', - "doteq;": '\U00002250', - "doteqdot;": '\U00002251', - "dotminus;": '\U00002238', - "dotplus;": '\U00002214', - "dotsquare;": '\U000022A1', - "doublebarwedge;": '\U00002306', - "downarrow;": '\U00002193', - "downdownarrows;": '\U000021CA', - "downharpoonleft;": '\U000021C3', - "downharpoonright;": '\U000021C2', - "drbkarow;": '\U00002910', - "drcorn;": '\U0000231F', - "drcrop;": '\U0000230C', - "dscr;": '\U0001D4B9', - "dscy;": '\U00000455', - "dsol;": '\U000029F6', - "dstrok;": '\U00000111', - "dtdot;": '\U000022F1', - "dtri;": '\U000025BF', - "dtrif;": '\U000025BE', - "duarr;": '\U000021F5', - "duhar;": '\U0000296F', - "dwangle;": '\U000029A6', - "dzcy;": '\U0000045F', - "dzigrarr;": '\U000027FF', - "eDDot;": '\U00002A77', - "eDot;": '\U00002251', - "eacute;": '\U000000E9', - "easter;": '\U00002A6E', - "ecaron;": '\U0000011B', - "ecir;": '\U00002256', - "ecirc;": '\U000000EA', - "ecolon;": '\U00002255', - "ecy;": '\U0000044D', - "edot;": '\U00000117', - "ee;": '\U00002147', - "efDot;": '\U00002252', - "efr;": '\U0001D522', - "eg;": '\U00002A9A', - "egrave;": '\U000000E8', - "egs;": '\U00002A96', - "egsdot;": '\U00002A98', - "el;": '\U00002A99', - "elinters;": '\U000023E7', - "ell;": '\U00002113', - "els;": '\U00002A95', - "elsdot;": '\U00002A97', - "emacr;": '\U00000113', - "empty;": '\U00002205', - "emptyset;": '\U00002205', - "emptyv;": '\U00002205', - "emsp;": '\U00002003', - "emsp13;": '\U00002004', - "emsp14;": '\U00002005', - "eng;": '\U0000014B', - "ensp;": '\U00002002', - "eogon;": '\U00000119', - "eopf;": '\U0001D556', - "epar;": '\U000022D5', - "eparsl;": '\U000029E3', - "eplus;": '\U00002A71', - "epsi;": '\U000003B5', - "epsilon;": '\U000003B5', - "epsiv;": '\U000003F5', - "eqcirc;": '\U00002256', - "eqcolon;": '\U00002255', - "eqsim;": '\U00002242', - "eqslantgtr;": '\U00002A96', - "eqslantless;": '\U00002A95', - "equals;": '\U0000003D', - "equest;": '\U0000225F', - "equiv;": '\U00002261', - "equivDD;": '\U00002A78', - "eqvparsl;": '\U000029E5', - "erDot;": '\U00002253', - "erarr;": '\U00002971', - "escr;": '\U0000212F', - "esdot;": '\U00002250', - "esim;": '\U00002242', - "eta;": '\U000003B7', - "eth;": '\U000000F0', - "euml;": '\U000000EB', - "euro;": '\U000020AC', - "excl;": '\U00000021', - "exist;": '\U00002203', - "expectation;": '\U00002130', - "exponentiale;": '\U00002147', - "fallingdotseq;": '\U00002252', - "fcy;": '\U00000444', - "female;": '\U00002640', - "ffilig;": '\U0000FB03', - "fflig;": '\U0000FB00', - "ffllig;": '\U0000FB04', - "ffr;": '\U0001D523', - "filig;": '\U0000FB01', - "flat;": '\U0000266D', - "fllig;": '\U0000FB02', - "fltns;": '\U000025B1', - "fnof;": '\U00000192', - "fopf;": '\U0001D557', - "forall;": '\U00002200', - "fork;": '\U000022D4', - "forkv;": '\U00002AD9', - "fpartint;": '\U00002A0D', - "frac12;": '\U000000BD', - "frac13;": '\U00002153', - "frac14;": '\U000000BC', - "frac15;": '\U00002155', - "frac16;": '\U00002159', - "frac18;": '\U0000215B', - "frac23;": '\U00002154', - "frac25;": '\U00002156', - "frac34;": '\U000000BE', - "frac35;": '\U00002157', - "frac38;": '\U0000215C', - "frac45;": '\U00002158', - "frac56;": '\U0000215A', - "frac58;": '\U0000215D', - "frac78;": '\U0000215E', - "frasl;": '\U00002044', - "frown;": '\U00002322', - "fscr;": '\U0001D4BB', - "gE;": '\U00002267', - "gEl;": '\U00002A8C', - "gacute;": '\U000001F5', - "gamma;": '\U000003B3', - "gammad;": '\U000003DD', - "gap;": '\U00002A86', - "gbreve;": '\U0000011F', - "gcirc;": '\U0000011D', - "gcy;": '\U00000433', - "gdot;": '\U00000121', - "ge;": '\U00002265', - "gel;": '\U000022DB', - "geq;": '\U00002265', - "geqq;": '\U00002267', - "geqslant;": '\U00002A7E', - "ges;": '\U00002A7E', - "gescc;": '\U00002AA9', - "gesdot;": '\U00002A80', - "gesdoto;": '\U00002A82', - "gesdotol;": '\U00002A84', - "gesles;": '\U00002A94', - "gfr;": '\U0001D524', - "gg;": '\U0000226B', - "ggg;": '\U000022D9', - "gimel;": '\U00002137', - "gjcy;": '\U00000453', - "gl;": '\U00002277', - "glE;": '\U00002A92', - "gla;": '\U00002AA5', - "glj;": '\U00002AA4', - "gnE;": '\U00002269', - "gnap;": '\U00002A8A', - "gnapprox;": '\U00002A8A', - "gne;": '\U00002A88', - "gneq;": '\U00002A88', - "gneqq;": '\U00002269', - "gnsim;": '\U000022E7', - "gopf;": '\U0001D558', - "grave;": '\U00000060', - "gscr;": '\U0000210A', - "gsim;": '\U00002273', - "gsime;": '\U00002A8E', - "gsiml;": '\U00002A90', - "gt;": '\U0000003E', - "gtcc;": '\U00002AA7', - "gtcir;": '\U00002A7A', - "gtdot;": '\U000022D7', - "gtlPar;": '\U00002995', - "gtquest;": '\U00002A7C', - "gtrapprox;": '\U00002A86', - "gtrarr;": '\U00002978', - "gtrdot;": '\U000022D7', - "gtreqless;": '\U000022DB', - "gtreqqless;": '\U00002A8C', - "gtrless;": '\U00002277', - "gtrsim;": '\U00002273', - "hArr;": '\U000021D4', - "hairsp;": '\U0000200A', - "half;": '\U000000BD', - "hamilt;": '\U0000210B', - "hardcy;": '\U0000044A', - "harr;": '\U00002194', - "harrcir;": '\U00002948', - "harrw;": '\U000021AD', - "hbar;": '\U0000210F', - "hcirc;": '\U00000125', - "hearts;": '\U00002665', - "heartsuit;": '\U00002665', - "hellip;": '\U00002026', - "hercon;": '\U000022B9', - "hfr;": '\U0001D525', - "hksearow;": '\U00002925', - "hkswarow;": '\U00002926', - "hoarr;": '\U000021FF', - "homtht;": '\U0000223B', - "hookleftarrow;": '\U000021A9', - "hookrightarrow;": '\U000021AA', - "hopf;": '\U0001D559', - "horbar;": '\U00002015', - "hscr;": '\U0001D4BD', - "hslash;": '\U0000210F', - "hstrok;": '\U00000127', - "hybull;": '\U00002043', - "hyphen;": '\U00002010', - "iacute;": '\U000000ED', - "ic;": '\U00002063', - "icirc;": '\U000000EE', - "icy;": '\U00000438', - "iecy;": '\U00000435', - "iexcl;": '\U000000A1', - "iff;": '\U000021D4', - "ifr;": '\U0001D526', - "igrave;": '\U000000EC', - "ii;": '\U00002148', - "iiiint;": '\U00002A0C', - "iiint;": '\U0000222D', - "iinfin;": '\U000029DC', - "iiota;": '\U00002129', - "ijlig;": '\U00000133', - "imacr;": '\U0000012B', - "image;": '\U00002111', - "imagline;": '\U00002110', - "imagpart;": '\U00002111', - "imath;": '\U00000131', - "imof;": '\U000022B7', - "imped;": '\U000001B5', - "in;": '\U00002208', - "incare;": '\U00002105', - "infin;": '\U0000221E', - "infintie;": '\U000029DD', - "inodot;": '\U00000131', - "int;": '\U0000222B', - "intcal;": '\U000022BA', - "integers;": '\U00002124', - "intercal;": '\U000022BA', - "intlarhk;": '\U00002A17', - "intprod;": '\U00002A3C', - "iocy;": '\U00000451', - "iogon;": '\U0000012F', - "iopf;": '\U0001D55A', - "iota;": '\U000003B9', - "iprod;": '\U00002A3C', - "iquest;": '\U000000BF', - "iscr;": '\U0001D4BE', - "isin;": '\U00002208', - "isinE;": '\U000022F9', - "isindot;": '\U000022F5', - "isins;": '\U000022F4', - "isinsv;": '\U000022F3', - "isinv;": '\U00002208', - "it;": '\U00002062', - "itilde;": '\U00000129', - "iukcy;": '\U00000456', - "iuml;": '\U000000EF', - "jcirc;": '\U00000135', - "jcy;": '\U00000439', - "jfr;": '\U0001D527', - "jmath;": '\U00000237', - "jopf;": '\U0001D55B', - "jscr;": '\U0001D4BF', - "jsercy;": '\U00000458', - "jukcy;": '\U00000454', - "kappa;": '\U000003BA', - "kappav;": '\U000003F0', - "kcedil;": '\U00000137', - "kcy;": '\U0000043A', - "kfr;": '\U0001D528', - "kgreen;": '\U00000138', - "khcy;": '\U00000445', - "kjcy;": '\U0000045C', - "kopf;": '\U0001D55C', - "kscr;": '\U0001D4C0', - "lAarr;": '\U000021DA', - "lArr;": '\U000021D0', - "lAtail;": '\U0000291B', - "lBarr;": '\U0000290E', - "lE;": '\U00002266', - "lEg;": '\U00002A8B', - "lHar;": '\U00002962', - "lacute;": '\U0000013A', - "laemptyv;": '\U000029B4', - "lagran;": '\U00002112', - "lambda;": '\U000003BB', - "lang;": '\U000027E8', - "langd;": '\U00002991', - "langle;": '\U000027E8', - "lap;": '\U00002A85', - "laquo;": '\U000000AB', - "larr;": '\U00002190', - "larrb;": '\U000021E4', - "larrbfs;": '\U0000291F', - "larrfs;": '\U0000291D', - "larrhk;": '\U000021A9', - "larrlp;": '\U000021AB', - "larrpl;": '\U00002939', - "larrsim;": '\U00002973', - "larrtl;": '\U000021A2', - "lat;": '\U00002AAB', - "latail;": '\U00002919', - "late;": '\U00002AAD', - "lbarr;": '\U0000290C', - "lbbrk;": '\U00002772', - "lbrace;": '\U0000007B', - "lbrack;": '\U0000005B', - "lbrke;": '\U0000298B', - "lbrksld;": '\U0000298F', - "lbrkslu;": '\U0000298D', - "lcaron;": '\U0000013E', - "lcedil;": '\U0000013C', - "lceil;": '\U00002308', - "lcub;": '\U0000007B', - "lcy;": '\U0000043B', - "ldca;": '\U00002936', - "ldquo;": '\U0000201C', - "ldquor;": '\U0000201E', - "ldrdhar;": '\U00002967', - "ldrushar;": '\U0000294B', - "ldsh;": '\U000021B2', - "le;": '\U00002264', - "leftarrow;": '\U00002190', - "leftarrowtail;": '\U000021A2', - "leftharpoondown;": '\U000021BD', - "leftharpoonup;": '\U000021BC', - "leftleftarrows;": '\U000021C7', - "leftrightarrow;": '\U00002194', - "leftrightarrows;": '\U000021C6', - "leftrightharpoons;": '\U000021CB', - "leftrightsquigarrow;": '\U000021AD', - "leftthreetimes;": '\U000022CB', - "leg;": '\U000022DA', - "leq;": '\U00002264', - "leqq;": '\U00002266', - "leqslant;": '\U00002A7D', - "les;": '\U00002A7D', - "lescc;": '\U00002AA8', - "lesdot;": '\U00002A7F', - "lesdoto;": '\U00002A81', - "lesdotor;": '\U00002A83', - "lesges;": '\U00002A93', - "lessapprox;": '\U00002A85', - "lessdot;": '\U000022D6', - "lesseqgtr;": '\U000022DA', - "lesseqqgtr;": '\U00002A8B', - "lessgtr;": '\U00002276', - "lesssim;": '\U00002272', - "lfisht;": '\U0000297C', - "lfloor;": '\U0000230A', - "lfr;": '\U0001D529', - "lg;": '\U00002276', - "lgE;": '\U00002A91', - "lhard;": '\U000021BD', - "lharu;": '\U000021BC', - "lharul;": '\U0000296A', - "lhblk;": '\U00002584', - "ljcy;": '\U00000459', - "ll;": '\U0000226A', - "llarr;": '\U000021C7', - "llcorner;": '\U0000231E', - "llhard;": '\U0000296B', - "lltri;": '\U000025FA', - "lmidot;": '\U00000140', - "lmoust;": '\U000023B0', - "lmoustache;": '\U000023B0', - "lnE;": '\U00002268', - "lnap;": '\U00002A89', - "lnapprox;": '\U00002A89', - "lne;": '\U00002A87', - "lneq;": '\U00002A87', - "lneqq;": '\U00002268', - "lnsim;": '\U000022E6', - "loang;": '\U000027EC', - "loarr;": '\U000021FD', - "lobrk;": '\U000027E6', - "longleftarrow;": '\U000027F5', - "longleftrightarrow;": '\U000027F7', - "longmapsto;": '\U000027FC', - "longrightarrow;": '\U000027F6', - "looparrowleft;": '\U000021AB', - "looparrowright;": '\U000021AC', - "lopar;": '\U00002985', - "lopf;": '\U0001D55D', - "loplus;": '\U00002A2D', - "lotimes;": '\U00002A34', - "lowast;": '\U00002217', - "lowbar;": '\U0000005F', - "loz;": '\U000025CA', - "lozenge;": '\U000025CA', - "lozf;": '\U000029EB', - "lpar;": '\U00000028', - "lparlt;": '\U00002993', - "lrarr;": '\U000021C6', - "lrcorner;": '\U0000231F', - "lrhar;": '\U000021CB', - "lrhard;": '\U0000296D', - "lrm;": '\U0000200E', - "lrtri;": '\U000022BF', - "lsaquo;": '\U00002039', - "lscr;": '\U0001D4C1', - "lsh;": '\U000021B0', - "lsim;": '\U00002272', - "lsime;": '\U00002A8D', - "lsimg;": '\U00002A8F', - "lsqb;": '\U0000005B', - "lsquo;": '\U00002018', - "lsquor;": '\U0000201A', - "lstrok;": '\U00000142', - "lt;": '\U0000003C', - "ltcc;": '\U00002AA6', - "ltcir;": '\U00002A79', - "ltdot;": '\U000022D6', - "lthree;": '\U000022CB', - "ltimes;": '\U000022C9', - "ltlarr;": '\U00002976', - "ltquest;": '\U00002A7B', - "ltrPar;": '\U00002996', - "ltri;": '\U000025C3', - "ltrie;": '\U000022B4', - "ltrif;": '\U000025C2', - "lurdshar;": '\U0000294A', - "luruhar;": '\U00002966', - "mDDot;": '\U0000223A', - "macr;": '\U000000AF', - "male;": '\U00002642', - "malt;": '\U00002720', - "maltese;": '\U00002720', - "map;": '\U000021A6', - "mapsto;": '\U000021A6', - "mapstodown;": '\U000021A7', - "mapstoleft;": '\U000021A4', - "mapstoup;": '\U000021A5', - "marker;": '\U000025AE', - "mcomma;": '\U00002A29', - "mcy;": '\U0000043C', - "mdash;": '\U00002014', - "measuredangle;": '\U00002221', - "mfr;": '\U0001D52A', - "mho;": '\U00002127', - "micro;": '\U000000B5', - "mid;": '\U00002223', - "midast;": '\U0000002A', - "midcir;": '\U00002AF0', - "middot;": '\U000000B7', - "minus;": '\U00002212', - "minusb;": '\U0000229F', - "minusd;": '\U00002238', - "minusdu;": '\U00002A2A', - "mlcp;": '\U00002ADB', - "mldr;": '\U00002026', - "mnplus;": '\U00002213', - "models;": '\U000022A7', - "mopf;": '\U0001D55E', - "mp;": '\U00002213', - "mscr;": '\U0001D4C2', - "mstpos;": '\U0000223E', - "mu;": '\U000003BC', - "multimap;": '\U000022B8', - "mumap;": '\U000022B8', - "nLeftarrow;": '\U000021CD', - "nLeftrightarrow;": '\U000021CE', - "nRightarrow;": '\U000021CF', - "nVDash;": '\U000022AF', - "nVdash;": '\U000022AE', - "nabla;": '\U00002207', - "nacute;": '\U00000144', - "nap;": '\U00002249', - "napos;": '\U00000149', - "napprox;": '\U00002249', - "natur;": '\U0000266E', - "natural;": '\U0000266E', - "naturals;": '\U00002115', - "nbsp;": '\U000000A0', - "ncap;": '\U00002A43', - "ncaron;": '\U00000148', - "ncedil;": '\U00000146', - "ncong;": '\U00002247', - "ncup;": '\U00002A42', - "ncy;": '\U0000043D', - "ndash;": '\U00002013', - "ne;": '\U00002260', - "neArr;": '\U000021D7', - "nearhk;": '\U00002924', - "nearr;": '\U00002197', - "nearrow;": '\U00002197', - "nequiv;": '\U00002262', - "nesear;": '\U00002928', - "nexist;": '\U00002204', - "nexists;": '\U00002204', - "nfr;": '\U0001D52B', - "nge;": '\U00002271', - "ngeq;": '\U00002271', - "ngsim;": '\U00002275', - "ngt;": '\U0000226F', - "ngtr;": '\U0000226F', - "nhArr;": '\U000021CE', - "nharr;": '\U000021AE', - "nhpar;": '\U00002AF2', - "ni;": '\U0000220B', - "nis;": '\U000022FC', - "nisd;": '\U000022FA', - "niv;": '\U0000220B', - "njcy;": '\U0000045A', - "nlArr;": '\U000021CD', - "nlarr;": '\U0000219A', - "nldr;": '\U00002025', - "nle;": '\U00002270', - "nleftarrow;": '\U0000219A', - "nleftrightarrow;": '\U000021AE', - "nleq;": '\U00002270', - "nless;": '\U0000226E', - "nlsim;": '\U00002274', - "nlt;": '\U0000226E', - "nltri;": '\U000022EA', - "nltrie;": '\U000022EC', - "nmid;": '\U00002224', - "nopf;": '\U0001D55F', - "not;": '\U000000AC', - "notin;": '\U00002209', - "notinva;": '\U00002209', - "notinvb;": '\U000022F7', - "notinvc;": '\U000022F6', - "notni;": '\U0000220C', - "notniva;": '\U0000220C', - "notnivb;": '\U000022FE', - "notnivc;": '\U000022FD', - "npar;": '\U00002226', - "nparallel;": '\U00002226', - "npolint;": '\U00002A14', - "npr;": '\U00002280', - "nprcue;": '\U000022E0', - "nprec;": '\U00002280', - "nrArr;": '\U000021CF', - "nrarr;": '\U0000219B', - "nrightarrow;": '\U0000219B', - "nrtri;": '\U000022EB', - "nrtrie;": '\U000022ED', - "nsc;": '\U00002281', - "nsccue;": '\U000022E1', - "nscr;": '\U0001D4C3', - "nshortmid;": '\U00002224', - "nshortparallel;": '\U00002226', - "nsim;": '\U00002241', - "nsime;": '\U00002244', - "nsimeq;": '\U00002244', - "nsmid;": '\U00002224', - "nspar;": '\U00002226', - "nsqsube;": '\U000022E2', - "nsqsupe;": '\U000022E3', - "nsub;": '\U00002284', - "nsube;": '\U00002288', - "nsubseteq;": '\U00002288', - "nsucc;": '\U00002281', - "nsup;": '\U00002285', - "nsupe;": '\U00002289', - "nsupseteq;": '\U00002289', - "ntgl;": '\U00002279', - "ntilde;": '\U000000F1', - "ntlg;": '\U00002278', - "ntriangleleft;": '\U000022EA', - "ntrianglelefteq;": '\U000022EC', - "ntriangleright;": '\U000022EB', - "ntrianglerighteq;": '\U000022ED', - "nu;": '\U000003BD', - "num;": '\U00000023', - "numero;": '\U00002116', - "numsp;": '\U00002007', - "nvDash;": '\U000022AD', - "nvHarr;": '\U00002904', - "nvdash;": '\U000022AC', - "nvinfin;": '\U000029DE', - "nvlArr;": '\U00002902', - "nvrArr;": '\U00002903', - "nwArr;": '\U000021D6', - "nwarhk;": '\U00002923', - "nwarr;": '\U00002196', - "nwarrow;": '\U00002196', - "nwnear;": '\U00002927', - "oS;": '\U000024C8', - "oacute;": '\U000000F3', - "oast;": '\U0000229B', - "ocir;": '\U0000229A', - "ocirc;": '\U000000F4', - "ocy;": '\U0000043E', - "odash;": '\U0000229D', - "odblac;": '\U00000151', - "odiv;": '\U00002A38', - "odot;": '\U00002299', - "odsold;": '\U000029BC', - "oelig;": '\U00000153', - "ofcir;": '\U000029BF', - "ofr;": '\U0001D52C', - "ogon;": '\U000002DB', - "ograve;": '\U000000F2', - "ogt;": '\U000029C1', - "ohbar;": '\U000029B5', - "ohm;": '\U000003A9', - "oint;": '\U0000222E', - "olarr;": '\U000021BA', - "olcir;": '\U000029BE', - "olcross;": '\U000029BB', - "oline;": '\U0000203E', - "olt;": '\U000029C0', - "omacr;": '\U0000014D', - "omega;": '\U000003C9', - "omicron;": '\U000003BF', - "omid;": '\U000029B6', - "ominus;": '\U00002296', - "oopf;": '\U0001D560', - "opar;": '\U000029B7', - "operp;": '\U000029B9', - "oplus;": '\U00002295', - "or;": '\U00002228', - "orarr;": '\U000021BB', - "ord;": '\U00002A5D', - "order;": '\U00002134', - "orderof;": '\U00002134', - "ordf;": '\U000000AA', - "ordm;": '\U000000BA', - "origof;": '\U000022B6', - "oror;": '\U00002A56', - "orslope;": '\U00002A57', - "orv;": '\U00002A5B', - "oscr;": '\U00002134', - "oslash;": '\U000000F8', - "osol;": '\U00002298', - "otilde;": '\U000000F5', - "otimes;": '\U00002297', - "otimesas;": '\U00002A36', - "ouml;": '\U000000F6', - "ovbar;": '\U0000233D', - "par;": '\U00002225', - "para;": '\U000000B6', - "parallel;": '\U00002225', - "parsim;": '\U00002AF3', - "parsl;": '\U00002AFD', - "part;": '\U00002202', - "pcy;": '\U0000043F', - "percnt;": '\U00000025', - "period;": '\U0000002E', - "permil;": '\U00002030', - "perp;": '\U000022A5', - "pertenk;": '\U00002031', - "pfr;": '\U0001D52D', - "phi;": '\U000003C6', - "phiv;": '\U000003D5', - "phmmat;": '\U00002133', - "phone;": '\U0000260E', - "pi;": '\U000003C0', - "pitchfork;": '\U000022D4', - "piv;": '\U000003D6', - "planck;": '\U0000210F', - "planckh;": '\U0000210E', - "plankv;": '\U0000210F', - "plus;": '\U0000002B', - "plusacir;": '\U00002A23', - "plusb;": '\U0000229E', - "pluscir;": '\U00002A22', - "plusdo;": '\U00002214', - "plusdu;": '\U00002A25', - "pluse;": '\U00002A72', - "plusmn;": '\U000000B1', - "plussim;": '\U00002A26', - "plustwo;": '\U00002A27', - "pm;": '\U000000B1', - "pointint;": '\U00002A15', - "popf;": '\U0001D561', - "pound;": '\U000000A3', - "pr;": '\U0000227A', - "prE;": '\U00002AB3', - "prap;": '\U00002AB7', - "prcue;": '\U0000227C', - "pre;": '\U00002AAF', - "prec;": '\U0000227A', - "precapprox;": '\U00002AB7', - "preccurlyeq;": '\U0000227C', - "preceq;": '\U00002AAF', - "precnapprox;": '\U00002AB9', - "precneqq;": '\U00002AB5', - "precnsim;": '\U000022E8', - "precsim;": '\U0000227E', - "prime;": '\U00002032', - "primes;": '\U00002119', - "prnE;": '\U00002AB5', - "prnap;": '\U00002AB9', - "prnsim;": '\U000022E8', - "prod;": '\U0000220F', - "profalar;": '\U0000232E', - "profline;": '\U00002312', - "profsurf;": '\U00002313', - "prop;": '\U0000221D', - "propto;": '\U0000221D', - "prsim;": '\U0000227E', - "prurel;": '\U000022B0', - "pscr;": '\U0001D4C5', - "psi;": '\U000003C8', - "puncsp;": '\U00002008', - "qfr;": '\U0001D52E', - "qint;": '\U00002A0C', - "qopf;": '\U0001D562', - "qprime;": '\U00002057', - "qscr;": '\U0001D4C6', - "quaternions;": '\U0000210D', - "quatint;": '\U00002A16', - "quest;": '\U0000003F', - "questeq;": '\U0000225F', - "quot;": '\U00000022', - "rAarr;": '\U000021DB', - "rArr;": '\U000021D2', - "rAtail;": '\U0000291C', - "rBarr;": '\U0000290F', - "rHar;": '\U00002964', - "racute;": '\U00000155', - "radic;": '\U0000221A', - "raemptyv;": '\U000029B3', - "rang;": '\U000027E9', - "rangd;": '\U00002992', - "range;": '\U000029A5', - "rangle;": '\U000027E9', - "raquo;": '\U000000BB', - "rarr;": '\U00002192', - "rarrap;": '\U00002975', - "rarrb;": '\U000021E5', - "rarrbfs;": '\U00002920', - "rarrc;": '\U00002933', - "rarrfs;": '\U0000291E', - "rarrhk;": '\U000021AA', - "rarrlp;": '\U000021AC', - "rarrpl;": '\U00002945', - "rarrsim;": '\U00002974', - "rarrtl;": '\U000021A3', - "rarrw;": '\U0000219D', - "ratail;": '\U0000291A', - "ratio;": '\U00002236', - "rationals;": '\U0000211A', - "rbarr;": '\U0000290D', - "rbbrk;": '\U00002773', - "rbrace;": '\U0000007D', - "rbrack;": '\U0000005D', - "rbrke;": '\U0000298C', - "rbrksld;": '\U0000298E', - "rbrkslu;": '\U00002990', - "rcaron;": '\U00000159', - "rcedil;": '\U00000157', - "rceil;": '\U00002309', - "rcub;": '\U0000007D', - "rcy;": '\U00000440', - "rdca;": '\U00002937', - "rdldhar;": '\U00002969', - "rdquo;": '\U0000201D', - "rdquor;": '\U0000201D', - "rdsh;": '\U000021B3', - "real;": '\U0000211C', - "realine;": '\U0000211B', - "realpart;": '\U0000211C', - "reals;": '\U0000211D', - "rect;": '\U000025AD', - "reg;": '\U000000AE', - "rfisht;": '\U0000297D', - "rfloor;": '\U0000230B', - "rfr;": '\U0001D52F', - "rhard;": '\U000021C1', - "rharu;": '\U000021C0', - "rharul;": '\U0000296C', - "rho;": '\U000003C1', - "rhov;": '\U000003F1', - "rightarrow;": '\U00002192', - "rightarrowtail;": '\U000021A3', - "rightharpoondown;": '\U000021C1', - "rightharpoonup;": '\U000021C0', - "rightleftarrows;": '\U000021C4', - "rightleftharpoons;": '\U000021CC', - "rightrightarrows;": '\U000021C9', - "rightsquigarrow;": '\U0000219D', - "rightthreetimes;": '\U000022CC', - "ring;": '\U000002DA', - "risingdotseq;": '\U00002253', - "rlarr;": '\U000021C4', - "rlhar;": '\U000021CC', - "rlm;": '\U0000200F', - "rmoust;": '\U000023B1', - "rmoustache;": '\U000023B1', - "rnmid;": '\U00002AEE', - "roang;": '\U000027ED', - "roarr;": '\U000021FE', - "robrk;": '\U000027E7', - "ropar;": '\U00002986', - "ropf;": '\U0001D563', - "roplus;": '\U00002A2E', - "rotimes;": '\U00002A35', - "rpar;": '\U00000029', - "rpargt;": '\U00002994', - "rppolint;": '\U00002A12', - "rrarr;": '\U000021C9', - "rsaquo;": '\U0000203A', - "rscr;": '\U0001D4C7', - "rsh;": '\U000021B1', - "rsqb;": '\U0000005D', - "rsquo;": '\U00002019', - "rsquor;": '\U00002019', - "rthree;": '\U000022CC', - "rtimes;": '\U000022CA', - "rtri;": '\U000025B9', - "rtrie;": '\U000022B5', - "rtrif;": '\U000025B8', - "rtriltri;": '\U000029CE', - "ruluhar;": '\U00002968', - "rx;": '\U0000211E', - "sacute;": '\U0000015B', - "sbquo;": '\U0000201A', - "sc;": '\U0000227B', - "scE;": '\U00002AB4', - "scap;": '\U00002AB8', - "scaron;": '\U00000161', - "sccue;": '\U0000227D', - "sce;": '\U00002AB0', - "scedil;": '\U0000015F', - "scirc;": '\U0000015D', - "scnE;": '\U00002AB6', - "scnap;": '\U00002ABA', - "scnsim;": '\U000022E9', - "scpolint;": '\U00002A13', - "scsim;": '\U0000227F', - "scy;": '\U00000441', - "sdot;": '\U000022C5', - "sdotb;": '\U000022A1', - "sdote;": '\U00002A66', - "seArr;": '\U000021D8', - "searhk;": '\U00002925', - "searr;": '\U00002198', - "searrow;": '\U00002198', - "sect;": '\U000000A7', - "semi;": '\U0000003B', - "seswar;": '\U00002929', - "setminus;": '\U00002216', - "setmn;": '\U00002216', - "sext;": '\U00002736', - "sfr;": '\U0001D530', - "sfrown;": '\U00002322', - "sharp;": '\U0000266F', - "shchcy;": '\U00000449', - "shcy;": '\U00000448', - "shortmid;": '\U00002223', - "shortparallel;": '\U00002225', - "shy;": '\U000000AD', - "sigma;": '\U000003C3', - "sigmaf;": '\U000003C2', - "sigmav;": '\U000003C2', - "sim;": '\U0000223C', - "simdot;": '\U00002A6A', - "sime;": '\U00002243', - "simeq;": '\U00002243', - "simg;": '\U00002A9E', - "simgE;": '\U00002AA0', - "siml;": '\U00002A9D', - "simlE;": '\U00002A9F', - "simne;": '\U00002246', - "simplus;": '\U00002A24', - "simrarr;": '\U00002972', - "slarr;": '\U00002190', - "smallsetminus;": '\U00002216', - "smashp;": '\U00002A33', - "smeparsl;": '\U000029E4', - "smid;": '\U00002223', - "smile;": '\U00002323', - "smt;": '\U00002AAA', - "smte;": '\U00002AAC', - "softcy;": '\U0000044C', - "sol;": '\U0000002F', - "solb;": '\U000029C4', - "solbar;": '\U0000233F', - "sopf;": '\U0001D564', - "spades;": '\U00002660', - "spadesuit;": '\U00002660', - "spar;": '\U00002225', - "sqcap;": '\U00002293', - "sqcup;": '\U00002294', - "sqsub;": '\U0000228F', - "sqsube;": '\U00002291', - "sqsubset;": '\U0000228F', - "sqsubseteq;": '\U00002291', - "sqsup;": '\U00002290', - "sqsupe;": '\U00002292', - "sqsupset;": '\U00002290', - "sqsupseteq;": '\U00002292', - "squ;": '\U000025A1', - "square;": '\U000025A1', - "squarf;": '\U000025AA', - "squf;": '\U000025AA', - "srarr;": '\U00002192', - "sscr;": '\U0001D4C8', - "ssetmn;": '\U00002216', - "ssmile;": '\U00002323', - "sstarf;": '\U000022C6', - "star;": '\U00002606', - "starf;": '\U00002605', - "straightepsilon;": '\U000003F5', - "straightphi;": '\U000003D5', - "strns;": '\U000000AF', - "sub;": '\U00002282', - "subE;": '\U00002AC5', - "subdot;": '\U00002ABD', - "sube;": '\U00002286', - "subedot;": '\U00002AC3', - "submult;": '\U00002AC1', - "subnE;": '\U00002ACB', - "subne;": '\U0000228A', - "subplus;": '\U00002ABF', - "subrarr;": '\U00002979', - "subset;": '\U00002282', - "subseteq;": '\U00002286', - "subseteqq;": '\U00002AC5', - "subsetneq;": '\U0000228A', - "subsetneqq;": '\U00002ACB', - "subsim;": '\U00002AC7', - "subsub;": '\U00002AD5', - "subsup;": '\U00002AD3', - "succ;": '\U0000227B', - "succapprox;": '\U00002AB8', - "succcurlyeq;": '\U0000227D', - "succeq;": '\U00002AB0', - "succnapprox;": '\U00002ABA', - "succneqq;": '\U00002AB6', - "succnsim;": '\U000022E9', - "succsim;": '\U0000227F', - "sum;": '\U00002211', - "sung;": '\U0000266A', - "sup;": '\U00002283', - "sup1;": '\U000000B9', - "sup2;": '\U000000B2', - "sup3;": '\U000000B3', - "supE;": '\U00002AC6', - "supdot;": '\U00002ABE', - "supdsub;": '\U00002AD8', - "supe;": '\U00002287', - "supedot;": '\U00002AC4', - "suphsol;": '\U000027C9', - "suphsub;": '\U00002AD7', - "suplarr;": '\U0000297B', - "supmult;": '\U00002AC2', - "supnE;": '\U00002ACC', - "supne;": '\U0000228B', - "supplus;": '\U00002AC0', - "supset;": '\U00002283', - "supseteq;": '\U00002287', - "supseteqq;": '\U00002AC6', - "supsetneq;": '\U0000228B', - "supsetneqq;": '\U00002ACC', - "supsim;": '\U00002AC8', - "supsub;": '\U00002AD4', - "supsup;": '\U00002AD6', - "swArr;": '\U000021D9', - "swarhk;": '\U00002926', - "swarr;": '\U00002199', - "swarrow;": '\U00002199', - "swnwar;": '\U0000292A', - "szlig;": '\U000000DF', - "target;": '\U00002316', - "tau;": '\U000003C4', - "tbrk;": '\U000023B4', - "tcaron;": '\U00000165', - "tcedil;": '\U00000163', - "tcy;": '\U00000442', - "tdot;": '\U000020DB', - "telrec;": '\U00002315', - "tfr;": '\U0001D531', - "there4;": '\U00002234', - "therefore;": '\U00002234', - "theta;": '\U000003B8', - "thetasym;": '\U000003D1', - "thetav;": '\U000003D1', - "thickapprox;": '\U00002248', - "thicksim;": '\U0000223C', - "thinsp;": '\U00002009', - "thkap;": '\U00002248', - "thksim;": '\U0000223C', - "thorn;": '\U000000FE', - "tilde;": '\U000002DC', - "times;": '\U000000D7', - "timesb;": '\U000022A0', - "timesbar;": '\U00002A31', - "timesd;": '\U00002A30', - "tint;": '\U0000222D', - "toea;": '\U00002928', - "top;": '\U000022A4', - "topbot;": '\U00002336', - "topcir;": '\U00002AF1', - "topf;": '\U0001D565', - "topfork;": '\U00002ADA', - "tosa;": '\U00002929', - "tprime;": '\U00002034', - "trade;": '\U00002122', - "triangle;": '\U000025B5', - "triangledown;": '\U000025BF', - "triangleleft;": '\U000025C3', - "trianglelefteq;": '\U000022B4', - "triangleq;": '\U0000225C', - "triangleright;": '\U000025B9', - "trianglerighteq;": '\U000022B5', - "tridot;": '\U000025EC', - "trie;": '\U0000225C', - "triminus;": '\U00002A3A', - "triplus;": '\U00002A39', - "trisb;": '\U000029CD', - "tritime;": '\U00002A3B', - "trpezium;": '\U000023E2', - "tscr;": '\U0001D4C9', - "tscy;": '\U00000446', - "tshcy;": '\U0000045B', - "tstrok;": '\U00000167', - "twixt;": '\U0000226C', - "twoheadleftarrow;": '\U0000219E', - "twoheadrightarrow;": '\U000021A0', - "uArr;": '\U000021D1', - "uHar;": '\U00002963', - "uacute;": '\U000000FA', - "uarr;": '\U00002191', - "ubrcy;": '\U0000045E', - "ubreve;": '\U0000016D', - "ucirc;": '\U000000FB', - "ucy;": '\U00000443', - "udarr;": '\U000021C5', - "udblac;": '\U00000171', - "udhar;": '\U0000296E', - "ufisht;": '\U0000297E', - "ufr;": '\U0001D532', - "ugrave;": '\U000000F9', - "uharl;": '\U000021BF', - "uharr;": '\U000021BE', - "uhblk;": '\U00002580', - "ulcorn;": '\U0000231C', - "ulcorner;": '\U0000231C', - "ulcrop;": '\U0000230F', - "ultri;": '\U000025F8', - "umacr;": '\U0000016B', - "uml;": '\U000000A8', - "uogon;": '\U00000173', - "uopf;": '\U0001D566', - "uparrow;": '\U00002191', - "updownarrow;": '\U00002195', - "upharpoonleft;": '\U000021BF', - "upharpoonright;": '\U000021BE', - "uplus;": '\U0000228E', - "upsi;": '\U000003C5', - "upsih;": '\U000003D2', - "upsilon;": '\U000003C5', - "upuparrows;": '\U000021C8', - "urcorn;": '\U0000231D', - "urcorner;": '\U0000231D', - "urcrop;": '\U0000230E', - "uring;": '\U0000016F', - "urtri;": '\U000025F9', - "uscr;": '\U0001D4CA', - "utdot;": '\U000022F0', - "utilde;": '\U00000169', - "utri;": '\U000025B5', - "utrif;": '\U000025B4', - "uuarr;": '\U000021C8', - "uuml;": '\U000000FC', - "uwangle;": '\U000029A7', - "vArr;": '\U000021D5', - "vBar;": '\U00002AE8', - "vBarv;": '\U00002AE9', - "vDash;": '\U000022A8', - "vangrt;": '\U0000299C', - "varepsilon;": '\U000003F5', - "varkappa;": '\U000003F0', - "varnothing;": '\U00002205', - "varphi;": '\U000003D5', - "varpi;": '\U000003D6', - "varpropto;": '\U0000221D', - "varr;": '\U00002195', - "varrho;": '\U000003F1', - "varsigma;": '\U000003C2', - "vartheta;": '\U000003D1', - "vartriangleleft;": '\U000022B2', - "vartriangleright;": '\U000022B3', - "vcy;": '\U00000432', - "vdash;": '\U000022A2', - "vee;": '\U00002228', - "veebar;": '\U000022BB', - "veeeq;": '\U0000225A', - "vellip;": '\U000022EE', - "verbar;": '\U0000007C', - "vert;": '\U0000007C', - "vfr;": '\U0001D533', - "vltri;": '\U000022B2', - "vopf;": '\U0001D567', - "vprop;": '\U0000221D', - "vrtri;": '\U000022B3', - "vscr;": '\U0001D4CB', - "vzigzag;": '\U0000299A', - "wcirc;": '\U00000175', - "wedbar;": '\U00002A5F', - "wedge;": '\U00002227', - "wedgeq;": '\U00002259', - "weierp;": '\U00002118', - "wfr;": '\U0001D534', - "wopf;": '\U0001D568', - "wp;": '\U00002118', - "wr;": '\U00002240', - "wreath;": '\U00002240', - "wscr;": '\U0001D4CC', - "xcap;": '\U000022C2', - "xcirc;": '\U000025EF', - "xcup;": '\U000022C3', - "xdtri;": '\U000025BD', - "xfr;": '\U0001D535', - "xhArr;": '\U000027FA', - "xharr;": '\U000027F7', - "xi;": '\U000003BE', - "xlArr;": '\U000027F8', - "xlarr;": '\U000027F5', - "xmap;": '\U000027FC', - "xnis;": '\U000022FB', - "xodot;": '\U00002A00', - "xopf;": '\U0001D569', - "xoplus;": '\U00002A01', - "xotime;": '\U00002A02', - "xrArr;": '\U000027F9', - "xrarr;": '\U000027F6', - "xscr;": '\U0001D4CD', - "xsqcup;": '\U00002A06', - "xuplus;": '\U00002A04', - "xutri;": '\U000025B3', - "xvee;": '\U000022C1', - "xwedge;": '\U000022C0', - "yacute;": '\U000000FD', - "yacy;": '\U0000044F', - "ycirc;": '\U00000177', - "ycy;": '\U0000044B', - "yen;": '\U000000A5', - "yfr;": '\U0001D536', - "yicy;": '\U00000457', - "yopf;": '\U0001D56A', - "yscr;": '\U0001D4CE', - "yucy;": '\U0000044E', - "yuml;": '\U000000FF', - "zacute;": '\U0000017A', - "zcaron;": '\U0000017E', - "zcy;": '\U00000437', - "zdot;": '\U0000017C', - "zeetrf;": '\U00002128', - "zeta;": '\U000003B6', - "zfr;": '\U0001D537', - "zhcy;": '\U00000436', - "zigrarr;": '\U000021DD', - "zopf;": '\U0001D56B', - "zscr;": '\U0001D4CF', - "zwj;": '\U0000200D', - "zwnj;": '\U0000200C', - "AElig": '\U000000C6', - "AMP": '\U00000026', - "Aacute": '\U000000C1', - "Acirc": '\U000000C2', - "Agrave": '\U000000C0', - "Aring": '\U000000C5', - "Atilde": '\U000000C3', - "Auml": '\U000000C4', - "COPY": '\U000000A9', - "Ccedil": '\U000000C7', - "ETH": '\U000000D0', - "Eacute": '\U000000C9', - "Ecirc": '\U000000CA', - "Egrave": '\U000000C8', - "Euml": '\U000000CB', - "GT": '\U0000003E', - "Iacute": '\U000000CD', - "Icirc": '\U000000CE', - "Igrave": '\U000000CC', - "Iuml": '\U000000CF', - "LT": '\U0000003C', - "Ntilde": '\U000000D1', - "Oacute": '\U000000D3', - "Ocirc": '\U000000D4', - "Ograve": '\U000000D2', - "Oslash": '\U000000D8', - "Otilde": '\U000000D5', - "Ouml": '\U000000D6', - "QUOT": '\U00000022', - "REG": '\U000000AE', - "THORN": '\U000000DE', - "Uacute": '\U000000DA', - "Ucirc": '\U000000DB', - "Ugrave": '\U000000D9', - "Uuml": '\U000000DC', - "Yacute": '\U000000DD', - "aacute": '\U000000E1', - "acirc": '\U000000E2', - "acute": '\U000000B4', - "aelig": '\U000000E6', - "agrave": '\U000000E0', - "amp": '\U00000026', - "aring": '\U000000E5', - "atilde": '\U000000E3', - "auml": '\U000000E4', - "brvbar": '\U000000A6', - "ccedil": '\U000000E7', - "cedil": '\U000000B8', - "cent": '\U000000A2', - "copy": '\U000000A9', - "curren": '\U000000A4', - "deg": '\U000000B0', - "divide": '\U000000F7', - "eacute": '\U000000E9', - "ecirc": '\U000000EA', - "egrave": '\U000000E8', - "eth": '\U000000F0', - "euml": '\U000000EB', - "frac12": '\U000000BD', - "frac14": '\U000000BC', - "frac34": '\U000000BE', - "gt": '\U0000003E', - "iacute": '\U000000ED', - "icirc": '\U000000EE', - "iexcl": '\U000000A1', - "igrave": '\U000000EC', - "iquest": '\U000000BF', - "iuml": '\U000000EF', - "laquo": '\U000000AB', - "lt": '\U0000003C', - "macr": '\U000000AF', - "micro": '\U000000B5', - "middot": '\U000000B7', - "nbsp": '\U000000A0', - "not": '\U000000AC', - "ntilde": '\U000000F1', - "oacute": '\U000000F3', - "ocirc": '\U000000F4', - "ograve": '\U000000F2', - "ordf": '\U000000AA', - "ordm": '\U000000BA', - "oslash": '\U000000F8', - "otilde": '\U000000F5', - "ouml": '\U000000F6', - "para": '\U000000B6', - "plusmn": '\U000000B1', - "pound": '\U000000A3', - "quot": '\U00000022', - "raquo": '\U000000BB', - "reg": '\U000000AE', - "sect": '\U000000A7', - "shy": '\U000000AD', - "sup1": '\U000000B9', - "sup2": '\U000000B2', - "sup3": '\U000000B3', - "szlig": '\U000000DF', - "thorn": '\U000000FE', - "times": '\U000000D7', - "uacute": '\U000000FA', - "ucirc": '\U000000FB', - "ugrave": '\U000000F9', - "uml": '\U000000A8', - "uuml": '\U000000FC', - "yacute": '\U000000FD', - "yen": '\U000000A5', - "yuml": '\U000000FF', + "Cross;": '\U00002A2F', + "Cscr;": '\U0001D49E', + "Cup;": '\U000022D3', + "CupCap;": '\U0000224D', + "DD;": '\U00002145', + "DDotrahd;": '\U00002911', + "DJcy;": '\U00000402', + "DScy;": '\U00000405', + "DZcy;": '\U0000040F', + "Dagger;": '\U00002021', + "Darr;": '\U000021A1', + "Dashv;": '\U00002AE4', + "Dcaron;": '\U0000010E', + "Dcy;": '\U00000414', + "Del;": '\U00002207', + "Delta;": '\U00000394', + "Dfr;": '\U0001D507', + "DiacriticalAcute;": '\U000000B4', + "DiacriticalDot;": '\U000002D9', + "DiacriticalDoubleAcute;": '\U000002DD', + "DiacriticalGrave;": '\U00000060', + "DiacriticalTilde;": '\U000002DC', + "Diamond;": '\U000022C4', + "DifferentialD;": '\U00002146', + "Dopf;": '\U0001D53B', + "Dot;": '\U000000A8', + "DotDot;": '\U000020DC', + "DotEqual;": '\U00002250', + "DoubleContourIntegral;": '\U0000222F', + "DoubleDot;": '\U000000A8', + "DoubleDownArrow;": '\U000021D3', + "DoubleLeftArrow;": '\U000021D0', + "DoubleLeftRightArrow;": '\U000021D4', + "DoubleLeftTee;": '\U00002AE4', + "DoubleLongLeftArrow;": '\U000027F8', + "DoubleLongLeftRightArrow;": '\U000027FA', + "DoubleLongRightArrow;": '\U000027F9', + "DoubleRightArrow;": '\U000021D2', + "DoubleRightTee;": '\U000022A8', + "DoubleUpArrow;": '\U000021D1', + "DoubleUpDownArrow;": '\U000021D5', + "DoubleVerticalBar;": '\U00002225', + "DownArrow;": '\U00002193', + "DownArrowBar;": '\U00002913', + "DownArrowUpArrow;": '\U000021F5', + "DownBreve;": '\U00000311', + "DownLeftRightVector;": '\U00002950', + "DownLeftTeeVector;": '\U0000295E', + "DownLeftVector;": '\U000021BD', + "DownLeftVectorBar;": '\U00002956', + "DownRightTeeVector;": '\U0000295F', + "DownRightVector;": '\U000021C1', + "DownRightVectorBar;": '\U00002957', + "DownTee;": '\U000022A4', + "DownTeeArrow;": '\U000021A7', + "Downarrow;": '\U000021D3', + "Dscr;": '\U0001D49F', + "Dstrok;": '\U00000110', + "ENG;": '\U0000014A', + "ETH;": '\U000000D0', + "Eacute;": '\U000000C9', + "Ecaron;": '\U0000011A', + "Ecirc;": '\U000000CA', + "Ecy;": '\U0000042D', + "Edot;": '\U00000116', + "Efr;": '\U0001D508', + "Egrave;": '\U000000C8', + "Element;": '\U00002208', + "Emacr;": '\U00000112', + "EmptySmallSquare;": '\U000025FB', + "EmptyVerySmallSquare;": '\U000025AB', + "Eogon;": '\U00000118', + "Eopf;": '\U0001D53C', + "Epsilon;": '\U00000395', + "Equal;": '\U00002A75', + "EqualTilde;": '\U00002242', + "Equilibrium;": '\U000021CC', + "Escr;": '\U00002130', + "Esim;": '\U00002A73', + "Eta;": '\U00000397', + "Euml;": '\U000000CB', + "Exists;": '\U00002203', + "ExponentialE;": '\U00002147', + "Fcy;": '\U00000424', + "Ffr;": '\U0001D509', + "FilledSmallSquare;": '\U000025FC', + "FilledVerySmallSquare;": '\U000025AA', + "Fopf;": '\U0001D53D', + "ForAll;": '\U00002200', + "Fouriertrf;": '\U00002131', + "Fscr;": '\U00002131', + "GJcy;": '\U00000403', + "GT;": '\U0000003E', + "Gamma;": '\U00000393', + "Gammad;": '\U000003DC', + "Gbreve;": '\U0000011E', + "Gcedil;": '\U00000122', + "Gcirc;": '\U0000011C', + "Gcy;": '\U00000413', + "Gdot;": '\U00000120', + "Gfr;": '\U0001D50A', + "Gg;": '\U000022D9', + "Gopf;": '\U0001D53E', + "GreaterEqual;": '\U00002265', + "GreaterEqualLess;": '\U000022DB', + "GreaterFullEqual;": '\U00002267', + "GreaterGreater;": '\U00002AA2', + "GreaterLess;": '\U00002277', + "GreaterSlantEqual;": '\U00002A7E', + "GreaterTilde;": '\U00002273', + "Gscr;": '\U0001D4A2', + "Gt;": '\U0000226B', + "HARDcy;": '\U0000042A', + "Hacek;": '\U000002C7', + "Hat;": '\U0000005E', + "Hcirc;": '\U00000124', + "Hfr;": '\U0000210C', + "HilbertSpace;": '\U0000210B', + "Hopf;": '\U0000210D', + "HorizontalLine;": '\U00002500', + "Hscr;": '\U0000210B', + "Hstrok;": '\U00000126', + "HumpDownHump;": '\U0000224E', + "HumpEqual;": '\U0000224F', + "IEcy;": '\U00000415', + "IJlig;": '\U00000132', + "IOcy;": '\U00000401', + "Iacute;": '\U000000CD', + "Icirc;": '\U000000CE', + "Icy;": '\U00000418', + "Idot;": '\U00000130', + "Ifr;": '\U00002111', + "Igrave;": '\U000000CC', + "Im;": '\U00002111', + "Imacr;": '\U0000012A', + "ImaginaryI;": '\U00002148', + "Implies;": '\U000021D2', + "Int;": '\U0000222C', + "Integral;": '\U0000222B', + "Intersection;": '\U000022C2', + "InvisibleComma;": '\U00002063', + "InvisibleTimes;": '\U00002062', + "Iogon;": '\U0000012E', + "Iopf;": '\U0001D540', + "Iota;": '\U00000399', + "Iscr;": '\U00002110', + "Itilde;": '\U00000128', + "Iukcy;": '\U00000406', + "Iuml;": '\U000000CF', + "Jcirc;": '\U00000134', + "Jcy;": '\U00000419', + "Jfr;": '\U0001D50D', + "Jopf;": '\U0001D541', + "Jscr;": '\U0001D4A5', + "Jsercy;": '\U00000408', + "Jukcy;": '\U00000404', + "KHcy;": '\U00000425', + "KJcy;": '\U0000040C', + "Kappa;": '\U0000039A', + "Kcedil;": '\U00000136', + "Kcy;": '\U0000041A', + "Kfr;": '\U0001D50E', + "Kopf;": '\U0001D542', + "Kscr;": '\U0001D4A6', + "LJcy;": '\U00000409', + "LT;": '\U0000003C', + "Lacute;": '\U00000139', + "Lambda;": '\U0000039B', + "Lang;": '\U000027EA', + "Laplacetrf;": '\U00002112', + "Larr;": '\U0000219E', + "Lcaron;": '\U0000013D', + "Lcedil;": '\U0000013B', + "Lcy;": '\U0000041B', + "LeftAngleBracket;": '\U000027E8', + "LeftArrow;": '\U00002190', + "LeftArrowBar;": '\U000021E4', + "LeftArrowRightArrow;": '\U000021C6', + "LeftCeiling;": '\U00002308', + "LeftDoubleBracket;": '\U000027E6', + "LeftDownTeeVector;": '\U00002961', + "LeftDownVector;": '\U000021C3', + "LeftDownVectorBar;": '\U00002959', + "LeftFloor;": '\U0000230A', + "LeftRightArrow;": '\U00002194', + "LeftRightVector;": '\U0000294E', + "LeftTee;": '\U000022A3', + "LeftTeeArrow;": '\U000021A4', + "LeftTeeVector;": '\U0000295A', + "LeftTriangle;": '\U000022B2', + "LeftTriangleBar;": '\U000029CF', + "LeftTriangleEqual;": '\U000022B4', + "LeftUpDownVector;": '\U00002951', + "LeftUpTeeVector;": '\U00002960', + "LeftUpVector;": '\U000021BF', + "LeftUpVectorBar;": '\U00002958', + "LeftVector;": '\U000021BC', + "LeftVectorBar;": '\U00002952', + "Leftarrow;": '\U000021D0', + "Leftrightarrow;": '\U000021D4', + "LessEqualGreater;": '\U000022DA', + "LessFullEqual;": '\U00002266', + "LessGreater;": '\U00002276', + "LessLess;": '\U00002AA1', + "LessSlantEqual;": '\U00002A7D', + "LessTilde;": '\U00002272', + "Lfr;": '\U0001D50F', + "Ll;": '\U000022D8', + "Lleftarrow;": '\U000021DA', + "Lmidot;": '\U0000013F', + "LongLeftArrow;": '\U000027F5', + "LongLeftRightArrow;": '\U000027F7', + "LongRightArrow;": '\U000027F6', + "Longleftarrow;": '\U000027F8', + "Longleftrightarrow;": '\U000027FA', + "Longrightarrow;": '\U000027F9', + "Lopf;": '\U0001D543', + "LowerLeftArrow;": '\U00002199', + "LowerRightArrow;": '\U00002198', + "Lscr;": '\U00002112', + "Lsh;": '\U000021B0', + "Lstrok;": '\U00000141', + "Lt;": '\U0000226A', + "Map;": '\U00002905', + "Mcy;": '\U0000041C', + "MediumSpace;": '\U0000205F', + "Mellintrf;": '\U00002133', + "Mfr;": '\U0001D510', + "MinusPlus;": '\U00002213', + "Mopf;": '\U0001D544', + "Mscr;": '\U00002133', + "Mu;": '\U0000039C', + "NJcy;": '\U0000040A', + "Nacute;": '\U00000143', + "Ncaron;": '\U00000147', + "Ncedil;": '\U00000145', + "Ncy;": '\U0000041D', + "NegativeMediumSpace;": '\U0000200B', + "NegativeThickSpace;": '\U0000200B', + "NegativeThinSpace;": '\U0000200B', + "NegativeVeryThinSpace;": '\U0000200B', + "NestedGreaterGreater;": '\U0000226B', + "NestedLessLess;": '\U0000226A', + "NewLine;": '\U0000000A', + "Nfr;": '\U0001D511', + "NoBreak;": '\U00002060', + "NonBreakingSpace;": '\U000000A0', + "Nopf;": '\U00002115', + "Not;": '\U00002AEC', + "NotCongruent;": '\U00002262', + "NotCupCap;": '\U0000226D', + "NotDoubleVerticalBar;": '\U00002226', + "NotElement;": '\U00002209', + "NotEqual;": '\U00002260', + "NotExists;": '\U00002204', + "NotGreater;": '\U0000226F', + "NotGreaterEqual;": '\U00002271', + "NotGreaterLess;": '\U00002279', + "NotGreaterTilde;": '\U00002275', + "NotLeftTriangle;": '\U000022EA', + "NotLeftTriangleEqual;": '\U000022EC', + "NotLess;": '\U0000226E', + "NotLessEqual;": '\U00002270', + "NotLessGreater;": '\U00002278', + "NotLessTilde;": '\U00002274', + "NotPrecedes;": '\U00002280', + "NotPrecedesSlantEqual;": '\U000022E0', + "NotReverseElement;": '\U0000220C', + "NotRightTriangle;": '\U000022EB', + "NotRightTriangleEqual;": '\U000022ED', + "NotSquareSubsetEqual;": '\U000022E2', + "NotSquareSupersetEqual;": '\U000022E3', + "NotSubsetEqual;": '\U00002288', + "NotSucceeds;": '\U00002281', + "NotSucceedsSlantEqual;": '\U000022E1', + "NotSupersetEqual;": '\U00002289', + "NotTilde;": '\U00002241', + "NotTildeEqual;": '\U00002244', + "NotTildeFullEqual;": '\U00002247', + "NotTildeTilde;": '\U00002249', + "NotVerticalBar;": '\U00002224', + "Nscr;": '\U0001D4A9', + "Ntilde;": '\U000000D1', + "Nu;": '\U0000039D', + "OElig;": '\U00000152', + "Oacute;": '\U000000D3', + "Ocirc;": '\U000000D4', + "Ocy;": '\U0000041E', + "Odblac;": '\U00000150', + "Ofr;": '\U0001D512', + "Ograve;": '\U000000D2', + "Omacr;": '\U0000014C', + "Omega;": '\U000003A9', + "Omicron;": '\U0000039F', + "Oopf;": '\U0001D546', + "OpenCurlyDoubleQuote;": '\U0000201C', + "OpenCurlyQuote;": '\U00002018', + "Or;": '\U00002A54', + "Oscr;": '\U0001D4AA', + "Oslash;": '\U000000D8', + "Otilde;": '\U000000D5', + "Otimes;": '\U00002A37', + "Ouml;": '\U000000D6', + "OverBar;": '\U0000203E', + "OverBrace;": '\U000023DE', + "OverBracket;": '\U000023B4', + "OverParenthesis;": '\U000023DC', + "PartialD;": '\U00002202', + "Pcy;": '\U0000041F', + "Pfr;": '\U0001D513', + "Phi;": '\U000003A6', + "Pi;": '\U000003A0', + "PlusMinus;": '\U000000B1', + "Poincareplane;": '\U0000210C', + "Popf;": '\U00002119', + "Pr;": '\U00002ABB', + "Precedes;": '\U0000227A', + "PrecedesEqual;": '\U00002AAF', + "PrecedesSlantEqual;": '\U0000227C', + "PrecedesTilde;": '\U0000227E', + "Prime;": '\U00002033', + "Product;": '\U0000220F', + "Proportion;": '\U00002237', + "Proportional;": '\U0000221D', + "Pscr;": '\U0001D4AB', + "Psi;": '\U000003A8', + "QUOT;": '\U00000022', + "Qfr;": '\U0001D514', + "Qopf;": '\U0000211A', + "Qscr;": '\U0001D4AC', + "RBarr;": '\U00002910', + "REG;": '\U000000AE', + "Racute;": '\U00000154', + "Rang;": '\U000027EB', + "Rarr;": '\U000021A0', + "Rarrtl;": '\U00002916', + "Rcaron;": '\U00000158', + "Rcedil;": '\U00000156', + "Rcy;": '\U00000420', + "Re;": '\U0000211C', + "ReverseElement;": '\U0000220B', + "ReverseEquilibrium;": '\U000021CB', + "ReverseUpEquilibrium;": '\U0000296F', + "Rfr;": '\U0000211C', + "Rho;": '\U000003A1', + "RightAngleBracket;": '\U000027E9', + "RightArrow;": '\U00002192', + "RightArrowBar;": '\U000021E5', + "RightArrowLeftArrow;": '\U000021C4', + "RightCeiling;": '\U00002309', + "RightDoubleBracket;": '\U000027E7', + "RightDownTeeVector;": '\U0000295D', + "RightDownVector;": '\U000021C2', + "RightDownVectorBar;": '\U00002955', + "RightFloor;": '\U0000230B', + "RightTee;": '\U000022A2', + "RightTeeArrow;": '\U000021A6', + "RightTeeVector;": '\U0000295B', + "RightTriangle;": '\U000022B3', + "RightTriangleBar;": '\U000029D0', + "RightTriangleEqual;": '\U000022B5', + "RightUpDownVector;": '\U0000294F', + "RightUpTeeVector;": '\U0000295C', + "RightUpVector;": '\U000021BE', + "RightUpVectorBar;": '\U00002954', + "RightVector;": '\U000021C0', + "RightVectorBar;": '\U00002953', + "Rightarrow;": '\U000021D2', + "Ropf;": '\U0000211D', + "RoundImplies;": '\U00002970', + "Rrightarrow;": '\U000021DB', + "Rscr;": '\U0000211B', + "Rsh;": '\U000021B1', + "RuleDelayed;": '\U000029F4', + "SHCHcy;": '\U00000429', + "SHcy;": '\U00000428', + "SOFTcy;": '\U0000042C', + "Sacute;": '\U0000015A', + "Sc;": '\U00002ABC', + "Scaron;": '\U00000160', + "Scedil;": '\U0000015E', + "Scirc;": '\U0000015C', + "Scy;": '\U00000421', + "Sfr;": '\U0001D516', + "ShortDownArrow;": '\U00002193', + "ShortLeftArrow;": '\U00002190', + "ShortRightArrow;": '\U00002192', + "ShortUpArrow;": '\U00002191', + "Sigma;": '\U000003A3', + "SmallCircle;": '\U00002218', + "Sopf;": '\U0001D54A', + "Sqrt;": '\U0000221A', + "Square;": '\U000025A1', + "SquareIntersection;": '\U00002293', + "SquareSubset;": '\U0000228F', + "SquareSubsetEqual;": '\U00002291', + "SquareSuperset;": '\U00002290', + "SquareSupersetEqual;": '\U00002292', + "SquareUnion;": '\U00002294', + "Sscr;": '\U0001D4AE', + "Star;": '\U000022C6', + "Sub;": '\U000022D0', + "Subset;": '\U000022D0', + "SubsetEqual;": '\U00002286', + "Succeeds;": '\U0000227B', + "SucceedsEqual;": '\U00002AB0', + "SucceedsSlantEqual;": '\U0000227D', + "SucceedsTilde;": '\U0000227F', + "SuchThat;": '\U0000220B', + "Sum;": '\U00002211', + "Sup;": '\U000022D1', + "Superset;": '\U00002283', + "SupersetEqual;": '\U00002287', + "Supset;": '\U000022D1', + "THORN;": '\U000000DE', + "TRADE;": '\U00002122', + "TSHcy;": '\U0000040B', + "TScy;": '\U00000426', + "Tab;": '\U00000009', + "Tau;": '\U000003A4', + "Tcaron;": '\U00000164', + "Tcedil;": '\U00000162', + "Tcy;": '\U00000422', + "Tfr;": '\U0001D517', + "Therefore;": '\U00002234', + "Theta;": '\U00000398', + "ThinSpace;": '\U00002009', + "Tilde;": '\U0000223C', + "TildeEqual;": '\U00002243', + "TildeFullEqual;": '\U00002245', + "TildeTilde;": '\U00002248', + "Topf;": '\U0001D54B', + "TripleDot;": '\U000020DB', + "Tscr;": '\U0001D4AF', + "Tstrok;": '\U00000166', + "Uacute;": '\U000000DA', + "Uarr;": '\U0000219F', + "Uarrocir;": '\U00002949', + "Ubrcy;": '\U0000040E', + "Ubreve;": '\U0000016C', + "Ucirc;": '\U000000DB', + "Ucy;": '\U00000423', + "Udblac;": '\U00000170', + "Ufr;": '\U0001D518', + "Ugrave;": '\U000000D9', + "Umacr;": '\U0000016A', + "UnderBar;": '\U0000005F', + "UnderBrace;": '\U000023DF', + "UnderBracket;": '\U000023B5', + "UnderParenthesis;": '\U000023DD', + "Union;": '\U000022C3', + "UnionPlus;": '\U0000228E', + "Uogon;": '\U00000172', + "Uopf;": '\U0001D54C', + "UpArrow;": '\U00002191', + "UpArrowBar;": '\U00002912', + "UpArrowDownArrow;": '\U000021C5', + "UpDownArrow;": '\U00002195', + "UpEquilibrium;": '\U0000296E', + "UpTee;": '\U000022A5', + "UpTeeArrow;": '\U000021A5', + "Uparrow;": '\U000021D1', + "Updownarrow;": '\U000021D5', + "UpperLeftArrow;": '\U00002196', + "UpperRightArrow;": '\U00002197', + "Upsi;": '\U000003D2', + "Upsilon;": '\U000003A5', + "Uring;": '\U0000016E', + "Uscr;": '\U0001D4B0', + "Utilde;": '\U00000168', + "Uuml;": '\U000000DC', + "VDash;": '\U000022AB', + "Vbar;": '\U00002AEB', + "Vcy;": '\U00000412', + "Vdash;": '\U000022A9', + "Vdashl;": '\U00002AE6', + "Vee;": '\U000022C1', + "Verbar;": '\U00002016', + "Vert;": '\U00002016', + "VerticalBar;": '\U00002223', + "VerticalLine;": '\U0000007C', + "VerticalSeparator;": '\U00002758', + "VerticalTilde;": '\U00002240', + "VeryThinSpace;": '\U0000200A', + "Vfr;": '\U0001D519', + "Vopf;": '\U0001D54D', + "Vscr;": '\U0001D4B1', + "Vvdash;": '\U000022AA', + "Wcirc;": '\U00000174', + "Wedge;": '\U000022C0', + "Wfr;": '\U0001D51A', + "Wopf;": '\U0001D54E', + "Wscr;": '\U0001D4B2', + "Xfr;": '\U0001D51B', + "Xi;": '\U0000039E', + "Xopf;": '\U0001D54F', + "Xscr;": '\U0001D4B3', + "YAcy;": '\U0000042F', + "YIcy;": '\U00000407', + "YUcy;": '\U0000042E', + "Yacute;": '\U000000DD', + "Ycirc;": '\U00000176', + "Ycy;": '\U0000042B', + "Yfr;": '\U0001D51C', + "Yopf;": '\U0001D550', + "Yscr;": '\U0001D4B4', + "Yuml;": '\U00000178', + "ZHcy;": '\U00000416', + "Zacute;": '\U00000179', + "Zcaron;": '\U0000017D', + "Zcy;": '\U00000417', + "Zdot;": '\U0000017B', + "ZeroWidthSpace;": '\U0000200B', + "Zeta;": '\U00000396', + "Zfr;": '\U00002128', + "Zopf;": '\U00002124', + "Zscr;": '\U0001D4B5', + "aacute;": '\U000000E1', + "abreve;": '\U00000103', + "ac;": '\U0000223E', + "acd;": '\U0000223F', + "acirc;": '\U000000E2', + "acute;": '\U000000B4', + "acy;": '\U00000430', + "aelig;": '\U000000E6', + "af;": '\U00002061', + "afr;": '\U0001D51E', + "agrave;": '\U000000E0', + "alefsym;": '\U00002135', + "aleph;": '\U00002135', + "alpha;": '\U000003B1', + "amacr;": '\U00000101', + "amalg;": '\U00002A3F', + "amp;": '\U00000026', + "and;": '\U00002227', + "andand;": '\U00002A55', + "andd;": '\U00002A5C', + "andslope;": '\U00002A58', + "andv;": '\U00002A5A', + "ang;": '\U00002220', + "ange;": '\U000029A4', + "angle;": '\U00002220', + "angmsd;": '\U00002221', + "angmsdaa;": '\U000029A8', + "angmsdab;": '\U000029A9', + "angmsdac;": '\U000029AA', + "angmsdad;": '\U000029AB', + "angmsdae;": '\U000029AC', + "angmsdaf;": '\U000029AD', + "angmsdag;": '\U000029AE', + "angmsdah;": '\U000029AF', + "angrt;": '\U0000221F', + "angrtvb;": '\U000022BE', + "angrtvbd;": '\U0000299D', + "angsph;": '\U00002222', + "angst;": '\U000000C5', + "angzarr;": '\U0000237C', + "aogon;": '\U00000105', + "aopf;": '\U0001D552', + "ap;": '\U00002248', + "apE;": '\U00002A70', + "apacir;": '\U00002A6F', + "ape;": '\U0000224A', + "apid;": '\U0000224B', + "apos;": '\U00000027', + "approx;": '\U00002248', + "approxeq;": '\U0000224A', + "aring;": '\U000000E5', + "ascr;": '\U0001D4B6', + "ast;": '\U0000002A', + "asymp;": '\U00002248', + "asympeq;": '\U0000224D', + "atilde;": '\U000000E3', + "auml;": '\U000000E4', + "awconint;": '\U00002233', + "awint;": '\U00002A11', + "bNot;": '\U00002AED', + "backcong;": '\U0000224C', + "backepsilon;": '\U000003F6', + "backprime;": '\U00002035', + "backsim;": '\U0000223D', + "backsimeq;": '\U000022CD', + "barvee;": '\U000022BD', + "barwed;": '\U00002305', + "barwedge;": '\U00002305', + "bbrk;": '\U000023B5', + "bbrktbrk;": '\U000023B6', + "bcong;": '\U0000224C', + "bcy;": '\U00000431', + "bdquo;": '\U0000201E', + "becaus;": '\U00002235', + "because;": '\U00002235', + "bemptyv;": '\U000029B0', + "bepsi;": '\U000003F6', + "bernou;": '\U0000212C', + "beta;": '\U000003B2', + "beth;": '\U00002136', + "between;": '\U0000226C', + "bfr;": '\U0001D51F', + "bigcap;": '\U000022C2', + "bigcirc;": '\U000025EF', + "bigcup;": '\U000022C3', + "bigodot;": '\U00002A00', + "bigoplus;": '\U00002A01', + "bigotimes;": '\U00002A02', + "bigsqcup;": '\U00002A06', + "bigstar;": '\U00002605', + "bigtriangledown;": '\U000025BD', + "bigtriangleup;": '\U000025B3', + "biguplus;": '\U00002A04', + "bigvee;": '\U000022C1', + "bigwedge;": '\U000022C0', + "bkarow;": '\U0000290D', + "blacklozenge;": '\U000029EB', + "blacksquare;": '\U000025AA', + "blacktriangle;": '\U000025B4', + "blacktriangledown;": '\U000025BE', + "blacktriangleleft;": '\U000025C2', + "blacktriangleright;": '\U000025B8', + "blank;": '\U00002423', + "blk12;": '\U00002592', + "blk14;": '\U00002591', + "blk34;": '\U00002593', + "block;": '\U00002588', + "bnot;": '\U00002310', + "bopf;": '\U0001D553', + "bot;": '\U000022A5', + "bottom;": '\U000022A5', + "bowtie;": '\U000022C8', + "boxDL;": '\U00002557', + "boxDR;": '\U00002554', + "boxDl;": '\U00002556', + "boxDr;": '\U00002553', + "boxH;": '\U00002550', + "boxHD;": '\U00002566', + "boxHU;": '\U00002569', + "boxHd;": '\U00002564', + "boxHu;": '\U00002567', + "boxUL;": '\U0000255D', + "boxUR;": '\U0000255A', + "boxUl;": '\U0000255C', + "boxUr;": '\U00002559', + "boxV;": '\U00002551', + "boxVH;": '\U0000256C', + "boxVL;": '\U00002563', + "boxVR;": '\U00002560', + "boxVh;": '\U0000256B', + "boxVl;": '\U00002562', + "boxVr;": '\U0000255F', + "boxbox;": '\U000029C9', + "boxdL;": '\U00002555', + "boxdR;": '\U00002552', + "boxdl;": '\U00002510', + "boxdr;": '\U0000250C', + "boxh;": '\U00002500', + "boxhD;": '\U00002565', + "boxhU;": '\U00002568', + "boxhd;": '\U0000252C', + "boxhu;": '\U00002534', + "boxminus;": '\U0000229F', + "boxplus;": '\U0000229E', + "boxtimes;": '\U000022A0', + "boxuL;": '\U0000255B', + "boxuR;": '\U00002558', + "boxul;": '\U00002518', + "boxur;": '\U00002514', + "boxv;": '\U00002502', + "boxvH;": '\U0000256A', + "boxvL;": '\U00002561', + "boxvR;": '\U0000255E', + "boxvh;": '\U0000253C', + "boxvl;": '\U00002524', + "boxvr;": '\U0000251C', + "bprime;": '\U00002035', + "breve;": '\U000002D8', + "brvbar;": '\U000000A6', + "bscr;": '\U0001D4B7', + "bsemi;": '\U0000204F', + "bsim;": '\U0000223D', + "bsime;": '\U000022CD', + "bsol;": '\U0000005C', + "bsolb;": '\U000029C5', + "bsolhsub;": '\U000027C8', + "bull;": '\U00002022', + "bullet;": '\U00002022', + "bump;": '\U0000224E', + "bumpE;": '\U00002AAE', + "bumpe;": '\U0000224F', + "bumpeq;": '\U0000224F', + "cacute;": '\U00000107', + "cap;": '\U00002229', + "capand;": '\U00002A44', + "capbrcup;": '\U00002A49', + "capcap;": '\U00002A4B', + "capcup;": '\U00002A47', + "capdot;": '\U00002A40', + "caret;": '\U00002041', + "caron;": '\U000002C7', + "ccaps;": '\U00002A4D', + "ccaron;": '\U0000010D', + "ccedil;": '\U000000E7', + "ccirc;": '\U00000109', + "ccups;": '\U00002A4C', + "ccupssm;": '\U00002A50', + "cdot;": '\U0000010B', + "cedil;": '\U000000B8', + "cemptyv;": '\U000029B2', + "cent;": '\U000000A2', + "centerdot;": '\U000000B7', + "cfr;": '\U0001D520', + "chcy;": '\U00000447', + "check;": '\U00002713', + "checkmark;": '\U00002713', + "chi;": '\U000003C7', + "cir;": '\U000025CB', + "cirE;": '\U000029C3', + "circ;": '\U000002C6', + "circeq;": '\U00002257', + "circlearrowleft;": '\U000021BA', + "circlearrowright;": '\U000021BB', + "circledR;": '\U000000AE', + "circledS;": '\U000024C8', + "circledast;": '\U0000229B', + "circledcirc;": '\U0000229A', + "circleddash;": '\U0000229D', + "cire;": '\U00002257', + "cirfnint;": '\U00002A10', + "cirmid;": '\U00002AEF', + "cirscir;": '\U000029C2', + "clubs;": '\U00002663', + "clubsuit;": '\U00002663', + "colon;": '\U0000003A', + "colone;": '\U00002254', + "coloneq;": '\U00002254', + "comma;": '\U0000002C', + "commat;": '\U00000040', + "comp;": '\U00002201', + "compfn;": '\U00002218', + "complement;": '\U00002201', + "complexes;": '\U00002102', + "cong;": '\U00002245', + "congdot;": '\U00002A6D', + "conint;": '\U0000222E', + "copf;": '\U0001D554', + "coprod;": '\U00002210', + "copy;": '\U000000A9', + "copysr;": '\U00002117', + "crarr;": '\U000021B5', + "cross;": '\U00002717', + "cscr;": '\U0001D4B8', + "csub;": '\U00002ACF', + "csube;": '\U00002AD1', + "csup;": '\U00002AD0', + "csupe;": '\U00002AD2', + "ctdot;": '\U000022EF', + "cudarrl;": '\U00002938', + "cudarrr;": '\U00002935', + "cuepr;": '\U000022DE', + "cuesc;": '\U000022DF', + "cularr;": '\U000021B6', + "cularrp;": '\U0000293D', + "cup;": '\U0000222A', + "cupbrcap;": '\U00002A48', + "cupcap;": '\U00002A46', + "cupcup;": '\U00002A4A', + "cupdot;": '\U0000228D', + "cupor;": '\U00002A45', + "curarr;": '\U000021B7', + "curarrm;": '\U0000293C', + "curlyeqprec;": '\U000022DE', + "curlyeqsucc;": '\U000022DF', + "curlyvee;": '\U000022CE', + "curlywedge;": '\U000022CF', + "curren;": '\U000000A4', + "curvearrowleft;": '\U000021B6', + "curvearrowright;": '\U000021B7', + "cuvee;": '\U000022CE', + "cuwed;": '\U000022CF', + "cwconint;": '\U00002232', + "cwint;": '\U00002231', + "cylcty;": '\U0000232D', + "dArr;": '\U000021D3', + "dHar;": '\U00002965', + "dagger;": '\U00002020', + "daleth;": '\U00002138', + "darr;": '\U00002193', + "dash;": '\U00002010', + "dashv;": '\U000022A3', + "dbkarow;": '\U0000290F', + "dblac;": '\U000002DD', + "dcaron;": '\U0000010F', + "dcy;": '\U00000434', + "dd;": '\U00002146', + "ddagger;": '\U00002021', + "ddarr;": '\U000021CA', + "ddotseq;": '\U00002A77', + "deg;": '\U000000B0', + "delta;": '\U000003B4', + "demptyv;": '\U000029B1', + "dfisht;": '\U0000297F', + "dfr;": '\U0001D521', + "dharl;": '\U000021C3', + "dharr;": '\U000021C2', + "diam;": '\U000022C4', + "diamond;": '\U000022C4', + "diamondsuit;": '\U00002666', + "diams;": '\U00002666', + "die;": '\U000000A8', + "digamma;": '\U000003DD', + "disin;": '\U000022F2', + "div;": '\U000000F7', + "divide;": '\U000000F7', + "divideontimes;": '\U000022C7', + "divonx;": '\U000022C7', + "djcy;": '\U00000452', + "dlcorn;": '\U0000231E', + "dlcrop;": '\U0000230D', + "dollar;": '\U00000024', + "dopf;": '\U0001D555', + "dot;": '\U000002D9', + "doteq;": '\U00002250', + "doteqdot;": '\U00002251', + "dotminus;": '\U00002238', + "dotplus;": '\U00002214', + "dotsquare;": '\U000022A1', + "doublebarwedge;": '\U00002306', + "downarrow;": '\U00002193', + "downdownarrows;": '\U000021CA', + "downharpoonleft;": '\U000021C3', + "downharpoonright;": '\U000021C2', + "drbkarow;": '\U00002910', + "drcorn;": '\U0000231F', + "drcrop;": '\U0000230C', + "dscr;": '\U0001D4B9', + "dscy;": '\U00000455', + "dsol;": '\U000029F6', + "dstrok;": '\U00000111', + "dtdot;": '\U000022F1', + "dtri;": '\U000025BF', + "dtrif;": '\U000025BE', + "duarr;": '\U000021F5', + "duhar;": '\U0000296F', + "dwangle;": '\U000029A6', + "dzcy;": '\U0000045F', + "dzigrarr;": '\U000027FF', + "eDDot;": '\U00002A77', + "eDot;": '\U00002251', + "eacute;": '\U000000E9', + "easter;": '\U00002A6E', + "ecaron;": '\U0000011B', + "ecir;": '\U00002256', + "ecirc;": '\U000000EA', + "ecolon;": '\U00002255', + "ecy;": '\U0000044D', + "edot;": '\U00000117', + "ee;": '\U00002147', + "efDot;": '\U00002252', + "efr;": '\U0001D522', + "eg;": '\U00002A9A', + "egrave;": '\U000000E8', + "egs;": '\U00002A96', + "egsdot;": '\U00002A98', + "el;": '\U00002A99', + "elinters;": '\U000023E7', + "ell;": '\U00002113', + "els;": '\U00002A95', + "elsdot;": '\U00002A97', + "emacr;": '\U00000113', + "empty;": '\U00002205', + "emptyset;": '\U00002205', + "emptyv;": '\U00002205', + "emsp;": '\U00002003', + "emsp13;": '\U00002004', + "emsp14;": '\U00002005', + "eng;": '\U0000014B', + "ensp;": '\U00002002', + "eogon;": '\U00000119', + "eopf;": '\U0001D556', + "epar;": '\U000022D5', + "eparsl;": '\U000029E3', + "eplus;": '\U00002A71', + "epsi;": '\U000003B5', + "epsilon;": '\U000003B5', + "epsiv;": '\U000003F5', + "eqcirc;": '\U00002256', + "eqcolon;": '\U00002255', + "eqsim;": '\U00002242', + "eqslantgtr;": '\U00002A96', + "eqslantless;": '\U00002A95', + "equals;": '\U0000003D', + "equest;": '\U0000225F', + "equiv;": '\U00002261', + "equivDD;": '\U00002A78', + "eqvparsl;": '\U000029E5', + "erDot;": '\U00002253', + "erarr;": '\U00002971', + "escr;": '\U0000212F', + "esdot;": '\U00002250', + "esim;": '\U00002242', + "eta;": '\U000003B7', + "eth;": '\U000000F0', + "euml;": '\U000000EB', + "euro;": '\U000020AC', + "excl;": '\U00000021', + "exist;": '\U00002203', + "expectation;": '\U00002130', + "exponentiale;": '\U00002147', + "fallingdotseq;": '\U00002252', + "fcy;": '\U00000444', + "female;": '\U00002640', + "ffilig;": '\U0000FB03', + "fflig;": '\U0000FB00', + "ffllig;": '\U0000FB04', + "ffr;": '\U0001D523', + "filig;": '\U0000FB01', + "flat;": '\U0000266D', + "fllig;": '\U0000FB02', + "fltns;": '\U000025B1', + "fnof;": '\U00000192', + "fopf;": '\U0001D557', + "forall;": '\U00002200', + "fork;": '\U000022D4', + "forkv;": '\U00002AD9', + "fpartint;": '\U00002A0D', + "frac12;": '\U000000BD', + "frac13;": '\U00002153', + "frac14;": '\U000000BC', + "frac15;": '\U00002155', + "frac16;": '\U00002159', + "frac18;": '\U0000215B', + "frac23;": '\U00002154', + "frac25;": '\U00002156', + "frac34;": '\U000000BE', + "frac35;": '\U00002157', + "frac38;": '\U0000215C', + "frac45;": '\U00002158', + "frac56;": '\U0000215A', + "frac58;": '\U0000215D', + "frac78;": '\U0000215E', + "frasl;": '\U00002044', + "frown;": '\U00002322', + "fscr;": '\U0001D4BB', + "gE;": '\U00002267', + "gEl;": '\U00002A8C', + "gacute;": '\U000001F5', + "gamma;": '\U000003B3', + "gammad;": '\U000003DD', + "gap;": '\U00002A86', + "gbreve;": '\U0000011F', + "gcirc;": '\U0000011D', + "gcy;": '\U00000433', + "gdot;": '\U00000121', + "ge;": '\U00002265', + "gel;": '\U000022DB', + "geq;": '\U00002265', + "geqq;": '\U00002267', + "geqslant;": '\U00002A7E', + "ges;": '\U00002A7E', + "gescc;": '\U00002AA9', + "gesdot;": '\U00002A80', + "gesdoto;": '\U00002A82', + "gesdotol;": '\U00002A84', + "gesles;": '\U00002A94', + "gfr;": '\U0001D524', + "gg;": '\U0000226B', + "ggg;": '\U000022D9', + "gimel;": '\U00002137', + "gjcy;": '\U00000453', + "gl;": '\U00002277', + "glE;": '\U00002A92', + "gla;": '\U00002AA5', + "glj;": '\U00002AA4', + "gnE;": '\U00002269', + "gnap;": '\U00002A8A', + "gnapprox;": '\U00002A8A', + "gne;": '\U00002A88', + "gneq;": '\U00002A88', + "gneqq;": '\U00002269', + "gnsim;": '\U000022E7', + "gopf;": '\U0001D558', + "grave;": '\U00000060', + "gscr;": '\U0000210A', + "gsim;": '\U00002273', + "gsime;": '\U00002A8E', + "gsiml;": '\U00002A90', + "gt;": '\U0000003E', + "gtcc;": '\U00002AA7', + "gtcir;": '\U00002A7A', + "gtdot;": '\U000022D7', + "gtlPar;": '\U00002995', + "gtquest;": '\U00002A7C', + "gtrapprox;": '\U00002A86', + "gtrarr;": '\U00002978', + "gtrdot;": '\U000022D7', + "gtreqless;": '\U000022DB', + "gtreqqless;": '\U00002A8C', + "gtrless;": '\U00002277', + "gtrsim;": '\U00002273', + "hArr;": '\U000021D4', + "hairsp;": '\U0000200A', + "half;": '\U000000BD', + "hamilt;": '\U0000210B', + "hardcy;": '\U0000044A', + "harr;": '\U00002194', + "harrcir;": '\U00002948', + "harrw;": '\U000021AD', + "hbar;": '\U0000210F', + "hcirc;": '\U00000125', + "hearts;": '\U00002665', + "heartsuit;": '\U00002665', + "hellip;": '\U00002026', + "hercon;": '\U000022B9', + "hfr;": '\U0001D525', + "hksearow;": '\U00002925', + "hkswarow;": '\U00002926', + "hoarr;": '\U000021FF', + "homtht;": '\U0000223B', + "hookleftarrow;": '\U000021A9', + "hookrightarrow;": '\U000021AA', + "hopf;": '\U0001D559', + "horbar;": '\U00002015', + "hscr;": '\U0001D4BD', + "hslash;": '\U0000210F', + "hstrok;": '\U00000127', + "hybull;": '\U00002043', + "hyphen;": '\U00002010', + "iacute;": '\U000000ED', + "ic;": '\U00002063', + "icirc;": '\U000000EE', + "icy;": '\U00000438', + "iecy;": '\U00000435', + "iexcl;": '\U000000A1', + "iff;": '\U000021D4', + "ifr;": '\U0001D526', + "igrave;": '\U000000EC', + "ii;": '\U00002148', + "iiiint;": '\U00002A0C', + "iiint;": '\U0000222D', + "iinfin;": '\U000029DC', + "iiota;": '\U00002129', + "ijlig;": '\U00000133', + "imacr;": '\U0000012B', + "image;": '\U00002111', + "imagline;": '\U00002110', + "imagpart;": '\U00002111', + "imath;": '\U00000131', + "imof;": '\U000022B7', + "imped;": '\U000001B5', + "in;": '\U00002208', + "incare;": '\U00002105', + "infin;": '\U0000221E', + "infintie;": '\U000029DD', + "inodot;": '\U00000131', + "int;": '\U0000222B', + "intcal;": '\U000022BA', + "integers;": '\U00002124', + "intercal;": '\U000022BA', + "intlarhk;": '\U00002A17', + "intprod;": '\U00002A3C', + "iocy;": '\U00000451', + "iogon;": '\U0000012F', + "iopf;": '\U0001D55A', + "iota;": '\U000003B9', + "iprod;": '\U00002A3C', + "iquest;": '\U000000BF', + "iscr;": '\U0001D4BE', + "isin;": '\U00002208', + "isinE;": '\U000022F9', + "isindot;": '\U000022F5', + "isins;": '\U000022F4', + "isinsv;": '\U000022F3', + "isinv;": '\U00002208', + "it;": '\U00002062', + "itilde;": '\U00000129', + "iukcy;": '\U00000456', + "iuml;": '\U000000EF', + "jcirc;": '\U00000135', + "jcy;": '\U00000439', + "jfr;": '\U0001D527', + "jmath;": '\U00000237', + "jopf;": '\U0001D55B', + "jscr;": '\U0001D4BF', + "jsercy;": '\U00000458', + "jukcy;": '\U00000454', + "kappa;": '\U000003BA', + "kappav;": '\U000003F0', + "kcedil;": '\U00000137', + "kcy;": '\U0000043A', + "kfr;": '\U0001D528', + "kgreen;": '\U00000138', + "khcy;": '\U00000445', + "kjcy;": '\U0000045C', + "kopf;": '\U0001D55C', + "kscr;": '\U0001D4C0', + "lAarr;": '\U000021DA', + "lArr;": '\U000021D0', + "lAtail;": '\U0000291B', + "lBarr;": '\U0000290E', + "lE;": '\U00002266', + "lEg;": '\U00002A8B', + "lHar;": '\U00002962', + "lacute;": '\U0000013A', + "laemptyv;": '\U000029B4', + "lagran;": '\U00002112', + "lambda;": '\U000003BB', + "lang;": '\U000027E8', + "langd;": '\U00002991', + "langle;": '\U000027E8', + "lap;": '\U00002A85', + "laquo;": '\U000000AB', + "larr;": '\U00002190', + "larrb;": '\U000021E4', + "larrbfs;": '\U0000291F', + "larrfs;": '\U0000291D', + "larrhk;": '\U000021A9', + "larrlp;": '\U000021AB', + "larrpl;": '\U00002939', + "larrsim;": '\U00002973', + "larrtl;": '\U000021A2', + "lat;": '\U00002AAB', + "latail;": '\U00002919', + "late;": '\U00002AAD', + "lbarr;": '\U0000290C', + "lbbrk;": '\U00002772', + "lbrace;": '\U0000007B', + "lbrack;": '\U0000005B', + "lbrke;": '\U0000298B', + "lbrksld;": '\U0000298F', + "lbrkslu;": '\U0000298D', + "lcaron;": '\U0000013E', + "lcedil;": '\U0000013C', + "lceil;": '\U00002308', + "lcub;": '\U0000007B', + "lcy;": '\U0000043B', + "ldca;": '\U00002936', + "ldquo;": '\U0000201C', + "ldquor;": '\U0000201E', + "ldrdhar;": '\U00002967', + "ldrushar;": '\U0000294B', + "ldsh;": '\U000021B2', + "le;": '\U00002264', + "leftarrow;": '\U00002190', + "leftarrowtail;": '\U000021A2', + "leftharpoondown;": '\U000021BD', + "leftharpoonup;": '\U000021BC', + "leftleftarrows;": '\U000021C7', + "leftrightarrow;": '\U00002194', + "leftrightarrows;": '\U000021C6', + "leftrightharpoons;": '\U000021CB', + "leftrightsquigarrow;": '\U000021AD', + "leftthreetimes;": '\U000022CB', + "leg;": '\U000022DA', + "leq;": '\U00002264', + "leqq;": '\U00002266', + "leqslant;": '\U00002A7D', + "les;": '\U00002A7D', + "lescc;": '\U00002AA8', + "lesdot;": '\U00002A7F', + "lesdoto;": '\U00002A81', + "lesdotor;": '\U00002A83', + "lesges;": '\U00002A93', + "lessapprox;": '\U00002A85', + "lessdot;": '\U000022D6', + "lesseqgtr;": '\U000022DA', + "lesseqqgtr;": '\U00002A8B', + "lessgtr;": '\U00002276', + "lesssim;": '\U00002272', + "lfisht;": '\U0000297C', + "lfloor;": '\U0000230A', + "lfr;": '\U0001D529', + "lg;": '\U00002276', + "lgE;": '\U00002A91', + "lhard;": '\U000021BD', + "lharu;": '\U000021BC', + "lharul;": '\U0000296A', + "lhblk;": '\U00002584', + "ljcy;": '\U00000459', + "ll;": '\U0000226A', + "llarr;": '\U000021C7', + "llcorner;": '\U0000231E', + "llhard;": '\U0000296B', + "lltri;": '\U000025FA', + "lmidot;": '\U00000140', + "lmoust;": '\U000023B0', + "lmoustache;": '\U000023B0', + "lnE;": '\U00002268', + "lnap;": '\U00002A89', + "lnapprox;": '\U00002A89', + "lne;": '\U00002A87', + "lneq;": '\U00002A87', + "lneqq;": '\U00002268', + "lnsim;": '\U000022E6', + "loang;": '\U000027EC', + "loarr;": '\U000021FD', + "lobrk;": '\U000027E6', + "longleftarrow;": '\U000027F5', + "longleftrightarrow;": '\U000027F7', + "longmapsto;": '\U000027FC', + "longrightarrow;": '\U000027F6', + "looparrowleft;": '\U000021AB', + "looparrowright;": '\U000021AC', + "lopar;": '\U00002985', + "lopf;": '\U0001D55D', + "loplus;": '\U00002A2D', + "lotimes;": '\U00002A34', + "lowast;": '\U00002217', + "lowbar;": '\U0000005F', + "loz;": '\U000025CA', + "lozenge;": '\U000025CA', + "lozf;": '\U000029EB', + "lpar;": '\U00000028', + "lparlt;": '\U00002993', + "lrarr;": '\U000021C6', + "lrcorner;": '\U0000231F', + "lrhar;": '\U000021CB', + "lrhard;": '\U0000296D', + "lrm;": '\U0000200E', + "lrtri;": '\U000022BF', + "lsaquo;": '\U00002039', + "lscr;": '\U0001D4C1', + "lsh;": '\U000021B0', + "lsim;": '\U00002272', + "lsime;": '\U00002A8D', + "lsimg;": '\U00002A8F', + "lsqb;": '\U0000005B', + "lsquo;": '\U00002018', + "lsquor;": '\U0000201A', + "lstrok;": '\U00000142', + "lt;": '\U0000003C', + "ltcc;": '\U00002AA6', + "ltcir;": '\U00002A79', + "ltdot;": '\U000022D6', + "lthree;": '\U000022CB', + "ltimes;": '\U000022C9', + "ltlarr;": '\U00002976', + "ltquest;": '\U00002A7B', + "ltrPar;": '\U00002996', + "ltri;": '\U000025C3', + "ltrie;": '\U000022B4', + "ltrif;": '\U000025C2', + "lurdshar;": '\U0000294A', + "luruhar;": '\U00002966', + "mDDot;": '\U0000223A', + "macr;": '\U000000AF', + "male;": '\U00002642', + "malt;": '\U00002720', + "maltese;": '\U00002720', + "map;": '\U000021A6', + "mapsto;": '\U000021A6', + "mapstodown;": '\U000021A7', + "mapstoleft;": '\U000021A4', + "mapstoup;": '\U000021A5', + "marker;": '\U000025AE', + "mcomma;": '\U00002A29', + "mcy;": '\U0000043C', + "mdash;": '\U00002014', + "measuredangle;": '\U00002221', + "mfr;": '\U0001D52A', + "mho;": '\U00002127', + "micro;": '\U000000B5', + "mid;": '\U00002223', + "midast;": '\U0000002A', + "midcir;": '\U00002AF0', + "middot;": '\U000000B7', + "minus;": '\U00002212', + "minusb;": '\U0000229F', + "minusd;": '\U00002238', + "minusdu;": '\U00002A2A', + "mlcp;": '\U00002ADB', + "mldr;": '\U00002026', + "mnplus;": '\U00002213', + "models;": '\U000022A7', + "mopf;": '\U0001D55E', + "mp;": '\U00002213', + "mscr;": '\U0001D4C2', + "mstpos;": '\U0000223E', + "mu;": '\U000003BC', + "multimap;": '\U000022B8', + "mumap;": '\U000022B8', + "nLeftarrow;": '\U000021CD', + "nLeftrightarrow;": '\U000021CE', + "nRightarrow;": '\U000021CF', + "nVDash;": '\U000022AF', + "nVdash;": '\U000022AE', + "nabla;": '\U00002207', + "nacute;": '\U00000144', + "nap;": '\U00002249', + "napos;": '\U00000149', + "napprox;": '\U00002249', + "natur;": '\U0000266E', + "natural;": '\U0000266E', + "naturals;": '\U00002115', + "nbsp;": '\U000000A0', + "ncap;": '\U00002A43', + "ncaron;": '\U00000148', + "ncedil;": '\U00000146', + "ncong;": '\U00002247', + "ncup;": '\U00002A42', + "ncy;": '\U0000043D', + "ndash;": '\U00002013', + "ne;": '\U00002260', + "neArr;": '\U000021D7', + "nearhk;": '\U00002924', + "nearr;": '\U00002197', + "nearrow;": '\U00002197', + "nequiv;": '\U00002262', + "nesear;": '\U00002928', + "nexist;": '\U00002204', + "nexists;": '\U00002204', + "nfr;": '\U0001D52B', + "nge;": '\U00002271', + "ngeq;": '\U00002271', + "ngsim;": '\U00002275', + "ngt;": '\U0000226F', + "ngtr;": '\U0000226F', + "nhArr;": '\U000021CE', + "nharr;": '\U000021AE', + "nhpar;": '\U00002AF2', + "ni;": '\U0000220B', + "nis;": '\U000022FC', + "nisd;": '\U000022FA', + "niv;": '\U0000220B', + "njcy;": '\U0000045A', + "nlArr;": '\U000021CD', + "nlarr;": '\U0000219A', + "nldr;": '\U00002025', + "nle;": '\U00002270', + "nleftarrow;": '\U0000219A', + "nleftrightarrow;": '\U000021AE', + "nleq;": '\U00002270', + "nless;": '\U0000226E', + "nlsim;": '\U00002274', + "nlt;": '\U0000226E', + "nltri;": '\U000022EA', + "nltrie;": '\U000022EC', + "nmid;": '\U00002224', + "nopf;": '\U0001D55F', + "not;": '\U000000AC', + "notin;": '\U00002209', + "notinva;": '\U00002209', + "notinvb;": '\U000022F7', + "notinvc;": '\U000022F6', + "notni;": '\U0000220C', + "notniva;": '\U0000220C', + "notnivb;": '\U000022FE', + "notnivc;": '\U000022FD', + "npar;": '\U00002226', + "nparallel;": '\U00002226', + "npolint;": '\U00002A14', + "npr;": '\U00002280', + "nprcue;": '\U000022E0', + "nprec;": '\U00002280', + "nrArr;": '\U000021CF', + "nrarr;": '\U0000219B', + "nrightarrow;": '\U0000219B', + "nrtri;": '\U000022EB', + "nrtrie;": '\U000022ED', + "nsc;": '\U00002281', + "nsccue;": '\U000022E1', + "nscr;": '\U0001D4C3', + "nshortmid;": '\U00002224', + "nshortparallel;": '\U00002226', + "nsim;": '\U00002241', + "nsime;": '\U00002244', + "nsimeq;": '\U00002244', + "nsmid;": '\U00002224', + "nspar;": '\U00002226', + "nsqsube;": '\U000022E2', + "nsqsupe;": '\U000022E3', + "nsub;": '\U00002284', + "nsube;": '\U00002288', + "nsubseteq;": '\U00002288', + "nsucc;": '\U00002281', + "nsup;": '\U00002285', + "nsupe;": '\U00002289', + "nsupseteq;": '\U00002289', + "ntgl;": '\U00002279', + "ntilde;": '\U000000F1', + "ntlg;": '\U00002278', + "ntriangleleft;": '\U000022EA', + "ntrianglelefteq;": '\U000022EC', + "ntriangleright;": '\U000022EB', + "ntrianglerighteq;": '\U000022ED', + "nu;": '\U000003BD', + "num;": '\U00000023', + "numero;": '\U00002116', + "numsp;": '\U00002007', + "nvDash;": '\U000022AD', + "nvHarr;": '\U00002904', + "nvdash;": '\U000022AC', + "nvinfin;": '\U000029DE', + "nvlArr;": '\U00002902', + "nvrArr;": '\U00002903', + "nwArr;": '\U000021D6', + "nwarhk;": '\U00002923', + "nwarr;": '\U00002196', + "nwarrow;": '\U00002196', + "nwnear;": '\U00002927', + "oS;": '\U000024C8', + "oacute;": '\U000000F3', + "oast;": '\U0000229B', + "ocir;": '\U0000229A', + "ocirc;": '\U000000F4', + "ocy;": '\U0000043E', + "odash;": '\U0000229D', + "odblac;": '\U00000151', + "odiv;": '\U00002A38', + "odot;": '\U00002299', + "odsold;": '\U000029BC', + "oelig;": '\U00000153', + "ofcir;": '\U000029BF', + "ofr;": '\U0001D52C', + "ogon;": '\U000002DB', + "ograve;": '\U000000F2', + "ogt;": '\U000029C1', + "ohbar;": '\U000029B5', + "ohm;": '\U000003A9', + "oint;": '\U0000222E', + "olarr;": '\U000021BA', + "olcir;": '\U000029BE', + "olcross;": '\U000029BB', + "oline;": '\U0000203E', + "olt;": '\U000029C0', + "omacr;": '\U0000014D', + "omega;": '\U000003C9', + "omicron;": '\U000003BF', + "omid;": '\U000029B6', + "ominus;": '\U00002296', + "oopf;": '\U0001D560', + "opar;": '\U000029B7', + "operp;": '\U000029B9', + "oplus;": '\U00002295', + "or;": '\U00002228', + "orarr;": '\U000021BB', + "ord;": '\U00002A5D', + "order;": '\U00002134', + "orderof;": '\U00002134', + "ordf;": '\U000000AA', + "ordm;": '\U000000BA', + "origof;": '\U000022B6', + "oror;": '\U00002A56', + "orslope;": '\U00002A57', + "orv;": '\U00002A5B', + "oscr;": '\U00002134', + "oslash;": '\U000000F8', + "osol;": '\U00002298', + "otilde;": '\U000000F5', + "otimes;": '\U00002297', + "otimesas;": '\U00002A36', + "ouml;": '\U000000F6', + "ovbar;": '\U0000233D', + "par;": '\U00002225', + "para;": '\U000000B6', + "parallel;": '\U00002225', + "parsim;": '\U00002AF3', + "parsl;": '\U00002AFD', + "part;": '\U00002202', + "pcy;": '\U0000043F', + "percnt;": '\U00000025', + "period;": '\U0000002E', + "permil;": '\U00002030', + "perp;": '\U000022A5', + "pertenk;": '\U00002031', + "pfr;": '\U0001D52D', + "phi;": '\U000003C6', + "phiv;": '\U000003D5', + "phmmat;": '\U00002133', + "phone;": '\U0000260E', + "pi;": '\U000003C0', + "pitchfork;": '\U000022D4', + "piv;": '\U000003D6', + "planck;": '\U0000210F', + "planckh;": '\U0000210E', + "plankv;": '\U0000210F', + "plus;": '\U0000002B', + "plusacir;": '\U00002A23', + "plusb;": '\U0000229E', + "pluscir;": '\U00002A22', + "plusdo;": '\U00002214', + "plusdu;": '\U00002A25', + "pluse;": '\U00002A72', + "plusmn;": '\U000000B1', + "plussim;": '\U00002A26', + "plustwo;": '\U00002A27', + "pm;": '\U000000B1', + "pointint;": '\U00002A15', + "popf;": '\U0001D561', + "pound;": '\U000000A3', + "pr;": '\U0000227A', + "prE;": '\U00002AB3', + "prap;": '\U00002AB7', + "prcue;": '\U0000227C', + "pre;": '\U00002AAF', + "prec;": '\U0000227A', + "precapprox;": '\U00002AB7', + "preccurlyeq;": '\U0000227C', + "preceq;": '\U00002AAF', + "precnapprox;": '\U00002AB9', + "precneqq;": '\U00002AB5', + "precnsim;": '\U000022E8', + "precsim;": '\U0000227E', + "prime;": '\U00002032', + "primes;": '\U00002119', + "prnE;": '\U00002AB5', + "prnap;": '\U00002AB9', + "prnsim;": '\U000022E8', + "prod;": '\U0000220F', + "profalar;": '\U0000232E', + "profline;": '\U00002312', + "profsurf;": '\U00002313', + "prop;": '\U0000221D', + "propto;": '\U0000221D', + "prsim;": '\U0000227E', + "prurel;": '\U000022B0', + "pscr;": '\U0001D4C5', + "psi;": '\U000003C8', + "puncsp;": '\U00002008', + "qfr;": '\U0001D52E', + "qint;": '\U00002A0C', + "qopf;": '\U0001D562', + "qprime;": '\U00002057', + "qscr;": '\U0001D4C6', + "quaternions;": '\U0000210D', + "quatint;": '\U00002A16', + "quest;": '\U0000003F', + "questeq;": '\U0000225F', + "quot;": '\U00000022', + "rAarr;": '\U000021DB', + "rArr;": '\U000021D2', + "rAtail;": '\U0000291C', + "rBarr;": '\U0000290F', + "rHar;": '\U00002964', + "racute;": '\U00000155', + "radic;": '\U0000221A', + "raemptyv;": '\U000029B3', + "rang;": '\U000027E9', + "rangd;": '\U00002992', + "range;": '\U000029A5', + "rangle;": '\U000027E9', + "raquo;": '\U000000BB', + "rarr;": '\U00002192', + "rarrap;": '\U00002975', + "rarrb;": '\U000021E5', + "rarrbfs;": '\U00002920', + "rarrc;": '\U00002933', + "rarrfs;": '\U0000291E', + "rarrhk;": '\U000021AA', + "rarrlp;": '\U000021AC', + "rarrpl;": '\U00002945', + "rarrsim;": '\U00002974', + "rarrtl;": '\U000021A3', + "rarrw;": '\U0000219D', + "ratail;": '\U0000291A', + "ratio;": '\U00002236', + "rationals;": '\U0000211A', + "rbarr;": '\U0000290D', + "rbbrk;": '\U00002773', + "rbrace;": '\U0000007D', + "rbrack;": '\U0000005D', + "rbrke;": '\U0000298C', + "rbrksld;": '\U0000298E', + "rbrkslu;": '\U00002990', + "rcaron;": '\U00000159', + "rcedil;": '\U00000157', + "rceil;": '\U00002309', + "rcub;": '\U0000007D', + "rcy;": '\U00000440', + "rdca;": '\U00002937', + "rdldhar;": '\U00002969', + "rdquo;": '\U0000201D', + "rdquor;": '\U0000201D', + "rdsh;": '\U000021B3', + "real;": '\U0000211C', + "realine;": '\U0000211B', + "realpart;": '\U0000211C', + "reals;": '\U0000211D', + "rect;": '\U000025AD', + "reg;": '\U000000AE', + "rfisht;": '\U0000297D', + "rfloor;": '\U0000230B', + "rfr;": '\U0001D52F', + "rhard;": '\U000021C1', + "rharu;": '\U000021C0', + "rharul;": '\U0000296C', + "rho;": '\U000003C1', + "rhov;": '\U000003F1', + "rightarrow;": '\U00002192', + "rightarrowtail;": '\U000021A3', + "rightharpoondown;": '\U000021C1', + "rightharpoonup;": '\U000021C0', + "rightleftarrows;": '\U000021C4', + "rightleftharpoons;": '\U000021CC', + "rightrightarrows;": '\U000021C9', + "rightsquigarrow;": '\U0000219D', + "rightthreetimes;": '\U000022CC', + "ring;": '\U000002DA', + "risingdotseq;": '\U00002253', + "rlarr;": '\U000021C4', + "rlhar;": '\U000021CC', + "rlm;": '\U0000200F', + "rmoust;": '\U000023B1', + "rmoustache;": '\U000023B1', + "rnmid;": '\U00002AEE', + "roang;": '\U000027ED', + "roarr;": '\U000021FE', + "robrk;": '\U000027E7', + "ropar;": '\U00002986', + "ropf;": '\U0001D563', + "roplus;": '\U00002A2E', + "rotimes;": '\U00002A35', + "rpar;": '\U00000029', + "rpargt;": '\U00002994', + "rppolint;": '\U00002A12', + "rrarr;": '\U000021C9', + "rsaquo;": '\U0000203A', + "rscr;": '\U0001D4C7', + "rsh;": '\U000021B1', + "rsqb;": '\U0000005D', + "rsquo;": '\U00002019', + "rsquor;": '\U00002019', + "rthree;": '\U000022CC', + "rtimes;": '\U000022CA', + "rtri;": '\U000025B9', + "rtrie;": '\U000022B5', + "rtrif;": '\U000025B8', + "rtriltri;": '\U000029CE', + "ruluhar;": '\U00002968', + "rx;": '\U0000211E', + "sacute;": '\U0000015B', + "sbquo;": '\U0000201A', + "sc;": '\U0000227B', + "scE;": '\U00002AB4', + "scap;": '\U00002AB8', + "scaron;": '\U00000161', + "sccue;": '\U0000227D', + "sce;": '\U00002AB0', + "scedil;": '\U0000015F', + "scirc;": '\U0000015D', + "scnE;": '\U00002AB6', + "scnap;": '\U00002ABA', + "scnsim;": '\U000022E9', + "scpolint;": '\U00002A13', + "scsim;": '\U0000227F', + "scy;": '\U00000441', + "sdot;": '\U000022C5', + "sdotb;": '\U000022A1', + "sdote;": '\U00002A66', + "seArr;": '\U000021D8', + "searhk;": '\U00002925', + "searr;": '\U00002198', + "searrow;": '\U00002198', + "sect;": '\U000000A7', + "semi;": '\U0000003B', + "seswar;": '\U00002929', + "setminus;": '\U00002216', + "setmn;": '\U00002216', + "sext;": '\U00002736', + "sfr;": '\U0001D530', + "sfrown;": '\U00002322', + "sharp;": '\U0000266F', + "shchcy;": '\U00000449', + "shcy;": '\U00000448', + "shortmid;": '\U00002223', + "shortparallel;": '\U00002225', + "shy;": '\U000000AD', + "sigma;": '\U000003C3', + "sigmaf;": '\U000003C2', + "sigmav;": '\U000003C2', + "sim;": '\U0000223C', + "simdot;": '\U00002A6A', + "sime;": '\U00002243', + "simeq;": '\U00002243', + "simg;": '\U00002A9E', + "simgE;": '\U00002AA0', + "siml;": '\U00002A9D', + "simlE;": '\U00002A9F', + "simne;": '\U00002246', + "simplus;": '\U00002A24', + "simrarr;": '\U00002972', + "slarr;": '\U00002190', + "smallsetminus;": '\U00002216', + "smashp;": '\U00002A33', + "smeparsl;": '\U000029E4', + "smid;": '\U00002223', + "smile;": '\U00002323', + "smt;": '\U00002AAA', + "smte;": '\U00002AAC', + "softcy;": '\U0000044C', + "sol;": '\U0000002F', + "solb;": '\U000029C4', + "solbar;": '\U0000233F', + "sopf;": '\U0001D564', + "spades;": '\U00002660', + "spadesuit;": '\U00002660', + "spar;": '\U00002225', + "sqcap;": '\U00002293', + "sqcup;": '\U00002294', + "sqsub;": '\U0000228F', + "sqsube;": '\U00002291', + "sqsubset;": '\U0000228F', + "sqsubseteq;": '\U00002291', + "sqsup;": '\U00002290', + "sqsupe;": '\U00002292', + "sqsupset;": '\U00002290', + "sqsupseteq;": '\U00002292', + "squ;": '\U000025A1', + "square;": '\U000025A1', + "squarf;": '\U000025AA', + "squf;": '\U000025AA', + "srarr;": '\U00002192', + "sscr;": '\U0001D4C8', + "ssetmn;": '\U00002216', + "ssmile;": '\U00002323', + "sstarf;": '\U000022C6', + "star;": '\U00002606', + "starf;": '\U00002605', + "straightepsilon;": '\U000003F5', + "straightphi;": '\U000003D5', + "strns;": '\U000000AF', + "sub;": '\U00002282', + "subE;": '\U00002AC5', + "subdot;": '\U00002ABD', + "sube;": '\U00002286', + "subedot;": '\U00002AC3', + "submult;": '\U00002AC1', + "subnE;": '\U00002ACB', + "subne;": '\U0000228A', + "subplus;": '\U00002ABF', + "subrarr;": '\U00002979', + "subset;": '\U00002282', + "subseteq;": '\U00002286', + "subseteqq;": '\U00002AC5', + "subsetneq;": '\U0000228A', + "subsetneqq;": '\U00002ACB', + "subsim;": '\U00002AC7', + "subsub;": '\U00002AD5', + "subsup;": '\U00002AD3', + "succ;": '\U0000227B', + "succapprox;": '\U00002AB8', + "succcurlyeq;": '\U0000227D', + "succeq;": '\U00002AB0', + "succnapprox;": '\U00002ABA', + "succneqq;": '\U00002AB6', + "succnsim;": '\U000022E9', + "succsim;": '\U0000227F', + "sum;": '\U00002211', + "sung;": '\U0000266A', + "sup;": '\U00002283', + "sup1;": '\U000000B9', + "sup2;": '\U000000B2', + "sup3;": '\U000000B3', + "supE;": '\U00002AC6', + "supdot;": '\U00002ABE', + "supdsub;": '\U00002AD8', + "supe;": '\U00002287', + "supedot;": '\U00002AC4', + "suphsol;": '\U000027C9', + "suphsub;": '\U00002AD7', + "suplarr;": '\U0000297B', + "supmult;": '\U00002AC2', + "supnE;": '\U00002ACC', + "supne;": '\U0000228B', + "supplus;": '\U00002AC0', + "supset;": '\U00002283', + "supseteq;": '\U00002287', + "supseteqq;": '\U00002AC6', + "supsetneq;": '\U0000228B', + "supsetneqq;": '\U00002ACC', + "supsim;": '\U00002AC8', + "supsub;": '\U00002AD4', + "supsup;": '\U00002AD6', + "swArr;": '\U000021D9', + "swarhk;": '\U00002926', + "swarr;": '\U00002199', + "swarrow;": '\U00002199', + "swnwar;": '\U0000292A', + "szlig;": '\U000000DF', + "target;": '\U00002316', + "tau;": '\U000003C4', + "tbrk;": '\U000023B4', + "tcaron;": '\U00000165', + "tcedil;": '\U00000163', + "tcy;": '\U00000442', + "tdot;": '\U000020DB', + "telrec;": '\U00002315', + "tfr;": '\U0001D531', + "there4;": '\U00002234', + "therefore;": '\U00002234', + "theta;": '\U000003B8', + "thetasym;": '\U000003D1', + "thetav;": '\U000003D1', + "thickapprox;": '\U00002248', + "thicksim;": '\U0000223C', + "thinsp;": '\U00002009', + "thkap;": '\U00002248', + "thksim;": '\U0000223C', + "thorn;": '\U000000FE', + "tilde;": '\U000002DC', + "times;": '\U000000D7', + "timesb;": '\U000022A0', + "timesbar;": '\U00002A31', + "timesd;": '\U00002A30', + "tint;": '\U0000222D', + "toea;": '\U00002928', + "top;": '\U000022A4', + "topbot;": '\U00002336', + "topcir;": '\U00002AF1', + "topf;": '\U0001D565', + "topfork;": '\U00002ADA', + "tosa;": '\U00002929', + "tprime;": '\U00002034', + "trade;": '\U00002122', + "triangle;": '\U000025B5', + "triangledown;": '\U000025BF', + "triangleleft;": '\U000025C3', + "trianglelefteq;": '\U000022B4', + "triangleq;": '\U0000225C', + "triangleright;": '\U000025B9', + "trianglerighteq;": '\U000022B5', + "tridot;": '\U000025EC', + "trie;": '\U0000225C', + "triminus;": '\U00002A3A', + "triplus;": '\U00002A39', + "trisb;": '\U000029CD', + "tritime;": '\U00002A3B', + "trpezium;": '\U000023E2', + "tscr;": '\U0001D4C9', + "tscy;": '\U00000446', + "tshcy;": '\U0000045B', + "tstrok;": '\U00000167', + "twixt;": '\U0000226C', + "twoheadleftarrow;": '\U0000219E', + "twoheadrightarrow;": '\U000021A0', + "uArr;": '\U000021D1', + "uHar;": '\U00002963', + "uacute;": '\U000000FA', + "uarr;": '\U00002191', + "ubrcy;": '\U0000045E', + "ubreve;": '\U0000016D', + "ucirc;": '\U000000FB', + "ucy;": '\U00000443', + "udarr;": '\U000021C5', + "udblac;": '\U00000171', + "udhar;": '\U0000296E', + "ufisht;": '\U0000297E', + "ufr;": '\U0001D532', + "ugrave;": '\U000000F9', + "uharl;": '\U000021BF', + "uharr;": '\U000021BE', + "uhblk;": '\U00002580', + "ulcorn;": '\U0000231C', + "ulcorner;": '\U0000231C', + "ulcrop;": '\U0000230F', + "ultri;": '\U000025F8', + "umacr;": '\U0000016B', + "uml;": '\U000000A8', + "uogon;": '\U00000173', + "uopf;": '\U0001D566', + "uparrow;": '\U00002191', + "updownarrow;": '\U00002195', + "upharpoonleft;": '\U000021BF', + "upharpoonright;": '\U000021BE', + "uplus;": '\U0000228E', + "upsi;": '\U000003C5', + "upsih;": '\U000003D2', + "upsilon;": '\U000003C5', + "upuparrows;": '\U000021C8', + "urcorn;": '\U0000231D', + "urcorner;": '\U0000231D', + "urcrop;": '\U0000230E', + "uring;": '\U0000016F', + "urtri;": '\U000025F9', + "uscr;": '\U0001D4CA', + "utdot;": '\U000022F0', + "utilde;": '\U00000169', + "utri;": '\U000025B5', + "utrif;": '\U000025B4', + "uuarr;": '\U000021C8', + "uuml;": '\U000000FC', + "uwangle;": '\U000029A7', + "vArr;": '\U000021D5', + "vBar;": '\U00002AE8', + "vBarv;": '\U00002AE9', + "vDash;": '\U000022A8', + "vangrt;": '\U0000299C', + "varepsilon;": '\U000003F5', + "varkappa;": '\U000003F0', + "varnothing;": '\U00002205', + "varphi;": '\U000003D5', + "varpi;": '\U000003D6', + "varpropto;": '\U0000221D', + "varr;": '\U00002195', + "varrho;": '\U000003F1', + "varsigma;": '\U000003C2', + "vartheta;": '\U000003D1', + "vartriangleleft;": '\U000022B2', + "vartriangleright;": '\U000022B3', + "vcy;": '\U00000432', + "vdash;": '\U000022A2', + "vee;": '\U00002228', + "veebar;": '\U000022BB', + "veeeq;": '\U0000225A', + "vellip;": '\U000022EE', + "verbar;": '\U0000007C', + "vert;": '\U0000007C', + "vfr;": '\U0001D533', + "vltri;": '\U000022B2', + "vopf;": '\U0001D567', + "vprop;": '\U0000221D', + "vrtri;": '\U000022B3', + "vscr;": '\U0001D4CB', + "vzigzag;": '\U0000299A', + "wcirc;": '\U00000175', + "wedbar;": '\U00002A5F', + "wedge;": '\U00002227', + "wedgeq;": '\U00002259', + "weierp;": '\U00002118', + "wfr;": '\U0001D534', + "wopf;": '\U0001D568', + "wp;": '\U00002118', + "wr;": '\U00002240', + "wreath;": '\U00002240', + "wscr;": '\U0001D4CC', + "xcap;": '\U000022C2', + "xcirc;": '\U000025EF', + "xcup;": '\U000022C3', + "xdtri;": '\U000025BD', + "xfr;": '\U0001D535', + "xhArr;": '\U000027FA', + "xharr;": '\U000027F7', + "xi;": '\U000003BE', + "xlArr;": '\U000027F8', + "xlarr;": '\U000027F5', + "xmap;": '\U000027FC', + "xnis;": '\U000022FB', + "xodot;": '\U00002A00', + "xopf;": '\U0001D569', + "xoplus;": '\U00002A01', + "xotime;": '\U00002A02', + "xrArr;": '\U000027F9', + "xrarr;": '\U000027F6', + "xscr;": '\U0001D4CD', + "xsqcup;": '\U00002A06', + "xuplus;": '\U00002A04', + "xutri;": '\U000025B3', + "xvee;": '\U000022C1', + "xwedge;": '\U000022C0', + "yacute;": '\U000000FD', + "yacy;": '\U0000044F', + "ycirc;": '\U00000177', + "ycy;": '\U0000044B', + "yen;": '\U000000A5', + "yfr;": '\U0001D536', + "yicy;": '\U00000457', + "yopf;": '\U0001D56A', + "yscr;": '\U0001D4CE', + "yucy;": '\U0000044E', + "yuml;": '\U000000FF', + "zacute;": '\U0000017A', + "zcaron;": '\U0000017E', + "zcy;": '\U00000437', + "zdot;": '\U0000017C', + "zeetrf;": '\U00002128', + "zeta;": '\U000003B6', + "zfr;": '\U0001D537', + "zhcy;": '\U00000436', + "zigrarr;": '\U000021DD', + "zopf;": '\U0001D56B', + "zscr;": '\U0001D4CF', + "zwj;": '\U0000200D', + "zwnj;": '\U0000200C', + "AElig": '\U000000C6', + "AMP": '\U00000026', + "Aacute": '\U000000C1', + "Acirc": '\U000000C2', + "Agrave": '\U000000C0', + "Aring": '\U000000C5', + "Atilde": '\U000000C3', + "Auml": '\U000000C4', + "COPY": '\U000000A9', + "Ccedil": '\U000000C7', + "ETH": '\U000000D0', + "Eacute": '\U000000C9', + "Ecirc": '\U000000CA', + "Egrave": '\U000000C8', + "Euml": '\U000000CB', + "GT": '\U0000003E', + "Iacute": '\U000000CD', + "Icirc": '\U000000CE', + "Igrave": '\U000000CC', + "Iuml": '\U000000CF', + "LT": '\U0000003C', + "Ntilde": '\U000000D1', + "Oacute": '\U000000D3', + "Ocirc": '\U000000D4', + "Ograve": '\U000000D2', + "Oslash": '\U000000D8', + "Otilde": '\U000000D5', + "Ouml": '\U000000D6', + "QUOT": '\U00000022', + "REG": '\U000000AE', + "THORN": '\U000000DE', + "Uacute": '\U000000DA', + "Ucirc": '\U000000DB', + "Ugrave": '\U000000D9', + "Uuml": '\U000000DC', + "Yacute": '\U000000DD', + "aacute": '\U000000E1', + "acirc": '\U000000E2', + "acute": '\U000000B4', + "aelig": '\U000000E6', + "agrave": '\U000000E0', + "amp": '\U00000026', + "aring": '\U000000E5', + "atilde": '\U000000E3', + "auml": '\U000000E4', + "brvbar": '\U000000A6', + "ccedil": '\U000000E7', + "cedil": '\U000000B8', + "cent": '\U000000A2', + "copy": '\U000000A9', + "curren": '\U000000A4', + "deg": '\U000000B0', + "divide": '\U000000F7', + "eacute": '\U000000E9', + "ecirc": '\U000000EA', + "egrave": '\U000000E8', + "eth": '\U000000F0', + "euml": '\U000000EB', + "frac12": '\U000000BD', + "frac14": '\U000000BC', + "frac34": '\U000000BE', + "gt": '\U0000003E', + "iacute": '\U000000ED', + "icirc": '\U000000EE', + "iexcl": '\U000000A1', + "igrave": '\U000000EC', + "iquest": '\U000000BF', + "iuml": '\U000000EF', + "laquo": '\U000000AB', + "lt": '\U0000003C', + "macr": '\U000000AF', + "micro": '\U000000B5', + "middot": '\U000000B7', + "nbsp": '\U000000A0', + "not": '\U000000AC', + "ntilde": '\U000000F1', + "oacute": '\U000000F3', + "ocirc": '\U000000F4', + "ograve": '\U000000F2', + "ordf": '\U000000AA', + "ordm": '\U000000BA', + "oslash": '\U000000F8', + "otilde": '\U000000F5', + "ouml": '\U000000F6', + "para": '\U000000B6', + "plusmn": '\U000000B1', + "pound": '\U000000A3', + "quot": '\U00000022', + "raquo": '\U000000BB', + "reg": '\U000000AE', + "sect": '\U000000A7', + "shy": '\U000000AD', + "sup1": '\U000000B9', + "sup2": '\U000000B2', + "sup3": '\U000000B3', + "szlig": '\U000000DF', + "thorn": '\U000000FE', + "times": '\U000000D7', + "uacute": '\U000000FA', + "ucirc": '\U000000FB', + "ugrave": '\U000000F9', + "uml": '\U000000A8', + "uuml": '\U000000FC', + "yacute": '\U000000FD', + "yen": '\U000000A5', + "yuml": '\U000000FF', } // HTML entities that are two unicode codepoints. diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go index d3b3844099bf..01477a96397c 100644 --- a/vendor/golang.org/x/net/html/foreign.go +++ b/vendor/golang.org/x/net/html/foreign.go @@ -67,7 +67,7 @@ func mathMLTextIntegrationPoint(n *Node) bool { return false } -// Section 12.2.5.5. +// Section 12.2.6.5. var breakout = map[string]bool{ "b": true, "big": true, @@ -115,7 +115,7 @@ var breakout = map[string]bool{ "var": true, } -// Section 12.2.5.5. +// Section 12.2.6.5. var svgTagNameAdjustments = map[string]string{ "altglyph": "altGlyph", "altglyphdef": "altGlyphDef", @@ -155,7 +155,7 @@ var svgTagNameAdjustments = map[string]string{ "textpath": "textPath", } -// Section 12.2.5.1 +// Section 12.2.6.1 var mathMLAttributeAdjustments = map[string]string{ "definitionurl": "definitionURL", } diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go index 26b657aec83b..633ee15dc55b 100644 --- a/vendor/golang.org/x/net/html/node.go +++ b/vendor/golang.org/x/net/html/node.go @@ -21,9 +21,10 @@ const ( scopeMarkerNode ) -// Section 12.2.3.3 says "scope markers are inserted when entering applet -// elements, buttons, object elements, marquees, table cells, and table -// captions, and are used to prevent formatting from 'leaking'". +// Section 12.2.4.3 says "The markers are inserted when entering applet, +// object, marquee, template, td, th, and caption elements, and are used +// to prevent formatting from "leaking" into applet, object, marquee, +// template, td, th, and caption elements". var scopeMarker = Node{Type: scopeMarkerNode} // A Node consists of a NodeType and some Data (tag name for element nodes, @@ -173,6 +174,16 @@ func (s *nodeStack) index(n *Node) int { return -1 } +// contains returns whether a is within s. +func (s *nodeStack) contains(a atom.Atom) bool { + for _, n := range *s { + if n.DataAtom == a && n.Namespace == "" { + return true + } + } + return false +} + // insert inserts a node at the given index. func (s *nodeStack) insert(i int, n *Node) { (*s) = append(*s, nil) @@ -191,3 +202,19 @@ func (s *nodeStack) remove(n *Node) { (*s)[j] = nil *s = (*s)[:j] } + +type insertionModeStack []insertionMode + +func (s *insertionModeStack) pop() (im insertionMode) { + i := len(*s) + im = (*s)[i-1] + *s = (*s)[:i-1] + return im +} + +func (s *insertionModeStack) top() insertionMode { + if i := len(*s); i > 0 { + return (*s)[i-1] + } + return nil +} diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index be4b2bf5aa9e..1d3c198ae7d2 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -25,20 +25,22 @@ type parser struct { hasSelfClosingToken bool // doc is the document root element. doc *Node - // The stack of open elements (section 12.2.3.2) and active formatting - // elements (section 12.2.3.3). + // The stack of open elements (section 12.2.4.2) and active formatting + // elements (section 12.2.4.3). oe, afe nodeStack - // Element pointers (section 12.2.3.4). + // Element pointers (section 12.2.4.4). head, form *Node - // Other parsing state flags (section 12.2.3.5). + // Other parsing state flags (section 12.2.4.5). scripting, framesetOK bool + // The stack of template insertion modes + templateStack insertionModeStack // im is the current insertion mode. im insertionMode // originalIM is the insertion mode to go back to after completing a text // or inTableText insertion mode. originalIM insertionMode // fosterParenting is whether new elements should be inserted according to - // the foster parenting rules (section 12.2.5.3). + // the foster parenting rules (section 12.2.6.1). fosterParenting bool // quirks is whether the parser is operating in "quirks mode." quirks bool @@ -56,7 +58,7 @@ func (p *parser) top() *Node { return p.doc } -// Stop tags for use in popUntil. These come from section 12.2.3.2. +// Stop tags for use in popUntil. These come from section 12.2.4.2. var ( defaultScopeStopTags = map[string][]a.Atom{ "": {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template}, @@ -79,7 +81,7 @@ const ( // popUntil pops the stack of open elements at the highest element whose tag // is in matchTags, provided there is no higher element in the scope's stop -// tags (as defined in section 12.2.3.2). It returns whether or not there was +// tags (as defined in section 12.2.4.2). It returns whether or not there was // such an element. If there was not, popUntil leaves the stack unchanged. // // For example, the set of stop tags for table scope is: "html", "table". If @@ -126,7 +128,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { return -1 } case tableScope: - if tagAtom == a.Html || tagAtom == a.Table { + if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template { return -1 } case selectScope: @@ -162,17 +164,17 @@ func (p *parser) clearStackToContext(s scope) { tagAtom := p.oe[i].DataAtom switch s { case tableScope: - if tagAtom == a.Html || tagAtom == a.Table { + if tagAtom == a.Html || tagAtom == a.Table || tagAtom == a.Template { p.oe = p.oe[:i+1] return } case tableRowScope: - if tagAtom == a.Html || tagAtom == a.Tr { + if tagAtom == a.Html || tagAtom == a.Tr || tagAtom == a.Template { p.oe = p.oe[:i+1] return } case tableBodyScope: - if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead { + if tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead || tagAtom == a.Template { p.oe = p.oe[:i+1] return } @@ -183,7 +185,7 @@ func (p *parser) clearStackToContext(s scope) { } // generateImpliedEndTags pops nodes off the stack of open elements as long as -// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt. +// the top node has a tag name of dd, dt, li, optgroup, option, p, rb, rp, rt or rtc. // If exceptions are specified, nodes with that name will not be popped off. func (p *parser) generateImpliedEndTags(exceptions ...string) { var i int @@ -192,7 +194,7 @@ loop: n := p.oe[i] if n.Type == ElementNode { switch n.DataAtom { - case a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt: + case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc: for _, except := range exceptions { if n.Data == except { break loop @@ -234,9 +236,9 @@ func (p *parser) shouldFosterParent() bool { } // fosterParent adds a child node according to the foster parenting rules. -// Section 12.2.5.3, "foster parenting". +// Section 12.2.6.1, "foster parenting". func (p *parser) fosterParent(n *Node) { - var table, parent, prev *Node + var table, parent, prev, template *Node var i int for i = len(p.oe) - 1; i >= 0; i-- { if p.oe[i].DataAtom == a.Table { @@ -245,6 +247,19 @@ func (p *parser) fosterParent(n *Node) { } } + var j int + for j = len(p.oe) - 1; j >= 0; j-- { + if p.oe[j].DataAtom == a.Template { + template = p.oe[j] + break + } + } + + if template != nil && (table == nil || j > i) { + template.AppendChild(n) + return + } + if table == nil { // The foster parent is the html element. parent = p.oe[0] @@ -304,7 +319,7 @@ func (p *parser) addElement() { }) } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) addFormattingElement() { tagAtom, attr := p.tok.DataAtom, p.tok.Attr p.addElement() @@ -351,7 +366,7 @@ findIdenticalElements: p.afe = append(p.afe, p.top()) } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) clearActiveFormattingElements() { for { n := p.afe.pop() @@ -361,7 +376,7 @@ func (p *parser) clearActiveFormattingElements() { } } -// Section 12.2.3.3. +// Section 12.2.4.3. func (p *parser) reconstructActiveFormattingElements() { n := p.afe.top() if n == nil { @@ -390,12 +405,12 @@ func (p *parser) reconstructActiveFormattingElements() { } } -// Section 12.2.4. +// Section 12.2.5. func (p *parser) acknowledgeSelfClosingTag() { p.hasSelfClosingToken = false } -// An insertion mode (section 12.2.3.1) is the state transition function from +// An insertion mode (section 12.2.4.1) is the state transition function from // a particular state in the HTML5 parser's state machine. It updates the // parser's fields depending on parser.tok (where ErrorToken means EOF). // It returns whether the token was consumed. @@ -403,7 +418,7 @@ type insertionMode func(*parser) bool // setOriginalIM sets the insertion mode to return to after completing a text or // inTableText insertion mode. -// Section 12.2.3.1, "using the rules for". +// Section 12.2.4.1, "using the rules for". func (p *parser) setOriginalIM() { if p.originalIM != nil { panic("html: bad parser state: originalIM was set twice") @@ -411,18 +426,35 @@ func (p *parser) setOriginalIM() { p.originalIM = p.im } -// Section 12.2.3.1, "reset the insertion mode". +// Section 12.2.4.1, "reset the insertion mode". func (p *parser) resetInsertionMode() { for i := len(p.oe) - 1; i >= 0; i-- { n := p.oe[i] - if i == 0 && p.context != nil { + last := i == 0 + if last && p.context != nil { n = p.context } switch n.DataAtom { case a.Select: + if !last { + for ancestor, first := n, p.oe[0]; ancestor != first; { + ancestor = p.oe[p.oe.index(ancestor)-1] + switch ancestor.DataAtom { + case a.Template: + p.im = inSelectIM + return + case a.Table: + p.im = inSelectInTableIM + return + } + } + } p.im = inSelectIM case a.Td, a.Th: + // TODO: remove this divergence from the HTML5 spec. + // + // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668 p.im = inCellIM case a.Tr: p.im = inRowIM @@ -434,25 +466,41 @@ func (p *parser) resetInsertionMode() { p.im = inColumnGroupIM case a.Table: p.im = inTableIM + case a.Template: + // TODO: remove this divergence from the HTML5 spec. + if n.Namespace != "" { + continue + } + p.im = p.templateStack.top() case a.Head: - p.im = inBodyIM + // TODO: remove this divergence from the HTML5 spec. + // + // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668 + p.im = inHeadIM case a.Body: p.im = inBodyIM case a.Frameset: p.im = inFramesetIM case a.Html: - p.im = beforeHeadIM + if p.head == nil { + p.im = beforeHeadIM + } else { + p.im = afterHeadIM + } default: + if last { + p.im = inBodyIM + return + } continue } return } - p.im = inBodyIM } const whitespace = " \t\r\n\f" -// Section 12.2.5.4.1. +// Section 12.2.6.4.1. func initialIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -479,7 +527,7 @@ func initialIM(p *parser) bool { return false } -// Section 12.2.5.4.2. +// Section 12.2.6.4.2. func beforeHTMLIM(p *parser) bool { switch p.tok.Type { case DoctypeToken: @@ -517,7 +565,7 @@ func beforeHTMLIM(p *parser) bool { return false } -// Section 12.2.5.4.3. +// Section 12.2.6.4.3. func beforeHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -560,7 +608,7 @@ func beforeHeadIM(p *parser) bool { return false } -// Section 12.2.5.4.4. +// Section 12.2.6.4.4. func inHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -590,19 +638,41 @@ func inHeadIM(p *parser) bool { case a.Head: // Ignore the token. return true + case a.Template: + p.addElement() + p.afe = append(p.afe, &scopeMarker) + p.framesetOK = false + p.im = inTemplateIM + p.templateStack = append(p.templateStack, inTemplateIM) + return true } case EndTagToken: switch p.tok.DataAtom { case a.Head: - n := p.oe.pop() - if n.DataAtom != a.Head { - panic("html: bad parser state: element not found, in the in-head insertion mode") - } + p.oe.pop() p.im = afterHeadIM return true case a.Body, a.Html, a.Br: p.parseImpliedToken(EndTagToken, a.Head, a.Head.String()) return false + case a.Template: + if !p.oe.contains(a.Template) { + return true + } + // TODO: remove this divergence from the HTML5 spec. + // + // See https://bugs.chromium.org/p/chromium/issues/detail?id=829668 + p.generateImpliedEndTags() + for i := len(p.oe) - 1; i >= 0; i-- { + if n := p.oe[i]; n.Namespace == "" && n.DataAtom == a.Template { + p.oe = p.oe[:i] + break + } + } + p.clearActiveFormattingElements() + p.templateStack.pop() + p.resetInsertionMode() + return true default: // Ignore the token. return true @@ -622,7 +692,7 @@ func inHeadIM(p *parser) bool { return false } -// Section 12.2.5.4.6. +// Section 12.2.6.4.6. func afterHeadIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -648,7 +718,7 @@ func afterHeadIM(p *parser) bool { p.addElement() p.im = inFramesetIM return true - case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title: + case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: p.oe = append(p.oe, p.head) defer p.oe.remove(p.head) return inHeadIM(p) @@ -660,6 +730,8 @@ func afterHeadIM(p *parser) bool { switch p.tok.DataAtom { case a.Body, a.Html, a.Br: // Drop down to creating an implied tag. + case a.Template: + return inHeadIM(p) default: // Ignore the token. return true @@ -697,7 +769,7 @@ func copyAttributes(dst *Node, src Token) { } } -// Section 12.2.5.4.7. +// Section 12.2.6.4.7. func inBodyIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -727,10 +799,16 @@ func inBodyIM(p *parser) bool { case StartTagToken: switch p.tok.DataAtom { case a.Html: + if p.oe.contains(a.Template) { + return true + } copyAttributes(p.oe[0], p.tok) - case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title: + case a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: return inHeadIM(p) case a.Body: + if p.oe.contains(a.Template) { + return true + } if len(p.oe) >= 2 { body := p.oe[1] if body.Type == ElementNode && body.DataAtom == a.Body { @@ -767,9 +845,13 @@ func inBodyIM(p *parser) bool { // The newline, if any, will be dealt with by the TextToken case. p.framesetOK = false case a.Form: - if p.form == nil { - p.popUntil(buttonScope, a.P) - p.addElement() + if p.form != nil && !p.oe.contains(a.Template) { + // Ignore the token + return true + } + p.popUntil(buttonScope, a.P) + p.addElement() + if !p.oe.contains(a.Template) { p.form = p.top() } case a.Li: @@ -819,7 +901,7 @@ func inBodyIM(p *parser) bool { case a.A: for i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- { if n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A { - p.inBodyEndTagFormatting(a.A) + p.inBodyEndTagFormatting(a.A, "a") p.oe.remove(n) p.afe.remove(n) break @@ -833,7 +915,7 @@ func inBodyIM(p *parser) bool { case a.Nobr: p.reconstructActiveFormattingElements() if p.elementInScope(defaultScope, a.Nobr) { - p.inBodyEndTagFormatting(a.Nobr) + p.inBodyEndTagFormatting(a.Nobr, "nobr") p.reconstructActiveFormattingElements() } p.addFormattingElement() @@ -903,6 +985,14 @@ func inBodyIM(p *parser) bool { p.acknowledgeSelfClosingTag() p.popUntil(buttonScope, a.P) p.parseImpliedToken(StartTagToken, a.Form, a.Form.String()) + if p.form == nil { + // NOTE: The 'isindex' element has been removed, + // and the 'template' element has not been designed to be + // collaborative with the index element. + // + // Ignore the token. + return true + } if action != "" { p.form.Attr = []Attribute{{Key: "action", Val: action}} } @@ -952,11 +1042,16 @@ func inBodyIM(p *parser) bool { } p.reconstructActiveFormattingElements() p.addElement() - case a.Rp, a.Rt: + case a.Rb, a.Rtc: if p.elementInScope(defaultScope, a.Ruby) { p.generateImpliedEndTags() } p.addElement() + case a.Rp, a.Rt: + if p.elementInScope(defaultScope, a.Ruby) { + p.generateImpliedEndTags("rtc") + } + p.addElement() case a.Math, a.Svg: p.reconstructActiveFormattingElements() if p.tok.DataAtom == a.Math { @@ -993,15 +1088,29 @@ func inBodyIM(p *parser) bool { case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul: p.popUntil(defaultScope, p.tok.DataAtom) case a.Form: - node := p.form - p.form = nil - i := p.indexOfElementInScope(defaultScope, a.Form) - if node == nil || i == -1 || p.oe[i] != node { - // Ignore the token. - return true + if p.oe.contains(a.Template) { + i := p.indexOfElementInScope(defaultScope, a.Form) + if i == -1 { + // Ignore the token. + return true + } + p.generateImpliedEndTags() + if p.oe[i].DataAtom != a.Form { + // Ignore the token. + return true + } + p.popUntil(defaultScope, a.Form) + } else { + node := p.form + p.form = nil + i := p.indexOfElementInScope(defaultScope, a.Form) + if node == nil || i == -1 || p.oe[i] != node { + // Ignore the token. + return true + } + p.generateImpliedEndTags() + p.oe.remove(node) } - p.generateImpliedEndTags() - p.oe.remove(node) case a.P: if !p.elementInScope(buttonScope, a.P) { p.parseImpliedToken(StartTagToken, a.P, a.P.String()) @@ -1014,7 +1123,7 @@ func inBodyIM(p *parser) bool { case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6: p.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6) case a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U: - p.inBodyEndTagFormatting(p.tok.DataAtom) + p.inBodyEndTagFormatting(p.tok.DataAtom, p.tok.Data) case a.Applet, a.Marquee, a.Object: if p.popUntil(defaultScope, p.tok.DataAtom) { p.clearActiveFormattingElements() @@ -1022,20 +1131,37 @@ func inBodyIM(p *parser) bool { case a.Br: p.tok.Type = StartTagToken return false + case a.Template: + return inHeadIM(p) default: - p.inBodyEndTagOther(p.tok.DataAtom) + p.inBodyEndTagOther(p.tok.DataAtom, p.tok.Data) } case CommentToken: p.addChild(&Node{ Type: CommentNode, Data: p.tok.Data, }) + case ErrorToken: + // TODO: remove this divergence from the HTML5 spec. + if len(p.templateStack) > 0 { + p.im = inTemplateIM + return false + } else { + for _, e := range p.oe { + switch e.DataAtom { + case a.Dd, a.Dt, a.Li, a.Optgroup, a.Option, a.P, a.Rb, a.Rp, a.Rt, a.Rtc, a.Tbody, a.Td, a.Tfoot, a.Th, + a.Thead, a.Tr, a.Body, a.Html: + default: + return true + } + } + } } return true } -func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) { +func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom, tagName string) { // This is the "adoption agency" algorithm, described at // https://html.spec.whatwg.org/multipage/syntax.html#adoptionAgency @@ -1057,7 +1183,7 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) { } } if formattingElement == nil { - p.inBodyEndTagOther(tagAtom) + p.inBodyEndTagOther(tagAtom, tagName) return } feIndex := p.oe.index(formattingElement) @@ -1160,11 +1286,19 @@ func (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) { } // inBodyEndTagOther performs the "any other end tag" algorithm for inBodyIM. -// "Any other end tag" handling from 12.2.5.5 The rules for parsing tokens in foreign content +// "Any other end tag" handling from 12.2.6.5 The rules for parsing tokens in foreign content // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign -func (p *parser) inBodyEndTagOther(tagAtom a.Atom) { +func (p *parser) inBodyEndTagOther(tagAtom a.Atom, tagName string) { for i := len(p.oe) - 1; i >= 0; i-- { - if p.oe[i].DataAtom == tagAtom { + // Two element nodes have the same tag if they have the same Data (a + // string-typed field). As an optimization, for common HTML tags, each + // Data string is assigned a unique, non-zero DataAtom (a uint32-typed + // field), since integer comparison is faster than string comparison. + // Uncommon (custom) tags get a zero DataAtom. + // + // The if condition here is equivalent to (p.oe[i].Data == tagName). + if (p.oe[i].DataAtom == tagAtom) && + ((tagAtom != 0) || (p.oe[i].Data == tagName)) { p.oe = p.oe[:i] break } @@ -1174,7 +1308,7 @@ func (p *parser) inBodyEndTagOther(tagAtom a.Atom) { } } -// Section 12.2.5.4.8. +// Section 12.2.6.4.8. func textIM(p *parser) bool { switch p.tok.Type { case ErrorToken: @@ -1203,12 +1337,9 @@ func textIM(p *parser) bool { return p.tok.Type == EndTagToken } -// Section 12.2.5.4.9. +// Section 12.2.6.4.9. func inTableIM(p *parser) bool { switch p.tok.Type { - case ErrorToken: - // Stop parsing. - return true case TextToken: p.tok.Data = strings.Replace(p.tok.Data, "\x00", "", -1) switch p.oe.top().DataAtom { @@ -1249,7 +1380,7 @@ func inTableIM(p *parser) bool { } // Ignore the token. return true - case a.Style, a.Script: + case a.Style, a.Script, a.Template: return inHeadIM(p) case a.Input: for _, t := range p.tok.Attr { @@ -1261,7 +1392,7 @@ func inTableIM(p *parser) bool { } // Otherwise drop down to the default action. case a.Form: - if p.form != nil { + if p.oe.contains(a.Template) || p.form != nil { // Ignore the token. return true } @@ -1291,6 +1422,8 @@ func inTableIM(p *parser) bool { case a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr: // Ignore the token. return true + case a.Template: + return inHeadIM(p) } case CommentToken: p.addChild(&Node{ @@ -1301,6 +1434,8 @@ func inTableIM(p *parser) bool { case DoctypeToken: // Ignore the token. return true + case ErrorToken: + return inBodyIM(p) } p.fosterParenting = true @@ -1309,7 +1444,7 @@ func inTableIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.11. +// Section 12.2.6.4.11. func inCaptionIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1355,7 +1490,7 @@ func inCaptionIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.12. +// Section 12.2.6.4.12. func inColumnGroupIM(p *parser) bool { switch p.tok.Type { case TextToken: @@ -1386,11 +1521,13 @@ func inColumnGroupIM(p *parser) bool { p.oe.pop() p.acknowledgeSelfClosingTag() return true + case a.Template: + return inHeadIM(p) } case EndTagToken: switch p.tok.DataAtom { case a.Colgroup: - if p.oe.top().DataAtom != a.Html { + if p.oe.top().DataAtom == a.Colgroup { p.oe.pop() p.im = inTableIM } @@ -1398,17 +1535,21 @@ func inColumnGroupIM(p *parser) bool { case a.Col: // Ignore the token. return true + case a.Template: + return inHeadIM(p) } + case ErrorToken: + return inBodyIM(p) } - if p.oe.top().DataAtom != a.Html { - p.oe.pop() - p.im = inTableIM - return false + if p.oe.top().DataAtom != a.Colgroup { + return true } - return true + p.oe.pop() + p.im = inTableIM + return false } -// Section 12.2.5.4.13. +// Section 12.2.6.4.13. func inTableBodyIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1460,7 +1601,7 @@ func inTableBodyIM(p *parser) bool { return inTableIM(p) } -// Section 12.2.5.4.14. +// Section 12.2.6.4.14. func inRowIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1511,7 +1652,7 @@ func inRowIM(p *parser) bool { return inTableIM(p) } -// Section 12.2.5.4.15. +// Section 12.2.6.4.15. func inCellIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1560,12 +1701,9 @@ func inCellIM(p *parser) bool { return inBodyIM(p) } -// Section 12.2.5.4.16. +// Section 12.2.6.4.16. func inSelectIM(p *parser) bool { switch p.tok.Type { - case ErrorToken: - // Stop parsing. - return true case TextToken: p.addText(strings.Replace(p.tok.Data, "\x00", "", -1)) case StartTagToken: @@ -1586,8 +1724,12 @@ func inSelectIM(p *parser) bool { } p.addElement() case a.Select: - p.tok.Type = EndTagToken - return false + if p.popUntil(selectScope, a.Select) { + p.resetInsertionMode() + } else { + // Ignore the token. + return true + } case a.Input, a.Keygen, a.Textarea: if p.elementInScope(selectScope, a.Select) { p.parseImpliedToken(EndTagToken, a.Select, a.Select.String()) @@ -1597,7 +1739,7 @@ func inSelectIM(p *parser) bool { p.tokenizer.NextIsNotRawText() // Ignore the token. return true - case a.Script: + case a.Script, a.Template: return inHeadIM(p) } case EndTagToken: @@ -1617,7 +1759,12 @@ func inSelectIM(p *parser) bool { case a.Select: if p.popUntil(selectScope, a.Select) { p.resetInsertionMode() + } else { + // Ignore the token. + return true } + case a.Template: + return inHeadIM(p) } case CommentToken: p.addChild(&Node{ @@ -1627,30 +1774,107 @@ func inSelectIM(p *parser) bool { case DoctypeToken: // Ignore the token. return true + case ErrorToken: + return inBodyIM(p) } return true } -// Section 12.2.5.4.17. +// Section 12.2.6.4.17. func inSelectInTableIM(p *parser) bool { switch p.tok.Type { case StartTagToken, EndTagToken: switch p.tok.DataAtom { case a.Caption, a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr, a.Td, a.Th: - if p.tok.Type == StartTagToken || p.elementInScope(tableScope, p.tok.DataAtom) { - p.parseImpliedToken(EndTagToken, a.Select, a.Select.String()) - return false - } else { + if p.tok.Type == EndTagToken && !p.elementInScope(tableScope, p.tok.DataAtom) { // Ignore the token. return true } + // This is like p.popUntil(selectScope, a.Select), but it also + // matches , not just